%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 ''eC1pY29uIiBocmVmPSJpbWFnZXMvZmF2aWNvbi5pY28iLz4KICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0eWxlcy43ZmI0MTRlZjBhY2VhNjRiLmNzcyI+PC9oZWFkPgoKICA8IS0tCiAgICAjIyBTQVNKUyBBZGFwdGVyIGNvbmZpZyBkZXRhaWxzICMjCgogICAgKiBhcHBMb2M6''@;'; put 'put ''IFRoZSBsb2NhdGlvbiBpbiBtZXRhZGF0YSBvciBTQVMgZHJpdmUgd2hlcmUgREMgd2lsbCBiZSBkZXBsb3llZAogICAgKiBzZXJ2ZXJUeXBlOiBlaXRoZXIgU0FTOSwgU0FTVklZQSBvciBTQVNKUwogICAgKiBsb2dpbk1lY2hhbmlzbTogVXNlICdEZWZhdWx0JyBmb3IgcmVndWxhciAodXNl''@;'; put 'put ''ci9wYXNzKSBsb2dpbnMsIG9yICdSZWRpcmVjdGVkJyBmb3IgMkZBL1NTTwogICAgKiBkZWJ1ZzogV2hldGhlciB0byBlbmFibGUgZGVidWcgb24gc3RhcnR1cAoKICAgICMjIFZpeWEgb25seSBzZXR0aW5ncyAjIwogICAgKiBhZG1pbkdyb3VwOiBUaGlzIGdyb3VwIHdpbGwgaGF2ZSB1bnJl''@;'; put 'put ''c3RyaWN0ZWQgYWNjZXNzIChWaXlhIE9ubHkpCiAgICAqIGRjUGF0aDogVGhlIHBoeXNpY2FsIGxvY2F0aW9uIGluIHdoaWNoIHRvIGRlcGxveSB0aGUgc3RhZ2luZyBhcmVhIChWaXlhIG9ubHkpCiAgICAqIHVzZUNvbXB1dGVBcGk6IENvbm5lY3Rpb24gbWV0aG9kIChWaXlhIG9ubHkpCiAg''@;'; put 'put ''ICAqIGNvbnRleHROYW1lOiBDb21wdXRlIENvbnRleHQgKFZpeWEgb25seSkKCiAgLS0+CgogIDxzYXNqcyBzZXJ2ZXJ1cmw9IiIgYXBwbG9jPSIvUHVibGljL2FwcC9kYyIgc2VydmVydHlwZT0iU0FTSlMiIGxvZ2lubWVjaGFuaXNtPSJEZWZhdWx0IiBkZWJ1Zz0iZmFsc2UiIHVzZWNvbXB1''@;'; put 'put ''dGVhcGk9InRydWUiIGNvbnRleHRuYW1lPSJTQVMgSm9iIEV4ZWN1dGlvbiBjb21wdXRlIGNvbnRleHQiIGFkbWluZ3JvdXA9InNlYy1zYXM5LXByZC1pbnQtc2FzcGxhdGZvcm0tMzAwMTE0c2FzanMiIGRjcGF0aD0iL3RtcC9kYyIgaG90bGljZW5jZWtleT0ibm9uLWNvbW1lcmNpYWwtYW5k''@;'; put 'put ''LWV2YWx1YXRpb24iPgogIDwvc2FzanM+CgogIDxib2R5IGNkcy10aGVtZT0ibGlnaHQiIGNsYXNzPSJtLTAiPgogICAgPG15LWFwcD48L215LWFwcD4KICA8c2NyaXB0IHNyYz0icnVudGltZS40MDJmYzNjZmJjN2UxYmQ0LmpzIiB0eXBlPSJtb2R1bGUiPjwvc2NyaXB0PjxzY3JpcHQgc3Jj''@;'; put 'put ''PSJwb2x5ZmlsbHMuZGYyN2EyNDY1NDBlYTVlZS5qcyIgdHlwZT0ibW9kdWxlIj48L3NjcmlwdD48c2NyaXB0IHNyYz0ic2NyaXB0cy5mNDE4ZDdlNzFkYmZkMzA5LmpzIiBkZWZlcj48L3NjcmlwdD48c2NyaXB0IHNyYz0ibWFpbi41NGY0ZmY3YzAwNTY0ZGE0LmpzIiB0eXBlPSJtb2R1bGUi''@;'; put 'put ''Pjwvc2NyaXB0PjwvYm9keT4KPC9odG1sPgo='';'; run; %mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) filename sascode clear; %let service=main.54f4ff7c00564da4-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 ''KHNlbGYud2VicGFja0NodW5rZGF0YWNvbnRyb2xsZXI9c2VsZi53ZWJwYWNrQ2h1bmtkYXRhY29udHJvbGxlcnx8W10pLnB1c2goW1s3OTJdLHszNzQ4MjpmdW5jdGlvbih1ZSl7dWUuZXhwb3J0cz1mdW5jdGlvbihxKXt2YXIgXz17fTtmdW5jdGlvbiBJKHkpe2lmKF9beV0pcmV0dXJuIF9b''@;'; put 'put ''eV0uZXhwb3J0czt2YXIgZz1fW3ldPXtpOnksbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gcVt5XS5jYWxsKGcuZXhwb3J0cyxnLGcuZXhwb3J0cyxJKSxnLmw9ITAsZy5leHBvcnRzfXJldHVybiBJLm09cSxJLmM9XyxJLmQ9ZnVuY3Rpb24oeSxnLEIpe0kubyh5LGcpfHxPYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkoeSxnLHtlbnVtZXJhYmxlOiEwLGdldDpCfSl9LEkucj1mdW5jdGlvbih5KXt0eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoeSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KHksIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxJLnQ9ZnVuY3Rpb24oeSxnKXtpZigxJmcmJih5PUkoeSkpLDgmZ3x8NCZnJiYib2JqZWN0Ij09dHlwZW9mIHkmJnkmJnkuX19lc01vZHVsZSlyZXR1cm4geTt2YXIgQj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKEkucihCKSxP''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoQiwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6eX0pLDImZyYmInN0cmluZyIhPXR5cGVvZiB5KWZvcih2YXIgdyBpbiB5KUkuZChCLHcsZnVuY3Rpb24oUCl7cmV0dXJuIHlbUF19LmJpbmQobnVsbCx3KSk7cmV0dXJuIEJ9LEkubj1mdW5jdGlv''@;'; put 'put ''bih5KXt2YXIgZz15JiZ5Ll9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4geS5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiB5fTtyZXR1cm4gSS5kKGcsImEiLGcpLGd9LEkubz1mdW5jdGlvbih5LGcpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeSxn''@;'; put 'put ''KX0sSS5wPSIiLEkoSS5zPSIuL3Byb2plY3RzL2ljb25zL3NyYy9pbmRleC50cyIpfSh7Ii4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1hcGkudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoq''@;'; put 'put ''KiAuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtYXBpLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24ocSxfLEkpeyJ1c2Ugc3Ry''@;'; put 'put ''aWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoXywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksXy5DbGFyaXR5SWNvbnNBcGk9dm9pZCAwO3ZhciB5PUkoCi8qISAuL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1w''@;'; put 'put ''bGF0ZS1vYnNlcnZlci50cyIpLGc9e30sQj1mdW5jdGlvbigpe2Z1bmN0aW9uIHcoKXt9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3LCJpbnN0YW5jZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB3LnNpbmdsZUluc3RhbmNlfHwody5zaW5nbGVJbnN0YW5jZT1uZXcgdyksdy5zaW5n''@;'; put 'put ''bGVJbnN0YW5jZX0sZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KSx3LnByb3RvdHlwZS52YWxpZGF0ZU5hbWU9ZnVuY3Rpb24oUCl7aWYoMD09PVAubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiU2hhcGUgbmFtZSBvciBhbGlhcyBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyEiKTtp''@;'; put 'put ''ZigvXHMvLnRlc3QoUCkpdGhyb3cgbmV3IEVycm9yKCJTaGFwZSBuYW1lIG9yIGFsaWFzIG11c3Qgbm90IGNvbnRhaW4gYW55IHdoaXRlc3BhY2UgY2hhcmFjdGVycyEiKTtyZXR1cm4hMH0sdy5wcm90b3R5cGUubm9ybWFsaXplU2hhcGVOYW1lPWZ1bmN0aW9uKFApe3JldHVybiBQLnRvTG93''@;'; put 'put ''ZXJDYXNlKCl9LHcucHJvdG90eXBlLnNldEljb25UZW1wbGF0ZT1mdW5jdGlvbihQLEYpe3ZhciBPPUYudHJpbSgpO3RoaXMudmFsaWRhdGVOYW1lKFApJiYoUD10aGlzLm5vcm1hbGl6ZVNoYXBlTmFtZShQKSxnW1BdJiZkZWxldGUgZ1tQXSxnW1BdPU8seS5TaGFwZVRlbXBsYXRlT2JzZXJ2''@;'; put 'put ''ZXIuaW5zdGFuY2UuZW1pdENoYW5nZXMoUCxPKSl9LHcucHJvdG90eXBlLnNldEljb25BbGlhc2VzPWZ1bmN0aW9uKFAsRixPKXtmb3IodmFyIHo9MCxOPU87ejxOLmxlbmd0aDt6Kyspe3ZhciBMPU5bel07dGhpcy52YWxpZGF0ZU5hbWUoTCkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShQLEws''@;'; put 'put ''e2dldDpmdW5jdGlvbigpe3JldHVybiBQW0ZdfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfX0sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKFApe2lmKCJvYmplY3QiIT10eXBlb2YgUCl0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdCBsaXRl''@;'; put 'put ''cmFsIHBhc3NlZCBpbiB0aGUgZm9sbG93aW5nIHBhdHRlcm46XG4gICAgICAgICAgICAgICAgeyAic2hhcGUtbmFtZSI6ICJzaGFwZS10ZW1wbGF0ZSIgfScpO2Zvcih2YXIgRiBpbiBQKVAuaGFzT3duUHJvcGVydHkoRikmJnRoaXMuc2V0SWNvblRlbXBsYXRlKEYsUFtGXSl9LHcucHJvdG90''@;'; put 'put ''eXBlLmhhcz1mdW5jdGlvbihQKXtyZXR1cm4hIWdbdGhpcy5ub3JtYWxpemVTaGFwZU5hbWUoUCldfSx3LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oUCl7aWYoIVApcmV0dXJuIGc7aWYoInN0cmluZyIhPXR5cGVvZiBQKXRocm93IG5ldyBUeXBlRXJyb3IoIk9ubHkgc3RyaW5nIGFyZ3VtZW50''@;'; put 'put ''IGlzIGFsbG93ZWQgaW4gdGhpcyBtZXRob2QuIik7cmV0dXJuIGdbdGhpcy5ub3JtYWxpemVTaGFwZU5hbWUoUCldfSx3LnByb3RvdHlwZS5hbGlhcz1mdW5jdGlvbihQKXtpZigib2JqZWN0IiE9dHlwZW9mIFApdGhyb3cgbmV3IEVycm9yKCdUaGUgYXJndW1lbnQgbXVzdCBiZSBhbiBvYmpl''@;'; put 'put ''Y3QgbGl0ZXJhbCBwYXNzZWQgaW4gdGhlIGZvbGxvd2luZyBwYXR0ZXJuOlxuICAgICAgICAgICAgICAgIHsgInNoYXBlLW5hbWUiOiBbImFsaWFzLW5hbWUiLCAuLi5dIH0nKTtmb3IodmFyIEYgaW4gUClpZihQLmhhc093blByb3BlcnR5KEYpKXtpZighZy5oYXNPd25Qcm9wZXJ0eShGKSl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoJ0FuIGljb24gIicrRisiXCIgeW91IGFyZSB0cnlpbmcgdG8gc2V0IGFsaWFzZXMgdG8gZG9lc24ndCBleGlzdCBpbiB0aGUgQ2xhcml0eSBJY29ucyBzZXRzISIpO3RoaXMuc2V0SWNvbkFsaWFzZXMoZyxGLFBbRl0pfX0sd30oKTtfLkNsYXJpdHlJY29uc0FwaT1C''@;'; put 'put ''fSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWVsZW1lbnQudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWVsZW1lbnQu''@;'; put 'put ''dHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24ocSxfLEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoXywiX19l''@;'; put 'put ''c01vZHVsZSIse3ZhbHVlOiEwfSksXy5DbGFyaXR5SWNvbkVsZW1lbnQ9dm9pZCAwO3ZhciB5PUkoCi8qISAuL2Nsci1pY29ucy1hcGkgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL2Nsci1pY29ucy1hcGkudHMiKSxnPUkoCi8qISAuL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyICov''@;'; put 'put ''CiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zaGFwZS10ZW1wbGF0ZS1vYnNlcnZlci50cyIpLEI9MCx3PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTt3LmNsYXNzTmFtZT0iaXMtb2ZmLXNjcmVlbiI7dmFyIFA9ZnVuY3Rpb24oKXtyZXR1cm4gSFRNTEVsZW1lbnQuYXBwbHko''@;'; put 'put ''dGhpcyxhcmd1bWVudHMpfTtmdW5jdGlvbiBGKCl7dmFyIE89UC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIE8uY2xySWNvblVuaXFJZD0iX2Nscl9pY29uXyIrQixCKyssT30ib2JqZWN0Ij09dHlwZW9mIFJlZmxlY3QmJihQPWZ1bmN0aW9uKCl7cmV0dXJuIFJlZmxlY3QuY29uc3Ry''@;'; put 'put ''dWN0KEhUTUxFbGVtZW50LGFyZ3VtZW50cyx0aGlzLmNvbnN0cnVjdG9yKX0pLF8uQ2xhcml0eUljb25FbGVtZW50PUYsRi5vYnNlcnZlZEF0dHJpYnV0ZXM9WyJzaGFwZSIsInNpemUiLCJ0aXRsZSJdLChGLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEhUTUxFbGVtZW50LnByb3RvdHlwZSx7''@;'; put 'put ''Y29uc3RydWN0b3I6e2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpGfX0pKS5jb25zdHJ1Y3Rvcj1GLEYucHJvdG90eXBlLl9hcHBlbmRDdXN0b21UaXRsZT1mdW5jdGlvbigpe3ZhciBPPXcuY2xvbmVOb2RlKCExKTtPLmlkPXRoaXMuY2xySWNvblVuaXFJZCxPLnRleHRDb250''@;'; put 'put ''ZW50PXRoaXMuY3VycmVudFRpdGxlQXR0clZhbCx0aGlzLmFwcGVuZENoaWxkKE8pfSxGLnByb3RvdHlwZS5fc2V0SWNvblNpemU9ZnVuY3Rpb24oTyl7IU51bWJlcihPKXx8TnVtYmVyKE8pPDA/KHRoaXMuc3R5bGUud2lkdGg9bnVsbCx0aGlzLnN0eWxlLmhlaWdodD1udWxsKToodGhpcy5z''@;'; put 'put ''dHlsZS53aWR0aD1PKyJweCIsdGhpcy5zdHlsZS5oZWlnaHQ9TysicHgiKX0sRi5wcm90b3R5cGUuX25vcm1hbGl6ZVNoYXBlPWZ1bmN0aW9uKE8pe3JldHVybiBPLnNwbGl0KC9ccy8pWzBdLnRvTG93ZXJDYXNlKCl9LEYucHJvdG90eXBlLmNvbm5lY3RlZENhbGxiYWNrPWZ1bmN0aW9uKCl7''@;'; put 'put ''dmFyIE89dGhpcztpZih0aGlzLmdldEF0dHJpYnV0ZSgicm9sZSIpfHx0aGlzLnNldEF0dHJpYnV0ZSgicm9sZSIsIm5vbmUiKSx0aGlzLmhhc0F0dHJpYnV0ZSgic2l6ZSIpKXt2YXIgej10aGlzLmdldEF0dHJpYnV0ZSgic2l6ZSIpO3RoaXMuY3VycmVudFNpemVBdHRyVmFsIT09eiYmKHRo''@;'; put 'put ''aXMuY3VycmVudFNpemVBdHRyVmFsPXosdGhpcy5fc2V0SWNvblNpemUoeikpfWlmKHRoaXMuaGFzQXR0cmlidXRlKCJzaGFwZSIpKXt2YXIgTj10aGlzLl9ub3JtYWxpemVTaGFwZSh0aGlzLmdldEF0dHJpYnV0ZSgic2hhcGUiKSk7aWYodGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlv''@;'; put 'put ''bj1nLlNoYXBlVGVtcGxhdGVPYnNlcnZlci5pbnN0YW5jZS5zdWJzY3JpYmVUbyhOLGZ1bmN0aW9uKFUpe08uX2luamVjdFRlbXBsYXRlKFUpfSksdGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsPU4sIXkuQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmhhcyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJW''@;'; put 'put ''YWwpKXJldHVybiB2b2lkIHRoaXMuX2luamVjdEVycm9yVGVtcGxhdGUoKTt2YXIgTD15LkNsYXJpdHlJY29uc0FwaS5pbnN0YW5jZS5nZXQodGhpcy5jdXJyZW50U2hhcGVBdHRyVmFsKTtpZihMPT09dGhpcy5jdXJyZW50U2hhcGVUZW1wbGF0ZSlyZXR1cm47dGhpcy5jdXJyZW50U2hhcGVU''@;'; put 'put ''ZW1wbGF0ZT1MfWlmKHRoaXMuaGFzQXR0cmlidXRlKCJ0aXRsZSIpKXt2YXIgSz10aGlzLmdldEF0dHJpYnV0ZSgidGl0bGUiKTtpZih0aGlzLmN1cnJlbnRUaXRsZUF0dHJWYWwhPT1LJiYodGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsPUspLCF0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpcmV0''@;'; put 'put ''dXJufXRoaXMuX2luamVjdFRlbXBsYXRlKCl9LEYucHJvdG90eXBlLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaz1mdW5jdGlvbihPLHosTil7dmFyIEw9dGhpcztpZigic2l6ZSI9PT1PJiZ0aGlzLl9zZXRJY29uU2l6ZShOKSwic2hhcGUiPT09Tyl7aWYodGhpcy5jdXJyZW50U2hhcGVBdHRy''@;'; put 'put ''VmFsPXRoaXMuX25vcm1hbGl6ZVNoYXBlKE4pLHRoaXMuX3NoYXBlVGVtcGxhdGVTdWJzY3JpcHRpb24mJih0aGlzLl9zaGFwZVRlbXBsYXRlU3Vic2NyaXB0aW9uKCksdGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbj1nLlNoYXBlVGVtcGxhdGVPYnNlcnZlci5pbnN0YW5jZS5zdWJz''@;'; put 'put ''Y3JpYmVUbyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwsZnVuY3Rpb24oSyl7TC5faW5qZWN0VGVtcGxhdGUoSyl9KSksIXkuQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmhhcyh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpKXJldHVybiB2b2lkIHRoaXMuX2luamVjdEVycm9yVGVtcGxhdGUo''@;'; put 'put ''KTt0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPXkuQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmdldCh0aGlzLmN1cnJlbnRTaGFwZUF0dHJWYWwpfSJ0aXRsZSI9PT1PJiYodGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsPU4sIXRoaXMuY3VycmVudFNoYXBlQXR0clZhbCl8fHRoaXMuX2luamVj''@;'; put 'put ''dFRlbXBsYXRlKCl9LEYucHJvdG90eXBlLmRpc2Nvbm5lY3RlZENhbGxiYWNrPWZ1bmN0aW9uKCl7dGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbiYmdGhpcy5fc2hhcGVUZW1wbGF0ZVN1YnNjcmlwdGlvbigpfSxGLnByb3RvdHlwZS5fc2V0QXJpYUxhYmVsbGVkQnk9ZnVuY3Rpb24o''@;'; put 'put ''KXt2YXIgTz10aGlzLmdldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5IiksTj10aGlzLnF1ZXJ5U2VsZWN0b3IoInN2ZyIpfHx0aGlzO08/TyYmTy5pbmRleE9mKHRoaXMuY2xySWNvblVuaXFJZCk8MCYmTi5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWxsZWRieSIsTysiICIrdGhpcy5jbHJJ''@;'; put 'put ''Y29uVW5pcUlkKTpOLnNldEF0dHJpYnV0ZSgiYXJpYS1sYWJlbGxlZGJ5Iix0aGlzLmNsckljb25VbmlxSWQpfSxGLnByb3RvdHlwZS5faW5qZWN0VGVtcGxhdGU9ZnVuY3Rpb24oTyl7TyYmTyE9PXRoaXMuY3VycmVudFNoYXBlVGVtcGxhdGUmJih0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRl''@;'; put 'put ''PU8pLHRoaXMuaW5uZXJIVE1MPXRoaXMuY3VycmVudFNoYXBlVGVtcGxhdGUsdGhpcy5jdXJyZW50VGl0bGVBdHRyVmFsJiYodGhpcy5fc2V0QXJpYUxhYmVsbGVkQnkoKSx0aGlzLl9hcHBlbmRDdXN0b21UaXRsZSgpKX0sRi5wcm90b3R5cGUuX2luamVjdEVycm9yVGVtcGxhdGU9ZnVuY3Rp''@;'; put 'put ''b24oKXt0aGlzLmN1cnJlbnRTaGFwZVRlbXBsYXRlPXkuQ2xhcml0eUljb25zQXBpLmluc3RhbmNlLmdldCgiZXJyb3IiKSx0aGlzLl9pbmplY3RUZW1wbGF0ZSgpfX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL2luZGV4LnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL2luZGV4LnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKHEs''@;'; put 'put ''XyxJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KF8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8uQ2xhcml0eUljb25zPXZvaWQgMDt2YXIgeT1JKAovKiEgLi9jbHItaWNvbnMtYXBpICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9jbHItaWNvbnMtYXBpLnRzIiksZz1J''@;'; put 'put ''KAovKiEgLi9jbHItaWNvbnMtZWxlbWVudCAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvY2xyLWljb25zLWVsZW1lbnQudHMiKSxCPUkoCi8qISAuL3NoYXBlcy9jb3JlLXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzIiksdz15LkNsYXJpdHlJ''@;'; put 'put ''Y29uc0FwaS5pbnN0YW5jZTtfLkNsYXJpdHlJY29ucz13LHcuYWRkKEIuQ29yZVNoYXBlcyksdHlwZW9mIHdpbmRvdzwidSImJih3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpfHwod2luZG93LkNsYXJpdHlJY29ucz13KSxjdXN0b21FbGVtZW50cy5nZXQoImNsci1pY29u''@;'; put 'put ''Iil8fGN1c3RvbUVsZW1lbnRzLmRlZmluZSgiY2xyLWljb24iLGcuQ2xhcml0eUljb25FbGVtZW50KSl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAog''@;'; put 'put ''ICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZv''@;'; put 'put ''dW5kICovZnVuY3Rpb24ocSxfLEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoXywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksXy5Db3JlU2hhcGVzPV8uQ2xyU2hhcGVBcnJvdz1fLkNsclNoYXBlU3RlcEZvcndhcmQyPV8uQ2xyU2hhcGVFeWVIaWRlPV8uQ2xyU2hhcGVF''@;'; put 'put ''eWU9Xy5DbHJTaGFwZUV2ZW50PV8uQ2xyU2hhcGVDYWxlbmRhcj1fLkNsclNoYXBlQW5nbGVEb3VibGU9Xy5DbHJTaGFwZVZpZXdDb2x1bW5zPV8uQ2xyU2hhcGVTZWFyY2g9Xy5DbHJTaGFwZVZtQnVnPV8uQ2xyU2hhcGVGaWx0ZXJHcmlkQ2lyY2xlPV8uQ2xyU2hhcGVGaWx0ZXJHcmlkPV8u''@;'; put 'put ''Q2xyU2hhcGVFbGxpcHNpc1ZlcnRpY2FsPV8uQ2xyU2hhcGVFbGxpcHNpc0hvcml6b250YWw9Xy5DbHJTaGFwZUNsb3VkPV8uQ2xyU2hhcGVJbWFnZT1fLkNsclNoYXBlQmVsbD1fLkNsclNoYXBlRm9sZGVyT3Blbj1fLkNsclNoYXBlRm9sZGVyPV8uQ2xyU2hhcGVBbmdsZT1fLkNsclNoYXBl''@;'; put 'put ''VXNlcj1fLkNsclNoYXBlQmFycz1fLkNsclNoYXBlSGVscEluZm89Xy5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD1fLkNsclNoYXBlRXJyb3JTdGFuZGFyZD1fLkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkPV8uQ2xyU2hhcGVJbmZvU3RhbmRhcmQ9Xy5DbHJTaGFwZUluZm9DaXJjbGU9Xy5DbHJT''@;'; put 'put ''aGFwZUNoZWNrQ2lyY2xlPV8uQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZT1fLkNsclNoYXBlRXhjbGFtYXRpb25UcmlhbmdsZT1fLkNsclNoYXBlVGltZXM9Xy5DbHJTaGFwZUNoZWNrPV8uQ2xyU2hhcGVDb2c9Xy5DbHJTaGFwZUhvbWU9Xy5DbHJTaGFwZVVua25vd25TdGF0dXM9dm9pZCAw''@;'; put 'put ''O3ZhciB5PUkoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxnPUkoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3Zn''@;'; put 'put ''LXRhZy1nZW5lcmF0b3IudHMiKTtfLkNsclNoYXBlVW5rbm93blN0YXR1cz0oMCxnLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTcuNTgiIGN5PSIyNi4yMyIgcj0iMS40Ii8+XG4gICAgICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNC43LDEzYTUuMTgsNS4xOCwwLDAsMC0yLjE2LTMuNTYsNy4yNiw3LjI2LDAsMCwwLTUuNzEtMS4wOUExMS4zNCwxMS4zNCwwLDAsMCwxMiwxMC40NCwxLDEsMCwxLDAsMTMuMjYsMTJhOS4zMiw5LjMy''@;'; put 'put ''LDAsMCwxLDMuOTQtMS43Miw1LjI5LDUuMjksMCwwLDEsNC4xNi43NCwzLjIxLDMuMjEsMCwwLDEsMS4zNSwyLjE5Yy4zMywyLjY5LTMuMTksMy43NS01LjMyLDQuMTRsLS44Mi4xNXY0LjM2YTEsMSwwLDAsMCwyLDBWMTkuMTdDMjQuNjEsMTcuNzksMjQuODgsMTQuNDEsMjQuNywxM1oiLz4n''@;'; put 'put ''KSxfLkNsclNoYXBlSG9tZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjcxLDE3LjI5bC0xNS0xNWExLDEsMCwwLDAtMS40MSwwbC0xNSwxNWExLDEsMCwwLDAsMS40MSwxLjQxTDE4LDQuNDEsMzIuMjks''@;'; put 'put ''MTguNzFhMSwxLDAsMCwwLDEuNDEtMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LDMyaC01VjIySDEzVjMySDhWMThMNiwyMFYzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAs''@;'; put 'put ''MCwyLTJWMTkuNzZsLTItMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTlhMSwxLDAsMCwxLS43MS0uMjlMMTgsNC40MSwzLjcxLDE4LjcxYTEsMSwwLDAsMS0xLjQxLTEuNDFsMTUtMTVhMSwxLDAsMCwx''@;'; put 'put ''LDEuNDEsMGwxNSwxNUExLDEsMCwwLDEsMzMsMTlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LDcuNzksNiwxOS44M1YzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAsMCwyLTJWMTkuNzZa''@;'; put 'put ''Ii8+JyksXy5DbHJTaGFwZUNvZz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LjEsMTFjLTMuOSwwLTcsMy4xLTcsN3MzLjEsNyw3LDdjMy45LDAsNy0zLjEsNy03UzIyLDExLDE4LjEsMTF6IE0xOC4xLDIz''@;'; 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 ''M0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxfLkNsclNoYXBlQ2hlY2s9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0x''@;'; put 'put ''My43MiwyNy42OSwzLjI5LDE3LjI3YTEsMSwwLDAsMSwxLjQxLTEuNDFsOSw5TDMxLjI5LDcuMjlhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz4nKSxfLkNsclNoYXBlVGltZXM9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''IGQ9Ik0xOS40MSwxOGw4LjI5LTguMjlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOCwxNi41OSw5LjcxLDguMjlBMSwxLDAsMCwwLDguMjksOS43MUwxNi41OSwxOCw4LjI5LDI2LjI5YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTgsMTkuNDFsOC4yOSw4LjI5YTEsMSwwLDAsMCwxLjQxLTEuNDFaIi8+''@;'; put 'put ''JyksXy5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyMS4zMmExLjMsMS4zLDAsMCwwLDEuMy0xLjNWMTRhMS4zLDEuMywwLDEsMC0yLjYsMHY2QTEuMywx''@;'; put 'put ''LjMsMCwwLDAsMTgsMjEuMzJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjE3Ljk1IiBjeT0iMjQuMjciIHI9IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzAuMzMsMjUuNTQsMjAuNTksNy42YTMsMywwLDAsMC01LjI3LDBMNS41NywyNS41NEEzLDMsMCwwLDAsOC4yMSwzMEgyNy42OWEzLDMsMCwwLDAsMi42NC00LjQzWm0tMS43OCwxLjk0YTEsMSwwLDAsMS0uODYuNDlIOC4yMWExLDEsMCwwLDEt''@;'; put 'put ''Ljg4LTEuNDhMMTcuMDcsOC41NWExLDEsMCwwLDEsMS43NiwwbDkuNzQsMTcuOTRBMSwxLDAsMCwxLDI4LjU1LDI3LjQ4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMC4zMywyNS41NCwyMC41OSw3LjZhMywz''@;'; put 'put ''LDAsMCwwLTUuMjcsMEw1LjU3LDI1LjU0QTMsMywwLDAsMCw4LjIxLDMwSDI3LjY5YTMsMywwLDAsMCwyLjY0LTQuNDNaTTE2LjQ2LDEyLjc0YTEuNDksMS40OSwwLDAsMSwzLDB2Ni44OWExLjQ5LDEuNDksMCwxLDEtMywwWk0xOCwyNi4yNWExLjcyLDEuNzIsMCwxLDEsMS43Mi0xLjcyQTEu''@;'; put 'put ''NzIsMS43MiwwLDAsMSwxOCwyNi4yNVoiLz4nKSxfLkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4''@;'; put 'put ''LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMC4wN2ExLjMsMS4zLDAsMCwxLTEuMy0xLjN2LTZhMS4zLDEuMywwLDEs''@;'; put 'put ''MSwyLjYsMHY2QTEuMywxLjMsMCwwLDEsMTgsMjAuMDdaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgY3g9IjE3Ljk1IiBjeT0iMjMuMDIiIHI9IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabS0xLjQ5LDZhMS40OSwxLjQ5LDAsMCwxLDMsMHY2Ljg5YTEuNDksMS40OSwwLDEsMS0zLDBaTTE4LDI1LjVhMS43MiwxLjcyLDAsMSwxLDEuNzItMS43''@;'; put 'put ''MkExLjcyLDEuNzIsMCwwLDEsMTgsMjUuNVoiLz4nKSxfLkNsclNoYXBlQ2hlY2tDaXJjbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZa''@;'; put 'put ''bTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xNi4zNCwyMy43NGwtNS01YTEsMSwwLDAsMSwxLjQxLTEuNDFsMy41OSwzLjU5LDYu''@;'; put 'put ''NzgtNi43OGExLDEsMCwwLDEsMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCwxOEExMiwxMiwwLDEsMSwxOCw2LDEyLDEyLDAsMCwxLDMwLDE4Wm0tNC43Ny0yLjE2YTEuNCwxLjQsMCwwLDAt''@;'; put 'put ''Mi0ybC02Ljc3LDYuNzdMMTMsMTcuMTZhMS40LDEuNCwwLDAsMC0yLDJsNS40NSw1LjQ1WiIvPicpLF8uQ2xyU2hhcGVJbmZvQ2lyY2xlPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiICBjeD0iMTcuOTMiIGN5PSIx''@;'; put 'put ''MS45IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgIGQ9Ik0yMSwyM0gxOVYxNUgxNmExLDEsMCwwLDAsMCwyaDF2NkgxNWExLDEsMCwxLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptLTIsNS4xNWEyLDIsMCwxLDEsMiwyQTIsMiwwLDAsMSwxNS45LDExLjE1Wk0yMywyNGExLDEsMCwwLDEtMSwxSDE1YTEsMSwwLDEs''@;'; put 'put ''MSwwLTJoMlYxN0gxNmExLDEsMCwwLDEsMC0yaDR2OGgyQTEsMSwwLDAsMSwyMywyNFoiLz4nKSxfLkNsclNoYXBlSW5mb1N0YW5kYXJkPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxNy45NyIgY3k9IjEw''@;'; put 'put ''LjQ1IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTIxLDI1SDE5VjE0LjFIMTZhMSwxLDAsMCwwLDAsMmgxVjI1SDE1YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4LDIuMVptLS4xLDUuMjhhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMTcuOSw3LjM4Wm0zLjYsMjEuMjVoLTdhMS40LDEuNCwwLDEs''@;'; put 'put ''MSwwLTIuOGgyLjF2LTkuMkgxNWExLjQsMS40LDAsMSwxLDAtMi44aDQuNHYxMmgyLjFhMS40LDEuNCwwLDEsMSwwLDIuOFoiLz4nKSxfLkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJN''@;'; put 'put ''MjgsMTIuMWExLDEsMCwwLDAtMS40MSwwTDE1LjQ5LDIzLjE1bC02LTZBMSwxLDAsMCwwLDgsMTguNTNMMTUuNDksMjYsMjgsMTMuNTJBMSwxLDAsMCwwLDI4LDEyLjFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0i''@;'; put 'put ''TTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNMjguNDUsMTIuNjMsMTUuMzEsMjUuNzYsNy41NSwxOGExLjQsMS40LDAsMCwxLDItMmw1Ljc4LDUuNzhMMjYuNDcsMTAuNjVhMS40LDEuNCwwLDEsMSwyLDJaIi8+JyksXy5DbHJTaGFwZUVycm9yU3RhbmRhcmQ9KDAs''@;'; put 'put ''Zy5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE4IiBjeT0iMjYuMDYiIHI9IjEuMzMiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0i''@;'; put 'put ''TTE4LDIyLjYxYTEsMSwwLDAsMS0xLTF2LTEyYTEsMSwwLDEsMSwyLDB2MTJBMSwxLDAsMCwxLDE4LDIyLjYxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYs''@;'; put 'put ''MTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4''@;'; put 'put ''LDIuMVpNMTYuNiw4LjhhMS40LDEuNCwwLDAsMSwyLjgsMHYxMmExLjQsMS40LDAsMCwxLTIuOCwwWk0xOCwyOC42YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDE4LDI4LjZaIi8+JyksXy5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD0oMCxnLmNsckljb25TVkcpKCc8Y2ly''@;'; 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 ''LTEuOEExLjgsMS44LDAsMCwxLDE4LDI5Ljg1WiIvPicpLF8uQ2xyU2hhcGVIZWxwSW5mbz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMzksMjUuNDVhMSwxLDAsMCwwLTEuMzguMjljLTEuNDEsMi4xNi00LDQuODEtNi4zMSw1LjdzLTQuMTIuNTctNC44NCwwYy0uMzEtLjI3LTEu''@;'; 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+JyksXy5DbHJT''@;'; put 'put ''aGFwZUJhcnM9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwyOUg0YTEsMSwwLDAsMSwwLTJIMzJhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLDE5SDRhMSwxLDAsMCwxLDAtMkgzMmExLDEsMCwwLDEsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzIsOUg0QTEsMSwwLDAsMSw0LDdIMzJh''@;'; put 'put ''MSwxLDAsMCwxLDAsMloiLz4nKSxfLkNsclNoYXBlVXNlcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMSwwLTctN0E3LDcsMCwwLDAsMTgsMTdaTTE4LDVhNSw1LDAsMSwxLTUsNUE1LDUsMCwwLDEsMTgsNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; 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+JyksXy5DbHJTaGFwZUFuZ2xlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuNTIsMjIuNTIsMTgsMTAuNiw2LjQ4LDIyLjUyYTEuNywxLjcsMCwwLDAsMi40NSwyLjM2TDE4LDE1''@;'; put 'put ''LjQ5bDkuMDgsOS4zOWExLjcsMS43LDAsMCwwLDIuNDUtMi4zNloiLz4nKSxfLkNsclNoYXBlRm9sZGVyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwx''@;'; 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 ''XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLF8uQ2xyU2hhcGVGb2xkZXJPcGVuPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNs''@;'; 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+JyksXy5DbHJTaGFwZUJlbGw9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi41MSwyNy44M0ExNC40LDE0LjQsMCwwLDEsMzAsMjQuOWExMi42MywxMi42MywwLDAsMS0xLjM1LTQu''@;'; 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 ''bGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxfLkNsclNoYXBlSW1hZ2U9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIs''@;'; 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+JyksXy5DbHJTaGFwZUNsb3VkPSgwLGcuY2xySWNvblNWRyko''@;'; 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 ''ZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxfLkNsclNoYXBlRWxsaXBzaXNIb3Jp''@;'; put 'put ''em9udGFsPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI0LjkiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0i''@;'; put 'put ''Mi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJh''@;'; put 'put ''ZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxfLkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbD0oMCxnLmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjMxLjEiIHI9IjIu''@;'; put 'put ''OSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMzEuMSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksXy5D''@;'; put 'put ''bHJTaGFwZUZpbHRlckdyaWQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwyNS44NmwyLDFWMjAuMjdhMSwxLDAsMCwwLS4yOS0uN0wxMC4yMywxM0gyNS43OWwtNi40Nyw2LjU3YTEsMSwwLDAsMC0uMjku''@;'; put 'put ''N0wxOSwyOGwyLDFWMjAuNjhMMjcuNTgsMTRBMS40NiwxLjQ2LDAsMCwwLDI4LDEzVjEyYTEsMSwwLDAsMC0xLTFIOWExLDEsMCwwLDAtMSwxdjFhMS40NiwxLjQ2LDAsMCwwLC40MiwxTDE1LDIwLjY4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTEiIGQ9Ik04LDExdjEuMTJhLjUuNSwwLDAsMCwuMTUuMzVsNy4yOCw3LjM2YS41LjUsMCwwLDEsLjE1LjM1djYuODlhLjUuNSwwLDAsMCwuMjguNDVsMy45NSwxLjQxYS41LjUsMCwwLDAsLjcyLS40NWwwLTguMzlhLjU0LjU0LDAsMCwxLC4xOC0uMzVsNy4xMi03LjI1''@;'; put 'put ''YS41LjUsMCwwLDAsLjE1LS4zNVYxMVoiLz4nKSxfLkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE1LDI1Ljg2bDIsMVYyMC4yN2ExLDEsMCwwLDAtLjI5LS43TDEw''@;'; put 'put ''LjIzLDEzSDI1Ljc5bC02LjQ3LDYuNTdhMSwxLDAsMCwwLS4yOS43TDE5LDI4bDIsMVYyMC42OEwyNy41OCwxNEExLjQ2LDEuNDYsMCwwLDAsMjgsMTNWMTJhMSwxLDAsMCwwLTEtMUg5YTEsMSwwLDAsMC0xLDF2MWExLjQ2LDEuNDYsMCwwLDAsLjQyLDFMMTUsMjAuNjhaIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAgICAgICAg''@;'; put 'put ''PHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNOCwxMXYxLjEyYS41LjUsMCwwLDAsLjE1LjM1bDcuMjgsNy4zNmEuNS41LDAsMCwxLC4xNS4zNXY2Ljg5YS41LjUsMCwwLDAsLjI4LjQ1bDMuOTUsMS40MWEuNS41LDAsMCwwLC43Mi0uNDVsMC04LjM5YS41NC41NCwwLDAsMSwu''@;'; put 'put ''MTgtLjM1bDcuMTItNy4yNWEuNS41LDAsMCwwLC4xNS0uMzVWMTFaIi8+JyksXy5DbHJTaGFwZVZtQnVnPSgwLGcuY2xySWNvblNWRykoJzxyZWN0IHdpZHRoPSIzNiIgaGVpZ2h0PSIzNiIgcng9IjMiIGZpbGw9IiNmZmZmZmYiIG9wYWNpdHk9IjAuMTUiIHN0eWxlPSJpc29sYXRpb246aXNv''@;'; put 'put ''bGF0ZSIvPjxwYXRoIGQ9Ik0zLjc5LDE0LjgzYTEuMDksMS4wOSwwLDAsMC0xLjQ3LS41NiwxLjA5LDEuMDksMCwwLDAtLjU0LDEuNDlsMi40Nyw1LjRjLjM5Ljg1LjgsMS4yOSwxLjU3LDEuMjlTNywyMiw3LjM5LDIxLjE2bDIuMTctNC43N2EuMzMuMzMsMCwwLDEsLjMxLS4yLjM1LjM1LDAs''@;'; put 'put ''MCwxLC4zNS4zNXY0LjYxYTEuMTUsMS4xNSwwLDAsMCwxLjE0LDEuMywxLjE3LDEuMTcsMCwwLDAsMS4xNy0xLjNWMTcuMzhhMS4xNSwxLjE1LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwxLjE4LDEuMnYzLjc3YTEuMTcsMS4xNywwLDEsMCwyLjMyLDBWMTcuMzhhMS4xNSwxLjE1''@;'; put 'put ''LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwxLjE4LDEuMnYzLjc3YTEuMTYsMS4xNiwwLDEsMCwyLjMxLDBWMTYuODZhMi42OSwyLjY5LDAsMCwwLTIuNzgtMi42OSwzLjU3LDMuNTcsMCwwLDAtMi40NywxLjA1LDIuNzUsMi43NSwwLDAsMC0yLjM4LTEuMDVBMy45MywzLjkzLDAs''@;'; put 'put ''MCwwLDEyLDE1LjIyYTIuODIsMi44MiwwLDAsMC0yLjA4LTEuMDVBMi41NSwyLjU1LDAsMCwwLDcuNCwxNS44OUw1LjgyLDE5LjYzbC0yLTQuOCIgZmlsbD0iI2ZmZmZmZiIvPjxwYXRoIGQ9Ik0zMywxNC4xOEExLjE0LDEuMTQsMCwwLDAsMzEuOSwxNWwtMS4xOSwzLjczTDI5LjUsMTUuMDVh''@;'; put 'put ''MS4xOCwxLjE4LDAsMCwwLTEuMTUtLjg3aC0uMWExLjIsMS4yLDAsMCwwLTEuMTUuODdsLTEuMTksMy43MS0xLjE4LTMuNzFhMS4xNSwxLjE1LDAsMCwwLTEuMTEtLjg3LDEuMDgsMS4wOCwwLDAsMC0xLjEyLDEuMDcsMS42OCwxLjY4LDAsMCwwLC4xLjU0bDIsNS43YTEuMjcsMS4yNywwLDAs''@;'; put 'put ''MCwxLjI3LDEsMS4yNCwxLjI0LDAsMCwwLDEuMi0uOTNsMS4yLTMuNjQsMS4yLDMuNjRhMS4yNSwxLjI1LDAsMCwwLDEuMjYuOTNBMS4yNywxLjI3LDAsMCwwLDMyLDIxLjVMMzQsMTUuNzNhMS43NywxLjc3LDAsMCwwLC4wOC0uNDhBMS4wNywxLjA3LDAsMCwwLDMzLDE0LjE4WiIgZmlsbD0i''@;'; put 'put ''I2ZmZmZmZiIvPicpLF8uQ2xyU2hhcGVTZWFyY2g9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4zMyw1LjA1QTEwLjk1LDEwLjk1LDAsMSwxLDUuMzksMTYsMTEsMTEsMCwwLDEsMTYuMzMsNS4wNW0wLTIu''@;'; put 'put ''MDVhMTMsMTMsMCwxLDAsMTMsMTMsMTMsMTMsMCwwLDAtMTMtMTNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zNSwzMy4yOWwtNy4zNy03LjQyLTEuNDIsMS40MSw3LjM3LDcuNDJBMSwxLDAsMSwwLDM1''@;'; put 'put ''LDMzLjI5WiIvPicpLF8uQ2xyU2hhcGVWaWV3Q29sdW1ucz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDVINUEyLDIsMCwwLDAsMyw3VjI5YTIsMiwwLDAsMCwyLDJIMzFhMiwyLDAsMCwwLDItMlY3QTIs''@;'; put 'put ''MiwwLDAsMCwzMSw1Wk0xMywyOUg1VjdoOFptMTAsMEgxNVY3aDhaIi8+JyksXy5DbHJTaGFwZUFuZ2xlRG91YmxlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjksMTkuNDFhMSwxLDAsMCwxLS43MS0uMjlM''@;'; put 'put ''MTgsOC44Myw3LjcxLDE5LjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsNiwyOS43MSwxNy43MUExLDEsMCwwLDEsMjksMTkuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOSwzMC40MWExLDEsMCww''@;'; put 'put ''LDEtLjcxLS4yOUwxOCwxOS44Myw3LjcxLDMwLjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsMTcsMjkuNzEsMjguNzFBMSwxLDAsMCwxLDI5LDMwLjQxWiIvPicpLF8uQ2xyU2hhcGVDYWxlbmRhcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; 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 ''ZXJ0ZWQgY2xyLWktYWxlcnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxfLkNsclNoYXBlRXZlbnQ9KDAsZy5j''@;'; 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 ''YXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLF8uQ2xyU2hhcGVFeWU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjYyLDE3LjUzYy0zLjM3LTYuMjMtOS4yOC0xMC0xNS44Mi0xMFM1LjM0LDExLjMsMiwxNy41M0wxLjcyLDE4bC4yNi40''@;'; put 'put ''OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMHMxMi40Ni0zLjcyLDE1LjgyLTEwbC4yNi0uNDhaTTE3LjgsMjYuNDNDMTIuMTcsMjYuNDMsNywyMy4yOSw0LDE4YzMtNS4yOSw4LjE3LTguNDMsMTMuOC04LjQzUzI4LjU0LDEyLjcyLDMxLjU5LDE4QzI4LjU0LDIzLjI5LDIzLjQyLDI2LjQz''@;'; put 'put ''LDE3LjgsMjYuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjA5LDExLjE3QTYuODYsNi44NiwwLDEsMCwyNSwxOCw2Ljg2LDYuODYsMCwwLDAsMTguMDksMTEuMTdabTAsMTEuNzJBNC44Niw0Ljg2LDAs''@;'; put 'put ''MSwxLDIzLDE4LDQuODcsNC44NywwLDAsMSwxOC4wOSwyMi44OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjIsMTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwUzUuMzQsMTEuMywyLDE3LjUz''@;'; put 'put ''TDEuNzIsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwczEyLjQ2LTMuNzIsMTUuODItMTBsLjI2LS40OFpNMTcuOCwyNi40M0MxMi4xNywyNi40Myw3LDIzLjI5LDQsMThjMy01LjI5LDguMTctOC40MywxMy44LTguNDNTMjguNTQsMTIuNzIsMzEuNTksMThDMjguNTQsMjMu''@;'; put 'put ''MjksMjMuNDIsMjYuNDMsMTcuOCwyNi40M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4LjA5IiBjeT0iMTguMDMiIHI9IjYuODYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxf''@;'; 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 ''Ny4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz4nKSxfLkNsclNoYXBlU3RlcEZvcndhcmQyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik03LjA4LDYuNTJhMS42OCwxLjY4LDAsMCwwLDAsMi40TDE2LjUxLDE4LDcuMTIsMjcu''@;'; put 'put ''MDhhMS43LDEuNywwLDAsMCwyLjM2LDIuNDRoMEwyMS40LDE4LDkuNDgsNi40N0ExLjY5LDEuNjksMCwwLDAsNy4wOCw2LjUyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTI2LjQ5LDVhMS43LDEuNywwLDAsMC0xLjcsMS43VjI5LjNh''@;'; put 'put ''MS43LDEuNywwLDAsMCwzLjQsMFY2LjdBMS43LDEuNywwLDAsMCwyNi40OSw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksXy5DbHJTaGFwZUFycm93PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy42NiwxNS42MSwxOCw2LDguMzQsMTUu''@;'; put 'put ''NjFBMSwxLDAsMSwwLDkuNzUsMTdMMTcsOS44MVYyOC45NGExLDEsMCwxLDAsMiwwVjkuODFMMjYuMjUsMTdhMSwxLDAsMCwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+JyksXy5Db3JlU2hhcGVzPXsidW5rbm93bi1zdGF0dXMiOl8u''@;'; put 'put ''Q2xyU2hhcGVVbmtub3duU3RhdHVzLGhvbWU6Xy5DbHJTaGFwZUhvbWUsY29nOl8uQ2xyU2hhcGVDb2csY2hlY2s6Xy5DbHJTaGFwZUNoZWNrLHRpbWVzOl8uQ2xyU2hhcGVUaW1lcywiZXhjbGFtYXRpb24tdHJpYW5nbGUiOl8uQ2xyU2hhcGVFeGNsYW1hdGlvblRyaWFuZ2xlLCJleGNsYW1h''@;'; put 'put ''dGlvbi1jaXJjbGUiOl8uQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZSwiY2hlY2stY2lyY2xlIjpfLkNsclNoYXBlQ2hlY2tDaXJjbGUsImluZm8tY2lyY2xlIjpfLkNsclNoYXBlSW5mb0NpcmNsZSwiaW5mby1zdGFuZGFyZCI6Xy5DbHJTaGFwZUluZm9TdGFuZGFyZCwic3VjY2Vzcy1zdGFu''@;'; put 'put ''ZGFyZCI6Xy5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZCwiZXJyb3Itc3RhbmRhcmQiOl8uQ2xyU2hhcGVFcnJvclN0YW5kYXJkLCJ3YXJuaW5nLXN0YW5kYXJkIjpfLkNsclNoYXBlV2FybmluZ1N0YW5kYXJkLCJoZWxwLWluZm8iOl8uQ2xyU2hhcGVIZWxwSW5mbyxiYXJzOl8uQ2xyU2hhcGVC''@;'; put 'put ''YXJzLHVzZXI6Xy5DbHJTaGFwZVVzZXIsYW5nbGU6Xy5DbHJTaGFwZUFuZ2xlLGZvbGRlcjpfLkNsclNoYXBlRm9sZGVyLCJmb2xkZXItb3BlbiI6Xy5DbHJTaGFwZUZvbGRlck9wZW4sYmVsbDpfLkNsclNoYXBlQmVsbCxpbWFnZTpfLkNsclNoYXBlSW1hZ2UsY2xvdWQ6Xy5DbHJTaGFwZUNs''@;'; put 'put ''b3VkLCJlbGxpcHNpcy1ob3Jpem9udGFsIjpfLkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsLCJlbGxpcHNpcy12ZXJ0aWNhbCI6Xy5DbHJTaGFwZUVsbGlwc2lzVmVydGljYWwsImZpbHRlci1ncmlkIjpfLkNsclNoYXBlRmlsdGVyR3JpZCwiZmlsdGVyLWdyaWQtY2lyY2xlIjpfLkNsclNo''@;'; put 'put ''YXBlRmlsdGVyR3JpZENpcmNsZSwidm0tYnVnIjpfLkNsclNoYXBlVm1CdWcsc2VhcmNoOl8uQ2xyU2hhcGVTZWFyY2gsInZpZXctY29sdW1ucyI6Xy5DbHJTaGFwZVZpZXdDb2x1bW5zLCJhbmdsZS1kb3VibGUiOl8uQ2xyU2hhcGVBbmdsZURvdWJsZSxjYWxlbmRhcjpfLkNsclNoYXBlQ2Fs''@;'; put 'put ''ZW5kYXIsZXZlbnQ6Xy5DbHJTaGFwZUV2ZW50LGV5ZTpfLkNsclNoYXBlRXllLCJleWUtaGlkZSI6Xy5DbHJTaGFwZUV5ZUhpZGUsInN0ZXAtZm9yd2FyZC0yIjpfLkNsclNoYXBlU3RlcEZvcndhcmQyLGFycm93Ol8uQ2xyU2hhcGVBcnJvd30sT2JqZWN0LmRlZmluZVByb3BlcnR5KF8uQ29y''@;'; put 'put ''ZVNoYXBlcywiaG91c2UiLCgwLHkuZGVzY3JpcHRvckNvbmZpZykoXy5Db3JlU2hhcGVzLmhvbWUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5Db3JlU2hhcGVzLCJzZXR0aW5ncyIsKDAseS5kZXNjcmlwdG9yQ29uZmlnKShfLkNvcmVTaGFwZXMuY29nKSksT2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KF8uQ29yZVNoYXBlcywic3VjY2VzcyIsKDAseS5kZXNjcmlwdG9yQ29uZmlnKShfLkNvcmVTaGFwZXMuY2hlY2spKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5Db3JlU2hhcGVzLCJjbG9zZSIsKDAseS5kZXNjcmlwdG9yQ29uZmlnKShfLkNvcmVTaGFwZXMudGltZXMpKSxPYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkoXy5Db3JlU2hhcGVzLCJ3YXJuaW5nIiwoMCx5LmRlc2NyaXB0b3JDb25maWcpKF8uQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tdHJpYW5nbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLkNvcmVTaGFwZXMsImVycm9yIiwoMCx5LmRlc2NyaXB0b3JDb25maWcp''@;'; put 'put ''KF8uQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5Db3JlU2hhcGVzLCJpbmZvIiwoMCx5LmRlc2NyaXB0b3JDb25maWcpKF8uQ29yZVNoYXBlc1siaW5mby1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLkNvcmVTaGFw''@;'; put 'put ''ZXMsIm1lbnUiLCgwLHkuZGVzY3JpcHRvckNvbmZpZykoXy5Db3JlU2hhcGVzLmJhcnMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5Db3JlU2hhcGVzLCJhdmF0YXIiLCgwLHkuZGVzY3JpcHRvckNvbmZpZykoXy5Db3JlU2hhcGVzLnVzZXIpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5D''@;'; put 'put ''b3JlU2hhcGVzLCJjYXJldCIsKDAseS5kZXNjcmlwdG9yQ29uZmlnKShfLkNvcmVTaGFwZXMuYW5nbGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5Db3JlU2hhcGVzLCJkaXJlY3RvcnkiLCgwLHkuZGVzY3JpcHRvckNvbmZpZykoXy5Db3JlU2hhcGVzLmZvbGRlcikpLE9iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eShfLkNvcmVTaGFwZXMsIm5vdGlmaWNhdGlvbiIsKDAseS5kZXNjcmlwdG9yQ29uZmlnKShfLkNvcmVTaGFwZXMuYmVsbCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLkNvcmVTaGFwZXMsImNvbGxhcHNlIiwoMCx5LmRlc2NyaXB0b3JDb25maWcpKF8uQ29yZVNoYXBlc1si''@;'; put 'put ''YW5nbGUtZG91YmxlIl0pKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMv''@;'; put 'put ''aWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKHEsXyxJKXsi''@;'; put 'put ''dXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KF8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8uZGVzY3JpcHRvckNvbmZpZz12b2lkIDAsXy5kZXNjcmlwdG9yQ29uZmlnPWZ1bmN0aW9uIHkoZyl7cmV0dXJue2VudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxl''@;'; put 'put ''OiEwLHZhbHVlOmd9fX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4v''@;'; put 'put ''cHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3NoYXBlLXRlbXBsYXRlLW9ic2VydmVyLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3Vu''@;'; put 'put ''ZCAqL2Z1bmN0aW9uKHEsXyxJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KF8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8uU2hhcGVUZW1wbGF0ZU9ic2VydmVyPV8uY2hhbmdlSGFuZGxlckNhbGxiYWNrcz12b2lkIDAsXy5jaGFuZ2VIYW5kbGVyQ2FsbGJhY2tzPXt9''@;'; put 'put ''O3ZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZygpe3RoaXMuY2FsbGJhY2tzPV8uY2hhbmdlSGFuZGxlckNhbGxiYWNrc31yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGcsImluc3RhbmNlIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuc2luZ2xlSW5zdGFuY2V8fChnLnNpbmdsZUlu''@;'; put 'put ''c3RhbmNlPW5ldyBnKSxnLnNpbmdsZUluc3RhbmNlfSxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pLGcucHJvdG90eXBlLnN1YnNjcmliZVRvPWZ1bmN0aW9uKEIsdyl7dmFyIFA9dGhpcztyZXR1cm4gdGhpcy5jYWxsYmFja3NbQl0/LTE9PT10aGlzLmNhbGxiYWNrc1tCXS5pbmRl''@;'; put 'put ''eE9mKHcpJiZ0aGlzLmNhbGxiYWNrc1tCXS5wdXNoKHcpOnRoaXMuY2FsbGJhY2tzW0JdPVt3XSxmdW5jdGlvbigpe3ZhciBGPVAuY2FsbGJhY2tzW0JdLmluZGV4T2Yodyk7UC5jYWxsYmFja3NbQl0uc3BsaWNlKEYsMSksMD09PVAuY2FsbGJhY2tzW0JdLmxlbmd0aCYmZGVsZXRlIFAuY2Fs''@;'; put 'put ''bGJhY2tzW0JdfX0sZy5wcm90b3R5cGUuZW1pdENoYW5nZXM9ZnVuY3Rpb24oQix3KXt0aGlzLmNhbGxiYWNrc1tCXSYmdGhpcy5jYWxsYmFja3NbQl0ubWFwKGZ1bmN0aW9uKFApe1Aodyl9KX0sZ30oKTtfLlNoYXBlVGVtcGxhdGVPYnNlcnZlcj15fSwiLi9wcm9qZWN0cy9pY29ucy9zcmMv''@;'; put 'put ''dXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMgKioq''@;'; put 'put ''IQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24ocSxfLEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoXywiX19l''@;'; put 'put ''c01vZHVsZSIse3ZhbHVlOiEwfSksXy5jbHJJY29uU1ZHPXZvaWQgMDtfLmNsckljb25TVkc9ZnVuY3Rpb24gdyhQKXt2YXIgRj0iIjtyZXR1cm4gUC5pbmRleE9mKCItLWJhZGdlZCIpPi0xJiYoRis9ImNhbi1iYWRnZSAiKSxQLmluZGV4T2YoIi0tYWxlcnRlZCIpPi0xJiYoRis9ImNhbi1h''@;'; put 'put ''bGVydCAiKSxQLmluZGV4T2YoImNsci1pLXNvbGlkIik+LTEmJihGKz0iaGFzLXNvbGlkICIpLChGPyc8c3ZnIHZlcnNpb249IjEuMSIgY2xhc3M9IicrRisnIiB2aWV3Qm94PSIwIDAgMzYgMzYiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiXG4gICAgeG1sbnM9Imh0dHA6''@;'; put 'put ''Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgZm9jdXNhYmxlPSJmYWxzZSIgcm9sZT0iaW1nIj4nOic8c3ZnIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDM2IDM2IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4TWlkWU1p''@;'; put 'put ''ZCBtZWV0IlxuICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGZvY3VzYWJsZT0iZmFsc2UiIHJvbGU9ImltZyI+JykrUCsiPC9zdmc+In19fSl9LDgwNjg1OmZ1bmN0aW9uKHVlKXt1ZS5leHBv''@;'; put 'put ''cnRzPWZ1bmN0aW9uKHEpe3ZhciBfPXt9O2Z1bmN0aW9uIEkoeSl7aWYoX1t5XSlyZXR1cm4gX1t5XS5leHBvcnRzO3ZhciBnPV9beV09e2k6eSxsOiExLGV4cG9ydHM6e319O3JldHVybiBxW3ldLmNhbGwoZy5leHBvcnRzLGcsZy5leHBvcnRzLEkpLGcubD0hMCxnLmV4cG9ydHN9cmV0dXJu''@;'; put 'put ''IEkubT1xLEkuYz1fLEkuZD1mdW5jdGlvbih5LGcsQil7SS5vKHksZyl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LGcse2VudW1lcmFibGU6ITAsZ2V0OkJ9KX0sSS5yPWZ1bmN0aW9uKHkpe3R5cGVvZiBTeW1ib2w8InUiJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eSh5LFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoeSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LEkudD1mdW5jdGlvbih5LGcpe2lmKDEmZyYmKHk9SSh5KSksOCZnfHw0JmcmJiJvYmplY3QiPT10eXBlb2YgeSYmeSYmeS5f''@;'; put 'put ''X2VzTW9kdWxlKXJldHVybiB5O3ZhciBCPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoSS5yKEIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTp5fSksMiZnJiYic3RyaW5nIiE9dHlwZW9mIHkpZm9yKHZhciB3IGluIHkpSS5kKEIsdyxmdW5j''@;'; put 'put ''dGlvbihQKXtyZXR1cm4geVtQXX0uYmluZChudWxsLHcpKTtyZXR1cm4gQn0sSS5uPWZ1bmN0aW9uKHkpe3ZhciBnPXkmJnkuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiB5LmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIHl9O3JldHVybiBJLmQoZywiYSIsZyksZ30sSS5vPWZ1bmN0''@;'; put 'put ''aW9uKHksZyl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh5LGcpfSxJLnA9IiIsSShJLnM9Ii4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9hbGwtc2hhcGVzLnRzIil9KHsiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2FsbC1zaGFwZXMudHMiOgov''@;'; put 'put ''KiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2FsbC1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24ocSxfLEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoXywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksXy5BbGxTaGFwZXM9dm9pZCAwO3ZhciB5PUko''@;'; put 'put ''Ci8qISAuL2NoYXJ0LXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NoYXJ0LXNoYXBlcy50cyIpLGc9SSgKLyohIC4vY29tbWVyY2Utc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29tbWVyY2Utc2hhcGVzLnRzIiksQj1JKAovKiEgLi9jb3Jl''@;'; put 'put ''LXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL2NvcmUtc2hhcGVzLnRzIiksdz1JKAovKiEgLi9lc3NlbnRpYWwtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvZXNzZW50aWFsLXNoYXBlcy50cyIpLFA9SSgKLyohIC4vbWVkaWEtc2hhcGVzICov''@;'; put 'put ''CiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvbWVkaWEtc2hhcGVzLnRzIiksRj1JKAovKiEgLi9zb2NpYWwtc2hhcGVzICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvc29jaWFsLXNoYXBlcy50cyIpLE89SSgKLyohIC4vdGVjaG5vbG9neS1zaGFwZXMgKi8KIi4vcHJvamVj''@;'; put 'put ''dHMvaWNvbnMvc3JjL3NoYXBlcy90ZWNobm9sb2d5LXNoYXBlcy50cyIpLHo9SSgKLyohIC4vdGV4dC1lZGl0LXNoYXBlcyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3RleHQtZWRpdC1zaGFwZXMudHMiKSxOPUkoCi8qISAuL3RyYXZlbC1zaGFwZXMgKi8KIi4vcHJvamVjdHMv''@;'; put 'put ''aWNvbnMvc3JjL3NoYXBlcy90cmF2ZWwtc2hhcGVzLnRzIiksTD1bQi5Db3JlU2hhcGVzLGcuQ29tbWVyY2VTaGFwZXMsdy5Fc3NlbnRpYWxTaGFwZXMsUC5NZWRpYVNoYXBlcyxGLlNvY2lhbFNoYXBlcyxPLlRlY2hub2xvZ3lTaGFwZXMsTi5UcmF2ZWxTaGFwZXMseS5DaGFydFNoYXBlcyx6''@;'; put 'put ''LlRleHRFZGl0U2hhcGVzXSxLPXt9O18uQWxsU2hhcGVzPUs7Zm9yKHZhciBVPTAsVz1MO1U8Vy5sZW5ndGg7VSsrKXt2YXIgWT1XW1VdO2Zvcih2YXIgWCBpbiBZKVkuaGFzT3duUHJvcGVydHkoWCkmJihLW1hdPVlbWF0pfXR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVy''@;'; put 'put ''dHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChLKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jaGFydC1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAg''@;'; put 'put ''ICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY2hhcnQtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVu''@;'; put 'put ''Y3Rpb24ocSxfLEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoXywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksXy5DaGFydFNoYXBlcz1fLkNsclNoYXBlQmVsbEN1cnZlPV8uQ2xyU2hhcGVUaWNrQ2hhcnQ9Xy5DbHJTaGFwZVNjYXR0ZXJQbG90PV8uQ2xyU2hhcGVQaWVD''@;'; put 'put ''aGFydD1fLkNsclNoYXBlTGluZUNoYXJ0PV8uQ2xyU2hhcGVIZWF0TWFwPV8uQ2xyU2hhcGVHcmlkQ2hhcnQ9Xy5DbHJTaGFwZUN1cnZlQ2hhcnQ9Xy5DbHJTaGFwZUNsb3VkQ2hhcnQ9Xy5DbHJTaGFwZUJ1YmJsZUNoYXJ0PV8uQ2xyU2hhcGVCb3hQbG90PV8uQ2xyU2hhcGVCYXJDaGFydD1f''@;'; put 'put ''LkNsclNoYXBlQXhpc0NoYXJ0PXZvaWQgMDt2YXIgeT1JKAovKiEgLi4vdXRpbHMvZGVzY3JpcHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIiksZz1JKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJv''@;'; put 'put ''amVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7Xy5DbHJTaGFwZUF4aXNDaGFydD0oMCxnLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBMIDQgNSBDIDIuODk1IDUgMiA1''@;'; 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+JyksXy5DbHJTaGFwZUJhckNoYXJ0PSgwLGcuY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMyLDVINEEyLDIsMCwwLDAsMiw3''@;'; 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+PC9wYXRoPicpLF8uQ2xyU2hhcGVCb3hQbG90PSgwLGcuY2xySWNvblNWRykoJ1xuICA8cGF0''@;'; 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 ''MjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSxfLkNsclNoYXBlQnViYmxlQ2hhcnQ9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBD''@;'; 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 ''LjEyMiBDIDM0LjgzNCAxMS4wODEgMzQuODEgMTEuMDQyIDM0Ljc4NCAxMS4wMDQgTCAyOS4wNjQgMS4xNDQgQyAyOC41NyAwLjI5OSAyNy4zNDggMC4yOTkgMjYuODU0IDEuMTQ0IFoiPjwvcGF0aD4nKSxfLkNsclNoYXBlQ2xvdWRDaGFydD0oMCxnLmNsckljb25TVkcpKCdcbiAgPHBhdGgg''@;'; 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+JyksXy5DbHJTaGFwZUN1cnZlQ2hhcnQ9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRo''@;'; 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+PC9wYXRoPicpLF8uQ2xyU2hhcGVHcmlkQ2hhcnQ9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTUsMTdINGEyLDIsMCww''@;'; 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 ''Y2xyLWktc29saWQtcGF0aC01LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxfLkNsclNoYXBlSGVhdE1hcD0oMCxnLmNsckljb25TVkcpKCdcbiAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0gMzIgNSBM''@;'; 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+JyksXy5DbHJTaGFwZUxp''@;'; 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 ''MTQ0IFoiPjwvcGF0aD4nKSxfLkNsclNoYXBlUGllQ2hhcnQ9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5NSA1IDIgNS44OTUgMiA3IEwgMiAyOSBDIDIgMzAuMTA1IDIu''@;'; 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+JyksXy5DbHJTaGFwZVNjYXR0ZXJQbG90PSgwLGcuY2xySWNvblNWRykoJ1xuICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTSAzMiA1IEwgNCA1IEMgMi44OTUgNSAyIDUuODk1IDIg''@;'; 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 ''ICA8cmVjdCB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIGZpbGwtb3BhY2l0eT0iMCIvPicpLF8uQ2xyU2hhcGVUaWNrQ2hhcnQ9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNIDMyIDUgTCA0IDUgQyAyLjg5''@;'; 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 ''NC44NTUgMTEuMTIyIEMgMzQuODM0IDExLjA4MSAzNC44MSAxMS4wNDIgMzQuNzg0IDExLjAwNCBMIDI5LjA2NCAxLjE0NCBDIDI4LjU3IDAuMjk5IDI3LjM0OCAwLjI5OSAyNi44NTQgMS4xNDQgWiIvPicpLF8uQ2xyU2hhcGVCZWxsQ3VydmU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0i''@;'; put 'put ''TTMzLDI5SDNBMSwxLDAsMSwxLDMsMjdIMzNBMSwxLDAsMSwxLDMzLDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLDI1aC0uNjJhOC4xMSw4LjExLDAsMCwxLTgtNi42N0MyMy42MiwxNC40NCwyMS44OSw3Ljk0LDE4LDcuOTRz''@;'; put 'put ''LTUuNjksNi41MS02LjM4LDEwLjM5YTguMTEsOC4xMSwwLDAsMS04LDYuNjVIM2ExLDEsMCwxLDEsMC0yaC42QTYuMTEsNi4xMSwwLDAsMCw5LjYsMThjMS40MS03Ljg4LDQuMy0xMiw4LjM1LTEyczYuOTMsNC4xNiw4LjMzLDEyYTYuMTEsNi4xMSwwLDAsMCw2LDVIMzNhMSwxLDAsMCwxLDAs''@;'; put 'put ''MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLF8uQ2hhcnRTaGFwZXM9eyJheGlzLWNoYXJ0IjpfLkNsclNoYXBlQXhpc0NoYXJ0LCJiYXItY2hhcnQiOl8uQ2xyU2hhcGVCYXJDaGFydCwiYnViYmxlLWNoYXJ0IjpfLkNsclNoYXBlQnViYmxlQ2hh''@;'; put 'put ''cnQsImNsb3VkLWNoYXJ0IjpfLkNsclNoYXBlQ2xvdWRDaGFydCwiY3VydmUtY2hhcnQiOl8uQ2xyU2hhcGVDdXJ2ZUNoYXJ0LCJncmlkLWNoYXJ0IjpfLkNsclNoYXBlR3JpZENoYXJ0LCJsaW5lLWNoYXJ0IjpfLkNsclNoYXBlTGluZUNoYXJ0LCJwaWUtY2hhcnQiOl8uQ2xyU2hhcGVQaWVD''@;'; put 'put ''aGFydCwidGljay1jaGFydCI6Xy5DbHJTaGFwZVRpY2tDaGFydCwic2NhdHRlci1wbG90IjpfLkNsclNoYXBlU2NhdHRlclBsb3QsImJveC1wbG90IjpfLkNsclNoYXBlQm94UGxvdCwiaGVhdC1tYXAiOl8uQ2xyU2hhcGVIZWF0TWFwLCJiZWxsLWN1cnZlIjpfLkNsclNoYXBlQmVsbEN1cnZl''@;'; put 'put ''fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5DaGFydFNoYXBlcywiYW5hbHl0aWNzIiwoMCx5LmRlc2NyaXB0b3JDb25maWcpKF8uQ2hhcnRTaGFwZXNbImxpbmUtY2hhcnQiXSkpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5k''@;'; put 'put ''b3cuQ2xhcml0eUljb25zLmFkZChfLkNoYXJ0U2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb21tZXJjZS1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAg''@;'; put 'put ''ISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29tbWVyY2Utc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVu''@;'; put 'put ''Y3Rpb24ocSxfLEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoXywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksXy5Db21tZXJjZVNoYXBlcz1fLkNsclNoYXBlRmFjdG9yeT1fLkNsclNoYXBlRW1wbG95ZWU9Xy5DbHJTaGFwZUVtcGxveWVlR3JvdXA9Xy5DbHJTaGFwZVJ1''@;'; put 'put ''YmxlPV8uQ2xyU2hhcGVQZXNvPV8uQ2xyU2hhcGVDb2luQmFnPV8uQ2xyU2hhcGVCaXRjb2luPV8uQ2xyU2hhcGVZZW49Xy5DbHJTaGFwZVdvbj1fLkNsclNoYXBlUnVwZWU9Xy5DbHJTaGFwZVBvdW5kPV8uQ2xyU2hhcGVFQ2hlY2s9Xy5DbHJTaGFwZURvbGxhckJpbGw9Xy5DbHJTaGFwZUJh''@;'; put 'put ''bms9Xy5DbHJTaGFwZUNyZWRpdENhcmQ9Xy5DbHJTaGFwZURvbGxhcj1fLkNsclNoYXBlRXVybz1fLkNsclNoYXBlU3RvcmU9Xy5DbHJTaGFwZVdhbGxldD1fLkNsclNoYXBlU2hvcHBpbmdDYXJ0PV8uQ2xyU2hhcGVQaWdneUJhbms9Xy5DbHJTaGFwZVNob3BwaW5nQmFnPV8uQ2xyU2hhcGVD''@;'; put 'put ''YWxjdWxhdG9yPXZvaWQgMDt2YXIgeT1JKAovKiEgLi4vdXRpbHMvZGVzY3JpcHRvci1jb25maWcgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIiksZz1JKAovKiEgLi4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNv''@;'; put 'put ''bnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7Xy5DbHJTaGFwZUNhbGN1bGF0b3I9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwy''@;'; 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 ''MFY1SDI2WiIvPicpLF8uQ2xyU2hhcGVTaG9wcGluZ0JhZz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI1LDEyVjkuMDVhNyw3LDAsMSwwLTE0LDB2N2ExLDEsMCwwLDAsMiwwVjE0aDhWMTJIMTNWOS4wNWE1''@;'; put 'put ''LDUsMCwxLDEsMTAsMFYxNmExLDEsMCwxLDAsMiwwVjE0aDVWMzJINlYxNEg5VjEySDRWMzIuMDlBMS45MSwxLjkxLDAsMCwwLDUuOTEsMzRIMzAuMDlBMS45MSwxLjkxLDAsMCwwLDMyLDMyLjA5VjEyWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMSIgZD0iTTEzLDkuMjJhNSw1LDAsMSwxLDEwLDBWMTJoMlY5LjIyYTcsNywwLDEsMC0xNCwwVjEyaDJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMjUsMTJ2My4xYTEsMSwwLDEsMS0yLDBWMTJIMTN2''@;'; put 'put ''My4xYTEsMSwwLDAsMS0yLDBWMTJINFYzMmEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTJaIi8+JyksXy5DbHJTaGFwZVBpZ2d5QmFuaz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LjcyLDEw''@;'; 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 ''WiIvPicpLF8uQ2xyU2hhcGVTaG9wcGluZ0NhcnQ9KDAsZy5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjeD0iMTMuMzMiIGN5PSIyOS43NSIgcj0iMi4yNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+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 ''LWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxfLkNsclNoYXBlV2FsbGV0PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsMTVIMzFWOWExLDEs''@;'; put 'put ''MCwwLDAtMS0xSDZhMSwxLDAsMCwxLTEtLjgyVjYuODJBMSwxLDAsMCwxLDYsNkgyOS41OGExLDEsMCwwLDAsMC0ySDZBMywzLDAsMCwwLDMsN2EzLjA4LDMuMDgsMCwwLDAsMCwuMzZWMjcuOTNBNC4xLDQuMSwwLDAsMCw3LjEzLDMySDMwYTEsMSwwLDAsMCwxLTFWMjVoMWExLDEsMCwwLDAs''@;'; put 'put ''MS0xVjE2QTEsMSwwLDAsMCwzMiwxNVpNMjksMzBINy4xM0EyLjExLDIuMTEsMCwwLDEsNSwyNy45M1Y5Ljg4QTMuMTEsMy4xMSwwLDAsMCw2LDEwSDI5djVIMjJhNSw1LDAsMCwwLDAsMTBoN1ptMi03SDIyYTMsMywwLDAsMSwwLTZIMzFaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBjeD0iMjMuMDEiIGN5PSIyMCIgcj0iMS41Ii8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIuOTQsMTRIMzFWOWExLDEsMCwwLDAtMS0xSDZBMSwxLDAs''@;'; put 'put ''MCwxLDUsN0g1VjdBMSwxLDAsMCwxLDYsNkgyOS42YTEsMSwwLDEsMCwwLTJINkEyLjk0LDIuOTQsMCwwLDAsMyw2Ljg4djIxQTQuMTMsNC4xMywwLDAsMCw3LjE1LDMySDMwYTEsMSwwLDAsMCwxLTFWMjZoMS45NGEuOTMuOTMsMCwwLDAsMS0uOTF2LTEwQTEuMDgsMS4wOCwwLDAsMCwzMi45''@;'; put 'put ''NCwxNFpNMzIsMjRsLTguNTgsMGEzLjg3LDMuODcsMCwwLDEtMy43My00LDMuODcsMy44NywwLDAsMSwzLjczLTRMMzIsMTZaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGN4PSIyNC4wNCIgY3k9IjE5LjkyIiByPSIxLjUi''@;'; put 'put ''Lz4nKSxfLkNsclNoYXBlU3RvcmU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOCwzMEgxNlYyMkgxNHY4SDhWMjJINnY4YTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlYyMkgyOFoiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzMuNzksMTMuMjcsMjkuNzEsNS4xMUEyLDIsMCwwLDAsMjcuOTIsNEg4LjA4QTIsMiwwLDAsMCw2LjI5LDUuMTFMMi4yMSwxMy4yN2EyLDIsMCwwLDAtLjIxLjl2My4wOGEyLDIsMCww''@;'; put 'put ''LDAsLjQ2LDEuMjhBNC42Nyw0LjY3LDAsMCwwLDYsMjAuMTNhNC43Miw0LjcyLDAsMCwwLDMtMS4wNyw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzMsNC43MywwLDAsMCw2LDAsNC43Myw0LjczLDAsMCwwLDYsMCw0LjcyLDQuNzIsMCwwLDAsNi41My0uNTJBMiwyLDAsMCwwLDM0LDE3LjI2VjE0''@;'; put 'put ''LjE3QTIsMiwwLDAsMCwzMy43OSwxMy4yN1pNMzAsMTguMTNBMi42OCwyLjY4LDAsMCwxLDI3LjgyLDE3TDI3LDE1Ljg4LDI2LjE5LDE3YTIuNzEsMi43MSwwLDAsMS00LjM3LDBMMjEsMTUuODgsMjAuMTksMTdhMi43MSwyLjcxLDAsMCwxLTQuMzcsMEwxNSwxNS44OCwxNC4xOSwxN2EyLjcx''@;'; put 'put ''LDIuNzEsMCwwLDEtNC4zNywwTDksMTUuODgsOC4xOCwxN0EyLjY4LDIuNjgsMCwwLDEsNiwxOC4xM2EyLjY0LDIuNjQsMCwwLDEtMi0uODhWMTQuMTdMOC4wOCw2SDI3LjkyTDMyLDE0LjE2di42N2wwLDIuMzlBMi42NywyLjY3LDAsMCwxLDMwLDE4LjEzWiIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI4LDMwSDE2VjIySDE0djhIOFYyMkg2djhhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjIySDI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMiIgZD0iTTMzLjc5LDEzLjI3LDI5LjcxLDUuMTFBMiwyLDAsMCwwLDI3LjkyLDRIOC4wOEEyLDIsMCwwLDAsNi4yOSw1LjExTDIuMjEsMTMuMjdhMiwyLDAsMCwwLS4yMS45djMuMDhhMiwyLDAsMCwwLC40NiwxLjI4QTQuNjcsNC42NywwLDAsMCw2LDIwLjEzYTQuNzIsNC43MiwwLDAs''@;'; put 'put ''MCwzLTEuMDcsNC43Myw0LjczLDAsMCwwLDYsMCw0LjczLDQuNzMsMCwwLDAsNiwwLDQuNzMsNC43MywwLDAsMCw2LDAsNC43Miw0LjcyLDAsMCwwLDYuNTMtLjUyQTIsMiwwLDAsMCwzNCwxNy4yNlYxNC4xN0EyLDIsMCwwLDAsMzMuNzksMTMuMjdaTTE1LDE0LjR2MS41MkwxNC4xOCwxN2Ey''@;'; put 'put ''LjcxLDIuNzEsMCwwLDEtNC4zNywwTDksMTUuODhWMTQuNEwxMS41OSw2SDE2Wm0xMiwxLjQ4TDI2LjE5LDE3YTIuNzEsMi43MSwwLDAsMS00LjM3LDBMMjEsMTUuODhsMCwwVjE0LjRMMjAsNmg0LjQ1TDI3LDE0LjRaIi8+JyksXy5DbHJTaGFwZUV1cm89KDAsZy5jbHJJY29uU1ZHKSgnPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMS40OCwyOC40OWExLDEsMCwwLDAtMS4zOC0uMzJBMTIsMTIsMCwwLDEsMTIuNDUsMjJIMjQuMTZhMSwxLDAsMCwwLDAtMkgxMS45M2ExMS4xNiwxMS4xNiwwLDAsMSwwLTRIMjQuMTZhMSwxLDAsMCww''@;'; put 'put ''LDAtMkgxMi40NUExMiwxMiwwLDAsMSwzMC4wNiw3LjhhMSwxLDAsMCwwLDEuMDYtMS43QTE0LDE0LDAsMCwwLDEwLjM0LDE0SDMuNTRhMSwxLDAsMSwwLDAsMkg5LjkxYTE0LDE0LDAsMCwwLS4xNiwyLDE0LDE0LDAsMCwwLC4xNiwySDMuNTRhMSwxLDAsMSwwLDAsMmg2LjhhMTQsMTQsMCww''@;'; put 'put ''LDAsMjAuODMsNy44N0ExLDEsMCwwLDAsMzEuNDgsMjguNDlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm03LjQyLDI1LjE2QTEwLjg4LDEwLjg4''@;'; put 'put ''LDAsMCwxLDkuMjMsMjFINS44NGExLDEsMCwwLDEsMC0yaDNjMC0uMzUtLjA1LS43MS0uMDUtMS4wN3MwLS42MywwLS45M2gtM2ExLDEsMCwwLDEsMC0ySDkuMTlBMTAuODYsMTAuODYsMCwwLDEsMjUuMzgsOC42OWExLjI1LDEuMjUsMCwwLDEtMS4zMiwyLjEyQTguMzYsOC4zNiwwLDAsMCwx''@;'; put 'put ''MS44MiwxNWg5LjM2YTEsMSwwLDAsMSwwLDJIMTEuMzNhNy43Miw3LjcyLDAsMCwwLDAsMmg5LjgyYTEsMSwwLDAsMSwwLDJIMTEuODdhOC4zNiw4LjM2LDAsMCwwLDEyLjIyLDQsMS4yNSwxLjI1LDAsMSwxLDEuMzMsMi4xMloiLz4nKSxfLkNsclNoYXBlRG9sbGFyPSgwLGcuY2xySWNvblNW''@;'; 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+JyksXy5DbHJTaGFwZUNyZWRpdENhcmQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wm0w''@;'; put 'put ''LDIsMCwxMkg0TDQsOFpNNCwyOFYyNEgzMnY0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI3IiB5PSIzIiB3aWR0aD0iMjIiIGhlaWdodD0iMzAiIHJ4PSIwLjk2IiByeT0iMC45NiIgdHJhbnNmb3JtPSJ0cmFu''@;'; put 'put ''c2xhdGUoMzYpIHJvdGF0ZSg5MCkiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzAwMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDZINEEyLDIs''@;'; put 'put ''MCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wm0wLDE4SDRWMjBIMzJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLF8uQ2xyU2hhcGVCYW5rPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0z''@;'; 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+JyksXy5DbHJTaGFwZURvbGxhckJpbGw9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEiIGQ9Ik0zMiw4SDRhMiwyLDAsMCwwLTIsMlYyNmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTBBMiwyLDAsMCwwLDMyLDhabTAsNmE0LjI1LDQuMjUsMCwwLDEtMy45LTRIMzJabTAsMS42MnY0LjgzQTUuODcsNS44NywwLDAsMCwyNi40OSwyNmgtMTdBNS44Nyw1Ljg3LDAs''@;'; put 'put ''MCwwLDQsMjAuNDRWMTUuNkE1Ljg3LDUuODcsMCwwLDAsOS41MSwxMGgxN0E1Ljg3LDUuODcsMCwwLDAsMzIsMTUuNlpNNy45LDEwQTQuMjUsNC4yNSwwLDAsMSw0LDE0VjEwWk00LDIyLjA2QTQuMjUsNC4yNSwwLDAsMSw3LjksMjZINFpNMjguMSwyNkE0LjI1LDQuMjUsMCwwLDEsMzIsMjIu''@;'; put 'put ''MDZWMjZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDEwLjg1Yy0zLjQ3LDAtNi4zLDMuMjEtNi4zLDcuMTVzMi44Myw3LjE1LDYuMyw3LjE1LDYuMy0zLjIxLDYuMy03LjE1UzIxLjQ3LDEwLjg1LDE4LDEw''@;'; put 'put ''Ljg1Wm0wLDEyLjY5Yy0yLjU5LDAtNC43LTIuNDktNC43LTUuNTVzMi4xMS01LjU1LDQuNy01LjU1LDQuNywyLjQ5LDQuNyw1LjU1UzIwLjU5LDIzLjU1LDE4LDIzLjU1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMy''@;'; put 'put ''LDhINGEyLDIsMCwwLDAtMiwyVjI2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAsMzIsOFpNNCwyNlYyMS4xNUE1LjE4LDUuMTgsMCwwLDEsOC43OSwyNlpNNCwxNC44NVYxMEg4Ljc5QTUuMTgsNS4xOCwwLDAsMSw0LDE0Ljg1Wk0xOCwyNS4xNWMtMy40Nyww''@;'; put 'put ''LTYuMy0zLjIxLTYuMy03LjE1czIuODMtNy4xNSw2LjMtNy4xNSw2LjMsMy4yMSw2LjMsNy4xNVMyMS40NywyNS4xNSwxOCwyNS4xNVpNMzIsMjZIMjcuMjVBNS4xOCw1LjE4LDAsMCwxLDMyLDIxLjE1Wm0wLTExLjE1QTUuMTgsNS4xOCwwLDAsMSwyNy4yNSwxMEgzMloiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxlbGxpcHNlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGN4PSIxOCIgY3k9IjE4IiByeD0iNCIgcnk9IjQuNzIiLz4nKSxfLkNsclNoYXBlRUNoZWNrPSgwLGcuY2xySWNvblNWRykoJzxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; 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 ''LDIuODQtMSwxLDEsMCwwLDEsLjcxLS4yNSwxLjA4LDEuMDgsMCwwLDEsMS4wOSwxLjExLDEuMiwxLjIsMCwwLDEtLjM2Ljg0QTYuMTcsNi4xNywwLDAsMSw2LjU3LDE4LjY4Wk05LjMsMTEuNTVjLS4xOC0xLjc3LTEuMjMtMy4xNi0zLTMuMTZzLTIuODcsMS4zLTMuMTIsMy4xNloiLz4nKSxf''@;'; put 'put ''LkNsclNoYXBlUG91bmQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNy45LDMwSDEzLjRBOC40NSw4LjQ1LDAsMCwwLDE1LDI0LjY1VjIxaDQuMzFhMSwxLDAsMCwwLDAtMkgxNVYxMS4zMUE1LjI0LDUuMjQs''@;'; put 'put ''MCwwLDEsMjAuMjEsNiw1LjE5LDUuMTksMCwwLDEsMjQsNy43M2ExLDEsMCwwLDAsMS40OC0xLjM1QTcuMTksNy4xOSwwLDAsMCwxMywxMS4zMVYxOUg4LjcyYTEsMSwwLDEsMCwwLDJIMTN2My42NUMxMywyOS4zOCwxMC4xMiwzMCwxMCwzMGExLDEsMCwwLDAsLjE3LDJIMjcuOWExLDEsMCwx''@;'; put 'put ''LDAsMC0yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptNi41LDI1LjkySDExLjc0YTEuMjUsMS4yNSwwLDAsMS0uMjItMi40OGMuMTUsMCwxLjcy''@;'; put 'put ''LS40OSwxLjcyLTMuNTRWMTloLTIuNWExLDEsMCwwLDEsMC0yaDIuNVYxMS44OGE1Ljg1LDUuODUsMCwwLDEsNS43Mi02LDUuNjMsNS42MywwLDAsMSw0LjIxLDEuOTRBMS4yNSwxLjI1LDAsMSwxLDIxLjMsOS41MSwzLjA4LDMuMDgsMCwwLDAsMTksOC40MmEzLjM1LDMuMzUsMCwwLDAtMy4y''@;'; put 'put ''MiwzLjQ2VjE3aDNhMSwxLDAsMCwxLDAsMmgtM3YyLjlBNy42NSw3LjY1LDAsMCwxLDE1LDI1LjQySDI0LjVhMS4yNSwxLjI1LDAsMCwxLDAsMi41WiIvPicpLF8uQ2xyU2hhcGVSdXBlZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMSIgZD0iTTI4LDhIMjQuMTRBNy41Miw3LjUyLDAsMCwwLDIyLjYsNkgyOGExLDEsMCwwLDAsMC0ySDEwYTEsMSwwLDAsMCwwLDJoNy41NWE1LjQyLDUuNDIsMCwwLDEsNC4yLDJIMTBhMSwxLDAsMCwwLDAsMkgyMi43OUE1LjU0LDUuNTQsMCwwLDEsMjMsMTEuNTEsNS40OCw1LjQ4''@;'; put 'put ''LDAsMCwxLDE3LjU1LDE3SDExLjE0YTEsMSwwLDAsMC0uNzUsMS42NkwyMi4wNiwzMmExLDEsMCwxLDAsMS41LTEuMzJMMTMuMzUsMTloNC4yMWE3LjUxLDcuNTEsMCwwLDAsNy4zLTlIMjhhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTUuODgsOUgyNmExLDEsMCwwLDEsMCwySDI0LjI2YzAsLjA2LDAsLjEyLDAsLjE5YTYuMDksNi4wOSwwLDAsMS02LDYuMmgtMmw2LjgyLDguMDZhMS4yNSwxLjI1LDAsMCwxLTEu''@;'; put 'put ''OTEsMS42MkwxMi42MywxOC45NGExLjI1LDEuMjUsMCwwLDEsMS0yLjA2aDQuNzFhMy41OSwzLjU5LDAsMCwwLDMuNDgtMy42OWMwLS4wNywwLS4xMywwLS4yaC05YTEsMSwwLDAsMSwwLTJoOC4zMmEzLjQxLDMuNDEsMCwwLDAtMi43OC0xLjVIMTIuNzVhMS4yNSwxLjI1LDAsMCwxLDAtMi41''@;'; put 'put ''SDI2YTEsMSwwLDAsMSwwLDJIMjIuNjhBNi4yMyw2LjIzLDAsMCwxLDIzLjg4LDExWiIvPicpLF8uQ2xyU2hhcGVXb249KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMywxOEgyOC43NWwuNS0ySDMzYTEsMSww''@;'; 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 ''MCwxLDIuNDIsMEwyMC4zOCwxNGg0LjhsMS4xNC00LjMyYTEuMjUsMS4yNSwwLDAsMSwyLjQyLjY0bC0xLDMuNjhIMjlhMSwxLDAsMCwxLDAsMkgyNy4yNGwtLjUzLDJIMjlhMSwxLDAsMCwxLDAsMloiLz4nKSxfLkNsclNoYXBlWWVuPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuMzQsNC41NWExLDEsMCwxLDAtMS42Ny0xLjFMMTgsMTguMjMsOC4zMywzLjQ1YTEsMSwwLDAsMC0xLjY3LDEuMUwxNywyMC4zNVYyMi4ySDEyYS44LjgsMCwwLDAsMCwxLjZoNXYyLjRIMTJhLjguOCwwLDAsMCwwLDEu''@;'; put 'put ''Nmg1VjMyYTEsMSwwLDAsMCwyLDBWMjcuOGg1YS44LjgsMCwwLDAsMC0xLjZIMTlWMjMuOGg1YS44LjgsMCwwLDAsMC0xLjZIMTlWMjAuMzVaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwz''@;'; put 'put ''NCwxOCwxNiwxNiwwLDAsMCwxOCwyWm04LjA3LDcuOTFMMTkuNzQsMjBIMjJhMSwxLDAsMCwxLDAsMkgxOS4yNXYySDIyYTEsMSwwLDAsMSwwLDJIMTkuMjV2Mi43NWExLjI1LDEuMjUsMCwwLDEtMi41LDBWMjZIMTRhMSwxLDAsMSwxLDAtMmgyLjc1VjIySDE0YTEsMSwwLDEsMSwwLTJoMi4y''@;'; put 'put ''Nkw5LjkzLDkuOTFhMS4yNSwxLjI1LDAsMSwxLDIuMTItMS4zM0wxOCwxOC4wOGw1Ljk1LTkuNDlhMS4yNSwxLjI1LDAsMSwxLDIuMTIsMS4zM1oiLz4nKSxfLkNsclNoYXBlQml0Y29pbj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuMTEsMTYuODhBNS40OSw1LjQ5LDAsMCwwLDIx''@;'; put 'put ''LDdWNGExLDEsMCwwLDAtMiwwVjdIMTZWNGExLDEsMCwwLDAtMiwwVjdIMTFhMSwxLDAsMCwwLTEsMVYyOGExLDEsMCwwLDAsMSwxaDN2M2ExLDEsMCwwLDAsMiwwVjI5aDN2M2ExLDEsMCwwLDAsMiwwVjI5aC4wOEE2LjA3LDYuMDcsMCwwLDAsMjcsMjIuODF2LS42MkE2LjI1LDYuMjUsMCww''@;'; put 'put ''LDAsMjQuMTEsMTYuODhaTTEyLDloOC42OWEzLjU5LDMuNTksMCwwLDEsMy40MywyLjM2QTMuNTEsMy41MSwwLDAsMSwyMC43OSwxNkgxMlpNMjUsMjIuODFBNC4wOCw0LjA4LDAsMCwxLDIxLjA2LDI3SDEyVjE4aDkuMDZBNC4wOCw0LjA4LDAsMCwxLDI1LDIyLjE5WiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjEuMTgsMTguNDdIMTQuNXY2aDYuNjhhMi43LDIuNywwLDAsMCwyLjYzLTIuNzd2LS40OEEyLjcxLDIuNzEsMCwwLDAsMjEuMTgsMTguNDdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWkt''@;'; put 'put ''c29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIzLDEzLjc1YTIuMjQsMi4yNCwwLDAsMC0yLjIzLTIuMjVIMTQuNVYxNmg2LjNBMi4yMiwyLjIyLDAsMCwwLDIzLDEzLjc1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTguMzEsMTkuNzNBNS4yMiw1LjIyLDAsMCwxLDIxLjE4LDI3SDIxdjEuOWExLDEsMCwwLDEtMiwwVjI3SDE3djEuOWExLDEsMCwwLDEtMiwwVjI3SDEzLjI1QTEuMjUsMS4yNSwwLDAsMSwxMiwy''@;'; put 'put ''NS43NVYxNy4yM2gwdi03QTEuMjUsMS4yNSwwLDAsMSwxMy4yNSw5SDE1VjcuMDdhMSwxLDAsMCwxLDIsMFY5aDJWNy4wN2ExLDEsMCwwLDEsMiwwVjlhNC43Miw0LjcyLDAsMCwxLDMuMiw4LDUuMzEsNS4zMSwwLDAsMSwyLjExLDQuMjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29s''@;'; put 'put ''aWQtcGF0aC0zIiAvPicpLF8uQ2xyU2hhcGVDb2luQmFnPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMS42LDI5YTEsMSwwLDAsMC0xLTFoLTZhMSwxLDAsMCwwLDAsMmg2QTEsMSwwLDAsMCwyMS42LDI5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; 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+JyksXy5DbHJTaGFwZVBlc289KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDEzLjJIMjcu''@;'; put 'put ''ODlBNi44MSw2LjgxLDAsMCwwLDI4LDEyYTcuODUsNy44NSwwLDAsMC0uMS0xLjE5aDIuOTNhLjguOCwwLDAsMCwwLTEuNkgyNy40NkE4LjQ0LDguNDQsMCwwLDAsMTkuNTcsNEgxMWExLDEsMCwwLDAtMSwxVjkuMkg3YS44LjgsMCwwLDAsMCwxLjZoM3YyLjRIN2EuOC44LDAsMCwwLDAsMS42''@;'; put 'put ''aDNWMzFhMSwxLDAsMCwwLDIsMFYyMGg3LjU3YTguNDUsOC40NSwwLDAsMCw3Ljg5LTUuMkgzMWEuOC44LDAsMCwwLDAtMS42Wk0xMiw2aDcuNTdhNi41MSw2LjUxLDAsMCwxLDUuNjgsMy4ySDEyWm0wLDQuOEgyNS44N2E1LjYsNS42LDAsMCwxLDAsMi40SDEyWk0xOS41NywxOEgxMlYxNC44''@;'; put 'put ''SDI1LjI1QTYuNTEsNi41MSwwLDAsMSwxOS41NywxOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xNC4xOCwxMy44VjE2aDkuNDVhNS4yNiw1LjI2LDAsMCwwLC4wOC0uODksNC43Miw0LjcyLDAsMCwwLS4yLTEuMzFaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xNC4xOCwxOS43aDUuMTlhNC4yOCw0LjI4LDAsMCwwLDMuNS0xLjlIMTQuMThaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOS4zNywxMC41MUgxNC4xOFYxMmg4''@;'; put 'put ''LjM3QTQuMjEsNC4yMSwwLDAsMCwxOS4zNywxMC41MVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+PHBhdGggZD0iTTE3LjY3LDJhMTYsMTYsMCwxLDAsMTYsMTZBMTYsMTYsMCwwLDAsMTcuNjcsMlptMTAuNSwxNS44SDI1LjdhNi44Nyw2Ljg3LDAsMCwxLTYu''@;'; put 'put ''MzMsNC40SDE0LjE4djYuNTRhMS4yNSwxLjI1LDAsMSwxLTIuNSwwVjE3LjhIOC43NmEuOS45LDAsMSwxLDAtMS44aDIuOTJWMTMuOEg4Ljc2YS45LjksMCwxLDEsMC0xLjhoMi45MlY5LjI2QTEuMjUsMS4yNSwwLDAsMSwxMi45Myw4aDYuNDRhNi44NCw2Ljg0LDAsMCwxLDYuMTUsNGgyLjY1''@;'; put 'put ''YS45LjksMCwwLDEsMCwxLjhIMjYuMDlhNi45MSw2LjkxLDAsMCwxLC4xMiwxLjMsNi44LDYuOCwwLDAsMS0uMDYuOWgyYS45LjksMCwwLDEsMCwxLjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPicpLF8uQ2xyU2hhcGVSdWJsZT0oMCxnLmNsckljb25TVkcp''@;'; put 'put ''KCc8cGF0aCBkPSJNMjAuNTcsMjBBOC4yMyw4LjIzLDAsMCwwLDI5LDEyYTguMjMsOC4yMywwLDAsMC04LjQzLThIMTJhMSwxLDAsMCwwLTEsMVYxOEg5YTEsMSwwLDAsMCwwLDJoMnYySDlhMSwxLDAsMCwwLDAsMmgydjdhMSwxLDAsMCwwLDIsMFYyNGg5YTEsMSwwLDAsMCwwLTJIMTNWMjBa''@;'; put 'put ''TTEzLDZoNy41N0E2LjI0LDYuMjQsMCwwLDEsMjcsMTJhNi4yMyw2LjIzLDAsMCwxLTYuNDMsNkgxM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMC43NSw5LjI1SDE1djguODFoNS43OWE0LjY2LDQuNjYsMCwwLDAsNC44Ni00LjRB''@;'; put 'put ''NC42NSw0LjY1LDAsMCwwLDIwLjc1LDkuMjVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTIuNzUsMTguNTZIMTVWMjJoOC4yOWExLDEsMCwwLDEsMCwySDE1djVhMS4y''@;'; put 'put ''NSwxLjI1LDAsMCwxLTIuNSwwVjI0SDExLjI1YTEsMSwwLDAsMSwwLTJoMS4yMVYyMC41NkgxMS4yNWExLjI1LDEuMjUsMCwwLDEsMC0yLjVoMS4yMVY4YTEuMjUsMS4yNSwwLDAsMSwxLjI1LTEuMjVoN2E3LjE0LDcuMTQsMCwwLDEsNy4zNiw2LjlBNy4xNSw3LjE1LDAsMCwxLDIwLjc1LDIw''@;'; put 'put ''LjU2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxfLkNsclNoYXBlRW1wbG95ZWVHcm91cD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTguNDIsMTYuMzFhNS43LDUuNywwLDEsMSw1Ljc2LTUuN0E1Ljc0LDUuNzQsMCwwLDEsMTguNDIsMTYuMzFa''@;'; 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+JyksXy5DbHJTaGFwZUVtcGxveWVlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNi40MywxNi42OWE3LDcsMCwxLDEsNy03QTcsNywwLDAsMSwxNi40MywxNi42OVptMC0xMS45MmE1LDUsMCwxLDAsNSw1QTUsNSwwLDAsMCwx''@;'; put 'put ''Ni40Myw0Ljc3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTIyLDE3LjlBMjUuNDEsMjUuNDEsMCwwLDAsNS44OCwxOS41N2E0LjA2LDQuMDYsMCwwLDAtMi4zMSwzLjY4VjI5LjJhMSwxLDAsMSwwLDIsMFYyMy4yNWEyLDIsMCww''@;'; put 'put ''LDEsMS4xNi0xLjg2LDIyLjkxLDIyLjkxLDAsMCwxLDkuNy0yLjExLDIzLjU4LDIzLjU4LDAsMCwxLDUuNTcuNjZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cmVjdCB4PSIyMi4xNCIgeT0iMjcuNDEiIHdpZHRoPSI2LjE0IiBoZWlnaHQ9IjEu''@;'; put 'put ''NCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgPHBhdGggZD0iTTMzLjE3LDIxLjQ3SDI4djJoNC4xN3Y4LjM3SDE4VjIzLjQ3aDYuM3YuNDJhMSwxLDAsMCwwLDIsMFYyMGExLDEsMCwwLDAtMiwwdjEuNDdIMTdhMSwxLDAsMCwwLTEsMVYzMi44NGEx''@;'; put 'put ''LDEsMCwwLDAsMSwxSDMzLjE3YTEsMSwwLDAsMCwxLTFWMjIuNDdBMSwxLDAsMCwwLDMzLjE3LDIxLjQ3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgXG4gIDxjaXJjbGUgY3g9IjE2Ljg2IiBjeT0iOS43MyIgcj0iNi40NiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICA8cmVjdCB4PSIyMSIgeT0iMjgiIHdpZHRoPSI3IiBoZWlnaHQ9IjEuNCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICA8cGF0aCBkPSJNMTUsMzB2M2ExLDEsMCwwLDAsMSwxSDMzYTEsMSwwLDAsMCwx''@;'; put 'put ''LTFWMjNhMSwxLDAsMCwwLTEtMUgyNlYyMC41M2ExLDEsMCwwLDAtMiwwVjIySDIyVjE4LjQyQTMyLjEyLDMyLjEyLDAsMCwwLDE2Ljg2LDE4YTI2LDI2LDAsMCwwLTExLDIuMzksMy4yOCwzLjI4LDAsMCwwLTEuODgsM1YzMFptMTcsMkgxN1YyNGg3di40MmExLDEsMCwwLDAsMiwwVjI0aDZa''@;'; put 'put ''IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIi8+JyksXy5DbHJTaGFwZUZhY3Rvcnk9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjQ3LDcuMzdhMSwxLDAsMCwwLTEsLjA2TDIzLDEzLjc3VjguMjZhMSwxLDAsMCwwLTEuNjQtLjc3TDEzLjQ4LDE0SDEwVjQu''@;'; 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 ''MjRWMjZoMlptMC02SDI0VjIwaDJabTQsNkgyOFYyNmgyWm0wLTZIMjhWMjBoMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxfLkNvbW1lcmNlU2hhcGVzPXtjYWxjdWxhdG9yOl8uQ2xyU2hhcGVDYWxjdWxhdG9yLCJwaWdneS1iYW5rIjpfLkNsclNoYXBl''@;'; put 'put ''UGlnZ3lCYW5rLCJzaG9wcGluZy1iYWciOl8uQ2xyU2hhcGVTaG9wcGluZ0JhZywic2hvcHBpbmctY2FydCI6Xy5DbHJTaGFwZVNob3BwaW5nQ2FydCx3YWxsZXQ6Xy5DbHJTaGFwZVdhbGxldCxzdG9yZTpfLkNsclNoYXBlU3RvcmUsZXVybzpfLkNsclNoYXBlRXVybyxkb2xsYXI6Xy5DbHJT''@;'; put 'put ''aGFwZURvbGxhcixwZXNvOl8uQ2xyU2hhcGVQZXNvLCJjcmVkaXQtY2FyZCI6Xy5DbHJTaGFwZUNyZWRpdENhcmQsYmFuazpfLkNsclNoYXBlQmFuaywiZG9sbGFyLWJpbGwiOl8uQ2xyU2hhcGVEb2xsYXJCaWxsLCJlLWNoZWNrIjpfLkNsclNoYXBlRUNoZWNrLHBvdW5kOl8uQ2xyU2hhcGVQ''@;'; put 'put ''b3VuZCxydXBlZTpfLkNsclNoYXBlUnVwZWUsd29uOl8uQ2xyU2hhcGVXb24seWVuOl8uQ2xyU2hhcGVZZW4sYml0Y29pbjpfLkNsclNoYXBlQml0Y29pbixydWJsZTpfLkNsclNoYXBlUnVibGUsImNvaW4tYmFnIjpfLkNsclNoYXBlQ29pbkJhZywiZW1wbG95ZWUtZ3JvdXAiOl8uQ2xyU2hh''@;'; put 'put ''cGVFbXBsb3llZUdyb3VwLGVtcGxveWVlOl8uQ2xyU2hhcGVFbXBsb3llZSxmYWN0b3J5Ol8uQ2xyU2hhcGVGYWN0b3J5fSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5Db21tZXJjZVNoYXBlcywic2F2aW5ncyIsKDAseS5kZXNjcmlwdG9yQ29uZmlnKShfLkNvbW1lcmNlU2hhcGVzWyJwaWdn''@;'; put 'put ''eS1iYW5rIl0pKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoXy5Db21tZXJjZVNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvY29yZS1zaGFwZXMudHMiOgovKiEqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24ocSxfLEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoXywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksXy5Db3JlU2hhcGVzPV8uQ2xyU2hhcGVBcnJvdz1f''@;'; put 'put ''LkNsclNoYXBlU3RlcEZvcndhcmQyPV8uQ2xyU2hhcGVFeWVIaWRlPV8uQ2xyU2hhcGVFeWU9Xy5DbHJTaGFwZUV2ZW50PV8uQ2xyU2hhcGVDYWxlbmRhcj1fLkNsclNoYXBlQW5nbGVEb3VibGU9Xy5DbHJTaGFwZVZpZXdDb2x1bW5zPV8uQ2xyU2hhcGVTZWFyY2g9Xy5DbHJTaGFwZVZtQnVn''@;'; put 'put ''PV8uQ2xyU2hhcGVGaWx0ZXJHcmlkQ2lyY2xlPV8uQ2xyU2hhcGVGaWx0ZXJHcmlkPV8uQ2xyU2hhcGVFbGxpcHNpc1ZlcnRpY2FsPV8uQ2xyU2hhcGVFbGxpcHNpc0hvcml6b250YWw9Xy5DbHJTaGFwZUNsb3VkPV8uQ2xyU2hhcGVJbWFnZT1fLkNsclNoYXBlQmVsbD1fLkNsclNoYXBlRm9s''@;'; put 'put ''ZGVyT3Blbj1fLkNsclNoYXBlRm9sZGVyPV8uQ2xyU2hhcGVBbmdsZT1fLkNsclNoYXBlVXNlcj1fLkNsclNoYXBlQmFycz1fLkNsclNoYXBlSGVscEluZm89Xy5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD1fLkNsclNoYXBlRXJyb3JTdGFuZGFyZD1fLkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJk''@;'; put 'put ''PV8uQ2xyU2hhcGVJbmZvU3RhbmRhcmQ9Xy5DbHJTaGFwZUluZm9DaXJjbGU9Xy5DbHJTaGFwZUNoZWNrQ2lyY2xlPV8uQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZT1fLkNsclNoYXBlRXhjbGFtYXRpb25UcmlhbmdsZT1fLkNsclNoYXBlVGltZXM9Xy5DbHJTaGFwZUNoZWNrPV8uQ2xyU2hh''@;'; put 'put ''cGVDb2c9Xy5DbHJTaGFwZUhvbWU9Xy5DbHJTaGFwZVVua25vd25TdGF0dXM9dm9pZCAwO3ZhciB5PUkoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxnPUkoCi8qISAuLi91dGlscy9z''@;'; put 'put ''dmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtfLkNsclNoYXBlVW5rbm93blN0YXR1cz0oMCxnLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBj''@;'; put 'put ''eD0iMTcuNTgiIGN5PSIyNi4yMyIgcj0iMS40Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yNC43LDEzYTUuMTgsNS4xOCwwLDAsMC0yLjE2LTMuNTYsNy4yNiw3LjI2LDAsMCwwLTUuNzEtMS4wOUExMS4z''@;'; put 'put ''NCwxMS4zNCwwLDAsMCwxMiwxMC40NCwxLDEsMCwxLDAsMTMuMjYsMTJhOS4zMiw5LjMyLDAsMCwxLDMuOTQtMS43Miw1LjI5LDUuMjksMCwwLDEsNC4xNi43NCwzLjIxLDMuMjEsMCwwLDEsMS4zNSwyLjE5Yy4zMywyLjY5LTMuMTksMy43NS01LjMyLDQuMTRsLS44Mi4xNXY0LjM2YTEsMSww''@;'; put 'put ''LDAsMCwyLDBWMTkuMTdDMjQuNjEsMTcuNzksMjQuODgsMTQuNDEsMjQuNywxM1oiLz4nKSxfLkNsclNoYXBlSG9tZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjcxLDE3LjI5bC0xNS0xNWExLDEsMCww''@;'; put 'put ''LDAtMS40MSwwbC0xNSwxNWExLDEsMCwwLDAsMS40MSwxLjQxTDE4LDQuNDEsMzIuMjksMTguNzFhMSwxLDAsMCwwLDEuNDEtMS40MVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LDMyaC01VjIySDEz''@;'; put 'put ''VjMySDhWMThMNiwyMFYzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAsMCwyLTJWMTkuNzZsLTItMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTlhMSwxLDAsMCwxLS43MS0uMjlMMTgs''@;'; put 'put ''NC40MSwzLjcxLDE4LjcxYTEsMSwwLDAsMS0xLjQxLTEuNDFsMTUtMTVhMSwxLDAsMCwxLDEuNDEsMGwxNSwxNUExLDEsMCwwLDEsMzMsMTlaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LDcuNzksNiwxOS44''@;'; put 'put ''M1YzMmEyLDIsMCwwLDAsMiwyaDdWMjRoNlYzNGg3YTIsMiwwLDAsMCwyLTJWMTkuNzZaIi8+JyksXy5DbHJTaGFwZUNvZz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LjEsMTFjLTMuOSwwLTcsMy4xLTcs''@;'; 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 ''cnQiIGQ9Ik0yNi44NSwxLjE0LDIxLjEzLDExQTEuMjgsMS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxfLkNsclNoYXBlQ2hlY2s9KDAsZy5jbHJJY29uU1ZHKSgnPHBh''@;'; put 'put ''dGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xMy43MiwyNy42OSwzLjI5LDE3LjI3YTEsMSwwLDAsMSwxLjQxLTEuNDFsOSw5TDMxLjI5LDcuMjlhMSwxLDAsMCwxLDEuNDEsMS40MVoiLz4nKSxfLkNsclNoYXBlVGltZXM9KDAsZy5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOS40MSwxOGw4LjI5LTguMjlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOCwxNi41OSw5LjcxLDguMjlBMSwxLDAsMCwwLDguMjksOS43MUwxNi41OSwxOCw4LjI5LDI2LjI5YTEsMSwwLDEsMCwx''@;'; put 'put ''LjQxLDEuNDFMMTgsMTkuNDFsOC4yOSw4LjI5YTEsMSwwLDAsMCwxLjQxLTEuNDFaIi8+JyksXy5DbHJTaGFwZUV4Y2xhbWF0aW9uVHJpYW5nbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyMS4zMmEx''@;'; put 'put ''LjMsMS4zLDAsMCwwLDEuMy0xLjNWMTRhMS4zLDEuMywwLDEsMC0yLjYsMHY2QTEuMywxLjMsMCwwLDAsMTgsMjEuMzJaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgY3g9IjE3Ljk1IiBjeT0iMjQuMjciIHI9''@;'; put 'put ''IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzAuMzMsMjUuNTQsMjAuNTksNy42YTMsMywwLDAsMC01LjI3LDBMNS41NywyNS41NEEzLDMsMCwwLDAsOC4yMSwzMEgyNy42OWEzLDMsMCwwLDAsMi42''@;'; put 'put ''NC00LjQzWm0tMS43OCwxLjk0YTEsMSwwLDAsMS0uODYuNDlIOC4yMWExLDEsMCwwLDEtLjg4LTEuNDhMMTcuMDcsOC41NWExLDEsMCwwLDEsMS43NiwwbDkuNzQsMTcuOTRBMSwxLDAsMCwxLDI4LjU1LDI3LjQ4WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMC4zMywyNS41NCwyMC41OSw3LjZhMywzLDAsMCwwLTUuMjcsMEw1LjU3LDI1LjU0QTMsMywwLDAsMCw4LjIxLDMwSDI3LjY5YTMsMywwLDAsMCwyLjY0LTQuNDNaTTE2LjQ2LDEyLjc0YTEuNDksMS40OSwwLDAsMSwzLDB2Ni44OWExLjQ5LDEu''@;'; put 'put ''NDksMCwxLDEtMywwWk0xOCwyNi4yNWExLjcyLDEuNzIsMCwxLDEsMS43Mi0xLjcyQTEuNzIsMS43MiwwLDAsMSwxOCwyNi4yNVoiLz4nKSxfLkNsclNoYXBlRXhjbGFtYXRpb25DaXJjbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIi''@;'; put 'put ''IGQ9Ik0xOCwyMC4wN2ExLjMsMS4zLDAsMCwxLTEuMy0xLjN2LTZhMS4zLDEuMywwLDEsMSwyLjYsMHY2QTEuMywxLjMsMCwwLDEsMTgsMjAuMDdaIi8+XG4gICAgICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgY3g9IjE3Ljk1''@;'; put 'put ''IiBjeT0iMjMuMDIiIHI9IjEuNSIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabS0xLjQ5LDZhMS40OSwxLjQ5LDAsMCwxLDMsMHY2Ljg5YTEu''@;'; put 'put ''NDksMS40OSwwLDEsMS0zLDBaTTE4LDI1LjVhMS43MiwxLjcyLDAsMSwxLDEuNzItMS43MkExLjcyLDEuNzIsMCwwLDEsMTgsMjUuNVoiLz4nKSxfLkNsclNoYXBlQ2hlY2tDaXJjbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTEiIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAsMCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9''@;'; put 'put ''Ik0xNi4zNCwyMy43NGwtNS01YTEsMSwwLDAsMSwxLjQxLTEuNDFsMy41OSwzLjU5LDYuNzgtNi43OGExLDEsMCwwLDEsMS40MSwxLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCwxOEExMiwxMiwwLDEs''@;'; put 'put ''MSwxOCw2LDEyLDEyLDAsMCwxLDMwLDE4Wm0tNC43Ny0yLjE2YTEuNCwxLjQsMCwwLDAtMi0ybC02Ljc3LDYuNzdMMTMsMTcuMTZhMS40LDEuNCwwLDAsMC0yLDJsNS40NSw1LjQ1WiIvPicpLF8uQ2xyU2hhcGVJbmZvQ2lyY2xlPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiICBjeD0iMTcuOTMiIGN5PSIxMS45IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgIGQ9Ik0yMSwyM0gxOVYxNUgxNmExLDEsMCwwLDAsMCwy''@;'; put 'put ''aDF2NkgxNWExLDEsMCwxLDAsMCwyaDZhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgIGQ9Ik0xOCw2QTEyLDEyLDAsMSwwLDMwLDE4LDEyLDEyLDAsMCwwLDE4LDZabTAsMjJBMTAsMTAs''@;'; put 'put ''MCwxLDEsMjgsMTgsMTAsMTAsMCwwLDEsMTgsMjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDZBMTIsMTIsMCwxLDAsMzAsMTgsMTIsMTIsMCwwLDAsMTgsNlptLTIsNS4xNWEyLDIsMCwxLDEsMiwyQTIs''@;'; put 'put ''MiwwLDAsMSwxNS45LDExLjE1Wk0yMywyNGExLDEsMCwwLDEtMSwxSDE1YTEsMSwwLDEsMSwwLTJoMlYxN0gxNmExLDEsMCwwLDEsMC0yaDR2OGgyQTEsMSwwLDAsMSwyMywyNFoiLz4nKSxfLkNsclNoYXBlSW5mb1N0YW5kYXJkPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGN4PSIxNy45NyIgY3k9IjEwLjQ1IiByPSIxLjQiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTIxLDI1SDE5VjE0LjFIMTZhMSwxLDAsMCwwLDAs''@;'; put 'put ''MmgxVjI1SDE1YTEsMSwwLDAsMCwwLDJoNmExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQs''@;'; put 'put ''MTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4LDIuMVptLS4xLDUuMjhhMiwyLDAsMSwx''@;'; put 'put ''LTIsMkEyLDIsMCwwLDEsMTcuOSw3LjM4Wm0zLjYsMjEuMjVoLTdhMS40LDEuNCwwLDEsMSwwLTIuOGgyLjF2LTkuMkgxNWExLjQsMS40LDAsMSwxLDAtMi44aDQuNHYxMmgyLjFhMS40LDEuNCwwLDEsMSwwLDIuOFoiLz4nKSxfLkNsclNoYXBlU3VjY2Vzc1N0YW5kYXJkPSgwLGcuY2xySWNv''@;'; put 'put ''blNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIvPlxuICAgICAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjgsMTIuMWExLDEsMCwwLDAtMS40MSwwTDE1LjQ5LDIzLjE1bC02LTZBMSwxLDAsMCwwLDgsMTguNTNMMTUuNDksMjYsMjgsMTMuNTJBMSwxLDAsMCwwLDI4LDEyLjFaIi8+XG4gICAgICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNMjguNDUsMTIuNjMsMTUuMzEsMjUuNzYsNy41NSwxOGExLjQsMS40LDAsMCwxLDItMmw1Ljc4LDUuNzhMMjYuNDcsMTAuNjVh''@;'; put 'put ''MS40LDEuNCwwLDEsMSwyLDJaIi8+JyksXy5DbHJTaGFwZUVycm9yU3RhbmRhcmQ9KDAsZy5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgY3g9IjE4IiBjeT0iMjYuMDYiIHI9IjEuMzMiLz5cbiAgICAgICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDIyLjYxYTEsMSwwLDAsMS0xLTF2LTEyYTEsMSwwLDEsMSwyLDB2MTJBMSwxLDAsMCwxLDE4LDIyLjYxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0xIiBkPSJNMTgsMi4xYTE2LDE2LDAsMSwwLDE2LDE2QTE2LDE2LDAsMCwwLDE4LDIuMVpNMTYuNiw4LjhhMS40LDEuNCwwLDAsMSwyLjgsMHYxMmExLjQsMS40LDAsMCwxLTIuOCwwWk0xOCwyOC42YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDE4LDI4LjZaIi8+''@;'; put 'put ''JyksXy5DbHJTaGFwZVdhcm5pbmdTdGFuZGFyZD0oMCxnLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMTgiIGN5PSIyNi4wNiIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; 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 ''djEyYTEuNCwxLjQsMCwwLDEtMi44LDBaTTE4LDI5Ljg1YTEuOCwxLjgsMCwxLDEsMS44LTEuOEExLjgsMS44LDAsMCwxLDE4LDI5Ljg1WiIvPicpLF8uQ2xyU2hhcGVIZWxwSW5mbz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMzksMjUuNDVhMSwxLDAsMCwwLTEuMzguMjljLTEu''@;'; 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+JyksXy5DbHJTaGFwZUJhcnM9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwyOUg0YTEsMSwwLDAsMSwwLTJIMzJhMSwxLDAsMCwx''@;'; put 'put ''LDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMyLDE5SDRhMSwxLDAsMCwxLDAtMkgzMmExLDEsMCwwLDEsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMzIsOUg0QTEsMSwwLDAsMSw0LDdIMzJhMSwxLDAsMCwxLDAsMloiLz4nKSxfLkNsclNoYXBlVXNlcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTdhNyw3LDAsMSwwLTctN0E3LDcsMCwwLDAsMTgsMTdaTTE4LDVhNSw1LDAsMSwx''@;'; 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+JyksXy5DbHJTaGFwZUFuZ2xlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjkuNTIsMjIu''@;'; put 'put ''NTIsMTgsMTAuNiw2LjQ4LDIyLjUyYTEuNywxLjcsMCwwLDAsMi40NSwyLjM2TDE4LDE1LjQ5bDkuMDgsOS4zOWExLjcsMS43LDAsMCwwLDIuNDUtMi4zNloiLz4nKSxfLkNsclNoYXBlRm9sZGVyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; 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 ''PicpLF8uQ2xyU2hhcGVGb2xkZXJPcGVuPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzUuMzIsMTMuNzRBMS43MSwxLjcxLDAsMCwwLDMzLjg3LDEzSDExLjE3YTIuNTksMi41OSwwLDAsMC0yLjI1LDEuNTIs''@;'; 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+JyksXy5DbHJTaGFwZUJlbGw9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi41MSwyNy44''@;'; 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 ''NywyLjkzbC0uMzQuM3YyLjgySDMyLjg1WiIvPlxuICAgICAgICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxfLkNsclNoYXBlSW1hZ2U9KDAs''@;'; 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+JyksXy5DbHJTaGFwZUNsb3VkPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuMTQsMzNIMTAuNjJDNS42NywzMywxLDI4LjE5LDEsMjMuMWExMCwxMCwwLDAsMSw4LTkuNzUsMTAu''@;'; 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 ''LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxfLkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAg''@;'; put 'put ''ICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSI0LjkiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMyIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMxLjEiIGN5PSIxOCIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjQuOSIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTMtLWJhZGdlZCIg''@;'; put 'put ''Lz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxfLkNsclNoYXBlRWxsaXBzaXNWZXJ0aWNhbD0oMCxnLmNsckljb25TVkcp''@;'; put 'put ''KCc8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTIiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjMxLjEiIHI9IjIuOSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjQuOSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0xLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiIGNsYXNzPSJjbHItaS1vdXRsaW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgICAgIDxj''@;'; put 'put ''aXJjbGUgY3g9IjE4IiBjeT0iMzEuMSIgcj0iMi45IiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2VkIGNsci1pLW91dGxpbmUtcGF0aC0zLS1iYWRnZWQiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiIC8+JyksXy5DbHJTaGFwZUZpbHRlckdyaWQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwyNS44NmwyLDFWMjAuMjdhMSwxLDAs''@;'; put 'put ''MCwwLS4yOS0uN0wxMC4yMywxM0gyNS43OWwtNi40Nyw2LjU3YTEsMSwwLDAsMC0uMjkuN0wxOSwyOGwyLDFWMjAuNjhMMjcuNTgsMTRBMS40NiwxLjQ2LDAsMCwwLDI4LDEzVjEyYTEsMSwwLDAsMC0xLTFIOWExLDEsMCwwLDAtMSwxdjFhMS40NiwxLjQ2LDAsMCwwLC40MiwxTDE1LDIwLjY4''@;'; put 'put ''WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik04LDExdjEuMTJhLjUuNSwwLDAsMCwuMTUuMzVsNy4yOCw3LjM2YS41LjUsMCwwLDEsLjE1LjM1djYuODlhLjUuNSwwLDAsMCwuMjguNDVsMy45NSwxLjQxYS41LjUs''@;'; put 'put ''MCwwLDAsLjcyLS40NWwwLTguMzlhLjU0LjU0LDAsMCwxLC4xOC0uMzVsNy4xMi03LjI1YS41LjUsMCwwLDAsLjE1LS4zNVYxMVoiLz4nKSxfLkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtMSIgZD0iTTE1LDI1Ljg2bDIsMVYyMC4yN2ExLDEsMCwwLDAtLjI5LS43TDEwLjIzLDEzSDI1Ljc5bC02LjQ3LDYuNTdhMSwxLDAsMCwwLS4yOS43TDE5LDI4bDIsMVYyMC42OEwyNy41OCwxNEExLjQ2LDEuNDYsMCwwLDAsMjgsMTNWMTJhMSwxLDAsMCwwLTEtMUg5YTEsMSwwLDAs''@;'; put 'put ''MC0xLDF2MWExLjQ2LDEuNDYsMCwwLDAsLjQyLDFMMTUsMjAuNjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQs''@;'; put 'put ''MCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwx''@;'; put 'put ''NCwxNCwwLDAsMSwxOCwzMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNOCwxMXYxLjEyYS41LjUsMCwwLDAsLjE1LjM1bDcuMjgsNy4zNmEuNS41LDAsMCwxLC4xNS4zNXY2Ljg5YS41LjUsMCwwLDAsLjI4LjQ1''@;'; put 'put ''bDMuOTUsMS40MWEuNS41LDAsMCwwLC43Mi0uNDVsMC04LjM5YS41NC41NCwwLDAsMSwuMTgtLjM1bDcuMTItNy4yNWEuNS41LDAsMCwwLC4xNS0uMzVWMTFaIi8+JyksXy5DbHJTaGFwZVZtQnVnPSgwLGcuY2xySWNvblNWRykoJzxyZWN0IHdpZHRoPSIzNiIgaGVpZ2h0PSIzNiIgcng9IjMi''@;'; put 'put ''IGZpbGw9IiNmZmZmZmYiIG9wYWNpdHk9IjAuMTUiIHN0eWxlPSJpc29sYXRpb246aXNvbGF0ZSIvPjxwYXRoIGQ9Ik0zLjc5LDE0LjgzYTEuMDksMS4wOSwwLDAsMC0xLjQ3LS41NiwxLjA5LDEuMDksMCwwLDAtLjU0LDEuNDlsMi40Nyw1LjRjLjM5Ljg1LjgsMS4yOSwxLjU3LDEuMjlTNywy''@;'; put 'put ''Miw3LjM5LDIxLjE2bDIuMTctNC43N2EuMzMuMzMsMCwwLDEsLjMxLS4yLjM1LjM1LDAsMCwxLC4zNS4zNXY0LjYxYTEuMTUsMS4xNSwwLDAsMCwxLjE0LDEuMywxLjE3LDEuMTcsMCwwLDAsMS4xNy0xLjNWMTcuMzhhMS4xNSwxLjE1LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwx''@;'; put 'put ''LjE4LDEuMnYzLjc3YTEuMTcsMS4xNywwLDEsMCwyLjMyLDBWMTcuMzhhMS4xNSwxLjE1LDAsMCwxLDEuMjItMS4yLDEuMTMsMS4xMywwLDAsMSwxLjE4LDEuMnYzLjc3YTEuMTYsMS4xNiwwLDEsMCwyLjMxLDBWMTYuODZhMi42OSwyLjY5LDAsMCwwLTIuNzgtMi42OSwzLjU3LDMuNTcsMCww''@;'; put 'put ''LDAtMi40NywxLjA1LDIuNzUsMi43NSwwLDAsMC0yLjM4LTEuMDVBMy45MywzLjkzLDAsMCwwLDEyLDE1LjIyYTIuODIsMi44MiwwLDAsMC0yLjA4LTEuMDVBMi41NSwyLjU1LDAsMCwwLDcuNCwxNS44OUw1LjgyLDE5LjYzbC0yLTQuOCIgZmlsbD0iI2ZmZmZmZiIvPjxwYXRoIGQ9Ik0zMywx''@;'; put 'put ''NC4xOEExLjE0LDEuMTQsMCwwLDAsMzEuOSwxNWwtMS4xOSwzLjczTDI5LjUsMTUuMDVhMS4xOCwxLjE4LDAsMCwwLTEuMTUtLjg3aC0uMWExLjIsMS4yLDAsMCwwLTEuMTUuODdsLTEuMTksMy43MS0xLjE4LTMuNzFhMS4xNSwxLjE1LDAsMCwwLTEuMTEtLjg3LDEuMDgsMS4wOCwwLDAsMC0x''@;'; put 'put ''LjEyLDEuMDcsMS42OCwxLjY4LDAsMCwwLC4xLjU0bDIsNS43YTEuMjcsMS4yNywwLDAsMCwxLjI3LDEsMS4yNCwxLjI0LDAsMCwwLDEuMi0uOTNsMS4yLTMuNjQsMS4yLDMuNjRhMS4yNSwxLjI1LDAsMCwwLDEuMjYuOTNBMS4yNywxLjI3LDAsMCwwLDMyLDIxLjVMMzQsMTUuNzNhMS43Nywx''@;'; put 'put ''Ljc3LDAsMCwwLC4wOC0uNDhBMS4wNywxLjA3LDAsMCwwLDMzLDE0LjE4WiIgZmlsbD0iI2ZmZmZmZiIvPicpLF8uQ2xyU2hhcGVTZWFyY2g9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4zMyw1LjA1QTEw''@;'; put 'put ''Ljk1LDEwLjk1LDAsMSwxLDUuMzksMTYsMTEsMTEsMCwwLDEsMTYuMzMsNS4wNW0wLTIuMDVhMTMsMTMsMCwxLDAsMTMsMTMsMTMsMTMsMCwwLDAtMTMtMTNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0z''@;'; put 'put ''NSwzMy4yOWwtNy4zNy03LjQyLTEuNDIsMS40MSw3LjM3LDcuNDJBMSwxLDAsMSwwLDM1LDMzLjI5WiIvPicpLF8uQ2xyU2hhcGVWaWV3Q29sdW1ucz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDVINUEy''@;'; put 'put ''LDIsMCwwLDAsMyw3VjI5YTIsMiwwLDAsMCwyLDJIMzFhMiwyLDAsMCwwLDItMlY3QTIsMiwwLDAsMCwzMSw1Wk0xMywyOUg1VjdoOFptMTAsMEgxNVY3aDhaIi8+JyksXy5DbHJTaGFwZUFuZ2xlRG91YmxlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjksMTkuNDFhMSwxLDAsMCwxLS43MS0uMjlMMTgsOC44Myw3LjcxLDE5LjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsNiwyOS43MSwxNy43MUExLDEsMCwwLDEsMjksMTkuNDFaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0yOSwzMC40MWExLDEsMCwwLDEtLjcxLS4yOUwxOCwxOS44Myw3LjcxLDMwLjEyYTEsMSwwLDAsMS0xLjQxLTEuNDFMMTgsMTcsMjkuNzEsMjguNzFBMSwxLDAsMCwxLDI5LDMwLjQxWiIvPicpLF8uQ2xyU2hhcGVDYWxlbmRhcj0o''@;'; 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 ''LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiLz4nKSxfLkNsclNoYXBlRXZlbnQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4xNywyNS44NiwxMC44MSwyMC41YTEsMSwwLDAsMSwxLjQxLTEuNDFMMTYuMTcs''@;'; 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 ''ICAgPGNpcmNsZSBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLF8uQ2xyU2hhcGVFeWU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjYyLDE3LjUzYy0zLjM3LTYu''@;'; put 'put ''MjMtOS4yOC0xMC0xNS44Mi0xMFM1LjM0LDExLjMsMiwxNy41M0wxLjcyLDE4bC4yNi40OGMzLjM3LDYuMjMsOS4yOCwxMCwxNS44MiwxMHMxMi40Ni0zLjcyLDE1LjgyLTEwbC4yNi0uNDhaTTE3LjgsMjYuNDNDMTIuMTcsMjYuNDMsNywyMy4yOSw0LDE4YzMtNS4yOSw4LjE3LTguNDMsMTMu''@;'; put 'put ''OC04LjQzUzI4LjU0LDEyLjcyLDMxLjU5LDE4QzI4LjU0LDIzLjI5LDIzLjQyLDI2LjQzLDE3LjgsMjYuNDNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LjA5LDExLjE3QTYuODYsNi44NiwwLDEsMCwyNSwx''@;'; put 'put ''OCw2Ljg2LDYuODYsMCwwLDAsMTguMDksMTEuMTdabTAsMTEuNzJBNC44Niw0Ljg2LDAsMSwxLDIzLDE4LDQuODcsNC44NywwLDAsMSwxOC4wOSwyMi44OVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNjIs''@;'; put 'put ''MTcuNTNjLTMuMzctNi4yMy05LjI4LTEwLTE1LjgyLTEwUzUuMzQsMTEuMywyLDE3LjUzTDEuNzIsMThsLjI2LjQ4YzMuMzcsNi4yMyw5LjI4LDEwLDE1LjgyLDEwczEyLjQ2LTMuNzIsMTUuODItMTBsLjI2LS40OFpNMTcuOCwyNi40M0MxMi4xNywyNi40Myw3LDIzLjI5LDQsMThjMy01LjI5''@;'; put 'put ''LDguMTctOC40MywxMy44LTguNDNTMjguNTQsMTIuNzIsMzEuNTksMThDMjguNTQsMjMuMjksMjMuNDIsMjYuNDMsMTcuOCwyNi40M1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjE4LjA5IiBjeT0iMTguMDMiIHI9''@;'; put 'put ''IjYuODYiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxfLkNsclNoYXBlRXllSGlkZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUuMTksMjAuNEE2Ljc4LDYuNzgsMCwwLDAsMjUuNjIsMThhNi44Niw2Ljg2LDAsMCwwLTYuODYtNi44Niw2Ljc5LDYu''@;'; 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 ''MCwwLDEtNS44NiwxLjJjLTUuNjMsMC0xMC43NS0zLjE0LTEzLjgtOC40M2ExNy4yOSwxNy4yOSwwLDAsMSw2LjEyLTYuM1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiLz4nKSxfLkNsclNoYXBlU3RlcEZvcndhcmQyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9''@;'; put 'put ''Ik03LjA4LDYuNTJhMS42OCwxLjY4LDAsMCwwLDAsMi40TDE2LjUxLDE4LDcuMTIsMjcuMDhhMS43LDEuNywwLDAsMCwyLjM2LDIuNDRoMEwyMS40LDE4LDkuNDgsNi40N0ExLjY5LDEuNjksMCwwLDAsNy4wOCw2LjUyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEiIC8+PHBhdGggZD0iTTI2LjQ5LDVhMS43LDEuNywwLDAsMC0xLjcsMS43VjI5LjNhMS43LDEuNywwLDAsMCwzLjQsMFY2LjdBMS43LDEuNywwLDAsMCwyNi40OSw1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksXy5DbHJTaGFwZUFycm93PSgw''@;'; put 'put ''LGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy42NiwxNS42MSwxOCw2LDguMzQsMTUuNjFBMSwxLDAsMSwwLDkuNzUsMTdMMTcsOS44MVYyOC45NGExLDEsMCwxLDAsMiwwVjkuODFMMjYuMjUsMTdhMSwxLDAsMCwwLDEuNDEtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIi8+JyksXy5Db3JlU2hhcGVzPXsidW5rbm93bi1zdGF0dXMiOl8uQ2xyU2hhcGVVbmtub3duU3RhdHVzLGhvbWU6Xy5DbHJTaGFwZUhvbWUsY29nOl8uQ2xyU2hhcGVDb2csY2hlY2s6Xy5DbHJTaGFwZUNoZWNrLHRpbWVzOl8uQ2xyU2hhcGVUaW1lcywiZXhjbGFtYXRp''@;'; put 'put ''b24tdHJpYW5nbGUiOl8uQ2xyU2hhcGVFeGNsYW1hdGlvblRyaWFuZ2xlLCJleGNsYW1hdGlvbi1jaXJjbGUiOl8uQ2xyU2hhcGVFeGNsYW1hdGlvbkNpcmNsZSwiY2hlY2stY2lyY2xlIjpfLkNsclNoYXBlQ2hlY2tDaXJjbGUsImluZm8tY2lyY2xlIjpfLkNsclNoYXBlSW5mb0NpcmNsZSwi''@;'; put 'put ''aW5mby1zdGFuZGFyZCI6Xy5DbHJTaGFwZUluZm9TdGFuZGFyZCwic3VjY2Vzcy1zdGFuZGFyZCI6Xy5DbHJTaGFwZVN1Y2Nlc3NTdGFuZGFyZCwiZXJyb3Itc3RhbmRhcmQiOl8uQ2xyU2hhcGVFcnJvclN0YW5kYXJkLCJ3YXJuaW5nLXN0YW5kYXJkIjpfLkNsclNoYXBlV2FybmluZ1N0YW5k''@;'; put 'put ''YXJkLCJoZWxwLWluZm8iOl8uQ2xyU2hhcGVIZWxwSW5mbyxiYXJzOl8uQ2xyU2hhcGVCYXJzLHVzZXI6Xy5DbHJTaGFwZVVzZXIsYW5nbGU6Xy5DbHJTaGFwZUFuZ2xlLGZvbGRlcjpfLkNsclNoYXBlRm9sZGVyLCJmb2xkZXItb3BlbiI6Xy5DbHJTaGFwZUZvbGRlck9wZW4sYmVsbDpfLkNs''@;'; put 'put ''clNoYXBlQmVsbCxpbWFnZTpfLkNsclNoYXBlSW1hZ2UsY2xvdWQ6Xy5DbHJTaGFwZUNsb3VkLCJlbGxpcHNpcy1ob3Jpem9udGFsIjpfLkNsclNoYXBlRWxsaXBzaXNIb3Jpem9udGFsLCJlbGxpcHNpcy12ZXJ0aWNhbCI6Xy5DbHJTaGFwZUVsbGlwc2lzVmVydGljYWwsImZpbHRlci1ncmlk''@;'; put 'put ''IjpfLkNsclNoYXBlRmlsdGVyR3JpZCwiZmlsdGVyLWdyaWQtY2lyY2xlIjpfLkNsclNoYXBlRmlsdGVyR3JpZENpcmNsZSwidm0tYnVnIjpfLkNsclNoYXBlVm1CdWcsc2VhcmNoOl8uQ2xyU2hhcGVTZWFyY2gsInZpZXctY29sdW1ucyI6Xy5DbHJTaGFwZVZpZXdDb2x1bW5zLCJhbmdsZS1k''@;'; put 'put ''b3VibGUiOl8uQ2xyU2hhcGVBbmdsZURvdWJsZSxjYWxlbmRhcjpfLkNsclNoYXBlQ2FsZW5kYXIsZXZlbnQ6Xy5DbHJTaGFwZUV2ZW50LGV5ZTpfLkNsclNoYXBlRXllLCJleWUtaGlkZSI6Xy5DbHJTaGFwZUV5ZUhpZGUsInN0ZXAtZm9yd2FyZC0yIjpfLkNsclNoYXBlU3RlcEZvcndhcmQy''@;'; put 'put ''LGFycm93Ol8uQ2xyU2hhcGVBcnJvd30sT2JqZWN0LmRlZmluZVByb3BlcnR5KF8uQ29yZVNoYXBlcywiaG91c2UiLCgwLHkuZGVzY3JpcHRvckNvbmZpZykoXy5Db3JlU2hhcGVzLmhvbWUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5Db3JlU2hhcGVzLCJzZXR0aW5ncyIsKDAseS5kZXNj''@;'; put 'put ''cmlwdG9yQ29uZmlnKShfLkNvcmVTaGFwZXMuY29nKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KF8uQ29yZVNoYXBlcywic3VjY2VzcyIsKDAseS5kZXNjcmlwdG9yQ29uZmlnKShfLkNvcmVTaGFwZXMuY2hlY2spKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5Db3JlU2hhcGVzLCJjbG9zZSIs''@;'; put 'put ''KDAseS5kZXNjcmlwdG9yQ29uZmlnKShfLkNvcmVTaGFwZXMudGltZXMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5Db3JlU2hhcGVzLCJ3YXJuaW5nIiwoMCx5LmRlc2NyaXB0b3JDb25maWcpKF8uQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tdHJpYW5nbGUiXSkpLE9iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShfLkNvcmVTaGFwZXMsImVycm9yIiwoMCx5LmRlc2NyaXB0b3JDb25maWcpKF8uQ29yZVNoYXBlc1siZXhjbGFtYXRpb24tY2lyY2xlIl0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5Db3JlU2hhcGVzLCJpbmZvIiwoMCx5LmRlc2NyaXB0b3JDb25maWcpKF8uQ29yZVNoYXBl''@;'; put 'put ''c1siaW5mby1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLkNvcmVTaGFwZXMsIm1lbnUiLCgwLHkuZGVzY3JpcHRvckNvbmZpZykoXy5Db3JlU2hhcGVzLmJhcnMpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5Db3JlU2hhcGVzLCJhdmF0YXIiLCgwLHkuZGVzY3JpcHRvckNv''@;'; put 'put ''bmZpZykoXy5Db3JlU2hhcGVzLnVzZXIpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5Db3JlU2hhcGVzLCJjYXJldCIsKDAseS5kZXNjcmlwdG9yQ29uZmlnKShfLkNvcmVTaGFwZXMuYW5nbGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5Db3JlU2hhcGVzLCJkaXJlY3RvcnkiLCgwLHku''@;'; put 'put ''ZGVzY3JpcHRvckNvbmZpZykoXy5Db3JlU2hhcGVzLmZvbGRlcikpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLkNvcmVTaGFwZXMsIm5vdGlmaWNhdGlvbiIsKDAseS5kZXNjcmlwdG9yQ29uZmlnKShfLkNvcmVTaGFwZXMuYmVsbCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLkNvcmVTaGFw''@;'; put 'put ''ZXMsImNvbGxhcHNlIiwoMCx5LmRlc2NyaXB0b3JDb25maWcpKF8uQ29yZVNoYXBlc1siYW5nbGUtZG91YmxlIl0pKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9lc3NlbnRpYWwtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9lc3NlbnRpYWwtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKHEsXyxJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KF8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8uQ2xyU2hhcGVMb2dvdXQ9Xy5DbHJTaGFwZUxvZ2luPV8uQ2xyU2hhcGVIZWxwPV8uQ2xy''@;'; put 'put ''U2hhcGVDb3B5PV8uQ2xyU2hhcGVDaGlsZEFycm93PV8uQ2xyU2hhcGVDaXJjbGVBcnJvdz1fLkNsclNoYXBlQWxhcm1DbG9jaz1fLkNsclNoYXBlQ2xvY2s9Xy5DbHJTaGFwZUhpc3Rvcnk9Xy5DbHJTaGFwZVRhZ3M9Xy5DbHJTaGFwZVRhZz1fLkNsclNoYXBlVHJhc2g9Xy5DbHJTaGFwZVRp''@;'; put 'put ''bWVzQ2lyY2xlPV8uQ2xyU2hhcGVCYW49Xy5DbHJTaGFwZVBsdXNDaXJjbGU9Xy5DbHJTaGFwZU1pbnVzQ2lyY2xlPV8uQ2xyU2hhcGVNaW51cz1fLkNsclNoYXBlUGx1cz1fLkNsclNoYXBlRmlsZT1fLkNsclNoYXBlUGluPV8uQ2xyU2hhcGVGaWx0ZXI9Xy5DbHJTaGFwZVBvcE91dD1fLkNs''@;'; put 'put ''clNoYXBlVXNlcnM9Xy5DbHJTaGFwZVVubG9jaz1fLkNsclNoYXBlTG9jaz1fLkNsclNoYXBlVXBsb2FkPV8uQ2xyU2hhcGVEb3dubG9hZD1fLkNsclNoYXBlTGlnaHRidWxiPV8uQ2xyU2hhcGVWaWV3Q2FyZHM9Xy5DbHJTaGFwZVZpZXdMaXN0PV8uQ2xyU2hhcGVTeW5jPV8uQ2xyU2hhcGVS''@;'; put 'put ''ZWZyZXNoPV8uQ2xyU2hhcGVOb3RlPV8uQ2xyU2hhcGVQZW5jaWw9Xy5DbHJTaGFwZVRoZXJtb21ldGVyPV8uQ2xyU2hhcGVCdWc9Xy5DbHJTaGFwZVNjaXNzb3JzPV8uQ2xyU2hhcGVBc3Rlcmlzaz1fLkNsclNoYXBlQm9vaz1fLkNsclNoYXBlT2JqZWN0cz1fLkNsclNoYXBlUmVzaXplPV8u''@;'; put 'put ''Q2xyU2hhcGVDdXJzb3JIYW5kQ2xpY2s9Xy5DbHJTaGFwZUN1cnNvckhhbmQ9Xy5DbHJTaGFwZUN1cnNvckFycm93PV8uQ2xyU2hhcGVHcmlkVmlldz1fLkNsclNoYXBlQnViYmxlRXhjbGFtYXRpb249Xy5DbHJTaGFwZU5ldz1fLkNsclNoYXBlQWxhcm1PZmY9Xy5DbHJTaGFwZVBpbmJvYXJk''@;'; put 'put ''PV8uQ2xyU2hhcGVBZGRUZXh0PXZvaWQgMCxfLkNsclNoYXBlQ2xvbmU9Xy5DbHJTaGFwZUN1cnNvck1vdmU9Xy5DbHJTaGFwZVdhbmQ9Xy5DbHJTaGFwZVN1bj1fLkNsclNoYXBlTW9vbj1fLkNsclNoYXBlRmlsdGVyMj1fLkNsclNoYXBlRHJhZ0hhbmRsZT1fLkNsclNoYXBlQ29weVRvQ2xp''@;'; put 'put ''cGJvYXJkPV8uQ2xyU2hhcGVDb2xvclBpY2tlcj1fLkNsclNoYXBlQnJpZWZjYXNlPV8uQ2xyU2hhcGVFeHBhbmRDYXJkPV8uQ2xyU2hhcGVDb2xsYXBzZUNhcmQ9Xy5DbHJTaGFwZVNvcnRCeT1fLkNsclNoYXBlQWNjZXNzaWJpbGl0eTI9Xy5DbHJTaGFwZUFjY2Vzc2liaWxpdHkxPV8uQ2xy''@;'; put 'put ''U2hhcGVTaHJpbms9Xy5DbHJTaGFwZVBhcGVyY2xpcD1fLkNsclNoYXBlRmlsZUdyb3VwPV8uQ2xyU2hhcGVSZXBlYXQ9Xy5DbHJTaGFwZUlkQmFkZ2U9Xy5DbHJTaGFwZUJhbGFuY2U9Xy5DbHJTaGFwZU9yZ2FuaXphdGlvbj1fLkNsclNoYXBlTm9BY2Nlc3M9Xy5DbHJTaGFwZUhvdXJnbGFz''@;'; put 'put ''cz1fLkNsclNoYXBlRmxhbWU9Xy5DbHJTaGFwZVRhcmdldD1fLkNsclNoYXBlQnVsbHNleWU9Xy5DbHJTaGFwZVdyZW5jaD1fLkNsclNoYXBlQm9sdD1fLkNsclNoYXBlTGlicmFyeT1fLkNsclNoYXBlS2V5PV8uQ2xyU2hhcGVab29tT3V0PV8uQ2xyU2hhcGVab29tSW49Xy5DbHJTaGFwZVdp''@;'; put 'put ''bmRvd1Jlc3RvcmU9Xy5DbHJTaGFwZVdpbmRvd01pbj1fLkNsclNoYXBlV2luZG93TWF4PV8uQ2xyU2hhcGVXaW5kb3dDbG9zZT1fLkNsclNoYXBlVG9vbHM9Xy5DbHJTaGFwZVN3aXRjaD1fLkNsclNoYXBlVHdvV2F5QXJyb3dzPV8uQ2xyU2hhcGVGaWxlU2V0dGluZ3M9Xy5DbHJTaGFwZVNj''@;'; put 'put ''cm9sbD1fLkNsclNoYXBlVW5kbz1fLkNsclNoYXBlUmVkbz1fLkNsclNoYXBlTGlzdD1fLkNsclNoYXBlRmlyZXdhbGw9Xy5DbHJTaGFwZUNsaXBib2FyZD1fLkNsclNoYXBlU2xpZGVyPV8uQ2xyU2hhcGVXb3JsZD1fLkNsclNoYXBlUHJpbnRlcj12b2lkIDAsXy5Fc3NlbnRpYWxTaGFwZXM9''@;'; put 'put ''Xy5DbHJTaGFwZUNvbG9yUGFsZXR0ZT1fLkNsclNoYXBlRmlyc3RBaWQ9Xy5DbHJTaGFwZUJldGE9Xy5DbHJTaGFwZURvdENpcmNsZT1fLkNsclNoYXBlQ2lyY2xlPV8uQ2xyU2hhcGVDcm9zc2hhaXJzPV8uQ2xyU2hhcGVWb2x1bWU9Xy5DbHJTaGFwZVRhYmxlPV8uQ2xyU2hhcGVTbm93Zmxh''@;'; put 'put ''a2U9Xy5DbHJTaGFwZUZ1ZWw9Xy5DbHJTaGFwZUZvcm09Xy5DbHJTaGFwZUZpc2g9Xy5DbHJTaGFwZVRyZWU9Xy5DbHJTaGFwZVJlY3ljbGU9Xy5DbHJTaGFwZUZpbHRlck9mZj1fLkNsclNoYXBlRmlsZVppcD1fLkNsclNoYXBlQ3Vyc29ySGFuZE9wZW49Xy5DbHJTaGFwZUN1cnNvckhhbmRH''@;'; put 'put ''cmFiPV8uQ2xyU2hhcGVUcmVlVmlldz1fLkNsclNoYXBlUG9ydHJhaXQ9Xy5DbHJTaGFwZVBhc3RlPV8uQ2xyU2hhcGVMYW5kc2NhcGU9Xy5DbHJTaGFwZUVyYXNlcj1fLkNsclNoYXBlRHJhZ0hhbmRsZUNvcm5lcj1fLkNsclNoYXBlRGV0YWlscz12b2lkIDA7dmFyIHk9SSgKLyohIC4uL3V0''@;'; put 'put ''aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLGc9SSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIp''@;'; put 'put ''LEI9SSgKLyohIC4vY29yZS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyIpO18uQ2xyU2hhcGVBZGRUZXh0PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEs''@;'; put 'put ''MjFIMTNhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xMiwxNmExLDEsMCwwLDAsMSwxSDMxYTEsMSwwLDAsMCwwLTJIMTNBMSwxLDAsMCwwLDEyLDE2WiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yNywyN0gxM2ExLDEsMCwwLDAsMCwySDI3YTEsMSwwLDAsMCwwLTJaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtNCIgZD0iTTE1Ljg5LDlhMSwxLDAsMCwwLTEtMUgxMFYzLjIxYTEsMSwwLDAsMC0yLDBWOEgyLjg5YTEsMSwwLDAsMCwwLDJIOHY1LjIxYTEsMSwwLDAsMCwyLDBWMTBoNC44OUExLDEsMCwwLDAsMTUuODksOVoiLz4nKSxfLkNsclNoYXBlUGluYm9hcmQ9KDAsZy5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMCwzMCw2LDMwLDYsNkgyMlY0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWMTRIMzBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMzLjU3LDkuMzNsLTctN2ExLDEsMCwwLDAtMS40MSwxLjQxbDcsN2ExLDEsMCwxLDAsMS40MS0xLjQxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9''@;'; put 'put ''Ik0yMi4xLDExLjE5bC43LjVMMjYuNDYsOCwyNSw2LjU2LDIyLjUxLDkuMTNjLTItLjg3LTQuMzUuMTQtNS45MiwxLjY4bC0uNzIuNzEsMy41NCwzLjU0LTMuNjcsMy42NywxLjQxLDEuNDEsMy42Ny0zLjY3TDI0LjM3LDIwbC43MS0uNzJjMS41NC0xLjU3LDIuNTUtMy45MiwxLjY4LTUuOTNs''@;'; put 'put ''Mi41NC0yLjU3TDI3Ljg4LDkuMzgsMjQuMjEsMTMuMWwuNDkuNjljLjc2LDEsLjI1LDIuMzctLjQxLDMuMzNMMTguNzcsMTEuNkMxOS44NCwxMC44NiwyMS4xNSwxMC41LDIyLjEsMTEuMTlaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0xIiBkPSJNMzAsMzAsNiwzMCw2LDZIMjJWNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE0SDMwWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTMzLjU3LDkuMzNsLTct''@;'; put 'put ''N2ExLDEsMCwwLDAtMS40MSwxLjQxbDEuMzgsMS4zOC00LDRjLTItLjg3LTQuMzUuMTQtNS45MiwxLjY4bC0uNzIuNzEsMy41NCwzLjU0LTMuNjcsMy42NywxLjQxLDEuNDEsMy42Ny0zLjY3TDI0LjM3LDIwbC43MS0uNzJjMS41NC0xLjU3LDIuNTUtMy45MSwxLjY4LTUuOTJsNC00LDEuMzgs''@;'; put 'put ''MS4zOGExLDEsMCwxLDAsMS40MS0xLjQxWiIvPicpLF8uQ2xyU2hhcGVBbGFybU9mZj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLjQ3LDMuODRhNS43OCw1Ljc4LDAsMCwwLTcuMzctLjYzLDE2LjA4LDE2''@;'; 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 ''bDIuNjYtMi42NmExMy44OSwxMy44OSwwLDAsMCwxNi44MywwbDQuMTYsNC4xN0wzMiwzMS45LDMsMi44WiIvPicpLF8uQ2xyU2hhcGVOZXc9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zNC41OSwyM2wtNC4w''@;'; put 'put ''OC01LDQtNC45YTEuODIsMS44MiwwLDAsMCwuMjMtMS45NEExLjkzLDEuOTMsMCwwLDAsMzIuOTQsMTBoLTMxQTEuOTEsMS45MSwwLDAsMCwwLDExLjg4VjI0LjEzQTEuOTEsMS45MSwwLDAsMCwxLjk0LDI2SDMzLjA1YTEuOTMsMS45MywwLDAsMCwxLjc3LTEuMDlBMS44MiwxLjgyLDAsMCww''@;'; put 'put ''LDM0LjU5LDIzWk0yLDI0VjEySDMyLjc4bC00Ljg0LDUuOTNMMzIuODUsMjRaIi8+XG4gICAgICAgICAgICA8cG9seWdvbiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIHBvaW50cz0iOS4zOSAxOS4zNSA2LjEzIDE1IDUgMTUgNSAyMS4xOCA2LjEzIDIxLjE4''@;'; put 'put ''IDYuMTMgMTYuODQgOS4zOSAyMS4xOCAxMC41MSAyMS4xOCAxMC41MSAxNSA5LjM5IDE1IDkuMzkgMTkuMzUiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgcG9pbnRzPSIxMi4xOCAyMS4xOCAxNi44NCAyMS4xOCAx''@;'; put 'put ''Ni44NCAyMC4xNiAxMy4zMSAyMC4xNiAxMy4zMSAxOC41NSAxNi41IDE4LjU1IDE2LjUgMTcuNTIgMTMuMzEgMTcuNTIgMTMuMzEgMTYuMDMgMTYuODQgMTYuMDMgMTYuODQgMTUgMTIuMTggMTUgMTIuMTggMjEuMTgiLz5cbiAgICAgICAgICAgIDxwb2x5Z29uICBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgcG9pbnRzPSIyNC41MiAxOS40MyAyMy4wNiAxNSAyMS44NCAxNSAyMC4zNyAxOS40MyAxOS4wNSAxNSAxNy44MiAxNSAxOS43OCAyMS4xOCAyMC44OSAyMS4xOCAyMi40NSAxNi41OSAyNCAyMS4xOCAyNS4xMyAyMS4xOCAyNy4wOCAxNSAyNS44''@;'; put 'put ''NSAxNSAyNC41MiAxOS40MyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LjExLDI0LjQ5bC0zLjkyLTYuNjIsMy44OC02LjM1QTEsMSwwLDAsMCwzMy4yMiwxMEgyYTIsMiwwLDAsMC0yLDJWMjRhMiwyLDAsMCwwLDIs''@;'; put 'put ''MkgzMy4yNUExLDEsMCwwLDAsMzQuMTEsMjQuNDlabS0yMy42LTMuMzFIOS4zOUw2LjEzLDE2Ljg0djQuMzVINVYxNUg2LjEzbDMuMjcsNC4zNVYxNWgxLjEyWk0xNi44NCwxNkgxMy4zMXYxLjQ5aDMuMnYxaC0zLjJ2MS42MWgzLjUzdjFIMTIuMThWMTVoNC42NVptOC4yOSw1LjE2SDI0bC0x''@;'; put 'put ''LjU1LTQuNTlMMjAuOSwyMS4xOEgxOS43OGwtMi02LjE4SDE5bDEuMzIsNC40M0wyMS44NCwxNWgxLjIybDEuNDYsNC40M0wyNS44NSwxNWgxLjIzWiIvPicpLF8uQ2xyU2hhcGVCdWJibGVFeGNsYW1hdGlvbj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRzNy4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgs''@;'; put 'put ''Mi41Wk0yOC4yOSwyNC42MWExLDEsMCwwLDAtLjMyLjczbDAsNS4zNC00LjM4LTIuNzlhMSwxLDAsMCwwLS44My0uMTFBMTYsMTYsMCwwLDEsMTgsMjguNWMtNy43MiwwLTE0LTUuMzgtMTQtMTJzNi4yOC0xMiwxNC0xMiwxNCw1LjM4LDE0LDEyQTExLjA4LDExLjA4LDAsMCwxLDI4LjI5LDI0''@;'; put 'put ''LjYxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0xOCwyMC42M2ExLDEsMCwwLDAsMS0xVjguNDhhMSwxLDAsMSwwLTIsMFYxOS42MUExLDEsMCwwLDAsMTgsMjAuNjNaIi8+XG4gICAgICAgICAgICA8Y2lyY2xl''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBjeD0iMTgiIGN5PSIyNC4wNCIgcj0iMS4zMyIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIuNWMtOC44MiwwLTE2LDYuMjgtMTYsMTRz''@;'; put 'put ''Ny4xOCwxNCwxNiwxNGExOCwxOCwwLDAsMCw0Ljg4LS42OGw1LjUzLDMuNTJhMSwxLDAsMCwwLDEuNTQtLjg0bDAtNi43M2ExMywxMywwLDAsMCw0LTkuMjdDMzQsOC43OCwyNi44MiwyLjUsMTgsMi41Wk0xNi45Myw5LjEzYTEuNDEsMS40MSwwLDEsMSwyLjgxLDBWMTguOWExLjQxLDEuNDEs''@;'; put 'put ''MCwxLDEtMi44MSwwWm0xLjQxLDE3LjM1YTEuODcsMS44NywwLDEsMSwxLjg3LTEuODdBMS44NywxLjg3LDAsMCwxLDE4LjM0LDI2LjQ3WiIvPicpLF8uQ2xyU2hhcGVHcmlkVmlldz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMSIgZD0iTTE0LDRINkEyLDIsMCwwLDAsNCw2djhhMiwyLDAsMCwwLDIsMmg4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMTQsNFpNNiwxNFY2aDh2OFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAs''@;'; put 'put ''NEgyMmEyLDIsMCwwLDAtMiwydjhhMiwyLDAsMCwwLDIsMmg4YTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzAsNFpNMjIsMTRWNmg4djhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE0LDIwSDZhMiwyLDAs''@;'; put 'put ''MCwwLTIsMnY4YTIsMiwwLDAsMCwyLDJoOGEyLDIsMCwwLDAsMi0yVjIyQTIsMiwwLDAsMCwxNCwyMFpNNiwzMFYyMmg4djhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMwLDIwSDIyYTIsMiwwLDAsMC0yLDJ2''@;'; put 'put ''OGEyLDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYyMkEyLDIsMCwwLDAsMzAsMjBaTTIyLDMwVjIyaDh2OFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHg9IjQiIHk9IjQiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9''@;'; put 'put ''IjIiIHJ5PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiB4PSIyMCIgeT0iNCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIiByeD0iMiIgcnk9IjIiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHIt''@;'; put 'put ''aS1zb2xpZC1wYXRoLTMiIHg9IjQiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHJ4PSIyIiByeT0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgeD0iMjAiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHJ4''@;'; put 'put ''PSIyIiByeT0iMiIvPicpLF8uQ2xyU2hhcGVDdXJzb3JBcnJvdz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE0LjU4LDMyLjMxYTEsMSwwLDAsMS0uOTQtLjY1TDQsNS42NUExLDEsMCwwLDEsNS4yNSw0LjM3''@;'; put 'put ''bDI2LDkuNjhhMSwxLDAsMCwxLS4wNSwxLjg5bC04LjM2LDIuNTcsOC4zLDguM2ExLDEsMCwwLDEsMCwxLjQxbC0zLjI2LDMuMjZhMSwxLDAsMCwxLS43MS4yOWgwYTEsMSwwLDAsMS0uNzEtLjI5bC04LjMzLTguMzMtMi42LDguNDVhMSwxLDAsMCwxLS45My43MVptMy4wOS0xMmExLDEsMCww''@;'; put 'put ''LDEsLjcxLjI5bDguNzksOC43OUwyOSwyNy41MWwtOC43Ni04Ljc2YTEsMSwwLDAsMSwuNDEtMS42Nmw3LjEzLTIuMkw2LjYsN2w3Ljg5LDIxLjJMMTYuNzEsMjFhMSwxLDAsMCwxLC43MS0uNjhaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0xIiBkPSJNMjksMTIuMzYsMy44OCwzQTEsMSwwLDAsMCwyLjU5LDQuMjhMMTIsMjkuNDRhMSwxLDAsMCwwLDEuODktLjA1bDIuNjktOC43NSw5LjEyLDguOWExLDEsMCwwLDAsMS40MSwwbDIuMzUtMi4zNWExLDEsMCwwLDAsMC0xLjQxbC05LjA5LTguODZMMjksMTQuMjVBMSwxLDAs''@;'; put 'put ''MCwwLDI5LDEyLjM2WiIvPicpLF8uQ2xyU2hhcGVDdXJzb3JIYW5kPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAuNzQsMTUuMTlhMTMuNjYsMTMuNjYsMCwwLDAtNi44Ny0zLjgzQTI2LDI2LDAsMCwwLDE4''@;'; 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+JyksXy5DbHJTaGFwZUN1cnNvckhhbmRDbGljaz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLjQsMTcuNmMtMS44LTEuOS00LjItMy4yLTYuNy0zLjdjLTEuMS0w''@;'; put 'put ''LjMtMi4yLTAuNS0zLjMtMC42YzIuOC0zLjMsMi4zLTguMy0xLTExLjFzLTguMy0yLjMtMTEuMSwxcy0yLjMsOC4zLDEsMTEuMVxuICAgICAgICAgICAgICAgICAgICBjMC42LDAuNSwxLjIsMC45LDEuOCwxLjF2Mi4ybC0xLjYtMS41Yy0xLjQtMS40LTMuNy0xLjQtNS4yLDBjLTEuNCwxLjQt''@;'; put 'put ''MS41LDMuNi0wLjEsNWw0LjYsNS40YzAuMiwxLjQsMC43LDIuNywxLjQsMy45XG4gICAgICAgICAgICAgICAgICAgIGMwLjUsMC45LDEuMiwxLjgsMS45LDIuNXYxLjljMCwwLjYsMC40LDEsMSwxaDEzLjZjMC41LDAsMS0wLjUsMS0xdi0yLjZjMS45LTIuMywyLjktNS4yLDIuOS04LjF2LTUu''@;'; put 'put ''OFxuICAgICAgICAgICAgICAgICAgICBDMzAuNywxNy45LDMwLjYsMTcuNywzMC40LDE3LjZ6IE04LjQsOC4yYzAtMy4zLDIuNy01LjksNi01LjhjMy4zLDAsNS45LDIuNyw1LjgsNmMwLDEuOC0wLjgsMy40LTIuMiw0LjVWNy45XG4gICAgICAgICAgICAgICAgICAgIGMtMC4xLTEuOC0xLjYt''@;'; put 'put ''My4yLTMuNC0zLjJjLTEuOC0wLjEtMy40LDEuNC0zLjQsMy4ydjUuMkM5LjUsMTIuMSw4LjUsMTAuMiw4LjQsOC4yTDguNCw4LjJ6IE0yOC43LDI0YzAuMSwyLjYtMC44LDUuMS0yLjUsNy4xXG4gICAgICAgICAgICAgICAgICAgIGMtMC4yLDAuMi0wLjQsMC40LTAuNCwwLjd2Mi4xSDE0LjJ2''@;'; put 'put ''LTEuNGMwLTAuMy0wLjItMC42LTAuNC0wLjhjLTAuNy0wLjYtMS4zLTEuMy0xLjgtMi4yYy0wLjYtMS0xLTIuMi0xLjItMy40XG4gICAgICAgICAgICAgICAgICAgIGMwLTAuMi0wLjEtMC40LTAuMi0wLjZsLTQuOC01LjdjLTAuMy0wLjMtMC41LTAuNy0wLjUtMS4yYzAtMC40LDAuMi0wLjks''@;'; put 'put ''MC41LTEuMmMwLjctMC42LDEuNy0wLjYsMi40LDBsMi45LDIuOXYzbDEuOS0xVjcuOVxuICAgICAgICAgICAgICAgICAgICBjMC4xLTAuNywwLjctMS4zLDEuNS0xLjJjMC43LDAsMS40LDAuNSwxLjQsMS4ydjExLjVsMiwwLjR2LTQuNmMwLjEtMC4xLDAuMi0wLjEsMC4zLTAuMmMwLjcsMCwx''@;'; put 'put ''LjQsMC4xLDIuMSwwLjJ2NS4xbDEuNiwwLjN2LTUuMlxuICAgICAgICAgICAgICAgICAgICBsMS4yLDAuM2MwLjUsMC4xLDEsMC4zLDEuNSwwLjV2NWwxLjYsMC4zdi00LjZjMC45LDAuNCwxLjcsMSwyLjQsMS43TDI4LjcsMjR6Ii8+JyksXy5DbHJTaGFwZVJlc2l6ZT0oMCxnLmNsckljb25T''@;'; put 'put ''VkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LDRhMSwxLDAsMCwwLDAsMmg5LjU5bC05LjI1LDkuMjVhMSwxLDAsMSwwLDEuNDEsMS40MUwzMCw3LjQxVjE3YTEsMSwwLDAsMCwyLDBWNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNNCwxOWExLDEsMCwwLDEsMiwwdjkuNTlsOS4yNS05LjI1YTEsMSwwLDEsMSwxLjQxLDEuNDFMNy40MSwzMEgxN2ExLDEsMCwwLDEsMCwySDRaIi8+JyksXy5DbHJTaGFwZU9iamVjdHM9KDAsZy5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNi4wOCwxNC45YTEwLjQxLDEwLjQxLDAsMCwxLDEuODctLjcxbC00LTEwLjc3YTIsMiwwLDAsMC0zLjc1LDBMMiwyNS4yNkEyLDIsMCwwLDAsMy45MiwyOGg2Ljk0YTEwLDEwLDAsMCwxLS41''@;'; put 'put ''Mi0ySDMuOTJMMTIuMDYsNC4xMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIsOUgyMmEyLDIsMCwwLDAtMiwydjIuODVjLjIzLDAsLjQ2LDAsLjY5LDBBMTAuNTEsMTAuNTEsMCwwLDEsMjIsMTMuOVYxMUgz''@;'; put 'put ''MlYyMUgzMC42NWExMC40MiwxMC40MiwwLDAsMSwuNDUsMkgzMmEyLDIsMCwwLDAsMi0yVjExQTIsMiwwLDAsMCwzMiw5WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMC42OSwxNS44MWE4LjUsOC41LDAsMSww''@;'; put 'put ''LDguNSw4LjVBOC41MSw4LjUxLDAsMCwwLDIwLjY5LDE1LjgxWm0wLDE1YTYuNSw2LjUsMCwxLDEsNi41LTYuNUE2LjUxLDYuNTEsMCwwLDEsMjAuNjksMzAuODFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTAuNjUs''@;'; put 'put ''MjQuNDRhOS41MSw5LjUxLDAsMCwxLDcuMDYtOS4xN0wxMywzYTEsMSwwLDAsMC0xLjg3LDBMMi4wNywyNi41NkExLDEsMCwwLDAsMywyNy45Mmg4LjMyQTkuNDQsOS40NCwwLDAsMSwxMC42NSwyNC40NFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1z''@;'; put 'put ''b2xpZC1wYXRoLTIiIGQ9Ik0zMiwxMEgyMGExLDEsMCwwLDAtMSwxdjRhOS40Myw5LjQzLDAsMCwxLDEwLjYzLDlIMzJhMSwxLDAsMCwwLDEtMVYxMUExLDEsMCwwLDAsMzIsMTBaIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMi''@;'; put 'put ''IGN4PSIyMC4xNSIgY3k9IjI0LjQ0IiByPSI3LjUiLz4nKSxfLkNsclNoYXBlQm9vaz0oMCxnLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgeD0iMTAiIHk9IjUuMiIgd2lkdGg9IjE4IiBoZWlnaHQ9IjEuNTUiLz5cbiAgICAg''@;'; put 'put ''ICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjksOEg5Ljg2QTEuODksMS44OSwwLDAsMSw4LDYsMiwyLDAsMCwxLDkuODYsNEgyOWExLDEsMCwwLDAsMC0ySDkuODZBNCw0LDAsMCwwLDYsNmE0LjE0LDQuMTQsMCwwLDAsMCwuNDks''@;'; put 'put ''MSwxLDAsMCwwLDAsLjI0VjMwYTQsNCwwLDAsMCwzLjg2LDRIMjlhMSwxLDAsMCwwLDEtMVY5LjI1czAtLjA2LDAtLjA5LDAtLjA2LDAtLjA5QTEuMDcsMS4wNywwLDAsMCwyOSw4Wk0yOCwzMkg5Ljg2QTIsMiwwLDAsMSw4LDMwVjkuNTVBMy42MywzLjYzLDAsMCwwLDkuODYsMTBIMjhaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiB4PSIxMCIgeT0iNS4yIiB3aWR0aD0iMTgiIGhlaWdodD0iMS41NSIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTI5''@;'; put 'put ''LDhIOS44NkExLjg5LDEuODksMCwwLDEsOCw2LDIsMiwwLDAsMSw5Ljg2LDRIMjlhMSwxLDAsMSwwLDAtMkg5Ljg2QTQsNCwwLDAsMCw2LDZhNC4xNCw0LjE0LDAsMCwwLDAsLjQ5LDEsMSwwLDAsMCwwLC4yNFYzMGE0LDQsMCwwLDAsMy44Niw0SDI5YTEsMSwwLDAsMCwxLTFWOS4yNXMwLS4w''@;'; put 'put ''NiwwLS4wOSwwLS4wNiwwLS4wOUExLjA3LDEuMDcsMCwwLDAsMjksOFoiLz4nKSxfLkNsclNoYXBlQXN0ZXJpc2s9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOC44OSwyMC45MWwtNS0yLjkxLDQuODctMi44''@;'; put 'put ''NmEzLjExLDMuMTEsMCwwLDAsMS4xNC0xLjA4LDMsMywwLDAsMC00LjA5LTQuMTVMMjEsMTIuNzZWN2EzLDMsMCwwLDAtNiwwdjUuNzZMMTAuMTUsOS45MWEzLDMsMCwxLDAtMyw1LjE4bDUsMi45MUw3LjIsMjAuODZhMy4xMSwzLjExLDAsMCwwLTEuMTQsMS4wOCwzLDMsMCwwLDAsNC4wOSw0''@;'; put 'put ''LjE0TDE1LDIzLjI0VjI4LjlhMywzLDAsMCwwLDIsMi45NEEzLDMsMCwwLDAsMjEsMjlWMjMuMjRsNC44NSwyLjg1YTMsMywwLDEsMCwzLTUuMThaTTI4LjI0LDI0YTEsMSwwLDAsMS0xLjM3LjM2TDE5LDE5Ljc1VjI5YTEsMSwwLDAsMS0yLDBWMTkuNzVMOS4xMywyNC4zNmExLDEsMCwwLDEt''@;'; put 'put ''MS0xLjcyTDE2LDE4bC03LjktNC42NGExLDEsMCwxLDEsMS0xLjcyTDE3LDE2LjI1VjdhMSwxLDAsMCwxLDIsMHY5LjI1bDcuODctNC42MmExLDEsMCwwLDEsMSwxLjcyTDIwLDE4bDcuOSw0LjY0QTEsMSwwLDAsMSwyOC4yNCwyNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yOC44OSwyMC45MWwtNS0yLjkxLDQuODctMi44NmEzLjExLDMuMTEsMCwwLDAsMS4xNC0xLjA4LDMsMywwLDAsMC00LjA5LTQuMTVMMjEsMTIuNzZWN2EzLDMsMCwwLDAtNiwwdjUuNzZMMTAuMTUsOS45MWEzLDMsMCwxLDAtMyw1LjE4''@;'; put 'put ''bDUsMi45MUw3LjIsMjAuODZhMy4xMSwzLjExLDAsMCwwLTEuMTQsMS4wOCwzLDMsMCwwLDAsNC4wOSw0LjE0TDE1LDIzLjI0VjI4LjlhMywzLDAsMCwwLDIsMi45NEEzLDMsMCwwLDAsMjEsMjlWMjMuMjRsNC44NSwyLjg1YTMsMywwLDEsMCwzLTUuMThaIi8+JyksXy5DbHJTaGFwZVNjaXNz''@;'; put 'put ''b3JzPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIlxuICAgICAgICAgICAgZD0iTTI0LjA2LDE4LjE4bDkuNjEtOC43N2ExLDEsMCwwLDAtLjA5LTEuNTVsLTIuMjQtMS42YTMuNTcsMy41NywwLDAsMC00LjI4LjEyTDE1''@;'; put 'put ''Ljg4LDE1LjNsLTMuMjYtMi41MmE1LjQ1LDUuNDUsMCwxLDAtMSwxLjc3bDIuNjIsMkwxMCwyMGE1LjQ4LDUuNDgsMCwxLDAsMS41OSwxLjI5TDI4LjMsNy45NGExLjU3LDEuNTcsMCwwLDEsMS44OC0uMDVsMS4yMy44OEwyMS4xLDE4LjE5bDEwLjMxLDkuNC0xLjIzLjg4YTEuNTcsMS41Nyww''@;'; put 'put ''LDAsMS0xLjg4LS4wNWwtOS44MS03Ljg1TDE3LDIxLjkzbDEwLjA2LDhhMy41NywzLjU3LDAsMCwwLDQuMjkuMTJsMi4yNC0xLjZhMSwxLDAsMCwwLC4wOS0xLjU1Wk03LjQ1LDE0LjU0YTMuNDYsMy40NiwwLDEsMSwzLjQ1LTMuNDZBMy40NiwzLjQ2LDAsMCwxLDcuNDUsMTQuNTRabTAsMTMu''@;'; put 'put ''NzJBMy40NiwzLjQ2LDAsMSwxLDEwLjksMjQuOCwzLjQ2LDMuNDYsMCwwLDEsNy40NSwyOC4yNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMy44MSw4LjEzLDMxLjYzLDYuNDhhMS45MiwxLjkyLDAsMCwwLTIuMzYs''@;'; put 'put ''MEwxMCwyMi4wNmE1LjQ2LDUuNDYsMCwxLDAsMiwxLjgxbDMuOS0zLjEyTDI5LjI3LDMxLjUyYTEuOTIsMS45MiwwLDAsMCwyLjM2LDBsMi4xOC0xLjY0TDIwLjk0LDE5Wk03LjQ1LDI5Ljc1YTIuODYsMi44NiwwLDEsMSwyLjg2LTIuODZBMi44NywyLjg3LDAsMCwxLDcuNDUsMjkuNzVaIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMTQuMywxNS4yNCwxMiwxMy4zOGE1LjQ2LDUuNDYsMCwxLDAtMiwxLjgxTDEyLjE2LDE3Wm0tNi44NS0yYTIuODYsMi44NiwwLDEsMSwyLjg2LTIuODZBMi44NiwyLjg2LDAsMCwx''@;'; put 'put ''LDcuNDUsMTMuMjNaIi8+JyksXy5DbHJTaGFwZUJ1Zz0oMCxnLmNsckljb25TVkcpKCc8Y2lyY2xlIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBjeD0iMjMuNTYiIGN5PSIxNy43NCIgcj0iMS45NSIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjbGFzcz0iY2xy''@;'; 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 ''LDEuNjgsMCwxLDAtMS4xMSwxLjgzWiIvPicpLF8uQ2xyU2hhcGVUaGVybW9tZXRlcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LDIzLjE3VjExLjQ2SDE3VjIzLjJhMywzLDAsMSwwLDIsMFoiLz5cbiAg''@;'; put 'put ''ICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMTVhMSwxLDAsMCwwLDAtMkgyMy45MlYxMUgyNmExLDEsMCwwLDAsMC0ySDIzLjkyVjhhNiw2LDAsMCwwLTEyLDBWMjAuODFhOCw4LDAsMSwwLDEyLS4yVjE5SDI2YTEsMSww''@;'; put 'put ''LDAsMCwwLTJIMjMuOTJWMTVaTTI0LDI2YTYsNiwwLDEsMS0xMC4zNi00LjEybC4yNy0uMjlWOGE0LDQsMCwwLDEsOCwwVjIxLjQ0bC4zLjI5QTYsNiwwLDAsMSwyNCwyNloiLz4nKSxfLkNsclNoYXBlUGVuY2lsPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMuODcsOC4zMiwyOCwyLjQyYTIuMDcsMi4wNywwLDAsMC0yLjkyLDBMNC4yNywyMy4ybC0xLjksOC4yYTIuMDYsMi4wNiwwLDAsMCwyLDIuNSwyLjE0LDIuMTQsMCwwLDAsLjQzLDBMMTMuMDksMzIsMzMuODcsMTEuMjRBMi4wNywyLjA3LDAs''@;'; put 'put ''MCwwLDMzLjg3LDguMzJaTTEyLjA5LDMwLjIsNC4zMiwzMS44M2wxLjc3LTcuNjJMMjEuNjYsOC43bDYsNlpNMjksMTMuMjVsLTYtNiwzLjQ4LTMuNDYsNS45LDZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTQu''@;'; put 'put ''MjIsMjMuMmwtMS45LDguMmEyLjA2LDIuMDYsMCwwLDAsMiwyLjUsMi4xNCwyLjE0LDAsMCwwLC40MywwTDEzLDMyLDI4Ljg0LDE2LjIyLDIwLDcuNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzMuODIsOC4z''@;'; put 'put ''MmwtNS45LTUuOWEyLjA3LDIuMDcsMCwwLDAtMi45MiwwTDIxLjcyLDUuN2w4LjgzLDguODMsMy4yOC0zLjI4QTIuMDcsMi4wNywwLDAsMCwzMy44Miw4LjMyWiIvPicpLF8uQ2xyU2hhcGVOb3RlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOCwzMEg2VjhIMTkuMjJsMi0ySDZBMiwy''@;'; put 'put ''LDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTVsLTIsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMzLjUzLDUuODQsMzAuMTYsMi40N2ExLjYxLDEuNjEsMCwwLDAtMi4y''@;'; put 'put ''OCwwTDE0LjE3LDE2LjI2bC0xLjExLDQuODFBMS42MSwxLjYxLDAsMCwwLDE0LjYzLDIzLDEuNjksMS42OSwwLDAsMCwxNSwyM2w0Ljg1LTEuMDdMMzMuNTMsOC4xMkExLjYxLDEuNjEsMCwwLDAsMzMuNTMsNS44NFpNMTguODEsMjAuMDhsLTMuNjYuODFMMTYsMTcuMjYsMjYuMzIsNi44N2wy''@;'; put 'put ''LjgyLDIuODJaTTMwLjI3LDguNTYsMjcuNDUsNS43NCwyOSw0LjE2LDMxLjg0LDdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMyw2LjQsMjkuMywyLjdhMS43MSwxLjcxLDAsMCwwLTIuMzYsMEwyMy42NSw2''@;'; put 'put ''SDZBMiwyLDAsMCwwLDQsOFYzMGEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWMTEuNzZsMy0zQTEuNjcsMS42NywwLDAsMCwzMyw2LjRaTTE4LjgzLDIwLjEzbC00LjE5LjkzLDEtNC4xNSw5LjU1LTkuNTcsMy4yMywzLjIzWk0yOS41LDkuNDMsMjYuMjcsNi4ybDEuODUtMS44NSwz''@;'; put 'put ''LjIzLDMuMjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLF8uQ2xyU2hhcGVSZWZyZXNoPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjIuNCwxMS42NWExLjA5LDEuMDks''@;'; put 'put ''MCwwLDAsMS4wOSwxLjA5SDM0LjQzVjEuODFhMS4wOSwxLjA5LDAsMSwwLTIuMTksMFY4Ljk1YTE2LjQxLDE2LjQxLDAsMSwwLDEuNDcsMTUuODYsMS4xMiwxLjEyLDAsMCwwLTIuMDUtLjksMTQuMTgsMTQuMTgsMCwxLDEtMS4wNS0xMy4zNkgyMy41QTEuMDksMS4wOSwwLDAsMCwyMi40LDEx''@;'; put 'put ''LjY1WiIvPicpLF8uQ2xyU2hhcGVTeW5jPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIuODQsMTUuNzJhMSwxLDAsMSwwLTIsLjI5QTEzLjE1LDEzLjE1LDAsMCwxLDMxLDE3Ljk0LDEzLDEzLDAsMCwxLDgu''@;'; put 'put ''NywyN2g1LjM2YTEsMSwwLDAsMCwwLTJoLTl2OWExLDEsMCwxLDAsMiwwVjI4LjJBMTUsMTUsMCwwLDAsMzIuODQsMTUuNzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMC4wNiwxQTEuMDUsMS4wNSww''@;'; put 'put ''LDAsMCwyOSwyVjcuODNBMTQuOTQsMTQuOTQsMCwwLDAsMywxNy45NGExNS4xNiwxNS4xNiwwLDAsMCwuMiwyLjQ4LDEsMSwwLDAsMCwxLC44NGguMTZhMSwxLDAsMCwwLC44Mi0xLjE1QTEzLjIzLDEzLjIzLDAsMCwxLDUsMTcuOTRhMTMsMTMsMCwwLDEsMTMtMTNBMTIuODcsMTIuODcsMCww''@;'; put 'put ''LDEsMjcuNDQsOUgyMi4wNmExLDEsMCwwLDAsMCwySDMxVjJBMSwxLDAsMCwwLDMwLjA2LDFaIi8+JyksXy5DbHJTaGFwZVZpZXdMaXN0PSgwLGcuY2xySWNvblNWRykoJzxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiB4PSIyIiB5PSI4IiB3aWR0aD0i''@;'; put 'put ''MiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik03LDEwSDMxYTEsMSwwLDAsMCwwLTJIN2ExLDEsMCwwLDAsMCwyWiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiB4PSIyIiB5PSIxNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiBkPSJNMzEsMTRIN2ExLDEsMCwwLDAsMCwySDMxYTEsMSww''@;'; put 'put ''LDAsMCwwLTJaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIHg9IjIiIHk9IjIwIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTYiIGQ9Ik0zMSwyMEg3YTEsMSwwLDAsMCwwLDJIMzFhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgeD0iMiIgeT0iMjYiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiLz5c''@;'; put 'put ''biAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOCIgZD0iTTMxLDI2SDdhMSwxLDAsMCwwLDAsMkgzMWExLDEsMCwwLDAsMC0yWiIvPicpLF8uQ2xyU2hhcGVWaWV3Q2FyZHM9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9''@;'; put 'put ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNSwxN0g0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMTdaTTQsOHY3SDE1VjhaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMiwxN0gyMWEyLDIsMCwwLDEtMi0yVjhhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDE3Wk0yMSw4djdIMzJWOFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgZD0iTTE1LDMwSDRhMiwyLDAsMCwxLTItMlYyMWEyLDIsMCwwLDEsMi0ySDE1YTIsMiwwLDAsMSwyLDJ2N0EyLDIsMCwwLDEsMTUsMzBaTTQsMjF2N0gxNVYyMVoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTMyLDMwSDIxYTIsMiwwLDAsMS0yLTJWMjFhMiwyLDAsMCwxLDItMkgzMmEyLDIsMCwwLDEsMiwydjdBMiwyLDAsMCwxLDMyLDMwWk0yMSwyMXY3SDMyVjIxWiIvPicpLF8uQ2xyU2hhcGVMaWdodGJ1bGI9KDAsZy5jbHJJY29uU1ZHKSgnPHBh''@;'; 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 ''Y3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz4nKSxfLkNsclNoYXBlRG93bmxvYWQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; 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+JyksXy5DbHJTaGFwZVVwbG9hZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMxLDMxSDVh''@;'; 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 ''LF8uQ2xyU2hhcGVMb2NrPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTguMDksMjAuNTlBMi40MSwyLjQxLDAsMCwwLDE3LDI1LjE0VjI4aDJWMjUuMjNhMi40MSwyLjQxLDAsMCwwLS45MS00LjY0WiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMTVWMTAuNzJhOC4yLDguMiwwLDAsMC04LTguMzYsOC4yLDguMiwwLDAsMC04LDguMzZWMTVIN1YzMmEyLDIsMCwwLDAsMiwySDI3YTIsMiwwLDAsMCwyLTJWMTVa''@;'; put 'put ''TTEyLDEwLjcyYTYuMiw2LjIsMCwwLDEsNi02LjM2LDYuMiw2LjIsMCwwLDEsNiw2LjM2VjE1SDEyWk05LDMyVjE3SDI3VjMyWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNiwxNVYxMC43MmE4LjIsOC4yLDAs''@;'; put 'put ''MCwwLTgtOC4zNiw4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUg3VjMyYTIsMiwwLDAsMCwyLDJIMjdhMiwyLDAsMCwwLDItMlYxNVpNMTksMjUuMjNWMjhIMTdWMjUuMTRhMi40LDIuNCwwLDEsMSwyLC4wOVpNMjQsMTVIMTJWMTAuNzJhNi4yLDYuMiwwLDAsMSw2LTYuMzYsNi4yLDYuMiwwLDAs''@;'; put 'put ''MSw2LDYuMzZaIi8+JyksXy5DbHJTaGFwZVVubG9jaz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTEyLDI1LjE0VjI4aDJWMjUuMjNhMi40MiwyLjQyLDAsMSwwLTItLjA5WiIvPlxuICAgICAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMjYsMmE4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUgyVjMyYTIsMiwwLDAsMCwyLDJIMjJhMiwyLDAsMCwwLDItMlYxNUgyMFYxMC4zNkE2LjIsNi4yLDAsMCwxLDI2LDRhNi4yLDYuMiwwLDAsMSw2''@;'; put 'put ''LDYuMzZ2Ni44M2ExLDEsMCwwLDAsMiwwVjEwLjM2QTguMiw4LjIsMCwwLDAsMjYsMlpNMjIsMTdWMzJINFYxN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjYsMmE4LjIsOC4yLDAsMCwwLTgsOC4zNlYxNUgy''@;'; put 'put ''VjMyYTIsMiwwLDAsMCwyLDJIMjJhMiwyLDAsMCwwLDItMlYxNUgyMFYxMC4zNkE2LjIsNi4yLDAsMCwxLDI2LDRhNi4yLDYuMiwwLDAsMSw2LDYuMzZ2Ni44M2ExLDEsMCwwLDAsMiwwVjEwLjM2QTguMiw4LjIsMCwwLDAsMjYsMlpNMTQsMjUuMjNWMjhIMTJWMjUuMTRhMi40LDIuNCwwLDEs''@;'; put 'put ''MSwyLC4wOVoiLz4nKSxfLkNsclNoYXBlVXNlcnM9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xNy45LDE3LjNjMi43LDAsNC44LTIuMiw0LjgtNC45YzAtMi43LTIuMi00LjgtNC45LTQuOGMtMi43LDAtNC44''@;'; 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 ''ICAgICAgICAgIDxjaXJjbGUgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC03LS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjYiIHI9IjUiLz4nKSxfLkNsclNoYXBlUG9wT3V0PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcsMzNINWEyLDIsMCwwLDEtMi0yVjlBMiwyLDAsMCwxLDUsN0gxNVY5SDVWMzFIMjdWMjFoMlYzMUEyLDIsMCwwLDEsMjcsMzNaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTIiIGQ9Ik0xOCwzYTEsMSwwLDAsMCwwLDJIMjkuNTlMMTUuNzQsMTguODVhMSwxLDAsMSwwLDEuNDEsMS40MUwzMSw2LjQxVjE4YTEsMSwwLDAsMCwyLDBWM1oiLz4nKSxfLkNsclNoYXBlRmlsdGVyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzMsNEgzQTEsMSwwLDAsMCwyLDVWNi42N2ExLjc5LDEuNzksMCwwLDAsLjUzLDEuMjdMMTQsMTkuNTh2MTAuMmwyLC43NlYxOWExLDEsMCwwLDAtLjI5LS43MUw0LDYuNTlWNkgzMnYuNjFMMjAuMzMsMTguMjlBMSwxLDAsMCwwLDIwLDE5''@;'; put 'put ''bDAsMTMuMjFMMjIsMzNWMTkuNUwzMy40Nyw4QTEuODEsMS44MSwwLDAsMCwzNCw2LjdWNUExLDEsMCwwLDAsMzMsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjIsMzNWMTkuNUwzMy40Nyw4QTEuODEsMS44''@;'; put 'put ''MSwwLDAsMCwzNCw2LjdWNWExLDEsMCwwLDAtMS0xSDNBMSwxLDAsMCwwLDIsNVY2LjY3YTEuNzksMS43OSwwLDAsMCwuNTMsMS4yN0wxNCwxOS41OHYxMC4yWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy40OCw0aC0zMUEuNTIuNTIsMCwwLDAsMiw0LjUyVjYuMjRhMS4zMywx''@;'; put 'put ''LjMzLDAsMCwwLC4zOS45NWwxMiwxMnYxMGw3LjI1LDMuNjFWMTkuMTdsMTItMTJBMS4zNSwxLjM1LDAsMCwwLDM0LDYuMjZWNC41MkEuNTIuNTIsMCwwLDAsMzMuNDgsNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksXy5DbHJTaGFwZVBpbj0oMCxnLmNs''@;'; put 'put ''ckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDE2LjU5YTEsMSwwLDAsMS0uNzEtLjI5TDE5LjcsMy43MWExLDEsMCwwLDEsMS40MS0xLjQxTDMzLjcxLDE0Ljg5QTEsMSwwLDAsMSwzMywxNi41OVoiLz5cbiAgICAgICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI4LjUyLDE1LjU2bC0xLjQxLTEuNDEtNy4yLDcuMmExLDEsMCwwLDAtLjI1LDEsOSw5LDAsMCwxLTEuNTMsOC4wOUw1LjU4LDE3Ljg3YTksOSwwLDAsMSw4LjA5LTEuNTMsMSwxLDAs''@;'; put 'put ''MCwwLDEtLjI1bDcuMi03LjJMMjAuNDQsNy40OGwtNi43OSw2Ljc5QTEwLjk0LDEwLjk0LDAsMCwwLDMuNDEsMTcuMTFhMSwxLDAsMCwwLDAsMS40Mmw2LjMzLDYuMzNMMi4yOSwzMi4yOWExLDEsMCwxLDAsMS40MSwxLjQxbDcuNDQtNy40NCw2LjMzLDYuMzNhMSwxLDAsMCwwLC43MS4yOWgw''@;'; put 'put ''YTEsMSwwLDAsMCwuNzEtLjMsMTEsMTEsMCwwLDAsMi44NC0xMC4yNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMsMTYuNzFhMSwxLDAsMCwxLS43MS0uMjlMMTkuNywzLjgyYTEsMSwwLDAsMSwxLjQxLTEu''@;'; put 'put ''NDFMMzMuNzEsMTVBMSwxLDAsMCwxLDMzLDE2LjcxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yMC40NCw3LjU5bC02Ljc5LDYuNzlBMTAuOTQsMTAuOTQsMCwwLDAsMy40MSwxNy4yMmExLDEsMCwwLDAsMCwx''@;'; put 'put ''LjQyTDkuNzMsMjUsMi4yOSwzMi40MWExLDEsMCwxLDAsMS40MSwxLjQxbDcuNDQtNy40NCw2LjMzLDYuMzNhMSwxLDAsMCwwLC43MS4yOWgwYTEsMSwwLDAsMCwuNzEtLjMsMTEsMTEsMCwwLDAsMi44NC0xMC4yNGw2Ljc5LTYuNzlaIi8+JyksXy5DbHJTaGFwZUZpbGU9KDAsZy5jbHJJY29u''@;'; 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 ''LjIsMS40LDAuMywxLjhjMC4yLDAuMiwwLjUsMC4yLDAuOCwwLjJoMTEuNWMwLjcsMCwxLjMtMC41LDEuMy0xLjJjMC0wLjMtMC4xLTAuNS0wLjItMC44bC01LjctOS45Yy0wLjQtMC42LTEuMS0wLjgtMS44LTAuNUMyNy4xLDAuOCwyNywxLDI2LjksMS4xeiIvPicpLF8uQ2xyU2hhcGVQbHVz''@;'; put 'put ''PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsMTdIMTlWNmExLDEsMCwxLDAtMiwwVjE3SDZhMSwxLDAsMCwwLTEsMSwuOTEuOTEsMCwwLDAsMSwuOTRIMTdWMzBhMSwxLDAsMSwwLDIsMFYxOUgzMGExLDEs''@;'; put 'put ''MCwwLDAsMS0xQTEsMSwwLDAsMCwzMCwxN1oiLz4nKSxfLkNsclNoYXBlTWludXM9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LDE3SDEwYTEsMSwwLDAsMCwwLDJIMjZhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicp''@;'; put 'put ''LF8uQ2xyU2hhcGVNaW51c0NpcmNsZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjQsMTdIMTJhMSwxLDAsMCwwLDAsMkgyNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEs''@;'; put 'put ''MCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm02LDE3LjVIMTJhMS41LDEuNSwwLDAsMSwwLTNIMjRhMS41LDEuNSwwLDAsMSwwLDNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLF8uQ2xyU2hhcGVQbHVzQ2lyY2xlPSgwLGcuY2xySWNvblNWRykoJzxwYXRo''@;'; put 'put ''IGQ9Ik0yNi4xNywxN0gxOVY5LjgzYTEsMSwwLDAsMC0yLDBWMTdIOS44M2ExLDEsMCwwLDAsMCwySDE3djcuMTdhMSwxLDAsMCwwLDIsMFYxOWg3LjE3YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzQsMThB''@;'; put 'put ''MTYsMTYsMCwxLDEsMTgsMiwxNiwxNiwwLDAsMSwzNCwxOFptLTguNDEtMS41SDE5LjVWMTAuNDFhMS41LDEuNSwwLDAsMC0zLDBWMTYuNUgxMC40MWExLjUsMS41LDAsMCwwLDAsM0gxNi41djYuMDlhMS41LDEuNSwwLDAsMCwzLDBWMTkuNWg2LjA5YTEuNSwxLjUsMCwwLDAsMC0zWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLF8uQ2xyU2hhcGVCYW49KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJa''@;'; put 'put ''TTQsMThBMTMuOTMsMTMuOTMsMCwwLDEsNy40Myw4Ljg1TDI3LjE1LDI4LjU3QTE0LDE0LDAsMCwxLDQsMThabTI0LjU3LDkuMTVMOC44NSw3LjQzQTE0LDE0LDAsMCwxLDI4LjU3LDI3LjE1WiIvPicpLF8uQ2xyU2hhcGVUaW1lc0NpcmNsZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE5LjYxLDE4bDQuODYtNC44NmExLDEsMCwwLDAtMS40MS0xLjQxTDE4LjIsMTYuNTRsLTQuODktNC44OWExLDEsMCwwLDAtMS40MSwxLjQxTDE2Ljc4LDE4LDEyLDIyLjcyYTEsMSwwLDEsMCwxLjQxLDEuNDFsNC43''@;'; put 'put ''Ny00Ljc3LDQuNzQsNC43NGExLDEsMCwwLDAsMS40MS0xLjQxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQs''@;'; put 'put ''MCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm04LDIyLjFhMS40LDEuNCwwLDAsMS0yLDJs''@;'; put 'put ''LTYtNkwxMiwyNi4xMmExLjQsMS40LDAsMSwxLTItMkwxNiwxOC4wOCw5LjgzLDExLjg2YTEuNCwxLjQsMCwxLDEsMi0yTDE4LDE2LjFsNi4xNy02LjE3YTEuNCwxLjQsMCwxLDEsMiwyTDIwLDE4LjA4WiIvPicpLF8uQ2xyU2hhcGVUcmFzaD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjE0LDM0SDguODZBMi45MywyLjkzLDAsMCwxLDYsMzFWMTEuMjNIOFYzMWEuOTMuOTMsMCwwLDAsLjg2LDFIMjcuMTRBLjkzLjkzLDAsMCwwLDI4LDMxVjExLjIzaDJWMzFBMi45MywyLjkzLDAsMCwxLDI3LjE0''@;'; put 'put ''LDM0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzAuNzgsOUg1QTEsMSwwLDAsMSw1LDdIMzAuNzhhMSwxLDAsMCwxLDAsMloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMjEiIHk9IjEzIiB3aWR0aD0iMiIgaGVpZ2h0PSIxNSIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiB4PSIxMyIgeT0iMTMiIHdpZHRoPSIyIiBoZWlnaHQ9IjE1''@;'; put 'put ''Ii8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIGQ9Ik0yMyw1Ljg2SDIxLjFWNEgxNC45VjUuODZIMTNWNGEyLDIsMCwwLDEsMS45LTJoNi4yQTIsMiwwLDAsMSwyMyw0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRo''@;'; put 'put ''IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik02LDlWMzFhMi45MywyLjkzLDAsMCwwLDIuODYsM0gyNy4wOUEyLjkzLDIuOTMsMCwwLDAsMzAsMzFWOVptOSwyMEgxM1YxNGgyWm04LDBIMjFWMTRoMloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0i''@;'; put 'put ''Y2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiBkPSJNMzAuNzMsNUgyM1Y0QTIsMiwwLDAsMCwyMSwyaC02LjJBMiwyLDAsMCwwLDEzLDRWNUg1QTEsMSwwLDEsMCw1LDdIMzAuNzNhMSwxLDAsMCwwLDAtMloiLz4nKSxfLkNsclNoYXBlVGFnPSgwLGcuY2xySWNvblNWRykoJzxjaXJj''@;'; 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 ''PicpLF8uQ2xyU2hhcGVUYWdzPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMy4xNiwxOS4xMywxOS41OCw1LjU1QTEuOTIsMS45MiwwLDAsMCwxOC4yMSw1SDE2LjEyTDMxLjc1LDIwLjQ1LDIxLjIyLDMxLjA3YTEuOTMsMS45MywwLDAsMCwyLjczLDBsOS4yMS05LjIxYTEuOTMsMS45''@;'; 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+JyksXy5DbHJTaGFwZUhpc3Rvcnk9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDkuODNhMSwxLDAsMCwwLTEsMXY4LjcybDUuOSw0QTEsMSwwLDAsMCwyNCwyMS44OGwtNS0zLjM5VjEwLjgzQTEsMSwwLDAsMCwxOCw5LjgzWiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LjA5LDE2LjA5LDAsMCwwLDQsMTAuMjZWNS4yYTEsMSwwLDAsMC0yLDBWMTRoOC44YTEsMSwwLDAsMCwwLTJINS4zNUExNCwxNCwwLDEsMSw4LjU4LDI4LjM1YTEsMSwwLDAsMC0xLjM1''@;'; put 'put ''LDEuNDhBMTYsMTYsMCwxLDAsMTgsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+JyksXy5DbHJTaGFwZUNsb2NrPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQs''@;'; 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 ''MS4yOCwwLDAsMCwyMi4yMywxM0gzMy42OEExLjI4LDEuMjgsMCwwLDAsMzQuNzgsMTFMMjkuMDYsMS4xNEExLjI4LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTEtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz4nKSxf''@;'; 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 ''YTEsMSwwLDAsMSwyLDB2Ny41TDI1LDIwLjFBMSwxLDAsMCwxLDI1LjQ5LDIxLjQzWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLF8uQ2xyU2hhcGVDaXJjbGVBcnJvdz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwx''@;'; put 'put ''OCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOC4wOCw4LjI2bC03LjYxLDcuNjFhMSwxLDAsMSwwLDEu''@;'; put 'put ''NDEsMS40MUwxNywxMi4xOHYxNWExLDEsMCwwLDAsMiwwVjEybDUuMjgsNS4yOGExLDEsMCwxLDAsMS40MS0xLjQxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2''@;'; put 'put ''LDAsMCwwLDE4LDJabTgsMTUuNTdhMS40MywxLjQzLDAsMCwxLTIsMEwxOS40LDEzVjI3LjE0YTEuNCwxLjQsMCwwLDEtMi44LDB2LTE0bC00LjQzLDQuNDNhMS40LDEuNCwwLDAsMS0yLTJMMTguMDgsNy43LDI2LDE1LjU5QTEuNCwxLjQsMCwwLDEsMjYsMTcuNTdaIiBjbGFzcz0iY2xyLWkt''@;'; put 'put ''c29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksXy5DbHJTaGFwZUNoaWxkQXJyb3c9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LjgyLDE1LjhhMSwxLDAsMCwwLTEuNDEsMCwxLDEsMCwwLDAsMCwxLjQxTDI3LjIsMjFIOVYzLjc4YTEsMSwwLDEsMC0yLDBWMjFhMiwyLDAsMCww''@;'; put 'put ''LDIsMkgyNy4xNWwtMy43NCwzLjc1YTEsMSwwLDAsMCwwLDEuNDEsMSwxLDAsMCwwLC43LjI5LDEsMSwwLDAsMCwuNzEtLjI5TDMxLDIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksXy5DbHJTaGFwZUNvcHk9KDAsZy5jbHJJY29uU1ZHKSgnPHBh''@;'; put 'put ''dGggZD0iTTI5LjUsN2gtMTlBMS41LDEuNSwwLDAsMCw5LDguNXYyNEExLjUsMS41LDAsMCwwLDEwLjUsMzRoMTlBMS41LDEuNSwwLDAsMCwzMSwzMi41VjguNUExLjUsMS41LDAsMCwwLDI5LjUsN1pNMjksMzJIMTFWOUgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjYsMy41QTEuNSwxLjUsMCwwLDAsMjQuNSwySDUuNUExLjUsMS41LDAsMCwwLDQsMy41djI0QTEuNSwxLjUsMCwwLDAsNS41LDI5SDZWNEgyNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMjcsMy41NkExLjU2LDEuNTYsMCwwLDAsMjUuNDMsMkg1LjU3QTEuNTYsMS41NiwwLDAsMCw0LDMuNTZWMjguNDRBMS41NiwxLjU2LDAsMCwwLDUuNTcsMzBoLjUyVjQuMDdIMjdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cmVjdCB4PSI4IiB5PSI2IiB3aWR0aD0iMjMiIGhlaWdodD0iMjgiIHJ4PSIxLjUiIHJ5PSIxLjUiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiLz4nKSxfLkNsclNoYXBlSGVscD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMkEx''@;'; 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 ''Ni4yOCw1LjZDMjQuNTgsMTcuMTYsMjIuNjEsMTkuMiwxOS4xNSwxOS43OVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxfLkNsclNoYXBlTG9naW49KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI4LDRIMTJhMiwyLDAsMCwwLTIsMkgyOFYzMEgxMlYy''@;'; put 'put ''MC4ySDEwVjMwYTIsMiwwLDAsMCwyLDJIMjhhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyOCw0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTUuMTIsMTguNDZhMSwxLDAsMSwwLDEuNDEsMS40MWw1Ljc5''@;'; put 'put ''LTUuNzlMMTYuNTQsOC4yOWExLDEsMCwwLDAtMS40MSwxLjQxTDE4LjUsMTNINGExLDEsMCwwLDAtMSwxLDEsMSwwLDAsMCwxLDFIMTguNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDRIMTJhMiwyLDAs''@;'; put 'put ''MCwwLTIsMnY3aDguNUwxNS4xMiw5LjcxYTEsMSwwLDAsMSwxLjQxLTEuNDFsNS43OSw1Ljc5LTUuNzksNS43OWExLDEsMCwwLDEtMS40MS0xLjQxTDE4LjUsMTVIMTBWMzBhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDI4LDRaIiBjbGFzcz0iY2xyLWktc29s''@;'; put 'put ''aWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEwLDEzSDRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxaDZaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLF8uQ2xyU2hhcGVMb2dvdXQ9KDAsZy5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggZD0iTTcsNkgyM3Y5LjhoMlY2YTIsMiwwLDAsMC0yLTJIN0EyLDIsMCwwLDAsNSw2VjMwYTIsMiwwLDAsMCwyLDJIMjNhMiwyLDAsMCwwLDItMkg3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0y''@;'; put 'put ''OC4xNiwxNy4yOGExLDEsMCwwLDAtMS40MSwxLjQxTDMwLjEzLDIySDE1LjYzYTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWgxNC41bC0zLjM4LDMuNDZhMSwxLDAsMSwwLDEuNDEsMS40MUwzNCwyMy4wN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjMsNEg3QTIsMiwwLDAsMCw1LDZWMzBhMiwyLDAsMCwwLDIsMkgyM2EyLDIsMCwwLDAsMi0yVjI0SDE1LjYzYTEsMSwwLDAsMS0xLTEsMSwxLDAsMCwxLDEtMUgyNVY2QTIsMiwwLDAsMCwyMyw0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjE2LDE3LjI4YTEsMSwwLDAsMC0xLjQxLDEuNDFMMzAuMTMsMjJIMjV2Mmg1LjEzbC0zLjM4LDMuNDZhMSwxLDAsMSwwLDEuNDEsMS40MUwzNCwyMy4wN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTIiLz4nKSxfLkNsclNoYXBlUHJpbnRlcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjksOUgyN1Y1SDlWOUg3YTQsNCwwLDAsMC00LDRWMjRINi45MlYyMi4wOUg1VjEzYTIsMiwwLDAsMSwyLTJIMjlhMiwyLDAsMCwxLDIsMnY5SDI5LjA4VjI0SDMzVjEzQTQsNCwwLDAsMCwyOSw5''@;'; 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 ''LTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLF8uQ2xyU2hhcGVXb3JsZD0oMCxnLmNsckljb25TVkcpKCc8cGF0''@;'; 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 ''cmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTQtLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLF8uQ2xyU2hhcGVTbGlkZXI9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEyLDEyLjM3QTQsNCwwLDAsMCw5LDgu''@;'; put 'put ''NDhWNUExLDEsMCwxLDAsNyw1VjguNDhhNCw0LDAsMCwwLDAsNy43OFYzMWExLDEsMCwxLDAsMiwwVjE2LjI2QTQsNCwwLDAsMCwxMiwxMi4zN1ptLTQsMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSw4LDE0LjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDE1LjgzYTQsNCwwLDAsMC0zLTMuODlWNWExLDEsMCwxLDAtMiwwdjYuOTRhNCw0LDAsMCwwLDAsNy43OFYzMWExLDEsMCwxLDAsMiwwVjE5LjcyQTQsNCwwLDAsMCwzMiwxNS44M1ptLTQsMmEyLDIsMCwxLDEsMi0yQTIsMiwwLDAsMSwyOCwx''@;'; put 'put ''Ny44N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIsMjQuNWE0LDQsMCwwLDAtMy0zLjg5VjVhMSwxLDAsMSwwLTIsMFYyMC42MWE0LDQsMCwwLDAsMCw3Ljc4VjMxYTEsMSwwLDEsMCwyLDBWMjguMzlBNCw0''@;'; put 'put ''LDAsMCwwLDIyLDI0LjVabS00LDJhMiwyLDAsMSwxLDItMkEyLDIsMCwwLDEsMTgsMjYuNTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTksOS4yOVY1QTEsMSwwLDEsMCw3LDVWOS4zYTMuMjIsMy4yMiwwLDAs''@;'; put 'put ''MCwwLDYuMTFWMzFhMSwxLDAsMSwwLDIsMFYxNS40M0EzLjIyLDMuMjIsMCwwLDAsOSw5LjI5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE5LDIxLjQ1VjVhMSwxLDAsMSwwLTIsMFYyMS40N2EzLjIyLDMuMjIsMCww''@;'; put 'put ''LDAsMCw2LjExVjMxYTEsMSwwLDEsMCwyLDBWMjcuNmEzLjIyLDMuMjIsMCwwLDAsMC02LjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LDEyLjc1VjVhMSwxLDAsMSwwLTIsMHY3Ljc2YTMuMjIsMy4yMiwwLDAs''@;'; put 'put ''MCwwLDYuMTFWMzFhMSwxLDAsMSwwLDIsMFYxOC44OWEzLjIyLDMuMjIsMCwwLDAsMC02LjE0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPicpLF8uQ2xyU2hhcGVDbGlwYm9hcmQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjI5LDVIMjdWN2gyVjMy''@;'; 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+JyksXy5DbHJTaGFwZUZpcmV3YWxsPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNNCw4SDMy''@;'; 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 ''NSIgIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLF8uQ2xyU2hhcGVMaXN0PSgwLGcuY2xySWNvblNWRykoJzxyZWN0IHg9IjE1IiB5PSI4IiB3aWR0aD0iOSIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0''@;'; 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 ''LF8uQ2xyU2hhcGVSZWRvPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNCw0LjIyYTEsMSwwLDAsMC0xLjQxLDEuNDJsNS41Niw1LjQ5aC0xM0ExMSwxMSwwLDAsMCwxMC4wNywzMiwxLDEsMCwwLDAsMTEsMzAuMThhOSw5LDAsMCwxLTUtOCw5LjA4LDkuMDgsMCwwLDEsOS4xMy05aDEz''@;'; put 'put ''bC01LjU0LDUuNDhBMSwxLDAsMCwwLDI0LDIwbDgtNy45MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLF8uQ2xyU2hhcGVVbmRvPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMC44NywxMS4xNGgtMTNsNS41Ni01LjQ5QTEsMSwwLDAsMCwx''@;'; put 'put ''Miw0LjIyTDQsMTIuMTMsMTIsMjBhMSwxLDAsMCwwLDEuNDEtMS40Mkw3Ljg2LDEzLjE0aDEzYTkuMDgsOS4wOCwwLDAsMSw5LjEzLDksOSw5LDAsMCwxLTUsOEExLDEsMCwwLDAsMjUuOTMsMzJhMTEsMTEsMCwwLDAtNS4wNi0yMC44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIiAvPicpLF8uQ2xyU2hhcGVTY3JvbGw9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDExLjEyVjYuNThhNC41LDQuNSwwLDAsMC00LjUtNC41aC0xNkE0LjUsNC41LDAsMCwwLDksNi41OHYyM2EyLjUsMi41LDAsMSwxLTUsMFYyNkg3LjE5VjI0SDJ2NS41QTQu''@;'; 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+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIzMCIgY3k9IjYiIHI9IjUiICBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxfLkNsclNoYXBlRmlsZVNldHRpbmdzPSgwLGcuY2xy''@;'; 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+JyksXy5DbHJTaGFwZVR3b1dheUFycm93cz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuNDMsMTYuODNBMSwxLDAsMCwwLDIyLDE4LjI0TDI1LjcyLDIySDcuODNhMSwxLDAsMCwwLDAsMkgyNS43MkwyMiwyNy43YTEsMSwwLDEsMCwxLjQyLDEuNDFMMjku''@;'; put 'put ''NTMsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMy4yNCwxOC40NWExLDEsMCwwLDAsLjcxLTEuNzFMMTAuMjQsMTNIMjguMTJhMSwxLDAsMCwwLDAtMkgxMC4yNGwzLjcxLTMuNzNhMSwxLDAsMCwwLTEu''@;'; put 'put ''NDItMS40MUw2LjQyLDEybDYuMTEsNi4xNEExLDEsMCwwLDAsMTMuMjQsMTguNDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxfLkNsclNoYXBlU3dpdGNoPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik01LjcxLDE0SDIwLjkyVjEySDUuNzFM''@;'; put 'put ''OS40Miw4LjI3QTEsMSwwLDEsMCw4LDYuODZMMS44OSwxMyw4LDE5LjE0YTEsMSwwLDEsMCwxLjQyLTEuNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMjMiIHk9IjEyIiB3aWR0aD0iMyIgaGVpZ2h0PSIyIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjI4IiB5PSIxMiIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBk''@;'; put 'put ''PSJNMjcuOTIsMTcuODZhMSwxLDAsMCwwLTEuNDIsMS40MUwzMC4yMSwyM0gxNXYySDMwLjIxTDI2LjUsMjguNzRhMSwxLDAsMSwwLDEuNDIsMS40TDM0LDI0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSIxMCIg''@;'; put 'put ''eT0iMjMiIHdpZHRoPSIzIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iNiIgeT0iMjMiIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC02IiAvPicpLF8uQ2xyU2hhcGVUb29scz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAsMTRIMTZhMSwxLDAsMCwwLTEsMXY2YTEsMSwwLDAsMCwxLDFoNGExLDEsMCwwLDAsMS0xVjE1QTEsMSwwLDAsMCwyMCwxNFptLS40LDYuNkgxNi40VjE1LjRoMy4yWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzEsMTIuMzgsMjkuNjIsOC4yOUExLDEsMCwwLDAsMjguOTIsOGgtNVY2LjA1QTIsMiwwLDAsMCwyMiw0SDEzLjg0QTEuOTIsMS45MiwwLDAsMCwxMiw2LjA1VjhINy4wOGExLDEsMCww''@;'; put 'put ''LDAtLjcxLjI5TDIuMjksMTIuMzhhMSwxLDAsMCwwLS4yOS43MVYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTMuMDhBMSwxLDAsMCwwLDMzLjcxLDEyLjM4Wk0xNCw2aDhWOEgxNFpNMzIsMTdIMjJ2MS45M0gzMlYyOEg0VjE4LjkzSDE0VjE3SDRWMTMuNUw3LjUsMTBoMjFM''@;'; put 'put ''MzIsMTMuNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTYuNCIgeT0iMTUuNCIgd2lkdGg9IjMuMiIgaGVpZ2h0PSI1LjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAg''@;'; put 'put ''ICAgICAgICA8cGF0aCBkPSJNMjEsMjFhMSwxLDAsMCwxLTEsMUgxNmExLDEsMCwwLDEtMS0xVjE5SDJ2OWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMTlIMjFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTMzLjcxLDEyLjM4LDI5LjYyLDguMjlBMSwxLDAsMCwwLDI4LjkyLDhoLTVWNi4wNUEyLDIsMCwwLDAsMjIsNEgxMy44NEExLjkyLDEuOTIsMCwwLDAsMTIsNi4wNVY4SDcuMDhhMSwxLDAsMCwwLS43MS4yOUwyLjI5LDEyLjM4YTEsMSwwLDAsMC0uMjkuNzFWMTdIMTVWMTVhMSwxLDAsMCwx''@;'; put 'put ''LDEtMWg0YTEsMSwwLDAsMSwxLDF2MkgzNFYxMy4wOEExLDEsMCwwLDAsMzMuNzEsMTIuMzhaTTIyLDhIMTRWNmg4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxfLkNsclNoYXBlV2luZG93Q2xvc2U9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5''@;'; put 'put ''LjQxLDE4bDcuMjktNy4yOWExLDEsMCwwLDAtMS40MS0xLjQxTDE4LDE2LjU5LDEwLjcxLDkuMjlhMSwxLDAsMCwwLTEuNDEsMS40MUwxNi41OSwxOCw5LjI5LDI1LjI5YTEsMSwwLDEsMCwxLjQxLDEuNDFMMTgsMTkuNDFsNy4yOSw3LjI5YTEsMSwwLDAsMCwxLjQxLTEuNDFaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxfLkNsclNoYXBlV2luZG93TWF4PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy44OSw5aC0yMGEyLDIsMCwwLDAtMiwyVjI1YTIsMiwwLDAsMCwyLDJoMjBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMjcu''@;'; put 'put ''ODksOVptLTIwLDE2VjExaDIwVjI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksXy5DbHJTaGFwZVdpbmRvd01pbj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcsMjdIOWExLDEsMCwwLDEsMC0ySDI3YTEsMSwwLDAsMSwwLDJaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxfLkNsclNoYXBlV2luZG93UmVzdG9yZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjgsOEgxNGEyLDIsMCwwLDAtMiwydjJoMlYxMEgyOFYyMEgyNnYyaDJhMiwyLDAsMCwwLDItMlYxMEEyLDIsMCwwLDAs''@;'; put 'put ''MjgsOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIyLDE0SDhhMiwyLDAsMCwwLTIsMlYyNmEyLDIsMCwwLDAsMiwySDIyYTIsMiwwLDAsMCwyLTJWMTZBMiwyLDAsMCwwLDIyLDE0Wk04LDI2VjE2SDIyVjI2''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksXy5DbHJTaGFwZVpvb21Jbj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTYsNEExMiwxMiwwLDEsMCwyOCwxNiwxMiwxMiwwLDAsMCwxNiw0Wm0wLDIxLjkxQTEwLDEwLDAsMSwxLDI2LDE2LDEw''@;'; put 'put ''LDEwLDAsMCwxLDE2LDI1LjkxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzEuNzEsMjkuNjlsLTUuMTctNS4xN0ExMy42OCwxMy42OCwwLDAsMSwyNS4xNSwyNmw1LjE1LDUuMTVhMSwxLDAsMCwwLDEuNDEt''@;'; put 'put ''MS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTIxLDE1SDE3VjExYTEsMSwwLDAsMC0yLDB2NEgxMWExLDEsMCwwLDAsMCwyaDR2NGExLDEsMCwwLDAsMiwwVjE3aDRhMSwxLDAsMCwwLDAtMloiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPicpLF8uQ2xyU2hhcGVab29tT3V0PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNiw0QTEyLDEyLDAsMSwwLDI4LDE2LDEyLDEyLDAsMCwwLDE2LDRabTAsMjEuOTFBMTAsMTAsMCwxLDEsMjYsMTYsMTAsMTAsMCww''@;'; put 'put ''LDEsMTYsMjUuOTFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS43MSwyOS42OWwtNS4xNy01LjE3QTEzLjY4LDEzLjY4LDAsMCwxLDI1LjE1LDI2bDUuMTUsNS4xNWExLDEsMCwwLDAsMS40MS0xLjQxWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjAsMTVIMTJhMSwxLDAsMCwwLDAsMmg4YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxfLkNsclNo''@;'; 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 ''ZSIgLz4nKSxfLkNsclNoYXBlTGlicmFyeT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNDgsMjkuNjMsMjYuNzQsMTEuODJhMiwyLDAsMCwwLTIuNTgtMS4xNkwyMSwxMS44NVY4LjkyQTEuOTIsMS45MiwwLDAsMCwxOS4wOCw3SDE0VjQuOTJBMS45MiwxLjkyLDAsMCwwLDEyLjA4''@;'; put 'put ''LDNINUEyLDIsMCwwLDAsMyw1VjMyYTEsMSwwLDAsMCwxLDFIMjBhMSwxLDAsMCwwLDEtMVYxOS4yN2w1LDEzLjIxYTEsMSwwLDAsMCwxLjI5LjU4bDUuNjEtMi4xNGExLDEsMCwwLDAsLjU4LTEuMjlaTTEyLDguODNWMzFINVY1aDdaTTE5LDMxSDE0VjloNVptOC41MS0uMjVMMjEuMTMsMTMu''@;'; put 'put ''OTJsMy43NC0xLjQyLDYuMzksMTYuODNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMi43NSwzSDUuMjVBMS4xNSwxLjE1LDAsMCwwLDQsNFYzM0gxNFY0QTEuMTUsMS4xNSwwLDAsMCwxMi43NSwzWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43NywzMS4wOWwtNi45NC0xOC4zYTEsMSwwLDAsMC0xLjI5LS41OEwyMiwxMy41OVY5YTEsMSwwLDAsMC0xLTFIMTZWMzNoNlYxNC42OUwyOC45MywzM1oiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksXy5DbHJTaGFwZUJvbHQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEwLjUyLDM0aC0zYTEsMSwwLDAsMS0uODgtMS40NEwxMi41NSwyMUg2YTEsMSwwLDAsMS0uODUtMS41NGwxMC42OC0xN0ExLDEsMCwwLDEsMTYuNjQsMkgz''@;'; put 'put ''MC4wN2ExLDEsMCwwLDEsLjc3LDEuNjlMMjEuNzgsMTRoNS4zOGExLDEsMCwwLDEsLjczLDEuNjZsLTE2LjYzLDE4QTEsMSwwLDAsMSwxMC41MiwzNFpNOS4xOCwzMmguOTFMMjQuODYsMTZIMTkuNTlhMSwxLDAsMCwxLS43Ny0xLjY5TDI3Ljg4LDRIMTcuMTlMNy43NywxOUgxNC4yYTEsMSww''@;'; put 'put ''LDAsMSwuODgsMS40NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLjgsMi4yOUEuNDkuNDksMCwwLDAsMzAuMzUsMkgxNi40MmEuNS41LDAsMCwwLS40Mi4yM2wtMTAuNzEsMTdBLjQ5LjQ5LDAsMCwwLDUu''@;'; put 'put ''NywyMGg3LjY3TDYuNiwzMy4yNWEuNTIuNTIsMCwwLDAsLjQ2Ljc1aDNhLjUuNSwwLDAsMCwuMzctLjE2TDI4LDE0Ljg1YS41LjUsMCwwLDAtLjM3LS44NUgyMC44OUwzMC43MiwyLjgyQS40OS40OSwwLDAsMCwzMC44LDIuMjlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0xIiAvPicpLF8uQ2xyU2hhcGVXcmVuY2g9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjE4LDI2LjExLDIwLjM1LDEzLjI4QTkuMjgsOS4yOCwwLDAsMCw3LjU0LDIuNzlsLTEuMzQuNTksNS4zOCw1LjM4TDguNzYsMTEuNTksMy4zOCw2LjIxLDIuNzksNy41NEE5LjI3LDkuMjcs''@;'; put 'put ''MCwwLDAsMTMuMjgsMjAuMzVMMjYuMTEsMzMuMThhMiwyLDAsMCwwLDIuODMsMGw0LjI0LTQuMjRBMiwyLDAsMCwwLDMzLjE4LDI2LjExWm0tNS42Niw1LjY2TDEzLjg4LDE4LjEybC0uNTcuMTZhNy4yNyw3LjI3LDAsMCwxLTkuMzEtNyw3LjIsNy4yLDAsMCwxLC4xNS0xLjQ4bDQuNjEsNC42''@;'; put 'put ''MSw1LjY2LTUuNjZMOS44MSw0LjE1YTcuMjcsNy4yNywwLDAsMSw4LjQ3LDkuMTZsLS4xNi41N0wzMS43NywyNy41M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMjcuMTMiIGN5PSIyNy4wOSIgcj0iMS4z''@;'; put 'put ''IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMTEuMjEgMjcuMTIpIHJvdGF0ZSgtNDUpIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy43MywyNy43MiwxOS42NywxMy42NmE4Ljc5LDguNzksMCwwLDAtMTItMTAu''@;'; put 'put ''NUwxMyw4LjUzLDguNTMsMTMsMy4xNiw3LjY3YTguNzksOC43OSwwLDAsMCwxMC41LDEyTDI3LjcyLDMzLjczYTEuMDcsMS4wNywwLDAsMCwxLjUsMGw0LjUxLTQuNTFBMS4wNywxLjA3LDAsMCwwLDMzLjczLDI3LjcyWk0yOSwyOWExLjM4LDEuMzgsMCwxLDEsMC0yQTEuMzgsMS4zOCwwLDAs''@;'; put 'put ''MSwyOSwyOVoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksXy5DbHJTaGFwZUJ1bGxzZXllPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyYTE1LjkyLDE1LjkyLDAsMCwwLTQuMjUuNTlsLjc3LDEuODZhMTQuMDcsMTQuMDcsMCwxLDEtMTAsMTBs''@;'; 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 ''IGNsci1pLXNvbGlkLXBhdGgtNCIgLz4nKSxfLkNsclNoYXBlVGFyZ2V0PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCw3LjJBMTAuOCwxMC44LDAsMSwwLDI4LjgsMTgsMTAuODEsMTAuODEsMCwwLDAsMTgsNy4yWm0wLDIwQTkuMiw5LjIsMCwxLDEsMjcuMiwxOCw5LjIxLDkuMjEsMCwwLDEsMTgsMjcu''@;'; put 'put ''MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEyLjMxQTUuNjksNS42OSwwLDEsMCwyMy42OSwxOCw1LjY5LDUuNjksMCwwLDAsMTgsMTIuMzFabTAsOS43N0E0LjA5LDQuMDksMCwxLDEsMjIuMDksMTgs''@;'; put 'put ''NC4wOSw0LjA5LDAsMCwxLDE4LDIyLjA5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSI0LjA5IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAg''@;'; put 'put ''ICAgICAgICAgPHBhdGggZD0iTTE4LDcuODNBMTAuMTcsMTAuMTcsMCwxLDAsMjguMTcsMTgsMTAuMTgsMTAuMTgsMCwwLDAsMTgsNy44M1ptMCwxNkE1Ljg4LDUuODgsMCwxLDEsMjMuODgsMTgsNS44OCw1Ljg4LDAsMCwxLDE4LDIzLjg4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMjcuODNBMTEuODMsMTEuODMsMCwxLDEsMjkuODMsMTgsMTEuODUsMTEuODUsMCwwLDEsMTgsMjkuODNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xy''@;'; put 'put ''LWktc29saWQtcGF0aC0zIiAvPicpLF8uQ2xyU2hhcGVGbGFtZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMywxNi42NmMtMS4xOS0yLjA5LTcuOTQtMTQuMTUtNy45NC0xNC4xNWExLDEsMCwwLDAtMS43NSwwbC02LDEwLjY0LTMtNS4yOGExLDEsMCwwLDAtMS43NSwwUzUuNCwx''@;'; 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 ''ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxfLkNsclNoYXBlSG91cmdsYXNzPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOSwzMkgyNlYyNC45MWE2LjY3LDYuNjcsMCwwLDAtMi42OS01LjMzbC0xLjI4LTFBNi4zNiw2LjM2LDAsMCwwLDIxLDE4aDBhNi4yOSw2''@;'; 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+JyksXy5DbHJTaGFwZU5vQWNjZXNzPSgwLGcuY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTAsMzBBMTQsMTQsMCwxLDEsMzIsMTgsMTQsMTQsMCwwLDEsMTgsMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxw''@;'; put 'put ''YXRoIGQ9Ik0yNy4xNSwxNUg4Ljg1QTEuODUsMS44NSwwLDAsMCw3LDE2Ljg1djIuMjlBMS44NSwxLjg1LDAsMCwwLDguODUsMjFIMjcuMTVBMS44NSwxLjg1LDAsMCwwLDI5LDE5LjE1VjE2Ljg1QTEuODUsMS44NSwwLDAsMCwyNy4xNSwxNVptLjI1LDQuMTVhLjI1LjI1LDAsMCwxLS4yNS4y''@;'; put 'put ''NUg4Ljg1YS4yNS4yNSwwLDAsMS0uMjUtLjI1VjE2Ljg1YS4yNS4yNSwwLDAsMSwuMjUtLjI1SDI3LjE1YS4yNS4yNSwwLDAsMSwuMjUuMjVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAs''@;'; put 'put ''MSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJaTTI5LjE1LDIwSDYuODVBLjg1Ljg1LDAsMCwxLDYsMTkuMTVWMTYuODVBLjg1Ljg1LDAsMCwxLDYuODUsMTZIMjkuMTVhLjg1Ljg1LDAsMCwxLC44NS44NXYyLjI5QS44NS44NSwwLDAsMSwyOS4xNSwyMFoiIGNsYXNzPSJjbHItaS1zb2xpZCBj''@;'; put 'put ''bHItaS1zb2xpZC1wYXRoLTEiIC8+JyksXy5DbHJTaGFwZU9yZ2FuaXphdGlvbj0oMCxnLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjkuOCAxOC44IDI2LjIgMTguOCAyNi4yIDIxLjg4IDI3LjggMjEuODggMjcuOCAxNy4yIDE4LjggMTcuMiAxOC44IDE0IDE3LjIgMTQgMTcuMiAx''@;'; put 'put ''Ny4yIDguMiAxNy4yIDguMiAyMS44OCA5LjggMjEuODggOS44IDE4LjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE0LDIzSDRhMiwyLDAsMCwwLTIsMnY2YTIsMiwwLDAsMCwyLDJIMTRhMiwyLDAsMCwwLDIt''@;'; put 'put ''MlYyNUEyLDIsMCwwLDAsMTQsMjNaTTQsMzFWMjVIMTR2NloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLDIzSDIyYTIsMiwwLDAsMC0yLDJ2NmEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWMjVB''@;'; put 'put ''MiwyLDAsMCwwLDMyLDIzWk0yMiwzMVYyNUgzMnY2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMsMTNIMjNhMiwyLDAsMCwwLDItMlY1YTIsMiwwLDAsMC0yLTJIMTNhMiwyLDAsMCwwLTIsMnY2QTIsMiww''@;'; put 'put ''LDAsMCwxMywxM1ptMC04SDIzdjZIMTNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iOS44IDE4LjggMjYuMiAxOC44IDI2LjIgMjEuODggMjcuOCAyMS44OCAyNy44IDE3LjIgMTguOCAxNy4yIDE4''@;'; put 'put ''LjggMTQgMTcuMiAxNCAxNy4yIDE3LjIgOC4yIDE3LjIgOC4yIDIxLjg4IDkuOCAyMS44OCA5LjggMTguOCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIiIHk9IjIzIiB3aWR0aD0iMTQiIGhlaWdodD0iMTAiIHJ4PSIy''@;'; put 'put ''IiByeT0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjIwIiB5PSIyMyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjEwIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cmVjdCB4PSIxMSIgeT0iMyIgd2lkdGg9IjE0IiBoZWlnaHQ9IjEwIiByeD0iMiIgcnk9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTQiIC8+JyksXy5DbHJTaGFwZUJhbGFuY2U9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LDMzSDEy''@;'; put 'put ''YTEsMSwwLDAsMSwwLTJIMjRhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTciIHk9IjkiIHdpZHRoPSIyIiBoZWlnaHQ9IjIyLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LDdIOEExLDEsMCwwLDEsOCw1SDI4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yNi45MywyNC43OWE3LjIz''@;'; put 'put ''LDcuMjMsMCwwLDEtNS44MS0yLjg5bC0uNi0uOCwxLjU5LTEuMjEuNi44YTUuMjgsNS4yOCwwLDAsMCw4LjQyLDBsLjYtLjgsMS41OSwxLjIxLS42LjhBNy4yMyw3LjIzLDAsMCwxLDI2LjkzLDI0Ljc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMzAuNTEsMTkuMjVhLjguOCwwLDAsMS0uNzMtLjQ4TDI2LjkzLDEyLjJsLTIuODUsNi41N2EuOC44LDAsMCwxLTEuNDctLjY0TDI2LjIsOS44N2EuODMuODMsMCwwLDEsMS40NywwbDMuNTgsOC4yNmEuOC44LDAsMCwxLS43MywxLjEyWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOS42OCwyNC43OUE3LjIzLDcuMjMsMCwwLDEsMy44OCwyMS45bC0uNi0uOEw0Ljg2LDE5LjlsLjYuOGE1LjI4LDUuMjgsMCwwLDAsOC40MiwwbC42LS44LDEuNTksMS4yMS0uNi44QTcu''@;'; put 'put ''MjMsNy4yMywwLDAsMSw5LjY4LDI0Ljc5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTMuMjYsMTkuMjVhLjguOCwwLDAsMS0uNzMtLjQ4TDkuNjgsMTIuMiw2Ljg0LDE4Ljc3YS44LjgsMCwwLDEtMS40Ny0u''@;'; put 'put ''NjRMOC45NSw5Ljg3YS44My44MywwLDAsMSwxLjQ3LDBMMTQsMTguMTNhLjguOCwwLDAsMS0uNzMsMS4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC03IiAvPicpLF8uQ2xyU2hhcGVJZEJhZGdlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyMmE0''@;'; 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+JyksXy5DbHJTaGFwZVJlcGVhdD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTYs''@;'; put 'put ''MTQuMTVBMy4xNywzLjE3LDAsMCwxLDkuMTcsMTFIMjguNGwtNC4yOCw0LjU0YTEsMSwwLDEsMCwxLjQ2LDEuMzdMMzIuMDksMTAsMjUuNTgsMy4wOWExLDEsMCwxLDAtMS40NiwxLjM3TDI4LjQsOUg5LjE3QTUuMTcsNS4xNywwLDAsMCw0LDE0LjE1djYuMWwyLTIuMTJaIi8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMwLDIxLjg1QTMuMTcsMy4xNywwLDAsMSwyNi44MywyNUg3LjZsNC4yOC00LjU0YTEsMSwwLDEsMC0xLjQ2LTEuMzdMMy45MSwyNmw2LjUxLDYuOTFhMSwxLDAsMSwwLDEuNDYtMS4zN0w3''@;'; put 'put ''LjYsMjdIMjYuODNBNS4xNyw1LjE3LDAsMCwwLDMyLDIxLjg1di02LjFsLTIsMi4xMloiLz4nKSxfLkNsclNoYXBlRmlsZUdyb3VwPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzEsMzRIMTNhMSwxLDAsMCwx''@;'; put 'put ''LTEtMVYxMWExLDEsMCwwLDEsMS0xSDMxYTEsMSwwLDAsMSwxLDFWMzNBMSwxLDAsMCwxLDMxLDM0Wk0xNCwzMkgzMFYxMkgxNFoiLz5cbiAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiB4PSIxNiIgeT0iMTYiIHdpZHRoPSIxMiIg''@;'; put 'put ''aGVpZ2h0PSIyIi8+XG4gICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMTYiIHk9IjIwIiB3aWR0aD0iMTIiIGhlaWdodD0iMiIvPlxuICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTQiIHg9IjE2IiB5PSIyNCIgd2lkdGg9IjEyIiBoZWlnaHQ9IjIiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiBkPSJNNiwyNFY0SDI0VjNhMSwxLDAsMCwwLTEtMUg1QTEsMSwwLDAsMCw0LDNWMjVhMSwxLDAs''@;'; put 'put ''MCwwLDEsMUg2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIGQ9Ik0xMCwyOFY4SDI4VjdhMSwxLDAsMCwwLTEtMUg5QTEsMSwwLDAsMCw4LDdWMjlhMSwxLDAsMCwwLDEsMWgxWiIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMxLDEwSDEzYTEsMSwwLDAsMC0xLDFWMzNhMSwxLDAsMCwwLDEsMUgzMWExLDEsMCwwLDAsMS0xVjExQTEsMSwwLDAsMCwzMSwxMFpNMjgsMjZIMTZWMjRIMjhabTAtNEgxNlYyMEgyOFptMC00SDE2VjE2SDI4WiIv''@;'; put 'put ''PlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTYsMjRWNEgyNFYzYTEsMSwwLDAsMC0xLTFINUExLDEsMCwwLDAsNCwzVjI1YTEsMSwwLDAsMCwxLDFINloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xp''@;'; put 'put ''ZCBjbHItaS1zb2xpZC1wYXRoLTMiIGQ9Ik0xMCwyOFY4SDI4VjdhMSwxLDAsMCwwLTEtMUg5QTEsMSwwLDAsMCw4LDdWMjlhMSwxLDAsMCwwLDEsMWgxWiIvPicpLF8uQ2xyU2hhcGVQYXBlcmNsaXA9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEiIGQ9Ik04LjQyLDMyLjZBNi4zLDYuMywwLDAsMSw0LDMwLjc5bC0uMTMtLjEzQTYuMiw2LjIsMCwwLDEsMiwyNi4yMiw2Ljc3LDYuNzcsMCwwLDEsNCwyMS40TDE5LjUsNi4wN2E4LjY3LDguNjcsMCwwLDEsMTIuMTUtLjM1QTgsOCwwLDAsMSwzNCwxMS40NGE5LDks''@;'; put 'put ''MCwwLDEtMi43LDYuMzZMMTcuMzcsMzEuNkExLDEsMCwxLDEsMTYsMzAuMThMMjkuODksMTYuMzhBNyw3LDAsMCwwLDMyLDExLjQ0YTYsNiwwLDAsMC0xLjc2LTQuMyw2LjY3LDYuNjcsMCwwLDAtOS4zNC4zNUw1LjQ1LDIyLjgyQTQuNzgsNC43OCwwLDAsMCw0LDI2LjIyYTQuMjEsNC4yMSww''@;'; put 'put ''LDAsMCwxLjI0LDNsLjEzLjEzYTQuNjQsNC42NCwwLDAsMCw2LjUtLjIxTDI1LjIyLDE1Ljk0QTIuNywyLjcsMCwwLDAsMjYsMTRhMi4zNSwyLjM1LDAsMCwwLS42OS0xLjY4LDIuNjEsMi42MSwwLDAsMC0zLjY2LjEzbC05LjIsOS4xMmExLDEsMCwxLDEtMS40MS0xLjQyTDIwLjI4LDExYTQu''@;'; put 'put ''NjIsNC42MiwwLDAsMSw2LjQ4LS4xM0E0LjMzLDQuMzMsMCwwLDEsMjgsMTRhNC42OCw0LjY4LDAsMCwxLTEuNDEsMy4zNEwxMy4yOCwzMC41OEE2LjkxLDYuOTEsMCwwLDEsOC40MiwzMi42WiIvPicpLF8uQ2xyU2hhcGVTaHJpbms9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwxNUgyMi40MWw5LjI1LTkuMjVhMSwxLDAsMCwwLTEuNDEtMS40MUwyMSwxMy41OVY0YTEsMSwwLDAsMC0yLDBWMTdIMzJhMSwxLDAsMCwwLDAtMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNNCwxOWExLDEsMCwwLDAsMCwyaDkuNTlMNC4zMywzMC4yNWExLDEsMCwxLDAsMS40MSwxLjQxTDE1LDIyLjQxVjMyYTEsMSwwLDAsMCwyLDBWMTlaIi8+JyksXy5DbHJTaGFwZUFjY2Vzc2liaWxpdHkxPSgwLGcuY2xySWNvblNWRykoJzxw''@;'; 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 ''LXBhdGgtMyIgLz4nKSxfLkNsclNoYXBlQWNjZXNzaWJpbGl0eTI9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLjA2LDExaC0yNGExLDEsMCwxLDAsMCwySDE0djkuNjVzMCwwLDAsMGwtMy43NSwxMGExLDEsMCwwLDAsLjU4LDEuMjksMS4xMywxLjEzLDAsMCwwLC4zNi4wNiwxLDEs''@;'; put 'put ''MCwwLDAsLjkzLS42NUwxNS42MiwyNGg0Ljc2bDMuNTIsOS4zNWExLDEsMCwwLDAsLjkzLjY1LDEuMTMsMS4xMywwLDAsMCwuMzYtLjA2LDEsMSwwLDAsMCwuNTgtMS4yOUwyMiwyMi42OHMwLDAsMCwwVjEzaDguMDZhMSwxLDAsMSwwLDAtMlpNMjAsMjJIMTZWMTNoNFoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDEwYTQsNCwwLDEsMC00LTRBNCw0LDAsMCwwLDE4LDEwWm0wLTZhMiwyLDAsMSwxLTIsMkEyLDIsMCwwLDEsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0yIiAvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMTcuOTYiIGN5PSI1IiByPSIzIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEwSDZhMSwxLDAsMCwwLDAsMmg4djguMzZzMCwwLDAsMEwxMC4xMSwz''@;'; put 'put ''My4xN2ExLDEsMCwwLDAsLjY2LDEuMjUsMS41NSwxLjU1LDAsMCwwLC4yOSwwLDEsMSwwLDAsMCwxLS43MWwzLjI5LTEwLjg0aDUuMzhMMjQsMzMuNzVhMSwxLDAsMCwwLDEsLjcxLDEuNTUsMS41NSwwLDAsMCwuMjksMCwxLDEsMCwwLDAsLjY2LTEuMjVMMjIsMjAuNHMwLDAsMCwwVjEyaDhh''@;'; put 'put ''MSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+JyksXy5DbHJTaGFwZVNvcnRCeT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjguNTQsMTNINy40NmExLDEsMCwwLDEsMC0ySDI4LjU0YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS4xNywxOUg3LjQ2YTEsMSwwLDAsMSwwLTJIMjEuMTdhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggZD0iTTEzLjc0LDI1SDcuNDZhMSwxLDAsMCwxLDAtMmg2LjI4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxfLkNsclNoYXBlQ29sbGFwc2VDYXJkPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywy''@;'; put 'put ''MUgzYTEsMSwwLDAsMC0xLDF2NmExLDEsMCwwLDAsMSwxSDMzYTEsMSwwLDAsMCwxLTFWMjJBMSwxLDAsMCwwLDMzLDIxWm0tMSw2SDRWMjNIMzJaIiAgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMC4yMmw1''@;'; put 'put ''LjY1LTUuNjVhLjgxLjgxLDAsMCwwLDAtMS4xNC44LjgsMCwwLDAtMS4xMywwTDE4LDE4bC00LjUyLTQuNTJhLjguOCwwLDAsMC0xLjEzLDAsLjgxLjgxLDAsMCwwLDAsMS4xNFoiICBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBh''@;'; put 'put ''dGggZD0iTTE4LDE0LjIybDUuNjUtNS42NWEuODEuODEsMCwwLDAsMC0xLjE0LjguOCwwLDAsMC0xLjEzLDBMMTgsMTIsMTMuNDgsNy40M2EuOC44LDAsMCwwLTEuMTMsMCwuODEuODEsMCwwLDAsMCwxLjE0WiIgIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cmVjdCB4PSIyIiB5PSIyMiIgd2lkdGg9IjMyIiBoZWlnaHQ9IjgiIHJ4PSIxIiByeT0iMSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyMC43bC01Ljc5LTUuNzlhMSwxLDAsMCwxLDAt''@;'; put 'put ''MS40MSwxLDEsMCwwLDEsMS40MSwwTDE4LDE3Ljg3bDQuMzgtNC4zN2ExLDEsMCwwLDEsMS40MSwwLDEsMSwwLDAsMSwwLDEuNDFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDE0LjUsMTIuMjEsOC43MWExLDEs''@;'; put 'put ''MCwwLDEsMC0xLjQyLDEsMSwwLDAsMSwxLjQxLDBMMTgsMTEuNjdsNC4zOC00LjM4YTEsMSwwLDAsMSwxLjQxLDAsMSwxLDAsMCwxLDAsMS40MloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTMiIC8+JyksXy5DbHJTaGFwZUV4cGFuZENhcmQ9KDAsZy5jbHJJY29uU1ZH''@;'; put 'put ''KSgnPHBhdGggZD0iTTMzLDZIM0ExLDEsMCwwLDAsMiw3VjI5YTEsMSwwLDAsMCwxLDFIMzNhMSwxLDAsMCwwLDEtMVY3QTEsMSwwLDAsMCwzMyw2Wk0zMiwyOEg0VjhIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''ZD0iTTEzLjQ4LDE1Ljg2LDE4LDExLjM0bDQuNTIsNC41MmEuNzcuNzcsMCwwLDAsLjU2LjI0LjgxLjgxLDAsMCwwLC41Ny0xLjM3TDE4LDkuMDhsLTUuNjUsNS42NWEuOC44LDAsMSwwLDEuMTMsMS4xM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4g''@;'; put 'put ''ICAgICAgICAgICA8cGF0aCBkPSJNMTMuNDgsMjEuODYsMTgsMTcuMzRsNC41Miw0LjUyYS43Ny43NywwLDAsMCwuNTYuMjQuODEuODEsMCwwLDAsLjU3LTEuMzdMMTgsMTUuMDhsLTUuNjUsNS42NWEuOC44LDAsMSwwLDEuMTMsMS4xM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsNkgzQTEsMSwwLDAsMCwyLDdWMjlhMSwxLDAsMCwwLDEsMUgzM2ExLDEsMCwwLDAsMS0xVjdBMSwxLDAsMCwwLDMzLDZaTTIzLjc5LDIxLjQxYTEsMSwwLDAsMS0xLjQxLDBMMTgsMTdsLTQuMzgsNC4zOGExLDEsMCww''@;'; put 'put ''LDEtMS40MSwwLDEsMSwwLDAsMSwwLTEuNDJMMTgsMTQuMiwyMy43OSwyMEExLDEsMCwwLDEsMjMuNzksMjEuNDFabTAtNi4yYTEsMSwwLDAsMS0xLjQxLDBMMTgsMTAuODNsLTQuMzgsNC4zOGExLDEsMCwwLDEtMS40MSwwLDEsMSwwLDAsMSwwLTEuNDJMMTgsOGw1Ljc5LDUuNzlBMSwxLDAs''@;'; put 'put ''MCwxLDIzLjc5LDE1LjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxfLkNsclNoYXBlQnJpZWZjYXNlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiwyOGEwLDAsMCwwLDEsMCwwSDRWMjEuMzJhNy4xLDcuMSwwLDAsMS0yLTEuNDNWMjhhMiwy''@;'; put 'put ''LDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjE5Ljg5YTYuNzQsNi43NCwwLDAsMS0yLDEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yNSwyMi40YTEsMSwwLDAsMCwxLTFWMTUuOTRIMjRWMThIMTR2MkgyNHYxLjRBMSwx''@;'; put 'put ''LDAsMCwwLDI1LDIyLjRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbjxwYXRoIGQ9Ik0zMyw2SDI0VjQuMzhBMi40MiwyLjQyLDAsMCwwLDIxLjU1LDJoLTcuMUEyLjQyLDIuNDIsMCwwLDAsMTIsNC4zOFY2SDNBMSwxLDAsMCwwLDIsN3Y4YTUsNSww''@;'; put 'put ''LDAsMCw1LDVoM3YxLjRhMSwxLDAsMCwwLDIsMFYxNS45NEgxMFYxOEg3YTMsMywwLDAsMS0zLTNWOEgzMnY3YTMsMywwLDAsMS0zLDNIMjh2MmgxYTUsNSwwLDAsMCw1LTVWN0ExLDEsMCwwLDAsMzMsNlpNMjIsNkgxNFY0LjQzQS40NS40NSwwLDAsMSwxNC40NSw0aDcuMTFhLjQzLjQzLDAs''@;'; put 'put ''MCwxLC40NC40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTMwLDE4QTQuMDYsNC4wNiwwLDAsMCwzNCwxNFY2SDI0VjQuNDNBMi40NCwyLjQ0LDAsMCwwLDIxLjU1LDJoLTcuMUEyLjQ0LDIuNDQsMCwwLDAsMTIsNC40M1Y2SDJ2''@;'; put 'put ''OEE0LjA2LDQuMDYsMCwwLDAsNi4wNSwxOGg0VjE1LjkyaDJ2NS43YTEsMSwwLDEsMS0yLDBWMjAuMDZINi4wNkE2LjA2LDYuMDYsMCwwLDEsMiwxOC40OXY5LjQ1YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYxOC40OWE2LDYsMCwwLDEtNC4wNiwxLjU3SDI4VjE4Wk0xNCw0LjQz''@;'; put 'put ''QS40NS40NSwwLDAsMSwxNC40NSw0aDcuMWEuNDUuNDUsMCwwLDEsLjQ1LjQzVjZIMTRaTTI2LDIxLjYyYTEsMSwwLDEsMS0yLDBWMjAuMDZIMTRWMThIMjRWMTUuOTJoMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksXy5DbHJTaGFwZUNvbG9yUGlja2Vy''@;'; put 'put ''PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywxMC4wNWE1LjA3LDUuMDcsMCwwLDAsLjEtNy4xN0E1LjA2LDUuMDYsMCwwLDAsMjYsM0wyMC43OCw4LjE1YTIuMTMsMi4xMywwLDAsMS0zLDBsLS42Ny0uNjdMMTUuNzIsOC45MiwyNy4wOCwyMC4yOGwxLjQyLTEuNDItLjY3LS42N2Ey''@;'; put 'put ''LjEzLDIuMTMsMCwwLDEsMC0zWk0yNi40NCwxMy44YTQuMDcsNC4wNywwLDAsMC0xLjA4LDEuOTJsLTUuMDgtNS4wOEE0LjA3LDQuMDcsMCwwLDAsMjIuMiw5LjU2bDUuMTYtNS4xN2EzLjA5LDMuMDksMCwwLDEsNC4zNS0uMSwzLjA5LDMuMDksMCwwLDEtLjEsNC4zNVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTcuMywzMS41MWEyLDIsMCwxLDEtMi44My0yLjgzTDE4LjU4LDE0LjU3bC0xLjQyLTEuNDFMMy4wNSwyNy4yN2E0LDQsMCwwLDAtLjY4LDQuOEwuODksMzMuNTVBMSwxLDAsMCwwLC44OSwzNWExLDEsMCwwLDAs''@;'; put 'put ''MS40MiwwbDEuNDMtMS40NGEzLjkzLDMuOTMsMCwwLDAsMi4wOS42LDQuMDYsNC4wNiwwLDAsMCwyLjg4LTEuMkwyMi44MiwxOC44MSwyMS40MSwxNy40WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG48cGF0aCBkPSJNMzMuNzMsMi4xMWE0LjA5LDQu''@;'; put 'put ''MDksMCwwLDAtNS43Ni4xTDIyLjgxLDcuMzhhMy4xMywzLjEzLDAsMCwxLTQuMy4xMUwxNy4wOSw4LjkxLDI3LDE4Ljc5bDEuNDItMS40MkEzLjE4LDMuMTgsMCwwLDEsMjguNDYsMTNsNS4xNy01LjE3QTQuMDgsNC4wOCwwLDAsMCwzMy43MywyLjExWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMSIgLz5cbjxwYXRoIGQ9Ik0yMi4xOCwxNi43OSw3LjQ2LDMxLjUxYTIsMiwwLDEsMS0yLjgyLTIuODNMMTkuMzUsMTRsLTEuNDEtMS40MUwzLjIyLDI3LjI3YTQsNCwwLDAsMC0uNjgsNC44TDEuMDYsMzMuNTVhMSwxLDAsMCwwLDAsMS40MSwxLDEsMCwwLDAsMS40''@;'; put 'put ''MSwwbDEuNDQtMS40NGEzLjkzLDMuOTMsMCwwLDAsMi4wOS42LDQuMDYsNC4wNiwwLDAsMCwyLjg4LTEuMkwyMy42LDE4LjIxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxfLkNsclNoYXBlQ29weVRvQ2xpcGJvYXJkPSgwLGcuY2xySWNvblNWRykoJzxw''@;'; put 'put ''YXRoIGQ9Ik0yMi42LDRIMjEuNTVhMy44OSwzLjg5LDAsMCwwLTcuMzEsMEgxMy40QTIuNDEsMi40MSwwLDAsMCwxMSw2LjRWMTBIMjVWNi40QTIuNDEsMi40MSwwLDAsMCwyMi42LDRaTTIzLDhIMTNWNi4yNUEuMjUuMjUsMCwwLDEsMTMuMjUsNmgyLjY5bC4xMi0xLjExQTEuMjQsMS4yNCww''@;'; put 'put ''LDAsMSwxNi42MSw0YTIsMiwwLDAsMSwzLjE1LDEuMThsLjA5Ljg0aDIuOWEuMjUuMjUsMCwwLDEsLjI1LjI1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG48cGF0aCBkPSJNMzMuMjUsMTguMDZIMjEuMzNsMi44NC0yLjgzYTEsMSwwLDEsMC0xLjQy''@;'; put 'put ''LTEuNDJMMTcuNSwxOS4wNmw1LjI1LDUuMjVhMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjcxLTEuN2wtMi44NC0yLjg0SDMzLjI1YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbjxwYXRoIGQ9Ik0yOSwxNmgyVjYuNjhB''@;'; put 'put ''MS42NiwxLjY2LDAsMCwwLDI5LjM1LDVIMjcuMDhWN0gyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuPHBhdGggZD0iTTI5LDMxSDdWN0g5VjVINi42NEExLjY2LDEuNjYsMCwwLDAsNSw2LjY3VjMxLjMyQTEuNjYsMS42NiwwLDAsMCw2LjY1LDMz''@;'; put 'put ''SDI5LjM2QTEuNjYsMS42NiwwLDAsMCwzMSwzMS4zM1YyMi4wNkgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLF8uQ2xyU2hhcGVEcmFnSGFuZGxlPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjE1IiBjeT0iMTIiIHI9IjEuNSIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTUiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48Y2lyY2xlIGN4PSIyMSIgY3k9IjEyIiByPSIxLjUiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxjaXJjbGUgY3g9IjIxIiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBjeD0iMjEiIGN5PSIxOCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNSIgLz48Y2lyY2xlIGN4PSIxNSIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLF8uQ2xyU2hhcGVGaWx0ZXIyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMywxMUgzYTEsMSwwLDAsMCww''@;'; put 'put ''LDJIMzNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuPHBhdGggZD0iTTI4LDE3SDhhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+''@;'; put 'put ''XG48cGF0aCBkPSJNMjMsMjNIMTNhMSwxLDAsMCwwLDAsMkgyM2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksXy5DbHJTaGFwZU1vb249KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLDI3LjE5YTEsMSwwLDAsMC0x''@;'; put 'put ''LS41NmMtLjI4LDAtLjU2LDAtLjg1LDBBMTEsMTEsMCwwLDEsMjQuOTIsNS42MWExLDEsMCwwLDAsLjYxLTEsMSwxLDAsMCwwLS42Ny0uOTEsMTQuNywxNC43LDAsMCwwLTUtLjg3LDE1LjEyLDE1LjEyLDAsMCwwLDAsMzAuMjQsMTQuNzgsMTQuNzgsMCwwLDAsMTEtNC44MUExLDEsMCwwLDAs''@;'; put 'put ''MzEsMjcuMTlaTTE5Ljg5LDMxLjEyYTEzLjEyLDEzLjEyLDAsMCwxLDAtMjYuMjQsMTEuODEsMTEuODEsMCwwLDEsMiwuMTYsMTMsMTMsMCwwLDAsNS43MiwyMy41M0ExMi43NSwxMi43NSwwLDAsMSwxOS44OSwzMS4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xIiAvPlxuPHBhdGggZD0iTTI5LjIsMjYuNzJBMTIuMDcsMTIuMDcsMCwwLDEsMjIuOSw0LjQ0LDEzLjY4LDEzLjY4LDAsMCwwLDE5LjQ5LDRhMTQsMTQsMCwwLDAsMCwyOCwxMy44MiwxMy44MiwwLDAsMCwxMC45LTUuMzRBMTEuNzEsMTEuNzEsMCwwLDEsMjkuMiwyNi43MloiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksXy5DbHJTaGFwZVN1bj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsNi4zMWExLDEsMCwwLDAsMS0xVjEuOTFhMSwxLDAsMCwwLTIsMHYzLjRBMSwxLDAsMCwwLDE4LDYuMzFaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; 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 ''aWQtcGF0aC05IiAvPicpLF8uQ2xyU2hhcGVXYW5kPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzQuMSw0LDMxLjcxLDEuNmExLjgzLDEuODMsMCwwLDAtMS4zMS0uNTRoMGEyLjA1LDIuMDUsMCwwLDAtMS40''@;'; put 'put ''NS42MkwxLjc2LDI5LjIzQTIsMiwwLDAsMCwxLjY4LDMybDIuNCwyLjQzQTEuODMsMS44MywwLDAsMCw1LjM5LDM1aDBhMi4wNSwyLjA1LDAsMCwwLDEuNDUtLjYyTDM0LDYuNzlBMiwyLDAsMCwwLDM0LjEsNFpNNS40MiwzMi45MywzLjE2LDMwLjY1aDBMMjQuMTEsOS40M2wyLjI1LDIuMjha''@;'; put 'put ''TTMyLjYxLDUuMzlsLTUuMTIsNS4xOEwyNS4yNCw4LjI5bDUuMTMtNS4yLDIuMjUsMi4yOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzIuNTMsMjAuNDdsMi4wOS0yLjA5YS44LjgsMCwwLDAtMS4xMy0xLjEz''@;'; put 'put ''bC0yLjA5LDIuMDktMi4wOS0yLjA5YS44LjgsMCwwLDAtMS4xMywxLjEzbDIuMDksMi4wOS0yLjA5LDIuMDlhLjguOCwwLDAsMCwxLjEzLDEuMTNsMi4wOS0yLjA5LDIuMDksMi4wOWEuOC44LDAsMCwwLDEuMTMtMS4xM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTQuNzgsNi41MWEuOC44LDAsMCwwLDEuMTMsMEwxNy40LDVsMS40OSwxLjQ5QS44LjgsMCwwLDAsMjAsNS4zOEwxOC41NCwzLjg5LDIwLDIuNGEuOC44LDAsMCwwLTEuMTMtMS4xM0wxNy40LDIuNzYsMTUuOTEsMS4yN0EuOC44LDAsMSww''@;'; put 'put ''LDE0Ljc4LDIuNGwxLjQ5LDEuNDlMMTQuNzgsNS4zOEEuOC44LDAsMCwwLDE0Ljc4LDYuNTFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgZD0iTTguMzMsMTUuMjZhLjguOCwwLDAsMCwxLjEzLDBsMS4xNi0xLjE2LDEu''@;'; put 'put ''MTYsMS4xNmEuOC44LDAsMSwwLDEuMTMtMS4xM0wxMS43NiwxM2wxLjE2LTEuMTZhLjguOCwwLDEsMC0xLjEzLTEuMTNsLTEuMTYsMS4xNkw5LjQ2LDEwLjY4YS44LjgsMCwxLDAtMS4xMywxLjEzTDkuNDksMTMsOC4zMywxNC4xM0EuOC44LDAsMCwwLDguMzMsMTUuMjZaIi8+JyksXy5DbHJT''@;'; put 'put ''aGFwZUN1cnNvck1vdmU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI4Ljg1LDEyLjg5YTEsMSwwLDAsMC0xLjQyLDAsMSwxLDAsMCwwLDAsMS40MUwzMC4xNCwxN0gxOVY1Ljg2bDIuNjksMi43YTEsMSwwLDAsMCwxLjQxLDAsMSwxLDAsMCwwLDAtMS40MkwxOCwyLDEyLjg5LDcuMTVh''@;'; put 'put ''MSwxLDAsMCwwLS4yOS43MSwxLDEsMCwwLDAsMS43MS43TDE3LDUuODZWMTdINS44NmwyLjctMi42OWExLDEsMCwwLDAsMC0xLjQxLDEsMSwwLDAsMC0xLjQyLDBMMiwxOGw1LjE0LDUuMTFhMSwxLDAsMCwwLC43MS4yOSwxLDEsMCwwLDAsLjctMS43MUw1Ljg2LDE5SDE3VjMwLjE0bC0yLjY5''@;'; put 'put ''LTIuN2ExLDEsMCwwLDAtMS43MS43LDEsMSwwLDAsMCwuMjkuNzFMMTgsMzRsNS4xMS01LjE0YTEsMSwwLDAsMCwwLTEuNDIsMSwxLDAsMCwwLTEuNDEsMEwxOSwzMC4xNFYxOUgzMC4xNGwtMi43LDIuNjlhMSwxLDAsMCwwLC43LDEuNzEsMSwxLDAsMCwwLC43MS0uMjlMMzQsMThaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz4nKSxfLkNsclNoYXBlQ2xvbmU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTYsNkgyMnY0aDJWNmEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNlYyMmEyLDIsMCwwLDAsMiwyaDRWMjJINloiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMCwxMkgxNGEyLDIsMCwwLDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlYxNEEyLDIsMCwwLDAsMzAsMTJabTAsMThIMTRWMTRIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMiIgLz48cG9seWdvbiBwb2ludHM9IjIxIDI4IDIzIDI4IDIzIDIzIDI4IDIzIDI4IDIxIDIzIDIxIDIzIDE2IDIxIDE2IDIxIDIxIDE2IDIxIDE2IDIzIDIxIDIzIDIxIDI4IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz48cGF0''@;'; put 'put ''aCBkPSJNMjQsMTBWNmEyLDIsMCwwLDAtMi0ySDZBMiwyLDAsMCwwLDQsNlYyMmEyLDIsMCwwLDAsMiwyaDRWMTJhMiwyLDAsMCwxLDItMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTMwLDEySDE0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAs''@;'; put 'put ''MCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjE0QTIsMiwwLDAsMCwzMCwxMlpNMjgsMjNIMjN2NUgyMVYyM0gxNlYyMWg1VjE2aDJ2NWg1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxfLkNsclNoYXBlRGV0YWlscz0oMCxnLmNsckljb25TVkcpKCc8cGF0''@;'; put 'put ''aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZabTAsMjJINFY4SDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTksMTRIMjdhMSwxLDAsMCww''@;'; put 'put ''LDAtMkg5YTEsMSwwLDAsMCwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNOSwxOEgyN2ExLDEsMCwwLDAsMC0ySDlhMSwxLDAsMCwwLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxw''@;'; put 'put ''YXRoIGQ9Ik05LDIySDE5YTEsMSwwLDAsMCwwLTJIOWExLDEsMCwwLDAsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiww''@;'; put 'put ''LDAsMCwzMiw2Wk0xOSwyMkg5YTEsMSwwLDAsMSwwLTJIMTlhMSwxLDAsMCwxLDAsMlptOC00SDlhMSwxLDAsMCwxLDAtMkgyN2ExLDEsMCwwLDEsMCwyWm0wLTRIOWExLDEsMCwwLDEsMC0ySDI3YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''IiAvPicpLF8uQ2xyU2hhcGVEcmFnSGFuZGxlQ29ybmVyPSgwLGcuY2xySWNvblNWRykoJzxjaXJjbGUgY3g9IjEyIiBjeT0iMjQiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PGNpcmNsZSBjeD0iMTgiIGN5PSIyNCIgcj0iMS41IiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxjaXJjbGUgY3g9IjI0IiBjeT0iMTIiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PGNpcmNsZSBjeD0iMjQiIGN5PSIyNCIgcj0iMS41IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48Y2lyY2xlIGN4PSIyNCIgY3k9IjE4IiByPSIxLjUiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC02IiAvPicpLF8uQ2xyU2hhcGVFcmFzZXI9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM1LjYyLDEyYTIuODIsMi44MiwwLDAsMC0uODQtMkwyNy40OSwyLjY1YTIuOSwyLjksMCwwLDAtNCwwTDIuODMsMjMuMjhhMi44NCwyLjg0LDAsMCwwLDAsNEw3LjUzLDMy''@;'; put 'put ''SDNhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0ySDE2Ljc0bDE4LTE4QTIuODIsMi44MiwwLDAsMCwzNS42MiwxMlpNMTMuOTEsMzJIMTAuMzZMNC4yNSwyNS44OWEuODQuODQsMCwwLDEsMC0xLjE5bDUuNTEtNS41Miw4LjQ5LDguNDhaTTMzLjM3LDEyLjU0LDE5LjY2LDI2LjI1bC04''@;'; put 'put ''LjQ4LTguNDksMTMuNy0xMy43YS44Ni44NiwwLDAsMSwxLjE5LDBsNy4zLDcuMjlhLjg2Ljg2LDAsMCwxLC4yNS42QS44Mi44MiwwLDAsMSwzMy4zNywxMi41NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOCwzMkgxNS4zM0wxOSwy''@;'; put 'put ''OC4zN2wtOS45LTkuOUwzLjU0LDI0YTEuODMsMS44MywwLDAsMCwwLDIuNkw5LDMySDNhMSwxLDAsMCwwLDAsMkgyOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzQuMDgsMTAuNjVsLTcuMy03LjNhMS44MywxLjgz''@;'; put 'put ''LDAsMCwwLTIuNiwwTDEwLjQ3LDE3LjA2bDkuOSw5LjlMMzQuMDgsMTMuMjVBMS44NSwxLjg1LDAsMCwwLDM0LjA4LDEwLjY1WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxfLkNsclNoYXBlTGFuZHNjYXBlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9''@;'; put 'put ''Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlptMCwyMkg0VjhIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNOSwyMmEuODIuODIsMCwwLDAsLjU1''@;'; put 'put ''LS4yMS44LjgsMCwwLDAsMC0xLjEzTDcuODMsMTguOEgyOC4xN2wtMS43MiwxLjg2YS44LjgsMCwwLDAsMCwxLjEzQS44Mi44MiwwLDAsMCwyNywyMmEuNzguNzgsMCwwLDAsLjU4LS4yNkwzMS4wOSwxOGwtMy40Ny0zLjc0YS43OS43OSwwLDAsMC0xLjEzLDAsLjguOCwwLDAsMCwwLDEuMTNs''@;'; put 'put ''MS43MiwxLjg2SDcuODNsMS43Mi0xLjg2YS44LjgsMCwwLDAsMC0xLjEzLjc5Ljc5LDAsMCwwLTEuMTMsMEw0LjkxLDE4bDMuNDcsMy43NEEuNzguNzgsMCwwLDAsOSwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMiw2SDRBMiwy''@;'; put 'put ''LDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNMjcuNzcsMjEuODhhMSwxLDAsMCwxLS43My4zMiwxLDEsMCwwLDEtLjY4LS4yNywxLDEsMCwwLDEtLjA2LTEuNDFMMjcuNzEsMTlIOC4yOUw5LjcsMjAuNTJhMSwxLDAsMCwxLS4w''@;'; put 'put ''NiwxLjQxQTEsMSwwLDAsMSw5LDIyLjJhMSwxLDAsMCwxLS43My0uMzJMNC42NCwxOGwzLjU5LTMuODhBMSwxLDAsMCwxLDkuNywxNS40OEw4LjI5LDE3SDI3LjcxTDI2LjMsMTUuNDhhMSwxLDAsMCwxLDEuNDctMS4zNkwzMS4zNiwxOFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTEiIC8+JyksXy5DbHJTaGFwZVBhc3RlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwxMkgyNnYyaDR2MmgyVjE0QTIsMiwwLDAsMCwzMCwxMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxyZWN0IHg9IjMwIiB5PSIxOCIgd2lk''@;'; put 'put ''dGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDMwSDI4djJoMmEyLDIsMCwwLDAsMi0yVjI2SDMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI0''@;'; put 'put ''LDIyVjZhMiwyLDAsMCwwLTItMkg2QTIsMiwwLDAsMCw0LDZWMjJhMiwyLDAsMCwwLDIsMkgyMkEyLDIsMCwwLDAsMjQsMjJaTTYsNkgyMlYyMkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+PHJlY3QgeD0iMjAiIHk9IjMwIiB3aWR0aD0iNiIgaGVp''@;'; put 'put ''Z2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMTQsMjZIMTJ2NGEyLDIsMCwwLDAsMiwyaDRWMzBIMTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz48cGF0aCBkPSJNMzAsMTJIMjZ2Mmg0''@;'; put 'put ''djJoMlYxNEEyLDIsMCwwLDAsMzAsMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxyZWN0IHg9IjMwIiB5PSIxOCIgd2lkdGg9IjIiIGhlaWdodD0iNiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz48cGF0aCBkPSJNMzAsMzBI''@;'; put 'put ''Mjh2MmgyYTIsMiwwLDAsMCwyLTJWMjZIMzBaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPjxyZWN0IHg9IjQiIHk9IjQiIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgcng9IjIiIHJ5PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAv''@;'; put 'put ''PjxyZWN0IHg9IjIwIiB5PSIzMCIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz48cGF0aCBkPSJNMTQsMjZIMTJ2NGEyLDIsMCwwLDAsMiwyaDRWMzBIMTRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02''@;'; put 'put ''IiAvPicpLF8uQ2xyU2hhcGVQb3J0cmFpdD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUuMzQsMjYuNDVhLjguOCwwLDAsMC0xLjEzLDAsLjc5Ljc5LDAsMCwwLDAsMS4xM0wxOCwzMS4wOWwzLjc0LTMuNDdhLjc5Ljc5LDAsMCwwLC4wNS0xLjEzLjguOCwwLDAsMC0xLjEzLDBMMTgu''@;'; put 'put ''OCwyOC4xN1Y3LjgzbDEuODYsMS43MmEuOC44LDAsMSwwLDEuMDgtMS4xN0wxOCw0LjkxLDE0LjI2LDguMzhhLjc5Ljc5LDAsMCwwLDAsMS4xMy44LjgsMCwwLDAsMS4xMywwTDE3LjIsNy44M1YyOC4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxw''@;'; put 'put ''YXRoIGQ9Ik0yOCwySDhBMiwyLDAsMCwwLDYsNFYzMmEyLDIsMCwwLDAsMiwySDI4YTIsMiwwLDAsMCwyLTJWNEEyLDIsMCwwLDAsMjgsMlptMCwzMEg4VjRIMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjgsMkg4QTIsMiwwLDAs''@;'; put 'put ''MCw2LDRWMzJhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjRBMiwyLDAsMCwwLDI4LDJaTTIwLjUyLDI2LjNhMSwxLDAsMCwxLDEuMzYsMS40N0wxOCwzMS4zNmwtMy44OC0zLjU5YTEsMSwwLDAsMSwxLjM2LTEuNDdMMTcsMjcuNzFWOC4yOUwxNS40OCw5LjdhMSwxLDAsMCwxLTEu''@;'; put 'put ''MzYtMS40N0wxOCw0LjY0bDMuODgsMy41OWExLDEsMCwwLDEsLjA1LDEuNDEsMSwxLDAsMCwxLS43My4zMiwxLDEsMCwwLDEtLjY4LS4yNkwxOSw4LjI5VjI3LjcxWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxfLkNsclNoYXBlVHJlZVZpZXc9KDAsZy5j''@;'; 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+JyksXy5DbHJTaGFwZUN1cnNvckhhbmRHcmFiPSgwLGcuY2xy''@;'; put 'put ''SWNvblNWRykoJzxwYXRoIGQ9Ik0yOC4wOSw5Ljc0YTQsNCwwLDAsMC0xLjE2LjE5Yy0uMTktMS4yNC0xLjU1LTIuMTgtMy4yNy0yLjE4QTQsNCwwLDAsMCwyMi4xMyw4LDMuMzcsMy4zNywwLDAsMCwxOSw2LjNhMy40NSwzLjQ1LDAsMCwwLTIuODcsMS4zMiwzLjY1LDMuNjUsMCwwLDAtMS44''@;'; put 'put ''OS0uNTFBMy4wNSwzLjA1LDAsMCwwLDExLDkuODl2LjkxYy0xLjA2LjQtNC4xMSwxLjgtNC45MSw0Ljg0cy4zNCw4LDIuNjksMTEuNzhhMjUuMjEsMjUuMjEsMCwwLDAsNS45LDYuNDEuOS45LDAsMCwwLC41My4xN0gyNS41NWEuOTIuOTIsMCwwLDAsLjU1LS4xOSwxMy4xMywxMy4xMywwLDAs''@;'; put 'put ''MCwzLjc1LTYuMTNBMjUuOCwyNS44LDAsMCwwLDMxLjQxLDE4di01LjVBMy4wOCwzLjA4LDAsMCwwLDI4LjA5LDkuNzRaTTI5LjYxLDE4YTI0LDI0LDAsMCwxLTEuNDcsOS4xNUExMi40NiwxMi40NiwwLDAsMSwyNS4yLDMyLjJIMTUuNDdhMjMuNzUsMjMuNzUsMCwwLDEtNS4yLTUuNzJjLTIu''@;'; put 'put ''MzctMy44Ni0zLTguMjMtMi40OC0xMC4zOUE1LjcsNS43LDAsMCwxLDExLDEyLjc2djcuNjVhLjkuOSwwLDAsMCwxLjgsMFY5Ljg5YzAtLjQ3LjU5LTEsMS40Ni0xczEuNDkuNTIsMS40OSwxdjUuNzJoMS44VjguODFjMC0uMjguNTgtLjcxLDEuNDYtLjcxczEuNTMuNDgsMS41My43NXY2Ljg5''@;'; put 'put ''aDEuOFYxMGwuMTctLjEyYTIuMSwyLjEsMCwwLDEsMS4xOC0uMzJjLjkzLDAsMS41LjQ0LDEuNS42OGwwLDYuNUgyN1YxMS44N2ExLjkxLDEuOTEsMCwwLDEsMS4xMi0uMzNjLjg2LDAsMS41Mi41MSwxLjUyLjk0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''IC8+JyksXy5DbHJTaGFwZUN1cnNvckhhbmRPcGVuPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMS40Niw4LjU3QTMuMTEsMy4xMSwwLDAsMCwyNyw1Ljc1YTMuMTksMy4xOSwwLDAsMC00LjY2LTIuNjQsMy4yOSwzLjI5LDAsMCwwLTYuNDItLjc2LDMuMjMsMy4yMywwLDAsMC0xLjY2''@;'; put 'put ''LS40NkEzLjI3LDMuMjcsMCwwLDAsMTEsNS4xOFYxNy44NGMtMS4yOC0xLjYtMi41My0zLjE4LTIuNzItMy40NUEzLjE5LDMuMTksMCwwLDAsNS41NiwxMi45YTMuMzcsMy4zNywwLDAsMC0zLjQ3LDMuNDhDMi4xOCwxOC4xOCw1LjY2LDI0LjU0LDgsMjhjMy41NCw1LjI0LDYuOTIsNiw3LjA3''@;'; put 'put ''LDZsLjE4LDBIMjUuNTlhLjkyLjkyLDAsMCwwLC41NS0uMTksMTMuMTMsMTMuMTMsMCwwLDAsMy43NS02LjEzYzEtMy4wOSwxLjUzLTcuNTMsMS41OC0xMy41NlpNMjguMTgsMjcuMTJhMTIuNDYsMTIuNDYsMCwwLDEtMi45NCw1LjA4SDE1LjMzYy0uNDctLjE0LTMuMDctMS4xLTUuODctNS4y''@;'; put 'put ''NVMzLjk0LDE3LjI3LDMuODksMTYuMjlhMS41LDEuNSwwLDAsMSwuNDUtMS4xMywxLjUyLDEuNTIsMCwwLDEsMS4xNC0uNDYsMS40MywxLjQzLDAsMCwxLDEuMzIuNzFjLjI5LjQzLDIuMzYsMywzLjU3LDQuNTNMMTIuOCwxOC4zVjUuMThhMS40OCwxLjQ4LDAsMSwxLDIuOTUsMFYxNi4zMmgx''@;'; put 'put ''Ljh2LTEzYTEuNTEsMS41MSwwLDAsMSwzLDBWMTYuNDVoMS44VjZhMS40MywxLjQzLDAsMSwxLDIuODUsMFYxNy40NEgyN1Y4LjU0YTEuMzMsMS4zMywwLDAsMSwyLjY1LDB2NS41NUMyOS42MiwyMCwyOS4xNCwyNC4yMSwyOC4xOCwyNy4xMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0xIiAvPicpLF8uQ2xyU2hhcGVGaWxlWmlwPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwzMC4yVjEybC04LjEtNy45SDcuOEM2LjgsNC4xLDYsNC45LDYsNmMwLDAsMCwwLDAsMHYyNC4yYzAsMSwwLjcsMS44LDEuNywxLjhjMCwwLDAuMSwwLDAuMSwwaDIw''@;'; 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 ''MTVWOGgyLjJjMC42LDAsMSwwLjQsMSwxcy0wLjQsMS0xLDFIMTV2MkgxNy4yeiBNMjEuOSwxMlY2LjVsNS43LDUuNUgyMS45eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxfLkNsclNoYXBlRmlsdGVyT2ZmPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9''@;'; put 'put ''Ik0zNCw2LjRDMzQsNS42LDMzLjMsNSwzMi41LDVIMTAuM2wyLDJIMzJ2MC42bC05LjYsOS42bDEuNCwxLjRMMzMuNCw5QzMzLjgsOC42LDM0LDguMSwzNCw3LjZWNi41QzM0LDYuNSwzNCw2LjQsMzQsNi40eiJcblx0XHQgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEiIC8+PHBhdGggZD0iTTIuNywzbDIsMmgtMUMyLjksNC45LDIuMSw1LjUsMiw2LjN2MS4xYzAsMC41LDAuMiwxLDAuNiwxLjRMMTQsMjAuMnYxMC4zbDEuOSwwLjhWMTkuNEw0LDcuNVY3aDIuN0wyMCwyMC4zdjEyLjlsMiwwLjhcblx0XHRjMCwwLDAsMCwwLTAuMVYyMi4zbDEwLjEsMTAu''@;'; put 'put ''MWwxLjQtMS40TDQuMSwxLjZMMi43LDN6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjMuOSwxOC42TDEwLjMsNS4xaDIyLjJDMzMuMyw1LDM0LDUuNiwzNCw2LjRjMCwwLDAsMCwwLDAuMXYxLjFjMCwwLjUtMC4yLDEtMC42LDEuNEwy''@;'; put 'put ''My45LDE4LjZ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMy41LDMxTDQuMSwxLjZMMi42LDNsMi4xLDIuMUgzLjVDMi43LDUsMiw1LjYsMiw2LjRjMCwwLDAsMCwwLDAuMXYxLjFjMCwwLjUsMC4yLDEsMC42LDEuNEwxNCwyMC41djEwLjFs''@;'; put 'put ''OCwzLjRWMjIuNFxuXHRsMTAuMSwxMC4xTDMzLjUsMzF6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLF8uQ2xyU2hhcGVSZWN5Y2xlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LjQsMTcuNGMwLjIsMC4xLDAuMywwLjEsMC41LDAuMWMwLjIsMCww''@;'; 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 ''LjMtMy42YzAuMy0wLjIsMC40LTAuNCwwLjQtMC44XG5cdFx0QzIyLjEsMjguOCwyMS45LDI4LjUsMjEuNywyOC40eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxfLkNsclNoYXBlVHJlZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuNiwxMS43''@;'; put 'put ''QzI5LjIsNS44LDI0LDEuNywxOCwxLjdjLTcuMiwwLTEzLDUuOC0xMywxM2MwLDYuOCw1LjMsMTIuNCwxMiwxMi45djVjMCwwLjYsMC40LDEsMSwxczEtMC40LDEtMXYtNXYtMlYyMlxuXHRjMCwwLDAsMCwwLTAuMXYtMy42bDQuNy00LjdjMC40LTAuNCwwLjQtMSwwLTEuNGMtMC40LTAuNC0x''@;'; put 'put ''LTAuNC0xLjQsMEwxOSwxNS42di0zbC0zLjMtMy4zYy0wLjQtMC40LTEtMC40LTEuNCwwXG5cdGMtMC40LDAuNC0wLjQsMSwwLDEuNGwyLjcsMi43djYuMmwtMy44LTMuOGMtMC40LTAuNC0xLTAuNC0xLjQsMGMtMC40LDAuNC0wLjQsMSwwLDEuNGw1LjIsNS4ydjMuMmMtNS42LTAuNS0xMC01''@;'; put 'put ''LjItMTAtMTAuOVxuXHRjMC02LjEsNC45LTExLDExLTExczExLDQuOSwxMSwxMWMwLDQuOS0zLjMsOS4yLTgsMTAuNnYyLjFDMjgsMjUuNywzMi4zLDE4LjcsMzAuNiwxMS43eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LDJDMTAu''@;'; put 'put ''OCwxLjcsNC44LDcuMyw0LjUsMTQuNUM0LjIsMjEuNyw5LjgsMjcuNywxNywyOHYtNS4ybC01LjItNS4yYy0wLjQtMC40LTAuNC0xLDAtMS40YzAuNC0wLjQsMS0wLjQsMS40LDBcblx0YzAsMCwwLDAsMCwwbDMuOCwzLjh2LTYuMmwtMi43LTIuN2MtMC40LTAuNC0wLjQtMSwwLTEuNGMwLjQt''@;'; put 'put ''MC40LDEtMC40LDEuNCwwYzAsMCwwLDAsMCwwbDMuMywzLjN2M2wzLjMtMy4zYzAuNC0wLjQsMS0wLjQsMS40LDBcblx0YzAsMCwwLDAsMCwwYzAuNCwwLjQsMC40LDEsMCwxLjRMMTksMTguOFYyOGM3LjItMC4zLDEyLjgtNi4zLDEyLjUtMTMuNVMyNS4yLDEuNywxOCwyeiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMTgsMjhjLTAuMywwLTAuNiwwLTEsMHY1YzAsMC42LDAuNCwxLDEsMXMxLTAuNCwxLTF2LTVDMTguNywyOCwxOC4zLDI4LDE4LDI4eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxf''@;'; put 'put ''LkNsclNoYXBlRmlzaD0oMCxnLmNsckljb25TVkcpKCc8Y2lyY2xlIGN4PSIxMS40OSIgY3k9IjE3LjUiIHI9IjEuNSIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMzLjQ4LDkuMjlhMSwxLDAsMCwwLTEsMGMtMy4zNywyLTUuOTEsNS44''@;'; put 'put ''MS02LjksNy40NUwyNC44NSwxOHMtMSwxLjYyLTEsMS42MmMtMS43NiwyLjQ5LTUuMSw2LjM2LTguNzksNi4zNi00LjY1LDAtOC43NS02LjE1LTkuODQtNy45NCwxLjA5LTEuNzksNS4xOC03Ljk0LDkuODQtNy45NCwzLjU0LDAsNi43NywzLjU4LDguNTgsNi4wN2wuMjgtLjQ4cy4zNi0uNTEu''@;'; put 'put ''OTMtMS4yNUMyMi43MiwxMS42NCwxOS4xOCw4LjA2LDE1LDguMDZjLTYuNTksMC0xMS42Nyw5LjA3LTExLjg4LDkuNDZMMi44OSwxOGwuMjcuNDhjLjIxLjM5LDUuMjksOS40NiwxMS44OCw5LjQ2LDUuMDYsMCw5LjIyLTUuMzQsMTEtOEMyNiwyMCwyNy4xOCwxOCwyNy4xOCwxOGgwbC4wNy0u''@;'; put 'put ''MTFhMTguMDYsMTguMDYsMCwwLDEsMS44OC0yLjc1czAsMCwwLDBhMjAuMzEsMjAuMzEsMCwwLDEsMi44Ni0zVjIzLjg4YTIwLjkzLDIwLjkzLDAsMCwxLTMuNjEtNGwtLjE2LjI2aDBsLTEsMS41OWExOC43NCwxOC43NCwwLDAsMCw1LjIxLDQuOTUsMSwxLDAsMCwwLC41LjE0LDEuMTMsMS4x''@;'; put 'put ''MywwLDAsMCwuNS0uMTMsMSwxLDAsMCwwLC41LS44N1YxMC4xNkExLDEsMCwwLDAsMzMuNDgsOS4yOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLF8uQ2xyU2hhcGVGb3JtPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMSwxMkg3YTEsMSww''@;'; put 'put ''LDAsMS0xLTFWN0ExLDEsMCwwLDEsNyw2SDIxYTEsMSwwLDAsMSwxLDF2NEExLDEsMCwwLDEsMjEsMTJaTTgsMTBIMjBWNy45NEg4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTIxLDE0LjA4SDdhMSwxLDAsMCwwLTEsMVYxOWExLDEs''@;'; put 'put ''MCwwLDAsMSwxSDE4LjM2TDIyLDE2LjNWMTUuMDhBMSwxLDAsMCwwLDIxLDE0LjA4Wk0yMCwxOEg4VjE2SDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTExLjA2LDMxLjUxdi0uMDZsLjMyLTEuMzlINFY0aDIwVjE0LjI1TDI2LDEy''@;'; put 'put ''LjM2VjNhMSwxLDAsMCwwLTEtMUgzQTEsMSwwLDAsMCwyLDNWMzFhMSwxLDAsMCwwLDEsMWg4QTMuNDQsMy40NCwwLDAsMSwxMS4wNiwzMS41MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yMiwxOS4xN2wtLjc4Ljc5QTEsMSwwLDAs''@;'; put 'put ''MCwyMiwxOS4xN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik02LDI2Ljk0YTEsMSwwLDAsMCwxLDFoNC44NGwuMy0xLjMuMTMtLjU1LDAtLjA1SDhWMjRoNi4zNGwyLTJIN2ExLDEsMCwwLDAtMSwxWiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLjQ5LDE2LjY3LDMwLjEyLDEzLjNhMS42MSwxLjYxLDAsMCwwLTIuMjgsMGgwTDE0LjEzLDI3LjA5LDEzLDMxLjlhMS42MSwxLjYxLDAsMCwwLDEuMjYsMS45LDEuNTUsMS41NSwwLDAsMCwuMzEsMCwxLjE1LDEuMTUsMCww''@;'; put 'put ''LDAsLjM3LDBsNC44NS0xLjA3TDMzLjQ5LDE5YTEuNiwxLjYsMCwwLDAsMC0yLjI3Wk0xOC43NywzMC45MWwtMy42Ni44MUwxNiwyOC4wOSwyNi4yOCwxNy43bDIuODIsMi44MlpNMzAuMjMsMTkuMzlsLTIuODItMi44MkwyOSwxNWwyLjg0LDIuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxfLkNsclNoYXBlRnVlbD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAuMTIsMzRINS45QTIuODEsMi44MSwwLDAsMSwzLDMxLjE5VjQuODZBMi45LDIuOSwwLDAsMSw2LDIuMDdIMjAuMjJBMi43MiwyLjcyLDAsMCwxLDIzLDQuODZWMzEu''@;'; put 'put ''MTlBMi44MiwyLjgyLDAsMCwxLDIwLjEyLDM0Wk01LjksNEEuODcuODcsMCwwLDAsNSw0Ljg2VjMxLjE5YS44Ny44NywwLDAsMCwuODcuODdIMjAuMTJhLjk0Ljk0LDAsMCwwLC45NS0uODdWNC44NkEuOTQuOTQsMCwwLDAsMjAuMTIsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yOS41MywzNEEzLjUsMy41LDAsMCwxLDI2LDMwLjVWMjNhMiwyLDAsMCwwLTItMkgyMi41N2ExLDEsMCwwLDEsMC0ySDI0YTQsNCwwLDAsMSw0LDRWMzAuNWExLjUsMS41LDAsMCwwLDMsMFYxNy4zbC0zLjEzLTdBMi4yOSwyLjI5LDAsMCwwLDI1''@;'; put 'put ''LjgsOWgtLjczYTEsMSwwLDEsMSwwLTJoLjczYTQuMyw0LjMsMCwwLDEsMy45MywyLjU1bDMuMjEsNy4xNmExLDEsMCwwLDEsLjA5LjQxVjMwLjVBMy41LDMuNSwwLDAsMSwyOS41MywzNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0x''@;'; put 'put ''OCw5SDhBMSwxLDAsMSwxLDgsN0gxOGExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE4LDEzSDhBMSwxLDAsMSwxLDgsMTFIMThBMSwxLDAsMSwxLDE4LDEzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTQiIC8+PHBhdGggZD0iTTI1LDEyLjA4YTEsMSwwLDAsMS0xLTF2LTZhMSwxLDAsMCwxLDIsMHY2QTEsMSwwLDAsMSwyNSwxMi4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPicpLF8uQ2xyU2hhcGVTbm93Zmxha2U9KDAsZy5j''@;'; 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 ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtOSIgLz4nKSxfLkNsclNoYXBlVGFibGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTgsMzRhMSwxLDAsMCwxLTEtMVYyLjkyYTEsMSwwLDAsMSwyLDBWMzNBMSwxLDAsMCwxLDgsMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMTcsMzMuOTJhMSwxLDAsMCwxLTEtMVY5LjFhMSwxLDAsMSwxLDIsMFYzMi45MkExLDEsMCwwLDEsMTcsMzMuOTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjYsMzRhMSwxLDAsMCwxLTEt''@;'; put 'put ''MVY5YTEsMSwwLDAsMSwyLDBWMzNBMSwxLDAsMCwxLDI2LDM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMzLjExLDE4aC0yNWExLDEsMCwxLDEsMC0yaDI1YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzMuMSwyNi45NEg4LjFBMSwxLDAsMSwxLDguMSwyNWgyNWExLDEsMCwxLDEsMCwxLjkyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMzLDguOTJIM0ExLDEsMCwxLDEsMyw3SDMz''@;'; put 'put ''YTEsMSwwLDEsMSwwLDEuOTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxfLkNsclNoYXBlVm9sdW1lPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNS44OCwzMkgxMmE0LDQsMCwwLDEtNC00VjExLjQ2TDIuMzEsNS43N2ExLDEsMCwwLDEt''@;'; put 'put ''LjIyLTEuMDlBMSwxLDAsMCwxLDMsNC4wNkgyOC44NmExLDEsMCwwLDEsMSwxVjI4QTQsNCwwLDAsMSwyNS44OCwzMlpNNS40Myw2bDQuMjgsNC4zNGEuNzUuNzUsMCwwLDEsLjIxLjYzdjE3QTIuMTMsMi4xMywwLDAsMCwxMiwzMEgyNS44OEEyLjEsMi4xLDAsMCwwLDI4LDI4VjZaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsMTZhMSwxLDAsMCwxLTEtMVY2SDI4Ljg2YS45Mi45MiwwLDAsMS0xLS45LDEsMSwwLDAsMSwxLTFIMzNhMSwxLDAsMCwxLDEsMVYxNUExLDEsMCwwLDEsMzMsMTZaIiBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjQsMTFIMThhMSwxLDAsMSwxLDAtMkgyNGExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTI0LDE1SDIxYTEsMSwwLDEsMSwwLTJIMjRhMSwx''@;'; put 'put ''LDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0yNCwxOUgxOGExLDEsMCwxLDEsMC0ySDI0YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJN''@;'; put 'put ''MjQsMjdIMThhMSwxLDAsMSwxLDAtMkgyNGExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI0LDIzSDIxQTEsMSwwLDEsMSwyMSwyMUgyNEExLDEsMCwxLDEsMjQsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNyIgLz4nKSxfLkNsclNoYXBlQ3Jvc3NoYWlycz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMjlBMTEsMTEsMCwxLDEsMjksMTgsMTEsMTEsMCwwLDEsMTgsMjlaTTE4LDlhOSw5LDAsMSwwLDksOUE5LDksMCwwLDAsMTgsOVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwyM2E1LDUsMCwxLDEsNS01QTUsNSwwLDAsMSwxOCwyM1ptMC04YTMsMywwLDEsMCwzLDNBMywzLDAsMCwwLDE4LDE1WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBh''@;'; put 'put ''dGggZD0iTTE4LDlhMSwxLDAsMCwxLTEtMVYyLjhhMSwxLDAsMCwxLDIsMFY4QTEsMSwwLDAsMSwxOCw5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE4LDM0YTEsMSwwLDAsMS0xLTFWMjhhMSwxLDAsMCwxLDIsMHY1QTEsMSwwLDAs''@;'; put 'put ''MSwxOCwzNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik04LDE5SDMuMTdhMSwxLDAsMCwxLDAtMkg4YTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzMu''@;'; put 'put ''MSwxOUgyOGExLDEsMCwwLDEsMC0yaDUuMWExLDEsMCwwLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+JyksXy5DbHJTaGFwZUNpcmNsZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYs''@;'; put 'put ''MCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwzNEExNiwxNiwwLDEsMSwzNCwxOCwxNiwxNiwwLDAsMSwxOCwzNFoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksXy5DbHJTaGFwZURvdENpcmNsZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTgsMTFhNyw3LDAsMSwxLTcsNyw3LDcsMCwwLDEsNy03IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0''@;'; put 'put ''aCBkPSJNMTgsMzRBMTYsMTYsMCwxLDEsMzQsMTgsMTYsMTYsMCwwLDEsMTgsMzRaTTE4LDRBMTQsMTQsMCwxLDAsMzIsMTgsMTQsMTQsMCwwLDAsMTgsNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLF8uQ2xyU2hhcGVCZXRhPSgwLGcuY2xySWNv''@;'; 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+XG4nKSxfLkNsclNoYXBlRmlyc3RBaWQ9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMiw2SDIzLjkxVjQuNUEyLjUsMi41LDAsMCwwLDIxLjQxLDJoLTdhMi41LDIuNSwwLDAsMC0yLjUsMi41VjZI''@;'; put 'put ''NEEyLDIsMCwwLDAsMiw4VjI4YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlY4QTIsMiwwLDAsMCwzMiw2Wk0xMy45MSw0LjVhLjUuNSwwLDAsMSwuNS0uNWg3YS41LjUsMCwwLDEsLjUuNVY2aC04Wk00LDI4VjhIMzJWMjhaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMjAuMTUsMjUuMkgxNi43NGExLjMsMS4zLDAsMCwxLTEuMy0xLjNWMjEuMmgtMi43YTEuMywxLjMsMCwwLDEtMS4zLTEuM1YxNi41YTEuMywxLjMsMCwwLDEsMS4zLTEuM2gyLjdWMTIuNWExLjMsMS4zLDAsMCwxLDEuMy0xLjNoMy40MWExLjMs''@;'; put 'put ''MS4zLDAsMCwxLDEuMjksMS4zdjIuN2gyLjcxYTEuMywxLjMsMCwwLDEsMS4yOSwxLjN2My40YTEuMywxLjMsMCwwLDEtMS4yOSwxLjNIMjEuNDR2Mi43QTEuMywxLjMsMCwwLDEsMjAuMTUsMjUuMlpNMTcsMjMuNmgyLjgxdi00aDRWMTYuOGgtNHYtNEgxN3Y0SDEzdjIuOGg0Wm03LjExLTYu''@;'; put 'put ''OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG5cbiAgPHBhdGggZD0iTTMyLDZIMjMuOTFWNC41QTIuNSwyLjUsMCwwLDAsMjEuNDEsMmgtN2EyLjUsMi41LDAsMCwwLTIuNSwyLjVWNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEy''@;'; put 'put ''LDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZaTTEzLjkxLDQuNWEuNS41LDAsMCwxLC41LS41aDdhLjUuNSwwLDAsMSwuNS41VjZoLThaTTI0LjY0LDE5LjlhLjUuNSwwLDAsMS0uNS41aC0zLjV2My41YS41LjUsMCwwLDEtLjUuNWgtMy40YS41LjUsMCwwLDEtLjUtLjVWMjAuNGgtMy41''@;'; put 'put ''YS41LjUsMCwwLDEtLjUtLjVWMTYuNWEuNS41LDAsMCwxLC41LS41aDMuNVYxMi41YS41LjUsMCwwLDEsLjUtLjVoMy40YS41LjUsMCwwLDEsLjUuNVYxNmgzLjVhLjUuNSwwLDAsMSwuNS41WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAnKSxfLkNsclNo''@;'; 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 ''MCwxLTIuNTYtMS41LDIuNDksMi40OSwwLDAsMS0uMDctMiwzLjIsMy4yLDAsMCwxLDEuNjktMS43NiwzLDMsMCwwLDEsNCwxLjJBMi41NCwyLjU0LDAsMCwxLDI1Ljc5LDIwWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLF8uRXNzZW50aWFsU2hhcGVzPXsi''@;'; put 'put ''YWRkLXRleHQiOl8uQ2xyU2hhcGVBZGRUZXh0LCJhbGFybS1vZmYiOl8uQ2xyU2hhcGVBbGFybU9mZixwaW5ib2FyZDpfLkNsclNoYXBlUGluYm9hcmQsbmV3Ol8uQ2xyU2hhcGVOZXcsImJ1YmJsZS1leGNsYW1hdGlvbiI6Xy5DbHJTaGFwZUJ1YmJsZUV4Y2xhbWF0aW9uLCJncmlkLXZpZXci''@;'; put 'put ''Ol8uQ2xyU2hhcGVHcmlkVmlldywiY3Vyc29yLWFycm93IjpfLkNsclNoYXBlQ3Vyc29yQXJyb3csImN1cnNvci1oYW5kIjpfLkNsclNoYXBlQ3Vyc29ySGFuZCwiY3Vyc29yLWhhbmQtY2xpY2siOl8uQ2xyU2hhcGVDdXJzb3JIYW5kQ2xpY2ssImN1cnNvci1oYW5kLWdyYWIiOl8uQ2xyU2hh''@;'; put 'put ''cGVDdXJzb3JIYW5kR3JhYiwiY3Vyc29yLWhhbmQtb3BlbiI6Xy5DbHJTaGFwZUN1cnNvckhhbmRPcGVuLCJjdXJzb3ItbW92ZSI6Xy5DbHJTaGFwZUN1cnNvck1vdmUsImZpcnN0LWFpZCI6Xy5DbHJTaGFwZUZpcnN0QWlkLHJlc2l6ZTpfLkNsclNoYXBlUmVzaXplLG9iamVjdHM6Xy5DbHJT''@;'; put 'put ''aGFwZU9iamVjdHMsYm9vazpfLkNsclNoYXBlQm9vayxhc3RlcmlzazpfLkNsclNoYXBlQXN0ZXJpc2ssYnVnOl8uQ2xyU2hhcGVCdWcsc2Npc3NvcnM6Xy5DbHJTaGFwZVNjaXNzb3JzLHRoZXJtb21ldGVyOl8uQ2xyU2hhcGVUaGVybW9tZXRlcixwZW5jaWw6Xy5DbHJTaGFwZVBlbmNpbCxu''@;'; put 'put ''b3RlOl8uQ2xyU2hhcGVOb3RlLHJlZnJlc2g6Xy5DbHJTaGFwZVJlZnJlc2gsc3luYzpfLkNsclNoYXBlU3luYywidmlldy1saXN0IjpfLkNsclNoYXBlVmlld0xpc3QsInZpZXctY2FyZHMiOl8uQ2xyU2hhcGVWaWV3Q2FyZHMsInRyZWUtdmlldyI6Xy5DbHJTaGFwZVRyZWVWaWV3LGxpZ2h0''@;'; put 'put ''YnVsYjpfLkNsclNoYXBlTGlnaHRidWxiLGRvd25sb2FkOl8uQ2xyU2hhcGVEb3dubG9hZCx1cGxvYWQ6Xy5DbHJTaGFwZVVwbG9hZCxsb2NrOl8uQ2xyU2hhcGVMb2NrLHVubG9jazpfLkNsclNoYXBlVW5sb2NrLHVzZXJzOl8uQ2xyU2hhcGVVc2VycywicG9wLW91dCI6Xy5DbHJTaGFwZVBv''@;'; put 'put ''cE91dCxmaWx0ZXI6Xy5DbHJTaGFwZUZpbHRlcixwaW46Xy5DbHJTaGFwZVBpbixmaWxlOl8uQ2xyU2hhcGVGaWxlLHBsdXM6Xy5DbHJTaGFwZVBsdXMsbWludXM6Xy5DbHJTaGFwZU1pbnVzLCJtaW51cy1jaXJjbGUiOl8uQ2xyU2hhcGVNaW51c0NpcmNsZSwicGx1cy1jaXJjbGUiOl8uQ2xy''@;'; put 'put ''U2hhcGVQbHVzQ2lyY2xlLGJhbjpfLkNsclNoYXBlQmFuLCJ0aW1lcy1jaXJjbGUiOl8uQ2xyU2hhcGVUaW1lc0NpcmNsZSx0cmFzaDpfLkNsclNoYXBlVHJhc2gsY2lyY2xlOl8uQ2xyU2hhcGVDaXJjbGUsdGFnOl8uQ2xyU2hhcGVUYWcsdGFnczpfLkNsclNoYXBlVGFncyxoaXN0b3J5Ol8u''@;'; put 'put ''Q2xyU2hhcGVIaXN0b3J5LGNsb2NrOl8uQ2xyU2hhcGVDbG9jaywiYWxhcm0tY2xvY2siOl8uQ2xyU2hhcGVBbGFybUNsb2NrLGFycm93OkIuQ2xyU2hhcGVBcnJvdywiY2lyY2xlLWFycm93IjpfLkNsclNoYXBlQ2lyY2xlQXJyb3csImNoaWxkLWFycm93IjpfLkNsclNoYXBlQ2hpbGRBcnJv''@;'; put 'put ''dyxjb3B5Ol8uQ2xyU2hhcGVDb3B5LGhlbHA6Xy5DbHJTaGFwZUhlbHAsbG9naW46Xy5DbHJTaGFwZUxvZ2luLGxvZ291dDpfLkNsclNoYXBlTG9nb3V0LHByaW50ZXI6Xy5DbHJTaGFwZVByaW50ZXIsd29ybGQ6Xy5DbHJTaGFwZVdvcmxkLHNsaWRlcjpfLkNsclNoYXBlU2xpZGVyLGNsaXBi''@;'; put 'put ''b2FyZDpfLkNsclNoYXBlQ2xpcGJvYXJkLGZpcmV3YWxsOl8uQ2xyU2hhcGVGaXJld2FsbCxsaXN0Ol8uQ2xyU2hhcGVMaXN0LHJlZG86Xy5DbHJTaGFwZVJlZG8sdW5kbzpfLkNsclNoYXBlVW5kbyxzY3JvbGw6Xy5DbHJTaGFwZVNjcm9sbCwiZmlsZS1zZXR0aW5ncyI6Xy5DbHJTaGFwZUZp''@;'; put 'put ''bGVTZXR0aW5ncywidHdvLXdheS1hcnJvd3MiOl8uQ2xyU2hhcGVUd29XYXlBcnJvd3Msc3dpdGNoOl8uQ2xyU2hhcGVTd2l0Y2gsdG9vbHM6Xy5DbHJTaGFwZVRvb2xzLCJ3aW5kb3ctY2xvc2UiOl8uQ2xyU2hhcGVXaW5kb3dDbG9zZSwid2luZG93LW1heCI6Xy5DbHJTaGFwZVdpbmRvd01h''@;'; put 'put ''eCwid2luZG93LW1pbiI6Xy5DbHJTaGFwZVdpbmRvd01pbiwid2luZG93LXJlc3RvcmUiOl8uQ2xyU2hhcGVXaW5kb3dSZXN0b3JlLCJ6b29tLWluIjpfLkNsclNoYXBlWm9vbUluLCJ6b29tLW91dCI6Xy5DbHJTaGFwZVpvb21PdXQsa2V5Ol8uQ2xyU2hhcGVLZXksbGlicmFyeTpfLkNsclNo''@;'; put 'put ''YXBlTGlicmFyeSxib2x0Ol8uQ2xyU2hhcGVCb2x0LHdyZW5jaDpfLkNsclNoYXBlV3JlbmNoLGJ1bGxzZXllOl8uQ2xyU2hhcGVCdWxsc2V5ZSx0YXJnZXQ6Xy5DbHJTaGFwZVRhcmdldCxmbGFtZTpfLkNsclNoYXBlRmxhbWUsaG91cmdsYXNzOl8uQ2xyU2hhcGVIb3VyZ2xhc3MsIm5vLWFj''@;'; put 'put ''Y2VzcyI6Xy5DbHJTaGFwZU5vQWNjZXNzLG9yZ2FuaXphdGlvbjpfLkNsclNoYXBlT3JnYW5pemF0aW9uLGJhbGFuY2U6Xy5DbHJTaGFwZUJhbGFuY2UsImlkLWJhZGdlIjpfLkNsclNoYXBlSWRCYWRnZSxyZXBlYXQ6Xy5DbHJTaGFwZVJlcGVhdCwiZmlsZS1ncm91cCI6Xy5DbHJTaGFwZUZp''@;'; put 'put ''bGVHcm91cCxwYXBlcmNsaXA6Xy5DbHJTaGFwZVBhcGVyY2xpcCxzaHJpbms6Xy5DbHJTaGFwZVNocmluaywiYWNjZXNzaWJpbGl0eS0xIjpfLkNsclNoYXBlQWNjZXNzaWJpbGl0eTEsImFjY2Vzc2liaWxpdHktMiI6Xy5DbHJTaGFwZUFjY2Vzc2liaWxpdHkyLCJzb3J0LWJ5IjpfLkNsclNo''@;'; put 'put ''YXBlU29ydEJ5LCJjb2xsYXBzZS1jYXJkIjpfLkNsclNoYXBlQ29sbGFwc2VDYXJkLCJleHBhbmQtY2FyZCI6Xy5DbHJTaGFwZUV4cGFuZENhcmQsYnJpZWZjYXNlOl8uQ2xyU2hhcGVCcmllZmNhc2UsImNvbG9yLXBpY2tlciI6Xy5DbHJTaGFwZUNvbG9yUGlja2VyLCJjb3B5LXRvLWNsaXBi''@;'; put 'put ''b2FyZCI6Xy5DbHJTaGFwZUNvcHlUb0NsaXBib2FyZCwiZmlsdGVyLTIiOl8uQ2xyU2hhcGVGaWx0ZXIyLCJkcmFnLWhhbmRsZSI6Xy5DbHJTaGFwZURyYWdIYW5kbGUsbW9vbjpfLkNsclNoYXBlTW9vbixzdW46Xy5DbHJTaGFwZVN1bix3YW5kOl8uQ2xyU2hhcGVXYW5kLGNsb25lOl8uQ2xy''@;'; put 'put ''U2hhcGVDbG9uZSxkZXRhaWxzOl8uQ2xyU2hhcGVEZXRhaWxzLCJkcmFnLWhhbmRsZS1jb3JuZXIiOl8uQ2xyU2hhcGVEcmFnSGFuZGxlQ29ybmVyLGVyYXNlcjpfLkNsclNoYXBlRXJhc2VyLGxhbmRzY2FwZTpfLkNsclNoYXBlTGFuZHNjYXBlLHBhc3RlOl8uQ2xyU2hhcGVQYXN0ZSxwb3J0''@;'; put 'put ''cmFpdDpfLkNsclNoYXBlUG9ydHJhaXQsImZpbGUtemlwIjpfLkNsclNoYXBlRmlsZVppcCwiZmlsdGVyLW9mZiI6Xy5DbHJTaGFwZUZpbHRlck9mZixyZWN5Y2xlOl8uQ2xyU2hhcGVSZWN5Y2xlLHRyZWU6Xy5DbHJTaGFwZVRyZWUsZmlzaDpfLkNsclNoYXBlRmlzaCxmb3JtOl8uQ2xyU2hh''@;'; put 'put ''cGVGb3JtLGZ1ZWw6Xy5DbHJTaGFwZUZ1ZWwsc25vd2ZsYWtlOl8uQ2xyU2hhcGVTbm93Zmxha2UsdGFibGU6Xy5DbHJTaGFwZVRhYmxlLCJkb3QtY2lyY2xlIjpfLkNsclNoYXBlRG90Q2lyY2xlLHZvbHVtZTpfLkNsclNoYXBlVm9sdW1lLGNyb3NzaGFpcnM6Xy5DbHJTaGFwZUNyb3NzaGFp''@;'; put 'put ''cnMsYmV0YTpfLkNsclNoYXBlQmV0YSwiY29sb3ItcGFsZXR0ZSI6Xy5DbHJTaGFwZUNvbG9yUGFsZXR0ZX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KF8uRXNzZW50aWFsU2hhcGVzLCJlZGl0IiwoMCx5LmRlc2NyaXB0b3JDb25maWcpKF8uRXNzZW50aWFsU2hhcGVzLnBlbmNpbCkpLE9iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShfLkVzc2VudGlhbFNoYXBlcywibm90ZS1lZGl0IiwoMCx5LmRlc2NyaXB0b3JDb25maWcpKF8uRXNzZW50aWFsU2hhcGVzLm5vdGUpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5Fc3NlbnRpYWxTaGFwZXMsImdyb3VwIiwoMCx5LmRlc2NyaXB0b3JDb25maWcp''@;'; put 'put ''KF8uRXNzZW50aWFsU2hhcGVzLnVzZXJzKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KF8uRXNzZW50aWFsU2hhcGVzLCJkb2N1bWVudCIsKDAseS5kZXNjcmlwdG9yQ29uZmlnKShfLkVzc2VudGlhbFNoYXBlcy5maWxlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KF8uRXNzZW50aWFsU2hhcGVz''@;'; put 'put ''LCJhZGQiLCgwLHkuZGVzY3JpcHRvckNvbmZpZykoXy5Fc3NlbnRpYWxTaGFwZXMucGx1cykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLkVzc2VudGlhbFNoYXBlcywiY2FuY2VsIiwoMCx5LmRlc2NyaXB0b3JDb25maWcpKF8uRXNzZW50aWFsU2hhcGVzLmJhbikpLE9iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShfLkVzc2VudGlhbFNoYXBlcywicmVtb3ZlIiwoMCx5LmRlc2NyaXB0b3JDb25maWcpKF8uRXNzZW50aWFsU2hhcGVzWyJ0aW1lcy1jaXJjbGUiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLkVzc2VudGlhbFNoYXBlcywic2lnbi1pbiIsKDAseS5kZXNjcmlwdG9yQ29uZmln''@;'; put 'put ''KShfLkVzc2VudGlhbFNoYXBlcy5sb2dpbikpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLkVzc2VudGlhbFNoYXBlcywic2lnbi1vdXQiLCgwLHkuZGVzY3JpcHRvckNvbmZpZykoXy5Fc3NlbnRpYWxTaGFwZXMubG9nb3V0KSksT2JqZWN0LmRlZmluZVByb3BlcnR5KF8uRXNzZW50aWFsU2hh''@;'; put 'put ''cGVzLCJsaWdodG5pbmciLCgwLHkuZGVzY3JpcHRvckNvbmZpZykoXy5Fc3NlbnRpYWxTaGFwZXMuYm9sdCkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLkVzc2VudGlhbFNoYXBlcywiZmxvdy1jaGFydCIsKDAseS5kZXNjcmlwdG9yQ29uZmlnKShfLkVzc2VudGlhbFNoYXBlcy5vcmdhbml6''@;'; put 'put ''YXRpb24pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5Fc3NlbnRpYWxTaGFwZXMsImFsZXJ0IiwoMCx5LmRlc2NyaXB0b3JDb25maWcpKF8uRXNzZW50aWFsU2hhcGVzWyJidWJibGUtZXhjbGFtYXRpb24iXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLkVzc2VudGlhbFNoYXBlcywicGlu''@;'; put 'put ''bmVkIiwoMCx5LmRlc2NyaXB0b3JDb25maWcpKF8uRXNzZW50aWFsU2hhcGVzLnBpbmJvYXJkKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KF8uRXNzZW50aWFsU2hhcGVzLCJhdHRhY2htZW50IiwoMCx5LmRlc2NyaXB0b3JDb25maWcpKF8uRXNzZW50aWFsU2hhcGVzLnBhcGVyY2xpcCkpLE9i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShfLkVzc2VudGlhbFNoYXBlcywiYXR0YWNobWVudCIsKDAseS5kZXNjcmlwdG9yQ29uZmlnKShfLkVzc2VudGlhbFNoYXBlcy5wYXBlcmNsaXApKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5Fc3NlbnRpYWxTaGFwZXMsInJlc2l6ZS1kb3duIiwoMCx5LmRl''@;'; put 'put ''c2NyaXB0b3JDb25maWcpKF8uRXNzZW50aWFsU2hhcGVzLnNocmluaykpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLkVzc2VudGlhbFNoYXBlcywicmVzaXplLXVwIiwoMCx5LmRlc2NyaXB0b3JDb25maWcpKF8uRXNzZW50aWFsU2hhcGVzLnJlc2l6ZSkpLHR5cGVvZiB3aW5kb3c8InUiJiZ3''@;'; put 'put ''aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChfLkVzc2VudGlhbFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvbWVkaWEtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqISpcCiAgICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL21lZGlhLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov''@;'; put 'put ''Ci8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKHEsXyxJKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KF8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8uTWVkaWFTaGFwZXM9Xy5DbHJTaGFwZU1pY3JvcGhvbmVNdXRlPV8uQ2xyU2hhcGVNaWNyb3Bo''@;'; put 'put ''b25lPV8uQ2xyU2hhcGVWaWRlb0dhbGxlcnk9Xy5DbHJTaGFwZVJlcGxheU9uZT1fLkNsclNoYXBlUmVwbGF5QWxsPV8uQ2xyU2hhcGVJbWFnZUdhbGxlcnk9Xy5DbHJTaGFwZU11c2ljTm90ZT1fLkNsclNoYXBlRmlsbVN0cmlwPV8uQ2xyU2hhcGVIZWFkcGhvbmVzPV8uQ2xyU2hhcGVWb2x1''@;'; put 'put ''bWVNdXRlPV8uQ2xyU2hhcGVWb2x1bWVVcD1fLkNsclNoYXBlVm9sdW1lRG93bj1fLkNsclNoYXBlU2h1ZmZsZT1fLkNsclNoYXBlVmlkZW9DYW1lcmE9Xy5DbHJTaGFwZUNhbWVyYT1fLkNsclNoYXBlRmFzdEZvcndhcmQ9Xy5DbHJTaGFwZVJld2luZD1fLkNsclNoYXBlUG93ZXI9Xy5DbHJT''@;'; put 'put ''aGFwZVN0b3A9Xy5DbHJTaGFwZVN0ZXBGb3J3YXJkPV8uQ2xyU2hhcGVQYXVzZT1fLkNsclNoYXBlUGxheT12b2lkIDA7dmFyIHk9SSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIpO18u''@;'; put 'put ''Q2xyU2hhcGVQbGF5PSgwLHkuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNOC4wNywzMS42QTIuMDcsMi4wNywwLDAsMSw2LDI5LjUzVjYuMzJBMi4wNywyLjA3LDAsMCwxLDksNC40N0wzMi4yMSwxNi4wOGEyLjA3LDIu''@;'; put 'put ''MDcsMCwwLDEsMCwzLjdMOSwzMS4zOEEyLjA2LDIuMDYsMCwwLDEsOC4wNywzMS42Wm0wLTI1LjM0TDgsNi4zMlYyOS41M2wuMS4wNkwzMS4zMSwxOGEuMDYuMDYsMCwwLDAsMC0uMDZaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBh''@;'; put 'put ''dGgtMSIgZD0iTTMyLjE2LDE2LjA4LDguOTQsNC40N0EyLjA3LDIuMDcsMCwwLDAsNiw2LjMyVjI5LjUzYTIuMDYsMi4wNiwwLDAsMCwzLDEuODVMMzIuMTYsMTkuNzdhMi4wNywyLjA3LDAsMCwwLDAtMy43WiIvPicpLF8uQ2xyU2hhcGVQYXVzZT0oMCx5LmNsckljb25TVkcpKCc8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTEyLjkzLDMySDYuMDdBMi4wNywyLjA3LDAsMCwxLDQsMjkuOTNWNi4wN0EyLjA3LDIuMDcsMCwwLDEsNi4wNyw0aDYuODdBMi4wNywyLjA3LDAsMCwxLDE1LDYuMDdWMjkuOTNBMi4wNywyLjA3LDAsMCwxLDEy''@;'; put 'put ''LjkzLDMyWk0xMyw2SDZWMzBoN1oiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTI5LjkzLDMySDIzLjA3QTIuMDcsMi4wNywwLDAsMSwyMSwyOS45M1Y2LjA3QTIuMDcsMi4wNywwLDAsMSwyMy4wNyw0aDYu''@;'; put 'put ''ODdBMi4wNywyLjA3LDAsMCwxLDMyLDYuMDdWMjkuOTNBMi4wNywyLjA3LDAsMCwxLDI5LjkzLDMyWk0zMCw2SDIzVjMwaDdaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgeD0iMy45NSIgeT0iNCIgd2lkdGg9IjExIiBo''@;'; put 'put ''ZWlnaHQ9IjI4IiByeD0iMi4wNyIgcnk9IjIuMDciLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiB4PSIyMC45NSIgeT0iNCIgd2lkdGg9IjExIiBoZWlnaHQ9IjI4IiByeD0iMi4wNyIgcnk9IjIuMDciLz4nKSxfLkNsclNo''@;'; put 'put ''YXBlU3RlcEZvcndhcmQ9KDAseS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik01LDMyLjIzYTIsMiwwLDAsMS0yLTJWNS43N0EyLDIsMCwwLDEsNi4xNyw0LjE0TDIzLjIzLDE2LjM4YTIsMiwwLDAsMSwwLDMuMjVoMEw2''@;'; put 'put ''LjE3LDMxLjg2QTIsMiwwLDAsMSw1LDMyLjIzWk01LDUuNzdWMzAuMjNMMjIuMDcsMThaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIGQ9Ik0zMSwzMkgyOGEyLDIsMCwwLDEtMi0yVjZhMiwyLDAsMCwxLDItMmgz''@;'; put 'put ''YTIsMiwwLDAsMSwyLDJWMzBBMiwyLDAsMCwxLDMxLDMyWk0yOCw2VjMwaDNWNloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNNSwzMS45YTIsMiwwLDAsMS0yLTJWNS40NEEyLDIsMCwwLDEsNi4xMiwzLjgxTDIz''@;'; put 'put ''LjE4LDE2YTIsMiwwLDAsMSwwLDMuMjVoMEw2LjEyLDMxLjUyQTIsMiwwLDAsMSw1LDMxLjlaIi8+XG4gICAgICAgICAgICAgICAgPHJlY3QgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgeD0iMjUuOTUiIHk9IjMuNjciIHdpZHRoPSI3IiBoZWlnaHQ9IjI4IiByeD0i''@;'; put 'put ''MiIgcnk9IjIiLz4nKSxfLkNsclNoYXBlU3RvcD0oMCx5LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMwLDMySDZhMiwyLDAsMCwxLTItMlY2QTIsMiwwLDAsMSw2LDRIMzBhMiwyLDAsMCwxLDIsMlYzMEEyLDIsMCww''@;'; put 'put ''LDEsMzAsMzJaTTYsNlYzMEgzMFY2WiIvPlxuICAgICAgICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIHg9IjMuOTYiIHk9IjQiIHdpZHRoPSIyNy45OSIgaGVpZ2h0PSIyOCIgcng9IjIiIHJ5PSIyIi8+JyksXy5DbHJTaGFwZVBvd2VyPSgw''@;'; put 'put ''LHkuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMTgsMjFhMSwxLDAsMCwxLTEtMVY0YTEsMSwwLDAsMSwyLDBWMjBBMSwxLDAsMCwxLDE4LDIxWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; 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 ''LWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLF8uQ2xyU2hhcGVSZXdpbmQ9KDAseS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''IGQ9Ik0xNy4wOSwzMS41OGwtMTUuMzItMTJhMiwyLDAsMCwxLDAtMy4xNWwxNS4zMi0xMmExLjkzLDEuOTMsMCwwLDEsMi4wNi0uMjJBMS43NywxLjc3LDAsMCwxLDIwLDZ2Ni43TDMwLjgzLDQuNDJhMS45MywxLjkzLDAsMCwxLDIuMDYtLjIyQTIsMiwwLDAsMSwzNCw2VjMwYTIsMiwwLDAs''@;'; put 'put ''MS0xLjExLDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIyTDIwLDIzLjMxVjMwYTEuNzcsMS43NywwLDAsMS0uODUsMS43OSwxLjk0LDEuOTQsMCwwLDEtMi4wNi0uMjJaTTMyLDMwbC4wNi0yNEwxOCwxNi44VjZMMywxOCwxOCwzMFYxOS4yWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xh''@;'; put 'put ''c3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE2LjkyLDMxLjU4LDEuNiwxOS41N2EyLDIsMCwwLDEsMC0zLjE1bDE1LjMyLTEyQTEuOTMsMS45MywwLDAsMSwxOSw0LjIsMS44OSwxLjg5LDAsMCwxLDIwLDZ2Ni43TDMwLjY2LDQuNDJhMS45MywxLjkzLDAsMCwxLDIu''@;'; put 'put ''MDYtLjIyQTIsMiwwLDAsMSwzMy44Myw2VjMwYTIsMiwwLDAsMS0xLjExLDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIyTDIwLDIzLjMxVjMwYTEuODksMS44OSwwLDAsMS0xLDEuNzksMS45NCwxLjk0LDAsMCwxLTIuMDYtLjIyWiIvPicpLF8uQ2xyU2hhcGVGYXN0Rm9yd2FyZD0oMCx5''@;'; put 'put ''LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE3Ljc3LDMxLjkyYTIsMiwwLDAsMS0uODYtLjJBMS44MSwxLjgxLDAsMCwxLDE2LDI5Ljkzdi02LjdMNS4yNCwzMS41YTEuOTQsMS45NCwwLDAsMS0yLjA2LjIyLDIsMiww''@;'; put 'put ''LDAsMS0xLjExLTEuNzl2LTI0QTIsMiwwLDAsMSwzLjE4LDQuMTJhMS45MywxLjkzLDAsMCwxLDIuMDYuMjJMMTYsMTIuNjFWNS45MWExLjgxLDEuODEsMCwwLDEsLjkxLTEuNzlBMS45MywxLjkzLDAsMCwxLDE5LDQuMzRsMTUuMzIsMTJhMiwyLDAsMCwxLDAsMy4xNUwxOSwzMS41QTIsMiww''@;'; put 'put ''LDAsMSwxNy43NywzMS45MlptMC0xMi44VjI5LjkzbDE1LjI2LTEyLTE1LjMyLTEyLC4wNiwxMC44MUw0LDUuOTF2MjRaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMTcuNzEsMzJhMiwyLDAsMCwxLS44Ni0uMkExLjc3''@;'; put 'put ''LDEuNzcsMCwwLDEsMTYsMzB2LTYuN0w1LjE3LDMxLjU4YTEuOTQsMS45NCwwLDAsMS0yLjA2LjIyQTIsMiwwLDAsMSwyLDMwVjZBMiwyLDAsMCwxLDMuMTEsNC4yYTEuOTMsMS45MywwLDAsMSwyLjA2LjIyTDE2LDEyLjY5VjZhMS43NywxLjc3LDAsMCwxLC44NS0xLjc5LDEuOTMsMS45Myww''@;'; put 'put ''LDAsMSwyLjA2LjIybDE1LjMyLDEyYTIsMiwwLDAsMSwwLDMuMTVsLTE1LjMyLDEyQTIsMiwwLDAsMSwxNy43MSwzMloiLz4nKSxfLkNsclNoYXBlQ2FtZXJhPSgwLHkuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw4SDI0LjdMMjMuNjQsNS4yOEEyLDIsMCwwLDAsMjEuNzgsNEgxNC4yMmEy''@;'; put 'put ''LDIsMCwwLDAtMS44NywxLjI4TDExLjMsOEg0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEwQTIsMiwwLDAsMCwzMiw4Wm0wLDIySDRWMTBoOC42N2wxLjU1LTRoNy41NmwxLjU1LDRIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTksMTlhOSw5LDAsMSwwLDktOUE5LDksMCwwLDAsOSwxOVptMTYuNCwwQTcuNCw3LjQsMCwxLDEsMTgsMTEuNiw3LjQxLDcuNDEsMCwwLDEsMjUuNCwxOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0yIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNOS4zNywxMi44M2EuOC44LDAsMCwwLS44LS44SDYuMTdhLjguOCwwLDAsMCwwLDEuNmgyLjRBLjguOCwwLDAsMCw5LjM3LDEyLjgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0xMi4zNCwxOWE1LjU3LDUuNTcsMCwwLDAsMy4yNCw1bC44NS0xLjM3YTQsNCwwLDEsMSw0LjExLTYuNjFsLjg2LTEuMzhBNS41Niw1LjU2LDAsMCwwLDEyLjM0LDE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAg''@;'; put 'put ''IDxwYXRoIGQ9Ik0zMiw4SDI0LjdMMjMuNjQsNS4yOEEyLDIsMCwwLDAsMjEuNzgsNEgxNC4yMmEyLDIsMCwwLDAtMS44NywxLjI4TDExLjMsOEg0YTIsMiwwLDAsMC0yLDJWMzBhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjEwQTIsMiwwLDAsMCwzMiw4Wk02LjE3LDEzLjYzYS44''@;'; put 'put ''LjgsMCwwLDEsMC0xLjZoMi40YS44LjgsMCwwLDEsMCwxLjZaTTE4LDI4YTksOSwwLDEsMSw5LTlBOSw5LDAsMCwxLDE4LDI4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTExLjExLDE5LjA2YTcuMDcsNy4wNywwLDAs''@;'; put 'put ''MCw0LjExLDYuNDFsMS4wOS0xLjc0YTUsNSwwLDEsMSw1LjIyLTguMzlsMS4wOS0xLjc2YTcuMDYsNy4wNiwwLDAsMC0xMS41MSw1LjQ4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIvPicpLF8uQ2xyU2hhcGVWaWRlb0NhbWVyYT0oMCx5LmNsckljb25TVkcpKCc8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTM0LDEwLjM0YTIuMTEsMi4xMSwwLDAsMC0xLjE2LTEuOSwyLDIsMCwwLDAtMi4xMy4xNUwyNiwxMS42VjhhMiwyLDAsMCwwLTItMkg2YTQsNCwwLDAsMC00LDRWMjZhNCw0LDAsMCwwLDQsNEgyNGEy''@;'; put 'put ''LDIsMCwwLDAsMi0yVjI0LjRsNC42NCwzYTIuMDcsMi4wNywwLDAsMCwyLjIuMkEyLjExLDIuMTEsMCwwLDAsMzQsMjUuNjZaTTMxLjkzLDI1Ljc3Yy0uMDYsMC0uMTEsMC0uMTktLjA2TDI0LDIwLjc3VjI4SDZhMiwyLDAsMCwxLTItMlYxMEEyLDIsMCwwLDEsNiw4SDI0djcuMjNsNy44LTVh''@;'; put 'put ''LjExLjExLDAsMCwxLC4xMywwLC4xMS4xMSwwLDAsMSwuMDcuMTFWMjUuNjZBLjExLjExLDAsMCwxLDMxLjkzLDI1Ljc3WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTMyLjMsOS4zNSwyNiwxMi45VjhhMiwyLDAsMCww''@;'; put 'put ''LTItMkg2YTQsNCwwLDAsMC00LDRWMjZhNCw0LDAsMCwwLDQsNEgyNGEyLDIsMCwwLDAsMi0yVjIzLjA4bDYuMywzLjU1QTEuMSwxLjEsMCwwLDAsMzQsMjUuNzdWMTAuMkExLjEsMS4xLDAsMCwwLDMyLjMsOS4zNVoiLz4nKSxfLkNsclNoYXBlU2h1ZmZsZT0oMCx5LmNsckljb25TVkcpKCc8''@;'; put 'put ''cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTIxLjYxLDExaDguNjJsLTMuMywzLjNhMSwxLDAsMSwwLDEuNDEsMS40MkwzNCwxMC4wOGwtLjcxLS43MWgwTDI4LjM0LDQuNDNhMSwxLDAsMCwwLTEuNDEsMS40MkwzMC4xMSw5SDIxYTEsMSwwLDAs''@;'; put 'put ''MC0uODYuNUwxNy41LDE0LjA5bDEuMTYsMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTEuMDcsMjUuMDdIM2ExLDEsMCwwLDAsMCwyaDguNjVhMSwxLDAsMCwwLC44Ni0uNUwxNS4xOCwyMiwxNCwyMFoiLz5c''@;'; put 'put ''biAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMjguMzQsMjAuMTdhMSwxLDAsMCwwLTEuNDEsMS40MmwzLjUsMy41SDIxLjYxTDEyLjUxLDkuNTNhMSwxLDAsMCwwLS44Ni0uNUgzYTEsMSwwLDEsMCwwLDJoOC4wN2w5LjEs''@;'; put 'put ''MTUuNTVhMSwxLDAsMCwwLC44Ni41SDI5LjlsLTMsM2ExLDEsMCwwLDAsMS40MSwxLjQybDQuOTUtNC45NGgwbC43MS0uNzFaIi8+JyksXy5DbHJTaGFwZVZvbHVtZURvd249KDAseS5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEi''@;'; put 'put ''IGQ9Ik0yMy40MSwyNS4xMWExLDEsMCwwLDEtLjU0LTEuODUsNi4yMSw2LjIxLDAsMCwwLS4xOS0xMC42NSwxLDEsMCwxLDEsMS0xLjczQTguMjEsOC4yMSwwLDAsMSwyMy45NCwyNSwxLDEsMCwwLDEsMjMuNDEsMjUuMTFaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTE4LDMyYTIsMiwwLDAsMS0xLjQyLS41OUw5LjE0LDI0SDRhMiwyLDAsMCwxLTItMlYxNGEyLDIsMCwwLDEsMi0ySDkuMjJsNy4zMy03LjQxQTIsMiwwLDAsMSwyMCw2VjMwYTIsMiwwLDAsMS0xLjI0LDEuODVBMiwyLDAsMCwxLDE4LDMy''@;'; put 'put ''Wk00LDE0djhIOS41NmExLDEsMCwwLDEsLjcxLjI4TDE4LDMwVjZsLTcuNjUsNy42OGExLDEsMCwwLDEtLjcxLjNaTTE4LDZaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMjMuNDEsMjUuMTFhMSwxLDAsMCwxLS41NC0x''@;'; put 'put ''Ljg1LDYuMjEsNi4yMSwwLDAsMC0uMTktMTAuNjUsMSwxLDAsMSwxLDEtMS43M0E4LjIxLDguMjEsMCwwLDEsMjMuOTQsMjUsMSwxLDAsMCwxLDIzLjQxLDI1LjExWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LjM0''@;'; put 'put ''LDMuODcsOSwxMkgzYTEsMSwwLDAsMC0xLDFWMjNhMSwxLDAsMCwwLDEsMUg4LjgzbDkuNTEsOC4zQTEsMSwwLDAsMCwyMCwzMS41NVY0LjYyQTEsMSwwLDAsMCwxOC4zNCwzLjg3WiIvPicpLF8uQ2xyU2hhcGVWb2x1bWVVcD0oMCx5LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWkt''@;'; 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 ''MS40M1Y0LjcyQTEsMSwwLDAsMCwxOC4zMyw0WiIvPicpLF8uQ2xyU2hhcGVWb2x1bWVNdXRlPSgwLHkuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMy42MSw2LjQxLDkuMTksMTJINGEyLDIsMCwwLDAtMiwydjhhMiwy''@;'; 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 ''NjJhMSwxLDAsMCwwLTEuNjYtLjc1bC02LjQyLDUuNkwyMCwxNy41NFoiLz4nKSxfLkNsclNoYXBlSGVhZHBob25lcz0oMCx5LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDNBMTQuMjcsMTQuMjcsMCwwLDAsNCwx''@;'; put 'put ''Ny41VjMxSDkuMkEyLjc0LDIuNzQsMCwwLDAsMTIsMjguMzNWMjEuNjdBMi43NCwyLjc0LDAsMCwwLDkuMiwxOUg2VjE3LjVBMTIuMjcsMTIuMjcsMCwwLDEsMTgsNSwxMi4yNywxMi4yNywwLDAsMSwzMCwxNy41VjE5SDI2LjhBMi43NCwyLjc0LDAsMCwwLDI0LDIxLjY3djYuNjdBMi43NCwy''@;'; put 'put ''Ljc0LDAsMCwwLDI2LjgsMzFIMzJWMTcuNUExNC4yNywxNC4yNywwLDAsMCwxOCwzWk05LjIsMjFhLjc1Ljc1LDAsMCwxLC44LjY3djYuNjdhLjc1Ljc1LDAsMCwxLS44LjY3SDZWMjFaTTI2LDI4LjMzVjIxLjY3YS43NS43NSwwLDAsMSwuOC0uNjdIMzB2OEgyNi44QS43NS43NSwwLDAsMSwy''@;'; put 'put ''NiwyOC4zM1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0xOCwzQTE0LjI3LDE0LjI3LDAsMCwwLDQsMTcuNVYzMUg4LjJBMS43NCwxLjc0LDAsMCwwLDEwLDI5LjMzVjIyLjY3QTEuNzQsMS43NCwwLDAsMCw4LjIsMjFI''@;'; put 'put ''NlYxNy41QTEyLjI3LDEyLjI3LDAsMCwxLDE4LDUsMTIuMjcsMTIuMjcsMCwwLDEsMzAsMTcuNVYyMUgyNy44QTEuNzQsMS43NCwwLDAsMCwyNiwyMi42N3Y2LjY3QTEuNzQsMS43NCwwLDAsMCwyNy44LDMxSDMyVjE3LjVBMTQuMjcsMTQuMjcsMCwwLDAsMTgsM1oiLz4nKSxfLkNsclNoYXBl''@;'; put 'put ''RmlsbVN0cmlwPSgwLHkuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzAsNEg2QTIsMiwwLDAsMCw0LDZWMzBhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjZBMiwyLDAsMCwwLDMwLDRabTAsMjZINlY2SDMw''@;'; 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+JyksXy5DbHJTaGFwZU11c2ljTm90ZT0oMCx5LmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSJcbiAgICAgICAgICAgICAgICBkPSJNMzEuNjgsNi4xNmMtMS45Mi0zLjMt''@;'; put 'put ''MTAuNi00LTExLjU4LTQuMDlMMTksMlYyMi4zNGE1Ljg5LDUuODksMCwwLDAtLjgyLS41Niw4LjMzLDguMzMsMCwwLDAtNi41My0uNDFDNy41NywyMi43LDQuOTIsMjYuNSw1Ljc4LDI5Ljg0YTUuMzMsNS4zMywwLDAsMCwyLjY2LDMuMzIsNy40OCw3LjQ4LDAsMCwwLDMuNjEuODhBOS41NCw5''@;'; put 'put ''LjU0LDAsMCwwLDE1LDMzLjU3YzMuNjctMS4xOCw2LjE3LTQuMzMsNi4wNi03LjM2VjkuMzRhMjkuMTQsMjkuMTQsMCwwLDEsNi41NSwxLjQzLDEsMSwwLDEsMCwuNzItMS44N0EzMS4zNywzMS4zNywwLDAsMCwyMSw3LjMzVjQuMTdjMy4zMy4zNiw4LDEuMzgsOC45MiwzLDIsMy40MS0yLjMz''@;'; put 'put ''LDcuMzYtMi4zNyw3LjRhMSwxLDAsMCwwLDEuMzMsMS40OUMyOS4xNSwxNS44NSwzNC41LDExLDMxLjY4LDYuMTZaTTE0LjM1LDMxLjY3YTYuNDMsNi40MywwLDAsMS01LS4yNiwzLjMxLDMuMzEsMCwwLDEtMS42OS0yLjA3Yy0uNi0yLjMzLDEuNDUtNS4wNSw0LjU4LTYuMDZhNy41Miw3LjUy''@;'; put 'put ''LDAsMCwxLDIuMy0uMzcsNS41Miw1LjUyLDAsMCwxLDIuNjUuNjIsMy4zMSwzLjMxLDAsMCwxLDEuNjksMi4wN0MxOS41NCwyNy45NCwxNy40OSwzMC42NiwxNC4zNSwzMS42N1oiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiXG4g''@;'; put 'put ''ICAgICAgICAgICAgICAgZD0iTTMxLjY4LDYuMTZjLTEuOTItMy4zLTEwLjYtNC0xMS41OC00LjA5TDE5LDJWMjIuMjlhNS44OCw1Ljg4LDAsMCwwLS44MS0uNTUsOC4zMyw4LjMzLDAsMCwwLTYuNTMtLjQxYy00LjEyLDEuMzMtNi43Nyw1LjEzLTUuOTEsOC40N2E1LjMzLDUuMzMsMCwwLDAs''@;'; put 'put ''Mi42NiwzLjMyLDcuNDgsNy40OCwwLDAsMCwzLjYxLjg4QTkuNTQsOS41NCwwLDAsMCwxNSwzMy41MmMzLjctMS4xOSw2LjItNC4zNyw2LjA2LTcuNDIsMCwwLDAsMCwwLDBWOC40OWMxLC4xMiwyLjM3LjMzLDMuODIuNjRhMTEuMTcsMTEuMTcsMCwwLDEsNC4wNiwxLjQ2YzEsLjY2LjM4LDEu''@;'; put 'put ''OS4zMywyYTExLjgsMTEuOCwwLDAsMS0xLjY2LDIsMSwxLDAsMCwwLDEuMzMsMS40OUMyOS4xNSwxNS44NSwzNC41LDExLDMxLjY4LDYuMTZaIi8+JyksXy5DbHJTaGFwZUltYWdlR2FsbGVyeT0oMCx5LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIuMTIsMTBIMy44OEExLjg4LDEuODgsMCww''@;'; 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 ''TDIzLjIxLDE5YS43MS43MSwwLDAsMSwxLDBMMzAsMjQuNzlaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPicpLF8uQ2xyU2hhcGVSZXBsYXlBbGw9KDAseS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE3LjQ2LDI2LjIyYTEuNCwxLjQsMCwwLDAsMS0uNDJsNS41''@;'; put 'put ''OS01LjU2YTEuNDMsMS40MywwLDAsMCwuNDItMSwxLjQ2LDEuNDYsMCwwLDAtLjQyLTFsLTUuNTktNS41NmExLjQzLDEuNDMsMCwwLDAtMi40NCwxVjI0Ljc5YTEuNDEsMS40MSwwLDAsMCwuODgsMS4zMkExLjU0LDEuNTQsMCwwLDAsMTcuNDYsMjYuMjJabS4xNi0xMi4xNiw1LjE5LDUuMTYt''@;'; put 'put ''NS4xOSw1LjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LjA2LDVoLTYuN2wyLjkyLTIuNjRBMSwxLDAsMCwwLDEyLjk0Ljg4TDcuMzIsNiwxMi45NCwxMWExLDEsMCwwLDAsLjY3LjI2LDEsMSwwLDAsMCwuNzQtLjMzLDEsMSww''@;'; put 'put ''LDAsMC0uMDctMS40MkwxMS40Niw3aDYuNkExMS43OCwxMS43OCwwLDEsMSw3LjcxLDI0LjQxLDEsMSwwLDAsMCw2LDI1LjM2LDEzLjc4LDEzLjc4LDAsMSwwLDE4LjA2LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxfLkNsclNoYXBlUmVwbGF5''@;'; put 'put ''T25lPSgwLHkuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOSwyNy4yN2ExLDEsMCwwLDAsMS0xVjE0YTEsMSwwLDAsMC0xLTFIMTlhMy44LDMuOCwwLDAsMC0xLjEuMjNsLTIsLjYyYS45Mi45MiwwLDAsMC0uNzIuODYuODguODgsMCwwLDAsLjg4Ljg2LDEuNDYsMS40NiwwLDAsMCwuNDMtLjA4''@;'; put 'put ''TDE4LDE1LjA3djExLjJBMSwxLDAsMCwwLDE5LDI3LjI3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE4LjA2LDVoLTYuN2wyLjkyLTIuNjRBMSwxLDAsMCwwLDEyLjk0Ljg4TDcuMzIsNiwxMi45NCwxMWExLDEsMCwwLDAsLjY3LjI2''@;'; put 'put ''LDEsMSwwLDAsMCwuNzQtLjMzLDEsMSwwLDAsMC0uMDctMS40MkwxMS40Niw3aDYuNkExMS43OCwxMS43OCwwLDEsMSw3LjcxLDI0LjQxLDEsMSwwLDAsMCw2LDI1LjM2LDEzLjc4LDEzLjc4LDAsMSwwLDE4LjA2LDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''MiIgLz4nKSxfLkNsclNoYXBlVmlkZW9HYWxsZXJ5PSgwLHkuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMi4xMiwxMEgzLjg4QTEuODgsMS44OCwwLDAsMCwyLDExLjg4VjMwLjEyQTEuODgsMS44OCwwLDAsMCwzLjg4LDMySDMyLjEyQTEuODgsMS44OCwwLDAsMCwzNCwzMC4xMlYxMS44OEEx''@;'; put 'put ''Ljg4LDEuODgsMCwwLDAsMzIuMTIsMTBaTTMyLDMwSDRWMTJIMzJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAuMTQsM2gwYTEsMSwwLDAsMC0xLTFoLTIyYTEsMSwwLDAsMC0xLDFoMFY0aDI0WiIgY2xhc3M9ImNsci1pLW91dGxp''@;'; put 'put ''bmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMyLjEyLDdWN2ExLDEsMCwwLDAtMS0xaC0yNmExLDEsMCwwLDAtMSwxaDBWOGgyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xMi44MiwyNi43OWExLjc0LDEuNzQs''@;'; put 'put ''MCwwLDAsLjkzLjI4LDEuNjgsMS42OCwwLDAsMCwuNjktLjE1bDkuNzctNC4zNmExLjY5LDEuNjksMCwwLDAsMC0zLjFMMTQuNDQsMTUuMWExLjcsMS43LDAsMCwwLTIuMzksMS41NXY4LjcyQTEuNywxLjcsMCwwLDAsMTIuODIsMjYuNzlabS42My0xMC4xNGEuMjkuMjksMCwwLDEsLjE0LS4y''@;'; put 'put ''NS4zLjMsMCwwLDEsLjE2LDAsLjI3LjI3LDAsMCwxLC4xMiwwbDkuNzcsNC4zNWEuMjkuMjksMCwwLDEsLjE4LjI4LjI4LjI4LDAsMCwxLS4xOC4yN2wtOS43Nyw0LjM2YS4yOC4yOCwwLDAsMS0uMjgsMCwuMzEuMzEsMCwwLDEtLjE0LS4yNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMi4xMiwxMEgzLjg4QTEuODgsMS44OCwwLDAsMCwyLDExLjg4VjMwLjEyQTEuODgsMS44OCwwLDAsMCwzLjg4LDMySDMyLjEyQTEuODgsMS44OCwwLDAsMCwzNCwzMC4xMlYxMS44OEExLjg4LDEuODgsMCwwLDAsMzIuMTIsMTBaTTI0LjE4''@;'; put 'put ''LDIxLjgzbC05Ljc3LDQuMzZBMSwxLDAsMCwxLDEzLDI1LjI4VjE2LjU2YTEsMSwwLDAsMSwxLjQxLS45MUwyNC4xOCwyMEExLDEsMCwwLDEsMjQuMTgsMjEuODNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMC4xNCwzaDBhMSwxLDAsMCww''@;'; put 'put ''LTEtMWgtMjJhMSwxLDAsMCwwLTEsMWgwVjRoMjRaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMi4xMiw3VjdhMSwxLDAsMCwwLTEtMWgtMjZhMSwxLDAsMCwwLTEsMWgwVjhoMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQt''@;'; put 'put ''cGF0aC0zIiAvPicpLF8uQ2xyU2hhcGVNaWNyb3Bob25lPSgwLHkuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyNGMzLjksMCw3LTMuMSw3LTdWOWMwLTMuOS0zLjEtNy03LTdzLTcsMy4xLTcsN3Y4QzExLDIwLjksMTQuMSwyNCwxOCwyNHogTTEzLDljMC0yLjgsMi4yLTUsNS01czUsMi4y''@;'; put 'put ''LDUsNXY4XG5cdFx0YzAsMi44LTIuMiw1LTUsNXMtNS0yLjItNS01Vjl6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAsMTdoLTJjMCw1LjUtNC41LDEwLTEwLDEwUzgsMjIuNSw4LDE3SDZjMCw2LjMsNC44LDExLjQsMTEsMTEuOVYz''@;'; put 'put ''MmgtM2MtMC42LDAtMSwwLjQtMSwxczAuNCwxLDEsMWg4YzAuNiwwLDEtMC40LDEtMVxuXHRcdHMtMC40LTEtMS0xaC0zdi0zLjFDMjUuMiwyOC40LDMwLDIzLjMsMzAsMTd6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMTgsMjRjMy45''@;'; put 'put ''LDAsNy0zLjEsNy03VjljMC0zLjktMy4xLTctNy03cy03LDMuMS03LDd2OEMxMSwyMC45LDE0LjEsMjQsMTgsMjR6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMCwxN2gtMmMwLDUuNS00LjUsMTAtMTAsMTBTOCwyMi41LDgsMTdINmMwLDYu''@;'; put 'put ''Myw0LjgsMTEuNCwxMSwxMS45VjMyaC0zYy0wLjYsMC0xLDAuNC0xLDFzMC40LDEsMSwxaDhjMC42LDAsMS0wLjQsMS0xXG5cdFx0cy0wLjQtMS0xLTFoLTN2LTMuMUMyNS4yLDI4LjQsMzAsMjMuMywzMCwxN3oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+Jyks''@;'; put 'put ''Xy5DbHJTaGFwZU1pY3JvcGhvbmVNdXRlPSgwLHkuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCwxN2gtMmMwLDEuOC0wLjUsMy41LTEuNCw1bDEuNSwxLjVDMjkuMywyMS41LDI5LjksMTkuMywzMCwxN3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxw''@;'; 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 ''LTN2LTNDMjEuMiwyOC44LDIzLjQsMjgsMjUuMiwyNi42eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz4nKSxfLk1lZGlhU2hhcGVzPXtwbGF5Ol8uQ2xyU2hhcGVQbGF5LHBhdXNlOl8uQ2xyU2hhcGVQYXVzZSwic3RlcC1mb3J3YXJkIjpfLkNsclNoYXBlU3Rl''@;'; put 'put ''cEZvcndhcmQsc3RvcDpfLkNsclNoYXBlU3RvcCxwb3dlcjpfLkNsclNoYXBlUG93ZXIscmV3aW5kOl8uQ2xyU2hhcGVSZXdpbmQsImZhc3QtZm9yd2FyZCI6Xy5DbHJTaGFwZUZhc3RGb3J3YXJkLGNhbWVyYTpfLkNsclNoYXBlQ2FtZXJhLCJ2aWRlby1jYW1lcmEiOl8uQ2xyU2hhcGVWaWRl''@;'; put 'put ''b0NhbWVyYSxzaHVmZmxlOl8uQ2xyU2hhcGVTaHVmZmxlLCJ2b2x1bWUtdXAiOl8uQ2xyU2hhcGVWb2x1bWVVcCwidm9sdW1lLWRvd24iOl8uQ2xyU2hhcGVWb2x1bWVEb3duLCJ2b2x1bWUtbXV0ZSI6Xy5DbHJTaGFwZVZvbHVtZU11dGUsaGVhZHBob25lczpfLkNsclNoYXBlSGVhZHBob25l''@;'; put 'put ''cywiZmlsbS1zdHJpcCI6Xy5DbHJTaGFwZUZpbG1TdHJpcCwibXVzaWMtbm90ZSI6Xy5DbHJTaGFwZU11c2ljTm90ZSwiaW1hZ2UtZ2FsbGVyeSI6Xy5DbHJTaGFwZUltYWdlR2FsbGVyeSwicmVwbGF5LWFsbCI6Xy5DbHJTaGFwZVJlcGxheUFsbCwicmVwbGF5LW9uZSI6Xy5DbHJTaGFwZVJl''@;'; put 'put ''cGxheU9uZSwidmlkZW8tZ2FsbGVyeSI6Xy5DbHJTaGFwZVZpZGVvR2FsbGVyeSxtaWNyb3Bob25lOl8uQ2xyU2hhcGVNaWNyb3Bob25lLCJtaWNyb3Bob25lLW11dGUiOl8uQ2xyU2hhcGVNaWNyb3Bob25lTXV0ZX0sdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgi''@;'; put 'put ''Q2xhcml0eUljb25zIikmJndpbmRvdy5DbGFyaXR5SWNvbnMuYWRkKF8uTWVkaWFTaGFwZXMpfSwiLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3NvY2lhbC1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqISpcCiAg''@;'; put 'put ''ICAgICAgICAgICAgICAgICEqKiogLi9wcm9qZWN0cy9pY29ucy9zcmMvc2hhcGVzL3NvY2lhbC1zaGFwZXMudHMgKioqIQogICAgICAgICAgICAgICAgICBcKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRz''@;'; put 'put ''IGZvdW5kICovZnVuY3Rpb24ocSxfLEkpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkoXywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksXy5Tb2NpYWxTaGFwZXM9Xy5DbHJTaGFwZUhhc2h0YWc9Xy5DbHJTaGFwZUNyb3duPV8uQ2xyU2hhcGVUaHVtYnNEb3duPV8uQ2xyU2hh''@;'; put 'put ''cGVUaHVtYnNVcD1fLkNsclNoYXBlU2FkRmFjZT1fLkNsclNoYXBlTmV1dHJhbEZhY2U9Xy5DbHJTaGFwZUhhcHB5RmFjZT1fLkNsclNoYXBlUGljdHVyZT1fLkNsclNoYXBlQ2hhdEJ1YmJsZT1fLkNsclNoYXBlVGFsa0J1YmJsZXM9Xy5DbHJTaGFwZUhlYXJ0QnJva2VuPV8uQ2xyU2hhcGVI''@;'; put 'put ''ZWFydD1fLkNsclNoYXBlSW5ib3g9Xy5DbHJTaGFwZUZsYWc9Xy5DbHJTaGFwZVRhc2tzPV8uQ2xyU2hhcGVFbnZlbG9wZT1fLkNsclNoYXBlQm9va21hcms9Xy5DbHJTaGFwZUhhbGZTdGFyPV8uQ2xyU2hhcGVTdGFyPV8uQ2xyU2hhcGVTaGFyZT12b2lkIDA7dmFyIHk9SSgKLyohIC4uL3V0''@;'; put 'put ''aWxzL2Rlc2NyaXB0b3ItY29uZmlnICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9kZXNjcmlwdG9yLWNvbmZpZy50cyIpLGc9SSgKLyohIC4uL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yICovCiIuL3Byb2plY3RzL2ljb25zL3NyYy91dGlscy9zdmctdGFnLWdlbmVyYXRvci50cyIp''@;'; put 'put ''LEI9SSgKLyohIC4vY29yZS1zaGFwZXMgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy9jb3JlLXNoYXBlcy50cyIpO18uQ2xyU2hhcGVTaGFyZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTI3LjUz''@;'; put 'put ''LDI0YTUsNSwwLDAsMC0zLjYsMS41NUwxMS43NCwxOS40NWE0LjQ3LDQuNDcsMCwwLDAsMC0yLjhsMTIuMjEtNi4yMWE1LjEyLDUuMTIsMCwxLDAtMS4wNy0xLjdMMTAuNzksMTQuODlhNSw1LDAsMSwwLDAsNi4zM2wxMi4wNiw2LjA3QTQuOTMsNC45MywwLDAsMCwyMi41NCwyOWE1LDUsMCwx''@;'; put 'put ''LDAsNS01Wm0wLTIwYTMsMywwLDEsMS0zLDNBMywzLDAsMCwxLDI3LjUzLDRaTTcsMjFhMywzLDAsMSwxLDMtM0EzLDMsMCwwLDEsNywyMVpNMjcuNTMsMzJhMywzLDAsMSwxLDMtM0EzLDMsMCwwLDEsMjcuNTMsMzJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNv''@;'; put 'put ''bGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTI3LjUzLDI0YTUsNSwwLDAsMC0zLjYsMS41NUwxMS43NCwxOS40NWE0LjQ3LDQuNDcsMCwwLDAsMC0yLjhsMTIuMjEtNi4yMWE1LjEyLDUuMTIsMCwxLDAtMS4wNy0xLjdMMTAuNzksMTQuODlhNSw1LDAsMSwwLDAsNi4zM2wxMi4wNiw2LjA3''@;'; put 'put ''QTQuOTMsNC45MywwLDAsMCwyMi41NCwyOWE1LDUsMCwxLDAsNS01WiIvPicpLF8uQ2xyU2hhcGVTdGFyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjcuMTksMzRhMi4yMiwyLjIyLDAsMCwxLTEuMjQtLjM4''@;'; put 'put ''bC03LjQ2LTVhLjIyLjIyLDAsMCwwLS4yNSwwbC03LjQ2LDVBMi4yMiwyLjIyLDAsMCwxLDcuNCwzMS4yMWwyLjQ1LTguNjRhLjIzLjIzLDAsMCwwLS4wOC0uMjRMMi43MSwxNi43OGEyLjIyLDIuMjIsMCwwLDEsMS4yOS00bDktLjM0YS4yMy4yMywwLDAsMCwuMi0uMTVsMy4xLTguNDNhMi4y''@;'; put 'put ''MiwyLjIyLDAsMCwxLDQuMTcsMGwzLjEsOC40M2EuMjMuMjMsMCwwLDAsLjIuMTVsOSwuMzRhMi4yMiwyLjIyLDAsMCwxLDEuMjksNEwyNywyMi4zM2EuMjIuMjIsMCwwLDAtLjA4LjI0bDIuNDUsOC42NEEyLjIzLDIuMjMsMCwwLDEsMjcuMTksMzRabS04LjgyLTcuNDJBMi4yMSwyLjIxLDAs''@;'; put 'put ''MCwxLDE5LjYsMjdsNy40Niw1YS4yMi4yMiwwLDAsMCwuMzQtLjI1bC0yLjQ1LTguNjRhMi4yMSwyLjIxLDAsMCwxLC43Ny0yLjM1bDcuMDYtNS41NWEuMjIuMjIsMCwwLDAtLjEzLS40bC05LS4zNGEyLjIyLDIuMjIsMCwwLDEtMi0xLjQ2bC0zLjEtOC40M2EuMjIuMjIsMCwwLDAtLjQyLDBM''@;'; put 'put ''MTUuMDYsMTNhMi4yMiwyLjIyLDAsMCwxLTIsMS40NmwtOSwuMzRhLjIyLjIyLDAsMCwwLS4xMy40TDExLDIwLjc2YTIuMjIsMi4yMiwwLDAsMSwuNzcsMi4zNUw5LjMzLDMxLjc1YS4yMS4yMSwwLDAsMCwuMDguMjQuMi4yLDAsMCwwLC4yNiwwbDcuNDYtNUEyLjIyLDIuMjIsMCwwLDEsMTgu''@;'; put 'put ''MzYsMjYuNjJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTM0LDE2Ljc4YTIuMjIsMi4yMiwwLDAsMC0xLjI5LTRsLTktLjM0YS4yMy4yMywwLDAsMS0uMi0uMTVMMjAuNCwzLjg5YTIuMjIsMi4yMiwwLDAsMC00''@;'; put 'put ''LjE3LDBsLTMuMSw4LjQzYS4yMy4yMywwLDAsMS0uMi4xNWwtOSwuMzRhMi4yMiwyLjIyLDAsMCwwLTEuMjksNGw3LjA2LDUuNTVhLjIzLjIzLDAsMCwxLC4wOC4yNEw3LjM1LDMxLjIxYTIuMjIsMi4yMiwwLDAsMCwzLjM4LDIuNDVsNy40Ni01YS4yMi4yMiwwLDAsMSwuMjUsMGw3LjQ2LDVh''@;'; put 'put ''Mi4yLDIuMiwwLDAsMCwyLjU1LDAsMi4yLDIuMiwwLDAsMCwuODMtMi40bC0yLjQ1LTguNjRhLjIyLjIyLDAsMCwxLC4wOC0uMjRaIi8+JyksXy5DbHJTaGFwZUhhbGZTdGFyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''IiBkPSJNMzQsMTYuNzhhMi4yMiwyLjIyLDAsMCwwLTEuMjktNGwtOS0uMzRhLjIzLjIzLDAsMCwxLS4yLS4xNUwyMC40LDMuODlhMi4yMiwyLjIyLDAsMCwwLTQuMTcsMGwtMy4xLDguNDNhLjIzLjIzLDAsMCwxLS4yLjE1bC05LC4zNGEyLjIyLDIuMjIsMCwwLDAtMS4yOSw0bDcuMDYsNS41''@;'; put 'put ''NWEuMjIuMjIsMCwwLDEsLjA4LjI0TDcuMzUsMzEuMjFBMi4yMywyLjIzLDAsMCwwLDkuNDksMzRhMi4yMiwyLjIyLDAsMCwwLDEuMjQtLjM4bDcuNDYtNWEuMjIuMjIsMCwwLDEsLjI1LDBsNy40Niw1YTIuMjIsMi4yMiwwLDAsMCwzLjM4LTIuNDVsLTIuNDUtOC42NGEuMjMuMjMsMCwwLDEs''@;'; put 'put ''LjA4LS4yNFpNMTguMzMsMjYuNjJoMGEyLjIxLDIuMjEsMCwwLDAtMS4yNC4zOEw5LjYyLDMyYS4yMi4yMiwwLDAsMS0uMzQtLjI1bDIuNDUtOC42NEEyLjIxLDIuMjEsMCwwLDAsMTEsMjAuNzZMMy45LDE1LjIxYS4yMi4yMiwwLDAsMSwuMTMtLjRsOS0uMzRBMi4yMiwyLjIyLDAsMCwwLDE1''@;'; put 'put ''LDEzbDMuMS04LjQzYS4yLjIsMCwwLDEsLjIxLS4xNWgwWiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNCwxNi43OGEyLjIyLDIuMjIsMCwwLDAtMS4yOS00bC05LS4zNGEuMjMuMjMsMCwwLDEtLjItLjE1TDIw''@;'; put 'put ''LjQsMy44OWEyLjIyLDIuMjIsMCwwLDAtNC4xNywwbC0zLjEsOC40M2EuMjMuMjMsMCwwLDEtLjIuMTVsLTksLjM0YTIuMjIsMi4yMiwwLDAsMC0xLjI5LDRsNy4wNiw1LjU1YS4yMy4yMywwLDAsMSwuMDguMjRMNy4zNSwzMS4yMWEyLjIyLDIuMjIsMCwwLDAsMy4zOCwyLjQ1bDcuNDYtNWEu''@;'; put 'put ''MjIuMjIsMCwwLDEsLjI1LDBsNy40Niw1YTIuMiwyLjIsMCwwLDAsMi41NSwwLDIuMiwyLjIsMCwwLDAsLjgzLTIuNGwtMi40NS04LjY0YS4yMi4yMiwwLDAsMSwuMDgtLjI0Wk0yNC45LDIzLjExbDIuNDUsOC42NEEuMjIuMjIsMCwwLDEsMjcsMzJsLTcuNDYtNWEyLjIxLDIuMjEsMCwwLDAt''@;'; put 'put ''MS4yNC0uMzhoMFY0LjQ0aDBhLjIuMiwwLDAsMSwuMjEuMTVMMjEuNjIsMTNhMi4yMiwyLjIyLDAsMCwwLDIsMS40Nmw5LC4zNGEuMjIuMjIsMCwwLDEsLjEzLjRsLTcuMDYsNS41NUEyLjIxLDIuMjEsMCwwLDAsMjQuOSwyMy4xMVoiLz4nKSxfLkNsclNoYXBlQm9va21hcms9KDAsZy5jbHJJ''@;'; put 'put ''Y29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yNiwzNGEyLDIsMCwwLDEtMS40MS0uNThMMTgsMjYuODJsLTYuNTQsNi41MkEyLDIsMCwwLDEsOCwzMS45M1Y0YTIsMiwwLDAsMSwyLTJIMjZhMiwyLDAsMCwxLDIsMlYzMmEyLDIs''@;'; put 'put ''MCwwLDEtMiwyWm0wLTJoMFY0SDEwVjMxLjkzTDE4LDI0WiIvPlxuICAgICAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0yNiwySDEwQTIsMiwwLDAsMCw4LDRWMzEuOTNhMiwyLDAsMCwwLDMuNDIsMS40MWw2LjU0LTYuNTIsNi42''@;'; put 'put ''Myw2LjZBMiwyLDAsMCwwLDI4LDMyVjRBMiwyLDAsMCwwLDI2LDJaIi8+JyksXy5DbHJTaGFwZUVudmVsb3BlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAs''@;'; 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 ''MCwwLDAsMjYuODUsMS4xNFoiLz4nKSxfLkNsclNoYXBlVGFza3M9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0yOS4yOSwzNEg2LjcxQTEuNywxLjcsMCwwLDEsNSwzMi4zMVY2LjY5QTEuNzUsMS43NSwwLDAs''@;'; 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 ''bGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPicpLF8uQ2xyU2hhcGVGbGFnPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0xIiBkPSJNNiwzNGExLDEsMCwwLDEtMS0xVjNBMSwxLDAsMCwxLDcsM1YzM0ExLDEsMCwwLDEsNiwzNFoiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTMwLjU1LDMuODJhMSwxLDAsMCwwLTEsMCwx''@;'; put 'put ''NC45LDE0LjksMCwwLDEtNi4xMywxLjE2LDEzLjExLDEzLjExLDAsMCwxLTUuMTgtMS40OSwxMi43OCwxMi43OCwwLDAsMC01LTEuNDVBMTAuODYsMTAuODYsMCwwLDAsOSwyLjg1VjUuMDhBOC44LDguOCwwLDAsMSwxMy4yNSw0YTExLjIyLDExLjIyLDAsMCwxLDQuMiwxLjI4LDE0Ljg0LDE0''@;'; put 'put ''Ljg0LDAsMCwwLDYsMS42NkExOC43NSwxOC43NSwwLDAsMCwyOSw2LjEyVjE4Ljk1YTE2LjE2LDE2LjE2LDAsMCwxLTUuNTguOTMsMTMuMTEsMTMuMTEsMCwwLDEtNS4xOC0xLjQ5LDEyLjc4LDEyLjc4LDAsMCwwLTUtMS40NUExMC44NiwxMC44NiwwLDAsMCw5LDE3Ljc5VjIwYTguOCw4Ljgs''@;'; put 'put ''MCwwLDEsNC4yNS0xLjA4LDExLjIyLDExLjIyLDAsMCwxLDQuMiwxLjI4LDE0Ljg0LDE0Ljg0LDAsMCwwLDYsMS42NiwxNi43OSwxNi43OSwwLDAsMCw3LTEuMzcsMSwxLDAsMCwwLC41NS0uODlWNC42N0ExLDEsMCwwLDAsMzAuNTUsMy44MloiLz5cbiAgICAgICAgICAgICAgICA8cGF0aCBj''@;'; put 'put ''bGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNNS45MiwyYTEsMSwwLDAsMC0xLDFWMzNhMSwxLDAsMCwwLDIsMFYzQTEsMSwwLDAsMCw1LjkyLDJaIi8+XG4gICAgICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIg''@;'; put 'put ''ZD0iTTMwLjUsMy44MmExLDEsMCwwLDAtMSwwLDE0LjksMTQuOSwwLDAsMS02LjEzLDEuMTYsMTMuMTEsMTMuMTEsMCwwLDEtNS4xOC0xLjQ5QTEyLjc4LDEyLjc4LDAsMCwwLDEzLjIsMiwxMC44NiwxMC44NiwwLDAsMCw5LDIuODVWMjBhOC44LDguOCwwLDAsMSw0LjI1LTEuMDgsMTEuMjIs''@;'; put 'put ''MTEuMjIsMCwwLDEsNC4yLDEuMjgsMTQuODQsMTQuODQsMCwwLDAsNiwxLjY2LDE2Ljc5LDE2Ljc5LDAsMCwwLDctMS4zNywxLDEsMCwwLDAsLjU1LS44OVY0LjY3QTEsMSwwLDAsMCwzMC41LDMuODJaIi8+JyksXy5DbHJTaGFwZUluYm94PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0x''@;'; put 'put ''Mi4yMywxMy4wOWExLDEsMCwwLDAsMCwxLjQxTDE4LDIwLjNsNS43OS01Ljc5YTEsMSwwLDAsMC0xLjQxLTEuNDFMMTksMTYuNDdWMkExLDEsMCwwLDAsMTgsMWExLDEsMCwwLDAtMSwxdjE0LjVsLTMuMzgtMy4zOEExLDEsMCwwLDAsMTIuMjMsMTMuMDlaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjUsNUgyMlY3aDdWMjFIMjMuNjFsLS4xLjg5YTUuNDIsNS40MiwwLDAsMS0xMC43NywwbC0uMS0uODlIN1Y3aDdWNUg2LjVBMS41LDEuNSwwLDAsMCw1LDYuNXYyNUExLjUsMS41LDAsMCwwLDYuNSwz''@;'; put 'put ''M2gyM0ExLjUsMS41LDAsMCwwLDMxLDMxLjVWNi41QTEuNSwxLjUsMCwwLDAsMjkuNSw1Wk0yOSwzMUg3VjIzaDMuOTFhNy40Miw3LjQyLDAsMCwwLDE0LjQ0LDBIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTEyLjIzLDEzLjA5YTEsMSwwLDAsMCwwLDEuNDFMMTgsMjAuM2w1Ljc5LTUuNzlhMSwxLDAsMCwwLTEuNDEtMS40MUwxOSwxNi40N1YyQTEsMSwwLDAsMCwxOCwxYTEsMSwwLDAsMC0xLDF2MTQuNWwtMy4zOC0zLjM4QTEsMSwwLDAsMCwxMi4yMywxMy4wOVoiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lLS1iYWRnZWQgY2xyLWktb3V0bGluZS1wYXRoLTEtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMwLDEzLjVhNy41Miw3LjUyLDAsMCwxLTEtLjA3VjIxSDIzLjYxbC0uMS44OWE1LjQyLDUuNDIsMCwwLDEtMTAuNzcsMGwtLjEtLjg5SDdWN2g3VjVINi41QTEuNSwxLjUs''@;'; put 'put ''MCwwLDAsNSw2LjV2MjVBMS41LDEuNSwwLDAsMCw2LjUsMzNoMjNBMS41LDEuNSwwLDAsMCwzMSwzMS41VjEzLjQzQTcuNTIsNy41MiwwLDAsMSwzMCwxMy41Wk0yOSwzMUg3VjIzaDMuOTFhNy40Miw3LjQyLDAsMCwwLDE0LjQ0LDBIMjlaIiBjbGFzcz0iY2xyLWktb3V0bGluZS0tYmFkZ2Vk''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLW91dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtMy0tYmFkZ2VkIGNsci1pLWJhZGdlIi8+JyksXy5DbHJTaGFwZUhlYXJ0''@;'; put 'put ''PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwzMi40M2ExLDEsMCwwLDEtLjYxLS4yMUMxMS44MywyNy45LDgsMjQuMTgsNS4zMiwyMC41MSwxLjksMTUuODIsMS4xMiwxMS40OSwzLDcuNjRjMS4zNC0yLjc1LDUuMTktNSw5LjY5LTMuNjlBOS44Nyw5Ljg3LDAsMCwxLDE4LDcuNzJh''@;'; put 'put ''OS44Nyw5Ljg3LDAsMCwxLDUuMzEtMy43N2M0LjQ5LTEuMjksOC4zNS45NCw5LjY5LDMuNjksMS44OCwzLjg1LDEuMSw4LjE4LTIuMzIsMTIuODdDMjgsMjQuMTgsMjQuMTcsMjcuOSwxOC42MSwzMi4yMkExLDEsMCwwLDEsMTgsMzIuNDNaTTEwLjEzLDUuNThBNS45LDUuOSwwLDAsMCw0Ljgs''@;'; put 'put ''OC41MWMtMS41NSwzLjE4LS44NSw2LjcyLDIuMTQsMTAuODFBNTcuMTMsNTcuMTMsMCwwLDAsMTgsMzAuMTYsNTcuMTMsNTcuMTMsMCwwLDAsMjkuMDYsMTkuMzNjMy00LjEsMy42OS03LjY0LDIuMTQtMTAuODEtMS0yLTQtMy41OS03LjM0LTIuNjVhOCw4LDAsMCwwLTQuOTQsNC4yLDEsMSww''@;'; put 'put ''LDAsMS0xLjg1LDAsNy45Myw3LjkzLDAsMCwwLTQuOTQtNC4yQTcuMzEsNy4zMSwwLDAsMCwxMC4xMyw1LjU4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMyw3LjY0Yy0xLjM0LTIuNzUtNS4yLTUtOS42OS0z''@;'; put 'put ''LjY5QTkuODcsOS44NywwLDAsMCwxOCw3LjcyYTkuODcsOS44NywwLDAsMC01LjMxLTMuNzdDOC4xOSwyLjY2LDQuMzQsNC44OSwzLDcuNjRjLTEuODgsMy44NS0xLjEsOC4xOCwyLjMyLDEyLjg3QzgsMjQuMTgsMTEuODMsMjcuOSwxNy4zOSwzMi4yMmExLDEsMCwwLDAsMS4yMywwYzUuNTUt''@;'; put 'put ''NC4zMSw5LjM5LTgsMTIuMDctMTEuNzFDMzQuMSwxNS44MiwzNC44OCwxMS40OSwzMyw3LjY0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLF8uQ2xyU2hhcGVIZWFydEJyb2tlbj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMsNy42NGMtMS4zNC0y''@;'; put 'put ''Ljc1LTUuMDktNS05LjY5LTMuNjlhOS44Nyw5Ljg3LDAsMCwwLTYsNC44NCwxOC45LDE4LjksMCwwLDAtMi4yMyw1LjMzbDUuMjgsMi4zNC00LjYsNC4zNywzLjQ5LDQuMSwxLjUyLTEuM0wxOC41NCwyMWw1LjQtNS4xM0wxNy41OCwxM0ExNi4yMywxNi4yMywwLDAsMSwxOS43NSw4LjlhNy42''@;'; put 'put ''OCw3LjY4LDAsMCwxLDQuMTEtM2MzLjM0LS44OSw2LjM0LjYsNy4zNCwyLjY1LDEuNTUsMy4xOC44NSw2LjcyLTIuMTQsMTAuODFBNTcuMTYsNTcuMTYsMCwwLDEsMTgsMzAuMTYsNTcuMTYsNTcuMTYsMCwwLDEsNi45NCwxOS4zM2MtMy00LjEtMy42OS03LjY0LTIuMTQtMTAuODFhNS45LDUu''@;'; put 'put ''OSwwLDAsMSw1LjMzLTIuOTMsNy4zMSw3LjMxLDAsMCwxLDIsLjI5LDcuNyw3LjcsMCwwLDEsMy4zOCwybC4xNS0uM2ExMC42NiwxMC42NiwwLDAsMSwxLTEuNDEsOS42NCw5LjY0LDAsMCwwLTMuOTQtMi4yMkM4LjIsMi42Niw0LjM0LDQuODksMyw3LjY0Yy0xLjg4LDMuODUtMS4xLDguMTgs''@;'; put 'put ''Mi4zMiwxMi44N0M4LDI0LjE4LDExLjgzLDI3LjksMTcuMzksMzIuMjJhMSwxLDAsMCwwLDEuMjMsMGM1LjU1LTQuMzEsOS4zOS04LDEyLjA3LTExLjcxQzM0LjEsMTUuODIsMzQuODgsMTEuNDksMzMsNy42NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMsNy42NGMtMS4zNC0yLjc1LTUuMi01LTkuNjktMy42OUExMS41NSwxMS41NSwwLDAsMCwxOC4xOSw3LjVhMTYuODksMTYuODksMCwwLDAtMi40OCw0LjU2TDIyLjI3LDE1LDE2LjcsMjAuMjYsMTksMjNsLTEuNTcsMS4zNC0zLjYtNC4yMiw0Ljc0''@;'; put 'put ''LTQuNTEtNS40NC0yLjQxYTE5LjQ5LDE5LjQ5LDAsMCwxLDIuMy01LjUsMTQuNzcsMTQuNzcsMCwwLDEsMS4wNi0xLjU0bC4wNiwwYTkuNjYsOS42NiwwLDAsMC0zLjg5LTIuMThDOC4xOSwyLjY2LDQuMzQsNC44OSwzLDcuNjRjLTEuODgsMy44NS0xLjEsOC4xOCwyLjMyLDEyLjg3QzgsMjQu''@;'; put 'put ''MTgsMTEuODMsMjcuOSwxNy4zOSwzMi4yMmExLDEsMCwwLDAsMS4yMywwYzUuNTUtNC4zMSw5LjM5LTgsMTIuMDctMTEuNzFDMzQuMSwxNS44MiwzNC44OCwxMS40OSwzMyw3LjY0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLF8uQ2xyU2hhcGVUYWxrQnVi''@;'; 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 ''ICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWJhZGdlZCBjbHItaS1iYWRnZSIvPicpLF8uQ2xyU2hhcGVDaGF0QnViYmxlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwyLjVj''@;'; 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+JyksXy5DbHJTaGFwZVBpY3R1cmU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMyLDRINEEyLDIsMCwwLDAsMiw2VjMwYTIsMiww''@;'; 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+JyksXy5DbHJTaGFwZUhhcHB5RmFjZT0oMCxnLmNsckljb25TVkcp''@;'; put 'put ''KCc8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9''@;'; put 'put ''IjEwLjg5IiBjeT0iMTMuODkiIHI9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNS4wNSIgY3k9IjEzLjg5IiByPSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTE4LjEzLDI4LjIxYTguNjcsOC42NywwLDAsMCw4LjI2LTZIOS44N0E4LjY3LDguNjcsMCwwLDAsMTguMTMsMjguMjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE4LDJB''@;'; put 'put ''MTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlpNOC44OSwxMy44OWEyLDIsMCwxLDEsMiwyQTIsMiwwLDAsMSw4Ljg5LDEzLjg5Wm05LjI0LDE0LjMyYTguNjcsOC42NywwLDAsMS04LjI2LTZIMjYuMzhBOC42Nyw4LjY3LDAsMCwxLDE4LjEzLDI4LjIxWm02LjkzLTEyLjMyYTIs''@;'; put 'put ''MiwwLDEsMSwyLTJBMiwyLDAsMCwxLDI1LjA1LDE1Ljg5WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPicpLF8uQ2xyU2hhcGVOZXV0cmFsRmFjZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuMDUsMjIuMDZoLTEyYTEsMSwwLDAsMCwwLDJoMTJhMSwx''@;'; put 'put ''LDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0wLDMwQTE0LDE0LDAsMSwxLDMyLDE4LDE0LDE0LDAsMCwxLDE4LDMyWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjI1LjE2IiBjeT0iMTQuMjgiIHI9IjEuOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9''@;'; put 'put ''IjExLjE2IiBjeT0iMTQuMjgiIHI9IjEuOCIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTcuMDUsMjEuMDZhMSwxLDAsMCwxLTEsMWgtMTJh''@;'; put 'put ''MSwxLDAsMCwxLDAtMmgxMkExLDEsMCwwLDEsMjUuMDUsMjMuMDZaTTI3LDE0LjI4YTEuOCwxLjgsMCwxLDEtMS44LTEuOEExLjgsMS44LDAsMCwxLDI3LDE0LjI4Wm0tMTUuOCwxLjhhMS44LDEuOCwwLDEsMSwxLjgtMS44QTEuOCwxLjgsMCwwLDEsMTEuMTYsMTYuMDhaIiBjbGFzcz0iY2xy''@;'; put 'put ''LWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+JyksXy5DbHJTaGFwZVNhZEZhY2U9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDJBMTYsMTYsMCwxLDAsMzQsMTgsMTYsMTYsMCwwLDAsMTgsMlptMCwzMEExNCwxNCwwLDEsMSwzMiwxOCwxNCwxNCwwLDAsMSwxOCwzMloiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIyNS4xNiIgY3k9IjE0LjI4IiByPSIxLjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8Y2lyY2xlIGN4PSIx''@;'; put 'put ''MS40MSIgY3k9IjE0LjI4IiByPSIxLjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTguMTYsMjBhOSw5LDAsMCwwLTcuMzMsMy43OCwxLDEsMCwxLDAsMS42MywxLjE2LDcsNywwLDAsMSwxMS4zMS0uMTMsMSwx''@;'; put 'put ''LDAsMCwwLDEuNi0xLjJBOSw5LDAsMCwwLDE4LjE2LDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCwwLDE4LDJabTksMTIuMjhhMS44LDEuOCwwLDEs''@;'; put 'put ''MS0xLjgtMS44QTEuOCwxLjgsMCwwLDEsMjcsMTQuMjhabS0xNS41NSwxLjhhMS44LDEuOCwwLDEsMSwxLjgtMS44QTEuOCwxLjgsMCwwLDEsMTEuNDEsMTYuMDhabTE0LDcuNTNhMSwxLDAsMCwxLTEuNiwxLjIsNyw3LDAsMCwwLTExLjMxLjEzLDEsMSwwLDEsMS0xLjYzLTEuMTYsOSw5LDAs''@;'; put 'put ''MCwxLDE0LjU0LS4xN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz4nKSxfLkNsclNoYXBlVGh1bWJzVXA9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI0LDI2Yy0yLjkyLDEuODItNy4zLDQtOS4zNyw0aC02YTE2LjY4LDE2LjY4LDAsMCwxLTMuMzEtNi4w''@;'; put 'put ''OEEyNi43MSwyNi43MSwwLDAsMSw0LDE2aDlWNmEyLjA1LDIuMDUsMCwwLDEsMS4yNi0xLjY5Yy43NywyLDIuNjIsNi41Nyw0LjIzLDguNzJBMTEuMzksMTEuMzksMCwwLDAsMjQsMTYuOTFWMTQuNzhhOS4xMyw5LjEzLDAsMCwxLTMuOTEtM2MtMS44OC0yLjUxLTQuMjktOS4xMS00LjMxLTku''@;'; put 'put ''MTdBMSwxLDAsMCwwLDE0LjU5LDJDMTMuMjUsMi4zOCwxMSwzLjYsMTEsNnY4SDNhMSwxLDAsMCwwLTEsMSwyOSwyOSwwLDAsMCwxLjQsOS42MmMxLjg5LDUuNCw0LjEsNy4xNCw0LjIsNy4yMmExLDEsMCwwLDAsLjYxLjIxaDYuNDJjMi40MywwLDYuNTUtMiw5LjM3LTMuNjNaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zNCwzMUgyN2ExLDEsMCwwLDEtMS0xVjE0YTEsMSwwLDAsMSwxLTFoN1ptLTYtMmg0VjE1SDI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+''@;'; put 'put ''XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTkuNjMsMTIuMTJDMTcuNTEsOS4yOCwxNC44OCwyLDE0Ljg4LDJTMTIsMi44MywxMiw1LjI1VjE1SDIuMjNhMjkuNDYsMjkuNDYsMCwwLDAsMS40NCw5Ljc0QzUuNjEsMzAuMjcsNy44LDMyLDcuOCwzMmg2Ljg2QzE2LjksMzIsMjEsMzAuMDYsMjQs''@;'; put 'put ''MjguMzFWMTUuNTFBMTAuODQsMTAuODQsMCwwLDEsMTkuNjMsMTIuMTJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI3LDEzYTEsMSwwLDAsMC0xLDFWMzBhMSwxLDAsMCwwLDEsMWg3VjEzWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxfLkNsclNoYXBlVGh1bWJzRG93bj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTIsMTBjMi45Mi0xLjgyLDcuMy00LDkuMzctNGg2YTE2LjY4LDE2LjY4LDAsMCwxLDMuMzEsNi4wOEEyNi43MSwyNi43MSwwLDAsMSwzMiwyMEgy''@;'; put 'put ''M1YzMGEyLjA1LDIuMDUsMCwwLDEtMS4yNiwxLjY5Yy0uNzctMi0yLjYyLTYuNTctNC4yMy04LjcyQTExLjM5LDExLjM5LDAsMCwwLDEyLDE5LjA5djIuMTNhOS4xMyw5LjEzLDAsMCwxLDMuOTEsM2MxLjg4LDIuNTEsNC4yOSw5LjExLDQuMzEsOS4xN2ExLDEsMCwwLDAsMS4xOS42M0MyMi43''@;'; put 'put ''NSwzMy42MiwyNSwzMi40LDI1LDMwVjIyaDhhMSwxLDAsMCwwLDEtMSwyOSwyOSwwLDAsMC0xLjQtOS42MmMtMS44OS01LjQtNC4xLTcuMTQtNC4yLTcuMjJBMSwxLDAsMCwwLDI3Ljc5LDRIMjEuMzdDMTguOTQsNCwxNC44Myw2LDEyLDcuNjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHIt''@;'; put 'put ''aS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yLDVIOWExLDEsMCwwLDEsMSwxVjIyYTEsMSwwLDAsMS0xLDFIMlpNOCw3SDRWMjFIOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0i''@;'; put 'put ''TTE2LjM3LDIzLjg0YzIuMTIsMi44NCw0Ljc2LDEwLjA3LDQuNzYsMTAuMDdTMjQsMzMuMTMsMjQsMzAuNzFWMjFoOS43N2EyOS40NiwyOS40NiwwLDAsMC0xLjQ0LTkuNzRDMzAuMzksNS42OCwyOC4yLDQsMjguMiw0SDIxLjM1QzE5LjEsNCwxNSw1LjksMTIsNy42NXYxMi44QTEwLjg0LDEw''@;'; put 'put ''Ljg0LDAsMCwxLDE2LjM3LDIzLjg0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik05LDIzYTEsMSwwLDAsMCwxLTFWNkExLDEsMCwwLDAsOSw1SDJWMjNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0''@;'; put 'put ''aC0yIiAvPicpLF8uQ2xyU2hhcGVDcm93bj0oMCxnLmNsckljb25TVkcpKCdcbiAgPHBhdGggZD0iTTQsMTMuMzNBMS4zOSwxLjM5LDAsMSwwLDIuNiwxNC43MiwxLjM5LDEuMzksMCwwLDAsNCwxMy4zM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+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 ''biAgJyksXy5DbHJTaGFwZUhhc2h0YWc9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMiwxMkgyNS4zNGwxLjU1LTcuNzRhMSwxLDAsMCwwLTItLjM5TDIzLjMsMTJIMTUuMTFsMS41NS03Ljc0YTEsMSwwLDAsMC0yLS4zOUwxMy4wNywxMkg2YTEsMSwwLDAsMCwwLDJoNi42N2wt''@;'; put 'put ''MS42LDhINGExLDEsMCwwLDAsMCwyaDYuNjZMOS4xMSwzMS43NGExLDEsMCwwLDAsLjc5LDEuMTcuNjguNjgsMCwwLDAsLjIsMCwxLDEsMCwwLDAsMS0uOEwxMi43LDI0aDguMTlsLTEuNTUsNy43NGExLDEsMCwwLDAsLjc5LDEuMTcuNjIuNjIsMCwwLDAsLjE5LDAsMSwxLDAsMCwwLDEtLjhM''@;'; put 'put ''MjIuOTMsMjRIMzBhMSwxLDAsMCwwLDAtMkgyMy4zM2wxLjYxLThIMzJhMSwxLDAsMCwwLDAtMlpNMjEuMjksMjJIMTMuMWwxLjYxLThIMjIuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG5cbiAgPHBhdGggZD0iTTMxLjg3LDEwSDI2LjMybDEtNC44''@;'; put 'put ''M0ExLDEsMCwwLDAsMjYuMzUsNGgtMmExLDEsMCwwLDAtMSwuNzhMMjIuMzMsMTBoLTUuNGwxLTQuODNBMSwxLDAsMCwwLDE3LDRIMTVhMSwxLDAsMCwwLTEsLjc4TDEzLDEwSDdhMSwxLDAsMCwwLTEsLjhsLS40MSwyYTEsMSwwLDAsMCwxLDEuMmg1LjU1TDEwLjUsMjJoLTZhMSwxLDAsMCww''@;'; put 'put ''LTEsLjhsLS40MSwyYTEsMSwwLDAsMCwxLDEuMkg5LjY4bC0xLDQuODNhMSwxLDAsMCwwLDEsMS4xN2gyYTEsMSwwLDAsMCwuOTUtLjc4TDEzLjY3LDI2aDUuNGwtMSw0LjgzQTEsMSwwLDAsMCwxOSwzMmgyYTEsMSwwLDAsMCwxLS43OEwyMy4wNSwyNmg2YTEsMSwwLDAsMCwxLS44bC40LTJh''@;'; put 'put ''MSwxLDAsMCwwLTEtMS4ySDIzLjg3bDEuNjMtOGg2YTEsMSwwLDAsMCwxLS44bC40MS0yQTEsMSwwLDAsMCwzMS44NywxMFptLTEyLDEyaC01LjRsMS42NC04aDUuNFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgJyksXy5Tb2NpYWxTaGFwZXM9e2Nyb3du''@;'; put 'put ''Ol8uQ2xyU2hhcGVDcm93bixzaGFyZTpfLkNsclNoYXBlU2hhcmUsc3RhcjpfLkNsclNoYXBlU3RhciwiaGFsZi1zdGFyIjpfLkNsclNoYXBlSGFsZlN0YXIsYm9va21hcms6Xy5DbHJTaGFwZUJvb2ttYXJrLGVudmVsb3BlOl8uQ2xyU2hhcGVFbnZlbG9wZSxjYWxlbmRhcjpCLkNsclNoYXBl''@;'; put 'put ''Q2FsZW5kYXIsZXZlbnQ6Qi5DbHJTaGFwZUV2ZW50LHRhc2tzOl8uQ2xyU2hhcGVUYXNrcyxmbGFnOl8uQ2xyU2hhcGVGbGFnLGluYm94Ol8uQ2xyU2hhcGVJbmJveCxoYXNodGFnOl8uQ2xyU2hhcGVIYXNodGFnLGhlYXJ0Ol8uQ2xyU2hhcGVIZWFydCwiaGVhcnQtYnJva2VuIjpfLkNsclNo''@;'; put 'put ''YXBlSGVhcnRCcm9rZW4sInRhbGstYnViYmxlcyI6Xy5DbHJTaGFwZVRhbGtCdWJibGVzLCJjaGF0LWJ1YmJsZSI6Xy5DbHJTaGFwZUNoYXRCdWJibGUscGljdHVyZTpfLkNsclNoYXBlUGljdHVyZSwiaGFwcHktZmFjZSI6Xy5DbHJTaGFwZUhhcHB5RmFjZSwibmV1dHJhbC1mYWNlIjpfLkNs''@;'; put 'put ''clNoYXBlTmV1dHJhbEZhY2UsInNhZC1mYWNlIjpfLkNsclNoYXBlU2FkRmFjZSwidGh1bWJzLXVwIjpfLkNsclNoYXBlVGh1bWJzVXAsInRodW1icy1kb3duIjpfLkNsclNoYXBlVGh1bWJzRG93bn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KF8uU29jaWFsU2hhcGVzLCJmYXZvcml0ZSIsKDAs''@;'; put 'put ''eS5kZXNjcmlwdG9yQ29uZmlnKShfLlNvY2lhbFNoYXBlcy5zdGFyKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KF8uU29jaWFsU2hhcGVzLCJlbWFpbCIsKDAseS5kZXNjcmlwdG9yQ29uZmlnKShfLlNvY2lhbFNoYXBlcy5lbnZlbG9wZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLlNvY2lh''@;'; put 'put ''bFNoYXBlcywiZGF0ZSIsKDAseS5kZXNjcmlwdG9yQ29uZmlnKShfLlNvY2lhbFNoYXBlcy5jYWxlbmRhcikpLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuaGFzT3duUHJvcGVydHkoIkNsYXJpdHlJY29ucyIpJiZ3aW5kb3cuQ2xhcml0eUljb25zLmFkZChfLlNvY2lhbFNoYXBlcyl9LCIu''@;'; put 'put ''L3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdGVjaG5vbG9neS1zaGFwZXMudHMiOgovKiEqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90''@;'; put 'put ''ZWNobm9sb2d5LXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyohIG5vIHN0YXRpYyBleHBvcnRzIGZvdW5kICovZnVuY3Rpb24ocSxfLEkpeyJ1c2Ugc3RyaWN0IjtPYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkoXywiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksXy5DbHJTaGFwZVZNV0FwcD1fLkNsclNoYXBlVk09Xy5DbHJTaGFwZVJvdXRlcj1fLkNsclNoYXBlTmV0d29ya1N3aXRjaD1fLkNsclNoYXBlTmV0d29ya1NldHRpbmdzPV8uQ2xyU2hhcGVOZXR3b3JrR2xvYmU9''@;'; put 'put ''Xy5DbHJTaGFwZVRhYmxldD1fLkNsclNoYXBlTW9iaWxlPV8uQ2xyU2hhcGVCYXR0ZXJ5PV8uQ2xyU2hhcGVBcHBsaWNhdGlvbj1fLkNsclNoYXBlQ29kZT1fLkNsclNoYXBlVGVybWluYWw9Xy5DbHJTaGFwZURpc3BsYXk9Xy5DbHJTaGFwZUNvbXB1dGVyPV8uQ2xyU2hhcGVGbG9wcHk9Xy5D''@;'; put 'put ''bHJTaGFwZVBsdWdpbj1fLkNsclNoYXBlRG93bmxvYWRDbG91ZD1fLkNsclNoYXBlVXBsb2FkQ2xvdWQ9Xy5DbHJTaGFwZUV4cG9ydD1fLkNsclNoYXBlSW1wb3J0PV8uQ2xyU2hhcGVTaGllbGRYPV8uQ2xyU2hhcGVTaGllbGQ9Xy5DbHJTaGFwZVNoaWVsZENoZWNrPV8uQ2xyU2hhcGVSZXNv''@;'; put 'put ''dXJjZVBvb2w9Xy5DbHJTaGFwZURhdGFDbHVzdGVyPV8uQ2xyU2hhcGVNZW1vcnk9Xy5DbHJTaGFwZUNQVT1fLkNsclNoYXBlQnVpbGRpbmc9Xy5DbHJTaGFwZUFwcGxpY2F0aW9ucz1fLkNsclNoYXBlQ2x1c3Rlcj1fLkNsclNoYXBlU3RvcmFnZT1fLkNsclNoYXBlSG9zdD1fLkNsclNoYXBl''@;'; put 'put ''RGFzaGJvYXJkPV8uQ2xyU2hhcGVNb3VzZT1fLkNsclNoYXBlS2V5Ym9hcmQ9Xy5DbHJTaGFwZURldmljZXM9Xy5DbHJTaGFwZUJhY2t1cD1fLkNsclNoYXBlQmFja3VwUmVzdG9yZT1fLkNsclNoYXBlSGFyZERpc2s9Xy5DbHJTaGFwZVJhY2tTZXJ2ZXI9Xy5DbHJTaGFwZVdpZmk9Xy5DbHJT''@;'; put 'put ''aGFwZUJ1bmRsZT1fLkNsclNoYXBlQmxvY2tzR3JvdXA9Xy5DbHJTaGFwZUJsb2NrPV8uQ2xyU2hhcGVMYXllcnM9Xy5DbHJTaGFwZVVuaW5zdGFsbD1fLkNsclNoYXBlSW5zdGFsbD1fLkNsclNoYXBlTm9XaWZpPV8uQ2xyU2hhcGVQaG9uZUhhbmRzZXQ9Xy5DbHJTaGFwZVJ1bGVyUGVuY2ls''@;'; put 'put ''PXZvaWQgMCxfLlRlY2hub2xvZ3lTaGFwZXM9Xy5DbHJTaGFwZUZpbGVTaGFyZTI9Xy5DbHJTaGFwZUNpQ2Q9Xy5DbHJTaGFwZUFuaW1hdGlvbj1fLkNsclNoYXBlVGFwZURyaXZlPV8uQ2xyU2hhcGVNZWRpYUNoYW5nZXI9Xy5DbHJDb250cm9sTHVuPV8uQ2xyU2hhcGVQb2Q9Xy5DbHJTaGFw''@;'; put 'put ''ZU5vZGU9Xy5DbHJTaGFwZU5hbWVzcGFjZT1fLkNsclNoYXBlTm9kZXM9Xy5DbHJTaGFwZU5vZGVHcm91cD1fLkNsclNoYXBlU3RvcmFnZUFkYXB0ZXI9Xy5DbHJTaGFwZUhvc3RHcm91cD1fLkNsclNoYXBlU3F1aWQ9Xy5DbHJTaGFwZUNhcGFjaXRvcj1fLkNsclNoYXBlUmVzaXN0b3I9Xy5D''@;'; put 'put ''bHJTaGFwZUluZHVjdG9yPV8uQ2xyU2hhcGVSYWRhcj1fLkNsclNoYXBlVXNiPV8uQ2xyU2hhcGVRckNvZGU9Xy5DbHJTaGFwZUZpbGVTaGFyZT1fLkNsclNoYXBlQ29udGFpbmVyVm9sdW1lPV8uQ2xyU2hhcGVDb250YWluZXI9Xy5DbHJTaGFwZUNkRHZkPV8uQ2xyU2hhcGVCYXJDb2RlPV8u''@;'; put 'put ''Q2xyU2hhcGVBdG9tPV8uQ2xyU2hhcGVBc3NpZ25Vc2VyPV8uQ2xyU2hhcGVQcm9jZXNzT25WTT1fLkNsclNoYXBlQmx1ZXRvb3RoT2ZmPV8uQ2xyU2hhcGVCbHVldG9vdGg9Xy5DbHJTaGFwZVNTRD1fLkNsclNoYXBlTlZNZT1fLkNsclNoYXBlSGFyZERyaXZlRGlza3M9Xy5DbHJTaGFwZUhh''@;'; put 'put ''cmREcml2ZT1fLkNsclNoYXBlQWRtaW5pc3RyYXRvcj1fLkNsclNoYXBlRmxhc2s9Xy5DbHJTaGFwZUhlbGl4PV8uQ2xyU2hhcGVEZXBsb3k9Xy5DbHJTaGFwZUNsb3VkVHJhZmZpYz1fLkNsclNoYXBlQ2xvdWRTY2FsZT1fLkNsclNoYXBlQ2xvdWROZXR3b3JrPV8uQ2xyU2hhcGVVbmxpbms9''@;'; put 'put ''Xy5DbHJTaGFwZUxpbms9Xy5DbHJTaGFwZURpc2Nvbm5lY3Q9Xy5DbHJTaGFwZUNvbm5lY3Q9Xy5DbHJTaGFwZVVuYXJjaGl2ZT1fLkNsclNoYXBlQXJjaGl2ZT1fLkNsclNoYXBlQ2VydGlmaWNhdGU9dm9pZCAwO3ZhciB5PUkoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoi''@;'; put 'put ''Li9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxnPUkoCi8qISAuLi91dGlscy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtfLkNsclNoYXBlUnVsZXJQZW5jaWw9KDAs''@;'; put 'put ''Zy5jbHJJY29uU1ZHKSgnPHBvbHlnb24gY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIHBvaW50cz0iOSAxNy40MSA5IDI3IDE4LjU5IDI3IDE2LjU5IDI1IDExIDI1IDExIDE5LjQxIDkgMTcuNDEiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMzQuODcsMzIuMjksMzIsMjkuMzhWMzJINFYyNy44NUg2di0xLjZINFYxOS42SDZWMThINFYxMS42SDZWMTBINFY0LjQxTDE5Ljk0LDIwLjI2VjE3LjQ0TDMuNzEsMS4yOUExLDEsMCwwLDAsMiwyVjMzYTEsMSwwLDAsMCwxLDFIMzQu''@;'; put 'put ''MTZhMSwxLDAsMCwwLC43MS0xLjcxWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yNCwzMGg0YTIsMiwwLDAsMCwyLTJWOC43TDI3LjcsNC40N2EyLDIsMCwwLDAtMS43Ni0xaDBhMiwyLDAsMCwwLTEuNzYsMS4w''@;'; put 'put ''OEwyMiw4LjcyVjI4QTIsMiwwLDAsMCwyNCwzMFpNMjQsOS4ybDEuOTQtMy43N0wyOCw5LjIxVjI0SDI0Wm0wLDE2LjQzaDR2Mi40NEgyNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zNC44NywzMi4yMSwzMCwyNy4z''@;'; put 'put ''N1Y4Ljc1TDI3LjcsNC41MmEyLDIsMCwwLDAtMy41NCwwTDIyLDguNzZWMTkuNDFMMy43MSwxLjIxQTEsMSwwLDAsMCwyLDEuOTJWMTBINC4xN3YxLjZIMlYxOEg0LjE3djEuNkgydjYuNjVINC4xN3YxLjZIMnY1LjA3YTEsMSwwLDAsMCwxLDFIMzQuMTZhMSwxLDAsMCwwLC43MS0xLjcxWk0x''@;'; put 'put ''MCwyNlYxNi45NEwxOS4wNywyNlptMTgsMi4xMUgyNFYyNS42OGg0Wm0wLTRIMjRWOS4yNWwxLjk0LTMuNzdMMjgsOS4yNloiLz5cbicpLF8uQ2xyU2hhcGVQaG9uZUhhbmRzZXQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTEiIGQ9Ik0yNy43MywzNS40NGE0LjcyLDQuNzIsMCwwLDEtMS0uMTEsMzMuOTEsMzMuOTEsMCwwLDEtMTYuNjItOC43NSwzMi43MSwzMi43MSwwLDAsMS05LTE2LjI1QTQuNTgsNC41OCwwLDAsMSwyLjQ2LDYuMDVsNC0zLjg1QTIsMiwwLDAsMSw4LDEuNjZhMiwyLDAsMCwxLDEuNDUuODds''@;'; put 'put ''NSw3LjM5YTEuNiwxLjYsMCwwLDEtLjExLDEuOWwtMi41MSwzYTE4Ljk0LDE4Ljk0LDAsMCwwLDQuMTcsNS44OWgwYTE5LjI2LDE5LjI2LDAsMCwwLDYuMDcsNC4wOWwzLjExLTIuNDdhMS42NCwxLjY0LDAsMCwxLDEuODYtLjEybDcuNTUsNC44OEEyLDIsMCwwLDEsMzUsMzAuMmwtMy45LDMu''@;'; put 'put ''ODZBNC43NCw0Ljc0LDAsMCwxLDI3LjczLDM1LjQ0Wk03Ljg0LDMuNjRsLTQsMy44NWEyLjU0LDIuNTQsMCwwLDAtLjc1LDIuNCwzMC43LDMwLjcsMCwwLDAsOC40MSwxNS4yNiwzMS45LDMxLjksMCwwLDAsMTUuNjQsOC4yMywyLjc1LDIuNzUsMCwwLDAsMi41LS43NGwzLjktMy44Ni03LjI5''@;'; put 'put ''LTQuNzEtMy4zNCwyLjY2YTEsMSwwLDAsMS0uOTIuMTcsMjAuMDYsMjAuMDYsMCwwLDEtNy4zNi00Ljc1aDBhMTkuNDksMTkuNDksMCwwLDEtNC44Ny03LjJBMSwxLDAsMCwxLDEwLDE0bDIuNy0zLjIzWiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNv''@;'; put 'put ''bGlkLXBhdGgtMSIgZD0iTTE1LjIyLDIwLjY0YTIwLjM3LDIwLjM3LDAsMCwwLDcuNCw0Ljc5bDMuNzctM2EuNjcuNjcsMCwwLDEsLjc2LDBsNyw0LjUxYTIsMiwwLDAsMSwuMzMsMy4xOGwtMy4yOCwzLjI0YTQsNCwwLDAsMS0zLjYzLDEuMDcsMzUuMDksMzUuMDksMCwwLDEtMTcuMTUtOUEz''@;'; put 'put ''My43OSwzMy43OSwwLDAsMSwxLjE1LDguNmEzLjc4LDMuNzgsMCwwLDEsMS4xLTMuNTVsMy40LTMuMjhhMiwyLDAsMCwxLDMuMTIuMzJMMTMuNDMsOWEuNjMuNjMsMCwwLDEsMCwuNzVsLTMuMDcsMy42OUExOS43NSwxOS43NSwwLDAsMCwxNS4yMiwyMC42NFoiLz5cbicpLF8uQ2xyU2hhcGVO''@;'; 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 ''LjQxLTI2LTI2WiIvPlxuJyksXy5DbHJTaGFwZUluc3RhbGw9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMC45Miw4SDI2LjU1YTEsMSwwLDAsMCwwLDJIMzFWMzBINVYxMEg5LjM4YTEsMSwwLDAsMCwwLTJI''@;'; 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 ''QTEuMjgsMS4yOCwwLDAsMCwyNi44NSwxLjE0WiIvPlxuJyksXy5DbHJTaGFwZVVuaW5zdGFsbD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTExLjI5LDI2LjcyYTEsMSwwLDAsMCwxLjQxLDBMMTgsMjEuNDls''@;'; 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 ''NSwxLjE0WiIvPlxuJyksXy5DbHJTaGFwZUxheWVycz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTE4LDIwLjI1YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLDAtMS44MWwxNS03LjA5YTEs''@;'; put 'put ''MSwwLDAsMSwuODUsMGwxNSw3LjA5YTEsMSwwLDAsMSwwLDEuODFsLTE1LDcuMDlBMSwxLDAsMCwxLDE4LDIwLjI1Wk01LjM0LDEyLjE2bDEyLjY2LDYsMTIuNjYtNkwxOCw2LjE4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTIiIGQ9Ik0xOCwyNi4xNmExLDEsMCwwLDEtLjQzLS4xTDIuNTcsMTlhMSwxLDAsMSwxLC44NS0xLjgxTDE4LDI0LjA2bDE0LjU3LTYuODlBMSwxLDAsMSwxLDMzLjQzLDE5bC0xNSw3LjA5QTEsMSwwLDAsMSwxOCwyNi4xNloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiBkPSJNMTgsMzIuMDdhMSwxLDAsMCwxLS40My0uMWwtMTUtNy4wOWExLDEsMCwwLDEsLjg1LTEuODFMMTgsMzBsMTQuNTctNi44OWExLDEsMCwxLDEsLjg1LDEuODFMMTguNDMsMzJBMSwxLDAsMCwxLDE4LDMyLjA3WiIvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDIwLjI1YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLDAtMS44MWwxNS03LjA5YTEsMSwwLDAsMSwuODUsMGwxNSw3LjA5YTEsMSwwLDAsMSwwLDEuODFsLTE1LDcuMDlBMSwx''@;'; put 'put ''LDAsMCwxLDE4LDIwLjI1WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgZD0iTTE4LDI2LjE2YTEsMSwwLDAsMS0uNDMtLjFMMi41NywxOWExLDEsMCwxLDEsLjg1LTEuODFMMTgsMjQuMDZsMTQuNTctNi44OUExLDEsMCwxLDEs''@;'; put 'put ''MzMuNDMsMTlsLTE1LDcuMDlBMSwxLDAsMCwxLDE4LDI2LjE2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTE4LDMyLjA3YTEsMSwwLDAsMS0uNDMtLjFsLTE1LTcuMDlhMSwxLDAsMCwxLC44NS0xLjgxTDE4LDMwbDE0''@;'; put 'put ''LjU3LTYuODlhMSwxLDAsMSwxLC44NSwxLjgxTDE4LjQzLDMyQTEsMSwwLDAsMSwxOCwzMi4wN1oiLz5cbicpLF8uQ2xyU2hhcGVCbG9jaz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDIsOS4wOWwtMTMtNmExLDEsMCwwLDAtLjg0LDBsLTEzLDZBMSwxLDAsMCwwLDQsMTBWMjdh''@;'; 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 ''IGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz4nKSxfLkNsclNoYXBlQmxvY2tzR3JvdXA9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjUzLDE4Ljc2LDI2LjYsMTUuNTdWNi40M0Ex''@;'; 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+XG48Y2lyY2xlIGN4PSIyOS45OCIgY3k9IjYiIHI9IjUiIGNsYXNzPSJjbHItaS1zb2xpZC0tYmFkZ2VkIGNsci1pLXNvbGlkLXBhdGgtMi0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPicpLF8u''@;'; put 'put ''Q2xyU2hhcGVCdW5kbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMi40Myw4LjM1bC0xMy02LjIxYTEsMSwwLDAsMC0uODcsMGwtMTUsNy4yNGExLDEsMCwwLDAtLjU3LjlWMjYuODNhMSwxLDAsMCwwLC42''@;'; put 'put ''LjkybDEzLDYuMTlhMSwxLDAsMCwwLC44NywwbDE1LTcuMjRhMSwxLDAsMCwwLC41Ny0uOVY5LjI1QTEsMSwwLDAsMCwzMi40Myw4LjM1Wk0xOSw0LjE1LDI5LjkzLDkuMzdsLTUuMDUsMi40NEwxNC4yMSw2LjQ2Wk0xNywxNS42NCw2LDEwLjQxbDUuOS0yLjg1TDIyLjYsMTIuOTFaTTUsMTIu''@;'; put 'put ''MTMsMTYsMTcuNFYzMS40Nkw1LDI2LjJaTTE4LDMxLjQ1VjE3LjM2bDEzLTYuMjl2MTQuMVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMi40Myw4LjM1bC0xMy02LjIxYTEsMSwwLDAsMC0uODcsMGwtMTUsNy4yNGEx''@;'; put 'put ''LDEsMCwwLDAtLjU3LjlWMjYuODNhMSwxLDAsMCwwLC42LjkybDEzLDYuMTlhMSwxLDAsMCwwLC44NywwbDE1LTcuMjRhMSwxLDAsMCwwLC41Ny0uOVY5LjI1QTEsMSwwLDAsMCwzMi40Myw4LjM1Wk0xOSw0LjE1LDI5LjkzLDkuMzdsLTUuMDUsMi40NEwxNC4yMSw2LjQ2Wk0xNywxNS42NCw2''@;'; put 'put ''LDEwLjQxbDUuOS0yLjg1TDIyLjYsMTIuOTFabTEsMTUuOFYxNy4zNmwxMy02LjI5djE0LjFaIi8+XG4nKSxfLkNsclNoYXBlV2lmaT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLjU1LDguMmEyOC4xLDI4''@;'; 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 ''LDAsMC0uNDYsMi4wOWwuMS4xNmExLjUyLDEuNTIsMCwwLDAsMi4wNi40NCwxMC4yNywxMC4yNywwLDAsMSwxMC40MiwwLDEuNTIsMS41MiwwLDAsMCwyLjA2LS40NWwuMS0uMTZBMS40OSwxLjQ5LDAsMCwwLDI0Ljg4LDIxLjQ5WiIvPlxuJyksXy5DbHJTaGFwZVJhY2tTZXJ2ZXI9KDAsZy5j''@;'; 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 ''MkgxMFpNNiwyN0g4djJINloiLz5cbicpLF8uQ2xyU2hhcGVIYXJkRGlzaz0oMCxnLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgeD0iNiIgeT0iMjAiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyIi8+''@;'; 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+XG4nKSxfLkNsclNoYXBlQmFja3VwUmVzdG9yZT0oMCxnLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZS0tYWxlcnRlZCBjbHItaS1vdXRsaW5lLXBhdGgtMS0tYWxlcnRlZCIgeD0iNiIg''@;'; 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 ''Ik0xMyw5LjkyLDE3LDZWMThhMSwxLDAsMSwwLDIsMFY2bDQsMy45NUExLDEsMCwxLDAsMjQuMzgsOC41TDE4LDIuMTYsMTEuNjEsOC41QTEsMSwwLDAsMCwxMyw5LjkyWiIvPlxuJyksXy5DbHJTaGFwZUJhY2t1cD0oMCxnLmNsckljb25TVkcpKCc8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; 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+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiBkPSJNMiwyNHY2YTIsMiwwLDAsMCwyLDJIMzJhMiwyLDAsMCwwLDItMlYyNFptMjgsNEgyNlYyNmg0WiIvPlxuJyksXy5DbHJTaGFwZURldmljZXM9KDAsZy5jbHJJ''@;'; put 'put ''Y29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMiwxM0gyNGEyLDIsMCwwLDAtMiwyVjMwYTIsMiwwLDAsMCwyLDJoOGEyLDIsMCwwLDAsMi0yVjE1QTIsMiwwLDAsMCwzMiwxM1ptMCwyVjI2SDI0VjE1Wk0yNCwzMFYyNy42aDhW''@;'; put 'put ''MzBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgZD0iTTIwLDIySDRWNkgyOHY1aDJWNmEyLDIsMCwwLDAtMi0ySDRBMiwyLDAsMCwwLDIsNlYyMmEyLDIsMCwwLDAsMiwySDIwWiIvPlxuICAgICAgICAgICAgPHBhdGgg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIGQ9Ik0yMCwyNkg5YTEsMSwwLDAsMCwwLDJIMjBaIi8+XG4gICAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzIsMTNIMjRhMiwyLDAsMCwwLTIsMlYzMGEy''@;'; put 'put ''LDIsMCwwLDAsMiwyaDhhMiwyLDAsMCwwLDItMlYxNUEyLDIsMCwwLDAsMzIsMTNabTAsMlYyOEgyNFYxNVoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIGQ9Ik0yOCw0SDRBMiwyLDAsMCwwLDIsNlYyMmEyLDIsMCwwLDAsMiwy''@;'; put 'put ''aDh2Mkg5LjMyQTEuMiwxLjIsMCwwLDAsOCwyN2ExLjIsMS4yLDAsMCwwLDEuMzIsMUgxOS45MnYtLjM3SDIwVjIySDRWNkgyOHY1aDJWNkEyLDIsMCwwLDAsMjgsNFoiLz5cbicpLF8uQ2xyU2hhcGVLZXlib2FyZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; 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+XG4nKSxfLkNsclNo''@;'; put 'put ''YXBlTW91c2U9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwzNEExMCwxMCwwLDAsMSw4LDI0VjEyYTEwLDEwLDAsMCwxLDIwLDBWMjRBMTAsMTAsMCwwLDEsMTgsMzRaTTE4LDRhOCw4LDAsMCwwLTgsOFYy''@;'; put 'put ''NGE4LDgsMCwwLDAsMTYsMFYxMkE4LDgsMCwwLDAsMTgsNFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTgsMTVhMSwxLDAsMCwxLTEtMVYxMGExLDEsMCwwLDEsMiwwdjRBMSwxLDAsMCwxLDE4LDE1WiIvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgZD0iTTE4LDJBMTAsMTAsMCwwLDAsOCwxMlYyNGExMCwxMCwwLDAsMCwyMCwwVjEyQTEwLDEwLDAsMCwwLDE4LDJabTEuMywxMS40NGExLjMsMS4zLDAsMCwxLTIuNiwwVjEwYTEuMywxLjMs''@;'; put 'put ''MCwwLDEsMi42LDBaIi8+XG4nKSxfLkNsclNoYXBlRGFzaGJvYXJkPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiBkPSJNMjUuMTgsMTIuMzJsLTUuOTEsNS44MWEzLDMsMCwxLDAsMS40MSwxLjQybDUuOTItNS44MVoi''@;'; 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 ''YXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgY3g9IjMwIiBjeT0iNiIgcj0iNSIvPlxuJyksXy5DbHJTaGFwZUhvc3Q9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0xOCwyNC4zYTIuNDgsMi40OCwwLDEsMCwy''@;'; 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 ''Y2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiIGN4PSIzMCIgY3k9IjUuOSIgcj0iNSIvPlxuJyksXy5DbHJTaGFwZVN0b3JhZ2U9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; 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+XG4nKSxfLkNsclNoYXBlQ2x1c3Rlcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMzYsOEgyNy41djJIMzFWMzBIMjcuNXYySDMzVjkuNjdBMS42NSwx''@;'; 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 ''ICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksXy5DbHJTaGFwZUFwcGxpY2F0aW9ucz0oMCxnLmNsckljb25TVkcpKCc8cG9s''@;'; 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 ''LTgtLWJhZGdlZCIvPlxuICAgICAgICAgICAgPGNpcmNsZSBjeD0iMzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTktLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxfLkNsclNoYXBlQnVpbGRpbmc9KDAsZy5jbHJJ''@;'; 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 ''ICAgICAgPHJlY3QgeD0iMjciIHk9IjIzIiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMjAiLz5cbiAgICAgICAgJyksXy5DbHJTaGFwZUNQVT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuMDgsMjMuMDdoLTExdjEu''@;'; 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 ''OC44LDAsMSwwLDAtMS42SDMwdi01LjRaTTI1LDIzLjgxQTEuMTgsMS4xOCwwLDAsMSwyNCwyNUgxM1YyM0gyM1YxMWgyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAnKSxfLkNsclNoYXBlTWVtb3J5PSgwLGcuY2xySWNvblNWRykoJzxyZWN0''@;'; 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 ''bGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksXy5DbHJTaGFwZURhdGFDbHVzdGVyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi41LDQuMDhD''@;'; 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+XG4gICAgICAgICcpLF8uQ2xyU2hhcGVSZXNvdXJjZVBvb2w9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMzLjY4''@;'; 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 ''LDEuMjgsMCwwLDAsMjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTMtLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgICAgICAgJyksXy5DbHJTaGFwZVNoaWVsZENoZWNrPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMS4yNSw3''@;'; put 'put ''LjRhNDMuNzksNDMuNzksMCwwLDEtNi42Mi0yLjM1LDQ1LDQ1LDAsMCwxLTYuMDgtMy4yMUwxOCwxLjVsLS41NC4zNWE0NSw0NSwwLDAsMS02LjA4LDMuMjFBNDMuNzksNDMuNzksMCwwLDEsNC43NSw3LjRMNCw3LjU5djguMzRjMCwxMy4zOSwxMy41MywxOC40LDEzLjY2LDE4LjQ1bC4zNC4x''@;'; put 'put ''Mi4zNC0uMTJjLjE0LDAsMTMuNjYtNS4wNSwxMy42Ni0xOC40NVY3LjU5Wk0zMCwxNS45M2MwLDExLTEwLDE1LjYxLTEyLDE2LjQzLTItLjgyLTEyLTUuNDQtMTItMTYuNDNWOS4xNGE0Ny41NCw0Ny41NCwwLDAsMCw2LjE4LTIuMjUsNDguMjMsNDguMjMsMCwwLDAsNS44Mi0zLDQ4LjIzLDQ4''@;'; put 'put ''LjIzLDAsMCwwLDUuODIsM0E0Ny41NCw0Ny41NCwwLDAsMCwzMCw5LjE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xMC44OCwxNi44N2ExLDEsMCwwLDAtMS40MSwxLjQxbDYsNkwyNi40LDEzLjc3QTEsMSww''@;'; put 'put ''LDAsMCwyNSwxMi4zM2wtOS40Nyw5LjE5WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS4yNSw3LjRhNDMuNzksNDMuNzksMCwwLDEtNi42Mi0yLjM1LDQ1LDQ1LDAsMCwxLTYuMDgtMy4yMUwxOCwxLjVsLS41''@;'; put 'put ''NC4zNWE0NSw0NSwwLDAsMS02LjA4LDMuMjFBNDMuNzksNDMuNzksMCwwLDEsNC43NSw3LjRMNCw3LjU5djguMzRjMCwxMy4zOSwxMy41MywxOC40LDEzLjY2LDE4LjQ1bC4zNC4xMi4zNC0uMTJjLjE0LDAsMTMuNjYtNS4wNSwxMy42Ni0xOC40NVY3LjU5Wm0tNC41Nyw2LjY1TDE1LjUxLDI0''@;'; put 'put ''LjksOS4xOSwxOC41N2ExLjQsMS40LDAsMCwxLDItMkwxNS41NCwyMSwyNC43MywxMmExLjQsMS40LDAsMSwxLDIsMloiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiLz5cbiAgICAgICAgJyksXy5DbHJTaGFwZVNoaWVsZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBk''@;'; 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 ''MzAiIGN5PSI2IiByPSI1IiBjbGFzcz0iY2xyLWktc29saWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIvPlxuICAgICAgICAnKSxfLkNsclNoYXBlU2hpZWxkWD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5''@;'; put 'put ''LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwxMy42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCww''@;'; put 'put ''LDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMzAsMTUuOTNjMCwxMS0xMCwxNS42MS0xMiwxNi40My0yLS44Mi0xMi01LjQ0LTEyLTE2LjQzVjkuMTRhNDcuNTQsNDcuNTQsMCwwLDAsNi4xOC0yLjI1LDQ4LjIzLDQ4LjIzLDAsMCwwLDUuODItMyw0OC4yMyw0OC4yMywwLDAsMCw1Ljgy''@;'; put 'put ''LDNBNDcuNTQsNDcuNTQsMCwwLDAsMzAsOS4xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjIuODEsMTAuNzksMTgsMTUuNjFsLTQuODEtNC44MWExLDEsMCwwLDAtMS40MSwxLjQxTDE2LjU5LDE3bC00Ljgx''@;'; put 'put ''LDQuODFhMSwxLDAsMSwwLDEuNDEsMS40MUwxOCwxOC40M2w0LjgxLDQuODFhMSwxLDAsMCwwLDEuNDEtMS40MUwxOS40MSwxN2w0LjgxLTQuODFhMSwxLDAsMCwwLTEuNDEtMS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gICAgICAgICAgICA8''@;'; put 'put ''cGF0aCBkPSJNMzEuMjUsNy40YTQzLjc5LDQzLjc5LDAsMCwxLTYuNjItMi4zNSw0NSw0NSwwLDAsMS02LjA4LTMuMjFMMTgsMS41bC0uNTQuMzVhNDUsNDUsMCwwLDEtNi4wOCwzLjIxQTQzLjc5LDQzLjc5LDAsMCwxLDQuNzUsNy40TDQsNy41OXY4LjM0YzAsMTMuMzksMTMuNTMsMTguNCwx''@;'; put 'put ''My42NiwxOC40NWwuMzQuMTIuMzQtLjEyYy4xNCwwLDEzLjY2LTUuMDUsMTMuNjYtMTguNDVWNy41OVpNMjQuNTEsMjEuNTVhMS40LDEuNCwwLDAsMS0yLDJMMTgsMTlsLTQuNTMsNC41M2ExLjQzLDEuNDMsMCwwLDEtMiwwLDEuNCwxLjQsMCwwLDEsMC0yTDE2LDE3bC00LjUzLTQuNTNhMS40''@;'; put 'put ''LDEuNCwwLDEsMSwyLTJMMTgsMTVsNC41My00LjUzYTEuNCwxLjQsMCwwLDEsMiwyTDIwLDE3WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIvPlxuICAgICAgICAnKSxfLkNsclNoYXBlSW1wb3J0PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOCw0SDE0Ljg3''@;'; 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 ''ZWQgY2xyLWktc29saWQtcGF0aC0yLS1iYWRnZWQiLz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC0zLS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksXy5DbHJTaGFw''@;'; 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+XG4gICAgICAgICcpLF8uQ2xyU2hhcGVVcGxvYWRDbG91ZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBk''@;'; 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 ''aS1iYWRnZSIvPlxuICAgICAgICAnKSxfLkNsclNoYXBlRG93bmxvYWRDbG91ZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzAuMzEsMTNjMC0uMSwwLS4yMSwwLS4zMmExMC4yNiwxMC4yNiwwLDAsMC0xMC40NS0xMCwxMC40NywxMC40NywwLDAsMC05LjYsNi4xQTkuNjUsOS42NSww''@;'; 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+XG4gICAgICAgICcpLF8uQ2xyU2hhcGVQbHVnaW49KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LjgxLDE2SDI5VjguODNhMiwyLDAsMCwwLTItMkgyMUE1LjE0LDUuMTQsMCwwLDAsMTYuNTEsMiw1LDUsMCwwLDAsMTEsNi44M0g0YTIsMiwwLDAsMC0y''@;'; 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 ''PlxuICAgICAgICAnKSxfLkNsclNoYXBlRmxvcHB5PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNy4zNiw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCwwLDAsMiwySDMwYTIsMiwwLDAsMCwyLTJWOC43OFpNMjUsMzBIMTFWMjJIMjVabTUsMEgyN1YyMmEyLDIsMCwwLDAtMi0ySDEx''@;'; 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+XG4gICAgICAgICcpLF8uQ2xyU2hhcGVDb21wdXRlcj0oMCxnLmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjkuNiAyMi44OCA5LjYgMTAuNiAy''@;'; 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 ''Lz5cbiAgICAgICAgICAgIDxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImNsci1pLXNvbGlkLS1iYWRnZWQgY2xyLWktc29saWQtcGF0aC00LS1iYWRnZWQgY2xyLWktYmFkZ2UiLz5cbiAgICAgICAgJyksXy5DbHJTaGFwZURpc3BsYXk9KDAsZy5jbHJJY29uU1ZHKSgnPHBh''@;'; 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 ''YmFkZ2UiLz5cbiAgICAgICAgJyksXy5DbHJTaGFwZVRlcm1pbmFsPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiw1SDRBMiwyLDAsMCwwLDIsN1YyOWEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWN0EyLDIsMCwwLDAsMzIsNVpNNCw3SDMyVjkuMkg0Wk00LDI5VjEwLjhI''@;'; 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 ''ZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCBjbHItaS1iYWRnZSIgLz5cbiAgICAgICAgJyksXy5DbHJTaGFwZUNvZGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEzLjcxLDEyLjU5YTEsMSwwLDAsMC0xLjM5LS4yNkw1Ljc5LDE2Ljc4YTEsMSwwLDAsMCwwLDEuNjVsNi41''@;'; 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 ''dGxpbmUtLWJhZGdlZCBjbHItaS1vdXRsaW5lLXBhdGgtNC0tYmFkZ2VkIGNsci1pLWJhZGdlIiAvPlxuICAgICAgICAnKSxfLkNsclNoYXBlQXBwbGljYXRpb249KDAsZy5jbHJJY29uU1ZHKSgnPHJlY3QgeD0iNSIgeT0iNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cmVjdCB4PSI5IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjEzIiB5PSI3IiB3aWR0''@;'; put 'put ''aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIsNFpNNCw2SDMy''@;'; put 'put ''djQuMkg0Wk00LDMwVjExLjhIMzJWMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMiw0SDRBMiwyLDAsMCwwLDIsNlYzMGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWNkEyLDIsMCwwLDAsMzIs''@;'; put 'put ''NFptMCw2LjJINFY2SDMyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjUiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICAg''@;'; put 'put ''ICA8cmVjdCB4PSI5IiB5PSI3IiB3aWR0aD0iMiIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTMiIHk9IjciIHdpZHRoPSIyIiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xp''@;'; put 'put ''ZC1wYXRoLTQiIC8+XG4gICAgICAgICcpLF8uQ2xyU2hhcGVCYXR0ZXJ5PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOC41OSwxMS43N2ExLDEsMCwwLDAtMS43MywxbDIuNSw0LjM0LTYuMDctMSw1LjI5LDEwLjU5YTEsMSwwLDAsMCwxLjc5LS44OWwtMy41My03LjA4LDYuMzgsMS4w''@;'; 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 ''aWQtLWJhZGdlZCBjbHItaS1zb2xpZC1wYXRoLTItLWJhZGdlZCIgLz5cbiAgICAgICAgJyksXy5DbHJTaGFwZU1vYmlsZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjUsNEgxMUEyLDIsMCwwLDAsOSw2VjMwYTIsMiwwLDAsMCwyLDJIMjVhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAs''@;'; put 'put ''MCwyNSw0Wk0xMSw2SDI1VjI0SDExWm0wLDI0VjI2SDI1djRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjE3IiB5PSIyNyIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjUsNEgxMUEyLDIsMCwwLDAsOSw2VjMwYTIsMiwwLDAsMCwyLDJIMjVhMiwyLDAsMCwwLDItMlY2QTIsMiwwLDAsMCwyNSw0Wk0xOSwzMEgxN1YyOGgyWm0tOC00VjZIMjVWMjZaIiBjbGFzcz0iY2xyLWktc29saWQg''@;'; put 'put ''Y2xyLWktc29saWQtcGF0aC0xIiAvPlxuICAgICAgICAnKSxfLkNsclNoYXBlVGFibGV0PSgwLGcuY2xySWNvblNWRykoJzxyZWN0IHg9IjE3IiB5PSIyOSIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAg''@;'; put 'put ''ICAgICA8cGF0aCBkPSJNMzAsMkg2QTIsMiwwLDAsMCw0LDRWMzJhMiwyLDAsMCwwLDIsMkgzMGEyLDIsMCwwLDAsMi0yVjRBMiwyLDAsMCwwLDMwLDJabTAsMlYyNi4zOEg2VjRaTTYsMzJWMjhIMzB2NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxu''@;'; put 'put ''ICAgICAgICAgICAgPHBhdGggZD0iTTMwLDJINkEyLDIsMCwwLDAsNCw0VjMyYTIsMiwwLDAsMCwyLDJIMzBhMiwyLDAsMCwwLDItMlY0QTIsMiwwLDAsMCwzMCwyWk0xOSwzMkgxN1YzMGgyWk02LDI4VjRIMzBWMjhaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAv''@;'; put 'put ''PlxuICAgICAgICAnKSxfLkNsclNoYXBlTmV0d29ya0dsb2JlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNi41OCwzMmgtMThhMSwxLDAsMSwwLDAsMmgxOGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+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 ''Z2UiLz5cbiAgICAgICAgJyksXy5DbHJTaGFwZU5ldHdvcmtTZXR0aW5ncz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTAuODUsMjcuNDRhMi4yOSwyLjI5LDAsMCwwLDEuNzQtMS42OGMuNTQtLjE0LDEuMDYtLjMyLDEuNTktLjUxdi0xLjJhMi43NywyLjc3LDAsMCwxLC4wNi0uNTEs''@;'; 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 ''MS45M3MwLC4xLDAsLjE1QTE5LjQ1LDE5LjQ1LDAsMCwwLDUsMTQuNzksMTIsMTIsMCwwLDEsOS42Niw3LjM2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz5cbiAgICAgICAgJyksXy5DbHJTaGFwZU5ldHdvcmtTd2l0Y2g9KDAsZy5jbHJJY29uU1ZHKSgnPHBh''@;'; 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+XG4gICAgICAgICcpLF8uQ2xyU2hhcGVSb3V0ZXI9KDAsZy5jbHJJ''@;'; 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 ''JyksXy5DbHJTaGFwZVZNPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMSw1SDI1VjhoMlY1YTIsMiwwLDAsMC0yLTJIMTFBMiwyLDAsMCwwLDksNXY2Ljg1aDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9''@;'; 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+XG4gICAgICAgICcpLF8uQ2xyU2hhcGVWTVdBcHA9KDAsZy5jbHJJY29uU1ZHKSgnPHBvbHlnb24gcG9pbnRzPSIyOCAyMiAzMCAyMiAzMCAzMCAyMiAzMCAyMiAy''@;'; 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 ''ICcpLF8uQ2xyU2hhcGVDZXJ0aWZpY2F0ZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgxOWwuNTctLjcuOTMtMS4xNEwyMC40MSwyOEg0VjhIMzJsMCw4LjU2YTguNDEsOC40MSwwLDAsMSwyLDEuODFWOEEyLDIsMCww''@;'; 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 ''IiAvPlxuICAgICAgICAnKSxfLkNsclNoYXBlQXJjaGl2ZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjksMzJIN1YyMkg1VjMyYTIsMiwwLDAsMCwyLDJIMjlhMiwyLDAsMCwwLDItMlYyMkgyOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxu''@;'; 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+XG4gICAgICAgICcpLF8uQ2xyU2hhcGVVbmFyY2hpdmU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI5LDMySDdWMjJINVYzMmEyLDIs''@;'; 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 ''MkwxOCwxLjc4LDExLjYxLDguMTNBMSwxLDAsMCwwLDEzLDkuNTVaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPlxuICAgICAgICAnKSxfLkNsclNoYXBlQ29ubmVjdD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsMTdIMjguMjNBNi4yNSw2LjI1LDAs''@;'; put 'put ''MCwwLDIyLDEySDE0LjE1YTYuMjUsNi4yNSwwLDAsMC02LjIxLDVIMnYySDcuOTNhNi4yMiw2LjIyLDAsMCwwLDYuMjIsNUgyMmE2LjIyLDYuMjIsMCwwLDAsNi4yMi01SDM0Wk0xNy4wOCwyMkgxNC4xNWE0LjE3LDQuMTcsMCwwLDEtNC4zMS00LDQuMTcsNC4xNywwLDAsMSw0LjMxLTRoMi45''@;'; put 'put ''NFpNMjIsMjJIMTlWMTRoM2E0LjE3LDQuMTcsMCwwLDEsNC4zMSw0QTQuMTcsNC4xNywwLDAsMSwyMiwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTE3LDEySDE0LjE1YTYuMjUsNi4yNSwwLDAsMC02LjIx''@;'; put 'put ''LDVIMnYySDcuOTNhNi4yMiw2LjIyLDAsMCwwLDYuMjIsNUgxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMjguMjMsMTdBNi4yNSw2LjI1LDAsMCwwLDIyLDEySDE5VjI0aDNhNi4yMiw2LjIyLDAsMCwwLDYuMjIt''@;'; put 'put ''NUgzNFYxN1oiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLF8uQ2xyU2hhcGVEaXNjb25uZWN0PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xMi4xNyw2QTYuMjEsNi4yMSwwLDAsMCw2LDExSDIuMTN2Mkg2YTYuMjMsNi4yMywwLDAs''@;'; put 'put ''MCw2LjIxLDVIMTdWNlpNMTUuMSwxNkgxMi4xN2E0LjIsNC4yLDAsMCwxLTQuMzEtNCw0LjE3LDQuMTcsMCwwLDEsNC4zMS00SDE1LjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMy45MiwyM0gzMC4xNGE2''@;'; put 'put ''LjI1LDYuMjUsMCwwLDAtNi4yMS01SDE5djJIMTRhMSwxLDAsMSwwLDAsMmg1djRIMTRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxaDV2Mmg0Ljk0YTYuMjMsNi4yMywwLDAsMCw2LjIyLTVoMy43NlptLTEwLDVIMjFWMjBoMi45NGE0LjE3LDQuMTcsMCwwLDEsNC4zMSw0QTQuMTcsNC4x''@;'; put 'put ''NywwLDAsMSwyMy45NCwyOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTEyLDZhNi4yMSw2LjIxLDAsMCwwLTYuMjEsNUgydjJINS44M0E2LjIzLDYuMjMsMCwwLDAsMTIsMThIMTdWNloiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzMuNzksMjNIMzAuMTRhNi4yNSw2LjI1LDAsMCwwLTYuMjEtNUgxOXYySDE0YTEsMSwwLDAsMC0xLDEsMSwxLDAsMCwwLDEsMWg1djRIMTRhMSwxLDAsMCwwLTEsMSwxLDEsMCwwLDAsMSwxaDV2''@;'; put 'put ''Mmg0Ljk0YTYuMjMsNi4yMywwLDAsMCw2LjIyLTVoMy42NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTIiIC8+XG4gICAgICAgICcpLF8uQ2xyU2hhcGVMaW5rPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNy42LDI0LjMybC0yLjQ2LDIuNDRhNCw0LDAsMCwx''@;'; put 'put ''LTUuNjIsMCwzLjkyLDMuOTIsMCwwLDEsMC01LjU1bDQuNjktNC42NWE0LDQsMCwwLDEsNS42MiwwLDMuODYsMy44NiwwLDAsMSwxLDEuNzFBMiwyLDAsMCwwLDIxLjEsMThsMS4yOS0xLjI4YTUuODksNS44OSwwLDAsMC0xLjE1LTEuNjIsNiw2LDAsMCwwLTguNDQsMEw4LjEsMTkuNzlhNS45''@;'; put 'put ''MSw1LjkxLDAsMCwwLDAsOC4zOSw2LDYsMCwwLDAsOC40NCwwbDMuNjUtMy42MmMtLjE3LDAtLjMzLDAtLjUsMEE4LDgsMCwwLDEsMTcuNiwyNC4zMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI4LjYxLDcu''@;'; put 'put ''ODJhNiw2LDAsMCwwLTguNDQsMGwtMy42NSwzLjYyYy4xNywwLC4zMywwLC40OSwwaDBhOCw4LDAsMCwxLDIuMS4yOGwyLjQ2LTIuNDRhNCw0LDAsMCwxLDUuNjIsMCwzLjkyLDMuOTIsMCwwLDEsMCw1LjU1bC00LjY5LDQuNjVhNCw0LDAsMCwxLTUuNjIsMCwzLjg2LDMuODYsMCwwLDEtMS0x''@;'; put 'put ''LjcxLDIsMiwwLDAsMC0uMjguMjNsLTEuMjksMS4yOGE1Ljg5LDUuODksMCwwLDAsMS4xNSwxLjYyLDYsNiwwLDAsMCw4LjQ0LDBsNC42OS00LjY1YTUuOTIsNS45MiwwLDAsMCwwLTguMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAg''@;'; put 'put ''JyksXy5DbHJTaGFwZVVubGluaz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNSw1LDMuNTksNi40MWw5LDlMOC4xLDE5Ljc5YTUuOTEsNS45MSwwLDAsMCwwLDguMzksNiw2LDAsMCwwLDguNDQsMEwyMSwyMy43OGw4LjYzLDguNjNMMzEsMzFaTTE1LjEzLDI2Ljc2YTQsNCwwLDAsMS01''@;'; put 'put ''LjYyLDAsMy45MiwzLjkyLDAsMCwxLDAtNS41NUwxNCwxNi43OWw1LjU4LDUuNThaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS41Myw5LjIyYTQsNCwwLDAsMSw1LjYyLDAsMy45MiwzLjkyLDAsMCwxLDAs''@;'; put 'put ''NS41NWwtNC43OSw0Ljc2TDIzLjc4LDIxbDQuNzktNC43NmE1LjkyLDUuOTIsMCwwLDAsMC04LjM5LDYsNiwwLDAsMC04LjQ0LDBsLTQuNzYsNC43NEwxNi43OCwxNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAnKSxfLkNsclNoYXBl''@;'; put 'put ''Q2xvdWROZXR3b3JrPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMC43MSwxNS4xOHYtMUExMS4yOCwxMS4yOCwwLDAsMCwxOS41NiwyLjgzaC0uMTFhMTEuMjgsMTEuMjgsMCwwLDAtMTEsOC45Myw3LjQ3LDcuNDcsMCwwLDAsMCwxNC45NEgyOS4xM2E1Ljg2LDUuODYsMCwwLDAsMS41''@;'; put 'put ''OC0xMS41MlpNMjkuMTMsMjQuN0g4LjQ2YTUuNDcsNS40NywwLDEsMSwwLTEwLjk0aDEuNjlsLjExLS44N2E5LjI3LDkuMjcsMCwwLDEsMTguNDUsMS4zdjEuMjhjMCwuMDksMCwuMTgsMCwuMjdsLS4wNywxLjE1Ljk0LjExYTMuODYsMy44NiwwLDAsMS0uNDMsNy43MVoiIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI5LjU4LDMxLjE4SDE4Ljg1di0yLjRoLTJ2Mi40SDYuMDhhMSwxLDAsMCwwLDAsMmgyMy41YTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBh''@;'; put 'put ''dGgtMiIgLz5cbiAgICAgICAgJyksXy5DbHJTaGFwZUNsb3VkU2NhbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTYuMzIsMTEuMTFINy44NEw4LDEwLjI0QTcuMTksNy4xOSwwLDAsMSwxNS4wNyw0aC4wN2E3LjE1LDcuMTUsMCwwLDEsNC43MSwxLjgzLDExLjEsMTEuMSwwLDAsMSwz''@;'; put 'put ''LjA5LjY0QTkuMTgsOS4xOCwwLDAsMCwxNS4xNiwyaC0uMDlBOS4yLDkuMiwwLDAsMCw2LjEzLDkuMTEsNi4xNSw2LjE1LDAsMCwwLDIuMzMsMTkuOTUsOC4wOSw4LjA5LDAsMCwxLDMsMTcuNzFhNC4xMiw0LjEyLDAsMCwxLS44MS0yLjQ0QTQuMTYsNC4xNiwwLDAsMSw2LjMyLDExLjExWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTAuNCwxNi45MWgxLjUyTDEyLDE2YTcuMTksNy4xOSwwLDAsMSw3LjEyLTYuMjVoLjA3YTcuMTcsNy4xNywwLDAsMSw1LjcsMi45MiwxMS4wNSwxMS4wNSwwLDAsMSwy''@;'; put 'put ''LjcyLjc3LDkuMiw5LjIsMCwwLDAtOC40LTUuNjloLS4wOWE5LjIsOS4yLDAsMCwwLTguOTQsNy4xMiw2LjE1LDYuMTUsMCwwLDAtMy42NCwxMSw4LjExLDguMTEsMCwwLDEsLjc5LTIsNC4xNCw0LjE0LDAsMCwxLDMtN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0yIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTMyLjQyLDI0LjQ3di0uNjJhOS4xOCw5LjE4LDAsMCwwLTE4LjEzLTIuMTZBNi4xNiw2LjE2LDAsMCwwLDE0LjQ4LDM0SDMxYTQuODgsNC44OCwwLDAsMCwxLjQ2LTkuNTNaTTMxLDMySDE0LjQ4YTQuMTYsNC4xNiwwLDEsMSwwLTguMzJI''@;'; put 'put ''MTZsLjExLS44N2E3LjE5LDcuMTksMCwwLDEsNy4xMi02LjI1aC4wN2E3LjIxLDcuMjEsMCwwLDEsNy4xMiw3LjI1djFjMCwuMDcsMCwuMTMsMCwuMmwtLjA3LDEuMTEuOTQuMTFBMi44OCwyLjg4LDAsMCwxLDMxLDMyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRo''@;'; put 'put ''LTMiIC8+XG4gICAgICAgICcpLF8uQ2xyU2hhcGVDbG91ZFRyYWZmaWM9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LjU0LDIwLjgyYS44OC44OCwwLDAsMC0uODgtLjg4SDIwLjc1bDEuMS0xLjFBLjg4Ljg4LDAsMCwwLDIwLjYsMTcuNmwtMy4yMSwzLjIyTDIwLjYsMjRhLjg4Ljg4''@;'; put 'put ''LDAsMSwwLDEuMjUtMS4yNEwyMC43NiwyMS43aDQuOUEuODguODgsMCwwLDAsMjYuNTQsMjAuODJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS4yNywyMS43YS44OC44OCwwLDEsMCwwLTEuNzZoLS41OGEu''@;'; put 'put ''ODguODgsMCwxLDAsMCwxLjc2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMzIuMjEsMjBoLS4wNmEuODUuODUsMCwwLDAtLjg1Ljg4LjkxLjkxLDAsMCwwLC45MS44OC44OC44OCwwLDEsMCwwLTEuNzZaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMi41OSwxMWEuODguODgsMCwwLDAtMS4yNSwxLjI0bDEuMSwxLjFIMjcuNTNhLjg4Ljg4LDAsMSwwLDAsMS43Nmg0LjlsLTEuMDksMS4wOWEuODguODgsMCwwLDAsMS4y''@;'; put 'put ''NSwxLjI0bDMuMjEtMy4yMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTI0LjUsMTUuMDdhLjg4Ljg4LDAsMSwwLDAtMS43NmgtLjU4YS44OC44OCwwLDEsMCwwLDEuNzZaIiBjbGFzcz0iY2xyLWktb3V0bGlu''@;'; put 'put ''ZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMS45LDE0LjI3YS44NS44NSwwLDAsMC0uODUtLjg4SDIxYS44OC44OCwwLDEsMCwwLDEuNzZBLjkxLjkxLDAsMCwwLDIxLjksMTQuMjdaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5l''@;'; put 'put ''LXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMC4zNiwyMy42NWMwLC4xMywwLC4yNiwwLC4zOWEzLjc3LDMuNzcsMCwwLDEtMy42MiwzLjg5SDcuMjhhNS4zMiw1LjMyLDAsMCwxLTUuMTMtNS40OEE1LjMyLDUuMzIsMCwwLDEsNy4yOCwxN0g4LjkxTDksMTYuMTJhOC45Miw4''@;'; put 'put ''LjkyLDAsMCwxLDguNjItOGguMDhhOC40OSw4LjQ5LDAsMCwxLDYuNTYsMy4yOWgyLjM3YTEwLjU1LDEwLjU1LDAsMCwwLTguOTEtNS4yNWgtLjExQTEwLjgyLDEwLjgyLDAsMCwwLDcuMjIsMTVhNy4yOCw3LjI4LDAsMCwwLTcsNy40Myw3LjI3LDcuMjcsMCwwLDAsNy4wOCw3LjQzSDI2Ljc3''@;'; put 'put ''QTUuNzIsNS43MiwwLDAsMCwzMi4zNSwyNGEzLjc3LDMuNzcsMCwwLDAsMC0uMzlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgJyksXy5DbHJTaGFwZURlcGxveT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBjbGFzcz0iY2xyLWktb3V0''@;'; put 'put ''bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgZD0iTTMzLDJIMjIuMWExLDEsMCwwLDAsMCwyaDguNTNsLTguODIsOWExLDEsMCwxLDAsMS40MywxLjRMMzIsNS40NlYxMy45YTEsMSwwLDAsMCwyLDBWM0ExLDEsMCwwLDAsMzMsMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHIt''@;'; put 'put ''aS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiBkPSJNMTEuNTQsMTAuNzNsLTksNS4xN2ExLDEsMCwwLDAtLjUuODd2MTFhMSwxLDAsMCwwLC41Ljg3bDksNS4xNWExLDEsMCwwLDAsMSwwbDktNS4xNWExLDEsMCwwLDAsLjUtLjg3di0xMWExLDEsMCwwLDAtLjUtLjg3bC05LTUuMTdB''@;'; put 'put ''MSwxLDAsMCwwLDExLjU0LDEwLjczWk0xMSwzMS4wOGwtNy00VjE4LjQ0bDcsNFpNMTIsMjEsNC44MSwxNi44NywxMiwxMi43OGw3LjIxLDQuMTJabTgsNi4wOS03LDRWMjIuNDRsNy00WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgt''@;'; put 'put ''MSIgZD0iTTMzLDJIMjIuMWExLDEsMCwwLDAsMCwyaDguNTNsLTguODIsOWExLDEsMCwxLDAsMS40MywxLjRMMzIsNS40NlYxMy45YTEsMSwwLDAsMCwyLDBWM0ExLDEsMCwwLDAsMzMsMloiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRo''@;'; put 'put ''LTIiIGQ9Ik0xMi40NiwxMC43M2ExLDEsMCwwLDAtMSwwbC04LjY4LDVMMTIsMjFsOS4xOS01LjI2WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgZD0iTTIsMjcuNzNhMSwxLDAsMCwwLC41Ljg3TDExLDMzLjQ2di0xMUwyLDE3''@;'; put 'put ''LjI4WiIvPlxuICAgICAgICAgICAgPHBhdGggY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNCIgZD0iTTEzLDMzLjQ2bDguNS00Ljg2YTEsMSwwLDAsMCwuNS0uODdWMTcuMjlsLTksNS4xNVoiLz5cbiAgICAgICAgJyksXy5DbHJTaGFwZUhlbGl4PSgwLGcuY2xySWNvblNW''@;'; 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 ''LF8uQ2xyU2hhcGVGbGFzaz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDMsMjcuMjgsMjMsMTQuODRWNGgxYTEsMSwwLDAsMCwwLTJIMTJhMSwxLDAsMCwwLDAsMmgxVjE0Ljg0TDQuNTEsMjcuMzZBNC4yOSw0LjI5LDAsMCwwLDUsMzIuOCw0LjM4LDQuMzgsMCwwLDAsOC4xNSwz''@;'; put 'put ''NEgyOGE0LjI0LDQuMjQsMCwwLDAsMy40Mi02LjcyWk0yOS44NSwzMWEyLjYyLDIuNjIsMCwwLDEtMiwxSDhhMi4yLDIuMiwwLDAsMS0yLjA2LTEuNDEsMi42OCwyLjY4LDAsMCwxLC4yOS0yLjE3bDMtNC40NCwxNCwwLTEuMzEtMkgxMC41N0wxNSwxNS40NlY0aDZWMTUuNDZsOC44NCwxMy4w''@;'; put 'put ''NUEyLjIzLDIuMjMsMCwwLDEsMjkuODUsMzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zMS40OSwyNy40LDIzLDE0Ljk0VjRoMWExLDEsMCwwLDAsMC0ySDEyLjA4YTEsMSwwLDAsMCwwLDJIMTNWMTQuOTRM''@;'; put 'put ''NC41OCwyNy4zMWE0LjMxLDQuMzEsMCwwLDAtLjc4LDNBNC4yMyw0LjIzLDAsMCwwLDgsMzRIMjcuODZBNC4zNiw0LjM2LDAsMCwwLDMxLDMyLjgsNC4yMyw0LjIzLDAsMCwwLDMxLjQ5LDI3LjRaTTE1LDE1LjQ5VjRoNlYxNS40OUwyNi4xNSwyM0g5Ljg1WiIgY2xhc3M9ImNsci1pLXNvbGlk''@;'; put 'put ''IGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgJyksXy5DbHJTaGFwZUFkbWluaXN0cmF0b3I9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE0LjY4LDE0LjgxYTYuNzYsNi43NiwwLDEsMSw2Ljc2LTYuNzVBNi43Nyw2Ljc3LDAsMCwxLDE0LjY4LDE0LjgxWm0wLTExLjUxYTQu''@;'; 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 ''MCwxLDI0Ljg3LDI4LjE4WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIgLz5cbiAgICAgICAgJyksXy5DbHJTaGFwZUhhcmREcml2ZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsOGEyLDIsMCwwLDAtMi0ySDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCww''@;'; 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+XG4gICAgICAgICcpLF8uQ2xyU2hhcGVIYXJkRHJpdmVEaXNrcz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYsNS43NEExLjc0LDEuNzQsMCwwLDAsMjQuMjYsNEgzLjc0QTEuNzQsMS43NCwwLDAsMCwyLDUuNzRWMjAuMjZBMS43''@;'; 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+XG4gICAgICAgICcpLF8uQ2xyU2hhcGVOVk1lPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yNywyMlYxNGEyLDIsMCwwLDAtMi0ySDExYTIsMiwwLDAsMC0yLDJ2OGEyLDIsMCwwLDAsMiwySDI1QTIsMiwwLDAsMCwyNywyMlpNMTEsMTRI''@;'; put 'put ''MjV2OEgxMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPlxuICAgICAgICAgICAgPHJlY3QgeD0iMTkiIHk9IjYiIHdpZHRoPSI0IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPlxuICAgICAgICAg''@;'; put 'put ''ICAgPHJlY3QgeD0iMjUuMDEiIHk9IjYiIHdpZHRoPSIxLjk3IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPlxuICAgICAgICAgICAgPHBhdGggZD0iTTUuOCw4SDE2Ljg3VjZoLTExTDcuNzgsNC4wOGExLDEsMCwwLDAsMC0xLjQyLDEs''@;'; put 'put ''MSwwLDAsMC0xLjQxLDBMMiw3LDYuMzcsMTEuNGExLDEsMCwwLDAsMS40MSwwLDEsMSwwLDAsMCwwLTEuNDFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0yOS42MSwyNC42OGExLDEsMCwwLDAtMS40MSwwLDEs''@;'; put 'put ''MSwwLDAsMCwwLDEuNDJMMzAuMSwyOEgxOXYySDMwLjJsLTIsMmExLDEsMCwwLDAsMCwxLjQxLDEsMSwwLDAsMCwuNy4yOSwxLDEsMCwwLDAsLjcxLS4yOUwzNCwyOS4wNVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPlxuICAgICAgICAgICAgPHJlY3Qg''@;'; put 'put ''eD0iMTMiIHk9IjI4IiB3aWR0aD0iNCIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz5cbiAgICAgICAgICAgIDxyZWN0IHg9IjkiIHk9IjI4IiB3aWR0aD0iMS45NyIgaGVpZ2h0PSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtNyIgLz5cbiAgICAgICAgJyksXy5DbHJTaGFwZVNTRD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsNkg0QTIsMiwwLDAsMCwyLDhWMjhhMiwyLDAsMCwwLDIsMkgzMmEyLDIsMCwwLDAsMi0yVjhBMiwyLDAsMCwwLDMyLDZabTAsMjJINFY4SDMyWiIgY2xhc3M9''@;'; 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+XG4gICAgICAgICcpLF8uQ2xyU2hhcGVCbHVldG9vdGg9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTI2LjY0LDI1LjI3LDE5LDE3LjUzLDE5LDMsMjUuMjEsOS40bC01LjY1LDUuNzlMMjEsMTYuNjJsNS42OC01LjgyYTIsMiwwLDAs''@;'; put 'put ''MCwwLTIuNzhMMjAuNDgsMS43QTIuMDgsMi4wOCwwLDAsMCwxOC44NSwxLDIsMiwwLDAsMCwxNywzVjE1LjM4TDEwLjA1LDguMjdBMSwxLDAsMCwwLDguNjIsOS42NkwxNi43OSwxOCw5LjA2LDI2YTEsMSwwLDAsMCwwLDEuNDEsMSwxLDAsMCwwLC43LjI5LDEsMSwwLDAsMCwuNzItLjMxTDE3''@;'; put 'put ''LDIwLjY4VjMzYTIuMDcsMi4wNywwLDAsMCwuNzEsMS42MkEyLDIsMCwwLDAsMTksMzVhMS45NCwxLjk0LDAsMCwwLDEuNDItLjZsNi4yMy02LjM4QTIsMiwwLDAsMCwyNi42NCwyNS4yN1pNMTksMzMuMDVWMjAuMjlsNi4yMSw2LjM2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiIC8+XG4gIDxwYXRoIGQ9Ik0yNi41MiwyNC41MmwtNS42NS01LjgzLTEuNDYtMS41di0xMkwyMy43OSw5LjdsLTMuNiwzLjcxLDIuMjQsMi4yOSw0LjA5LTQuMjJhMi41NCwyLjU0LDAsMCwwLDAtMy41NkwyMC41NywxLjc4QTIuNTQsMi41NCwwLDAsMCwxNi4yLDMuNTVW''@;'; put 'put ''MTMuODZsLTUuNTMtNS43YTEuNiwxLjYsMCwxLDAtMi4zLDIuMjNMMTUuNzUsMThsLTcsNy4xOWExLjYsMS42LDAsMCwwLDAsMi4yNiwxLjYzLDEuNjMsMCwwLDAsMS4xMi40NSwxLjU4LDEuNTgsMCwwLDAsMS4xNS0uNDlsNS4xMS01LjI3VjMyLjQ1YTIuNTMsMi41MywwLDAsMCwxLjU5LDIu''@;'; put 'put ''MzYsMi40NCwyLjQ0LDAsMCwwLC45NS4xOSwyLjU2LDIuNTYsMCwwLDAsMS44My0uNzdsNS45NS02LjE1QTIuNTQsMi41NCwwLDAsMCwyNi41MiwyNC41MlpNMTkuNCwzMC44M1YyMS43N2w0LjM5LDQuNTNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLF8u''@;'; put 'put ''Q2xyU2hhcGVCbHVldG9vdGhPZmY9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE5LDMsMjUuMjIsOS40bC01LjY2LDUuOEwyMSwxNi42M2w1LjY4LTUuODNhMiwyLDAsMCwwLDAtMi43OEwyMC40OCwxLjdBMiwyLDAsMCwwLDE4Ljg1LDEsMiwyLDAsMCwwLDE3LDN2MTEuNGwyLDJaIiBj''@;'; put 'put ''bGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNC43Nyw1LDMuMzYsNi40MiwxNS44OSwxOSw5LjA2LDI2YTEsMSwwLDAsMCwuNzEsMS43LDEsMSwwLDAsMCwuNzItLjMxTDE3LDIwLjY4VjMyLjk0YTIuMDgsMi4wOCwwLDAsMCwuNzEsMS42M0Ey''@;'; put 'put ''LDIsMCwwLDAsMTksMzVhMiwyLDAsMCwwLDEuNDItLjZsNS40MS01LjU0LDMuNTQsMy41M0wzMC43NywzMVpNMTksMzMuMDV2LTExbDUuNDEsNS40MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xOS4zMSw1LjE3LDIzLjcsOS43bC0z''@;'; put 'put ''LjU5LDMuNzEsMi4yNCwyLjI5LDQuMDktNC4yMmEyLjU2LDIuNTYsMCwwLDAsMC0zLjU2bC02LTYuMTRhMi41MSwyLjUxLDAsMCwwLTIuNzctLjU5LDIuNTQsMi41NCwwLDAsMC0xLjYsMi4zNnYxMGwzLjIxLDMuMjFaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAv''@;'; put 'put ''PjxwYXRoIGQ9Ik00LjUsNSwzLjA5LDYuNDIsMTUuMTcsMTguNTEsOC43LDI1LjE5QTEuNiwxLjYsMCwwLDAsOS44NSwyNy45LDEuNTcsMS41NywwLDAsMCwxMSwyNy40MWw1LjExLTUuMjdWMzIuNDVhMi41NCwyLjU0LDAsMCwwLDEuNiwyLjM2LDIuNDQsMi40NCwwLDAsMCwuOTUuMTksMi41''@;'; put 'put ''NSwyLjU1LDAsMCwwLDEuODItLjc3bDUuMTItNS4yOSwzLjQ5LDMuNDhMMzAuNSwzMVpNMTkuODEsMzAuODNWMjIuNjVsNCw0WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxfLkNsclNoYXBlUHJvY2Vzc09uVk09KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGgg''@;'; put 'put ''ZD0iTTMzLjQ5LDI2LjI4YTEsMSwwLDAsMC0xLjItLjdsLTIuNDkuNjdhMTQuMjMsMTQuMjMsMCwwLDAsMi40LTYuNzVBMTQuNDgsMTQuNDgsMCwwLDAsMjcuMzcsNy4zNSwxLDEsMCwwLDAsMjYsNy40NGExLDEsMCwwLDAsLjA5LDEuNDEsMTIuNDUsMTIuNDUsMCwwLDEsNC4xNiwxMC40Niwx''@;'; put 'put ''Mi4xOSwxMi4xOSwwLDAsMS0yLDUuNzRMMjgsMjIuNTRhMSwxLDAsMSwwLTEuOTUuMTZsLjUsNi40NCw2LjI1LTEuNjZBMSwxLDAsMCwwLDMzLjQ5LDI2LjI4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTQuMzEsMTcuMDhhMS4wNiwx''@;'; put 'put ''LjA2LDAsMCwwLC40NC4xNiwxLDEsMCwwLDAsMS4xMi0uODVBMTIuMjEsMTIuMjEsMCwwLDEsMTguNjksNS44NEwxNi40NSw3LjM3YTEsMSwwLDAsMCwuNDcsMS43OUExLDEsMCwwLDAsMTcuNTYsOWw1LjMzLTMuNjZMMTguMzMuNzZhMSwxLDAsMSwwLTEuMzksMS4zOGwxLjcsMS43QTE0LjIs''@;'; put 'put ''MTQuMiwwLDAsMCwzLjg5LDE2LjEyLDEsMSwwLDAsMCw0LjMxLDE3LjA4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIxLjczLDI5LjkzYTEyLDEyLDAsMCwxLTQuODQuNTEsMTIuMywxMi4zLDAsMCwxLTkuNTctNi4zbDIuNDkuOTNh''@;'; put 'put ''MSwxLDAsMCwwLC42OS0xLjg0bC00LjU5LTEuN2gwTDQuNDQsMjEsMy4zMywyNy4zNWExLDEsMCwwLDAsLjc5LDEuMTNsLjE3LDBhMSwxLDAsMCwwLDEtLjgxbC40Mi0yLjRhMTQuMywxNC4zLDAsMCwwLDExLDcuMTQsMTMuOTEsMTMuOTEsMCwwLDAsNS42My0uNiwxLDEsMCwwLDAtLjYtMS45''@;'; put 'put ''WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIyLDEzSDE0YTEsMSwwLDAsMC0xLDF2OGExLDEsMCwwLDAsMSwxaDhhMSwxLDAsMCwwLDEtMVYxNEExLDEsMCwwLDAsMjIsMTNabS0xLDhIMTVWMTVoNloiIGNsYXNzPSJjbHItaS1vdXRs''@;'; put 'put ''aW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLF8uQ2xyU2hhcGVBc3NpZ25Vc2VyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwxN2E3LjQ2LDcuNDYsMCwxLDAtNy40NS03LjQ2QTcuNDYsNy40NiwwLDAsMCwxOCwxN1pNMTgsNC4wN2E1LjQ2LDUuNDYsMCwxLDEtNS40NSw1''@;'; 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 ''NzcsMTguNjJaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC00IiAvPicpLF8uQ2xyU2hhcGVBdG9tPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwxNC4wNWE0LDQsMCwxLDAsNCw0QTQsNCwwLDAsMCwxOCwxNC4wNVptMCw2LjQ0YTIuNDIsMi40MiwwLDEsMSwy''@;'; 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 ''KSByb3RhdGUoLTkuMjIpIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIiAvPicpLF8uQ2xyU2hhcGVCYXJDb2RlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik01LDdBMSwxLDAsMCwwLDQsOFYzMGExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDUsN1oiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik05LDdBMSwxLDAsMCwwLDgsOFYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDksN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xMyw3YTEs''@;'; put 'put ''MSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwxMyw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTE3LDdhMSwxLDAsMCwwLTEsMVYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDE3LDdaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMjEsN2ExLDEsMCwwLDAtMSwxVjI2YTEsMSwwLDAsMCwyLDBWOEExLDEsMCwwLDAsMjEsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0yNSw3YTEs''@;'; put 'put ''MSwwLDAsMC0xLDFWMjZhMSwxLDAsMCwwLDIsMFY4QTEsMSwwLDAsMCwyNSw3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+PHBhdGggZD0iTTI5LDdhMSwxLDAsMCwwLTEsMVYyNmExLDEsMCwwLDAsMiwwVjhBMSwxLDAsMCwwLDI5LDdaIiBjbGFzcz0i''@;'; put 'put ''Y2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNyIgLz48cGF0aCBkPSJNMzMsN2ExLDEsMCwwLDAtMSwxVjMwYTEsMSwwLDAsMCwyLDBWOEExLDEsMCwwLDAsMzMsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC04IiAvPicpLF8uQ2xyU2hhcGVDZER2''@;'; 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 ''ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz4nKSxfLkNsclNoYXBlQ29udGFpbmVyPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMiwzMEg0YTIsMiwwLDAsMS0yLTJWOEEyLDIsMCwwLDEsNCw2SDMyYTIsMiwwLDAsMSwyLDJWMjhBMiwyLDAsMCwxLDMyLDMwWk00LDhW''@;'; put 'put ''MjhIMzJWOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik05LDI1LjNhLjguOCwwLDAsMS0uOC0uOHYtMTNhLjguOCwwLDAsMSwxLjYsMHYxM0EuOC44LDAsMCwxLDksMjUuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxp''@;'; put 'put ''bmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNC45MiwyNS4zYS44LjgsMCwwLDEtLjgtLjh2LTEzYS44LjgsMCwwLDEsMS42LDB2MTNBLjguOCwwLDAsMSwxNC45MiwyNS4zWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTIxLDI1LjNhLjgu''@;'; put 'put ''OCwwLDAsMS0uOC0uOHYtMTNhLjguOCwwLDAsMSwxLjYsMHYxM0EuOC44LDAsMCwxLDIxLDI1LjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMjcsMjUuM2EuOC44LDAsMCwxLS44LS44di0xM2EuOC44LDAsMCwxLDEuNiwwdjEzQS44''@;'; put 'put ''LjgsMCwwLDEsMjcsMjUuM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01IiAvPjxwYXRoIGQ9Ik0zMiw2SDRBMiwyLDAsMCwwLDIsOFYyOGEyLDIsMCwwLDAsMiwySDMyYTIsMiwwLDAsMCwyLTJWOEEyLDIsMCwwLDAsMzIsNlpNOS42MywyNC4yM2EuNzkuNzks''@;'; put 'put ''MCwwLDEtLjgxLjc3QS43OS43OSwwLDAsMSw4LDI0LjIzVjExLjc3QS43OS43OSwwLDAsMSw4LjgyLDExYS43OS43OSwwLDAsMSwuODEuNzdabTYsMGEuNzkuNzksMCwwLDEtLjgyLjc3Ljc5Ljc5LDAsMCwxLS44MS0uNzdWMTEuNzdhLjc5Ljc5LDAsMCwxLC44MS0uNzcuNzkuNzksMCwwLDEs''@;'; put 'put ''LjgyLjc3Wm02LjIxLDBhLjc5Ljc5LDAsMCwxLS44Mi43Ny43OS43OSwwLDAsMS0uODEtLjc3VjExLjc3YS43OS43OSwwLDAsMSwuODEtLjc3Ljc5Ljc5LDAsMCwxLC44Mi43N1ptNi4xMiwwYS43OS43OSwwLDAsMS0uODIuNzcuNzkuNzksMCwwLDEtLjgxLS43N1YxMS43N2EuNzkuNzksMCww''@;'; put 'put ''LDEsLjgxLS43Ny43OS43OSwwLDAsMSwuODIuNzdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLF8uQ2xyU2hhcGVDb250YWluZXJWb2x1bWU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTgsMTcuNThhMzIuMzUsMzIuMzUsMCwwLDAsNi4zLjkyLDQu''@;'; 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 ''WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz4nKSxfLkNsclNoYXBlRmlsZVNoYXJlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMCw5SDE2LjQyTDE0LjExLDUuODJBMiwyLDAsMCwwLDEyLjQ5LDVINkEyLDIsMCwwLDAsNCw3VjI5YTIsMiwwLDAsMCwy''@;'; put 'put ''LDJIMzBhMiwyLDAsMCwwLDItMlYxMUEyLDIsMCwwLDAsMzAsOVptMCwyMEg2VjEzaDcuMzFhMiwyLDAsMCwwLDItMkg2VjdoNi40OWwyLjYxLDMuNTlhMSwxLDAsMCwwLC44MS40MUgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0y''@;'; put 'put ''MS45MSwyMi40OGEyLjA2LDIuMDYsMCwwLDAtMS40NC42MmwtNS43Mi0yLjY2VjIwbDUuNjYtMi42NWEyLjA4LDIuMDgsMCwxLDAsLjA2LTIuOTQsMi4xMiwyLjEyLDAsMCwwLS42NCwxLjQ4di4yM2wtNS42NCwyLjY2YTIuMDgsMi4wOCwwLDEsMC0uMDgsMi45NWwuMDgtLjA4LDUuNjcsMi42''@;'; put 'put ''NnYuM2EyLjA5LDIuMDksMCwxLDAsMi4wOC0yLjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMzAsOUgxNi40MkwxNC4xMSw1LjgyQTIsMiwwLDAsMCwxMi40OSw1SDZBMiwyLDAsMCwwLDQsN1YyOWEyLDIsMCwwLDAsMiwySDMwYTIs''@;'; put 'put ''MiwwLDAsMCwyLTJWMTFBMiwyLDAsMCwwLDMwLDlaTTYsN2g2LjQ5bDIuNzIsNEg2Wk0yMS45NCwyNi42NGEyLjA5LDIuMDksMCwwLDEtMi4xMS0yLjA2bDAtLjMtNS42Ny0yLjY2LS4wOC4wOGEyLjA4LDIuMDgsMCwxLDEsLjA4LTIuOTVsNS42NC0yLjY2di0uMjNhMi4wOCwyLjA4LDAsMSwx''@;'; put 'put ''LC41OCwxLjQ2TDE0Ljc1LDIwdi40N2w1LjcyLDIuNjZhMi4wNywyLjA3LDAsMSwxLDEuNDcsMy41NFoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+JyksXy5DbHJTaGFwZVFyQ29kZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNNS42LDRBMS42LDEuNiww''@;'; 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 ''ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTE3IiAvPjxwb2x5Z29uIHBvaW50cz0iMTQgMjggMTYgMjggMTYgMjYgMTggMjYgMTggMjQgMTYgMjQgMTYgMjAgMTQgMjAgMTQgMjgiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xOCIgLz4nKSxfLkNs''@;'; 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 ''c29saWQgY2xyLWktc29saWQtcGF0aC0xIiAvPicpLF8uQ2xyU2hhcGVSYWRhcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIsMThjMCw3LjctNi4zLDE0LTE0LDE0Yy03LjcsMC0xNC02LjMtMTQtMTRDNCwxMC42LDkuNyw0LjUsMTcuMSw0djMuN2MtNS43LDAuNS05LjksNS41LTku''@;'; put 'put ''NCwxMS4yczUuNSw5LjksMTEuMiw5LjRcblx0YzUuMy0wLjUsOS40LTQuOSw5LjQtMTAuM2gtMmMwLDQuNi0zLjcsOC4zLTguMyw4LjNzLTguMy0zLjctOC4zLTguM2MwLTQuMiwzLjEtNy44LDcuMy04LjN2NC40Yy0xLjgsMC40LTMuMSwyLTMuMSwzLjlcblx0YzAsMi4yLDEuOCw0LDQsNHM0''@;'; put 'put ''LTEuOCw0LTRjMC0xLjgtMS4zLTMuNC0zLTMuOFYyLjFDMTguNiwyLDE4LjMsMiwxOCwyQzkuMiwyLDIsOS4yLDIsMThzNy4yLDE2LDE2LDE2czE2LTcuMiwxNi0xNkgzMnogTTIwLDE4XG5cdGMwLDEuMS0wLjksMi0yLDJzLTItMC45LTItMnMwLjktMiwyLTJTMjAsMTYuOSwyMCwxOHoiIGNs''@;'; put 'put ''YXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMiwxOGMwLDcuNy02LjIsMTQtMTQsMTRTNCwyNS44LDQsMThjMC03LjQsNS43LTEzLjUsMTMuMS0xNHYzLjdjLTUuNywwLjUtOS44LDUuNS05LjMsMTEuMnM1LjUsOS44LDExLjIsOS4zXG5cdFx0''@;'; put 'put ''YzUuMy0wLjUsOS4zLTQuOSw5LjMtMTAuMmgtMmMwLDQuNi0zLjcsOC4zLTguMyw4LjNTOS43LDIyLjYsOS43LDE4YzAtNC4yLDMuMi03LjgsNy4zLTguMnY0LjRjLTIuMSwwLjYtMy40LDIuNy0yLjksNC45XG5cdFx0YzAuNiwyLjEsMi43LDMuNCw0LjksMi45YzIuMS0wLjYsMy40LTIuNywy''@;'; put 'put ''LjktNC45Yy0wLjQtMS40LTEuNS0yLjUtMi45LTIuOVYyYy0wLjQsMC0wLjcsMC0xLjEsMGMtOC44LDAtMTYsNy4yLTE2LDE2XG5cdFx0YzAsOC44LDcuMiwxNiwxNiwxNnMxNi03LjIsMTYtMTZjMCwwLDAsMCwwLDBIMzJ6IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0x''@;'; put 'put ''IiAvPicpLF8uQ2xyU2hhcGVJbmR1Y3Rvcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuMzEsMjUuODFjLTEuNzUsMC0zLTIuNDktMy02YTEyLjc5LDEyLjc5LDAsMCwxLDEuNzItNi43LDIuNTcsMi41NywwLDAsMC0zLjc5LDBBMTIuNzksMTIuNzksMCwwLDEsMjEsMTkuNzZjMCwz''@;'; put 'put ''LjU2LTEuMjMsNi0zLDZzLTMtMi40OS0zLTZhMTIuNzksMTIuNzksMCwwLDEsMS43Mi02LjcsMi41NywyLjU3LDAsMCwwLTMuNzksMCwxMi43OSwxMi43OSwwLDAsMSwxLjcyLDYuN2MwLDMuNTYtMS4yMyw2LTMsNnMtMy0yLjQ5LTMtNmExMi44OCwxMi44OCwwLDAsMSwxLjcxLTYuNywyLjcs''@;'; put 'put ''Mi43LDAsMCwwLTEuODktLjg3QzcuMSwxMi4xOSw1LjY5LDEzLjcsNSwxNmwtLjIzLjdIMmExLDEsMCwwLDEsMC0ySDMuMjljMS4xLTIuODMsMy4wNi00LjU1LDUuMjQtNC41NWE0LjY3LDQuNjcsMCwwLDEsMy4xNiwxLjMyLDQuNjIsNC42MiwwLDAsMSwzLjE1LTEuMzJBNC42NSw0LjY1LDAs''@;'; put 'put ''MCwxLDE4LDExLjUxYTQuNDMsNC40MywwLDAsMSw2LjMxLDAsNC42Nyw0LjY3LDAsMCwxLDMuMTYtMS4zMmMyLjE4LDAsNC4xNCwxLjcyLDUuMjQsNC41NUgzNGExLDEsMCwwLDEsMCwySDMxLjI4bC0uMjMtLjdjLS43NC0yLjM0LTIuMTUtMy44NS0zLjU4LTMuODVhMi43LDIuNywwLDAsMC0x''@;'; put 'put ''Ljg5Ljg3LDEyLjg4LDEyLjg4LDAsMCwxLDEuNzEsNi43QzI3LjI5LDIzLjMyLDI2LjA3LDI1LjgxLDI0LjMxLDI1LjgxWk0xOCwxNC45M2ExMS43MSwxMS43MSwwLDAsMC0xLDQuODNjMCwyLjU0LjY2LDMuNzUsMSw0LC4zMi0uMjcsMS0xLjQ4LDEtNEExMS43MSwxMS43MSwwLDAsMCwxOCwx''@;'; put 'put ''NC45M1ptNi4zMSwwYTExLjcxLDExLjcxLDAsMCwwLTEsNC44M2MwLDIuNTQuNjYsMy43NSwxLDQsLjMyLS4yNywxLTEuNDgsMS00QTExLjcxLDExLjcxLDAsMCwwLDI0LjMxLDE0LjkzWm0tMTIuNjIsMGExMS43MSwxMS43MSwwLDAsMC0xLDQuODNjMCwyLjU0LjY2LDMuNzUsMSw0LC4zMi0u''@;'; put 'put ''MjcsMS0xLjQ4LDEtNEExMS43MSwxMS43MSwwLDAsMCwxMS42OSwxNC45M1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicpLF8uQ2xyU2hhcGVSZXNpc3Rvcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjkuNDMsMjYuMzRoMEExLjQ3LDEuNDcs''@;'; put 'put ''MCwwLDEsMjgsMjUuMjJMMjQuODYsMTMuMTUsMjEuNzQsMjUuMjJhMS40OSwxLjQ5LDAsMCwxLTEuNDUsMS4xMmgwYTEuNDksMS40OSwwLDAsMS0xLjQ2LTEuMTJMMTUuNzEsMTMuMTUsMTIuNiwyNS4yMmExLjUxLDEuNTEsMCwwLDEtMi45MSwwTDYuNTcsMTMuMTUsNS4yMiwxOC4zN0gyYTEs''@;'; put 'put ''MSwwLDAsMSwwLTJIMy42N2wxLjQ1LTUuNTlBMS40OCwxLjQ4LDAsMCwxLDYuNTcsOS42NmgwQTEuNDcsMS40NywwLDAsMSw4LDEwLjc4bDMuMTIsMTIuMDcsMy4xMi0xMi4wN2ExLjQ5LDEuNDksMCwwLDEsMS40NS0xLjEyaDBhMS40OSwxLjQ5LDAsMCwxLDEuNDYsMS4xMmwzLjEyLDEyLjA3''@;'; put 'put ''LDMuMTItMTIuMDdhMS41LDEuNSwwLDAsMSwyLjksMGwzLjEyLDEyLjA3LDEuMzUtNS4yMkgzNGExLDEsMCwwLDEsMCwySDMyLjMzbC0xLjQ1LDUuNTlBMS40OCwxLjQ4LDAsMCwxLDI5LjQzLDI2LjM0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+Jyks''@;'; put 'put ''Xy5DbHJTaGFwZUNhcGFjaXRvcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUsMzQuMDZhMSwxLDAsMCwxLTEtMVYzLjE1YTEsMSwwLDEsMSwyLDBWMzMuMDZBMSwxLDAsMCwxLDE1LDM0LjA2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBh''@;'; put 'put ''dGggZD0iTTIxLDM0LjA2YTEsMSwwLDAsMS0xLTFWMy4xNWExLDEsMCwxLDEsMiwwVjMzLjA2QTEsMSwwLDAsMSwyMSwzNC4wNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNC40NiwxOUgzYTEsMSwwLDAsMSwwLTJIMTQuNDZhMSwx''@;'; put 'put ''LDAsMCwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMywxOUgyMS41NGExLDEsMCwwLDEsMC0ySDMzYTEsMSwwLDAsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSxfLkNs''@;'; put 'put ''clNoYXBlU3F1aWQ9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDdhMSwxLDAsMCwxLTEtMVYzLjE5YTEsMSwwLDAsMSwyLDBWNkExLDEsMCwwLDEsMTgsN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0xOCwzNGExLDEsMCww''@;'; put 'put ''LDEtMS0xVjMwYTEsMSwwLDAsMSwyLDB2M0ExLDEsMCwwLDEsMTgsMzRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNNy40MSwxOGwxLjc4LTEuNzdhMSwxLDAsMSwwLTEuNDItMS40Mkw2LDE2LjU5LDQuMjMsMTQuODFhMSwxLDAsMSww''@;'; put 'put ''LTEuNDIsMS40Mkw0LjU5LDE4LDIuODEsMTkuNzdhMSwxLDAsMCwwLDAsMS40MiwxLDEsMCwwLDAsLjcxLjI5LDEsMSwwLDAsMCwuNzEtLjI5TDYsMTkuNDFsMS43NywxLjc4YTEsMSwwLDAsMCwxLjQyLDAsMSwxLDAsMCwwLDAtMS40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik02LDEzLjc2bC4zNi0uMzZhMywzLDAsMCwxLDIuMTEtLjg4LDExLDExLDAsMCwxLDE5LDAsMywzLDAsMCwxLDIuMTIuODhsLjM2LjM2LjItLjJhMTMsMTMsMCwwLDAtMjQuNCwwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1w''@;'; put 'put ''YXRoLTQiIC8+PHBhdGggZD0iTTMwLDIyLjI0bC0uMzYuMzZhMywzLDAsMCwxLTIuMTIuODgsMTEsMTEsMCwwLDEtMTksMCwzLDMsMCwwLDEtMi4xMi0uODhMNiwyMi4yNGwtLjIuMmExMywxMywwLDAsMCwyNC40LDBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgt''@;'; put 'put ''NSIgLz48cGF0aCBkPSJNMzEuNDEsMThsMS43OC0xLjc3YTEsMSwwLDAsMC0xLjQyLTEuNDJMMzAsMTYuNTlsLTEuNzctMS43OGExLDEsMCwxLDAtMS40MiwxLjQyTDI4LjU5LDE4bC0xLjc4LDEuNzdhMSwxLDAsMCwwLDAsMS40MiwxLDEsMCwwLDAsLjcxLjI5LDEsMSwwLDAsMCwuNzEtLjI5''@;'; put 'put ''TDMwLDE5LjQxbDEuNzcsMS43OGExLDEsMCwwLDAsMS40MiwwLDEsMSwwLDAsMCwwLTEuNDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIgLz4nKSxfLkNsclNoYXBlSG9zdEdyb3VwPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yMS4wOCwzNGgtMTRB''@;'; 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+JyksXy5DbHJTaGFwZVN0b3JhZ2VBZGFwdGVy''@;'; put 'put ''PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik02LjA2LDMwYTEsMSwwLDAsMS0xLTFWOGgtMmExLDEsMCwwLDEsMC0yaDRWMjlBMSwxLDAsMCwxLDYuMDYsMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMzAuMDYsMjdoLTI1''@;'; put 'put ''VjloMjVhMywzLDAsMCwxLDMsM1YyNEEzLDMsMCwwLDEsMzAuMDYsMjdabS0yMy0yaDIzYTEsMSwwLDAsMCwxLTFWMTJhMSwxLDAsMCwwLTEtMWgtMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICA8cmVjdCB4PSIyMi4wNiIgeT0iMjAiIHdpZHRo''@;'; put 'put ''PSI2IiBoZWlnaHQ9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxyZWN0IHg9IjIyLjA2IiB5PSIxNCIgd2lkdGg9IjYiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0i''@;'; put 'put ''TTE5LjA2LDIyaC04VjIwaDdWMTRoMnY3QTEsMSwwLDAsMSwxOS4wNiwyMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC01Ii8+JyksXy5DbHJTaGFwZU5vZGVHcm91cD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzMuNTMsMjEuNThsLTQuOTQtMi44M1Yx''@;'; put 'put ''My4wOWExLDEsMCwwLDAtLjUxLS44N0wyMi42NCw5LjFhMSwxLDAsMCwwLTEsMEwxNi4yLDEyLjIyYTEsMSwwLDAsMC0uNTEuODd2NS42NmwtNC45NCwyLjgzYTEsMSwwLDAsMC0uNS44N3Y2LjI0YTEsMSwwLDAsMCwuNS44Nmw1LjQ1LDMuMTJhMSwxLDAsMCwwLDEsMGw0Ljk1LTIuODMsNC45''@;'; put 'put ''NSwyLjgzYTEsMSwwLDAsMCwuNS4xNCwxLDEsMCwwLDAsLjQ5LS4xNGw1LjQ1LTMuMTJhMSwxLDAsMCwwLC41LS44NlYyMi40NUExLDEsMCwwLDAsMzMuNTMsMjEuNThaTTIyLjE0LDExLjEybDQuNDUsMi41NVYxOWwtNC40NiwyLjU2LTQuNDQtMi42VjEzLjY3Wk0xNi42OSwzMC42NWwtNC40''@;'; put 'put ''NC0yLjU0VjIzbDQuNjgtMi42OCw0LjQsMi41N1YyOFpNMzIsMjguMTFsLTQuNDQsMi41NEwyMi45MywyOFYyMi45M2w0LjQ2LTIuNTdMMzIsMjNaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNNywyNy40M2ExLDEsMCwwLDEtMS0x''@;'; put 'put ''VjE5LjlBMSwxLDAsMCwxLDYuNSwxOWw0Ljk1LTIuODNWMTAuNTRhMSwxLDAsMCwxLC41LS44N2w1LjIxLTNhMSwxLDAsMCwxLDEuMzcuMzcsMSwxLDAsMCwxLS4zOCwxLjM3bC00LjcsMi42OHY1LjY2YTEsMSwwLDAsMS0uNTEuODdMOCwyMC40OHY1Ljk1QTEsMSwwLDAsMSw3LDI3LjQzWiIg''@;'; put 'put ''Y2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMsMjUuMDVhMSwxLDAsMCwxLTEtMVYxNy41M2ExLDEsMCwwLDEsLjUtLjg2bDUtMi44NFY4LjE3QTEsMSwwLDAsMSw4LDcuMzFsNS4yNS0zYTEsMSwwLDAsMSwxLDEuNzRMOS40NSw4Ljc1''@;'; put 'put ''djUuNjZhMSwxLDAsMCwxLS41MS44N0w0LDE4LjExdjUuOTRBMSwxLDAsMCwxLDMsMjUuMDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPicpLF8uQ2xyU2hhcGVOb2Rlcz0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTAuNSwzNC4yOSwyLDI5LjM5''@;'; put 'put ''VjE5LjU4bDguNS00LjksOC41LDQuOXY5LjgxWk00LDI4LjIzLDEwLjUsMzIsMTcsMjguMjNWMjAuNzRMMTAuNSwxNyw0LDIwLjc0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTI1LjUsMzQuMjksMTcsMjkuMzlWMTkuNThsOC41''@;'; put 'put ''LTQuOSw4LjUsNC45djkuODFaTTE5LDI4LjIzLDI1LjUsMzIsMzIsMjguMjNWMjAuNzRMMjUuNSwxNywxOSwyMC43NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xOCwyMS4zMmwtOC41LTQuOVY2LjYxTDE4LDEuNzFsOC41LDQu''@;'; put 'put ''OXY5LjgxWm0tNi41LTYuMDZMMTgsMTlsNi41LTMuNzVWNy43N0wxOCw0LDExLjUsNy43N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+JyksXy5DbHJTaGFwZU5hbWVzcGFjZT0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjcsNC4xOGExLDEsMCwx''@;'; put 'put ''LDAtMSwxLjczbDYsMy40N1YyNi42MmwtNiwzLjQ3YTEsMSwwLDAsMC0uMzcsMS4zNiwxLDEsMCwwLDAsMS4zNy4zN2w3LTQuMDVWOC4yM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik05LjY4LDI5LjksNCwyNi42MlY5LjM4TDku''@;'; put 'put ''NjgsNi4xYTEsMSwwLDEsMC0xLTEuNzNMMiw4LjIzVjI3Ljc3bDYuNjgsMy44NmExLDEsMCwwLDAsMS4zNy0uMzdBMSwxLDAsMCwwLDkuNjgsMjkuOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0xMCwxMlYyNGEyLDIsMCwwLDAs''@;'; put 'put ''MiwySDI0YTIsMiwwLDAsMCwyLTJWMTJhMiwyLDAsMCwwLTItMkgxMkEyLDIsMCwwLDAsMTAsMTJabTcsMHY1SDEyVjEyWm0tNSw3aDV2NUgxMlptNyw1VjE5aDV2NVptNS03SDE5VjEyaDVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPicpLF8uQ2xyU2hh''@;'; put 'put ''cGVOb2RlPSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOCwzMC42Niw3LDI0LjMzVjExLjY3TDE4LDUuMzRsMTEsNi4zM1YyNC4zM1pNOSwyMy4xOGw5LDUuMTcsOS01LjE3VjEyLjgyTDE4LDcuNjUsOSwxMi44MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xIi8+JyksXy5DbHJTaGFwZVBvZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjYsMzJIMTBhNiw2LDAsMCwxLTYtNlYxMGE2LDYsMCwwLDEsNi02SDI2YTYsNiwwLDAsMSw2LDZWMjZBNiw2LDAsMCwxLDI2LDMyWk0xMCw2YTQsNCwwLDAsMC00LDRWMjZhNCw0LDAsMCwwLDQsNEgy''@;'; put 'put ''NmE0LDQsMCwwLDAsNC00VjEwYTQsNCwwLDAsMC00LTRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIvPlxuICA8cGF0aCBkPSJNMjYuNTYsMTVIMTUuNDRBMS40MywxLjQzLDAsMCwwLDE0LDE2LjQ0djguMTJBMS40MywxLjQzLDAsMCwwLDE1LjQ0LDI2SDI2''@;'; put 'put ''LjU2QTEuNDMsMS40MywwLDAsMCwyOCwyNC41NlYxNi40NEExLjQzLDEuNDMsMCwwLDAsMjYuNTYsMTVaTTI2LDI0SDE2VjE3SDI2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTEyLjQsMTlIMTBWMTJIMjB2MS40aDJ2LTJBMS40''@;'; put 'put ''MywxLjQzLDAsMCwwLDIwLjU2LDEwSDkuNDRBMS40MywxLjQzLDAsMCwwLDgsMTEuNDR2OC4xMkExLjQzLDEuNDMsMCwwLDAsOS40NCwyMWgzWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz4nKSxfLkNsckNvbnRyb2xMdW49KDAsZy5jbHJJY29uU1ZHKSgn''@;'; 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+XG4gICcpLF8uQ2xyU2hhcGVNZWRpYUNoYW5nZXI9KDAsZy5jbHJJY29uU1ZHKSgnXG4gIDxwYXRoIGQ9Ik0zMCw0SDZBMiwyLDAsMCwwLDQsNlYzMGEyLDIsMCww''@;'; 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 ''MjYuODUsMS4xNFoiIGNsYXNzPSJjbHItaS1zb2xpZC0tYWxlcnRlZCBjbHItaS1zb2xpZC1wYXRoLTItLWFsZXJ0ZWQgY2xyLWktYWxlcnQiLz5cbiAgJyksXy5DbHJTaGFwZVRhcGVEcml2ZT0oMCxnLmNsckljb25TVkcpKCdcbiAgPHBhdGggZD0iTTMyLDZINEEyLDIsMCwwLDAsMiw4VjI4''@;'; 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+XG4gICcpLF8uQ2xyU2hhcGVBbmltYXRpb249KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEw''@;'; put 'put ''LjE2LDMxLjcxYTQuNCw0LjQsMCwwLDEtNC42NC0xQTQuMzQsNC4zNCwwLDAsMSw0LjIzLDI3LjZhNC40MSw0LjQxLDAsMCwxLC4xOC0xLjIsMTEuNjEsMTEuNjEsMCwwLDEtMS0yLjU2LDYuNCw2LjQsMCwwLDAsOS4zMyw4LjYzQTExLjU1LDExLjU1LDAsMCwxLDEwLjE2LDMxLjcxWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTE4LjQxLDI3LjY4YTcuNjEsNy42MSwwLDAsMS05LjA4LTEuMjYsNy41OCw3LjU4LDAsMCwxLTEuMjctOS4wNiwxNC4yNiwxNC4yNiwwLDAsMS0uMzctMi44NSw5LjU4LDkuNTgsMCwwLDAsLjIy''@;'; put 'put ''LDEzLjMzLDkuNjMsOS42MywwLDAsMCwxMy4zNS4yMkExNC40NiwxNC40NiwwLDAsMSwxOC40MSwyNy42OFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMS42NiwyNi4yMWExMi4xLDEyLjEsMCwxLDEsOC41Ny0zLjU0aDBBMTIu''@;'; put 'put ''MTEsMTIuMTEsMCwwLDEsMjEuNjYsMjYuMjFaTTIxLjY2LDRBMTAuMTEsMTAuMTEsMCwwLDAsMTEuNTQsMTQuMTFhMTAsMTAsMCwwLDAsMyw3LjE0LDEwLjEyLDEwLjEyLDAsMCwwLDE0LjMxLDBBMTAuMTEsMTAuMTEsMCwwLDAsMjEuNjYsNFptNy44NiwxOGgwWiIgY2xhc3M9ImNsci1pLW91''@;'; put 'put ''dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiLz5cbiAgXG4gIDxwYXRoIGQ9Ik0zLjUsMjMuNzdhNi40MSw2LjQxLDAsMCwwLDkuMzMsOC42N0ExMS42NSwxMS42NSwwLDAsMSwzLjUsMjMuNzdaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9''@;'; put 'put ''Ik03LjY4LDE0LjUzYTkuNiw5LjYsMCwwLDAsMTMuNCwxMy43QTE0LjExLDE0LjExLDAsMCwxLDcuNjgsMTQuNTNaIiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik0yMS43OCwyQTEyLjEyLDEyLjEyLDAsMSwxLDkuNjYsMTQuMTUsMTIuMTIs''@;'; put 'put ''MTIuMTIsMCwwLDEsMjEuNzgsMiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMyIvPlxuICAnKSxfLkNsclNoYXBlQ2lDZD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjMuNTMsMTkuODFhNy40NSw3LjQ1LDAsMCwxLTEuNjUtLjE4LDEwLjQ4LDEwLjQ4LDAsMCwx''@;'; 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 ''LS4xMiwxLjE4YTEsMSwwLDAsMCwuODksMS4xaC4xMWExLDEsMCwwLDAsMS0uOWwuNDItNC4wNmExLDEsMCwwLDAtMS4wNi0xLjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPicpLF8uQ2xyU2hhcGVGaWxlU2hhcmUyPSgwLGcuY2xySWNvblNWRykoJzxw''@;'; put 'put ''YXRoIGQ9Ik0yNSw0SDcuODNBMS44OSwxLjg5LDAsMCwwLDYsNS45MVYzMC4wOUExLjg5LDEuODksMCwwLDAsNy44MywzMkgyOC4xN0ExLjg3LDEuODcsMCwwLDAsMzAsMzAuMDlWOVpNMjQsNS43OCwyOC4yLDEwSDI0Wk04LDMwVjZIMjJ2Nmg2VjMwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUg''@;'; put 'put ''Y2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTIyLDIxLjgxYTIuMTEsMi4xMSwwLDAsMC0xLjQ0LjYybC01LjcyLTIuNjZ2LS40NGw1LjY2LTIuNjVhMi4wOCwyLjA4LDAsMSwwLC4wNi0yLjk0aDBhMi4xNCwyLjE0LDAsMCwwLS42NCwxLjQ4di4yM2wtNS42NCwyLjY2YTIu''@;'; put 'put ''MDgsMi4wOCwwLDEsMC0uMDgsMi45NWwuMDgtLjA4LDUuNjcsMi42NnYuM0EyLjA5LDIuMDksMCwxLDAsMjIsMjEuODRaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxuICBcbiAgPHBhdGggZD0iTTI1LDQuMDZINy44M0ExLjg5LDEuODksMCwwLDAsNiw2''@;'; put 'put ''VjMwLjE1YTEuODksMS44OSwwLDAsMCwxLjgzLDEuOTFIMjguMTdBMS44NywxLjg3LDAsMCwwLDMwLDMwLjE1VjlaTTIyLDI2YTIuMDksMi4wOSwwLDAsMS0yLjEtMi4wOHYtLjNMMTQuMjcsMjFsLS4wOC4wOGEyLjA4LDIuMDgsMCwxLDEsLjA4LTIuOTVsNS42NC0yLjY2di0uMjNhMi4xNCwy''@;'; put 'put ''LjE0LDAsMCwxLC42NC0xLjQ4aDBhMi4wOCwyLjA4LDAsMSwxLS4wNiwyLjk0bC01LjY2LDIuNjV2LjQ0bDUuNzIsMi42NkEyLjExLDIuMTEsMCwwLDEsMjIsMjEuODFsMCwwQTIuMDksMi4wOSwwLDAsMSwyMiwyNlptMi0xNlY1Ljg0bDQuMiw0LjIyWiIgY2xhc3M9ImNsci1pLXNvbGlkIGNs''@;'; put 'put ''ci1pLXNvbGlkLXBhdGgtMSIvPicpLF8uVGVjaG5vbG9neVNoYXBlcz17InJ1bGVyLXBlbmNpbCI6Xy5DbHJTaGFwZVJ1bGVyUGVuY2lsLCJwaG9uZS1oYW5kc2V0IjpfLkNsclNoYXBlUGhvbmVIYW5kc2V0LCJuby13aWZpIjpfLkNsclNoYXBlTm9XaWZpLGluc3RhbGw6Xy5DbHJTaGFwZUlu''@;'; put 'put ''c3RhbGwsdW5pbnN0YWxsOl8uQ2xyU2hhcGVVbmluc3RhbGwsbGF5ZXJzOl8uQ2xyU2hhcGVMYXllcnMsYmxvY2s6Xy5DbHJTaGFwZUJsb2NrLCJibG9ja3MtZ3JvdXAiOl8uQ2xyU2hhcGVCbG9ja3NHcm91cCxidW5kbGU6Xy5DbHJTaGFwZUJ1bmRsZSx3aWZpOl8uQ2xyU2hhcGVXaWZpLCJy''@;'; put 'put ''YWNrLXNlcnZlciI6Xy5DbHJTaGFwZVJhY2tTZXJ2ZXIsImhhcmQtZGlzayI6Xy5DbHJTaGFwZUhhcmREaXNrLCJiYWNrdXAtcmVzdG9yZSI6Xy5DbHJTaGFwZUJhY2t1cFJlc3RvcmUsYmFja3VwOl8uQ2xyU2hhcGVCYWNrdXAsZGV2aWNlczpfLkNsclNoYXBlRGV2aWNlcyxrZXlib2FyZDpf''@;'; put 'put ''LkNsclNoYXBlS2V5Ym9hcmQsbW91c2U6Xy5DbHJTaGFwZU1vdXNlLGRhc2hib2FyZDpfLkNsclNoYXBlRGFzaGJvYXJkLGhvc3Q6Xy5DbHJTaGFwZUhvc3Qsc3RvcmFnZTpfLkNsclNoYXBlU3RvcmFnZSxjbHVzdGVyOl8uQ2xyU2hhcGVDbHVzdGVyLGFwcGxpY2F0aW9uczpfLkNsclNoYXBl''@;'; put 'put ''QXBwbGljYXRpb25zLGJ1aWxkaW5nOl8uQ2xyU2hhcGVCdWlsZGluZyxjcHU6Xy5DbHJTaGFwZUNQVSxtZW1vcnk6Xy5DbHJTaGFwZU1lbW9yeSwiZGF0YS1jbHVzdGVyIjpfLkNsclNoYXBlRGF0YUNsdXN0ZXIsInJlc291cmNlLXBvb2wiOl8uQ2xyU2hhcGVSZXNvdXJjZVBvb2wsc2hpZWxk''@;'; put 'put ''Ol8uQ2xyU2hhcGVTaGllbGQsInNoaWVsZC1jaGVjayI6Xy5DbHJTaGFwZVNoaWVsZENoZWNrLCJzaGllbGQteCI6Xy5DbHJTaGFwZVNoaWVsZFgsaW1wb3J0Ol8uQ2xyU2hhcGVJbXBvcnQsZXhwb3J0Ol8uQ2xyU2hhcGVFeHBvcnQsInVwbG9hZC1jbG91ZCI6Xy5DbHJTaGFwZVVwbG9hZENs''@;'; put 'put ''b3VkLCJkb3dubG9hZC1jbG91ZCI6Xy5DbHJTaGFwZURvd25sb2FkQ2xvdWQscGx1Z2luOl8uQ2xyU2hhcGVQbHVnaW4sZmxvcHB5Ol8uQ2xyU2hhcGVGbG9wcHksY29tcHV0ZXI6Xy5DbHJTaGFwZUNvbXB1dGVyLGRpc3BsYXk6Xy5DbHJTaGFwZURpc3BsYXksdGVybWluYWw6Xy5DbHJTaGFw''@;'; put 'put ''ZVRlcm1pbmFsLGNvZGU6Xy5DbHJTaGFwZUNvZGUsYXBwbGljYXRpb246Xy5DbHJTaGFwZUFwcGxpY2F0aW9uLGJhdHRlcnk6Xy5DbHJTaGFwZUJhdHRlcnksbW9iaWxlOl8uQ2xyU2hhcGVNb2JpbGUsdGFibGV0Ol8uQ2xyU2hhcGVUYWJsZXQsIm5ldHdvcmstZ2xvYmUiOl8uQ2xyU2hhcGVO''@;'; put 'put ''ZXR3b3JrR2xvYmUsIm5ldHdvcmstc2V0dGluZ3MiOl8uQ2xyU2hhcGVOZXR3b3JrU2V0dGluZ3MsIm5ldHdvcmstc3dpdGNoIjpfLkNsclNoYXBlTmV0d29ya1N3aXRjaCxyb3V0ZXI6Xy5DbHJTaGFwZVJvdXRlcix2bTpfLkNsclNoYXBlVk0sInZtdy1hcHAiOl8uQ2xyU2hhcGVWTVdBcHAs''@;'; put 'put ''Y2VydGlmaWNhdGU6Xy5DbHJTaGFwZUNlcnRpZmljYXRlLGFyY2hpdmU6Xy5DbHJTaGFwZUFyY2hpdmUsdW5hcmNoaXZlOl8uQ2xyU2hhcGVVbmFyY2hpdmUsY29ubmVjdDpfLkNsclNoYXBlQ29ubmVjdCxkaXNjb25uZWN0Ol8uQ2xyU2hhcGVEaXNjb25uZWN0LGxpbms6Xy5DbHJTaGFwZUxp''@;'; put 'put ''bmssdW5saW5rOl8uQ2xyU2hhcGVVbmxpbmssImNsb3VkLW5ldHdvcmsiOl8uQ2xyU2hhcGVDbG91ZE5ldHdvcmssImNsb3VkLXNjYWxlIjpfLkNsclNoYXBlQ2xvdWRTY2FsZSwiY2xvdWQtdHJhZmZpYyI6Xy5DbHJTaGFwZUNsb3VkVHJhZmZpYywiY29udHJvbC1sdW4iOl8uQ2xyQ29udHJv''@;'; put 'put ''bEx1bixkZXBsb3k6Xy5DbHJTaGFwZURlcGxveSxoZWxpeDpfLkNsclNoYXBlSGVsaXgsZmxhc2s6Xy5DbHJTaGFwZUZsYXNrLGFkbWluaXN0cmF0b3I6Xy5DbHJTaGFwZUFkbWluaXN0cmF0b3IsImhhcmQtZHJpdmUiOl8uQ2xyU2hhcGVIYXJkRHJpdmUsImhhcmQtZHJpdmUtZGlza3MiOl8u''@;'; put 'put ''Q2xyU2hhcGVIYXJkRHJpdmVEaXNrcyxudm1lOl8uQ2xyU2hhcGVOVk1lLHNzZDpfLkNsclNoYXBlU1NELGJsdWV0b290aDpfLkNsclNoYXBlQmx1ZXRvb3RoLCJibHVldG9vdGgtb2ZmIjpfLkNsclNoYXBlQmx1ZXRvb3RoT2ZmLCJwcm9jZXNzLW9uLXZtIjpfLkNsclNoYXBlUHJvY2Vzc09u''@;'; put 'put ''Vk0sImFzc2lnbi11c2VyIjpfLkNsclNoYXBlQXNzaWduVXNlcixhdG9tOl8uQ2xyU2hhcGVBdG9tLCJiYXItY29kZSI6Xy5DbHJTaGFwZUJhckNvZGUsImNkLWR2ZCI6Xy5DbHJTaGFwZUNkRHZkLGNvbnRhaW5lcjpfLkNsclNoYXBlQ29udGFpbmVyLCJjb250YWluZXItdm9sdW1lIjpfLkNs''@;'; put 'put ''clNoYXBlQ29udGFpbmVyVm9sdW1lLCJmaWxlLXNoYXJlIjpfLkNsclNoYXBlRmlsZVNoYXJlLCJxci1jb2RlIjpfLkNsclNoYXBlUXJDb2RlLHVzYjpfLkNsclNoYXBlVXNiLHJhZGFyOl8uQ2xyU2hhcGVSYWRhcixjYXBhY2l0b3I6Xy5DbHJTaGFwZUNhcGFjaXRvcixzcXVpZDpfLkNsclNo''@;'; put 'put ''YXBlU3F1aWQsaW5kdWN0b3I6Xy5DbHJTaGFwZUluZHVjdG9yLHJlc2lzdG9yOl8uQ2xyU2hhcGVSZXNpc3RvciwiaG9zdC1ncm91cCI6Xy5DbHJTaGFwZUhvc3RHcm91cCwic3RvcmFnZS1hZGFwdGVyIjpfLkNsclNoYXBlU3RvcmFnZUFkYXB0ZXIsIm5vZGUtZ3JvdXAiOl8uQ2xyU2hhcGVO''@;'; put 'put ''b2RlR3JvdXAsbm9kZXM6Xy5DbHJTaGFwZU5vZGVzLG5hbWVzcGFjZTpfLkNsclNoYXBlTmFtZXNwYWNlLG5vZGU6Xy5DbHJTaGFwZU5vZGUscG9kOl8uQ2xyU2hhcGVQb2QsIm1lZGlhLWNoYW5nZXIiOl8uQ2xyU2hhcGVNZWRpYUNoYW5nZXIsInRhcGUtZHJpdmUiOl8uQ2xyU2hhcGVUYXBl''@;'; put 'put ''RHJpdmUsYW5pbWF0aW9uOl8uQ2xyU2hhcGVBbmltYXRpb24sImNpLWNkIjpfLkNsclNoYXBlQ2lDZCwiZmlsZS1zaGFyZS0yIjpfLkNsclNoYXBlRmlsZVNoYXJlMn0sT2JqZWN0LmRlZmluZVByb3BlcnR5KF8uVGVjaG5vbG9neVNoYXBlcywic2VydmVyIiwoMCx5LmRlc2NyaXB0b3JDb25m''@;'; put 'put ''aWcpKF8uVGVjaG5vbG9neVNoYXBlcy5ob3N0KSksT2JqZWN0LmRlZmluZVByb3BlcnR5KF8uVGVjaG5vbG9neVNoYXBlcywiY29tbWFuZCIsKDAseS5kZXNjcmlwdG9yQ29uZmlnKShfLlRlY2hub2xvZ3lTaGFwZXMudGVybWluYWwpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5UZWNobm9s''@;'; put 'put ''b2d5U2hhcGVzLCJtb2JpbGUtcGhvbmUiLCgwLHkuZGVzY3JpcHRvckNvbmZpZykoXy5UZWNobm9sb2d5U2hhcGVzLm1vYmlsZSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLlRlY2hub2xvZ3lTaGFwZXMsImxpY2Vuc2UiLCgwLHkuZGVzY3JpcHRvckNvbmZpZykoXy5UZWNobm9sb2d5U2hh''@;'; put 'put ''cGVzLmNlcnRpZmljYXRlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KF8uVGVjaG5vbG9neVNoYXBlcywiZGlzY29ubmVjdGVkIiwoMCx5LmRlc2NyaXB0b3JDb25maWcpKF8uVGVjaG5vbG9neVNoYXBlc1sibm8td2lmaSJdKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KF8uVGVjaG5vbG9neVNo''@;'; put 'put ''YXBlcywicmVjZWl2ZXIiLCgwLHkuZGVzY3JpcHRvckNvbmZpZykoXy5UZWNobm9sb2d5U2hhcGVzWyJwaG9uZS1oYW5kc2V0Il0pKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5UZWNobm9sb2d5U2hhcGVzLCJkZXNpZ24iLCgwLHkuZGVzY3JpcHRvckNvbmZpZykoXy5UZWNobm9sb2d5U2hh''@;'; put 'put ''cGVzWyJydWxlci1wZW5jaWwiXSkpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLlRlY2hub2xvZ3lTaGFwZXMsImRuYSIsKDAseS5kZXNjcmlwdG9yQ29uZmlnKShfLlRlY2hub2xvZ3lTaGFwZXMuaGVsaXgpKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoXy5UZWNobm9sb2d5U2hhcGVzLCJmb2xk''@;'; put 'put ''ZXItc2hhcmUiLCgwLHkuZGVzY3JpcHRvckNvbmZpZykoXy5UZWNobm9sb2d5U2hhcGVzWyJmaWxlLXNoYXJlIl0pKSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoXy5UZWNobm9sb2d5U2hh''@;'; put 'put ''cGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3NoYXBlcy90ZXh0LWVkaXQtc2hhcGVzLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3JjL3No''@;'; put 'put ''YXBlcy90ZXh0LWVkaXQtc2hhcGVzLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKHEsXyxJKXsidXNlIHN0cmljdCI7''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KF8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8uVGV4dEVkaXRTaGFwZXM9Xy5DbHJTaGFwZVN1cGVyc2NyaXB0PV8uQ2xyU2hhcGVTdWJzY3JpcHQ9Xy5DbHJTaGFwZVN0cmlrZXRocm91Z2g9Xy5DbHJTaGFwZUluZGVudD1fLkNsclNoYXBlT3V0ZGVu''@;'; put 'put ''dD1fLkNsclNoYXBlSGlnaGxpZ2h0ZXI9Xy5DbHJTaGFwZVRleHRDb2xvcj1fLkNsclNoYXBlTGFuZ3VhZ2U9Xy5DbHJTaGFwZUFsaWduVG9wPV8uQ2xyU2hhcGVBbGlnbk1pZGRsZT1fLkNsclNoYXBlQWxpZ25Cb3R0b209Xy5DbHJTaGFwZVVuZGVybGluZT1fLkNsclNoYXBlVGV4dD1fLkNs''@;'; put 'put ''clNoYXBlQWxpZ25SaWdodFRleHQ9Xy5DbHJTaGFwZUJsb2NrUXVvdGU9Xy5DbHJTaGFwZVBhaW50Um9sbGVyPV8uQ2xyU2hhcGVOdW1iZXJMaXN0PV8uQ2xyU2hhcGVBbGlnbkxlZnRUZXh0PV8uQ2xyU2hhcGVKdXN0aWZ5VGV4dD1fLkNsclNoYXBlSXRhbGljPV8uQ2xyU2hhcGVBbGlnblJp''@;'; put 'put ''Z2h0PV8uQ2xyU2hhcGVBbGlnbkxlZnQ9Xy5DbHJTaGFwZUFsaWduQ2VudGVyPV8uQ2xyU2hhcGVGb250U2l6ZT1fLkNsclNoYXBlQ2hlY2tib3hMaXN0PV8uQ2xyU2hhcGVDZW50ZXJUZXh0PV8uQ2xyU2hhcGVCdWxsZXRMaXN0PV8uQ2xyU2hhcGVCb2xkPXZvaWQgMDt2YXIgeT1JKAovKiEg''@;'; put 'put ''Li4vdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IgKi8KIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIik7Xy5DbHJTaGFwZUJvbGQ9KDAseS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTIyLjQzLDE3LjU0YTQuNjcsNC42NywwLDAsMCwyLjgtNC4zN3YtLjA2''@;'; put 'put ''YTQuNDMsNC40MywwLDAsMC0xLjMxLTMuMjUsNy4wOSw3LjA5LDAsMCwwLTUuMTMtMS43M2gtN0ExLjcxLDEuNzEsMCwwLDAsMTAsOS44NlYyNmExLjcyLDEuNzIsMCwwLDAsMS43NCwxLjc0aDcuMzNjNC4zNywwLDcuMjUtMS44OCw3LjI1LTUuMzhWMjIuM0MyNi4zMiwxOS42NCwyNC43Mywx''@;'; put 'put ''OC4zMiwyMi40MywxNy41NFpNMTMuNjgsMTEuNGg0LjU0YzIsMCwzLjE1Ljg5LDMuMTUsMi4zM3YuMDZjMCwxLjY4LTEuMzYsMi40OS0zLjM4LDIuNDlIMTMuNjhaTTIyLjM3LDIyYzAsMS41OS0xLjMxLDIuNDMtMy40NiwyLjQzSDEzLjY4VjE5LjYyaDVjMi40OSwwLDMuNjkuODgsMy42OSwy''@;'; put 'put ''LjM3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksXy5DbHJTaGFwZUJ1bGxldExpc3Q9KDAseS5jbHJJY29uU1ZHKSgnPGNpcmNsZSBjeD0iNS4yMSIgY3k9IjkuMTciIHI9IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0xIiAvPjxjaXJjbGUgY3g9IjUuMjEiIGN5PSIxNy4xNyIgcj0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PGNpcmNsZSBjeD0iNS4yMSIgY3k9IjI1LjE3IiByPSIyIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIg''@;'; put 'put ''Lz48cGF0aCBkPSJNMzIuNDIsOWExLDEsMCwwLDAtMS0xSDEwdjJIMzEuNDJBMSwxLDAsMCwwLDMyLjQyLDlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz48cGF0aCBkPSJNMzEuNDIsMTZIMTB2MkgzMS40MmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiIC8+PHBhdGggZD0iTTMxLjQyLDI0SDEwdjJIMzEuNDJhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC02IiAvPicpLF8uQ2xyU2hhcGVDZW50ZXJUZXh0PSgwLHkuY2xySWNvblNW''@;'; put 'put ''RykoJzxwYXRoIGQ9Ik0zMC44OCw4SDUuMTJhMS4xLDEuMSwwLDAsMCwwLDIuMkgzMC44OGExLjEsMS4xLDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTI1LjUsMTYuMmExLjEsMS4xLDAsMSwwLDAtMi4yaC0xNWEx''@;'; put 'put ''LjEsMS4xLDAsMSwwLDAsMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLjI1LDIwSDUuNzVhMS4xLDEuMSwwLDAsMCwwLDIuMmgyNC41YTEuMSwxLjEsMCwwLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMjQuODgsMjZIMTEuMTJhMS4xLDEuMSwwLDEsMCwwLDIuMkgyNC44OGExLjEsMS4xLDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+JyksXy5DbHJTaGFwZUNoZWNrYm94TGlzdD0oMCx5''@;'; put 'put ''LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuNDMsMTZIMTB2MkgzMS40M2ExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMxLjQzLDI0SDEwdjJIMzEuNDNhMSwxLDAsMCwwLDAtMloiIGNsYXNzPSJjbHItaS1v''@;'; put 'put ''dXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0xNS40NSwxMGgxNmExLDEsMCwwLDAsMC0yaC0xNFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0xNy41LDMuNDJhMS4wOSwxLjA5LDAsMCwwLTEuNTUsMEw3Ljg5''@;'; put 'put ''LDExLjQ4LDQuNTEsNy44NEExLjEsMS4xLDAsMSwwLDIuOSw5LjM0bDQuOTQsNS4zTDE3LjUsNUExLjEsMS4xLDAsMCwwLDE3LjUsMy40MloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPicpLF8uQ2xyU2hhcGVGb250U2l6ZT0oMCx5LmNsckljb25TVkcp''@;'; put 'put ''KCc8cGF0aCBkPSJNMjEsOS4wOEExLjEzLDEuMTMsMCwwLDAsMTkuODYsOEg0LjYyYTEuMSwxLjEsMCwxLDAsMCwyLjE5SDExVjI3YTEuMDksMS4wOSwwLDAsMCwyLjE3LDBWMTAuMTloNi42OUExLjE0LDEuMTQsMCwwLDAsMjEsOS4wOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91''@;'; put 'put ''dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0zMC42NywxNUgyMS4xNWExLjEsMS4xLDAsMSwwLDAsMi4xOUgyNVYyNi41YTEuMDksMS4wOSwwLDAsMCwyLjE3LDBWMTcuMjNoMy41NGExLjEsMS4xLDAsMSwwLDAtMi4xOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0''@;'; put 'put ''aC0yIiAvPicpLF8uQ2xyU2hhcGVBbGlnbkNlbnRlcj0oMCx5LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEsMjBIMTlWMTZoNmExLDEsMCwwLDAsMS0xVjdhMSwxLDAsMCwwLTEtMUgxOVYyYTEsMSwwLDAsMC0yLDBWNkgxMWExLDEsMCwwLDAtMSwxdjhhMSwxLDAsMCwwLDEsMWg2djRINWEx''@;'; put 'put ''LDEsMCwwLDAtMSwxdjhhMSwxLDAsMCwwLDEsMUgxN3Y0YTEsMSwwLDAsMCwyLDBWMzBIMzFhMSwxLDAsMCwwLDEtMVYyMUExLDEsMCwwLDAsMzEsMjBaTTEyLDE0VjhIMjR2NlpNMzAsMjhINlYyMkgzMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPicp''@;'; put 'put ''LF8uQ2xyU2hhcGVBbGlnbkxlZnQ9KDAseS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTUsMUExLDEsMCwwLDAsNCwyVjM0YTEsMSwwLDAsMCwyLDBWMkExLDEsMCwwLDAsNSwxWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMxLDIwSDhW''@;'; put 'put ''MzBIMzFhMSwxLDAsMCwwLDEtMVYyMUExLDEsMCwwLDAsMzEsMjBabS0xLDhIMTBWMjJIMzBaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cGF0aCBkPSJNMjQsMTVWN2ExLDEsMCwwLDAtMS0xSDhWMTZIMjNBMSwxLDAsMCwwLDI0LDE1Wm0tMi0xSDEw''@;'; put 'put ''VjhIMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxfLkNsclNoYXBlQWxpZ25SaWdodD0oMCx5LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEsMWExLDEsMCwwLDAtMSwxVjM0YTEsMSwwLDAsMCwyLDBWMkExLDEsMCwwLDAsMzEsMVoiIGNsYXNz''@;'; put 'put ''PSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik00LDIxdjhhMSwxLDAsMCwwLDEsMUgyOFYyMEg1QTEsMSwwLDAsMCw0LDIxWm0yLDFIMjZ2Nkg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTEy''@;'; put 'put ''LDd2OGExLDEsMCwwLDAsMSwxSDI4VjZIMTNBMSwxLDAsMCwwLDEyLDdabTIsMUgyNnY2SDE0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+JyksXy5DbHJTaGFwZUl0YWxpYz0oMCx5LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjQuNDIsOEgxNy4xYTEu''@;'; put 'put ''MSwxLjEsMCwxLDAsMCwyLjE5aDIuMTNMMTMuMTEsMjUuNTVIMTAuNDdhMS4xLDEuMSwwLDEsMCwwLDIuMTlIMTcuOGExLjEsMS4xLDAsMSwwLDAtMi4xOUgxNS41MWw2LjEzLTE1LjM2aDIuNzhhMS4xLDEuMSwwLDEsMCwwLTIuMTlaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMSIgLz4nKSxfLkNsclNoYXBlSnVzdGlmeVRleHQ9KDAseS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTYsMTAuMkgzMS43NWExLjEsMS4xLDAsMSwwLDAtMi4ySDZhMS4xLDEuMSwwLDEsMCwwLDIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0x''@;'; put 'put ''IiAvPjxwYXRoIGQ9Ik0zMS43NSwxNEg2YTEuMSwxLjEsMCwxLDAsMCwyLjJIMzEuNzVhMS4xLDEuMSwwLDEsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0zMS4xMiwyMEg2LjYyYTEuMSwxLjEsMCwxLDAsMCwyLjJoMjQu''@;'; put 'put ''NWExLjEsMS4xLDAsMSwwLDAtMi4yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTMiIC8+PHBhdGggZD0iTTMwLjQ1LDI1LjgzSDYuNmExLjEsMS4xLDAsMCwwLDAsMi4ySDMwLjQ1YTEuMSwxLjEsMCwwLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBj''@;'; put 'put ''bHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSxfLkNsclNoYXBlQWxpZ25MZWZ0VGV4dD0oMCx5LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAuMjUsMjZINnYyLjJIMjAuMjVhMS4xLDEuMSwwLDAsMCwwLTIuMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAv''@;'; put 'put ''PjxwYXRoIGQ9Ik0yOCwyMEg2djIuMkgyOEExLjEsMS4xLDAsMCwwLDI4LDIwWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIyLjYsMTUuMUExLjEsMS4xLDAsMCwwLDIxLjUsMTRINnYyLjJIMjEuNUExLjEsMS4xLDAsMCwwLDIyLjYs''@;'; put 'put ''MTUuMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0yOS4yNSw4SDZ2Mi4ySDI5LjI1YTEuMSwxLjEsMCwxLDAsMC0yLjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgLz4nKSxfLkNsclNoYXBlTnVt''@;'; put 'put ''YmVyTGlzdD0oMCx5LmNsckljb25TVkcpKCc8cG9seWdvbiBwb2ludHM9IjUuNDYgNy40MSA1LjQ2IDExLjU2IDYuNjUgMTEuNTYgNi42NSA2LjA1IDUuNyA2LjA1IDQuMDUgNy4xNiA0LjUyIDggNS40NiA3LjQxIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIg''@;'; put 'put ''Lz48cGF0aCBkPSJNNS41NywxNC44MmEuNzYuNzYsMCwwLDEsLjgzLjczYzAsLjM4LS4yMS43NC0uODcsMS4yN2wtMiwxLjU3djFINy42N1YxOC4yOEg1LjMzbDEtLjc3YzEtLjcsMS4yOC0xLjI3LDEuMjgtMmExLjgzLDEuODMsMCwwLDAtMi0xLjc2LDIuNjMsMi42MywwLDAsMC0yLjE0LDEu''@;'; put 'put ''MDhsLjc2LjczQTEuNzUsMS43NSwwLDAsMSw1LjU3LDE0LjgyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTYuNTYsMjQuNjRhMS4zMiwxLjMyLDAsMCwwLDEtMS4yN2MwLS44Ny0uNzgtMS41MS0yLTEuNTFhMi42MSwyLjYxLDAsMCww''@;'; put 'put ''LTIuMSwxbC42OS43MmExLjc4LDEuNzgsMCwwLDEsMS4zLS42NGMuNTQsMCwuOTIuMjYuOTIuNjZzLS4zNi42Mi0xLC42Mkg0Ljc5djFoLjY0Yy43NCwwLDEuMDcuMjEsMS4wNy42M3MtLjM1LjY4LTEsLjY4YTIsMiwwLDAsMS0xLjQ2LS42NWwtLjcuNzhhMi44NSwyLjg1LDAsMCwwLDIuMjEu''@;'; put 'put ''OTNjMS4yOSwwLDIuMTMtLjY5LDIuMTMtMS42NEExLjMzLDEuMzMsMCwwLDAsNi41NiwyNC42NFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwYXRoIGQ9Ik0zMi40Miw5YTEsMSwwLDAsMC0xLTFIMTB2MkgzMS40MkExLDEsMCwwLDAsMzIuNDIsOVoi''@;'; put 'put ''IGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00IiAvPjxwYXRoIGQ9Ik0zMS40MiwxNkgxMHYySDMxLjQyYTEsMSwwLDAsMCwwLTJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgLz48cGF0aCBkPSJNMzEuNDIsMjRIMTB2MkgzMS40''@;'; put 'put ''MmExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiIC8+JyksXy5DbHJTaGFwZVBhaW50Um9sbGVyPSgwLHkuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zMSwxMFY0YTIsMiwwLDAsMC0yLTJINkEyLDIsMCwwLDAsNCw0djZhMiwyLDAsMCww''@;'; put 'put ''LDIsMkgyOUEyLDIsMCwwLDAsMzEsMTBaTTYsNEgyOXY2SDZaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsNkgzMnY2LjI5TDE4LjcsMTYuNTRhMSwxLDAsMCwwLS43LDFWMTlIMTZWMzNhMiwyLDAsMCwwLDIsMmgyYTIsMiwwLDAs''@;'; put 'put ''MCwyLTJWMTlIMjB2LS43M0wzMy4zLDE0YTEsMSwwLDAsMCwuNy0xVjdBMSwxLDAsMCwwLDMzLDZaTTIwLDMzSDE4VjIxaDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz48cmVjdCB4PSI0IiB5PSIyIiB3aWR0aD0iMjciIGhlaWdodD0iMTAiIHJ4PSIx''@;'; put 'put ''IiByeT0iMSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzMsNkgzMnY2LjI0TDE4LjcxLDE2LjQ1YTEsMSwwLDAsMC0uNzEsMVYxOUgxNlYzNGExLDEsMCwwLDAsMSwxaDRhMSwxLDAsMCwwLDEtMVYxOUgyMHYtLjgyTDMzLjI5LDE0QTEsMSww''@;'; put 'put ''LDAsMCwzNCwxM1Y3QTEsMSwwLDAsMCwzMyw2WiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxfLkNsclNoYXBlQmxvY2tRdW90ZT0oMCx5LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTEuODYsMTYuNTVhNC4zMSw0LjMxLDAsMCwwLTIuMTEuNTYsMTQuNDQs''@;'; put 'put ''MTQuNDQsMCwwLDEsNC4zNi02LDEuMSwxLjEsMCwwLDAtMS40LTEuN2MtNCwzLjI1LTUuNzgsNy43NS01Ljc4LDEwLjU0QTUuMDgsNS4wOCwwLDAsMCwxMCwyNC41OGE0LjQsNC40LDAsMCwwLDEuODguNDQsNC4yNCw0LjI0LDAsMSwwLDAtOC40N1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNs''@;'; put 'put ''ci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik0yMywxNi41NWE0LjI5LDQuMjksMCwwLDAtMi4xMS41NiwxNC41LDE0LjUsMCwwLDEsNC4zNS02LDEuMSwxLjEsMCwxLDAtMS4zOS0xLjdjLTQsMy4yNS01Ljc4LDcuNzUtNS43OCwxMC41NGE1LjA4LDUuMDgsMCwwLDAsMyw0LjYxQTQu''@;'; put 'put ''MzcsNC4zNywwLDAsMCwyMywyNWE0LjI0LDQuMjQsMCwxLDAsMC04LjQ3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+JyksXy5DbHJTaGFwZUFsaWduUmlnaHRUZXh0PSgwLHkuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC42NSwyNy4xYTEuMSwxLjEs''@;'; put 'put ''MCwwLDAsMS4xLDEuMUgzMFYyNkgxNS43NUExLjEsMS4xLDAsMCwwLDE0LjY1LDI3LjFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMSIgLz48cGF0aCBkPSJNNi45LDIxLjFBMS4xLDEuMSwwLDAsMCw4LDIyLjJIMzBWMjBIOEExLjEsMS4xLDAsMCwwLDYuOSwy''@;'; put 'put ''MS4xWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTEzLjQsMTUuMWExLjEsMS4xLDAsMCwwLDEuMSwxLjFIMzBWMTRIMTQuNUExLjEsMS4xLDAsMCwwLDEzLjQsMTUuMVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUt''@;'; put 'put ''cGF0aC0zIiAvPjxwYXRoIGQ9Ik02Ljc1LDhhMS4xLDEuMSwwLDEsMCwwLDIuMkgzMFY4WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiIC8+JyksXy5DbHJTaGFwZVRleHQ9KDAseS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTEyLjE5LDguODRhMS40NSwxLjQ1''@;'; put 'put ''LDAsMCwwLTEuNC0xaC0uMTJhMS40NiwxLjQ2LDAsMCwwLTEuNDIsMUwxLjE0LDI2LjU2YTEuMjksMS4yOSwwLDAsMC0uMTQuNTksMSwxLDAsMCwwLDEsMSwxLjEyLDEuMTIsMCwwLDAsMS4wOC0uNzdsMi4wOC00LjY1aDExbDIuMDgsNC41OWExLjI0LDEuMjQsMCwwLDAsMS4xMi44MywxLjA4''@;'; put 'put ''LDEuMDgsMCwwLDAsMS4wOC0xLjA4LDEuNjQsMS42NCwwLDAsMC0uMTQtLjU3Wk02LjA4LDIwLjcxbDQuNTktMTAuMjIsNC42LDEwLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMyLjI0LDE0Ljc4QTYuMzUsNi4zNSwwLDAsMCwy''@;'; put 'put ''Ny42LDEzLjJhMTEuMzYsMTEuMzYsMCwwLDAtNC43LDEsMSwxLDAsMCwwLS41OC44OSwxLDEsMCwwLDAsLjk0LjkyLDEuMjMsMS4yMywwLDAsMCwuMzktLjA4LDguODcsOC44NywwLDAsMSwzLjcyLS44MWMyLjcsMCw0LjI4LDEuMzMsNC4yOCwzLjkydi41YTE1LjI5LDE1LjI5LDAsMCwwLTQu''@;'; put 'put ''NDItLjYxYy0zLjY0LDAtNi4xNCwxLjYxLTYuMTQsNC42NHYuMDVjMCwyLjk1LDIuNyw0LjQ4LDUuMzcsNC40OGE2LjI5LDYuMjksMCwwLDAsNS4xOS0yLjQ4VjI2LjlhMSwxLDAsMCwwLDEsMSwxLDEsMCwwLDAsMS0xLjA2VjE5QTUuNzEsNS43MSwwLDAsMCwzMi4yNCwxNC43OFptLS41Niw3''@;'; put 'put ''LjdjMCwyLjI4LTIuMTcsMy44OS00LjgxLDMuODktMS45NCwwLTMuNjEtMS4wNi0zLjYxLTIuODZ2LS4wNmMwLTEuOCwxLjUtMyw0LjItM2ExNS4yLDE1LjIsMCwwLDEsNC4yMi42MVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPicpLF8uQ2xyU2hhcGVV''@;'; put 'put ''bmRlcmxpbmU9KDAseS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTE4LDI4LjE3YzUuMDgsMCw4LjQ4LTMuMDgsOC40OC05VjguNTRhMS4xNSwxLjE1LDAsMSwwLTIuMywwdjEwLjhjMCw0LjQ0LTIuMzgsNi43MS02LjEzLDYuNzFzLTYuMjEtMi40Ny02LjIxLTYuODVWOC41NGExLjE1LDEuMTUs''@;'; put 'put ''MCwxLDAtMi4zLDB2MTAuOEM5LjUzLDI1LjA5LDEzLDI4LjE3LDE4LDI4LjE3WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTMxLDMwSDVhMS4xMSwxLjExLDAsMCwwLDAsMi4yMUgzMUExLjExLDEuMTEsMCwwLDAsMzEsMzBaIiBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz4nKSxfLkNsclNoYXBlQWxpZ25Cb3R0b209KDAseS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTM0LDMwSDJhMSwxLDAsMCwwLDAsMkgzNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTE2LDVhMSwxLDAsMCwwLTEtMUg3QTEsMSwwLDAsMCw2LDVWMjhIMTZaTTE0LDI2SDhWNmg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMwLDEzYTEsMSwwLDAsMC0xLTFIMjFhMSwxLDAs''@;'; put 'put ''MCwwLTEsMVYyOEgzMFpNMjgsMjZIMjJWMTRoNloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPicpLF8uQ2xyU2hhcGVBbGlnbk1pZGRsZT0oMCx5LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzQsMTdIMzBWMTFhMSwxLDAsMCwwLTEtMUgyMWExLDEsMCww''@;'; put 'put ''LDAtMSwxdjZIMTZWNWExLDEsMCwwLDAtMS0xSDdBMSwxLDAsMCwwLDYsNVYxN0gyYTEsMSwwLDAsMCwwLDJINlYzMWExLDEsMCwwLDAsMSwxaDhhMSwxLDAsMCwwLDEtMVYxOWg0djZhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwxLTFWMTloNGExLDEsMCwwLDAsMC0yWk0xNCwzMEg4VjZo''@;'; put 'put ''NlptMTQtNkgyMlYxMmg2WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+JyksXy5DbHJTaGFwZUFsaWduVG9wPSgwLHkuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0zNCw0SDJBMSwxLDAsMCwwLDIsNkgzNGExLDEsMCwwLDAsMC0yWiIgY2xhc3M9ImNsci1p''@;'; put 'put ''LW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIC8+PHBhdGggZD0iTTYsMzFhMSwxLDAsMCwwLDEsMWg4YTEsMSwwLDAsMCwxLTFWOEg2Wk04LDEwaDZWMzBIOFoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIiAvPjxwYXRoIGQ9Ik0yMCwyM2ExLDEsMCww''@;'; put 'put ''LDAsMSwxaDhhMSwxLDAsMCwwLDEtMVY4SDIwWm0yLTEzaDZWMjJIMjJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgLz4nKSxfLkNsclNoYXBlTGFuZ3VhZ2U9KDAseS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMwLDNIMTR2NWgyVjVoMTRjMC42LDAsMSww''@;'; put 'put ''LjQsMSwxdjExYzAsMC42LTAuNCwxLTEsMUgxN3Y3aC01LjNMOCwyNy45VjI1SDVjLTAuNiwwLTEtMC40LTEtMVYxM2MwLTAuNiwwLjQtMSwxLTFoMTN2LTJINVxuXHRcdGMtMS43LDAtMywxLjMtMywzdjExYzAsMS43LDEuMywzLDMsM2gxdjUuMWw2LjMtNS4xSDE5di03aDExYzEuNywwLDMt''@;'; put 'put ''MS4zLDMtM1Y2QzMzLDQuMywzMS43LDMsMzAsM3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxwYXRoIGQ9Ik02LjIsMjIuOWgyLjRsMC42LTEuNmgzLjFsMC42LDEuNmgyLjRMMTEuOSwxNEg5LjVMNi4yLDIyLjl6IE0xMC43LDE2LjVsMSwzLjFoLTJM''@;'; put 'put ''MTAuNywxNi41eiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTIwLDE3YzEuMSwwLDIuNi0wLjMsNC0xYzEuNCwwLjcsMywxLDQsMXYtMmMwLDAtMSwwLTIuMS0wLjRjMS4yLTEuMiwyLjEtMywyLjEtNS42VjhoLTNWNmgtMnYyaC0zdjJo''@;'; put 'put ''NS45XG5cdFx0Yy0wLjIsMS44LTEsMi45LTEuOSwzLjZjLTAuNi0wLjUtMS4yLTEuMi0xLjYtMi4xaC0yLjFjMC40LDEuMywxLDIuMywxLjgsMy4xQzIxLjEsMTUsMjAuMiwxNSwyMCwxNVYxN3oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIiAvPjxwb2x5Z29u''@;'; put 'put ''IHBvaW50cz0iMTEsMTYuNSAxMCwxOS42IDEyLDE5LjYgMTEsMTYuNSBcdCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz48cGF0aCBkPSJNMzAuMywzaC0xNnY1aDR2MmgtMTNjLTEuNywwLTMsMS4zLTMsM3YxMWMwLDEuNywxLjMsMywzLDNoMXY1LjFsNi4zLTUu''@;'; put 'put ''MWg2Ljd2LTdoMTFjMS43LDAsMy0xLjMsMy0zVjZcblx0XHRDMzMuMyw0LjMsMzIsMywzMC4zLDN6IE0xMy4xLDIyLjlsLTAuNS0xLjZIOS41bC0wLjYsMS42SDYuNUw5LjgsMTRoMi40bDMuMyw4LjlMMTMuMSwyMi45eiBNMjguMywxNXYyYy0xLjMsMC0yLjctMC40LTMuOS0xXG5cdFx0Yy0x''@;'; put 'put ''LjIsMC42LTIuNiwwLjktNCwxbC0wLjEtMmMwLjcsMCwxLjQtMC4xLDIuMS0wLjNjLTAuOS0wLjktMS41LTItMS44LTMuMmgyLjFjMC4zLDAuOSwwLjksMS42LDEuNiwyLjJjMS4xLTAuOSwxLjgtMi4yLDEuOS0zLjdcblx0XHRoLTZWOGgzVjZoMnYyaDMuM2wwLjEsMWMwLjEsMi4xLTAuNyw0''@;'; put 'put ''LjItMi4yLDUuN0MyNy4xLDE0LjksMjcuNywxNSwyOC4zLDE1eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxfLkNsclNoYXBlVGV4dENvbG9yPSgwLHkuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOS40NywzLjg0YTEuNDUsMS40NSwwLDAsMC0xLjQtMUgx''@;'; put 'put ''OGExLjQ1LDEuNDUsMCwwLDAtMS40MiwxTDguNDIsMjEuNTZhMS4zNSwxLjM1LDAsMCwwLS4xNC41OSwxLDEsMCwwLDAsMSwxLDEuMTEsMS4xMSwwLDAsMCwxLjA4LS43N2wyLjA4LTQuNjVoMTFsMi4wOCw0LjU5YTEuMjQsMS4yNCwwLDAsMCwxLjEyLjgzLDEuMDgsMS4wOCwwLDAsMCwxLjA4''@;'; put 'put ''LTEuMDgsMS41OSwxLjU5LDAsMCwwLS4xNC0uNTdaTTEzLjM2LDE1LjcxLDE4LDUuNDlsNC42LDEwLjIyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHJlY3QgeD0iNC4wNiIgeT0iMjUiIHdpZHRoPSIyOCIgaGVpZ2h0PSI4IiByeD0iMiIgcnk9''@;'; put 'put ''IjIiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+JyksXy5DbHJTaGFwZUhpZ2hsaWdodGVyPSgwLHkuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNS44MiwyNi4wNmExLDEsMCwwLDEtLjcxLS4yOUw4LjY3LDE5LjMzYTEsMSwwLDAsMS0uMjktLjcxLDEsMSww''@;'; put 'put ''LDAsMSwuMjktLjcxTDIzLDMuNTRhNS41NSw1LjU1LDAsMSwxLDcuODUsNy44NkwxNi41MywyNS43N0ExLDEsMCwwLDEsMTUuODIsMjYuMDZabS01LTcuNDQsNSw1TDI5LjQ4LDEwYTMuNTQsMy41NCwwLDAsMCwwLTUsMy42MywzLjYzLDAsMCwwLTUsMFoiIGNsYXNzPSJjbHItaS1vdXRsaW5l''@;'; put 'put ''IGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0xMC4zOCwyOC4yOEExLDEsMCwwLDEsOS42NywyOEw2LjQ1LDI0Ljc3YTEsMSwwLDAsMS0uMjItMS4wOWwyLjIyLTUuNDRhMSwxLDAsMCwxLDEuNjMtLjMzbDYuNDUsNi40NEExLDEsMCwwLDEsMTYuMiwyNmwtNS40NCwyLjIy''@;'; put 'put ''QTEuMzMsMS4zMywwLDAsMSwxMC4zOCwyOC4yOFpNOC4zMywyMy44MmwyLjI5LDIuMjgsMy40My0xLjRMOS43NCwyMC4zOVoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+XG4gIDxwYXRoIGQ9Ik04Ljk0LDMwaC01YTEsMSwwLDAsMS0uODQtMS41NWwzLjIy''@;'; put 'put ''LTQuOTRhMSwxLDAsMCwxLDEuNTUtLjE2bDMuMjEsMy4yMmExLDEsMCwwLDEsLjA2LDEuMzVMOS43LDI5LjY0QTEsMSwwLDAsMSw4Ljk0LDMwWk01Ljc4LDI4SDguNDdMOSwyNy4zNGwtMS43LTEuN1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxy''@;'; put 'put ''ZWN0IHg9IjMuMDYiIHk9IjMxIiB3aWR0aD0iMzAiIGhlaWdodD0iMyIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz4nKSxfLkNsclNoYXBlT3V0ZGVudD0oMCx5LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzEuMDYsOWgtMjZhMSwxLDAsMSwxLDAtMmgyNmEx''@;'; put 'put ''LDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDE0aC0xN2ExLDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPlxu''@;'; put 'put ''ICA8cGF0aCBkPSJNMzEuMDYsMTloLTE3YTEsMSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0zIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwyNGgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwxLDEsMCwyWiIgY2xh''@;'; put 'put ''c3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTQiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDI5aC0yNmExLDEsMCwwLDEsMC0yaDI2YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIvPlxuICA8cGF0aCBkPSJNOS41Niwy''@;'; put 'put ''Mi41NGExLDEsMCwwLDEtLjctLjNMNC42MSwxOGw0LjI1LTQuMjRhMSwxLDAsMCwxLDEuNDEsMS40MUw3LjQ0LDE4bDIuODMsMi44M2ExLDEsMCwwLDEtLjcxLDEuNzFaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNiIvPicpLF8uQ2xyU2hhcGVJbmRlbnQ9KDAs''@;'; put 'put ''eS5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTMxLjA2LDloLTI2YTEsMSwwLDEsMSwwLTJoMjZhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwxNGgtMTdhMSwxLDAsMCwxLDAtMmgxN2ExLDEsMCwx''@;'; put 'put ''LDEsMCwyWiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiLz5cbiAgPHBhdGggZD0iTTMxLjA2LDE5aC0xN2ExLDEsMCwwLDEsMC0yaDE3YTEsMSwwLDEsMSwwLDJaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIvPlxuICA8cGF0''@;'; put 'put ''aCBkPSJNMzEuMDYsMjRoLTE3YTEsMSwwLDAsMSwwLTJoMTdhMSwxLDAsMSwxLDAsMloiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC00Ii8+XG4gIDxwYXRoIGQ9Ik0zMS4wNiwyOWgtMjZhMSwxLDAsMCwxLDAtMmgyNmExLDEsMCwxLDEsMCwyWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTUiLz5cbiAgPHBhdGggZD0iTTUuNTYsMjIuNTRhMSwxLDAsMCwxLS43LTEuNzFMNy42OCwxOCw0Ljg2LDE1LjE3YTEsMSwwLDAsMSwwLTEuNDEsMSwxLDAsMCwxLDEuNDEsMEwxMC41MSwxOCw2LjI3LDIyLjI0QTEsMSwwLDAsMSw1LjU2''@;'; put 'put ''LDIyLjU0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTYiLz4nKSxfLkNsclNoYXBlU3RyaWtldGhyb3VnaD0oMCx5LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMzIuODgsMTkuOTJoLTMwYTEsMSwwLDEsMSwwLTJoMzBhMSwxLDAsMCwxLDAsMloiIGNsYXNzPSJj''@;'; 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+JyksXy5DbHJTaGFwZVN1YnNjcmlwdD0oMCx5LmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTQuNTUsMThsNi44LDguNmExLjE3LDEuMTcsMCwwLDEtLjkyLDEuOWgwYTEuMTcsMS4xNywwLDAsMS0uOTItLjQ0TDEzLDE5LjkxLDYuNiwyOGExLjE3LDEuMTcsMCwwLDEtLjkyLjQ0aDBhMS4x''@;'; put 'put ''NywxLjE3LDAsMCwxLS45Mi0xLjlMMTEuNTUsMThsLTYuOC04LjZhMS4xNywxLjE3LDAsMCwxLC45Mi0xLjloMEExLjE3LDEuMTcsMCwwLDEsNi42Myw4bDYuNDQsOC4xM0wxOS41LDhhMS4xNywxLjE3LDAsMCwxLC45Mi0uNDRoMGExLjE3LDEuMTcsMCwwLDEsLjkyLDEuOVoiIGNsYXNzPSJj''@;'; put 'put ''bHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIi8+XG4gIDxwYXRoIGQ9Ik0yMywzMS44LDI3LjQ5LDI4YTkuOSw5LjksMCwwLDAsMS44OC0yLjA1QTMuNDQsMy40NCwwLDAsMCwzMCwyNGEyLjM1LDIuMzUsMCwwLDAtLjM1LTEuMjcsMi40NCwyLjQ0LDAsMCwwLTEtLjg0LDIuOSwy''@;'; put 'put ''LjksMCwwLDAtMS4yNi0uMjgsMy4zNiwzLjM2LDAsMCwwLTEuODMuNSw1LjY0LDUuNjQsMCwwLDAtMS40OCwxLjQybC0xLS44MWE1LjExLDUuMTEsMCwwLDEsNC4zNi0yLjM3LDQuMzUsNC4zNSwwLDAsMSwyLC40NSwzLjQzLDMuNDMsMCwwLDEsMiwzLjE4LDQuNDUsNC40NSwwLDAsMS0uNjgs''@;'; put 'put ''Mi4zNSwxMC45LDEwLjksMCwwLDEtMi4yNCwyLjQ2bC0zLjI0LDIuODFIMzEuNVYzM0gyM1oiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0yIi8+JyksXy5DbHJTaGFwZVN1cGVyc2NyaXB0PSgwLHkuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xNC40MywxOGw2Ljc5''@;'; put 'put ''LDguNmExLjE3LDEuMTcsMCwwLDEtLjkyLDEuOWgwYTEuMTcsMS4xNywwLDAsMS0uOTItLjQ0bC02LjQ0LTguMTNMNi40NywyOGExLjE3LDEuMTcsMCwwLDEtLjkyLjQ0aDBhMS4xNywxLjE3LDAsMCwxLS45Mi0xLjlMMTEuNDMsMThsLTYuOC04LjZhMS4xNywxLjE3LDAsMCwxLC45Mi0xLjlo''@;'; put 'put ''MEExLjIsMS4yLDAsMCwxLDYuNTEsOGw2LjQzLDguMTNMMTkuMzgsOGExLjE3LDEuMTcsMCwwLDEsLjkyLS40NGgwYTEuMTcsMS4xNywwLDAsMSwuOTIsMS45WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiLz5cbiAgPHBhdGggZD0iTTIyLjg1LDE0LjQ3bDQu''@;'; put 'put ''NTEtMy44NWE5LjM3LDkuMzcsMCwwLDAsMS44OC0yLDMuNDMsMy40MywwLDAsMCwuNTktMS44NiwyLjI3LDIuMjcsMCwwLDAtLjM2LTEuMjcsMi4zOCwyLjM4LDAsMCwwLS45NS0uODMsMi43NywyLjc3LDAsMCwwLTEuMjYtLjI5LDMuMzksMy4zOSwwLDAsMC0xLjgzLjUsNS44Myw1LjgzLDAs''@;'; put 'put ''MCwwLTEuNDksMS40MmwtMS0uODFhNS4xMiw1LjEyLDAsMCwxLDQuMzYtMi4zNyw0LjM2LDQuMzYsMCwwLDEsMiwuNDUsMy40NywzLjQ3LDAsMCwxLDIsMy4xOEE0LjQ0LDQuNDQsMCwwLDEsMzAuNTgsOWExMS4xNCwxMS4xNCwwLDAsMS0yLjI0LDIuNDZMMjUuMSwxNC4zMWg2LjI4djEuMzNI''@;'; put 'put ''MjIuODVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIvPicpLF8uVGV4dEVkaXRTaGFwZXM9e2JvbGQ6Xy5DbHJTaGFwZUJvbGQsImJ1bGxldC1saXN0IjpfLkNsclNoYXBlQnVsbGV0TGlzdCwiY2hlY2tib3gtbGlzdCI6Xy5DbHJTaGFwZUNoZWNrYm94TGlz''@;'; put 'put ''dCwibnVtYmVyLWxpc3QiOl8uQ2xyU2hhcGVOdW1iZXJMaXN0LCJmb250LXNpemUiOl8uQ2xyU2hhcGVGb250U2l6ZSxpdGFsaWM6Xy5DbHJTaGFwZUl0YWxpYywianVzdGlmeS10ZXh0IjpfLkNsclNoYXBlSnVzdGlmeVRleHQsImNlbnRlci10ZXh0IjpfLkNsclNoYXBlQ2VudGVyVGV4dCwi''@;'; put 'put ''YWxpZ24tbGVmdC10ZXh0IjpfLkNsclNoYXBlQWxpZ25MZWZ0VGV4dCwiYWxpZ24tcmlnaHQtdGV4dCI6Xy5DbHJTaGFwZUFsaWduUmlnaHRUZXh0LCJwYWludC1yb2xsZXIiOl8uQ2xyU2hhcGVQYWludFJvbGxlciwiYmxvY2stcXVvdGUiOl8uQ2xyU2hhcGVCbG9ja1F1b3RlLHRleHQ6Xy5D''@;'; put 'put ''bHJTaGFwZVRleHQsdW5kZXJsaW5lOl8uQ2xyU2hhcGVVbmRlcmxpbmUsImFsaWduLWNlbnRlciI6Xy5DbHJTaGFwZUFsaWduQ2VudGVyLCJhbGlnbi1sZWZ0IjpfLkNsclNoYXBlQWxpZ25MZWZ0LCJhbGlnbi1yaWdodCI6Xy5DbHJTaGFwZUFsaWduUmlnaHQsImFsaWduLWJvdHRvbSI6Xy5D''@;'; put 'put ''bHJTaGFwZUFsaWduQm90dG9tLCJhbGlnbi1taWRkbGUiOl8uQ2xyU2hhcGVBbGlnbk1pZGRsZSwiYWxpZ24tdG9wIjpfLkNsclNoYXBlQWxpZ25Ub3AsbGFuZ3VhZ2U6Xy5DbHJTaGFwZUxhbmd1YWdlLCJ0ZXh0LWNvbG9yIjpfLkNsclNoYXBlVGV4dENvbG9yLGhpZ2hsaWdodGVyOl8uQ2xy''@;'; put 'put ''U2hhcGVIaWdobGlnaHRlcixpbmRlbnQ6Xy5DbHJTaGFwZUluZGVudCxvdXRkZW50Ol8uQ2xyU2hhcGVPdXRkZW50LHN0cmlrZXRocm91Z2g6Xy5DbHJTaGFwZVN0cmlrZXRocm91Z2gsc3Vic2NyaXB0Ol8uQ2xyU2hhcGVTdWJzY3JpcHQsc3VwZXJzY3JpcHQ6Xy5DbHJTaGFwZVN1cGVyc2Ny''@;'; put 'put ''aXB0fSx0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lmhhc093blByb3BlcnR5KCJDbGFyaXR5SWNvbnMiKSYmd2luZG93LkNsYXJpdHlJY29ucy5hZGQoXy5UZXh0RWRpdFNoYXBlcyl9LCIuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdHJhdmVsLXNoYXBlcy50cyI6Ci8qISoqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiohKlwKICAgICAgICAgICAgICAgICAgISoqKiAuL3Byb2plY3RzL2ljb25zL3NyYy9zaGFwZXMvdHJhdmVsLXNoYXBlcy50cyAqKiohCiAgICAgICAgICAgICAgICAgIFwqKioqKioqKioqKioqKioqKioqKioqKioq''@;'; put 'put ''KioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKiEgbm8gc3RhdGljIGV4cG9ydHMgZm91bmQgKi9mdW5jdGlvbihxLF8sSSl7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShfLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxfLlRyYXZlbFNoYXBlcz1fLkNsclNoYXBlT25I''@;'; put 'put ''b2xpZGF5PV8uQ2xyU2hhcGVUcmFpbGVyPV8uQ2xyU2hhcGVGZXJyeT1fLkNsclNoYXBlQ2FyYXZhbj1fLkNsclNoYXBlQ2FtcGVydmFuPV8uQ2xyU2hhcGVCb2F0PV8uQ2xyU2hhcGVCaWN5Y2xlPV8uQ2xyU2hhcGVNYXBNYXJrZXI9Xy5DbHJTaGFwZUNvbXBhc3M9Xy5DbHJTaGFwZU1hcD1f''@;'; put 'put ''LkNsclNoYXBlQ2FyPV8uQ2xyU2hhcGVBaXJwbGFuZT1fLkNsclNoYXBlVHJ1Y2s9dm9pZCAwO3ZhciB5PUkoCi8qISAuLi91dGlscy9kZXNjcmlwdG9yLWNvbmZpZyAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvZGVzY3JpcHRvci1jb25maWcudHMiKSxnPUkoCi8qISAuLi91dGls''@;'; put 'put ''cy9zdmctdGFnLWdlbmVyYXRvciAqLwoiLi9wcm9qZWN0cy9pY29ucy9zcmMvdXRpbHMvc3ZnLXRhZy1nZW5lcmF0b3IudHMiKTtfLkNsclNoYXBlVHJ1Y2s9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTEiIGQ9Ik0zMCwx''@;'; put 'put ''MkgyNlY3YTEsMSwwLDAsMC0xLTFIM0ExLDEsMCwwLDAsMiw3VjI1YTEsMSwwLDAsMCwxLDFINFY4SDI0VjE5LjdhNi40NSw2LjQ1LDAsMCwxLDEuNTYtLjJjLjE1LDAsLjI5LDAsLjQ0LDBWMTRoNGEyLDIsMCwwLDEsMiwydjFIMjh2Mmg0djVIMjkuNmE0LjU0LDQuNTQsMCwwLDAtOC4zNCww''@;'; put 'put ''SDE0LjQzYTQuNSw0LjUsMCwwLDAtNC4xNy0yLjc2QTQuMzgsNC4zOCwwLDEsMCwxNC43MiwyNkgyMWE0LjQ5LDQuNDksMCwwLDAsOC45MiwwSDMzYTEsMSwwLDAsMCwxLTFWMTZBNCw0LDAsMCwwLDMwLDEyWk0xMC4yNiwyOGEyLjM4LDIuMzgsMCwxLDEsMC00Ljc1LDIuMzgsMi4zOCwwLDEs''@;'; put 'put ''MSwwLDQuNzVabTE1LjE3LDBhMi4zOCwyLjM4LDAsMSwxLDIuNS0yLjM3QTIuNDQsMi40NCwwLDAsMSwyNS40MywyOFoiLz5cbiAgICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIGQ9Ik0zMCwxMkgyNlY3YTEsMSwwLDAsMC0xLTFIM0ExLDEs''@;'; put 'put ''MCwwLDAsMiw3VjI1YTEsMSwwLDAsMCwxLDFINFY4SDI0VjIxLjQ5QTQuNDUsNC40NSwwLDAsMCwyMS4yNSwyNEgxNC40M2E0LjUsNC41LDAsMCwwLTQuMTctMi43NkE0LjM4LDQuMzgsMCwxLDAsMTQuNzIsMjZIMjFhNC40OCw0LjQ4LDAsMCwwLDguOTEsMEgzNFYxNkE0LDQsMCwwLDAsMzAs''@;'; put 'put ''MTJaTTEwLjI2LDI4YTIuMzgsMi4zOCwwLDEsMSwwLTQuNzUsMi4zOCwyLjM4LDAsMSwxLDAsNC43NVptMTUuMTcsMGEyLjM4LDIuMzgsMCwxLDEsMi41LTIuMzdBMi40NCwyLjQ0LDAsMCwxLDI1LjQyLDI4Wk0zMiwxN0gyNlYxNGg0YTIsMiwwLDAsMSwyLDJaIi8+JyksXy5DbHJTaGFwZUFp''@;'; 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+JyksXy5DbHJTaGFwZUNhcj0oMCxnLmNscklj''@;'; 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 ''LDEuMTVBMTkuMTUsMTkuMTUsMCwwLDEsMjQsMTRaTTI2LjA2LDI4LjM2YTIuNSwyLjUsMCwxLDEsMi41LTIuNUEyLjUsMi41LDAsMCwxLDI2LjA2LDI4LjM2WiIvPicpLF8uQ2xyU2hhcGVNYXA9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0''@;'; put 'put ''bGluZS1wYXRoLTEiIGQ9Ik0zMy41OSw2LjE5QTEsMSwwLDAsMCwzMi43LDZMMjMuMDksOSwxMy40Niw0LjExYTEsMSwwLDAsMC0uODQsMEwyLjYyLDguMkExLDEsMCwwLDAsMiw5LjEzVjI5LjYxYTEsMSwwLDAsMCwxLjM4LjkyTDEzLDI2LjU4bDkuNTksNC45MmExLDEsMCwwLDAsLjQ2LjEx''@;'; put 'put ''LDEsMSwwLDAsMCwuMywwbDEwLTMuMTJhMSwxLDAsMCwwLC43LTFWN0ExLDEsMCwwLDAsMzMuNTksNi4xOVpNMzIsMjYuNzVsLTguMzIsMi42VjI3LjA2aC0xLjZ2MmwtOC40LTQuMzFWMjMuMDZoLTEuNnYxLjcyTDQsMjguMTFWOS43OWw4LjA4LTMuMzNWOC44MWgxLjZWNi40N2w4LjQsNC4z''@;'; put 'put ''djIuMWgxLjZWMTFMMzIsOC4zNloiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgeD0iMjIuMDgiIHk9IjE1LjA2IiB3aWR0aD0iMS42IiBoZWlnaHQ9IjMuODEiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFz''@;'; put 'put ''cz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMyIgeD0iMjIuMDgiIHk9IjIxLjA2IiB3aWR0aD0iMS42IiBoZWlnaHQ9IjMuODEiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNCIgeD0iMTIuMDgiIHk9''@;'; put 'put ''IjExLjA2IiB3aWR0aD0iMS42IiBoZWlnaHQ9IjMuODEiLz5cbiAgICAgICAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtNSIgeD0iMTIuMDgiIHk9IjE3LjEzIiB3aWR0aD0iMS42IiBoZWlnaHQ9IjMuNzUiLz5cbiAgICAgICAgICAgICAg''@;'; put 'put ''ICA8cGF0aCBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC0xIiBkPSJNMzMuMzEsNy4zNSwyNSw5Ljk0VjE0SDIzVjEwLjI5TDE0LDUuNjhWOUgxMlY1LjI3bC05LjY3LDRBLjUzLjUzLDAsMCwwLDIsOS43NVYzMC40NWEuNTMuNTMsMCwwLDAsLjc0LjQ5TDEyLDI3LjEyVjIz''@;'; put 'put ''aDJ2NC41M2w5LDQuNjFWMjhoMnYzLjc5bDguNjMtMi43YS41My41MywwLDAsMCwuMzctLjUxVjcuODZBLjUzLjUzLDAsMCwwLDMzLjMxLDcuMzVaTTE0LDIxSDEyVjE3aDJabTAtNkgxMlYxMWgyWk0yNSwyNkgyM1YyMmgyWm0wLTZIMjNWMTZoMloiLz4nKSxfLkNsclNoYXBlQ29tcGFzcz0o''@;'; put 'put ''MCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjAuODIsMTUuMzFoMEwxMC40Niw5Yy0uNDYtLjI2LTEuMTEuMzctLjg2Ljg0bDYuMTUsMTAuNTYsMTAuNTYsNi4xNWEuNjYuNjYsMCwwLDAsLjg0LS44NlptLTQsNCwzLTMsNC41NSw3LjQ0WiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWkt''@;'; put 'put ''b3V0bGluZS1wYXRoLTEiIC8+XG4gICAgICAgICAgICA8cGF0aCBkPSJNMTgsMkExNiwxNiwwLDEsMCwzNCwxOCwxNiwxNiwwLDAsMCwxOCwyWm0xLDI5Ljk1VjI5LjUzSDE3djIuNDJBMTQsMTQsMCwwLDEsNC4wNSwxOUg2LjQ3VjE3SDQuMDVBMTQsMTQsMCwwLDEsMTcsNC4wNVY2LjQ3aDJW''@;'; put 'put ''NC4wNUExNCwxNCwwLDAsMSwzMS45NSwxN0gyOS41M3YyaDIuNDJBMTQsMTQsMCwwLDEsMTksMzEuOTVaIiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1vdXRsaW5lLXBhdGgtMiIgLz5cbiAgICAgICAgICAgIDxwYXRoIGQ9Ik0xOCwyQTE2LDE2LDAsMSwwLDM0LDE4LDE2LDE2LDAsMCww''@;'; put 'put ''LDE4LDJaTTYuNDcsMTlINC4wNWMwLS4zMy0uMDUtLjY2LS4wNS0xczAtLjY3LjA1LTFINi40N1pNMTcsNC4wNWMuMzMsMCwuNjYtLjA1LDEtLjA1cy42NywwLDEsLjA1VjYuNDdIMTdabTIsMjcuOWMtLjMzLDAtLjY2LjA1LTEsLjA1cy0uNjcsMC0xLS4wNVYyOS41M2gyWm04LTUuNThhLjU5''@;'; put 'put ''LjU5LDAsMCwxLS42OS4xNkwxNS43NSwyMC4zOCw5LjYsOS44MmMtLjI1LS40Ny4zOS0xLjEuODYtLjg0bDEwLjM3LDYuMzNoMGw2LjMzLDEwLjM3QS41OS41OSwwLDAsMSwyNywyNi4zN1pNMjkuNTMsMTlWMTdoMi40MmMwLC4zMy4wNS42Ni4wNSwxczAsLjY3LS4wNSwxWiIgY2xhc3M9ImNs''@;'; put 'put ''ci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMSIgLz5cbiAgICAgICAgICAgIDxwb2x5Z29uIHBvaW50cz0iMTYuNzcgMTkuMzUgMjQuMzUgMjMuNzcgMTkuOCAxNi4zMyAxNi43NyAxOS4zNSIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxfLkNsclNoYXBl''@;'; 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+JyksXy5DbHJTaGFwZUJpY3ljbGU9KDAsZy5jbHJJY29uU1ZHKSgnPHBhdGggZD0iTTguNSwyOS42NUE2LjUxLDYuNTEsMCwwLDEsMiwyMy4xNWE2LjM5LDYuMzksMCwwLDEsNi41LTYuMzZBNi4zOSw2LjM5LDAsMCwxLDE1LDIzLjE1LDYuNTEs''@;'; 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 ''MS41LDNcblx0YzAuNiwwLjIsMS4zLDAuNSwxLjgsMC44bDEuNi0zLjJoMTBMMjQuNywxNi43eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz4nKSxfLkNsclNoYXBlQm9hdD0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMjkuMSwyNy4xQzI4LDI3LDI2Ljks''@;'; 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+JyksXy5DbHJTaGFw''@;'; 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 ''IDE1LDI4IDE2LjksMjggMTYuOSwxNSAyMCwxNSBcdCIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtNSIgLz48cmVjdCB4PSI2IiB5PSIxMyIgd2lkdGg9IjYuOSIgaGVpZ2h0PSI3IiBjbGFzcz0iY2xyLWktc29saWQgY2xyLWktc29saWQtcGF0aC02IiAvPicpLF8uQ2xy''@;'; 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+JyksXy5DbHJTaGFwZUZlcnJ5PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0yOSwyNS4xYy0xLjIsMC0yLjMsMC40LTMuMywxLjFjMCwwLDAsMCwwLDBjLTEuMSwxLjEtMywxLjEtNC4xLDBjLTAuOS0w''@;'; 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 ''IE03LjksMTBoMnY0aC0yVjEweiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxfLkNsclNoYXBlVHJhaWxlcj0oMCxnLmNsckljb25TVkcpKCc8cGF0aCBkPSJNMTUsMTkuMmMtMy4yLDAtNS44LDIuNi01LjgsNS44czIuNiw1LjgsNS44LDUuOHM1LjgtMi42''@;'; put 'put ''LDUuOC01LjhTMTguMiwxOS4yLDE1LDE5LjJ6IE0xNSwyOS4yYy0yLjMsMC00LjItMS45LTQuMi00LjJcblx0XHRzMS45LTQuMiw0LjItNC4yczQuMiwxLjksNC4yLDQuMlMxNy4zLDI5LjIsMTUsMjkuMnoiIGNsYXNzPSJjbHItaS1vdXRsaW5lIGNsci1pLW91dGxpbmUtcGF0aC0xIiAvPjxy''@;'; put 'put ''ZWN0IHg9IjE0IiB5PSIyNCIgd2lkdGg9IjIiIGhlaWdodD0iMiIgY2xhc3M9ImNsci1pLW91dGxpbmUgY2xyLWktb3V0bGluZS1wYXRoLTIiIC8+PHBhdGggZD0iTTMzLDlIMnYxMy4xYzAsMCwwLDAsMCwwQzIsMjQuMywzLjcsMjYsNS45LDI2SDd2LTJINS45Yy0xLDAtMS44LTAuOC0xLjkt''@;'; put 'put ''MS45VjE1aDIydjcuMWMwLDEtMC44LDEuOC0xLjksMS45SDIzdjJoMS4xXG5cdFx0YzAsMCwwLDAsMCwwYzIuMSwwLDMuOC0xLjcsMy44LTMuOVYxMWg1YzAuNiwwLDEtMC40LDEtMVMzMy42LDksMzMsOXogTTI2LDEzSDR2LTJoMjJWMTN6IiBjbGFzcz0iY2xyLWktb3V0bGluZSBjbHItaS1v''@;'; put 'put ''dXRsaW5lLXBhdGgtMyIgLz48cGF0aCBkPSJNMzMsOUgydjEzLjFjMCwwLDAsMCwwLDBDMiwyNC4zLDMuNywyNiw1LjksMjZIN3YtMkg1LjljLTEsMC0xLjgtMC44LTEuOS0xLjlWMTVoMjJ2Ny4xYzAsMS0wLjgsMS44LTEuOSwxLjlIMjN2MmgxLjFcblx0YzAsMCwwLDAsMCwwYzIuMSwwLDMu''@;'; put 'put ''OC0xLjcsMy44LTMuOVYxMWg1YzAuNiwwLDEtMC40LDEtMVMzMy42LDksMzMsOXoiIGNsYXNzPSJjbHItaS1zb2xpZCBjbHItaS1zb2xpZC1wYXRoLTEiIC8+PHBhdGggZD0iTTE1LDE5LjJjLTMuMiwwLTUuOCwyLjYtNS44LDUuOHMyLjYsNS44LDUuOCw1LjhzNS44LTIuNiw1LjgtNS44bDAs''@;'; put 'put ''MEMyMC44LDIxLjgsMTguMiwxOS4yLDE1LDE5LjJ6IE0xNiwyNmgtMnYtMmgyVjI2eiIgY2xhc3M9ImNsci1pLXNvbGlkIGNsci1pLXNvbGlkLXBhdGgtMiIgLz4nKSxfLkNsclNoYXBlT25Ib2xpZGF5PSgwLGcuY2xySWNvblNWRykoJzxwYXRoIGQ9Ik0xOC4wOCwyLjM0Yy04LjgyLDAtMTYs''@;'; 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+XG4gICcpLF8uVHJhdmVsU2hhcGVzPXt0cnVjazpfLkNsclNoYXBlVHJ1Y2ssYWlycGxhbmU6Xy5DbHJTaGFwZUFpcnBsYW5lLGNhcjpfLkNsclNoYXBlQ2FyLG1hcDpfLkNsclNoYXBlTWFwLGNvbXBhc3M6Xy5DbHJTaGFw''@;'; put 'put ''ZUNvbXBhc3MsIm1hcC1tYXJrZXIiOl8uQ2xyU2hhcGVNYXBNYXJrZXIsYmljeWNsZTpfLkNsclNoYXBlQmljeWNsZSxib2F0Ol8uQ2xyU2hhcGVCb2F0LGNhbXBlcnZhbjpfLkNsclNoYXBlQ2FtcGVydmFuLGNhcmF2YW46Xy5DbHJTaGFwZUNhcmF2YW4sZmVycnk6Xy5DbHJTaGFwZUZlcnJ5''@;'; put 'put ''LHRyYWlsZXI6Xy5DbHJTaGFwZVRyYWlsZXIsIm9uLWhvbGlkYXkiOl8uQ2xyU2hhcGVPbkhvbGlkYXl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLlRyYXZlbFNoYXBlcywicGxhbmUiLCgwLHkuZGVzY3JpcHRvckNvbmZpZykoXy5UcmF2ZWxTaGFwZXMuYWlycGxhbmUpKSxPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoXy5UcmF2ZWxTaGFwZXMsImF1dG8iLCgwLHkuZGVzY3JpcHRvckNvbmZpZykoXy5UcmF2ZWxTaGFwZXMuY2FyKSksdHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5oYXNPd25Qcm9wZXJ0eSgiQ2xhcml0eUljb25zIikmJndpbmRvdy5DbGFyaXR5SWNvbnMuYWRkKF8uVHJh''@;'; put 'put ''dmVsU2hhcGVzKX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMv''@;'; put 'put ''c3JjL3V0aWxzL2Rlc2NyaXB0b3ItY29uZmlnLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKHEsXyxJKXsidXNlIHN0''@;'; put 'put ''cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KF8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8uZGVzY3JpcHRvckNvbmZpZz12b2lkIDAsXy5kZXNjcmlwdG9yQ29uZmlnPWZ1bmN0aW9uIHkoZyl7cmV0dXJue2VudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwLHZh''@;'; put 'put ''bHVlOmd9fX0sIi4vcHJvamVjdHMvaWNvbnMvc3JjL3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzIjoKLyohKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiEqXAogICAgICAgICAgICAgICAgICAhKioqIC4vcHJvamVjdHMvaWNvbnMvc3Jj''@;'; put 'put ''L3V0aWxzL3N2Zy10YWctZ2VuZXJhdG9yLnRzICoqKiEKICAgICAgICAgICAgICAgICAgXCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qISBubyBzdGF0aWMgZXhwb3J0cyBmb3VuZCAqL2Z1bmN0aW9uKHEsXyxJKXsidXNlIHN0cmlj''@;'; put 'put ''dCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KF8sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLF8uY2xySWNvblNWRz12b2lkIDA7Xy5jbHJJY29uU1ZHPWZ1bmN0aW9uIHcoUCl7dmFyIEY9IiI7cmV0dXJuIFAuaW5kZXhPZigiLS1iYWRnZWQiKT4tMSYmKEYrPSJjYW4tYmFkZ2UgIiksUC5pbmRl''@;'; put 'put ''eE9mKCItLWFsZXJ0ZWQiKT4tMSYmKEYrPSJjYW4tYWxlcnQgIiksUC5pbmRleE9mKCJjbHItaS1zb2xpZCIpPi0xJiYoRis9Imhhcy1zb2xpZCAiKSwoRj8nPHN2ZyB2ZXJzaW9uPSIxLjEiIGNsYXNzPSInK0YrJyIgdmlld0JveD0iMCAwIDM2IDM2IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJ4''@;'; put 'put ''TWlkWU1pZCBtZWV0IlxuICAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIGZvY3VzYWJsZT0iZmFsc2UiIHJvbGU9ImltZyI+JzonPHN2ZyB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAzNiAz''@;'; put 'put ''NiIgcHJlc2VydmVBc3BlY3RSYXRpbz0ieE1pZFlNaWQgbWVldCJcbiAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBmb2N1c2FibGU9ImZhbHNlIiByb2xlPSJpbWciPicpK1ArIjwvc3ZnPiJ9''@;'; put 'put ''fX0pfSwzMDE2MToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST17fTtfLnIoSSksXy5kKEkse2FycmF5QXZnOigpPT5wS2UsYXJyYXlFYWNoOigpPT5ZbixhcnJheUZpbHRlcjooKT0+QW0sYXJyYXlGbGF0dGVuOigpPT5RaGUsYXJyYXlNYXA6KCk9PnlzLGFycmF5TWF4OigpPT5oS2Us''@;'; put 'put ''YXJyYXlNaW46KCk9PmZLZSxhcnJheVJlZHVjZTooKT0+cXUsYXJyYXlTdW06KCk9PkpoZSxhcnJheVVuaXF1ZTooKT0+ZTJlLGV4dGVuZEFycmF5OigpPT5LRyxnZXREaWZmZXJlbmNlT2ZBcnJheXM6KCk9PnFHLGdldEludGVyc2VjdGlvbk9mQXJyYXlzOigpPT5nS2UsZ2V0VW5pb25PZkFy''@;'; put 'put ''cmF5czooKT0+bUtlLHBpdm90OigpPT51RSxzdHJpbmdUb0FycmF5OigpPT5YRyx0bzJkQXJyYXk6KCk9PlhoZX0pO3ZhciB5PXt9O18ucih5KSxfLmQoeSx7X2luamVjdFByb2R1Y3RJbmZvOigpPT5hMmUsaXNEZWZpbmVkOigpPT5Gbyxpc0VtcHR5OigpPT5VYyxpc1JlZ0V4cDooKT0+dDJl''@;'; put 'put ''LGlzVW5kZWZpbmVkOigpPT5tYyxzdHJpbmdpZnk6KCk9PnpjfSk7dmFyIGc9e307Xy5yKGcpLF8uZChnLHtlcXVhbHNJZ25vcmVDYXNlOigpPT5fS2UsaXNQZXJjZW50VmFsdWU6KCk9PmUkLHJhbmRvbVN0cmluZzooKT0+UUcsc2FuaXRpemU6KCk9Pk1PLHN0cmlwVGFnczooKT0+biQsc3Vi''@;'; put 'put ''c3RpdHV0ZTooKT0+dCQsdG9VcHBlckNhc2VGaXJzdDooKT0+ZzF9KTt2YXIgQj17fTtfLnIoQiksXy5kKEIse0hUTUxfQ0hBUkFDVEVSUzooKT0+dzJlLGFkZENsYXNzOigpPT5UaSxhZGRFdmVudDooKT0+WUtlLGNsZWFyVGV4dFNlbGVjdGlvbjooKT0+ZCQsY2xvc2VzdDooKT0+RG0sY2xv''@;'; put 'put ''c2VzdERvd246KCk9PmdFLGVtcHR5OigpPT53cCxmYXN0SW5uZXJIVE1MOigpPT5ONyxmYXN0SW5uZXJUZXh0OigpPT5MbSxmaW5kRmlyc3RQYXJlbnRXaXRoQ2xhc3M6KCk9PnYyZSxnZXRDYXJldFBvc2l0aW9uOigpPT51JCxnZXRDc3NUcmFuc2Zvcm06KCk9PnFLZSxnZXRGcmFtZUVsZW1l''@;'; put 'put ''bnQ6KCk9Pm0yZSxnZXRNYXhpbXVtU2Nyb2xsTGVmdDooKT0+UzJlLGdldE1heGltdW1TY3JvbGxUb3A6KCk9PkMyZSxnZXRQYXJlbnQ6KCk9PmcyZSxnZXRQYXJlbnRXaW5kb3c6KCk9PkY3LGdldFNjcm9sbExlZnQ6KCk9PmwkLGdldFNjcm9sbFRvcDooKT0+QU8sZ2V0U2Nyb2xsYWJsZUVs''@;'; put 'put ''ZW1lbnQ6KCk9Pm1FLGdldFNjcm9sbGJhcldpZHRoOigpPT5oMCxnZXRTZWxlY3Rpb25FbmRQb3NpdGlvbjooKT0+TTJlLGdldFNlbGVjdGlvblRleHQ6KCk9PiRLZSxnZXRTdHlsZTooKT0+dkUsZ2V0VHJpbW1pbmdDb250YWluZXI6KCk9PnRfLGdldFdpbmRvd1Njcm9sbExlZnQ6KCk9PlRP''@;'; put 'put ''LGdldFdpbmRvd1Njcm9sbFRvcDooKT0+cyQsaGFzQWNjZXNzVG9QYXJlbnRXaW5kb3c6KCk9PlpLZSxoYXNDbGFzczooKT0+cGEsaGFzSG9yaXpvbnRhbFNjcm9sbGJhcjooKT0+cCQsaGFzVmVydGljYWxTY3JvbGxiYXI6KCk9PmYkLGluZGV4OigpPT5iMmUsaW5uZXJIZWlnaHQ6KCk9Pm5f''@;'; put 'put ''LGlubmVyV2lkdGg6KCk9PmMkLGlzQ2hpbGRPZjooKT0+SW0saXNEZXRhY2hlZDooKT0+ZyQsaXNIVE1MRWxlbWVudDooKT0+ZmcsaXNJbnB1dDooKT0+X0UsaXNJbnRlcm5hbEVsZW1lbnQ6KCk9PnBFLGlzT3V0c2lkZUlucHV0OigpPT5ETyxpc1Zpc2libGU6KCk9PlY3LG1ha2VFbGVtZW50''@;'; put 'put ''Q29udGVudEVkaXRhYmxlQW5kU2VsZWN0SXRzQ29udGVudDooKT0+bSQsbWF0Y2hlc0NTU1J1bGVzOigpPT5XS2Usb2JzZXJ2ZVZpc2liaWxpdHlDaGFuZ2VPbmNlOigpPT54MmUsb2Zmc2V0OigpPT56MCxvdXRlckhlaWdodDooKT0+TXUsb3V0ZXJXaWR0aDooKT0+YXUsb3ZlcmxheUNvbnRh''@;'; put 'put ''aW5zRWxlbWVudDooKT0+Um0scmVtb3ZlQXR0cmlidXRlOigpPT5INyxyZW1vdmVDbGFzczooKT0+Y2EscmVtb3ZlQ29udGVudEVkaXRhYmxlRnJvbUVsZW1lbnRBbmREZXNlbGVjdDooKT0+diQscmVtb3ZlRXZlbnQ6KCk9PkdLZSxyZW1vdmVUZXh0Tm9kZXM6KCk9PmEkLHJlc2V0Q3NzVHJh''@;'; put 'put ''bnNmb3JtOigpPT55RSxydW5XaXRoU2VsZWN0ZWRDb250ZW5kRWRpdGFibGVFbGVtZW50OigpPT5FMmUsc2VsZWN0RWxlbWVudElmQWxsb3dlZDooKT0+WEtlLHNldEF0dHJpYnV0ZTooKT0+dmEsc2V0Q2FyZXRQb3NpdGlvbjooKT0+YkUsc2V0T3ZlcmxheVBvc2l0aW9uOigpPT5rT30pO3Zh''@;'; put 'put ''ciB3PXt9O18ucih3KSxfLmQodyx7Y3Vycnk6KCk9PkEyZSxjdXJyeVJpZ2h0OigpPT5lcWUsZGVib3VuY2U6KCk9PklPLGZhc3RDYWxsOigpPT5STyxpc0Z1bmN0aW9uOigpPT5lYyxwYXJ0aWFsOigpPT5iJCxwaXBlOigpPT5RS2UsdGhyb3R0bGU6KCk9PlQyZSx0aHJvdHRsZUFmdGVySGl0''@;'; put 'put ''czooKT0+SktlfSk7dmFyIFA9e307Xy5yKFApLF8uZChQLHtjbG9uZTooKT0+SmYsY3JlYXRlT2JqZWN0UHJvcExpc3RlbmVyOigpPT5QZCxkZWVwQ2xvbmU6KCk9Pm0xLGRlZXBFeHRlbmQ6KCk9PndFLGRlZXBPYmplY3RTaXplOigpPT5QTyxkZWZpbmVHZXR0ZXI6KCk9PkNwLGR1Y2tTY2hl''@;'; put 'put ''bWE6KCk9PnJfLGV4dGVuZDooKT0+eHUsZ2V0UHJvcGVydHk6KCk9PkQyZSxoYXNPd25Qcm9wZXJ0eTooKT0+RXUsaW5oZXJpdDooKT0+azJlLGlzT2JqZWN0OigpPT5LYSxpc09iamVjdEVxdWFsOigpPT5MTyxtaXhpbjooKT0+eGwsb2JqZWN0RWFjaDooKT0+cWEsc2V0UHJvcGVydHk6KCk9''@;'; put 'put ''Pk9PfSk7dmFyIEY9e307Xy5yKEYpLF8uZChGLHtjYW5jZWxBbmltYXRpb25GcmFtZTooKT0+U0UsZ2V0Q29tcGFyaXNvbkZ1bmN0aW9uOigpPT5SMmUsaXNDU1I6KCk9PkkyZSxpc1RvdWNoU3VwcG9ydGVkOigpPT55JCxyZXF1ZXN0QW5pbWF0aW9uRnJhbWU6KCk9PkNFfSk7dmFyIE89e307''@;'; put 'put ''Xy5yKE8pLF8uZChPLHtpc0Nocm9tZTooKT0+XyQsaXNDaHJvbWVXZWJLaXQ6KCk9PlAyZSxpc0VkZ2U6KCk9PkgyZSxpc0VkZ2VXZWJLaXQ6KCk9PnRxZSxpc0ZpcmVmb3g6KCk9PkZPLGlzRmlyZWZveFdlYktpdDooKT0+RjJlLGlzSU9TOigpPT5DJCxpc0lwYWRPUzooKT0+UyQsaXNMaW51''@;'; put 'put ''eE9TOigpPT5ucWUsaXNNYWNPUzooKT0+SE8saXNNb2JpbGVCcm93c2VyOigpPT5TcCxpc1NhZmFyaTooKT0+dyQsaXNXaW5kb3dzT1M6KCk9Pk0kLHNldEJyb3dzZXJNZXRhOigpPT5MMmUsc2V0UGxhdGZvcm1NZXRhOigpPT5PMmV9KTt2YXIgej17fTtfLnIoeiksXy5kKHose0tFWV9DT0RF''@;'; put 'put ''UzooKT0+R28saXNDdHJsS2V5OigpPT5pcWUsaXNDdHJsTWV0YUtleTooKT0+VjJlLGlzRnVuY3Rpb25LZXk6KCk9PngkLGlzS2V5OigpPT5hXyxpc1ByaW50YWJsZUNoYXI6KCk9Pk4yZX0pO3ZhciBOPXt9O18ucihOKSxfLmQoTix7aXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6KCk9''@;'; put 'put ''Pk9tLGlzTGVmdENsaWNrOigpPT5OTyxpc1JpZ2h0Q2xpY2s6KCk9PlBtLGlzVG91Y2hFdmVudDooKT0+QjJlLG9mZnNldFJlbGF0aXZlVG86KCk9PmoyZSxzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246KCk9PlIyfSk7dmFyIEw9e307Xy5yKEwpLF8uZChMLHtfZGF0YVRvSFRNTDooKT0+TiQs''@;'; put 'put ''aHRtbFRvR3JpZFNldHRpbmdzOigpPT5lZmUsaW5zdGFuY2VUb0hUTUw6KCk9PkgkfSk7dmFyIEs9e307Xy5yKEspLF8uZChLLHtjbGFtcDooKT0+QXMsaXNOdW1lcmljOigpPT52MSxpc051bWVyaWNMaWtlOigpPT50ZmUscmFuZ2VFYWNoOigpPT4kbyxyYW5nZUVhY2hSZXZlcnNlOigpPT5W''@;'; put 'put ''JCx2YWx1ZUFjY29yZGluZ1BlcmNlbnQ6KCk9PkIkfSk7dmFyIFU9e307Xy5yKFUpLF8uZChVLHtjb3VudEZpcnN0Um93S2V5czooKT0+TUssY3JlYXRlRW1wdHlTcHJlYWRzaGVldERhdGE6KCk9PnVldCxjcmVhdGVTcHJlYWRzaGVldERhdGE6KCk9PnNldCxjcmVhdGVTcHJlYWRzaGVldE9i''@;'; put 'put ''amVjdERhdGE6KCk9PmNldCxkYXRhUm93VG9DaGFuZ2VzQXJyYXk6KCk9PlNLLGlzQXJyYXlPZkFycmF5czooKT0+bDNlLGlzQXJyYXlPZk9iamVjdHM6KCk9PmMzZSxzcHJlYWRzaGVldENvbHVtbkluZGV4OigpPT5hZXQsc3ByZWFkc2hlZXRDb2x1bW5MYWJlbDooKT0+YVB9KTt2YXIgVz17''@;'; put 'put ''fTtfLnIoVyksXy5kKFcse0NIRUNLQk9YX0NIRUNLRUQ6KCk9PmVYLENIRUNLQk9YX1JFTkRFUkVSX05BTUVTUEFDRTooKT0+UXEsQ0hFQ0tCT1hfVU5DSEVDS0VEOigpPT50WCxDT05URVhUTUVOVV9JVEVNU19BRERfQ09NTUVOVDooKT0+ZXEsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5U''@;'; put 'put ''OigpPT5pcSxDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfQk9UVE9NOigpPT5kcSxDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfQ0VOVEVSOigpPT5hcSxDT05URVhUTUVOVV9JVEVNU19BTElHTk1FTlRfSlVTVElGWTooKT0+bHEsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX0xF''@;'; put 'put ''RlQ6KCk9Pm9xLENPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9NSURETEU6KCk9PnVxLENPTlRFWFRNRU5VX0lURU1TX0FMSUdOTUVOVF9SSUdIVDooKT0+c3EsQ09OVEVYVE1FTlVfSVRFTVNfQUxJR05NRU5UX1RPUDooKT0+Y3EsQ09OVEVYVE1FTlVfSVRFTVNfQk9SREVSUzooKT0+aHEs''@;'; put 'put ''Q09OVEVYVE1FTlVfSVRFTVNfQk9SREVSU19CT1RUT006KCk9PmdxLENPTlRFWFRNRU5VX0lURU1TX0JPUkRFUlNfTEVGVDooKT0+bXEsQ09OVEVYVE1FTlVfSVRFTVNfQk9SREVSU19SSUdIVDooKT0+cHEsQ09OVEVYVE1FTlVfSVRFTVNfQk9SREVSU19UT1A6KCk9PmZxLENPTlRFWFRNRU5V''@;'; put 'put ''X0lURU1TX0NMRUFSX0NPTFVNTjooKT0+WkssQ09OVEVYVE1FTlVfSVRFTVNfQ09QWTooKT0+V0ssQ09OVEVYVE1FTlVfSVRFTVNfQ09QWV9DT0xVTU5fSEVBREVSU19PTkxZOigpPT4kSyxDT05URVhUTUVOVV9JVEVNU19DT1BZX1dJVEhfQ09MVU1OX0dST1VQX0hFQURFUlM6KCk9PkdLLENP''@;'; put 'put ''TlRFWFRNRU5VX0lURU1TX0NPUFlfV0lUSF9DT0xVTU5fSEVBREVSUzooKT0+WUssQ09OVEVYVE1FTlVfSVRFTVNfQ1VUOigpPT5LSyxDT05URVhUTUVOVV9JVEVNU19FRElUX0NPTU1FTlQ6KCk9PnRxLENPTlRFWFRNRU5VX0lURU1TX0ZSRUVaRV9DT0xVTU46KCk9PnFLLENPTlRFWFRNRU5V''@;'; put 'put ''X0lURU1TX0hJREVfQ09MVU1OOigpPT5fcSxDT05URVhUTUVOVV9JVEVNU19ISURFX1JPVzooKT0+Q3EsQ09OVEVYVE1FTlVfSVRFTVNfSU5TRVJUX0xFRlQ6KCk9Pk5LLENPTlRFWFRNRU5VX0lURU1TX0lOU0VSVF9SSUdIVDooKT0+VkssQ09OVEVYVE1FTlVfSVRFTVNfTUVSR0VfQ0VMTFM6''@;'; put 'put ''KCk9PkpLLENPTlRFWFRNRU5VX0lURU1TX05FU1RFRF9ST1dTX0RFVEFDSF9DSElMRDooKT0+eXEsQ09OVEVYVE1FTlVfSVRFTVNfTkVTVEVEX1JPV1NfSU5TRVJUX0NISUxEOigpPT5icSxDT05URVhUTUVOVV9JVEVNU19OT19JVEVNUzooKT0+UEssQ09OVEVYVE1FTlVfSVRFTVNfUkVBRF9P''@;'; put 'put ''TkxZOigpPT5wUCxDT05URVhUTUVOVV9JVEVNU19SRUFEX09OTFlfQ09NTUVOVDooKT0+cnEsQ09OVEVYVE1FTlVfSVRFTVNfUkVETzooKT0+VUssQ09OVEVYVE1FTlVfSVRFTVNfUkVNT1ZFX0JPUkRFUlM6KCk9PnZxLENPTlRFWFRNRU5VX0lURU1TX1JFTU9WRV9DT0xVTU46KCk9PmpLLENP''@;'; put 'put ''TlRFWFRNRU5VX0lURU1TX1JFTU9WRV9DT01NRU5UOigpPT5ucSxDT05URVhUTUVOVV9JVEVNU19SRU1PVkVfUk9XOigpPT5CSyxDT05URVhUTUVOVV9JVEVNU19ST1dfQUJPVkU6KCk9PkZLLENPTlRFWFRNRU5VX0lURU1TX1JPV19CRUxPVzooKT0+SEssQ09OVEVYVE1FTlVfSVRFTVNfU0hP''@;'; put 'put ''V19DT0xVTU46KCk9PndxLENPTlRFWFRNRU5VX0lURU1TX1NIT1dfUk9XOigpPT5TcSxDT05URVhUTUVOVV9JVEVNU19VTkRPOigpPT56SyxDT05URVhUTUVOVV9JVEVNU19VTkZSRUVaRV9DT0xVTU46KCk9PlhLLENPTlRFWFRNRU5VX0lURU1TX1VOTUVSR0VfQ0VMTFM6KCk9PlFLLENPTlRF''@;'; put 'put ''WFRfTUVOVV9JVEVNU19OQU1FU1BBQ0U6KCk9PnczZSxGSUxURVJTX0JVVFRPTlNfQ0FOQ0VMOigpPT5LcSxGSUxURVJTX0JVVFRPTlNfQ0xFQVI6KCk9PkdxLEZJTFRFUlNfQlVUVE9OU19PSzooKT0+JHEsRklMVEVSU19CVVRUT05TX1BMQUNFSE9MREVSX1NFQVJDSDooKT0+cXEsRklMVEVS''@;'; put 'put ''U19CVVRUT05TX1BMQUNFSE9MREVSX1NFQ09ORF9WQUxVRTooKT0+SnEsRklMVEVSU19CVVRUT05TX1BMQUNFSE9MREVSX1ZBTFVFOigpPT5YcSxGSUxURVJTX0JVVFRPTlNfU0VMRUNUX0FMTDooKT0+WXEsRklMVEVSU19DT05ESVRJT05TX0FGVEVSOigpPT5OcSxGSUxURVJTX0NPTkRJVElP''@;'; put 'put ''TlNfQkVGT1JFOigpPT5WcSxGSUxURVJTX0NPTkRJVElPTlNfQkVHSU5TX1dJVEg6KCk9PkFxLEZJTFRFUlNfQ09ORElUSU9OU19CRVRXRUVOOigpPT5GcSxGSUxURVJTX0NPTkRJVElPTlNfQllfVkFMVUU6KCk9PlVldCxGSUxURVJTX0NPTkRJVElPTlNfQ09OVEFJTlM6KCk9PkRxLEZJTFRF''@;'; put 'put ''UlNfQ09ORElUSU9OU19FTVBUWTooKT0+TXEsRklMVEVSU19DT05ESVRJT05TX0VORFNfV0lUSDooKT0+a3EsRklMVEVSU19DT05ESVRJT05TX0VRVUFMOigpPT5FcSxGSUxURVJTX0NPTkRJVElPTlNfR1JFQVRFUl9USEFOOigpPT5ScSxGSUxURVJTX0NPTkRJVElPTlNfR1JFQVRFUl9USEFO''@;'; put 'put ''X09SX0VRVUFMOigpPT5McSxGSUxURVJTX0NPTkRJVElPTlNfTEVTU19USEFOOigpPT5PcSxGSUxURVJTX0NPTkRJVElPTlNfTEVTU19USEFOX09SX0VRVUFMOigpPT5QcSxGSUxURVJTX0NPTkRJVElPTlNfTkFNRVNQQUNFOigpPT5XYyxGSUxURVJTX0NPTkRJVElPTlNfTk9ORTooKT0+Z1As''@;'; put 'put ''RklMVEVSU19DT05ESVRJT05TX05PVF9CRVRXRUVOOigpPT5IcSxGSUxURVJTX0NPTkRJVElPTlNfTk9UX0NPTlRBSU46KCk9PklxLEZJTFRFUlNfQ09ORElUSU9OU19OT1RfRU1QVFk6KCk9PnhxLEZJTFRFUlNfQ09ORElUSU9OU19OT1RfRVFVQUw6KCk9PlRxLEZJTFRFUlNfQ09ORElUSU9O''@;'; put 'put ''U19UT0RBWTooKT0+QnEsRklMVEVSU19DT05ESVRJT05TX1RPTU9SUk9XOigpPT5qcSxGSUxURVJTX0NPTkRJVElPTlNfWUVTVEVSREFZOigpPT56cSxGSUxURVJTX0RJVlNfRklMVEVSX0JZX0NPTkRJVElPTjooKT0+VXEsRklMVEVSU19ESVZTX0ZJTFRFUl9CWV9WQUxVRTooKT0+WnEsRklM''@;'; put 'put ''VEVSU19MQUJFTFNfQ09OSlVOQ1RJT046KCk9PldxLEZJTFRFUlNfTEFCRUxTX0RJU0pVTkNUSU9OOigpPT5tUCxGSUxURVJTX05BTUVTUEFDRTooKT0+WDEsRklMVEVSU19WQUxVRVNfQkxBTktfQ0VMTFM6KCk9PnZQfSk7dmFyIFk9e307ZnVuY3Rpb24gWChjLGwsYSxkLGgsZix2KXt0cnl7''@;'; put 'put ''dmFyIE09Y1tmXSh2KSxEPU0udmFsdWV9Y2F0Y2goWil7cmV0dXJuIHZvaWQgYShaKX1NLmRvbmU/bChEKTpQcm9taXNlLnJlc29sdmUoRCkudGhlbihkLGgpfWZ1bmN0aW9uIGVlKGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPXRoaXMsYT1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNl''@;'; put 'put ''KGZ1bmN0aW9uKGQsaCl7dmFyIGY9Yy5hcHBseShsLGEpO2Z1bmN0aW9uIHYoRCl7WChmLGQsaCx2LE0sIm5leHQiLEQpfWZ1bmN0aW9uIE0oRCl7WChmLGQsaCx2LE0sInRocm93IixEKX12KHZvaWQgMCl9KX19Xy5yKFkpLF8uZChZLHtnZXROb3JtYWxpemVkRGF0ZTooKT0+SnBlfSk7bGV0''@;'; put 'put ''IHJlPW51bGwsbGU9MTtjb25zdCBtZT1TeW1ib2woIlNJR05BTCIpO2Z1bmN0aW9uIF9lKGMpe2NvbnN0IGw9cmU7cmV0dXJuIHJlPWMsbH1mdW5jdGlvbiB4KGMpe2lmKCghc2UoYyl8fGMuZGlydHkpJiYoYy5kaXJ0eXx8Yy5sYXN0Q2xlYW5FcG9jaCE9PWxlKSl7aWYoIWMucHJvZHVjZXJN''@;'; put 'put ''dXN0UmVjb21wdXRlKGMpJiYhbShjKSlyZXR1cm4gYy5kaXJ0eT0hMSx2b2lkKGMubGFzdENsZWFuRXBvY2g9bGUpO2MucHJvZHVjZXJSZWNvbXB1dGVWYWx1ZShjKSxjLmRpcnR5PSExLGMubGFzdENsZWFuRXBvY2g9bGV9fWZ1bmN0aW9uIG0oYyl7d2UoYyk7Zm9yKGxldCBsPTA7bDxjLnBy''@;'; put 'put ''b2R1Y2VyTm9kZS5sZW5ndGg7bCsrKXtjb25zdCBhPWMucHJvZHVjZXJOb2RlW2xdLGQ9Yy5wcm9kdWNlckxhc3RSZWFkVmVyc2lvbltsXTtpZihkIT09YS52ZXJzaW9ufHwoeChhKSxkIT09YS52ZXJzaW9uKSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiB0ZShjLGwpe2lmKGZ1bmN0aW9u''@;'; put 'put ''IFVlKGMpe2MubGl2ZUNvbnN1bWVyTm9kZT8/PVtdLGMubGl2ZUNvbnN1bWVySW5kZXhPZlRoaXM/Pz1bXX0oYyksd2UoYyksMT09PWMubGl2ZUNvbnN1bWVyTm9kZS5sZW5ndGgpZm9yKGxldCBkPTA7ZDxjLnByb2R1Y2VyTm9kZS5sZW5ndGg7ZCsrKXRlKGMucHJvZHVjZXJOb2RlW2RdLGMu''@;'; put 'put ''cHJvZHVjZXJJbmRleE9mVGhpc1tkXSk7Y29uc3QgYT1jLmxpdmVDb25zdW1lck5vZGUubGVuZ3RoLTE7aWYoYy5saXZlQ29uc3VtZXJOb2RlW2xdPWMubGl2ZUNvbnN1bWVyTm9kZVthXSxjLmxpdmVDb25zdW1lckluZGV4T2ZUaGlzW2xdPWMubGl2ZUNvbnN1bWVySW5kZXhPZlRoaXNbYV0s''@;'; put 'put ''Yy5saXZlQ29uc3VtZXJOb2RlLmxlbmd0aC0tLGMubGl2ZUNvbnN1bWVySW5kZXhPZlRoaXMubGVuZ3RoLS0sbDxjLmxpdmVDb25zdW1lck5vZGUubGVuZ3RoKXtjb25zdCBkPWMubGl2ZUNvbnN1bWVySW5kZXhPZlRoaXNbbF0saD1jLmxpdmVDb25zdW1lck5vZGVbbF07d2UoaCksaC5wcm9k''@;'; put 'put ''dWNlckluZGV4T2ZUaGlzW2RdPWx9fWZ1bmN0aW9uIHNlKGMpe3JldHVybiBjLmNvbnN1bWVySXNBbHdheXNMaXZlfHwoYz8ubGl2ZUNvbnN1bWVyTm9kZT8ubGVuZ3RoPz8wKT4wfWZ1bmN0aW9uIHdlKGMpe2MucHJvZHVjZXJOb2RlPz89W10sYy5wcm9kdWNlckluZGV4T2ZUaGlzPz89W10s''@;'; put 'put ''Yy5wcm9kdWNlckxhc3RSZWFkVmVyc2lvbj8/PVtdfWxldCBEZT1udWxsO2Z1bmN0aW9uICRlKGMpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBjfWZ1bmN0aW9uIHR0KGMpe2NvbnN0IGE9YyhkPT57RXJyb3IuY2FsbChkKSxkLnN0YWNrPShuZXcgRXJyb3IpLnN0YWNrfSk7cmV0dXJuIGEu''@;'; put 'put ''cHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSxhLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1hLGF9Y29uc3QgSGU9dHQoYz0+ZnVuY3Rpb24oYSl7Yyh0aGlzKSx0aGlzLm1lc3NhZ2U9YT9gJHthLmxlbmd0aH0gZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlw''@;'; put 'put ''dGlvbjpcbiR7YS5tYXAoKGQsaCk9PmAke2grMX0pICR7ZC50b1N0cmluZygpfWApLmpvaW4oIlxuICAiKX1gOiIiLHRoaXMubmFtZT0iVW5zdWJzY3JpcHRpb25FcnJvciIsdGhpcy5lcnJvcnM9YX0pO2Z1bmN0aW9uIGR0KGMsbCl7aWYoYyl7Y29uc3QgYT1jLmluZGV4T2YobCk7MDw9YSYm''@;'; put 'put ''Yy5zcGxpY2UoYSwxKX19Y2xhc3MgcXR7Y29uc3RydWN0b3IobCl7dGhpcy5pbml0aWFsVGVhcmRvd249bCx0aGlzLmNsb3NlZD0hMSx0aGlzLl9wYXJlbnRhZ2U9bnVsbCx0aGlzLl9maW5hbGl6ZXJzPW51bGx9dW5zdWJzY3JpYmUoKXtsZXQgbDtpZighdGhpcy5jbG9zZWQpe3RoaXMuY2xv''@;'; put 'put ''c2VkPSEwO2NvbnN0e19wYXJlbnRhZ2U6YX09dGhpcztpZihhKWlmKHRoaXMuX3BhcmVudGFnZT1udWxsLEFycmF5LmlzQXJyYXkoYSkpZm9yKGNvbnN0IGYgb2YgYSlmLnJlbW92ZSh0aGlzKTtlbHNlIGEucmVtb3ZlKHRoaXMpO2NvbnN0e2luaXRpYWxUZWFyZG93bjpkfT10aGlzO2lmKCRl''@;'; put 'put ''KGQpKXRyeXtkKCl9Y2F0Y2goZil7bD1mIGluc3RhbmNlb2YgSGU/Zi5lcnJvcnM6W2ZdfWNvbnN0e19maW5hbGl6ZXJzOmh9PXRoaXM7aWYoaCl7dGhpcy5fZmluYWxpemVycz1udWxsO2Zvcihjb25zdCBmIG9mIGgpdHJ5e2FpKGYpfWNhdGNoKHYpe2w9bD8/W10sdiBpbnN0YW5jZW9mIEhl''@;'; put 'put ''P2w9Wy4uLmwsLi4udi5lcnJvcnNdOmwucHVzaCh2KX19aWYobCl0aHJvdyBuZXcgSGUobCl9fWFkZChsKXt2YXIgYTtpZihsJiZsIT09dGhpcylpZih0aGlzLmNsb3NlZClhaShsKTtlbHNle2lmKGwgaW5zdGFuY2VvZiBxdCl7aWYobC5jbG9zZWR8fGwuX2hhc1BhcmVudCh0aGlzKSlyZXR1''@;'; put 'put ''cm47bC5fYWRkUGFyZW50KHRoaXMpfSh0aGlzLl9maW5hbGl6ZXJzPW51bGwhPT0oYT10aGlzLl9maW5hbGl6ZXJzKSYmdm9pZCAwIT09YT9hOltdKS5wdXNoKGwpfX1faGFzUGFyZW50KGwpe2NvbnN0e19wYXJlbnRhZ2U6YX09dGhpcztyZXR1cm4gYT09PWx8fEFycmF5LmlzQXJyYXkoYSkm''@;'; put 'put ''JmEuaW5jbHVkZXMobCl9X2FkZFBhcmVudChsKXtjb25zdHtfcGFyZW50YWdlOmF9PXRoaXM7dGhpcy5fcGFyZW50YWdlPUFycmF5LmlzQXJyYXkoYSk/KGEucHVzaChsKSxhKTphP1thLGxdOmx9X3JlbW92ZVBhcmVudChsKXtjb25zdHtfcGFyZW50YWdlOmF9PXRoaXM7YT09PWw/dGhpcy5f''@;'; put 'put ''cGFyZW50YWdlPW51bGw6QXJyYXkuaXNBcnJheShhKSYmZHQoYSxsKX1yZW1vdmUobCl7Y29uc3R7X2ZpbmFsaXplcnM6YX09dGhpczthJiZkdChhLGwpLGwgaW5zdGFuY2VvZiBxdCYmbC5fcmVtb3ZlUGFyZW50KHRoaXMpfX1xdC5FTVBUWT0oKCk9Pntjb25zdCBjPW5ldyBxdDtyZXR1cm4g''@;'; put 'put ''Yy5jbG9zZWQ9ITAsY30pKCk7Y29uc3QgUnQ9cXQuRU1QVFk7ZnVuY3Rpb24gUHQoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBxdHx8YyYmImNsb3NlZCJpbiBjJiYkZShjLnJlbW92ZSkmJiRlKGMuYWRkKSYmJGUoYy51bnN1YnNjcmliZSl9ZnVuY3Rpb24gYWkoYyl7JGUoYyk/YygpOmMudW5z''@;'; put 'put ''dWJzY3JpYmUoKX1jb25zdCBRdD17b25VbmhhbmRsZWRFcnJvcjpudWxsLG9uU3RvcHBlZE5vdGlmaWNhdGlvbjpudWxsLFByb21pc2U6dm9pZCAwLHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6ITEsdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiExfSxzbj17c2V0VGlt''@;'; put 'put ''ZW91dChjLGwsLi4uYSl7Y29uc3R7ZGVsZWdhdGU6ZH09c247cmV0dXJuIGQ/LnNldFRpbWVvdXQ/ZC5zZXRUaW1lb3V0KGMsbCwuLi5hKTpzZXRUaW1lb3V0KGMsbCwuLi5hKX0sY2xlYXJUaW1lb3V0KGMpe2NvbnN0e2RlbGVnYXRlOmx9PXNuO3JldHVybihsPy5jbGVhclRpbWVvdXR8fGNs''@;'; put 'put ''ZWFyVGltZW91dCkoYyl9LGRlbGVnYXRlOnZvaWQgMH07ZnVuY3Rpb24gUmkoYyl7c24uc2V0VGltZW91dCgoKT0+e2NvbnN0e29uVW5oYW5kbGVkRXJyb3I6bH09UXQ7aWYoIWwpdGhyb3cgYztsKGMpfSl9ZnVuY3Rpb24gZm4oKXt9Y29uc3QgZnQ9QXQoIkMiLHZvaWQgMCx2b2lkIDApO2Z1''@;'; put 'put ''bmN0aW9uIEF0KGMsbCxhKXtyZXR1cm57a2luZDpjLHZhbHVlOmwsZXJyb3I6YX19bGV0IExuPW51bGw7ZnVuY3Rpb24gc3QoYyl7aWYoUXQudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyl7Y29uc3QgbD0hTG47aWYobCYmKExuPXtlcnJvclRocm93bjohMSxlcnJvcjpu''@;'; put 'put ''dWxsfSksYygpLGwpe2NvbnN0e2Vycm9yVGhyb3duOmEsZXJyb3I6ZH09TG47aWYoTG49bnVsbCxhKXRocm93IGR9fWVsc2UgYygpfWNsYXNzIG5pIGV4dGVuZHMgcXR7Y29uc3RydWN0b3IobCl7c3VwZXIoKSx0aGlzLmlzU3RvcHBlZD0hMSxsPyh0aGlzLmRlc3RpbmF0aW9uPWwsUHQobCkm''@;'; put 'put ''JmwuYWRkKHRoaXMpKTp0aGlzLmRlc3RpbmF0aW9uPWp0fXN0YXRpYyBjcmVhdGUobCxhLGQpe3JldHVybiBuZXcgaHQobCxhLGQpfW5leHQobCl7dGhpcy5pc1N0b3BwZWQ/b24oZnVuY3Rpb24gWnQoYyl7cmV0dXJuIEF0KCJOIixjLHZvaWQgMCl9KGwpLHRoaXMpOnRoaXMuX25leHQobCl9''@;'; put 'put ''ZXJyb3IobCl7dGhpcy5pc1N0b3BwZWQ/b24oZnVuY3Rpb24gUHIoYyl7cmV0dXJuIEF0KCJFIix2b2lkIDAsYyl9KGwpLHRoaXMpOih0aGlzLmlzU3RvcHBlZD0hMCx0aGlzLl9lcnJvcihsKSl9Y29tcGxldGUoKXt0aGlzLmlzU3RvcHBlZD9vbihmdCx0aGlzKToodGhpcy5pc1N0b3BwZWQ9''@;'; put 'put ''ITAsdGhpcy5fY29tcGxldGUoKSl9dW5zdWJzY3JpYmUoKXt0aGlzLmNsb3NlZHx8KHRoaXMuaXNTdG9wcGVkPSEwLHN1cGVyLnVuc3Vic2NyaWJlKCksdGhpcy5kZXN0aW5hdGlvbj1udWxsKX1fbmV4dChsKXt0aGlzLmRlc3RpbmF0aW9uLm5leHQobCl9X2Vycm9yKGwpe3RyeXt0aGlzLmRl''@;'; put 'put ''c3RpbmF0aW9uLmVycm9yKGwpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX1fY29tcGxldGUoKXt0cnl7dGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpfWZpbmFsbHl7dGhpcy51bnN1YnNjcmliZSgpfX19Y29uc3QgV2U9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7ZnVuY3Rpb24gVHQo''@;'; put 'put ''YyxsKXtyZXR1cm4gV2UuY2FsbChjLGwpfWNsYXNzIHJye2NvbnN0cnVjdG9yKGwpe3RoaXMucGFydGlhbE9ic2VydmVyPWx9bmV4dChsKXtjb25zdHtwYXJ0aWFsT2JzZXJ2ZXI6YX09dGhpcztpZihhLm5leHQpdHJ5e2EubmV4dChsKX1jYXRjaChkKXt4dChkKX19ZXJyb3IobCl7Y29uc3R7''@;'; put 'put ''cGFydGlhbE9ic2VydmVyOmF9PXRoaXM7aWYoYS5lcnJvcil0cnl7YS5lcnJvcihsKX1jYXRjaChkKXt4dChkKX1lbHNlIHh0KGwpfWNvbXBsZXRlKCl7Y29uc3R7cGFydGlhbE9ic2VydmVyOmx9PXRoaXM7aWYobC5jb21wbGV0ZSl0cnl7bC5jb21wbGV0ZSgpfWNhdGNoKGEpe3h0KGEpfX19''@;'; put 'put ''Y2xhc3MgaHQgZXh0ZW5kcyBuaXtjb25zdHJ1Y3RvcihsLGEsZCl7bGV0IGg7aWYoc3VwZXIoKSwkZShsKXx8IWwpaD17bmV4dDpsPz92b2lkIDAsZXJyb3I6YT8/dm9pZCAwLGNvbXBsZXRlOmQ/P3ZvaWQgMH07ZWxzZXtsZXQgZjt0aGlzJiZRdC51c2VEZXByZWNhdGVkTmV4dENvbnRleHQ/''@;'; put 'put ''KGY9T2JqZWN0LmNyZWF0ZShsKSxmLnVuc3Vic2NyaWJlPSgpPT50aGlzLnVuc3Vic2NyaWJlKCksaD17bmV4dDpsLm5leHQmJlR0KGwubmV4dCxmKSxlcnJvcjpsLmVycm9yJiZUdChsLmVycm9yLGYpLGNvbXBsZXRlOmwuY29tcGxldGUmJlR0KGwuY29tcGxldGUsZil9KTpoPWx9dGhpcy5k''@;'; put 'put ''ZXN0aW5hdGlvbj1uZXcgcnIoaCl9fWZ1bmN0aW9uIHh0KGMpe1F0LnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc/ZnVuY3Rpb24genQoYyl7UXQudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyYmTG4mJihMbi5lcnJvclRocm93bj0hMCxMbi5lcnJv''@;'; put 'put ''cj1jKX0oYyk6UmkoYyl9ZnVuY3Rpb24gb24oYyxsKXtjb25zdHtvblN0b3BwZWROb3RpZmljYXRpb246YX09UXQ7YSYmc24uc2V0VGltZW91dCgoKT0+YShjLGwpKX1jb25zdCBqdD17Y2xvc2VkOiEwLG5leHQ6Zm4sZXJyb3I6ZnVuY3Rpb24gQm4oYyl7dGhyb3cgY30sY29tcGxldGU6Zm59''@;'; put 'put ''LGRpPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5vYnNlcnZhYmxlfHwiQEBvYnNlcnZhYmxlIjtmdW5jdGlvbiBjbihjKXtyZXR1cm4gY31mdW5jdGlvbiBJaShjKXtyZXR1cm4gMD09PWMubGVuZ3RoP2NuOjE9PT1jLmxlbmd0aD9jWzBdOmZ1bmN0aW9uKGEpe3JldHVybiBj''@;'; put 'put ''LnJlZHVjZSgoZCxoKT0+aChkKSxhKX19bGV0IFh0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7YSYmKHRoaXMuX3N1YnNjcmliZT1hKX1saWZ0KGEpe2NvbnN0IGQ9bmV3IGM7cmV0dXJuIGQuc291cmNlPXRoaXMsZC5vcGVyYXRvcj1hLGR9c3Vic2NyaWJlKGEsZCxoKXtjb25zdCBm''@;'; put 'put ''PWZ1bmN0aW9uIE1pKGMpe3JldHVybiBjJiZjIGluc3RhbmNlb2Ygbml8fGZ1bmN0aW9uIGhvKGMpe3JldHVybiBjJiYkZShjLm5leHQpJiYkZShjLmVycm9yKSYmJGUoYy5jb21wbGV0ZSl9KGMpJiZQdChjKX0oYSk/YTpuZXcgaHQoYSxkLGgpO3JldHVybiBzdCgoKT0+e2NvbnN0e29wZXJh''@;'; put 'put ''dG9yOnYsc291cmNlOk19PXRoaXM7Zi5hZGQodj92LmNhbGwoZixNKTpNP3RoaXMuX3N1YnNjcmliZShmKTp0aGlzLl90cnlTdWJzY3JpYmUoZikpfSksZn1fdHJ5U3Vic2NyaWJlKGEpe3RyeXtyZXR1cm4gdGhpcy5fc3Vic2NyaWJlKGEpfWNhdGNoKGQpe2EuZXJyb3IoZCl9fWZvckVhY2go''@;'; put 'put ''YSxkKXtyZXR1cm4gbmV3KGQ9ZW4oZCkpKChoLGYpPT57Y29uc3Qgdj1uZXcgaHQoe25leHQ6TT0+e3RyeXthKE0pfWNhdGNoKEQpe2YoRCksdi51bnN1YnNjcmliZSgpfX0sZXJyb3I6Zixjb21wbGV0ZTpofSk7dGhpcy5zdWJzY3JpYmUodil9KX1fc3Vic2NyaWJlKGEpe3ZhciBkO3JldHVy''@;'; put 'put ''biBudWxsPT09KGQ9dGhpcy5zb3VyY2UpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLnN1YnNjcmliZShhKX1bZGldKCl7cmV0dXJuIHRoaXN9cGlwZSguLi5hKXtyZXR1cm4gSWkoYSkodGhpcyl9dG9Qcm9taXNlKGEpe3JldHVybiBuZXcoYT1lbihhKSkoKGQsaCk9PntsZXQgZjt0aGlzLnN1YnNj''@;'; put 'put ''cmliZSh2PT5mPXYsdj0+aCh2KSwoKT0+ZChmKSl9KX19cmV0dXJuIGMuY3JlYXRlPWw9Pm5ldyBjKGwpLGN9KSgpO2Z1bmN0aW9uIGVuKGMpe3ZhciBsO3JldHVybiBudWxsIT09KGw9Yz8/UXQuUHJvbWlzZSkmJnZvaWQgMCE9PWw/bDpQcm9taXNlfWNvbnN0IHByPXR0KGM9PmZ1bmN0aW9u''@;'; put 'put ''KCl7Yyh0aGlzKSx0aGlzLm5hbWU9Ik9iamVjdFVuc3Vic2NyaWJlZEVycm9yIix0aGlzLm1lc3NhZ2U9Im9iamVjdCB1bnN1YnNjcmliZWQifSk7bGV0IFduPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBYdHtjb25zdHJ1Y3Rvcigpe3N1cGVyKCksdGhpcy5jbG9zZWQ9ITEsdGhpcy5jdXJyZW50''@;'; put 'put ''T2JzZXJ2ZXJzPW51bGwsdGhpcy5vYnNlcnZlcnM9W10sdGhpcy5pc1N0b3BwZWQ9ITEsdGhpcy5oYXNFcnJvcj0hMSx0aGlzLnRocm93bkVycm9yPW51bGx9bGlmdChhKXtjb25zdCBkPW5ldyBLaSh0aGlzLHRoaXMpO3JldHVybiBkLm9wZXJhdG9yPWEsZH1fdGhyb3dJZkNsb3NlZCgpe2lm''@;'; put 'put ''KHRoaXMuY2xvc2VkKXRocm93IG5ldyBwcn1uZXh0KGEpe3N0KCgpPT57aWYodGhpcy5fdGhyb3dJZkNsb3NlZCgpLCF0aGlzLmlzU3RvcHBlZCl7dGhpcy5jdXJyZW50T2JzZXJ2ZXJzfHwodGhpcy5jdXJyZW50T2JzZXJ2ZXJzPUFycmF5LmZyb20odGhpcy5vYnNlcnZlcnMpKTtmb3IoY29u''@;'; put 'put ''c3QgZCBvZiB0aGlzLmN1cnJlbnRPYnNlcnZlcnMpZC5uZXh0KGEpfX0pfWVycm9yKGEpe3N0KCgpPT57aWYodGhpcy5fdGhyb3dJZkNsb3NlZCgpLCF0aGlzLmlzU3RvcHBlZCl7dGhpcy5oYXNFcnJvcj10aGlzLmlzU3RvcHBlZD0hMCx0aGlzLnRocm93bkVycm9yPWE7Y29uc3R7b2JzZXJ2''@;'; put 'put ''ZXJzOmR9PXRoaXM7Zm9yKDtkLmxlbmd0aDspZC5zaGlmdCgpLmVycm9yKGEpfX0pfWNvbXBsZXRlKCl7c3QoKCk9PntpZih0aGlzLl90aHJvd0lmQ2xvc2VkKCksIXRoaXMuaXNTdG9wcGVkKXt0aGlzLmlzU3RvcHBlZD0hMDtjb25zdHtvYnNlcnZlcnM6YX09dGhpcztmb3IoO2EubGVuZ3Ro''@;'; put 'put ''OylhLnNoaWZ0KCkuY29tcGxldGUoKX19KX11bnN1YnNjcmliZSgpe3RoaXMuaXNTdG9wcGVkPXRoaXMuY2xvc2VkPSEwLHRoaXMub2JzZXJ2ZXJzPXRoaXMuY3VycmVudE9ic2VydmVycz1udWxsfWdldCBvYnNlcnZlZCgpe3ZhciBhO3JldHVybihudWxsPT09KGE9dGhpcy5vYnNlcnZlcnMp''@;'; put 'put ''fHx2b2lkIDA9PT1hP3ZvaWQgMDphLmxlbmd0aCk+MH1fdHJ5U3Vic2NyaWJlKGEpe3JldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksc3VwZXIuX3RyeVN1YnNjcmliZShhKX1fc3Vic2NyaWJlKGEpe3JldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksdGhpcy5fY2hlY2tGaW5hbGl6ZWRT''@;'; put 'put ''dGF0dXNlcyhhKSx0aGlzLl9pbm5lclN1YnNjcmliZShhKX1faW5uZXJTdWJzY3JpYmUoYSl7Y29uc3R7aGFzRXJyb3I6ZCxpc1N0b3BwZWQ6aCxvYnNlcnZlcnM6Zn09dGhpcztyZXR1cm4gZHx8aD9SdDoodGhpcy5jdXJyZW50T2JzZXJ2ZXJzPW51bGwsZi5wdXNoKGEpLG5ldyBxdCgoKT0+''@;'; put 'put ''e3RoaXMuY3VycmVudE9ic2VydmVycz1udWxsLGR0KGYsYSl9KSl9X2NoZWNrRmluYWxpemVkU3RhdHVzZXMoYSl7Y29uc3R7aGFzRXJyb3I6ZCx0aHJvd25FcnJvcjpoLGlzU3RvcHBlZDpmfT10aGlzO2Q/YS5lcnJvcihoKTpmJiZhLmNvbXBsZXRlKCl9YXNPYnNlcnZhYmxlKCl7Y29uc3Qg''@;'; put 'put ''YT1uZXcgWHQ7cmV0dXJuIGEuc291cmNlPXRoaXMsYX19cmV0dXJuIGMuY3JlYXRlPShsLGEpPT5uZXcgS2kobCxhKSxjfSkoKTtjbGFzcyBLaSBleHRlbmRzIFdue2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoKSx0aGlzLmRlc3RpbmF0aW9uPWwsdGhpcy5zb3VyY2U9YX1uZXh0KGwpe3ZhciBh''@;'; put 'put ''LGQ7bnVsbD09PShkPW51bGw9PT0oYT10aGlzLmRlc3RpbmF0aW9uKXx8dm9pZCAwPT09YT92b2lkIDA6YS5uZXh0KXx8dm9pZCAwPT09ZHx8ZC5jYWxsKGEsbCl9ZXJyb3IobCl7dmFyIGEsZDtudWxsPT09KGQ9bnVsbD09PShhPXRoaXMuZGVzdGluYXRpb24pfHx2b2lkIDA9PT1hP3ZvaWQg''@;'; put 'put ''MDphLmVycm9yKXx8dm9pZCAwPT09ZHx8ZC5jYWxsKGEsbCl9Y29tcGxldGUoKXt2YXIgbCxhO251bGw9PT0oYT1udWxsPT09KGw9dGhpcy5kZXN0aW5hdGlvbil8fHZvaWQgMD09PWw/dm9pZCAwOmwuY29tcGxldGUpfHx2b2lkIDA9PT1hfHxhLmNhbGwobCl9X3N1YnNjcmliZShsKXt2YXIg''@;'; put 'put ''YSxkO3JldHVybiBudWxsIT09KGQ9bnVsbD09PShhPXRoaXMuc291cmNlKXx8dm9pZCAwPT09YT92b2lkIDA6YS5zdWJzY3JpYmUobCkpJiZ2b2lkIDAhPT1kP2Q6UnR9fWNsYXNzIFFyIGV4dGVuZHMgV257Y29uc3RydWN0b3IobCl7c3VwZXIoKSx0aGlzLl92YWx1ZT1sfWdldCB2YWx1ZSgp''@;'; put 'put ''e3JldHVybiB0aGlzLmdldFZhbHVlKCl9X3N1YnNjcmliZShsKXtjb25zdCBhPXN1cGVyLl9zdWJzY3JpYmUobCk7cmV0dXJuIWEuY2xvc2VkJiZsLm5leHQodGhpcy5fdmFsdWUpLGF9Z2V0VmFsdWUoKXtjb25zdHtoYXNFcnJvcjpsLHRocm93bkVycm9yOmEsX3ZhbHVlOmR9PXRoaXM7aWYo''@;'; put 'put ''bCl0aHJvdyBhO3JldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksZH1uZXh0KGwpe3N1cGVyLm5leHQodGhpcy5fdmFsdWU9bCl9fWZ1bmN0aW9uIEpyKGMpe3JldHVybiAkZShjPy5saWZ0KX1mdW5jdGlvbiBCaShjKXtyZXR1cm4gbD0+e2lmKEpyKGwpKXJldHVybiBsLmxpZnQoZnVuY3Rp''@;'; put 'put ''b24oYSl7dHJ5e3JldHVybiBjKGEsdGhpcyl9Y2F0Y2goZCl7dGhpcy5lcnJvcihkKX19KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmFibGUgdG8gbGlmdCB1bmtub3duIE9ic2VydmFibGUgdHlwZSIpfX1mdW5jdGlvbiBWaShjLGwsYSxkLGgpe3JldHVybiBuZXcgSW8oYyxsLGEsZCxoKX1j''@;'; put 'put ''bGFzcyBJbyBleHRlbmRzIG5pe2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2KXtzdXBlcihsKSx0aGlzLm9uRmluYWxpemU9Zix0aGlzLnNob3VsZFVuc3Vic2NyaWJlPXYsdGhpcy5fbmV4dD1hP2Z1bmN0aW9uKE0pe3RyeXthKE0pfWNhdGNoKEQpe2wuZXJyb3IoRCl9fTpzdXBlci5fbmV4dCx0''@;'; put 'put ''aGlzLl9lcnJvcj1oP2Z1bmN0aW9uKE0pe3RyeXtoKE0pfWNhdGNoKEQpe2wuZXJyb3IoRCl9ZmluYWxseXt0aGlzLnVuc3Vic2NyaWJlKCl9fTpzdXBlci5fZXJyb3IsdGhpcy5fY29tcGxldGU9ZD9mdW5jdGlvbigpe3RyeXtkKCl9Y2F0Y2goTSl7bC5lcnJvcihNKX1maW5hbGx5e3RoaXMu''@;'; put 'put ''dW5zdWJzY3JpYmUoKX19OnN1cGVyLl9jb21wbGV0ZX11bnN1YnNjcmliZSgpe3ZhciBsO2lmKCF0aGlzLnNob3VsZFVuc3Vic2NyaWJlfHx0aGlzLnNob3VsZFVuc3Vic2NyaWJlKCkpe2NvbnN0e2Nsb3NlZDphfT10aGlzO3N1cGVyLnVuc3Vic2NyaWJlKCksIWEmJihudWxsPT09KGw9dGhp''@;'; put 'put ''cy5vbkZpbmFsaXplKXx8dm9pZCAwPT09bHx8bC5jYWxsKHRoaXMpKX19fWZ1bmN0aW9uIE9yKGMsbCl7cmV0dXJuIEJpKChhLGQpPT57bGV0IGg9MDthLnN1YnNjcmliZShWaShkLGY9PntkLm5leHQoYy5jYWxsKGwsZixoKyspKX0pKX0pfWNvbnN0IGdvPSJodHRwczovL2cuY28vbmcvc2Vj''@;'; put 'put ''dXJpdHkjeHNzIjtjbGFzcyBlciBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIoZnVuY3Rpb24gY28oYyxsKXtyZXR1cm5gTkcwJHtNYXRoLmFicyhjKX0ke2w/IjogIitsOiIifWB9KGwsYSkpLHRoaXMuY29kZT1sfX1mdW5jdGlvbiBOcyhjKXtyZXR1cm57dG9TdHJpbmc6''@;'; put 'put ''Y30udG9TdHJpbmcoKX1jb25zdCBmdT0iX19wYXJhbWV0ZXJzX18iO2Z1bmN0aW9uIHhvKGMsbCxhKXtyZXR1cm4gTnMoKCk9Pntjb25zdCBkPWZ1bmN0aW9uIG9yKGMpe3JldHVybiBmdW5jdGlvbiguLi5hKXtpZihjKXtjb25zdCBkPWMoLi4uYSk7Zm9yKGNvbnN0IGggaW4gZCl0aGlzW2hd''@;'; put 'put ''PWRbaF19fX0obCk7ZnVuY3Rpb24gaCguLi5mKXtpZih0aGlzIGluc3RhbmNlb2YgaClyZXR1cm4gZC5hcHBseSh0aGlzLGYpLHRoaXM7Y29uc3Qgdj1uZXcgaCguLi5mKTtyZXR1cm4gTS5hbm5vdGF0aW9uPXYsTTtmdW5jdGlvbiBNKEQsWixuZSl7Y29uc3QgY2U9RC5oYXNPd25Qcm9wZXJ0''@;'; put 'put ''eShmdSk/RFtmdV06T2JqZWN0LmRlZmluZVByb3BlcnR5KEQsZnUse3ZhbHVlOltdfSlbZnVdO2Zvcig7Y2UubGVuZ3RoPD1uZTspY2UucHVzaChudWxsKTtyZXR1cm4oY2VbbmVdPWNlW25lXXx8W10pLnB1c2godiksRH19cmV0dXJuIGEmJihoLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGEu''@;'; put 'put ''cHJvdG90eXBlKSksaC5wcm90b3R5cGUubmdNZXRhZGF0YU5hbWU9YyxoLmFubm90YXRpb25DbHM9aCxofSl9Y29uc3QgSHQ9Z2xvYmFsVGhpcztmdW5jdGlvbiBObyhjKXtmb3IobGV0IGwgaW4gYylpZihjW2xdPT09Tm8pcmV0dXJuIGw7dGhyb3cgRXJyb3IoIkNvdWxkIG5vdCBmaW5kIHJl''@;'; put 'put ''bmFtZWQgcHJvcGVydHkgb24gdGFyZ2V0IG9iamVjdC4iKX1mdW5jdGlvbiBSdShjLGwpe2Zvcihjb25zdCBhIGluIGwpbC5oYXNPd25Qcm9wZXJ0eShhKSYmIWMuaGFzT3duUHJvcGVydHkoYSkmJihjW2FdPWxbYV0pfWZ1bmN0aW9uIEZyKGMpe2lmKCJzdHJpbmciPT10eXBlb2YgYylyZXR1''@;'; put 'put ''cm4gYztpZihBcnJheS5pc0FycmF5KGMpKXJldHVybiJbIitjLm1hcChGcikuam9pbigiLCAiKSsiXSI7aWYobnVsbD09YylyZXR1cm4iIitjO2lmKGMub3ZlcnJpZGRlbk5hbWUpcmV0dXJuYCR7Yy5vdmVycmlkZGVuTmFtZX1gO2lmKGMubmFtZSlyZXR1cm5gJHtjLm5hbWV9YDtjb25zdCBs''@;'; put 'put ''PWMudG9TdHJpbmcoKTtpZihudWxsPT1sKXJldHVybiIiK2w7Y29uc3QgYT1sLmluZGV4T2YoIlxuIik7cmV0dXJuLTE9PT1hP2w6bC5zdWJzdHJpbmcoMCxhKX1mdW5jdGlvbiBhZChjLGwpe3JldHVybiBudWxsPT1jfHwiIj09PWM/bnVsbD09PWw/IiI6bDpudWxsPT1sfHwiIj09PWw/Yzpj''@;'; put 'put ''KyIgIitsfWNvbnN0IHRmPU5vKHtfX2ZvcndhcmRfcmVmX186Tm99KTtmdW5jdGlvbiBrcyhjKXtyZXR1cm4gYy5fX2ZvcndhcmRfcmVmX189a3MsYy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBGcih0aGlzKCkpfSxjfWZ1bmN0aW9uIEdpKGMpe3JldHVybiB2bChjKT9jKCk6Y31mdW5j''@;'; put 'put ''dGlvbiB2bChjKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYyYmYy5oYXNPd25Qcm9wZXJ0eSh0ZikmJmMuX19mb3J3YXJkX3JlZl9fPT09a3N9ZnVuY3Rpb24gYW4oYyl7cmV0dXJue3Rva2VuOmMudG9rZW4scHJvdmlkZWRJbjpjLnByb3ZpZGVkSW58fG51bGwsZmFjdG9yeTpjLmZhY3Rv''@;'; put 'put ''cnksdmFsdWU6dm9pZCAwfX1mdW5jdGlvbiBBcihjKXtyZXR1cm57cHJvdmlkZXJzOmMucHJvdmlkZXJzfHxbXSxpbXBvcnRzOmMuaW1wb3J0c3x8W119fWZ1bmN0aW9uIE9hKGMpe3JldHVybiBpbChjLENzKXx8aWwoYyxIYSl9ZnVuY3Rpb24gaWwoYyxsKXtyZXR1cm4gYy5oYXNPd25Qcm9w''@;'; put 'put ''ZXJ0eShsKT9jW2xdOm51bGx9ZnVuY3Rpb24gVnMoYyl7cmV0dXJuIGMmJihjLmhhc093blByb3BlcnR5KE5sKXx8Yy5oYXNPd25Qcm9wZXJ0eShrYSkpP2NbTmxdOm51bGx9Y29uc3QgQ3M9Tm8oe1x1MDI3NXByb3Y6Tm99KSxObD1Obyh7XHUwMjc1aW5qOk5vfSksSGE9Tm8oe25nSW5qZWN0''@;'; put 'put ''YWJsZURlZjpOb30pLGthPU5vKHtuZ0luamVjdG9yRGVmOk5vfSk7Y2xhc3MgU3R7Y29uc3RydWN0b3IobCxhKXt0aGlzLl9kZXNjPWwsdGhpcy5uZ01ldGFkYXRhTmFtZT0iSW5qZWN0aW9uVG9rZW4iLHRoaXMuXHUwMjc1cHJvdj12b2lkIDAsIm51bWJlciI9PXR5cGVvZiBhP3RoaXMuX19O''@;'; put 'put ''R19FTEVNRU5UX0lEX189YTp2b2lkIDAhPT1hJiYodGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjp0aGlzLHByb3ZpZGVkSW46YS5wcm92aWRlZElufHwicm9vdCIsZmFjdG9yeTphLmZhY3Rvcnl9KSl9Z2V0IG11bHRpKCl7cmV0dXJuIHRoaXN9dG9TdHJpbmcoKXtyZXR1cm5gSW5qZWN0aW9u''@;'; put 'put ''VG9rZW4gJHt0aGlzLl9kZXNjfWB9fWZ1bmN0aW9uIEJvKGMpe3JldHVybiBjJiYhIWMuXHUwMjc1cHJvdmlkZXJzfWNvbnN0IEdhPU5vKHtcdTAyNzVjbXA6Tm99KSwkbD1Obyh7XHUwMjc1ZGlyOk5vfSksdGE9Tm8oe1x1MDI3NXBpcGU6Tm99KSxfYT1Obyh7XHUwMjc1bW9kOk5vfSksemk9''@;'; put 'put ''Tm8oe1x1MDI3NWZhYzpOb30pLE9jPU5vKHtfX05HX0VMRU1FTlRfSURfXzpOb30pLFZsPU5vKHtfX05HX0VOVl9JRF9fOk5vfSk7ZnVuY3Rpb24gU28oYyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjP2M6bnVsbD09Yz8iIjpTdHJpbmcoYyl9ZnVuY3Rpb24gU3MoYyxsKXt0aHJvdyBuZXcg''@;'; put 'put ''ZXIoLTIwMSwhMSl9dmFyIG9vPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuRGVmYXVsdD0wXT0iRGVmYXVsdCIsY1tjLkhvc3Q9MV09Ikhvc3QiLGNbYy5TZWxmPTJdPSJTZWxmIixjW2MuU2tpcFNlbGY9NF09IlNraXBTZWxmIixjW2MuT3B0aW9uYWw9OF09Ik9wdGlvbmFsIixjfShvb3x8e30p''@;'; put 'put ''O2xldCBhYTtmdW5jdGlvbiB0NSgpe3JldHVybiBhYX1mdW5jdGlvbiBibChjKXtjb25zdCBsPWFhO3JldHVybiBhYT1jLGx9ZnVuY3Rpb24gSmQoYyxsLGEpe2NvbnN0IGQ9T2EoYyk7cmV0dXJuIGQmJiJyb290Ij09ZC5wcm92aWRlZEluP3ZvaWQgMD09PWQudmFsdWU/ZC52YWx1ZT1kLmZh''@;'; put 'put ''Y3RvcnkoKTpkLnZhbHVlOmEmb28uT3B0aW9uYWw/bnVsbDp2b2lkIDAhPT1sP2w6dm9pZCBTcygpfWNvbnN0IHEwPXt9LHB1PSJfX05HX0RJX0ZMQUdfXyIsUGM9Im5nVGVtcFRva2VuUGF0aCIsSXc9L1xuL2dtLG9sPSJfX3NvdXJjZSI7bGV0IEUzO2Z1bmN0aW9uIFFkKGMpe2NvbnN0IGw9''@;'; put 'put ''RTM7cmV0dXJuIEUzPWMsbH1mdW5jdGlvbiBEMShjLGw9b28uRGVmYXVsdCl7aWYodm9pZCAwPT09RTMpdGhyb3cgbmV3IGVyKC0yMDMsITEpO3JldHVybiBudWxsPT09RTM/SmQoYyx2b2lkIDAsbCk6RTMuZ2V0KGMsbCZvby5PcHRpb25hbD9udWxsOnZvaWQgMCxsKX1mdW5jdGlvbiBNcihj''@;'; put 'put ''LGw9b28uRGVmYXVsdCl7cmV0dXJuKHQ1KCl8fEQxKShHaShjKSxsKX1mdW5jdGlvbiBoaShjLGw9b28uRGVmYXVsdCl7cmV0dXJuIE1yKGMsbjUobCkpfWZ1bmN0aW9uIG41KGMpe3JldHVybiB0eXBlb2YgYz4idSJ8fCJudW1iZXIiPT10eXBlb2YgYz9jOihjLm9wdGlvbmFsJiY4KXwoYy5o''@;'; put 'put ''b3N0JiYxKXwoYy5zZWxmJiYyKXwoYy5za2lwU2VsZiYmNCl9ZnVuY3Rpb24gcjUoYyl7Y29uc3QgbD1bXTtmb3IobGV0IGE9MDthPGMubGVuZ3RoO2ErKyl7Y29uc3QgZD1HaShjW2FdKTtpZihBcnJheS5pc0FycmF5KGQpKXtpZigwPT09ZC5sZW5ndGgpdGhyb3cgbmV3IGVyKDkwMCwhMSk7''@;'; put 'put ''bGV0IGgsZj1vby5EZWZhdWx0O2ZvcihsZXQgdj0wO3Y8ZC5sZW5ndGg7disrKXtjb25zdCBNPWRbdl0sRD1sZihNKTsibnVtYmVyIj09dHlwZW9mIEQ/LTE9PT1EP2g9TS50b2tlbjpmfD1EOmg9TX1sLnB1c2goTXIoaCxmKSl9ZWxzZSBsLnB1c2goTXIoZCkpfXJldHVybiBsfWZ1bmN0aW9u''@;'; put 'put ''IGUwKGMsbCl7cmV0dXJuIGNbcHVdPWwsYy5wcm90b3R5cGVbcHVdPWwsY31mdW5jdGlvbiBsZihjKXtyZXR1cm4gY1twdV19Y29uc3QgYTU9ZTAoeG8oIkluamVjdCIsYz0+KHt0b2tlbjpjfSkpLC0xKSxJMT1lMCh4bygiT3B0aW9uYWwiKSw4KSxsZD1lMCh4bygiU2tpcFNlbGYiKSw0KTtm''@;'; put 'put ''dW5jdGlvbiBndShjLGwpe3JldHVybiBjLmhhc093blByb3BlcnR5KHppKT9jW3ppXTpudWxsfWZ1bmN0aW9uIFQzKGMsbCl7Yy5mb3JFYWNoKGE9PkFycmF5LmlzQXJyYXkoYSk/VDMoYSxsKTpsKGEpKX1mdW5jdGlvbiBMbChjLGwsYSl7bD49Yy5sZW5ndGg/Yy5wdXNoKGEpOmMuc3BsaWNl''@;'; put 'put ''KGwsMCxhKX1mdW5jdGlvbiBMdShjLGwpe3JldHVybiBsPj1jLmxlbmd0aC0xP2MucG9wKCk6Yy5zcGxpY2UobCwxKVswXX1mdW5jdGlvbiBfMChjLGwsYSl7bGV0IGQ9S2goYyxsKTtyZXR1cm4gZD49MD9jWzF8ZF09YTooZD1+ZCxmdW5jdGlvbiBvdihjLGwsYSxkKXtsZXQgaD1jLmxlbmd0''@;'; put 'put ''aDtpZihoPT1sKWMucHVzaChhLGQpO2Vsc2UgaWYoMT09PWgpYy5wdXNoKGQsY1swXSksY1swXT1hO2Vsc2V7Zm9yKGgtLSxjLnB1c2goY1toLTFdLGNbaF0pO2g+bDspY1toXT1jW2gtMl0saC0tO2NbbF09YSxjW2wrMV09ZH19KGMsZCxsLGEpKSxkfWZ1bmN0aW9uIEU2KGMsbCl7Y29uc3Qg''@;'; put 'put ''YT1LaChjLGwpO2lmKGE+PTApcmV0dXJuIGNbMXxhXX1mdW5jdGlvbiBLaChjLGwpe3JldHVybiBmdW5jdGlvbiBSMShjLGwsYSl7bGV0IGQ9MCxoPWMubGVuZ3RoPj5hO2Zvcig7aCE9PWQ7KXtjb25zdCBmPWQrKGgtZD4+MSksdj1jW2Y8PGFdO2lmKGw9PT12KXJldHVybiBmPDxhO3Y+bD9o''@;'; put 'put ''PWY6ZD1mKzF9cmV0dXJufihoPDxhKX0oYyxsLDEpfWNvbnN0IEkwPXt9LGVzPVtdLHFoPW5ldyBTdCgiIiksQTM9bmV3IFN0KCIiLC0xKSxUNj1uZXcgU3QoIiIpO2NsYXNzIHM1e2dldChsLGE9cTApe2lmKGE9PT1xMCl7Y29uc3QgZD1uZXcgRXJyb3IoYE51bGxJbmplY3RvckVycm9yOiBO''@;'; put 'put ''byBwcm92aWRlciBmb3IgJHtGcihsKX0hYCk7dGhyb3cgZC5uYW1lPSJOdWxsSW5qZWN0b3JFcnJvciIsZH1yZXR1cm4gYX19dmFyIGszPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuT25QdXNoPTBdPSJPblB1c2giLGNbYy5EZWZhdWx0PTFdPSJEZWZhdWx0IixjfShrM3x8e30pLCRzPWZ1bmN0''@;'; put 'put ''aW9uKGMpe3JldHVybiBjW2MuRW11bGF0ZWQ9MF09IkVtdWxhdGVkIixjW2MuTm9uZT0yXT0iTm9uZSIsY1tjLlNoYWRvd0RvbT0zXT0iU2hhZG93RG9tIixjfSgkc3x8e30pLFpuPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTm9uZT0wXT0iTm9uZSIsY1tjLlNpZ25hbEJhc2VkPTFdPSJTaWdu''@;'; put 'put ''YWxCYXNlZCIsY1tjLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtPTJdPSJIYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSIsY30oWm58fHt9KTtmdW5jdGlvbiBQdyhjLGwsYSl7bGV0IGQ9Yy5sZW5ndGg7Zm9yKDs7KXtjb25zdCBoPWMuaW5kZXhPZihsLGEpO2lmKC0xPT09aClyZXR1cm4g''@;'; put 'put ''aDtpZigwPT09aHx8Yy5jaGFyQ29kZUF0KGgtMSk8PTMyKXtjb25zdCBmPWwubGVuZ3RoO2lmKGgrZj09PWR8fGMuY2hhckNvZGVBdChoK2YpPD0zMilyZXR1cm4gaH1hPWgrMX19ZnVuY3Rpb24gZjQoYyxsLGEpe2xldCBkPTA7Zm9yKDtkPGEubGVuZ3RoOyl7Y29uc3QgaD1hW2RdO2lmKCJu''@;'; put 'put ''dW1iZXIiPT10eXBlb2YgaCl7aWYoMCE9PWgpYnJlYWs7ZCsrO2NvbnN0IGY9YVtkKytdLHY9YVtkKytdLE09YVtkKytdO2Muc2V0QXR0cmlidXRlKGwsdixNLGYpfWVsc2V7Y29uc3QgZj1oLHY9YVsrK2RdO2M1KGYpP2Muc2V0UHJvcGVydHkobCxmLHYpOmMuc2V0QXR0cmlidXRlKGwsZix2''@;'; put 'put ''KSxkKyt9fXJldHVybiBkfWZ1bmN0aW9uIGw1KGMpe3JldHVybiAzPT09Y3x8ND09PWN8fDY9PT1jfWZ1bmN0aW9uIGM1KGMpe3JldHVybiA2ND09PWMuY2hhckNvZGVBdCgwKX1mdW5jdGlvbiBkZihjLGwpe2lmKG51bGwhPT1sJiYwIT09bC5sZW5ndGgpaWYobnVsbD09PWN8fDA9PT1jLmxl''@;'; put 'put ''bmd0aCljPWwuc2xpY2UoKTtlbHNle2xldCBhPS0xO2ZvcihsZXQgZD0wO2Q8bC5sZW5ndGg7ZCsrKXtjb25zdCBoPWxbZF07Im51bWJlciI9PXR5cGVvZiBoP2E9aDowPT09YXx8QTYoYyxhLGgsbnVsbCwtMT09PWF8fDI9PT1hP2xbKytkXTpudWxsKX19cmV0dXJuIGN9ZnVuY3Rpb24gQTYo''@;'; put 'put ''YyxsLGEsZCxoKXtsZXQgZj0wLHY9Yy5sZW5ndGg7aWYoLTE9PT1sKXY9LTE7ZWxzZSBmb3IoO2Y8Yy5sZW5ndGg7KXtjb25zdCBNPWNbZisrXTtpZigibnVtYmVyIj09dHlwZW9mIE0pe2lmKE09PT1sKXt2PS0xO2JyZWFrfWlmKE0+bCl7dj1mLTE7YnJlYWt9fX1mb3IoO2Y8Yy5sZW5ndGg7''@;'; put 'put ''KXtjb25zdCBNPWNbZl07aWYoIm51bWJlciI9PXR5cGVvZiBNKWJyZWFrO2lmKE09PT1hKXtpZihudWxsPT09ZClyZXR1cm4gdm9pZChudWxsIT09aCYmKGNbZisxXT1oKSk7aWYoZD09PWNbZisxXSlyZXR1cm4gdm9pZChjW2YrMl09aCl9ZisrLG51bGwhPT1kJiZmKyssbnVsbCE9PWgmJmYr''@;'; put 'put ''K30tMSE9PXYmJihjLnNwbGljZSh2LDAsbCksZj12KzEpLGMuc3BsaWNlKGYrKywwLGEpLG51bGwhPT1kJiZjLnNwbGljZShmKyssMCxkKSxudWxsIT09aCYmYy5zcGxpY2UoZisrLDAsaCl9Y29uc3QgYXY9Im5nLXRlbXBsYXRlIjtmdW5jdGlvbiBrNihjLGwsYSxkKXtsZXQgaD0wO2lmKGQp''@;'; put 'put ''e2Zvcig7aDxsLmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZiBsW2hdO2grPTIpaWYoImNsYXNzIj09PWxbaF0mJi0xIT09UHcobFtoKzFdLnRvTG93ZXJDYXNlKCksYSwwKSlyZXR1cm4hMH1lbHNlIGlmKHA0KGMpKXJldHVybiExO2lmKGg9bC5pbmRleE9mKDEsaCksaD4tMSl7bGV0IGY7Zm9y''@;'; put 'put ''KDsrK2g8bC5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2YoZj1sW2hdKTspaWYoZi50b0xvd2VyQ2FzZSgpPT09YSlyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBwNChjKXtyZXR1cm4gND09PWMudHlwZSYmYy52YWx1ZSE9PWF2fWZ1bmN0aW9uIG4wKGMsbCxhKXtyZXR1cm4gbD09PSg0IT09''@;'; put 'put ''Yy50eXBlfHxhP2MudmFsdWU6YXYpfWZ1bmN0aW9uIEZ3KGMsbCxhKXtsZXQgZD00O2NvbnN0IGg9Yy5hdHRycyxmPW51bGwhPT1oP2Z1bmN0aW9uIGx2KGMpe2ZvcihsZXQgbD0wO2w8Yy5sZW5ndGg7bCsrKWlmKGw1KGNbbF0pKXJldHVybiBsO3JldHVybiBjLmxlbmd0aH0oaCk6MDtsZXQg''@;'; put 'put ''dj0hMTtmb3IobGV0IE09MDtNPGwubGVuZ3RoO00rKyl7Y29uc3QgRD1sW01dO2lmKCJudW1iZXIiIT10eXBlb2YgRCl7aWYoIXYpaWYoNCZkKXtpZihkPTJ8MSZkLCIiIT09RCYmIW4wKGMsRCxhKXx8IiI9PT1EJiYxPT09bC5sZW5ndGgpe2lmKFNjKGQpKXJldHVybiExO3Y9ITB9fWVsc2Ug''@;'; put 'put ''aWYoOCZkKXtpZihudWxsPT09aHx8IWs2KGMsaCxELGEpKXtpZihTYyhkKSlyZXR1cm4hMTt2PSEwfX1lbHNle2NvbnN0IFo9bFsrK01dLG5lPUQzKEQsaCxwNChjKSxhKTtpZigtMT09PW5lKXtpZihTYyhkKSlyZXR1cm4hMTt2PSEwO2NvbnRpbnVlfWlmKCIiIT09Wil7bGV0IGNlO2lmKGNl''@;'; put 'put ''PW5lPmY/IiI6aFtuZSsxXS50b0xvd2VyQ2FzZSgpLDImZCYmWiE9PWNlKXtpZihTYyhkKSlyZXR1cm4hMTt2PSEwfX19fWVsc2V7aWYoIXYmJiFTYyhkKSYmIVNjKEQpKXJldHVybiExO2lmKHYmJlNjKEQpKWNvbnRpbnVlO3Y9ITEsZD1EfDEmZH19cmV0dXJuIFNjKGQpfHx2fWZ1bmN0aW9u''@;'; put 'put ''IFNjKGMpe3JldHVybiEoMSZjKX1mdW5jdGlvbiBEMyhjLGwsYSxkKXtpZihudWxsPT09bClyZXR1cm4tMTtsZXQgaD0wO2lmKGR8fCFhKXtsZXQgZj0hMTtmb3IoO2g8bC5sZW5ndGg7KXtjb25zdCB2PWxbaF07aWYodj09PWMpcmV0dXJuIGg7aWYoMz09PXZ8fDY9PT12KWY9ITA7ZWxzZXtp''@;'; put 'put ''ZigxPT09dnx8Mj09PXYpe2xldCBNPWxbKytoXTtmb3IoOyJzdHJpbmciPT10eXBlb2YgTTspTT1sWysraF07Y29udGludWV9aWYoND09PXYpYnJlYWs7aWYoMD09PXYpe2grPTQ7Y29udGludWV9fWgrPWY/MToyfXJldHVybi0xfXJldHVybiBmdW5jdGlvbiBjdihjLGwpe2xldCBhPWMuaW5k''@;'; put 'put ''ZXhPZig0KTtpZihhPi0xKWZvcihhKys7YTxjLmxlbmd0aDspe2NvbnN0IGQ9Y1thXTtpZigibnVtYmVyIj09dHlwZW9mIGQpcmV0dXJuLTE7aWYoZD09PWwpcmV0dXJuIGE7YSsrfXJldHVybi0xfShsLGMpfWZ1bmN0aW9uIGc0KGMsbCxhPSExKXtmb3IobGV0IGQ9MDtkPGwubGVuZ3RoO2Qr''@;'; put 'put ''KylpZihGdyhjLGxbZF0sYSkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gSHcoYyxsKXtlOmZvcihsZXQgYT0wO2E8bC5sZW5ndGg7YSsrKXtjb25zdCBkPWxbYV07aWYoYy5sZW5ndGg9PT1kLmxlbmd0aCl7Zm9yKGxldCBoPTA7aDxjLmxlbmd0aDtoKyspaWYoY1toXSE9PWRbaF0pY29u''@;'; put 'put ''dGludWUgZTtyZXR1cm4hMH19cmV0dXJuITF9ZnVuY3Rpb24gdXYoYyxsKXtyZXR1cm4gYz8iOm5vdCgiK2wudHJpbSgpKyIpIjpsfWZ1bmN0aW9uIE53KGMpe2xldCBsPWNbMF0sYT0xLGQ9MixoPSIiLGY9ITE7Zm9yKDthPGMubGVuZ3RoOyl7bGV0IHY9Y1thXTtpZigic3RyaW5nIj09dHlw''@;'; put 'put ''ZW9mIHYpaWYoMiZkKXtjb25zdCBNPWNbKythXTtoKz0iWyIrdisoTS5sZW5ndGg+MD8nPSInK00rJyInOiIiKSsiXSJ9ZWxzZSA4JmQ/aCs9Ii4iK3Y6NCZkJiYoaCs9IiAiK3YpO2Vsc2UiIiE9PWgmJiFTYyh2KSYmKGwrPXV2KGYsaCksaD0iIiksZD12LGY9Znx8IVNjKGQpO2ErK31yZXR1''@;'; put 'put ''cm4iIiE9PWgmJihsKz11dihmLGgpKSxsfWZ1bmN0aW9uIE5yKGMpe3JldHVybiBOcygoKT0+e2NvbnN0IGw9RDYoYyksYT17Li4ubCxkZWNsczpjLmRlY2xzLHZhcnM6Yy52YXJzLHRlbXBsYXRlOmMudGVtcGxhdGUsY29uc3RzOmMuY29uc3RzfHxudWxsLG5nQ29udGVudFNlbGVjdG9yczpj''@;'; put 'put ''Lm5nQ29udGVudFNlbGVjdG9ycyxvblB1c2g6Yy5jaGFuZ2VEZXRlY3Rpb249PT1rMy5PblB1c2gsZGlyZWN0aXZlRGVmczpudWxsLHBpcGVEZWZzOm51bGwsZGVwZW5kZW5jaWVzOmwuc3RhbmRhbG9uZSYmYy5kZXBlbmRlbmNpZXN8fG51bGwsZ2V0U3RhbmRhbG9uZUluamVjdG9yOm51bGws''@;'; put 'put ''c2lnbmFsczpjLnNpZ25hbHM/PyExLGRhdGE6Yy5kYXRhfHx7fSxlbmNhcHN1bGF0aW9uOmMuZW5jYXBzdWxhdGlvbnx8JHMuRW11bGF0ZWQsc3R5bGVzOmMuc3R5bGVzfHxlcyxfOm51bGwsc2NoZW1hczpjLnNjaGVtYXN8fG51bGwsdFZpZXc6bnVsbCxpZDoiIn07UjAoYSk7Y29uc3QgZD1j''@;'; put 'put ''LmRlcGVuZGVuY2llcztyZXR1cm4gYS5kaXJlY3RpdmVEZWZzPWQ1KGQsITEpLGEucGlwZURlZnM9ZDUoZCwhMCksYS5pZD1mdW5jdGlvbiBCdyhjKXtsZXQgbD0wO2NvbnN0IGE9W2Muc2VsZWN0b3JzLGMubmdDb250ZW50U2VsZWN0b3JzLGMuaG9zdFZhcnMsYy5ob3N0QXR0cnMsYy5jb25z''@;'; put 'put ''dHMsYy52YXJzLGMuZGVjbHMsYy5lbmNhcHN1bGF0aW9uLGMuc3RhbmRhbG9uZSxjLnNpZ25hbHMsYy5leHBvcnRBcyxKU09OLnN0cmluZ2lmeShjLmlucHV0cyksSlNPTi5zdHJpbmdpZnkoYy5vdXRwdXRzKSxPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjLnR5cGUucHJvdG90eXBlKSwh''@;'; put 'put ''IWMuY29udGVudFF1ZXJpZXMsISFjLnZpZXdRdWVyeV0uam9pbigifCIpO2Zvcihjb25zdCBoIG9mIGEpbD1NYXRoLmltdWwoMzEsbCkraC5jaGFyQ29kZUF0KDApfDA7cmV0dXJuIGwrPTIxNDc0ODM2NDgsImMiK2x9KGEpLGF9KX1mdW5jdGlvbiBoZihjKXtyZXR1cm4gVmEoYyl8fE1jKGMp''@;'; put 'put ''fWZ1bmN0aW9uIHU1KGMpe3JldHVybiBudWxsIT09Y31mdW5jdGlvbiBraShjKXtyZXR1cm4gTnMoKCk9Pih7dHlwZTpjLnR5cGUsYm9vdHN0cmFwOmMuYm9vdHN0cmFwfHxlcyxkZWNsYXJhdGlvbnM6Yy5kZWNsYXJhdGlvbnN8fGVzLGltcG9ydHM6Yy5pbXBvcnRzfHxlcyxleHBvcnRzOmMu''@;'; put 'put ''ZXhwb3J0c3x8ZXMsdHJhbnNpdGl2ZUNvbXBpbGVTY29wZXM6bnVsbCxzY2hlbWFzOmMuc2NoZW1hc3x8bnVsbCxpZDpjLmlkfHxudWxsfSkpfWZ1bmN0aW9uIG00KGMsbCl7aWYobnVsbD09YylyZXR1cm4gSTA7Y29uc3QgYT17fTtmb3IoY29uc3QgZCBpbiBjKWlmKGMuaGFzT3duUHJvcGVy''@;'; put 'put ''dHkoZCkpe2NvbnN0IGg9Y1tkXTtsZXQgZix2LE09Wm4uTm9uZTtBcnJheS5pc0FycmF5KGgpPyhNPWhbMF0sZj1oWzFdLHY9aFsyXT8/Zik6KGY9aCx2PWgpLGw/KGFbZl09TSE9PVpuLk5vbmU/W2QsTV06ZCxsW2ZdPXYpOmFbZl09ZH1yZXR1cm4gYX1mdW5jdGlvbiBFcihjKXtyZXR1cm4g''@;'; put 'put ''TnMoKCk9Pntjb25zdCBsPUQ2KGMpO3JldHVybiBSMChsKSxsfSl9ZnVuY3Rpb24gYWwoYyl7cmV0dXJue3R5cGU6Yy50eXBlLG5hbWU6Yy5uYW1lLGZhY3Rvcnk6bnVsbCxwdXJlOiExIT09Yy5wdXJlLHN0YW5kYWxvbmU6ITA9PT1jLnN0YW5kYWxvbmUsb25EZXN0cm95OmMudHlwZS5wcm90''@;'; put 'put ''b3R5cGUubmdPbkRlc3Ryb3l8fG51bGx9fWZ1bmN0aW9uIFZhKGMpe3JldHVybiBjW0dhXXx8bnVsbH1mdW5jdGlvbiBNYyhjKXtyZXR1cm4gY1skbF18fG51bGx9ZnVuY3Rpb24gUWMoYyl7cmV0dXJuIGNbdGFdfHxudWxsfWZ1bmN0aW9uIE91KGMsbCl7Y29uc3QgYT1jW19hXXx8bnVsbDtp''@;'; put 'put ''ZighYSYmITA9PT1sKXRocm93IG5ldyBFcnJvcihgVHlwZSAke0ZyKGMpfSBkb2VzIG5vdCBoYXZlICdcdTAyNzVtb2QnIHByb3BlcnR5LmApO3JldHVybiBhfWZ1bmN0aW9uIEQ2KGMpe2NvbnN0IGw9e307cmV0dXJue3R5cGU6Yy50eXBlLHByb3ZpZGVyc1Jlc29sdmVyOm51bGwsZmFjdG9y''@;'; put 'put ''eTpudWxsLGhvc3RCaW5kaW5nczpjLmhvc3RCaW5kaW5nc3x8bnVsbCxob3N0VmFyczpjLmhvc3RWYXJzfHwwLGhvc3RBdHRyczpjLmhvc3RBdHRyc3x8bnVsbCxjb250ZW50UXVlcmllczpjLmNvbnRlbnRRdWVyaWVzfHxudWxsLGRlY2xhcmVkSW5wdXRzOmwsaW5wdXRUcmFuc2Zvcm1zOm51''@;'; put 'put ''bGwsaW5wdXRDb25maWc6Yy5pbnB1dHN8fEkwLGV4cG9ydEFzOmMuZXhwb3J0QXN8fG51bGwsc3RhbmRhbG9uZTohMD09PWMuc3RhbmRhbG9uZSxzaWduYWxzOiEwPT09Yy5zaWduYWxzLHNlbGVjdG9yczpjLnNlbGVjdG9yc3x8ZXMsdmlld1F1ZXJ5OmMudmlld1F1ZXJ5fHxudWxsLGZlYXR1''@;'; put 'put ''cmVzOmMuZmVhdHVyZXN8fG51bGwsc2V0SW5wdXQ6bnVsbCxmaW5kSG9zdERpcmVjdGl2ZURlZnM6bnVsbCxob3N0RGlyZWN0aXZlczpudWxsLGlucHV0czptNChjLmlucHV0cyxsKSxvdXRwdXRzOm00KGMub3V0cHV0cyksZGVidWdJbmZvOm51bGx9fWZ1bmN0aW9uIFIwKGMpe2MuZmVhdHVy''@;'; put 'put ''ZXM/LmZvckVhY2gobD0+bChjKSl9ZnVuY3Rpb24gZDUoYyxsKXtpZighYylyZXR1cm4gbnVsbDtjb25zdCBhPWw/UWM6aGY7cmV0dXJuKCk9PigiZnVuY3Rpb24iPT10eXBlb2YgYz9jKCk6YykubWFwKGQ9PmEoZCkpLmZpbHRlcih1NSl9ZnVuY3Rpb24gancoLi4uYyl7cmV0dXJue1x1MDI3''@;'; put 'put ''NXByb3ZpZGVyczplaCgwLGMpLFx1MDI3NWZyb21OZ01vZHVsZTohMH19ZnVuY3Rpb24gZWgoYywuLi5sKXtjb25zdCBhPVtdLGQ9bmV3IFNldDtsZXQgaDtjb25zdCBmPXY9PnthLnB1c2godil9O3JldHVybiBUMyhsLHY9Pntjb25zdCBNPXY7djQoTSxmLFtdLGQpJiYoaHx8PVtdLGgucHVz''@;'; put 'put ''aChNKSl9KSx2b2lkIDAhPT1oJiZodihoLGYpLGF9ZnVuY3Rpb24gaHYoYyxsKXtmb3IobGV0IGE9MDthPGMubGVuZ3RoO2ErKyl7Y29uc3R7bmdNb2R1bGU6ZCxwcm92aWRlcnM6aH09Y1thXTtJNihoLGY9PntsKGYsZCl9KX19ZnVuY3Rpb24gdjQoYyxsLGEsZCl7aWYoIShjPUdpKGMpKSly''@;'; put 'put ''ZXR1cm4hMTtsZXQgaD1udWxsLGY9VnMoYyk7Y29uc3Qgdj0hZiYmVmEoYyk7aWYoZnx8dil7aWYodiYmIXYuc3RhbmRhbG9uZSlyZXR1cm4hMTtoPWN9ZWxzZXtjb25zdCBEPWMubmdNb2R1bGU7aWYoZj1WcyhEKSwhZilyZXR1cm4hMTtoPUR9Y29uc3QgTT1kLmhhcyhoKTtpZih2KXtpZihN''@;'; put 'put ''KXJldHVybiExO2lmKGQuYWRkKGgpLHYuZGVwZW5kZW5jaWVzKXtjb25zdCBEPSJmdW5jdGlvbiI9PXR5cGVvZiB2LmRlcGVuZGVuY2llcz92LmRlcGVuZGVuY2llcygpOnYuZGVwZW5kZW5jaWVzO2Zvcihjb25zdCBaIG9mIEQpdjQoWixsLGEsZCl9fWVsc2V7aWYoIWYpcmV0dXJuITE7e2lm''@;'; put 'put ''KG51bGwhPWYuaW1wb3J0cyYmIU0pe2xldCBaO2QuYWRkKGgpO3RyeXtUMyhmLmltcG9ydHMsbmU9Pnt2NChuZSxsLGEsZCkmJihafHw9W10sWi5wdXNoKG5lKSl9KX1maW5hbGx5e312b2lkIDAhPT1aJiZodihaLGwpfWlmKCFNKXtjb25zdCBaPWd1KGgpfHwoKCk9Pm5ldyBoKTtsKHtwcm92''@;'; put 'put ''aWRlOmgsdXNlRmFjdG9yeTpaLGRlcHM6ZXN9LGgpLGwoe3Byb3ZpZGU6VDYsdXNlVmFsdWU6aCxtdWx0aTohMH0saCksbCh7cHJvdmlkZTpxaCx1c2VWYWx1ZTooKT0+TXIoaCksbXVsdGk6ITB9LGgpfWNvbnN0IEQ9Zi5wcm92aWRlcnM7aWYobnVsbCE9RCYmIU0pe2NvbnN0IFo9YztJNihE''@;'; put 'put ''LG5lPT57bChuZSxaKX0pfX19cmV0dXJuIGghPT1jJiZ2b2lkIDAhPT1jLnByb3ZpZGVyc31mdW5jdGlvbiBJNihjLGwpe2ZvcihsZXQgYSBvZiBjKUJvKGEpJiYoYT1hLlx1MDI3NXByb3ZpZGVycyksQXJyYXkuaXNBcnJheShhKT9JNihhLGwpOmwoYSl9Y29uc3Qgenc9Tm8oe3Byb3ZpZGU6''@;'; put 'put ''U3RyaW5nLHVzZVZhbHVlOk5vfSk7ZnVuY3Rpb24gUjYoYyl7cmV0dXJuIG51bGwhPT1jJiYib2JqZWN0Ij09dHlwZW9mIGMmJnp3IGluIGN9ZnVuY3Rpb24gcGYoYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN9Y29uc3QgTzY9bmV3IFN0KCIiKSxJMz17fSxVdz17fTtsZXQgUDY7ZnVu''@;'; put 'put ''Y3Rpb24gUjMoKXtyZXR1cm4gdm9pZCAwPT09UDYmJihQNj1uZXcgczUpLFA2fWNsYXNzIGNje31jbGFzcyBjZCBleHRlbmRzIGNje2dldCBkZXN0cm95ZWQoKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkfWNvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKCksdGhpcy5wYXJlbnQ9YSx0aGlzLnNv''@;'; put 'put ''dXJjZT1kLHRoaXMuc2NvcGVzPWgsdGhpcy5yZWNvcmRzPW5ldyBNYXAsdGhpcy5fbmdPbkRlc3Ryb3lIb29rcz1uZXcgU2V0LHRoaXMuX29uRGVzdHJveUhvb2tzPVtdLHRoaXMuX2Rlc3Ryb3llZD0hMSxmNShsLHY9PnRoaXMucHJvY2Vzc1Byb3ZpZGVyKHYpKSx0aGlzLnJlY29yZHMuc2V0''@;'; put 'put ''KEEzLEwzKHZvaWQgMCx0aGlzKSksaC5oYXMoImVudmlyb25tZW50IikmJnRoaXMucmVjb3Jkcy5zZXQoY2MsTDModm9pZCAwLHRoaXMpKTtjb25zdCBmPXRoaXMucmVjb3Jkcy5nZXQoTzYpO251bGwhPWYmJiJzdHJpbmciPT10eXBlb2YgZi52YWx1ZSYmdGhpcy5zY29wZXMuYWRkKGYudmFs''@;'; put 'put ''dWUpLHRoaXMuaW5qZWN0b3JEZWZUeXBlcz1uZXcgU2V0KHRoaXMuZ2V0KFQ2LGVzLG9vLlNlbGYpKX1kZXN0cm95KCl7dGhpcy5hc3NlcnROb3REZXN0cm95ZWQoKSx0aGlzLl9kZXN0cm95ZWQ9ITA7Y29uc3QgbD1fZShudWxsKTt0cnl7Zm9yKGNvbnN0IGQgb2YgdGhpcy5fbmdPbkRlc3Ry''@;'; put 'put ''b3lIb29rcylkLm5nT25EZXN0cm95KCk7Y29uc3QgYT10aGlzLl9vbkRlc3Ryb3lIb29rczt0aGlzLl9vbkRlc3Ryb3lIb29rcz1bXTtmb3IoY29uc3QgZCBvZiBhKWQoKX1maW5hbGx5e3RoaXMucmVjb3Jkcy5jbGVhcigpLHRoaXMuX25nT25EZXN0cm95SG9va3MuY2xlYXIoKSx0aGlzLmlu''@;'; put 'put ''amVjdG9yRGVmVHlwZXMuY2xlYXIoKSxfZShsKX19b25EZXN0cm95KGwpe3JldHVybiB0aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpLHRoaXMuX29uRGVzdHJveUhvb2tzLnB1c2gobCksKCk9PnRoaXMucmVtb3ZlT25EZXN0cm95KGwpfXJ1bkluQ29udGV4dChsKXt0aGlzLmFzc2VydE5vdERl''@;'; put 'put ''c3Ryb3llZCgpO2NvbnN0IGE9UWQodGhpcyksZD1ibCh2b2lkIDApO3RyeXtyZXR1cm4gbCgpfWZpbmFsbHl7UWQoYSksYmwoZCl9fWdldChsLGE9cTAsZD1vby5EZWZhdWx0KXtpZih0aGlzLmFzc2VydE5vdERlc3Ryb3llZCgpLGwuaGFzT3duUHJvcGVydHkoVmwpKXJldHVybiBsW1ZsXSh0''@;'; put 'put ''aGlzKTtkPW41KGQpO2NvbnN0IGY9UWQodGhpcyksdj1ibCh2b2lkIDApO3RyeXtpZighKGQmb28uU2tpcFNlbGYpKXtsZXQgRD10aGlzLnJlY29yZHMuZ2V0KGwpO2lmKHZvaWQgMD09PUQpe2NvbnN0IFo9ZnVuY3Rpb24gV3coYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN8fCJvYmpl''@;'; put 'put ''Y3QiPT10eXBlb2YgYyYmYyBpbnN0YW5jZW9mIFN0fShsKSYmT2EobCk7RD1aJiZ0aGlzLmluamVjdGFibGVEZWZJblNjb3BlKFopP0wzKGg1KGwpLEkzKTpudWxsLHRoaXMucmVjb3Jkcy5zZXQobCxEKX1pZihudWxsIT1EKXJldHVybiB0aGlzLmh5ZHJhdGUobCxEKX1yZXR1cm4oZCZvby5T''@;'; put 'put ''ZWxmP1IzKCk6dGhpcy5wYXJlbnQpLmdldChsLGE9ZCZvby5PcHRpb25hbCYmYT09PXEwP251bGw6YSl9Y2F0Y2goTSl7aWYoIk51bGxJbmplY3RvckVycm9yIj09PU0ubmFtZSl7aWYoKE1bUGNdPU1bUGNdfHxbXSkudW5zaGlmdChGcihsKSksZil0aHJvdyBNO3JldHVybiBmdW5jdGlvbiBv''@;'; put 'put ''NShjLGwsYSxkKXtjb25zdCBoPWNbUGNdO3Rocm93IGxbb2xdJiZoLnVuc2hpZnQobFtvbF0pLGMubWVzc2FnZT1mdW5jdGlvbiBoNChjLGwsYSxkPW51bGwpe2M9YyYmIlxuIj09PWMuY2hhckF0KDApJiYiXHUwMjc1Ij09Yy5jaGFyQXQoMSk/Yy5zbGljZSgyKTpjO2xldCBoPUZyKGwpO2lm''@;'; put 'put ''KEFycmF5LmlzQXJyYXkobCkpaD1sLm1hcChGcikuam9pbigiIC0+ICIpO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBsKXtsZXQgZj1bXTtmb3IobGV0IHYgaW4gbClpZihsLmhhc093blByb3BlcnR5KHYpKXtsZXQgTT1sW3ZdO2YucHVzaCh2KyI6IisoInN0cmluZyI9PXR5cGVvZiBNP0pT''@;'; put 'put ''T04uc3RyaW5naWZ5KE0pOkZyKE0pKSl9aD1geyR7Zi5qb2luKCIsICIpfX1gfXJldHVybmAke2F9JHtkPyIoIitkKyIpIjoiIn1bJHtofV06ICR7Yy5yZXBsYWNlKEl3LCJcbiAgIil9YH0oIlxuIitjLm1lc3NhZ2UsaCxhLGQpLGMubmdUb2tlblBhdGg9aCxjW1BjXT1udWxsLGN9KE0sbCwi''@;'; put 'put ''UjNJbmplY3RvckVycm9yIix0aGlzLnNvdXJjZSl9dGhyb3cgTX1maW5hbGx5e2JsKHYpLFFkKGYpfX1yZXNvbHZlSW5qZWN0b3JJbml0aWFsaXplcnMoKXtjb25zdCBsPV9lKG51bGwpLGE9UWQodGhpcyksZD1ibCh2b2lkIDApO3RyeXtjb25zdCBmPXRoaXMuZ2V0KHFoLGVzLG9vLlNlbGYp''@;'; put 'put ''O2Zvcihjb25zdCB2IG9mIGYpdigpfWZpbmFsbHl7UWQoYSksYmwoZCksX2UobCl9fXRvU3RyaW5nKCl7Y29uc3QgbD1bXSxhPXRoaXMucmVjb3Jkcztmb3IoY29uc3QgZCBvZiBhLmtleXMoKSlsLnB1c2goRnIoZCkpO3JldHVybmBSM0luamVjdG9yWyR7bC5qb2luKCIsICIpfV1gfWFzc2Vy''@;'; put 'put ''dE5vdERlc3Ryb3llZCgpe2lmKHRoaXMuX2Rlc3Ryb3llZCl0aHJvdyBuZXcgZXIoMjA1LCExKX1wcm9jZXNzUHJvdmlkZXIobCl7bGV0IGE9cGYobD1HaShsKSk/bDpHaShsJiZsLnByb3ZpZGUpO2NvbnN0IGQ9ZnVuY3Rpb24gRjYoYyl7cmV0dXJuIFI2KGMpP0wzKHZvaWQgMCxjLnVzZVZh''@;'; put 'put ''bHVlKTpMMyhtdihjKSxJMyl9KGwpO2lmKCFwZihsKSYmITA9PT1sLm11bHRpKXtsZXQgaD10aGlzLnJlY29yZHMuZ2V0KGEpO2h8fChoPUwzKHZvaWQgMCxJMywhMCksaC5mYWN0b3J5PSgpPT5yNShoLm11bHRpKSx0aGlzLnJlY29yZHMuc2V0KGEsaCkpLGE9bCxoLm11bHRpLnB1c2gobCl9''@;'; put 'put ''dGhpcy5yZWNvcmRzLnNldChhLGQpfWh5ZHJhdGUobCxhKXtjb25zdCBkPV9lKG51bGwpO3RyeXtyZXR1cm4gYS52YWx1ZT09PUkzJiYoYS52YWx1ZT1VdyxhLnZhbHVlPWEuZmFjdG9yeSgpKSwib2JqZWN0Ij09dHlwZW9mIGEudmFsdWUmJmEudmFsdWUmJmZ1bmN0aW9uIHZ2KGMpe3JldHVy''@;'; put 'put ''biBudWxsIT09YyYmIm9iamVjdCI9PXR5cGVvZiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgYy5uZ09uRGVzdHJveX0oYS52YWx1ZSkmJnRoaXMuX25nT25EZXN0cm95SG9va3MuYWRkKGEudmFsdWUpLGEudmFsdWV9ZmluYWxseXtfZShkKX19aW5qZWN0YWJsZURlZkluU2NvcGUobCl7aWYoIWwu''@;'; put 'put ''cHJvdmlkZWRJbilyZXR1cm4hMTtjb25zdCBhPUdpKGwucHJvdmlkZWRJbik7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBhPyJhbnkiPT09YXx8dGhpcy5zY29wZXMuaGFzKGEpOnRoaXMuaW5qZWN0b3JEZWZUeXBlcy5oYXMoYSl9cmVtb3ZlT25EZXN0cm95KGwpe2NvbnN0IGE9dGhpcy5fb25E''@;'; put 'put ''ZXN0cm95SG9va3MuaW5kZXhPZihsKTstMSE9PWEmJnRoaXMuX29uRGVzdHJveUhvb2tzLnNwbGljZShhLDEpfX1mdW5jdGlvbiBoNShjKXtjb25zdCBsPU9hKGMpLGE9bnVsbCE9PWw/bC5mYWN0b3J5Omd1KGMpO2lmKG51bGwhPT1hKXJldHVybiBhO2lmKGMgaW5zdGFuY2VvZiBTdCl0aHJv''@;'; put 'put ''dyBuZXcgZXIoMjA0LCExKTtpZihjIGluc3RhbmNlb2YgRnVuY3Rpb24pcmV0dXJuIGZ1bmN0aW9uIGd2KGMpe2lmKGMubGVuZ3RoPjApdGhyb3cgbmV3IGVyKDIwNCwhMSk7Y29uc3QgYT1mdW5jdGlvbiB6YShjKXtyZXR1cm4gYyYmKGNbQ3NdfHxjW0hhXSl8fG51bGx9KGMpO3JldHVybiBu''@;'; put 'put ''dWxsIT09YT8oKT0+YS5mYWN0b3J5KGMpOigpPT5uZXcgY30oYyk7dGhyb3cgbmV3IGVyKDIwNCwhMSl9ZnVuY3Rpb24gbXYoYyxsLGEpe2xldCBkO2lmKHBmKGMpKXtjb25zdCBoPUdpKGMpO3JldHVybiBndShoKXx8aDUoaCl9aWYoUjYoYykpZD0oKT0+R2koYy51c2VWYWx1ZSk7ZWxzZSBp''@;'; put 'put ''ZihmdW5jdGlvbiBwdihjKXtyZXR1cm4hKCFjfHwhYy51c2VGYWN0b3J5KX0oYykpZD0oKT0+Yy51c2VGYWN0b3J5KC4uLnI1KGMuZGVwc3x8W10pKTtlbHNlIGlmKGZ1bmN0aW9uIGZ2KGMpe3JldHVybiEoIWN8fCFjLnVzZUV4aXN0aW5nKX0oYykpZD0oKT0+TXIoR2koYy51c2VFeGlzdGlu''@;'; put 'put ''ZykpO2Vsc2V7Y29uc3QgaD1HaShjJiYoYy51c2VDbGFzc3x8Yy5wcm92aWRlKSk7aWYoIWZ1bmN0aW9uIFp3KGMpe3JldHVybiEhYy5kZXBzfShjKSlyZXR1cm4gZ3UoaCl8fGg1KGgpO2Q9KCk9Pm5ldyBoKC4uLnI1KGMuZGVwcykpfXJldHVybiBkfWZ1bmN0aW9uIEwzKGMsbCxhPSExKXty''@;'; put 'put ''ZXR1cm57ZmFjdG9yeTpjLHZhbHVlOmwsbXVsdGk6YT9bXTp2b2lkIDB9fWZ1bmN0aW9uIGY1KGMsbCl7Zm9yKGNvbnN0IGEgb2YgYylBcnJheS5pc0FycmF5KGEpP2Y1KGEsbCk6YSYmQm8oYSk/ZjUoYS5cdTAyNzVwcm92aWRlcnMsbCk6bChhKX1mdW5jdGlvbiBYMChjLGwpe2MgaW5zdGFu''@;'; put 'put ''Y2VvZiBjZCYmYy5hc3NlcnROb3REZXN0cm95ZWQoKTtjb25zdCBkPVFkKGMpLGg9Ymwodm9pZCAwKTt0cnl7cmV0dXJuIGwoKX1maW5hbGx5e1FkKGQpLGJsKGgpfX1mdW5jdGlvbiBidigpe3JldHVybiB2b2lkIDAhPT10NSgpfHxudWxsIT1mdW5jdGlvbiBSdygpe3JldHVybiBFM30oKX1j''@;'; put 'put ''b25zdCBWNj1GdW5jdGlvbjtjb25zdCBCbD0wLHFpPTEsWm89Mix1Yz0zLEhjPTQsbmM9NSx0dT02LEowPTcsc2w9OCxkYz05LEwxPTEwLGJhPTExLHZmPTEyLHk0PTEzLG8wPTE0LGpsPTE1LF80PTE2LGJmPTE3LHVkPTE4LHcwPTE5LFFoPTIwLGUyPTIxLHA1PTIyLHlmPTIzLHdhPTI1LEI2''@;'; put 'put ''PTEsbXU9NyxPMz05LGhjPTEwO3ZhciBnNT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5vbmU9MF09Ik5vbmUiLGNbYy5IYXNUcmFuc3BsYW50ZWRWaWV3cz0yXT0iSGFzVHJhbnNwbGFudGVkVmlld3MiLGN9KGc1fHx7fSk7ZnVuY3Rpb24gUHUoYyl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYykm''@;'; put 'put ''JiJvYmplY3QiPT10eXBlb2YgY1tCNl19ZnVuY3Rpb24gRnUoYyl7cmV0dXJuIEFycmF5LmlzQXJyYXkoYykmJiEwPT09Y1tCNl19ZnVuY3Rpb24gbnUoYyl7cmV0dXJuISEoNCZjLmZsYWdzKX1mdW5jdGlvbiBfZihjKXtyZXR1cm4gYy5jb21wb25lbnRPZmZzZXQ+LTF9ZnVuY3Rpb24gUTAo''@;'; put 'put ''Yyl7cmV0dXJuISgxJn5jLmZsYWdzKX1mdW5jdGlvbiBOYyhjKXtyZXR1cm4hIWMudGVtcGxhdGV9ZnVuY3Rpb24gQzQoYyl7cmV0dXJuISEoNTEyJmNbWm9dKX1jbGFzcyBXTntjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5wcmV2aW91c1ZhbHVlPWwsdGhpcy5jdXJyZW50VmFsdWU9YSx0aGlz''@;'; put 'put ''LmZpcnN0Q2hhbmdlPWR9aXNGaXJzdENoYW5nZSgpe3JldHVybiB0aGlzLmZpcnN0Q2hhbmdlfX1mdW5jdGlvbiBOQShjLGwsYSxkKXtudWxsIT09bD9sLmFwcGx5VmFsdWVUb0lucHV0U2lnbmFsKGwsZCk6Y1thXT1kfWZ1bmN0aW9uIHlsKCl7cmV0dXJuIFZBfWZ1bmN0aW9uIFZBKGMpe3Jl''@;'; put 'put ''dHVybiBjLnR5cGUucHJvdG90eXBlLm5nT25DaGFuZ2VzJiYoYy5zZXRJbnB1dD1HTiksWU59ZnVuY3Rpb24gWU4oKXtjb25zdCBjPWpBKHRoaXMpLGw9Yz8uY3VycmVudDtpZihsKXtjb25zdCBhPWMucHJldmlvdXM7aWYoYT09PUkwKWMucHJldmlvdXM9bDtlbHNlIGZvcihsZXQgZCBpbiBs''@;'; put 'put ''KWFbZF09bFtkXTtjLmN1cnJlbnQ9bnVsbCx0aGlzLm5nT25DaGFuZ2VzKGwpfX1mdW5jdGlvbiBHTihjLGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5kZWNsYXJlZElucHV0c1tkXSx2PWpBKGMpfHxmdW5jdGlvbiAkTihjLGwpe3JldHVybiBjW0JBXT1sfShjLHtwcmV2aW91czpJMCxjdXJyZW50''@;'; put 'put ''Om51bGx9KSxNPXYuY3VycmVudHx8KHYuY3VycmVudD17fSksRD12LnByZXZpb3VzLFo9RFtmXTtNW2ZdPW5ldyBXTihaJiZaLmN1cnJlbnRWYWx1ZSxhLEQ9PT1JMCksTkEoYyxsLGgsYSl9eWwubmdJbmhlcml0PSEwO2NvbnN0IEJBPSJfX25nU2ltcGxlQ2hhbmdlc19fIjtmdW5jdGlvbiBq''@;'; put 'put ''QShjKXtyZXR1cm4gY1tCQV18fG51bGx9Y29uc3QgbzI9ZnVuY3Rpb24oYyxsLGEpe307bGV0IFVBPSExO2Z1bmN0aW9uIF9sKGMpe2Zvcig7QXJyYXkuaXNBcnJheShjKTspYz1jW0JsXTtyZXR1cm4gY31mdW5jdGlvbiBtNShjLGwpe3JldHVybiBfbChsW2NdKX1mdW5jdGlvbiBMMChjLGwp''@;'; put 'put ''e3JldHVybiBfbChsW2MuaW5kZXhdKX1mdW5jdGlvbiBaNihjLGwpe3JldHVybiBjLmRhdGFbbF19ZnVuY3Rpb24gUzQoYyxsKXtyZXR1cm4gY1tsXX1mdW5jdGlvbiBPMShjLGwpe2NvbnN0IGE9bFtjXTtyZXR1cm4gUHUoYSk/YTphW0JsXX1mdW5jdGlvbiBKdyhjKXtyZXR1cm4hKDEyOCZ+''@;'; put 'put ''Y1tab10pfWZ1bmN0aW9uIGEyKGMsbCl7cmV0dXJuIG51bGw9PWw/bnVsbDpjW2xdfWZ1bmN0aW9uIFF3KGMpe2NbYmZdPTB9ZnVuY3Rpb24gUU4oYyl7MTAyNCZjW1pvXXx8KGNbWm9dfD0xMDI0LEp3KGMpJiZXNihjKSl9ZnVuY3Rpb24gd3YoYyl7cmV0dXJuISEoOTIxNiZjW1pvXXx8Y1t5''@;'; put 'put ''Zl0/LmRpcnR5KX1mdW5jdGlvbiB0QyhjKXtjW0wxXS5jaGFuZ2VEZXRlY3Rpb25TY2hlZHVsZXI/Lm5vdGlmeSgxKSx3dihjKT9XNihjKTo2NCZjW1pvXSYmKGZ1bmN0aW9uIHFOKCl7cmV0dXJuIFVBfSgpPyhjW1pvXXw9MTAyNCxXNihjKSk6Y1tMMV0uY2hhbmdlRGV0ZWN0aW9uU2NoZWR1''@;'; put 'put ''bGVyPy5ub3RpZnkoKSl9ZnVuY3Rpb24gVzYoYyl7Y1tMMV0uY2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyPy5ub3RpZnkoKTtsZXQgbD1NNChjKTtmb3IoO251bGwhPT1sJiYhKDgxOTImbFtab10pJiYobFtab118PTgxOTIsSncobCkpOylsPU00KGwpfWZ1bmN0aW9uIEN2KGMsbCl7aWYoISgy''@;'; put 'put ''NTYmfmNbWm9dKSl0aHJvdyBuZXcgZXIoOTExLCExKTtudWxsPT09Y1tlMl0mJihjW2UyXT1bXSksY1tlMl0ucHVzaChsKX1mdW5jdGlvbiBNNChjKXtjb25zdCBsPWNbdWNdO3JldHVybiBGdShsKT9sW3VjXTpsfWNvbnN0IENhPXtsRnJhbWU6WEEobnVsbCksYmluZGluZ3NFbmFibGVkOiEw''@;'; put 'put ''LHNraXBIeWRyYXRpb25Sb290VE5vZGU6bnVsbH07ZnVuY3Rpb24gR0EoKXtyZXR1cm4gQ2EuYmluZGluZ3NFbmFibGVkfWZ1bmN0aW9uIHY1KCl7cmV0dXJuIG51bGwhPT1DYS5za2lwSHlkcmF0aW9uUm9vdFROb2RlfWZ1bmN0aW9uIHVpKCl7cmV0dXJuIENhLmxGcmFtZS5sVmlld31mdW5j''@;'; put 'put ''dGlvbiBvcygpe3JldHVybiBDYS5sRnJhbWUudFZpZXd9ZnVuY3Rpb24gd3QoYyl7cmV0dXJuIENhLmxGcmFtZS5jb250ZXh0TFZpZXc9YyxjW3NsXX1mdW5jdGlvbiBDdChjKXtyZXR1cm4gQ2EubEZyYW1lLmNvbnRleHRMVmlldz1udWxsLGN9ZnVuY3Rpb24gbGwoKXtsZXQgYz1uQygpO2Zv''@;'; put 'put ''cig7bnVsbCE9PWMmJjY0PT09Yy50eXBlOyljPWMucGFyZW50O3JldHVybiBjfWZ1bmN0aW9uIG5DKCl7cmV0dXJuIENhLmxGcmFtZS5jdXJyZW50VE5vZGV9ZnVuY3Rpb24gczIoYyxsKXtjb25zdCBhPUNhLmxGcmFtZTthLmN1cnJlbnRUTm9kZT1jLGEuaXNQYXJlbnQ9bH1mdW5jdGlvbiBy''@;'; put 'put ''Qygpe3JldHVybiBDYS5sRnJhbWUuaXNQYXJlbnR9ZnVuY3Rpb24gaUMoKXtDYS5sRnJhbWUuaXNQYXJlbnQ9ITF9ZnVuY3Rpb24gTzAoKXtjb25zdCBjPUNhLmxGcmFtZTtsZXQgbD1jLmJpbmRpbmdSb290SW5kZXg7cmV0dXJuLTE9PT1sJiYobD1jLmJpbmRpbmdSb290SW5kZXg9Yy50Vmll''@;'; put 'put ''dy5iaW5kaW5nU3RhcnRJbmRleCksbH1mdW5jdGlvbiB3Zigpe3JldHVybiBDYS5sRnJhbWUuYmluZGluZ0luZGV4fWZ1bmN0aW9uIG5oKCl7cmV0dXJuIENhLmxGcmFtZS5iaW5kaW5nSW5kZXgrK31mdW5jdGlvbiBDZihjKXtjb25zdCBsPUNhLmxGcmFtZSxhPWwuYmluZGluZ0luZGV4O3Jl''@;'; put 'put ''dHVybiBsLmJpbmRpbmdJbmRleD1sLmJpbmRpbmdJbmRleCtjLGF9ZnVuY3Rpb24gY1YoYyxsKXtjb25zdCBhPUNhLmxGcmFtZTthLmJpbmRpbmdJbmRleD1hLmJpbmRpbmdSb290SW5kZXg9YyxvQyhsKX1mdW5jdGlvbiBvQyhjKXtDYS5sRnJhbWUuY3VycmVudERpcmVjdGl2ZUluZGV4PWN9''@;'; put 'put ''ZnVuY3Rpb24gYUMoYyl7Y29uc3QgbD1DYS5sRnJhbWUuY3VycmVudERpcmVjdGl2ZUluZGV4O3JldHVybi0xPT09bD9udWxsOmNbbF19ZnVuY3Rpb24gc0MoKXtyZXR1cm4gQ2EubEZyYW1lLmN1cnJlbnRRdWVyeUluZGV4fWZ1bmN0aW9uIFAzKGMpe0NhLmxGcmFtZS5jdXJyZW50UXVlcnlJ''@;'; put 'put ''bmRleD1jfWZ1bmN0aW9uIGxDKGMpe2NvbnN0IGw9Y1txaV07cmV0dXJuIDI9PT1sLnR5cGU/bC5kZWNsVE5vZGU6MT09PWwudHlwZT9jW25jXTpudWxsfWZ1bmN0aW9uIE12KGMsbCxhKXtpZihhJm9vLlNraXBTZWxmKXtsZXQgaD1sLGY9Yztmb3IoOyEoaD1oLnBhcmVudCxudWxsIT09aHx8''@;'; put 'put ''YSZvby5Ib3N0fHwoaD1sQyhmKSxudWxsPT09aHx8KGY9ZltvMF0sMTAmaC50eXBlKSkpOyk7aWYobnVsbD09PWgpcmV0dXJuITE7bD1oLGM9Zn1jb25zdCBkPUNhLmxGcmFtZT1GMygpO3JldHVybiBkLmN1cnJlbnRUTm9kZT1sLGQubFZpZXc9YywhMH1mdW5jdGlvbiBHNihjKXtjb25zdCBs''@;'; put 'put ''PUYzKCksYT1jW3FpXTtDYS5sRnJhbWU9bCxsLmN1cnJlbnRUTm9kZT1hLmZpcnN0Q2hpbGQsbC5sVmlldz1jLGwudFZpZXc9YSxsLmNvbnRleHRMVmlldz1jLGwuYmluZGluZ0luZGV4PWEuYmluZGluZ1N0YXJ0SW5kZXgsbC5pbkkxOG49ITF9ZnVuY3Rpb24gRjMoKXtjb25zdCBjPUNhLmxG''@;'; put 'put ''cmFtZSxsPW51bGw9PT1jP251bGw6Yy5jaGlsZDtyZXR1cm4gbnVsbD09PWw/WEEoYyk6bH1mdW5jdGlvbiBYQShjKXtjb25zdCBsPXtjdXJyZW50VE5vZGU6bnVsbCxpc1BhcmVudDohMCxsVmlldzpudWxsLHRWaWV3Om51bGwsc2VsZWN0ZWRJbmRleDotMSxjb250ZXh0TFZpZXc6bnVsbCxl''@;'; put 'put ''bGVtZW50RGVwdGhDb3VudDowLGN1cnJlbnROYW1lc3BhY2U6bnVsbCxjdXJyZW50RGlyZWN0aXZlSW5kZXg6LTEsYmluZGluZ1Jvb3RJbmRleDotMSxiaW5kaW5nSW5kZXg6LTEsY3VycmVudFF1ZXJ5SW5kZXg6MCxwYXJlbnQ6YyxjaGlsZDpudWxsLGluSTE4bjohMX07cmV0dXJuIG51bGwh''@;'; put 'put ''PT1jJiYoYy5jaGlsZD1sKSxsfWZ1bmN0aW9uIHh2KCl7Y29uc3QgYz1DYS5sRnJhbWU7cmV0dXJuIENhLmxGcmFtZT1jLnBhcmVudCxjLmN1cnJlbnRUTm9kZT1udWxsLGMubFZpZXc9bnVsbCxjfWNvbnN0IEpBPXh2O2Z1bmN0aW9uIGI1KCl7Y29uc3QgYz14digpO2MuaXNQYXJlbnQ9ITAs''@;'; put 'put ''Yy50Vmlldz1udWxsLGMuc2VsZWN0ZWRJbmRleD0tMSxjLmNvbnRleHRMVmlldz1udWxsLGMuZWxlbWVudERlcHRoQ291bnQ9MCxjLmN1cnJlbnREaXJlY3RpdmVJbmRleD0tMSxjLmN1cnJlbnROYW1lc3BhY2U9bnVsbCxjLmJpbmRpbmdSb290SW5kZXg9LTEsYy5iaW5kaW5nSW5kZXg9LTEs''@;'; put 'put ''Yy5jdXJyZW50UXVlcnlJbmRleD0wfWZ1bmN0aW9uIE51KCl7cmV0dXJuIENhLmxGcmFtZS5zZWxlY3RlZEluZGV4fWZ1bmN0aW9uIHg0KGMpe0NhLmxGcmFtZS5zZWxlY3RlZEluZGV4PWN9ZnVuY3Rpb24gS3MoKXtjb25zdCBjPUNhLmxGcmFtZTtyZXR1cm4gWjYoYy50VmlldyxjLnNlbGVj''@;'; put 'put ''dGVkSW5kZXgpfWxldCBlaz0hMDtmdW5jdGlvbiAkNigpe3JldHVybiBla31mdW5jdGlvbiBsMihjKXtlaz1jfWZ1bmN0aW9uIEV2KGMsbCl7Zm9yKGxldCBhPWwuZGlyZWN0aXZlU3RhcnQsZD1sLmRpcmVjdGl2ZUVuZDthPGQ7YSsrKXtjb25zdCBmPWMuZGF0YVthXS50eXBlLnByb3RvdHlw''@;'; put 'put ''ZSx7bmdBZnRlckNvbnRlbnRJbml0OnYsbmdBZnRlckNvbnRlbnRDaGVja2VkOk0sbmdBZnRlclZpZXdJbml0OkQsbmdBZnRlclZpZXdDaGVja2VkOlosbmdPbkRlc3Ryb3k6bmV9PWY7diYmKGMuY29udGVudEhvb2tzPz89W10pLnB1c2goLWEsdiksTSYmKChjLmNvbnRlbnRIb29rcz8/PVtd''@;'; put 'put ''KS5wdXNoKGEsTSksKGMuY29udGVudENoZWNrSG9va3M/Pz1bXSkucHVzaChhLE0pKSxEJiYoYy52aWV3SG9va3M/Pz1bXSkucHVzaCgtYSxEKSxaJiYoKGMudmlld0hvb2tzPz89W10pLnB1c2goYSxaKSwoYy52aWV3Q2hlY2tIb29rcz8/PVtdKS5wdXNoKGEsWikpLG51bGwhPW5lJiYoYy5k''@;'; put 'put ''ZXN0cm95SG9va3M/Pz1bXSkucHVzaChhLG5lKX19ZnVuY3Rpb24gVHYoYyxsLGEpe3RrKGMsbCwzLGEpfWZ1bmN0aW9uIEF2KGMsbCxhLGQpeygzJmNbWm9dKT09PWEmJnRrKGMsbCxhLGQpfWZ1bmN0aW9uIHVDKGMsbCl7bGV0IGE9Y1tab107KDMmYSk9PT1sJiYoYSY9MTYzODMsYSs9MSxj''@;'; put 'put ''W1pvXT1hKX1mdW5jdGlvbiB0ayhjLGwsYSxkKXtjb25zdCBmPWQ/Py0xLHY9bC5sZW5ndGgtMTtsZXQgTT0wO2ZvcihsZXQgRD12b2lkIDAhPT1kPzY1NTM1JmNbYmZdOjA7RDx2O0QrKylpZigibnVtYmVyIj09dHlwZW9mIGxbRCsxXSl7aWYoTT1sW0RdLG51bGwhPWQmJk0+PWQpYnJlYWt9''@;'; put 'put ''ZWxzZSBsW0RdPDAmJihjW2JmXSs9NjU1MzYpLChNPGZ8fC0xPT1mKSYmKG1WKGMsYSxsLEQpLGNbYmZdPSg0Mjk0OTAxNzYwJmNbYmZdKStEKzIpLEQrK31mdW5jdGlvbiBuayhjLGwpe28yKDQsYyxsKTtjb25zdCBhPV9lKG51bGwpO3RyeXtsLmNhbGwoYyl9ZmluYWxseXtfZShhKSxvMig1''@;'; put 'put ''LGMsbCl9fWZ1bmN0aW9uIG1WKGMsbCxhLGQpe2NvbnN0IGg9YVtkXTwwLGY9YVtkKzFdLE09Y1toPy1hW2RdOmFbZF1dO2g/Y1tab10+PjE0PGNbYmZdPj4xNiYmKDMmY1tab10pPT09bCYmKGNbWm9dKz0xNjM4NCxuayhNLGYpKTpuayhNLGYpfWNvbnN0IEU0PS0xO2NsYXNzIFAxe2NvbnN0''@;'; put 'put ''cnVjdG9yKGwsYSxkKXt0aGlzLmZhY3Rvcnk9bCx0aGlzLnJlc29sdmluZz0hMSx0aGlzLmNhblNlZVZpZXdQcm92aWRlcnM9YSx0aGlzLmluamVjdEltcGw9ZH19ZnVuY3Rpb24ga3YoYyl7cmV0dXJuIGMhPT1FNH1mdW5jdGlvbiBLNihjKXtyZXR1cm4gMzI3NjcmY31mdW5jdGlvbiBxNihj''@;'; put 'put ''LGwpe2xldCBhPWZ1bmN0aW9uIENWKGMpe3JldHVybiBjPj4xNn0oYyksZD1sO2Zvcig7YT4wOylkPWRbbzBdLGEtLTtyZXR1cm4gZH1sZXQgaEM9ITA7ZnVuY3Rpb24gRHYoYyl7Y29uc3QgbD1oQztyZXR1cm4gaEM9YyxsfWNvbnN0IEl2PTI1NSxmQz01O2xldCBTVj0wO2NvbnN0IGMyPXt9''@;'; put 'put ''O2Z1bmN0aW9uIFJ2KGMsbCl7Y29uc3QgYT1MdihjLGwpO2lmKC0xIT09YSlyZXR1cm4gYTtjb25zdCBkPWxbcWldO2QuZmlyc3RDcmVhdGVQYXNzJiYoYy5pbmplY3RvckluZGV4PWwubGVuZ3RoLHBDKGQuZGF0YSxjKSxwQyhsLG51bGwpLHBDKGQuYmx1ZXByaW50LG51bGwpKTtjb25zdCBo''@;'; put 'put ''PXk1KGMsbCksZj1jLmluamVjdG9ySW5kZXg7aWYoa3YoaCkpe2NvbnN0IHY9SzYoaCksTT1xNihoLGwpLEQ9TVtxaV0uZGF0YTtmb3IobGV0IFo9MDtaPDg7WisrKWxbZitaXT1NW3YrWl18RFt2K1pdfXJldHVybiBsW2YrOF09aCxmfWZ1bmN0aW9uIHBDKGMsbCl7Yy5wdXNoKDAsMCwwLDAs''@;'; put 'put ''MCwwLDAsMCxsKX1mdW5jdGlvbiBMdihjLGwpe3JldHVybi0xPT09Yy5pbmplY3RvckluZGV4fHxjLnBhcmVudCYmYy5wYXJlbnQuaW5qZWN0b3JJbmRleD09PWMuaW5qZWN0b3JJbmRleHx8bnVsbD09PWxbYy5pbmplY3RvckluZGV4KzhdPy0xOmMuaW5qZWN0b3JJbmRleH1mdW5jdGlvbiB5''@;'; put 'put ''NShjLGwpe2lmKGMucGFyZW50JiYtMSE9PWMucGFyZW50LmluamVjdG9ySW5kZXgpcmV0dXJuIGMucGFyZW50LmluamVjdG9ySW5kZXg7bGV0IGE9MCxkPW51bGwsaD1sO2Zvcig7bnVsbCE9PWg7KXtpZihkPWloKGgpLG51bGw9PT1kKXJldHVybiBFNDtpZihhKyssaD1oW28wXSwtMSE9PWQu''@;'; put 'put ''aW5qZWN0b3JJbmRleClyZXR1cm4gZC5pbmplY3RvckluZGV4fGE8PDE2fXJldHVybiBFNH1mdW5jdGlvbiBoZChjLGwsYSl7IWZ1bmN0aW9uIE1WKGMsbCxhKXtsZXQgZDsic3RyaW5nIj09dHlwZW9mIGE/ZD1hLmNoYXJDb2RlQXQoMCl8fDA6YS5oYXNPd25Qcm9wZXJ0eShPYykmJihkPWFb''@;'; put 'put ''T2NdKSxudWxsPT1kJiYoZD1hW09jXT1TVisrKTtjb25zdCBoPWQmSXY7bC5kYXRhW2MrKGg+PmZDKV18PTE8PGh9KGMsbCxhKX1mdW5jdGlvbiByayhjLGwsYSl7aWYoYSZvby5PcHRpb25hbHx8dm9pZCAwIT09YylyZXR1cm4gYztTcygpfWZ1bmN0aW9uIHJoKGMsbCxhLGQpe2lmKGEmb28u''@;'; put 'put ''T3B0aW9uYWwmJnZvaWQgMD09PWQmJihkPW51bGwpLCEoYSYob28uU2VsZnxvby5Ib3N0KSkpe2NvbnN0IGg9Y1tkY10sZj1ibCh2b2lkIDApO3RyeXtyZXR1cm4gaD9oLmdldChsLGQsYSZvby5PcHRpb25hbCk6SmQobCxkLGEmb28uT3B0aW9uYWwpfWZpbmFsbHl7YmwoZil9fXJldHVybiBy''@;'; put 'put ''ayhkLDAsYSl9ZnVuY3Rpb24gaWsoYyxsLGEsZD1vby5EZWZhdWx0LGgpe2lmKG51bGwhPT1jKXtpZigyMDQ4JmxbWm9dJiYhKGQmb28uU2VsZikpe2NvbnN0IHY9ZnVuY3Rpb24gTjMoYyxsLGEsZCxoKXtsZXQgZj1jLHY9bDtmb3IoO251bGwhPT1mJiZudWxsIT09diYmMjA0OCZ2W1pvXSYm''@;'; put 'put ''ISg1MTImdltab10pOyl7Y29uc3QgTT1fNShmLHYsYSxkfG9vLlNlbGYsYzIpO2lmKE0hPT1jMilyZXR1cm4gTTtsZXQgRD1mLnBhcmVudDtpZighRCl7Y29uc3QgWj12W1FoXTtpZihaKXtjb25zdCBuZT1aLmdldChhLGMyLGQpO2lmKG5lIT09YzIpcmV0dXJuIG5lfUQ9aWgodiksdj12W28w''@;'; put 'put ''XX1mPUR9cmV0dXJuIGh9KGMsbCxhLGQsYzIpO2lmKHYhPT1jMilyZXR1cm4gdn1jb25zdCBmPV81KGMsbCxhLGQsYzIpO2lmKGYhPT1jMilyZXR1cm4gZn1yZXR1cm4gcmgobCxhLGQsaCl9ZnVuY3Rpb24gXzUoYyxsLGEsZCxoKXtjb25zdCBmPWZ1bmN0aW9uIEVjKGMpe2lmKCJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgYylyZXR1cm4gYy5jaGFyQ29kZUF0KDApfHwwO2NvbnN0IGw9Yy5oYXNPd25Qcm9wZXJ0eShPYyk/Y1tPY106dm9pZCAwO3JldHVybiJudW1iZXIiPT10eXBlb2YgbD9sPj0wP2wmSXY6ZTE6bH0oYSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGYpe2lmKCFNdihsLGMsZCkpcmV0''@;'; put 'put ''dXJuIGQmb28uSG9zdD9yayhoLDAsZCk6cmgobCxhLGQsaCk7dHJ5e2xldCB2O2lmKHY9ZihkKSxudWxsIT12fHxkJm9vLk9wdGlvbmFsKXJldHVybiB2O1NzKCl9ZmluYWxseXtKQSgpfX1lbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgZil7bGV0IHY9bnVsbCxNPUx2KGMsbCksRD1FNCxaPWQm''@;'; put 'put ''b28uSG9zdD9sW2psXVtuY106bnVsbDtmb3IoKC0xPT09TXx8ZCZvby5Ta2lwU2VsZikmJihEPS0xPT09TT95NShjLGwpOmxbTSs4XSxEIT09RTQmJkM1KGQsITEpPyh2PWxbcWldLE09SzYoRCksbD1xNihELGwpKTpNPS0xKTstMSE9PU07KXtjb25zdCBuZT1sW3FpXTtpZih3NShmLE0sbmUu''@;'; put 'put ''ZGF0YSkpe2NvbnN0IGNlPW9rKE0sbCxhLHYsZCxaKTtpZihjZSE9PWMyKXJldHVybiBjZX1EPWxbTSs4XSxEIT09RTQmJkM1KGQsbFtxaV0uZGF0YVtNKzhdPT09WikmJnc1KGYsTSxsKT8odj1uZSxNPUs2KEQpLGw9cTYoRCxsKSk6TT0tMX19cmV0dXJuIGh9ZnVuY3Rpb24gb2soYyxsLGEs''@;'; put 'put ''ZCxoLGYpe2NvbnN0IHY9bFtxaV0sTT12LmRhdGFbYys4XSxuZT1PdihNLHYsYSxudWxsPT1kP19mKE0pJiZoQzpkIT12JiYhISgzJk0udHlwZSksaCZvby5Ib3N0JiZmPT09TSk7cmV0dXJuIG51bGwhPT1uZT9UNChsLHYsbmUsTSk6YzJ9ZnVuY3Rpb24gT3YoYyxsLGEsZCxoKXtjb25zdCBm''@;'; put 'put ''PWMucHJvdmlkZXJJbmRleGVzLHY9bC5kYXRhLE09MTA0ODU3NSZmLEQ9Yy5kaXJlY3RpdmVTdGFydCxuZT1mPj4yMCxiZT1oP00rbmU6Yy5kaXJlY3RpdmVFbmQ7Zm9yKGxldCBFZT1kP006TStuZTtFZTxiZTtFZSsrKXtjb25zdCBCZT12W0VlXTtpZihFZTxEJiZhPT09QmV8fEVlPj1EJiZC''@;'; put 'put ''ZS50eXBlPT09YSlyZXR1cm4gRWV9aWYoaCl7Y29uc3QgRWU9dltEXTtpZihFZSYmTmMoRWUpJiZFZS50eXBlPT09YSlyZXR1cm4gRH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBUNChjLGwsYSxkKXtsZXQgaD1jW2FdO2NvbnN0IGY9bC5kYXRhO2lmKGZ1bmN0aW9uIHZWKGMpe3JldHVybiBjIGlu''@;'; put 'put ''c3RhbmNlb2YgUDF9KGgpKXtjb25zdCB2PWg7di5yZXNvbHZpbmcmJmZ1bmN0aW9uIEswKGMsbCl7dGhyb3cgbCYmbC5qb2luKCIgPiAiKSxuZXcgZXIoLTIwMCxjKX0oZnVuY3Rpb24gVG8oYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGM/Yy5uYW1lfHxjLnRvU3RyaW5nKCk6Im9iamVj''@;'; put 'put ''dCI9PXR5cGVvZiBjJiZudWxsIT1jJiYiZnVuY3Rpb24iPT10eXBlb2YgYy50eXBlP2MudHlwZS5uYW1lfHxjLnR5cGUudG9TdHJpbmcoKTpTbyhjKX0oZlthXSkpO2NvbnN0IE09RHYodi5jYW5TZWVWaWV3UHJvdmlkZXJzKTt2LnJlc29sdmluZz0hMDtjb25zdCBaPXYuaW5qZWN0SW1wbD9i''@;'; put 'put ''bCh2LmluamVjdEltcGwpOm51bGw7TXYoYyxkLG9vLkRlZmF1bHQpO3RyeXtoPWNbYV09di5mYWN0b3J5KHZvaWQgMCxmLGMsZCksbC5maXJzdENyZWF0ZVBhc3MmJmE+PWQuZGlyZWN0aXZlU3RhcnQmJmZ1bmN0aW9uIGdWKGMsbCxhKXtjb25zdHtuZ09uQ2hhbmdlczpkLG5nT25Jbml0Omgs''@;'; put 'put ''bmdEb0NoZWNrOmZ9PWwudHlwZS5wcm90b3R5cGU7aWYoZCl7Y29uc3Qgdj1WQShsKTsoYS5wcmVPcmRlckhvb2tzPz89W10pLnB1c2goYyx2KSwoYS5wcmVPcmRlckNoZWNrSG9va3M/Pz1bXSkucHVzaChjLHYpfWgmJihhLnByZU9yZGVySG9va3M/Pz1bXSkucHVzaCgwLWMsaCksZiYmKChh''@;'; put 'put ''LnByZU9yZGVySG9va3M/Pz1bXSkucHVzaChjLGYpLChhLnByZU9yZGVyQ2hlY2tIb29rcz8/PVtdKS5wdXNoKGMsZikpfShhLGZbYV0sbCl9ZmluYWxseXtudWxsIT09WiYmYmwoWiksRHYoTSksdi5yZXNvbHZpbmc9ITEsSkEoKX19cmV0dXJuIGh9ZnVuY3Rpb24gdzUoYyxsLGEpe3JldHVy''@;'; put 'put ''biEhKGFbbCsoYz4+ZkMpXSYxPDxjKX1mdW5jdGlvbiBDNShjLGwpe3JldHVybiEoYyZvby5TZWxmfHxjJm9vLkhvc3QmJmwpfWNsYXNzIFZ1e2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5fdE5vZGU9bCx0aGlzLl9sVmlldz1hfWdldChsLGEsZCl7cmV0dXJuIGlrKHRoaXMuX3ROb2RlLHRoaXMu''@;'; put 'put ''X2xWaWV3LGwsbjUoZCksYSl9fWZ1bmN0aW9uIGUxKCl7cmV0dXJuIG5ldyBWdShsbCgpLHVpKCkpfWZ1bmN0aW9uIFpzKGMpe3JldHVybiBOcygoKT0+e2NvbnN0IGw9Yy5wcm90b3R5cGUuY29uc3RydWN0b3IsYT1sW3ppXXx8TWYobCksZD1PYmplY3QucHJvdG90eXBlO2xldCBoPU9iamVj''@;'; put 'put ''dC5nZXRQcm90b3R5cGVPZihjLnByb3RvdHlwZSkuY29uc3RydWN0b3I7Zm9yKDtoJiZoIT09ZDspe2NvbnN0IGY9aFt6aV18fE1mKGgpO2lmKGYmJmYhPT1hKXJldHVybiBmO2g9T2JqZWN0LmdldFByb3RvdHlwZU9mKGgpfXJldHVybiBmPT5uZXcgZn0pfWZ1bmN0aW9uIE1mKGMpe3JldHVy''@;'; put 'put ''biB2bChjKT8oKT0+e2NvbnN0IGw9TWYoR2koYykpO3JldHVybiBsJiZsKCl9Omd1KGMpfWZ1bmN0aW9uIGloKGMpe2NvbnN0IGw9Y1txaV0sYT1sLnR5cGU7cmV0dXJuIDI9PT1hP2wuZGVjbFROb2RlOjE9PT1hP2NbbmNdOm51bGx9ZnVuY3Rpb24geGYoYyl7cmV0dXJuIGZ1bmN0aW9uIHhW''@;'; put 'put ''KGMsbCl7aWYoImNsYXNzIj09PWwpcmV0dXJuIGMuY2xhc3NlcztpZigic3R5bGUiPT09bClyZXR1cm4gYy5zdHlsZXM7Y29uc3QgYT1jLmF0dHJzO2lmKGEpe2NvbnN0IGQ9YS5sZW5ndGg7bGV0IGg9MDtmb3IoO2g8ZDspe2NvbnN0IGY9YVtoXTtpZihsNShmKSlicmVhaztpZigwPT09Zilo''@;'; put 'put ''Kz0yO2Vsc2UgaWYoIm51bWJlciI9PXR5cGVvZiBmKWZvcihoKys7aDxkJiYic3RyaW5nIj09dHlwZW9mIGFbaF07KWgrKztlbHNle2lmKGY9PT1sKXJldHVybiBhW2grMV07aCs9Mn19fXJldHVybiBudWxsfShsbCgpLGMpfWZ1bmN0aW9uIF9DKGMsbD1udWxsLGE9bnVsbCxkKXtjb25zdCBo''@;'; put 'put ''PWs0KGMsbCxhLGQpO3JldHVybiBoLnJlc29sdmVJbmplY3RvckluaXRpYWxpemVycygpLGh9ZnVuY3Rpb24gazQoYyxsPW51bGwsYT1udWxsLGQsaD1uZXcgU2V0KXtjb25zdCBmPVthfHxlcyxqdyhjKV07cmV0dXJuIGQ9ZHx8KCJvYmplY3QiPT10eXBlb2YgYz92b2lkIDA6RnIoYykpLG5l''@;'; put 'put ''dyBjZChmLGx8fFIzKCksZHx8bnVsbCxoKX1sZXQgRHM9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5USFJPV19JRl9OT1RfRk9VTkQ9cTB9c3RhdGlje3RoaXMuTlVMTD1uZXcgczV9c3RhdGljIGNyZWF0ZShhLGQpe2lmKEFycmF5LmlzQXJyYXkoYSkpcmV0dXJuIF9DKHtuYW1lOiIifSxk''@;'; put 'put ''LGEsIiIpO3tjb25zdCBoPWEubmFtZT8/IiI7cmV0dXJuIF9DKHtuYW1lOmh9LGEucGFyZW50LGEucHJvdmlkZXJzLGgpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLHByb3ZpZGVkSW46ImFueSIsZmFjdG9yeTooKT0+TXIoQTMpfSl9c3RhdGlje3RoaXMuX19OR19FTEVN''@;'; put 'put ''RU5UX0lEX189LTF9fXJldHVybiBjfSkoKTtmdW5jdGlvbiB4NShjKXtyZXR1cm4gYy5uZ09yaWdpbmFsRXJyb3J9Y2xhc3MgdTJ7Y29uc3RydWN0b3IoKXt0aGlzLl9jb25zb2xlPWNvbnNvbGV9aGFuZGxlRXJyb3IobCl7Y29uc3QgYT10aGlzLl9maW5kT3JpZ2luYWxFcnJvcihsKTt0aGlz''@;'; put 'put ''Ll9jb25zb2xlLmVycm9yKCJFUlJPUiIsbCksYSYmdGhpcy5fY29uc29sZS5lcnJvcigiT1JJR0lOQUwgRVJST1IiLGEpfV9maW5kT3JpZ2luYWxFcnJvcihsKXtsZXQgYT1sJiZ4NShsKTtmb3IoO2EmJng1KGEpOylhPXg1KGEpO3JldHVybiBhfHxudWxsfX1jb25zdCBjaz1uZXcgU3QoIiIs''@;'; put 'put ''e3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PmhpKHUyKS5oYW5kbGVFcnJvci5iaW5kKHZvaWQgMCl9KTtsZXQgRTU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5fX05HX0VMRU1FTlRfSURfXz1CM31zdGF0aWN7dGhpcy5fX05HX0VOVl9JRF9fPWE9PmF9fXJldHVybiBjfSkoKTtj''@;'; put 'put ''bGFzcyBWMyBleHRlbmRzIEU1e2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5fbFZpZXc9bH1vbkRlc3Ryb3kobCl7cmV0dXJuIEN2KHRoaXMuX2xWaWV3LGwpLCgpPT5mdW5jdGlvbiBTdihjLGwpe2lmKG51bGw9PT1jW2UyXSlyZXR1cm47Y29uc3QgYT1jW2UyXS5pbmRleE9mKGwpOy0x''@;'; put 'put ''IT09YSYmY1tlMl0uc3BsaWNlKGEsMSl9KHRoaXMuX2xWaWV3LGwpfX1mdW5jdGlvbiBCMygpe3JldHVybiBuZXcgVjModWkoKSl9ZnVuY3Rpb24gQVYoKXtyZXR1cm4gRDQobGwoKSx1aSgpKX1mdW5jdGlvbiBENChjLGwpe3JldHVybiBuZXcgZW8oTDAoYyxsKSl9bGV0IGVvPSgoKT0+e2Ns''@;'; put 'put ''YXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5uYXRpdmVFbGVtZW50PWF9c3RhdGlje3RoaXMuX19OR19FTEVNRU5UX0lEX189QVZ9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBkayhjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIGVvP2MubmF0aXZlRWxlbWVudDpjfWZ1bmN0aW9uIHdDKGMpe3JldHVy''@;'; put 'put ''biBsPT57c2V0VGltZW91dChjLHZvaWQgMCxsKX19Y29uc3QgcXI9Y2xhc3Mga1YgZXh0ZW5kcyBXbntjb25zdHJ1Y3RvcihsPSExKXtzdXBlcigpLHRoaXMuZGVzdHJveVJlZj12b2lkIDAsdGhpcy5fX2lzQXN5bmM9bCxidigpJiYodGhpcy5kZXN0cm95UmVmPWhpKEU1LHtvcHRpb25hbDoh''@;'; put 'put ''MH0pPz92b2lkIDApfWVtaXQobCl7Y29uc3QgYT1fZShudWxsKTt0cnl7c3VwZXIubmV4dChsKX1maW5hbGx5e19lKGEpfX1zdWJzY3JpYmUobCxhLGQpe2xldCBoPWwsZj1hfHwoKCk9Pm51bGwpLHY9ZDtpZihsJiYib2JqZWN0Ij09dHlwZW9mIGwpe2NvbnN0IEQ9bDtoPUQubmV4dD8uYmlu''@;'; put 'put ''ZChEKSxmPUQuZXJyb3I/LmJpbmQoRCksdj1ELmNvbXBsZXRlPy5iaW5kKEQpfXRoaXMuX19pc0FzeW5jJiYoZj13QyhmKSxoJiYoaD13QyhoKSksdiYmKHY9d0ModikpKTtjb25zdCBNPXN1cGVyLnN1YnNjcmliZSh7bmV4dDpoLGVycm9yOmYsY29tcGxldGU6dn0pO3JldHVybiBsIGluc3Rh''@;'; put 'put ''bmNlb2YgcXQmJmwuYWRkKE0pLE19fTtmdW5jdGlvbiBEVigpe3JldHVybiB0aGlzLl9yZXN1bHRzW1N5bWJvbC5pdGVyYXRvcl0oKX1jbGFzcyBmZHtnZXQgY2hhbmdlcygpe3JldHVybiB0aGlzLl9jaGFuZ2VzPz89bmV3IHFyfWNvbnN0cnVjdG9yKGw9ITEpe3RoaXMuX2VtaXREaXN0aW5j''@;'; put 'put ''dENoYW5nZXNPbmx5PWwsdGhpcy5kaXJ0eT0hMCx0aGlzLl9vbkRpcnR5PXZvaWQgMCx0aGlzLl9yZXN1bHRzPVtdLHRoaXMuX2NoYW5nZXNEZXRlY3RlZD0hMSx0aGlzLl9jaGFuZ2VzPXZvaWQgMCx0aGlzLmxlbmd0aD0wLHRoaXMuZmlyc3Q9dm9pZCAwLHRoaXMubGFzdD12b2lkIDA7Y29u''@;'; put 'put ''c3QgYT1mZC5wcm90b3R5cGU7YVtTeW1ib2wuaXRlcmF0b3JdfHwoYVtTeW1ib2wuaXRlcmF0b3JdPURWKX1nZXQobCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHNbbF19bWFwKGwpe3JldHVybiB0aGlzLl9yZXN1bHRzLm1hcChsKX1maWx0ZXIobCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuZmlsdGVy''@;'; put 'put ''KGwpfWZpbmQobCl7cmV0dXJuIHRoaXMuX3Jlc3VsdHMuZmluZChsKX1yZWR1Y2UobCxhKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy5yZWR1Y2UobCxhKX1mb3JFYWNoKGwpe3RoaXMuX3Jlc3VsdHMuZm9yRWFjaChsKX1zb21lKGwpe3JldHVybiB0aGlzLl9yZXN1bHRzLnNvbWUobCl9dG9BcnJh''@;'; put 'put ''eSgpe3JldHVybiB0aGlzLl9yZXN1bHRzLnNsaWNlKCl9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5fcmVzdWx0cy50b1N0cmluZygpfXJlc2V0KGwsYSl7dGhpcy5kaXJ0eT0hMTtjb25zdCBkPWZ1bmN0aW9uIHQwKGMpe3JldHVybiBjLmZsYXQoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKX0o''@;'; put 'put ''bCk7KHRoaXMuX2NoYW5nZXNEZXRlY3RlZD0hZnVuY3Rpb24gY2YoYyxsLGEpe2lmKGMubGVuZ3RoIT09bC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBkPTA7ZDxjLmxlbmd0aDtkKyspe2xldCBoPWNbZF0sZj1sW2RdO2lmKGEmJihoPWEoaCksZj1hKGYpKSxmIT09aClyZXR1cm4hMX1yZXR1''@;'; put 'put ''cm4hMH0odGhpcy5fcmVzdWx0cyxkLGEpKSYmKHRoaXMuX3Jlc3VsdHM9ZCx0aGlzLmxlbmd0aD1kLmxlbmd0aCx0aGlzLmxhc3Q9ZFt0aGlzLmxlbmd0aC0xXSx0aGlzLmZpcnN0PWRbMF0pfW5vdGlmeU9uQ2hhbmdlcygpe3ZvaWQgMCE9PXRoaXMuX2NoYW5nZXMmJih0aGlzLl9jaGFuZ2Vz''@;'; put 'put ''RGV0ZWN0ZWR8fCF0aGlzLl9lbWl0RGlzdGluY3RDaGFuZ2VzT25seSkmJnRoaXMuX2NoYW5nZXMuZW1pdCh0aGlzKX1vbkRpcnR5KGwpe3RoaXMuX29uRGlydHk9bH1zZXREaXJ0eSgpe3RoaXMuZGlydHk9ITAsdGhpcy5fb25EaXJ0eT8uKCl9ZGVzdHJveSgpe3ZvaWQgMCE9PXRoaXMuX2No''@;'; put 'put ''YW5nZXMmJih0aGlzLl9jaGFuZ2VzLmNvbXBsZXRlKCksdGhpcy5fY2hhbmdlcy51bnN1YnNjcmliZSgpKX19ZnVuY3Rpb24gTnYoYyl7cmV0dXJuISgxMjgmfmMuZmxhZ3MpfWNvbnN0IENDPW5ldyBNYXA7bGV0IFJWPTA7Y29uc3QgTUM9Il9fbmdDb250ZXh0X18iO2Z1bmN0aW9uIEJ1KGMs''@;'; put 'put ''bCl7UHUobCk/KGNbTUNdPWxbdzBdLGZ1bmN0aW9uIE9WKGMpe0NDLnNldChjW3cwXSxjKX0obCkpOmNbTUNdPWx9ZnVuY3Rpb24gYmsoYyl7cmV0dXJuIF9rKGNbdmZdKX1mdW5jdGlvbiB5ayhjKXtyZXR1cm4gX2soY1tIY10pfWZ1bmN0aW9uIF9rKGMpe2Zvcig7bnVsbCE9PWMmJiFGdShj''@;'; put 'put ''KTspYz1jW0hjXTtyZXR1cm4gY31sZXQgRUM7ZnVuY3Rpb24gajMoKXtpZih2b2lkIDAhPT1FQylyZXR1cm4gRUM7aWYodHlwZW9mIGRvY3VtZW50PCJ1IilyZXR1cm4gZG9jdW1lbnQ7dGhyb3cgbmV3IGVyKDIxMCwhMSl9Y29uc3QgenY9bmV3IFN0KCIiLHtwcm92aWRlZEluOiJyb290Iixm''@;'; put 'put ''YWN0b3J5OigpPT5YVn0pLFhWPSJuZyIsVGs9bmV3IFN0KCIiKSxvYT1uZXcgU3QoIiIse3Byb3ZpZGVkSW46InBsYXRmb3JtIixmYWN0b3J5OigpPT4idW5rbm93biJ9KSxBaz1uZXcgU3QoIiIpLEQ1PW5ldyBTdCgiIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+ajMoKS5ib2R5''@;'; put 'put ''Py5xdWVyeVNlbGVjdG9yKCJbbmdDc3BOb25jZV0iKT8uZ2V0QXR0cmlidXRlKCJuZ0NzcE5vbmNlIil8fG51bGx9KTtsZXQgRGs9KCk9Pm51bGw7ZnVuY3Rpb24gSUMoYyxsLGE9ITEpe3JldHVybiBEayhjLGwsYSl9Y29uc3QgTGs9bmV3IFN0KCIiLHtwcm92aWRlZEluOiJyb290IixmYWN0''@;'; put 'put ''b3J5OigpPT4hMX0pO2xldCBHdiwkdjtmdW5jdGlvbiBMNShjKXtyZXR1cm4gZnVuY3Rpb24gRkMoKXtpZih2b2lkIDA9PT1HdiYmKEd2PW51bGwsSHQudHJ1c3RlZFR5cGVzKSl0cnl7R3Y9SHQudHJ1c3RlZFR5cGVzLmNyZWF0ZVBvbGljeSgiYW5ndWxhciIse2NyZWF0ZUhUTUw6Yz0+Yyxj''@;'; put 'put ''cmVhdGVTY3JpcHQ6Yz0+YyxjcmVhdGVTY3JpcHRVUkw6Yz0+Y30pfWNhdGNoe31yZXR1cm4gR3Z9KCk/LmNyZWF0ZUhUTUwoYyl8fGN9ZnVuY3Rpb24gSEMoKXtpZih2b2lkIDA9PT0kdiYmKCR2PW51bGwsSHQudHJ1c3RlZFR5cGVzKSl0cnl7JHY9SHQudHJ1c3RlZFR5cGVzLmNyZWF0ZVBv''@;'; put 'put ''bGljeSgiYW5ndWxhciN1bnNhZmUtYnlwYXNzIix7Y3JlYXRlSFRNTDpjPT5jLGNyZWF0ZVNjcmlwdDpjPT5jLGNyZWF0ZVNjcmlwdFVSTDpjPT5jfSl9Y2F0Y2h7fXJldHVybiAkdn1mdW5jdGlvbiBQayhjKXtyZXR1cm4gSEMoKT8uY3JlYXRlSFRNTChjKXx8Y31mdW5jdGlvbiBIayhjKXty''@;'; put 'put ''ZXR1cm4gSEMoKT8uY3JlYXRlU2NyaXB0VVJMKGMpfHxjfWNsYXNzIE5re2NvbnN0cnVjdG9yKGwpe3RoaXMuY2hhbmdpbmdUaGlzQnJlYWtzQXBwbGljYXRpb25TZWN1cml0eT1sfXRvU3RyaW5nKCl7cmV0dXJuYFNhZmVWYWx1ZSBtdXN0IHVzZSBbcHJvcGVydHldPWJpbmRpbmc6ICR7dGhp''@;'; put 'put ''cy5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5fSAoc2VlICR7Z299KWB9fWZ1bmN0aW9uIGQyKGMpe3JldHVybiBjIGluc3RhbmNlb2YgTms/Yy5jaGFuZ2luZ1RoaXNCcmVha3NBcHBsaWNhdGlvblNlY3VyaXR5OmN9ZnVuY3Rpb24gTzQoYyxsKXtjb25zdCBhPWZ1bmN0''@;'; put 'put ''aW9uIFZrKGMpe3JldHVybiBjIGluc3RhbmNlb2YgTmsmJmMuZ2V0VHlwZU5hbWUoKXx8bnVsbH0oYyk7aWYobnVsbCE9YSYmYSE9PWwpe2lmKCJSZXNvdXJjZVVSTCI9PT1hJiYiVVJMIj09PWwpcmV0dXJuITA7dGhyb3cgbmV3IEVycm9yKGBSZXF1aXJlZCBhIHNhZmUgJHtsfSwgZ290IGEg''@;'; put 'put ''JHthfSAoc2VlICR7Z299KWApfXJldHVybiBhPT09bH1jbGFzcyBCa3tjb25zdHJ1Y3RvcihsKXt0aGlzLmluZXJ0RG9jdW1lbnRIZWxwZXI9bH1nZXRJbmVydEJvZHlFbGVtZW50KGwpe2w9Ijxib2R5PjxyZW1vdmU+PC9yZW1vdmU+IitsO3RyeXtjb25zdCBhPShuZXcgd2luZG93LkRPTVBh''@;'; put 'put ''cnNlcikucGFyc2VGcm9tU3RyaW5nKEw1KGwpLCJ0ZXh0L2h0bWwiKS5ib2R5O3JldHVybiBudWxsPT09YT90aGlzLmluZXJ0RG9jdW1lbnRIZWxwZXIuZ2V0SW5lcnRCb2R5RWxlbWVudChsKTooYS5yZW1vdmVDaGlsZChhLmZpcnN0Q2hpbGQpLGEpfWNhdGNoe3JldHVybiBudWxsfX19Y2xh''@;'; put 'put ''c3MgdkJ7Y29uc3RydWN0b3IobCl7dGhpcy5kZWZhdWx0RG9jPWwsdGhpcy5pbmVydERvY3VtZW50PXRoaXMuZGVmYXVsdERvYy5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoInNhbml0aXphdGlvbi1pbmVydCIpfWdldEluZXJ0Qm9keUVsZW1lbnQobCl7Y29uc3QgYT10aGlz''@;'; put 'put ''LmluZXJ0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtyZXR1cm4gYS5pbm5lckhUTUw9TDUobCksYX19Y29uc3QgYkI9L14oPyFqYXZhc2NyaXB0OikoPzpbYS16MC05Ky4tXSs6fFteJjpcLz8jXSooPzpbXC8/I118JCkpL2k7ZnVuY3Rpb24gVkMoYyl7cmV0dXJuKGM9U3Ry''@;'; put 'put ''aW5nKGMpKS5tYXRjaChiQik/YzoidW5zYWZlOiIrY31mdW5jdGlvbiBUZihjKXtjb25zdCBsPXt9O2Zvcihjb25zdCBhIG9mIGMuc3BsaXQoIiwiKSlsW2FdPSEwO3JldHVybiBsfWZ1bmN0aW9uIHI4KC4uLmMpe2NvbnN0IGw9e307Zm9yKGNvbnN0IGEgb2YgYylmb3IoY29uc3QgZCBpbiBh''@;'; put 'put ''KWEuaGFzT3duUHJvcGVydHkoZCkmJihsW2RdPSEwKTtyZXR1cm4gbH1jb25zdCB6az1UZigiYXJlYSxicixjb2wsaHIsaW1nLHdiciIpLFVrPVRmKCJjb2xncm91cCxkZCxkdCxsaSxwLHRib2R5LHRkLHRmb290LHRoLHRoZWFkLHRyIiksWms9VGYoInJwLHJ0IiksQkM9cjgoemsscjgoVWss''@;'; put 'put ''VGYoImFkZHJlc3MsYXJ0aWNsZSxhc2lkZSxibG9ja3F1b3RlLGNhcHRpb24sY2VudGVyLGRlbCxkZXRhaWxzLGRpYWxvZyxkaXIsZGl2LGRsLGZpZ3VyZSxmaWdjYXB0aW9uLGZvb3RlcixoMSxoMixoMyxoNCxoNSxoNixoZWFkZXIsaGdyb3VwLGhyLGlucyxtYWluLG1hcCxtZW51LG5hdixv''@;'; put 'put ''bCxwcmUsc2VjdGlvbixzdW1tYXJ5LHRhYmxlLHVsIikpLHI4KFprLFRmKCJhLGFiYnIsYWNyb255bSxhdWRpbyxiLGJkaSxiZG8sYmlnLGJyLGNpdGUsY29kZSxkZWwsZGZuLGVtLGZvbnQsaSxpbWcsaW5zLGtiZCxsYWJlbCxtYXAsbWFyayxwaWN0dXJlLHEscnVieSxycCxydCxzLHNhbXAs''@;'; put 'put ''c21hbGwsc291cmNlLHNwYW4sc3RyaWtlLHN0cm9uZyxzdWIsc3VwLHRpbWUsdHJhY2ssdHQsdSx2YXIsdmlkZW8iKSkscjgoWmssVWspKSxqQz1UZigiYmFja2dyb3VuZCxjaXRlLGhyZWYsaXRlbXR5cGUsbG9uZ2Rlc2MscG9zdGVyLHNyYyx4bGluazpocmVmIiksV2s9cjgoakMsVGYoImFi''@;'; put 'put ''YnIsYWNjZXNza2V5LGFsaWduLGFsdCxhdXRvcGxheSxheGlzLGJnY29sb3IsYm9yZGVyLGNlbGxwYWRkaW5nLGNlbGxzcGFjaW5nLGNsYXNzLGNsZWFyLGNvbG9yLGNvbHMsY29sc3Bhbixjb21wYWN0LGNvbnRyb2xzLGNvb3JkcyxkYXRldGltZSxkZWZhdWx0LGRpcixkb3dubG9hZCxmYWNl''@;'; put 'put ''LGhlYWRlcnMsaGVpZ2h0LGhpZGRlbixocmVmbGFuZyxoc3BhY2UsaXNtYXAsaXRlbXNjb3BlLGl0ZW1wcm9wLGtpbmQsbGFiZWwsbGFuZyxsYW5ndWFnZSxsb29wLG1lZGlhLG11dGVkLG5vaHJlZixub3dyYXAsb3BlbixwcmVsb2FkLHJlbCxyZXYscm9sZSxyb3dzLHJvd3NwYW4scnVsZXMs''@;'; put 'put ''c2NvcGUsc2Nyb2xsaW5nLHNoYXBlLHNpemUsc2l6ZXMsc3BhbixzcmNsYW5nLHNyY3NldCxzdGFydCxzdW1tYXJ5LHRhYmluZGV4LHRhcmdldCx0aXRsZSx0cmFuc2xhdGUsdHlwZSx1c2VtYXAsdmFsaWduLHZhbHVlLHZzcGFjZSx3aWR0aCIpLFRmKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQs''@;'; put 'put ''YXJpYS1hdG9taWMsYXJpYS1hdXRvY29tcGxldGUsYXJpYS1idXN5LGFyaWEtY2hlY2tlZCxhcmlhLWNvbGNvdW50LGFyaWEtY29saW5kZXgsYXJpYS1jb2xzcGFuLGFyaWEtY29udHJvbHMsYXJpYS1jdXJyZW50LGFyaWEtZGVzY3JpYmVkYnksYXJpYS1kZXRhaWxzLGFyaWEtZGlzYWJsZWQs''@;'; put 'put ''YXJpYS1kcm9wZWZmZWN0LGFyaWEtZXJyb3JtZXNzYWdlLGFyaWEtZXhwYW5kZWQsYXJpYS1mbG93dG8sYXJpYS1ncmFiYmVkLGFyaWEtaGFzcG9wdXAsYXJpYS1oaWRkZW4sYXJpYS1pbnZhbGlkLGFyaWEta2V5c2hvcnRjdXRzLGFyaWEtbGFiZWwsYXJpYS1sYWJlbGxlZGJ5LGFyaWEtbGV2''@;'; put 'put ''ZWwsYXJpYS1saXZlLGFyaWEtbW9kYWwsYXJpYS1tdWx0aWxpbmUsYXJpYS1tdWx0aXNlbGVjdGFibGUsYXJpYS1vcmllbnRhdGlvbixhcmlhLW93bnMsYXJpYS1wbGFjZWhvbGRlcixhcmlhLXBvc2luc2V0LGFyaWEtcHJlc3NlZCxhcmlhLXJlYWRvbmx5LGFyaWEtcmVsZXZhbnQsYXJpYS1y''@;'; put 'put ''ZXF1aXJlZCxhcmlhLXJvbGVkZXNjcmlwdGlvbixhcmlhLXJvd2NvdW50LGFyaWEtcm93aW5kZXgsYXJpYS1yb3dzcGFuLGFyaWEtc2VsZWN0ZWQsYXJpYS1zZXRzaXplLGFyaWEtc29ydCxhcmlhLXZhbHVlbWF4LGFyaWEtdmFsdWVtaW4sYXJpYS12YWx1ZW5vdyxhcmlhLXZhbHVldGV4dCIp''@;'; put 'put ''KSx5Qj1UZigic2NyaXB0LHN0eWxlLHRlbXBsYXRlIik7Y2xhc3MgWWt7Y29uc3RydWN0b3IoKXt0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMSx0aGlzLmJ1Zj1bXX1zYW5pdGl6ZUNoaWxkcmVuKGwpe2xldCBhPWwuZmlyc3RDaGlsZCxkPSEwLGg9W107Zm9yKDthOylpZihhLm5vZGVUeXBl''@;'; put 'put ''PT09Tm9kZS5FTEVNRU5UX05PREU/ZD10aGlzLnN0YXJ0RWxlbWVudChhKTphLm5vZGVUeXBlPT09Tm9kZS5URVhUX05PREU/dGhpcy5jaGFycyhhLm5vZGVWYWx1ZSk6dGhpcy5zYW5pdGl6ZWRTb21ldGhpbmc9ITAsZCYmYS5maXJzdENoaWxkKWgucHVzaChhKSxhPUNCKGEpO2Vsc2UgZm9y''@;'; put 'put ''KDthOyl7YS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiZ0aGlzLmVuZEVsZW1lbnQoYSk7bGV0IGY9d0IoYSk7aWYoZil7YT1mO2JyZWFrfWE9aC5wb3AoKX1yZXR1cm4gdGhpcy5idWYuam9pbigiIil9c3RhcnRFbGVtZW50KGwpe2NvbnN0IGE9R2sobCkudG9Mb3dlckNhc2UoKTtp''@;'; put 'put ''ZighQkMuaGFzT3duUHJvcGVydHkoYSkpcmV0dXJuIHRoaXMuc2FuaXRpemVkU29tZXRoaW5nPSEwLCF5Qi5oYXNPd25Qcm9wZXJ0eShhKTt0aGlzLmJ1Zi5wdXNoKCI8IiksdGhpcy5idWYucHVzaChhKTtjb25zdCBkPWwuYXR0cmlidXRlcztmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grKyl7''@;'; put 'put ''Y29uc3QgZj1kLml0ZW0oaCksdj1mLm5hbWUsTT12LnRvTG93ZXJDYXNlKCk7aWYoIVdrLmhhc093blByb3BlcnR5KE0pKXt0aGlzLnNhbml0aXplZFNvbWV0aGluZz0hMDtjb250aW51ZX1sZXQgRD1mLnZhbHVlO2pDW01dJiYoRD1WQyhEKSksdGhpcy5idWYucHVzaCgiICIsdiwnPSInLEtr''@;'; put 'put ''KEQpLCciJyl9cmV0dXJuIHRoaXMuYnVmLnB1c2goIj4iKSwhMH1lbmRFbGVtZW50KGwpe2NvbnN0IGE9R2sobCkudG9Mb3dlckNhc2UoKTtCQy5oYXNPd25Qcm9wZXJ0eShhKSYmIXprLmhhc093blByb3BlcnR5KGEpJiYodGhpcy5idWYucHVzaCgiPC8iKSx0aGlzLmJ1Zi5wdXNoKGEpLHRo''@;'; put 'put ''aXMuYnVmLnB1c2goIj4iKSl9Y2hhcnMobCl7dGhpcy5idWYucHVzaChLayhsKSl9fWZ1bmN0aW9uIHdCKGMpe2NvbnN0IGw9Yy5uZXh0U2libGluZztpZihsJiZjIT09bC5wcmV2aW91c1NpYmxpbmcpdGhyb3cgJGsobCk7cmV0dXJuIGx9ZnVuY3Rpb24gQ0IoYyl7Y29uc3QgbD1jLmZpcnN0''@;'; put 'put ''Q2hpbGQ7aWYobCYmZnVuY3Rpb24gX0IoYyxsKXtyZXR1cm4oYy5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihsKSZOb2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5FRF9CWSkhPT1Ob2RlLkRPQ1VNRU5UX1BPU0lUSU9OX0NPTlRBSU5FRF9CWX0oYyxsKSl0aHJvdyAkayhsKTtyZXR1cm4g''@;'; put 'put ''bH1mdW5jdGlvbiBHayhjKXtjb25zdCBsPWMubm9kZU5hbWU7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBsP2w6IkZPUk0ifWZ1bmN0aW9uICRrKGMpe3JldHVybiBuZXcgRXJyb3IoYEZhaWxlZCB0byBzYW5pdGl6ZSBodG1sIGJlY2F1c2UgdGhlIGVsZW1lbnQgaXMgY2xvYmJlcmVkOiAke2Mu''@;'; put 'put ''b3V0ZXJIVE1MfWApfWNvbnN0IFNCPS9bXHVEODAwLVx1REJGRl1bXHVEQzAwLVx1REZGRl0vZyxNQj0vKFteXCMtfiB8IV0pL2c7ZnVuY3Rpb24gS2soYyl7cmV0dXJuIGMucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoU0IsZnVuY3Rpb24obCl7cmV0dXJuIiYjIisoMTAyNCoobC5j''@;'; put 'put ''aGFyQ29kZUF0KDApLTU1Mjk2KSsobC5jaGFyQ29kZUF0KDEpLTU2MzIwKSs2NTUzNikrIjsifSkucmVwbGFjZShNQixmdW5jdGlvbihsKXtyZXR1cm4iJiMiK2wuY2hhckNvZGVBdCgwKSsiOyJ9KS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKX1sZXQgS3Y7ZnVu''@;'; put 'put ''Y3Rpb24gekMoYyl7cmV0dXJuImNvbnRlbnQiaW4gYyYmZnVuY3Rpb24gRUIoYyl7cmV0dXJuIGMubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERSYmIlRFTVBMQVRFIj09PWMubm9kZU5hbWV9KGMpP2MuY29udGVudDpudWxsfXZhciBQNT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5PTkU9''@;'; put 'put ''MF09Ik5PTkUiLGNbYy5IVE1MPTFdPSJIVE1MIixjW2MuU1RZTEU9Ml09IlNUWUxFIixjW2MuU0NSSVBUPTNdPSJTQ1JJUFQiLGNbYy5VUkw9NF09IlVSTCIsY1tjLlJFU09VUkNFX1VSTD01XT0iUkVTT1VSQ0VfVVJMIixjfShQNXx8e30pO2Z1bmN0aW9uIEY0KGMpe2NvbnN0IGw9aTgoKTty''@;'; put 'put ''ZXR1cm4gbD9QayhsLnNhbml0aXplKFA1LkhUTUwsYyl8fCIiKTpPNChjLCJIVE1MIik/UGsoZDIoYykpOmZ1bmN0aW9uIHhCKGMsbCl7bGV0IGE9bnVsbDt0cnl7S3Y9S3Z8fGZ1bmN0aW9uIE5DKGMpe2NvbnN0IGw9bmV3IHZCKGMpO3JldHVybiBmdW5jdGlvbiBqaygpe3RyeXtyZXR1cm4h''@;'; put 'put ''IShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKEw1KCIiKSwidGV4dC9odG1sIil9Y2F0Y2h7cmV0dXJuITF9fSgpP25ldyBCayhsKTpsfShjKTtsZXQgZD1sP1N0cmluZyhsKToiIjthPUt2LmdldEluZXJ0Qm9keUVsZW1lbnQoZCk7bGV0IGg9NSxmPWQ7ZG97aWYoMD09''@;'; put 'put ''PWgpdGhyb3cgbmV3IEVycm9yKCJGYWlsZWQgdG8gc2FuaXRpemUgaHRtbCBiZWNhdXNlIHRoZSBpbnB1dCBpcyB1bnN0YWJsZSIpO2gtLSxkPWYsZj1hLmlubmVySFRNTCxhPUt2LmdldEluZXJ0Qm9keUVsZW1lbnQoZCl9d2hpbGUoZCE9PWYpO3JldHVybiBMNSgobmV3IFlrKS5zYW5pdGl6''@;'; put 'put ''ZUNoaWxkcmVuKHpDKGEpfHxhKSl9ZmluYWxseXtpZihhKXtjb25zdCBkPXpDKGEpfHxhO2Zvcig7ZC5maXJzdENoaWxkOylkLnJlbW92ZUNoaWxkKGQuZmlyc3RDaGlsZCl9fX0oajMoKSxTbyhjKSl9ZnVuY3Rpb24gVUMoYyl7Y29uc3QgbD1pOCgpO3JldHVybiBsP2wuc2FuaXRpemUoUDUu''@;'; put 'put ''VVJMLGMpfHwiIjpPNChjLCJVUkwiKT9kMihjKTpWQyhTbyhjKSl9ZnVuY3Rpb24gcWsoYyl7Y29uc3QgbD1pOCgpO2lmKGwpcmV0dXJuIEhrKGwuc2FuaXRpemUoUDUuUkVTT1VSQ0VfVVJMLGMpfHwiIik7aWYoTzQoYywiUmVzb3VyY2VVUkwiKSlyZXR1cm4gSGsoZDIoYykpO3Rocm93IG5l''@;'; put 'put ''dyBlcig5MDQsITEpfWZ1bmN0aW9uIGk4KCl7Y29uc3QgYz11aSgpO3JldHVybiBjJiZjW0wxXS5zYW5pdGl6ZXJ9Y29uc3QgUkI9L14+fF4tPnw8IS0tfC0tPnwtLSE+fDwhLSQvZyxMQj0vKDx8PikvZyxPQj0iXHUyMDBiJDFcdTIwMGIiO2Z1bmN0aW9uIEtDKGMpe3JldHVybiBjLm93bmVy''@;'; put 'put ''RG9jdW1lbnQuZGVmYXVsdFZpZXd9ZnVuY3Rpb24gVTMoYyl7cmV0dXJuIGMub3duZXJEb2N1bWVudH1mdW5jdGlvbiBGMShjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIEZ1bmN0aW9uP2MoKTpjfXZhciBaMz1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkltcG9ydGFudD0xXT0iSW1wb3J0YW50Iixj''@;'; put 'put ''W2MuRGFzaENhc2U9Ml09IkRhc2hDYXNlIixjfShaM3x8e30pO2xldCBxQztmdW5jdGlvbiBYQyhjLGwpe3JldHVybiBxQyhjLGwpfWZ1bmN0aW9uIEg1KGMsbCxhLGQsaCl7aWYobnVsbCE9ZCl7bGV0IGYsdj0hMTtGdShkKT9mPWQ6UHUoZCkmJih2PSEwLGQ9ZFtCbF0pO2NvbnN0IE09X2wo''@;'; put 'put ''ZCk7MD09PWMmJm51bGwhPT1hP251bGw9PWg/ZWIobCxhLE0pOmo0KGwsYSxNLGh8fG51bGwsITApOjE9PT1jJiZudWxsIT09YT9qNChsLGEsTSxofHxudWxsLCEwKToyPT09Yz9mdW5jdGlvbiBjOChjLGwsYSl7Y29uc3QgZD1XMyhjLGwpO2QmJmZ1bmN0aW9uIGE4KGMsbCxhLGQpe2MucmVt''@;'; put 'put ''b3ZlQ2hpbGQobCxhLGQpfShjLGQsbCxhKX0obCxNLHYpOjM9PT1jJiZsLmRlc3Ryb3lOb2RlKE0pLG51bGwhPWYmJmZ1bmN0aW9uIFlCKGMsbCxhLGQsaCl7Y29uc3QgZj1hW211XTtmIT09X2woYSkmJkg1KGwsYyxkLGYsaCk7Zm9yKGxldCBNPWhjO008YS5sZW5ndGg7TSsrKXtjb25zdCBE''@;'; put 'put ''PWFbTV07dGIoRFtxaV0sRCxjLGwsZCxmKX19KGwsYyxmLGEsaCl9fWZ1bmN0aW9uIFFDKGMsbCl7cmV0dXJuIGMuY3JlYXRlQ29tbWVudChmdW5jdGlvbiBGNShjKXtyZXR1cm4gYy5yZXBsYWNlKFJCLGw9PmwucmVwbGFjZShMQixPQikpfShsKSl9ZnVuY3Rpb24gVjQoYyxsLGEpe3JldHVy''@;'; put 'put ''biBjLmNyZWF0ZUVsZW1lbnQobCxhKX1mdW5jdGlvbiBvRChjLGwpe2xbTDFdLmNoYW5nZURldGVjdGlvblNjaGVkdWxlcj8ubm90aWZ5KDEpLHRiKGMsbCxsW2JhXSwyLG51bGwsbnVsbCl9ZnVuY3Rpb24gdFMoYyxsKXtjb25zdCBhPWNbTzNdLGQ9YS5pbmRleE9mKGwpO2Euc3BsaWNlKGQs''@;'; put 'put ''MSl9ZnVuY3Rpb24gbzgoYyxsKXtpZihjLmxlbmd0aDw9aGMpcmV0dXJuO2NvbnN0IGE9aGMrbCxkPWNbYV07aWYoZCl7Y29uc3QgaD1kW180XTtudWxsIT09aCYmaCE9PWMmJnRTKGgsZCksbD4wJiYoY1thLTFdW0hjXT1kW0hjXSk7Y29uc3QgZj1MdShjLGhjK2wpOyFmdW5jdGlvbiBpRChj''@;'; put 'put ''LGwpe29EKGMsbCksbFtCbF09bnVsbCxsW25jXT1udWxsfShkW3FpXSxkKTtjb25zdCB2PWZbdWRdO251bGwhPT12JiZ2LmRldGFjaFZpZXcoZltxaV0pLGRbdWNdPW51bGwsZFtIY109bnVsbCxkW1pvXSY9LTEyOX1yZXR1cm4gZH1mdW5jdGlvbiBCNChjLGwpe2lmKCEoMjU2JmxbWm9dKSl7''@;'; put 'put ''Y29uc3QgYT1sW2JhXTthLmRlc3Ryb3lOb2RlJiZ0YihjLGwsYSwzLG51bGwsbnVsbCksZnVuY3Rpb24gekIoYyl7bGV0IGw9Y1t2Zl07aWYoIWwpcmV0dXJuIG5TKGNbcWldLGMpO2Zvcig7bDspe2xldCBhPW51bGw7aWYoUHUobCkpYT1sW3ZmXTtlbHNle2NvbnN0IGQ9bFtoY107ZCYmKGE9''@;'; put 'put ''ZCl9aWYoIWEpe2Zvcig7bCYmIWxbSGNdJiZsIT09YzspUHUobCkmJm5TKGxbcWldLGwpLGw9bFt1Y107bnVsbD09PWwmJihsPWMpLFB1KGwpJiZuUyhsW3FpXSxsKSxhPWwmJmxbSGNdfWw9YX19KGwpfX1mdW5jdGlvbiBuUyhjLGwpe2lmKDI1NiZsW1pvXSlyZXR1cm47Y29uc3QgYT1fZShu''@;'; put 'put ''dWxsKTt0cnl7bFtab10mPS0xMjksbFtab118PTI1NixsW3lmXSYmZnVuY3Rpb24gQShjKXtpZih3ZShjKSxzZShjKSlmb3IobGV0IGw9MDtsPGMucHJvZHVjZXJOb2RlLmxlbmd0aDtsKyspdGUoYy5wcm9kdWNlck5vZGVbbF0sYy5wcm9kdWNlckluZGV4T2ZUaGlzW2xdKTtjLnByb2R1Y2Vy''@;'; put 'put ''Tm9kZS5sZW5ndGg9Yy5wcm9kdWNlckxhc3RSZWFkVmVyc2lvbi5sZW5ndGg9Yy5wcm9kdWNlckluZGV4T2ZUaGlzLmxlbmd0aD0wLGMubGl2ZUNvbnN1bWVyTm9kZSYmKGMubGl2ZUNvbnN1bWVyTm9kZS5sZW5ndGg9Yy5saXZlQ29uc3VtZXJJbmRleE9mVGhpcy5sZW5ndGg9MCl9KGxbeWZd''@;'; put 'put ''KSxmdW5jdGlvbiBaQihjLGwpe2xldCBhO2lmKG51bGwhPWMmJm51bGwhPShhPWMuZGVzdHJveUhvb2tzKSlmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrPTIpe2NvbnN0IGg9bFthW2RdXTtpZighKGggaW5zdGFuY2VvZiBQMSkpe2NvbnN0IGY9YVtkKzFdO2lmKEFycmF5LmlzQXJyYXkoZikp''@;'; put 'put ''Zm9yKGxldCB2PTA7djxmLmxlbmd0aDt2Kz0yKXtjb25zdCBNPWhbZlt2XV0sRD1mW3YrMV07bzIoNCxNLEQpO3RyeXtELmNhbGwoTSl9ZmluYWxseXtvMig1LE0sRCl9fWVsc2V7bzIoNCxoLGYpO3RyeXtmLmNhbGwoaCl9ZmluYWxseXtvMig1LGgsZil9fX19fShjLGwpLGZ1bmN0aW9uIGFE''@;'; put 'put ''KGMsbCl7Y29uc3QgYT1jLmNsZWFudXAsZD1sW0owXTtpZihudWxsIT09YSlmb3IobGV0IGY9MDtmPGEubGVuZ3RoLTE7Zis9MilpZigic3RyaW5nIj09dHlwZW9mIGFbZl0pe2NvbnN0IHY9YVtmKzNdO3Y+PTA/ZFt2XSgpOmRbLXZdLnVuc3Vic2NyaWJlKCksZis9Mn1lbHNlIGFbZl0uY2Fs''@;'; put 'put ''bChkW2FbZisxXV0pO251bGwhPT1kJiYobFtKMF09bnVsbCk7Y29uc3QgaD1sW2UyXTtpZihudWxsIT09aCl7bFtlMl09bnVsbDtmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKykoMCxoW2ZdKSgpfX0oYyxsKSwxPT09bFtxaV0udHlwZSYmbFtiYV0uZGVzdHJveSgpO2NvbnN0IGQ9bFtfNF07''@;'; put 'put ''aWYobnVsbCE9PWQmJkZ1KGxbdWNdKSl7ZCE9PWxbdWNdJiZ0UyhkLGwpO2NvbnN0IGg9bFt1ZF07bnVsbCE9PWgmJmguZGV0YWNoVmlldyhjKX0hZnVuY3Rpb24gUFYoYyl7Q0MuZGVsZXRlKGNbdzBdKX0obCl9ZmluYWxseXtfZShhKX19ZnVuY3Rpb24gUXYoYyxsLGEpe3JldHVybiBmdW5j''@;'; put 'put ''dGlvbiByUyhjLGwsYSl7bGV0IGQ9bDtmb3IoO251bGwhPT1kJiY0MCZkLnR5cGU7KWQ9KGw9ZCkucGFyZW50O2lmKG51bGw9PT1kKXJldHVybiBhW0JsXTt7Y29uc3R7Y29tcG9uZW50T2Zmc2V0Omh9PWQ7aWYoaD4tMSl7Y29uc3R7ZW5jYXBzdWxhdGlvbjpmfT1jLmRhdGFbZC5kaXJlY3Rp''@;'; put 'put ''dmVTdGFydCtoXTtpZihmPT09JHMuTm9uZXx8Zj09PSRzLkVtdWxhdGVkKXJldHVybiBudWxsfXJldHVybiBMMChkLGEpfX0oYyxsLnBhcmVudCxhKX1mdW5jdGlvbiBqNChjLGwsYSxkLGgpe2MuaW5zZXJ0QmVmb3JlKGwsYSxkLGgpfWZ1bmN0aW9uIGViKGMsbCxhKXtjLmFwcGVuZENoaWxk''@;'; put 'put ''KGwsYSl9ZnVuY3Rpb24gc0QoYyxsLGEsZCxoKXtudWxsIT09ZD9qNChjLGwsYSxkLGgpOmViKGMsbCxhKX1mdW5jdGlvbiBXMyhjLGwpe3JldHVybiBjLnBhcmVudE5vZGUobCl9ZnVuY3Rpb24gbDgoYyxsLGEpe3JldHVybiBZMyhjLGwsYSl9bGV0IGFTLFkzPWZ1bmN0aW9uIG9TKGMsbCxh''@;'; put 'put ''KXtyZXR1cm4gNDAmYy50eXBlP0wwKGMsYSk6bnVsbH07ZnVuY3Rpb24gczAoYyxsLGEsZCl7Y29uc3QgaD1RdihjLGQsbCksZj1sW2JhXSxNPWw4KGQucGFyZW50fHxsW25jXSxkLGwpO2lmKG51bGwhPWgpaWYoQXJyYXkuaXNBcnJheShhKSlmb3IobGV0IEQ9MDtEPGEubGVuZ3RoO0QrKylz''@;'; put 'put ''RChmLGgsYVtEXSxNLCExKTtlbHNlIHNEKGYsaCxhLE0sITEpO3ZvaWQgMCE9PWFTJiZhUyhmLGQsbCxhLGgpfWZ1bmN0aW9uIEczKGMsbCl7aWYobnVsbCE9PWwpe2NvbnN0IGE9bC50eXBlO2lmKDMmYSlyZXR1cm4gTDAobCxjKTtpZig0JmEpcmV0dXJuIGxTKC0xLGNbbC5pbmRleF0pO2lm''@;'; put 'put ''KDgmYSl7Y29uc3QgZD1sLmNoaWxkO2lmKG51bGwhPT1kKXJldHVybiBHMyhjLGQpO3tjb25zdCBoPWNbbC5pbmRleF07cmV0dXJuIEZ1KGgpP2xTKC0xLGgpOl9sKGgpfX1pZigzMiZhKXJldHVybiBYQyhsLGMpKCl8fF9sKGNbbC5pbmRleF0pO3tjb25zdCBkPWxEKGMsbCk7cmV0dXJuIG51''@;'; put 'put ''bGwhPT1kP0FycmF5LmlzQXJyYXkoZCk/ZFswXTpHMyhNNChjW2psXSksZCk6RzMoYyxsLm5leHQpfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBsRChjLGwpe3JldHVybiBudWxsIT09bD9jW2psXVtuY10ucHJvamVjdGlvbltsLnByb2plY3Rpb25dOm51bGx9ZnVuY3Rpb24gbFMoYyxsKXtjb25z''@;'; put 'put ''dCBhPWhjK2MrMTtpZihhPGwubGVuZ3RoKXtjb25zdCBkPWxbYV0saD1kW3FpXS5maXJzdENoaWxkO2lmKG51bGwhPT1oKXJldHVybiBHMyhkLGgpfXJldHVybiBsW211XX1mdW5jdGlvbiBjUyhjLGwsYSxkLGgsZix2KXtmb3IoO251bGwhPWE7KXtjb25zdCBNPWRbYS5pbmRleF0sRD1hLnR5''@;'; put 'put ''cGU7aWYodiYmMD09PWwmJihNJiZCdShfbChNKSxkKSxhLmZsYWdzfD0yKSwzMiZ+YS5mbGFncylpZig4JkQpY1MoYyxsLGEuY2hpbGQsZCxoLGYsITEpLEg1KGwsYyxoLE0sZik7ZWxzZSBpZigzMiZEKXtjb25zdCBaPVhDKGEsZCk7bGV0IG5lO2Zvcig7bmU9WigpOylINShsLGMsaCxuZSxm''@;'; put 'put ''KTtINShsLGMsaCxNLGYpfWVsc2UgMTYmRD91RChjLGwsZCxhLGgsZik6SDUobCxjLGgsTSxmKTthPXY/YS5wcm9qZWN0aW9uTmV4dDphLm5leHR9fWZ1bmN0aW9uIHRiKGMsbCxhLGQsaCxmKXtjUyhhLGQsYy5maXJzdENoaWxkLGwsaCxmLCExKX1mdW5jdGlvbiB1RChjLGwsYSxkLGgsZil7''@;'; put 'put ''Y29uc3Qgdj1hW2psXSxEPXZbbmNdLnByb2plY3Rpb25bZC5wcm9qZWN0aW9uXTtpZihBcnJheS5pc0FycmF5KEQpKWZvcihsZXQgWj0wO1o8RC5sZW5ndGg7WisrKUg1KGwsYyxoLERbWl0sZik7ZWxzZXtsZXQgWj1EO2NvbnN0IG5lPXZbdWNdO052KGQpJiYoWi5mbGFnc3w9MTI4KSxjUyhj''@;'; put 'put ''LGwsWixuZSxoLGYsITApfX1mdW5jdGlvbiBmRChjLGwsYSl7IiI9PT1hP2MucmVtb3ZlQXR0cmlidXRlKGwsImNsYXNzIik6Yy5zZXRBdHRyaWJ1dGUobCwiY2xhc3MiLGEpfWZ1bmN0aW9uIHBEKGMsbCxhKXtjb25zdHttZXJnZWRBdHRyczpkLGNsYXNzZXM6aCxzdHlsZXM6Zn09YTtudWxs''@;'; put 'put ''IT09ZCYmZjQoYyxsLGQpLG51bGwhPT1oJiZmRChjLGwsaCksbnVsbCE9PWYmJmZ1bmN0aW9uIGhEKGMsbCxhKXtjLnNldEF0dHJpYnV0ZShsLCJzdHlsZSIsYSl9KGMsbCxmKX1jb25zdCBJYT17fTtmdW5jdGlvbiBmZShjPTEpe3VTKG9zKCksdWkoKSxOdSgpK2MsITEpfWZ1bmN0aW9uIHVT''@;'; put 'put ''KGMsbCxhLGQpe2lmKCFkKWlmKDMmfmxbWm9dKXtjb25zdCBmPWMucHJlT3JkZXJIb29rcztudWxsIT09ZiYmQXYobCxmLDAsYSl9ZWxzZXtjb25zdCBmPWMucHJlT3JkZXJDaGVja0hvb2tzO251bGwhPT1mJiZUdihsLGYsYSl9eDQoYSl9ZnVuY3Rpb24gR2UoYyxsPW9vLkRlZmF1bHQpe2Nv''@;'; put 'put ''bnN0IGE9dWkoKTtyZXR1cm4gbnVsbD09PWE/TXIoYyxsKTppayhsbCgpLGEsR2koYyksbCl9ZnVuY3Rpb24gbUQoYyxsLGEsZCxoLGYpe2NvbnN0IHY9X2UobnVsbCk7dHJ5e2xldCBNPW51bGw7aCZabi5TaWduYWxCYXNlZCYmKE09bFtkXVttZV0pLG51bGwhPT1NJiZ2b2lkIDAhPT1NLnRy''@;'; put 'put ''YW5zZm9ybUZuJiYoZj1NLnRyYW5zZm9ybUZuKGYpKSxoJlpuLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtJiYoZj1jLmlucHV0VHJhbnNmb3Jtc1tkXS5jYWxsKGwsZikpLG51bGwhPT1jLnNldElucHV0P2Muc2V0SW5wdXQobCxNLGYsYSxkKTpOQShsLE0sZCxmKX1maW5hbGx5e19lKHYp''@;'; put 'put ''fX1mdW5jdGlvbiBuYihjLGwsYSxkLGgsZix2LE0sRCxaLG5lKXtjb25zdCBjZT1sLmJsdWVwcmludC5zbGljZSgpO3JldHVybiBjZVtCbF09aCxjZVtab109MjA0fGQsKG51bGwhPT1afHxjJiYyMDQ4JmNbWm9dKSYmKGNlW1pvXXw9MjA0OCksUXcoY2UpLGNlW3VjXT1jZVtvMF09YyxjZVtz''@;'; put 'put ''bF09YSxjZVtMMV09dnx8YyYmY1tMMV0sY2VbYmFdPU18fGMmJmNbYmFdLGNlW2RjXT1EfHxjJiZjW2RjXXx8bnVsbCxjZVtuY109ZixjZVt3MF09ZnVuY3Rpb24gTFYoKXtyZXR1cm4gUlYrK30oKSxjZVt0dV09bmUsY2VbUWhdPVosY2VbamxdPTI9PWwudHlwZT9jW2psXTpjZSxjZX1mdW5j''@;'; put 'put ''dGlvbiBONShjLGwsYSxkLGgpe2xldCBmPWMuZGF0YVtsXTtpZihudWxsPT09ZilmPWZ1bmN0aW9uIGRTKGMsbCxhLGQsaCl7Y29uc3QgZj1uQygpLHY9ckMoKSxEPWMuZGF0YVtsXT1mdW5jdGlvbiBDRChjLGwsYSxkLGgsZil7bGV0IHY9bD9sLmluamVjdG9ySW5kZXg6LTEsTT0wO3JldHVy''@;'; put 'put ''biB2NSgpJiYoTXw9MTI4KSx7dHlwZTphLGluZGV4OmQsaW5zZXJ0QmVmb3JlSW5kZXg6bnVsbCxpbmplY3RvckluZGV4OnYsZGlyZWN0aXZlU3RhcnQ6LTEsZGlyZWN0aXZlRW5kOi0xLGRpcmVjdGl2ZVN0eWxpbmdMYXN0Oi0xLGNvbXBvbmVudE9mZnNldDotMSxwcm9wZXJ0eUJpbmRpbmdz''@;'; put 'put ''Om51bGwsZmxhZ3M6TSxwcm92aWRlckluZGV4ZXM6MCx2YWx1ZTpoLGF0dHJzOmYsbWVyZ2VkQXR0cnM6bnVsbCxsb2NhbE5hbWVzOm51bGwsaW5pdGlhbElucHV0czp2b2lkIDAsaW5wdXRzOm51bGwsb3V0cHV0czpudWxsLHRWaWV3Om51bGwsbmV4dDpudWxsLHByZXY6bnVsbCxwcm9qZWN0''@;'; put 'put ''aW9uTmV4dDpudWxsLGNoaWxkOm51bGwscGFyZW50OmwscHJvamVjdGlvbjpudWxsLHN0eWxlczpudWxsLHN0eWxlc1dpdGhvdXRIb3N0Om51bGwscmVzaWR1YWxTdHlsZXM6dm9pZCAwLGNsYXNzZXM6bnVsbCxjbGFzc2VzV2l0aG91dEhvc3Q6bnVsbCxyZXNpZHVhbENsYXNzZXM6dm9pZCAw''@;'; put 'put ''LGNsYXNzQmluZGluZ3M6MCxzdHlsZUJpbmRpbmdzOjB9fSgwLHY/ZjpmJiZmLnBhcmVudCxhLGwsZCxoKTtyZXR1cm4gbnVsbD09PWMuZmlyc3RDaGlsZCYmKGMuZmlyc3RDaGlsZD1EKSxudWxsIT09ZiYmKHY/bnVsbD09Zi5jaGlsZCYmbnVsbCE9PUQucGFyZW50JiYoZi5jaGlsZD1EKTpu''@;'; put 'put ''dWxsPT09Zi5uZXh0JiYoZi5uZXh0PUQsRC5wcmV2PWYpKSxEfShjLGwsYSxkLGgpLGZ1bmN0aW9uIGxWKCl7cmV0dXJuIENhLmxGcmFtZS5pbkkxOG59KCkmJihmLmZsYWdzfD0zMik7ZWxzZSBpZig2NCZmLnR5cGUpe2YudHlwZT1hLGYudmFsdWU9ZCxmLmF0dHJzPWg7Y29uc3Qgdj1mdW5j''@;'; put 'put ''dGlvbiBZNigpe2NvbnN0IGM9Q2EubEZyYW1lLGw9Yy5jdXJyZW50VE5vZGU7cmV0dXJuIGMuaXNQYXJlbnQ/bDpsLnBhcmVudH0oKTtmLmluamVjdG9ySW5kZXg9bnVsbD09PXY/LTE6di5pbmplY3RvckluZGV4fXJldHVybiBzMihmLCEwKSxmfWZ1bmN0aW9uIHU4KGMsbCxhLGQpe2lmKDA9''@;'; put 'put ''PT1hKXJldHVybi0xO2NvbnN0IGg9bC5sZW5ndGg7Zm9yKGxldCBmPTA7ZjxhO2YrKylsLnB1c2goZCksYy5ibHVlcHJpbnQucHVzaChkKSxjLmRhdGEucHVzaChudWxsKTtyZXR1cm4gaH1mdW5jdGlvbiB2RChjLGwsYSxkLGgpe2NvbnN0IGY9TnUoKSx2PTImZDt0cnl7eDQoLTEpLHYmJmwu''@;'; put 'put ''bGVuZ3RoPndhJiZ1UyhjLGwsd2EsITEpLG8yKHY/MjowLGgpLGEoZCxoKX1maW5hbGx5e3g0KGYpLG8yKHY/MzoxLGgpfX1mdW5jdGlvbiBoUyhjLGwsYSl7aWYobnUobCkpe2NvbnN0IGQ9X2UobnVsbCk7dHJ5e2NvbnN0IGY9bC5kaXJlY3RpdmVFbmQ7Zm9yKGxldCB2PWwuZGlyZWN0aXZl''@;'; put 'put ''U3RhcnQ7djxmO3YrKyl7Y29uc3QgTT1jLmRhdGFbdl07TS5jb250ZW50UXVlcmllcyYmTS5jb250ZW50UXVlcmllcygxLGFbdl0sdil9fWZpbmFsbHl7X2UoZCl9fX1mdW5jdGlvbiBmUyhjLGwsYSl7R0EoKSYmKGZ1bmN0aW9uIG5qKGMsbCxhLGQpe2NvbnN0IGg9YS5kaXJlY3RpdmVTdGFy''@;'; put 'put ''dCxmPWEuZGlyZWN0aXZlRW5kO19mKGEpJiZmdW5jdGlvbiBsaihjLGwsYSl7Y29uc3QgZD1MMChsLGMpLGg9cmIoYSk7bGV0IHY9MTY7YS5zaWduYWxzP3Y9NDA5NjphLm9uUHVzaCYmKHY9NjQpO2NvbnN0IE09ZDgoYyxuYihjLGgsbnVsbCx2LGQsbCxudWxsLGNbTDFdLnJlbmRlcmVyRmFj''@;'; put 'put ''dG9yeS5jcmVhdGVSZW5kZXJlcihkLGEpLG51bGwsbnVsbCxudWxsKSk7Y1tsLmluZGV4XT1NfShsLGEsYy5kYXRhW2grYS5jb21wb25lbnRPZmZzZXRdKSxjLmZpcnN0Q3JlYXRlUGFzc3x8UnYoYSxsKSxCdShkLGwpO2NvbnN0IHY9YS5pbml0aWFsSW5wdXRzO2ZvcihsZXQgTT1oO008ZjtN''@;'; put 'put ''Kyspe2NvbnN0IEQ9Yy5kYXRhW01dLFo9VDQobCxjLE0sYSk7QnUoWixsKSxudWxsIT09diYmaWIoMCxNLWgsWixELDAsdiksTmMoRCkmJihPMShhLmluZGV4LGwpW3NsXT1UNChsLGMsTSxhKSl9fShjLGwsYSxMMChhLGwpKSwhKDY0Jn5hLmZsYWdzKSYmRUQoYyxsLGEpKX1mdW5jdGlvbiBw''@;'; put 'put ''UyhjLGwsYT1MMCl7Y29uc3QgZD1sLmxvY2FsTmFtZXM7aWYobnVsbCE9PWQpe2xldCBoPWwuaW5kZXgrMTtmb3IobGV0IGY9MDtmPGQubGVuZ3RoO2YrPTIpe2NvbnN0IHY9ZFtmKzFdLE09LTE9PT12P2EobCxjKTpjW3ZdO2NbaCsrXT1NfX19ZnVuY3Rpb24gcmIoYyl7Y29uc3QgbD1jLnRW''@;'; put 'put ''aWV3O3JldHVybiBudWxsPT09bHx8bC5pbmNvbXBsZXRlRmlyc3RQYXNzP2MudFZpZXc9Z1MoMSxudWxsLGMudGVtcGxhdGUsYy5kZWNscyxjLnZhcnMsYy5kaXJlY3RpdmVEZWZzLGMucGlwZURlZnMsYy52aWV3UXVlcnksYy5zY2hlbWFzLGMuY29uc3RzLGMuaWQpOmx9ZnVuY3Rpb24gZ1Mo''@;'; put 'put ''YyxsLGEsZCxoLGYsdixNLEQsWixuZSl7Y29uc3QgY2U9d2ErZCxiZT1jZStoLEVlPWZ1bmN0aW9uICRCKGMsbCl7Y29uc3QgYT1bXTtmb3IobGV0IGQ9MDtkPGw7ZCsrKWEucHVzaChkPGM/bnVsbDpJYSk7cmV0dXJuIGF9KGNlLGJlKSxCZT0iZnVuY3Rpb24iPT10eXBlb2YgWj9aKCk6Wjty''@;'; put 'put ''ZXR1cm4gRWVbcWldPXt0eXBlOmMsYmx1ZXByaW50OkVlLHRlbXBsYXRlOmEscXVlcmllczpudWxsLHZpZXdRdWVyeTpNLGRlY2xUTm9kZTpsLGRhdGE6RWUuc2xpY2UoKS5maWxsKG51bGwsY2UpLGJpbmRpbmdTdGFydEluZGV4OmNlLGV4cGFuZG9TdGFydEluZGV4OmJlLGhvc3RCaW5kaW5n''@;'; put 'put ''T3BDb2RlczpudWxsLGZpcnN0Q3JlYXRlUGFzczohMCxmaXJzdFVwZGF0ZVBhc3M6ITAsc3RhdGljVmlld1F1ZXJpZXM6ITEsc3RhdGljQ29udGVudFF1ZXJpZXM6ITEscHJlT3JkZXJIb29rczpudWxsLHByZU9yZGVyQ2hlY2tIb29rczpudWxsLGNvbnRlbnRIb29rczpudWxsLGNvbnRlbnRD''@;'; put 'put ''aGVja0hvb2tzOm51bGwsdmlld0hvb2tzOm51bGwsdmlld0NoZWNrSG9va3M6bnVsbCxkZXN0cm95SG9va3M6bnVsbCxjbGVhbnVwOm51bGwsY29udGVudFF1ZXJpZXM6bnVsbCxjb21wb25lbnRzOm51bGwsZGlyZWN0aXZlUmVnaXN0cnk6ImZ1bmN0aW9uIj09dHlwZW9mIGY/ZigpOmYscGlw''@;'; put 'put ''ZVJlZ2lzdHJ5OiJmdW5jdGlvbiI9PXR5cGVvZiB2P3YoKTp2LGZpcnN0Q2hpbGQ6bnVsbCxzY2hlbWFzOkQsY29uc3RzOkJlLGluY29tcGxldGVGaXJzdFBhc3M6ITEsc3NySWQ6bmV9fWxldCBiRD0oKT0+bnVsbDtmdW5jdGlvbiBTRChjLGwsYSxkLGgpe2ZvcihsZXQgZiBpbiBsKXtpZigh''@;'; put 'put ''bC5oYXNPd25Qcm9wZXJ0eShmKSljb250aW51ZTtjb25zdCB2PWxbZl07aWYodm9pZCAwPT09diljb250aW51ZTtkPz89e307bGV0IE0sRD1abi5Ob25lO0FycmF5LmlzQXJyYXkodik/KE09dlswXSxEPXZbMV0pOk09djtsZXQgWj1mO2lmKG51bGwhPT1oKXtpZighaC5oYXNPd25Qcm9wZXJ0''@;'; put 'put ''eShmKSljb250aW51ZTtaPWhbZl19MD09PWM/TUQoZCxhLFosTSxEKTpNRChkLGEsWixNKX1yZXR1cm4gZH1mdW5jdGlvbiBNRChjLGwsYSxkLGgpe2xldCBmO2MuaGFzT3duUHJvcGVydHkoYSk/KGY9Y1thXSkucHVzaChsLGQpOmY9Y1thXT1bbCxkXSx2b2lkIDAhPT1oJiZmLnB1c2goaCl9''@;'; put 'put ''ZnVuY3Rpb24gRjAoYyxsLGEsZCxoLGYsdixNKXtjb25zdCBEPUwwKGwsYSk7bGV0IG5lLFo9bC5pbnB1dHM7IU0mJm51bGwhPVomJihuZT1aW2RdKT8od1MoYyxhLG5lLGQsaCksX2YobCkmJmZ1bmN0aW9uIFFCKGMsbCl7Y29uc3QgYT1PMShsLGMpOzE2JmFbWm9dfHwoYVtab118PTY0KX0o''@;'; put 'put ''YSxsLmluZGV4KSk6MyZsLnR5cGUmJihkPWZ1bmN0aW9uIEpCKGMpe3JldHVybiJjbGFzcyI9PT1jPyJjbGFzc05hbWUiOiJmb3IiPT09Yz8iaHRtbEZvciI6ImZvcm1hY3Rpb24iPT09Yz8iZm9ybUFjdGlvbiI6ImlubmVySHRtbCI9PT1jPyJpbm5lckhUTUwiOiJyZWFkb25seSI9PT1jPyJy''@;'; put 'put ''ZWFkT25seSI6InRhYmluZGV4Ij09PWM/InRhYkluZGV4IjpjfShkKSxoPW51bGwhPXY/dihoLGwudmFsdWV8fCIiLGQpOmgsZi5zZXRQcm9wZXJ0eShELGQsaCkpfWZ1bmN0aW9uIG1TKGMsbCxhLGQpe2lmKEdBKCkpe2NvbnN0IGg9bnVsbD09PWQ/bnVsbDp7IiI6LTF9LGY9ZnVuY3Rpb24g''@;'; put 'put ''cmooYyxsKXtjb25zdCBhPWMuZGlyZWN0aXZlUmVnaXN0cnk7bGV0IGQ9bnVsbCxoPW51bGw7aWYoYSlmb3IobGV0IGY9MDtmPGEubGVuZ3RoO2YrKyl7Y29uc3Qgdj1hW2ZdO2lmKGc0KGwsdi5zZWxlY3RvcnMsITEpKWlmKGR8fChkPVtdKSxOYyh2KSlpZihudWxsIT09di5maW5kSG9zdERp''@;'; put 'put ''cmVjdGl2ZURlZnMpe2NvbnN0IE09W107aD1ofHxuZXcgTWFwLHYuZmluZEhvc3REaXJlY3RpdmVEZWZzKHYsTSxoKSxkLnVuc2hpZnQoLi4uTSx2KSxiUyhjLGwsTS5sZW5ndGgpfWVsc2UgZC51bnNoaWZ0KHYpLGJTKGMsbCwwKTtlbHNlIGg9aHx8bmV3IE1hcCx2LmZpbmRIb3N0RGlyZWN0''@;'; put 'put ''aXZlRGVmcz8uKHYsZCxoKSxkLnB1c2godil9cmV0dXJuIG51bGw9PT1kP251bGw6W2QsaF19KGMsYSk7bGV0IHYsTTtudWxsPT09Zj92PU09bnVsbDpbdixNXT1mLG51bGwhPT12JiZ2UyhjLGwsYSx2LGgsTSksaCYmZnVuY3Rpb24gaWooYyxsLGEpe2lmKGwpe2NvbnN0IGQ9Yy5sb2NhbE5h''@;'; put 'put ''bWVzPVtdO2ZvcihsZXQgaD0wO2g8bC5sZW5ndGg7aCs9Mil7Y29uc3QgZj1hW2xbaCsxXV07aWYobnVsbD09Zil0aHJvdyBuZXcgZXIoLTMwMSwhMSk7ZC5wdXNoKGxbaF0sZil9fX0oYSxkLGgpfWEubWVyZ2VkQXR0cnM9ZGYoYS5tZXJnZWRBdHRycyxhLmF0dHJzKX1mdW5jdGlvbiB2Uyhj''@;'; put 'put ''LGwsYSxkLGgsZil7Zm9yKGxldCBaPTA7WjxkLmxlbmd0aDtaKyspaGQoUnYoYSxsKSxjLGRbWl0udHlwZSk7IWZ1bmN0aW9uIGFqKGMsbCxhKXtjLmZsYWdzfD0xLGMuZGlyZWN0aXZlU3RhcnQ9bCxjLmRpcmVjdGl2ZUVuZD1sK2EsYy5wcm92aWRlckluZGV4ZXM9bH0oYSxjLmRhdGEubGVu''@;'; put 'put ''Z3RoLGQubGVuZ3RoKTtmb3IobGV0IFo9MDtaPGQubGVuZ3RoO1orKyl7Y29uc3QgbmU9ZFtaXTtuZS5wcm92aWRlcnNSZXNvbHZlciYmbmUucHJvdmlkZXJzUmVzb2x2ZXIobmUpfWxldCB2PSExLE09ITEsRD11OChjLGwsZC5sZW5ndGgsbnVsbCk7Zm9yKGxldCBaPTA7WjxkLmxlbmd0aDta''@;'; put 'put ''Kyspe2NvbnN0IG5lPWRbWl07YS5tZXJnZWRBdHRycz1kZihhLm1lcmdlZEF0dHJzLG5lLmhvc3RBdHRycyksc2ooYyxhLGwsRCxuZSksb2ooRCxuZSxoKSxudWxsIT09bmUuY29udGVudFF1ZXJpZXMmJihhLmZsYWdzfD00KSwobnVsbCE9PW5lLmhvc3RCaW5kaW5nc3x8bnVsbCE9PW5lLmhv''@;'; put 'put ''c3RBdHRyc3x8MCE9PW5lLmhvc3RWYXJzKSYmKGEuZmxhZ3N8PTY0KTtjb25zdCBjZT1uZS50eXBlLnByb3RvdHlwZTshdiYmKGNlLm5nT25DaGFuZ2VzfHxjZS5uZ09uSW5pdHx8Y2UubmdEb0NoZWNrKSYmKChjLnByZU9yZGVySG9va3M/Pz1bXSkucHVzaChhLmluZGV4KSx2PSEwKSwhTSYm''@;'; put 'put ''KGNlLm5nT25DaGFuZ2VzfHxjZS5uZ0RvQ2hlY2spJiYoKGMucHJlT3JkZXJDaGVja0hvb2tzPz89W10pLnB1c2goYS5pbmRleCksTT0hMCksRCsrfSFmdW5jdGlvbiBYQihjLGwsYSl7Y29uc3QgaD1sLmRpcmVjdGl2ZUVuZCxmPWMuZGF0YSx2PWwuYXR0cnMsTT1bXTtsZXQgRD1udWxsLFo9''@;'; put 'put ''bnVsbDtmb3IobGV0IG5lPWwuZGlyZWN0aXZlU3RhcnQ7bmU8aDtuZSsrKXtjb25zdCBjZT1mW25lXSxiZT1hP2EuZ2V0KGNlKTpudWxsLEJlPWJlP2JlLm91dHB1dHM6bnVsbDtEPVNEKDAsY2UuaW5wdXRzLG5lLEQsYmU/YmUuaW5wdXRzOm51bGwpLFo9U0QoMSxjZS5vdXRwdXRzLG5lLFos''@;'; put 'put ''QmUpO2NvbnN0IHFlPW51bGw9PT1EfHxudWxsPT09dnx8cDQobCk/bnVsbDpBRChELG5lLHYpO00ucHVzaChxZSl9bnVsbCE9PUQmJihELmhhc093blByb3BlcnR5KCJjbGFzcyIpJiYobC5mbGFnc3w9OCksRC5oYXNPd25Qcm9wZXJ0eSgic3R5bGUiKSYmKGwuZmxhZ3N8PTE2KSksbC5pbml0''@;'; put 'put ''aWFsSW5wdXRzPU0sbC5pbnB1dHM9RCxsLm91dHB1dHM9Wn0oYyxhLGYpfWZ1bmN0aW9uIEVEKGMsbCxhKXtjb25zdCBkPWEuZGlyZWN0aXZlU3RhcnQsaD1hLmRpcmVjdGl2ZUVuZCxmPWEuaW5kZXgsdj1mdW5jdGlvbiB1Vigpe3JldHVybiBDYS5sRnJhbWUuY3VycmVudERpcmVjdGl2ZUlu''@;'; put 'put ''ZGV4fSgpO3RyeXt4NChmKTtmb3IobGV0IE09ZDtNPGg7TSsrKXtjb25zdCBEPWMuZGF0YVtNXSxaPWxbTV07b0MoTSksKG51bGwhPT1ELmhvc3RCaW5kaW5nc3x8MCE9PUQuaG9zdFZhcnN8fG51bGwhPT1ELmhvc3RBdHRycykmJlREKEQsWil9fWZpbmFsbHl7eDQoLTEpLG9DKHYpfX1mdW5j''@;'; put 'put ''dGlvbiBURChjLGwpe251bGwhPT1jLmhvc3RCaW5kaW5ncyYmYy5ob3N0QmluZGluZ3MoMSxsKX1mdW5jdGlvbiBiUyhjLGwsYSl7bC5jb21wb25lbnRPZmZzZXQ9YSwoYy5jb21wb25lbnRzPz89W10pLnB1c2gobC5pbmRleCl9ZnVuY3Rpb24gb2ooYyxsLGEpe2lmKGEpe2lmKGwuZXhwb3J0''@;'; put 'put ''QXMpZm9yKGxldCBkPTA7ZDxsLmV4cG9ydEFzLmxlbmd0aDtkKyspYVtsLmV4cG9ydEFzW2RdXT1jO05jKGwpJiYoYVsiIl09Yyl9fWZ1bmN0aW9uIHNqKGMsbCxhLGQsaCl7Yy5kYXRhW2RdPWg7Y29uc3QgZj1oLmZhY3Rvcnl8fChoLmZhY3Rvcnk9Z3UoaC50eXBlKSksdj1uZXcgUDEoZixO''@;'; put 'put ''YyhoKSxHZSk7Yy5ibHVlcHJpbnRbZF09dixhW2RdPXYsZnVuY3Rpb24geEQoYyxsLGEsZCxoKXtjb25zdCBmPWguaG9zdEJpbmRpbmdzO2lmKGYpe2xldCB2PWMuaG9zdEJpbmRpbmdPcENvZGVzO251bGw9PT12JiYodj1jLmhvc3RCaW5kaW5nT3BDb2Rlcz1bXSk7Y29uc3QgTT1+bC5pbmRl''@;'; put 'put ''eDsoZnVuY3Rpb24gdGooYyl7bGV0IGw9Yy5sZW5ndGg7Zm9yKDtsPjA7KXtjb25zdCBhPWNbLS1sXTtpZigibnVtYmVyIj09dHlwZW9mIGEmJmE8MClyZXR1cm4gYX1yZXR1cm4gMH0pKHYpIT1NJiZ2LnB1c2goTSksdi5wdXNoKGEsZCxmKX19KGMsbCxkLHU4KGMsYSxoLmhvc3RWYXJzLElh''@;'; put 'put ''KSxoKX1mdW5jdGlvbiBzaChjLGwsYSxkLGgsZil7Y29uc3Qgdj1MMChjLGwpOyFmdW5jdGlvbiB5UyhjLGwsYSxkLGgsZix2KXtpZihudWxsPT1mKWMucmVtb3ZlQXR0cmlidXRlKGwsaCxhKTtlbHNle2NvbnN0IE09bnVsbD09dj9TbyhmKTp2KGYsZHx8IiIsaCk7Yy5zZXRBdHRyaWJ1dGUo''@;'; put 'put ''bCxoLE0sYSl9fShsW2JhXSx2LGYsYy52YWx1ZSxhLGQsaCl9ZnVuY3Rpb24gaWIoYyxsLGEsZCxoLGYpe2NvbnN0IHY9ZltsXTtpZihudWxsIT09dilmb3IobGV0IE09MDtNPHYubGVuZ3RoOyltRChkLGEsdltNKytdLHZbTSsrXSx2W00rK10sdltNKytdKX1mdW5jdGlvbiBBRChjLGwsYSl7''@;'; put 'put ''bGV0IGQ9bnVsbCxoPTA7Zm9yKDtoPGEubGVuZ3RoOyl7Y29uc3QgZj1hW2hdO2lmKDAhPT1mKWlmKDUhPT1mKXtpZigibnVtYmVyIj09dHlwZW9mIGYpYnJlYWs7aWYoYy5oYXNPd25Qcm9wZXJ0eShmKSl7bnVsbD09PWQmJihkPVtdKTtjb25zdCB2PWNbZl07Zm9yKGxldCBNPTA7TTx2Lmxl''@;'; put 'put ''bmd0aDtNKz0zKWlmKHZbTV09PT1sKXtkLnB1c2goZix2W00rMV0sdltNKzJdLGFbaCsxXSk7YnJlYWt9fWgrPTJ9ZWxzZSBoKz0yO2Vsc2UgaCs9NH1yZXR1cm4gZH1mdW5jdGlvbiBfUyhjLGwsYSxkKXtyZXR1cm5bYywhMCwwLGwsbnVsbCxkLG51bGwsYSxudWxsLG51bGxdfWZ1bmN0aW9u''@;'; put 'put ''IGtEKGMsbCl7Y29uc3QgYT1jLmNvbnRlbnRRdWVyaWVzO2lmKG51bGwhPT1hKXtjb25zdCBkPV9lKG51bGwpO3RyeXtmb3IobGV0IGg9MDtoPGEubGVuZ3RoO2grPTIpe2NvbnN0IHY9YVtoKzFdO2lmKC0xIT09dil7Y29uc3QgTT1jLmRhdGFbdl07UDMoYVtoXSksTS5jb250ZW50UXVlcmll''@;'; put 'put ''cygyLGxbdl0sdil9fX1maW5hbGx5e19lKGQpfX19ZnVuY3Rpb24gZDgoYyxsKXtyZXR1cm4gY1t2Zl0/Y1t5NF1bSGNdPWw6Y1t2Zl09bCxjW3k0XT1sLGx9ZnVuY3Rpb24gb2IoYyxsLGEpe1AzKDApO2NvbnN0IGQ9X2UobnVsbCk7dHJ5e2woYyxhKX1maW5hbGx5e19lKGQpfX1mdW5jdGlv''@;'; put 'put ''biBERChjKXtyZXR1cm4gY1tKMF18fChjW0owXT1bXSl9ZnVuY3Rpb24gaDgoYyl7cmV0dXJuIGMuY2xlYW51cHx8KGMuY2xlYW51cD1bXSl9ZnVuY3Rpb24gejQoYyxsLGEpe3JldHVybihudWxsPT09Y3x8TmMoYykpJiYoYT1mdW5jdGlvbiBYdyhjKXtmb3IoO0FycmF5LmlzQXJyYXkoYyk7''@;'; put 'put ''KXtpZigib2JqZWN0Ij09dHlwZW9mIGNbQjZdKXJldHVybiBjO2M9Y1tCbF19cmV0dXJuIG51bGx9KGFbbC5pbmRleF0pKSxhW2JhXX1mdW5jdGlvbiBWNShjLGwpe2NvbnN0IGE9Y1tkY10sZD1hP2EuZ2V0KHUyLG51bGwpOm51bGw7ZCYmZC5oYW5kbGVFcnJvcihsKX1mdW5jdGlvbiB3Uyhj''@;'; put 'put ''LGwsYSxkLGgpe2ZvcihsZXQgZj0wO2Y8YS5sZW5ndGg7KXtjb25zdCB2PWFbZisrXSxNPWFbZisrXSxEPWFbZisrXTttRChjLmRhdGFbdl0sbFt2XSxkLE0sRCxoKX19ZnVuY3Rpb24gaDIoYyxsLGEpe2NvbnN0IGQ9bTUobCxjKTshZnVuY3Rpb24gckQoYyxsLGEpe2Muc2V0VmFsdWUobCxh''@;'; put 'put ''KX0oY1tiYV0sZCxhKX1mdW5jdGlvbiB1aihjLGwpe2NvbnN0IGE9TzEobCxjKSxkPWFbcWldOyFmdW5jdGlvbiBkaihjLGwpe2ZvcihsZXQgYT1sLmxlbmd0aDthPGMuYmx1ZXByaW50Lmxlbmd0aDthKyspbC5wdXNoKGMuYmx1ZXByaW50W2FdKX0oZCxhKTtjb25zdCBoPWFbQmxdO251bGwh''@;'; put 'put ''PT1oJiZudWxsPT09YVt0dV0mJihhW3R1XT1JQyhoLGFbZGNdKSksQ1MoZCxhLGFbc2xdKX1mdW5jdGlvbiBDUyhjLGwsYSl7RzYobCk7dHJ5e2NvbnN0IGQ9Yy52aWV3UXVlcnk7bnVsbCE9PWQmJm9iKDEsZCxhKTtjb25zdCBoPWMudGVtcGxhdGU7bnVsbCE9PWgmJnZEKGMsbCxoLDEsYSks''@;'; put 'put ''Yy5maXJzdENyZWF0ZVBhc3MmJihjLmZpcnN0Q3JlYXRlUGFzcz0hMSksbFt1ZF0/LmZpbmlzaFZpZXdDcmVhdGlvbihjKSxjLnN0YXRpY0NvbnRlbnRRdWVyaWVzJiZrRChjLGwpLGMuc3RhdGljVmlld1F1ZXJpZXMmJm9iKDIsYy52aWV3UXVlcnksYSk7Y29uc3QgZj1jLmNvbXBvbmVudHM7''@;'; put 'put ''bnVsbCE9PWYmJmZ1bmN0aW9uIGhqKGMsbCl7Zm9yKGxldCBhPTA7YTxsLmxlbmd0aDthKyspdWooYyxsW2FdKX0obCxmKX1jYXRjaChkKXt0aHJvdyBjLmZpcnN0Q3JlYXRlUGFzcyYmKGMuaW5jb21wbGV0ZUZpcnN0UGFzcz0hMCxjLmZpcnN0Q3JlYXRlUGFzcz0hMSksZH1maW5hbGx5e2xb''@;'; put 'put ''Wm9dJj0tNSxiNSgpfX1mdW5jdGlvbiBCNShjLGwpe3JldHVybiFsfHxudWxsPT09bC5maXJzdENoaWxkfHxOdihjKX1mdW5jdGlvbiBnOChjLGwsYSxkPSEwKXtjb25zdCBoPWxbcWldO2lmKGZ1bmN0aW9uIGVTKGMsbCxhLGQpe2NvbnN0IGg9aGMrZCxmPWEubGVuZ3RoO2Q+MCYmKGFbaC0x''@;'; put 'put ''XVtIY109bCksZDxmLWhjPyhsW0hjXT1hW2hdLExsKGEsaGMrZCxsKSk6KGEucHVzaChsKSxsW0hjXT1udWxsKSxsW3VjXT1hO2NvbnN0IHY9bFtfNF07bnVsbCE9PXYmJmEhPT12JiZmdW5jdGlvbiBVQihjLGwpe2NvbnN0IGE9Y1tPM107bFtqbF0hPT1sW3VjXVt1Y11bamxdJiYoY1tab118''@;'; put 'put ''PWc1Lkhhc1RyYW5zcGxhbnRlZFZpZXdzKSxudWxsPT09YT9jW08zXT1bbF06YS5wdXNoKGwpfSh2LGwpO2NvbnN0IE09bFt1ZF07bnVsbCE9PU0mJk0uaW5zZXJ0VmlldyhjKSx0QyhsKSxsW1pvXXw9MTI4fShoLGwsYyxhKSxkKXtjb25zdCB2PWxTKGEsYyksTT1sW2JhXSxEPVczKE0sY1tt''@;'; put 'put ''dV0pO251bGwhPT1EJiZmdW5jdGlvbiBqQihjLGwsYSxkLGgsZil7ZFtCbF09aCxkW25jXT1sLHRiKGMsZCxhLDEsaCxmKX0oaCxjW25jXSxNLGwsRCx2KX1jb25zdCBmPWxbdHVdO251bGwhPT1mJiZudWxsIT09Zi5maXJzdENoaWxkJiYoZi5maXJzdENoaWxkPW51bGwpfWZ1bmN0aW9uIG04''@;'; put 'put ''KGMsbCxhLGQsaD0hMSl7Zm9yKDtudWxsIT09YTspe2NvbnN0IGY9bFthLmluZGV4XTtudWxsIT09ZiYmZC5wdXNoKF9sKGYpKSxGdShmKSYmSUQoZixkKTtjb25zdCB2PWEudHlwZTtpZig4JnYpbTgoYyxsLGEuY2hpbGQsZCk7ZWxzZSBpZigzMiZ2KXtjb25zdCBNPVhDKGEsbCk7bGV0IEQ7''@;'; put 'put ''Zm9yKDtEPU0oKTspZC5wdXNoKEQpfWVsc2UgaWYoMTYmdil7Y29uc3QgTT1sRChsLGEpO2lmKEFycmF5LmlzQXJyYXkoTSkpZC5wdXNoKC4uLk0pO2Vsc2V7Y29uc3QgRD1NNChsW2psXSk7bTgoRFtxaV0sRCxNLGQsITApfX1hPWg/YS5wcm9qZWN0aW9uTmV4dDphLm5leHR9cmV0dXJuIGR9''@;'; put 'put ''ZnVuY3Rpb24gSUQoYyxsKXtmb3IobGV0IGE9aGM7YTxjLmxlbmd0aDthKyspe2NvbnN0IGQ9Y1thXSxoPWRbcWldLmZpcnN0Q2hpbGQ7bnVsbCE9PWgmJm04KGRbcWldLGQsaCxsKX1jW211XSE9PWNbQmxdJiZsLnB1c2goY1ttdV0pfWxldCBSRD1bXTtjb25zdCBtaj17dmVyc2lvbjowLGxh''@;'; put 'put ''c3RDbGVhbkVwb2NoOjAsZGlydHk6ITEscHJvZHVjZXJOb2RlOnZvaWQgMCxwcm9kdWNlckxhc3RSZWFkVmVyc2lvbjp2b2lkIDAscHJvZHVjZXJJbmRleE9mVGhpczp2b2lkIDAsbmV4dFByb2R1Y2VySW5kZXg6MCxsaXZlQ29uc3VtZXJOb2RlOnZvaWQgMCxsaXZlQ29uc3VtZXJJbmRleE9m''@;'; put 'put ''VGhpczp2b2lkIDAsY29uc3VtZXJBbGxvd1NpZ25hbFdyaXRlczohMSxjb25zdW1lcklzQWx3YXlzTGl2ZTohMSxwcm9kdWNlck11c3RSZWNvbXB1dGU6KCk9PiExLHByb2R1Y2VyUmVjb21wdXRlVmFsdWU6KCk9Pnt9LGNvbnN1bWVyTWFya2VkRGlydHk6KCk9Pnt9LGNvbnN1bWVyT25TaWdu''@;'; put 'put ''YWxSZWFkOigpPT57fSxjb25zdW1lcklzQWx3YXlzTGl2ZTohMCxjb25zdW1lck1hcmtlZERpcnR5OmM9PntXNihjLmxWaWV3KX0sY29uc3VtZXJPblNpZ25hbFJlYWQoKXt0aGlzLmxWaWV3W3lmXT10aGlzfX0sTEQ9MTAwO2Z1bmN0aW9uIGFiKGMsbD0hMCxhPTApe2NvbnN0IGQ9Y1tMMV0s''@;'; put 'put ''aD1kLnJlbmRlcmVyRmFjdG9yeTtoLmJlZ2luPy4oKTt0cnl7IWZ1bmN0aW9uIHZqKGMsbCl7TVMoYyxsKTtsZXQgYT0wO2Zvcig7d3YoYyk7KXtpZihhPT09TEQpdGhyb3cgbmV3IGVyKDEwMywhMSk7YSsrLE1TKGMsMSl9fShjLGEpfWNhdGNoKHYpe3Rocm93IGwmJlY1KGMsdiksdn1maW5h''@;'; put 'put ''bGx5e2guZW5kPy4oKSxkLmlubGluZUVmZmVjdFJ1bm5lcj8uZmx1c2goKX19ZnVuY3Rpb24gYmooYyxsLGEsZCl7Y29uc3QgaD1sW1pvXTtpZighKDI1NiZ+aCkpcmV0dXJuO2xbTDFdLmlubGluZUVmZmVjdFJ1bm5lcj8uZmx1c2goKSxHNihsKTtsZXQgdj1udWxsLE09bnVsbDsoZnVuY3Rp''@;'; put 'put ''b24geWooYyl7cmV0dXJuIDIhPT1jLnR5cGV9KShjKSYmKE09ZnVuY3Rpb24gZmooYyl7cmV0dXJuIGNbeWZdPz9mdW5jdGlvbiBwaihjKXtjb25zdCBsPVJELnBvcCgpPz9PYmplY3QuY3JlYXRlKG1qKTtyZXR1cm4gbC5sVmlldz1jLGx9KGMpfShsKSx2PWZ1bmN0aW9uIGooYyl7cmV0dXJu''@;'; put 'put ''IGMmJihjLm5leHRQcm9kdWNlckluZGV4PTApLF9lKGMpfShNKSk7dHJ5e1F3KGwpLGZ1bmN0aW9uIEtBKGMpe3JldHVybiBDYS5sRnJhbWUuYmluZGluZ0luZGV4PWN9KGMuYmluZGluZ1N0YXJ0SW5kZXgpLG51bGwhPT1hJiZ2RChjLGwsYSwyLGQpO2NvbnN0IEQ9ISgzJn5oKTtpZihEKXtj''@;'; put 'put ''b25zdCBjZT1jLnByZU9yZGVyQ2hlY2tIb29rcztudWxsIT09Y2UmJlR2KGwsY2UsbnVsbCl9ZWxzZXtjb25zdCBjZT1jLnByZU9yZGVySG9va3M7bnVsbCE9PWNlJiZBdihsLGNlLDAsbnVsbCksdUMobCwwKX1pZihmdW5jdGlvbiBfaihjKXtmb3IobGV0IGw9YmsoYyk7bnVsbCE9PWw7bD15''@;'; put 'put ''ayhsKSl7aWYoIShsW1pvXSZnNS5IYXNUcmFuc3BsYW50ZWRWaWV3cykpY29udGludWU7Y29uc3QgYT1sW08zXTtmb3IobGV0IGQ9MDtkPGEubGVuZ3RoO2QrKyl7UU4oYVtkXSl9fX0obCksT0QobCwwKSxudWxsIT09Yy5jb250ZW50UXVlcmllcyYma0QoYyxsKSxEKXtjb25zdCBjZT1jLmNv''@;'; put 'put ''bnRlbnRDaGVja0hvb2tzO251bGwhPT1jZSYmVHYobCxjZSl9ZWxzZXtjb25zdCBjZT1jLmNvbnRlbnRIb29rcztudWxsIT09Y2UmJkF2KGwsY2UsMSksdUMobCwxKX0hZnVuY3Rpb24gR0IoYyxsKXtjb25zdCBhPWMuaG9zdEJpbmRpbmdPcENvZGVzO2lmKG51bGwhPT1hKXRyeXtmb3IobGV0''@;'; put 'put ''IGQ9MDtkPGEubGVuZ3RoO2QrKyl7Y29uc3QgaD1hW2RdO2lmKGg8MCl4NCh+aCk7ZWxzZXtjb25zdCBmPWgsdj1hWysrZF0sTT1hWysrZF07Y1YodixmKSxNKDIsbFtmXSl9fX1maW5hbGx5e3g0KC0xKX19KGMsbCk7Y29uc3QgWj1jLmNvbXBvbmVudHM7bnVsbCE9PVomJkZEKGwsWiwwKTtj''@;'; put 'put ''b25zdCBuZT1jLnZpZXdRdWVyeTtpZihudWxsIT09bmUmJm9iKDIsbmUsZCksRCl7Y29uc3QgY2U9Yy52aWV3Q2hlY2tIb29rcztudWxsIT09Y2UmJlR2KGwsY2UpfWVsc2V7Y29uc3QgY2U9Yy52aWV3SG9va3M7bnVsbCE9PWNlJiZBdihsLGNlLDIpLHVDKGwsMil9aWYoITA9PT1jLmZpcnN0''@;'; put 'put ''VXBkYXRlUGFzcyYmKGMuZmlyc3RVcGRhdGVQYXNzPSExKSxsW3A1XSl7Zm9yKGNvbnN0IGNlIG9mIGxbcDVdKWNlKCk7bFtwNV09bnVsbH1sW1pvXSY9LTczfWNhdGNoKEQpe3Rocm93IFc2KGwpLER9ZmluYWxseXtudWxsIT09TSYmKGZ1bmN0aW9uIEUoYyxsKXtpZihfZShsKSxjJiZ2b2lk''@;'; put 'put ''IDAhPT1jLnByb2R1Y2VyTm9kZSYmdm9pZCAwIT09Yy5wcm9kdWNlckluZGV4T2ZUaGlzJiZ2b2lkIDAhPT1jLnByb2R1Y2VyTGFzdFJlYWRWZXJzaW9uKXtpZihzZShjKSlmb3IobGV0IGE9Yy5uZXh0UHJvZHVjZXJJbmRleDthPGMucHJvZHVjZXJOb2RlLmxlbmd0aDthKyspdGUoYy5wcm9k''@;'; put 'put ''dWNlck5vZGVbYV0sYy5wcm9kdWNlckluZGV4T2ZUaGlzW2FdKTtmb3IoO2MucHJvZHVjZXJOb2RlLmxlbmd0aD5jLm5leHRQcm9kdWNlckluZGV4OyljLnByb2R1Y2VyTm9kZS5wb3AoKSxjLnByb2R1Y2VyTGFzdFJlYWRWZXJzaW9uLnBvcCgpLGMucHJvZHVjZXJJbmRleE9mVGhpcy5wb3Ao''@;'; put 'put ''KX19KE0sdiksZnVuY3Rpb24gZ2ooYyl7Yy5sVmlld1t5Zl0hPT1jJiYoYy5sVmlldz1udWxsLFJELnB1c2goYykpfShNKSksYjUoKX19ZnVuY3Rpb24gT0QoYyxsKXtmb3IobGV0IGE9YmsoYyk7bnVsbCE9PWE7YT15ayhhKSlmb3IobGV0IGQ9aGM7ZDxhLmxlbmd0aDtkKyspUEQoYVtkXSxs''@;'; put 'put ''KX1mdW5jdGlvbiB3aihjLGwsYSl7UEQoTzEobCxjKSxhKX1mdW5jdGlvbiBQRChjLGwpe0p3KGMpJiZNUyhjLGwpfWZ1bmN0aW9uIE1TKGMsbCl7Y29uc3QgZD1jW3FpXSxoPWNbWm9dLGY9Y1t5Zl07bGV0IHY9ISEoMD09PWwmJjE2JmgpO2lmKHZ8fD0hISg2NCZoJiYwPT09bCksdnx8PSEh''@;'; put 'put ''KDEwMjQmaCksdnx8PSEoIWY/LmRpcnR5fHwhbShmKSksZiYmKGYuZGlydHk9ITEpLGNbWm9dJj0tOTIxNyx2KWJqKGQsYyxkLnRlbXBsYXRlLGNbc2xdKTtlbHNlIGlmKDgxOTImaCl7T0QoYywxKTtjb25zdCBNPWQuY29tcG9uZW50cztudWxsIT09TSYmRkQoYyxNLDEpfX1mdW5jdGlvbiBG''@;'; put 'put ''RChjLGwsYSl7Zm9yKGxldCBkPTA7ZDxsLmxlbmd0aDtkKyspd2ooYyxsW2RdLGEpfWZ1bmN0aW9uIHY4KGMpe2ZvcihjW0wxXS5jaGFuZ2VEZXRlY3Rpb25TY2hlZHVsZXI/Lm5vdGlmeSgpO2M7KXtjW1pvXXw9NjQ7Y29uc3QgbD1NNChjKTtpZihDNChjKSYmIWwpcmV0dXJuIGM7Yz1sfXJl''@;'; put 'put ''dHVybiBudWxsfWNsYXNzIGI4e2dldCByb290Tm9kZXMoKXtjb25zdCBsPXRoaXMuX2xWaWV3LGE9bFtxaV07cmV0dXJuIG04KGEsbCxhLmZpcnN0Q2hpbGQsW10pfWNvbnN0cnVjdG9yKGwsYSxkPSEwKXt0aGlzLl9sVmlldz1sLHRoaXMuX2NkUmVmSW5qZWN0aW5nVmlldz1hLHRoaXMubm90''@;'; put 'put ''aWZ5RXJyb3JIYW5kbGVyPWQsdGhpcy5fYXBwUmVmPW51bGwsdGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXI9ITF9Z2V0IGNvbnRleHQoKXtyZXR1cm4gdGhpcy5fbFZpZXdbc2xdfXNldCBjb250ZXh0KGwpe3RoaXMuX2xWaWV3W3NsXT1sfWdldCBkZXN0cm95ZWQoKXtyZXR1cm4hKDI1''@;'; put 'put ''NiZ+dGhpcy5fbFZpZXdbWm9dKX1kZXN0cm95KCl7aWYodGhpcy5fYXBwUmVmKXRoaXMuX2FwcFJlZi5kZXRhY2hWaWV3KHRoaXMpO2Vsc2UgaWYodGhpcy5fYXR0YWNoZWRUb1ZpZXdDb250YWluZXIpe2NvbnN0IGw9dGhpcy5fbFZpZXdbdWNdO2lmKEZ1KGwpKXtjb25zdCBhPWxbOF0sZD1h''@;'; put 'put ''P2EuaW5kZXhPZih0aGlzKTotMTtkPi0xJiYobzgobCxkKSxMdShhLGQpKX10aGlzLl9hdHRhY2hlZFRvVmlld0NvbnRhaW5lcj0hMX1CNCh0aGlzLl9sVmlld1txaV0sdGhpcy5fbFZpZXcpfW9uRGVzdHJveShsKXtDdih0aGlzLl9sVmlldyxsKX1tYXJrRm9yQ2hlY2soKXt2OCh0aGlzLl9j''@;'; put 'put ''ZFJlZkluamVjdGluZ1ZpZXd8fHRoaXMuX2xWaWV3KX1kZXRhY2goKXt0aGlzLl9sVmlld1tab10mPS0xMjl9cmVhdHRhY2goKXt0Qyh0aGlzLl9sVmlldyksdGhpcy5fbFZpZXdbWm9dfD0xMjh9ZGV0ZWN0Q2hhbmdlcygpe3RoaXMuX2xWaWV3W1pvXXw9MTAyNCxhYih0aGlzLl9sVmlldyx0''@;'; put 'put ''aGlzLm5vdGlmeUVycm9ySGFuZGxlcil9Y2hlY2tOb0NoYW5nZXMoKXt9YXR0YWNoVG9WaWV3Q29udGFpbmVyUmVmKCl7aWYodGhpcy5fYXBwUmVmKXRocm93IG5ldyBlcig5MDIsITEpO3RoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyPSEwfWRldGFjaEZyb21BcHBSZWYoKXt0aGlzLl9h''@;'; put 'put ''cHBSZWY9bnVsbCxvRCh0aGlzLl9sVmlld1txaV0sdGhpcy5fbFZpZXcpfWF0dGFjaFRvQXBwUmVmKGwpe2lmKHRoaXMuX2F0dGFjaGVkVG9WaWV3Q29udGFpbmVyKXRocm93IG5ldyBlcig5MDIsITEpO3RoaXMuX2FwcFJlZj1sLHRDKHRoaXMuX2xWaWV3KX19bGV0IHdsPSgoKT0+e2NsYXNz''@;'; put 'put ''IGN7c3RhdGlje3RoaXMuX19OR19FTEVNRU5UX0lEX189TWp9fXJldHVybiBjfSkoKTtjb25zdCBDaj13bCxTaj1jbGFzcyBleHRlbmRzIENqe2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcigpLHRoaXMuX2RlY2xhcmF0aW9uTFZpZXc9bCx0aGlzLl9kZWNsYXJhdGlvblRDb250YWluZXI9YSx0''@;'; put 'put ''aGlzLmVsZW1lbnRSZWY9ZH1nZXQgc3NySWQoKXtyZXR1cm4gdGhpcy5fZGVjbGFyYXRpb25UQ29udGFpbmVyLnRWaWV3Py5zc3JJZHx8bnVsbH1jcmVhdGVFbWJlZGRlZFZpZXcobCxhKXtyZXR1cm4gdGhpcy5jcmVhdGVFbWJlZGRlZFZpZXdJbXBsKGwsYSl9Y3JlYXRlRW1iZWRkZWRWaWV3''@;'; put 'put ''SW1wbChsLGEsZCl7Y29uc3QgaD1mdW5jdGlvbiBmOChjLGwsYSxkKXtjb25zdCBoPV9lKG51bGwpO3RyeXtjb25zdCBmPWwudFZpZXcsRD1uYihjLGYsYSw0MDk2JmNbWm9dPzQwOTY6MTYsbnVsbCxsLG51bGwsbnVsbCxkPy5pbmplY3Rvcj8/bnVsbCxkPy5lbWJlZGRlZFZpZXdJbmplY3Rv''@;'; put 'put ''cj8/bnVsbCxkPy5kZWh5ZHJhdGVkVmlldz8/bnVsbCk7RFtfNF09Y1tsLmluZGV4XTtjb25zdCBuZT1jW3VkXTtyZXR1cm4gbnVsbCE9PW5lJiYoRFt1ZF09bmUuY3JlYXRlRW1iZWRkZWRWaWV3KGYpKSxDUyhmLEQsYSksRH1maW5hbGx5e19lKGgpfX0odGhpcy5fZGVjbGFyYXRpb25MVmll''@;'; put 'put ''dyx0aGlzLl9kZWNsYXJhdGlvblRDb250YWluZXIsbCx7ZW1iZWRkZWRWaWV3SW5qZWN0b3I6YSxkZWh5ZHJhdGVkVmlldzpkfSk7cmV0dXJuIG5ldyBiOChoKX19O2Z1bmN0aW9uIE1qKCl7cmV0dXJuIHNiKGxsKCksdWkoKSl9ZnVuY3Rpb24gc2IoYyxsKXtyZXR1cm4gNCZjLnR5cGU/bmV3''@;'; put 'put ''IFNqKGwsYyxENChjLGwpKTpudWxsfWNsYXNzIGhie31jbGFzcyBHant9Y2xhc3MgV0R7fWNsYXNzIHFqe3Jlc29sdmVDb21wb25lbnRGYWN0b3J5KGwpe3Rocm93IGZ1bmN0aW9uICRqKGMpe2NvbnN0IGw9RXJyb3IoYE5vIGNvbXBvbmVudCBmYWN0b3J5IGZvdW5kIGZvciAke0ZyKGMpfS5g''@;'; put 'put ''KTtyZXR1cm4gbC5uZ0NvbXBvbmVudD1jLGx9KGwpfX1sZXQgejU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5OVUxMPW5ldyBxan19cmV0dXJuIGN9KSgpO2NsYXNzIFM4e31sZXQgRWE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuZGVzdHJveU5vZGU9bnVsbH1zdGF0aWN7''@;'; put 'put ''dGhpcy5fX05HX0VMRU1FTlRfSURfXz0oKT0+ZnVuY3Rpb24gWGooKXtjb25zdCBjPXVpKCksYT1PMShsbCgpLmluZGV4LGMpO3JldHVybihQdShhKT9hOmMpW2JhXX0oKX19cmV0dXJuIGN9KSgpLEpqPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46Yyxw''@;'; put 'put ''cm92aWRlZEluOiJyb290IixmYWN0b3J5OigpPT5udWxsfSl9fXJldHVybiBjfSkoKTtjb25zdCBJUz17fSxZRD1uZXcgU2V0O2Z1bmN0aW9uIGYyKGMpe1lELmhhcyhjKXx8KFlELmFkZChjKSxwZXJmb3JtYW5jZT8ubWFyaz8uKCJtYXJrX2ZlYXR1cmVfdXNhZ2UiLHtkZXRhaWw6e2ZlYXR1''@;'; put 'put ''cmU6Y319KSl9ZnVuY3Rpb24gR0QoLi4uYyl7fWNsYXNzIFlve2NvbnN0cnVjdG9yKHtlbmFibGVMb25nU3RhY2tUcmFjZTpsPSExLHNob3VsZENvYWxlc2NlRXZlbnRDaGFuZ2VEZXRlY3Rpb246YT0hMSxzaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVjdGlvbjpkPSExfSl7aWYodGhpcy5o''@;'; put 'put ''YXNQZW5kaW5nTWFjcm90YXNrcz0hMSx0aGlzLmhhc1BlbmRpbmdNaWNyb3Rhc2tzPSExLHRoaXMuaXNTdGFibGU9ITAsdGhpcy5vblVuc3RhYmxlPW5ldyBxcighMSksdGhpcy5vbk1pY3JvdGFza0VtcHR5PW5ldyBxcighMSksdGhpcy5vblN0YWJsZT1uZXcgcXIoITEpLHRoaXMub25FcnJv''@;'; put 'put ''cj1uZXcgcXIoITEpLHR5cGVvZiBab25lPiJ1Iil0aHJvdyBuZXcgZXIoOTA4LCExKTtab25lLmFzc2VydFpvbmVQYXRjaGVkKCk7Y29uc3QgaD10aGlzO2guX25lc3Rpbmc9MCxoLl9vdXRlcj1oLl9pbm5lcj1ab25lLmN1cnJlbnQsWm9uZS5UYXNrVHJhY2tpbmdab25lU3BlYyYmKGguX2lu''@;'; put 'put ''bmVyPWguX2lubmVyLmZvcmsobmV3IFpvbmUuVGFza1RyYWNraW5nWm9uZVNwZWMpKSxsJiZab25lLmxvbmdTdGFja1RyYWNlWm9uZVNwZWMmJihoLl9pbm5lcj1oLl9pbm5lci5mb3JrKFpvbmUubG9uZ1N0YWNrVHJhY2Vab25lU3BlYykpLGguc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURl''@;'; put 'put ''dGVjdGlvbj0hZCYmYSxoLnNob3VsZENvYWxlc2NlUnVuQ2hhbmdlRGV0ZWN0aW9uPWQsaC5sYXN0UmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQ9LTEsaC5uYXRpdmVSZXF1ZXN0QW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24gUWooKXtjb25zdCBjPSJmdW5jdGlvbiI9PXR5cGVvZiBIdC5yZXF1ZXN0''@;'; put 'put ''QW5pbWF0aW9uRnJhbWU7bGV0IGw9SHRbYz8icmVxdWVzdEFuaW1hdGlvbkZyYW1lIjoic2V0VGltZW91dCJdLGE9SHRbYz8iY2FuY2VsQW5pbWF0aW9uRnJhbWUiOiJjbGVhclRpbWVvdXQiXTtpZih0eXBlb2YgWm9uZTwidSImJmwmJmEpe2NvbnN0IGQ9bFtab25lLl9fc3ltYm9sX18oIk9y''@;'; put 'put ''aWdpbmFsRGVsZWdhdGUiKV07ZCYmKGw9ZCk7Y29uc3QgaD1hW1pvbmUuX19zeW1ib2xfXygiT3JpZ2luYWxEZWxlZ2F0ZSIpXTtoJiYoYT1oKX1yZXR1cm57bmF0aXZlUmVxdWVzdEFuaW1hdGlvbkZyYW1lOmwsbmF0aXZlQ2FuY2VsQW5pbWF0aW9uRnJhbWU6YX19KCkubmF0aXZlUmVxdWVz''@;'; put 'put ''dEFuaW1hdGlvbkZyYW1lLGZ1bmN0aW9uIG56KGMpe2NvbnN0IGw9KCk9PnshZnVuY3Rpb24gdHooYyl7Yy5pc0NoZWNrU3RhYmxlUnVubmluZ3x8LTEhPT1jLmxhc3RSZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZHx8KGMubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkPWMubmF0aXZlUmVxdWVz''@;'; put 'put ''dEFuaW1hdGlvbkZyYW1lLmNhbGwoSHQsKCk9PntjLmZha2VUb3BFdmVudFRhc2t8fChjLmZha2VUb3BFdmVudFRhc2s9Wm9uZS5yb290LnNjaGVkdWxlRXZlbnRUYXNrKCJmYWtlVG9wRXZlbnRUYXNrIiwoKT0+e2MubGFzdFJlcXVlc3RBbmltYXRpb25GcmFtZUlkPS0xLExTKGMpLGMuaXND''@;'; put 'put ''aGVja1N0YWJsZVJ1bm5pbmc9ITAsUlMoYyksYy5pc0NoZWNrU3RhYmxlUnVubmluZz0hMX0sdm9pZCAwLCgpPT57fSwoKT0+e30pKSxjLmZha2VUb3BFdmVudFRhc2suaW52b2tlKCl9KSxMUyhjKSl9KGMpfTtjLl9pbm5lcj1jLl9pbm5lci5mb3JrKHtuYW1lOiJhbmd1bGFyIixwcm9wZXJ0''@;'; put 'put ''aWVzOntpc0FuZ3VsYXJab25lOiEwfSxvbkludm9rZVRhc2s6KGEsZCxoLGYsdixNKT0+e2lmKGZ1bmN0aW9uIHJ6KGMpe3JldHVybiEoIUFycmF5LmlzQXJyYXkoYyl8fDEhPT1jLmxlbmd0aCkmJiEwPT09Y1swXS5kYXRhPy5fX2lnbm9yZV9uZ196b25lX199KE0pKXJldHVybiBhLmludm9r''@;'; put 'put ''ZVRhc2soaCxmLHYsTSk7dHJ5e3JldHVybiBmYihjKSxhLmludm9rZVRhc2soaCxmLHYsTSl9ZmluYWxseXsoYy5zaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uJiYiZXZlbnRUYXNrIj09PWYudHlwZXx8Yy5zaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVjdGlvbikmJmwoKSwk''@;'; put 'put ''RChjKX19LG9uSW52b2tlOihhLGQsaCxmLHYsTSxEKT0+e3RyeXtyZXR1cm4gZmIoYyksYS5pbnZva2UoaCxmLHYsTSxEKX1maW5hbGx5e2Muc2hvdWxkQ29hbGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb24mJmwoKSwkRChjKX19LG9uSGFzVGFzazooYSxkLGgsZik9PnthLmhhc1Rhc2soaCxmKSxk''@;'; put 'put ''PT09aCYmKCJtaWNyb1Rhc2siPT1mLmNoYW5nZT8oYy5faGFzUGVuZGluZ01pY3JvdGFza3M9Zi5taWNyb1Rhc2ssTFMoYyksUlMoYykpOiJtYWNyb1Rhc2siPT1mLmNoYW5nZSYmKGMuaGFzUGVuZGluZ01hY3JvdGFza3M9Zi5tYWNyb1Rhc2spKX0sb25IYW5kbGVFcnJvcjooYSxkLGgsZik9''@;'; put 'put ''PihhLmhhbmRsZUVycm9yKGgsZiksYy5ydW5PdXRzaWRlQW5ndWxhcigoKT0+Yy5vbkVycm9yLmVtaXQoZikpLCExKX0pfShoKX1zdGF0aWMgaXNJbkFuZ3VsYXJab25lKCl7cmV0dXJuIHR5cGVvZiBab25lPCJ1IiYmITA9PT1ab25lLmN1cnJlbnQuZ2V0KCJpc0FuZ3VsYXJab25lIil9c3Rh''@;'; put 'put ''dGljIGFzc2VydEluQW5ndWxhclpvbmUoKXtpZighWW8uaXNJbkFuZ3VsYXJab25lKCkpdGhyb3cgbmV3IGVyKDkwOSwhMSl9c3RhdGljIGFzc2VydE5vdEluQW5ndWxhclpvbmUoKXtpZihZby5pc0luQW5ndWxhclpvbmUoKSl0aHJvdyBuZXcgZXIoOTA5LCExKX1ydW4obCxhLGQpe3JldHVy''@;'; put 'put ''biB0aGlzLl9pbm5lci5ydW4obCxhLGQpfXJ1blRhc2sobCxhLGQsaCl7Y29uc3QgZj10aGlzLl9pbm5lcix2PWYuc2NoZWR1bGVFdmVudFRhc2soIk5nWm9uZUV2ZW50OiAiK2gsbCxleixHRCxHRCk7dHJ5e3JldHVybiBmLnJ1blRhc2sodixhLGQpfWZpbmFsbHl7Zi5jYW5jZWxUYXNrKHYp''@;'; put 'put ''fX1ydW5HdWFyZGVkKGwsYSxkKXtyZXR1cm4gdGhpcy5faW5uZXIucnVuR3VhcmRlZChsLGEsZCl9cnVuT3V0c2lkZUFuZ3VsYXIobCl7cmV0dXJuIHRoaXMuX291dGVyLnJ1bihsKX19Y29uc3QgZXo9e307ZnVuY3Rpb24gUlMoYyl7aWYoMD09Yy5fbmVzdGluZyYmIWMuaGFzUGVuZGluZ01p''@;'; put 'put ''Y3JvdGFza3MmJiFjLmlzU3RhYmxlKXRyeXtjLl9uZXN0aW5nKyssYy5vbk1pY3JvdGFza0VtcHR5LmVtaXQobnVsbCl9ZmluYWxseXtpZihjLl9uZXN0aW5nLS0sIWMuaGFzUGVuZGluZ01pY3JvdGFza3MpdHJ5e2MucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PmMub25TdGFibGUuZW1pdChudWxs''@;'; put 'put ''KSl9ZmluYWxseXtjLmlzU3RhYmxlPSEwfX19ZnVuY3Rpb24gTFMoYyl7Yy5oYXNQZW5kaW5nTWljcm90YXNrcz0hIShjLl9oYXNQZW5kaW5nTWljcm90YXNrc3x8KGMuc2hvdWxkQ29hbGVzY2VFdmVudENoYW5nZURldGVjdGlvbnx8Yy5zaG91bGRDb2FsZXNjZVJ1bkNoYW5nZURldGVjdGlv''@;'; put 'put ''bikmJi0xIT09Yy5sYXN0UmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQpfWZ1bmN0aW9uIGZiKGMpe2MuX25lc3RpbmcrKyxjLmlzU3RhYmxlJiYoYy5pc1N0YWJsZT0hMSxjLm9uVW5zdGFibGUuZW1pdChudWxsKSl9ZnVuY3Rpb24gJEQoYyl7Yy5fbmVzdGluZy0tLFJTKGMpfWNsYXNzIEtEe2Nv''@;'; put 'put ''bnN0cnVjdG9yKCl7dGhpcy5oYXNQZW5kaW5nTWljcm90YXNrcz0hMSx0aGlzLmhhc1BlbmRpbmdNYWNyb3Rhc2tzPSExLHRoaXMuaXNTdGFibGU9ITAsdGhpcy5vblVuc3RhYmxlPW5ldyBxcix0aGlzLm9uTWljcm90YXNrRW1wdHk9bmV3IHFyLHRoaXMub25TdGFibGU9bmV3IHFyLHRoaXMu''@;'; put 'put ''b25FcnJvcj1uZXcgcXJ9cnVuKGwsYSxkKXtyZXR1cm4gbC5hcHBseShhLGQpfXJ1bkd1YXJkZWQobCxhLGQpe3JldHVybiBsLmFwcGx5KGEsZCl9cnVuT3V0c2lkZUFuZ3VsYXIobCl7cmV0dXJuIGwoKX1ydW5UYXNrKGwsYSxkLGgpe3JldHVybiBsLmFwcGx5KGEsZCl9fXZhciAkMz1mdW5j''@;'; put 'put ''dGlvbihjKXtyZXR1cm4gY1tjLkVhcmx5UmVhZD0wXT0iRWFybHlSZWFkIixjW2MuV3JpdGU9MV09IldyaXRlIixjW2MuTWl4ZWRSZWFkV3JpdGU9Ml09Ik1peGVkUmVhZFdyaXRlIixjW2MuUmVhZD0zXT0iUmVhZCIsY30oJDN8fHt9KTtjb25zdCBPUz17ZGVzdHJveSgpe319O2Z1bmN0aW9u''@;'; put 'put ''IHBiKGMsbCl7IWwmJmZ1bmN0aW9uIGdmKGMpe2lmKCFidigpKXRocm93IG5ldyBlcigtMjAzLCExKX0oKTtjb25zdCBhPWw/LmluamVjdG9yPz9oaShEcyk7aWYoIWZ1bmN0aW9uIGFoKGMpe3JldHVybiJicm93c2VyIj09PShjPz9oaShEcykpLmdldChvYSl9KGEpKXJldHVybiBPUztmMigi''@;'; put 'put ''TmdBZnRlck5leHRSZW5kZXIiKTtjb25zdCBkPWEuZ2V0KE04KSxoPWQuaGFuZGxlcj8/PW5ldyBKRCxmPWw/LnBoYXNlPz8kMy5NaXhlZFJlYWRXcml0ZSx2PSgpPT57aC51bnJlZ2lzdGVyKEQpLE0oKX0sTT1hLmdldChFNSkub25EZXN0cm95KHYpLEQ9WDAoYSwoKT0+bmV3IFhEKGYsKCk9''@;'; put 'put ''Pnt2KCksYygpfSkpO3JldHVybiBoLnJlZ2lzdGVyKEQpLHtkZXN0cm95OnZ9fWNsYXNzIFhEe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5waGFzZT1sLHRoaXMuY2FsbGJhY2tGbj1hLHRoaXMuem9uZT1oaShZbyksdGhpcy5lcnJvckhhbmRsZXI9aGkodTIse29wdGlvbmFsOiEwfSksaGkoaGIs''@;'; put 'put ''e29wdGlvbmFsOiEwfSk/Lm5vdGlmeSgxKX1pbnZva2UoKXt0cnl7dGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKHRoaXMuY2FsbGJhY2tGbil9Y2F0Y2gobCl7dGhpcy5lcnJvckhhbmRsZXI/LmhhbmRsZUVycm9yKGwpfX19Y2xhc3MgSkR7Y29uc3RydWN0b3IoKXt0aGlzLmV4ZWN1dGlu''@;'; put 'put ''Z0NhbGxiYWNrcz0hMSx0aGlzLmJ1Y2tldHM9e1skMy5FYXJseVJlYWRdOm5ldyBTZXQsWyQzLldyaXRlXTpuZXcgU2V0LFskMy5NaXhlZFJlYWRXcml0ZV06bmV3IFNldCxbJDMuUmVhZF06bmV3IFNldH0sdGhpcy5kZWZlcnJlZENhbGxiYWNrcz1uZXcgU2V0fXJlZ2lzdGVyKGwpeyh0aGlz''@;'; put 'put ''LmV4ZWN1dGluZ0NhbGxiYWNrcz90aGlzLmRlZmVycmVkQ2FsbGJhY2tzOnRoaXMuYnVja2V0c1tsLnBoYXNlXSkuYWRkKGwpfXVucmVnaXN0ZXIobCl7dGhpcy5idWNrZXRzW2wucGhhc2VdLmRlbGV0ZShsKSx0aGlzLmRlZmVycmVkQ2FsbGJhY2tzLmRlbGV0ZShsKX1leGVjdXRlKCl7dGhp''@;'; put 'put ''cy5leGVjdXRpbmdDYWxsYmFja3M9ITA7Zm9yKGNvbnN0IGwgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmJ1Y2tldHMpKWZvcihjb25zdCBhIG9mIGwpYS5pbnZva2UoKTt0aGlzLmV4ZWN1dGluZ0NhbGxiYWNrcz0hMTtmb3IoY29uc3QgbCBvZiB0aGlzLmRlZmVycmVkQ2FsbGJhY2tzKXRoaXMu''@;'; put 'put ''YnVja2V0c1tsLnBoYXNlXS5hZGQobCk7dGhpcy5kZWZlcnJlZENhbGxiYWNrcy5jbGVhcigpfWRlc3Ryb3koKXtmb3IoY29uc3QgbCBvZiBPYmplY3QudmFsdWVzKHRoaXMuYnVja2V0cykpbC5jbGVhcigpO3RoaXMuZGVmZXJyZWRDYWxsYmFja3MuY2xlYXIoKX19bGV0IE04PSgoKT0+e2Ns''@;'; put 'put ''YXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmhhbmRsZXI9bnVsbCx0aGlzLmludGVybmFsQ2FsbGJhY2tzPVtdfWV4ZWN1dGUoKXt0aGlzLmV4ZWN1dGVJbnRlcm5hbENhbGxiYWNrcygpLHRoaXMuaGFuZGxlcj8uZXhlY3V0ZSgpfWV4ZWN1dGVJbnRlcm5hbENhbGxiYWNrcygpe2NvbnN0IGE9''@;'; put 'put ''Wy4uLnRoaXMuaW50ZXJuYWxDYWxsYmFja3NdO3RoaXMuaW50ZXJuYWxDYWxsYmFja3MubGVuZ3RoPTA7Zm9yKGNvbnN0IGQgb2YgYSlkKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmhhbmRsZXI/LmRlc3Ryb3koKSx0aGlzLmhhbmRsZXI9bnVsbCx0aGlzLmludGVybmFsQ2FsbGJhY2tzLmxlbmd0''@;'; put 'put ''aD0wfXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+bmV3IGN9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIG1iKGMsbCxhKXtsZXQgZD1hP2Muc3R5bGVzOm51bGwsaD1hP2MuY2xhc3NlczpudWxsLGY9MDtpZihudWxsIT09''@;'; put 'put ''bClmb3IobGV0IHY9MDt2PGwubGVuZ3RoO3YrKyl7Y29uc3QgTT1sW3ZdOyJudW1iZXIiPT10eXBlb2YgTT9mPU06MT09Zj9oPWFkKGgsTSk6Mj09ZiYmKGQ9YWQoZCxNKyI6ICIrbFsrK3ZdKyI7IikpfWE/Yy5zdHlsZXM9ZDpjLnN0eWxlc1dpdGhvdXRIb3N0PWQsYT9jLmNsYXNzZXM9aDpj''@;'; put 'put ''LmNsYXNzZXNXaXRob3V0SG9zdD1ofWNsYXNzIHRJIGV4dGVuZHMgejV7Y29uc3RydWN0b3IobCl7c3VwZXIoKSx0aGlzLm5nTW9kdWxlPWx9cmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkobCl7Y29uc3QgYT1WYShsKTtyZXR1cm4gbmV3IFQ4KGEsdGhpcy5uZ01vZHVsZSl9fWZ1bmN0aW9uIG5J''@;'; put 'put ''KGMpe2NvbnN0IGw9W107Zm9yKGNvbnN0IGEgaW4gYyl7aWYoIWMuaGFzT3duUHJvcGVydHkoYSkpY29udGludWU7Y29uc3QgZD1jW2FdO3ZvaWQgMCE9PWQmJmwucHVzaCh7cHJvcE5hbWU6QXJyYXkuaXNBcnJheShkKT9kWzBdOmQsdGVtcGxhdGVOYW1lOmF9KX1yZXR1cm4gbH1jbGFzcyB2''@;'; put 'put ''Yntjb25zdHJ1Y3RvcihsLGEpe3RoaXMuaW5qZWN0b3I9bCx0aGlzLnBhcmVudEluamVjdG9yPWF9Z2V0KGwsYSxkKXtkPW41KGQpO2NvbnN0IGg9dGhpcy5pbmplY3Rvci5nZXQobCxJUyxkKTtyZXR1cm4gaCE9PUlTfHxhPT09SVM/aDp0aGlzLnBhcmVudEluamVjdG9yLmdldChsLGEsZCl9''@;'; put 'put ''fWNsYXNzIFQ4IGV4dGVuZHMgV0R7Z2V0IGlucHV0cygpe2NvbnN0IGw9dGhpcy5jb21wb25lbnREZWYsYT1sLmlucHV0VHJhbnNmb3JtcyxkPW5JKGwuaW5wdXRzKTtpZihudWxsIT09YSlmb3IoY29uc3QgaCBvZiBkKWEuaGFzT3duUHJvcGVydHkoaC5wcm9wTmFtZSkmJihoLnRyYW5zZm9y''@;'; put 'put ''bT1hW2gucHJvcE5hbWVdKTtyZXR1cm4gZH1nZXQgb3V0cHV0cygpe3JldHVybiBuSSh0aGlzLmNvbXBvbmVudERlZi5vdXRwdXRzKX1jb25zdHJ1Y3RvcihsLGEpe3N1cGVyKCksdGhpcy5jb21wb25lbnREZWY9bCx0aGlzLm5nTW9kdWxlPWEsdGhpcy5jb21wb25lbnRUeXBlPWwudHlwZSx0''@;'; put 'put ''aGlzLnNlbGVjdG9yPWZ1bmN0aW9uIFZ3KGMpe3JldHVybiBjLm1hcChOdykuam9pbigiLCIpfShsLnNlbGVjdG9ycyksdGhpcy5uZ0NvbnRlbnRTZWxlY3RvcnM9bC5uZ0NvbnRlbnRTZWxlY3RvcnM/bC5uZ0NvbnRlbnRTZWxlY3RvcnM6W10sdGhpcy5pc0JvdW5kVG9Nb2R1bGU9ISFhfWNy''@;'; put 'put ''ZWF0ZShsLGEsZCxoKXtjb25zdCBmPV9lKG51bGwpO3RyeXtsZXQgdj0oaD1ofHx0aGlzLm5nTW9kdWxlKWluc3RhbmNlb2YgY2M/aDpoPy5pbmplY3Rvcjt2JiZudWxsIT09dGhpcy5jb21wb25lbnREZWYuZ2V0U3RhbmRhbG9uZUluamVjdG9yJiYodj10aGlzLmNvbXBvbmVudERlZi5nZXRT''@;'; put 'put ''dGFuZGFsb25lSW5qZWN0b3Iodil8fHYpO2NvbnN0IE09dj9uZXcgdmIobCx2KTpsLEQ9TS5nZXQoUzgsbnVsbCk7aWYobnVsbD09PUQpdGhyb3cgbmV3IGVyKDQwNywhMSk7Y29uc3QgWj1NLmdldChKaixudWxsKSxiZT17cmVuZGVyZXJGYWN0b3J5OkQsc2FuaXRpemVyOlosaW5saW5lRWZm''@;'; put 'put ''ZWN0UnVubmVyOm51bGwsYWZ0ZXJSZW5kZXJFdmVudE1hbmFnZXI6TS5nZXQoTTgsbnVsbCksY2hhbmdlRGV0ZWN0aW9uU2NoZWR1bGVyOk0uZ2V0KGhiLG51bGwpfSxFZT1ELmNyZWF0ZVJlbmRlcmVyKG51bGwsdGhpcy5jb21wb25lbnREZWYpLEJlPXRoaXMuY29tcG9uZW50RGVmLnNlbGVj''@;'; put 'put ''dG9yc1swXVswXXx8ImRpdiIscWU9ZD9mdW5jdGlvbiBLQihjLGwsYSxkKXtjb25zdCBmPWQuZ2V0KExrLCExKXx8YT09PSRzLlNoYWRvd0RvbSx2PWMuc2VsZWN0Um9vdEVsZW1lbnQobCxmKTtyZXR1cm4gZnVuY3Rpb24gcUIoYyl7YkQoYyl9KHYpLHZ9KEVlLGQsdGhpcy5jb21wb25lbnRE''@;'; put 'put ''ZWYuZW5jYXBzdWxhdGlvbixNKTpWNChFZSxCZSxmdW5jdGlvbiBzeihjKXtjb25zdCBsPWMudG9Mb3dlckNhc2UoKTtyZXR1cm4ic3ZnIj09PWw/InN2ZyI6Im1hdGgiPT09bD8ibWF0aCI6bnVsbH0oQmUpKTtsZXQgbnQ9NTEyO3RoaXMuY29tcG9uZW50RGVmLnNpZ25hbHM/bnR8PTQwOTY6''@;'; put 'put ''dGhpcy5jb21wb25lbnREZWYub25QdXNofHwobnR8PTE2KTtsZXQgbHQ9bnVsbDtudWxsIT09cWUmJihsdD1JQyhxZSxNLCEwKSk7Y29uc3QgbXQ9Z1MoMCxudWxsLG51bGwsMSwwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsKSxKdD1uYihudWxsLG10LG51bGwsbnQsbnVsbCxudWxs''@;'; put 'put ''LGJlLEVlLE0sbnVsbCxsdCk7bGV0IHluLENuO0c2KEp0KTt0cnl7Y29uc3QgdG49dGhpcy5jb21wb25lbnREZWY7bGV0IHhuLFFuPW51bGw7dG4uZmluZEhvc3REaXJlY3RpdmVEZWZzPyh4bj1bXSxRbj1uZXcgTWFwLHRuLmZpbmRIb3N0RGlyZWN0aXZlRGVmcyh0bix4bixRbikseG4ucHVz''@;'; put 'put ''aCh0bikpOnhuPVt0bl07Y29uc3QgeWk9ZnVuY3Rpb24gY3ooYyxsKXtjb25zdCBhPWNbcWldLGQ9d2E7cmV0dXJuIGNbZF09bCxONShhLGQsMiwiI2hvc3QiLG51bGwpfShKdCxxZSkseXI9ZnVuY3Rpb24gdXooYyxsLGEsZCxoLGYsdil7Y29uc3QgTT1oW3FpXTshZnVuY3Rpb24gZHooYyxs''@;'; put 'put ''LGEsZCl7Zm9yKGNvbnN0IGggb2YgYylsLm1lcmdlZEF0dHJzPWRmKGwubWVyZ2VkQXR0cnMsaC5ob3N0QXR0cnMpO251bGwhPT1sLm1lcmdlZEF0dHJzJiYobWIobCxsLm1lcmdlZEF0dHJzLCEwKSxudWxsIT09YSYmcEQoZCxhLGwpKX0oZCxjLGwsdik7bGV0IEQ9bnVsbDtudWxsIT09bCYm''@;'; put 'put ''KEQ9SUMobCxoW2RjXSkpO2NvbnN0IFo9Zi5yZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIobCxhKTtsZXQgbmU9MTY7YS5zaWduYWxzP25lPTQwOTY6YS5vblB1c2gmJihuZT02NCk7Y29uc3QgY2U9bmIoaCxyYihhKSxudWxsLG5lLGhbYy5pbmRleF0sYyxmLFosbnVsbCxudWxsLEQp''@;'; put 'put ''O3JldHVybiBNLmZpcnN0Q3JlYXRlUGFzcyYmYlMoTSxjLGQubGVuZ3RoLTEpLGQ4KGgsY2UpLGhbYy5pbmRleF09Y2V9KHlpLHFlLHRuLHhuLEp0LGJlLEVlKTtDbj1aNihtdCx3YSkscWUmJmZ1bmN0aW9uIGZ6KGMsbCxhLGQpe2lmKGQpZjQoYyxhLFsibmctdmVyc2lvbiIsIjE3LjMuMTIi''@;'; put 'put ''XSk7ZWxzZXtjb25zdHthdHRyczpoLGNsYXNzZXM6Zn09ZnVuY3Rpb24gcW8oYyl7Y29uc3QgbD1bXSxhPVtdO2xldCBkPTEsaD0yO2Zvcig7ZDxjLmxlbmd0aDspe2xldCBmPWNbZF07aWYoInN0cmluZyI9PXR5cGVvZiBmKTI9PT1oPyIiIT09ZiYmbC5wdXNoKGYsY1srK2RdKTo4PT09aCYm''@;'; put 'put ''YS5wdXNoKGYpO2Vsc2V7aWYoIVNjKGgpKWJyZWFrO2g9Zn1kKyt9cmV0dXJue2F0dHJzOmwsY2xhc3NlczphfX0obC5zZWxlY3RvcnNbMF0pO2gmJmY0KGMsYSxoKSxmJiZmLmxlbmd0aD4wJiZmRChjLGEsZi5qb2luKCIgIikpfX0oRWUsdG4scWUsZCksdm9pZCAwIT09YSYmZnVuY3Rpb24g''@;'; put 'put ''cHooYyxsLGEpe2NvbnN0IGQ9Yy5wcm9qZWN0aW9uPVtdO2ZvcihsZXQgaD0wO2g8bC5sZW5ndGg7aCsrKXtjb25zdCBmPWFbaF07ZC5wdXNoKG51bGwhPWY/QXJyYXkuZnJvbShmKTpudWxsKX19KENuLHRoaXMubmdDb250ZW50U2VsZWN0b3JzLGEpLHluPWZ1bmN0aW9uIGh6KGMsbCxhLGQs''@;'; put 'put ''aCxmKXtjb25zdCB2PWxsKCksTT1oW3FpXSxEPUwwKHYsaCk7dlMoTSxoLHYsYSxudWxsLGQpO2ZvcihsZXQgbmU9MDtuZTxhLmxlbmd0aDtuZSsrKUJ1KFQ0KGgsTSx2LmRpcmVjdGl2ZVN0YXJ0K25lLHYpLGgpO0VEKE0saCx2KSxEJiZCdShELGgpO2NvbnN0IFo9VDQoaCxNLHYuZGlyZWN0''@;'; put 'put ''aXZlU3RhcnQrdi5jb21wb25lbnRPZmZzZXQsdik7aWYoY1tzbF09aFtzbF09WixudWxsIT09Zilmb3IoY29uc3QgbmUgb2YgZiluZShaLGwpO3JldHVybiBoUyhNLHYsaCksWn0oeXIsdG4seG4sUW4sSnQsW2d6XSksQ1MobXQsSnQsbnVsbCl9ZmluYWxseXtiNSgpfXJldHVybiBuZXcgbHoo''@;'; put 'put ''dGhpcy5jb21wb25lbnRUeXBlLHluLEQ0KENuLEp0KSxKdCxDbil9ZmluYWxseXtfZShmKX19fWNsYXNzIGx6IGV4dGVuZHMgR2p7Y29uc3RydWN0b3IobCxhLGQsaCxmKXtzdXBlcigpLHRoaXMubG9jYXRpb249ZCx0aGlzLl9yb290TFZpZXc9aCx0aGlzLl90Tm9kZT1mLHRoaXMucHJldmlv''@;'; put 'put ''dXNJbnB1dFZhbHVlcz1udWxsLHRoaXMuaW5zdGFuY2U9YSx0aGlzLmhvc3RWaWV3PXRoaXMuY2hhbmdlRGV0ZWN0b3JSZWY9bmV3IGI4KGgsdm9pZCAwLCExKSx0aGlzLmNvbXBvbmVudFR5cGU9bH1zZXRJbnB1dChsLGEpe2NvbnN0IGQ9dGhpcy5fdE5vZGUuaW5wdXRzO2xldCBoO2lmKG51''@;'; put 'put ''bGwhPT1kJiYoaD1kW2xdKSl7aWYodGhpcy5wcmV2aW91c0lucHV0VmFsdWVzPz89bmV3IE1hcCx0aGlzLnByZXZpb3VzSW5wdXRWYWx1ZXMuaGFzKGwpJiZPYmplY3QuaXModGhpcy5wcmV2aW91c0lucHV0VmFsdWVzLmdldChsKSxhKSlyZXR1cm47Y29uc3QgZj10aGlzLl9yb290TFZpZXc7''@;'; put 'put ''d1MoZltxaV0sZixoLGwsYSksdGhpcy5wcmV2aW91c0lucHV0VmFsdWVzLnNldChsLGEpLHY4KE8xKHRoaXMuX3ROb2RlLmluZGV4LGYpKX19Z2V0IGluamVjdG9yKCl7cmV0dXJuIG5ldyBWdSh0aGlzLl90Tm9kZSx0aGlzLl9yb290TFZpZXcpfWRlc3Ryb3koKXt0aGlzLmhvc3RWaWV3LmRl''@;'; put 'put ''c3Ryb3koKX1vbkRlc3Ryb3kobCl7dGhpcy5ob3N0Vmlldy5vbkRlc3Ryb3kobCl9fWZ1bmN0aW9uIGd6KCl7Y29uc3QgYz1sbCgpO0V2KHVpKClbcWldLGMpfWxldCBEYT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLl9fTkdfRUxFTUVOVF9JRF9fPW16fX1yZXR1cm4gY30pKCk7ZnVuY3Rp''@;'; put 'put ''b24gbXooKXtyZXR1cm4gb0kobGwoKSx1aSgpKX1jb25zdCB2ej1EYSxyST1jbGFzcyBleHRlbmRzIHZ6e2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcigpLHRoaXMuX2xDb250YWluZXI9bCx0aGlzLl9ob3N0VE5vZGU9YSx0aGlzLl9ob3N0TFZpZXc9ZH1nZXQgZWxlbWVudCgpe3JldHVybiBE''@;'; put 'put ''NCh0aGlzLl9ob3N0VE5vZGUsdGhpcy5faG9zdExWaWV3KX1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gbmV3IFZ1KHRoaXMuX2hvc3RUTm9kZSx0aGlzLl9ob3N0TFZpZXcpfWdldCBwYXJlbnRJbmplY3Rvcigpe2NvbnN0IGw9eTUodGhpcy5faG9zdFROb2RlLHRoaXMuX2hvc3RMVmlldyk7aWYo''@;'; put 'put ''a3YobCkpe2NvbnN0IGE9cTYobCx0aGlzLl9ob3N0TFZpZXcpLGQ9SzYobCk7cmV0dXJuIG5ldyBWdShhW3FpXS5kYXRhW2QrOF0sYSl9cmV0dXJuIG5ldyBWdShudWxsLHRoaXMuX2hvc3RMVmlldyl9Y2xlYXIoKXtmb3IoO3RoaXMubGVuZ3RoPjA7KXRoaXMucmVtb3ZlKHRoaXMubGVuZ3Ro''@;'; put 'put ''LTEpfWdldChsKXtjb25zdCBhPWlJKHRoaXMuX2xDb250YWluZXIpO3JldHVybiBudWxsIT09YSYmYVtsXXx8bnVsbH1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2xDb250YWluZXIubGVuZ3RoLWhjfWNyZWF0ZUVtYmVkZGVkVmlldyhsLGEsZCl7bGV0IGgsZjsibnVtYmVyIj09dHlwZW9m''@;'; put 'put ''IGQ/aD1kOm51bGwhPWQmJihoPWQuaW5kZXgsZj1kLmluamVjdG9yKTtjb25zdCBNPWwuY3JlYXRlRW1iZWRkZWRWaWV3SW1wbChhfHx7fSxmLG51bGwpO3JldHVybiB0aGlzLmluc2VydEltcGwoTSxoLEI1KHRoaXMuX2hvc3RUTm9kZSxudWxsKSksTX1jcmVhdGVDb21wb25lbnQobCxhLGQs''@;'; put 'put ''aCxmKXtjb25zdCB2PWwmJiFmdW5jdGlvbiBVaShjKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgY30obCk7bGV0IE07aWYodilNPWE7ZWxzZXtjb25zdCBCZT1hfHx7fTtNPUJlLmluZGV4LGQ9QmUuaW5qZWN0b3IsaD1CZS5wcm9qZWN0YWJsZU5vZGVzLGY9QmUuZW52aXJvbm1lbnRJbmpl''@;'; put 'put ''Y3Rvcnx8QmUubmdNb2R1bGVSZWZ9Y29uc3QgRD12P2w6bmV3IFQ4KFZhKGwpKSxaPWR8fHRoaXMucGFyZW50SW5qZWN0b3I7aWYoIWYmJm51bGw9PUQubmdNb2R1bGUpe2NvbnN0IHFlPSh2P1o6dGhpcy5wYXJlbnRJbmplY3RvcikuZ2V0KGNjLG51bGwpO3FlJiYoZj1xZSl9VmEoRC5jb21w''@;'; put 'put ''b25lbnRUeXBlPz97fSk7Y29uc3QgRWU9RC5jcmVhdGUoWixoLG51bGwsZik7cmV0dXJuIHRoaXMuaW5zZXJ0SW1wbChFZS5ob3N0VmlldyxNLEI1KHRoaXMuX2hvc3RUTm9kZSxudWxsKSksRWV9aW5zZXJ0KGwsYSl7cmV0dXJuIHRoaXMuaW5zZXJ0SW1wbChsLGEsITApfWluc2VydEltcGwo''@;'; put 'put ''bCxhLGQpe2NvbnN0IGg9bC5fbFZpZXc7aWYoZnVuY3Rpb24gWkEoYyl7cmV0dXJuIEZ1KGNbdWNdKX0oaCkpe2NvbnN0IE09dGhpcy5pbmRleE9mKGwpO2lmKC0xIT09TSl0aGlzLmRldGFjaChNKTtlbHNle2NvbnN0IEQ9aFt1Y10sWj1uZXcgckkoRCxEW25jXSxEW3VjXSk7Wi5kZXRhY2go''@;'; put 'put ''Wi5pbmRleE9mKGwpKX19Y29uc3QgZj10aGlzLl9hZGp1c3RJbmRleChhKSx2PXRoaXMuX2xDb250YWluZXI7cmV0dXJuIGc4KHYsaCxmLGQpLGwuYXR0YWNoVG9WaWV3Q29udGFpbmVyUmVmKCksTGwoTlModiksZixsKSxsfW1vdmUobCxhKXtyZXR1cm4gdGhpcy5pbnNlcnQobCxhKX1pbmRl''@;'; put 'put ''eE9mKGwpe2NvbnN0IGE9aUkodGhpcy5fbENvbnRhaW5lcik7cmV0dXJuIG51bGwhPT1hP2EuaW5kZXhPZihsKTotMX1yZW1vdmUobCl7Y29uc3QgYT10aGlzLl9hZGp1c3RJbmRleChsLC0xKSxkPW84KHRoaXMuX2xDb250YWluZXIsYSk7ZCYmKEx1KE5TKHRoaXMuX2xDb250YWluZXIpLGEp''@;'; put 'put ''LEI0KGRbcWldLGQpKX1kZXRhY2gobCl7Y29uc3QgYT10aGlzLl9hZGp1c3RJbmRleChsLC0xKSxkPW84KHRoaXMuX2xDb250YWluZXIsYSk7cmV0dXJuIGQmJm51bGwhPUx1KE5TKHRoaXMuX2xDb250YWluZXIpLGEpP25ldyBiOChkKTpudWxsfV9hZGp1c3RJbmRleChsLGE9MCl7cmV0dXJu''@;'; put 'put ''IGw/P3RoaXMubGVuZ3RoK2F9fTtmdW5jdGlvbiBpSShjKXtyZXR1cm4gY1s4XX1mdW5jdGlvbiBOUyhjKXtyZXR1cm4gY1s4XXx8KGNbOF09W10pfWZ1bmN0aW9uIG9JKGMsbCl7bGV0IGE7Y29uc3QgZD1sW2MuaW5kZXhdO3JldHVybiBGdShkKT9hPWQ6KGE9X1MoZCxsLG51bGwsYyksbFtj''@;'; put 'put ''LmluZGV4XT1hLGQ4KGwsYSkpLFZTKGEsbCxjLGQpLG5ldyBySShhLGMsbCl9bGV0IFZTPWZ1bmN0aW9uIEJTKGMsbCxhLGQpe2lmKGNbbXVdKXJldHVybjtsZXQgaDtoPTgmYS50eXBlP19sKGQpOmZ1bmN0aW9uIGJ6KGMsbCl7Y29uc3QgYT1jW2JhXSxkPWEuY3JlYXRlQ29tbWVudCgiIiks''@;'; put 'put ''aD1MMChsLGMpO3JldHVybiBqNChhLFczKGEsaCksZCxmdW5jdGlvbiBpUyhjLGwpe3JldHVybiBjLm5leHRTaWJsaW5nKGwpfShhLGgpLCExKSxkfShsLGEpLGNbbXVdPWh9LGJiPSgpPT4hMTtjbGFzcyBqU3tjb25zdHJ1Y3RvcihsKXt0aGlzLnF1ZXJ5TGlzdD1sLHRoaXMubWF0Y2hlcz1u''@;'; put 'put ''dWxsfWNsb25lKCl7cmV0dXJuIG5ldyBqUyh0aGlzLnF1ZXJ5TGlzdCl9c2V0RGlydHkoKXt0aGlzLnF1ZXJ5TGlzdC5zZXREaXJ0eSgpfX1jbGFzcyB5Yntjb25zdHJ1Y3RvcihsPVtdKXt0aGlzLnF1ZXJpZXM9bH1jcmVhdGVFbWJlZGRlZFZpZXcobCl7Y29uc3QgYT1sLnF1ZXJpZXM7aWYo''@;'; put 'put ''bnVsbCE9PWEpe2NvbnN0IGQ9bnVsbCE9PWwuY29udGVudFF1ZXJpZXM/bC5jb250ZW50UXVlcmllc1swXTphLmxlbmd0aCxoPVtdO2ZvcihsZXQgZj0wO2Y8ZDtmKyspe2NvbnN0IHY9YS5nZXRCeUluZGV4KGYpO2gucHVzaCh0aGlzLnF1ZXJpZXNbdi5pbmRleEluRGVjbGFyYXRpb25WaWV3''@;'; put 'put ''XS5jbG9uZSgpKX1yZXR1cm4gbmV3IHliKGgpfXJldHVybiBudWxsfWluc2VydFZpZXcobCl7dGhpcy5kaXJ0eVF1ZXJpZXNXaXRoTWF0Y2hlcyhsKX1kZXRhY2hWaWV3KGwpe3RoaXMuZGlydHlRdWVyaWVzV2l0aE1hdGNoZXMobCl9ZmluaXNoVmlld0NyZWF0aW9uKGwpe3RoaXMuZGlydHlR''@;'; put 'put ''dWVyaWVzV2l0aE1hdGNoZXMobCl9ZGlydHlRdWVyaWVzV2l0aE1hdGNoZXMobCl7Zm9yKGxldCBhPTA7YTx0aGlzLnF1ZXJpZXMubGVuZ3RoO2ErKyludWxsIT09V1MobCxhKS5tYXRjaGVzJiZ0aGlzLnF1ZXJpZXNbYV0uc2V0RGlydHkoKX19Y2xhc3MgYUl7Y29uc3RydWN0b3IobCxhLGQ9''@;'; put 'put ''bnVsbCl7dGhpcy5mbGFncz1hLHRoaXMucmVhZD1kLHRoaXMucHJlZGljYXRlPSJzdHJpbmciPT10eXBlb2YgbD9mdW5jdGlvbiBkSShjKXtyZXR1cm4gYy5zcGxpdCgiLCIpLm1hcChsPT5sLnRyaW0oKSl9KGwpOmx9fWNsYXNzIHpTe2NvbnN0cnVjdG9yKGw9W10pe3RoaXMucXVlcmllcz1s''@;'; put 'put ''fWVsZW1lbnRTdGFydChsLGEpe2ZvcihsZXQgZD0wO2Q8dGhpcy5xdWVyaWVzLmxlbmd0aDtkKyspdGhpcy5xdWVyaWVzW2RdLmVsZW1lbnRTdGFydChsLGEpfWVsZW1lbnRFbmQobCl7Zm9yKGxldCBhPTA7YTx0aGlzLnF1ZXJpZXMubGVuZ3RoO2ErKyl0aGlzLnF1ZXJpZXNbYV0uZWxlbWVu''@;'; put 'put ''dEVuZChsKX1lbWJlZGRlZFRWaWV3KGwpe2xldCBhPW51bGw7Zm9yKGxldCBkPTA7ZDx0aGlzLmxlbmd0aDtkKyspe2NvbnN0IGg9bnVsbCE9PWE/YS5sZW5ndGg6MCxmPXRoaXMuZ2V0QnlJbmRleChkKS5lbWJlZGRlZFRWaWV3KGwsaCk7ZiYmKGYuaW5kZXhJbkRlY2xhcmF0aW9uVmlldz1k''@;'; put 'put ''LG51bGwhPT1hP2EucHVzaChmKTphPVtmXSl9cmV0dXJuIG51bGwhPT1hP25ldyB6UyhhKTpudWxsfXRlbXBsYXRlKGwsYSl7Zm9yKGxldCBkPTA7ZDx0aGlzLnF1ZXJpZXMubGVuZ3RoO2QrKyl0aGlzLnF1ZXJpZXNbZF0udGVtcGxhdGUobCxhKX1nZXRCeUluZGV4KGwpe3JldHVybiB0aGlz''@;'; put 'put ''LnF1ZXJpZXNbbF19Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLnF1ZXJpZXMubGVuZ3RofXRyYWNrKGwpe3RoaXMucXVlcmllcy5wdXNoKGwpfX1jbGFzcyBVU3tjb25zdHJ1Y3RvcihsLGE9LTEpe3RoaXMubWV0YWRhdGE9bCx0aGlzLm1hdGNoZXM9bnVsbCx0aGlzLmluZGV4SW5EZWNsYXJh''@;'; put 'put ''dGlvblZpZXc9LTEsdGhpcy5jcm9zc2VzTmdUZW1wbGF0ZT0hMSx0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZT0hMCx0aGlzLl9kZWNsYXJhdGlvbk5vZGVJbmRleD1hfWVsZW1lbnRTdGFydChsLGEpe3RoaXMuaXNBcHBseWluZ1RvTm9kZShhKSYmdGhpcy5tYXRjaFROb2RlKGwsYSl9ZWxlbWVu''@;'; put 'put ''dEVuZChsKXt0aGlzLl9kZWNsYXJhdGlvbk5vZGVJbmRleD09PWwuaW5kZXgmJih0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZT0hMSl9dGVtcGxhdGUobCxhKXt0aGlzLmVsZW1lbnRTdGFydChsLGEpfWVtYmVkZGVkVFZpZXcobCxhKXtyZXR1cm4gdGhpcy5pc0FwcGx5aW5nVG9Ob2RlKGwpPyh0''@;'; put 'put ''aGlzLmNyb3NzZXNOZ1RlbXBsYXRlPSEwLHRoaXMuYWRkTWF0Y2goLWwuaW5kZXgsYSksbmV3IFVTKHRoaXMubWV0YWRhdGEpKTpudWxsfWlzQXBwbHlpbmdUb05vZGUobCl7aWYodGhpcy5fYXBwbGllc1RvTmV4dE5vZGUmJjEmfnRoaXMubWV0YWRhdGEuZmxhZ3Mpe2NvbnN0IGE9dGhpcy5f''@;'; put 'put ''ZGVjbGFyYXRpb25Ob2RlSW5kZXg7bGV0IGQ9bC5wYXJlbnQ7Zm9yKDtudWxsIT09ZCYmOCZkLnR5cGUmJmQuaW5kZXghPT1hOylkPWQucGFyZW50O3JldHVybiBhPT09KG51bGwhPT1kP2QuaW5kZXg6LTEpfXJldHVybiB0aGlzLl9hcHBsaWVzVG9OZXh0Tm9kZX1tYXRjaFROb2RlKGwsYSl7''@;'; put 'put ''Y29uc3QgZD10aGlzLm1ldGFkYXRhLnByZWRpY2F0ZTtpZihBcnJheS5pc0FycmF5KGQpKWZvcihsZXQgaD0wO2g8ZC5sZW5ndGg7aCsrKXtjb25zdCBmPWRbaF07dGhpcy5tYXRjaFROb2RlV2l0aFJlYWRPcHRpb24obCxhLEN6KGEsZikpLHRoaXMubWF0Y2hUTm9kZVdpdGhSZWFkT3B0aW9u''@;'; put 'put ''KGwsYSxPdihhLGwsZiwhMSwhMSkpfWVsc2UgZD09PXdsPzQmYS50eXBlJiZ0aGlzLm1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbihsLGEsLTEpOnRoaXMubWF0Y2hUTm9kZVdpdGhSZWFkT3B0aW9uKGwsYSxPdihhLGwsZCwhMSwhMSkpfW1hdGNoVE5vZGVXaXRoUmVhZE9wdGlvbihsLGEsZCl7''@;'; put 'put ''aWYobnVsbCE9PWQpe2NvbnN0IGg9dGhpcy5tZXRhZGF0YS5yZWFkO2lmKG51bGwhPT1oKWlmKGg9PT1lb3x8aD09PURhfHxoPT09d2wmJjQmYS50eXBlKXRoaXMuYWRkTWF0Y2goYS5pbmRleCwtMik7ZWxzZXtjb25zdCBmPU92KGEsbCxoLCExLCExKTtudWxsIT09ZiYmdGhpcy5hZGRNYXRj''@;'; put 'put ''aChhLmluZGV4LGYpfWVsc2UgdGhpcy5hZGRNYXRjaChhLmluZGV4LGQpfX1hZGRNYXRjaChsLGEpe251bGw9PT10aGlzLm1hdGNoZXM/dGhpcy5tYXRjaGVzPVtsLGFdOnRoaXMubWF0Y2hlcy5wdXNoKGwsYSl9fWZ1bmN0aW9uIEN6KGMsbCl7Y29uc3QgYT1jLmxvY2FsTmFtZXM7aWYobnVs''@;'; put 'put ''bCE9PWEpZm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKz0yKWlmKGFbZF09PT1sKXJldHVybiBhW2QrMV07cmV0dXJuIG51bGx9ZnVuY3Rpb24gU3ooYyxsLGEsZCl7cmV0dXJuLTE9PT1hP2Z1bmN0aW9uIHNJKGMsbCl7cmV0dXJuIDExJmMudHlwZT9ENChjLGwpOjQmYy50eXBlP3NiKGMsbCk6''@;'; put 'put ''bnVsbH0obCxjKTotMj09PWE/ZnVuY3Rpb24gWlMoYyxsLGEpe3JldHVybiBhPT09ZW8/RDQobCxjKTphPT09d2w/c2IobCxjKTphPT09RGE/b0kobCxjKTp2b2lkIDB9KGMsbCxkKTpUNChjLGNbcWldLGEsbCl9ZnVuY3Rpb24gVTUoYyxsLGEsZCl7Y29uc3QgaD1sW3VkXS5xdWVyaWVzW2Rd''@;'; put 'put ''O2lmKG51bGw9PT1oLm1hdGNoZXMpe2NvbnN0IGY9Yy5kYXRhLHY9YS5tYXRjaGVzLE09W107Zm9yKGxldCBEPTA7bnVsbCE9PXYmJkQ8di5sZW5ndGg7RCs9Mil7Y29uc3QgWj12W0RdO00ucHVzaChaPDA/bnVsbDpTeihsLGZbWl0sdltEKzFdLGEubWV0YWRhdGEucmVhZCkpfWgubWF0Y2hl''@;'; put 'put ''cz1NfXJldHVybiBoLm1hdGNoZXN9ZnVuY3Rpb24gQTgoYyxsLGEsZCl7Y29uc3QgaD1jLnF1ZXJpZXMuZ2V0QnlJbmRleChhKSxmPWgubWF0Y2hlcztpZihudWxsIT09Zil7Y29uc3Qgdj1VNShjLGwsaCxhKTtmb3IobGV0IE09MDtNPGYubGVuZ3RoO00rPTIpe2NvbnN0IEQ9ZltNXTtpZihE''@;'; put 'put ''PjApZC5wdXNoKHZbTS8yXSk7ZWxzZXtjb25zdCBaPWZbTSsxXSxuZT1sWy1EXTtmb3IobGV0IGNlPWhjO2NlPG5lLmxlbmd0aDtjZSsrKXtjb25zdCBiZT1uZVtjZV07YmVbXzRdPT09YmVbdWNdJiZBOChiZVtxaV0sYmUsWixkKX1pZihudWxsIT09bmVbTzNdKXtjb25zdCBjZT1uZVtPM107''@;'; put 'put ''Zm9yKGxldCBiZT0wO2JlPGNlLmxlbmd0aDtiZSsrKXtjb25zdCBFZT1jZVtiZV07QTgoRWVbcWldLEVlLFosZCl9fX19fXJldHVybiBkfWZ1bmN0aW9uIGxJKGMsbCxhKXtjb25zdCBkPW5ldyBmZCghKDQmfmEpKTtyZXR1cm4gZnVuY3Rpb24gd0QoYyxsLGEsZCl7Y29uc3QgaD1ERChsKTto''@;'; put 'put ''LnB1c2goYSksYy5maXJzdENyZWF0ZVBhc3MmJmg4KGMpLnB1c2goZCxoLmxlbmd0aC0xKX0oYyxsLGQsZC5kZXN0cm95KSwobFt1ZF0/Pz1uZXcgeWIpLnF1ZXJpZXMucHVzaChuZXcgalMoZCkpLTF9ZnVuY3Rpb24gaEkoYyxsLGEpe251bGw9PT1jLnF1ZXJpZXMmJihjLnF1ZXJpZXM9bmV3''@;'; put 'put ''IHpTKSxjLnF1ZXJpZXMudHJhY2sobmV3IFVTKGwsYSkpfWZ1bmN0aW9uIFdTKGMsbCl7cmV0dXJuIGMucXVlcmllcy5nZXRCeUluZGV4KGwpfWZ1bmN0aW9uIGZJKGMsbCl7Y29uc3QgYT1jW3FpXSxkPVdTKGEsbCk7cmV0dXJuIGQuY3Jvc3Nlc05nVGVtcGxhdGU/QTgoYSxjLGwsW10pOlU1''@;'; put 'put ''KGEsYyxkLGwpfWZ1bmN0aW9uIGdJKGMpe3JldHVybiBmdW5jdGlvbiBfYihjKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYyYmdm9pZCAwIT09Y1ttZV19KGMpJiYiZnVuY3Rpb24iPT10eXBlb2YgYy5zZXR9ZnVuY3Rpb24gQ28oYyl7bGV0IGw9ZnVuY3Rpb24gcVMoYyl7cmV0dXJuIE9i''@;'; put 'put ''amVjdC5nZXRQcm90b3R5cGVPZihjLnByb3RvdHlwZSkuY29uc3RydWN0b3J9KGMudHlwZSksYT0hMDtjb25zdCBkPVtjXTtmb3IoO2w7KXtsZXQgaDtpZihOYyhjKSloPWwuXHUwMjc1Y21wfHxsLlx1MDI3NWRpcjtlbHNle2lmKGwuXHUwMjc1Y21wKXRocm93IG5ldyBlcig5MDMsITEpO2g9''@;'; put 'put ''bC5cdTAyNzVkaXJ9aWYoaCl7aWYoYSl7ZC5wdXNoKGgpO2NvbnN0IHY9Yzt2LmlucHV0cz1MOChjLmlucHV0cyksdi5pbnB1dFRyYW5zZm9ybXM9TDgoYy5pbnB1dFRyYW5zZm9ybXMpLHYuZGVjbGFyZWRJbnB1dHM9TDgoYy5kZWNsYXJlZElucHV0cyksdi5vdXRwdXRzPUw4KGMub3V0cHV0''@;'; put 'put ''cyk7Y29uc3QgTT1oLmhvc3RCaW5kaW5ncztNJiZBZihjLE0pO2NvbnN0IEQ9aC52aWV3UXVlcnksWj1oLmNvbnRlbnRRdWVyaWVzO2lmKEQmJk1JKGMsRCksWiYmT3ooYyxaKSxTSShjLGgpLFJ1KGMub3V0cHV0cyxoLm91dHB1dHMpLE5jKGgpJiZoLmRhdGEuYW5pbWF0aW9uKXtjb25zdCBu''@;'; put 'put ''ZT1jLmRhdGE7bmUuYW5pbWF0aW9uPShuZS5hbmltYXRpb258fFtdKS5jb25jYXQoaC5kYXRhLmFuaW1hdGlvbil9fWNvbnN0IGY9aC5mZWF0dXJlcztpZihmKWZvcihsZXQgdj0wO3Y8Zi5sZW5ndGg7disrKXtjb25zdCBNPWZbdl07TSYmTS5uZ0luaGVyaXQmJk0oYyksTT09PUNvJiYoYT0h''@;'; put 'put ''MSl9fWw9T2JqZWN0LmdldFByb3RvdHlwZU9mKGwpfSFmdW5jdGlvbiBMeihjKXtsZXQgbD0wLGE9bnVsbDtmb3IobGV0IGQ9Yy5sZW5ndGgtMTtkPj0wO2QtLSl7Y29uc3QgaD1jW2RdO2guaG9zdFZhcnM9bCs9aC5ob3N0VmFycyxoLmhvc3RBdHRycz1kZihoLmhvc3RBdHRycyxhPWRmKGEs''@;'; put 'put ''aC5ob3N0QXR0cnMpKX19KGQpfWZ1bmN0aW9uIFNJKGMsbCl7Zm9yKGNvbnN0IGEgaW4gbC5pbnB1dHMpe2lmKCFsLmlucHV0cy5oYXNPd25Qcm9wZXJ0eShhKXx8Yy5pbnB1dHMuaGFzT3duUHJvcGVydHkoYSkpY29udGludWU7Y29uc3QgZD1sLmlucHV0c1thXTtpZih2b2lkIDAhPT1kJiYo''@;'; put 'put ''Yy5pbnB1dHNbYV09ZCxjLmRlY2xhcmVkSW5wdXRzW2FdPWwuZGVjbGFyZWRJbnB1dHNbYV0sbnVsbCE9PWwuaW5wdXRUcmFuc2Zvcm1zKSl7Y29uc3QgaD1BcnJheS5pc0FycmF5KGQpP2RbMF06ZDtpZighbC5pbnB1dFRyYW5zZm9ybXMuaGFzT3duUHJvcGVydHkoaCkpY29udGludWU7Yy5p''@;'; put 'put ''bnB1dFRyYW5zZm9ybXM/Pz17fSxjLmlucHV0VHJhbnNmb3Jtc1toXT1sLmlucHV0VHJhbnNmb3Jtc1toXX19fWZ1bmN0aW9uIEw4KGMpe3JldHVybiBjPT09STA/e306Yz09PWVzP1tdOmN9ZnVuY3Rpb24gTUkoYyxsKXtjb25zdCBhPWMudmlld1F1ZXJ5O2Mudmlld1F1ZXJ5PWE/KGQsaCk9''@;'; put 'put ''PntsKGQsaCksYShkLGgpfTpsfWZ1bmN0aW9uIE96KGMsbCl7Y29uc3QgYT1jLmNvbnRlbnRRdWVyaWVzO2MuY29udGVudFF1ZXJpZXM9YT8oZCxoLGYpPT57bChkLGgsZiksYShkLGgsZil9Omx9ZnVuY3Rpb24gQWYoYyxsKXtjb25zdCBhPWMuaG9zdEJpbmRpbmdzO2MuaG9zdEJpbmRpbmdz''@;'; put 'put ''PWE/KGQsaCk9PntsKGQsaCksYShkLGgpfTpsfWZ1bmN0aW9uIHZkKGMpe2NvbnN0IGw9YT0+e2NvbnN0IGQ9KEFycmF5LmlzQXJyYXkoYyk/YzpjKCkpLm1hcChoPT4iZnVuY3Rpb24iPT10eXBlb2YgaD97ZGlyZWN0aXZlOkdpKGgpLGlucHV0czpJMCxvdXRwdXRzOkkwfTp7ZGlyZWN0aXZl''@;'; put 'put ''OkdpKGguZGlyZWN0aXZlKSxpbnB1dHM6RUkoaC5pbnB1dHMpLG91dHB1dHM6RUkoaC5vdXRwdXRzKX0pO251bGw9PT1hLmhvc3REaXJlY3RpdmVzPyhhLmZpbmRIb3N0RGlyZWN0aXZlRGVmcz14SSxhLmhvc3REaXJlY3RpdmVzPWQpOmEuaG9zdERpcmVjdGl2ZXMudW5zaGlmdCguLi5kKX07''@;'; put 'put ''cmV0dXJuIGwubmdJbmhlcml0PSEwLGx9ZnVuY3Rpb24geEkoYyxsLGEpe2lmKG51bGwhPT1jLmhvc3REaXJlY3RpdmVzKWZvcihjb25zdCBkIG9mIGMuaG9zdERpcmVjdGl2ZXMpe2NvbnN0IGg9TWMoZC5kaXJlY3RpdmUpO056KGguZGVjbGFyZWRJbnB1dHMsZC5pbnB1dHMpLHhJKGgsbCxh''@;'; put 'put ''KSxhLnNldChoLGQpLGwucHVzaChoKX19ZnVuY3Rpb24gRUkoYyl7aWYodm9pZCAwPT09Y3x8MD09PWMubGVuZ3RoKXJldHVybiBJMDtjb25zdCBsPXt9O2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGg7YSs9MilsW2NbYV1dPWNbYSsxXTtyZXR1cm4gbH1mdW5jdGlvbiBOeihjLGwpe2Zvcihjb25z''@;'; put 'put ''dCBhIGluIGwpbC5oYXNPd25Qcm9wZXJ0eShhKSYmKGNbbFthXV09Y1thXSl9ZnVuY3Rpb24gemwoYyl7Y29uc3QgbD1jLmlucHV0Q29uZmlnLGE9e307Zm9yKGNvbnN0IGQgaW4gbClpZihsLmhhc093blByb3BlcnR5KGQpKXtjb25zdCBoPWxbZF07QXJyYXkuaXNBcnJheShoKSYmaFszXSYm''@;'; put 'put ''KGFbZF09aFszXSl9Yy5pbnB1dFRyYW5zZm9ybXM9YX1jbGFzcyBYM3t9Y2xhc3MgZmN7fWNsYXNzIEViIGV4dGVuZHMgWDN7Y29uc3RydWN0b3IobCxhLGQpe3N1cGVyKCksdGhpcy5fcGFyZW50PWEsdGhpcy5fYm9vdHN0cmFwQ29tcG9uZW50cz1bXSx0aGlzLmRlc3Ryb3lDYnM9W10sdGhp''@;'; put 'put ''cy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI9bmV3IHRJKHRoaXMpO2NvbnN0IGg9T3UobCk7dGhpcy5fYm9vdHN0cmFwQ29tcG9uZW50cz1GMShoLmJvb3RzdHJhcCksdGhpcy5fcjNJbmplY3Rvcj1rNChsLGEsW3twcm92aWRlOlgzLHVzZVZhbHVlOnRoaXN9LHtwcm92aWRlOno1LHVzZVZh''@;'; put 'put ''bHVlOnRoaXMuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyfSwuLi5kXSxGcihsKSxuZXcgU2V0KFsiZW52aXJvbm1lbnQiXSkpLHRoaXMuX3IzSW5qZWN0b3IucmVzb2x2ZUluamVjdG9ySW5pdGlhbGl6ZXJzKCksdGhpcy5pbnN0YW5jZT10aGlzLl9yM0luamVjdG9yLmdldChsKX1nZXQgaW5q''@;'; put 'put ''ZWN0b3IoKXtyZXR1cm4gdGhpcy5fcjNJbmplY3Rvcn1kZXN0cm95KCl7Y29uc3QgbD10aGlzLl9yM0luamVjdG9yOyFsLmRlc3Ryb3llZCYmbC5kZXN0cm95KCksdGhpcy5kZXN0cm95Q2JzLmZvckVhY2goYT0+YSgpKSx0aGlzLmRlc3Ryb3lDYnM9bnVsbH1vbkRlc3Ryb3kobCl7dGhpcy5k''@;'; put 'put ''ZXN0cm95Q2JzLnB1c2gobCl9fWNsYXNzIFRiIGV4dGVuZHMgZmN7Y29uc3RydWN0b3IobCl7c3VwZXIoKSx0aGlzLm1vZHVsZVR5cGU9bH1jcmVhdGUobCl7cmV0dXJuIG5ldyBFYih0aGlzLm1vZHVsZVR5cGUsbCxbXSl9fWNsYXNzIE84IGV4dGVuZHMgWDN7Y29uc3RydWN0b3IobCl7c3Vw''@;'; put 'put ''ZXIoKSx0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcj1uZXcgdEkodGhpcyksdGhpcy5pbnN0YW5jZT1udWxsO2NvbnN0IGE9bmV3IGNkKFsuLi5sLnByb3ZpZGVycyx7cHJvdmlkZTpYMyx1c2VWYWx1ZTp0aGlzfSx7cHJvdmlkZTp6NSx1c2VWYWx1ZTp0aGlzLmNvbXBvbmVudEZhY3Rv''@;'; put 'put ''cnlSZXNvbHZlcn1dLGwucGFyZW50fHxSMygpLGwuZGVidWdOYW1lLG5ldyBTZXQoWyJlbnZpcm9ubWVudCJdKSk7dGhpcy5pbmplY3Rvcj1hLGwucnVuRW52aXJvbm1lbnRJbml0aWFsaXplcnMmJmEucmVzb2x2ZUluamVjdG9ySW5pdGlhbGl6ZXJzKCl9ZGVzdHJveSgpe3RoaXMuaW5qZWN0''@;'; put 'put ''b3IuZGVzdHJveSgpfW9uRGVzdHJveShsKXt0aGlzLmluamVjdG9yLm9uRGVzdHJveShsKX19ZnVuY3Rpb24gWjQoYyxsLGE9bnVsbCl7cmV0dXJuIG5ldyBPOCh7cHJvdmlkZXJzOmMscGFyZW50OmwsZGVidWdOYW1lOmEscnVuRW52aXJvbm1lbnRJbml0aWFsaXplcnM6ITB9KS5pbmplY3Rv''@;'; put 'put ''cn1sZXQga2Y9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMudGFza0lkPTAsdGhpcy5wZW5kaW5nVGFza3M9bmV3IFNldCx0aGlzLmhhc1BlbmRpbmdUYXNrcz1uZXcgUXIoITEpfWdldCBfaGFzUGVuZGluZ1Rhc2tzKCl7cmV0dXJuIHRoaXMuaGFzUGVuZGluZ1Rhc2tzLnZhbHVl''@;'; put 'put ''fWFkZCgpe3RoaXMuX2hhc1BlbmRpbmdUYXNrc3x8dGhpcy5oYXNQZW5kaW5nVGFza3MubmV4dCghMCk7Y29uc3QgYT10aGlzLnRhc2tJZCsrO3JldHVybiB0aGlzLnBlbmRpbmdUYXNrcy5hZGQoYSksYX1yZW1vdmUoYSl7dGhpcy5wZW5kaW5nVGFza3MuZGVsZXRlKGEpLDA9PT10aGlzLnBl''@;'; put 'put ''bmRpbmdUYXNrcy5zaXplJiZ0aGlzLl9oYXNQZW5kaW5nVGFza3MmJnRoaXMuaGFzUGVuZGluZ1Rhc2tzLm5leHQoITEpfW5nT25EZXN0cm95KCl7dGhpcy5wZW5kaW5nVGFza3MuY2xlYXIoKSx0aGlzLl9oYXNQZW5kaW5nVGFza3MmJnRoaXMuaGFzUGVuZGluZ1Rhc2tzLm5leHQoITEpfXN0''@;'; put 'put ''YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIEFiKGMpe3JldHVybiEhWFMo''@;'; put 'put ''YykmJihBcnJheS5pc0FycmF5KGMpfHwhKGMgaW5zdGFuY2VvZiBNYXApJiZTeW1ib2wuaXRlcmF0b3IgaW4gYyl9ZnVuY3Rpb24gWFMoYyl7cmV0dXJuIG51bGwhPT1jJiYoImZ1bmN0aW9uIj09dHlwZW9mIGN8fCJvYmplY3QiPT10eXBlb2YgYyl9ZnVuY3Rpb24gcDIoYyxsLGEpe3JldHVy''@;'; put 'put ''biBjW2xdPWF9ZnVuY3Rpb24gVmMoYyxsLGEpe3JldHVybiFPYmplY3QuaXMoY1tsXSxhKSYmKGNbbF09YSwhMCl9ZnVuY3Rpb24gSjMoYyxsLGEsZCl7Y29uc3QgaD1WYyhjLGwsYSk7cmV0dXJuIFZjKGMsbCsxLGQpfHxofWZ1bmN0aW9uIERiKGMsbCxhLGQsaCl7Y29uc3QgZj1KMyhjLGws''@;'; put 'put ''YSxkKTtyZXR1cm4gVmMoYyxsKzIsaCl8fGZ9ZnVuY3Rpb24gYmQoYyxsLGEsZCxoLGYpe2NvbnN0IHY9SjMoYyxsLGEsZCk7cmV0dXJuIEozKGMsbCsyLGgsZil8fHZ9ZnVuY3Rpb24gZ3QoYyxsLGEsZCxoLGYsdixNKXtjb25zdCBEPXVpKCksWj1vcygpLG5lPWMrd2EsY2U9Wi5maXJzdENy''@;'; put 'put ''ZWF0ZVBhc3M/ZnVuY3Rpb24gSlMoYyxsLGEsZCxoLGYsdixNLEQpe2NvbnN0IFo9bC5jb25zdHMsbmU9TjUobCxjLDQsdnx8bnVsbCxhMihaLE0pKTttUyhsLGEsbmUsYTIoWixEKSksRXYobCxuZSk7Y29uc3QgY2U9bmUudFZpZXc9Z1MoMixuZSxkLGgsZixsLmRpcmVjdGl2ZVJlZ2lzdHJ5''@;'; put 'put ''LGwucGlwZVJlZ2lzdHJ5LG51bGwsbC5zY2hlbWFzLFosbnVsbCk7cmV0dXJuIG51bGwhPT1sLnF1ZXJpZXMmJihsLnF1ZXJpZXMudGVtcGxhdGUobCxuZSksY2UucXVlcmllcz1sLnF1ZXJpZXMuZW1iZWRkZWRUVmlldyhuZSkpLG5lfShuZSxaLEQsbCxhLGQsaCxmLHYpOlouZGF0YVtuZV07''@;'; put 'put ''czIoY2UsITEpO2NvbnN0IGJlPUlJKFosRCxjZSxjKTskNigpJiZzMChaLEQsYmUsY2UpLEJ1KGJlLEQpO2NvbnN0IEVlPV9TKGJlLEQsYmUsY2UpO3JldHVybiBEW25lXT1FZSxkOChELEVlKSxmdW5jdGlvbiBIMChjLGwsYSl7cmV0dXJuIGJiKGMsbCxhKX0oRWUsY2UsRCksUTAoY2UpJiZm''@;'; put 'put ''UyhaLEQsY2UpLG51bGwhPXYmJnBTKEQsY2UsTSksZ3R9bGV0IElJPWZ1bmN0aW9uIFFTKGMsbCxhLGQpe3JldHVybiBsMighMCksbFtiYV0uY3JlYXRlQ29tbWVudCgiIil9O2Z1bmN0aW9uIGRyKGMsbCxhLGQpe2NvbnN0IGg9dWkoKTtyZXR1cm4gVmMoaCxuaCgpLGwpJiYob3MoKSxzaChL''@;'; put 'put ''cygpLGgsYyxsLGEsZCkpLGRyfWZ1bmN0aW9uIFVsKGMsbCxhLGQpe3JldHVybiBWYyhjLG5oKCksYSk/bCtTbyhhKStkOklhfWZ1bmN0aW9uIFdhKGMsbCl7cmV0dXJuIGM8PDE3fGw8PDJ9ZnVuY3Rpb24gU2woYyl7cmV0dXJuIGM+PjE3JjMyNzY3fWZ1bmN0aW9uIERmKGMpe3JldHVybiAy''@;'; put 'put ''fGN9ZnVuY3Rpb24geWQoYyl7cmV0dXJuKDEzMTA2OCZjKT4+Mn1mdW5jdGlvbiBtbihjLGwpe3JldHVybi0xMzEwNjkmY3xsPDwyfWZ1bmN0aW9uIHduKGMpe3JldHVybiAxfGN9ZnVuY3Rpb24gbXIoYyxsLGEsZCl7Y29uc3QgaD1jW2ErMV0sZj1udWxsPT09bDtsZXQgdj1kP1NsKGgpOnlk''@;'; put 'put ''KGgpLE09ITE7Zm9yKDswIT09diYmKCExPT09TXx8Zik7KXtjb25zdCBaPWNbdisxXTt6cihjW3ZdLGwpJiYoTT0hMCxjW3YrMV09ZD93bihaKTpEZihaKSksdj1kP1NsKFopOnlkKFopfU0mJihjW2ErMV09ZD9EZihoKTp3bihoKSl9ZnVuY3Rpb24genIoYyxsKXtyZXR1cm4gbnVsbD09PWN8''@;'; put 'put ''fG51bGw9PWx8fChBcnJheS5pc0FycmF5KGMpP2NbMV06Yyk9PT1sfHwhKCFBcnJheS5pc0FycmF5KGMpfHwic3RyaW5nIiE9dHlwZW9mIGwpJiZLaChjLGwpPj0wfWNvbnN0IG9pPXt0ZXh0RW5kOjAsa2V5OjAsa2V5RW5kOjAsdmFsdWU6MCx2YWx1ZUVuZDowfTtmdW5jdGlvbiB0aShjKXty''@;'; put 'put ''ZXR1cm4gYy5zdWJzdHJpbmcob2kua2V5LG9pLmtleUVuZCl9ZnVuY3Rpb24gcmEoYyxsKXtjb25zdCBhPW9pLnRleHRFbmQ7cmV0dXJuIGE9PT1sPy0xOihsPW9pLmtleUVuZD1mdW5jdGlvbiBvMShjLGwsYSl7Zm9yKDtsPGEmJmMuY2hhckNvZGVBdChsKT4zMjspbCsrO3JldHVybiBsfShj''@;'; put 'put ''LG9pLmtleT1sLGEpLE1zKGMsbCxhKSl9ZnVuY3Rpb24gTXMoYyxsLGEpe2Zvcig7bDxhJiZjLmNoYXJDb2RlQXQobCk8PTMyOylsKys7cmV0dXJuIGx9ZnVuY3Rpb24geGUoYyxsLGEpe2NvbnN0IGQ9dWkoKTtyZXR1cm4gVmMoZCxuaCgpLGwpJiZGMChvcygpLEtzKCksZCxjLGwsZFtiYV0s''@;'; put 'put ''YSwhMSkseGV9ZnVuY3Rpb24gY2goYyxsLGEsZCxoKXtjb25zdCB2PWg/ImNsYXNzIjoic3R5bGUiO3dTKGMsYSxsLmlucHV0c1t2XSx2LGQpfWZ1bmN0aW9uIF9kKGMsbCxhKXtyZXR1cm4gSWYoYyxsLGEsITEpLF9kfWZ1bmN0aW9uIHhyKGMsbCl7cmV0dXJuIElmKGMsbCxudWxsLCEwKSx4''@;'; put 'put ''cn1mdW5jdGlvbiBlcChjLGwpe2ZvcihsZXQgYT1mdW5jdGlvbiBaaShjKXtyZXR1cm4gZnVuY3Rpb24gVGEoYyl7b2kua2V5PTAsb2kua2V5RW5kPTAsb2kudmFsdWU9MCxvaS52YWx1ZUVuZD0wLG9pLnRleHRFbmQ9Yy5sZW5ndGh9KGMpLHJhKGMsTXMoYywwLG9pLnRleHRFbmQpKX0obCk7''@;'; put 'put ''YT49MDthPXJhKGwsYSkpXzAoYyx0aShsKSwhMCl9ZnVuY3Rpb24gSWYoYyxsLGEsZCl7Y29uc3QgaD11aSgpLGY9b3MoKSx2PUNmKDIpO2YuZmlyc3RVcGRhdGVQYXNzJiZLbmUoZixjLHYsZCksbCE9PUlhJiZWYyhoLHYsbCkmJlhuZShmLGYuZGF0YVtOdSgpXSxoLGhbYmFdLGMsaFt2KzFd''@;'; put 'put ''PWZ1bmN0aW9uIE83ZShjLGwpe3JldHVybiBudWxsPT1jfHwiIj09PWN8fCgic3RyaW5nIj09dHlwZW9mIGw/Yys9bDoib2JqZWN0Ij09dHlwZW9mIGMmJihjPUZyKGQyKGMpKSkpLGN9KGwsYSksZCx2KX1mdW5jdGlvbiAkbmUoYyxsKXtyZXR1cm4gbD49Yy5leHBhbmRvU3RhcnRJbmRleH1m''@;'; put 'put ''dW5jdGlvbiBLbmUoYyxsLGEsZCl7Y29uc3QgaD1jLmRhdGE7aWYobnVsbD09PWhbYSsxXSl7Y29uc3QgZj1oW051KCldLHY9JG5lKGMsYSk7UW5lKGYsZCkmJm51bGw9PT1sJiYhdiYmKGw9ITEpLGw9ZnVuY3Rpb24gVDdlKGMsbCxhLGQpe2NvbnN0IGg9YUMoYyk7bGV0IGY9ZD9sLnJlc2lk''@;'; put 'put ''dWFsQ2xhc3NlczpsLnJlc2lkdWFsU3R5bGVzO2lmKG51bGw9PT1oKTA9PT0oZD9sLmNsYXNzQmluZGluZ3M6bC5zdHlsZUJpbmRpbmdzKSYmKGE9b00oYT1HeihudWxsLGMsbCxhLGQpLGwuYXR0cnMsZCksZj1udWxsKTtlbHNle2NvbnN0IHY9bC5kaXJlY3RpdmVTdHlsaW5nTGFzdDtpZigt''@;'; put 'put ''MT09PXZ8fGNbdl0hPT1oKWlmKGE9R3ooaCxjLGwsYSxkKSxudWxsPT09Zil7bGV0IEQ9ZnVuY3Rpb24gQTdlKGMsbCxhKXtjb25zdCBkPWE/bC5jbGFzc0JpbmRpbmdzOmwuc3R5bGVCaW5kaW5ncztpZigwIT09eWQoZCkpcmV0dXJuIGNbU2woZCldfShjLGwsZCk7dm9pZCAwIT09RCYmQXJy''@;'; put 'put ''YXkuaXNBcnJheShEKSYmKEQ9R3oobnVsbCxjLGwsRFsxXSxkKSxEPW9NKEQsbC5hdHRycyxkKSxmdW5jdGlvbiBrN2UoYyxsLGEsZCl7Y1tTbChhP2wuY2xhc3NCaW5kaW5nczpsLnN0eWxlQmluZGluZ3MpXT1kfShjLGwsZCxEKSl9ZWxzZSBmPWZ1bmN0aW9uIEQ3ZShjLGwsYSl7bGV0IGQ7''@;'; put 'put ''Y29uc3QgaD1sLmRpcmVjdGl2ZUVuZDtmb3IobGV0IGY9MStsLmRpcmVjdGl2ZVN0eWxpbmdMYXN0O2Y8aDtmKyspZD1vTShkLGNbZl0uaG9zdEF0dHJzLGEpO3JldHVybiBvTShkLGwuYXR0cnMsYSl9KGMsbCxkKX1yZXR1cm4gdm9pZCAwIT09ZiYmKGQ/bC5yZXNpZHVhbENsYXNzZXM9Zjps''@;'; put 'put ''LnJlc2lkdWFsU3R5bGVzPWYpLGF9KGgsZixsLGQpLGZ1bmN0aW9uIE1uKGMsbCxhLGQsaCxmKXtsZXQgdj1mP2wuY2xhc3NCaW5kaW5nczpsLnN0eWxlQmluZGluZ3MsTT1TbCh2KSxEPXlkKHYpO2NbZF09YTtsZXQgbmUsWj0hMTtpZihBcnJheS5pc0FycmF5KGEpPyhuZT1hWzFdLChudWxs''@;'; put 'put ''PT09bmV8fEtoKGEsbmUpPjApJiYoWj0hMCkpOm5lPWEsaClpZigwIT09RCl7Y29uc3QgYmU9U2woY1tNKzFdKTtjW2QrMV09V2EoYmUsTSksMCE9PWJlJiYoY1tiZSsxXT1tbihjW2JlKzFdLGQpKSxjW00rMV09ZnVuY3Rpb24gTWwoYyxsKXtyZXR1cm4gMTMxMDcxJmN8bDw8MTd9KGNbTSsx''@;'; put 'put ''XSxkKX1lbHNlIGNbZCsxXT1XYShNLDApLDAhPT1NJiYoY1tNKzFdPW1uKGNbTSsxXSxkKSksTT1kO2Vsc2UgY1tkKzFdPVdhKEQsMCksMD09PU0/TT1kOmNbRCsxXT1tbihjW0QrMV0sZCksRD1kO1omJihjW2QrMV09RGYoY1tkKzFdKSksbXIoYyxuZSxkLCEwKSxtcihjLG5lLGQsITEpLGZ1''@;'; put 'put ''bmN0aW9uIGpuKGMsbCxhLGQsaCl7Y29uc3QgZj1oP2MucmVzaWR1YWxDbGFzc2VzOmMucmVzaWR1YWxTdHlsZXM7bnVsbCE9ZiYmInN0cmluZyI9PXR5cGVvZiBsJiZLaChmLGwpPj0wJiYoYVtkKzFdPXduKGFbZCsxXSkpfShsLG5lLGMsZCxmKSx2PVdhKE0sRCksZj9sLmNsYXNzQmluZGlu''@;'; put 'put ''Z3M9djpsLnN0eWxlQmluZGluZ3M9dn0oaCxmLGwsYSx2LGQpfX1mdW5jdGlvbiBHeihjLGwsYSxkLGgpe2xldCBmPW51bGw7Y29uc3Qgdj1hLmRpcmVjdGl2ZUVuZDtsZXQgTT1hLmRpcmVjdGl2ZVN0eWxpbmdMYXN0O2ZvcigtMT09PU0/TT1hLmRpcmVjdGl2ZVN0YXJ0Ok0rKztNPHYmJihm''@;'; put 'put ''PWxbTV0sZD1vTShkLGYuaG9zdEF0dHJzLGgpLGYhPT1jKTspTSsrO3JldHVybiBudWxsIT09YyYmKGEuZGlyZWN0aXZlU3R5bGluZ0xhc3Q9TSksZH1mdW5jdGlvbiBvTShjLGwsYSl7Y29uc3QgZD1hPzE6MjtsZXQgaD0tMTtpZihudWxsIT09bClmb3IobGV0IGY9MDtmPGwubGVuZ3RoO2Yr''@;'; put 'put ''Kyl7Y29uc3Qgdj1sW2ZdOyJudW1iZXIiPT10eXBlb2Ygdj9oPXY6aD09PWQmJihBcnJheS5pc0FycmF5KGMpfHwoYz12b2lkIDA9PT1jP1tdOlsiIixjXSksXzAoYyx2LCEhYXx8bFsrK2ZdKSl9cmV0dXJuIHZvaWQgMD09PWM/bnVsbDpjfWZ1bmN0aW9uIFhuZShjLGwsYSxkLGgsZix2LE0p''@;'; put 'put ''e2lmKCEoMyZsLnR5cGUpKXJldHVybjtjb25zdCBEPWMuZGF0YSxaPURbTSsxXSxuZT1mdW5jdGlvbiBEbihjKXtyZXR1cm4hKDEmfmMpfShaKT9KbmUoRCxsLGEsaCx5ZChaKSx2KTp2b2lkIDA7RkkobmUpfHwoRkkoZil8fGZ1bmN0aW9uIHl1KGMpe3JldHVybiEoMiZ+Yyl9KFopJiYoZj1K''@;'; put 'put ''bmUoRCxudWxsLGEsaCxNLHYpKSxmdW5jdGlvbiBkRChjLGwsYSxkLGgpe2lmKGwpaD9jLmFkZENsYXNzKGEsZCk6Yy5yZW1vdmVDbGFzcyhhLGQpO2Vsc2V7bGV0IGY9LTE9PT1kLmluZGV4T2YoIi0iKT92b2lkIDA6WjMuRGFzaENhc2U7bnVsbD09aD9jLnJlbW92ZVN0eWxlKGEsZCxmKToo''@;'; put 'put ''InN0cmluZyI9PXR5cGVvZiBoJiZoLmVuZHNXaXRoKCIhaW1wb3J0YW50IikmJihoPWguc2xpY2UoMCwtMTApLGZ8PVozLkltcG9ydGFudCksYy5zZXRTdHlsZShhLGQsaCxmKSl9fShkLHYsbTUoTnUoKSxhKSxoLGYpKX1mdW5jdGlvbiBKbmUoYyxsLGEsZCxoLGYpe2NvbnN0IHY9bnVsbD09''@;'; put 'put ''PWw7bGV0IE07Zm9yKDtoPjA7KXtjb25zdCBEPWNbaF0sWj1BcnJheS5pc0FycmF5KEQpLG5lPVo/RFsxXTpELGNlPW51bGw9PT1uZTtsZXQgYmU9YVtoKzFdO2JlPT09SWEmJihiZT1jZT9lczp2b2lkIDApO2xldCBFZT1jZT9FNihiZSxkKTpuZT09PWQ/YmU6dm9pZCAwO2lmKFomJiFGSShF''@;'; put 'put ''ZSkmJihFZT1FNihELGQpKSxGSShFZSkmJihNPUVlLHYpKXJldHVybiBNO2NvbnN0IEJlPWNbaCsxXTtoPXY/U2woQmUpOnlkKEJlKX1pZihudWxsIT09bCl7bGV0IEQ9Zj9sLnJlc2lkdWFsQ2xhc3NlczpsLnJlc2lkdWFsU3R5bGVzO251bGwhPUQmJihNPUU2KEQsZCkpfXJldHVybiBNfWZ1''@;'; put 'put ''bmN0aW9uIEZJKGMpe3JldHVybiB2b2lkIDAhPT1jfWZ1bmN0aW9uIFFuZShjLGwpe3JldHVybiEhKGMuZmxhZ3MmKGw/ODoxNikpfWZ1bmN0aW9uIGVyZShjLGwsYSl7IWZ1bmN0aW9uIFJmKGMsbCxhLGQpe2NvbnN0IGg9b3MoKSxmPUNmKDIpO2guZmlyc3RVcGRhdGVQYXNzJiZLbmUoaCxu''@;'; put 'put ''dWxsLGYsZCk7Y29uc3Qgdj11aSgpO2lmKGEhPT1JYSYmVmModixmLGEpKXtjb25zdCBNPWguZGF0YVtOdSgpXTtpZihRbmUoTSxkKSYmISRuZShoLGYpKXtsZXQgRD1kP00uY2xhc3Nlc1dpdGhvdXRIb3N0Ok0uc3R5bGVzV2l0aG91dEhvc3Q7bnVsbCE9PUQmJihhPWFkKEQsYXx8IiIpKSxj''@;'; put 'put ''aChoLE0sdixhLGQpfWVsc2UhZnVuY3Rpb24gTDdlKGMsbCxhLGQsaCxmLHYsTSl7aD09PUlhJiYoaD1lcyk7bGV0IEQ9MCxaPTAsbmU9MDxoLmxlbmd0aD9oWzBdOm51bGwsY2U9MDxmLmxlbmd0aD9mWzBdOm51bGw7Zm9yKDtudWxsIT09bmV8fG51bGwhPT1jZTspe2NvbnN0IGJlPUQ8aC5s''@;'; put 'put ''ZW5ndGg/aFtEKzFdOnZvaWQgMCxFZT1aPGYubGVuZ3RoP2ZbWisxXTp2b2lkIDA7bGV0IHFlLEJlPW51bGw7bmU9PT1jZT8oRCs9MixaKz0yLGJlIT09RWUmJihCZT1jZSxxZT1FZSkpOm51bGw9PT1jZXx8bnVsbCE9PW5lJiZuZTxjZT8oRCs9MixCZT1uZSk6KForPTIsQmU9Y2UscWU9RWUp''@;'; put 'put ''LG51bGwhPT1CZSYmWG5lKGMsbCxhLGQsQmUscWUsdixNKSxuZT1EPGgubGVuZ3RoP2hbRF06bnVsbCxjZT1aPGYubGVuZ3RoP2ZbWl06bnVsbH19KGgsTSx2LHZbYmFdLHZbZisxXSx2W2YrMV09ZnVuY3Rpb24gSTdlKGMsbCxhKXtpZihudWxsPT1hfHwiIj09PWEpcmV0dXJuIGVzO2NvbnN0''@;'; put 'put ''IGQ9W10saD1kMihhKTtpZihBcnJheS5pc0FycmF5KGgpKWZvcihsZXQgZj0wO2Y8aC5sZW5ndGg7ZisrKWMoZCxoW2ZdLCEwKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgaClmb3IoY29uc3QgZiBpbiBoKWguaGFzT3duUHJvcGVydHkoZikmJmMoZCxmLGhbZl0pO2Vsc2Uic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIGgmJmwoZCxoKTtyZXR1cm4gZH0oYyxsLGEpLGQsZil9fShfMCxlcCxVbCh1aSgpLGMsbCxhKSwhMCl9ZnVuY3Rpb24gZGUoYyxsLGEsZCl7Y29uc3QgaD11aSgpLGY9b3MoKSx2PXdhK2MsTT1oW2JhXSxEPWYuZmlyc3RDcmVhdGVQYXNzP2Z1bmN0aW9uIG45ZShjLGwsYSxkLGgs''@;'; put 'put ''Zil7Y29uc3Qgdj1sLmNvbnN0cyxEPU41KGwsYywyLGQsYTIodixoKSk7cmV0dXJuIG1TKGwsYSxELGEyKHYsZikpLG51bGwhPT1ELmF0dHJzJiZtYihELEQuYXR0cnMsITEpLG51bGwhPT1ELm1lcmdlZEF0dHJzJiZtYihELEQubWVyZ2VkQXR0cnMsITApLG51bGwhPT1sLnF1ZXJpZXMmJmwu''@;'; put 'put ''cXVlcmllcy5lbGVtZW50U3RhcnQobCxEKSxEfSh2LGYsaCxsLGEsZCk6Zi5kYXRhW3ZdLFo9aXJlKGYsaCxELE0sbCxjKTtoW3ZdPVo7Y29uc3QgbmU9UTAoRCk7cmV0dXJuIHMyKEQsITApLHBEKE0sWixEKSwhZnVuY3Rpb24gUDgoYyl7cmV0dXJuISgzMiZ+Yy5mbGFncyl9KEQpJiYkNigp''@;'; put 'put ''JiZzMChmLGgsWixEKSwwPT09ZnVuY3Rpb24gZVYoKXtyZXR1cm4gQ2EubEZyYW1lLmVsZW1lbnREZXB0aENvdW50fSgpJiZCdShaLGgpLGZ1bmN0aW9uIHRWKCl7Q2EubEZyYW1lLmVsZW1lbnREZXB0aENvdW50Kyt9KCksbmUmJihmUyhmLGgsRCksaFMoZixELGgpKSxudWxsIT09ZCYmcFMo''@;'; put 'put ''aCxEKSxkZX1mdW5jdGlvbiBoZSgpe2xldCBjPWxsKCk7ckMoKT9pQygpOihjPWMucGFyZW50LHMyKGMsITEpKTtjb25zdCBsPWM7KGZ1bmN0aW9uIG5WKGMpe3JldHVybiBDYS5za2lwSHlkcmF0aW9uUm9vdFROb2RlPT09Y30pKGwpJiZmdW5jdGlvbiBhVigpe0NhLnNraXBIeWRyYXRpb25S''@;'; put 'put ''b290VE5vZGU9bnVsbH0oKSxmdW5jdGlvbiBZQSgpe0NhLmxGcmFtZS5lbGVtZW50RGVwdGhDb3VudC0tfSgpO2NvbnN0IGE9b3MoKTtyZXR1cm4gYS5maXJzdENyZWF0ZVBhc3MmJihFdihhLGMpLG51KGMpJiZhLnF1ZXJpZXMuZWxlbWVudEVuZChjKSksbnVsbCE9bC5jbGFzc2VzV2l0aG91''@;'; put 'put ''dEhvc3QmJmZ1bmN0aW9uIHlWKGMpe3JldHVybiEhKDgmYy5mbGFncyl9KGwpJiZjaChhLGwsdWkoKSxsLmNsYXNzZXNXaXRob3V0SG9zdCwhMCksbnVsbCE9bC5zdHlsZXNXaXRob3V0SG9zdCYmZnVuY3Rpb24gX1YoYyl7cmV0dXJuISEoMTYmYy5mbGFncyl9KGwpJiZjaChhLGwsdWkoKSxs''@;'; put 'put ''LnN0eWxlc1dpdGhvdXRIb3N0LCExKSxoZX1mdW5jdGlvbiBHdChjLGwsYSxkKXtyZXR1cm4gZGUoYyxsLGEsZCksaGUoKSxHdH1sZXQgaXJlPShjLGwsYSxkLGgsZik9PihsMighMCksVjQoZCxoLGZ1bmN0aW9uIFFBKCl7cmV0dXJuIENhLmxGcmFtZS5jdXJyZW50TmFtZXNwYWNlfSgpKSk7''@;'; put 'put ''ZnVuY3Rpb24gbGkoYyxsLGEpe2NvbnN0IGQ9dWkoKSxoPW9zKCksZj1jK3dhLHY9aC5maXJzdENyZWF0ZVBhc3M/ZnVuY3Rpb24gbzllKGMsbCxhLGQsaCl7Y29uc3QgZj1sLmNvbnN0cyx2PWEyKGYsZCksTT1ONShsLGMsOCwibmctY29udGFpbmVyIix2KTtyZXR1cm4gbnVsbCE9PXYmJm1i''@;'; put 'put ''KE0sdiwhMCksbVMobCxhLE0sYTIoZixoKSksbnVsbCE9PWwucXVlcmllcyYmbC5xdWVyaWVzLmVsZW1lbnRTdGFydChsLE0pLE19KGYsaCxkLGwsYSk6aC5kYXRhW2ZdO3MyKHYsITApO2NvbnN0IE09b3JlKGgsZCx2LGMpO3JldHVybiBkW2ZdPU0sJDYoKSYmczAoaCxkLE0sdiksQnUoTSxk''@;'; put 'put ''KSxRMCh2KSYmKGZTKGgsZCx2KSxoUyhoLHYsZCkpLG51bGwhPWEmJnBTKGQsdiksbGl9ZnVuY3Rpb24gY2koKXtsZXQgYz1sbCgpO2NvbnN0IGw9b3MoKTtyZXR1cm4gckMoKT9pQygpOihjPWMucGFyZW50LHMyKGMsITEpKSxsLmZpcnN0Q3JlYXRlUGFzcyYmKEV2KGwsYyksbnUoYykmJmwu''@;'; put 'put ''cXVlcmllcy5lbGVtZW50RW5kKGMpKSxjaX1mdW5jdGlvbiBYbChjLGwsYSl7cmV0dXJuIGxpKGMsbCxhKSxjaSgpLFhsfWxldCBvcmU9KGMsbCxhLGQpPT4obDIoITApLFFDKGxbYmFdLCIiKSk7ZnVuY3Rpb24gT24oKXtyZXR1cm4gdWkoKX1mdW5jdGlvbiB0cChjLGwsYSl7Y29uc3QgZD11''@;'; put 'put ''aSgpO3JldHVybiBWYyhkLG5oKCksbCkmJkYwKG9zKCksS3MoKSxkLGMsbCxkW2JhXSxhLCEwKSx0cH1mdW5jdGlvbiBKeihjLGwsYSl7Y29uc3QgZD11aSgpO2lmKFZjKGQsbmgoKSxsKSl7Y29uc3QgZj1vcygpLHY9S3MoKTtGMChmLHYsZCxjLGwsejQoYUMoZi5kYXRhKSx2LGQpLGEsITAp''@;'; put 'put ''fXJldHVybiBKen1jb25zdCBWOD12b2lkIDA7dmFyIGM5ZT1bImVuIixbWyJhIiwicCJdLFsiQU0iLCJQTSJdLFY4XSxbWyJBTSIsIlBNIl0sVjgsVjhdLFtbIlMiLCJNIiwiVCIsIlciLCJUIiwiRiIsIlMiXSxbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLFsi''@;'; put 'put ''U3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl1dLFY4LFtbIkoiLCJGIiwiTSIsIkEiLCJNIiwiSiIsIkoiLCJBIiwiUyIsIk8iLCJOIiwiRCJdLFsi''@;'; put 'put ''SmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sWyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92''@;'; put 'put ''ZW1iZXIiLCJEZWNlbWJlciJdXSxWOCxbWyJCIiwiQSJdLFsiQkMiLCJBRCJdLFsiQmVmb3JlIENocmlzdCIsIkFubm8gRG9taW5pIl1dLDAsWzYsMF0sWyJNL2QveXkiLCJNTU0gZCwgeSIsIk1NTU0gZCwgeSIsIkVFRUUsIE1NTU0gZCwgeSJdLFsiaDptbSBhIiwiaDptbTpzcyBhIiwiaDpt''@;'; put 'put ''bTpzcyBhIHoiLCJoOm1tOnNzIGEgenp6eiJdLFsiezF9LCB7MH0iLFY4LCJ7MX0gJ2F0JyB7MH0iLFY4XSxbIi4iLCIsIiwiOyIsIiUiLCIrIiwiLSIsIkUiLCJceGQ3IiwiXHUyMDMwIiwiXHUyMjFlIiwiTmFOIiwiOiJdLFsiIywjIzAuIyMjIiwiIywjIzAlIiwiXHhhNCMsIyMwLjAwIiwi''@;'; put 'put ''I0UwIl0sIlVTRCIsIiQiLCJVUyBEb2xsYXIiLHt9LCJsdHIiLGZ1bmN0aW9uIGw5ZShjKXtjb25zdCBhPU1hdGguZmxvb3IoTWF0aC5hYnMoYykpLGQ9Yy50b1N0cmluZygpLnJlcGxhY2UoL15bXi5dKlwuPy8sIiIpLmxlbmd0aDtyZXR1cm4gMT09PWEmJjA9PT1kPzE6NX1dO2xldCBIYj17''@;'; put 'put ''fTtmdW5jdGlvbiBzMShjKXtjb25zdCBsPWZ1bmN0aW9uIGQ5ZShjKXtyZXR1cm4gYy50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18vZywiLSIpfShjKTtsZXQgYT1zcmUobCk7aWYoYSlyZXR1cm4gYTtjb25zdCBkPWwuc3BsaXQoIi0iKVswXTtpZihhPXNyZShkKSxhKXJldHVybiBhO2lmKCJl''@;'; put 'put ''biI9PT1kKXJldHVybiBjOWU7dGhyb3cgbmV3IGVyKDcwMSwhMSl9ZnVuY3Rpb24gc3JlKGMpe3JldHVybiBjIGluIEhifHwoSGJbY109SHQubmcmJkh0Lm5nLmNvbW1vbiYmSHQubmcuY29tbW9uLmxvY2FsZXMmJkh0Lm5nLmNvbW1vbi5sb2NhbGVzW2NdKSxIYltjXX12YXIgSmw9ZnVuY3Rp''@;'; put 'put ''b24oYyl7cmV0dXJuIGNbYy5Mb2NhbGVJZD0wXT0iTG9jYWxlSWQiLGNbYy5EYXlQZXJpb2RzRm9ybWF0PTFdPSJEYXlQZXJpb2RzRm9ybWF0IixjW2MuRGF5UGVyaW9kc1N0YW5kYWxvbmU9Ml09IkRheVBlcmlvZHNTdGFuZGFsb25lIixjW2MuRGF5c0Zvcm1hdD0zXT0iRGF5c0Zvcm1hdCIs''@;'; put 'put ''Y1tjLkRheXNTdGFuZGFsb25lPTRdPSJEYXlzU3RhbmRhbG9uZSIsY1tjLk1vbnRoc0Zvcm1hdD01XT0iTW9udGhzRm9ybWF0IixjW2MuTW9udGhzU3RhbmRhbG9uZT02XT0iTW9udGhzU3RhbmRhbG9uZSIsY1tjLkVyYXM9N109IkVyYXMiLGNbYy5GaXJzdERheU9mV2Vlaz04XT0iRmlyc3RE''@;'; put 'put ''YXlPZldlZWsiLGNbYy5XZWVrZW5kUmFuZ2U9OV09IldlZWtlbmRSYW5nZSIsY1tjLkRhdGVGb3JtYXQ9MTBdPSJEYXRlRm9ybWF0IixjW2MuVGltZUZvcm1hdD0xMV09IlRpbWVGb3JtYXQiLGNbYy5EYXRlVGltZUZvcm1hdD0xMl09IkRhdGVUaW1lRm9ybWF0IixjW2MuTnVtYmVyU3ltYm9s''@;'; put 'put ''cz0xM109Ik51bWJlclN5bWJvbHMiLGNbYy5OdW1iZXJGb3JtYXRzPTE0XT0iTnVtYmVyRm9ybWF0cyIsY1tjLkN1cnJlbmN5Q29kZT0xNV09IkN1cnJlbmN5Q29kZSIsY1tjLkN1cnJlbmN5U3ltYm9sPTE2XT0iQ3VycmVuY3lTeW1ib2wiLGNbYy5DdXJyZW5jeU5hbWU9MTddPSJDdXJyZW5j''@;'; put 'put ''eU5hbWUiLGNbYy5DdXJyZW5jaWVzPTE4XT0iQ3VycmVuY2llcyIsY1tjLkRpcmVjdGlvbmFsaXR5PTE5XT0iRGlyZWN0aW9uYWxpdHkiLGNbYy5QbHVyYWxDYXNlPTIwXT0iUGx1cmFsQ2FzZSIsY1tjLkV4dHJhRGF0YT0yMV09IkV4dHJhRGF0YSIsY30oSmx8fHt9KTtjb25zdCBOYj0iZW4t''@;'; put 'put ''VVMiO2xldCBscmU9TmI7ZnVuY3Rpb24gRnQoYyxsLGEsZCl7Y29uc3QgaD11aSgpLGY9b3MoKSx2PWxsKCk7cmV0dXJuIG5VKGYsaCxoW2JhXSx2LGMsbCxkKSxGdH1mdW5jdGlvbiB0VShjLGwpe2NvbnN0IGE9bGwoKSxkPXVpKCksaD1vcygpO3JldHVybiBuVShoLGQsejQoYUMoaC5kYXRh''@;'; put 'put ''KSxhLGQpLGEsYyxsKSx0VX1mdW5jdGlvbiBuVShjLGwsYSxkLGgsZix2KXtjb25zdCBNPVEwKGQpLFo9Yy5maXJzdENyZWF0ZVBhc3MmJmg4KGMpLG5lPWxbc2xdLGNlPUREKGwpO2xldCBiZT0hMDtpZigzJmQudHlwZXx8dil7Y29uc3QgcWU9TDAoZCxsKSxudD12P3YocWUpOnFlLGx0PWNl''@;'; put 'put ''Lmxlbmd0aCxtdD12P3luPT52KF9sKHluW2QuaW5kZXhdKSk6ZC5pbmRleDtsZXQgSnQ9bnVsbDtpZighdiYmTSYmKEp0PWZ1bmN0aW9uIHN2ZShjLGwsYSxkKXtjb25zdCBoPWMuY2xlYW51cDtpZihudWxsIT1oKWZvcihsZXQgZj0wO2Y8aC5sZW5ndGgtMTtmKz0yKXtjb25zdCB2PWhbZl07''@;'; put 'put ''aWYodj09PWEmJmhbZisxXT09PWQpe2NvbnN0IE09bFtKMF0sRD1oW2YrMl07cmV0dXJuIE0ubGVuZ3RoPkQ/TVtEXTpudWxsfSJzdHJpbmciPT10eXBlb2YgdiYmKGYrPTIpfXJldHVybiBudWxsfShjLGwsaCxkLmluZGV4KSksbnVsbCE9PUp0KShKdC5fX25nTGFzdExpc3RlbmVyRm5fX3x8''@;'; put 'put ''SnQpLl9fbmdOZXh0TGlzdGVuZXJGbl9fPWYsSnQuX19uZ0xhc3RMaXN0ZW5lckZuX189ZixiZT0hMTtlbHNle2Y9UHJlKGQsbCxuZSxmLCExKTtjb25zdCB5bj1hLmxpc3RlbihudCxoLGYpO2NlLnB1c2goZix5biksWiYmWi5wdXNoKGgsbXQsbHQsbHQrMSl9fWVsc2UgZj1QcmUoZCxsLG5l''@;'; put 'put ''LGYsITEpO2NvbnN0IEVlPWQub3V0cHV0cztsZXQgQmU7aWYoYmUmJm51bGwhPT1FZSYmKEJlPUVlW2hdKSl7Y29uc3QgcWU9QmUubGVuZ3RoO2lmKHFlKWZvcihsZXQgbnQ9MDtudDxxZTtudCs9Mil7Y29uc3QgQ249bFtCZVtudF1dW0JlW250KzFdXS5zdWJzY3JpYmUoZiksdG49Y2UubGVu''@;'; put 'put ''Z3RoO2NlLnB1c2goZixDbiksWiYmWi5wdXNoKGgsZC5pbmRleCx0biwtKHRuKzEpKX19fWZ1bmN0aW9uIE9yZShjLGwsYSxkKXtjb25zdCBoPV9lKG51bGwpO3RyeXtyZXR1cm4gbzIoNixsLGEpLCExIT09YShkKX1jYXRjaChmKXtyZXR1cm4gVjUoYyxmKSwhMX1maW5hbGx5e28yKDcsbCxh''@;'; put 'put ''KSxfZShoKX19ZnVuY3Rpb24gUHJlKGMsbCxhLGQsaCl7cmV0dXJuIGZ1bmN0aW9uIGYodil7aWYodj09PUZ1bmN0aW9uKXJldHVybiBkO3Y4KGMuY29tcG9uZW50T2Zmc2V0Pi0xP08xKGMuaW5kZXgsbCk6bCk7bGV0IEQ9T3JlKGwsYSxkLHYpLFo9Zi5fX25nTmV4dExpc3RlbmVyRm5fXztm''@;'; put 'put ''b3IoO1o7KUQ9T3JlKGwsYSxaLHYpJiZELFo9Wi5fX25nTmV4dExpc3RlbmVyRm5fXztyZXR1cm4gaCYmITE9PT1EJiZ2LnByZXZlbnREZWZhdWx0KCksRH19ZnVuY3Rpb24gT2UoYz0xKXtyZXR1cm4gZnVuY3Rpb24gZFYoYyl7cmV0dXJuKENhLmxGcmFtZS5jb250ZXh0TFZpZXc9ZnVuY3Rp''@;'; put 'put ''b24gZUMoYyxsKXtmb3IoO2M+MDspbD1sW28wXSxjLS07cmV0dXJuIGx9KGMsQ2EubEZyYW1lLmNvbnRleHRMVmlldykpW3NsXX0oYyl9ZnVuY3Rpb24gbHZlKGMsbCl7bGV0IGE9bnVsbDtjb25zdCBkPWZ1bmN0aW9uIHN2KGMpe2NvbnN0IGw9Yy5hdHRycztpZihudWxsIT1sKXtjb25zdCBh''@;'; put 'put ''PWwuaW5kZXhPZig1KTtpZighKDEmYSkpcmV0dXJuIGxbYSsxXX1yZXR1cm4gbnVsbH0oYyk7Zm9yKGxldCBoPTA7aDxsLmxlbmd0aDtoKyspe2NvbnN0IGY9bFtoXTtpZigiKiIhPT1mKXtpZihudWxsPT09ZD9nNChjLGYsITApOkh3KGQsZikpcmV0dXJuIGh9ZWxzZSBhPWh9cmV0dXJuIGF9''@;'; put 'put ''ZnVuY3Rpb24gbG8oYyl7Y29uc3QgbD11aSgpW2psXVtuY107aWYoIWwucHJvamVjdGlvbil7Y29uc3QgZD1sLnByb2plY3Rpb249ZnVuY3Rpb24gJGgoYyxsKXtjb25zdCBhPVtdO2ZvcihsZXQgZD0wO2Q8YztkKyspYS5wdXNoKGwpO3JldHVybiBhfShjP2MubGVuZ3RoOjEsbnVsbCksaD1k''@;'; put 'put ''LnNsaWNlKCk7bGV0IGY9bC5jaGlsZDtmb3IoO251bGwhPT1mOyl7Y29uc3Qgdj1jP2x2ZShmLGMpOjA7bnVsbCE9PXYmJihoW3ZdP2hbdl0ucHJvamVjdGlvbk5leHQ9ZjpkW3ZdPWYsaFt2XT1mKSxmPWYubmV4dH19fWZ1bmN0aW9uIFdyKGMsbD0wLGEpe2NvbnN0IGQ9dWkoKSxoPW9zKCks''@;'; put 'put ''Zj1ONShoLHdhK2MsMTYsbnVsbCxhfHxudWxsKTtudWxsPT09Zi5wcm9qZWN0aW9uJiYoZi5wcm9qZWN0aW9uPWwpLGlDKCksKCFkW3R1XXx8djUoKSkmJjMyJn5mLmZsYWdzJiZmdW5jdGlvbiBXQihjLGwsYSl7dUQobFtiYV0sMCxsLGEsUXYoYyxhLGwpLGw4KGEucGFyZW50fHxsW25jXSxh''@;'; put 'put ''LGwpKX0oaCxkLGYpfWZ1bmN0aW9uIGhNKGMsbCxhKXtyZXR1cm4gclUoYywiIixsLCIiLGEpLGhNfWZ1bmN0aW9uIHJVKGMsbCxhLGQsaCl7Y29uc3QgZj11aSgpLHY9VWwoZixsLGEsZCk7cmV0dXJuIHYhPT1JYSYmRjAob3MoKSxLcygpLGYsYyx2LGZbYmFdLGgsITEpLHJVfWZ1bmN0aW9u''@;'; put 'put ''IGxhKGMsbCxhLGQpeyFmdW5jdGlvbiB1SShjLGwsYSxkKXtjb25zdCBoPW9zKCk7aWYoaC5maXJzdENyZWF0ZVBhc3Mpe2NvbnN0IGY9bGwoKTtoSShoLG5ldyBhSShsLGEsZCksZi5pbmRleCksZnVuY3Rpb24gTXooYyxsKXtjb25zdCBhPWMuY29udGVudFF1ZXJpZXN8fChjLmNvbnRlbnRR''@;'; put 'put ''dWVyaWVzPVtdKTtsIT09KGEubGVuZ3RoP2FbYS5sZW5ndGgtMV06LTEpJiZhLnB1c2goYy5xdWVyaWVzLmxlbmd0aC0xLGwpfShoLGMpLCEoMiZ+YSkmJihoLnN0YXRpY0NvbnRlbnRRdWVyaWVzPSEwKX1yZXR1cm4gbEkoaCx1aSgpLGEpfShjLGwsYSxkKX1mdW5jdGlvbiBuYShjLGwsYSl7''@;'; put 'put ''IWZ1bmN0aW9uIGNJKGMsbCxhKXtjb25zdCBkPW9zKCk7cmV0dXJuIGQuZmlyc3RDcmVhdGVQYXNzJiYoaEkoZCxuZXcgYUkoYyxsLGEpLC0xKSwhKDImfmwpJiYoZC5zdGF0aWNWaWV3UXVlcmllcz0hMCkpLGxJKGQsdWkoKSxsKX0oYyxsLGEpfWZ1bmN0aW9uIHhpKGMpe2NvbnN0IGw9dWko''@;'; put 'put ''KSxhPW9zKCksZD1zQygpO1AzKGQrMSk7Y29uc3QgaD1XUyhhLGQpO2lmKGMuZGlydHkmJmZ1bmN0aW9uIEpOKGMpe3JldHVybiEoNCZ+Y1tab10pfShsKT09PSEoMiZ+aC5tZXRhZGF0YS5mbGFncykpe2lmKG51bGw9PT1oLm1hdGNoZXMpYy5yZXNldChbXSk7ZWxzZXtjb25zdCBmPWZJKGws''@;'; put 'put ''ZCk7Yy5yZXNldChmLGRrKSxjLm5vdGlmeU9uQ2hhbmdlcygpfXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIEVpKCl7cmV0dXJuIGZ1bmN0aW9uIGs4KGMsbCl7cmV0dXJuIGNbdWRdLnF1ZXJpZXNbbF0ucXVlcnlMaXN0fSh1aSgpLHNDKCkpfWZ1bmN0aW9uIHZvKGMpe3JldHVybiBTNChm''@;'; put 'put ''dW5jdGlvbiBzVigpe3JldHVybiBDYS5sRnJhbWUuY29udGV4dExWaWV3fSgpLHdhK2MpfWZ1bmN0aW9uIExlKGMsbD0iIil7Y29uc3QgYT11aSgpLGQ9b3MoKSxoPWMrd2EsZj1kLmZpcnN0Q3JlYXRlUGFzcz9ONShkLGgsMSxsLG51bGwpOmQuZGF0YVtoXSx2PVFyZShkLGEsZixsLGMpO2Fb''@;'; put 'put ''aF09diwkNigpJiZzMChkLGEsdixmKSxzMihmLCExKX1sZXQgUXJlPShjLGwsYSxkLGgpPT4obDIoITApLGZ1bmN0aW9uIE40KGMsbCl7cmV0dXJuIGMuY3JlYXRlVGV4dChsKX0obFtiYV0sZCkpO2Z1bmN0aW9uIF9yKGMpe3JldHVybiBScigiIixjLCIiKSxfcn1mdW5jdGlvbiBScihjLGws''@;'; put 'put ''YSl7Y29uc3QgZD11aSgpLGg9VWwoZCxjLGwsYSk7cmV0dXJuIGghPT1JYSYmaDIoZCxOdSgpLGgpLFJyfWZ1bmN0aW9uIHp1KGMsbCxhLGQsaCl7Y29uc3QgZj11aSgpLHY9ZnVuY3Rpb24gWmwoYyxsLGEsZCxoLGYpe2NvbnN0IE09SjMoYyx3ZigpLGEsaCk7cmV0dXJuIENmKDIpLE0/bCtT''@;'; put 'put ''byhhKStkK1NvKGgpK2Y6SWF9KGYsYyxsLGEsZCxoKTtyZXR1cm4gdiE9PUlhJiZoMihmLE51KCksdiksenV9ZnVuY3Rpb24gTGYoYyxsLGEsZCxoLGYsdil7Y29uc3QgTT11aSgpLEQ9ZnVuY3Rpb24gYnUoYyxsLGEsZCxoLGYsdixNKXtjb25zdCBaPURiKGMsd2YoKSxhLGgsdik7cmV0dXJu''@;'; put 'put ''IENmKDMpLFo/bCtTbyhhKStkK1NvKGgpK2YrU28odikrTTpJYX0oTSxjLGwsYSxkLGgsZix2KTtyZXR1cm4gRCE9PUlhJiZoMihNLE51KCksRCksTGZ9ZnVuY3Rpb24gakkoYyxsLGEsZCxoLGYsdixNLEQpe2NvbnN0IFo9dWkoKSxuZT1mdW5jdGlvbiBDbChjLGwsYSxkLGgsZix2LE0sRCxa''@;'; put 'put ''KXtjb25zdCBjZT1iZChjLHdmKCksYSxoLHYsRCk7cmV0dXJuIENmKDQpLGNlP2wrU28oYSkrZCtTbyhoKStmK1NvKHYpK00rU28oRCkrWjpJYX0oWixjLGwsYSxkLGgsZix2LE0sRCk7cmV0dXJuIG5lIT09SWEmJmgyKFosTnUoKSxuZSksakl9ZnVuY3Rpb24gZmkoYyxsLGEpe2dJKGwpJiYo''@;'; put 'put ''bD1sKCkpO2NvbnN0IGQ9dWkoKTtyZXR1cm4gVmMoZCxuaCgpLGwpJiZGMChvcygpLEtzKCksZCxjLGwsZFtiYV0sYSwhMSksZml9ZnVuY3Rpb24gdmkoYyxsKXtjb25zdCBhPWdJKGMpO3JldHVybiBhJiZjLnNldChsKSxhfWZ1bmN0aW9uIHBpKGMsbCl7Y29uc3QgYT11aSgpLGQ9b3MoKSxo''@;'; put 'put ''PWxsKCk7cmV0dXJuIG5VKGQsYSxhW2JhXSxoLGMsbCkscGl9ZnVuY3Rpb24gaVUoYyxsLGEsZCxoKXtpZihjPUdpKGMpLEFycmF5LmlzQXJyYXkoYykpZm9yKGxldCBmPTA7ZjxjLmxlbmd0aDtmKyspaVUoY1tmXSxsLGEsZCxoKTtlbHNle2NvbnN0IGY9b3MoKSx2PXVpKCksTT1sbCgpO2xl''@;'; put 'put ''dCBEPXBmKGMpP2M6R2koYy5wcm92aWRlKTtjb25zdCBaPW12KGMpLG5lPTEwNDg1NzUmTS5wcm92aWRlckluZGV4ZXMsY2U9TS5kaXJlY3RpdmVTdGFydCxiZT1NLnByb3ZpZGVySW5kZXhlcz4+MjA7aWYocGYoYyl8fCFjLm11bHRpKXtjb25zdCBFZT1uZXcgUDEoWixoLEdlKSxCZT1hVShE''@;'; put 'put ''LGwsaD9uZTpuZStiZSxjZSk7LTE9PT1CZT8oaGQoUnYoTSx2KSxmLEQpLG9VKGYsYyxsLmxlbmd0aCksbC5wdXNoKEQpLE0uZGlyZWN0aXZlU3RhcnQrKyxNLmRpcmVjdGl2ZUVuZCsrLGgmJihNLnByb3ZpZGVySW5kZXhlcys9MTA0ODU3NiksYS5wdXNoKEVlKSx2LnB1c2goRWUpKTooYVtC''@;'; put 'put ''ZV09RWUsdltCZV09RWUpfWVsc2V7Y29uc3QgRWU9YVUoRCxsLG5lK2JlLGNlKSxCZT1hVShELGwsbmUsbmUrYmUpLG50PUJlPj0wJiZhW0JlXTtpZihoJiYhbnR8fCFoJiYhKEVlPj0wJiZhW0VlXSkpe2hkKFJ2KE0sdiksZixEKTtjb25zdCBsdD1mdW5jdGlvbiBUdmUoYyxsLGEsZCxoKXtj''@;'; put 'put ''b25zdCBmPW5ldyBQMShjLGEsR2UpO3JldHVybiBmLm11bHRpPVtdLGYuaW5kZXg9bCxmLmNvbXBvbmVudFByb3ZpZGVycz0wLG9pZShmLGgsZCYmIWEpLGZ9KGg/RXZlOnh2ZSxhLmxlbmd0aCxoLGQsWik7IWgmJm50JiYoYVtCZV0ucHJvdmlkZXJGYWN0b3J5PWx0KSxvVShmLGMsbC5sZW5n''@;'; put 'put ''dGgsMCksbC5wdXNoKEQpLE0uZGlyZWN0aXZlU3RhcnQrKyxNLmRpcmVjdGl2ZUVuZCsrLGgmJihNLnByb3ZpZGVySW5kZXhlcys9MTA0ODU3NiksYS5wdXNoKGx0KSx2LnB1c2gobHQpfWVsc2Ugb1UoZixjLEVlPi0xP0VlOkJlLG9pZShhW2g/QmU6RWVdLFosIWgmJmQpKTshaCYmZCYmbnQm''@;'; put 'put ''JmFbQmVdLmNvbXBvbmVudFByb3ZpZGVycysrfX19ZnVuY3Rpb24gb1UoYyxsLGEsZCl7Y29uc3QgaD1wZihsKSxmPWZ1bmN0aW9uIEw2KGMpe3JldHVybiEhYy51c2VDbGFzc30obCk7aWYoaHx8Zil7Y29uc3QgRD0oZj9HaShsLnVzZUNsYXNzKTpsKS5wcm90b3R5cGUubmdPbkRlc3Ryb3k7''@;'; put 'put ''aWYoRCl7Y29uc3QgWj1jLmRlc3Ryb3lIb29rc3x8KGMuZGVzdHJveUhvb2tzPVtdKTtpZighaCYmbC5tdWx0aSl7Y29uc3QgbmU9Wi5pbmRleE9mKGEpOy0xPT09bmU/Wi5wdXNoKGEsW2QsRF0pOlpbbmUrMV0ucHVzaChkLEQpfWVsc2UgWi5wdXNoKGEsRCl9fX1mdW5jdGlvbiBvaWUoYyxs''@;'; put 'put ''LGEpe3JldHVybiBhJiZjLmNvbXBvbmVudFByb3ZpZGVycysrLGMubXVsdGkucHVzaChsKS0xfWZ1bmN0aW9uIGFVKGMsbCxhLGQpe2ZvcihsZXQgaD1hO2g8ZDtoKyspaWYobFtoXT09PWMpcmV0dXJuIGg7cmV0dXJuLTF9ZnVuY3Rpb24geHZlKGMsbCxhLGQpe3JldHVybiBzVSh0aGlzLm11''@;'; put 'put ''bHRpLFtdKX1mdW5jdGlvbiBFdmUoYyxsLGEsZCl7Y29uc3QgaD10aGlzLm11bHRpO2xldCBmO2lmKHRoaXMucHJvdmlkZXJGYWN0b3J5KXtjb25zdCB2PXRoaXMucHJvdmlkZXJGYWN0b3J5LmNvbXBvbmVudFByb3ZpZGVycyxNPVQ0KGEsYVtxaV0sdGhpcy5wcm92aWRlckZhY3RvcnkuaW5k''@;'; put 'put ''ZXgsZCk7Zj1NLnNsaWNlKDAsdiksc1UoaCxmKTtmb3IobGV0IEQ9djtEPE0ubGVuZ3RoO0QrKylmLnB1c2goTVtEXSl9ZWxzZSBmPVtdLHNVKGgsZik7cmV0dXJuIGZ9ZnVuY3Rpb24gc1UoYyxsKXtmb3IobGV0IGE9MDthPGMubGVuZ3RoO2ErKylsLnB1c2goKDAsY1thXSkoKSk7cmV0dXJu''@;'; put 'put ''IGx9ZnVuY3Rpb24gcG8oYyxsPVtdKXtyZXR1cm4gYT0+e2EucHJvdmlkZXJzUmVzb2x2ZXI9KGQsaCk9PmZ1bmN0aW9uIE12ZShjLGwsYSl7Y29uc3QgZD1vcygpO2lmKGQuZmlyc3RDcmVhdGVQYXNzKXtjb25zdCBoPU5jKGMpO2lVKGEsZC5kYXRhLGQuYmx1ZXByaW50LGgsITApLGlVKGws''@;'; put 'put ''ZC5kYXRhLGQuYmx1ZXByaW50LGgsITEpfX0oZCxoP2goYyk6YyxsKX19bGV0IEF2ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX2luamVjdG9yPWEsdGhpcy5jYWNoZWRJbmplY3RvcnM9bmV3IE1hcH1nZXRPckNyZWF0ZVN0YW5kYWxvbmVJbmplY3RvcihhKXtpZighYS5z''@;'; put 'put ''dGFuZGFsb25lKXJldHVybiBudWxsO2lmKCF0aGlzLmNhY2hlZEluamVjdG9ycy5oYXMoYSkpe2NvbnN0IGQ9ZWgoMCxhLnR5cGUpLGg9ZC5sZW5ndGg+MD9aNChbZF0sdGhpcy5faW5qZWN0b3IsYFN0YW5kYWxvbmVbJHthLnR5cGUubmFtZX1dYCk6bnVsbDt0aGlzLmNhY2hlZEluamVjdG9y''@;'; put 'put ''cy5zZXQoYSxoKX1yZXR1cm4gdGhpcy5jYWNoZWRJbmplY3RvcnMuZ2V0KGEpfW5nT25EZXN0cm95KCl7dHJ5e2Zvcihjb25zdCBhIG9mIHRoaXMuY2FjaGVkSW5qZWN0b3JzLnZhbHVlcygpKW51bGwhPT1hJiZhLmRlc3Ryb3koKX1maW5hbGx5e3RoaXMuY2FjaGVkSW5qZWN0b3JzLmNsZWFy''@;'; put 'put ''KCl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMscHJvdmlkZWRJbjoiZW52aXJvbm1lbnQiLGZhY3Rvcnk6KCk9Pm5ldyBjKE1yKGNjKSl9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHpJKGMpe2YyKCJOZ1N0YW5kYWxvbmUiKSxjLmdldFN0YW5kYWxvbmVJbmplY3Rvcj1s''@;'; put 'put ''PT5sLmdldChBdmUpLmdldE9yQ3JlYXRlU3RhbmRhbG9uZUluamVjdG9yKGMpfWZ1bmN0aW9uIFdzKGMsbCxhKXtjb25zdCBkPU8wKCkrYyxoPXVpKCk7cmV0dXJuIGhbZF09PT1JYT9wMihoLGQsYT9sLmNhbGwoYSk6bCgpKTpmdW5jdGlvbiBUYyhjLGwpe3JldHVybiBjW2xdfShoLGQpfWZ1''@;'; put 'put ''bmN0aW9uIG5wKGMsbCxhLGQpe3JldHVybiBzaWUodWkoKSxPMCgpLGMsbCxhLGQpfWZ1bmN0aW9uIHJwKGMsbCxhLGQsaCl7cmV0dXJuIGxpZSh1aSgpLE8wKCksYyxsLGEsZCxoKX1mdW5jdGlvbiBmTShjLGwsYSxkLGgsZil7cmV0dXJuIGNpZSh1aSgpLE8wKCksYyxsLGEsZCxoLGYpfWZ1''@;'; put 'put ''bmN0aW9uIFpJKGMsbCxhLGQsaCxmLHYpe3JldHVybiBmdW5jdGlvbiB1aWUoYyxsLGEsZCxoLGYsdixNLEQpe2NvbnN0IFo9bCthO3JldHVybiBiZChjLFosaCxmLHYsTSk/cDIoYyxaKzQsRD9kLmNhbGwoRCxoLGYsdixNKTpkKGgsZix2LE0pKTpwTShjLForNCl9KHVpKCksTzAoKSxjLGws''@;'; put 'put ''YSxkLGgsZix2KX1mdW5jdGlvbiBwTShjLGwpe2NvbnN0IGE9Y1tsXTtyZXR1cm4gYT09PUlhP3ZvaWQgMDphfWZ1bmN0aW9uIHNpZShjLGwsYSxkLGgsZil7Y29uc3Qgdj1sK2E7cmV0dXJuIFZjKGMsdixoKT9wMihjLHYrMSxmP2QuY2FsbChmLGgpOmQoaCkpOnBNKGMsdisxKX1mdW5jdGlv''@;'; put 'put ''biBsaWUoYyxsLGEsZCxoLGYsdil7Y29uc3QgTT1sK2E7cmV0dXJuIEozKGMsTSxoLGYpP3AyKGMsTSsyLHY/ZC5jYWxsKHYsaCxmKTpkKGgsZikpOnBNKGMsTSsyKX1mdW5jdGlvbiBjaWUoYyxsLGEsZCxoLGYsdixNKXtjb25zdCBEPWwrYTtyZXR1cm4gRGIoYyxELGgsZix2KT9wMihjLEQr''@;'; put 'put ''MyxNP2QuY2FsbChNLGgsZix2KTpkKGgsZix2KSk6cE0oYyxEKzMpfWZ1bmN0aW9uIHFzKGMsbCl7Y29uc3QgYT1vcygpO2xldCBkO2NvbnN0IGg9Yyt3YTthLmZpcnN0Q3JlYXRlUGFzcz8oZD1mdW5jdGlvbiBGdmUoYyxsKXtpZihsKWZvcihsZXQgYT1sLmxlbmd0aC0xO2E+PTA7YS0tKXtj''@;'; put 'put ''b25zdCBkPWxbYV07aWYoYz09PWQubmFtZSlyZXR1cm4gZH19KGwsYS5waXBlUmVnaXN0cnkpLGEuZGF0YVtoXT1kLGQub25EZXN0cm95JiYoYS5kZXN0cm95SG9va3M/Pz1bXSkucHVzaChoLGQub25EZXN0cm95KSk6ZD1hLmRhdGFbaF07Y29uc3QgZj1kLmZhY3Rvcnl8fChkLmZhY3Rvcnk9''@;'; put 'put ''Z3UoZC50eXBlKSksTT1ibChHZSk7dHJ5e2NvbnN0IEQ9RHYoITEpLFo9ZigpO3JldHVybiBEdihEKSxmdW5jdGlvbiBodmUoYyxsLGEsZCl7YT49Yy5kYXRhLmxlbmd0aCYmKGMuZGF0YVthXT1udWxsLGMuYmx1ZXByaW50W2FdPW51bGwpLGxbYV09ZH0oYSx1aSgpLGgsWiksWn1maW5hbGx5''@;'; put 'put ''e2JsKE0pfX1mdW5jdGlvbiBrYyhjLGwsYSl7Y29uc3QgZD1jK3dhLGg9dWkoKSxmPVM0KGgsZCk7cmV0dXJuIGdNKGgsZCk/c2llKGgsTzAoKSxsLGYudHJhbnNmb3JtLGEsZik6Zi50cmFuc2Zvcm0oYSl9ZnVuY3Rpb24gQjgoYyxsLGEsZCl7Y29uc3QgaD1jK3dhLGY9dWkoKSx2PVM0KGYs''@;'; put 'put ''aCk7cmV0dXJuIGdNKGYsaCk/bGllKGYsTzAoKSxsLHYudHJhbnNmb3JtLGEsZCx2KTp2LnRyYW5zZm9ybShhLGQpfWZ1bmN0aW9uIGxVKGMsbCxhLGQsaCl7Y29uc3QgZj1jK3dhLHY9dWkoKSxNPVM0KHYsZik7cmV0dXJuIGdNKHYsZik/Y2llKHYsTzAoKSxsLE0udHJhbnNmb3JtLGEsZCxo''@;'; put 'put ''LE0pOk0udHJhbnNmb3JtKGEsZCxoKX1mdW5jdGlvbiBnTShjLGwpe3JldHVybiBjW3FpXS5kYXRhW2xdLnB1cmV9ZnVuY3Rpb24gX3UoYyxsKXtyZXR1cm4gc2IoYyxsKX1jbGFzcyB2TXtjb25zdHJ1Y3RvcihsKXt0aGlzLmZ1bGw9bDtjb25zdCBhPWwuc3BsaXQoIi4iKTt0aGlzLm1ham9y''@;'; put 'put ''PWFbMF0sdGhpcy5taW5vcj1hWzFdLHRoaXMucGF0Y2g9YS5zbGljZSgyKS5qb2luKCIuIil9fWNvbnN0IFRpZT1uZXcgdk0oIjE3LjMuMTIiKTtsZXQgQWllPSgoKT0+e2NsYXNzIGN7bG9nKGEpe2NvbnNvbGUubG9nKGEpfXdhcm4oYSl7Y29uc29sZS53YXJuKGEpfXN0YXRpY3t0aGlzLlx1''@;'; put 'put ''MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicGxhdGZvcm0ifSl9fXJldHVybiBjfSkoKTtjb25zdCBMaWU9bmV3IFN0KCIiKSxHST1uZXcgU3QoIiIp''@;'; put 'put ''O2xldCBtVSxwVT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9uZ1pvbmU9YSx0aGlzLnJlZ2lzdHJ5PWQsdGhpcy5fcGVuZGluZ0NvdW50PTAsdGhpcy5faXNab25lU3RhYmxlPSEwLHRoaXMuX2NhbGxiYWNrcz1bXSx0aGlzLnRhc2tUcmFja2luZ1pvbmU9bnVsbCxt''@;'; put 'put ''VXx8KGZ1bmN0aW9uIEliZShjKXttVT1jfShoKSxoLmFkZFRvV2luZG93KGQpKSx0aGlzLl93YXRjaEFuZ3VsYXJFdmVudHMoKSxhLnJ1bigoKT0+e3RoaXMudGFza1RyYWNraW5nWm9uZT10eXBlb2YgWm9uZT4idSI/bnVsbDpab25lLmN1cnJlbnQuZ2V0KCJUYXNrVHJhY2tpbmdab25lIil9''@;'; put 'put ''KX1fd2F0Y2hBbmd1bGFyRXZlbnRzKCl7dGhpcy5fbmdab25lLm9uVW5zdGFibGUuc3Vic2NyaWJlKHtuZXh0OigpPT57dGhpcy5faXNab25lU3RhYmxlPSExfX0pLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX25nWm9uZS5vblN0YWJsZS5zdWJzY3JpYmUoe25l''@;'; put 'put ''eHQ6KCk9PntZby5hc3NlcnROb3RJbkFuZ3VsYXJab25lKCkscXVldWVNaWNyb3Rhc2soKCk9Pnt0aGlzLl9pc1pvbmVTdGFibGU9ITAsdGhpcy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpfSl9fSl9KX1pbmNyZWFzZVBlbmRpbmdSZXF1ZXN0Q291bnQoKXtyZXR1cm4gdGhpcy5fcGVuZGluZ0Nv''@;'; put 'put ''dW50Kz0xLHRoaXMuX3BlbmRpbmdDb3VudH1kZWNyZWFzZVBlbmRpbmdSZXF1ZXN0Q291bnQoKXtpZih0aGlzLl9wZW5kaW5nQ291bnQtPTEsdGhpcy5fcGVuZGluZ0NvdW50PDApdGhyb3cgbmV3IEVycm9yKCJwZW5kaW5nIGFzeW5jIHJlcXVlc3RzIGJlbG93IHplcm8iKTtyZXR1cm4gdGhp''@;'; put 'put ''cy5fcnVuQ2FsbGJhY2tzSWZSZWFkeSgpLHRoaXMuX3BlbmRpbmdDb3VudH1pc1N0YWJsZSgpe3JldHVybiB0aGlzLl9pc1pvbmVTdGFibGUmJjA9PT10aGlzLl9wZW5kaW5nQ291bnQmJiF0aGlzLl9uZ1pvbmUuaGFzUGVuZGluZ01hY3JvdGFza3N9X3J1bkNhbGxiYWNrc0lmUmVhZHkoKXtp''@;'; put 'put ''Zih0aGlzLmlzU3RhYmxlKCkpcXVldWVNaWNyb3Rhc2soKCk9Pntmb3IoOzAhPT10aGlzLl9jYWxsYmFja3MubGVuZ3RoOyl7bGV0IGE9dGhpcy5fY2FsbGJhY2tzLnBvcCgpO2NsZWFyVGltZW91dChhLnRpbWVvdXRJZCksYS5kb25lQ2IoKX19KTtlbHNle2xldCBhPXRoaXMuZ2V0UGVuZGlu''@;'; put 'put ''Z1Rhc2tzKCk7dGhpcy5fY2FsbGJhY2tzPXRoaXMuX2NhbGxiYWNrcy5maWx0ZXIoZD0+IWQudXBkYXRlQ2J8fCFkLnVwZGF0ZUNiKGEpfHwoY2xlYXJUaW1lb3V0KGQudGltZW91dElkKSwhMSkpfX1nZXRQZW5kaW5nVGFza3MoKXtyZXR1cm4gdGhpcy50YXNrVHJhY2tpbmdab25lP3RoaXMu''@;'; put 'put ''dGFza1RyYWNraW5nWm9uZS5tYWNyb1Rhc2tzLm1hcChhPT4oe3NvdXJjZTphLnNvdXJjZSxjcmVhdGlvbkxvY2F0aW9uOmEuY3JlYXRpb25Mb2NhdGlvbixkYXRhOmEuZGF0YX0pKTpbXX1hZGRDYWxsYmFjayhhLGQsaCl7bGV0IGY9LTE7ZCYmZD4wJiYoZj1zZXRUaW1lb3V0KCgpPT57dGhp''@;'; put 'put ''cy5fY2FsbGJhY2tzPXRoaXMuX2NhbGxiYWNrcy5maWx0ZXIodj0+di50aW1lb3V0SWQhPT1mKSxhKCl9LGQpKSx0aGlzLl9jYWxsYmFja3MucHVzaCh7ZG9uZUNiOmEsdGltZW91dElkOmYsdXBkYXRlQ2I6aH0pfXdoZW5TdGFibGUoYSxkLGgpe2lmKGgmJiF0aGlzLnRhc2tUcmFja2luZ1pv''@;'; put 'put ''bmUpdGhyb3cgbmV3IEVycm9yKCdUYXNrIHRyYWNraW5nIHpvbmUgaXMgcmVxdWlyZWQgd2hlbiBwYXNzaW5nIGFuIHVwZGF0ZSBjYWxsYmFjayB0byB3aGVuU3RhYmxlKCkuIElzICJ6b25lLmpzL3BsdWdpbnMvdGFzay10cmFja2luZyIgbG9hZGVkPycpO3RoaXMuYWRkQ2FsbGJhY2soYSxk''@;'; put 'put ''LGgpLHRoaXMuX3J1bkNhbGxiYWNrc0lmUmVhZHkoKX1nZXRQZW5kaW5nUmVxdWVzdENvdW50KCl7cmV0dXJuIHRoaXMuX3BlbmRpbmdDb3VudH1yZWdpc3RlckFwcGxpY2F0aW9uKGEpe3RoaXMucmVnaXN0cnkucmVnaXN0ZXJBcHBsaWNhdGlvbihhLHRoaXMpfXVucmVnaXN0ZXJBcHBsaWNh''@;'; put 'put ''dGlvbihhKXt0aGlzLnJlZ2lzdHJ5LnVucmVnaXN0ZXJBcHBsaWNhdGlvbihhKX1maW5kUHJvdmlkZXJzKGEsZCxoKXtyZXR1cm5bXX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShNcihZbyksTXIoZ1UpLE1yKEdJKSl9fXN0YXRpY3t0aGlzLlx1''@;'; put 'put ''MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCksZ1U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2FwcGxpY2F0aW9ucz1uZXcgTWFwfXJlZ2lzdGVyQXBwbGljYXRpb24oYSxkKXt0aGlzLl9hcHBsaWNhdGlvbnMuc2V0KGEs''@;'; put 'put ''ZCl9dW5yZWdpc3RlckFwcGxpY2F0aW9uKGEpe3RoaXMuX2FwcGxpY2F0aW9ucy5kZWxldGUoYSl9dW5yZWdpc3RlckFsbEFwcGxpY2F0aW9ucygpe3RoaXMuX2FwcGxpY2F0aW9ucy5jbGVhcigpfWdldFRlc3RhYmlsaXR5KGEpe3JldHVybiB0aGlzLl9hcHBsaWNhdGlvbnMuZ2V0KGEpfHxu''@;'; put 'put ''dWxsfWdldEFsbFRlc3RhYmlsaXRpZXMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9hcHBsaWNhdGlvbnMudmFsdWVzKCkpfWdldEFsbFJvb3RFbGVtZW50cygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuX2FwcGxpY2F0aW9ucy5rZXlzKCkpfWZpbmRUZXN0YWJpbGl0eUluVHJlZShhLGQ9''@;'; put 'put ''ITApe3JldHVybiBtVT8uZmluZFRlc3RhYmlsaXR5SW5UcmVlKHRoaXMsYSxkKT8/bnVsbH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3Zp''@;'; put 'put ''ZGVkSW46InBsYXRmb3JtIn0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24geU0oYyl7cmV0dXJuISFjJiYiZnVuY3Rpb24iPT10eXBlb2YgYy50aGVufWZ1bmN0aW9uIE9pZShjKXtyZXR1cm4hIWMmJiJmdW5jdGlvbiI9PXR5cGVvZiBjLnN1YnNjcmliZX1jb25zdCB2VT1uZXcgU3QoIiIpO2xl''@;'; put 'put ''dCBiVT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5pbml0aWFsaXplZD0hMSx0aGlzLmRvbmU9ITEsdGhpcy5kb25lUHJvbWlzZT1uZXcgUHJvbWlzZSgoYSxkKT0+e3RoaXMucmVzb2x2ZT1hLHRoaXMucmVqZWN0PWR9KSx0aGlzLmFwcEluaXRzPWhpKHZVLHtvcHRpb25hbDoh''@;'; put 'put ''MH0pPz9bXX1ydW5Jbml0aWFsaXplcnMoKXtpZih0aGlzLmluaXRpYWxpemVkKXJldHVybjtjb25zdCBhPVtdO2Zvcihjb25zdCBoIG9mIHRoaXMuYXBwSW5pdHMpe2NvbnN0IGY9aCgpO2lmKHlNKGYpKWEucHVzaChmKTtlbHNlIGlmKE9pZShmKSl7Y29uc3Qgdj1uZXcgUHJvbWlzZSgoTSxE''@;'; put 'put ''KT0+e2Yuc3Vic2NyaWJlKHtjb21wbGV0ZTpNLGVycm9yOkR9KX0pO2EucHVzaCh2KX19Y29uc3QgZD0oKT0+e3RoaXMuZG9uZT0hMCx0aGlzLnJlc29sdmUoKX07UHJvbWlzZS5hbGwoYSkudGhlbigoKT0+e2QoKX0pLmNhdGNoKGg9Pnt0aGlzLnJlamVjdChoKX0pLDA9PT1hLmxlbmd0aCYm''@;'; put 'put ''ZCgpLHRoaXMuaW5pdGlhbGl6ZWQ9ITB9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7''@;'; put 'put ''Y29uc3QgeVU9bmV3IFN0KCIiKTtmdW5jdGlvbiBIaWUoYyxsKXtyZXR1cm4gQXJyYXkuaXNBcnJheShsKT9sLnJlZHVjZShIaWUsYyk6ey4uLmMsLi4ubH19bGV0IEc0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9ib290c3RyYXBMaXN0ZW5lcnM9W10sdGhpcy5fcnVubmlu''@;'; put 'put ''Z1RpY2s9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnM9W10sdGhpcy5fdmlld3M9W10sdGhpcy5pbnRlcm5hbEVycm9ySGFuZGxlcj1oaShjayksdGhpcy5hZnRlclJlbmRlckVmZmVjdE1hbmFnZXI9aGkoTTgpLHRoaXMuZXh0ZXJuYWxUZXN0Vmlld3M9bmV3''@;'; put 'put ''IFNldCx0aGlzLmJlZm9yZVJlbmRlcj1uZXcgV24sdGhpcy5hZnRlclRpY2s9bmV3IFduLHRoaXMuY29tcG9uZW50VHlwZXM9W10sdGhpcy5jb21wb25lbnRzPVtdLHRoaXMuaXNTdGFibGU9aGkoa2YpLmhhc1BlbmRpbmdUYXNrcy5waXBlKE9yKGE9PiFhKSksdGhpcy5faW5qZWN0b3I9aGko''@;'; put 'put ''Y2MpfWdldCBkZXN0cm95ZWQoKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkfWdldCBpbmplY3Rvcigpe3JldHVybiB0aGlzLl9pbmplY3Rvcn1ib290c3RyYXAoYSxkKXtjb25zdCBoPWEgaW5zdGFuY2VvZiBXRDtpZighdGhpcy5faW5qZWN0b3IuZ2V0KGJVKS5kb25lKXRocm93IWgmJmZ1bmN0''@;'; put 'put ''aW9uIFhoKGMpe2NvbnN0IGw9VmEoYyl8fE1jKGMpfHxRYyhjKTtyZXR1cm4gbnVsbCE9PWwmJmwuc3RhbmRhbG9uZX0oYSksbmV3IGVyKDQwNSwhMSk7bGV0IHY7dj1oP2E6dGhpcy5faW5qZWN0b3IuZ2V0KHo1KS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShhKSx0aGlzLmNvbXBvbmVudFR5''@;'; put 'put ''cGVzLnB1c2godi5jb21wb25lbnRUeXBlKTtjb25zdCBNPWZ1bmN0aW9uIFJiZShjKXtyZXR1cm4gYy5pc0JvdW5kVG9Nb2R1bGV9KHYpP3ZvaWQgMDp0aGlzLl9pbmplY3Rvci5nZXQoWDMpLFo9di5jcmVhdGUoRHMuTlVMTCxbXSxkfHx2LnNlbGVjdG9yLE0pLG5lPVoubG9jYXRpb24ubmF0''@;'; put 'put ''aXZlRWxlbWVudCxjZT1aLmluamVjdG9yLmdldChMaWUsbnVsbCk7cmV0dXJuIGNlPy5yZWdpc3RlckFwcGxpY2F0aW9uKG5lKSxaLm9uRGVzdHJveSgoKT0+e3RoaXMuZGV0YWNoVmlldyhaLmhvc3RWaWV3KSwkSSh0aGlzLmNvbXBvbmVudHMsWiksY2U/LnVucmVnaXN0ZXJBcHBsaWNhdGlv''@;'; put 'put ''bihuZSl9KSx0aGlzLl9sb2FkQ29tcG9uZW50KFopLFp9dGljaygpe3RoaXMuX3RpY2soITApfV90aWNrKGEpe2lmKHRoaXMuX3J1bm5pbmdUaWNrKXRocm93IG5ldyBlcigxMDEsITEpO2NvbnN0IGQ9X2UobnVsbCk7dHJ5e3RoaXMuX3J1bm5pbmdUaWNrPSEwLHRoaXMuZGV0ZWN0Q2hhbmdl''@;'; put 'put ''c0luQXR0YWNoZWRWaWV3cyhhKX1jYXRjaChoKXt0aGlzLmludGVybmFsRXJyb3JIYW5kbGVyKGgpfWZpbmFsbHl7dGhpcy5hZnRlclRpY2submV4dCgpLHRoaXMuX3J1bm5pbmdUaWNrPSExLF9lKGQpfX1kZXRlY3RDaGFuZ2VzSW5BdHRhY2hlZFZpZXdzKGEpe2xldCBkPTA7Y29uc3QgaD10''@;'; put 'put ''aGlzLmFmdGVyUmVuZGVyRWZmZWN0TWFuYWdlcjtmb3IoOzspe2lmKGQ9PT1MRCl0aHJvdyBuZXcgZXIoMTAzLCExKTtpZihhKXtjb25zdCBmPTA9PT1kO3RoaXMuYmVmb3JlUmVuZGVyLm5leHQoZik7Zm9yKGxldHtfbFZpZXc6dixub3RpZnlFcnJvckhhbmRsZXI6TX1vZiB0aGlzLl92aWV3''@;'; put 'put ''cylPYmUodixmLE0pfWlmKGQrKyxoLmV4ZWN1dGVJbnRlcm5hbENhbGxiYWNrcygpLCFbLi4udGhpcy5leHRlcm5hbFRlc3RWaWV3cy5rZXlzKCksLi4udGhpcy5fdmlld3NdLnNvbWUoKHtfbFZpZXc6Zn0pPT5fVShmKSkmJihoLmV4ZWN1dGUoKSwhWy4uLnRoaXMuZXh0ZXJuYWxUZXN0Vmll''@;'; put 'put ''d3Mua2V5cygpLC4uLnRoaXMuX3ZpZXdzXS5zb21lKCh7X2xWaWV3OmZ9KT0+X1UoZikpKSlicmVha319YXR0YWNoVmlldyhhKXtjb25zdCBkPWE7dGhpcy5fdmlld3MucHVzaChkKSxkLmF0dGFjaFRvQXBwUmVmKHRoaXMpfWRldGFjaFZpZXcoYSl7Y29uc3QgZD1hOyRJKHRoaXMuX3ZpZXdz''@;'; put 'put ''LGQpLGQuZGV0YWNoRnJvbUFwcFJlZigpfV9sb2FkQ29tcG9uZW50KGEpe3RoaXMuYXR0YWNoVmlldyhhLmhvc3RWaWV3KSx0aGlzLnRpY2soKSx0aGlzLmNvbXBvbmVudHMucHVzaChhKTtjb25zdCBkPXRoaXMuX2luamVjdG9yLmdldCh5VSxbXSk7Wy4uLnRoaXMuX2Jvb3RzdHJhcExpc3Rl''@;'; put 'put ''bmVycywuLi5kXS5mb3JFYWNoKGg9PmgoYSkpfW5nT25EZXN0cm95KCl7aWYoIXRoaXMuX2Rlc3Ryb3llZCl0cnl7dGhpcy5fZGVzdHJveUxpc3RlbmVycy5mb3JFYWNoKGE9PmEoKSksdGhpcy5fdmlld3Muc2xpY2UoKS5mb3JFYWNoKGE9PmEuZGVzdHJveSgpKX1maW5hbGx5e3RoaXMuX2Rl''@;'; put 'put ''c3Ryb3llZD0hMCx0aGlzLl92aWV3cz1bXSx0aGlzLl9ib290c3RyYXBMaXN0ZW5lcnM9W10sdGhpcy5fZGVzdHJveUxpc3RlbmVycz1bXX19b25EZXN0cm95KGEpe3JldHVybiB0aGlzLl9kZXN0cm95TGlzdGVuZXJzLnB1c2goYSksKCk9PiRJKHRoaXMuX2Rlc3Ryb3lMaXN0ZW5lcnMsYSl9''@;'; put 'put ''ZGVzdHJveSgpe2lmKHRoaXMuX2Rlc3Ryb3llZCl0aHJvdyBuZXcgZXIoNDA2LCExKTtjb25zdCBhPXRoaXMuX2luamVjdG9yO2EuZGVzdHJveSYmIWEuZGVzdHJveWVkJiZhLmRlc3Ryb3koKX1nZXQgdmlld0NvdW50KCl7cmV0dXJuIHRoaXMuX3ZpZXdzLmxlbmd0aH13YXJuSWZEZXN0cm95''@;'; put 'put ''ZWQoKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gJEkoYyxsKXtj''@;'; put 'put ''b25zdCBhPWMuaW5kZXhPZihsKTthPi0xJiZjLnNwbGljZShhLDEpfWZ1bmN0aW9uIE9iZShjLGwsYSl7IWwmJiFfVShjKXx8ZnVuY3Rpb24gUGJlKGMsbCxhKXtsZXQgZDthPyhkPTAsY1tab118PTEwMjQpOmQ9NjQmY1tab10/MDoxLGFiKGMsbCxkKX0oYyxhLGwpfWZ1bmN0aW9uIF9VKGMp''@;'; put 'put ''e3JldHVybiB3dihjKX1jbGFzcyBGYmV7Y29uc3RydWN0b3IobCxhKXt0aGlzLm5nTW9kdWxlRmFjdG9yeT1sLHRoaXMuY29tcG9uZW50RmFjdG9yaWVzPWF9fWxldCBOaWU9KCgpPT57Y2xhc3MgY3tjb21waWxlTW9kdWxlU3luYyhhKXtyZXR1cm4gbmV3IFRiKGEpfWNvbXBpbGVNb2R1bGVB''@;'; put 'put ''c3luYyhhKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuY29tcGlsZU1vZHVsZVN5bmMoYSkpfWNvbXBpbGVNb2R1bGVBbmRBbGxDb21wb25lbnRzU3luYyhhKXtjb25zdCBkPXRoaXMuY29tcGlsZU1vZHVsZVN5bmMoYSksZj1GMShPdShhKS5kZWNsYXJhdGlvbnMpLnJlZHVjZSgodixN''@;'; put 'put ''KT0+e2NvbnN0IEQ9VmEoTSk7cmV0dXJuIEQmJnYucHVzaChuZXcgVDgoRCkpLHZ9LFtdKTtyZXR1cm4gbmV3IEZiZShkLGYpfWNvbXBpbGVNb2R1bGVBbmRBbGxDb21wb25lbnRzQXN5bmMoYSl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLmNvbXBpbGVNb2R1bGVBbmRBbGxDb21wb25l''@;'; put 'put ''bnRzU3luYyhhKSl9Y2xlYXJDYWNoZSgpe31jbGVhckNhY2hlRm9yKGEpe31nZXRNb2R1bGVJZChhKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZh''@;'; put 'put ''Yyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksVmJlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLnpvbmU9aGkoWW8pLHRoaXMuYXBwbGljYXRpb25SZWY9aGkoRzQpfWluaXRpYWxpemUoKXt0aGlzLl9vbk1pY3JvdGFza0VtcHR5U3Vic2NyaXB0aW9ufHwodGhp''@;'; put 'put ''cy5fb25NaWNyb3Rhc2tFbXB0eVN1YnNjcmlwdGlvbj10aGlzLnpvbmUub25NaWNyb3Rhc2tFbXB0eS5zdWJzY3JpYmUoe25leHQ6KCk9Pnt0aGlzLnpvbmUucnVuKCgpPT57dGhpcy5hcHBsaWNhdGlvblJlZi50aWNrKCl9KX19KSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9vbk1pY3JvdGFza0Vt''@;'; put 'put ''cHR5U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJu''@;'; put 'put ''IGN9KSgpO2Z1bmN0aW9uIEJiZSgpe2NvbnN0IGM9aGkoWW8pLGw9aGkodTIpO3JldHVybiBhPT5jLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5sLmhhbmRsZUVycm9yKGEpKX1sZXQgemJlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLnN1YnNjcmlwdGlvbj1uZXcgcXQsdGhpcy5p''@;'; put 'put ''bml0aWFsaXplZD0hMSx0aGlzLnpvbmU9aGkoWW8pLHRoaXMucGVuZGluZ1Rhc2tzPWhpKGtmKX1pbml0aWFsaXplKCl7aWYodGhpcy5pbml0aWFsaXplZClyZXR1cm47dGhpcy5pbml0aWFsaXplZD0hMDtsZXQgYT1udWxsOyF0aGlzLnpvbmUuaXNTdGFibGUmJiF0aGlzLnpvbmUuaGFzUGVu''@;'; put 'put ''ZGluZ01hY3JvdGFza3MmJiF0aGlzLnpvbmUuaGFzUGVuZGluZ01pY3JvdGFza3MmJihhPXRoaXMucGVuZGluZ1Rhc2tzLmFkZCgpKSx0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLnN1YnNjcmlwdGlvbi5hZGQodGhpcy56b25lLm9uU3RhYmxlLnN1YnNjcmliZSgoKT0+''@;'; put 'put ''e1lvLmFzc2VydE5vdEluQW5ndWxhclpvbmUoKSxxdWV1ZU1pY3JvdGFzaygoKT0+e251bGwhPT1hJiYhdGhpcy56b25lLmhhc1BlbmRpbmdNYWNyb3Rhc2tzJiYhdGhpcy56b25lLmhhc1BlbmRpbmdNaWNyb3Rhc2tzJiYodGhpcy5wZW5kaW5nVGFza3MucmVtb3ZlKGEpLGE9bnVsbCl9KX0p''@;'; put 'put ''KX0pLHRoaXMuc3Vic2NyaXB0aW9uLmFkZCh0aGlzLnpvbmUub25VbnN0YWJsZS5zdWJzY3JpYmUoKCk9PntZby5hc3NlcnRJbkFuZ3VsYXJab25lKCksYT8/PXRoaXMucGVuZGluZ1Rhc2tzLmFkZCgpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKX1z''@;'; put 'put ''dGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjb25zdCBPZj1uZXcgU3QoIiIse3Byb3Zp''@;'; put 'put ''ZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PmhpKE9mLG9vLk9wdGlvbmFsfG9vLlNraXBTZWxmKXx8ZnVuY3Rpb24gVWJlKCl7cmV0dXJuIHR5cGVvZiAkbG9jYWxpemU8InUiJiYkbG9jYWxpemUubG9jYWxlfHxOYn0oKX0pLHdVPW5ldyBTdCgiIik7bGV0IHppZT0oKCk9PntjbGFzcyBje2Nv''@;'; put 'put ''bnN0cnVjdG9yKGEpe3RoaXMuX2luamVjdG9yPWEsdGhpcy5fbW9kdWxlcz1bXSx0aGlzLl9kZXN0cm95TGlzdGVuZXJzPVtdLHRoaXMuX2Rlc3Ryb3llZD0hMX1ib290c3RyYXBNb2R1bGVGYWN0b3J5KGEsZCl7Y29uc3QgaD1mdW5jdGlvbiBxRChjPSJ6b25lLmpzIixsKXtyZXR1cm4ibm9v''@;'; put 'put ''cCI9PT1jP25ldyBLRDoiem9uZS5qcyI9PT1jP25ldyBZbyhsKTpjfShkPy5uZ1pvbmUsZnVuY3Rpb24gamllKGMpe3JldHVybntlbmFibGVMb25nU3RhY2tUcmFjZTohMSxzaG91bGRDb2FsZXNjZUV2ZW50Q2hhbmdlRGV0ZWN0aW9uOmM/LmV2ZW50Q29hbGVzY2luZz8/ITEsc2hvdWxkQ29h''@;'; put 'put ''bGVzY2VSdW5DaGFuZ2VEZXRlY3Rpb246Yz8ucnVuQ29hbGVzY2luZz8/ITF9fSh7ZXZlbnRDb2FsZXNjaW5nOmQ/Lm5nWm9uZUV2ZW50Q29hbGVzY2luZyxydW5Db2FsZXNjaW5nOmQ/Lm5nWm9uZVJ1bkNvYWxlc2Npbmd9KSk7cmV0dXJuIGgucnVuKCgpPT57Y29uc3QgZj1mdW5jdGlvbiBB''@;'; put 'put ''SShjLGwsYSl7cmV0dXJuIG5ldyBFYihjLGwsYSl9KGEubW9kdWxlVHlwZSx0aGlzLmluamVjdG9yLGZ1bmN0aW9uIEJpZShjKXtyZXR1cm5be3Byb3ZpZGU6WW8sdXNlRmFjdG9yeTpjfSx7cHJvdmlkZTpxaCxtdWx0aTohMCx1c2VGYWN0b3J5OigpPT57Y29uc3QgbD1oaShWYmUse29wdGlv''@;'; put 'put ''bmFsOiEwfSk7cmV0dXJuKCk9PmwuaW5pdGlhbGl6ZSgpfX0se3Byb3ZpZGU6cWgsbXVsdGk6ITAsdXNlRmFjdG9yeTooKT0+e2NvbnN0IGw9aGkoemJlKTtyZXR1cm4oKT0+e2wuaW5pdGlhbGl6ZSgpfX19LHtwcm92aWRlOmNrLHVzZUZhY3Rvcnk6QmJlfV19KCgpPT5oKSksdj1mLmluamVj''@;'; put 'put ''dG9yLmdldCh1MixudWxsKTtyZXR1cm4gaC5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2NvbnN0IE09aC5vbkVycm9yLnN1YnNjcmliZSh7bmV4dDpEPT57di5oYW5kbGVFcnJvcihEKX19KTtmLm9uRGVzdHJveSgoKT0+eyRJKHRoaXMuX21vZHVsZXMsZiksTS51bnN1YnNjcmliZSgpfSl9KSxm''@;'; put 'put ''dW5jdGlvbiBGaWUoYyxsLGEpe3RyeXtjb25zdCBkPWEoKTtyZXR1cm4geU0oZCk/ZC5jYXRjaChoPT57dGhyb3cgbC5ydW5PdXRzaWRlQW5ndWxhcigoKT0+Yy5oYW5kbGVFcnJvcihoKSksaH0pOmR9Y2F0Y2goZCl7dGhyb3cgbC5ydW5PdXRzaWRlQW5ndWxhcigoKT0+Yy5oYW5kbGVFcnJv''@;'; put 'put ''cihkKSksZH19KHYsaCwoKT0+e2NvbnN0IE09Zi5pbmplY3Rvci5nZXQoYlUpO3JldHVybiBNLnJ1bkluaXRpYWxpemVycygpLE0uZG9uZVByb21pc2UudGhlbigoKT0+KGZ1bmN0aW9uIGNyZShjKXsic3RyaW5nIj09dHlwZW9mIGMmJihscmU9Yy50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL18v''@;'; put 'put ''ZywiLSIpKX0oZi5pbmplY3Rvci5nZXQoT2YsTmIpfHxOYiksdGhpcy5fbW9kdWxlRG9Cb290c3RyYXAoZiksZikpfSl9KX1ib290c3RyYXBNb2R1bGUoYSxkPVtdKXtjb25zdCBoPUhpZSh7fSxkKTtyZXR1cm4gZnVuY3Rpb24gTmJlKGMsbCxhKXtjb25zdCBkPW5ldyBUYihhKTtyZXR1cm4g''@;'; put 'put ''UHJvbWlzZS5yZXNvbHZlKGQpfSgwLDAsYSkudGhlbihmPT50aGlzLmJvb3RzdHJhcE1vZHVsZUZhY3RvcnkoZixoKSl9X21vZHVsZURvQm9vdHN0cmFwKGEpe2NvbnN0IGQ9YS5pbmplY3Rvci5nZXQoRzQpO2lmKGEuX2Jvb3RzdHJhcENvbXBvbmVudHMubGVuZ3RoPjApYS5fYm9vdHN0cmFw''@;'; put 'put ''Q29tcG9uZW50cy5mb3JFYWNoKGg9PmQuYm9vdHN0cmFwKGgpKTtlbHNle2lmKCFhLmluc3RhbmNlLm5nRG9Cb290c3RyYXApdGhyb3cgbmV3IGVyKC00MDMsITEpO2EuaW5zdGFuY2UubmdEb0Jvb3RzdHJhcChkKX10aGlzLl9tb2R1bGVzLnB1c2goYSl9b25EZXN0cm95KGEpe3RoaXMuX2Rl''@;'; put 'put ''c3Ryb3lMaXN0ZW5lcnMucHVzaChhKX1nZXQgaW5qZWN0b3IoKXtyZXR1cm4gdGhpcy5faW5qZWN0b3J9ZGVzdHJveSgpe2lmKHRoaXMuX2Rlc3Ryb3llZCl0aHJvdyBuZXcgZXIoNDA0LCExKTt0aGlzLl9tb2R1bGVzLnNsaWNlKCkuZm9yRWFjaChkPT5kLmRlc3Ryb3koKSksdGhpcy5fZGVz''@;'; put 'put ''dHJveUxpc3RlbmVycy5mb3JFYWNoKGQ9PmQoKSk7Y29uc3QgYT10aGlzLl9pbmplY3Rvci5nZXQod1UsbnVsbCk7YSYmKGEuZm9yRWFjaChkPT5kKCkpLGEuY2xlYXIoKSksdGhpcy5fZGVzdHJveWVkPSEwfWdldCBkZXN0cm95ZWQoKXtyZXR1cm4gdGhpcy5fZGVzdHJveWVkfXN0YXRpY3t0''@;'; put 'put ''aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKE1yKERzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJwbGF0Zm9ybSJ9KX19cmV0dXJuIGN9KSgpLHE1PW51bGw7Y29uc3QgVWllPW5l''@;'; put 'put ''dyBTdCgiIik7ZnVuY3Rpb24gWmllKGMsbCxhPVtdKXtjb25zdCBkPWBQbGF0Zm9ybTogJHtsfWAsaD1uZXcgU3QoZCk7cmV0dXJuKGY9W10pPT57bGV0IHY9Q1UoKTtpZighdnx8di5pbmplY3Rvci5nZXQoVWllLCExKSl7Y29uc3QgTT1bLi4uYSwuLi5mLHtwcm92aWRlOmgsdXNlVmFsdWU6''@;'; put 'put ''ITB9XTtjP2MoTSk6ZnVuY3Rpb24gWWJlKGMpe2lmKHE1JiYhcTUuZ2V0KFVpZSwhMSkpdGhyb3cgbmV3IGVyKDQwMCwhMSk7KGZ1bmN0aW9uIFBpZSgpeyFmdW5jdGlvbiBSZShjKXtEZT1jfSgoKT0+e3Rocm93IG5ldyBlcig2MDAsITEpfSl9KSgpLHE1PWM7Y29uc3QgbD1jLmdldCh6aWUp''@;'; put 'put ''OyhmdW5jdGlvbiBZaWUoYyl7Yy5nZXQoVGssbnVsbCk/LmZvckVhY2goYT0+YSgpKX0pKGMpfShmdW5jdGlvbiBXaWUoYz1bXSxsKXtyZXR1cm4gRHMuY3JlYXRlKHtuYW1lOmwscHJvdmlkZXJzOlt7cHJvdmlkZTpPNix1c2VWYWx1ZToicGxhdGZvcm0ifSx7cHJvdmlkZTp3VSx1c2VWYWx1''@;'; put 'put ''ZTpuZXcgU2V0KFsoKT0+cTU9bnVsbF0pfSwuLi5jXX0pfShNLGQpKX1yZXR1cm4gZnVuY3Rpb24gR2JlKGMpe2NvbnN0IGw9Q1UoKTtpZighbCl0aHJvdyBuZXcgZXIoNDAxLCExKTtyZXR1cm4gbH0oKX19ZnVuY3Rpb24gQ1UoKXtyZXR1cm4gcTU/LmdldCh6aWUpPz9udWxsfWxldCB4cz0o''@;'; put 'put ''KCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLl9fTkdfRUxFTUVOVF9JRF9fPUtiZX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIEtiZShjKXtyZXR1cm4gZnVuY3Rpb24gcWJlKGMsbCxhKXtpZihfZihjKSYmIWEpe2NvbnN0IGQ9TzEoYy5pbmRleCxsKTtyZXR1cm4gbmV3IGI4KGQsZCl9cmV0dXJu''@;'; put 'put ''IDQ3JmMudHlwZT9uZXcgYjgobFtqbF0sbCk6bnVsbH0obGwoKSx1aSgpLCEoMTYmfmMpKX1jbGFzcyBYaWV7Y29uc3RydWN0b3IoKXt9c3VwcG9ydHMobCl7cmV0dXJuIEFiKGwpfWNyZWF0ZShsKXtyZXR1cm4gbmV3IHR5ZShsKX19Y29uc3QgZXllPShjLGwpPT5sO2NsYXNzIHR5ZXtjb25z''@;'; put 'put ''dHJ1Y3RvcihsKXt0aGlzLmxlbmd0aD0wLHRoaXMuX2xpbmtlZFJlY29yZHM9bnVsbCx0aGlzLl91bmxpbmtlZFJlY29yZHM9bnVsbCx0aGlzLl9wcmV2aW91c0l0SGVhZD1udWxsLHRoaXMuX2l0SGVhZD1udWxsLHRoaXMuX2l0VGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9bnVsbCx0''@;'; put 'put ''aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdGhpcy5fbW92ZXNIZWFkPW51bGwsdGhpcy5fbW92ZXNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPW51bGwsdGhpcy5fcmVtb3ZhbHNUYWlsPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZD1udWxsLHRoaXMuX2lkZW50aXR5Q2hhbmdl''@;'; put 'put ''c1RhaWw9bnVsbCx0aGlzLl90cmFja0J5Rm49bHx8ZXllfWZvckVhY2hJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX2l0SGVhZDtudWxsIT09YTthPWEuX25leHQpbChhKX1mb3JFYWNoT3BlcmF0aW9uKGwpe2xldCBhPXRoaXMuX2l0SGVhZCxkPXRoaXMuX3JlbW92YWxzSGVhZCxoPTAsZj1u''@;'; put 'put ''dWxsO2Zvcig7YXx8ZDspe2NvbnN0IHY9IWR8fGEmJmEuY3VycmVudEluZGV4PFFpZShkLGgsZik/YTpkLE09UWllKHYsaCxmKSxEPXYuY3VycmVudEluZGV4O2lmKHY9PT1kKWgtLSxkPWQuX25leHRSZW1vdmVkO2Vsc2UgaWYoYT1hLl9uZXh0LG51bGw9PXYucHJldmlvdXNJbmRleCloKys7''@;'; put 'put ''ZWxzZXtmfHwoZj1bXSk7Y29uc3QgWj1NLWgsbmU9RC1oO2lmKFohPW5lKXtmb3IobGV0IGJlPTA7YmU8WjtiZSsrKXtjb25zdCBFZT1iZTxmLmxlbmd0aD9mW2JlXTpmW2JlXT0wLEJlPUVlK2JlO25lPD1CZSYmQmU8WiYmKGZbYmVdPUVlKzEpfWZbdi5wcmV2aW91c0luZGV4XT1uZS1afX1N''@;'; put 'put ''IT09RCYmbCh2LE0sRCl9fWZvckVhY2hQcmV2aW91c0l0ZW0obCl7bGV0IGE7Zm9yKGE9dGhpcy5fcHJldmlvdXNJdEhlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0UHJldmlvdXMpbChhKX1mb3JFYWNoQWRkZWRJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PWE7''@;'; put 'put ''YT1hLl9uZXh0QWRkZWQpbChhKX1mb3JFYWNoTW92ZWRJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX21vdmVzSGVhZDtudWxsIT09YTthPWEuX25leHRNb3ZlZClsKGEpfWZvckVhY2hSZW1vdmVkSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9yZW1vdmFsc0hlYWQ7bnVsbCE9PWE7YT1hLl9u''@;'; put 'put ''ZXh0UmVtb3ZlZClsKGEpfWZvckVhY2hJZGVudGl0eUNoYW5nZShsKXtsZXQgYTtmb3IoYT10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkO251bGwhPT1hO2E9YS5fbmV4dElkZW50aXR5Q2hhbmdlKWwoYSl9ZGlmZihsKXtpZihudWxsPT1sJiYobD1bXSksIUFiKGwpKXRocm93IG5ldyBlcig5''@;'; put 'put ''MDAsITEpO3JldHVybiB0aGlzLmNoZWNrKGwpP3RoaXM6bnVsbH1vbkRlc3Ryb3koKXt9Y2hlY2sobCl7dGhpcy5fcmVzZXQoKTtsZXQgaCxmLHYsYT10aGlzLl9pdEhlYWQsZD0hMTtpZihBcnJheS5pc0FycmF5KGwpKXt0aGlzLmxlbmd0aD1sLmxlbmd0aDtmb3IobGV0IE09MDtNPHRoaXMu''@;'; put 'put ''bGVuZ3RoO00rKylmPWxbTV0sdj10aGlzLl90cmFja0J5Rm4oTSxmKSxudWxsIT09YSYmT2JqZWN0LmlzKGEudHJhY2tCeUlkLHYpPyhkJiYoYT10aGlzLl92ZXJpZnlSZWluc2VydGlvbihhLGYsdixNKSksT2JqZWN0LmlzKGEuaXRlbSxmKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UoYSxm''@;'; put 'put ''KSk6KGE9dGhpcy5fbWlzbWF0Y2goYSxmLHYsTSksZD0hMCksYT1hLl9uZXh0fWVsc2UgaD0wLGZ1bmN0aW9uIFV6KGMsbCl7aWYoQXJyYXkuaXNBcnJheShjKSlmb3IobGV0IGE9MDthPGMubGVuZ3RoO2ErKylsKGNbYV0pO2Vsc2V7Y29uc3QgYT1jW1N5bWJvbC5pdGVyYXRvcl0oKTtsZXQg''@;'; put 'put ''ZDtmb3IoOyEoZD1hLm5leHQoKSkuZG9uZTspbChkLnZhbHVlKX19KGwsTT0+e3Y9dGhpcy5fdHJhY2tCeUZuKGgsTSksbnVsbCE9PWEmJk9iamVjdC5pcyhhLnRyYWNrQnlJZCx2KT8oZCYmKGE9dGhpcy5fdmVyaWZ5UmVpbnNlcnRpb24oYSxNLHYsaCkpLE9iamVjdC5pcyhhLml0ZW0sTSl8''@;'; put 'put ''fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKGEsTSkpOihhPXRoaXMuX21pc21hdGNoKGEsTSx2LGgpLGQ9ITApLGE9YS5fbmV4dCxoKyt9KSx0aGlzLmxlbmd0aD1oO3JldHVybiB0aGlzLl90cnVuY2F0ZShhKSx0aGlzLmNvbGxlY3Rpb249bCx0aGlzLmlzRGlydHl9Z2V0IGlzRGlydHkoKXty''@;'; put 'put ''ZXR1cm4gbnVsbCE9PXRoaXMuX2FkZGl0aW9uc0hlYWR8fG51bGwhPT10aGlzLl9tb3Zlc0hlYWR8fG51bGwhPT10aGlzLl9yZW1vdmFsc0hlYWR8fG51bGwhPT10aGlzLl9pZGVudGl0eUNoYW5nZXNIZWFkfV9yZXNldCgpe2lmKHRoaXMuaXNEaXJ0eSl7bGV0IGw7Zm9yKGw9dGhpcy5fcHJl''@;'; put 'put ''dmlvdXNJdEhlYWQ9dGhpcy5faXRIZWFkO251bGwhPT1sO2w9bC5fbmV4dClsLl9uZXh0UHJldmlvdXM9bC5fbmV4dDtmb3IobD10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPT1sO2w9bC5fbmV4dEFkZGVkKWwucHJldmlvdXNJbmRleD1sLmN1cnJlbnRJbmRleDtmb3IodGhpcy5fYWRkaXRp''@;'; put 'put ''b25zSGVhZD10aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsbD10aGlzLl9tb3Zlc0hlYWQ7bnVsbCE9PWw7bD1sLl9uZXh0TW92ZWQpbC5wcmV2aW91c0luZGV4PWwuY3VycmVudEluZGV4O3RoaXMuX21vdmVzSGVhZD10aGlzLl9tb3Zlc1RhaWw9bnVsbCx0aGlzLl9yZW1vdmFsc0hlYWQ9dGhp''@;'; put 'put ''cy5fcmVtb3ZhbHNUYWlsPW51bGwsdGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZD10aGlzLl9pZGVudGl0eUNoYW5nZXNUYWlsPW51bGx9fV9taXNtYXRjaChsLGEsZCxoKXtsZXQgZjtyZXR1cm4gbnVsbD09PWw/Zj10aGlzLl9pdFRhaWw6KGY9bC5fcHJldix0aGlzLl9yZW1vdmUobCkpLG51''@;'; put 'put ''bGwhPT0obD1udWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRzLmdldChkLG51bGwpKT8oT2JqZWN0LmlzKGwuaXRlbSxhKXx8dGhpcy5fYWRkSWRlbnRpdHlDaGFuZ2UobCxhKSx0aGlzLl9yZWluc2VydEFmdGVyKGwsZixoKSk6bnVsbCE9PShs''@;'; put 'put ''PW51bGw9PT10aGlzLl9saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fbGlua2VkUmVjb3Jkcy5nZXQoZCxoKSk/KE9iamVjdC5pcyhsLml0ZW0sYSl8fHRoaXMuX2FkZElkZW50aXR5Q2hhbmdlKGwsYSksdGhpcy5fbW92ZUFmdGVyKGwsZixoKSk6bD10aGlzLl9hZGRBZnRlcihuZXcgbnllKGEs''@;'; put 'put ''ZCksZixoKSxsfV92ZXJpZnlSZWluc2VydGlvbihsLGEsZCxoKXtsZXQgZj1udWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzP251bGw6dGhpcy5fdW5saW5rZWRSZWNvcmRzLmdldChkLG51bGwpO3JldHVybiBudWxsIT09Zj9sPXRoaXMuX3JlaW5zZXJ0QWZ0ZXIoZixsLl9wcmV2LGgpOmwu''@;'; put 'put ''Y3VycmVudEluZGV4IT1oJiYobC5jdXJyZW50SW5kZXg9aCx0aGlzLl9hZGRUb01vdmVzKGwsaCkpLGx9X3RydW5jYXRlKGwpe2Zvcig7bnVsbCE9PWw7KXtjb25zdCBhPWwuX25leHQ7dGhpcy5fYWRkVG9SZW1vdmFscyh0aGlzLl91bmxpbmsobCkpLGw9YX1udWxsIT09dGhpcy5fdW5saW5r''@;'; put 'put ''ZWRSZWNvcmRzJiZ0aGlzLl91bmxpbmtlZFJlY29yZHMuY2xlYXIoKSxudWxsIT09dGhpcy5fYWRkaXRpb25zVGFpbCYmKHRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1udWxsKSxudWxsIT09dGhpcy5fbW92ZXNUYWlsJiYodGhpcy5fbW92ZXNUYWlsLl9uZXh0TW92ZWQ9bnVsbCks''@;'; put 'put ''bnVsbCE9PXRoaXMuX2l0VGFpbCYmKHRoaXMuX2l0VGFpbC5fbmV4dD1udWxsKSxudWxsIT09dGhpcy5fcmVtb3ZhbHNUYWlsJiYodGhpcy5fcmVtb3ZhbHNUYWlsLl9uZXh0UmVtb3ZlZD1udWxsKSxudWxsIT09dGhpcy5faWRlbnRpdHlDaGFuZ2VzVGFpbCYmKHRoaXMuX2lkZW50aXR5Q2hh''@;'; put 'put ''bmdlc1RhaWwuX25leHRJZGVudGl0eUNoYW5nZT1udWxsKX1fcmVpbnNlcnRBZnRlcihsLGEsZCl7bnVsbCE9PXRoaXMuX3VubGlua2VkUmVjb3JkcyYmdGhpcy5fdW5saW5rZWRSZWNvcmRzLnJlbW92ZShsKTtjb25zdCBoPWwuX3ByZXZSZW1vdmVkLGY9bC5fbmV4dFJlbW92ZWQ7cmV0dXJu''@;'; put 'put ''IG51bGw9PT1oP3RoaXMuX3JlbW92YWxzSGVhZD1mOmguX25leHRSZW1vdmVkPWYsbnVsbD09PWY/dGhpcy5fcmVtb3ZhbHNUYWlsPWg6Zi5fcHJldlJlbW92ZWQ9aCx0aGlzLl9pbnNlcnRBZnRlcihsLGEsZCksdGhpcy5fYWRkVG9Nb3ZlcyhsLGQpLGx9X21vdmVBZnRlcihsLGEsZCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuX3VubGluayhsKSx0aGlzLl9pbnNlcnRBZnRlcihsLGEsZCksdGhpcy5fYWRkVG9Nb3ZlcyhsLGQpLGx9X2FkZEFmdGVyKGwsYSxkKXtyZXR1cm4gdGhpcy5faW5zZXJ0QWZ0ZXIobCxhLGQpLHRoaXMuX2FkZGl0aW9uc1RhaWw9bnVsbD09PXRoaXMuX2FkZGl0aW9uc1RhaWw/''@;'; put 'put ''dGhpcy5fYWRkaXRpb25zSGVhZD1sOnRoaXMuX2FkZGl0aW9uc1RhaWwuX25leHRBZGRlZD1sLGx9X2luc2VydEFmdGVyKGwsYSxkKXtjb25zdCBoPW51bGw9PT1hP3RoaXMuX2l0SGVhZDphLl9uZXh0O3JldHVybiBsLl9uZXh0PWgsbC5fcHJldj1hLG51bGw9PT1oP3RoaXMuX2l0VGFpbD1s''@;'; put 'put ''OmguX3ByZXY9bCxudWxsPT09YT90aGlzLl9pdEhlYWQ9bDphLl9uZXh0PWwsbnVsbD09PXRoaXMuX2xpbmtlZFJlY29yZHMmJih0aGlzLl9saW5rZWRSZWNvcmRzPW5ldyBKaWUpLHRoaXMuX2xpbmtlZFJlY29yZHMucHV0KGwpLGwuY3VycmVudEluZGV4PWQsbH1fcmVtb3ZlKGwpe3JldHVy''@;'; put 'put ''biB0aGlzLl9hZGRUb1JlbW92YWxzKHRoaXMuX3VubGluayhsKSl9X3VubGluayhsKXtudWxsIT09dGhpcy5fbGlua2VkUmVjb3JkcyYmdGhpcy5fbGlua2VkUmVjb3Jkcy5yZW1vdmUobCk7Y29uc3QgYT1sLl9wcmV2LGQ9bC5fbmV4dDtyZXR1cm4gbnVsbD09PWE/dGhpcy5faXRIZWFkPWQ6''@;'; put 'put ''YS5fbmV4dD1kLG51bGw9PT1kP3RoaXMuX2l0VGFpbD1hOmQuX3ByZXY9YSxsfV9hZGRUb01vdmVzKGwsYSl7cmV0dXJuIGwucHJldmlvdXNJbmRleD09PWF8fCh0aGlzLl9tb3Zlc1RhaWw9bnVsbD09PXRoaXMuX21vdmVzVGFpbD90aGlzLl9tb3Zlc0hlYWQ9bDp0aGlzLl9tb3Zlc1RhaWwu''@;'; put 'put ''X25leHRNb3ZlZD1sKSxsfV9hZGRUb1JlbW92YWxzKGwpe3JldHVybiBudWxsPT09dGhpcy5fdW5saW5rZWRSZWNvcmRzJiYodGhpcy5fdW5saW5rZWRSZWNvcmRzPW5ldyBKaWUpLHRoaXMuX3VubGlua2VkUmVjb3Jkcy5wdXQobCksbC5jdXJyZW50SW5kZXg9bnVsbCxsLl9uZXh0UmVtb3Zl''@;'; put 'put ''ZD1udWxsLG51bGw9PT10aGlzLl9yZW1vdmFsc1RhaWw/KHRoaXMuX3JlbW92YWxzVGFpbD10aGlzLl9yZW1vdmFsc0hlYWQ9bCxsLl9wcmV2UmVtb3ZlZD1udWxsKToobC5fcHJldlJlbW92ZWQ9dGhpcy5fcmVtb3ZhbHNUYWlsLHRoaXMuX3JlbW92YWxzVGFpbD10aGlzLl9yZW1vdmFsc1Rh''@;'; put 'put ''aWwuX25leHRSZW1vdmVkPWwpLGx9X2FkZElkZW50aXR5Q2hhbmdlKGwsYSl7cmV0dXJuIGwuaXRlbT1hLHRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw9bnVsbD09PXRoaXMuX2lkZW50aXR5Q2hhbmdlc1RhaWw/dGhpcy5faWRlbnRpdHlDaGFuZ2VzSGVhZD1sOnRoaXMuX2lkZW50aXR5Q2hh''@;'; put 'put ''bmdlc1RhaWwuX25leHRJZGVudGl0eUNoYW5nZT1sLGx9fWNsYXNzIG55ZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuaXRlbT1sLHRoaXMudHJhY2tCeUlkPWEsdGhpcy5jdXJyZW50SW5kZXg9bnVsbCx0aGlzLnByZXZpb3VzSW5kZXg9bnVsbCx0aGlzLl9uZXh0UHJldmlvdXM9bnVsbCx0aGlz''@;'; put 'put ''Ll9wcmV2PW51bGwsdGhpcy5fbmV4dD1udWxsLHRoaXMuX3ByZXZEdXA9bnVsbCx0aGlzLl9uZXh0RHVwPW51bGwsdGhpcy5fcHJldlJlbW92ZWQ9bnVsbCx0aGlzLl9uZXh0UmVtb3ZlZD1udWxsLHRoaXMuX25leHRBZGRlZD1udWxsLHRoaXMuX25leHRNb3ZlZD1udWxsLHRoaXMuX25leHRJ''@;'; put 'put ''ZGVudGl0eUNoYW5nZT1udWxsfX1jbGFzcyByeWV7Y29uc3RydWN0b3IoKXt0aGlzLl9oZWFkPW51bGwsdGhpcy5fdGFpbD1udWxsfWFkZChsKXtudWxsPT09dGhpcy5faGVhZD8odGhpcy5faGVhZD10aGlzLl90YWlsPWwsbC5fbmV4dER1cD1udWxsLGwuX3ByZXZEdXA9bnVsbCk6KHRoaXMu''@;'; put 'put ''X3RhaWwuX25leHREdXA9bCxsLl9wcmV2RHVwPXRoaXMuX3RhaWwsbC5fbmV4dER1cD1udWxsLHRoaXMuX3RhaWw9bCl9Z2V0KGwsYSl7bGV0IGQ7Zm9yKGQ9dGhpcy5faGVhZDtudWxsIT09ZDtkPWQuX25leHREdXApaWYoKG51bGw9PT1hfHxhPD1kLmN1cnJlbnRJbmRleCkmJk9iamVjdC5p''@;'; put 'put ''cyhkLnRyYWNrQnlJZCxsKSlyZXR1cm4gZDtyZXR1cm4gbnVsbH1yZW1vdmUobCl7Y29uc3QgYT1sLl9wcmV2RHVwLGQ9bC5fbmV4dER1cDtyZXR1cm4gbnVsbD09PWE/dGhpcy5faGVhZD1kOmEuX25leHREdXA9ZCxudWxsPT09ZD90aGlzLl90YWlsPWE6ZC5fcHJldkR1cD1hLG51bGw9PT10''@;'; put 'put ''aGlzLl9oZWFkfX1jbGFzcyBKaWV7Y29uc3RydWN0b3IoKXt0aGlzLm1hcD1uZXcgTWFwfXB1dChsKXtjb25zdCBhPWwudHJhY2tCeUlkO2xldCBkPXRoaXMubWFwLmdldChhKTtkfHwoZD1uZXcgcnllLHRoaXMubWFwLnNldChhLGQpKSxkLmFkZChsKX1nZXQobCxhKXtjb25zdCBoPXRoaXMu''@;'; put 'put ''bWFwLmdldChsKTtyZXR1cm4gaD9oLmdldChsLGEpOm51bGx9cmVtb3ZlKGwpe2NvbnN0IGE9bC50cmFja0J5SWQ7cmV0dXJuIHRoaXMubWFwLmdldChhKS5yZW1vdmUobCkmJnRoaXMubWFwLmRlbGV0ZShhKSxsfWdldCBpc0VtcHR5KCl7cmV0dXJuIDA9PT10aGlzLm1hcC5zaXplfWNsZWFy''@;'; put 'put ''KCl7dGhpcy5tYXAuY2xlYXIoKX19ZnVuY3Rpb24gUWllKGMsbCxhKXtjb25zdCBkPWMucHJldmlvdXNJbmRleDtpZihudWxsPT09ZClyZXR1cm4gZDtsZXQgaD0wO3JldHVybiBhJiZkPGEubGVuZ3RoJiYoaD1hW2RdKSxkK2wraH1jbGFzcyBlb2V7Y29uc3RydWN0b3IoKXt9c3VwcG9ydHMo''@;'; put 'put ''bCl7cmV0dXJuIGwgaW5zdGFuY2VvZiBNYXB8fFhTKGwpfWNyZWF0ZSgpe3JldHVybiBuZXcgaXllfX1jbGFzcyBpeWV7Y29uc3RydWN0b3IoKXt0aGlzLl9yZWNvcmRzPW5ldyBNYXAsdGhpcy5fbWFwSGVhZD1udWxsLHRoaXMuX2FwcGVuZEFmdGVyPW51bGwsdGhpcy5fcHJldmlvdXNNYXBI''@;'; put 'put ''ZWFkPW51bGwsdGhpcy5fY2hhbmdlc0hlYWQ9bnVsbCx0aGlzLl9jaGFuZ2VzVGFpbD1udWxsLHRoaXMuX2FkZGl0aW9uc0hlYWQ9bnVsbCx0aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPW51bGwsdGhpcy5fcmVtb3ZhbHNUYWlsPW51bGx9Z2V0IGlzRGlydHko''@;'; put 'put ''KXtyZXR1cm4gbnVsbCE9PXRoaXMuX2FkZGl0aW9uc0hlYWR8fG51bGwhPT10aGlzLl9jaGFuZ2VzSGVhZHx8bnVsbCE9PXRoaXMuX3JlbW92YWxzSGVhZH1mb3JFYWNoSXRlbShsKXtsZXQgYTtmb3IoYT10aGlzLl9tYXBIZWFkO251bGwhPT1hO2E9YS5fbmV4dClsKGEpfWZvckVhY2hQcmV2''@;'; put 'put ''aW91c0l0ZW0obCl7bGV0IGE7Zm9yKGE9dGhpcy5fcHJldmlvdXNNYXBIZWFkO251bGwhPT1hO2E9YS5fbmV4dFByZXZpb3VzKWwoYSl9Zm9yRWFjaENoYW5nZWRJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX2NoYW5nZXNIZWFkO251bGwhPT1hO2E9YS5fbmV4dENoYW5nZWQpbChhKX1mb3JF''@;'; put 'put ''YWNoQWRkZWRJdGVtKGwpe2xldCBhO2ZvcihhPXRoaXMuX2FkZGl0aW9uc0hlYWQ7bnVsbCE9PWE7YT1hLl9uZXh0QWRkZWQpbChhKX1mb3JFYWNoUmVtb3ZlZEl0ZW0obCl7bGV0IGE7Zm9yKGE9dGhpcy5fcmVtb3ZhbHNIZWFkO251bGwhPT1hO2E9YS5fbmV4dFJlbW92ZWQpbChhKX1kaWZm''@;'; put 'put ''KGwpe2lmKGwpe2lmKCEobCBpbnN0YW5jZW9mIE1hcHx8WFMobCkpKXRocm93IG5ldyBlcig5MDAsITEpfWVsc2UgbD1uZXcgTWFwO3JldHVybiB0aGlzLmNoZWNrKGwpP3RoaXM6bnVsbH1vbkRlc3Ryb3koKXt9Y2hlY2sobCl7dGhpcy5fcmVzZXQoKTtsZXQgYT10aGlzLl9tYXBIZWFkO2lm''@;'; put 'put ''KHRoaXMuX2FwcGVuZEFmdGVyPW51bGwsdGhpcy5fZm9yRWFjaChsLChkLGgpPT57aWYoYSYmYS5rZXk9PT1oKXRoaXMuX21heWJlQWRkVG9DaGFuZ2VzKGEsZCksdGhpcy5fYXBwZW5kQWZ0ZXI9YSxhPWEuX25leHQ7ZWxzZXtjb25zdCBmPXRoaXMuX2dldE9yQ3JlYXRlUmVjb3JkRm9yS2V5''@;'; put 'put ''KGgsZCk7YT10aGlzLl9pbnNlcnRCZWZvcmVPckFwcGVuZChhLGYpfX0pLGEpe2EuX3ByZXYmJihhLl9wcmV2Ll9uZXh0PW51bGwpLHRoaXMuX3JlbW92YWxzSGVhZD1hO2ZvcihsZXQgZD1hO251bGwhPT1kO2Q9ZC5fbmV4dFJlbW92ZWQpZD09PXRoaXMuX21hcEhlYWQmJih0aGlzLl9tYXBI''@;'; put 'put ''ZWFkPW51bGwpLHRoaXMuX3JlY29yZHMuZGVsZXRlKGQua2V5KSxkLl9uZXh0UmVtb3ZlZD1kLl9uZXh0LGQucHJldmlvdXNWYWx1ZT1kLmN1cnJlbnRWYWx1ZSxkLmN1cnJlbnRWYWx1ZT1udWxsLGQuX3ByZXY9bnVsbCxkLl9uZXh0PW51bGx9cmV0dXJuIHRoaXMuX2NoYW5nZXNUYWlsJiYo''@;'; put 'put ''dGhpcy5fY2hhbmdlc1RhaWwuX25leHRDaGFuZ2VkPW51bGwpLHRoaXMuX2FkZGl0aW9uc1RhaWwmJih0aGlzLl9hZGRpdGlvbnNUYWlsLl9uZXh0QWRkZWQ9bnVsbCksdGhpcy5pc0RpcnR5fV9pbnNlcnRCZWZvcmVPckFwcGVuZChsLGEpe2lmKGwpe2NvbnN0IGQ9bC5fcHJldjtyZXR1cm4g''@;'; put 'put ''YS5fbmV4dD1sLGEuX3ByZXY9ZCxsLl9wcmV2PWEsZCYmKGQuX25leHQ9YSksbD09PXRoaXMuX21hcEhlYWQmJih0aGlzLl9tYXBIZWFkPWEpLHRoaXMuX2FwcGVuZEFmdGVyPWwsbH1yZXR1cm4gdGhpcy5fYXBwZW5kQWZ0ZXI/KHRoaXMuX2FwcGVuZEFmdGVyLl9uZXh0PWEsYS5fcHJldj10''@;'; put 'put ''aGlzLl9hcHBlbmRBZnRlcik6dGhpcy5fbWFwSGVhZD1hLHRoaXMuX2FwcGVuZEFmdGVyPWEsbnVsbH1fZ2V0T3JDcmVhdGVSZWNvcmRGb3JLZXkobCxhKXtpZih0aGlzLl9yZWNvcmRzLmhhcyhsKSl7Y29uc3QgaD10aGlzLl9yZWNvcmRzLmdldChsKTt0aGlzLl9tYXliZUFkZFRvQ2hhbmdl''@;'; put 'put ''cyhoLGEpO2NvbnN0IGY9aC5fcHJldix2PWguX25leHQ7cmV0dXJuIGYmJihmLl9uZXh0PXYpLHYmJih2Ll9wcmV2PWYpLGguX25leHQ9bnVsbCxoLl9wcmV2PW51bGwsaH1jb25zdCBkPW5ldyBveWUobCk7cmV0dXJuIHRoaXMuX3JlY29yZHMuc2V0KGwsZCksZC5jdXJyZW50VmFsdWU9YSx0''@;'; put 'put ''aGlzLl9hZGRUb0FkZGl0aW9ucyhkKSxkfV9yZXNldCgpe2lmKHRoaXMuaXNEaXJ0eSl7bGV0IGw7Zm9yKHRoaXMuX3ByZXZpb3VzTWFwSGVhZD10aGlzLl9tYXBIZWFkLGw9dGhpcy5fcHJldmlvdXNNYXBIZWFkO251bGwhPT1sO2w9bC5fbmV4dClsLl9uZXh0UHJldmlvdXM9bC5fbmV4dDtm''@;'; put 'put ''b3IobD10aGlzLl9jaGFuZ2VzSGVhZDtudWxsIT09bDtsPWwuX25leHRDaGFuZ2VkKWwucHJldmlvdXNWYWx1ZT1sLmN1cnJlbnRWYWx1ZTtmb3IobD10aGlzLl9hZGRpdGlvbnNIZWFkO251bGwhPWw7bD1sLl9uZXh0QWRkZWQpbC5wcmV2aW91c1ZhbHVlPWwuY3VycmVudFZhbHVlO3RoaXMu''@;'; put 'put ''X2NoYW5nZXNIZWFkPXRoaXMuX2NoYW5nZXNUYWlsPW51bGwsdGhpcy5fYWRkaXRpb25zSGVhZD10aGlzLl9hZGRpdGlvbnNUYWlsPW51bGwsdGhpcy5fcmVtb3ZhbHNIZWFkPW51bGx9fV9tYXliZUFkZFRvQ2hhbmdlcyhsLGEpe09iamVjdC5pcyhhLGwuY3VycmVudFZhbHVlKXx8KGwucHJl''@;'; put 'put ''dmlvdXNWYWx1ZT1sLmN1cnJlbnRWYWx1ZSxsLmN1cnJlbnRWYWx1ZT1hLHRoaXMuX2FkZFRvQ2hhbmdlcyhsKSl9X2FkZFRvQWRkaXRpb25zKGwpe251bGw9PT10aGlzLl9hZGRpdGlvbnNIZWFkP3RoaXMuX2FkZGl0aW9uc0hlYWQ9dGhpcy5fYWRkaXRpb25zVGFpbD1sOih0aGlzLl9hZGRp''@;'; put 'put ''dGlvbnNUYWlsLl9uZXh0QWRkZWQ9bCx0aGlzLl9hZGRpdGlvbnNUYWlsPWwpfV9hZGRUb0NoYW5nZXMobCl7bnVsbD09PXRoaXMuX2NoYW5nZXNIZWFkP3RoaXMuX2NoYW5nZXNIZWFkPXRoaXMuX2NoYW5nZXNUYWlsPWw6KHRoaXMuX2NoYW5nZXNUYWlsLl9uZXh0Q2hhbmdlZD1sLHRoaXMu''@;'; put 'put ''X2NoYW5nZXNUYWlsPWwpfV9mb3JFYWNoKGwsYSl7bCBpbnN0YW5jZW9mIE1hcD9sLmZvckVhY2goYSk6T2JqZWN0LmtleXMobCkuZm9yRWFjaChkPT5hKGxbZF0sZCkpfX1jbGFzcyBveWV7Y29uc3RydWN0b3IobCl7dGhpcy5rZXk9bCx0aGlzLnByZXZpb3VzVmFsdWU9bnVsbCx0aGlzLmN1''@;'; put 'put ''cnJlbnRWYWx1ZT1udWxsLHRoaXMuX25leHRQcmV2aW91cz1udWxsLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wcmV2PW51bGwsdGhpcy5fbmV4dEFkZGVkPW51bGwsdGhpcy5fbmV4dFJlbW92ZWQ9bnVsbCx0aGlzLl9uZXh0Q2hhbmdlZD1udWxsfX1mdW5jdGlvbiB0b2UoKXtyZXR1cm4gbmV3''@;'; put 'put ''IFg1KFtuZXcgWGllXSl9bGV0IFg1PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46Yyxwcm92aWRlZEluOiJyb290IixmYWN0b3J5OnRvZX0pfWNvbnN0cnVjdG9yKGEpe3RoaXMuZmFjdG9yaWVzPWF9c3RhdGljIGNyZWF0ZShhLGQpe2lmKG51bGwhPWQp''@;'; put 'put ''e2NvbnN0IGg9ZC5mYWN0b3JpZXMuc2xpY2UoKTthPWEuY29uY2F0KGgpfXJldHVybiBuZXcgYyhhKX1zdGF0aWMgZXh0ZW5kKGEpe3JldHVybntwcm92aWRlOmMsdXNlRmFjdG9yeTpkPT5jLmNyZWF0ZShhLGR8fHRvZSgpKSxkZXBzOltbYyxuZXcgbGQsbmV3IEkxXV19fWZpbmQoYSl7Y29u''@;'; put 'put ''c3QgZD10aGlzLmZhY3Rvcmllcy5maW5kKGg9Pmguc3VwcG9ydHMoYSkpO2lmKG51bGwhPWQpcmV0dXJuIGQ7dGhyb3cgbmV3IGVyKDkwMSwhMSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBub2UoKXtyZXR1cm4gbmV3IF9NKFtuZXcgZW9lXSl9bGV0IF9NPSgoKT0+e2NsYXNzIGN7c3RhdGlj''@;'; put 'put ''e3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46Yyxwcm92aWRlZEluOiJyb290IixmYWN0b3J5Om5vZX0pfWNvbnN0cnVjdG9yKGEpe3RoaXMuZmFjdG9yaWVzPWF9c3RhdGljIGNyZWF0ZShhLGQpe2lmKGQpe2NvbnN0IGg9ZC5mYWN0b3JpZXMuc2xpY2UoKTthPWEuY29uY2F0KGgpfXJldHVy''@;'; put 'put ''biBuZXcgYyhhKX1zdGF0aWMgZXh0ZW5kKGEpe3JldHVybntwcm92aWRlOmMsdXNlRmFjdG9yeTpkPT5jLmNyZWF0ZShhLGR8fG5vZSgpKSxkZXBzOltbYyxuZXcgbGQsbmV3IEkxXV19fWZpbmQoYSl7Y29uc3QgZD10aGlzLmZhY3Rvcmllcy5maW5kKGg9Pmguc3VwcG9ydHMoYSkpO2lmKGQp''@;'; put 'put ''cmV0dXJuIGQ7dGhyb3cgbmV3IGVyKDkwMSwhMSl9fXJldHVybiBjfSkoKTtjb25zdCBseWU9WmllKG51bGwsImNvcmUiLFtdKTtsZXQgY3llPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKE1y''@;'; put 'put ''KEc0KSl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHt9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIGwxKGMpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGM/YzpudWxsIT1jJiYiZmFsc2UiIT09Y31mdW5jdGlvbiBNb2UoYyl7''@;'; put 'put ''Y29uc3QgbD1fZShudWxsKTt0cnl7cmV0dXJuIGMoKX1maW5hbGx5e19lKGwpfX1sZXQgRW9lPW51bGw7ZnVuY3Rpb24gSjUoKXtyZXR1cm4gRW9lfWNsYXNzIFl5ZXt9Y29uc3QgdnM9bmV3IFN0KCIiKTtsZXQga1U9KCgpPT57Y2xhc3MgY3toaXN0b3J5R28oYSl7dGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCIiKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OigpPT5oaSgkeWUpLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pfX1yZXR1cm4gY30pKCk7Y29uc3QgR3llPW5ldyBT''@;'; put 'put ''dCgiIik7bGV0ICR5ZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMga1V7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuX2RvYz1oaSh2cyksdGhpcy5fbG9jYXRpb249d2luZG93LmxvY2F0aW9uLHRoaXMuX2hpc3Rvcnk9d2luZG93Lmhpc3Rvcnl9Z2V0QmFzZUhyZWZGcm9tRE9NKCl7cmV0dXJu''@;'; put 'put ''IEo1KCkuZ2V0QmFzZUhyZWYodGhpcy5fZG9jKX1vblBvcFN0YXRlKGEpe2NvbnN0IGQ9SjUoKS5nZXRHbG9iYWxFdmVudFRhcmdldCh0aGlzLl9kb2MsIndpbmRvdyIpO3JldHVybiBkLmFkZEV2ZW50TGlzdGVuZXIoInBvcHN0YXRlIixhLCExKSwoKT0+ZC5yZW1vdmVFdmVudExpc3RlbmVy''@;'; put 'put ''KCJwb3BzdGF0ZSIsYSl9b25IYXNoQ2hhbmdlKGEpe2NvbnN0IGQ9SjUoKS5nZXRHbG9iYWxFdmVudFRhcmdldCh0aGlzLl9kb2MsIndpbmRvdyIpO3JldHVybiBkLmFkZEV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLGEsITEpLCgpPT5kLnJlbW92ZUV2ZW50TGlzdGVuZXIoImhhc2hjaGFu''@;'; put 'put ''Z2UiLGEpfWdldCBocmVmKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uLmhyZWZ9Z2V0IHByb3RvY29sKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uLnByb3RvY29sfWdldCBob3N0bmFtZSgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5ob3N0bmFtZX1nZXQgcG9ydCgpe3JldHVybiB0aGlzLl9sb2Nh''@;'; put 'put ''dGlvbi5wb3J0fWdldCBwYXRobmFtZSgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5wYXRobmFtZX1nZXQgc2VhcmNoKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uLnNlYXJjaH1nZXQgaGFzaCgpe3JldHVybiB0aGlzLl9sb2NhdGlvbi5oYXNofXNldCBwYXRobmFtZShhKXt0aGlzLl9sb2NhdGlv''@;'; put 'put ''bi5wYXRobmFtZT1hfXB1c2hTdGF0ZShhLGQsaCl7dGhpcy5faGlzdG9yeS5wdXNoU3RhdGUoYSxkLGgpfXJlcGxhY2VTdGF0ZShhLGQsaCl7dGhpcy5faGlzdG9yeS5yZXBsYWNlU3RhdGUoYSxkLGgpfWZvcndhcmQoKXt0aGlzLl9oaXN0b3J5LmZvcndhcmQoKX1iYWNrKCl7dGhpcy5faGlz''@;'; put 'put ''dG9yeS5iYWNrKCl9aGlzdG9yeUdvKGE9MCl7dGhpcy5faGlzdG9yeS5nbyhhKX1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9oaXN0b3J5LnN0YXRlfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0''@;'; put 'put ''b2tlbjpjLGZhY3Rvcnk6KCk9Pm5ldyBjLHByb3ZpZGVkSW46InBsYXRmb3JtIn0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gRFUoYyxsKXtpZigwPT1jLmxlbmd0aClyZXR1cm4gbDtpZigwPT1sLmxlbmd0aClyZXR1cm4gYztsZXQgYT0wO3JldHVybiBjLmVuZHNXaXRoKCIvIikmJmErKyxs''@;'; put 'put ''LnN0YXJ0c1dpdGgoIi8iKSYmYSsrLDI9PWE/YytsLnN1YnN0cmluZygxKToxPT1hP2MrbDpjKyIvIitsfWZ1bmN0aW9uIFRvZShjKXtjb25zdCBsPWMubWF0Y2goLyN8XD98JC8pLGE9bCYmbC5pbmRleHx8Yy5sZW5ndGg7cmV0dXJuIGMuc2xpY2UoMCxhLSgiLyI9PT1jW2EtMV0/MTowKSkr''@;'; put 'put ''Yy5zbGljZShhKX1mdW5jdGlvbiAkNChjKXtyZXR1cm4gYyYmIj8iIT09Y1swXT8iPyIrYzpjfWxldCB6OD0oKCk9PntjbGFzcyBje2hpc3RvcnlHbyhhKXt0aHJvdyBuZXcgRXJyb3IoIiIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0''@;'; put 'put ''aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6KCk9PmhpKGtvZSkscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IEFvZT1uZXcgU3QoIiIpO2xldCBrb2U9KCgpPT57Y2xhc3MgYyBleHRlbmRzIHo4e2NvbnN0cnVjdG9yKGEsZCl7c3VwZXIoKSx0''@;'; put 'put ''aGlzLl9wbGF0Zm9ybUxvY2F0aW9uPWEsdGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnM9W10sdGhpcy5fYmFzZUhyZWY9ZD8/dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5nZXRCYXNlSHJlZkZyb21ET00oKT8/aGkodnMpLmxvY2F0aW9uPy5vcmlnaW4/PyIifW5nT25EZXN0cm95KCl7Zm9yKDt0aGlz''@;'; put 'put ''Ll9yZW1vdmVMaXN0ZW5lckZucy5sZW5ndGg7KXRoaXMuX3JlbW92ZUxpc3RlbmVyRm5zLnBvcCgpKCl9b25Qb3BTdGF0ZShhKXt0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wdXNoKHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25Qb3BTdGF0ZShhKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9u''@;'; put 'put ''SGFzaENoYW5nZShhKSl9Z2V0QmFzZUhyZWYoKXtyZXR1cm4gdGhpcy5fYmFzZUhyZWZ9cHJlcGFyZUV4dGVybmFsVXJsKGEpe3JldHVybiBEVSh0aGlzLl9iYXNlSHJlZixhKX1wYXRoKGE9ITEpe2NvbnN0IGQ9dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5wYXRobmFtZSskNCh0aGlzLl9wbGF0''@;'; put 'put ''Zm9ybUxvY2F0aW9uLnNlYXJjaCksaD10aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmhhc2g7cmV0dXJuIGgmJmE/YCR7ZH0ke2h9YDpkfXB1c2hTdGF0ZShhLGQsaCxmKXtjb25zdCB2PXRoaXMucHJlcGFyZUV4dGVybmFsVXJsKGgrJDQoZikpO3RoaXMuX3BsYXRmb3JtTG9jYXRpb24ucHVzaFN0''@;'; put 'put ''YXRlKGEsZCx2KX1yZXBsYWNlU3RhdGUoYSxkLGgsZil7Y29uc3Qgdj10aGlzLnByZXBhcmVFeHRlcm5hbFVybChoKyQ0KGYpKTt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLnJlcGxhY2VTdGF0ZShhLGQsdil9Zm9yd2FyZCgpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uZm9yd2FyZCgpfWJhY2so''@;'; put 'put ''KXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmJhY2soKX1nZXRTdGF0ZSgpe3JldHVybiB0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLmdldFN0YXRlKCl9aGlzdG9yeUdvKGE9MCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5oaXN0b3J5R28/LihhKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24oZCl7cmV0dXJuIG5ldyhkfHxjKShNcihrVSksTXIoQW9lLDgpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKSxLeWU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIHo4e2NvbnN0''@;'; put 'put ''cnVjdG9yKGEsZCl7c3VwZXIoKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uPWEsdGhpcy5fYmFzZUhyZWY9IiIsdGhpcy5fcmVtb3ZlTGlzdGVuZXJGbnM9W10sbnVsbCE9ZCYmKHRoaXMuX2Jhc2VIcmVmPWQpfW5nT25EZXN0cm95KCl7Zm9yKDt0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5sZW5n''@;'; put 'put ''dGg7KXRoaXMuX3JlbW92ZUxpc3RlbmVyRm5zLnBvcCgpKCl9b25Qb3BTdGF0ZShhKXt0aGlzLl9yZW1vdmVMaXN0ZW5lckZucy5wdXNoKHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ub25Qb3BTdGF0ZShhKSx0aGlzLl9wbGF0Zm9ybUxvY2F0aW9uLm9uSGFzaENoYW5nZShhKSl9Z2V0QmFzZUhy''@;'; put 'put ''ZWYoKXtyZXR1cm4gdGhpcy5fYmFzZUhyZWZ9cGF0aChhPSExKXtjb25zdCBkPXRoaXMuX3BsYXRmb3JtTG9jYXRpb24uaGFzaD8/IiMiO3JldHVybiBkLmxlbmd0aD4wP2Quc3Vic3RyaW5nKDEpOmR9cHJlcGFyZUV4dGVybmFsVXJsKGEpe2NvbnN0IGQ9RFUodGhpcy5fYmFzZUhyZWYsYSk7''@;'; put 'put ''cmV0dXJuIGQubGVuZ3RoPjA/IiMiK2Q6ZH1wdXNoU3RhdGUoYSxkLGgsZil7bGV0IHY9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoaCskNChmKSk7MD09di5sZW5ndGgmJih2PXRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWUpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucHVzaFN0YXRl''@;'; put 'put ''KGEsZCx2KX1yZXBsYWNlU3RhdGUoYSxkLGgsZil7bGV0IHY9dGhpcy5wcmVwYXJlRXh0ZXJuYWxVcmwoaCskNChmKSk7MD09di5sZW5ndGgmJih2PXRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucGF0aG5hbWUpLHRoaXMuX3BsYXRmb3JtTG9jYXRpb24ucmVwbGFjZVN0YXRlKGEsZCx2KX1mb3J3''@;'; put 'put ''YXJkKCl7dGhpcy5fcGxhdGZvcm1Mb2NhdGlvbi5mb3J3YXJkKCl9YmFjaygpe3RoaXMuX3BsYXRmb3JtTG9jYXRpb24uYmFjaygpfWdldFN0YXRlKCl7cmV0dXJuIHRoaXMuX3BsYXRmb3JtTG9jYXRpb24uZ2V0U3RhdGUoKX1oaXN0b3J5R28oYT0wKXt0aGlzLl9wbGF0Zm9ybUxvY2F0aW9u''@;'; put 'put ''Lmhpc3RvcnlHbz8uKGEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKE1yKGtVKSxNcihBb2UsOCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpLHVoPSgoKT0+''@;'; put 'put ''e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fc3ViamVjdD1uZXcgcXIsdGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzPVtdLHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj1udWxsLHRoaXMuX2xvY2F0aW9uU3RyYXRlZ3k9YTtjb25zdCBkPXRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuZ2V0''@;'; put 'put ''QmFzZUhyZWYoKTt0aGlzLl9iYXNlUGF0aD1mdW5jdGlvbiBKeWUoYyl7aWYobmV3IFJlZ0V4cCgiXihodHRwcz86KT8vLyIpLnRlc3QoYykpe2NvbnN0WyxhXT1jLnNwbGl0KC9cL1wvW15cL10rLyk7cmV0dXJuIGF9cmV0dXJuIGN9KFRvZShEb2UoZCkpKSx0aGlzLl9sb2NhdGlvblN0cmF0''@;'; put 'put ''ZWd5Lm9uUG9wU3RhdGUoaD0+e3RoaXMuX3N1YmplY3QuZW1pdCh7dXJsOnRoaXMucGF0aCghMCkscG9wOiEwLHN0YXRlOmguc3RhdGUsdHlwZTpoLnR5cGV9KX0pfW5nT25EZXN0cm95KCl7dGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpLHRoaXMuX3VybENoYW5n''@;'; put 'put ''ZUxpc3RlbmVycz1bXX1wYXRoKGE9ITEpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSh0aGlzLl9sb2NhdGlvblN0cmF0ZWd5LnBhdGgoYSkpfWdldFN0YXRlKCl7cmV0dXJuIHRoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuZ2V0U3RhdGUoKX1pc0N1cnJlbnRQYXRoRXF1YWxUbyhhLGQ9IiIpe3JldHVy''@;'; put 'put ''biB0aGlzLnBhdGgoKT09dGhpcy5ub3JtYWxpemUoYSskNChkKSl9bm9ybWFsaXplKGEpe3JldHVybiBjLnN0cmlwVHJhaWxpbmdTbGFzaChmdW5jdGlvbiBYeWUoYyxsKXtpZighY3x8IWwuc3RhcnRzV2l0aChjKSlyZXR1cm4gbDtjb25zdCBhPWwuc3Vic3RyaW5nKGMubGVuZ3RoKTtyZXR1''@;'; put 'put ''cm4iIj09PWF8fFsiLyIsIjsiLCI/IiwiIyJdLmluY2x1ZGVzKGFbMF0pP2E6bH0odGhpcy5fYmFzZVBhdGgsRG9lKGEpKSl9cHJlcGFyZUV4dGVybmFsVXJsKGEpe3JldHVybiBhJiYiLyIhPT1hWzBdJiYoYT0iLyIrYSksdGhpcy5fbG9jYXRpb25TdHJhdGVneS5wcmVwYXJlRXh0ZXJuYWxV''@;'; put 'put ''cmwoYSl9Z28oYSxkPSIiLGg9bnVsbCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5wdXNoU3RhdGUoaCwiIixhLGQpLHRoaXMuX25vdGlmeVVybENoYW5nZUxpc3RlbmVycyh0aGlzLnByZXBhcmVFeHRlcm5hbFVybChhKyQ0KGQpKSxoKX1yZXBsYWNlU3RhdGUoYSxkPSIiLGg9bnVsbCl7dGhp''@;'; put 'put ''cy5fbG9jYXRpb25TdHJhdGVneS5yZXBsYWNlU3RhdGUoaCwiIixhLGQpLHRoaXMuX25vdGlmeVVybENoYW5nZUxpc3RlbmVycyh0aGlzLnByZXBhcmVFeHRlcm5hbFVybChhKyQ0KGQpKSxoKX1mb3J3YXJkKCl7dGhpcy5fbG9jYXRpb25TdHJhdGVneS5mb3J3YXJkKCl9YmFjaygpe3RoaXMu''@;'; put 'put ''X2xvY2F0aW9uU3RyYXRlZ3kuYmFjaygpfWhpc3RvcnlHbyhhPTApe3RoaXMuX2xvY2F0aW9uU3RyYXRlZ3kuaGlzdG9yeUdvPy4oYSl9b25VcmxDaGFuZ2UoYSl7cmV0dXJuIHRoaXMuX3VybENoYW5nZUxpc3RlbmVycy5wdXNoKGEpLHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj8/PXRo''@;'; put 'put ''aXMuc3Vic2NyaWJlKGQ9Pnt0aGlzLl9ub3RpZnlVcmxDaGFuZ2VMaXN0ZW5lcnMoZC51cmwsZC5zdGF0ZSl9KSwoKT0+e2NvbnN0IGQ9dGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLmluZGV4T2YoYSk7dGhpcy5fdXJsQ2hhbmdlTGlzdGVuZXJzLnNwbGljZShkLDEpLDA9PT10aGlzLl91cmxD''@;'; put 'put ''aGFuZ2VMaXN0ZW5lcnMubGVuZ3RoJiYodGhpcy5fdXJsQ2hhbmdlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpLHRoaXMuX3VybENoYW5nZVN1YnNjcmlwdGlvbj1udWxsKX19X25vdGlmeVVybENoYW5nZUxpc3RlbmVycyhhPSIiLGQpe3RoaXMuX3VybENoYW5nZUxpc3RlbmVycy5mb3JF''@;'; put 'put ''YWNoKGg9PmgoYSxkKSl9c3Vic2NyaWJlKGEsZCxoKXtyZXR1cm4gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUoe25leHQ6YSxlcnJvcjpkLGNvbXBsZXRlOmh9KX1zdGF0aWN7dGhpcy5ub3JtYWxpemVRdWVyeVBhcmFtcz0kNH1zdGF0aWN7dGhpcy5qb2luV2l0aFNsYXNoPURVfXN0YXRpY3t0''@;'; put 'put ''aGlzLnN0cmlwVHJhaWxpbmdTbGFzaD1Ub2V9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoTXIoejgpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OigpPT5mdW5jdGlvbiBxeWUoKXtyZXR1cm4gbmV3IHVoKE1y''@;'; put 'put ''KHo4KSl9KCkscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIERvZShjKXtyZXR1cm4gYy5yZXBsYWNlKC9cL2luZGV4Lmh0bWwkLywiIil9dmFyIHUwPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuRm9ybWF0PTBdPSJGb3JtYXQiLGNbYy5TdGFuZGFsb25lPTFdPSJT''@;'; put 'put ''dGFuZGFsb25lIixjfSh1MHx8e30pLGNsPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTmFycm93PTBdPSJOYXJyb3ciLGNbYy5BYmJyZXZpYXRlZD0xXT0iQWJicmV2aWF0ZWQiLGNbYy5XaWRlPTJdPSJXaWRlIixjW2MuU2hvcnQ9M109IlNob3J0IixjfShjbHx8e30pLENkPWZ1bmN0aW9uKGMp''@;'; put 'put ''e3JldHVybiBjW2MuU2hvcnQ9MF09IlNob3J0IixjW2MuTWVkaXVtPTFdPSJNZWRpdW0iLGNbYy5Mb25nPTJdPSJMb25nIixjW2MuRnVsbD0zXT0iRnVsbCIsY30oQ2R8fHt9KTtmdW5jdGlvbiBJVShjLGwsYSl7Y29uc3QgZD1zMShjKSxmPXYyKFtkW0psLkRheXNGb3JtYXRdLGRbSmwuRGF5''@;'; put 'put ''c1N0YW5kYWxvbmVdXSxsKTtyZXR1cm4gdjIoZixhKX1mdW5jdGlvbiBSVShjLGwsYSl7Y29uc3QgZD1zMShjKSxmPXYyKFtkW0psLk1vbnRoc0Zvcm1hdF0sZFtKbC5Nb250aHNTdGFuZGFsb25lXV0sbCk7cmV0dXJuIHYyKGYsYSl9ZnVuY3Rpb24gdjIoYyxsKXtmb3IobGV0IGE9bDthPi0x''@;'; put 'put ''O2EtLSlpZih0eXBlb2YgY1thXTwidSIpcmV0dXJuIGNbYV07dGhyb3cgbmV3IEVycm9yKCJMb2NhbGUgZGF0YSBBUEk6IGxvY2FsZSBkYXRhIHVuZGVmaW5lZCIpfWZ1bmN0aW9uIFZvZShjLGwpe2w9ZW5jb2RlVVJJQ29tcG9uZW50KGwpO2Zvcihjb25zdCBhIG9mIGMuc3BsaXQoIjsiKSl7''@;'; put 'put ''Y29uc3QgZD1hLmluZGV4T2YoIj0iKSxbaCxmXT0tMT09ZD9bYSwiIl06W2Euc2xpY2UoMCxkKSxhLnNsaWNlKGQrMSldO2lmKGgudHJpbSgpPT09bClyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGYpfXJldHVybiBudWxsfWNvbnN0IHpVPS9ccysvLEJvZT1bXTtsZXQgd3U9KCgpPT57Y2xh''@;'; put 'put ''c3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuX25nRWw9YSx0aGlzLl9yZW5kZXJlcj1kLHRoaXMuaW5pdGlhbENsYXNzZXM9Qm9lLHRoaXMuc3RhdGVNYXA9bmV3IE1hcH1zZXQga2xhc3MoYSl7dGhpcy5pbml0aWFsQ2xhc3Nlcz1udWxsIT1hP2EudHJpbSgpLnNwbGl0KHpVKTpCb2V9c2V0''@;'; put 'put ''IG5nQ2xhc3MoYSl7dGhpcy5yYXdDbGFzcz0ic3RyaW5nIj09dHlwZW9mIGE/YS50cmltKCkuc3BsaXQoelUpOmF9bmdEb0NoZWNrKCl7Zm9yKGNvbnN0IGQgb2YgdGhpcy5pbml0aWFsQ2xhc3Nlcyl0aGlzLl91cGRhdGVTdGF0ZShkLCEwKTtjb25zdCBhPXRoaXMucmF3Q2xhc3M7aWYoQXJy''@;'; put 'put ''YXkuaXNBcnJheShhKXx8YSBpbnN0YW5jZW9mIFNldClmb3IoY29uc3QgZCBvZiBhKXRoaXMuX3VwZGF0ZVN0YXRlKGQsITApO2Vsc2UgaWYobnVsbCE9YSlmb3IoY29uc3QgZCBvZiBPYmplY3Qua2V5cyhhKSl0aGlzLl91cGRhdGVTdGF0ZShkLCEhYVtkXSk7dGhpcy5fYXBwbHlTdGF0ZURp''@;'; put 'put ''ZmYoKX1fdXBkYXRlU3RhdGUoYSxkKXtjb25zdCBoPXRoaXMuc3RhdGVNYXAuZ2V0KGEpO3ZvaWQgMCE9PWg/KGguZW5hYmxlZCE9PWQmJihoLmNoYW5nZWQ9ITAsaC5lbmFibGVkPWQpLGgudG91Y2hlZD0hMCk6dGhpcy5zdGF0ZU1hcC5zZXQoYSx7ZW5hYmxlZDpkLGNoYW5nZWQ6ITAsdG91''@;'; put 'put ''Y2hlZDohMH0pfV9hcHBseVN0YXRlRGlmZigpe2Zvcihjb25zdCBhIG9mIHRoaXMuc3RhdGVNYXApe2NvbnN0IGQ9YVswXSxoPWFbMV07aC5jaGFuZ2VkPyh0aGlzLl90b2dnbGVDbGFzcyhkLGguZW5hYmxlZCksaC5jaGFuZ2VkPSExKTpoLnRvdWNoZWR8fChoLmVuYWJsZWQmJnRoaXMuX3Rv''@;'; put 'put ''Z2dsZUNsYXNzKGQsITEpLHRoaXMuc3RhdGVNYXAuZGVsZXRlKGQpKSxoLnRvdWNoZWQ9ITF9fV90b2dnbGVDbGFzcyhhLGQpeyhhPWEudHJpbSgpKS5sZW5ndGg+MCYmYS5zcGxpdCh6VSkuZm9yRWFjaChoPT57ZD90aGlzLl9yZW5kZXJlci5hZGRDbGFzcyh0aGlzLl9uZ0VsLm5hdGl2ZUVs''@;'; put 'put ''ZW1lbnQsaCk6dGhpcy5fcmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5fbmdFbC5uYXRpdmVFbGVtZW50LGgpfSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoZW8pLEdlKEVhKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpj''@;'; put 'put ''LHNlbGVjdG9yczpbWyIiLCJuZ0NsYXNzIiwiIl1dLGlucHV0czp7a2xhc3M6W1puLk5vbmUsImNsYXNzIiwia2xhc3MiXSxuZ0NsYXNzOiJuZ0NsYXNzIn0sc3RhbmRhbG9uZTohMH0pfX1yZXR1cm4gY30pKCk7Y2xhc3MgSF9le2NvbnN0cnVjdG9yKGwsYSxkLGgpe3RoaXMuJGltcGxpY2l0''@;'; put 'put ''PWwsdGhpcy5uZ0Zvck9mPWEsdGhpcy5pbmRleD1kLHRoaXMuY291bnQ9aH1nZXQgZmlyc3QoKXtyZXR1cm4gMD09PXRoaXMuaW5kZXh9Z2V0IGxhc3QoKXtyZXR1cm4gdGhpcy5pbmRleD09PXRoaXMuY291bnQtMX1nZXQgZXZlbigpe3JldHVybiB0aGlzLmluZGV4JTI9PTB9Z2V0IG9kZCgp''@;'; put 'put ''e3JldHVybiF0aGlzLmV2ZW59fWxldCBzcz0oKCk9PntjbGFzcyBje3NldCBuZ0Zvck9mKGEpe3RoaXMuX25nRm9yT2Y9YSx0aGlzLl9uZ0Zvck9mRGlydHk9ITB9c2V0IG5nRm9yVHJhY2tCeShhKXt0aGlzLl90cmFja0J5Rm49YX1nZXQgbmdGb3JUcmFja0J5KCl7cmV0dXJuIHRoaXMuX3Ry''@;'; put 'put ''YWNrQnlGbn1jb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fdmlld0NvbnRhaW5lcj1hLHRoaXMuX3RlbXBsYXRlPWQsdGhpcy5fZGlmZmVycz1oLHRoaXMuX25nRm9yT2Y9bnVsbCx0aGlzLl9uZ0Zvck9mRGlydHk9ITAsdGhpcy5fZGlmZmVyPW51bGx9c2V0IG5nRm9yVGVtcGxhdGUoYSl7YSYm''@;'; put 'put ''KHRoaXMuX3RlbXBsYXRlPWEpfW5nRG9DaGVjaygpe2lmKHRoaXMuX25nRm9yT2ZEaXJ0eSl7dGhpcy5fbmdGb3JPZkRpcnR5PSExO2NvbnN0IGE9dGhpcy5fbmdGb3JPZjshdGhpcy5fZGlmZmVyJiZhJiYodGhpcy5fZGlmZmVyPXRoaXMuX2RpZmZlcnMuZmluZChhKS5jcmVhdGUodGhpcy5u''@;'; put 'put ''Z0ZvclRyYWNrQnkpKX1pZih0aGlzLl9kaWZmZXIpe2NvbnN0IGE9dGhpcy5fZGlmZmVyLmRpZmYodGhpcy5fbmdGb3JPZik7YSYmdGhpcy5fYXBwbHlDaGFuZ2VzKGEpfX1fYXBwbHlDaGFuZ2VzKGEpe2NvbnN0IGQ9dGhpcy5fdmlld0NvbnRhaW5lcjthLmZvckVhY2hPcGVyYXRpb24oKGgs''@;'; put 'put ''Zix2KT0+e2lmKG51bGw9PWgucHJldmlvdXNJbmRleClkLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl90ZW1wbGF0ZSxuZXcgSF9lKGguaXRlbSx0aGlzLl9uZ0Zvck9mLC0xLC0xKSxudWxsPT09dj92b2lkIDA6dik7ZWxzZSBpZihudWxsPT12KWQucmVtb3ZlKG51bGw9PT1mP3ZvaWQgMDpm''@;'; put 'put ''KTtlbHNlIGlmKG51bGwhPT1mKXtjb25zdCBNPWQuZ2V0KGYpO2QubW92ZShNLHYpLHpvZShNLGgpfX0pO2ZvcihsZXQgaD0wLGY9ZC5sZW5ndGg7aDxmO2grKyl7Y29uc3QgTT1kLmdldChoKS5jb250ZXh0O00uaW5kZXg9aCxNLmNvdW50PWYsTS5uZ0Zvck9mPXRoaXMuX25nRm9yT2Z9YS5m''@;'; put 'put ''b3JFYWNoSWRlbnRpdHlDaGFuZ2UoaD0+e3pvZShkLmdldChoLmN1cnJlbnRJbmRleCksaCl9KX1zdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZChhLGQpe3JldHVybiEwfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKERhKSxHZSh3bCks''@;'; put 'put ''R2UoWDUpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nRm9yIiwiIiwibmdGb3JPZiIsIiJdXSxpbnB1dHM6e25nRm9yT2Y6Im5nRm9yT2YiLG5nRm9yVHJhY2tCeToibmdGb3JUcmFja0J5IixuZ0ZvclRlbXBsYXRlOiJuZ0ZvclRlbXBsYXRl''@;'; put 'put ''In0sc3RhbmRhbG9uZTohMH0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gem9lKGMsbCl7Yy5jb250ZXh0LiRpbXBsaWNpdD1sLml0ZW19bGV0IHlvPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl92aWV3Q29udGFpbmVyPWEsdGhpcy5fY29udGV4dD1uZXcgTl9lLHRoaXMu''@;'; put 'put ''X3RoZW5UZW1wbGF0ZVJlZj1udWxsLHRoaXMuX2Vsc2VUZW1wbGF0ZVJlZj1udWxsLHRoaXMuX3RoZW5WaWV3UmVmPW51bGwsdGhpcy5fZWxzZVZpZXdSZWY9bnVsbCx0aGlzLl90aGVuVGVtcGxhdGVSZWY9ZH1zZXQgbmdJZihhKXt0aGlzLl9jb250ZXh0LiRpbXBsaWNpdD10aGlzLl9jb250''@;'; put 'put ''ZXh0Lm5nSWY9YSx0aGlzLl91cGRhdGVWaWV3KCl9c2V0IG5nSWZUaGVuKGEpe1VvZSgibmdJZlRoZW4iLGEpLHRoaXMuX3RoZW5UZW1wbGF0ZVJlZj1hLHRoaXMuX3RoZW5WaWV3UmVmPW51bGwsdGhpcy5fdXBkYXRlVmlldygpfXNldCBuZ0lmRWxzZShhKXtVb2UoIm5nSWZFbHNlIixhKSx0''@;'; put 'put ''aGlzLl9lbHNlVGVtcGxhdGVSZWY9YSx0aGlzLl9lbHNlVmlld1JlZj1udWxsLHRoaXMuX3VwZGF0ZVZpZXcoKX1fdXBkYXRlVmlldygpe3RoaXMuX2NvbnRleHQuJGltcGxpY2l0P3RoaXMuX3RoZW5WaWV3UmVmfHwodGhpcy5fdmlld0NvbnRhaW5lci5jbGVhcigpLHRoaXMuX2Vsc2VWaWV3''@;'; put 'put ''UmVmPW51bGwsdGhpcy5fdGhlblRlbXBsYXRlUmVmJiYodGhpcy5fdGhlblZpZXdSZWY9dGhpcy5fdmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5fdGhlblRlbXBsYXRlUmVmLHRoaXMuX2NvbnRleHQpKSk6dGhpcy5fZWxzZVZpZXdSZWZ8fCh0aGlzLl92aWV3Q29udGFp''@;'; put 'put ''bmVyLmNsZWFyKCksdGhpcy5fdGhlblZpZXdSZWY9bnVsbCx0aGlzLl9lbHNlVGVtcGxhdGVSZWYmJih0aGlzLl9lbHNlVmlld1JlZj10aGlzLl92aWV3Q29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLl9lbHNlVGVtcGxhdGVSZWYsdGhpcy5fY29udGV4dCkpKX1zdGF0aWMgbmdU''@;'; put 'put ''ZW1wbGF0ZUNvbnRleHRHdWFyZChhLGQpe3JldHVybiEwfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKERhKSxHZSh3bCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdJZiIsIiJdXSxpbnB1''@;'; put 'put ''dHM6e25nSWY6Im5nSWYiLG5nSWZUaGVuOiJuZ0lmVGhlbiIsbmdJZkVsc2U6Im5nSWZFbHNlIn0sc3RhbmRhbG9uZTohMH0pfX1yZXR1cm4gY30pKCk7Y2xhc3MgTl9le2NvbnN0cnVjdG9yKCl7dGhpcy4kaW1wbGljaXQ9bnVsbCx0aGlzLm5nSWY9bnVsbH19ZnVuY3Rpb24gVW9lKGMsbCl7''@;'; put 'put ''aWYobCYmIWwuY3JlYXRlRW1iZWRkZWRWaWV3KXRocm93IG5ldyBFcnJvcihgJHtjfSBtdXN0IGJlIGEgVGVtcGxhdGVSZWYsIGJ1dCByZWNlaXZlZCAnJHtGcihsKX0nLmApfWNsYXNzIFVVe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5fdmlld0NvbnRhaW5lclJlZj1sLHRoaXMuX3RlbXBsYXRl''@;'; put 'put ''UmVmPWEsdGhpcy5fY3JlYXRlZD0hMX1jcmVhdGUoKXt0aGlzLl9jcmVhdGVkPSEwLHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuX3RlbXBsYXRlUmVmKX1kZXN0cm95KCl7dGhpcy5fY3JlYXRlZD0hMSx0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNsZWFy''@;'; put 'put ''KCl9ZW5mb3JjZVN0YXRlKGwpe2wmJiF0aGlzLl9jcmVhdGVkP3RoaXMuY3JlYXRlKCk6IWwmJnRoaXMuX2NyZWF0ZWQmJnRoaXMuZGVzdHJveSgpfX1sZXQgYjI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2RlZmF1bHRWaWV3cz1bXSx0aGlzLl9kZWZhdWx0VXNlZD0hMSx0''@;'; put 'put ''aGlzLl9jYXNlQ291bnQ9MCx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9MCx0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPSExfXNldCBuZ1N3aXRjaChhKXt0aGlzLl9uZ1N3aXRjaD1hLDA9PT10aGlzLl9jYXNlQ291bnQmJnRoaXMuX3VwZGF0ZURlZmF1bHRDYXNlcyghMCl9X2FkZENhc2UoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fY2FzZUNvdW50Kyt9X2FkZERlZmF1bHQoYSl7dGhpcy5fZGVmYXVsdFZpZXdzLnB1c2goYSl9X21hdGNoQ2FzZShhKXtjb25zdCBkPWE9PT10aGlzLl9uZ1N3aXRjaDtyZXR1cm4gdGhpcy5fbGFzdENhc2VzTWF0Y2hlZHx8PWQsdGhpcy5fbGFzdENhc2VDaGVja0luZGV4''@;'; put 'put ''KyssdGhpcy5fbGFzdENhc2VDaGVja0luZGV4PT09dGhpcy5fY2FzZUNvdW50JiYodGhpcy5fdXBkYXRlRGVmYXVsdENhc2VzKCF0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkKSx0aGlzLl9sYXN0Q2FzZUNoZWNrSW5kZXg9MCx0aGlzLl9sYXN0Q2FzZXNNYXRjaGVkPSExKSxkfV91cGRhdGVEZWZh''@;'; put 'put ''dWx0Q2FzZXMoYSl7aWYodGhpcy5fZGVmYXVsdFZpZXdzLmxlbmd0aD4wJiZhIT09dGhpcy5fZGVmYXVsdFVzZWQpe3RoaXMuX2RlZmF1bHRVc2VkPWE7Zm9yKGNvbnN0IGQgb2YgdGhpcy5fZGVmYXVsdFZpZXdzKWQuZW5mb3JjZVN0YXRlKGEpfX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVu''@;'; put 'put ''Y3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nU3dpdGNoIiwiIl1dLGlucHV0czp7bmdTd2l0Y2g6Im5nU3dpdGNoIn0sc3RhbmRhbG9uZTohMH0pfX1yZXR1cm4gY30pKCksaXA9KCgpPT57Y2xhc3Mg''@;'; put 'put ''Y3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5uZ1N3aXRjaD1oLGguX2FkZENhc2UoKSx0aGlzLl92aWV3PW5ldyBVVShhLGQpfW5nRG9DaGVjaygpe3RoaXMuX3ZpZXcuZW5mb3JjZVN0YXRlKHRoaXMubmdTd2l0Y2guX21hdGNoQ2FzZSh0aGlzLm5nU3dpdGNoQ2FzZSkpfXN0YXRpY3t0aGlz''@;'; put 'put ''Llx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKERhKSxHZSh3bCksR2UoYjIsOSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdTd2l0Y2hDYXNlIiwiIl1dLGlucHV0czp7bmdTd2l0Y2hDYXNlOiJuZ1N3aXRjaENh''@;'; put 'put ''c2UifSxzdGFuZGFsb25lOiEwfSl9fXJldHVybiBjfSkoKSxXb2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fbmdFbD1hLHRoaXMuX2RpZmZlcnM9ZCx0aGlzLl9yZW5kZXJlcj1oLHRoaXMuX25nU3R5bGU9bnVsbCx0aGlzLl9kaWZmZXI9bnVsbH1zZXQgbmdTdHls''@;'; put 'put ''ZShhKXt0aGlzLl9uZ1N0eWxlPWEsIXRoaXMuX2RpZmZlciYmYSYmKHRoaXMuX2RpZmZlcj10aGlzLl9kaWZmZXJzLmZpbmQoYSkuY3JlYXRlKCkpfW5nRG9DaGVjaygpe2lmKHRoaXMuX2RpZmZlcil7Y29uc3QgYT10aGlzLl9kaWZmZXIuZGlmZih0aGlzLl9uZ1N0eWxlKTthJiZ0aGlzLl9h''@;'; put 'put ''cHBseUNoYW5nZXMoYSl9fV9zZXRTdHlsZShhLGQpe2NvbnN0W2gsZl09YS5zcGxpdCgiLiIpLHY9LTE9PT1oLmluZGV4T2YoIi0iKT92b2lkIDA6WjMuRGFzaENhc2U7bnVsbCE9ZD90aGlzLl9yZW5kZXJlci5zZXRTdHlsZSh0aGlzLl9uZ0VsLm5hdGl2ZUVsZW1lbnQsaCxmP2Ake2R9JHtm''@;'; put 'put ''fWA6ZCx2KTp0aGlzLl9yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLl9uZ0VsLm5hdGl2ZUVsZW1lbnQsaCx2KX1fYXBwbHlDaGFuZ2VzKGEpe2EuZm9yRWFjaFJlbW92ZWRJdGVtKGQ9PnRoaXMuX3NldFN0eWxlKGQua2V5LG51bGwpKSxhLmZvckVhY2hBZGRlZEl0ZW0oZD0+dGhpcy5fc2V0''@;'; put 'put ''U3R5bGUoZC5rZXksZC5jdXJyZW50VmFsdWUpKSxhLmZvckVhY2hDaGFuZ2VkSXRlbShkPT50aGlzLl9zZXRTdHlsZShkLmtleSxkLmN1cnJlbnRWYWx1ZSkpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKGVvKSxHZShfTSksR2UoRWEpKX19''@;'; put 'put ''c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsIm5nU3R5bGUiLCIiXV0saW5wdXRzOntuZ1N0eWxlOiJuZ1N0eWxlIn0sc3RhbmRhbG9uZTohMH0pfX1yZXR1cm4gY30pKCksTjE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl92aWV3Q29u''@;'; put 'put ''dGFpbmVyUmVmPWEsdGhpcy5fdmlld1JlZj1udWxsLHRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQ9bnVsbCx0aGlzLm5nVGVtcGxhdGVPdXRsZXQ9bnVsbCx0aGlzLm5nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcj1udWxsfW5nT25DaGFuZ2VzKGEpe2lmKHRoaXMuX3Nob3VsZFJlY3JlYXRl''@;'; put 'put ''VmlldyhhKSl7Y29uc3QgZD10aGlzLl92aWV3Q29udGFpbmVyUmVmO2lmKHRoaXMuX3ZpZXdSZWYmJmQucmVtb3ZlKGQuaW5kZXhPZih0aGlzLl92aWV3UmVmKSksIXRoaXMubmdUZW1wbGF0ZU91dGxldClyZXR1cm4gdm9pZCh0aGlzLl92aWV3UmVmPW51bGwpO2NvbnN0IGg9dGhpcy5fY3Jl''@;'; put 'put ''YXRlQ29udGV4dEZvcndhcmRQcm94eSgpO3RoaXMuX3ZpZXdSZWY9ZC5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5uZ1RlbXBsYXRlT3V0bGV0LGgse2luamVjdG9yOnRoaXMubmdUZW1wbGF0ZU91dGxldEluamVjdG9yPz92b2lkIDB9KX19X3Nob3VsZFJlY3JlYXRlVmlldyhhKXtyZXR1cm4h''@;'; put 'put ''IWEubmdUZW1wbGF0ZU91dGxldHx8ISFhLm5nVGVtcGxhdGVPdXRsZXRJbmplY3Rvcn1fY3JlYXRlQ29udGV4dEZvcndhcmRQcm94eSgpe3JldHVybiBuZXcgUHJveHkoe30se3NldDooYSxkLGgpPT4hIXRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQmJlJlZmxlY3Quc2V0KHRoaXMubmdU''@;'; put 'put ''ZW1wbGF0ZU91dGxldENvbnRleHQsZCxoKSxnZXQ6KGEsZCxoKT0+e2lmKHRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQpcmV0dXJuIFJlZmxlY3QuZ2V0KHRoaXMubmdUZW1wbGF0ZU91dGxldENvbnRleHQsZCxoKX19KX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0''@;'; put 'put ''dXJuIG5ldyhkfHxjKShHZShEYSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdUZW1wbGF0ZU91dGxldCIsIiJdXSxpbnB1dHM6e25nVGVtcGxhdGVPdXRsZXRDb250ZXh0OiJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsbmdUZW1wbGF0ZU91''@;'; put 'put ''dGxldDoibmdUZW1wbGF0ZU91dGxldCIsbmdUZW1wbGF0ZU91dGxldEluamVjdG9yOiJuZ1RlbXBsYXRlT3V0bGV0SW5qZWN0b3IifSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOlt5bF19KX19cmV0dXJuIGN9KSgpO2NsYXNzIHpfZXtjcmVhdGVTdWJzY3JpcHRpb24obCxhKXtyZXR1cm4gTW9l''@;'; put 'put ''KCgpPT5sLnN1YnNjcmliZSh7bmV4dDphLGVycm9yOmQ9Pnt0aHJvdyBkfX0pKX1kaXNwb3NlKGwpe01vZSgoKT0+bC51bnN1YnNjcmliZSgpKX19Y2xhc3MgVV9le2NyZWF0ZVN1YnNjcmlwdGlvbihsLGEpe3JldHVybiBsLnRoZW4oYSxkPT57dGhyb3cgZH0pfWRpc3Bvc2UobCl7fX1jb25z''@;'; put 'put ''dCBaX2U9bmV3IFVfZSxXX2U9bmV3IHpfZTtsZXQgeE09KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLl9sYXRlc3RWYWx1ZT1udWxsLHRoaXMubWFya0ZvckNoZWNrT25WYWx1ZVVwZGF0ZT0hMCx0aGlzLl9zdWJzY3JpcHRpb249bnVsbCx0aGlzLl9vYmo9bnVsbCx0aGlzLl9z''@;'; put 'put ''dHJhdGVneT1udWxsLHRoaXMuX3JlZj1hfW5nT25EZXN0cm95KCl7dGhpcy5fc3Vic2NyaXB0aW9uJiZ0aGlzLl9kaXNwb3NlKCksdGhpcy5fcmVmPW51bGx9dHJhbnNmb3JtKGEpe2lmKCF0aGlzLl9vYmope2lmKGEpdHJ5e3RoaXMubWFya0ZvckNoZWNrT25WYWx1ZVVwZGF0ZT0hMSx0aGlz''@;'; put 'put ''Ll9zdWJzY3JpYmUoYSl9ZmluYWxseXt0aGlzLm1hcmtGb3JDaGVja09uVmFsdWVVcGRhdGU9ITB9cmV0dXJuIHRoaXMuX2xhdGVzdFZhbHVlfXJldHVybiBhIT09dGhpcy5fb2JqPyh0aGlzLl9kaXNwb3NlKCksdGhpcy50cmFuc2Zvcm0oYSkpOnRoaXMuX2xhdGVzdFZhbHVlfV9zdWJzY3Jp''@;'; put 'put ''YmUoYSl7dGhpcy5fb2JqPWEsdGhpcy5fc3RyYXRlZ3k9dGhpcy5fc2VsZWN0U3RyYXRlZ3koYSksdGhpcy5fc3Vic2NyaXB0aW9uPXRoaXMuX3N0cmF0ZWd5LmNyZWF0ZVN1YnNjcmlwdGlvbihhLGQ9PnRoaXMuX3VwZGF0ZUxhdGVzdFZhbHVlKGEsZCkpfV9zZWxlY3RTdHJhdGVneShhKXtp''@;'; put 'put ''Zih5TShhKSlyZXR1cm4gWl9lO2lmKE9pZShhKSlyZXR1cm4gV19lO3Rocm93IGZ1bmN0aW9uIEZmKGMsbCl7cmV0dXJuIG5ldyBlcigyMTAwLCExKX0oKX1fZGlzcG9zZSgpe3RoaXMuX3N0cmF0ZWd5LmRpc3Bvc2UodGhpcy5fc3Vic2NyaXB0aW9uKSx0aGlzLl9sYXRlc3RWYWx1ZT1udWxs''@;'; put 'put ''LHRoaXMuX3N1YnNjcmlwdGlvbj1udWxsLHRoaXMuX29iaj1udWxsfV91cGRhdGVMYXRlc3RWYWx1ZShhLGQpe2E9PT10aGlzLl9vYmomJih0aGlzLl9sYXRlc3RWYWx1ZT1kLHRoaXMubWFya0ZvckNoZWNrT25WYWx1ZVVwZGF0ZSYmdGhpcy5fcmVmPy5tYXJrRm9yQ2hlY2soKSl9c3RhdGlj''@;'; put 'put ''e3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoeHMsMTYpKX19c3RhdGlje3RoaXMuXHUwMjc1cGlwZT1hbCh7bmFtZToiYXN5bmMiLHR5cGU6YyxwdXJlOiExLHN0YW5kYWxvbmU6ITB9KX19cmV0dXJuIGN9KSgpLFpVPSgoKT0+e2NsYXNzIGN7dHJhbnNm''@;'; put 'put ''b3JtKGEpe3JldHVybiBKU09OLnN0cmluZ2lmeShhLG51bGwsMil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXBpcGU9YWwoe25hbWU6Impzb24iLHR5cGU6YyxwdXJlOiExLHN0YW5kYWxvbmU6ITB9KX19cmV0''@;'; put 'put ''dXJuIGN9KSgpLGZSPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5kaWZmZXJzPWEsdGhpcy5rZXlWYWx1ZXM9W10sdGhpcy5jb21wYXJlRm49WW9lfXRyYW5zZm9ybShhLGQ9WW9lKXtpZighYXx8IShhIGluc3RhbmNlb2YgTWFwKSYmIm9iamVjdCIhPXR5cGVvZiBhKXJldHVy''@;'; put 'put ''biBudWxsO3RoaXMuZGlmZmVyPz89dGhpcy5kaWZmZXJzLmZpbmQoYSkuY3JlYXRlKCk7Y29uc3QgaD10aGlzLmRpZmZlci5kaWZmKGEpLGY9ZCE9PXRoaXMuY29tcGFyZUZuO3JldHVybiBoJiYodGhpcy5rZXlWYWx1ZXM9W10saC5mb3JFYWNoSXRlbSh2PT57dGhpcy5rZXlWYWx1ZXMucHVz''@;'; put 'put ''aChmdW5jdGlvbiByd2UoYyxsKXtyZXR1cm57a2V5OmMsdmFsdWU6bH19KHYua2V5LHYuY3VycmVudFZhbHVlKSl9KSksKGh8fGYpJiYodGhpcy5rZXlWYWx1ZXMuc29ydChkKSx0aGlzLmNvbXBhcmVGbj1kKSx0aGlzLmtleVZhbHVlc31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24o''@;'; put 'put ''ZCl7cmV0dXJuIG5ldyhkfHxjKShHZShfTSwxNikpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPWFsKHtuYW1lOiJrZXl2YWx1ZSIsdHlwZTpjLHB1cmU6ITEsc3RhbmRhbG9uZTohMH0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gWW9lKGMsbCl7Y29uc3QgYT1jLmtleSxkPWwua2V5O2lmKGE9''@;'; put 'put ''PT1kKXJldHVybiAwO2lmKHZvaWQgMD09PWEpcmV0dXJuIDE7aWYodm9pZCAwPT09ZClyZXR1cm4tMTtpZihudWxsPT09YSlyZXR1cm4gMTtpZihudWxsPT09ZClyZXR1cm4tMTtpZigic3RyaW5nIj09dHlwZW9mIGEmJiJzdHJpbmciPT10eXBlb2YgZClyZXR1cm4gYTxkPy0xOjE7aWYoIm51''@;'; put 'put ''bWJlciI9PXR5cGVvZiBhJiYibnVtYmVyIj09dHlwZW9mIGQpcmV0dXJuIGEtZDtpZigiYm9vbGVhbiI9PXR5cGVvZiBhJiYiYm9vbGVhbiI9PXR5cGVvZiBkKXJldHVybiBhPGQ/LTE6MTtjb25zdCBoPVN0cmluZyhhKSxmPVN0cmluZyhkKTtyZXR1cm4gaD09Zj8wOmg8Zj8tMToxfWxldCBM''@;'; put 'put ''bz0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7fSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBYcyhjKXtyZXR1''@;'; put 'put ''cm4iYnJvd3NlciI9PT1jfWZ1bmN0aW9uICRvZShjKXtyZXR1cm4ic2VydmVyIj09PWN9bGV0IHV3ZT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMscHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+WHMoaGkob2EpKT9uZXcgZHdlKGhpKHZzKSx3''@;'; put 'put ''aW5kb3cpOm5ldyBmd2V9KX19cmV0dXJuIGN9KSgpO2NsYXNzIGR3ZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuZG9jdW1lbnQ9bCx0aGlzLndpbmRvdz1hLHRoaXMub2Zmc2V0PSgpPT5bMCwwXX1zZXRPZmZzZXQobCl7dGhpcy5vZmZzZXQ9QXJyYXkuaXNBcnJheShsKT8oKT0+bDpsfWdldFNj''@;'; put 'put ''cm9sbFBvc2l0aW9uKCl7cmV0dXJuW3RoaXMud2luZG93LnNjcm9sbFgsdGhpcy53aW5kb3cuc2Nyb2xsWV19c2Nyb2xsVG9Qb3NpdGlvbihsKXt0aGlzLndpbmRvdy5zY3JvbGxUbyhsWzBdLGxbMV0pfXNjcm9sbFRvQW5jaG9yKGwpe2NvbnN0IGE9ZnVuY3Rpb24gaHdlKGMsbCl7Y29uc3Qg''@;'; put 'put ''YT1jLmdldEVsZW1lbnRCeUlkKGwpfHxjLmdldEVsZW1lbnRzQnlOYW1lKGwpWzBdO2lmKGEpcmV0dXJuIGE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGMuY3JlYXRlVHJlZVdhbGtlciYmYy5ib2R5JiYiZnVuY3Rpb24iPT10eXBlb2YgYy5ib2R5LmF0dGFjaFNoYWRvdyl7Y29uc3QgZD1jLmNy''@;'; put 'put ''ZWF0ZVRyZWVXYWxrZXIoYy5ib2R5LE5vZGVGaWx0ZXIuU0hPV19FTEVNRU5UKTtsZXQgaD1kLmN1cnJlbnROb2RlO2Zvcig7aDspe2NvbnN0IGY9aC5zaGFkb3dSb290O2lmKGYpe2NvbnN0IHY9Zi5nZXRFbGVtZW50QnlJZChsKXx8Zi5xdWVyeVNlbGVjdG9yKGBbbmFtZT0iJHtsfSJdYCk7''@;'; put 'put ''aWYodilyZXR1cm4gdn1oPWQubmV4dE5vZGUoKX19cmV0dXJuIG51bGx9KHRoaXMuZG9jdW1lbnQsbCk7YSYmKHRoaXMuc2Nyb2xsVG9FbGVtZW50KGEpLGEuZm9jdXMoKSl9c2V0SGlzdG9yeVNjcm9sbFJlc3RvcmF0aW9uKGwpe3RoaXMud2luZG93Lmhpc3Rvcnkuc2Nyb2xsUmVzdG9yYXRp''@;'; put 'put ''b249bH1zY3JvbGxUb0VsZW1lbnQobCl7Y29uc3QgYT1sLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGQ9YS5sZWZ0K3RoaXMud2luZG93LnBhZ2VYT2Zmc2V0LGg9YS50b3ArdGhpcy53aW5kb3cucGFnZVlPZmZzZXQsZj10aGlzLm9mZnNldCgpO3RoaXMud2luZG93LnNjcm9sbFRvKGQtZlsw''@;'; put 'put ''XSxoLWZbMV0pfX1jbGFzcyBmd2V7c2V0T2Zmc2V0KGwpe31nZXRTY3JvbGxQb3NpdGlvbigpe3JldHVyblswLDBdfXNjcm9sbFRvUG9zaXRpb24obCl7fXNjcm9sbFRvQW5jaG9yKGwpe31zZXRIaXN0b3J5U2Nyb2xsUmVzdG9yYXRpb24obCl7fX1jbGFzcyBLb2V7fWNsYXNzIGp3ZSBleHRl''@;'; put 'put ''bmRzIFl5ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5zdXBwb3J0c0RPTUV2ZW50cz0hMH19Y2xhc3MgJFUgZXh0ZW5kcyBqd2V7c3RhdGljIG1ha2VDdXJyZW50KCl7IWZ1bmN0aW9uIFd5ZShjKXtFb2U/Pz1jfShuZXcgJFUpfW9uQW5kQ2FuY2VsKGwsYSxkKXty''@;'; put 'put ''ZXR1cm4gbC5hZGRFdmVudExpc3RlbmVyKGEsZCksKCk9PntsLnJlbW92ZUV2ZW50TGlzdGVuZXIoYSxkKX19ZGlzcGF0Y2hFdmVudChsLGEpe2wuZGlzcGF0Y2hFdmVudChhKX1yZW1vdmUobCl7bC5wYXJlbnROb2RlJiZsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobCl9Y3JlYXRlRWxlbWVu''@;'; put 'put ''dChsLGEpe3JldHVybihhPWF8fHRoaXMuZ2V0RGVmYXVsdERvY3VtZW50KCkpLmNyZWF0ZUVsZW1lbnQobCl9Y3JlYXRlSHRtbERvY3VtZW50KCl7cmV0dXJuIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiZmFrZVRpdGxlIil9Z2V0RGVmYXVsdERvY3VtZW50''@;'; put 'put ''KCl7cmV0dXJuIGRvY3VtZW50fWlzRWxlbWVudE5vZGUobCl7cmV0dXJuIGwubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERX1pc1NoYWRvd1Jvb3QobCl7cmV0dXJuIGwgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50fWdldEdsb2JhbEV2ZW50VGFyZ2V0KGwsYSl7cmV0dXJuIndpbmRv''@;'; put 'put ''dyI9PT1hP3dpbmRvdzoiZG9jdW1lbnQiPT09YT9sOiJib2R5Ij09PWE/bC5ib2R5Om51bGx9Z2V0QmFzZUhyZWYobCl7Y29uc3QgYT1mdW5jdGlvbiB6d2UoKXtyZXR1cm4gQU09QU18fGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImJhc2UiKSxBTT9BTS5nZXRBdHRyaWJ1dGUoImhyZWYiKTpu''@;'; put 'put ''dWxsfSgpO3JldHVybiBudWxsPT1hP251bGw6ZnVuY3Rpb24gVXdlKGMpe3JldHVybiBuZXcgVVJMKGMsZG9jdW1lbnQuYmFzZVVSSSkucGF0aG5hbWV9KGEpfXJlc2V0QmFzZUVsZW1lbnQoKXtBTT1udWxsfWdldFVzZXJBZ2VudCgpe3JldHVybiB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2Vu''@;'; put 'put ''dH1nZXRDb29raWUobCl7cmV0dXJuIFZvZShkb2N1bWVudC5jb29raWUsbCl9fWxldCBBTT1udWxsLFd3ZT0oKCk9PntjbGFzcyBje2J1aWxkKCl7cmV0dXJuIG5ldyBYTUxIdHRwUmVxdWVzdH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3Rh''@;'; put 'put ''dGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTtjb25zdCBLVT1uZXcgU3QoIiIpO2xldCBpYWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuX3pvbmU9ZCx0aGlzLl9ldmVudE5hbWVUb1BsdWdpbj1u''@;'; put 'put ''ZXcgTWFwLGEuZm9yRWFjaChoPT57aC5tYW5hZ2VyPXRoaXN9KSx0aGlzLl9wbHVnaW5zPWEuc2xpY2UoKS5yZXZlcnNlKCl9YWRkRXZlbnRMaXN0ZW5lcihhLGQsaCl7cmV0dXJuIHRoaXMuX2ZpbmRQbHVnaW5Gb3IoZCkuYWRkRXZlbnRMaXN0ZW5lcihhLGQsaCl9Z2V0Wm9uZSgpe3JldHVy''@;'; put 'put ''biB0aGlzLl96b25lfV9maW5kUGx1Z2luRm9yKGEpe2xldCBkPXRoaXMuX2V2ZW50TmFtZVRvUGx1Z2luLmdldChhKTtpZihkKXJldHVybiBkO2lmKGQ9dGhpcy5fcGx1Z2lucy5maW5kKGY9PmYuc3VwcG9ydHMoYSkpLCFkKXRocm93IG5ldyBlcig1MTAxLCExKTtyZXR1cm4gdGhpcy5fZXZl''@;'; put 'put ''bnROYW1lVG9QbHVnaW4uc2V0KGEsZCksZH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShNcihLVSksTXIoWW8pKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTtj''@;'; put 'put ''bGFzcyBvYWV7Y29uc3RydWN0b3IobCl7dGhpcy5fZG9jPWx9fWNvbnN0IHFVPSJuZy1hcHAtaWQiO2xldCBhYWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmPXt9KXt0aGlzLmRvYz1hLHRoaXMuYXBwSWQ9ZCx0aGlzLm5vbmNlPWgsdGhpcy5wbGF0Zm9ybUlkPWYsdGhpcy5z''@;'; put 'put ''dHlsZVJlZj1uZXcgTWFwLHRoaXMuaG9zdE5vZGVzPW5ldyBTZXQsdGhpcy5zdHlsZU5vZGVzSW5ET009dGhpcy5jb2xsZWN0U2VydmVyUmVuZGVyZWRTdHlsZXMoKSx0aGlzLnBsYXRmb3JtSXNTZXJ2ZXI9JG9lKGYpLHRoaXMucmVzZXRIb3N0Tm9kZXMoKX1hZGRTdHlsZXMoYSl7Zm9yKGNv''@;'; put 'put ''bnN0IGQgb2YgYSkxPT09dGhpcy5jaGFuZ2VVc2FnZUNvdW50KGQsMSkmJnRoaXMub25TdHlsZUFkZGVkKGQpfXJlbW92ZVN0eWxlcyhhKXtmb3IoY29uc3QgZCBvZiBhKXRoaXMuY2hhbmdlVXNhZ2VDb3VudChkLC0xKTw9MCYmdGhpcy5vblN0eWxlUmVtb3ZlZChkKX1uZ09uRGVzdHJveSgp''@;'; put 'put ''e2NvbnN0IGE9dGhpcy5zdHlsZU5vZGVzSW5ET007YSYmKGEuZm9yRWFjaChkPT5kLnJlbW92ZSgpKSxhLmNsZWFyKCkpO2Zvcihjb25zdCBkIG9mIHRoaXMuZ2V0QWxsU3R5bGVzKCkpdGhpcy5vblN0eWxlUmVtb3ZlZChkKTt0aGlzLnJlc2V0SG9zdE5vZGVzKCl9YWRkSG9zdChhKXt0aGlz''@;'; put 'put ''Lmhvc3ROb2Rlcy5hZGQoYSk7Zm9yKGNvbnN0IGQgb2YgdGhpcy5nZXRBbGxTdHlsZXMoKSl0aGlzLmFkZFN0eWxlVG9Ib3N0KGEsZCl9cmVtb3ZlSG9zdChhKXt0aGlzLmhvc3ROb2Rlcy5kZWxldGUoYSl9Z2V0QWxsU3R5bGVzKCl7cmV0dXJuIHRoaXMuc3R5bGVSZWYua2V5cygpfW9uU3R5''@;'; put 'put ''bGVBZGRlZChhKXtmb3IoY29uc3QgZCBvZiB0aGlzLmhvc3ROb2Rlcyl0aGlzLmFkZFN0eWxlVG9Ib3N0KGQsYSl9b25TdHlsZVJlbW92ZWQoYSl7Y29uc3QgZD10aGlzLnN0eWxlUmVmO2QuZ2V0KGEpPy5lbGVtZW50cz8uZm9yRWFjaChoPT5oLnJlbW92ZSgpKSxkLmRlbGV0ZShhKX1jb2xs''@;'; put 'put ''ZWN0U2VydmVyUmVuZGVyZWRTdHlsZXMoKXtjb25zdCBhPXRoaXMuZG9jLmhlYWQ/LnF1ZXJ5U2VsZWN0b3JBbGwoYHN0eWxlWyR7cVV9PSIke3RoaXMuYXBwSWR9Il1gKTtpZihhPy5sZW5ndGgpe2NvbnN0IGQ9bmV3IE1hcDtyZXR1cm4gYS5mb3JFYWNoKGg9PntudWxsIT1oLnRleHRDb250''@;'; put 'put ''ZW50JiZkLnNldChoLnRleHRDb250ZW50LGgpfSksZH1yZXR1cm4gbnVsbH1jaGFuZ2VVc2FnZUNvdW50KGEsZCl7Y29uc3QgaD10aGlzLnN0eWxlUmVmO2lmKGguaGFzKGEpKXtjb25zdCBmPWguZ2V0KGEpO3JldHVybiBmLnVzYWdlKz1kLGYudXNhZ2V9cmV0dXJuIGguc2V0KGEse3VzYWdl''@;'; put 'put ''OmQsZWxlbWVudHM6W119KSxkfWdldFN0eWxlRWxlbWVudChhLGQpe2NvbnN0IGg9dGhpcy5zdHlsZU5vZGVzSW5ET00sZj1oPy5nZXQoZCk7aWYoZj8ucGFyZW50Tm9kZT09PWEpcmV0dXJuIGguZGVsZXRlKGQpLGYucmVtb3ZlQXR0cmlidXRlKHFVKSxmO3tjb25zdCB2PXRoaXMuZG9jLmNy''@;'; put 'put ''ZWF0ZUVsZW1lbnQoInN0eWxlIik7cmV0dXJuIHRoaXMubm9uY2UmJnYuc2V0QXR0cmlidXRlKCJub25jZSIsdGhpcy5ub25jZSksdi50ZXh0Q29udGVudD1kLHRoaXMucGxhdGZvcm1Jc1NlcnZlciYmdi5zZXRBdHRyaWJ1dGUocVUsdGhpcy5hcHBJZCksYS5hcHBlbmRDaGlsZCh2KSx2fX1h''@;'; put 'put ''ZGRTdHlsZVRvSG9zdChhLGQpe2NvbnN0IGg9dGhpcy5nZXRTdHlsZUVsZW1lbnQoYSxkKSxmPXRoaXMuc3R5bGVSZWYsdj1mLmdldChkKT8uZWxlbWVudHM7dj92LnB1c2goaCk6Zi5zZXQoZCx7ZWxlbWVudHM6W2hdLHVzYWdlOjF9KX1yZXNldEhvc3ROb2Rlcygpe2NvbnN0IGE9dGhpcy5o''@;'; put 'put ''b3N0Tm9kZXM7YS5jbGVhcigpLGEuYWRkKHRoaXMuZG9jLmhlYWQpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKE1yKHZzKSxNcih6diksTXIoRDUsOCksTXIob2EpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5''@;'; put 'put ''OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTtjb25zdCBYVT17c3ZnOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIseGh0bWw6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLHhsaW5rOiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIix4bWw6Imh0dHA6Ly93d3cudzMu''@;'; put 'put ''b3JnL1hNTC8xOTk4L25hbWVzcGFjZSIseG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIixtYXRoOiJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGhNTC8ifSxKVT0vJUNPTVAlL2csS3dlPW5ldyBTdCgiIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+ITB9KTtm''@;'; put 'put ''dW5jdGlvbiBsYWUoYyxsKXtyZXR1cm4gbC5tYXAoYT0+YS5yZXBsYWNlKEpVLGMpKX1sZXQgUVU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxELFo9bnVsbCl7dGhpcy5ldmVudE1hbmFnZXI9YSx0aGlzLnNoYXJlZFN0eWxlc0hvc3Q9ZCx0aGlzLmFwcElkPWgsdGhp''@;'; put 'put ''cy5yZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95PWYsdGhpcy5kb2M9dix0aGlzLnBsYXRmb3JtSWQ9TSx0aGlzLm5nWm9uZT1ELHRoaXMubm9uY2U9Wix0aGlzLnJlbmRlcmVyQnlDb21wSWQ9bmV3IE1hcCx0aGlzLnBsYXRmb3JtSXNTZXJ2ZXI9JG9lKE0pLHRoaXMuZGVmYXVsdFJlbmRlcmVy''@;'; put 'put ''PW5ldyBlWihhLHYsRCx0aGlzLnBsYXRmb3JtSXNTZXJ2ZXIpfWNyZWF0ZVJlbmRlcmVyKGEsZCl7aWYoIWF8fCFkKXJldHVybiB0aGlzLmRlZmF1bHRSZW5kZXJlcjt0aGlzLnBsYXRmb3JtSXNTZXJ2ZXImJmQuZW5jYXBzdWxhdGlvbj09PSRzLlNoYWRvd0RvbSYmKGQ9ey4uLmQsZW5jYXBz''@;'; put 'put ''dWxhdGlvbjokcy5FbXVsYXRlZH0pO2NvbnN0IGg9dGhpcy5nZXRPckNyZWF0ZVJlbmRlcmVyKGEsZCk7cmV0dXJuIGggaW5zdGFuY2VvZiB1YWU/aC5hcHBseVRvSG9zdChhKTpoIGluc3RhbmNlb2YgdFomJmguYXBwbHlTdHlsZXMoKSxofWdldE9yQ3JlYXRlUmVuZGVyZXIoYSxkKXtjb25z''@;'; put 'put ''dCBoPXRoaXMucmVuZGVyZXJCeUNvbXBJZDtsZXQgZj1oLmdldChkLmlkKTtpZighZil7Y29uc3Qgdj10aGlzLmRvYyxNPXRoaXMubmdab25lLEQ9dGhpcy5ldmVudE1hbmFnZXIsWj10aGlzLnNoYXJlZFN0eWxlc0hvc3QsbmU9dGhpcy5yZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95LGNlPXRo''@;'; put 'put ''aXMucGxhdGZvcm1Jc1NlcnZlcjtzd2l0Y2goZC5lbmNhcHN1bGF0aW9uKXtjYXNlICRzLkVtdWxhdGVkOmY9bmV3IHVhZShELFosZCx0aGlzLmFwcElkLG5lLHYsTSxjZSk7YnJlYWs7Y2FzZSAkcy5TaGFkb3dEb206cmV0dXJuIG5ldyBRd2UoRCxaLGEsZCx2LE0sdGhpcy5ub25jZSxjZSk7''@;'; put 'put ''ZGVmYXVsdDpmPW5ldyB0WihELFosZCxuZSx2LE0sY2UpfWguc2V0KGQuaWQsZil9cmV0dXJuIGZ9bmdPbkRlc3Ryb3koKXt0aGlzLnJlbmRlcmVyQnlDb21wSWQuY2xlYXIoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShNcihpYWUpLE1yKGFh''@;'; put 'put ''ZSksTXIoenYpLE1yKEt3ZSksTXIodnMpLE1yKG9hKSxNcihZbyksTXIoRDUpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTtjbGFzcyBlWntjb25zdHJ1Y3RvcihsLGEsZCxoKXt0aGlzLmV2ZW50TWFuYWdl''@;'; put 'put ''cj1sLHRoaXMuZG9jPWEsdGhpcy5uZ1pvbmU9ZCx0aGlzLnBsYXRmb3JtSXNTZXJ2ZXI9aCx0aGlzLmRhdGE9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLnRocm93T25TeW50aGV0aWNQcm9wcz0hMCx0aGlzLmRlc3Ryb3lOb2RlPW51bGx9ZGVzdHJveSgpe31jcmVhdGVFbGVtZW50KGwsYSl7''@;'; put 'put ''cmV0dXJuIGE/dGhpcy5kb2MuY3JlYXRlRWxlbWVudE5TKFhVW2FdfHxhLGwpOnRoaXMuZG9jLmNyZWF0ZUVsZW1lbnQobCl9Y3JlYXRlQ29tbWVudChsKXtyZXR1cm4gdGhpcy5kb2MuY3JlYXRlQ29tbWVudChsKX1jcmVhdGVUZXh0KGwpe3JldHVybiB0aGlzLmRvYy5jcmVhdGVUZXh0Tm9k''@;'; put 'put ''ZShsKX1hcHBlbmRDaGlsZChsLGEpeyhjYWUobCk/bC5jb250ZW50OmwpLmFwcGVuZENoaWxkKGEpfWluc2VydEJlZm9yZShsLGEsZCl7bCYmKGNhZShsKT9sLmNvbnRlbnQ6bCkuaW5zZXJ0QmVmb3JlKGEsZCl9cmVtb3ZlQ2hpbGQobCxhKXtsJiZsLnJlbW92ZUNoaWxkKGEpfXNlbGVjdFJv''@;'; put 'put ''b3RFbGVtZW50KGwsYSl7bGV0IGQ9InN0cmluZyI9PXR5cGVvZiBsP3RoaXMuZG9jLnF1ZXJ5U2VsZWN0b3IobCk6bDtpZighZCl0aHJvdyBuZXcgZXIoLTUxMDQsITEpO3JldHVybiBhfHwoZC50ZXh0Q29udGVudD0iIiksZH1wYXJlbnROb2RlKGwpe3JldHVybiBsLnBhcmVudE5vZGV9bmV4''@;'; put 'put ''dFNpYmxpbmcobCl7cmV0dXJuIGwubmV4dFNpYmxpbmd9c2V0QXR0cmlidXRlKGwsYSxkLGgpe2lmKGgpe2E9aCsiOiIrYTtjb25zdCBmPVhVW2hdO2Y/bC5zZXRBdHRyaWJ1dGVOUyhmLGEsZCk6bC5zZXRBdHRyaWJ1dGUoYSxkKX1lbHNlIGwuc2V0QXR0cmlidXRlKGEsZCl9cmVtb3ZlQXR0''@;'; put 'put ''cmlidXRlKGwsYSxkKXtpZihkKXtjb25zdCBoPVhVW2RdO2g/bC5yZW1vdmVBdHRyaWJ1dGVOUyhoLGEpOmwucmVtb3ZlQXR0cmlidXRlKGAke2R9OiR7YX1gKX1lbHNlIGwucmVtb3ZlQXR0cmlidXRlKGEpfWFkZENsYXNzKGwsYSl7bC5jbGFzc0xpc3QuYWRkKGEpfXJlbW92ZUNsYXNzKGws''@;'; put 'put ''YSl7bC5jbGFzc0xpc3QucmVtb3ZlKGEpfXNldFN0eWxlKGwsYSxkLGgpe2gmKFozLkRhc2hDYXNlfFozLkltcG9ydGFudCk/bC5zdHlsZS5zZXRQcm9wZXJ0eShhLGQsaCZaMy5JbXBvcnRhbnQ/ImltcG9ydGFudCI6IiIpOmwuc3R5bGVbYV09ZH1yZW1vdmVTdHlsZShsLGEsZCl7ZCZaMy5E''@;'; put 'put ''YXNoQ2FzZT9sLnN0eWxlLnJlbW92ZVByb3BlcnR5KGEpOmwuc3R5bGVbYV09IiJ9c2V0UHJvcGVydHkobCxhLGQpe251bGwhPWwmJihsW2FdPWQpfXNldFZhbHVlKGwsYSl7bC5ub2RlVmFsdWU9YX1saXN0ZW4obCxhLGQpe2lmKCJzdHJpbmciPT10eXBlb2YgbCYmIShsPUo1KCkuZ2V0R2xv''@;'; put 'put ''YmFsRXZlbnRUYXJnZXQodGhpcy5kb2MsbCkpKXRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZXZlbnQgdGFyZ2V0ICR7bH0gZm9yIGV2ZW50ICR7YX1gKTtyZXR1cm4gdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLGEsdGhpcy5kZWNvcmF0ZVByZXZlbnREZWZhdWx0''@;'; put 'put ''KGQpKX1kZWNvcmF0ZVByZXZlbnREZWZhdWx0KGwpe3JldHVybiBhPT57aWYoIl9fbmdVbndyYXBfXyI9PT1hKXJldHVybiBsOyExPT09KHRoaXMucGxhdGZvcm1Jc1NlcnZlcj90aGlzLm5nWm9uZS5ydW5HdWFyZGVkKCgpPT5sKGEpKTpsKGEpKSYmYS5wcmV2ZW50RGVmYXVsdCgpfX19ZnVu''@;'; put 'put ''Y3Rpb24gY2FlKGMpe3JldHVybiJURU1QTEFURSI9PT1jLnRhZ05hbWUmJnZvaWQgMCE9PWMuY29udGVudH1jbGFzcyBRd2UgZXh0ZW5kcyBlWntjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdixNLEQpe3N1cGVyKGwsZix2LEQpLHRoaXMuc2hhcmVkU3R5bGVzSG9zdD1hLHRoaXMuaG9zdEVsPWQs''@;'; put 'put ''dGhpcy5zaGFkb3dSb290PWQuYXR0YWNoU2hhZG93KHttb2RlOiJvcGVuIn0pLHRoaXMuc2hhcmVkU3R5bGVzSG9zdC5hZGRIb3N0KHRoaXMuc2hhZG93Um9vdCk7Y29uc3QgWj1sYWUoaC5pZCxoLnN0eWxlcyk7Zm9yKGNvbnN0IG5lIG9mIFope2NvbnN0IGNlPWRvY3VtZW50LmNyZWF0ZUVs''@;'; put 'put ''ZW1lbnQoInN0eWxlIik7TSYmY2Uuc2V0QXR0cmlidXRlKCJub25jZSIsTSksY2UudGV4dENvbnRlbnQ9bmUsdGhpcy5zaGFkb3dSb290LmFwcGVuZENoaWxkKGNlKX19bm9kZU9yU2hhZG93Um9vdChsKXtyZXR1cm4gbD09PXRoaXMuaG9zdEVsP3RoaXMuc2hhZG93Um9vdDpsfWFwcGVuZENo''@;'; put 'put ''aWxkKGwsYSl7cmV0dXJuIHN1cGVyLmFwcGVuZENoaWxkKHRoaXMubm9kZU9yU2hhZG93Um9vdChsKSxhKX1pbnNlcnRCZWZvcmUobCxhLGQpe3JldHVybiBzdXBlci5pbnNlcnRCZWZvcmUodGhpcy5ub2RlT3JTaGFkb3dSb290KGwpLGEsZCl9cmVtb3ZlQ2hpbGQobCxhKXtyZXR1cm4gc3Vw''@;'; put 'put ''ZXIucmVtb3ZlQ2hpbGQodGhpcy5ub2RlT3JTaGFkb3dSb290KGwpLGEpfXBhcmVudE5vZGUobCl7cmV0dXJuIHRoaXMubm9kZU9yU2hhZG93Um9vdChzdXBlci5wYXJlbnROb2RlKHRoaXMubm9kZU9yU2hhZG93Um9vdChsKSkpfWRlc3Ryb3koKXt0aGlzLnNoYXJlZFN0eWxlc0hvc3QucmVt''@;'; put 'put ''b3ZlSG9zdCh0aGlzLnNoYWRvd1Jvb3QpfX1jbGFzcyB0WiBleHRlbmRzIGVae2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2LE0sRCl7c3VwZXIobCxmLHYsTSksdGhpcy5zaGFyZWRTdHlsZXNIb3N0PWEsdGhpcy5yZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95PWgsdGhpcy5zdHlsZXM9RD9sYWUo''@;'; put 'put ''RCxkLnN0eWxlcyk6ZC5zdHlsZXN9YXBwbHlTdHlsZXMoKXt0aGlzLnNoYXJlZFN0eWxlc0hvc3QuYWRkU3R5bGVzKHRoaXMuc3R5bGVzKX1kZXN0cm95KCl7dGhpcy5yZW1vdmVTdHlsZXNPbkNvbXBEZXN0cm95JiZ0aGlzLnNoYXJlZFN0eWxlc0hvc3QucmVtb3ZlU3R5bGVzKHRoaXMuc3R5''@;'; put 'put ''bGVzKX19Y2xhc3MgdWFlIGV4dGVuZHMgdFp7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYsTSxEKXtjb25zdCBaPWgrIi0iK2QuaWQ7c3VwZXIobCxhLGQsZix2LE0sRCxaKSx0aGlzLmNvbnRlbnRBdHRyPWZ1bmN0aW9uIHF3ZShjKXtyZXR1cm4iX25nY29udGVudC0lQ09NUCUiLnJlcGxhY2Uo''@;'; put 'put ''SlUsYyl9KFopLHRoaXMuaG9zdEF0dHI9ZnVuY3Rpb24gWHdlKGMpe3JldHVybiJfbmdob3N0LSVDT01QJSIucmVwbGFjZShKVSxjKX0oWil9YXBwbHlUb0hvc3QobCl7dGhpcy5hcHBseVN0eWxlcygpLHRoaXMuc2V0QXR0cmlidXRlKGwsdGhpcy5ob3N0QXR0ciwiIil9Y3JlYXRlRWxlbWVu''@;'; put 'put ''dChsLGEpe2NvbnN0IGQ9c3VwZXIuY3JlYXRlRWxlbWVudChsLGEpO3JldHVybiBzdXBlci5zZXRBdHRyaWJ1dGUoZCx0aGlzLmNvbnRlbnRBdHRyLCIiKSxkfX1sZXQgZUNlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBvYWV7Y29uc3RydWN0b3IoYSl7c3VwZXIoYSl9c3VwcG9ydHMoYSl7cmV0''@;'; put 'put ''dXJuITB9YWRkRXZlbnRMaXN0ZW5lcihhLGQsaCl7cmV0dXJuIGEuYWRkRXZlbnRMaXN0ZW5lcihkLGgsITEpLCgpPT50aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoYSxkLGgpfXJlbW92ZUV2ZW50TGlzdGVuZXIoYSxkLGgpe3JldHVybiBhLnJlbW92ZUV2ZW50TGlzdGVuZXIoZCxoKX1zdGF0''@;'; put 'put ''aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShNcih2cykpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2NvbnN0IGRhZT1bImFsdCIsImNvbnRyb2wiLCJtZXRhIiwic2hp''@;'; put 'put ''ZnQiXSx0Q2U9eyJcYiI6IkJhY2tzcGFjZSIsIlx0IjoiVGFiIiwiXHg3ZiI6IkRlbGV0ZSIsIlx4MWIiOiJFc2NhcGUiLERlbDoiRGVsZXRlIixFc2M6IkVzY2FwZSIsTGVmdDoiQXJyb3dMZWZ0IixSaWdodDoiQXJyb3dSaWdodCIsVXA6IkFycm93VXAiLERvd246IkFycm93RG93biIsTWVu''@;'; put 'put ''dToiQ29udGV4dE1lbnUiLFNjcm9sbDoiU2Nyb2xsTG9jayIsV2luOiJPUyJ9LG5DZT17YWx0OmM9PmMuYWx0S2V5LGNvbnRyb2w6Yz0+Yy5jdHJsS2V5LG1ldGE6Yz0+Yy5tZXRhS2V5LHNoaWZ0OmM9PmMuc2hpZnRLZXl9O2xldCByQ2U9KCgpPT57Y2xhc3MgYyBleHRlbmRzIG9hZXtjb25z''@;'; put 'put ''dHJ1Y3RvcihhKXtzdXBlcihhKX1zdXBwb3J0cyhhKXtyZXR1cm4gbnVsbCE9Yy5wYXJzZUV2ZW50TmFtZShhKX1hZGRFdmVudExpc3RlbmVyKGEsZCxoKXtjb25zdCBmPWMucGFyc2VFdmVudE5hbWUoZCksdj1jLmV2ZW50Q2FsbGJhY2soZi5mdWxsS2V5LGgsdGhpcy5tYW5hZ2VyLmdldFpv''@;'; put 'put ''bmUoKSk7cmV0dXJuIHRoaXMubWFuYWdlci5nZXRab25lKCkucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pko1KCkub25BbmRDYW5jZWwoYSxmLmRvbUV2ZW50TmFtZSx2KSl9c3RhdGljIHBhcnNlRXZlbnROYW1lKGEpe2NvbnN0IGQ9YS50b0xvd2VyQ2FzZSgpLnNwbGl0KCIuIiksaD1kLnNoaWZ0''@;'; put 'put ''KCk7aWYoMD09PWQubGVuZ3RofHwia2V5ZG93biIhPT1oJiYia2V5dXAiIT09aClyZXR1cm4gbnVsbDtjb25zdCBmPWMuX25vcm1hbGl6ZUtleShkLnBvcCgpKTtsZXQgdj0iIixNPWQuaW5kZXhPZigiY29kZSIpO2lmKE0+LTEmJihkLnNwbGljZShNLDEpLHY9ImNvZGUuIiksZGFlLmZvckVh''@;'; put 'put ''Y2goWj0+e2NvbnN0IG5lPWQuaW5kZXhPZihaKTtuZT4tMSYmKGQuc3BsaWNlKG5lLDEpLHYrPVorIi4iKX0pLHYrPWYsMCE9ZC5sZW5ndGh8fDA9PT1mLmxlbmd0aClyZXR1cm4gbnVsbDtjb25zdCBEPXt9O3JldHVybiBELmRvbUV2ZW50TmFtZT1oLEQuZnVsbEtleT12LER9c3RhdGljIG1h''@;'; put 'put ''dGNoRXZlbnRGdWxsS2V5Q29kZShhLGQpe2xldCBoPXRDZVthLmtleV18fGEua2V5LGY9IiI7cmV0dXJuIGQuaW5kZXhPZigiY29kZS4iKT4tMSYmKGg9YS5jb2RlLGY9ImNvZGUuIiksIShudWxsPT1ofHwhaCkmJihoPWgudG9Mb3dlckNhc2UoKSwiICI9PT1oP2g9InNwYWNlIjoiLiI9PT1o''@;'; put 'put ''JiYoaD0iZG90IiksZGFlLmZvckVhY2godj0+e3YhPT1oJiYoMCxuQ2Vbdl0pKGEpJiYoZis9disiLiIpfSksZis9aCxmPT09ZCl9c3RhdGljIGV2ZW50Q2FsbGJhY2soYSxkLGgpe3JldHVybiBmPT57Yy5tYXRjaEV2ZW50RnVsbEtleUNvZGUoZixhKSYmaC5ydW5HdWFyZGVkKCgpPT5kKGYp''@;'; put 'put ''KX19c3RhdGljIF9ub3JtYWxpemVLZXkoYSl7cmV0dXJuImVzYyI9PT1hPyJlc2NhcGUiOmF9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoTXIodnMpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1''@;'; put 'put ''ZmFjfSl9fXJldHVybiBjfSkoKTtjb25zdCBmYWU9W3twcm92aWRlOm9hLHVzZVZhbHVlOiJicm93c2VyIn0se3Byb3ZpZGU6VGssdXNlVmFsdWU6ZnVuY3Rpb24gaUNlKCl7JFUubWFrZUN1cnJlbnQoKX0sbXVsdGk6ITB9LHtwcm92aWRlOnZzLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gYUNlKCl7''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uIHFWKGMpe0VDPWN9KGRvY3VtZW50KSxkb2N1bWVudH0sZGVwczpbXX1dLHNDZT1aaWUobHllLCJicm93c2VyIixmYWUpLGxDZT1uZXcgU3QoIiIpLHBhZT1be3Byb3ZpZGU6R0ksdXNlQ2xhc3M6Y2xhc3MgWndle2FkZFRvV2luZG93KGwpe0h0LmdldEFuZ3VsYXJU''@;'; put 'put ''ZXN0YWJpbGl0eT0oZCxoPSEwKT0+e2NvbnN0IGY9bC5maW5kVGVzdGFiaWxpdHlJblRyZWUoZCxoKTtpZihudWxsPT1mKXRocm93IG5ldyBlcig1MTAzLCExKTtyZXR1cm4gZn0sSHQuZ2V0QWxsQW5ndWxhclRlc3RhYmlsaXRpZXM9KCk9PmwuZ2V0QWxsVGVzdGFiaWxpdGllcygpLEh0Lmdl''@;'; put 'put ''dEFsbEFuZ3VsYXJSb290RWxlbWVudHM9KCk9PmwuZ2V0QWxsUm9vdEVsZW1lbnRzKCksSHQuZnJhbWV3b3JrU3RhYmlsaXplcnN8fChIdC5mcmFtZXdvcmtTdGFiaWxpemVycz1bXSksSHQuZnJhbWV3b3JrU3RhYmlsaXplcnMucHVzaChkPT57Y29uc3QgaD1IdC5nZXRBbGxBbmd1bGFyVGVz''@;'; put 'put ''dGFiaWxpdGllcygpO2xldCBmPWgubGVuZ3RoO2NvbnN0IHY9ZnVuY3Rpb24oKXtmLS0sMD09ZiYmZCgpfTtoLmZvckVhY2goTT0+e00ud2hlblN0YWJsZSh2KX0pfSl9ZmluZFRlc3RhYmlsaXR5SW5UcmVlKGwsYSxkKXtyZXR1cm4gbnVsbD09YT9udWxsOmwuZ2V0VGVzdGFiaWxpdHkoYSk/''@;'; put 'put ''PyhkP0o1KCkuaXNTaGFkb3dSb290KGEpP3RoaXMuZmluZFRlc3RhYmlsaXR5SW5UcmVlKGwsYS5ob3N0LCEwKTp0aGlzLmZpbmRUZXN0YWJpbGl0eUluVHJlZShsLGEucGFyZW50RWxlbWVudCwhMCk6bnVsbCl9fSxkZXBzOltdfSx7cHJvdmlkZTpMaWUsdXNlQ2xhc3M6cFUsZGVwczpbWW8s''@;'; put 'put ''Z1UsR0ldfSx7cHJvdmlkZTpwVSx1c2VDbGFzczpwVSxkZXBzOltZbyxnVSxHSV19XSxnYWU9W3twcm92aWRlOk82LHVzZVZhbHVlOiJyb290In0se3Byb3ZpZGU6dTIsdXNlRmFjdG9yeTpmdW5jdGlvbiBvQ2UoKXtyZXR1cm4gbmV3IHUyfSxkZXBzOltdfSx7cHJvdmlkZTpLVSx1c2VDbGFz''@;'; put 'put ''czplQ2UsbXVsdGk6ITAsZGVwczpbdnMsWW8sb2FdfSx7cHJvdmlkZTpLVSx1c2VDbGFzczpyQ2UsbXVsdGk6ITAsZGVwczpbdnNdfSxRVSxhYWUsaWFlLHtwcm92aWRlOlM4LHVzZUV4aXN0aW5nOlFVfSx7cHJvdmlkZTpLb2UsdXNlQ2xhc3M6V3dlLGRlcHM6W119LFtdXTtsZXQgbWFlPSgo''@;'; put 'put ''KT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7fXN0YXRpYyB3aXRoU2VydmVyVHJhbnNpdGlvbihhKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6W3twcm92aWRlOnp2LHVzZVZhbHVlOmEuYXBwSWR9XX19c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXco''@;'; put 'put ''ZHx8YykoTXIobENlLDEyKSl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtwcm92aWRlcnM6Wy4uLmdhZSwuLi5wYWVdLGltcG9ydHM6W0xvLGN5ZV19KX19cmV0dXJuIGN9KSgpLGNDZT0oKCk9PntjbGFzcyBje2NvbnN0cnVj''@;'; put 'put ''dG9yKGEpe3RoaXMuX2RvYz1hfWdldFRpdGxlKCl7cmV0dXJuIHRoaXMuX2RvYy50aXRsZX1zZXRUaXRsZShhKXt0aGlzLl9kb2MudGl0bGU9YXx8IiJ9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoTXIodnMpKX19c3RhdGlje3RoaXMuXHUwMjc1''@;'; put 'put ''cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtfKDM3NDgyKSxfKDgwNjg1KTtjb25zdCBuWj17ZmlsdGVyOntjb2xzOltdLHZhbHM6W10sZ3JvdXBMb2dpYzoiIix3aGVyZUNsYXVzZToiIixsaWJkczoiIixjbGF1''@;'; put 'put ''c2VzOltdLHF1ZXJ5OltdfX0sS249e3Jvb3RQYXJhbToiIixkY0xpYjoiIix4bG1hcHM6W10sZWRpdG9yOntzdGFydHVwU2V0OiExLHRyZWVOb2RlTGlicmFyaWVzOltdLGxpYnNBbmRUYWJsZXM6W10sbGlicmFyaWVzOltdLGxpYnJhcnk6IiIsdGFibGU6IiIsZmlsdGVyOntjb2xzOltdLHZh''@;'; put 'put ''bHM6W10sZ3JvdXBMb2dpYzoiIix3aGVyZUNsYXVzZToiIixsaWJkczoiIixjbGF1c2VzOltdLHF1ZXJ5OltdfX0sdmlld2VyOntzdGFydHVwU2V0OiExLHRhYmxlc1NldDohMSxsaWJyYXJpZXM6W10sdGFibGVzOm51bGwsbGlicmFyeToiIix0YWJsZToiIixsaWJpbmZvOltdLGxpYnJhcmll''@;'; put 'put ''c1NlYXJjaDoiIixmaWx0ZXI6e2NvbHM6W10sdmFsczpbXSxncm91cExvZ2ljOiIiLHdoZXJlQ2xhdXNlOiIiLGxpYmRzOiIiLGNsYXVzZXM6W10scXVlcnk6W119LGN1cnJlbnRTZWxlY3Rpb246IiJ9LHZpZXdib3hlczp7fSxsaW5lYWdlOntsaWJyYXJ5TGlzdDpbXSx0YWJsZXNMaXN0Oltd''@;'; put 'put ''LGNvbHVtbnNMaXN0OltdLGxpYnJhcmllc1NlYXJjaDoiIixsaWI6IiIsdGFibGU6IiIsY29sdW1uOiIiLGN1cnJlbnRMaW5lYWdlUGF0aExpYlRhYmxlOiIiLGN1cnJlbnRMaW5lYWdlUGF0aENvbHVtbjoiIn0sbWV0YWRhdGE6e21ldGFEYXRhTGlzdDp2b2lkIDAsbWV0YURhdGFTZWFyY2g6''@;'; put 'put ''IiIsbWV0YU9iamVjdExpc3Q6W10sbWV0YU9iamVjdFNlYXJjaDoiIixtZXRhUmVwb3NpdG9yaWVzOnZvaWQgMCxzZWxlY3RlZFJlcG9zaXRvcnk6IiJ9LHZpeWFBcGk6e2NvbGxlY3Rpb25zTGlzdDp2b2lkIDAsY29sbGVjdGlvbnNTZWFyY2g6IiIsc2VsZWN0ZWRSZXBvc2l0b3J5OiIifSx1''@;'; put 'put ''c2VybmF2Ont1c2VyTGlzdDp2b2lkIDAsdXNlclNlYXJjaDoiIixncm91cExpc3Q6dm9pZCAwLGdyb3VwU2VhcmNoOiIiLHJvbGVMaXN0OnZvaWQgMCxyb2xlU2VhcmNoOiIifSxvcGVyYXRvcnM6e251bU9wZXJhdG9yczpbIj0iLCI8IiwiPiIsIjw9IiwiPj0iLCJCRVRXRUVOIiwiSU4iLCJO''@;'; put 'put ''T1QgSU4iLCJORSJdLGNoYXJPcGVyYXRvcnM6WyI9IiwiPCIsIj4iLCI8PSIsIj49IiwiQ09OVEFJTlMiLCJJTiIsIk5PVCBJTiIsIk5FIl19LGhhbmRzb250YWJsZTp7ZGFya1RhYmxlSGVhZGVyQ2xhc3M6ImRhcmtUSCJ9fTt2YXIgTGE9Xyg5NzU4NiksX2FlPV8ubihMYSk7ZnVuY3Rpb24g''@;'; put 'put ''d2FlKGMsbCl7c3dpdGNoKGMpe2Nhc2UgMDpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24oYSl7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKGEsZCl7cmV0''@;'; put 'put ''dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKGEsZCxoKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgNDpyZXR1cm4gZnVuY3Rpb24oYSxkLGgsZil7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDU6cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uKGEsZCxoLGYsdil7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDY6cmV0dXJuIGZ1bmN0aW9uKGEsZCxoLGYsdixNKXtyZXR1cm4gbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2Nhc2UgNzpyZXR1cm4gZnVuY3Rpb24oYSxkLGgsZix2LE0sRCl7cmV0''@;'; put 'put ''dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDg6cmV0dXJuIGZ1bmN0aW9uKGEsZCxoLGYsdixNLEQsWil7cmV0dXJuIGwuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtjYXNlIDk6cmV0dXJuIGZ1bmN0aW9uKGEsZCxoLGYsdixNLEQsWixuZSl7cmV0dXJuIGwuYXBwbHkodGhpcyxh''@;'; put 'put ''cmd1bWVudHMpfTtjYXNlIDEwOnJldHVybiBmdW5jdGlvbihhLGQsaCxmLHYsTSxELFosbmUsY2Upe3JldHVybiBsLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkZpcnN0IGFyZ3VtZW50IHRvIF9hcml0eSBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGlu''@;'; put 'put ''dGVnZXIgbm8gZ3JlYXRlciB0aGFuIHRlbiIpfX1mdW5jdGlvbiBRNShjKXtyZXR1cm4gbnVsbCE9YyYmIm9iamVjdCI9PXR5cGVvZiBjJiYhMD09PWNbIkBAZnVuY3Rpb25hbC9wbGFjZWhvbGRlciJdfWZ1bmN0aW9uIFg0KGMpe3JldHVybiBmdW5jdGlvbiBsKGEpe3JldHVybiAwPT09YXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aHx8UTUoYSk/bDpjLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19ZnVuY3Rpb24gVWIoYyl7cmV0dXJuIGZ1bmN0aW9uIGwoYSxkKXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBsO2Nhc2UgMTpyZXR1cm4gUTUoYSk/bDpYNChmdW5jdGlvbihoKXty''@;'; put 'put ''ZXR1cm4gYyhhLGgpfSk7ZGVmYXVsdDpyZXR1cm4gUTUoYSkmJlE1KGQpP2w6UTUoYSk/WDQoZnVuY3Rpb24oaCl7cmV0dXJuIGMoaCxkKX0pOlE1KGQpP1g0KGZ1bmN0aW9uKGgpe3JldHVybiBjKGEsaCl9KTpjKGEsZCl9fX1mdW5jdGlvbiBDYWUoYyxsLGEpe3JldHVybiBmdW5jdGlvbigp''@;'; put 'put ''e2Zvcih2YXIgZD1bXSxoPTAsZj1jLHY9MCxNPSExO3Y8bC5sZW5ndGh8fGg8YXJndW1lbnRzLmxlbmd0aDspe3ZhciBEO3Y8bC5sZW5ndGgmJighUTUobFt2XSl8fGg+PWFyZ3VtZW50cy5sZW5ndGgpP0Q9bFt2XTooRD1hcmd1bWVudHNbaF0saCs9MSksZFt2XT1ELFE1KEQpP009ITA6Zi09''@;'; put 'put ''MSx2Kz0xfXJldHVybiFNJiZmPD0wP2EuYXBwbHkodGhpcyxkKTp3YWUoTWF0aC5tYXgoMCxmKSxDYWUoYyxkLGEpKX19Y29uc3QgU2FlPVViKGZ1bmN0aW9uKGwsYSl7cmV0dXJuIDE9PT1sP1g0KGEpOndhZShsLENhZShsLFtdLGEpKX0pLE1hZT1VYihmdW5jdGlvbihsLGEpe3JldHVybiBh''@;'; put 'put ''IGluc3RhbmNlb2YgbHx8bnVsbCE9YSYmKGEuY29uc3RydWN0b3I9PT1sfHwiT2JqZWN0Ij09PWwubmFtZSYmIm9iamVjdCI9PXR5cGVvZiBhKX0pO2Z1bmN0aW9uIHZSKGMsbCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChsLGMpfXZhciB4YWU9T2JqZWN0''@;'; put 'put ''LnByb3RvdHlwZS50b1N0cmluZztjb25zdCBFYWU9ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBBcmd1bWVudHNdIj09PXhhZS5jYWxsKGFyZ3VtZW50cyk/ZnVuY3Rpb24obCl7cmV0dXJuIltvYmplY3QgQXJndW1lbnRzXSI9PT14YWUuY2FsbChsKX06ZnVuY3Rpb24obCl7cmV0dXJuIHZS''@;'; put 'put ''KCJjYWxsZWUiLGwpfX0oKSxtQ2U9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24obCl7cmV0dXJuIG51bGwhPWwmJmwubGVuZ3RoPj0wJiYiW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGwpfTtmdW5jdGlvbiBUYWUoYyl7cmV0dXJuIltvYmplY3QgU3Ry''@;'; put 'put ''aW5nXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYyl9dmFyIHlDZT1YNChmdW5jdGlvbihsKXtyZXR1cm4gbnVsbCE9bCYmImZ1bmN0aW9uIj09dHlwZW9mIGxbImZhbnRhc3ktbGFuZC9lbXB0eSJdP2xbImZhbnRhc3ktbGFuZC9lbXB0eSJdKCk6bnVsbCE9bCYmbnVsbCE9''@;'; put 'put ''bC5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9mIGwuY29uc3RydWN0b3JbImZhbnRhc3ktbGFuZC9lbXB0eSJdP2wuY29uc3RydWN0b3JbImZhbnRhc3ktbGFuZC9lbXB0eSJdKCk6bnVsbCE9bCYmImZ1bmN0aW9uIj09dHlwZW9mIGwuZW1wdHk/bC5lbXB0eSgpOm51bGwhPWwmJm51''@;'; put 'put ''bGwhPWwuY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBsLmNvbnN0cnVjdG9yLmVtcHR5P2wuY29uc3RydWN0b3IuZW1wdHkoKTptQ2UobCk/W106VGFlKGwpPyIiOmZ1bmN0aW9uIHZDZShjKXtyZXR1cm4iW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJp''@;'; put 'put ''bmcuY2FsbChjKX0obCk/e306RWFlKGwpP2Z1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKTpmdW5jdGlvbiBiQ2UoYyl7dmFyIGw9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMpO3JldHVybiJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSI9PT1sfHwiW29iamVjdCBJbnQ4''@;'; put 'put ''QXJyYXldIj09PWx8fCJbb2JqZWN0IFVpbnQ4QXJyYXldIj09PWx8fCJbb2JqZWN0IEludDE2QXJyYXldIj09PWx8fCJbb2JqZWN0IFVpbnQxNkFycmF5XSI9PT1sfHwiW29iamVjdCBJbnQzMkFycmF5XSI9PT1sfHwiW29iamVjdCBVaW50MzJBcnJheV0iPT09bHx8IltvYmplY3QgRmxvYXQz''@;'; put 'put ''MkFycmF5XSI9PT1sfHwiW29iamVjdCBGbG9hdDY0QXJyYXldIj09PWx8fCJbb2JqZWN0IEJpZ0ludDY0QXJyYXldIj09PWx8fCJbb2JqZWN0IEJpZ1VpbnQ2NEFycmF5XSI9PT1sfShsKT9sLmNvbnN0cnVjdG9yLmZyb20oIiIpOnZvaWQgMH0pO2NvbnN0IF9DZT15Q2U7ZnVuY3Rpb24gQWFl''@;'; put 'put ''KGMpe2Zvcih2YXIgYSxsPVtdOyEoYT1jLm5leHQoKSkuZG9uZTspbC5wdXNoKGEudmFsdWUpO3JldHVybiBsfWZ1bmN0aW9uIGthZShjLGwsYSl7Zm9yKHZhciBkPTAsaD1hLmxlbmd0aDtkPGg7KXtpZihjKGwsYVtkXSkpcmV0dXJuITA7ZCs9MX1yZXR1cm4hMX1jb25zdCByWj0iZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgT2JqZWN0LmlzP09iamVjdC5pczpmdW5jdGlvbiBDQ2UoYyxsKXtyZXR1cm4gYz09PWw/MCE9PWN8fDEvYz09MS9sOmMhPWMmJmwhPWx9O3ZhciBTQ2U9IXt0b1N0cmluZzpudWxsfS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgidG9TdHJpbmciKSxEYWU9WyJjb25zdHJ1Y3Rv''@;'; put 'put ''ciIsInZhbHVlT2YiLCJpc1Byb3RvdHlwZU9mIiwidG9TdHJpbmciLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImhhc093blByb3BlcnR5IiwidG9Mb2NhbGVTdHJpbmciXSxJYWU9ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKCJsZW5ndGgiKX0oKSxN''@;'; put 'put ''Q2U9ZnVuY3Rpb24obCxhKXtmb3IodmFyIGQ9MDtkPGwubGVuZ3RoOyl7aWYobFtkXT09PWEpcmV0dXJuITA7ZCs9MX1yZXR1cm4hMX07Y29uc3QgUmFlPVg0KCJmdW5jdGlvbiIhPXR5cGVvZiBPYmplY3Qua2V5c3x8SWFlP2Z1bmN0aW9uKGwpe2lmKE9iamVjdChsKSE9PWwpcmV0dXJuW107''@;'; put 'put ''dmFyIGEsZCxoPVtdLGY9SWFlJiZFYWUobCk7Zm9yKGEgaW4gbCl2UihhLGwpJiYoIWZ8fCJsZW5ndGgiIT09YSkmJihoW2gubGVuZ3RoXT1hKTtpZihTQ2UpZm9yKGQ9RGFlLmxlbmd0aC0xO2Q+PTA7KXZSKGE9RGFlW2RdLGwpJiYhTUNlKGgsYSkmJihoW2gubGVuZ3RoXT1hKSxkLT0xO3Jl''@;'; put 'put ''dHVybiBofTpmdW5jdGlvbihsKXtyZXR1cm4gT2JqZWN0KGwpIT09bD9bXTpPYmplY3Qua2V5cyhsKX0pLExhZT1YNChmdW5jdGlvbihsKXtyZXR1cm4gbnVsbD09PWw/Ik51bGwiOnZvaWQgMD09PWw/IlVuZGVmaW5lZCI6T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGwpLnNsaWNl''@;'; put 'put ''KDgsLTEpfSk7ZnVuY3Rpb24gT2FlKGMsbCxhLGQpe3ZhciBoPUFhZShjKTtmdW5jdGlvbiB2KE0sRCl7cmV0dXJuIGlaKE0sRCxhLnNsaWNlKCksZC5zbGljZSgpKX1yZXR1cm4ha2FlKGZ1bmN0aW9uKE0sRCl7cmV0dXJuIWthZSh2LEQsTSl9LEFhZShsKSxoKX1mdW5jdGlvbiBpWihjLGws''@;'; put 'put ''YSxkKXtpZihyWihjLGwpKXJldHVybiEwO3ZhciBoPUxhZShjKTtpZihoIT09TGFlKGwpKXJldHVybiExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjWyJmYW50YXN5LWxhbmQvZXF1YWxzIl18fCJmdW5jdGlvbiI9PXR5cGVvZiBsWyJmYW50YXN5LWxhbmQvZXF1YWxzIl0pcmV0dXJuImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIGNbImZhbnRhc3ktbGFuZC9lcXVhbHMiXSYmY1siZmFudGFzeS1sYW5kL2VxdWFscyJdKGwpJiYiZnVuY3Rpb24iPT10eXBlb2YgbFsiZmFudGFzeS1sYW5kL2VxdWFscyJdJiZsWyJmYW50YXN5LWxhbmQvZXF1YWxzIl0oYyk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGMu''@;'; put 'put ''ZXF1YWxzfHwiZnVuY3Rpb24iPT10eXBlb2YgbC5lcXVhbHMpcmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGMuZXF1YWxzJiZjLmVxdWFscyhsKSYmImZ1bmN0aW9uIj09dHlwZW9mIGwuZXF1YWxzJiZsLmVxdWFscyhjKTtzd2l0Y2goaCl7Y2FzZSJBcmd1bWVudHMiOmNhc2UiQXJyYXkiOmNh''@;'; put 'put ''c2UiT2JqZWN0IjppZigiZnVuY3Rpb24iPT10eXBlb2YgYy5jb25zdHJ1Y3RvciYmIlByb21pc2UiPT09ZnVuY3Rpb24gd0NlKGMpe3ZhciBsPVN0cmluZyhjKS5tYXRjaCgvXmZ1bmN0aW9uIChcdyopLyk7cmV0dXJuIG51bGw9PWw/IiI6bFsxXX0oYy5jb25zdHJ1Y3RvcikpcmV0dXJuIGM9''@;'; put 'put ''PT1sO2JyZWFrO2Nhc2UiQm9vbGVhbiI6Y2FzZSJOdW1iZXIiOmNhc2UiU3RyaW5nIjppZih0eXBlb2YgYyE9dHlwZW9mIGx8fCFyWihjLnZhbHVlT2YoKSxsLnZhbHVlT2YoKSkpcmV0dXJuITE7YnJlYWs7Y2FzZSJEYXRlIjppZighclooYy52YWx1ZU9mKCksbC52YWx1ZU9mKCkpKXJldHVy''@;'; put 'put ''biExO2JyZWFrO2Nhc2UiRXJyb3IiOnJldHVybiBjLm5hbWU9PT1sLm5hbWUmJmMubWVzc2FnZT09PWwubWVzc2FnZTtjYXNlIlJlZ0V4cCI6aWYoYy5zb3VyY2UhPT1sLnNvdXJjZXx8Yy5nbG9iYWwhPT1sLmdsb2JhbHx8Yy5pZ25vcmVDYXNlIT09bC5pZ25vcmVDYXNlfHxjLm11bHRpbGlu''@;'; put 'put ''ZSE9PWwubXVsdGlsaW5lfHxjLnN0aWNreSE9PWwuc3RpY2t5fHxjLnVuaWNvZGUhPT1sLnVuaWNvZGUpcmV0dXJuITF9Zm9yKHZhciBmPWEubGVuZ3RoLTE7Zj49MDspe2lmKGFbZl09PT1jKXJldHVybiBkW2ZdPT09bDtmLT0xfXN3aXRjaChoKXtjYXNlIk1hcCI6cmV0dXJuIGMuc2l6ZT09''@;'; put 'put ''PWwuc2l6ZSYmT2FlKGMuZW50cmllcygpLGwuZW50cmllcygpLGEuY29uY2F0KFtjXSksZC5jb25jYXQoW2xdKSk7Y2FzZSJTZXQiOnJldHVybiBjLnNpemU9PT1sLnNpemUmJk9hZShjLnZhbHVlcygpLGwudmFsdWVzKCksYS5jb25jYXQoW2NdKSxkLmNvbmNhdChbbF0pKTtjYXNlIkFyZ3Vt''@;'; put 'put ''ZW50cyI6Y2FzZSJBcnJheSI6Y2FzZSJPYmplY3QiOmNhc2UiQm9vbGVhbiI6Y2FzZSJOdW1iZXIiOmNhc2UiU3RyaW5nIjpjYXNlIkRhdGUiOmNhc2UiRXJyb3IiOmNhc2UiUmVnRXhwIjpjYXNlIkludDhBcnJheSI6Y2FzZSJVaW50OEFycmF5IjpjYXNlIlVpbnQ4Q2xhbXBlZEFycmF5Ijpj''@;'; put 'put ''YXNlIkludDE2QXJyYXkiOmNhc2UiVWludDE2QXJyYXkiOmNhc2UiSW50MzJBcnJheSI6Y2FzZSJVaW50MzJBcnJheSI6Y2FzZSJGbG9hdDMyQXJyYXkiOmNhc2UiRmxvYXQ2NEFycmF5IjpjYXNlIkFycmF5QnVmZmVyIjpicmVhaztkZWZhdWx0OnJldHVybiExfXZhciB2PVJhZShjKTtpZih2''@;'; put 'put ''Lmxlbmd0aCE9PVJhZShsKS5sZW5ndGgpcmV0dXJuITE7dmFyIE09YS5jb25jYXQoW2NdKSxEPWQuY29uY2F0KFtsXSk7Zm9yKGY9di5sZW5ndGgtMTtmPj0wOyl7dmFyIFo9dltmXTtpZighdlIoWixsKXx8IWlaKGxbWl0sY1taXSxNLEQpKXJldHVybiExO2YtPTF9cmV0dXJuITB9Y29uc3Qg''@;'; put 'put ''QUNlPVViKGZ1bmN0aW9uKGwsYSl7cmV0dXJuIGlaKGwsYSxbXSxbXSl9KSxQYWU9WDQoZnVuY3Rpb24obCl7cmV0dXJuIG51bGwhPWwmJkFDZShsLF9DZShsKSl9KTtmdW5jdGlvbiBETShjKXtyZXR1cm4gbnVsbD09Y31mdW5jdGlvbiBJTShjKXtyZXR1cm4gRE0oYyl8fFBhZShjKX1mdW5j''@;'; put 'put ''dGlvbiBvWihjKXtyZXR1cm4gTWFlKFN0cmluZyxjKX1mdW5jdGlvbiBOYWUoYyxsKXtyZXR1cm4gYyE9PWx9ZnVuY3Rpb24gemFlKGM9d2luZG93KXtyZXR1cm4hRE0oYyl9Y29uc3QgTkNlPU51bWJlci5pc0ludGVnZXJ8fGZ1bmN0aW9uKGwpe3JldHVybigwfGwpPT09bH0sQkNlPVViKGZ1''@;'; put 'put ''bmN0aW9uKGwsYSl7dmFyIGQ9bDwwP2EubGVuZ3RoK2w6bDtyZXR1cm4gVGFlKGEpP2EuY2hhckF0KGQpOmFbZF19KSx6Q2U9VWIoZnVuY3Rpb24obCxhKXtyZXR1cm4gbC5tYXAoZnVuY3Rpb24oZCl7Zm9yKHZhciB2LGg9YSxmPTA7ZjxkLmxlbmd0aDspe2lmKG51bGw9PWgpcmV0dXJuO2g9''@;'; put 'put ''TkNlKHY9ZFtmXSk/QkNlKHYsaCk6aFt2XSxmKz0xfXJldHVybiBofSl9KSxaQ2U9VWIoZnVuY3Rpb24obCxhKXtyZXR1cm4gekNlKFtsXSxhKVswXX0pLFlDZT1TYWUoMiwoYyxsKT0+dm9pZCAwIT09WkNlKGMsbCkpLFVhZT1ZQ2UoeyJAQGZ1bmN0aW9uYWwvcGxhY2Vob2xkZXIiOiEwfSx3''@;'; put 'put ''aW5kb3cpO2xldCB5UixaYWUsYVosc1o7ZnVuY3Rpb24gV2FlKGM9ITApe2lmKCFjfHwheVIpe2NvbnN0IGw9ZG9jdW1lbnQmJmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIltuZy12ZXJzaW9uXSIpO3lSPWw/IiIrbC5nZXRBdHRyaWJ1dGUoIm5nLXZlcnNpb24iKTp2b2lkIDB9cmV0dXJuIHlS''@;'; put 'put ''fWZ1bmN0aW9uICRDZShjPSEwKXtyZXR1cm4gYyYmeVJ8fChaYWU9d2luZG93Py5hbmd1bGFyPy52ZXJzaW9uPy5mdWxsKSxaYWV9ZnVuY3Rpb24gWWFlKGM9ITApe3JldHVybiBjJiZhWnx8KGFaPXdpbmRvdz8uQ0RTPy5fcmVhY3Q/LnZlcnNpb24/d2luZG93LkNEUy5fcmVhY3QudmVyc2lv''@;'; put 'put ''bjpkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJbZGF0YS1yZWFjdHJvb3RdLCBbZGF0YS1yZWFjdGlkXSIpPyJ1bmtub3duIHZlcnNpb24iOnZvaWQgMCksYVp9ZnVuY3Rpb24gR2FlKGM9ITApe2lmKCFjfHwhc1ope2NvbnN0IGw9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiKiIpO2xldCBh''@;'; put 'put ''O2ZvcihsZXQgZD0wO2Q8bC5sZW5ndGg7ZCsrKWlmKGxbZF0uX192dWVfXyl7YT1sW2RdO2JyZWFrfXNaPWE/InVua25vd24gdmVyc2lvbiI6dm9pZCAwfXJldHVybiBzWn1mdW5jdGlvbiBVOChjKXtyZXR1cm4gYy5yZXBsYWNlKC9bQS1aXS9nLGw9PiItIitsLnRvTG93ZXJDYXNlKCkpfWZ1''@;'; put 'put ''bmN0aW9uIHFhZShjKXtyZXR1cm4gYy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStjLnNsaWNlKDEpfWNvbnN0IGVTZT1uZXcgY2xhc3N7Y29uc3RydWN0b3IoKXtpZih0aGlzLnN1cHBvcnRzPXtqczohMH0sIWRvY3VtZW50LmJvZHkuaGFzQXR0cmlidXRlKCJjZHMtc3VwcG9ydHMiKXx8Im5v''@;'; put 'put ''LWpzIj09PWRvY3VtZW50LmJvZHkuZ2V0QXR0cmlidXRlKCJjZHMtc3VwcG9ydHMiKSl7Y29uc3QgYz1VOChPYmplY3Qua2V5cyh0aGlzLnN1cHBvcnRzKS5yZWR1Y2UoKGwsYSk9PmAke2x9ICR7dGhpcy5zdXBwb3J0c1thXT9hOiJuby0iK2F9YCwiIikpLnRyaW0oKTtkb2N1bWVudC5ib2R5''@;'; put 'put ''LnNldEF0dHJpYnV0ZSgiY2RzLXN1cHBvcnRzIixjKX19fTtjbGFzcyBSTXtzdGF0aWMgbG9nKC4uLmwpe3VaKCkmJmNaKCkmJmNvbnNvbGUubG9nKC4uLmwpfXN0YXRpYyB3YXJuKC4uLmwpe3VaKCkmJmNaKCkmJmNvbnNvbGUud2FybiguLi5sKX1zdGF0aWMgZXJyb3IoLi4ubCl7dVooKSYm''@;'; put 'put ''Y1ooKSYmY29uc29sZS5lcnJvciguLi5sKX19ZnVuY3Rpb24gY1ooKXtyZXR1cm4hVWFlKFsiamFzbWluZSJdKX1mdW5jdGlvbiB1Wigpe3JldHVybiF3aW5kb3cuQ0RTLmVudmlyb25tZW50LnByb2R1Y3Rpb259ZnVuY3Rpb24gUWFlKCl7emFlKCkmJih3aW5kb3cuQ0RTPXdpbmRvdy5DRFN8''@;'; put 'put ''fHtfdmVyc2lvbjpbXSxfcmVhY3Q6e3ZlcnNpb246dm9pZCAwfSxfc3VwcG9ydHM6ZVNlLnN1cHBvcnRzLF9pc1N0YXRlUHJveGllZDohMSxfc3RhdGU6e2ZvY3VzVHJhcEl0ZW1zOltdLGxheWVyRWxlbWVudHM6W10saTE4blJlZ2lzdHJ5Ont9LGVsZW1lbnRSZWdpc3RyeTp7fSxpY29uUmVn''@;'; put 'put ''aXN0cnk6e30sbW90aW9uUmVnaXN0cnk6e319LGVudmlyb25tZW50Ontwcm9kdWN0aW9uOiExfSxnZXREZXRhaWxzOmVzZSxsb2dEZXRhaWxzOnRTZX0sZnVuY3Rpb24oKXtjb25zdCBjPSI2LjE1LjEiO3dpbmRvdy5DRFMuX3ZlcnNpb24uaW5kZXhPZihjKTwwJiYod2luZG93LkNEUy5fdmVy''@;'; put 'put ''c2lvbi5wdXNoKGMpLGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImJvZHkiKT8uc2V0QXR0cmlidXRlKCJjZHMtdmVyc2lvbiIsd2luZG93LkNEUy5fdmVyc2lvbi5qb2luKCIgIikpKSx3aW5kb3cuQ0RTLl92ZXJzaW9uLmxlbmd0aD4xJiZSTS53YXJuKCJSdW5uaW5nIG1vcmUgdGhhbiBvbmUg''@;'; put 'put ''dmVyc2lvbiBvZiBDbGFyaXR5IGNhbiBjYXVzZSB1bmV4cGVjdGVkIGlzc3Vlcy4gUGxlYXNlIGVuc3VyZSBvbmx5IG9uZSB2ZXJzaW9uIGlzIGxvYWRlZC4iKX0oKSx3aW5kb3cuQ0RTLl9pc1N0YXRlUHJveGllZHx8KHdpbmRvdy5DRFMuX2lzU3RhdGVQcm94aWVkPSEwLHdpbmRvdy5DRFMu''@;'; put 'put ''X3N0YXRlPW5ldyBQcm94eSh3aW5kb3cuQ0RTLl9zdGF0ZSx7c2V0OihjLGwsYSk9Pntjb25zdCBkPXtrZXk6bCxwcmV2OndpbmRvdy5DRFMuX3N0YXRlW2xdLGN1cnJlbnQ6YX07cmV0dXJuIGNbbF09YSxkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiQ0RTX1NUQVRF''@;'; put 'put ''X1VQREFURSIse2RldGFpbDpkfSkpLCEwfX0pKSl9ZnVuY3Rpb24gZXNlKCl7cmV0dXJue3ZlcnNpb25zOndpbmRvdy5DRFMuX3ZlcnNpb24sZW52aXJvbm1lbnQ6d2luZG93LkNEUy5lbnZpcm9ubWVudCx1c2VyQWdlbnQ6bmF2aWdhdG9yLnVzZXJBZ2VudCxzdXBwb3J0czp3aW5kb3cuQ0RT''@;'; put 'put ''Ll9zdXBwb3J0cyxhbmd1bGFyVmVyc2lvbjpXYWUoITEpLGFuZ3VsYXJKU1ZlcnNpb246JENlKCExKSxyZWFjdFZlcnNpb246WWFlKCExKSx2dWVWZXJzaW9uOkdhZSghMSksc3RhdGU6ey4uLndpbmRvdy5DRFMuX3N0YXRlLGljb25SZWdpc3RyeTpPYmplY3Qua2V5cyh3aW5kb3cuQ0RTLl9z''@;'; put 'put ''dGF0ZS5pY29uUmVnaXN0cnkpLG1vdGlvblJlZ2lzdHJ5Ok9iamVjdC5rZXlzKHdpbmRvdy5DRFMuX3N0YXRlLm1vdGlvblJlZ2lzdHJ5KSxmb2N1c1RyYXBSZWdpc3RyeTpPYmplY3Qua2V5cyh3aW5kb3cuQ0RTLl9zdGF0ZS5mb2N1c1RyYXBJdGVtcy5tYXAoYz0+Yy5mb2N1c1RyYXBJZCkp''@;'; put 'put ''fX19ZnVuY3Rpb24gdFNlKCl7Uk0ubG9nKEpTT04uc3RyaW5naWZ5KGVzZSgpLG51bGwsMikpfWNvbnN0IG5TZT1TYWUoMywoYyxsLGEpPT57IWZ1bmN0aW9uIEdDZShjLGwpe3JldHVybiBsfHwobD13aW5kb3cmJndpbmRvdy5jdXN0b21FbGVtZW50cyksIWx8fCEhbC5nZXQoYyl9KGMpfHxm''@;'; put 'put ''dW5jdGlvbiBLQ2UoKXtyZXR1cm4gd2luZG93Py5sb2NhdGlvbj8uaHJlZj8uaW5jbHVkZXMoImxvY2FsaG9zdDo2MDA2Iil9KCk/KGEuZGVmaW5lKGMsbCksUWFlKCksd2luZG93JiYhT2JqZWN0LmtleXMod2luZG93LkNEUy5fc3RhdGUuZWxlbWVudFJlZ2lzdHJ5KS5zb21lKGQ9PmQ9PT1j''@;'; put 'put ''KSYmKHdpbmRvdy5DRFMuX3N0YXRlLmVsZW1lbnRSZWdpc3RyeT17Li4ud2luZG93LkNEUy5fc3RhdGUuZWxlbWVudFJlZ2lzdHJ5LFtjXTp7fX0pKTpSTS53YXJuKGMrIiBoYXMgYWxyZWFkeSBiZWVuIHJlZ2lzdGVyZWQiKX0pO2Z1bmN0aW9uIEhmKGMsbCxhLGQpe3ZhciB2LGg9YXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aCxmPWg8Mz9sOm51bGw9PT1kP2Q9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihsLGEpOmQ7aWYoIm9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSlmPVJlZmxlY3QuZGVjb3JhdGUoYyxsLGEsZCk7ZWxz''@;'; put 'put ''ZSBmb3IodmFyIE09Yy5sZW5ndGgtMTtNPj0wO00tLSkodj1jW01dKSYmKGY9KGg8Mz92KGYpOmg+Mz92KGwsYSxmKTp2KGwsYSkpfHxmKTtyZXR1cm4gaD4zJiZmJiZPYmplY3QuZGVmaW5lUHJvcGVydHkobCxhLGYpLGZ9ZnVuY3Rpb24gZW0oYyl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBl''@;'; put 'put ''bT8odGhpcy52PWMsdGhpcyk6bmV3IGVtKGMpfWZ1bmN0aW9uIGlzZShjKXtpZighU3ltYm9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIGEsbD1jW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTtyZXR1''@;'; put 'put ''cm4gbD9sLmNhbGwoYyk6KGM9ZnVuY3Rpb24gcFooYyl7dmFyIGw9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLml0ZXJhdG9yLGE9bCYmY1tsXSxkPTA7aWYoYSlyZXR1cm4gYS5jYWxsKGMpO2lmKGMmJiJudW1iZXIiPT10eXBlb2YgYy5sZW5ndGgpcmV0dXJue25leHQ6ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gYyYmZD49Yy5sZW5ndGgmJihjPXZvaWQgMCkse3ZhbHVlOmMmJmNbZCsrXSxkb25lOiFjfX19O3Rocm93IG5ldyBUeXBlRXJyb3IobD8iT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS4iOiJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIil9KGMpLGE9e30sZCgi''@;'; put 'put ''bmV4dCIpLGQoInRocm93IiksZCgicmV0dXJuIiksYVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sYSk7ZnVuY3Rpb24gZChmKXthW2ZdPWNbZl0mJmZ1bmN0aW9uKHYpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihNLEQpeyFmdW5jdGlvbiBoKGYs''@;'; put 'put ''dixNLEQpe1Byb21pc2UucmVzb2x2ZShEKS50aGVuKGZ1bmN0aW9uKFope2Yoe3ZhbHVlOlosZG9uZTpNfSl9LHYpfShNLEQsKHY9Y1tmXSh2KSkuZG9uZSx2LnZhbHVlKX0pfX19ImZ1bmN0aW9uIj09dHlwZW9mIFN1cHByZXNzZWRFcnJvciYmU3VwcHJlc3NlZEVycm9yO2xldCBvc2U9ITE7''@;'; put 'put ''ZnVuY3Rpb24ga1NlKGMpe2lmKChjPU1hdGgudHJ1bmMoYyl8fDApPDAmJihjKz10aGlzLmxlbmd0aCksIShjPDB8fGM+PXRoaXMubGVuZ3RoKSlyZXR1cm4gdGhpc1tjXX1pZighb3NlKXtvc2U9ITA7Y29uc3QgYz1SZWZsZWN0LmdldFByb3RvdHlwZU9mKEludDhBcnJheSk7Zm9yKGNvbnN0''@;'; put 'put ''IGwgb2ZbQXJyYXksU3RyaW5nLGNdKU9iamVjdC5kZWZpbmVQcm9wZXJ0eShsLnByb3RvdHlwZSwiYXQiLHt2YWx1ZTprU2Usd3JpdGFibGU6ITAsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KX1sZXQgYXNlPSExLHNzZT0hMTtmdW5jdGlvbiBsc2UoYyxsLGEpe09iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eShjLGEse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShsKT90aGlzLmdldEF0dHJpYnV0ZShsKTpudWxsfSxzZXQ6ZnVuY3Rpb24oZCl7bnVsbCE9PWQ/dGhpcy5zZXRBdHRyaWJ1dGUobCxkKTp0''@;'; put 'put ''aGlzLnJlbW92ZUF0dHJpYnV0ZShsKX19KX1hc2V8fEVsZW1lbnQucHJvdG90eXBlLmhhc093blByb3BlcnR5KCJyb2xlIil8fChsc2UoRWxlbWVudC5wcm90b3R5cGUsInJvbGUiLCJyb2xlIiksYXNlPSEwKSxzc2V8fEVsZW1lbnQucHJvdG90eXBlLmhhc093blByb3BlcnR5KCJhcmlhTGFi''@;'; put 'put ''ZWwiKXx8KHNzZT0hMCxbIkFjdGl2ZURlc2NlbmRhbnQiLCJBdG9taWMiLCJBdXRvQ29tcGxldGUiLCJCdXN5IiwiQ2hlY2tlZCIsIkNvbENvdW50IiwiQ29sSW5kZXgiLCJDb2xTcGFuIiwiQ29udHJvbHMiLCJDdXJyZW50IiwiRGVzY3JpYmVkQnkiLCJEZXRhaWxzIiwiRGlzYWJsZWQiLCJF''@;'; put 'put ''cnJvck1lc3NhZ2UiLCJFeHBhbmRlZCIsIkZsb3dUbyIsIkhhc1BvcHVwIiwiSGlkZGVuIiwiSW52YWxpZCIsIktleVNob3J0Y3V0cyIsIkxhYmVsIiwiTGFiZWxsZWRCeSIsIkxldmVsIiwiTGl2ZSIsIk1vZGFsIiwiTXVsdGlMaW5lIiwiTXVsdGlTZWxlY3RhYmxlIiwiT3JpZW50YXRpb24i''@;'; put 'put ''LCJPd25zIiwiUGxhY2Vob2xkZXIiLCJQb3NJblNldCIsIlByZXNzZWQiLCJSZWFkT25seSIsIlJlbGV2YW50IiwiUmVxdWlyZWQiLCJSb2xlRGVzY3JpcHRpb24iLCJSb3dDb3VudCIsIlJvd0luZGV4IiwiUm93U3BhbiIsIlNlbGVjdGVkIiwiU2V0U2l6ZSIsIlNvcnQiLCJWYWx1ZU1heCIs''@;'; put 'put ''IlZhbHVlTWluIiwiVmFsdWVOb3ciLCJWYWx1ZVRleHQiXS5mb3JFYWNoKGM9PmxzZShFbGVtZW50LnByb3RvdHlwZSwiYXJpYS0iK2MudG9Mb3dlckNhc2UoKSwiYXJpYSIrYykpKTtjb25zdCBfUj13aW5kb3csbVo9X1IuU2hhZG93Um9vdCYmKHZvaWQgMD09PV9SLlNoYWR5Q1NTfHxfUi5T''@;'; put 'put ''aGFkeUNTUy5uYXRpdmVTaGFkb3cpJiYiYWRvcHRlZFN0eWxlU2hlZXRzImluIERvY3VtZW50LnByb3RvdHlwZSYmInJlcGxhY2UiaW4gQ1NTU3R5bGVTaGVldC5wcm90b3R5cGUsdlo9U3ltYm9sKCksY3NlPW5ldyBXZWFrTWFwO2NsYXNzIHVzZXtjb25zdHJ1Y3RvcihsLGEsZCl7aWYodGhp''@;'; put 'put ''cy5fJGNzc1Jlc3VsdCQ9ITAsZCE9PXZaKXRocm93IEVycm9yKCJDU1NSZXN1bHQgaXMgbm90IGNvbnN0cnVjdGFibGUuIFVzZSBgdW5zYWZlQ1NTYCBvciBgY3NzYCBpbnN0ZWFkLiIpO3RoaXMuY3NzVGV4dD1sLHRoaXMudD1hfWdldCBzdHlsZVNoZWV0KCl7bGV0IGw9dGhpcy5vO2NvbnN0''@;'; put 'put ''IGE9dGhpcy50O2lmKG1aJiZ2b2lkIDA9PT1sKXtjb25zdCBkPXZvaWQgMCE9PWEmJjE9PT1hLmxlbmd0aDtkJiYobD1jc2UuZ2V0KGEpKSx2b2lkIDA9PT1sJiYoKHRoaXMubz1sPW5ldyBDU1NTdHlsZVNoZWV0KS5yZXBsYWNlU3luYyh0aGlzLmNzc1RleHQpLGQmJmNzZS5zZXQoYSxsKSl9''@;'; put 'put ''cmV0dXJuIGx9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5jc3NUZXh0fX1jb25zdCBkc2U9KGMsLi4ubCk9Pntjb25zdCBhPTE9PT1jLmxlbmd0aD9jWzBdOmwucmVkdWNlKChkLGgsZik9PmQrKHY9PntpZighMD09PXYuXyRjc3NSZXN1bHQkKXJldHVybiB2LmNzc1RleHQ7aWYoIm51bWJlciI9''@;'; put 'put ''PXR5cGVvZiB2KXJldHVybiB2O3Rocm93IEVycm9yKCJWYWx1ZSBwYXNzZWQgdG8gJ2NzcycgZnVuY3Rpb24gbXVzdCBiZSBhICdjc3MnIGZ1bmN0aW9uIHJlc3VsdDogIit2KyIuIFVzZSAndW5zYWZlQ1NTJyB0byBwYXNzIG5vbi1saXRlcmFsIHZhbHVlcywgYnV0IHRha2UgY2FyZSB0byBl''@;'; put 'put ''bnN1cmUgcGFnZSBzZWN1cml0eS4iKX0pKGgpK2NbZisxXSxjWzBdKTtyZXR1cm4gbmV3IHVzZShhLGMsdlopfSxoc2U9bVo/Yz0+YzpjPT5jIGluc3RhbmNlb2YgQ1NTU3R5bGVTaGVldD8obD0+e2xldCBhPSIiO2Zvcihjb25zdCBkIG9mIGwuY3NzUnVsZXMpYSs9ZC5jc3NUZXh0O3JldHVy''@;'; put 'put ''bihjPT5uZXcgdXNlKCJzdHJpbmciPT10eXBlb2YgYz9jOmMrIiIsdm9pZCAwLHZaKSkoYSl9KShjKTpjO3ZhciBiWjtjb25zdCB3Uj13aW5kb3csZnNlPXdSLnRydXN0ZWRUeXBlcyxSU2U9ZnNlP2ZzZS5lbXB0eVNjcmlwdDoiIixwc2U9d1IucmVhY3RpdmVFbGVtZW50UG9seWZpbGxTdXBw''@;'; put 'put ''b3J0LHlaPXt0b0F0dHJpYnV0ZShjLGwpe3N3aXRjaChsKXtjYXNlIEJvb2xlYW46Yz1jP1JTZTpudWxsO2JyZWFrO2Nhc2UgT2JqZWN0OmNhc2UgQXJyYXk6Yz1udWxsPT1jP2M6SlNPTi5zdHJpbmdpZnkoYyl9cmV0dXJuIGN9LGZyb21BdHRyaWJ1dGUoYyxsKXtsZXQgYT1jO3N3aXRjaChs''@;'; put 'put ''KXtjYXNlIEJvb2xlYW46YT1udWxsIT09YzticmVhaztjYXNlIE51bWJlcjphPW51bGw9PT1jP251bGw6TnVtYmVyKGMpO2JyZWFrO2Nhc2UgT2JqZWN0OmNhc2UgQXJyYXk6dHJ5e2E9SlNPTi5wYXJzZShjKX1jYXRjaHthPW51bGx9fXJldHVybiBhfX0sZ3NlPShjLGwpPT5sIT09YyYmKGw9''@;'; put 'put ''PWx8fGM9PWMpLF9aPXthdHRyaWJ1dGU6ITAsdHlwZTpTdHJpbmcsY29udmVydGVyOnlaLHJlZmxlY3Q6ITEsaGFzQ2hhbmdlZDpnc2V9LHdaPSJmaW5hbGl6ZWQiO2NsYXNzIFpiIGV4dGVuZHMgSFRNTEVsZW1lbnR7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuXyRFaT1uZXcgTWFwLHRo''@;'; put 'put ''aXMuaXNVcGRhdGVQZW5kaW5nPSExLHRoaXMuaGFzVXBkYXRlZD0hMSx0aGlzLl8kRWw9bnVsbCx0aGlzLl8kRXUoKX1zdGF0aWMgYWRkSW5pdGlhbGl6ZXIobCl7dmFyIGE7dGhpcy5maW5hbGl6ZSgpLChudWxsIT09KGE9dGhpcy5oKSYmdm9pZCAwIT09YT9hOnRoaXMuaD1bXSkucHVzaChs''@;'; put 'put ''KX1zdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpe3RoaXMuZmluYWxpemUoKTtjb25zdCBsPVtdO3JldHVybiB0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzLmZvckVhY2goKGEsZCk9Pntjb25zdCBoPXRoaXMuXyRFcChkLGEpO3ZvaWQgMCE9PWgmJih0aGlzLl8kRXYuc2V0KGgsZCksbC5w''@;'; put 'put ''dXNoKGgpKX0pLGx9c3RhdGljIGNyZWF0ZVByb3BlcnR5KGwsYT1fWil7aWYoYS5zdGF0ZSYmKGEuYXR0cmlidXRlPSExKSx0aGlzLmZpbmFsaXplKCksdGhpcy5lbGVtZW50UHJvcGVydGllcy5zZXQobCxhKSwhYS5ub0FjY2Vzc29yJiYhdGhpcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHko''@;'; put 'put ''bCkpe2NvbnN0IGQ9InN5bWJvbCI9PXR5cGVvZiBsP1N5bWJvbCgpOiJfXyIrbCxoPXRoaXMuZ2V0UHJvcGVydHlEZXNjcmlwdG9yKGwsZCxhKTt2b2lkIDAhPT1oJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcy5wcm90b3R5cGUsbCxoKX19c3RhdGljIGdldFByb3BlcnR5RGVzY3JpcHRv''@;'; put 'put ''cihsLGEsZCl7cmV0dXJue2dldCgpe3JldHVybiB0aGlzW2FdfSxzZXQoaCl7Y29uc3QgZj10aGlzW2xdO3RoaXNbYV09aCx0aGlzLnJlcXVlc3RVcGRhdGUobCxmLGQpfSxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMH19c3RhdGljIGdldFByb3BlcnR5T3B0aW9ucyhsKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5lbGVtZW50UHJvcGVydGllcy5nZXQobCl8fF9afXN0YXRpYyBmaW5hbGl6ZSgpe2lmKHRoaXMuaGFzT3duUHJvcGVydHkod1opKXJldHVybiExO3RoaXNbd1pdPSEwO2NvbnN0IGw9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpO2lmKGwuZmluYWxpemUoKSx2b2lkIDAhPT1sLmgm''@;'; put 'put ''Jih0aGlzLmg9Wy4uLmwuaF0pLHRoaXMuZWxlbWVudFByb3BlcnRpZXM9bmV3IE1hcChsLmVsZW1lbnRQcm9wZXJ0aWVzKSx0aGlzLl8kRXY9bmV3IE1hcCx0aGlzLmhhc093blByb3BlcnR5KCJwcm9wZXJ0aWVzIikpe2NvbnN0IGE9dGhpcy5wcm9wZXJ0aWVzLGQ9Wy4uLk9iamVjdC5nZXRP''@;'; put 'put ''d25Qcm9wZXJ0eU5hbWVzKGEpLC4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoYSldO2Zvcihjb25zdCBoIG9mIGQpdGhpcy5jcmVhdGVQcm9wZXJ0eShoLGFbaF0pfXJldHVybiB0aGlzLmVsZW1lbnRTdHlsZXM9dGhpcy5maW5hbGl6ZVN0eWxlcyh0aGlzLnN0eWxlcyksITB9c3Rh''@;'; put 'put ''dGljIGZpbmFsaXplU3R5bGVzKGwpe2NvbnN0IGE9W107aWYoQXJyYXkuaXNBcnJheShsKSl7Y29uc3QgZD1uZXcgU2V0KGwuZmxhdCgxLzApLnJldmVyc2UoKSk7Zm9yKGNvbnN0IGggb2YgZClhLnVuc2hpZnQoaHNlKGgpKX1lbHNlIHZvaWQgMCE9PWwmJmEucHVzaChoc2UobCkpO3JldHVy''@;'; put 'put ''biBhfXN0YXRpYyBfJEVwKGwsYSl7Y29uc3QgZD1hLmF0dHJpYnV0ZTtyZXR1cm4hMT09PWQ/dm9pZCAwOiJzdHJpbmciPT10eXBlb2YgZD9kOiJzdHJpbmciPT10eXBlb2YgbD9sLnRvTG93ZXJDYXNlKCk6dm9pZCAwfV8kRXUoKXt2YXIgbDt0aGlzLl8kRV89bmV3IFByb21pc2UoYT0+dGhp''@;'; put 'put ''cy5lbmFibGVVcGRhdGluZz1hKSx0aGlzLl8kQUw9bmV3IE1hcCx0aGlzLl8kRWcoKSx0aGlzLnJlcXVlc3RVcGRhdGUoKSxudWxsPT09KGw9dGhpcy5jb25zdHJ1Y3Rvci5oKXx8dm9pZCAwPT09bHx8bC5mb3JFYWNoKGE9PmEodGhpcykpfWFkZENvbnRyb2xsZXIobCl7dmFyIGEsZDsobnVs''@;'; put 'put ''bCE9PShhPXRoaXMuXyRFUykmJnZvaWQgMCE9PWE/YTp0aGlzLl8kRVM9W10pLnB1c2gobCksdm9pZCAwIT09dGhpcy5yZW5kZXJSb290JiZ0aGlzLmlzQ29ubmVjdGVkJiYobnVsbD09PShkPWwuaG9zdENvbm5lY3RlZCl8fHZvaWQgMD09PWR8fGQuY2FsbChsKSl9cmVtb3ZlQ29udHJvbGxl''@;'; put 'put ''cihsKXt2YXIgYTtudWxsPT09KGE9dGhpcy5fJEVTKXx8dm9pZCAwPT09YXx8YS5zcGxpY2UodGhpcy5fJEVTLmluZGV4T2YobCk+Pj4wLDEpfV8kRWcoKXt0aGlzLmNvbnN0cnVjdG9yLmVsZW1lbnRQcm9wZXJ0aWVzLmZvckVhY2goKGwsYSk9Pnt0aGlzLmhhc093blByb3BlcnR5KGEpJiYo''@;'; put 'put ''dGhpcy5fJEVpLnNldChhLHRoaXNbYV0pLGRlbGV0ZSB0aGlzW2FdKX0pfWNyZWF0ZVJlbmRlclJvb3QoKXt2YXIgbDtjb25zdCBhPW51bGwhPT0obD10aGlzLnNoYWRvd1Jvb3QpJiZ2b2lkIDAhPT1sP2w6dGhpcy5hdHRhY2hTaGFkb3codGhpcy5jb25zdHJ1Y3Rvci5zaGFkb3dSb290T3B0''@;'; put 'put ''aW9ucyk7cmV0dXJuKChjLGwpPT57bVo/Yy5hZG9wdGVkU3R5bGVTaGVldHM9bC5tYXAoYT0+YSBpbnN0YW5jZW9mIENTU1N0eWxlU2hlZXQ/YTphLnN0eWxlU2hlZXQpOmwuZm9yRWFjaChhPT57Y29uc3QgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpLGg9X1IubGl0Tm9uY2U7''@;'; put 'put ''dm9pZCAwIT09aCYmZC5zZXRBdHRyaWJ1dGUoIm5vbmNlIixoKSxkLnRleHRDb250ZW50PWEuY3NzVGV4dCxjLmFwcGVuZENoaWxkKGQpfSl9KShhLHRoaXMuY29uc3RydWN0b3IuZWxlbWVudFN0eWxlcyksYX1jb25uZWN0ZWRDYWxsYmFjaygpe3ZhciBsO3ZvaWQgMD09PXRoaXMucmVuZGVy''@;'; put 'put ''Um9vdCYmKHRoaXMucmVuZGVyUm9vdD10aGlzLmNyZWF0ZVJlbmRlclJvb3QoKSksdGhpcy5lbmFibGVVcGRhdGluZyghMCksbnVsbD09PShsPXRoaXMuXyRFUyl8fHZvaWQgMD09PWx8fGwuZm9yRWFjaChhPT57dmFyIGQ7cmV0dXJuIG51bGw9PT0oZD1hLmhvc3RDb25uZWN0ZWQpfHx2b2lk''@;'; put 'put ''IDA9PT1kP3ZvaWQgMDpkLmNhbGwoYSl9KX1lbmFibGVVcGRhdGluZyhsKXt9ZGlzY29ubmVjdGVkQ2FsbGJhY2soKXt2YXIgbDtudWxsPT09KGw9dGhpcy5fJEVTKXx8dm9pZCAwPT09bHx8bC5mb3JFYWNoKGE9Pnt2YXIgZDtyZXR1cm4gbnVsbD09PShkPWEuaG9zdERpc2Nvbm5lY3RlZCl8''@;'; put 'put ''fHZvaWQgMD09PWQ/dm9pZCAwOmQuY2FsbChhKX0pfWF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhsLGEsZCl7dGhpcy5fJEFLKGwsZCl9XyRFTyhsLGEsZD1fWil7dmFyIGg7Y29uc3QgZj10aGlzLmNvbnN0cnVjdG9yLl8kRXAobCxkKTtpZih2b2lkIDAhPT1mJiYhMD09PWQucmVmbGVjdCl7''@;'; put 'put ''Y29uc3Qgdj0odm9pZCAwIT09KG51bGw9PT0oaD1kLmNvbnZlcnRlcil8fHZvaWQgMD09PWg/dm9pZCAwOmgudG9BdHRyaWJ1dGUpP2QuY29udmVydGVyOnlaKS50b0F0dHJpYnV0ZShhLGQudHlwZSk7dGhpcy5fJEVsPWwsbnVsbD09dj90aGlzLnJlbW92ZUF0dHJpYnV0ZShmKTp0aGlzLnNl''@;'; put 'put ''dEF0dHJpYnV0ZShmLHYpLHRoaXMuXyRFbD1udWxsfX1fJEFLKGwsYSl7dmFyIGQ7Y29uc3QgaD10aGlzLmNvbnN0cnVjdG9yLGY9aC5fJEV2LmdldChsKTtpZih2b2lkIDAhPT1mJiZ0aGlzLl8kRWwhPT1mKXtjb25zdCB2PWguZ2V0UHJvcGVydHlPcHRpb25zKGYpLE09ImZ1bmN0aW9uIj09''@;'; put 'put ''dHlwZW9mIHYuY29udmVydGVyP3tmcm9tQXR0cmlidXRlOnYuY29udmVydGVyfTp2b2lkIDAhPT0obnVsbD09PShkPXYuY29udmVydGVyKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5mcm9tQXR0cmlidXRlKT92LmNvbnZlcnRlcjp5Wjt0aGlzLl8kRWw9Zix0aGlzW2ZdPU0uZnJvbUF0dHJpYnV0''@;'; put 'put ''ZShhLHYudHlwZSksdGhpcy5fJEVsPW51bGx9fXJlcXVlc3RVcGRhdGUobCxhLGQpe2xldCBoPSEwO3ZvaWQgMCE9PWwmJigoKGQ9ZHx8dGhpcy5jb25zdHJ1Y3Rvci5nZXRQcm9wZXJ0eU9wdGlvbnMobCkpLmhhc0NoYW5nZWR8fGdzZSkodGhpc1tsXSxhKT8odGhpcy5fJEFMLmhhcyhsKXx8''@;'; put 'put ''dGhpcy5fJEFMLnNldChsLGEpLCEwPT09ZC5yZWZsZWN0JiZ0aGlzLl8kRWwhPT1sJiYodm9pZCAwPT09dGhpcy5fJEVDJiYodGhpcy5fJEVDPW5ldyBNYXApLHRoaXMuXyRFQy5zZXQobCxkKSkpOmg9ITEpLCF0aGlzLmlzVXBkYXRlUGVuZGluZyYmaCYmKHRoaXMuXyRFXz10aGlzLl8kRWoo''@;'; put 'put ''KSl9XyRFaigpe3ZhciBsPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2wuaXNVcGRhdGVQZW5kaW5nPSEwO3RyeXt5aWVsZCBsLl8kRV99Y2F0Y2goZCl7UHJvbWlzZS5yZWplY3QoZCl9Y29uc3QgYT1sLnNjaGVkdWxlVXBkYXRlKCk7cmV0dXJuIG51bGwhPWEmJih5aWVsZCBhKSwhbC5p''@;'; put 'put ''c1VwZGF0ZVBlbmRpbmd9KSgpfXNjaGVkdWxlVXBkYXRlKCl7cmV0dXJuIHRoaXMucGVyZm9ybVVwZGF0ZSgpfXBlcmZvcm1VcGRhdGUoKXt2YXIgbDtpZighdGhpcy5pc1VwZGF0ZVBlbmRpbmcpcmV0dXJuO3RoaXMuXyRFaSYmKHRoaXMuXyRFaS5mb3JFYWNoKChoLGYpPT50aGlzW2ZdPWgp''@;'; put 'put ''LHRoaXMuXyRFaT12b2lkIDApO2xldCBhPSExO2NvbnN0IGQ9dGhpcy5fJEFMO3RyeXthPXRoaXMuc2hvdWxkVXBkYXRlKGQpLGE/KHRoaXMud2lsbFVwZGF0ZShkKSxudWxsPT09KGw9dGhpcy5fJEVTKXx8dm9pZCAwPT09bHx8bC5mb3JFYWNoKGg9Pnt2YXIgZjtyZXR1cm4gbnVsbD09PShm''@;'; put 'put ''PWguaG9zdFVwZGF0ZSl8fHZvaWQgMD09PWY/dm9pZCAwOmYuY2FsbChoKX0pLHRoaXMudXBkYXRlKGQpKTp0aGlzLl8kRWsoKX1jYXRjaChoKXt0aHJvdyBhPSExLHRoaXMuXyRFaygpLGh9YSYmdGhpcy5fJEFFKGQpfXdpbGxVcGRhdGUobCl7fV8kQUUobCl7dmFyIGE7bnVsbD09PShhPXRo''@;'; put 'put ''aXMuXyRFUyl8fHZvaWQgMD09PWF8fGEuZm9yRWFjaChkPT57dmFyIGg7cmV0dXJuIG51bGw9PT0oaD1kLmhvc3RVcGRhdGVkKXx8dm9pZCAwPT09aD92b2lkIDA6aC5jYWxsKGQpfSksdGhpcy5oYXNVcGRhdGVkfHwodGhpcy5oYXNVcGRhdGVkPSEwLHRoaXMuZmlyc3RVcGRhdGVkKGwpKSx0''@;'; put 'put ''aGlzLnVwZGF0ZWQobCl9XyRFaygpe3RoaXMuXyRBTD1uZXcgTWFwLHRoaXMuaXNVcGRhdGVQZW5kaW5nPSExfWdldCB1cGRhdGVDb21wbGV0ZSgpe3JldHVybiB0aGlzLmdldFVwZGF0ZUNvbXBsZXRlKCl9Z2V0VXBkYXRlQ29tcGxldGUoKXtyZXR1cm4gdGhpcy5fJEVffXNob3VsZFVwZGF0''@;'; put 'put ''ZShsKXtyZXR1cm4hMH11cGRhdGUobCl7dm9pZCAwIT09dGhpcy5fJEVDJiYodGhpcy5fJEVDLmZvckVhY2goKGEsZCk9PnRoaXMuXyRFTyhkLHRoaXNbZF0sYSkpLHRoaXMuXyRFQz12b2lkIDApLHRoaXMuXyRFaygpfXVwZGF0ZWQobCl7fWZpcnN0VXBkYXRlZChsKXt9fXZhciBDWjtaYlt3''@;'; put 'put ''Wl09ITAsWmIuZWxlbWVudFByb3BlcnRpZXM9bmV3IE1hcCxaYi5lbGVtZW50U3R5bGVzPVtdLFpiLnNoYWRvd1Jvb3RPcHRpb25zPXttb2RlOiJvcGVuIn0scHNlPy4oe1JlYWN0aXZlRWxlbWVudDpaYn0pLChudWxsIT09KGJaPXdSLnJlYWN0aXZlRWxlbWVudFZlcnNpb25zKSYmdm9pZCAw''@;'; put 'put ''IT09Ylo/Ylo6d1IucmVhY3RpdmVFbGVtZW50VmVyc2lvbnM9W10pLnB1c2goIjEuNi4zIik7Y29uc3QgQ1I9d2luZG93LFdiPUNSLnRydXN0ZWRUeXBlcyxtc2U9V2I/V2IuY3JlYXRlUG9saWN5KCJsaXQtaHRtbCIse2NyZWF0ZUhUTUw6Yz0+Y30pOnZvaWQgMCxTUj0iJGxpdCQiLEo0PWBs''@;'; put 'put ''aXQkJHsoTWF0aC5yYW5kb20oKSsiIikuc2xpY2UoOSl9JGAsU1o9Ij8iK0o0LExTZT1gPCR7U1p9PmAsWjg9ZG9jdW1lbnQsTE09KCk9Plo4LmNyZWF0ZUNvbW1lbnQoIiIpLE9NPWM9Pm51bGw9PT1jfHwib2JqZWN0IiE9dHlwZW9mIGMmJiJmdW5jdGlvbiIhPXR5cGVvZiBjLHZzZT1BcnJh''@;'; put 'put ''eS5pc0FycmF5LE1aPSJbIFx0XG5cZlxyXSIsUE09LzwoPzooIS0tfFwvW15hLXpBLVpdKXwoXC8/W2EtekEtWl1bXj5cc10qKXwoXC8/JCkpL2cseXNlPS8tLT4vZyxfc2U9Lz4vZyxXOD1SZWdFeHAoYD58JHtNWn0oPzooW15cXHMiJz49L10rKSgke01afSo9JHtNWn0qKD86W14gXHRcblxm''@;'; put 'put ''XHIiJ1xgPD49XXwoInwnKXwpKXwkKWAsImciKSx3c2U9LycvZyxDc2U9LyIvZyxTc2U9L14oPzpzY3JpcHR8c3R5bGV8dGV4dGFyZWF8dGl0bGUpJC9pLE1zZT1jPT4obCwuLi5hKT0+KHtfJGxpdFR5cGUkOmMsc3RyaW5nczpsLHZhbHVlczphfSksT1NlPU1zZSgxKSxQU2U9TXNlKDIpLFli''@;'; put 'put ''PVN5bWJvbC5mb3IoImxpdC1ub0NoYW5nZSIpLFMwPVN5bWJvbC5mb3IoImxpdC1ub3RoaW5nIikseHNlPW5ldyBXZWFrTWFwLFk4PVo4LmNyZWF0ZVRyZWVXYWxrZXIoWjgsMTI5LG51bGwsITEpO2Z1bmN0aW9uIEVzZShjLGwpe2lmKCFBcnJheS5pc0FycmF5KGMpfHwhYy5oYXNPd25Qcm9w''@;'; put 'put ''ZXJ0eSgicmF3IikpdGhyb3cgRXJyb3IoImludmFsaWQgdGVtcGxhdGUgc3RyaW5ncyBhcnJheSIpO3JldHVybiB2b2lkIDAhPT1tc2U/bXNlLmNyZWF0ZUhUTUwobCk6bH1jbGFzcyBGTXtjb25zdHJ1Y3Rvcih7c3RyaW5nczpsLF8kbGl0VHlwZSQ6YX0sZCl7bGV0IGg7dGhpcy5wYXJ0cz1b''@;'; put 'put ''XTtsZXQgZj0wLHY9MDtjb25zdCBNPWwubGVuZ3RoLTEsRD10aGlzLnBhcnRzLFtaLG5lXT0oKGMsbCk9Pntjb25zdCBhPWMubGVuZ3RoLTEsZD1bXTtsZXQgaCxmPTI9PT1sPyI8c3ZnPiI6IiIsdj1QTTtmb3IobGV0IE09MDtNPGE7TSsrKXtjb25zdCBEPWNbTV07bGV0IFosbmUsY2U9LTEs''@;'; put 'put ''YmU9MDtmb3IoO2JlPEQubGVuZ3RoJiYodi5sYXN0SW5kZXg9YmUsbmU9di5leGVjKEQpLG51bGwhPT1uZSk7KWJlPXYubGFzdEluZGV4LHY9PT1QTT8iIS0tIj09PW5lWzFdP3Y9eXNlOnZvaWQgMCE9PW5lWzFdP3Y9X3NlOnZvaWQgMCE9PW5lWzJdPyhTc2UudGVzdChuZVsyXSkmJihoPVJl''@;'; put 'put ''Z0V4cCgiPC8iK25lWzJdLCJnIikpLHY9VzgpOnZvaWQgMCE9PW5lWzNdJiYodj1XOCk6dj09PVc4PyI+Ij09PW5lWzBdPyh2PWg/P1BNLGNlPS0xKTp2b2lkIDA9PT1uZVsxXT9jZT0tMjooY2U9di5sYXN0SW5kZXgtbmVbMl0ubGVuZ3RoLFo9bmVbMV0sdj12b2lkIDA9PT1uZVszXT9XODon''@;'; put 'put ''Iic9PT1uZVszXT9Dc2U6d3NlKTp2PT09Q3NlfHx2PT09d3NlP3Y9Vzg6dj09PXlzZXx8dj09PV9zZT92PVBNOih2PVc4LGg9dm9pZCAwKTtjb25zdCBFZT12PT09VzgmJmNbTSsxXS5zdGFydHNXaXRoKCIvPiIpPyIgIjoiIjtmKz12PT09UE0/RCtMU2U6Y2U+PTA/KGQucHVzaChaKSxELnNs''@;'; put 'put ''aWNlKDAsY2UpK1NSK0Quc2xpY2UoY2UpK0o0K0VlKTpEK0o0KygtMj09PWNlPyhkLnB1c2godm9pZCAwKSxNKTpFZSl9cmV0dXJuW0VzZShjLGYrKGNbYV18fCI8Pz4iKSsoMj09PWw/Ijwvc3ZnPiI6IiIpKSxkXX0pKGwsYSk7aWYodGhpcy5lbD1GTS5jcmVhdGVFbGVtZW50KFosZCksWTgu''@;'; put 'put ''Y3VycmVudE5vZGU9dGhpcy5lbC5jb250ZW50LDI9PT1hKXtjb25zdCBjZT10aGlzLmVsLmNvbnRlbnQsYmU9Y2UuZmlyc3RDaGlsZDtiZS5yZW1vdmUoKSxjZS5hcHBlbmQoLi4uYmUuY2hpbGROb2Rlcyl9Zm9yKDtudWxsIT09KGg9WTgubmV4dE5vZGUoKSkmJkQubGVuZ3RoPE07KXtpZigx''@;'; put 'put ''PT09aC5ub2RlVHlwZSl7aWYoaC5oYXNBdHRyaWJ1dGVzKCkpe2NvbnN0IGNlPVtdO2Zvcihjb25zdCBiZSBvZiBoLmdldEF0dHJpYnV0ZU5hbWVzKCkpaWYoYmUuZW5kc1dpdGgoU1IpfHxiZS5zdGFydHNXaXRoKEo0KSl7Y29uc3QgRWU9bmVbdisrXTtpZihjZS5wdXNoKGJlKSx2b2lkIDAh''@;'; put 'put ''PT1FZSl7Y29uc3QgQmU9aC5nZXRBdHRyaWJ1dGUoRWUudG9Mb3dlckNhc2UoKStTUikuc3BsaXQoSjQpLHFlPS8oWy4/QF0pPyguKikvLmV4ZWMoRWUpO0QucHVzaCh7dHlwZToxLGluZGV4OmYsbmFtZTpxZVsyXSxzdHJpbmdzOkJlLGN0b3I6Ii4iPT09cWVbMV0/a3NlOiI/Ij09PXFlWzFd''@;'; put 'put ''P0RzZToiQCI9PT1xZVsxXT9Jc2U6SE19KX1lbHNlIEQucHVzaCh7dHlwZTo2LGluZGV4OmZ9KX1mb3IoY29uc3QgYmUgb2YgY2UpaC5yZW1vdmVBdHRyaWJ1dGUoYmUpfWlmKFNzZS50ZXN0KGgudGFnTmFtZSkpe2NvbnN0IGNlPWgudGV4dENvbnRlbnQuc3BsaXQoSjQpLGJlPWNlLmxlbmd0''@;'; put 'put ''aC0xO2lmKGJlPjApe2gudGV4dENvbnRlbnQ9V2I/V2IuZW1wdHlTY3JpcHQ6IiI7Zm9yKGxldCBFZT0wO0VlPGJlO0VlKyspaC5hcHBlbmQoY2VbRWVdLExNKCkpLFk4Lm5leHROb2RlKCksRC5wdXNoKHt0eXBlOjIsaW5kZXg6KytmfSk7aC5hcHBlbmQoY2VbYmVdLExNKCkpfX19ZWxzZSBp''@;'; put 'put ''Zig4PT09aC5ub2RlVHlwZSlpZihoLmRhdGE9PT1TWilELnB1c2goe3R5cGU6MixpbmRleDpmfSk7ZWxzZXtsZXQgY2U9LTE7Zm9yKDstMSE9PShjZT1oLmRhdGEuaW5kZXhPZihKNCxjZSsxKSk7KUQucHVzaCh7dHlwZTo3LGluZGV4OmZ9KSxjZSs9SjQubGVuZ3RoLTF9ZisrfX1zdGF0aWMg''@;'; put 'put ''Y3JlYXRlRWxlbWVudChsLGEpe2NvbnN0IGQ9WjguY3JlYXRlRWxlbWVudCgidGVtcGxhdGUiKTtyZXR1cm4gZC5pbm5lckhUTUw9bCxkfX1mdW5jdGlvbiBHOChjLGwsYT1jLGQpe3ZhciBoLGYsdixNO2lmKGw9PT1ZYilyZXR1cm4gbDtsZXQgRD12b2lkIDAhPT1kP251bGw9PT0oaD1hLl8k''@;'; put 'put ''Q28pfHx2b2lkIDA9PT1oP3ZvaWQgMDpoW2RdOmEuXyRDbDtjb25zdCBaPU9NKGwpP3ZvaWQgMDpsLl8kbGl0RGlyZWN0aXZlJDtyZXR1cm4gRD8uY29uc3RydWN0b3IhPT1aJiYobnVsbD09PShmPUQ/Ll8kQU8pfHx2b2lkIDA9PT1mfHxmLmNhbGwoRCwhMSksdm9pZCAwPT09Wj9EPXZvaWQg''@;'; put 'put ''MDooRD1uZXcgWihjKSxELl8kQVQoYyxhLGQpKSx2b2lkIDAhPT1kPyhudWxsIT09KHY9KE09YSkuXyRDbykmJnZvaWQgMCE9PXY/djpNLl8kQ289W10pW2RdPUQ6YS5fJENsPUQpLHZvaWQgMCE9PUQmJihsPUc4KGMsRC5fJEFTKGMsbC52YWx1ZXMpLEQsZCkpLGx9Y2xhc3MgQXNle2NvbnN0''@;'; put 'put ''cnVjdG9yKGwsYSl7dGhpcy5fJEFWPVtdLHRoaXMuXyRBTj12b2lkIDAsdGhpcy5fJEFEPWwsdGhpcy5fJEFNPWF9Z2V0IHBhcmVudE5vZGUoKXtyZXR1cm4gdGhpcy5fJEFNLnBhcmVudE5vZGV9Z2V0IF8kQVUoKXtyZXR1cm4gdGhpcy5fJEFNLl8kQVV9dShsKXt2YXIgYTtjb25zdHtlbDp7''@;'; put 'put ''Y29udGVudDpkfSxwYXJ0czpofT10aGlzLl8kQUQsZj0obnVsbCE9PShhPWw/LmNyZWF0aW9uU2NvcGUpJiZ2b2lkIDAhPT1hP2E6WjgpLmltcG9ydE5vZGUoZCwhMCk7WTguY3VycmVudE5vZGU9ZjtsZXQgdj1ZOC5uZXh0Tm9kZSgpLE09MCxEPTAsWj1oWzBdO2Zvcig7dm9pZCAwIT09Wjsp''@;'; put 'put ''e2lmKE09PT1aLmluZGV4KXtsZXQgbmU7Mj09PVoudHlwZT9uZT1uZXcgR2Iodix2Lm5leHRTaWJsaW5nLHRoaXMsbCk6MT09PVoudHlwZT9uZT1uZXcgWi5jdG9yKHYsWi5uYW1lLFouc3RyaW5ncyx0aGlzLGwpOjY9PT1aLnR5cGUmJihuZT1uZXcgUnNlKHYsdGhpcyxsKSksdGhpcy5fJEFW''@;'; put 'put ''LnB1c2gobmUpLFo9aFsrK0RdfU0hPT1aPy5pbmRleCYmKHY9WTgubmV4dE5vZGUoKSxNKyspfXJldHVybiBZOC5jdXJyZW50Tm9kZT1aOCxmfXYobCl7bGV0IGE9MDtmb3IoY29uc3QgZCBvZiB0aGlzLl8kQVYpdm9pZCAwIT09ZCYmKHZvaWQgMCE9PWQuc3RyaW5ncz8oZC5fJEFJKGwsZCxh''@;'; put 'put ''KSxhKz1kLnN0cmluZ3MubGVuZ3RoLTIpOmQuXyRBSShsW2FdKSksYSsrfX1jbGFzcyBHYntjb25zdHJ1Y3RvcihsLGEsZCxoKXt2YXIgZjt0aGlzLnR5cGU9Mix0aGlzLl8kQUg9UzAsdGhpcy5fJEFOPXZvaWQgMCx0aGlzLl8kQUE9bCx0aGlzLl8kQUI9YSx0aGlzLl8kQU09ZCx0aGlzLm9w''@;'; put 'put ''dGlvbnM9aCx0aGlzLl8kQ3A9bnVsbD09PShmPWg/LmlzQ29ubmVjdGVkKXx8dm9pZCAwPT09Znx8Zn1nZXQgXyRBVSgpe3ZhciBsLGE7cmV0dXJuIG51bGwhPT0oYT1udWxsPT09KGw9dGhpcy5fJEFNKXx8dm9pZCAwPT09bD92b2lkIDA6bC5fJEFVKSYmdm9pZCAwIT09YT9hOnRoaXMuXyRD''@;'; put 'put ''cH1nZXQgcGFyZW50Tm9kZSgpe2xldCBsPXRoaXMuXyRBQS5wYXJlbnROb2RlO2NvbnN0IGE9dGhpcy5fJEFNO3JldHVybiB2b2lkIDAhPT1hJiYxMT09PWw/Lm5vZGVUeXBlJiYobD1hLnBhcmVudE5vZGUpLGx9Z2V0IHN0YXJ0Tm9kZSgpe3JldHVybiB0aGlzLl8kQUF9Z2V0IGVuZE5vZGUo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fJEFCfV8kQUkobCxhPXRoaXMpe2w9RzgodGhpcyxsLGEpLE9NKGwpP2w9PT1TMHx8bnVsbD09bHx8IiI9PT1sPyh0aGlzLl8kQUghPT1TMCYmdGhpcy5fJEFSKCksdGhpcy5fJEFIPVMwKTpsIT09dGhpcy5fJEFIJiZsIT09WWImJnRoaXMuXyhsKTp2b2lkIDAhPT1s''@;'; put 'put ''Ll8kbGl0VHlwZSQ/dGhpcy5nKGwpOnZvaWQgMCE9PWwubm9kZVR5cGU/dGhpcy4kKGwpOihjPT52c2UoYyl8fCJmdW5jdGlvbiI9PXR5cGVvZiBjPy5bU3ltYm9sLml0ZXJhdG9yXSkobCk/dGhpcy5UKGwpOnRoaXMuXyhsKX1rKGwpe3JldHVybiB0aGlzLl8kQUEucGFyZW50Tm9kZS5pbnNl''@;'; put 'put ''cnRCZWZvcmUobCx0aGlzLl8kQUIpfSQobCl7dGhpcy5fJEFIIT09bCYmKHRoaXMuXyRBUigpLHRoaXMuXyRBSD10aGlzLmsobCkpfV8obCl7dGhpcy5fJEFIIT09UzAmJk9NKHRoaXMuXyRBSCk/dGhpcy5fJEFBLm5leHRTaWJsaW5nLmRhdGE9bDp0aGlzLiQoWjguY3JlYXRlVGV4dE5vZGUo''@;'; put 'put ''bCkpLHRoaXMuXyRBSD1sfWcobCl7dmFyIGE7Y29uc3R7dmFsdWVzOmQsXyRsaXRUeXBlJDpofT1sLGY9Im51bWJlciI9PXR5cGVvZiBoP3RoaXMuXyRBQyhsKToodm9pZCAwPT09aC5lbCYmKGguZWw9Rk0uY3JlYXRlRWxlbWVudChFc2UoaC5oLGguaFswXSksdGhpcy5vcHRpb25zKSksaCk7''@;'; put 'put ''aWYoKG51bGw9PT0oYT10aGlzLl8kQUgpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLl8kQUQpPT09Zil0aGlzLl8kQUgudihkKTtlbHNle2NvbnN0IHY9bmV3IEFzZShmLHRoaXMpLE09di51KHRoaXMub3B0aW9ucyk7di52KGQpLHRoaXMuJChNKSx0aGlzLl8kQUg9dn19XyRBQyhsKXtsZXQgYT14''@;'; put 'put ''c2UuZ2V0KGwuc3RyaW5ncyk7cmV0dXJuIHZvaWQgMD09PWEmJnhzZS5zZXQobC5zdHJpbmdzLGE9bmV3IEZNKGwpKSxhfVQobCl7dnNlKHRoaXMuXyRBSCl8fCh0aGlzLl8kQUg9W10sdGhpcy5fJEFSKCkpO2NvbnN0IGE9dGhpcy5fJEFIO2xldCBkLGg9MDtmb3IoY29uc3QgZiBvZiBsKWg9''@;'; put 'put ''PT1hLmxlbmd0aD9hLnB1c2goZD1uZXcgR2IodGhpcy5rKExNKCkpLHRoaXMuayhMTSgpKSx0aGlzLHRoaXMub3B0aW9ucykpOmQ9YVtoXSxkLl8kQUkoZiksaCsrO2g8YS5sZW5ndGgmJih0aGlzLl8kQVIoZCYmZC5fJEFCLm5leHRTaWJsaW5nLGgpLGEubGVuZ3RoPWgpfV8kQVIobD10aGlz''@;'; put 'put ''Ll8kQUEubmV4dFNpYmxpbmcsYSl7dmFyIGQ7Zm9yKG51bGw9PT0oZD10aGlzLl8kQVApfHx2b2lkIDA9PT1kfHxkLmNhbGwodGhpcywhMSwhMCxhKTtsJiZsIT09dGhpcy5fJEFCOyl7Y29uc3QgaD1sLm5leHRTaWJsaW5nO2wucmVtb3ZlKCksbD1ofX1zZXRDb25uZWN0ZWQobCl7dmFyIGE7''@;'; put 'put ''dm9pZCAwPT09dGhpcy5fJEFNJiYodGhpcy5fJENwPWwsbnVsbD09PShhPXRoaXMuXyRBUCl8fHZvaWQgMD09PWF8fGEuY2FsbCh0aGlzLGwpKX19Y2xhc3MgSE17Y29uc3RydWN0b3IobCxhLGQsaCxmKXt0aGlzLnR5cGU9MSx0aGlzLl8kQUg9UzAsdGhpcy5fJEFOPXZvaWQgMCx0aGlzLmVs''@;'; put 'put ''ZW1lbnQ9bCx0aGlzLm5hbWU9YSx0aGlzLl8kQU09aCx0aGlzLm9wdGlvbnM9ZixkLmxlbmd0aD4yfHwiIiE9PWRbMF18fCIiIT09ZFsxXT8odGhpcy5fJEFIPUFycmF5KGQubGVuZ3RoLTEpLmZpbGwobmV3IFN0cmluZyksdGhpcy5zdHJpbmdzPWQpOnRoaXMuXyRBSD1TMH1nZXQgdGFnTmFt''@;'; put 'put ''ZSgpe3JldHVybiB0aGlzLmVsZW1lbnQudGFnTmFtZX1nZXQgXyRBVSgpe3JldHVybiB0aGlzLl8kQU0uXyRBVX1fJEFJKGwsYT10aGlzLGQsaCl7Y29uc3QgZj10aGlzLnN0cmluZ3M7bGV0IHY9ITE7aWYodm9pZCAwPT09ZilsPUc4KHRoaXMsbCxhLDApLHY9IU9NKGwpfHxsIT09dGhpcy5f''@;'; put 'put ''JEFIJiZsIT09WWIsdiYmKHRoaXMuXyRBSD1sKTtlbHNle2NvbnN0IE09bDtsZXQgRCxaO2ZvcihsPWZbMF0sRD0wO0Q8Zi5sZW5ndGgtMTtEKyspWj1HOCh0aGlzLE1bZCtEXSxhLEQpLFo9PT1ZYiYmKFo9dGhpcy5fJEFIW0RdKSx2fHwodj0hT00oWil8fFohPT10aGlzLl8kQUhbRF0pLFo9''@;'; put 'put ''PT1TMD9sPVMwOmwhPT1TMCYmKGwrPShaPz8iIikrZltEKzFdKSx0aGlzLl8kQUhbRF09Wn12JiYhaCYmdGhpcy5qKGwpfWoobCl7bD09PVMwP3RoaXMuZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUodGhpcy5uYW1lKTp0aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKHRoaXMubmFtZSxsPz8iIil9''@;'; put 'put ''fWNsYXNzIGtzZSBleHRlbmRzIEhNe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnR5cGU9M31qKGwpe3RoaXMuZWxlbWVudFt0aGlzLm5hbWVdPWw9PT1TMD92b2lkIDA6bH19Y29uc3QgRlNlPVdiP1diLmVtcHR5U2NyaXB0OiIiO2NsYXNzIERzZSBleHRlbmRzIEhN''@;'; put 'put ''e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLnR5cGU9NH1qKGwpe2wmJmwhPT1TMD90aGlzLmVsZW1lbnQuc2V0QXR0cmlidXRlKHRoaXMubmFtZSxGU2UpOnRoaXMuZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUodGhpcy5uYW1lKX19Y2xhc3MgSXNlIGV4dGVuZHMgSE17''@;'; put 'put ''Y29uc3RydWN0b3IobCxhLGQsaCxmKXtzdXBlcihsLGEsZCxoLGYpLHRoaXMudHlwZT01fV8kQUkobCxhPXRoaXMpe3ZhciBkO2lmKChsPW51bGwhPT0oZD1HOCh0aGlzLGwsYSwwKSkmJnZvaWQgMCE9PWQ/ZDpTMCk9PT1ZYilyZXR1cm47Y29uc3QgaD10aGlzLl8kQUgsZj1sPT09UzAmJmgh''@;'; put 'put ''PT1TMHx8bC5jYXB0dXJlIT09aC5jYXB0dXJlfHxsLm9uY2UhPT1oLm9uY2V8fGwucGFzc2l2ZSE9PWgucGFzc2l2ZSx2PWwhPT1TMCYmKGg9PT1TMHx8Zik7ZiYmdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5uYW1lLHRoaXMsaCksdiYmdGhpcy5lbGVtZW50LmFkZEV2''@;'; put 'put ''ZW50TGlzdGVuZXIodGhpcy5uYW1lLHRoaXMsbCksdGhpcy5fJEFIPWx9aGFuZGxlRXZlbnQobCl7dmFyIGEsZDsiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5fJEFIP3RoaXMuXyRBSC5jYWxsKG51bGwhPT0oZD1udWxsPT09KGE9dGhpcy5vcHRpb25zKXx8dm9pZCAwPT09YT92b2lkIDA6YS5o''@;'; put 'put ''b3N0KSYmdm9pZCAwIT09ZD9kOnRoaXMuZWxlbWVudCxsKTp0aGlzLl8kQUguaGFuZGxlRXZlbnQobCl9fWNsYXNzIFJzZXtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5lbGVtZW50PWwsdGhpcy50eXBlPTYsdGhpcy5fJEFOPXZvaWQgMCx0aGlzLl8kQU09YSx0aGlzLm9wdGlvbnM9ZH1nZXQg''@;'; put 'put ''XyRBVSgpe3JldHVybiB0aGlzLl8kQU0uXyRBVX1fJEFJKGwpe0c4KHRoaXMsbCl9fWNvbnN0IExzZT1DUi5saXRIdG1sUG9seWZpbGxTdXBwb3J0O3ZhciB4WixFWjtMc2U/LihGTSxHYiksKG51bGwhPT0oQ1o9Q1IubGl0SHRtbFZlcnNpb25zKSYmdm9pZCAwIT09Q1o/Q1o6Q1IubGl0SHRt''@;'; put 'put ''bFZlcnNpb25zPVtdKS5wdXNoKCIyLjguMCIpO2NsYXNzIE5NIGV4dGVuZHMgWmJ7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMucmVuZGVyT3B0aW9ucz17aG9zdDp0aGlzfSx0aGlzLl8kRG89dm9pZCAwfWNyZWF0ZVJlbmRlclJvb3QoKXt2YXIgbCxhO2NvbnN0IGQ9''@;'; put 'put ''c3VwZXIuY3JlYXRlUmVuZGVyUm9vdCgpO3JldHVybiBudWxsIT09KGw9KGE9dGhpcy5yZW5kZXJPcHRpb25zKS5yZW5kZXJCZWZvcmUpJiZ2b2lkIDAhPT1sfHwoYS5yZW5kZXJCZWZvcmU9ZC5maXJzdENoaWxkKSxkfXVwZGF0ZShsKXtjb25zdCBhPXRoaXMucmVuZGVyKCk7dGhpcy5oYXNV''@;'; put 'put ''cGRhdGVkfHwodGhpcy5yZW5kZXJPcHRpb25zLmlzQ29ubmVjdGVkPXRoaXMuaXNDb25uZWN0ZWQpLHN1cGVyLnVwZGF0ZShsKSx0aGlzLl8kRG89KChjLGwsYSk9Pnt2YXIgZCxoO2NvbnN0IGY9bnVsbCE9PShkPWE/LnJlbmRlckJlZm9yZSkmJnZvaWQgMCE9PWQ/ZDpsO2xldCB2PWYuXyRs''@;'; put 'put ''aXRQYXJ0JDtpZih2b2lkIDA9PT12KXtjb25zdCBNPW51bGwhPT0oaD1hPy5yZW5kZXJCZWZvcmUpJiZ2b2lkIDAhPT1oP2g6bnVsbDtmLl8kbGl0UGFydCQ9dj1uZXcgR2IobC5pbnNlcnRCZWZvcmUoTE0oKSxNKSxNLHZvaWQgMCxhPz97fSl9cmV0dXJuIHYuXyRBSShjKSx2fSkoYSx0aGlz''@;'; put 'put ''LnJlbmRlclJvb3QsdGhpcy5yZW5kZXJPcHRpb25zKX1jb25uZWN0ZWRDYWxsYmFjaygpe3ZhciBsO3N1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksbnVsbD09PShsPXRoaXMuXyREbyl8fHZvaWQgMD09PWx8fGwuc2V0Q29ubmVjdGVkKCEwKX1kaXNjb25uZWN0ZWRDYWxsYmFjaygpe3ZhciBs''@;'; put 'put ''O3N1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksbnVsbD09PShsPXRoaXMuXyREbyl8fHZvaWQgMD09PWx8fGwuc2V0Q29ubmVjdGVkKCExKX1yZW5kZXIoKXtyZXR1cm4gWWJ9fU5NLmZpbmFsaXplZD0hMCxOTS5fJGxpdEVsZW1lbnQkPSEwLG51bGw9PT0oeFo9Z2xvYmFsVGhpcy5saXRF''@;'; put 'put ''bGVtZW50SHlkcmF0ZVN1cHBvcnQpfHx2b2lkIDA9PT14Wnx8eFouY2FsbChnbG9iYWxUaGlzLHtMaXRFbGVtZW50Ok5NfSk7Y29uc3QgT3NlPWdsb2JhbFRoaXMubGl0RWxlbWVudFBvbHlmaWxsU3VwcG9ydDtPc2U/Lih7TGl0RWxlbWVudDpOTX0pLChudWxsIT09KEVaPWdsb2JhbFRoaXMu''@;'; put 'put ''bGl0RWxlbWVudFZlcnNpb25zKSYmdm9pZCAwIT09RVo/RVo6Z2xvYmFsVGhpcy5saXRFbGVtZW50VmVyc2lvbnM9W10pLnB1c2goIjMuMy4zIik7Y29uc3QgVlNlPWRzZWBAY2hhcnNldCAiVVRGLTgiOzpob3N0LDpyb290ey0tzrQyOnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXh4''@;'; put 'put ''cywgY2FsYyg0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS3OtDM6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UteHMsIGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpOy0tzrQ0OnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNw''@;'; put 'put ''YWNlLXNtLCBjYWxjKDEyICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSk7LS3OtDU6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UtbWQsIGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpKTstLc60Njp2YXIoLS1jZHMtZ2xvYmFsLWxh''@;'; put 'put ''eW91dC1zcGFjZS1sZywgY2FsYygyNCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkpOy0tzrQ3OnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXhsLCBjYWxjKDMyICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwgMjApKSl9W2Nkcy1sYXlvdXR+PSJ3cmFw''@;'; put 'put ''Om5vbmUiXXtmbGV4LXdyYXA6bm93cmFwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXXtmbGV4LWdyb3c6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbjpzaHJpbmsiXXtmbGV4LXNocmluazoxIWltcG9ydGFudDtmbGV4LWdyb3c6MCFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PWhvcml6b250YWxde2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7ZmxleC13cmFwOndyYXA7anVzdGlmeS1pdGVtczpmbGV4LXN0YXJ0O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7d2lkdGg6MTAwJTttYXJnaW46MDttaW4taGVpZ2h0OjB9W2Nkcy1sYXlvdXR+PWhv''@;'; put 'put ''cml6b250YWxdPltjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy10ZXh0XXt3aWR0aDppbml0aWFsIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRh''@;'; put 'put ''bF1bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpsZWZ0Il17anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJhbGlnbjpyaWdodCJde2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRh''@;'; put 'put ''bF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5''@;'; put 'put ''LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0ib3JkZXI6cmV2ZXJzZSJde2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl17anVz''@;'; put 'put ''dGlmeS1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLXN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJd''@;'; put 'put ''e2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxp''@;'; put 'put ''Z246Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl17YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PWhvcml6''@;'; put 'put ''b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl17YWxpZ24tc2VsZjpm''@;'; put 'put ''bGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il17bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJde21hcmdpbi1yaWdodDphdXRvIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49dmVydGljYWxde3dpZHRoOjEwMCU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dG9w''@;'; put 'put ''Il17anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQiXXthbGlnbi1pdGVtczpm''@;'; put 'put ''bGV4LWVuZH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl17YWxpZ24taXRlbXM6''@;'; put 'put ''Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9Im9yZGVyOnJldmVyc2UiXXtmbGV4LWRpcmVjdGlv''@;'; put 'put ''bjpjb2x1bW4tcmV2ZXJzZX1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXXthbGlnbi1pdGVtczpz''@;'; put 'put ''dHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSxbY2RzLWxheW91dH49dmVy''@;'; put 'put ''dGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl17bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91''@;'; put 'put ''dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl17YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFs''@;'; put 'put ''aWduOnJpZ2h0Il17bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJde21hcmdpbi1yaWdodDphdXRvfVtjZHMtbGF5b3V0fj1ncmlkXXtkaXNwbGF5OmdyaWQ7YWxpZ24taXRlbXM6c3RhcnQ7YWxpZ24tY29udGVudDpzdGFy''@;'; put 'put ''dDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KHZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LWdyaWQtY29scywxMiksMWZyKTt3aWR0aDoxMDAlfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj1yb3dzXXtncmlkLXRlbXBsYXRlLXJvd3M6cmVwZWF0KDEyLGF1dG8pfVtjZHMtbGF5''@;'; put 'put ''b3V0fj1ncmlkXT5bY2RzLWxheW91dCo9cm93XXthbGlnbi1zZWxmOnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXXthbGlnbi1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQiXXtqdXN0aWZ5''@;'; put 'put ''LWNvbnRlbnQ6ZW5kfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJde2p1c3RpZnktY29udGVudDpzdGFydH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtc3RyZXRjaCJde2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0''@;'; put 'put ''aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtqdXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde2p1c3RpZnktaXRlbXM6Y2VudGVy''@;'; put 'put ''O2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXI7anVzdGlmeS1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn06OnNsb3R0ZWQo''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJkaXNwbGF5OnNjcmVlbi1yZWFkZXItb25seSJdKSxbY2RzLWxheW91dH49ImRpc3BsYXk6c2NyZWVuLXJlYWRlci1vbmx5Il17cG9zaXRpb246YWJzb2x1dGUhaW1wb3J0YW50O2NsaXA6cmVjdCgxcHgsMXB4LDFweCwxcHgpO2NsaXAtcGF0aDppbnNldCg1MCUpO3Bh''@;'; put 'put ''ZGRpbmc6MDtib3JkZXI6MDtoZWlnaHQ6MXB4O3dpZHRoOjFweDtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RvcDowO2xlZnQ6MDtkaXNwbGF5OmJsb2NrIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImdhcDpub25lIl17Z2FwOjB9W2Nkcy1sYXlvdXQqPSJnYXA6eHhzIl17''@;'; put 'put ''Z2FwOnZhcigtLc60Mil9W2Nkcy1sYXlvdXQqPSJnYXA6eHMiXXtnYXA6dmFyKC0tzrQzKX1bY2RzLWxheW91dCo9ImdhcDpzbSJde2dhcDp2YXIoLS3OtDQpfVtjZHMtbGF5b3V0Kj0iZ2FwOm1kIl17Z2FwOnZhcigtLc60NSl9W2Nkcy1sYXlvdXQqPSJnYXA6bGciXXtnYXA6dmFyKC0tzrQ2''@;'; put 'put ''KX1bY2RzLWxheW91dH49InA6bm9uZSJde3BhZGRpbmc6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOnh4cyJde3BhZGRpbmc6dmFyKC0tzrQyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOnhzIl17cGFkZGluZzp2YXIoLS3OtDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6c20i''@;'; put 'put ''XXtwYWRkaW5nOnZhcigtLc60NCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icDptZCJde3BhZGRpbmc6dmFyKC0tzrQ1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtOm1kIl17bWFyZ2luOnZhcigtLc60NSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icDpsZyJde3BhZGRpbmc6dmFyKC0t''@;'; put 'put ''zrQ2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS3OtDMpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS3OtDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteDpsZyJde3BhZGRpbmctbGVmdDp2YXIoLS3OtDYpIWltcG9ydGFudDtw''@;'; put 'put ''YWRkaW5nLXJpZ2h0OnZhcigtLc60NikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15OmxnIl17cGFkZGluZy10b3A6dmFyKC0tzrQ2KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tzrQ2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWw6bWQiXXtwYWRkaW5nLWxlZnQ6dmFy''@;'; put 'put ''KC0tzrQ1KSFpbXBvcnRhbnR9QG1lZGlhIChtaW4td2lkdGg6OTkycHgpe1tjZHMtbGF5b3V0Kj0iZ2FwQG1kOmxnIl17Z2FwOnZhcigtLc60Nil9W2Nkcy1sYXlvdXR+PSJwQG1kOmxnIl17cGFkZGluZzp2YXIoLS3OtDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbWQ6eGwiXXttYXJn''@;'; put 'put ''aW46dmFyKC0tzrQ3KSFpbXBvcnRhbnR9fVtjZHMtbGF5b3V0fj1maWxsXXt3aWR0aDoxMDAlIWltcG9ydGFudH0qLDphZnRlciw6YmVmb3Jle2JveC1zaXppbmc6Ym9yZGVyLWJveH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtc3RyZXRj''@;'; put 'put ''aCJdPjo6c2xvdHRlZCgqKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXT46OnNsb3R0ZWQoKiksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246c3RyZXRjaCJdPjo6c2xvdHRlZCgqKXtmbGV4LWdyb3c6MX1bY2Rz''@;'; put 'put ''LWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJdKXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRv''@;'; put 'put ''fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXSl7bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmJvdHRvbSJdKXttYXJnaW4tdG9wOmF1dG8haW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2Fs''@;'; put 'put ''XT5bY2RzLWxheW91dCo9ImFsaWduOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0b31AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNs''@;'; put 'put ''b3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp2ZXJ0aWNhbC1jZW50ZXIiXSl7bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVy''@;'; put 'put ''dGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmhvcml6b250YWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dG9wIl0pe21hcmdpbi1ib3R0b206YXV0byFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpib3R0b20iXSl7bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOnJpZ2h0Il0pe21h''@;'; put 'put ''cmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvfX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJhbGlnbkBzbTpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp2ZXJ0aWNhbC1jZW50ZXIiXSl7bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRl''@;'; put 'put ''ZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmhvcml6b250YWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iYWxpZ25Ac206dG9wIl0pe21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpib3R0b20iXSl7bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVy''@;'; put 'put ''dGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvfX1AbWVkaWEgKG1pbi13aWR0''@;'; put 'put ''aDo5OTJweCl7W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp2ZXJ0aWNhbC1jZW50ZXIiXSl7bWFyZ2luLXRvcDphdXRv''@;'; put 'put ''O21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmhvcml6b250YWwtY2VudGVyIl0pe2Fs''@;'; put 'put ''aWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dG9wIl0pe21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpi''@;'; put 'put ''b3R0b20iXSl7bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJh''@;'; put 'put ''bGlnbkBtZDpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvfX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMt''@;'; put 'put ''bGF5b3V0Kj0iYWxpZ25AbGc6dmVydGljYWwtY2VudGVyIl0pe21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNs''@;'; put 'put ''b3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpob3Jpem9udGFsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOnRvcCJdKXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Ym90dG9tIl0pe21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpyaWdodCJdKXttYXJnaW4tbGVmdDph''@;'; put 'put ''dXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0b319QG1lZGlhIChtaW4td2lkdGg6MTQ0MHB4KXtbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWdu''@;'; put 'put ''QHhsOmNlbnRlciJdKSxbY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOnZlcnRpY2FsLWNlbnRlciJdKXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iYWxpZ25AeGw6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6aG9yaXpvbnRhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJhbGlnbkB4bDp0b3AiXSl7bWFyZ2luLWJvdHRvbTphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmJvdHRvbSJdKXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0gOjpz''@;'; put 'put ''bG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG99fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6''@;'; put 'put ''OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVk''@;'; put 'put ''KFtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOnRvcCJdKXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduOmJvdHRvbSJdKXthbGlnbi1zZWxmOmZsZXgtZW5k''@;'; put 'put ''fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJdKXttYXJnaW4tcmln''@;'; put 'put ''aHQ6YXV0byFpbXBvcnRhbnR9QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpe1tjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWdu''@;'; put 'put ''QHhzOnZlcnRpY2FsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4''@;'; put 'put ''czpob3Jpem9udGFsLWNlbnRlciJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOnRvcCJdKXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhzOmJvdHRvbSJdKXthbGlnbi1zZWxmOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpyaWdodCJdKXttYXJnaW4tbGVm''@;'; put 'put ''dDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXtbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpz''@;'; put 'put ''bG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp2ZXJ0aWNhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xv''@;'; put 'put ''dHRlZChbY2RzLWxheW91dCo9ImFsaWduQHNtOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206aG9yaXpvbnRhbC1jZW50ZXIiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp0b3AiXSl7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpib3R0b20iXSl7YWxp''@;'; put 'put ''Z24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWdu''@;'; put 'put ''QHNtOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90''@;'; put 'put ''dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dmVydGljYWwtY2VudGVyIl0pe2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpjZW50ZXIiXSksW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRl''@;'; put 'put ''ZChbY2RzLWxheW91dCo9ImFsaWduQG1kOmhvcml6b250YWwtY2VudGVyIl0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dG9wIl0p''@;'; put 'put ''e2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Ym90dG9tIl0pe2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWdu''@;'; put 'put ''QG1kOnJpZ2h0Il0pe21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpsZWZ0Il0pe21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXtbY2Rz''@;'; put 'put ''LWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Y2VudGVyIl0pLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp2ZXJ0aWNhbC1jZW50ZXIiXSl7YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmNlbnRlciJdKSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6aG9yaXpvbnRhbC1jZW50ZXIiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRh''@;'; put 'put ''bnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp0b3AiXSl7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJhbGlnbkBsZzpib3R0b20iXSl7YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6cmlnaHQiXSl7bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xv''@;'; put 'put ''dHRlZChbY2RzLWxheW91dCo9ImFsaWduQGxnOmxlZnQiXSl7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxNDQwcHgpe1tjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXSksW2Nkcy1s''@;'; put 'put ''YXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOnZlcnRpY2FsLWNlbnRlciJdKXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Y2VudGVyIl0pLFtjZHMtbGF5''@;'; put 'put ''b3V0fj1ob3Jpem9udGFsXSA6OnNsb3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpob3Jpem9udGFsLWNlbnRlciJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2Rz''@;'; put 'put ''LWxheW91dCo9ImFsaWduQHhsOnRvcCJdKXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdIDo6c2xvdHRlZChbY2RzLWxheW91dCo9ImFsaWduQHhsOmJvdHRvbSJdKXthbGlnbi1zZWxmOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXSA6OnNs''@;'; put 'put ''b3R0ZWQoW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpyaWdodCJdKXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0gOjpzbG90dGVkKFtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6bGVmdCJdKXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fVtjZHMt''@;'; put 'put ''dGV4dF17Zm9udC1mYW1pbHk6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5LCAiQ2xhcml0eSBDaXR5IiwgIkF2ZW5pciBOZXh0Iiwgc2Fucy1zZXJpZik7bWFyZ2luLXRvcDowO21hcmdpbi1ib3R0b206MH1bY2RzLXRleHRdW2Nkcy1sYXlvdXR+PWdyaWRdOjphZnRl''@;'; put 'put ''cixbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PWdyaWRdOjpiZWZvcmUsW2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXTo6YWZ0ZXIsW2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXTo6YmVmb3JlLFtjZHMtdGV4dF1bY2RzLWxheW91dH49dmVydGljYWxdOjphZnRlcixb''@;'; put 'put ''Y2RzLXRleHRdW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXTo6YmVmb3Jle2Rpc3BsYXk6bm9uZX1bY2RzLXRleHQqPWRpc3BsYXldLFtjZHMtdGV4dCo9c2VjdGlvbl0sW2Nkcy10ZXh0Kj1zdWJzZWN0aW9uXSxbY2RzLXRleHQqPXRpdGxlXXtmb250LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5''@;'; put 'put ''cG9ncmFwaHktaGVhZGVyLWZvbnQtZmFtaWx5LCAiQ2xhcml0eSBDaXR5IiwgIkF2ZW5pciBOZXh0Iiwgc2Fucy1zZXJpZik7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTQwMCx2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi05MDAsIzIxMzMzYikp''@;'; put 'put ''fVtjZHMtdGV4dCo9Ym9keV0sW2Nkcy10ZXh0Kj1tZXNzYWdlXSxbY2RzLXRleHQqPXNlY29uZGFyeV17Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTUwMCx2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsYWNrLCMwMDApKX1bY2RzLXRleHQqPWlubGluZV17d2lkdGg6''@;'; put 'put ''YXV0byFpbXBvcnRhbnQ7ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50fVtjZHMtdGV4dCo9ZGlzcGxheV17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWZvbnQtc2l6ZSxjYWxjKDQwICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkp''@;'; put 'put ''KTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1mb250LXdlaWdodCw1MDApO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWxpbmUtaGVpZ2h0LDEuMWVtKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXR5cG9ncmFwaHktZGlzcGxheS1sZXR0ZXItc3BhY2luZywtLjAxMjVlbSl9W2Nkcy10ZXh0Kj1kaXNwbGF5XTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10''@;'; put 'put ''b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWxpbmUtaGVpZ2h0LDEuMWVtKSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9ZGlzcGxheV06OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jazto''@;'; put 'put ''ZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC10eXBvZ3JhcGh5LXgtaGVpZ2h0LC41MTdlbSkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQsMS4xZW0pIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj10aXRsZV17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''dHlwb2dyYXBoeS10aXRsZS1mb250LXNpemUsY2FsYygyNCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRpdGxlLWZvbnQtd2VpZ2h0LDUwMCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10''@;'; put 'put ''eXBvZ3JhcGh5LXRpdGxlLWxpbmUtaGVpZ2h0LDEuMzMzMzMzZW0pO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1sZXR0ZXItc3BhY2luZywtLjAwODMzMzMzZW0pfVtjZHMtdGV4dCo9dGl0bGVdOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJs''@;'; put 'put ''b2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRpdGxlLWxpbmUtaGVpZ2h0LDEuMzMzMzMzZW0pIC0gMWVt''@;'; put 'put ''KS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj10aXRsZV06OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkg''@;'; put 'put ''LSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0LC41MTdlbSkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRpdGxlLWxpbmUtaGVpZ2h0LDEuMzMzMzMz''@;'; put 'put ''ZW0pIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1zZWN0aW9uXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC1zaXplLGNhbGMoMjAgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2ZvbnQtd2VpZ2h0OnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtd2VpZ2h0LDUwMCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQsMS4yZW0pO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0''@;'; put 'put ''aW9uLWxldHRlci1zcGFjaW5nLC0uMDFlbSl9W2Nkcy10ZXh0Kj1zZWN0aW9uXTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3''@;'; put 'put ''NWVtKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0LDEuMmVtKSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9c2VjdGlvbl06OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21h''@;'; put 'put ''cmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVp''@;'; put 'put ''Z2h0LC41MTdlbSkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQsMS4yZW0pIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1zdWJzZWN0aW9uXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1''@;'; put 'put ''YnNlY3Rpb24tZm9udC1zaXplLGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtd2VpZ2h0LDUwMCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBv''@;'; put 'put ''Z3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQsMS41ZW0pO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxldHRlci1zcGFjaW5nLC0uMDEyNWVtKX1bY2RzLXRleHQqPXN1YnNlY3Rpb25dOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5''@;'; put 'put ''OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQsMS41ZW0pIC0g''@;'; put 'put ''MWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1zdWJzZWN0aW9uXTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwu''@;'; put 'put ''MTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1saW5lLWhl''@;'; put 'put ''aWdodCwxLjVlbSkgLSAxZW0pLyAyKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPWJvZHlde2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0LDQwMCk7Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWZvbnQt''@;'; put 'put ''c2l6ZSxjYWxjKDE0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZywtLjAwNzE0Mjg2ZW0pO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBo''@;'; put 'put ''eS1ib2R5LWxpbmUtaGVpZ2h0LDEuNDI4NTcxNGVtKX1bY2RzLXRleHQqPWJvZHldOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4x''@;'; put 'put ''NDc1ZW0pICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQsMS40Mjg1NzE0ZW0pIC0gMWVtKS8gMikpKi0xKSArIC4xZW0pfVtjZHMtdGV4dCo9Ym9keV06OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21h''@;'; put 'put ''cmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVp''@;'; put 'put ''Z2h0LC41MTdlbSkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQsMS40Mjg1NzE0ZW0pIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9Ym9keVtjZHMtdGV4dCo9Ym9keV06OmFmdGVyLGJvZHlbY2RzLXRleHQqPWJvZHldOjpiZWZvcmV7Y29u''@;'; put 'put ''dGVudDpub25lfVtjZHMtdGV4dCo9bWVzc2FnZV17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWZvbnQtc2l6ZSxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9n''@;'; put 'put ''cmFwaHktbWVzc2FnZS1mb250LXdlaWdodCxjYWxjKDQwMCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtbGluZS1oZWlnaHQsMS41ZW0pO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWxldHRlci1zcGFjaW5nLC0uMDEyNWVtKX1bY2RzLXRleHQqPW1lc3NhZ2VdOjpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3Jh''@;'; put 'put ''cGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtbGluZS1oZWlnaHQsMS41ZW0pIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1tZXNzYWdlXTo6YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJs''@;'; put 'put ''b2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQsLjE3MDNlbSkgLSB2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQsLjUxN2VtKSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1saW5lLWhlaWdodCwxLjVlbSkgLSAxZW0pLyAyKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXNlY29uZGFyeV17Zm9udC1zaXplOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplLGNhbGMoMTMgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQsNDAwKTtsaW5lLWhlaWdodDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0LDEuMjMwNzdlbSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZywtLjAwNzY5MmVtKX1bY2RzLXRleHQqPXNlY29uZGFyeV06OmJl''@;'; put 'put ''Zm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5''@;'; put 'put ''LWxpbmUtaGVpZ2h0LDEuMjMwNzdlbSkgLSAxZW0pLyAyKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPXNlY29uZGFyeV06OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5''@;'; put 'put ''cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0LC41MTdlbSkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBv''@;'; put 'put ''Z3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCwxLjIzMDc3ZW0pIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0fj1saW5rXXtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvcix2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwLCMwMDc5''@;'; put 'put ''YWQpKSFpbXBvcnRhbnQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSFpbXBvcnRhbnQ7bGluZS1oZWlnaHQ6aW5oZXJpdCFpbXBvcnRhbnQ7Zm9udC1zaXplOmluaGVyaXQhaW1wb3J0YW50fVtjZHMtdGV4dH49bGlua106Zm9jdXN7b3V0bGluZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWlu''@;'; put 'put ''dGVyYWN0aW9uLW91dGxpbmUsSGlnaGxpZ2h0IHNvbGlkIDJweCk7b3V0bGluZS1vZmZzZXQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lLW9mZnNldCwxcHgpfVtjZHMtdGV4dH49bGlua106aG92ZXJ7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5''@;'; put 'put ''LWxpbmstY29sb3ItaG92ZXIsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTgwMCwjMDA2MDhhKSkhaW1wb3J0YW50fVtjZHMtdGV4dH49bGlua106dmlzaXRlZDpub3QoW2Nkcy10ZXh0fj1zdGF0aWNdKXtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci12''@;'; put 'put ''aXNpdGVkLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItNjAwLCMzYjQwY2UpKSFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1saW5rXTp2aXNpdGVkOm5vdChbY2RzLXRleHR+PXN0YXRpY10pOmhvdmVye2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZp''@;'; put 'put ''c2l0ZWQtaG92ZXIsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1sYXZlbmRlci03MDAsIzI0MjljMikpIWltcG9ydGFudH1AbWVkaWEgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzowKXtbY2RzLXRleHQ9bGlua106Zm9jdXN7b3V0bGluZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWlu''@;'; put 'put ''dGVyYWN0aW9uLW91dGxpbmUtd2Via2l0LDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcil9fVtjZHMtdGV4dH49Y29kZV17Y29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIsdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwLCNlMDIyMDApKTtmb250LWZhbWls''@;'; put 'put ''eTptb25vc3BhY2V9W2Nkcy1kaXZpZGVyXXtkaXNwbGF5OmJsb2NrO2hlaWdodDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDAsY2FsYygxICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTtvdmVyZmxvdzpoaWRkZW47Ym94LXNoYWRvdzp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcix2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDAsI2NiZDRkOCkpIDAgMCAwIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCxjYWxjKDEgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIw''@;'; put 'put ''KSkpIGluc2V0fVtjZHMtdGV4dH49bGlnaHRde2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1saWdodCwzMDApIWltcG9ydGFudH1bY2RzLXRleHR+PWp1c3RpZnlde3RleHQtYWxpZ246anVzdGlmeSFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1sZWZ0''@;'; put 'put ''XXt0ZXh0LWFsaWduOmxlZnQhaW1wb3J0YW50fVtjZHMtdGV4dH49cmlnaHRde3RleHQtYWxpZ246cmlnaHQhaW1wb3J0YW50fVtjZHMtdGV4dH49Y2VudGVyXXt0ZXh0LWFsaWduOmNlbnRlciFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1saGVde3BhZGRpbmc6LjA1cHggMH1bY2RzLXRleHR+PWxo''@;'; put 'put ''ZV06OmJlZm9yZXtjb250ZW50OiIiO21hcmdpbi10b3A6LS4xMjRlbTtkaXNwbGF5OmJsb2NrO2hlaWdodDowfVtjZHMtdGV4dH49bGhlXTo6YWZ0ZXJ7Y29udGVudDoiIjttYXJnaW4tYm90dG9tOi0uMjIxZW07ZGlzcGxheTpibG9jaztoZWlnaHQ6MH1bY2RzLXRleHQqPWgyXSxbY2RzLXRl''@;'; put 'put ''eHQqPWgzXXtmb250LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktaGVhZGVyLWZvbnQtZmFtaWx5LCAiQ2xhcml0eSBDaXR5IiwgIkF2ZW5pciBOZXh0Iiwgc2Fucy1zZXJpZik7Zm9udC1zaXplOjEuNHJlbTtmb250LXdlaWdodDoyMDA7Y29sb3I6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7bGluZS1oZWlnaHQ6MS43MTQzZW07bGV0dGVyLXNwYWNpbmc6LS4wMTc4NTdlbX1bY2RzLXRleHQqPWgyXTo6YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCwuMTQ3NWVtKSArIGNhbGMoKDEuNzE0M2VtIC0gMWVtKS8gMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1oMl06OmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2Fs''@;'; put 'put ''YygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0LC4xNzAzZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0LC41MTdlbSkp''@;'; put 'put ''ICsgY2FsYygoMS43MTQzZW0gLSAxZW0pLyAyKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPWgzXXtmb250LXNpemU6MS4xcmVtO2xpbmUtaGVpZ2h0OjEuMDkwOWVtO2xldHRlci1zcGFjaW5nOi0uMDEzNjM2ZW19W2Nkcy10ZXh0Kj1oM106OmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6''@;'; put 'put ''YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQsLjE0NzVlbSkgKyBjYWxjKCgxLjA5MDllbSAtIDFlbSkvIDIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9aDNdOjphZnRlcntjb250''@;'; put 'put ''ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0LC4xNDc1ZW0pIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCwuMTcw''@;'; put 'put ''M2VtKSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCwuNTE3ZW0pKSArIGNhbGMoKDEuMDkwOWVtIC0gMWVtKS8gMikpKi0xKSAtIC4wNDRlbSl9Omhvc3R7YWxsOmluaXRpYWw7ZGlzcGxheTpibG9jazt2aXNpYmlsaXR5OmluaGVyaXQ7Zm9udC1mYW1pbHk6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5LCAiQ2xhcml0eSBDaXR5IiwgIkF2ZW5pciBOZXh0Iiwgc2Fucy1zZXJpZik7Y29udGFpbjpsYXlvdXQ7Ym94LXNpemluZzpib3JkZXItYm94IWltcG9ydGFudDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZSFpbXBvcnRhbnR9Kiw6YWZ0''@;'; put 'put ''ZXIsOmJlZm9yZXtib3gtc2l6aW5nOmluaGVyaXQhaW1wb3J0YW50fXNsb3R7Zm9udC1mYW1pbHk6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5LCAiQ2xhcml0eSBDaXR5IiwgIkF2ZW5pciBOZXh0Iiwgc2Fucy1zZXJpZik7ZGlzcGxheTpjb250ZW50cyFpbXBvcnRh''@;'; put 'put ''bnR9OjpzbG90dGVkKCope2ZvbnQtZmFtaWx5OmluaGVyaXQ7Ym94LXNpemluZzppbmhlcml0fTo6c2xvdHRlZCgqKTo6cGxhY2Vob2xkZXJ7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTIwMCx2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDAs''@;'; put 'put ''IzRmNjE2OSkpfTpob3N0KFtfaXMtYW5jaG9yXSksOmhvc3QoW3JvbGU9YnV0dG9uXSl7Y3Vyc29yOnBvaW50ZXIhaW1wb3J0YW50fTpob3N0KFtfaXMtYW5jaG9yXSkgOjpzbG90dGVkKCopLDpob3N0KFtyb2xlPWJ1dHRvbl0pIDo6c2xvdHRlZCgqKXtjdXJzb3I6cG9pbnRlciFpbXBvcnRh''@;'; put 'put ''bnR9Omhvc3QoW3JvbGU9YnV0dG9uXVtkaXNhYmxlZF0pe2N1cnNvcjpub3QtYWxsb3dlZCFpbXBvcnRhbnR9Omhvc3QoW3JvbGU9YnV0dG9uXVtkaXNhYmxlZF0pIDo6c2xvdHRlZCgqKXtjdXJzb3I6bm90LWFsbG93ZWQhaW1wb3J0YW50O3BvaW50ZXItZXZlbnRzOm5vbmV9Omhvc3QoW2hp''@;'; put 'put ''ZGRlbl0pLFtoaWRkZW5de2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9Omhvc3QoW2hpZGRlbio9ZmFsc2VdKXtkaXNwbGF5OmJsb2NrIWltcG9ydGFudH06aG9zdChbcm9sZT1kaWFsb2ddW2hpZGRlbl0pLDpob3N0KFtyb2xlPWRpYWxvZ11baGlkZGVuXSkgOjpzbG90dGVkKCope2Rpc3BsYXk6''@;'; put 'put ''YmxvY2shaW1wb3J0YW50O3Zpc2liaWxpdHk6aGlkZGVuIWltcG9ydGFudH06aG9zdChbcm9sZT1kaWFsb2ddW2hpZGRlbio9ZmFsc2VdKSw6aG9zdChbcm9sZT1kaWFsb2ddW2hpZGRlbio9ZmFsc2VdKSA6OnNsb3R0ZWQoKil7dmlzaWJpbGl0eTp2aXNpYmxlIWltcG9ydGFudH06aG9zdChb''@;'; put 'put ''X2ZvY3VzZWRdKSAuaW5wdXQsOmhvc3QoW19mb2N1c2VkXSkgW2ZvY3VzYWJsZV0sOmhvc3QoW3RhYmluZGV4PSIwIl06Zm9jdXMpLDpob3N0KFt0YWJpbmRleD0iMCJdOmZvY3VzKSBbZm9jdXNhYmxlXSxbdGFiaW5kZXg9IjAiXVtmb2N1c2FibGVdOmZvY3Vze291dGxpbmU6SGlnaGxpZ2h0''@;'; put 'put ''IHNvbGlkIDJweDtvdXRsaW5lOjVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLW9mZnNldDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUtb2Zmc2V0LDFweCl9YDtmdW5jdGlvbiBUWihjKXtyZXR1cm5gY2FsYygoJHtjfSAvIHZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtYmFzZSkpICogMXJlbSlgfWNsYXNzIFVTZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuZm49bCx0aGlzLnN1YnNjcmlwdGlvbnM9YX11bnN1YnNjcmliZSgpe2NvbnN0IGw9dGhpcy5zdWJzY3JpcHRpb25zLmluZGV4T2YodGhpcyk7LTEhPT1sJiZ0aGlzLnN1YnNjcmlwdGlv''@;'; put 'put ''bnMuc3BsaWNlKGwsMSl9fWNvbnN0IEFaPW5ldyBjbGFzcyBaU2V7Y29uc3RydWN0b3IoKXt0aGlzLnN1YnNjcmlwdGlvbnM9W119c3Vic2NyaWJlKGwpe2NvbnN0IGE9bmV3IFVTZShsLHRoaXMuc3Vic2NyaXB0aW9ucyk7cmV0dXJuIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGEpLGF9ZW1p''@;'; put 'put ''dChsKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLmZuKGwpKX10b0V2ZW50T2JzZXJ2YWJsZSgpe3JldHVybiB0aGlzfX07QVoubGlzdGVuZXI9ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiQ0RTX1NUQVRFX1VQREFURSIsYz0+QVouZW1pdChjLmRldGFpbCkpO2NsYXNzIE5m''@;'; put 'put ''e3N0YXRpYyBnZXQgc3RhdGUoKXtyZXR1cm4gUWFlKCksd2luZG93LkNEUy5fc3RhdGV9c3RhdGljIGdldFZhbHVlKGwpe3JldHVybiBOZi5zdGF0ZVtsXX1zdGF0aWMgc2V0VmFsdWUobCxhKXtOZi5zdGF0ZVtsXT1hfXN0YXRpYyBsb2coKXtSTS5sb2coSlNPTi5zdHJpbmdpZnkoTmYuc3Rh''@;'; put 'put ''dGUsbnVsbCwyKSl9fU5mLnN0YXRlVXBkYXRlcz1BWi50b0V2ZW50T2JzZXJ2YWJsZSgpO2NvbnN0IFdTZT0oYyxsKT0+Im1ldGhvZCI9PT1sLmtpbmQmJmwuZGVzY3JpcHRvciYmISgidmFsdWUiaW4gbC5kZXNjcmlwdG9yKT97Li4ubCxmaW5pc2hlcihhKXthLmNyZWF0ZVByb3BlcnR5KGwu''@;'; put 'put ''a2V5LGMpfX06e2tpbmQ6ImZpZWxkIixrZXk6U3ltYm9sKCkscGxhY2VtZW50OiJvd24iLGRlc2NyaXB0b3I6e30sb3JpZ2luYWxLZXk6bC5rZXksaW5pdGlhbGl6ZXIoKXsiZnVuY3Rpb24iPT10eXBlb2YgbC5pbml0aWFsaXplciYmKHRoaXNbbC5rZXldPWwuaW5pdGlhbGl6ZXIuY2FsbCh0''@;'; put 'put ''aGlzKSl9LGZpbmlzaGVyKGEpe2EuY3JlYXRlUHJvcGVydHkobC5rZXksYyl9fSxZU2U9KGMsbCxhKT0+e2wuY29uc3RydWN0b3IuY3JlYXRlUHJvcGVydHkoYSxjKX07ZnVuY3Rpb24gUHNlKGMpe3JldHVybihsLGEpPT52b2lkIDAhPT1hP1lTZShjLGwsYSk6V1NlKGMsbCl9ZnVuY3Rpb24g''@;'; put 'put ''TnNlKGMsbCl7c3dpdGNoKGwmJmwudHlwZSl7Y2FzZSBBcnJheTpjYXNlIE9iamVjdDpyZXR1cm57cmVmbGVjdDohMSwuLi5sfTtjYXNlIFN0cmluZzpyZXR1cm57cmVmbGVjdDohMCxhdHRyaWJ1dGU6VTgoYyksY29udmVydGVyOnt0b0F0dHJpYnV0ZTphPT5hfHxudWxsfSwuLi5sfTtjYXNl''@;'; put 'put ''IE51bWJlcjpyZXR1cm57cmVmbGVjdDohMCxhdHRyaWJ1dGU6VTgoYyksLi4ubH07Y2FzZSBCb29sZWFuOnJldHVybntyZWZsZWN0OiEwLGF0dHJpYnV0ZTpVOChjKSxjb252ZXJ0ZXI6e3RvQXR0cmlidXRlOmE9PmE/IiI6bnVsbCxmcm9tQXR0cmlidXRlOmE9PmZ1bmN0aW9uIFhTZShjKXty''@;'; put 'put ''ZXR1cm4gbnVsbCE9YyYmIiIrYyE9ImZhbHNlIn0oYSl9LC4uLmx9O2Nhc2UgRGF0ZTpyZXR1cm57cmVmbGVjdDohMSxjb252ZXJ0ZXI6e2Zyb21BdHRyaWJ1dGU6YT0+bmV3IERhdGUoYSl9LC4uLmx9O2RlZmF1bHQ6cmV0dXJuey4uLmx9fX1mdW5jdGlvbiB0bShjKXtyZXR1cm4obCxhKT0+''@;'; put 'put ''KGM/LnJlcXVpcmVkJiZmdW5jdGlvbiBKU2UoYyxsLGEpe2NvbnN0IGQ9Yy5maXJzdFVwZGF0ZWQ7Yy5maXJzdFVwZGF0ZWQ9ZnVuY3Rpb24oaCl7aWYoYSYmYS5yZXF1aXJlZCYmSU0odGhpc1tsXSkpe2NvbnN0IGY9YS5yZXF1aXJlZE1lc3NhZ2V8fGZ1bmN0aW9uKHY9Indhcm5pbmciLE0s''@;'; put 'put ''RCl7Y29uc3QgWj1ELnRvTG9jYWxlTG93ZXJDYXNlKCk7cmV0dXJuYCR7cWFlKHYpfTogJHtNfSBpcyByZXF1aXJlZCB0byB1c2UgJHtafSBjb21wb25lbnQuIFNldCB0aGUgSlMgUHJvcGVydHkgb3IgSFRNTCBBdHRyaWJ1dGUuXG5cbmArKFdhZSgpP2BBbmd1bGFyOiA8JHtafSBbJHtNfV09''@;'; put 'put ''Ii4uLiI+PC8ke1p9PlxuYDoiIikrKEdhZSgpP2BWdWU6IDwke1p9IDoke019PSIuLi4iPjwvJHtafT5cbmA6IiIpKyhZYWUoKT9gUmVhY3Q6IDwke2Z1bmN0aW9uIFhDZShjKXtyZXR1cm4gcWFlKGZ1bmN0aW9uIHFDZShjKXtyZXR1cm4gYy5zcGxpdCgiLSIpLm1hcCgobCxhKT0+YT9sLmNo''@;'; put 'put ''YXJBdCgwKS50b1VwcGVyQ2FzZSgpK2wuc2xpY2UoMSkudG9Mb3dlckNhc2UoKTpsKS5qb2luKCIiKX0oYykpfShaKX0gJHtuZT1NLG5lLnN0YXJ0c1dpdGgoImFyaWEiKT9VOChuZSk6bmV9PXsuLi59IC8+XG5gOiIiKStgSFRNTDogPCR7Wn0gJHtVOChNKX09Ii4uLiI+PC8ke1p9PlxuSmF2''@;'; put 'put ''YVNjcmlwdDogZG9jdW1lbnQucXVlcnlTZWxlY3RvcignJHtafScpLiR7TX0gPSAnLi4uJztcblxuYDt2YXIgbmV9KGEucmVxdWlyZWQsbCx0aGlzLnRhZ05hbWUpO2lmKCJlcnJvciI9PT1hLnJlcXVpcmVkKXRocm93IEVycm9yKGYpO1JNLndhcm4oZix0aGlzKX1kJiZkLmNhbGwodGhpcyxo''@;'; put 'put ''KX19KGwsYSxjKSxQc2UoTnNlKGEsYykpKGwsYSkpfXZhciBuTWU9ZHNlYEBrZXlmcmFtZXMgZmFkZUluQW5kT3V0ezAlLHRve29wYWNpdHk6MH03NSV7b3BhY2l0eToxfX06aG9zdHstLWNvbG9yOmN1cnJlbnRDb2xvcjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS03LGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtNyxjYWxjKDE2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21hcmdpbjowO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtmaWxs''@;'; put 'put ''OnZhcigtLWNvbG9yKTtjb2xvcjp2YXIoLS1jb2xvcik7Y29udGFpbjpzdHJpY3Q7Y3Vyc29yOmluaGVyaXR9c3Zne2Rpc3BsYXk6YmxvY2t9Omhvc3QoW3NpemUqPXhzXSl7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSxjYWxjKDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1i''@;'; put 'put ''YXNlLDIwKSkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSxjYWxjKDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01LGNhbGMoOCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7''@;'; put 'put ''bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSxjYWxjKDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpfTpob3N0KFtzaXplKj1zbV0pe2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJh''@;'; put 'put ''c2UsMjApKSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03LGNhbGMoMTYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkp''@;'; put 'put ''O21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcsY2FsYygxNiAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSl9Omhvc3QoW3NpemUqPW1kXSl7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSxjYWxjKDI0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''YmFzZSwyMCkpKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTksY2FsYygyNCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjApKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTksY2FsYygyNCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsMjAp''@;'; put 'put ''KSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSxjYWxjKDI0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKX06aG9zdChbc2l6ZSo9bGddKXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSxjYWxjKDM2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtYmFzZSwyMCkpKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExLGNhbGMoMzYgKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSxjYWxjKDM2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFz''@;'; put 'put ''ZSwyMCkpKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSxjYWxjKDM2ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKX06aG9zdChbc2l6ZSo9eGxdKXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMixjYWxjKDQ4ICogMXJlbSAvIHZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtYmFzZSwyMCkpKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyLGNhbGMoNDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMixjYWxjKDQ4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtYmFzZSwyMCkpKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMixjYWxjKDQ4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKX06aG9zdChbc2l6ZSo9eHhsXSl7aGVpZ2h0OmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyxjYWxjKDY0ICogMXJl''@;'; put 'put ''bSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSxjYWxjKDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpKTt3aWR0aDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTMsY2FsYyg2NCAqIDFyZW0gLyB2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWJhc2UsMjApKSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKSk7bWluLWhlaWdodDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTMsY2FsYyg2NCAqIDFyZW0gLyB2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLWJhc2UsMjApKSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUsY2FsYyg4ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSwyMCkpKSk7bWluLXdpZHRoOmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyxjYWxjKDY0ICogMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFz''@;'; put 'put ''ZSwyMCkpKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSxjYWxjKDggKiAxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLDIwKSkpKX06aG9zdChbc2l6ZSo9Zml0XSl7aGVpZ2h0OmF1dG87d2lkdGg6YXV0bztjb250YWluOmxheW91dH06aG9zdChbc3RhdHVzPXN1Y2Nlc3NdKXstLWNv''@;'; put 'put ''bG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2VzcywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi03MDAsICM0MjgxMGUpKX06aG9zdChbc3RhdHVzPWRhbmdlcl0pey0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIsIHZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''cmVkLTcwMCwgI2UwMjIwMCkpfTpob3N0KFtzdGF0dXM9d2FybmluZ10pey0tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLWRhcmssIHZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtODAwLCAjYTM2NTAwKSl9Omhvc3QoW3N0YXR1cz1pbmZvXSl7LS1jb2xvcjp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtc3RhdHVzLWluZm8sIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDAsICMwMDc5YWQpKX06aG9zdChbc3RhdHVzPW5ldXRyYWxdKXstLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtbmV1dHJhbCwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rp''@;'; put 'put ''b24tNjAwLCAjNGY2MTY5KSl9Omhvc3QoW2ludmVyc2VdKXstLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCwgI2NiZDRkOCl9Omhvc3QoW2RpcmVjdGlvbj11cF0pe3RyYW5zZm9ybTpyb3RhdGUoMCl9Omhvc3QoW2RpcmVjdGlvbj1kb3duXSl7dHJhbnNm''@;'; put 'put ''b3JtOnJvdGF0ZSgxODBkZWcpfTpob3N0KFtkaXJlY3Rpb249cmlnaHRdKXt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX06aG9zdChbZGlyZWN0aW9uPWxlZnRdKXt0cmFuc2Zvcm06cm90YXRlKDI3MGRlZyl9Omhvc3QoW2ZsaXA9aG9yaXpvbnRhbF0pe3RyYW5zZm9ybTpzY2FsZSgtMSkgcm90''@;'; put 'put ''YXRlWCgxODBkZWcpfTpob3N0KFtmbGlwPXZlcnRpY2FsXSl7dHJhbnNmb3JtOnNjYWxlKC0xKSByb3RhdGVZKDE4MGRlZyl9LmFsZXJ0LC5iYWRnZXtmaWxsOnZhcigtLWJhZGdlLWNvbG9yLHZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLHZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVk''@;'; put 'put ''LTcwMCwjZTAyMjAwKSkpfTpob3N0KFtiYWRnZT1zdWNjZXNzXSl7LS1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNzAwLCAjNDI4MTBlKSl9Omhvc3QoW2JhZGdlPWRhbmdlcl0pey0tYmFkZ2UtY29sb3I6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIsIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTcwMCwgI2UwMjIwMCkpfTpob3N0KFtiYWRnZSo9d2FybmluZ10pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLWRhcmssIHZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3Itb2NocmUtODAwLCAjYTM2NTAwKSl9Omhvc3QoW2JhZGdlPWluaGVyaXRdKXstLWJhZGdlLWNvbG9yOmN1cnJlbnRDb2xvcn06aG9zdChbYmFkZ2U9aW5mb10pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJs''@;'; put 'put ''dWUtNzAwLCAjMDA3OWFkKSl9Omhvc3QoW2JhZGdlPW5ldXRyYWxdKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtbmV1dHJhbCwgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwLCAjNGY2MTY5KSl9Omhvc3QoW2JhZGdlPWluaGVyaXQtdHJpYW5n''@;'; put 'put ''bGVdKXstLWJhZGdlLWNvbG9yOmN1cnJlbnRDb2xvcn06aG9zdChbYmFkZ2VdW2ludmVyc2VdKXstLWJhZGdlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDAsICNlMDIyMDApKX06aG9zdChbYmFkZ2U9c3VjY2Vzc11b''@;'; put 'put ''aW52ZXJzZV0pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzLCB2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTcwMCwgIzQyODEwZSkpfTpob3N0KFtiYWRnZSo9d2FybmluZ11baW52ZXJzZV0pey0tYmFkZ2UtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0''@;'; put 'put ''YXR1cy13YXJuaW5nLWRhcmssIHZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtODAwLCAjYTM2NTAwKSl9Omhvc3QoW2JhZGdlKj1pbmhlcml0XVtpbnZlcnNlXSl7LS1iYWRnZS1jb2xvcjpjdXJyZW50Q29sb3J9Omhvc3QoW2JhZGdlPWluZm9dW2ludmVyc2VdKXstLWJhZGdlLWNvbG9y''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mbywgdmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCwgIzAwNzlhZCkpfS5jZHMtaW50ZXJuYWwtZG90LTF7YW5pbWF0aW9uOmZhZGVJbkFuZE91dCAxLjhzIGVhc2UtaW4gMHMgaW5maW5pdGV9LmNkcy1pbnRlcm5hbC1kb3QtMnthbmlt''@;'; put 'put ''YXRpb246ZmFkZUluQW5kT3V0IDEuOHMgZWFzZS1vdXQgLjQyMnMgaW5maW5pdGV9LmNkcy1pbnRlcm5hbC1kb3QtM3thbmltYXRpb246ZmFkZUluQW5kT3V0IDEuOHMgZWFzZS1vdXQgLjY3NXMgaW5maW5pdGV9QG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uKXsuY2RzLWludGVybmFs''@;'; put 'put ''LWRvdC0xLC5jZHMtaW50ZXJuYWwtZG90LTIsLmNkcy1pbnRlcm5hbC1kb3QtM3thbmltYXRpb246bm9uZX19YDtjb25zdCByTWU9WyJ1bmtub3duIix7b3V0bGluZTonPGNpcmNsZSBjbGFzcz0iY2RzLWludGVybmFsLWRvdC0zIiBjeD0iMzEuMSIgY3k9IjE4IiByPSIyLjkiLz48Y2lyY2xl''@;'; put 'put ''IGNsYXNzPSJjZHMtaW50ZXJuYWwtZG90LTIiIGN4PSIxOCIgY3k9IjE4IiByPSIyLjkiLz48Y2lyY2xlIGNsYXNzPSJjZHMtaW50ZXJuYWwtZG90LTEiIGN4PSI0LjkiIGN5PSIxOCIgcj0iMi45Ii8+J31dO2NsYXNzIEVze3N0YXRpYyBnZXQgcmVnaXN0cnkoKXtyZXR1cm57dW5rbm93bjpy''@;'; put 'put ''TWVbMV0sLi4uTmYuc3RhdGUuaWNvblJlZ2lzdHJ5fX1zdGF0aWMgYWRkSWNvbnMoLi4ubCl7TmYuc3RhdGUuaWNvblJlZ2lzdHJ5PXsuLi5OZi5zdGF0ZS5pY29uUmVnaXN0cnksLi4uT2JqZWN0LmZyb21FbnRyaWVzKGwuZmlsdGVyKChbYV0pPT4hRXMucmVnaXN0cnlbYV0pKX19c3RhdGlj''@;'; put 'put ''IGFkZEFsaWFzZXMoLi4ubCl7Y29uc3QgYT1sLmZpbHRlcigoW2RdKT0+RXMucmVnaXN0cnlbZF0pLmZsYXRNYXAoKFtkLGhdKT0+aC5tYXAoZj0+W2YsRXMucmVnaXN0cnlbZF1dKSk7TmYuc3RhdGUuaWNvblJlZ2lzdHJ5PXsuLi5OZi5zdGF0ZS5pY29uUmVnaXN0cnksLi4uT2JqZWN0LmZy''@;'; put 'put ''b21FbnRyaWVzKGEpfX1zdGF0aWMgZ2V0SWNvbk5hbWVGcm9tU2hhcGUobCl7cmV0dXJuIGxbMF19fXZhciBhcCxjO2Z1bmN0aW9uIHNNZShjLGwpe2xldCBhPSIiO3N3aXRjaChmdW5jdGlvbiBpTWUoYyl7c3dpdGNoKCEwKXtjYXNlIElNKGMpOnJldHVybiBhcC5OaWxTaXplVmFsdWU7Y2Fz''@;'; put 'put ''ZSBmdW5jdGlvbiBWc2UoYyl7cmV0dXJuWyJ4eHMiLCJ4cyIsInNtIiwibWQiLCJsZyIsInhsIiwieHhsIl0uaW5kZXhPZihjKT4tMX0oYyk6cmV0dXJuIGFwLlZhbGlkU2l6ZVN0cmluZztjYXNlIGZ1bmN0aW9uIEZhZShjKXtyZXR1cm4gb1ooYykmJiFQYWUoYy50cmltKCkpJiYrYz09K2N9''@;'; put 'put ''KGMpOnJldHVybiBhcC5WYWxpZE51bWVyaWNTdHJpbmc7ZGVmYXVsdDpyZXR1cm4gYXAuQmFkU2l6ZVZhbHVlfX0oZnVuY3Rpb24gb01lKGMpe3JldHVybiBJTShjKT8iIjpmdW5jdGlvbiBKQ2UoYyxsLGE9IiIpe2NvbnN0IGQ9Yy5zcGxpdCgiICIpLGg9IiI9PT1hP2QuZmlsdGVyKGY9PmYh''@;'; put 'put ''PT1sKTpkLm1hcChmPT5mPT09bD9hOmYpO3JldHVybiBoLmxlbmd0aD4wP2guam9pbigiICIpOiIifShjLCJmaXQiKX0obCkpKXtjYXNlIGFwLlZhbGlkTnVtZXJpY1N0cmluZzpyZXR1cm4gYT1UWihwYXJzZUludChsKSksdm9pZCBmdW5jdGlvbiBqU2UoYywuLi5sKXtsLmZvckVhY2goKFth''@;'; put 'put ''LGRdKT0+e2Muc3R5bGVbYV09ZH0pfShjLC4uLmZ1bmN0aW9uIGFNZShjLGwpe3JldHVybiFETShjKSYmYy5pbmRleE9mKCJmaXQiKT4tMT9bWyJ3aWR0aCIsImF1dG8iXSxbImhlaWdodCIsImF1dG8iXSxbIm1pbi13aWR0aCIsbF0sWyJtaW4taGVpZ2h0IixsXV06W1sid2lkdGgiLGxdLFsi''@;'; put 'put ''aGVpZ2h0IixsXSxbIm1pbi13aWR0aCIsbF0sWyJtaW4taGVpZ2h0IixsXV19KGwsYSkpO2Nhc2UgYXAuVmFsaWRTaXplU3RyaW5nOmNhc2UgYXAuTmlsU2l6ZVZhbHVlOnJldHVybiB2b2lkIGZ1bmN0aW9uIHpTZShjLC4uLmwpe2wuZm9yRWFjaChhPT57Yy5zdHlsZVthXT0iIn0pfShjLCJ3''@;'; put 'put ''aWR0aCIsImhlaWdodCIsIm1pbi13aWR0aCIsIm1pbi1oZWlnaHQiKTtkZWZhdWx0OnJldHVybn19ZnVuY3Rpb24ga1ooYyl7cmV0dXJuIGMuYmFkZ2UmJigiaW5oZXJpdC10cmlhbmdsZSI9PT1jLmJhZGdlfHwid2FybmluZy10cmlhbmdsZSI9PT1jLmJhZGdlKX0oYz1hcHx8KGFwPXt9KSku''@;'; put 'put ''QmFkU2l6ZVZhbHVlPSJiYWQtdmFsdWUiLGMuVmFsaWRTaXplU3RyaW5nPSJ2YWx1ZS1pcy1zdHJpbmciLGMuVmFsaWROdW1lcmljU3RyaW5nPSJ2YWx1ZS1pcy1udW1lcmljIixjLk5pbFNpemVWYWx1ZT0idmFsdWUtaXMtbmlsIjtjbGFzcyBWZiBleHRlbmRzIE5Ne2NvbnN0cnVjdG9yKCl7''@;'; put 'put ''c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9zaGFwZT0idW5rbm93biIsdGhpcy5zb2xpZD0hMSx0aGlzLmludmVyc2U9ITF9c3RhdGljIGdldCBzdHlsZXMoKXtyZXR1cm5bVlNlLG5NZV19Z2V0IHNoYXBlKCl7cmV0dXJuIHRoaXMuX3NoYXBlfXNldCBzaGFwZShsKXtpZihmdW5jdGlvbiBS''@;'; put 'put ''Q2UoYyxsKXtyZXR1cm4hSU0oYykmJk5hZShjLGwpfShsLHRoaXMuX3NoYXBlKSl7Y29uc3QgYT10aGlzLl9zaGFwZTt0aGlzLl9zaGFwZT1sLHRoaXMucmVxdWVzdFVwZGF0ZSgic2hhcGUiLGEpfX1nZXQgc2l6ZSgpe3JldHVybiB0aGlzLl9zaXplfXNldCBzaXplKGwpe2lmKGZ1bmN0aW9u''@;'; put 'put ''IElDZShjLGwpe3JldHVybiBmdW5jdGlvbiBEQ2UoYyl7cmV0dXJuIE1hZShTdHJpbmcsYyl8fERNKGMpfShjKSYmTmFlKGMsbCl9KGwsdGhpcy5fc2l6ZSkpe2NvbnN0IGE9dGhpcy5fc2l6ZTt0aGlzLl9zaXplPWwsc01lKHRoaXMsbCksdGhpcy5yZXF1ZXN0VXBkYXRlKCJzaXplIixhKX19''@;'; put 'put ''dXBkYXRlZChsKXtpZihsLmhhcygiaW5uZXJPZmZzZXQiKSYmdGhpcy5pbm5lck9mZnNldD4wKXtjb25zdCBhPVRaKC0xKnRoaXMuaW5uZXJPZmZzZXQpLGQ9YGNhbGMoMTAwJSArICR7VFooMip0aGlzLmlubmVyT2Zmc2V0KX0pYDt0aGlzLnN2Zy5zdHlsZS53aWR0aD1kLHRoaXMuc3ZnLnN0''@;'; put 'put ''eWxlLmhlaWdodD1kLHRoaXMuc3ZnLnN0eWxlLm1hcmdpbj1gJHthfSAwIDAgJHthfWB9fWZpcnN0VXBkYXRlZChsKXtpZihzdXBlci5maXJzdFVwZGF0ZWQobCksdGhpcy5pc0Nvbm5lY3RlZCl7bGV0IGE9InVua25vd24iO3RoaXMuc3Vic2NyaXB0aW9uPU5mLnN0YXRlVXBkYXRlcy5zdWJz''@;'; put 'put ''Y3JpYmUoZD0+eyJpY29uUmVnaXN0cnkiPT09ZC5rZXkmJkVzLnJlZ2lzdHJ5W3RoaXMuc2hhcGVdJiZhIT09dGhpcy5zaGFwZSYmKGE9dGhpcy5zaGFwZSx0aGlzLnJlcXVlc3RVcGRhdGUoInNoYXBlIikpfSl9fWRpc2Nvbm5lY3RlZENhbGxiYWNrKCl7c3VwZXIuZGlzY29ubmVjdGVkQ2Fs''@;'; put 'put ''bGJhY2soKSx0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKX1yZW5kZXIoKXtyZXR1cm4gb1ooRXMucmVnaXN0cnlbdGhpcy5zaGFwZV0pP09TZWA8c3BhbiAuaW5uZXJIVE1MPSIke0VzLnJlZ2lzdHJ5W3RoaXMuc2hhcGVdfSI+PC9zcGFuPmA6UFNlYDxzdmcgLmlubmVySFRNTD0i''@;'; put 'put ''JHtmdW5jdGlvbiBjTWUoYyl7Y29uc3QgbD1Fcy5yZWdpc3RyeVtjLnNoYXBlXT8/RXMucmVnaXN0cnkudW5rbm93bjtsZXQgYT1jLnNvbGlkJiZsLnNvbGlkP2wuc29saWQ6bC5vdXRsaW5lO3JldHVybiBjLmJhZGdlJiYha1ooYykmJihhPWMuc29saWQ/bC5zb2xpZEJhZGdlZD8/YTpsLm91''@;'; put 'put ''dGxpbmVCYWRnZWQ/P2EpLGtaKGMpJiYoYT1jLnNvbGlkP2wuc29saWRBbGVydGVkPz9hOmwub3V0bGluZUFsZXJ0ZWQ/P2EpLGF9KHRoaXMpK2Z1bmN0aW9uIGxNZShjKXtsZXQgbD0iIjtyZXR1cm4gYy5iYWRnZSYma1ooYyk/bD0nPHBhdGggZD0iTTI2Ljg1IDEuMTRMMjEuMTMgMTFhMS4y''@;'; put 'put ''OCAxLjI4IDAgMDAxLjEgMmgxMS40NWExLjI4IDEuMjggMCAwMDEuMS0ybC01LjcyLTkuODZhMS4yOCAxLjI4IDAgMDAtMi4yMSAweiIgY2xhc3M9ImFsZXJ0IiAvPic6Yy5iYWRnZSYmKGw9JzxjaXJjbGUgY3g9IjMwIiBjeT0iNiIgcj0iNSIgY2xhc3M9ImJhZGdlIiAvPicpLGx9KHRoaXMp''@;'; put 'put ''fSIgdmlld0JveD0iMCAwIDM2IDM2IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGFyaWEtaGlkZGVuPSJ0cnVlIj48L3N2Zz5gfX1mdW5jdGlvbiBWTShjKXtyZXR1cm4hIWMmJihjIGluc3RhbmNlb2YgWHR8fCRlKGMubGlmdCkmJiRlKGMuc3Vic2NyaWJlKSl9SGYoW3Rt''@;'; put 'put ''KHt0eXBlOlN0cmluZ30pXSxWZi5wcm90b3R5cGUsInNoYXBlIixudWxsKSxIZihbdG0oe3R5cGU6U3RyaW5nfSldLFZmLnByb3RvdHlwZSwic2l6ZSIsbnVsbCksSGYoW3RtKHt0eXBlOlN0cmluZ30pXSxWZi5wcm90b3R5cGUsImRpcmVjdGlvbiIsdm9pZCAwKSxIZihbdG0oe3R5cGU6U3Ry''@;'; put 'put ''aW5nfSldLFZmLnByb3RvdHlwZSwiZmxpcCIsdm9pZCAwKSxIZihbdG0oe3R5cGU6Qm9vbGVhbn0pXSxWZi5wcm90b3R5cGUsInNvbGlkIix2b2lkIDApLEhmKFt0bSh7dHlwZTpTdHJpbmd9KV0sVmYucHJvdG90eXBlLCJzdGF0dXMiLHZvaWQgMCksSGYoW3RtKHt0eXBlOkJvb2xlYW59KV0s''@;'; put 'put ''VmYucHJvdG90eXBlLCJpbnZlcnNlIix2b2lkIDApLEhmKFt0bSh7dHlwZTpTdHJpbmd9KV0sVmYucHJvdG90eXBlLCJiYWRnZSIsdm9pZCAwKSxIZihbZnVuY3Rpb24gUVNlKGMpe3JldHVybihsLGEpPT57Y29uc3QgZD1Oc2UoYSxjKTtyZXR1cm4gZCYmKGQucmVmbGVjdD0hIWM/LnJlZmxl''@;'; put 'put ''Y3QmJmMucmVmbGVjdCxkLnJlZmxlY3QmJiFjPy5hdHRyaWJ1dGUmJihkLmF0dHJpYnV0ZT0iXyIrVTgoYSkpKSxQc2UoZCkobCxhKX19KHt0eXBlOk51bWJlcn0pXSxWZi5wcm90b3R5cGUsImlubmVyT2Zmc2V0Iix2b2lkIDApLEhmKFtmdW5jdGlvbiB0TWUoYyxsKXtyZXR1cm4oKHtmaW5p''@;'; put 'put ''c2hlcjpjLGRlc2NyaXB0b3I6bH0pPT4oYSxkKT0+e3ZhciBoO2lmKHZvaWQgMD09PWQpe2NvbnN0IGY9bnVsbCE9PShoPWEub3JpZ2luYWxLZXkpJiZ2b2lkIDAhPT1oP2g6YS5rZXksdj1udWxsIT1sP3traW5kOiJtZXRob2QiLHBsYWNlbWVudDoicHJvdG90eXBlIixrZXk6ZixkZXNjcmlw''@;'; put 'put ''dG9yOmwoYS5rZXkpfTp7Li4uYSxrZXk6Zn07cmV0dXJuIG51bGwhPWMmJih2LmZpbmlzaGVyPWZ1bmN0aW9uKE0pe2MoTSxmKX0pLHZ9e2NvbnN0IGY9YS5jb25zdHJ1Y3Rvcjt2b2lkIDAhPT1sJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxkLGwoZCkpLGM/LihmLGQpfX0pKHtkZXNjcmlw''@;'; put 'put ''dG9yOmE9Pntjb25zdCBkPXtnZXQoKXt2YXIgaCxmO3JldHVybiBudWxsIT09KGY9bnVsbD09PShoPXRoaXMucmVuZGVyUm9vdCl8fHZvaWQgMD09PWg/dm9pZCAwOmgucXVlcnlTZWxlY3RvcihjKSkmJnZvaWQgMCE9PWY/ZjpudWxsfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH07''@;'; put 'put ''aWYobCl7Y29uc3QgaD0ic3ltYm9sIj09dHlwZW9mIGE/U3ltYm9sKCk6Il9fIithO2QuZ2V0PWZ1bmN0aW9uKCl7dmFyIGYsdjtyZXR1cm4gdm9pZCAwPT09dGhpc1toXSYmKHRoaXNbaF09bnVsbCE9PSh2PW51bGw9PT0oZj10aGlzLnJlbmRlclJvb3QpfHx2b2lkIDA9PT1mP3ZvaWQgMDpm''@;'; put 'put ''LnF1ZXJ5U2VsZWN0b3IoYykpJiZ2b2lkIDAhPT12P3Y6bnVsbCksdGhpc1toXX19cmV0dXJuIGR9fSl9KCJzdmciKV0sVmYucHJvdG90eXBlLCJzdmciLHZvaWQgMCksZnVuY3Rpb24gclNlKGMsbCl7emFlKCkmJlVhZShbImN1c3RvbUVsZW1lbnRzIl0pJiZuU2UoYyxsLHdpbmRvdy5jdXN0''@;'; put 'put ''b21FbGVtZW50cyl9KCJjZHMtaWNvbiIsVmYpO2NvbnN0IERaPWM9PmMmJiJudW1iZXIiPT10eXBlb2YgYy5sZW5ndGgmJiJmdW5jdGlvbiIhPXR5cGVvZiBjO2Z1bmN0aW9uIEJzZShjKXtyZXR1cm4gJGUoYz8udGhlbil9ZnVuY3Rpb24ganNlKGMpe3JldHVybiAkZShjW2RpXSl9ZnVuY3Rp''@;'; put 'put ''b24genNlKGMpe3JldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciYmJGUoYz8uW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSl9ZnVuY3Rpb24gVXNlKGMpe3JldHVybiBuZXcgVHlwZUVycm9yKGBZb3UgcHJvdmlkZWQgJHtudWxsIT09YyYmIm9iamVjdCI9PXR5cGVvZiBjPyJhbiBpbnZhbGlkIG9i''@;'; put 'put ''amVjdCI6YCcke2N9J2B9IHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuYCl9Y29uc3QgWnNlPWZ1bmN0aW9uIG1NZSgpe3Jl''@;'; put 'put ''dHVybiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcj9TeW1ib2wuaXRlcmF0b3I6IkBAaXRlcmF0b3IifSgpO2Z1bmN0aW9uIFdzZShjKXtyZXR1cm4gJGUoYz8uW1pzZV0pfWZ1bmN0aW9uIFlzZShjKXtyZXR1cm4gZnVuY3Rpb24gcnNlKGMsbCxhKXtpZighU3lt''@;'; put 'put ''Ym9sLmFzeW5jSXRlcmF0b3IpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuIik7dmFyIGgsZD1hLmFwcGx5KGMsbHx8W10pLGY9W107cmV0dXJuIGg9T2JqZWN0LmNyZWF0ZSgoImZ1bmN0aW9uIj09dHlwZW9mIEFzeW5jSXRlcmF0b3I/''@;'; put 'put ''QXN5bmNJdGVyYXRvcjpPYmplY3QpLnByb3RvdHlwZSksTSgibmV4dCIpLE0oInRocm93IiksTSgicmV0dXJuIixmdW5jdGlvbiB2KEVlKXtyZXR1cm4gZnVuY3Rpb24oQmUpe3JldHVybiBQcm9taXNlLnJlc29sdmUoQmUpLnRoZW4oRWUsY2UpfX0pLGhbU3ltYm9sLmFzeW5jSXRlcmF0b3Jd''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGg7ZnVuY3Rpb24gTShFZSxCZSl7ZFtFZV0mJihoW0VlXT1mdW5jdGlvbihxZSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG50LGx0KXtmLnB1c2goW0VlLHFlLG50LGx0XSk+MXx8RChFZSxxZSl9KX0sQmUmJihoW0VlXT1CZShoW0VlXSkp''@;'; put 'put ''KX1mdW5jdGlvbiBEKEVlLEJlKXt0cnl7IWZ1bmN0aW9uIFooRWUpe0VlLnZhbHVlIGluc3RhbmNlb2YgZW0/UHJvbWlzZS5yZXNvbHZlKEVlLnZhbHVlLnYpLnRoZW4obmUsY2UpOmJlKGZbMF1bMl0sRWUpfShkW0VlXShCZSkpfWNhdGNoKHFlKXtiZShmWzBdWzNdLHFlKX19ZnVuY3Rpb24g''@;'; put 'put ''bmUoRWUpe0QoIm5leHQiLEVlKX1mdW5jdGlvbiBjZShFZSl7RCgidGhyb3ciLEVlKX1mdW5jdGlvbiBiZShFZSxCZSl7RWUoQmUpLGYuc2hpZnQoKSxmLmxlbmd0aCYmRChmWzBdWzBdLGZbMF1bMV0pfX0odGhpcyxhcmd1bWVudHMsZnVuY3Rpb24qKCl7Y29uc3QgYT1jLmdldFJlYWRlcigp''@;'; put 'put ''O3RyeXtmb3IoOzspe2NvbnN0e3ZhbHVlOmQsZG9uZTpofT15aWVsZCBlbShhLnJlYWQoKSk7aWYoaClyZXR1cm4geWllbGQgZW0odm9pZCAwKTt5aWVsZCB5aWVsZCBlbShkKX19ZmluYWxseXthLnJlbGVhc2VMb2NrKCl9fSl9ZnVuY3Rpb24gR3NlKGMpe3JldHVybiAkZShjPy5nZXRSZWFk''@;'; put 'put ''ZXIpfWZ1bmN0aW9uIGMxKGMpe2lmKGMgaW5zdGFuY2VvZiBYdClyZXR1cm4gYztpZihudWxsIT1jKXtpZihqc2UoYykpcmV0dXJuIGZ1bmN0aW9uIHZNZShjKXtyZXR1cm4gbmV3IFh0KGw9Pntjb25zdCBhPWNbZGldKCk7aWYoJGUoYS5zdWJzY3JpYmUpKXJldHVybiBhLnN1YnNjcmliZShs''@;'; put 'put ''KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcm92aWRlZCBvYmplY3QgZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVudCBTeW1ib2wub2JzZXJ2YWJsZSIpfSl9KGMpO2lmKERaKGMpKXJldHVybiBmdW5jdGlvbiBiTWUoYyl7cmV0dXJuIG5ldyBYdChsPT57Zm9yKGxldCBhPTA7YTxjLmxlbmd0''@;'; put 'put ''aCYmIWwuY2xvc2VkO2ErKylsLm5leHQoY1thXSk7bC5jb21wbGV0ZSgpfSl9KGMpO2lmKEJzZShjKSlyZXR1cm4gZnVuY3Rpb24geU1lKGMpe3JldHVybiBuZXcgWHQobD0+e2MudGhlbihhPT57bC5jbG9zZWR8fChsLm5leHQoYSksbC5jb21wbGV0ZSgpKX0sYT0+bC5lcnJvcihhKSkudGhl''@;'; put 'put ''bihudWxsLFJpKX0pfShjKTtpZih6c2UoYykpcmV0dXJuICRzZShjKTtpZihXc2UoYykpcmV0dXJuIGZ1bmN0aW9uIF9NZShjKXtyZXR1cm4gbmV3IFh0KGw9Pntmb3IoY29uc3QgYSBvZiBjKWlmKGwubmV4dChhKSxsLmNsb3NlZClyZXR1cm47bC5jb21wbGV0ZSgpfSl9KGMpO2lmKEdzZShj''@;'; put 'put ''KSlyZXR1cm4gZnVuY3Rpb24gd01lKGMpe3JldHVybiAkc2UoWXNlKGMpKX0oYyl9dGhyb3cgVXNlKGMpfWZ1bmN0aW9uICRzZShjKXtyZXR1cm4gbmV3IFh0KGw9PnsoZnVuY3Rpb24gQ01lKGMsbCl7dmFyIGEsZCxoLGY7cmV0dXJuIGZ1bmN0aW9uIHRzZShjLGwsYSxkKXtyZXR1cm4gbmV3''@;'; put 'put ''KGF8fChhPVByb21pc2UpKShmdW5jdGlvbihmLHYpe2Z1bmN0aW9uIE0obmUpe3RyeXtaKGQubmV4dChuZSkpfWNhdGNoKGNlKXt2KGNlKX19ZnVuY3Rpb24gRChuZSl7dHJ5e1ooZC50aHJvdyhuZSkpfWNhdGNoKGNlKXt2KGNlKX19ZnVuY3Rpb24gWihuZSl7bmUuZG9uZT9mKG5lLnZhbHVl''@;'; put 'put ''KTpmdW5jdGlvbiBoKGYpe3JldHVybiBmIGluc3RhbmNlb2YgYT9mOm5ldyBhKGZ1bmN0aW9uKHYpe3YoZil9KX0obmUudmFsdWUpLnRoZW4oTSxEKX1aKChkPWQuYXBwbHkoYyxsfHxbXSkpLm5leHQoKSl9KX0odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3RyeXtmb3IoYT1pc2Uo''@;'; put 'put ''Yyk7IShkPXlpZWxkIGEubmV4dCgpKS5kb25lOylpZihsLm5leHQoZC52YWx1ZSksbC5jbG9zZWQpcmV0dXJufWNhdGNoKHYpe2g9e2Vycm9yOnZ9fWZpbmFsbHl7dHJ5e2QmJiFkLmRvbmUmJihmPWEucmV0dXJuKSYmKHlpZWxkIGYuY2FsbChhKSl9ZmluYWxseXtpZihoKXRocm93IGguZXJy''@;'; put 'put ''b3J9fWwuY29tcGxldGUoKX0pfSkoYyxsKS5jYXRjaChhPT5sLmVycm9yKGEpKX0pfWZ1bmN0aW9uIFE0KGMsbCxhLGQ9MCxoPSExKXtjb25zdCBmPWwuc2NoZWR1bGUoZnVuY3Rpb24oKXthKCksaD9jLmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsZCkpOnRoaXMudW5zdWJzY3JpYmUoKX0sZCk7''@;'; put 'put ''aWYoYy5hZGQoZiksIWgpcmV0dXJuIGZ9ZnVuY3Rpb24gS3NlKGMsbD0wKXtyZXR1cm4gQmkoKGEsZCk9PnthLnN1YnNjcmliZShWaShkLGg9PlE0KGQsYywoKT0+ZC5uZXh0KGgpLGwpLCgpPT5RNChkLGMsKCk9PmQuY29tcGxldGUoKSxsKSxoPT5RNChkLGMsKCk9PmQuZXJyb3IoaCksbCkp''@;'; put 'put ''KX0pfWZ1bmN0aW9uIHFzZShjLGw9MCl7cmV0dXJuIEJpKChhLGQpPT57ZC5hZGQoYy5zY2hlZHVsZSgoKT0+YS5zdWJzY3JpYmUoZCksbCkpfSl9ZnVuY3Rpb24gWHNlKGMsbCl7aWYoIWMpdGhyb3cgbmV3IEVycm9yKCJJdGVyYWJsZSBjYW5ub3QgYmUgbnVsbCIpO3JldHVybiBuZXcgWHQo''@;'; put 'put ''YT0+e1E0KGEsbCwoKT0+e2NvbnN0IGQ9Y1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtRNChhLGwsKCk9PntkLm5leHQoKS50aGVuKGg9PntoLmRvbmU/YS5jb21wbGV0ZSgpOmEubmV4dChoLnZhbHVlKX0pfSwwLCEwKX0pfSl9ZnVuY3Rpb24gV3UoYyxsKXtyZXR1cm4gbD9mdW5jdGlvbiBB''@;'; put 'put ''TWUoYyxsKXtpZihudWxsIT1jKXtpZihqc2UoYykpcmV0dXJuIGZ1bmN0aW9uIFNNZShjLGwpe3JldHVybiBjMShjKS5waXBlKHFzZShsKSxLc2UobCkpfShjLGwpO2lmKERaKGMpKXJldHVybiBmdW5jdGlvbiB4TWUoYyxsKXtyZXR1cm4gbmV3IFh0KGE9PntsZXQgZD0wO3JldHVybiBsLnNj''@;'; put 'put ''aGVkdWxlKGZ1bmN0aW9uKCl7ZD09PWMubGVuZ3RoP2EuY29tcGxldGUoKTooYS5uZXh0KGNbZCsrXSksYS5jbG9zZWR8fHRoaXMuc2NoZWR1bGUoKSl9KX0pfShjLGwpO2lmKEJzZShjKSlyZXR1cm4gZnVuY3Rpb24gTU1lKGMsbCl7cmV0dXJuIGMxKGMpLnBpcGUocXNlKGwpLEtzZShsKSl9''@;'; put 'put ''KGMsbCk7aWYoenNlKGMpKXJldHVybiBYc2UoYyxsKTtpZihXc2UoYykpcmV0dXJuIGZ1bmN0aW9uIEVNZShjLGwpe3JldHVybiBuZXcgWHQoYT0+e2xldCBkO3JldHVybiBRNChhLGwsKCk9PntkPWNbWnNlXSgpLFE0KGEsbCwoKT0+e2xldCBoLGY7dHJ5eyh7dmFsdWU6aCxkb25lOmZ9PWQu''@;'; put 'put ''bmV4dCgpKX1jYXRjaCh2KXtyZXR1cm4gdm9pZCBhLmVycm9yKHYpfWY/YS5jb21wbGV0ZSgpOmEubmV4dChoKX0sMCwhMCl9KSwoKT0+JGUoZD8ucmV0dXJuKSYmZC5yZXR1cm4oKX0pfShjLGwpO2lmKEdzZShjKSlyZXR1cm4gZnVuY3Rpb24gVE1lKGMsbCl7cmV0dXJuIFhzZShZc2UoYyks''@;'; put 'put ''bCl9KGMsbCl9dGhyb3cgVXNlKGMpfShjLGwpOmMxKGMpfWZ1bmN0aW9uIEpzZShjKXtyZXR1cm4gYyYmJGUoYy5zY2hlZHVsZSl9ZnVuY3Rpb24gSVooYyl7cmV0dXJuIGNbYy5sZW5ndGgtMV19ZnVuY3Rpb24gUXNlKGMpe3JldHVybiAkZShJWihjKSk/Yy5wb3AoKTp2b2lkIDB9ZnVuY3Rp''@;'; put 'put ''b24gQk0oYyl7cmV0dXJuIEpzZShJWihjKSk/Yy5wb3AoKTp2b2lkIDB9ZnVuY3Rpb24gZmEoLi4uYyl7cmV0dXJuIFd1KGMsQk0oYykpfWNvbnN0e2lzQXJyYXk6RE1lfT1BcnJheSx7Z2V0UHJvdG90eXBlT2Y6SU1lLHByb3RvdHlwZTpSTWUsa2V5czpMTWV9PU9iamVjdDtmdW5jdGlvbiBl''@;'; put 'put ''bGUoYyl7aWYoMT09PWMubGVuZ3RoKXtjb25zdCBsPWNbMF07aWYoRE1lKGwpKXJldHVybnthcmdzOmwsa2V5czpudWxsfTtpZihmdW5jdGlvbiBPTWUoYyl7cmV0dXJuIGMmJiJvYmplY3QiPT10eXBlb2YgYyYmSU1lKGMpPT09Uk1lfShsKSl7Y29uc3QgYT1MTWUobCk7cmV0dXJue2FyZ3M6''@;'; put 'put ''YS5tYXAoZD0+bFtkXSksa2V5czphfX19cmV0dXJue2FyZ3M6YyxrZXlzOm51bGx9fWNvbnN0e2lzQXJyYXk6UE1lfT1BcnJheTtmdW5jdGlvbiBSWihjKXtyZXR1cm4gT3IobD0+ZnVuY3Rpb24gRk1lKGMsbCl7cmV0dXJuIFBNZShsKT9jKC4uLmwpOmMobCl9KGMsbCkpfWZ1bmN0aW9uIHRs''@;'; put 'put ''ZShjLGwpe3JldHVybiBjLnJlZHVjZSgoYSxkLGgpPT4oYVtkXT1sW2hdLGEpLHt9KX1mdW5jdGlvbiAkOCguLi5jKXtjb25zdCBsPUJNKGMpLGE9UXNlKGMpLHthcmdzOmQsa2V5czpofT1lbGUoYyk7aWYoMD09PWQubGVuZ3RoKXJldHVybiBXdShbXSxsKTtjb25zdCBmPW5ldyBYdChmdW5j''@;'; put 'put ''dGlvbiBITWUoYyxsLGE9Y24pe3JldHVybiBkPT57bmxlKGwsKCk9Pntjb25zdHtsZW5ndGg6aH09YyxmPW5ldyBBcnJheShoKTtsZXQgdj1oLE09aDtmb3IobGV0IEQ9MDtEPGg7RCsrKW5sZShsLCgpPT57Y29uc3QgWj1XdShjW0RdLGwpO2xldCBuZT0hMTtaLnN1YnNjcmliZShWaShkLGNl''@;'; put 'put ''PT57ZltEXT1jZSxuZXx8KG5lPSEwLE0tLSksTXx8ZC5uZXh0KGEoZi5zbGljZSgpKSl9LCgpPT57LS12fHxkLmNvbXBsZXRlKCl9KSl9LGQpfSxkKX19KGQsbCxoP3Y9PnRsZShoLHYpOmNuKSk7cmV0dXJuIGE/Zi5waXBlKFJaKGEpKTpmfWZ1bmN0aW9uIG5sZShjLGwsYSl7Yz9RNChhLGMs''@;'; put 'put ''bCk6bCgpfWNvbnN0IE1SPXR0KGM9PmZ1bmN0aW9uKCl7Yyh0aGlzKSx0aGlzLm5hbWU9IkVtcHR5RXJyb3IiLHRoaXMubWVzc2FnZT0ibm8gZWxlbWVudHMgaW4gc2VxdWVuY2UifSk7ZnVuY3Rpb24gTjAoYyxsLGE9MS8wKXtyZXR1cm4gJGUobCk/TjAoKGQsaCk9Pk9yKChmLHYpPT5sKGQs''@;'; put 'put ''ZixoLHYpKShjMShjKGQsaCkpKSxhKTooIm51bWJlciI9PXR5cGVvZiBsJiYoYT1sKSxCaSgoZCxoKT0+ZnVuY3Rpb24gTk1lKGMsbCxhLGQsaCxmLHYsTSl7Y29uc3QgRD1bXTtsZXQgWj0wLG5lPTAsY2U9ITE7Y29uc3QgYmU9KCk9PntjZSYmIUQubGVuZ3RoJiYhWiYmbC5jb21wbGV0ZSgp''@;'; put 'put ''fSxFZT1xZT0+WjxkP0JlKHFlKTpELnB1c2gocWUpLEJlPXFlPT57ZiYmbC5uZXh0KHFlKSxaKys7bGV0IG50PSExO2MxKGEocWUsbmUrKykpLnN1YnNjcmliZShWaShsLGx0PT57aD8uKGx0KSxmP0VlKGx0KTpsLm5leHQobHQpfSwoKT0+e250PSEwfSx2b2lkIDAsKCk9PntpZihudCl0cnl7''@;'; put 'put ''Zm9yKFotLTtELmxlbmd0aCYmWjxkOyl7Y29uc3QgbHQ9RC5zaGlmdCgpO3Y/UTQobCx2LCgpPT5CZShsdCkpOkJlKGx0KX1iZSgpfWNhdGNoKGx0KXtsLmVycm9yKGx0KX19KSl9O3JldHVybiBjLnN1YnNjcmliZShWaShsLEVlLCgpPT57Y2U9ITAsYmUoKX0pKSwoKT0+e00/LigpfX0oZCxo''@;'; put 'put ''LGMsYSkpKX1mdW5jdGlvbiAkYihjPTEvMCl7cmV0dXJuIE4wKGNuLGMpfWZ1bmN0aW9uIExaKC4uLmMpe3JldHVybiBmdW5jdGlvbiBWTWUoKXtyZXR1cm4gJGIoMSl9KCkoV3UoYyxCTShjKSkpfWZ1bmN0aW9uIHJsZShjKXtyZXR1cm4gbmV3IFh0KGw9PntjMShjKCkpLnN1YnNjcmliZShs''@;'; put 'put ''KX0pfWZ1bmN0aW9uIHhSKGMsbCl7Y29uc3QgYT0kZShjKT9jOigpPT5jLGQ9aD0+aC5lcnJvcihhKCkpO3JldHVybiBuZXcgWHQobD9oPT5sLnNjaGVkdWxlKGQsMCxoKTpkKX1jb25zdCB5Mj1uZXcgWHQoYz0+Yy5jb21wbGV0ZSgpKTtmdW5jdGlvbiBPWigpe3JldHVybiBCaSgoYyxsKT0+''@;'; put 'put ''e2xldCBhPW51bGw7Yy5fcmVmQ291bnQrKztjb25zdCBkPVZpKGwsdm9pZCAwLHZvaWQgMCx2b2lkIDAsKCk9PntpZighY3x8Yy5fcmVmQ291bnQ8PTB8fDA8LS1jLl9yZWZDb3VudClyZXR1cm4gdm9pZChhPW51bGwpO2NvbnN0IGg9Yy5fY29ubmVjdGlvbixmPWE7YT1udWxsLGgmJighZnx8''@;'; put 'put ''aD09PWYpJiZoLnVuc3Vic2NyaWJlKCksbC51bnN1YnNjcmliZSgpfSk7Yy5zdWJzY3JpYmUoZCksZC5jbG9zZWR8fChhPWMuY29ubmVjdCgpKX0pfWNsYXNzIFBaIGV4dGVuZHMgWHR7Y29uc3RydWN0b3IobCxhKXtzdXBlcigpLHRoaXMuc291cmNlPWwsdGhpcy5zdWJqZWN0RmFjdG9yeT1h''@;'; put 'put ''LHRoaXMuX3N1YmplY3Q9bnVsbCx0aGlzLl9yZWZDb3VudD0wLHRoaXMuX2Nvbm5lY3Rpb249bnVsbCxKcihsKSYmKHRoaXMubGlmdD1sLmxpZnQpfV9zdWJzY3JpYmUobCl7cmV0dXJuIHRoaXMuZ2V0U3ViamVjdCgpLnN1YnNjcmliZShsKX1nZXRTdWJqZWN0KCl7Y29uc3QgbD10aGlzLl9z''@;'; put 'put ''dWJqZWN0O3JldHVybighbHx8bC5pc1N0b3BwZWQpJiYodGhpcy5fc3ViamVjdD10aGlzLnN1YmplY3RGYWN0b3J5KCkpLHRoaXMuX3N1YmplY3R9X3RlYXJkb3duKCl7dGhpcy5fcmVmQ291bnQ9MDtjb25zdHtfY29ubmVjdGlvbjpsfT10aGlzO3RoaXMuX3N1YmplY3Q9dGhpcy5fY29ubmVj''@;'; put 'put ''dGlvbj1udWxsLGw/LnVuc3Vic2NyaWJlKCl9Y29ubmVjdCgpe2xldCBsPXRoaXMuX2Nvbm5lY3Rpb247aWYoIWwpe2w9dGhpcy5fY29ubmVjdGlvbj1uZXcgcXQ7Y29uc3QgYT10aGlzLmdldFN1YmplY3QoKTtsLmFkZCh0aGlzLnNvdXJjZS5zdWJzY3JpYmUoVmkoYSx2b2lkIDAsKCk9Pnt0''@;'; put 'put ''aGlzLl90ZWFyZG93bigpLGEuY29tcGxldGUoKX0sZD0+e3RoaXMuX3RlYXJkb3duKCksYS5lcnJvcihkKX0sKCk9PnRoaXMuX3RlYXJkb3duKCkpKSksbC5jbG9zZWQmJih0aGlzLl9jb25uZWN0aW9uPW51bGwsbD1xdC5FTVBUWSl9cmV0dXJuIGx9cmVmQ291bnQoKXtyZXR1cm4gT1ooKSh0''@;'; put 'put ''aGlzKX19ZnVuY3Rpb24gVjEoYyxsKXtyZXR1cm4gQmkoKGEsZCk9PntsZXQgaD1udWxsLGY9MCx2PSExO2NvbnN0IE09KCk9PnYmJiFoJiZkLmNvbXBsZXRlKCk7YS5zdWJzY3JpYmUoVmkoZCxEPT57aD8udW5zdWJzY3JpYmUoKTtsZXQgWj0wO2NvbnN0IG5lPWYrKztjMShjKEQsbmUpKS5z''@;'; put 'put ''dWJzY3JpYmUoaD1WaShkLGNlPT5kLm5leHQobD9sKEQsY2UsbmUsWisrKTpjZSksKCk9PntoPW51bGwsTSgpfSkpfSwoKT0+e3Y9ITAsTSgpfSkpfSl9ZnVuY3Rpb24gQmYoYyl7cmV0dXJuIGM8PTA/KCk9PnkyOkJpKChsLGEpPT57bGV0IGQ9MDtsLnN1YnNjcmliZShWaShhLGg9PnsrK2Q8''@;'; put 'put ''PWMmJihhLm5leHQoaCksYzw9ZCYmYS5jb21wbGV0ZSgpKX0pKX0pfWZ1bmN0aW9uIF8yKC4uLmMpe2NvbnN0IGw9Qk0oYyk7cmV0dXJuIEJpKChhLGQpPT57KGw/TFooYyxhLGwpOkxaKGMsYSkpLnN1YnNjcmliZShkKX0pfWZ1bmN0aW9uIFdsKGMsbCl7cmV0dXJuIEJpKChhLGQpPT57bGV0''@;'; put 'put ''IGg9MDthLnN1YnNjcmliZShWaShkLGY9PmMuY2FsbChsLGYsaCsrKSYmZC5uZXh0KGYpKSl9KX1mdW5jdGlvbiBFUihjKXtyZXR1cm4gQmkoKGwsYSk9PntsZXQgZD0hMTtsLnN1YnNjcmliZShWaShhLGg9PntkPSEwLGEubmV4dChoKX0sKCk9PntkfHxhLm5leHQoYyksYS5jb21wbGV0ZSgp''@;'; put 'put ''fSkpfSl9ZnVuY3Rpb24gaWxlKGM9ak1lKXtyZXR1cm4gQmkoKGwsYSk9PntsZXQgZD0hMTtsLnN1YnNjcmliZShWaShhLGg9PntkPSEwLGEubmV4dChoKX0sKCk9PmQ/YS5jb21wbGV0ZSgpOmEuZXJyb3IoYygpKSkpfSl9ZnVuY3Rpb24gak1lKCl7cmV0dXJuIG5ldyBNUn1mdW5jdGlvbiBu''@;'; put 'put ''bShjLGwpe2NvbnN0IGE9YXJndW1lbnRzLmxlbmd0aD49MjtyZXR1cm4gZD0+ZC5waXBlKGM/V2woKGgsZik9PmMoaCxmLGQpKTpjbixCZigxKSxhP0VSKGwpOmlsZSgoKT0+bmV3IE1SKSl9ZnVuY3Rpb24gS2IoYyxsKXtyZXR1cm4gJGUobCk/TjAoYyxsLDEpOk4wKGMsMSl9ZnVuY3Rpb24g''@;'; put 'put ''WXUoYyxsLGEpe2NvbnN0IGQ9JGUoYyl8fGx8fGE/e25leHQ6YyxlcnJvcjpsLGNvbXBsZXRlOmF9OmM7cmV0dXJuIGQ/QmkoKGgsZik9Pnt2YXIgdjtudWxsPT09KHY9ZC5zdWJzY3JpYmUpfHx2b2lkIDA9PT12fHx2LmNhbGwoZCk7bGV0IE09ITA7aC5zdWJzY3JpYmUoVmkoZixEPT57dmFy''@;'; put 'put ''IFo7bnVsbD09PShaPWQubmV4dCl8fHZvaWQgMD09PVp8fFouY2FsbChkLEQpLGYubmV4dChEKX0sKCk9Pnt2YXIgRDtNPSExLG51bGw9PT0oRD1kLmNvbXBsZXRlKXx8dm9pZCAwPT09RHx8RC5jYWxsKGQpLGYuY29tcGxldGUoKX0sRD0+e3ZhciBaO009ITEsbnVsbD09PShaPWQuZXJyb3Ip''@;'; put 'put ''fHx2b2lkIDA9PT1afHxaLmNhbGwoZCxEKSxmLmVycm9yKEQpfSwoKT0+e3ZhciBELFo7TSYmKG51bGw9PT0oRD1kLnVuc3Vic2NyaWJlKXx8dm9pZCAwPT09RHx8RC5jYWxsKGQpKSxudWxsPT09KFo9ZC5maW5hbGl6ZSl8fHZvaWQgMD09PVp8fFouY2FsbChkKX0pKX0pOmNufWZ1bmN0aW9u''@;'; put 'put ''IHFiKGMpe3JldHVybiBCaSgobCxhKT0+e2xldCBmLGQ9bnVsbCxoPSExO2Q9bC5zdWJzY3JpYmUoVmkoYSx2b2lkIDAsdm9pZCAwLHY9PntmPWMxKGModixxYihjKShsKSkpLGQ/KGQudW5zdWJzY3JpYmUoKSxkPW51bGwsZi5zdWJzY3JpYmUoYSkpOmg9ITB9KSksaCYmKGQudW5zdWJzY3Jp''@;'; put 'put ''YmUoKSxkPW51bGwsZi5zdWJzY3JpYmUoYSkpfSl9ZnVuY3Rpb24gRlooYyl7cmV0dXJuIGM8PTA/KCk9PnkyOkJpKChsLGEpPT57bGV0IGQ9W107bC5zdWJzY3JpYmUoVmkoYSxoPT57ZC5wdXNoKGgpLGM8ZC5sZW5ndGgmJmQuc2hpZnQoKX0sKCk9Pntmb3IoY29uc3QgaCBvZiBkKWEubmV4''@;'; put 'put ''dChoKTthLmNvbXBsZXRlKCl9LHZvaWQgMCwoKT0+e2Q9bnVsbH0pKX0pfWZ1bmN0aW9uIGpNKGMpe3JldHVybiBCaSgobCxhKT0+e3RyeXtsLnN1YnNjcmliZShhKX1maW5hbGx5e2EuYWRkKGMpfX0pfWZ1bmN0aW9uIFYwKGMpe3JldHVybiBCaSgobCxhKT0+e2MxKGMpLnN1YnNjcmliZShW''@;'; put 'put ''aShhLCgpPT5hLmNvbXBsZXRlKCksZm4pKSwhYS5jbG9zZWQmJmwuc3Vic2NyaWJlKGEpfSl9Y29uc3QgJGE9InByaW1hcnkiLHpNPVN5bWJvbCgiUm91dGVUaXRsZSIpO2NsYXNzIFlNZXtjb25zdHJ1Y3RvcihsKXt0aGlzLnBhcmFtcz1sfHx7fX1oYXMobCl7cmV0dXJuIE9iamVjdC5wcm90''@;'; put 'put ''b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLnBhcmFtcyxsKX1nZXQobCl7aWYodGhpcy5oYXMobCkpe2NvbnN0IGE9dGhpcy5wYXJhbXNbbF07cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/YVswXTphfXJldHVybiBudWxsfWdldEFsbChsKXtpZih0aGlzLmhhcyhsKSl7Y29uc3QgYT10''@;'; put 'put ''aGlzLnBhcmFtc1tsXTtyZXR1cm4gQXJyYXkuaXNBcnJheShhKT9hOlthXX1yZXR1cm5bXX1nZXQga2V5cygpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLnBhcmFtcyl9fWZ1bmN0aW9uIFhiKGMpe3JldHVybiBuZXcgWU1lKGMpfWZ1bmN0aW9uIEdNZShjLGwsYSl7Y29uc3QgZD1hLnBhdGgu''@;'; put 'put ''c3BsaXQoIi8iKTtpZihkLmxlbmd0aD5jLmxlbmd0aHx8ImZ1bGwiPT09YS5wYXRoTWF0Y2gmJihsLmhhc0NoaWxkcmVuKCl8fGQubGVuZ3RoPGMubGVuZ3RoKSlyZXR1cm4gbnVsbDtjb25zdCBoPXt9O2ZvcihsZXQgZj0wO2Y8ZC5sZW5ndGg7ZisrKXtjb25zdCB2PWRbZl0sTT1jW2ZdO2lm''@;'; put 'put ''KHYuc3RhcnRzV2l0aCgiOiIpKWhbdi5zdWJzdHJpbmcoMSldPU07ZWxzZSBpZih2IT09TS5wYXRoKXJldHVybiBudWxsfXJldHVybntjb25zdW1lZDpjLnNsaWNlKDAsZC5sZW5ndGgpLHBvc1BhcmFtczpofX1mdW5jdGlvbiBzcChjLGwpe2NvbnN0IGE9Yz9IWihjKTp2b2lkIDAsZD1sP0ha''@;'; put 'put ''KGwpOnZvaWQgMDtpZighYXx8IWR8fGEubGVuZ3RoIT1kLmxlbmd0aClyZXR1cm4hMTtsZXQgaDtmb3IobGV0IGY9MDtmPGEubGVuZ3RoO2YrKylpZihoPWFbZl0sIW9sZShjW2hdLGxbaF0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIEhaKGMpe3JldHVyblsuLi5PYmplY3Qua2V5cyhj''@;'; put 'put ''KSwuLi5PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGMpXX1mdW5jdGlvbiBvbGUoYyxsKXtpZihBcnJheS5pc0FycmF5KGMpJiZBcnJheS5pc0FycmF5KGwpKXtpZihjLmxlbmd0aCE9PWwubGVuZ3RoKXJldHVybiExO2NvbnN0IGE9Wy4uLmNdLnNvcnQoKSxkPVsuLi5sXS5zb3J0KCk7''@;'; put 'put ''cmV0dXJuIGEuZXZlcnkoKGgsZik9PmRbZl09PT1oKX1yZXR1cm4gYz09PWx9ZnVuY3Rpb24gYWxlKGMpe3JldHVybiBjLmxlbmd0aD4wP2NbYy5sZW5ndGgtMV06bnVsbH1mdW5jdGlvbiBybShjKXtyZXR1cm4gVk0oYyk/Yzp5TShjKT9XdShQcm9taXNlLnJlc29sdmUoYykpOmZhKGMpfWNv''@;'; put 'put ''bnN0IEtNZT17ZXhhY3Q6ZnVuY3Rpb24gY2xlKGMsbCxhKXtpZighSzgoYy5zZWdtZW50cyxsLnNlZ21lbnRzKXx8IVRSKGMuc2VnbWVudHMsbC5zZWdtZW50cyxhKXx8Yy5udW1iZXJPZkNoaWxkcmVuIT09bC5udW1iZXJPZkNoaWxkcmVuKXJldHVybiExO2Zvcihjb25zdCBkIGluIGwuY2hp''@;'; put 'put ''bGRyZW4paWYoIWMuY2hpbGRyZW5bZF18fCFjbGUoYy5jaGlsZHJlbltkXSxsLmNoaWxkcmVuW2RdLGEpKXJldHVybiExO3JldHVybiEwfSxzdWJzZXQ6dWxlfSxzbGU9e2V4YWN0OmZ1bmN0aW9uIHFNZShjLGwpe3JldHVybiBzcChjLGwpfSxzdWJzZXQ6ZnVuY3Rpb24gWE1lKGMsbCl7cmV0''@;'; put 'put ''dXJuIE9iamVjdC5rZXlzKGwpLmxlbmd0aDw9T2JqZWN0LmtleXMoYykubGVuZ3RoJiZPYmplY3Qua2V5cyhsKS5ldmVyeShhPT5vbGUoY1thXSxsW2FdKSl9LGlnbm9yZWQ6KCk9PiEwfTtmdW5jdGlvbiBsbGUoYyxsLGEpe3JldHVybiBLTWVbYS5wYXRoc10oYy5yb290LGwucm9vdCxhLm1h''@;'; put 'put ''dHJpeFBhcmFtcykmJnNsZVthLnF1ZXJ5UGFyYW1zXShjLnF1ZXJ5UGFyYW1zLGwucXVlcnlQYXJhbXMpJiYhKCJleGFjdCI9PT1hLmZyYWdtZW50JiZjLmZyYWdtZW50IT09bC5mcmFnbWVudCl9ZnVuY3Rpb24gdWxlKGMsbCxhKXtyZXR1cm4gZGxlKGMsbCxsLnNlZ21lbnRzLGEpfWZ1bmN0''@;'; put 'put ''aW9uIGRsZShjLGwsYSxkKXtpZihjLnNlZ21lbnRzLmxlbmd0aD5hLmxlbmd0aCl7Y29uc3QgaD1jLnNlZ21lbnRzLnNsaWNlKDAsYS5sZW5ndGgpO3JldHVybiEoIUs4KGgsYSl8fGwuaGFzQ2hpbGRyZW4oKXx8IVRSKGgsYSxkKSl9aWYoYy5zZWdtZW50cy5sZW5ndGg9PT1hLmxlbmd0aCl7''@;'; put 'put ''aWYoIUs4KGMuc2VnbWVudHMsYSl8fCFUUihjLnNlZ21lbnRzLGEsZCkpcmV0dXJuITE7Zm9yKGNvbnN0IGggaW4gbC5jaGlsZHJlbilpZighYy5jaGlsZHJlbltoXXx8IXVsZShjLmNoaWxkcmVuW2hdLGwuY2hpbGRyZW5baF0sZCkpcmV0dXJuITE7cmV0dXJuITB9e2NvbnN0IGg9YS5zbGlj''@;'; put 'put ''ZSgwLGMuc2VnbWVudHMubGVuZ3RoKSxmPWEuc2xpY2UoYy5zZWdtZW50cy5sZW5ndGgpO3JldHVybiEhKEs4KGMuc2VnbWVudHMsaCkmJlRSKGMuc2VnbWVudHMsaCxkKSYmYy5jaGlsZHJlblskYV0pJiZkbGUoYy5jaGlsZHJlblskYV0sbCxmLGQpfX1mdW5jdGlvbiBUUihjLGwsYSl7cmV0''@;'; put 'put ''dXJuIGwuZXZlcnkoKGQsaCk9PnNsZVthXShjW2hdLnBhcmFtZXRlcnMsZC5wYXJhbWV0ZXJzKSl9Y2xhc3MgSmJ7Y29uc3RydWN0b3IobD1uZXcgWWwoW10se30pLGE9e30sZD1udWxsKXt0aGlzLnJvb3Q9bCx0aGlzLnF1ZXJ5UGFyYW1zPWEsdGhpcy5mcmFnbWVudD1kfWdldCBxdWVyeVBh''@;'; put 'put ''cmFtTWFwKCl7cmV0dXJuIHRoaXMuX3F1ZXJ5UGFyYW1NYXA/Pz1YYih0aGlzLnF1ZXJ5UGFyYW1zKSx0aGlzLl9xdWVyeVBhcmFtTWFwfXRvU3RyaW5nKCl7cmV0dXJuIGV4ZS5zZXJpYWxpemUodGhpcyl9fWNsYXNzIFlse2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5zZWdtZW50cz1sLHRoaXMu''@;'; put 'put ''Y2hpbGRyZW49YSx0aGlzLnBhcmVudD1udWxsLE9iamVjdC52YWx1ZXMoYSkuZm9yRWFjaChkPT5kLnBhcmVudD10aGlzKX1oYXNDaGlsZHJlbigpe3JldHVybiB0aGlzLm51bWJlck9mQ2hpbGRyZW4+MH1nZXQgbnVtYmVyT2ZDaGlsZHJlbigpe3JldHVybiBPYmplY3Qua2V5cyh0aGlzLmNo''@;'; put 'put ''aWxkcmVuKS5sZW5ndGh9dG9TdHJpbmcoKXtyZXR1cm4gQVIodGhpcyl9fWNsYXNzIFVNe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5wYXRoPWwsdGhpcy5wYXJhbWV0ZXJzPWF9Z2V0IHBhcmFtZXRlck1hcCgpe3JldHVybiB0aGlzLl9wYXJhbWV0ZXJNYXA/Pz1YYih0aGlzLnBhcmFtZXRlcnMp''@;'; put 'put ''LHRoaXMuX3BhcmFtZXRlck1hcH10b1N0cmluZygpe3JldHVybiBwbGUodGhpcyl9fWZ1bmN0aW9uIEs4KGMsbCl7cmV0dXJuIGMubGVuZ3RoPT09bC5sZW5ndGgmJmMuZXZlcnkoKGEsZCk9PmEucGF0aD09PWxbZF0ucGF0aCl9bGV0IFFiPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUw''@;'; put 'put ''Mjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTooKT0+bmV3IE5aLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjbGFzcyBOWntwYXJzZShsKXtjb25zdCBhPW5ldyBkeGUobCk7cmV0''@;'; put 'put ''dXJuIG5ldyBKYihhLnBhcnNlUm9vdFNlZ21lbnQoKSxhLnBhcnNlUXVlcnlQYXJhbXMoKSxhLnBhcnNlRnJhZ21lbnQoKSl9c2VyaWFsaXplKGwpe2NvbnN0IGE9YC8ke1pNKGwucm9vdCwhMCl9YCxkPWZ1bmN0aW9uIHJ4ZShjKXtjb25zdCBsPU9iamVjdC5lbnRyaWVzKGMpLm1hcCgoW2Es''@;'; put 'put ''ZF0pPT5BcnJheS5pc0FycmF5KGQpP2QubWFwKGg9PmAke2tSKGEpfT0ke2tSKGgpfWApLmpvaW4oIiYiKTpgJHtrUihhKX09JHtrUihkKX1gKS5maWx0ZXIoYT0+YSk7cmV0dXJuIGwubGVuZ3RoP2A/JHtsLmpvaW4oIiYiKX1gOiIifShsLnF1ZXJ5UGFyYW1zKSxoPSJzdHJpbmciPT10eXBl''@;'; put 'put ''b2YgbC5mcmFnbWVudD9gIyR7ZnVuY3Rpb24gdHhlKGMpe3JldHVybiBlbmNvZGVVUkkoYyl9KGwuZnJhZ21lbnQpfWA6IiI7cmV0dXJuYCR7YX0ke2R9JHtofWB9fWNvbnN0IGV4ZT1uZXcgTlo7ZnVuY3Rpb24gQVIoYyl7cmV0dXJuIGMuc2VnbWVudHMubWFwKGw9PnBsZShsKSkuam9pbigi''@;'; put 'put ''LyIpfWZ1bmN0aW9uIFpNKGMsbCl7aWYoIWMuaGFzQ2hpbGRyZW4oKSlyZXR1cm4gQVIoYyk7aWYobCl7Y29uc3QgYT1jLmNoaWxkcmVuWyRhXT9aTShjLmNoaWxkcmVuWyRhXSwhMSk6IiIsZD1bXTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYy5jaGlsZHJlbikuZm9yRWFjaCgoW2gsZl0pPT57''@;'; put 'put ''aCE9PSRhJiZkLnB1c2goYCR7aH06JHtaTShmLCExKX1gKX0pLGQubGVuZ3RoPjA/YCR7YX0oJHtkLmpvaW4oIi8vIil9KWA6YX17Y29uc3QgYT1mdW5jdGlvbiBRTWUoYyxsKXtsZXQgYT1bXTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYy5jaGlsZHJlbikuZm9yRWFjaCgoW2QsaF0pPT57ZD09''@;'; put 'put ''PSRhJiYoYT1hLmNvbmNhdChsKGgsZCkpKX0pLE9iamVjdC5lbnRyaWVzKGMuY2hpbGRyZW4pLmZvckVhY2goKFtkLGhdKT0+e2QhPT0kYSYmKGE9YS5jb25jYXQobChoLGQpKSl9KSxhfShjLChkLGgpPT5oPT09JGE/W1pNKGMuY2hpbGRyZW5bJGFdLCExKV06W2Ake2h9OiR7Wk0oZCwhMSl9''@;'; put 'put ''YF0pO3JldHVybiAxPT09T2JqZWN0LmtleXMoYy5jaGlsZHJlbikubGVuZ3RoJiZudWxsIT1jLmNoaWxkcmVuWyRhXT9gJHtBUihjKX0vJHthWzBdfWA6YCR7QVIoYyl9Lygke2Euam9pbigiLy8iKX0pYH19ZnVuY3Rpb24gaGxlKGMpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoYykucmVw''@;'; put 'put ''bGFjZSgvJTQwL2csIkAiKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpfWZ1bmN0aW9uIGtSKGMpe3JldHVybiBobGUoYykucmVwbGFjZSgvJTNCL2dpLCI7Iil9ZnVuY3Rpb24gVlooYyl7cmV0dXJuIGhsZShjKS5yZXBsYWNl''@;'; put 'put ''KC9cKC9nLCIlMjgiKS5yZXBsYWNlKC9cKS9nLCIlMjkiKS5yZXBsYWNlKC8lMjYvZ2ksIiYiKX1mdW5jdGlvbiBEUihjKXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGMpfWZ1bmN0aW9uIGZsZShjKXtyZXR1cm4gRFIoYy5yZXBsYWNlKC9cKy9nLCIlMjAiKSl9ZnVuY3Rpb24gcGxlKGMp''@;'; put 'put ''e3JldHVybmAke1ZaKGMucGF0aCl9JHtmdW5jdGlvbiBueGUoYyl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKGMpLm1hcCgoW2wsYV0pPT5gOyR7VloobCl9PSR7VlooYSl9YCkuam9pbigiIil9KGMucGFyYW1ldGVycyl9YH1jb25zdCBpeGU9L15bXlwvKCk/OyNdKy87ZnVuY3Rpb24gQlooYyl7''@;'; put 'put ''Y29uc3QgbD1jLm1hdGNoKGl4ZSk7cmV0dXJuIGw/bFswXToiIn1jb25zdCBveGU9L15bXlwvKCk/Oz0jXSsvLHN4ZT0vXltePT8mI10rLyxjeGU9L15bXiYjXSsvO2NsYXNzIGR4ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLnVybD1sLHRoaXMucmVtYWluaW5nPWx9cGFyc2VSb290U2VnbWVudCgp''@;'; put 'put ''e3JldHVybiB0aGlzLmNvbnN1bWVPcHRpb25hbCgiLyIpLCIiPT09dGhpcy5yZW1haW5pbmd8fHRoaXMucGVla1N0YXJ0c1dpdGgoIj8iKXx8dGhpcy5wZWVrU3RhcnRzV2l0aCgiIyIpP25ldyBZbChbXSx7fSk6bmV3IFlsKFtdLHRoaXMucGFyc2VDaGlsZHJlbigpKX1wYXJzZVF1ZXJ5UGFy''@;'; put 'put ''YW1zKCl7Y29uc3QgbD17fTtpZih0aGlzLmNvbnN1bWVPcHRpb25hbCgiPyIpKWRve3RoaXMucGFyc2VRdWVyeVBhcmFtKGwpfXdoaWxlKHRoaXMuY29uc3VtZU9wdGlvbmFsKCImIikpO3JldHVybiBsfXBhcnNlRnJhZ21lbnQoKXtyZXR1cm4gdGhpcy5jb25zdW1lT3B0aW9uYWwoIiMiKT9k''@;'; put 'put ''ZWNvZGVVUklDb21wb25lbnQodGhpcy5yZW1haW5pbmcpOm51bGx9cGFyc2VDaGlsZHJlbigpe2lmKCIiPT09dGhpcy5yZW1haW5pbmcpcmV0dXJue307dGhpcy5jb25zdW1lT3B0aW9uYWwoIi8iKTtjb25zdCBsPVtdO2Zvcih0aGlzLnBlZWtTdGFydHNXaXRoKCIoIil8fGwucHVzaCh0aGlz''@;'; put 'put ''LnBhcnNlU2VnbWVudCgpKTt0aGlzLnBlZWtTdGFydHNXaXRoKCIvIikmJiF0aGlzLnBlZWtTdGFydHNXaXRoKCIvLyIpJiYhdGhpcy5wZWVrU3RhcnRzV2l0aCgiLygiKTspdGhpcy5jYXB0dXJlKCIvIiksbC5wdXNoKHRoaXMucGFyc2VTZWdtZW50KCkpO2xldCBhPXt9O3RoaXMucGVla1N0''@;'; put 'put ''YXJ0c1dpdGgoIi8oIikmJih0aGlzLmNhcHR1cmUoIi8iKSxhPXRoaXMucGFyc2VQYXJlbnMoITApKTtsZXQgZD17fTtyZXR1cm4gdGhpcy5wZWVrU3RhcnRzV2l0aCgiKCIpJiYoZD10aGlzLnBhcnNlUGFyZW5zKCExKSksKGwubGVuZ3RoPjB8fE9iamVjdC5rZXlzKGEpLmxlbmd0aD4wKSYm''@;'; put 'put ''KGRbJGFdPW5ldyBZbChsLGEpKSxkfXBhcnNlU2VnbWVudCgpe2NvbnN0IGw9QloodGhpcy5yZW1haW5pbmcpO2lmKCIiPT09bCYmdGhpcy5wZWVrU3RhcnRzV2l0aCgiOyIpKXRocm93IG5ldyBlcig0MDA5LCExKTtyZXR1cm4gdGhpcy5jYXB0dXJlKGwpLG5ldyBVTShEUihsKSx0aGlzLnBh''@;'; put 'put ''cnNlTWF0cml4UGFyYW1zKCkpfXBhcnNlTWF0cml4UGFyYW1zKCl7Y29uc3QgbD17fTtmb3IoO3RoaXMuY29uc3VtZU9wdGlvbmFsKCI7Iik7KXRoaXMucGFyc2VQYXJhbShsKTtyZXR1cm4gbH1wYXJzZVBhcmFtKGwpe2NvbnN0IGE9ZnVuY3Rpb24gYXhlKGMpe2NvbnN0IGw9Yy5tYXRjaChv''@;'; put 'put ''eGUpO3JldHVybiBsP2xbMF06IiJ9KHRoaXMucmVtYWluaW5nKTtpZighYSlyZXR1cm47dGhpcy5jYXB0dXJlKGEpO2xldCBkPSIiO2lmKHRoaXMuY29uc3VtZU9wdGlvbmFsKCI9Iikpe2NvbnN0IGg9QloodGhpcy5yZW1haW5pbmcpO2gmJihkPWgsdGhpcy5jYXB0dXJlKGQpKX1sW0RSKGEp''@;'; put 'put ''XT1EUihkKX1wYXJzZVF1ZXJ5UGFyYW0obCl7Y29uc3QgYT1mdW5jdGlvbiBseGUoYyl7Y29uc3QgbD1jLm1hdGNoKHN4ZSk7cmV0dXJuIGw/bFswXToiIn0odGhpcy5yZW1haW5pbmcpO2lmKCFhKXJldHVybjt0aGlzLmNhcHR1cmUoYSk7bGV0IGQ9IiI7aWYodGhpcy5jb25zdW1lT3B0aW9u''@;'; put 'put ''YWwoIj0iKSl7Y29uc3Qgdj1mdW5jdGlvbiB1eGUoYyl7Y29uc3QgbD1jLm1hdGNoKGN4ZSk7cmV0dXJuIGw/bFswXToiIn0odGhpcy5yZW1haW5pbmcpO3YmJihkPXYsdGhpcy5jYXB0dXJlKGQpKX1jb25zdCBoPWZsZShhKSxmPWZsZShkKTtpZihsLmhhc093blByb3BlcnR5KGgpKXtsZXQg''@;'; put 'put ''dj1sW2hdO0FycmF5LmlzQXJyYXkodil8fCh2PVt2XSxsW2hdPXYpLHYucHVzaChmKX1lbHNlIGxbaF09Zn1wYXJzZVBhcmVucyhsKXtjb25zdCBhPXt9O2Zvcih0aGlzLmNhcHR1cmUoIigiKTshdGhpcy5jb25zdW1lT3B0aW9uYWwoIikiKSYmdGhpcy5yZW1haW5pbmcubGVuZ3RoPjA7KXtj''@;'; put 'put ''b25zdCBkPUJaKHRoaXMucmVtYWluaW5nKSxoPXRoaXMucmVtYWluaW5nW2QubGVuZ3RoXTtpZigiLyIhPT1oJiYiKSIhPT1oJiYiOyIhPT1oKXRocm93IG5ldyBlcig0MDEwLCExKTtsZXQgZjtkLmluZGV4T2YoIjoiKT4tMT8oZj1kLnNsaWNlKDAsZC5pbmRleE9mKCI6IikpLHRoaXMuY2Fw''@;'; put 'put ''dHVyZShmKSx0aGlzLmNhcHR1cmUoIjoiKSk6bCYmKGY9JGEpO2NvbnN0IHY9dGhpcy5wYXJzZUNoaWxkcmVuKCk7YVtmXT0xPT09T2JqZWN0LmtleXModikubGVuZ3RoP3ZbJGFdOm5ldyBZbChbXSx2KSx0aGlzLmNvbnN1bWVPcHRpb25hbCgiLy8iKX1yZXR1cm4gYX1wZWVrU3RhcnRzV2l0''@;'; put 'put ''aChsKXtyZXR1cm4gdGhpcy5yZW1haW5pbmcuc3RhcnRzV2l0aChsKX1jb25zdW1lT3B0aW9uYWwobCl7cmV0dXJuISF0aGlzLnBlZWtTdGFydHNXaXRoKGwpJiYodGhpcy5yZW1haW5pbmc9dGhpcy5yZW1haW5pbmcuc3Vic3RyaW5nKGwubGVuZ3RoKSwhMCl9Y2FwdHVyZShsKXtpZighdGhp''@;'; put 'put ''cy5jb25zdW1lT3B0aW9uYWwobCkpdGhyb3cgbmV3IGVyKDQwMTEsITEpfX1mdW5jdGlvbiBnbGUoYyl7cmV0dXJuIGMuc2VnbWVudHMubGVuZ3RoPjA/bmV3IFlsKFtdLHtbJGFdOmN9KTpjfWZ1bmN0aW9uIG1sZShjKXtjb25zdCBsPXt9O2Zvcihjb25zdFtkLGhdb2YgT2JqZWN0LmVudHJp''@;'; put 'put ''ZXMoYy5jaGlsZHJlbikpe2NvbnN0IGY9bWxlKGgpO2lmKGQ9PT0kYSYmMD09PWYuc2VnbWVudHMubGVuZ3RoJiZmLmhhc0NoaWxkcmVuKCkpZm9yKGNvbnN0W3YsTV1vZiBPYmplY3QuZW50cmllcyhmLmNoaWxkcmVuKSlsW3ZdPU07ZWxzZShmLnNlZ21lbnRzLmxlbmd0aD4wfHxmLmhhc0No''@;'; put 'put ''aWxkcmVuKCkpJiYobFtkXT1mKX1yZXR1cm4gZnVuY3Rpb24gaHhlKGMpe2lmKDE9PT1jLm51bWJlck9mQ2hpbGRyZW4mJmMuY2hpbGRyZW5bJGFdKXtjb25zdCBsPWMuY2hpbGRyZW5bJGFdO3JldHVybiBuZXcgWWwoYy5zZWdtZW50cy5jb25jYXQobC5zZWdtZW50cyksbC5jaGlsZHJlbil9''@;'; put 'put ''cmV0dXJuIGN9KG5ldyBZbChjLnNlZ21lbnRzLGwpKX1mdW5jdGlvbiBleShjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIEpifWZ1bmN0aW9uIHZsZShjKXtsZXQgbDtjb25zdCBoPWdsZShmdW5jdGlvbiBhKGYpe2NvbnN0IHY9e307Zm9yKGNvbnN0IEQgb2YgZi5jaGlsZHJlbil7Y29uc3QgWj1h''@;'; put 'put ''KEQpO3ZbRC5vdXRsZXRdPVp9Y29uc3QgTT1uZXcgWWwoZi51cmwsdik7cmV0dXJuIGY9PT1jJiYobD1NKSxNfShjLnJvb3QpKTtyZXR1cm4gbD8/aH1mdW5jdGlvbiBibGUoYyxsLGEsZCl7bGV0IGg9Yztmb3IoO2gucGFyZW50OyloPWgucGFyZW50O2lmKDA9PT1sLmxlbmd0aClyZXR1cm4g''@;'; put 'put ''alooaCxoLGgsYSxkKTtjb25zdCBmPWZ1bmN0aW9uIHB4ZShjKXtpZigic3RyaW5nIj09dHlwZW9mIGNbMF0mJjE9PT1jLmxlbmd0aCYmIi8iPT09Y1swXSlyZXR1cm4gbmV3IF9sZSghMCwwLGMpO2xldCBsPTAsYT0hMTtjb25zdCBkPWMucmVkdWNlKChoLGYsdik9PntpZigib2JqZWN0Ij09''@;'; put 'put ''dHlwZW9mIGYmJm51bGwhPWYpe2lmKGYub3V0bGV0cyl7Y29uc3QgTT17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoZi5vdXRsZXRzKS5mb3JFYWNoKChbRCxaXSk9PntNW0RdPSJzdHJpbmciPT10eXBlb2YgWj9aLnNwbGl0KCIvIik6Wn0pLFsuLi5oLHtvdXRsZXRzOk19XX1pZihmLnNlZ21l''@;'; put 'put ''bnRQYXRoKXJldHVyblsuLi5oLGYuc2VnbWVudFBhdGhdfXJldHVybiJzdHJpbmciIT10eXBlb2YgZj9bLi4uaCxmXTowPT09dj8oZi5zcGxpdCgiLyIpLmZvckVhY2goKE0sRCk9PnswPT1EJiYiLiI9PT1NfHwoMD09RCYmIiI9PT1NP2E9ITA6Ii4uIj09PU0/bCsrOiIiIT1NJiZoLnB1c2go''@;'; put 'put ''TSkpfSksaCk6Wy4uLmgsZl19LFtdKTtyZXR1cm4gbmV3IF9sZShhLGwsZCl9KGwpO2lmKGYudG9Sb290KCkpcmV0dXJuIGpaKGgsaCxuZXcgWWwoW10se30pLGEsZCk7Y29uc3Qgdj1mdW5jdGlvbiBneGUoYyxsLGEpe2lmKGMuaXNBYnNvbHV0ZSlyZXR1cm4gbmV3IFJSKGwsITAsMCk7aWYo''@;'; put 'put ''IWEpcmV0dXJuIG5ldyBSUihsLCExLE5hTik7aWYobnVsbD09PWEucGFyZW50KXJldHVybiBuZXcgUlIoYSwhMCwwKTtjb25zdCBkPUlSKGMuY29tbWFuZHNbMF0pPzA6MTtyZXR1cm4gZnVuY3Rpb24gbXhlKGMsbCxhKXtsZXQgZD1jLGg9bCxmPWE7Zm9yKDtmPmg7KXtpZihmLT1oLGQ9ZC5w''@;'; put 'put ''YXJlbnQsIWQpdGhyb3cgbmV3IGVyKDQwMDUsITEpO2g9ZC5zZWdtZW50cy5sZW5ndGh9cmV0dXJuIG5ldyBSUihkLCExLGgtZil9KGEsYS5zZWdtZW50cy5sZW5ndGgtMStkLGMubnVtYmVyT2ZEb3VibGVEb3RzKX0oZixoLGMpLE09di5wcm9jZXNzQ2hpbGRyZW4/WU0odi5zZWdtZW50R3Jv''@;'; put 'put ''dXAsdi5pbmRleCxmLmNvbW1hbmRzKTp3bGUodi5zZWdtZW50R3JvdXAsdi5pbmRleCxmLmNvbW1hbmRzKTtyZXR1cm4galooaCx2LnNlZ21lbnRHcm91cCxNLGEsZCl9ZnVuY3Rpb24gSVIoYyl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBjJiZudWxsIT1jJiYhYy5vdXRsZXRzJiYhYy5zZWdt''@;'; put 'put ''ZW50UGF0aH1mdW5jdGlvbiBXTShjKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGMmJm51bGwhPWMmJmMub3V0bGV0c31mdW5jdGlvbiBqWihjLGwsYSxkLGgpe2xldCB2LGY9e307ZCYmT2JqZWN0LmVudHJpZXMoZCkuZm9yRWFjaCgoW0QsWl0pPT57ZltEXT1BcnJheS5pc0FycmF5KFopP1ou''@;'; put 'put ''bWFwKG5lPT5gJHtuZX1gKTpgJHtafWB9KSx2PWM9PT1sP2E6eWxlKGMsbCxhKTtjb25zdCBNPWdsZShtbGUodikpO3JldHVybiBuZXcgSmIoTSxmLGgpfWZ1bmN0aW9uIHlsZShjLGwsYSl7Y29uc3QgZD17fTtyZXR1cm4gT2JqZWN0LmVudHJpZXMoYy5jaGlsZHJlbikuZm9yRWFjaCgoW2gs''@;'; put 'put ''Zl0pPT57ZFtoXT1mPT09bD9hOnlsZShmLGwsYSl9KSxuZXcgWWwoYy5zZWdtZW50cyxkKX1jbGFzcyBfbGV7Y29uc3RydWN0b3IobCxhLGQpe2lmKHRoaXMuaXNBYnNvbHV0ZT1sLHRoaXMubnVtYmVyT2ZEb3VibGVEb3RzPWEsdGhpcy5jb21tYW5kcz1kLGwmJmQubGVuZ3RoPjAmJklSKGRb''@;'; put 'put ''MF0pKXRocm93IG5ldyBlcig0MDAzLCExKTtjb25zdCBoPWQuZmluZChXTSk7aWYoaCYmaCE9PWFsZShkKSl0aHJvdyBuZXcgZXIoNDAwNCwhMSl9dG9Sb290KCl7cmV0dXJuIHRoaXMuaXNBYnNvbHV0ZSYmMT09PXRoaXMuY29tbWFuZHMubGVuZ3RoJiYiLyI9PXRoaXMuY29tbWFuZHNbMF19''@;'; put 'put ''fWNsYXNzIFJSe2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnNlZ21lbnRHcm91cD1sLHRoaXMucHJvY2Vzc0NoaWxkcmVuPWEsdGhpcy5pbmRleD1kfX1mdW5jdGlvbiB3bGUoYyxsLGEpe2lmKGM/Pz1uZXcgWWwoW10se30pLDA9PT1jLnNlZ21lbnRzLmxlbmd0aCYmYy5oYXNDaGlsZHJlbigp''@;'; put 'put ''KXJldHVybiBZTShjLGwsYSk7Y29uc3QgZD1mdW5jdGlvbiBieGUoYyxsLGEpe2xldCBkPTAsaD1sO2NvbnN0IGY9e21hdGNoOiExLHBhdGhJbmRleDowLGNvbW1hbmRJbmRleDowfTtmb3IoO2g8Yy5zZWdtZW50cy5sZW5ndGg7KXtpZihkPj1hLmxlbmd0aClyZXR1cm4gZjtjb25zdCB2PWMu''@;'; put 'put ''c2VnbWVudHNbaF0sTT1hW2RdO2lmKFdNKE0pKWJyZWFrO2NvbnN0IEQ9YCR7TX1gLFo9ZDxhLmxlbmd0aC0xP2FbZCsxXTpudWxsO2lmKGg+MCYmdm9pZCAwPT09RClicmVhaztpZihEJiZaJiYib2JqZWN0Ij09dHlwZW9mIFomJnZvaWQgMD09PVoub3V0bGV0cyl7aWYoIVNsZShELFosdikp''@;'; put 'put ''cmV0dXJuIGY7ZCs9Mn1lbHNle2lmKCFTbGUoRCx7fSx2KSlyZXR1cm4gZjtkKyt9aCsrfXJldHVybnttYXRjaDohMCxwYXRoSW5kZXg6aCxjb21tYW5kSW5kZXg6ZH19KGMsbCxhKSxoPWEuc2xpY2UoZC5jb21tYW5kSW5kZXgpO2lmKGQubWF0Y2gmJmQucGF0aEluZGV4PGMuc2VnbWVudHMu''@;'; put 'put ''bGVuZ3RoKXtjb25zdCBmPW5ldyBZbChjLnNlZ21lbnRzLnNsaWNlKDAsZC5wYXRoSW5kZXgpLHt9KTtyZXR1cm4gZi5jaGlsZHJlblskYV09bmV3IFlsKGMuc2VnbWVudHMuc2xpY2UoZC5wYXRoSW5kZXgpLGMuY2hpbGRyZW4pLFlNKGYsMCxoKX1yZXR1cm4gZC5tYXRjaCYmMD09PWgubGVu''@;'; put 'put ''Z3RoP25ldyBZbChjLnNlZ21lbnRzLHt9KTpkLm1hdGNoJiYhYy5oYXNDaGlsZHJlbigpP3paKGMsbCxhKTpkLm1hdGNoP1lNKGMsMCxoKTp6WihjLGwsYSl9ZnVuY3Rpb24gWU0oYyxsLGEpe2lmKDA9PT1hLmxlbmd0aClyZXR1cm4gbmV3IFlsKGMuc2VnbWVudHMse30pO3tjb25zdCBkPWZ1''@;'; put 'put ''bmN0aW9uIHZ4ZShjKXtyZXR1cm4gV00oY1swXSk/Y1swXS5vdXRsZXRzOntbJGFdOmN9fShhKSxoPXt9O2lmKE9iamVjdC5rZXlzKGQpLnNvbWUoZj0+ZiE9PSRhKSYmYy5jaGlsZHJlblskYV0mJjE9PT1jLm51bWJlck9mQ2hpbGRyZW4mJjA9PT1jLmNoaWxkcmVuWyRhXS5zZWdtZW50cy5s''@;'; put 'put ''ZW5ndGgpe2NvbnN0IGY9WU0oYy5jaGlsZHJlblskYV0sbCxhKTtyZXR1cm4gbmV3IFlsKGMuc2VnbWVudHMsZi5jaGlsZHJlbil9cmV0dXJuIE9iamVjdC5lbnRyaWVzKGQpLmZvckVhY2goKFtmLHZdKT0+eyJzdHJpbmciPT10eXBlb2YgdiYmKHY9W3ZdKSxudWxsIT09diYmKGhbZl09d2xl''@;'; put 'put ''KGMuY2hpbGRyZW5bZl0sbCx2KSl9KSxPYmplY3QuZW50cmllcyhjLmNoaWxkcmVuKS5mb3JFYWNoKChbZix2XSk9Pnt2b2lkIDA9PT1kW2ZdJiYoaFtmXT12KX0pLG5ldyBZbChjLnNlZ21lbnRzLGgpfX1mdW5jdGlvbiB6WihjLGwsYSl7Y29uc3QgZD1jLnNlZ21lbnRzLnNsaWNlKDAsbCk7''@;'; put 'put ''bGV0IGg9MDtmb3IoO2g8YS5sZW5ndGg7KXtjb25zdCBmPWFbaF07aWYoV00oZikpe2NvbnN0IEQ9eXhlKGYub3V0bGV0cyk7cmV0dXJuIG5ldyBZbChkLEQpfWlmKDA9PT1oJiZJUihhWzBdKSl7ZC5wdXNoKG5ldyBVTShjLnNlZ21lbnRzW2xdLnBhdGgsQ2xlKGFbMF0pKSksaCsrO2NvbnRp''@;'; put 'put ''bnVlfWNvbnN0IHY9V00oZik/Zi5vdXRsZXRzWyRhXTpgJHtmfWAsTT1oPGEubGVuZ3RoLTE/YVtoKzFdOm51bGw7diYmTSYmSVIoTSk/KGQucHVzaChuZXcgVU0odixDbGUoTSkpKSxoKz0yKTooZC5wdXNoKG5ldyBVTSh2LHt9KSksaCsrKX1yZXR1cm4gbmV3IFlsKGQse30pfWZ1bmN0aW9u''@;'; put 'put ''IHl4ZShjKXtjb25zdCBsPXt9O3JldHVybiBPYmplY3QuZW50cmllcyhjKS5mb3JFYWNoKChbYSxkXSk9Pnsic3RyaW5nIj09dHlwZW9mIGQmJihkPVtkXSksbnVsbCE9PWQmJihsW2FdPXpaKG5ldyBZbChbXSx7fSksMCxkKSl9KSxsfWZ1bmN0aW9uIENsZShjKXtjb25zdCBsPXt9O3JldHVy''@;'; put 'put ''biBPYmplY3QuZW50cmllcyhjKS5mb3JFYWNoKChbYSxkXSk9PmxbYV09YCR7ZH1gKSxsfWZ1bmN0aW9uIFNsZShjLGwsYSl7cmV0dXJuIGM9PWEucGF0aCYmc3AobCxhLnBhcmFtZXRlcnMpfWNvbnN0IEdNPSJpbXBlcmF0aXZlIjt2YXIgUnM9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5OYXZp''@;'; put 'put ''Z2F0aW9uU3RhcnQ9MF09Ik5hdmlnYXRpb25TdGFydCIsY1tjLk5hdmlnYXRpb25FbmQ9MV09Ik5hdmlnYXRpb25FbmQiLGNbYy5OYXZpZ2F0aW9uQ2FuY2VsPTJdPSJOYXZpZ2F0aW9uQ2FuY2VsIixjW2MuTmF2aWdhdGlvbkVycm9yPTNdPSJOYXZpZ2F0aW9uRXJyb3IiLGNbYy5Sb3V0ZXNS''@;'; put 'put ''ZWNvZ25pemVkPTRdPSJSb3V0ZXNSZWNvZ25pemVkIixjW2MuUmVzb2x2ZVN0YXJ0PTVdPSJSZXNvbHZlU3RhcnQiLGNbYy5SZXNvbHZlRW5kPTZdPSJSZXNvbHZlRW5kIixjW2MuR3VhcmRzQ2hlY2tTdGFydD03XT0iR3VhcmRzQ2hlY2tTdGFydCIsY1tjLkd1YXJkc0NoZWNrRW5kPThdPSJH''@;'; put 'put ''dWFyZHNDaGVja0VuZCIsY1tjLlJvdXRlQ29uZmlnTG9hZFN0YXJ0PTldPSJSb3V0ZUNvbmZpZ0xvYWRTdGFydCIsY1tjLlJvdXRlQ29uZmlnTG9hZEVuZD0xMF09IlJvdXRlQ29uZmlnTG9hZEVuZCIsY1tjLkNoaWxkQWN0aXZhdGlvblN0YXJ0PTExXT0iQ2hpbGRBY3RpdmF0aW9uU3RhcnQi''@;'; put 'put ''LGNbYy5DaGlsZEFjdGl2YXRpb25FbmQ9MTJdPSJDaGlsZEFjdGl2YXRpb25FbmQiLGNbYy5BY3RpdmF0aW9uU3RhcnQ9MTNdPSJBY3RpdmF0aW9uU3RhcnQiLGNbYy5BY3RpdmF0aW9uRW5kPTE0XT0iQWN0aXZhdGlvbkVuZCIsY1tjLlNjcm9sbD0xNV09IlNjcm9sbCIsY1tjLk5hdmlnYXRp''@;'; put 'put ''b25Ta2lwcGVkPTE2XT0iTmF2aWdhdGlvblNraXBwZWQiLGN9KFJzfHx7fSk7Y2xhc3MgbHB7Y29uc3RydWN0b3IobCxhKXt0aGlzLmlkPWwsdGhpcy51cmw9YX19Y2xhc3MgTFIgZXh0ZW5kcyBscHtjb25zdHJ1Y3RvcihsLGEsZD0iaW1wZXJhdGl2ZSIsaD1udWxsKXtzdXBlcihsLGEpLHRo''@;'; put 'put ''aXMudHlwZT1Scy5OYXZpZ2F0aW9uU3RhcnQsdGhpcy5uYXZpZ2F0aW9uVHJpZ2dlcj1kLHRoaXMucmVzdG9yZWRTdGF0ZT1ofXRvU3RyaW5nKCl7cmV0dXJuYE5hdmlnYXRpb25TdGFydChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nKWB9fWNsYXNzIGNwIGV4dGVuZHMgbHB7''@;'; put 'put ''Y29uc3RydWN0b3IobCxhLGQpe3N1cGVyKGwsYSksdGhpcy51cmxBZnRlclJlZGlyZWN0cz1kLHRoaXMudHlwZT1Scy5OYXZpZ2F0aW9uRW5kfXRvU3RyaW5nKCl7cmV0dXJuYE5hdmlnYXRpb25FbmQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JywgdXJsQWZ0ZXJSZWRpcmVj''@;'; put 'put ''dHM6ICcke3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHN9JylgfX12YXIgZGg9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5SZWRpcmVjdD0wXT0iUmVkaXJlY3QiLGNbYy5TdXBlcnNlZGVkQnlOZXdOYXZpZ2F0aW9uPTFdPSJTdXBlcnNlZGVkQnlOZXdOYXZpZ2F0aW9uIixjW2MuTm9EYXRhRnJvbVJl''@;'; put 'put ''c29sdmVyPTJdPSJOb0RhdGFGcm9tUmVzb2x2ZXIiLGNbYy5HdWFyZFJlamVjdGVkPTNdPSJHdWFyZFJlamVjdGVkIixjfShkaHx8e30pLE9SPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuSWdub3JlZFNhbWVVcmxOYXZpZ2F0aW9uPTBdPSJJZ25vcmVkU2FtZVVybE5hdmlnYXRpb24iLGNbYy5J''@;'; put 'put ''Z25vcmVkQnlVcmxIYW5kbGluZ1N0cmF0ZWd5PTFdPSJJZ25vcmVkQnlVcmxIYW5kbGluZ1N0cmF0ZWd5IixjfShPUnx8e30pO2NsYXNzIHR5IGV4dGVuZHMgbHB7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhKSx0aGlzLnJlYXNvbj1kLHRoaXMuY29kZT1oLHRoaXMudHlwZT1Scy5O''@;'; put 'put ''YXZpZ2F0aW9uQ2FuY2VsfXRvU3RyaW5nKCl7cmV0dXJuYE5hdmlnYXRpb25DYW5jZWwoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JylgfX1jbGFzcyBueSBleHRlbmRzIGxwe2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKGwsYSksdGhpcy5yZWFzb249ZCx0aGlzLmNvZGU9''@;'; put 'put ''aCx0aGlzLnR5cGU9UnMuTmF2aWdhdGlvblNraXBwZWR9fWNsYXNzIFBSIGV4dGVuZHMgbHB7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhKSx0aGlzLmVycm9yPWQsdGhpcy50YXJnZXQ9aCx0aGlzLnR5cGU9UnMuTmF2aWdhdGlvbkVycm9yfXRvU3RyaW5nKCl7cmV0dXJuYE5hdmln''@;'; put 'put ''YXRpb25FcnJvcihpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCBlcnJvcjogJHt0aGlzLmVycm9yfSlgfX1jbGFzcyBNbGUgZXh0ZW5kcyBscHtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEpLHRoaXMudXJsQWZ0ZXJSZWRpcmVjdHM9ZCx0aGlzLnN0YXRlPWgsdGhp''@;'; put 'put ''cy50eXBlPVJzLlJvdXRlc1JlY29nbml6ZWR9dG9TdHJpbmcoKXtyZXR1cm5gUm91dGVzUmVjb2duaXplZChpZDogJHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCB1cmxBZnRlclJlZGlyZWN0czogJyR7dGhpcy51cmxBZnRlclJlZGlyZWN0c30nLCBzdGF0ZTogJHt0aGlzLnN0YXRl''@;'; put 'put ''fSlgfX1jbGFzcyBfeGUgZXh0ZW5kcyBscHtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEpLHRoaXMudXJsQWZ0ZXJSZWRpcmVjdHM9ZCx0aGlzLnN0YXRlPWgsdGhpcy50eXBlPVJzLkd1YXJkc0NoZWNrU3RhcnR9dG9TdHJpbmcoKXtyZXR1cm5gR3VhcmRzQ2hlY2tTdGFydChpZDog''@;'; put 'put ''JHt0aGlzLmlkfSwgdXJsOiAnJHt0aGlzLnVybH0nLCB1cmxBZnRlclJlZGlyZWN0czogJyR7dGhpcy51cmxBZnRlclJlZGlyZWN0c30nLCBzdGF0ZTogJHt0aGlzLnN0YXRlfSlgfX1jbGFzcyB3eGUgZXh0ZW5kcyBscHtjb25zdHJ1Y3RvcihsLGEsZCxoLGYpe3N1cGVyKGwsYSksdGhpcy51''@;'; put 'put ''cmxBZnRlclJlZGlyZWN0cz1kLHRoaXMuc3RhdGU9aCx0aGlzLnNob3VsZEFjdGl2YXRlPWYsdGhpcy50eXBlPVJzLkd1YXJkc0NoZWNrRW5kfXRvU3RyaW5nKCl7cmV0dXJuYEd1YXJkc0NoZWNrRW5kKGlkOiAke3RoaXMuaWR9LCB1cmw6ICcke3RoaXMudXJsfScsIHVybEFmdGVyUmVkaXJl''@;'; put 'put ''Y3RzOiAnJHt0aGlzLnVybEFmdGVyUmVkaXJlY3RzfScsIHN0YXRlOiAke3RoaXMuc3RhdGV9LCBzaG91bGRBY3RpdmF0ZTogJHt0aGlzLnNob3VsZEFjdGl2YXRlfSlgfX1jbGFzcyBDeGUgZXh0ZW5kcyBscHtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEpLHRoaXMudXJsQWZ0ZXJS''@;'; put 'put ''ZWRpcmVjdHM9ZCx0aGlzLnN0YXRlPWgsdGhpcy50eXBlPVJzLlJlc29sdmVTdGFydH10b1N0cmluZygpe3JldHVybmBSZXNvbHZlU3RhcnQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICcke3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHN9Jywg''@;'; put 'put ''c3RhdGU6ICR7dGhpcy5zdGF0ZX0pYH19Y2xhc3MgU3hlIGV4dGVuZHMgbHB7Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhKSx0aGlzLnVybEFmdGVyUmVkaXJlY3RzPWQsdGhpcy5zdGF0ZT1oLHRoaXMudHlwZT1Scy5SZXNvbHZlRW5kfXRvU3RyaW5nKCl7cmV0dXJuYFJlc29sdmVF''@;'; put 'put ''bmQoaWQ6ICR7dGhpcy5pZH0sIHVybDogJyR7dGhpcy51cmx9JywgdXJsQWZ0ZXJSZWRpcmVjdHM6ICcke3RoaXMudXJsQWZ0ZXJSZWRpcmVjdHN9Jywgc3RhdGU6ICR7dGhpcy5zdGF0ZX0pYH19Y2xhc3MgTXhle2NvbnN0cnVjdG9yKGwpe3RoaXMucm91dGU9bCx0aGlzLnR5cGU9UnMuUm91''@;'; put 'put ''dGVDb25maWdMb2FkU3RhcnR9dG9TdHJpbmcoKXtyZXR1cm5gUm91dGVDb25maWdMb2FkU3RhcnQocGF0aDogJHt0aGlzLnJvdXRlLnBhdGh9KWB9fWNsYXNzIHh4ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLnJvdXRlPWwsdGhpcy50eXBlPVJzLlJvdXRlQ29uZmlnTG9hZEVuZH10b1N0cmluZygp''@;'; put 'put ''e3JldHVybmBSb3V0ZUNvbmZpZ0xvYWRFbmQocGF0aDogJHt0aGlzLnJvdXRlLnBhdGh9KWB9fWNsYXNzIEV4ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLnNuYXBzaG90PWwsdGhpcy50eXBlPVJzLkNoaWxkQWN0aXZhdGlvblN0YXJ0fXRvU3RyaW5nKCl7cmV0dXJuYENoaWxkQWN0aXZhdGlvblN0''@;'; put 'put ''YXJ0KHBhdGg6ICcke3RoaXMuc25hcHNob3Qucm91dGVDb25maWcmJnRoaXMuc25hcHNob3Qucm91dGVDb25maWcucGF0aHx8IiJ9JylgfX1jbGFzcyBUeGV7Y29uc3RydWN0b3IobCl7dGhpcy5zbmFwc2hvdD1sLHRoaXMudHlwZT1Scy5DaGlsZEFjdGl2YXRpb25FbmR9dG9TdHJpbmcoKXty''@;'; put 'put ''ZXR1cm5gQ2hpbGRBY3RpdmF0aW9uRW5kKHBhdGg6ICcke3RoaXMuc25hcHNob3Qucm91dGVDb25maWcmJnRoaXMuc25hcHNob3Qucm91dGVDb25maWcucGF0aHx8IiJ9JylgfX1jbGFzcyBBeGV7Y29uc3RydWN0b3IobCl7dGhpcy5zbmFwc2hvdD1sLHRoaXMudHlwZT1Scy5BY3RpdmF0aW9u''@;'; put 'put ''U3RhcnR9dG9TdHJpbmcoKXtyZXR1cm5gQWN0aXZhdGlvblN0YXJ0KHBhdGg6ICcke3RoaXMuc25hcHNob3Qucm91dGVDb25maWcmJnRoaXMuc25hcHNob3Qucm91dGVDb25maWcucGF0aHx8IiJ9JylgfX1jbGFzcyBreGV7Y29uc3RydWN0b3IobCl7dGhpcy5zbmFwc2hvdD1sLHRoaXMudHlw''@;'; put 'put ''ZT1Scy5BY3RpdmF0aW9uRW5kfXRvU3RyaW5nKCl7cmV0dXJuYEFjdGl2YXRpb25FbmQocGF0aDogJyR7dGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZyYmdGhpcy5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRofHwiIn0nKWB9fWNsYXNzIHhsZXtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5yb3V0''@;'; put 'put ''ZXJFdmVudD1sLHRoaXMucG9zaXRpb249YSx0aGlzLmFuY2hvcj1kLHRoaXMudHlwZT1Scy5TY3JvbGx9dG9TdHJpbmcoKXtyZXR1cm5gU2Nyb2xsKGFuY2hvcjogJyR7dGhpcy5hbmNob3J9JywgcG9zaXRpb246ICcke3RoaXMucG9zaXRpb24/YCR7dGhpcy5wb3NpdGlvblswXX0sICR7dGhp''@;'; put 'put ''cy5wb3NpdGlvblsxXX1gOm51bGx9JylgfX1jbGFzcyBVWnt9Y2xhc3MgWlp7Y29uc3RydWN0b3IobCl7dGhpcy51cmw9bH19Y2xhc3MgRHhle2NvbnN0cnVjdG9yKCl7dGhpcy5vdXRsZXQ9bnVsbCx0aGlzLnJvdXRlPW51bGwsdGhpcy5pbmplY3Rvcj1udWxsLHRoaXMuY2hpbGRyZW49bmV3''@;'; put 'put ''ICRNLHRoaXMuYXR0YWNoUmVmPW51bGx9fWxldCAkTT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5jb250ZXh0cz1uZXcgTWFwfW9uQ2hpbGRPdXRsZXRDcmVhdGVkKGEsZCl7Y29uc3QgaD10aGlzLmdldE9yQ3JlYXRlQ29udGV4dChhKTtoLm91dGxldD1kLHRoaXMuY29udGV4''@;'; put 'put ''dHMuc2V0KGEsaCl9b25DaGlsZE91dGxldERlc3Ryb3llZChhKXtjb25zdCBkPXRoaXMuZ2V0Q29udGV4dChhKTtkJiYoZC5vdXRsZXQ9bnVsbCxkLmF0dGFjaFJlZj1udWxsKX1vbk91dGxldERlYWN0aXZhdGVkKCl7Y29uc3QgYT10aGlzLmNvbnRleHRzO3JldHVybiB0aGlzLmNvbnRleHRz''@;'; put 'put ''PW5ldyBNYXAsYX1vbk91dGxldFJlQXR0YWNoZWQoYSl7dGhpcy5jb250ZXh0cz1hfWdldE9yQ3JlYXRlQ29udGV4dChhKXtsZXQgZD10aGlzLmdldENvbnRleHQoYSk7cmV0dXJuIGR8fChkPW5ldyBEeGUsdGhpcy5jb250ZXh0cy5zZXQoYSxkKSksZH1nZXRDb250ZXh0KGEpe3JldHVybiB0''@;'; put 'put ''aGlzLmNvbnRleHRzLmdldChhKXx8bnVsbH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSko''@;'; put 'put ''KTtjbGFzcyBFbGV7Y29uc3RydWN0b3IobCl7dGhpcy5fcm9vdD1sfWdldCByb290KCl7cmV0dXJuIHRoaXMuX3Jvb3QudmFsdWV9cGFyZW50KGwpe2NvbnN0IGE9dGhpcy5wYXRoRnJvbVJvb3QobCk7cmV0dXJuIGEubGVuZ3RoPjE/YVthLmxlbmd0aC0yXTpudWxsfWNoaWxkcmVuKGwpe2Nv''@;'; put 'put ''bnN0IGE9V1oobCx0aGlzLl9yb290KTtyZXR1cm4gYT9hLmNoaWxkcmVuLm1hcChkPT5kLnZhbHVlKTpbXX1maXJzdENoaWxkKGwpe2NvbnN0IGE9V1oobCx0aGlzLl9yb290KTtyZXR1cm4gYSYmYS5jaGlsZHJlbi5sZW5ndGg+MD9hLmNoaWxkcmVuWzBdLnZhbHVlOm51bGx9c2libGluZ3Mo''@;'; put 'put ''bCl7Y29uc3QgYT1ZWihsLHRoaXMuX3Jvb3QpO3JldHVybiBhLmxlbmd0aDwyP1tdOmFbYS5sZW5ndGgtMl0uY2hpbGRyZW4ubWFwKGg9PmgudmFsdWUpLmZpbHRlcihoPT5oIT09bCl9cGF0aEZyb21Sb290KGwpe3JldHVybiBZWihsLHRoaXMuX3Jvb3QpLm1hcChhPT5hLnZhbHVlKX19ZnVu''@;'; put 'put ''Y3Rpb24gV1ooYyxsKXtpZihjPT09bC52YWx1ZSlyZXR1cm4gbDtmb3IoY29uc3QgYSBvZiBsLmNoaWxkcmVuKXtjb25zdCBkPVdaKGMsYSk7aWYoZClyZXR1cm4gZH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBZWihjLGwpe2lmKGM9PT1sLnZhbHVlKXJldHVybltsXTtmb3IoY29uc3QgYSBvZiBs''@;'; put 'put ''LmNoaWxkcmVuKXtjb25zdCBkPVlaKGMsYSk7aWYoZC5sZW5ndGgpcmV0dXJuIGQudW5zaGlmdChsKSxkfXJldHVybltdfWNsYXNzIGpme2NvbnN0cnVjdG9yKGwsYSl7dGhpcy52YWx1ZT1sLHRoaXMuY2hpbGRyZW49YX10b1N0cmluZygpe3JldHVybmBUcmVlTm9kZSgke3RoaXMudmFsdWV9''@;'; put 'put ''KWB9fWZ1bmN0aW9uIHJ5KGMpe2NvbnN0IGw9e307cmV0dXJuIGMmJmMuY2hpbGRyZW4uZm9yRWFjaChhPT5sW2EudmFsdWUub3V0bGV0XT1hKSxsfWNsYXNzIFRsZSBleHRlbmRzIEVsZXtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwpLHRoaXMuc25hcHNob3Q9YSxLWih0aGlzLGwpfXRvU3Ry''@;'; put 'put ''aW5nKCl7cmV0dXJuIHRoaXMuc25hcHNob3QudG9TdHJpbmcoKX19ZnVuY3Rpb24gQWxlKGMpe2NvbnN0IGw9ZnVuY3Rpb24gSXhlKGMpe2NvbnN0IGY9bmV3ICRaKFtdLHt9LHt9LCIiLHt9LCRhLGMsbnVsbCx7fSk7cmV0dXJuIG5ldyBrbGUoIiIsbmV3IGpmKGYsW10pKX0oYyksYT1uZXcg''@;'; put 'put ''UXIoW25ldyBVTSgiIix7fSldKSxkPW5ldyBRcih7fSksaD1uZXcgUXIoe30pLGY9bmV3IFFyKHt9KSx2PW5ldyBRcigiIiksTT1uZXcgQ3UoYSxkLGYsdixoLCRhLGMsbC5yb290KTtyZXR1cm4gTS5zbmFwc2hvdD1sLnJvb3QsbmV3IFRsZShuZXcgamYoTSxbXSksbCl9Y2xhc3MgQ3V7Y29u''@;'; put 'put ''c3RydWN0b3IobCxhLGQsaCxmLHYsTSxEKXt0aGlzLnVybFN1YmplY3Q9bCx0aGlzLnBhcmFtc1N1YmplY3Q9YSx0aGlzLnF1ZXJ5UGFyYW1zU3ViamVjdD1kLHRoaXMuZnJhZ21lbnRTdWJqZWN0PWgsdGhpcy5kYXRhU3ViamVjdD1mLHRoaXMub3V0bGV0PXYsdGhpcy5jb21wb25lbnQ9TSx0''@;'; put 'put ''aGlzLl9mdXR1cmVTbmFwc2hvdD1ELHRoaXMudGl0bGU9dGhpcy5kYXRhU3ViamVjdD8ucGlwZShPcihaPT5aW3pNXSkpPz9mYSh2b2lkIDApLHRoaXMudXJsPWwsdGhpcy5wYXJhbXM9YSx0aGlzLnF1ZXJ5UGFyYW1zPWQsdGhpcy5mcmFnbWVudD1oLHRoaXMuZGF0YT1mfWdldCByb3V0ZUNv''@;'; put 'put ''bmZpZygpe3JldHVybiB0aGlzLl9mdXR1cmVTbmFwc2hvdC5yb3V0ZUNvbmZpZ31nZXQgcm9vdCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5yb290fWdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGFyZW50KHRoaXMpfWdldCBmaXJzdENoaWxkKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuX3JvdXRlclN0YXRlLmZpcnN0Q2hpbGQodGhpcyl9Z2V0IGNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmNoaWxkcmVuKHRoaXMpfWdldCBwYXRoRnJvbVJvb3QoKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucGF0aEZyb21Sb290KHRoaXMpfWdldCBwYXJhbU1hcCgp''@;'; put 'put ''e3JldHVybiB0aGlzLl9wYXJhbU1hcD8/PXRoaXMucGFyYW1zLnBpcGUoT3IobD0+WGIobCkpKSx0aGlzLl9wYXJhbU1hcH1nZXQgcXVlcnlQYXJhbU1hcCgpe3JldHVybiB0aGlzLl9xdWVyeVBhcmFtTWFwPz89dGhpcy5xdWVyeVBhcmFtcy5waXBlKE9yKGw9PlhiKGwpKSksdGhpcy5fcXVl''@;'; put 'put ''cnlQYXJhbU1hcH10b1N0cmluZygpe3JldHVybiB0aGlzLnNuYXBzaG90P3RoaXMuc25hcHNob3QudG9TdHJpbmcoKTpgRnV0dXJlKCR7dGhpcy5fZnV0dXJlU25hcHNob3R9KWB9fWZ1bmN0aW9uIEdaKGMsbCxhPSJlbXB0eU9ubHkiKXtsZXQgZDtjb25zdHtyb3V0ZUNvbmZpZzpofT1jO3Jl''@;'; put 'put ''dHVybiBkPW51bGw9PT1sfHwiYWx3YXlzIiE9PWEmJiIiIT09aD8ucGF0aCYmKGwuY29tcG9uZW50fHxsLnJvdXRlQ29uZmlnPy5sb2FkQ29tcG9uZW50KT97cGFyYW1zOnsuLi5jLnBhcmFtc30sZGF0YTp7Li4uYy5kYXRhfSxyZXNvbHZlOnsuLi5jLmRhdGEsLi4uYy5fcmVzb2x2ZWREYXRh''@;'; put 'put ''Pz97fX19OntwYXJhbXM6ey4uLmwucGFyYW1zLC4uLmMucGFyYW1zfSxkYXRhOnsuLi5sLmRhdGEsLi4uYy5kYXRhfSxyZXNvbHZlOnsuLi5jLmRhdGEsLi4ubC5kYXRhLC4uLmg/LmRhdGEsLi4uYy5fcmVzb2x2ZWREYXRhfX0saCYmSWxlKGgpJiYoZC5yZXNvbHZlW3pNXT1oLnRpdGxlKSxk''@;'; put 'put ''fWNsYXNzICRae2dldCB0aXRsZSgpe3JldHVybiB0aGlzLmRhdGE/Llt6TV19Y29uc3RydWN0b3IobCxhLGQsaCxmLHYsTSxELFope3RoaXMudXJsPWwsdGhpcy5wYXJhbXM9YSx0aGlzLnF1ZXJ5UGFyYW1zPWQsdGhpcy5mcmFnbWVudD1oLHRoaXMuZGF0YT1mLHRoaXMub3V0bGV0PXYsdGhp''@;'; put 'put ''cy5jb21wb25lbnQ9TSx0aGlzLnJvdXRlQ29uZmlnPUQsdGhpcy5fcmVzb2x2ZT1afWdldCByb290KCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLnJvb3R9Z2V0IHBhcmVudCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5wYXJlbnQodGhpcyl9Z2V0IGZpcnN0Q2hpbGQoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fcm91dGVyU3RhdGUuZmlyc3RDaGlsZCh0aGlzKX1nZXQgY2hpbGRyZW4oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUuY2hpbGRyZW4odGhpcyl9Z2V0IHBhdGhGcm9tUm9vdCgpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5wYXRoRnJvbVJvb3QodGhpcyl9Z2V0IHBhcmFtTWFw''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuX3BhcmFtTWFwPz89WGIodGhpcy5wYXJhbXMpLHRoaXMuX3BhcmFtTWFwfWdldCBxdWVyeVBhcmFtTWFwKCl7cmV0dXJuIHRoaXMuX3F1ZXJ5UGFyYW1NYXA/Pz1YYih0aGlzLnF1ZXJ5UGFyYW1zKSx0aGlzLl9xdWVyeVBhcmFtTWFwfXRvU3RyaW5nKCl7cmV0dXJu''@;'; put 'put ''YFJvdXRlKHVybDonJHt0aGlzLnVybC5tYXAoZD0+ZC50b1N0cmluZygpKS5qb2luKCIvIil9JywgcGF0aDonJHt0aGlzLnJvdXRlQ29uZmlnP3RoaXMucm91dGVDb25maWcucGF0aDoiIn0nKWB9fWNsYXNzIGtsZSBleHRlbmRzIEVsZXtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGEpLHRoaXMu''@;'; put 'put ''dXJsPWwsS1oodGhpcyxhKX10b1N0cmluZygpe3JldHVybiBEbGUodGhpcy5fcm9vdCl9fWZ1bmN0aW9uIEtaKGMsbCl7bC52YWx1ZS5fcm91dGVyU3RhdGU9YyxsLmNoaWxkcmVuLmZvckVhY2goYT0+S1ooYyxhKSl9ZnVuY3Rpb24gRGxlKGMpe2NvbnN0IGw9Yy5jaGlsZHJlbi5sZW5ndGg+''@;'; put 'put ''MD9gIHsgJHtjLmNoaWxkcmVuLm1hcChEbGUpLmpvaW4oIiwgIil9IH0gYDoiIjtyZXR1cm5gJHtjLnZhbHVlfSR7bH1gfWZ1bmN0aW9uIHFaKGMpe2lmKGMuc25hcHNob3Qpe2NvbnN0IGw9Yy5zbmFwc2hvdCxhPWMuX2Z1dHVyZVNuYXBzaG90O2Muc25hcHNob3Q9YSxzcChsLnF1ZXJ5UGFy''@;'; put 'put ''YW1zLGEucXVlcnlQYXJhbXMpfHxjLnF1ZXJ5UGFyYW1zU3ViamVjdC5uZXh0KGEucXVlcnlQYXJhbXMpLGwuZnJhZ21lbnQhPT1hLmZyYWdtZW50JiZjLmZyYWdtZW50U3ViamVjdC5uZXh0KGEuZnJhZ21lbnQpLHNwKGwucGFyYW1zLGEucGFyYW1zKXx8Yy5wYXJhbXNTdWJqZWN0Lm5leHQo''@;'; put 'put ''YS5wYXJhbXMpLGZ1bmN0aW9uICRNZShjLGwpe2lmKGMubGVuZ3RoIT09bC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBhPTA7YTxjLmxlbmd0aDsrK2EpaWYoIXNwKGNbYV0sbFthXSkpcmV0dXJuITE7cmV0dXJuITB9KGwudXJsLGEudXJsKXx8Yy51cmxTdWJqZWN0Lm5leHQoYS51cmwpLHNw''@;'; put 'put ''KGwuZGF0YSxhLmRhdGEpfHxjLmRhdGFTdWJqZWN0Lm5leHQoYS5kYXRhKX1lbHNlIGMuc25hcHNob3Q9Yy5fZnV0dXJlU25hcHNob3QsYy5kYXRhU3ViamVjdC5uZXh0KGMuX2Z1dHVyZVNuYXBzaG90LmRhdGEpfWZ1bmN0aW9uIFhaKGMsbCl7Y29uc3QgYT1zcChjLnBhcmFtcyxsLnBhcmFt''@;'; put 'put ''cykmJmZ1bmN0aW9uIEpNZShjLGwpe3JldHVybiBLOChjLGwpJiZjLmV2ZXJ5KChhLGQpPT5zcChhLnBhcmFtZXRlcnMsbFtkXS5wYXJhbWV0ZXJzKSl9KGMudXJsLGwudXJsKTtyZXR1cm4gYSYmISghYy5wYXJlbnQhPSFsLnBhcmVudCkmJighYy5wYXJlbnR8fFhaKGMucGFyZW50LGwucGFy''@;'; put 'put ''ZW50KSl9ZnVuY3Rpb24gSWxlKGMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYy50aXRsZXx8bnVsbD09PWMudGl0bGV9bGV0IGVnPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmFjdGl2YXRlZD1udWxsLHRoaXMuX2FjdGl2YXRlZFJvdXRlPW51bGwsdGhpcy5uYW1lPSRhLHRo''@;'; put 'put ''aXMuYWN0aXZhdGVFdmVudHM9bmV3IHFyLHRoaXMuZGVhY3RpdmF0ZUV2ZW50cz1uZXcgcXIsdGhpcy5hdHRhY2hFdmVudHM9bmV3IHFyLHRoaXMuZGV0YWNoRXZlbnRzPW5ldyBxcix0aGlzLnBhcmVudENvbnRleHRzPWhpKCRNKSx0aGlzLmxvY2F0aW9uPWhpKERhKSx0aGlzLmNoYW5nZURl''@;'; put 'put ''dGVjdG9yPWhpKHhzKSx0aGlzLmVudmlyb25tZW50SW5qZWN0b3I9aGkoY2MpLHRoaXMuaW5wdXRCaW5kZXI9aGkoRlIse29wdGlvbmFsOiEwfSksdGhpcy5zdXBwb3J0c0JpbmRpbmdUb0NvbXBvbmVudElucHV0cz0hMH1nZXQgYWN0aXZhdGVkQ29tcG9uZW50UmVmKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''YWN0aXZhdGVkfW5nT25DaGFuZ2VzKGEpe2lmKGEubmFtZSl7Y29uc3R7Zmlyc3RDaGFuZ2U6ZCxwcmV2aW91c1ZhbHVlOmh9PWEubmFtZTtpZihkKXJldHVybjt0aGlzLmlzVHJhY2tlZEluUGFyZW50Q29udGV4dHMoaCkmJih0aGlzLmRlYWN0aXZhdGUoKSx0aGlzLnBhcmVudENvbnRleHRz''@;'; put 'put ''Lm9uQ2hpbGRPdXRsZXREZXN0cm95ZWQoaCkpLHRoaXMuaW5pdGlhbGl6ZU91dGxldFdpdGhOYW1lKCl9fW5nT25EZXN0cm95KCl7dGhpcy5pc1RyYWNrZWRJblBhcmVudENvbnRleHRzKHRoaXMubmFtZSkmJnRoaXMucGFyZW50Q29udGV4dHMub25DaGlsZE91dGxldERlc3Ryb3llZCh0aGlz''@;'; put 'put ''Lm5hbWUpLHRoaXMuaW5wdXRCaW5kZXI/LnVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0YSh0aGlzKX1pc1RyYWNrZWRJblBhcmVudENvbnRleHRzKGEpe3JldHVybiB0aGlzLnBhcmVudENvbnRleHRzLmdldENvbnRleHQoYSk/Lm91dGxldD09PXRoaXN9bmdPbkluaXQoKXt0aGlzLmluaXRpYWxp''@;'; put 'put ''emVPdXRsZXRXaXRoTmFtZSgpfWluaXRpYWxpemVPdXRsZXRXaXRoTmFtZSgpe2lmKHRoaXMucGFyZW50Q29udGV4dHMub25DaGlsZE91dGxldENyZWF0ZWQodGhpcy5uYW1lLHRoaXMpLHRoaXMuYWN0aXZhdGVkKXJldHVybjtjb25zdCBhPXRoaXMucGFyZW50Q29udGV4dHMuZ2V0Q29udGV4''@;'; put 'put ''dCh0aGlzLm5hbWUpO2E/LnJvdXRlJiYoYS5hdHRhY2hSZWY/dGhpcy5hdHRhY2goYS5hdHRhY2hSZWYsYS5yb3V0ZSk6dGhpcy5hY3RpdmF0ZVdpdGgoYS5yb3V0ZSxhLmluamVjdG9yKSl9Z2V0IGlzQWN0aXZhdGVkKCl7cmV0dXJuISF0aGlzLmFjdGl2YXRlZH1nZXQgY29tcG9uZW50KCl7''@;'; put 'put ''aWYoIXRoaXMuYWN0aXZhdGVkKXRocm93IG5ldyBlcig0MDEyLCExKTtyZXR1cm4gdGhpcy5hY3RpdmF0ZWQuaW5zdGFuY2V9Z2V0IGFjdGl2YXRlZFJvdXRlKCl7aWYoIXRoaXMuYWN0aXZhdGVkKXRocm93IG5ldyBlcig0MDEyLCExKTtyZXR1cm4gdGhpcy5fYWN0aXZhdGVkUm91dGV9Z2V0''@;'; put 'put ''IGFjdGl2YXRlZFJvdXRlRGF0YSgpe3JldHVybiB0aGlzLl9hY3RpdmF0ZWRSb3V0ZT90aGlzLl9hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5kYXRhOnt9fWRldGFjaCgpe2lmKCF0aGlzLmFjdGl2YXRlZCl0aHJvdyBuZXcgZXIoNDAxMiwhMSk7dGhpcy5sb2NhdGlvbi5kZXRhY2goKTtjb25z''@;'; put 'put ''dCBhPXRoaXMuYWN0aXZhdGVkO3JldHVybiB0aGlzLmFjdGl2YXRlZD1udWxsLHRoaXMuX2FjdGl2YXRlZFJvdXRlPW51bGwsdGhpcy5kZXRhY2hFdmVudHMuZW1pdChhLmluc3RhbmNlKSxhfWF0dGFjaChhLGQpe3RoaXMuYWN0aXZhdGVkPWEsdGhpcy5fYWN0aXZhdGVkUm91dGU9ZCx0aGlz''@;'; put 'put ''LmxvY2F0aW9uLmluc2VydChhLmhvc3RWaWV3KSx0aGlzLmlucHV0QmluZGVyPy5iaW5kQWN0aXZhdGVkUm91dGVUb091dGxldENvbXBvbmVudCh0aGlzKSx0aGlzLmF0dGFjaEV2ZW50cy5lbWl0KGEuaW5zdGFuY2UpfWRlYWN0aXZhdGUoKXtpZih0aGlzLmFjdGl2YXRlZCl7Y29uc3QgYT10''@;'; put 'put ''aGlzLmNvbXBvbmVudDt0aGlzLmFjdGl2YXRlZC5kZXN0cm95KCksdGhpcy5hY3RpdmF0ZWQ9bnVsbCx0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1udWxsLHRoaXMuZGVhY3RpdmF0ZUV2ZW50cy5lbWl0KGEpfX1hY3RpdmF0ZVdpdGgoYSxkKXtpZih0aGlzLmlzQWN0aXZhdGVkKXRocm93IG5ldyBl''@;'; put 'put ''cig0MDEzLCExKTt0aGlzLl9hY3RpdmF0ZWRSb3V0ZT1hO2NvbnN0IGg9dGhpcy5sb2NhdGlvbix2PWEuc25hcHNob3QuY29tcG9uZW50LE09dGhpcy5wYXJlbnRDb250ZXh0cy5nZXRPckNyZWF0ZUNvbnRleHQodGhpcy5uYW1lKS5jaGlsZHJlbixEPW5ldyBKWihhLE0saC5pbmplY3Rvcik7''@;'; put 'put ''dGhpcy5hY3RpdmF0ZWQ9aC5jcmVhdGVDb21wb25lbnQodix7aW5kZXg6aC5sZW5ndGgsaW5qZWN0b3I6RCxlbnZpcm9ubWVudEluamVjdG9yOmQ/P3RoaXMuZW52aXJvbm1lbnRJbmplY3Rvcn0pLHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCksdGhpcy5pbnB1dEJpbmRlcj8u''@;'; put 'put ''YmluZEFjdGl2YXRlZFJvdXRlVG9PdXRsZXRDb21wb25lbnQodGhpcyksdGhpcy5hY3RpdmF0ZUV2ZW50cy5lbWl0KHRoaXMuYWN0aXZhdGVkLmluc3RhbmNlKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1ZGly''@;'; put 'put ''PUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbInJvdXRlci1vdXRsZXQiXV0saW5wdXRzOntuYW1lOiJuYW1lIn0sb3V0cHV0czp7YWN0aXZhdGVFdmVudHM6ImFjdGl2YXRlIixkZWFjdGl2YXRlRXZlbnRzOiJkZWFjdGl2YXRlIixhdHRhY2hFdmVudHM6ImF0dGFjaCIsZGV0YWNoRXZlbnRzOiJk''@;'; put 'put ''ZXRhY2gifSxleHBvcnRBczpbIm91dGxldCJdLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W3lsXX0pfX1yZXR1cm4gY30pKCk7Y2xhc3MgSlp7X19uZ091dGxldEluamVjdG9yKGwpe3JldHVybiBuZXcgSloodGhpcy5yb3V0ZSx0aGlzLmNoaWxkQ29udGV4dHMsbCl9Y29uc3RydWN0b3IobCxh''@;'; put 'put ''LGQpe3RoaXMucm91dGU9bCx0aGlzLmNoaWxkQ29udGV4dHM9YSx0aGlzLnBhcmVudD1kfWdldChsLGEpe3JldHVybiBsPT09Q3U/dGhpcy5yb3V0ZTpsPT09JE0/dGhpcy5jaGlsZENvbnRleHRzOnRoaXMucGFyZW50LmdldChsLGEpfX1jb25zdCBGUj1uZXcgU3QoIiIpO2xldCBSbGU9KCgp''@;'; put 'put ''PT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMub3V0bGV0RGF0YVN1YnNjcmlwdGlvbnM9bmV3IE1hcH1iaW5kQWN0aXZhdGVkUm91dGVUb091dGxldENvbXBvbmVudChhKXt0aGlzLnVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0YShhKSx0aGlzLnN1YnNjcmliZVRvUm91dGVEYXRhKGEpfXVu''@;'; put 'put ''c3Vic2NyaWJlRnJvbVJvdXRlRGF0YShhKXt0aGlzLm91dGxldERhdGFTdWJzY3JpcHRpb25zLmdldChhKT8udW5zdWJzY3JpYmUoKSx0aGlzLm91dGxldERhdGFTdWJzY3JpcHRpb25zLmRlbGV0ZShhKX1zdWJzY3JpYmVUb1JvdXRlRGF0YShhKXtjb25zdHthY3RpdmF0ZWRSb3V0ZTpkfT1h''@;'; put 'put ''LGg9JDgoW2QucXVlcnlQYXJhbXMsZC5wYXJhbXMsZC5kYXRhXSkucGlwZShWMSgoW2YsdixNXSxEKT0+KE09ey4uLmYsLi4udiwuLi5NfSwwPT09RD9mYShNKTpQcm9taXNlLnJlc29sdmUoTSkpKSkuc3Vic2NyaWJlKGY9PntpZighYS5pc0FjdGl2YXRlZHx8IWEuYWN0aXZhdGVkQ29tcG9u''@;'; put 'put ''ZW50UmVmfHxhLmFjdGl2YXRlZFJvdXRlIT09ZHx8bnVsbD09PWQuY29tcG9uZW50KXJldHVybiB2b2lkIHRoaXMudW5zdWJzY3JpYmVGcm9tUm91dGVEYXRhKGEpO2NvbnN0IHY9ZnVuY3Rpb24gWnllKGMpe2NvbnN0IGw9VmEoYyk7aWYoIWwpcmV0dXJuIG51bGw7Y29uc3QgYT1uZXcgVDgo''@;'; put 'put ''bCk7cmV0dXJue2dldCBzZWxlY3Rvcigpe3JldHVybiBhLnNlbGVjdG9yfSxnZXQgdHlwZSgpe3JldHVybiBhLmNvbXBvbmVudFR5cGV9LGdldCBpbnB1dHMoKXtyZXR1cm4gYS5pbnB1dHN9LGdldCBvdXRwdXRzKCl7cmV0dXJuIGEub3V0cHV0c30sZ2V0IG5nQ29udGVudFNlbGVjdG9ycygp''@;'; put 'put ''e3JldHVybiBhLm5nQ29udGVudFNlbGVjdG9yc30sZ2V0IGlzU3RhbmRhbG9uZSgpe3JldHVybiBsLnN0YW5kYWxvbmV9LGdldCBpc1NpZ25hbCgpe3JldHVybiBsLnNpZ25hbHN9fX0oZC5jb21wb25lbnQpO2lmKHYpZm9yKGNvbnN0e3RlbXBsYXRlTmFtZTpNfW9mIHYuaW5wdXRzKWEuYWN0''@;'; put 'put ''aXZhdGVkQ29tcG9uZW50UmVmLnNldElucHV0KE0sZltNXSk7ZWxzZSB0aGlzLnVuc3Vic2NyaWJlRnJvbVJvdXRlRGF0YShhKX0pO3RoaXMub3V0bGV0RGF0YVN1YnNjcmlwdGlvbnMuc2V0KGEsaCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9''@;'; put 'put ''fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gS00oYyxsLGEpe2lmKGEmJmMuc2hvdWxkUmV1c2VSb3V0ZShsLnZhbHVlLGEudmFsdWUuc25hcHNob3QpKXtjb25zdCBkPWEudmFsdWU7ZC5fZnV0''@;'; put 'put ''dXJlU25hcHNob3Q9bC52YWx1ZTtjb25zdCBoPWZ1bmN0aW9uIEx4ZShjLGwsYSl7cmV0dXJuIGwuY2hpbGRyZW4ubWFwKGQ9Pntmb3IoY29uc3QgaCBvZiBhLmNoaWxkcmVuKWlmKGMuc2hvdWxkUmV1c2VSb3V0ZShkLnZhbHVlLGgudmFsdWUuc25hcHNob3QpKXJldHVybiBLTShjLGQsaCk7''@;'; put 'put ''cmV0dXJuIEtNKGMsZCl9KX0oYyxsLGEpO3JldHVybiBuZXcgamYoZCxoKX17aWYoYy5zaG91bGRBdHRhY2gobC52YWx1ZSkpe2NvbnN0IGY9Yy5yZXRyaWV2ZShsLnZhbHVlKTtpZihudWxsIT09Zil7Y29uc3Qgdj1mLnJvdXRlO3JldHVybiB2LnZhbHVlLl9mdXR1cmVTbmFwc2hvdD1sLnZh''@;'; put 'put ''bHVlLHYuY2hpbGRyZW49bC5jaGlsZHJlbi5tYXAoTT0+S00oYyxNKSksdn19Y29uc3QgZD1mdW5jdGlvbiBPeGUoYyl7cmV0dXJuIG5ldyBDdShuZXcgUXIoYy51cmwpLG5ldyBRcihjLnBhcmFtcyksbmV3IFFyKGMucXVlcnlQYXJhbXMpLG5ldyBRcihjLmZyYWdtZW50KSxuZXcgUXIoYy5k''@;'; put 'put ''YXRhKSxjLm91dGxldCxjLmNvbXBvbmVudCxjKX0obC52YWx1ZSksaD1sLmNoaWxkcmVuLm1hcChmPT5LTShjLGYpKTtyZXR1cm4gbmV3IGpmKGQsaCl9fWNvbnN0IExsZT0ibmdOYXZpZ2F0aW9uQ2FuY2VsaW5nRXJyb3IiO2Z1bmN0aW9uIE9sZShjLGwpe2NvbnN0e3JlZGlyZWN0VG86YSxu''@;'; put 'put ''YXZpZ2F0aW9uQmVoYXZpb3JPcHRpb25zOmR9PWV5KGwpP3tyZWRpcmVjdFRvOmwsbmF2aWdhdGlvbkJlaGF2aW9yT3B0aW9uczp2b2lkIDB9OmwsaD1QbGUoITEsZGguUmVkaXJlY3QpO3JldHVybiBoLnVybD1hLGgubmF2aWdhdGlvbkJlaGF2aW9yT3B0aW9ucz1kLGh9ZnVuY3Rpb24gUGxl''@;'; put 'put ''KGMsbCl7Y29uc3QgYT1uZXcgRXJyb3IoYE5hdmlnYXRpb25DYW5jZWxpbmdFcnJvcjogJHtjfHwiIn1gKTtyZXR1cm4gYVtMbGVdPSEwLGEuY2FuY2VsbGF0aW9uQ29kZT1sLGF9ZnVuY3Rpb24gRmxlKGMpe3JldHVybiEhYyYmY1tMbGVdfWxldCBIbGU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7''@;'; put 'put ''dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbIm5nLWNvbXBvbmVudCJdXSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOlt6SV0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rp''@;'; put 'put ''b24oZCxoKXsxJmQmJkd0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltlZ10sZW5jYXBzdWxhdGlvbjoyfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBRWihjKXtjb25zdCBsPWMuY2hpbGRyZW4mJmMuY2hpbGRyZW4ubWFwKFFaKSxhPWw/ey4uLmMsY2hpbGRyZW46bH06ey4u''@;'; put 'put ''LmN9O3JldHVybiFhLmNvbXBvbmVudCYmIWEubG9hZENvbXBvbmVudCYmKGx8fGEubG9hZENoaWxkcmVuKSYmYS5vdXRsZXQmJmEub3V0bGV0IT09JGEmJihhLmNvbXBvbmVudD1IbGUpLGF9ZnVuY3Rpb24gdXAoYyl7cmV0dXJuIGMub3V0bGV0fHwkYX1mdW5jdGlvbiBxTShjKXtpZighYyly''@;'; put 'put ''ZXR1cm4gbnVsbDtpZihjLnJvdXRlQ29uZmlnPy5faW5qZWN0b3IpcmV0dXJuIGMucm91dGVDb25maWcuX2luamVjdG9yO2ZvcihsZXQgbD1jLnBhcmVudDtsO2w9bC5wYXJlbnQpe2NvbnN0IGE9bC5yb3V0ZUNvbmZpZztpZihhPy5fbG9hZGVkSW5qZWN0b3IpcmV0dXJuIGEuX2xvYWRlZElu''@;'; put 'put ''amVjdG9yO2lmKGE/Ll9pbmplY3RvcilyZXR1cm4gYS5faW5qZWN0b3J9cmV0dXJuIG51bGx9Y2xhc3Mgenhle2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7dGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3k9bCx0aGlzLmZ1dHVyZVN0YXRlPWEsdGhpcy5jdXJyU3RhdGU9ZCx0aGlzLmZvcndhcmRFdmVu''@;'; put 'put ''dD1oLHRoaXMuaW5wdXRCaW5kaW5nRW5hYmxlZD1mfWFjdGl2YXRlKGwpe2NvbnN0IGE9dGhpcy5mdXR1cmVTdGF0ZS5fcm9vdCxkPXRoaXMuY3VyclN0YXRlP3RoaXMuY3VyclN0YXRlLl9yb290Om51bGw7dGhpcy5kZWFjdGl2YXRlQ2hpbGRSb3V0ZXMoYSxkLGwpLHFaKHRoaXMuZnV0dXJl''@;'; put 'put ''U3RhdGUucm9vdCksdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGEsZCxsKX1kZWFjdGl2YXRlQ2hpbGRSb3V0ZXMobCxhLGQpe2NvbnN0IGg9cnkoYSk7bC5jaGlsZHJlbi5mb3JFYWNoKGY9Pntjb25zdCB2PWYudmFsdWUub3V0bGV0O3RoaXMuZGVhY3RpdmF0ZVJvdXRlcyhmLGhbdl0sZCks''@;'; put 'put ''ZGVsZXRlIGhbdl19KSxPYmplY3QudmFsdWVzKGgpLmZvckVhY2goZj0+e3RoaXMuZGVhY3RpdmF0ZVJvdXRlQW5kSXRzQ2hpbGRyZW4oZixkKX0pfWRlYWN0aXZhdGVSb3V0ZXMobCxhLGQpe2NvbnN0IGg9bC52YWx1ZSxmPWE/YS52YWx1ZTpudWxsO2lmKGg9PT1mKWlmKGguY29tcG9uZW50''@;'; put 'put ''KXtjb25zdCB2PWQuZ2V0Q29udGV4dChoLm91dGxldCk7diYmdGhpcy5kZWFjdGl2YXRlQ2hpbGRSb3V0ZXMobCxhLHYuY2hpbGRyZW4pfWVsc2UgdGhpcy5kZWFjdGl2YXRlQ2hpbGRSb3V0ZXMobCxhLGQpO2Vsc2UgZiYmdGhpcy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihhLGQp''@;'; put 'put ''fWRlYWN0aXZhdGVSb3V0ZUFuZEl0c0NoaWxkcmVuKGwsYSl7bC52YWx1ZS5jb21wb25lbnQmJnRoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnNob3VsZERldGFjaChsLnZhbHVlLnNuYXBzaG90KT90aGlzLmRldGFjaEFuZFN0b3JlUm91dGVTdWJ0cmVlKGwsYSk6dGhpcy5kZWFjdGl2YXRlUm91''@;'; put 'put ''dGVBbmRPdXRsZXQobCxhKX1kZXRhY2hBbmRTdG9yZVJvdXRlU3VidHJlZShsLGEpe2NvbnN0IGQ9YS5nZXRDb250ZXh0KGwudmFsdWUub3V0bGV0KSxoPWQmJmwudmFsdWUuY29tcG9uZW50P2QuY2hpbGRyZW46YSxmPXJ5KGwpO2Zvcihjb25zdCB2IG9mIE9iamVjdC52YWx1ZXMoZikpdGhp''@;'; put 'put ''cy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbih2LGgpO2lmKGQmJmQub3V0bGV0KXtjb25zdCB2PWQub3V0bGV0LmRldGFjaCgpLE09ZC5jaGlsZHJlbi5vbk91dGxldERlYWN0aXZhdGVkKCk7dGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc3RvcmUobC52YWx1ZS5zbmFwc2hvdCx7Y29t''@;'; put 'put ''cG9uZW50UmVmOnYscm91dGU6bCxjb250ZXh0czpNfSl9fWRlYWN0aXZhdGVSb3V0ZUFuZE91dGxldChsLGEpe2NvbnN0IGQ9YS5nZXRDb250ZXh0KGwudmFsdWUub3V0bGV0KSxoPWQmJmwudmFsdWUuY29tcG9uZW50P2QuY2hpbGRyZW46YSxmPXJ5KGwpO2Zvcihjb25zdCB2IG9mIE9iamVj''@;'; put 'put ''dC52YWx1ZXMoZikpdGhpcy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbih2LGgpO2QmJihkLm91dGxldCYmKGQub3V0bGV0LmRlYWN0aXZhdGUoKSxkLmNoaWxkcmVuLm9uT3V0bGV0RGVhY3RpdmF0ZWQoKSksZC5hdHRhY2hSZWY9bnVsbCxkLnJvdXRlPW51bGwpfWFjdGl2YXRlQ2hp''@;'; put 'put ''bGRSb3V0ZXMobCxhLGQpe2NvbnN0IGg9cnkoYSk7bC5jaGlsZHJlbi5mb3JFYWNoKGY9Pnt0aGlzLmFjdGl2YXRlUm91dGVzKGYsaFtmLnZhbHVlLm91dGxldF0sZCksdGhpcy5mb3J3YXJkRXZlbnQobmV3IGt4ZShmLnZhbHVlLnNuYXBzaG90KSl9KSxsLmNoaWxkcmVuLmxlbmd0aCYmdGhp''@;'; put 'put ''cy5mb3J3YXJkRXZlbnQobmV3IFR4ZShsLnZhbHVlLnNuYXBzaG90KSl9YWN0aXZhdGVSb3V0ZXMobCxhLGQpe2NvbnN0IGg9bC52YWx1ZSxmPWE/YS52YWx1ZTpudWxsO2lmKHFaKGgpLGg9PT1mKWlmKGguY29tcG9uZW50KXtjb25zdCB2PWQuZ2V0T3JDcmVhdGVDb250ZXh0KGgub3V0bGV0''@;'; put 'put ''KTt0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXMobCxhLHYuY2hpbGRyZW4pfWVsc2UgdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGwsYSxkKTtlbHNlIGlmKGguY29tcG9uZW50KXtjb25zdCB2PWQuZ2V0T3JDcmVhdGVDb250ZXh0KGgub3V0bGV0KTtpZih0aGlzLnJvdXRlUmV1c2VTdHJhdGVn''@;'; put 'put ''eS5zaG91bGRBdHRhY2goaC5zbmFwc2hvdCkpe2NvbnN0IE09dGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kucmV0cmlldmUoaC5zbmFwc2hvdCk7dGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3kuc3RvcmUoaC5zbmFwc2hvdCxudWxsKSx2LmNoaWxkcmVuLm9uT3V0bGV0UmVBdHRhY2hlZChNLmNvbnRl''@;'; put 'put ''eHRzKSx2LmF0dGFjaFJlZj1NLmNvbXBvbmVudFJlZix2LnJvdXRlPU0ucm91dGUudmFsdWUsdi5vdXRsZXQmJnYub3V0bGV0LmF0dGFjaChNLmNvbXBvbmVudFJlZixNLnJvdXRlLnZhbHVlKSxxWihNLnJvdXRlLnZhbHVlKSx0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXMobCxudWxsLHYuY2hp''@;'; put 'put ''bGRyZW4pfWVsc2V7Y29uc3QgTT1xTShoLnNuYXBzaG90KTt2LmF0dGFjaFJlZj1udWxsLHYucm91dGU9aCx2LmluamVjdG9yPU0sdi5vdXRsZXQmJnYub3V0bGV0LmFjdGl2YXRlV2l0aChoLHYuaW5qZWN0b3IpLHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyhsLG51bGwsdi5jaGlsZHJlbil9''@;'; put 'put ''fWVsc2UgdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGwsbnVsbCxkKX19Y2xhc3MgTmxle2NvbnN0cnVjdG9yKGwpe3RoaXMucGF0aD1sLHRoaXMucm91dGU9dGhpcy5wYXRoW3RoaXMucGF0aC5sZW5ndGgtMV19fWNsYXNzIEhSe2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5jb21wb25lbnQ9bCx0''@;'; put 'put ''aGlzLnJvdXRlPWF9fWZ1bmN0aW9uIFV4ZShjLGwsYSl7Y29uc3QgZD1jLl9yb290O3JldHVybiBYTShkLGw/bC5fcm9vdDpudWxsLGEsW2QudmFsdWVdKX1mdW5jdGlvbiBpeShjLGwpe2NvbnN0IGE9U3ltYm9sKCksZD1sLmdldChjLGEpO3JldHVybiBkPT09YT8iZnVuY3Rpb24iIT10eXBl''@;'; put 'put ''b2YgY3x8ZnVuY3Rpb24gZWEoYyl7cmV0dXJuIG51bGwhPT1PYShjKX0oYyk/bC5nZXQoYyk6YzpkfWZ1bmN0aW9uIFhNKGMsbCxhLGQsaD17Y2FuRGVhY3RpdmF0ZUNoZWNrczpbXSxjYW5BY3RpdmF0ZUNoZWNrczpbXX0pe2NvbnN0IGY9cnkobCk7cmV0dXJuIGMuY2hpbGRyZW4uZm9yRWFj''@;'; put 'put ''aCh2PT57KGZ1bmN0aW9uIFd4ZShjLGwsYSxkLGg9e2NhbkRlYWN0aXZhdGVDaGVja3M6W10sY2FuQWN0aXZhdGVDaGVja3M6W119KXtjb25zdCBmPWMudmFsdWUsdj1sP2wudmFsdWU6bnVsbCxNPWE/YS5nZXRDb250ZXh0KGMudmFsdWUub3V0bGV0KTpudWxsO2lmKHYmJmYucm91dGVDb25m''@;'; put 'put ''aWc9PT12LnJvdXRlQ29uZmlnKXtjb25zdCBEPWZ1bmN0aW9uIFl4ZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGEpcmV0dXJuIGEoYyxsKTtzd2l0Y2goYSl7Y2FzZSJwYXRoUGFyYW1zQ2hhbmdlIjpyZXR1cm4hSzgoYy51cmwsbC51cmwpO2Nhc2UicGF0aFBhcmFtc09yUXVlcnlQ''@;'; put 'put ''YXJhbXNDaGFuZ2UiOnJldHVybiFLOChjLnVybCxsLnVybCl8fCFzcChjLnF1ZXJ5UGFyYW1zLGwucXVlcnlQYXJhbXMpO2Nhc2UiYWx3YXlzIjpyZXR1cm4hMDtjYXNlInBhcmFtc09yUXVlcnlQYXJhbXNDaGFuZ2UiOnJldHVybiFYWihjLGwpfHwhc3AoYy5xdWVyeVBhcmFtcyxsLnF1ZXJ5''@;'; put 'put ''UGFyYW1zKTtkZWZhdWx0OnJldHVybiFYWihjLGwpfX0odixmLGYucm91dGVDb25maWcucnVuR3VhcmRzQW5kUmVzb2x2ZXJzKTtEP2guY2FuQWN0aXZhdGVDaGVja3MucHVzaChuZXcgTmxlKGQpKTooZi5kYXRhPXYuZGF0YSxmLl9yZXNvbHZlZERhdGE9di5fcmVzb2x2ZWREYXRhKSxYTShj''@;'; put 'put ''LGwsZi5jb21wb25lbnQ/TT9NLmNoaWxkcmVuOm51bGw6YSxkLGgpLEQmJk0mJk0ub3V0bGV0JiZNLm91dGxldC5pc0FjdGl2YXRlZCYmaC5jYW5EZWFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IEhSKE0ub3V0bGV0LmNvbXBvbmVudCx2KSl9ZWxzZSB2JiZKTShsLE0saCksaC5jYW5BY3RpdmF0''@;'; put 'put ''ZUNoZWNrcy5wdXNoKG5ldyBObGUoZCkpLFhNKGMsbnVsbCxmLmNvbXBvbmVudD9NP00uY2hpbGRyZW46bnVsbDphLGQsaCl9KSh2LGZbdi52YWx1ZS5vdXRsZXRdLGEsZC5jb25jYXQoW3YudmFsdWVdKSxoKSxkZWxldGUgZlt2LnZhbHVlLm91dGxldF19KSxPYmplY3QuZW50cmllcyhmKS5m''@;'; put 'put ''b3JFYWNoKChbdixNXSk9PkpNKE0sYS5nZXRDb250ZXh0KHYpLGgpKSxofWZ1bmN0aW9uIEpNKGMsbCxhKXtjb25zdCBkPXJ5KGMpLGg9Yy52YWx1ZTtPYmplY3QuZW50cmllcyhkKS5mb3JFYWNoKChbZix2XSk9PntKTSh2LGguY29tcG9uZW50P2w/bC5jaGlsZHJlbi5nZXRDb250ZXh0KGYp''@;'; put 'put ''Om51bGw6bCxhKX0pLGEuY2FuRGVhY3RpdmF0ZUNoZWNrcy5wdXNoKG5ldyBIUihoLmNvbXBvbmVudCYmbCYmbC5vdXRsZXQmJmwub3V0bGV0LmlzQWN0aXZhdGVkP2wub3V0bGV0LmNvbXBvbmVudDpudWxsLGgpKX1mdW5jdGlvbiBRTShjKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgY31m''@;'; put 'put ''dW5jdGlvbiBWbGUoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBNUnx8IkVtcHR5RXJyb3IiPT09Yz8ubmFtZX1jb25zdCBOUj1TeW1ib2woIklOSVRJQUxfVkFMVUUiKTtmdW5jdGlvbiBveSgpe3JldHVybiBWMShjPT4kOChjLm1hcChsPT5sLnBpcGUoQmYoMSksXzIoTlIpKSkpLnBpcGUoT3Io''@;'; put 'put ''bD0+e2Zvcihjb25zdCBhIG9mIGwpaWYoITAhPT1hKXtpZihhPT09TlIpcmV0dXJuIE5SO2lmKCExPT09YXx8YSBpbnN0YW5jZW9mIEpiKXJldHVybiBhfXJldHVybiEwfSksV2wobD0+bCE9PU5SKSxCZigxKSkpfWZ1bmN0aW9uIEJsZShjKXtyZXR1cm4gZnVuY3Rpb24gcG4oLi4uYyl7cmV0''@;'; put 'put ''dXJuIElpKGMpfShZdShsPT57aWYoZXkobCkpdGhyb3cgT2xlKDAsbCl9KSxPcihsPT4hMD09PWwpKX1jbGFzcyBlV3tjb25zdHJ1Y3RvcihsKXt0aGlzLnNlZ21lbnRHcm91cD1sfHxudWxsfX1jbGFzcyB0VyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy51cmxU''@;'; put 'put ''cmVlPWx9fWZ1bmN0aW9uIGF5KGMpe3JldHVybiB4UihuZXcgZVcoYykpfWNsYXNzIGRFZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMudXJsU2VyaWFsaXplcj1sLHRoaXMudXJsVHJlZT1hfWxpbmVyYWxpemVTZWdtZW50cyhsLGEpe2xldCBkPVtdLGg9YS5yb290O2Zvcig7Oyl7aWYoZD1kLmNv''@;'; put 'put ''bmNhdChoLnNlZ21lbnRzKSwwPT09aC5udW1iZXJPZkNoaWxkcmVuKXJldHVybiBmYShkKTtpZihoLm51bWJlck9mQ2hpbGRyZW4+MXx8IWguY2hpbGRyZW5bJGFdKXJldHVybiB4UihuZXcgZXIoNGUzLCExKSk7aD1oLmNoaWxkcmVuWyRhXX19YXBwbHlSZWRpcmVjdENvbW1hbmRzKGwsYSxk''@;'; put 'put ''KXtjb25zdCBoPXRoaXMuYXBwbHlSZWRpcmVjdENyZWF0ZVVybFRyZWUoYSx0aGlzLnVybFNlcmlhbGl6ZXIucGFyc2UoYSksbCxkKTtpZihhLnN0YXJ0c1dpdGgoIi8iKSl0aHJvdyBuZXcgdFcoaCk7cmV0dXJuIGh9YXBwbHlSZWRpcmVjdENyZWF0ZVVybFRyZWUobCxhLGQsaCl7Y29uc3Qg''@;'; put 'put ''Zj10aGlzLmNyZWF0ZVNlZ21lbnRHcm91cChsLGEucm9vdCxkLGgpO3JldHVybiBuZXcgSmIoZix0aGlzLmNyZWF0ZVF1ZXJ5UGFyYW1zKGEucXVlcnlQYXJhbXMsdGhpcy51cmxUcmVlLnF1ZXJ5UGFyYW1zKSxhLmZyYWdtZW50KX1jcmVhdGVRdWVyeVBhcmFtcyhsLGEpe2NvbnN0IGQ9e307''@;'; put 'put ''cmV0dXJuIE9iamVjdC5lbnRyaWVzKGwpLmZvckVhY2goKFtoLGZdKT0+e2lmKCJzdHJpbmciPT10eXBlb2YgZiYmZi5zdGFydHNXaXRoKCI6Iikpe2NvbnN0IE09Zi5zdWJzdHJpbmcoMSk7ZFtoXT1hW01dfWVsc2UgZFtoXT1mfSksZH1jcmVhdGVTZWdtZW50R3JvdXAobCxhLGQsaCl7Y29u''@;'; put 'put ''c3QgZj10aGlzLmNyZWF0ZVNlZ21lbnRzKGwsYS5zZWdtZW50cyxkLGgpO2xldCB2PXt9O3JldHVybiBPYmplY3QuZW50cmllcyhhLmNoaWxkcmVuKS5mb3JFYWNoKChbTSxEXSk9Pnt2W01dPXRoaXMuY3JlYXRlU2VnbWVudEdyb3VwKGwsRCxkLGgpfSksbmV3IFlsKGYsdil9Y3JlYXRlU2Vn''@;'; put 'put ''bWVudHMobCxhLGQsaCl7cmV0dXJuIGEubWFwKGY9PmYucGF0aC5zdGFydHNXaXRoKCI6Iik/dGhpcy5maW5kUG9zUGFyYW0obCxmLGgpOnRoaXMuZmluZE9yUmV0dXJuKGYsZCkpfWZpbmRQb3NQYXJhbShsLGEsZCl7Y29uc3QgaD1kW2EucGF0aC5zdWJzdHJpbmcoMSldO2lmKCFoKXRocm93''@;'; put 'put ''IG5ldyBlcig0MDAxLCExKTtyZXR1cm4gaH1maW5kT3JSZXR1cm4obCxhKXtsZXQgZD0wO2Zvcihjb25zdCBoIG9mIGEpe2lmKGgucGF0aD09PWwucGF0aClyZXR1cm4gYS5zcGxpY2UoZCksaDtkKyt9cmV0dXJuIGx9fWNvbnN0IG5XPXttYXRjaGVkOiExLGNvbnN1bWVkU2VnbWVudHM6W10s''@;'; put 'put ''cmVtYWluaW5nU2VnbWVudHM6W10scGFyYW1ldGVyczp7fSxwb3NpdGlvbmFsUGFyYW1TZWdtZW50czp7fX07ZnVuY3Rpb24gaEVlKGMsbCxhLGQsaCl7Y29uc3QgZj1yVyhjLGwsYSk7cmV0dXJuIGYubWF0Y2hlZD8oZD1mdW5jdGlvbiBGeGUoYyxsKXtyZXR1cm4gYy5wcm92aWRlcnMmJiFj''@;'; put 'put ''Ll9pbmplY3RvciYmKGMuX2luamVjdG9yPVo0KGMucHJvdmlkZXJzLGwsYFJvdXRlOiAke2MucGF0aH1gKSksYy5faW5qZWN0b3I/P2x9KGwsZCksZnVuY3Rpb24gbEVlKGMsbCxhLGQpe2NvbnN0IGg9bC5jYW5NYXRjaDtyZXR1cm4gaCYmMCE9PWgubGVuZ3RoP2ZhKGgubWFwKHY9Pntjb25z''@;'; put 'put ''dCBNPWl5KHYsYyk7cmV0dXJuIHJtKGZ1bmN0aW9uIEp4ZShjKXtyZXR1cm4gYyYmUU0oYy5jYW5NYXRjaCl9KE0pP00uY2FuTWF0Y2gobCxhKTpYMChjLCgpPT5NKGwsYSkpKX0pKS5waXBlKG95KCksQmxlKCkpOmZhKCEwKX0oZCxsLGEpLnBpcGUoT3Iodj0+ITA9PT12P2Y6ey4uLm5XfSkp''@;'; put 'put ''KTpmYShmKX1mdW5jdGlvbiByVyhjLGwsYSl7aWYoIioqIj09PWwucGF0aClyZXR1cm4gZnVuY3Rpb24gZkVlKGMpe3JldHVybnttYXRjaGVkOiEwLHBhcmFtZXRlcnM6Yy5sZW5ndGg+MD9hbGUoYykucGFyYW1ldGVyczp7fSxjb25zdW1lZFNlZ21lbnRzOmMscmVtYWluaW5nU2VnbWVudHM6''@;'; put 'put ''W10scG9zaXRpb25hbFBhcmFtU2VnbWVudHM6e319fShhKTtpZigiIj09PWwucGF0aClyZXR1cm4iZnVsbCI9PT1sLnBhdGhNYXRjaCYmKGMuaGFzQ2hpbGRyZW4oKXx8YS5sZW5ndGg+MCk/ey4uLm5XfTp7bWF0Y2hlZDohMCxjb25zdW1lZFNlZ21lbnRzOltdLHJlbWFpbmluZ1NlZ21lbnRz''@;'; put 'put ''OmEscGFyYW1ldGVyczp7fSxwb3NpdGlvbmFsUGFyYW1TZWdtZW50czp7fX07Y29uc3QgaD0obC5tYXRjaGVyfHxHTWUpKGEsYyxsKTtpZighaClyZXR1cm57Li4ubld9O2NvbnN0IGY9e307T2JqZWN0LmVudHJpZXMoaC5wb3NQYXJhbXM/P3t9KS5mb3JFYWNoKChbTSxEXSk9PntmW01dPUQu''@;'; put 'put ''cGF0aH0pO2NvbnN0IHY9aC5jb25zdW1lZC5sZW5ndGg+MD97Li4uZiwuLi5oLmNvbnN1bWVkW2guY29uc3VtZWQubGVuZ3RoLTFdLnBhcmFtZXRlcnN9OmY7cmV0dXJue21hdGNoZWQ6ITAsY29uc3VtZWRTZWdtZW50czpoLmNvbnN1bWVkLHJlbWFpbmluZ1NlZ21lbnRzOmEuc2xpY2UoaC5j''@;'; put 'put ''b25zdW1lZC5sZW5ndGgpLHBhcmFtZXRlcnM6dixwb3NpdGlvbmFsUGFyYW1TZWdtZW50czpoLnBvc1BhcmFtcz8/e319fWZ1bmN0aW9uIGpsZShjLGwsYSxkKXtyZXR1cm4gYS5sZW5ndGg+MCYmZnVuY3Rpb24gbUVlKGMsbCxhKXtyZXR1cm4gYS5zb21lKGQ9PlZSKGMsbCxkKSYmdXAoZCkh''@;'; put 'put ''PT0kYSl9KGMsYSxkKT97c2VnbWVudEdyb3VwOm5ldyBZbChsLGdFZShkLG5ldyBZbChhLGMuY2hpbGRyZW4pKSksc2xpY2VkU2VnbWVudHM6W119OjA9PT1hLmxlbmd0aCYmZnVuY3Rpb24gdkVlKGMsbCxhKXtyZXR1cm4gYS5zb21lKGQ9PlZSKGMsbCxkKSl9KGMsYSxkKT97c2VnbWVudEdy''@;'; put 'put ''b3VwOm5ldyBZbChjLnNlZ21lbnRzLHBFZShjLGEsZCxjLmNoaWxkcmVuKSksc2xpY2VkU2VnbWVudHM6YX06e3NlZ21lbnRHcm91cDpuZXcgWWwoYy5zZWdtZW50cyxjLmNoaWxkcmVuKSxzbGljZWRTZWdtZW50czphfX1mdW5jdGlvbiBwRWUoYyxsLGEsZCl7Y29uc3QgaD17fTtmb3IoY29u''@;'; put 'put ''c3QgZiBvZiBhKWlmKFZSKGMsbCxmKSYmIWRbdXAoZildKXtjb25zdCB2PW5ldyBZbChbXSx7fSk7aFt1cChmKV09dn1yZXR1cm57Li4uZCwuLi5ofX1mdW5jdGlvbiBnRWUoYyxsKXtjb25zdCBhPXt9O2FbJGFdPWw7Zm9yKGNvbnN0IGQgb2YgYylpZigiIj09PWQucGF0aCYmdXAoZCkhPT0k''@;'; put 'put ''YSl7Y29uc3QgaD1uZXcgWWwoW10se30pO2FbdXAoZCldPWh9cmV0dXJuIGF9ZnVuY3Rpb24gVlIoYyxsLGEpe3JldHVybighKGMuaGFzQ2hpbGRyZW4oKXx8bC5sZW5ndGg+MCl8fCJmdWxsIiE9PWEucGF0aE1hdGNoKSYmIiI9PT1hLnBhdGh9Y2xhc3MgX0Vle31jbGFzcyBTRWV7Y29uc3Ry''@;'; put 'put ''dWN0b3IobCxhLGQsaCxmLHYsTSl7dGhpcy5pbmplY3Rvcj1sLHRoaXMuY29uZmlnTG9hZGVyPWEsdGhpcy5yb290Q29tcG9uZW50VHlwZT1kLHRoaXMuY29uZmlnPWgsdGhpcy51cmxUcmVlPWYsdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5PXYsdGhpcy51cmxTZXJpYWxpemVyPU0s''@;'; put 'put ''dGhpcy5hcHBseVJlZGlyZWN0cz1uZXcgZEVlKHRoaXMudXJsU2VyaWFsaXplcix0aGlzLnVybFRyZWUpLHRoaXMuYWJzb2x1dGVSZWRpcmVjdENvdW50PTAsdGhpcy5hbGxvd1JlZGlyZWN0cz0hMH1ub01hdGNoRXJyb3IobCl7cmV0dXJuIG5ldyBlcig0MDAyLGAnJHtsLnNlZ21lbnRHcm91''@;'; put 'put ''cH0nYCl9cmVjb2duaXplKCl7Y29uc3QgbD1qbGUodGhpcy51cmxUcmVlLnJvb3QsW10sW10sdGhpcy5jb25maWcpLnNlZ21lbnRHcm91cDtyZXR1cm4gdGhpcy5tYXRjaChsKS5waXBlKE9yKGE9Pntjb25zdCBkPW5ldyAkWihbXSxPYmplY3QuZnJlZXplKHt9KSxPYmplY3QuZnJlZXplKHsu''@;'; put 'put ''Li50aGlzLnVybFRyZWUucXVlcnlQYXJhbXN9KSx0aGlzLnVybFRyZWUuZnJhZ21lbnQse30sJGEsdGhpcy5yb290Q29tcG9uZW50VHlwZSxudWxsLHt9KSxoPW5ldyBqZihkLGEpLGY9bmV3IGtsZSgiIixoKSx2PWZ1bmN0aW9uIGZ4ZShjLGwsYT1udWxsLGQ9bnVsbCl7cmV0dXJuIGJsZSh2''@;'; put 'put ''bGUoYyksbCxhLGQpfShkLFtdLHRoaXMudXJsVHJlZS5xdWVyeVBhcmFtcyx0aGlzLnVybFRyZWUuZnJhZ21lbnQpO3JldHVybiB2LnF1ZXJ5UGFyYW1zPXRoaXMudXJsVHJlZS5xdWVyeVBhcmFtcyxmLnVybD10aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHYpLHRoaXMuaW5oZXJpdFBh''@;'; put 'put ''cmFtc0FuZERhdGEoZi5fcm9vdCxudWxsKSx7c3RhdGU6Zix0cmVlOnZ9fSkpfW1hdGNoKGwpe3JldHVybiB0aGlzLnByb2Nlc3NTZWdtZW50R3JvdXAodGhpcy5pbmplY3Rvcix0aGlzLmNvbmZpZyxsLCRhKS5waXBlKHFiKGQ9PntpZihkIGluc3RhbmNlb2YgdFcpcmV0dXJuIHRoaXMudXJs''@;'; put 'put ''VHJlZT1kLnVybFRyZWUsdGhpcy5tYXRjaChkLnVybFRyZWUucm9vdCk7dGhyb3cgZCBpbnN0YW5jZW9mIGVXP3RoaXMubm9NYXRjaEVycm9yKGQpOmR9KSl9aW5oZXJpdFBhcmFtc0FuZERhdGEobCxhKXtjb25zdCBkPWwudmFsdWUsaD1HWihkLGEsdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0''@;'; put 'put ''cmF0ZWd5KTtkLnBhcmFtcz1PYmplY3QuZnJlZXplKGgucGFyYW1zKSxkLmRhdGE9T2JqZWN0LmZyZWV6ZShoLmRhdGEpLGwuY2hpbGRyZW4uZm9yRWFjaChmPT50aGlzLmluaGVyaXRQYXJhbXNBbmREYXRhKGYsZCkpfXByb2Nlc3NTZWdtZW50R3JvdXAobCxhLGQsaCl7cmV0dXJuIDA9PT1k''@;'; put 'put ''LnNlZ21lbnRzLmxlbmd0aCYmZC5oYXNDaGlsZHJlbigpP3RoaXMucHJvY2Vzc0NoaWxkcmVuKGwsYSxkKTp0aGlzLnByb2Nlc3NTZWdtZW50KGwsYSxkLGQuc2VnbWVudHMsaCwhMCkucGlwZShPcihmPT5mIGluc3RhbmNlb2YgamY/W2ZdOltdKSl9cHJvY2Vzc0NoaWxkcmVuKGwsYSxkKXtj''@;'; put 'put ''b25zdCBoPVtdO2Zvcihjb25zdCBmIG9mIE9iamVjdC5rZXlzKGQuY2hpbGRyZW4pKSJwcmltYXJ5Ij09PWY/aC51bnNoaWZ0KGYpOmgucHVzaChmKTtyZXR1cm4gV3UoaCkucGlwZShLYihmPT57Y29uc3Qgdj1kLmNoaWxkcmVuW2ZdLE09ZnVuY3Rpb24gQnhlKGMsbCl7Y29uc3QgYT1jLmZp''@;'; put 'put ''bHRlcihkPT51cChkKT09PWwpO3JldHVybiBhLnB1c2goLi4uYy5maWx0ZXIoZD0+dXAoZCkhPT1sKSksYX0oYSxmKTtyZXR1cm4gdGhpcy5wcm9jZXNzU2VnbWVudEdyb3VwKGwsTSx2LGYpfSksZnVuY3Rpb24gVU1lKGMsbCl7cmV0dXJuIEJpKGZ1bmN0aW9uIHpNZShjLGwsYSxkLGgpe3Jl''@;'; put 'put ''dHVybihmLHYpPT57bGV0IE09YSxEPWwsWj0wO2Yuc3Vic2NyaWJlKFZpKHYsbmU9Pntjb25zdCBjZT1aKys7RD1NP2MoRCxuZSxjZSk6KE09ITAsbmUpLGQmJnYubmV4dChEKX0saCYmKCgpPT57TSYmdi5uZXh0KEQpLHYuY29tcGxldGUoKX0pKSl9fShjLGwsYXJndW1lbnRzLmxlbmd0aD49''@;'; put 'put ''MiwhMCkpfSgoZix2KT0+KGYucHVzaCguLi52KSxmKSksRVIobnVsbCksZnVuY3Rpb24gWk1lKGMsbCl7Y29uc3QgYT1hcmd1bWVudHMubGVuZ3RoPj0yO3JldHVybiBkPT5kLnBpcGUoYz9XbCgoaCxmKT0+YyhoLGYsZCkpOmNuLEZaKDEpLGE/RVIobCk6aWxlKCgpPT5uZXcgTVIpKX0oKSxO''@;'; put 'put ''MChmPT57aWYobnVsbD09PWYpcmV0dXJuIGF5KGQpO2NvbnN0IHY9emxlKGYpO3JldHVybiBmdW5jdGlvbiBNRWUoYyl7Yy5zb3J0KChsLGEpPT5sLnZhbHVlLm91dGxldD09PSRhPy0xOmEudmFsdWUub3V0bGV0PT09JGE/MTpsLnZhbHVlLm91dGxldC5sb2NhbGVDb21wYXJlKGEudmFsdWUu''@;'; put 'put ''b3V0bGV0KSl9KHYpLGZhKHYpfSkpfXByb2Nlc3NTZWdtZW50KGwsYSxkLGgsZix2KXtyZXR1cm4gV3UoYSkucGlwZShLYihNPT50aGlzLnByb2Nlc3NTZWdtZW50QWdhaW5zdFJvdXRlKE0uX2luamVjdG9yPz9sLGEsTSxkLGgsZix2KS5waXBlKHFiKEQ9PntpZihEIGluc3RhbmNlb2YgZVcp''@;'; put 'put ''cmV0dXJuIGZhKG51bGwpO3Rocm93IER9KSkpLG5tKE09PiEhTSkscWIoTT0+e2lmKFZsZShNKSlyZXR1cm4gZnVuY3Rpb24geUVlKGMsbCxhKXtyZXR1cm4gMD09PWwubGVuZ3RoJiYhYy5jaGlsZHJlblthXX0oZCxoLGYpP2ZhKG5ldyBfRWUpOmF5KGQpO3Rocm93IE19KSl9cHJvY2Vzc1Nl''@;'; put 'put ''Z21lbnRBZ2FpbnN0Um91dGUobCxhLGQsaCxmLHYsTSl7cmV0dXJuIGZ1bmN0aW9uIGJFZShjLGwsYSxkKXtyZXR1cm4hISh1cChjKT09PWR8fGQhPT0kYSYmVlIobCxhLGMpKSYmclcobCxjLGEpLm1hdGNoZWR9KGQsaCxmLHYpP3ZvaWQgMD09PWQucmVkaXJlY3RUbz90aGlzLm1hdGNoU2Vn''@;'; put 'put ''bWVudEFnYWluc3RSb3V0ZShsLGgsZCxmLHYpOnRoaXMuYWxsb3dSZWRpcmVjdHMmJk0/dGhpcy5leHBhbmRTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdChsLGgsYSxkLGYsdik6YXkoaCk6YXkoaCl9ZXhwYW5kU2VnbWVudEFnYWluc3RSb3V0ZVVzaW5nUmVkaXJlY3QobCxhLGQs''@;'; put 'put ''aCxmLHYpe2NvbnN0e21hdGNoZWQ6TSxjb25zdW1lZFNlZ21lbnRzOkQscG9zaXRpb25hbFBhcmFtU2VnbWVudHM6WixyZW1haW5pbmdTZWdtZW50czpuZX09clcoYSxoLGYpO2lmKCFNKXJldHVybiBheShhKTtoLnJlZGlyZWN0VG8uc3RhcnRzV2l0aCgiLyIpJiYodGhpcy5hYnNvbHV0ZVJl''@;'; put 'put ''ZGlyZWN0Q291bnQrKyx0aGlzLmFic29sdXRlUmVkaXJlY3RDb3VudD4zMSYmKHRoaXMuYWxsb3dSZWRpcmVjdHM9ITEpKTtjb25zdCBjZT10aGlzLmFwcGx5UmVkaXJlY3RzLmFwcGx5UmVkaXJlY3RDb21tYW5kcyhELGgucmVkaXJlY3RUbyxaKTtyZXR1cm4gdGhpcy5hcHBseVJlZGlyZWN0''@;'; put 'put ''cy5saW5lcmFsaXplU2VnbWVudHMoaCxjZSkucGlwZShOMChiZT0+dGhpcy5wcm9jZXNzU2VnbWVudChsLGQsYSxiZS5jb25jYXQobmUpLHYsITEpKSl9bWF0Y2hTZWdtZW50QWdhaW5zdFJvdXRlKGwsYSxkLGgsZil7Y29uc3Qgdj1oRWUoYSxkLGgsbCk7cmV0dXJuIioqIj09PWQucGF0aCYm''@;'; put 'put ''KGEuY2hpbGRyZW49e30pLHYucGlwZShWMShNPT5NLm1hdGNoZWQ/dGhpcy5nZXRDaGlsZENvbmZpZyhsPWQuX2luamVjdG9yPz9sLGQsaCkucGlwZShWMSgoe3JvdXRlczpEfSk9Pntjb25zdCBaPWQuX2xvYWRlZEluamVjdG9yPz9sLHtjb25zdW1lZFNlZ21lbnRzOm5lLHJlbWFpbmluZ1Nl''@;'; put 'put ''Z21lbnRzOmNlLHBhcmFtZXRlcnM6YmV9PU0sRWU9bmV3ICRaKG5lLGJlLE9iamVjdC5mcmVlemUoey4uLnRoaXMudXJsVHJlZS5xdWVyeVBhcmFtc30pLHRoaXMudXJsVHJlZS5mcmFnbWVudCxmdW5jdGlvbiBFRWUoYyl7cmV0dXJuIGMuZGF0YXx8e319KGQpLHVwKGQpLGQuY29tcG9uZW50''@;'; put 'put ''Pz9kLl9sb2FkZWRDb21wb25lbnQ/P251bGwsZCxmdW5jdGlvbiBURWUoYyl7cmV0dXJuIGMucmVzb2x2ZXx8e319KGQpKSx7c2VnbWVudEdyb3VwOkJlLHNsaWNlZFNlZ21lbnRzOnFlfT1qbGUoYSxuZSxjZSxEKTtpZigwPT09cWUubGVuZ3RoJiZCZS5oYXNDaGlsZHJlbigpKXJldHVybiB0''@;'; put 'put ''aGlzLnByb2Nlc3NDaGlsZHJlbihaLEQsQmUpLnBpcGUoT3IobHQ9Pm51bGw9PT1sdD9udWxsOm5ldyBqZihFZSxsdCkpKTtpZigwPT09RC5sZW5ndGgmJjA9PT1xZS5sZW5ndGgpcmV0dXJuIGZhKG5ldyBqZihFZSxbXSkpO2NvbnN0IG50PXVwKGQpPT09ZjtyZXR1cm4gdGhpcy5wcm9jZXNz''@;'; put 'put ''U2VnbWVudChaLEQsQmUscWUsbnQ/JGE6ZiwhMCkucGlwZShPcihsdD0+bmV3IGpmKEVlLGx0IGluc3RhbmNlb2YgamY/W2x0XTpbXSkpKX0pKTpheShhKSkpfWdldENoaWxkQ29uZmlnKGwsYSxkKXtyZXR1cm4gYS5jaGlsZHJlbj9mYSh7cm91dGVzOmEuY2hpbGRyZW4saW5qZWN0b3I6bH0p''@;'; put 'put ''OmEubG9hZENoaWxkcmVuP3ZvaWQgMCE9PWEuX2xvYWRlZFJvdXRlcz9mYSh7cm91dGVzOmEuX2xvYWRlZFJvdXRlcyxpbmplY3RvcjphLl9sb2FkZWRJbmplY3Rvcn0pOmZ1bmN0aW9uIHNFZShjLGwsYSxkKXtjb25zdCBoPWwuY2FuTG9hZDtyZXR1cm4gdm9pZCAwPT09aHx8MD09PWgubGVu''@;'; put 'put ''Z3RoP2ZhKCEwKTpmYShoLm1hcCh2PT57Y29uc3QgTT1peSh2LGMpO3JldHVybiBybShmdW5jdGlvbiAkeGUoYyl7cmV0dXJuIGMmJlFNKGMuY2FuTG9hZCl9KE0pP00uY2FuTG9hZChsLGEpOlgwKGMsKCk9Pk0obCxhKSkpfSkpLnBpcGUob3koKSxCbGUoKSl9KGwsYSxkKS5waXBlKE4wKGg9''@;'; put 'put ''Pmg/dGhpcy5jb25maWdMb2FkZXIubG9hZENoaWxkcmVuKGwsYSkucGlwZShZdShmPT57YS5fbG9hZGVkUm91dGVzPWYucm91dGVzLGEuX2xvYWRlZEluamVjdG9yPWYuaW5qZWN0b3J9KSk6ZnVuY3Rpb24gdUVlKGMpe3JldHVybiB4UihQbGUoITEsZGguR3VhcmRSZWplY3RlZCkpfSgpKSk6''@;'; put 'put ''ZmEoe3JvdXRlczpbXSxpbmplY3RvcjpsfSl9fWZ1bmN0aW9uIHhFZShjKXtjb25zdCBsPWMudmFsdWUucm91dGVDb25maWc7cmV0dXJuIGwmJiIiPT09bC5wYXRofWZ1bmN0aW9uIHpsZShjKXtjb25zdCBsPVtdLGE9bmV3IFNldDtmb3IoY29uc3QgZCBvZiBjKXtpZigheEVlKGQpKXtsLnB1''@;'; put 'put ''c2goZCk7Y29udGludWV9Y29uc3QgaD1sLmZpbmQoZj0+ZC52YWx1ZS5yb3V0ZUNvbmZpZz09PWYudmFsdWUucm91dGVDb25maWcpO3ZvaWQgMCE9PWg/KGguY2hpbGRyZW4ucHVzaCguLi5kLmNoaWxkcmVuKSxhLmFkZChoKSk6bC5wdXNoKGQpfWZvcihjb25zdCBkIG9mIGEpe2NvbnN0IGg9''@;'; put 'put ''emxlKGQuY2hpbGRyZW4pO2wucHVzaChuZXcgamYoZC52YWx1ZSxoKSl9cmV0dXJuIGwuZmlsdGVyKGQ9PiFhLmhhcyhkKSl9ZnVuY3Rpb24gVWxlKGMpe2NvbnN0IGw9Yy5jaGlsZHJlbi5tYXAoYT0+VWxlKGEpKS5mbGF0KCk7cmV0dXJuW2MsLi4ubF19ZnVuY3Rpb24gaVcoYyl7cmV0dXJu''@;'; put 'put ''IFYxKGw9Pntjb25zdCBhPWMobCk7cmV0dXJuIGE/V3UoYSkucGlwZShPcigoKT0+bCkpOmZhKGwpfSl9bGV0IFpsZT0oKCk9PntjbGFzcyBje2J1aWxkVGl0bGUoYSl7bGV0IGQsaD1hLnJvb3Q7Zm9yKDt2b2lkIDAhPT1oOylkPXRoaXMuZ2V0UmVzb2x2ZWRUaXRsZUZvclJvdXRlKGgpPz9k''@;'; put 'put ''LGg9aC5jaGlsZHJlbi5maW5kKGY9PmYub3V0bGV0PT09JGEpO3JldHVybiBkfWdldFJlc29sdmVkVGl0bGVGb3JSb3V0ZShhKXtyZXR1cm4gYS5kYXRhW3pNXX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJv''@;'; put 'put ''dj1hbih7dG9rZW46YyxmYWN0b3J5OigpPT5oaShMRWUpLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKSxMRWU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFpsZXtjb25zdHJ1Y3RvcihhKXtzdXBlcigpLHRoaXMudGl0bGU9YX11cGRhdGVUaXRsZShhKXtjb25zdCBkPXRoaXMuYnVp''@;'; put 'put ''bGRUaXRsZShhKTt2b2lkIDAhPT1kJiZ0aGlzLnRpdGxlLnNldFRpdGxlKGQpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKE1yKGNDZSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJv''@;'; put 'put ''dmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IHN5PW5ldyBTdCgiIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+KHt9KX0pLGx5PW5ldyBTdCgiIik7bGV0IG9XPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmNvbXBvbmVudExvYWRlcnM9bmV3IFdl''@;'; put 'put ''YWtNYXAsdGhpcy5jaGlsZHJlbkxvYWRlcnM9bmV3IFdlYWtNYXAsdGhpcy5jb21waWxlcj1oaShOaWUpfWxvYWRDb21wb25lbnQoYSl7aWYodGhpcy5jb21wb25lbnRMb2FkZXJzLmdldChhKSlyZXR1cm4gdGhpcy5jb21wb25lbnRMb2FkZXJzLmdldChhKTtpZihhLl9sb2FkZWRDb21wb25l''@;'; put 'put ''bnQpcmV0dXJuIGZhKGEuX2xvYWRlZENvbXBvbmVudCk7dGhpcy5vbkxvYWRTdGFydExpc3RlbmVyJiZ0aGlzLm9uTG9hZFN0YXJ0TGlzdGVuZXIoYSk7Y29uc3QgZD1ybShhLmxvYWRDb21wb25lbnQoKSkucGlwZShPcihXbGUpLFl1KGY9Pnt0aGlzLm9uTG9hZEVuZExpc3RlbmVyJiZ0aGlz''@;'; put 'put ''Lm9uTG9hZEVuZExpc3RlbmVyKGEpLGEuX2xvYWRlZENvbXBvbmVudD1mfSksak0oKCk9Pnt0aGlzLmNvbXBvbmVudExvYWRlcnMuZGVsZXRlKGEpfSkpLGg9bmV3IFBaKGQsKCk9Pm5ldyBXbikucGlwZShPWigpKTtyZXR1cm4gdGhpcy5jb21wb25lbnRMb2FkZXJzLnNldChhLGgpLGh9bG9h''@;'; put 'put ''ZENoaWxkcmVuKGEsZCl7aWYodGhpcy5jaGlsZHJlbkxvYWRlcnMuZ2V0KGQpKXJldHVybiB0aGlzLmNoaWxkcmVuTG9hZGVycy5nZXQoZCk7aWYoZC5fbG9hZGVkUm91dGVzKXJldHVybiBmYSh7cm91dGVzOmQuX2xvYWRlZFJvdXRlcyxpbmplY3RvcjpkLl9sb2FkZWRJbmplY3Rvcn0pO3Ro''@;'; put 'put ''aXMub25Mb2FkU3RhcnRMaXN0ZW5lciYmdGhpcy5vbkxvYWRTdGFydExpc3RlbmVyKGQpO2NvbnN0IGY9ZnVuY3Rpb24gT0VlKGMsbCxhLGQpe3JldHVybiBybShjLmxvYWRDaGlsZHJlbigpKS5waXBlKE9yKFdsZSksTjAoaD0+aCBpbnN0YW5jZW9mIGZjfHxBcnJheS5pc0FycmF5KGgpP2Zh''@;'; put 'put ''KGgpOld1KGwuY29tcGlsZU1vZHVsZUFzeW5jKGgpKSksT3IoaD0+e2QmJmQoYyk7bGV0IGYsdixNPSExO3JldHVybiBBcnJheS5pc0FycmF5KGgpPyh2PWgsITApOihmPWguY3JlYXRlKGEpLmluamVjdG9yLHY9Zi5nZXQobHksW10se29wdGlvbmFsOiEwLHNlbGY6ITB9KS5mbGF0KCkpLHty''@;'; put 'put ''b3V0ZXM6di5tYXAoUVopLGluamVjdG9yOmZ9fSkpfShkLHRoaXMuY29tcGlsZXIsYSx0aGlzLm9uTG9hZEVuZExpc3RlbmVyKS5waXBlKGpNKCgpPT57dGhpcy5jaGlsZHJlbkxvYWRlcnMuZGVsZXRlKGQpfSkpLHY9bmV3IFBaKGYsKCk9Pm5ldyBXbikucGlwZShPWigpKTtyZXR1cm4gdGhp''@;'; put 'put ''cy5jaGlsZHJlbkxvYWRlcnMuc2V0KGQsdiksdn1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBj''@;'; put 'put ''fSkoKTtmdW5jdGlvbiBXbGUoYyl7cmV0dXJuIGZ1bmN0aW9uIFBFZShjKXtyZXR1cm4gYyYmIm9iamVjdCI9PXR5cGVvZiBjJiYiZGVmYXVsdCJpbiBjfShjKT9jLmRlZmF1bHQ6Y31sZXQgYVc9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJu''@;'; put 'put ''IG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OigpPT5oaShGRWUpLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKSxGRWU9KCgpPT57Y2xhc3MgY3tzaG91bGRQcm9jZXNzVXJsKGEpe3JldHVybiEwfWV4dHJhY3QoYSl7cmV0dXJu''@;'; put 'put ''IGF9bWVyZ2UoYSxkKXtyZXR1cm4gYX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtj''@;'; put 'put ''b25zdCBZbGU9bmV3IFN0KCIiKSxHbGU9bmV3IFN0KCIiKTtmdW5jdGlvbiBIRWUoYyxsLGEpe2NvbnN0IGQ9Yy5nZXQoR2xlKSxoPWMuZ2V0KHZzKTtyZXR1cm4gYy5nZXQoWW8pLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57aWYoIWguc3RhcnRWaWV3VHJhbnNpdGlvbnx8ZC5za2lwTmV4dFRy''@;'; put 'put ''YW5zaXRpb24pcmV0dXJuIGQuc2tpcE5leHRUcmFuc2l0aW9uPSExLG5ldyBQcm9taXNlKFo9PnNldFRpbWVvdXQoWikpO2xldCBmO2NvbnN0IHY9bmV3IFByb21pc2UoWj0+e2Y9Wn0pLE09aC5zdGFydFZpZXdUcmFuc2l0aW9uKCgpPT4oZigpLGZ1bmN0aW9uIE5FZShjKXtyZXR1cm4gbmV3''@;'; put 'put ''IFByb21pc2UobD0+e3BiKGwse2luamVjdG9yOmN9KX0pfShjKSkpLHtvblZpZXdUcmFuc2l0aW9uQ3JlYXRlZDpEfT1kO3JldHVybiBEJiZYMChjLCgpPT5EKHt0cmFuc2l0aW9uOk0sZnJvbTpsLHRvOmF9KSksdn0pfWxldCBCUj0oKCk9PntjbGFzcyBje2dldCBoYXNSZXF1ZXN0ZWROYXZp''@;'; put 'put ''Z2F0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5hdmlnYXRpb25JZH1jb25zdHJ1Y3Rvcigpe3RoaXMuY3VycmVudE5hdmlnYXRpb249bnVsbCx0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPW51bGwsdGhpcy5sYXN0U3VjY2Vzc2Z1bE5hdmlnYXRpb249bnVsbCx0aGlzLmV2ZW50cz1uZXcgV24sdGhp''@;'; put 'put ''cy50cmFuc2l0aW9uQWJvcnRTdWJqZWN0PW5ldyBXbix0aGlzLmNvbmZpZ0xvYWRlcj1oaShvVyksdGhpcy5lbnZpcm9ubWVudEluamVjdG9yPWhpKGNjKSx0aGlzLnVybFNlcmlhbGl6ZXI9aGkoUWIpLHRoaXMucm9vdENvbnRleHRzPWhpKCRNKSx0aGlzLmxvY2F0aW9uPWhpKHVoKSx0aGlz''@;'; put 'put ''LmlucHV0QmluZGluZ0VuYWJsZWQ9bnVsbCE9PWhpKEZSLHtvcHRpb25hbDohMH0pLHRoaXMudGl0bGVTdHJhdGVneT1oaShabGUpLHRoaXMub3B0aW9ucz1oaShzeSx7b3B0aW9uYWw6ITB9KXx8e30sdGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5PXRoaXMub3B0aW9ucy5wYXJhbXNJ''@;'; put 'put ''bmhlcml0YW5jZVN0cmF0ZWd5fHwiZW1wdHlPbmx5Iix0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3k9aGkoYVcpLHRoaXMuY3JlYXRlVmlld1RyYW5zaXRpb249aGkoWWxlLHtvcHRpb25hbDohMH0pLHRoaXMubmF2aWdhdGlvbklkPTAsdGhpcy5hZnRlclByZWFjdGl2YXRpb249KCk9PmZhKHZv''@;'; put 'put ''aWQgMCksdGhpcy5yb290Q29tcG9uZW50VHlwZT1udWxsLHRoaXMuY29uZmlnTG9hZGVyLm9uTG9hZEVuZExpc3RlbmVyPWg9PnRoaXMuZXZlbnRzLm5leHQobmV3IHh4ZShoKSksdGhpcy5jb25maWdMb2FkZXIub25Mb2FkU3RhcnRMaXN0ZW5lcj1oPT50aGlzLmV2ZW50cy5uZXh0KG5ldyBN''@;'; put 'put ''eGUoaCkpfWNvbXBsZXRlKCl7dGhpcy50cmFuc2l0aW9ucz8uY29tcGxldGUoKX1oYW5kbGVOYXZpZ2F0aW9uUmVxdWVzdChhKXtjb25zdCBkPSsrdGhpcy5uYXZpZ2F0aW9uSWQ7dGhpcy50cmFuc2l0aW9ucz8ubmV4dCh7Li4udGhpcy50cmFuc2l0aW9ucy52YWx1ZSwuLi5hLGlkOmR9KX1z''@;'; put 'put ''ZXR1cE5hdmlnYXRpb25zKGEsZCxoKXtyZXR1cm4gdGhpcy50cmFuc2l0aW9ucz1uZXcgUXIoe2lkOjAsY3VycmVudFVybFRyZWU6ZCxjdXJyZW50UmF3VXJsOmQsZXh0cmFjdGVkVXJsOnRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5leHRyYWN0KGQpLHVybEFmdGVyUmVkaXJlY3RzOnRoaXMu''@;'; put 'put ''dXJsSGFuZGxpbmdTdHJhdGVneS5leHRyYWN0KGQpLHJhd1VybDpkLGV4dHJhczp7fSxyZXNvbHZlOm51bGwscmVqZWN0Om51bGwscHJvbWlzZTpQcm9taXNlLnJlc29sdmUoITApLHNvdXJjZTpHTSxyZXN0b3JlZFN0YXRlOm51bGwsY3VycmVudFNuYXBzaG90Omguc25hcHNob3QsdGFyZ2V0''@;'; put 'put ''U25hcHNob3Q6bnVsbCxjdXJyZW50Um91dGVyU3RhdGU6aCx0YXJnZXRSb3V0ZXJTdGF0ZTpudWxsLGd1YXJkczp7Y2FuQWN0aXZhdGVDaGVja3M6W10sY2FuRGVhY3RpdmF0ZUNoZWNrczpbXX0sZ3VhcmRzUmVzdWx0Om51bGx9KSx0aGlzLnRyYW5zaXRpb25zLnBpcGUoV2woZj0+MCE9PWYu''@;'; put 'put ''aWQpLE9yKGY9Pih7Li4uZixleHRyYWN0ZWRVcmw6dGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5LmV4dHJhY3QoZi5yYXdVcmwpfSkpLFYxKGY9PntsZXQgdj0hMSxNPSExO3JldHVybiBmYShmKS5waXBlKFYxKEQ9PntpZih0aGlzLm5hdmlnYXRpb25JZD5mLmlkKXJldHVybiB0aGlzLmNhbmNl''@;'; put 'put ''bE5hdmlnYXRpb25UcmFuc2l0aW9uKGYsIiIsZGguU3VwZXJzZWRlZEJ5TmV3TmF2aWdhdGlvbikseTI7dGhpcy5jdXJyZW50VHJhbnNpdGlvbj1mLHRoaXMuY3VycmVudE5hdmlnYXRpb249e2lkOkQuaWQsaW5pdGlhbFVybDpELnJhd1VybCxleHRyYWN0ZWRVcmw6RC5leHRyYWN0ZWRVcmws''@;'; put 'put ''dHJpZ2dlcjpELnNvdXJjZSxleHRyYXM6RC5leHRyYXMscHJldmlvdXNOYXZpZ2F0aW9uOnRoaXMubGFzdFN1Y2Nlc3NmdWxOYXZpZ2F0aW9uP3suLi50aGlzLmxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbixwcmV2aW91c05hdmlnYXRpb246bnVsbH06bnVsbH07Y29uc3QgWj0hYS5uYXZpZ2F0''@;'; put 'put ''ZWR8fHRoaXMuaXNVcGRhdGluZ0ludGVybmFsU3RhdGUoKXx8dGhpcy5pc1VwZGF0ZWRCcm93c2VyVXJsKCk7aWYoIVomJiJyZWxvYWQiIT09KEQuZXh0cmFzLm9uU2FtZVVybE5hdmlnYXRpb24/P2Eub25TYW1lVXJsTmF2aWdhdGlvbikpe2NvbnN0IGNlPSIiO3JldHVybiB0aGlzLmV2ZW50''@;'; put 'put ''cy5uZXh0KG5ldyBueShELmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoRC5yYXdVcmwpLGNlLE9SLklnbm9yZWRTYW1lVXJsTmF2aWdhdGlvbikpLEQucmVzb2x2ZShudWxsKSx5Mn1pZih0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kuc2hvdWxkUHJvY2Vzc1VybChELnJhd1VybCkp''@;'; put 'put ''cmV0dXJuIGZhKEQpLnBpcGUoVjEoY2U9Pntjb25zdCBiZT10aGlzLnRyYW5zaXRpb25zPy5nZXRWYWx1ZSgpO3JldHVybiB0aGlzLmV2ZW50cy5uZXh0KG5ldyBMUihjZS5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGNlLmV4dHJhY3RlZFVybCksY2Uuc291cmNlLGNlLnJlc3Rv''@;'; put 'put ''cmVkU3RhdGUpKSxiZSE9PXRoaXMudHJhbnNpdGlvbnM/LmdldFZhbHVlKCk/eTI6UHJvbWlzZS5yZXNvbHZlKGNlKX0pLGZ1bmN0aW9uIEFFZShjLGwsYSxkLGgsZil7cmV0dXJuIE4wKHY9PmZ1bmN0aW9uIHdFZShjLGwsYSxkLGgsZix2PSJlbXB0eU9ubHkiKXtyZXR1cm4gbmV3IFNFZShj''@;'; put 'put ''LGwsYSxkLGgsdixmKS5yZWNvZ25pemUoKX0oYyxsLGEsZCx2LmV4dHJhY3RlZFVybCxoLGYpLnBpcGUoT3IoKHtzdGF0ZTpNLHRyZWU6RH0pPT4oey4uLnYsdGFyZ2V0U25hcHNob3Q6TSx1cmxBZnRlclJlZGlyZWN0czpEfSkpKSl9KHRoaXMuZW52aXJvbm1lbnRJbmplY3Rvcix0aGlzLmNv''@;'; put 'put ''bmZpZ0xvYWRlcix0aGlzLnJvb3RDb21wb25lbnRUeXBlLGEuY29uZmlnLHRoaXMudXJsU2VyaWFsaXplcix0aGlzLnBhcmFtc0luaGVyaXRhbmNlU3RyYXRlZ3kpLFl1KGNlPT57Zi50YXJnZXRTbmFwc2hvdD1jZS50YXJnZXRTbmFwc2hvdCxmLnVybEFmdGVyUmVkaXJlY3RzPWNlLnVybEFm''@;'; put 'put ''dGVyUmVkaXJlY3RzLHRoaXMuY3VycmVudE5hdmlnYXRpb249ey4uLnRoaXMuY3VycmVudE5hdmlnYXRpb24sZmluYWxVcmw6Y2UudXJsQWZ0ZXJSZWRpcmVjdHN9O2NvbnN0IGJlPW5ldyBNbGUoY2UuaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShjZS5leHRyYWN0ZWRVcmwpLHRo''@;'; put 'put ''aXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoY2UudXJsQWZ0ZXJSZWRpcmVjdHMpLGNlLnRhcmdldFNuYXBzaG90KTt0aGlzLmV2ZW50cy5uZXh0KGJlKX0pKTtpZihaJiZ0aGlzLnVybEhhbmRsaW5nU3RyYXRlZ3kuc2hvdWxkUHJvY2Vzc1VybChELmN1cnJlbnRSYXdVcmwpKXtjb25zdHtp''@;'; put 'put ''ZDpjZSxleHRyYWN0ZWRVcmw6YmUsc291cmNlOkVlLHJlc3RvcmVkU3RhdGU6QmUsZXh0cmFzOnFlfT1ELG50PW5ldyBMUihjZSx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGJlKSxFZSxCZSk7dGhpcy5ldmVudHMubmV4dChudCk7Y29uc3QgbHQ9QWxlKHRoaXMucm9vdENvbXBvbmVu''@;'; put 'put ''dFR5cGUpLnNuYXBzaG90O3JldHVybiB0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPWY9ey4uLkQsdGFyZ2V0U25hcHNob3Q6bHQsdXJsQWZ0ZXJSZWRpcmVjdHM6YmUsZXh0cmFzOnsuLi5xZSxza2lwTG9jYXRpb25DaGFuZ2U6ITEscmVwbGFjZVVybDohMX19LHRoaXMuY3VycmVudE5hdmlnYXRp''@;'; put 'put ''b24uZmluYWxVcmw9YmUsZmEoZil9e2NvbnN0IGNlPSIiO3JldHVybiB0aGlzLmV2ZW50cy5uZXh0KG5ldyBueShELmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoRC5leHRyYWN0ZWRVcmwpLGNlLE9SLklnbm9yZWRCeVVybEhhbmRsaW5nU3RyYXRlZ3kpKSxELnJlc29sdmUobnVs''@;'; put 'put ''bCkseTJ9fSksWXUoRD0+e2NvbnN0IFo9bmV3IF94ZShELmlkLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoRC5leHRyYWN0ZWRVcmwpLHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoRC51cmxBZnRlclJlZGlyZWN0cyksRC50YXJnZXRTbmFwc2hvdCk7dGhpcy5ldmVudHMubmV4''@;'; put 'put ''dChaKX0pLE9yKEQ9Pih0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPWY9ey4uLkQsZ3VhcmRzOlV4ZShELnRhcmdldFNuYXBzaG90LEQuY3VycmVudFNuYXBzaG90LHRoaXMucm9vdENvbnRleHRzKX0sZikpLGZ1bmN0aW9uIFF4ZShjLGwpe3JldHVybiBOMChhPT57Y29uc3R7dGFyZ2V0U25hcHNo''@;'; put 'put ''b3Q6ZCxjdXJyZW50U25hcHNob3Q6aCxndWFyZHM6e2NhbkFjdGl2YXRlQ2hlY2tzOmYsY2FuRGVhY3RpdmF0ZUNoZWNrczp2fX09YTtyZXR1cm4gMD09PXYubGVuZ3RoJiYwPT09Zi5sZW5ndGg/ZmEoey4uLmEsZ3VhcmRzUmVzdWx0OiEwfSk6ZnVuY3Rpb24gZUVlKGMsbCxhLGQpe3JldHVy''@;'; put 'put ''biBXdShjKS5waXBlKE4wKGg9PmZ1bmN0aW9uIGFFZShjLGwsYSxkLGgpe2NvbnN0IGY9bCYmbC5yb3V0ZUNvbmZpZz9sLnJvdXRlQ29uZmlnLmNhbkRlYWN0aXZhdGU6bnVsbDtyZXR1cm4gZiYmMCE9PWYubGVuZ3RoP2ZhKGYubWFwKE09Pntjb25zdCBEPXFNKGwpPz9oLFo9aXkoTSxEKTty''@;'; put 'put ''ZXR1cm4gcm0oZnVuY3Rpb24gWHhlKGMpe3JldHVybiBjJiZRTShjLmNhbkRlYWN0aXZhdGUpfShaKT9aLmNhbkRlYWN0aXZhdGUoYyxsLGEsZCk6WDAoRCwoKT0+WihjLGwsYSxkKSkpLnBpcGUobm0oKSl9KSkucGlwZShveSgpKTpmYSghMCl9KGguY29tcG9uZW50LGgucm91dGUsYSxsLGQp''@;'; put 'put ''KSxubShoPT4hMCE9PWgsITApKX0odixkLGgsYykucGlwZShOMChNPT5NJiZmdW5jdGlvbiBHeGUoYyl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgY30oTSk/ZnVuY3Rpb24gdEVlKGMsbCxhLGQpe3JldHVybiBXdShsKS5waXBlKEtiKGg9PkxaKGZ1bmN0aW9uIHJFZShjLGwpe3JldHVybiBu''@;'; put 'put ''dWxsIT09YyYmbCYmbChuZXcgRXhlKGMpKSxmYSghMCl9KGgucm91dGUucGFyZW50LGQpLGZ1bmN0aW9uIG5FZShjLGwpe3JldHVybiBudWxsIT09YyYmbCYmbChuZXcgQXhlKGMpKSxmYSghMCl9KGgucm91dGUsZCksZnVuY3Rpb24gb0VlKGMsbCxhKXtjb25zdCBkPWxbbC5sZW5ndGgtMV0s''@;'; put 'put ''Zj1sLnNsaWNlKDAsbC5sZW5ndGgtMSkucmV2ZXJzZSgpLm1hcCh2PT5mdW5jdGlvbiBaeGUoYyl7Y29uc3QgbD1jLnJvdXRlQ29uZmlnP2Mucm91dGVDb25maWcuY2FuQWN0aXZhdGVDaGlsZDpudWxsO3JldHVybiBsJiYwIT09bC5sZW5ndGg/e25vZGU6YyxndWFyZHM6bH06bnVsbH0odikp''@;'; put 'put ''LmZpbHRlcih2PT5udWxsIT09dikubWFwKHY9PnJsZSgoKT0+ZmEodi5ndWFyZHMubWFwKEQ9Pntjb25zdCBaPXFNKHYubm9kZSk/P2EsbmU9aXkoRCxaKTtyZXR1cm4gcm0oZnVuY3Rpb24gcXhlKGMpe3JldHVybiBjJiZRTShjLmNhbkFjdGl2YXRlQ2hpbGQpfShuZSk/bmUuY2FuQWN0aXZh''@;'; put 'put ''dGVDaGlsZChkLGMpOlgwKFosKCk9Pm5lKGQsYykpKS5waXBlKG5tKCkpfSkpLnBpcGUob3koKSkpKTtyZXR1cm4gZmEoZikucGlwZShveSgpKX0oYyxoLnBhdGgsYSksZnVuY3Rpb24gaUVlKGMsbCxhKXtjb25zdCBkPWwucm91dGVDb25maWc/bC5yb3V0ZUNvbmZpZy5jYW5BY3RpdmF0ZTpu''@;'; put 'put ''dWxsO2lmKCFkfHwwPT09ZC5sZW5ndGgpcmV0dXJuIGZhKCEwKTtjb25zdCBoPWQubWFwKGY9PnJsZSgoKT0+e2NvbnN0IHY9cU0obCk/P2EsTT1peShmLHYpO3JldHVybiBybShmdW5jdGlvbiBLeGUoYyl7cmV0dXJuIGMmJlFNKGMuY2FuQWN0aXZhdGUpfShNKT9NLmNhbkFjdGl2YXRlKGws''@;'; put 'put ''Yyk6WDAodiwoKT0+TShsLGMpKSkucGlwZShubSgpKX0pKTtyZXR1cm4gZmEoaCkucGlwZShveSgpKX0oYyxoLnJvdXRlLGEpKSksbm0oaD0+ITAhPT1oLCEwKSl9KGQsZixjLGwpOmZhKE0pKSxPcihNPT4oey4uLmEsZ3VhcmRzUmVzdWx0Ok19KSkpfSl9KHRoaXMuZW52aXJvbm1lbnRJbmpl''@;'; put 'put ''Y3RvcixEPT50aGlzLmV2ZW50cy5uZXh0KEQpKSxZdShEPT57aWYoZi5ndWFyZHNSZXN1bHQ9RC5ndWFyZHNSZXN1bHQsZXkoRC5ndWFyZHNSZXN1bHQpKXRocm93IE9sZSgwLEQuZ3VhcmRzUmVzdWx0KTtjb25zdCBaPW5ldyB3eGUoRC5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXpl''@;'; put 'put ''KEQuZXh0cmFjdGVkVXJsKSx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKEQudXJsQWZ0ZXJSZWRpcmVjdHMpLEQudGFyZ2V0U25hcHNob3QsISFELmd1YXJkc1Jlc3VsdCk7dGhpcy5ldmVudHMubmV4dChaKX0pLFdsKEQ9PiEhRC5ndWFyZHNSZXN1bHR8fCh0aGlzLmNhbmNlbE5hdmln''@;'; put 'put ''YXRpb25UcmFuc2l0aW9uKEQsIiIsZGguR3VhcmRSZWplY3RlZCksITEpKSxpVyhEPT57aWYoRC5ndWFyZHMuY2FuQWN0aXZhdGVDaGVja3MubGVuZ3RoKXJldHVybiBmYShEKS5waXBlKFl1KFo9Pntjb25zdCBuZT1uZXcgQ3hlKFouaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZSha''@;'; put 'put ''LmV4dHJhY3RlZFVybCksdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShaLnVybEFmdGVyUmVkaXJlY3RzKSxaLnRhcmdldFNuYXBzaG90KTt0aGlzLmV2ZW50cy5uZXh0KG5lKX0pLFYxKFo9PntsZXQgbmU9ITE7cmV0dXJuIGZhKFopLnBpcGUoZnVuY3Rpb24ga0VlKGMsbCl7cmV0dXJu''@;'; put 'put ''IE4wKGE9Pntjb25zdHt0YXJnZXRTbmFwc2hvdDpkLGd1YXJkczp7Y2FuQWN0aXZhdGVDaGVja3M6aH19PWE7aWYoIWgubGVuZ3RoKXJldHVybiBmYShhKTtjb25zdCBmPW5ldyBTZXQoaC5tYXAoRD0+RC5yb3V0ZSkpLHY9bmV3IFNldDtmb3IoY29uc3QgRCBvZiBmKWlmKCF2LmhhcyhEKSlm''@;'; put 'put ''b3IoY29uc3QgWiBvZiBVbGUoRCkpdi5hZGQoWik7bGV0IE09MDtyZXR1cm4gV3UodikucGlwZShLYihEPT5mLmhhcyhEKT9mdW5jdGlvbiBERWUoYyxsLGEsZCl7Y29uc3QgaD1jLnJvdXRlQ29uZmlnLGY9Yy5fcmVzb2x2ZTtyZXR1cm4gdm9pZCAwIT09aD8udGl0bGUmJiFJbGUoaCkmJihm''@;'; put 'put ''W3pNXT1oLnRpdGxlKSxmdW5jdGlvbiBJRWUoYyxsLGEsZCl7Y29uc3QgaD1IWihjKTtpZigwPT09aC5sZW5ndGgpcmV0dXJuIGZhKHt9KTtjb25zdCBmPXt9O3JldHVybiBXdShoKS5waXBlKE4wKHY9PmZ1bmN0aW9uIFJFZShjLGwsYSxkKXtjb25zdCBoPXFNKGwpPz9kLGY9aXkoYyxoKTty''@;'; put 'put ''ZXR1cm4gcm0oZi5yZXNvbHZlP2YucmVzb2x2ZShsLGEpOlgwKGgsKCk9PmYobCxhKSkpfShjW3ZdLGwsYSxkKS5waXBlKG5tKCksWXUoTT0+e2Zbdl09TX0pKSksRlooMSksZnVuY3Rpb24gV01lKGMpe3JldHVybiBPcigoKT0+Yyl9KGYpLHFiKHY9PlZsZSh2KT95Mjp4Uih2KSkpfShmLGMs''@;'; put 'put ''bCxkKS5waXBlKE9yKHY9PihjLl9yZXNvbHZlZERhdGE9dixjLmRhdGE9R1ooYyxjLnBhcmVudCxhKS5yZXNvbHZlLG51bGwpKSl9KEQsZCxjLGwpOihELmRhdGE9R1ooRCxELnBhcmVudCxjKS5yZXNvbHZlLGZhKHZvaWQgMCkpKSxZdSgoKT0+TSsrKSxGWigxKSxOMChEPT5NPT09di5zaXpl''@;'; put 'put ''P2ZhKGEpOnkyKSl9KX0odGhpcy5wYXJhbXNJbmhlcml0YW5jZVN0cmF0ZWd5LHRoaXMuZW52aXJvbm1lbnRJbmplY3RvciksWXUoe25leHQ6KCk9Pm5lPSEwLGNvbXBsZXRlOigpPT57bmV8fHRoaXMuY2FuY2VsTmF2aWdhdGlvblRyYW5zaXRpb24oWiwiIixkaC5Ob0RhdGFGcm9tUmVzb2x2''@;'; put 'put ''ZXIpfX0pKX0pLFl1KFo9Pntjb25zdCBuZT1uZXcgU3hlKFouaWQsdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShaLmV4dHJhY3RlZFVybCksdGhpcy51cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShaLnVybEFmdGVyUmVkaXJlY3RzKSxaLnRhcmdldFNuYXBzaG90KTt0aGlzLmV2ZW50cy5u''@;'; put 'put ''ZXh0KG5lKX0pKX0pLGlXKEQ9Pntjb25zdCBaPW5lPT57Y29uc3QgY2U9W107bmUucm91dGVDb25maWc/LmxvYWRDb21wb25lbnQmJiFuZS5yb3V0ZUNvbmZpZy5fbG9hZGVkQ29tcG9uZW50JiZjZS5wdXNoKHRoaXMuY29uZmlnTG9hZGVyLmxvYWRDb21wb25lbnQobmUucm91dGVDb25maWcp''@;'; put 'put ''LnBpcGUoWXUoYmU9PntuZS5jb21wb25lbnQ9YmV9KSxPcigoKT0+e30pKSk7Zm9yKGNvbnN0IGJlIG9mIG5lLmNoaWxkcmVuKWNlLnB1c2goLi4uWihiZSkpO3JldHVybiBjZX07cmV0dXJuICQ4KFooRC50YXJnZXRTbmFwc2hvdC5yb290KSkucGlwZShFUihudWxsKSxCZigxKSl9KSxpVygo''@;'; put 'put ''KT0+dGhpcy5hZnRlclByZWFjdGl2YXRpb24oKSksVjEoKCk9Pntjb25zdHtjdXJyZW50U25hcHNob3Q6RCx0YXJnZXRTbmFwc2hvdDpafT1mLG5lPXRoaXMuY3JlYXRlVmlld1RyYW5zaXRpb24/Lih0aGlzLmVudmlyb25tZW50SW5qZWN0b3IsRC5yb290LFoucm9vdCk7cmV0dXJuIG5lP1d1''@;'; put 'put ''KG5lKS5waXBlKE9yKCgpPT5mKSk6ZmEoZil9KSxPcihEPT57Y29uc3QgWj1mdW5jdGlvbiBSeGUoYyxsLGEpe2NvbnN0IGQ9S00oYyxsLl9yb290LGE/YS5fcm9vdDp2b2lkIDApO3JldHVybiBuZXcgVGxlKGQsbCl9KGEucm91dGVSZXVzZVN0cmF0ZWd5LEQudGFyZ2V0U25hcHNob3QsRC5j''@;'; put 'put ''dXJyZW50Um91dGVyU3RhdGUpO3JldHVybiB0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPWY9ey4uLkQsdGFyZ2V0Um91dGVyU3RhdGU6Wn0sdGhpcy5jdXJyZW50TmF2aWdhdGlvbi50YXJnZXRSb3V0ZXJTdGF0ZT1aLGZ9KSxZdSgoKT0+e3RoaXMuZXZlbnRzLm5leHQobmV3IFVaKX0pLCgoYyxs''@;'; put 'put ''LGEsZCk9Pk9yKGg9PihuZXcgenhlKGwsaC50YXJnZXRSb3V0ZXJTdGF0ZSxoLmN1cnJlbnRSb3V0ZXJTdGF0ZSxhLGQpLmFjdGl2YXRlKGMpLGgpKSkodGhpcy5yb290Q29udGV4dHMsYS5yb3V0ZVJldXNlU3RyYXRlZ3ksRD0+dGhpcy5ldmVudHMubmV4dChEKSx0aGlzLmlucHV0QmluZGlu''@;'; put 'put ''Z0VuYWJsZWQpLEJmKDEpLFl1KHtuZXh0OkQ9Pnt2PSEwLHRoaXMubGFzdFN1Y2Nlc3NmdWxOYXZpZ2F0aW9uPXRoaXMuY3VycmVudE5hdmlnYXRpb24sdGhpcy5ldmVudHMubmV4dChuZXcgY3AoRC5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKEQuZXh0cmFjdGVkVXJsKSx0aGlz''@;'; put 'put ''LnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKEQudXJsQWZ0ZXJSZWRpcmVjdHMpKSksdGhpcy50aXRsZVN0cmF0ZWd5Py51cGRhdGVUaXRsZShELnRhcmdldFJvdXRlclN0YXRlLnNuYXBzaG90KSxELnJlc29sdmUoITApfSxjb21wbGV0ZTooKT0+e3Y9ITB9fSksVjAodGhpcy50cmFuc2l0aW9u''@;'; put 'put ''QWJvcnRTdWJqZWN0LnBpcGUoWXUoRD0+e3Rocm93IER9KSkpLGpNKCgpPT57IXYmJiFNJiZ0aGlzLmNhbmNlbE5hdmlnYXRpb25UcmFuc2l0aW9uKGYsIiIsZGguU3VwZXJzZWRlZEJ5TmV3TmF2aWdhdGlvbiksdGhpcy5jdXJyZW50VHJhbnNpdGlvbj8uaWQ9PT1mLmlkJiYodGhpcy5jdXJy''@;'; put 'put ''ZW50TmF2aWdhdGlvbj1udWxsLHRoaXMuY3VycmVudFRyYW5zaXRpb249bnVsbCl9KSxxYihEPT57aWYoTT0hMCxGbGUoRCkpdGhpcy5ldmVudHMubmV4dChuZXcgdHkoZi5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGYuZXh0cmFjdGVkVXJsKSxELm1lc3NhZ2UsRC5jYW5jZWxs''@;'; put 'put ''YXRpb25Db2RlKSksZnVuY3Rpb24gUHhlKGMpe3JldHVybiBGbGUoYykmJmV5KGMudXJsKX0oRCk/dGhpcy5ldmVudHMubmV4dChuZXcgWlooRC51cmwpKTpmLnJlc29sdmUoITEpO2Vsc2V7dGhpcy5ldmVudHMubmV4dChuZXcgUFIoZi5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXpl''@;'; put 'put ''KGYuZXh0cmFjdGVkVXJsKSxELGYudGFyZ2V0U25hcHNob3Q/P3ZvaWQgMCkpO3RyeXtmLnJlc29sdmUoYS5lcnJvckhhbmRsZXIoRCkpfWNhdGNoKFope3RoaXMub3B0aW9ucy5yZXNvbHZlTmF2aWdhdGlvblByb21pc2VPbkVycm9yP2YucmVzb2x2ZSghMSk6Zi5yZWplY3QoWil9fXJldHVy''@;'; put 'put ''biB5Mn0pKX0pKX1jYW5jZWxOYXZpZ2F0aW9uVHJhbnNpdGlvbihhLGQsaCl7Y29uc3QgZj1uZXcgdHkoYS5pZCx0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKGEuZXh0cmFjdGVkVXJsKSxkLGgpO3RoaXMuZXZlbnRzLm5leHQoZiksYS5yZXNvbHZlKCExKX1pc1VwZGF0aW5nSW50ZXJu''@;'; put 'put ''YWxTdGF0ZSgpe3JldHVybiB0aGlzLmN1cnJlbnRUcmFuc2l0aW9uPy5leHRyYWN0ZWRVcmwudG9TdHJpbmcoKSE9PXRoaXMuY3VycmVudFRyYW5zaXRpb24/LmN1cnJlbnRVcmxUcmVlLnRvU3RyaW5nKCl9aXNVcGRhdGVkQnJvd3NlclVybCgpe3JldHVybiB0aGlzLnVybEhhbmRsaW5nU3Ry''@;'; put 'put ''YXRlZ3kuZXh0cmFjdCh0aGlzLnVybFNlcmlhbGl6ZXIucGFyc2UodGhpcy5sb2NhdGlvbi5wYXRoKCEwKSkpLnRvU3RyaW5nKCkhPT10aGlzLmN1cnJlbnRUcmFuc2l0aW9uPy5leHRyYWN0ZWRVcmwudG9TdHJpbmcoKSYmIXRoaXMuY3VycmVudFRyYW5zaXRpb24/LmV4dHJhcy5za2lwTG9j''@;'; put 'put ''YXRpb25DaGFuZ2V9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gVkVl''@;'; put 'put ''KGMpe3JldHVybiBjIT09R019bGV0IEJFZT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6KCk9PmhpKHpFZSkscHJvdmlkZWRJbjoicm9vdCJ9''@;'; put 'put ''KX19cmV0dXJuIGN9KSgpO2NsYXNzIGpFZXtzaG91bGREZXRhY2gobCl7cmV0dXJuITF9c3RvcmUobCxhKXt9c2hvdWxkQXR0YWNoKGwpe3JldHVybiExfXJldHJpZXZlKGwpe3JldHVybiBudWxsfXNob3VsZFJldXNlUm91dGUobCxhKXtyZXR1cm4gbC5yb3V0ZUNvbmZpZz09PWEucm91dGVD''@;'; put 'put ''b25maWd9fWxldCB6RWU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGpFZXtzdGF0aWN7dGhpcy5cdTAyNzVmYWM9KCgpPT57bGV0IGE7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybihhfHwoYT1acyhjKSkpKGh8fGMpfX0pKCl9c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0''@;'; put 'put ''b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKSwkbGU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5Oigp''@;'; put 'put ''PT5oaShVRWUpLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKSxVRWU9KCgpPT57Y2xhc3MgYyBleHRlbmRzICRsZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5sb2NhdGlvbj1oaSh1aCksdGhpcy51cmxTZXJpYWxpemVyPWhpKFFiKSx0aGlzLm9wdGlv''@;'; put 'put ''bnM9aGkoc3kse29wdGlvbmFsOiEwfSl8fHt9LHRoaXMuY2FuY2VsZWROYXZpZ2F0aW9uUmVzb2x1dGlvbj10aGlzLm9wdGlvbnMuY2FuY2VsZWROYXZpZ2F0aW9uUmVzb2x1dGlvbnx8InJlcGxhY2UiLHRoaXMudXJsSGFuZGxpbmdTdHJhdGVneT1oaShhVyksdGhpcy51cmxVcGRhdGVTdHJh''@;'; put 'put ''dGVneT10aGlzLm9wdGlvbnMudXJsVXBkYXRlU3RyYXRlZ3l8fCJkZWZlcnJlZCIsdGhpcy5jdXJyZW50VXJsVHJlZT1uZXcgSmIsdGhpcy5yYXdVcmxUcmVlPXRoaXMuY3VycmVudFVybFRyZWUsdGhpcy5jdXJyZW50UGFnZUlkPTAsdGhpcy5sYXN0U3VjY2Vzc2Z1bElkPS0xLHRoaXMucm91''@;'; put 'put ''dGVyU3RhdGU9QWxlKG51bGwpLHRoaXMuc3RhdGVNZW1lbnRvPXRoaXMuY3JlYXRlU3RhdGVNZW1lbnRvKCl9Z2V0Q3VycmVudFVybFRyZWUoKXtyZXR1cm4gdGhpcy5jdXJyZW50VXJsVHJlZX1nZXRSYXdVcmxUcmVlKCl7cmV0dXJuIHRoaXMucmF3VXJsVHJlZX1yZXN0b3JlZFN0YXRlKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMubG9jYXRpb24uZ2V0U3RhdGUoKX1nZXQgYnJvd3NlclBhZ2VJZCgpe3JldHVybiJjb21wdXRlZCIhPT10aGlzLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb24/dGhpcy5jdXJyZW50UGFnZUlkOnRoaXMucmVzdG9yZWRTdGF0ZSgpPy5cdTAyNzVyb3V0ZXJQYWdlSWQ/''@;'; put 'put ''P3RoaXMuY3VycmVudFBhZ2VJZH1nZXRSb3V0ZXJTdGF0ZSgpe3JldHVybiB0aGlzLnJvdXRlclN0YXRlfWNyZWF0ZVN0YXRlTWVtZW50bygpe3JldHVybntyYXdVcmxUcmVlOnRoaXMucmF3VXJsVHJlZSxjdXJyZW50VXJsVHJlZTp0aGlzLmN1cnJlbnRVcmxUcmVlLHJvdXRlclN0YXRlOnRo''@;'; put 'put ''aXMucm91dGVyU3RhdGV9fXJlZ2lzdGVyTm9uUm91dGVyQ3VycmVudEVudHJ5Q2hhbmdlTGlzdGVuZXIoYSl7cmV0dXJuIHRoaXMubG9jYXRpb24uc3Vic2NyaWJlKGQ9PnsicG9wc3RhdGUiPT09ZC50eXBlJiZhKGQudXJsLGQuc3RhdGUpfSl9aGFuZGxlUm91dGVyRXZlbnQoYSxkKXtpZihh''@;'; put 'put ''IGluc3RhbmNlb2YgTFIpdGhpcy5zdGF0ZU1lbWVudG89dGhpcy5jcmVhdGVTdGF0ZU1lbWVudG8oKTtlbHNlIGlmKGEgaW5zdGFuY2VvZiBueSl0aGlzLnJhd1VybFRyZWU9ZC5pbml0aWFsVXJsO2Vsc2UgaWYoYSBpbnN0YW5jZW9mIE1sZSl7aWYoImVhZ2VyIj09PXRoaXMudXJsVXBkYXRl''@;'; put 'put ''U3RyYXRlZ3kmJiFkLmV4dHJhcy5za2lwTG9jYXRpb25DaGFuZ2Upe2NvbnN0IGg9dGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5Lm1lcmdlKGQuZmluYWxVcmwsZC5pbml0aWFsVXJsKTt0aGlzLnNldEJyb3dzZXJVcmwoaCxkKX19ZWxzZSBhIGluc3RhbmNlb2YgVVo/KHRoaXMuY3VycmVudFVy''@;'; put 'put ''bFRyZWU9ZC5maW5hbFVybCx0aGlzLnJhd1VybFRyZWU9dGhpcy51cmxIYW5kbGluZ1N0cmF0ZWd5Lm1lcmdlKGQuZmluYWxVcmwsZC5pbml0aWFsVXJsKSx0aGlzLnJvdXRlclN0YXRlPWQudGFyZ2V0Um91dGVyU3RhdGUsImRlZmVycmVkIj09PXRoaXMudXJsVXBkYXRlU3RyYXRlZ3kmJihk''@;'; put 'put ''LmV4dHJhcy5za2lwTG9jYXRpb25DaGFuZ2V8fHRoaXMuc2V0QnJvd3NlclVybCh0aGlzLnJhd1VybFRyZWUsZCkpKTphIGluc3RhbmNlb2YgdHkmJihhLmNvZGU9PT1kaC5HdWFyZFJlamVjdGVkfHxhLmNvZGU9PT1kaC5Ob0RhdGFGcm9tUmVzb2x2ZXIpP3RoaXMucmVzdG9yZUhpc3Rvcnko''@;'; put 'put ''ZCk6YSBpbnN0YW5jZW9mIFBSP3RoaXMucmVzdG9yZUhpc3RvcnkoZCwhMCk6YSBpbnN0YW5jZW9mIGNwJiYodGhpcy5sYXN0U3VjY2Vzc2Z1bElkPWEuaWQsdGhpcy5jdXJyZW50UGFnZUlkPXRoaXMuYnJvd3NlclBhZ2VJZCl9c2V0QnJvd3NlclVybChhLGQpe2NvbnN0IGg9dGhpcy51cmxT''@;'; put 'put ''ZXJpYWxpemVyLnNlcmlhbGl6ZShhKTtpZih0aGlzLmxvY2F0aW9uLmlzQ3VycmVudFBhdGhFcXVhbFRvKGgpfHxkLmV4dHJhcy5yZXBsYWNlVXJsKXtjb25zdCB2PXsuLi5kLmV4dHJhcy5zdGF0ZSwuLi50aGlzLmdlbmVyYXRlTmdSb3V0ZXJTdGF0ZShkLmlkLHRoaXMuYnJvd3NlclBhZ2VJ''@;'; put 'put ''ZCl9O3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKGgsIiIsdil9ZWxzZXtjb25zdCBmPXsuLi5kLmV4dHJhcy5zdGF0ZSwuLi50aGlzLmdlbmVyYXRlTmdSb3V0ZXJTdGF0ZShkLmlkLHRoaXMuYnJvd3NlclBhZ2VJZCsxKX07dGhpcy5sb2NhdGlvbi5nbyhoLCIiLGYpfX1yZXN0b3JlSGlz''@;'; put 'put ''dG9yeShhLGQ9ITEpe2lmKCJjb21wdXRlZCI9PT10aGlzLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb24pe2NvbnN0IGY9dGhpcy5jdXJyZW50UGFnZUlkLXRoaXMuYnJvd3NlclBhZ2VJZDswIT09Zj90aGlzLmxvY2F0aW9uLmhpc3RvcnlHbyhmKTp0aGlzLmN1cnJlbnRVcmxUcmVlPT09''@;'; put 'put ''YS5maW5hbFVybCYmMD09PWYmJih0aGlzLnJlc2V0U3RhdGUoYSksdGhpcy5yZXNldFVybFRvQ3VycmVudFVybFRyZWUoKSl9ZWxzZSJyZXBsYWNlIj09PXRoaXMuY2FuY2VsZWROYXZpZ2F0aW9uUmVzb2x1dGlvbiYmKGQmJnRoaXMucmVzZXRTdGF0ZShhKSx0aGlzLnJlc2V0VXJsVG9DdXJy''@;'; put 'put ''ZW50VXJsVHJlZSgpKX1yZXNldFN0YXRlKGEpe3RoaXMucm91dGVyU3RhdGU9dGhpcy5zdGF0ZU1lbWVudG8ucm91dGVyU3RhdGUsdGhpcy5jdXJyZW50VXJsVHJlZT10aGlzLnN0YXRlTWVtZW50by5jdXJyZW50VXJsVHJlZSx0aGlzLnJhd1VybFRyZWU9dGhpcy51cmxIYW5kbGluZ1N0cmF0''@;'; put 'put ''ZWd5Lm1lcmdlKHRoaXMuY3VycmVudFVybFRyZWUsYS5maW5hbFVybD8/dGhpcy5yYXdVcmxUcmVlKX1yZXNldFVybFRvQ3VycmVudFVybFRyZWUoKXt0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0aGlzLnVybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHRoaXMucmF3VXJsVHJlZSksIiIsdGhp''@;'; put 'put ''cy5nZW5lcmF0ZU5nUm91dGVyU3RhdGUodGhpcy5sYXN0U3VjY2Vzc2Z1bElkLHRoaXMuY3VycmVudFBhZ2VJZCkpfWdlbmVyYXRlTmdSb3V0ZXJTdGF0ZShhLGQpe3JldHVybiJjb21wdXRlZCI9PT10aGlzLmNhbmNlbGVkTmF2aWdhdGlvblJlc29sdXRpb24/e25hdmlnYXRpb25JZDphLFx1''@;'; put 'put ''MDI3NXJvdXRlclBhZ2VJZDpkfTp7bmF2aWdhdGlvbklkOmF9fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz0oKCk9PntsZXQgYTtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuKGF8fChhPVpzKGMpKSkoaHx8Yyl9fSkoKX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6''@;'; put 'put ''Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO3ZhciBleD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkNPTVBMRVRFPTBdPSJDT01QTEVURSIsY1tjLkZBSUxFRD0xXT0iRkFJTEVEIixjW2MuUkVESVJFQ1RJTkc9Ml09IlJFRElSRUNUSU5HIixjfShleHx8e30p''@;'; put 'put ''O2Z1bmN0aW9uIEtsZShjLGwpe2MuZXZlbnRzLnBpcGUoV2woYT0+YSBpbnN0YW5jZW9mIGNwfHxhIGluc3RhbmNlb2YgdHl8fGEgaW5zdGFuY2VvZiBQUnx8YSBpbnN0YW5jZW9mIG55KSxPcihhPT5hIGluc3RhbmNlb2YgY3B8fGEgaW5zdGFuY2VvZiBueT9leC5DT01QTEVURTphIGluc3Rh''@;'; put 'put ''bmNlb2YgdHkmJihhLmNvZGU9PT1kaC5SZWRpcmVjdHx8YS5jb2RlPT09ZGguU3VwZXJzZWRlZEJ5TmV3TmF2aWdhdGlvbik/ZXguUkVESVJFQ1RJTkc6ZXguRkFJTEVEKSxXbChhPT5hIT09ZXguUkVESVJFQ1RJTkcpLEJmKDEpKS5zdWJzY3JpYmUoKCk9PntsKCl9KX1mdW5jdGlvbiBaRWUo''@;'; put 'put ''Yyl7dGhyb3cgY31jb25zdCBXRWU9e3BhdGhzOiJleGFjdCIsZnJhZ21lbnQ6Imlnbm9yZWQiLG1hdHJpeFBhcmFtczoiaWdub3JlZCIscXVlcnlQYXJhbXM6ImV4YWN0In0sWUVlPXtwYXRoczoic3Vic2V0IixmcmFnbWVudDoiaWdub3JlZCIsbWF0cml4UGFyYW1zOiJpZ25vcmVkIixxdWVy''@;'; put 'put ''eVBhcmFtczoic3Vic2V0In07bGV0IExzPSgoKT0+e2NsYXNzIGN7Z2V0IGN1cnJlbnRVcmxUcmVlKCl7cmV0dXJuIHRoaXMuc3RhdGVNYW5hZ2VyLmdldEN1cnJlbnRVcmxUcmVlKCl9Z2V0IHJhd1VybFRyZWUoKXtyZXR1cm4gdGhpcy5zdGF0ZU1hbmFnZXIuZ2V0UmF3VXJsVHJlZSgpfWdl''@;'; put 'put ''dCBldmVudHMoKXtyZXR1cm4gdGhpcy5fZXZlbnRzfWdldCByb3V0ZXJTdGF0ZSgpe3JldHVybiB0aGlzLnN0YXRlTWFuYWdlci5nZXRSb3V0ZXJTdGF0ZSgpfWNvbnN0cnVjdG9yKCl7dGhpcy5kaXNwb3NlZD0hMSx0aGlzLmlzTmdab25lRW5hYmxlZD0hMSx0aGlzLmNvbnNvbGU9aGkoQWll''@;'; put 'put ''KSx0aGlzLnN0YXRlTWFuYWdlcj1oaSgkbGUpLHRoaXMub3B0aW9ucz1oaShzeSx7b3B0aW9uYWw6ITB9KXx8e30sdGhpcy5wZW5kaW5nVGFza3M9aGkoa2YpLHRoaXMudXJsVXBkYXRlU3RyYXRlZ3k9dGhpcy5vcHRpb25zLnVybFVwZGF0ZVN0cmF0ZWd5fHwiZGVmZXJyZWQiLHRoaXMubmF2''@;'; put 'put ''aWdhdGlvblRyYW5zaXRpb25zPWhpKEJSKSx0aGlzLnVybFNlcmlhbGl6ZXI9aGkoUWIpLHRoaXMubG9jYXRpb249aGkodWgpLHRoaXMudXJsSGFuZGxpbmdTdHJhdGVneT1oaShhVyksdGhpcy5fZXZlbnRzPW5ldyBXbix0aGlzLmVycm9ySGFuZGxlcj10aGlzLm9wdGlvbnMuZXJyb3JIYW5k''@;'; put 'put ''bGVyfHxaRWUsdGhpcy5uYXZpZ2F0ZWQ9ITEsdGhpcy5yb3V0ZVJldXNlU3RyYXRlZ3k9aGkoQkVlKSx0aGlzLm9uU2FtZVVybE5hdmlnYXRpb249dGhpcy5vcHRpb25zLm9uU2FtZVVybE5hdmlnYXRpb258fCJpZ25vcmUiLHRoaXMuY29uZmlnPWhpKGx5LHtvcHRpb25hbDohMH0pPy5mbGF0''@;'; put 'put ''KCk/P1tdLHRoaXMuY29tcG9uZW50SW5wdXRCaW5kaW5nRW5hYmxlZD0hIWhpKEZSLHtvcHRpb25hbDohMH0pLHRoaXMuZXZlbnRzU3Vic2NyaXB0aW9uPW5ldyBxdCx0aGlzLmlzTmdab25lRW5hYmxlZD1oaShZbylpbnN0YW5jZW9mIFlvJiZZby5pc0luQW5ndWxhclpvbmUoKSx0aGlzLnJl''@;'; put 'put ''c2V0Q29uZmlnKHRoaXMuY29uZmlnKSx0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5zZXR1cE5hdmlnYXRpb25zKHRoaXMsdGhpcy5jdXJyZW50VXJsVHJlZSx0aGlzLnJvdXRlclN0YXRlKS5zdWJzY3JpYmUoe2Vycm9yOmE9Pnt0aGlzLmNvbnNvbGUud2FybihhKX19KSx0aGlzLnN1YnNj''@;'; put 'put ''cmliZVRvTmF2aWdhdGlvbkV2ZW50cygpfXN1YnNjcmliZVRvTmF2aWdhdGlvbkV2ZW50cygpe2NvbnN0IGE9dGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMuZXZlbnRzLnN1YnNjcmliZShkPT57dHJ5e2NvbnN0IGg9dGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMuY3VycmVudFRyYW5zaXRp''@;'; put 'put ''b24sZj10aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5jdXJyZW50TmF2aWdhdGlvbjtpZihudWxsIT09aCYmbnVsbCE9PWYpaWYodGhpcy5zdGF0ZU1hbmFnZXIuaGFuZGxlUm91dGVyRXZlbnQoZCxmKSxkIGluc3RhbmNlb2YgdHkmJmQuY29kZSE9PWRoLlJlZGlyZWN0JiZkLmNvZGUhPT1k''@;'; put 'put ''aC5TdXBlcnNlZGVkQnlOZXdOYXZpZ2F0aW9uKXRoaXMubmF2aWdhdGVkPSEwO2Vsc2UgaWYoZCBpbnN0YW5jZW9mIGNwKXRoaXMubmF2aWdhdGVkPSEwO2Vsc2UgaWYoZCBpbnN0YW5jZW9mIFpaKXtjb25zdCB2PXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZShkLnVybCxoLmN1cnJl''@;'; put 'put ''bnRSYXdVcmwpLE09e2luZm86aC5leHRyYXMuaW5mbyxza2lwTG9jYXRpb25DaGFuZ2U6aC5leHRyYXMuc2tpcExvY2F0aW9uQ2hhbmdlLHJlcGxhY2VVcmw6ImVhZ2VyIj09PXRoaXMudXJsVXBkYXRlU3RyYXRlZ3l8fFZFZShoLnNvdXJjZSl9O3RoaXMuc2NoZWR1bGVOYXZpZ2F0aW9uKHYs''@;'; put 'put ''R00sbnVsbCxNLHtyZXNvbHZlOmgucmVzb2x2ZSxyZWplY3Q6aC5yZWplY3QscHJvbWlzZTpoLnByb21pc2V9KX0oZnVuY3Rpb24gJEVlKGMpe3JldHVybiEoYyBpbnN0YW5jZW9mIFVafHxjIGluc3RhbmNlb2YgWlopfSkoZCkmJnRoaXMuX2V2ZW50cy5uZXh0KGQpfWNhdGNoKGgpe3RoaXMu''@;'; put 'put ''bmF2aWdhdGlvblRyYW5zaXRpb25zLnRyYW5zaXRpb25BYm9ydFN1YmplY3QubmV4dChoKX19KTt0aGlzLmV2ZW50c1N1YnNjcmlwdGlvbi5hZGQoYSl9cmVzZXRSb290Q29tcG9uZW50VHlwZShhKXt0aGlzLnJvdXRlclN0YXRlLnJvb3QuY29tcG9uZW50PWEsdGhpcy5uYXZpZ2F0aW9uVHJh''@;'; put 'put ''bnNpdGlvbnMucm9vdENvbXBvbmVudFR5cGU9YX1pbml0aWFsTmF2aWdhdGlvbigpe3RoaXMuc2V0VXBMb2NhdGlvbkNoYW5nZUxpc3RlbmVyKCksdGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMuaGFzUmVxdWVzdGVkTmF2aWdhdGlvbnx8dGhpcy5uYXZpZ2F0ZVRvU3luY1dpdGhCcm93c2Vy''@;'; put 'put ''KHRoaXMubG9jYXRpb24ucGF0aCghMCksR00sdGhpcy5zdGF0ZU1hbmFnZXIucmVzdG9yZWRTdGF0ZSgpKX1zZXRVcExvY2F0aW9uQ2hhbmdlTGlzdGVuZXIoKXt0aGlzLm5vblJvdXRlckN1cnJlbnRFbnRyeUNoYW5nZVN1YnNjcmlwdGlvbj8/PXRoaXMuc3RhdGVNYW5hZ2VyLnJlZ2lzdGVy''@;'; put 'put ''Tm9uUm91dGVyQ3VycmVudEVudHJ5Q2hhbmdlTGlzdGVuZXIoKGEsZCk9PntzZXRUaW1lb3V0KCgpPT57dGhpcy5uYXZpZ2F0ZVRvU3luY1dpdGhCcm93c2VyKGEsInBvcHN0YXRlIixkKX0sMCl9KX1uYXZpZ2F0ZVRvU3luY1dpdGhCcm93c2VyKGEsZCxoKXtjb25zdCBmPXtyZXBsYWNlVXJs''@;'; put 'put ''OiEwfSx2PWg/Lm5hdmlnYXRpb25JZD9oOm51bGw7aWYoaCl7Y29uc3QgRD17Li4uaH07ZGVsZXRlIEQubmF2aWdhdGlvbklkLGRlbGV0ZSBELlx1MDI3NXJvdXRlclBhZ2VJZCwwIT09T2JqZWN0LmtleXMoRCkubGVuZ3RoJiYoZi5zdGF0ZT1EKX1jb25zdCBNPXRoaXMucGFyc2VVcmwoYSk7''@;'; put 'put ''dGhpcy5zY2hlZHVsZU5hdmlnYXRpb24oTSxkLHYsZil9Z2V0IHVybCgpe3JldHVybiB0aGlzLnNlcmlhbGl6ZVVybCh0aGlzLmN1cnJlbnRVcmxUcmVlKX1nZXRDdXJyZW50TmF2aWdhdGlvbigpe3JldHVybiB0aGlzLm5hdmlnYXRpb25UcmFuc2l0aW9ucy5jdXJyZW50TmF2aWdhdGlvbn1n''@;'; put 'put ''ZXQgbGFzdFN1Y2Nlc3NmdWxOYXZpZ2F0aW9uKCl7cmV0dXJuIHRoaXMubmF2aWdhdGlvblRyYW5zaXRpb25zLmxhc3RTdWNjZXNzZnVsTmF2aWdhdGlvbn1yZXNldENvbmZpZyhhKXt0aGlzLmNvbmZpZz1hLm1hcChRWiksdGhpcy5uYXZpZ2F0ZWQ9ITF9bmdPbkRlc3Ryb3koKXt0aGlzLmRp''@;'; put 'put ''c3Bvc2UoKX1kaXNwb3NlKCl7dGhpcy5uYXZpZ2F0aW9uVHJhbnNpdGlvbnMuY29tcGxldGUoKSx0aGlzLm5vblJvdXRlckN1cnJlbnRFbnRyeUNoYW5nZVN1YnNjcmlwdGlvbiYmKHRoaXMubm9uUm91dGVyQ3VycmVudEVudHJ5Q2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhp''@;'; put 'put ''cy5ub25Sb3V0ZXJDdXJyZW50RW50cnlDaGFuZ2VTdWJzY3JpcHRpb249dm9pZCAwKSx0aGlzLmRpc3Bvc2VkPSEwLHRoaXMuZXZlbnRzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9Y3JlYXRlVXJsVHJlZShhLGQ9e30pe2NvbnN0e3JlbGF0aXZlVG86aCxxdWVyeVBhcmFtczpmLGZyYWdt''@;'; put 'put ''ZW50OnYscXVlcnlQYXJhbXNIYW5kbGluZzpNLHByZXNlcnZlRnJhZ21lbnQ6RH09ZCxaPUQ/dGhpcy5jdXJyZW50VXJsVHJlZS5mcmFnbWVudDp2O2xldCBjZSxuZT1udWxsO3N3aXRjaChNKXtjYXNlIm1lcmdlIjpuZT17Li4udGhpcy5jdXJyZW50VXJsVHJlZS5xdWVyeVBhcmFtcywuLi5m''@;'; put 'put ''fTticmVhaztjYXNlInByZXNlcnZlIjpuZT10aGlzLmN1cnJlbnRVcmxUcmVlLnF1ZXJ5UGFyYW1zO2JyZWFrO2RlZmF1bHQ6bmU9Znx8bnVsbH1udWxsIT09bmUmJihuZT10aGlzLnJlbW92ZUVtcHR5UHJvcHMobmUpKTt0cnl7Y2U9dmxlKGg/aC5zbmFwc2hvdDp0aGlzLnJvdXRlclN0YXRl''@;'; put 'put ''LnNuYXBzaG90LnJvb3QpfWNhdGNoeygic3RyaW5nIiE9dHlwZW9mIGFbMF18fCFhWzBdLnN0YXJ0c1dpdGgoIi8iKSkmJihhPVtdKSxjZT10aGlzLmN1cnJlbnRVcmxUcmVlLnJvb3R9cmV0dXJuIGJsZShjZSxhLG5lLFo/P251bGwpfW5hdmlnYXRlQnlVcmwoYSxkPXtza2lwTG9jYXRpb25D''@;'; put 'put ''aGFuZ2U6ITF9KXtjb25zdCBoPWV5KGEpP2E6dGhpcy5wYXJzZVVybChhKSxmPXRoaXMudXJsSGFuZGxpbmdTdHJhdGVneS5tZXJnZShoLHRoaXMucmF3VXJsVHJlZSk7cmV0dXJuIHRoaXMuc2NoZWR1bGVOYXZpZ2F0aW9uKGYsR00sbnVsbCxkKX1uYXZpZ2F0ZShhLGQ9e3NraXBMb2NhdGlv''@;'; put 'put ''bkNoYW5nZTohMX0pe3JldHVybiBmdW5jdGlvbiBHRWUoYyl7Zm9yKGxldCBsPTA7bDxjLmxlbmd0aDtsKyspaWYobnVsbD09Y1tsXSl0aHJvdyBuZXcgZXIoNDAwOCwhMSl9KGEpLHRoaXMubmF2aWdhdGVCeVVybCh0aGlzLmNyZWF0ZVVybFRyZWUoYSxkKSxkKX1zZXJpYWxpemVVcmwoYSl7''@;'; put 'put ''cmV0dXJuIHRoaXMudXJsU2VyaWFsaXplci5zZXJpYWxpemUoYSl9cGFyc2VVcmwoYSl7dHJ5e3JldHVybiB0aGlzLnVybFNlcmlhbGl6ZXIucGFyc2UoYSl9Y2F0Y2h7cmV0dXJuIHRoaXMudXJsU2VyaWFsaXplci5wYXJzZSgiLyIpfX1pc0FjdGl2ZShhLGQpe2xldCBoO2lmKGg9ITA9PT1k''@;'; put 'put ''P3suLi5XRWV9OiExPT09ZD97Li4uWUVlfTpkLGV5KGEpKXJldHVybiBsbGUodGhpcy5jdXJyZW50VXJsVHJlZSxhLGgpO2NvbnN0IGY9dGhpcy5wYXJzZVVybChhKTtyZXR1cm4gbGxlKHRoaXMuY3VycmVudFVybFRyZWUsZixoKX1yZW1vdmVFbXB0eVByb3BzKGEpe3JldHVybiBPYmplY3Qu''@;'; put 'put ''ZW50cmllcyhhKS5yZWR1Y2UoKGQsW2gsZl0pPT4obnVsbCE9ZiYmKGRbaF09ZiksZCkse30pfXNjaGVkdWxlTmF2aWdhdGlvbihhLGQsaCxmLHYpe2lmKHRoaXMuZGlzcG9zZWQpcmV0dXJuIFByb21pc2UucmVzb2x2ZSghMSk7bGV0IE0sRCxaO3Y/KE09di5yZXNvbHZlLEQ9di5yZWplY3Qs''@;'; put 'put ''Wj12LnByb21pc2UpOlo9bmV3IFByb21pc2UoKGNlLGJlKT0+e009Y2UsRD1iZX0pO2NvbnN0IG5lPXRoaXMucGVuZGluZ1Rhc2tzLmFkZCgpO3JldHVybiBLbGUodGhpcywoKT0+e3F1ZXVlTWljcm90YXNrKCgpPT50aGlzLnBlbmRpbmdUYXNrcy5yZW1vdmUobmUpKX0pLHRoaXMubmF2aWdh''@;'; put 'put ''dGlvblRyYW5zaXRpb25zLmhhbmRsZU5hdmlnYXRpb25SZXF1ZXN0KHtzb3VyY2U6ZCxyZXN0b3JlZFN0YXRlOmgsY3VycmVudFVybFRyZWU6dGhpcy5jdXJyZW50VXJsVHJlZSxjdXJyZW50UmF3VXJsOnRoaXMuY3VycmVudFVybFRyZWUscmF3VXJsOmEsZXh0cmFzOmYscmVzb2x2ZTpNLHJl''@;'; put 'put ''amVjdDpELHByb21pc2U6WixjdXJyZW50U25hcHNob3Q6dGhpcy5yb3V0ZXJTdGF0ZS5zbmFwc2hvdCxjdXJyZW50Um91dGVyU3RhdGU6dGhpcy5yb3V0ZXJTdGF0ZX0pLFouY2F0Y2goY2U9PlByb21pc2UucmVqZWN0KGNlKSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3Jl''@;'; put 'put ''dHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksdTE9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7dGhpcy5yb3V0ZXI9YSx0aGlz''@;'; put 'put ''LnJvdXRlPWQsdGhpcy50YWJJbmRleEF0dHJpYnV0ZT1oLHRoaXMucmVuZGVyZXI9Zix0aGlzLmVsPXYsdGhpcy5sb2NhdGlvblN0cmF0ZWd5PU0sdGhpcy5ocmVmPW51bGwsdGhpcy5jb21tYW5kcz1udWxsLHRoaXMub25DaGFuZ2VzPW5ldyBXbix0aGlzLnByZXNlcnZlRnJhZ21lbnQ9ITEs''@;'; put 'put ''dGhpcy5za2lwTG9jYXRpb25DaGFuZ2U9ITEsdGhpcy5yZXBsYWNlVXJsPSExO2NvbnN0IEQ9di5uYXRpdmVFbGVtZW50LnRhZ05hbWU/LnRvTG93ZXJDYXNlKCk7dGhpcy5pc0FuY2hvckVsZW1lbnQ9ImEiPT09RHx8ImFyZWEiPT09RCx0aGlzLmlzQW5jaG9yRWxlbWVudD90aGlzLnN1YnNj''@;'; put 'put ''cmlwdGlvbj1hLmV2ZW50cy5zdWJzY3JpYmUoWj0+e1ogaW5zdGFuY2VvZiBjcCYmdGhpcy51cGRhdGVIcmVmKCl9KTp0aGlzLnNldFRhYkluZGV4SWZOb3RPbk5hdGl2ZUVsKCIwIil9c2V0VGFiSW5kZXhJZk5vdE9uTmF0aXZlRWwoYSl7bnVsbCE9dGhpcy50YWJJbmRleEF0dHJpYnV0ZXx8''@;'; put 'put ''dGhpcy5pc0FuY2hvckVsZW1lbnR8fHRoaXMuYXBwbHlBdHRyaWJ1dGVWYWx1ZSgidGFiaW5kZXgiLGEpfW5nT25DaGFuZ2VzKGEpe3RoaXMuaXNBbmNob3JFbGVtZW50JiZ0aGlzLnVwZGF0ZUhyZWYoKSx0aGlzLm9uQ2hhbmdlcy5uZXh0KHRoaXMpfXNldCByb3V0ZXJMaW5rKGEpe251bGwh''@;'; put 'put ''PWE/KHRoaXMuY29tbWFuZHM9QXJyYXkuaXNBcnJheShhKT9hOlthXSx0aGlzLnNldFRhYkluZGV4SWZOb3RPbk5hdGl2ZUVsKCIwIikpOih0aGlzLmNvbW1hbmRzPW51bGwsdGhpcy5zZXRUYWJJbmRleElmTm90T25OYXRpdmVFbChudWxsKSl9b25DbGljayhhLGQsaCxmLHYpe2NvbnN0IE09''@;'; put 'put ''dGhpcy51cmxUcmVlO3JldHVybiEhKG51bGw9PT1NfHx0aGlzLmlzQW5jaG9yRWxlbWVudCYmKDAhPT1hfHxkfHxofHxmfHx2fHwic3RyaW5nIj09dHlwZW9mIHRoaXMudGFyZ2V0JiYiX3NlbGYiIT10aGlzLnRhcmdldCkpfHwodGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChNLHtza2lwTG9j''@;'; put 'put ''YXRpb25DaGFuZ2U6dGhpcy5za2lwTG9jYXRpb25DaGFuZ2UscmVwbGFjZVVybDp0aGlzLnJlcGxhY2VVcmwsc3RhdGU6dGhpcy5zdGF0ZSxpbmZvOnRoaXMuaW5mb30pLCF0aGlzLmlzQW5jaG9yRWxlbWVudCl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUo''@;'; put 'put ''KX11cGRhdGVIcmVmKCl7Y29uc3QgYT10aGlzLnVybFRyZWU7dGhpcy5ocmVmPW51bGwhPT1hJiZ0aGlzLmxvY2F0aW9uU3RyYXRlZ3k/dGhpcy5sb2NhdGlvblN0cmF0ZWd5Py5wcmVwYXJlRXh0ZXJuYWxVcmwodGhpcy5yb3V0ZXIuc2VyaWFsaXplVXJsKGEpKTpudWxsO2NvbnN0IGQ9bnVs''@;'; put 'put ''bD09PXRoaXMuaHJlZj9udWxsOmZ1bmN0aW9uIFhrKGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24gSUIoYyxsKXtyZXR1cm4ic3JjIj09PWwmJigiZW1iZWQiPT09Y3x8ImZyYW1lIj09PWN8fCJpZnJhbWUiPT09Y3x8Im1lZGlhIj09PWN8fCJzY3JpcHQiPT09Yyl8fCJocmVmIj09PWwmJigiYmFz''@;'; put 'put ''ZSI9PT1jfHwibGluayI9PT1jKT9xazpVQ30obCxhKShjKX0odGhpcy5ocmVmLHRoaXMuZWwubmF0aXZlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCksImhyZWYiKTt0aGlzLmFwcGx5QXR0cmlidXRlVmFsdWUoImhyZWYiLGQpfWFwcGx5QXR0cmlidXRlVmFsdWUoYSxkKXtjb25zdCBo''@;'; put 'put ''PXRoaXMucmVuZGVyZXIsZj10aGlzLmVsLm5hdGl2ZUVsZW1lbnQ7bnVsbCE9PWQ/aC5zZXRBdHRyaWJ1dGUoZixhLGQpOmgucmVtb3ZlQXR0cmlidXRlKGYsYSl9Z2V0IHVybFRyZWUoKXtyZXR1cm4gbnVsbD09PXRoaXMuY29tbWFuZHM/bnVsbDp0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVl''@;'; put 'put ''KHRoaXMuY29tbWFuZHMse3JlbGF0aXZlVG86dm9pZCAwIT09dGhpcy5yZWxhdGl2ZVRvP3RoaXMucmVsYXRpdmVUbzp0aGlzLnJvdXRlLHF1ZXJ5UGFyYW1zOnRoaXMucXVlcnlQYXJhbXMsZnJhZ21lbnQ6dGhpcy5mcmFnbWVudCxxdWVyeVBhcmFtc0hhbmRsaW5nOnRoaXMucXVlcnlQYXJh''@;'; put 'put ''bXNIYW5kbGluZyxwcmVzZXJ2ZUZyYWdtZW50OnRoaXMucHJlc2VydmVGcmFnbWVudH0pfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKExzKSxHZShDdSkseGYoInRhYmluZGV4IiksR2UoRWEpLEdlKGVvKSxHZSh6OCkpfX1zdGF0aWN7dGhp''@;'; put 'put ''cy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwicm91dGVyTGluayIsIiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmRnQoImNsaWNrIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkNsaWNrKHYuYnV0dG9uLHYuY3RybEtleSx2LnNoaWZ0''@;'; put 'put ''S2V5LHYuYWx0S2V5LHYubWV0YUtleSl9KSwyJmQmJmRyKCJ0YXJnZXQiLGgudGFyZ2V0KX0saW5wdXRzOnt0YXJnZXQ6InRhcmdldCIscXVlcnlQYXJhbXM6InF1ZXJ5UGFyYW1zIixmcmFnbWVudDoiZnJhZ21lbnQiLHF1ZXJ5UGFyYW1zSGFuZGxpbmc6InF1ZXJ5UGFyYW1zSGFuZGxpbmci''@;'; put 'put ''LHN0YXRlOiJzdGF0ZSIsaW5mbzoiaW5mbyIscmVsYXRpdmVUbzoicmVsYXRpdmVUbyIscHJlc2VydmVGcmFnbWVudDpbWm4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sInByZXNlcnZlRnJhZ21lbnQiLCJwcmVzZXJ2ZUZyYWdtZW50IixsMV0sc2tpcExvY2F0aW9uQ2hhbmdlOltabi5I''@;'; put 'put ''YXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSwic2tpcExvY2F0aW9uQ2hhbmdlIiwic2tpcExvY2F0aW9uQ2hhbmdlIixsMV0scmVwbGFjZVVybDpbWm4uSGFzRGVjb3JhdG9ySW5wdXRUcmFuc2Zvcm0sInJlcGxhY2VVcmwiLCJyZXBsYWNlVXJsIixsMV0scm91dGVyTGluazoicm91dGVyTGlu''@;'; put 'put ''ayJ9LHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W3psLHlsXX0pfX1yZXR1cm4gY30pKCksY3k9KCgpPT57Y2xhc3MgY3tnZXQgaXNBY3RpdmUoKXtyZXR1cm4gdGhpcy5faXNBY3RpdmV9Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLnJvdXRlcj1hLHRoaXMuZWxlbWVudD1kLHRoaXMucmVu''@;'; put 'put ''ZGVyZXI9aCx0aGlzLmNkcj1mLHRoaXMubGluaz12LHRoaXMuY2xhc3Nlcz1bXSx0aGlzLl9pc0FjdGl2ZT0hMSx0aGlzLnJvdXRlckxpbmtBY3RpdmVPcHRpb25zPXtleGFjdDohMX0sdGhpcy5pc0FjdGl2ZUNoYW5nZT1uZXcgcXIsdGhpcy5yb3V0ZXJFdmVudHNTdWJzY3JpcHRpb249YS5l''@;'; put 'put ''dmVudHMuc3Vic2NyaWJlKE09PntNIGluc3RhbmNlb2YgY3AmJnRoaXMudXBkYXRlKCl9KX1uZ0FmdGVyQ29udGVudEluaXQoKXtmYSh0aGlzLmxpbmtzLmNoYW5nZXMsZmEobnVsbCkpLnBpcGUoJGIoKSkuc3Vic2NyaWJlKGE9Pnt0aGlzLnVwZGF0ZSgpLHRoaXMuc3Vic2NyaWJlVG9FYWNo''@;'; put 'put ''TGlua09uQ2hhbmdlcygpfSl9c3Vic2NyaWJlVG9FYWNoTGlua09uQ2hhbmdlcygpe3RoaXMubGlua0lucHV0Q2hhbmdlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtjb25zdCBhPVsuLi50aGlzLmxpbmtzLnRvQXJyYXkoKSx0aGlzLmxpbmtdLmZpbHRlcihkPT4hIWQpLm1hcChkPT5k''@;'; put 'put ''Lm9uQ2hhbmdlcyk7dGhpcy5saW5rSW5wdXRDaGFuZ2VzU3Vic2NyaXB0aW9uPVd1KGEpLnBpcGUoJGIoKSkuc3Vic2NyaWJlKGQ9Pnt0aGlzLl9pc0FjdGl2ZSE9PXRoaXMuaXNMaW5rQWN0aXZlKHRoaXMucm91dGVyKShkKSYmdGhpcy51cGRhdGUoKX0pfXNldCByb3V0ZXJMaW5rQWN0aXZl''@;'; put 'put ''KGEpe2NvbnN0IGQ9QXJyYXkuaXNBcnJheShhKT9hOmEuc3BsaXQoIiAiKTt0aGlzLmNsYXNzZXM9ZC5maWx0ZXIoaD0+ISFoKX1uZ09uQ2hhbmdlcyhhKXt0aGlzLnVwZGF0ZSgpfW5nT25EZXN0cm95KCl7dGhpcy5yb3V0ZXJFdmVudHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlz''@;'; put 'put ''LmxpbmtJbnB1dENoYW5nZXNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCl9dXBkYXRlKCl7IXRoaXMubGlua3N8fCF0aGlzLnJvdXRlci5uYXZpZ2F0ZWR8fHF1ZXVlTWljcm90YXNrKCgpPT57Y29uc3QgYT10aGlzLmhhc0FjdGl2ZUxpbmtzKCk7dGhpcy5jbGFzc2VzLmZvckVhY2goZD0+''@;'; put 'put ''e2E/dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCxkKTp0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LGQpfSksYSYmdm9pZCAwIT09dGhpcy5hcmlhQ3VycmVudFdoZW5BY3RpdmU/dGhpcy5yZW5kZXJl''@;'; put 'put ''ci5zZXRBdHRyaWJ1dGUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsImFyaWEtY3VycmVudCIsdGhpcy5hcmlhQ3VycmVudFdoZW5BY3RpdmUudG9TdHJpbmcoKSk6dGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsImFyaWEtY3VycmVu''@;'; put 'put ''dCIpLHRoaXMuX2lzQWN0aXZlIT09YSYmKHRoaXMuX2lzQWN0aXZlPWEsdGhpcy5jZHIubWFya0ZvckNoZWNrKCksdGhpcy5pc0FjdGl2ZUNoYW5nZS5lbWl0KGEpKX0pfWlzTGlua0FjdGl2ZShhKXtjb25zdCBkPWZ1bmN0aW9uIEtFZShjKXtyZXR1cm4hIWMucGF0aHN9KHRoaXMucm91dGVy''@;'; put 'put ''TGlua0FjdGl2ZU9wdGlvbnMpP3RoaXMucm91dGVyTGlua0FjdGl2ZU9wdGlvbnM6dGhpcy5yb3V0ZXJMaW5rQWN0aXZlT3B0aW9ucy5leGFjdHx8ITE7cmV0dXJuIGg9Pntjb25zdCBmPWgudXJsVHJlZTtyZXR1cm4hIWYmJmEuaXNBY3RpdmUoZixkKX19aGFzQWN0aXZlTGlua3MoKXtjb25z''@;'; put 'put ''dCBhPXRoaXMuaXNMaW5rQWN0aXZlKHRoaXMucm91dGVyKTtyZXR1cm4gdGhpcy5saW5rJiZhKHRoaXMubGluayl8fHRoaXMubGlua3Muc29tZShhKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShMcyksR2UoZW8pLEdlKEVhKSxHZSh4cyks''@;'; put 'put ''R2UodTEsOCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwicm91dGVyTGlua0FjdGl2ZSIsIiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihkLGgsZil7aWYoMSZkJiZsYShmLHUxLDUpLDImZCl7bGV0IHY7eGkodj1FaSgpKSYmKGgubGlua3M9''@;'; put 'put ''dil9fSxpbnB1dHM6e3JvdXRlckxpbmtBY3RpdmVPcHRpb25zOiJyb3V0ZXJMaW5rQWN0aXZlT3B0aW9ucyIsYXJpYUN1cnJlbnRXaGVuQWN0aXZlOiJhcmlhQ3VycmVudFdoZW5BY3RpdmUiLHJvdXRlckxpbmtBY3RpdmU6InJvdXRlckxpbmtBY3RpdmUifSxvdXRwdXRzOntpc0FjdGl2ZUNo''@;'; put 'put ''YW5nZToiaXNBY3RpdmVDaGFuZ2UifSxleHBvcnRBczpbInJvdXRlckxpbmtBY3RpdmUiXSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOlt5bF19KX19cmV0dXJuIGN9KSgpO2NsYXNzIHFsZXt9bGV0IHFFZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5yb3V0ZXI9''@;'; put 'put ''YSx0aGlzLmluamVjdG9yPWgsdGhpcy5wcmVsb2FkaW5nU3RyYXRlZ3k9Zix0aGlzLmxvYWRlcj12fXNldFVwUHJlbG9hZGluZygpe3RoaXMuc3Vic2NyaXB0aW9uPXRoaXMucm91dGVyLmV2ZW50cy5waXBlKFdsKGE9PmEgaW5zdGFuY2VvZiBjcCksS2IoKCk9PnRoaXMucHJlbG9hZCgpKSku''@;'; put 'put ''c3Vic2NyaWJlKCgpPT57fSl9cHJlbG9hZCgpe3JldHVybiB0aGlzLnByb2Nlc3NSb3V0ZXModGhpcy5pbmplY3Rvcix0aGlzLnJvdXRlci5jb25maWcpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24mJnRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9cHJvY2Vzc1JvdXRl''@;'; put 'put ''cyhhLGQpe2NvbnN0IGg9W107Zm9yKGNvbnN0IGYgb2YgZCl7Zi5wcm92aWRlcnMmJiFmLl9pbmplY3RvciYmKGYuX2luamVjdG9yPVo0KGYucHJvdmlkZXJzLGEsYFJvdXRlOiAke2YucGF0aH1gKSk7Y29uc3Qgdj1mLl9pbmplY3Rvcj8/YSxNPWYuX2xvYWRlZEluamVjdG9yPz92OyhmLmxv''@;'; put 'put ''YWRDaGlsZHJlbiYmIWYuX2xvYWRlZFJvdXRlcyYmdm9pZCAwPT09Zi5jYW5Mb2FkfHxmLmxvYWRDb21wb25lbnQmJiFmLl9sb2FkZWRDb21wb25lbnQpJiZoLnB1c2godGhpcy5wcmVsb2FkQ29uZmlnKHYsZikpLChmLmNoaWxkcmVufHxmLl9sb2FkZWRSb3V0ZXMpJiZoLnB1c2godGhpcy5w''@;'; put 'put ''cm9jZXNzUm91dGVzKE0sZi5jaGlsZHJlbj8/Zi5fbG9hZGVkUm91dGVzKSl9cmV0dXJuIFd1KGgpLnBpcGUoJGIoKSl9cHJlbG9hZENvbmZpZyhhLGQpe3JldHVybiB0aGlzLnByZWxvYWRpbmdTdHJhdGVneS5wcmVsb2FkKGQsKCk9PntsZXQgaDtoPWQubG9hZENoaWxkcmVuJiZ2b2lkIDA9''@;'; put 'put ''PT1kLmNhbkxvYWQ/dGhpcy5sb2FkZXIubG9hZENoaWxkcmVuKGEsZCk6ZmEobnVsbCk7Y29uc3QgZj1oLnBpcGUoTjAodj0+bnVsbD09PXY/ZmEodm9pZCAwKTooZC5fbG9hZGVkUm91dGVzPXYucm91dGVzLGQuX2xvYWRlZEluamVjdG9yPXYuaW5qZWN0b3IsdGhpcy5wcm9jZXNzUm91dGVz''@;'; put 'put ''KHYuaW5qZWN0b3I/P2Esdi5yb3V0ZXMpKSkpO3JldHVybiBkLmxvYWRDb21wb25lbnQmJiFkLl9sb2FkZWRDb21wb25lbnQ/V3UoW2YsdGhpcy5sb2FkZXIubG9hZENvbXBvbmVudChkKV0pLnBpcGUoJGIoKSk6Zn0pfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4g''@;'; put 'put ''bmV3KGR8fGMpKE1yKExzKSxNcihOaWUpLE1yKGNjKSxNcihxbGUpLE1yKG9XKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7Y29uc3Qgc1c9bmV3IFN0KCIiKTtsZXQgWGxl''@;'; put 'put ''PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2PXt9KXt0aGlzLnVybFNlcmlhbGl6ZXI9YSx0aGlzLnRyYW5zaXRpb25zPWQsdGhpcy52aWV3cG9ydFNjcm9sbGVyPWgsdGhpcy56b25lPWYsdGhpcy5vcHRpb25zPXYsdGhpcy5sYXN0SWQ9MCx0aGlzLmxhc3RTb3VyY2U9Imlt''@;'; put 'put ''cGVyYXRpdmUiLHRoaXMucmVzdG9yZWRJZD0wLHRoaXMuc3RvcmU9e30sdGhpcy5lbnZpcm9ubWVudEluamVjdG9yPWhpKGNjKSx2LnNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb258fD0iZGlzYWJsZWQiLHYuYW5jaG9yU2Nyb2xsaW5nfHw9ImRpc2FibGVkIn1pbml0KCl7ImRpc2FibGVkIiE9''@;'; put 'put ''PXRoaXMub3B0aW9ucy5zY3JvbGxQb3NpdGlvblJlc3RvcmF0aW9uJiZ0aGlzLnZpZXdwb3J0U2Nyb2xsZXIuc2V0SGlzdG9yeVNjcm9sbFJlc3RvcmF0aW9uKCJtYW51YWwiKSx0aGlzLnJvdXRlckV2ZW50c1N1YnNjcmlwdGlvbj10aGlzLmNyZWF0ZVNjcm9sbEV2ZW50cygpLHRoaXMuc2Ny''@;'; put 'put ''b2xsRXZlbnRzU3Vic2NyaXB0aW9uPXRoaXMuY29uc3VtZVNjcm9sbEV2ZW50cygpfWNyZWF0ZVNjcm9sbEV2ZW50cygpe3JldHVybiB0aGlzLnRyYW5zaXRpb25zLmV2ZW50cy5zdWJzY3JpYmUoYT0+e2EgaW5zdGFuY2VvZiBMUj8odGhpcy5zdG9yZVt0aGlzLmxhc3RJZF09dGhpcy52aWV3''@;'; put 'put ''cG9ydFNjcm9sbGVyLmdldFNjcm9sbFBvc2l0aW9uKCksdGhpcy5sYXN0U291cmNlPWEubmF2aWdhdGlvblRyaWdnZXIsdGhpcy5yZXN0b3JlZElkPWEucmVzdG9yZWRTdGF0ZT9hLnJlc3RvcmVkU3RhdGUubmF2aWdhdGlvbklkOjApOmEgaW5zdGFuY2VvZiBjcD8odGhpcy5sYXN0SWQ9YS5p''@;'; put 'put ''ZCx0aGlzLnNjaGVkdWxlU2Nyb2xsRXZlbnQoYSx0aGlzLnVybFNlcmlhbGl6ZXIucGFyc2UoYS51cmxBZnRlclJlZGlyZWN0cykuZnJhZ21lbnQpKTphIGluc3RhbmNlb2YgbnkmJmEuY29kZT09PU9SLklnbm9yZWRTYW1lVXJsTmF2aWdhdGlvbiYmKHRoaXMubGFzdFNvdXJjZT12b2lkIDAs''@;'; put 'put ''dGhpcy5yZXN0b3JlZElkPTAsdGhpcy5zY2hlZHVsZVNjcm9sbEV2ZW50KGEsdGhpcy51cmxTZXJpYWxpemVyLnBhcnNlKGEudXJsKS5mcmFnbWVudCkpfSl9Y29uc3VtZVNjcm9sbEV2ZW50cygpe3JldHVybiB0aGlzLnRyYW5zaXRpb25zLmV2ZW50cy5zdWJzY3JpYmUoYT0+e2EgaW5zdGFu''@;'; put 'put ''Y2VvZiB4bGUmJihhLnBvc2l0aW9uPyJ0b3AiPT09dGhpcy5vcHRpb25zLnNjcm9sbFBvc2l0aW9uUmVzdG9yYXRpb24/dGhpcy52aWV3cG9ydFNjcm9sbGVyLnNjcm9sbFRvUG9zaXRpb24oWzAsMF0pOiJlbmFibGVkIj09PXRoaXMub3B0aW9ucy5zY3JvbGxQb3NpdGlvblJlc3RvcmF0aW9u''@;'; put 'put ''JiZ0aGlzLnZpZXdwb3J0U2Nyb2xsZXIuc2Nyb2xsVG9Qb3NpdGlvbihhLnBvc2l0aW9uKTphLmFuY2hvciYmImVuYWJsZWQiPT09dGhpcy5vcHRpb25zLmFuY2hvclNjcm9sbGluZz90aGlzLnZpZXdwb3J0U2Nyb2xsZXIuc2Nyb2xsVG9BbmNob3IoYS5hbmNob3IpOiJkaXNhYmxlZCIhPT10''@;'; put 'put ''aGlzLm9wdGlvbnMuc2Nyb2xsUG9zaXRpb25SZXN0b3JhdGlvbiYmdGhpcy52aWV3cG9ydFNjcm9sbGVyLnNjcm9sbFRvUG9zaXRpb24oWzAsMF0pKX0pfXNjaGVkdWxlU2Nyb2xsRXZlbnQoYSxkKXt2YXIgaD10aGlzO3RoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcihlZShmdW5jdGlvbioo''@;'; put 'put ''KXt5aWVsZCBuZXcgUHJvbWlzZShmPT57c2V0VGltZW91dCgoKT0+e2YoKX0pLHBiKCgpPT57ZigpfSx7aW5qZWN0b3I6aC5lbnZpcm9ubWVudEluamVjdG9yfSl9KSxoLnpvbmUucnVuKCgpPT57aC50cmFuc2l0aW9ucy5ldmVudHMubmV4dChuZXcgeGxlKGEsInBvcHN0YXRlIj09PWgubGFz''@;'; put 'put ''dFNvdXJjZT9oLnN0b3JlW2gucmVzdG9yZWRJZF06bnVsbCxkKSl9KX0pKX1uZ09uRGVzdHJveSgpe3RoaXMucm91dGVyRXZlbnRzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpLHRoaXMuc2Nyb2xsRXZlbnRzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfXN0YXRpY3t0aGlzLlx1MDI3''@;'; put 'put ''NWZhYz1mdW5jdGlvbihkKXshZnVuY3Rpb24gZ0QoKXt0aHJvdyBuZXcgRXJyb3IoImludmFsaWQiKX0oKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBkcChjLGwpe3JldHVybntcdTAyNzVr''@;'; put 'put ''aW5kOmMsXHUwMjc1cHJvdmlkZXJzOmx9fWZ1bmN0aW9uIFFsZSgpe2NvbnN0IGM9aGkoRHMpO3JldHVybiBsPT57Y29uc3QgYT1jLmdldChHNCk7aWYobCE9PWEuY29tcG9uZW50c1swXSlyZXR1cm47Y29uc3QgZD1jLmdldChMcyksaD1jLmdldChlY2UpOzE9PT1jLmdldChsVykmJmQuaW5p''@;'; put 'put ''dGlhbE5hdmlnYXRpb24oKSxjLmdldCh0Y2UsbnVsbCxvby5PcHRpb25hbCk/LnNldFVwUHJlbG9hZGluZygpLGMuZ2V0KHNXLG51bGwsb28uT3B0aW9uYWwpPy5pbml0KCksZC5yZXNldFJvb3RDb21wb25lbnRUeXBlKGEuY29tcG9uZW50VHlwZXNbMF0pLGguY2xvc2VkfHwoaC5uZXh0KCks''@;'; put 'put ''aC5jb21wbGV0ZSgpLGgudW5zdWJzY3JpYmUoKSl9fWNvbnN0IGVjZT1uZXcgU3QoIiIse2ZhY3Rvcnk6KCk9Pm5ldyBXbn0pLGxXPW5ldyBTdCgiIix7cHJvdmlkZWRJbjoicm9vdCIsZmFjdG9yeTooKT0+MX0pLHRjZT1uZXcgU3QoIiIpO2Z1bmN0aW9uIGVUZShjKXtyZXR1cm4gZHAoMCxb''@;'; put 'put ''e3Byb3ZpZGU6dGNlLHVzZUV4aXN0aW5nOnFFZX0se3Byb3ZpZGU6cWxlLHVzZUV4aXN0aW5nOmN9XSl9ZnVuY3Rpb24gblRlKGMpe3JldHVybiBkcCg5LFt7cHJvdmlkZTpZbGUsdXNlVmFsdWU6SEVlfSx7cHJvdmlkZTpHbGUsdXNlVmFsdWU6e3NraXBOZXh0VHJhbnNpdGlvbjohIWM/LnNr''@;'; put 'put ''aXBJbml0aWFsVHJhbnNpdGlvbiwuLi5jfX1dKX1jb25zdCBuY2U9bmV3IFN0KCJST1VURVJfRk9SUk9PVF9HVUFSRCIpLHJUZT1bdWgse3Byb3ZpZGU6UWIsdXNlQ2xhc3M6Tlp9LExzLCRNLHtwcm92aWRlOkN1LHVzZUZhY3Rvcnk6ZnVuY3Rpb24gSmxlKGMpe3JldHVybiBjLnJvdXRlclN0''@;'; put 'put ''YXRlLnJvb3R9LGRlcHM6W0xzXX0sb1csW11dO2xldCBqYz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe31zdGF0aWMgZm9yUm9vdChhLGQpe3JldHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczpbclRlLFtdLHtwcm92aWRlOmx5LG11bHRpOiEwLHVzZVZhbHVlOmF9LHtwcm92aWRlOm5j''@;'; put 'put ''ZSx1c2VGYWN0b3J5OnNUZSxkZXBzOltbTHMsbmV3IEkxLG5ldyBsZF1dfSx7cHJvdmlkZTpzeSx1c2VWYWx1ZTpkfHx7fX0sZD8udXNlSGFzaD97cHJvdmlkZTp6OCx1c2VDbGFzczpLeWV9Ontwcm92aWRlOno4LHVzZUNsYXNzOmtvZX0se3Byb3ZpZGU6c1csdXNlRmFjdG9yeTooKT0+e2Nv''@;'; put 'put ''bnN0IGM9aGkodXdlKSxsPWhpKFlvKSxhPWhpKHN5KSxkPWhpKEJSKSxoPWhpKFFiKTtyZXR1cm4gYS5zY3JvbGxPZmZzZXQmJmMuc2V0T2Zmc2V0KGEuc2Nyb2xsT2Zmc2V0KSxuZXcgWGxlKGgsZCxjLGwsYSl9fSxkPy5wcmVsb2FkaW5nU3RyYXRlZ3k/ZVRlKGQucHJlbG9hZGluZ1N0cmF0''@;'; put 'put ''ZWd5KS5cdTAyNzVwcm92aWRlcnM6W10sZD8uaW5pdGlhbE5hdmlnYXRpb24/bFRlKGQpOltdLGQ/LmJpbmRUb0NvbXBvbmVudElucHV0cz9kcCg4LFtSbGUse3Byb3ZpZGU6RlIsdXNlRXhpc3Rpbmc6UmxlfV0pLlx1MDI3NXByb3ZpZGVyczpbXSxkPy5lbmFibGVWaWV3VHJhbnNpdGlvbnM/''@;'; put 'put ''blRlKCkuXHUwMjc1cHJvdmlkZXJzOltdLFt7cHJvdmlkZTpyY2UsdXNlRmFjdG9yeTpRbGV9LHtwcm92aWRlOnlVLG11bHRpOiEwLHVzZUV4aXN0aW5nOnJjZX1dXX19c3RhdGljIGZvckNoaWxkKGEpe3JldHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczpbe3Byb3ZpZGU6bHksbXVsdGk6ITAs''@;'; put 'put ''dXNlVmFsdWU6YX1dfX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShNcihuY2UsOCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7fSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBz''@;'; put 'put ''VGUoYyl7cmV0dXJuImd1YXJkZWQifWZ1bmN0aW9uIGxUZShjKXtyZXR1cm5bImRpc2FibGVkIj09PWMuaW5pdGlhbE5hdmlnYXRpb24/ZHAoMyxbe3Byb3ZpZGU6dlUsbXVsdGk6ITAsdXNlRmFjdG9yeTooKT0+e2NvbnN0IGw9aGkoTHMpO3JldHVybigpPT57bC5zZXRVcExvY2F0aW9uQ2hh''@;'; put 'put ''bmdlTGlzdGVuZXIoKX19fSx7cHJvdmlkZTpsVyx1c2VWYWx1ZToyfV0pLlx1MDI3NXByb3ZpZGVyczpbXSwiZW5hYmxlZEJsb2NraW5nIj09PWMuaW5pdGlhbE5hdmlnYXRpb24/ZHAoMixbe3Byb3ZpZGU6bFcsdXNlVmFsdWU6MH0se3Byb3ZpZGU6dlUsbXVsdGk6ITAsZGVwczpbRHNdLHVz''@;'; put 'put ''ZUZhY3Rvcnk6bD0+e2NvbnN0IGE9bC5nZXQoR3llLFByb21pc2UucmVzb2x2ZSgpKTtyZXR1cm4oKT0+YS50aGVuKCgpPT5uZXcgUHJvbWlzZShkPT57Y29uc3QgaD1sLmdldChMcyksZj1sLmdldChlY2UpO0tsZShoLCgpPT57ZCghMCl9KSxsLmdldChCUikuYWZ0ZXJQcmVhY3RpdmF0aW9u''@;'; put 'put ''PSgpPT4oZCghMCksZi5jbG9zZWQ/ZmEodm9pZCAwKTpmKSxoLmluaXRpYWxOYXZpZ2F0aW9uKCl9KSl9fV0pLlx1MDI3NXByb3ZpZGVyczpbXV19Y29uc3QgcmNlPW5ldyBTdCgiIik7dmFyIHV5PWZ1bmN0aW9uKGMpe3JldHVybiBjLmxpZ2h0PSJsaWdodCIsYy5kYXJrPSJkYXJrIixjfSh1''@;'; put 'put ''eXx8e30pLGljZT1fKDU1MTg4KSx1VGU9Xyg3ODc1NSk7Y29uc3QgY1c9e3VzZXJzX2FsbG93ZWQ6MSx2aWV3ZXJfcm93c19hbGxvd2VkOjE1LGVkaXRvcl9yb3dzX2FsbG93ZWQ6MTUsc3RhZ2Vfcm93c19hbGxvd2VkOjEvMCxoaXN0b3J5X3Jvd3NfYWxsb3dlZDoxNSxzdWJtaXRfcm93c19s''@;'; put 'put ''aW1pdDo1LHZpZXdib3hfbGltaXQ6MSxsaW5lYWdlX2RhaWx5X2xpbWl0OjMsdGFibGVzX2luX2xpYnJhcnlfbGltaXQ6MzUsdmlld2JveDohMCxmaWxlVXBsb2FkOiEwLGVkaXRSZWNvcmQ6ITAsYWRkUmVjb3JkOiEwfTt2YXIgaGg9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy52aWV3ZXJfcm93''@;'; put 'put ''c19hbGxvd2VkPTBdPSJ2aWV3ZXJfcm93c19hbGxvd2VkIixjW2MuZWRpdG9yX3Jvd3NfYWxsb3dlZD0xXT0iZWRpdG9yX3Jvd3NfYWxsb3dlZCIsY1tjLnN0YWdlX3Jvd3NfYWxsb3dlZD0yXT0ic3RhZ2Vfcm93c19hbGxvd2VkIixjW2MuaGlzdG9yeV9yb3dzX2FsbG93ZWQ9M109Imhpc3Rv''@;'; put 'put ''cnlfcm93c19hbGxvd2VkIixjW2Muc3VibWl0X3Jvd3NfbGltaXQ9NF09InN1Ym1pdF9yb3dzX2xpbWl0IixjW2MudGFibGVzX2luX2xpYnJhcnlfbGltaXQ9NV09InRhYmxlc19pbl9saWJyYXJ5X2xpbWl0IixjW2Mudmlld2JveD02XT0idmlld2JveCIsY1tjLnZpZXdib3hfbGltaXQ9N109''@;'; put 'put ''InZpZXdib3hfbGltaXQiLGNbYy5saW5lYWdlX2RhaWx5X2xpbWl0PThdPSJsaW5lYWdlX2RhaWx5X2xpbWl0IixjW2MuZmlsZVVwbG9hZD05XT0iZmlsZVVwbG9hZCIsY1tjLmVkaXRSZWNvcmQ9MTBdPSJlZGl0UmVjb3JkIixjW2MuYWRkUmVjb3JkPTExXT0iYWRkUmVjb3JkIixjfShoaHx8''@;'; put 'put ''e30pLGZoPV8oMzczNCksb2NlPV8ubihmaCksTTA9XygxMzI0Nyk7bGV0IHE4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9c2V0RGNBZGFwdGVyU2V0dGluZ3MoYSl7dGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz1hfWdldERjQWRhcHRlclNldHRpbmdzKCl7cmV0dXJuIHRoaXMuZGNBZGFw''@;'; put 'put ''dGVyU2V0dGluZ3N9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCksdVc9KCgpPT57Y2xh''@;'; put 'put ''c3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMudXNlckNoYW5nZT1uZXcgV259c2V0IHVzZXIoYSl7dGhpcy5fdXNlcj1hLHRoaXMudXNlckNoYW5nZS5uZXh0KGEpfWdldCB1c2VyKCl7cmV0dXJuIHRoaXMuX3VzZXJ9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXco''@;'; put 'put ''ZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7Y2xhc3MgalJ7Y29uc3RydWN0b3IoKXt0aGlzLmRlZmF1bHRTZXR0aW5ncz17cGVyc2lzdFNlbGVjdGVkVGhlbWU6ITAsc2VsZWN0ZWRUaGVtZTp1eS5s''@;'; put 'put ''aWdodH0sdGhpcy5zZXR0aW5ncz1uZXcgUXIodGhpcy5kZWZhdWx0U2V0dGluZ3MpLHRoaXMucmVzdG9yZUFwcFNldHRpbmdzKCl9cmVzdG9yZUFwcFNldHRpbmdzKCl7dHJ5e2NvbnN0IGw9bG9jYWxTdG9yYWdlLmdldEl0ZW0oImFwcC1zZXR0aW5ncyIpO2lmKGwpe2NvbnN0IGE9SlNPTi5w''@;'; put 'put ''YXJzZShsKTt0aGlzLnNldEFwcFNldHRpbmdzKGEpfWVsc2UgY29uc29sZS5pbmZvKCJObyBhcHAgc2V0dGluZ3Mgc3RvcmVkIGluIHRoZSBsb2NhbFN0b3JhZ2UsIHdlIHdpbGwgc2V0IHRvIGRlZmF1bHQgdmFsdWVzLiIpfWNhdGNoKGwpe2NvbnNvbGUud2FybigiRXJyb3IgcmVzdG9yaW5n''@;'; put 'put ''IHNldHRpbmdzIGZyb20gbG9jYWwgc3RvcmdhZS4iLGwpfX1zdG9yZUFwcFNldHRpbmdzKCl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oImFwcC1zZXR0aW5ncyIsSlNPTi5zdHJpbmdpZnkodGhpcy5zZXR0aW5ncy52YWx1ZSkpfXNldEFwcFNldHRpbmdzKGwpe3RoaXMuc2V0dGluZ3MubmV4dCh7''@;'; put 'put ''Li4udGhpcy5zZXR0aW5ncy52YWx1ZSwuLi5sfSksdGhpcy5zdG9yZUFwcFNldHRpbmdzKCl9fWxldCBwYz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuYXBwU2V0dGluZ3NTZXJ2aWNlPWEsdGhpcy5vblNpZGViYXJUb2dnbGU9bmV3IHFyLHRoaXMub25TdGFydHVwRGF0YUxv''@;'; put 'put ''YWRlZD1uZXcgcXIsdGhpcy5vblNob3dBYm9ydE1vZGFsPW5ldyBxcix0aGlzLm9uUmVxdWVzdHNNb2RhbE9wZW49bmV3IHFyLHRoaXMub25EZW1vTGltaXRNb2RhbFNob3c9bmV3IHFyLHRoaXMudmlld0xhc3RVcmw9bnVsbCx0aGlzLnNpZGViYXJDbG9zZUxpbWl0PTEyODAsdGhpcy5kYXJr''@;'; put 'put ''TW9kZT1uZXcgUXIoITEpfXRvZ2dsZURhcmtNb2RlKGEpe3RoaXMuZGFya01vZGUubmV4dChhKSxhP2RvY3VtZW50LmJvZHkuc2V0QXR0cmlidXRlKCJjZHMtdGhlbWUiLCJkYXJrIik6ZG9jdW1lbnQuYm9keS5zZXRBdHRyaWJ1dGUoImNkcy10aGVtZSIsImxpZ2h0IiksdGhpcy5hcHBTZXR0''@;'; put 'put ''aW5nc1NlcnZpY2Uuc2V0QXBwU2V0dGluZ3Moe3NlbGVjdGVkVGhlbWU6YT91eS5kYXJrOnV5LmxpZ2h0fSl9c2hvd0RlbW9MaW1pdE1vZGFsKGEpe3RoaXMub25EZW1vTGltaXRNb2RhbFNob3cuZW1pdChhKX1zaG93SW5mb01vZGFsKGE9IkluZm8iLGQpe3RoaXMub25TaG93QWJvcnRNb2Rh''@;'; put 'put ''bC5lbWl0KHttb2RhbFRpdGxlOmEsbWVzc2FnZTpkLHNhc1NlcnZpY2U6IiIsZGV0YWlsczpudWxsfSl9c2hvd0Fib3J0TW9kYWwoYSxkLGgsZj12b2lkIDApe2h8fChoPW51bGwpO2xldCB2PXtzYXNTZXJ2aWNlOmEsbWVzc2FnZTpkLGRldGFpbHM6aH07ZiYmKHYubW9kYWxUaXRsZT1mKSx0''@;'; put 'put ''aGlzLm9uU2hvd0Fib3J0TW9kYWwuZW1pdCh2KX1vcGVuUmVxdWVzdHNNb2RhbCgpe3RoaXMub25SZXF1ZXN0c01vZGFsT3Blbi5lbWl0KCEwKX1jYXRjaFJlc3BvbnNlRXJyb3IoYSxkKXtsZXQgaD0iU0FTIFNlcnZpY2UgZXJyb3Igb2N1cnJlZCI7aWYoZC5lcnJvcil7bGV0IGY7aD1kLmVy''@;'; put 'put ''cm9yLm1lc3NhZ2UsZC5lcnJvci5kZXRhaWxzJiZkLmVycm9yLmRldGFpbHMubG9nJiYoZj1kLmVycm9yLmRldGFpbHMubG9nKSwoIWh8fGgudHJpbSgpLmxlbmd0aDwxKSYmKGg9IlNBUyBTZXJ2aWNlIGVycm9yIG9jdXJyZWQiKSx0aGlzLnNob3dBYm9ydE1vZGFsKGEsaCx7TE9HOmZ9LCJS''@;'; put 'put ''ZXF1ZXN0IGVycm9yIil9ZWxzZSB0aGlzLnNob3dBYm9ydE1vZGFsKGEsaCl9dG9nZ2xlU2lkZWJhcigpe3RoaXMub25TaWRlYmFyVG9nZ2xlLmVtaXQoKX1jbG9zZVNpZGViYXIoKXt3aW5kb3cuaW5uZXJXaWR0aDx0aGlzLnNpZGViYXJDbG9zZUxpbWl0JiZ0aGlzLm9uU2lkZWJhclRvZ2ds''@;'; put 'put ''ZS5lbWl0KHtvcGVuOiExfSl9b3BlblNpZGViYXIoKXt0aGlzLm9uU2lkZWJhclRvZ2dsZS5lbWl0KHtvcGVuOiEwfSl9c3RhcnR1cERhdGFMb2FkZWQoKXt0aGlzLm9uU3RhcnR1cERhdGFMb2FkZWQuZW1pdCgpfWRpc3BhdGNoRXZlbnQoYSl7bGV0IGQ7ImZ1bmN0aW9uIj09dHlwZW9mIEV2''@;'; put 'put ''ZW50P2Q9bmV3IEV2ZW50KGEpOihkPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpLGQuaW5pdEV2ZW50KGEsITAsITApKSx3aW5kb3cuZGlzcGF0Y2hFdmVudChkKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShNcihqUikpfX1zdGF0aWN7''@;'; put 'put ''dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2NsYXNzIHpSe31jbGFzcyBVUnt9Y2xhc3MgdzJ7Y29uc3RydWN0b3IobCl7dGhpcy5ub3JtYWxpemVkTmFtZXM9bmV3IE1hcCx0aGlzLmxhenlV''@;'; put 'put ''cGRhdGU9bnVsbCxsPyJzdHJpbmciPT10eXBlb2YgbD90aGlzLmxhenlJbml0PSgpPT57dGhpcy5oZWFkZXJzPW5ldyBNYXAsbC5zcGxpdCgiXG4iKS5mb3JFYWNoKGE9Pntjb25zdCBkPWEuaW5kZXhPZigiOiIpO2lmKGQ+MCl7Y29uc3QgaD1hLnNsaWNlKDAsZCksZj1oLnRvTG93ZXJDYXNl''@;'; put 'put ''KCksdj1hLnNsaWNlKGQrMSkudHJpbSgpO3RoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZShoLGYpLHRoaXMuaGVhZGVycy5oYXMoZik/dGhpcy5oZWFkZXJzLmdldChmKS5wdXNoKHYpOnRoaXMuaGVhZGVycy5zZXQoZixbdl0pfX0pfTp0eXBlb2YgSGVhZGVyczwidSImJmwgaW5zdGFuY2Vv''@;'; put 'put ''ZiBIZWFkZXJzPyh0aGlzLmhlYWRlcnM9bmV3IE1hcCxsLmZvckVhY2goKGEsZCk9Pnt0aGlzLnNldEhlYWRlckVudHJpZXMoZCxhKX0pKTp0aGlzLmxhenlJbml0PSgpPT57dGhpcy5oZWFkZXJzPW5ldyBNYXAsT2JqZWN0LmVudHJpZXMobCkuZm9yRWFjaCgoW2EsZF0pPT57dGhpcy5zZXRI''@;'; put 'put ''ZWFkZXJFbnRyaWVzKGEsZCl9KX06dGhpcy5oZWFkZXJzPW5ldyBNYXB9aGFzKGwpe3JldHVybiB0aGlzLmluaXQoKSx0aGlzLmhlYWRlcnMuaGFzKGwudG9Mb3dlckNhc2UoKSl9Z2V0KGwpe3RoaXMuaW5pdCgpO2NvbnN0IGE9dGhpcy5oZWFkZXJzLmdldChsLnRvTG93ZXJDYXNlKCkpO3Jl''@;'; put 'put ''dHVybiBhJiZhLmxlbmd0aD4wP2FbMF06bnVsbH1rZXlzKCl7cmV0dXJuIHRoaXMuaW5pdCgpLEFycmF5LmZyb20odGhpcy5ub3JtYWxpemVkTmFtZXMudmFsdWVzKCkpfWdldEFsbChsKXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5oZWFkZXJzLmdldChsLnRvTG93ZXJDYXNlKCkpfHxudWxs''@;'; put 'put ''fWFwcGVuZChsLGEpe3JldHVybiB0aGlzLmNsb25lKHtuYW1lOmwsdmFsdWU6YSxvcDoiYSJ9KX1zZXQobCxhKXtyZXR1cm4gdGhpcy5jbG9uZSh7bmFtZTpsLHZhbHVlOmEsb3A6InMifSl9ZGVsZXRlKGwsYSl7cmV0dXJuIHRoaXMuY2xvbmUoe25hbWU6bCx2YWx1ZTphLG9wOiJkIn0pfW1h''@;'; put 'put ''eWJlU2V0Tm9ybWFsaXplZE5hbWUobCxhKXt0aGlzLm5vcm1hbGl6ZWROYW1lcy5oYXMoYSl8fHRoaXMubm9ybWFsaXplZE5hbWVzLnNldChhLGwpfWluaXQoKXt0aGlzLmxhenlJbml0JiYodGhpcy5sYXp5SW5pdCBpbnN0YW5jZW9mIHcyP3RoaXMuY29weUZyb20odGhpcy5sYXp5SW5pdCk6''@;'; put 'put ''dGhpcy5sYXp5SW5pdCgpLHRoaXMubGF6eUluaXQ9bnVsbCx0aGlzLmxhenlVcGRhdGUmJih0aGlzLmxhenlVcGRhdGUuZm9yRWFjaChsPT50aGlzLmFwcGx5VXBkYXRlKGwpKSx0aGlzLmxhenlVcGRhdGU9bnVsbCkpfWNvcHlGcm9tKGwpe2wuaW5pdCgpLEFycmF5LmZyb20obC5oZWFkZXJz''@;'; put 'put ''LmtleXMoKSkuZm9yRWFjaChhPT57dGhpcy5oZWFkZXJzLnNldChhLGwuaGVhZGVycy5nZXQoYSkpLHRoaXMubm9ybWFsaXplZE5hbWVzLnNldChhLGwubm9ybWFsaXplZE5hbWVzLmdldChhKSl9KX1jbG9uZShsKXtjb25zdCBhPW5ldyB3MjtyZXR1cm4gYS5sYXp5SW5pdD10aGlzLmxhenlJ''@;'; put 'put ''bml0JiZ0aGlzLmxhenlJbml0IGluc3RhbmNlb2YgdzI/dGhpcy5sYXp5SW5pdDp0aGlzLGEubGF6eVVwZGF0ZT0odGhpcy5sYXp5VXBkYXRlfHxbXSkuY29uY2F0KFtsXSksYX1hcHBseVVwZGF0ZShsKXtjb25zdCBhPWwubmFtZS50b0xvd2VyQ2FzZSgpO3N3aXRjaChsLm9wKXtjYXNlImEi''@;'; put 'put ''OmNhc2UicyI6bGV0IGQ9bC52YWx1ZTtpZigic3RyaW5nIj09dHlwZW9mIGQmJihkPVtkXSksMD09PWQubGVuZ3RoKXJldHVybjt0aGlzLm1heWJlU2V0Tm9ybWFsaXplZE5hbWUobC5uYW1lLGEpO2NvbnN0IGg9KCJhIj09PWwub3A/dGhpcy5oZWFkZXJzLmdldChhKTp2b2lkIDApfHxbXTto''@;'; put 'put ''LnB1c2goLi4uZCksdGhpcy5oZWFkZXJzLnNldChhLGgpO2JyZWFrO2Nhc2UiZCI6Y29uc3QgZj1sLnZhbHVlO2lmKGYpe2xldCB2PXRoaXMuaGVhZGVycy5nZXQoYSk7aWYoIXYpcmV0dXJuO3Y9di5maWx0ZXIoTT0+LTE9PT1mLmluZGV4T2YoTSkpLDA9PT12Lmxlbmd0aD8odGhpcy5oZWFk''@;'; put 'put ''ZXJzLmRlbGV0ZShhKSx0aGlzLm5vcm1hbGl6ZWROYW1lcy5kZWxldGUoYSkpOnRoaXMuaGVhZGVycy5zZXQoYSx2KX1lbHNlIHRoaXMuaGVhZGVycy5kZWxldGUoYSksdGhpcy5ub3JtYWxpemVkTmFtZXMuZGVsZXRlKGEpfX1zZXRIZWFkZXJFbnRyaWVzKGwsYSl7Y29uc3QgZD0oQXJyYXku''@;'; put 'put ''aXNBcnJheShhKT9hOlthXSkubWFwKGY9PmYudG9TdHJpbmcoKSksaD1sLnRvTG93ZXJDYXNlKCk7dGhpcy5oZWFkZXJzLnNldChoLGQpLHRoaXMubWF5YmVTZXROb3JtYWxpemVkTmFtZShsLGgpfWZvckVhY2gobCl7dGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm5vcm1hbGl6ZWROYW1l''@;'; put 'put ''cy5rZXlzKCkpLmZvckVhY2goYT0+bCh0aGlzLm5vcm1hbGl6ZWROYW1lcy5nZXQoYSksdGhpcy5oZWFkZXJzLmdldChhKSkpfX1jbGFzcyBkVGV7ZW5jb2RlS2V5KGwpe3JldHVybiBhY2UobCl9ZW5jb2RlVmFsdWUobCl7cmV0dXJuIGFjZShsKX1kZWNvZGVLZXkobCl7cmV0dXJuIGRlY29k''@;'; put 'put ''ZVVSSUNvbXBvbmVudChsKX1kZWNvZGVWYWx1ZShsKXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGwpfX1jb25zdCBmVGU9LyUoXGRbYS1mMC05XSkvZ2kscFRlPXs0MDoiQCIsIjNBIjoiOiIsMjQ6IiQiLCIyQyI6IiwiLCIzQiI6IjsiLCIzRCI6Ij0iLCIzRiI6Ij8iLCIyRiI6Ii8ifTtm''@;'; put 'put ''dW5jdGlvbiBhY2UoYyl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChjKS5yZXBsYWNlKGZUZSwobCxhKT0+cFRlW2FdPz9sKX1mdW5jdGlvbiBaUihjKXtyZXR1cm5gJHtjfWB9Y2xhc3MgaW17Y29uc3RydWN0b3IobD17fSl7aWYodGhpcy51cGRhdGVzPW51bGwsdGhpcy5jbG9uZUZyb209''@;'; put 'put ''bnVsbCx0aGlzLmVuY29kZXI9bC5lbmNvZGVyfHxuZXcgZFRlLGwuZnJvbVN0cmluZyl7aWYobC5mcm9tT2JqZWN0KXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHNwZWNpZnkgYm90aCBmcm9tU3RyaW5nIGFuZCBmcm9tT2JqZWN0LiIpO3RoaXMubWFwPWZ1bmN0aW9uIGhUZShjLGwpe2NvbnN0''@;'; put 'put ''IGE9bmV3IE1hcDtyZXR1cm4gYy5sZW5ndGg+MCYmYy5yZXBsYWNlKC9eXD8vLCIiKS5zcGxpdCgiJiIpLmZvckVhY2goaD0+e2NvbnN0IGY9aC5pbmRleE9mKCI9IiksW3YsTV09LTE9PWY/W2wuZGVjb2RlS2V5KGgpLCIiXTpbbC5kZWNvZGVLZXkoaC5zbGljZSgwLGYpKSxsLmRlY29kZVZh''@;'; put 'put ''bHVlKGguc2xpY2UoZisxKSldLEQ9YS5nZXQodil8fFtdO0QucHVzaChNKSxhLnNldCh2LEQpfSksYX0obC5mcm9tU3RyaW5nLHRoaXMuZW5jb2Rlcil9ZWxzZSBsLmZyb21PYmplY3Q/KHRoaXMubWFwPW5ldyBNYXAsT2JqZWN0LmtleXMobC5mcm9tT2JqZWN0KS5mb3JFYWNoKGE9Pntjb25z''@;'; put 'put ''dCBkPWwuZnJvbU9iamVjdFthXSxoPUFycmF5LmlzQXJyYXkoZCk/ZC5tYXAoWlIpOltaUihkKV07dGhpcy5tYXAuc2V0KGEsaCl9KSk6dGhpcy5tYXA9bnVsbH1oYXMobCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMubWFwLmhhcyhsKX1nZXQobCl7dGhpcy5pbml0KCk7Y29uc3QgYT10aGlz''@;'; put 'put ''Lm1hcC5nZXQobCk7cmV0dXJuIGE/YVswXTpudWxsfWdldEFsbChsKXtyZXR1cm4gdGhpcy5pbml0KCksdGhpcy5tYXAuZ2V0KGwpfHxudWxsfWtleXMoKXtyZXR1cm4gdGhpcy5pbml0KCksQXJyYXkuZnJvbSh0aGlzLm1hcC5rZXlzKCkpfWFwcGVuZChsLGEpe3JldHVybiB0aGlzLmNsb25l''@;'; put 'put ''KHtwYXJhbTpsLHZhbHVlOmEsb3A6ImEifSl9YXBwZW5kQWxsKGwpe2NvbnN0IGE9W107cmV0dXJuIE9iamVjdC5rZXlzKGwpLmZvckVhY2goZD0+e2NvbnN0IGg9bFtkXTtBcnJheS5pc0FycmF5KGgpP2guZm9yRWFjaChmPT57YS5wdXNoKHtwYXJhbTpkLHZhbHVlOmYsb3A6ImEifSl9KTph''@;'; put 'put ''LnB1c2goe3BhcmFtOmQsdmFsdWU6aCxvcDoiYSJ9KX0pLHRoaXMuY2xvbmUoYSl9c2V0KGwsYSl7cmV0dXJuIHRoaXMuY2xvbmUoe3BhcmFtOmwsdmFsdWU6YSxvcDoicyJ9KX1kZWxldGUobCxhKXtyZXR1cm4gdGhpcy5jbG9uZSh7cGFyYW06bCx2YWx1ZTphLG9wOiJkIn0pfXRvU3RyaW5n''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuaW5pdCgpLHRoaXMua2V5cygpLm1hcChsPT57Y29uc3QgYT10aGlzLmVuY29kZXIuZW5jb2RlS2V5KGwpO3JldHVybiB0aGlzLm1hcC5nZXQobCkubWFwKGQ9PmErIj0iK3RoaXMuZW5jb2Rlci5lbmNvZGVWYWx1ZShkKSkuam9pbigiJiIpfSkuZmlsdGVyKGw9PiIi''@;'; put 'put ''IT09bCkuam9pbigiJiIpfWNsb25lKGwpe2NvbnN0IGE9bmV3IGltKHtlbmNvZGVyOnRoaXMuZW5jb2Rlcn0pO3JldHVybiBhLmNsb25lRnJvbT10aGlzLmNsb25lRnJvbXx8dGhpcyxhLnVwZGF0ZXM9KHRoaXMudXBkYXRlc3x8W10pLmNvbmNhdChsKSxhfWluaXQoKXtudWxsPT09dGhpcy5t''@;'; put 'put ''YXAmJih0aGlzLm1hcD1uZXcgTWFwKSxudWxsIT09dGhpcy5jbG9uZUZyb20mJih0aGlzLmNsb25lRnJvbS5pbml0KCksdGhpcy5jbG9uZUZyb20ua2V5cygpLmZvckVhY2gobD0+dGhpcy5tYXAuc2V0KGwsdGhpcy5jbG9uZUZyb20ubWFwLmdldChsKSkpLHRoaXMudXBkYXRlcy5mb3JFYWNo''@;'; put 'put ''KGw9Pntzd2l0Y2gobC5vcCl7Y2FzZSJhIjpjYXNlInMiOmNvbnN0IGE9KCJhIj09PWwub3A/dGhpcy5tYXAuZ2V0KGwucGFyYW0pOnZvaWQgMCl8fFtdO2EucHVzaChaUihsLnZhbHVlKSksdGhpcy5tYXAuc2V0KGwucGFyYW0sYSk7YnJlYWs7Y2FzZSJkIjppZih2b2lkIDA9PT1sLnZhbHVl''@;'; put 'put ''KXt0aGlzLm1hcC5kZWxldGUobC5wYXJhbSk7YnJlYWt9e2xldCBkPXRoaXMubWFwLmdldChsLnBhcmFtKXx8W107Y29uc3QgaD1kLmluZGV4T2YoWlIobC52YWx1ZSkpOy0xIT09aCYmZC5zcGxpY2UoaCwxKSxkLmxlbmd0aD4wP3RoaXMubWFwLnNldChsLnBhcmFtLGQpOnRoaXMubWFwLmRl''@;'; put 'put ''bGV0ZShsLnBhcmFtKX19fSksdGhpcy5jbG9uZUZyb209dGhpcy51cGRhdGVzPW51bGwpfX1jbGFzcyBnVGV7Y29uc3RydWN0b3IoKXt0aGlzLm1hcD1uZXcgTWFwfXNldChsLGEpe3JldHVybiB0aGlzLm1hcC5zZXQobCxhKSx0aGlzfWdldChsKXtyZXR1cm4gdGhpcy5tYXAuaGFzKGwpfHx0''@;'; put 'put ''aGlzLm1hcC5zZXQobCxsLmRlZmF1bHRWYWx1ZSgpKSx0aGlzLm1hcC5nZXQobCl9ZGVsZXRlKGwpe3JldHVybiB0aGlzLm1hcC5kZWxldGUobCksdGhpc31oYXMobCl7cmV0dXJuIHRoaXMubWFwLmhhcyhsKX1rZXlzKCl7cmV0dXJuIHRoaXMubWFwLmtleXMoKX19ZnVuY3Rpb24gc2NlKGMp''@;'; put 'put ''e3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZjIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ9ZnVuY3Rpb24gbGNlKGMpe3JldHVybiB0eXBlb2YgQmxvYjwidSImJmMgaW5zdGFuY2VvZiBCbG9ifWZ1bmN0aW9uIGNjZShjKXtyZXR1cm4gdHlwZW9mIEZvcm1EYXRhPCJ1IiYmYyBpbnN0''@;'; put 'put ''YW5jZW9mIEZvcm1EYXRhfWNsYXNzIHR4e2NvbnN0cnVjdG9yKGwsYSxkLGgpe2xldCBmO2lmKHRoaXMudXJsPWEsdGhpcy5ib2R5PW51bGwsdGhpcy5yZXBvcnRQcm9ncmVzcz0hMSx0aGlzLndpdGhDcmVkZW50aWFscz0hMSx0aGlzLnJlc3BvbnNlVHlwZT0ianNvbiIsdGhpcy5tZXRob2Q9''@;'; put 'put ''bC50b1VwcGVyQ2FzZSgpLGZ1bmN0aW9uIG1UZShjKXtzd2l0Y2goYyl7Y2FzZSJERUxFVEUiOmNhc2UiR0VUIjpjYXNlIkhFQUQiOmNhc2UiT1BUSU9OUyI6Y2FzZSJKU09OUCI6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hMH19KHRoaXMubWV0aG9kKXx8aD8odGhpcy5ib2R5PXZvaWQgMCE9''@;'; put 'put ''PWQ/ZDpudWxsLGY9aCk6Zj1kLGYmJih0aGlzLnJlcG9ydFByb2dyZXNzPSEhZi5yZXBvcnRQcm9ncmVzcyx0aGlzLndpdGhDcmVkZW50aWFscz0hIWYud2l0aENyZWRlbnRpYWxzLGYucmVzcG9uc2VUeXBlJiYodGhpcy5yZXNwb25zZVR5cGU9Zi5yZXNwb25zZVR5cGUpLGYuaGVhZGVycyYm''@;'; put 'put ''KHRoaXMuaGVhZGVycz1mLmhlYWRlcnMpLGYuY29udGV4dCYmKHRoaXMuY29udGV4dD1mLmNvbnRleHQpLGYucGFyYW1zJiYodGhpcy5wYXJhbXM9Zi5wYXJhbXMpLHRoaXMudHJhbnNmZXJDYWNoZT1mLnRyYW5zZmVyQ2FjaGUpLHRoaXMuaGVhZGVycz8/PW5ldyB3Mix0aGlzLmNvbnRleHQ/''@;'; put 'put ''Pz1uZXcgZ1RlLHRoaXMucGFyYW1zKXtjb25zdCB2PXRoaXMucGFyYW1zLnRvU3RyaW5nKCk7aWYoMD09PXYubGVuZ3RoKXRoaXMudXJsV2l0aFBhcmFtcz1hO2Vsc2V7Y29uc3QgTT1hLmluZGV4T2YoIj8iKTt0aGlzLnVybFdpdGhQYXJhbXM9YSsoLTE9PT1NPyI/IjpNPGEubGVuZ3RoLTE/''@;'; put 'put ''IiYiOiIiKSt2fX1lbHNlIHRoaXMucGFyYW1zPW5ldyBpbSx0aGlzLnVybFdpdGhQYXJhbXM9YX1zZXJpYWxpemVCb2R5KCl7cmV0dXJuIG51bGw9PT10aGlzLmJvZHk/bnVsbDoic3RyaW5nIj09dHlwZW9mIHRoaXMuYm9keXx8c2NlKHRoaXMuYm9keSl8fGxjZSh0aGlzLmJvZHkpfHxjY2Uo''@;'; put 'put ''dGhpcy5ib2R5KXx8ZnVuY3Rpb24gdlRlKGMpe3JldHVybiB0eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1IiYmYyBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtc30odGhpcy5ib2R5KT90aGlzLmJvZHk6dGhpcy5ib2R5IGluc3RhbmNlb2YgaW0/dGhpcy5ib2R5LnRvU3RyaW5nKCk6Im9iamVj''@;'; put 'put ''dCI9PXR5cGVvZiB0aGlzLmJvZHl8fCJib29sZWFuIj09dHlwZW9mIHRoaXMuYm9keXx8QXJyYXkuaXNBcnJheSh0aGlzLmJvZHkpP0pTT04uc3RyaW5naWZ5KHRoaXMuYm9keSk6dGhpcy5ib2R5LnRvU3RyaW5nKCl9ZGV0ZWN0Q29udGVudFR5cGVIZWFkZXIoKXtyZXR1cm4gbnVsbD09PXRo''@;'; put 'put ''aXMuYm9keXx8Y2NlKHRoaXMuYm9keSk/bnVsbDpsY2UodGhpcy5ib2R5KT90aGlzLmJvZHkudHlwZXx8bnVsbDpzY2UodGhpcy5ib2R5KT9udWxsOiJzdHJpbmciPT10eXBlb2YgdGhpcy5ib2R5PyJ0ZXh0L3BsYWluIjp0aGlzLmJvZHkgaW5zdGFuY2VvZiBpbT8iYXBwbGljYXRpb24veC13''@;'; put 'put ''d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgiOiJvYmplY3QiPT10eXBlb2YgdGhpcy5ib2R5fHwibnVtYmVyIj09dHlwZW9mIHRoaXMuYm9keXx8ImJvb2xlYW4iPT10eXBlb2YgdGhpcy5ib2R5PyJhcHBsaWNhdGlvbi9qc29uIjpudWxsfWNsb25lKGw9e30pe2NvbnN0IGE9bC5t''@;'; put 'put ''ZXRob2R8fHRoaXMubWV0aG9kLGQ9bC51cmx8fHRoaXMudXJsLGg9bC5yZXNwb25zZVR5cGV8fHRoaXMucmVzcG9uc2VUeXBlLGY9bC50cmFuc2ZlckNhY2hlPz90aGlzLnRyYW5zZmVyQ2FjaGUsdj12b2lkIDAhPT1sLmJvZHk/bC5ib2R5OnRoaXMuYm9keSxNPWwud2l0aENyZWRlbnRpYWxz''@;'; put 'put ''Pz90aGlzLndpdGhDcmVkZW50aWFscyxEPWwucmVwb3J0UHJvZ3Jlc3M/P3RoaXMucmVwb3J0UHJvZ3Jlc3M7bGV0IFo9bC5oZWFkZXJzfHx0aGlzLmhlYWRlcnMsbmU9bC5wYXJhbXN8fHRoaXMucGFyYW1zO2NvbnN0IGNlPWwuY29udGV4dD8/dGhpcy5jb250ZXh0O3JldHVybiB2b2lkIDAh''@;'; put 'put ''PT1sLnNldEhlYWRlcnMmJihaPU9iamVjdC5rZXlzKGwuc2V0SGVhZGVycykucmVkdWNlKChiZSxFZSk9PmJlLnNldChFZSxsLnNldEhlYWRlcnNbRWVdKSxaKSksbC5zZXRQYXJhbXMmJihuZT1PYmplY3Qua2V5cyhsLnNldFBhcmFtcykucmVkdWNlKChiZSxFZSk9PmJlLnNldChFZSxsLnNl''@;'; put 'put ''dFBhcmFtc1tFZV0pLG5lKSksbmV3IHR4KGEsZCx2LHtwYXJhbXM6bmUsaGVhZGVyczpaLGNvbnRleHQ6Y2UscmVwb3J0UHJvZ3Jlc3M6RCxyZXNwb25zZVR5cGU6aCx3aXRoQ3JlZGVudGlhbHM6TSx0cmFuc2ZlckNhY2hlOmZ9KX19dmFyIG9tPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuU2Vu''@;'; put 'put ''dD0wXT0iU2VudCIsY1tjLlVwbG9hZFByb2dyZXNzPTFdPSJVcGxvYWRQcm9ncmVzcyIsY1tjLlJlc3BvbnNlSGVhZGVyPTJdPSJSZXNwb25zZUhlYWRlciIsY1tjLkRvd25sb2FkUHJvZ3Jlc3M9M109IkRvd25sb2FkUHJvZ3Jlc3MiLGNbYy5SZXNwb25zZT00XT0iUmVzcG9uc2UiLGNbYy5V''@;'; put 'put ''c2VyPTVdPSJVc2VyIixjfShvbXx8e30pO2NsYXNzIGRXe2NvbnN0cnVjdG9yKGwsYT1ueC5PayxkPSJPSyIpe3RoaXMuaGVhZGVycz1sLmhlYWRlcnN8fG5ldyB3Mix0aGlzLnN0YXR1cz12b2lkIDAhPT1sLnN0YXR1cz9sLnN0YXR1czphLHRoaXMuc3RhdHVzVGV4dD1sLnN0YXR1c1RleHR8''@;'; put 'put ''fGQsdGhpcy51cmw9bC51cmx8fG51bGwsdGhpcy5vaz10aGlzLnN0YXR1cz49MjAwJiZ0aGlzLnN0YXR1czwzMDB9fWNsYXNzIFdSIGV4dGVuZHMgZFd7Y29uc3RydWN0b3IobD17fSl7c3VwZXIobCksdGhpcy50eXBlPW9tLlJlc3BvbnNlSGVhZGVyfWNsb25lKGw9e30pe3JldHVybiBuZXcg''@;'; put 'put ''V1Ioe2hlYWRlcnM6bC5oZWFkZXJzfHx0aGlzLmhlYWRlcnMsc3RhdHVzOnZvaWQgMCE9PWwuc3RhdHVzP2wuc3RhdHVzOnRoaXMuc3RhdHVzLHN0YXR1c1RleHQ6bC5zdGF0dXNUZXh0fHx0aGlzLnN0YXR1c1RleHQsdXJsOmwudXJsfHx0aGlzLnVybHx8dm9pZCAwfSl9fWNsYXNzIFg4IGV4''@;'; put 'put ''dGVuZHMgZFd7Y29uc3RydWN0b3IobD17fSl7c3VwZXIobCksdGhpcy50eXBlPW9tLlJlc3BvbnNlLHRoaXMuYm9keT12b2lkIDAhPT1sLmJvZHk/bC5ib2R5Om51bGx9Y2xvbmUobD17fSl7cmV0dXJuIG5ldyBYOCh7Ym9keTp2b2lkIDAhPT1sLmJvZHk/bC5ib2R5OnRoaXMuYm9keSxoZWFk''@;'; put 'put ''ZXJzOmwuaGVhZGVyc3x8dGhpcy5oZWFkZXJzLHN0YXR1czp2b2lkIDAhPT1sLnN0YXR1cz9sLnN0YXR1czp0aGlzLnN0YXR1cyxzdGF0dXNUZXh0Omwuc3RhdHVzVGV4dHx8dGhpcy5zdGF0dXNUZXh0LHVybDpsLnVybHx8dGhpcy51cmx8fHZvaWQgMH0pfX1jbGFzcyBkeSBleHRlbmRzIGRX''@;'; put 'put ''e2NvbnN0cnVjdG9yKGwpe3N1cGVyKGwsMCwiVW5rbm93biBFcnJvciIpLHRoaXMubmFtZT0iSHR0cEVycm9yUmVzcG9uc2UiLHRoaXMub2s9ITEsdGhpcy5tZXNzYWdlPXRoaXMuc3RhdHVzPj0yMDAmJnRoaXMuc3RhdHVzPDMwMD9gSHR0cCBmYWlsdXJlIGR1cmluZyBwYXJzaW5nIGZvciAk''@;'; put 'put ''e2wudXJsfHwiKHVua25vd24gdXJsKSJ9YDpgSHR0cCBmYWlsdXJlIHJlc3BvbnNlIGZvciAke2wudXJsfHwiKHVua25vd24gdXJsKSJ9OiAke2wuc3RhdHVzfSAke2wuc3RhdHVzVGV4dH1gLHRoaXMuZXJyb3I9bC5lcnJvcnx8bnVsbH19dmFyIG54PWZ1bmN0aW9uKGMpe3JldHVybiBjW2Mu''@;'; put 'put ''Q29udGludWU9MTAwXT0iQ29udGludWUiLGNbYy5Td2l0Y2hpbmdQcm90b2NvbHM9MTAxXT0iU3dpdGNoaW5nUHJvdG9jb2xzIixjW2MuUHJvY2Vzc2luZz0xMDJdPSJQcm9jZXNzaW5nIixjW2MuRWFybHlIaW50cz0xMDNdPSJFYXJseUhpbnRzIixjW2MuT2s9MjAwXT0iT2siLGNbYy5DcmVh''@;'; put 'put ''dGVkPTIwMV09IkNyZWF0ZWQiLGNbYy5BY2NlcHRlZD0yMDJdPSJBY2NlcHRlZCIsY1tjLk5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbj0yMDNdPSJOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb24iLGNbYy5Ob0NvbnRlbnQ9MjA0XT0iTm9Db250ZW50IixjW2MuUmVzZXRDb250ZW50PTIw''@;'; put 'put ''NV09IlJlc2V0Q29udGVudCIsY1tjLlBhcnRpYWxDb250ZW50PTIwNl09IlBhcnRpYWxDb250ZW50IixjW2MuTXVsdGlTdGF0dXM9MjA3XT0iTXVsdGlTdGF0dXMiLGNbYy5BbHJlYWR5UmVwb3J0ZWQ9MjA4XT0iQWxyZWFkeVJlcG9ydGVkIixjW2MuSW1Vc2VkPTIyNl09IkltVXNlZCIsY1tj''@;'; put 'put ''Lk11bHRpcGxlQ2hvaWNlcz0zMDBdPSJNdWx0aXBsZUNob2ljZXMiLGNbYy5Nb3ZlZFBlcm1hbmVudGx5PTMwMV09Ik1vdmVkUGVybWFuZW50bHkiLGNbYy5Gb3VuZD0zMDJdPSJGb3VuZCIsY1tjLlNlZU90aGVyPTMwM109IlNlZU90aGVyIixjW2MuTm90TW9kaWZpZWQ9MzA0XT0iTm90TW9k''@;'; put 'put ''aWZpZWQiLGNbYy5Vc2VQcm94eT0zMDVdPSJVc2VQcm94eSIsY1tjLlVudXNlZD0zMDZdPSJVbnVzZWQiLGNbYy5UZW1wb3JhcnlSZWRpcmVjdD0zMDddPSJUZW1wb3JhcnlSZWRpcmVjdCIsY1tjLlBlcm1hbmVudFJlZGlyZWN0PTMwOF09IlBlcm1hbmVudFJlZGlyZWN0IixjW2MuQmFkUmVx''@;'; put 'put ''dWVzdD00MDBdPSJCYWRSZXF1ZXN0IixjW2MuVW5hdXRob3JpemVkPTQwMV09IlVuYXV0aG9yaXplZCIsY1tjLlBheW1lbnRSZXF1aXJlZD00MDJdPSJQYXltZW50UmVxdWlyZWQiLGNbYy5Gb3JiaWRkZW49NDAzXT0iRm9yYmlkZGVuIixjW2MuTm90Rm91bmQ9NDA0XT0iTm90Rm91bmQiLGNb''@;'; put 'put ''Yy5NZXRob2ROb3RBbGxvd2VkPTQwNV09Ik1ldGhvZE5vdEFsbG93ZWQiLGNbYy5Ob3RBY2NlcHRhYmxlPTQwNl09Ik5vdEFjY2VwdGFibGUiLGNbYy5Qcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ9NDA3XT0iUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkIixjW2MuUmVxdWVzdFRpbWVv''@;'; put 'put ''dXQ9NDA4XT0iUmVxdWVzdFRpbWVvdXQiLGNbYy5Db25mbGljdD00MDldPSJDb25mbGljdCIsY1tjLkdvbmU9NDEwXT0iR29uZSIsY1tjLkxlbmd0aFJlcXVpcmVkPTQxMV09Ikxlbmd0aFJlcXVpcmVkIixjW2MuUHJlY29uZGl0aW9uRmFpbGVkPTQxMl09IlByZWNvbmRpdGlvbkZhaWxlZCIs''@;'; put 'put ''Y1tjLlBheWxvYWRUb29MYXJnZT00MTNdPSJQYXlsb2FkVG9vTGFyZ2UiLGNbYy5VcmlUb29Mb25nPTQxNF09IlVyaVRvb0xvbmciLGNbYy5VbnN1cHBvcnRlZE1lZGlhVHlwZT00MTVdPSJVbnN1cHBvcnRlZE1lZGlhVHlwZSIsY1tjLlJhbmdlTm90U2F0aXNmaWFibGU9NDE2XT0iUmFuZ2VO''@;'; put 'put ''b3RTYXRpc2ZpYWJsZSIsY1tjLkV4cGVjdGF0aW9uRmFpbGVkPTQxN109IkV4cGVjdGF0aW9uRmFpbGVkIixjW2MuSW1BVGVhcG90PTQxOF09IkltQVRlYXBvdCIsY1tjLk1pc2RpcmVjdGVkUmVxdWVzdD00MjFdPSJNaXNkaXJlY3RlZFJlcXVlc3QiLGNbYy5VbnByb2Nlc3NhYmxlRW50aXR5''@;'; put 'put ''PTQyMl09IlVucHJvY2Vzc2FibGVFbnRpdHkiLGNbYy5Mb2NrZWQ9NDIzXT0iTG9ja2VkIixjW2MuRmFpbGVkRGVwZW5kZW5jeT00MjRdPSJGYWlsZWREZXBlbmRlbmN5IixjW2MuVG9vRWFybHk9NDI1XT0iVG9vRWFybHkiLGNbYy5VcGdyYWRlUmVxdWlyZWQ9NDI2XT0iVXBncmFkZVJlcXVp''@;'; put 'put ''cmVkIixjW2MuUHJlY29uZGl0aW9uUmVxdWlyZWQ9NDI4XT0iUHJlY29uZGl0aW9uUmVxdWlyZWQiLGNbYy5Ub29NYW55UmVxdWVzdHM9NDI5XT0iVG9vTWFueVJlcXVlc3RzIixjW2MuUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlPTQzMV09IlJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJn''@;'; put 'put ''ZSIsY1tjLlVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zPTQ1MV09IlVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zIixjW2MuSW50ZXJuYWxTZXJ2ZXJFcnJvcj01MDBdPSJJbnRlcm5hbFNlcnZlckVycm9yIixjW2MuTm90SW1wbGVtZW50ZWQ9NTAxXT0iTm90SW1wbGVtZW50ZWQiLGNbYy5C''@;'; put 'put ''YWRHYXRld2F5PTUwMl09IkJhZEdhdGV3YXkiLGNbYy5TZXJ2aWNlVW5hdmFpbGFibGU9NTAzXT0iU2VydmljZVVuYXZhaWxhYmxlIixjW2MuR2F0ZXdheVRpbWVvdXQ9NTA0XT0iR2F0ZXdheVRpbWVvdXQiLGNbYy5IdHRwVmVyc2lvbk5vdFN1cHBvcnRlZD01MDVdPSJIdHRwVmVyc2lvbk5v''@;'; put 'put ''dFN1cHBvcnRlZCIsY1tjLlZhcmlhbnRBbHNvTmVnb3RpYXRlcz01MDZdPSJWYXJpYW50QWxzb05lZ290aWF0ZXMiLGNbYy5JbnN1ZmZpY2llbnRTdG9yYWdlPTUwN109Ikluc3VmZmljaWVudFN0b3JhZ2UiLGNbYy5Mb29wRGV0ZWN0ZWQ9NTA4XT0iTG9vcERldGVjdGVkIixjW2MuTm90RXh0''@;'; put 'put ''ZW5kZWQ9NTEwXT0iTm90RXh0ZW5kZWQiLGNbYy5OZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZD01MTFdPSJOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZCIsY30obnh8fHt9KTtmdW5jdGlvbiBoVyhjLGwpe3JldHVybntib2R5OmwsaGVhZGVyczpjLmhlYWRlcnMsY29udGV4dDpj''@;'; put 'put ''LmNvbnRleHQsb2JzZXJ2ZTpjLm9ic2VydmUscGFyYW1zOmMucGFyYW1zLHJlcG9ydFByb2dyZXNzOmMucmVwb3J0UHJvZ3Jlc3MscmVzcG9uc2VUeXBlOmMucmVzcG9uc2VUeXBlLHdpdGhDcmVkZW50aWFsczpjLndpdGhDcmVkZW50aWFscyx0cmFuc2ZlckNhY2hlOmMudHJhbnNmZXJDYWNo''@;'; put 'put ''ZX19bGV0IGZXPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5oYW5kbGVyPWF9cmVxdWVzdChhLGQsaD17fSl7bGV0IGY7aWYoYSBpbnN0YW5jZW9mIHR4KWY9YTtlbHNle2xldCBELFo7RD1oLmhlYWRlcnMgaW5zdGFuY2VvZiB3Mj9oLmhlYWRlcnM6bmV3IHcyKGguaGVhZGVy''@;'; put 'put ''cyksaC5wYXJhbXMmJihaPWgucGFyYW1zIGluc3RhbmNlb2YgaW0/aC5wYXJhbXM6bmV3IGltKHtmcm9tT2JqZWN0OmgucGFyYW1zfSkpLGY9bmV3IHR4KGEsZCx2b2lkIDAhPT1oLmJvZHk/aC5ib2R5Om51bGwse2hlYWRlcnM6RCxjb250ZXh0OmguY29udGV4dCxwYXJhbXM6WixyZXBvcnRQ''@;'; put 'put ''cm9ncmVzczpoLnJlcG9ydFByb2dyZXNzLHJlc3BvbnNlVHlwZTpoLnJlc3BvbnNlVHlwZXx8Impzb24iLHdpdGhDcmVkZW50aWFsczpoLndpdGhDcmVkZW50aWFscyx0cmFuc2ZlckNhY2hlOmgudHJhbnNmZXJDYWNoZX0pfWNvbnN0IHY9ZmEoZikucGlwZShLYihEPT50aGlzLmhhbmRsZXIu''@;'; put 'put ''aGFuZGxlKEQpKSk7aWYoYSBpbnN0YW5jZW9mIHR4fHwiZXZlbnRzIj09PWgub2JzZXJ2ZSlyZXR1cm4gdjtjb25zdCBNPXYucGlwZShXbChEPT5EIGluc3RhbmNlb2YgWDgpKTtzd2l0Y2goaC5vYnNlcnZlfHwiYm9keSIpe2Nhc2UiYm9keSI6c3dpdGNoKGYucmVzcG9uc2VUeXBlKXtjYXNl''@;'; put 'put ''ImFycmF5YnVmZmVyIjpyZXR1cm4gTS5waXBlKE9yKEQ9PntpZihudWxsIT09RC5ib2R5JiYhKEQuYm9keSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSl0aHJvdyBuZXcgRXJyb3IoIlJlc3BvbnNlIGlzIG5vdCBhbiBBcnJheUJ1ZmZlci4iKTtyZXR1cm4gRC5ib2R5fSkpO2Nhc2UiYmxvYiI6''@;'; put 'put ''cmV0dXJuIE0ucGlwZShPcihEPT57aWYobnVsbCE9PUQuYm9keSYmIShELmJvZHkgaW5zdGFuY2VvZiBCbG9iKSl0aHJvdyBuZXcgRXJyb3IoIlJlc3BvbnNlIGlzIG5vdCBhIEJsb2IuIik7cmV0dXJuIEQuYm9keX0pKTtjYXNlInRleHQiOnJldHVybiBNLnBpcGUoT3IoRD0+e2lmKG51bGwh''@;'; put 'put ''PT1ELmJvZHkmJiJzdHJpbmciIT10eXBlb2YgRC5ib2R5KXRocm93IG5ldyBFcnJvcigiUmVzcG9uc2UgaXMgbm90IGEgc3RyaW5nLiIpO3JldHVybiBELmJvZHl9KSk7ZGVmYXVsdDpyZXR1cm4gTS5waXBlKE9yKEQ9PkQuYm9keSkpfWNhc2UicmVzcG9uc2UiOnJldHVybiBNO2RlZmF1bHQ6''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKGBVbnJlYWNoYWJsZTogdW5oYW5kbGVkIG9ic2VydmUgdHlwZSAke2gub2JzZXJ2ZX19YCl9fWRlbGV0ZShhLGQ9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIkRFTEVURSIsYSxkKX1nZXQoYSxkPXt9KXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJHRVQiLGEsZCl9aGVh''@;'; put 'put ''ZChhLGQ9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIkhFQUQiLGEsZCl9anNvbnAoYSxkKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KCJKU09OUCIsYSx7cGFyYW1zOihuZXcgaW0pLmFwcGVuZChkLCJKU09OUF9DQUxMQkFDSyIpLG9ic2VydmU6ImJvZHkiLHJlc3BvbnNlVHlwZToianNvbiJ9KX1v''@;'; put 'put ''cHRpb25zKGEsZD17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiT1BUSU9OUyIsYSxkKX1wYXRjaChhLGQsaD17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiUEFUQ0giLGEsaFcoaCxkKSl9cG9zdChhLGQsaD17fSl7cmV0dXJuIHRoaXMucmVxdWVzdCgiUE9TVCIsYSxoVyhoLGQpKX1wdXQoYSxk''@;'; put 'put ''LGg9e30pe3JldHVybiB0aGlzLnJlcXVlc3QoIlBVVCIsYSxoVyhoLGQpKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShNcih6UikpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0''@;'; put 'put ''dXJuIGN9KSgpO2Z1bmN0aW9uIGRjZShjLGwpe3JldHVybiBsKGMpfWZ1bmN0aW9uIENUZShjLGwpe3JldHVybihhLGQpPT5sLmludGVyY2VwdChhLHtoYW5kbGU6aD0+YyhoLGQpfSl9Y29uc3QgTVRlPW5ldyBTdCgiIikscng9bmV3IFN0KCIiKSxoY2U9bmV3IFN0KCIiKSxmY2U9bmV3IFN0''@;'; put 'put ''KCIiKTtmdW5jdGlvbiB4VGUoKXtsZXQgYz1udWxsO3JldHVybihsLGEpPT57bnVsbD09PWMmJihjPShoaShNVGUse29wdGlvbmFsOiEwfSk/P1tdKS5yZWR1Y2VSaWdodChDVGUsZGNlKSk7Y29uc3QgZD1oaShrZiksaD1kLmFkZCgpO3JldHVybiBjKGwsYSkucGlwZShqTSgoKT0+ZC5yZW1v''@;'; put 'put ''dmUoaCkpKX19bGV0IHBjZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgelJ7Y29uc3RydWN0b3IoYSxkKXtzdXBlcigpLHRoaXMuYmFja2VuZD1hLHRoaXMuaW5qZWN0b3I9ZCx0aGlzLmNoYWluPW51bGwsdGhpcy5wZW5kaW5nVGFza3M9aGkoa2YpO2NvbnN0IGg9aGkoZmNlLHtvcHRpb25hbDoh''@;'; put 'put ''MH0pO3RoaXMuYmFja2VuZD1oPz9hfWhhbmRsZShhKXtpZihudWxsPT09dGhpcy5jaGFpbil7Y29uc3QgaD1BcnJheS5mcm9tKG5ldyBTZXQoWy4uLnRoaXMuaW5qZWN0b3IuZ2V0KHJ4KSwuLi50aGlzLmluamVjdG9yLmdldChoY2UsW10pXSkpO3RoaXMuY2hhaW49aC5yZWR1Y2VSaWdodCgo''@;'; put 'put ''Zix2KT0+ZnVuY3Rpb24gU1RlKGMsbCxhKXtyZXR1cm4oZCxoKT0+WDAoYSwoKT0+bChkLGY9PmMoZixoKSkpfShmLHYsdGhpcy5pbmplY3RvciksZGNlKX1jb25zdCBkPXRoaXMucGVuZGluZ1Rhc2tzLmFkZCgpO3JldHVybiB0aGlzLmNoYWluKGEsaD0+dGhpcy5iYWNrZW5kLmhhbmRsZSho''@;'; put 'put ''KSkucGlwZShqTSgoKT0+dGhpcy5wZW5kaW5nVGFza3MucmVtb3ZlKGQpKSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoTXIoVVIpLE1yKGNjKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZh''@;'; put 'put ''Y30pfX1yZXR1cm4gY30pKCk7Y29uc3QgRFRlPS9eXClcXVx9Jyw/XG4vO2xldCBtY2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnhockZhY3Rvcnk9YX1oYW5kbGUoYSl7aWYoIkpTT05QIj09PWEubWV0aG9kKXRocm93IG5ldyBlcigtMjgwMCwhMSk7Y29uc3QgZD10aGlz''@;'; put 'put ''LnhockZhY3Rvcnk7cmV0dXJuKGQuXHUwMjc1bG9hZEltcGw/V3UoZC5cdTAyNzVsb2FkSW1wbCgpKTpmYShudWxsKSkucGlwZShWMSgoKT0+bmV3IFh0KGY9Pntjb25zdCB2PWQuYnVpbGQoKTtpZih2Lm9wZW4oYS5tZXRob2QsYS51cmxXaXRoUGFyYW1zKSxhLndpdGhDcmVkZW50aWFscyYm''@;'; put 'put ''KHYud2l0aENyZWRlbnRpYWxzPSEwKSxhLmhlYWRlcnMuZm9yRWFjaCgocWUsbnQpPT52LnNldFJlcXVlc3RIZWFkZXIocWUsbnQuam9pbigiLCIpKSksYS5oZWFkZXJzLmhhcygiQWNjZXB0Iil8fHYuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IiwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9w''@;'; put 'put ''bGFpbiwgKi8qIiksIWEuaGVhZGVycy5oYXMoIkNvbnRlbnQtVHlwZSIpKXtjb25zdCBxZT1hLmRldGVjdENvbnRlbnRUeXBlSGVhZGVyKCk7bnVsbCE9PXFlJiZ2LnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIscWUpfWlmKGEucmVzcG9uc2VUeXBlKXtjb25zdCBxZT1hLnJlc3Bv''@;'; put 'put ''bnNlVHlwZS50b0xvd2VyQ2FzZSgpO3YucmVzcG9uc2VUeXBlPSJqc29uIiE9PXFlP3FlOiJ0ZXh0In1jb25zdCBNPWEuc2VyaWFsaXplQm9keSgpO2xldCBEPW51bGw7Y29uc3QgWj0oKT0+e2lmKG51bGwhPT1EKXJldHVybiBEO2NvbnN0IHFlPXYuc3RhdHVzVGV4dHx8Ik9LIixudD1uZXcg''@;'; put 'put ''dzIodi5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksbHQ9ZnVuY3Rpb24gSVRlKGMpe3JldHVybiJyZXNwb25zZVVSTCJpbiBjJiZjLnJlc3BvbnNlVVJMP2MucmVzcG9uc2VVUkw6L15YLVJlcXVlc3QtVVJMOi9tLnRlc3QoYy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk/Yy5nZXRSZXNwb25z''@;'; put 'put ''ZUhlYWRlcigiWC1SZXF1ZXN0LVVSTCIpOm51bGx9KHYpfHxhLnVybDtyZXR1cm4gRD1uZXcgV1Ioe2hlYWRlcnM6bnQsc3RhdHVzOnYuc3RhdHVzLHN0YXR1c1RleHQ6cWUsdXJsOmx0fSksRH0sbmU9KCk9PntsZXR7aGVhZGVyczpxZSxzdGF0dXM6bnQsc3RhdHVzVGV4dDpsdCx1cmw6bXR9''@;'; put 'put ''PVooKSxKdD1udWxsO250IT09bnguTm9Db250ZW50JiYoSnQ9dHlwZW9mIHYucmVzcG9uc2U+InUiP3YucmVzcG9uc2VUZXh0OnYucmVzcG9uc2UpLDA9PT1udCYmKG50PUp0P254Lk9rOjApO2xldCB5bj1udD49MjAwJiZudDwzMDA7aWYoImpzb24iPT09YS5yZXNwb25zZVR5cGUmJiJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgSnQpe2NvbnN0IENuPUp0O0p0PUp0LnJlcGxhY2UoRFRlLCIiKTt0cnl7SnQ9IiIhPT1KdD9KU09OLnBhcnNlKEp0KTpudWxsfWNhdGNoKHRuKXtKdD1Dbix5biYmKHluPSExLEp0PXtlcnJvcjp0bix0ZXh0Okp0fSl9fXluPyhmLm5leHQobmV3IFg4KHtib2R5Okp0LGhl''@;'; put 'put ''YWRlcnM6cWUsc3RhdHVzOm50LHN0YXR1c1RleHQ6bHQsdXJsOm10fHx2b2lkIDB9KSksZi5jb21wbGV0ZSgpKTpmLmVycm9yKG5ldyBkeSh7ZXJyb3I6SnQsaGVhZGVyczpxZSxzdGF0dXM6bnQsc3RhdHVzVGV4dDpsdCx1cmw6bXR8fHZvaWQgMH0pKX0sY2U9cWU9Pntjb25zdHt1cmw6bnR9''@;'; put 'put ''PVooKSxsdD1uZXcgZHkoe2Vycm9yOnFlLHN0YXR1czp2LnN0YXR1c3x8MCxzdGF0dXNUZXh0OnYuc3RhdHVzVGV4dHx8IlVua25vd24gRXJyb3IiLHVybDpudHx8dm9pZCAwfSk7Zi5lcnJvcihsdCl9O2xldCBiZT0hMTtjb25zdCBFZT1xZT0+e2JlfHwoZi5uZXh0KFooKSksYmU9ITApO2xl''@;'; put 'put ''dCBudD17dHlwZTpvbS5Eb3dubG9hZFByb2dyZXNzLGxvYWRlZDpxZS5sb2FkZWR9O3FlLmxlbmd0aENvbXB1dGFibGUmJihudC50b3RhbD1xZS50b3RhbCksInRleHQiPT09YS5yZXNwb25zZVR5cGUmJnYucmVzcG9uc2VUZXh0JiYobnQucGFydGlhbFRleHQ9di5yZXNwb25zZVRleHQpLGYu''@;'; put 'put ''bmV4dChudCl9LEJlPXFlPT57bGV0IG50PXt0eXBlOm9tLlVwbG9hZFByb2dyZXNzLGxvYWRlZDpxZS5sb2FkZWR9O3FlLmxlbmd0aENvbXB1dGFibGUmJihudC50b3RhbD1xZS50b3RhbCksZi5uZXh0KG50KX07cmV0dXJuIHYuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsbmUpLHYuYWRkRXZl''@;'; put 'put ''bnRMaXN0ZW5lcigiZXJyb3IiLGNlKSx2LmFkZEV2ZW50TGlzdGVuZXIoInRpbWVvdXQiLGNlKSx2LmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixjZSksYS5yZXBvcnRQcm9ncmVzcyYmKHYuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLEVlKSxudWxsIT09TSYmdi51cGxvYWQmJnYudXBs''@;'; put 'put ''b2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixCZSkpLHYuc2VuZChNKSxmLm5leHQoe3R5cGU6b20uU2VudH0pLCgpPT57di5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsY2UpLHYucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGNlKSx2LnJlbW92ZUV2ZW50TGlzdGVuZXIo''@;'; put 'put ''ImxvYWQiLG5lKSx2LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRpbWVvdXQiLGNlKSxhLnJlcG9ydFByb2dyZXNzJiYodi5yZW1vdmVFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsRWUpLG51bGwhPT1NJiZ2LnVwbG9hZCYmdi51cGxvYWQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLEJl''@;'; put 'put ''KSksdi5yZWFkeVN0YXRlIT09di5ET05FJiZ2LmFib3J0KCl9fSkpKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShNcihLb2UpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVy''@;'; put 'put ''biBjfSkoKTtjb25zdCBtVz1uZXcgU3QoIiIpLHZjZT1uZXcgU3QoIiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PiJYU1JGLVRPS0VOIn0pLGJjZT1uZXcgU3QoIiIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PiJYLVhTUkYtVE9LRU4ifSk7Y2xhc3MgeWNle31sZXQg''@;'; put 'put ''T1RlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZG9jPWEsdGhpcy5wbGF0Zm9ybT1kLHRoaXMuY29va2llTmFtZT1oLHRoaXMubGFzdENvb2tpZVN0cmluZz0iIix0aGlzLmxhc3RUb2tlbj1udWxsLHRoaXMucGFyc2VDb3VudD0wfWdldFRva2VuKCl7aWYoInNlcnZl''@;'; put 'put ''ciI9PT10aGlzLnBsYXRmb3JtKXJldHVybiBudWxsO2NvbnN0IGE9dGhpcy5kb2MuY29va2llfHwiIjtyZXR1cm4gYSE9PXRoaXMubGFzdENvb2tpZVN0cmluZyYmKHRoaXMucGFyc2VDb3VudCsrLHRoaXMubGFzdFRva2VuPVZvZShhLHRoaXMuY29va2llTmFtZSksdGhpcy5sYXN0Q29va2ll''@;'; put 'put ''U3RyaW5nPWEpLHRoaXMubGFzdFRva2VufXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKE1yKHZzKSxNcihvYSksTXIodmNlKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4g''@;'; put 'put ''Y30pKCk7ZnVuY3Rpb24gUFRlKGMsbCl7Y29uc3QgYT1jLnVybC50b0xvd2VyQ2FzZSgpO2lmKCFoaShtVyl8fCJHRVQiPT09Yy5tZXRob2R8fCJIRUFEIj09PWMubWV0aG9kfHxhLnN0YXJ0c1dpdGgoImh0dHA6Ly8iKXx8YS5zdGFydHNXaXRoKCJodHRwczovLyIpKXJldHVybiBsKGMpO2Nv''@;'; put 'put ''bnN0IGQ9aGkoeWNlKS5nZXRUb2tlbigpLGg9aGkoYmNlKTtyZXR1cm4gbnVsbCE9ZCYmIWMuaGVhZGVycy5oYXMoaCkmJihjPWMuY2xvbmUoe2hlYWRlcnM6Yy5oZWFkZXJzLnNldChoLGQpfSkpLGwoYyl9dmFyIGFtPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuSW50ZXJjZXB0b3JzPTBdPSJJ''@;'; put 'put ''bnRlcmNlcHRvcnMiLGNbYy5MZWdhY3lJbnRlcmNlcHRvcnM9MV09IkxlZ2FjeUludGVyY2VwdG9ycyIsY1tjLkN1c3RvbVhzcmZDb25maWd1cmF0aW9uPTJdPSJDdXN0b21Yc3JmQ29uZmlndXJhdGlvbiIsY1tjLk5vWHNyZlByb3RlY3Rpb249M109Ik5vWHNyZlByb3RlY3Rpb24iLGNbYy5K''@;'; put 'put ''c29ucFN1cHBvcnQ9NF09Ikpzb25wU3VwcG9ydCIsY1tjLlJlcXVlc3RzTWFkZVZpYVBhcmVudD01XT0iUmVxdWVzdHNNYWRlVmlhUGFyZW50IixjW2MuRmV0Y2g9Nl09IkZldGNoIixjfShhbXx8e30pO2Z1bmN0aW9uIEo4KGMsbCl7cmV0dXJue1x1MDI3NWtpbmQ6YyxcdTAyNzVwcm92aWRl''@;'; put 'put ''cnM6bH19ZnVuY3Rpb24gRlRlKC4uLmMpe2NvbnN0IGw9W2ZXLG1jZSxwY2Use3Byb3ZpZGU6elIsdXNlRXhpc3Rpbmc6cGNlfSx7cHJvdmlkZTpVUix1c2VFeGlzdGluZzptY2V9LHtwcm92aWRlOnJ4LHVzZVZhbHVlOlBUZSxtdWx0aTohMH0se3Byb3ZpZGU6bVcsdXNlVmFsdWU6ITB9LHtw''@;'; put 'put ''cm92aWRlOnljZSx1c2VDbGFzczpPVGV9XTtmb3IoY29uc3QgYSBvZiBjKWwucHVzaCguLi5hLlx1MDI3NXByb3ZpZGVycyk7cmV0dXJuIGZ1bmN0aW9uIGZmKGMpe3JldHVybntcdTAyNzVwcm92aWRlcnM6Y319KGwpfWNvbnN0IF9jZT1uZXcgU3QoIiIpO2xldCBOVGU9KCgpPT57Y2xhc3Mg''@;'; put 'put ''Y3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe3Byb3ZpZGVyczpbRlRlKEo4KGFtLkxlZ2FjeUludGVyY2VwdG9ycyxbe3Byb3ZpZGU6''@;'; put 'put ''X2NlLHVzZUZhY3Rvcnk6eFRlfSx7cHJvdmlkZTpyeCx1c2VFeGlzdGluZzpfY2UsbXVsdGk6ITB9XSkpXX0pfX1yZXR1cm4gY30pKCksQWNlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmh0dHA9YSx0aGlzLmFwcFN0b3JlU2VydmljZT1kLHRoaXMudXJsPSIiLHRoaXMu''@;'; put 'put ''ZHJpdmVVcmw9IiIsdGhpcy5odHRwT3B0aW9ucz17d2l0aENyZWRlbnRpYWxzOiEwfX1zZXR1cCgpe2NvbnN0IGE9dGhpcy5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKTt0aGlzLnVybD1gJHthPy5zZXJ2ZXJVcmx8fCIifS9TQVNqc0FwaWAsdGhpcy5kcml2ZVVybD1g''@;'; put 'put ''JHt0aGlzLnVybH0vZHJpdmVgfWdldFNlcnZlckluZm8oKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLnVybH0vaW5mb2ApfWdldEZpbGVGcm9tRHJpdmUoYSl7cmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5kcml2ZVVybH0vZmlsZS8/X2ZpbGVQYXRoPSR7YX1gLHRoaXMuaHR0''@;'; put 'put ''cE9wdGlvbnMpfWdldEZvbGRlckNvbnRlbnRzRnJvbURyaXZlKGEpe3JldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuZHJpdmVVcmx9L2ZvbGRlcj9fZm9sZGVyUGF0aD0ke2F9YCx0aGlzLmh0dHBPcHRpb25zKX1nZXRGaWxlVHJlZUZyb21Ecml2ZSgpe3JldHVybiB0aGlzLmh0dHAuZ2V0''@;'; put 'put ''KGAke3RoaXMuZHJpdmVVcmx9L2ZpbGV0cmVlYCx0aGlzLmh0dHBPcHRpb25zKX1nZXRGaWxlRnJvbUZpbGVUcmVlKGEpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e3RoaXMuZ2V0RmlsZVRyZWVGcm9tRHJpdmUoKS5zdWJzY3JpYmUoZj0+e2NvbnN0IE09dGhpcy5maW5kSW5UcmVlKGYu''@;'; put 'put ''dHJlZSxhKTtkKE0pfSl9KX1maW5kSW5UcmVlKGEsZCl7aWYoYS5yZWxhdGl2ZVBhdGg9PT1kKXJldHVybiBhO2ZvcihsZXQgaCBvZiBhLmNoaWxkcmVuKXtjb25zdCBmPXRoaXMuZmluZEluVHJlZShoLGQpO2lmKGYpcmV0dXJuIGZ9fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihk''@;'; put 'put ''KXtyZXR1cm4gbmV3KGR8fGMpKE1yKGZXKSxNcihxOCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpLEpzPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0p''@;'; put 'put ''e3RoaXMuYXBwU3RvcmVTZXJ2aWNlPWEsdGhpcy51c2VyU2VydmljZT1kLHRoaXMuZXZlbnRTZXJ2aWNlPWgsdGhpcy5zYXNqc1NlcnZpY2U9Zix0aGlzLmxvZ2dlclNlcnZpY2U9dix0aGlzLnJvdXRlcj1NLHRoaXMubG9hZFN0YXJ0dXBTZXJ2aWNlRW1pdHRlcj1uZXcgcXIsdGhpcy5pbmNv''@;'; put 'put ''cnJlY3RTaXRlSWRFbWl0dGVyPW5ldyBxcix0aGlzLnJlcXVlc3RTaXRlSWRFbWl0dGVyPW5ldyBxcix0aGlzLnNhc2pzQWRhcHRlcj1uZXcob2NlKCkpLHRoaXMuYXBwTG9jQ2hlY2tQZW5kaW5nPSExLHRoaXMuc2hvdWxkTG9naW49bmV3IFFyKCExKSx0aGlzLmxpY2Vuc2Vfc2l0ZV9pZD1u''@;'; put 'put ''ZXcgUXIobnVsbCl9c2FzU2VydmljZUluaXQoKXtpZih0aGlzLmRjQWRhcHRlclNldHRpbmdzPXRoaXMuYXBwU3RvcmVTZXJ2aWNlLmdldERjQWRhcHRlclNldHRpbmdzKCksdGhpcy5zYXNqc1NlcnZpY2Uuc2V0dXAoKSx0aGlzLmRjQWRhcHRlclNldHRpbmdzKXtzd2l0Y2godGhpcy5zYXNq''@;'; put 'put ''c0FkYXB0ZXI9bmV3KG9jZSgpKSh0aGlzLmRjQWRhcHRlclNldHRpbmdzKSx0aGlzLmRjQWRhcHRlclNldHRpbmdzLnNlcnZlclR5cGUpe2Nhc2UgTTAuWS5TYXNWaXlhOnRoaXMuY2hlY2tWaXlhRGVwbG95KHRoaXMuZGNBZGFwdGVyU2V0dGluZ3MuYXBwTG9jfHwiIik7YnJlYWs7Y2FzZSBN''@;'; put 'put ''MC5ZLlNhczk6dGhpcy5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyLmVtaXQoKTticmVhaztjYXNlIE0wLlkuU2FzanM6dGhpcy5jaGVja1Nhc2pzRGVwbG95KCl9IlJlZGlyZWN0ZWQiPT09dGhpcy5nZXRTYXNqc0NvbmZpZygpLmxvZ2luTWVjaGFuaXNtJiZ0aGlzLnNob3VsZExvZ2luLnN1''@;'; put 'put ''YnNjcmliZShhPT57YSYmdGhpcy5zYXNqc0FkYXB0ZXIubG9nSW4oKS50aGVuKGQ9Pntjb25zb2xlLmxvZygicmVzIixkKX0pfSl9ZWxzZSB0aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJFcnJvciIsIkFkYXB0ZXIgc2V0dGluZ3MgKGluZGV4Lmh0bWwpIGFyZSBub3QgcHJlc2Vu''@;'; put 'put ''dC4iKX1yZXF1ZXN0KGEsZCxoLGYpe3JldHVybiBmfHwoZj17fSksdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZ1JlcXVlc3REYXRhKGE9InNlcnZpY2VzLyIrYSxkKSxuZXcgUHJvbWlzZSgodixNKT0+e3RoaXMuc2FzanNBZGFwdGVyLnJlcXVlc3QoYSxkLGgsKCk9Pnt0aGlzLnNob3VsZExvZ2lu''@;'; put 'put ''Lm5leHQoITApfSkudGhlbihEPT57Y29uc3QgWj10aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNSZXF1ZXN0cygpLmZpbmQobmU9Pm5lLnNlcnZpY2VMaW5rPT09YSk7aWYoITE9PT1ELmxvZ2luJiYodGhpcy5zaG91bGRMb2dpbi5uZXh0KCEwKSxNKHthZGFwdGVyUmVzcG9uc2U6ITEsbG9nOlo/''@;'; put 'put ''LmxvZ0ZpbGV9KSksIXRoaXMudXNlclNlcnZpY2UudXNlciYmRC5NRl9HRVRVU0VSJiYodGhpcy51c2VyU2VydmljZS51c2VyPXt1c2VybmFtZTpELk1GX0dFVFVTRVJ9KSxELlNZU1NJVEUmJih0aGlzLnJlcXVlc3RTaXRlSWRFbWl0dGVyLmVtaXQoRC5TWVNTSVRFKSx0aGlzLmdldExpY2Vu''@;'; put 'put ''c2VTaXRlSWQoKS5sZW5ndGg+MCYmKHRoaXMuZ2V0TGljZW5zZVNpdGVJZCgpLmluY2x1ZGVzKEQuU1lTU0lURSl8fHRoaXMuaW5jb3JyZWN0U2l0ZUlkRW1pdHRlci5lbWl0KEQuU1lTU0lURSkpKSw0MDQ9PT1ELnN0YXR1cyYmTSh7YWRhcHRlclJlc3BvbnNlOntNRVNTQUdFOkQuYm9keXx8''@;'; put 'put ''IlNBUyBSZXNwb25kZWQgd2l0aCBlcnJvciJ9LGxvZzpaPy5sb2dGaWxlfSksdHlwZW9mIEQuc2FzanNBYm9ydDwidSIpe2NvbnN0IG5lPUQsY2U9bmUuc2FzanNBYm9ydFswXS5NU0csYmU9bmUuc2FzanNBYm9ydFswXS5NQUM7aWYoY2UuaW5jbHVkZXMoIkRhdGFfQ29udHJvbGxlcl9TZXR0''@;'; put 'put ''aW5ncyhTdG9yZWRQcm9jZXNzKSBub3QgZm91bmQiKSlyZXR1cm4gdGhpcy5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95Iiksdm9pZCBNKHthZGFwdGVyUmVzcG9uc2U6e2Vycm9yOmNlfSxsb2c6Wj8ubG9nRmlsZX0p''@;'; put 'put ''O2Y/LnN1cHByZXNzU3VjY2Vzc0Fib3J0TW9kYWx8fHRoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKGEucmVwbGFjZSgic2VydmljZXMvIiwiIiksY2Use1NZU1dBUk5JTkdURVhUOm5lLlNZU1dBUk5JTkdURVhULFNZU0VSUk9SVEVYVDpuZS5TWVNFUlJPUlRFWFQsTUFDOmJlfSks''@;'; put 'put ''TSh7YWRhcHRlclJlc3BvbnNlOntlcnJvcjpjZX0sbG9nOlo/LmxvZ0ZpbGV9KX12KHthZGFwdGVyUmVzcG9uc2U6RCxsb2c6Wj8ubG9nRmlsZX0pfSxEPT57Y29uc29sZS5lcnJvcihEKTtjb25zdCBaPXRoaXMuc2FzanNBZGFwdGVyLmdldFNhc1JlcXVlc3RzKCkuZmluZChuZT0+bmUuc2Vy''@;'; put 'put ''dmljZUxpbms9PT1hKTtpZihELmVycm9yKXtsZXQgY2UsbmU9RC5lcnJvci5tZXNzYWdlO0QuZXJyb3IuZGV0YWlscyYmRC5lcnJvci5kZXRhaWxzLmxvZyYmKGNlPUQuZXJyb3IuZGV0YWlscy5sb2cpLCghbmV8fG5lLnRyaW0oKS5sZW5ndGg8MSkmJihuZT0iU0FTIFNlcnZpY2UgZXJyb3Ig''@;'; put 'put ''b2N1cnJlZCIpLGY/LnN1cHByZXNzRXJyb3JBYm9ydE1vZGFsfHx0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChhLG5lLHtMT0c6Y2V9LCJSZXF1ZXN0IGVycm9yIiksTSh7YWRhcHRlclJlc3BvbnNlOntlcnJvcjpuZX0sbG9nOlo/LmxvZ0ZpbGV9KX1NKHthZGFwdGVyUmVzcG9u''@;'; put 'put ''c2U6RCxsb2c6Wj8ubG9nRmlsZX0pfSl9KX11cGxvYWRGaWxlKGEsZCxoKXtyZXR1cm4gbmV3IFByb21pc2UoKGYsdik9Pnt0aGlzLnNhc2pzQWRhcHRlci51cGxvYWRGaWxlKGEsZCxoKS50aGVuKE09Pntjb25zdCBEPXRoaXMuc2FzanNBZGFwdGVyLmdldFNhc1JlcXVlc3RzKCkuZmluZCha''@;'; put 'put ''PT4ic2VydmljZXMvZWRpdG9ycy9sb2FkZmlsZSI9PT1aLnNlcnZpY2VMaW5rKTtmKHthZGFwdGVyUmVzcG9uc2U6TSxsb2c6RD8ubG9nRmlsZX0pfSxNPT57Y29uc3QgRD10aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNSZXF1ZXN0cygpLmZpbmQoWj0+InNlcnZpY2VzL2VkaXRvcnMvbG9hZGZp''@;'; put 'put ''bGUiPT09Wi5zZXJ2aWNlTGluayk7dih7cmVzcG9uc2U6TSxsb2c6RD8ubG9nRmlsZX0pfSl9KX1sb2dpbihhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2NvbnN0IGY9aC5nZXRTZXJ2ZXJUeXBlKCk9PT1NMC5ZLlNhc2pzPyJjbGllbnRJRDEiOnZvaWQgMDtyZXR1cm4g''@;'; put 'put ''aC5zYXNqc0FkYXB0ZXIubG9nSW4oYSxkLGYpLnRoZW4odj0+KHYuaXNMb2dnZWRJbiYmKGgudXNlclNlcnZpY2UudXNlcj17dXNlcm5hbWU6di51c2VyTmFtZX0saC5hcHBMb2NDaGVja1BlbmRpbmcmJihoLmNoZWNrVml5YURlcGxveShoLmRjQWRhcHRlclNldHRpbmdzPy5hcHBMb2N8fCIi''@;'; put 'put ''KSxoLmFwcExvY0NoZWNrUGVuZGluZz0hMSkpLGguc2hvdWxkTG9naW4ubmV4dCghdi5pc0xvZ2dlZEluKSx2LmlzTG9nZ2VkSW4pLHY9Pihjb25zb2xlLmVycm9yKHYpLGguc2hvdWxkTG9naW4ubmV4dCghMCksITEpKS5jYXRjaCh2PT4oNDAzPT09diYmY29uc29sZS5lcnJvcigiSW52YWxp''@;'; put 'put ''ZCBob3N0IiksITEpKX0pKCl9Z2V0TGljZW5zZVNpdGVJZCgpe3JldHVybiB0aGlzLmxpY2Vuc2Vfc2l0ZV9pZC52YWx1ZXx8W119c2V0TGljZW5zZVNpdGVJZChhKXt0aGlzLmxpY2Vuc2Vfc2l0ZV9pZC5uZXh0KCJvYmplY3QiPT10eXBlb2YgYT9hOlthXSl9Y2hlY2tTYXNqc0RlcGxveSgp''@;'; put 'put ''e3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2NvbnN0IGg9YCR7YS5nZXRTYXNqc0NvbmZpZygpLmFwcExvY30vc2VydmljZXMvYWRtaW5gO2Euc2FzanNTZXJ2aWNlLmdldEZvbGRlckNvbnRlbnRzRnJvbURyaXZlKGgpLnN1YnNjcmliZShmPT57Zi5maWxlcy5pbmNsdWRlcygi''@;'; put 'put ''bWFrZWRhdGEuc2FzIik/KGEuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpKTooYS5sb2FkU3RhcnR1cFNlcnZpY2VFbWl0dGVyLmVtaXQoKSxhLnJvdXRlci51cmwuaW5jbHVkZXMoImRlcGxveSIpJiZhLnJvdXRlci5u''@;'; put 'put ''YXZpZ2F0ZUJ5VXJsKCIvIikpfSxmPT57Zi5lcnJvci5pbmNsdWRlcygiVW5hdXRob3JpemVkIik/KGEuc2hvdWxkTG9naW4ubmV4dCghMCksYS5zaG91bGRMb2dpbi5zdWJzY3JpYmUodj0+eyExPT09diYmbG9jYXRpb24ucmVsb2FkKCl9KSk6Zi5lcnJvci5pbmNsdWRlcygiRm9sZGVyIGRv''@;'; put 'put ''ZXNuJ3QgZXhpc3QuIikmJihjb25zb2xlLndhcm4oIlNBU2pzIFNBUyBzZXJ2aWNlcyBhcmUgbm90IHByZXNlbnQgb24gdGhlIGN1cnJlbnQgYXBwTG9jLiIpLGEuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpKX0pfSko''@;'; put 'put ''KX1zYXNqc01ha2VkYXRhQ2hlY2tpbmcoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oKXt2YXIgZD1lZShmdW5jdGlvbiooaCxmKXthLmNoZWNraW5nSW50ZXJ2YWw9c2V0SW50ZXJ2YWwoZWUoZnVuY3Rpb24qKCl7YS5zYXNq''@;'; put 'put ''c01ha2VkYXRhU3VjY2Vzc2Z1bGwoKS50aGVuKHY9Pnt2JiYoY2xlYXJJbnRlcnZhbChhLmNoZWNraW5nSW50ZXJ2YWwpLGgodikpfSkuY2F0Y2godj0+e2NsZWFySW50ZXJ2YWwoYS5jaGVja2luZ0ludGVydmFsKSxmKHYpfSl9KSwxZTMpfSk7cmV0dXJuIGZ1bmN0aW9uKGgsZil7cmV0dXJu''@;'; put 'put ''IGQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSl9KSgpfXNhc2pzTWFrZWRhdGFTdWNjZXNzZnVsbCgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2NvbnN0IHY9YCR7YS5nZXRTYXNqc0NvbmZpZygpLmFwcExvY30vc2Vydmlj''@;'; put 'put ''ZXMvYWRtaW5gO2Euc2FzanNTZXJ2aWNlLmdldEZvbGRlckNvbnRlbnRzRnJvbURyaXZlKHYpLnN1YnNjcmliZShNPT57TS5maWxlcy5pbmNsdWRlcygibWFrZWRhdGEuc2FzIik/ZCghMSk6ZCghMCl9LE09PntNLmVycm9yLmluY2x1ZGVzKCJGb2xkZXIgZG9lc24ndCBleGlzdC4iKSYmaCgp''@;'; put 'put ''fSl9KX0pKCl9Y2hlY2tWaXlhRGVwbG95KGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCBmPSExO2Y9dHlwZW9mIGQuc2FzanNBZGFwdGVyLmdldEZvbGRlcjwidSI/eWllbGQgZC5hcHBMb2NDaGVjayhhKTp5aWVsZCBkLmFwcExvY0NoZWNrUHJlQXhpb3NkQWRhcHRl''@;'; put 'put ''cihhKSxmJiZkLmxvYWRTdGFydHVwU2VydmljZUVtaXR0ZXIuZW1pdCgpfSkoKX1hcHBMb2NDaGVjayhhKXt2YXIgZD10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBoPWVlKGZ1bmN0aW9uKihmLHYpe2xldCBELE09ITE7dHJ5e0Q9eWllbGQgZC5zYXNqc0FkYXB0ZXIu''@;'; put 'put ''Z2V0Rm9sZGVyKGEpfWNhdGNoKFopeyJMb2dpblJlcXVpcmVkRXJyb3IiPT09Wi5uYW1lPyhkLmFwcExvY0NoZWNrUGVuZGluZz0hMCxkLnNob3VsZExvZ2luLm5leHQoITApLGYoITEpKTpNPSEwfWlmKE0pcmV0dXJuIGNvbnNvbGUud2FybigiVml5YSBzZXJ2aWNlcyBhcmUgbm90IHByZXNl''@;'; put 'put ''bnQgb24gdGhlIGN1cnJlbnQgYXBwTG9jLiIpLGQuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksZC5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpLGYoITEpO2YoITApfSk7cmV0dXJuIGZ1bmN0aW9uKGYsdil7cmV0dXJuIGguYXBwbHkodGhpcyxhcmd1bWVudHMpfX0o''@;'; put 'put ''KSl9YXBwTG9jQ2hlY2tQcmVBeGlvc2RBZGFwdGVyKGEpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2xldCB2PSExO3JldHVybiBmZXRjaChgL2ZvbGRlcnMvZm9sZGVycy9AaXRlbT9wYXRoPSR7YX1gKS50aGVuKE09Pig0MDQ9PT1NLnN0YXR1cyYmKHY9ITApLE0udGV4dCgpKSkudGhl''@;'; put 'put ''bihNPT57aWYodGhpcy5pc0xvZ2luUmVxdWlyZWQoTSkpdGhpcy5hcHBMb2NDaGVja1BlbmRpbmc9ITAsdGhpcy5zaG91bGRMb2dpbi5uZXh0KCEwKTtlbHNle2lmKHYpcmV0dXJuIGNvbnNvbGUud2FybigiVml5YSBzZXJ2aWNlcyBhcmUgbm90IHByZXNlbnQgb24gdGhlIGN1cnJlbnQgYXBw''@;'; put 'put ''TG9jLiIpLHRoaXMuZXZlbnRTZXJ2aWNlLnN0YXJ0dXBEYXRhTG9hZGVkKCksdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2RlcGxveSIpLGQoITEpO2xldCBEPW51bGw7dHJ5e0Q9SlNPTi5wYXJzZShNKX1jYXRjaHt9aWYoRCYmRC5odHRwU3RhdHVzQ29kZSYmNDA0PT09RC5odHRwU3Rh''@;'; put 'put ''dHVzQ29kZSlyZXR1cm4gY29uc29sZS53YXJuKCJWaXlhIHNlcnZpY2VzIGFyZSBub3QgcHJlc2VudCBvbiB0aGUgY3VycmVudCBhcHBMb2MuIiksdGhpcy5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95IiksZCghMSk7''@;'; put 'put ''ZCghMCl9fSkuY2F0Y2goTT0+e2QoITEpfSl9KX1pc0xvZ2luUmVxdWlyZWQoYSl7cmV0dXJuLzxmb3JtLithY3Rpb249IiguKkxvZ29uW14iXSopLio+L2dtLnRlc3QoYSl9bG9nb3V0KCl7dGhpcy5zYXNqc0FkYXB0ZXIubG9nT3V0KCkudGhlbigoKT0+e2xvY2F0aW9uLnJlbG9hZCgpfSl9''@;'; put 'put ''Z2V0U2FzanNDb25maWcoKXtyZXR1cm4gdGhpcy5zYXNqc0FkYXB0ZXIuZ2V0U2FzanNDb25maWcoKX1nZXRTYXNSZXF1ZXN0cygpe3JldHVybiB0aGlzLnNhc2pzQWRhcHRlci5nZXRTYXNSZXF1ZXN0cygpfXNldERlYnVnU3RhdGUoYSl7dGhpcy5zYXNqc0FkYXB0ZXIuc2V0RGVidWdTdGF0''@;'; put 'put ''ZShhKX1nZXRTYXNqc0luc3RhbmNlKCl7cmV0dXJuIHRoaXMuc2FzanNBZGFwdGVyfWdldFNlcnZlclR5cGUoKXtjb25zdCBhPXRoaXMuc2FzanNBZGFwdGVyLmdldFNhc2pzQ29uZmlnKCk7cmV0dXJuIGEuc2VydmVyVHlwZT9hLnNlcnZlclR5cGU6IlNBU1ZJWUEifWdldEV4ZWN1dGlvblBh''@;'; put 'put ''dGgoKXtjb25zdCBhPXRoaXMuc2FzanNBZGFwdGVyLmdldFNhc2pzQ29uZmlnKCk7c3dpdGNoKGEuc2VydmVyVHlwZSl7Y2FzZSBNMC5ZLlNhc1ZpeWE6cmV0dXJuIGEucGF0aFNBU1ZpeWE7Y2FzZSBNMC5ZLlNhczk6cmV0dXJuIGEucGF0aFNBUzk7Y2FzZSBNMC5ZLlNhc2pzOnJldHVybiBh''@;'; put 'put ''LnBhdGhTQVNKU319c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoTXIocTgpLE1yKHVXKSxNcihwYyksTXIoQWNlKSxNcihTZCksTXIoTHMpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHBy''@;'; put 'put ''b3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKSxTZD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaW5qZWN0b3I9YX1sb2coYSxkKXt0aGlzLmluamVjdFNhc1NlcnZpY2UoKSx0aGlzLnNhc2pzQ29uZmlnPy5kZWJ1ZyYmKGQ/Y29uc29sZS5sb2coYSxkKTpjb25zb2xl''@;'; put 'put ''LmxvZyhhKSl9ZXJyb3IoYSxkKXtjb25zb2xlLmVycm9yKGEsZCl9bG9nUmVxdWVzdERhdGEoYSxkKXtpZih0aGlzLmxvZygiLS0tIEFkYXB0ZXIgUmVxdWVzdCBJbnB1dCAtLS0iKSx0aGlzLmxvZyhhKSxkKXtmb3IobGV0IGggb2YgT2JqZWN0LmtleXMoZCkpdGhpcy5sb2coaCxkW2hdKTt0''@;'; put 'put ''aGlzLmxvZygiLS0tLS0tIil9ZWxzZSB0aGlzLmxvZygibm8gZGF0YSBzZW50Iil9aW5qZWN0U2FzU2VydmljZSgpe2lmKCF0aGlzLnNhc2pzQ29uZmlnKXtjb25zdCBhPXRoaXMuaW5qZWN0b3IuZ2V0KEpzKTt0aGlzLnNhc2pzQ29uZmlnPWEuZ2V0U2FzanNDb25maWcoKX19c3RhdGlje3Ro''@;'; put 'put ''aXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoTXIoRHMpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjb25zdCBrY2U9ZnVuY3Rpb24gWVRlKGMs''@;'; put 'put ''bCl7cmV0dXJuIGM9PT1sfHxjIT1jJiZsIT1sfSxHUj1mdW5jdGlvbiBHVGUoYyxsKXtmb3IodmFyIGE9Yy5sZW5ndGg7YS0tOylpZihrY2UoY1thXVswXSxsKSlyZXR1cm4gYTtyZXR1cm4tMX07dmFyIEtUZT1BcnJheS5wcm90b3R5cGUuc3BsaWNlO2Z1bmN0aW9uIGh5KGMpe3ZhciBsPS0x''@;'; put 'put ''LGE9bnVsbD09Yz8wOmMubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytsPGE7KXt2YXIgZD1jW2xdO3RoaXMuc2V0KGRbMF0sZFsxXSl9fWh5LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBaVGUoKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfSxoeS5wcm90b3R5cGUuZGVsZXRlPWZ1''@;'; put 'put ''bmN0aW9uIHFUZShjKXt2YXIgbD10aGlzLl9fZGF0YV9fLGE9R1IobCxjKTtyZXR1cm4hKGE8MHx8KGE9PWwubGVuZ3RoLTE/bC5wb3AoKTpLVGUuY2FsbChsLGEsMSksLS10aGlzLnNpemUsMCkpfSxoeS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uIEpUZShjKXt2YXIgbD10aGlzLl9fZGF0YV9f''@;'; put 'put ''LGE9R1IobCxjKTtyZXR1cm4gYTwwP3ZvaWQgMDpsW2FdWzFdfSxoeS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIGVBZShjKXtyZXR1cm4gR1IodGhpcy5fX2RhdGFfXyxjKT4tMX0saHkucHJvdG90eXBlLnNldD1mdW5jdGlvbiBuQWUoYyxsKXt2YXIgYT10aGlzLl9fZGF0YV9fLGQ9R1IoYSxj''@;'; put 'put ''KTtyZXR1cm4gZDwwPygrK3RoaXMuc2l6ZSxhLnB1c2goW2MsbF0pKTphW2RdWzFdPWwsdGhpc307Y29uc3QgJFI9aHksRGNlPSJvYmplY3QiPT10eXBlb2YgZ2xvYmFsJiZnbG9iYWwmJmdsb2JhbC5PYmplY3Q9PT1PYmplY3QmJmdsb2JhbDt2YXIgZkFlPSJvYmplY3QiPT10eXBlb2Ygc2Vs''@;'; put 'put ''ZiYmc2VsZiYmc2VsZi5PYmplY3Q9PT1PYmplY3QmJnNlbGY7Y29uc3QgaHA9RGNlfHxmQWV8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksc209aHAuU3ltYm9sO3ZhciBJY2U9T2JqZWN0LnByb3RvdHlwZSxtQWU9SWNlLmhhc093blByb3BlcnR5LHZBZT1JY2UudG9TdHJpbmcsaXg9c20/''@;'; put 'put ''c20udG9TdHJpbmdUYWc6dm9pZCAwO3ZhciB3QWU9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzt2YXIgUmNlPXNtP3NtLnRvU3RyaW5nVGFnOnZvaWQgMDtjb25zdCBmeT1mdW5jdGlvbiBFQWUoYyl7cmV0dXJuIG51bGw9PWM/dm9pZCAwPT09Yz8iW29iamVjdCBVbmRlZmluZWRdIjoiW29i''@;'; put 'put ''amVjdCBOdWxsXSI6UmNlJiZSY2UgaW4gT2JqZWN0KGMpP2Z1bmN0aW9uIGJBZShjKXt2YXIgbD1tQWUuY2FsbChjLGl4KSxhPWNbaXhdO3RyeXtjW2l4XT12b2lkIDA7dmFyIGQ9ITB9Y2F0Y2h7fXZhciBoPXZBZS5jYWxsKGMpO3JldHVybiBkJiYobD9jW2l4XT1hOmRlbGV0ZSBjW2l4XSks''@;'; put 'put ''aH0oYyk6ZnVuY3Rpb24gQ0FlKGMpe3JldHVybiB3QWUuY2FsbChjKX0oYyl9LG94PWZ1bmN0aW9uIFRBZShjKXt2YXIgbD10eXBlb2YgYztyZXR1cm4gbnVsbCE9YyYmKCJvYmplY3QiPT1sfHwiZnVuY3Rpb24iPT1sKX0sTGNlPWZ1bmN0aW9uIFJBZShjKXtpZighb3goYykpcmV0dXJuITE7''@;'; put 'put ''dmFyIGw9ZnkoYyk7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09bHx8IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIj09bHx8IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iPT1sfHwiW29iamVjdCBQcm94eV0iPT1sfSx2Vz1ocFsiX19jb3JlLWpzX3NoYXJlZF9fIl07dmFyIE9jZT1mdW5j''@;'; put 'put ''dGlvbigpe3ZhciBjPS9bXi5dKyQvLmV4ZWModlcmJnZXLmtleXMmJnZXLmtleXMuSUVfUFJPVE98fCIiKTtyZXR1cm4gYz8iU3ltYm9sKHNyYylfMS4iK2M6IiJ9KCk7dmFyIEhBZT1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7Y29uc3QgUTg9ZnVuY3Rpb24gTkFlKGMpe2lmKG51bGwh''@;'; put 'put ''PWMpe3RyeXtyZXR1cm4gSEFlLmNhbGwoYyl9Y2F0Y2h7fXRyeXtyZXR1cm4gYysiIn1jYXRjaHt9fXJldHVybiIifTt2YXIgQkFlPS9eXFtvYmplY3QgLis/Q29uc3RydWN0b3JcXSQvLFdBZT1SZWdFeHAoIl4iK0Z1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKE9iamVjdC5wcm90''@;'; put 'put ''b3R5cGUuaGFzT3duUHJvcGVydHkpLnJlcGxhY2UoL1tcXF4kLiorPygpW1xde318XS9nLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpO2NvbnN0IEdBZT1mdW5jdGlvbiBZQWUoYyl7''@;'; put 'put ''cmV0dXJuISghb3goYyl8fGZ1bmN0aW9uIE9BZShjKXtyZXR1cm4hIU9jZSYmT2NlIGluIGN9KGMpKSYmKExjZShjKT9XQWU6QkFlKS50ZXN0KFE4KGMpKX0sZTc9ZnVuY3Rpb24gcUFlKGMsbCl7dmFyIGE9ZnVuY3Rpb24gJEFlKGMsbCl7cmV0dXJuIGM/LltsXX0oYyxsKTtyZXR1cm4gR0Fl''@;'; put 'put ''KGEpP2E6dm9pZCAwfSxheD1lNyhocCwiTWFwIiksc3g9ZTcoT2JqZWN0LCJjcmVhdGUiKTt2YXIgb2tlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dmFyIGNrZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIHB5KGMpe3ZhciBsPS0xLGE9bnVsbD09''@;'; put 'put ''Yz8wOmMubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytsPGE7KXt2YXIgZD1jW2xdO3RoaXMuc2V0KGRbMF0sZFsxXSl9fXB5LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBRQWUoKXt0aGlzLl9fZGF0YV9fPXN4P3N4KG51bGwpOnt9LHRoaXMuc2l6ZT0wfSxweS5wcm90b3R5cGUuZGVsZXRl''@;'; put 'put ''PWZ1bmN0aW9uIHRrZShjKXt2YXIgbD10aGlzLmhhcyhjKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bY107cmV0dXJuIHRoaXMuc2l6ZS09bD8xOjAsbH0scHkucHJvdG90eXBlLmdldD1mdW5jdGlvbiBha2UoYyl7dmFyIGw9dGhpcy5fX2RhdGFfXztpZihzeCl7dmFyIGE9bFtjXTtyZXR1cm4i''@;'; put 'put ''X19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI9PT1hP3ZvaWQgMDphfXJldHVybiBva2UuY2FsbChsLGMpP2xbY106dm9pZCAwfSxweS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIHVrZShjKXt2YXIgbD10aGlzLl9fZGF0YV9fO3JldHVybiBzeD92b2lkIDAhPT1sW2NdOmNrZS5jYWxsKGwsYyl9''@;'; put 'put ''LHB5LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gZmtlKGMsbCl7dmFyIGE9dGhpcy5fX2RhdGFfXztyZXR1cm4gdGhpcy5zaXplKz10aGlzLmhhcyhjKT8wOjEsYVtjXT1zeCYmdm9pZCAwPT09bD8iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI6bCx0aGlzfTtjb25zdCBQY2U9cHksS1I9ZnVu''@;'; put 'put ''Y3Rpb24geWtlKGMsbCl7dmFyIGE9Yy5fX2RhdGFfXztyZXR1cm4gZnVuY3Rpb24gdmtlKGMpe3ZhciBsPXR5cGVvZiBjO3JldHVybiJzdHJpbmciPT1sfHwibnVtYmVyIj09bHx8InN5bWJvbCI9PWx8fCJib29sZWFuIj09bD8iX19wcm90b19fIiE9PWM6bnVsbD09PWN9KGwpP2FbInN0cmlu''@;'; put 'put ''ZyI9PXR5cGVvZiBsPyJzdHJpbmciOiJoYXNoIl06YS5tYXB9O2Z1bmN0aW9uIGd5KGMpe3ZhciBsPS0xLGE9bnVsbD09Yz8wOmMubGVuZ3RoO2Zvcih0aGlzLmNsZWFyKCk7KytsPGE7KXt2YXIgZD1jW2xdO3RoaXMuc2V0KGRbMF0sZFsxXSl9fWd5LnByb3RvdHlwZS5jbGVhcj1mdW5jdGlv''@;'; put 'put ''biBna2UoKXt0aGlzLnNpemU9MCx0aGlzLl9fZGF0YV9fPXtoYXNoOm5ldyBQY2UsbWFwOm5ldyhheHx8JFIpLHN0cmluZzpuZXcgUGNlfX0sZ3kucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBfa2UoYyl7dmFyIGw9S1IodGhpcyxjKS5kZWxldGUoYyk7cmV0dXJuIHRoaXMuc2l6ZS09bD8x''@;'; put 'put ''OjAsbH0sZ3kucHJvdG90eXBlLmdldD1mdW5jdGlvbiBDa2UoYyl7cmV0dXJuIEtSKHRoaXMsYykuZ2V0KGMpfSxneS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIE1rZShjKXtyZXR1cm4gS1IodGhpcyxjKS5oYXMoYyl9LGd5LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gRWtlKGMsbCl7dmFyIGE9''@;'; put 'put ''S1IodGhpcyxjKSxkPWEuc2l6ZTtyZXR1cm4gYS5zZXQoYyxsKSx0aGlzLnNpemUrPWEuc2l6ZT09ZD8wOjEsdGhpc307Y29uc3QgYlc9Z3k7ZnVuY3Rpb24gbXkoYyl7dmFyIGw9dGhpcy5fX2RhdGFfXz1uZXcgJFIoYyk7dGhpcy5zaXplPWwuc2l6ZX1teS5wcm90b3R5cGUuY2xlYXI9ZnVu''@;'; put 'put ''Y3Rpb24gaUFlKCl7dGhpcy5fX2RhdGFfXz1uZXcgJFIsdGhpcy5zaXplPTB9LG15LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gYUFlKGMpe3ZhciBsPXRoaXMuX19kYXRhX18sYT1sLmRlbGV0ZShjKTtyZXR1cm4gdGhpcy5zaXplPWwuc2l6ZSxhfSxteS5wcm90b3R5cGUuZ2V0PWZ1bmN0''@;'; put 'put ''aW9uIGxBZShjKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoYyl9LG15LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gdUFlKGMpe3JldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhjKX0sbXkucHJvdG90eXBlLnNldD1mdW5jdGlvbiBra2UoYyxsKXt2YXIgYT10aGlzLl9fZGF0YV9fO2lmKGEgaW5z''@;'; put 'put ''dGFuY2VvZiAkUil7dmFyIGQ9YS5fX2RhdGFfXztpZighYXh8fGQubGVuZ3RoPDE5OSlyZXR1cm4gZC5wdXNoKFtjLGxdKSx0aGlzLnNpemU9KythLnNpemUsdGhpczthPXRoaXMuX19kYXRhX189bmV3IGJXKGQpfXJldHVybiBhLnNldChjLGwpLHRoaXMuc2l6ZT1hLnNpemUsdGhpc307Y29u''@;'; put 'put ''c3QgSWtlPW15O3ZhciBPa2U9ZnVuY3Rpb24oKXt0cnl7dmFyIGM9ZTcoT2JqZWN0LCJkZWZpbmVQcm9wZXJ0eSIpO3JldHVybiBjKHt9LCIiLHt9KSxjfWNhdGNoe319KCk7Y29uc3QgRmNlPU9rZSxIY2U9ZnVuY3Rpb24gUGtlKGMsbCxhKXsiX19wcm90b19fIj09bCYmRmNlP0ZjZShjLGws''@;'; put 'put ''e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOmEsd3JpdGFibGU6ITB9KTpjW2xdPWF9O3ZhciBIa2U9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtjb25zdCBOY2U9ZnVuY3Rpb24gTmtlKGMsbCxhKXt2YXIgZD1jW2xdOyghSGtlLmNhbGwoYyxsKXx8IWtjZShk''@;'; put 'put ''LGEpfHx2b2lkIDA9PT1hJiYhKGwgaW4gYykpJiZIY2UoYyxsLGEpfSxxUj1mdW5jdGlvbiBWa2UoYyxsLGEsZCl7dmFyIGg9IWE7YXx8KGE9e30pO2Zvcih2YXIgZj0tMSx2PWwubGVuZ3RoOysrZjx2Oyl7dmFyIE09bFtmXSxEPWQ/ZChhW01dLGNbTV0sTSxhLGMpOnZvaWQgMDt2b2lkIDA9''@;'; put 'put ''PT1EJiYoRD1jW01dKSxoP0hjZShhLE0sRCk6TmNlKGEsTSxEKX1yZXR1cm4gYX0sdnk9ZnVuY3Rpb24gemtlKGMpe3JldHVybiBudWxsIT1jJiYib2JqZWN0Ij09dHlwZW9mIGN9LFZjZT1mdW5jdGlvbiBaa2UoYyl7cmV0dXJuIHZ5KGMpJiYiW29iamVjdCBBcmd1bWVudHNdIj09ZnkoYyl9''@;'; put 'put ''O3ZhciBCY2U9T2JqZWN0LnByb3RvdHlwZSxXa2U9QmNlLmhhc093blByb3BlcnR5LFlrZT1CY2UucHJvcGVydHlJc0VudW1lcmFibGUsR2tlPVZjZShmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP1ZjZTpmdW5jdGlvbihjKXtyZXR1cm4gdnkoYykmJldrZS5jYWxsKGMsImNhbGxl''@;'; put 'put ''ZSIpJiYhWWtlLmNhbGwoYywiY2FsbGVlIil9O2NvbnN0ICRrZT1Ha2UsYnk9QXJyYXkuaXNBcnJheTt2YXIgamNlPSJvYmplY3QiPT10eXBlb2YgZXhwb3J0cyYmZXhwb3J0cyYmIWV4cG9ydHMubm9kZVR5cGUmJmV4cG9ydHMsemNlPWpjZSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJm1v''@;'; put 'put ''ZHVsZSYmIW1vZHVsZS5ub2RlVHlwZSYmbW9kdWxlLFVjZT16Y2UmJnpjZS5leHBvcnRzPT09amNlP2hwLkJ1ZmZlcjp2b2lkIDA7Y29uc3QgWmNlPShVY2U/VWNlLmlzQnVmZmVyOnZvaWQgMCl8fGZ1bmN0aW9uIHFrZSgpe3JldHVybiExfTt2YXIgbkRlPS9eKD86MHxbMS05XVxkKikkLztj''@;'; put 'put ''b25zdCBpRGU9ZnVuY3Rpb24gckRlKGMsbCl7dmFyIGE9dHlwZW9mIGM7cmV0dXJuISEobD1sPz85MDA3MTk5MjU0NzQwOTkxKSYmKCJudW1iZXIiPT1hfHwic3ltYm9sIiE9YSYmbkRlLnRlc3QoYykpJiZjPi0xJiZjJTE9PTAmJmM8bH0sV2NlPWZ1bmN0aW9uIGFEZShjKXtyZXR1cm4ibnVt''@;'; put 'put ''YmVyIj09dHlwZW9mIGMmJmM+LTEmJmMlMT09MCYmYzw9OTAwNzE5OTI1NDc0MDk5MX07dmFyIGdjPXt9O2djWyJbb2JqZWN0IEZsb2F0MzJBcnJheV0iXT1nY1siW29iamVjdCBGbG9hdDY0QXJyYXldIl09Z2NbIltvYmplY3QgSW50OEFycmF5XSJdPWdjWyJbb2JqZWN0IEludDE2QXJyYXld''@;'; put 'put ''Il09Z2NbIltvYmplY3QgSW50MzJBcnJheV0iXT1nY1siW29iamVjdCBVaW50OEFycmF5XSJdPWdjWyJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSJdPWdjWyJbb2JqZWN0IFVpbnQxNkFycmF5XSJdPWdjWyJbb2JqZWN0IFVpbnQzMkFycmF5XSJdPSEwLGdjWyJbb2JqZWN0IEFyZ3VtZW50''@;'; put 'put ''c10iXT1nY1siW29iamVjdCBBcnJheV0iXT1nY1siW29iamVjdCBBcnJheUJ1ZmZlcl0iXT1nY1siW29iamVjdCBCb29sZWFuXSJdPWdjWyJbb2JqZWN0IERhdGFWaWV3XSJdPWdjWyJbb2JqZWN0IERhdGVdIl09Z2NbIltvYmplY3QgRXJyb3JdIl09Z2NbIltvYmplY3QgRnVuY3Rpb25dIl09''@;'; put 'put ''Z2NbIltvYmplY3QgTWFwXSJdPWdjWyJbb2JqZWN0IE51bWJlcl0iXT1nY1siW29iamVjdCBPYmplY3RdIl09Z2NbIltvYmplY3QgUmVnRXhwXSJdPWdjWyJbb2JqZWN0IFNldF0iXT1nY1siW29iamVjdCBTdHJpbmddIl09Z2NbIltvYmplY3QgV2Vha01hcF0iXT0hMTtjb25zdCB5Vz1mdW5j''@;'; put 'put ''dGlvbiBMRGUoYyl7cmV0dXJuIGZ1bmN0aW9uKGwpe3JldHVybiBjKGwpfX07dmFyIFljZT0ib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJmV4cG9ydHMmJiFleHBvcnRzLm5vZGVUeXBlJiZleHBvcnRzLGx4PVljZSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUmJm1vZHVsZSYmIW1vZHVsZS5u''@;'; put 'put ''b2RlVHlwZSYmbW9kdWxlLF9XPWx4JiZseC5leHBvcnRzPT09WWNlJiZEY2UucHJvY2Vzcztjb25zdCB5eT1mdW5jdGlvbigpe3RyeXtyZXR1cm4gbHgmJmx4LnJlcXVpcmUmJmx4LnJlcXVpcmUoInV0aWwiKS50eXBlc3x8X1cmJl9XLmJpbmRpbmcmJl9XLmJpbmRpbmcoInV0aWwiKX1jYXRj''@;'; put 'put ''aHt9fSgpO3ZhciBHY2U9eXkmJnl5LmlzVHlwZWRBcnJheTtjb25zdCBIRGU9R2NlP3lXKEdjZSk6ZnVuY3Rpb24gSURlKGMpe3JldHVybiB2eShjKSYmV2NlKGMubGVuZ3RoKSYmISFnY1tmeShjKV19O3ZhciBWRGU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtjb25zdCAkY2U9''@;'; put 'put ''ZnVuY3Rpb24gQkRlKGMsbCl7dmFyIGE9YnkoYyksZD0hYSYmJGtlKGMpLGg9IWEmJiFkJiZaY2UoYyksZj0hYSYmIWQmJiFoJiZIRGUoYyksdj1hfHxkfHxofHxmLE09dj9mdW5jdGlvbiBCa2UoYyxsKXtmb3IodmFyIGE9LTEsZD1BcnJheShjKTsrK2E8YzspZFthXT1sKGEpO3JldHVybiBk''@;'; put 'put ''fShjLmxlbmd0aCxTdHJpbmcpOltdLEQ9TS5sZW5ndGg7Zm9yKHZhciBaIGluIGMpKGx8fFZEZS5jYWxsKGMsWikpJiYoIXZ8fCEoImxlbmd0aCI9PVp8fGgmJigib2Zmc2V0Ij09Wnx8InBhcmVudCI9PVopfHxmJiYoImJ1ZmZlciI9PVp8fCJieXRlTGVuZ3RoIj09Wnx8ImJ5dGVPZmZzZXQi''@;'; put 'put ''PT1aKXx8aURlKFosRCkpKSYmTS5wdXNoKFopO3JldHVybiBNfTt2YXIgakRlPU9iamVjdC5wcm90b3R5cGU7Y29uc3Qgd1c9ZnVuY3Rpb24gekRlKGMpe3ZhciBsPWMmJmMuY29uc3RydWN0b3I7cmV0dXJuIGM9PT0oImZ1bmN0aW9uIj09dHlwZW9mIGwmJmwucHJvdG90eXBlfHxqRGUpfSxL''@;'; put 'put ''Y2U9ZnVuY3Rpb24gVURlKGMsbCl7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBjKGwoYSkpfX0sV0RlPUtjZShPYmplY3Qua2V5cyxPYmplY3QpO3ZhciBHRGU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtjb25zdCBxY2U9ZnVuY3Rpb24gcURlKGMpe3JldHVybiBudWxsIT1j''@;'; put 'put ''JiZXY2UoYy5sZW5ndGgpJiYhTGNlKGMpfSxDVz1mdW5jdGlvbiBYRGUoYyl7cmV0dXJuIHFjZShjKT8kY2UoYyk6ZnVuY3Rpb24gJERlKGMpe2lmKCF3VyhjKSlyZXR1cm4gV0RlKGMpO3ZhciBsPVtdO2Zvcih2YXIgYSBpbiBPYmplY3QoYykpR0RlLmNhbGwoYyxhKSYmImNvbnN0cnVjdG9y''@;'; put 'put ''IiE9YSYmbC5wdXNoKGEpO3JldHVybiBsfShjKX07dmFyIHJJZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2NvbnN0IG9JZT1mdW5jdGlvbiBpSWUoYyl7aWYoIW94KGMpKXJldHVybiBmdW5jdGlvbiBlSWUoYyl7dmFyIGw9W107aWYobnVsbCE9Yylmb3IodmFyIGEgaW4gT2Jq''@;'; put 'put ''ZWN0KGMpKWwucHVzaChhKTtyZXR1cm4gbH0oYyk7dmFyIGw9d1coYyksYT1bXTtmb3IodmFyIGQgaW4gYykiY29uc3RydWN0b3IiPT1kJiYobHx8IXJJZS5jYWxsKGMsZCkpfHxhLnB1c2goZCk7cmV0dXJuIGF9LFNXPWZ1bmN0aW9uIGFJZShjKXtyZXR1cm4gcWNlKGMpPyRjZShjLCEwKTpv''@;'; put 'put ''SWUoYyl9O3ZhciBYY2U9Im9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiZleHBvcnRzJiYhZXhwb3J0cy5ub2RlVHlwZSYmZXhwb3J0cyxKY2U9WGNlJiYib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmbW9kdWxlJiYhbW9kdWxlLm5vZGVUeXBlJiZtb2R1bGUsUWNlPUpjZSYmSmNlLmV4cG9ydHM9''@;'; put 'put ''PT1YY2U/aHAuQnVmZmVyOnZvaWQgMCxldWU9UWNlP1FjZS5hbGxvY1Vuc2FmZTp2b2lkIDA7Y29uc3QgdHVlPWZ1bmN0aW9uIG1JZSgpe3JldHVybltdfTt2YXIgYkllPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUsbnVlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJv''@;'; put 'put ''bHMseUllPW51ZT9mdW5jdGlvbihjKXtyZXR1cm4gbnVsbD09Yz9bXTooYz1PYmplY3QoYyksZnVuY3Rpb24gcEllKGMsbCl7Zm9yKHZhciBhPS0xLGQ9bnVsbD09Yz8wOmMubGVuZ3RoLGg9MCxmPVtdOysrYTxkOyl7dmFyIHY9Y1thXTtsKHYsYSxjKSYmKGZbaCsrXT12KX1yZXR1cm4gZn0o''@;'; put 'put ''bnVlKGMpLGZ1bmN0aW9uKGwpe3JldHVybiBiSWUuY2FsbChjLGwpfSkpfTp0dWU7Y29uc3QgTVc9eUllLHJ1ZT1mdW5jdGlvbiBDSWUoYyxsKXtmb3IodmFyIGE9LTEsZD1sLmxlbmd0aCxoPWMubGVuZ3RoOysrYTxkOyljW2grYV09bFthXTtyZXR1cm4gY30saXVlPUtjZShPYmplY3QuZ2V0''@;'; put 'put ''UHJvdG90eXBlT2YsT2JqZWN0KTt2YXIgeEllPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM/ZnVuY3Rpb24oYyl7Zm9yKHZhciBsPVtdO2M7KXJ1ZShsLE1XKGMpKSxjPWl1ZShjKTtyZXR1cm4gbH06dHVlO2NvbnN0IG91ZT14SWUsYXVlPWZ1bmN0aW9uIEFJZShjLGwsYSl7dmFyIGQ9''@;'; put 'put ''bChjKTtyZXR1cm4gYnkoYyk/ZDpydWUoZCxhKGMpKX0sREllPWZ1bmN0aW9uIGtJZShjKXtyZXR1cm4gYXVlKGMsQ1csTVcpfSxSSWU9ZnVuY3Rpb24gSUllKGMpe3JldHVybiBhdWUoYyxTVyxvdWUpfSx4Vz1lNyhocCwiRGF0YVZpZXciKSxFVz1lNyhocCwiUHJvbWlzZSIpLFRXPWU3KGhw''@;'; put 'put ''LCJTZXQiKSxBVz1lNyhocCwiV2Vha01hcCIpO3ZhciBzdWU9IltvYmplY3QgTWFwXSIsbHVlPSJbb2JqZWN0IFByb21pc2VdIixjdWU9IltvYmplY3QgU2V0XSIsdXVlPSJbb2JqZWN0IFdlYWtNYXBdIixkdWU9IltvYmplY3QgRGF0YVZpZXddIixOSWU9UTgoeFcpLFZJZT1ROChheCksQkll''@;'; put 'put ''PVE4KEVXKSxqSWU9UTgoVFcpLHpJZT1ROChBVyksdDc9Znk7KHhXJiZ0NyhuZXcgeFcobmV3IEFycmF5QnVmZmVyKDEpKSkhPWR1ZXx8YXgmJnQ3KG5ldyBheCkhPXN1ZXx8RVcmJnQ3KEVXLnJlc29sdmUoKSkhPWx1ZXx8VFcmJnQ3KG5ldyBUVykhPWN1ZXx8QVcmJnQ3KG5ldyBBVykhPXV1''@;'; put 'put ''ZSkmJih0Nz1mdW5jdGlvbihjKXt2YXIgbD1meShjKSxhPSJbb2JqZWN0IE9iamVjdF0iPT1sP2MuY29uc3RydWN0b3I6dm9pZCAwLGQ9YT9ROChhKToiIjtpZihkKXN3aXRjaChkKXtjYXNlIE5JZTpyZXR1cm4gZHVlO2Nhc2UgVkllOnJldHVybiBzdWU7Y2FzZSBCSWU6cmV0dXJuIGx1ZTtj''@;'; put 'put ''YXNlIGpJZTpyZXR1cm4gY3VlO2Nhc2UgekllOnJldHVybiB1dWV9cmV0dXJuIGx9KTtjb25zdCBrVz10Nzt2YXIgWkllPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7Y29uc3QgaHVlPWhwLlVpbnQ4QXJyYXksRFc9ZnVuY3Rpb24gJEllKGMpe3ZhciBsPW5ldyBjLmNvbnN0cnVj''@;'; put 'put ''dG9yKGMuYnl0ZUxlbmd0aCk7cmV0dXJuIG5ldyBodWUobCkuc2V0KG5ldyBodWUoYykpLGx9O3ZhciBYSWU9L1x3KiQvO3ZhciBmdWU9c20/c20ucHJvdG90eXBlOnZvaWQgMCxwdWU9ZnVlP2Z1ZS52YWx1ZU9mOnZvaWQgMDtjb25zdCBNUmU9ZnVuY3Rpb24gU1JlKGMsbCxhKXt2YXIgZD1j''@;'; put 'put ''LmNvbnN0cnVjdG9yO3N3aXRjaChsKXtjYXNlIltvYmplY3QgQXJyYXlCdWZmZXJdIjpyZXR1cm4gRFcoYyk7Y2FzZSJbb2JqZWN0IEJvb2xlYW5dIjpjYXNlIltvYmplY3QgRGF0ZV0iOnJldHVybiBuZXcgZCgrYyk7Y2FzZSJbb2JqZWN0IERhdGFWaWV3XSI6cmV0dXJuIGZ1bmN0aW9uIEtJ''@;'; put 'put ''ZShjLGwpe3ZhciBhPWw/RFcoYy5idWZmZXIpOmMuYnVmZmVyO3JldHVybiBuZXcgYy5jb25zdHJ1Y3RvcihhLGMuYnl0ZU9mZnNldCxjLmJ5dGVMZW5ndGgpfShjLGEpO2Nhc2UiW29iamVjdCBGbG9hdDMyQXJyYXldIjpjYXNlIltvYmplY3QgRmxvYXQ2NEFycmF5XSI6Y2FzZSJbb2JqZWN0''@;'; put 'put ''IEludDhBcnJheV0iOmNhc2UiW29iamVjdCBJbnQxNkFycmF5XSI6Y2FzZSJbb2JqZWN0IEludDMyQXJyYXldIjpjYXNlIltvYmplY3QgVWludDhBcnJheV0iOmNhc2UiW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iOmNhc2UiW29iamVjdCBVaW50MTZBcnJheV0iOmNhc2UiW29iamVjdCBV''@;'; put 'put ''aW50MzJBcnJheV0iOnJldHVybiBmdW5jdGlvbiBuUmUoYyxsKXt2YXIgYT1sP0RXKGMuYnVmZmVyKTpjLmJ1ZmZlcjtyZXR1cm4gbmV3IGMuY29uc3RydWN0b3IoYSxjLmJ5dGVPZmZzZXQsYy5sZW5ndGgpfShjLGEpO2Nhc2UiW29iamVjdCBNYXBdIjpjYXNlIltvYmplY3QgU2V0XSI6cmV0''@;'; put 'put ''dXJuIG5ldyBkO2Nhc2UiW29iamVjdCBOdW1iZXJdIjpjYXNlIltvYmplY3QgU3RyaW5nXSI6cmV0dXJuIG5ldyBkKGMpO2Nhc2UiW29iamVjdCBSZWdFeHBdIjpyZXR1cm4gZnVuY3Rpb24gSkllKGMpe3ZhciBsPW5ldyBjLmNvbnN0cnVjdG9yKGMuc291cmNlLFhJZS5leGVjKGMpKTtyZXR1''@;'; put 'put ''cm4gbC5sYXN0SW5kZXg9Yy5sYXN0SW5kZXgsbH0oYyk7Y2FzZSJbb2JqZWN0IFN5bWJvbF0iOnJldHVybiBmdW5jdGlvbiBlUmUoYyl7cmV0dXJuIHB1ZT9PYmplY3QocHVlLmNhbGwoYykpOnt9fShjKX19O3ZhciBndWU9T2JqZWN0LmNyZWF0ZSx4UmU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBj''@;'; put 'put ''KCl7fXJldHVybiBmdW5jdGlvbihsKXtpZighb3gobCkpcmV0dXJue307aWYoZ3VlKXJldHVybiBndWUobCk7Yy5wcm90b3R5cGU9bDt2YXIgYT1uZXcgYztyZXR1cm4gYy5wcm90b3R5cGU9dm9pZCAwLGF9fSgpO2NvbnN0IEVSZT14UmU7dmFyIG11ZT15eSYmeXkuaXNNYXA7Y29uc3QgTFJl''@;'; put 'put ''PW11ZT95VyhtdWUpOmZ1bmN0aW9uIERSZShjKXtyZXR1cm4gdnkoYykmJiJbb2JqZWN0IE1hcF0iPT1rVyhjKX07dmFyIHZ1ZT15eSYmeXkuaXNTZXQ7Y29uc3QgTlJlPXZ1ZT95Vyh2dWUpOmZ1bmN0aW9uIFBSZShjKXtyZXR1cm4gdnkoYykmJiJbb2JqZWN0IFNldF0iPT1rVyhjKX07dmFy''@;'; put 'put ''IGJ1ZT0iW29iamVjdCBBcmd1bWVudHNdIix5dWU9IltvYmplY3QgRnVuY3Rpb25dIixfdWU9IltvYmplY3QgT2JqZWN0XSIsb2M9e307b2NbYnVlXT1vY1siW29iamVjdCBBcnJheV0iXT1vY1siW29iamVjdCBBcnJheUJ1ZmZlcl0iXT1vY1siW29iamVjdCBEYXRhVmlld10iXT1vY1siW29i''@;'; put 'put ''amVjdCBCb29sZWFuXSJdPW9jWyJbb2JqZWN0IERhdGVdIl09b2NbIltvYmplY3QgRmxvYXQzMkFycmF5XSJdPW9jWyJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXT1vY1siW29iamVjdCBJbnQ4QXJyYXldIl09b2NbIltvYmplY3QgSW50MTZBcnJheV0iXT1vY1siW29iamVjdCBJbnQzMkFycmF5''@;'; put 'put ''XSJdPW9jWyJbb2JqZWN0IE1hcF0iXT1vY1siW29iamVjdCBOdW1iZXJdIl09b2NbX3VlXT1vY1siW29iamVjdCBSZWdFeHBdIl09b2NbIltvYmplY3QgU2V0XSJdPW9jWyJbb2JqZWN0IFN0cmluZ10iXT1vY1siW29iamVjdCBTeW1ib2xdIl09b2NbIltvYmplY3QgVWludDhBcnJheV0iXT1v''@;'; put 'put ''Y1siW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0iXT1vY1siW29iamVjdCBVaW50MTZBcnJheV0iXT1vY1siW29iamVjdCBVaW50MzJBcnJheV0iXT0hMCxvY1siW29iamVjdCBFcnJvcl0iXT1vY1t5dWVdPW9jWyJbb2JqZWN0IFdlYWtNYXBdIl09ITE7Y29uc3QgZExlPWZ1bmN0aW9uIFhS''@;'; put 'put ''KGMsbCxhLGQsaCxmKXt2YXIgdixNPTEmbCxEPTImbCxaPTQmbDtpZihhJiYodj1oP2EoYyxkLGgsZik6YShjKSksdm9pZCAwIT09dilyZXR1cm4gdjtpZighb3goYykpcmV0dXJuIGM7dmFyIG5lPWJ5KGMpO2lmKG5lKXtpZih2PWZ1bmN0aW9uIFdJZShjKXt2YXIgbD1jLmxlbmd0aCxhPW5l''@;'; put 'put ''dyBjLmNvbnN0cnVjdG9yKGwpO3JldHVybiBsJiYic3RyaW5nIj09dHlwZW9mIGNbMF0mJlpJZS5jYWxsKGMsImluZGV4IikmJihhLmluZGV4PWMuaW5kZXgsYS5pbnB1dD1jLmlucHV0KSxhfShjKSwhTSlyZXR1cm4gZnVuY3Rpb24gaEllKGMsbCl7dmFyIGE9LTEsZD1jLmxlbmd0aDtmb3Io''@;'; put 'put ''bHx8KGw9QXJyYXkoZCkpOysrYTxkOylsW2FdPWNbYV07cmV0dXJuIGx9KGMsdil9ZWxzZXt2YXIgY2U9a1coYyksYmU9Y2U9PXl1ZXx8IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIj09Y2U7aWYoWmNlKGMpKXJldHVybiBmdW5jdGlvbiB1SWUoYyxsKXtpZihsKXJldHVybiBjLnNsaWNl''@;'; put 'put ''KCk7dmFyIGE9Yy5sZW5ndGgsZD1ldWU/ZXVlKGEpOm5ldyBjLmNvbnN0cnVjdG9yKGEpO3JldHVybiBjLmNvcHkoZCksZH0oYyxNKTtpZihjZT09X3VlfHxjZT09YnVlfHxiZSYmIWgpe2lmKHY9RHx8YmU/e306ZnVuY3Rpb24gVFJlKGMpe3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiBjLmNv''@;'; put 'put ''bnN0cnVjdG9yfHx3VyhjKT97fTpFUmUoaXVlKGMpKX0oYyksIU0pcmV0dXJuIEQ/ZnVuY3Rpb24gRUllKGMsbCl7cmV0dXJuIHFSKGMsb3VlKGMpLGwpfShjLGZ1bmN0aW9uIHNJZShjLGwpe3JldHVybiBjJiZxUihsLFNXKGwpLGMpfSh2LGMpKTpmdW5jdGlvbiBfSWUoYyxsKXtyZXR1cm4g''@;'; put 'put ''cVIoYyxNVyhjKSxsKX0oYyxmdW5jdGlvbiBKRGUoYyxsKXtyZXR1cm4gYyYmcVIobCxDVyhsKSxjKX0odixjKSl9ZWxzZXtpZighb2NbY2VdKXJldHVybiBoP2M6e307dj1NUmUoYyxjZSxNKX19Znx8KGY9bmV3IElrZSk7dmFyIEVlPWYuZ2V0KGMpO2lmKEVlKXJldHVybiBFZTtmLnNldChj''@;'; put 'put ''LHYpLE5SZShjKT9jLmZvckVhY2goZnVuY3Rpb24obnQpe3YuYWRkKFhSKG50LGwsYSxudCxjLGYpKX0pOkxSZShjKSYmYy5mb3JFYWNoKGZ1bmN0aW9uKG50LGx0KXt2LnNldChsdCxYUihudCxsLGEsbHQsYyxmKSl9KTt2YXIgcWU9bmU/dm9pZCAwOihaP0Q/UkllOkRJZTpEP1NXOkNXKShj''@;'; put 'put ''KTtyZXR1cm4gZnVuY3Rpb24gUmtlKGMsbCl7Zm9yKHZhciBhPS0xLGQ9bnVsbD09Yz8wOmMubGVuZ3RoOysrYTxkJiYhMSE9PWwoY1thXSxhLGMpOyk7fShxZXx8YyxmdW5jdGlvbihudCxsdCl7cWUmJihudD1jW2x0PW50XSksTmNlKHYsbHQsWFIobnQsbCxhLGx0LGMsZikpfSksdn0sSlI9''@;'; put 'put ''ZnVuY3Rpb24gcExlKGMpe3JldHVybiBkTGUoYyw1KX07dmFyIGdMZT1fKDc4ODU1KTtsZXQgR3U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuc2hvd25MaWJyYXJpZXM9NTAsdGhpcy5sb2FkTW9yZUNvdW50PTUwLHRoaXMuaXNNaWNyb3NvZnQ9ITEsdGhpcy5pc01pY3Jvc29m''@;'; put 'put ''dD10aGlzLmlzSUVvckVER0UoKSxjb25zb2xlLmxvZygiSXMgSUUgb3IgRWRnZT8iLHRoaXMuaXNNaWNyb3NvZnQpfWNvbnZlcnRKc0RhdGVUb1Nhc0RhdGUoYSxkPSJkYXlzIil7bGV0IGgsZj0wO2g9YSBpbnN0YW5jZW9mIERhdGU/YTpuZXcgRGF0ZShhKSxmPW5ldyBEYXRlKERhdGUuVVRD''@;'; put 'put ''KGguZ2V0RnVsbFllYXIoKSxoLmdldE1vbnRoKCksaC5nZXREYXRlKCksaC5nZXRIb3VycygpLGguZ2V0TWludXRlcygpLGguZ2V0U2Vjb25kcygpKSkudmFsdWVPZigpO2NvbnN0IEQ9ZiszMTU2MTkyZTU7c3dpdGNoKGQpe2Nhc2UiZGF5cyI6e2xldCBaPUQvODY0ZTU7cmV0dXJuIFo9TWF0''@;'; put 'put ''aC5hYnMoWiksWj1NYXRoLmZsb29yKFopLFp9Y2FzZSJzZWNvbmRzIjpyZXR1cm4gRC8xZTN9cmV0dXJuIDB9Y29udmVydFNhc0RheXNUb0pzRGF0ZShhLGQ9ImRheXMiKXtpZigibnVtYmVyIiE9dHlwZW9mIGEmJihhPXBhcnNlRmxvYXQoYSkpLCJzZWNvbmRzIj09PWQpe2xldCBNPTFlMyph''@;'; put 'put ''LTMxNTYxOTJlNTtyZXR1cm4gTSs9NjAqbmV3IERhdGUoTSkuZ2V0VGltZXpvbmVPZmZzZXQoKSoxZTMsbmV3IERhdGUoTSl9cmV0dXJuIG5ldyBEYXRlKDg2NGU1KmEtMzE1NjE5MmU1KX10cmVlT25GaWx0ZXIoYSxkKXtsZXQgaD1hLnNlYXJjaFN0cmluZz9hLnNlYXJjaFN0cmluZzoiIixm''@;'; put 'put ''PWQuc3BsaXQoIi4iKVswXSx2PWQuc3BsaXQoIi4iKVsxXSxNPWYrIkFsbCI7YVtmXSYmKGFbTV18fChhW01dPXRoaXMuZGVlcENsb25lKGFbZl0pKSxhW2ZdPXRoaXMuZGVlcENsb25lKGFbTV0pLGgubGVuZ3RoPjAmJihhW2ZdPWFbZl0uZmlsdGVyKHY/RD0+RFt2XS50b0xvd2VyQ2FzZSgp''@;'; put 'put ''LmluY2x1ZGVzKGgudG9Mb3dlckNhc2UoKSk6RD0+RC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGgudG9Mb3dlckNhc2UoKSkpKSl9bGlicmFyeU9uRmlsdGVyKGEsZCxoKXtkLmxlbmd0aD4wP2EuZm9yRWFjaChmPT57ZltoXS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGQudG9Mb3dlckNhc2Uo''@;'; put 'put ''KSk/KGYuaGlkZGVuPSExLGYuaW5Gb3JlZ3JvdW5kPSEwKTooZi5oaWRkZW49ITAsZi5pbkZvcmVncm91bmQ9ITEpfSk6KHRoaXMucmVzZXRBcnJheUZpbHRlcihhKSx0aGlzLmRpc3BsYXlMaWJyYXJpZXMoYSkpfWRpc3BsYXlMaWJyYXJpZXMoYSxkKXtkP3RoaXMuc2hvd25MaWJyYXJpZXMr''@;'; put 'put ''PXRoaXMubG9hZE1vcmVDb3VudDoodGhpcy5zaG93bkxpYnJhcmllcz01MCx0aGlzLnJlc2V0TGlicmFyeUZvcmVncm91bmQoYSkpO2ZvcihsZXQgaD0wO2g8YS5sZW5ndGgmJmghPT10aGlzLnNob3duTGlicmFyaWVzO2grKylhW2hdLmluRm9yZWdyb3VuZD0hMH1yZXNldExpYnJhcnlGb3Jl''@;'; put 'put ''Z3JvdW5kKGEpe2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCsrKWFbZF0uaW5Gb3JlZ3JvdW5kPSExfW1ldGFPYmplY3RPbkZpbHRlcihhLGQsaCl7ZC5sZW5ndGg+MD8odGhpcy5yZXNldEFycmF5RmlsdGVyKGEpLGEuZm9yRWFjaChmPT57ZltoXS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGQu''@;'; put 'put ''dG9Mb3dlckNhc2UoKSl8fChmLmhpZGRlbj0hMCl9KSk6dGhpcy5yZXNldEFycmF5RmlsdGVyKGEpfXJlc2V0QXJyYXlGaWx0ZXIoYSl7YS5mb3JFYWNoKGQ9PntkLmhpZGRlbj0hMSxkLmluRm9yZWdyb3VuZCYmZGVsZXRlIGQuaW5Gb3JlZ3JvdW5kfSl9aXNJRW9yRURHRSgpe3ZhciBhPXdp''@;'; put 'put ''bmRvdy5uYXZpZ2F0b3IudXNlckFnZW50O3JldHVybiBhLmluZGV4T2YoIk1TSUUgIik+MHx8KGEuaW5kZXhPZigiVHJpZGVudC8iKT4wPyhhLmluZGV4T2YoInJ2OiIpLCEwKTphLmluZGV4T2YoIkVkZ2UvIik+MCl9Y29udmVydE9iamVjdHNUb0FycmF5KGEsZD0hMSl7cmV0dXJuIGQmJihh''@;'; put 'put ''PXRoaXMuZGVlcENsb25lKGEpKSxhLm1hcChoPT5PYmplY3Qua2V5cyhoKS5tYXAoZj0+aFtmXSkpfWFkZExlYWRpbmdaZXJvKGEpe3JldHVybiJzdHJpbmciIT10eXBlb2YgYSYmKGE9YS50b1N0cmluZygpKSxhLmxlbmd0aDwyPyIwIithOmF9ZGVsZXRlS2V5c0FuZEhhc2goYSxkLGg9ITAp''@;'; put 'put ''e2NvbnN0IGY9aD90aGlzLmRlZXBDbG9uZShhKTphO2ZvcihsZXQgdiBvZiBkKWRlbGV0ZSBmW3ZdO3JldHVybiBnTGUoSlNPTi5zdHJpbmdpZnkoZikpLnRvU3RyaW5nKCl9ZG93bmxvYWRUZXh0RmlsZShhLGQpe2NvbnN0IGg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpO2guc2V0QXR0''@;'; put 'put ''cmlidXRlKCJocmVmIiwiZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgsIitlbmNvZGVVUklDb21wb25lbnQoZCkpLGguc2V0QXR0cmlidXRlKCJkb3dubG9hZCIsYSsiLnR4dCIpLGguc3R5bGUuZGlzcGxheT0ibm9uZSIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChoKSxoLmNsaWNr''@;'; put 'put ''KCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChoKX1jb252ZXJ0QXJyYXlWYWx1ZXMoYSxkKXtpZihhLmxlbmd0aDwxKXJldHVybltdO3N3aXRjaChkKXtjYXNlIm51bWJlciI6cmV0dXJuIGEubWFwKGg9PjEqaCk7Y2FzZSJzdHJpbmciOnJldHVybiBhLnRvU3RyaW5nKCkuc3BsaXQoIiwi''@;'; put 'put ''KX19ZGVib3VuY2VDYWxsKGEsZCl7Y2xlYXJUaW1lb3V0KHRoaXMuZGVib3VuY2VUaW1lb3V0KSx0aGlzLmRlYm91bmNlVGltZW91dD1zZXRUaW1lb3V0KGQsYSl9ZGVlcENsb25lKGEpe3JldHVybiBKUihhKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhk''@;'; put 'put ''fHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKSxkMT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXt0aGlzLmxvZ2dlclNlcnZpY2U9YSx0aGlzLmFw''@;'; put 'put ''cFN0b3JlU2VydmljZT1kLHRoaXMuZXZlbnRTZXJ2aWNlPWgsdGhpcy5zYXNTZXJ2aWNlPWYsdGhpcy5oZWxwZXJTZXJ2aWNlPXYsdGhpcy5yb3V0ZXI9TSx0aGlzLnVzZXJDb3VudExpbWl0YXRpb249ITEsdGhpcy5saWNlbnNlS2V5RGF0YT1udWxsLHRoaXMuX2xpY2VuY2VTdGF0ZT1jVyx0''@;'; put 'put ''aGlzLmFsbEZlYXR1cmVzT249e3ZpZXdlcl9yb3dzX2FsbG93ZWQ6MS8wLGVkaXRvcl9yb3dzX2FsbG93ZWQ6MS8wLHN0YWdlX3Jvd3NfYWxsb3dlZDoxLzAsaGlzdG9yeV9yb3dzX2FsbG93ZWQ6MS8wLHN1Ym1pdF9yb3dzX2xpbWl0OjEvMCx0YWJsZXNfaW5fbGlicmFyeV9saW1pdDoxLzAs''@;'; put 'put ''dmlld2JveF9saW1pdDoxLzAsbGluZWFnZV9kYWlseV9saW1pdDoxLzAsdmlld2JveDohMCxmaWxlVXBsb2FkOiEwLGVkaXRSZWNvcmQ6ITAsYWRkUmVjb3JkOiEwfSx0aGlzLmZyZWVUaWVyTGljZW5jZURhdGE9e2RlbW86ITAsaG90X2xpY2Vuc2Vfa2V5OnRoaXMuYXBwU3RvcmVTZXJ2aWNl''@;'; put 'put ''LmdldERjQWRhcHRlclNldHRpbmdzKCk/LmhvdExpY2VuY2VLZXksdXNlcnNfYWxsb3dlZDp0aGlzLl9saWNlbmNlU3RhdGUudXNlcnNfYWxsb3dlZHx8MSx2YWxpZF91bnRpbDpMYSgpLmFkZCgxLCJ5ZWFyIikuZm9ybWF0KCJZWVlZLU1NLUREIiksc2l0ZV9pZDoiIixzaXRlX2lkX211bHRp''@;'; put 'put ''cGxlOltdfSx0aGlzLmlzQXBwQWN0aXZhdGVkPW5ldyBRcihudWxsKSx0aGlzLmlzQXBwT3ZlckNhcGFjaXR5PW5ldyBRcighMSksdGhpcy5jdXJyZW50VXNlckNhblJlZ2lzdGVyPW5ldyBRcighMSksdGhpcy5hcHBMb2NrZWQ9bmV3IFFyKCExKSx0aGlzLmxpY2Vuc2VFeHBpcmVzSW5EYXlz''@;'; put 'put ''PW5ldyBRcihudWxsKSx0aGlzLmlzQXBwRnJlZVRpZXI9bmV3IFFyKCExKSx0aGlzLmxpY2VuY2VQcm9ibGVtPW5ldyBRcihudWxsKSx0aGlzLmhvdF9saWNlbnNlX2tleT1uZXcgUXIodm9pZCAwKSx0aGlzLmxpY2VuY2VTdGF0ZT1uZXcgUXIodGhpcy5fbGljZW5jZVN0YXRlKSx0aGlzLnNh''@;'; put 'put ''c1NlcnZpY2UuaW5jb3JyZWN0U2l0ZUlkRW1pdHRlci5zdWJzY3JpYmUoRD0+e2lmKG51bGwhPT10aGlzLmlzQXBwQWN0aXZhdGVkLnZhbHVlJiYhdGhpcy5pc0FwcEZyZWVUaWVyLnZhbHVlKXtjb25zdCBaPWAvbGljZW5zaW5nL2tleT9lcnJvcj1taXNzbWF0Y2gmbWlzc21hdGNoSWQ9JHtE''@;'; put 'put ''fSZmb3JjZT10cnVlYDt0aGlzLmxpY2VuY2VQcm9ibGVtLm5leHQoWiksdGhpcy5kZWFjdGl2YXRlQXBwKFopfX0pfWFjdGl2YXRpb24oYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7ZC5mcmVlVGllckxpY2VuY2VEYXRhLmhvdF9saWNlbnNlX2tleT1kLmFwcFN0b3JlU2Vy''@;'; put 'put ''dmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpPy5ob3RMaWNlbmNlS2V5LHlpZWxkIGQuc2V0U3RhcnR1cHNlcnZpY2VSdWxlcyhhKSx5aWVsZCBkLmxpY2Vuc2luZyhhLmdsb2J2YXJzLGEuU1lTU0lURSl9KSgpfXNldFN0YXJ0dXBzZXJ2aWNlUnVsZXMoYSl7dGhpcy5fbGljZW5jZVN0YXRl''@;'; put 'put ''LmVkaXRSZWNvcmQ9IllFUyIhPT1hLmdsb2J2YXJzWzBdLkRDX1JFU1RSSUNUX0VESVRSRUNPUkR9bGljZW5zaW5nKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aWYoIWF8fCFhWzBdKXtjb25zdCB2PSdFcnJvciBnZXR0aW5nICJHbG9idmFycyIgZnJvbSBzdGFydHVw''@;'; put 'put ''c2VydmljZSByZXNwb25zZS4nO3JldHVybiBjb25zb2xlLmVycm9yKHYpLGguaXNBcHBBY3RpdmF0ZWQubmV4dCghMSksdm9pZCBoLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGAvbGljZW5zaW5nL2tleT9lcnJvcj1pbnZhbGlkJmRldGFpbHM9JHtidG9hKHYpfWApfWxldCBmPWFbMF07cmV0dXJu''@;'; put 'put ''IHZvaWQgMD09PWYuTElDRU5DRV9LRVl8fHZvaWQgMD09PWYuQUNUSVZBVElPTl9LRVl8fG51bGw9PWYuUkVHSVNURVJDT1VOVHx8bnVsbD09Zi5JU1JFR0lTVEVSRUQ/KGNvbnNvbGUuZXJyb3IoIlNvbWUgb2YgZ2xvYnZhcnMgYXJlIG5vdCBwcmVzZW50IiksaC5pc0FwcEFjdGl2YXRlZC5u''@;'; put 'put ''ZXh0KCExKSx2b2lkIGguZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkVycm9yIiwiU29tZSBvZiB0aGUgZ2xvYnZhcnMgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBzdGFydHVwc2VydmljZSIpKTpmLkxJQ0VOQ0VfS0VZJiZmLkFDVElWQVRJT05fS0VZPyhoLmxpY2VuY2VLZXk9Zi5MSUNF''@;'; put 'put ''TkNFX0tFWSxoLmFjdGl2YXRpb25LZXk9Zi5BQ1RJVkFUSU9OX0tFWSx2b2lkKHlpZWxkIGguZGVjcnlwdExpY2Vuc2VLZXkoZi5MSUNFTkNFX0tFWSxmLkFDVElWQVRJT05fS0VZKS50aGVuKGZ1bmN0aW9uKCl7dmFyIHY9ZWUoZnVuY3Rpb24qKE0pe3lpZWxkIGguYXBwbGljYXRpb25BY3Rp''@;'; put 'put ''dmF0aW9uKE0sZixkKX0pO3JldHVybiBmdW5jdGlvbihNKXtyZXR1cm4gdi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLGZ1bmN0aW9uKCl7dmFyIHY9ZWUoZnVuY3Rpb24qKE0pe2NvbnN0IEQ9YEVycm9yIGRlY3J5cHRpbmcgbGljZW5zZSBrZXkuICR7TX1gO2NvbnNvbGUuZXJyb3IoRCk7''@;'; put 'put ''Y29uc3QgWj1gL2xpY2Vuc2luZy9rZXk/ZXJyb3I9aW52YWxpZCZkZXRhaWxzPSR7YnRvYShEKX0mZm9yY2U9dHJ1ZWA7aC5saWNlbmNlUHJvYmxlbS5uZXh0KFopLGgucm91dGVyLm5hdmlnYXRlQnlVcmwoWiksc2V0VGltZW91dCgoKT0+aC5hcHBsaWNhdGlvbkFjdGl2YXRpb24oaC5mcmVl''@;'; put 'put ''VGllckxpY2VuY2VEYXRhLGYsZCwhMCkpfSk7cmV0dXJuIGZ1bmN0aW9uKE0pe3JldHVybiB2LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpKSk6eWllbGQgaC5hcHBsaWNhdGlvbkFjdGl2YXRpb24oaC5mcmVlVGllckxpY2VuY2VEYXRhLGYsZCl9KSgpfWFwcGxpY2F0aW9uQWN0aXZhdGlv''@;'; put 'put ''bihhLGQsaCxmKXtmfHwoZj0hMSksdGhpcy5zZXRTaXRlSWQoYSksIWEuZGVtbyYmZCYmaCYmdGhpcy5oYW5kbGVTaXRlSWRNaXNzbWF0Y2goYSxkLGgsZik7bGV0IHY9dm9pZCAwIT09YS5ob3RfbGljZW5zZV9rZXk/YS5ob3RfbGljZW5zZV9rZXk6dGhpcy5ob3RfbGljZW5zZV9rZXkudmFs''@;'; put 'put ''dWU7dnx8KHY9dGhpcy5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKT8uaG90TGljZW5jZUtleSksdGhpcy5ob3RfbGljZW5zZV9rZXkubmV4dCh2KSx0aGlzLnVzZXJDb3VudExpbWl0YXRpb24mJnRoaXMuaGFuZGxlVXNlcnNBbGxvd2VkKGEpLHRoaXMubGljZW5zZUtl''@;'; put 'put ''eURhdGE9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShhKSx3aW5kb3cuYXBwaW5mbygpO2NvbnN0e2V4cGlyeV9kYXRlOk0sZGF5c1RvRXhwaXJ5OkR9PXRoaXMuY2FsY3VsYXRlRXhwaXJ5KGEpO2lmKHdpbmRvdy5saWNlbnNlRXhwaXJlc0luPUQsdGhpcy5saWNlbnNlRXhwaXJlc0lu''@;'; put 'put ''RGF5cy5uZXh0KEQpLEQ8PTApcmV0dXJuIGNvbnNvbGUuZXJyb3IoIkxpY2Vuc2Uga2V5IGhhcyBleHBpcmVkIiksdm9pZChkJiZoJiZ0aGlzLmhhbmRsZUV4cGlyeShNLGQsaCxmKSk7dGhpcy5pc0FwcEZyZWVUaWVyLm5leHQoISFhLmRlbW8pLGQmJnRoaXMuaGFuZGxlVXNlclJlZ2lzdHJh''@;'; put 'put ''dGlvbihhLGQsZiksdGhpcy5kZWNvZGVMaWNlbmNlRmVhdHVyZXMoYSksdGhpcy5saWNlbmNlU3RhdGUubmV4dCh0aGlzLl9saWNlbmNlU3RhdGUpfWRlY29kZUxpY2VuY2VGZWF0dXJlcyhhKXtpZighYS5mZWF0dXJlcyl7aWYoYS5kZW1vKXJldHVybjtyZXR1cm4gdm9pZCh0aGlzLl9saWNl''@;'; put 'put ''bmNlU3RhdGU9dGhpcy5hbGxGZWF0dXJlc09uKX1jb25zdCBkPWEuZmVhdHVyZXMuc3BsaXQoIiwiKTt0aGlzLl9saWNlbmNlU3RhdGU9ey4uLnRoaXMuX2xpY2VuY2VTdGF0ZSx2aWV3ZXJfcm93c19hbGxvd2VkOnRoaXMucGFyc2VGZWF0dXJlVmFsdWUoZFtoaC52aWV3ZXJfcm93c19hbGxv''@;'; put 'put ''d2VkXSksZWRpdG9yX3Jvd3NfYWxsb3dlZDp0aGlzLnBhcnNlRmVhdHVyZVZhbHVlKGRbaGguZWRpdG9yX3Jvd3NfYWxsb3dlZF0pLHN0YWdlX3Jvd3NfYWxsb3dlZDp0aGlzLnBhcnNlRmVhdHVyZVZhbHVlKGRbaGguc3RhZ2Vfcm93c19hbGxvd2VkXSksaGlzdG9yeV9yb3dzX2FsbG93ZWQ6''@;'; put 'put ''dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW2hoLmhpc3Rvcnlfcm93c19hbGxvd2VkXSksc3VibWl0X3Jvd3NfbGltaXQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW2hoLnN1Ym1pdF9yb3dzX2xpbWl0XSksdGFibGVzX2luX2xpYnJhcnlfbGltaXQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShk''@;'; put 'put ''W2hoLnRhYmxlc19pbl9saWJyYXJ5X2xpbWl0XSksdmlld2JveF9saW1pdDp0aGlzLnBhcnNlRmVhdHVyZVZhbHVlKGRbaGgudmlld2JveF9saW1pdF0pLGxpbmVhZ2VfZGFpbHlfbGltaXQ6dGhpcy5wYXJzZUZlYXR1cmVWYWx1ZShkW2hoLmxpbmVhZ2VfZGFpbHlfbGltaXRdKSx2aWV3Ym94''@;'; put 'put ''OnRoaXMucGFyc2VGZWF0dXJlVG9nZ2xlKGRbaGgudmlld2JveF0pLGZpbGVVcGxvYWQ6dGhpcy5wYXJzZUZlYXR1cmVUb2dnbGUoZFtoaC5maWxlVXBsb2FkXSksZWRpdFJlY29yZDp0aGlzLnBhcnNlRmVhdHVyZVRvZ2dsZShkW2hoLmVkaXRSZWNvcmRdKSxhZGRSZWNvcmQ6dGhpcy5wYXJz''@;'; put 'put ''ZUZlYXR1cmVUb2dnbGUoZFtoaC5hZGRSZWNvcmRdKX0sdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZygiTGljZW5jZSBzdGF0ZToiLHRoaXMuX2xpY2VuY2VTdGF0ZSl9cGFyc2VGZWF0dXJlVmFsdWUoYSl7cmV0dXJuIi0iPT09YT8xLzA6cGFyc2VJbnQoYSl9cGFyc2VGZWF0dXJlVG9nZ2xlKGEp''@;'; put 'put ''e3JldHVybiEhcGFyc2VJbnQoYSl9ZGVjcnlwdExpY2Vuc2VLZXkoYSxkKXt2YXIgaD10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBmPWVlKGZ1bmN0aW9uKih2LE0pe2lmKCF3aW5kb3cuY3J5cHRvfHwhd2luZG93LmNyeXB0by5zdWJ0bGUpdHJ5e2xldCBiZT1hdG9i''@;'; put 'put ''KGEuc3BsaXQoIiIpLnJldmVyc2UoKS5qb2luKCIiKSk7dihKU09OLnBhcnNlKGJlKSl9Y2F0Y2goYmUpe00oIkVycm9yIHBhcnNpbmcgaHR0cCBsaWNlbnNlIGtleSBkYXRhLiAiK2JlKX1sZXQgWixEPXlpZWxkIGguYmFzZTY0VG9BcnJheUJ1ZmZlcihhKS5jYXRjaChiZT0+e00oYmUpfSk7''@;'; put 'put ''Y29uc3QgbmU9eWllbGQgaC5iYXNlNjRUb0FycmF5QnVmZmVyKGQpLmNhdGNoKGJlPT57TShiZSl9KTtpZighbmUpcmV0dXJuIHZvaWQgTSgiTWlzc2luZyBhY3RpdmF0aW9uIGtleSIpO2xldCBjZTtaPW5lO3RyeXtjZT15aWVsZCB3aW5kb3cuY3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoInBr''@;'; put 'put ''Y3M4IixaLHtuYW1lOiJSU0EtT0FFUCIsaGFzaDoiU0hBLTI1NiJ9LCEwLFsiZGVjcnlwdCJdKX1jYXRjaChiZSl7TSgiVW5hYmxlIHRvIGltcG9ydCBkZWNyeXB0aW9uIGtleTogIitiZSl9aWYoY2UpaWYoRCl0cnl7d2luZG93LmNyeXB0by5zdWJ0bGUuZGVjcnlwdCh7bmFtZToiUlNBLU9B''@;'; put 'put ''RVAiLGhhc2g6e25hbWU6IlNIQS0yNTYifX0sY2UsRCkudGhlbihiZT0+e2xldCBFZT0obmV3IHVUZS5UZXh0RGVjb2RlcikuZGVjb2RlKGJlKTt0cnl7dihKU09OLnBhcnNlKEVlKSl9Y2F0Y2goQmUpe00oIkVycm9yIHBhcnNpbmcgbGljZW5zZSBrZXkgZGF0YS4gIitCZSl9fSxiZT0+e00o''@;'; put 'put ''YmUpfSl9Y2F0Y2goYmUpe00oYmUpfWVsc2UgTSgiTGljZW5zZSBrZXkgYnl0ZXMgbWlzc2luZyIpO2Vsc2UgTSgiVW5hYmxlIHRvIGltcG9ydCBkZWNyeXB0aW9uIGtleSIpfSk7cmV0dXJuIGZ1bmN0aW9uKHYsTSl7cmV0dXJuIGYuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSl9Z2V0SG90''@;'; put 'put ''TGljZW5zZUtleSgpe3JldHVybiB0aGlzLmhvdF9saWNlbnNlX2tleS52YWx1ZX1nZXRMaWNlbnNlS2V5RGF0YSgpe3JldHVybiB0aGlzLmxpY2Vuc2VLZXlEYXRhfWRlYWN0aXZhdGVBcHAoYSl7dGhpcy5fbGljZW5jZVN0YXRlPWNXLHRoaXMuYXBwbGljYXRpb25BY3RpdmF0aW9uKHRoaXMu''@;'; put 'put ''ZnJlZVRpZXJMaWNlbmNlRGF0YSksYSYmdGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChhKX1jaGVja0xpbmVhZ2VMaW1pdChhKXtpZih0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5saW5lYWdlX2RhaWx5X2xpbWl0PT09MS8wKXJldHVybiExO2NvbnN0IGQ9bG9jYWxTdG9yYWdlLmdldEl0ZW0o''@;'; put 'put ''ImxpbmVhZ2VfcmVuZGVycyIpLGg9TGEoKS52YWx1ZU9mKCk7aWYoIWQpcmV0dXJuIGF8fHRoaXMuc2V0TGluZWFnZVJlbmRlcihoLDEpLCExO2NvbnN0IGY9cGFyc2VJbnQoZC5zcGxpdCgiLCIpWzBdKSx2PXBhcnNlSW50KGQuc3BsaXQoIiwiKVsxXSk7cmV0dXJuIExhKGYpLmlzU2FtZShM''@;'; put 'put ''YSgpLCJkYXkiKT92Pj10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5saW5lYWdlX2RhaWx5X2xpbWl0fHwoYXx8dGhpcy5zZXRMaW5lYWdlUmVuZGVyKGgsdisxKSwhMSk6KGF8fHRoaXMuc2V0TGluZWFnZVJlbmRlcihoLDEpLCExKX1zZXRMaW5lYWdlUmVuZGVyKGEsZCl7bG9jYWxTdG9yYWdl''@;'; put 'put ''LnNldEl0ZW0oImxpbmVhZ2VfcmVuZGVycyIsYCR7YX0sJHtkfWApfWJhc2U2NFRvQXJyYXlCdWZmZXIoYSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKCl7dmFyIGQ9ZWUoZnVuY3Rpb24qKGgsZil7aChpY2UuRChhKSl9KTtyZXR1cm4gZnVuY3Rpb24oaCxmKXtyZXR1cm4gZC5hcHBs''@;'; put 'put ''eSh0aGlzLGFyZ3VtZW50cyl9fSgpKX1hcnJheUJ1ZmZlclRvQmFzZTY0KGEpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2QoaWNlLmwoYSkpfSl9c2V0U2l0ZUlkKGEpe2Euc2l0ZV9pZF9tdWx0aXBsZT90aGlzLnNhc1NlcnZpY2Uuc2V0TGljZW5zZVNpdGVJZChhLnNpdGVfaWRfbXVs''@;'; put 'put ''dGlwbGUpOmEuc2l0ZV9pZCYmdGhpcy5zYXNTZXJ2aWNlLnNldExpY2Vuc2VTaXRlSWQoYS5zaXRlX2lkKX1oYW5kbGVTaXRlSWRNaXNzbWF0Y2goYSxkLGgsZil7bGV0IHY9ITEsTT0hMTtpZigoIWEuc2l0ZV9pZHx8YS5zaXRlX2lkIT09aCkmJih2PSEwKSwoIWEuc2l0ZV9pZF9tdWx0aXBs''@;'; put 'put ''ZXx8IWEuc2l0ZV9pZF9tdWx0aXBsZS5pbmNsdWRlcyhoKSkmJihNPSEwKSx2JiZNKXJldHVybiBjb25zb2xlLmVycm9yKCJUaGUga2V5IHByb3ZpZGVkIGlzIGZvciBkaWZmZXJlbnQgb3JnYW5pemF0aW9uLiIpLHZvaWQgc2V0VGltZW91dCgoKT0+e2NvbnN0IEQ9Ii9saWNlbnNpbmcva2V5''@;'; put 'put ''P2Vycm9yPW1pc3NtYXRjaCZmb3JjZT10cnVlIjt0aGlzLmxpY2VuY2VQcm9ibGVtLm5leHQoRCksdGhpcy5fbGljZW5jZVN0YXRlPWNXLHRoaXMuYXBwbGljYXRpb25BY3RpdmF0aW9uKHRoaXMuZnJlZVRpZXJMaWNlbmNlRGF0YSxkLGgsITApLGZ8fHRoaXMucm91dGVyLm5hdmlnYXRlQnlV''@;'; put 'put ''cmwoRCl9KX1jYWxjdWxhdGVFeHBpcnkoYSl7bGV0IGQ9TGEoYS52YWxpZF91bnRpbCwiWVlZWS1NTS1ERCIpLnN0YXJ0T2YoImRheSIpLGg9TGEoKS5zdGFydE9mKCJkYXkiKSxmPWQuZGlmZihoLCJkYXlzIik7cmV0dXJue2V4cGlyeV9kYXRlOmQsZGF5c1RvRXhwaXJ5OmZ9fWhhbmRsZUV4''@;'; put 'put ''cGlyeShhLGQsaCxmKXtzZXRUaW1lb3V0KCgpPT57Y29uc3Qgdj1gL2xpY2Vuc2luZy9rZXk/Zm9yY2U9dHJ1ZSZlcnJvcj1leHBpcmVkJmRldGFpbHM9JHtidG9hKCJFeHBpcnkgZGF0ZTogIithLmZvcm1hdCgiREQvTU0vWVlZWSIpKX1gO3RoaXMubGljZW5jZVByb2JsZW0ubmV4dCh2KSx0''@;'; put 'put ''aGlzLmFwcGxpY2F0aW9uQWN0aXZhdGlvbih0aGlzLmZyZWVUaWVyTGljZW5jZURhdGEsZCxoLCEwKSxmfHx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKHYpfSl9aGFuZGxlVXNlcnNBbGxvd2VkKGEpe2EuZGVtbyYmdm9pZCAwIT09dGhpcy5fbGljZW5jZVN0YXRlLnVzZXJzX2FsbG93ZWQm''@;'; put 'put ''JihhLnVzZXJzX2FsbG93ZWQ9YS51c2Vyc19hbGxvd2VkPjA/YS51c2Vyc19hbGxvd2VkOnRoaXMuX2xpY2VuY2VTdGF0ZS51c2Vyc19hbGxvd2VkKSx0aGlzLl9saWNlbmNlU3RhdGUudXNlcnNfYWxsb3dlZD1hLnVzZXJzX2FsbG93ZWR9aGFuZGxlVXNlclJlZ2lzdHJhdGlvbihhLGQsaCl7''@;'; put 'put ''aWYodGhpcy51c2VyQ291bnRMaW1pdGF0aW9uJiYoZC5SRUdJU1RFUkNPVU5UPmEudXNlcnNfYWxsb3dlZD8oY29uc29sZS53YXJuKCJBcHAgaGFzIG1vcmUgdXNlcnMgcmVnaXN0ZXJlZCB0aGVuIGxpY2Vuc2VkLiIpLHRoaXMuaXNBcHBPdmVyQ2FwYWNpdHkubmV4dCghMCkpOmQuUkVHSVNU''@;'; put 'put ''RVJDT1VOVD09PWEudXNlcnNfYWxsb3dlZCYmY29uc29sZS53YXJuKCJBcHAgaGFzIGhpdCBsaW1pdCBvZiB1c2VycyByZWdpc3RlcmVkLiIpKSwxIT09ZC5JU1JFR0lTVEVSRUQpcmV0dXJuIGQuUkVHSVNURVJDT1VOVDxhLnVzZXJzX2FsbG93ZWR8fCF0aGlzLnVzZXJDb3VudExpbWl0YXRp''@;'; put 'put ''b24/KGNvbnNvbGUubG9nKCJVc2VyIGNhbiByZWdpc3RlciIpLHRoaXMuY3VycmVudFVzZXJDYW5SZWdpc3Rlci5uZXh0KCEwKSx0aGlzLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpLHZvaWQoaHx8dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2xpY2Vuc2luZy9yZWdpc3RlciIpKSk6KHRo''@;'; put 'put ''aXMuY3VycmVudFVzZXJDYW5SZWdpc3Rlci5uZXh0KCExKSx0aGlzLmlzQXBwQWN0aXZhdGVkLm5leHQoITEpLHZvaWQoaHx8dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2xpY2Vuc2luZy9saW1pdCIpKSk7dGhpcy5pc0FwcEFjdGl2YXRlZC5uZXh0KCEwKX1zdGF0aWN7dGhpcy5cdTAy''@;'; put 'put ''NzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShNcihTZCksTXIocTgpLE1yKHBjKSxNcihKcyksTXIoR3UpLE1yKExzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30p''@;'; put 'put ''KCksUVI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxEKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLnNhc1NlcnZpY2U9aCx0aGlzLmxvZ2dlclNlcnZpY2U9Zix0aGlzLmFwcFNldHRpbmdzU2VydmljZT12LHRoaXMucm91dGVy''@;'; put 'put ''PU0sdGhpcy5hcHBTdG9yZVNlcnZpY2U9RCx0aGlzLnN5c3NpdGU9bmV3IFFyKG51bGwpLHRoaXMuZW52aXJvbm1lbnRJbmZvPXt9LHRoaXMuc3Vic2NyaWJlKCksdGhpcy5yb3V0ZXIuZXZlbnRzLnN1YnNjcmliZShuZT0+e25lIGluc3RhbmNlb2YgY3AmJiIvZGVwbG95Ij09PW5lLnVybCYm''@;'; put 'put ''dGhpcy5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKX0pO2NvbnN0IFo9dGhpcy5hcHBTZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MudmFsdWU7Wi5wZXJzaXN0U2VsZWN0ZWRUaGVtZSYmdGhpcy5ldmVudFNlcnZpY2UudG9nZ2xlRGFya01vZGUoWi5zZWxlY3RlZFRoZW1lIT09dXku''@;'; put 'put ''bGlnaHQmJlouc2VsZWN0ZWRUaGVtZT09PXV5LmRhcmspfXNhc1NlcnZpY2VJbml0KCl7dGhpcy5zYXNTZXJ2aWNlLnNhc1NlcnZpY2VJbml0KCl9c3Vic2NyaWJlKCl7dGhpcy5zYXNTZXJ2aWNlLmxvYWRTdGFydHVwU2VydmljZUVtaXR0ZXIuc3Vic2NyaWJlKCgpPT57dGhpcy5zdGFydFVw''@;'; put 'put ''RGF0YSgpfSksdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3RTaXRlSWRFbWl0dGVyLnN1YnNjcmliZShhPT57dGhpcy5wYXRjaFN5c3NpdGUoYSl9KX1nZXRFbnZpcm9ubWVudEluZm8oKXtyZXR1cm4gdGhpcy5lbnZpcm9ubWVudEluZm99cGF0Y2hTeXNzaXRlKGEpe2xldCBkPXRoaXMuc3lzc2l0''@;'; put 'put ''ZS5nZXRWYWx1ZSgpO2QmJihkLmluY2x1ZGVzKGEpfHwoZC5wdXNoKGEpLHRoaXMuc3lzc2l0ZS5uZXh0KGQpKSl9c3RhcnRVcERhdGEoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgZD0hMTt5aWVsZCBhLnNhc1NlcnZpY2UucmVxdWVzdCgicHVibGljL3N0YXJ0dXBz''@;'; put 'put ''ZXJ2aWNlIixudWxsKS50aGVuKGZ1bmN0aW9uKCl7dmFyIGg9ZWUoZnVuY3Rpb24qKGYpe2Euc3lzc2l0ZS5uZXh0KFtmLmFkYXB0ZXJSZXNwb25zZS5TWVNTSVRFXSk7bGV0IHY9W107aWYoKCFmLmFkYXB0ZXJSZXNwb25zZS5nbG9idmFyc3x8Zi5hZGFwdGVyUmVzcG9uc2UuZ2xvYnZhcnMm''@;'; put 'put ''JiFmLmFkYXB0ZXJSZXNwb25zZS5nbG9idmFyc1swXSkmJnYucHVzaCgiR2xvYnZhcnMiKSxmLmFkYXB0ZXJSZXNwb25zZS5zYXNkYXRhc2V0c3x8di5wdXNoKCJTYXNkYXRhc2V0cyIpLGYuYWRhcHRlclJlc3BvbnNlLnNhc2xpYnN8fHYucHVzaCgiU2FzbGlicyIpLGYuYWRhcHRlclJlc3Bv''@;'; put 'put ''bnNlLnhsbWFwc3x8di5wdXNoKCJYTE1hcHMiKSx2Lmxlbmd0aD4wKXJldHVybiBkPSEwLGEuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkVycm9yIixgJHt2LmpvaW4oIiwgIil9IGFyZSBub3QgcHJlc2VudCBpbiB0aGUgc3RhcnR1cHNlcnZpY2VgKSx2b2lkIGEubGljZW5jZVNlcnZp''@;'; put 'put ''Y2UuaXNBcHBBY3RpdmF0ZWQubmV4dCghMSk7Y29uc3QgTT1hLmFwcFN0b3JlU2VydmljZS5nZXREY0FkYXB0ZXJTZXR0aW5ncygpO2EuZW52aXJvbm1lbnRJbmZvPXtTWVNTSVRFOmYuYWRhcHRlclJlc3BvbnNlLlNZU1NJVEUsU1lTU0NQTDpmLmFkYXB0ZXJSZXNwb25zZS5TWVNTQ1BMLFNZ''@;'; put 'put ''U1RDUElQSE9TVE5BTUU6Zi5hZGFwdGVyUmVzcG9uc2UuU1lTVENQSVBIT1NUTkFNRSxTWVNWTE9ORzpmLmFkYXB0ZXJSZXNwb25zZS5TWVNWTE9ORyxNRU1TSVpFOmYuYWRhcHRlclJlc3BvbnNlLk1FTVNJWkUsU1lTUFJPQ0VTU01PREU6Zi5hZGFwdGVyUmVzcG9uc2UuU1lTUFJPQ0VTU01P''@;'; put 'put ''REUsU1lTSE9TVE5BTUU6Zi5hZGFwdGVyUmVzcG9uc2UuU1lTSE9TVE5BTUUsU1lTVVNFUklEOmYuYWRhcHRlclJlc3BvbnNlLlNZU1VTRVJJRCxTWVNIT1NUSU5GT0xPTkc6Zi5hZGFwdGVyUmVzcG9uc2UuU1lTSE9TVElORk9MT05HLFNZU0VOQ09ESU5HOmYuYWRhcHRlclJlc3BvbnNlLlNZ''@;'; put 'put ''U0VOQ09ESU5HLEFVVE9FWEVDOmYuYWRhcHRlclJlc3BvbnNlLkFVVE9FWEVDLElTQURNSU46Zi5hZGFwdGVyUmVzcG9uc2UuZ2xvYnZhcnNbMF0uSVNBRE1JTixEQ19BRE1JTl9HUk9VUDpmLmFkYXB0ZXJSZXNwb25zZS5nbG9idmFyc1swXS5EQ19BRE1JTl9HUk9VUCxBUFBfTE9DOk0/LmFw''@;'; put 'put ''cExvY307bGV0IG5lLGNlLEQ9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzZGF0YXNldHMsWj17fTtmb3IobGV0IHFlIG9mIEQpWltxZS5MSUJSRUZdfHwoWltxZS5MSUJSRUZdPVtdKSxaW3FlLkxJQlJFRl0ucHVzaChxZS5EU04pO2xldCBiZT1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KFopKSxF''@;'; put 'put ''ZT1bXTtmb3IobGV0IHFlIG9mIE9iamVjdC5rZXlzKGJlKSlFZS5wdXNoKHtMSUJSQVJZUkVGOnFlLHRhYmxlczpiZVtxZV19KTtsZXQgQmU9RWU7bmU9WixjZT1PYmplY3Qua2V5cyhaKSx2b2lkIDAhPT1uZSYmKEtuLmVkaXRvci5saWJzQW5kVGFibGVzPW5lKSxLbi54bG1hcHM9Zi5hZGFw''@;'; put 'put ''dGVyUmVzcG9uc2UueGxtYXBzLm1hcChxZT0+KHtpZDpxZVswXSxkZXNjcmlwdGlvbjpxZVsxXSx0YXJnZXREUzpxZVsyXX0pKSxLbi5lZGl0b3IudHJlZU5vZGVMaWJyYXJpZXM9QmUsS24uZWRpdG9yLmxpYnJhcmllcz1jZSxLbi5lZGl0b3Iuc3RhcnR1cFNldD0hMCxLbi5kY0xpYj1mLmFk''@;'; put 'put ''YXB0ZXJSZXNwb25zZS5nbG9idmFyc1swXS5EQ0xJQix5aWVsZCBhLmxpY2VuY2VTZXJ2aWNlLmFjdGl2YXRpb24oZi5hZGFwdGVyUmVzcG9uc2UpfSk7cmV0dXJuIGZ1bmN0aW9uKGYpe3JldHVybiBoLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCkpLmNhdGNoKGg9PntkPSEwLGEuZXZlbnRT''@;'; put 'put ''ZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkVycm9yIiwiVGhlcmUgaXMgYW4gaXNzdWUgd2l0aCBzdGFydHVwc2VydmljZSByZXNwb25zZSIpLGEubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWQubmV4dCghMSl9KSxhLmxvZ2dlclNlcnZpY2UubG9nKCJBY3RpdmF0ZWQ6IixhLmxpY2VuY2VT''@;'; put 'put ''ZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLnZhbHVlKSxkfHwoYS5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKSxhLmxpY2VuY2VTZXJ2aWNlLmlzQXBwQWN0aXZhdGVkLnZhbHVlP2Eucm91dGVyLnVybC5pbmNsdWRlcygibGljZW5zaW5nIikmJmEucm91dGVyLm5hdmlnYXRlQnlVcmwo''@;'; put 'put ''Ii9ob21lIik6IWEucm91dGVyLnVybC5pbmNsdWRlcygiZGVwbG95IikmJiFhLnJvdXRlci51cmwuaW5jbHVkZXMoImxpY2Vuc2luZyIpJiZhLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvbGljZW5zaW5nL2tleT9lcnJvcj1taXNzaW5nJmZvcmNlPXRydWUiKSl9KSgpfXN0YXRpY3t0aGlzLlx1''@;'; put 'put ''MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKE1yKGQxKSxNcihwYyksTXIoSnMpLE1yKFNkKSxNcihqUiksTXIoTHMpLE1yKHE4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCksd3VlPSgo''@;'; put 'put ''KT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9yZW5kZXJlcj1hLHRoaXMuX2VsZW1lbnRSZWY9ZCx0aGlzLm9uQ2hhbmdlPWg9Pnt9LHRoaXMub25Ub3VjaGVkPSgpPT57fX1zZXRQcm9wZXJ0eShhLGQpe3RoaXMuX3JlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnRS''@;'; put 'put ''ZWYubmF0aXZlRWxlbWVudCxhLGQpfXJlZ2lzdGVyT25Ub3VjaGVkKGEpe3RoaXMub25Ub3VjaGVkPWF9cmVnaXN0ZXJPbkNoYW5nZShhKXt0aGlzLm9uQ2hhbmdlPWF9c2V0RGlzYWJsZWRTdGF0ZShhKXt0aGlzLnNldFByb3BlcnR5KCJkaXNhYmxlZCIsYSl9c3RhdGlje3RoaXMuXHUwMjc1''@;'; put 'put ''ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoRWEpLEdlKGVvKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjfSl9fXJldHVybiBjfSkoKSxuNz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgd3Vle3N0YXRpY3t0aGlzLlx1MDI3NWZhYz0oKCk9PntsZXQgYTtyZXR1''@;'; put 'put ''cm4gZnVuY3Rpb24oaCl7cmV0dXJuKGF8fChhPVpzKGMpKSkoaHx8Yyl9fSkoKX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxmZWF0dXJlczpbQ29dfSl9fXJldHVybiBjfSkoKTtjb25zdCBmcD1uZXcgU3QoIiIpLHZMZT17cHJvdmlkZTpmcCx1c2VFeGlzdGluZzprcygoKT0+''@;'; put 'put ''QjEpLG11bHRpOiEwfTtsZXQgQjE9KCgpPT57Y2xhc3MgYyBleHRlbmRzIG43e3dyaXRlVmFsdWUoYSl7dGhpcy5zZXRQcm9wZXJ0eSgiY2hlY2tlZCIsYSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPSgoKT0+e2xldCBhO3JldHVybiBmdW5jdGlvbihoKXtyZXR1cm4oYXx8KGE9WnMoYykpKSho''@;'; put 'put ''fHxjKX19KSgpfXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJjaGVja2JveCIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwi''@;'; put 'put ''Y2hlY2tib3giLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmRnQoImNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGgub25DaGFuZ2Uodi50YXJnZXQuY2hlY2tlZCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vblRvdWNoZWQoKX0pfSxmZWF0''@;'; put 'put ''dXJlczpbcG8oW3ZMZV0pLENvXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgYkxlPXtwcm92aWRlOmZwLHVzZUV4aXN0aW5nOmtzKCgpPT5RbCksbXVsdGk6ITB9LF9MZT1uZXcgU3QoIiIpO2xldCBRbD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgd3Vle2NvbnN0cnVjdG9yKGEsZCxoKXtzdXBlcihh''@;'; put 'put ''LGQpLHRoaXMuX2NvbXBvc2l0aW9uTW9kZT1oLHRoaXMuX2NvbXBvc2luZz0hMSxudWxsPT10aGlzLl9jb21wb3NpdGlvbk1vZGUmJih0aGlzLl9jb21wb3NpdGlvbk1vZGU9IWZ1bmN0aW9uIHlMZSgpe2NvbnN0IGM9SjUoKT9KNSgpLmdldFVzZXJBZ2VudCgpOiIiO3JldHVybi9hbmRyb2lk''@;'; put 'put ''IChcZCspLy50ZXN0KGMudG9Mb3dlckNhc2UoKSl9KCkpfXdyaXRlVmFsdWUoYSl7dGhpcy5zZXRQcm9wZXJ0eSgidmFsdWUiLGE/PyIiKX1faGFuZGxlSW5wdXQoYSl7KCF0aGlzLl9jb21wb3NpdGlvbk1vZGV8fHRoaXMuX2NvbXBvc2l0aW9uTW9kZSYmIXRoaXMuX2NvbXBvc2luZykmJnRo''@;'; put 'put ''aXMub25DaGFuZ2UoYSl9X2NvbXBvc2l0aW9uU3RhcnQoKXt0aGlzLl9jb21wb3Npbmc9ITB9X2NvbXBvc2l0aW9uRW5kKGEpe3RoaXMuX2NvbXBvc2luZz0hMSx0aGlzLl9jb21wb3NpdGlvbk1vZGUmJnRoaXMub25DaGFuZ2UoYSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQp''@;'; put 'put ''e3JldHVybiBuZXcoZHx8YykoR2UoRWEpLEdlKGVvKSxHZShfTGUsOCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siaW5wdXQiLCJmb3JtQ29udHJvbE5hbWUiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsidGV4dGFyZWEiLCJmb3JtQ29udHJvbE5h''@;'; put 'put ''bWUiLCIiXSxbImlucHV0IiwiZm9ybUNvbnRyb2wiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsidGV4dGFyZWEiLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJuZ01vZGVsIiwiIiwzLCJ0eXBlIiwiY2hlY2tib3giXSxbInRleHRhcmVhIiwibmdNb2RlbCIsIiJdLFsiIiwibmdEZWZh''@;'; put 'put ''dWx0Q29udHJvbCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0KCJpbnB1dCIsZnVuY3Rpb24odil7cmV0dXJuIGguX2hhbmRsZUlucHV0KHYudGFyZ2V0LnZhbHVlKX0pKCJibHVyIixmdW5jdGlvbigpe3JldHVybiBoLm9uVG91Y2hlZCgpfSkoImNvbXBvc2l0aW9u''@;'; put 'put ''c3RhcnQiLGZ1bmN0aW9uKCl7cmV0dXJuIGguX2NvbXBvc2l0aW9uU3RhcnQoKX0pKCJjb21wb3NpdGlvbmVuZCIsZnVuY3Rpb24odil7cmV0dXJuIGguX2NvbXBvc2l0aW9uRW5kKHYudGFyZ2V0LnZhbHVlKX0pfSxmZWF0dXJlczpbcG8oW2JMZV0pLENvXX0pfX1yZXR1cm4gY30pKCk7Y29u''@;'; put 'put ''c3QgZDA9bmV3IFN0KCIiKSxjbT1uZXcgU3QoIiIpO2Z1bmN0aW9uIHh1ZShjKXtyZXR1cm4gZnVuY3Rpb24gbG0oYyl7cmV0dXJuIG51bGw9PWN8fCgic3RyaW5nIj09dHlwZW9mIGN8fEFycmF5LmlzQXJyYXkoYykpJiYwPT09Yy5sZW5ndGh9KGMudmFsdWUpP3tyZXF1aXJlZDohMH06bnVs''@;'; put 'put ''bH1mdW5jdGlvbiBFdWUoYyl7cmV0dXJuITA9PT1jLnZhbHVlP251bGw6e3JlcXVpcmVkOiEwfX1mdW5jdGlvbiBlTChjKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBJdWUoYyl7cmV0dXJuIG51bGwhPWN9ZnVuY3Rpb24gUnVlKGMpe3JldHVybiB5TShjKT9XdShjKTpjfWZ1bmN0aW9uIEx1ZShj''@;'; put 'put ''KXtsZXQgbD17fTtyZXR1cm4gYy5mb3JFYWNoKGE9PntsPW51bGwhPWE/ey4uLmwsLi4uYX06bH0pLDA9PT1PYmplY3Qua2V5cyhsKS5sZW5ndGg/bnVsbDpsfWZ1bmN0aW9uIE91ZShjLGwpe3JldHVybiBsLm1hcChhPT5hKGMpKX1mdW5jdGlvbiBQdWUoYyl7cmV0dXJuIGMubWFwKGw9PmZ1''@;'; put 'put ''bmN0aW9uIENMZShjKXtyZXR1cm4hYy52YWxpZGF0ZX0obCk/bDphPT5sLnZhbGlkYXRlKGEpKX1mdW5jdGlvbiBSVyhjKXtyZXR1cm4gbnVsbCE9Yz9mdW5jdGlvbiBGdWUoYyl7aWYoIWMpcmV0dXJuIG51bGw7Y29uc3QgbD1jLmZpbHRlcihJdWUpO3JldHVybiAwPT1sLmxlbmd0aD9udWxs''@;'; put 'put ''OmZ1bmN0aW9uKGEpe3JldHVybiBMdWUoT3VlKGEsbCkpfX0oUHVlKGMpKTpudWxsfWZ1bmN0aW9uIExXKGMpe3JldHVybiBudWxsIT1jP2Z1bmN0aW9uIEh1ZShjKXtpZighYylyZXR1cm4gbnVsbDtjb25zdCBsPWMuZmlsdGVyKEl1ZSk7cmV0dXJuIDA9PWwubGVuZ3RoP251bGw6ZnVuY3Rp''@;'; put 'put ''b24oYSl7cmV0dXJuIGZ1bmN0aW9uIG1MZSguLi5jKXtjb25zdCBsPVFzZShjKSx7YXJnczphLGtleXM6ZH09ZWxlKGMpLGg9bmV3IFh0KGY9Pntjb25zdHtsZW5ndGg6dn09YTtpZighdilyZXR1cm4gdm9pZCBmLmNvbXBsZXRlKCk7Y29uc3QgTT1uZXcgQXJyYXkodik7bGV0IEQ9dixaPXY7''@;'; put 'put ''Zm9yKGxldCBuZT0wO25lPHY7bmUrKyl7bGV0IGNlPSExO2MxKGFbbmVdKS5zdWJzY3JpYmUoVmkoZixiZT0+e2NlfHwoY2U9ITAsWi0tKSxNW25lXT1iZX0sKCk9PkQtLSx2b2lkIDAsKCk9PnsoIUR8fCFjZSkmJihafHxmLm5leHQoZD90bGUoZCxNKTpNKSxmLmNvbXBsZXRlKCkpfSkpfX0p''@;'; put 'put ''O3JldHVybiBsP2gucGlwZShSWihsKSk6aH0oT3VlKGEsbCkubWFwKFJ1ZSkpLnBpcGUoT3IoTHVlKSl9fShQdWUoYykpOm51bGx9ZnVuY3Rpb24gTnVlKGMsbCl7cmV0dXJuIG51bGw9PT1jP1tsXTpBcnJheS5pc0FycmF5KGMpP1suLi5jLGxdOltjLGxdfWZ1bmN0aW9uIE9XKGMpe3JldHVy''@;'; put 'put ''biBjP0FycmF5LmlzQXJyYXkoYyk/YzpbY106W119ZnVuY3Rpb24gdEwoYyxsKXtyZXR1cm4gQXJyYXkuaXNBcnJheShjKT9jLmluY2x1ZGVzKGwpOmM9PT1sfWZ1bmN0aW9uIGp1ZShjLGwpe2NvbnN0IGE9T1cobCk7cmV0dXJuIE9XKGMpLmZvckVhY2goaD0+e3RMKGEsaCl8fGEucHVzaCho''@;'; put 'put ''KX0pLGF9ZnVuY3Rpb24genVlKGMsbCl7cmV0dXJuIE9XKGwpLmZpbHRlcihhPT4hdEwoYyxhKSl9Y2xhc3MgVXVle2NvbnN0cnVjdG9yKCl7dGhpcy5fcmF3VmFsaWRhdG9ycz1bXSx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9W10sdGhpcy5fb25EZXN0cm95Q2FsbGJhY2tzPVtdfWdldCB2''@;'; put 'put ''YWx1ZSgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnZhbHVlOm51bGx9Z2V0IHZhbGlkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNvbnRyb2wudmFsaWQ6bnVsbH1nZXQgaW52YWxpZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLmludmFsaWQ6bnVs''@;'; put 'put ''bH1nZXQgcGVuZGluZygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnBlbmRpbmc6bnVsbH1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5kaXNhYmxlZDpudWxsfWdldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNv''@;'; put 'put ''bnRyb2wuZW5hYmxlZDpudWxsfWdldCBlcnJvcnMoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5lcnJvcnM6bnVsbH1nZXQgcHJpc3RpbmUoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5wcmlzdGluZTpudWxsfWdldCBkaXJ0eSgpe3JldHVybiB0aGlzLmNv''@;'; put 'put ''bnRyb2w/dGhpcy5jb250cm9sLmRpcnR5Om51bGx9Z2V0IHRvdWNoZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC50b3VjaGVkOm51bGx9Z2V0IHN0YXR1cygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnN0YXR1czpudWxsfWdldCB1bnRvdWNoZWQoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC51bnRvdWNoZWQ6bnVsbH1nZXQgc3RhdHVzQ2hhbmdlcygpe3JldHVybiB0aGlzLmNvbnRyb2w/dGhpcy5jb250cm9sLnN0YXR1c0NoYW5nZXM6bnVsbH1nZXQgdmFsdWVDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuY29udHJvbD90aGlzLmNv''@;'; put 'put ''bnRyb2wudmFsdWVDaGFuZ2VzOm51bGx9Z2V0IHBhdGgoKXtyZXR1cm4gbnVsbH1fc2V0VmFsaWRhdG9ycyhsKXt0aGlzLl9yYXdWYWxpZGF0b3JzPWx8fFtdLHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49UlcodGhpcy5fcmF3VmFsaWRhdG9ycyl9X3NldEFzeW5jVmFsaWRhdG9ycyhsKXt0''@;'; put 'put ''aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9bHx8W10sdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZuPUxXKHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycyl9Z2V0IHZhbGlkYXRvcigpe3JldHVybiB0aGlzLl9jb21wb3NlZFZhbGlkYXRvckZufHxudWxsfWdldCBhc3luY1ZhbGlkYXRvcigp''@;'; put 'put ''e3JldHVybiB0aGlzLl9jb21wb3NlZEFzeW5jVmFsaWRhdG9yRm58fG51bGx9X3JlZ2lzdGVyT25EZXN0cm95KGwpe3RoaXMuX29uRGVzdHJveUNhbGxiYWNrcy5wdXNoKGwpfV9pbnZva2VPbkRlc3Ryb3lDYWxsYmFja3MoKXt0aGlzLl9vbkRlc3Ryb3lDYWxsYmFja3MuZm9yRWFjaChsPT5s''@;'; put 'put ''KCkpLHRoaXMuX29uRGVzdHJveUNhbGxiYWNrcz1bXX1yZXNldChsPXZvaWQgMCl7dGhpcy5jb250cm9sJiZ0aGlzLmNvbnRyb2wucmVzZXQobCl9aGFzRXJyb3IobCxhKXtyZXR1cm4hIXRoaXMuY29udHJvbCYmdGhpcy5jb250cm9sLmhhc0Vycm9yKGwsYSl9Z2V0RXJyb3IobCxhKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5jb250cm9sP3RoaXMuY29udHJvbC5nZXRFcnJvcihsLGEpOm51bGx9fWNsYXNzIGoxIGV4dGVuZHMgVXVle2dldCBmb3JtRGlyZWN0aXZlKCl7cmV0dXJuIG51bGx9Z2V0IHBhdGgoKXtyZXR1cm4gbnVsbH19Y2xhc3MgaDEgZXh0ZW5kcyBVdWV7Y29uc3RydWN0b3IoKXtzdXBl''@;'; put 'put ''ciguLi5hcmd1bWVudHMpLHRoaXMuX3BhcmVudD1udWxsLHRoaXMubmFtZT1udWxsLHRoaXMudmFsdWVBY2Nlc3Nvcj1udWxsfX1jbGFzcyBadWV7Y29uc3RydWN0b3IobCl7dGhpcy5fY2Q9bH1nZXQgaXNUb3VjaGVkKCl7cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8udG91Y2hlZH1nZXQg''@;'; put 'put ''aXNVbnRvdWNoZWQoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy51bnRvdWNoZWR9Z2V0IGlzUHJpc3RpbmUoKXtyZXR1cm4hIXRoaXMuX2NkPy5jb250cm9sPy5wcmlzdGluZX1nZXQgaXNEaXJ0eSgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LmRpcnR5fWdldCBpc1ZhbGlkKCl7''@;'; put 'put ''cmV0dXJuISF0aGlzLl9jZD8uY29udHJvbD8udmFsaWR9Z2V0IGlzSW52YWxpZCgpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LmludmFsaWR9Z2V0IGlzUGVuZGluZygpe3JldHVybiEhdGhpcy5fY2Q/LmNvbnRyb2w/LnBlbmRpbmd9Z2V0IGlzU3VibWl0dGVkKCl7cmV0dXJuISF0aGlz''@;'; put 'put ''Ll9jZD8uc3VibWl0dGVkfX1sZXQgUXM9KCgpPT57Y2xhc3MgYyBleHRlbmRzIFp1ZXtjb25zdHJ1Y3RvcihhKXtzdXBlcihhKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShoMSwyKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlw''@;'; put 'put ''ZTpjLHNlbGVjdG9yczpbWyIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbIiIsIm5nTW9kZWwiLCIiXSxbIiIsImZvcm1Db250cm9sIiwiIl1dLGhvc3RWYXJzOjE0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezImZCYmeHIoIm5nLXVudG91Y2hlZCIsaC5pc1VudG91Y2hlZCkoIm5nLXRv''@;'; put 'put ''dWNoZWQiLGguaXNUb3VjaGVkKSgibmctcHJpc3RpbmUiLGguaXNQcmlzdGluZSkoIm5nLWRpcnR5IixoLmlzRGlydHkpKCJuZy12YWxpZCIsaC5pc1ZhbGlkKSgibmctaW52YWxpZCIsaC5pc0ludmFsaWQpKCJuZy1wZW5kaW5nIixoLmlzUGVuZGluZyl9LGZlYXR1cmVzOltDb119KX19cmV0''@;'; put 'put ''dXJuIGN9KSgpLHI3PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBadWV7Y29uc3RydWN0b3IoYSl7c3VwZXIoYSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoajEsMTApKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0''@;'; put 'put ''b3JzOltbIiIsImZvcm1Hcm91cE5hbWUiLCIiXSxbIiIsImZvcm1BcnJheU5hbWUiLCIiXSxbIiIsIm5nTW9kZWxHcm91cCIsIiJdLFsiIiwiZm9ybUdyb3VwIiwiIl0sWyJmb3JtIiwzLCJuZ05vRm9ybSIsIiJdLFsiIiwibmdGb3JtIiwiIl1dLGhvc3RWYXJzOjE2LGhvc3RCaW5kaW5nczpm''@;'; put 'put ''dW5jdGlvbihkLGgpezImZCYmeHIoIm5nLXVudG91Y2hlZCIsaC5pc1VudG91Y2hlZCkoIm5nLXRvdWNoZWQiLGguaXNUb3VjaGVkKSgibmctcHJpc3RpbmUiLGguaXNQcmlzdGluZSkoIm5nLWRpcnR5IixoLmlzRGlydHkpKCJuZy12YWxpZCIsaC5pc1ZhbGlkKSgibmctaW52YWxpZCIsaC5p''@;'; put 'put ''c0ludmFsaWQpKCJuZy1wZW5kaW5nIixoLmlzUGVuZGluZykoIm5nLXN1Ym1pdHRlZCIsaC5pc1N1Ym1pdHRlZCl9LGZlYXR1cmVzOltDb119KX19cmV0dXJuIGN9KSgpO2NvbnN0IGN4PSJWQUxJRCIsckw9IklOVkFMSUQiLF95PSJQRU5ESU5HIix1eD0iRElTQUJMRUQiO2Z1bmN0aW9uIEhX''@;'; put 'put ''KGMpe3JldHVybihpTChjKT9jLnZhbGlkYXRvcnM6Yyl8fG51bGx9ZnVuY3Rpb24gTlcoYyxsKXtyZXR1cm4oaUwobCk/bC5hc3luY1ZhbGlkYXRvcnM6Yyl8fG51bGx9ZnVuY3Rpb24gaUwoYyl7cmV0dXJuIG51bGwhPWMmJiFBcnJheS5pc0FycmF5KGMpJiYib2JqZWN0Ij09dHlwZW9mIGN9''@;'; put 'put ''Y2xhc3MgVld7Y29uc3RydWN0b3IobCxhKXt0aGlzLl9wZW5kaW5nRGlydHk9ITEsdGhpcy5faGFzT3duUGVuZGluZ0FzeW5jVmFsaWRhdG9yPSExLHRoaXMuX3BlbmRpbmdUb3VjaGVkPSExLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZT0oKT0+e30sdGhpcy5fcGFyZW50PW51bGwsdGhpcy5w''@;'; put 'put ''cmlzdGluZT0hMCx0aGlzLnRvdWNoZWQ9ITEsdGhpcy5fb25EaXNhYmxlZENoYW5nZT1bXSx0aGlzLl9hc3NpZ25WYWxpZGF0b3JzKGwpLHRoaXMuX2Fzc2lnbkFzeW5jVmFsaWRhdG9ycyhhKX1nZXQgdmFsaWRhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm59c2V0IHZh''@;'; put 'put ''bGlkYXRvcihsKXt0aGlzLl9yYXdWYWxpZGF0b3JzPXRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49bH1nZXQgYXN5bmNWYWxpZGF0b3IoKXtyZXR1cm4gdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZufXNldCBhc3luY1ZhbGlkYXRvcihsKXt0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnM9''@;'; put 'put ''dGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZuPWx9Z2V0IHBhcmVudCgpe3JldHVybiB0aGlzLl9wYXJlbnR9Z2V0IHZhbGlkKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT09Y3h9Z2V0IGludmFsaWQoKXtyZXR1cm4gdGhpcy5zdGF0dXM9PT1yTH1nZXQgcGVuZGluZygpe3JldHVybiB0aGlz''@;'; put 'put ''LnN0YXR1cz09X3l9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuc3RhdHVzPT09dXh9Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5zdGF0dXMhPT11eH1nZXQgZGlydHkoKXtyZXR1cm4hdGhpcy5wcmlzdGluZX1nZXQgdW50b3VjaGVkKCl7cmV0dXJuIXRoaXMudG91Y2hlZH1nZXQgdXBk''@;'; put 'put ''YXRlT24oKXtyZXR1cm4gdGhpcy5fdXBkYXRlT24/dGhpcy5fdXBkYXRlT246dGhpcy5wYXJlbnQ/dGhpcy5wYXJlbnQudXBkYXRlT246ImNoYW5nZSJ9c2V0VmFsaWRhdG9ycyhsKXt0aGlzLl9hc3NpZ25WYWxpZGF0b3JzKGwpfXNldEFzeW5jVmFsaWRhdG9ycyhsKXt0aGlzLl9hc3NpZ25B''@;'; put 'put ''c3luY1ZhbGlkYXRvcnMobCl9YWRkVmFsaWRhdG9ycyhsKXt0aGlzLnNldFZhbGlkYXRvcnMoanVlKGwsdGhpcy5fcmF3VmFsaWRhdG9ycykpfWFkZEFzeW5jVmFsaWRhdG9ycyhsKXt0aGlzLnNldEFzeW5jVmFsaWRhdG9ycyhqdWUobCx0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpKX1yZW1v''@;'; put 'put ''dmVWYWxpZGF0b3JzKGwpe3RoaXMuc2V0VmFsaWRhdG9ycyh6dWUobCx0aGlzLl9yYXdWYWxpZGF0b3JzKSl9cmVtb3ZlQXN5bmNWYWxpZGF0b3JzKGwpe3RoaXMuc2V0QXN5bmNWYWxpZGF0b3JzKHp1ZShsLHRoaXMuX3Jhd0FzeW5jVmFsaWRhdG9ycykpfWhhc1ZhbGlkYXRvcihsKXtyZXR1''@;'; put 'put ''cm4gdEwodGhpcy5fcmF3VmFsaWRhdG9ycyxsKX1oYXNBc3luY1ZhbGlkYXRvcihsKXtyZXR1cm4gdEwodGhpcy5fcmF3QXN5bmNWYWxpZGF0b3JzLGwpfWNsZWFyVmFsaWRhdG9ycygpe3RoaXMudmFsaWRhdG9yPW51bGx9Y2xlYXJBc3luY1ZhbGlkYXRvcnMoKXt0aGlzLmFzeW5jVmFsaWRh''@;'; put 'put ''dG9yPW51bGx9bWFya0FzVG91Y2hlZChsPXt9KXt0aGlzLnRvdWNoZWQ9ITAsdGhpcy5fcGFyZW50JiYhbC5vbmx5U2VsZiYmdGhpcy5fcGFyZW50Lm1hcmtBc1RvdWNoZWQobCl9bWFya0FsbEFzVG91Y2hlZCgpe3RoaXMubWFya0FzVG91Y2hlZCh7b25seVNlbGY6ITB9KSx0aGlzLl9mb3JF''@;'; put 'put ''YWNoQ2hpbGQobD0+bC5tYXJrQWxsQXNUb3VjaGVkKCkpfW1hcmtBc1VudG91Y2hlZChsPXt9KXt0aGlzLnRvdWNoZWQ9ITEsdGhpcy5fcGVuZGluZ1RvdWNoZWQ9ITEsdGhpcy5fZm9yRWFjaENoaWxkKGE9PnthLm1hcmtBc1VudG91Y2hlZCh7b25seVNlbGY6ITB9KX0pLHRoaXMuX3BhcmVu''@;'; put 'put ''dCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlVG91Y2hlZChsKX1tYXJrQXNEaXJ0eShsPXt9KXt0aGlzLnByaXN0aW5lPSExLHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNEaXJ0eShsKX1tYXJrQXNQcmlzdGluZShsPXt9KXt0aGlzLnBy''@;'; put 'put ''aXN0aW5lPSEwLHRoaXMuX3BlbmRpbmdEaXJ0eT0hMSx0aGlzLl9mb3JFYWNoQ2hpbGQoYT0+e2EubWFya0FzUHJpc3RpbmUoe29ubHlTZWxmOiEwfSl9KSx0aGlzLl9wYXJlbnQmJiFsLm9ubHlTZWxmJiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZVByaXN0aW5lKGwpfW1hcmtBc1BlbmRpbmcobD17''@;'; put 'put ''fSl7dGhpcy5zdGF0dXM9X3ksITEhPT1sLmVtaXRFdmVudCYmdGhpcy5zdGF0dXNDaGFuZ2VzLmVtaXQodGhpcy5zdGF0dXMpLHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5tYXJrQXNQZW5kaW5nKGwpfWRpc2FibGUobD17fSl7Y29uc3QgYT10aGlzLl9wYXJlbnRN''@;'; put 'put ''YXJrZWREaXJ0eShsLm9ubHlTZWxmKTt0aGlzLnN0YXR1cz11eCx0aGlzLmVycm9ycz1udWxsLHRoaXMuX2ZvckVhY2hDaGlsZChkPT57ZC5kaXNhYmxlKHsuLi5sLG9ubHlTZWxmOiEwfSl9KSx0aGlzLl91cGRhdGVWYWx1ZSgpLCExIT09bC5lbWl0RXZlbnQmJih0aGlzLnZhbHVlQ2hhbmdl''@;'; put 'put ''cy5lbWl0KHRoaXMudmFsdWUpLHRoaXMuc3RhdHVzQ2hhbmdlcy5lbWl0KHRoaXMuc3RhdHVzKSksdGhpcy5fdXBkYXRlQW5jZXN0b3JzKHsuLi5sLHNraXBQcmlzdGluZUNoZWNrOmF9KSx0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLmZvckVhY2goZD0+ZCghMCkpfWVuYWJsZShsPXt9KXtjb25z''@;'; put 'put ''dCBhPXRoaXMuX3BhcmVudE1hcmtlZERpcnR5KGwub25seVNlbGYpO3RoaXMuc3RhdHVzPWN4LHRoaXMuX2ZvckVhY2hDaGlsZChkPT57ZC5lbmFibGUoey4uLmwsb25seVNlbGY6ITB9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OmwuZW1p''@;'; put 'put ''dEV2ZW50fSksdGhpcy5fdXBkYXRlQW5jZXN0b3JzKHsuLi5sLHNraXBQcmlzdGluZUNoZWNrOmF9KSx0aGlzLl9vbkRpc2FibGVkQ2hhbmdlLmZvckVhY2goZD0+ZCghMSkpfV91cGRhdGVBbmNlc3RvcnMobCl7dGhpcy5fcGFyZW50JiYhbC5vbmx5U2VsZiYmKHRoaXMuX3BhcmVudC51cGRh''@;'; put 'put ''dGVWYWx1ZUFuZFZhbGlkaXR5KGwpLGwuc2tpcFByaXN0aW5lQ2hlY2t8fHRoaXMuX3BhcmVudC5fdXBkYXRlUHJpc3RpbmUoKSx0aGlzLl9wYXJlbnQuX3VwZGF0ZVRvdWNoZWQoKSl9c2V0UGFyZW50KGwpe3RoaXMuX3BhcmVudD1sfWdldFJhd1ZhbHVlKCl7cmV0dXJuIHRoaXMudmFsdWV9''@;'; put 'put ''dXBkYXRlVmFsdWVBbmRWYWxpZGl0eShsPXt9KXt0aGlzLl9zZXRJbml0aWFsU3RhdHVzKCksdGhpcy5fdXBkYXRlVmFsdWUoKSx0aGlzLmVuYWJsZWQmJih0aGlzLl9jYW5jZWxFeGlzdGluZ1N1YnNjcmlwdGlvbigpLHRoaXMuZXJyb3JzPXRoaXMuX3J1blZhbGlkYXRvcigpLHRoaXMuc3Rh''@;'; put 'put ''dHVzPXRoaXMuX2NhbGN1bGF0ZVN0YXR1cygpLCh0aGlzLnN0YXR1cz09PWN4fHx0aGlzLnN0YXR1cz09PV95KSYmdGhpcy5fcnVuQXN5bmNWYWxpZGF0b3IobC5lbWl0RXZlbnQpKSwhMSE9PWwuZW1pdEV2ZW50JiYodGhpcy52YWx1ZUNoYW5nZXMuZW1pdCh0aGlzLnZhbHVlKSx0aGlzLnN0''@;'; put 'put ''YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cykpLHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGwpfV91cGRhdGVUcmVlVmFsaWRpdHkobD17ZW1pdEV2ZW50OiEwfSl7dGhpcy5fZm9yRWFjaENoaWxkKGE9PmEuX3VwZGF0''@;'; put 'put ''ZVRyZWVWYWxpZGl0eShsKSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6bC5lbWl0RXZlbnR9KX1fc2V0SW5pdGlhbFN0YXR1cygpe3RoaXMuc3RhdHVzPXRoaXMuX2FsbENvbnRyb2xzRGlzYWJsZWQoKT91eDpjeH1fcnVuVmFsaWRhdG9yKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMudmFsaWRhdG9yP3RoaXMudmFsaWRhdG9yKHRoaXMpOm51bGx9X3J1bkFzeW5jVmFsaWRhdG9yKGwpe2lmKHRoaXMuYXN5bmNWYWxpZGF0b3Ipe3RoaXMuc3RhdHVzPV95LHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMDtjb25zdCBhPVJ1ZSh0aGlzLmFz''@;'; put 'put ''eW5jVmFsaWRhdG9yKHRoaXMpKTt0aGlzLl9hc3luY1ZhbGlkYXRpb25TdWJzY3JpcHRpb249YS5zdWJzY3JpYmUoZD0+e3RoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSx0aGlzLnNldEVycm9ycyhkLHtlbWl0RXZlbnQ6bH0pfSl9fV9jYW5jZWxFeGlzdGluZ1N1YnNjcmlw''@;'; put 'put ''dGlvbigpe3RoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbiYmKHRoaXMuX2FzeW5jVmFsaWRhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2hhc093blBlbmRpbmdBc3luY1ZhbGlkYXRvcj0hMSl9c2V0RXJyb3JzKGwsYT17fSl7dGhpcy5lcnJvcnM9bCx0aGlz''@;'; put 'put ''Ll91cGRhdGVDb250cm9sc0Vycm9ycyghMSE9PWEuZW1pdEV2ZW50KX1nZXQobCl7bGV0IGE9bDtyZXR1cm4gbnVsbD09YXx8KEFycmF5LmlzQXJyYXkoYSl8fChhPWEuc3BsaXQoIi4iKSksMD09PWEubGVuZ3RoKT9udWxsOmEucmVkdWNlKChkLGgpPT5kJiZkLl9maW5kKGgpLHRoaXMpfWdl''@;'; put 'put ''dEVycm9yKGwsYSl7Y29uc3QgZD1hP3RoaXMuZ2V0KGEpOnRoaXM7cmV0dXJuIGQmJmQuZXJyb3JzP2QuZXJyb3JzW2xdOm51bGx9aGFzRXJyb3IobCxhKXtyZXR1cm4hIXRoaXMuZ2V0RXJyb3IobCxhKX1nZXQgcm9vdCgpe2xldCBsPXRoaXM7Zm9yKDtsLl9wYXJlbnQ7KWw9bC5fcGFyZW50''@;'; put 'put ''O3JldHVybiBsfV91cGRhdGVDb250cm9sc0Vycm9ycyhsKXt0aGlzLnN0YXR1cz10aGlzLl9jYWxjdWxhdGVTdGF0dXMoKSxsJiZ0aGlzLnN0YXR1c0NoYW5nZXMuZW1pdCh0aGlzLnN0YXR1cyksdGhpcy5fcGFyZW50JiZ0aGlzLl9wYXJlbnQuX3VwZGF0ZUNvbnRyb2xzRXJyb3JzKGwpfV9p''@;'; put 'put ''bml0T2JzZXJ2YWJsZXMoKXt0aGlzLnZhbHVlQ2hhbmdlcz1uZXcgcXIsdGhpcy5zdGF0dXNDaGFuZ2VzPW5ldyBxcn1fY2FsY3VsYXRlU3RhdHVzKCl7cmV0dXJuIHRoaXMuX2FsbENvbnRyb2xzRGlzYWJsZWQoKT91eDp0aGlzLmVycm9ycz9yTDp0aGlzLl9oYXNPd25QZW5kaW5nQXN5bmNW''@;'; put 'put ''YWxpZGF0b3J8fHRoaXMuX2FueUNvbnRyb2xzSGF2ZVN0YXR1cyhfeSk/X3k6dGhpcy5fYW55Q29udHJvbHNIYXZlU3RhdHVzKHJMKT9yTDpjeH1fYW55Q29udHJvbHNIYXZlU3RhdHVzKGwpe3JldHVybiB0aGlzLl9hbnlDb250cm9scyhhPT5hLnN0YXR1cz09PWwpfV9hbnlDb250cm9sc0Rp''@;'; put 'put ''cnR5KCl7cmV0dXJuIHRoaXMuX2FueUNvbnRyb2xzKGw9PmwuZGlydHkpfV9hbnlDb250cm9sc1RvdWNoZWQoKXtyZXR1cm4gdGhpcy5fYW55Q29udHJvbHMobD0+bC50b3VjaGVkKX1fdXBkYXRlUHJpc3RpbmUobD17fSl7dGhpcy5wcmlzdGluZT0hdGhpcy5fYW55Q29udHJvbHNEaXJ0eSgp''@;'; put 'put ''LHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBkYXRlUHJpc3RpbmUobCl9X3VwZGF0ZVRvdWNoZWQobD17fSl7dGhpcy50b3VjaGVkPXRoaXMuX2FueUNvbnRyb2xzVG91Y2hlZCgpLHRoaXMuX3BhcmVudCYmIWwub25seVNlbGYmJnRoaXMuX3BhcmVudC5fdXBk''@;'; put 'put ''YXRlVG91Y2hlZChsKX1fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UobCl7dGhpcy5fb25Db2xsZWN0aW9uQ2hhbmdlPWx9X3NldFVwZGF0ZVN0cmF0ZWd5KGwpe2lMKGwpJiZudWxsIT1sLnVwZGF0ZU9uJiYodGhpcy5fdXBkYXRlT249bC51cGRhdGVPbil9X3BhcmVudE1hcmtlZERpcnR5''@;'; put 'put ''KGwpe3JldHVybiFsJiYhKCF0aGlzLl9wYXJlbnR8fCF0aGlzLl9wYXJlbnQuZGlydHkpJiYhdGhpcy5fcGFyZW50Ll9hbnlDb250cm9sc0RpcnR5KCl9X2ZpbmQobCl7cmV0dXJuIG51bGx9X2Fzc2lnblZhbGlkYXRvcnMobCl7dGhpcy5fcmF3VmFsaWRhdG9ycz1BcnJheS5pc0FycmF5KGwp''@;'; put 'put ''P2wuc2xpY2UoKTpsLHRoaXMuX2NvbXBvc2VkVmFsaWRhdG9yRm49ZnVuY3Rpb24gRUxlKGMpe3JldHVybiBBcnJheS5pc0FycmF5KGMpP1JXKGMpOmN8fG51bGx9KHRoaXMuX3Jhd1ZhbGlkYXRvcnMpfV9hc3NpZ25Bc3luY1ZhbGlkYXRvcnMobCl7dGhpcy5fcmF3QXN5bmNWYWxpZGF0b3Jz''@;'; put 'put ''PUFycmF5LmlzQXJyYXkobCk/bC5zbGljZSgpOmwsdGhpcy5fY29tcG9zZWRBc3luY1ZhbGlkYXRvckZuPWZ1bmN0aW9uIFRMZShjKXtyZXR1cm4gQXJyYXkuaXNBcnJheShjKT9MVyhjKTpjfHxudWxsfSh0aGlzLl9yYXdBc3luY1ZhbGlkYXRvcnMpfX1jbGFzcyBvTCBleHRlbmRzIFZXe2Nv''@;'; put 'put ''bnN0cnVjdG9yKGwsYSxkKXtzdXBlcihIVyhhKSxOVyhkLGEpKSx0aGlzLmNvbnRyb2xzPWwsdGhpcy5faW5pdE9ic2VydmFibGVzKCksdGhpcy5fc2V0VXBkYXRlU3RyYXRlZ3koYSksdGhpcy5fc2V0VXBDb250cm9scygpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6''@;'; put 'put ''ITAsZW1pdEV2ZW50OiEhdGhpcy5hc3luY1ZhbGlkYXRvcn0pfXJlZ2lzdGVyQ29udHJvbChsLGEpe3JldHVybiB0aGlzLmNvbnRyb2xzW2xdP3RoaXMuY29udHJvbHNbbF06KHRoaXMuY29udHJvbHNbbF09YSxhLnNldFBhcmVudCh0aGlzKSxhLl9yZWdpc3Rlck9uQ29sbGVjdGlvbkNoYW5n''@;'; put 'put ''ZSh0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UpLGEpfWFkZENvbnRyb2wobCxhLGQ9e30pe3RoaXMucmVnaXN0ZXJDb250cm9sKGwsYSksdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ZC5lbWl0RXZlbnR9KSx0aGlzLl9vbkNvbGxlY3Rpb25DaGFuZ2UoKX1yZW1vdmVD''@;'; put 'put ''b250cm9sKGwsYT17fSl7dGhpcy5jb250cm9sc1tsXSYmdGhpcy5jb250cm9sc1tsXS5fcmVnaXN0ZXJPbkNvbGxlY3Rpb25DaGFuZ2UoKCk9Pnt9KSxkZWxldGUgdGhpcy5jb250cm9sc1tsXSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDphLmVtaXRFdmVudH0pLHRo''@;'; put 'put ''aXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfXNldENvbnRyb2wobCxhLGQ9e30pe3RoaXMuY29udHJvbHNbbF0mJnRoaXMuY29udHJvbHNbbF0uX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKCgpPT57fSksZGVsZXRlIHRoaXMuY29udHJvbHNbbF0sYSYmdGhpcy5yZWdpc3RlckNvbnRyb2wo''@;'; put 'put ''bCxhKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDpkLmVtaXRFdmVudH0pLHRoaXMuX29uQ29sbGVjdGlvbkNoYW5nZSgpfWNvbnRhaW5zKGwpe3JldHVybiB0aGlzLmNvbnRyb2xzLmhhc093blByb3BlcnR5KGwpJiZ0aGlzLmNvbnRyb2xzW2xdLmVuYWJsZWR9c2V0''@;'; put 'put ''VmFsdWUobCxhPXt9KXsoZnVuY3Rpb24gR3VlKGMsbCxhKXtjLl9mb3JFYWNoQ2hpbGQoKGQsaCk9PntpZih2b2lkIDA9PT1hW2hdKXRocm93IG5ldyBlcigxMDAyLCIiKX0pfSkodGhpcywwLGwpLE9iamVjdC5rZXlzKGwpLmZvckVhY2goZD0+eyhmdW5jdGlvbiBZdWUoYyxsLGEpe2NvbnN0''@;'; put 'put ''IGQ9Yy5jb250cm9scztpZighKGw/T2JqZWN0LmtleXMoZCk6ZCkubGVuZ3RoKXRocm93IG5ldyBlcigxZTMsIiIpO2lmKCFkW2FdKXRocm93IG5ldyBlcigxMDAxLCIiKX0pKHRoaXMsITAsZCksdGhpcy5jb250cm9sc1tkXS5zZXRWYWx1ZShsW2RdLHtvbmx5U2VsZjohMCxlbWl0RXZlbnQ6''@;'; put 'put ''YS5lbWl0RXZlbnR9KX0pLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShhKX1wYXRjaFZhbHVlKGwsYT17fSl7bnVsbCE9bCYmKE9iamVjdC5rZXlzKGwpLmZvckVhY2goZD0+e2NvbnN0IGg9dGhpcy5jb250cm9sc1tkXTtoJiZoLnBhdGNoVmFsdWUobFtkXSx7b25seVNlbGY6ITAsZW1p''@;'; put 'put ''dEV2ZW50OmEuZW1pdEV2ZW50fSl9KSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoYSkpfXJlc2V0KGw9e30sYT17fSl7dGhpcy5fZm9yRWFjaENoaWxkKChkLGgpPT57ZC5yZXNldChsP2xbaF06bnVsbCx7b25seVNlbGY6ITAsZW1pdEV2ZW50OmEuZW1pdEV2ZW50fSl9KSx0aGlzLl91''@;'; put 'put ''cGRhdGVQcmlzdGluZShhKSx0aGlzLl91cGRhdGVUb3VjaGVkKGEpLHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eShhKX1nZXRSYXdWYWx1ZSgpe3JldHVybiB0aGlzLl9yZWR1Y2VDaGlsZHJlbih7fSwobCxhLGQpPT4obFtkXT1hLmdldFJhd1ZhbHVlKCksbCkpfV9zeW5jUGVuZGluZ0Nv''@;'; put 'put ''bnRyb2xzKCl7bGV0IGw9dGhpcy5fcmVkdWNlQ2hpbGRyZW4oITEsKGEsZCk9PiEhZC5fc3luY1BlbmRpbmdDb250cm9scygpfHxhKTtyZXR1cm4gbCYmdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjohMH0pLGx9X2ZvckVhY2hDaGlsZChsKXtPYmplY3Qua2V5cyh0aGlz''@;'; put 'put ''LmNvbnRyb2xzKS5mb3JFYWNoKGE9Pntjb25zdCBkPXRoaXMuY29udHJvbHNbYV07ZCYmbChkLGEpfSl9X3NldFVwQ29udHJvbHMoKXt0aGlzLl9mb3JFYWNoQ2hpbGQobD0+e2wuc2V0UGFyZW50KHRoaXMpLGwuX3JlZ2lzdGVyT25Db2xsZWN0aW9uQ2hhbmdlKHRoaXMuX29uQ29sbGVjdGlv''@;'; put 'put ''bkNoYW5nZSl9KX1fdXBkYXRlVmFsdWUoKXt0aGlzLnZhbHVlPXRoaXMuX3JlZHVjZVZhbHVlKCl9X2FueUNvbnRyb2xzKGwpe2Zvcihjb25zdFthLGRdb2YgT2JqZWN0LmVudHJpZXModGhpcy5jb250cm9scykpaWYodGhpcy5jb250YWlucyhhKSYmbChkKSlyZXR1cm4hMDtyZXR1cm4hMX1f''@;'; put 'put ''cmVkdWNlVmFsdWUoKXtyZXR1cm4gdGhpcy5fcmVkdWNlQ2hpbGRyZW4oe30sKGEsZCxoKT0+KChkLmVuYWJsZWR8fHRoaXMuZGlzYWJsZWQpJiYoYVtoXT1kLnZhbHVlKSxhKSl9X3JlZHVjZUNoaWxkcmVuKGwsYSl7bGV0IGQ9bDtyZXR1cm4gdGhpcy5fZm9yRWFjaENoaWxkKChoLGYpPT57''@;'; put 'put ''ZD1hKGQsaCxmKX0pLGR9X2FsbENvbnRyb2xzRGlzYWJsZWQoKXtmb3IoY29uc3QgbCBvZiBPYmplY3Qua2V5cyh0aGlzLmNvbnRyb2xzKSlpZih0aGlzLmNvbnRyb2xzW2xdLmVuYWJsZWQpcmV0dXJuITE7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuY29udHJvbHMpLmxlbmd0aD4wfHx0aGlz''@;'; put 'put ''LmRpc2FibGVkfV9maW5kKGwpe3JldHVybiB0aGlzLmNvbnRyb2xzLmhhc093blByb3BlcnR5KGwpP3RoaXMuY29udHJvbHNbbF06bnVsbH19Y29uc3QgaTc9bmV3IFN0KCJDYWxsU2V0RGlzYWJsZWRTdGF0ZSIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PmR4fSksZHg9ImFsd2F5''@;'; put 'put ''cyI7ZnVuY3Rpb24gaHgoYyxsLGE9ZHgpe0JXKGMsbCksbC52YWx1ZUFjY2Vzc29yLndyaXRlVmFsdWUoYy52YWx1ZSksKGMuZGlzYWJsZWR8fCJhbHdheXMiPT09YSkmJmwudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlPy4oYy5kaXNhYmxlZCksZnVuY3Rpb24gRExlKGMsbCl7bC52''@;'; put 'put ''YWx1ZUFjY2Vzc29yLnJlZ2lzdGVyT25DaGFuZ2UoYT0+e2MuX3BlbmRpbmdWYWx1ZT1hLGMuX3BlbmRpbmdDaGFuZ2U9ITAsYy5fcGVuZGluZ0RpcnR5PSEwLCJjaGFuZ2UiPT09Yy51cGRhdGVPbiYmJHVlKGMsbCl9KX0oYyxsKSxmdW5jdGlvbiBSTGUoYyxsKXtjb25zdCBhPShkLGgpPT57''@;'; put 'put ''bC52YWx1ZUFjY2Vzc29yLndyaXRlVmFsdWUoZCksaCYmbC52aWV3VG9Nb2RlbFVwZGF0ZShkKX07Yy5yZWdpc3Rlck9uQ2hhbmdlKGEpLGwuX3JlZ2lzdGVyT25EZXN0cm95KCgpPT57Yy5fdW5yZWdpc3Rlck9uQ2hhbmdlKGEpfSl9KGMsbCksZnVuY3Rpb24gSUxlKGMsbCl7bC52YWx1ZUFj''@;'; put 'put ''Y2Vzc29yLnJlZ2lzdGVyT25Ub3VjaGVkKCgpPT57Yy5fcGVuZGluZ1RvdWNoZWQ9ITAsImJsdXIiPT09Yy51cGRhdGVPbiYmYy5fcGVuZGluZ0NoYW5nZSYmJHVlKGMsbCksInN1Ym1pdCIhPT1jLnVwZGF0ZU9uJiZjLm1hcmtBc1RvdWNoZWQoKX0pfShjLGwpLGZ1bmN0aW9uIGtMZShjLGwp''@;'; put 'put ''e2lmKGwudmFsdWVBY2Nlc3Nvci5zZXREaXNhYmxlZFN0YXRlKXtjb25zdCBhPWQ9PntsLnZhbHVlQWNjZXNzb3Iuc2V0RGlzYWJsZWRTdGF0ZShkKX07Yy5yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UoYSksbC5fcmVnaXN0ZXJPbkRlc3Ryb3koKCk9PntjLl91bnJlZ2lzdGVyT25EaXNhYmxl''@;'; put 'put ''ZENoYW5nZShhKX0pfX0oYyxsKX1mdW5jdGlvbiBsTChjLGwpe2MuZm9yRWFjaChhPT57YS5yZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlJiZhLnJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UobCl9KX1mdW5jdGlvbiBCVyhjLGwpe2NvbnN0IGE9ZnVuY3Rpb24gVnVlKGMpe3JldHVybiBjLl9y''@;'; put 'put ''YXdWYWxpZGF0b3JzfShjKTtudWxsIT09bC52YWxpZGF0b3I/Yy5zZXRWYWxpZGF0b3JzKE51ZShhLGwudmFsaWRhdG9yKSk6ImZ1bmN0aW9uIj09dHlwZW9mIGEmJmMuc2V0VmFsaWRhdG9ycyhbYV0pO2NvbnN0IGQ9ZnVuY3Rpb24gQnVlKGMpe3JldHVybiBjLl9yYXdBc3luY1ZhbGlkYXRv''@;'; put 'put ''cnN9KGMpO251bGwhPT1sLmFzeW5jVmFsaWRhdG9yP2Muc2V0QXN5bmNWYWxpZGF0b3JzKE51ZShkLGwuYXN5bmNWYWxpZGF0b3IpKToiZnVuY3Rpb24iPT10eXBlb2YgZCYmYy5zZXRBc3luY1ZhbGlkYXRvcnMoW2RdKTtjb25zdCBoPSgpPT5jLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTts''@;'; put 'put ''TChsLl9yYXdWYWxpZGF0b3JzLGgpLGxMKGwuX3Jhd0FzeW5jVmFsaWRhdG9ycyxoKX1mdW5jdGlvbiAkdWUoYyxsKXtjLl9wZW5kaW5nRGlydHkmJmMubWFya0FzRGlydHkoKSxjLnNldFZhbHVlKGMuX3BlbmRpbmdWYWx1ZSx7ZW1pdE1vZGVsVG9WaWV3Q2hhbmdlOiExfSksbC52aWV3VG9N''@;'; put 'put ''b2RlbFVwZGF0ZShjLl9wZW5kaW5nVmFsdWUpLGMuX3BlbmRpbmdDaGFuZ2U9ITF9Y29uc3QgSExlPXtwcm92aWRlOmoxLHVzZUV4aXN0aW5nOmtzKCgpPT5wcCl9LGZ4PVByb21pc2UucmVzb2x2ZSgpO2xldCBwcD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgajF7Y29uc3RydWN0b3IoYSxkLGgp''@;'; put 'put ''e3N1cGVyKCksdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZT1oLHRoaXMuc3VibWl0dGVkPSExLHRoaXMuX2RpcmVjdGl2ZXM9bmV3IFNldCx0aGlzLm5nU3VibWl0PW5ldyBxcix0aGlzLmZvcm09bmV3IG9MKHt9LFJXKGEpLExXKGQpKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9zZXRVcGRh''@;'; put 'put ''dGVTdHJhdGVneSgpfWdldCBmb3JtRGlyZWN0aXZlKCl7cmV0dXJuIHRoaXN9Z2V0IGNvbnRyb2woKXtyZXR1cm4gdGhpcy5mb3JtfWdldCBwYXRoKCl7cmV0dXJuW119Z2V0IGNvbnRyb2xzKCl7cmV0dXJuIHRoaXMuZm9ybS5jb250cm9sc31hZGRDb250cm9sKGEpe2Z4LnRoZW4oKCk9Pntj''@;'; put 'put ''b25zdCBkPXRoaXMuX2ZpbmRDb250YWluZXIoYS5wYXRoKTthLmNvbnRyb2w9ZC5yZWdpc3RlckNvbnRyb2woYS5uYW1lLGEuY29udHJvbCksaHgoYS5jb250cm9sLGEsdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZSksYS5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVu''@;'; put 'put ''dDohMX0pLHRoaXMuX2RpcmVjdGl2ZXMuYWRkKGEpfSl9Z2V0Q29udHJvbChhKXtyZXR1cm4gdGhpcy5mb3JtLmdldChhLnBhdGgpfXJlbW92ZUNvbnRyb2woYSl7ZngudGhlbigoKT0+e2NvbnN0IGQ9dGhpcy5fZmluZENvbnRhaW5lcihhLnBhdGgpO2QmJmQucmVtb3ZlQ29udHJvbChhLm5h''@;'; put 'put ''bWUpLHRoaXMuX2RpcmVjdGl2ZXMuZGVsZXRlKGEpfSl9YWRkRm9ybUdyb3VwKGEpe2Z4LnRoZW4oKCk9Pntjb25zdCBkPXRoaXMuX2ZpbmRDb250YWluZXIoYS5wYXRoKSxoPW5ldyBvTCh7fSk7KGZ1bmN0aW9uIEt1ZShjLGwpe0JXKGMsbCl9KShoLGEpLGQucmVnaXN0ZXJDb250cm9sKGEu''@;'; put 'put ''bmFtZSxoKSxoLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfSl9cmVtb3ZlRm9ybUdyb3VwKGEpe2Z4LnRoZW4oKCk9Pntjb25zdCBkPXRoaXMuX2ZpbmRDb250YWluZXIoYS5wYXRoKTtkJiZkLnJlbW92ZUNvbnRyb2woYS5uYW1lKX0pfWdldEZvcm1Hcm91cChhKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5mb3JtLmdldChhLnBhdGgpfXVwZGF0ZU1vZGVsKGEsZCl7ZngudGhlbigoKT0+e3RoaXMuZm9ybS5nZXQoYS5wYXRoKS5zZXRWYWx1ZShkKX0pfXNldFZhbHVlKGEpe3RoaXMuY29udHJvbC5zZXRWYWx1ZShhKX1vblN1Ym1pdChhKXtyZXR1cm4gdGhpcy5zdWJtaXR0ZWQ9''@;'; put 'put ''ITAsZnVuY3Rpb24gcXVlKGMsbCl7Yy5fc3luY1BlbmRpbmdDb250cm9scygpLGwuZm9yRWFjaChhPT57Y29uc3QgZD1hLmNvbnRyb2w7InN1Ym1pdCI9PT1kLnVwZGF0ZU9uJiZkLl9wZW5kaW5nQ2hhbmdlJiYoYS52aWV3VG9Nb2RlbFVwZGF0ZShkLl9wZW5kaW5nVmFsdWUpLGQuX3BlbmRp''@;'; put 'put ''bmdDaGFuZ2U9ITEpfSl9KHRoaXMuZm9ybSx0aGlzLl9kaXJlY3RpdmVzKSx0aGlzLm5nU3VibWl0LmVtaXQoYSksImRpYWxvZyI9PT1hPy50YXJnZXQ/Lm1ldGhvZH1vblJlc2V0KCl7dGhpcy5yZXNldEZvcm0oKX1yZXNldEZvcm0oYT12b2lkIDApe3RoaXMuZm9ybS5yZXNldChhKSx0aGlz''@;'; put 'put ''LnN1Ym1pdHRlZD0hMX1fc2V0VXBkYXRlU3RyYXRlZ3koKXt0aGlzLm9wdGlvbnMmJm51bGwhPXRoaXMub3B0aW9ucy51cGRhdGVPbiYmKHRoaXMuZm9ybS5fdXBkYXRlT249dGhpcy5vcHRpb25zLnVwZGF0ZU9uKX1fZmluZENvbnRhaW5lcihhKXtyZXR1cm4gYS5wb3AoKSxhLmxlbmd0aD90''@;'; put 'put ''aGlzLmZvcm0uZ2V0KGEpOnRoaXMuZm9ybX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShkMCwxMCksR2UoY20sMTApLEdlKGk3LDgpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImZvcm0iLDMsIm5n''@;'; put 'put ''Tm9Gb3JtIiwiIiwzLCJmb3JtR3JvdXAiLCIiXSxbIm5nLWZvcm0iXSxbIiIsIm5nRm9ybSIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0KCJzdWJtaXQiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uU3VibWl0KHYpfSkoInJlc2V0IixmdW5jdGlvbigpe3JldHVybiBo''@;'; put 'put ''Lm9uUmVzZXQoKX0pfSxpbnB1dHM6e29wdGlvbnM6W1puLk5vbmUsIm5nRm9ybU9wdGlvbnMiLCJvcHRpb25zIl19LG91dHB1dHM6e25nU3VibWl0OiJuZ1N1Ym1pdCJ9LGV4cG9ydEFzOlsibmdGb3JtIl0sZmVhdHVyZXM6W3BvKFtITGVdKSxDb119KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9u''@;'; put 'put ''IFh1ZShjLGwpe2NvbnN0IGE9Yy5pbmRleE9mKGwpO2E+LTEmJmMuc3BsaWNlKGEsMSl9ZnVuY3Rpb24gSnVlKGMpe3JldHVybiJvYmplY3QiPT10eXBlb2YgYyYmbnVsbCE9PWMmJjI9PT1PYmplY3Qua2V5cyhjKS5sZW5ndGgmJiJ2YWx1ZSJpbiBjJiYiZGlzYWJsZWQiaW4gY31jb25zdCBa''@;'; put 'put ''Vz1jbGFzcyBleHRlbmRzIFZXe2NvbnN0cnVjdG9yKGw9bnVsbCxhLGQpe3N1cGVyKEhXKGEpLE5XKGQsYSkpLHRoaXMuZGVmYXVsdFZhbHVlPW51bGwsdGhpcy5fb25DaGFuZ2U9W10sdGhpcy5fcGVuZGluZ0NoYW5nZT0hMSx0aGlzLl9hcHBseUZvcm1TdGF0ZShsKSx0aGlzLl9zZXRVcGRh''@;'; put 'put ''dGVTdHJhdGVneShhKSx0aGlzLl9pbml0T2JzZXJ2YWJsZXMoKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohIXRoaXMuYXN5bmNWYWxpZGF0b3J9KSxpTChhKSYmKGEubm9uTnVsbGFibGV8fGEuaW5pdGlhbFZhbHVlSXNEZWZhdWx0KSYmKHRo''@;'; put 'put ''aXMuZGVmYXVsdFZhbHVlPUp1ZShsKT9sLnZhbHVlOmwpfXNldFZhbHVlKGwsYT17fSl7dGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9bCx0aGlzLl9vbkNoYW5nZS5sZW5ndGgmJiExIT09YS5lbWl0TW9kZWxUb1ZpZXdDaGFuZ2UmJnRoaXMuX29uQ2hhbmdlLmZvckVhY2goZD0+ZCh0''@;'; put 'put ''aGlzLnZhbHVlLCExIT09YS5lbWl0Vmlld1RvTW9kZWxDaGFuZ2UpKSx0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoYSl9cGF0Y2hWYWx1ZShsLGE9e30pe3RoaXMuc2V0VmFsdWUobCxhKX1yZXNldChsPXRoaXMuZGVmYXVsdFZhbHVlLGE9e30pe3RoaXMuX2FwcGx5Rm9ybVN0YXRlKGwp''@;'; put 'put ''LHRoaXMubWFya0FzUHJpc3RpbmUoYSksdGhpcy5tYXJrQXNVbnRvdWNoZWQoYSksdGhpcy5zZXRWYWx1ZSh0aGlzLnZhbHVlLGEpLHRoaXMuX3BlbmRpbmdDaGFuZ2U9ITF9X3VwZGF0ZVZhbHVlKCl7fV9hbnlDb250cm9scyhsKXtyZXR1cm4hMX1fYWxsQ29udHJvbHNEaXNhYmxlZCgpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmRpc2FibGVkfXJlZ2lzdGVyT25DaGFuZ2UobCl7dGhpcy5fb25DaGFuZ2UucHVzaChsKX1fdW5yZWdpc3Rlck9uQ2hhbmdlKGwpe1h1ZSh0aGlzLl9vbkNoYW5nZSxsKX1yZWdpc3Rlck9uRGlzYWJsZWRDaGFuZ2UobCl7dGhpcy5fb25EaXNhYmxlZENoYW5nZS5wdXNoKGwp''@;'; put 'put ''fV91bnJlZ2lzdGVyT25EaXNhYmxlZENoYW5nZShsKXtYdWUodGhpcy5fb25EaXNhYmxlZENoYW5nZSxsKX1fZm9yRWFjaENoaWxkKGwpe31fc3luY1BlbmRpbmdDb250cm9scygpe3JldHVybiEoInN1Ym1pdCIhPT10aGlzLnVwZGF0ZU9ufHwodGhpcy5fcGVuZGluZ0RpcnR5JiZ0aGlzLm1h''@;'; put 'put ''cmtBc0RpcnR5KCksdGhpcy5fcGVuZGluZ1RvdWNoZWQmJnRoaXMubWFya0FzVG91Y2hlZCgpLCF0aGlzLl9wZW5kaW5nQ2hhbmdlKXx8KHRoaXMuc2V0VmFsdWUodGhpcy5fcGVuZGluZ1ZhbHVlLHtvbmx5U2VsZjohMCxlbWl0TW9kZWxUb1ZpZXdDaGFuZ2U6ITF9KSwwKSl9X2FwcGx5Rm9y''@;'; put 'put ''bVN0YXRlKGwpe0p1ZShsKT8odGhpcy52YWx1ZT10aGlzLl9wZW5kaW5nVmFsdWU9bC52YWx1ZSxsLmRpc2FibGVkP3RoaXMuZGlzYWJsZSh7b25seVNlbGY6ITAsZW1pdEV2ZW50OiExfSk6dGhpcy5lbmFibGUoe29ubHlTZWxmOiEwLGVtaXRFdmVudDohMX0pKTp0aGlzLnZhbHVlPXRoaXMu''@;'; put 'put ''X3BlbmRpbmdWYWx1ZT1sfX0sQkxlPXtwcm92aWRlOmgxLHVzZUV4aXN0aW5nOmtzKCgpPT5Zcyl9LGUwZT1Qcm9taXNlLnJlc29sdmUoKTtsZXQgWXM9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGgxe2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXtzdXBlcigpLHRoaXMuX2NoYW5nZURldGVjdG9y''@;'; put 'put ''UmVmPXYsdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZT1NLHRoaXMuY29udHJvbD1uZXcgWlcsdGhpcy5fcmVnaXN0ZXJlZD0hMSx0aGlzLm5hbWU9IiIsdGhpcy51cGRhdGU9bmV3IHFyLHRoaXMuX3BhcmVudD1hLHRoaXMuX3NldFZhbGlkYXRvcnMoZCksdGhpcy5fc2V0QXN5bmNWYWxpZGF0''@;'; put 'put ''b3JzKGgpLHRoaXMudmFsdWVBY2Nlc3Nvcj1mdW5jdGlvbiBVVyhjLGwpe2lmKCFsKXJldHVybiBudWxsO2xldCBhLGQsaDtyZXR1cm4gQXJyYXkuaXNBcnJheShsKSxsLmZvckVhY2goZj0+e2YuY29uc3RydWN0b3I9PT1RbD9hPWY6ZnVuY3Rpb24gUExlKGMpe3JldHVybiBPYmplY3QuZ2V0''@;'; put 'put ''UHJvdG90eXBlT2YoYy5jb25zdHJ1Y3Rvcik9PT1uN30oZik/ZD1mOmg9Zn0pLGh8fGR8fGF8fG51bGx9KDAsZil9bmdPbkNoYW5nZXMoYSl7aWYodGhpcy5fY2hlY2tGb3JFcnJvcnMoKSwhdGhpcy5fcmVnaXN0ZXJlZHx8Im5hbWUiaW4gYSl7aWYodGhpcy5fcmVnaXN0ZXJlZCYmKHRoaXMu''@;'; put 'put ''X2NoZWNrTmFtZSgpLHRoaXMuZm9ybURpcmVjdGl2ZSkpe2NvbnN0IGQ9YS5uYW1lLnByZXZpb3VzVmFsdWU7dGhpcy5mb3JtRGlyZWN0aXZlLnJlbW92ZUNvbnRyb2woe25hbWU6ZCxwYXRoOnRoaXMuX2dldFBhdGgoZCl9KX10aGlzLl9zZXRVcENvbnRyb2woKX0iaXNEaXNhYmxlZCJpbiBh''@;'; put 'put ''JiZ0aGlzLl91cGRhdGVEaXNhYmxlZChhKSxmdW5jdGlvbiB6VyhjLGwpe2lmKCFjLmhhc093blByb3BlcnR5KCJtb2RlbCIpKXJldHVybiExO2NvbnN0IGE9Yy5tb2RlbDtyZXR1cm4hIWEuaXNGaXJzdENoYW5nZSgpfHwhT2JqZWN0LmlzKGwsYS5jdXJyZW50VmFsdWUpfShhLHRoaXMudmll''@;'; put 'put ''d01vZGVsKSYmKHRoaXMuX3VwZGF0ZVZhbHVlKHRoaXMubW9kZWwpLHRoaXMudmlld01vZGVsPXRoaXMubW9kZWwpfW5nT25EZXN0cm95KCl7dGhpcy5mb3JtRGlyZWN0aXZlJiZ0aGlzLmZvcm1EaXJlY3RpdmUucmVtb3ZlQ29udHJvbCh0aGlzKX1nZXQgcGF0aCgpe3JldHVybiB0aGlzLl9n''@;'; put 'put ''ZXRQYXRoKHRoaXMubmFtZSl9Z2V0IGZvcm1EaXJlY3RpdmUoKXtyZXR1cm4gdGhpcy5fcGFyZW50P3RoaXMuX3BhcmVudC5mb3JtRGlyZWN0aXZlOm51bGx9dmlld1RvTW9kZWxVcGRhdGUoYSl7dGhpcy52aWV3TW9kZWw9YSx0aGlzLnVwZGF0ZS5lbWl0KGEpfV9zZXRVcENvbnRyb2woKXt0''@;'; put 'put ''aGlzLl9zZXRVcGRhdGVTdHJhdGVneSgpLHRoaXMuX2lzU3RhbmRhbG9uZSgpP3RoaXMuX3NldFVwU3RhbmRhbG9uZSgpOnRoaXMuZm9ybURpcmVjdGl2ZS5hZGRDb250cm9sKHRoaXMpLHRoaXMuX3JlZ2lzdGVyZWQ9ITB9X3NldFVwZGF0ZVN0cmF0ZWd5KCl7dGhpcy5vcHRpb25zJiZudWxs''@;'; put 'put ''IT10aGlzLm9wdGlvbnMudXBkYXRlT24mJih0aGlzLmNvbnRyb2wuX3VwZGF0ZU9uPXRoaXMub3B0aW9ucy51cGRhdGVPbil9X2lzU3RhbmRhbG9uZSgpe3JldHVybiF0aGlzLl9wYXJlbnR8fCEoIXRoaXMub3B0aW9uc3x8IXRoaXMub3B0aW9ucy5zdGFuZGFsb25lKX1fc2V0VXBTdGFuZGFs''@;'; put 'put ''b25lKCl7aHgodGhpcy5jb250cm9sLHRoaXMsdGhpcy5jYWxsU2V0RGlzYWJsZWRTdGF0ZSksdGhpcy5jb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pfV9jaGVja0ZvckVycm9ycygpe3RoaXMuX2lzU3RhbmRhbG9uZSgpfHx0aGlzLl9jaGVja1BhcmVudFR5''@;'; put 'put ''cGUoKSx0aGlzLl9jaGVja05hbWUoKX1fY2hlY2tQYXJlbnRUeXBlKCl7fV9jaGVja05hbWUoKXt0aGlzLm9wdGlvbnMmJnRoaXMub3B0aW9ucy5uYW1lJiYodGhpcy5uYW1lPXRoaXMub3B0aW9ucy5uYW1lKSx0aGlzLl9pc1N0YW5kYWxvbmUoKX1fdXBkYXRlVmFsdWUoYSl7ZTBlLnRoZW4o''@;'; put 'put ''KCk9Pnt0aGlzLmNvbnRyb2wuc2V0VmFsdWUoYSx7ZW1pdFZpZXdUb01vZGVsQ2hhbmdlOiExfSksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY/Lm1hcmtGb3JDaGVjaygpfSl9X3VwZGF0ZURpc2FibGVkKGEpe2NvbnN0IGQ9YS5pc0Rpc2FibGVkLmN1cnJlbnRWYWx1ZSxoPTAhPT1kJiZsMShk''@;'; put 'put ''KTtlMGUudGhlbigoKT0+e2gmJiF0aGlzLmNvbnRyb2wuZGlzYWJsZWQ/dGhpcy5jb250cm9sLmRpc2FibGUoKTohaCYmdGhpcy5jb250cm9sLmRpc2FibGVkJiZ0aGlzLmNvbnRyb2wuZW5hYmxlKCksdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY/Lm1hcmtGb3JDaGVjaygpfSl9X2dldFBhdGgo''@;'; put 'put ''YSl7cmV0dXJuIHRoaXMuX3BhcmVudD9mdW5jdGlvbiBhTChjLGwpe3JldHVyblsuLi5sLnBhdGgsY119KGEsdGhpcy5fcGFyZW50KTpbYV19c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoajEsOSksR2UoZDAsMTApLEdlKGNtLDEwKSxHZShm''@;'; put 'put ''cCwxMCksR2UoeHMsOCksR2UoaTcsOCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdNb2RlbCIsIiIsMywiZm9ybUNvbnRyb2xOYW1lIiwiIiwzLCJmb3JtQ29udHJvbCIsIiJdXSxpbnB1dHM6e25hbWU6Im5hbWUiLGlzRGlzYWJsZWQ6W1pu''@;'; put 'put ''Lk5vbmUsImRpc2FibGVkIiwiaXNEaXNhYmxlZCJdLG1vZGVsOltabi5Ob25lLCJuZ01vZGVsIiwibW9kZWwiXSxvcHRpb25zOltabi5Ob25lLCJuZ01vZGVsT3B0aW9ucyIsIm9wdGlvbnMiXX0sb3V0cHV0czp7dXBkYXRlOiJuZ01vZGVsQ2hhbmdlIn0sZXhwb3J0QXM6WyJuZ01vZGVsIl0s''@;'; put 'put ''ZmVhdHVyZXM6W3BvKFtCTGVdKSxDbyx5bF19KX19cmV0dXJuIGN9KSgpLG83PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJmb3JtIiwz''@;'; put 'put ''LCJuZ05vRm9ybSIsIiIsMywibmdOYXRpdmVWYWxpZGF0ZSIsIiJdXSxob3N0QXR0cnM6WyJub3ZhbGlkYXRlIiwiIl19KX19cmV0dXJuIGN9KSgpO2NvbnN0IGpMZT17cHJvdmlkZTpmcCx1c2VFeGlzdGluZzprcygoKT0+dUwpLG11bHRpOiEwfTtsZXQgdUw9KCgpPT57Y2xhc3MgYyBleHRl''@;'; put 'put ''bmRzIG43e3dyaXRlVmFsdWUoYSl7dGhpcy5zZXRQcm9wZXJ0eSgidmFsdWUiLGE/PyIiKX1yZWdpc3Rlck9uQ2hhbmdlKGEpe3RoaXMub25DaGFuZ2U9ZD0+e2EoIiI9PWQ/bnVsbDpwYXJzZUZsb2F0KGQpKX19c3RhdGlje3RoaXMuXHUwMjc1ZmFjPSgoKT0+e2xldCBhO3JldHVybiBmdW5j''@;'; put 'put ''dGlvbihoKXtyZXR1cm4oYXx8KGE9WnMoYykpKShofHxjKX19KSgpfXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsIm51bWJlciIsImZvcm1Db250''@;'; put 'put ''cm9sIiwiIl0sWyJpbnB1dCIsInR5cGUiLCJudW1iZXIiLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmRnQoImlucHV0IixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkNoYW5nZSh2LnRhcmdldC52YWx1ZSl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''aC5vblRvdWNoZWQoKX0pfSxmZWF0dXJlczpbcG8oW2pMZV0pLENvXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgekxlPXtwcm92aWRlOmZwLHVzZUV4aXN0aW5nOmtzKCgpPT5kTCksbXVsdGk6ITB9O2xldCBVTGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2FjY2Vzc29ycz1b''@;'; put 'put ''XX1hZGQoYSxkKXt0aGlzLl9hY2Nlc3NvcnMucHVzaChbYSxkXSl9cmVtb3ZlKGEpe2ZvcihsZXQgZD10aGlzLl9hY2Nlc3NvcnMubGVuZ3RoLTE7ZD49MDstLWQpaWYodGhpcy5fYWNjZXNzb3JzW2RdWzFdPT09YSlyZXR1cm4gdm9pZCB0aGlzLl9hY2Nlc3NvcnMuc3BsaWNlKGQsMSl9c2Vs''@;'; put 'put ''ZWN0KGEpe3RoaXMuX2FjY2Vzc29ycy5mb3JFYWNoKGQ9Pnt0aGlzLl9pc1NhbWVHcm91cChkLGEpJiZkWzFdIT09YSYmZFsxXS5maXJlVW5jaGVjayhhLnZhbHVlKX0pfV9pc1NhbWVHcm91cChhLGQpe3JldHVybiEhYVswXS5jb250cm9sJiZhWzBdLl9wYXJlbnQ9PT1kLl9jb250cm9sLl9w''@;'; put 'put ''YXJlbnQmJmFbMV0ubmFtZT09PWQubmFtZX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSko''@;'; put 'put ''KSxkTD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgbjd7Y29uc3RydWN0b3IoYSxkLGgsZil7c3VwZXIoYSxkKSx0aGlzLl9yZWdpc3RyeT1oLHRoaXMuX2luamVjdG9yPWYsdGhpcy5zZXREaXNhYmxlZFN0YXRlRmlyZWQ9ITEsdGhpcy5vbkNoYW5nZT0oKT0+e30sdGhpcy5jYWxsU2V0RGlzYWJs''@;'; put 'put ''ZWRTdGF0ZT1oaShpNyx7b3B0aW9uYWw6ITB9KT8/ZHh9bmdPbkluaXQoKXt0aGlzLl9jb250cm9sPXRoaXMuX2luamVjdG9yLmdldChoMSksdGhpcy5fY2hlY2tOYW1lKCksdGhpcy5fcmVnaXN0cnkuYWRkKHRoaXMuX2NvbnRyb2wsdGhpcyl9bmdPbkRlc3Ryb3koKXt0aGlzLl9yZWdpc3Ry''@;'; put 'put ''eS5yZW1vdmUodGhpcyl9d3JpdGVWYWx1ZShhKXt0aGlzLl9zdGF0ZT1hPT09dGhpcy52YWx1ZSx0aGlzLnNldFByb3BlcnR5KCJjaGVja2VkIix0aGlzLl9zdGF0ZSl9cmVnaXN0ZXJPbkNoYW5nZShhKXt0aGlzLl9mbj1hLHRoaXMub25DaGFuZ2U9KCk9PnthKHRoaXMudmFsdWUpLHRoaXMu''@;'; put 'put ''X3JlZ2lzdHJ5LnNlbGVjdCh0aGlzKX19c2V0RGlzYWJsZWRTdGF0ZShhKXsodGhpcy5zZXREaXNhYmxlZFN0YXRlRmlyZWR8fGF8fCJ3aGVuRGlzYWJsZWRGb3JMZWdhY3lDb2RlIj09PXRoaXMuY2FsbFNldERpc2FibGVkU3RhdGUpJiZ0aGlzLnNldFByb3BlcnR5KCJkaXNhYmxlZCIsYSks''@;'; put 'put ''dGhpcy5zZXREaXNhYmxlZFN0YXRlRmlyZWQ9ITB9ZmlyZVVuY2hlY2soYSl7dGhpcy53cml0ZVZhbHVlKGEpfV9jaGVja05hbWUoKXshdGhpcy5uYW1lJiZ0aGlzLmZvcm1Db250cm9sTmFtZSYmKHRoaXMubmFtZT10aGlzLmZvcm1Db250cm9sTmFtZSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoRWEpLEdlKGVvKSxHZShVTGUpLEdlKERzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJpbnB1dCIsInR5cGUiLCJyYWRpbyIsImZvcm1Db250cm9sTmFtZSIsIiJdLFsiaW5wdXQiLCJ0eXBl''@;'; put 'put ''IiwicmFkaW8iLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwicmFkaW8iLCJuZ01vZGVsIiwiIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmRnQoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vbkNoYW5nZSgpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIGgub25Ub3VjaGVkKCl9KX0saW5wdXRzOntuYW1lOiJuYW1lIixmb3JtQ29udHJvbE5hbWU6ImZvcm1Db250cm9sTmFtZSIsdmFsdWU6InZhbHVlIn0sZmVhdHVyZXM6W3BvKFt6TGVdKSxDb119KX19cmV0dXJuIGN9KSgpO2NvbnN0IFlXPW5ldyBTdCgiIikscUxlPXtwcm92aWRlOmZw''@;'; put 'put ''LHVzZUV4aXN0aW5nOmtzKCgpPT56ZiksbXVsdGk6ITB9O2Z1bmN0aW9uIG8wZShjLGwpe3JldHVybiBudWxsPT1jP2Ake2x9YDoobCYmIm9iamVjdCI9PXR5cGVvZiBsJiYobD0iT2JqZWN0IiksYCR7Y306ICR7bH1gLnNsaWNlKDAsNTApKX1sZXQgemY9KCgpPT57Y2xhc3MgYyBleHRlbmRz''@;'; put 'put ''IG43e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9vcHRpb25NYXA9bmV3IE1hcCx0aGlzLl9pZENvdW50ZXI9MCx0aGlzLl9jb21wYXJlV2l0aD1PYmplY3QuaXN9c2V0IGNvbXBhcmVXaXRoKGEpe3RoaXMuX2NvbXBhcmVXaXRoPWF9d3JpdGVWYWx1ZShhKXt0aGlz''@;'; put 'put ''LnZhbHVlPWE7Y29uc3QgaD1vMGUodGhpcy5fZ2V0T3B0aW9uSWQoYSksYSk7dGhpcy5zZXRQcm9wZXJ0eSgidmFsdWUiLGgpfXJlZ2lzdGVyT25DaGFuZ2UoYSl7dGhpcy5vbkNoYW5nZT1kPT57dGhpcy52YWx1ZT10aGlzLl9nZXRPcHRpb25WYWx1ZShkKSxhKHRoaXMudmFsdWUpfX1fcmVn''@;'; put 'put ''aXN0ZXJPcHRpb24oKXtyZXR1cm4odGhpcy5faWRDb3VudGVyKyspLnRvU3RyaW5nKCl9X2dldE9wdGlvbklkKGEpe2Zvcihjb25zdCBkIG9mIHRoaXMuX29wdGlvbk1hcC5rZXlzKCkpaWYodGhpcy5fY29tcGFyZVdpdGgodGhpcy5fb3B0aW9uTWFwLmdldChkKSxhKSlyZXR1cm4gZDtyZXR1''@;'; put 'put ''cm4gbnVsbH1fZ2V0T3B0aW9uVmFsdWUoYSl7Y29uc3QgZD1mdW5jdGlvbiBYTGUoYyl7cmV0dXJuIGMuc3BsaXQoIjoiKVswXX0oYSk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5oYXMoZCk/dGhpcy5fb3B0aW9uTWFwLmdldChkKTphfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz0oKCk9PntsZXQg''@;'; put 'put ''YTtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuKGF8fChhPVpzKGMpKSkoaHx8Yyl9fSkoKX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1sic2VsZWN0IiwiZm9ybUNvbnRyb2xOYW1lIiwiIiwzLCJtdWx0aXBsZSIsIiJdLFsic2VsZWN0IiwiZm9ybUNvbnRy''@;'; put 'put ''b2wiLCIiLDMsIm11bHRpcGxlIiwiIl0sWyJzZWxlY3QiLCJuZ01vZGVsIiwiIiwzLCJtdWx0aXBsZSIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uQ2hhbmdlKHYudGFyZ2V0LnZhbHVlKX0pKCJibHVyIixm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiBoLm9uVG91Y2hlZCgpfSl9LGlucHV0czp7Y29tcGFyZVdpdGg6ImNvbXBhcmVXaXRoIn0sZmVhdHVyZXM6W3BvKFtxTGVdKSxDb119KX19cmV0dXJuIGN9KSgpLFVmPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX2VsZW1lbnQ9YSx0aGlz''@;'; put 'put ''Ll9yZW5kZXJlcj1kLHRoaXMuX3NlbGVjdD1oLHRoaXMuX3NlbGVjdCYmKHRoaXMuaWQ9dGhpcy5fc2VsZWN0Ll9yZWdpc3Rlck9wdGlvbigpKX1zZXQgbmdWYWx1ZShhKXtudWxsIT10aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1hcC5zZXQodGhpcy5pZCxhKSx0aGlzLl9z''@;'; put 'put ''ZXRFbGVtZW50VmFsdWUobzBlKHRoaXMuaWQsYSkpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVjdC52YWx1ZSkpfXNldCB2YWx1ZShhKXt0aGlzLl9zZXRFbGVtZW50VmFsdWUoYSksdGhpcy5fc2VsZWN0JiZ0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3Qu''@;'; put 'put ''dmFsdWUpfV9zZXRFbGVtZW50VmFsdWUoYSl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsYSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zZWxlY3QmJih0aGlzLl9zZWxlY3QuX29wdGlvbk1hcC5kZWxldGUodGhpcy5pZCksdGhp''@;'; put 'put ''cy5fc2VsZWN0LndyaXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoZW8pLEdlKEVhKSxHZSh6Ziw5KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJv''@;'; put 'put ''cHRpb24iXV0saW5wdXRzOntuZ1ZhbHVlOiJuZ1ZhbHVlIix2YWx1ZToidmFsdWUifX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgSkxlPXtwcm92aWRlOmZwLHVzZUV4aXN0aW5nOmtzKCgpPT5weCksbXVsdGk6ITB9O2Z1bmN0aW9uIGEwZShjLGwpe3JldHVybiBudWxsPT1jP2Ake2x9YDooInN0''@;'; put 'put ''cmluZyI9PXR5cGVvZiBsJiYobD1gJyR7bH0nYCksbCYmIm9iamVjdCI9PXR5cGVvZiBsJiYobD0iT2JqZWN0IiksYCR7Y306ICR7bH1gLnNsaWNlKDAsNTApKX1sZXQgcHg9KCgpPT57Y2xhc3MgYyBleHRlbmRzIG43e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9v''@;'; put 'put ''cHRpb25NYXA9bmV3IE1hcCx0aGlzLl9pZENvdW50ZXI9MCx0aGlzLl9jb21wYXJlV2l0aD1PYmplY3QuaXN9c2V0IGNvbXBhcmVXaXRoKGEpe3RoaXMuX2NvbXBhcmVXaXRoPWF9d3JpdGVWYWx1ZShhKXtsZXQgZDtpZih0aGlzLnZhbHVlPWEsQXJyYXkuaXNBcnJheShhKSl7Y29uc3QgaD1h''@;'; put 'put ''Lm1hcChmPT50aGlzLl9nZXRPcHRpb25JZChmKSk7ZD0oZix2KT0+e2YuX3NldFNlbGVjdGVkKGguaW5kZXhPZih2LnRvU3RyaW5nKCkpPi0xKX19ZWxzZSBkPShoLGYpPT57aC5fc2V0U2VsZWN0ZWQoITEpfTt0aGlzLl9vcHRpb25NYXAuZm9yRWFjaChkKX1yZWdpc3Rlck9uQ2hhbmdlKGEp''@;'; put 'put ''e3RoaXMub25DaGFuZ2U9ZD0+e2NvbnN0IGg9W10sZj1kLnNlbGVjdGVkT3B0aW9ucztpZih2b2lkIDAhPT1mKXtjb25zdCB2PWY7Zm9yKGxldCBNPTA7TTx2Lmxlbmd0aDtNKyspe2NvbnN0IFo9dGhpcy5fZ2V0T3B0aW9uVmFsdWUodltNXS52YWx1ZSk7aC5wdXNoKFopfX1lbHNle2NvbnN0''@;'; put 'put ''IHY9ZC5vcHRpb25zO2ZvcihsZXQgTT0wO008di5sZW5ndGg7TSsrKXtjb25zdCBEPXZbTV07aWYoRC5zZWxlY3RlZCl7Y29uc3QgWj10aGlzLl9nZXRPcHRpb25WYWx1ZShELnZhbHVlKTtoLnB1c2goWil9fX10aGlzLnZhbHVlPWgsYShoKX19X3JlZ2lzdGVyT3B0aW9uKGEpe2NvbnN0IGQ9''@;'; put 'put ''KHRoaXMuX2lkQ291bnRlcisrKS50b1N0cmluZygpO3JldHVybiB0aGlzLl9vcHRpb25NYXAuc2V0KGQsYSksZH1fZ2V0T3B0aW9uSWQoYSl7Zm9yKGNvbnN0IGQgb2YgdGhpcy5fb3B0aW9uTWFwLmtleXMoKSlpZih0aGlzLl9jb21wYXJlV2l0aCh0aGlzLl9vcHRpb25NYXAuZ2V0KGQpLl92''@;'; put 'put ''YWx1ZSxhKSlyZXR1cm4gZDtyZXR1cm4gbnVsbH1fZ2V0T3B0aW9uVmFsdWUoYSl7Y29uc3QgZD1mdW5jdGlvbiBRTGUoYyl7cmV0dXJuIGMuc3BsaXQoIjoiKVswXX0oYSk7cmV0dXJuIHRoaXMuX29wdGlvbk1hcC5oYXMoZCk/dGhpcy5fb3B0aW9uTWFwLmdldChkKS5fdmFsdWU6YX1zdGF0''@;'; put 'put ''aWN7dGhpcy5cdTAyNzVmYWM9KCgpPT57bGV0IGE7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybihhfHwoYT1acyhjKSkpKGh8fGMpfX0pKCl9c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbInNlbGVjdCIsIm11bHRpcGxlIiwiIiwiZm9ybUNvbnRyb2xOYW1l''@;'; put 'put ''IiwiIl0sWyJzZWxlY3QiLCJtdWx0aXBsZSIsIiIsImZvcm1Db250cm9sIiwiIl0sWyJzZWxlY3QiLCJtdWx0aXBsZSIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZGdCgiY2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkNoYW5nZSh2LnRh''@;'; put 'put ''cmdldCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vblRvdWNoZWQoKX0pfSxpbnB1dHM6e2NvbXBhcmVXaXRoOiJjb21wYXJlV2l0aCJ9LGZlYXR1cmVzOltwbyhbSkxlXSksQ29dfSl9fXJldHVybiBjfSkoKSxaZj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlz''@;'; put 'put ''Ll9lbGVtZW50PWEsdGhpcy5fcmVuZGVyZXI9ZCx0aGlzLl9zZWxlY3Q9aCx0aGlzLl9zZWxlY3QmJih0aGlzLmlkPXRoaXMuX3NlbGVjdC5fcmVnaXN0ZXJPcHRpb24odGhpcykpfXNldCBuZ1ZhbHVlKGEpe251bGwhPXRoaXMuX3NlbGVjdCYmKHRoaXMuX3ZhbHVlPWEsdGhpcy5fc2V0RWxl''@;'; put 'put ''bWVudFZhbHVlKGEwZSh0aGlzLmlkLGEpKSx0aGlzLl9zZWxlY3Qud3JpdGVWYWx1ZSh0aGlzLl9zZWxlY3QudmFsdWUpKX1zZXQgdmFsdWUoYSl7dGhpcy5fc2VsZWN0Pyh0aGlzLl92YWx1ZT1hLHRoaXMuX3NldEVsZW1lbnRWYWx1ZShhMGUodGhpcy5pZCxhKSksdGhpcy5fc2VsZWN0Lndy''@;'; put 'put ''aXRlVmFsdWUodGhpcy5fc2VsZWN0LnZhbHVlKSk6dGhpcy5fc2V0RWxlbWVudFZhbHVlKGEpfV9zZXRFbGVtZW50VmFsdWUoYSl7dGhpcy5fcmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsYSl9X3NldFNlbGVjdGVkKGEpe3RoaXMuX3Jl''@;'; put 'put ''bmRlcmVyLnNldFByb3BlcnR5KHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCwic2VsZWN0ZWQiLGEpfW5nT25EZXN0cm95KCl7dGhpcy5fc2VsZWN0JiYodGhpcy5fc2VsZWN0Ll9vcHRpb25NYXAuZGVsZXRlKHRoaXMuaWQpLHRoaXMuX3NlbGVjdC53cml0ZVZhbHVlKHRoaXMuX3NlbGVj''@;'; put 'put ''dC52YWx1ZSkpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKGVvKSxHZShFYSksR2UocHgsOSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1sib3B0aW9uIl1dLGlucHV0czp7bmdWYWx1ZToibmdWYWx1''@;'; put 'put ''ZSIsdmFsdWU6InZhbHVlIn19KX19cmV0dXJuIGN9KSgpLGE3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl92YWxpZGF0b3I9ZUx9bmdPbkNoYW5nZXMoYSl7aWYodGhpcy5pbnB1dE5hbWUgaW4gYSl7Y29uc3QgZD10aGlzLm5vcm1hbGl6ZUlucHV0KGFbdGhpcy5pbnB1dE5h''@;'; put 'put ''bWVdLmN1cnJlbnRWYWx1ZSk7dGhpcy5fZW5hYmxlZD10aGlzLmVuYWJsZWQoZCksdGhpcy5fdmFsaWRhdG9yPXRoaXMuX2VuYWJsZWQ/dGhpcy5jcmVhdGVWYWxpZGF0b3IoZCk6ZUwsdGhpcy5fb25DaGFuZ2UmJnRoaXMuX29uQ2hhbmdlKCl9fXZhbGlkYXRlKGEpe3JldHVybiB0aGlzLl92''@;'; put 'put ''YWxpZGF0b3IoYSl9cmVnaXN0ZXJPblZhbGlkYXRvckNoYW5nZShhKXt0aGlzLl9vbkNoYW5nZT1hfWVuYWJsZWQoYSl7cmV0dXJuIG51bGwhPWF9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlw''@;'; put 'put ''ZTpjLGZlYXR1cmVzOlt5bF19KX19cmV0dXJuIGN9KSgpO2NvbnN0IG5PZT17cHJvdmlkZTpkMCx1c2VFeGlzdGluZzprcygoKT0+JFcpLG11bHRpOiEwfSxyT2U9e3Byb3ZpZGU6ZDAsdXNlRXhpc3Rpbmc6a3MoKCk9PktXKSxtdWx0aTohMH07bGV0ICRXPSgoKT0+e2NsYXNzIGMgZXh0ZW5k''@;'; put 'put ''cyBhN3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5pbnB1dE5hbWU9InJlcXVpcmVkIix0aGlzLm5vcm1hbGl6ZUlucHV0PWwxLHRoaXMuY3JlYXRlVmFsaWRhdG9yPWE9Pnh1ZX1lbmFibGVkKGEpe3JldHVybiBhfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz0oKCk9Pnts''@;'; put 'put ''ZXQgYTtyZXR1cm4gZnVuY3Rpb24oaCl7cmV0dXJuKGF8fChhPVpzKGMpKSkoaHx8Yyl9fSkoKX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdLFsiIiwi''@;'; put 'put ''cmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbCIsIiIsMywidHlwZSIsImNoZWNrYm94Il0sWyIiLCJyZXF1aXJlZCIsIiIsIm5nTW9kZWwiLCIiLDMsInR5cGUiLCJjaGVja2JveCJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezImZCYmZHIoInJlcXVpcmVkIixoLl9l''@;'; put 'put ''bmFibGVkPyIiOm51bGwpfSxpbnB1dHM6e3JlcXVpcmVkOiJyZXF1aXJlZCJ9LGZlYXR1cmVzOltwbyhbbk9lXSksQ29dfSl9fXJldHVybiBjfSkoKSxLVz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgJFd7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuY3JlYXRlVmFsaWRh''@;'; put 'put ''dG9yPWE9PkV1ZX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9KCgpPT57bGV0IGE7cmV0dXJuIGZ1bmN0aW9uKGgpe3JldHVybihhfHwoYT1acyhjKSkpKGh8fGMpfX0pKCl9c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsImNoZWNrYm94''@;'; put 'put ''IiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbE5hbWUiLCIiXSxbImlucHV0IiwidHlwZSIsImNoZWNrYm94IiwicmVxdWlyZWQiLCIiLCJmb3JtQ29udHJvbCIsIiJdLFsiaW5wdXQiLCJ0eXBlIiwiY2hlY2tib3giLCJyZXF1aXJlZCIsIiIsIm5nTW9kZWwiLCIiXV0saG9zdFZhcnM6MSxo''@;'; put 'put ''b3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsyJmQmJmRyKCJyZXF1aXJlZCIsaC5fZW5hYmxlZD8iIjpudWxsKX0sZmVhdHVyZXM6W3BvKFtyT2VdKSxDb119KX19cmV0dXJuIGN9KSgpLGcwZT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4g''@;'; put 'put ''bmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7fSl9fXJldHVybiBjfSkoKSxEYz0oKCk9PntjbGFzcyBje3N0YXRpYyB3aXRoQ29uZmlnKGEpe3JldHVybntuZ01vZHVsZTpjLHByb3ZpZGVyczpbe3Byb3ZpZGU6''@;'; put 'put ''aTcsdXNlVmFsdWU6YS5jYWxsU2V0RGlzYWJsZWRTdGF0ZT8/ZHh9XX19c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltn''@;'; put 'put ''MGVdfSl9fXJldHVybiBjfSkoKSxjT2U9KCgpPT57Y2xhc3MgY3tzdGF0aWMgd2l0aENvbmZpZyhhKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6W3twcm92aWRlOllXLHVzZVZhbHVlOmEud2Fybk9uTmdNb2RlbFdpdGhGb3JtQ29udHJvbD8/ImFsd2F5cyJ9LHtwcm92aWRlOmk3LHVz''@;'; put 'put ''ZVZhbHVlOmEuY2FsbFNldERpc2FibGVkU3RhdGU/P2R4fV19fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbZzBlXX0p''@;'; put 'put ''fX1yZXR1cm4gY30pKCk7Y29uc3Qgd3k9WyJhbmdsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0yOS41MiwyMi41MiwxOCwxMC42LDYuNDgsMjIuNTJhMS43LDEuNywwLDAsMCwyLjQ1LDIuMzZMMTgsMTUuNDlsOS4wOCw5LjM5YTEuNywxLjcsMCwwLDAsMi40NS0yLjM2WiIvPid9XSxwaD1bImV4''@;'; put 'put ''Y2xhbWF0aW9uLWNpcmNsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOCAxOS44QzE4LjU1IDE5LjggMTkgMTkuMzUgMTkgMTguOFYxM0MxOSAxMi40NSAxOC41NSAxMiAxOCAxMkMxNy40NSAxMiAxNyAxMi40NSAxNyAxM1YxOC44QzE3IDE5LjM1IDE3LjQ1IDE5LjggMTggMTkuOFpNMTguODUg''@;'; put 'put ''MjEuOTVDMTguNzMgMjEuODQgMTguNiAyMS43NSAxOC40NiAyMS42OUMxOC4xNyAyMS41NyAxNy44MyAyMS41NyAxNy41NCAyMS42OUMxNy40IDIxLjc1IDE3LjI3IDIxLjg0IDE3LjE1IDIxLjk1QzE2LjkzIDIyLjE4IDE2LjggMjIuNDggMTYuOCAyMi44QzE2LjggMjMuMTIgMTYuOTMgMjMu''@;'; put 'put ''NDIgMTcuMTUgMjMuNjVDMTcuMjcgMjMuNzYgMTcuNCAyMy44NSAxNy41NCAyMy45MUMxNy42OSAyMy45NyAxNy44NCAyNCAxOCAyNEMxOC4xNiAyNCAxOC4zMSAyMy45NyAxOC40NiAyMy45MUMxOC42IDIzLjg1IDE4LjczIDIzLjc2IDE4Ljg1IDIzLjY1QzE5LjA3IDIzLjQyIDE5LjIgMjMu''@;'; put 'put ''MTIgMTkuMiAyMi44QzE5LjIgMjIuNjQgMTkuMTcgMjIuNDkgMTkuMTEgMjIuMzRDMTkuMDUgMjIuMiAxOC45NiAyMi4wNiAxOC44NSAyMS45NVpNMTggNkMxMS4zOCA2IDYgMTEuMzggNiAxOEM2IDI0LjYyIDExLjM4IDMwIDE4IDMwQzI0LjYyIDMwIDMwIDI0LjYyIDMwIDE4QzMwIDExLjM4''@;'; put 'put ''IDI0LjYyIDYgMTggNlpNMTggMjhDMTIuNDkgMjggOCAyMy41MSA4IDE4QzggMTIuNDkgMTIuNDkgOCAxOCA4QzIzLjUxIDggMjggMTIuNDkgMjggMThDMjggMjMuNTEgMjMuNTEgMjggMTggMjhaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4IDZDMTEuMzggNiA2IDExLjM4IDYgMThDNiAyNC42''@;'; put 'put ''MiAxMS4zOCAzMCAxOCAzMEMyNC42MiAzMCAzMCAyNC42MiAzMCAxOEMzMCAxMS4zOCAyNC42MiA2IDE4IDZaTTE2LjggMTIuNjVDMTYuOCAxMS45OSAxNy4zNCAxMS40NSAxOCAxMS40NUMxOC42NiAxMS40NSAxOS4yIDExLjk5IDE5LjIgMTIuNjVWMTguNDVDMTkuMiAxOS4xMSAxOC42NiAx''@;'; put 'put ''OS42NSAxOCAxOS42NUMxNy4zNCAxOS42NSAxNi44IDE5LjExIDE2LjggMTguNDVWMTIuNjVaTTE4Ljk4IDI0LjE1QzE4Ljg0IDI0LjI4IDE4LjY5IDI0LjM4IDE4LjUzIDI0LjQ1QzE4LjM1IDI0LjUyIDE4LjE4IDI0LjU2IDE4IDI0LjU2QzE3LjgyIDI0LjU2IDE3LjY0IDI0LjUzIDE3LjQ2''@;'; put 'put ''IDI0LjQ1QzE3LjMxIDI0LjM4IDE3LjE2IDI0LjI5IDE3IDI0LjE0QzE2Ljc0IDIzLjg3IDE2LjU5IDIzLjUyIDE2LjU5IDIzLjE1QzE2LjU5IDIyLjc4IDE2LjczIDIyLjQ0IDE3IDIyLjE1QzE3LjE0IDIyLjAyIDE3LjI5IDIxLjkyIDE3LjQ1IDIxLjg1QzE3LjYyIDIxLjc4IDE3LjggMjEu''@;'; put 'put ''NzQgMTcuOTkgMjEuNzRDMTguMTggMjEuNzQgMTguMzYgMjEuNzggMTguNTMgMjEuODVDMTguNjggMjEuOTIgMTguODMgMjIuMDIgMTguOTggMjIuMTVDMTkuMSAyMi4yNyAxOS4yMSAyMi40MyAxOS4yOCAyMi42MUMxOS4zNSAyMi43OSAxOS4zOSAyMi45NiAxOS4zOSAyMy4xNEMxOS4zOSAy''@;'; put 'put ''My41IDE5LjI1IDIzLjg1IDE4Ljk3IDI0LjE0TDE4Ljk4IDI0LjE1WiIvPid9XSxnaD1bImNoZWNrLWNpcmNsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0yMi42MSAxNC4yMkwxNi4yNSAyMC41OEwxMi43MSAxNy4wNEMxMi4zMiAxNi42NSAxMS42OSAxNi42NSAxMS4zIDE3LjA0QzEwLjkxIDE3''@;'; put 'put ''LjQzIDEwLjkxIDE4LjA2IDExLjMgMTguNDVMMTYuMjUgMjMuNEwyNC4wMyAxNS42MkMyNC40MiAxNS4yMyAyNC40MiAxNC42IDI0LjAzIDE0LjIxQzIzLjY0IDEzLjgyIDIzLjAxIDEzLjgyIDIyLjYyIDE0LjIxTDIyLjYxIDE0LjIyWk0xOCA2QzExLjM4IDYgNiAxMS4zOCA2IDE4QzYgMjQu''@;'; put 'put ''NjIgMTEuMzggMzAgMTggMzBDMjQuNjIgMzAgMzAgMjQuNjIgMzAgMThDMzAgMTEuMzggMjQuNjIgNiAxOCA2Wk0xOCAyOEMxMi40OSAyOCA4IDIzLjUxIDggMThDOCAxMi40OSAxMi40OSA4IDE4IDhDMjMuNTEgOCAyOCAxMi40OSAyOCAxOEMyOCAyMy41MSAyMy41MSAyOCAxOCAyOFoiLz4n''@;'; put 'put ''LHNvbGlkOic8cGF0aCBkPSJNMTggNkMxMS4zOCA2IDYgMTEuMzggNiAxOEM2IDI0LjYyIDExLjM4IDMwIDE4IDMwQzI0LjYyIDMwIDMwIDI0LjYyIDMwIDE4QzMwIDExLjM4IDI0LjYyIDYgMTggNlpNMjQuMTYgMTUuNzhMMTYuMjQgMjMuN0wxMS4xNSAxOC42MUMxMC42OCAxOC4xNCAxMC42''@;'; put 'put ''OCAxNy4zOCAxMS4xNSAxNi45MUMxMS42MiAxNi40NCAxMi4zOCAxNi40NCAxMi44NSAxNi45MUwxNi4yNCAyMC4zTDIyLjQ2IDE0LjA4QzIyLjkzIDEzLjYxIDIzLjY5IDEzLjYxIDI0LjE2IDE0LjA4QzI0LjYzIDE0LjU1IDI0LjYzIDE1LjMxIDI0LjE2IDE1Ljc4WiIvPid9XSxtMGU9WyJl''@;'; put 'put ''bGxpcHNpcy1ob3Jpem9udGFsIix7b3V0bGluZTonPHBhdGggZD0iTTcuOCAxOC4xQzcuOCAxOS43NTY4IDYuNTAxNjMgMjEuMSA0LjkgMjEuMUMzLjI5ODM3IDIxLjEgMiAxOS43NTY4IDIgMTguMUMyIDE2LjQ0MzEgMy4yOTgzNyAxNS4xIDQuOSAxNS4xQzYuNTAxNjMgMTUuMSA3LjggMTYu''@;'; put 'put ''NDQzMSA3LjggMTguMVoiLz48cGF0aCBkPSJNMTggMjEuMUMxOS42MDE2IDIxLjEgMjAuOSAxOS43NTY4IDIwLjkgMTguMUMyMC45IDE2LjQ0MzEgMTkuNjAxNiAxNS4xIDE4IDE1LjFDMTYuMzk4NCAxNS4xIDE1LjEgMTYuNDQzMSAxNS4xIDE4LjFDMTUuMSAxOS43NTY4IDE2LjM5ODQgMjEu''@;'; put 'put ''MSAxOCAyMS4xWiIvPjxwYXRoIGQ9Ik0zMS4xIDIxLjFDMzIuNzAxNiAyMS4xIDM0IDE5Ljc1NjggMzQgMTguMUMzNCAxNi40NDMxIDMyLjcwMTYgMTUuMSAzMS4xIDE1LjFDMjkuNDk4NCAxNS4xIDI4LjIgMTYuNDQzMSAyOC4yIDE4LjFDMjguMiAxOS43NTY4IDI5LjQ5ODQgMjEuMSAzMS4x''@;'; put 'put ''IDIxLjFaIi8+JyxvdXRsaW5lQmFkZ2VkOic8cGF0aCBkPSJNNC45IDIxLjFDNi41MDE2MyAyMS4xIDcuOCAxOS43NTY4IDcuOCAxOC4xQzcuOCAxNi40NDMxIDYuNTAxNjMgMTUuMSA0LjkgMTUuMUMzLjI5ODM3IDE1LjEgMiAxNi40NDMxIDIgMTguMUMyIDE5Ljc1NjggMy4yOTgzNyAyMS4x''@;'; put 'put ''IDQuOSAyMS4xWiIvPjxwYXRoIGQ9Ik0xOCAyMS4xQzE5LjYwMTYgMjEuMSAyMC45IDE5Ljc1NjggMjAuOSAxOC4xQzIwLjkgMTYuNDQzMSAxOS42MDE2IDE1LjEgMTggMTUuMUMxNi4zOTg0IDE1LjEgMTUuMSAxNi40NDMxIDE1LjEgMTguMUMxNS4xIDE5Ljc1NjggMTYuMzk4NCAyMS4xIDE4''@;'; put 'put ''IDIxLjFaIi8+PHBhdGggZD0iTTM0IDE4LjFDMzQgMTkuNzU2OCAzMi43MDE2IDIxLjEgMzEuMSAyMS4xQzI5LjQ5ODQgMjEuMSAyOC4yIDE5Ljc1NjggMjguMiAxOC4xQzI4LjIgMTYuNDQzMSAyOS40OTg0IDE1LjEgMzEuMSAxNS4xQzMyLjcwMTYgMTUuMSAzNCAxNi40NDMxIDM0IDE4LjFa''@;'; put 'put ''Ii8+PHBhdGggZD0iTTMwIDExQzMyLjc2MTQgMTEgMzUgOC43NjE0MiAzNSA2QzM1IDMuMjM4NTggMzIuNzYxNCAxIDMwIDFDMjcuMjM4NiAxIDI1IDMuMjM4NTggMjUgNkMyNSA4Ljc2MTQyIDI3LjIzODYgMTEgMzAgMTFaIi8+J31dLGd4PVsid2luZG93LWNsb3NlIix7b3V0bGluZTonPHBh''@;'; put 'put ''dGggZD0iTTE5LjQxIDE4LjAwMDNMMjYuNyAxMC43MTAzQzI3LjAzOTggMTAuMzEzNSAyNy4wMTY5IDkuNzIyMDcgMjYuNjQ3NiA5LjM1MjdDMjYuMjc4MiA4Ljk4MzMzIDI1LjY4NjggOC45NjA0OSAyNS4yOSA5LjMwMDI2TDE4IDE2LjU5MDNMMTAuNzEgOS4yOTAyNkMxMC4zMTMyIDguOTUw''@;'; put 'put ''NDkgOS43MjE4MSA4Ljk3MzMzIDkuMzUyNDQgOS4zNDI3QzguOTgzMDcgOS43MTIwNyA4Ljk2MDIzIDEwLjMwMzUgOS4zMDAwMSAxMC43MDAzTDE2LjU5IDE4LjAwMDNMOS4yOTAwMSAyNS4yOTAzQzkuMDA0NjMgMjUuNTM0NyA4Ljg4MDMyIDI1LjkxODQgOC45NjgxOSAyNi4yODM3QzkuMDU2''@;'; put 'put ''MDcgMjYuNjQ5IDkuMzQxMjkgMjYuOTM0MiA5LjcwNjU5IDI3LjAyMjFDMTAuMDcxOSAyNy4xMDk5IDEwLjQ1NTYgMjYuOTg1NiAxMC43IDI2LjcwMDNMMTggMTkuNDEwM0wyNS4yOSAyNi43MDAzQzI1LjY4NjggMjcuMDQgMjYuMjc4MiAyNy4wMTcyIDI2LjY0NzYgMjYuNjQ3OEMyNy4wMTY5''@;'; put 'put ''IDI2LjI3ODUgMjcuMDM5OCAyNS42ODcgMjYuNyAyNS4yOTAzTDE5LjQxIDE4LjAwMDNaIi8+J31dLHVPZT1bImluZm8tY2lyY2xlIix7b3V0bGluZTonPHBhdGggZD0iTTIxIDIzSDE5VjE1SDE2QzE1LjQ1IDE1IDE1IDE1LjQ1IDE1IDE2QzE1IDE2LjU1IDE1LjQ1IDE3IDE2IDE3SDE3VjIz''@;'; put 'put ''SDE1QzE0LjQ1IDIzIDE0IDIzLjQ1IDE0IDI0QzE0IDI0LjU1IDE0LjQ1IDI1IDE1IDI1SDIxQzIxLjU1IDI1IDIyIDI0LjU1IDIyIDI0QzIyIDIzLjQ1IDIxLjU1IDIzIDIxIDIzWk0xNy45MyAxMy4zQzE4LjcgMTMuMyAxOS4zMyAxMi42NyAxOS4zMyAxMS45QzE5LjMzIDExLjEzIDE4Ljcg''@;'; put 'put ''MTAuNSAxNy45MyAxMC41QzE3LjE2IDEwLjUgMTYuNTMgMTEuMTMgMTYuNTMgMTEuOUMxNi41MyAxMi42NyAxNy4xNiAxMy4zIDE3LjkzIDEzLjNaTTE4IDZDMTEuMzggNiA2IDExLjM4IDYgMThDNiAyNC42MiAxMS4zOCAzMCAxOCAzMEMyNC42MiAzMCAzMCAyNC42MiAzMCAxOEMzMCAxMS4z''@;'; put 'put ''OCAyNC42MiA2IDE4IDZaTTE4IDI4QzEyLjQ5IDI4IDggMjMuNTEgOCAxOEM4IDEyLjQ5IDEyLjQ5IDggMTggOEMyMy41MSA4IDI4IDEyLjQ5IDI4IDE4QzI4IDIzLjUxIDIzLjUxIDI4IDE4IDI4WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0xOCA2QzExLjM4IDYgNiAxMS4zOCA2IDE4QzYgMjQu''@;'; put 'put ''NjIgMTEuMzggMzAgMTggMzBDMjQuNjIgMzAgMzAgMjQuNjIgMzAgMThDMzAgMTEuMzggMjQuNjIgNiAxOCA2Wk0xNy45MyAxMC4zQzE4LjgxIDEwLjMgMTkuNTMgMTEuMDIgMTkuNTMgMTEuOUMxOS41MyAxMi43OCAxOC44MSAxMy41IDE3LjkzIDEzLjVDMTcuMDUgMTMuNSAxNi4zMyAxMi43''@;'; put 'put ''OCAxNi4zMyAxMS45QzE2LjMzIDExLjAyIDE3LjA1IDEwLjMgMTcuOTMgMTAuM1pNMjEgMjUuMkgxNUMxNC4zNCAyNS4yIDEzLjggMjQuNjYgMTMuOCAyNEMxMy44IDIzLjM0IDE0LjM0IDIyLjggMTUgMjIuOEgxNi44VjE3LjJIMTZDMTUuMzQgMTcuMiAxNC44IDE2LjY2IDE0LjggMTZDMTQu''@;'; put 'put ''OCAxNS4zNCAxNS4zNCAxNC44IDE2IDE0LjhIMTkuMlYyMi44SDIxQzIxLjY2IDIyLjggMjIuMiAyMy4zNCAyMi4yIDI0QzIyLjIgMjQuNjYgMjEuNjYgMjUuMiAyMSAyNS4yWiIvPid9XSx2MGU9WyJ0aW1lcyIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOS40Njk2IDE3Ljk3MzJMMjcuNzU5NiA5''@;'; put 'put ''LjcwNTQyQzI4LjA5OTQgOS4zMDk3MiAyOC4wNzY1IDguNzE5ODcgMjcuNzA3MSA4LjM1MTQ4QzI3LjMzNzggNy45ODMxIDI2Ljc0NjMgNy45NjAzMiAyNi4zNDk2IDguMjk5MTlMMTguMDU5NiAxNi41NjdMOS43Njk1OCA4LjI4OTIyQzkuMzc3NDUgNy44OTgxNCA4Ljc0MTcgNy44OTgxNCA4''@;'; put 'put ''LjM0OTU4IDguMjg5MjJDNy45NTc0NSA4LjY4MDI5IDcuOTU3NDUgOS4zMTQzNCA4LjM0OTU4IDkuNzA1NDJMMTYuNjQ5NiAxNy45NzMyTDguMzQ5NTggMjYuMjQxQzguMDY0MiAyNi40ODQ4IDcuOTM5ODkgMjYuODY3NSA4LjAyNzc3IDI3LjIzMThDOC4xMTU2NCAyNy41OTYxIDguNDAwODYg''@;'; put 'put ''MjcuODgwNiA4Ljc2NjE2IDI3Ljk2ODJDOS4xMzE0NiAyOC4wNTU5IDkuNTE1MTkgMjcuOTMxOSA5Ljc1OTU4IDI3LjY0NzNMMTguMDU5NiAxOS4zNzk1TDI2LjM0OTYgMjcuNjQ3M0MyNi43NDYzIDI3Ljk4NjEgMjcuMzM3OCAyNy45NjM0IDI3LjcwNzEgMjcuNTk1QzI4LjA3NjUgMjcuMjI2''@;'; put 'put ''NiAyOC4wOTk0IDI2LjYzNjcgMjcuNzU5NiAyNi4yNDFMMTkuNDY5NiAxNy45NzMyWiIvPid9XSxiMGU9WyJhbmdsZS1kb3VibGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjguMzQ5MSAxNy44OTk2QzI4LjUzODQgMTguMDgzNyAyOC43OTQ1IDE4LjE4NjMgMjkuMDYxIDE4LjE4NDhDMjkuNDY0''@;'; put 'put ''IDE4LjE4MzEgMjkuODI2OCAxNy45NDUxIDI5Ljk4MjEgMTcuNTgwNUMzMC4xMzc0IDE3LjIxNTggMzAuMDU1IDE2Ljc5NTUgMjkuNzcyOSAxNi41MTMzTDE4LjAzMTggNUw2LjMwMDY3IDE2LjUxMzNDNS45NTk5OSAxNi45MDM0IDUuOTgyODkgMTcuNDg0OSA2LjM1MzI1IDE3Ljg0ODFDNi43''@;'; put 'put ''MjM2IDE4LjIxMTIgNy4zMTY2IDE4LjIzMzcgNy43MTQ0MiAxNy44OTk2TDE4LjAzMTggNy43ODI0NkwyOC4zNDkxIDE3Ljg5OTZaIi8+PHBhdGggZD0iTTI4LjM0OTEgMjguNzE0OUMyOC41Mzg0IDI4Ljg5ODkgMjguNzk0NSAyOS4wMDE1IDI5LjA2MSAyOUMyOS40NjQgMjguOTk4NCAyOS44''@;'; put 'put ''MjY4IDI4Ljc2MDMgMjkuOTgyMSAyOC4zOTU3QzMwLjEzNzQgMjguMDMxMSAzMC4wNTUgMjcuNjEwNyAyOS43NzI5IDI3LjMyODVMMTguMDMxOCAxNS44MTUyTDYuMzAwNjcgMjcuMzI4NUM1Ljk1OTk5IDI3LjcxODYgNS45ODI4OSAyOC4zMDAxIDYuMzUzMjUgMjguNjYzM0M2LjcyMzYgMjku''@;'; put 'put ''MDI2NSA3LjMxNjYgMjkuMDQ4OSA3LjcxNDQyIDI4LjcxNDlMMTguMDMxOCAxOC41OTc3TDI4LjM0OTEgMjguNzE0OVoiLz4nfV0sZE9lPVsiZXZlbnQiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTYuMTcgMjUuODZMMTAuODEgMjAuNUMxMC42NDYyIDIwLjMwODcgMTAuNTYwNiAyMC4wNjI2IDEw''@;'; put 'put ''LjU3MDMgMTkuODEwOUMxMC41OCAxOS41NTkzIDEwLjY4NDQgMTkuMzIwNSAxMC44NjI0IDE5LjE0MjRDMTEuMDQwNSAxOC45NjQzIDExLjI3OTMgMTguODYgMTEuNTMxIDE4Ljg1MDNDMTEuNzgyNiAxOC44NDA2IDEyLjAyODcgMTguOTI2MiAxMi4yMiAxOS4wOUwxNi4xNyAyM0wyNC44MSAx''@;'; put 'put ''NC4zNkMyNS4wMDEzIDE0LjE5NjIgMjUuMjQ3NCAxNC4xMTA2IDI1LjQ5OTEgMTQuMTIwM0MyNS43NTA3IDE0LjEzIDI1Ljk4OTUgMTQuMjM0MyAyNi4xNjc2IDE0LjQxMjRDMjYuMzQ1NyAxNC41OTA1IDI2LjQ1IDE0LjgyOTMgMjYuNDU5NyAxNS4wODA5QzI2LjQ2OTQgMTUuMzMyNiAyNi4z''@;'; put 'put ''ODM4IDE1LjU3ODcgMjYuMjIgMTUuNzdMMTYuMTcgMjUuODZaIi8+PHBhdGggZD0iTTMyLjI1IDZIMjlWOEgzMlYzMEg0LjAwMDAxVjhINy4wMDAwMVY2SDMuNzUwMDFDMy41MTYyNSA2LjAwMzkxIDMuMjg1NTUgNi4wNTM4MyAzLjA3MTA4IDYuMTQ2OTFDMi44NTY2MSA2LjIzOTk5IDIuNjYy''@;'; put 'put ''NTggNi4zNzQ0MSAyLjUwMDA3IDYuNTQyNDlDMi4zMzc1NyA2LjcxMDU3IDIuMjA5NzYgNi45MDkwMiAyLjEyMzk2IDcuMTI2NUMyLjAzODE2IDcuMzQzOTggMS45OTYwNCA3LjU3NjI0IDIuMDAwMDEgNy44MVYzMC4xOUMxLjk5NjA0IDMwLjQyMzggMi4wMzgxNiAzMC42NTYgMi4xMjM5NiAz''@;'; put 'put ''MC44NzM1QzIuMjA5NzYgMzEuMDkxIDIuMzM3NTcgMzEuMjg5NCAyLjUwMDA3IDMxLjQ1NzVDMi42NjI1OCAzMS42MjU2IDIuODU2NjEgMzEuNzYgMy4wNzEwOCAzMS44NTMxQzMuMjg1NTUgMzEuOTQ2MiAzLjUxNjI1IDMxLjk5NjEgMy43NTAwMSAzMkgzMi4yNUMzMi40ODM4IDMxLjk5NjEg''@;'; put 'put ''MzIuNzE0NSAzMS45NDYyIDMyLjkyODkgMzEuODUzMUMzMy4xNDM0IDMxLjc2IDMzLjMzNzQgMzEuNjI1NiAzMy41IDMxLjQ1NzVDMzMuNjYyNSAzMS4yODk0IDMzLjc5MDMgMzEuMDkxIDMzLjg3NjEgMzAuODczNUMzMy45NjE5IDMwLjY1NiAzNC4wMDQgMzAuNDIzOCAzNCAzMC4xOVY3Ljgx''@;'; put 'put ''QzM0LjAwNCA3LjU3NjI0IDMzLjk2MTkgNy4zNDM5OCAzMy44NzYxIDcuMTI2NUMzMy43OTAzIDYuOTA5MDIgMzMuNjYyNSA2LjcxMDU3IDMzLjUgNi41NDI0OUMzMy4zMzc0IDYuMzc0NDEgMzMuMTQzNCA2LjIzOTk5IDMyLjkyODkgNi4xNDY5MUMzMi43MTQ1IDYuMDUzODMgMzIuNDgzOCA2''@;'; put 'put ''LjAwMzkxIDMyLjI1IDZaIi8+PHBhdGggZD0iTTEwIDEwQzEwLjI2NTIgMTAgMTAuNTE5NiA5Ljg5NDY0IDEwLjcwNzEgOS43MDcxMUMxMC44OTQ3IDkuNTE5NTcgMTEgOS4yNjUyMiAxMSA5VjNDMTEgMi43MzQ3OCAxMC44OTQ3IDIuNDgwNDMgMTAuNzA3MSAyLjI5Mjg5QzEwLjUxOTYgMi4x''@;'; put 'put ''MDUzNiAxMC4yNjUyIDIgMTAgMkM5LjczNDggMiA5LjQ4MDQ0IDIuMTA1MzYgOS4yOTI5MSAyLjI5Mjg5QzkuMTA1MzcgMi40ODA0MyA5LjAwMDAxIDIuNzM0NzggOS4wMDAwMSAzVjlDOS4wMDAwMSA5LjI2NTIyIDkuMTA1MzcgOS41MTk1NyA5LjI5MjkxIDkuNzA3MTFDOS40ODA0NCA5Ljg5''@;'; put 'put ''NDY0IDkuNzM0OCAxMCAxMCAxMFoiLz48cGF0aCBkPSJNMjYgMTBDMjYuMjY1MiAxMCAyNi41MTk2IDkuODk0NjQgMjYuNzA3MSA5LjcwNzExQzI2Ljg5NDcgOS41MTk1NyAyNyA5LjI2NTIyIDI3IDlWM0MyNyAyLjczNDc4IDI2Ljg5NDcgMi40ODA0MyAyNi43MDcxIDIuMjkyODlDMjYuNTE5''@;'; put 'put ''NiAyLjEwNTM2IDI2LjI2NTIgMiAyNiAyQzI1LjczNDggMiAyNS40ODA0IDIuMTA1MzYgMjUuMjkyOSAyLjI5Mjg5QzI1LjEwNTQgMi40ODA0MyAyNSAyLjczNDc4IDI1IDNWOUMyNSA5LjI2NTIyIDI1LjEwNTQgOS41MTk1NyAyNS4yOTI5IDkuNzA3MTFDMjUuNDgwNCA5Ljg5NDY0IDI1Ljcz''@;'; put 'put ''NDggMTAgMjYgMTBaIi8+PHBhdGggZD0iTTIzIDZIMTNWOEgyM1Y2WiIvPicsb3V0bGluZUFsZXJ0ZWQ6JzxwYXRoIGQ9Ik0yNi45MDM5IDEuNjQ2MjFMMjEuMjIyMiAxMS4xMTU5QzIwLjk1MjYgMTEuNDk4NCAyMC45MjgxIDExLjk5NDkgMjEuMTU4OCAxMi40MDA1QzIxLjM4OTYgMTIuODA2''@;'; put 'put ''IDIxLjgzNjMgMTMuMDUxOSAyMi4zMTQ4IDEzLjAzNjdIMzMuNjg4MUMzNC4xNjY2IDEzLjA1MTkgMzQuNjEzNCAxMi44MDYgMzQuODQ0MSAxMi40MDA1QzM1LjA3NDggMTEuOTk0OSAzNS4wNTAzIDExLjQ5ODQgMzQuNzgwOCAxMS4xMTU5TDI5LjA5OTEgMS42NDYyMUMyOC44NzExIDEuMjY5''@;'; put 'put ''MTMgMjguNDUzMiAxLjAzNzM1IDI4LjAwMTUgMS4wMzczNUMyNy41NDk3IDEuMDM3MzUgMjcuMTMxOSAxLjI2OTEzIDI2LjkwMzkgMS42NDYyMVoiLz48cGF0aCBkPSJNMzIgMTUuMDM2N0gzMy42NjM3QzMzLjc3NjQgMTUuMDM4OSAzMy44ODg2IDE1LjAzNTQgMzQgMTUuMDI2M1YzMC4xOUMz''@;'; put 'put ''NC4wMDQgMzAuNDIzOCAzMy45NjE5IDMwLjY1NiAzMy44NzYxIDMwLjg3MzVDMzMuNzkwMyAzMS4wOTEgMzMuNjYyNSAzMS4yODk0IDMzLjUgMzEuNDU3NUMzMy4zMzc0IDMxLjYyNTYgMzMuMTQzNCAzMS43NiAzMi45Mjg5IDMxLjg1MzFDMzIuNzE0NSAzMS45NDYyIDMyLjQ4MzggMzEuOTk2''@;'; put 'put ''MSAzMi4yNSAzMkgzLjc1MDAxQzMuNTE2MjUgMzEuOTk2MSAzLjI4NTU1IDMxLjk0NjIgMy4wNzEwOCAzMS44NTMxQzIuODU2NjEgMzEuNzYgMi42NjI1OCAzMS42MjU2IDIuNTAwMDcgMzEuNDU3NUMyLjMzNzU3IDMxLjI4OTQgMi4yMDk3NiAzMS4wOTEgMi4xMjM5NiAzMC44NzM1QzIuMDM4''@;'; put 'put ''MTYgMzAuNjU2IDEuOTk2MDQgMzAuNDIzOCAyLjAwMDAxIDMwLjE5VjcuODFDMS45OTYwNCA3LjU3NjI0IDIuMDM4MTYgNy4zNDM5OCAyLjEyMzk2IDcuMTI2NUMyLjIwOTc2IDYuOTA5MDIgMi4zMzc1NyA2LjcxMDU3IDIuNTAwMDcgNi41NDI0OUMyLjY2MjU4IDYuMzc0NDEgMi44NTY2MSA2''@;'; put 'put ''LjIzOTk5IDMuMDcxMDggNi4xNDY5MUMzLjI4NTU1IDYuMDUzODMgMy41MTYyNSA2LjAwMzkxIDMuNzUwMDEgNkg3LjAwMDAxVjhINC4wMDAwMVYzMEgzMlYxNS4wMzY3WiIvPjxwYXRoIGQ9Ik0yNC4xMzMzIDE1LjAzNjdIMjYuNDU3QzI2LjQ1ODMgMTUuMDUxNCAyNi40NTkyIDE1LjA2NjEg''@;'; put 'put ''MjYuNDU5NyAxNS4wODA5QzI2LjQ2OTQgMTUuMzMyNiAyNi4zODM4IDE1LjU3ODcgMjYuMjIgMTUuNzdMMTYuMTcgMjUuODZMMTAuODEgMjAuNUMxMC42NDYyIDIwLjMwODcgMTAuNTYwNiAyMC4wNjI2IDEwLjU3MDMgMTkuODEwOUMxMC41OCAxOS41NTkzIDEwLjY4NDQgMTkuMzIwNSAxMC44''@;'; put 'put ''NjI0IDE5LjE0MjRDMTEuMDQwNSAxOC45NjQzIDExLjI3OTMgMTguODYgMTEuNTMxIDE4Ljg1MDNDMTEuNzgyNiAxOC44NDA2IDEyLjAyODcgMTguOTI2MiAxMi4yMiAxOS4wOUwxNi4xNyAyM0wyNC4xMzMzIDE1LjAzNjdaIi8+PHBhdGggZD0iTTIxLjk1OTQgNkwyMC43NTk0IDhIMTNWNkgy''@;'; put 'put ''MS45NTk0WiIvPjxwYXRoIGQ9Ik0xMC43MDcxIDkuNzA3MTFDMTAuNTE5NiA5Ljg5NDY0IDEwLjI2NTIgMTAgMTAgMTBDOS43MzQ4IDEwIDkuNDgwNDQgOS44OTQ2NCA5LjI5MjkxIDkuNzA3MTFDOS4xMDUzNyA5LjUxOTU3IDkuMDAwMDEgOS4yNjUyMiA5LjAwMDAxIDlWM0M5LjAwMDAxIDIu''@;'; put 'put ''NzM0NzggOS4xMDUzNyAyLjQ4MDQzIDkuMjkyOTEgMi4yOTI4OUM5LjQ4MDQ0IDIuMTA1MzYgOS43MzQ4IDIgMTAgMkMxMC4yNjUyIDIgMTAuNTE5NiAyLjEwNTM2IDEwLjcwNzEgMi4yOTI4OUMxMC44OTQ3IDIuNDgwNDMgMTEgMi43MzQ3OCAxMSAzVjlDMTEgOS4yNjUyMiAxMC44OTQ3IDku''@;'; put 'put ''NTE5NTcgMTAuNzA3MSA5LjcwNzExWiIvPicsb3V0bGluZUJhZGdlZDonPHBhdGggZD0iTTEwLjgxIDIwLjVMMTYuMTcgMjUuODZMMjYuMjIgMTUuODFDMjYuMzgzOCAxNS42MTg3IDI2LjQ2OTQgMTUuMzcyNiAyNi40NTk3IDE1LjEyMDlDMjYuNDUgMTQuODY5MyAyNi4zNDU3IDE0LjYzMDUg''@;'; put 'put ''MjYuMTY3NiAxNC40NTI0QzI1Ljk4OTUgMTQuMjc0MyAyNS43NTA3IDE0LjE3IDI1LjQ5OTEgMTQuMTYwM0MyNS4yNDc0IDE0LjE1MDYgMjUuMDAxMyAxNC4yMzYyIDI0LjgxIDE0LjRMMTYuMTcgMjNMMTIuMjMgMTkuMDZDMTIuMDM4NyAxOC44OTYyIDExLjc5MjYgMTguODEwNiAxMS41NDEg''@;'; put 'put ''MTguODIwM0MxMS4yODkzIDE4LjgzIDExLjA1MDUgMTguOTM0MyAxMC44NzI0IDE5LjExMjRDMTAuNjk0NCAxOS4yOTA1IDEwLjU5IDE5LjUyOTMgMTAuNTgwMyAxOS43ODA5QzEwLjU3MDYgMjAuMDMyNiAxMC42NTYyIDIwLjI3ODcgMTAuODIgMjAuNDdMMTAuODEgMjAuNVoiLz48cGF0aCBk''@;'; put 'put ''PSJNMTAgMTBDMTAuMjY1MiAxMCAxMC41MTk2IDkuODk0NjQgMTAuNzA3MSA5LjcwNzExQzEwLjg5NDcgOS41MTk1NyAxMSA5LjI2NTIyIDExIDlWM0MxMSAyLjczNDc4IDEwLjg5NDcgMi40ODA0MyAxMC43MDcxIDIuMjkyODlDMTAuNTE5NiAyLjEwNTM2IDEwLjI2NTIgMiAxMCAyQzkuNzM0''@;'; put 'put ''OCAyIDkuNDgwNDQgMi4xMDUzNiA5LjI5MjkxIDIuMjkyODlDOS4xMDUzNyAyLjQ4MDQzIDkuMDAwMDEgMi43MzQ3OCA5LjAwMDAxIDNWOUM5LjAwMDAxIDkuMjY1MjIgOS4xMDUzNyA5LjUxOTU3IDkuMjkyOTEgOS43MDcxMUM5LjQ4MDQ0IDkuODk0NjQgOS43MzQ4IDEwIDEwIDEwWiIvPjxw''@;'; put 'put ''YXRoIGQ9Ik0zMiAxMy4yMlYzMEg0LjAwMDAxVjhINy4wMDAwMVY2SDMuNzUwMDFDMy41MTYyNSA2LjAwMzkxIDMuMjg1NTUgNi4wNTM4MyAzLjA3MTA4IDYuMTQ2OTFDMi44NTY2MSA2LjIzOTk5IDIuNjYyNTggNi4zNzQ0MSAyLjUwMDA3IDYuNTQyNDlDMi4zMzc1NyA2LjcxMDU3IDIuMjA5''@;'; put 'put ''NzYgNi45MDkwMiAyLjEyMzk2IDcuMTI2NUMyLjAzODE2IDcuMzQzOTggMS45OTYwNCA3LjU3NjI0IDIuMDAwMDEgNy44MVYzMC4xOUMxLjk5NjA0IDMwLjQyMzggMi4wMzgxNiAzMC42NTYgMi4xMjM5NiAzMC44NzM1QzIuMjA5NzYgMzEuMDkxIDIuMzM3NTcgMzEuMjg5NCAyLjUwMDA3IDMx''@;'; put 'put ''LjQ1NzVDMi42NjI1OCAzMS42MjU2IDIuODU2NjEgMzEuNzYgMy4wNzEwOCAzMS44NTMxQzMuMjg1NTUgMzEuOTQ2MiAzLjUxNjI1IDMxLjk5NjEgMy43NTAwMSAzMkgzMi4yNUMzMi40ODM4IDMxLjk5NjEgMzIuNzE0NSAzMS45NDYyIDMyLjkyODkgMzEuODUzMUMzMy4xNDM0IDMxLjc2IDMz''@;'; put 'put ''LjMzNzQgMzEuNjI1NiAzMy41IDMxLjQ1NzVDMzMuNjYyNSAzMS4yODk0IDMzLjc5MDMgMzEuMDkxIDMzLjg3NjEgMzAuODczNUMzMy45NjE5IDMwLjY1NiAzNC4wMDQgMzAuNDIzOCAzNCAzMC4xOVYxMi4zNEMzMy4zODAyIDEyLjczIDMyLjcwNjMgMTMuMDI2NiAzMiAxMy4yMloiLz48cGF0''@;'; put 'put ''aCBkPSJNMjIuNSA2SDEzVjhIMjIuNzhDMjIuNTk2OCA3LjM0OTAzIDIyLjUwMjYgNi42NzYyNSAyMi41IDZaIi8+PHBhdGggZD0iTTMwIDExQzMyLjc2MTQgMTEgMzUgOC43NjE0MiAzNSA2QzM1IDMuMjM4NTggMzIuNzYxNCAxIDMwIDFDMjcuMjM4NiAxIDI1IDMuMjM4NTggMjUgNkMyNSA4''@;'; put 'put ''Ljc2MTQyIDI3LjIzODYgMTEgMzAgMTFaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTEwIDEwQzEwLjI2NTIgMTAgMTAuNTE5NiA5Ljg5NDY0IDEwLjcwNzEgOS43MDcxMUMxMC44OTQ3IDkuNTE5NTcgMTEgOS4yNjUyMiAxMSA5VjNDMTEgMi43MzQ3OCAxMC44OTQ3IDIuNDgwNDMgMTAuNzA3MSAy''@;'; put 'put ''LjI5Mjg5QzEwLjUxOTYgMi4xMDUzNiAxMC4yNjUyIDIgMTAgMkM5LjczNDggMiA5LjQ4MDQ0IDIuMTA1MzYgOS4yOTI5MSAyLjI5Mjg5QzkuMTA1MzcgMi40ODA0MyA5LjAwMDAxIDIuNzM0NzggOS4wMDAwMSAzVjlDOS4wMDAwMSA5LjI2NTIyIDkuMTA1MzcgOS41MTk1NyA5LjI5MjkxIDku''@;'; put 'put ''NzA3MTFDOS40ODA0NCA5Ljg5NDY0IDkuNzM0OCAxMCAxMCAxMFoiLz48cGF0aCBkPSJNMjYgMTBDMjYuMjY1MiAxMCAyNi41MTk2IDkuODk0NjQgMjYuNzA3MSA5LjcwNzExQzI2Ljg5NDcgOS41MTk1NyAyNyA5LjI2NTIyIDI3IDlWM0MyNyAyLjczNDc4IDI2Ljg5NDcgMi40ODA0MyAyNi43''@;'; put 'put ''MDcxIDIuMjkyODlDMjYuNTE5NiAyLjEwNTM2IDI2LjI2NTIgMiAyNiAyQzI1LjczNDggMiAyNS40ODA0IDIuMTA1MzYgMjUuMjkyOSAyLjI5Mjg5QzI1LjEwNTQgMi40ODA0MyAyNSAyLjczNDc4IDI1IDNWOUMyNSA5LjI2NTIyIDI1LjEwNTQgOS41MTk1NyAyNS4yOTI5IDkuNzA3MTFDMjUu''@;'; put 'put ''NDgwNCA5Ljg5NDY0IDI1LjczNDggMTAgMjYgMTBaIi8+PHBhdGggZD0iTTMyLjI1IDZIMjguMjVWOUMyOC4yNSA5LjU4MzQ4IDI4LjAxODIgMTAuMTQzMSAyNy42MDU2IDEwLjU1NTZDMjcuMTkzMSAxMC45NjgyIDI2LjYzMzUgMTEuMiAyNi4wNSAxMS4yQzI1LjQ2NjUgMTEuMiAyNC45MDcg''@;'; put 'put ''MTAuOTY4MiAyNC40OTQ0IDEwLjU1NTZDMjQuMDgxOCAxMC4xNDMxIDIzLjg1IDkuNTgzNDggMjMuODUgOVY2SDEyLjJWOUMxMi4yIDkuNTgzNDggMTEuOTY4MiAxMC4xNDMxIDExLjU1NTYgMTAuNTU1NkMxMS4xNDMxIDEwLjk2ODIgMTAuNTgzNSAxMS4yIDEwIDExLjJDOS40MTY1NCAxMS4y''@;'; put 'put ''IDguODU2OTYgMTAuOTY4MiA4LjQ0NDM4IDEwLjU1NTZDOC4wMzE4IDEwLjE0MzEgNy44MDAwMSA5LjU4MzQ4IDcuODAwMDEgOVY2SDMuODAwMDFDMy41NjIwNCA1Ljk5NzI5IDMuMzI1OTMgNi4wNDIzMyAzLjEwNTY3IDYuMTMyNDZDMi44ODU0IDYuMjIyNTkgMi42ODU0NSA2LjM1NTk3IDIu''@;'; put 'put ''NTE3NjMgNi41MjQ3M0MyLjM0OTgxIDYuNjkzNDggMi4yMTc1MyA2Ljg5NDE3IDIuMTI4NjMgNy4xMTQ5M0MyLjAzOTcyIDcuMzM1NjkgMS45OTU5OSA3LjU3MjA0IDIuMDAwMDEgNy44MVYzMC4xOUMxLjk5NjA0IDMwLjQyMzggMi4wMzgxNiAzMC42NTYgMi4xMjM5NiAzMC44NzM1QzIuMjA5''@;'; put 'put ''NzYgMzEuMDkxIDIuMzM3NTcgMzEuMjg5NCAyLjUwMDA3IDMxLjQ1NzVDMi42NjI1OCAzMS42MjU2IDIuODU2NjEgMzEuNzYgMy4wNzEwOCAzMS44NTMxQzMuMjg1NTUgMzEuOTQ2MiAzLjUxNjI1IDMxLjk5NjEgMy43NTAwMSAzMkgzMi4yNUMzMi40ODM4IDMxLjk5NjEgMzIuNzE0NSAzMS45''@;'; put 'put ''NDYyIDMyLjkyODkgMzEuODUzMUMzMy4xNDM0IDMxLjc2IDMzLjMzNzQgMzEuNjI1NiAzMy41IDMxLjQ1NzVDMzMuNjYyNSAzMS4yODk0IDMzLjc5MDMgMzEuMDkxIDMzLjg3NjEgMzAuODczNUMzMy45NjE5IDMwLjY1NiAzNC4wMDQgMzAuNDIzOCAzNCAzMC4xOVY3LjgxQzM0LjAwNCA3LjU3''@;'; put 'put ''NjI0IDMzLjk2MTkgNy4zNDM5OCAzMy44NzYxIDcuMTI2NUMzMy43OTAzIDYuOTA5MDIgMzMuNjYyNSA2LjcxMDU3IDMzLjUgNi41NDI0OUMzMy4zMzc0IDYuMzc0NDEgMzMuMTQzNCA2LjIzOTk5IDMyLjkyODkgNi4xNDY5MUMzMi43MTQ1IDYuMDUzODMgMzIuNDgzOCA2LjAwMzkxIDMyLjI1''@;'; put 'put ''IDZaTTI1Ljk0IDE2LjU4TDE2LjI3IDI2LjI1TDExIDIwLjk0QzEwLjc2NjUgMjAuNjgzMiAxMC42NDAxIDIwLjM0NjkgMTAuNjQ2NSAxOS45OTk5QzEwLjY1MjkgMTkuNjUyOSAxMC43OTE4IDE5LjMyMTUgMTEuMDM0NiAxOS4wNzM1QzExLjI3NzUgMTguODI1NSAxMS42MDU5IDE4LjY3OTgg''@;'; put 'put ''MTEuOTUyNyAxOC42NjYxQzEyLjI5OTUgMTguNjUyNSAxMi42Mzg0IDE4Ljc3MTkgMTIuOSAxOUwxNi4yOCAyMi4zOEwyNCAxNC42NkMyNC4xMjY3IDE0LjUzMzMgMjQuMjc3MiAxNC40MzI3IDI0LjQ0MjggMTQuMzY0MkMyNC42MDgzIDE0LjI5NTYgMjQuNzg1OCAxNC4yNjAzIDI0Ljk2NSAx''@;'; put 'put ''NC4yNjAzQzI1LjE0NDIgMTQuMjYwMyAyNS4zMjE3IDE0LjI5NTYgMjUuNDg3MyAxNC4zNjQyQzI1LjY1MjggMTQuNDMyNyAyNS44MDMzIDE0LjUzMzMgMjUuOTMgMTQuNjZDMjYuMDU2NyAxNC43ODY3IDI2LjE1NzMgMTQuOTM3MiAyNi4yMjU4IDE1LjEwMjdDMjYuMjk0NCAxNS4yNjgzIDI2''@;'; put 'put ''LjMyOTcgMTUuNDQ1OCAyNi4zMjk3IDE1LjYyNUMyNi4zMjk3IDE1LjgwNDIgMjYuMjk0NCAxNS45ODE3IDI2LjIyNTggMTYuMTQ3M0MyNi4xNTczIDE2LjMxMjggMjYuMDU2NyAxNi40NjMzIDI1LjkzIDE2LjU5TDI1Ljk0IDE2LjU4WiIvPicsc29saWRBbGVydGVkOic8cGF0aCBkPSJNMjYu''@;'; put 'put ''OTAzOSAxLjY0NjIxTDIxLjIyMjIgMTEuMTE1OUMyMC45NTI2IDExLjQ5ODQgMjAuOTI4MSAxMS45OTQ5IDIxLjE1ODggMTIuNDAwNUMyMS4zODk2IDEyLjgwNiAyMS44MzYzIDEzLjA1MTkgMjIuMzE0OCAxMy4wMzY3SDMzLjY4ODFDMzQuMTY2NiAxMy4wNTE5IDM0LjYxMzQgMTIuODA2IDM0''@;'; put 'put ''Ljg0NDEgMTIuNDAwNUMzNS4wNzQ4IDExLjk5NDkgMzUuMDUwMyAxMS40OTg0IDM0Ljc4MDggMTEuMTE1OUwyOS4wOTkxIDEuNjQ2MjFDMjguODcxMSAxLjI2OTEzIDI4LjQ1MzIgMS4wMzczNSAyOC4wMDE1IDEuMDM3MzVDMjcuNTQ5NyAxLjAzNzM1IDI3LjEzMTkgMS4yNjkxMyAyNi45MDM5''@;'; put 'put ''IDEuNjQ2MjFaIi8+PHBhdGggZD0iTTIxLjk1OTQgNkgxMi4yVjlDMTIuMiA5LjU4MzQ4IDExLjk2ODIgMTAuMTQzMSAxMS41NTU2IDEwLjU1NTZDMTEuMTQzMSAxMC45NjgyIDEwLjU4MzUgMTEuMiAxMCAxMS4yQzkuNDE2NTQgMTEuMiA4Ljg1Njk2IDEwLjk2ODIgOC40NDQzOCAxMC41NTU2''@;'; put 'put ''QzguMDMxOCAxMC4xNDMxIDcuODAwMDEgOS41ODM0OCA3LjgwMDAxIDlWNkgzLjgwMDAxQzMuNTYyMDQgNS45OTcyOSAzLjMyNTkzIDYuMDQyMzMgMy4xMDU2NyA2LjEzMjQ2QzIuODg1NCA2LjIyMjU5IDIuNjg1NDUgNi4zNTU5NyAyLjUxNzYzIDYuNTI0NzNDMi4zNDk4MSA2LjY5MzQ4IDIu''@;'; put 'put ''MjE3NTMgNi44OTQxNyAyLjEyODYzIDcuMTE0OTNDMi4wMzk3MiA3LjMzNTY5IDEuOTk1OTkgNy41NzIwNCAyLjAwMDAxIDcuODFWMzAuMTlDMS45OTYwNCAzMC40MjM4IDIuMDM4MTYgMzAuNjU2IDIuMTIzOTYgMzAuODczNUMyLjIwOTc2IDMxLjA5MSAyLjMzNzU3IDMxLjI4OTQgMi41MDAw''@;'; put 'put ''NyAzMS40NTc1QzIuNjYyNTggMzEuNjI1NiAyLjg1NjYxIDMxLjc2IDMuMDcxMDggMzEuODUzMUMzLjI4NTU1IDMxLjk0NjIgMy41MTYyNSAzMS45OTYxIDMuNzUwMDEgMzJIMzIuMjVDMzIuNDgzOCAzMS45OTYxIDMyLjcxNDUgMzEuOTQ2MiAzMi45Mjg5IDMxLjg1MzFDMzMuMTQzNCAzMS43''@;'; put 'put ''NiAzMy4zMzc0IDMxLjYyNTYgMzMuNSAzMS40NTc1QzMzLjY2MjUgMzEuMjg5NCAzMy43OTAzIDMxLjA5MSAzMy44NzYxIDMwLjg3MzVDMzMuOTYxOSAzMC42NTYgMzQuMDA0IDMwLjQyMzggMzQgMzAuMTlWMTUuMDI2M0MzMy44ODg2IDE1LjAzNTQgMzMuNzc2NCAxNS4wMzg5IDMzLjY2Mzcg''@;'; put 'put ''MTUuMDM2N0gyNi4xOTY0QzI2LjIwNjggMTUuMDU4NCAyNi4yMTY2IDE1LjA4MDQgMjYuMjI1OCAxNS4xMDI3QzI2LjI5NDQgMTUuMjY4MyAyNi4zMjk3IDE1LjQ0NTggMjYuMzI5NyAxNS42MjVDMjYuMzI5NyAxNS44MDQyIDI2LjI5NDQgMTUuOTgxNyAyNi4yMjU4IDE2LjE0NzNDMjYuMTU3''@;'; put 'put ''MyAxNi4zMTI4IDI2LjA1NjcgMTYuNDYzMyAyNS45MyAxNi41OUwxNi4yNyAyNi4yNUwxMSAyMC45NEMxMC43NjY1IDIwLjY4MzIgMTAuNjQwMSAyMC4zNDY5IDEwLjY0NjUgMTkuOTk5OUMxMC42NTI5IDE5LjY1MjkgMTAuNzkxOCAxOS4zMjE1IDExLjAzNDYgMTkuMDczNUMxMS4yNzc1IDE4''@;'; put 'put ''LjgyNTUgMTEuNjA1OSAxOC42Nzk4IDExLjk1MjcgMTguNjY2MUMxMi4yOTk1IDE4LjY1MjUgMTIuNjM4NCAxOC43NzE5IDEyLjkgMTlMMTYuMjggMjIuMzhMMjMuNjIzMyAxNS4wMzY3SDIyLjMzOTVDMjEuMTU3NyAxNS4wNjA0IDIwLjAyMzMgMTQuNDQ4OSAxOS40MjA2IDEzLjM4OTNDMTgu''@;'; put 'put ''ODIwNCAxMi4zMzQyIDE4Ljg3MDMgMTEuMDQyMyAxOS41MzYyIDEwLjAzODdMMjEuOTU5NCA2WiIvPjxwYXRoIGQ9Ik0xMCAxMEMxMC4yNjUyIDEwIDEwLjUxOTYgOS44OTQ2NCAxMC43MDcxIDkuNzA3MTFDMTAuODk0NyA5LjUxOTU3IDExIDkuMjY1MjIgMTEgOVYzQzExIDIuNzM0NzggMTAu''@;'; put 'put ''ODk0NyAyLjQ4MDQzIDEwLjcwNzEgMi4yOTI4OUMxMC41MTk2IDIuMTA1MzYgMTAuMjY1MiAyIDEwIDJDOS43MzQ4IDIgOS40ODA0NCAyLjEwNTM2IDkuMjkyOTEgMi4yOTI4OUM5LjEwNTM3IDIuNDgwNDMgOS4wMDAwMSAyLjczNDc4IDkuMDAwMDEgM1Y5QzkuMDAwMDEgOS4yNjUyMiA5LjEw''@;'; put 'put ''NTM3IDkuNTE5NTcgOS4yOTI5MSA5LjcwNzExQzkuNDgwNDQgOS44OTQ2NCA5LjczNDggMTAgMTAgMTBaIi8+Jyxzb2xpZEJhZGdlZDonPHBhdGggZD0iTTEwIDEwQzEwLjI2NTIgMTAgMTAuNTE5NiA5Ljg5NDY0IDEwLjcwNzEgOS43MDcxMUMxMC44OTQ3IDkuNTE5NTcgMTEgOS4yNjUyMiAx''@;'; put 'put ''MSA5VjNDMTEgMi43MzQ3OCAxMC44OTQ3IDIuNDgwNDMgMTAuNzA3MSAyLjI5Mjg5QzEwLjUxOTYgMi4xMDUzNiAxMC4yNjUyIDIgMTAgMkM5LjczNDggMiA5LjQ4MDQ0IDIuMTA1MzYgOS4yOTI5MSAyLjI5Mjg5QzkuMTA1MzcgMi40ODA0MyA5LjAwMDAxIDIuNzM0NzggOS4wMDAwMSAzVjlD''@;'; put 'put ''OS4wMDAwMSA5LjI2NTIyIDkuMTA1MzcgOS41MTk1NyA5LjI5MjkxIDkuNzA3MTFDOS40ODA0NCA5Ljg5NDY0IDkuNzM0OCAxMCAxMCAxMFoiLz48cGF0aCBkPSJNMzAgMTMuNUMyOC4wMTA5IDEzLjUgMjYuMTAzMiAxMi43MDk4IDI0LjY5NjcgMTEuMzAzM0MyMy4yOTAyIDkuODk2NzggMjIu''@;'; put 'put ''NSA3Ljk4OTEyIDIyLjUgNkgxMi4yVjlDMTIuMiA5LjU4MzQ4IDExLjk2ODIgMTAuMTQzMSAxMS41NTU2IDEwLjU1NTZDMTEuMTQzMSAxMC45NjgyIDEwLjU4MzUgMTEuMiAxMCAxMS4yQzkuNDE2NTQgMTEuMiA4Ljg1Njk2IDEwLjk2ODIgOC40NDQzOCAxMC41NTU2QzguMDMxOCAxMC4xNDMx''@;'; put 'put ''IDcuODAwMDEgOS41ODM0OCA3LjgwMDAxIDlWNkgzLjgwMDAxQzMuNTYyMDQgNS45OTcyOSAzLjMyNTkzIDYuMDQyMzMgMy4xMDU2NyA2LjEzMjQ2QzIuODg1NCA2LjIyMjU5IDIuNjg1NDUgNi4zNTU5NyAyLjUxNzYzIDYuNTI0NzNDMi4zNDk4MSA2LjY5MzQ4IDIuMjE3NTMgNi44OTQxNyAy''@;'; put 'put ''LjEyODYzIDcuMTE0OTNDMi4wMzk3MiA3LjMzNTY5IDEuOTk1OTkgNy41NzIwNCAyLjAwMDAxIDcuODFWMzAuMTlDMS45OTYwNCAzMC40MjM4IDIuMDM4MTYgMzAuNjU2IDIuMTIzOTYgMzAuODczNUMyLjIwOTc2IDMxLjA5MSAyLjMzNzU3IDMxLjI4OTQgMi41MDAwNyAzMS40NTc1QzIuNjYy''@;'; put 'put ''NTggMzEuNjI1NiAyLjg1NjYxIDMxLjc2IDMuMDcxMDggMzEuODUzMUMzLjI4NTU1IDMxLjk0NjIgMy41MTYyNSAzMS45OTYxIDMuNzUwMDEgMzJIMzIuMjVDMzIuNDgzOCAzMS45OTYxIDMyLjcxNDUgMzEuOTQ2MiAzMi45Mjg5IDMxLjg1MzFDMzMuMTQzNCAzMS43NiAzMy4zMzc0IDMxLjYy''@;'; put 'put ''NTYgMzMuNSAzMS40NTc1QzMzLjY2MjUgMzEuMjg5NCAzMy43OTAzIDMxLjA5MSAzMy44NzYxIDMwLjg3MzVDMzMuOTYxOSAzMC42NTYgMzQuMDA0IDMwLjQyMzggMzQgMzAuMTlWMTIuMzRDMzIuODA0MSAxMy4wOTkxIDMxLjQxNjUgMTMuNTAxNSAzMCAxMy41Wk0yNS45NCAxNi41OEwxNi4y''@;'; put 'put ''NyAyNi4yNUwxMSAyMC45NEMxMC43NjY1IDIwLjY4MzIgMTAuNjQwMSAyMC4zNDY5IDEwLjY0NjUgMTkuOTk5OUMxMC42NTI5IDE5LjY1MjkgMTAuNzkxOCAxOS4zMjE1IDExLjAzNDYgMTkuMDczNUMxMS4yNzc1IDE4LjgyNTUgMTEuNjA1OSAxOC42Nzk4IDExLjk1MjcgMTguNjY2MUMxMi4y''@;'; put 'put ''OTk1IDE4LjY1MjUgMTIuNjM4NCAxOC43NzE5IDEyLjkgMTlMMTYuMjggMjIuMzhMMjQgMTQuNjZDMjQuMTI2NyAxNC41MzMzIDI0LjI3NzIgMTQuNDMyNyAyNC40NDI4IDE0LjM2NDJDMjQuNjA4MyAxNC4yOTU2IDI0Ljc4NTggMTQuMjYwMyAyNC45NjUgMTQuMjYwM0MyNS4xNDQyIDE0LjI2''@;'; put 'put ''MDMgMjUuMzIxNyAxNC4yOTU2IDI1LjQ4NzMgMTQuMzY0MkMyNS42NTI4IDE0LjQzMjcgMjUuODAzMyAxNC41MzMzIDI1LjkzIDE0LjY2QzI2LjA1NjcgMTQuNzg2NyAyNi4xNTczIDE0LjkzNzIgMjYuMjI1OCAxNS4xMDI3QzI2LjI5NDQgMTUuMjY4MyAyNi4zMjk3IDE1LjQ0NTggMjYuMzI5''@;'; put 'put ''NyAxNS42MjVDMjYuMzI5NyAxNS44MDQyIDI2LjI5NDQgMTUuOTgxNyAyNi4yMjU4IDE2LjE0NzNDMjYuMTU3MyAxNi4zMTI4IDI2LjA1NjcgMTYuNDYzMyAyNS45MyAxNi41OUwyNS45NCAxNi41OFoiLz48cGF0aCBkPSJNMzAgMTFDMzIuNzYxNCAxMSAzNSA4Ljc2MTQyIDM1IDZDMzUgMy4y''@;'; put 'put ''Mzg1OCAzMi43NjE0IDEgMzAgMUMyNy4yMzg2IDEgMjUgMy4yMzg1OCAyNSA2QzI1IDguNzYxNDIgMjcuMjM4NiAxMSAzMCAxMVoiLz4nfV0saE9lPVsiY2FsZW5kYXIiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjIgMjBIMjBWMjJIMjJWMjBaTTIwIDI2SDIyVjI0SDIwVjI2Wk0yOCAyNEgyNlYy''@;'; put 'put ''NkgyOFYyNFpNMjggMjBIMjZWMjJIMjhWMjBaTTI3IDEyQzI3LjU1IDEyIDI4IDExLjU1IDI4IDExVjVDMjggNC40NSAyNy41NSA0IDI3IDRDMjYuNDUgNCAyNiA0LjQ1IDI2IDVWMTFDMjYgMTEuNTUgMjYuNDUgMTIgMjcgMTJaTTIyIDE2SDIwVjE4SDIyVjE2Wk0yOCAxNkgyNlYxOEgyOFYx''@;'; put 'put ''NlpNMjQgOEgxMlYxMEgyNFY4Wk0xMCAxNkg4VjE4SDEwVjE2Wk0xMCAyMEg4VjIySDEwVjIwWk0xMCAyNEg4VjI2SDEwVjI0Wk0zMy41IDguNTRDMzMuMTcgOC4yIDMyLjcyIDguMDEgMzIuMjUgOEgzMFYxMEgzMlYzMEg0VjEwSDZWOEgzLjc1QzMuMjggOCAyLjgzIDguMiAyLjUgOC41NEMy''@;'; put 'put ''LjE3IDguODggMiA5LjM0IDIgOS44MVYzMC4xOUMyIDMwLjY2IDIuMTcgMzEuMTIgMi41IDMxLjQ2QzIuODMgMzEuOCAzLjI4IDMxLjk5IDMuNzUgMzJIMzIuMjVDMzIuNzIgMzIgMzMuMTcgMzEuOCAzMy41IDMxLjQ2QzMzLjgzIDMxLjEyIDM0LjAxIDMwLjY2IDM0IDMwLjE5VjkuODFDMzQg''@;'; put 'put ''OS4zNCAzMy44MyA4Ljg4IDMzLjUgOC41NFpNMTQgMjZIMTZWMjRIMTRWMjZaTTE2IDIwSDE0VjIySDE2VjIwWk0xNiAxNkgxNFYxOEgxNlYxNlpNOSAxMkM5LjU1IDEyIDEwIDExLjU1IDEwIDExVjVDMTAgNC40NSA5LjU1IDQgOSA0QzguNDUgNCA4IDQuNDUgOCA1VjExQzggMTEuNTUgOC40''@;'; put 'put ''NSAxMiA5IDEyWiIvPicsb3V0bGluZUFsZXJ0ZWQ6JzxwYXRoIGQ9Ik0yNi45MDM5IDEuNjQ2MjFMMjEuMjIyMiAxMS4xMTU5QzIwLjk1MjYgMTEuNDk4NCAyMC45MjgxIDExLjk5NDkgMjEuMTU4OCAxMi40MDA1QzIxLjM4OTYgMTIuODA2IDIxLjgzNjMgMTMuMDUxOSAyMi4zMTQ4IDEzLjAz''@;'; put 'put ''NjdIMzMuNjg4MUMzNC4xNjY2IDEzLjA1MTkgMzQuNjEzNCAxMi44MDYgMzQuODQ0MSAxMi40MDA1QzM1LjA3NDggMTEuOTk0OSAzNS4wNTAzIDExLjQ5ODQgMzQuNzgwOCAxMS4xMTU5TDI5LjA5OTEgMS42NDYyMUMyOC44NzExIDEuMjY5MTMgMjguNDUzMiAxLjAzNzM1IDI4LjAwMTUgMS4w''@;'; put 'put ''MzczNUMyNy41NDk3IDEuMDM3MzUgMjcuMTMxOSAxLjI2OTEzIDI2LjkwMzkgMS42NDYyMVoiLz48cGF0aCBkPSJNMzIgMTUuMDM2N0gzMy42NjM3QzMzLjc3NjMgMTUuMDM4OSAzMy44ODg2IDE1LjAzNTQgMzQgMTUuMDI2M1YzMC4xOUMzNC4wMSAzMC42NiAzMy44MyAzMS4xMiAzMy41IDMx''@;'; put 'put ''LjQ2QzMzLjE3IDMxLjggMzIuNzIgMzIgMzIuMjUgMzJIMy43NUMzLjI4IDMxLjk5IDIuODMgMzEuOCAyLjUgMzEuNDZDMi4xNyAzMS4xMiAyIDMwLjY2IDIgMzAuMTlWOS44MUMyIDkuMzQgMi4xNyA4Ljg4IDIuNSA4LjU0QzIuODMgOC4yIDMuMjggOCAzLjc1IDhINlYxMEg0VjMwSDMyVjE1''@;'; put 'put ''LjAzNjdaIi8+PHBhdGggZD0iTTIwLjc1OTQgOEwxOS41NTk0IDEwSDEyVjhIMjAuNzU5NFoiLz48cGF0aCBkPSJNMjAgMjBIMjJWMjJIMjBWMjBaIi8+PHBhdGggZD0iTTIyIDI2SDIwVjI0SDIyVjI2WiIvPjxwYXRoIGQ9Ik0yNiAyNlYyNEgyOFYyNkgyNloiLz48cGF0aCBkPSJNMjYgMjJW''@;'; put 'put ''MjBIMjhWMjJIMjZaIi8+PHBhdGggZD0iTTIwIDE2SDIyVjE4SDIwVjE2WiIvPjxwYXRoIGQ9Ik0yNiAxOFYxNkgyOFYxOEgyNloiLz48cGF0aCBkPSJNOCAxNkgxMFYxOEg4VjE2WiIvPjxwYXRoIGQ9Ik04IDIwSDEwVjIySDhWMjBaIi8+PHBhdGggZD0iTTggMjRIMTBWMjZIOFYyNFoiLz48''@;'; put 'put ''cGF0aCBkPSJNMTYgMjZIMTRWMjRIMTZWMjZaIi8+PHBhdGggZD0iTTE0IDIwSDE2VjIySDE0VjIwWiIvPjxwYXRoIGQ9Ik0xNCAxNkgxNlYxOEgxNFYxNloiLz48cGF0aCBkPSJNMTAgMTFDMTAgMTEuNTUgOS41NSAxMiA5IDEyQzguNDUgMTIgOCAxMS41NSA4IDExVjVDOCA0LjQ1IDguNDUg''@;'; put 'put ''NCA5IDRDOS41NSA0IDEwIDQuNDUgMTAgNVYxMVoiLz4nLG91dGxpbmVCYWRnZWQ6JzxwYXRoIGQ9Ik0zMCAxMUMzMi43NjE0IDExIDM1IDguNzYxNDIgMzUgNkMzNSAzLjIzODU4IDMyLjc2MTQgMSAzMCAxQzI3LjIzODYgMSAyNSAzLjIzODU4IDI1IDZDMjUgOC43NjE0MiAyNy4yMzg2IDEx''@;'; put 'put ''IDMwIDExWiIvPjxwYXRoIGQ9Ik0yMy4yODk5IDhDMjMuNDU5NCA4LjU2OTYzIDIzLjY5OTUgOS4xMDg4NyAyNCA5LjYwNzU5VjEwSDEyVjhIMjMuMjg5OVoiLz48cGF0aCBkPSJNMzQgMTEuNzQ1M0MzMy4zOTYgMTIuMTY2NiAzMi43MjI0IDEyLjQ5NTEgMzIgMTIuNzEwMVYzMEg0VjEwSDZW''@;'; put 'put ''OEgzLjc1QzMuMjggOCAyLjgzIDguMiAyLjUgOC41NEMyLjE3IDguODggMiA5LjM0IDIgOS44MVYzMC4xOUMyIDMwLjY2IDIuMTcgMzEuMTIgMi41IDMxLjQ2QzIuODMgMzEuOCAzLjI4IDMxLjk5IDMuNzUgMzJIMzIuMjVDMzIuNzIgMzIgMzMuMTcgMzEuOCAzMy41IDMxLjQ2QzMzLjgzIDMx''@;'; put 'put ''LjEyIDM0LjAxIDMwLjY2IDM0IDMwLjE5VjExLjc0NTNaIi8+PHBhdGggZD0iTTIwIDIwSDIyVjIySDIwVjIwWiIvPjxwYXRoIGQ9Ik0yMiAyNkgyMFYyNEgyMlYyNloiLz48cGF0aCBkPSJNMjYgMjZWMjRIMjhWMjZIMjZaIi8+PHBhdGggZD0iTTI2IDIyVjIwSDI4VjIySDI2WiIvPjxwYXRo''@;'; put 'put ''IGQ9Ik0yMCAxNkgyMlYxOEgyMFYxNloiLz48cGF0aCBkPSJNMjYgMThWMTZIMjhWMThIMjZaIi8+PHBhdGggZD0iTTggMTZIMTBWMThIOFYxNloiLz48cGF0aCBkPSJNOCAyMEgxMFYyMkg4VjIwWiIvPjxwYXRoIGQ9Ik04IDI0SDEwVjI2SDhWMjRaIi8+PHBhdGggZD0iTTE2IDI2SDE0VjI0''@;'; put 'put ''SDE2VjI2WiIvPjxwYXRoIGQ9Ik0xNCAyMEgxNlYyMkgxNFYyMFoiLz48cGF0aCBkPSJNMTQgMTZIMTZWMThIMTRWMTZaIi8+PHBhdGggZD0iTTEwIDExQzEwIDExLjU1IDkuNTUgMTIgOSAxMkM4LjQ1IDEyIDggMTEuNTUgOCAxMVY1QzggNC40NSA4LjQ1IDQgOSA0QzkuNTUgNCAxMCA0LjQ1''@;'; put 'put ''IDEwIDVWMTFaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTI3IDEyQzI3LjU1IDEyIDI4IDExLjU1IDI4IDExVjVDMjggNC40NSAyNy41NSA0IDI3IDRDMjYuNDUgNCAyNiA0LjQ1IDI2IDVWMTFDMjYgMTEuNTUgMjYuNDUgMTIgMjcgMTJaTTMzLjUgOC41NEMzMy4xNyA4LjIgMzIuNzIgOC4wMSAz''@;'; put 'put ''Mi4yNSA4SDI5LjJWMTFDMjkuMiAxMi4yMSAyOC4yMSAxMy4yIDI3IDEzLjJDMjUuNzkgMTMuMiAyNC44IDEyLjIxIDI0LjggMTFWOEgxMS4yVjExQzExLjIgMTIuMjEgMTAuMjEgMTMuMiA5IDEzLjJDNy43OSAxMy4yIDYuOCAxMi4yMSA2LjggMTFWOEgzLjc1QzMuMjggOCAyLjgzIDguMiAy''@;'; put 'put ''LjUgOC41NEMyLjE3IDguODggMiA5LjM0IDIgOS44MVYzMC4xOUMyIDMwLjY2IDIuMTcgMzEuMTIgMi41IDMxLjQ2QzIuODMgMzEuOCAzLjI4IDMxLjk5IDMuNzUgMzJIMzIuMjVDMzIuNzIgMzIgMzMuMTcgMzEuOCAzMy41IDMxLjQ2QzMzLjgzIDMxLjEyIDM0LjAxIDMwLjY2IDM0IDMwLjE5''@;'; put 'put ''VjkuODFDMzQgOS4zNCAzMy44MyA4Ljg4IDMzLjUgOC41NFpNMTAuMSAyNi4xSDcuOVYyMy45SDEwLjFWMjYuMVpNMTAuMSAyMi4xSDcuOVYxOS45SDEwLjFWMjIuMVpNMTAuMSAxOC4xSDcuOVYxNS45SDEwLjFWMTguMVpNMTYuMSAyNi4xSDEzLjlWMjMuOUgxNi4xVjI2LjFaTTE2LjEgMjIu''@;'; put 'put ''MUgxMy45VjE5LjlIMTYuMVYyMi4xWk0xNi4xIDE4LjFIMTMuOVYxNS45SDE2LjFWMTguMVpNMjIuMSAyNi4xSDE5LjlWMjMuOUgyMi4xVjI2LjFaTTIyLjEgMjIuMUgxOS45VjE5LjlIMjIuMVYyMi4xWk0yMi4xIDE4LjFIMTkuOVYxNS45SDIyLjFWMTguMVpNMjguMSAyNi4xSDI1LjlWMjMu''@;'; put 'put ''OUgyOC4xVjI2LjFaTTI4LjEgMjIuMUgyNS45VjE5LjlIMjguMVYyMi4xWk0yOC4xIDE4LjFIMjUuOVYxNS45SDI4LjFWMTguMVpNOSAxMkM5LjU1IDEyIDEwIDExLjU1IDEwIDExVjVDMTAgNC40NSA5LjU1IDQgOSA0QzguNDUgNCA4IDQuNDUgOCA1VjExQzggMTEuNTUgOC40NSAxMiA5IDEy''@;'; put 'put ''WiIvPicsc29saWRBbGVydGVkOic8cGF0aCBkPSJNMjYuOTAzOSAxLjY0NjIxTDIxLjIyMjIgMTEuMTE1OUMyMC45NTI2IDExLjQ5ODQgMjAuOTI4MSAxMS45OTQ5IDIxLjE1ODggMTIuNDAwNUMyMS4zODk2IDEyLjgwNiAyMS44MzYzIDEzLjA1MTkgMjIuMzE0OCAxMy4wMzY3SDMzLjY4ODFD''@;'; put 'put ''MzQuMTY2NiAxMy4wNTE5IDM0LjYxMzQgMTIuODA2IDM0Ljg0NDEgMTIuNDAwNUMzNS4wNzQ4IDExLjk5NDkgMzUuMDUwMyAxMS40OTg0IDM0Ljc4MDggMTEuMTE1OUwyOS4wOTkxIDEuNjQ2MjFDMjguODcxMSAxLjI2OTEzIDI4LjQ1MzIgMS4wMzczNSAyOC4wMDE1IDEuMDM3MzVDMjcuNTQ5''@;'; put 'put ''NyAxLjAzNzM1IDI3LjEzMTkgMS4yNjkxMyAyNi45MDM5IDEuNjQ2MjFaIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yMC43NTk0IDhMMTkuNTM2MiAxMC4wMzg3QzE4Ljg3MDMgMTEuMDQyMyAxOC44MjA0IDEyLjMzNDIgMTkuNDIwNiAxMy4z''@;'; put 'put ''ODkzQzIwLjAyMzMgMTQuNDQ4OSAyMS4xNTc3IDE1LjA2MDQgMjIuMzM5NSAxNS4wMzY3SDMzLjY2MzdDMzMuNzc2MyAxNS4wMzg5IDMzLjg4ODYgMTUuMDM1NCAzNCAxNS4wMjYzVjMwLjE5QzM0LjAxIDMwLjY2IDMzLjgzIDMxLjEyIDMzLjUgMzEuNDZDMzMuMTcgMzEuOCAzMi43MiAzMiAz''@;'; put 'put ''Mi4yNSAzMkgzLjc1QzMuMjggMzEuOTkgMi44MyAzMS44IDIuNSAzMS40NkMyLjE3IDMxLjEyIDIgMzAuNjYgMiAzMC4xOVY5LjgxQzIgOS4zNCAyLjE3IDguODggMi41IDguNTRDMi44MyA4LjIgMy4yOCA4IDMuNzUgOEg2LjhWMTFDNi44IDEyLjIxIDcuNzkgMTMuMiA5IDEzLjJDMTAuMjEg''@;'; put 'put ''MTMuMiAxMS4yIDEyLjIxIDExLjIgMTFWOEgyMC43NTk0Wk03LjkgMjMuOVYyNi4xSDEwLjFWMjMuOUg3LjlaTTcuOSAxOS45VjIyLjFIMTAuMVYxOS45SDcuOVpNNy45IDE1LjlWMTguMUgxMC4xVjE1LjlINy45Wk0xMy45IDI2LjFIMTYuMVYyMy45SDEzLjlWMjYuMVpNMTMuOSAyMi4xSDE2''@;'; put 'put ''LjFWMTkuOUgxMy45VjIyLjFaTTEzLjkgMTguMUgxNi4xVjE1LjlIMTMuOVYxOC4xWk0xOS45IDI2LjFIMjIuMVYyMy45SDE5LjlWMjYuMVpNMTkuOSAyMi4xSDIyLjFWMTkuOUgxOS45VjIyLjFaTTE5LjkgMTguMUgyMi4xVjE1LjlIMTkuOVYxOC4xWk0yNS45IDIzLjlWMjYuMUgyOC4xVjIz''@;'; put 'put ''LjlIMjUuOVpNMjUuOSAxOS45VjIyLjFIMjguMVYxOS45SDI1LjlaTTI1LjkgMTUuOVYxOC4xSDI4LjFWMTUuOUgyNS45WiIvPjxwYXRoIGQ9Ik0xMCAxMUMxMCAxMS41NSA5LjU1IDEyIDkgMTJDOC40NSAxMiA4IDExLjU1IDggMTFWNUM4IDQuNDUgOC40NSA0IDkgNEM5LjU1IDQgMTAgNC40''@;'; put 'put ''NSAxMCA1VjExWiIvPicsc29saWRCYWRnZWQ6JzxwYXRoIGQ9Ik0zMCAxMUMzMi43NjE0IDExIDM1IDguNzYxNDIgMzUgNkMzNSAzLjIzODU4IDMyLjc2MTQgMSAzMCAxQzI3LjIzODYgMSAyNSAzLjIzODU4IDI1IDZDMjUgOC43NjE0MiAyNy4yMzg2IDExIDMwIDExWiIvPjxwYXRoIGZpbGwt''@;'; put 'put ''cnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMzQgMTEuNzQ1M0MzMi44NjYyIDEyLjUzNjIgMzEuNDg3MiAxMyAzMCAxM0MyOS40MDYzIDEzIDI4LjgyOTkgMTIuOTI2MSAyOC4yNzk0IDEyLjc4N0MyNy45MTgzIDEzLjA0NjcgMjcuNDc2MiAxMy4yIDI3IDEzLjJDMjUu''@;'; put 'put ''NzkgMTMuMiAyNC44IDEyLjIxIDI0LjggMTFWMTAuNjg2MkMyNC4xMTI2IDkuOTIzOTMgMjMuNTkwNCA5LjAwOTcgMjMuMjg5OSA4SDExLjJWMTFDMTEuMiAxMi4yMSAxMC4yMSAxMy4yIDkgMTMuMkM3Ljc5IDEzLjIgNi44IDEyLjIxIDYuOCAxMVY4SDMuNzVDMy4yOCA4IDIuODMgOC4yIDIu''@;'; put 'put ''NSA4LjU0QzIuMTcgOC44OCAyIDkuMzQgMiA5LjgxVjMwLjE5QzIgMzAuNjYgMi4xNyAzMS4xMiAyLjUgMzEuNDZDMi44MyAzMS44IDMuMjggMzEuOTkgMy43NSAzMkgzMi4yNUMzMi43MiAzMiAzMy4xNyAzMS44IDMzLjUgMzEuNDZDMzMuODMgMzEuMTIgMzQuMDEgMzAuNjYgMzQgMzAuMTlW''@;'; put 'put ''MTEuNzQ1M1pNNy45IDIzLjlWMjYuMUgxMC4xVjIzLjlINy45Wk03LjkgMTkuOVYyMi4xSDEwLjFWMTkuOUg3LjlaTTcuOSAxNS45VjE4LjFIMTAuMVYxNS45SDcuOVpNMTMuOSAyNi4xSDE2LjFWMjMuOUgxMy45VjI2LjFaTTEzLjkgMjIuMUgxNi4xVjE5LjlIMTMuOVYyMi4xWk0xMy45IDE4''@;'; put 'put ''LjFIMTYuMVYxNS45SDEzLjlWMTguMVpNMTkuOSAyNi4xSDIyLjFWMjMuOUgxOS45VjI2LjFaTTE5LjkgMjIuMUgyMi4xVjE5LjlIMTkuOVYyMi4xWk0xOS45IDE4LjFIMjIuMVYxNS45SDE5LjlWMTguMVpNMjUuOSAyMy45VjI2LjFIMjguMVYyMy45SDI1LjlaTTI1LjkgMTkuOVYyMi4xSDI4''@;'; put 'put ''LjFWMTkuOUgyNS45Wk0yNS45IDE1LjlWMTguMUgyOC4xVjE1LjlIMjUuOVoiLz48cGF0aCBkPSJNMTAgMTFDMTAgMTEuNTUgOS41NSAxMiA5IDEyQzguNDUgMTIgOCAxMS41NSA4IDExVjVDOCA0LjQ1IDguNDUgNCA5IDRDOS41NSA0IDEwIDQuNDUgMTAgNVYxMVoiLz4nfV0sZk9lPVsiZm9s''@;'; put 'put ''ZGVyLW9wZW4iLHtvdXRsaW5lOic8cGF0aCBkPSJNMzMuMjYgMTNDMzMuODQgMTIuOTkgMzQuMzggMTMuMjYgMzQuNzEgMTMuNzRDMzUgMTQuMTYgMzUuMDggMTQuNjkgMzQuOTIgMTUuMThMMzAuNzMgMzAuMjhDMzAuNiAzMC43MiAzMC4xOSAzMS4wMiAyOS43MyAzMUg0LjQxQzMuNjYgMzEu''@;'; put 'put ''MDIgMy4wMyAzMC40NCAzIDI5LjY5VjdDMyA1LjkgMy45IDUgNSA1SDExLjQ5QzEyLjEzIDUgMTIuNzMgNS4zIDEzLjExIDUuODJMMTUuNDIgOUgyOS4zOUMzMC40OSA5IDMxLjM5IDkuOSAzMS4zOSAxMUgxNC45MUMxNC41OSAxMSAxNC4yOSAxMC44NSAxNC4xIDEwLjU5TDExLjQ5IDdINVYy''@;'; put 'put ''NUw3LjkyIDE0LjY2QzcuOTIgMTQuNjYgNy45MiAxNC41NyA3LjkyIDE0LjUyQzguMzIgMTMuNjMgOS4xOSAxMy4wNCAxMC4xNyAxM0gzMy4yNlpNNS45IDI5SDI4Ljk0TDMyLjg4IDE0Ljk1SDEwLjE2QzEwLjAxIDE0Ljk4IDkuODcgMTUuMDcgOS43OCAxNS4xOUw1LjkgMjlaIi8+JyxvdXRs''@;'; put 'put ''aW5lQWxlcnRlZDonPHBhdGggZD0iTTI3LjkwNDEgMS42NDYyMUwyMi4yMjI0IDExLjExNTlDMjEuOTUyOSAxMS40OTg0IDIxLjkyODQgMTEuOTk0OSAyMi4xNTkxIDEyLjQwMDVDMjIuMzg5OCAxMi44MDYgMjIuODM2NiAxMy4wNTE5IDIzLjMxNSAxMy4wMzY3SDM0LjY4ODRDMzUuMTY2OSAx''@;'; put 'put ''My4wNTE5IDM1LjYxMzYgMTIuODA2IDM1Ljg0NDMgMTIuNDAwNUMzNi4wNzUgMTEuOTk0OSAzNi4wNTA2IDExLjQ5ODQgMzUuNzgxIDExLjExNTlMMzAuMDk5MyAxLjY0NjIxQzI5Ljg3MTMgMS4yNjkxMyAyOS40NTM1IDEuMDM3MzUgMjkuMDAxNyAxLjAzNzM1QzI4LjU1IDEuMDM3MzUgMjgu''@;'; put 'put ''MTMyMSAxLjI2OTEzIDI3LjkwNDEgMS42NDYyMVoiLz48cGF0aCBkPSJNMjAuMTA1OCAxMUgxNC45MTAyQzE0LjU5MDIgMTEgMTQuMjkwMiAxMC44NSAxNC4xMDAyIDEwLjU5TDExLjQ5MDIgN0g1LjAwMDI0VjI1TDcuOTIwMjQgMTQuNjZWMTQuNTJDOC4zMjAyNCAxMy42MyA5LjE5MDI0IDEz''@;'; put 'put ''LjA0IDEwLjE3MDIgMTNIMjAuMjMyN0MyMC4yODYxIDEzLjEzMjYgMjAuMzQ4OCAxMy4yNjI3IDIwLjQyMDggMTMuMzg5M0MyMC44ODE1IDE0LjE5OTEgMjEuNjUyNyAxNC43NDcyIDIyLjUxODMgMTQuOTVIMTAuMTYwMkMxMC4wMTAyIDE0Ljk4IDkuODcwMjQgMTUuMDcgOS43ODAyNCAxNS4x''@;'; put 'put ''OUw1LjkwMDI0IDI5SDI4Ljk0MDJMMzIuODU1OSAxNS4wMzY3SDM0LjY2MzlDMzQuNzYzNiAxNS4wMzg3IDM0Ljg2MyAxNS4wMzYyIDM0Ljk2MTcgMTUuMDI5MkMzNC45NTAzIDE1LjA3OTggMzQuOTM2NSAxNS4xMzAxIDM0LjkyMDIgMTUuMThMMzAuNzMwMiAzMC4yOEMzMC42MDAyIDMwLjcy''@;'; put 'put ''IDMwLjE5MDIgMzEuMDIgMjkuNzMwMiAzMUg0LjQxMDI0QzMuNjYwMjQgMzEuMDIgMy4wMzAyNCAzMC40NCAzLjAwMDI0IDI5LjY5VjdDMy4wMDAyNCA1LjkgMy45MDAyNCA1IDUuMDAwMjQgNUgxMS40OTAyQzEyLjEzMDIgNSAxMi43MzAyIDUuMyAxMy4xMTAyIDUuODJMMTUuNDIwMiA5SDIx''@;'; put 'put ''LjE1OTdMMjAuNTM2NCAxMC4wMzg3QzIwLjMzNzggMTAuMzM4MSAyMC4xOTM5IDEwLjY2MzIgMjAuMTA1OCAxMVoiLz4nLG91dGxpbmVCYWRnZWQ6JzxwYXRoIGQ9Ik0zMSAxMUMzMy43NjE0IDExIDM2IDguNzYxNDIgMzYgNkMzNiAzLjIzODU4IDMzLjc2MTQgMSAzMSAxQzI4LjIzODYgMSAy''@;'; put 'put ''NiAzLjIzODU4IDI2IDZDMjYgOC43NjE0MiAyOC4yMzg2IDExIDMxIDExWiIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMjYuMTAxIDExSDE0LjkxQzE0LjU5IDExIDE0LjI5IDEwLjg1IDE0LjEgMTAuNTlMMTEuNDkgN0g1VjI1TDcuOTIgMTQu''@;'; put 'put ''NjZWMTQuNTJDOC4zMiAxMy42MyA5LjE5IDEzLjA0IDEwLjE3IDEzSDMzLjI2QzMzLjg0IDEyLjk5IDM0LjM4IDEzLjI2IDM0LjcxIDEzLjc0QzM1IDE0LjE2IDM1LjA4IDE0LjY5IDM0LjkyIDE1LjE4TDMwLjczIDMwLjI4QzMwLjYgMzAuNzIgMzAuMTkgMzEuMDIgMjkuNzMgMzFINC40MUMz''@;'; put 'put ''LjY2IDMxLjAyIDMuMDMgMzAuNDQgMyAyOS42OVY3QzMgNS45IDMuOSA1IDUgNUgxMS40OUMxMi4xMyA1IDEyLjczIDUuMyAxMy4xMSA1LjgyTDE1LjQyIDlIMjQuNjczNkMyNS4wMjk3IDkuNzQ5NiAyNS41MTUxIDEwLjQyNTkgMjYuMTAxIDExWk0yOC45NCAyOUg1LjlMOS43OCAxNS4xOUM5''@;'; put 'put ''Ljg3IDE1LjA3IDEwLjAxIDE0Ljk4IDEwLjE2IDE0Ljk1SDMyLjg4TDI4Ljk0IDI5WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0zNC43MDU4IDEzLjc0QzM0LjM3NDQgMTMuMjY0MyAzMy44MjIzIDEyLjk4NiAzMy4yMzc5IDEzSDEwLjI1ODNDOS4yNjk1MiAxMy4wNDE0IDguMzg4NTggMTMuNjI5''@;'; put 'put ''MyA3Ljk4MDYgMTQuNTJDNy45NzcyOSAxNC41NjY2IDcuOTc3MjkgMTQuNjEzNCA3Ljk4MDYgMTQuNjZMNS4wMjQ2MyAyNVY3LjAwMDAxSDExLjU5NDZMMTQuMjM2NyAxMC41OUMxNC40Mjc5IDEwLjg0ODQgMTQuNzMyNyAxMS4wMDA4IDE1LjA1NjcgMTFIMzEuMzQ0OUMzMS4zNDQ5IDkuODk1''@;'; put 'put ''NDQgMzAuNDM4NCA5LjAwMDAxIDI5LjMyMDMgOS4wMDAwMUgxNS41NzNMMTMuMjM0NSA1LjgyMDAxQzEyLjg1MjIgNS4zMDMxOCAxMi4yNDI2IDQuOTk4MzUgMTEuNTk0NiA1LjAwMDAxSDUuMDI0NjNDMy45MDY0NiA1LjAwMDAxIDMgNS44OTU0NCAzIDcuMDAwMDFWMjkuNjlDMy4wMzI4OSAz''@;'; put 'put ''MC40Mzg5IDMuNjY4OTEgMzEuMDIyNiA0LjQyNzM3IDMxSDI5LjY2NDRDMzAuMTI5MyAzMS4wMTgzIDMwLjU0NjkgMzAuNzIxMyAzMC42NzY4IDMwLjI4TDM0LjkxODQgMTUuMThDMzUuMDc4OCAxNC42OTM1IDM1LjAwMDEgMTQuMTYxIDM0LjcwNTggMTMuNzRaIi8+Jyxzb2xpZEFsZXJ0ZWQ6''@;'; put 'put ''JzxwYXRoIGQ9Ik0yNy45MDQxIDEuNjQ2MjFMMjIuMjIyNCAxMS4xMTU5QzIxLjk1MjkgMTEuNDk4NCAyMS45Mjg0IDExLjk5NDkgMjIuMTU5MSAxMi40MDA1QzIyLjM4OTggMTIuODA2IDIyLjgzNjYgMTMuMDUxOSAyMy4zMTUgMTMuMDM2N0gzNC42ODg0QzM1LjE2NjkgMTMuMDUxOSAzNS42''@;'; put 'put ''MTM2IDEyLjgwNiAzNS44NDQzIDEyLjQwMDVDMzYuMDc1IDExLjk5NDkgMzYuMDUwNiAxMS40OTg0IDM1Ljc4MSAxMS4xMTU5TDMwLjA5OTMgMS42NDYyMUMyOS44NzEzIDEuMjY5MTMgMjkuNDUzNSAxLjAzNzM1IDI5LjAwMTcgMS4wMzczNUMyOC41NSAxLjAzNzM1IDI4LjEzMjEgMS4yNjkx''@;'; put 'put ''MyAyNy45MDQxIDEuNjQ2MjFaIi8+PHBhdGggZD0iTTIwLjIzMjUgMTNDMjAuMjg1OCAxMy4xMzI2IDIwLjM0ODUgMTMuMjYyNyAyMC40MjA2IDEzLjM4OTNDMjEuMDIzMyAxNC40NDg5IDIyLjE1NzcgMTUuMDYwNCAyMy4zMzk1IDE1LjAzNjdIMzQuNjYzN0MzNC43NjI5IDE1LjAzODcgMzQu''@;'; put 'put ''ODYxOCAxNS4wMzYyIDM0Ljk2MDEgMTUuMDI5M0MzNC45NDg3IDE1LjA3OTkgMzQuOTM0OCAxNS4xMzAyIDM0LjkxODQgMTUuMThMMzAuNjc2OCAzMC4yOEMzMC41NDY5IDMwLjcyMTMgMzAuMTI5MyAzMS4wMTgzIDI5LjY2NDQgMzFINC40MjczN0MzLjY2ODkxIDMxLjAyMjYgMy4wMzI4OSAz''@;'; put 'put ''MC40Mzg5IDMgMjkuNjlWNy4wMDAwMUMzIDUuODk1NDQgMy45MDY0NiA1LjAwMDAxIDUuMDI0NjMgNS4wMDAwMUgxMS41OTQ2QzEyLjI0MjYgNC45OTgzNSAxMi44NTIyIDUuMzAzMTggMTMuMjM0NSA1LjgyMDAxTDE1LjU3MyA5LjAwMDAxSDIxLjE1OTRMMjAuNTM2MiAxMC4wMzg3QzIwLjMz''@;'; put 'put ''NzUgMTAuMzM4MSAyMC4xOTM3IDEwLjY2MzIgMjAuMTA1NiAxMUgxNS4wNTY3QzE0LjczMjcgMTEuMDAwOCAxNC40Mjc5IDEwLjg0ODQgMTQuMjM2NyAxMC41OUwxMS41OTQ2IDcuMDAwMDFINS4wMjQ2M1YyNUw3Ljk4MDYgMTQuNjZDNy45NzcyOSAxNC42MTM0IDcuOTc3MjkgMTQuNTY2NiA3''@;'; put 'put ''Ljk4MDYgMTQuNTJDOC4zODg1OCAxMy42MjkzIDkuMjY5NTIgMTMuMDQxNCAxMC4yNTgzIDEzSDIwLjIzMjVaIi8+Jyxzb2xpZEJhZGdlZDonPHBhdGggZD0iTTMxIDExQzMzLjc2MTQgMTEgMzYgOC43NjE0MiAzNiA2QzM2IDMuMjM4NTggMzMuNzYxNCAxIDMxIDFDMjguMjM4NiAxIDI2IDMu''@;'; put 'put ''MjM4NTggMjYgNkMyNiA4Ljc2MTQyIDI4LjIzODYgMTEgMzEgMTFaIi8+PHBhdGggZD0iTTI0LjY3MzYgOS4wMDAwMUMyNS4wMjk3IDkuNzQ5NjEgMjUuNTE1MSAxMC40MjU5IDI2LjEwMSAxMUgxNS4wNTY3QzE0LjczMjcgMTEuMDAwOCAxNC40Mjc5IDEwLjg0ODQgMTQuMjM2NyAxMC41OUwx''@;'; put 'put ''MS41OTQ2IDcuMDAwMDFINS4wMjQ2M1YyNUw3Ljk4MDYgMTQuNjZDNy45NzcyOSAxNC42MTM0IDcuOTc3MjkgMTQuNTY2NiA3Ljk4MDYgMTQuNTJDOC4zODg1OCAxMy42MjkzIDkuMjY5NTIgMTMuMDQxNCAxMC4yNTgzIDEzSDMzLjIzNzlDMzMuODIyMyAxMi45ODYgMzQuMzc0NCAxMy4yNjQz''@;'; put 'put ''IDM0LjcwNTggMTMuNzRDMzUuMDAwMSAxNC4xNjEgMzUuMDc4OCAxNC42OTM1IDM0LjkxODQgMTUuMThMMzAuNjc2OCAzMC4yOEMzMC41NDY5IDMwLjcyMTMgMzAuMTI5MyAzMS4wMTgzIDI5LjY2NDQgMzFINC40MjczN0MzLjY2ODkxIDMxLjAyMjYgMy4wMzI4OSAzMC40Mzg5IDMgMjkuNjlW''@;'; put 'put ''Ny4wMDAwMUMzIDUuODk1NDQgMy45MDY0NiA1LjAwMDAxIDUuMDI0NjMgNS4wMDAwMUgxMS41OTQ2QzEyLjI0MjYgNC45OTgzNSAxMi44NTIyIDUuMzAzMTggMTMuMjM0NSA1LjgyMDAxTDE1LjU3MyA5LjAwMDAxSDI0LjY3MzZaIi8+J31dLHBPZT1bImV5ZS1oaWRlIix7b3V0bGluZTonPHBh''@;'; put 'put ''dGggZD0iTTI0LjU0OTUgMjAuNDMwMUMyNC44Mjk0IDE5LjY3MDEgMjQuOTg5MyAxOC44NjAxIDI0Ljk4OTMgMTguMDAwMUMyNC45ODkzIDE0LjE0MDEgMjEuODUwOCAxMS4wMDAxIDE3Ljk5MjYgMTEuMDAwMUMxNy4xMzMgMTEuMDAwMSAxNi4zMjMzIDExLjE2MDEgMTUuNTYzNyAxMS40NDAx''@;'; put 'put ''TDE3LjIwMjkgMTMuMDgwMUMxNy40NjI4IDEzLjA0MDEgMTcuNzIyNyAxMy4wMDAxIDE3Ljk5MjYgMTMuMDAwMUMyMC43NTEzIDEzLjAwMDEgMjIuOTkwMiAxNS4yNDAxIDIyLjk5MDIgMTguMDAwMUMyMi45OTAyIDE4LjI3MDEgMjIuOTUwMiAxOC41MzAxIDIyLjkxMDMgMTguNzkwMUwyNC41''@;'; put 'put ''NDk1IDIwLjQzMDFaTTE3Ljk5MjYgOS4wMDAwNkMyMy45ODk4IDkuMDAwMDYgMjkuMzk3MiAxMi41MjAxIDMxLjg5NiAxOC4wMDAxQzMwLjg5NjUgMjAuMTkwMSAyOS40MjcyIDIyLjA2MDEgMjcuNjQ4IDIzLjUzMDFMMjkuMDY3NCAyNC45NTAxQzMxLjEyNjQgMjMuMjIwMSAzMi44MDU2IDIw''@;'; put 'put ''Ljk5MDEgMzMuOTE1MSAxOC4zOTAxQzM0LjAyNSAxOC4xNDAxIDM0LjAyNSAxNy44NjAxIDMzLjkxNTEgMTcuNjEwMUMzMS4xODY0IDExLjE2MDEgMjQuOTM5MyA3LjAwMDA2IDE4LjAwMjYgNy4wMDAwNkMxNS45NzM1IDcuMDAwMDYgMTQuMDA0NCA3LjM3MDA2IDEyLjE2NTMgOC4wMzAwNkwx''@;'; put 'put ''My43NDQ2IDkuNjEwMDZDMTUuMTAzOSA5LjIxMDA2IDE2LjUzMzIgOS4wMDAwNiAxOC4wMDI2IDkuMDAwMDZIMTcuOTkyNlpNMy43MDkyNiAyLjI5MDA2QzMuMzE5NDQgMS45MDAwNiAyLjY3OTc0IDEuOTAwMDYgMi4yODk5MiAyLjI5MDA2QzEuOTAwMSAyLjY4MDA2IDEuOTAwMSAzLjMyMDA2''@;'; put 'put ''IDIuMjg5OTIgMy43MTAwNkw4LjQ3NzAyIDkuOTAwMDZDNS43MDgzMiAxMS43NDAxIDMuNDQ5MzggMTQuMzgwMSAyLjA4MDAyIDE3LjYxMDFDMS45NzAwNyAxNy44NjAxIDEuOTcwMDcgMTguMTQwMSAyLjA4MDAyIDE4LjM5MDFDNC44MDg3NCAyNC44NDAxIDExLjA1NTggMjkuMDAwMSAxNy45''@;'; put 'put ''OTI2IDI5LjAwMDFDMjAuNzQxMyAyOS4wMDAxIDIzLjM3IDI4LjM0MDEgMjUuNzE4OSAyNy4xNTAxTDMyLjI3NTkgMzMuNzEwMUMzMi40NzU4IDMzLjkxMDEgMzIuNzI1NyAzNC4wMDAxIDMyLjk4NTUgMzQuMDAwMUMzMy4yNDU0IDM0LjAwMDEgMzMuNDk1MyAzMy45MDAxIDMzLjY5NTIgMzMu''@;'; put 'put ''NzEwMUMzNC4wODUgMzMuMzIwMSAzNC4wODUgMzIuNjkwMSAzMy42OTUyIDMyLjMwMDFMMy43MDkyNiAyLjI5MDA2Wk0xMy44MzQ1IDE1LjI1MDFMMjAuNzQxMyAyMi4xNjAxQzE5Ljk1MTYgMjIuNjgwMSAxOS4wMTIxIDIzLjAwMDEgMTcuOTkyNiAyMy4wMDAxQzE1LjIzMzkgMjMuMDAwMSAx''@;'; put 'put ''Mi45OTQ5IDIwLjc2MDEgMTIuOTk0OSAxOC4wMDAxQzEyLjk5NDkgMTYuOTgwMSAxMy4zMDQ4IDE2LjA0MDEgMTMuODM0NSAxNS4yNTAxWk0xNy45OTI2IDI3LjAwMDFDMTEuOTk1NCAyNy4wMDAxIDYuNTg3OTEgMjMuNDgwMSA0LjA4OTA4IDE4LjAwMDFDNS4zNjg0OCAxNS4xOTAxIDcuNDI3''@;'; put 'put ''NTEgMTIuOTEwMSA5LjkyNjM0IDExLjM0MDFMMTIuNDA1MiAxMy44MjAxQzExLjUyNTYgMTQuOTkwMSAxMC45OTU4IDE2LjQzMDEgMTAuOTk1OCAxOC4wMDAxQzEwLjk5NTggMjEuODYwMSAxNC4xMzQ0IDI1LjAwMDEgMTcuOTkyNiAyNS4wMDAxQzE5LjU2MTggMjUuMDAwMSAyMS4wMDEyIDI0''@;'; put 'put ''LjQ3MDEgMjIuMTcwNiAyMy41OTAxTDI0LjIyOTYgMjUuNjUwMUMyMi4zMTA1IDI2LjUyMDEgMjAuMTkxNSAyNy4wMDAxIDE3Ljk5MjYgMjcuMDAwMVoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTcuOTkyNiA5LjAwMDA2QzIzLjk4OTggOS4wMDAwNiAyOS4zOTcyIDEyLjUyMDEgMzEuODk2IDE4''@;'; put 'put ''LjAwMDFDMzAuODk2NSAyMC4xOTAxIDI5LjQyNzIgMjIuMDYwMSAyNy42NDggMjMuNTMwMUwyOS4wNjc0IDI0Ljk1MDFDMzEuMTI2NCAyMy4yMjAxIDMyLjgwNTYgMjAuOTkwMSAzMy45MTUxIDE4LjM5MDFDMzQuMDI1IDE4LjE0MDEgMzQuMDI1IDE3Ljg2MDEgMzMuOTE1MSAxNy42MTAxQzMx''@;'; put 'put ''LjE4NjQgMTEuMTYwMSAyNC45MzkzIDcuMDAwMDYgMTguMDAyNiA3LjAwMDA2QzE1Ljk3MzUgNy4wMDAwNiAxNC4wMDQ0IDcuMzcwMDYgMTIuMTY1MyA4LjAzMDA2TDEzLjc0NDYgOS42MTAwNkMxNS4xMDM5IDkuMjEwMDYgMTYuNTMzMiA5LjAwMDA2IDE4LjAwMjYgOS4wMDAwNkgxNy45OTI2''@;'; put 'put ''Wk0zLjcwOTI2IDIuMjkwMDZDMy4zMTk0NCAxLjkwMDA2IDIuNjc5NzQgMS45MDAwNiAyLjI4OTkyIDIuMjkwMDZDMS45MDAxIDIuNjgwMDYgMS45MDAxIDMuMzIwMDYgMi4yODk5MiAzLjcxMDA2TDguNDc3MDIgOS45MDAwNkM1LjcwODMyIDExLjc0MDEgMy40NDkzOCAxNC4zODAxIDIuMDgw''@;'; put 'put ''MDIgMTcuNjEwMUMxLjk3MDA3IDE3Ljg2MDEgMS45NzAwNyAxOC4xNDAxIDIuMDgwMDIgMTguMzkwMUM0LjgwODc0IDI0Ljg0MDEgMTEuMDU1OCAyOS4wMDAxIDE3Ljk5MjYgMjkuMDAwMUMyMC43NDEzIDI5LjAwMDEgMjMuMzcgMjguMzQwMSAyNS43MTg5IDI3LjE1MDFMMzIuMjc1OSAzMy43''@;'; put 'put ''MTAxQzMyLjQ3NTggMzMuOTEwMSAzMi43MjU3IDM0LjAwMDEgMzIuOTg1NSAzNC4wMDAxQzMzLjI0NTQgMzQuMDAwMSAzMy40OTUzIDMzLjkwMDEgMzMuNjk1MiAzMy43MTAxQzM0LjA4NSAzMy4zMjAxIDM0LjA4NSAzMi42OTAxIDMzLjY5NTIgMzIuMzAwMUwzLjcwOTI2IDIuMjkwMDZaTTE3''@;'; put 'put ''Ljk5MjYgMjcuMDAwMUMxMS45OTU0IDI3LjAwMDEgNi41ODc5MSAyMy40ODAxIDQuMDg5MDggMTguMDAwMUM1LjM2ODQ4IDE1LjE5MDEgNy40Mjc1MSAxMi45MTAxIDkuOTI2MzQgMTEuMzQwMUwxMi40MDUyIDEzLjgyMDFDMTEuNTI1NiAxNC45OTAxIDEwLjk5NTggMTYuNDMwMSAxMC45OTU4''@;'; put 'put ''IDE4LjAwMDFDMTAuOTk1OCAyMS44NjAxIDE0LjEzNDQgMjUuMDAwMSAxNy45OTI2IDI1LjAwMDFDMTkuNTYxOCAyNS4wMDAxIDIxLjAwMTIgMjQuNDcwMSAyMi4xNzA2IDIzLjU5MDFMMjQuMjI5NiAyNS42NTAxQzIyLjMxMDUgMjYuNTIwMSAyMC4xOTE1IDI3LjAwMDEgMTcuOTkyNiAyNy4w''@;'; put 'put ''MDAxWk0xNS41NjM3IDExLjQ0MDFMMjQuNTQ5NSAyMC40MzAxQzI0LjgyOTQgMTkuNjcwMSAyNC45ODkzIDE4Ljg2MDEgMjQuOTg5MyAxOC4wMDAxQzI0Ljk4OTMgMTQuMTQwMSAyMS44NTA4IDExLjAwMDEgMTcuOTkyNiAxMS4wMDAxQzE3LjEzMyAxMS4wMDAxIDE2LjMyMzMgMTEuMTYwMSAx''@;'; put 'put ''NS41NjM3IDExLjQ0MDFaIi8+J31dLGdPZT1bImV5ZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0xNy45OTc2IDExQzE0LjEzODIgMTEgMTAuOTk4NyAxNC4xNCAxMC45OTg3IDE4QzEwLjk5ODcgMjEuODYgMTQuMTM4MiAyNSAxNy45OTc2IDI1QzIxLjg1NyAyNSAyNC45OTY1IDIxLjg2IDI0Ljk5''@;'; put 'put ''NjUgMThDMjQuOTk2NSAxNC4xNCAyMS44NTcgMTEgMTcuOTk3NiAxMVpNMTcuOTk3NiAyM0MxNS4yMzggMjMgMTIuOTk4MyAyMC43NiAxMi45OTgzIDE4QzEyLjk5ODMgMTUuMjQgMTUuMjM4IDEzIDE3Ljk5NzYgMTNDMjAuNzU3MSAxMyAyMi45OTY4IDE1LjI0IDIyLjk5NjggMThDMjIuOTk2''@;'; put 'put ''OCAyMC43NiAyMC43NTcxIDIzIDE3Ljk5NzYgMjNaTTMzLjkxNTEgMTcuNjFDMzEuMTg1NSAxMS4xNyAyNC45MzY1IDcgMTcuOTk3NiA3QzExLjA1ODYgNyA0LjgwOTYyIDExLjE3IDIuMDgwMDUgMTcuNjFDMS45NzAwNiAxNy44NiAxLjk3MDA2IDE4LjE0IDIuMDgwMDUgMTguMzlDNC44MDk2''@;'; put 'put ''MiAyNC44NCAxMS4wNTg2IDI5IDE3Ljk5NzYgMjlDMjQuOTM2NSAyOSAzMS4xODU1IDI0LjgzIDMzLjkxNTEgMTguMzlDMzQuMDI1MSAxOC4xNCAzNC4wMjUxIDE3Ljg2IDMzLjkxNTEgMTcuNjFaTTE3Ljk5NzYgMjdDMTEuOTk4NSAyNyA2LjU4OTM0IDIzLjQ4IDQuMDg5NzMgMThDNi41ODkz''@;'; put 'put ''NCAxMi41MiAxMS45OTg1IDkgMTcuOTk3NiA5QzIzLjk5NjYgOSAyOS40MDU4IDEyLjUyIDMxLjkwNTQgMThDMjkuNDA1OCAyMy40OCAyMy45OTY2IDI3IDE3Ljk5NzYgMjdaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE3Ljk5NzYgMTFDMTQuMTM4MiAxMSAxMC45OTg3IDE0LjE0IDEwLjk5ODcg''@;'; put 'put ''MThDMTAuOTk4NyAyMS44NiAxNC4xMzgyIDI1IDE3Ljk5NzYgMjVDMjEuODU3IDI1IDI0Ljk5NjUgMjEuODYgMjQuOTk2NSAxOEMyNC45OTY1IDE0LjE0IDIxLjg1NyAxMSAxNy45OTc2IDExWk0zMy45MTUxIDE3LjYxQzMxLjE4NTUgMTEuMTcgMjQuOTM2NSA3IDE3Ljk5NzYgN0MxMS4wNTg2''@;'; put 'put ''IDcgNC44MDk2MiAxMS4xNyAyLjA4MDA1IDE3LjYxQzEuOTcwMDYgMTcuODYgMS45NzAwNiAxOC4xNCAyLjA4MDA1IDE4LjM5QzQuODA5NjIgMjQuODQgMTEuMDU4NiAyOSAxNy45OTc2IDI5QzI0LjkzNjUgMjkgMzEuMTg1NSAyNC44MyAzMy45MTUxIDE4LjM5QzM0LjAyNTEgMTguMTQgMzQu''@;'; put 'put ''MDI1MSAxNy44NiAzMy45MTUxIDE3LjYxWk0xNy45OTc2IDI3QzExLjk5ODUgMjcgNi41ODkzNCAyMy40OCA0LjA4OTczIDE4QzYuNTg5MzQgMTIuNTIgMTEuOTk4NSA5IDE3Ljk5NzYgOUMyMy45OTY2IDkgMjkuNDA1OCAxMi41MiAzMS45MDU0IDE4QzI5LjQwNTggMjMuNDggMjMuOTk2NiAy''@;'; put 'put ''NyAxNy45OTc2IDI3WiIvPid9XSxtT2U9WyJlbGxpcHNpcy12ZXJ0aWNhbCIse291dGxpbmU6JzxwYXRoIGQ9Ik0yMS4xMDAxIDQuOUMyMS4xMDAxIDYuNTAxNjMgMTkuNzU3IDcuOCAxOC4xMDAxIDcuOEMxNi40NDMyIDcuOCAxNS4xMDAxIDYuNTAxNjMgMTUuMTAwMSA0LjlDMTUuMTAwMSAz''@;'; put 'put ''LjI5ODM3IDE2LjQ0MzIgMiAxOC4xMDAxIDJDMTkuNzU3IDIgMjEuMTAwMSAzLjI5ODM3IDIxLjEwMDEgNC45WiIvPjxwYXRoIGQ9Ik0xOC4xMDAxIDIwLjlDMTkuNzU3IDIwLjkgMjEuMTAwMSAxOS42MDE2IDIxLjEwMDEgMThDMjEuMTAwMSAxNi4zOTg0IDE5Ljc1NyAxNS4xIDE4LjEwMDEg''@;'; put 'put ''MTUuMUMxNi40NDMyIDE1LjEgMTUuMTAwMSAxNi4zOTg0IDE1LjEwMDEgMThDMTUuMTAwMSAxOS42MDE2IDE2LjQ0MzIgMjAuOSAxOC4xMDAxIDIwLjlaIi8+PHBhdGggZD0iTTE4LjEwMDEgMzRDMTkuNzU3IDM0IDIxLjEwMDEgMzIuNzAxNiAyMS4xMDAxIDMxLjFDMjEuMTAwMSAyOS40OTg0''@;'; put 'put ''IDE5Ljc1NyAyOC4yIDE4LjEwMDEgMjguMkMxNi40NDMyIDI4LjIgMTUuMTAwMSAyOS40OTg0IDE1LjEwMDEgMzEuMUMxNS4xMDAxIDMyLjcwMTYgMTYuNDQzMiAzNCAxOC4xMDAxIDM0WiIvPicsb3V0bGluZUJhZGdlZDonPHBhdGggZD0iTTIxLjEwMDEgNC45QzIxLjEwMDEgNi41MDE2MyAx''@;'; put 'put ''OS43NTcgNy44IDE4LjEwMDEgNy44QzE2LjQ0MzIgNy44IDE1LjEwMDEgNi41MDE2MyAxNS4xMDAxIDQuOUMxNS4xMDAxIDMuMjk4MzcgMTYuNDQzMiAyIDE4LjEwMDEgMkMxOS43NTcgMiAyMS4xMDAxIDMuMjk4MzcgMjEuMTAwMSA0LjlaIi8+PHBhdGggZD0iTTE4LjEwMDEgMjAuOUMxOS43''@;'; put 'put ''NTcgMjAuOSAyMS4xMDAxIDE5LjYwMTYgMjEuMTAwMSAxOEMyMS4xMDAxIDE2LjM5ODQgMTkuNzU3IDE1LjEgMTguMTAwMSAxNS4xQzE2LjQ0MzIgMTUuMSAxNS4xMDAxIDE2LjM5ODQgMTUuMTAwMSAxOEMxNS4xMDAxIDE5LjYwMTYgMTYuNDQzMiAyMC45IDE4LjEwMDEgMjAuOVoiLz48cGF0''@;'; put 'put ''aCBkPSJNMTguMTAwMSAzNEMxOS43NTcgMzQgMjEuMTAwMSAzMi43MDE2IDIxLjEwMDEgMzEuMUMyMS4xMDAxIDI5LjQ5ODQgMTkuNzU3IDI4LjIgMTguMTAwMSAyOC4yQzE2LjQ0MzIgMjguMiAxNS4xMDAxIDI5LjQ5ODQgMTUuMTAwMSAzMS4xQzE1LjEwMDEgMzIuNzAxNiAxNi40NDMyIDM0''@;'; put 'put ''IDE4LjEwMDEgMzRaIi8+PHBhdGggZD0iTTMwIDExQzMyLjc2MTQgMTEgMzUgOC43NjE0MiAzNSA2QzM1IDMuMjM4NTggMzIuNzYxNCAxIDMwIDFDMjcuMjM4NiAxIDI1IDMuMjM4NTggMjUgNkMyNSA4Ljc2MTQyIDI3LjIzODYgMTEgMzAgMTFaIi8+J31dLHZPZT1bInZpZXctY29sdW1ucyIs''@;'; put 'put ''e291dGxpbmU6JzxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMzEgNUg1QzMuODk1NDMgNSAzIDUuODk1NDMgMyA3VjI5QzMgMzAuMTA0NiAzLjg5NTQzIDMxIDUgMzFIMzFDMzIuMTA0NiAzMSAzMyAzMC4xMDQ2IDMzIDI5VjdDMzMgNS44OTU0MyAz''@;'; put 'put ''Mi4xMDQ2IDUgMzEgNVpNMTMgMjlINVY3SDEzVjI5Wk0xNSAyOUgyM1Y3SDE1VjI5WiIvPid9XSxiT2U9WyJhcnJvdyIse291dGxpbmU6JzxwYXRoIGQ9Ik0yNy42NTA0IDE1LjYzNDFMMTcuOTk1MSA2TDguMzM5ODEgMTUuNjM0MUM4LjAyODY5IDE1Ljg3MTcgNy44ODQzMiAxNi4yNjk1IDcu''@;'; put 'put ''OTcwMyAxNi42NTIxQzguMDU2MjkgMTcuMDM0NyA4LjM1Njg1IDE3LjMzMTkgOC43Mzk1MiAxNy40MTI3QzkuMTIyMTkgMTcuNDkzNSA5LjUxNjY3IDE3LjM0MyA5Ljc0OTEyIDE3LjAyNzZMMTYuOTk1NiA5LjgxOTU1VjI4Ljk5NzVDMTYuOTk1NiAyOS41NTEyIDE3LjQ0MzEgMzAgMTcuOTk1''@;'; put 'put ''MSAzMEMxOC41NDcxIDMwIDE4Ljk5NDYgMjkuNTUxMiAxOC45OTQ2IDI4Ljk5NzVWOS44MTk1NUwyNi4yNDExIDE3LjAyNzZDMjYuNjMzIDE3LjQxNzkgMjcuMjY2MiAxNy40MTU3IDI3LjY1NTQgMTcuMDIyNkMyOC4wNDQ1IDE2LjYyOTUgMjguMDQyMyAxNS45OTQzIDI3LjY1MDQgMTUuNjA0''@;'; put 'put ''VjE1LjYzNDFaIi8+J31dLHlPZT1bInN0ZXAtZm9yd2FyZC0yIix7b3V0bGluZTonPHBhdGggZD0iTTcuMDg4OTMgNi41MjAwM0M2LjkyNjQzIDYuNjc2NDUgNi43OTczNCA2Ljg2MzE1IDYuNzA5MjEgNy4wNjkyMUM2LjYyMTA4IDcuMjc1MjYgNi41NzU2OCA3LjQ5NjUyIDYuNTc1NjggNy43''@;'; put 'put ''MjAwM0M2LjU3NTY4IDcuOTQzNTMgNi42MjEwOCA4LjE2NDc5IDYuNzA5MjEgOC4zNzA4NUM2Ljc5NzM0IDguNTc2OSA2LjkyNjQzIDguNzYzNjEgNy4wODg5MyA4LjkyMDAzTDE2LjY4NzIgMThMNy4xMjk2NCAyNy4wOEM2LjgyOTc3IDI3LjM5OTEgNi42NjU1NCAyNy44MTg4IDYuNjcwNjUg''@;'; put 'put ''MjguMjUzQzYuNjc1NzYgMjguNjg3MiA2Ljg0OTgyIDI5LjEwMzEgNy4xNTcxMiAyOS40MTUyQzcuNDY0NDIgMjkuNzI3NCA3Ljg4MTY2IDI5LjkxMjEgOC4zMjMyMyAyOS45MzE2QzguNzY0OCAyOS45NTExIDkuMTk3MjEgMjkuODAzOCA5LjUzMTc2IDI5LjUyTDIxLjY2NDUgMThMOS41MzE3''@;'; put 'put ''NiA2LjQ3MDAzQzkuMzY4NTEgNi4zMTQ4MiA5LjE3NTU5IDYuMTkyOTMgOC45NjQxMyA2LjExMTM3QzguNzUyNjcgNi4wMjk4MiA4LjUyNjg2IDUuOTkwMjIgOC4yOTk3NCA1Ljk5NDg3QzguMDcyNjIgNS45OTk1MiA3Ljg0ODY5IDYuMDQ4MzIgNy42NDA4NyA2LjEzODQ2QzcuNDMzMDUgNi4y''@;'; put 'put ''Mjg1OSA3LjI0NTQ2IDYuMzU4MjggNy4wODg5MyA2LjUyMDAzWiIvPjxwYXRoIGQ9Ik0yNi44NDUzIDVDMjYuMzg2NCA1IDI1Ljk0NjMgNS4xNzkxMSAyNS42MjE4IDUuNDk3OTJDMjUuMjk3MyA1LjgxNjczIDI1LjExNSA2LjI0OTEzIDI1LjExNSA2LjdWMjkuM0MyNS4xMTUgMjkuNzUwOSAy''@;'; put 'put ''NS4yOTczIDMwLjE4MzMgMjUuNjIxOCAzMC41MDIxQzI1Ljk0NjMgMzAuODIwOSAyNi4zODY0IDMxIDI2Ljg0NTMgMzFDMjcuMzA0MyAzMSAyNy43NDQ0IDMwLjgyMDkgMjguMDY4OSAzMC41MDIxQzI4LjM5MzQgMzAuMTgzMyAyOC41NzU3IDI5Ljc1MDkgMjguNTc1NyAyOS4zVjYuN0MyOC41''@;'; put 'put ''NzU3IDYuMjQ5MTMgMjguMzkzNCA1LjgxNjczIDI4LjA2ODkgNS40OTc5MkMyNy43NDQ0IDUuMTc5MTEgMjcuMzA0MyA1IDI2Ljg0NTMgNVoiLz4nfV0sX09lPVsiZmlsdGVyLWdyaWQtY2lyY2xlIix7b3V0bGluZTonPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5v''@;'; put 'put ''ZGQiIGQ9Ik0xOCAyQzkuMTYzNDQgMiAyIDkuMTYzNDQgMiAxOEMyIDI2LjgzNjYgOS4xNjM0NCAzNCAxOCAzNEMyNi44MzY2IDM0IDM0IDI2LjgzNjYgMzQgMThDMzQgMTMuNzU2NSAzMi4zMTQzIDkuNjg2ODcgMjkuMzEzNyA2LjY4NjI5QzI2LjMxMzEgMy42ODU3MSAyMi4yNDM1IDIgMTgg''@;'; put 'put ''MlpNMTggMzJDMTAuMjY4IDMyIDQgMjUuNzMyIDQgMThDNCAxMC4yNjggMTAuMjY4IDQgMTggNEMyNS43MzIgNCAzMiAxMC4yNjggMzIgMThDMzIgMjEuNzEzIDMwLjUyNSAyNS4yNzQgMjcuODk5NSAyNy44OTk1QzI1LjI3NCAzMC41MjUgMjEuNzEzIDMyIDE4IDMyWk0xNyAyNi44NkwxNSAy''@;'; put 'put ''NS44NlYyMC42OEw4LjQyIDE0QzguMTU2NzkgMTMuNzMzIDguMDA2NCAxMy4zNzQ5IDggMTNWMTJDOCAxMS40NDc3IDguNDQ3NzIgMTEgOSAxMUgyN0MyNy41NTIzIDExIDI4IDExLjQ0NzcgMjggMTJWMTNDMjcuOTkzNiAxMy4zNzQ5IDI3Ljg0MzIgMTMuNzMzIDI3LjU4IDE0TDIxIDIwLjY4''@;'; put 'put ''VjI5TDE5IDI4TDE5LjAzIDIwLjI3QzE5LjAzMTEgMjAuMDA3NyAxOS4xMzUzIDE5Ljc1NjMgMTkuMzIgMTkuNTdMMjUuNzkgMTNIMTAuMjNMMTYuNzEgMTkuNTdDMTYuODk0NyAxOS43NTYzIDE2Ljk5ODkgMjAuMDA3NyAxNyAyMC4yN1YyNi44NloiLz4nLHNvbGlkOic8cGF0aCBmaWxsLXJ1''@;'; put 'put ''bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTE4IDJDOS4xNjM0NCAyIDIgOS4xNjM0NCAyIDE4QzIgMjYuODM2NiA5LjE2MzQ0IDM0IDE4IDM0QzI2LjgzNjYgMzQgMzQgMjYuODM2NiAzNCAxOEMzNCAxMy43NTY1IDMyLjMxNDMgOS42ODY4NyAyOS4zMTM3IDYuNjg2MjlD''@;'; put 'put ''MjYuMzEzMSAzLjY4NTcxIDIyLjI0MzUgMiAxOCAyWk0xOCAzMkMxMC4yNjggMzIgNCAyNS43MzIgNCAxOEM0IDEwLjI2OCAxMC4yNjggNCAxOCA0QzI1LjczMiA0IDMyIDEwLjI2OCAzMiAxOEMzMiAyMS43MTMgMzAuNTI1IDI1LjI3NCAyNy44OTk1IDI3Ljg5OTVDMjUuMjc0IDMwLjUyNSAy''@;'; put 'put ''MS43MTMgMzIgMTggMzJaTTggMTIuMTJWMTFIMjcuOThWMTIuMTRDMjcuOTc4MSAxMi4yNzE5IDI3LjkyNDIgMTIuMzk3NyAyNy44MyAxMi40OUwyMC43MSAxOS43NEMyMC42MDgxIDE5LjgyOTkgMjAuNTQzOCAxOS45NTQ4IDIwLjUzIDIwLjA5VjI4LjQ4QzIwLjUzMDMgMjguNjUyOCAyMC40''@;'; put 'put ''NDE1IDI4LjgxMzQgMjAuMjk1IDI4LjkwNUMyMC4xNDg1IDI4Ljk5NjYgMTkuOTY1MSAyOS4wMDYgMTkuODEgMjguOTNMMTUuODYgMjcuNTJDMTUuNjg4MyAyNy40MzU5IDE1LjU3OTYgMjcuMjYxMiAxNS41OCAyNy4wN1YyMC4xOEMxNS41NzgxIDIwLjA0ODEgMTUuNTI0MiAxOS45MjIzIDE1''@;'; put 'put ''LjQzIDE5LjgzTDguMTUgMTIuNDdDOC4wNTU3OSAxMi4zNzc3IDguMDAxODggMTIuMjUxOSA4IDEyLjEyWiIvPid9XSx3T2U9WyJmaWx0ZXItZ3JpZCIse291dGxpbmU6JzxwYXRoIGQ9Ik0xNSAyMy44NkwxNyAyNC44NlYxOC4yN0MxNi45OTg5IDE4LjAwNzcgMTYuODk0NyAxNy43NTYzIDE2''@;'; put 'put ''LjcxIDE3LjU3TDEwLjIzIDExSDI1Ljc5TDE5LjMyIDE3LjU3QzE5LjEzNTMgMTcuNzU2MyAxOS4wMzExIDE4LjAwNzcgMTkuMDMgMTguMjdMMTkgMjZMMjEgMjdWMTguNjhMMjcuNTggMTJDMjcuODQzMiAxMS43MzMgMjcuOTkzNiAxMS4zNzQ5IDI4IDExVjEwQzI4IDkuNDQ3NzIgMjcuNTUy''@;'; put 'put ''MyA5IDI3IDlIOUM4LjQ0NzcyIDkgOCA5LjQ0NzcyIDggMTBWMTFDOC4wMDY0IDExLjM3NDkgOC4xNTY3OSAxMS43MzMgOC40MiAxMkwxNSAxOC42OFYyMy44NloiLz4nLHNvbGlkOic8cGF0aCBkPSJNOCA5VjEwLjEyMTJDOC4wMDE4OCAxMC4yNTMyIDguMDU1ODUgMTAuMzc5MSA4LjE1MDE1''@;'; put 'put ''IDEwLjQ3MTZMMTUuNDM3NCAxNy44MzkzQzE1LjUzMTcgMTcuOTMxNyAxNS41ODU3IDE4LjA1NzcgMTUuNTg3NiAxOC4xODk3VjI1LjA4N0MxNS41ODcyIDI1LjI3ODQgMTUuNjk2IDI1LjQ1MzIgMTUuODY3OSAyNS41Mzc1TDE5LjgyMTggMjYuOTQ4OUMxOS45NzcxIDI3LjAyNSAyMC4xNjA3''@;'; put 'put ''IDI3LjAxNTYgMjAuMzA3MyAyNi45MjM5QzIwLjQ1MzkgMjYuODMyMyAyMC41NDI5IDI2LjY3MTQgMjAuNTQyNSAyNi40OTg1VjE4LjA5OTZDMjAuNTU2NCAxNy45NjQzIDIwLjYyMDcgMTcuODM5MiAyMC43MjI3IDE3Ljc0OTJMMjcuODQ5OCAxMC40OTE2QzI3Ljk0NDIgMTAuMzk5MiAyNy45''@;'; put 'put ''OTgxIDEwLjI3MzIgMjggMTAuMTQxMlY5SDhaIi8+J31dLHFXPVsiZXJyb3Itc3RhbmRhcmQiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTggMjIuNjFDMTcuNDQ3NyAyMi42MSAxNyAyMi4xNjIzIDE3IDIxLjYxVjkuNjFDMTcgOS4wNTc3MiAxNy40NDc3IDguNjEgMTggOC42MUMxOC41NTIzIDgu''@;'; put 'put ''NjEgMTkgOS4wNTc3MiAxOSA5LjYxVjIxLjYxQzE5IDIyLjE2MjMgMTguNTUyMyAyMi42MSAxOCAyMi42MVoiLz48cGF0aCBkPSJNMTkuMzMgMjYuMDZDMTkuMzMgMjYuNzk0NSAxOC43MzQ1IDI3LjM5IDE4IDI3LjM5QzE3LjI2NTUgMjcuMzkgMTYuNjcgMjYuNzk0NSAxNi42NyAyNi4wNkMx''@;'; put 'put ''Ni42NyAyNS4zMjU1IDE3LjI2NTUgMjQuNzMgMTggMjQuNzNDMTguNzM0NSAyNC43MyAxOS4zMyAyNS4zMjU1IDE5LjMzIDI2LjA2WiIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMiAxOEMyIDI2LjgzNjYgOS4xNjM0NCAzNCAxOCAzNEMyMi4y''@;'; put 'put ''NDM1IDM0IDI2LjMxMzEgMzIuMzE0MyAyOS4zMTM3IDI5LjMxMzdDMzIuMzE0MyAyNi4zMTMxIDM0IDIyLjI0MzUgMzQgMThDMzQgOS4xNjM0NCAyNi44MzY2IDIgMTggMkM5LjE2MzQ0IDIgMiA5LjE2MzQ0IDIgMThaTTQgMThDNCAxMC4yNjggMTAuMjY4IDQgMTggNEMyNS43MzIgNCAzMiAx''@;'; put 'put ''MC4yNjggMzIgMThDMzIgMjUuNzMyIDI1LjczMiAzMiAxOCAzMkMxMC4yNjggMzIgNCAyNS43MzIgNCAxOFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTggMkM5LjE2IDIgMiA5LjE2IDIgMThDMiAyNi44NCA5LjE2IDM0IDE4IDM0QzIyLjI0IDM0IDI2LjMxIDMyLjMxIDI5LjMxIDI5LjMxQzMy''@;'; put 'put ''LjMxIDI2LjMxIDM0IDIyLjI0IDM0IDE4QzM0IDkuMTYgMjYuODQgMiAxOCAyWk0xNyA5LjYxQzE3IDkuMDYgMTcuNDUgOC42MSAxOCA4LjYxQzE4LjU1IDguNjEgMTkgOS4wNiAxOSA5LjYxVjIxLjYxQzE5IDIyLjE2IDE4LjU1IDIyLjYxIDE4IDIyLjYxQzE3LjQ1IDIyLjYxIDE3IDIyLjE2''@;'; put 'put ''IDE3IDIxLjYxVjkuNjFaTTE4IDI3LjI2QzE3LjM0IDI3LjI2IDE2LjggMjYuNzIgMTYuOCAyNi4wNkMxNi44IDI1LjQgMTcuMzQgMjQuODYgMTggMjQuODZDMTguNjYgMjQuODYgMTkuMiAyNS40IDE5LjIgMjYuMDZDMTkuMiAyNi43MiAxOC42NiAyNy4yNiAxOCAyNy4yNloiLz4nfV0sQ09l''@;'; put 'put ''PVsiaGVscCIse291dGxpbmU6JzxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMiAxOEMyIDkuMTYzNDQgOS4xNjM0NCAyIDE4IDJDMjIuMjQzNSAyIDI2LjMxMzEgMy42ODU3MSAyOS4zMTM3IDYuNjg2MjlDMzIuMzE0MyA5LjY4Njg3IDM0IDEzLjc1''@;'; put 'put ''NjUgMzQgMThDMzQgMjYuODM2NiAyNi44MzY2IDM0IDE4IDM0QzkuMTYzNDQgMzQgMiAyNi44MzY2IDIgMThaTTQgMThDNCAyNS43MzIgMTAuMjY4IDMyIDE4IDMyQzIxLjcxMyAzMiAyNS4yNzQgMzAuNTI1IDI3Ljg5OTUgMjcuODk5NUMzMC41MjUgMjUuMjc0IDMyIDIxLjcxMyAzMiAxOEMz''@;'; put 'put ''MiAxMC4yNjggMjUuNzMyIDQgMTggNEMxMC4yNjggNCA0IDEwLjI2OCA0IDE4Wk0xOC4yOSA4LjkyQzE2LjA5NjEgOC44ODM3NCAxMy45OTk4IDkuODI1NiAxMi41NyAxMS40OUMxMi4zNzE4IDExLjY3MzcgMTIuMjU2MyAxMS45Mjk4IDEyLjI1IDEyLjJDMTIuMjQ5OSAxMi40NDkzIDEyLjM1''@;'; put 'put ''MDkgMTIuNjg4IDEyLjUzIDEyLjg2MTRDMTIuNzA5MSAxMy4wMzQ4IDEyLjk1MDggMTMuMTI4MSAxMy4yIDEzLjEyQzEzLjQ2NDIgMTMuMTEzNSAxMy43MTY4IDEzLjAxMDMgMTMuOTEgMTIuODNDMTQuOTkxNiAxMS41NjI1IDE2LjU3MzcgMTAuODMxNyAxOC4yNCAxMC44M0MyMC42IDEwLjgz''@;'; put 'put ''IDIyLjA3IDEyLjM1IDIyLjA3IDE0LjI0VjE0LjI5QzIyLjA3IDE2LjUgMjAuMzEgMTcuNzMgMTcuNTMgMTcuOTRDMTcuMzAyMyAxNy45NDg4IDE3LjA4OTIgMTguMDU0MiAxNi45NDQxIDE4LjIyOTlDMTYuNzk5IDE4LjQwNTYgMTYuNzM1NyAxOC42MzQ4IDE2Ljc3IDE4Ljg2VjIxLjYxQzE2''@;'; put 'put ''LjgyMTUgMjIuMTIyOSAxNy4yNTQ1IDIyLjUxMjYgMTcuNzcgMjIuNTFIMTcuODhDMTguMzkyOSAyMi40NTg1IDE4Ljc4MjYgMjIuMDI1NSAxOC43OCAyMS41MVYxOS40NUMyMS43OCAxOS4wMyAyNC4yMSAxNy40NSAyNC4yMSAxNC4xN1YxNC4xMkMyNC4xOCAxMS4xMiAyMS44NCA4LjkyIDE4''@;'; put 'put ''LjI5IDguOTJaTTE5LjAzIDI2LjJDMTkuMDMgMjYuODkwNCAxOC40NzA0IDI3LjQ1IDE3Ljc4IDI3LjQ1QzE3LjA4OTYgMjcuNDUgMTYuNTMgMjYuODkwNCAxNi41MyAyNi4yQzE2LjUzIDI1LjUwOTYgMTcuMDg5NiAyNC45NSAxNy43OCAyNC45NUMxOC40NzA0IDI0Ljk1IDE5LjAzIDI1LjUw''@;'; put 'put ''OTYgMTkuMDMgMjYuMloiLz4nLG91dGxpbmVCYWRnZWQ6JzxwYXRoIGQ9Ik0zMy4wMDEzIDEyLjc2ODlDMzIuMzk1OSAxMy4wNDYyIDMxLjc1NTkgMTMuMjQwNiAzMS4wOTg2IDEzLjM0NjdDMzMuMjYzNiAxOS41MTA4IDMwLjg3NjMgMjYuMzUyOCAyNS4zNDY1IDI5LjgzMkMxOS44MTY3IDMz''@;'; put 'put ''LjMxMTIgMTIuNjE1NCAzMi41MDIgNy45OTU2OSAyNy44ODIyQzMuMzc1OTcgMjMuMjYyNSAyLjU2Njc0IDE2LjA2MTMgNi4wNDU5MiAxMC41MzE1QzkuNTI1MDkgNS4wMDE2MiAxNi4zNjcxIDIuNjE0MjkgMjIuNTMxMiA0Ljc3OTM4QzIyLjYzNzUgNC4xMjIwNSAyMi44MzE4IDMuNDgyMDQg''@;'; put 'put ''MjMuMTA5IDIuODc2NjNDMTYuMDY0OSAwLjQ0MDk0NiA4LjI3MTk5IDMuMTkyMDUgNC4zMTgyMyA5LjUxMDI5QzAuMzY0NDc2IDE1LjgyODUgMS4yOTczNiAyNC4wMzk5IDYuNTY3NjcgMjkuMzEwM0MxMS44MzggMzQuNTgwNiAyMC4wNDk0IDM1LjUxMzUgMjYuMzY3NiAzMS41NTk3QzMyLjY4''@;'; put 'put ''NTkgMjcuNjA1OSAzNS40MzcgMTkuODEzMSAzMy4wMDEzIDEyLjc2ODlaIi8+PHBhdGggZD0iTTE3LjcxOTYgMjcuMzUzM0MxOC40MDczIDI3LjM1MzMgMTguOTY0OCAyNi43OTU4IDE4Ljk2NDggMjYuMTA4MUMxOC45NjQ4IDI1LjQyMDMgMTguNDA3MyAyNC44NjI4IDE3LjcxOTYgMjQuODYy''@;'; put 'put ''OEMxNy4wMzE4IDI0Ljg2MjggMTYuNDc0MyAyNS40MjAzIDE2LjQ3NDMgMjYuMTA4MUMxNi40NzQzIDI2Ljc5NTggMTcuMDMxOCAyNy4zNTMzIDE3LjcxOTYgMjcuMzUzM1oiLz48cGF0aCBkPSJNMjQuMDk1MyAxNC4wNzM5VjE0LjEyMzhDMjQuMDk1MyAxNy4zOTEzIDIxLjY3NDUgMTguOTM1''@;'; put 'put ''NCAxOC43MjU3IDE5LjM4MzdWMjEuNDM1OUMxOC43MjgzIDIxLjk0OTQgMTguMzQwMSAyMi4zODA3IDE3LjgyOTEgMjIuNDMyMUgxNy43MTk2QzE3LjIwNiAyMi40MzQ3IDE2Ljc3NDcgMjIuMDQ2NSAxNi43MjMzIDIxLjUzNTVWMTguNzk1OUMxNi42ODkxIDE4LjU3MTYgMTYuNzUyMiAxOC4z''@;'; put 'put ''NDMyIDE2Ljg5NjggMTguMTY4MkMxNy4wNDEzIDE3Ljk5MzIgMTcuMjUzNyAxNy44ODgyIDE3LjQ4MDUgMTcuODc5NEMyMC4yNDk5IDE3LjY3MDIgMjIuMDAzMiAxNi40NDQ5IDIyLjAwMzIgMTQuMjQzM1YxNC4xOTM1QzIyLjAwMzIgMTIuMzEwNyAyMC41Mzg4IDEwLjc5NjQgMTguMTg3OCAx''@;'; put 'put ''MC43OTY0QzE2LjUyNzggMTAuNzk4MiAxNC45NTE3IDExLjUyNjEgMTMuODc0MiAxMi43ODg4QzEzLjY4MTcgMTIuOTY4NCAxMy40MzAxIDEzLjA3MTIgMTMuMTY2OSAxMy4wNzc3QzEyLjkxODcgMTMuMDg1OCAxMi42Nzc4IDEyLjk5MjkgMTIuNDk5NCAxMi44MjAxQzEyLjMyMSAxMi42NDcz''@;'; put 'put ''IDEyLjIyMDQgMTIuNDA5NiAxMi4yMjA1IDEyLjE2MTJDMTIuMjI2OCAxMS44OTIxIDEyLjM0MTggMTEuNjM2OSAxMi41MzkzIDExLjQ1MzlDMTMuOTYzNyA5Ljc5NTg1IDE2LjA1MiA4Ljg1NzU3IDE4LjIzNzYgOC44OTM2OUMyMS43NjQxIDguODkzNjkgMjQuMDk1MyAxMS4wODUzIDI0LjA5''@;'; put 'put ''NTMgMTQuMDczOVoiLz48cGF0aCBkPSJNMzAgMTFDMzIuNzYxNCAxMSAzNSA4Ljc2MTQyIDM1IDZDMzUgMy4yMzg1OCAzMi43NjE0IDEgMzAgMUMyNy4yMzg2IDEgMjUgMy4yMzg1OCAyNSA2QzI1IDguNzYxNDIgMjcuMjM4NiAxMSAzMCAxMVoiLz4nLHNvbGlkOic8cGF0aCBmaWxsLXJ1bGU9''@;'; put 'put ''ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTE4IDJDOS4xNjM0NCAyIDIgOS4xNjM0NCAyIDE4QzIgMjYuODM2NiA5LjE2MzQ0IDM0IDE4IDM0QzI2LjgzNjYgMzQgMzQgMjYuODM2NiAzNCAxOEMzNCAxMy43NTY1IDMyLjMxNDMgOS42ODY4NyAyOS4zMTM3IDYuNjg2MjlDMjYu''@;'; put 'put ''MzEzMSAzLjY4NTcxIDIyLjI0MzUgMiAxOCAyWk0xNy43OCAyNy44NUMxNy4xMTI2IDI3Ljg1IDE2LjUxMSAyNy40NDggMTYuMjU1NiAyNi44MzE0QzE2LjAwMDIgMjYuMjE0OSAxNi4xNDE0IDI1LjUwNTIgMTYuNjEzMyAyNS4wMzMzQzE3LjA4NTIgMjQuNTYxNCAxNy43OTQ5IDI0LjQyMDIg''@;'; put 'put ''MTguNDExNCAyNC42NzU2QzE5LjAyOCAyNC45MzEgMTkuNDMgMjUuNTMyNiAxOS40MyAyNi4yQzE5LjQzIDI3LjExMTMgMTguNjkxMyAyNy44NSAxNy43OCAyNy44NVpNMTkuMTUgMjEuNTFWMTkuNzlDMjIuNjEgMTkuMiAyNC41OCAxNy4xNiAyNC41OCAxNC4xMUMyNC41OCAxMC44MSAyMiA4''@;'; put 'put ''LjUxIDE4LjMgOC41MUMxNi4wMDA1IDguNDc0NTIgMTMuODAzMyA5LjQ1OTU2IDEyLjMgMTEuMkMxMi4wMzA0IDExLjQ2MzYgMTEuODc1OSAxMS44MjMgMTEuODcgMTIuMkMxMS44ODMgMTIuNzUxNiAxMi4yMjggMTMuMjQwNiAxMi43NDMyIDEzLjQzOEMxMy4yNTg1IDEzLjYzNTMgMTMuODQx''@;'; put 'put ''OSAxMy41MDE4IDE0LjIyIDEzLjFDMTUuMjA5MiAxMS45MDY5IDE2LjY3MDQgMTEuMjA1NiAxOC4yMiAxMS4xOEMyMC4yNCAxMS4xOCAyMS42NSAxMi40MiAyMS42NSAxNC4yNUMyMS42NSAxNi44IDE5LjA0IDE3LjM4IDE3LjQ3IDE3LjVDMTcuMTQ0OCAxNy41MTc1IDE2Ljg0MDkgMTcuNjY3''@;'; put 'put ''NCAxNi42MjkzIDE3LjkxNUMxNi40MTc2IDE4LjE2MjUgMTYuMzE2NyAxOC40ODYgMTYuMzUgMTguODFWMjEuNTdDMTYuMzYwNCAyMS45MjcyIDE2LjUxMzEgMjIuMjY1NSAxNi43NzQxIDIyLjUwOTZDMTcuMDM1MSAyMi43NTM3IDE3LjM4MjkgMjIuODgzNSAxNy43NCAyMi44N0gxNy44NUMx''@;'; put 'put ''OC41NzUzIDIyLjgzMjkgMTkuMTQ1NiAyMi4yMzYyIDE5LjE1IDIxLjUxWiIvPicsc29saWRCYWRnZWQ6JzxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMzMuMDAxMyAxMi43Njg5QzMwLjE2NTkgMTQuMDY4OCAyNi44MjEyIDEzLjQ2NzkgMjQuNjE1''@;'; put 'put ''NiAxMS4yNjIzQzIyLjQxMDEgOS4wNTY3NCAyMS44MDkxIDUuNzEyIDIzLjEwOSAyLjg3NjYzQzE2LjA2NDkgMC40NDA5NDYgOC4yNzE5OSAzLjE5MjA1IDQuMzE4MjMgOS41MTAyOUMwLjM2NDQ3NiAxNS44Mjg1IDEuMjk3MzYgMjQuMDM5OSA2LjU2NzY3IDI5LjMxMDNDMTEuODM4IDM0LjU4''@;'; put 'put ''MDYgMjAuMDQ5NCAzNS41MTM1IDI2LjM2NzYgMzEuNTU5N0MzMi42ODU5IDI3LjYwNTkgMzUuNDM3IDE5LjgxMzEgMzMuMDAxMyAxMi43Njg5Wk0xNy43MTk2IDI3LjcxMkMxNy4wNTQ3IDI3LjcxMiAxNi40NTU0IDI3LjMxMTUgMTYuMjAwOSAyNi42OTczQzE1Ljk0NjUgMjYuMDgzIDE2LjA4''@;'; put 'put ''NzIgMjUuMzc2IDE2LjU1NzMgMjQuOTA1OUMxNy4wMjc0IDI0LjQzNTggMTcuNzM0NCAyNC4yOTUyIDE4LjM0ODYgMjQuNTQ5NkMxOC45NjI4IDI0LjgwNCAxOS4zNjMzIDI1LjQwMzQgMTkuMzYzMyAyNi4wNjgyQzE5LjM3NCAyNi41MTEgMTkuMjA1NiAyNi45Mzk0IDE4Ljg5NjIgMjcuMjU2''@;'; put 'put ''NEMxOC41ODY3IDI3LjU3MzMgMTguMTYyNSAyNy43NTE5IDE3LjcxOTYgMjcuNzUxOFYyNy43MTJaTTE5LjA4NDQgMjEuMzk2VjE5LjcyMjRDMjIuNTMxMiAxOS4xMzQ3IDI0LjQ5MzcgMTcuMTAyNCAyNC40OTM3IDE0LjAyNDFDMjQuNDkzNyAxMC43MzY3IDIxLjkyMzUgOC40NDU0IDE4LjIz''@;'; put 'put ''NzYgOC40NDU0QzE1Ljk0NjggOC40MTAwNiAxMy43NTggOS4zOTEzNiAxMi4yNjA0IDExLjEyNTJDMTEuOTkxOCAxMS4zODc4IDExLjgzNzkgMTEuNzQ1OCAxMS44MzIgMTIuMTIxNEMxMS44NDUgMTIuNjcwOSAxMi4xODg2IDEzLjE1ODEgMTIuNzAxOSAxMy4zNTQ3QzEzLjIxNTIgMTMuNTUx''@;'; put 'put ''MiAxMy43OTY0IDEzLjQxODIgMTQuMTczMSAxMy4wMThDMTUuMTU4NiAxMS44Mjk0IDE2LjYxNDEgMTEuMTMwNyAxOC4xNTc5IDExLjEwNTNDMjAuMTcwMiAxMS4xMDUzIDIxLjU3NDkgMTIuMzQwNiAyMS41NzQ5IDE0LjE2MzZDMjEuNTc0OSAxNi43MDM5IDE4Ljk3NDggMTcuMjgxNyAxNy40''@;'; put 'put ''MTA3IDE3LjQwMTNDMTcuMDg2NyAxNy40MTg2IDE2Ljc4NCAxNy41NjgxIDE2LjU3MzIgMTcuODE0N0MxNi4zNjIzIDE4LjA2MTMgMTYuMjYxOCAxOC4zODM1IDE2LjI5NSAxOC43MDYzVjIxLjQ1NThDMTYuMzA1NCAyMS44MTE3IDE2LjQ1NzUgMjIuMTQ4NyAxNi43MTc1IDIyLjM5MTlDMTYu''@;'; put 'put ''OTc3NSAyMi42MzUxIDE3LjMyMzkgMjIuNzY0MyAxNy42Nzk3IDIyLjc1MDlIMTcuNzg5M0MxOC41MTE4IDIyLjcxMzkgMTkuMDggMjIuMTE5NSAxOS4wODQ0IDIxLjM5NloiLz48cGF0aCBkPSJNMzAgMTFDMzIuNzYxNCAxMSAzNSA4Ljc2MTQyIDM1IDZDMzUgMy4yMzg1OCAzMi43NjE0IDEg''@;'; put 'put ''MzAgMUMyNy4yMzg2IDEgMjUgMy4yMzg1OCAyNSA2QzI1IDguNzYxNDIgMjcuMjM4NiAxMSAzMCAxMVoiLz4nfV0sU09lPVsiaW5mby1zdGFuZGFyZCIse291dGxpbmU6JzxwYXRoIGQ9Ik0yIDE4QzIgMjYuODQgOS4xNiAzNCAxOCAzNEMyMi4yNCAzNCAyNi4zMSAzMi4zMSAyOS4zMSAyOS4z''@;'; put 'put ''MUMzMi4zMSAyNi4zMSAzNCAyMi4yNCAzNCAxOEMzNCA5LjE2IDI2Ljg0IDIgMTggMkM5LjE2IDIgMiA5LjE2IDIgMThaTTQgMThDNCAxMC4yNyAxMC4yNyA0IDE4IDRDMjUuNzMgNCAzMiAxMC4yNyAzMiAxOEMzMiAyNS43MyAyNS43MyAzMiAxOCAzMkMxMC4yNyAzMiA0IDI1LjczIDQgMTha''@;'; put 'put ''TTIxIDI1SDE5VjE0SDE2QzE1LjQ1IDE0IDE1IDE0LjQ1IDE1IDE1QzE1IDE1LjU1IDE1LjQ1IDE2IDE2IDE2SDE3VjI1SDE1QzE0LjQ1IDI1IDE0IDI1LjQ1IDE0IDI2QzE0IDI2LjU1IDE0LjQ1IDI3IDE1IDI3SDIxQzIxLjU1IDI3IDIyIDI2LjU1IDIyIDI2QzIyIDI1LjQ1IDIxLjU1IDI1''@;'; put 'put ''IDIxIDI1Wk0xOS4zNyAxMC40NUMxOS4zNyAxMS4yMiAxOC43NCAxMS44NSAxNy45NyAxMS44NUMxNy4yIDExLjg1IDE2LjU3IDExLjIyIDE2LjU3IDEwLjQ1QzE2LjU3IDkuNjggMTcuMiA5LjA1IDE3Ljk3IDkuMDVDMTguNzQgOS4wNSAxOS4zNyA5LjY4IDE5LjM3IDEwLjQ1WiIvPicsc29s''@;'; put 'put ''aWQ6JzxwYXRoIGQ9Ik0xOCAyQzkuMTYgMiAyIDkuMTYgMiAxOEMyIDI2Ljg0IDkuMTYgMzQgMTggMzRDMjIuMjQgMzQgMjYuMzEgMzIuMzEgMjkuMzEgMjkuMzFDMzIuMzEgMjYuMzEgMzQgMjIuMjQgMzQgMThDMzQgOS4xNiAyNi44NCAyIDE4IDJaTTE3Ljk3IDguODVDMTguODUgOC44NSAx''@;'; put 'put ''OS41NyA5LjU3IDE5LjU3IDEwLjQ1QzE5LjU3IDExLjMzIDE4Ljg1IDEyLjA1IDE3Ljk3IDEyLjA1QzE3LjA5IDEyLjA1IDE2LjM3IDExLjMzIDE2LjM3IDEwLjQ1QzE2LjM3IDkuNTcgMTcuMDkgOC44NSAxNy45NyA4Ljg1Wk0yMSAyNy4ySDE1QzE0LjM0IDI3LjIgMTMuOCAyNi42NiAxMy44''@;'; put 'put ''IDI2QzEzLjggMjUuMzQgMTQuMzQgMjQuOCAxNSAyNC44SDE2LjhWMTYuMkgxNkMxNS4zNCAxNi4yIDE0LjggMTUuNjYgMTQuOCAxNUMxNC44IDE0LjM0IDE1LjM0IDEzLjggMTYgMTMuOEgxOS4yVjI0LjhIMjFDMjEuNjYgMjQuOCAyMi4yIDI1LjM0IDIyLjIgMjZDMjIuMiAyNi42NiAyMS42''@;'; put 'put ''NiAyNy4yIDIxIDI3LjJaIi8+J31dLE1PZT1bIm5vdGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMjgsMzBINlY4SDE5LjIybDItMkg2QTIsMiwwLDAsMCw0LDhWMzBhMiwyLDAsMCwwLDIsMkgyOGEyLDIsMCwwLDAsMi0yVjE1bC0yLDJaIi8+PHBhdGggZD0iTTMzLjUzLDUuODQsMzAuMTYsMi40''@;'; put 'put ''N2ExLjYxLDEuNjEsMCwwLDAtMi4yOCwwTDE0LjE3LDE2LjI2bC0xLjExLDQuODFBMS42MSwxLjYxLDAsMCwwLDE0LjYzLDIzLDEuNjksMS42OSwwLDAsMCwxNSwyM2w0Ljg1LTEuMDdMMzMuNTMsOC4xMkExLjYxLDEuNjEsMCwwLDAsMzMuNTMsNS44NFpNMTguODEsMjAuMDhsLTMuNjYuODFM''@;'; put 'put ''MTYsMTcuMjYsMjYuMzIsNi44N2wyLjgyLDIuODJaTTMwLjI3LDguNTYsMjcuNDUsNS43NCwyOSw0LjE2LDMxLjg0LDdaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTMzLDYuNCwyOS4zLDIuN2ExLjcxLDEuNzEsMCwwLDAtMi4zNiwwTDIzLjY1LDZINkEyLDIsMCwwLDAsNCw4VjMwYTIsMiwwLDAs''@;'; put 'put ''MCwyLDJIMjhhMiwyLDAsMCwwLDItMlYxMS43NmwzLTNBMS42NywxLjY3LDAsMCwwLDMzLDYuNFpNMTguODMsMjAuMTNsLTQuMTkuOTMsMS00LjE1LDkuNTUtOS41NywzLjIzLDMuMjNaTTI5LjUsOS40MywyNi4yNyw2LjJsMS44NS0xLjg1LDMuMjMsMy4yM1oiLz4nfV0sWFc9WyJzdWNjZXNz''@;'; put 'put ''LXN0YW5kYXJkIix7b3V0bGluZTonPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xOCAyQzkuMTYzNDQgMiAyIDkuMTYzNDQgMiAxOEMyIDI2LjgzNjYgOS4xNjM0NCAzNCAxOCAzNEMyNi44MzY2IDM0IDM0IDI2LjgzNjYgMzQgMThDMzQgMTMuNzU2''@;'; put 'put ''NSAzMi4zMTQzIDkuNjg2ODcgMjkuMzEzNyA2LjY4NjI5QzI2LjMxMzEgMy42ODU3MSAyMi4yNDM1IDIgMTggMlpNMTggMzJDMTAuMjY4IDMyIDQgMjUuNzMyIDQgMThDNCAxMC4yNjggMTAuMjY4IDQgMTggNEMyNS43MzIgNCAzMiAxMC4yNjggMzIgMThDMzIgMjEuNzEzIDMwLjUyNSAyNS4y''@;'; put 'put ''NzQgMjcuODk5NSAyNy44OTk1QzI1LjI3NCAzMC41MjUgMjEuNzEzIDMyIDE4IDMyWk0yNi41OSAxMi4xQzI2Ljk4IDExLjcxMjMgMjcuNjEgMTEuNzEyMyAyOCAxMi4xQzI4LjE4OTMgMTIuMjg3OCAyOC4yOTU4IDEyLjU0MzQgMjguMjk1OCAxMi44MUMyOC4yOTU4IDEzLjA3NjYgMjguMTg5''@;'; put 'put ''MyAxMy4zMzIyIDI4IDEzLjUyTDE1LjQ5IDI2TDggMTguNTNDNy42MTg5MiAxOC4xMTg1IDcuNjQzNTUgMTcuNDc2MSA4LjA1NSAxNy4wOTVDOC40NjY0NSAxNi43MTM5IDkuMTA4OTIgMTYuNzM4NSA5LjQ5IDE3LjE1TDE1LjQ5IDIzLjE1TDI2LjU5IDEyLjFaIi8+Jyxzb2xpZDonPHBhdGgg''@;'; put 'put ''ZD0iTTI5LjMxIDYuNjlDMjYuMzEgMy42OSAyMi4yNCAyIDE4IDJDOS4xNiAyIDIgOS4xNiAyIDE4QzIgMjYuODQgOS4xNiAzNCAxOCAzNEMyNi44NCAzNCAzNCAyNi44NCAzNCAxOEMzNCAxMy43NiAzMi4zMSA5LjY5IDI5LjMxIDYuNjlaTTI4LjE0IDEzLjY0TDE1LjYzIDI2LjEyTDE1LjQ5''@;'; put 'put ''IDI2LjI2TDE1LjM1IDI2LjEyTDcuODUgMTguNjRDNy4zOSAxOC4xNSA3LjQyIDE3LjM4IDcuOTIgMTYuOTJDOC4xNSAxNi43MSA4LjQ0IDE2LjYgOC43NSAxNi42QzkuMDkgMTYuNiA5LjQxIDE2Ljc0IDkuNjQgMTYuOThMMTUuNSAyMi44NEwyNi40NiAxMS45M0MyNi42OSAxMS43IDI2Ljk5''@;'; put 'put ''IDExLjU4IDI3LjMxIDExLjU4QzI3LjYzIDExLjU4IDI3LjkzIDExLjcgMjguMTYgMTEuOTNDMjguMzkgMTIuMTUgMjguNTEgMTIuNDYgMjguNTEgMTIuNzhDMjguNTEgMTMuMSAyOC4zOCAxMy40MSAyOC4xNiAxMy42M0wyOC4xNCAxMy42NFoiLz4nfV0seE9lPVsid2FybmluZy1zdGFuZGFy''@;'; put 'put ''ZCIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOC4wMDAxIDIyLjk5MzJDMTguNTUwMSAyMi45OTMyIDE5LjAwMDEgMjIuNTQzNCAxOS4wMDAxIDIxLjk5MzZWMTAuOTk3NUMxOS4wMDAxIDEwLjQ0NzcgMTguNTUwMSA5Ljk5Nzg2IDE4LjAwMDEgOS45OTc4NkMxNy40NTAxIDkuOTk3ODYgMTcuMDAw''@;'; put 'put ''MSAxMC40NDc3IDE3LjAwMDEgMTAuOTk3NVYyMS45OTM2QzE3LjAwMDEgMjIuNTQzNCAxNy40NTAxIDIyLjk5MzIgMTguMDAwMSAyMi45OTMyWk0zMy41NjAxIDI3LjIxMTdMMjAuNzgwMSA1LjU3OTQ0QzIwLjIwMDEgNC41ODk3OSAxOS4xNjAxIDQgMTguMDAwMSA0QzE2Ljg0MDEgNCAxNS44''@;'; put 'put ''MDAxIDQuNTg5NzkgMTUuMjIwMSA1LjU3OTQ0TDIuNDQwMSAyNy4yMTE3QzEuODUwMSAyOC4yMTE0IDEuODUwMSAyOS40MDA5IDIuNDMwMSAzMC40MDA2QzMuMDEwMSAzMS40MDAyIDQuMDYwMSAzMiA1LjIyMDEgMzJIMzAuNzcwMUMzMS45NDAxIDMyIDMyLjk4MDEgMzEuNDAwMiAzMy41NjAx''@;'; put 'put ''IDMwLjQwMDZDMzQuMTQwMSAyOS40MDA5IDM0LjE0MDEgMjguMjExNCAzMy41NTAxIDI3LjIxMTdIMzMuNTYwMVpNMzEuODEwMSAyOS40MDA5QzMxLjcxMDEgMjkuNTgwOSAzMS40MDAxIDI5Ljk5MDcgMzAuNzgwMSAyOS45OTA3SDUuMjMwMUM0LjYxMDEgMjkuOTkwNyA0LjMwMDEgMjkuNTgw''@;'; put 'put ''OSA0LjIwMDEgMjkuNDAwOUM0LjEwMDEgMjkuMjIxIDMuODkwMSAyOC43NTEyIDQuMjAwMSAyOC4yMzEzTDE2Ljk4MDEgNi41ODkwOEMxNy4yOTAxIDYuMDY5MjYgMTcuODAwMSA2LjAwOTI4IDE4LjAwMDEgNi4wMDkyOEMxOC4yMDAxIDYuMDA5MjggMTguNzEwMSA2LjA2OTI2IDE5LjAyMDEg''@;'; put 'put ''Ni41ODkwOEwzMS43OTAxIDI4LjIyMTNDMzIuMTAwMSAyOC43NTEyIDMxLjkwMDEgMjkuMjIxIDMxLjc5MDEgMjkuMzkwOUwzMS44MTAxIDI5LjQwMDlaTTE4LjAxMDEgMjUuMDAyNUMxNy4yODAxIDI1LjAwMjUgMTYuNjgwMSAyNS42MDIzIDE2LjY4MDEgMjYuMzMyQzE2LjY4MDEgMjcuMDYx''@;'; put 'put ''OCAxNy4yODAxIDI3LjY2MTUgMTguMDEwMSAyNy42NjE1QzE4Ljc0MDEgMjcuNjYxNSAxOS4zNDAxIDI3LjA2MTggMTkuMzQwMSAyNi4zMzJDMTkuMzQwMSAyNS42MDIzIDE4Ljc0MDEgMjUuMDAyNSAxOC4wMTAxIDI1LjAwMjVaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTMzLjU2MDEgMjcuMjJM''@;'; put 'put ''MjAuNzgwMSA1LjU4QzIwLjIwMDEgNC41OSAxOS4xNjAxIDQgMTguMDAwMSA0QzE2Ljg0MDEgNCAxNS44MDAxIDQuNTkgMTUuMjIwMSA1LjU4TDIuNDQwMDYgMjcuMjJDMS44NTAwNiAyOC4yMiAxLjg1MDA2IDI5LjQxIDIuNDQwMDYgMzAuNDFDMy4wMjAwNiAzMS40MSA0LjA3MDA2IDMyLjAx''@;'; put 'put ''IDUuMjMwMDYgMzIuMDFIMzAuNzgwMUMzMS45NTAxIDMyLjAxIDMyLjk5MDEgMzEuNDEgMzMuNTcwMSAzMC40MUMzNC4xNTAxIDI5LjQxIDM0LjE1MDEgMjguMjIgMzMuNTYwMSAyNy4yMlpNMTYuOTAwMSAxMUMxNi45MDAxIDEwLjM5IDE3LjM5MDEgOS45IDE4LjAwMDEgOS45QzE4LjYxMDEg''@;'; put 'put ''OS45IDE5LjEwMDEgMTAuMzkgMTkuMTAwMSAxMVYyMkMxOS4xMDAxIDIyLjYxIDE4LjYxMDEgMjMuMSAxOC4wMDAxIDIzLjFDMTcuMzkwMSAyMy4xIDE2LjkwMDEgMjIuNjEgMTYuOTAwMSAyMlYxMVpNMTguMDAwMSAyNy43NkMxNy4yMTAxIDI3Ljc2IDE2LjU3MDEgMjcuMTIgMTYuNTcwMSAy''@;'; put 'put ''Ni4zM0MxNi41NzAxIDI1LjU0IDE3LjIxMDEgMjQuOSAxOC4wMDAxIDI0LjlDMTguNzkwMSAyNC45IDE5LjQzMDEgMjUuNTQgMTkuNDMwMSAyNi4zM0MxOS40MzAxIDI3LjEyIDE4Ljc5MDEgMjcuNzYgMTguMDAwMSAyNy43NloiLz4nfV0sRU9lPVsiY2lyY2xlIix7b3V0bGluZTonPHBhdGgg''@;'; put 'put ''ZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik00IDE4QzQgMTAuMjY4IDEwLjI2OCA0IDE4IDRDMjUuNzMyIDQgMzIgMTAuMjY4IDMyIDE4QzMyIDI1LjczMiAyNS43MzIgMzIgMTggMzJDMTAuMjY4IDMyIDQgMjUuNzMyIDQgMThaTTYgMThDNiAyNC42Mjc0IDEx''@;'; put 'put ''LjM3MjYgMzAgMTggMzBDMjEuMTgyNiAzMCAyNC4yMzQ4IDI4LjczNTcgMjYuNDg1MyAyNi40ODUzQzI4LjczNTcgMjQuMjM0OCAzMCAyMS4xODI2IDMwIDE4QzMwIDExLjM3MjYgMjQuNjI3NCA2IDE4IDZDMTEuMzcyNiA2IDYgMTEuMzcyNiA2IDE4WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik0x''@;'; put 'put ''OCA0QzEwLjI2OCA0IDQgMTAuMjY4IDQgMThDNCAyNS43MzIgMTAuMjY4IDMyIDE4IDMyQzI1LjczMiAzMiAzMiAyNS43MzIgMzIgMThDMzIgMTAuMjY4IDI1LjczMiA0IDE4IDRaIi8+J31dLFRPZT1bImRvdC1jaXJjbGUiLHtvdXRsaW5lOic8cGF0aCBkPSJNMTggMTFDMTkuMzg0NSAxMSAy''@;'; put 'put ''MC43Mzc5IDExLjQxMDUgMjEuODg5IDEyLjE3OTdDMjMuMDQwMSAxMi45NDg5IDIzLjkzNzQgMTQuMDQyMSAyNC40NjcyIDE1LjMyMTJDMjQuOTk3IDE2LjYwMDMgMjUuMTM1NiAxOC4wMDc4IDI0Ljg2NTUgMTkuMzY1NkMyNC41OTU0IDIwLjcyMzUgMjMuOTI4NyAyMS45NzA4IDIyLjk0OTgg''@;'; put 'put ''MjIuOTQ5OEMyMS45NzA4IDIzLjkyODcgMjAuNzIzNSAyNC41OTU0IDE5LjM2NTYgMjQuODY1NUMxOC4wMDc4IDI1LjEzNTYgMTYuNjAwMyAyNC45OTcgMTUuMzIxMiAyNC40NjcyQzE0LjA0MjEgMjMuOTM3NCAxMi45NDg5IDIzLjA0MDEgMTIuMTc5NyAyMS44ODlDMTEuNDEwNSAyMC43Mzc5''@;'; put 'put ''IDExIDE5LjM4NDUgMTEgMThDMTEgMTYuMTQzNSAxMS43Mzc1IDE0LjM2MyAxMy4wNTAzIDEzLjA1MDNDMTQuMzYzIDExLjczNzUgMTYuMTQzNSAxMSAxOCAxMVoiLz48cGF0aCBkPSJNMTggMzRDMTQuODM1NSAzNCAxMS43NDIxIDMzLjA2MTYgOS4xMTA4OCAzMS4zMDM1QzYuNDc5NyAyOS41''@;'; put 'put ''NDU0IDQuNDI4OTQgMjcuMDQ2NiAzLjIxNzkzIDI0LjEyMjlDMi4wMDY5MyAyMS4xOTkzIDEuNjkwMDggMTcuOTgyMyAyLjMwNzQ0IDE0Ljg3ODZDMi45MjQ4MSAxMS43NzQ5IDQuNDQ4NjYgOC45MjM5NCA2LjY4NjMgNi42ODYzQzguOTIzOTQgNC40NDg2NiAxMS43NzQ5IDIuOTI0ODEgMTQu''@;'; put 'put ''ODc4NiAyLjMwNzQ0QzE3Ljk4MjMgMS42OTAwOCAyMS4xOTkzIDIuMDA2OTMgMjQuMTIyOSAzLjIxNzkzQzI3LjA0NjYgNC40Mjg5NCAyOS41NDU0IDYuNDc5NyAzMS4zMDM1IDkuMTEwODhDMzMuMDYxNiAxMS43NDIxIDM0IDE0LjgzNTUgMzQgMThDMzQgMjIuMjQzNSAzMi4zMTQzIDI2LjMx''@;'; put 'put ''MzEgMjkuMzEzNyAyOS4zMTM3QzI2LjMxMzEgMzIuMzE0MyAyMi4yNDM1IDM0IDE4IDM0Wk0xOCA0LjAwMDAxQzE1LjIzMTEgNC4wMDAwMSAxMi41MjQzIDQuODIxMDkgMTAuMjIyIDYuMzU5NDNDNy45MTk3NCA3Ljg5Nzc3IDYuMTI1MzIgMTAuMDg0MyA1LjA2NTY5IDEyLjY0MjRDNC4wMDYw''@;'; put 'put ''NyAxNS4yMDA2IDMuNzI4ODIgMTguMDE1NSA0LjI2OTAxIDIwLjczMTNDNC44MDkyMSAyMy40NDcgNi4xNDI1OCAyNS45NDE2IDguMTAwNTEgMjcuODk5NUMxMC4wNTg0IDI5Ljg1NzQgMTIuNTUzIDMxLjE5MDggMTUuMjY4NyAzMS43MzFDMTcuOTg0NSAzMi4yNzEyIDIwLjc5OTQgMzEuOTkz''@;'; put 'put ''OSAyMy4zNTc2IDMwLjkzNDNDMjUuOTE1NyAyOS44NzQ3IDI4LjEwMjIgMjguMDgwMyAyOS42NDA2IDI1Ljc3OEMzMS4xNzg5IDIzLjQ3NTcgMzIgMjAuNzY4OSAzMiAxOEMzMiAxNC4yODcgMzAuNTI1IDEwLjcyNiAyNy44OTk1IDguMTAwNTFDMjUuMjc0IDUuNDc1IDIxLjcxMyA0LjAwMDAx''@;'; put 'put ''IDE4IDQuMDAwMDFaIi8+J31dO2Z1bmN0aW9uIEFPZShjLGwpe3JldHVybiBjPT09bH1jbGFzcyBET2UgZXh0ZW5kcyBxdHtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKCl9c2NoZWR1bGUobCxhPTApe3JldHVybiB0aGlzfX1jb25zdCBwTD17c2V0SW50ZXJ2YWwoYyxsLC4uLmEpe2NvbnN0e2Rl''@;'; put 'put ''bGVnYXRlOmR9PXBMO3JldHVybiBkPy5zZXRJbnRlcnZhbD9kLnNldEludGVydmFsKGMsbCwuLi5hKTpzZXRJbnRlcnZhbChjLGwsLi4uYSl9LGNsZWFySW50ZXJ2YWwoYyl7Y29uc3R7ZGVsZWdhdGU6bH09cEw7cmV0dXJuKGw/LmNsZWFySW50ZXJ2YWx8fGNsZWFySW50ZXJ2YWwpKGMpfSxk''@;'; put 'put ''ZWxlZ2F0ZTp2b2lkIDB9O2NsYXNzIFFXIGV4dGVuZHMgRE9le2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxhKSx0aGlzLnNjaGVkdWxlcj1sLHRoaXMud29yaz1hLHRoaXMucGVuZGluZz0hMX1zY2hlZHVsZShsLGE9MCl7dmFyIGQ7aWYodGhpcy5jbG9zZWQpcmV0dXJuIHRoaXM7dGhpcy5z''@;'; put 'put ''dGF0ZT1sO2NvbnN0IGg9dGhpcy5pZCxmPXRoaXMuc2NoZWR1bGVyO3JldHVybiBudWxsIT1oJiYodGhpcy5pZD10aGlzLnJlY3ljbGVBc3luY0lkKGYsaCxhKSksdGhpcy5wZW5kaW5nPSEwLHRoaXMuZGVsYXk9YSx0aGlzLmlkPW51bGwhPT0oZD10aGlzLmlkKSYmdm9pZCAwIT09ZD9kOnRo''@;'; put 'put ''aXMucmVxdWVzdEFzeW5jSWQoZix0aGlzLmlkLGEpLHRoaXN9cmVxdWVzdEFzeW5jSWQobCxhLGQ9MCl7cmV0dXJuIHBMLnNldEludGVydmFsKGwuZmx1c2guYmluZChsLHRoaXMpLGQpfXJlY3ljbGVBc3luY0lkKGwsYSxkPTApe2lmKG51bGwhPWQmJnRoaXMuZGVsYXk9PT1kJiYhMT09PXRo''@;'; put 'put ''aXMucGVuZGluZylyZXR1cm4gYTtudWxsIT1hJiZwTC5jbGVhckludGVydmFsKGEpfWV4ZWN1dGUobCxhKXtpZih0aGlzLmNsb3NlZClyZXR1cm4gbmV3IEVycm9yKCJleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uIik7dGhpcy5wZW5kaW5nPSExO2NvbnN0IGQ9dGhpcy5fZXhlY3V0ZShs''@;'; put 'put ''LGEpO2lmKGQpcmV0dXJuIGQ7ITE9PT10aGlzLnBlbmRpbmcmJm51bGwhPXRoaXMuaWQmJih0aGlzLmlkPXRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsdGhpcy5pZCxudWxsKSl9X2V4ZWN1dGUobCxhKXtsZXQgaCxkPSExO3RyeXt0aGlzLndvcmsobCl9Y2F0Y2goZil7ZD0h''@;'; put 'put ''MCxoPWZ8fG5ldyBFcnJvcigiU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvciIpfWlmKGQpcmV0dXJuIHRoaXMudW5zdWJzY3JpYmUoKSxofXVuc3Vic2NyaWJlKCl7aWYoIXRoaXMuY2xvc2VkKXtjb25zdHtpZDpsLHNjaGVkdWxlcjphfT10aGlzLHthY3Rpb25zOmR9PWE7dGhp''@;'; put 'put ''cy53b3JrPXRoaXMuc3RhdGU9dGhpcy5zY2hlZHVsZXI9bnVsbCx0aGlzLnBlbmRpbmc9ITEsZHQoZCx0aGlzKSxudWxsIT1sJiYodGhpcy5pZD10aGlzLnJlY3ljbGVBc3luY0lkKGEsbCxudWxsKSksdGhpcy5kZWxheT1udWxsLHN1cGVyLnVuc3Vic2NyaWJlKCl9fX1jb25zdCBlWT17bm93''@;'; put 'put ''OigpPT4oZVkuZGVsZWdhdGV8fERhdGUpLm5vdygpLGRlbGVnYXRlOnZvaWQgMH07Y2xhc3MgbXh7Y29uc3RydWN0b3IobCxhPW14Lm5vdyl7dGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yPWwsdGhpcy5ub3c9YX1zY2hlZHVsZShsLGE9MCxkKXtyZXR1cm4gbmV3IHRoaXMuc2NoZWR1bGVyQWN0''@;'; put 'put ''aW9uQ3Rvcih0aGlzLGwpLnNjaGVkdWxlKGQsYSl9fW14Lm5vdz1lWS5ub3c7Y2xhc3MgdFkgZXh0ZW5kcyBteHtjb25zdHJ1Y3RvcihsLGE9bXgubm93KXtzdXBlcihsLGEpLHRoaXMuYWN0aW9ucz1bXSx0aGlzLl9hY3RpdmU9ITF9Zmx1c2gobCl7Y29uc3R7YWN0aW9uczphfT10aGlzO2lm''@;'; put 'put ''KHRoaXMuX2FjdGl2ZSlyZXR1cm4gdm9pZCBhLnB1c2gobCk7bGV0IGQ7dGhpcy5fYWN0aXZlPSEwO2Rve2lmKGQ9bC5leGVjdXRlKGwuc3RhdGUsbC5kZWxheSkpYnJlYWt9d2hpbGUobD1hLnNoaWZ0KCkpO2lmKHRoaXMuX2FjdGl2ZT0hMSxkKXtmb3IoO2w9YS5zaGlmdCgpOylsLnVuc3Vi''@;'; put 'put ''c2NyaWJlKCk7dGhyb3cgZH19fWNvbnN0IGdMPW5ldyB0WShRVyksSU9lPWdMO2Z1bmN0aW9uIHVtKGMsbD1nTCl7cmV0dXJuIEJpKChhLGQpPT57bGV0IGg9bnVsbCxmPW51bGwsdj1udWxsO2NvbnN0IE09KCk9PntpZihoKXtoLnVuc3Vic2NyaWJlKCksaD1udWxsO2NvbnN0IFo9ZjtmPW51''@;'; put 'put ''bGwsZC5uZXh0KFopfX07ZnVuY3Rpb24gRCgpe2NvbnN0IFo9ditjLG5lPWwubm93KCk7aWYobmU8WilyZXR1cm4gaD10aGlzLnNjaGVkdWxlKHZvaWQgMCxaLW5lKSx2b2lkIGQuYWRkKGgpO00oKX1hLnN1YnNjcmliZShWaShkLFo9PntmPVosdj1sLm5vdygpLGh8fChoPWwuc2NoZWR1bGUo''@;'; put 'put ''RCxjKSxkLmFkZChoKSl9LCgpPT57TSgpLGQuY29tcGxldGUoKX0sdm9pZCAwLCgpPT57Zj1oPW51bGx9KSl9KX1jb25zdCBST2U9WyJhZGRMaXN0ZW5lciIsInJlbW92ZUxpc3RlbmVyIl0sTE9lPVsiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiXSxPT2U9WyJvbiIs''@;'; put 'put ''Im9mZiJdO2Z1bmN0aW9uIE1kKGMsbCxhLGQpe2lmKCRlKGEpJiYoZD1hLGE9dm9pZCAwKSxkKXJldHVybiBNZChjLGwsYSkucGlwZShSWihkKSk7Y29uc3RbaCxmXT1mdW5jdGlvbiBIT2UoYyl7cmV0dXJuICRlKGMuYWRkRXZlbnRMaXN0ZW5lcikmJiRlKGMucmVtb3ZlRXZlbnRMaXN0ZW5l''@;'; put 'put ''cil9KGMpP0xPZS5tYXAodj0+TT0+Y1t2XShsLE0sYSkpOmZ1bmN0aW9uIFBPZShjKXtyZXR1cm4gJGUoYy5hZGRMaXN0ZW5lcikmJiRlKGMucmVtb3ZlTGlzdGVuZXIpfShjKT9ST2UubWFwKHkwZShjLGwpKTpmdW5jdGlvbiBGT2UoYyl7cmV0dXJuICRlKGMub24pJiYkZShjLm9mZil9KGMp''@;'; put 'put ''P09PZS5tYXAoeTBlKGMsbCkpOltdO2lmKCFoJiZEWihjKSlyZXR1cm4gTjAodj0+TWQodixsLGEpKShjMShjKSk7aWYoIWgpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBldmVudCB0YXJnZXQiKTtyZXR1cm4gbmV3IFh0KHY9Pntjb25zdCBNPSguLi5EKT0+di5uZXh0KDE8RC5sZW5n''@;'; put 'put ''dGg/RDpEWzBdKTtyZXR1cm4gaChNKSwoKT0+ZihNKX0pfWZ1bmN0aW9uIHkwZShjLGwpe3JldHVybiBhPT5kPT5jW2FdKGwsZCl9Y2xhc3MgdnggZXh0ZW5kcyBXbntjb25zdHJ1Y3RvcihsPTEvMCxhPTEvMCxkPWVZKXtzdXBlcigpLHRoaXMuX2J1ZmZlclNpemU9bCx0aGlzLl93aW5kb3dU''@;'; put 'put ''aW1lPWEsdGhpcy5fdGltZXN0YW1wUHJvdmlkZXI9ZCx0aGlzLl9idWZmZXI9W10sdGhpcy5faW5maW5pdGVUaW1lV2luZG93PSEwLHRoaXMuX2luZmluaXRlVGltZVdpbmRvdz1hPT09MS8wLHRoaXMuX2J1ZmZlclNpemU9TWF0aC5tYXgoMSxsKSx0aGlzLl93aW5kb3dUaW1lPU1hdGgubWF4''@;'; put 'put ''KDEsYSl9bmV4dChsKXtjb25zdHtpc1N0b3BwZWQ6YSxfYnVmZmVyOmQsX2luZmluaXRlVGltZVdpbmRvdzpoLF90aW1lc3RhbXBQcm92aWRlcjpmLF93aW5kb3dUaW1lOnZ9PXRoaXM7YXx8KGQucHVzaChsKSwhaCYmZC5wdXNoKGYubm93KCkrdikpLHRoaXMuX3RyaW1CdWZmZXIoKSxzdXBl''@;'; put 'put ''ci5uZXh0KGwpfV9zdWJzY3JpYmUobCl7dGhpcy5fdGhyb3dJZkNsb3NlZCgpLHRoaXMuX3RyaW1CdWZmZXIoKTtjb25zdCBhPXRoaXMuX2lubmVyU3Vic2NyaWJlKGwpLHtfaW5maW5pdGVUaW1lV2luZG93OmQsX2J1ZmZlcjpofT10aGlzLGY9aC5zbGljZSgpO2ZvcihsZXQgdj0wO3Y8Zi5s''@;'; put 'put ''ZW5ndGgmJiFsLmNsb3NlZDt2Kz1kPzE6MilsLm5leHQoZlt2XSk7cmV0dXJuIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMobCksYX1fdHJpbUJ1ZmZlcigpe2NvbnN0e19idWZmZXJTaXplOmwsX3RpbWVzdGFtcFByb3ZpZGVyOmEsX2J1ZmZlcjpkLF9pbmZpbml0ZVRpbWVXaW5kb3c6''@;'; put 'put ''aH09dGhpcyxmPShoPzE6MikqbDtpZihsPDEvMCYmZjxkLmxlbmd0aCYmZC5zcGxpY2UoMCxkLmxlbmd0aC1mKSwhaCl7Y29uc3Qgdj1hLm5vdygpO2xldCBNPTA7Zm9yKGxldCBEPTE7RDxkLmxlbmd0aCYmZFtEXTw9djtEKz0yKU09RDtNJiZkLnNwbGljZSgwLE0rMSl9fX1mdW5jdGlvbiBu''@;'; put 'put ''WShjLGwsLi4uYSl7aWYoITA9PT1sKXJldHVybiB2b2lkIGMoKTtpZighMT09PWwpcmV0dXJuO2NvbnN0IGQ9bmV3IGh0KHtuZXh0OigpPT57ZC51bnN1YnNjcmliZSgpLGMoKX19KTtyZXR1cm4gYzEobCguLi5hKSkuc3Vic2NyaWJlKGQpfWZ1bmN0aW9uIF8wZShjLGwsYSl7bGV0IGQsaD0h''@;'; put 'put ''MTtyZXR1cm4gYyYmIm9iamVjdCI9PXR5cGVvZiBjPyh7YnVmZmVyU2l6ZTpkPTEvMCx3aW5kb3dUaW1lOmw9MS8wLHJlZkNvdW50Omg9ITEsc2NoZWR1bGVyOmF9PWMpOmQ9Yz8/MS8wLGZ1bmN0aW9uIE5PZShjPXt9KXtjb25zdHtjb25uZWN0b3I6bD0oKCk9Pm5ldyBXbikscmVzZXRPbkVy''@;'; put 'put ''cm9yOmE9ITAscmVzZXRPbkNvbXBsZXRlOmQ9ITAscmVzZXRPblJlZkNvdW50WmVybzpoPSEwfT1jO3JldHVybiBmPT57bGV0IHYsTSxELFo9MCxuZT0hMSxjZT0hMTtjb25zdCBiZT0oKT0+e00/LnVuc3Vic2NyaWJlKCksTT12b2lkIDB9LEVlPSgpPT57YmUoKSx2PUQ9dm9pZCAwLG5lPWNl''@;'; put 'put ''PSExfSxCZT0oKT0+e2NvbnN0IHFlPXY7RWUoKSxxZT8udW5zdWJzY3JpYmUoKX07cmV0dXJuIEJpKChxZSxudCk9PntaKyssIWNlJiYhbmUmJmJlKCk7Y29uc3QgbHQ9RD1EPz9sKCk7bnQuYWRkKCgpPT57Wi0tLDA9PT1aJiYhY2UmJiFuZSYmKE09blkoQmUsaCkpfSksbHQuc3Vic2NyaWJl''@;'; put 'put ''KG50KSwhdiYmWj4wJiYodj1uZXcgaHQoe25leHQ6bXQ9Pmx0Lm5leHQobXQpLGVycm9yOm10PT57Y2U9ITAsYmUoKSxNPW5ZKEVlLGEsbXQpLGx0LmVycm9yKG10KX0sY29tcGxldGU6KCk9PntuZT0hMCxiZSgpLE09blkoRWUsZCksbHQuY29tcGxldGUoKX19KSxjMShxZSkuc3Vic2NyaWJl''@;'; put 'put ''KHYpKX0pKGYpfX0oe2Nvbm5lY3RvcjooKT0+bmV3IHZ4KGQsbCxhKSxyZXNldE9uRXJyb3I6ITAscmVzZXRPbkNvbXBsZXRlOiExLHJlc2V0T25SZWZDb3VudFplcm86aH0pfWZ1bmN0aW9uIGJ4KC4uLmMpe2NvbnN0IGw9Qk0oYyksYT1mdW5jdGlvbiBrTWUoYyxsKXtyZXR1cm4ibnVtYmVy''@;'; put 'put ''Ij09dHlwZW9mIElaKGMpP2MucG9wKCk6bH0oYywxLzApLGQ9YztyZXR1cm4gZC5sZW5ndGg/MT09PWQubGVuZ3RoP2MxKGRbMF0pOiRiKGEpKFd1KGQsbCkpOnkyfXZhciBBYT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLlN0YXRlPTBdPSJTdGF0ZSIsY1tjLlRyYW5zaXRpb249MV09IlRyYW5z''@;'; put 'put ''aXRpb24iLGNbYy5TZXF1ZW5jZT0yXT0iU2VxdWVuY2UiLGNbYy5Hcm91cD0zXT0iR3JvdXAiLGNbYy5BbmltYXRlPTRdPSJBbmltYXRlIixjW2MuS2V5ZnJhbWVzPTVdPSJLZXlmcmFtZXMiLGNbYy5TdHlsZT02XT0iU3R5bGUiLGNbYy5UcmlnZ2VyPTddPSJUcmlnZ2VyIixjW2MuUmVmZXJl''@;'; put 'put ''bmNlPThdPSJSZWZlcmVuY2UiLGNbYy5BbmltYXRlQ2hpbGQ9OV09IkFuaW1hdGVDaGlsZCIsY1tjLkFuaW1hdGVSZWY9MTBdPSJBbmltYXRlUmVmIixjW2MuUXVlcnk9MTFdPSJRdWVyeSIsY1tjLlN0YWdnZXI9MTJdPSJTdGFnZ2VyIixjfShBYXx8e30pO2NvbnN0IHRnPSIqIjtmdW5jdGlv''@;'; put 'put ''biBtaChjLGwpe3JldHVybnt0eXBlOkFhLlRyaWdnZXIsbmFtZTpjLGRlZmluaXRpb25zOmwsb3B0aW9uczp7fX19ZnVuY3Rpb24geDAoYyxsPW51bGwpe3JldHVybnt0eXBlOkFhLkFuaW1hdGUsc3R5bGVzOmwsdGltaW5nczpjfX1mdW5jdGlvbiBscyhjKXtyZXR1cm57dHlwZTpBYS5TdHls''@;'; put 'put ''ZSxzdHlsZXM6YyxvZmZzZXQ6bnVsbH19ZnVuY3Rpb24gbUwoYyxsLGEpe3JldHVybnt0eXBlOkFhLlN0YXRlLG5hbWU6YyxzdHlsZXM6bCxvcHRpb25zOmF9fWZ1bmN0aW9uIEJPZShjKXtyZXR1cm57dHlwZTpBYS5LZXlmcmFtZXMsc3RlcHM6Y319ZnVuY3Rpb24gcnUoYyxsLGE9bnVsbCl7''@;'; put 'put ''cmV0dXJue3R5cGU6QWEuVHJhbnNpdGlvbixleHByOmMsYW5pbWF0aW9uOmwsb3B0aW9uczphfX1jbGFzcyB5eHtjb25zdHJ1Y3RvcihsPTAsYT0wKXt0aGlzLl9vbkRvbmVGbnM9W10sdGhpcy5fb25TdGFydEZucz1bXSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10sdGhpcy5fb3JpZ2luYWxPbkRv''@;'; put 'put ''bmVGbnM9W10sdGhpcy5fb3JpZ2luYWxPblN0YXJ0Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3Bvc2l0aW9uPTAsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLnRvdGFsVGltZT1sK2F9X29uRmluaXNoKCl7dGhp''@;'; put 'put ''cy5fZmluaXNoZWR8fCh0aGlzLl9maW5pc2hlZD0hMCx0aGlzLl9vbkRvbmVGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRG9uZUZucz1bXSl9b25TdGFydChsKXt0aGlzLl9vcmlnaW5hbE9uU3RhcnRGbnMucHVzaChsKSx0aGlzLl9vblN0YXJ0Rm5zLnB1c2gobCl9b25Eb25lKGwpe3Ro''@;'; put 'put ''aXMuX29yaWdpbmFsT25Eb25lRm5zLnB1c2gobCksdGhpcy5fb25Eb25lRm5zLnB1c2gobCl9b25EZXN0cm95KGwpe3RoaXMuX29uRGVzdHJveUZucy5wdXNoKGwpfWhhc1N0YXJ0ZWQoKXtyZXR1cm4gdGhpcy5fc3RhcnRlZH1pbml0KCl7fXBsYXkoKXt0aGlzLmhhc1N0YXJ0ZWQoKXx8KHRo''@;'; put 'put ''aXMuX29uU3RhcnQoKSx0aGlzLnRyaWdnZXJNaWNyb3Rhc2soKSksdGhpcy5fc3RhcnRlZD0hMH10cmlnZ2VyTWljcm90YXNrKCl7cXVldWVNaWNyb3Rhc2soKCk9PnRoaXMuX29uRmluaXNoKCkpfV9vblN0YXJ0KCl7dGhpcy5fb25TdGFydEZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25T''@;'; put 'put ''dGFydEZucz1bXX1wYXVzZSgpe31yZXN0YXJ0KCl7fWZpbmlzaCgpe3RoaXMuX29uRmluaXNoKCl9ZGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLmhhc1N0YXJ0ZWQoKXx8dGhpcy5fb25TdGFydCgpLHRoaXMuZmluaXNoKCksdGhpcy5fb25EZXN0''@;'; put 'put ''cm95Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vbkRlc3Ryb3lGbnM9W10pfXJlc2V0KCl7dGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9maW5pc2hlZD0hMSx0aGlzLl9vblN0YXJ0Rm5zPXRoaXMuX29yaWdpbmFsT25TdGFydEZucyx0aGlzLl9vbkRvbmVGbnM9dGhpcy5fb3JpZ2luYWxPbkRv''@;'; put 'put ''bmVGbnN9c2V0UG9zaXRpb24obCl7dGhpcy5fcG9zaXRpb249dGhpcy50b3RhbFRpbWU/bCp0aGlzLnRvdGFsVGltZToxfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMudG90YWxUaW1lP3RoaXMuX3Bvc2l0aW9uL3RoaXMudG90YWxUaW1lOjF9dHJpZ2dlckNhbGxiYWNrKGwpe2NvbnN0IGE9''@;'; put 'put ''InN0YXJ0Ij09bD90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZuczthLmZvckVhY2goZD0+ZCgpKSxhLmxlbmd0aD0wfX1jbGFzcyB3MGV7Y29uc3RydWN0b3IobCl7dGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3Rh''@;'; put 'put ''cnRlZD0hMSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMucGFyZW50UGxheWVyPW51bGwsdGhpcy50b3RhbFRpbWU9MCx0aGlzLnBsYXllcnM9bDtsZXQgYT0wLGQ9MCxoPTA7Y29uc3QgZj10aGlzLnBsYXllcnMubGVuZ3RoOzA9PWY/cXVldWVNaWNyb3Rh''@;'; put 'put ''c2soKCk9PnRoaXMuX29uRmluaXNoKCkpOnRoaXMucGxheWVycy5mb3JFYWNoKHY9Pnt2Lm9uRG9uZSgoKT0+eysrYT09ZiYmdGhpcy5fb25GaW5pc2goKX0pLHYub25EZXN0cm95KCgpPT57KytkPT1mJiZ0aGlzLl9vbkRlc3Ryb3koKX0pLHYub25TdGFydCgoKT0+eysraD09ZiYmdGhpcy5f''@;'; put 'put ''b25TdGFydCgpfSl9KSx0aGlzLnRvdGFsVGltZT10aGlzLnBsYXllcnMucmVkdWNlKCh2LE0pPT5NYXRoLm1heCh2LE0udG90YWxUaW1lKSwwKX1fb25GaW5pc2goKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKGw9PmwoKSksdGhp''@;'; put 'put ''cy5fb25Eb25lRm5zPVtdKX1pbml0KCl7dGhpcy5wbGF5ZXJzLmZvckVhY2gobD0+bC5pbml0KCkpfW9uU3RhcnQobCl7dGhpcy5fb25TdGFydEZucy5wdXNoKGwpfV9vblN0YXJ0KCl7dGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9zdGFydGVkPSEwLHRoaXMuX29uU3RhcnRGbnMuZm9yRWFj''@;'; put 'put ''aChsPT5sKCkpLHRoaXMuX29uU3RhcnRGbnM9W10pfW9uRG9uZShsKXt0aGlzLl9vbkRvbmVGbnMucHVzaChsKX1vbkRlc3Ryb3kobCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2gobCl9aGFzU3RhcnRlZCgpe3JldHVybiB0aGlzLl9zdGFydGVkfXBsYXkoKXt0aGlzLnBhcmVudFBsYXllcnx8''@;'; put 'put ''dGhpcy5pbml0KCksdGhpcy5fb25TdGFydCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGw9PmwucGxheSgpKX1wYXVzZSgpe3RoaXMucGxheWVycy5mb3JFYWNoKGw9PmwucGF1c2UoKSl9cmVzdGFydCgpe3RoaXMucGxheWVycy5mb3JFYWNoKGw9PmwucmVzdGFydCgpKX1maW5pc2goKXt0aGlz''@;'; put 'put ''Ll9vbkZpbmlzaCgpLHRoaXMucGxheWVycy5mb3JFYWNoKGw9PmwuZmluaXNoKCkpfWRlc3Ryb3koKXt0aGlzLl9vbkRlc3Ryb3koKX1fb25EZXN0cm95KCl7dGhpcy5fZGVzdHJveWVkfHwodGhpcy5fZGVzdHJveWVkPSEwLHRoaXMuX29uRmluaXNoKCksdGhpcy5wbGF5ZXJzLmZvckVhY2go''@;'; put 'put ''bD0+bC5kZXN0cm95KCkpLHRoaXMuX29uRGVzdHJveUZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25EZXN0cm95Rm5zPVtdKX1yZXNldCgpe3RoaXMucGxheWVycy5mb3JFYWNoKGw9PmwucmVzZXQoKSksdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMuX3N0YXJ0''@;'; put 'put ''ZWQ9ITF9c2V0UG9zaXRpb24obCl7Y29uc3QgYT1sKnRoaXMudG90YWxUaW1lO3RoaXMucGxheWVycy5mb3JFYWNoKGQ9Pntjb25zdCBoPWQudG90YWxUaW1lP01hdGgubWluKDEsYS9kLnRvdGFsVGltZSk6MTtkLnNldFBvc2l0aW9uKGgpfSl9Z2V0UG9zaXRpb24oKXtjb25zdCBsPXRoaXMu''@;'; put 'put ''cGxheWVycy5yZWR1Y2UoKGEsZCk9Pm51bGw9PT1hfHxkLnRvdGFsVGltZT5hLnRvdGFsVGltZT9kOmEsbnVsbCk7cmV0dXJuIG51bGwhPWw/bC5nZXRQb3NpdGlvbigpOjB9YmVmb3JlRGVzdHJveSgpe3RoaXMucGxheWVycy5mb3JFYWNoKGw9PntsLmJlZm9yZURlc3Ryb3kmJmwuYmVmb3Jl''@;'; put 'put ''RGVzdHJveSgpfSl9dHJpZ2dlckNhbGxiYWNrKGwpe2NvbnN0IGE9InN0YXJ0Ij09bD90aGlzLl9vblN0YXJ0Rm5zOnRoaXMuX29uRG9uZUZuczthLmZvckVhY2goZD0+ZCgpKSxhLmxlbmd0aD0wfX1sZXQgaVk7dHJ5e2lZPXR5cGVvZiBJbnRsPCJ1IiYmSW50bC52OEJyZWFrSXRlcmF0b3J9''@;'; put 'put ''Y2F0Y2h7aVk9ITF9bGV0IHd4LF94PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fcGxhdGZvcm1JZD1hLHRoaXMuaXNCcm93c2VyPXRoaXMuX3BsYXRmb3JtSWQ/WHModGhpcy5fcGxhdGZvcm1JZCk6Im9iamVjdCI9PXR5cGVvZiBkb2N1bWVudCYmISFkb2N1bWVudCx0aGlz''@;'; put 'put ''LkVER0U9dGhpcy5pc0Jyb3dzZXImJi8oZWRnZSkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHRoaXMuVFJJREVOVD10aGlzLmlzQnJvd3NlciYmLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLkJMSU5LPXRoaXMuaXNCcm93c2VyJiYhKCF3aW5k''@;'; put 'put ''b3cuY2hyb21lJiYhaVkpJiZ0eXBlb2YgQ1NTPCJ1IiYmIXRoaXMuRURHRSYmIXRoaXMuVFJJREVOVCx0aGlzLldFQktJVD10aGlzLmlzQnJvd3NlciYmL0FwcGxlV2ViS2l0L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmIXRoaXMuQkxJTksmJiF0aGlzLkVER0UmJiF0aGlzLlRSSURF''@;'; put 'put ''TlQsdGhpcy5JT1M9dGhpcy5pc0Jyb3dzZXImJi9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhKCJNU1N0cmVhbSJpbiB3aW5kb3cpLHRoaXMuRklSRUZPWD10aGlzLmlzQnJvd3NlciYmLyhmaXJlZm94fG1pbmVmaWVsZCkvaS50ZXN0KG5hdmlnYXRvci51''@;'; put 'put ''c2VyQWdlbnQpLHRoaXMuQU5EUk9JRD10aGlzLmlzQnJvd3NlciYmL2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpJiYhdGhpcy5UUklERU5ULHRoaXMuU0FGQVJJPXRoaXMuaXNCcm93c2VyJiYvc2FmYXJpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSYmdGhpcy5XRUJL''@;'; put 'put ''SVR9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoTXIob2EpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBTeShj''@;'; put 'put ''KXtyZXR1cm4gZnVuY3Rpb24gV09lKCl7aWYobnVsbD09d3gmJnR5cGVvZiB3aW5kb3c8InUiKXRyeXt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidGVzdCIsbnVsbCxPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sInBhc3NpdmUiLHtnZXQ6KCk9Pnd4PSEwfSkpfWZpbmFsbHl7d3g9d3h8fCEx''@;'; put 'put ''fXJldHVybiB3eH0oKT9jOiEhYy5jYXB0dXJlfXZhciBncD1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5PUk1BTD0wXT0iTk9STUFMIixjW2MuTkVHQVRFRD0xXT0iTkVHQVRFRCIsY1tjLklOVkVSVEVEPTJdPSJJTlZFUlRFRCIsY30oZ3B8fHt9KTtsZXQgdkwsczcsb1k7ZnVuY3Rpb24gQ3go''@;'; put 'put ''KXtpZigib2JqZWN0IiE9dHlwZW9mIGRvY3VtZW50fHwhZG9jdW1lbnQpcmV0dXJuIGdwLk5PUk1BTDtpZihudWxsPT12TCl7Y29uc3QgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxsPWMuc3R5bGU7Yy5kaXI9InJ0bCIsbC53aWR0aD0iMXB4IixsLm92ZXJmbG93PSJhdXRvIixs''@;'; put 'put ''LnZpc2liaWxpdHk9ImhpZGRlbiIsbC5wb2ludGVyRXZlbnRzPSJub25lIixsLnBvc2l0aW9uPSJhYnNvbHV0ZSI7Y29uc3QgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxkPWEuc3R5bGU7ZC53aWR0aD0iMnB4IixkLmhlaWdodD0iMXB4IixjLmFwcGVuZENoaWxkKGEpLGRvY3Vt''@;'; put 'put ''ZW50LmJvZHkuYXBwZW5kQ2hpbGQoYyksdkw9Z3AuTk9STUFMLDA9PT1jLnNjcm9sbExlZnQmJihjLnNjcm9sbExlZnQ9MSx2TD0wPT09Yy5zY3JvbGxMZWZ0P2dwLk5FR0FURUQ6Z3AuSU5WRVJURUQpLGMucmVtb3ZlKCl9cmV0dXJuIHZMfWZ1bmN0aW9uIFMwZShjKXtpZihmdW5jdGlvbiBH''@;'; put 'put ''T2UoKXtpZihudWxsPT1vWSl7Y29uc3QgYz10eXBlb2YgZG9jdW1lbnQ8InUiP2RvY3VtZW50LmhlYWQ6bnVsbDtvWT0hKCFjfHwhYy5jcmVhdGVTaGFkb3dSb290JiYhYy5hdHRhY2hTaGFkb3cpfXJldHVybiBvWX0oKSl7Y29uc3QgbD1jLmdldFJvb3ROb2RlP2MuZ2V0Um9vdE5vZGUoKTpu''@;'; put 'put ''dWxsO2lmKHR5cGVvZiBTaGFkb3dSb290PCJ1IiYmU2hhZG93Um9vdCYmbCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpcmV0dXJuIGx9cmV0dXJuIG51bGx9ZnVuY3Rpb24gYkwoYyl7cmV0dXJuIGMuY29tcG9zZWRQYXRoP2MuY29tcG9zZWRQYXRoKClbMF06Yy50YXJnZXR9bGV0IHZQZT0oKCk9''@;'; put 'put ''PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX3BsYXRmb3JtPWF9aXNEaXNhYmxlZChhKXtyZXR1cm4gYS5oYXNBdHRyaWJ1dGUoImRpc2FibGVkIil9aXNWaXNpYmxlKGEpe3JldHVybiBmdW5jdGlvbiB5UGUoYyl7cmV0dXJuISEoYy5vZmZzZXRXaWR0aHx8Yy5vZmZzZXRIZWlnaHR8''@;'; put 'put ''fCJmdW5jdGlvbiI9PXR5cGVvZiBjLmdldENsaWVudFJlY3RzJiZjLmdldENsaWVudFJlY3RzKCkubGVuZ3RoKX0oYSkmJiJ2aXNpYmxlIj09PWdldENvbXB1dGVkU3R5bGUoYSkudmlzaWJpbGl0eX1pc1RhYmJhYmxlKGEpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpcmV0dXJuITE7''@;'; put 'put ''Y29uc3QgZD1mdW5jdGlvbiBiUGUoYyl7dHJ5e3JldHVybiBjLmZyYW1lRWxlbWVudH1jYXRjaHtyZXR1cm4gbnVsbH19KGZ1bmN0aW9uIFRQZShjKXtyZXR1cm4gYy5vd25lckRvY3VtZW50JiZjLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvd30oYSkpO2lmKGQmJigtMT09PVQw''@;'; put 'put ''ZShkKXx8IXRoaXMuaXNWaXNpYmxlKGQpKSlyZXR1cm4hMTtsZXQgaD1hLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksZj1UMGUoYSk7cmV0dXJuIGEuaGFzQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKT8tMSE9PWY6ISgiaWZyYW1lIj09PWh8fCJvYmplY3QiPT09aHx8dGhpcy5fcGxhdGZv''@;'; put 'put ''cm0uV0VCS0lUJiZ0aGlzLl9wbGF0Zm9ybS5JT1MmJiFmdW5jdGlvbiB4UGUoYyl7bGV0IGw9Yy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLGE9ImlucHV0Ij09PWwmJmMudHlwZTtyZXR1cm4idGV4dCI9PT1hfHwicGFzc3dvcmQiPT09YXx8InNlbGVjdCI9PT1sfHwidGV4dGFyZWEiPT09bH0o''@;'; put 'put ''YSkpJiYoImF1ZGlvIj09PWg/ISFhLmhhc0F0dHJpYnV0ZSgiY29udHJvbHMiKSYmLTEhPT1mOiJ2aWRlbyI9PT1oPy0xIT09ZiYmKG51bGwhPT1mfHx0aGlzLl9wbGF0Zm9ybS5GSVJFRk9YfHxhLmhhc0F0dHJpYnV0ZSgiY29udHJvbHMiKSk6YS50YWJJbmRleD49MCl9aXNGb2N1c2FibGUo''@;'; put 'put ''YSxkKXtyZXR1cm4gZnVuY3Rpb24gRVBlKGMpe3JldHVybiFmdW5jdGlvbiB3UGUoYyl7cmV0dXJuIGZ1bmN0aW9uIFNQZShjKXtyZXR1cm4iaW5wdXQiPT1jLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9KGMpJiYiaGlkZGVuIj09Yy50eXBlfShjKSYmKGZ1bmN0aW9uIF9QZShjKXtsZXQgbD1j''@;'; put 'put ''Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PWx8fCJzZWxlY3QiPT09bHx8ImJ1dHRvbiI9PT1sfHwidGV4dGFyZWEiPT09bH0oYyl8fGZ1bmN0aW9uIENQZShjKXtyZXR1cm4gZnVuY3Rpb24gTVBlKGMpe3JldHVybiJhIj09Yy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgp''@;'; put 'put ''fShjKSYmYy5oYXNBdHRyaWJ1dGUoImhyZWYiKX0oYyl8fGMuaGFzQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKXx8RTBlKGMpKX0oYSkmJiF0aGlzLmlzRGlzYWJsZWQoYSkmJihkPy5pZ25vcmVWaXNpYmlsaXR5fHx0aGlzLmlzVmlzaWJsZShhKSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoTXIoX3gpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBFMGUoYyl7aWYoIWMuaGFzQXR0cmlidXRlKCJ0''@;'; put 'put ''YWJpbmRleCIpfHx2b2lkIDA9PT1jLnRhYkluZGV4KXJldHVybiExO2xldCBsPWMuZ2V0QXR0cmlidXRlKCJ0YWJpbmRleCIpO3JldHVybiEoIWx8fGlzTmFOKHBhcnNlSW50KGwsMTApKSl9ZnVuY3Rpb24gVDBlKGMpe2lmKCFFMGUoYykpcmV0dXJuIG51bGw7Y29uc3QgbD1wYXJzZUludChj''@;'; put 'put ''LmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKXx8IiIsMTApO3JldHVybiBpc05hTihsKT8tMTpsfWNsYXNzIEEwZXtnZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLl9lbmFibGVkfXNldCBlbmFibGVkKGwpe3RoaXMuX2VuYWJsZWQ9bCx0aGlzLl9zdGFydEFuY2hvciYmdGhpcy5fZW5kQW5jaG9y''@;'; put 'put ''JiYodGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgobCx0aGlzLl9zdGFydEFuY2hvciksdGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgobCx0aGlzLl9lbmRBbmNob3IpKX1jb25zdHJ1Y3RvcihsLGEsZCxoLGY9ITEpe3RoaXMuX2VsZW1lbnQ9bCx0aGlzLl9jaGVja2VyPWEsdGhpcy5fbmda''@;'; put 'put ''b25lPWQsdGhpcy5fZG9jdW1lbnQ9aCx0aGlzLl9oYXNBdHRhY2hlZD0hMSx0aGlzLnN0YXJ0QW5jaG9yTGlzdGVuZXI9KCk9PnRoaXMuZm9jdXNMYXN0VGFiYmFibGVFbGVtZW50KCksdGhpcy5lbmRBbmNob3JMaXN0ZW5lcj0oKT0+dGhpcy5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KCks''@;'; put 'put ''dGhpcy5fZW5hYmxlZD0hMCxmfHx0aGlzLmF0dGFjaEFuY2hvcnMoKX1kZXN0cm95KCl7Y29uc3QgbD10aGlzLl9zdGFydEFuY2hvcixhPXRoaXMuX2VuZEFuY2hvcjtsJiYobC5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5zdGFydEFuY2hvckxpc3RlbmVyKSxsLnJlbW92ZSgp''@;'; put 'put ''KSxhJiYoYS5yZW1vdmVFdmVudExpc3RlbmVyKCJmb2N1cyIsdGhpcy5lbmRBbmNob3JMaXN0ZW5lciksYS5yZW1vdmUoKSksdGhpcy5fc3RhcnRBbmNob3I9dGhpcy5fZW5kQW5jaG9yPW51bGwsdGhpcy5faGFzQXR0YWNoZWQ9ITF9YXR0YWNoQW5jaG9ycygpe3JldHVybiEhdGhpcy5faGFz''@;'; put 'put ''QXR0YWNoZWR8fCh0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9zdGFydEFuY2hvcnx8KHRoaXMuX3N0YXJ0QW5jaG9yPXRoaXMuX2NyZWF0ZUFuY2hvcigpLHRoaXMuX3N0YXJ0QW5jaG9yLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLnN0YXJ0QW5jaG9y''@;'; put 'put ''TGlzdGVuZXIpKSx0aGlzLl9lbmRBbmNob3J8fCh0aGlzLl9lbmRBbmNob3I9dGhpcy5fY3JlYXRlQW5jaG9yKCksdGhpcy5fZW5kQW5jaG9yLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIix0aGlzLmVuZEFuY2hvckxpc3RlbmVyKSl9KSx0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUmJih0aGlz''@;'; put 'put ''Ll9lbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMuX3N0YXJ0QW5jaG9yLHRoaXMuX2VsZW1lbnQpLHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5fZW5kQW5jaG9yLHRoaXMuX2VsZW1lbnQubmV4dFNpYmxpbmcpLHRoaXMuX2hhc0F0dGFjaGVk''@;'; put 'put ''PSEwKSx0aGlzLl9oYXNBdHRhY2hlZCl9Zm9jdXNJbml0aWFsRWxlbWVudFdoZW5SZWFkeShsKXtyZXR1cm4gbmV3IFByb21pc2UoYT0+e3RoaXMuX2V4ZWN1dGVPblN0YWJsZSgoKT0+YSh0aGlzLmZvY3VzSW5pdGlhbEVsZW1lbnQobCkpKX0pfWZvY3VzRmlyc3RUYWJiYWJsZUVsZW1lbnRX''@;'; put 'put ''aGVuUmVhZHkobCl7cmV0dXJuIG5ldyBQcm9taXNlKGE9Pnt0aGlzLl9leGVjdXRlT25TdGFibGUoKCk9PmEodGhpcy5mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KGwpKSl9KX1mb2N1c0xhc3RUYWJiYWJsZUVsZW1lbnRXaGVuUmVhZHkobCl7cmV0dXJuIG5ldyBQcm9taXNlKGE9Pnt0aGlz''@;'; put 'put ''Ll9leGVjdXRlT25TdGFibGUoKCk9PmEodGhpcy5mb2N1c0xhc3RUYWJiYWJsZUVsZW1lbnQobCkpKX0pfV9nZXRSZWdpb25Cb3VuZGFyeShsKXtjb25zdCBhPXRoaXMuX2VsZW1lbnQucXVlcnlTZWxlY3RvckFsbChgW2Nkay1mb2N1cy1yZWdpb24tJHtsfV0sIFtjZGtGb2N1c1JlZ2lvbiR7''@;'; put 'put ''bH1dLCBbY2RrLWZvY3VzLSR7bH1dYCk7cmV0dXJuInN0YXJ0Ij09bD9hLmxlbmd0aD9hWzBdOnRoaXMuX2dldEZpcnN0VGFiYmFibGVFbGVtZW50KHRoaXMuX2VsZW1lbnQpOmEubGVuZ3RoP2FbYS5sZW5ndGgtMV06dGhpcy5fZ2V0TGFzdFRhYmJhYmxlRWxlbWVudCh0aGlzLl9lbGVtZW50''@;'; put 'put ''KX1mb2N1c0luaXRpYWxFbGVtZW50KGwpe2NvbnN0IGE9dGhpcy5fZWxlbWVudC5xdWVyeVNlbGVjdG9yKCJbY2RrLWZvY3VzLWluaXRpYWxdLCBbY2RrRm9jdXNJbml0aWFsXSIpO2lmKGEpe2lmKCF0aGlzLl9jaGVja2VyLmlzRm9jdXNhYmxlKGEpKXtjb25zdCBkPXRoaXMuX2dldEZpcnN0''@;'; put 'put ''VGFiYmFibGVFbGVtZW50KGEpO3JldHVybiBkPy5mb2N1cyhsKSwhIWR9cmV0dXJuIGEuZm9jdXMobCksITB9cmV0dXJuIHRoaXMuZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudChsKX1mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KGwpe2NvbnN0IGE9dGhpcy5fZ2V0UmVnaW9uQm91bmRhcnko''@;'; put 'put ''InN0YXJ0Iik7cmV0dXJuIGEmJmEuZm9jdXMobCksISFhfWZvY3VzTGFzdFRhYmJhYmxlRWxlbWVudChsKXtjb25zdCBhPXRoaXMuX2dldFJlZ2lvbkJvdW5kYXJ5KCJlbmQiKTtyZXR1cm4gYSYmYS5mb2N1cyhsKSwhIWF9aGFzQXR0YWNoZWQoKXtyZXR1cm4gdGhpcy5faGFzQXR0YWNoZWR9''@;'; put 'put ''X2dldEZpcnN0VGFiYmFibGVFbGVtZW50KGwpe2lmKHRoaXMuX2NoZWNrZXIuaXNGb2N1c2FibGUobCkmJnRoaXMuX2NoZWNrZXIuaXNUYWJiYWJsZShsKSlyZXR1cm4gbDtjb25zdCBhPWwuY2hpbGRyZW47Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspe2NvbnN0IGg9YVtkXS5ub2RlVHlw''@;'; put 'put ''ZT09PXRoaXMuX2RvY3VtZW50LkVMRU1FTlRfTk9ERT90aGlzLl9nZXRGaXJzdFRhYmJhYmxlRWxlbWVudChhW2RdKTpudWxsO2lmKGgpcmV0dXJuIGh9cmV0dXJuIG51bGx9X2dldExhc3RUYWJiYWJsZUVsZW1lbnQobCl7aWYodGhpcy5fY2hlY2tlci5pc0ZvY3VzYWJsZShsKSYmdGhpcy5f''@;'; put 'put ''Y2hlY2tlci5pc1RhYmJhYmxlKGwpKXJldHVybiBsO2NvbnN0IGE9bC5jaGlsZHJlbjtmb3IobGV0IGQ9YS5sZW5ndGgtMTtkPj0wO2QtLSl7Y29uc3QgaD1hW2RdLm5vZGVUeXBlPT09dGhpcy5fZG9jdW1lbnQuRUxFTUVOVF9OT0RFP3RoaXMuX2dldExhc3RUYWJiYWJsZUVsZW1lbnQoYVtk''@;'; put 'put ''XSk6bnVsbDtpZihoKXJldHVybiBofXJldHVybiBudWxsfV9jcmVhdGVBbmNob3IoKXtjb25zdCBsPXRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiB0aGlzLl90b2dnbGVBbmNob3JUYWJJbmRleCh0aGlzLl9lbmFibGVkLGwpLGwuY2xhc3NMaXN0LmFkZCgiY2Rr''@;'; put 'put ''LXZpc3VhbGx5LWhpZGRlbiIpLGwuY2xhc3NMaXN0LmFkZCgiY2RrLWZvY3VzLXRyYXAtYW5jaG9yIiksbC5zZXRBdHRyaWJ1dGUoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLGx9X3RvZ2dsZUFuY2hvclRhYkluZGV4KGwsYSl7bD9hLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCIwIik6YS5yZW1v''@;'; put 'put ''dmVBdHRyaWJ1dGUoInRhYmluZGV4Iil9dG9nZ2xlQW5jaG9ycyhsKXt0aGlzLl9zdGFydEFuY2hvciYmdGhpcy5fZW5kQW5jaG9yJiYodGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgobCx0aGlzLl9zdGFydEFuY2hvciksdGhpcy5fdG9nZ2xlQW5jaG9yVGFiSW5kZXgobCx0aGlzLl9lbmRB''@;'; put 'put ''bmNob3IpKX1fZXhlY3V0ZU9uU3RhYmxlKGwpe3RoaXMuX25nWm9uZS5pc1N0YWJsZT9sKCk6dGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoQmYoMSkpLnN1YnNjcmliZShsKX19bGV0IGFZPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX2NoZWNrZXI9YSx0aGlzLl9u''@;'; put 'put ''Z1pvbmU9ZCx0aGlzLl9kb2N1bWVudD1ofWNyZWF0ZShhLGQ9ITEpe3JldHVybiBuZXcgQTBlKGEsdGhpcy5fY2hlY2tlcix0aGlzLl9uZ1pvbmUsdGhpcy5fZG9jdW1lbnQsZCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoTXIodlBlKSxNcihZ''@;'; put 'put ''byksTXIodnMpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKSxrMGU9KCgpPT57Y2xhc3MgY3tnZXQgZW5hYmxlZCgpe3JldHVybiB0aGlzLmZvY3VzVHJhcD8uZW5hYmxlZHx8''@;'; put 'put ''ITF9c2V0IGVuYWJsZWQoYSl7dGhpcy5mb2N1c1RyYXAmJih0aGlzLmZvY3VzVHJhcC5lbmFibGVkPWEpfWNvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9lbGVtZW50UmVmPWEsdGhpcy5fZm9jdXNUcmFwRmFjdG9yeT1kLHRoaXMuX3ByZXZpb3VzbHlGb2N1c2VkRWxlbWVudD1udWxsLGhpKF94''@;'; put 'put ''KS5pc0Jyb3dzZXImJih0aGlzLmZvY3VzVHJhcD10aGlzLl9mb2N1c1RyYXBGYWN0b3J5LmNyZWF0ZSh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsITApKX1uZ09uRGVzdHJveSgpe3RoaXMuZm9jdXNUcmFwPy5kZXN0cm95KCksdGhpcy5fcHJldmlvdXNseUZvY3VzZWRFbGVtZW50''@;'; put 'put ''JiYodGhpcy5fcHJldmlvdXNseUZvY3VzZWRFbGVtZW50LmZvY3VzKCksdGhpcy5fcHJldmlvdXNseUZvY3VzZWRFbGVtZW50PW51bGwpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuZm9jdXNUcmFwPy5hdHRhY2hBbmNob3JzKCksdGhpcy5hdXRvQ2FwdHVyZSYmdGhpcy5fY2FwdHVyZUZv''@;'; put 'put ''Y3VzKCl9bmdEb0NoZWNrKCl7dGhpcy5mb2N1c1RyYXAmJiF0aGlzLmZvY3VzVHJhcC5oYXNBdHRhY2hlZCgpJiZ0aGlzLmZvY3VzVHJhcC5hdHRhY2hBbmNob3JzKCl9bmdPbkNoYW5nZXMoYSl7Y29uc3QgZD1hLmF1dG9DYXB0dXJlO2QmJiFkLmZpcnN0Q2hhbmdlJiZ0aGlzLmF1dG9DYXB0''@;'; put 'put ''dXJlJiZ0aGlzLmZvY3VzVHJhcD8uaGFzQXR0YWNoZWQoKSYmdGhpcy5fY2FwdHVyZUZvY3VzKCl9X2NhcHR1cmVGb2N1cygpe3RoaXMuX3ByZXZpb3VzbHlGb2N1c2VkRWxlbWVudD1mdW5jdGlvbiAkT2UoKXtsZXQgYz10eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudD9kb2N1bWVudC5h''@;'; put 'put ''Y3RpdmVFbGVtZW50Om51bGw7Zm9yKDtjJiZjLnNoYWRvd1Jvb3Q7KXtjb25zdCBsPWMuc2hhZG93Um9vdC5hY3RpdmVFbGVtZW50O2lmKGw9PT1jKWJyZWFrO2M9bH1yZXR1cm4gY30oKSx0aGlzLmZvY3VzVHJhcD8uZm9jdXNJbml0aWFsRWxlbWVudFdoZW5SZWFkeSgpfXN0YXRpY3t0aGlz''@;'; put 'put ''Llx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKGVvKSxHZShhWSksR2UodnMpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNka1RyYXBGb2N1cyIsIiJdXSxpbnB1dHM6e2VuYWJsZWQ6W1puLkhhc0RlY29yYXRvcklu''@;'; put 'put ''cHV0VHJhbnNmb3JtLCJjZGtUcmFwRm9jdXMiLCJlbmFibGVkIixsMV0sYXV0b0NhcHR1cmU6W1puLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtLCJjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZSIsImF1dG9DYXB0dXJlIixsMV19LGV4cG9ydEFzOlsiY2RrVHJhcEZvY3VzIl0sc3RhbmRhbG9u''@;'; put 'put ''ZTohMCxmZWF0dXJlczpbemwseWxdfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBsNyhjLGw9MCl7cmV0dXJuIGZ1bmN0aW9uIExQZShjKXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdChjKSkmJiFpc05hTihOdW1iZXIoYykpfShjKT9OdW1iZXIoYyk6bH1mdW5jdGlvbiB4ZChjKXtyZXR1cm4g''@;'; put 'put ''YyBpbnN0YW5jZW9mIGVvP2MubmF0aXZlRWxlbWVudDpjfWNvbnN0IFN4PXtzY2hlZHVsZShjKXtsZXQgbD1yZXF1ZXN0QW5pbWF0aW9uRnJhbWUsYT1jYW5jZWxBbmltYXRpb25GcmFtZTtjb25zdHtkZWxlZ2F0ZTpkfT1TeDtkJiYobD1kLnJlcXVlc3RBbmltYXRpb25GcmFtZSxhPWQuY2Fu''@;'; put 'put ''Y2VsQW5pbWF0aW9uRnJhbWUpO2NvbnN0IGg9bChmPT57YT12b2lkIDAsYyhmKX0pO3JldHVybiBuZXcgcXQoKCk9PmE/LihoKSl9LHJlcXVlc3RBbmltYXRpb25GcmFtZSguLi5jKXtjb25zdHtkZWxlZ2F0ZTpsfT1TeDtyZXR1cm4obD8ucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxyZXF1ZXN0''@;'; put 'put ''QW5pbWF0aW9uRnJhbWUpKC4uLmMpfSxjYW5jZWxBbmltYXRpb25GcmFtZSguLi5jKXtjb25zdHtkZWxlZ2F0ZTpsfT1TeDtyZXR1cm4obD8uY2FuY2VsQW5pbWF0aW9uRnJhbWV8fGNhbmNlbEFuaW1hdGlvbkZyYW1lKSguLi5jKX0sZGVsZWdhdGU6dm9pZCAwfSxEMGU9bmV3IGNsYXNzIEZQ''@;'; put 'put ''ZSBleHRlbmRzIHRZe2ZsdXNoKGwpe2xldCBhO3RoaXMuX2FjdGl2ZT0hMCxsP2E9bC5pZDooYT10aGlzLl9zY2hlZHVsZWQsdGhpcy5fc2NoZWR1bGVkPXZvaWQgMCk7Y29uc3R7YWN0aW9uczpkfT10aGlzO2xldCBoO2w9bHx8ZC5zaGlmdCgpO2Rve2lmKGg9bC5leGVjdXRlKGwuc3RhdGUs''@;'; put 'put ''bC5kZWxheSkpYnJlYWt9d2hpbGUoKGw9ZFswXSkmJmwuaWQ9PT1hJiZkLnNoaWZ0KCkpO2lmKHRoaXMuX2FjdGl2ZT0hMSxoKXtmb3IoOyhsPWRbMF0pJiZsLmlkPT09YSYmZC5zaGlmdCgpOylsLnVuc3Vic2NyaWJlKCk7dGhyb3cgaH19fShjbGFzcyBQUGUgZXh0ZW5kcyBRV3tjb25zdHJ1''@;'; put 'put ''Y3RvcihsLGEpe3N1cGVyKGwsYSksdGhpcy5zY2hlZHVsZXI9bCx0aGlzLndvcms9YX1yZXF1ZXN0QXN5bmNJZChsLGEsZD0wKXtyZXR1cm4gbnVsbCE9PWQmJmQ+MD9zdXBlci5yZXF1ZXN0QXN5bmNJZChsLGEsZCk6KGwuYWN0aW9ucy5wdXNoKHRoaXMpLGwuX3NjaGVkdWxlZHx8KGwuX3Nj''@;'; put 'put ''aGVkdWxlZD1TeC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCk9PmwuZmx1c2godm9pZCAwKSkpKX1yZWN5Y2xlQXN5bmNJZChsLGEsZD0wKXt2YXIgaDtpZihudWxsIT1kP2Q+MDp0aGlzLmRlbGF5PjApcmV0dXJuIHN1cGVyLnJlY3ljbGVBc3luY0lkKGwsYSxkKTtjb25zdHthY3Rpb25zOmZ9''@;'; put 'put ''PWw7bnVsbCE9YSYmYT09PWwuX3NjaGVkdWxlZCYmKG51bGw9PT0oaD1mW2YubGVuZ3RoLTFdKXx8dm9pZCAwPT09aD92b2lkIDA6aC5pZCkhPT1hJiYoU3guY2FuY2VsQW5pbWF0aW9uRnJhbWUoYSksbC5fc2NoZWR1bGVkPXZvaWQgMCl9fSk7bGV0IHNZLEhQZT0xO2NvbnN0IHlMPXt9O2Z1''@;'; put 'put ''bmN0aW9uIEkwZShjKXtyZXR1cm4gYyBpbiB5TCYmKGRlbGV0ZSB5TFtjXSwhMCl9Y29uc3QgTlBlPXtzZXRJbW1lZGlhdGUoYyl7Y29uc3QgbD1IUGUrKztyZXR1cm4geUxbbF09ITAsc1l8fChzWT1Qcm9taXNlLnJlc29sdmUoKSksc1kudGhlbigoKT0+STBlKGwpJiZjKCkpLGx9LGNsZWFy''@;'; put 'put ''SW1tZWRpYXRlKGMpe0kwZShjKX19LHtzZXRJbW1lZGlhdGU6VlBlLGNsZWFySW1tZWRpYXRlOkJQZX09TlBlLF9MPXtzZXRJbW1lZGlhdGUoLi4uYyl7Y29uc3R7ZGVsZWdhdGU6bH09X0w7cmV0dXJuKGw/LnNldEltbWVkaWF0ZXx8VlBlKSguLi5jKX0sY2xlYXJJbW1lZGlhdGUoYyl7Y29u''@;'; put 'put ''c3R7ZGVsZWdhdGU6bH09X0w7cmV0dXJuKGw/LmNsZWFySW1tZWRpYXRlfHxCUGUpKGMpfSxkZWxlZ2F0ZTp2b2lkIDB9LFVQZT1uZXcgY2xhc3MgelBlIGV4dGVuZHMgdFl7Zmx1c2gobCl7dGhpcy5fYWN0aXZlPSEwO2NvbnN0IGE9dGhpcy5fc2NoZWR1bGVkO3RoaXMuX3NjaGVkdWxlZD12''@;'; put 'put ''b2lkIDA7Y29uc3R7YWN0aW9uczpkfT10aGlzO2xldCBoO2w9bHx8ZC5zaGlmdCgpO2Rve2lmKGg9bC5leGVjdXRlKGwuc3RhdGUsbC5kZWxheSkpYnJlYWt9d2hpbGUoKGw9ZFswXSkmJmwuaWQ9PT1hJiZkLnNoaWZ0KCkpO2lmKHRoaXMuX2FjdGl2ZT0hMSxoKXtmb3IoOyhsPWRbMF0pJiZs''@;'; put 'put ''LmlkPT09YSYmZC5zaGlmdCgpOylsLnVuc3Vic2NyaWJlKCk7dGhyb3cgaH19fShjbGFzcyBqUGUgZXh0ZW5kcyBRV3tjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsYSksdGhpcy5zY2hlZHVsZXI9bCx0aGlzLndvcms9YX1yZXF1ZXN0QXN5bmNJZChsLGEsZD0wKXtyZXR1cm4gbnVsbCE9PWQm''@;'; put 'put ''JmQ+MD9zdXBlci5yZXF1ZXN0QXN5bmNJZChsLGEsZCk6KGwuYWN0aW9ucy5wdXNoKHRoaXMpLGwuX3NjaGVkdWxlZHx8KGwuX3NjaGVkdWxlZD1fTC5zZXRJbW1lZGlhdGUobC5mbHVzaC5iaW5kKGwsdm9pZCAwKSkpKX1yZWN5Y2xlQXN5bmNJZChsLGEsZD0wKXt2YXIgaDtpZihudWxsIT1k''@;'; put 'put ''P2Q+MDp0aGlzLmRlbGF5PjApcmV0dXJuIHN1cGVyLnJlY3ljbGVBc3luY0lkKGwsYSxkKTtjb25zdHthY3Rpb25zOmZ9PWw7bnVsbCE9YSYmKG51bGw9PT0oaD1mW2YubGVuZ3RoLTFdKXx8dm9pZCAwPT09aD92b2lkIDA6aC5pZCkhPT1hJiYoX0wuY2xlYXJJbW1lZGlhdGUoYSksbC5fc2No''@;'; put 'put ''ZWR1bGVkPT09YSYmKGwuX3NjaGVkdWxlZD12b2lkIDApKX19KTtmdW5jdGlvbiBSMGUoYz0wLGwsYT1JT2Upe2xldCBkPS0xO3JldHVybiBudWxsIT1sJiYoSnNlKGwpP2E9bDpkPWwpLG5ldyBYdChoPT57bGV0IGY9ZnVuY3Rpb24gV1BlKGMpe3JldHVybiBjIGluc3RhbmNlb2YgRGF0ZSYm''@;'; put 'put ''IWlzTmFOKGMpfShjKT8rYy1hLm5vdygpOmM7ZjwwJiYoZj0wKTtsZXQgdj0wO3JldHVybiBhLnNjaGVkdWxlKGZ1bmN0aW9uKCl7aC5jbG9zZWR8fChoLm5leHQodisrKSwwPD1kP3RoaXMuc2NoZWR1bGUodm9pZCAwLGQpOmguY29tcGxldGUoKSl9LGYpfSl9ZnVuY3Rpb24gbFkoYyxsPWdM''@;'; put 'put ''KXtyZXR1cm4gZnVuY3Rpb24gWlBlKGMpe3JldHVybiBCaSgobCxhKT0+e2xldCBkPSExLGg9bnVsbCxmPW51bGwsdj0hMTtjb25zdCBNPSgpPT57aWYoZj8udW5zdWJzY3JpYmUoKSxmPW51bGwsZCl7ZD0hMTtjb25zdCBaPWg7aD1udWxsLGEubmV4dChaKX12JiZhLmNvbXBsZXRlKCl9LEQ9''@;'; put 'put ''KCk9PntmPW51bGwsdiYmYS5jb21wbGV0ZSgpfTtsLnN1YnNjcmliZShWaShhLFo9PntkPSEwLGg9WixmfHxjMShjKFopKS5zdWJzY3JpYmUoZj1WaShhLE0sRCkpfSwoKT0+e3Y9ITAsKCFkfHwhZnx8Zi5jbG9zZWQpJiZhLmNvbXBsZXRlKCl9KSl9KX0oKCk9PlIwZShjLGwpKX1jb25zdCBH''@;'; put 'put ''UGU9bmV3IFN0KCJjZGstZGlyLWRvYyIse3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6ZnVuY3Rpb24gJFBlKCl7cmV0dXJuIGhpKHZzKX19KSxLUGU9L14oYXJ8Y2tifGR2fGhlfGl3fGZhfG5xb3xwc3xzZHx1Z3x1cnx5aXwuKlstX10oQWRsbXxBcmFifEhlYnJ8Tmtvb3xSb2hnfFRoYWEp''@;'; put 'put ''KSg/IS4qWy1fXShMYXRufEN5cmwpKCR8LXxfKSkoJHwtfF8pL2k7bGV0IGRtPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy52YWx1ZT0ibHRyIix0aGlzLmNoYW5nZT1uZXcgcXIsYSYmKHRoaXMudmFsdWU9ZnVuY3Rpb24gcVBlKGMpe2NvbnN0IGw9Yz8udG9Mb3dlckNhc2Uo''@;'; put 'put ''KXx8IiI7cmV0dXJuImF1dG8iPT09bCYmdHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvcj8ubGFuZ3VhZ2U/S1BlLnRlc3QobmF2aWdhdG9yLmxhbmd1YWdlKT8icnRsIjoibHRyIjoicnRsIj09PWw/InJ0bCI6Imx0ciJ9KChhLmJvZHk/YS5ib2R5LmRpcjpudWxsKXx8KGEuZG9jdW1l''@;'; put 'put ''bnRFbGVtZW50P2EuZG9jdW1lbnRFbGVtZW50LmRpcjpudWxsKXx8Imx0ciIpKX1uZ09uRGVzdHJveSgpe3RoaXMuY2hhbmdlLmNvbXBsZXRlKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoTXIoR1BlLDgpKX19c3RhdGlje3RoaXMuXHUwMjc1''@;'; put 'put ''cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjbGFzcyBYUGV7fWNsYXNzIFFQZSBleHRlbmRzIFhQZXtjb25zdHJ1Y3RvcihsKXtzdXBlcigpLHRoaXMuX2RhdGE9bH1jb25uZWN0KCl7cmV0dXJuIFZNKHRoaXMu''@;'; put 'put ''X2RhdGEpP3RoaXMuX2RhdGE6ZmEodGhpcy5fZGF0YSl9ZGlzY29ubmVjdCgpe319dmFyIGhtPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuUkVQTEFDRUQ9MF09IlJFUExBQ0VEIixjW2MuSU5TRVJURUQ9MV09IklOU0VSVEVEIixjW2MuTU9WRUQ9Ml09Ik1PVkVEIixjW2MuUkVNT1ZFRD0zXT0i''@;'; put 'put ''UkVNT1ZFRCIsY30oaG18fHt9KTtjb25zdCBjWT1uZXcgU3QoIl9WaWV3UmVwZWF0ZXIiKTtjbGFzcyBMMGV7Y29uc3RydWN0b3IoKXt0aGlzLnZpZXdDYWNoZVNpemU9MjAsdGhpcy5fdmlld0NhY2hlPVtdfWFwcGx5Q2hhbmdlcyhsLGEsZCxoLGYpe2wuZm9yRWFjaE9wZXJhdGlvbigodixN''@;'; put 'put ''LEQpPT57bGV0IFosbmU7bnVsbD09di5wcmV2aW91c0luZGV4PyhaPXRoaXMuX2luc2VydFZpZXcoKCk9PmQodixNLEQpLEQsYSxoKHYpKSxuZT1aP2htLklOU0VSVEVEOmhtLlJFUExBQ0VEKTpudWxsPT1EPyh0aGlzLl9kZXRhY2hBbmRDYWNoZVZpZXcoTSxhKSxuZT1obS5SRU1PVkVEKToo''@;'; put 'put ''Wj10aGlzLl9tb3ZlVmlldyhNLEQsYSxoKHYpKSxuZT1obS5NT1ZFRCksZiYmZih7Y29udGV4dDpaPy5jb250ZXh0LG9wZXJhdGlvbjpuZSxyZWNvcmQ6dn0pfSl9ZGV0YWNoKCl7Zm9yKGNvbnN0IGwgb2YgdGhpcy5fdmlld0NhY2hlKWwuZGVzdHJveSgpO3RoaXMuX3ZpZXdDYWNoZT1bXX1f''@;'; put 'put ''aW5zZXJ0VmlldyhsLGEsZCxoKXtjb25zdCBmPXRoaXMuX2luc2VydFZpZXdGcm9tQ2FjaGUoYSxkKTtpZihmKXJldHVybiB2b2lkKGYuY29udGV4dC4kaW1wbGljaXQ9aCk7Y29uc3Qgdj1sKCk7cmV0dXJuIGQuY3JlYXRlRW1iZWRkZWRWaWV3KHYudGVtcGxhdGVSZWYsdi5jb250ZXh0LHYu''@;'; put 'put ''aW5kZXgpfV9kZXRhY2hBbmRDYWNoZVZpZXcobCxhKXtjb25zdCBkPWEuZGV0YWNoKGwpO3RoaXMuX21heWJlQ2FjaGVWaWV3KGQsYSl9X21vdmVWaWV3KGwsYSxkLGgpe2NvbnN0IGY9ZC5nZXQobCk7cmV0dXJuIGQubW92ZShmLGEpLGYuY29udGV4dC4kaW1wbGljaXQ9aCxmfV9tYXliZUNh''@;'; put 'put ''Y2hlVmlldyhsLGEpe2lmKHRoaXMuX3ZpZXdDYWNoZS5sZW5ndGg8dGhpcy52aWV3Q2FjaGVTaXplKXRoaXMuX3ZpZXdDYWNoZS5wdXNoKGwpO2Vsc2V7Y29uc3QgZD1hLmluZGV4T2YobCk7LTE9PT1kP2wuZGVzdHJveSgpOmEucmVtb3ZlKGQpfX1faW5zZXJ0Vmlld0Zyb21DYWNoZShsLGEp''@;'; put 'put ''e2NvbnN0IGQ9dGhpcy5fdmlld0NhY2hlLnBvcCgpO3JldHVybiBkJiZhLmluc2VydChkLGwpLGR8fG51bGx9fWNvbnN0IGVGZT1bImNvbnRlbnRXcmFwcGVyIl0sdEZlPVsiKiJdLE8wZT1uZXcgU3QoIlZJUlRVQUxfU0NST0xMX1NUUkFURUdZIik7Y2xhc3MgbkZle2NvbnN0cnVjdG9yKGws''@;'; put 'put ''YSxkKXt0aGlzLl9zY3JvbGxlZEluZGV4Q2hhbmdlPW5ldyBXbix0aGlzLnNjcm9sbGVkSW5kZXhDaGFuZ2U9dGhpcy5fc2Nyb2xsZWRJbmRleENoYW5nZS5waXBlKGZ1bmN0aW9uIEpXKGMsbD1jbil7cmV0dXJuIGM9Yz8/QU9lLEJpKChhLGQpPT57bGV0IGgsZj0hMDthLnN1YnNjcmliZShW''@;'; put 'put ''aShkLHY9Pntjb25zdCBNPWwodik7KGZ8fCFjKGgsTSkpJiYoZj0hMSxoPU0sZC5uZXh0KHYpKX0pKX0pfSgpKSx0aGlzLl92aWV3cG9ydD1udWxsLHRoaXMuX2l0ZW1TaXplPWwsdGhpcy5fbWluQnVmZmVyUHg9YSx0aGlzLl9tYXhCdWZmZXJQeD1kfWF0dGFjaChsKXt0aGlzLl92aWV3cG9y''@;'; put 'put ''dD1sLHRoaXMuX3VwZGF0ZVRvdGFsQ29udGVudFNpemUoKSx0aGlzLl91cGRhdGVSZW5kZXJlZFJhbmdlKCl9ZGV0YWNoKCl7dGhpcy5fc2Nyb2xsZWRJbmRleENoYW5nZS5jb21wbGV0ZSgpLHRoaXMuX3ZpZXdwb3J0PW51bGx9dXBkYXRlSXRlbUFuZEJ1ZmZlclNpemUobCxhLGQpe3RoaXMu''@;'; put 'put ''X2l0ZW1TaXplPWwsdGhpcy5fbWluQnVmZmVyUHg9YSx0aGlzLl9tYXhCdWZmZXJQeD1kLHRoaXMuX3VwZGF0ZVRvdGFsQ29udGVudFNpemUoKSx0aGlzLl91cGRhdGVSZW5kZXJlZFJhbmdlKCl9b25Db250ZW50U2Nyb2xsZWQoKXt0aGlzLl91cGRhdGVSZW5kZXJlZFJhbmdlKCl9b25EYXRh''@;'; put 'put ''TGVuZ3RoQ2hhbmdlZCgpe3RoaXMuX3VwZGF0ZVRvdGFsQ29udGVudFNpemUoKSx0aGlzLl91cGRhdGVSZW5kZXJlZFJhbmdlKCl9b25Db250ZW50UmVuZGVyZWQoKXt9b25SZW5kZXJlZE9mZnNldENoYW5nZWQoKXt9c2Nyb2xsVG9JbmRleChsLGEpe3RoaXMuX3ZpZXdwb3J0JiZ0aGlzLl92''@;'; put 'put ''aWV3cG9ydC5zY3JvbGxUb09mZnNldChsKnRoaXMuX2l0ZW1TaXplLGEpfV91cGRhdGVUb3RhbENvbnRlbnRTaXplKCl7dGhpcy5fdmlld3BvcnQmJnRoaXMuX3ZpZXdwb3J0LnNldFRvdGFsQ29udGVudFNpemUodGhpcy5fdmlld3BvcnQuZ2V0RGF0YUxlbmd0aCgpKnRoaXMuX2l0ZW1TaXpl''@;'; put 'put ''KX1fdXBkYXRlUmVuZGVyZWRSYW5nZSgpe2lmKCF0aGlzLl92aWV3cG9ydClyZXR1cm47Y29uc3QgbD10aGlzLl92aWV3cG9ydC5nZXRSZW5kZXJlZFJhbmdlKCksYT17c3RhcnQ6bC5zdGFydCxlbmQ6bC5lbmR9LGQ9dGhpcy5fdmlld3BvcnQuZ2V0Vmlld3BvcnRTaXplKCksaD10aGlzLl92''@;'; put 'put ''aWV3cG9ydC5nZXREYXRhTGVuZ3RoKCk7bGV0IGY9dGhpcy5fdmlld3BvcnQubWVhc3VyZVNjcm9sbE9mZnNldCgpLHY9dGhpcy5faXRlbVNpemU+MD9mL3RoaXMuX2l0ZW1TaXplOjA7aWYoYS5lbmQ+aCl7Y29uc3QgRD1NYXRoLmNlaWwoZC90aGlzLl9pdGVtU2l6ZSksWj1NYXRoLm1heCgw''@;'; put 'put ''LE1hdGgubWluKHYsaC1EKSk7diE9WiYmKHY9WixmPVoqdGhpcy5faXRlbVNpemUsYS5zdGFydD1NYXRoLmZsb29yKHYpKSxhLmVuZD1NYXRoLm1heCgwLE1hdGgubWluKGgsYS5zdGFydCtEKSl9Y29uc3QgTT1mLWEuc3RhcnQqdGhpcy5faXRlbVNpemU7aWYoTTx0aGlzLl9taW5CdWZmZXJQ''@;'; put 'put ''eCYmMCE9YS5zdGFydCl7Y29uc3QgRD1NYXRoLmNlaWwoKHRoaXMuX21heEJ1ZmZlclB4LU0pL3RoaXMuX2l0ZW1TaXplKTthLnN0YXJ0PU1hdGgubWF4KDAsYS5zdGFydC1EKSxhLmVuZD1NYXRoLm1pbihoLE1hdGguY2VpbCh2KyhkK3RoaXMuX21pbkJ1ZmZlclB4KS90aGlzLl9pdGVtU2l6''@;'; put 'put ''ZSkpfWVsc2V7Y29uc3QgRD1hLmVuZCp0aGlzLl9pdGVtU2l6ZS0oZitkKTtpZihEPHRoaXMuX21pbkJ1ZmZlclB4JiZhLmVuZCE9aCl7Y29uc3QgWj1NYXRoLmNlaWwoKHRoaXMuX21heEJ1ZmZlclB4LUQpL3RoaXMuX2l0ZW1TaXplKTtaPjAmJihhLmVuZD1NYXRoLm1pbihoLGEuZW5kK1op''@;'; put 'put ''LGEuc3RhcnQ9TWF0aC5tYXgoMCxNYXRoLmZsb29yKHYtdGhpcy5fbWluQnVmZmVyUHgvdGhpcy5faXRlbVNpemUpKSl9fXRoaXMuX3ZpZXdwb3J0LnNldFJlbmRlcmVkUmFuZ2UoYSksdGhpcy5fdmlld3BvcnQuc2V0UmVuZGVyZWRDb250ZW50T2Zmc2V0KHRoaXMuX2l0ZW1TaXplKmEuc3Rh''@;'; put 'put ''cnQpLHRoaXMuX3Njcm9sbGVkSW5kZXhDaGFuZ2UubmV4dChNYXRoLmZsb29yKHYpKX19bGV0IE15PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX25nWm9uZT1hLHRoaXMuX3BsYXRmb3JtPWQsdGhpcy5fc2Nyb2xsZWQ9bmV3IFduLHRoaXMuX2dsb2JhbFN1YnNjcmlw''@;'; put 'put ''dGlvbj1udWxsLHRoaXMuX3Njcm9sbGVkQ291bnQ9MCx0aGlzLnNjcm9sbENvbnRhaW5lcnM9bmV3IE1hcCx0aGlzLl9kb2N1bWVudD1ofXJlZ2lzdGVyKGEpe3RoaXMuc2Nyb2xsQ29udGFpbmVycy5oYXMoYSl8fHRoaXMuc2Nyb2xsQ29udGFpbmVycy5zZXQoYSxhLmVsZW1lbnRTY3JvbGxl''@;'; put 'put ''ZCgpLnN1YnNjcmliZSgoKT0+dGhpcy5fc2Nyb2xsZWQubmV4dChhKSkpfWRlcmVnaXN0ZXIoYSl7Y29uc3QgZD10aGlzLnNjcm9sbENvbnRhaW5lcnMuZ2V0KGEpO2QmJihkLnVuc3Vic2NyaWJlKCksdGhpcy5zY3JvbGxDb250YWluZXJzLmRlbGV0ZShhKSl9c2Nyb2xsZWQoYT0yMCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuX3BsYXRmb3JtLmlzQnJvd3Nlcj9uZXcgWHQoZD0+e3RoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbnx8dGhpcy5fYWRkR2xvYmFsTGlzdGVuZXIoKTtjb25zdCBoPWE+MD90aGlzLl9zY3JvbGxlZC5waXBlKGxZKGEpKS5zdWJzY3JpYmUoZCk6dGhpcy5fc2Nyb2xsZWQuc3Vic2Ny''@;'; put 'put ''aWJlKGQpO3JldHVybiB0aGlzLl9zY3JvbGxlZENvdW50KyssKCk9PntoLnVuc3Vic2NyaWJlKCksdGhpcy5fc2Nyb2xsZWRDb3VudC0tLHRoaXMuX3Njcm9sbGVkQ291bnR8fHRoaXMuX3JlbW92ZUdsb2JhbExpc3RlbmVyKCl9fSk6ZmEoKX1uZ09uRGVzdHJveSgpe3RoaXMuX3JlbW92ZUds''@;'; put 'put ''b2JhbExpc3RlbmVyKCksdGhpcy5zY3JvbGxDb250YWluZXJzLmZvckVhY2goKGEsZCk9PnRoaXMuZGVyZWdpc3RlcihkKSksdGhpcy5fc2Nyb2xsZWQuY29tcGxldGUoKX1hbmNlc3RvclNjcm9sbGVkKGEsZCl7Y29uc3QgaD10aGlzLmdldEFuY2VzdG9yU2Nyb2xsQ29udGFpbmVycyhhKTty''@;'; put 'put ''ZXR1cm4gdGhpcy5zY3JvbGxlZChkKS5waXBlKFdsKGY9PiFmfHxoLmluZGV4T2YoZik+LTEpKX1nZXRBbmNlc3RvclNjcm9sbENvbnRhaW5lcnMoYSl7Y29uc3QgZD1bXTtyZXR1cm4gdGhpcy5zY3JvbGxDb250YWluZXJzLmZvckVhY2goKGgsZik9Pnt0aGlzLl9zY3JvbGxhYmxlQ29udGFp''@;'; put 'put ''bnNFbGVtZW50KGYsYSkmJmQucHVzaChmKX0pLGR9X2dldFdpbmRvdygpe3JldHVybiB0aGlzLl9kb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93fV9zY3JvbGxhYmxlQ29udGFpbnNFbGVtZW50KGEsZCl7bGV0IGg9eGQoZCksZj1hLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50O2Rv''@;'; put 'put ''e2lmKGg9PWYpcmV0dXJuITB9d2hpbGUoaD1oLnBhcmVudEVsZW1lbnQpO3JldHVybiExfV9hZGRHbG9iYWxMaXN0ZW5lcigpe3RoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbj10aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pk1kKHRoaXMuX2dldFdpbmRvdygpLmRvY3VtZW50LCJz''@;'; put 'put ''Y3JvbGwiKS5zdWJzY3JpYmUoKCk9PnRoaXMuX3Njcm9sbGVkLm5leHQoKSkpfV9yZW1vdmVHbG9iYWxMaXN0ZW5lcigpe3RoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbiYmKHRoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2dsb2JhbFN1YnNjcmlwdGlvbj1udWxs''@;'; put 'put ''KX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShNcihZbyksTXIoX3gpLE1yKHZzLDgpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSko''@;'; put 'put ''KSxQMGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmVsZW1lbnRSZWY9YSx0aGlzLnNjcm9sbERpc3BhdGNoZXI9ZCx0aGlzLm5nWm9uZT1oLHRoaXMuZGlyPWYsdGhpcy5fZGVzdHJveWVkPW5ldyBXbix0aGlzLl9lbGVtZW50U2Nyb2xsZWQ9bmV3IFh0KHY9PnRo''@;'; put 'put ''aXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5NZCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwic2Nyb2xsIikucGlwZShWMCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUodikpKX1uZ09uSW5pdCgpe3RoaXMuc2Nyb2xsRGlzcGF0Y2hlci5yZWdpc3Rlcih0aGlzKX1u''@;'; put 'put ''Z09uRGVzdHJveSgpe3RoaXMuc2Nyb2xsRGlzcGF0Y2hlci5kZXJlZ2lzdGVyKHRoaXMpLHRoaXMuX2Rlc3Ryb3llZC5uZXh0KCksdGhpcy5fZGVzdHJveWVkLmNvbXBsZXRlKCl9ZWxlbWVudFNjcm9sbGVkKCl7cmV0dXJuIHRoaXMuX2VsZW1lbnRTY3JvbGxlZH1nZXRFbGVtZW50UmVmKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuZWxlbWVudFJlZn1zY3JvbGxUbyhhKXtjb25zdCBkPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LGg9dGhpcy5kaXImJiJydGwiPT10aGlzLmRpci52YWx1ZTtudWxsPT1hLmxlZnQmJihhLmxlZnQ9aD9hLmVuZDphLnN0YXJ0KSxudWxsPT1hLnJpZ2h0JiYoYS5y''@;'; put 'put ''aWdodD1oP2Euc3RhcnQ6YS5lbmQpLG51bGwhPWEuYm90dG9tJiYoYS50b3A9ZC5zY3JvbGxIZWlnaHQtZC5jbGllbnRIZWlnaHQtYS5ib3R0b20pLGgmJkN4KCkhPWdwLk5PUk1BTD8obnVsbCE9YS5sZWZ0JiYoYS5yaWdodD1kLnNjcm9sbFdpZHRoLWQuY2xpZW50V2lkdGgtYS5sZWZ0KSxD''@;'; put 'put ''eCgpPT1ncC5JTlZFUlRFRD9hLmxlZnQ9YS5yaWdodDpDeCgpPT1ncC5ORUdBVEVEJiYoYS5sZWZ0PWEucmlnaHQ/LWEucmlnaHQ6YS5yaWdodCkpOm51bGwhPWEucmlnaHQmJihhLmxlZnQ9ZC5zY3JvbGxXaWR0aC1kLmNsaWVudFdpZHRoLWEucmlnaHQpLHRoaXMuX2FwcGx5U2Nyb2xsVG9P''@;'; put 'put ''cHRpb25zKGEpfV9hcHBseVNjcm9sbFRvT3B0aW9ucyhhKXtjb25zdCBkPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50OyFmdW5jdGlvbiBZT2UoKXtpZihudWxsPT1zNyl7aWYoIm9iamVjdCIhPXR5cGVvZiBkb2N1bWVudHx8IWRvY3VtZW50fHwiZnVuY3Rpb24iIT10eXBlb2YgRWxl''@;'; put 'put ''bWVudHx8IUVsZW1lbnQpcmV0dXJuIHM3PSExLHM3O2lmKCJzY3JvbGxCZWhhdmlvciJpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUpczc9ITA7ZWxzZXtjb25zdCBjPUVsZW1lbnQucHJvdG90eXBlLnNjcm9sbFRvO3M3PSEhYyYmIS9ce1xzKlxbbmF0aXZlIGNvZGVcXVxzKlx9''@;'; put 'put ''Ly50ZXN0KGMudG9TdHJpbmcoKSl9fXJldHVybiBzN30oKT8obnVsbCE9YS50b3AmJihkLnNjcm9sbFRvcD1hLnRvcCksbnVsbCE9YS5sZWZ0JiYoZC5zY3JvbGxMZWZ0PWEubGVmdCkpOmQuc2Nyb2xsVG8oYSl9bWVhc3VyZVNjcm9sbE9mZnNldChhKXtjb25zdCBkPSJsZWZ0IixoPSJyaWdo''@;'; put 'put ''dCIsZj10aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtpZigidG9wIj09YSlyZXR1cm4gZi5zY3JvbGxUb3A7aWYoImJvdHRvbSI9PWEpcmV0dXJuIGYuc2Nyb2xsSGVpZ2h0LWYuY2xpZW50SGVpZ2h0LWYuc2Nyb2xsVG9wO2NvbnN0IHY9dGhpcy5kaXImJiJydGwiPT10aGlzLmRpci52''@;'; put 'put ''YWx1ZTtyZXR1cm4ic3RhcnQiPT1hP2E9dj9oOmQ6ImVuZCI9PWEmJihhPXY/ZDpoKSx2JiZDeCgpPT1ncC5JTlZFUlRFRD9hPT1kP2Yuc2Nyb2xsV2lkdGgtZi5jbGllbnRXaWR0aC1mLnNjcm9sbExlZnQ6Zi5zY3JvbGxMZWZ0OnYmJkN4KCk9PWdwLk5FR0FURUQ/YT09ZD9mLnNjcm9sbExl''@;'; put 'put ''ZnQrZi5zY3JvbGxXaWR0aC1mLmNsaWVudFdpZHRoOi1mLnNjcm9sbExlZnQ6YT09ZD9mLnNjcm9sbExlZnQ6Zi5zY3JvbGxXaWR0aC1mLmNsaWVudFdpZHRoLWYuc2Nyb2xsTGVmdH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShlbyksR2Uo''@;'; put 'put ''TXkpLEdlKFlvKSxHZShkbSw4KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjZGstc2Nyb2xsYWJsZSIsIiJdLFsiIiwiY2RrU2Nyb2xsYWJsZSIsIiJdXSxzdGFuZGFsb25lOiEwfSl9fXJldHVybiBjfSkoKSx3TD0oKCk9PntjbGFzcyBje2Nv''@;'; put 'put ''bnN0cnVjdG9yKGEsZCxoKXt0aGlzLl9wbGF0Zm9ybT1hLHRoaXMuX2NoYW5nZT1uZXcgV24sdGhpcy5fY2hhbmdlTGlzdGVuZXI9Zj0+e3RoaXMuX2NoYW5nZS5uZXh0KGYpfSx0aGlzLl9kb2N1bWVudD1oLGQucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PntpZihhLmlzQnJvd3Nlcil7Y29uc3Qg''@;'; put 'put ''Zj10aGlzLl9nZXRXaW5kb3coKTtmLmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsdGhpcy5fY2hhbmdlTGlzdGVuZXIpLGYuYWRkRXZlbnRMaXN0ZW5lcigib3JpZW50YXRpb25jaGFuZ2UiLHRoaXMuX2NoYW5nZUxpc3RlbmVyKX10aGlzLmNoYW5nZSgpLnN1YnNjcmliZSgoKT0+dGhpcy5f''@;'; put 'put ''dmlld3BvcnRTaXplPW51bGwpfSl9bmdPbkRlc3Ryb3koKXtpZih0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXIpe2NvbnN0IGE9dGhpcy5fZ2V0V2luZG93KCk7YS5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLHRoaXMuX2NoYW5nZUxpc3RlbmVyKSxhLnJlbW92ZUV2ZW50TGlzdGVuZXIo''@;'; put 'put ''Im9yaWVudGF0aW9uY2hhbmdlIix0aGlzLl9jaGFuZ2VMaXN0ZW5lcil9dGhpcy5fY2hhbmdlLmNvbXBsZXRlKCl9Z2V0Vmlld3BvcnRTaXplKCl7dGhpcy5fdmlld3BvcnRTaXplfHx0aGlzLl91cGRhdGVWaWV3cG9ydFNpemUoKTtjb25zdCBhPXt3aWR0aDp0aGlzLl92aWV3cG9ydFNpemUu''@;'; put 'put ''d2lkdGgsaGVpZ2h0OnRoaXMuX3ZpZXdwb3J0U2l6ZS5oZWlnaHR9O3JldHVybiB0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXJ8fCh0aGlzLl92aWV3cG9ydFNpemU9bnVsbCksYX1nZXRWaWV3cG9ydFJlY3QoKXtjb25zdCBhPXRoaXMuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpLHt3aWR0''@;'; put 'put ''aDpkLGhlaWdodDpofT10aGlzLmdldFZpZXdwb3J0U2l6ZSgpO3JldHVybnt0b3A6YS50b3AsbGVmdDphLmxlZnQsYm90dG9tOmEudG9wK2gscmlnaHQ6YS5sZWZ0K2QsaGVpZ2h0Omgsd2lkdGg6ZH19Z2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpe2lmKCF0aGlzLl9wbGF0Zm9ybS5pc0Jy''@;'; put 'put ''b3dzZXIpcmV0dXJue3RvcDowLGxlZnQ6MH07Y29uc3QgYT10aGlzLl9kb2N1bWVudCxkPXRoaXMuX2dldFdpbmRvdygpLGg9YS5kb2N1bWVudEVsZW1lbnQsZj1oLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt0b3A6LWYudG9wfHxhLmJvZHkuc2Nyb2xsVG9wfHxkLnNjcm9sbFl8''@;'; put 'put ''fGguc2Nyb2xsVG9wfHwwLGxlZnQ6LWYubGVmdHx8YS5ib2R5LnNjcm9sbExlZnR8fGQuc2Nyb2xsWHx8aC5zY3JvbGxMZWZ0fHwwfX1jaGFuZ2UoYT0yMCl7cmV0dXJuIGE+MD90aGlzLl9jaGFuZ2UucGlwZShsWShhKSk6dGhpcy5fY2hhbmdlfV9nZXRXaW5kb3coKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''ZG9jdW1lbnQuZGVmYXVsdFZpZXd8fHdpbmRvd31fdXBkYXRlVmlld3BvcnRTaXplKCl7Y29uc3QgYT10aGlzLl9nZXRXaW5kb3coKTt0aGlzLl92aWV3cG9ydFNpemU9dGhpcy5fcGxhdGZvcm0uaXNCcm93c2VyP3t3aWR0aDphLmlubmVyV2lkdGgsaGVpZ2h0OmEuaW5uZXJIZWlnaHR9Ont3''@;'; put 'put ''aWR0aDowLGhlaWdodDowfX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShNcihfeCksTXIoWW8pLE1yKHZzLDgpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3Qi''@;'; put 'put ''fSl9fXJldHVybiBjfSkoKTtjb25zdCBGMGU9bmV3IFN0KCJWSVJUVUFMX1NDUk9MTEFCTEUiKTtsZXQgSDBlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBQMGV7Y29uc3RydWN0b3IoYSxkLGgsZil7c3VwZXIoYSxkLGgsZil9bWVhc3VyZVZpZXdwb3J0U2l6ZShhKXtjb25zdCBkPXRoaXMuZWxl''@;'; put 'put ''bWVudFJlZi5uYXRpdmVFbGVtZW50O3JldHVybiJob3Jpem9udGFsIj09PWE/ZC5jbGllbnRXaWR0aDpkLmNsaWVudEhlaWdodH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShlbyksR2UoTXkpLEdlKFlvKSxHZShkbSw4KSl9fXN0YXRpY3t0''@;'; put 'put ''aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLGZlYXR1cmVzOltDb119KX19cmV0dXJuIGN9KSgpO2NvbnN0IGFGZT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lPCJ1Ij9EMGU6VVBlO2xldCB4eT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgSDBle2dldCBvcmllbnRhdGlvbigpe3JldHVybiB0''@;'; put 'put ''aGlzLl9vcmllbnRhdGlvbn1zZXQgb3JpZW50YXRpb24oYSl7dGhpcy5fb3JpZW50YXRpb24hPT1hJiYodGhpcy5fb3JpZW50YXRpb249YSx0aGlzLl9jYWxjdWxhdGVTcGFjZXJTaXplKCkpfWNvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQsWil7c3VwZXIoYSxNLGgsdiksdGhpcy5lbGVtZW50''@;'; put 'put ''UmVmPWEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9ZCx0aGlzLl9zY3JvbGxTdHJhdGVneT1mLHRoaXMuc2Nyb2xsYWJsZT1aLHRoaXMuX3BsYXRmb3JtPWhpKF94KSx0aGlzLl9kZXRhY2hlZFN1YmplY3Q9bmV3IFduLHRoaXMuX3JlbmRlcmVkUmFuZ2VTdWJqZWN0PW5ldyBXbix0aGlzLl9v''@;'; put 'put ''cmllbnRhdGlvbj0idmVydGljYWwiLHRoaXMuYXBwZW5kT25seT0hMSx0aGlzLnNjcm9sbGVkSW5kZXhDaGFuZ2U9bmV3IFh0KG5lPT50aGlzLl9zY3JvbGxTdHJhdGVneS5zY3JvbGxlZEluZGV4Q2hhbmdlLnN1YnNjcmliZShjZT0+UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKT0+dGhpcy5u''@;'; put 'put ''Z1pvbmUucnVuKCgpPT5uZS5uZXh0KGNlKSkpKSksdGhpcy5yZW5kZXJlZFJhbmdlU3RyZWFtPXRoaXMuX3JlbmRlcmVkUmFuZ2VTdWJqZWN0LHRoaXMuX3RvdGFsQ29udGVudFNpemU9MCx0aGlzLl90b3RhbENvbnRlbnRXaWR0aD0iIix0aGlzLl90b3RhbENvbnRlbnRIZWlnaHQ9IiIsdGhp''@;'; put 'put ''cy5fcmVuZGVyZWRSYW5nZT17c3RhcnQ6MCxlbmQ6MH0sdGhpcy5fZGF0YUxlbmd0aD0wLHRoaXMuX3ZpZXdwb3J0U2l6ZT0wLHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldD0wLHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT0hMSx0aGlzLl9pc0NoYW5nZURldGVj''@;'; put 'put ''dGlvblBlbmRpbmc9ITEsdGhpcy5fcnVuQWZ0ZXJDaGFuZ2VEZXRlY3Rpb249W10sdGhpcy5fdmlld3BvcnRDaGFuZ2VzPXF0LkVNUFRZLHRoaXMuX3ZpZXdwb3J0Q2hhbmdlcz1ELmNoYW5nZSgpLnN1YnNjcmliZSgoKT0+e3RoaXMuY2hlY2tWaWV3cG9ydFNpemUoKX0pLHRoaXMuc2Nyb2xs''@;'; put 'put ''YWJsZXx8KHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoImNkay12aXJ0dWFsLXNjcm9sbGFibGUiKSx0aGlzLnNjcm9sbGFibGU9dGhpcyl9bmdPbkluaXQoKXt0aGlzLl9wbGF0Zm9ybS5pc0Jyb3dzZXImJih0aGlzLnNjcm9sbGFibGU9PT10aGlzJiZzdXBl''@;'; put 'put ''ci5uZ09uSW5pdCgpLHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT57dGhpcy5fbWVhc3VyZVZpZXdwb3J0U2l6ZSgpLHRoaXMuX3Njcm9sbFN0cmF0ZWd5LmF0dGFjaCh0aGlzKSx0aGlzLnNjcm9sbGFibGUuZWxlbWVudFNjcm9s''@;'; put 'put ''bGVkKCkucGlwZShfMihudWxsKSxsWSgwLGFGZSksVjAodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT50aGlzLl9zY3JvbGxTdHJhdGVneS5vbkNvbnRlbnRTY3JvbGxlZCgpKSx0aGlzLl9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKCl9KSkpfW5nT25EZXN0cm95KCl7dGhpcy5k''@;'; put 'put ''ZXRhY2goKSx0aGlzLl9zY3JvbGxTdHJhdGVneS5kZXRhY2goKSx0aGlzLl9yZW5kZXJlZFJhbmdlU3ViamVjdC5jb21wbGV0ZSgpLHRoaXMuX2RldGFjaGVkU3ViamVjdC5jb21wbGV0ZSgpLHRoaXMuX3ZpZXdwb3J0Q2hhbmdlcy51bnN1YnNjcmliZSgpLHN1cGVyLm5nT25EZXN0cm95KCl9''@;'; put 'put ''YXR0YWNoKGEpe3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fZm9yT2Y9YSx0aGlzLl9mb3JPZi5kYXRhU3RyZWFtLnBpcGUoVjAodGhpcy5fZGV0YWNoZWRTdWJqZWN0KSkuc3Vic2NyaWJlKGQ9Pntjb25zdCBoPWQubGVuZ3RoO2ghPT10aGlzLl9kYXRhTGVuZ3Ro''@;'; put 'put ''JiYodGhpcy5fZGF0YUxlbmd0aD1oLHRoaXMuX3Njcm9sbFN0cmF0ZWd5Lm9uRGF0YUxlbmd0aENoYW5nZWQoKSksdGhpcy5fZG9DaGFuZ2VEZXRlY3Rpb24oKX0pfSl9ZGV0YWNoKCl7dGhpcy5fZm9yT2Y9bnVsbCx0aGlzLl9kZXRhY2hlZFN1YmplY3QubmV4dCgpfWdldERhdGFMZW5ndGgo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fZGF0YUxlbmd0aH1nZXRWaWV3cG9ydFNpemUoKXtyZXR1cm4gdGhpcy5fdmlld3BvcnRTaXplfWdldFJlbmRlcmVkUmFuZ2UoKXtyZXR1cm4gdGhpcy5fcmVuZGVyZWRSYW5nZX1tZWFzdXJlQm91bmRpbmdDbGllbnRSZWN0V2l0aFNjcm9sbE9mZnNldChhKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVthXX1zZXRUb3RhbENvbnRlbnRTaXplKGEpe3RoaXMuX3RvdGFsQ29udGVudFNpemUhPT1hJiYodGhpcy5fdG90YWxDb250ZW50U2l6ZT1hLHRoaXMuX2NhbGN1bGF0ZVNwYWNlclNp''@;'; put 'put ''emUoKSx0aGlzLl9tYXJrQ2hhbmdlRGV0ZWN0aW9uTmVlZGVkKCkpfXNldFJlbmRlcmVkUmFuZ2UoYSl7KGZ1bmN0aW9uIG9GZShjLGwpe3JldHVybiBjLnN0YXJ0PT1sLnN0YXJ0JiZjLmVuZD09bC5lbmR9KSh0aGlzLl9yZW5kZXJlZFJhbmdlLGEpfHwodGhpcy5hcHBlbmRPbmx5JiYoYT17''@;'; put 'put ''c3RhcnQ6MCxlbmQ6TWF0aC5tYXgodGhpcy5fcmVuZGVyZWRSYW5nZS5lbmQsYS5lbmQpfSksdGhpcy5fcmVuZGVyZWRSYW5nZVN1YmplY3QubmV4dCh0aGlzLl9yZW5kZXJlZFJhbmdlPWEpLHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKCk9PnRoaXMuX3Njcm9sbFN0cmF0ZWd5''@;'; put 'put ''Lm9uQ29udGVudFJlbmRlcmVkKCkpKX1nZXRPZmZzZXRUb1JlbmRlcmVkQ29udGVudFN0YXJ0KCl7cmV0dXJuIHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT9udWxsOnRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldH1zZXRSZW5kZXJlZENvbnRlbnRPZmZzZXQoYSxk''@;'; put 'put ''PSJ0by1zdGFydCIpe2E9dGhpcy5hcHBlbmRPbmx5JiYidG8tc3RhcnQiPT09ZD8wOmE7Y29uc3QgZj0iaG9yaXpvbnRhbCI9PXRoaXMub3JpZW50YXRpb24sdj1mPyJYIjoiWSI7bGV0IEQ9YHRyYW5zbGF0ZSR7dn0oJHtOdW1iZXIoKGYmJnRoaXMuZGlyJiYicnRsIj09dGhpcy5kaXIudmFs''@;'; put 'put ''dWU/LTE6MSkqYSl9cHgpYDt0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQ9YSwidG8tZW5kIj09PWQmJihEKz1gIHRyYW5zbGF0ZSR7dn0oLTEwMCUpYCx0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU9ITApLHRoaXMuX3JlbmRlcmVkQ29udGVudFRyYW5zZm9ybSE9''@;'; put 'put ''RCYmKHRoaXMuX3JlbmRlcmVkQ29udGVudFRyYW5zZm9ybT1ELHRoaXMuX21hcmtDaGFuZ2VEZXRlY3Rpb25OZWVkZWQoKCk9Pnt0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXROZWVkc1Jld3JpdGU/KHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldC09dGhpcy5tZWFzdXJlUmVuZGVyZWRD''@;'; put 'put ''b250ZW50U2l6ZSgpLHRoaXMuX3JlbmRlcmVkQ29udGVudE9mZnNldE5lZWRzUmV3cml0ZT0hMSx0aGlzLnNldFJlbmRlcmVkQ29udGVudE9mZnNldCh0aGlzLl9yZW5kZXJlZENvbnRlbnRPZmZzZXQpKTp0aGlzLl9zY3JvbGxTdHJhdGVneS5vblJlbmRlcmVkT2Zmc2V0Q2hhbmdlZCgpfSkp''@;'; put 'put ''fXNjcm9sbFRvT2Zmc2V0KGEsZD0iYXV0byIpe2NvbnN0IGg9e2JlaGF2aW9yOmR9OyJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24/aC5zdGFydD1hOmgudG9wPWEsdGhpcy5zY3JvbGxhYmxlLnNjcm9sbFRvKGgpfXNjcm9sbFRvSW5kZXgoYSxkPSJhdXRvIil7dGhpcy5fc2Nyb2xs''@;'; put 'put ''U3RyYXRlZ3kuc2Nyb2xsVG9JbmRleChhLGQpfW1lYXN1cmVTY3JvbGxPZmZzZXQoYSl7bGV0IGQ7cmV0dXJuIGQ9dGhpcy5zY3JvbGxhYmxlPT10aGlzP2g9PnN1cGVyLm1lYXN1cmVTY3JvbGxPZmZzZXQoaCk6aD0+dGhpcy5zY3JvbGxhYmxlLm1lYXN1cmVTY3JvbGxPZmZzZXQoaCksTWF0''@;'; put 'put ''aC5tYXgoMCxkKGE/PygiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uPyJzdGFydCI6InRvcCIpKS10aGlzLm1lYXN1cmVWaWV3cG9ydE9mZnNldCgpKX1tZWFzdXJlVmlld3BvcnRPZmZzZXQoYSl7bGV0IGQ7Y29uc3QgaD0ibGVmdCIsZj0icmlnaHQiLHY9InJ0bCI9PXRoaXMuZGly''@;'; put 'put ''Py52YWx1ZTtkPSJzdGFydCI9PWE/dj9mOmg6ImVuZCI9PWE/dj9oOmY6YXx8KCJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24/ImxlZnQiOiJ0b3AiKTtjb25zdCBNPXRoaXMuc2Nyb2xsYWJsZS5tZWFzdXJlQm91bmRpbmdDbGllbnRSZWN0V2l0aFNjcm9sbE9mZnNldChkKTtyZXR1''@;'; put 'put ''cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbZF0tTX1tZWFzdXJlUmVuZGVyZWRDb250ZW50U2l6ZSgpe2NvbnN0IGE9dGhpcy5fY29udGVudFdyYXBwZXIubmF0aXZlRWxlbWVudDtyZXR1cm4iaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVu''@;'; put 'put ''dGF0aW9uP2Eub2Zmc2V0V2lkdGg6YS5vZmZzZXRIZWlnaHR9bWVhc3VyZVJhbmdlU2l6ZShhKXtyZXR1cm4gdGhpcy5fZm9yT2Y/dGhpcy5fZm9yT2YubWVhc3VyZVJhbmdlU2l6ZShhLHRoaXMub3JpZW50YXRpb24pOjB9Y2hlY2tWaWV3cG9ydFNpemUoKXt0aGlzLl9tZWFzdXJlVmlld3Bv''@;'; put 'put ''cnRTaXplKCksdGhpcy5fc2Nyb2xsU3RyYXRlZ3kub25EYXRhTGVuZ3RoQ2hhbmdlZCgpfV9tZWFzdXJlVmlld3BvcnRTaXplKCl7dGhpcy5fdmlld3BvcnRTaXplPXRoaXMuc2Nyb2xsYWJsZS5tZWFzdXJlVmlld3BvcnRTaXplKHRoaXMub3JpZW50YXRpb24pfV9tYXJrQ2hhbmdlRGV0ZWN0''@;'; put 'put ''aW9uTmVlZGVkKGEpe2EmJnRoaXMuX3J1bkFmdGVyQ2hhbmdlRGV0ZWN0aW9uLnB1c2goYSksdGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nfHwodGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nPSEwLHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT5Qcm9taXNlLnJl''@;'; put 'put ''c29sdmUoKS50aGVuKCgpPT57dGhpcy5fZG9DaGFuZ2VEZXRlY3Rpb24oKX0pKSl9X2RvQ2hhbmdlRGV0ZWN0aW9uKCl7dGhpcy5faXNDaGFuZ2VEZXRlY3Rpb25QZW5kaW5nPSExLHRoaXMuX2NvbnRlbnRXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtPXRoaXMuX3JlbmRl''@;'; put 'put ''cmVkQ29udGVudFRyYW5zZm9ybSx0aGlzLm5nWm9uZS5ydW4oKCk9PnRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpKTtjb25zdCBhPXRoaXMuX3J1bkFmdGVyQ2hhbmdlRGV0ZWN0aW9uO3RoaXMuX3J1bkFmdGVyQ2hhbmdlRGV0ZWN0aW9uPVtdO2Zvcihjb25zdCBkIG9m''@;'; put 'put ''IGEpZCgpfV9jYWxjdWxhdGVTcGFjZXJTaXplKCl7dGhpcy5fdG90YWxDb250ZW50SGVpZ2h0PSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24/IiI6YCR7dGhpcy5fdG90YWxDb250ZW50U2l6ZX1weGAsdGhpcy5fdG90YWxDb250ZW50V2lkdGg9Imhvcml6b250YWwiPT09dGhpcy5v''@;'; put 'put ''cmllbnRhdGlvbj9gJHt0aGlzLl90b3RhbENvbnRlbnRTaXplfXB4YDoiIn1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShlbyksR2UoeHMpLEdlKFlvKSxHZShPMGUsOCksR2UoZG0sOCksR2UoTXkpLEdlKHdMKSxHZShGMGUsOCkpfX1zdGF0''@;'; put 'put ''aWN7dGhpcy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmbmEoZUZlLDcpLDImZCl7bGV0IGY7eGkoZj1FaSgpKSYmKGguX2NvbnRlbnRXcmFwcGVyPWYuZmlyc3Qp''@;'; put 'put ''fX0saG9zdEF0dHJzOlsxLCJjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezImZCYmeHIoImNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi1ob3Jpem9udGFsIiwiaG9yaXpvbnRhbCI9PT1oLm9yaWVudGF0aW9u''@;'; put 'put ''KSgiY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIiwiaG9yaXpvbnRhbCIhPT1oLm9yaWVudGF0aW9uKX0saW5wdXRzOntvcmllbnRhdGlvbjoib3JpZW50YXRpb24iLGFwcGVuZE9ubHk6W1puLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtLCJhcHBlbmRPbmx5Iiwi''@;'; put 'put ''YXBwZW5kT25seSIsbDFdfSxvdXRwdXRzOntzY3JvbGxlZEluZGV4Q2hhbmdlOiJzY3JvbGxlZEluZGV4Q2hhbmdlIn0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbcG8oW3twcm92aWRlOlAwZSx1c2VGYWN0b3J5OihhLGQpPT5hfHxkLGRlcHM6W1tuZXcgSTEsbmV3IGE1KEYwZSldLGNdfV0p''@;'; put 'put ''LHpsLENvLHpJXSxuZ0NvbnRlbnRTZWxlY3RvcnM6dEZlLGRlY2xzOjQsdmFyczo0LGNvbnN0czpbWyJjb250ZW50V3JhcHBlciIsIiJdLFsxLCJjZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyIl0sWzEsImNkay12aXJ0dWFsLXNjcm9sbC1zcGFjZXIiXV0sdGVtcGxhdGU6ZnVu''@;'; put 'put ''Y3Rpb24oZCxoKXsxJmQmJihsbygpLGRlKDAsImRpdiIsMSwwKSxXcigyKSxoZSgpLEd0KDMsImRpdiIsMikpLDImZCYmKGZlKDMpLF9kKCJ3aWR0aCIsaC5fdG90YWxDb250ZW50V2lkdGgpKCJoZWlnaHQiLGguX3RvdGFsQ29udGVudEhlaWdodCkpfSxzdHlsZXM6WyJjZGstdmlydHVhbC1z''@;'; put 'put ''Y3JvbGwtdmlld3BvcnR7ZGlzcGxheTpibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt0cmFuc2Zvcm06dHJhbnNsYXRlWigwKX0uY2RrLXZpcnR1YWwtc2Nyb2xsYWJsZXtvdmVyZmxvdzphdXRvO3dpbGwtY2hhbmdlOnNjcm9sbC1wb3NpdGlvbjtjb250YWluOnN0cmljdDstd2Via2l0LW92ZXJm''@;'; put 'put ''bG93LXNjcm9sbGluZzp0b3VjaH0uY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7Y29udGFpbjpjb250ZW50fVtkaXI9cnRsXSAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcntyaWdodDowO2xlZnQ6YXV0''@;'; put 'put ''b30uY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXJ7bWluLWhlaWdodDoxMDAlfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRl''@;'; put 'put ''bnQtd3JhcHBlcj5kbDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLWhvcml6b250YWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+b2w6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12aXJ0dWFsLXNjcm9sbC1vcmllbnRh''@;'; put 'put ''dGlvbi1ob3Jpem9udGFsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVyPnRhYmxlOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24taG9yaXpvbnRhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj51bDpub3Qo''@;'; put 'put ''W2Nka1ZpcnR1YWxGb3JdKXtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6MDtib3JkZXItbGVmdC13aWR0aDowO2JvcmRlci1yaWdodC13aWR0aDowO291dGxpbmU6bm9uZX0uY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZl''@;'; put 'put ''cnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13cmFwcGVye21pbi13aWR0aDoxMDAlfS5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+ZGw6bm90KFtjZGtWaXJ0dWFsRm9yXSksLmNkay12''@;'; put 'put ''aXJ0dWFsLXNjcm9sbC1vcmllbnRhdGlvbi12ZXJ0aWNhbCAuY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcj5vbDpub3QoW2Nka1ZpcnR1YWxGb3JdKSwuY2RrLXZpcnR1YWwtc2Nyb2xsLW9yaWVudGF0aW9uLXZlcnRpY2FsIC5jZGstdmlydHVhbC1zY3JvbGwtY29udGVudC13''@;'; put 'put ''cmFwcGVyPnRhYmxlOm5vdChbY2RrVmlydHVhbEZvcl0pLC5jZGstdmlydHVhbC1zY3JvbGwtb3JpZW50YXRpb24tdmVydGljYWwgLmNkay12aXJ0dWFsLXNjcm9sbC1jb250ZW50LXdyYXBwZXI+dWw6bm90KFtjZGtWaXJ0dWFsRm9yXSl7cGFkZGluZy10b3A6MDtwYWRkaW5nLWJvdHRvbTow''@;'; put 'put ''O21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjA7Ym9yZGVyLXRvcC13aWR0aDowO2JvcmRlci1ib3R0b20td2lkdGg6MDtvdXRsaW5lOm5vbmV9LmNkay12aXJ0dWFsLXNjcm9sbC1zcGFjZXJ7aGVpZ2h0OjFweDt0cmFuc2Zvcm0tb3JpZ2luOjAgMDtmbGV4OjAgMCBhdXRvfVtkaXI9cnRs''@;'; put 'put ''XSAuY2RrLXZpcnR1YWwtc2Nyb2xsLXNwYWNlcnt0cmFuc2Zvcm0tb3JpZ2luOjEwMCUgMH0iXSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIE4wZShjLGwsYSl7aWYoIWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KXJldHVybiAwO2Nv''@;'; put 'put ''bnN0IGg9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm4iaG9yaXpvbnRhbCI9PT1jPyJzdGFydCI9PT1sP2gubGVmdDpoLnJpZ2h0OiJzdGFydCI9PT1sP2gudG9wOmguYm90dG9tfWxldCBDTD0oKCk9PntjbGFzcyBje2dldCBjZGtWaXJ0dWFsRm9yT2YoKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''Y2RrVmlydHVhbEZvck9mfXNldCBjZGtWaXJ0dWFsRm9yT2YoYSl7dGhpcy5fY2RrVmlydHVhbEZvck9mPWEsZnVuY3Rpb24gSlBlKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgYy5jb25uZWN0JiYhKGMgaW5zdGFuY2VvZiBQWil9KGEpP3RoaXMuX2RhdGFTb3VyY2VDaGFuZ2Vz''@;'; put 'put ''Lm5leHQoYSk6dGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMubmV4dChuZXcgUVBlKFZNKGEpP2E6QXJyYXkuZnJvbShhfHxbXSkpKX1nZXQgY2RrVmlydHVhbEZvclRyYWNrQnkoKXtyZXR1cm4gdGhpcy5fY2RrVmlydHVhbEZvclRyYWNrQnl9c2V0IGNka1ZpcnR1YWxGb3JUcmFja0J5KGEpe3Ro''@;'; put 'put ''aXMuX25lZWRzVXBkYXRlPSEwLHRoaXMuX2Nka1ZpcnR1YWxGb3JUcmFja0J5PWE/KGQsaCk9PmEoZCsodGhpcy5fcmVuZGVyZWRSYW5nZT90aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0OjApLGgpOnZvaWQgMH1zZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlKGEpe2EmJih0aGlzLl9uZWVkc1Vw''@;'; put 'put ''ZGF0ZT0hMCx0aGlzLl90ZW1wbGF0ZT1hKX1nZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplKCl7cmV0dXJuIHRoaXMuX3ZpZXdSZXBlYXRlci52aWV3Q2FjaGVTaXplfXNldCBjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUoYSl7dGhpcy5fdmlld1JlcGVhdGVyLnZpZXdD''@;'; put 'put ''YWNoZVNpemU9bDcoYSl9Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMuX3ZpZXdDb250YWluZXJSZWY9YSx0aGlzLl90ZW1wbGF0ZT1kLHRoaXMuX2RpZmZlcnM9aCx0aGlzLl92aWV3UmVwZWF0ZXI9Zix0aGlzLl92aWV3cG9ydD12LHRoaXMudmlld0NoYW5nZT1uZXcgV24sdGhpcy5f''@;'; put 'put ''ZGF0YVNvdXJjZUNoYW5nZXM9bmV3IFduLHRoaXMuZGF0YVN0cmVhbT10aGlzLl9kYXRhU291cmNlQ2hhbmdlcy5waXBlKF8yKG51bGwpLGZ1bmN0aW9uIFlQZSgpe3JldHVybiBCaSgoYyxsKT0+e2xldCBhLGQ9ITE7Yy5zdWJzY3JpYmUoVmkobCxoPT57Y29uc3QgZj1hO2E9aCxkJiZsLm5l''@;'; put 'put ''eHQoW2YsaF0pLGQ9ITB9KSl9KX0oKSxWMSgoW0QsWl0pPT50aGlzLl9jaGFuZ2VEYXRhU291cmNlKEQsWikpLF8wZSgxKSksdGhpcy5fZGlmZmVyPW51bGwsdGhpcy5fbmVlZHNVcGRhdGU9ITEsdGhpcy5fZGVzdHJveWVkPW5ldyBXbix0aGlzLmRhdGFTdHJlYW0uc3Vic2NyaWJlKEQ9Pnt0''@;'; put 'put ''aGlzLl9kYXRhPUQsdGhpcy5fb25SZW5kZXJlZERhdGFDaGFuZ2UoKX0pLHRoaXMuX3ZpZXdwb3J0LnJlbmRlcmVkUmFuZ2VTdHJlYW0ucGlwZShWMCh0aGlzLl9kZXN0cm95ZWQpKS5zdWJzY3JpYmUoRD0+e3RoaXMuX3JlbmRlcmVkUmFuZ2U9RCx0aGlzLnZpZXdDaGFuZ2Uub2JzZXJ2ZXJz''@;'; put 'put ''Lmxlbmd0aCYmTS5ydW4oKCk9PnRoaXMudmlld0NoYW5nZS5uZXh0KHRoaXMuX3JlbmRlcmVkUmFuZ2UpKSx0aGlzLl9vblJlbmRlcmVkRGF0YUNoYW5nZSgpfSksdGhpcy5fdmlld3BvcnQuYXR0YWNoKHRoaXMpfW1lYXN1cmVSYW5nZVNpemUoYSxkKXtpZihhLnN0YXJ0Pj1hLmVuZClyZXR1''@;'; put 'put ''cm4gMDtjb25zdCBoPWEuc3RhcnQtdGhpcy5fcmVuZGVyZWRSYW5nZS5zdGFydCxmPWEuZW5kLWEuc3RhcnQ7bGV0IHYsTTtmb3IobGV0IEQ9MDtEPGY7RCsrKXtjb25zdCBaPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZ2V0KEQraCk7aWYoWiYmWi5yb290Tm9kZXMubGVuZ3RoKXt2PU09Wi5y''@;'; put 'put ''b290Tm9kZXNbMF07YnJlYWt9fWZvcihsZXQgRD1mLTE7RD4tMTtELS0pe2NvbnN0IFo9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5nZXQoRCtoKTtpZihaJiZaLnJvb3ROb2Rlcy5sZW5ndGgpe009Wi5yb290Tm9kZXNbWi5yb290Tm9kZXMubGVuZ3RoLTFdO2JyZWFrfX1yZXR1cm4gdiYmTT9O''@;'; put 'put ''MGUoZCwiZW5kIixNKS1OMGUoZCwic3RhcnQiLHYpOjB9bmdEb0NoZWNrKCl7aWYodGhpcy5fZGlmZmVyJiZ0aGlzLl9uZWVkc1VwZGF0ZSl7Y29uc3QgYT10aGlzLl9kaWZmZXIuZGlmZih0aGlzLl9yZW5kZXJlZEl0ZW1zKTthP3RoaXMuX2FwcGx5Q2hhbmdlcyhhKTp0aGlzLl91cGRhdGVD''@;'; put 'put ''b250ZXh0KCksdGhpcy5fbmVlZHNVcGRhdGU9ITF9fW5nT25EZXN0cm95KCl7dGhpcy5fdmlld3BvcnQuZGV0YWNoKCksdGhpcy5fZGF0YVNvdXJjZUNoYW5nZXMubmV4dCh2b2lkIDApLHRoaXMuX2RhdGFTb3VyY2VDaGFuZ2VzLmNvbXBsZXRlKCksdGhpcy52aWV3Q2hhbmdlLmNvbXBsZXRl''@;'; put 'put ''KCksdGhpcy5fZGVzdHJveWVkLm5leHQoKSx0aGlzLl9kZXN0cm95ZWQuY29tcGxldGUoKSx0aGlzLl92aWV3UmVwZWF0ZXIuZGV0YWNoKCl9X29uUmVuZGVyZWREYXRhQ2hhbmdlKCl7dGhpcy5fcmVuZGVyZWRSYW5nZSYmKHRoaXMuX3JlbmRlcmVkSXRlbXM9dGhpcy5fZGF0YS5zbGljZSh0''@;'; put 'put ''aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0LHRoaXMuX3JlbmRlcmVkUmFuZ2UuZW5kKSx0aGlzLl9kaWZmZXJ8fCh0aGlzLl9kaWZmZXI9dGhpcy5fZGlmZmVycy5maW5kKHRoaXMuX3JlbmRlcmVkSXRlbXMpLmNyZWF0ZSgoYSxkKT0+dGhpcy5jZGtWaXJ0dWFsRm9yVHJhY2tCeT90aGlzLmNk''@;'; put 'put ''a1ZpcnR1YWxGb3JUcmFja0J5KGEsZCk6ZCkpLHRoaXMuX25lZWRzVXBkYXRlPSEwKX1fY2hhbmdlRGF0YVNvdXJjZShhLGQpe3JldHVybiBhJiZhLmRpc2Nvbm5lY3QodGhpcyksdGhpcy5fbmVlZHNVcGRhdGU9ITAsZD9kLmNvbm5lY3QodGhpcyk6ZmEoKX1fdXBkYXRlQ29udGV4dCgpe2Nv''@;'; put 'put ''bnN0IGE9dGhpcy5fZGF0YS5sZW5ndGg7bGV0IGQ9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5sZW5ndGg7Zm9yKDtkLS07KXtjb25zdCBoPXRoaXMuX3ZpZXdDb250YWluZXJSZWYuZ2V0KGQpO2guY29udGV4dC5pbmRleD10aGlzLl9yZW5kZXJlZFJhbmdlLnN0YXJ0K2QsaC5jb250ZXh0LmNv''@;'; put 'put ''dW50PWEsdGhpcy5fdXBkYXRlQ29tcHV0ZWRDb250ZXh0UHJvcGVydGllcyhoLmNvbnRleHQpLGguZGV0ZWN0Q2hhbmdlcygpfX1fYXBwbHlDaGFuZ2VzKGEpe3RoaXMuX3ZpZXdSZXBlYXRlci5hcHBseUNoYW5nZXMoYSx0aGlzLl92aWV3Q29udGFpbmVyUmVmLChmLHYsTSk9PnRoaXMuX2dl''@;'; put 'put ''dEVtYmVkZGVkVmlld0FyZ3MoZixNKSxmPT5mLml0ZW0pLGEuZm9yRWFjaElkZW50aXR5Q2hhbmdlKGY9Pnt0aGlzLl92aWV3Q29udGFpbmVyUmVmLmdldChmLmN1cnJlbnRJbmRleCkuY29udGV4dC4kaW1wbGljaXQ9Zi5pdGVtfSk7Y29uc3QgZD10aGlzLl9kYXRhLmxlbmd0aDtsZXQgaD10''@;'; put 'put ''aGlzLl92aWV3Q29udGFpbmVyUmVmLmxlbmd0aDtmb3IoO2gtLTspe2NvbnN0IGY9dGhpcy5fdmlld0NvbnRhaW5lclJlZi5nZXQoaCk7Zi5jb250ZXh0LmluZGV4PXRoaXMuX3JlbmRlcmVkUmFuZ2Uuc3RhcnQraCxmLmNvbnRleHQuY291bnQ9ZCx0aGlzLl91cGRhdGVDb21wdXRlZENvbnRl''@;'; put 'put ''eHRQcm9wZXJ0aWVzKGYuY29udGV4dCl9fV91cGRhdGVDb21wdXRlZENvbnRleHRQcm9wZXJ0aWVzKGEpe2EuZmlyc3Q9MD09PWEuaW5kZXgsYS5sYXN0PWEuaW5kZXg9PT1hLmNvdW50LTEsYS5ldmVuPWEuaW5kZXglMj09MCxhLm9kZD0hYS5ldmVufV9nZXRFbWJlZGRlZFZpZXdBcmdzKGEs''@;'; put 'put ''ZCl7cmV0dXJue3RlbXBsYXRlUmVmOnRoaXMuX3RlbXBsYXRlLGNvbnRleHQ6eyRpbXBsaWNpdDphLml0ZW0sY2RrVmlydHVhbEZvck9mOnRoaXMuX2Nka1ZpcnR1YWxGb3JPZixpbmRleDotMSxjb3VudDotMSxmaXJzdDohMSxsYXN0OiExLG9kZDohMSxldmVuOiExfSxpbmRleDpkfX1zdGF0''@;'; put 'put ''aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShEYSksR2Uod2wpLEdlKFg1KSxHZShjWSksR2UoeHksNCksR2UoWW8pKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNka1ZpcnR1YWxGb3IiLCIiLCJjZGtW''@;'; put 'put ''aXJ0dWFsRm9yT2YiLCIiXV0saW5wdXRzOntjZGtWaXJ0dWFsRm9yT2Y6ImNka1ZpcnR1YWxGb3JPZiIsY2RrVmlydHVhbEZvclRyYWNrQnk6ImNka1ZpcnR1YWxGb3JUcmFja0J5IixjZGtWaXJ0dWFsRm9yVGVtcGxhdGU6ImNka1ZpcnR1YWxGb3JUZW1wbGF0ZSIsY2RrVmlydHVhbEZvclRl''@;'; put 'put ''bXBsYXRlQ2FjaGVTaXplOiJjZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemUifSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOltwbyhbe3Byb3ZpZGU6Y1ksdXNlQ2xhc3M6TDBlfV0pXX0pfX1yZXR1cm4gY30pKCksc0ZlPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1''@;'; put 'put ''bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHt9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIHVZKGMsbCxhKXtmb3IobGV0IGQgaW4gbClpZihsLmhhc093blByb3BlcnR5KGQpKXtj''@;'; put 'put ''b25zdCBoPWxbZF07aD9jLnNldFByb3BlcnR5KGQsaCxhPy5oYXMoZCk/ImltcG9ydGFudCI6IiIpOmMucmVtb3ZlUHJvcGVydHkoZCl9cmV0dXJuIGN9ZnVuY3Rpb24gRXkoYyxsKXtjb25zdCBhPWw/IiI6Im5vbmUiO3VZKGMuc3R5bGUseyJ0b3VjaC1hY3Rpb24iOmw/IiI6Im5vbmUiLCIt''@;'; put 'put ''d2Via2l0LXVzZXItZHJhZyI6bD8iIjoibm9uZSIsIi13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciI6bD8iIjoidHJhbnNwYXJlbnQiLCJ1c2VyLXNlbGVjdCI6YSwiLW1zLXVzZXItc2VsZWN0IjphLCItd2Via2l0LXVzZXItc2VsZWN0IjphLCItbW96LXVzZXItc2VsZWN0IjphfSl9ZnVu''@;'; put 'put ''Y3Rpb24gVjBlKGMsbCxhKXt1WShjLnN0eWxlLHtwb3NpdGlvbjpsPyIiOiJmaXhlZCIsdG9wOmw/IiI6IjAiLG9wYWNpdHk6bD8iIjoiMCIsbGVmdDpsPyIiOiItOTk5ZW0ifSxhKX1mdW5jdGlvbiBTTChjLGwpe3JldHVybiBsJiYibm9uZSIhPWw/YysiICIrbDpjfWZ1bmN0aW9uIEIwZShj''@;'; put 'put ''LGwpe2Muc3R5bGUud2lkdGg9YCR7bC53aWR0aH1weGAsYy5zdHlsZS5oZWlnaHQ9YCR7bC5oZWlnaHR9cHhgLGMuc3R5bGUudHJhbnNmb3JtPU1MKGwubGVmdCxsLnRvcCl9ZnVuY3Rpb24gTUwoYyxsKXtyZXR1cm5gdHJhbnNsYXRlM2QoJHtNYXRoLnJvdW5kKGMpfXB4LCAke01hdGgucm91''@;'; put 'put ''bmQobCl9cHgsIDApYH1mdW5jdGlvbiBkWShjKXtjb25zdCBsPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJue3RvcDpsLnRvcCxyaWdodDpsLnJpZ2h0LGJvdHRvbTpsLmJvdHRvbSxsZWZ0OmwubGVmdCx3aWR0aDpsLndpZHRoLGhlaWdodDpsLmhlaWdodCx4OmwueCx5OmwueX19''@;'; put 'put ''ZnVuY3Rpb24gaFkoYyxsLGEpe2NvbnN0e3RvcDpkLGJvdHRvbTpoLGxlZnQ6ZixyaWdodDp2fT1jO3JldHVybiBhPj1kJiZhPD1oJiZsPj1mJiZsPD12fWZ1bmN0aW9uIE14KGMsbCxhKXtjLnRvcCs9bCxjLmJvdHRvbT1jLnRvcCtjLmhlaWdodCxjLmxlZnQrPWEsYy5yaWdodD1jLmxlZnQr''@;'; put 'put ''Yy53aWR0aH1mdW5jdGlvbiBqMGUoYyxsLGEsZCl7Y29uc3R7dG9wOmgscmlnaHQ6Zixib3R0b206dixsZWZ0Ok0sd2lkdGg6RCxoZWlnaHQ6Wn09YyxuZT1EKmwsY2U9WipsO3JldHVybiBkPmgtY2UmJmQ8ditjZSYmYT5NLW5lJiZhPGYrbmV9Y2xhc3MgejBle2NvbnN0cnVjdG9yKGwpe3Ro''@;'; put 'put ''aXMuX2RvY3VtZW50PWwsdGhpcy5wb3NpdGlvbnM9bmV3IE1hcH1jbGVhcigpe3RoaXMucG9zaXRpb25zLmNsZWFyKCl9Y2FjaGUobCl7dGhpcy5jbGVhcigpLHRoaXMucG9zaXRpb25zLnNldCh0aGlzLl9kb2N1bWVudCx7c2Nyb2xsUG9zaXRpb246dGhpcy5nZXRWaWV3cG9ydFNjcm9sbFBv''@;'; put 'put ''c2l0aW9uKCl9KSxsLmZvckVhY2goYT0+e3RoaXMucG9zaXRpb25zLnNldChhLHtzY3JvbGxQb3NpdGlvbjp7dG9wOmEuc2Nyb2xsVG9wLGxlZnQ6YS5zY3JvbGxMZWZ0fSxjbGllbnRSZWN0OmRZKGEpfSl9KX1oYW5kbGVTY3JvbGwobCl7Y29uc3QgYT1iTChsKSxkPXRoaXMucG9zaXRpb25z''@;'; put 'put ''LmdldChhKTtpZighZClyZXR1cm4gbnVsbDtjb25zdCBoPWQuc2Nyb2xsUG9zaXRpb247bGV0IGYsdjtpZihhPT09dGhpcy5fZG9jdW1lbnQpe2NvbnN0IFo9dGhpcy5nZXRWaWV3cG9ydFNjcm9sbFBvc2l0aW9uKCk7Zj1aLnRvcCx2PVoubGVmdH1lbHNlIGY9YS5zY3JvbGxUb3Asdj1hLnNj''@;'; put 'put ''cm9sbExlZnQ7Y29uc3QgTT1oLnRvcC1mLEQ9aC5sZWZ0LXY7cmV0dXJuIHRoaXMucG9zaXRpb25zLmZvckVhY2goKFosbmUpPT57Wi5jbGllbnRSZWN0JiZhIT09bmUmJmEuY29udGFpbnMobmUpJiZNeChaLmNsaWVudFJlY3QsTSxEKX0pLGgudG9wPWYsaC5sZWZ0PXYse3RvcDpNLGxlZnQ6''@;'; put 'put ''RH19Z2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpe3JldHVybnt0b3A6d2luZG93LnNjcm9sbFksbGVmdDp3aW5kb3cuc2Nyb2xsWH19fWZ1bmN0aW9uIFUwZShjKXtjb25zdCBsPWMuY2xvbmVOb2RlKCEwKSxhPWwucXVlcnlTZWxlY3RvckFsbCgiW2lkXSIpLGQ9Yy5ub2RlTmFtZS50b0xv''@;'; put 'put ''d2VyQ2FzZSgpO2wucmVtb3ZlQXR0cmlidXRlKCJpZCIpO2ZvcihsZXQgaD0wO2g8YS5sZW5ndGg7aCsrKWFbaF0ucmVtb3ZlQXR0cmlidXRlKCJpZCIpO3JldHVybiJjYW52YXMiPT09ZD9ZMGUoYyxsKTooImlucHV0Ij09PWR8fCJzZWxlY3QiPT09ZHx8InRleHRhcmVhIj09PWQpJiZXMGUo''@;'; put 'put ''YyxsKSxaMGUoImNhbnZhcyIsYyxsLFkwZSksWjBlKCJpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCIsYyxsLFcwZSksbH1mdW5jdGlvbiBaMGUoYyxsLGEsZCl7Y29uc3QgaD1sLnF1ZXJ5U2VsZWN0b3JBbGwoYyk7aWYoaC5sZW5ndGgpe2NvbnN0IGY9YS5xdWVyeVNlbGVjdG9yQWxsKGMpO2Zv''@;'; put 'put ''cihsZXQgdj0wO3Y8aC5sZW5ndGg7disrKWQoaFt2XSxmW3ZdKX19bGV0IGNGZT0wO2Z1bmN0aW9uIFcwZShjLGwpeyJmaWxlIiE9PWwudHlwZSYmKGwudmFsdWU9Yy52YWx1ZSksInJhZGlvIj09PWwudHlwZSYmbC5uYW1lJiYobC5uYW1lPWBtYXQtY2xvbmUtJHtsLm5hbWV9LSR7Y0ZlKyt9''@;'; put 'put ''YCl9ZnVuY3Rpb24gWTBlKGMsbCl7Y29uc3QgYT1sLmdldENvbnRleHQoIjJkIik7aWYoYSl0cnl7YS5kcmF3SW1hZ2UoYywwLDApfWNhdGNoe319ZnVuY3Rpb24gRzBlKGMsbCl7Y29uc3QgYT1jLnJvb3ROb2RlcztpZigxPT09YS5sZW5ndGgmJmFbMF0ubm9kZVR5cGU9PT1sLkVMRU1FTlRf''@;'; put 'put ''Tk9ERSlyZXR1cm4gYVswXTtjb25zdCBkPWwuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIGEuZm9yRWFjaChoPT5kLmFwcGVuZENoaWxkKGgpKSxkfWZ1bmN0aW9uICQwZShjKXtjb25zdCBsPWMudG9Mb3dlckNhc2UoKS5pbmRleE9mKCJtcyIpPi0xPzE6MWUzO3JldHVybiBwYXJzZUZs''@;'; put 'put ''b2F0KGMpKmx9ZnVuY3Rpb24gZlkoYyxsKXtyZXR1cm4gYy5nZXRQcm9wZXJ0eVZhbHVlKGwpLnNwbGl0KCIsIikubWFwKGQ9PmQudHJpbSgpKX1jb25zdCBkRmU9bmV3IFNldChbInBvc2l0aW9uIl0pO2NsYXNzIGhGZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdixNLEQsWil7dGhpcy5fZG9j''@;'; put 'put ''dW1lbnQ9bCx0aGlzLl9yb290RWxlbWVudD1hLHRoaXMuX2RpcmVjdGlvbj1kLHRoaXMuX2luaXRpYWxEb21SZWN0PWgsdGhpcy5fcHJldmlld1RlbXBsYXRlPWYsdGhpcy5fcHJldmlld0NsYXNzPXYsdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2U9TSx0aGlzLl9pbml0aWFsVHJhbnNmb3Jt''@;'; put 'put ''PUQsdGhpcy5fekluZGV4PVp9YXR0YWNoKGwpe3RoaXMuX3ByZXZpZXc9dGhpcy5fY3JlYXRlUHJldmlldygpLGwuYXBwZW5kQ2hpbGQodGhpcy5fcHJldmlldyksInNob3dQb3BvdmVyImluIHRoaXMuX3ByZXZpZXcmJnRoaXMuX3ByZXZpZXcuc2hvd1BvcG92ZXIoKX1kZXN0cm95KCl7dGhp''@;'; put 'put ''cy5fcHJldmlldy5yZW1vdmUoKSx0aGlzLl9wcmV2aWV3RW1iZWRkZWRWaWV3Py5kZXN0cm95KCksdGhpcy5fcHJldmlldz10aGlzLl9wcmV2aWV3RW1iZWRkZWRWaWV3PW51bGx9c2V0VHJhbnNmb3JtKGwpe3RoaXMuX3ByZXZpZXcuc3R5bGUudHJhbnNmb3JtPWx9Z2V0Qm91bmRpbmdDbGll''@;'; put 'put ''bnRSZWN0KCl7cmV0dXJuIHRoaXMuX3ByZXZpZXcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCl9YWRkQ2xhc3MobCl7dGhpcy5fcHJldmlldy5jbGFzc0xpc3QuYWRkKGwpfWdldFRyYW5zaXRpb25EdXJhdGlvbigpe3JldHVybiBmdW5jdGlvbiB1RmUoYyl7Y29uc3QgbD1nZXRDb21wdXRlZFN0''@;'; put 'put ''eWxlKGMpLGE9ZlkobCwidHJhbnNpdGlvbi1wcm9wZXJ0eSIpLGQ9YS5maW5kKE09PiJ0cmFuc2Zvcm0iPT09TXx8ImFsbCI9PT1NKTtpZighZClyZXR1cm4gMDtjb25zdCBoPWEuaW5kZXhPZihkKSxmPWZZKGwsInRyYW5zaXRpb24tZHVyYXRpb24iKSx2PWZZKGwsInRyYW5zaXRpb24tZGVs''@;'; put 'put ''YXkiKTtyZXR1cm4gJDBlKGZbaF0pKyQwZSh2W2hdKX0odGhpcy5fcHJldmlldyl9YWRkRXZlbnRMaXN0ZW5lcihsLGEpe3RoaXMuX3ByZXZpZXcuYWRkRXZlbnRMaXN0ZW5lcihsLGEpfXJlbW92ZUV2ZW50TGlzdGVuZXIobCxhKXt0aGlzLl9wcmV2aWV3LnJlbW92ZUV2ZW50TGlzdGVuZXIo''@;'; put 'put ''bCxhKX1fY3JlYXRlUHJldmlldygpe2NvbnN0IGw9dGhpcy5fcHJldmlld1RlbXBsYXRlLGE9dGhpcy5fcHJldmlld0NsYXNzLGQ9bD9sLnRlbXBsYXRlOm51bGw7bGV0IGg7aWYoZCYmbCl7Y29uc3QgZj1sLm1hdGNoU2l6ZT90aGlzLl9pbml0aWFsRG9tUmVjdDpudWxsLHY9bC52aWV3Q29u''@;'; put 'put ''dGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyhkLGwuY29udGV4dCk7di5kZXRlY3RDaGFuZ2VzKCksaD1HMGUodix0aGlzLl9kb2N1bWVudCksdGhpcy5fcHJldmlld0VtYmVkZGVkVmlldz12LGwubWF0Y2hTaXplP0IwZShoLGYpOmguc3R5bGUudHJhbnNmb3JtPU1MKHRoaXMuX3BpY2t1cFBv''@;'; put 'put ''c2l0aW9uT25QYWdlLngsdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UueSl9ZWxzZSBoPVUwZSh0aGlzLl9yb290RWxlbWVudCksQjBlKGgsdGhpcy5faW5pdGlhbERvbVJlY3QpLHRoaXMuX2luaXRpYWxUcmFuc2Zvcm0mJihoLnN0eWxlLnRyYW5zZm9ybT10aGlzLl9pbml0aWFsVHJhbnNm''@;'; put 'put ''b3JtKTtyZXR1cm4gdVkoaC5zdHlsZSx7InBvaW50ZXItZXZlbnRzIjoibm9uZSIsbWFyZ2luOiIwIixwb3NpdGlvbjoiZml4ZWQiLHRvcDoiMCIsbGVmdDoiMCIsInotaW5kZXgiOnRoaXMuX3pJbmRleCsiIn0sZEZlKSxFeShoLCExKSxoLmNsYXNzTGlzdC5hZGQoImNkay1kcmFnLXByZXZp''@;'; put 'put ''ZXciKSxoLnNldEF0dHJpYnV0ZSgicG9wb3ZlciIsIm1hbnVhbCIpLGguc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMuX2RpcmVjdGlvbiksYSYmKEFycmF5LmlzQXJyYXkoYSk/YS5mb3JFYWNoKGY9PmguY2xhc3NMaXN0LmFkZChmKSk6aC5jbGFzc0xpc3QuYWRkKGEpKSxofX1jb25zdCBLMGU9''@;'; put 'put ''U3koe3Bhc3NpdmU6ITB9KSx4TD1TeSh7cGFzc2l2ZTohMX0pLHEwZT1TeSh7cGFzc2l2ZTohMSxjYXB0dXJlOiEwfSksWDBlPW5ldyBTZXQoWyJwb3NpdGlvbiJdKTtjbGFzcyBwRmV7Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfHwhKCF0aGlzLl9kcm9wQ29udGFpbmVy''@;'; put 'put ''fHwhdGhpcy5fZHJvcENvbnRhaW5lci5kaXNhYmxlZCl9c2V0IGRpc2FibGVkKGwpe2whPT10aGlzLl9kaXNhYmxlZCYmKHRoaXMuX2Rpc2FibGVkPWwsdGhpcy5fdG9nZ2xlTmF0aXZlRHJhZ0ludGVyYWN0aW9ucygpLHRoaXMuX2hhbmRsZXMuZm9yRWFjaChhPT5FeShhLGwpKSl9Y29uc3Ry''@;'; put 'put ''dWN0b3IobCxhLGQsaCxmLHYpe3RoaXMuX2NvbmZpZz1hLHRoaXMuX2RvY3VtZW50PWQsdGhpcy5fbmdab25lPWgsdGhpcy5fdmlld3BvcnRSdWxlcj1mLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnk9dix0aGlzLl9wYXNzaXZlVHJhbnNmb3JtPXt4OjAseTowfSx0aGlzLl9hY3RpdmVUcmFuc2Zv''@;'; put 'put ''cm09e3g6MCx5OjB9LHRoaXMuX2hhc1N0YXJ0ZWREcmFnZ2luZz0hMSx0aGlzLl9tb3ZlRXZlbnRzPW5ldyBXbix0aGlzLl9wb2ludGVyTW92ZVN1YnNjcmlwdGlvbj1xdC5FTVBUWSx0aGlzLl9wb2ludGVyVXBTdWJzY3JpcHRpb249cXQuRU1QVFksdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9u''@;'; put 'put ''PXF0LkVNUFRZLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbj1xdC5FTVBUWSx0aGlzLl9ib3VuZGFyeUVsZW1lbnQ9bnVsbCx0aGlzLl9uYXRpdmVJbnRlcmFjdGlvbnNFbmFibGVkPSEwLHRoaXMuX2hhbmRsZXM9W10sdGhpcy5fZGlzYWJsZWRIYW5kbGVzPW5ldyBTZXQsdGhpcy5fZGlyZWN0''@;'; put 'put ''aW9uPSJsdHIiLHRoaXMuZHJhZ1N0YXJ0RGVsYXk9MCx0aGlzLl9kaXNhYmxlZD0hMSx0aGlzLmJlZm9yZVN0YXJ0ZWQ9bmV3IFduLHRoaXMuc3RhcnRlZD1uZXcgV24sdGhpcy5yZWxlYXNlZD1uZXcgV24sdGhpcy5lbmRlZD1uZXcgV24sdGhpcy5lbnRlcmVkPW5ldyBXbix0aGlzLmV4aXRl''@;'; put 'put ''ZD1uZXcgV24sdGhpcy5kcm9wcGVkPW5ldyBXbix0aGlzLm1vdmVkPXRoaXMuX21vdmVFdmVudHMsdGhpcy5fcG9pbnRlckRvd249TT0+e2lmKHRoaXMuYmVmb3JlU3RhcnRlZC5uZXh0KCksdGhpcy5faGFuZGxlcy5sZW5ndGgpe2NvbnN0IEQ9dGhpcy5fZ2V0VGFyZ2V0SGFuZGxlKE0pO0Qm''@;'; put 'put ''JiF0aGlzLl9kaXNhYmxlZEhhbmRsZXMuaGFzKEQpJiYhdGhpcy5kaXNhYmxlZCYmdGhpcy5faW5pdGlhbGl6ZURyYWdTZXF1ZW5jZShELE0pfWVsc2UgdGhpcy5kaXNhYmxlZHx8dGhpcy5faW5pdGlhbGl6ZURyYWdTZXF1ZW5jZSh0aGlzLl9yb290RWxlbWVudCxNKX0sdGhpcy5fcG9pbnRl''@;'; put 'put ''ck1vdmU9TT0+e2NvbnN0IEQ9dGhpcy5fZ2V0UG9pbnRlclBvc2l0aW9uT25QYWdlKE0pO2lmKCF0aGlzLl9oYXNTdGFydGVkRHJhZ2dpbmcpe2lmKE1hdGguYWJzKEQueC10aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS54KStNYXRoLmFicyhELnktdGhpcy5fcGlja3VwUG9zaXRpb25PblBh''@;'; put 'put ''Z2UueSk+PXRoaXMuX2NvbmZpZy5kcmFnU3RhcnRUaHJlc2hvbGQpe2NvbnN0IEVlPURhdGUubm93KCk+PXRoaXMuX2RyYWdTdGFydFRpbWUrdGhpcy5fZ2V0RHJhZ1N0YXJ0RGVsYXkoTSksQmU9dGhpcy5fZHJvcENvbnRhaW5lcjtpZighRWUpcmV0dXJuIHZvaWQgdGhpcy5fZW5kRHJhZ1Nl''@;'; put 'put ''cXVlbmNlKE0pOyghQmV8fCFCZS5pc0RyYWdnaW5nKCkmJiFCZS5pc1JlY2VpdmluZygpKSYmKE0uY2FuY2VsYWJsZSYmTS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuX2hhc1N0YXJ0ZWREcmFnZ2luZz0hMCx0aGlzLl9uZ1pvbmUucnVuKCgpPT50aGlzLl9zdGFydERyYWdTZXF1ZW5jZShNKSkp''@;'; put 'put ''fXJldHVybn1NLmNhbmNlbGFibGUmJk0ucHJldmVudERlZmF1bHQoKTtjb25zdCBaPXRoaXMuX2dldENvbnN0cmFpbmVkUG9pbnRlclBvc2l0aW9uKEQpO2lmKHRoaXMuX2hhc01vdmVkPSEwLHRoaXMuX2xhc3RLbm93blBvaW50ZXJQb3NpdGlvbj1ELHRoaXMuX3VwZGF0ZVBvaW50ZXJEaXJl''@;'; put 'put ''Y3Rpb25EZWx0YShaKSx0aGlzLl9kcm9wQ29udGFpbmVyKXRoaXMuX3VwZGF0ZUFjdGl2ZURyb3BDb250YWluZXIoWixEKTtlbHNle2NvbnN0IG5lPXRoaXMuY29uc3RyYWluUG9zaXRpb24/dGhpcy5faW5pdGlhbERvbVJlY3Q6dGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UsY2U9dGhpcy5f''@;'; put 'put ''YWN0aXZlVHJhbnNmb3JtO2NlLng9Wi54LW5lLngrdGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS54LGNlLnk9Wi55LW5lLnkrdGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS55LHRoaXMuX2FwcGx5Um9vdEVsZW1lbnRUcmFuc2Zvcm0oY2UueCxjZS55KX10aGlzLl9tb3ZlRXZlbnRzLm9ic2VydmVycy5s''@;'; put 'put ''ZW5ndGgmJnRoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLl9tb3ZlRXZlbnRzLm5leHQoe3NvdXJjZTp0aGlzLHBvaW50ZXJQb3NpdGlvbjpaLGV2ZW50Ok0sZGlzdGFuY2U6dGhpcy5fZ2V0RHJhZ0Rpc3RhbmNlKFopLGRlbHRhOnRoaXMuX3BvaW50ZXJEaXJlY3Rpb25EZWx0YX0pfSl9LHRo''@;'; put 'put ''aXMuX3BvaW50ZXJVcD1NPT57dGhpcy5fZW5kRHJhZ1NlcXVlbmNlKE0pfSx0aGlzLl9uYXRpdmVEcmFnU3RhcnQ9TT0+e2lmKHRoaXMuX2hhbmRsZXMubGVuZ3RoKXtjb25zdCBEPXRoaXMuX2dldFRhcmdldEhhbmRsZShNKTtEJiYhdGhpcy5fZGlzYWJsZWRIYW5kbGVzLmhhcyhEKSYmIXRo''@;'; put 'put ''aXMuZGlzYWJsZWQmJk0ucHJldmVudERlZmF1bHQoKX1lbHNlIHRoaXMuZGlzYWJsZWR8fE0ucHJldmVudERlZmF1bHQoKX0sdGhpcy53aXRoUm9vdEVsZW1lbnQobCkud2l0aFBhcmVudChhLnBhcmVudERyYWdSZWZ8fG51bGwpLHRoaXMuX3BhcmVudFBvc2l0aW9ucz1uZXcgejBlKGQpLHYu''@;'; put 'put ''cmVnaXN0ZXJEcmFnSXRlbSh0aGlzKX1nZXRQbGFjZWhvbGRlckVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXJ9Z2V0Um9vdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fcm9vdEVsZW1lbnR9Z2V0VmlzaWJsZUVsZW1lbnQoKXtyZXR1cm4gdGhpcy5pc0RyYWdnaW5nKCk/dGhpcy5n''@;'; put 'put ''ZXRQbGFjZWhvbGRlckVsZW1lbnQoKTp0aGlzLmdldFJvb3RFbGVtZW50KCl9d2l0aEhhbmRsZXMobCl7dGhpcy5faGFuZGxlcz1sLm1hcChkPT54ZChkKSksdGhpcy5faGFuZGxlcy5mb3JFYWNoKGQ9PkV5KGQsdGhpcy5kaXNhYmxlZCkpLHRoaXMuX3RvZ2dsZU5hdGl2ZURyYWdJbnRlcmFj''@;'; put 'put ''dGlvbnMoKTtjb25zdCBhPW5ldyBTZXQ7cmV0dXJuIHRoaXMuX2Rpc2FibGVkSGFuZGxlcy5mb3JFYWNoKGQ9Pnt0aGlzLl9oYW5kbGVzLmluZGV4T2YoZCk+LTEmJmEuYWRkKGQpfSksdGhpcy5fZGlzYWJsZWRIYW5kbGVzPWEsdGhpc313aXRoUHJldmlld1RlbXBsYXRlKGwpe3JldHVybiB0''@;'; put 'put ''aGlzLl9wcmV2aWV3VGVtcGxhdGU9bCx0aGlzfXdpdGhQbGFjZWhvbGRlclRlbXBsYXRlKGwpe3JldHVybiB0aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlPWwsdGhpc313aXRoUm9vdEVsZW1lbnQobCl7Y29uc3QgYT14ZChsKTtyZXR1cm4gYSE9PXRoaXMuX3Jvb3RFbGVtZW50JiYodGhpcy5f''@;'; put 'put ''cm9vdEVsZW1lbnQmJnRoaXMuX3JlbW92ZVJvb3RFbGVtZW50TGlzdGVuZXJzKHRoaXMuX3Jvb3RFbGVtZW50KSx0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnthLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fcG9pbnRlckRvd24seEwpLGEuYWRkRXZlbnRM''@;'; put 'put ''aXN0ZW5lcigidG91Y2hzdGFydCIsdGhpcy5fcG9pbnRlckRvd24sSzBlKSxhLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdzdGFydCIsdGhpcy5fbmF0aXZlRHJhZ1N0YXJ0LHhMKX0pLHRoaXMuX2luaXRpYWxUcmFuc2Zvcm09dm9pZCAwLHRoaXMuX3Jvb3RFbGVtZW50PWEpLHR5cGVvZiBTVkdF''@;'; put 'put ''bGVtZW50PCJ1IiYmdGhpcy5fcm9vdEVsZW1lbnQgaW5zdGFuY2VvZiBTVkdFbGVtZW50JiYodGhpcy5fb3duZXJTVkdFbGVtZW50PXRoaXMuX3Jvb3RFbGVtZW50Lm93bmVyU1ZHRWxlbWVudCksdGhpc313aXRoQm91bmRhcnlFbGVtZW50KGwpe3JldHVybiB0aGlzLl9ib3VuZGFyeUVsZW1l''@;'; put 'put ''bnQ9bD94ZChsKTpudWxsLHRoaXMuX3Jlc2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLGwmJih0aGlzLl9yZXNpemVTdWJzY3JpcHRpb249dGhpcy5fdmlld3BvcnRSdWxlci5jaGFuZ2UoMTApLnN1YnNjcmliZSgoKT0+dGhpcy5fY29udGFpbkluc2lkZUJvdW5kYXJ5T25SZXNpemUo''@;'; put 'put ''KSkpLHRoaXN9d2l0aFBhcmVudChsKXtyZXR1cm4gdGhpcy5fcGFyZW50RHJhZ1JlZj1sLHRoaXN9ZGlzcG9zZSgpe3RoaXMuX3JlbW92ZVJvb3RFbGVtZW50TGlzdGVuZXJzKHRoaXMuX3Jvb3RFbGVtZW50KSx0aGlzLmlzRHJhZ2dpbmcoKSYmdGhpcy5fcm9vdEVsZW1lbnQ/LnJlbW92ZSgp''@;'; put 'put ''LHRoaXMuX2FuY2hvcj8ucmVtb3ZlKCksdGhpcy5fZGVzdHJveVByZXZpZXcoKSx0aGlzLl9kZXN0cm95UGxhY2Vob2xkZXIoKSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnJlbW92ZURyYWdJdGVtKHRoaXMpLHRoaXMuX3JlbW92ZUxpc3RlbmVycygpLHRoaXMuYmVmb3JlU3RhcnRlZC5jb21w''@;'; put 'put ''bGV0ZSgpLHRoaXMuc3RhcnRlZC5jb21wbGV0ZSgpLHRoaXMucmVsZWFzZWQuY29tcGxldGUoKSx0aGlzLmVuZGVkLmNvbXBsZXRlKCksdGhpcy5lbnRlcmVkLmNvbXBsZXRlKCksdGhpcy5leGl0ZWQuY29tcGxldGUoKSx0aGlzLmRyb3BwZWQuY29tcGxldGUoKSx0aGlzLl9tb3ZlRXZlbnRz''@;'; put 'put ''LmNvbXBsZXRlKCksdGhpcy5faGFuZGxlcz1bXSx0aGlzLl9kaXNhYmxlZEhhbmRsZXMuY2xlYXIoKSx0aGlzLl9kcm9wQ29udGFpbmVyPXZvaWQgMCx0aGlzLl9yZXNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSx0aGlzLl9wYXJlbnRQb3NpdGlvbnMuY2xlYXIoKSx0aGlzLl9ib3Vu''@;'; put 'put ''ZGFyeUVsZW1lbnQ9dGhpcy5fcm9vdEVsZW1lbnQ9dGhpcy5fb3duZXJTVkdFbGVtZW50PXRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGU9dGhpcy5fcHJldmlld1RlbXBsYXRlPXRoaXMuX2FuY2hvcj10aGlzLl9wYXJlbnREcmFnUmVmPW51bGx9aXNEcmFnZ2luZygpe3JldHVybiB0aGlzLl9o''@;'; put 'put ''YXNTdGFydGVkRHJhZ2dpbmcmJnRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuaXNEcmFnZ2luZyh0aGlzKX1yZXNldCgpe3RoaXMuX3Jvb3RFbGVtZW50LnN0eWxlLnRyYW5zZm9ybT10aGlzLl9pbml0aWFsVHJhbnNmb3JtfHwiIix0aGlzLl9hY3RpdmVUcmFuc2Zvcm09e3g6MCx5OjB9LHRoaXMu''@;'; put 'put ''X3Bhc3NpdmVUcmFuc2Zvcm09e3g6MCx5OjB9fWRpc2FibGVIYW5kbGUobCl7IXRoaXMuX2Rpc2FibGVkSGFuZGxlcy5oYXMobCkmJnRoaXMuX2hhbmRsZXMuaW5kZXhPZihsKT4tMSYmKHRoaXMuX2Rpc2FibGVkSGFuZGxlcy5hZGQobCksRXkobCwhMCkpfWVuYWJsZUhhbmRsZShsKXt0aGlz''@;'; put 'put ''Ll9kaXNhYmxlZEhhbmRsZXMuaGFzKGwpJiYodGhpcy5fZGlzYWJsZWRIYW5kbGVzLmRlbGV0ZShsKSxFeShsLHRoaXMuZGlzYWJsZWQpKX13aXRoRGlyZWN0aW9uKGwpe3JldHVybiB0aGlzLl9kaXJlY3Rpb249bCx0aGlzfV93aXRoRHJvcENvbnRhaW5lcihsKXt0aGlzLl9kcm9wQ29udGFp''@;'; put 'put ''bmVyPWx9Z2V0RnJlZURyYWdQb3NpdGlvbigpe2NvbnN0IGw9dGhpcy5pc0RyYWdnaW5nKCk/dGhpcy5fYWN0aXZlVHJhbnNmb3JtOnRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm07cmV0dXJue3g6bC54LHk6bC55fX1zZXRGcmVlRHJhZ1Bvc2l0aW9uKGwpe3JldHVybiB0aGlzLl9hY3RpdmVUcmFu''@;'; put 'put ''c2Zvcm09e3g6MCx5OjB9LHRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueD1sLngsdGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS55PWwueSx0aGlzLl9kcm9wQ29udGFpbmVyfHx0aGlzLl9hcHBseVJvb3RFbGVtZW50VHJhbnNmb3JtKGwueCxsLnkpLHRoaXN9d2l0aFByZXZpZXdDb250YWluZXIobCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuX3ByZXZpZXdDb250YWluZXI9bCx0aGlzfV9zb3J0RnJvbUxhc3RQb2ludGVyUG9zaXRpb24oKXtjb25zdCBsPXRoaXMuX2xhc3RLbm93blBvaW50ZXJQb3NpdGlvbjtsJiZ0aGlzLl9kcm9wQ29udGFpbmVyJiZ0aGlzLl91cGRhdGVBY3RpdmVEcm9wQ29udGFpbmVyKHRo''@;'; put 'put ''aXMuX2dldENvbnN0cmFpbmVkUG9pbnRlclBvc2l0aW9uKGwpLGwpfV9yZW1vdmVMaXN0ZW5lcnMoKXt0aGlzLl9wb2ludGVyTW92ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3BvaW50ZXJVcFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX3Njcm9sbFN1YnNjcmlw''@;'; put 'put ''dGlvbi51bnN1YnNjcmliZSgpLHRoaXMuX2dldFNoYWRvd1Jvb3QoKT8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2VsZWN0c3RhcnQiLFEwZSxxMGUpfV9kZXN0cm95UHJldmlldygpe3RoaXMuX3ByZXZpZXc/LmRlc3Ryb3koKSx0aGlzLl9wcmV2aWV3PW51bGx9X2Rlc3Ryb3lQbGFjZWhvbGRl''@;'; put 'put ''cigpe3RoaXMuX3BsYWNlaG9sZGVyPy5yZW1vdmUoKSx0aGlzLl9wbGFjZWhvbGRlclJlZj8uZGVzdHJveSgpLHRoaXMuX3BsYWNlaG9sZGVyPXRoaXMuX3BsYWNlaG9sZGVyUmVmPW51bGx9X2VuZERyYWdTZXF1ZW5jZShsKXtpZih0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LmlzRHJhZ2dpbmco''@;'; put 'put ''dGhpcykmJih0aGlzLl9yZW1vdmVMaXN0ZW5lcnMoKSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnN0b3BEcmFnZ2luZyh0aGlzKSx0aGlzLl90b2dnbGVOYXRpdmVEcmFnSW50ZXJhY3Rpb25zKCksdGhpcy5faGFuZGxlcyYmKHRoaXMuX3Jvb3RFbGVtZW50LnN0eWxlLndlYmtpdFRhcEhpZ2hs''@;'; put 'put ''aWdodENvbG9yPXRoaXMuX3Jvb3RFbGVtZW50VGFwSGlnaGxpZ2h0KSx0aGlzLl9oYXNTdGFydGVkRHJhZ2dpbmcpKWlmKHRoaXMucmVsZWFzZWQubmV4dCh7c291cmNlOnRoaXMsZXZlbnQ6bH0pLHRoaXMuX2Ryb3BDb250YWluZXIpdGhpcy5fZHJvcENvbnRhaW5lci5fc3RvcFNjcm9sbGlu''@;'; put 'put ''ZygpLHRoaXMuX2FuaW1hdGVQcmV2aWV3VG9QbGFjZWhvbGRlcigpLnRoZW4oKCk9Pnt0aGlzLl9jbGVhbnVwRHJhZ0FydGlmYWN0cyhsKSx0aGlzLl9jbGVhbnVwQ2FjaGVkRGltZW5zaW9ucygpLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc3RvcERyYWdnaW5nKHRoaXMpfSk7ZWxzZXt0aGlz''@;'; put 'put ''Ll9wYXNzaXZlVHJhbnNmb3JtLng9dGhpcy5fYWN0aXZlVHJhbnNmb3JtLng7Y29uc3QgYT10aGlzLl9nZXRQb2ludGVyUG9zaXRpb25PblBhZ2UobCk7dGhpcy5fcGFzc2l2ZVRyYW5zZm9ybS55PXRoaXMuX2FjdGl2ZVRyYW5zZm9ybS55LHRoaXMuX25nWm9uZS5ydW4oKCk9Pnt0aGlzLmVu''@;'; put 'put ''ZGVkLm5leHQoe3NvdXJjZTp0aGlzLGRpc3RhbmNlOnRoaXMuX2dldERyYWdEaXN0YW5jZShhKSxkcm9wUG9pbnQ6YSxldmVudDpsfSl9KSx0aGlzLl9jbGVhbnVwQ2FjaGVkRGltZW5zaW9ucygpLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc3RvcERyYWdnaW5nKHRoaXMpfX1fc3RhcnREcmFn''@;'; put 'put ''U2VxdWVuY2UobCl7eHgobCkmJih0aGlzLl9sYXN0VG91Y2hFdmVudFRpbWU9RGF0ZS5ub3coKSksdGhpcy5fdG9nZ2xlTmF0aXZlRHJhZ0ludGVyYWN0aW9ucygpO2NvbnN0IGE9dGhpcy5fZ2V0U2hhZG93Um9vdCgpLGQ9dGhpcy5fZHJvcENvbnRhaW5lcjtpZihhJiZ0aGlzLl9uZ1pvbmUu''@;'; put 'put ''cnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnthLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdHN0YXJ0IixRMGUscTBlKX0pLGQpe2NvbnN0IGg9dGhpcy5fcm9vdEVsZW1lbnQsZj1oLnBhcmVudE5vZGUsdj10aGlzLl9wbGFjZWhvbGRlcj10aGlzLl9jcmVhdGVQbGFjZWhvbGRlckVsZW1lbnQoKSxN''@;'; put 'put ''PXRoaXMuX2FuY2hvcj10aGlzLl9hbmNob3J8fHRoaXMuX2RvY3VtZW50LmNyZWF0ZUNvbW1lbnQoIiIpO2YuaW5zZXJ0QmVmb3JlKE0saCksdGhpcy5faW5pdGlhbFRyYW5zZm9ybT1oLnN0eWxlLnRyYW5zZm9ybXx8IiIsdGhpcy5fcHJldmlldz1uZXcgaEZlKHRoaXMuX2RvY3VtZW50LHRo''@;'; put 'put ''aXMuX3Jvb3RFbGVtZW50LHRoaXMuX2RpcmVjdGlvbix0aGlzLl9pbml0aWFsRG9tUmVjdCx0aGlzLl9wcmV2aWV3VGVtcGxhdGV8fG51bGwsdGhpcy5wcmV2aWV3Q2xhc3N8fG51bGwsdGhpcy5fcGlja3VwUG9zaXRpb25PblBhZ2UsdGhpcy5faW5pdGlhbFRyYW5zZm9ybSx0aGlzLl9jb25m''@;'; put 'put ''aWcuekluZGV4fHwxZTMpLHRoaXMuX3ByZXZpZXcuYXR0YWNoKHRoaXMuX2dldFByZXZpZXdJbnNlcnRpb25Qb2ludChmLGEpKSxWMGUoaCwhMSxYMGUpLHRoaXMuX2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZi5yZXBsYWNlQ2hpbGQodixoKSksdGhpcy5zdGFydGVkLm5leHQoe3NvdXJj''@;'; put 'put ''ZTp0aGlzLGV2ZW50Omx9KSxkLnN0YXJ0KCksdGhpcy5faW5pdGlhbENvbnRhaW5lcj1kLHRoaXMuX2luaXRpYWxJbmRleD1kLmdldEl0ZW1JbmRleCh0aGlzKX1lbHNlIHRoaXMuc3RhcnRlZC5uZXh0KHtzb3VyY2U6dGhpcyxldmVudDpsfSksdGhpcy5faW5pdGlhbENvbnRhaW5lcj10aGlz''@;'; put 'put ''Ll9pbml0aWFsSW5kZXg9dm9pZCAwO3RoaXMuX3BhcmVudFBvc2l0aW9ucy5jYWNoZShkP2QuZ2V0U2Nyb2xsYWJsZVBhcmVudHMoKTpbXSl9X2luaXRpYWxpemVEcmFnU2VxdWVuY2UobCxhKXt0aGlzLl9wYXJlbnREcmFnUmVmJiZhLnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IGQ9dGhpcy5p''@;'; put 'put ''c0RyYWdnaW5nKCksaD14eChhKSxmPSFoJiYwIT09YS5idXR0b24sdj10aGlzLl9yb290RWxlbWVudCxNPWJMKGEpLEQ9IWgmJnRoaXMuX2xhc3RUb3VjaEV2ZW50VGltZSYmdGhpcy5fbGFzdFRvdWNoRXZlbnRUaW1lKzgwMD5EYXRlLm5vdygpLFo9aD9mdW5jdGlvbiBrUGUoYyl7Y29uc3Qg''@;'; put 'put ''bD1jLnRvdWNoZXMmJmMudG91Y2hlc1swXXx8Yy5jaGFuZ2VkVG91Y2hlcyYmYy5jaGFuZ2VkVG91Y2hlc1swXTtyZXR1cm4hKCFsfHwtMSE9PWwuaWRlbnRpZmllcnx8bnVsbCE9bC5yYWRpdXNYJiYxIT09bC5yYWRpdXNYfHxudWxsIT1sLnJhZGl1c1kmJjEhPT1sLnJhZGl1c1kpfShhKTpm''@;'; put 'put ''dW5jdGlvbiBBUGUoYyl7cmV0dXJuIDA9PT1jLmJ1dHRvbnN8fDA9PT1jLmRldGFpbH0oYSk7aWYoTSYmTS5kcmFnZ2FibGUmJiJtb3VzZWRvd24iPT09YS50eXBlJiZhLnByZXZlbnREZWZhdWx0KCksZHx8Znx8RHx8WilyZXR1cm47aWYodGhpcy5faGFuZGxlcy5sZW5ndGgpe2NvbnN0IGJl''@;'; put 'put ''PXYuc3R5bGU7dGhpcy5fcm9vdEVsZW1lbnRUYXBIaWdobGlnaHQ9YmUud2Via2l0VGFwSGlnaGxpZ2h0Q29sb3J8fCIiLGJlLndlYmtpdFRhcEhpZ2hsaWdodENvbG9yPSJ0cmFuc3BhcmVudCJ9dGhpcy5faGFzU3RhcnRlZERyYWdnaW5nPXRoaXMuX2hhc01vdmVkPSExLHRoaXMuX3JlbW92''@;'; put 'put ''ZUxpc3RlbmVycygpLHRoaXMuX2luaXRpYWxEb21SZWN0PXRoaXMuX3Jvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuX3BvaW50ZXJNb3ZlU3Vic2NyaXB0aW9uPXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkucG9pbnRlck1vdmUuc3Vic2NyaWJlKHRoaXMuX3BvaW50ZXJN''@;'; put 'put ''b3ZlKSx0aGlzLl9wb2ludGVyVXBTdWJzY3JpcHRpb249dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5wb2ludGVyVXAuc3Vic2NyaWJlKHRoaXMuX3BvaW50ZXJVcCksdGhpcy5fc2Nyb2xsU3Vic2NyaXB0aW9uPXRoaXMuX2RyYWdEcm9wUmVnaXN0cnkuc2Nyb2xsZWQodGhpcy5fZ2V0U2hhZG93''@;'; put 'put ''Um9vdCgpKS5zdWJzY3JpYmUoYmU9PnRoaXMuX3VwZGF0ZU9uU2Nyb2xsKGJlKSksdGhpcy5fYm91bmRhcnlFbGVtZW50JiYodGhpcy5fYm91bmRhcnlSZWN0PWRZKHRoaXMuX2JvdW5kYXJ5RWxlbWVudCkpO2NvbnN0IG5lPXRoaXMuX3ByZXZpZXdUZW1wbGF0ZTt0aGlzLl9waWNrdXBQb3Np''@;'; put 'put ''dGlvbkluRWxlbWVudD1uZSYmbmUudGVtcGxhdGUmJiFuZS5tYXRjaFNpemU/e3g6MCx5OjB9OnRoaXMuX2dldFBvaW50ZXJQb3NpdGlvbkluRWxlbWVudCh0aGlzLl9pbml0aWFsRG9tUmVjdCxsLGEpO2NvbnN0IGNlPXRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlPXRoaXMuX2xhc3RLbm93''@;'; put 'put ''blBvaW50ZXJQb3NpdGlvbj10aGlzLl9nZXRQb2ludGVyUG9zaXRpb25PblBhZ2UoYSk7dGhpcy5fcG9pbnRlckRpcmVjdGlvbkRlbHRhPXt4OjAseTowfSx0aGlzLl9wb2ludGVyUG9zaXRpb25BdExhc3REaXJlY3Rpb25DaGFuZ2U9e3g6Y2UueCx5OmNlLnl9LHRoaXMuX2RyYWdTdGFydFRp''@;'; put 'put ''bWU9RGF0ZS5ub3coKSx0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnN0YXJ0RHJhZ2dpbmcodGhpcyxhKX1fY2xlYW51cERyYWdBcnRpZmFjdHMobCl7VjBlKHRoaXMuX3Jvb3RFbGVtZW50LCEwLFgwZSksdGhpcy5fYW5jaG9yLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKHRoaXMuX3Jvb3RFbGVt''@;'; put 'put ''ZW50LHRoaXMuX2FuY2hvciksdGhpcy5fZGVzdHJveVByZXZpZXcoKSx0aGlzLl9kZXN0cm95UGxhY2Vob2xkZXIoKSx0aGlzLl9pbml0aWFsRG9tUmVjdD10aGlzLl9ib3VuZGFyeVJlY3Q9dGhpcy5fcHJldmlld1JlY3Q9dGhpcy5faW5pdGlhbFRyYW5zZm9ybT12b2lkIDAsdGhpcy5fbmda''@;'; put 'put ''b25lLnJ1bigoKT0+e2NvbnN0IGE9dGhpcy5fZHJvcENvbnRhaW5lcixkPWEuZ2V0SXRlbUluZGV4KHRoaXMpLGg9dGhpcy5fZ2V0UG9pbnRlclBvc2l0aW9uT25QYWdlKGwpLGY9dGhpcy5fZ2V0RHJhZ0Rpc3RhbmNlKGgpLHY9YS5faXNPdmVyQ29udGFpbmVyKGgueCxoLnkpO3RoaXMuZW5k''@;'; put 'put ''ZWQubmV4dCh7c291cmNlOnRoaXMsZGlzdGFuY2U6Zixkcm9wUG9pbnQ6aCxldmVudDpsfSksdGhpcy5kcm9wcGVkLm5leHQoe2l0ZW06dGhpcyxjdXJyZW50SW5kZXg6ZCxwcmV2aW91c0luZGV4OnRoaXMuX2luaXRpYWxJbmRleCxjb250YWluZXI6YSxwcmV2aW91c0NvbnRhaW5lcjp0aGlz''@;'; put 'put ''Ll9pbml0aWFsQ29udGFpbmVyLGlzUG9pbnRlck92ZXJDb250YWluZXI6dixkaXN0YW5jZTpmLGRyb3BQb2ludDpoLGV2ZW50Omx9KSxhLmRyb3AodGhpcyxkLHRoaXMuX2luaXRpYWxJbmRleCx0aGlzLl9pbml0aWFsQ29udGFpbmVyLHYsZixoLGwpLHRoaXMuX2Ryb3BDb250YWluZXI9dGhp''@;'; put 'put ''cy5faW5pdGlhbENvbnRhaW5lcn0pfV91cGRhdGVBY3RpdmVEcm9wQ29udGFpbmVyKHt4OmwseTphfSx7eDpkLHk6aH0pe2xldCBmPXRoaXMuX2luaXRpYWxDb250YWluZXIuX2dldFNpYmxpbmdDb250YWluZXJGcm9tUG9zaXRpb24odGhpcyxsLGEpOyFmJiZ0aGlzLl9kcm9wQ29udGFpbmVy''@;'; put 'put ''IT09dGhpcy5faW5pdGlhbENvbnRhaW5lciYmdGhpcy5faW5pdGlhbENvbnRhaW5lci5faXNPdmVyQ29udGFpbmVyKGwsYSkmJihmPXRoaXMuX2luaXRpYWxDb250YWluZXIpLGYmJmYhPT10aGlzLl9kcm9wQ29udGFpbmVyJiZ0aGlzLl9uZ1pvbmUucnVuKCgpPT57dGhpcy5leGl0ZWQubmV4''@;'; put 'put ''dCh7aXRlbTp0aGlzLGNvbnRhaW5lcjp0aGlzLl9kcm9wQ29udGFpbmVyfSksdGhpcy5fZHJvcENvbnRhaW5lci5leGl0KHRoaXMpLHRoaXMuX2Ryb3BDb250YWluZXI9Zix0aGlzLl9kcm9wQ29udGFpbmVyLmVudGVyKHRoaXMsbCxhLGY9PT10aGlzLl9pbml0aWFsQ29udGFpbmVyJiZmLnNv''@;'; put 'put ''cnRpbmdEaXNhYmxlZD90aGlzLl9pbml0aWFsSW5kZXg6dm9pZCAwKSx0aGlzLmVudGVyZWQubmV4dCh7aXRlbTp0aGlzLGNvbnRhaW5lcjpmLGN1cnJlbnRJbmRleDpmLmdldEl0ZW1JbmRleCh0aGlzKX0pfSksdGhpcy5pc0RyYWdnaW5nKCkmJih0aGlzLl9kcm9wQ29udGFpbmVyLl9zdGFy''@;'; put 'put ''dFNjcm9sbGluZ0lmTmVjZXNzYXJ5KGQsaCksdGhpcy5fZHJvcENvbnRhaW5lci5fc29ydEl0ZW0odGhpcyxsLGEsdGhpcy5fcG9pbnRlckRpcmVjdGlvbkRlbHRhKSx0aGlzLmNvbnN0cmFpblBvc2l0aW9uP3RoaXMuX2FwcGx5UHJldmlld1RyYW5zZm9ybShsLGEpOnRoaXMuX2FwcGx5UHJl''@;'; put 'put ''dmlld1RyYW5zZm9ybShsLXRoaXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50LngsYS10aGlzLl9waWNrdXBQb3NpdGlvbkluRWxlbWVudC55KSl9X2FuaW1hdGVQcmV2aWV3VG9QbGFjZWhvbGRlcigpe2lmKCF0aGlzLl9oYXNNb3ZlZClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7Y29uc3Qg''@;'; put 'put ''bD10aGlzLl9wbGFjZWhvbGRlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLl9wcmV2aWV3LmFkZENsYXNzKCJjZGstZHJhZy1hbmltYXRpbmciKSx0aGlzLl9hcHBseVByZXZpZXdUcmFuc2Zvcm0obC5sZWZ0LGwudG9wKTtjb25zdCBhPXRoaXMuX3ByZXZpZXcuZ2V0VHJhbnNpdGlv''@;'; put 'put ''bkR1cmF0aW9uKCk7cmV0dXJuIDA9PT1hP1Byb21pc2UucmVzb2x2ZSgpOnRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+bmV3IFByb21pc2UoZD0+e2NvbnN0IGg9dj0+eyghdnx8Ykwodik9PT10aGlzLl9wcmV2aWV3JiYidHJhbnNmb3JtIj09PXYucHJvcGVydHlOYW1lKSYm''@;'; put 'put ''KHRoaXMuX3ByZXZpZXc/LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLGgpLGQoKSxjbGVhclRpbWVvdXQoZikpfSxmPXNldFRpbWVvdXQoaCwxLjUqYSk7dGhpcy5fcHJldmlldy5hZGRFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIixoKX0pKX1fY3JlYXRlUGxhY2Vo''@;'; put 'put ''b2xkZXJFbGVtZW50KCl7Y29uc3QgbD10aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlLGE9bD9sLnRlbXBsYXRlOm51bGw7bGV0IGQ7cmV0dXJuIGE/KHRoaXMuX3BsYWNlaG9sZGVyUmVmPWwudmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcoYSxsLmNvbnRleHQpLHRoaXMuX3BsYWNl''@;'; put 'put ''aG9sZGVyUmVmLmRldGVjdENoYW5nZXMoKSxkPUcwZSh0aGlzLl9wbGFjZWhvbGRlclJlZix0aGlzLl9kb2N1bWVudCkpOmQ9VTBlKHRoaXMuX3Jvb3RFbGVtZW50KSxkLnN0eWxlLnBvaW50ZXJFdmVudHM9Im5vbmUiLGQuY2xhc3NMaXN0LmFkZCgiY2RrLWRyYWctcGxhY2Vob2xkZXIiKSxk''@;'; put 'put ''fV9nZXRQb2ludGVyUG9zaXRpb25JbkVsZW1lbnQobCxhLGQpe2NvbnN0IGg9YT09PXRoaXMuX3Jvb3RFbGVtZW50P251bGw6YSxmPWg/aC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTpsLHY9eHgoZCk/ZC50YXJnZXRUb3VjaGVzWzBdOmQsTT10aGlzLl9nZXRWaWV3cG9ydFNjcm9sbFBvc2l0''@;'; put 'put ''aW9uKCk7cmV0dXJue3g6Zi5sZWZ0LWwubGVmdCsodi5wYWdlWC1mLmxlZnQtTS5sZWZ0KSx5OmYudG9wLWwudG9wKyh2LnBhZ2VZLWYudG9wLU0udG9wKX19X2dldFBvaW50ZXJQb3NpdGlvbk9uUGFnZShsKXtjb25zdCBhPXRoaXMuX2dldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKSxkPXh4''@;'; put 'put ''KGwpP2wudG91Y2hlc1swXXx8bC5jaGFuZ2VkVG91Y2hlc1swXXx8e3BhZ2VYOjAscGFnZVk6MH06bCxoPWQucGFnZVgtYS5sZWZ0LGY9ZC5wYWdlWS1hLnRvcDtpZih0aGlzLl9vd25lclNWR0VsZW1lbnQpe2NvbnN0IHY9dGhpcy5fb3duZXJTVkdFbGVtZW50LmdldFNjcmVlbkNUTSgpO2lm''@;'; put 'put ''KHYpe2NvbnN0IE09dGhpcy5fb3duZXJTVkdFbGVtZW50LmNyZWF0ZVNWR1BvaW50KCk7cmV0dXJuIE0ueD1oLE0ueT1mLE0ubWF0cml4VHJhbnNmb3JtKHYuaW52ZXJzZSgpKX19cmV0dXJue3g6aCx5OmZ9fV9nZXRDb25zdHJhaW5lZFBvaW50ZXJQb3NpdGlvbihsKXtjb25zdCBhPXRoaXMu''@;'; put 'put ''X2Ryb3BDb250YWluZXI/dGhpcy5fZHJvcENvbnRhaW5lci5sb2NrQXhpczpudWxsO2xldHt4OmQseTpofT10aGlzLmNvbnN0cmFpblBvc2l0aW9uP3RoaXMuY29uc3RyYWluUG9zaXRpb24obCx0aGlzLHRoaXMuX2luaXRpYWxEb21SZWN0LHRoaXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50''@;'; put 'put ''KTpsO2lmKCJ4Ij09PXRoaXMubG9ja0F4aXN8fCJ4Ij09PWE/aD10aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS55LSh0aGlzLmNvbnN0cmFpblBvc2l0aW9uP3RoaXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50Lnk6MCk6KCJ5Ij09PXRoaXMubG9ja0F4aXN8fCJ5Ij09PWEpJiYoZD10aGlz''@;'; put 'put ''Ll9waWNrdXBQb3NpdGlvbk9uUGFnZS54LSh0aGlzLmNvbnN0cmFpblBvc2l0aW9uP3RoaXMuX3BpY2t1cFBvc2l0aW9uSW5FbGVtZW50Lng6MCkpLHRoaXMuX2JvdW5kYXJ5UmVjdCl7Y29uc3R7eDpmLHk6dn09dGhpcy5jb25zdHJhaW5Qb3NpdGlvbj97eDowLHk6MH06dGhpcy5fcGlja3Vw''@;'; put 'put ''UG9zaXRpb25JbkVsZW1lbnQsTT10aGlzLl9ib3VuZGFyeVJlY3Qse3dpZHRoOkQsaGVpZ2h0Olp9PXRoaXMuX2dldFByZXZpZXdSZWN0KCksbmU9TS50b3ArdixjZT1NLmJvdHRvbS0oWi12KTtkPUowZShkLE0ubGVmdCtmLE0ucmlnaHQtKEQtZikpLGg9SjBlKGgsbmUsY2UpfXJldHVybnt4''@;'; put 'put ''OmQseTpofX1fdXBkYXRlUG9pbnRlckRpcmVjdGlvbkRlbHRhKGwpe2NvbnN0e3g6YSx5OmR9PWwsaD10aGlzLl9wb2ludGVyRGlyZWN0aW9uRGVsdGEsZj10aGlzLl9wb2ludGVyUG9zaXRpb25BdExhc3REaXJlY3Rpb25DaGFuZ2Usdj1NYXRoLmFicyhhLWYueCksTT1NYXRoLmFicyhkLWYu''@;'; put 'put ''eSk7cmV0dXJuIHY+dGhpcy5fY29uZmlnLnBvaW50ZXJEaXJlY3Rpb25DaGFuZ2VUaHJlc2hvbGQmJihoLng9YT5mLng/MTotMSxmLng9YSksTT50aGlzLl9jb25maWcucG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZCYmKGgueT1kPmYueT8xOi0xLGYueT1kKSxofV90b2dnbGVOYXRp''@;'; put 'put ''dmVEcmFnSW50ZXJhY3Rpb25zKCl7aWYoIXRoaXMuX3Jvb3RFbGVtZW50fHwhdGhpcy5faGFuZGxlcylyZXR1cm47Y29uc3QgbD10aGlzLl9oYW5kbGVzLmxlbmd0aD4wfHwhdGhpcy5pc0RyYWdnaW5nKCk7bCE9PXRoaXMuX25hdGl2ZUludGVyYWN0aW9uc0VuYWJsZWQmJih0aGlzLl9uYXRp''@;'; put 'put ''dmVJbnRlcmFjdGlvbnNFbmFibGVkPWwsRXkodGhpcy5fcm9vdEVsZW1lbnQsbCkpfV9yZW1vdmVSb290RWxlbWVudExpc3RlbmVycyhsKXtsLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsdGhpcy5fcG9pbnRlckRvd24seEwpLGwucmVtb3ZlRXZlbnRMaXN0ZW5lcigidG91Y2hz''@;'; put 'put ''dGFydCIsdGhpcy5fcG9pbnRlckRvd24sSzBlKSxsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImRyYWdzdGFydCIsdGhpcy5fbmF0aXZlRHJhZ1N0YXJ0LHhMKX1fYXBwbHlSb290RWxlbWVudFRyYW5zZm9ybShsLGEpe2NvbnN0IGQ9TUwobCxhKSxoPXRoaXMuX3Jvb3RFbGVtZW50LnN0eWxlO251''@;'; put 'put ''bGw9PXRoaXMuX2luaXRpYWxUcmFuc2Zvcm0mJih0aGlzLl9pbml0aWFsVHJhbnNmb3JtPWgudHJhbnNmb3JtJiYibm9uZSIhPWgudHJhbnNmb3JtP2gudHJhbnNmb3JtOiIiKSxoLnRyYW5zZm9ybT1TTChkLHRoaXMuX2luaXRpYWxUcmFuc2Zvcm0pfV9hcHBseVByZXZpZXdUcmFuc2Zvcm0o''@;'; put 'put ''bCxhKXtjb25zdCBkPXRoaXMuX3ByZXZpZXdUZW1wbGF0ZT8udGVtcGxhdGU/dm9pZCAwOnRoaXMuX2luaXRpYWxUcmFuc2Zvcm0saD1NTChsLGEpO3RoaXMuX3ByZXZpZXcuc2V0VHJhbnNmb3JtKFNMKGgsZCkpfV9nZXREcmFnRGlzdGFuY2UobCl7Y29uc3QgYT10aGlzLl9waWNrdXBQb3Np''@;'; put 'put ''dGlvbk9uUGFnZTtyZXR1cm4gYT97eDpsLngtYS54LHk6bC55LWEueX06e3g6MCx5OjB9fV9jbGVhbnVwQ2FjaGVkRGltZW5zaW9ucygpe3RoaXMuX2JvdW5kYXJ5UmVjdD10aGlzLl9wcmV2aWV3UmVjdD12b2lkIDAsdGhpcy5fcGFyZW50UG9zaXRpb25zLmNsZWFyKCl9X2NvbnRhaW5JbnNp''@;'; put 'put ''ZGVCb3VuZGFyeU9uUmVzaXplKCl7bGV0e3g6bCx5OmF9PXRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm07aWYoMD09PWwmJjA9PT1hfHx0aGlzLmlzRHJhZ2dpbmcoKXx8IXRoaXMuX2JvdW5kYXJ5RWxlbWVudClyZXR1cm47Y29uc3QgZD10aGlzLl9yb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVu''@;'; put 'put ''dFJlY3QoKSxoPXRoaXMuX2JvdW5kYXJ5RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZigwPT09aC53aWR0aCYmMD09PWguaGVpZ2h0fHwwPT09ZC53aWR0aCYmMD09PWQuaGVpZ2h0KXJldHVybjtjb25zdCBmPWgubGVmdC1kLmxlZnQsdj1kLnJpZ2h0LWgucmlnaHQsTT1oLnRv''@;'; put 'put ''cC1kLnRvcCxEPWQuYm90dG9tLWguYm90dG9tO2gud2lkdGg+ZC53aWR0aD8oZj4wJiYobCs9Ziksdj4wJiYobC09dikpOmw9MCxoLmhlaWdodD5kLmhlaWdodD8oTT4wJiYoYSs9TSksRD4wJiYoYS09RCkpOmE9MCwobCE9PXRoaXMuX3Bhc3NpdmVUcmFuc2Zvcm0ueHx8YSE9PXRoaXMuX3Bh''@;'; put 'put ''c3NpdmVUcmFuc2Zvcm0ueSkmJnRoaXMuc2V0RnJlZURyYWdQb3NpdGlvbih7eTphLHg6bH0pfV9nZXREcmFnU3RhcnREZWxheShsKXtjb25zdCBhPXRoaXMuZHJhZ1N0YXJ0RGVsYXk7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBhP2E6eHgobCk/YS50b3VjaDphP2EubW91c2U6MH1fdXBkYXRl''@;'; put 'put ''T25TY3JvbGwobCl7Y29uc3QgYT10aGlzLl9wYXJlbnRQb3NpdGlvbnMuaGFuZGxlU2Nyb2xsKGwpO2lmKGEpe2NvbnN0IGQ9YkwobCk7dGhpcy5fYm91bmRhcnlSZWN0JiZkIT09dGhpcy5fYm91bmRhcnlFbGVtZW50JiZkLmNvbnRhaW5zKHRoaXMuX2JvdW5kYXJ5RWxlbWVudCkmJk14KHRo''@;'; put 'put ''aXMuX2JvdW5kYXJ5UmVjdCxhLnRvcCxhLmxlZnQpLHRoaXMuX3BpY2t1cFBvc2l0aW9uT25QYWdlLngrPWEubGVmdCx0aGlzLl9waWNrdXBQb3NpdGlvbk9uUGFnZS55Kz1hLnRvcCx0aGlzLl9kcm9wQ29udGFpbmVyfHwodGhpcy5fYWN0aXZlVHJhbnNmb3JtLngtPWEubGVmdCx0aGlzLl9h''@;'; put 'put ''Y3RpdmVUcmFuc2Zvcm0ueS09YS50b3AsdGhpcy5fYXBwbHlSb290RWxlbWVudFRyYW5zZm9ybSh0aGlzLl9hY3RpdmVUcmFuc2Zvcm0ueCx0aGlzLl9hY3RpdmVUcmFuc2Zvcm0ueSkpfX1fZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpe3JldHVybiB0aGlzLl9wYXJlbnRQb3NpdGlvbnMu''@;'; put 'put ''cG9zaXRpb25zLmdldCh0aGlzLl9kb2N1bWVudCk/LnNjcm9sbFBvc2l0aW9ufHx0aGlzLl9wYXJlbnRQb3NpdGlvbnMuZ2V0Vmlld3BvcnRTY3JvbGxQb3NpdGlvbigpfV9nZXRTaGFkb3dSb290KCl7cmV0dXJuIHZvaWQgMD09PXRoaXMuX2NhY2hlZFNoYWRvd1Jvb3QmJih0aGlzLl9jYWNo''@;'; put 'put ''ZWRTaGFkb3dSb290PVMwZSh0aGlzLl9yb290RWxlbWVudCkpLHRoaXMuX2NhY2hlZFNoYWRvd1Jvb3R9X2dldFByZXZpZXdJbnNlcnRpb25Qb2ludChsLGEpe2NvbnN0IGQ9dGhpcy5fcHJldmlld0NvbnRhaW5lcnx8Imdsb2JhbCI7aWYoInBhcmVudCI9PT1kKXJldHVybiBsO2lmKCJnbG9i''@;'; put 'put ''YWwiPT09ZCl7Y29uc3QgaD10aGlzLl9kb2N1bWVudDtyZXR1cm4gYXx8aC5mdWxsc2NyZWVuRWxlbWVudHx8aC53ZWJraXRGdWxsc2NyZWVuRWxlbWVudHx8aC5tb3pGdWxsU2NyZWVuRWxlbWVudHx8aC5tc0Z1bGxzY3JlZW5FbGVtZW50fHxoLmJvZHl9cmV0dXJuIHhkKGQpfV9nZXRQcmV2''@;'; put 'put ''aWV3UmVjdCgpe3JldHVybighdGhpcy5fcHJldmlld1JlY3R8fCF0aGlzLl9wcmV2aWV3UmVjdC53aWR0aCYmIXRoaXMuX3ByZXZpZXdSZWN0LmhlaWdodCkmJih0aGlzLl9wcmV2aWV3UmVjdD10aGlzLl9wcmV2aWV3P3RoaXMuX3ByZXZpZXcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6dGhp''@;'; put 'put ''cy5faW5pdGlhbERvbVJlY3QpLHRoaXMuX3ByZXZpZXdSZWN0fV9nZXRUYXJnZXRIYW5kbGUobCl7cmV0dXJuIHRoaXMuX2hhbmRsZXMuZmluZChhPT5sLnRhcmdldCYmKGwudGFyZ2V0PT09YXx8YS5jb250YWlucyhsLnRhcmdldCkpKX19ZnVuY3Rpb24gSjBlKGMsbCxhKXtyZXR1cm4gTWF0''@;'; put 'put ''aC5tYXgobCxNYXRoLm1pbihhLGMpKX1mdW5jdGlvbiB4eChjKXtyZXR1cm4idCI9PT1jLnR5cGVbMF19ZnVuY3Rpb24gUTBlKGMpe2MucHJldmVudERlZmF1bHQoKX1mdW5jdGlvbiBlMWUoYyxsLGEpe2NvbnN0IGQ9RXgobCxjLmxlbmd0aC0xKSxoPUV4KGEsYy5sZW5ndGgtMSk7aWYoZD09''@;'; put 'put ''PWgpcmV0dXJuO2NvbnN0IGY9Y1tkXSx2PWg8ZD8tMToxO2ZvcihsZXQgTT1kO00hPT1oO00rPXYpY1tNXT1jW00rdl07Y1toXT1mfWZ1bmN0aW9uIEV4KGMsbCl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4obCxjKSl9Y2xhc3MgbUZle2NvbnN0cnVjdG9yKGwsYSl7dGhpcy5fZWxlbWVu''@;'; put 'put ''dD1sLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnk9YSx0aGlzLl9pdGVtUG9zaXRpb25zPVtdLHRoaXMub3JpZW50YXRpb249InZlcnRpY2FsIix0aGlzLl9wcmV2aW91c1N3YXA9e2RyYWc6bnVsbCxkZWx0YTowLG92ZXJsYXBzOiExfX1zdGFydChsKXt0aGlzLndpdGhJdGVtcyhsKX1zb3J0KGws''@;'; put 'put ''YSxkLGgpe2NvbnN0IGY9dGhpcy5faXRlbVBvc2l0aW9ucyx2PXRoaXMuX2dldEl0ZW1JbmRleEZyb21Qb2ludGVyUG9zaXRpb24obCxhLGQsaCk7aWYoLTE9PT12JiZmLmxlbmd0aD4wKXJldHVybiBudWxsO2NvbnN0IE09Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbixEPWYuZmlu''@;'; put 'put ''ZEluZGV4KG50PT5udC5kcmFnPT09bCksWj1mW3ZdLGNlPVouY2xpZW50UmVjdCxiZT1EPnY/MTotMSxFZT10aGlzLl9nZXRJdGVtT2Zmc2V0UHgoZltEXS5jbGllbnRSZWN0LGNlLGJlKSxCZT10aGlzLl9nZXRTaWJsaW5nT2Zmc2V0UHgoRCxmLGJlKSxxZT1mLnNsaWNlKCk7cmV0dXJuIGUx''@;'; put 'put ''ZShmLEQsdiksZi5mb3JFYWNoKChudCxsdCk9PntpZihxZVtsdF09PT1udClyZXR1cm47Y29uc3QgbXQ9bnQuZHJhZz09PWwsSnQ9bXQ/RWU6QmUseW49bXQ/bC5nZXRQbGFjZWhvbGRlckVsZW1lbnQoKTpudC5kcmFnLmdldFJvb3RFbGVtZW50KCk7bnQub2Zmc2V0Kz1KdCxNPyh5bi5zdHls''@;'; put 'put ''ZS50cmFuc2Zvcm09U0woYHRyYW5zbGF0ZTNkKCR7TWF0aC5yb3VuZChudC5vZmZzZXQpfXB4LCAwLCAwKWAsbnQuaW5pdGlhbFRyYW5zZm9ybSksTXgobnQuY2xpZW50UmVjdCwwLEp0KSk6KHluLnN0eWxlLnRyYW5zZm9ybT1TTChgdHJhbnNsYXRlM2QoMCwgJHtNYXRoLnJvdW5kKG50Lm9m''@;'; put 'put ''ZnNldCl9cHgsIDApYCxudC5pbml0aWFsVHJhbnNmb3JtKSxNeChudC5jbGllbnRSZWN0LEp0LDApKX0pLHRoaXMuX3ByZXZpb3VzU3dhcC5vdmVybGFwcz1oWShjZSxhLGQpLHRoaXMuX3ByZXZpb3VzU3dhcC5kcmFnPVouZHJhZyx0aGlzLl9wcmV2aW91c1N3YXAuZGVsdGE9TT9oLng6aC55''@;'; put 'put ''LHtwcmV2aW91c0luZGV4OkQsY3VycmVudEluZGV4OnZ9fWVudGVyKGwsYSxkLGgpe2NvbnN0IGY9bnVsbD09aHx8aDwwP3RoaXMuX2dldEl0ZW1JbmRleEZyb21Qb2ludGVyUG9zaXRpb24obCxhLGQpOmgsdj10aGlzLl9hY3RpdmVEcmFnZ2FibGVzLE09di5pbmRleE9mKGwpLEQ9bC5nZXRQ''@;'; put 'put ''bGFjZWhvbGRlckVsZW1lbnQoKTtsZXQgWj12W2ZdO2lmKFo9PT1sJiYoWj12W2YrMV0pLCFaJiYobnVsbD09Znx8LTE9PT1mfHxmPHYubGVuZ3RoLTEpJiZ0aGlzLl9zaG91bGRFbnRlckFzRmlyc3RDaGlsZChhLGQpJiYoWj12WzBdKSxNPi0xJiZ2LnNwbGljZShNLDEpLFomJiF0aGlzLl9k''@;'; put 'put ''cmFnRHJvcFJlZ2lzdHJ5LmlzRHJhZ2dpbmcoWikpe2NvbnN0IG5lPVouZ2V0Um9vdEVsZW1lbnQoKTtuZS5wYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShELG5lKSx2LnNwbGljZShmLDAsbCl9ZWxzZSB4ZCh0aGlzLl9lbGVtZW50KS5hcHBlbmRDaGlsZChEKSx2LnB1c2gobCk7RC5zdHls''@;'; put 'put ''ZS50cmFuc2Zvcm09IiIsdGhpcy5fY2FjaGVJdGVtUG9zaXRpb25zKCl9d2l0aEl0ZW1zKGwpe3RoaXMuX2FjdGl2ZURyYWdnYWJsZXM9bC5zbGljZSgpLHRoaXMuX2NhY2hlSXRlbVBvc2l0aW9ucygpfXdpdGhTb3J0UHJlZGljYXRlKGwpe3RoaXMuX3NvcnRQcmVkaWNhdGU9bH1yZXNldCgp''@;'; put 'put ''e3RoaXMuX2FjdGl2ZURyYWdnYWJsZXMuZm9yRWFjaChsPT57Y29uc3QgYT1sLmdldFJvb3RFbGVtZW50KCk7aWYoYSl7Y29uc3QgZD10aGlzLl9pdGVtUG9zaXRpb25zLmZpbmQoaD0+aC5kcmFnPT09bCk/LmluaXRpYWxUcmFuc2Zvcm07YS5zdHlsZS50cmFuc2Zvcm09ZHx8IiJ9fSksdGhp''@;'; put 'put ''cy5faXRlbVBvc2l0aW9ucz1bXSx0aGlzLl9hY3RpdmVEcmFnZ2FibGVzPVtdLHRoaXMuX3ByZXZpb3VzU3dhcC5kcmFnPW51bGwsdGhpcy5fcHJldmlvdXNTd2FwLmRlbHRhPTAsdGhpcy5fcHJldmlvdXNTd2FwLm92ZXJsYXBzPSExfWdldEFjdGl2ZUl0ZW1zU25hcHNob3QoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fYWN0aXZlRHJhZ2dhYmxlc31nZXRJdGVtSW5kZXgobCl7cmV0dXJuKCJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24mJiJydGwiPT09dGhpcy5kaXJlY3Rpb24/dGhpcy5faXRlbVBvc2l0aW9ucy5zbGljZSgpLnJldmVyc2UoKTp0aGlzLl9pdGVtUG9zaXRpb25zKS5maW5k''@;'; put 'put ''SW5kZXgoZD0+ZC5kcmFnPT09bCl9dXBkYXRlT25TY3JvbGwobCxhKXt0aGlzLl9pdGVtUG9zaXRpb25zLmZvckVhY2goKHtjbGllbnRSZWN0OmR9KT0+e014KGQsbCxhKX0pLHRoaXMuX2l0ZW1Qb3NpdGlvbnMuZm9yRWFjaCgoe2RyYWc6ZH0pPT57dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeS5p''@;'; put 'put ''c0RyYWdnaW5nKGQpJiZkLl9zb3J0RnJvbUxhc3RQb2ludGVyUG9zaXRpb24oKX0pfV9jYWNoZUl0ZW1Qb3NpdGlvbnMoKXtjb25zdCBsPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb247dGhpcy5faXRlbVBvc2l0aW9ucz10aGlzLl9hY3RpdmVEcmFnZ2FibGVzLm1hcChhPT57Y29u''@;'; put 'put ''c3QgZD1hLmdldFZpc2libGVFbGVtZW50KCk7cmV0dXJue2RyYWc6YSxvZmZzZXQ6MCxpbml0aWFsVHJhbnNmb3JtOmQuc3R5bGUudHJhbnNmb3JtfHwiIixjbGllbnRSZWN0OmRZKGQpfX0pLnNvcnQoKGEsZCk9Pmw/YS5jbGllbnRSZWN0LmxlZnQtZC5jbGllbnRSZWN0LmxlZnQ6YS5jbGll''@;'; put 'put ''bnRSZWN0LnRvcC1kLmNsaWVudFJlY3QudG9wKX1fZ2V0SXRlbU9mZnNldFB4KGwsYSxkKXtjb25zdCBoPSJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb247bGV0IGY9aD9hLmxlZnQtbC5sZWZ0OmEudG9wLWwudG9wO3JldHVybi0xPT09ZCYmKGYrPWg/YS53aWR0aC1sLndpZHRoOmEu''@;'; put 'put ''aGVpZ2h0LWwuaGVpZ2h0KSxmfV9nZXRTaWJsaW5nT2Zmc2V0UHgobCxhLGQpe2NvbnN0IGg9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbixmPWFbbF0uY2xpZW50UmVjdCx2PWFbbCstMSpkXTtsZXQgTT1mW2g/IndpZHRoIjoiaGVpZ2h0Il0qZDtpZih2KXtjb25zdCBEPWg/Imxl''@;'; put 'put ''ZnQiOiJ0b3AiLFo9aD8icmlnaHQiOiJib3R0b20iOy0xPT09ZD9NLT12LmNsaWVudFJlY3RbRF0tZltaXTpNKz1mW0RdLXYuY2xpZW50UmVjdFtaXX1yZXR1cm4gTX1fc2hvdWxkRW50ZXJBc0ZpcnN0Q2hpbGQobCxhKXtpZighdGhpcy5fYWN0aXZlRHJhZ2dhYmxlcy5sZW5ndGgpcmV0dXJu''@;'; put 'put ''ITE7Y29uc3QgZD10aGlzLl9pdGVtUG9zaXRpb25zLGg9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbjtpZihkWzBdLmRyYWchPT10aGlzLl9hY3RpdmVEcmFnZ2FibGVzWzBdKXtjb25zdCB2PWRbZC5sZW5ndGgtMV0uY2xpZW50UmVjdDtyZXR1cm4gaD9sPj12LnJpZ2h0OmE+PXYu''@;'; put 'put ''Ym90dG9tfXtjb25zdCB2PWRbMF0uY2xpZW50UmVjdDtyZXR1cm4gaD9sPD12LmxlZnQ6YTw9di50b3B9fV9nZXRJdGVtSW5kZXhGcm9tUG9pbnRlclBvc2l0aW9uKGwsYSxkLGgpe2NvbnN0IGY9Imhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbix2PXRoaXMuX2l0ZW1Qb3NpdGlvbnMu''@;'; put 'put ''ZmluZEluZGV4KCh7ZHJhZzpNLGNsaWVudFJlY3Q6RH0pPT5NIT09bCYmKCghaHx8TSE9PXRoaXMuX3ByZXZpb3VzU3dhcC5kcmFnfHwhdGhpcy5fcHJldmlvdXNTd2FwLm92ZXJsYXBzfHwoZj9oLng6aC55KSE9PXRoaXMuX3ByZXZpb3VzU3dhcC5kZWx0YSkmJihmP2E+PU1hdGguZmxvb3Io''@;'; put 'put ''RC5sZWZ0KSYmYTxNYXRoLmZsb29yKEQucmlnaHQpOmQ+PU1hdGguZmxvb3IoRC50b3ApJiZkPE1hdGguZmxvb3IoRC5ib3R0b20pKSkpO3JldHVybi0xIT09diYmdGhpcy5fc29ydFByZWRpY2F0ZSh2LGwpP3Y6LTF9fXZhciBDMj1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLk5PTkU9MF09Ik5P''@;'; put 'put ''TkUiLGNbYy5VUD0xXT0iVVAiLGNbYy5ET1dOPTJdPSJET1dOIixjfShDMnx8e30pLHoxPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuTk9ORT0wXT0iTk9ORSIsY1tjLkxFRlQ9MV09IkxFRlQiLGNbYy5SSUdIVD0yXT0iUklHSFQiLGN9KHoxfHx7fSk7Y2xhc3MgdkZle2NvbnN0cnVjdG9yKGws''@;'; put 'put ''YSxkLGgsZil7dGhpcy5fZHJhZ0Ryb3BSZWdpc3RyeT1hLHRoaXMuX25nWm9uZT1oLHRoaXMuX3ZpZXdwb3J0UnVsZXI9Zix0aGlzLmRpc2FibGVkPSExLHRoaXMuc29ydGluZ0Rpc2FibGVkPSExLHRoaXMuYXV0b1Njcm9sbERpc2FibGVkPSExLHRoaXMuYXV0b1Njcm9sbFN0ZXA9Mix0aGlz''@;'; put 'put ''LmVudGVyUHJlZGljYXRlPSgpPT4hMCx0aGlzLnNvcnRQcmVkaWNhdGU9KCk9PiEwLHRoaXMuYmVmb3JlU3RhcnRlZD1uZXcgV24sdGhpcy5lbnRlcmVkPW5ldyBXbix0aGlzLmV4aXRlZD1uZXcgV24sdGhpcy5kcm9wcGVkPW5ldyBXbix0aGlzLnNvcnRlZD1uZXcgV24sdGhpcy5yZWNlaXZp''@;'; put 'put ''bmdTdGFydGVkPW5ldyBXbix0aGlzLnJlY2VpdmluZ1N0b3BwZWQ9bmV3IFduLHRoaXMuX2lzRHJhZ2dpbmc9ITEsdGhpcy5fZHJhZ2dhYmxlcz1bXSx0aGlzLl9zaWJsaW5ncz1bXSx0aGlzLl9hY3RpdmVTaWJsaW5ncz1uZXcgU2V0LHRoaXMuX3ZpZXdwb3J0U2Nyb2xsU3Vic2NyaXB0aW9u''@;'; put 'put ''PXF0LkVNUFRZLHRoaXMuX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uPUMyLk5PTkUsdGhpcy5faG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbj16MS5OT05FLHRoaXMuX3N0b3BTY3JvbGxUaW1lcnM9bmV3IFduLHRoaXMuX2NhY2hlZFNoYWRvd1Jvb3Q9bnVsbCx0aGlzLl9zdGFydFNjcm9sbElu''@;'; put 'put ''dGVydmFsPSgpPT57dGhpcy5fc3RvcFNjcm9sbGluZygpLGZ1bmN0aW9uIGxGZShjPTAsbD1nTCl7cmV0dXJuIGM8MCYmKGM9MCksUjBlKGMsYyxsKX0oMCxEMGUpLnBpcGUoVjAodGhpcy5fc3RvcFNjcm9sbFRpbWVycykpLnN1YnNjcmliZSgoKT0+e2NvbnN0IHY9dGhpcy5fc2Nyb2xsTm9k''@;'; put 'put ''ZSxNPXRoaXMuYXV0b1Njcm9sbFN0ZXA7dGhpcy5fdmVydGljYWxTY3JvbGxEaXJlY3Rpb249PT1DMi5VUD92LnNjcm9sbEJ5KDAsLU0pOnRoaXMuX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uPT09QzIuRE9XTiYmdi5zY3JvbGxCeSgwLE0pLHRoaXMuX2hvcml6b250YWxTY3JvbGxEaXJlY3Rp''@;'; put 'put ''b249PT16MS5MRUZUP3Yuc2Nyb2xsQnkoLU0sMCk6dGhpcy5faG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbj09PXoxLlJJR0hUJiZ2LnNjcm9sbEJ5KE0sMCl9KX0sdGhpcy5lbGVtZW50PXhkKGwpLHRoaXMuX2RvY3VtZW50PWQsdGhpcy53aXRoU2Nyb2xsYWJsZVBhcmVudHMoW3RoaXMuZWxl''@;'; put 'put ''bWVudF0pLGEucmVnaXN0ZXJEcm9wQ29udGFpbmVyKHRoaXMpLHRoaXMuX3BhcmVudFBvc2l0aW9ucz1uZXcgejBlKGQpLHRoaXMuX3NvcnRTdHJhdGVneT1uZXcgbUZlKHRoaXMuZWxlbWVudCxhKSx0aGlzLl9zb3J0U3RyYXRlZ3kud2l0aFNvcnRQcmVkaWNhdGUoKHYsTSk9PnRoaXMuc29y''@;'; put 'put ''dFByZWRpY2F0ZSh2LE0sdGhpcykpfWRpc3Bvc2UoKXt0aGlzLl9zdG9wU2Nyb2xsaW5nKCksdGhpcy5fc3RvcFNjcm9sbFRpbWVycy5jb21wbGV0ZSgpLHRoaXMuX3ZpZXdwb3J0U2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5iZWZvcmVTdGFydGVkLmNvbXBsZXRlKCks''@;'; put 'put ''dGhpcy5lbnRlcmVkLmNvbXBsZXRlKCksdGhpcy5leGl0ZWQuY29tcGxldGUoKSx0aGlzLmRyb3BwZWQuY29tcGxldGUoKSx0aGlzLnNvcnRlZC5jb21wbGV0ZSgpLHRoaXMucmVjZWl2aW5nU3RhcnRlZC5jb21wbGV0ZSgpLHRoaXMucmVjZWl2aW5nU3RvcHBlZC5jb21wbGV0ZSgpLHRoaXMu''@;'; put 'put ''X2FjdGl2ZVNpYmxpbmdzLmNsZWFyKCksdGhpcy5fc2Nyb2xsTm9kZT1udWxsLHRoaXMuX3BhcmVudFBvc2l0aW9ucy5jbGVhcigpLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnkucmVtb3ZlRHJvcENvbnRhaW5lcih0aGlzKX1pc0RyYWdnaW5nKCl7cmV0dXJuIHRoaXMuX2lzRHJhZ2dpbmd9c3Rh''@;'; put 'put ''cnQoKXt0aGlzLl9kcmFnZ2luZ1N0YXJ0ZWQoKSx0aGlzLl9ub3RpZnlSZWNlaXZpbmdTaWJsaW5ncygpfWVudGVyKGwsYSxkLGgpe3RoaXMuX2RyYWdnaW5nU3RhcnRlZCgpLG51bGw9PWgmJnRoaXMuc29ydGluZ0Rpc2FibGVkJiYoaD10aGlzLl9kcmFnZ2FibGVzLmluZGV4T2YobCkpLHRo''@;'; put 'put ''aXMuX3NvcnRTdHJhdGVneS5lbnRlcihsLGEsZCxoKSx0aGlzLl9jYWNoZVBhcmVudFBvc2l0aW9ucygpLHRoaXMuX25vdGlmeVJlY2VpdmluZ1NpYmxpbmdzKCksdGhpcy5lbnRlcmVkLm5leHQoe2l0ZW06bCxjb250YWluZXI6dGhpcyxjdXJyZW50SW5kZXg6dGhpcy5nZXRJdGVtSW5kZXgo''@;'; put 'put ''bCl9KX1leGl0KGwpe3RoaXMuX3Jlc2V0KCksdGhpcy5leGl0ZWQubmV4dCh7aXRlbTpsLGNvbnRhaW5lcjp0aGlzfSl9ZHJvcChsLGEsZCxoLGYsdixNLEQ9e30pe3RoaXMuX3Jlc2V0KCksdGhpcy5kcm9wcGVkLm5leHQoe2l0ZW06bCxjdXJyZW50SW5kZXg6YSxwcmV2aW91c0luZGV4OmQs''@;'; put 'put ''Y29udGFpbmVyOnRoaXMscHJldmlvdXNDb250YWluZXI6aCxpc1BvaW50ZXJPdmVyQ29udGFpbmVyOmYsZGlzdGFuY2U6dixkcm9wUG9pbnQ6TSxldmVudDpEfSl9d2l0aEl0ZW1zKGwpe2NvbnN0IGE9dGhpcy5fZHJhZ2dhYmxlcztyZXR1cm4gdGhpcy5fZHJhZ2dhYmxlcz1sLGwuZm9yRWFj''@;'; put 'put ''aChkPT5kLl93aXRoRHJvcENvbnRhaW5lcih0aGlzKSksdGhpcy5pc0RyYWdnaW5nKCkmJihhLmZpbHRlcihoPT5oLmlzRHJhZ2dpbmcoKSkuZXZlcnkoaD0+LTE9PT1sLmluZGV4T2YoaCkpP3RoaXMuX3Jlc2V0KCk6dGhpcy5fc29ydFN0cmF0ZWd5LndpdGhJdGVtcyh0aGlzLl9kcmFnZ2Fi''@;'; put 'put ''bGVzKSksdGhpc313aXRoRGlyZWN0aW9uKGwpe3JldHVybiB0aGlzLl9zb3J0U3RyYXRlZ3kuZGlyZWN0aW9uPWwsdGhpc31jb25uZWN0ZWRUbyhsKXtyZXR1cm4gdGhpcy5fc2libGluZ3M9bC5zbGljZSgpLHRoaXN9d2l0aE9yaWVudGF0aW9uKGwpe3JldHVybiB0aGlzLl9zb3J0U3RyYXRl''@;'; put 'put ''Z3kub3JpZW50YXRpb249bCx0aGlzfXdpdGhTY3JvbGxhYmxlUGFyZW50cyhsKXtjb25zdCBhPXhkKHRoaXMuZWxlbWVudCk7cmV0dXJuIHRoaXMuX3Njcm9sbGFibGVFbGVtZW50cz0tMT09PWwuaW5kZXhPZihhKT9bYSwuLi5sXTpsLnNsaWNlKCksdGhpc31nZXRTY3JvbGxhYmxlUGFyZW50''@;'; put 'put ''cygpe3JldHVybiB0aGlzLl9zY3JvbGxhYmxlRWxlbWVudHN9Z2V0SXRlbUluZGV4KGwpe3JldHVybiB0aGlzLl9pc0RyYWdnaW5nP3RoaXMuX3NvcnRTdHJhdGVneS5nZXRJdGVtSW5kZXgobCk6dGhpcy5fZHJhZ2dhYmxlcy5pbmRleE9mKGwpfWlzUmVjZWl2aW5nKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''X2FjdGl2ZVNpYmxpbmdzLnNpemU+MH1fc29ydEl0ZW0obCxhLGQsaCl7aWYodGhpcy5zb3J0aW5nRGlzYWJsZWR8fCF0aGlzLl9kb21SZWN0fHwhajBlKHRoaXMuX2RvbVJlY3QsLjA1LGEsZCkpcmV0dXJuO2NvbnN0IGY9dGhpcy5fc29ydFN0cmF0ZWd5LnNvcnQobCxhLGQsaCk7ZiYmdGhp''@;'; put 'put ''cy5zb3J0ZWQubmV4dCh7cHJldmlvdXNJbmRleDpmLnByZXZpb3VzSW5kZXgsY3VycmVudEluZGV4OmYuY3VycmVudEluZGV4LGNvbnRhaW5lcjp0aGlzLGl0ZW06bH0pfV9zdGFydFNjcm9sbGluZ0lmTmVjZXNzYXJ5KGwsYSl7aWYodGhpcy5hdXRvU2Nyb2xsRGlzYWJsZWQpcmV0dXJuO2xl''@;'; put 'put ''dCBkLGg9QzIuTk9ORSxmPXoxLk5PTkU7aWYodGhpcy5fcGFyZW50UG9zaXRpb25zLnBvc2l0aW9ucy5mb3JFYWNoKCh2LE0pPT57TT09PXRoaXMuX2RvY3VtZW50fHwhdi5jbGllbnRSZWN0fHxkfHxqMGUodi5jbGllbnRSZWN0LC4wNSxsLGEpJiYoW2gsZl09ZnVuY3Rpb24gYkZlKGMsbCxh''@;'; put 'put ''LGQsaCl7Y29uc3QgZj1yMWUobCxoKSx2PWkxZShsLGQpO2xldCBNPUMyLk5PTkUsRD16MS5OT05FO2lmKGYpe2NvbnN0IFo9Yy5zY3JvbGxUb3A7Zj09PUMyLlVQP1o+MCYmKE09QzIuVVApOmMuc2Nyb2xsSGVpZ2h0LVo+Yy5jbGllbnRIZWlnaHQmJihNPUMyLkRPV04pfWlmKHYpe2NvbnN0''@;'; put 'put ''IFo9Yy5zY3JvbGxMZWZ0OyJydGwiPT09YT92PT09ejEuUklHSFQ/WjwwJiYoRD16MS5SSUdIVCk6Yy5zY3JvbGxXaWR0aCtaPmMuY2xpZW50V2lkdGgmJihEPXoxLkxFRlQpOnY9PT16MS5MRUZUP1o+MCYmKEQ9ejEuTEVGVCk6Yy5zY3JvbGxXaWR0aC1aPmMuY2xpZW50V2lkdGgmJihEPXox''@;'; put 'put ''LlJJR0hUKX1yZXR1cm5bTSxEXX0oTSx2LmNsaWVudFJlY3QsdGhpcy5fc29ydFN0cmF0ZWd5LmRpcmVjdGlvbixsLGEpLChofHxmKSYmKGQ9TSkpfSksIWgmJiFmKXtjb25zdHt3aWR0aDp2LGhlaWdodDpNfT10aGlzLl92aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2l6ZSgpLEQ9e3dpZHRo''@;'; put 'put ''OnYsaGVpZ2h0Ok0sdG9wOjAscmlnaHQ6dixib3R0b206TSxsZWZ0OjB9O2g9cjFlKEQsYSksZj1pMWUoRCxsKSxkPXdpbmRvd31kJiYoaCE9PXRoaXMuX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9ufHxmIT09dGhpcy5faG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbnx8ZCE9PXRoaXMuX3Njcm9s''@;'; put 'put ''bE5vZGUpJiYodGhpcy5fdmVydGljYWxTY3JvbGxEaXJlY3Rpb249aCx0aGlzLl9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uPWYsdGhpcy5fc2Nyb2xsTm9kZT1kLChofHxmKSYmZD90aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIodGhpcy5fc3RhcnRTY3JvbGxJbnRlcnZhbCk6dGhp''@;'; put 'put ''cy5fc3RvcFNjcm9sbGluZygpKX1fc3RvcFNjcm9sbGluZygpe3RoaXMuX3N0b3BTY3JvbGxUaW1lcnMubmV4dCgpfV9kcmFnZ2luZ1N0YXJ0ZWQoKXtjb25zdCBsPXhkKHRoaXMuZWxlbWVudCkuc3R5bGU7dGhpcy5iZWZvcmVTdGFydGVkLm5leHQoKSx0aGlzLl9pc0RyYWdnaW5nPSEwLHRo''@;'; put 'put ''aXMuX2luaXRpYWxTY3JvbGxTbmFwPWwubXNTY3JvbGxTbmFwVHlwZXx8bC5zY3JvbGxTbmFwVHlwZXx8IiIsbC5zY3JvbGxTbmFwVHlwZT1sLm1zU2Nyb2xsU25hcFR5cGU9Im5vbmUiLHRoaXMuX3NvcnRTdHJhdGVneS5zdGFydCh0aGlzLl9kcmFnZ2FibGVzKSx0aGlzLl9jYWNoZVBhcmVu''@;'; put 'put ''dFBvc2l0aW9ucygpLHRoaXMuX3ZpZXdwb3J0U2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fbGlzdGVuVG9TY3JvbGxFdmVudHMoKX1fY2FjaGVQYXJlbnRQb3NpdGlvbnMoKXtjb25zdCBsPXhkKHRoaXMuZWxlbWVudCk7dGhpcy5fcGFyZW50UG9zaXRpb25zLmNhY2hl''@;'; put 'put ''KHRoaXMuX3Njcm9sbGFibGVFbGVtZW50cyksdGhpcy5fZG9tUmVjdD10aGlzLl9wYXJlbnRQb3NpdGlvbnMucG9zaXRpb25zLmdldChsKS5jbGllbnRSZWN0fV9yZXNldCgpe3RoaXMuX2lzRHJhZ2dpbmc9ITE7Y29uc3QgbD14ZCh0aGlzLmVsZW1lbnQpLnN0eWxlO2wuc2Nyb2xsU25hcFR5''@;'; put 'put ''cGU9bC5tc1Njcm9sbFNuYXBUeXBlPXRoaXMuX2luaXRpYWxTY3JvbGxTbmFwLHRoaXMuX3NpYmxpbmdzLmZvckVhY2goYT0+YS5fc3RvcFJlY2VpdmluZyh0aGlzKSksdGhpcy5fc29ydFN0cmF0ZWd5LnJlc2V0KCksdGhpcy5fc3RvcFNjcm9sbGluZygpLHRoaXMuX3ZpZXdwb3J0U2Nyb2xs''@;'; put 'put ''U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5fcGFyZW50UG9zaXRpb25zLmNsZWFyKCl9X2lzT3ZlckNvbnRhaW5lcihsLGEpe3JldHVybiBudWxsIT10aGlzLl9kb21SZWN0JiZoWSh0aGlzLl9kb21SZWN0LGwsYSl9X2dldFNpYmxpbmdDb250YWluZXJGcm9tUG9zaXRpb24obCxh''@;'; put 'put ''LGQpe3JldHVybiB0aGlzLl9zaWJsaW5ncy5maW5kKGg9PmguX2NhblJlY2VpdmUobCxhLGQpKX1fY2FuUmVjZWl2ZShsLGEsZCl7aWYoIXRoaXMuX2RvbVJlY3R8fCFoWSh0aGlzLl9kb21SZWN0LGEsZCl8fCF0aGlzLmVudGVyUHJlZGljYXRlKGwsdGhpcykpcmV0dXJuITE7Y29uc3QgaD10''@;'; put 'put ''aGlzLl9nZXRTaGFkb3dSb290KCkuZWxlbWVudEZyb21Qb2ludChhLGQpO2lmKCFoKXJldHVybiExO2NvbnN0IGY9eGQodGhpcy5lbGVtZW50KTtyZXR1cm4gaD09PWZ8fGYuY29udGFpbnMoaCl9X3N0YXJ0UmVjZWl2aW5nKGwsYSl7Y29uc3QgZD10aGlzLl9hY3RpdmVTaWJsaW5nczshZC5o''@;'; put 'put ''YXMobCkmJmEuZXZlcnkoaD0+dGhpcy5lbnRlclByZWRpY2F0ZShoLHRoaXMpfHx0aGlzLl9kcmFnZ2FibGVzLmluZGV4T2YoaCk+LTEpJiYoZC5hZGQobCksdGhpcy5fY2FjaGVQYXJlbnRQb3NpdGlvbnMoKSx0aGlzLl9saXN0ZW5Ub1Njcm9sbEV2ZW50cygpLHRoaXMucmVjZWl2aW5nU3Rh''@;'; put 'put ''cnRlZC5uZXh0KHtpbml0aWF0b3I6bCxyZWNlaXZlcjp0aGlzLGl0ZW1zOmF9KSl9X3N0b3BSZWNlaXZpbmcobCl7dGhpcy5fYWN0aXZlU2libGluZ3MuZGVsZXRlKGwpLHRoaXMuX3ZpZXdwb3J0U2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5yZWNlaXZpbmdTdG9wcGVk''@;'; put 'put ''Lm5leHQoe2luaXRpYXRvcjpsLHJlY2VpdmVyOnRoaXN9KX1fbGlzdGVuVG9TY3JvbGxFdmVudHMoKXt0aGlzLl92aWV3cG9ydFNjcm9sbFN1YnNjcmlwdGlvbj10aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5LnNjcm9sbGVkKHRoaXMuX2dldFNoYWRvd1Jvb3QoKSkuc3Vic2NyaWJlKGw9PntpZih0''@;'; put 'put ''aGlzLmlzRHJhZ2dpbmcoKSl7Y29uc3QgYT10aGlzLl9wYXJlbnRQb3NpdGlvbnMuaGFuZGxlU2Nyb2xsKGwpO2EmJnRoaXMuX3NvcnRTdHJhdGVneS51cGRhdGVPblNjcm9sbChhLnRvcCxhLmxlZnQpfWVsc2UgdGhpcy5pc1JlY2VpdmluZygpJiZ0aGlzLl9jYWNoZVBhcmVudFBvc2l0aW9u''@;'; put 'put ''cygpfSl9X2dldFNoYWRvd1Jvb3QoKXtpZighdGhpcy5fY2FjaGVkU2hhZG93Um9vdCl7Y29uc3QgbD1TMGUoeGQodGhpcy5lbGVtZW50KSk7dGhpcy5fY2FjaGVkU2hhZG93Um9vdD1sfHx0aGlzLl9kb2N1bWVudH1yZXR1cm4gdGhpcy5fY2FjaGVkU2hhZG93Um9vdH1fbm90aWZ5UmVjZWl2''@;'; put 'put ''aW5nU2libGluZ3MoKXtjb25zdCBsPXRoaXMuX3NvcnRTdHJhdGVneS5nZXRBY3RpdmVJdGVtc1NuYXBzaG90KCkuZmlsdGVyKGE9PmEuaXNEcmFnZ2luZygpKTt0aGlzLl9zaWJsaW5ncy5mb3JFYWNoKGE9PmEuX3N0YXJ0UmVjZWl2aW5nKHRoaXMsbCkpfX1mdW5jdGlvbiByMWUoYyxsKXtj''@;'; put 'put ''b25zdHt0b3A6YSxib3R0b206ZCxoZWlnaHQ6aH09YyxmPS4wNSpoO3JldHVybiBsPj1hLWYmJmw8PWErZj9DMi5VUDpsPj1kLWYmJmw8PWQrZj9DMi5ET1dOOkMyLk5PTkV9ZnVuY3Rpb24gaTFlKGMsbCl7Y29uc3R7bGVmdDphLHJpZ2h0OmQsd2lkdGg6aH09YyxmPS4wNSpoO3JldHVybiBs''@;'; put 'put ''Pj1hLWYmJmw8PWErZj96MS5MRUZUOmw+PWQtZiYmbDw9ZCtmP3oxLlJJR0hUOnoxLk5PTkV9Y29uc3QgRUw9U3koe3Bhc3NpdmU6ITEsY2FwdHVyZTohMH0pLFRMPW5ldyBTZXQ7bGV0IHlGZT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4g''@;'; put 'put ''bmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1sibmctY29tcG9uZW50Il1dLGhvc3RBdHRyczpbImNkay1kcmFnLXJlc2V0cy1jb250YWluZXIiLCIiXSxzdGFuZGFsb25lOiEwLGZlYXR1cmVzOlt6SV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxh''@;'; put 'put ''dGU6ZnVuY3Rpb24oZCxoKXt9LHN0eWxlczpbIkBsYXllciBjZGstcmVzZXRzey5jZGstZHJhZy1wcmV2aWV3e2JhY2tncm91bmQ6bm9uZTtib3JkZXI6bm9uZTtwYWRkaW5nOjA7Y29sb3I6aW5oZXJpdH19Il0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSl9fXJldHVybiBj''@;'; put 'put ''fSkoKSxfRmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuX25nWm9uZT1hLHRoaXMuX2FwcFJlZj1oaShHNCksdGhpcy5fZW52aXJvbm1lbnRJbmplY3Rvcj1oaShjYyksdGhpcy5fZHJvcEluc3RhbmNlcz1uZXcgU2V0LHRoaXMuX2RyYWdJbnN0YW5jZXM9bmV3IFNldCx0''@;'; put 'put ''aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzPVtdLHRoaXMuX2dsb2JhbExpc3RlbmVycz1uZXcgTWFwLHRoaXMuX2RyYWdnaW5nUHJlZGljYXRlPWg9PmguaXNEcmFnZ2luZygpLHRoaXMucG9pbnRlck1vdmU9bmV3IFduLHRoaXMucG9pbnRlclVwPW5ldyBXbix0aGlzLnNjcm9sbD1uZXcgV24s''@;'; put 'put ''dGhpcy5fcHJldmVudERlZmF1bHRXaGlsZURyYWdnaW5nPWg9Pnt0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLmxlbmd0aD4wJiZoLnByZXZlbnREZWZhdWx0KCl9LHRoaXMuX3BlcnNpc3RlbnRUb3VjaG1vdmVMaXN0ZW5lcj1oPT57dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5sZW5ndGg+''@;'; put 'put ''MCYmKHRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMuc29tZSh0aGlzLl9kcmFnZ2luZ1ByZWRpY2F0ZSkmJmgucHJldmVudERlZmF1bHQoKSx0aGlzLnBvaW50ZXJNb3ZlLm5leHQoaCkpfSx0aGlzLl9kb2N1bWVudD1kfXJlZ2lzdGVyRHJvcENvbnRhaW5lcihhKXt0aGlzLl9kcm9wSW5zdGFu''@;'; put 'put ''Y2VzLmhhcyhhKXx8dGhpcy5fZHJvcEluc3RhbmNlcy5hZGQoYSl9cmVnaXN0ZXJEcmFnSXRlbShhKXt0aGlzLl9kcmFnSW5zdGFuY2VzLmFkZChhKSwxPT09dGhpcy5fZHJhZ0luc3RhbmNlcy5zaXplJiZ0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLl9kb2N1bWVu''@;'; put 'put ''dC5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLHRoaXMuX3BlcnNpc3RlbnRUb3VjaG1vdmVMaXN0ZW5lcixFTCl9KX1yZW1vdmVEcm9wQ29udGFpbmVyKGEpe3RoaXMuX2Ryb3BJbnN0YW5jZXMuZGVsZXRlKGEpfXJlbW92ZURyYWdJdGVtKGEpe3RoaXMuX2RyYWdJbnN0YW5jZXMuZGVs''@;'; put 'put ''ZXRlKGEpLHRoaXMuc3RvcERyYWdnaW5nKGEpLDA9PT10aGlzLl9kcmFnSW5zdGFuY2VzLnNpemUmJnRoaXMuX2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInRvdWNobW92ZSIsdGhpcy5fcGVyc2lzdGVudFRvdWNobW92ZUxpc3RlbmVyLEVMKX1zdGFydERyYWdnaW5nKGEsZCl7aWYo''@;'; put 'put ''ISh0aGlzLl9hY3RpdmVEcmFnSW5zdGFuY2VzLmluZGV4T2YoYSk+LTEpJiYodGhpcy5fbG9hZFJlc2V0cygpLHRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMucHVzaChhKSwxPT09dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5sZW5ndGgpKXtjb25zdCBoPWQudHlwZS5zdGFydHNXaXRoKCJ0''@;'; put 'put ''b3VjaCIpO3RoaXMuX2dsb2JhbExpc3RlbmVycy5zZXQoaD8idG91Y2hlbmQiOiJtb3VzZXVwIix7aGFuZGxlcjpmPT50aGlzLnBvaW50ZXJVcC5uZXh0KGYpLG9wdGlvbnM6ITB9KS5zZXQoInNjcm9sbCIse2hhbmRsZXI6Zj0+dGhpcy5zY3JvbGwubmV4dChmKSxvcHRpb25zOiEwfSkuc2V0''@;'; put 'put ''KCJzZWxlY3RzdGFydCIse2hhbmRsZXI6dGhpcy5fcHJldmVudERlZmF1bHRXaGlsZURyYWdnaW5nLG9wdGlvbnM6RUx9KSxofHx0aGlzLl9nbG9iYWxMaXN0ZW5lcnMuc2V0KCJtb3VzZW1vdmUiLHtoYW5kbGVyOmY9PnRoaXMucG9pbnRlck1vdmUubmV4dChmKSxvcHRpb25zOkVMfSksdGhp''@;'; put 'put ''cy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fZ2xvYmFsTGlzdGVuZXJzLmZvckVhY2goKGYsdik9Pnt0aGlzLl9kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKHYsZi5oYW5kbGVyLGYub3B0aW9ucyl9KX0pfX1zdG9wRHJhZ2dpbmcoYSl7Y29uc3QgZD10aGlzLl9hY3Rp''@;'; put 'put ''dmVEcmFnSW5zdGFuY2VzLmluZGV4T2YoYSk7ZD4tMSYmKHRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMuc3BsaWNlKGQsMSksMD09PXRoaXMuX2FjdGl2ZURyYWdJbnN0YW5jZXMubGVuZ3RoJiZ0aGlzLl9jbGVhckdsb2JhbExpc3RlbmVycygpKX1pc0RyYWdnaW5nKGEpe3JldHVybiB0aGlz''@;'; put 'put ''Ll9hY3RpdmVEcmFnSW5zdGFuY2VzLmluZGV4T2YoYSk+LTF9c2Nyb2xsZWQoYSl7Y29uc3QgZD1bdGhpcy5zY3JvbGxdO3JldHVybiBhJiZhIT09dGhpcy5fZG9jdW1lbnQmJmQucHVzaChuZXcgWHQoaD0+dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57Y29uc3Qgdj1NPT57''@;'; put 'put ''dGhpcy5fYWN0aXZlRHJhZ0luc3RhbmNlcy5sZW5ndGgmJmgubmV4dChNKX07cmV0dXJuIGEuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix2LCEwKSwoKT0+e2EucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsIix2LCEwKX19KSkpLGJ4KC4uLmQpfW5nT25EZXN0cm95KCl7dGhpcy5fZHJh''@;'; put 'put ''Z0luc3RhbmNlcy5mb3JFYWNoKGE9PnRoaXMucmVtb3ZlRHJhZ0l0ZW0oYSkpLHRoaXMuX2Ryb3BJbnN0YW5jZXMuZm9yRWFjaChhPT50aGlzLnJlbW92ZURyb3BDb250YWluZXIoYSkpLHRoaXMuX2NsZWFyR2xvYmFsTGlzdGVuZXJzKCksdGhpcy5wb2ludGVyTW92ZS5jb21wbGV0ZSgpLHRo''@;'; put 'put ''aXMucG9pbnRlclVwLmNvbXBsZXRlKCl9X2NsZWFyR2xvYmFsTGlzdGVuZXJzKCl7dGhpcy5fZ2xvYmFsTGlzdGVuZXJzLmZvckVhY2goKGEsZCk9Pnt0aGlzLl9kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGQsYS5oYW5kbGVyLGEub3B0aW9ucyl9KSx0aGlzLl9nbG9iYWxMaXN0ZW5l''@;'; put 'put ''cnMuY2xlYXIoKX1fbG9hZFJlc2V0cygpe2lmKCFUTC5oYXModGhpcy5fYXBwUmVmKSl7VEwuYWRkKHRoaXMuX2FwcFJlZik7Y29uc3QgYT1mdW5jdGlvbiBVeWUoYyxsKXtjb25zdCBhPVZhKGMpLGQ9bC5lbGVtZW50SW5qZWN0b3J8fFIzKCk7cmV0dXJuIG5ldyBUOChhKS5jcmVhdGUoZCxs''@;'; put 'put ''LnByb2plY3RhYmxlTm9kZXMsbC5ob3N0RWxlbWVudCxsLmVudmlyb25tZW50SW5qZWN0b3IpfSh5RmUse2Vudmlyb25tZW50SW5qZWN0b3I6dGhpcy5fZW52aXJvbm1lbnRJbmplY3Rvcn0pO3RoaXMuX2FwcFJlZi5vbkRlc3Ryb3koKCk9PntUTC5kZWxldGUodGhpcy5fYXBwUmVmKSwwPT09''@;'; put 'put ''VEwuc2l6ZSYmYS5kZXN0cm95KCl9KX19c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoTXIoWW8pLE1yKHZzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0p''@;'; put 'put ''fX1yZXR1cm4gY30pKCk7Y29uc3Qgd0ZlPXtkcmFnU3RhcnRUaHJlc2hvbGQ6NSxwb2ludGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xkOjV9O2xldCBBTD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuX2RvY3VtZW50PWEsdGhpcy5fbmdab25lPWQsdGhpcy5fdmll''@;'; put 'put ''d3BvcnRSdWxlcj1oLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnk9Zn1jcmVhdGVEcmFnKGEsZD13RmUpe3JldHVybiBuZXcgcEZlKGEsZCx0aGlzLl9kb2N1bWVudCx0aGlzLl9uZ1pvbmUsdGhpcy5fdmlld3BvcnRSdWxlcix0aGlzLl9kcmFnRHJvcFJlZ2lzdHJ5KX1jcmVhdGVEcm9wTGlzdChh''@;'; put 'put ''KXtyZXR1cm4gbmV3IHZGZShhLHRoaXMuX2RyYWdEcm9wUmVnaXN0cnksdGhpcy5fZG9jdW1lbnQsdGhpcy5fbmdab25lLHRoaXMuX3ZpZXdwb3J0UnVsZXIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKE1yKHZzKSxNcihZbyksTXIod0wpLE1y''@;'; put 'put ''KF9GZSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IFR4PW5ldyBTdCgiQ0RLX0RSQUdfUEFSRU5UIiksbzFlPW5ldyBTdCgiQ2RrRHJhZ0hhbmRsZSIpO2xldCBh''@;'; put 'put ''MWU9KCgpPT57Y2xhc3MgY3tnZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fZGlzYWJsZWR9c2V0IGRpc2FibGVkKGEpe3RoaXMuX2Rpc2FibGVkPWEsdGhpcy5fc3RhdGVDaGFuZ2VzLm5leHQodGhpcyl9Y29uc3RydWN0b3IoYSxkKXt0aGlzLmVsZW1lbnQ9YSx0aGlzLl9wYXJlbnREcmFn''@;'; put 'put ''PWQsdGhpcy5fc3RhdGVDaGFuZ2VzPW5ldyBXbix0aGlzLl9kaXNhYmxlZD0hMSxkPy5fYWRkSGFuZGxlKHRoaXMpfW5nT25EZXN0cm95KCl7dGhpcy5fcGFyZW50RHJhZz8uX3JlbW92ZUhhbmRsZSh0aGlzKSx0aGlzLl9zdGF0ZUNoYW5nZXMuY29tcGxldGUoKX1zdGF0aWN7dGhpcy5cdTAy''@;'; put 'put ''NzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShlbyksR2UoVHgsMTIpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNka0RyYWdIYW5kbGUiLCIiXV0saG9zdEF0dHJzOlsxLCJjZGstZHJhZy1oYW5kbGUiXSxpbnB1dHM6e2Rp''@;'; put 'put ''c2FibGVkOltabi5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSwiY2RrRHJhZ0hhbmRsZURpc2FibGVkIiwiZGlzYWJsZWQiLGwxXX0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbcG8oW3twcm92aWRlOm8xZSx1c2VFeGlzdGluZzpjfV0pLHpsXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgcFk9''@;'; put 'put ''bmV3IFN0KCJDREtfRFJBR19DT05GSUciKSxnWT1uZXcgU3QoIkNka0Ryb3BMaXN0Iik7bGV0IG1ZPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuX2RyYWdJbnN0YW5jZXM9W119Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuX2Rpc2FibGVkfHx0aGlzLmRyb3BDb250YWluZXImJnRoaXMu''@;'; put 'put ''ZHJvcENvbnRhaW5lci5kaXNhYmxlZH1zZXQgZGlzYWJsZWQoYSl7dGhpcy5fZGlzYWJsZWQ9YSx0aGlzLl9kcmFnUmVmLmRpc2FibGVkPXRoaXMuX2Rpc2FibGVkfWNvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQsWixuZSxjZSxiZSl7dGhpcy5lbGVtZW50PWEsdGhpcy5kcm9wQ29udGFpbmVy''@;'; put 'put ''PWQsdGhpcy5fbmdab25lPWYsdGhpcy5fdmlld0NvbnRhaW5lclJlZj12LHRoaXMuX2Rpcj1ELHRoaXMuX2NoYW5nZURldGVjdG9yUmVmPW5lLHRoaXMuX3NlbGZIYW5kbGU9Y2UsdGhpcy5fcGFyZW50RHJhZz1iZSx0aGlzLl9kZXN0cm95ZWQ9bmV3IFduLHRoaXMuX2hhbmRsZXM9bmV3IFFy''@;'; put 'put ''KFtdKSx0aGlzLnN0YXJ0ZWQ9bmV3IHFyLHRoaXMucmVsZWFzZWQ9bmV3IHFyLHRoaXMuZW5kZWQ9bmV3IHFyLHRoaXMuZW50ZXJlZD1uZXcgcXIsdGhpcy5leGl0ZWQ9bmV3IHFyLHRoaXMuZHJvcHBlZD1uZXcgcXIsdGhpcy5tb3ZlZD1uZXcgWHQoRWU9Pntjb25zdCBCZT10aGlzLl9kcmFn''@;'; put 'put ''UmVmLm1vdmVkLnBpcGUoT3IocWU9Pih7c291cmNlOnRoaXMscG9pbnRlclBvc2l0aW9uOnFlLnBvaW50ZXJQb3NpdGlvbixldmVudDpxZS5ldmVudCxkZWx0YTpxZS5kZWx0YSxkaXN0YW5jZTpxZS5kaXN0YW5jZX0pKSkuc3Vic2NyaWJlKEVlKTtyZXR1cm4oKT0+e0JlLnVuc3Vic2NyaWJl''@;'; put 'put ''KCl9fSksdGhpcy5fZHJhZ1JlZj1aLmNyZWF0ZURyYWcoYSx7ZHJhZ1N0YXJ0VGhyZXNob2xkOk0mJm51bGwhPU0uZHJhZ1N0YXJ0VGhyZXNob2xkP00uZHJhZ1N0YXJ0VGhyZXNob2xkOjUscG9pbnRlckRpcmVjdGlvbkNoYW5nZVRocmVzaG9sZDpNJiZudWxsIT1NLnBvaW50ZXJEaXJlY3Rp''@;'; put 'put ''b25DaGFuZ2VUaHJlc2hvbGQ/TS5wb2ludGVyRGlyZWN0aW9uQ2hhbmdlVGhyZXNob2xkOjUsekluZGV4Ok0/LnpJbmRleH0pLHRoaXMuX2RyYWdSZWYuZGF0YT10aGlzLGMuX2RyYWdJbnN0YW5jZXMucHVzaCh0aGlzKSxNJiZ0aGlzLl9hc3NpZ25EZWZhdWx0cyhNKSxkJiYodGhpcy5fZHJh''@;'; put 'put ''Z1JlZi5fd2l0aERyb3BDb250YWluZXIoZC5fZHJvcExpc3RSZWYpLGQuYWRkSXRlbSh0aGlzKSksdGhpcy5fc3luY0lucHV0cyh0aGlzLl9kcmFnUmVmKSx0aGlzLl9oYW5kbGVFdmVudHModGhpcy5fZHJhZ1JlZil9Z2V0UGxhY2Vob2xkZXJFbGVtZW50KCl7cmV0dXJuIHRoaXMuX2RyYWdS''@;'; put 'put ''ZWYuZ2V0UGxhY2Vob2xkZXJFbGVtZW50KCl9Z2V0Um9vdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5fZHJhZ1JlZi5nZXRSb290RWxlbWVudCgpfXJlc2V0KCl7dGhpcy5fZHJhZ1JlZi5yZXNldCgpfWdldEZyZWVEcmFnUG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fZHJhZ1JlZi5nZXRGcmVlRHJh''@;'; put 'put ''Z1Bvc2l0aW9uKCl9c2V0RnJlZURyYWdQb3NpdGlvbihhKXt0aGlzLl9kcmFnUmVmLnNldEZyZWVEcmFnUG9zaXRpb24oYSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5fbmdab25lLm9uU3RhYmxlLnBpcGUoQmYoMSksVjAodGhp''@;'; put 'put ''cy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5fdXBkYXRlUm9vdEVsZW1lbnQoKSx0aGlzLl9zZXR1cEhhbmRsZXNMaXN0ZW5lcigpLHRoaXMuZnJlZURyYWdQb3NpdGlvbiYmdGhpcy5fZHJhZ1JlZi5zZXRGcmVlRHJhZ1Bvc2l0aW9uKHRoaXMuZnJlZURyYWdQb3NpdGlvbil9''@;'; put 'put ''KX0pfW5nT25DaGFuZ2VzKGEpe2NvbnN0IGQ9YS5yb290RWxlbWVudFNlbGVjdG9yLGg9YS5mcmVlRHJhZ1Bvc2l0aW9uO2QmJiFkLmZpcnN0Q2hhbmdlJiZ0aGlzLl91cGRhdGVSb290RWxlbWVudCgpLGgmJiFoLmZpcnN0Q2hhbmdlJiZ0aGlzLmZyZWVEcmFnUG9zaXRpb24mJnRoaXMuX2Ry''@;'; put 'put ''YWdSZWYuc2V0RnJlZURyYWdQb3NpdGlvbih0aGlzLmZyZWVEcmFnUG9zaXRpb24pfW5nT25EZXN0cm95KCl7dGhpcy5kcm9wQ29udGFpbmVyJiZ0aGlzLmRyb3BDb250YWluZXIucmVtb3ZlSXRlbSh0aGlzKTtjb25zdCBhPWMuX2RyYWdJbnN0YW5jZXMuaW5kZXhPZih0aGlzKTthPi0xJiZj''@;'; put 'put ''Ll9kcmFnSW5zdGFuY2VzLnNwbGljZShhLDEpLHRoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMuX2hhbmRsZXMuY29tcGxldGUoKSx0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpLHRoaXMuX2RyYWdSZWYuZGlzcG9zZSgpfSl9''@;'; put 'put ''X2FkZEhhbmRsZShhKXtjb25zdCBkPXRoaXMuX2hhbmRsZXMuZ2V0VmFsdWUoKTtkLnB1c2goYSksdGhpcy5faGFuZGxlcy5uZXh0KGQpfV9yZW1vdmVIYW5kbGUoYSl7Y29uc3QgZD10aGlzLl9oYW5kbGVzLmdldFZhbHVlKCksaD1kLmluZGV4T2YoYSk7aD4tMSYmKGQuc3BsaWNlKGgsMSks''@;'; put 'put ''dGhpcy5faGFuZGxlcy5uZXh0KGQpKX1fc2V0UHJldmlld1RlbXBsYXRlKGEpe3RoaXMuX3ByZXZpZXdUZW1wbGF0ZT1hfV9yZXNldFByZXZpZXdUZW1wbGF0ZShhKXthPT09dGhpcy5fcHJldmlld1RlbXBsYXRlJiYodGhpcy5fcHJldmlld1RlbXBsYXRlPW51bGwpfV9zZXRQbGFjZWhvbGRl''@;'; put 'put ''clRlbXBsYXRlKGEpe3RoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGU9YX1fcmVzZXRQbGFjZWhvbGRlclRlbXBsYXRlKGEpe2E9PT10aGlzLl9wbGFjZWhvbGRlclRlbXBsYXRlJiYodGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZT1udWxsKX1fdXBkYXRlUm9vdEVsZW1lbnQoKXtjb25zdCBhPXRo''@;'; put 'put ''aXMuZWxlbWVudC5uYXRpdmVFbGVtZW50O2xldCBkPWE7dGhpcy5yb290RWxlbWVudFNlbGVjdG9yJiYoZD12b2lkIDAhPT1hLmNsb3Nlc3Q/YS5jbG9zZXN0KHRoaXMucm9vdEVsZW1lbnRTZWxlY3Rvcik6YS5wYXJlbnRFbGVtZW50Py5jbG9zZXN0KHRoaXMucm9vdEVsZW1lbnRTZWxlY3Rv''@;'; put 'put ''cikpLHRoaXMuX2RyYWdSZWYud2l0aFJvb3RFbGVtZW50KGR8fGEpfV9nZXRCb3VuZGFyeUVsZW1lbnQoKXtjb25zdCBhPXRoaXMuYm91bmRhcnlFbGVtZW50O3JldHVybiBhPyJzdHJpbmciPT10eXBlb2YgYT90aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudC5jbG9zZXN0KGEpOnhkKGEpOm51''@;'; put 'put ''bGx9X3N5bmNJbnB1dHMoYSl7YS5iZWZvcmVTdGFydGVkLnN1YnNjcmliZSgoKT0+e2lmKCFhLmlzRHJhZ2dpbmcoKSl7Y29uc3QgZD10aGlzLl9kaXIsaD10aGlzLmRyYWdTdGFydERlbGF5LGY9dGhpcy5fcGxhY2Vob2xkZXJUZW1wbGF0ZT97dGVtcGxhdGU6dGhpcy5fcGxhY2Vob2xkZXJU''@;'; put 'put ''ZW1wbGF0ZS50ZW1wbGF0ZVJlZixjb250ZXh0OnRoaXMuX3BsYWNlaG9sZGVyVGVtcGxhdGUuZGF0YSx2aWV3Q29udGFpbmVyOnRoaXMuX3ZpZXdDb250YWluZXJSZWZ9Om51bGwsdj10aGlzLl9wcmV2aWV3VGVtcGxhdGU/e3RlbXBsYXRlOnRoaXMuX3ByZXZpZXdUZW1wbGF0ZS50ZW1wbGF0''@;'; put 'put ''ZVJlZixjb250ZXh0OnRoaXMuX3ByZXZpZXdUZW1wbGF0ZS5kYXRhLG1hdGNoU2l6ZTp0aGlzLl9wcmV2aWV3VGVtcGxhdGUubWF0Y2hTaXplLHZpZXdDb250YWluZXI6dGhpcy5fdmlld0NvbnRhaW5lclJlZn06bnVsbDthLmRpc2FibGVkPXRoaXMuZGlzYWJsZWQsYS5sb2NrQXhpcz10aGlz''@;'; put 'put ''LmxvY2tBeGlzLGEuZHJhZ1N0YXJ0RGVsYXk9Im9iamVjdCI9PXR5cGVvZiBoJiZoP2g6bDcoaCksYS5jb25zdHJhaW5Qb3NpdGlvbj10aGlzLmNvbnN0cmFpblBvc2l0aW9uLGEucHJldmlld0NsYXNzPXRoaXMucHJldmlld0NsYXNzLGEud2l0aEJvdW5kYXJ5RWxlbWVudCh0aGlzLl9nZXRC''@;'; put 'put ''b3VuZGFyeUVsZW1lbnQoKSkud2l0aFBsYWNlaG9sZGVyVGVtcGxhdGUoZikud2l0aFByZXZpZXdUZW1wbGF0ZSh2KS53aXRoUHJldmlld0NvbnRhaW5lcih0aGlzLnByZXZpZXdDb250YWluZXJ8fCJnbG9iYWwiKSxkJiZhLndpdGhEaXJlY3Rpb24oZC52YWx1ZSl9fSksYS5iZWZvcmVTdGFy''@;'; put 'put ''dGVkLnBpcGUoQmYoMSkpLnN1YnNjcmliZSgoKT0+e2lmKHRoaXMuX3BhcmVudERyYWcpcmV0dXJuIHZvaWQgYS53aXRoUGFyZW50KHRoaXMuX3BhcmVudERyYWcuX2RyYWdSZWYpO2xldCBkPXRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQ7Zm9yKDtkOyl7aWYoZC5j''@;'; put 'put ''bGFzc0xpc3QuY29udGFpbnMoImNkay1kcmFnIikpe2Eud2l0aFBhcmVudChjLl9kcmFnSW5zdGFuY2VzLmZpbmQoaD0+aC5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ9PT1kKT8uX2RyYWdSZWZ8fG51bGwpO2JyZWFrfWQ9ZC5wYXJlbnRFbGVtZW50fX0pfV9oYW5kbGVFdmVudHMoYSl7YS5zdGFy''@;'; put 'put ''dGVkLnN1YnNjcmliZShkPT57dGhpcy5zdGFydGVkLmVtaXQoe3NvdXJjZTp0aGlzLGV2ZW50OmQuZXZlbnR9KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLGEucmVsZWFzZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLnJlbGVhc2VkLmVtaXQoe3NvdXJjZTp0aGlzLGV2''@;'; put 'put ''ZW50OmQuZXZlbnR9KX0pLGEuZW5kZWQuc3Vic2NyaWJlKGQ9Pnt0aGlzLmVuZGVkLmVtaXQoe3NvdXJjZTp0aGlzLGRpc3RhbmNlOmQuZGlzdGFuY2UsZHJvcFBvaW50OmQuZHJvcFBvaW50LGV2ZW50OmQuZXZlbnR9KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0p''@;'; put 'put ''LGEuZW50ZXJlZC5zdWJzY3JpYmUoZD0+e3RoaXMuZW50ZXJlZC5lbWl0KHtjb250YWluZXI6ZC5jb250YWluZXIuZGF0YSxpdGVtOnRoaXMsY3VycmVudEluZGV4OmQuY3VycmVudEluZGV4fSl9KSxhLmV4aXRlZC5zdWJzY3JpYmUoZD0+e3RoaXMuZXhpdGVkLmVtaXQoe2NvbnRhaW5lcjpk''@;'; put 'put ''LmNvbnRhaW5lci5kYXRhLGl0ZW06dGhpc30pfSksYS5kcm9wcGVkLnN1YnNjcmliZShkPT57dGhpcy5kcm9wcGVkLmVtaXQoe3ByZXZpb3VzSW5kZXg6ZC5wcmV2aW91c0luZGV4LGN1cnJlbnRJbmRleDpkLmN1cnJlbnRJbmRleCxwcmV2aW91c0NvbnRhaW5lcjpkLnByZXZpb3VzQ29udGFp''@;'; put 'put ''bmVyLmRhdGEsY29udGFpbmVyOmQuY29udGFpbmVyLmRhdGEsaXNQb2ludGVyT3ZlckNvbnRhaW5lcjpkLmlzUG9pbnRlck92ZXJDb250YWluZXIsaXRlbTp0aGlzLGRpc3RhbmNlOmQuZGlzdGFuY2UsZHJvcFBvaW50OmQuZHJvcFBvaW50LGV2ZW50OmQuZXZlbnR9KX0pfV9hc3NpZ25EZWZh''@;'; put 'put ''dWx0cyhhKXtjb25zdHtsb2NrQXhpczpkLGRyYWdTdGFydERlbGF5OmgsY29uc3RyYWluUG9zaXRpb246ZixwcmV2aWV3Q2xhc3M6dixib3VuZGFyeUVsZW1lbnQ6TSxkcmFnZ2luZ0Rpc2FibGVkOkQscm9vdEVsZW1lbnRTZWxlY3RvcjpaLHByZXZpZXdDb250YWluZXI6bmV9PWE7dGhpcy5k''@;'; put 'put ''aXNhYmxlZD1EPz8hMSx0aGlzLmRyYWdTdGFydERlbGF5PWh8fDAsZCYmKHRoaXMubG9ja0F4aXM9ZCksZiYmKHRoaXMuY29uc3RyYWluUG9zaXRpb249ZiksdiYmKHRoaXMucHJldmlld0NsYXNzPXYpLE0mJih0aGlzLmJvdW5kYXJ5RWxlbWVudD1NKSxaJiYodGhpcy5yb290RWxlbWVudFNl''@;'; put 'put ''bGVjdG9yPVopLG5lJiYodGhpcy5wcmV2aWV3Q29udGFpbmVyPW5lKX1fc2V0dXBIYW5kbGVzTGlzdGVuZXIoKXt0aGlzLl9oYW5kbGVzLnBpcGUoWXUoYT0+e2NvbnN0IGQ9YS5tYXAoaD0+aC5lbGVtZW50KTt0aGlzLl9zZWxmSGFuZGxlJiZ0aGlzLnJvb3RFbGVtZW50U2VsZWN0b3ImJmQu''@;'; put 'put ''cHVzaCh0aGlzLmVsZW1lbnQpLHRoaXMuX2RyYWdSZWYud2l0aEhhbmRsZXMoZCl9KSxWMShhPT5ieCguLi5hLm1hcChkPT5kLl9zdGF0ZUNoYW5nZXMucGlwZShfMihkKSkpKSksVjAodGhpcy5fZGVzdHJveWVkKSkuc3Vic2NyaWJlKGE9Pntjb25zdCBkPXRoaXMuX2RyYWdSZWYsaD1hLmVs''@;'; put 'put ''ZW1lbnQubmF0aXZlRWxlbWVudDthLmRpc2FibGVkP2QuZGlzYWJsZUhhbmRsZShoKTpkLmVuYWJsZUhhbmRsZShoKX0pfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKGVvKSxHZShnWSwxMiksR2UodnMpLEdlKFlvKSxHZShEYSksR2UocFks''@;'; put 'put ''OCksR2UoZG0sOCksR2UoQUwpLEdlKHhzKSxHZShvMWUsMTApLEdlKFR4LDEyKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjZGtEcmFnIiwiIl1dLGhvc3RBdHRyczpbMSwiY2RrLWRyYWciXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5j''@;'; put 'put ''dGlvbihkLGgpezImZCYmeHIoImNkay1kcmFnLWRpc2FibGVkIixoLmRpc2FibGVkKSgiY2RrLWRyYWctZHJhZ2dpbmciLGguX2RyYWdSZWYuaXNEcmFnZ2luZygpKX0saW5wdXRzOntkYXRhOltabi5Ob25lLCJjZGtEcmFnRGF0YSIsImRhdGEiXSxsb2NrQXhpczpbWm4uTm9uZSwiY2RrRHJh''@;'; put 'put ''Z0xvY2tBeGlzIiwibG9ja0F4aXMiXSxyb290RWxlbWVudFNlbGVjdG9yOltabi5Ob25lLCJjZGtEcmFnUm9vdEVsZW1lbnQiLCJyb290RWxlbWVudFNlbGVjdG9yIl0sYm91bmRhcnlFbGVtZW50Oltabi5Ob25lLCJjZGtEcmFnQm91bmRhcnkiLCJib3VuZGFyeUVsZW1lbnQiXSxkcmFnU3Rh''@;'; put 'put ''cnREZWxheTpbWm4uTm9uZSwiY2RrRHJhZ1N0YXJ0RGVsYXkiLCJkcmFnU3RhcnREZWxheSJdLGZyZWVEcmFnUG9zaXRpb246W1puLk5vbmUsImNka0RyYWdGcmVlRHJhZ1Bvc2l0aW9uIiwiZnJlZURyYWdQb3NpdGlvbiJdLGRpc2FibGVkOltabi5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9y''@;'; put 'put ''bSwiY2RrRHJhZ0Rpc2FibGVkIiwiZGlzYWJsZWQiLGwxXSxjb25zdHJhaW5Qb3NpdGlvbjpbWm4uTm9uZSwiY2RrRHJhZ0NvbnN0cmFpblBvc2l0aW9uIiwiY29uc3RyYWluUG9zaXRpb24iXSxwcmV2aWV3Q2xhc3M6W1puLk5vbmUsImNka0RyYWdQcmV2aWV3Q2xhc3MiLCJwcmV2aWV3Q2xh''@;'; put 'put ''c3MiXSxwcmV2aWV3Q29udGFpbmVyOltabi5Ob25lLCJjZGtEcmFnUHJldmlld0NvbnRhaW5lciIsInByZXZpZXdDb250YWluZXIiXX0sb3V0cHV0czp7c3RhcnRlZDoiY2RrRHJhZ1N0YXJ0ZWQiLHJlbGVhc2VkOiJjZGtEcmFnUmVsZWFzZWQiLGVuZGVkOiJjZGtEcmFnRW5kZWQiLGVudGVy''@;'; put 'put ''ZWQ6ImNka0RyYWdFbnRlcmVkIixleGl0ZWQ6ImNka0RyYWdFeGl0ZWQiLGRyb3BwZWQ6ImNka0RyYWdEcm9wcGVkIixtb3ZlZDoiY2RrRHJhZ01vdmVkIn0sZXhwb3J0QXM6WyJjZGtEcmFnIl0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbcG8oW3twcm92aWRlOlR4LHVzZUV4aXN0aW5nOmN9''@;'; put 'put ''XSksemwseWxdfSl9fXJldHVybiBjfSkoKTtjb25zdCB2WT1uZXcgU3QoIkNka0Ryb3BMaXN0R3JvdXAiKTtsZXQgczFlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9pdGVtcz1uZXcgU2V0LHRoaXMuZGlzYWJsZWQ9ITF9bmdPbkRlc3Ryb3koKXt0aGlzLl9pdGVtcy5jbGVh''@;'; put 'put ''cigpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2RrRHJvcExpc3RHcm91cCIsIiJdXSxpbnB1dHM6e2Rpc2FibGVkOltabi5IYXNEZWNvcmF0b3JJbnB1''@;'; put 'put ''dFRyYW5zZm9ybSwiY2RrRHJvcExpc3RHcm91cERpc2FibGVkIiwiZGlzYWJsZWQiLGwxXX0sZXhwb3J0QXM6WyJjZGtEcm9wTGlzdEdyb3VwIl0sc3RhbmRhbG9uZTohMCxmZWF0dXJlczpbcG8oW3twcm92aWRlOnZZLHVzZUV4aXN0aW5nOmN9XSksemxdfSl9fXJldHVybiBjfSkoKSxTRmU9''@;'; put 'put ''MCxsMWU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5fZHJvcExpc3RzPVtdfWdldCBkaXNhYmxlZCgpe3JldHVybiB0aGlzLl9kaXNhYmxlZHx8ISF0aGlzLl9ncm91cCYmdGhpcy5fZ3JvdXAuZGlzYWJsZWR9c2V0IGRpc2FibGVkKGEpe3RoaXMuX2Ryb3BMaXN0UmVmLmRpc2FibGVkPXRo''@;'; put 'put ''aXMuX2Rpc2FibGVkPWF9Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCl7dGhpcy5lbGVtZW50PWEsdGhpcy5fY2hhbmdlRGV0ZWN0b3JSZWY9aCx0aGlzLl9zY3JvbGxEaXNwYXRjaGVyPWYsdGhpcy5fZGlyPXYsdGhpcy5fZ3JvdXA9TSx0aGlzLl9kZXN0cm95ZWQ9bmV3IFduLHRoaXMuY29u''@;'; put 'put ''bmVjdGVkVG89W10sdGhpcy5pZD0iY2RrLWRyb3AtbGlzdC0iK1NGZSsrLHRoaXMuZW50ZXJQcmVkaWNhdGU9KCk9PiEwLHRoaXMuc29ydFByZWRpY2F0ZT0oKT0+ITAsdGhpcy5kcm9wcGVkPW5ldyBxcix0aGlzLmVudGVyZWQ9bmV3IHFyLHRoaXMuZXhpdGVkPW5ldyBxcix0aGlzLnNvcnRl''@;'; put 'put ''ZD1uZXcgcXIsdGhpcy5fdW5zb3J0ZWRJdGVtcz1uZXcgU2V0LHRoaXMuX2Ryb3BMaXN0UmVmPWQuY3JlYXRlRHJvcExpc3QoYSksdGhpcy5fZHJvcExpc3RSZWYuZGF0YT10aGlzLEQmJnRoaXMuX2Fzc2lnbkRlZmF1bHRzKEQpLHRoaXMuX2Ryb3BMaXN0UmVmLmVudGVyUHJlZGljYXRlPSha''@;'; put 'put ''LG5lKT0+dGhpcy5lbnRlclByZWRpY2F0ZShaLmRhdGEsbmUuZGF0YSksdGhpcy5fZHJvcExpc3RSZWYuc29ydFByZWRpY2F0ZT0oWixuZSxjZSk9PnRoaXMuc29ydFByZWRpY2F0ZShaLG5lLmRhdGEsY2UuZGF0YSksdGhpcy5fc2V0dXBJbnB1dFN5bmNTdWJzY3JpcHRpb24odGhpcy5fZHJv''@;'; put 'put ''cExpc3RSZWYpLHRoaXMuX2hhbmRsZUV2ZW50cyh0aGlzLl9kcm9wTGlzdFJlZiksYy5fZHJvcExpc3RzLnB1c2godGhpcyksTSYmTS5faXRlbXMuYWRkKHRoaXMpfWFkZEl0ZW0oYSl7dGhpcy5fdW5zb3J0ZWRJdGVtcy5hZGQoYSksdGhpcy5fZHJvcExpc3RSZWYuaXNEcmFnZ2luZygpJiZ0''@;'; put 'put ''aGlzLl9zeW5jSXRlbXNXaXRoUmVmKCl9cmVtb3ZlSXRlbShhKXt0aGlzLl91bnNvcnRlZEl0ZW1zLmRlbGV0ZShhKSx0aGlzLl9kcm9wTGlzdFJlZi5pc0RyYWdnaW5nKCkmJnRoaXMuX3N5bmNJdGVtc1dpdGhSZWYoKX1nZXRTb3J0ZWRJdGVtcygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMu''@;'; put 'put ''X3Vuc29ydGVkSXRlbXMpLnNvcnQoKGEsZCk9PmEuX2RyYWdSZWYuZ2V0VmlzaWJsZUVsZW1lbnQoKS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihkLl9kcmFnUmVmLmdldFZpc2libGVFbGVtZW50KCkpJk5vZGUuRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HPy0xOjEpfW5nT25EZXN0cm95''@;'; put 'put ''KCl7Y29uc3QgYT1jLl9kcm9wTGlzdHMuaW5kZXhPZih0aGlzKTthPi0xJiZjLl9kcm9wTGlzdHMuc3BsaWNlKGEsMSksdGhpcy5fZ3JvdXAmJnRoaXMuX2dyb3VwLl9pdGVtcy5kZWxldGUodGhpcyksdGhpcy5fdW5zb3J0ZWRJdGVtcy5jbGVhcigpLHRoaXMuX2Ryb3BMaXN0UmVmLmRpc3Bv''@;'; put 'put ''c2UoKSx0aGlzLl9kZXN0cm95ZWQubmV4dCgpLHRoaXMuX2Rlc3Ryb3llZC5jb21wbGV0ZSgpfV9zZXR1cElucHV0U3luY1N1YnNjcmlwdGlvbihhKXt0aGlzLl9kaXImJnRoaXMuX2Rpci5jaGFuZ2UucGlwZShfMih0aGlzLl9kaXIudmFsdWUpLFYwKHRoaXMuX2Rlc3Ryb3llZCkpLnN1YnNj''@;'; put 'put ''cmliZShkPT5hLndpdGhEaXJlY3Rpb24oZCkpLGEuYmVmb3JlU3RhcnRlZC5zdWJzY3JpYmUoKCk9Pntjb25zdCBkPWZ1bmN0aW9uIE9QZShjKXtyZXR1cm4gQXJyYXkuaXNBcnJheShjKT9jOltjXX0odGhpcy5jb25uZWN0ZWRUbykubWFwKGg9PiJzdHJpbmciPT10eXBlb2YgaD9jLl9kcm9w''@;'; put 'put ''TGlzdHMuZmluZCh2PT52LmlkPT09aCk6aCk7aWYodGhpcy5fZ3JvdXAmJnRoaXMuX2dyb3VwLl9pdGVtcy5mb3JFYWNoKGg9PnstMT09PWQuaW5kZXhPZihoKSYmZC5wdXNoKGgpfSksIXRoaXMuX3Njcm9sbGFibGVQYXJlbnRzUmVzb2x2ZWQpe2NvbnN0IGg9dGhpcy5fc2Nyb2xsRGlzcGF0''@;'; put 'put ''Y2hlci5nZXRBbmNlc3RvclNjcm9sbENvbnRhaW5lcnModGhpcy5lbGVtZW50KS5tYXAoZj0+Zi5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudCk7dGhpcy5fZHJvcExpc3RSZWYud2l0aFNjcm9sbGFibGVQYXJlbnRzKGgpLHRoaXMuX3Njcm9sbGFibGVQYXJlbnRzUmVzb2x2ZWQ9ITB9''@;'; put 'put ''YS5kaXNhYmxlZD10aGlzLmRpc2FibGVkLGEubG9ja0F4aXM9dGhpcy5sb2NrQXhpcyxhLnNvcnRpbmdEaXNhYmxlZD10aGlzLnNvcnRpbmdEaXNhYmxlZCxhLmF1dG9TY3JvbGxEaXNhYmxlZD10aGlzLmF1dG9TY3JvbGxEaXNhYmxlZCxhLmF1dG9TY3JvbGxTdGVwPWw3KHRoaXMuYXV0b1Nj''@;'; put 'put ''cm9sbFN0ZXAsMiksYS5jb25uZWN0ZWRUbyhkLmZpbHRlcihoPT5oJiZoIT09dGhpcykubWFwKGg9PmguX2Ryb3BMaXN0UmVmKSkud2l0aE9yaWVudGF0aW9uKHRoaXMub3JpZW50YXRpb24pfSl9X2hhbmRsZUV2ZW50cyhhKXthLmJlZm9yZVN0YXJ0ZWQuc3Vic2NyaWJlKCgpPT57dGhpcy5f''@;'; put 'put ''c3luY0l0ZW1zV2l0aFJlZigpLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksYS5lbnRlcmVkLnN1YnNjcmliZShkPT57dGhpcy5lbnRlcmVkLmVtaXQoe2NvbnRhaW5lcjp0aGlzLGl0ZW06ZC5pdGVtLmRhdGEsY3VycmVudEluZGV4OmQuY3VycmVudEluZGV4fSl9''@;'; put 'put ''KSxhLmV4aXRlZC5zdWJzY3JpYmUoZD0+e3RoaXMuZXhpdGVkLmVtaXQoe2NvbnRhaW5lcjp0aGlzLGl0ZW06ZC5pdGVtLmRhdGF9KSx0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKX0pLGEuc29ydGVkLnN1YnNjcmliZShkPT57dGhpcy5zb3J0ZWQuZW1pdCh7cHJldmlv''@;'; put 'put ''dXNJbmRleDpkLnByZXZpb3VzSW5kZXgsY3VycmVudEluZGV4OmQuY3VycmVudEluZGV4LGNvbnRhaW5lcjp0aGlzLGl0ZW06ZC5pdGVtLmRhdGF9KX0pLGEuZHJvcHBlZC5zdWJzY3JpYmUoZD0+e3RoaXMuZHJvcHBlZC5lbWl0KHtwcmV2aW91c0luZGV4OmQucHJldmlvdXNJbmRleCxjdXJy''@;'; put 'put ''ZW50SW5kZXg6ZC5jdXJyZW50SW5kZXgscHJldmlvdXNDb250YWluZXI6ZC5wcmV2aW91c0NvbnRhaW5lci5kYXRhLGNvbnRhaW5lcjpkLmNvbnRhaW5lci5kYXRhLGl0ZW06ZC5pdGVtLmRhdGEsaXNQb2ludGVyT3ZlckNvbnRhaW5lcjpkLmlzUG9pbnRlck92ZXJDb250YWluZXIsZGlzdGFu''@;'; put 'put ''Y2U6ZC5kaXN0YW5jZSxkcm9wUG9pbnQ6ZC5kcm9wUG9pbnQsZXZlbnQ6ZC5ldmVudH0pLHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpfSksYngoYS5yZWNlaXZpbmdTdGFydGVkLGEucmVjZWl2aW5nU3RvcHBlZCkuc3Vic2NyaWJlKCgpPT50aGlzLl9jaGFuZ2VEZXRl''@;'; put 'put ''Y3RvclJlZi5tYXJrRm9yQ2hlY2soKSl9X2Fzc2lnbkRlZmF1bHRzKGEpe2NvbnN0e2xvY2tBeGlzOmQsZHJhZ2dpbmdEaXNhYmxlZDpoLHNvcnRpbmdEaXNhYmxlZDpmLGxpc3RBdXRvU2Nyb2xsRGlzYWJsZWQ6dixsaXN0T3JpZW50YXRpb246TX09YTt0aGlzLmRpc2FibGVkPWg/PyExLHRo''@;'; put 'put ''aXMuc29ydGluZ0Rpc2FibGVkPWY/PyExLHRoaXMuYXV0b1Njcm9sbERpc2FibGVkPXY/PyExLHRoaXMub3JpZW50YXRpb249TXx8InZlcnRpY2FsIixkJiYodGhpcy5sb2NrQXhpcz1kKX1fc3luY0l0ZW1zV2l0aFJlZigpe3RoaXMuX2Ryb3BMaXN0UmVmLndpdGhJdGVtcyh0aGlzLmdldFNv''@;'; put 'put ''cnRlZEl0ZW1zKCkubWFwKGE9PmEuX2RyYWdSZWYpKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShlbyksR2UoQUwpLEdlKHhzKSxHZShNeSksR2UoZG0sOCksR2UodlksMTIpLEdlKHBZLDgpKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVy''@;'; put 'put ''KHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNka0Ryb3BMaXN0IiwiIl0sWyJjZGstZHJvcC1saXN0Il1dLGhvc3RBdHRyczpbMSwiY2RrLWRyb3AtbGlzdCJdLGhvc3RWYXJzOjcsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MiZkJiYoZHIoImlkIixoLmlkKSx4cigiY2RrLWRyb3AtbGlz''@;'; put 'put ''dC1kaXNhYmxlZCIsaC5kaXNhYmxlZCkoImNkay1kcm9wLWxpc3QtZHJhZ2dpbmciLGguX2Ryb3BMaXN0UmVmLmlzRHJhZ2dpbmcoKSkoImNkay1kcm9wLWxpc3QtcmVjZWl2aW5nIixoLl9kcm9wTGlzdFJlZi5pc1JlY2VpdmluZygpKSl9LGlucHV0czp7Y29ubmVjdGVkVG86W1puLk5vbmUs''@;'; put 'put ''ImNka0Ryb3BMaXN0Q29ubmVjdGVkVG8iLCJjb25uZWN0ZWRUbyJdLGRhdGE6W1puLk5vbmUsImNka0Ryb3BMaXN0RGF0YSIsImRhdGEiXSxvcmllbnRhdGlvbjpbWm4uTm9uZSwiY2RrRHJvcExpc3RPcmllbnRhdGlvbiIsIm9yaWVudGF0aW9uIl0saWQ6ImlkIixsb2NrQXhpczpbWm4uTm9u''@;'; put 'put ''ZSwiY2RrRHJvcExpc3RMb2NrQXhpcyIsImxvY2tBeGlzIl0sZGlzYWJsZWQ6W1puLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtLCJjZGtEcm9wTGlzdERpc2FibGVkIiwiZGlzYWJsZWQiLGwxXSxzb3J0aW5nRGlzYWJsZWQ6W1puLkhhc0RlY29yYXRvcklucHV0VHJhbnNmb3JtLCJjZGtE''@;'; put 'put ''cm9wTGlzdFNvcnRpbmdEaXNhYmxlZCIsInNvcnRpbmdEaXNhYmxlZCIsbDFdLGVudGVyUHJlZGljYXRlOltabi5Ob25lLCJjZGtEcm9wTGlzdEVudGVyUHJlZGljYXRlIiwiZW50ZXJQcmVkaWNhdGUiXSxzb3J0UHJlZGljYXRlOltabi5Ob25lLCJjZGtEcm9wTGlzdFNvcnRQcmVkaWNhdGUi''@;'; put 'put ''LCJzb3J0UHJlZGljYXRlIl0sYXV0b1Njcm9sbERpc2FibGVkOltabi5IYXNEZWNvcmF0b3JJbnB1dFRyYW5zZm9ybSwiY2RrRHJvcExpc3RBdXRvU2Nyb2xsRGlzYWJsZWQiLCJhdXRvU2Nyb2xsRGlzYWJsZWQiLGwxXSxhdXRvU2Nyb2xsU3RlcDpbWm4uTm9uZSwiY2RrRHJvcExpc3RBdXRv''@;'; put 'put ''U2Nyb2xsU3RlcCIsImF1dG9TY3JvbGxTdGVwIl19LG91dHB1dHM6e2Ryb3BwZWQ6ImNka0Ryb3BMaXN0RHJvcHBlZCIsZW50ZXJlZDoiY2RrRHJvcExpc3RFbnRlcmVkIixleGl0ZWQ6ImNka0Ryb3BMaXN0RXhpdGVkIixzb3J0ZWQ6ImNka0Ryb3BMaXN0U29ydGVkIn0sZXhwb3J0QXM6WyJj''@;'; put 'put ''ZGtEcm9wTGlzdCJdLHN0YW5kYWxvbmU6ITAsZmVhdHVyZXM6W3BvKFt7cHJvdmlkZTp2WSx1c2VWYWx1ZTp2b2lkIDB9LHtwcm92aWRlOmdZLHVzZUV4aXN0aW5nOmN9XSksemxdfSl9fXJldHVybiBjfSkoKSxjMWU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe3Byb3ZpZGVyczpbQUxdLGltcG9ydHM6W3NGZV19KX19cmV0dXJuIGN9KSgpO2NvbnN0IHlhPVsiKiJdLFRGZT1bW1siY2xyLWFjY29yZGlv''@;'; put 'put ''bi10aXRsZSJdLFsiY2xyLXN0ZXAtdGl0bGUiXV0sW1siY2xyLWFjY29yZGlvbi1kZXNjcmlwdGlvbiJdLFsiY2xyLXN0ZXAtZGVzY3JpcHRpb24iXV0sIioiXSxBRmU9WyJjbHItYWNjb3JkaW9uLXRpdGxlLCBjbHItc3RlcC10aXRsZSIsImNsci1hY2NvcmRpb24tZGVzY3JpcHRpb24sIGNs''@;'; put 'put ''ci1zdGVwLWRlc2NyaXB0aW9uIiwiKiJdO2Z1bmN0aW9uIGtGZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsOSksRnQoIkB0b2dnbGUuZG9uZSIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCkuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLmNvbGxhcHNlUGFuZWxP''@;'; put 'put ''bkFuaW1hdGlvbkRvbmUoaCkpfSksZGUoMSwiZGl2IiwxMCksV3IoMiwyKSxoZSgpKCl9MiZjJiZ4ZSgiQHRvZ2dsZSIsdm9pZCAwKX1mdW5jdGlvbiBERmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtsaSgwKSxkZSgxLCJkaXYiLDIpKDIsImRpdiIsMykoMywiYnV0dG9uIiw0LDApLHFz''@;'; put 'put ''KDUsImFzeW5jIiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLnRvZ2dsZVBhbmVsKCkpfSksZGUoNiwic3BhbiIsNSksR3QoNywiY2RzLWljb24iLDYpLGhlKCksV3IoOCksV3IoOSwxKSxoZSgpKCksZGUoMTAsImRpdiIsNyksZ3QoMTEsa0ZlLDMsMSwiZGl2''@;'; put 'put ''Iiw4KSxoZSgpKCksY2koKX1pZigyJmMpe2xldCBhO2NvbnN0IGQ9bC4kaW1wbGljaXQsaD1PZSgpO2ZlKCkseGUoIm5nQ2xhc3MiLGguZ2V0UGFuZWxTdGF0ZUNsYXNzZXMoZCkpLGZlKCksZHIoInJvbGUiLGguaGVhZGluZ0VuYWJsZWR8fGguZXhwbGljaXRIZWFkaW5nTGV2ZWw/ImhlYWRp''@;'; put 'put ''bmciOm51bGwpKCJhcmlhLWxldmVsIixoLmhlYWRpbmdFbmFibGVkfHxoLmV4cGxpY2l0SGVhZGluZ0xldmVsP2guaGVhZGluZ0xldmVsOm51bGwpLGZlKCkseHIoImNsci1hY2NvcmRpb24taGVhZGVyLWhhcy1kZXNjcmlwdGlvbiIsKG51bGw9PShhPWtjKDUsMTQsaC5hY2NvcmRpb25EZXNj''@;'; put 'put ''cmlwdGlvbi5jaGFuZ2VzKSk/bnVsbDphLmxlbmd0aCl8fGguYWNjb3JkaW9uRGVzY3JpcHRpb24ubGVuZ3RoKSx4ZSgiaWQiLGguZ2V0QWNjb3JkaW9uSGVhZGVySWQoZC50ZW1wbGF0ZUlkKSkoImRpc2FibGVkIixkLmRpc2FibGVkKSxkcigiYXJpYS1jb250cm9scyIsaC5nZXRBY2NvcmRp''@;'; put 'put ''b25Db250ZW50SWQoZC50ZW1wbGF0ZUlkKSkoImFyaWEtZXhwYW5kZWQiLGQub3BlbiksZmUoNykseGUoIkBza2lwSW5pdGlhbFJlbmRlciIsdm9pZCAwKSgiaWQiLGguZ2V0QWNjb3JkaW9uQ29udGVudElkKGQudGVtcGxhdGVJZCkpLGRyKCJhcmlhLWhpZGRlbiIsIWQub3BlbikoImFyaWEt''@;'; put 'put ''bGFiZWxsZWRieSIsaC5nZXRBY2NvcmRpb25IZWFkZXJJZChkLnRlbXBsYXRlSWQpKSxmZSgpLHhlKCJuZ0lmIixkLm9wZW4pfX1jb25zdCBKRmU9WyJjbHJMb2FkaW5nIiwiIl07ZnVuY3Rpb24gUUZlKGMsbCl7MSZjJiYobGkoMCksR3QoMSwic3BhbiIsMyksY2koKSksMiZjJiYoZmUoKSx4''@;'; put 'put ''ZSgiQHNwaW5uZXIiLHZvaWQgMCkpfWZ1bmN0aW9uIGVIZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2xpKDApLGRlKDEsInNwYW4iLDQpLEZ0KCJAdmFsaWRhdGVkLmRvbmUiLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpO3JldHVybiBDdChoLmxvYWRpbmdTdGF0ZUNoYW5nZSho''@;'; put 'put ''LmJ1dHRvblN0YXRlLkRFRkFVTFQpKX0pLGhlKCksY2koKX0yJmMmJihmZSgpLHhlKCJAdmFsaWRhdGVkIix2b2lkIDApKX1mdW5jdGlvbiB0SGUoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw1KSxXcigxKSxoZSgpKSwyJmMmJnhlKCJAZGVmYXVsdEJ1dHRvbiIsdm9pZCAwKX1mdW5jdGlvbiBu''@;'; put 'put ''SGUoYyxsKXtpZigxJmMmJihsaSgwKSxkZSgxLCJidXR0b24iLDEpLEd0KDIsImNkcy1pY29uIiwyKSxoZSgpLGNpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKCksZHIoImFyaWEtbGFiZWwiLGEuc2lnbnBvc3RUcmlnZ2VyQXJpYUxhYmVsfHxhLmNvbW1vblN0cmluZ3Mua2V5cy5zaWducG9z''@;'; put 'put ''dFRvZ2dsZSksZmUoKSxkcigidGl0bGUiLGEuY29tbW9uU3RyaW5ncy5rZXlzLmluZm8pfX1jb25zdCBySGU9W1tbImNsci1zaWducG9zdC10aXRsZSJdXSwiKiJdLGlIZT1bImNsci1zaWducG9zdC10aXRsZSIsIioiXSxvSGU9W1tbIiIsImNsckNoZWNrYm94IiwiIl0sWyIiLCJjbHJUb2dn''@;'; put 'put ''bGUiLCIiXV0sW1sibGFiZWwiXV1dLGFIZT1bIltjbHJDaGVja2JveF0sW2NsclRvZ2dsZV0iLCJsYWJlbCJdO2Z1bmN0aW9uIHNIZShjLGwpezEmYyYmR3QoMCwibGFiZWwiKX1jb25zdCBsSGU9W1tbImxhYmVsIl1dLFtbImNsci1jaGVja2JveC13cmFwcGVyIl0sWyJjbHItdG9nZ2xlLXdy''@;'; put 'put ''YXBwZXIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLGNIZT1bImxhYmVsIiwiY2xyLWNoZWNrYm94LXdyYXBwZXIsY2xyLXRvZ2dsZS13cmFwcGVyIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xy''@;'; put 'put ''LWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rpb24gdUhlKGMsbCl7MSZjJiZHdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIGRIZShjLGwpezEmYyYmKGRlKDAsImRpdiIsMyksV3IoMSwyKSxoZSgpKX1mdW5jdGlvbiBoSGUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29u''@;'; put 'put ''Iiw2KX1mdW5jdGlvbiBmSGUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiw3KX1mdW5jdGlvbiBwSGUoYyxsKXsxJmMmJldyKDAsMyxbIipuZ0lmIiwic2hvd0ludmFsaWQiXSl9ZnVuY3Rpb24gZ0hlKGMsbCl7MSZjJiZXcigwLDQsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1mdW5jdGlvbiBt''@;'; put 'put ''SGUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDMpLGd0KDEsaEhlLDEsMCwiY2RzLWljb24iLDQpKDIsZkhlLDEsMCwiY2RzLWljb24iLDUpKDMscEhlLDEsMCwibmctY29udGVudCIsMCkoNCxnSGUsMSwwLCJuZy1jb250ZW50IiwwKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLHhl''@;'; put 'put ''KCJuZ0lmIixhLnNob3dJbnZhbGlkKSxmZSgpLHhlKCJuZ0lmIixhLnNob3dWYWxpZCksZmUoKSx4ZSgibmdJZiIsYS5zaG93SW52YWxpZCksZmUoKSx4ZSgibmdJZiIsYS5zaG93VmFsaWQpfX1jb25zdCB2SGU9WyJjbHJLZXlGb2N1cyIsIiJdLENIZT1bW1sibGFiZWwiXV0sW1siIiwiY2xy''@;'; put 'put ''SW5wdXRQcmVmaXgiLCIiXV0sW1siIiwiY2xySW5wdXQiLCIiXV0sW1siIiwiY2xySW5wdXRTdWZmaXgiLCIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLFNIZT1bImxhYmVsIiwiW2NscklucHV0''@;'; put 'put ''UHJlZml4XSIsIltjbHJJbnB1dF0iLCJbY2xySW5wdXRTdWZmaXhdIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rpb24gTUhlKGMsbCl7MSZjJiZHdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIHhIZShjLGwpezEmYyYm''@;'; put 'put ''R3QoMCwiY2RzLWljb24iLDYpfWZ1bmN0aW9uIEVIZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDcpfWZ1bmN0aW9uIFRIZShjLGwpezEmYyYmV3IoMCw0LFsiKm5nSWYiLCJzaG93SGVscGVyIl0pfWZ1bmN0aW9uIEFIZShjLGwpezEmYyYmV3IoMCw1LFsiKm5nSWYiLCJzaG93SW52YWxp''@;'; put 'put ''ZCJdKX1mdW5jdGlvbiBrSGUoYyxsKXsxJmMmJldyKDAsNixbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWZ1bmN0aW9uIE5IZShjLGwpezEmYyYmV3IoMCl9Y29uc3QgVkhlPVsidGFiQ29udGVudFByb2plY3RlZFJlZiJdO2Z1bmN0aW9uIEJIZShjLGwpe2lmKDEmYyYmKGRlKDAsInNlY3Rpb24i''@;'; put 'put ''LDEpLFdyKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO3hyKCJhY3RpdmUiLGEuYWN0aXZlKSx4ZSgiaWQiLGEudGFiQ29udGVudElkKSgiaGlkZGVuIiwhYS5hY3RpdmUpLGRyKCJhcmlhLWxhYmVsbGVkYnkiLGEuYXJpYUxhYmVsbGVkQnkpKCJhcmlhLWhpZGRlbiIsIWEuYWN0aXZlKX19''@;'; put 'put ''Y29uc3QgakhlPVsidGFiQ29udGVudFZpZXdDb250YWluZXIiXSx6SGU9W1tbImNsci10YWJzLWFjdGlvbnMiXV1dLFVIZT1bImNsci10YWJzLWFjdGlvbnMiXTtmdW5jdGlvbiBaSGUoYyxsKXtpZigxJmMmJihsaSgwKSxkZSgxLCJsaSIsNSksWGwoMiw2KSxoZSgpLGNpKCkpLDImYyl7Y29u''@;'; put 'put ''c3QgYT1PZSgpLiRpbXBsaWNpdDtmZSgyKSx4ZSgibmdUZW1wbGF0ZU91dGxldCIsYS50ZW1wbGF0ZVJlZkNvbnRhaW5lci50ZW1wbGF0ZSl9fWZ1bmN0aW9uIFdIZShjLGwpe2lmKDEmYyYmKGxpKDApLGd0KDEsWkhlLDMsMSwibmctY29udGFpbmVyIiw0KSxjaSgpKSwyJmMpe2NvbnN0IGE9''@;'; put 'put ''bC4kaW1wbGljaXQsZD1PZSgpO2ZlKCkseGUoIm5nSWYiLGEudGFic0lkPT09ZC50YWJzSWQmJiFhLmluT3ZlcmZsb3cpfX1mdW5jdGlvbiBZSGUoYyxsKXsxJmMmJlhsKDAsNiksMiZjJiZ4ZSgibmdUZW1wbGF0ZU91dGxldCIsT2UoKS4kaW1wbGljaXQudGVtcGxhdGVSZWZDb250YWluZXIu''@;'; put 'put ''dGVtcGxhdGUpfWZ1bmN0aW9uIEdIZShjLGwpe2lmKDEmYyYmKGxpKDApLGd0KDEsWUhlLDEsMSwibmctY29udGFpbmVyIiwxMyksY2koKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9T2UoMyk7ZmUoKSx4ZSgibmdJZiIsYS50YWJzSWQ9PT1kLnRhYnNJZCYmYS5pbk92ZXJmbG93KX19''@;'; put 'put ''ZnVuY3Rpb24gJEhlKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXRhYi1vdmVyZmxvdy1jb250ZW50IiwxMiksRnQoImtleWRvd24uZXNjYXBlIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5jbG9zZU9uRXNjYXBlS2V5KCkpfSwwLFUzKSgiY2xpY2siLGZ1''@;'; put 'put ''bmN0aW9uKGgpe3d0KGEpLE9lKCk7Y29uc3QgZj12byg0KTtyZXR1cm4gQ3QoT2UoKS5jbG9zZU9uT3V0c2lkZUNsaWNrKGgsZikpfSwhMSxVMykoImZvY3Vzb3V0IixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikuY2xvc2VPbkZvY3VzT3V0KGgpKX0pLGd0KDEsR0hlLDIsMSwi''@;'; put 'put ''bmctY29udGFpbmVyIiwzKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLHhlKCJuZ0Zvck9mIixhLnRhYkxpbmtEaXJlY3RpdmVzKX19ZnVuY3Rpb24gS0hlKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7bGkoMCksZGUoMSwiZGl2Iiw3KSgyLCJsaSIsOCkoMywiYnV0dG9uIiw5''@;'; put 'put ''LDEpLEZ0KCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuX21vdXNlZG93bj0hMCl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkub3Blbk92ZXJmbG93T25Gb2N1cygpKX0pKCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSks''@;'; put 'put ''Q3QoT2UoKS50b2dnbGVPdmVyZmxvd09uQ2xpY2soKSl9KSxHdCg1LCJjZHMtaWNvbiIsMTApLGhlKCkoKSxndCg2LCRIZSwyLDEsImNsci10YWItb3ZlcmZsb3ctY29udGVudCIsMTEpLGhlKCksY2koKX1pZigyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLHhyKCJvcGVuIixhLnRvZ2dsZVNlcnZp''@;'; put 'put ''Y2Uub3BlbiksZmUoMikseHIoImFjdGl2ZSIsYS5hY3RpdmVUYWJJbk92ZXJmbG93KSgib3BlbiIsYS50b2dnbGVTZXJ2aWNlLm9wZW4pLGRyKCJ0YWJpbmRleCIsYS5hY3RpdmVUYWJJbk92ZXJmbG93JiYhYS50b2dnbGVTZXJ2aWNlLm9wZW4/MDotMSkoInRpdGxlIixhLmNvbW1vblN0cmlu''@;'; put 'put ''Z3Mua2V5cy5tb3JlKSxmZSgyKSxkcigic3RhdHVzIixhLnRvZ2dsZVNlcnZpY2Uub3Blbj8iaW5mbyI6bnVsbCkoInRpdGxlIixhLmNvbW1vblN0cmluZ3Mua2V5cy5tb3JlKSxmZSgpLHhlKCJuZ0lmIixhLnRvZ2dsZVNlcnZpY2Uub3Blbil9fWZ1bmN0aW9uIHFIZShjLGwpe2lmKDEmYyl7''@;'; put 'put ''Y29uc3QgYT1PbigpO2RlKDAsImJ1dHRvbiIsMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLnRvZ2dsZUJ5QnV0dG9uKCkpfSksR3QoMSwiY2RzLWljb24iLDQpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKCk7eHIoIm9uLWNvbGxhcHNlIixhLmNvbGxhcHNl''@;'; put 'put ''ZCksZHIoImFyaWEtY29udHJvbHMiLGEuY29udGVudElkKSgiYXJpYS1leHBhbmRlZCIsYS5hcmlhRXhwYW5kZWQpKCJhcmlhLWxhYmVsIixhLnRvZ2dsZUxhYmVsfHxhLmNvbW1vblN0cmluZ3Mua2V5cy52ZXJ0aWNhbE5hdlRvZ2dsZSksZmUoKSxkcigiZGlyZWN0aW9uIixhLmNvbGxhcHNl''@;'; put 'put ''ZD8icmlnaHQiOiJsZWZ0Iil9fWZ1bmN0aW9uIFhIZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImJ1dHRvbiIsNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLmNvbGxhcHNlZD0hMSl9KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpO2RyKCJh''@;'; put 'put ''cmlhLWNvbnRyb2xzIixhLmNvbnRlbnRJZCkoImFyaWEtbGFiZWwiLGEudG9nZ2xlTGFiZWx8fGEuY29tbW9uU3RyaW5ncy5rZXlzLnZlcnRpY2FsTmF2VG9nZ2xlKX19Y29uc3QgZU5lPVsiY2xyVmVydGljYWxOYXZMaW5rIiwiIl0sdE5lPVtbWyIiLCJjbHJWZXJ0aWNhbE5hdkljb24iLCIi''@;'; put 'put ''XV0sIioiXSxuTmU9WyJbY2xyVmVydGljYWxOYXZJY29uXSIsIioiXTtmdW5jdGlvbiByTmUoYyxsKXtpZigxJmMmJihkZSgwLCJ0aCIsNCkoMSwic3BhbiIpLExlKDIpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksZHIoImFyaWEtbGFiZWwiLGEuZGF5KSxmZSgpLF9y''@;'; put 'put ''KGEubmFycm93KX19ZnVuY3Rpb24gaU5lKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwidGQiLDcpKDEsImNsci1kYXkiLDgpLEZ0KCJzZWxlY3REYXkiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgyKS5zZXRTZWxlY3RlZERheShoKSl9KSxoZSgpKCl9aWYoMiZjKXtj''@;'; put 'put ''b25zdCBhPWwuJGltcGxpY2l0O2ZlKCkseGUoImNsckRheVZpZXciLGEpfX1mdW5jdGlvbiBvTmUoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIsNSksZ3QoMSxpTmUsMiwxLCJ0ZCIsNiksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCkseGUoIm5nRm9yT2YiLGEpfX1mdW5jdGlv''@;'; put 'put ''biBhTmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJidXR0b24iLDEwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS5pbmRleDtyZXR1cm4gQ3QoT2UoKS5jaGFuZ2VNb250aChoKSl9KSgibW91c2VlbnRlciIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLmlu''@;'; put 'put ''ZGV4O3JldHVybiBDdChPZSgpLm9uSG92ZXIoaCkpfSksTGUoMSksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9T2UoKTt4cigiaXMtc2VsZWN0ZWQiLGguaXNTZWxlY3RlZChkKSkoImlzLXN0YXJ0LXJhbmdlIixoLmdldElzUmFuZ2VTdGFydE1vbnRoKGQp''@;'; put 'put ''KSgiaXMtZW5kLXJhbmdlIixoLmdldElzUmFuZ2VFbmRNb250aChkKSkoImluLXJhbmdlIixoLmlzSW5SYW5nZShkKSkoImlzLXRvZGF5IixoLmNhbGVuZGFyWWVhcj09PWguY3VycmVudENhbGVuZGFyWWVhciYmZD09PWguY3VycmVudENhbGVuZGFyTW9udGgpLGRyKCJ0YWJpbmRleCIsaC5n''@;'; put 'put ''ZXRUYWJJbmRleChkKSksZmUoKSxScigiICIsYSwiICIpfX1mdW5jdGlvbiBzTmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJidXR0b24iLDEwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKCkuY2hhbmdlWWVhciho''@;'; put 'put ''KSl9KSgibW91c2VlbnRlciIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoKS5vbkhvdmVyKGgpKX0pLExlKDEpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9T2UoKTt4cigiaXMtc2VsZWN0ZWQiLGE9PT1kLnNlbGVjdGVkU3RhcnRZ''@;'; put 'put ''ZWFyfHxhPT09ZC5zZWxlY3RlZEVuZFllYXIpKCJpcy1zdGFydC1yYW5nZSIsZC5nZXRJc1JhbmdlU3RhcnRZZWFyKGEpKSgiaXMtZW5kLXJhbmdlIixkLmdldElzUmFuZ2VFbmRZZWFyKGEpKSgiaW4tcmFuZ2UiLGQuaXNJblJhbmdlKGEpKSgiaXMtdG9kYXkiLGQuaXNDdXJyZW50Q2FsZW5k''@;'; put 'put ''YXJZZWFyKGEpKSxkcigidGFiaW5kZXgiLGQuZ2V0VGFiSW5kZXgoYSkpLGZlKCksUnIoIiAiLGEsIiAiKX19ZnVuY3Rpb24gbE5lKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7bGkoMCksZGUoMSwiYSIsNiksRnQoImtleXVwLmVudGVyIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGlt''@;'; put 'put ''cGxpY2l0O3JldHVybiBDdChPZSgyKS5vblJhbmdlT3B0aW9uU2VsZWN0KGgpKX0pKCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoMikub25SYW5nZU9wdGlvblNlbGVjdChoKSl9KSxMZSgyKSxoZSgpLGNpKCl9aWYoMiZjKXtjb25zdCBh''@;'; put 'put ''PWwuJGltcGxpY2l0O2ZlKCksZHIoImFyaWEtbGFiZWwiLG51bGw9PWE/bnVsbDphLmxhYmVsKSxmZSgpLFJyKCIgIixhLmxhYmVsLCIgIil9fWZ1bmN0aW9uIGNOZShjLGwpezEmYyYmWGwoMCl9ZnVuY3Rpb24gdU5lKGMsbCl7aWYoMSZjJiYobGkoMCksZGUoMSwiY2xyLXZlcnRpY2FsLW5h''@;'; put 'put ''diIsMiksZ3QoMixsTmUsMywyLCJuZy1jb250YWluZXIiLDMpLGhlKCksZGUoMywiZGl2Iiw0KSxndCg0LGNOZSwxLDAsIm5nLWNvbnRhaW5lciIsNSksaGUoKSxjaSgpKSwyJmMpe2NvbnN0IGE9T2UoKSxkPXZvKDIpO2ZlKDIpLHhlKCJuZ0Zvck9mIixhLmRhdGVSYW5nZU9wdGlvbnMpLGZl''@;'; put 'put ''KDIpLHhlKCJuZ1RlbXBsYXRlT3V0bGV0IixkKX19ZnVuY3Rpb24gZE5lKGMsbCl7MSZjJiZHdCgwLCJjbHItbW9udGhwaWNrZXIiKX1mdW5jdGlvbiBoTmUoYyxsKXsxJmMmJkd0KDAsImNsci15ZWFycGlja2VyIil9ZnVuY3Rpb24gZk5lKGMsbCl7MSZjJiZHdCgwLCJjbHItZGF5cGlja2Vy''@;'; put 'put ''Iil9ZnVuY3Rpb24gcE5lKGMsbCl7MSZjJiZHdCgwLCJjbHItZGF0ZXBpY2tlci1hY3Rpb25zIil9ZnVuY3Rpb24gZ05lKGMsbCl7aWYoMSZjJiZndCgwLGROZSwxLDAsImNsci1tb250aHBpY2tlciIsNykoMSxoTmUsMSwwLCJjbHIteWVhcnBpY2tlciIsNykoMixmTmUsMSwwLCJjbHItZGF5''@;'; put 'put ''cGlja2VyIiw3KSgzLHBOZSwxLDAsImNsci1kYXRlcGlja2VyLWFjdGlvbnMiLDcpLDImYyl7Y29uc3QgYT1PZSgpO3hlKCJuZ0lmIixhLmlzTW9udGhWaWV3KSxmZSgpLHhlKCJuZ0lmIixhLmlzWWVhclZpZXcpLGZlKCkseGUoIm5nSWYiLGEuaXNEYXlWaWV3KSxmZSgpLHhlKCJuZ0lmIixh''@;'; put 'put ''Lmhhc0FjdGlvbkJ1dHRvbnMpfX1jb25zdCBtTmU9WyJhY3Rpb25CdXR0b24iXSx2TmU9W1tbImxhYmVsIl1dLFtbIiIsImNsckRhdGUiLCIiXV0sW1siIiwiY2xyU3RhcnREYXRlIiwiIl1dLFtbIiIsImNsckVuZERhdGUiLCIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1j''@;'; put 'put ''b250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLGJOZT1bImxhYmVsIiwiW2NsckRhdGVdIiwiW2NsclN0YXJ0RGF0ZV0iLCJbY2xyRW5kRGF0ZV0iLCJjbHItY29udHJvbC1oZWxwZXIiLCJjbHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtm''@;'; put 'put ''dW5jdGlvbiB5TmUoYyxsKXsxJmMmJkd0KDAsImxhYmVsIil9ZnVuY3Rpb24gX05lKGMsbCl7MSZjJiYobGkoMCksV3IoMSwyKSxkZSgyLCJzcGFuIiw5KSxMZSgzLCItIiksaGUoKSxXcig0LDMpLGNpKCkpfWZ1bmN0aW9uIHdOZShjLGwpezEmYyYmKGRlKDAsImJ1dHRvbiIsMTAsMCksR3Qo''@;'; put 'put ''MiwiY2RzLWljb24iLDExKSxoZSgpKSwyJmMmJnhlKCJkaXNhYmxlZCIsT2UoKS5pc0lucHV0RGF0ZURpc2FibGVkKX1mdW5jdGlvbiBDTmUoYyxsKXsxJmMmJkd0KDAsImNsci1kYXRlcGlja2VyLXZpZXctbWFuYWdlciIsMTIpfWZ1bmN0aW9uIFNOZShjLGwpezEmYyYmR3QoMCwiY2RzLWlj''@;'; put 'put ''b24iLDEzKX1mdW5jdGlvbiBNTmUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiwxNCl9ZnVuY3Rpb24geE5lKGMsbCl7MSZjJiZXcigwLDQsWyIqbmdJZiIsInNob3dIZWxwZXIiXSl9ZnVuY3Rpb24gRU5lKGMsbCl7MSZjJiZXcigwLDUsWyIqbmdJZiIsInNob3dJbnZhbGlkIl0pfWZ1bmN0''@;'; put 'put ''aW9uIFROZShjLGwpezEmYyYmV3IoMCw2LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9Y29uc3QgSU5lPVtbWyJsYWJlbCJdXSxbWyIiLCJjbHJOdW1iZXJJbnB1dCIsIiJdXSxbWyJjbHItY29udHJvbC1oZWxwZXIiXV0sW1siY2xyLWNvbnRyb2wtZXJyb3IiXV0sW1siY2xyLWNvbnRyb2wtc3Vj''@;'; put 'put ''Y2VzcyJdXV0sUk5lPVsibGFiZWwiLCJbY2xyTnVtYmVySW5wdXRdIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJvbC1zdWNjZXNzIl07ZnVuY3Rpb24gTE5lKGMsbCl7MSZjJiZHdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIE9OZShjLGwpezEmYyYm''@;'; put 'put ''R3QoMCwiY2RzLWljb24iLDExKX1mdW5jdGlvbiBQTmUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiwxMil9ZnVuY3Rpb24gRk5lKGMsbCl7MSZjJiZXcigwLDIsWyIqbmdJZiIsInNob3dIZWxwZXIiXSl9ZnVuY3Rpb24gSE5lKGMsbCl7MSZjJiZXcigwLDMsWyIqbmdJZiIsInNob3dJbnZh''@;'; put 'put ''bGlkIl0pfWZ1bmN0aW9uIE5OZShjLGwpezEmYyYmV3IoMCw0LFsiKm5nSWYiLCJzaG93VmFsaWQiXSl9Y29uc3QgVk5lPVtbWyIiLCJjbHJSYWRpbyIsIiJdXSxbWyJsYWJlbCJdXV0sQk5lPVsiW2NsclJhZGlvXSIsImxhYmVsIl07ZnVuY3Rpb24gak5lKGMsbCl7MSZjJiZHdCgwLCJsYWJl''@;'; put 'put ''bCIpfWNvbnN0IHpOZT1bW1sibGFiZWwiXV0sW1siY2xyLXJhZGlvLXdyYXBwZXIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLFVOZT1bImxhYmVsIiwiY2xyLXJhZGlvLXdyYXBwZXIiLCJjbHIt''@;'; put 'put ''Y29udHJvbC1oZWxwZXIiLCJjbHItY29udHJvbC1lcnJvciIsImNsci1jb250cm9sLXN1Y2Nlc3MiXTtmdW5jdGlvbiBaTmUoYyxsKXsxJmMmJkd0KDAsImxhYmVsIil9ZnVuY3Rpb24gV05lKGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwzKSxXcigxLDIpLGhlKCkpfWZ1bmN0aW9uIFlOZShjLGwp''@;'; put 'put ''ezEmYyYmR3QoMCwiY2RzLWljb24iLDYpfWZ1bmN0aW9uIEdOZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDcpfWZ1bmN0aW9uICROZShjLGwpezEmYyYmV3IoMCwzLFsiKm5nSWYiLCJzaG93SW52YWxpZCJdKX1mdW5jdGlvbiBLTmUoYyxsKXsxJmMmJldyKDAsNCxbIipuZ0lmIiwic2hv''@;'; put 'put ''d1ZhbGlkIl0pfWZ1bmN0aW9uIHFOZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMyksZ3QoMSxZTmUsMSwwLCJjZHMtaWNvbiIsNCkoMixHTmUsMSwwLCJjZHMtaWNvbiIsNSkoMywkTmUsMSwwLCJuZy1jb250ZW50IiwwKSg0LEtOZSwxLDAsIm5nLWNvbnRlbnQiLDApLGhlKCkpLDImYyl7''@;'; put 'put ''Y29uc3QgYT1PZSgpO2ZlKCkseGUoIm5nSWYiLGEuc2hvd0ludmFsaWQpLGZlKCkseGUoIm5nSWYiLGEuc2hvd1ZhbGlkKSxmZSgpLHhlKCJuZ0lmIixhLnNob3dJbnZhbGlkKSxmZSgpLHhlKCJuZ0lmIixhLnNob3dWYWxpZCl9fWNvbnN0IFhOZT1bW1sibGFiZWwiXV0sW1siIiwiY2xyU2Vs''@;'; put 'put ''ZWN0IiwiIl1dLFtbImNsci1jb250cm9sLWhlbHBlciJdXSxbWyJjbHItY29udHJvbC1lcnJvciJdXSxbWyJjbHItY29udHJvbC1zdWNjZXNzIl1dXSxKTmU9WyJsYWJlbCIsIltjbHJTZWxlY3RdIiwiY2xyLWNvbnRyb2wtaGVscGVyIiwiY2xyLWNvbnRyb2wtZXJyb3IiLCJjbHItY29udHJv''@;'; put 'put ''bC1zdWNjZXNzIl07ZnVuY3Rpb24gUU5lKGMsbCl7MSZjJiZHdCgwLCJsYWJlbCIpfWZ1bmN0aW9uIGVWZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDUpfWZ1bmN0aW9uIHRWZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDYpfWZ1bmN0aW9uIG5WZShjLGwpezEmYyYmV3IoMCwyLFsi''@;'; put 'put ''Km5nSWYiLCJzaG93SGVscGVyIl0pfWZ1bmN0aW9uIHJWZShjLGwpezEmYyYmV3IoMCwzLFsiKm5nSWYiLCJzaG93SW52YWxpZCJdKX1mdW5jdGlvbiBpVmUoYyxsKXsxJmMmJldyKDAsNCxbIipuZ0lmIiwic2hvd1ZhbGlkIl0pfWNvbnN0IG9WZT1bW1sibGFiZWwiXV0sW1siIiwiY2xyVGV4''@;'; put 'put ''dGFyZWEiLCIiXV0sW1siY2xyLWNvbnRyb2wtaGVscGVyIl1dLFtbImNsci1jb250cm9sLWVycm9yIl1dLFtbImNsci1jb250cm9sLXN1Y2Nlc3MiXV1dLGFWZT1bImxhYmVsIiwiW2NsclRleHRhcmVhXSIsImNsci1jb250cm9sLWhlbHBlciIsImNsci1jb250cm9sLWVycm9yIiwiY2xyLWNv''@;'; put 'put ''bnRyb2wtc3VjY2VzcyJdO2Z1bmN0aW9uIHNWZShjLGwpezEmYyYmR3QoMCwibGFiZWwiKX1mdW5jdGlvbiBsVmUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiw1KX1mdW5jdGlvbiBjVmUoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiw2KX1mdW5jdGlvbiB1VmUoYyxsKXsxJmMmJldyKDAs''@;'; put 'put ''MixbIipuZ0lmIiwic2hvd0hlbHBlciJdKX1mdW5jdGlvbiBkVmUoYyxsKXsxJmMmJldyKDAsMyxbIipuZ0lmIiwic2hvd0ludmFsaWQiXSl9ZnVuY3Rpb24gaFZlKGMsbCl7MSZjJiZXcigwLDQsWyIqbmdJZiIsInNob3dWYWxpZCJdKX1jb25zdCBmVmU9WyJhbmNob3IiXTtmdW5jdGlvbiBw''@;'; put 'put ''VmUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDQpKDEsImRpdiIsNSkoMiwiYnV0dG9uIiw2KSxHdCgzLCJjZHMtaWNvbiIsNyksaGUoKSgpLFdyKDQpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO3hlKCJpZCIsYS5wb3BvdmVySWQpLGRyKCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mu''@;'; put 'put ''a2V5cy5kYXRhZ3JpZEZpbHRlckRpYWxvZ0FyaWFMYWJlbCksZmUoMyksZHIoInRpdGxlIixhLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSl9fWNvbnN0IGdWZT1bImlucHV0X2xvdyJdLG1WZT1bImlucHV0Il0sdlZlPVsiY29sdW1uUG9ydGFsIl07ZnVuY3Rpb24gYlZlKGMsbCl7MSZjJiZX''@;'; put 'put ''cigwKX1jb25zdCB5VmU9WyJyZXNpemVUcmFja2VyIl0sX1ZlPVsiY29sdW1uSGFuZGxlIl0sd1ZlPVtbWyJjbHItZGctZmlsdGVyIl0sWyJjbHItZGctc3RyaW5nLWZpbHRlciJdLFsiY2xyLWRnLW51bWVyaWMtZmlsdGVyIl1dLCIqIl0sQ1ZlPVsiY2xyLWRnLWZpbHRlciwgY2xyLWRnLXN0''@;'; put 'put ''cmluZy1maWx0ZXIsIGNsci1kZy1udW1lcmljLWZpbHRlciIsIioiXTtmdW5jdGlvbiBTVmUoYyxsKXsxJmMmJlhsKDApfWZ1bmN0aW9uIE1WZShjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDEwKSwyJmMmJmRyKCJkaXJlY3Rpb24iLE9lKDIpLnNvcnREaXJlY3Rpb24pfWZ1bmN0aW9uIHhW''@;'; put 'put ''ZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImJ1dHRvbiIsNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLnNvcnQoKSl9KSxndCgxLFNWZSwxLDAsIm5nLWNvbnRhaW5lciIsOCkoMixNVmUsMSwxLCJjZHMtaWNvbiIsOSksaGUoKX1pZigyJmMp''@;'; put 'put ''e2NvbnN0IGE9T2UoKSxkPXZvKDYpO2ZlKCkseGUoIm5nVGVtcGxhdGVPdXRsZXQiLGQpLGZlKCkseGUoIm5nSWYiLGEuc29ydERpcmVjdGlvbil9fWZ1bmN0aW9uIEVWZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci1kZy1zdHJpbmctZmlsdGVyIiwxMSkscGkoImNsckZp''@;'; put 'put ''bHRlclZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCk7cmV0dXJuIHZpKGYuZmlsdGVyVmFsdWUsaCl8fChmLmZpbHRlclZhbHVlPWgpLEN0KGgpfSksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoKTt4ZSgiY2xyRmlsdGVyUGxhY2Vob2xkZXIiLGEuZmlsdGVyU3Ry''@;'; put 'put ''aW5nUGxhY2Vob2xkZXIpKCJjbHJEZ1N0cmluZ0ZpbHRlciIsYS5yZWdpc3RlcmVkKSxmaSgiY2xyRmlsdGVyVmFsdWUiLGEuZmlsdGVyVmFsdWUpfX1mdW5jdGlvbiBUVmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItZGctbnVtZXJpYy1maWx0ZXIiLDEyKSxwaSgiY2xy''@;'; put 'put ''RmlsdGVyVmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKTtyZXR1cm4gdmkoZi5maWx0ZXJWYWx1ZSxoKXx8KGYuZmlsdGVyVmFsdWU9aCksQ3QoaCl9KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpO3hlKCJjbHJGaWx0ZXJNYXhQbGFjZWhvbGRlciIsYS5maWx0''@;'; put 'put ''ZXJOdW1iZXJNYXhQbGFjZWhvbGRlcikoImNsckZpbHRlck1pblBsYWNlaG9sZGVyIixhLmZpbHRlck51bWJlck1pblBsYWNlaG9sZGVyKSgiY2xyRGdOdW1lcmljRmlsdGVyIixhLnJlZ2lzdGVyZWQpLGZpKCJjbHJGaWx0ZXJWYWx1ZSIsYS5maWx0ZXJWYWx1ZSl9fWZ1bmN0aW9uIEFWZShj''@;'; put 'put ''LGwpezEmYyYmV3IoMCwxKX1mdW5jdGlvbiBrVmUoYyxsKXsxJmMmJlhsKDApfWZ1bmN0aW9uIERWZShjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDEzKSxndCgxLGtWZSwxLDAsIm5nLWNvbnRhaW5lciIsOCksaGUoKSksMiZjKXtPZSgpO2NvbnN0IGE9dm8oNik7ZmUoKSx4ZSgibmdUZW1w''@;'; put 'put ''bGF0ZU91dGxldCIsYSl9fWZ1bmN0aW9uIElWZShjLGwpezEmYyYmR3QoMCwiY2xyLWRnLWNvbHVtbi1zZXBhcmF0b3IiKX1mdW5jdGlvbiBSVmUoYyxsKXsxJmMmJkd0KDAsImRpdiIsNCl9ZnVuY3Rpb24gTFZlKGMsbCl7MSZjJiZXcigwLDAsWyIqbmdJZiIsImVtcHR5RGF0YWdyaWQiXSl9''@;'; put 'put ''Y29uc3QgT1ZlPVsiY2VsbFBvcnRhbCJdO2Z1bmN0aW9uIFBWZShjLGwpezEmYyYmV3IoMCl9Y29uc3QgRlZlPVsicm93UG9ydGFsIl07ZnVuY3Rpb24gSFZlKGMsbCl7MSZjJiZXcigwKX1jb25zdCBOVmU9WyJkZXRhaWxCdXR0b24iXSxWVmU9WyJzdGlja3lDZWxscyJdLEJWZT1bInNjcm9s''@;'; put 'put ''bGFibGVDZWxscyJdLGpWZT1bImNhbGN1bGF0ZWRDZWxscyJdLHpWZT1bW1siY2xyLWRnLXJvdy1kZXRhaWwiXV0sW1siY2xyLWRnLWNlbGwiXV0sW1siY2xyLWRnLWFjdGlvbi1vdmVyZmxvdyJdXV0sVVZlPVsiY2xyLWRnLXJvdy1kZXRhaWwiLCJjbHItZGctY2VsbCIsImNsci1kZy1hY3Rp''@;'; put 'put ''b24tb3ZlcmZsb3ciXSxaVmU9Yz0+KHsiaXMtcmVwbGFjZWQiOmN9KSx1MWU9Yz0+KHsiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCI6Y30pO2Z1bmN0aW9uIFdWZShjLGwpe31mdW5jdGlvbiBZVmUoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItZXhwYW5kYWJsZS1hbmltYXRpb24iLDEwKSxn''@;'; put 'put ''dCgxLFdWZSwwLDAsIm5nLXRlbXBsYXRlIiwxMSksaGUoKSksMiZjKXtjb25zdCBhPU9lKDIpLGQ9dm8oNik7eGUoImNsckV4cGFuZFRyaWdnZXIiLGEuZXhwYW5kQW5pbWF0aW9uVHJpZ2dlciksZmUoKSx4ZSgibmdUZW1wbGF0ZU91dGxldCIsZCl9fWZ1bmN0aW9uIEdWZShjLGwpe31mdW5j''@;'; put 'put ''dGlvbiAkVmUoYyxsKXsxJmMmJmd0KDAsR1ZlLDAsMCwibmctdGVtcGxhdGUiLDExKSwyJmMmJihPZSgyKSx4ZSgibmdUZW1wbGF0ZU91dGxldCIsdm8oNikpKX1mdW5jdGlvbiBLVmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDkpLEZ0KCJtb3VzZWRvd24iLGZ1bmN0''@;'; put 'put ''aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgpLmNsZWFyUmFuZ2VzKGgpKX0pKCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpO3JldHVybiBDdChmLnNlbGVjdFJvdyghZi5zZWxlY3RlZCxoKSl9KSxndCgxLFlWZSwyLDIsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIs''@;'; put 'put ''NykoMiwkVmUsMSwxLG51bGwsOCksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLHhlKCJuZ0lmIixhLmV4cGFuZC5leHBhbmRhYmxlKSxmZSgpLHhlKCJuZ0lmIiwhYS5leHBhbmQuZXhwYW5kYWJsZSl9fWZ1bmN0aW9uIHFWZShjLGwpe31mdW5jdGlvbiBYVmUoYyxsKXtpZigxJmMm''@;'; put 'put ''JihkZSgwLCJjbHItZXhwYW5kYWJsZS1hbmltYXRpb24iLDEwKSxndCgxLHFWZSwwLDAsIm5nLXRlbXBsYXRlIiwxMSksaGUoKSksMiZjKXtjb25zdCBhPU9lKCksZD12byg2KTt4ZSgiY2xyRXhwYW5kVHJpZ2dlciIsYS5leHBhbmRBbmltYXRpb25UcmlnZ2VyKSxmZSgpLHhlKCJuZ1RlbXBs''@;'; put 'put ''YXRlT3V0bGV0IixkKX19ZnVuY3Rpb24gSlZlKGMsbCl7fWZ1bmN0aW9uIFFWZShjLGwpezEmYyYmZ3QoMCxKVmUsMCwwLCJuZy10ZW1wbGF0ZSIsMTEpLDImYyYmKE9lKCkseGUoIm5nVGVtcGxhdGVPdXRsZXQiLHZvKDYpKSl9ZnVuY3Rpb24gZUJlKGMsbCl7MSZjJiZXcigwKX1mdW5jdGlv''@;'; put 'put ''biB0QmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDIwKSgxLCJkaXYiLDIxKSgyLCJpbnB1dCIsMjIpLEZ0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikudG9nZ2xlKGgpKX0pLGhlKCksZGUoMywibGFiZWwiLDIzKSxGdCgi''@;'; put 'put ''Y2xpY2siLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgyKS5jbGVhclJhbmdlcyhoKSl9KSxkZSg0LCJzcGFuIiwyNCksTGUoNSksaGUoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9T2UoMik7eGUoIm5nQ2xhc3MiLG5wKDcsdTFlLCFhLmNsckRnU2VsZWN0YWJsZSkpLGZlKDIpLHhl''@;'; put 'put ''KCJuZ01vZGVsIixhLnNlbGVjdGVkKSgiaWQiLGEuY2hlY2tib3hJZCkoImRpc2FibGVkIiwhYS5jbHJEZ1NlbGVjdGFibGV8fG51bGwpLGRyKCJhcmlhLWRpc2FibGVkIiwhYS5jbHJEZ1NlbGVjdGFibGV8fG51bGwpLGZlKCkseGUoImZvciIsYS5jaGVja2JveElkKSxmZSgyKSxfcihhLmNs''@;'; put 'put ''ckRnUm93U2VsZWN0aW9uTGFiZWx8fGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdCl9fWZ1bmN0aW9uIG5CZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsMjApKDEsImNsci1yYWRpby13cmFwcGVyIikoMiwiaW5wdXQiLDI1KSxwaSgibmdNb2RlbENoYW5nZSIsZnVu''@;'; put 'put ''Y3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgyKTtyZXR1cm4gdmkoZi5zZWxlY3Rpb24uY3VycmVudFNpbmdsZSxoKXx8KGYuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGU9aCksQ3QoaCl9KSxoZSgpLGRlKDMsImxhYmVsIiwyNikoNCwic3BhbiIsMjQpLExlKDUpLGhlKCkoKSgpKCl9aWYoMiZj''@;'; put 'put ''KXtjb25zdCBhPU9lKDIpO3hlKCJuZ0NsYXNzIixucCgxMCx1MWUsIWEuY2xyRGdTZWxlY3RhYmxlKSksZmUoMikseGUoImlkIixhLnJhZGlvSWQpKCJuYW1lIixhLnNlbGVjdGlvbi5pZCsiLXJhZGlvIikoInZhbHVlIixhLml0ZW0pLGZpKCJuZ01vZGVsIixhLnNlbGVjdGlvbi5jdXJyZW50''@;'; put 'put ''U2luZ2xlKSx4ZSgiY2hlY2tlZCIsYS5zZWxlY3Rpb24uY3VycmVudFNpbmdsZT09PWEuaXRlbSkoImRpc2FibGVkIiwhYS5jbHJEZ1NlbGVjdGFibGV8fG51bGwpLGRyKCJhcmlhLWRpc2FibGVkIiwhYS5jbHJEZ1NlbGVjdGFibGV8fG51bGwpLGZlKCkseGUoImZvciIsYS5yYWRpb0lkKSxm''@;'; put 'put ''ZSgyKSxfcihhLmNsckRnUm93U2VsZWN0aW9uTGFiZWx8fGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdCl9fWZ1bmN0aW9uIHJCZShjLGwpezEmYyYmKGRlKDAsImRpdiIsMjcpLFdyKDEsMiksaGUoKSl9ZnVuY3Rpb24gaUJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiYnV0''@;'; put 'put ''dG9uIiwzMSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSg0KS50b2dnbGVFeHBhbmQoKSl9KSxHdCgxLCJjZHMtaWNvbiIsMzIpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKDQpO2RyKCJhcmlhLWV4cGFuZGVkIixhLmV4cGFuZC5leHBhbmRlZCkoImFyaWEtbGFi''@;'; put 'put ''ZWwiLGEuZXhwYW5kLmV4cGFuZGVkP2EuY2xyRGdEZXRhaWxDbG9zZUxhYmVsOmEuY2xyRGdEZXRhaWxPcGVuTGFiZWwpKCJhcmlhLWNvbnRyb2xzIixhLmV4cGFuZC5oYXNFeHBhbmRUZW1wbGF0ZSYmIWEuZXhwYW5kLmV4cGFuZGVkP251bGw6YS5leHBhbmRhYmxlSWQpLGZlKCksZHIoImRp''@;'; put 'put ''cmVjdGlvbiIsYS5leHBhbmQuZXhwYW5kZWQ/ImRvd24iOiJyaWdodCIpKCJ0aXRsZSIsYS5leHBhbmQuZXhwYW5kZWQ/YS5jb21tb25TdHJpbmdzLmtleXMuY29sbGFwc2U6YS5jb21tb25TdHJpbmdzLmtleXMuZXhwYW5kKX19ZnVuY3Rpb24gb0JlKGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xy''@;'; put 'put ''LXNwaW5uZXIiLDMzKSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoNCk7ZmUoKSxfcihhLmNvbW1vblN0cmluZ3Mua2V5cy5sb2FkaW5nKX19ZnVuY3Rpb24gYUJlKGMsbCl7aWYoMSZjJiYobGkoMCksZ3QoMSxpQmUsMiw1LCJidXR0b24iLDI5KSgyLG9CZSwyLDEsImNsci1zcGlubmVy''@;'; put 'put ''IiwzMCksY2koKSksMiZjKXtjb25zdCBhPU9lKDMpO2ZlKCkseGUoIm5nSWYiLCFhLmV4cGFuZC5sb2FkaW5nKSxmZSgpLHhlKCJuZ0lmIixhLmV4cGFuZC5sb2FkaW5nKX19ZnVuY3Rpb24gc0JlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwyOCksZ3QoMSxhQmUsMywyLCJuZy1jb250YWlu''@;'; put 'put ''ZXIiLDgpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLHhlKCJuZ0lmIixhLmV4cGFuZC5leHBhbmRhYmxlKX19ZnVuY3Rpb24gbEJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiYnV0dG9uIiwzNiw1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD12''@;'; put 'put ''bygxKSxmPU9lKDMpO3JldHVybiBDdChmLmRldGFpbFNlcnZpY2UudG9nZ2xlKGYuaXRlbSxoKSl9KSxHdCgyLCJjZHMtaWNvbiIsMzcpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKDMpO3hyKCJpcy1vcGVuIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSkpLHhlKCJkaXNhYmxl''@;'; put 'put ''ZCIsYS5kZXRhaWxEaXNhYmxlZCksZHIoImFyaWEtbGFiZWwiLGEuZGV0YWlsU2VydmljZS5pc1Jvd09wZW4oYS5pdGVtKT9hLmNsckRnRGV0YWlsQ2xvc2VMYWJlbDphLmNsckRnRGV0YWlsT3BlbkxhYmVsKSgiYXJpYS1leHBhbmRlZCIsYS5kZXRhaWxTZXJ2aWNlLmlzUm93T3BlbihhLml0''@;'; put 'put ''ZW0pKSgiYXJpYS1jb250cm9scyIsYS5kZXRhaWxTZXJ2aWNlLmlkKSxmZSgyKSxkcigiZGlyZWN0aW9uIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSk/ImxlZnQiOiJyaWdodCIpKCJ0aXRsZSIsYS5kZXRhaWxTZXJ2aWNlLmlzUm93T3BlbihhLml0ZW0pP2EuY29tbW9uU3Ry''@;'; put 'put ''aW5ncy5rZXlzLmNsb3NlOmEuY29tbW9uU3RyaW5ncy5rZXlzLm9wZW4pfX1mdW5jdGlvbiBjQmUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDM0KSxndCgxLGxCZSwzLDgsImJ1dHRvbiIsMzUpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLHhlKCJuZ0lmIiwhYS5kZXRhaWxIaWRk''@;'; put 'put ''ZW4pfX1mdW5jdGlvbiB1QmUoYyxsKXt9ZnVuY3Rpb24gZEJlKGMsbCl7MSZjJiZndCgwLHVCZSwwLDAsIm5nLXRlbXBsYXRlIiwxMSksMiZjJiYoT2UoMikseGUoIm5nVGVtcGxhdGVPdXRsZXQiLHZvKDQpKSl9ZnVuY3Rpb24gaEJlKGMsbCl7fWZ1bmN0aW9uIGZCZShjLGwpezEmYyYmZ3Qo''@;'; put 'put ''MCxoQmUsMCwwLCJuZy10ZW1wbGF0ZSIsMTEpLDImYyYmKE9lKDIpLHhlKCJuZ1RlbXBsYXRlT3V0bGV0Iix2byg0KSkpfWZ1bmN0aW9uIHBCZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTIpKDEsImRpdiIsMTMpLGxpKDIsbnVsbCwzKSxndCg0LHRCZSw2LDksImRpdiIsMTQpKDUsbkJl''@;'; put 'put ''LDYsMTIsImRpdiIsMTQpKDYsckJlLDIsMCwiZGl2IiwxNSkoNyxzQmUsMiwxLCJkaXYiLDE2KSg4LGNCZSwyLDEsImRpdiIsMTcpLGNpKCksaGUoKSxkZSg5LCJkaXYiLDE4KSgxMCwiZGl2IiwxOSksV3IoMTEsMSksWGwoMTIsbnVsbCw0KSxoZSgpLGd0KDE0LGRCZSwxLDEsbnVsbCw4KSgx''@;'; put 'put ''NSxmQmUsMSwxLG51bGwsOCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTt4cigiZGF0YWdyaWQtcm93LWRldGFpbC1vcGVuIixhLmRldGFpbFNlcnZpY2UuaXNSb3dPcGVuKGEuaXRlbSkpLHhlKCJpZCIsYS5pZCksZmUoNCkseGUoIm5nSWYiLGEuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9''@;'; put 'put ''PT1hLlNFTEVDVElPTl9UWVBFLk11bHRpKSxmZSgpLHhlKCJuZ0lmIixhLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09YS5TRUxFQ1RJT05fVFlQRS5TaW5nbGUpLGZlKCkseGUoIm5nSWYiLGEucm93QWN0aW9uU2VydmljZS5oYXNBY3Rpb25hYmxlUm93KSxmZSgpLHhlKCJuZ0lmIixhLmds''@;'; put 'put ''b2JhbEV4cGFuZGFibGUuaGFzRXhwYW5kYWJsZVJvdyksZmUoKSx4ZSgibmdJZiIsYS5kZXRhaWxTZXJ2aWNlLmVuYWJsZWQpLGZlKCkseGUoIm5nQ2xhc3MiLG5wKDExLFpWZSxhLnJlcGxhY2VkJiZhLmV4cGFuZGVkKSksZmUoNSkseGUoIm5nSWYiLGEucmVwbGFjZWQmJiFhLmV4cGFuZC5s''@;'; put 'put ''b2FkaW5nKSxmZSgpLHhlKCJuZ0lmIiwhYS5yZXBsYWNlZCYmIWEuZXhwYW5kLmxvYWRpbmcpfX1jb25zdCBnQmU9WyJkYXRhZ3JpZCJdLG1CZT1bImRhdGFncmlkVGFibGUiXSx2QmU9WyJzY3JvbGxhYmxlQ29sdW1ucyJdLGJCZT1bInByb2plY3RlZERpc3BsYXlDb2x1bW5zIl0seUJlPVsi''@;'; put 'put ''cHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5zIl0sX0JlPVsiZGlzcGxheWVkUm93cyJdLHdCZT1bImNhbGN1bGF0aW9uUm93cyJdLENCZT1bW1siY2xyLWRnLWFjdGlvbi1iYXIiXV0sW1siY2xyLWRnLXBsYWNlaG9sZGVyIl1dLFtbImNsci1kZy1mb290ZXIiXV0sW1siIiwiY2xySWZEZXRh''@;'; put 'put ''aWwiLCIiXSxbImNsci1kZy1kZXRhaWwiXV1dLFNCZT1bImNsci1kZy1hY3Rpb24tYmFyIiwiY2xyLWRnLXBsYWNlaG9sZGVyIiwiY2xyLWRnLWZvb3RlciIsIltjbHJJZkRldGFpbF0sY2xyLWRnLWRldGFpbCJdO2Z1bmN0aW9uIE1CZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAs''@;'; put 'put ''ImRpdiIsMjkpKDEsImlucHV0IiwzMCkscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoMik7cmV0dXJuIHZpKGYuYWxsU2VsZWN0ZWQsaCl8fChmLmFsbFNlbGVjdGVkPWgpLEN0KGgpfSksaGUoKSxkZSgyLCJsYWJlbCIsMzEpKDMsInNwYW4iLDMyKSxM''@;'; put 'put ''ZSg0KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9T2UoMik7ZmUoKSx4ZSgiaWQiLGEuc2VsZWN0QWxsSWQpLGZpKCJuZ01vZGVsIixhLmFsbFNlbGVjdGVkKSxkcigiYXJpYS1sYWJlbCIsYS5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0QWxsKSxmZSgpLHhlKCJmb3IiLGEuc2VsZWN0QWxs''@;'; put 'put ''SWQpLGZlKDIpLF9yKGEuY29tbW9uU3RyaW5ncy5rZXlzLnNlbGVjdEFsbCl9fWZ1bmN0aW9uIHhCZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsMjYpLEZ0KCJrZXlkb3duLnNwYWNlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS50b2dnbGVBbGxTZWxl''@;'; put 'put ''Y3RlZChoKSl9KSxndCgxLE1CZSw1LDUsImRpdiIsMjcpLEd0KDIsImRpdiIsMjgpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSx4ZSgibmdJZiIsIWEudmlydHVhbFNjcm9sbCl9fWZ1bmN0aW9uIEVCZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMzMpKDEsImRpdiIsMzIpLExl''@;'; put 'put ''KDIpLGhlKCksR3QoMywiZGl2IiwyOCksaGUoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoMiksX3IoYS5jbHJEZ1NpbmdsZVNlbGVjdGlvbkFyaWFMYWJlbCl9fWZ1bmN0aW9uIFRCZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMzQpKDEsImRpdiIsMzIpLExlKDIpLGhlKCksR3QoMywiZGl2''@;'; put 'put ''IiwyOCksaGUoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoMiksX3IoYS5jbHJEZ1NpbmdsZUFjdGlvbmFibGVBcmlhTGFiZWwpfX1mdW5jdGlvbiBBQmUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDM1KSgxLCJkaXYiLDMyKSxMZSgyKSxoZSgpLEd0KDMsImRpdiIsMjgpLGhlKCkpLDImYyl7''@;'; put 'put ''Y29uc3QgYT1PZSgpO2ZlKDIpLF9yKGEuY2xyRGV0YWlsRXhwYW5kYWJsZUFyaWFMYWJlbCl9fWZ1bmN0aW9uIGtCZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1kZy1yb3ciLDM2KSgxLCJjbHItZGctY2VsbCIpLEd0KDIsImNsci1zcGlubmVyIiwzNyksZGUoMywic3BhbiIpLExlKDQpLGhl''@;'; put 'put ''KCkoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSg0KSxfcihhLmNvbW1vblN0cmluZ3Mua2V5cy5sb2FkaW5nKX19ZnVuY3Rpb24gREJlKGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLWRnLXJvdyIsMzYpKDEsImNsci1kZy1jZWxsIiksR3QoMiwiY2xyLXNwaW5uZXIiLDM3KSxkZSgzLCJzcGFu''@;'; put 'put ''IiksTGUoNCksaGUoKSgpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDQpLF9yKGEuY29tbW9uU3RyaW5ncy5rZXlzLmxvYWRpbmcpfX1mdW5jdGlvbiBJQmUoYyxsKXsxJmMmJkd0KDAsImNsci1kZy1wbGFjZWhvbGRlciIpfWZ1bmN0aW9uIFJCZShjLGwpezEmYyYmKGRlKDAsImRpdiIsMzgp''@;'; put 'put ''KDEsImNsci1zcGlubmVyIiwzNyksTGUoMiwiTG9hZGluZyIpLGhlKCkoKSl9Y29uc3QgT0JlPVsiYWxsU2VsZWN0ZWQiXTtmdW5jdGlvbiBQQmUoYyxsKXt9ZnVuY3Rpb24gRkJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwibGkiKSgxLCJjbHItY2hlY2tib3gtd3JhcHBlciIp''@;'; put 'put ''KDIsImlucHV0IiwxMyksRnQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChPZSgyKS50b2dnbGVDb2x1bW5TdGF0ZShmLCFoKSl9KSxoZSgpLGRlKDMsImxhYmVsIiksZ3QoNCxQQmUsMCwwLCJuZy10ZW1wbGF0ZSIsMTQpLGhl''@;'; put 'put ''KCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPU9lKDIpO2ZlKDIpLHhlKCJkaXNhYmxlZCIsZC5oYXNPbmx5T25lVmlzaWJsZUNvbHVtbiYmIWEuaGlkZGVuKSgibmdNb2RlbCIsIWEuaGlkZGVuKSxmZSgyKSx4ZSgibmdUZW1wbGF0ZU91dGxldCIsYS50aXRsZVRlbXBsYXRl''@;'; put 'put ''UmVmKX19ZnVuY3Rpb24gSEJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2IiwzKSgxLCJkaXYiLDQpKDIsImRpdiIsNSwwKSxMZSg0KSxoZSgpLGRlKDUsImgyIiksTGUoNiksaGUoKSxkZSg3LCJidXR0b24iLDYpLEd0KDgsImNkcy1pY29uIiw3KSxkZSg5LCJzcGFuIiw4''@;'; put 'put ''KSxMZSgxMCksaGUoKSgpKCksZGUoMTEsInVsIiw5KSxndCgxMixGQmUsNSwzLCJsaSIsMTApLGhlKCksZGUoMTMsImRpdiIsMTEpKDE0LCJjbHItZGctY29sdW1uLXRvZ2dsZS1idXR0b24iLDEyKSxGdCgiY2xyQWxsU2VsZWN0ZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCku''@;'; put 'put ''YWxsQ29sdW1uc1NlbGVjdGVkKCkpfSksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPU9lKCk7eGUoImlkIixhLnBvcG92ZXJJZCksZHIoImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLnNob3dDb2x1bW5zTWVudURlc2NyaXB0aW9uKSxmZSg0KSxfcihhLmNvbW1vblN0cmluZ3Mu''@;'; put 'put ''a2V5cy5hbGxDb2x1bW5zU2VsZWN0ZWQpLGZlKDIpLF9yKGEuY29tbW9uU3RyaW5ncy5rZXlzLnNob3dDb2x1bW5zKSxmZSgpLGRyKCJhcmlhLWxhYmVsIixhLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSksZmUoKSxkcigidGl0bGUiLGEuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlKSxmZSgy''@;'; put 'put ''KSxfcihhLmNvbW1vblN0cmluZ3Mua2V5cy5jbG9zZSksZmUoMikseGUoIm5nRm9yT2YiLGEuaGlkZWFibGVDb2x1bW5TdGF0ZXMpKCJuZ0ZvclRyYWNrQnkiLGEudHJhY2tCeUZuKX19Y29uc3QgZDFlPVsidGl0bGUiXSxWQmU9W1tbImNsci1kZy1wYWdpbmF0aW9uIl1dLCIqIl0sQkJlPVsi''@;'; put 'put ''Y2xyLWRnLXBhZ2luYXRpb24iLCIqIl07ZnVuY3Rpb24gakJlKGMsbCl7aWYoMSZjJiYobGkoMCksZGUoMSwiZGl2IiwxKSgyLCJjbHItY2hlY2tib3gtd3JhcHBlciIsMiksR3QoMywiaW5wdXQiLDMpLGRlKDQsImxhYmVsIiksTGUoNSksaGUoKSxkZSg2LCJzcGFuIiw0KSxMZSg3KSxoZSgp''@;'; put 'put ''KCkoKSxjaSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSg1KSxfcihhLnNlbGVjdGlvbi5jdXJyZW50Lmxlbmd0aCksZmUoMiksX3IoYS5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0ZWRSb3dzKX19ZnVuY3Rpb24gekJlKGMsbCl7MSZjJiZHdCgwLCJjbHItZGctY29sdW1uLXRvZ2dsZSIpfWZ1''@;'; put 'put ''bmN0aW9uIFVCZShjLGwpe2lmKDEmYyYmKGxpKDApLGd0KDEsekJlLDEsMCwiY2xyLWRnLWNvbHVtbi10b2dnbGUiLDApLGRlKDIsImRpdiIsNSksV3IoMywxKSxoZSgpLGNpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKCkseGUoIm5nSWYiLGEuaGFzSGlkZWFibGVDb2x1bW5zKX19ZnVuY3Rp''@;'; put 'put ''b24gWkJlKGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiw0KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7eGUoIm5nVmFsdWUiLGEpLGZlKCksX3IoYSl9fWNvbnN0IFdCZT1bImN1cnJlbnRQYWdlSW5wdXQiXSxZQmU9WyIqIixbWyJjbHItZGctcGFnZS1zaXplIl1d''@;'; put 'put ''XSxHQmU9WyIqIiwiY2xyLWRnLXBhZ2Utc2l6ZSJdO2Z1bmN0aW9uICRCZShjLGwpezEmYyYmKGRlKDAsImRpdiIsNiksV3IoMSwxKSxoZSgpKX1mdW5jdGlvbiBLQmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJpbnB1dCIsMTgsMSksRnQoImtleWRvd24uZW50ZXIiLGZ1bmN0''@;'; put 'put ''aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgzKS51cGRhdGVDdXJyZW50UGFnZShoKSl9KSgiYmx1ciIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KE9lKDMpLnZlcmlmeUN1cnJlbnRQYWdlKGgpKX0pLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKDMpO3hlKCJzaXplIixhLnBhZ2UubGFz''@;'; put 'put ''dC50b1N0cmluZygpLmxlbmd0aCkoInZhbHVlIixhLnBhZ2UuY3VycmVudCksZHIoImFyaWEtbGFiZWwiLGEuY29tbW9uU3RyaW5ncy5rZXlzLmN1cnJlbnRQYWdlKX19ZnVuY3Rpb24gcUJlKGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgz''@;'; put 'put ''KTtmZSgpLF9yKGEucGFnZS5jdXJyZW50KX19ZnVuY3Rpb24gWEJlKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2Iiw3KSgxLCJidXR0b24iLDgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikucGFnZS5jdXJyZW50PTEpfSksZGUoMiwic3Bh''@;'; put 'put ''biIsOSksTGUoMyksaGUoKSxHdCg0LCJjZHMtaWNvbiIsMTApLGhlKCksZGUoNSwiYnV0dG9uIiwxMSksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMik7cmV0dXJuIEN0KGgucGFnZS5jdXJyZW50PWgucGFnZS5jdXJyZW50LTEpfSksZGUoNiwic3BhbiIsOSksTGUo''@;'; put 'put ''NyksaGUoKSxHdCg4LCJjZHMtaWNvbiIsMTIpLGhlKCksZ3QoOSxLQmUsMiwzLCJpbnB1dCIsMTMpKDEwLHFCZSwyLDEsIm5nLXRlbXBsYXRlIixudWxsLDAsX3UpLExlKDEyLCIgXHhhMC9ceGEwIiksZGUoMTMsInNwYW4iKSxMZSgxNCksaGUoKSxkZSgxNSwiYnV0dG9uIiwxNCksRnQoImNs''@;'; put 'put ''aWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMik7cmV0dXJuIEN0KGgucGFnZS5jdXJyZW50PWgucGFnZS5jdXJyZW50KzEpfSksZGUoMTYsInNwYW4iLDkpLExlKDE3KSxoZSgpLEd0KDE4LCJjZHMtaWNvbiIsMTUpLGhlKCksZGUoMTksImJ1dHRvbiIsMTYpLEZ0KCJjbGljayIs''@;'; put 'put ''ZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDIpO3JldHVybiBDdChoLnBhZ2UuY3VycmVudD1oLnBhZ2UubGFzdCl9KSxkZSgyMCwic3BhbiIsOSksTGUoMjEpLGhlKCksR3QoMjIsImNkcy1pY29uIiwxNyksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT12bygxMSksZD1PZSgyKTtmZSgpLHhl''@;'; put 'put ''KCJkaXNhYmxlZCIsZC5wYWdlLmN1cnJlbnQ8PTEpLGRyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5maXJzdFBhZ2UpLGZlKDIpLF9yKGQuY29tbW9uU3RyaW5ncy5rZXlzLmZpcnN0UGFnZSksZmUoMikseGUoImRpc2FibGVkIixkLnBhZ2UuY3VycmVudDw9MSksZHIoImFy''@;'; put 'put ''aWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLnByZXZpb3VzUGFnZSksZmUoMiksX3IoZC5jb21tb25TdHJpbmdzLmtleXMucHJldmlvdXNQYWdlKSxmZSgyKSx4ZSgibmdJZiIsIWQuZGlzYWJsZUN1cnJlbnRQYWdlSW5wdXQpKCJuZ0lmRWxzZSIsYSksZmUoNCksZHIoImFyaWEtbGFi''@;'; put 'put ''ZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLnRvdGFsUGFnZXMpLGZlKCksX3IoZC5wYWdlLmxhc3QpLGZlKCkseGUoImRpc2FibGVkIixkLnBhZ2UuY3VycmVudD49ZC5wYWdlLmxhc3QpLGRyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5uZXh0UGFnZSksZmUoMiksX3IoZC5j''@;'; put 'put ''b21tb25TdHJpbmdzLmtleXMubmV4dFBhZ2UpLGZlKDIpLHhlKCJkaXNhYmxlZCIsZC5wYWdlLmN1cnJlbnQ+PWQucGFnZS5sYXN0KSxkcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmdzLmtleXMubGFzdFBhZ2UpLGZlKDIpLF9yKGQuY29tbW9uU3RyaW5ncy5rZXlzLmxhc3RQYWdlKX19''@;'; put 'put ''ZnVuY3Rpb24gSkJlKGMsbCl7aWYoMSZjJiYobGkoMCksZ3QoMSwkQmUsMiwwLCJkaXYiLDMpLGRlKDIsImRpdiIsNCksV3IoMyksaGUoKSxndCg0LFhCZSwyMywxNiwiZGl2Iiw1KSxjaSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLHhlKCJuZ0lmIixhLl9wYWdlU2l6ZUNvbXBvbmVudCks''@;'; put 'put ''ZmUoMykseGUoIm5nSWYiLGEucGFnZS5sYXN0PjEpfX1mdW5jdGlvbiBRQmUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtsaSgwKSxkZSgxLCJkaXYiLDE5KSxMZSgyKSxoZSgpLGRlKDMsImRpdiIsNykoNCwiYnV0dG9uIiwxMSksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0''@;'; put 'put ''IGg9T2UoKTtyZXR1cm4gQ3QoaC5wYWdlLmN1cnJlbnQ9aC5wYWdlLmN1cnJlbnQtMSl9KSxkZSg1LCJzcGFuIiw5KSxMZSg2KSxoZSgpLEd0KDcsImNkcy1pY29uIiwxMiksaGUoKSxkZSg4LCJzcGFuIiksTGUoOSksaGUoKSxkZSgxMCwiYnV0dG9uIiwxNCksRnQoImNsaWNrIixmdW5jdGlv''@;'; put 'put ''bigpe3d0KGEpO2NvbnN0IGg9T2UoKTtyZXR1cm4gQ3QoaC5wYWdlLmN1cnJlbnQ9aC5wYWdlLmN1cnJlbnQrMSl9KSxkZSgxMSwic3BhbiIsOSksTGUoMTIpLGhlKCksR3QoMTMsImNkcy1pY29uIiwxNSksaGUoKSgpLGNpKCl9aWYoMiZjKXtjb25zdCBhPU9lKCk7ZmUoMiksTGYoIiAiLGEu''@;'; put 'put ''cGFnZS5maXJzdEl0ZW0rMSwiLSIsYS5wYWdlLmxhc3RJdGVtKzEsIiAvICIsYS5wYWdlLnRvdGFsSXRlbXMsIiAiKSxmZSgyKSx4ZSgiZGlzYWJsZWQiLGEucGFnZS5jdXJyZW50PD0xKSxkcigiYXJpYS1sYWJlbCIsYS5jb21tb25TdHJpbmdzLmtleXMucHJldmlvdXNQYWdlKSxmZSgyKSxf''@;'; put 'put ''cihhLmNvbW1vblN0cmluZ3Mua2V5cy5wcmV2aW91c1BhZ2UpLGZlKDMpLF9yKGEucGFnZS5jdXJyZW50KSxmZSgpLHhlKCJkaXNhYmxlZCIsYS5wYWdlLmN1cnJlbnQ+PWEucGFnZS5sYXN0KSxkcigiYXJpYS1sYWJlbCIsYS5jb21tb25TdHJpbmdzLmtleXMubmV4dFBhZ2UpLGZlKDIpLF9y''@;'; put 'put ''KGEuY29tbW9uU3RyaW5ncy5rZXlzLm5leHRQYWdlKX19Y29uc3QgcmplPVtbWyJjbHItc3RhY2stbGFiZWwiXV0sIioiLFtbImNsci1zdGFjay1ibG9jayJdXV0saWplPVsiY2xyLXN0YWNrLWxhYmVsIiwiKiIsImNsci1zdGFjay1ibG9jayJdO2Z1bmN0aW9uIG9qZShjLGwpezEmYyYmR3Qo''@;'; put 'put ''MCwiY2RzLWljb24iLDcpLDImYyYmZHIoImRpcmVjdGlvbiIsT2UoKS5jYXJldERpcmVjdGlvbil9ZnVuY3Rpb24gYWplKGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIsOCksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSxfcihhLmNvbW1vblN0cmluZ3Mua2V5cy5zdGFja1Zp''@;'; put 'put ''ZXdDaGFuZ2VkKX19ZnVuY3Rpb24gc2plKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw5KSxXcigxLDIpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO19kKCJoZWlnaHQiLGEuZXhwYW5kZWQ/ImF1dG8iOjApLGRyKCJpZCIsYS5nZXRTdGFja0NoaWxkcmVuSWQoKSkoImFyaWEtbGFiZWxsZWRi''@;'; put 'put ''eSIsYS5sYWJlbGxlZEJ5SWQpfX1jb25zdCBsamU9W1tbImNsci1zdGFjay1oZWFkZXIiXV0sIioiXSxjamU9WyJjbHItc3RhY2staGVhZGVyIiwiKiJdO2Z1bmN0aW9uIGhqZShjLGwpezEmYyYmWGwoMCl9ZnVuY3Rpb24gZmplKGMsbCl7aWYoMSZjJiYobGkoMCksZ3QoMSxoamUsMSwwLCJu''@;'; put 'put ''Zy1jb250YWluZXIiLDIpLGNpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPU9lKDIpO2ZlKCkseGUoIm5nVGVtcGxhdGVPdXRsZXQiLGQuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbi50ZW1wbGF0ZSkoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixkLmdldENvbnRleHQoYSkpfX1m''@;'; put 'put ''dW5jdGlvbiBwamUoYyxsKXtpZigxJmMmJihsaSgwKSxndCgxLGZqZSwyLDIsIm5nLWNvbnRhaW5lciIsMSksY2koKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSx4ZSgibmdGb3JPZiIsKG51bGw9PWEucGFyZW50P251bGw6YS5wYXJlbnQuY2hpbGRyZW4pfHxhLmNoaWxkcmVuKX19Y29uc3Qg''@;'; put 'put ''Z2plPVsiY29udGVudENvbnRhaW5lciJdLG1qZT1bW1siY2xyLXRyZWUtbm9kZSJdXSxbWyIiLCJjbHJJZkV4cGFuZGVkIiwiIl1dLCIqIl0sdmplPVsiY2xyLXRyZWUtbm9kZSIsIltjbHJJZkV4cGFuZGVkXSIsIioiXTtmdW5jdGlvbiBiamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtk''@;'; put 'put ''ZSgwLCJidXR0b24iLDkpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5leHBhbmRTZXJ2aWNlLnRvZ2dsZSgpKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5mb2N1c1RyZWVOb2RlKCkpfSksR3QoMSwiY2RzLWljb24iLDEwKSxo''@;'; put 'put ''ZSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpO3hlKCJkaXNhYmxlZCIsYS5kaXNhYmxlZCksZmUoKSxkcigiZGlyZWN0aW9uIixhLmV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ/ImRvd24iOiJyaWdodCIpfX1mdW5jdGlvbiB5amUoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDExKSxHdCgxLCJzcGFuIiwx''@;'; put 'put ''MiksaGUoKSl9ZnVuY3Rpb24gX2plKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2IiwxMykoMSwiaW5wdXQiLDE0KSxGdCgiY2hhbmdlIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKTtyZXR1cm4gQ3QoaC5fbW9kZWwudG9nZ2xlU2VsZWN0aW9uKGguZmVhdHVyZXNT''@;'; put 'put ''ZXJ2aWNlLmVhZ2VyKSl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuZm9jdXNUcmVlTm9kZSgpKX0pLGhlKCksZGUoMiwibGFiZWwiLDE1KSxYbCgzLDE2KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPU9lKCksZD12byg3KTtmZSgpLHhlKCJpZCIsYS5ub2RlSWQr''@;'; put 'put ''Ii1jaGVjayIpKCJkaXNhYmxlZCIsYS5kaXNhYmxlZCkoImNoZWNrZWQiLGEuX21vZGVsLnNlbGVjdGVkLnZhbHVlPT09YS5TVEFURVMuU0VMRUNURUQpKCJpbmRldGVybWluYXRlIixhLl9tb2RlbC5zZWxlY3RlZC52YWx1ZT09PWEuU1RBVEVTLklOREVURVJNSU5BVEUpLGZlKCkseGUoImZv''@;'; put 'put ''ciIsYS5ub2RlSWQrIi1jaGVjayIpLGZlKCkseGUoIm5nVGVtcGxhdGVPdXRsZXQiLGQpfX1mdW5jdGlvbiB3amUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDE3KSxGdCgibW91c2V1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5mb2N1c1RyZWVOb2Rl''@;'; put 'put ''KCkpfSksWGwoMSwxNiksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoKSxkPXZvKDcpO3hyKCJjbHItdHJlZW5vZGUtdGV4dC1vbmx5IixhLnRyZWVOb2RlQ29udGVudFRleHRPbmx5KSxmZSgpLHhlKCJuZ1RlbXBsYXRlT3V0bGV0IixkKX19ZnVuY3Rpb24gQ2plKGMsbCl7aWYoMSZjJiYoZGUo''@;'; put 'put ''MCwiZGl2IiwxOSkoMSwic3BhbiIpLExlKDIpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDIpLFJyKCIgIixhLmFyaWFTZWxlY3RlZD9hLmNvbW1vblN0cmluZ3Mua2V5cy5zZWxlY3RlZFRyZWVOb2RlOmEuY29tbW9uU3RyaW5ncy5rZXlzLnVuc2VsZWN0ZWRUcmVlTm9kZSwiIil9''@;'; put 'put ''fWZ1bmN0aW9uIFNqZShjLGwpe2lmKDEmYyYmKFdyKDAsMiksZ3QoMSxDamUsMywxLCJkaXYiLDE4KSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSx4ZSgibmdJZiIsYS5mZWF0dXJlc1NlcnZpY2Uuc2VsZWN0YWJsZXx8YS5hcmlhU2VsZWN0ZWQpfX1mdW5jdGlvbiBNamUoYyxsKXsxJmMmJkd0''@;'; put 'put ''KDAsImNsci1yZWN1cnNpdmUtY2hpbGRyZW4iLDEpLDImYyYmeGUoImNoaWxkcmVuIixPZSgpLmZlYXR1cmVzU2VydmljZS5yZWN1cnNpb24ucm9vdCl9ZnVuY3Rpb24geGplKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiYnV0dG9uIiw0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHd0KGEpLEN0KE9lKDIpLmNsb3NlKCkpfSksR3QoMSwiY2RzLWljb24iLDUpLGhlKCl9MiZjJiZkcigiYXJpYS1sYWJlbCIsT2UoMikuY2xyQ2xvc2VCdXR0b25BcmlhTGFiZWwpfWZ1bmN0aW9uIEVqZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMSkoMSwiZGl2IiwyKSxXcigy''@;'; put 'put ''KSxoZSgpLGd0KDMseGplLDIsMSwiYnV0dG9uIiwzKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTt4cigiYWxlcnQtc20iLGEuaXNTbWFsbCkoImFsZXJ0LWxpZ2h0d2VpZ2h0IixhLmlzTGlnaHR3ZWlnaHQpKCJhbGVydC1hcHAtbGV2ZWwiLGEuaXNBcHBMZXZlbCkseGUoIm5nQ2xhc3MiLGEu''@;'; put 'put ''YWxlcnRDbGFzcyksZmUoMykseGUoIm5nSWYiLGEuY2xvc2FibGUpfX1mdW5jdGlvbiBUamUoYyxsKXsxJmMmJkd0KDAsImNsci1zcGlubmVyIiwzKX1mdW5jdGlvbiBBamUoYyxsKXtpZigxJmMmJkd0KDAsImNkcy1pY29uIiw0KSwyJmMpe2NvbnN0IGE9T2UoKTtkcigic2hhcGUiLGEuaWNv''@;'; put 'put ''blNlcnZpY2UuYWxlcnRJY29uU2hhcGUpKCJhcmlhLWxhYmVsIixhLmljb25TZXJ2aWNlLmFsZXJ0SWNvblRpdGxlKX19Y29uc3Qga2plPVtbWyJjbHItYWxlcnQiXV1dLERqZT1bImNsci1hbGVydCJdO2Z1bmN0aW9uIElqZShjLGwpezEmYyYmR3QoMCwiY2xyLWFsZXJ0cy1wYWdlciIsMiks''@;'; put 'put ''MiZjJiZ4ZSgiY2xyQ3VycmVudEFsZXJ0SW5kZXgiLE9lKCkuY3VycmVudEFsZXJ0SW5kZXgpfWNvbnN0IFJqZT1bImJvZHkiXSxMamU9W1tbIiIsOCwibW9kYWwtbmF2Il1dLFtbIiIsOCwibGVhZGluZy1idXR0b24iXV0sW1siIiw4LCJtb2RhbC10aXRsZSJdXSxbWyIiLDgsIm1vZGFsLWJv''@;'; put 'put ''ZHkiXV0sW1siIiw4LCJtb2RhbC1mb290ZXIiXV1dLE9qZT1bIi5tb2RhbC1uYXYiLCIubGVhZGluZy1idXR0b24iLCIubW9kYWwtdGl0bGUiLCIubW9kYWwtYm9keSIsIi5tb2RhbC1mb290ZXIiXTtmdW5jdGlvbiBQamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJidXR0b24i''@;'; put 'put ''LDEzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDIpLmNsb3NlKCkpfSksR3QoMSwiY2RzLWljb24iLDE0KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1PZSgyKTtkcigiYXJpYS1sYWJlbCIsYS5jbG9zZUJ1dHRvbkFyaWFMYWJlbHx8YS5jb21tb25TdHJpbmdzLmtl''@;'; put 'put ''eXMuY2xvc2UpfX1mdW5jdGlvbiBGamUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDQpKDEsImRpdiIsNSksRnQoIkBmYWRlTW92ZS5kb25lIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5mYWRlRG9uZShoKSl9KSxkZSgyLCJkaXYiLDYpLExlKDMpLGhl''@;'; put 'put ''KCksZGUoNCwiZGl2Iiw3KSxXcig1KSxkZSg2LCJkaXYiLDgpKDcsImRpdiIsOSksV3IoOCwxKSxkZSg5LCJkaXYiLDEwLDApLFdyKDExLDIpLGhlKCksZ3QoMTIsUGplLDIsMSwiYnV0dG9uIiwxMSksaGUoKSxkZSgxMywiZGl2IiwxMiwxKSxXcigxNSwzKSxoZSgpLFdyKDE2LDQpLGhlKCko''@;'; put 'put ''KSxkZSgxNywiZGl2Iiw2KSxMZSgxOCksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPU9lKCk7eHIoIm1vZGFsLWZ1bGwtc2NyZWVuIiwiZnVsbC1zY3JlZW4iPT1hLnNpemUpLGZlKCkseHIoIm1vZGFsLXNtIiwic20iPT1hLnNpemUpKCJtb2RhbC1sZyIsImxnIj09YS5zaXplKSgibW9kYWwt''@;'; put 'put ''eGwiLCJ4bCI9PWEuc2l6ZSkseGUoImNka1RyYXBGb2N1c0F1dG9DYXB0dXJlIiwhMCkoIkBmYWRlTW92ZSIsYS5mYWRlTW92ZSksZHIoImFyaWEtaGlkZGVuIiwhYS5fb3BlbikoImFyaWEtbGFiZWxsZWRieSIsYS5sYWJlbGxlZEJ5fHxhLm1vZGFsSWQpLGZlKDIpLF9yKGEuY29tbW9uU3Ry''@;'; put 'put ''aW5ncy5rZXlzLm1vZGFsQ29udGVudFN0YXJ0KSxmZSg2KSx4ZSgiaWQiLGEubW9kYWxJZCksZmUoMykseGUoIm5nSWYiLGEuY2xvc2FibGUpLGZlKDYpLF9yKGEuY29tbW9uU3RyaW5ncy5rZXlzLm1vZGFsQ29udGVudEVuZCl9fWZ1bmN0aW9uIEhqZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1P''@;'; put 'put ''bigpO2RlKDAsImRpdiIsMTUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5iYWNrZHJvcENsaWNrKCkpfSksaGUoKX0yJmMmJnhlKCJAZmFkZSIsdm9pZCAwKX1sZXQgT2w9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3Jl''@;'; put 'put ''dHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1pY29uIl1dfSksY30pKCksY3M9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2Vs''@;'; put 'put ''ZWN0b3JzOltbImNkcy1pY29uIl1dfSksY30pKCksVHM9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTG9dfSksY30pKCk7Y2xhc3Mg''@;'; put 'put ''QXh7fXZhciBVMT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLkRFRkFVTFQ9MF09IkRFRkFVTFQiLGNbYy5MT0FESU5HPTFdPSJMT0FESU5HIixjW2MuU1VDQ0VTUz0yXT0iU1VDQ0VTUyIsY1tjLkVSUk9SPTNdPSJFUlJPUiIsY30oVTF8fHt9KTtsZXQgQjA9KCgpPT57Y2xhc3MgY3tjb25zdHJ1''@;'; put 'put ''Y3RvcihhKXt0aGlzLmxpc3RlbmVyPWEsdGhpcy5fbG9hZGluZ1N0YXRlPVUxLkRFRkFVTFR9Z2V0IGxvYWRpbmdTdGF0ZSgpe3JldHVybiB0aGlzLl9sb2FkaW5nU3RhdGV9c2V0IGxvYWRpbmdTdGF0ZShhKXshMD09PWE/YT1VMS5MT0FESU5HOmF8fChhPVUxLkRFRkFVTFQpLGEhPT10aGlz''@;'; put 'put ''Ll9sb2FkaW5nU3RhdGUmJih0aGlzLl9sb2FkaW5nU3RhdGU9YSx0aGlzLmxpc3RlbmVyJiZ0aGlzLmxpc3RlbmVyLmxvYWRpbmdTdGF0ZUNoYW5nZShhKSl9bmdPbkRlc3Ryb3koKXt0aGlzLmxvYWRpbmdTdGF0ZT1VMS5ERUZBVUxUfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7''@;'; put 'put ''cmV0dXJuIG5ldyhhfHxjKShHZShBeCw4KSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckxvYWRpbmciLCIiXV0saW5wdXRzOntsb2FkaW5nU3RhdGU6W1puLk5vbmUsImNsckxvYWRpbmciLCJsb2FkaW5nU3RhdGUiXX19KSxjfSkoKSxaMT0oKCk9PntjbGFz''@;'; put 'put ''cyBje2NvbnN0cnVjdG9yKCl7dGhpcy5leHBhbmRhYmxlPTAsdGhpcy5oYXNFeHBhbmRUZW1wbGF0ZT0hMSx0aGlzLl9sb2FkaW5nPSExLHRoaXMuX2V4cGFuZGVkPSExLHRoaXMuX2V4cGFuZENoYW5nZT1uZXcgV259Z2V0IGxvYWRpbmcoKXtyZXR1cm4gdGhpcy5fbG9hZGluZ31zZXQgbG9h''@;'; put 'put ''ZGluZyhhKXsoYT0hIWEpIT09dGhpcy5fbG9hZGluZyYmKHRoaXMuX2xvYWRpbmc9YSl9Z2V0IGV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuX2V4cGFuZGVkfXNldCBleHBhbmRlZChhKXsoYT0hIWEpIT09dGhpcy5fZXhwYW5kZWQmJih0aGlzLl9leHBhbmRlZD1hLHRoaXMuX2V4cGFuZENoYW5n''@;'; put 'put ''ZS5uZXh0KGEpKX1nZXQgZXhwYW5kQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2V4cGFuZENoYW5nZS5hc09ic2VydmFibGUoKX10b2dnbGUoKXt0aGlzLmV4cGFuZGVkPSF0aGlzLl9leHBhbmRlZH1sb2FkaW5nU3RhdGVDaGFuZ2UoYSl7dGhpcy5sb2FkaW5nPWE9PT1VMS5MT0FESU5HfX1yZXR1''@;'; put 'put ''cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxsemU9MDtmdW5jdGlvbiBTdSgpe3JldHVybiJjbHItaWQtIitsemUrK31sZXQgaDFlPSgoKT0+e2NsYXNzIGN7fXJl''@;'; put 'put ''dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uIl0sWyJjbHItc3RlcC1kZXNjcmlwdGlvbiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5j''@;'; put 'put ''dGlvbihhLGQpezImYSYmeHIoImNsci1hY2NvcmRpb24tZGVzY3JpcHRpb24iLCEwKX0sbmdDb250ZW50U2VsZWN0b3JzOnlhLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobG8oKSxXcigwKSl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0p''@;'; put 'put ''LGN9KSgpO2NvbnN0IFdmPSIwLjJzIGVhc2UtaW4tb3V0IixjemU9W21oKCJza2lwSW5pdGlhbFJlbmRlciIsW3J1KCI6ZW50ZXIiLFtdKV0pLG1oKCJ0b2dnbGUiLFtydSgidm9pZCA9PiAqIixbbHMoe2Rpc3BsYXk6ImJsb2NrIixoZWlnaHQ6MH0pLHgwKFdmLGxzKHtoZWlnaHQ6IioifSkp''@;'; put 'put ''XSldKV0sYlk9KG1oKCJza2lwSW5pdGlhbFJlbmRlciIsW3J1KCI6ZW50ZXIiLFtdKV0pLG1oKCJ0b2dnbGUiLFtydSgidm9pZCA9PiAqIixbbHMoe2Rpc3BsYXk6ImJsb2NrIixoZWlnaHQ6MH0pLHgwKFdmLGxzKHtoZWlnaHQ6IioifSkpXSkscnUoIiogPT4gdm9pZCIsW2xzKHtkaXNwbGF5''@;'; put 'put ''OiJibG9jayJ9KSx4MChXZixscyh7aGVpZ2h0OjAsZGlzcGxheToibm9uZSJ9KSldKV0pLHtvcGVuOiJPcGVuIixjbG9zZToiQ2xvc2UiLHNob3c6IlNob3ciLGhpZGU6IkhpZGUiLGFwcGx5OiJBcHBseSIsY2FuY2VsOiJDYW5jZWwiLGV4cGFuZDoiRXhwYW5kIixjb2xsYXBzZToiQ29sbGFw''@;'; put 'put ''c2UiLG1vcmU6Ik1vcmUiLHNlbGVjdDoiU2VsZWN0IixzZWxlY3RBbGw6IlNlbGVjdCBBbGwiLHByZXZpb3VzOiJQcmV2aW91cyIsbmV4dDoiTmV4dCIsY3VycmVudDoiSnVtcCB0byBjdXJyZW50IixpbmZvOiJJbmZvIixzdWNjZXNzOiJTdWNjZXNzIix3YXJuaW5nOiJXYXJuaW5nIixkYW5n''@;'; put 'put ''ZXI6IkVycm9yIixuZXV0cmFsOiJOZXV0cmFsIix1bmtub3duOiJVbmtub3duIixyb3dBY3Rpb25zOiJBdmFpbGFibGUgYWN0aW9ucyIscGlja0NvbHVtbnM6Ik1hbmFnZSBDb2x1bW5zIixzaG93Q29sdW1uczoiU2hvdyBDb2x1bW5zIixzb3J0Q29sdW1uOiJTb3J0IENvbHVtbiIsZmlyc3RQ''@;'; put 'put ''YWdlOiJGaXJzdCBQYWdlIixsYXN0UGFnZToiTGFzdCBQYWdlIixuZXh0UGFnZToiTmV4dCBQYWdlIixwcmV2aW91c1BhZ2U6IlByZXZpb3VzIFBhZ2UiLGN1cnJlbnRQYWdlOiJDdXJyZW50IFBhZ2UiLHRvdGFsUGFnZXM6IlRvdGFsIFBhZ2VzIixmaWx0ZXJJdGVtczoiRmlsdGVyIGl0ZW1z''@;'; put 'put ''IixtaW5WYWx1ZToiTWluIHZhbHVlIixtYXhWYWx1ZToiTWF4IHZhbHVlIixtb2RhbENvbnRlbnRTdGFydDoiQmVnaW5uaW5nIG9mIE1vZGFsIENvbnRlbnQiLG1vZGFsQ29udGVudEVuZDoiRW5kIG9mIE1vZGFsIENvbnRlbnQiLHNpZGVQYW5lbFBpbjoiUGluIFNpZGUgUGFuZWwiLHNob3dD''@;'; put 'put ''b2x1bW5zTWVudURlc2NyaXB0aW9uOiJTaG93IG9yIGhpZGUgY29sdW1ucyBtZW51IixhbGxDb2x1bW5zU2VsZWN0ZWQ6IkFsbCBjb2x1bW5zIHNlbGVjdGVkIixzaWducG9zdFRvZ2dsZToiU2lnbnBvc3QgVG9nZ2xlIixzaWducG9zdENsb3NlOiJDbG9zZSIsbG9hZGluZzoiTG9hZGluZyIs''@;'; put 'put ''ZGV0YWlsUGFuZVN0YXJ0OiJTdGFydCBvZiByb3cgZGV0YWlscyIsZGV0YWlsUGFuZUVuZDoiRW5kIG9mIHJvdyBkZXRhaWxzIixzaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWw6IlNpbmdsZSBzZWxlY3Rpb24gaGVhZGVyIixzaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsOiJTaW5nbGUgYWN0aW9u''@;'; put 'put ''YWJsZSBoZWFkZXIiLGRldGFpbEV4cGFuZGFibGVBcmlhTGFiZWw6IlRvZ2dsZSBtb3JlIHJvdyBjb250ZW50IixkYXRhZ3JpZEZpbHRlckFyaWFMYWJlbDoie0NPTFVNTn0gZmlsdGVyIixkYXRhZ3JpZEZpbHRlckxhYmVsOiJ7Q09MVU1OfSBmaWx0ZXIiLGRhdGFncmlkRmlsdGVyRGlhbG9n''@;'; put 'put ''QXJpYUxhYmVsOiJGaWx0ZXIgZGlhbG9nIixjb2x1bW5TZXBhcmF0b3JBcmlhTGFiZWw6IkNvbHVtbiByZXNpemUgaGFuZGxlIixjb2x1bW5TZXBhcmF0b3JEZXNjcmlwdGlvbjoiVXNlIGxlZnQgb3IgcmlnaHQga2V5IHRvIHJlc2l6ZSB0aGUgY29sdW1uIixmcm9tTGFiZWw6IkZyb20iLHRv''@;'; put 'put ''TGFiZWw6IlRvIixhbGVydENsb3NlQnV0dG9uQXJpYUxhYmVsOiJDbG9zZSBhbGVydCIsYWxlcnROZXh0QWxlcnRBcmlhTGFiZWw6Ik5leHQgYWxlcnQgbWVzc2FnZSwge0NVUlJFTlR9IG9mIHtDT1VOVH0iLGFsZXJ0UHJldmlvdXNBbGVydEFyaWFMYWJlbDoiUHJldmlvdXMgYWxlcnQgbWVz''@;'; put 'put ''c2FnZSwge0NVUlJFTlR9IG9mIHtDT1VOVH0iLGRhdGVwaWNrZXJEaWFsb2dMYWJlbDoiQ2hvb3NlIGRhdGUiLGRhdGVwaWNrZXJUb2dnbGVDaG9vc2VEYXRlTGFiZWw6IkNob29zZSBkYXRlIixkYXRlcGlja2VyVG9nZ2xlQ2hhbmdlRGF0ZUxhYmVsOiJDaGFuZ2UgZGF0ZSwge1NFTEVDVEVE''@;'; put 'put ''X0RBVEV9IixkYXRlcGlja2VyUHJldmlvdXNNb250aDoiUHJldmlvdXMgbW9udGgiLGRhdGVwaWNrZXJDdXJyZW50TW9udGg6IkN1cnJlbnQgbW9udGgiLGRhdGVwaWNrZXJOZXh0TW9udGg6Ik5leHQgbW9udGgiLGRhdGVwaWNrZXJQcmV2aW91c0RlY2FkZToiUHJldmlvdXMgZGVjYWRlIixk''@;'; put 'put ''YXRlcGlja2VyTmV4dERlY2FkZToiTmV4dCBkZWNhZGUiLGRhdGVwaWNrZXJDdXJyZW50RGVjYWRlOiJDdXJyZW50IGRlY2FkZSIsZGF0ZXBpY2tlclNlbGVjdE1vbnRoVGV4dDoiU2VsZWN0IG1vbnRoLCB0aGUgY3VycmVudCBtb250aCBpcyB7Q0FMRU5EQVJfTU9OVEh9IixkYXRlcGlja2Vy''@;'; put 'put ''U2VsZWN0WWVhclRleHQ6IlNlbGVjdCB5ZWFyLCB0aGUgY3VycmVudCB5ZWFyIGlzIHtDQUxFTkRBUl9ZRUFSfSIsZGF0ZXBpY2tlclNlbGVjdGVkTGFiZWw6IntGVUxMX0RBVEV9IC0gU2VsZWN0ZWQiLHN0YWNrVmlld0NoYW5nZWQ6IlZhbHVlIGNoYW5nZWQuIixyZXNwb25zaXZlTmF2VG9n''@;'; put 'put ''Z2xlT3BlbjoiT3BlbiBuYXZpZ2F0aW9uIG1lbnUiLHJlc3BvbnNpdmVOYXZUb2dnbGVDbG9zZToiQ2xvc2UgbmF2aWdhdGlvbiBtZW51IixyZXNwb25zaXZlTmF2T3ZlcmZsb3dPcGVuOiJPcGVuIG5hdmlnYXRpb24gb3ZlcmZsb3cgbWVudSIscmVzcG9uc2l2ZU5hdk92ZXJmbG93Q2xvc2U6''@;'; put 'put ''IkNsb3NlIG5hdmlnYXRpb24gb3ZlcmZsb3cgbWVudSIsdmVydGljYWxOYXZUb2dnbGU6IlRvZ2dsZSB2ZXJ0aWNhbCBuYXZpZ2F0aW9uIix0aW1lbGluZVN0ZXBOb3RTdGFydGVkOiJOb3Qgc3RhcnRlZCIsdGltZWxpbmVTdGVwQ3VycmVudDoiQ3VycmVudCIsdGltZWxpbmVTdGVwU3VjY2Vz''@;'; put 'put ''czoiQ29tcGxldGVkIix0aW1lbGluZVN0ZXBFcnJvcjoiRXJyb3IiLHRpbWVsaW5lU3RlcFByb2Nlc3Npbmc6IkluIHByb2dyZXNzIixjb21ib2JveERlbGV0ZToiRGVsZXRlIHNlbGVjdGVkIG9wdGlvbiIsY29tYm9ib3hTZWFyY2hpbmc6J1NlYXJjaGluZyBmb3IgbWF0Y2hlcyBmb3IgIntJ''@;'; put 'put ''TlBVVH0iJyxjb21ib2JveFNlbGVjdGlvbjoiU2VsZWN0aW9uIixjb21ib2JveFNlbGVjdGVkOiJTZWxlY3RlZCIsY29tYm9ib3hOb1Jlc3VsdHM6Ik5vIHJlc3VsdHMiLGNvbWJvYm94T3BlbjoiU2hvdyBvcHRpb25zIixkYXRhZ3JpZEV4cGFuZGFibGVCZWdpbm5pbmdPZjoiQmVnaW5uaW5n''@;'; put 'put ''IG9mIixkYXRhZ3JpZEV4cGFuZGFibGVFbmRPZjoiRW5kIG9mIixkYXRhZ3JpZEV4cGFuZGFibGVSb3dDb250ZW50OiJFeHBhbmRhYmxlIHJvdyBjb250ZW50IixkYXRhZ3JpZEV4cGFuZGFibGVSb3dzSGVscGVyVGV4dDoiU2NyZWVuIHJlYWRlciB0YWJsZSBjb21tYW5kcyBtYXkgbm90IHdv''@;'; put 'put ''cmsgZm9yIHZpZXdpbmcgZXhwYW5kZWQgY29udGVudCwgcGxlYXNlIHVzZSB5b3VyIHNjcmVlbiByZWFkZXIncyBicm93c2UgbW9kZSB0byByZWFkIHRoZSBjb250ZW50IGV4cG9zZWQgYnkgdGhpcyBidXR0b24iLHdpemFyZFN0ZXA6IlN0ZXAiLHdpemFyZFN0ZXBTdWNjZXNzOiJDb21wbGV0''@;'; put 'put ''ZWQiLHdpemFyZFN0ZXBFcnJvcjoiRXJyb3IiLHdpemFyZFN0ZXBuYXZBcmlhTGFiZWw6IldpemFyZCBzdGVwcyIscGFzc3dvcmRIaWRlOiJIaWRlIHBhc3N3b3JkIGZvciB7TEFCRUx9IixwYXNzd29yZFNob3c6IlNob3cgcGFzc3dvcmQgZm9yIHtMQUJFTH0iLHNlbGVjdGVkUm93czoiU2Vs''@;'; put 'put ''ZWN0ZWQgcm93cyIsc3RlcENvbXBsZXRlOiJTdGVwIHtTVEVQfSBjb21wbGV0ZSIsc3RlcEVycm9yOiJFcnJvciBpbiBzdGVwIHtTVEVQfSIsYnJvd3NlOiJCcm93c2UiLGZpbGVDb3VudDoie0NPVU5UfSBmaWxlcyIsY2xlYXJGaWxlOiJDbGVhciB7RklMRX0iLGNsZWFyRmlsZXM6IkNsZWFy''@;'; put 'put ''IHtDT1VOVH0gZmlsZXMiLHNlbGVjdGVkVHJlZU5vZGU6InNlbGVjdGVkIix1bnNlbGVjdGVkVHJlZU5vZGU6InVuc2VsZWN0ZWQiLGJyZWFkY3J1bWJzTGFiZWw6ImJyZWFkY3J1bWJzIixleHBhbmRCcmVhZGNydW1ic0xhYmVsOiJFeHBhbmQgYnJlYWRjcnVtYnMifSk7bGV0IHRzPSgoKT0+''@;'; put 'put ''e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9zdHJpbmdzPWJZfWdldCBrZXlzKCl7cmV0dXJuIHRoaXMuX3N0cmluZ3N9bG9jYWxpemUoYSl7dGhpcy5fc3RyaW5ncz17Li4udGhpcy5fc3RyaW5ncywuLi5hfX1wYXJzZShhLGQ9e30pe2NvbnN0IGg9T2JqZWN0LmtleXMoZCk7bGV0IGY9''@;'; put 'put ''YTtyZXR1cm4gaC5sZW5ndGgmJmguZm9yRWFjaCh2PT57Zj1mLnJlcGxhY2UoYHske3Z9fWAsZFt2XSl9KSxmfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlk''@;'; put 'put ''ZWRJbjoicm9vdCJ9KSxjfSkoKTt2YXIgWWY9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuSW5hY3RpdmU9ImluYWN0aXZlIixjLkVycm9yPSJlcnJvciIsYy5Db21wbGV0ZT0iY29tcGxldGUiLGN9KFlmfHx7fSksa3g9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuRGVmYXVsdD0iZGVmYXVsdCIsYy5NdWx0''@;'; put 'put ''aT0ibXVsdGkiLGN9KGt4fHx7fSk7bGV0IGR6ZT0wO2NsYXNzIGh6ZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuaWQ9bCx0aGlzLmFjY29yZGlvbklkPWEsdGhpcy5zdGF0dXM9WWYuSW5hY3RpdmUsdGhpcy5pbmRleD1udWxsLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5vcGVuPSExLHRoaXMudGVt''@;'; put 'put ''cGxhdGVJZD1gJHt0aGlzLmlkfS0ke3RoaXMuYWNjb3JkaW9uSWR9YH19Y2xhc3MgZjFle2NvbnN0cnVjdG9yKCl7dGhpcy5zdHJhdGVneT1reC5EZWZhdWx0LHRoaXMuYWNjb3JkaW9uQ291bnQ9ZHplKyssdGhpcy5fcGFuZWxzPXt9fWdldCBwYW5lbHMoKXtyZXR1cm4gT2JqZWN0LmtleXMo''@;'; put 'put ''dGhpcy5fcGFuZWxzKS5tYXAobD0+dGhpcy5fcGFuZWxzW2xdKX1zZXRTdHJhdGVneShsKXt0aGlzLnN0cmF0ZWd5PWx9dXBkYXRlUGFuZWxPcmRlcihsKXtsLmZvckVhY2goKGEsZCk9PnRoaXMuX3BhbmVsc1thXS5pbmRleD1kKSx0aGlzLnJlbW92ZU9sZFBhbmVscyhsKX1hZGRQYW5lbChs''@;'; put 'put ''LGE9ITEpe3RoaXMuX3BhbmVsc1tsXT1uZXcgaHplKGwsdGhpcy5hY2NvcmRpb25Db3VudCksdGhpcy5fcGFuZWxzW2xdLm9wZW49YX10b2dnbGVQYW5lbChsLGEpe2NvbnN0IGg9dm9pZCAwIT09YT9hOiF0aGlzLl9wYW5lbHNbbF0ub3BlbjtoJiZ0aGlzLnN0cmF0ZWd5PT09a3guRGVmYXVs''@;'; put 'put ''dCYmdGhpcy5jbG9zZUFsbFBhbmVscygpLHRoaXMuX3BhbmVsc1tsXS5vcGVuPWh9ZGlzYWJsZVBhbmVsKGwsYSl7dGhpcy5fcGFuZWxzW2xdLmRpc2FibGVkPWF9Y2xvc2VBbGxQYW5lbHMoKXt0aGlzLnBhbmVscy5mb3JFYWNoKGw9PnRoaXMuX3BhbmVsc1tsLmlkXS5vcGVuPSExKX1yZW1v''@;'; put 'put ''dmVPbGRQYW5lbHMobCl7dGhpcy5wYW5lbHMuZmlsdGVyKGE9PnZvaWQgMD09PWwuZmluZChkPT5kPT09YS5pZCkpLmZvckVhY2goYT0+ZGVsZXRlIHRoaXMuX3BhbmVsc1thLmlkXSl9fWxldCBEeD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5hY2NvcmRpb249bmV3IGYxZSx0''@;'; put 'put ''aGlzLl9wYW5lbHNDaGFuZ2VzPW5ldyBRcih0aGlzLmFjY29yZGlvbi5wYW5lbHMpfWdldFBhbmVsQ2hhbmdlcyhhKXtyZXR1cm4gdGhpcy5fcGFuZWxzQ2hhbmdlcy5waXBlKE9yKGQ9PmQuZmluZChoPT5oLmlkPT09YSkpKX1zZXRTdHJhdGVneShhKXt0aGlzLmFjY29yZGlvbi5zZXRTdHJh''@;'; put 'put ''dGVneShhKX1hZGRQYW5lbChhLGQ9ITEpe3RoaXMuYWNjb3JkaW9uLmFkZFBhbmVsKGEsZCksdGhpcy5lbWl0VXBkYXRlZFBhbmVscygpfXRvZ2dsZVBhbmVsKGEsZCl7dGhpcy5hY2NvcmRpb24udG9nZ2xlUGFuZWwoYSxkKSx0aGlzLmVtaXRVcGRhdGVkUGFuZWxzKCl9ZGlzYWJsZVBhbmVs''@;'; put 'put ''KGEsZCl7dGhpcy5hY2NvcmRpb24uZGlzYWJsZVBhbmVsKGEsZCksdGhpcy5lbWl0VXBkYXRlZFBhbmVscygpfXVwZGF0ZVBhbmVsT3JkZXIoYSl7dGhpcy5hY2NvcmRpb24udXBkYXRlUGFuZWxPcmRlcihhKSx0aGlzLmVtaXRVcGRhdGVkUGFuZWxzKCl9ZW1pdFVwZGF0ZWRQYW5lbHMoKXt0''@;'; put 'put ''aGlzLl9wYW5lbHNDaGFuZ2VzLm5leHQodGhpcy5hY2NvcmRpb24ucGFuZWxzKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksa0w9KCgpPT57Y2xhc3Mg''@;'; put 'put ''Y3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMucGFyZW50PWEsdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5hY2NvcmRpb25TZXJ2aWNlPWgsdGhpcy5pZkV4cGFuZFNlcnZpY2U9Zix0aGlzLmNkcj12LHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy5wYW5lbE9wZW49ITEsdGhpcy5oZWFkaW5n''@;'; put 'put ''RW5hYmxlZD0hMSx0aGlzLnBhbmVsT3BlbkNoYW5nZT1uZXcgcXIsdGhpcy5faWQ9U3UoKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGEpe3RoaXMuX2lkPWF9Z2V0IHBhbmVsTnVtYmVyKCl7cmV0dXJuIHRoaXMuX3BhbmVsSW5kZXgrMX1nZXQgaGVhZGluZ0xldmVsKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuZXhwbGljaXRIZWFkaW5nTGV2ZWw/dGhpcy5leHBsaWNpdEhlYWRpbmdMZXZlbDp0aGlzLnBhcmVudD80OjN9bmdPbkluaXQoKXt0aGlzLnBhbmVsPXRoaXMuYWNjb3JkaW9uU2VydmljZS5nZXRQYW5lbENoYW5nZXModGhpcy5pZCkucGlwZShZdShhPT50aGlzLmVtaXRQYW5l''@;'; put 'put ''bENoYW5nZShhKSkpLHRoaXMuYWNjb3JkaW9uU2VydmljZS5hZGRQYW5lbCh0aGlzLmlkLHRoaXMucGFuZWxPcGVuKSx0aGlzLmFjY29yZGlvblNlcnZpY2UudG9nZ2xlUGFuZWwodGhpcy5pZCx0aGlzLnBhbmVsT3BlbiksdGhpcy5hY2NvcmRpb25TZXJ2aWNlLmRpc2FibGVQYW5lbCh0aGlz''@;'; put 'put ''LmlkLHRoaXMuZGlzYWJsZWQpfW5nT25DaGFuZ2VzKGEpe3RoaXMucGFuZWwmJmEucGFuZWxPcGVuJiZhLnBhbmVsT3Blbi5jdXJyZW50VmFsdWUhPT1hLnBhbmVsT3Blbi5wcmV2aW91c1ZhbHVlJiZ0aGlzLmFjY29yZGlvblNlcnZpY2UudG9nZ2xlUGFuZWwodGhpcy5pZCxhLnBhbmVsT3Bl''@;'; put 'put ''bi5jdXJyZW50VmFsdWUpLHRoaXMucGFuZWwmJmEuZGlzYWJsZWQmJmEuZGlzYWJsZWQuY3VycmVudFZhbHVlIT09YS5kaXNhYmxlZC5wcmV2aW91c1ZhbHVlJiZ0aGlzLmFjY29yZGlvblNlcnZpY2UuZGlzYWJsZVBhbmVsKHRoaXMuaWQsYS5kaXNhYmxlZC5jdXJyZW50VmFsdWUpfXRvZ2ds''@;'; put 'put ''ZVBhbmVsKCl7dGhpcy5hY2NvcmRpb25TZXJ2aWNlLnRvZ2dsZVBhbmVsKHRoaXMuaWQpfWNvbGxhcHNlUGFuZWxPbkFuaW1hdGlvbkRvbmUoYSl7YS5vcGVufHwodGhpcy5pZkV4cGFuZFNlcnZpY2UuZXhwYW5kZWQ9ITEpfWdldFBhbmVsU3RhdGVDbGFzc2VzKGEpe3JldHVybmBjbHItYWNj''@;'; put 'put ''b3JkaW9uLXBhbmVsLSR7YS5zdGF0dXN9ICR7YS5vcGVuPyJjbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4iOiIifWB9Z2V0QWNjb3JkaW9uQ29udGVudElkKGEpe3JldHVybmBjbHItYWNjb3JkaW9uLWNvbnRlbnQtJHthfSdgfWdldEFjY29yZGlvbkhlYWRlcklkKGEpe3JldHVybmBjbHItYWNj''@;'; put 'put ''b3JkaW9uLWhlYWRlci0ke2F9YH1zdGVwQ29tcGxldGVUZXh0KGEpe3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuc3RlcENvbXBsZXRlLHtTVEVQOmEudG9TdHJpbmcoKX0pfXN0ZXBFcnJvclRleHQoYSl7cmV0dXJuIHRoaXMuY29tbW9u''@;'; put 'put ''U3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5zdGVwRXJyb3Ise1NURVA6YS50b1N0cmluZygpfSl9ZW1pdFBhbmVsQ2hhbmdlKGEpe2EuaW5kZXghPT10aGlzLl9wYW5lbEluZGV4JiYodGhpcy5fcGFuZWxJbmRleD1hLmluZGV4LHRoaXMuY2RyLmRldGVjdENoYW5nZXMo''@;'; put 'put ''KSksYS5vcGVuIT09dGhpcy5wYW5lbE9wZW4mJih0aGlzLnBhbmVsT3BlbkNoYW5nZS5lbWl0KGEub3BlbiksdGhpcy5wYW5lbE9wZW49YS5vcGVuKSxhLm9wZW4mJih0aGlzLmlmRXhwYW5kU2VydmljZS5leHBhbmRlZD0hMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1''@;'; put 'put ''cm4gbmV3KGF8fGMpKEdlKGMsMTIpLEdlKHRzKSxHZShEeCksR2UoWjEpLEdlKHhzKSl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hY2NvcmRpb24tcGFuZWwiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmbGEoaCxoMWUsNCksMiZh''@;'; put 'put ''KXtsZXQgZjt4aShmPUVpKCkpJiYoZC5hY2NvcmRpb25EZXNjcmlwdGlvbj1mKX19LGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZ4cigiY2xyLWFjY29yZGlvbi1wYW5lbCIsITApKCJjbHItYWNjb3JkaW9uLXBhbmVsLWRpc2FibGVkIixkLmRpc2FibGVkKX0s''@;'; put 'put ''aW5wdXRzOntkaXNhYmxlZDpbWm4uTm9uZSwiY2xyQWNjb3JkaW9uUGFuZWxEaXNhYmxlZCIsImRpc2FibGVkIl0scGFuZWxPcGVuOltabi5Ob25lLCJjbHJBY2NvcmRpb25QYW5lbE9wZW4iLCJwYW5lbE9wZW4iXSxoZWFkaW5nRW5hYmxlZDpbWm4uTm9uZSwiY2xyQWNjb3JkaW9uUGFuZWxI''@;'; put 'put ''ZWFkaW5nRW5hYmxlZCIsImhlYWRpbmdFbmFibGVkIl0sZXhwbGljaXRIZWFkaW5nTGV2ZWw6W1puLk5vbmUsImNsckFjY29yZGlvblBhbmVsSGVhZGluZ0xldmVsIiwiZXhwbGljaXRIZWFkaW5nTGV2ZWwiXX0sb3V0cHV0czp7cGFuZWxPcGVuQ2hhbmdlOiJjbHJBY2NvcmRpb25QYW5lbE9w''@;'; put 'put ''ZW5DaGFuZ2UifSxmZWF0dXJlczpbcG8oW1oxXSkseWxdLG5nQ29udGVudFNlbGVjdG9yczpBRmUsZGVjbHM6Mix2YXJzOjMsY29uc3RzOltbImhlYWRlckJ1dHRvbiIsIiJdLFs0LCJuZ0lmIl0sWzMsIm5nQ2xhc3MiXSxbMSwiY2xyLWFjY29yZGlvbi1oZWFkZXIiXSxbInR5cGUiLCJidXR0''@;'; put 'put ''b24iLDEsImNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbiIsMywiY2xpY2siLCJpZCIsImRpc2FibGVkIl0sWzEsImNsci1hY2NvcmRpb24tc3RhdHVzIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwicmlnaHQiLDEsImNsci1hY2NvcmRpb24tYW5nbGUiXSxbInJvbGUiLCJyZWdp''@;'; put 'put ''b24iLDEsImNsci1hY2NvcmRpb24tY29udGVudC1yZWdpb24iLDMsImlkIl0sWyJjbGFzcyIsImNsci1hY2NvcmRpb24tY29udGVudCIsNCwibmdJZiJdLFsxLCJjbHItYWNjb3JkaW9uLWNvbnRlbnQiXSxbMSwiY2xyLWFjY29yZGlvbi1pbm5lci1jb250ZW50Il1dLHRlbXBsYXRlOmZ1bmN0''@;'; put 'put ''aW9uKGEsZCl7MSZhJiYobG8oVEZlKSxndCgwLERGZSwxMiwxNiwibmctY29udGFpbmVyIiwxKSxxcygxLCJhc3luYyIpKSwyJmEmJnhlKCJuZ0lmIixrYygxLDEsZC5wYW5lbCkpfSxkZXBlbmRlbmNpZXM6W3d1LHlvLGNzLHhNXSxlbmNhcHN1bGF0aW9uOjIsZGF0YTp7YW5pbWF0aW9uOmN6''@;'; put 'put ''ZX0sY2hhbmdlRGV0ZWN0aW9uOjB9KSxjfSkoKSxwMWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmFjY29yZGlvblNlcnZpY2U9YSx0aGlzLm11bHRpUGFuZWw9ITEsdGhpcy5zdWJzY3JpcHRpb25zPVtdfW5nT25Jbml0KCl7dGhpcy5zZXRBY2NvcmRpb25TdHJhdGVneSgp''@;'; put 'put ''fW5nT25DaGFuZ2VzKGEpe2EubXVsdGlQYW5lbC5jdXJyZW50VmFsdWUhPT1hLm11bHRpUGFuZWwucHJldmlvdXNWYWx1ZSYmdGhpcy5zZXRBY2NvcmRpb25TdHJhdGVneSgpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yRE9NQ2hhbmdl''@;'; put 'put ''cygpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2V0QWNjb3JkaW9uU3RyYXRlZ3koKXt0aGlzLmFjY29yZGlvblNlcnZpY2Uuc2V0U3RyYXRlZ3kodGhpcy5tdWx0aVBhbmVsP2t4Lk11bHRpOmt4LkRlZmF1bHQpfWxpc3Rl''@;'; put 'put ''bkZvckRPTUNoYW5nZXMoKXtyZXR1cm4gdGhpcy5wYW5lbHMuY2hhbmdlcy5waXBlKF8yKHRoaXMucGFuZWxzKSkuc3Vic2NyaWJlKGE9PnRoaXMuYWNjb3JkaW9uU2VydmljZS51cGRhdGVQYW5lbE9yZGVyKGEudG9BcnJheSgpLm1hcChkPT5kLmlkKSkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9''@;'; put 'put ''ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShEeCkpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmxhKGgsa0wsNCksMiZhKXtsZXQgZjt4aShmPUVpKCkpJiYo''@;'; put 'put ''ZC5wYW5lbHM9Zil9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmeHIoImNsci1hY2NvcmRpb24iLCEwKX0saW5wdXRzOnttdWx0aVBhbmVsOltabi5Ob25lLCJjbHJBY2NvcmRpb25NdWx0aVBhbmVsIiwibXVsdGlQYW5lbCJdfSxmZWF0dXJlczpbcG8oW0R4''@;'; put 'put ''XSkseWxdLG5nQ29udGVudFNlbGVjdG9yczp5YSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGxvKCksV3IoMCkpfSxlbmNhcHN1bGF0aW9uOjIsY2hhbmdlRGV0ZWN0aW9uOjB9KSxjfSkoKSxnMWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hY2NvcmRpb24tY29udGVudCJdLFsiY2xyLXN0ZXAtY29udGVudCJdXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eWEsZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rp''@;'; put 'put ''b24oYSxkKXsxJmEmJihsbygpLFdyKDApKX0sZW5jYXBzdWxhdGlvbjoyLGNoYW5nZURldGVjdGlvbjowfSksY30pKCksbTFlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVj''@;'; put 'put ''dG9yczpbWyJjbHItYWNjb3JkaW9uLXRpdGxlIl0sWyJjbHItc3RlcC10aXRsZSJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmeHIoImNsci1hY2NvcmRpb24tdGl0bGUiLCEwKX0sbmdDb250ZW50U2VsZWN0b3JzOnlhLGRlY2xzOjEsdmFyczowLHRlbXBs''@;'; put 'put ''YXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobG8oKSxXcigwKSl9LGVuY2Fwc3VsYXRpb246MixjaGFuZ2VEZXRlY3Rpb246MH0pLGN9KSgpLFR5PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmRpc2FibGVDaG9jb2xhdGVDaGVjaz0hMSx0aGlzLl9jaG9jb2xhdGU9bmV3IFdufWdl''@;'; put 'put ''dCBjaG9jb2xhdGUoKXtyZXR1cm4gdGhpcy5fY2hvY29sYXRlLmFzT2JzZXJ2YWJsZSgpfW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe3RoaXMuZGlzYWJsZUNob2NvbGF0ZUNoZWNrfHx0aGlzLl9jaG9jb2xhdGUubmV4dCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5l''@;'; put 'put ''dyhhfHxjKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6Y30pLGN9KSgpLEF5PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLnN1YnNjcmlwdGlvbj1kLmNob2NvbGF0ZS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmxhdGVzdEZsYXZvciE9PXRoaXMuZmxhdm9yJiYoZC5kaXNhYmxlQ2hv''@;'; put 'put ''Y29sYXRlQ2hlY2s9ITAsYS5kZXRlY3RDaGFuZ2VzKCksZC5kaXNhYmxlQ2hvY29sYXRlQ2hlY2s9ITEpfSl9bmdBZnRlckNvbnRlbnRDaGVja2VkKCl7dGhpcy5sYXRlc3RGbGF2b3I9dGhpcy5mbGF2b3J9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1y''@;'; put 'put ''ZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZSh4cyksR2UoVHkpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6Y30pLGN9KSgpLHlZPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBUeXt9cmV0dXJuIGMuXHUwMjc1ZmFjPSgoKT0+e2xldCBsO3JldHVybiBmdW5j''@;'; put 'put ''dGlvbihkKXtyZXR1cm4obHx8KGw9WnMoYykpKShkfHxjKX19KSgpLGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hY2NvcmRpb24iXV0sZmVhdHVyZXM6W0NvXX0pLGN9KSgpLHYxZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgQXl7Y29uc3RydWN0b3IoYSxkLGgpe2lm''@;'; put 'put ''KCFkKXRocm93IG5ldyBFcnJvcigiY2xyLWFjY29yZGlvbi1wYW5lbCBzaG91bGQgb25seSBiZSB1c2VkIGluc2lkZSBvZiBjbHItYWNjb3JkaW9uIik7c3VwZXIoYSxkKSx0aGlzLmV4cGFuZD1ofWdldCBmbGF2b3IoKXtyZXR1cm4gdGhpcy5leHBhbmQuZXhwYW5kZWR9fXJldHVybiBjLlx1''@;'; put 'put ''MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHhzKSxHZSh5WSw4KSxHZShaMSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItYWNjb3JkaW9uLXBhbmVsIl1dLGZlYXR1cmVzOltDb119KSxjfSkoKSxiMWU9KCgpPT57Y2xhc3MgY3tjb25z''@;'; put 'put ''dHJ1Y3Rvcigpe0VzLmFkZEljb25zKHd5LHBoLGdoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTG8sVHNdfSksY30pKCksdnplPSgoKT0+e2NsYXNzIGN7''@;'; put 'put ''fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xvLFRzLGIxZSxiMWVdfSksY30pKCk7dmFyIHRvPWZ1bmN0aW9uKGMpe3JldHVybiBjLkFycm93TGVmdD0iQXJy''@;'; put 'put ''b3dMZWZ0IixjLkFycm93VXA9IkFycm93VXAiLGMuQXJyb3dSaWdodD0iQXJyb3dSaWdodCIsYy5BcnJvd0Rvd249IkFycm93RG93biIsYy5CYWNrc3BhY2U9IkJhY2tzcGFjZSIsYy5UYWI9IlRhYiIsYy5FbnRlcj0iRW50ZXIiLGMuRXNjYXBlPSJFc2NhcGUiLGMuU3BhY2U9IlNwYWNlIixj''@;'; put 'put ''LlNwYWNlYmFyPSIgIixjLkhvbWU9IkhvbWUiLGMuRW5kPSJFbmQiLGMuUGFnZURvd249IlBhZ2VEb3duIixjLlBhZ2VVcD0iUGFnZVVwIixjfSh0b3x8e30pLGM3PWZ1bmN0aW9uKGMpe3JldHVybiBjLkFycm93VXA9IlVwIixjLkFycm93RG93bj0iRG93biIsYy5BcnJvd1JpZ2h0PSJSaWdo''@;'; put 'put ''dCIsYy5BcnJvd0xlZnQ9IkxlZnQiLGMuU3BhY2U9IlNwYWNlYmFyIixjLkVzY2FwZT0iRXNjIixjfShjN3x8e30pO2Z1bmN0aW9uIFMyKGMpe3JldHVybiBjPT09dG8uQXJyb3dVcHx8Yz09PWM3LkFycm93VXA/dG8uQXJyb3dVcDpjPT09dG8uQXJyb3dEb3dufHxjPT09YzcuQXJyb3dEb3du''@;'; put 'put ''P3RvLkFycm93RG93bjpjPT09dG8uQXJyb3dSaWdodHx8Yz09PWM3LkFycm93UmlnaHQ/dG8uQXJyb3dSaWdodDpjPT09dG8uQXJyb3dMZWZ0fHxjPT09YzcuQXJyb3dMZWZ0P3RvLkFycm93TGVmdDpjPT09dG8uU3BhY2V8fGM9PT1jNy5TcGFjZT90by5TcGFjZTpjPT09dG8uRXNjYXBlfHxj''@;'; put 'put ''PT09YzcuRXNjYXBlP3RvLkVzY2FwZTpjfWZ1bmN0aW9uIHdZKGMpe2NvbnN0IGw9UzIoYy5rZXkpOyhsPT09dG8uQXJyb3dVcHx8bD09PXRvLkFycm93RG93bnx8bD09PXRvLkFycm93TGVmdHx8bD09PXRvLkFycm93UmlnaHQpJiZjLnByZXZlbnREZWZhdWx0KCl9bGV0IGFjPSgoKT0+e2Ns''@;'; put 'put ''YXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9vcGVuPSExLHRoaXMuX29wZW5DaGFuZ2U9bmV3IFduLHRoaXMuX29wZW5FdmVudENoYW5nZT1uZXcgV24sdGhpcy5fcG9wb3ZlckFsaWduZWQ9bmV3IFduLHRoaXMuX3BvcG92ZXJWaXNpYmxlPW5ldyBXbn1nZXQgb3BlbkNoYW5nZSgpe3JldHVy''@;'; put 'put ''biB0aGlzLl9vcGVuQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBwb3BvdmVyVmlzaWJsZSgpe3JldHVybiB0aGlzLl9wb3BvdmVyVmlzaWJsZS5hc09ic2VydmFibGUoKX1nZXQgb3BlbkV2ZW50KCl7cmV0dXJuIHRoaXMuX29wZW5FdmVudH1zZXQgb3BlbkV2ZW50KGEpe3RoaXMuX29wZW5F''@;'; put 'put ''dmVudD1hLHRoaXMuX29wZW5FdmVudENoYW5nZS5uZXh0KGEpfWdldCBvcGVuKCl7cmV0dXJuIHRoaXMuX29wZW59c2V0IG9wZW4oYSl7dGhpcy5fb3BlbiE9PShhPSEhYSkmJih0aGlzLl9vcGVuPWEsdGhpcy5fb3BlbkNoYW5nZS5uZXh0KGEpKX1nZXQgb3JpZ2luYWxFdmVudCgpe3JldHVy''@;'; put 'put ''biB0aGlzLl9vcGVuRXZlbnR9Z2V0IHBvcG92ZXJBbGlnbmVkKCl7cmV0dXJuIHRoaXMuX3BvcG92ZXJBbGlnbmVkLmFzT2JzZXJ2YWJsZSgpfWdldEV2ZW50Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX29wZW5FdmVudENoYW5nZS5hc09ic2VydmFibGUoKX10b2dnbGVXaXRoRXZlbnQoYSl7d1ko''@;'; put 'put ''YSksdGhpcy5vcGVuRXZlbnQ9YSx0aGlzLm9wZW49IXRoaXMub3Blbn1wb3BvdmVyVmlzaWJsZUVtaXQoYSl7dGhpcy5fcG9wb3ZlclZpc2libGUubmV4dChhKX1wb3BvdmVyQWxpZ25lZEVtaXQoYSl7dGhpcy5fcG9wb3ZlckFsaWduZWQubmV4dChhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1''@;'; put 'put ''bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksUng9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5yZW5kZXJlcj1hLHRoaXMuc21hcnRPcGVuU2VydmljZT1kLHRoaXMuZG9j''@;'; put 'put ''dW1lbnQ9aCx0aGlzLm91dHNpZGVDbGlja0Nsb3NlPSEwLHRoaXMuc2Nyb2xsVG9DbG9zZT0hMCx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goZC5vcGVuQ2hhbmdlLnN1YnNjcmliZShmPT57Zj8odGhpcy5hZGRFc2NhcGVMaXN0ZW5lcigpLHRoaXMuYWRk''@;'; put 'put ''Q2xpY2tMaXN0ZW5lcigpLHRoaXMuYWRkU2Nyb2xsTGlzdGVuZXIoKSk6dGhpcy5yZW1vdmVBbGxFdmVudExpc3RlbmVycygpfSksZC5nZXRFdmVudENoYW5nZSgpLnN1YnNjcmliZShmPT57dGhpcy5pZ25vcmVkRXZlbnQ9Zn0pKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5m''@;'; put 'put ''b3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSksdGhpcy5yZW1vdmVBbGxFdmVudExpc3RlbmVycygpfWFkZFNjcm9sbExpc3RlbmVyKCl7dGhpcy5zY3JvbGxUb0Nsb3NlJiYodGhpcy5kb2N1bWVudFNjcm9sbGVyPU1kKHRoaXMuZG9jdW1lbnQsInNjcm9sbCIse2NhcHR1cmU6ITB9KSx0aGlz''@;'; put 'put ''LnNjcm9sbFN1YnNjcmlwdGlvbj10aGlzLmRvY3VtZW50U2Nyb2xsZXIucGlwZShXbCh0aGlzLnRlc3RGb3JTbWFydFBvcG92ZXJDb250ZW50Q29udGFpbmVyKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW49ITEsdGhpcy5zZXRBbmNob3JGb2N1cygpfSkpfXJl''@;'; put 'put ''bW92ZVNjcm9sbExpc3RlbmVyKCl7dGhpcy5kb2N1bWVudFNjcm9sbGVyJiYodGhpcy5zY3JvbGxTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSxkZWxldGUgdGhpcy5kb2N1bWVudFNjcm9sbGVyKX1hZGRDbGlja0xpc3RlbmVyKCl7dGhpcy5vdXRzaWRlQ2xpY2tDbG9zZSYmKHRoaXMuZG9j''@;'; put 'put ''dW1lbnRDbGlja0xpc3RlbmVyPXRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuZG9jdW1lbnQsImNsaWNrIixhPT57YT09PXRoaXMuaWdub3JlZEV2ZW50P2RlbGV0ZSB0aGlzLmlnbm9yZWRFdmVudDoodGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW49ITEsYS50YXJnZXQuZm9jdXMoKSl9KSl9''@;'; put 'put ''cmVtb3ZlQ2xpY2tMaXN0ZW5lcigpe3RoaXMub3V0c2lkZUNsaWNrQ2xvc2UmJihkZWxldGUgdGhpcy5pZ25vcmVkRXZlbnQsdGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXImJih0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lcigpLGRlbGV0ZSB0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lcikp''@;'; put 'put ''fWFkZEVzY2FwZUxpc3RlbmVyKCl7dGhpcy5lc2NhcGVMaXN0ZW5lcj10aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmRvY3VtZW50LCJrZXlkb3duLmVzY2FwZSIsKCk9Pnt0aGlzLnNtYXJ0T3BlblNlcnZpY2Uub3Blbj0hMSx0aGlzLnNldEFuY2hvckZvY3VzKCl9KX1yZW1vdmVFc2NhcGVM''@;'; put 'put ''aXN0ZW5lcigpe3RoaXMuZXNjYXBlTGlzdGVuZXImJih0aGlzLmVzY2FwZUxpc3RlbmVyKCksZGVsZXRlIHRoaXMuZXNjYXBlTGlzdGVuZXIpfXNldENsb3NlRm9jdXMoKXt0aGlzLmNsb3NlQnV0dG9uUmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX1zZXRBbmNob3JGb2N1cygpe3RoaXMuYW5j''@;'; put 'put ''aG9yQnV0dG9uUmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX10ZXN0Rm9yU21hcnRQb3BvdmVyQ29udGVudENvbnRhaW5lcihhKXtsZXQgZD1hLnRhcmdldDtmb3IoO2QuY2xhc3NMaXN0JiYiYm9keSIhPT1kLnBhcmVudEVsZW1lbnQubG9jYWxOYW1lOylkPWQucGFyZW50RWxlbWVudDtyZXR1''@;'; put 'put ''cm4hIWQuY2xhc3NMaXN0JiYhZC5jbGFzc0xpc3QuY29udGFpbnMoImNsci1wb3BvdmVyLWNvbnRlbnQiKX1yZW1vdmVBbGxFdmVudExpc3RlbmVycygpe3RoaXMucmVtb3ZlU2Nyb2xsTGlzdGVuZXIoKSx0aGlzLnJlbW92ZUNsaWNrTGlzdGVuZXIoKSx0aGlzLnJlbW92ZUVzY2FwZUxpc3Rl''@;'; put 'put ''bmVyKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKE1yKEVhKSxNcihhYyksTXIodnMpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxMeD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7''@;'; put 'put ''YS5hbmNob3JCdXR0b25SZWY9ZH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoUngpLEdlKGVvKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclBvcG92ZXJBbmNob3IiLCIiXV0saG9zdFZhcnM6Mixob3N0Qmlu''@;'; put 'put ''ZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJnhyKCJjbHItYW5jaG9yIiwhMCl9fSksY30pKCksdzFlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZWxlbWVudFJlZj1hLHRoaXMuc21hcnRFdmVudHNTZXJ2aWNlPWQsdGhpcy5zbWFydE9wZW5TZXJ2aWNlPWgsdGhpcy5j''@;'; put 'put ''bG9zZUNoYW5nZT1uZXcgcXIsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGgub3BlbkNoYW5nZS5waXBlKFdsKGY9PiFmKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5jbG9zZUNoYW5nZS5uZXh0KCl9KSl9aGFuZGxlQ2xpY2soYSl7dGhpcy5zbWFydE9wZW5T''@;'; put 'put ''ZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChhKSx0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5zZXRBbmNob3JGb2N1cygpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuc21hcnRFdmVudHNTZXJ2aWNlLmNsb3NlQnV0dG9uUmVmPXRoaXMuZWxlbWVudFJlZix0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5z''@;'; put 'put ''ZXRDbG9zZUZvY3VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShlbyksR2UoUngpLEdlKGFjKSl9LGMuXHUwMjc1ZGlyPUVyKHt0''@;'; put 'put ''eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclBvcG92ZXJDbG9zZUJ1dHRvbiIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC5oYW5kbGVDbGljayhmKX0pLDImYSYmeHIoImNsci1zbWFydC1jbG9z''@;'; put 'put ''ZS1idXR0b24iLCEwKX0sb3V0cHV0czp7Y2xvc2VDaGFuZ2U6ImNsclBvcG92ZXJPbkNsb3NlQ2hhbmdlIn19KSxjfSkoKTt2YXIgZjE9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5WRVJUSUNBTD0wXT0iVkVSVElDQUwiLGNbYy5IT1JJWk9OVEFMPTFdPSJIT1JJWk9OVEFMIixjfShmMXx8e30p''@;'; put 'put ''LE9zPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuU1RBUlQ9MF09IlNUQVJUIixjW2MuQ0VOVEVSPS41XT0iQ0VOVEVSIixjW2MuRU5EPTFdPSJFTkQiLGN9KE9zfHx7fSksT3g9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5CT1RUT009MF09IkJPVFRPTSIsY1tjLkxFRlQ9MV09IkxFRlQiLGNbYy5S''@;'; put 'put ''SUdIVD0yXT0iUklHSFQiLGNbYy5UT1A9M109IlRPUCIsY30oT3h8fHt9KTtjb25zdCBmbT1jPT4oey4uLmMsc2lkZTotMSpjLnNpZGV9KSxuZz0oYyxsKT0+e2NvbnN0IGE9Yy5jb250ZW50KyhsPy41Oi0uNSk7cmV0dXJuIGE8MHx8YT4xP2M6ey4uLmMsY29udGVudDphfX07ZnVuY3Rpb24g''@;'; put 'put ''a3koYyxsLGEpe3JldHVybiBkPT5sKGMoZCksYSl9ZnVuY3Rpb24gdmgoYyxsLGEpe2xldCBkPWwubGVmdCxoPWwudG9wO3N3aXRjaChjLmF4aXMrYy5zaWRlKXtjYXNlLTE6ZCs9QzFlKGMsbCxhKSxoLT1hLmhlaWdodDticmVhaztjYXNlIDE6ZCs9QzFlKGMsbCxhKSxoKz1sLmhlaWdodDti''@;'; put 'put ''cmVhaztjYXNlIDA6ZC09YS53aWR0aCxoKz1TMWUoYyxsLGEpO2JyZWFrO2Nhc2UgMjpkKz1sLndpZHRoLGgrPVMxZShjLGwsYSl9cmV0dXJue3hPZmZzZXQ6ZCx5T2Zmc2V0Omh9fWZ1bmN0aW9uIEMxZShjLGwsYSl7bGV0IGQ9MDtzd2l0Y2goYy5hbmNob3Ipe2Nhc2UgT3MuU1RBUlQ6YnJl''@;'; put 'put ''YWs7Y2FzZSBPcy5DRU5URVI6ZCs9bC53aWR0aC8yO2JyZWFrO2Nhc2UgT3MuRU5EOmQrPWwud2lkdGh9c3dpdGNoKGMuY29udGVudCl7Y2FzZSBPcy5TVEFSVDpicmVhaztjYXNlIE9zLkNFTlRFUjpkLT1hLndpZHRoLzI7YnJlYWs7Y2FzZSBPcy5FTkQ6ZC09YS53aWR0aH1yZXR1cm4gZH1m''@;'; put 'put ''dW5jdGlvbiBTMWUoYyxsLGEpe2xldCBkPTA7c3dpdGNoKGMuYW5jaG9yKXtjYXNlIE9zLlNUQVJUOmJyZWFrO2Nhc2UgT3MuQ0VOVEVSOmQrPWwuaGVpZ2h0LzI7YnJlYWs7Y2FzZSBPcy5FTkQ6ZCs9bC5oZWlnaHR9c3dpdGNoKGMuY29udGVudCl7Y2FzZSBPcy5TVEFSVDpicmVhaztjYXNl''@;'; put 'put ''IE9zLkNFTlRFUjpkLT1hLmhlaWdodC8yO2JyZWFrO2Nhc2UgT3MuRU5EOmQtPWEuaGVpZ2h0fXJldHVybiBkfWxldCBNMWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuZXZlbnRTZXJ2aWNlPWEsdGhpcy5wbGF0Zm9ybUlkPWQsdGhpcy5fc2hvdWxkUmVhbGlnbj1uZXcg''@;'; put 'put ''V24sdGhpcy5zaG91bGRSZWFsaWduPXRoaXMuX3Nob3VsZFJlYWxpZ24uYXNPYnNlcnZhYmxlKCl9cmVhbGlnbigpe3RoaXMuX3Nob3VsZFJlYWxpZ24ubmV4dCgpfWFsaWduQ29udGVudChhKXtpZighWHModGhpcy5wbGF0Zm9ybUlkKSlyZXR1cm57eE9mZnNldDowLHlPZmZzZXQ6MH07dGhp''@;'; put 'put ''cy5jdXJyZW50QW5jaG9yQ29vcmRzPXRoaXMuZXZlbnRTZXJ2aWNlLmFuY2hvckJ1dHRvblJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHM9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx0aGlzLmNvbnRlbnRPZmZzZXRz''@;'; put 'put ''PXZoKHRoaXMucG9zaXRpb24sdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpO2NvbnN0IGQ9ZnVuY3Rpb24geXplKGMsbCl7Y29uc3QgYT1bXSxkX2JvdHRvbT1jLnlPZmZzZXQrbC5oZWlnaHQsZF9sZWZ0PWMueE9mZnNldCxkX3JpZ2h0PWMueE9m''@;'; put 'put ''ZnNldCtsLndpZHRoO3JldHVybiBjLnlPZmZzZXQ+PTB8fGEucHVzaChPeC5UT1ApLGRfbGVmdD49MHx8YS5wdXNoKE94LkxFRlQpLGRfYm90dG9tPD0od2luZG93LmlubmVySGVpZ2h0fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KXx8YS5wdXNoKE94LkJPVFRPTSks''@;'; put 'put ''ZF9yaWdodDw9KHdpbmRvdy5pbm5lcldpZHRofHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpfHxhLnB1c2goT3guUklHSFQpLGF9KHRoaXMuY29udGVudE9mZnNldHMsdGhpcy5jdXJyZW50Q29udGVudENvb3JkcyksaD1kLnJlZHVjZSgoZix2KT0+Zit2LDApO3JldHVy''@;'; put 'put ''biAxPT09ZC5sZW5ndGgmJnRoaXMucG9zaXRpb24uYXhpcz09PWYxLlZFUlRJQ0FMP3RoaXMuaGFuZGxlVmVydGljYWxBeGlzT25lVmlvbGF0aW9uKGgpOjE9PT1kLmxlbmd0aCYmdGhpcy5wb3NpdGlvbi5heGlzPT09ZjEuSE9SSVpPTlRBTD90aGlzLmhhbmRsZUhvcml6b250YWxBeGlzT25l''@;'; put 'put ''VmlvbGF0aW9uKGgpOjI9PT1kLmxlbmd0aCYmdGhpcy5wb3NpdGlvbi5heGlzPT09ZjEuVkVSVElDQUw/dGhpcy5oYW5kbGVWZXJ0aWNhbEF4aXNUd29WaW9sYXRpb25zKGgpOjI9PT1kLmxlbmd0aCYmdGhpcy5wb3NpdGlvbi5heGlzPT09ZjEuSE9SSVpPTlRBTCYmdGhpcy5oYW5kbGVIb3Jp''@;'; put 'put ''em9udGFsQXhpc1R3b1Zpb2xhdGlvbnMoaCksdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcy50b3A8MCYmKHRoaXMuY29udGVudE9mZnNldHMueU9mZnNldCs9TWF0aC5hYnModGhpcy5jdXJyZW50Q29udGVudENvb3Jkcy50b3ApKSx0aGlzLmNvbnRlbnRPZmZzZXRzLnlPZmZzZXQrdGhpcy5j''@;'; put 'put ''dXJyZW50QW5jaG9yQ29vcmRzLnk8MCYmKHRoaXMuY29udGVudE9mZnNldHMueU9mZnNldD0wLXRoaXMuY3VycmVudENvbnRlbnRDb29yZHMudG9wKSx0aGlzLmNvbnRlbnRPZmZzZXRzfWhhbmRsZVZlcnRpY2FsQXhpc09uZVZpb2xhdGlvbihhKXtzd2l0Y2goYSl7Y2FzZSAwOmNhc2UgMzp0''@;'; put 'put ''aGlzLmNvbnRlbnRPZmZzZXRzPXZoKGZtKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVhaztjYXNlIDE6dGhpcy5jb250ZW50T2Zmc2V0cz12aCh0aGlzLnBvc2l0aW9uLHRoaXMuY3VycmVudEFuY2hvckNvb3Jk''@;'; put 'put ''cyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKSx0aGlzLmNvbnRlbnRPZmZzZXRzLnhPZmZzZXQ8MCYmKHRoaXMuY29udGVudE9mZnNldHMueE9mZnNldD0xMCk7YnJlYWs7Y2FzZSAyOnRoaXMuY29udGVudE9mZnNldHM9dmgobmcodGhpcy5wb3NpdGlvbiwhMCksdGhpcy5jdXJyZW50QW5j''@;'; put 'put ''aG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpfX1oYW5kbGVWZXJ0aWNhbEF4aXNUd29WaW9sYXRpb25zKGEpe3N3aXRjaChhKXtjYXNlIDU6e2NvbnN0IGQ9a3koZm0sbmcsITApO3RoaXMuY29udGVudE9mZnNldHM9dmgoZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRB''@;'; put 'put ''bmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWt9Y2FzZSA0Ontjb25zdCBkPWt5KGZtLG5nLCExKTt0aGlzLmNvbnRlbnRPZmZzZXRzPXZoKGQodGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMp''@;'; put 'put ''O2JyZWFrfWNhc2UgMzpkZWZhdWx0OmJyZWFrO2Nhc2UgMjp7Y29uc3QgZD1reShmbSxuZywhMCk7dGhpcy5jb250ZW50T2Zmc2V0cz12aChkKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVha31jYXNlIDE6e2Nv''@;'; put 'put ''bnN0IGQ9a3koZm0sbmcsITEpO3RoaXMuY29udGVudE9mZnNldHM9dmgoZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWt9fX1oYW5kbGVIb3Jpem9udGFsQXhpc09uZVZpb2xhdGlvbihhKXtzd2l0Y2goYSl7''@;'; put 'put ''Y2FzZSAxOmNhc2UgMjp0aGlzLmNvbnRlbnRPZmZzZXRzPXZoKGZtKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVhaztjYXNlIDA6dGhpcy5jb250ZW50T2Zmc2V0cz12aChuZyh0aGlzLnBvc2l0aW9uLCEwKSx0''@;'; put 'put ''aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jkcyk7YnJlYWs7Y2FzZSAzOnRoaXMuY29udGVudE9mZnNldHM9dmgobmcodGhpcy5wb3NpdGlvbiksdGhpcy5jdXJyZW50QW5jaG9yQ29vcmRzLHRoaXMuY3VycmVudENvbnRlbnRDb29yZHMpfX1oYW5kbGVI''@;'; put 'put ''b3Jpem9udGFsQXhpc1R3b1Zpb2xhdGlvbnMoYSl7c3dpdGNoKGEpe2Nhc2UgNTpjYXNlIDQ6e2NvbnN0IGQ9a3koZm0sbmcsITEpO3RoaXMuY29udGVudE9mZnNldHM9dmgoZCh0aGlzLnBvc2l0aW9uKSx0aGlzLmN1cnJlbnRBbmNob3JDb29yZHMsdGhpcy5jdXJyZW50Q29udGVudENvb3Jk''@;'; put 'put ''cyk7YnJlYWt9Y2FzZSAzOmRlZmF1bHQ6YnJlYWs7Y2FzZSAyOmNhc2UgMTp7Y29uc3QgZD1reShmbSxuZywhMCk7dGhpcy5jb250ZW50T2Zmc2V0cz12aChkKHRoaXMucG9zaXRpb24pLHRoaXMuY3VycmVudEFuY2hvckNvb3Jkcyx0aGlzLmN1cnJlbnRDb250ZW50Q29vcmRzKTticmVha319''@;'; put 'put ''fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShNcihSeCksTXIob2EpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxQeD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQpe3Ro''@;'; put 'put ''aXMuZG9jdW1lbnQ9YSx0aGlzLmNvbnRhaW5lcj1kLHRoaXMudGVtcGxhdGU9aCx0aGlzLnJlbmRlcmVyPWYsdGhpcy5zbWFydFBvc2l0aW9uU2VydmljZT12LHRoaXMuc21hcnRFdmVudHNTZXJ2aWNlPU0sdGhpcy5zbWFydE9wZW5TZXJ2aWNlPUQsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRo''@;'; put 'put ''aXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZuPW51bGwsdGhpcy5zaG91bGRSZWFsaWduPSExLHRoaXMucHJldmlvdXNDb250ZW50SGVpZ2h0PW51bGwsdGhpcy5jaGVja0NvbGxlY3Rvcj1uZXcgcXJ9c2V0IG9wZW4oYSl7dGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW49ISFhfXNldCBjb250ZW50''@;'; put 'put ''QXQoYSl7dGhpcy5zbWFydFBvc2l0aW9uU2VydmljZS5wb3NpdGlvbj1hfXNldCBvdXRzaWRlQ2xpY2tDbG9zZShhKXt0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5vdXRzaWRlQ2xpY2tDbG9zZT0hIWF9c2V0IHNjcm9sbFRvQ2xvc2UoYSl7dGhpcy5zbWFydEV2ZW50c1NlcnZpY2Uuc2Nyb2xs''@;'; put 'put ''VG9DbG9zZT0hIWF9bmdBZnRlckNvbnRlbnRDaGVja2VkKCl7aWYodGhpcy5zbWFydE9wZW5TZXJ2aWNlLm9wZW4mJnRoaXMudmlldyl7Y29uc3QgYT10aGlzLnZpZXcucm9vdE5vZGVzWzBdLm9mZnNldEhlaWdodDsodGhpcy5zaG91bGRSZWFsaWdufHxudWxsIT09dGhpcy5wcmV2aW91c0Nv''@;'; put 'put ''bnRlbnRIZWlnaHQmJnRoaXMucHJldmlvdXNDb250ZW50SGVpZ2h0IT09YSkmJih0aGlzLnByZXZpb3VzQ29udGVudEhlaWdodD1hLHRoaXMuY2hlY2tDb2xsZWN0b3IuZW1pdCgpKX19bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5zbWFydE9wZW5TZXJ2''@;'; put 'put ''aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9PnthP3RoaXMuYWRkQ29udGVudCgpOnRoaXMucmVtb3ZlQ29udGVudCgpfSksdGhpcy5zbWFydFBvc2l0aW9uU2VydmljZS5zaG91bGRSZWFsaWduLnN1YnNjcmliZSgoKT0+e3RoaXMuc2hvdWxkUmVhbGlnbj0hMH0pLHRoaXMuY2hlY2tDb2xs''@;'; put 'put ''ZWN0b3IucGlwZSh1bSgwKSkuc3Vic2NyaWJlKCgpPT57dGhpcy5hbGlnbkNvbnRlbnQoKSx0aGlzLnNob3VsZFJlYWxpZ249ITEsdGhpcy52aWV3JiYodGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnZpZXcucm9vdE5vZGVzWzBdLCJvcGFjaXR5IiwiMSIpLHRoaXMuc21hcnRPcGVuU2Vy''@;'; put 'put ''dmljZS5wb3BvdmVyVmlzaWJsZUVtaXQoITApKX0pKX1uZ09uRGVzdHJveSgpe3RoaXMucmVtb3ZlQ29udGVudCgpLHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9YWRkQ29udGVudCgpe3RoaXMudmlldz10aGlzLmNvbnRhaW5lci5jcmVhdGVFbWJlZGRl''@;'; put 'put ''ZFZpZXcodGhpcy50ZW1wbGF0ZSk7Y29uc3RbYV09dGhpcy52aWV3LnJvb3ROb2Rlczt0aGlzLnNtYXJ0RXZlbnRzU2VydmljZS5jb250ZW50UmVmPWEsdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhhLCJjbHItcG9wb3Zlci1jb250ZW50IiksdGhpcy5yZW5kZXJlci5zZXRTdHlsZShhLCJ0b3Ai''@;'; put 'put ''LCIwcHgiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGEsImxlZnQiLCIwcHgiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKGEsIm9wYWNpdHkiLCIwIiksdGhpcy5yZW1vdmVDbGlja0xpc3RlbmVyRm49dGhpcy5yZW5kZXJlci5saXN0ZW4oYSwiY2xpY2siLGQ9Pnt0aGlzLnNtYXJ0T3BlblNl''@;'; put 'put ''cnZpY2Uub3BlbkV2ZW50PWR9KSx0aGlzLnZpZXcucm9vdE5vZGVzLmZvckVhY2goZD0+e3RoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5kb2N1bWVudC5ib2R5LGQpfSksdGhpcy5zaG91bGRSZWFsaWduPSEwfXJlbW92ZUNvbnRlbnQoKXt0aGlzLnZpZXcmJih0aGlzLnJlbW92ZUNs''@;'; put 'put ''aWNrTGlzdGVuZXJGbiYmKHRoaXMucmVtb3ZlQ2xpY2tMaXN0ZW5lckZuKCksdGhpcy5yZW1vdmVDbGlja0xpc3RlbmVyRm49bnVsbCksdGhpcy52aWV3LnJvb3ROb2Rlcy5mb3JFYWNoKGE9PnRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5kb2N1bWVudC5ib2R5LGEpKSx0aGlzLmNv''@;'; put 'put ''bnRhaW5lci5jbGVhcigpLGRlbGV0ZSB0aGlzLnZpZXcsdGhpcy5zbWFydE9wZW5TZXJ2aWNlLnBvcG92ZXJWaXNpYmxlRW1pdCghMSkpfWFsaWduQ29udGVudCgpe2lmKCF0aGlzLnZpZXcpcmV0dXJuO2NvbnN0IGE9dGhpcy5zbWFydFBvc2l0aW9uU2VydmljZS5hbGlnbkNvbnRlbnQodGhp''@;'; put 'put ''cy52aWV3LnJvb3ROb2Rlc1swXSk7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnZpZXcucm9vdE5vZGVzWzBdLCJ0b3AiLGAke2EueU9mZnNldH1weGApLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy52aWV3LnJvb3ROb2Rlc1swXSwibGVmdCIsYCR7YS54T2Zmc2V0fXB4YCksdGhp''@;'; put 'put ''cy5zbWFydE9wZW5TZXJ2aWNlLnBvcG92ZXJBbGlnbmVkRW1pdCh0aGlzLnZpZXcucm9vdE5vZGVzWzBdKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UodnMpLEdlKERhKSxHZSh3bCksR2UoRWEpLEdlKE0xZSksR2UoUngpLEdlKGFjKSl9LGMu''@;'; put 'put ''XHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsclBvcG92ZXJDb250ZW50IiwiIl1dLGlucHV0czp7b3BlbjpbWm4uTm9uZSwiY2xyUG9wb3ZlckNvbnRlbnQiLCJvcGVuIl0sY29udGVudEF0Oltabi5Ob25lLCJjbHJQb3BvdmVyQ29udGVudEF0IiwiY29udGVudEF0Il0s''@;'; put 'put ''b3V0c2lkZUNsaWNrQ2xvc2U6W1puLk5vbmUsImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsIm91dHNpZGVDbGlja0Nsb3NlIl0sc2Nyb2xsVG9DbG9zZTpbWm4uTm9uZSwiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIiwic2Nyb2xsVG9DbG9zZSJdfX0pLGN9''@;'; put 'put ''KSgpLEZ4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5zbWFydE9wZW5TZXJ2aWNlPWEsdGhpcy5vcGVuQ2xvc2VDaGFuZ2U9bmV3IHFyLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChhLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGQ9Pnt0aGlz''@;'; put 'put ''Lm9wZW5DbG9zZUNoYW5nZS5uZXh0KGQpfSkpfWhhbmRsZUNsaWNrKGEpe3RoaXMuc21hcnRPcGVuU2VydmljZS50b2dnbGVXaXRoRXZlbnQoYSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9''@;'; put 'put ''ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShhYykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgiY2xpY2siLGZ1''@;'; put 'put ''bmN0aW9uKGYpe3JldHVybiBkLmhhbmRsZUNsaWNrKGYpfSksMiZhJiZ4cigiY2xyLXNtYXJ0LW9wZW4tY2xvc2UiLCEwKX0sb3V0cHV0czp7b3BlbkNsb3NlQ2hhbmdlOiJjbHJQb3BvdmVyT3BlbkNsb3NlQ2hhbmdlIn19KSxjfSkoKSxIeD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAy''@;'; put 'put ''NzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHt9KSxjfSkoKTt2YXIgYmg9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuVVA9InVwIixjLkRPV049ImRvd24iLGMuTEVGVD0ibGVmdCIsYy5SSUdIVD0icmlnaHQi''@;'; put 'put ''LGN9KGJofHx7fSk7bGV0IG1wPWNsYXNze2NvbnN0cnVjdG9yKGwpe3RoaXMucmVuZGVyZXI9bCx0aGlzLl91bmxpc3RlbkZ1bmNzPVtdfWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9cmVzZXQobCl7dGhpcy5fY3VycmVudD1sfWxpc3RlblRvQXJyb3dLZXlzKGwpe3RoaXMu''@;'; put 'put ''X3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihsLCJrZXlkb3duLmFycm93dXAiLCgpPT4hdGhpcy5tb3ZlKGJoLlVQKSkpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihsLCJrZXlkb3duLmFycm93ZG93biIsKCk9PiF0aGlzLm1v''@;'; put 'put ''dmUoYmguRE9XTikpKSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4obCwia2V5ZG93bi5hcnJvd2xlZnQiLCgpPT4hdGhpcy5tb3ZlKGJoLkxFRlQpKSksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKGwsImtleWRvd24u''@;'; put 'put ''YXJyb3dyaWdodCIsKCk9PiF0aGlzLm1vdmUoYmguUklHSFQpKSl9cmVnaXN0ZXJDb250YWluZXIobCxhPSIwIil7dGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUobCwidGFiaW5kZXgiLGEpLHRoaXMubGlzdGVuVG9BcnJvd0tleXMobCksdGhpcy5fdW5saXN0ZW5GdW5jcy5wdXNoKHRoaXMu''@;'; put 'put ''cmVuZGVyZXIubGlzdGVuKGwsImtleWRvd24uc3BhY2UiLCgpPT4hdGhpcy5hY3RpdmF0ZUN1cnJlbnQoKSkpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihsLCJrZXlkb3duLmVudGVyIiwoKT0+IXRoaXMuYWN0aXZhdGVDdXJyZW50KCkpKX1tb3ZlVG8o''@;'; put 'put ''bCl7dm9pZCAwIT09bCYmKHRoaXMuY3VycmVudCYmdGhpcy5jdXJyZW50LmJsdXIoKSxsLmZvY3VzKCksdGhpcy5fY3VycmVudD1sKX1tb3ZlKGwpe2xldCBhPSExO2lmKHRoaXMuY3VycmVudCl7Y29uc3QgZD10aGlzLmN1cnJlbnRbbF07ZCYmKFZNKGQpP2Q6ZmEoZCkpLnN1YnNjcmliZShm''@;'; put 'put ''PT57ZiYmKHRoaXMubW92ZVRvKGYpLGE9ITApfSl9cmV0dXJuIGF9YWN0aXZhdGVDdXJyZW50KCl7cmV0dXJuISghdGhpcy5jdXJyZW50fHwhdGhpcy5jdXJyZW50LmFjdGl2YXRlfHwodGhpcy5jdXJyZW50LmFjdGl2YXRlKCksMCkpfWRldGFjaExpc3RlbmVycygpe3RoaXMuX3VubGlzdGVu''@;'; put 'put ''RnVuY3MuZm9yRWFjaChsPT5sKCkpfX07bXAuXHUwMjc1ZmFjPWZ1bmN0aW9uKGwpe3JldHVybiBuZXcobHx8bXApKE1yKEVhKSl9LG1wLlx1MDI3NXByb3Y9YW4oe3Rva2VuOm1wLGZhY3Rvcnk6bXAuXHUwMjc1ZmFjfSk7Y29uc3QgVDFlPXtwcm92aWRlOm1wLHVzZUZhY3Rvcnk6ZnVuY3Rp''@;'; put 'put ''b24gX3plKGMsbCl7cmV0dXJuIGN8fG5ldyBtcChsKX0sZGVwczpbW25ldyBJMSxuZXcgbGQsbXBdLEVhXX07dmFyIE0yPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuQkVGT1JFPS0xXT0iQkVGT1JFIixjW2MuQUZURVI9MV09IkFGVEVSIixjfShNMnx8e30pO2NsYXNzIEVke31FZFsidG9wLXJp''@;'; put 'put ''Z2h0Il09e2F4aXM6ZjEuVkVSVElDQUwsc2lkZTpNMi5CRUZPUkUsYW5jaG9yOk9zLkVORCxjb250ZW50Ok9zLkVORH0sRWRbInRvcC1sZWZ0Il09e2F4aXM6ZjEuVkVSVElDQUwsc2lkZTpNMi5CRUZPUkUsYW5jaG9yOk9zLlNUQVJULGNvbnRlbnQ6T3MuU1RBUlR9LEVkWyJib3R0b20tcmln''@;'; put 'put ''aHQiXT17YXhpczpmMS5WRVJUSUNBTCxzaWRlOk0yLkFGVEVSLGFuY2hvcjpPcy5FTkQsY29udGVudDpPcy5FTkR9LEVkWyJib3R0b20tbGVmdCJdPXtheGlzOmYxLlZFUlRJQ0FMLHNpZGU6TTIuQUZURVIsYW5jaG9yOk9zLlNUQVJULGNvbnRlbnQ6T3MuU1RBUlR9LEVkWyJyaWdodC10b3Ai''@;'; put 'put ''XT17YXhpczpmMS5IT1JJWk9OVEFMLHNpZGU6TTIuQUZURVIsYW5jaG9yOk9zLkNFTlRFUixjb250ZW50Ok9zLkVORH0sRWRbInJpZ2h0LWJvdHRvbSJdPXtheGlzOmYxLkhPUklaT05UQUwsc2lkZTpNMi5BRlRFUixhbmNob3I6T3MuU1RBUlQsY29udGVudDpPcy5TVEFSVH0sRWRbImxlZnQt''@;'; put 'put ''dG9wIl09e2F4aXM6ZjEuSE9SSVpPTlRBTCxzaWRlOk0yLkJFRk9SRSxhbmNob3I6T3MuQ0VOVEVSLGNvbnRlbnQ6T3MuRU5EfSxFZFsibGVmdC1ib3R0b20iXT17YXhpczpmMS5IT1JJWk9OVEFMLHNpZGU6TTIuQkVGT1JFLGFuY2hvcjpPcy5TVEFSVCxjb250ZW50Ok9zLlNUQVJUfTtjb25z''@;'; put 'put ''dCBJTD1uZXcgU3QoIlBPUE9WRVJfSE9TVF9BTkNIT1IiKTtsZXQgd3plPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy50b2dnbGVTZXJ2aWNlPWEsdGhpcy5sYXN0T3BlbkNoYW5nZT1udWxsfW5nT25Jbml0KCl7dGhpcy5zdWJzY3JpcHRpb249dGhpcy50b2dnbGVTZXJ2aWNl''@;'; put 'put ''Lm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLmxhc3RPcGVuQ2hhbmdlPWF9KX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpfW9uRXNjYXBlS2V5KGEpe251bGwhPT10aGlzLmxhc3RPcGVuQ2hhbmdlJiYoITE9PT10aGlzLmxhc3RPcGVuQ2hhbmdl''@;'; put 'put ''JiZhLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMubGFzdE9wZW5DaGFuZ2U9bnVsbCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGFjKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgi''@;'; put 'put ''a2V5dXAuZXNjYXBlIixmdW5jdGlvbihmKXtyZXR1cm4gZC5vbkVzY2FwZUtleShmKX0pfSxzdGFuZGFsb25lOiEwfSksY30pKCkscmc9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMs''@;'; put 'put ''c3RhbmRhbG9uZTohMCxmZWF0dXJlczpbcG8oW2FjLFJ4LE0xZSx7cHJvdmlkZTpJTCx1c2VFeGlzdGluZzplb31dKSx2ZChbd3plXSldfSksY30pKCk7Y2xhc3MgU1l7c3RhdGljIGxpbmtQYXJlbnQobCxhLGQpe2wuZm9yRWFjaChoPT5oW2RdPWEpfXN0YXRpYyBsaW5rVmVydGljYWwobCxh''@;'; put 'put ''PSEwKXtsLmZvckVhY2goKGQsaCk9PntoPjAmJihkLnVwPWxbaC0xXSksaDxsLmxlbmd0aC0xJiYoZC5kb3duPWxbaCsxXSl9KSxhJiZsLmxlbmd0aD4xJiYobFswXS51cD1sW2wubGVuZ3RoLTFdLGxbbC5sZW5ndGgtMV0uZG93bj1sWzBdKX19bGV0IHBtPSgoKT0+e2NsYXNzIGN7dXNlckRl''@;'; put 'put ''ZmluZWRXaWR0aChhKXtjb25zdCBkPWEuY2xvbmVOb2RlKCEwKTtkLmlkJiYoZC5pZD1kLmlkKyItY2xvbmUiKSxkLmNsYXNzTGlzdC5hZGQoImRhdGFncmlkLWNlbGwtd2lkdGgtemVybyIpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZCk7Y29uc3QgaD10aGlzLmNsaWVudFJlY3QoZCku''@;'; put 'put ''d2lkdGg7cmV0dXJuIGQucmVtb3ZlKCksaH1zY3JvbGxCYXJXaWR0aChhKXtyZXR1cm4gYS5vZmZzZXRXaWR0aC1hLmNsaWVudFdpZHRofXNjcm9sbFdpZHRoKGEpe3JldHVybiBhLnNjcm9sbFdpZHRofHwwfWNvbXB1dGVkSGVpZ2h0KGEpe3JldHVybiBwYXJzZUludChnZXRDb21wdXRlZFN0''@;'; put 'put ''eWxlKGEpLmdldFByb3BlcnR5VmFsdWUoImhlaWdodCIpLDEwKX1jbGllbnRSZWN0KGEpe2NvbnN0IGQ9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm57dG9wOnBhcnNlSW50KGQudG9wLDEwKSxib3R0b206cGFyc2VJbnQoZC5ib3R0b20sMTApLGxlZnQ6cGFyc2VJbnQoZC5sZWZ0''@;'; put 'put ''LDEwKSxyaWdodDpwYXJzZUludChkLnJpZ2h0LDEwKSx3aWR0aDpwYXJzZUludChkLndpZHRoLDEwKSxoZWlnaHQ6cGFyc2VJbnQoZC5oZWlnaHQsMTApfX1taW5XaWR0aChhKXtyZXR1cm4gcGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZShhKS5nZXRQcm9wZXJ0eVZhbHVlKCJtaW4td2lkdGgi''@;'; put 'put ''KSwxMCl9Zm9jdXMoYSl7YS5mb2N1cygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxSTD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0''@;'; put 'put ''aGlzLmVsZW1lbnQ9YSx0aGlzLmRvbUFkYXB0ZXI9ZCx0aGlzLnJlbmRlcmVyPWgsdGhpcy5jbHJFeHBhbmRUcmlnZ2VyPSExLHRoaXMuc3RhcnRIZWlnaHQ9MH1nZXQgZXhwYW5kQW5pbWF0aW9uKCl7cmV0dXJue3ZhbHVlOnRoaXMuY2xyRXhwYW5kVHJpZ2dlcixwYXJhbXM6e3N0YXJ0SGVp''@;'; put 'put ''Z2h0OnRoaXMuc3RhcnRIZWlnaHR9fX1hbmltYXRpb25TdGFydChhKXsidm9pZCIhPT1hLmZyb21TdGF0ZSYmdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwib3ZlcmZsb3ciLCJoaWRkZW4iKX1hbmltYXRpb25Eb25lKGEpeyJ2b2lkIiE9PWEuZnJv''@;'; put 'put ''bVN0YXRlJiYodGhpcy5yZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLmVsZW1lbnQubmF0aXZlRWxlbWVudCwib3ZlcmZsb3ciKSx0aGlzLnVwZGF0ZVN0YXJ0SGVpZ2h0KCkpfXVwZGF0ZVN0YXJ0SGVpZ2h0KCl7dGhpcy5zdGFydEhlaWdodD10aGlzLmRvbUFkYXB0ZXIuY29tcHV0ZWRIZWln''@;'; put 'put ''aHQodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQpfHwwfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShlbyksR2UocG0pLEdlKEVhKSl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1leHBhbmRhYmxlLWFuaW1hdGlv''@;'; put 'put ''biJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmdFUoIkBleHBhbmRBbmltYXRpb24uc3RhcnQiLGZ1bmN0aW9uKGYpe3JldHVybiBkLmFuaW1hdGlvblN0YXJ0KGYpfSkoIkBleHBhbmRBbmltYXRpb24uZG9uZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQuYW5p''@;'; put 'put ''bWF0aW9uRG9uZShmKX0pLDImYSYmSnooIkBleHBhbmRBbmltYXRpb24iLGQuZXhwYW5kQW5pbWF0aW9uKX0saW5wdXRzOntjbHJFeHBhbmRUcmlnZ2VyOiJjbHJFeHBhbmRUcmlnZ2VyIn0sZmVhdHVyZXM6W3BvKFtwbV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eWEsZGVjbHM6MSx2YXJzOjAs''@;'; put 'put ''dGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihsbygpLFdyKDApKX0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfSJdLGRhdGE6e2FuaW1hdGlvbjpbbWgoImV4cGFuZEFuaW1hdGlvbiIsW3J1KCJ0cnVlIDw9PiBmYWxzZSIsW2xzKHtoZWlnaHQ6Int7c3RhcnRI''@;'; put 'put ''ZWlnaHR9fXB4In0pLHgwKCIwLjJzIGVhc2UtaW4tb3V0Iixscyh7aGVpZ2h0OiIqIn0pKV0pXSldfX0pLGN9KSgpLE1ZPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAy''@;'; put 'put ''NzVpbmo9QXIoe2ltcG9ydHM6W0xvXX0pLGN9KSgpLEN6ZT0wO2NvbnN0IEl5PW5ldyBTdCgiSUZfQUNUSVZFX0lEIiksTXplPXtwcm92aWRlOkl5LHVzZUZhY3Rvcnk6ZnVuY3Rpb24gU3plKCl7cmV0dXJuKytDemV9fTtsZXQgdTc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMu''@;'; put 'put ''X2N1cnJlbnRDaGFuZ2U9bmV3IFdufWdldCBjdXJyZW50Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX2N1cnJlbnRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGN1cnJlbnQoKXtyZXR1cm4gdGhpcy5fY3VycmVudH1zZXQgY3VycmVudChhKXt0aGlzLl9jdXJyZW50IT09YSYmKHRoaXMuX2N1cnJl''@;'; put 'put ''bnQ9YSx0aGlzLl9jdXJyZW50Q2hhbmdlLm5leHQoYSkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxSeT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9y''@;'; put 'put ''KGEsZCxoLGYpe3RoaXMuaWZBY3RpdmVTZXJ2aWNlPWEsdGhpcy5pZD1kLHRoaXMudGVtcGxhdGU9aCx0aGlzLmNvbnRhaW5lcj1mLHRoaXMuYWN0aXZlQ2hhbmdlPW5ldyBxcighMSksdGhpcy53YXNBY3RpdmU9ITEsdGhpcy5jaGVja0FuZFVwZGF0ZVZpZXcoYS5jdXJyZW50KSx0aGlzLnN1''@;'; put 'put ''YnNjcmlwdGlvbj1hLmN1cnJlbnRDaGFuZ2Uuc3Vic2NyaWJlKHY9Pnt0aGlzLmNoZWNrQW5kVXBkYXRlVmlldyh2KX0pfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5pZkFjdGl2ZVNlcnZpY2UuY3VycmVudD09PXRoaXMuaWR9c2V0IGFjdGl2ZShhKXthJiYodGhpcy5pZkFjdGl2ZVNlcnZp''@;'; put 'put ''Y2UuY3VycmVudD10aGlzLmlkKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9dXBkYXRlVmlldyhhKXthP3RoaXMuY29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlKTp0aGlzLmNvbnRhaW5lci5jbGVhcigpfWNoZWNrQW5kVXBk''@;'; put 'put ''YXRlVmlldyhhKXtjb25zdCBkPWE9PT10aGlzLmlkO2QhPT10aGlzLndhc0FjdGl2ZSYmKHRoaXMudXBkYXRlVmlldyhkKSx0aGlzLmFjdGl2ZUNoYW5nZS5lbWl0KGQpLHRoaXMud2FzQWN0aXZlPWQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShH''@;'; put 'put ''ZSh1NyksR2UoSXkpLEdlKHdsKSxHZShEYSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJJZkFjdGl2ZSIsIiJdXSxpbnB1dHM6e2FjdGl2ZTpbWm4uTm9uZSwiY2xySWZBY3RpdmUiLCJhY3RpdmUiXX0sb3V0cHV0czp7YWN0aXZlQ2hhbmdlOiJjbHJJZkFj''@;'; put 'put ''dGl2ZUNoYW5nZSJ9fSksY30pKCkseDI9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy50b2dnbGVTZXJ2aWNlPWEsdGhpcy50ZW1wbGF0ZT1kLHRoaXMuY29udGFpbmVyPWgsdGhpcy5vcGVuQ2hhbmdlPW5ldyBxcighMSksdGhpcy5zdWJzY3JpcHRpb249YS5vcGVuQ2hh''@;'; put 'put ''bmdlLnN1YnNjcmliZShmPT57dGhpcy51cGRhdGVWaWV3KGYpLHRoaXMub3BlbkNoYW5nZS5lbWl0KGYpfSl9Z2V0IG9wZW4oKXtyZXR1cm4gdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW59c2V0IG9wZW4oYSl7dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49YX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vi''@;'; put 'put ''c2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9dXBkYXRlVmlldyhhKXthP3RoaXMuY29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlKTp0aGlzLmNvbnRhaW5lci5jbGVhcigpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShh''@;'; put 'put ''YyksR2Uod2wpLEdlKERhKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNscklmT3BlbiIsIiJdXSxpbnB1dHM6e29wZW46W1puLk5vbmUsImNscklmT3BlbiIsIm9wZW4iXX0sb3V0cHV0czp7b3BlbkNoYW5nZToiY2xySWZPcGVuQ2hhbmdlIn19KSxjfSkoKSxB''@;'; put 'put ''MWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMudGVtcGxhdGU9YSx0aGlzLmNvbnRhaW5lcj1kLHRoaXMuZWw9aCx0aGlzLnJlbmRlcmVyPWYsdGhpcy5leHBhbmQ9dix0aGlzLmV4cGFuZGVkQ2hhbmdlPW5ldyBxcighMCksdGhpcy5fZXhwYW5kZWQ9ITEsdGhp''@;'; put 'put ''cy5fc3Vic2NyaXB0aW9ucz1bXSx0aGlzLl9zdWJzY3JpcHRpb25zLnB1c2godi5leHBhbmRDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy51cGRhdGVWaWV3KCksdGhpcy5leHBhbmRlZENoYW5nZS5lbWl0KHYuZXhwYW5kZWQpfSkpLHYuaGFzRXhwYW5kVGVtcGxhdGU9ISFhfWdldCBleHBh''@;'; put 'put ''bmRlZCgpe3JldHVybiB0aGlzLl9leHBhbmRlZH1zZXQgZXhwYW5kZWQoYSl7ImJvb2xlYW4iPT10eXBlb2YgYSYmKHRoaXMuZXhwYW5kLmV4cGFuZGVkPWEsdGhpcy5fZXhwYW5kZWQ9YSl9bmdPbkluaXQoKXt0aGlzLmV4cGFuZC5leHBhbmRhYmxlKyssdGhpcy51cGRhdGVWaWV3KCl9bmdP''@;'; put 'put ''bkRlc3Ryb3koKXt0aGlzLmV4cGFuZC5leHBhbmRhYmxlLS0sdGhpcy5fc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9dXBkYXRlVmlldygpe2lmKCF0aGlzLmV4cGFuZC5leHBhbmRlZHx8MD09PXRoaXMuY29udGFpbmVyLmxlbmd0aClpZih0aGlzLnRlbXBsYXRl''@;'; put 'put ''KXRoaXMuZXhwYW5kLmV4cGFuZGVkP3RoaXMuY29udGFpbmVyLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlKTp0aGlzLmNvbnRhaW5lci5jbGVhcigpO2Vsc2UgdHJ5e3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJkaXNwbGF5Iix0aGlzLmV4''@;'; put 'put ''cGFuZC5leHBhbmRlZD9udWxsOiJub25lIil9Y2F0Y2h7fX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2Uod2wsOCksR2UoRGEpLEdlKGVvKSxHZShFYSksR2UoWjEpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xy''@;'; put 'put ''SWZFeHBhbmRlZCIsIiJdXSxpbnB1dHM6e2V4cGFuZGVkOltabi5Ob25lLCJjbHJJZkV4cGFuZGVkIiwiZXhwYW5kZWQiXX0sb3V0cHV0czp7ZXhwYW5kZWRDaGFuZ2U6ImNscklmRXhwYW5kZWRDaGFuZ2UifX0pLGN9KSgpLEUyPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1m''@;'; put 'put ''dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xvXX0pLGN9KSgpO2NvbnN0IHh6ZT17cHJvdmlkZTpuZXcgU3QoIkZPQ1VTX09OX1ZJRVdfSU5JVCIpLHVzZVZhbHVlOiEwfTtsZXQgTEw9KCgpPT57''@;'; put 'put ''Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7cHJvdmlkZXJzOlt4emVdLGltcG9ydHM6W0xvXX0pLGN9KSgpLFR6ZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5c''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMbyxUcyxIeF19KSxjfSkoKSxUMj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5lbD1hLHRoaXMucmVuZGVyZXI9''@;'; put 'put ''ZCx0aGlzLmNsckxvYWRpbmdDaGFuZ2U9bmV3IHFyKCExKSx0aGlzLmJ1dHRvblN0YXRlPVUxLHRoaXMuc3RhdGU9VTEuREVGQVVMVH1sb2FkaW5nU3RhdGVDaGFuZ2UoYSl7aWYoYSE9PXRoaXMuc3RhdGUpe3N3aXRjaCh0aGlzLnN0YXRlPWEsYSl7Y2FzZSBVMS5ERUZBVUxUOnRoaXMucmVu''@;'; put 'put ''ZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIpLHRoaXMucmVuZGVyZXIucmVtb3ZlU3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0cmFuc2Zvcm0iKSx0aGlzLmRpc2FibGVkfHx0aGlzLnJlbmRlcmVyLnJlbW92ZUF0dHJpYnV0ZSh0aGlzLmVsLm5h''@;'; put 'put ''dGl2ZUVsZW1lbnQsImRpc2FibGVkIik7YnJlYWs7Y2FzZSBVMS5MT0FESU5HOnRoaXMuc2V0RXhwbGljaXRCdXR0b25XaWR0aCgpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ0cmFuc2Zvcm0iLCJ0cmFuc2xhdGV6KDApIiksdGhpcy5yZW5kZXJlci5z''@;'; put 'put ''ZXRBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJkaXNhYmxlZCIsIiIpO2JyZWFrO2Nhc2UgVTEuU1VDQ0VTUzp0aGlzLnNldEV4cGxpY2l0QnV0dG9uV2lkdGgoKTticmVhaztjYXNlIFUxLkVSUk9SOnRoaXMubG9hZGluZ1N0YXRlQ2hhbmdlKFUxLkRFRkFVTFQpfXRoaXMuY2xy''@;'; put 'put ''TG9hZGluZ0NoYW5nZS5lbWl0KGEpfX1zZXRFeHBsaWNpdEJ1dHRvbldpZHRoKCl7aWYodGhpcy5lbC5uYXRpdmVFbGVtZW50JiZ0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KXtjb25zdCBhPXRoaXMuZWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVu''@;'; put 'put ''dFJlY3QoKSxkPU1hdGgubWF4KDQyLGEud2lkdGgpO3RoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJ3aWR0aCIsYCR7ZH1weGApfX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoZW8pLEdlKEVhKSl9LGMuXHUw''@;'; put 'put ''Mjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImJ1dHRvbiIsImNsckxvYWRpbmciLCIiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJkaXNhYmxlZCIsZC5kaXNhYmxlZD8iIjpudWxsKX0saW5wdXRzOntkaXNhYmxlZDoiZGlzYWJsZWQifSxv''@;'; put 'put ''dXRwdXRzOntjbHJMb2FkaW5nQ2hhbmdlOiJjbHJMb2FkaW5nQ2hhbmdlIn0sZmVhdHVyZXM6W3BvKFt7cHJvdmlkZTpBeCx1c2VFeGlzdGluZzpjfV0pXSxhdHRyczpKRmUsbmdDb250ZW50U2VsZWN0b3JzOnlhLGRlY2xzOjQsdmFyczo1LGNvbnN0czpbWzMsIm5nU3dpdGNoIl0sWzQsIm5n''@;'; put 'put ''U3dpdGNoQ2FzZSJdLFsiY2xhc3MiLCJjbHItbG9hZGluZy1idG4tY29udGVudCIsNCwibmdTd2l0Y2hDYXNlIl0sWzEsInNwaW5uZXIiLCJzcGlubmVyLWlubGluZSJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiLCJzcGlubmVyLWNoZWNrIl0sWzEsImNsci1sb2FkaW5nLWJ0bi1j''@;'; put 'put ''b250ZW50Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobG8oKSxkZSgwLCJzcGFuIiwwKSxndCgxLFFGZSwyLDEsIm5nLWNvbnRhaW5lciIsMSkoMixlSGUsMiwxLCJuZy1jb250YWluZXIiLDEpKDMsdEhlLDIsMSwic3BhbiIsMiksaGUoKSksMiZhJiYoeGUoIkBwYXJlbnQiLHZv''@;'; put 'put ''aWQgMCkoIm5nU3dpdGNoIixkLnN0YXRlKSxmZSgpLHhlKCJuZ1N3aXRjaENhc2UiLGQuYnV0dG9uU3RhdGUuTE9BRElORyksZmUoKSx4ZSgibmdTd2l0Y2hDYXNlIixkLmJ1dHRvblN0YXRlLlNVQ0NFU1MpLGZlKCkseGUoIm5nU3dpdGNoQ2FzZSIsZC5idXR0b25TdGF0ZS5ERUZBVUxUKSl9''@;'; put 'put ''LGRlcGVuZGVuY2llczpbYjIsaXBdLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W21oKCJwYXJlbnQiLFtydSgiOmVudGVyIixbXSldKSxtaCgiZGVmYXVsdEJ1dHRvbiIsW3J1KCI6ZW50ZXIiLFtscyh7b3BhY2l0eTowfSkseDAoIjIwMG1zIDEwMG1zIGVhc2UtaW4iLGxzKHtv''@;'; put 'put ''cGFjaXR5OjF9KSldKSxydSgiOmxlYXZlIixbbHMoe29wYWNpdHk6MH0pXSldKSxtaCgic3Bpbm5lciIsW3J1KCI6ZW50ZXIiLFtscyh7b3BhY2l0eTowfSkseDAoIjIwMG1zIDEwMG1zIGVhc2UtaW4iLGxzKHtvcGFjaXR5OjF9KSldKSxydSgiOmxlYXZlIixbbHMoe29wYWNpdHk6MX0pLHgw''@;'; put 'put ''KCIxMDBtcyBlYXNlLW91dCIsbHMoe29wYWNpdHk6MH0pKV0pXSksbWgoInZhbGlkYXRlZCIsW3J1KCI6ZW50ZXIiLFt4MCgiNjAwbXMiLEJPZShbbHMoe3RyYW5zZm9ybToic2NhbGUoMCwwKSIsb2Zmc2V0OjB9KSxscyh7b3BhY2l0eToxLG9mZnNldDouMn0pLGxzKHt0cmFuc2Zvcm06InNj''@;'; put 'put ''YWxlKDEuMiwxLjIpIixvZmZzZXQ6LjR9KSxscyh7dHJhbnNmb3JtOiJzY2FsZSguOSwuOSkiLG9mZnNldDouNn0pLGxzKHt0cmFuc2Zvcm06InNjYWxlKDEsMSkiLG9mZnNldDoxfSldKSldKSxydSgiOmxlYXZlIixbbHMoe29wYWNpdHk6MX0pLHgwKCIxMDBtcyBlYXNlLW91dCIsbHMoe29w''@;'; put 'put ''YWNpdHk6MH0pKV0pXSldfX0pLGN9KSgpLGt6ZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMb119KSxjfSkoKSxEemU9KCgpPT57''@;'; put 'put ''Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe0VzLmFkZEljb25zKG0wZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W2t6ZSxUemVdfSksY30pKCksSXplPSgoKT0+''@;'; put 'put ''e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJuZy1jb21wb25lbnQiXV0sZGVjbHM6MCx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXt9LGVuY2Fwc3VsYXRpb246''@;'; put 'put ''Mn0pLGN9KSgpLE54PSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe30pLGN9KSgpLFJ6ZT0wLHloPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0''@;'; put 'put ''aGlzLl9pZD0iY2xyLWZvcm0tY29udHJvbC0iKyArK1J6ZSx0aGlzLl9pZENoYW5nZT1uZXcgUXIodGhpcy5faWQpfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZH1zZXQgaWQoYSl7dGhpcy5faWQ9YSx0aGlzLl9pZENoYW5nZS5uZXh0KGEpfWdldCBpZENoYW5nZSgpe3JldHVybiB0aGlzLl9p''@;'; put 'put ''ZENoYW5nZS5hc09ic2VydmFibGUoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksTHplPTAsZDc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3Ro''@;'; put 'put ''aXMuX2lkPSJjbHItZm9ybS1jb250YWluZXItIisgKytMemUsdGhpcy5faWRDaGFuZ2U9bmV3IFFyKHRoaXMuX2lkKX1nZXQgaWQoKXtyZXR1cm4gdGhpcy5faWR9c2V0IGlkKGEpe3RoaXMuX2lkPWEsdGhpcy5faWRDaGFuZ2UubmV4dChhKX1nZXQgaWRDaGFuZ2UoKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''aWRDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2xldCB4WT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7''@;'; put 'put ''dGhpcy5jb250cm9sSWRTZXJ2aWNlPWEsdGhpcy5jb250YWluZXJJZFNlcnZpY2U9ZCx0aGlzLmNvbnRyb2xJZFN1ZmZpeD0iYWJzdHJhY3QifWdldCBpZCgpe3JldHVybiB0aGlzLmNvbnRhaW5lcklkU2VydmljZT9gJHt0aGlzLmNvbnRhaW5lcklkU2VydmljZS5pZH0tJHt0aGlzLmNvbnRy''@;'; put 'put ''b2xJZFN1ZmZpeH1gOnRoaXMuY29udHJvbElkU2VydmljZT9gJHt0aGlzLmNvbnRyb2xJZFNlcnZpY2UuaWR9LSR7dGhpcy5jb250cm9sSWRTdWZmaXh9YDpudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZSh5aCw4KSxHZShkNyw4KSl9LGMu''@;'; put 'put ''XHUwMjc1ZGlyPUVyKHt0eXBlOmN9KSxjfSkoKSxPemU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIHhZe2NvbnN0cnVjdG9yKGEsZCl7c3VwZXIoYSxkKSx0aGlzLmNvbnRyb2xJZFNlcnZpY2U9YSx0aGlzLmNvbnRhaW5lcklkU2VydmljZT1kLHRoaXMuY29udHJvbElkU3VmZml4PSJlcnJvciJ9''@;'; put 'put ''fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHloLDgpLEdlKGQ3LDgpKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWNvbnRyb2wtZXJyb3IiXV0saG9zdFZhcnM6NSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsy''@;'; put 'put ''JmEmJihkcigiaWQiLGQuaWQpLHhyKCJjbHItc3VidGV4dCIsITApKCJlcnJvciIsITApKX0sZmVhdHVyZXM6W0NvXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eWEsZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihsbygpLFdyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSks''@;'; put 'put ''Y30pKCksT0w9KCgpPT57Y2xhc3MgYyBleHRlbmRzIHhZe2NvbnN0cnVjdG9yKGEsZCl7c3VwZXIoYSxkKSx0aGlzLmNvbnRyb2xJZFNlcnZpY2U9YSx0aGlzLmNvbnRhaW5lcklkU2VydmljZT1kLHRoaXMuY29udHJvbElkU3VmZml4PSJoZWxwZXIifX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVu''@;'; put 'put ''Y3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZSh5aCw4KSxHZShkNyw4KSl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1jb250cm9sLWhlbHBlciJdXSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGRyKCJpZCIsZC5pZCkseHIo''@;'; put 'put ''ImNsci1zdWJ0ZXh0IiwhMCkpfSxmZWF0dXJlczpbQ29dLG5nQ29udGVudFNlbGVjdG9yczp5YSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGxvKCksV3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxwMT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9y''@;'; put 'put ''KCl7dGhpcy5fYWRkaXRpb25hbENvbnRyb2xzPVtdLHRoaXMuX2NvbnRyb2xDaGFuZ2VzPW5ldyBXbix0aGlzLl9hZGRpdGlvbmFsQ29udHJvbHNDaGFuZ2VzPW5ldyBXbix0aGlzLl9oZWxwZXJzPW5ldyBXbn1nZXQgY29udHJvbCgpe3JldHVybiB0aGlzLl9jb250cm9sfWdldCBjb250cm9s''@;'; put 'put ''Q2hhbmdlcygpe3JldHVybiB0aGlzLl9jb250cm9sQ2hhbmdlcy5hc09ic2VydmFibGUoKX1nZXQgYWRkaXRpb25hbENvbnRyb2xzKCl7cmV0dXJuIHRoaXMuX2FkZGl0aW9uYWxDb250cm9sc31nZXQgYWRkaXRpb25hbENvbnRyb2xzQ2hhbmdlcygpe3JldHVybiB0aGlzLl9hZGRpdGlvbmFs''@;'; put 'put ''Q29udHJvbHNDaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpfWdldCBoYXNBZGRpdGlvbmFsQ29udHJvbHMoKXtyZXR1cm4hIXRoaXMuX2FkZGl0aW9uYWxDb250cm9scz8ubGVuZ3RofWdldCBoZWxwZXJzQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2hlbHBlcnMuYXNPYnNlcnZhYmxlKCl9c2V0Q29udHJv''@;'; put 'put ''bChhKXt0aGlzLl9jb250cm9sPWEsdGhpcy5fY29udHJvbENoYW5nZXMubmV4dChhKX1hZGRBZGRpdGlvbmFsQ29udHJvbChhKXt0aGlzLl9hZGRpdGlvbmFsQ29udHJvbHMucHVzaChhKSx0aGlzLl9hZGRpdGlvbmFsQ29udHJvbHNDaGFuZ2VzLm5leHQodGhpcy5fYWRkaXRpb25hbENvbnRy''@;'; put 'put ''b2xzKX1zZXRIZWxwZXJzKGEpe3RoaXMuX2hlbHBlcnMubmV4dChhKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7dmFyIFRkPWZ1bmN0aW9uKGMpe3Jl''@;'; put 'put ''dHVybiBjLk5PTkU9Ik5PTkUiLGMuVkFMSUQ9IlZBTElEIixjLklOVkFMSUQ9IklOVkFMSUQiLGN9KFRkfHx7fSk7bGV0IEFkPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy50cmlnZ2VyU3RhdHVzQ2hhbmdlU3ViamVjdD1uZXcgV24sdGhpcy5zdGF0dXNDaGFuZ2VzPXRoaXMu''@;'; put 'put ''Z2V0U3RhdHVzQ2hhbmdlcyhhKS5waXBlKF8wZSgxKSl9dHJpZ2dlclN0YXR1c0NoYW5nZSgpe3RoaXMudHJpZ2dlclN0YXR1c0NoYW5nZVN1YmplY3QubmV4dCgpfWdldFN0YXR1c0NoYW5nZXMoYSl7cmV0dXJuICQ4KFthLmNvbnRyb2xDaGFuZ2VzLGEuYWRkaXRpb25hbENvbnRyb2xzQ2hh''@;'; put 'put ''bmdlcy5waXBlKF8yKFtdKSldKS5waXBlKFYxKChbZCxoXSk9PntpZihkKXtjb25zdCBmPVtkLC4uLmhdO3JldHVybiBieCgkOChmLm1hcCh2PT52LnN0YXR1c0NoYW5nZXMpKSx0aGlzLnRyaWdnZXJTdGF0dXNDaGFuZ2VTdWJqZWN0LnBpcGUoT3IoKCk9PmYubWFwKHY9PnYuc3RhdHVzKSkp''@;'; put 'put ''KX1yZXR1cm4geTJ9KSxPcihkPT5kLmluY2x1ZGVzKFRkLklOVkFMSUQpP1RkLklOVkFMSUQ6ZC5pbmNsdWRlcyhUZC5WQUxJRCk/VGQuVkFMSUQ6VGQuTk9ORSksXzIoVGQuTk9ORSkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShNcihwMSkpfSxj''@;'; put 'put ''Llx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NsYXNzIFBMe31mdW5jdGlvbiBSMWUoYyl7cmV0dXJuW2Mse3Byb3ZpZGU6UEwsdXNlRXhpc3Rpbmc6Y31dfWZ1bmN0aW9uIEwxZShjLGwsYSl7cmV0dXJuIFh0LmNyZWF0ZShkPT57bChkKTtjb25z''@;'; put 'put ''dCBoPWMuc3Vic2NyaWJlKGQpO3JldHVybigpPT57aC51bnN1YnNjcmliZSgpLGEmJmEoZCl9fSl9bGV0IEZMPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2KXt0aGlzLnJlbmRlcmVyPWEsdGhpcy5wYXJlbnQ9ZCx0aGlzLnRvZ2dsZVNlcnZpY2U9aCx0aGlzLmZvY3VzU2Vy''@;'; put 'put ''dmljZT1mLHRoaXMucGxhdGZvcm1JZD12LHRoaXMuaWQ9U3UoKSx0aGlzLmZvY3VzQmFja09uVHJpZ2dlcldoZW5DbG9zZWQ9ITEsdGhpcy5fdW5saXN0ZW5GdW5jcz1bXSx0aGlzLnJlc2V0Q2hpbGRyZW4oKSx0aGlzLm1vdmVUb0ZpcnN0SXRlbVdoZW5PcGVuKCksZHx8dGhpcy5oYW5kbGVS''@;'; put 'put ''b290Rm9jdXMoKX1nZXQgdHJpZ2dlcigpe3JldHVybiB0aGlzLl90cmlnZ2VyfXNldCB0cmlnZ2VyKGEpe3RoaXMuX3RyaWdnZXI9YSx0aGlzLnBhcmVudD90aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5hcnJvd3JpZ2h0IixkPT50aGlz''@;'; put 'put ''LnRvZ2dsZVNlcnZpY2UudG9nZ2xlV2l0aEV2ZW50KGQpKSk6KHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJrZXlkb3duLmFycm93dXAiLGQ9PnRoaXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRoRXZlbnQoZCkpKSx0aGlzLl91bmxpc3RlbkZ1bmNz''@;'; put 'put ''LnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5hcnJvd2Rvd24iLGQ9PnRoaXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRoRXZlbnQoZCkpKSx0aGlzLmZvY3VzU2VydmljZS5saXN0ZW5Ub0Fycm93S2V5cyhhKSl9Z2V0IGNvbnRhaW5lcigpe3JldHVybiB0aGlzLl9jb250''@;'; put 'put ''YWluZXJ9c2V0IGNvbnRhaW5lcihhKXt0aGlzLl9jb250YWluZXI9YSx0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi50YWIiLGQ9PnRoaXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRoRXZlbnQoZCkpKSx0aGlzLnBhcmVudD90aGlzLl91''@;'; put 'put ''bmxpc3RlbkZ1bmNzLnB1c2godGhpcy5yZW5kZXJlci5saXN0ZW4oYSwia2V5ZG93bi5lc2NhcGUiLGQ9Pnt0aGlzLmZvY3VzU2VydmljZS5tb3ZlKGJoLkxFRlQpLGQuc3RvcFByb3BhZ2F0aW9uKCl9KSk6KHRoaXMuZm9jdXNTZXJ2aWNlLnJlZ2lzdGVyQ29udGFpbmVyKGEpLHRoaXMuX3Vu''@;'; put 'put ''bGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJrZXlkb3duLmVzY2FwZSIsZD0+dGhpcy50b2dnbGVTZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChkKSkpLHRoaXMuX3VubGlzdGVuRnVuY3MucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJibHVyIixkPT57dGhpcy5j''@;'; put 'put ''aGlsZHJlbi5waXBlKEJmKDEpKS5zdWJzY3JpYmUoZj0+Zi5mb3JFYWNoKHY9PnYuYmx1cigpKSk7Y29uc3QgaD1kLnJlbGF0ZWRUYXJnZXR8fGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7aCYmWHModGhpcy5wbGF0Zm9ybUlkKSYmKGEuY29udGFpbnMoaCl8fGg9PT10aGlzLnRyaWdnZXIpfHwo''@;'; put 'put ''dGhpcy5mb2N1c0JhY2tPblRyaWdnZXJXaGVuQ2xvc2VkPSExLHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExKX0pKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl91bmxpc3RlbkZ1bmNzLmZvckVhY2goYT0+YSgpKSx0aGlzLmZvY3VzU2VydmljZS5kZXRhY2hMaXN0ZW5lcnMoKX1tb3ZlVG9GaXJz''@;'; put 'put ''dEl0ZW1XaGVuT3Blbigpe2NvbnN0IGE9dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGQ9PntkJiZ0aGlzLnRvZ2dsZVNlcnZpY2Uub3JpZ2luYWxFdmVudCYmc2V0VGltZW91dCgoKT0+e3RoaXMuZm9jdXNTZXJ2aWNlLm1vdmVUbyh0aGlzKSx0aGlzLmZvY3VzU2Vy''@;'; put 'put ''dmljZS5tb3ZlKHRoaXMucGFyZW50P2JoLlJJR0hUOmJoLkRPV04pfSl9KTt0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2goKCk9PmEudW5zdWJzY3JpYmUoKSl9aGFuZGxlUm9vdEZvY3VzKCl7Y29uc3QgYT10aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoZD0+e2R8fCh0''@;'; put 'put ''aGlzLmZvY3VzU2VydmljZS5yZXNldCh0aGlzKSx0aGlzLmZvY3VzQmFja09uVHJpZ2dlcldoZW5DbG9zZWQmJnRoaXMuZm9jdXMoKSksdGhpcy5mb2N1c0JhY2tPblRyaWdnZXJXaGVuQ2xvc2VkPWR9KTt0aGlzLl91bmxpc3RlbkZ1bmNzLnB1c2goKCk9PmEudW5zdWJzY3JpYmUoKSl9Zm9j''@;'; put 'put ''dXMoKXt0aGlzLnRyaWdnZXImJlhzKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMudHJpZ2dlci5mb2N1cygpfWJsdXIoKXt0aGlzLnRyaWdnZXImJlhzKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMudHJpZ2dlci5ibHVyKCl9YWN0aXZhdGUoKXtYcyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnRyaWdn''@;'; put 'put ''ZXIuY2xpY2soKX1yZXNldENoaWxkcmVuKCl7dGhpcy5jaGlsZHJlbj1uZXcgdngoMSksdGhpcy5wYXJlbnQ/dGhpcy5yaWdodD10aGlzLm9wZW5BbmRHZXRDaGlsZHJlbigpLnBpcGUoT3IoYT0+YVswXSkpOih0aGlzLmRvd249dGhpcy5vcGVuQW5kR2V0Q2hpbGRyZW4oKS5waXBlKE9yKGE9''@;'; put 'put ''PmFbMF0pKSx0aGlzLnVwPXRoaXMub3BlbkFuZEdldENoaWxkcmVuKCkucGlwZShPcihhPT5hW2EubGVuZ3RoLTFdKSkpfWFkZENoaWxkcmVuKGEpe1NZLmxpbmtWZXJ0aWNhbChhKSx0aGlzLnBhcmVudCYmU1kubGlua1BhcmVudChhLHRoaXMuY2xvc2VBbmRHZXRUaGlzKCksYmguTEVGVCks''@;'; put 'put ''dGhpcy5jaGlsZHJlbi5uZXh0KGEpfW9wZW5BbmRHZXRDaGlsZHJlbigpe3JldHVybiBMMWUodGhpcy5jaGlsZHJlbiwoKT0+dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITApfWNsb3NlQW5kR2V0VGhpcygpe3JldHVybiBMMWUoZmEodGhpcyksKCk9PnRoaXMudG9nZ2xlU2VydmljZS5vcGVu''@;'; put 'put ''PSExKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoTXIoRWEpLE1yKGMsMTIpLE1yKGFjKSxNcihtcCksTXIob2EpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjb25zdCBQemU9UjFlKEZMKTts''@;'; put 'put ''ZXQgVng9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2NoYW5nZXM9bmV3IFdufWdldCBjaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX2NoYW5nZXMuYXNPYnNlcnZhYmxlKCl9Y2xvc2VNZW51cygpe3RoaXMuX2NoYW5nZXMubmV4dCghMSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5j''@;'; put 'put ''dGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NvbnN0IEh6ZT17cHJvdmlkZTpWeCx1c2VGYWN0b3J5OmZ1bmN0aW9uIEZ6ZShjKXtyZXR1cm4gY3x8bmV3IFZ4fSxkZXBzOltbbmV3IEkxLG5ldyBs''@;'; put 'put ''ZCxWeF1dfTtsZXQgaWc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMucGFyZW50PWEsdGhpcy50b2dnbGVTZXJ2aWNlPWQsdGhpcy5mb2N1c0hhbmRsZXI9aCx0aGlzLmlzTWVudUNsb3NhYmxlPSEwLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlw''@;'; put 'put ''dGlvbnMucHVzaCh2LmNoYW5nZXMuc3Vic2NyaWJlKE09PmQub3Blbj1NKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goZC5vcGVuQ2hhbmdlLnN1YnNjcmliZSgoKT0+Zi5tYXJrRm9yQ2hlY2soKSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1''@;'; put 'put ''YnNjcmliZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoYywxMiksR2UoYWMpLEdlKEZMKSxHZSh4cyksR2UoVngpKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRyb3Bkb3duIl1dLGhvc3RWYXJzOjQsaG9z''@;'; put 'put ''dEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZ4cigiZHJvcGRvd24iLCEwKSgib3BlbiIsZC50b2dnbGVTZXJ2aWNlLm9wZW4pfSxpbnB1dHM6e2lzTWVudUNsb3NhYmxlOltabi5Ob25lLCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayIsImlzTWVudUNsb3NhYmxlIl19LGZlYXR1cmVzOltw''@;'; put 'put ''byhbSHplLFQxZSxQemVdKSx2ZChbcmddKV0sbmdDb250ZW50U2VsZWN0b3JzOnlhLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobG8oKSxXcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO3ZhciBBaT1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLlJJR0hU''@;'; put 'put ''X0NFTlRFUj0wXT0iUklHSFRfQ0VOVEVSIixjW2MuUklHSFRfVE9QPTFdPSJSSUdIVF9UT1AiLGNbYy5SSUdIVF9CT1RUT009Ml09IlJJR0hUX0JPVFRPTSIsY1tjLlRPUF9DRU5URVI9M109IlRPUF9DRU5URVIiLGNbYy5UT1BfUklHSFQ9NF09IlRPUF9SSUdIVCIsY1tjLlRPUF9MRUZUPTVd''@;'; put 'put ''PSJUT1BfTEVGVCIsY1tjLkJPVFRPTV9DRU5URVI9Nl09IkJPVFRPTV9DRU5URVIiLGNbYy5CT1RUT01fUklHSFQ9N109IkJPVFRPTV9SSUdIVCIsY1tjLkJPVFRPTV9MRUZUPThdPSJCT1RUT01fTEVGVCIsY1tjLkxFRlRfQ0VOVEVSPTldPSJMRUZUX0NFTlRFUiIsY1tjLkxFRlRfVE9QPTEw''@;'; put 'put ''XT0iTEVGVF9UT1AiLGNbYy5MRUZUX0JPVFRPTT0xMV09IkxFRlRfQk9UVE9NIixjfShBaXx8e30pO2NsYXNzIEJ6ZXtjb25zdHJ1Y3RvcihsKXt0aGlzLmVsZW1lbnQ9bCx0aGlzLmJvdW5kT25TY3JvbGxMaXN0ZW5lcj10aGlzLmVtaXRTY3JvbGxFdmVudC5iaW5kKHRoaXMpLHRoaXMuc2Ny''@;'; put 'put ''b2xsYWJsZUVsZW1lbnRzPVtdLGwuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixsLnN0eWxlLnRvcD0wLGwuc3R5bGUuYm90dG9tPSJhdXRvIixsLnN0eWxlLmxlZnQ9MCxsLnN0eWxlLnJpZ2h0PSJhdXRvIn1hbmNob3IobCxhLGQse29mZnNldFg6aD0wLG9mZnNldFk6Zj0wLHVzZUFuY2hv''@;'; put 'put ''clBhcmVudDp2PSExfT17fSl7dGhpcy5hZGRTY3JvbGxFdmVudExpc3RlbmVycyhsKSx2JiYobD1sLnBhcmVudE5vZGUpLGwuc3R5bGUucG9zaXRpb249InN0YXRpYyI7Y29uc3QgTT1sLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLEQ9dGhpcy5lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVj''@;'; put 'put ''dCgpO2xldCBaPU0ubGVmdC1ELmxlZnQraCxuZT1NLnRvcC1ELnRvcCtmO3N3aXRjaChhKXtjYXNlIEFpLkxFRlRfVE9QOmNhc2UgQWkuVE9QX0xFRlQ6YnJlYWs7Y2FzZSBBaS5UT1BfQ0VOVEVSOlorPU0ud2lkdGgvMjticmVhaztjYXNlIEFpLlRPUF9SSUdIVDpjYXNlIEFpLlJJR0hUX1RP''@;'; put 'put ''UDpaKz1NLndpZHRoO2JyZWFrO2Nhc2UgQWkuTEVGVF9CT1RUT006Y2FzZSBBaS5CT1RUT01fTEVGVDpuZSs9TS5oZWlnaHQ7YnJlYWs7Y2FzZSBBaS5CT1RUT01fQ0VOVEVSOm5lKz1NLmhlaWdodCxaKz1NLndpZHRoLzI7YnJlYWs7Y2FzZSBBaS5CT1RUT01fUklHSFQ6Y2FzZSBBaS5SSUdI''@;'; put 'put ''VF9CT1RUT006bmUrPU0uaGVpZ2h0LForPU0ud2lkdGg7YnJlYWs7Y2FzZSBBaS5MRUZUX0NFTlRFUjpuZSs9TS5oZWlnaHQvMjticmVhaztjYXNlIEFpLlJJR0hUX0NFTlRFUjpuZSs9TS5oZWlnaHQvMixaKz1NLndpZHRofXN3aXRjaChkKXtjYXNlIEFpLkxFRlRfVE9QOmNhc2UgQWkuVE9Q''@;'; put 'put ''X0xFRlQ6YnJlYWs7Y2FzZSBBaS5UT1BfQ0VOVEVSOlotPUQud2lkdGgvMjticmVhaztjYXNlIEFpLlRPUF9SSUdIVDpjYXNlIEFpLlJJR0hUX1RPUDpaLT1ELndpZHRoO2JyZWFrO2Nhc2UgQWkuTEVGVF9CT1RUT006Y2FzZSBBaS5CT1RUT01fTEVGVDpuZS09RC5oZWlnaHQ7YnJlYWs7Y2Fz''@;'; put 'put ''ZSBBaS5CT1RUT01fQ0VOVEVSOm5lLT1ELmhlaWdodCxaLT1ELndpZHRoLzI7YnJlYWs7Y2FzZSBBaS5CT1RUT01fUklHSFQ6Y2FzZSBBaS5SSUdIVF9CT1RUT006bmUtPUQuaGVpZ2h0LFotPUQud2lkdGg7YnJlYWs7Y2FzZSBBaS5MRUZUX0NFTlRFUjpuZS09RC5oZWlnaHQvMjticmVhaztj''@;'; put 'put ''YXNlIEFpLlJJR0hUX0NFTlRFUjpuZS09RC5oZWlnaHQvMixaLT1ELndpZHRofWNvbnN0IGNlPWdldENvbXB1dGVkU3R5bGUodGhpcy5lbGVtZW50KSxiZT1wYXJzZUludChjZS5tYXJnaW5MZWZ0LDEwKSxFZT1wYXJzZUludChjZS5tYXJnaW5SaWdodCwxMCksQmU9cGFyc2VJbnQoY2UubWFy''@;'; put 'put ''Z2luVG9wLDEwKSxxZT1wYXJzZUludChjZS5tYXJnaW5Cb3R0b20sMTApO3N3aXRjaChhKXtjYXNlIEFpLkxFRlRfVE9QOmNhc2UgQWkuVE9QX0xFRlQ6Y2FzZSBBaS5UT1BfUklHSFQ6Y2FzZSBBaS5SSUdIVF9UT1A6KGQ9PT1BaS5CT1RUT01fUklHSFR8fGQ9PT1BaS5SSUdIVF9CT1RUT00p''@;'; put 'put ''JiYobmUtPXFlLFotPUVlKSwoZD09PUFpLkJPVFRPTV9MRUZUfHxkPT09QWkuTEVGVF9CT1RUT00pJiYobmUtPUJlLForPWJlKSwoZD09PUFpLlRPUF9MRUZUfHxkPT09QWkuTEVGVF9UT1ApJiYobmUrPUJlLForPWJlKSwoZD09PUFpLlRPUF9SSUdIVHx8ZD09PUFpLlJJR0hUX1RPUCkmJihu''@;'; put 'put ''ZSs9QmUsWi09RWUpO2JyZWFrO2Nhc2UgQWkuTEVGVF9CT1RUT006Y2FzZSBBaS5CT1RUT01fTEVGVDpjYXNlIEFpLkJPVFRPTV9SSUdIVDpjYXNlIEFpLlJJR0hUX0JPVFRPTTooZD09PUFpLkJPVFRPTV9MRUZUfHxkPT09QWkuTEVGVF9CT1RUT00pJiYobmUtPXFlLForPWJlKSwoZD09PUFp''@;'; put 'put ''LkJPVFRPTV9SSUdIVHx8ZD09PUFpLlJJR0hUX0JPVFRPTSkmJihuZS09cWUsWi09RWUpLChkPT09QWkuVE9QX0xFRlR8fGQ9PT1BaS5MRUZUX1RPUCkmJihuZSs9QmUsWis9YmUpLChkPT09QWkuVE9QX1JJR0hUfHxkPT09QWkuUklHSFRfVE9QKSYmKG5lKz1CZSxaLT1FZSk7YnJlYWs7Y2Fz''@;'; put 'put ''ZSBBaS5UT1BfQ0VOVEVSOm5lLT1xZSxaKz1iZSxaLT1FZTticmVhaztjYXNlIEFpLkJPVFRPTV9DRU5URVI6bmUrPUJlLForPWJlLFotPUVlO2JyZWFrO2Nhc2UgQWkuTEVGVF9DRU5URVI6bmUrPUJlLG5lLT1xZSxaLT1FZTticmVhaztjYXNlIEFpLlJJR0hUX0NFTlRFUjpuZSs9QmUsbmUt''@;'; put 'put ''PXFlLForPWJlfXJldHVybiB0aGlzLmVsZW1lbnQuc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGVYKCR7TWF0aC5yb3VuZChaKX1weCkgdHJhbnNsYXRlWSgke01hdGgucm91bmQobmUpfXB4KWAsdGhpcy5fc2Nyb2xsLmFzT2JzZXJ2YWJsZSgpfXJlbGVhc2UoKXt0aGlzLmVsZW1lbnQuc3R5''@;'; put 'put ''bGUudHJhbnNmb3JtPSIiLHRoaXMucmVtb3ZlU2Nyb2xsRXZlbnRMaXN0ZW5lcnMoKX1pc1Bvc2l0aW9uZWQobCl7Y29uc3QgYT1nZXRDb21wdXRlZFN0eWxlKGwpLnBvc2l0aW9uO3JldHVybiJyZWxhdGl2ZSI9PT1hfHwiYWJzb2x1dGUiPT09YXx8ImZpeGVkIj09PWF9ZW1pdFNjcm9sbEV2''@;'; put 'put ''ZW50KCl7dGhpcy5fc2Nyb2xsLm5leHQoKX1hZGRTY3JvbGxFdmVudExpc3RlbmVycyhsKXt0aGlzLl9zY3JvbGw9bmV3IFduO2NvbnN0IGE9bDtsZXQgZD1sO2Zvcig7ZCYmZCE9PWRvY3VtZW50JiYodGhpcy5zY3JvbGxzKGQpJiYoZC5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHRoaXMu''@;'; put 'put ''Ym91bmRPblNjcm9sbExpc3RlbmVyKSx0aGlzLnNjcm9sbGFibGVFbGVtZW50cy5wdXNoKGQpKSxkPT09YXx8IXRoaXMuaXNQb3NpdGlvbmVkKGQpKTspZD1kLnBhcmVudE5vZGV9cmVtb3ZlU2Nyb2xsRXZlbnRMaXN0ZW5lcnMoKXtmb3IoY29uc3QgbCBvZiB0aGlzLnNjcm9sbGFibGVFbGVt''@;'; put 'put ''ZW50cylsLnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsdGhpcy5ib3VuZE9uU2Nyb2xsTGlzdGVuZXIpO3RoaXMuc2Nyb2xsYWJsZUVsZW1lbnRzLmxlbmd0aD0wLHRoaXMuX3Njcm9sbCYmKHRoaXMuX3Njcm9sbC5jb21wbGV0ZSgpLGRlbGV0ZSB0aGlzLl9zY3JvbGwpfXNjcm9sbHMo''@;'; put 'put ''bCl7Y29uc3QgYT1nZXRDb21wdXRlZFN0eWxlKGwpO3JldHVybiJzY3JvbGwiPT09YS5vdmVyZmxvd1h8fCJhdXRvIj09PWEub3ZlcmZsb3dYfHwic2Nyb2xsIj09PWEub3ZlcmZsb3dZfHwiYXV0byI9PT1hLm92ZXJmbG93WX19Y29uc3QgSDFlPSJpcy1vZmYtc2NyZWVuIjtsZXQgRVk9KCgp''@;'; put 'put ''PT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMucGFyZW50SG9zdD1kLHRoaXMuY2xvc2VPbk91dHNpZGVDbGljaz0hMSx0aGlzLnBvcG92ZXJPcHRpb25zPXt9LHRoaXMudXBkYXRlQW5jaG9yPSExLHRoaXMuZG9jdW1lbnRFU0NMaXN0ZW5lcj1udWxsLHRoaXMuY2xvc2VPbk91dHNp''@;'; put 'put ''ZGVDbGlja0NhbGxiYWNrPWg9Pnt0aGlzLmFuY2hvckVsZW0uY29udGFpbnMoaC50YXJnZXQpfHwodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEpfSx0aGlzLmVsPWEuZ2V0KGVvKSx0aGlzLnRvZ2dsZVNlcnZpY2U9YS5nZXQoYWMpLHRoaXMucmVuZGVyZXI9YS5nZXQoRWEpLHRoaXMubmda''@;'; put 'put ''b25lPWEuZ2V0KFlvKSx0aGlzLnJlZj1hLmdldCh4cyksdGhpcy5hbmNob3JFbGVtPWQubmF0aXZlRWxlbWVudCx0aGlzLnBvcG92ZXJJbnN0YW5jZT1uZXcgQnplKHRoaXMuZWwubmF0aXZlRWxlbWVudCksdGhpcy5zdWJzY3JpcHRpb249dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW5DaGFuZ2Uu''@;'; put 'put ''cGlwZShfMih0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbikpLnN1YnNjcmliZShoPT57aD8odGhpcy5hbmNob3IoKSx0aGlzLmF0dGFjaEVTQ0xpc3RlbmVyKCksdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsSDFlKSk6KHRoaXMucmVsZWFzZSgpLHRoaXMu''@;'; put 'put ''ZGV0YWNoRVNDTGlzdGVuZXIoKSx0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxIMWUpKX0pLHRoaXMudG9nZ2xlU2VydmljZS5vcGVuJiYodGhpcy5hbmNob3IoKSx0aGlzLmF0dGFjaEVTQ0xpc3RlbmVyKCkpfW5nQWZ0ZXJWaWV3Q2hlY2tlZCgpe3RoaXMu''@;'; put 'put ''dXBkYXRlQW5jaG9yJiYodGhpcy51cGRhdGVBbmNob3I9ITEsdGhpcy5wb3BvdmVySW5zdGFuY2UuYW5jaG9yKHRoaXMuYW5jaG9yRWxlbSx0aGlzLmFuY2hvclBvaW50LHRoaXMucG9wb3ZlclBvaW50LHRoaXMucG9wb3Zlck9wdGlvbnMpLnN1YnNjcmliZSgoKT0+e3RoaXMudG9nZ2xlU2Vy''@;'; put 'put ''dmljZS5vcGVuPSExfSksdGhpcy5hdHRhY2hPdXRzaWRlQ2xpY2tMaXN0ZW5lcigpKX1uZ09uRGVzdHJveSgpe3RoaXMucmVsZWFzZSgpLHRoaXMuZGV0YWNoRVNDTGlzdGVuZXIoKSx0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfWFuY2hvcigpe3RoaXMudXBkYXRlQW5jaG9yPSEw''@;'; put 'put ''fXJlbGVhc2UoKXt0aGlzLmRldGFjaE91dHNpZGVDbGlja0xpc3RlbmVyKCksdGhpcy5wb3BvdmVySW5zdGFuY2UucmVsZWFzZSgpfWF0dGFjaEVTQ0xpc3RlbmVyKCl7dGhpcy5wb3BvdmVyT3B0aW9ucy5pZ25vcmVHbG9iYWxFU0NMaXN0ZW5lcnx8dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFu''@;'; put 'put ''Z3VsYXIoKCk9Pnt0aGlzLmRvY3VtZW50RVNDTGlzdGVuZXI9dGhpcy5yZW5kZXJlci5saXN0ZW4oImRvY3VtZW50Iiwia2V5ZG93biIsYT0+e2EmJmEua2V5JiZTMihhLmtleSk9PT10by5Fc2NhcGUmJnRoaXMubmdab25lLnJ1bigoKT0+e3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExLHRo''@;'; put 'put ''aXMucmVmLm1hcmtGb3JDaGVjaygpfSl9KX0pfWRldGFjaEVTQ0xpc3RlbmVyKCl7dGhpcy5kb2N1bWVudEVTQ0xpc3RlbmVyJiYodGhpcy5kb2N1bWVudEVTQ0xpc3RlbmVyKCksdGhpcy5kb2N1bWVudEVTQ0xpc3RlbmVyPW51bGwpfWF0dGFjaE91dHNpZGVDbGlja0xpc3RlbmVyKCl7dGhp''@;'; put 'put ''cy5jbG9zZU9uT3V0c2lkZUNsaWNrJiZ0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbiYmZG9jdW1lbnQmJmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXImJmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2tDYWxsYmFjaywhMCl9ZGV0YWNoT3V0''@;'; put 'put ''c2lkZUNsaWNrTGlzdGVuZXIoKXt0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2smJmRvY3VtZW50JiZkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyJiZkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrQ2FsbGJhY2ssITApfX1yZXR1''@;'; put 'put ''cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShEcyksR2UoZW8sNCkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjfSksY30pKCksaDc9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEVZe2NvbnN0cnVjdG9yKGEsZCxoLGYpe2lmKCFkKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''Y2xyLWRyb3Bkb3duLW1lbnUgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBjbHItZHJvcGRvd24iKTtzdXBlcihhLGQpLGg/KHRoaXMuYW5jaG9yUG9pbnQ9QWkuUklHSFRfVE9QLHRoaXMucG9wb3ZlclBvaW50PUFpLkxFRlRfVE9QKToodGhpcy5hbmNob3JQb2ludD1BaS5CT1RU''@;'; put 'put ''T01fTEVGVCx0aGlzLnBvcG92ZXJQb2ludD1BaS5MRUZUX1RPUCksdGhpcy5wb3BvdmVyT3B0aW9ucy5hbGxvd011bHRpcGxlT3Blbj0hMCx0aGlzLnBvcG92ZXJPcHRpb25zLmlnbm9yZUdsb2JhbEVTQ0xpc3RlbmVyPSEwLHRoaXMuY2xvc2VPbk91dHNpZGVDbGljaz0hMCx0aGlzLmZvY3Vz''@;'; put 'put ''SGFuZGxlcj1mfXNldCBwb3NpdGlvbihhKXtzd2l0Y2goYSl7Y2FzZSJ0b3AtcmlnaHQiOnRoaXMuYW5jaG9yUG9pbnQ9QWkuVE9QX1JJR0hULHRoaXMucG9wb3ZlclBvaW50PUFpLlJJR0hUX0JPVFRPTTticmVhaztjYXNlInRvcC1sZWZ0Ijp0aGlzLmFuY2hvclBvaW50PUFpLlRPUF9MRUZU''@;'; put 'put ''LHRoaXMucG9wb3ZlclBvaW50PUFpLkxFRlRfQk9UVE9NO2JyZWFrO2Nhc2UiYm90dG9tLXJpZ2h0Ijp0aGlzLmFuY2hvclBvaW50PUFpLkJPVFRPTV9SSUdIVCx0aGlzLnBvcG92ZXJQb2ludD1BaS5SSUdIVF9UT1A7YnJlYWs7Y2FzZSJib3R0b20tbGVmdCI6ZGVmYXVsdDp0aGlzLmFuY2hv''@;'; put 'put ''clBvaW50PUFpLkJPVFRPTV9MRUZULHRoaXMucG9wb3ZlclBvaW50PUFpLkxFRlRfVE9QO2JyZWFrO2Nhc2UicmlnaHQtdG9wIjp0aGlzLmFuY2hvclBvaW50PUFpLlJJR0hUX1RPUCx0aGlzLnBvcG92ZXJQb2ludD1BaS5MRUZUX1RPUDticmVhaztjYXNlInJpZ2h0LWJvdHRvbSI6dGhpcy5h''@;'; put 'put ''bmNob3JQb2ludD1BaS5SSUdIVF9CT1RUT00sdGhpcy5wb3BvdmVyUG9pbnQ9QWkuTEVGVF9CT1RUT007YnJlYWs7Y2FzZSJsZWZ0LXRvcCI6dGhpcy5hbmNob3JQb2ludD1BaS5MRUZUX1RPUCx0aGlzLnBvcG92ZXJQb2ludD1BaS5SSUdIVF9UT1A7YnJlYWs7Y2FzZSJsZWZ0LWJvdHRvbSI6''@;'; put 'put ''dGhpcy5hbmNob3JQb2ludD1BaS5MRUZUX0JPVFRPTSx0aGlzLnBvcG92ZXJQb2ludD1BaS5SSUdIVF9CT1RUT019fW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuZm9jdXNIYW5kbGVyLmNvbnRhaW5lcj10aGlzLmVsLm5hdGl2ZUVsZW1lbnQsdGhpcy5pdGVtcy5jaGFuZ2VzLnN1YnNjcmli''@;'; put 'put ''ZSgoKT0+dGhpcy5mb2N1c0hhbmRsZXIuYWRkQ2hpbGRyZW4odGhpcy5pdGVtcy50b0FycmF5KCkpKSx0aGlzLml0ZW1zLm5vdGlmeU9uQ2hhbmdlcygpfW5nT25EZXN0cm95KCl7c3VwZXIubmdPbkRlc3Ryb3koKSx0aGlzLmZvY3VzSGFuZGxlci5yZXNldENoaWxkcmVuKCl9fXJldHVybiBj''@;'; put 'put ''Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKERzKSxHZShJTCw4KSxHZShjLDEyKSxHZShGTCkpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZHJvcGRvd24tbWVudSJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYo''@;'; put 'put ''MSZhJiZsYShoLFBMLDQpLDImYSl7bGV0IGY7eGkoZj1FaSgpKSYmKGQuaXRlbXM9Zil9fSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGRyKCJyb2xlIiwibWVudSIpLHhyKCJkcm9wZG93bi1tZW51IiwhMCkpfSxpbnB1dHM6e3Bvc2l0aW9uOltabi5Ob25l''@;'; put 'put ''LCJjbHJQb3NpdGlvbiIsInBvc2l0aW9uIl19LGZlYXR1cmVzOltDb10sbmdDb250ZW50U2VsZWN0b3JzOnlhLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobG8oKSxXcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGY3PSgoKT0+e2NsYXNzIGN7Y29u''@;'; put 'put ''c3RydWN0b3IoYSxkLGgsZil7dGhpcy50b2dnbGVTZXJ2aWNlPWQsdGhpcy5pc1Jvb3RMZXZlbFRvZ2dsZT0hMCxhLnBhcmVudCYmKHRoaXMuaXNSb290TGV2ZWxUb2dnbGU9ITEpLGYudHJpZ2dlcj1oLm5hdGl2ZUVsZW1lbnR9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLnRvZ2dsZVNlcnZp''@;'; put 'put ''Y2Uub3Blbn1vbkRyb3Bkb3duVHJpZ2dlckNsaWNrKGEpe3RoaXMudG9nZ2xlU2VydmljZS50b2dnbGVXaXRoRXZlbnQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGlnKSxHZShhYyksR2UoZW8pLEdlKEZMKSl9LGMuXHUwMjc1ZGlyPUVy''@;'; put 'put ''KHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckRyb3Bkb3duVHJpZ2dlciIsIiJdLFsiIiwiY2xyRHJvcGRvd25Ub2dnbGUiLCIiXV0saG9zdFZhcnM6MTAsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uRHJvcGRvd25U''@;'; put 'put ''cmlnZ2VyQ2xpY2soZil9KSwyJmEmJihkcigiYXJpYS1oYXNwb3B1cCIsIm1lbnUiKSgiYXJpYS1leHBhbmRlZCIsZC5hY3RpdmUpLHhyKCJkcm9wZG93bi10b2dnbGUiLGQuaXNSb290TGV2ZWxUb2dnbGUpKCJkcm9wZG93bi1pdGVtIiwhZC5pc1Jvb3RMZXZlbFRvZ2dsZSkoImV4cGFuZGFi''@;'; put 'put ''bGUiLCFkLmlzUm9vdExldmVsVG9nZ2xlKSgiYWN0aXZlIixkLmFjdGl2ZSkpfX0pLGN9KSgpO2NvbnN0IGp6ZT1be3Byb3ZpZGU6UEwsdXNlQ2xhc3M6KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5lbD1hLHRoaXMucmVuZGVyZXI9ZCx0aGlzLnBsYXRmb3JtSWQ9aCx0''@;'; put 'put ''aGlzLmlkPVN1KCksdGhpcy5kaXNhYmxlZD0hMSxkLnNldEF0dHJpYnV0ZShhLm5hdGl2ZUVsZW1lbnQsImlkIix0aGlzLmlkKSxkLnNldEF0dHJpYnV0ZShhLm5hdGl2ZUVsZW1lbnQsInRhYmluZGV4IiwiLTEiKX1mb2N1cygpe1hzKHRoaXMucGxhdGZvcm1JZCkmJih0aGlzLnJlbmRlcmVy''@;'; put 'put ''LnNldEF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsInRhYmluZGV4IiwiMCIpLHRoaXMuZWwubmF0aXZlRWxlbWVudC5mb2N1cygpLHRoaXMuZWwubmF0aXZlRWxlbWVudC5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6InNtb290aCIsYmxvY2s6ImNlbnRlciIsaW5saW5lOiJuZWFy''@;'; put 'put ''ZXN0In0pKX1ibHVyKCl7WHModGhpcy5wbGF0Zm9ybUlkKSYmKHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiLCItMSIpLHRoaXMuZWwubmF0aXZlRWxlbWVudC5ibHVyKCkpfWFjdGl2YXRlKCl7WHModGhpcy5wbGF0Zm9ybUlkKSYm''@;'; put 'put ''dGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsaWNrKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKE1yKGVvKSxNcihFYSksTXIob2EpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKX1dO2xldCBPeT0o''@;'; put 'put ''KCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmRyb3Bkb3duPWEsdGhpcy5fZHJvcGRvd25TZXJ2aWNlPWQsdGhpcy5mb2N1c2FibGVJdGVtPWh9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuZm9jdXNhYmxlSXRlbS5kaXNhYmxlZH1zZXQgZGlzYWJsZWQoYSl7dGhpcy5m''@;'; put 'put ''b2N1c2FibGVJdGVtLmRpc2FibGVkPSEhYXx8IiI9PT1hfWdldCBkcm9wZG93bkl0ZW1JZCgpe3JldHVybiB0aGlzLmZvY3VzYWJsZUl0ZW0uaWR9c2V0IGRyb3Bkb3duSXRlbUlkKGEpe3RoaXMuZm9jdXNhYmxlSXRlbS5pZD1hfW9uRHJvcGRvd25JdGVtQ2xpY2soKXtpZih0aGlzLmRyb3Bk''@;'; put 'put ''b3duLmlzTWVudUNsb3NhYmxlJiYhdGhpcy5kaXNhYmxlZCYmdGhpcy5kcm9wZG93bi50b2dnbGVTZXJ2aWNlLm9wZW4pe2NvbnN0IGE9dGhpcy5maW5kUm9vdERyb3Bkb3duKCk7YS5mb2N1c0hhbmRsZXIuZm9jdXMoKSxhLmZvY3VzSGFuZGxlci5mb2N1c0JhY2tPblRyaWdnZXJXaGVuQ2xv''@;'; put 'put ''c2VkPSExfXNldFRpbWVvdXQoKCk9Pnt0aGlzLmRyb3Bkb3duLmlzTWVudUNsb3NhYmxlJiYhdGhpcy5kaXNhYmxlZCYmdGhpcy5fZHJvcGRvd25TZXJ2aWNlLmNsb3NlTWVudXMoKX0pfW9uU3BhY2VLZXlkb3duKGEpe3RoaXMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uSWZEaXNhYmxlZChh''@;'; put 'put ''KX1vbkVudGVyS2V5ZG93bihhKXt0aGlzLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbklmRGlzYWJsZWQoYSl9c3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uSWZEaXNhYmxlZChhKXt0aGlzLmRpc2FibGVkJiYoYS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkp''@;'; put 'put ''fWZpbmRSb290RHJvcGRvd24oKXtsZXQgYT10aGlzLmRyb3Bkb3duO2Zvcig7YS5wYXJlbnQ7KWE9YS5wYXJlbnQ7cmV0dXJuIGF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGlnKSxHZShWeCksR2UoUEwpKX0sYy5cdTAyNzVkaXI9RXIoe3R5''@;'; put 'put ''cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyRHJvcGRvd25JdGVtIiwiIl1dLGhvc3RWYXJzOjcsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Ecm9wZG93bkl0ZW1DbGljaygpfSkoImtleWRvd24uc3BhY2UiLGZ1bmN0aW9u''@;'; put 'put ''KGYpe3JldHVybiBkLm9uU3BhY2VLZXlkb3duKGYpfSkoImtleWRvd24uZW50ZXIiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uRW50ZXJLZXlkb3duKGYpfSksMiZhJiYoZHIoInJvbGUiLCJtZW51aXRlbSIpKCJhcmlhLWRpc2FibGVkIixkLmRpc2FibGVkKSgiaWQiLGQuZHJvcGRvd25JdGVt''@;'; put 'put ''SWQpLHhyKCJkaXNhYmxlZCIsZC5kaXNhYmxlZCkoImRyb3Bkb3duLWl0ZW0iLCEwKSl9LGlucHV0czp7ZGlzYWJsZWQ6W1puLk5vbmUsImNsckRpc2FibGVkIiwiZGlzYWJsZWQiXSxkcm9wZG93bkl0ZW1JZDpbWm4uTm9uZSwiaWQiLCJkcm9wZG93bkl0ZW1JZCJdfSxmZWF0dXJlczpbcG8o''@;'; put 'put ''W2p6ZV0pXX0pLGN9KSgpLFRZPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xvLEUyLFRzXX0pLGN9KSgpLEFZPSgoKT0+e2NsYXNz''@;'; put 'put ''IGN7c2V0IHRyaWdnZXJFbChhKXt0aGlzLl90cmlnZ2VyRWw9YX1mb2N1c1RyaWdnZXIoKXt0aGlzLl90cmlnZ2VyRWwmJnRoaXMuX3RyaWdnZXJFbC5mb2N1cygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tl''@;'; put 'put ''bjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxrWT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5faWQ9bmV3IFdufWdldCBpZCgpe3JldHVybiB0aGlzLl9pZC5hc09ic2VydmFibGUoKX1zZXRJZChhKXt0aGlzLl9pZC5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9''@;'; put 'put ''ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxITD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXt0aGlzLnRvZ2dsZVNlcnZpY2U9YSx0aGlzLmVsPWQsdGhpcy5zaWdu''@;'; put 'put ''cG9zdElkU2VydmljZT1oLHRoaXMuc2lnbnBvc3RGb2N1c01hbmFnZXI9Zix0aGlzLnBsYXRmb3JtSWQ9TSx0aGlzLmFyaWFFeHBhbmRlZD0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5kb2N1bWVudD12fW5nT25Jbml0KCl7dGhpcy5zaWducG9zdEZvY3VzTWFuYWdlci50cmlnZ2Vy''@;'; put 'put ''RWw9dGhpcy5lbC5uYXRpdmVFbGVtZW50LHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5hcmlhRXhwYW5kZWQ9YTtjb25zdCBkPXRoaXMuaXNPcGVuO3RoaXMuaXNPcGVuPWEsIXRoaXMuaXNPcGVuJiZkJiZ0''@;'; put 'put ''aGlzLmZvY3VzT25DbG9zZSgpfSksdGhpcy5zaWducG9zdElkU2VydmljZS5pZC5zdWJzY3JpYmUoYT0+dGhpcy5hcmlhQ29udHJvbD1hKSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfW9uU2lnbnBvc3RUcmlnZ2VyQ2xpY2so''@;'; put 'put ''YSl7dGhpcy50b2dnbGVTZXJ2aWNlLnRvZ2dsZVdpdGhFdmVudChhKX1mb2N1c09uQ2xvc2UoKXtYcyh0aGlzLnBsYXRmb3JtSWQpJiYhdGhpcy5pc09wZW4mJnRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudD09PXRoaXMuZG9jdW1lbnQuYm9keSYmdGhpcy5zaWducG9zdEZvY3VzTWFuYWdl''@;'; put 'put ''ci5mb2N1c1RyaWdnZXIoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoYWMpLEdlKGVvKSxHZShrWSksR2UoQVkpLEdlKHZzKSxHZShvYSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJTaWducG9zdFRyaWdn''@;'; put 'put ''ZXIiLCIiXV0saG9zdEF0dHJzOlsxLCJzaWducG9zdC10cmlnZ2VyIl0saG9zdFZhcnM6NCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25TaWducG9zdFRyaWdnZXJDbGljayhmKX0pLDImYSYmKGRyKCJhcmlhLWV4cGFu''@;'; put 'put ''ZGVkIixkLmFyaWFFeHBhbmRlZCkoImFyaWEtY29udHJvbHMiLGQuYXJpYUNvbnRyb2wpLHhyKCJhY3RpdmUiLGQuaXNPcGVuKSl9fSksY30pKCksTkw9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmNvbW1vblN0cmluZ3M9YSx0aGlzLnVzZUN1c3RvbVRyaWdnZXI9ITF9c2V0''@;'; put 'put ''IGN1c3RvbVRyaWdnZXIoYSl7dGhpcy51c2VDdXN0b21UcmlnZ2VyPSEhYX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UodHMpKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXNpZ25wb3N0Il1dLGNvbnRlbnRRdWVy''@;'; put 'put ''aWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmxhKGgsSEwsNSksMiZhKXtsZXQgZjt4aShmPUVpKCkpJiYoZC5jdXN0b21UcmlnZ2VyPWYuZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJnhyKCJzaWducG9zdCIsITApfSxpbnB1dHM6e3NpZ25w''@;'; put 'put ''b3N0VHJpZ2dlckFyaWFMYWJlbDpbWm4uTm9uZSwiY2xyU2lnbnBvc3RUcmlnZ2VyQXJpYUxhYmVsIiwic2lnbnBvc3RUcmlnZ2VyQXJpYUxhYmVsIl19LGZlYXR1cmVzOltwbyhbQVksa1ldKSx2ZChbcmddKV0sbmdDb250ZW50U2VsZWN0b3JzOnlhLGRlY2xzOjIsdmFyczoxLGNvbnN0czpb''@;'; put 'put ''WzQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLCJjbHJTaWducG9zdFRyaWdnZXIiLCIiLDEsInNpZ25wb3N0LWFjdGlvbiIsImJ0biIsImJ0bi1zbSIsImJ0bi1pY29uIiwiYnRuLWxpbmsiXSxbInNoYXBlIiwiaW5mby1jaXJjbGUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihs''@;'; put 'put ''bygpLGd0KDAsbkhlLDMsMiwibmctY29udGFpbmVyIiwwKSxXcigxKSksMiZhJiZ4ZSgibmdJZiIsIWQudXNlQ3VzdG9tVHJpZ2dlcil9LGRlcGVuZGVuY2llczpbeW8sY3MsSExdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpO2NvbnN0IHp6ZT17InRvcC1sZWZ0Ijp7YW5jaG9yUG9pbnQ6QWku''@;'; put 'put ''VE9QX0NFTlRFUixwb3BvdmVyUG9pbnQ6QWkuQk9UVE9NX1JJR0hULG9mZnNldFk6LTE2LG9mZnNldFg6MH0sInRvcC1taWRkbGUiOnthbmNob3JQb2ludDpBaS5UT1BfQ0VOVEVSLHBvcG92ZXJQb2ludDpBaS5CT1RUT01fQ0VOVEVSLG9mZnNldFk6LTE2LG9mZnNldFg6MH0sInRvcC1yaWdo''@;'; put 'put ''dCI6e2FuY2hvclBvaW50OkFpLlRPUF9DRU5URVIscG9wb3ZlclBvaW50OkFpLkJPVFRPTV9MRUZULG9mZnNldFk6LTE2LG9mZnNldFg6MH0sInJpZ2h0LXRvcCI6e2FuY2hvclBvaW50OkFpLlJJR0hUX0NFTlRFUixwb3BvdmVyUG9pbnQ6QWkuTEVGVF9CT1RUT00sb2Zmc2V0WTowLG9mZnNl''@;'; put 'put ''dFg6MTZ9LCJyaWdodC1taWRkbGUiOnthbmNob3JQb2ludDpBaS5SSUdIVF9DRU5URVIscG9wb3ZlclBvaW50OkFpLkxFRlRfQ0VOVEVSLG9mZnNldFk6MCxvZmZzZXRYOjE2fSwicmlnaHQtYm90dG9tIjp7YW5jaG9yUG9pbnQ6QWkuUklHSFRfQ0VOVEVSLHBvcG92ZXJQb2ludDpBaS5MRUZU''@;'; put 'put ''X1RPUCxvZmZzZXRZOjAsb2Zmc2V0WDoxNn0sImJvdHRvbS1yaWdodCI6e2FuY2hvclBvaW50OkFpLkJPVFRPTV9DRU5URVIscG9wb3ZlclBvaW50OkFpLlRPUF9MRUZULG9mZnNldFk6MTYsb2Zmc2V0WDowfSwiYm90dG9tLW1pZGRsZSI6e2FuY2hvclBvaW50OkFpLkJPVFRPTV9DRU5URVIs''@;'; put 'put ''cG9wb3ZlclBvaW50OkFpLlRPUF9DRU5URVIsb2Zmc2V0WToxNixvZmZzZXRYOjB9LCJib3R0b20tbGVmdCI6e2FuY2hvclBvaW50OkFpLkJPVFRPTV9DRU5URVIscG9wb3ZlclBvaW50OkFpLlRPUF9SSUdIVCxvZmZzZXRZOjE2LG9mZnNldFg6MH0sImxlZnQtYm90dG9tIjp7YW5jaG9yUG9p''@;'; put 'put ''bnQ6QWkuTEVGVF9DRU5URVIscG9wb3ZlclBvaW50OkFpLlJJR0hUX1RPUCxvZmZzZXRZOjAsb2Zmc2V0WDotMTZ9LCJsZWZ0LW1pZGRsZSI6e2FuY2hvclBvaW50OkFpLkxFRlRfQ0VOVEVSLHBvcG92ZXJQb2ludDpBaS5SSUdIVF9DRU5URVIsb2Zmc2V0WTowLG9mZnNldFg6LTE2fSwibGVm''@;'; put 'put ''dC10b3AiOnthbmNob3JQb2ludDpBaS5MRUZUX0NFTlRFUixwb3BvdmVyUG9pbnQ6QWkuUklHSFRfQk9UVE9NLG9mZnNldFk6MCxvZmZzZXRYOi0xNn0sZGVmYXVsdDp7YW5jaG9yUG9pbnQ6QWkuUklHSFRfQ0VOVEVSLHBvcG92ZXJQb2ludDpBaS5MRUZUX0NFTlRFUixvZmZzZXRZOjAsb2Zm''@;'; put 'put ''c2V0WDoxNn19LFV6ZT1bInRvcC1sZWZ0IiwidG9wLW1pZGRsZSIsInRvcC1yaWdodCIsInJpZ2h0LXRvcCIsInJpZ2h0LW1pZGRsZSIsInJpZ2h0LWJvdHRvbSIsImJvdHRvbS1yaWdodCIsImJvdHRvbS1taWRkbGUiLCJib3R0b20tbGVmdCIsImxlZnQtYm90dG9tIiwibGVmdC1taWRkbGUi''@;'; put 'put ''LCJsZWZ0LXRvcCJdO2xldCBOMWU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEVZe2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQpe2lmKHN1cGVyKGEsZCksdGhpcy5jb21tb25TdHJpbmdzPWgsdGhpcy5zaWducG9zdEZvY3VzTWFuYWdlcj12LHRoaXMucGxhdGZvcm1JZD1NLHRoaXMuc2lnbnBv''@;'; put 'put ''c3RDb250ZW50SWQ9U3UoKSwhZCl0aHJvdyBuZXcgRXJyb3IoImNsci1zaWducG9zdC1jb250ZW50IHNob3VsZCBvbmx5IGJlIHVzZWQgaW5zaWRlIG9mIGEgY2xyLXNpZ25wb3N0Iik7dGhpcy5wb3NpdGlvbj0icmlnaHQtbWlkZGxlIix0aGlzLmNsb3NlT25PdXRzaWRlQ2xpY2s9ITAsZi5z''@;'; put 'put ''ZXRJZCh0aGlzLnNpZ25wb3N0Q29udGVudElkKSx0aGlzLmRvY3VtZW50PUR9Z2V0IHBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3Bvc2l0aW9ufXNldCBwb3NpdGlvbihhKXt0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCx0aGlzLnBvc2l0aW9uKSx0aGlz''@;'; put 'put ''Ll9wb3NpdGlvbj1hJiZVemUuaW5kZXhPZihhKT4tMT9hOiJyaWdodC1taWRkbGUiLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LHRoaXMucG9zaXRpb24pO2NvbnN0IGQ9enplW3RoaXMucG9zaXRpb25dO3RoaXMuYW5jaG9yUG9pbnQ9ZC5hbmNob3JQb2lu''@;'; put 'put ''dCx0aGlzLnBvcG92ZXJQb2ludD1kLnBvcG92ZXJQb2ludCx0aGlzLnBvcG92ZXJPcHRpb25zLm9mZnNldFk9ZC5vZmZzZXRZLHRoaXMucG9wb3Zlck9wdGlvbnMub2Zmc2V0WD1kLm9mZnNldFh9Y2xvc2UoKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMX1uZ09uRGVzdHJveSgpe3N1cGVy''@;'; put 'put ''Lm5nT25EZXN0cm95KCksWHModGhpcy5wbGF0Zm9ybUlkKSYmdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKHRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkmJnRoaXMuc2lnbnBvc3RGb2N1c01hbmFnZXIuZm9jdXNUcmlnZ2VyKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlv''@;'; put 'put ''bihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKERzKSxHZShJTCw4KSxHZSh0cyksR2Uoa1kpLEdlKEFZKSxHZShvYSksR2UodnMpKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXNpZ25wb3N0LWNvbnRlbnQiXV0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rp''@;'; put 'put ''b24oYSxkKXsyJmEmJih0cCgiaWQiLGQuc2lnbnBvc3RDb250ZW50SWQpLHhyKCJzaWducG9zdC1jb250ZW50IiwhMCkpfSxpbnB1dHM6e3NpZ25wb3N0Q2xvc2VBcmlhTGFiZWw6W1puLk5vbmUsImNsclNpZ25wb3N0Q2xvc2VBcmlhTGFiZWwiLCJzaWducG9zdENsb3NlQXJpYUxhYmVsIl0s''@;'; put 'put ''cG9zaXRpb246W1puLk5vbmUsImNsclBvc2l0aW9uIiwicG9zaXRpb24iXX0sZmVhdHVyZXM6W0NvXSxuZ0NvbnRlbnRTZWxlY3RvcnM6aUhlLGRlY2xzOjgsdmFyczozLGNvbnN0czpbWzEsInNpZ25wb3N0LXdyYXAiXSxbMSwicG9wb3Zlci1wb2ludGVyIl0sWzEsInNpZ25wb3N0LWNvbnRl''@;'; put 'put ''bnQtaGVhZGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJzaWducG9zdC1hY3Rpb24iLCJjbG9zZSIsMywiY2xpY2siXSxbInNoYXBlIiwid2luZG93LWNsb3NlIl0sWyJ0YWJpbmRleCIsIjAiLDEsInNpZ25wb3N0LWNvbnRlbnQtYm9keSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYm''@;'; put 'put ''KGxvKHJIZSksZGUoMCwiZGl2IiwwKSxHdCgxLCJkaXYiLDEpLGRlKDIsImRpdiIsMiksV3IoMyksZGUoNCwiYnV0dG9uIiwzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY2xvc2UoKX0pLEd0KDUsImNkcy1pY29uIiw0KSxoZSgpKCksZGUoNiwiZGl2Iiw1KSxXcig3LDEpLGhl''@;'; put 'put ''KCkoKSksMiZhJiYoZmUoNCksZHIoImFyaWEtbGFiZWwiLGQuc2lnbnBvc3RDbG9zZUFyaWFMYWJlbHx8ZC5jb21tb25TdHJpbmdzLmtleXMuc2lnbnBvc3RDbG9zZSkoImFyaWEtY29udHJvbHMiLGQuc2lnbnBvc3RDb250ZW50SWQpLGZlKCksZHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mu''@;'; put 'put ''a2V5cy5jbG9zZSkpfSxkZXBlbmRlbmNpZXM6W2NzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxaemU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe0VzLmFkZEljb25zKGd4LHVPZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3''@;'; put 'put ''NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xvLFRzLExMLEUyXX0pLGN9KSgpLERZPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9pZD1uZXcgV259Z2V0IGlkKCl7cmV0dXJuIHRoaXMuX2lkLmFzT2JzZXJ2YWJsZSgpfXVwZGF0ZUlkKGEpe3Ro''@;'; put 'put ''aXMuX2lkLm5leHQoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLElZPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy50b2dnbGVTZXJ2''@;'; put 'put ''aWNlPWF9b25Nb3VzZUVudGVyVHJpZ2dlcigpe3RoaXMubW91c2VPdmVyVHJpZ2dlcj0hMCx0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMH1vbk1vdXNlTGVhdmVUcmlnZ2VyKCl7dGhpcy5tb3VzZU92ZXJUcmlnZ2VyPSExLHRoaXMuaGlkZUlmTW91c2VPdXQoKX1vbk1vdXNlRW50ZXJDb250''@;'; put 'put ''ZW50KCl7dGhpcy5tb3VzZU92ZXJDb250ZW50PSEwfW9uTW91c2VMZWF2ZUNvbnRlbnQoKXt0aGlzLm1vdXNlT3ZlckNvbnRlbnQ9ITEsdGhpcy5oaWRlSWZNb3VzZU91dCgpfWhpZGVJZk1vdXNlT3V0KCl7c2V0VGltZW91dCgoKT0+eyF0aGlzLm1vdXNlT3ZlclRyaWdnZXImJiF0aGlzLm1v''@;'; put 'put ''dXNlT3ZlckNvbnRlbnQmJih0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSl9LDApfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShNcihhYykpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHA3PSgo''@;'; put 'put ''KT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdG9vbHRpcCJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmeHIoInRvb2x0''@;'; put 'put ''aXAiLCEwKX0sZmVhdHVyZXM6W3BvKFtEWSxJWV0pLHZkKFtyZ10pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eWEsZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihsbygpLFdyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7Y29uc3QgWXplPVsiYm90dG9tLWxl''@;'; put 'put ''ZnQiLCJib3R0b20tcmlnaHQiLCJ0b3AtbGVmdCIsInRvcC1yaWdodCIsInJpZ2h0IiwibGVmdCJdLEd6ZT1bInhzIiwic20iLCJtZCIsImxnIl07bGV0IGc3PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBFWXtjb25zdHJ1Y3RvcihhLGQsaCxmKXtpZihzdXBlcihhLGQpLHRoaXMudG9vbHRpcElk''@;'; put 'put ''U2VydmljZT1oLHRoaXMudG9vbHRpcE1vdXNlU2VydmljZT1mLCFkKXRocm93IG5ldyBFcnJvcigiY2xyLXRvb2x0aXAtY29udGVudCBzaG91bGQgb25seSBiZSB1c2VkIGluc2lkZSBvZiBhIGNsci10b29sdGlwIik7dGhpcy5pZD1TdSgpfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZH1zZXQg''@;'; put 'put ''aWQoYSl7Y29uc3QgZD1hfHwiIjt0aGlzLl9pZD1kLHRoaXMudG9vbHRpcElkU2VydmljZS51cGRhdGVJZChkKX1nZXQgcG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fcG9zaXRpb259c2V0IHBvc2l0aW9uKGEpe2NvbnN0IGQ9dGhpcy5fcG9zaXRpb24saD1ZemUuaW5jbHVkZXMoYSk/YToicmln''@;'; put 'put ''aHQiO3N3aXRjaCh0aGlzLl9wb3NpdGlvbj1oLHRoaXMudXBkYXRlQ3NzQ2xhc3Moe29sZENsYXNzOmB0b29sdGlwLSR7ZH1gLG5ld0NsYXNzOmB0b29sdGlwLSR7aH1gfSksaCl7Y2FzZSJ0b3AtcmlnaHQiOnRoaXMuYW5jaG9yUG9pbnQ9QWkuVE9QX0NFTlRFUix0aGlzLnBvcG92ZXJQb2lu''@;'; put 'put ''dD1BaS5MRUZUX0JPVFRPTTticmVhaztjYXNlInRvcC1sZWZ0Ijp0aGlzLmFuY2hvclBvaW50PUFpLlRPUF9DRU5URVIsdGhpcy5wb3BvdmVyUG9pbnQ9QWkuUklHSFRfQk9UVE9NO2JyZWFrO2Nhc2UiYm90dG9tLXJpZ2h0Ijp0aGlzLmFuY2hvclBvaW50PUFpLkJPVFRPTV9DRU5URVIsdGhp''@;'; put 'put ''cy5wb3BvdmVyUG9pbnQ9QWkuTEVGVF9UT1A7YnJlYWs7Y2FzZSJib3R0b20tbGVmdCI6dGhpcy5hbmNob3JQb2ludD1BaS5CT1RUT01fQ0VOVEVSLHRoaXMucG9wb3ZlclBvaW50PUFpLlJJR0hUX1RPUDticmVhaztjYXNlInJpZ2h0Ijp0aGlzLmFuY2hvclBvaW50PUFpLlJJR0hUX0NFTlRF''@;'; put 'put ''Uix0aGlzLnBvcG92ZXJQb2ludD1BaS5MRUZUX1RPUDticmVhaztjYXNlImxlZnQiOnRoaXMuYW5jaG9yUG9pbnQ9QWkuTEVGVF9DRU5URVIsdGhpcy5wb3BvdmVyUG9pbnQ9QWkuUklHSFRfVE9QO2JyZWFrO2RlZmF1bHQ6IWZ1bmN0aW9uIFd6ZShjKXt0aHJvdyBuZXcgRXJyb3IoYFVuaGFu''@;'; put 'put ''ZGxlZCB2YWx1ZTogJHtjfWApfShoKX19Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5fc2l6ZX1zZXQgc2l6ZShhKXtjb25zdCBkPXRoaXMuX3NpemUsaD1HemUuaW5jbHVkZXMoYSk/YToic20iO3RoaXMuX3NpemU9aCx0aGlzLnVwZGF0ZUNzc0NsYXNzKHtvbGRDbGFzczpgdG9vbHRpcC0ke2R9''@;'; put 'put ''YCxuZXdDbGFzczpgdG9vbHRpcC0ke2h9YH0pfW5nT25Jbml0KCl7dGhpcy5zaXplPXRoaXMuc2l6ZXx8InNtIix0aGlzLnBvc2l0aW9uPXRoaXMucG9zaXRpb258fCJyaWdodCJ9b25Nb3VzZUVudGVyKCl7dGhpcy50b29sdGlwTW91c2VTZXJ2aWNlLm9uTW91c2VFbnRlckNvbnRlbnQoKX1v''@;'; put 'put ''bk1vdXNlTGVhdmUoKXt0aGlzLnRvb2x0aXBNb3VzZVNlcnZpY2Uub25Nb3VzZUxlYXZlQ29udGVudCgpfXVwZGF0ZUNzc0NsYXNzKHtvbGRDbGFzczphLG5ld0NsYXNzOmR9KXt0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxhKSx0aGlzLnJlbmRlcmVy''@;'; put 'put ''LmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxkKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRHMpLEdlKElMLDgpLEdlKERZKSxHZShJWSkpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdG9vbHRpcC1j''@;'; put 'put ''b250ZW50Il1dLGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgibW91c2VlbnRlciIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbk1vdXNlRW50ZXIoKX0pKCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe3JldHVybiBkLm9uTW91c2VMZWF2ZSgpfSksMiZhJiYodHAo''@;'; put 'put ''ImlkIixkLmlkKSxkcigicm9sZSIsInRvb2x0aXAiKSxfZCgib3BhY2l0eSIsMSkseHIoInRvb2x0aXAtY29udGVudCIsITApKX0saW5wdXRzOntpZDoiaWQiLHBvc2l0aW9uOltabi5Ob25lLCJjbHJQb3NpdGlvbiIsInBvc2l0aW9uIl0sc2l6ZTpbWm4uTm9uZSwiY2xyU2l6ZSIsInNpemUi''@;'; put 'put ''XX0sZmVhdHVyZXM6W0NvXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eWEsZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihsbygpLFdyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksbTc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy50b2dn''@;'; put 'put ''bGVTZXJ2aWNlPWEsdGhpcy50b29sdGlwTW91c2VTZXJ2aWNlPWgsdGhpcy5zdWJzPVtdLHRoaXMuc3Vicy5wdXNoKGQuaWQuc3Vic2NyaWJlKGY9PnRoaXMuYXJpYURlc2NyaWJlZEJ5PWYpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vicy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9c2hv''@;'; put 'put ''d1Rvb2x0aXAoKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMH1oaWRlVG9vbHRpcCgpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExfW9uTW91c2VFbnRlcigpe3RoaXMudG9vbHRpcE1vdXNlU2VydmljZS5vbk1vdXNlRW50ZXJUcmlnZ2VyKCl9b25Nb3VzZUxlYXZlKCl7dGhpcy50b29s''@;'; put 'put ''dGlwTW91c2VTZXJ2aWNlLm9uTW91c2VMZWF2ZVRyaWdnZXIoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoYWMpLEdlKERZKSxHZShJWSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJUb29sdGlwVHJpZ2dl''@;'; put 'put ''ciIsIiJdXSxob3N0QXR0cnM6WyJ0YWJpbmRleCIsIjAiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBkLnNob3dUb29sdGlwKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC5oaWRlVG9vbHRpcCgp''@;'; put 'put ''fSkoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25Nb3VzZUVudGVyKCl9KSgibW91c2VsZWF2ZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbk1vdXNlTGVhdmUoKX0pLDImYSYmKGRyKCJhcmlhLWRlc2NyaWJlZGJ5IixkLmFyaWFEZXNjcmliZWRCeSkoInJvbGUiLCJidXR0b24i''@;'; put 'put ''KSx4cigidG9vbHRpcC10cmlnZ2VyIiwhMCkpfX0pLGN9KSgpLCR6ZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMbyxFMixUc119''@;'; put 'put ''KSxjfSkoKSxLemU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbVFksWnplLCR6ZV19KSxjfSkoKTt2YXIgdjc9ZnVuY3Rpb24oYyl7''@;'; put 'put ''cmV0dXJuIGMuVkVSVElDQUw9InZlcnRpY2FsIixjLkhPUklaT05UQUw9Imhvcml6b250YWwiLGMuQ09NUEFDVD0iY29tcGFjdCIsY30odjd8fHt9KTtsZXQgdnA9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMubWluTGFiZWxTaXplPTEsdGhpcy5tYXhMYWJlbFNpemU9MTIsdGhp''@;'; put 'put ''cy5sYXlvdXQ9djcuSE9SSVpPTlRBTCx0aGlzLmxheW91dFZhbHVlcz1PYmplY3Qua2V5cyh2NykubWFwKGE9PnY3W2FdKSx0aGlzLl9sYWJlbFNpemU9Mn1nZXQgbGFiZWxTaXplKCl7cmV0dXJuIHRoaXMuX2xhYmVsU2l6ZX1zZXQgbGFiZWxTaXplKGEpe3RoaXMubGFiZWxTaXplSXNWYWxp''@;'; put 'put ''ZChhKSYmKHRoaXMuX2xhYmVsU2l6ZT1hKX1nZXQgbGF5b3V0Q2xhc3MoKXtyZXR1cm5gY2xyLWZvcm0tJHt0aGlzLmxheW91dH1gfWlzVmVydGljYWwoKXtyZXR1cm4gdGhpcy5sYXlvdXQ9PT12Ny5WRVJUSUNBTH1pc0hvcml6b250YWwoKXtyZXR1cm4gdGhpcy5sYXlvdXQ9PT12Ny5IT1JJ''@;'; put 'put ''Wk9OVEFMfWlzQ29tcGFjdCgpe3JldHVybiB0aGlzLmxheW91dD09PXY3LkNPTVBBQ1R9aXNWYWxpZChhKXtyZXR1cm4gdGhpcy5sYXlvdXRWYWx1ZXMuaW5kZXhPZihhKT4tMX1sYWJlbFNpemVJc1ZhbGlkKGEpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGEpJiZhPj10aGlzLm1pbkxhYmVs''@;'; put 'put ''U2l6ZSYmYTw9dGhpcy5tYXhMYWJlbFNpemV9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHVzPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgs''@;'; put 'put ''Zix2KXt0aGlzLmNvbnRyb2xJZFNlcnZpY2U9YSx0aGlzLmxheW91dFNlcnZpY2U9ZCx0aGlzLm5nQ29udHJvbFNlcnZpY2U9aCx0aGlzLnJlbmRlcmVyPWYsdGhpcy5lbD12LHRoaXMuZW5hYmxlR3JpZD0hMCx0aGlzLnN1YnNjcmlwdGlvbnM9W119Z2V0IGxhYmVsVGV4dCgpe3JldHVybiB0''@;'; put 'put ''aGlzLmVsLm5hdGl2ZUVsZW1lbnQmJnRoaXMuZWwubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudH1uZ09uSW5pdCgpe3RoaXMuaWRBdHRyPXRoaXMuaWRJbnB1dCwodGhpcy5jb250cm9sSWRTZXJ2aWNlfHx0aGlzLm5nQ29udHJvbFNlcnZpY2UpJiZ0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRo''@;'; put 'put ''aXMuZWwubmF0aXZlRWxlbWVudCwiY2xyLWNvbnRyb2wtbGFiZWwiKSx0aGlzLmVuYWJsZUdyaWQmJnRoaXMubGF5b3V0U2VydmljZSYmIXRoaXMubGF5b3V0U2VydmljZS5pc1ZlcnRpY2FsKCkmJnRoaXMuZWwubmF0aXZlRWxlbWVudCYmdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsYXNzTmFt''@;'; put 'put ''ZS5pbmRleE9mKCJjbHItY29sIik8MCYmKHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCJjbHItY29sLTEyIiksdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsYGNsci1jb2wtbWQtJHt0aGlzLmxheW91dFNlcnZpY2UubGFi''@;'; put 'put ''ZWxTaXplfWApKSx0aGlzLmNvbnRyb2xJZFNlcnZpY2UmJiF0aGlzLmZvckF0dHImJnRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuY29udHJvbElkU2VydmljZS5pZENoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuZm9yQXR0cj1hLHRoaXMuaWRBdHRyPXRoaXMuaWRJbnB1dHx8YCR7YX0t''@;'; put 'put ''bGFiZWxgfSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1kaXNhYmxlR3JpZCgpe3RoaXMuZW5hYmxlR3JpZD0hMX1vbkNsaWNrKGEpe3RoaXMucHJldmVudERlZmF1bHRPblNpZ25wb3N0VGFyZ2V0KGEpfXByZXZlbnREZWZh''@;'; put 'put ''dWx0T25TaWducG9zdFRhcmdldChhKXt0aGlzLnNpZ25wb3N0JiZ0aGlzLnNpZ25wb3N0Lm5hdGl2ZUVsZW1lbnQmJnRoaXMuc2lnbnBvc3QubmF0aXZlRWxlbWVudC5jb250YWlucyhhLnRhcmdldCkmJmEucHJldmVudERlZmF1bHQoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEp''@;'; put 'put ''e3JldHVybiBuZXcoYXx8YykoR2UoeWgsOCksR2UodnAsOCksR2UocDEsOCksR2UoRWEpLEdlKGVvKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImxhYmVsIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmxhKGgsTkwsNSxlbyksMiZhKXts''@;'; put 'put ''ZXQgZjt4aShmPUVpKCkpJiYoZC5zaWducG9zdD1mLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgiY2xpY2siLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uQ2xpY2soZil9KSwyJmEmJmRyKCJpZCIsZC5pZEF0dHIpKCJmb3IiLGQuZm9yQXR0''@;'; put 'put ''cil9LGlucHV0czp7aWRJbnB1dDpbWm4uTm9uZSwiaWQiLCJpZElucHV0Il0sZm9yQXR0cjpbWm4uTm9uZSwiZm9yIiwiZm9yQXR0ciJdfX0pLGN9KSgpLHF6ZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgeFl7Y29uc3RydWN0b3IoYSxkKXtzdXBlcihhLGQpLHRoaXMuY29udHJvbElkU2Vydmlj''@;'; put 'put ''ZT1hLHRoaXMuY29udGFpbmVySWRTZXJ2aWNlPWQsdGhpcy5jb250cm9sSWRTdWZmaXg9InN1Y2Nlc3MifX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZSh5aCw4KSxHZShkNyw4KSl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltb''@;'; put 'put ''ImNsci1jb250cm9sLXN1Y2Nlc3MiXV0saG9zdFZhcnM6NSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihkcigiaWQiLGQuaWQpLHhyKCJjbHItc3VidGV4dCIsITApKCJzdWNjZXNzIiwhMCkpfSxmZWF0dXJlczpbQ29dLG5nQ29udGVudFNlbGVjdG9yczp5YSxkZWNsczoxLHZh''@;'; put 'put ''cnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGxvKCksV3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxrZD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMubGF5b3V0U2VydmljZT1hLHRoaXMuY2xhc3NOYW1lPSIifWNvbnRyb2xDbGFzcyhhPVRkLk5PTkUs''@;'; put 'put ''ZD0hMSxoPSIiKXtjb25zdCBmPVt0aGlzLmNsYXNzTmFtZSxoXTtzd2l0Y2goYSl7Y2FzZSBUZC5WQUxJRDpmLnB1c2goImNsci1zdWNjZXNzIik7YnJlYWs7Y2FzZSBUZC5JTlZBTElEOmYucHVzaCgiY2xyLWVycm9yIil9cmV0dXJuIGQmJnRoaXMubGF5b3V0U2VydmljZSYmLTE9PT10aGlz''@;'; put 'put ''LmNsYXNzTmFtZS5pbmRleE9mKCJjbHItY29sIikmJmYucHVzaChgY2xyLWNvbC1tZC0ke3RoaXMubGF5b3V0U2VydmljZS5tYXhMYWJlbFNpemUtdGhpcy5sYXlvdXRTZXJ2aWNlLmxhYmVsU2l6ZX0gY2xyLWNvbC0xMmApLGYuam9pbigiICIpLnRyaW0oKX1pbml0Q29udHJvbENsYXNzKGEs''@;'; put 'put ''ZCl7ZCYmZC5jbGFzc05hbWUmJih0aGlzLmNsYXNzTmFtZT1kLmNsYXNzTmFtZSxkLmNsYXNzTmFtZS5zcGxpdCgiICIpLmZvckVhY2goZj0+e2Yuc3RhcnRzV2l0aCgiY2xyLWNvbCIpJiZhLnJlbW92ZUNsYXNzKGQsZil9KSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1''@;'; put 'put ''cm4gbmV3KGF8fGMpKE1yKHZwLDgpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxiNz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPWEsdGhpcy5sYXlvdXRTZXJ2aWNlPWQs''@;'; put 'put ''dGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlPWgsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPWYsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGEuc3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUodj0+e3RoaXMuc3RhdGU9dixzZXRUaW1lb3V0KCgpPT57dGhpcy51cGRh''@;'; put 'put ''dGVIZWxwZXJzKCl9KX0pKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChmLmNvbnRyb2xDaGFuZ2VzLnN1YnNjcmliZSh2PT57dGhpcy5jb250cm9sPXZ9KSxmLmFkZGl0aW9uYWxDb250cm9sc0NoYW5nZXMuc3Vic2NyaWJlKHY9Pnt0aGlzLmFkZGl0aW9uYWxDb250cm9scz12fSkpfWdldCBz''@;'; put 'put ''aG93SGVscGVyKCl7cmV0dXJuISF0aGlzLmNvbnRyb2xIZWxwZXJDb21wb25lbnR9Z2V0IHNob3dWYWxpZCgpe3JldHVybiB0aGlzLnRvdWNoZWQmJnRoaXMuc3RhdGU9PT1UZC5WQUxJRCYmdGhpcy5zdWNjZXNzTWVzc2FnZVByZXNlbnR9Z2V0IHNob3dJbnZhbGlkKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''dG91Y2hlZCYmdGhpcy5zdGF0ZT09PVRkLklOVkFMSUQmJnRoaXMuZXJyb3JNZXNzYWdlUHJlc2VudH1nZXQgc3VjY2Vzc01lc3NhZ2VQcmVzZW50KCl7cmV0dXJuISF0aGlzLmNvbnRyb2xTdWNjZXNzQ29tcG9uZW50fWdldCBlcnJvck1lc3NhZ2VQcmVzZW50KCl7cmV0dXJuISF0aGlzLmNv''@;'; put 'put ''bnRyb2xFcnJvckNvbXBvbmVudH1nZXQgdG91Y2hlZCgpe3JldHVybiEoIXRoaXMuY29udHJvbD8udG91Y2hlZCYmIXRoaXMuYWRkaXRpb25hbENvbnRyb2xzPy5zb21lKGE9PmEudG91Y2hlZCkpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMudXBkYXRlSGVscGVycygpfW5nT25EZXN0cm95''@;'; put 'put ''KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1jb250cm9sQ2xhc3MoKXtyZXR1cm4gdGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlLmNvbnRyb2xDbGFzcyghdGhpcy5jb250cm9sU3VjY2Vzc0NvbXBvbmVudCYmdGhpcy5zdGF0ZT09PVRkLlZBTElEfHwh''@;'; put 'put ''dGhpcy50b3VjaGVkP1RkLk5PTkU6dGhpcy5zdGF0ZSx0aGlzLmFkZEdyaWQoKSl9YWRkR3JpZCgpe3JldHVybiB0aGlzLmxheW91dFNlcnZpY2UmJiF0aGlzLmxheW91dFNlcnZpY2UuaXNWZXJ0aWNhbCgpfXVwZGF0ZUhlbHBlcnMoKXt0aGlzLm5nQ29udHJvbFNlcnZpY2UmJnRoaXMubmdD''@;'; put 'put ''b250cm9sU2VydmljZS5zZXRIZWxwZXJzKHtzaG93OnRoaXMuc2hvd0ludmFsaWR8fHRoaXMuc2hvd0hlbHBlcnx8dGhpcy5zaG93VmFsaWQsc2hvd0ludmFsaWQ6dGhpcy5zaG93SW52YWxpZCxzaG93SGVscGVyOnRoaXMuc2hvd0hlbHBlcixzaG93VmFsaWQ6dGhpcy5zaG93VmFsaWR9KX19''@;'; put 'put ''cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoQWQpLEdlKHZwLDgpLEdlKGtkKSxHZShwMSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihsYShoLHVzLDUpLGxhKGgscXplLDUp''@;'; put 'put ''LGxhKGgsT3plLDUpLGxhKGgsT0wsNSkpLDImYSl7bGV0IGY7eGkoZj1FaSgpKSYmKGQubGFiZWw9Zi5maXJzdCkseGkoZj1FaSgpKSYmKGQuY29udHJvbFN1Y2Nlc3NDb21wb25lbnQ9Zi5maXJzdCkseGkoZj1FaSgpKSYmKGQuY29udHJvbEVycm9yQ29tcG9uZW50PWYuZmlyc3QpLHhpKGY9''@;'; put 'put ''RWkoKSkmJihkLmNvbnRyb2xIZWxwZXJDb21wb25lbnQ9Zi5maXJzdCl9fX0pLGN9KSgpO2NsYXNzIFZMe2NvbnN0cnVjdG9yKGwsYSxkPTApe2lmKHRoaXMuaW5qZWN0b3I9YS5pbmplY3RvciwhdGhpcy5pbmplY3Rvci5nZXQobCxudWxsKSl7Y29uc3QgaD10aGlzLmluamVjdG9yLmdldCh6''@;'; put 'put ''NSksZj10aGlzLmluamVjdG9yLmdldChlbyk7YS5jcmVhdGVDb21wb25lbnQoaC5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShJemUpKTtjb25zdCB2PWgucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkobCksTT1bXTtNW2RdPVtmLm5hdGl2ZUVsZW1lbnRdO2NvbnN0IEQ9YS5jcmVhdGVDb21wb25l''@;'; put 'put ''bnQodix2b2lkIDAsdm9pZCAwLE0pO2EucmVtb3ZlKDApLHRoaXMuaW5qZWN0b3I9RC5pbmplY3Rvcn19Z2V0KGwsYSl7cmV0dXJuIHRoaXMuaW5qZWN0b3IuZ2V0KGwsYSl9fWxldCBSWT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fdG91Y2hlZD1uZXcgV259Z2V0IHRvdWNo''@;'; put 'put ''ZWRDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fdG91Y2hlZC5hc09ic2VydmFibGUoKX1tYXJrQXNUb3VjaGVkKCl7dGhpcy5fdG91Y2hlZC5uZXh0KCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9y''@;'; put 'put ''eTpjLlx1MDI3NWZhY30pLGN9KSgpO3ZhciBMWT1mdW5jdGlvbihjKXtyZXR1cm4gYy5GT1JNPSJmb3JtIixjLk1PREVMPSJtb2RlbCIsY30oTFl8fHt9KTtsZXQgeTc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7dGhpcy52Y3I9YSx0aGlzLndyYXBwZXJUeXBlPWQs''@;'; put 'put ''dGhpcy5fbmdDb250cm9sPWYsdGhpcy5yZW5kZXJlcj12LHRoaXMuZWw9TSx0aGlzLmluZGV4PTAsdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuYWRkaXRpb25hbERpZmZlcj1uZXcgTWFwLGgmJih0aGlzLm5nQ29udHJvbFNlcnZpY2U9aC5nZXQocDEsbnVsbCksdGhpcy5pZkNvbnRyb2xT''@;'; put 'put ''dGF0ZVNlcnZpY2U9aC5nZXQoQWQsbnVsbCksdGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlPWguZ2V0KGtkLG51bGwpLHRoaXMubWFya0NvbnRyb2xTZXJ2aWNlPWguZ2V0KFJZLG51bGwpLHRoaXMuZGlmZmVycz1oLmdldChfTSxudWxsKSksdGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlJiZ0aGlz''@;'; put 'put ''LmNvbnRyb2xDbGFzc1NlcnZpY2UuaW5pdENvbnRyb2xDbGFzcyh2LE0ubmF0aXZlRWxlbWVudCksdGhpcy5tYXJrQ29udHJvbFNlcnZpY2UmJnRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubWFya0NvbnRyb2xTZXJ2aWNlLnRvdWNoZWRDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5t''@;'; put 'put ''YXJrQXNUb3VjaGVkKCl9KSksdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlJiZ0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLm5nQ29udHJvbFNlcnZpY2UuaGVscGVyc0NoYW5nZS5zdWJzY3JpYmUoRD0+e3RoaXMuc2V0QXJpYURlc2NyaWJlZEJ5KEQpfSkpfWdldCBpZCgpe3JldHVybiB0aGlz''@;'; put 'put ''Ll9pZH1zZXQgaWQoYSl7dGhpcy5faWQ9YSx0aGlzLmNvbnRyb2xJZFNlcnZpY2UmJih0aGlzLmNvbnRyb2xJZFNlcnZpY2UuaWQ9YSl9Z2V0IGhhc0FkZGl0aW9uYWxDb250cm9scygpe3JldHVybiB0aGlzLmFkZGl0aW9uYWxEaWZmZXIuc2l6ZT4wfW5nT25Jbml0KCl7dGhpcy5fY29udGFp''@;'; put 'put ''bmVySW5qZWN0b3I9bmV3IFZMKHRoaXMud3JhcHBlclR5cGUsdGhpcy52Y3IsdGhpcy5pbmRleCksdGhpcy5jb250cm9sSWRTZXJ2aWNlPXRoaXMuX2NvbnRhaW5lckluamVjdG9yLmdldCh5aCksdGhpcy5jb250YWluZXJJZFNlcnZpY2U9dGhpcy5fY29udGFpbmVySW5qZWN0b3IuZ2V0KGQ3''@;'; put 'put ''LG51bGwpLHRoaXMuX2lkP3RoaXMuY29udHJvbElkU2VydmljZS5pZD10aGlzLl9pZDp0aGlzLl9pZD10aGlzLmNvbnRyb2xJZFNlcnZpY2UuaWQsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlJiZ0aGlzLl9uZ0NvbnRyb2wmJih0aGlzLm5nQ29udHJvbFNlcnZpY2UuY29udHJvbD8odGhpcy5uZ0Nv''@;'; put 'put ''bnRyb2w9dGhpcy5uZ0NvbnRyb2xTZXJ2aWNlLmNvbnRyb2wsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlLmFkZEFkZGl0aW9uYWxDb250cm9sKHRoaXMuX25nQ29udHJvbCksdGhpcy5hZGRpdGlvbmFsRGlmZmVyLnNldCh0aGlzLl9uZ0NvbnRyb2wsdGhpcy5kaWZmZXJzLmZpbmQodGhpcy5fbmdD''@;'; put 'put ''b250cm9sKS5jcmVhdGUoKSkpOih0aGlzLm5nQ29udHJvbD10aGlzLl9uZ0NvbnRyb2wsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlLnNldENvbnRyb2wodGhpcy5uZ0NvbnRyb2wpLHRoaXMuZGlmZmVyPXRoaXMuZGlmZmVycy5maW5kKHRoaXMuX25nQ29udHJvbCkuY3JlYXRlKCkpKX1uZ0RvQ2hl''@;'; put 'put ''Y2soKXtpZih0aGlzLnRyaWdnZXJEb0NoZWNrKHRoaXMuZGlmZmVyLHRoaXMubmdDb250cm9sKSx0aGlzLmhhc0FkZGl0aW9uYWxDb250cm9scylmb3IoY29uc3RbYSxkXW9mIHRoaXMuYWRkaXRpb25hbERpZmZlcil0aGlzLnRyaWdnZXJEb0NoZWNrKGQsYSl9bmdPbkRlc3Ryb3koKXt0aGlz''@;'; put 'put ''LnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hPy51bnN1YnNjcmliZSgpKX10cmlnZ2VyVmFsaWRhdGlvbigpe3RoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlJiZ0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZS50cmlnZ2VyU3RhdHVzQ2hhbmdlKCl9Z2V0UHJvdmlkZXJGcm9tQ29udGFpbmVy''@;'; put 'put ''KGEsZCl7dHJ5e3JldHVybiB0aGlzLl9jb250YWluZXJJbmplY3Rvci5nZXQoYSxkKX1jYXRjaHtyZXR1cm4gZH19dHJpZ2dlckRvQ2hlY2soYSxkKXtpZihhKXtjb25zdCBoPWEuZGlmZihkKTtoJiZoLmZvckVhY2hDaGFuZ2VkSXRlbShmPT57KGYua2V5PT09TFkuRk9STXx8Zi5rZXk9PT1M''@;'; put 'put ''WS5NT0RFTCkmJmYuY3VycmVudFZhbHVlIT09Zi5wcmV2aW91c1ZhbHVlJiZ0aGlzLnRyaWdnZXJWYWxpZGF0aW9uKCl9KX19bWFya0FzVG91Y2hlZCgpe3RoaXMubmdDb250cm9sJiYodGhpcy5uZ0NvbnRyb2wuY29udHJvbC5tYXJrQXNUb3VjaGVkKCksdGhpcy5uZ0NvbnRyb2wuY29udHJv''@;'; put 'put ''bC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCkpLHRoaXMubmdDb250cm9sU2VydmljZSYmdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlLmhhc0FkZGl0aW9uYWxDb250cm9scyYmdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlLmFkZGl0aW9uYWxDb250cm9scz8uZm9yRWFjaChhPT57YS5jb250cm9sLm1hcmtB''@;'; put 'put ''c1RvdWNoZWQoKSxhLmNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpfSl9c2V0QXJpYURlc2NyaWJlZEJ5KGEpe2lmKGEuc2hvdyl7Y29uc3QgZD10aGlzLmdldEFyaWFEZXNjcmliZWRCeUlkKGEpO2lmKG51bGwhPT1kKXJldHVybiB2b2lkIHRoaXMucmVuZGVyZXIuc2V0QXR0cmli''@;'; put 'put ''dXRlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiYXJpYS1kZXNjcmliZWRieSIsZCl9dGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJhcmlhLWRlc2NyaWJlZGJ5Iil9Z2V0QXJpYURlc2NyaWJlZEJ5SWQoYSl7Y29uc3QgZD10aGlzLmNvbnRhaW5l''@;'; put 'put ''cklkU2VydmljZT8uaWR8fHRoaXMuY29udHJvbElkU2VydmljZT8uaWQ7aWYoIWQpcmV0dXJuIG51bGw7Y29uc3QgaD1bYCR7ZH0taGVscGVyYF07cmV0dXJuIGEuc2hvd0ludmFsaWQ/aC5wdXNoKGAke2R9LWVycm9yYCk6YS5zaG93VmFsaWQmJmgucHVzaChgJHtkfS1zdWNjZXNzYCksaC5q''@;'; put 'put ''b2luKCIgIil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKERhKSxHZShWNiksR2UoRHMpLEdlKGgxKSxHZShFYSksR2UoZW8pKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6Yyxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEm''@;'; put 'put ''YSYmRnQoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQudHJpZ2dlclZhbGlkYXRpb24oKX0pLDImYSYmdHAoImlkIixkLmlkKX0saW5wdXRzOntpZDoiaWQifX0pLGN9KSgpLGoxZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5sYXlvdXRTZXJ2aWNlPWEsdGhpcy5tYXJr''@;'; put 'put ''Q29udHJvbFNlcnZpY2U9ZH1zZXQgbGFiZWxTaXplKGEpe2NvbnN0IGQ9cGFyc2VJbnQoYSwxMCl8fDI7dGhpcy5sYXlvdXRTZXJ2aWNlLmxhYmVsU2l6ZT1kfW9uRm9ybVN1Ym1pdCgpe3RoaXMubWFya0FzVG91Y2hlZCgpfW1hcmtBc1RvdWNoZWQoKXt0aGlzLm1hcmtDb250cm9sU2Vydmlj''@;'; put 'put ''ZS5tYXJrQXNUb3VjaGVkKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHZwKSxHZShSWSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJGb3JtIiwiIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxo''@;'; put 'put ''KXtpZigxJmEmJmxhKGgsdXMsNSksMiZhKXtsZXQgZjt4aShmPUVpKCkpJiYoZC5sYWJlbHM9Zil9fSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoInN1Ym1pdCIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkZvcm1TdWJtaXQoKX0pLDImYSYmeHIoImNsci1m''@;'; put 'put ''b3JtIiwhMCkoImNsci1mb3JtLWhvcml6b250YWwiLGQubGF5b3V0U2VydmljZS5pc0hvcml6b250YWwoKSkoImNsci1mb3JtLWNvbXBhY3QiLGQubGF5b3V0U2VydmljZS5pc0NvbXBhY3QoKSl9LGlucHV0czp7bGFiZWxTaXplOltabi5Ob25lLCJjbHJMYWJlbFNpemUiLCJsYWJlbFNpemUi''@;'; put 'put ''XX0sZmVhdHVyZXM6W3BvKFt2cCxSWV0pXX0pLGN9KSgpLGl1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtFcy5hZGRJY29ucyhwaCxnaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAy''@;'; put 'put ''NzVpbmo9QXIoe2ltcG9ydHM6W0xvLFRzXX0pLGN9KSgpO2NvbnN0IE9ZPW5ldyBTdCgiSVNfVE9HR0xFIiksZVVlPXtwcm92aWRlOk9ZLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gUXplKCl7cmV0dXJuIG5ldyBRcighMSl9fTtsZXQgRGQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlz''@;'; put 'put ''LnRvZ2dsZT0hMSx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goYS5zdWJzY3JpYmUoZD0+e3RoaXMudG9nZ2xlPWR9KSl9bmdPbkluaXQoKXt0aGlzLmxhYmVsJiZ0aGlzLmxhYmVsLmRpc2FibGVHcmlkKCl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlw''@;'; put 'put ''dGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShPWSkpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItY2hlY2tib3gtd3JhcHBlciJdLFsiY2xyLXRvZ2dsZS13''@;'; put 'put ''cmFwcGVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihsYShoLHVzLDcpLGxhKGgsVzEsNykpLDImYSl7bGV0IGY7eGkoZj1FaSgpKSYmKGQubGFiZWw9Zi5maXJzdCkseGkoZj1FaSgpKSYmKGQuY2hlY2tib3g9Zi5maXJzdCl9fSxob3N0VmFyczo2LGhvc3RC''@;'; put 'put ''aW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmeHIoImNsci1jaGVja2JveC13cmFwcGVyIiwhZC50b2dnbGUpKCJjbHItY2hlY2tib3gtd3JhcHBlci1kaXNhYmxlZCIsbnVsbD09ZC5jaGVja2JveD9udWxsOmQuY2hlY2tib3guY29udHJvbERpc2FibGVkKSgiY2xyLXRvZ2dsZS13cmFwcGVy''@;'; put 'put ''IixkLnRvZ2dsZSl9LGZlYXR1cmVzOltwbyhbeWgsZVVlXSldLG5nQ29udGVudFNlbGVjdG9yczphSGUsZGVjbHM6Myx2YXJzOjEsY29uc3RzOltbNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGxvKG9IZSksV3IoMCksV3IoMSwxKSxndCgyLHNIZSwxLDAsImxhYmVs''@;'; put 'put ''IiwwKSksMiZhJiYoZmUoMikseGUoIm5nSWYiLCFkLmxhYmVsKSl9LGRlcGVuZGVuY2llczpbeW8sdXNdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFcxPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyB5N3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7c3VwZXIoYSxEZCxkLGgsZix2KSx0aGlzLmNv''@;'; put 'put ''bnRyb2w9aCx0aGlzLnRvZ2dsZT1NfWdldCBjb250cm9sRGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5jb250cm9sPy5kaXNhYmxlZH1uZ09uSW5pdCgpe3N1cGVyLm5nT25Jbml0KCk7Y29uc3QgYT10aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihPWSxudWxsKTthJiZudWxsIT09dGhpcy50''@;'; put 'put ''b2dnbGUmJmEubmV4dCghMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKERhKSxHZShEcyksR2UoaDEsMTApLEdlKEVhKSxHZShlbykseGYoImNsclRvZ2dsZSIpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xy''@;'; put 'put ''Q2hlY2tib3giLCIiXSxbIiIsImNsclRvZ2dsZSIsIiJdXSxmZWF0dXJlczpbQ29dfSksY30pKCksUHk9KCgpPT57Y2xhc3MgYyBleHRlbmRzIGI3e2NvbnN0cnVjdG9yKGEsZCxoLGYpe3N1cGVyKGYsYSxkLGgpLHRoaXMubGF5b3V0U2VydmljZT1hLHRoaXMuY29udHJvbENsYXNzU2Vydmlj''@;'; put 'put ''ZT1kLHRoaXMubmdDb250cm9sU2VydmljZT1oLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPWYsdGhpcy5pbmxpbmU9ITF9Z2V0IGNscklubGluZSgpe3JldHVybiB0aGlzLmlubGluZX1zZXQgY2xySW5saW5lKGEpe3RoaXMuaW5saW5lPSJzdHJpbmciPT10eXBlb2YgYT8iZmFsc2UiIT09''@;'; put 'put ''YTohIWF9Z2V0IGFsbENoZWNrYm94ZXNEaXNhYmxlZCgpe3JldHVybiB0aGlzLmNvbnRyb2w/LmRpc2FibGVkJiYoIXRoaXMuYWRkaXRpb25hbENvbnRyb2xzPy5sZW5ndGh8fHRoaXMuYWRkaXRpb25hbENvbnRyb2xzLmV2ZXJ5KGE9PmEuZGlzYWJsZWQpKX1uZ0FmdGVyQ29udGVudEluaXQo''@;'; put 'put ''KXt0aGlzLnNldEFyaWFSb2xlcygpfXNldEFyaWFSb2xlcygpe3RoaXMucm9sZT10aGlzLmNoZWNrYm94ZXMubGVuZ3RoPyJncm91cCI6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UodnAsOCksR2Uoa2QpLEdlKHAxKSxHZShBZCkpfSxj''@;'; put 'put ''Llx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItY2hlY2tib3gtY29udGFpbmVyIl0sWyJjbHItdG9nZ2xlLWNvbnRhaW5lciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZsYShoLFcxLDUpLDImYSl7bGV0IGY7eGkoZj1FaSgpKSYmKGQuY2hl''@;'; put 'put ''Y2tib3hlcz1mKX19LGhvc3RWYXJzOjcsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoZHIoInJvbGUiLGQucm9sZSkseHIoImNsci1mb3JtLWNvbnRyb2wiLCEwKSgiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsZC5hbGxDaGVja2JveGVzRGlzYWJsZWQpKCJjbHItcm93Iixk''@;'; put 'put ''LmFkZEdyaWQoKSkpfSxpbnB1dHM6e2NscklubGluZToiY2xySW5saW5lIn0sZmVhdHVyZXM6W3BvKFtBZCxwMSxrZCxkN10pLENvXSxuZ0NvbnRlbnRTZWxlY3RvcnM6Y0hlLGRlY2xzOjYsdmFyczo2LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJu''@;'; put 'put ''Z0NsYXNzIl0sWyJjbGFzcyIsImNsci1zdWJ0ZXh0LXdyYXBwZXIiLDQsIm5nSWYiXSxbMSwiY2xyLXN1YnRleHQtd3JhcHBlciJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4i''@;'; put 'put ''LCJ0cnVlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdl''@;'; put 'put ''ciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihs''@;'; put 'put ''byhsSGUpLFdyKDApLGd0KDEsdUhlLDEsMCwibGFiZWwiLDApLGRlKDIsImRpdiIsMSksV3IoMywxKSxndCg0LGRIZSwyLDAsImRpdiIsMikoNSxtSGUsNSw0LCJkaXYiLDIpLGhlKCkpLDImYSYmKGZlKCkseGUoIm5nSWYiLCFkLmxhYmVsJiZkLmFkZEdyaWQoKSksZmUoKSx4cigiY2xyLWNv''@;'; put 'put ''bnRyb2wtaW5saW5lIixkLmNscklubGluZSkseGUoIm5nQ2xhc3MiLGQuY29udHJvbENsYXNzKCkpLGZlKDIpLHhlKCJuZ0lmIixkLnNob3dIZWxwZXIpLGZlKCkseGUoIm5nSWYiLGQuc2hvd0ludmFsaWR8fGQuc2hvd1ZhbGlkKSl9LGRlcGVuZGVuY2llczpbd3UseW8sY3MsdXNdLGVuY2Fw''@;'; put 'put ''c3VsYXRpb246Mn0pLGN9KSgpLHRVZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7RXMuYWRkSWNvbnMocGgsZ2gpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBv''@;'; put 'put ''cnRzOltMbyxUcyxpdSxOeCxpdV19KSxjfSkoKTtmdW5jdGlvbiBHZihjKXtyZXR1cm4gbnVsbCE9PWMmJigic3RyaW5nIj09dHlwZW9mIGM/Yy5sZW5ndGg+PTA6ImJvb2xlYW4iPT10eXBlb2YgYyYmYyl9bGV0IF9oPSgoKT0+e2NsYXNzIGN7Z2V0IHNwaW5uZXJDbGFzcygpe3JldHVybiEw''@;'; put 'put ''fWdldCBpbmxpbmVDbGFzcygpe3JldHVybiB0aGlzLl9pbmxpbmV9c2V0IGNscklubGluZShhKXt0aGlzLl9pbmxpbmU9R2YoYSl9Z2V0IGludmVyc2VDbGFzcygpe3JldHVybiB0aGlzLl9pbnZlcnNlfXNldCBjbHJJbnZlcnNlKGEpe3RoaXMuX2ludmVyc2U9R2YoYSl9Z2V0IHNtYWxsQ2xh''@;'; put 'put ''c3MoKXtyZXR1cm4gdGhpcy5fc21hbGx9c2V0IGNsclNtYWxsKGEpe3RoaXMuX3NtYWxsPUdmKGEpfWdldCBtZWRpdW1DbGFzcygpe3JldHVybiF0aGlzLl9zbWFsbCYmdGhpcy5fbWVkaXVtfXNldCBjbHJNZWRpdW0oYSl7dGhpcy5fbWVkaXVtPUdmKGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9''@;'; put 'put ''ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXNwaW5uZXIiXV0saG9zdFZhcnM6MTEsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoZHIoImFyaWEtYnVzeSIsITApLHhyKCJzcGlubmVyIixkLnNwaW5u''@;'; put 'put ''ZXJDbGFzcykoInNwaW5uZXItaW5saW5lIixkLmlubGluZUNsYXNzKSgic3Bpbm5lci1pbnZlcnNlIixkLmludmVyc2VDbGFzcykoInNwaW5uZXItc20iLGQuc21hbGxDbGFzcykoInNwaW5uZXItbWQiLGQubWVkaXVtQ2xhc3MpKX0saW5wdXRzOntjbHJJbmxpbmU6ImNscklubGluZSIsY2xy''@;'; put 'put ''SW52ZXJzZToiY2xySW52ZXJzZSIsY2xyU21hbGw6ImNsclNtYWxsIixjbHJNZWRpdW06ImNsck1lZGl1bSJ9LG5nQ29udGVudFNlbGVjdG9yczp5YSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGxvKCksV3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSko''@;'; put 'put ''KSxGeT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMb119KSxjfSkoKTt2YXIgZ209ZnVuY3Rpb24oYyl7cmV0dXJuIGMuVkVSVElD''@;'; put 'put ''QUw9InZlcnRpY2FsIixjLkhPUklaT05UQUw9Imhvcml6b250YWwiLGMuQk9USD0iYm90aCIsY30oZ218fHt9KTtsZXQgejFlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLmVsZW1lbnRSZWY9YSx0aGlzLnBsYXRmb3JtSWQ9ZH1nZXQgbmF0aXZlRWxlbWVudCgpe3JldHVy''@;'; put 'put ''biB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudH1mb2N1cygpe1hzKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmZvY3VzKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGVvKSxHZShvYSkpfSxj''@;'; put 'put ''Llx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJLZXlGb2N1c0l0ZW0iLCIiXV19KSxjfSkoKSxIeT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZWxlbWVudFJlZj1hLHRoaXMuZGlyZWN0aW9uPWdtLlZFUlRJQ0FMLHRoaXMuZm9jdXNPbkxvYWQ9ITEs''@;'; put 'put ''dGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuZm9jdXNDaGFuZ2U9bmV3IHFyLHRoaXMuX2N1cnJlbnQ9MH1nZXQgZm9jdXNhYmxlSXRlbXMoKXtyZXR1cm4gdGhpcy5fZm9jdXNhYmxlSXRlbXM/dGhpcy5fZm9jdXNhYmxlSXRlbXM6dGhpcy5jbHJLZXlGb2N1c0l0ZW1zP3RoaXMuY2xyS2V5''@;'; put 'put ''Rm9jdXNJdGVtcy50b0FycmF5KCk6W119c2V0IGZvY3VzYWJsZUl0ZW1zKGEpe0FycmF5LmlzQXJyYXkoYSkmJmEubGVuZ3RoJiYodGhpcy5fZm9jdXNhYmxlSXRlbXM9YSx0aGlzLmluaXRpYWxpemVGb2N1cygpKX1nZXQgbmF0aXZlRWxlbWVudCgpe3JldHVybiB0aGlzLmVsZW1lbnRSZWYu''@;'; put 'put ''bmF0aXZlRWxlbWVudH1nZXQgY3VycmVudCgpe3JldHVybiB0aGlzLl9jdXJyZW50fXNldCBjdXJyZW50KGEpe3RoaXMuX2N1cnJlbnQhPT1hJiYodGhpcy5fY3VycmVudD1hKX1nZXQgY3VycmVudEl0ZW0oKXtyZXR1cm4gdGhpcy5mb2N1c2FibGVJdGVtc1t0aGlzLl9jdXJyZW50XX1nZXQg''@;'; put 'put ''Y3VycmVudEl0ZW1FbGVtZW50KCl7cmV0dXJuIHRoaXMuY3VycmVudEl0ZW0ubmF0aXZlRWxlbWVudD90aGlzLmN1cnJlbnRJdGVtLm5hdGl2ZUVsZW1lbnQ6dGhpcy5jdXJyZW50SXRlbX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZv''@;'; put 'put ''ckl0ZW1VcGRhdGVzKCkpLHRoaXMuaW5pdGlhbGl6ZUZvY3VzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfWhhbmRsZUtleWJvYXJkRXZlbnQoYSl7aWYodGhpcy5jdXJyZW50SXRlbUVsZW1lbnQhPT1hLnRhcmdldCl7Y29u''@;'; put 'put ''c3QgZD10aGlzLmdldEl0ZW1Qb3NpdGlvbihhLnRhcmdldCk7dGhpcy5wb3NpdGlvbkluUmFuZ2UoZCkmJih0aGlzLmN1cnJlbnQ9ZCl9dGhpcy5wcmV2S2V5UHJlc3NlZChhKSYmdGhpcy5jdXJyZW50Rm9jdXNJc05vdEZpcnN0SXRlbSgpP3RoaXMubW92ZVRvKHRoaXMuY3VycmVudC0xKTp0''@;'; put 'put ''aGlzLm5leHRLZXlQcmVzc2VkKGEpJiZ0aGlzLmN1cnJlbnRGb2N1c0lzTm90TGFzdEl0ZW0oKT90aGlzLm1vdmVUbyh0aGlzLmN1cnJlbnQrMSk6YS5jb2RlPT09dG8uSG9tZT90aGlzLm1vdmVUbygwKTphLmNvZGU9PT10by5FbmQmJnRoaXMubW92ZVRvKHRoaXMuZm9jdXNhYmxlSXRlbXMu''@;'; put 'put ''bGVuZ3RoLTEpLHdZKGEpfXNldENsaWNrZWRJdGVtQ3VycmVudChhKXtjb25zdCBkPXRoaXMuZ2V0SXRlbVBvc2l0aW9uKGEudGFyZ2V0KTtkPi0xJiZ0aGlzLm1vdmVUbyhkKX1mb2N1c0N1cnJlbnQoKXt0aGlzLmN1cnJlbnRJdGVtLmZvY3VzKCksdGhpcy5mb2N1c0NoYW5nZS5uZXh0KHRo''@;'; put 'put ''aXMuX2N1cnJlbnQpfW1vdmVUbyhhKXt0aGlzLnBvc2l0aW9uSW5SYW5nZShhKSYmKHRoaXMuY3VycmVudD1hLHRoaXMuZm9jdXNDdXJyZW50KCkpfXBvc2l0aW9uSW5SYW5nZShhKXtyZXR1cm4gYT49MCYmYTx0aGlzLmZvY3VzYWJsZUl0ZW1zLmxlbmd0aH1jdXJyZW50Rm9jdXNJc05vdEZp''@;'; put 'put ''cnN0SXRlbSgpe3JldHVybiB0aGlzLl9jdXJyZW50LTE+PTB9Y3VycmVudEZvY3VzSXNOb3RMYXN0SXRlbSgpe3JldHVybiB0aGlzLl9jdXJyZW50KzE8dGhpcy5mb2N1c2FibGVJdGVtcy5sZW5ndGh9aW5pdGlhbGl6ZUZvY3VzKCl7dGhpcy5mb2N1c2FibGVJdGVtcyYmdGhpcy5mb2N1c2Fi''@;'; put 'put ''bGVJdGVtcy5sZW5ndGgmJih0aGlzLl9jdXJyZW50Pj10aGlzLmZvY3VzYWJsZUl0ZW1zLmxlbmd0aCYmKHRoaXMuX2N1cnJlbnQ9dGhpcy5mb2N1c2FibGVJdGVtcy5sZW5ndGgtMSksdGhpcy5mb2N1c09uTG9hZCYmKHRoaXMuY3VycmVudEl0ZW0uZm9jdXMoKSx0aGlzLmZvY3VzQ2hhbmdl''@;'; put 'put ''LmVtaXQoKSkpfW5leHRLZXlQcmVzc2VkKGEpe2NvbnN0IGQ9UzIoYS5rZXkpO3N3aXRjaCh0aGlzLmRpcmVjdGlvbil7Y2FzZSBnbS5WRVJUSUNBTDpyZXR1cm4gZD09PXRvLkFycm93RG93bjtjYXNlIGdtLkhPUklaT05UQUw6cmV0dXJuIGQ9PT10by5BcnJvd1JpZ2h0O2Nhc2UgZ20uQk9U''@;'; put 'put ''SDpyZXR1cm4gZD09PXRvLkFycm93RG93bnx8ZD09PXRvLkFycm93UmlnaHQ7ZGVmYXVsdDpyZXR1cm4hMX19cHJldktleVByZXNzZWQoYSl7Y29uc3QgZD1TMihhLmtleSk7c3dpdGNoKHRoaXMuZGlyZWN0aW9uKXtjYXNlIGdtLlZFUlRJQ0FMOnJldHVybiBkPT09dG8uQXJyb3dVcDtjYXNl''@;'; put 'put ''IGdtLkhPUklaT05UQUw6cmV0dXJuIGQ9PT10by5BcnJvd0xlZnQ7Y2FzZSBnbS5CT1RIOnJldHVybiBkPT09dG8uQXJyb3dVcHx8ZD09PXRvLkFycm93TGVmdDtkZWZhdWx0OnJldHVybiExfX1nZXRJdGVtUG9zaXRpb24oYSl7cmV0dXJuIHRoaXMuX2ZvY3VzYWJsZUl0ZW1zP3RoaXMuZm9j''@;'; put 'put ''dXNhYmxlSXRlbXMuaW5kZXhPZihhKTp0aGlzLmZvY3VzYWJsZUl0ZW1zLm1hcChkPT5kLm5hdGl2ZUVsZW1lbnQpLmluZGV4T2YoYSl9bGlzdGVuRm9ySXRlbVVwZGF0ZXMoKXtyZXR1cm4gdGhpcy5jbHJLZXlGb2N1c0l0ZW1zLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57dGhpcy5pbml0aWFs''@;'; put 'put ''aXplRm9jdXMoKX0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShlbykpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJLZXlGb2N1cyIsIiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZh''@;'; put 'put ''JiZsYShoLHoxZSw1KSwyJmEpe2xldCBmO3hpKGY9RWkoKSkmJihkLmNscktleUZvY3VzSXRlbXM9Zil9fSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJrZXlkb3duIixmdW5jdGlvbihmKXtyZXR1cm4gZC5oYW5kbGVLZXlib2FyZEV2ZW50KGYpfSkoImNsaWNrIixmdW5j''@;'; put 'put ''dGlvbihmKXtyZXR1cm4gZC5zZXRDbGlja2VkSXRlbUN1cnJlbnQoZil9KX0saW5wdXRzOntkaXJlY3Rpb246W1puLk5vbmUsImNsckRpcmVjdGlvbiIsImRpcmVjdGlvbiJdLGZvY3VzT25Mb2FkOltabi5Ob25lLCJjbHJGb2N1c09uTG9hZCIsImZvY3VzT25Mb2FkIl0sZm9jdXNhYmxlSXRl''@;'; put 'put ''bXM6W1puLk5vbmUsImNscktleUZvY3VzIiwiZm9jdXNhYmxlSXRlbXMiXX0sb3V0cHV0czp7Zm9jdXNDaGFuZ2U6ImNsckZvY3VzQ2hhbmdlIn0sYXR0cnM6dkhlLG5nQ29udGVudFNlbGVjdG9yczp5YSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGxvKCks''@;'; put 'put ''V3IoMCkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxQWT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMb119KSxjfSkoKTtjbGFz''@;'; put 'put ''cyBuVWV7Y29udGFpbnNJdGVtKGwpe3JldHVybiEhdGhpcy5tb2RlbCYmdGhpcy5tb2RlbC5pbmNsdWRlcyhsKX1zZWxlY3QobCl7dGhpcy5hZGRJdGVtKGwpfXVuc2VsZWN0KGwpe3RoaXMucmVtb3ZlSXRlbShsKX1pc0VtcHR5KCl7cmV0dXJuISh0aGlzLm1vZGVsJiZ0aGlzLm1vZGVsLmxl''@;'; put 'put ''bmd0aD4wKX1wb3AoKXtsZXQgbDtyZXR1cm4gdGhpcy5tb2RlbCYmdGhpcy5tb2RlbC5sZW5ndGg+MCYmKGw9dGhpcy5tb2RlbFt0aGlzLm1vZGVsLmxlbmd0aC0xXSx0aGlzLnJlbW92ZUl0ZW0obCkpLGx9dG9TdHJpbmcobCxhPS0xKXtsZXQgZD0iIjtyZXR1cm4gdGhpcy5tb2RlbCYmKGE+''@;'; put 'put ''LTE/dGhpcy5tb2RlbFthXSYmKGQrPWwmJnRoaXMubW9kZWxbYV1bbF0/dGhpcy5tb2RlbFthXVtsXTp0aGlzLm1vZGVsW2FdLnRvU3RyaW5nKCkpOnRoaXMubW9kZWwuZm9yRWFjaChoPT57ZCs9bCYmaFtsXT9oW2xdOmgudG9TdHJpbmcoKSxkKz0iICJ9KSksZC50cmltKCl9YWRkSXRlbShs''@;'; put 'put ''KXt0aGlzLmNvbnRhaW5zSXRlbShsKXx8KHRoaXMubW9kZWw9dGhpcy5tb2RlbHx8W10sdGhpcy5tb2RlbC5wdXNoKGwpKX1yZW1vdmVJdGVtKGwpe2lmKG51bGw9PXRoaXMubW9kZWwpcmV0dXJuO2NvbnN0IGE9dGhpcy5tb2RlbC5pbmRleE9mKGwpO2E+LTEmJnRoaXMubW9kZWwuc3BsaWNl''@;'; put 'put ''KGEsMSksMD09PXRoaXMubW9kZWwubGVuZ3RoJiYodGhpcy5tb2RlbD1udWxsKX19Y2xhc3MgclVle2NvbnRhaW5zSXRlbShsKXtyZXR1cm4gdGhpcy5tb2RlbD09PWx9c2VsZWN0KGwpe3RoaXMubW9kZWw9bH11bnNlbGVjdChsKXt0aGlzLmNvbnRhaW5zSXRlbShsKSYmKHRoaXMubW9kZWw9''@;'; put 'put ''bnVsbCl9aXNFbXB0eSgpe3JldHVybiF0aGlzLm1vZGVsfXBvcCgpe2NvbnN0IGw9dGhpcy5tb2RlbDtyZXR1cm4gdGhpcy5tb2RlbD1udWxsLGx9dG9TdHJpbmcobCl7cmV0dXJuIHRoaXMubW9kZWw/bCYmdGhpcy5tb2RlbFtsXT90aGlzLm1vZGVsW2xdOnRoaXMubW9kZWwudG9TdHJpbmco''@;'; put 'put ''KToiIn19Y2xhc3MgaVVlIGV4dGVuZHMgclVle2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLl9mb2N1c0NoYW5nZWQ9bmV3IFFyKG51bGwpfWdldCBmb2N1c0NoYW5nZWQoKXtyZXR1cm4gdGhpcy5fZm9jdXNDaGFuZ2VkLmFzT2JzZXJ2YWJsZSgpfXNlbGVjdChsKXt0''@;'; put 'put ''aGlzLm1vZGVsIT09bCYmKHRoaXMubW9kZWw9bCx0aGlzLl9mb2N1c0NoYW5nZWQubmV4dChsKSl9fWxldCBvVWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMubG9hZGluZz0hMSx0aGlzLnNob3dBbGxPcHRpb25zPSEwLHRoaXMuX2N1cnJlbnRJbnB1dD0iIix0aGlzLl9pbnB1''@;'; put 'put ''dENoYW5nZWQ9bmV3IFFyKCIiKSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkPW5ldyB2eCgxKSx0aGlzLmlucHV0Q2hhbmdlZD10aGlzLl9pbnB1dENoYW5nZWQuYXNPYnNlcnZhYmxlKCl9Z2V0IGN1cnJlbnRJbnB1dCgpe3JldHVybiB0aGlzLl9jdXJyZW50SW5wdXR9c2V0IGN1cnJlbnRJbnB1''@;'; put 'put ''dChhKXsiIj09PWEmJiF0aGlzLm11bHRpc2VsZWN0YWJsZSYmdGhpcy5zZXRTZWxlY3Rpb25WYWx1ZShudWxsKSx0aGlzLl9jdXJyZW50SW5wdXQ9YSx0aGlzLl9pbnB1dENoYW5nZWQubmV4dChhKX1nZXQgc2VsZWN0aW9uQ2hhbmdlZCgpe3JldHVybiB0aGlzLl9zZWxlY3Rpb25DaGFuZ2Vk''@;'; put 'put ''LmFzT2JzZXJ2YWJsZSgpfWdldCBtdWx0aXNlbGVjdGFibGUoKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25Nb2RlbCBpbnN0YW5jZW9mIG5VZX1zZWxlY3QoYSl7bnVsbD09YXx8dGhpcy5zZWxlY3Rpb25Nb2RlbC5jb250YWluc0l0ZW0oYSl8fCh0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVjdChh''@;'; put 'put ''KSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkLm5leHQodGhpcy5zZWxlY3Rpb25Nb2RlbCkpfXRvZ2dsZShhKXtudWxsIT1hJiYodGhpcy5zZWxlY3Rpb25Nb2RlbC5jb250YWluc0l0ZW0oYSk/dGhpcy5zZWxlY3Rpb25Nb2RlbC51bnNlbGVjdChhKTp0aGlzLnNlbGVjdGlvbk1vZGVsLnNlbGVj''@;'; put 'put ''dChhKSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkLm5leHQodGhpcy5zZWxlY3Rpb25Nb2RlbCkpfXVuc2VsZWN0KGEpe251bGw9PWF8fCF0aGlzLnNlbGVjdGlvbk1vZGVsLmNvbnRhaW5zSXRlbShhKXx8KHRoaXMuc2VsZWN0aW9uTW9kZWwudW5zZWxlY3QoYSksdGhpcy5fc2VsZWN0aW9uQ2hh''@;'; put 'put ''bmdlZC5uZXh0KHRoaXMuc2VsZWN0aW9uTW9kZWwpKX1zZXRTZWxlY3Rpb25WYWx1ZShhKXshdGhpcy5zZWxlY3Rpb25Nb2RlbHx8dGhpcy5zZWxlY3Rpb25Nb2RlbC5tb2RlbD09PWF8fCF0aGlzLnNlbGVjdGlvbk1vZGVsLm1vZGVsJiYhYXx8KHRoaXMuc2VsZWN0aW9uTW9kZWwubW9kZWw9''@;'; put 'put ''YSx0aGlzLl9zZWxlY3Rpb25DaGFuZ2VkLm5leHQodGhpcy5zZWxlY3Rpb25Nb2RlbCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtSMWUoKCgpPT57''@;'; put 'put ''Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnRvZ2dsZVNlcnZpY2U9ZCx0aGlzLnNlbGVjdGlvblNlcnZpY2U9aCx0aGlzLnBsYXRmb3JtSWQ9Zix0aGlzLnBzZXVkb0ZvY3VzPW5ldyBpVWUsdGhpcy5vcHRpb25EYXRhPVtdLHRoaXMuaGFuZGxlRm9jdXNTdWJzY3JpcHRpb24o''@;'; put 'put ''KSx0aGlzLnJlbmRlcmVyPWEuY3JlYXRlUmVuZGVyZXIobnVsbCxudWxsKX1nZXQgdHJpZ2dlcigpe3JldHVybiB0aGlzLl90cmlnZ2VyfXNldCB0cmlnZ2VyKGEpe3RoaXMuX3RyaWdnZXI9YSx0aGlzLmFkZEZvY3VzT25CbHVyTGlzdGVuZXIoYSl9Z2V0IGxpc3Rib3goKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fbGlzdGJveH1zZXQgbGlzdGJveChhKXt0aGlzLl9saXN0Ym94PWEsdGhpcy5hZGRGb2N1c09uQmx1ckxpc3RlbmVyKGEpfWdldCB0ZXh0SW5wdXQoKXtyZXR1cm4gdGhpcy5fdGV4dElucHV0fXNldCB0ZXh0SW5wdXQoYSl7dGhpcy5fdGV4dElucHV0PWEsdGhpcy5yZW5kZXJlci5saXN0''@;'; put 'put ''ZW4oYSwia2V5ZG93biIsZD0+IXRoaXMuaGFuZGxlVGV4dElucHV0KGQpKSx0aGlzLmFkZEZvY3VzT25CbHVyTGlzdGVuZXIoYSl9Zm9jdXNJbnB1dCgpe3RoaXMudGV4dElucHV0JiZYcyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnRleHRJbnB1dC5mb2N1cygpfWZvY3VzRmlyc3RBY3RpdmUo''@;'; put 'put ''KXtpZih0aGlzLm9wdGlvbkRhdGEubGVuZ3RoPjApaWYodGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdGlvbk1vZGVsLmlzRW1wdHkoKSl0aGlzLnBzZXVkb0ZvY3VzLnNlbGVjdCh0aGlzLm9wdGlvbkRhdGFbMF0pO2Vsc2V7bGV0IGE7YT10aGlzLnNlbGVjdGlvblNlcnZpY2UubXVsdGlz''@;'; put 'put ''ZWxlY3RhYmxlP3RoaXMuc2VsZWN0aW9uU2VydmljZS5zZWxlY3Rpb25Nb2RlbC5tb2RlbFswXTp0aGlzLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0aW9uTW9kZWwubW9kZWw7Y29uc3QgZD10aGlzLm9wdGlvbkRhdGEuZmluZChoPT5oLnZhbHVlPT09YSk7dGhpcy5wc2V1ZG9Gb2N1cy5zZWxl''@;'; put 'put ''Y3QoZHx8dGhpcy5vcHRpb25EYXRhWzBdKSx0aGlzLnNjcm9sbEludG9TZWxlY3RlZE1vZGVsKCJhdXRvIil9fWFkZE9wdGlvblZhbHVlcyhhKXt0aGlzLm9wdGlvbkRhdGE9YX1oYW5kbGVGb2N1c1N1YnNjcmlwdGlvbigpe3RoaXMudG9nZ2xlU2VydmljZS5vcGVuQ2hhbmdlLnN1YnNjcmli''@;'; put 'put ''ZShhPT57YXx8KHRoaXMucHNldWRvRm9jdXMubW9kZWw9bnVsbCl9KX1tb3ZlRm9jdXNUbyhhKXtsZXQgZD10aGlzLm9wdGlvbkRhdGEuZmluZEluZGV4KGg9PmguZXF1YWxzKHRoaXMucHNldWRvRm9jdXMubW9kZWwpKTthPT09YmguVVA/LTE9PT1kfHwwPT09ZD9kPXRoaXMub3B0aW9uRGF0''@;'; put 'put ''YS5sZW5ndGgtMTpkLS06YT09PWJoLkRPV04mJigtMT09PWR8fGQ9PT10aGlzLm9wdGlvbkRhdGEubGVuZ3RoLTE/ZD0wOmQrKyksdGhpcy5wc2V1ZG9Gb2N1cy5zZWxlY3QodGhpcy5vcHRpb25EYXRhW2RdKSx0aGlzLnNjcm9sbEludG9TZWxlY3RlZE1vZGVsKCl9b3BlbkFuZE1vdmVUbyhh''@;'; put 'put ''KXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj90aGlzLm1vdmVGb2N1c1RvKGEpOih0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5waXBlKEJmKDEpKS5zdWJzY3JpYmUoZD0+e2QmJnRoaXMubW92ZUZvY3VzVG8oYSl9KSx0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMCl9aGFuZGxlVGV4''@;'; put 'put ''dElucHV0KGEpe2xldCBkPSExO2NvbnN0IGg9UzIoYS5rZXkpO2lmKGEpc3dpdGNoKGgpe2Nhc2UgdG8uRW50ZXI6dGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJnRoaXMucHNldWRvRm9jdXMubW9kZWwmJih0aGlzLnNlbGVjdGlvblNlcnZpY2UubXVsdGlzZWxlY3RhYmxlP3RoaXMuc2VsZWN0''@;'; put 'put ''aW9uU2VydmljZS50b2dnbGUodGhpcy5wc2V1ZG9Gb2N1cy5tb2RlbC52YWx1ZSk6dGhpcy5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdCh0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsLnZhbHVlKSxkPSEwKTticmVhaztjYXNlIHRvLlNwYWNlOnRoaXMudG9nZ2xlU2VydmljZS5vcGVufHwodGhpcy50''@;'; put 'put ''b2dnbGVTZXJ2aWNlLm9wZW49ITAsZD0hMCk7YnJlYWs7Y2FzZSB0by5BcnJvd1VwOnRoaXMucHJldmVudFZpZXdwb3J0U2Nyb2xsaW5nKGEpLHRoaXMub3BlbkFuZE1vdmVUbyhiaC5VUCksZD0hMDticmVhaztjYXNlIHRvLkFycm93RG93bjp0aGlzLnByZXZlbnRWaWV3cG9ydFNjcm9sbGlu''@;'; put 'put ''ZyhhKSx0aGlzLm9wZW5BbmRNb3ZlVG8oYmguRE9XTiksZD0hMDticmVhaztkZWZhdWx0OmEua2V5IT09dG8uVGFiJiYoIXRoaXMuc2VsZWN0aW9uU2VydmljZS5tdWx0aXNlbGVjdGFibGV8fGEua2V5IT09dG8uQmFja3NwYWNlKSYmYS5rZXkhPT10by5Fc2NhcGUmJiF0aGlzLnRvZ2dsZVNl''@;'; put 'put ''cnZpY2Uub3BlbiYmKHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSEwKX1yZXR1cm4gZH1zY3JvbGxJbnRvU2VsZWN0ZWRNb2RlbChhPSJzbW9vdGgiKXt0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsJiZ0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsLmVsJiZ0aGlzLnBzZXVkb0ZvY3VzLm1vZGVsLmVsLnNj''@;'; put 'put ''cm9sbEludG9WaWV3KHtiZWhhdmlvcjphLGJsb2NrOiJjZW50ZXIiLGlubGluZToibmVhcmVzdCJ9KX1wcmV2ZW50Vmlld3BvcnRTY3JvbGxpbmcoYSl7YS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9YWRkRm9jdXNPbkJsdXJMaXN0ZW5lcihhKXtYcyh0''@;'; put 'put ''aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLnJlbmRlcmVyLmxpc3RlbihhLCJibHVyIixkPT57dGhpcy5mb2N1c091dE9mQ29tcG9uZW50KGQpJiYodGhpcy50b2dnbGVTZXJ2aWNlLm9wZW49ITEsdGhpcy5jb21wb25lbnRDZFJlZiYmdGhpcy5jb21wb25lbnRDZFJlZi5kZXRlY3RDaGFuZ2VzKCkp''@;'; put 'put ''fSl9Zm9jdXNPdXRPZkNvbXBvbmVudChhKXtjb25zdCBkPWEucmVsYXRlZFRhcmdldHx8ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtyZXR1cm4hKHRoaXMudGV4dElucHV0LmNvbnRhaW5zKGQpfHx0aGlzLnRyaWdnZXIuY29udGFpbnMoZCl8fHRoaXMubGlzdGJveC5jb250YWlucyhkKSl9fXJl''@;'; put 'put ''dHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKE1yKFM4KSxNcihhYyksTXIob1VlKSxNcihvYSkpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpKTtsZXQgYVVlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3Io''@;'; put 'put ''KXtFcy5hZGRJY29ucyhwaCxnaCx3eSxneCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xvLERjLFRzLFBZLGl1LEUyLEh4LEZ5LGl1LEUyXX0pLGN9KSgp''@;'; put 'put ''LEJMPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBiN3t9cmV0dXJuIGMuXHUwMjc1ZmFjPSgoKT0+e2xldCBsO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4obHx8KGw9WnMoYykpKShkfHxjKX19KSgpLGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1pbnB1dC1jb250YWlu''@;'; put 'put ''ZXIiXV0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJnhyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9udWxsOmQuY29udHJvbC5kaXNhYmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgp''@;'; put 'put ''KX0sZmVhdHVyZXM6W3BvKFtBZCxwMSx5aCxrZF0pLENvXSxuZ0NvbnRlbnRTZWxlY3RvcnM6U0hlLGRlY2xzOjEzLHZhcnM6Nyxjb25zdHM6W1s0LCJuZ0lmIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFsxLCJjbHItaW5wdXQtd3JhcHBlciJdLFsxLCJjbHIt''@;'; put 'put ''aW5wdXQtZ3JvdXAiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiY2hlY2st''@;'; put 'put ''Y2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJZiJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl0sWyJzaGFwZSIsImNoZWNr''@;'; put 'put ''LWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImNsci12YWxpZGF0ZS1pY29uIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobG8oQ0hlKSxXcigwKSxndCgxLE1IZSwxLDAsImxhYmVsIiwwKSxkZSgyLCJkaXYiLDEpKDMsImRpdiIsMiko''@;'; put 'put ''NCwiZGl2IiwzKSxXcig1LDEpLFdyKDYsMiksV3IoNywzKSxoZSgpLGd0KDgseEhlLDEsMCwiY2RzLWljb24iLDQpKDksRUhlLDEsMCwiY2RzLWljb24iLDUpLGhlKCksZ3QoMTAsVEhlLDEsMCwibmctY29udGVudCIsMCkoMTEsQUhlLDEsMCwibmctY29udGVudCIsMCkoMTIsa0hlLDEsMCwi''@;'; put 'put ''bmctY29udGVudCIsMCksaGUoKSksMiZhJiYoZmUoKSx4ZSgibmdJZiIsIWQubGFiZWwmJmQuYWRkR3JpZCgpKSxmZSgpLHhlKCJuZ0NsYXNzIixkLmNvbnRyb2xDbGFzcygpKSxmZSg2KSx4ZSgibmdJZiIsZC5zaG93SW52YWxpZCksZmUoKSx4ZSgibmdJZiIsZC5zaG93VmFsaWQpLGZlKCks''@;'; put 'put ''eGUoIm5nSWYiLGQuc2hvd0hlbHBlciksZmUoKSx4ZSgibmdJZiIsZC5zaG93SW52YWxpZCksZmUoKSx4ZSgibmdJZiIsZC5zaG93VmFsaWQpKX0sZGVwZW5kZW5jaWVzOlt3dSx5byxjcyx1c10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksSWQ9KCgpPT57Y2xhc3MgYyBleHRlbmRzIHk3e2Nv''@;'; put 'put ''bnN0cnVjdG9yKGEsZCxoLGYsdil7c3VwZXIoYSxCTCxkLGgsZix2KSx0aGlzLmluZGV4PTEsIm51bWJlciI9PT10aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCJ0eXBlIikmJmNvbnNvbGUud2FybignV2FybmluZzogSW5wdXRzIG9mIHR5cGUgIm51bWJlciIgc2hvdWxkIHV0''@;'; put 'put ''aWxpemUgdGhlIG51bWJlci1pbnB1dCBjb21wb25lbnQgZm9yIHByb3BlciBoYW5kbGluZy5cblxuICBFeGFtcGxlIHVzYWdlOlxuICA8Y2xyLW51bWJlci1pbnB1dC1jb250YWluZXI+XG4gICAgPGxhYmVsPk51bWJlciBJbnB1dDwvbGFiZWw+XG4gICAgPGlucHV0IGNsck51bWJlcklucHV0''@;'; put 'put ''IHR5cGU9Im51bWJlciIvPlxuICA8L2Nsci1udW1iZXItaW5wdXQtY29udGFpbmVyPlxuICAgICAgJyl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKERhKSxHZShEcyksR2UoaDEsMTApLEdlKEVhKSxHZShlbykpfSxjLlx1MDI3NWRpcj1Fcih7''@;'; put 'put ''dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJJbnB1dCIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmeHIoImNsci1pbnB1dCIsITApfSxmZWF0dXJlczpbQ29dfSksY30pKCksVTFlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtFcy5hZGRJY29u''@;'; put 'put ''cyhwaCxnaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xvLERjLFRzLGl1LGl1XX0pLGN9KSgpLE55PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0''@;'; put 'put ''aGlzLl9mb2N1c2VkPW5ldyBRcighMSl9Z2V0IGZvY3VzQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX2ZvY3VzZWQuYXNPYnNlcnZhYmxlKCl9c2V0IGZvY3VzZWQoYSl7dGhpcy5fZm9jdXNlZC5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0s''@;'; put 'put ''Yy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxzVWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe0VzLmFkZEljb25zKHBoLGdoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9k''@;'; put 'put ''PWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTG8sVTFlLFRzXX0pLGN9KSgpLGxVZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFy''@;'; put 'put ''KHtpbXBvcnRzOltMbyxUcyxOeCxqY119KSxjfSkoKSxjVWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTG8sVHNdfSksY30pKCks''@;'; put 'put ''Z1VlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xvLFRzLFRZXX0pLGN9KSgpLFkxZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5c''@;'; put 'put ''dTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1sibmctY29tcG9uZW50Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmbmEod2wsNSksMiZhKXtsZXQgaDt4aShoPUVpKCkpJiYoZC50ZW1wbGF0''@;'; put 'put ''ZT1oLmZpcnN0KX19LG5nQ29udGVudFNlbGVjdG9yczp5YSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGxvKCksZ3QoMCxOSGUsMSwwLCJuZy10ZW1wbGF0ZSIpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksbVVlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBj''@;'; put 'put ''Llx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xvXX0pLGN9KSgpLG1tPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBUeXt9cmV0dXJuIGMuXHUwMjc1ZmFjPSgoKT0+e2xldCBsO3Jl''@;'; put 'put ''dHVybiBmdW5jdGlvbihkKXtyZXR1cm4obHx8KGw9WnMoYykpKShkfHxjKX19KSgpLGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci10YWJzIl1dLGZlYXR1cmVzOltDb119KSxjfSkoKSxfNz0oKCk9PntjbGFzcyBjIGV4dGVuZHMgQXl7Y29uc3RydWN0b3IoYSxkLGgs''@;'; put 'put ''Zil7aWYoIWQpdGhyb3cgbmV3IEVycm9yKCJjbHJUYWJMaW5rIGFuZCBjbHItdGFiLWNvbnRlbnQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgb2YgYSBjbHItdGFicyIpO3N1cGVyKGEsZCksdGhpcy5pZkFjdGl2ZT1mLHRoaXMuaWQ9aH1nZXQgZmxhdm9yKCl7cmV0dXJuIHRoaXMuaWZB''@;'; put 'put ''Y3RpdmUuY3VycmVudD09PXRoaXMuaWR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHhzKSxHZShtbSw4KSxHZShJeSksR2UodTcpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVGFiTGluayIsIiJdLFsiY2xy''@;'; put 'put ''LXRhYi1jb250ZW50Il1dLGZlYXR1cmVzOltDb119KSxjfSkoKTt2YXIgdzc9ZnVuY3Rpb24oYyl7cmV0dXJuIGMuSE9SSVpPTlRBTD0iaG9yaXpvbnRhbCIsYy5WRVJUSUNBTD0idmVydGljYWwiLGN9KHc3fHx7fSk7bGV0IEJ4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmxh''@;'; put 'put ''eW91dD13Ny5IT1JJWk9OVEFMLHRoaXMuX2NoaWxkcmVuPVtdfWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzLl9jaGlsZHJlbn1nZXQgYWN0aXZlVGFiKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW4uZmluZChhPT5hLmFjdGl2ZSl9Z2V0IG92ZXJmbG93VGFicygpe3JldHVybiB0aGlzLmxheW91''@;'; put 'put ''dD09PXc3LlZFUlRJQ0FMP1tdOnRoaXMuY2hpbGRyZW4uZmlsdGVyKGE9PiEwPT09YS50YWJMaW5rLmluT3ZlcmZsb3cpfXJlZ2lzdGVyKGEpe3RoaXMuX2NoaWxkcmVuLnB1c2goYSl9dW5yZWdpc3RlcihhKXtjb25zdCBkPXRoaXMuY2hpbGRyZW4uaW5kZXhPZihhKTtkPi0xJiZ0aGlzLmNo''@;'; put 'put ''aWxkcmVuLnNwbGljZShkLDEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSx2VWU9MCx2bT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0''@;'; put 'put ''aGlzLmlmQWN0aXZlU2VydmljZT1hLHRoaXMuaWQ9ZCx0aGlzLnRhYnNTZXJ2aWNlPWgsdGhpcy50YWJDb250ZW50SWR8fCh0aGlzLnRhYkNvbnRlbnRJZD0iY2xyLXRhYi1jb250ZW50LSIrdlVlKyspfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5pZkFjdGl2ZVNlcnZpY2UuY3VycmVudD09''@;'; put 'put ''PXRoaXMuaWR9Z2V0IGFyaWFMYWJlbGxlZEJ5KCl7cmV0dXJuIHRoaXMudGFic1NlcnZpY2UuY2hpbGRyZW4uZmluZChhPT5hLnRhYkxpbmsuaWQ9PT10aGlzLmlkKT8udGFiTGluaz8udGFiTGlua0lkfXNldCB0ZW1wbGF0ZVJlZihhKXt0aGlzLnZpZXdSZWY9dGhpcy50YWJzU2VydmljZS50''@;'; put 'put ''YWJDb250ZW50Vmlld0NvbnRhaW5lci5jcmVhdGVFbWJlZGRlZFZpZXcoYSl9bmdPbkRlc3Ryb3koKXtjb25zdCBhPXRoaXMudGFic1NlcnZpY2UudGFiQ29udGVudFZpZXdDb250YWluZXIuaW5kZXhPZih0aGlzLnZpZXdSZWYpO2E+LTEmJnRoaXMudGFic1NlcnZpY2UudGFiQ29udGVudFZp''@;'; put 'put ''ZXdDb250YWluZXIucmVtb3ZlKGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZSh1NyksR2UoSXkpLEdlKEJ4KSl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci10YWItY29udGVudCJdXSx2aWV3UXVlcnk6ZnVuY3Rp''@;'; put 'put ''b24oYSxkKXtpZigxJmEmJm5hKFZIZSw3KSwyJmEpe2xldCBoO3hpKGg9RWkoKSkmJihkLnRlbXBsYXRlUmVmPWguZmlyc3QpfX0saW5wdXRzOnt0YWJDb250ZW50SWQ6W1puLk5vbmUsImlkIiwidGFiQ29udGVudElkIl19LG5nQ29udGVudFNlbGVjdG9yczp5YSxkZWNsczoyLHZhcnM6MCxj''@;'; put 'put ''b25zdHM6W1sidGFiQ29udGVudFByb2plY3RlZFJlZiIsIiJdLFsicm9sZSIsInRhYnBhbmVsIiwxLCJ0YWItY29udGVudCIsMywiaWQiLCJoaWRkZW4iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihsbygpLGd0KDAsQkhlLDIsNiwibmctdGVtcGxhdGUiLG51bGwsMCxfdSkpfSxl''@;'; put 'put ''bmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxiVWU9MDtjb25zdCBIWT1uZXcgU3QoIlRBQlNfSUQiKSxfVWU9e3Byb3ZpZGU6SFksdXNlRmFjdG9yeTpmdW5jdGlvbiB5VWUoKXtyZXR1cm4iY2xyLXRhYnMtIitiVWUrK319O2xldCB3VWU9MCxibT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEs''@;'; put 'put ''ZCxoLGYsdixNLEQpe3RoaXMuaWZBY3RpdmVTZXJ2aWNlPWEsdGhpcy5pZD1kLHRoaXMuZWw9aCx0aGlzLnRhYnNTZXJ2aWNlPU0sdGhpcy50YWJzSWQ9RCx0aGlzLnRhYkxpbmtJZHx8KHRoaXMudGFiTGlua0lkPSJjbHItdGFiLWxpbmstIit3VWUrKyk7Y29uc3QgWj1mLnJlc29sdmVDb21w''@;'; put 'put ''b25lbnRGYWN0b3J5KFkxZSk7dGhpcy50ZW1wbGF0ZVJlZkNvbnRhaW5lcj12LmNyZWF0ZUNvbXBvbmVudChaLHZvaWQgMCx2b2lkIDAsW1toLm5hdGl2ZUVsZW1lbnRdXSkuaW5zdGFuY2V9Z2V0IGluT3ZlcmZsb3coKXtyZXR1cm4gdGhpcy5faW5PdmVyZmxvdyYmdGhpcy50YWJzU2Vydmlj''@;'; put 'put ''ZS5sYXlvdXQhPT13Ny5WRVJUSUNBTH1zZXQgaW5PdmVyZmxvdyhhKXt0aGlzLl9pbk92ZXJmbG93PWF9Z2V0IGFkZExpbmtDbGFzc2VzKCl7cmV0dXJuIXRoaXMuaW5PdmVyZmxvd31nZXQgYXJpYUNvbnRyb2xzKCl7cmV0dXJuIHRoaXMudGFic1NlcnZpY2UuY2hpbGRyZW4uZmluZChhPT5h''@;'; put 'put ''LnRhYkxpbms9PT10aGlzKT8udGFiQ29udGVudD8udGFiQ29udGVudElkfWdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5pZkFjdGl2ZVNlcnZpY2UuY3VycmVudD09PXRoaXMuaWR9Z2V0IHRhYmluZGV4KCl7cmV0dXJuIHRoaXMuYWN0aXZlPzA6LTF9YWN0aXZhdGUoKXt0aGlzLmlmQWN0aXZl''@;'; put 'put ''U2VydmljZS5jdXJyZW50PXRoaXMuaWR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHU3KSxHZShJeSksR2UoZW8pLEdlKHo1KSxHZShEYSksR2UoQngpLEdlKEhZKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNs''@;'; put 'put ''clRhYkxpbmsiLCIiXV0saG9zdEF0dHJzOlsicm9sZSIsInRhYiIsInR5cGUiLCJidXR0b24iXSxob3N0VmFyczoxMixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5hY3RpdmF0ZSgpfSksMiZhJiYodHAoImlkIixkLnRhYkxp''@;'; put 'put ''bmtJZCksZHIoImFyaWEtY29udHJvbHMiLGQuYXJpYUNvbnRyb2xzKSgiYXJpYS1zZWxlY3RlZCIsZC5hY3RpdmUpKCJ0YWJpbmRleCIsZC50YWJpbmRleCkseHIoImJ0biIsITApKCJidG4tbGluayIsZC5hZGRMaW5rQ2xhc3NlcykoIm5hdi1saW5rIixkLmFkZExpbmtDbGFzc2VzKSgiYWN0''@;'; put 'put ''aXZlIixkLmFjdGl2ZSkpfSxpbnB1dHM6e3RhYkxpbmtJZDpbWm4uTm9uZSwiaWQiLCJ0YWJMaW5rSWQiXSxpbk92ZXJmbG93Oltabi5Ob25lLCJjbHJUYWJMaW5rSW5PdmVyZmxvdyIsImluT3ZlcmZsb3ciXX19KSxjfSkoKSx5bT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0''@;'; put 'put ''aGlzLmlmQWN0aXZlU2VydmljZT1hLHRoaXMuaWQ9ZCx0aGlzLnRhYnNTZXJ2aWNlPWgsaC5yZWdpc3Rlcih0aGlzKX1nZXQgYWN0aXZlKCl7cmV0dXJuIHRoaXMuaWZBY3RpdmVTZXJ2aWNlLmN1cnJlbnQ9PT10aGlzLmlkfW5nT25EZXN0cm95KCl7dGhpcy50YWJzU2VydmljZS51bnJlZ2lz''@;'; put 'put ''dGVyKHRoaXMpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZSh1NyksR2UoSXkpLEdlKEJ4KSl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci10YWIiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEm''@;'; put 'put ''YSYmKGxhKGgsYm0sNyksbGEoaCx2bSw3KSksMiZhKXtsZXQgZjt4aShmPUVpKCkpJiYoZC50YWJMaW5rPWYuZmlyc3QpLHhpKGY9RWkoKSkmJihkLnRhYkNvbnRlbnQ9Zi5maXJzdCl9fSxmZWF0dXJlczpbcG8oW016ZV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6eWEsZGVjbHM6MSx2YXJzOjAs''@;'; put 'put ''dGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihsbygpLFdyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksRzFlPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9y''@;'; put 'put ''czpbWyIiLCJjbHJUYWJBY3Rpb24iLCIiXV0saG9zdEF0dHJzOlsidGFiaW5kZXgiLCIwIl19KSxjfSkoKSxOWT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1si''@;'; put 'put ''Y2xyLXRhYi1vdmVyZmxvdy1jb250ZW50Il1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZ4cigiZHJvcGRvd24tbWVudSIsITApfSxuZ0NvbnRlbnRTZWxlY3RvcnM6eWEsZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihsbygp''@;'; put 'put ''LFdyKDApKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksQzc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuaWZBY3RpdmVTZXJ2aWNlPWEsdGhpcy50b2dnbGVTZXJ2aWNlPWQsdGhpcy50YWJzU2VydmljZT1oLHRoaXMudGFic0lkPWYsdGhpcy5jb21tb25TdHJp''@;'; put 'put ''bmdzPXYsdGhpcy50YWJMaW5rRWxlbWVudHM9W10sdGhpcy5fbW91c2Vkb3duPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLl90YWJMaW5rRGlyZWN0aXZlcz1bXX1nZXQgbGF5b3V0KCl7cmV0dXJuIHRoaXMudGFic1NlcnZpY2UubGF5b3V0fXNldCBsYXlvdXQoYSl7T2JqZWN0Lmtl''@;'; put 'put ''eXModzcpLm1hcChkPT53N1tkXSkuaW5kZXhPZihhKT49MCYmKHRoaXMudGFic1NlcnZpY2UubGF5b3V0PWEpfWdldCB0YWJMaW5rRGlyZWN0aXZlcygpe3JldHVybiB0aGlzLl90YWJMaW5rRGlyZWN0aXZlc31nZXQgYWN0aXZlVGFiSW5PdmVyZmxvdygpe3JldHVybiB0aGlzLnRhYnNTZXJ2''@;'; put 'put ''aWNlLm92ZXJmbG93VGFicy5pbmRleE9mKHRoaXMudGFic1NlcnZpY2UuYWN0aXZlVGFiKT4tMX1nZXQgYWN0aXZlVGFiUG9zaXRpb24oKXtyZXR1cm4gdGhpcy5fdGFiTGlua0RpcmVjdGl2ZXMuZmluZEluZGV4KGE9PmEuYWN0aXZlKX1nZXQgaXNDdXJyZW50SW5PdmVyZmxvdygpe3JldHVy''@;'; put 'put ''biB0aGlzLmtleUZvY3VzLmN1cnJlbnQ+PXRoaXMub3ZlcmZsb3dQb3NpdGlvbn1nZXQgaXNWZXJ0aWNhbCgpe3JldHVybiB0aGlzLmxheW91dD09PXc3LlZFUlRJQ0FMfXNldCB0YWJPdmVyZmxvd0VsKGEpe3RoaXMuX3RhYk92ZXJmbG93RWw9YSYmYS5uYXRpdmVFbGVtZW50LHRoaXMudG9n''@;'; put 'put ''Z2xlU2VydmljZS5vcGVuJiZhJiZ0aGlzLmtleUZvY3VzLmZvY3VzQ3VycmVudCgpfWdldCBvdmVyZmxvd1Bvc2l0aW9uKCl7cmV0dXJuIHRoaXMuX3RhYkxpbmtEaXJlY3RpdmVzLmZpbHRlcihhPT4hYS5pbk92ZXJmbG93KS5sZW5ndGh9c2V0IHRhYkNvbnRlbnRWaWV3Q29udGFpbmVyKGEp''@;'; put 'put ''e3RoaXMudGFic1NlcnZpY2UudGFiQ29udGVudFZpZXdDb250YWluZXI9YX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvclRhYkxpbmtDaGFuZ2VzKCkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVkRm9yVGFic0Fj''@;'; put 'put ''dGlvbnNDaGFuZ2VzKCkpLHR5cGVvZiB0aGlzLmlmQWN0aXZlU2VydmljZS5jdXJyZW50PiJ1IiYmdGhpcy50YWJMaW5rRGlyZWN0aXZlc1swXSYmdGhpcy50YWJMaW5rRGlyZWN0aXZlc1swXS5hY3RpdmF0ZSgpLHRoaXMua2V5Rm9jdXMuY3VycmVudD10aGlzLmFjdGl2ZVRhYlBvc2l0aW9u''@;'; put 'put ''fW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+e2EudW5zdWJzY3JpYmUoKX0pfXRvZ2dsZU92ZXJmbG93T25Qb3NpdGlvbihhKXt0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj1hPj10aGlzLm92ZXJmbG93UG9zaXRpb259cmVzZXRLZXlGb2N1c0N1cnJlbnRUb0Fj''@;'; put 'put ''dGl2ZShhKXshdGhpcy5rZXlGb2N1cy5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGEucmVsYXRlZFRhcmdldCkmJnRoaXMua2V5Rm9jdXMuY3VycmVudCE9PXRoaXMuYWN0aXZlVGFiUG9zaXRpb24mJih0aGlzLmtleUZvY3VzLmN1cnJlbnQ9dGhpcy5hY3RpdmVUYWJQb3NpdGlvbil9dG9nZ2xl''@;'; put 'put ''T3ZlcmZsb3dPbkNsaWNrKCl7dGhpcy5rZXlGb2N1cy5tb3ZlVG8odGhpcy5pc0N1cnJlbnRJbk92ZXJmbG93JiZ0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj90aGlzLm92ZXJmbG93UG9zaXRpb24tMTp0aGlzLm92ZXJmbG93UG9zaXRpb24pLHRoaXMuX21vdXNlZG93bj0hMX1vcGVuT3ZlcmZs''@;'; put 'put ''b3dPbkZvY3VzKCl7IXRoaXMuX21vdXNlZG93biYmIXRoaXMudG9nZ2xlU2VydmljZS5vcGVuJiZ0aGlzLmtleUZvY3VzLm1vdmVUbyh0aGlzLmFjdGl2ZVRhYlBvc2l0aW9uKX1jbG9zZU9uRm9jdXNPdXQoYSl7IXRoaXMuX3RhYk92ZXJmbG93RWwuY29udGFpbnMoYS5yZWxhdGVkVGFyZ2V0''@;'; put 'put ''KSYmdGhpcy50b2dnbGVTZXJ2aWNlLm9wZW4mJiF0aGlzLl9tb3VzZWRvd24mJih0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbj0hMSx0aGlzLnRhYkxpbmtFbGVtZW50c1t0aGlzLmFjdGl2ZVRhYlBvc2l0aW9uXT09PWEucmVsYXRlZFRhcmdldCYmKHRoaXMua2V5Rm9jdXMuY3VycmVudD10aGlz''@;'; put 'put ''LmFjdGl2ZVRhYlBvc2l0aW9uKSl9Y2xvc2VPbkVzY2FwZUtleSgpe3RoaXMua2V5Rm9jdXMubW92ZVRvKHRoaXMub3ZlcmZsb3dQb3NpdGlvbi0xKX1jbG9zZU9uT3V0c2lkZUNsaWNrKGEsZCl7Y29uc3QgaD10aGlzLnRhYnNBY3Rpb25zLnNvbWUoZj0+Zi5uYXRpdmVFbGVtZW50LmNvbnRh''@;'; put 'put ''aW5zKGEudGFyZ2V0KSk7YS50YXJnZXQ9PT1kfHxkLmNvbnRhaW5zKGEudGFyZ2V0KXx8aHx8IXRoaXMuX3RhYk92ZXJmbG93RWwuY29udGFpbnMoYS50YXJnZXQpJiZ0aGlzLmlzQ3VycmVudEluT3ZlcmZsb3cmJnRoaXMua2V5Rm9jdXMubW92ZVRvKHRoaXMub3ZlcmZsb3dQb3NpdGlvbi0x''@;'; put 'put ''KX1zZXRUYWJMaW5rRWxlbWVudHMoKXt0aGlzLl90YWJMaW5rRGlyZWN0aXZlcz10aGlzLnRhYnMubWFwKGE9PmEudGFiTGluayksdGhpcy50YWJMaW5rRWxlbWVudHM9dGhpcy5fdGFiTGlua0RpcmVjdGl2ZXMubWFwKGE9PmEuZWwubmF0aXZlRWxlbWVudCksdGhpcy50YWJzQWN0aW9ucyYm''@;'; put 'put ''dGhpcy50YWJzQWN0aW9ucyYmdGhpcy50YWJMaW5rRWxlbWVudHMucHVzaCguLi50aGlzLnRhYnNBY3Rpb25zLm1hcChhPT5hLm5hdGl2ZUVsZW1lbnQpKX1saXN0ZW5Gb3JUYWJMaW5rQ2hhbmdlcygpe3JldHVybiB0aGlzLnRhYnMuY2hhbmdlcy5waXBlKF8yKHRoaXMudGFicy5tYXAoYT0+''@;'; put 'put ''YS50YWJMaW5rKSkpLnN1YnNjcmliZSgoKT0+dGhpcy5zZXRUYWJMaW5rRWxlbWVudHMoKSl9bGlzdGVkRm9yVGFic0FjdGlvbnNDaGFuZ2VzKCl7cmV0dXJuIHRoaXMudGFic0FjdGlvbnMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9PnRoaXMuc2V0VGFiTGlua0VsZW1lbnRzKCkpfX1yZXR1cm4g''@;'; put 'put ''Yy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZSh1NyksR2UoYWMpLEdlKEJ4KSxHZShIWSksR2UodHMpKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXRhYnMiXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYm''@;'; put 'put ''KGxhKGgsRzFlLDUsZW8pLGxhKGgseW0sNCkpLDImYSl7bGV0IGY7eGkoZj1FaSgpKSYmKGQudGFic0FjdGlvbnM9ZikseGkoZj1FaSgpKSYmKGQudGFicz1mKX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKG5hKEh5LDcpLG5hKE5ZLDUsZW8pLG5hKGpIZSw3LERhKSksMiZh''@;'; put 'put ''KXtsZXQgaDt4aShoPUVpKCkpJiYoZC5rZXlGb2N1cz1oLmZpcnN0KSx4aShoPUVpKCkpJiYoZC50YWJPdmVyZmxvd0VsPWguZmlyc3QpLHhpKGg9RWkoKSkmJihkLnRhYkNvbnRlbnRWaWV3Q29udGFpbmVyPWguZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxk''@;'; put 'put ''KXsyJmEmJnhyKCJ0YWJzLXZlcnRpY2FsIixkLmlzVmVydGljYWwpfSxpbnB1dHM6e2xheW91dDpbWm4uTm9uZSwiY2xyTGF5b3V0IiwibGF5b3V0Il19LGZlYXR1cmVzOltwbyhbdTcsQngsX1VlXSksdmQoW3JnXSldLG5nQ29udGVudFNlbGVjdG9yczpVSGUsZGVjbHM6Nix2YXJzOjMsY29u''@;'; put 'put ''c3RzOltbInRhYkNvbnRlbnRWaWV3Q29udGFpbmVyIiwiIl0sWyJ0YWJPdmVyZmxvd1RyaWdnZXIiLCIiXSxbInJvbGUiLCJ0YWJsaXN0IiwiY2xyRGlyZWN0aW9uIiwiYm90aCIsMSwibmF2IiwzLCJjbHJGb2N1c0NoYW5nZSIsImZvY3Vzb3V0IiwiY2xyS2V5Rm9jdXMiXSxbNCwibmdGb3Ii''@;'; put 'put ''LCJuZ0Zvck9mIl0sWzQsIm5nSWYiXSxbInJvbGUiLCJwcmVzZW50YXRpb24iLDEsIm5hdi1pdGVtIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiXSxbInJvbGUiLCJwcmVzZW50YXRpb24iLDEsInRhYnMtb3ZlcmZsb3ciLCJib3R0b20tcmlnaHQiXSxbInJvbGUiLCJhcHBsaWNhdGlvbiIsMSwi''@;'; put 'put ''bmF2LWl0ZW0iXSxbInR5cGUiLCJidXR0b24iLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsImJ0biIsImJ0bi1saW5rIiwibmF2LWxpbmsiLCJkcm9wZG93bi10b2dnbGUiLDMsIm1vdXNlZG93biIsImZvY3VzIiwiY2xpY2siXSxbInNoYXBlIiwiZWxsaXBzaXMtaG9yaXpvbnRhbCJdLFszLCJr''@;'; put 'put ''ZXlkb3duLmVzY2FwZSIsImNsaWNrIiwiZm9jdXNvdXQiLDQsIm5nSWYiXSxbMywia2V5ZG93bi5lc2NhcGUiLCJjbGljayIsImZvY3Vzb3V0Il0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiLDQsIm5nSWYiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXtpZigxJmEpe2NvbnN0IGg9T24oKTtsbyh6''@;'; put 'put ''SGUpLGRlKDAsInVsIiwyKSxGdCgiY2xyRm9jdXNDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiB3dChoKSxDdChkLnRvZ2dsZU92ZXJmbG93T25Qb3NpdGlvbih2KSl9KSgiZm9jdXNvdXQiLGZ1bmN0aW9uKHYpe3JldHVybiB3dChoKSxDdChkLnJlc2V0S2V5Rm9jdXNDdXJyZW50VG9BY3Rp''@;'; put 'put ''dmUodikpfSksZ3QoMSxXSGUsMiwxLCJuZy1jb250YWluZXIiLDMpKDIsS0hlLDcsMTEsIm5nLWNvbnRhaW5lciIsNCksV3IoMyksaGUoKSxYbCg0LG51bGwsMCl9MiZhJiYoeGUoImNscktleUZvY3VzIixkLnRhYkxpbmtFbGVtZW50cyksZmUoKSx4ZSgibmdGb3JPZiIsZC50YWJMaW5rRGly''@;'; put 'put ''ZWN0aXZlcyksZmUoKSx4ZSgibmdJZiIsZC50YWJzU2VydmljZS5vdmVyZmxvd1RhYnMubGVuZ3RoPjApKX0sZGVwZW5kZW5jaWVzOltzcyx5byxOMSxjcyxIeSxOWV0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksQ1VlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtFcy5hZGRJY29ucyht''@;'; put 'put ''MGUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMbyxFMixUcyxtVWUsUFksRTJdfSksY30pKCksVlk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3Ro''@;'; put 'put ''aXMubmF2R3JvdXBDb3VudD0wfXJlZ2lzdGVyTmF2R3JvdXAoKXt0aGlzLm5hdkdyb3VwQ291bnQrK311bnJlZ2lzdGVyTmF2R3JvdXAoKXt0aGlzLm5hdkdyb3VwQ291bnQtLX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1h''@;'; put 'put ''bih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksQlk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2ljb25zPTB9Z2V0IGhhc0ljb25zKCl7cmV0dXJuIHRoaXMuX2ljb25zPjB9cmVnaXN0ZXJJY29uKCl7dGhpcy5faWNvbnMrK311bnJlZ2lzdGVySWNvbigp''@;'; put 'put ''e3RoaXMuX2ljb25zLS19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLGpZPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLl9hbmltYXRlT25D''@;'; put 'put ''b2xsYXBzZWQ9bmV3IFduLHRoaXMuX2NvbGxhcHNlZENoYW5nZWQ9bmV3IFduLHRoaXMuX2NvbGxhcHNlZD0hMSx0aGlzLl9jb2xsYXBzaWJsZT0hMX1nZXQgYW5pbWF0ZU9uQ29sbGFwc2VkKCl7cmV0dXJuIHRoaXMuX2FuaW1hdGVPbkNvbGxhcHNlZC5hc09ic2VydmFibGUoKX1nZXQgY29s''@;'; put 'put ''bGFwc2VkQ2hhbmdlZCgpe3JldHVybiB0aGlzLl9jb2xsYXBzZWRDaGFuZ2VkLmFzT2JzZXJ2YWJsZSgpfWdldCBjb2xsYXBzZWQoKXtyZXR1cm4gdGhpcy5fY29sbGFwc2VkfXNldCBjb2xsYXBzZWQoYSl7YT0hIWEsdGhpcy5jb2xsYXBzaWJsZSYmdGhpcy5fY29sbGFwc2VkIT09YSYmdGhp''@;'; put 'put ''cy51cGRhdGVDb2xsYXBzZUJlaGF2aW9yKGEpfWdldCBjb2xsYXBzaWJsZSgpe3JldHVybiB0aGlzLl9jb2xsYXBzaWJsZX1zZXQgY29sbGFwc2libGUoYSl7dGhpcy5fY29sbGFwc2libGUhPT0oYT0hIWEpJiYoIWEmJnRoaXMuY29sbGFwc2VkJiZ0aGlzLnVwZGF0ZUNvbGxhcHNlQmVoYXZp''@;'; put 'put ''b3IoITEpLHRoaXMuX2NvbGxhcHNpYmxlPWEpfXVwZGF0ZUNvbGxhcHNlQmVoYXZpb3IoYSl7dGhpcy5fYW5pbWF0ZU9uQ29sbGFwc2VkLm5leHQoYSksdGhpcy5fY29sbGFwc2VkPWEsdGhpcy5fY29sbGFwc2VkQ2hhbmdlZC5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24o''@;'; put 'put ''YSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSx6WT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuX25hdlNlcnZpY2U9YSx0aGlzLl9uYXZJY29uU2VydmljZT1kLHRoaXMuX25hdkdy''@;'; put 'put ''b3VwUmVnaXN0cmF0aW9uU2VydmljZT1oLHRoaXMuY29tbW9uU3RyaW5ncz1mLHRoaXMuY29udGVudElkPVN1KCksdGhpcy5fY29sbGFwc2VkQ2hhbmdlZD1uZXcgcXIoITApLHRoaXMuX3N1Yj1hLmNvbGxhcHNlZENoYW5nZWQuc3Vic2NyaWJlKHY9Pnt0aGlzLl9jb2xsYXBzZWRDaGFuZ2Vk''@;'; put 'put ''LmVtaXQodil9KX1nZXQgY29sbGFwc2libGUoKXtyZXR1cm4gdGhpcy5fbmF2U2VydmljZS5jb2xsYXBzaWJsZX1zZXQgY29sbGFwc2libGUoYSl7dGhpcy5fbmF2U2VydmljZS5jb2xsYXBzaWJsZT1hfWdldCBjb2xsYXBzZWQoKXtyZXR1cm4gdGhpcy5fbmF2U2VydmljZS5jb2xsYXBzZWR9''@;'; put 'put ''c2V0IGNvbGxhcHNlZChhKXt0aGlzLl9uYXZTZXJ2aWNlLmNvbGxhcHNlZD1hfWdldCBoYXNOYXZHcm91cHMoKXtyZXR1cm4gdGhpcy5fbmF2R3JvdXBSZWdpc3RyYXRpb25TZXJ2aWNlLm5hdkdyb3VwQ291bnQ+MH1nZXQgaGFzSWNvbnMoKXtyZXR1cm4gdGhpcy5fbmF2SWNvblNlcnZpY2Uu''@;'; put 'put ''aGFzSWNvbnN9Z2V0IGFyaWFFeHBhbmRlZCgpe3JldHVybiB0aGlzLmNvbGxhcHNpYmxlP3RoaXMuY29sbGFwc2VkPyJmYWxzZSI6InRydWUiOm51bGx9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdWIudW5zdWJzY3JpYmUoKX10b2dnbGVCeUJ1dHRvbigpe3RoaXMuY29sbGFwc2VkPSF0aGlzLmNv''@;'; put 'put ''bGxhcHNlZH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoalkpLEdlKEJZKSxHZShWWSksR2UodHMpKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXZlcnRpY2FsLW5hdiJdXSxob3N0QXR0cnM6WzEsImNsci12ZXJ0''@;'; put 'put ''aWNhbC1uYXYiXSxob3N0VmFyczo2LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmeHIoImlzLWNvbGxhcHNlZCIsZC5jb2xsYXBzZWQpKCJoYXMtbmF2LWdyb3VwcyIsZC5oYXNOYXZHcm91cHMpKCJoYXMtaWNvbnMiLGQuaGFzSWNvbnMpfSxpbnB1dHM6e3RvZ2dsZUxhYmVsOlta''@;'; put 'put ''bi5Ob25lLCJjbHJWZXJ0aWNhbE5hdlRvZ2dsZUxhYmVsIiwidG9nZ2xlTGFiZWwiXSxjb2xsYXBzaWJsZTpbWm4uTm9uZSwiY2xyVmVydGljYWxOYXZDb2xsYXBzaWJsZSIsImNvbGxhcHNpYmxlIl0sY29sbGFwc2VkOltabi5Ob25lLCJjbHJWZXJ0aWNhbE5hdkNvbGxhcHNlZCIsImNvbGxh''@;'; put 'put ''cHNlZCJdfSxvdXRwdXRzOntfY29sbGFwc2VkQ2hhbmdlZDoiY2xyVmVydGljYWxOYXZDb2xsYXBzZWRDaGFuZ2UifSxmZWF0dXJlczpbcG8oW2pZLEJZLFZZXSldLG5nQ29udGVudFNlbGVjdG9yczp5YSxkZWNsczo0LHZhcnM6Myxjb25zdHM6W1sidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwi''@;'; put 'put ''bmF2LXRyaWdnZXIiLDMsIm9uLWNvbGxhcHNlIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwibmF2LWNvbnRlbnQiLDMsImlkIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJuYXYtYnRuIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwidGFiaW5kZXgiLCItMSIsMywiY2xpY2siLDQsIm5nSWYiXSxb''@;'; put 'put ''InR5cGUiLCJidXR0b24iLDEsIm5hdi10cmlnZ2VyIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZS1kb3VibGUiLDEsIm5hdi10cmlnZ2VyLWljb24iXSxbInR5cGUiLCJidXR0b24iLCJhcmlhLWhpZGRlbiIsInRydWUiLCJ0YWJpbmRleCIsIi0xIiwxLCJuYXYtYnRuIiwzLCJjbGljayJd''@;'; put 'put ''XSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGxvKCksZ3QoMCxxSGUsMiw2LCJidXR0b24iLDApLGRlKDEsImRpdiIsMSksV3IoMiksZ3QoMyxYSGUsMSwyLCJidXR0b24iLDIpLGhlKCkpLDImYSYmKHhlKCJuZ0lmIixkLmNvbGxhcHNpYmxlKSxmZSgpLHhlKCJpZCIsZC5jb250ZW50''@;'; put 'put ''SWQpLGZlKDIpLHhlKCJuZ0lmIixkLmNvbGxhcHNpYmxlJiZkLmNvbGxhcHNlZCkpfSxkZXBlbmRlbmNpZXM6W3lvLGNzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxVWT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fZXhwYW5kQ2hhbmdlPW5ldyBXbn1nZXQgZXhwYW5kQ2hh''@;'; put 'put ''bmdlKCl7cmV0dXJuIHRoaXMuX2V4cGFuZENoYW5nZS5hc09ic2VydmFibGUoKX1leHBhbmQoKXt0aGlzLl9leHBhbmRDaGFuZ2UubmV4dCghMCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9y''@;'; put 'put ''eTpjLlx1MDI3NWZhY30pLGN9KSgpLFpZPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuZGVzdHJveSQ9bmV3IFduLGgmJk1kKGEubmF0aXZlRWxlbWVudCwiY2xpY2siKS5waXBlKFYwKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoKCk9PntoLmV4cGFuZCgpLGQubWFy''@;'; put 'put ''a0ZvckNoZWNrKCl9KX1uZ09uRGVzdHJveSgpe3RoaXMuZGVzdHJveSQubmV4dCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShlbyksR2UoeHMpLEdlKFVZLDgpKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xy''@;'; put 'put ''VmVydGljYWxOYXZMaW5rIiwiIl1dLGhvc3RBdHRyczpbMSwibmF2LWxpbmsiXSxhdHRyczplTmUsbmdDb250ZW50U2VsZWN0b3JzOm5OZSxkZWNsczozLHZhcnM6MCxjb25zdHM6W1sxLCJuYXYtdGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGxvKHROZSksV3IoMCksZGUo''@;'; put 'put ''MSwic3BhbiIsMCksV3IoMiwxKSxoZSgpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksJDFlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtFcy5hZGRJY29ucyh3eSxiMGUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9''@;'; put 'put ''a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMbyxUcyxFMixMTCxFMixUcyxMTF19KSxjfSkoKSxFVWU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1''@;'; put 'put ''MDI3NWluaj1Bcih7aW1wb3J0czpbY1VlLGdVZSxDVWUsJDFlLGxVZV19KSxjfSkoKSxWeT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgazBle2NvbnN0cnVjdG9yKGEsZCxoKXtzdXBlcihhLGQsaCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKGVv''@;'; put 'put ''KSxHZShhWSksR2UodnMsOCkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjZGtUcmFwRm9jdXMiLCIiXV0sZmVhdHVyZXM6W0NvXX0pLGN9KSgpLHpMPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMp''@;'; put 'put ''fSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe30pLGN9KSgpO2NvbnN0IEFVZT0vZCsuK20rLit5Ky9pLGtVZT0vbSsuK2QrLit5Ky9pLERVZT0vZCt8bSt8eSsvaSxJVWU9L1xkKy9nLFJVZT0vTW9iaS9pLExVZT0vXHUyMDBmL2csV1k9IllZWVkiLFVMPXtuYW1l''@;'; put 'put ''OiJMSVRUTEVfRU5ESUFOIixmb3JtYXQ6WyJERCIsIk1NIixXWV19LCRZPXtuYW1lOiJNSURETEVfRU5ESUFOIixmb3JtYXQ6WyJNTSIsIkREIixXWV19LE9VZT17bmFtZToiQklHX0VORElBTiIsZm9ybWF0OltXWSwiTU0iLCJERCJdfTtmdW5jdGlvbiBxMWUoYyxsKXtyZXR1cm4gbmV3IERh''@;'; put 'put ''dGUoYyxsKzEsMCkuZ2V0RGF0ZSgpfWNsYXNzIFZVZXtjb25zdHJ1Y3RvcihsLGE9ITEsZD0hMSxoPSExLGY9ITEsdj0hMSxNPSExLEQ9ITEpe3RoaXMuZGF5TW9kZWw9bCx0aGlzLmlzVG9kYXlzRGF0ZT1hLHRoaXMuaXNFeGNsdWRlZD1kLHRoaXMuaXNEaXNhYmxlZD1oLHRoaXMuaXNTZWxl''@;'; put 'put ''Y3RlZD1mLHRoaXMuaXNGb2N1c2FibGU9dix0aGlzLmlzUmFuZ2VTdGFydERheT1NLHRoaXMuaXNSYW5nZUVuZERheT1EfWdldCB0YWJJbmRleCgpe3JldHVybiB0aGlzLmlzRm9jdXNhYmxlPzA6LTF9fWNsYXNzIFJke2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLnllYXI9bCx0aGlzLm1vbnRo''@;'; put 'put ''PWEsdGhpcy5kYXRlPWR9aXNFcXVhbChsKXtyZXR1cm4hIWwmJnRoaXMueWVhcj09PWwueWVhciYmdGhpcy5tb250aD09PWwubW9udGgmJnRoaXMuZGF0ZT09PWwuZGF0ZX10b0RhdGUoKXtyZXR1cm4gbmV3IERhdGUodGhpcy55ZWFyLHRoaXMubW9udGgsdGhpcy5kYXRlKX1pbmNyZW1lbnRC''@;'; put 'put ''eShsKXtjb25zdCBhPW5ldyBEYXRlKHRoaXMueWVhcix0aGlzLm1vbnRoLHRoaXMuZGF0ZStsKTtyZXR1cm4gbmV3IFJkKGEuZ2V0RnVsbFllYXIoKSxhLmdldE1vbnRoKCksYS5nZXREYXRlKCkpfWNsb25lKCl7cmV0dXJuIG5ldyBSZCh0aGlzLnllYXIsdGhpcy5tb250aCx0aGlzLmRhdGUp''@;'; put 'put ''fXRvQ29tcGFyaXNvblN0cmluZygpe3JldHVybmAke3RoaXMueWVhcn0ke3RoaXMucGFkKHRoaXMubW9udGgpfSR7dGhpcy5wYWQodGhpcy5kYXRlKX1gfXRvRGF0ZVN0cmluZygpe3JldHVybiB0aGlzLnRvRGF0ZSgpLnRvTG9jYWxlRGF0ZVN0cmluZyh2b2lkIDAse3dlZWtkYXk6Imxvbmci''@;'; put 'put ''LG1vbnRoOiJsb25nIixkYXk6Im51bWVyaWMiLHllYXI6Im51bWVyaWMifSl9aXNCZWZvcmUobCxhPSExKXtyZXR1cm4gYT90aGlzLnRvRGF0ZSgpLmdldFRpbWUoKTw9bD8udG9EYXRlKCkuZ2V0VGltZSgpOnRoaXMudG9EYXRlKCkuZ2V0VGltZSgpPGw/LnRvRGF0ZSgpLmdldFRpbWUoKX1p''@;'; put 'put ''c0FmdGVyKGwsYT0hMSl7cmV0dXJuIGE/dGhpcy50b0RhdGUoKS5nZXRUaW1lKCk+PWw/LnRvRGF0ZSgpLmdldFRpbWUoKTp0aGlzLnRvRGF0ZSgpLmdldFRpbWUoKT5sPy50b0RhdGUoKS5nZXRUaW1lKCl9cGFkKGwpe3JldHVybiBsPDEwP2AwJHtsfWA6YCR7bH1gfX1jbGFzcyBCVWV7Y29u''@;'; put 'put ''c3RydWN0b3IobCxhLGQsaCxmLHYsTSl7dGhpcy5jYWxlbmRhcj1sLHRoaXMuc2VsZWN0ZWREYXk9YSx0aGlzLnNlbGVjdGVkRW5kRGF5PWQsdGhpcy5mb2N1c2FibGVEYXk9aCx0aGlzLnRvZGF5PWYsdGhpcy5maXJzdERheU9mV2Vlaz12LHRoaXMuZXhjbHVkZWREYXRlcz1NLHRoaXMuY3Vy''@;'; put 'put ''ck1vbnRoRGF5Vmlld3M9W10sdGhpcy5pbml0aWFsaXplQ2FsZW5kYXJWaWV3KCl9Z2V0IGNhbGVuZGFyVmlldygpe3JldHVybiB0aGlzLl9jYWxlbmRhclZpZXd9dXBkYXRlRm9jdXNhYmxlRGF5KGwpe3RoaXMuc2V0Rm9jdXNhYmxlRmxhZyh0aGlzLmZvY3VzYWJsZURheSwhMSksdGhpcy5z''@;'; put 'put ''ZXRGb2N1c2FibGVGbGFnKGwsITApLHRoaXMuZm9jdXNhYmxlRGF5PWx9dXBkYXRlU2VsZWN0ZWREYXkobCl7dGhpcy5zZXRTZWxlY3RlZERheSh0aGlzLnNlbGVjdGVkRGF5LCExKSx0aGlzLnNlbGVjdGVkRGF5PWwsdGhpcy5zZXRTZWxlY3RlZERheShsLCEwKX11cGRhdGVTZWxlY3RlZEVu''@;'; put 'put ''ZERheShsKXt0aGlzLnNldFNlbGVjdGVkRGF5KHRoaXMuc2VsZWN0ZWRFbmREYXksITEpLHRoaXMuc2VsZWN0ZWRFbmREYXk9bCx0aGlzLnNldFNlbGVjdGVkRGF5KGwsITApfWluaXRpYWxpemVDYWxlbmRhclZpZXcoKXtjb25zdCBsPXRoaXMuY2FsZW5kYXIucHJldmlvdXNNb250aCgpLGE9''@;'; put 'put ''dGhpcy5jYWxlbmRhci5uZXh0TW9udGgoKSxkPXRoaXMubnVtRGF5c0Zyb21QcmV2TW9udGhJbkNhbFZpZXcodGhpcy5jYWxlbmRhci55ZWFyLHRoaXMuY2FsZW5kYXIubW9udGgpLGg9NDItKHRoaXMuY2FsZW5kYXIuZGF5cy5sZW5ndGgrZCk7bGV0IGY9W10sdj1bXTtkPjAmJihmPXRoaXMu''@;'; put 'put ''Z2VuZXJhdGVEYXlWaWV3TW9kZWxzKGwuZGF5cy5zbGljZSgtMSpkKSwhMCwhMSkpLHRoaXMuY3Vyck1vbnRoRGF5Vmlld3M9dGhpcy5nZW5lcmF0ZURheVZpZXdNb2RlbHModGhpcy5jYWxlbmRhci5kYXlzLCExLCEwKSxoPjAmJih2PXRoaXMuZ2VuZXJhdGVEYXlWaWV3TW9kZWxzKGEuZGF5''@;'; put 'put ''cy5zbGljZSgwLGgpLCEwLCExKSksdGhpcy5fY2FsZW5kYXJWaWV3PXRoaXMuZ2VuZXJhdGVDYWxlbmRhclZpZXcoZix0aGlzLmN1cnJNb250aERheVZpZXdzLHYpLHRoaXMuaW5pdGlhbGl6ZVNlbGVjdGVkRGF5KCksdGhpcy5pbml0aWFsaXplRm9jdXNhYmxlRGF5KCl9aXNEYXRlRXhjbHVk''@;'; put 'put ''ZWQobCl7Y29uc3R7bWluRGF0ZTphLG1heERhdGU6ZH09dGhpcy5leGNsdWRlZERhdGVzLGg9YS50b0NvbXBhcmlzb25TdHJpbmcoKSxmPWQudG9Db21wYXJpc29uU3RyaW5nKCksdj1sLnRvQ29tcGFyaXNvblN0cmluZygpO3JldHVybiEodj49aCYmdjw9Zil9Z2VuZXJhdGVEYXlWaWV3TW9k''@;'; put 'put ''ZWxzKGwsYSxkKXtjb25zdCBoPWwubWFwKGY9Pm5ldyBWVWUoZiwhMSxhLHRoaXMuaXNEYXRlRXhjbHVkZWQoZiksITEsITEpKTtyZXR1cm4gZCYmdGhpcy5jYWxlbmRhci5pc0RheUluQ2FsZW5kYXIodGhpcy50b2RheSkmJihoW3RoaXMudG9kYXkuZGF0ZS0xXS5pc1RvZGF5c0RhdGU9ITAp''@;'; put 'put ''LGh9bnVtRGF5c0Zyb21QcmV2TW9udGhJbkNhbFZpZXcobCxhKXtjb25zdCBkPWZ1bmN0aW9uIEZVZShjLGwsYSl7cmV0dXJuIG5ldyBEYXRlKGMsbCxhKS5nZXREYXkoKX0obCxhLDEpO3JldHVybiBkPj10aGlzLmZpcnN0RGF5T2ZXZWVrP2QtdGhpcy5maXJzdERheU9mV2Vlazo3K2QtdGhp''@;'; put 'put ''cy5maXJzdERheU9mV2Vla31pc0RheUluQ2FsZW5kYXJWaWV3KGwpe3JldHVybiEhdGhpcy5jYWxlbmRhci5pc0RheUluQ2FsZW5kYXIobCl9Z2VuZXJhdGVDYWxlbmRhclZpZXcobCxhLGQpe2NvbnN0IGg9Wy4uLmwsLi4uYSwuLi5kXSxmPVtdO2ZvcihsZXQgdj0wO3Y8Njt2KyspZlt2XT1o''@;'; put 'put ''LnNsaWNlKDcqdiw3Kih2KzEpKTtyZXR1cm4gZn1pbml0aWFsaXplU2VsZWN0ZWREYXkoKXt0aGlzLnNldFNlbGVjdGVkRGF5KHRoaXMuc2VsZWN0ZWREYXksITApLHRoaXMuc2V0U2VsZWN0ZWREYXkodGhpcy5zZWxlY3RlZEVuZERheSwhMCl9aW5pdGlhbGl6ZUZvY3VzYWJsZURheSgpe3Ro''@;'; put 'put ''aXMuZm9jdXNhYmxlRGF5JiZ0aGlzLmlzRGF5SW5DYWxlbmRhclZpZXcodGhpcy5mb2N1c2FibGVEYXkpP3RoaXMuc2V0Rm9jdXNhYmxlRmxhZyh0aGlzLmZvY3VzYWJsZURheSwhMCk6dGhpcy5zZWxlY3RlZERheSYmdGhpcy5pc0RheUluQ2FsZW5kYXJWaWV3KHRoaXMuc2VsZWN0ZWREYXkp''@;'; put 'put ''Pyh0aGlzLnNldEZvY3VzYWJsZUZsYWcodGhpcy5zZWxlY3RlZERheSwhMCksdGhpcy5mb2N1c2FibGVEYXk9dGhpcy5zZWxlY3RlZERheS5jbG9uZSgpKTp0aGlzLnNlbGVjdGVkRW5kRGF5JiZ0aGlzLmlzRGF5SW5DYWxlbmRhclZpZXcodGhpcy5zZWxlY3RlZEVuZERheSk/KHRoaXMuc2V0''@;'; put 'put ''Rm9jdXNhYmxlRmxhZyh0aGlzLnNlbGVjdGVkRW5kRGF5LCEwKSx0aGlzLmZvY3VzYWJsZURheT10aGlzLnNlbGVjdGVkRW5kRGF5LmNsb25lKCkpOnRoaXMuaXNEYXlJbkNhbGVuZGFyVmlldyh0aGlzLnRvZGF5KT8odGhpcy5zZXRGb2N1c2FibGVGbGFnKHRoaXMudG9kYXksITApLHRoaXMu''@;'; put 'put ''Zm9jdXNhYmxlRGF5PXRoaXMudG9kYXkuY2xvbmUoKSk6KHRoaXMuZm9jdXNhYmxlRGF5PW5ldyBSZCh0aGlzLmNhbGVuZGFyLnllYXIsdGhpcy5jYWxlbmRhci5tb250aCwxNSksdGhpcy5zZXRGb2N1c2FibGVGbGFnKHRoaXMuZm9jdXNhYmxlRGF5LCEwKSl9c2V0Rm9jdXNhYmxlRmxhZyhs''@;'; put 'put ''LGEpe2wmJih0aGlzLmN1cnJNb250aERheVZpZXdzW2wuZGF0ZS0xXS5pc0ZvY3VzYWJsZT1hKX1zZXRTZWxlY3RlZERheShsLGEpe2wmJnRoaXMuaXNEYXlJbkNhbGVuZGFyVmlldyhsKSYmKHRoaXMuY3Vyck1vbnRoRGF5Vmlld3NbbD8uZGF0ZS0xXS5pc1NlbGVjdGVkPWEpfX1sZXQgeng9''@;'; put 'put ''KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmxvY2FsZT1hLHRoaXMuX2ZpcnN0RGF5T2ZXZWVrPTAsdGhpcy5pbml0aWFsaXplTG9jYWxlRGF0YSgpfWdldCBmaXJzdERheU9mV2Vlaygpe3JldHVybiB0aGlzLl9maXJzdERheU9mV2Vla31nZXQgbG9jYWxlRGF5cygpe3JldHVy''@;'; put 'put ''biB0aGlzLl9sb2NhbGVEYXlzfWdldCBsb2NhbGVEYXlzTmFycm93KCl7cmV0dXJuIHRoaXMuX2xvY2FsZURheXMubWFwKGE9PmEubmFycm93KX1nZXQgbG9jYWxlTW9udGhzQWJicmV2aWF0ZWQoKXtyZXR1cm4gdGhpcy5fbG9jYWxlTW9udGhzQWJicmV2aWF0ZWR9Z2V0IGxvY2FsZU1vbnRo''@;'; put 'put ''c1dpZGUoKXtyZXR1cm4gdGhpcy5fbG9jYWxlTW9udGhzV2lkZX1nZXQgbG9jYWxlRGF0ZUZvcm1hdCgpe3JldHVybiB0aGlzLl9sb2NhbGVEYXRlRm9ybWF0fWluaXRpYWxpemVMb2NhbGVEYXRhKCl7dGhpcy5pbml0aWFsaXplRmlyc3REYXlPZldlZWsoKSx0aGlzLmluaXRpYWxpemVMb2Nh''@;'; put 'put ''bGVEYXRlRm9ybWF0KCksdGhpcy5pbml0aWFsaXplTG9jYWxlTW9udGhzQWJicmV2aWF0ZWQoKSx0aGlzLmluaXRpYWxpemVMb2NhbGVNb250aHNXaWRlKCksdGhpcy5pbml0aWFsaXplTG9jYWxlRGF5cygpfWluaXRpYWxpemVMb2NhbGVEYXlzKCl7Y29uc3QgYT1bXSxkPUlVKHRoaXMubG9j''@;'; put 'put ''YWxlLHUwLlN0YW5kYWxvbmUsY2wuV2lkZSkuc2xpY2UoKSxoPUlVKHRoaXMubG9jYWxlLHUwLlN0YW5kYWxvbmUsY2wuTmFycm93KS5zbGljZSgpLGY9dGhpcy5maXJzdERheU9mV2Vlaztmb3IobGV0IHY9MDt2PDc7disrKWEucHVzaCh7ZGF5OmRbdl0sbmFycm93Omhbdl19KTtpZihmPjAp''@;'; put 'put ''e2NvbnN0IHY9YS5zcGxpY2UoMCxmKTthLnB1c2goLi4udil9dGhpcy5fbG9jYWxlRGF5cz1hfWluaXRpYWxpemVMb2NhbGVNb250aHNBYmJyZXZpYXRlZCgpe3RoaXMuX2xvY2FsZU1vbnRoc0FiYnJldmlhdGVkPVJVKHRoaXMubG9jYWxlLHUwLlN0YW5kYWxvbmUsY2wuQWJicmV2aWF0ZWQp''@;'; put 'put ''LnNsaWNlKCl9aW5pdGlhbGl6ZUxvY2FsZU1vbnRoc1dpZGUoKXt0aGlzLl9sb2NhbGVNb250aHNXaWRlPVJVKHRoaXMubG9jYWxlLHUwLlN0YW5kYWxvbmUsY2wuV2lkZSkuc2xpY2UoKX1pbml0aWFsaXplRmlyc3REYXlPZldlZWsoKXt0aGlzLl9maXJzdERheU9mV2Vlaz1mdW5jdGlvbiBy''@;'; put 'put ''X2UoYyl7cmV0dXJuIHMxKGMpW0psLkZpcnN0RGF5T2ZXZWVrXX0odGhpcy5sb2NhbGUpfWluaXRpYWxpemVMb2NhbGVEYXRlRm9ybWF0KCl7dGhpcy5fbG9jYWxlRGF0ZUZvcm1hdD1mdW5jdGlvbiBTTShjLGwpe3JldHVybiB2MihzMShjKVtKbC5EYXRlRm9ybWF0XSxsKX0odGhpcy5sb2Nh''@;'; put 'put ''bGUsQ2QuU2hvcnQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShNcihPZikpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NsYXNzIExke2NvbnN0cnVjdG9yKGwsYSl7dGhpcy55ZWFyPWwsdGhp''@;'; put 'put ''cy5tb250aD1hLHRoaXMuaW5pdGlhbGl6ZURheXNJbkNhbGVuZGFyKCl9aXNFcXVhbChsKXtyZXR1cm4hIWwmJnRoaXMueWVhcj09PWwueWVhciYmdGhpcy5tb250aD09PWwubW9udGh9aXNEYXlJbkNhbGVuZGFyKGwpe3JldHVybiEhbCYmdGhpcy55ZWFyPT09bC55ZWFyJiZ0aGlzLm1vbnRo''@;'; put 'put ''PT09bC5tb250aH1wcmV2aW91c01vbnRoKCl7cmV0dXJuIDA9PT10aGlzLm1vbnRoP25ldyBMZCh0aGlzLnllYXItMSwxMSk6bmV3IExkKHRoaXMueWVhcix0aGlzLm1vbnRoLTEpfW5leHRNb250aCgpe3JldHVybiAxMT09PXRoaXMubW9udGg/bmV3IExkKHRoaXMueWVhcisxLDApOm5ldyBM''@;'; put 'put ''ZCh0aGlzLnllYXIsdGhpcy5tb250aCsxKX1wcmV2aW91c1llYXIoKXtyZXR1cm4gbmV3IExkKHRoaXMueWVhci0xLHRoaXMubW9udGgpfW5leHRZZWFyKCl7cmV0dXJuIG5ldyBMZCh0aGlzLnllYXIrMSx0aGlzLm1vbnRoKX1pbml0aWFsaXplRGF5c0luQ2FsZW5kYXIoKXtjb25zdCBsPXEx''@;'; put 'put ''ZSh0aGlzLnllYXIsdGhpcy5tb250aCk7dGhpcy5kYXlzPUFycmF5KGwpLmZpbGwobnVsbCkubWFwKChhLGQpPT5uZXcgUmQodGhpcy55ZWFyLHRoaXMubW9udGgsZCsxKSl9fWxldCB3aD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5pc1JhbmdlUGlja2VyPSExLHRoaXMuaGFz''@;'; put 'put ''QWN0aW9uQnV0dG9ucz0hMSx0aGlzLl90b2RheXNGdWxsRGF0ZT1uZXcgRGF0ZSx0aGlzLl9zZWxlY3RlZERheUNoYW5nZT1uZXcgV24sdGhpcy5fc2VsZWN0ZWRFbmREYXlDaGFuZ2U9bmV3IFduLHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyQ2hhbmdlPW5ldyBXbix0aGlzLl9mb2N1c09uQ2Fs''@;'; put 'put ''ZW5kYXJDaGFuZ2U9bmV3IFduLHRoaXMuX3JlZnJlc2hDYWxlbmRhclZpZXc9bmV3IFduLHRoaXMuX2ZvY3VzZWREYXlDaGFuZ2U9bmV3IFdufWdldCB0b2RheSgpe3JldHVybiB0aGlzLl90b2RheX1nZXQgZGlzcGxheWVkQ2FsZW5kYXIoKXtyZXR1cm4gdGhpcy5fZGlzcGxheWVkQ2FsZW5k''@;'; put 'put ''YXJ9Z2V0IHNlbGVjdGVkRGF5Q2hhbmdlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGVkRGF5Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBzZWxlY3RlZEVuZERheUNoYW5nZSgpe3JldHVybiB0aGlzLl9zZWxlY3RlZEVuZERheUNoYW5nZS5hc09ic2VydmFibGUoKX1nZXQgZGlzcGxheWVkQ2Fs''@;'; put 'put ''ZW5kYXJDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXJDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGZvY3VzT25DYWxlbmRhckNoYW5nZSgpe3JldHVybiB0aGlzLl9mb2N1c09uQ2FsZW5kYXJDaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGZvY3VzZWREYXlDaGFuZ2Uo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fZm9jdXNlZERheUNoYW5nZS5hc09ic2VydmFibGUoKS5waXBlKFl1KGE9PnRoaXMuZm9jdXNlZERheT1hKSl9Z2V0IHJlZnJlc2hDYWxlbmRhclZpZXcoKXtyZXR1cm4gdGhpcy5fcmVmcmVzaENhbGVuZGFyVmlldy5hc09ic2VydmFibGUoKX1ub3RpZnlTZWxlY3Rl''@;'; put 'put ''ZERheUNoYW5nZWQoYSx7ZW1pdEV2ZW50OmR9PXtlbWl0RXZlbnQ6ITB9KXtpZih0aGlzLmlzUmFuZ2VQaWNrZXIpe2NvbnN0e3N0YXJ0RGF0ZTpoLGVuZERhdGU6Zn09YTtoJiZmPyh0aGlzLnNldFNlbGVjdGVkRGF5KGgsZCksdGhpcy5zZXRTZWxlY3RlZEVuZERheShmLGQpKToobnVsbCE9''@;'; put 'put ''PWYmJnRoaXMuc2V0U2VsZWN0ZWRFbmREYXkoZixkKSxudWxsIT09aCYmdGhpcy5zZXRTZWxlY3RlZERheShoLGQpKX1lbHNlIHRoaXMuc2V0U2VsZWN0ZWREYXkoYSxkKTt0aGlzLl9yZWZyZXNoQ2FsZW5kYXJWaWV3Lm5leHQoKX1pbml0aWFsaXplQ2FsZW5kYXIoKXt0aGlzLmZvY3VzZWRE''@;'; put 'put ''YXk9bnVsbCx0aGlzLmluaXRpYWxpemVUb2RheXNEYXRlKCksdGhpcy5fZGlzcGxheWVkQ2FsZW5kYXI9dGhpcy5zZWxlY3RlZERheT9uZXcgTGQodGhpcy5zZWxlY3RlZERheS55ZWFyLHRoaXMuc2VsZWN0ZWREYXkubW9udGgpOm5ldyBMZCh0aGlzLnRvZGF5LnllYXIsdGhpcy50b2RheS5t''@;'; put 'put ''b250aCl9Y2hhbmdlTW9udGgoYSl7dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcihuZXcgTGQodGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIueWVhcixhKSl9Y2hhbmdlWWVhcihhKXt0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKG5ldyBMZChhLHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyLm1vbnRo''@;'; put 'put ''KSl9bW92ZVRvTmV4dE1vbnRoKCl7dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcih0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5uZXh0TW9udGgoKSl9bW92ZVRvUHJldmlvdXNNb250aCgpe3RoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIodGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIucHJldmlvdXNN''@;'; put 'put ''b250aCgpKX1tb3ZlVG9OZXh0WWVhcigpe3RoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIodGhpcy5fZGlzcGxheWVkQ2FsZW5kYXIubmV4dFllYXIoKSl9bW92ZVRvUHJldmlvdXNZZWFyKCl7dGhpcy5zZXREaXNwbGF5ZWRDYWxlbmRhcih0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5wcmV2aW91''@;'; put 'put ''c1llYXIoKSl9bW92ZVRvQ3VycmVudE1vbnRoKCl7dGhpcy5kaXNwbGF5ZWRDYWxlbmRhci5pc0RheUluQ2FsZW5kYXIodGhpcy50b2RheSl8fHRoaXMuc2V0RGlzcGxheWVkQ2FsZW5kYXIobmV3IExkKHRoaXMudG9kYXkueWVhcix0aGlzLnRvZGF5Lm1vbnRoKSksdGhpcy5fZm9jdXNPbkNh''@;'; put 'put ''bGVuZGFyQ2hhbmdlLm5leHQoKX1tb3ZlVG9TcGVjaWZpY01vbnRoKGEpe3RoaXMuZGlzcGxheWVkQ2FsZW5kYXIuaXNEYXlJbkNhbGVuZGFyKGEpfHx0aGlzLnNldERpc3BsYXllZENhbGVuZGFyKG5ldyBMZChhLnllYXIsYS5tb250aCkpfWluY3JlbWVudEZvY3VzRGF5KGEpe3RoaXMuaG92''@;'; put 'put ''ZXJlZERheT10aGlzLmZvY3VzZWREYXk9dGhpcy5mb2N1c2VkRGF5LmluY3JlbWVudEJ5KGEpLHRoaXMuX2Rpc3BsYXllZENhbGVuZGFyLmlzRGF5SW5DYWxlbmRhcih0aGlzLmZvY3VzZWREYXkpP3RoaXMuX2ZvY3VzZWREYXlDaGFuZ2UubmV4dCh0aGlzLmZvY3VzZWREYXkpOnRoaXMuc2V0''@;'; put 'put ''RGlzcGxheWVkQ2FsZW5kYXIobmV3IExkKHRoaXMuZm9jdXNlZERheS55ZWFyLHRoaXMuZm9jdXNlZERheS5tb250aCkpLHRoaXMuX2ZvY3VzT25DYWxlbmRhckNoYW5nZS5uZXh0KCl9cmVzZXRTZWxlY3RlZERheSgpe3RoaXMuc2VsZWN0ZWREYXk9dGhpcy5wZXJzaXN0ZWREYXRlLHRoaXMu''@;'; put 'put ''c2VsZWN0ZWRFbmREYXk9dGhpcy5wZXJzaXN0ZWRFbmREYXRlfWNvbnZlcnREYXRlVG9EYXlNb2RlbChhKXtyZXR1cm4gbmV3IFJkKGEuZ2V0RnVsbFllYXIoKSxhLmdldE1vbnRoKCksYS5nZXREYXRlKCkpfXNldFNlbGVjdGVkRGF5KGEsZCl7dGhpcy5zZWxlY3RlZERheT1hLGQmJnRoaXMu''@;'; put 'put ''X3NlbGVjdGVkRGF5Q2hhbmdlLm5leHQoYSl9c2V0U2VsZWN0ZWRFbmREYXkoYSxkKXt0aGlzLnNlbGVjdGVkRW5kRGF5PWEsZCYmdGhpcy5fc2VsZWN0ZWRFbmREYXlDaGFuZ2UubmV4dChhKX1zZXREaXNwbGF5ZWRDYWxlbmRhcihhKXt0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhci5pc0VxdWFs''@;'; put 'put ''KGEpfHwodGhpcy5fZGlzcGxheWVkQ2FsZW5kYXI9YSx0aGlzLl9kaXNwbGF5ZWRDYWxlbmRhckNoYW5nZS5uZXh0KCkpfWluaXRpYWxpemVUb2RheXNEYXRlKCl7dGhpcy5fdG9kYXlzRnVsbERhdGU9bmV3IERhdGUsdGhpcy5fdG9kYXk9bmV3IFJkKHRoaXMuX3RvZGF5c0Z1bGxEYXRlLmdl''@;'; put 'put ''dEZ1bGxZZWFyKCksdGhpcy5fdG9kYXlzRnVsbERhdGUuZ2V0TW9udGgoKSx0aGlzLl90b2RheXNGdWxsRGF0ZS5nZXREYXRlKCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAy''@;'; put 'put ''NzVmYWN9KSxjfSkoKSxfbT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5fbmdab25lPWEsdGhpcy5wbGF0Zm9ybUlkPWR9Zm9jdXNDZWxsKGEpe3RoaXMuX25nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMubmdab25lSXNTdGFibGVJbkJyb3dzZXIoKS5zdWJz''@;'; put 'put ''Y3JpYmUoKCk9Pntjb25zdCBkPWEubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdbdGFiaW5kZXg9IjAiXScpO2QmJmQuZm9jdXMoKX0pfSl9Zm9jdXNJbnB1dChhKXt0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9PnRoaXMubmdab25lSXNTdGFibGVJbkJyb3dzZXIoKS5z''@;'; put 'put ''dWJzY3JpYmUoKCk9PmEuZm9jdXMoKSkpfWVsZW1lbnRJc0ZvY3VzZWQoYSl7cmV0dXJuIFhzKHRoaXMucGxhdGZvcm1JZCkmJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ9PT1hfW5nWm9uZUlzU3RhYmxlSW5Ccm93c2VyKCl7cmV0dXJuIHRoaXMuX25nWm9uZS5vblN0YWJsZS5hc09ic2VydmFi''@;'; put 'put ''bGUoKS5waXBlKG5tKCksV2woKCk9PlhzKHRoaXMucGxhdGZvcm1JZCkpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoTXIoWW8pLE1yKG9hKSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksYWc9''@;'; put 'put ''KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmRpc2FibGVkRGF0ZXM9e21pbkRhdGU6bmV3IFJkKDAsMCwxKSxtYXhEYXRlOm5ldyBSZCg5OTk5LDExLDMxKX0sdGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdD0iZGQvTU0veSIsdGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PVVMLHRo''@;'; put 'put ''aXMuZGVsaW1pdGVycz1bIi8iLCIvIl0sdGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdD1hLmxvY2FsZURhdGVGb3JtYXQsdGhpcy5pbml0aWFsaXplTG9jYWxlRGlzcGxheUZvcm1hdCgpfWdldCBwbGFjZWhvbGRlclRleHQoKXtjb25zdCBhPXRoaXMubG9jYWxlRGlzcGxheUZvcm1hdC5mb3Jt''@;'; put 'put ''YXQ7cmV0dXJuIGFbMF0rdGhpcy5kZWxpbWl0ZXJzWzBdK2FbMV0rdGhpcy5kZWxpbWl0ZXJzWzFdK2FbMl19c2V0TWluRGF0ZShhKXtpZihhKXtjb25zdFtkLGgsZl09YS5zcGxpdCgiLSIpLm1hcCh2PT5wYXJzZUludCh2LDEwKSk7dGhpcy5kaXNhYmxlZERhdGVzLm1pbkRhdGU9bmV3IFJk''@;'; put 'put ''KGQsaC0xLGYpfWVsc2UgdGhpcy5kaXNhYmxlZERhdGVzLm1pbkRhdGU9bmV3IFJkKDAsMCwxKX1zZXRNYXhEYXRlKGEpe2lmKGEpe2NvbnN0W2QsaCxmXT1hLnNwbGl0KCItIikubWFwKHY9PnBhcnNlSW50KHYsMTApKTt0aGlzLmRpc2FibGVkRGF0ZXMubWF4RGF0ZT1uZXcgUmQoZCxoLTEs''@;'; put 'put ''Zil9ZWxzZSB0aGlzLmRpc2FibGVkRGF0ZXMubWF4RGF0ZT1uZXcgUmQoOTk5OSwxMSwzMSl9c2V0UmFuZ2VPcHRpb25zKGEpe2NvbnN0IGQ9dGhpcy52YWxpZGF0ZURhdGVSYW5nZU9wdGlvbnMoYSk7dGhpcy5kYXRlUmFuZ2VPcHRpb25zPWR8fFtdfWdldFJhbmdlT3B0aW9ucygpe3JldHVy''@;'; put 'put ''biB0aGlzLmRhdGVSYW5nZU9wdGlvbnN9dG9Mb2NhbGVEaXNwbGF5Rm9ybWF0U3RyaW5nKGEpe2lmKGEpe2lmKGlzTmFOKGEuZ2V0VGltZSgpKSlyZXR1cm4iIjtjb25zdCBkPWEuZ2V0RGF0ZSgpLGg9YS5nZXRNb250aCgpKzEsZj1kPjk/ZC50b1N0cmluZygpOiIwIitkLHY9aD45P2gudG9T''@;'; put 'put ''dHJpbmcoKToiMCIraDtyZXR1cm4gdGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PT09VUw/Zit0aGlzLmRlbGltaXRlcnNbMF0rdit0aGlzLmRlbGltaXRlcnNbMV0rYS5nZXRGdWxsWWVhcigpOnRoaXMubG9jYWxlRGlzcGxheUZvcm1hdD09PSRZP3YrdGhpcy5kZWxpbWl0ZXJzWzBdK2YrdGhp''@;'; put 'put ''cy5kZWxpbWl0ZXJzWzFdK2EuZ2V0RnVsbFllYXIoKTphLmdldEZ1bGxZZWFyKCkrdGhpcy5kZWxpbWl0ZXJzWzBdK3YrdGhpcy5kZWxpbWl0ZXJzWzFdK2Z9cmV0dXJuIiJ9Z2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcoYSl7aWYoIWF8fCJzdHJpbmciIT10eXBlb2YgYSlyZXR1cm4gbnVs''@;'; put 'put ''bDtjb25zdCBkPWEubWF0Y2goSVVlKTtpZighZHx8MyE9PWQubGVuZ3RoKXJldHVybiBudWxsO2NvbnN0W2gsZix2XT1kO3JldHVybiB0aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQ9PT1VTD90aGlzLnZhbGlkYXRlQW5kR2V0RGF0ZSh2LGYsaCk6dGhpcy5sb2NhbGVEaXNwbGF5Rm9ybWF0PT09''@;'; put 'put ''JFk/dGhpcy52YWxpZGF0ZUFuZEdldERhdGUodixoLGYpOnRoaXMudmFsaWRhdGVBbmRHZXREYXRlKGgsZix2KX12YWxpZGF0ZURhdGVSYW5nZU9wdGlvbnMoYSl7Y29uc3QgZD1bXTtyZXR1cm4gYT8uZm9yRWFjaChoPT57MiE9PWg/LnZhbHVlPy5sZW5ndGh8fCJbb2JqZWN0IERhdGVdIiE9''@;'; put 'put ''PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChoPy52YWx1ZVswXSl8fCJbb2JqZWN0IERhdGVdIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChoPy52YWx1ZVsxXSl8fGQucHVzaChoKX0pLGR9aW5pdGlhbGl6ZUxvY2FsZURpc3BsYXlGb3JtYXQoKXtjb25zdCBhPXRo''@;'; put 'put ''aXMuY2xkckxvY2FsZURhdGVGb3JtYXQudG9Mb2NhbGVMb3dlckNhc2UoKTt0aGlzLmxvY2FsZURpc3BsYXlGb3JtYXQ9QVVlLnRlc3QoYSk/VUw6a1VlLnRlc3QoYSk/JFk6T1VlLHRoaXMuZXh0cmFjdERlbGltaXRlcnMoKX1leHRyYWN0RGVsaW1pdGVycygpe2lmKHRoaXMuY2xkckxvY2Fs''@;'; put 'put ''ZURhdGVGb3JtYXQpe2NvbnN0IGQ9dGhpcy5jbGRyTG9jYWxlRGF0ZUZvcm1hdC5yZXBsYWNlKExVZSwiIikuc3BsaXQoRFVlKTtkJiY0PT09ZC5sZW5ndGg/dGhpcy5kZWxpbWl0ZXJzPVtkWzFdLGRbMl1dOmNvbnNvbGUuZXJyb3IoIlVuZXhwZWN0ZWQgZGF0ZSBmb3JtYXQgcmVjZWl2ZWQu''@;'; put 'put ''IERlbGltaXRlcnMgZXh0cmFjdGVkOiAiLGQpfX1pc1ZhbGlkTW9udGgoYSl7cmV0dXJuIGE+LTEmJmE8MTJ9aXNWYWxpZERhdGUoYSxkLGgpe3JldHVybiBoPjAmJmg8PXExZShhLGQpfXZhbGlkYXRlQW5kR2V0RGF0ZShhLGQsaCl7Y29uc3QgZj0rYSx2PStkLTEsTT0raDtpZighdGhpcy5p''@;'; put 'put ''c1ZhbGlkTW9udGgodil8fCF0aGlzLmlzVmFsaWREYXRlKGYsdixNKSlyZXR1cm4gbnVsbDtjb25zdCBEPWZ1bmN0aW9uIEhVZShjKXtpZihjPjk5OTl8fGM+MTAwJiZjPDk5OXx8YzwxMClyZXR1cm4tMTtpZihjPjk5OSlyZXR1cm4gYztjb25zdCBsPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIo''@;'; put 'put ''KTtsZXQgZD1jKzEwMCpNYXRoLmZsb29yKGwvMTAwKTtyZXR1cm4gZD5sKzIwJiYoZC09MTAwKSxkfShmKTtyZXR1cm4tMSE9PUQ/bmV3IERhdGUoRCx2LE0pOm51bGx9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKE1yKHp4KSl9LGMuXHUwMjc1cHJv''@;'; put 'put ''dj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksank9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3RvdWNoZWRDaGFuZ2U9bmV3IFduLHRoaXMuX2RpcnR5Q2hhbmdlPW5ldyBXbn1nZXQgdG91Y2hlZENoYW5nZSgpe3JldHVybiB0aGlzLl90b3VjaGVk''@;'; put 'put ''Q2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBkaXJ0eUNoYW5nZSgpe3JldHVybiB0aGlzLl9kaXJ0eUNoYW5nZS5hc09ic2VydmFibGUoKX1tYXJrQXNUb3VjaGVkKCl7dGhpcy5fdG91Y2hlZENoYW5nZS5uZXh0KCl9bWFya0FzRGlydHkoKXt0aGlzLl9kaXJ0eUNoYW5nZS5uZXh0KCl9c2V0''@;'; put 'put ''RGlzYWJsZWQoYSl7dGhpcy5kaXNhYmxlZD1hfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxYMWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQp''@;'; put 'put ''e3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZT1hLHRoaXMuY29tbW9uU3RyaW5ncz1kLHRoaXMub25TZWxlY3REYXk9bmV3IHFyfWdldCBkYXlWaWV3KCl7cmV0dXJuIHRoaXMuX2RheVZpZXd9c2V0IGRheVZpZXcoYSl7dGhpcy5fZGF5Vmlldz1hfWdldCBkYXlTdHJpbmcoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5kYXlWaWV3LmlzU2VsZWN0ZWQ/dGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJTZWxlY3RlZExhYmVsLHtGVUxMX0RBVEU6dGhpcy5fZGF5Vmlldy5kYXlNb2RlbC50b0RhdGVTdHJpbmcoKX0pOnRoaXMuX2RheVZpZXcuZGF5''@;'; put 'put ''TW9kZWwudG9EYXRlU3RyaW5nKCl9Z2V0IGlzUmFuZ2VTdGFydERheSgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmdGhpcy5kYXlWaWV3Py5kYXlNb2RlbD8udG9Db21wYXJpc29uU3RyaW5nKCk9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZp''@;'; put 'put ''Y2Uuc2VsZWN0ZWREYXk/LnRvQ29tcGFyaXNvblN0cmluZygpfWdldCBpc1JhbmdlRW5kRGF5KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLmRheVZpZXc/LmRheU1vZGVsPy50b0NvbXBhcmlzb25TdHJpbmcoKT09PXRoaXMuX2RhdGVO''@;'; put 'put ''YXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT8udG9Db21wYXJpc29uU3RyaW5nKCl9aG92ZXJMaXN0ZW5lcigpe3RoaXMuZGF5Vmlldy5pc0Rpc2FibGVkfHwodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhvdmVyZWREYXk9dGhpcy5kYXlWaWV3LmRheU1vZGVsKX1vbkRheVZp''@;'; put 'put ''ZXdGb2N1cygpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5mb2N1c2VkRGF5PXRoaXMuZGF5Vmlldy5kYXlNb2RlbH1zZWxlY3REYXkoKXt0aGlzLmRheVZpZXcuaXNEaXNhYmxlZHx8dGhpcy5vblNlbGVjdERheS5lbWl0KHRoaXMuZGF5Vmlldy5kYXlNb2RlbCl9aXNJblJhbmdlKCl7''@;'; put 'put ''cmV0dXJuISF0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheSYmdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5P3RoaXMuX2RheVZpZXcuZGF5TW9kZWw/LmlzQWZ0''@;'; put 'put ''ZXIodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5KSYmdGhpcy5fZGF5Vmlldy5kYXlNb2RlbD8uaXNCZWZvcmUodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5KTohKCF0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXl8''@;'; put 'put ''fHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheSkmJnRoaXMuX2RheVZpZXcuZGF5TW9kZWw/LmlzQWZ0ZXIodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5KSYmdGhpcy5fZGF5Vmlldy5kYXlNb2RlbD8uaXNCZWZvcmUodGhpcy5fZGF0ZU5h''@;'; put 'put ''dmlnYXRpb25TZXJ2aWNlLmhvdmVyZWREYXksITApKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2Uod2gpLEdlKHRzKSl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXkiXV0saG9zdFZhcnM6Mixob3N0QmluZGlu''@;'; put 'put ''Z3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJtb3VzZWVudGVyIixmdW5jdGlvbigpe3JldHVybiBkLmhvdmVyTGlzdGVuZXIoKX0pLDImYSYmeHIoImRheSIsITApfSxpbnB1dHM6e2RheVZpZXc6W1puLk5vbmUsImNsckRheVZpZXciLCJkYXlWaWV3Il19LG91dHB1dHM6e29uU2VsZWN0RGF5''@;'; put 'put ''OiJzZWxlY3REYXkifSxkZWNsczoyLHZhcnM6MTksY29uc3RzOltbInR5cGUiLCJidXR0b24iLDEsImRheS1idG4iLDMsImNsaWNrIiwiZm9jdXMiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihkZSgwLCJidXR0b24iLDApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5z''@;'; put 'put ''ZWxlY3REYXkoKX0pKCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vbkRheVZpZXdGb2N1cygpfSksTGUoMSksaGUoKSksMiZhJiYoeHIoImlzLXRvZGF5IixkLmRheVZpZXcuaXNUb2RheXNEYXRlKSgiaXMtZXhjbHVkZWQiLGQuZGF5Vmlldy5pc0V4Y2x1ZGVkKSgiaXMtZGlzYWJsZWQi''@;'; put 'put ''LGQuZGF5Vmlldy5pc0Rpc2FibGVkKSgiaXMtc2VsZWN0ZWQiLGQuZGF5Vmlldy5pc1NlbGVjdGVkKSgiaW4tcmFuZ2UiLGQuaXNJblJhbmdlKCkpKCJpcy1zdGFydC1yYW5nZSIsZC5pc1JhbmdlU3RhcnREYXkpKCJpcy1lbmQtcmFuZ2UiLGQuaXNSYW5nZUVuZERheSksZHIoInRhYmluZGV4''@;'; put 'put ''IixkLmRheVZpZXcudGFiSW5kZXgpKCJhcmlhLWN1cnJlbnQiLGQuZGF5Vmlldy5pc1RvZGF5c0RhdGU/ImRhdGUiOiJmYWxzZSIpKCJhcmlhLWxhYmVsIixkLmRheVN0cmluZykoImFyaWEtc2VsZWN0ZWQiLGQuZGF5Vmlldy5pc1NlbGVjdGVkKSxmZSgpLFJyKCIgIixkLmRheVZpZXcuZGF5''@;'; put 'put ''TW9kZWwuZGF0ZSwiICIpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksSjFlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCl7dGhpcy5fbG9jYWxlSGVscGVyU2VydmljZT1hLHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZT1kLHRoaXMuX2RhdGVwaWNrZXJGb2N1''@;'; put 'put ''c1NlcnZpY2U9aCx0aGlzLl9kYXRlSU9TZXJ2aWNlPWYsdGhpcy5fZWxSZWY9dix0aGlzLl9kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlPU0sdGhpcy5fdG9nZ2xlU2VydmljZT1ELHRoaXMuX3N1YnM9W10sdGhpcy5nZW5lcmF0ZUNhbGVuZGFyVmlldygpLHRoaXMuaW5pdGlhbGl6ZVN1YnNjcmlw''@;'; put 'put ''dGlvbnMoKX1nZXQgbG9jYWxlRGF5cygpe3JldHVybiB0aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNlLmxvY2FsZURheXN9Z2V0IGNhbGVuZGFyKCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5kaXNwbGF5ZWRDYWxlbmRhcn1nZXQgc2VsZWN0ZWREYXkoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5fWdldCBzZWxlY3RlZEVuZERheSgpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXl9Z2V0IGZvY3VzZWREYXkoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmZvY3Vz''@;'; put 'put ''ZWREYXl9Z2V0IHRvZGF5KCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS50b2RheX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZil9bmdPbkRlc3Ryb3koKXt0aGlzLl9zdWJzLmZvckVhY2goYT0+''@;'; put 'put ''YS51bnN1YnNjcmliZSgpKX1vbktleURvd24oYSl7aWYoYSYmdGhpcy5mb2N1c2VkRGF5KXN3aXRjaChTMihhLmtleSkpe2Nhc2UgdG8uQXJyb3dVcDphLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmluY3JlbWVudEZvY3VzRGF5KC03KTticmVhaztjYXNl''@;'; put 'put ''IHRvLkFycm93RG93bjphLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmluY3JlbWVudEZvY3VzRGF5KDcpO2JyZWFrO2Nhc2UgdG8uQXJyb3dMZWZ0OmEucHJldmVudERlZmF1bHQoKSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaW5jcmVtZW50Rm9j''@;'; put 'put ''dXNEYXkoLTEpO2JyZWFrO2Nhc2UgdG8uQXJyb3dSaWdodDphLnByZXZlbnREZWZhdWx0KCksdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmluY3JlbWVudEZvY3VzRGF5KDEpfX1zZXRTZWxlY3RlZERheShhKXtjb25zdCBkPXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5oYXNBY3Rp''@;'; put 'put ''b25CdXR0b25zLGg9dGhpcy51cGRhdGVDYWxlbmRhclZpZXdNb2RhbChhKTt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uubm90aWZ5U2VsZWN0ZWREYXlDaGFuZ2VkKGgse2VtaXRFdmVudDohZH0pLGR8fCh0aGlzLl9kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlLm1hcmtBc0RpcnR5KCksdGhp''@;'; put 'put ''cy52YWxpZGF0ZUFuZENsb3NlRGF0ZVBpY2tlcigpKX1pbml0aWFsaXplU3Vic2NyaXB0aW9ucygpe3RoaXMuX3N1YnMucHVzaCh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXJDaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5nZW5lcmF0ZUNhbGVuZGFyVmll''@;'; put 'put ''dygpfSkpLHRoaXMuX3N1YnMucHVzaCh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZm9jdXNlZERheUNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBkYXRlRm9jdXNhYmxlRGF5KGEpfSkpLHRoaXMuX3N1YnMucHVzaCh0aGlzLl9kYXRlTmF2aWdhdGlv''@;'; put 'put ''blNlcnZpY2UuZm9jdXNPbkNhbGVuZGFyQ2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKX0pKSx0aGlzLl9zdWJzLnB1c2godGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnJlZnJlc2hDYWxlbmRhclZpZXcu''@;'; put 'put ''c3Vic2NyaWJlKCgpPT57dGhpcy5yZWZyZXNoQ2FsZW5kYXJWaWV3TW9kYWwoKX0pKX12YWxpZGF0ZUFuZENsb3NlRGF0ZVBpY2tlcigpeyh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5JiZ0''@;'; put 'put ''aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXl8fCF0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5KSYmKHRoaXMuX3RvZ2dsZVNlcnZpY2Uub3Blbj0hMSl9dXBkYXRl''@;'; put 'put ''Q2FsZW5kYXJWaWV3TW9kYWwoYSl7Y29uc3QgZD10aGlzLmNhbGVuZGFyVmlld01vZGVsLnNlbGVjdGVkRGF5fHxudWxsLGg9dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXI7bGV0IGY9dGhpcy5jYWxlbmRhclZpZXdNb2RlbC5zZWxlY3RlZEVuZERheXx8bnVsbDty''@;'; put 'put ''ZXR1cm4gaD8hZHx8ZCYmZnx8ZCYmYT8uaXNCZWZvcmUoZCk/KHRoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBkYXRlU2VsZWN0ZWREYXkoYSksZiYmKGY9dm9pZCAwLHRoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBkYXRlU2VsZWN0ZWRFbmREYXkoZikpKTp0aGlzLmNhbGVuZGFyVmlld01vZGVs''@;'; put 'put ''LnVwZGF0ZVNlbGVjdGVkRW5kRGF5KGEpOnRoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBkYXRlU2VsZWN0ZWREYXkoYSksaD97c3RhcnREYXRlOnRoaXMuY2FsZW5kYXJWaWV3TW9kZWwuc2VsZWN0ZWREYXksZW5kRGF0ZTp0aGlzLmNhbGVuZGFyVmlld01vZGVsLnNlbGVjdGVkRW5kRGF5fTp0''@;'; put 'put ''aGlzLmNhbGVuZGFyVmlld01vZGVsLnNlbGVjdGVkRGF5fXJlZnJlc2hDYWxlbmRhclZpZXdNb2RhbCgpe3RoaXMuY2FsZW5kYXJWaWV3TW9kZWwudXBkYXRlU2VsZWN0ZWREYXkodGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5KSx0aGlzLl9kYXRlTmF2aWdhdGlvblNl''@;'; put 'put ''cnZpY2UuaXNSYW5nZVBpY2tlciYmdGhpcy5jYWxlbmRhclZpZXdNb2RlbC51cGRhdGVTZWxlY3RlZEVuZERheSh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkpfWdlbmVyYXRlQ2FsZW5kYXJWaWV3KCl7dGhpcy5jYWxlbmRhclZpZXdNb2RlbD1uZXcgQlVlKHRo''@;'; put 'put ''aXMuY2FsZW5kYXIsdGhpcy5zZWxlY3RlZERheSx0aGlzLnNlbGVjdGVkRW5kRGF5LHRoaXMuZm9jdXNlZERheSx0aGlzLnRvZGF5LHRoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2UuZmlyc3REYXlPZldlZWssdGhpcy5fZGF0ZUlPU2VydmljZS5kaXNhYmxlZERhdGVzKX19cmV0dXJuIGMuXHUw''@;'; put 'put ''Mjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoengpLEdlKHdoKSxHZShfbSksR2UoYWcpLEdlKGVvKSxHZShqeSksR2UoYWMpKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWNhbGVuZGFyIl1dLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQp''@;'; put 'put ''ezEmYSYmRnQoImtleWRvd24iLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uS2V5RG93bihmKX0pfSxkZWNsczo0LHZhcnM6Mixjb25zdHM6W1sicm9sZSIsInByZXNlbnRhdGlvbiIsMSwiY2FsZW5kYXItdGFibGUiXSxbMSwiY2FsZW5kYXItcm93Iiwid2Vla2RheXMiXSxbImNsYXNzIiwiY2Fs''@;'; put 'put ''ZW5kYXItY2VsbCB3ZWVrZGF5Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwiY2FsZW5kYXItcm93Iiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY2FsZW5kYXItY2VsbCIsIndlZWtkYXkiXSxbMSwiY2FsZW5kYXItcm93Il0sWyJjbGFzcyIsImNhbGVuZGFyLWNlbGwiLDQsIm5n''@;'; put 'put ''Rm9yIiwibmdGb3JPZiJdLFsxLCJjYWxlbmRhci1jZWxsIl0sWzMsInNlbGVjdERheSIsImNsckRheVZpZXciXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihkZSgwLCJ0YWJsZSIsMCkoMSwidHIiLDEpLGd0KDIsck5lLDMsMiwidGgiLDIpLGhlKCksZ3QoMyxvTmUsMiwxLCJ0ciIs''@;'; put 'put ''MyksaGUoKSksMiZhJiYoZmUoMikseGUoIm5nRm9yT2YiLGQubG9jYWxlRGF5cyksZmUoKSx4ZSgibmdGb3JPZiIsZC5jYWxlbmRhclZpZXdNb2RlbC5jYWxlbmRhclZpZXcpKX0sZGVwZW5kZW5jaWVzOltzcyxYMWVdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFpMPSgoKT0+e2NsYXNzIGN7''@;'; put 'put ''Y29uc3RydWN0b3IoYSl7dGhpcy5fZG9jdW1lbnQ9YSx0aGlzLl9pc1VzZXJBZ2VudE1vYmlsZT0hMSxhJiYodGhpcy5faXNVc2VyQWdlbnRNb2JpbGU9UlVlLnRlc3QoYS5kZWZhdWx0Vmlldy5uYXZpZ2F0b3IudXNlckFnZW50KSx0aGlzLl9pbm5lcldpZHRoPWEuZGVmYXVsdFZpZXcuaW5u''@;'; put 'put ''ZXJXaWR0aCl9Z2V0IGlzRW5hYmxlZCgpe3JldHVybiEodGhpcy5fZG9jdW1lbnQmJnRoaXMuX2lubmVyV2lkdGg8NzY4JiZ0aGlzLl9pc1VzZXJBZ2VudE1vYmlsZSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKE1yKHZzKSl9LGMuXHUwMjc1cHJv''@;'; put 'put ''dj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksS1k9KCgpPT57Y2xhc3MgYyBleHRlbmRzIHk3e2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQsWixuZSxjZSxiZSxFZSxCZSl7c3VwZXIoYSxaeCxkLHYsZixoKSx0aGlzLmVsPWgsdGhpcy5yZW5kZXJlcj1mLHRoaXMu''@;'; put 'put ''Y29udHJvbD12LHRoaXMuY29udGFpbmVyPU0sdGhpcy5kYXRlSU9TZXJ2aWNlPUQsdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2U9Wix0aGlzLmRhdGVwaWNrZXJFbmFibGVkU2VydmljZT1uZSx0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2U9Y2UsdGhpcy5wbGF0Zm9ybUlkPWJlLHRoaXMu''@;'; put 'put ''Zm9jdXNTZXJ2aWNlPUVlLHRoaXMuZGF0ZXBpY2tlckZvY3VzU2VydmljZT1CZSx0aGlzLmluZGV4PTF9Z2V0IGRpc2FibGVkKCl7cmV0dXJuIHRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZT90aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UuZGlzYWJsZWR8fCEhdGhpcy5jb250cm9sPy5j''@;'; put 'put ''b250cm9sPy5kaXNhYmxlZDpudWxsfXNldCBkaXNhYmxlZChhKXt0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UmJnRoaXMuZGF0ZUZvcm1Db250cm9sU2VydmljZS5zZXREaXNhYmxlZChHZihhKSl9Z2V0IHBsYWNlaG9sZGVyVGV4dCgpe3JldHVybiB0aGlzLnBsYWNlaG9sZGVyP3RoaXMu''@;'; put 'put ''cGxhY2Vob2xkZXI6dGhpcy5kYXRlSU9TZXJ2aWNlLnBsYWNlaG9sZGVyVGV4dH1nZXQgaW5wdXRUeXBlKCl7cmV0dXJuIFhzKHRoaXMucGxhdGZvcm1JZCkmJnRoaXMudXNpbmdOYXRpdmVEYXRlcGlja2VyKCk/ImRhdGUiOiJ0ZXh0In1uZ09uSW5pdCgpe3N1cGVyLm5nT25Jbml0KCksdGhp''@;'; put 'put ''cy5wb3B1bGF0ZVNlcnZpY2VzRnJvbUNvbnRhaW5lckNvbXBvbmVudCgpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yVXNlclNlbGVjdGVkRGF5Q2hhbmdlcygpLHRoaXMubGlzdGVuRm9yQ29udHJvbFZhbHVlQ2hhbmdlcygpLHRoaXMubGlzdGVuRm9yVG91Y2hDaGFu''@;'; put 'put ''Z2VzKCksdGhpcy5saXN0ZW5Gb3JEaXJ0eUNoYW5nZXMoKSx0aGlzLmxpc3RlbkZvcklucHV0UmVmb2N1cygpKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLnByb2Nlc3NJbml0aWFsSW5wdXRzKCl9c2V0Rm9jdXNTdGF0ZXMoKXt0aGlzLnNldEZvY3VzKCEwKX10cmlnZ2VyVmFsaWRhdGlvbigp''@;'; put 'put ''e3N1cGVyLnRyaWdnZXJWYWxpZGF0aW9uKCksdGhpcy5zZXRGb2N1cyghMSl9b25WYWx1ZUNoYW5nZShhKXtjb25zdCBkPXRoaXMuZGF0ZUlPU2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyhhLnZhbHVlKTtpZih0aGlzLnVzaW5nQ2xhcml0eURhdGVwaWNrZXIoKSYmZCl0aGlz''@;'; put 'put ''LnVwZGF0ZURhdGUoZCwhMCk7ZWxzZSBpZih0aGlzLnVzaW5nTmF0aXZlRGF0ZXBpY2tlcigpKXtjb25zdFtoLGYsdl09YS52YWx1ZS5zcGxpdCgiLSIpO3RoaXMudXBkYXRlRGF0ZShuZXcgRGF0ZSgraCwrZi0xLCt2KSwhMCl9ZWxzZSB0aGlzLmVtaXREYXRlT3V0cHV0KG51bGwpfWRhdGVw''@;'; put 'put ''aWNrZXJIYXNGb3JtQ29udHJvbCgpe3JldHVybiEhdGhpcy5jb250cm9sfXNldERhdGUoYSl7InN0cmluZyI9PXR5cGVvZiBhJiYoYT1uZXcgRGF0ZShhKSksdGhpcy5wcmV2aW91c0RhdGVDaGFuZ2UhPT1hJiZ0aGlzLnVwZGF0ZURhdGUoYSksdGhpcy5pbml0aWFsQ2xyRGF0ZUlucHV0VmFs''@;'; put 'put ''dWV8fCh0aGlzLmluaXRpYWxDbHJEYXRlSW5wdXRWYWx1ZT1hKX11c2luZ0NsYXJpdHlEYXRlcGlja2VyKCl7cmV0dXJuIHRoaXMuZGF0ZXBpY2tlckVuYWJsZWRTZXJ2aWNlLmlzRW5hYmxlZH11c2luZ05hdGl2ZURhdGVwaWNrZXIoKXtyZXR1cm4hdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNl''@;'; put 'put ''cnZpY2UuaXNFbmFibGVkfXNldEZvY3VzKGEpe3RoaXMuZm9jdXNTZXJ2aWNlJiYodGhpcy5mb2N1c1NlcnZpY2UuZm9jdXNlZD1hKX1wb3B1bGF0ZVNlcnZpY2VzRnJvbUNvbnRhaW5lckNvbXBvbmVudCgpe3RoaXMuY29udGFpbmVyfHwodGhpcy5kYXRlSU9TZXJ2aWNlPXRoaXMuZ2V0UHJv''@;'; put 'put ''dmlkZXJGcm9tQ29udGFpbmVyKGFnKSx0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZT10aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcih3aCksdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2U9dGhpcy5nZXRQcm92aWRlckZyb21Db250YWluZXIoWkwpLHRoaXMuZGF0ZUZvcm1Db250''@;'; put 'put ''cm9sU2VydmljZT10aGlzLmdldFByb3ZpZGVyRnJvbUNvbnRhaW5lcihqeSkpfXByb2Nlc3NJbml0aWFsSW5wdXRzKCl7dGhpcy5kYXRlcGlja2VySGFzRm9ybUNvbnRyb2woKT90aGlzLnVwZGF0ZURhdGUodGhpcy5kYXRlSU9TZXJ2aWNlLmdldERhdGVWYWx1ZUZyb21EYXRlU3RyaW5nKHRo''@;'; put 'put ''aXMuY29udHJvbC52YWx1ZSkpOnRoaXMudXBkYXRlRGF0ZSh0aGlzLmluaXRpYWxDbHJEYXRlSW5wdXRWYWx1ZSl9dXBkYXRlRGF0ZShhLGQ9ITEpe2NvbnN0IGg9dGhpcy5nZXRWYWxpZERhdGVWYWx1ZUZyb21EYXRlKGEpO2lmKGQ/dGhpcy5lbWl0RGF0ZU91dHB1dChoKTp0aGlzLnByZXZp''@;'; put 'put ''b3VzRGF0ZUNoYW5nZT1oLHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlKXtjb25zdCBmPWg/bmV3IFJkKGguZ2V0RnVsbFllYXIoKSxoLmdldE1vbnRoKCksaC5nZXREYXRlKCkpOm51bGw7dGhpcy51cGRhdGVEYXlNb2RlbChmKX10aGlzLnVwZGF0ZUlucHV0KGgpfXVwZGF0ZUlucHV0KGEp''@;'; put 'put ''e2lmKGEpe2NvbnN0IGQ9dGhpcy5kYXRlSU9TZXJ2aWNlLnRvTG9jYWxlRGlzcGxheUZvcm1hdFN0cmluZyhhKTt0aGlzLnVzaW5nTmF0aXZlRGF0ZXBpY2tlcigpPyhhLnNldE1pbnV0ZXMoYS5nZXRNaW51dGVzKCktYS5nZXRUaW1lem9uZU9mZnNldCgpKSx0aGlzLnJlbmRlcmVyLnNldFBy''@;'; put 'put ''b3BlcnR5KHRoaXMuZWwubmF0aXZlRWxlbWVudCwidmFsdWVBc0RhdGUiLGEpKTp0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpJiZkIT09dGhpcy5jb250cm9sLnZhbHVlP3RoaXMuY29udHJvbC5jb250cm9sLnNldFZhbHVlKGQpOnRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhp''@;'; put 'put ''cy5lbC5uYXRpdmVFbGVtZW50LCJ2YWx1ZSIsZCksdGhpcy52YWxpZGF0ZURhdGVSYW5nZSgpfWVsc2UgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsInZhbHVlIiwiIil9Z2V0VmFsaWREYXRlVmFsdWVGcm9tRGF0ZShhKXtpZih0aGlzLmRhdGVJT1Nl''@;'; put 'put ''cnZpY2Upe2NvbnN0IGQ9dGhpcy5kYXRlSU9TZXJ2aWNlLnRvTG9jYWxlRGlzcGxheUZvcm1hdFN0cmluZyhhKTtyZXR1cm4gdGhpcy5kYXRlSU9TZXJ2aWNlLmdldERhdGVWYWx1ZUZyb21EYXRlU3RyaW5nKGQpfXJldHVybiBudWxsfWVtaXREYXRlT3V0cHV0KGEpeyFmdW5jdGlvbiBOVWUo''@;'; put 'put ''YyxsKXtyZXR1cm4gYyBpbnN0YW5jZW9mIERhdGUmJmwgaW5zdGFuY2VvZiBEYXRlJiZjLmdldEZ1bGxZZWFyKCk9PT1sLmdldEZ1bGxZZWFyKCkmJmMuZ2V0TW9udGgoKT09PWwuZ2V0TW9udGgoKSYmYy5nZXREYXRlKCk9PT1sLmdldERhdGUoKX0oYSx0aGlzLnByZXZpb3VzRGF0ZUNoYW5n''@;'; put 'put ''ZSk/KHRoaXMuZGF0ZUNoYW5nZS5lbWl0KGEpLHRoaXMucHJldmlvdXNEYXRlQ2hhbmdlPWEpOiFhJiZ0aGlzLnByZXZpb3VzRGF0ZUNoYW5nZSYmKHRoaXMuZGF0ZUNoYW5nZS5lbWl0KG51bGwpLHRoaXMucHJldmlvdXNEYXRlQ2hhbmdlPW51bGwpfWxpc3RlbkZvckNvbnRyb2xWYWx1ZUNo''@;'; put 'put ''YW5nZXMoKXtyZXR1cm4gdGhpcy5kYXRlcGlja2VySGFzRm9ybUNvbnRyb2woKT90aGlzLmNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoV2woKCk9PiF0aGlzLmRhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZWxlbWVudElzRm9jdXNlZCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpKSkuc3Vic2NyaWJl''@;'; put 'put ''KGE9PnRoaXMudXBkYXRlRGF0ZSh0aGlzLmRhdGVJT1NlcnZpY2UuZ2V0RGF0ZVZhbHVlRnJvbURhdGVTdHJpbmcoYSkpKTpudWxsfWxpc3RlbkZvclVzZXJTZWxlY3RlZERheUNoYW5nZXMoKXtyZXR1cm4gdGhpcy51c2VyU2VsZWN0ZWREYXlDaGFuZ2Uuc3Vic2NyaWJlKGE9PnRoaXMudXBk''@;'; put 'put ''YXRlRGF0ZShhPy50b0RhdGUoKSwhMCkpfWxpc3RlbkZvclRvdWNoQ2hhbmdlcygpe3JldHVybiB0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UudG91Y2hlZENoYW5nZS5waXBlKFdsKCgpPT50aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpKSkuc3Vic2NyaWJlKCgpPT50aGlzLmNv''@;'; put 'put ''bnRyb2wuY29udHJvbC5tYXJrQXNUb3VjaGVkKCkpfWxpc3RlbkZvckRpcnR5Q2hhbmdlcygpe3JldHVybiB0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2UuZGlydHlDaGFuZ2UucGlwZShXbCgoKT0+dGhpcy5kYXRlcGlja2VySGFzRm9ybUNvbnRyb2woKSkpLnN1YnNjcmliZSgoKT0+dGhp''@;'; put 'put ''cy5jb250cm9sLmNvbnRyb2wubWFya0FzRGlydHkoKSl9bGlzdGVuRm9ySW5wdXRSZWZvY3VzKCl7cmV0dXJuIHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Q2hhbmdlLnBpcGUoV2woYT0+ISFhJiYhdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tl''@;'; put 'put ''cikpLnN1YnNjcmliZSgoKT0+dGhpcy5kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzSW5wdXQodGhpcy5lbC5uYXRpdmVFbGVtZW50KSl9dmFsaWRhdGVEYXRlUmFuZ2UoKXtpZih0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyKXtjb25zdCBhPXRoaXMubmdDb250''@;'; put 'put ''cm9sU2VydmljZT8uY29udHJvbCxkPXRoaXMubmdDb250cm9sU2VydmljZT8uYWRkaXRpb25hbENvbnRyb2xzO3RoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py5pc0JlZm9yZSh0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheSwhMCkmJihhPy5o''@;'; put 'put ''YXNFcnJvcigicmFuZ2UiKXx8ZD8uc29tZShmPT5mLmhhc0Vycm9yKCJyYW5nZSIpKSkmJihhLmNvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pLGQuZm9yRWFjaChmPT57Zj8uY29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7ZW1pdEV2ZW50OiEx''@;'; put 'put ''fSl9KSl9fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShEYSksR2UoRHMpLEdlKGVvKSxHZShFYSksR2UoaDEsMTApLEdlKGtzKCgpPT5aeCksOCksR2UoYWcsOCksR2Uod2gsOCksR2UoWkwsOCksR2UoanksOCksR2Uob2EpLEdlKE55LDgpLEdl''@;'; put 'put ''KF9tKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsaG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJmb2N1cyIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zZXRGb2N1c1N0YXRlcygpfSkoImJsdXIiLGZ1bmN0aW9uKCl7cmV0dXJuIGQudHJpZ2dlclZhbGlkYXRp''@;'; put 'put ''b24oKX0pKCJjaGFuZ2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uVmFsdWVDaGFuZ2UoZi50YXJnZXQpfSksMiZhJiYodHAoImRpc2FibGVkIixkLmRpc2FibGVkKSxkcigicGxhY2Vob2xkZXIiLGQucGxhY2Vob2xkZXJUZXh0KSgidHlwZSIsZC5pbnB1dFR5cGUpKX0saW5wdXRzOntwbGFj''@;'; put 'put ''ZWhvbGRlcjoicGxhY2Vob2xkZXIiLGRpc2FibGVkOiJkaXNhYmxlZCJ9LGZlYXR1cmVzOltDb119KSxjfSkoKSxRMWU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEtZe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmRhdGVDaGFuZ2U9bmV3IHFyKCExKSx0aGlzLmlucHV0''@;'; put 'put ''V2lkdGg9MTN9c2V0IGRhdGUoYSl7dGhpcy5zZXREYXRlKGEpfWdldCBpbnB1dFNpemUoKXtyZXR1cm4gdGhpcy5pbnB1dFdpZHRofWdldCB1c2VyU2VsZWN0ZWREYXlDaGFuZ2UoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXlDaGFuZ2V9dHJpZ2dl''@;'; put 'put ''ckNvbnRyb2xJbnB1dFZhbGlkYXRpb24oKXt0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpJiYodGhpcy5jb250cm9sLmNvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoe2VtaXRFdmVudDohMX0pLHRoaXMuY29udHJvbC5jb250cm9sPy5zZXRFcnJvcnModGhpcy5jb250cm9s''@;'; put 'put ''LmNvbnRyb2wuZXJyb3JzKSl9dXBkYXRlRGF5TW9kZWwoYSl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UucGVyc2lzdGVkRW5kRGF0ZT10aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT1hfX1yZXR1cm4gYy5cdTAyNzVmYWM9KCgpPT57bGV0IGw7cmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uKGQpe3JldHVybihsfHwobD1acyhjKSkpKGR8fGMpfX0pKCksYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyRW5kRGF0ZSIsIiJdXSxob3N0VmFyczozLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGRyKCJzaXplIixkLmlucHV0U2l6ZSks''@;'; put 'put ''eHIoImNsci1pbnB1dCIsITApKX0saW5wdXRzOntpbnB1dFdpZHRoOiJpbnB1dFdpZHRoIixkYXRlOltabi5Ob25lLCJjbHJFbmREYXRlIiwiZGF0ZSJdfSxvdXRwdXRzOntkYXRlQ2hhbmdlOiJjbHJFbmREYXRlQ2hhbmdlIn0sZmVhdHVyZXM6W3BvKFtfbV0pLENvXX0pLGN9KSgpLFdMPSgo''@;'; put 'put ''KT0+e2NsYXNzIGMgZXh0ZW5kcyBLWXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5kYXRlQ2hhbmdlPW5ldyBxcighMSl9c2V0IGRhdGUoYSl7dGhpcy5zZXREYXRlKGEpfXNldCBtaW4oYSl7dGhpcy5kYXRlSU9TZXJ2aWNlLnNldE1pbkRhdGUoYSksdGhpcy50cmln''@;'; put 'put ''Z2VyQ29udHJvbFZhbGlkYXRpb24oKX1zZXQgbWF4KGEpe3RoaXMuZGF0ZUlPU2VydmljZS5zZXRNYXhEYXRlKGEpLHRoaXMudHJpZ2dlckNvbnRyb2xWYWxpZGF0aW9uKCl9Z2V0IHVzZXJTZWxlY3RlZERheUNoYW5nZSgpe3JldHVybiB0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxl''@;'; put 'put ''Y3RlZERheUNoYW5nZX11cGRhdGVEYXlNb2RlbChhKXt0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5wZXJzaXN0ZWREYXRlPXRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5PWF9dHJpZ2dlckNvbnRyb2xWYWxpZGF0aW9uKCl7dGhpcy5kYXRlcGlja2VySGFzRm9ybUNv''@;'; put 'put ''bnRyb2woKSYmKHRoaXMuY29udHJvbC5jb250cm9sPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtlbWl0RXZlbnQ6ITF9KSx0aGlzLmNvbnRyb2wuY29udHJvbD8uc2V0RXJyb3JzKHRoaXMuY29udHJvbC5jb250cm9sLmVycm9ycykpfX1yZXR1cm4gYy5cdTAyNzVmYWM9KCgpPT57bGV0IGw7''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD1acyhjKSkpKGR8fGMpfX0pKCksYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyRGF0ZSIsIiJdXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmeHIoImNsci1pbnB1dCIsITAp''@;'; put 'put ''fSxpbnB1dHM6e2RhdGU6W1puLk5vbmUsImNsckRhdGUiLCJkYXRlIl0sbWluOiJtaW4iLG1heDoibWF4In0sb3V0cHV0czp7ZGF0ZUNoYW5nZToiY2xyRGF0ZUNoYW5nZSJ9LGZlYXR1cmVzOltwbyhbX21dKSxDb119KSxjfSkoKSxlZGU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEtZe2NvbnN0''@;'; put 'put ''cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSx0aGlzLmRhdGVDaGFuZ2U9bmV3IHFyKCExKSx0aGlzLmlucHV0V2lkdGg9MTN9c2V0IGRhdGUoYSl7dGhpcy5zZXREYXRlKGEpfWdldCBpbnB1dFNpemUoKXtyZXR1cm4gdGhpcy5pbnB1dFdpZHRofWdldCB1c2VyU2VsZWN0ZWREYXlDaGFu''@;'; put 'put ''Z2UoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXlDaGFuZ2V9dHJpZ2dlckNvbnRyb2xJbnB1dFZhbGlkYXRpb24oKXt0aGlzLmRhdGVwaWNrZXJIYXNGb3JtQ29udHJvbCgpJiYodGhpcy5jb250cm9sLmNvbnRyb2w/LnVwZGF0ZVZhbHVlQW5kVmFsaWRp''@;'; put 'put ''dHkoe2VtaXRFdmVudDohMX0pLHRoaXMuY29udHJvbC5jb250cm9sPy5zZXRFcnJvcnModGhpcy5jb250cm9sLmNvbnRyb2wuZXJyb3JzKSl9dXBkYXRlRGF5TW9kZWwoYSl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UucGVyc2lzdGVkRGF0ZT10aGlzLmRhdGVOYXZpZ2F0aW9uU2Vydmlj''@;'; put 'put ''ZS5zZWxlY3RlZERheT1hfX1yZXR1cm4gYy5cdTAyNzVmYWM9KCgpPT57bGV0IGw7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybihsfHwobD1acyhjKSkpKGR8fGMpfX0pKCksYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyU3RhcnREYXRlIiwiIl1dLGhvc3RWYXJz''@;'; put 'put ''OjUsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiYoZHIoInNpemUiLGQuaW5wdXRTaXplKSxfZCgidGV4dC1hbGlnbiIsInJpZ2h0IikseHIoImNsci1pbnB1dCIsITApKX0saW5wdXRzOntpbnB1dFdpZHRoOiJpbnB1dFdpZHRoIixkYXRlOltabi5Ob25lLCJjbHJTdGFydERhdGUi''@;'; put 'put ''LCJkYXRlIl19LG91dHB1dHM6e2RhdGVDaGFuZ2U6ImNsclN0YXJ0RGF0ZUNoYW5nZSJ9LGZlYXR1cmVzOltwbyhbX21dKSxDb119KSxjfSkoKSx6eT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5wb3NpdGlvbj1FZFsiYm90dG9tLWxlZnQiXSx0aGlzLl9jdXJyZW50Vmlldz0i''@;'; put 'put ''REFZVklFVyJ9Z2V0IGlzRGF5Vmlldygpe3JldHVybiJEQVlWSUVXIj09PXRoaXMuX2N1cnJlbnRWaWV3fWdldCBpc1llYXJWaWV3KCl7cmV0dXJuIllFQVJWSUVXIj09PXRoaXMuX2N1cnJlbnRWaWV3fWdldCBpc01vbnRoVmlldygpe3JldHVybiJNT05USFZJRVciPT09dGhpcy5fY3VycmVu''@;'; put 'put ''dFZpZXd9Y2hhbmdlVG9Nb250aFZpZXcoKXt0aGlzLl9jdXJyZW50Vmlldz0iTU9OVEhWSUVXIn1jaGFuZ2VUb1llYXJWaWV3KCl7dGhpcy5fY3VycmVudFZpZXc9IllFQVJWSUVXIn1jaGFuZ2VUb0RheVZpZXcoKXt0aGlzLl9jdXJyZW50Vmlldz0iREFZVklFVyJ9fXJldHVybiBjLlx1MDI3''@;'; put 'put ''NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHRkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXt0aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNlPWEsdGhpcy5f''@;'; put 'put ''ZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPWQsdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZT1oLHRoaXMuX2VsUmVmPWYsdGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlPXYsdGhpcy5jb21tb25TdHJpbmdzPU0sdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXg9dGhpcy5jYWxlbmRhck1vbnRoSW5kZXh9''@;'; put 'put ''Z2V0IG1vbnRoTmFtZXMoKXtyZXR1cm4gdGhpcy5fbG9jYWxlSGVscGVyU2VydmljZS5sb2NhbGVNb250aHNXaWRlfWdldCBjYWxlbmRhck1vbnRoSW5kZXgoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyLm1vbnRofWdldCBjYWxlbmRhckVu''@;'; put 'put ''ZE1vbnRoSW5kZXgoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Py5tb250aH1nZXQgeWVhckF0dHJTdHJpbmcoKXtyZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJTZWxlY3RZ''@;'; put 'put ''ZWFyVGV4dCx7Q0FMRU5EQVJfWUVBUjp0aGlzLmNhbGVuZGFyWWVhci50b1N0cmluZygpfSl9Z2V0IGNhbGVuZGFyWWVhcigpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuZGlzcGxheWVkQ2FsZW5kYXIueWVhcn1nZXQgY3VycmVudENhbGVuZGFyWWVhcigpe3JldHVybihu''@;'; put 'put ''ZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKX1nZXQgY3VycmVudENhbGVuZGFyTW9udGgoKXtyZXR1cm4obmV3IERhdGUpLmdldE1vbnRoKCl9Z2V0SXNSYW5nZVN0YXJ0TW9udGgoYSl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLmNhbGVuZGFy''@;'; put 'put ''WWVhcj09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT8ueWVhciYmYT09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT8ubW9udGh9Z2V0SXNSYW5nZUVuZE1vbnRoKGEpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNS''@;'; put 'put ''YW5nZVBpY2tlciYmdGhpcy5jYWxlbmRhclllYXI9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/LnllYXImJmE9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXk/Lm1vbnRofWNoYW5nZVRvWWVhclZpZXcoKXt0aGlzLl92aWV3''@;'; put 'put ''TWFuYWdlclNlcnZpY2UuY2hhbmdlVG9ZZWFyVmlldygpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKX1vbktleURvd24oYSl7aWYoYSl7Y29uc3QgZD1TMihhLmtleSk7ZD09PXRvLkFycm93VXAmJnRoaXMuX2Zv''@;'; put 'put ''Y3VzZWRNb250aEluZGV4PjE/KGEucHJldmVudERlZmF1bHQoKSx0aGlzLl9mb2N1c2VkTW9udGhJbmRleC09Mix0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZikpOmQ9PT10by5BcnJvd0Rvd24mJnRoaXMuX2ZvY3VzZWRNb250aEluZGV4PDEwPyhh''@;'; put 'put ''LnByZXZlbnREZWZhdWx0KCksdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXgrPTIsdGhpcy5fZGF0ZXBpY2tlckZvY3VzU2VydmljZS5mb2N1c0NlbGwodGhpcy5fZWxSZWYpKTpkPT09dG8uQXJyb3dSaWdodCYmdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXg8MTE/KGEucHJldmVudERlZmF1bHQoKSx0''@;'; put 'put ''aGlzLl9mb2N1c2VkTW9udGhJbmRleCsrLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKSk6ZD09PXRvLkFycm93TGVmdCYmdGhpcy5fZm9jdXNlZE1vbnRoSW5kZXg+MCYmKGEucHJldmVudERlZmF1bHQoKSx0aGlzLl9mb2N1c2VkTW9udGhJbmRl''@;'; put 'put ''eC0tLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2UuZm9jdXNDZWxsKHRoaXMuX2VsUmVmKSl9fWlzU2VsZWN0ZWQoYSl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT8ueWVhcj09PXRoaXMuY2FsZW5kYXJZZWFyJiZhPT09dGhpcy5fZGF0ZU5hdmln''@;'; put 'put ''YXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py5tb250aHx8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Py55ZWFyPT09dGhpcy5jYWxlbmRhclllYXImJmE9PT10aGlzLmNhbGVuZGFyRW5kTW9udGhJbmRleH1vbkhvdmVyKGEpe3RoaXMuX2RhdGVOYXZpZ2F0aW9u''@;'; put 'put ''U2VydmljZS5ob3ZlcmVkTW9udGg9YX1jaGFuZ2VNb250aChhKXt0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuY2hhbmdlTW9udGgoYSksdGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlLmNoYW5nZVRvRGF5VmlldygpfWdldFRhYkluZGV4KGEpe3JldHVybiBhPT09dGhpcy5fZm9jdXNlZE1v''@;'; put 'put ''bnRoSW5kZXg/MDotMX1uZXh0WWVhcigpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5tb3ZlVG9OZXh0WWVhcigpfXByZXZpb3VzWWVhcigpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5tb3ZlVG9QcmV2aW91c1llYXIoKX1jdXJyZW50WWVhcigpe3RoaXMuX2RhdGVOYXZpZ2F0''@;'; put 'put ''aW9uU2VydmljZS5tb3ZlVG9DdXJyZW50TW9udGgoKX1pc0luUmFuZ2UoYSl7cmV0dXJuISF0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheSYmdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNl''@;'; put 'put ''LnNlbGVjdGVkRW5kRGF5P3RoaXMuY2FsZW5kYXJZZWFyPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5LnllYXImJmE+dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Lm1vbnRoJiZ0aGlzLmNhbGVuZGFyWWVhcj09PXRoaXMuX2RhdGVOYXZp''@;'; put 'put ''Z2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheS55ZWFyJiZhPHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheS5tb250aHx8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5LnllYXIhPT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2Vs''@;'; put 'put ''ZWN0ZWRFbmREYXkueWVhciYmdGhpcy5jYWxlbmRhclllYXI9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkueWVhciYmYT50aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkubW9udGh8fHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxl''@;'; put 'put ''Y3RlZERheS55ZWFyIT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5LnllYXImJnRoaXMuY2FsZW5kYXJZZWFyPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5LnllYXImJmE8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNl''@;'; put 'put ''bGVjdGVkRW5kRGF5Lm1vbnRofHx0aGlzLmNhbGVuZGFyWWVhcj50aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkueWVhciYmdGhpcy5jYWxlbmRhclllYXI8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5LnllYXI6ISghdGhpcy5fZGF0ZU5h''@;'; put 'put ''dmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5fHx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWRFbmREYXkpJiYodGhpcy5jYWxlbmRhclllYXI9PT10aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkueWVhciYmYT50aGlzLl9kYXRlTmF2aWdhdGlvblNl''@;'; put 'put ''cnZpY2Uuc2VsZWN0ZWREYXkubW9udGgmJmE8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhvdmVyZWRNb250aHx8dGhpcy5jYWxlbmRhclllYXI+dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5LnllYXImJmE8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhv''@;'; put 'put ''dmVyZWRNb250aCkpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZSh6eCksR2Uod2gpLEdlKF9tKSxHZShlbyksR2UoenkpLEdlKHRzKSl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1tb250aHBpY2tlciJdXSxob3N0''@;'; put 'put ''QXR0cnM6WyJyb2xlIiwiYXBwbGljYXRpb24iXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImtleWRvd24iLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uS2V5RG93bihmKX0pLDImYSYmeHIoIm1vbnRocGlja2VyIiwhMCl9LGRlY2xzOjEzLHZhcnM6MTAs''@;'; put 'put ''Y29uc3RzOltbMSwiY2FsZW5kYXItaGVhZGVyIiwiaW4tbW9udGhwaWNrZXIiXSxbMSwieWVhci12aWV3LXN3aXRjaGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJ5ZWFycGlja2VyLXRyaWdnZXIiLDMsImNsaWNrIl0sWzEsImNhbGVuZGFyLXN3aXRjaGVycyJdLFsi''@;'; put 'put ''dHlwZSIsImJ1dHRvbiIsMSwiY2FsZW5kYXItYnRuIiwic3dpdGNoZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwibGVmdCJdLFsic2hhcGUiLCJldmVudCJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0Il0sWzEsIm1vbnRocyJdLFsidHlw''@;'; put 'put ''ZSIsImJ1dHRvbiIsImNsYXNzIiwiY2FsZW5kYXItYnRuIG1vbnRoIiwzLCJpcy1zZWxlY3RlZCIsImlzLXN0YXJ0LXJhbmdlIiwiaXMtZW5kLXJhbmdlIiwiaW4tcmFuZ2UiLCJpcy10b2RheSIsImNsaWNrIiwibW91c2VlbnRlciIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJ0eXBlIiwiYnV0''@;'; put 'put ''dG9uIiwxLCJjYWxlbmRhci1idG4iLCJtb250aCIsMywiY2xpY2siLCJtb3VzZWVudGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoZGUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsImJ1dHRvbiIsMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmNoYW5nZVRvWWVh''@;'; put 'put ''clZpZXcoKX0pLExlKDMpLGhlKCkoKSxkZSg0LCJkaXYiLDMpKDUsImJ1dHRvbiIsNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLnByZXZpb3VzWWVhcigpfSksR3QoNiwiY2RzLWljb24iLDUpLGhlKCksZGUoNywiYnV0dG9uIiw0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIGQuY3VycmVudFllYXIoKX0pLEd0KDgsImNkcy1pY29uIiw2KSxoZSgpLGRlKDksImJ1dHRvbiIsNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLm5leHRZZWFyKCl9KSxHdCgxMCwiY2RzLWljb24iLDcpLGhlKCkoKSgpLGRlKDExLCJkaXYiLDgpLGd0KDEyLGFOZSwyLDEy''@;'; put 'put ''LCJidXR0b24iLDkpLGhlKCkpLDImYSYmKGZlKDIpLGRyKCJhcmlhLWxhYmVsIixkLnllYXJBdHRyU3RyaW5nKSgidGl0bGUiLGQueWVhckF0dHJTdHJpbmcpLGZlKCksUnIoIiAiLGQuY2FsZW5kYXJZZWFyLCIgIiksZmUoMiksZHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlz''@;'; put 'put ''LmRhdGVwaWNrZXJQcmV2aW91c01vbnRoKSxmZSgpLGRyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclByZXZpb3VzTW9udGgpLGZlKCksZHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJDdXJyZW50TW9udGgpLGZlKCksZHIoInRp''@;'; put 'put ''dGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyQ3VycmVudE1vbnRoKSxmZSgpLGRyKCJhcmlhLWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyTmV4dE1vbnRoKSxmZSgpLGRyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHRN''@;'; put 'put ''b250aCksZmUoMikseGUoIm5nRm9yT2YiLGQubW9udGhOYW1lcykpfSxkZXBlbmRlbmNpZXM6W3NzLGNzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTtjbGFzcyBVeHtjb25zdHJ1Y3RvcihsKXt0aGlzLnllYXI9bCx0aGlzLnllYXJSYW5nZT1bXSx0aGlzLmdlbmVyYXRlWWVhclJhbmdlKCl9''@;'; put 'put ''Z2V0IG1pZGRsZVllYXIoKXtyZXR1cm4gdGhpcy55ZWFyUmFuZ2VbTWF0aC5mbG9vcih0aGlzLnllYXJSYW5nZS5sZW5ndGgvMildfW5leHREZWNhZGUoKXtyZXR1cm4gbmV3IFV4KHRoaXMueWVhcisxMCl9cHJldmlvdXNEZWNhZGUoKXtyZXR1cm4gbmV3IFV4KHRoaXMueWVhci0xMCl9Y3Vy''@;'; put 'put ''cmVudERlY2FkZSgpe3JldHVybiBuZXcgVXgoKG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpKX1pblJhbmdlKGwpe3JldHVybiB0aGlzLnllYXJSYW5nZS5pbmRleE9mKGwpPi0xfWdlbmVyYXRlWWVhclJhbmdlKCl7Y29uc3QgYT10aGlzLnllYXItdGhpcy55ZWFyJTEwO3RoaXMueWVhclJhbmdl''@;'; put 'put ''PXRoaXMuZ2VuZXJhdGVSYW5nZShhLGErMTApfWdlbmVyYXRlUmFuZ2UobCxhKXtyZXR1cm4gQXJyYXkuZnJvbSh7bGVuZ3RoOmEtbH0sKGQsaCk9PmgrbCl9fWxldCByZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZT1h''@;'; put 'put ''LHRoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZT1kLHRoaXMuX2RhdGVwaWNrZXJGb2N1c1NlcnZpY2U9aCx0aGlzLl9lbFJlZj1mLHRoaXMuY29tbW9uU3RyaW5ncz12LHRoaXMueWVhclJhbmdlTW9kZWw9bmV3IFV4KHRoaXMuY2FsZW5kYXJZZWFyKSx0aGlzLl9mb2N1c2VkWWVhcj10aGlzLmNh''@;'; put 'put ''bGVuZGFyWWVhcn1nZXQgc2VsZWN0ZWRTdGFydFllYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py55ZWFyfWdldCBzZWxlY3RlZEVuZFllYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Py55ZWFy''@;'; put 'put ''fWdldCBjYWxlbmRhclllYXIoKXtyZXR1cm4gdGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyLnllYXJ9aXNDdXJyZW50Q2FsZW5kYXJZZWFyKGEpe3JldHVybiBhPT09KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpfWdldElzUmFuZ2VTdGFydFllYXIoYSl7cmV0''@;'; put 'put ''dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZhPT09dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5Py55ZWFyfWdldElzUmFuZ2VFbmRZZWFyKGEpe3JldHVybiB0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tl''@;'; put 'put ''ciYmYT09PXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZEVuZERheT8ueWVhcn1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9kYXRlcGlja2VyRm9jdXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZil9b25LZXlEb3duKGEpe2lmKGEpe2NvbnN0IGQ9UzIoYS5rZXkpO2Q9''@;'; put 'put ''PT10by5BcnJvd1VwPyhhLnByZXZlbnREZWZhdWx0KCksdGhpcy5pbmNyZW1lbnRGb2N1c1llYXJCeSgtMikpOmQ9PT10by5BcnJvd0Rvd24/KGEucHJldmVudERlZmF1bHQoKSx0aGlzLmluY3JlbWVudEZvY3VzWWVhckJ5KDIpKTpkPT09dG8uQXJyb3dSaWdodD8oYS5wcmV2ZW50RGVmYXVs''@;'; put 'put ''dCgpLHRoaXMuaW5jcmVtZW50Rm9jdXNZZWFyQnkoMSkpOmQ9PT10by5BcnJvd0xlZnQmJihhLnByZXZlbnREZWZhdWx0KCksdGhpcy5pbmNyZW1lbnRGb2N1c1llYXJCeSgtMSkpfX1jaGFuZ2VZZWFyKGEpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5jaGFuZ2VZZWFyKGEpLHRoaXMu''@;'; put 'put ''X3ZpZXdNYW5hZ2VyU2VydmljZS5jaGFuZ2VUb0RheVZpZXcoKX1vbkhvdmVyKGEpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5ob3ZlcmVkWWVhcj1hfXByZXZpb3VzRGVjYWRlKCl7dGhpcy55ZWFyUmFuZ2VNb2RlbD10aGlzLnllYXJSYW5nZU1vZGVsLnByZXZpb3VzRGVjYWRlKCl9''@;'; put 'put ''Y3VycmVudERlY2FkZSgpe3RoaXMueWVhclJhbmdlTW9kZWwuaW5SYW5nZSh0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UudG9kYXkueWVhcil8fCh0aGlzLnllYXJSYW5nZU1vZGVsPXRoaXMueWVhclJhbmdlTW9kZWwuY3VycmVudERlY2FkZSgpKSx0aGlzLl9kYXRlcGlja2VyRm9jdXNT''@;'; put 'put ''ZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZil9bmV4dERlY2FkZSgpe3RoaXMueWVhclJhbmdlTW9kZWw9dGhpcy55ZWFyUmFuZ2VNb2RlbC5uZXh0RGVjYWRlKCl9Z2V0VGFiSW5kZXgoYSl7cmV0dXJuIHRoaXMueWVhclJhbmdlTW9kZWwuaW5SYW5nZSh0aGlzLl9mb2N1c2VkWWVhcil8''@;'; put 'put ''fCh0aGlzLl9mb2N1c2VkWWVhcj10aGlzLnllYXJSYW5nZU1vZGVsLmluUmFuZ2UodGhpcy5jYWxlbmRhclllYXIpP3RoaXMuY2FsZW5kYXJZZWFyOnRoaXMueWVhclJhbmdlTW9kZWwuaW5SYW5nZSh0aGlzLnNlbGVjdGVkRW5kWWVhcik/dGhpcy5zZWxlY3RlZEVuZFllYXI6dGhpcy55ZWFy''@;'; put 'put ''UmFuZ2VNb2RlbC5taWRkbGVZZWFyKSx0aGlzLl9mb2N1c2VkWWVhcj09PWE/MDotMX1pc0luUmFuZ2UoYSl7cmV0dXJuISF0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmKHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT8ueWVhciYmdGhp''@;'; put 'put ''cy5zZWxlY3RlZEVuZFllYXI/YT50aGlzLnNlbGVjdGVkU3RhcnRZZWFyJiZhPHRoaXMuc2VsZWN0ZWRFbmRZZWFyOiEoIXRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheT8ueWVhcnx8dGhpcy5zZWxlY3RlZEVuZFllYXIpJiZhPnRoaXMuc2VsZWN0ZWRTdGFydFllYXIm''@;'; put 'put ''JmE8dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhvdmVyZWRZZWFyKX1jaGFuZ2VUb0RheVZpZXcoKXt0aGlzLl92aWV3TWFuYWdlclNlcnZpY2UuY2hhbmdlVG9EYXlWaWV3KCl9aW5jcmVtZW50Rm9jdXNZZWFyQnkoYSl7dGhpcy5fZm9jdXNlZFllYXI9dGhpcy5fZm9jdXNlZFllYXIr''@;'; put 'put ''YSx0aGlzLnllYXJSYW5nZU1vZGVsLmluUmFuZ2UodGhpcy5fZm9jdXNlZFllYXIpfHwodGhpcy55ZWFyUmFuZ2VNb2RlbD1hPjA/dGhpcy55ZWFyUmFuZ2VNb2RlbC5uZXh0RGVjYWRlKCk6dGhpcy55ZWFyUmFuZ2VNb2RlbC5wcmV2aW91c0RlY2FkZSgpKSx0aGlzLl9kYXRlcGlja2VyRm9j''@;'; put 'put ''dXNTZXJ2aWNlLmZvY3VzQ2VsbCh0aGlzLl9lbFJlZil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHdoKSxHZSh6eSksR2UoX20pLEdlKGVvKSxHZSh0cykpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHIteWVhcnBp''@;'; put 'put ''Y2tlciJdXSxob3N0QXR0cnM6WyJyb2xlIiwiYXBwbGljYXRpb24iXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezEmYSYmRnQoImtleWRvd24iLGZ1bmN0aW9uKGYpe3JldHVybiBkLm9uS2V5RG93bihmKX0pLDImYSYmeHIoInllYXJwaWNrZXIiLCEwKX0sZGVjbHM6''@;'; put 'put ''MTMsdmFyczo5LGNvbnN0czpbWzEsImNhbGVuZGFyLWhlYWRlciJdLFsxLCJjYWxlbmRhci1waWNrZXJzIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJ5ZWFycGlja2VyLXRyaWdnZXIiLCJ5ZWFyLXJhbmdlIiwzLCJjbGljayJdLFsxLCJ5ZWFyLXN3aXRjaGVycyJdLFsi''@;'; put 'put ''dHlwZSIsImJ1dHRvbiIsMSwiY2FsZW5kYXItYnRuIiwic3dpdGNoZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwibGVmdCJdLFsic2hhcGUiLCJldmVudCJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsInJpZ2h0Il0sWzEsInllYXJzIl0sWyJ0eXBl''@;'; put 'put ''IiwiYnV0dG9uIiwiY2xhc3MiLCJjYWxlbmRhci1idG4geWVhciIsMywiaXMtc2VsZWN0ZWQiLCJpcy1zdGFydC1yYW5nZSIsImlzLWVuZC1yYW5nZSIsImluLXJhbmdlIiwiaXMtdG9kYXkiLCJjbGljayIsIm1vdXNlZW50ZXIiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsidHlwZSIsImJ1dHRv''@;'; put 'put ''biIsMSwiY2FsZW5kYXItYnRuIiwieWVhciIsMywiY2xpY2siLCJtb3VzZWVudGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYoZGUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpKDIsImJ1dHRvbiIsMiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmNoYW5nZVRvRGF5Vmll''@;'; put 'put ''dygpfSksTGUoMyksaGUoKSgpLGRlKDQsImRpdiIsMykoNSwiYnV0dG9uIiw0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucHJldmlvdXNEZWNhZGUoKX0pLEd0KDYsImNkcy1pY29uIiw1KSxoZSgpLGRlKDcsImJ1dHRvbiIsNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBkLmN1cnJlbnREZWNhZGUoKX0pLEd0KDgsImNkcy1pY29uIiw2KSxoZSgpLGRlKDksImJ1dHRvbiIsNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLm5leHREZWNhZGUoKX0pLEd0KDEwLCJjZHMtaWNvbiIsNyksaGUoKSgpKCksZGUoMTEsImRpdiIsOCksZ3QoMTIsc05lLDIs''@;'; put 'put ''MTIsImJ1dHRvbiIsOSksaGUoKSksMiZhJiYoZmUoMyksenUoIiAiLGQueWVhclJhbmdlTW9kZWwueWVhclJhbmdlWzBdLCIgLSAiLGQueWVhclJhbmdlTW9kZWwueWVhclJhbmdlW2QueWVhclJhbmdlTW9kZWwueWVhclJhbmdlLmxlbmd0aC0xXSwiICIpLGZlKDIpLGRyKCJhcmlhLWxhYmVs''@;'; put 'put ''IixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyUHJldmlvdXNEZWNhZGUpLGZlKCksZHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyUHJldmlvdXNEZWNhZGUpLGZlKCksZHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJD''@;'; put 'put ''dXJyZW50RGVjYWRlKSxmZSgpLGRyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlckN1cnJlbnREZWNhZGUpLGZlKCksZHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJOZXh0RGVjYWRlKSxmZSgpLGRyKCJ0aXRsZSIsZC5jb21tb25T''@;'; put 'put ''dHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHREZWNhZGUpLGZlKDIpLHhlKCJuZ0Zvck9mIixkLnllYXJSYW5nZU1vZGVsLnllYXJSYW5nZSkpfSxkZXBlbmRlbmNpZXM6W3NzLGNzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxpZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxm''@;'; put 'put ''KXt0aGlzLl92aWV3TWFuYWdlclNlcnZpY2U9YSx0aGlzLl9kYXRlTmF2aWdhdGlvblNlcnZpY2U9ZCx0aGlzLl9sb2NhbGVIZWxwZXJTZXJ2aWNlPWgsdGhpcy5jb21tb25TdHJpbmdzPWZ9Z2V0IG1vbnRoQXR0clN0cmluZygpe3JldHVybiB0aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhp''@;'; put 'put ''cy5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclNlbGVjdE1vbnRoVGV4dCx7Q0FMRU5EQVJfTU9OVEg6dGhpcy5jYWxlbmRhck1vbnRofSl9Z2V0IHllYXJBdHRyU3RyaW5nKCl7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRl''@;'; put 'put ''cGlja2VyU2VsZWN0WWVhclRleHQse0NBTEVOREFSX1lFQVI6dGhpcy5jYWxlbmRhclllYXIudG9TdHJpbmcoKX0pfWdldCBjYWxlbmRhck1vbnRoKCl7cmV0dXJuIHRoaXMuX2xvY2FsZUhlbHBlclNlcnZpY2UubG9jYWxlTW9udGhzQWJicmV2aWF0ZWRbdGhpcy5fZGF0ZU5hdmlnYXRpb25T''@;'; put 'put ''ZXJ2aWNlLmRpc3BsYXllZENhbGVuZGFyLm1vbnRoXX1nZXQgY2FsZW5kYXJZZWFyKCl7cmV0dXJuIHRoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5kaXNwbGF5ZWRDYWxlbmRhci55ZWFyfWNoYW5nZVRvTW9udGhWaWV3KCl7dGhpcy5fdmlld01hbmFnZXJTZXJ2aWNlLmNoYW5nZVRvTW9u''@;'; put 'put ''dGhWaWV3KCl9Y2hhbmdlVG9ZZWFyVmlldygpe3RoaXMuX3ZpZXdNYW5hZ2VyU2VydmljZS5jaGFuZ2VUb1llYXJWaWV3KCl9bmV4dE1vbnRoKCl7dGhpcy5fZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm1vdmVUb05leHRNb250aCgpfXByZXZpb3VzTW9udGgoKXt0aGlzLl9kYXRlTmF2aWdhdGlv''@;'; put 'put ''blNlcnZpY2UubW92ZVRvUHJldmlvdXNNb250aCgpfWN1cnJlbnRNb250aCgpe3RoaXMuX2RhdGVOYXZpZ2F0aW9uU2VydmljZS5tb3ZlVG9DdXJyZW50TW9udGgoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoenkpLEdlKHdoKSxHZSh6eCks''@;'; put 'put ''R2UodHMpKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRheXBpY2tlciJdXSxob3N0QXR0cnM6WyJyb2xlIiwiYXBwbGljYXRpb24iXSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmeHIoImRheXBpY2tlciIsITApfSxkZWNsczox''@;'; put 'put ''OCx2YXJzOjE0LGNvbnN0czpbWzEsImNsci1zci1vbmx5Il0sWzEsImNhbGVuZGFyLWhlYWRlciJdLFsxLCJjYWxlbmRhci1waWNrZXJzIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjYWxlbmRhci1idG4iLCJtb250aHBpY2tlci10cmlnZ2VyIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIs''@;'; put 'put ''MSwiY2FsZW5kYXItYnRuIiwieWVhcnBpY2tlci10cmlnZ2VyIiwzLCJjbGljayJdLFsxLCJjYWxlbmRhci1zd2l0Y2hlcnMiXSxbInR5cGUiLCJidXR0b24iLDEsImNhbGVuZGFyLWJ0biIsInN3aXRjaGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsImxlZnQi''@;'; put 'put ''XSxbInNoYXBlIiwiZXZlbnQiXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJyaWdodCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGRlKDAsImRpdiIsMCksTGUoMSksaGUoKSxkZSgyLCJkaXYiLDEpKDMsImRpdiIsMikoNCwiYnV0dG9uIiwzKSxGdCgiY2xpY2siLGZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIGQuY2hhbmdlVG9Nb250aFZpZXcoKX0pLExlKDUpLGhlKCksZGUoNiwiYnV0dG9uIiw0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY2hhbmdlVG9ZZWFyVmlldygpfSksTGUoNyksaGUoKSgpLGRlKDgsImRpdiIsNSkoOSwiYnV0dG9uIiw2KSxGdCgi''@;'; put 'put ''Y2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQucHJldmlvdXNNb250aCgpfSksR3QoMTAsImNkcy1pY29uIiw3KSxoZSgpLGRlKDExLCJidXR0b24iLDYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5jdXJyZW50TW9udGgoKX0pLEd0KDEyLCJjZHMtaWNvbiIsOCksaGUoKSxkZSgx''@;'; put 'put ''MywiYnV0dG9uIiw2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQubmV4dE1vbnRoKCl9KSxHdCgxNCwiY2RzLWljb24iLDkpLGhlKCkoKSgpLEd0KDE1LCJjbHItY2FsZW5kYXIiKSxkZSgxNiwiZGl2IiwwKSxMZSgxNyksaGUoKSksMiZhJiYoZmUoKSxfcihkLmNvbW1vblN0cmlu''@;'; put 'put ''Z3Mua2V5cy5tb2RhbENvbnRlbnRTdGFydCksZmUoMyksZHIoImFyaWEtbGFiZWwiLGQubW9udGhBdHRyU3RyaW5nKSgidGl0bGUiLGQubW9udGhBdHRyU3RyaW5nKSxmZSgpLFJyKCIgIixkLmNhbGVuZGFyTW9udGgsIiAiKSxmZSgpLGRyKCJhcmlhLWxhYmVsIixkLnllYXJBdHRyU3RyaW5n''@;'; put 'put ''KSgidGl0bGUiLGQueWVhckF0dHJTdHJpbmcpLGZlKCksUnIoIiAiLGQuY2FsZW5kYXJZZWFyLCIgIiksZmUoMiksZHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJQcmV2aW91c01vbnRoKSxmZSgpLGRyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMu''@;'; put 'put ''ZGF0ZXBpY2tlclByZXZpb3VzTW9udGgpLGZlKCksZHIoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJDdXJyZW50TW9udGgpLGZlKCksZHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyQ3VycmVudE1vbnRoKSxmZSgpLGRyKCJhcmlh''@;'; put 'put ''LWxhYmVsIixkLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyTmV4dE1vbnRoKSxmZSgpLGRyKCJ0aXRsZSIsZC5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlck5leHRNb250aCksZmUoMyksX3IoZC5jb21tb25TdHJpbmdzLmtleXMubW9kYWxDb250ZW50RW5kKSl9LGRlcGVuZGVu''@;'; put 'put ''Y2llczpbY3MsSjFlXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxvZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLmNvbW1vblN0cmluZ3M9YSx0aGlzLnRvZ2dsZVNlcnZpY2U9ZCx0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZT1oLHRoaXMuZGF0ZUZvcm1Db250''@;'; put 'put ''cm9sU2VydmljZT1mfWFwcGx5KCl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlciYmdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2Uuc2VsZWN0ZWREYXkmJnRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5Pyh0aGlzLmRhdGVOYXZpZ2F0aW9u''@;'; put 'put ''U2VydmljZS5ub3RpZnlTZWxlY3RlZERheUNoYW5nZWQoe3N0YXJ0RGF0ZTp0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheSxlbmREYXRlOnRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRW5kRGF5fSksdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlLm1h''@;'; put 'put ''cmtBc0RpcnR5KCkpOiF0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5pc1JhbmdlUGlja2VyJiZ0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheSYmKHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLm5vdGlmeVNlbGVjdGVkRGF5Q2hhbmdlZCh0aGlzLmRhdGVOYXZpZ2F0''@;'; put 'put ''aW9uU2VydmljZS5zZWxlY3RlZERheSksdGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlLm1hcmtBc0RpcnR5KCkpLHRoaXMudG9nZ2xlU2VydmljZS5vcGVuPSExfWNhbmNlbCgpe3RoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnJlc2V0U2VsZWN0ZWREYXkoKSx0aGlzLnRvZ2dsZVNlcnZp''@;'; put 'put ''Y2Uub3Blbj0hMX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UodHMpLEdlKGFjKSxHZSh3aCksR2UoankpKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGVwaWNrZXItYWN0aW9ucyJdXSxob3N0VmFyczoyLGhv''@;'; put 'put ''c3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmeHIoImRhdGVwaWNrZXItYWN0aW9ucyIsITApfSxkZWNsczo0LHZhcnM6Mixjb25zdHM6W1sxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0''@;'; put 'put ''aW9uKGEsZCl7MSZhJiYoZGUoMCwiYnV0dG9uIiwwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuY2FuY2VsKCl9KSxMZSgxKSxoZSgpLGRlKDIsImJ1dHRvbiIsMSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBkLmFwcGx5KCl9KSxMZSgzKSxoZSgpKSwyJmEmJihmZSgp''@;'; put 'put ''LF9yKGQuY29tbW9uU3RyaW5ncy5rZXlzLmNhbmNlbCksZmUoMiksX3IoZC5jb21tb25TdHJpbmdzLmtleXMuYXBwbHkpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksYWRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy52aWV3''@;'; put 'put ''TWFuYWdlclNlcnZpY2U9ZCx0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZT1oLHRoaXMuZGF0ZUlPU2VydmljZT1mfWdldCBpc01vbnRoVmlldygpe3JldHVybiB0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5pc01vbnRoVmlld31nZXQgaXNZZWFyVmlldygpe3JldHVybiB0aGlzLnZpZXdNYW5h''@;'; put 'put ''Z2VyU2VydmljZS5pc1llYXJWaWV3fWdldCBpc0RheVZpZXcoKXtyZXR1cm4gdGhpcy52aWV3TWFuYWdlclNlcnZpY2UuaXNEYXlWaWV3fWdldCBoYXNSYW5nZU9wdGlvbnMoKXtyZXR1cm4hIXRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPy5pc1JhbmdlUGlja2VyJiYhIXRoaXMuZGF0ZVJh''@;'; put 'put ''bmdlT3B0aW9ucz8ubGVuZ3RofWdldCBoYXNBY3Rpb25CdXR0b25zKCl7cmV0dXJuIHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhhc0FjdGlvbkJ1dHRvbnN9Z2V0IGRhdGVSYW5nZU9wdGlvbnMoKXtyZXR1cm4gdGhpcy5kYXRlSU9TZXJ2aWNlLmdldFJhbmdlT3B0aW9ucygpfW9uUmFu''@;'; put 'put ''Z2VPcHRpb25TZWxlY3QoYSl7Y29uc3QgZD10aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5jb252ZXJ0RGF0ZVRvRGF5TW9kZWwoYT8udmFsdWVbMF0pLGg9dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuY29udmVydERhdGVUb0RheU1vZGVsKGE/LnZhbHVlWzFdKTt0aGlzLmRhdGVOYXZp''@;'; put 'put ''Z2F0aW9uU2VydmljZS5ub3RpZnlTZWxlY3RlZERheUNoYW5nZWQoe3N0YXJ0RGF0ZTpkLGVuZERhdGU6aH0se2VtaXRFdmVudDohdGhpcy5oYXNBY3Rpb25CdXR0b25zfSksdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UubW92ZVRvU3BlY2lmaWNNb250aChkKX19cmV0dXJuIGMuXHUwMjc1''@;'; put 'put ''ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UodHMpLEdlKHp5KSxHZSh3aCksR2UoYWcpKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGVwaWNrZXItdmlldy1tYW5hZ2VyIl1dLGhvc3RBdHRyczpbInJvbGUiLCJkaWFsb2ciXSxob3N0VmFy''@;'; put 'put ''czo4LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGRyKCJhcmlhLW1vZGFsIiwhMCkoImFyaWEtbGFiZWwiLGQuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJEaWFsb2dMYWJlbCkseHIoImRhdGVwaWNrZXIiLCEwKSgiaGFzLXJhbmdlLW9wdGlvbiIsZC5oYXNSYW5nZU9w''@;'; put 'put ''dGlvbnMpKCJoYXMtYWN0aW9uLWJ1dHRvbnMiLGQuaGFzQWN0aW9uQnV0dG9ucykpfSxmZWF0dXJlczpbcG8oW19tXSldLGRlY2xzOjMsdmFyczoyLGNvbnN0czpbWyJjYWxlbmRhclZpZXciLCIiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWzEsImNsci1kYXRlLXJhbmdlLXBpY2tlci1uYXYi''@;'; put 'put ''XSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImRhdGVwaWNrZXItdmlldy1tYW5hZ2VyIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsImhyZWYiLCJqYXZhc2NyaXB0OnZvaWQoMCkiLCJ0YWJpbmRleCIsIjAiLDMsImtleXVwLmVudGVyIiwiY2xp''@;'; put 'put ''Y2siXSxbNCwibmdJZiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmZ3QoMCx1TmUsNSwyLCJuZy1jb250YWluZXIiLDEpKDEsZ05lLDQsNCwibmctdGVtcGxhdGUiLG51bGwsMCxfdSksMiZhKXtjb25zdCBoPXZvKDIpO3hlKCJuZ0lmIixkLmhhc1JhbmdlT3B0aW9ucykoIm5n''@;'; put 'put ''SWZFbHNlIixoKX19LGRlcGVuZGVuY2llczpbc3MseW8sTjEselksWlksdGRlLHJkZSxpZGUsb2RlXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxaeD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgYjd7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaLG5lLGNlLGJlLEVlLEJlLHFlKXtpZihzdXBl''@;'; put 'put ''cihxZSxFZSxiZSxCZSksdGhpcy5yZW5kZXJlcj1hLHRoaXMuZWxlbT1kLHRoaXMudG9nZ2xlU2VydmljZT1oLHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPWYsdGhpcy5kYXRlcGlja2VyRW5hYmxlZFNlcnZpY2U9dix0aGlzLmRhdGVGb3JtQ29udHJvbFNlcnZpY2U9TSx0aGlzLmRhdGVJ''@;'; put 'put ''T1NlcnZpY2U9RCx0aGlzLmNvbW1vblN0cmluZ3M9Wix0aGlzLnZpZXdNYW5hZ2VyU2VydmljZT1jZSx0aGlzLmNvbnRyb2xDbGFzc1NlcnZpY2U9YmUsdGhpcy5sYXlvdXRTZXJ2aWNlPUVlLHRoaXMubmdDb250cm9sU2VydmljZT1CZSx0aGlzLmlmQ29udHJvbFN0YXRlU2VydmljZT1xZSx0''@;'; put 'put ''aGlzLmZvY3VzPSExLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKG5lLmZvY3VzQ2hhbmdlLnN1YnNjcmliZShudD0+e3RoaXMuZm9jdXM9bnR9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goaC5vcGVuQ2hhbmdlLnN1YnNjcmliZSgoKT0+e00ubWFya0FzVG91Y2hlZCgpfSkpLGYpe2NvbnN0''@;'; put 'put ''IG50PWQubmF0aXZlRWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7Zi5oYXNBY3Rpb25CdXR0b25zPWYuaXNSYW5nZVBpY2tlcj0iY2xyLWRhdGUtcmFuZ2UtY29udGFpbmVyIj09PW50fX1zZXQgc2hvd0FjdGlvbkJ1dHRvbnMoYSl7dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNS''@;'; put 'put ''YW5nZVBpY2tlciYmIWE/Y29uc29sZS5lcnJvcigiRXJyb3IhIFRoZSBkYXRlIHJhbmdlIHBpY2tlciByZXF1aXJlcyBhY3Rpb24gYnV0dG9ucywgW3Nob3dBY3Rpb25CdXR0b25zXSBjYW5ub3QgYmUgdHVybmVkIG9mZi4iKTp0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5oYXNBY3Rpb25C''@;'; put 'put ''dXR0b25zPWF9c2V0IGNsclBvc2l0aW9uKGEpe2EmJkVkW2FdJiYodGhpcy52aWV3TWFuYWdlclNlcnZpY2UucG9zaXRpb249RWRbYV0pfXNldCByYW5nZU9wdGlvbnMoYSl7dGhpcy5kYXRlSU9TZXJ2aWNlLnNldFJhbmdlT3B0aW9ucyhhKX1zZXQgbWluKGEpe3RoaXMuZGF0ZU5hdmlnYXRp''@;'; put 'put ''b25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXI/KHRoaXMuZGF0ZUlPU2VydmljZS5zZXRNaW5EYXRlKGEpLHRoaXMuY2xyU3RhcnREYXRlSW5wdXQ/LnRyaWdnZXJDb250cm9sSW5wdXRWYWxpZGF0aW9uKCksdGhpcy5jbHJFbmREYXRlSW5wdXQ/LnRyaWdnZXJDb250cm9sSW5wdXRWYWxpZGF0aW9u''@;'; put 'put ''KCkpOmNvbnNvbGUuZXJyb3IoIkVycm9yISBUaGUgZGF0ZSBjb250YWluZXIgW21pbl0gaW5wdXQgb25seSB3b3JrcyBmb3IgZGF0ZSByYW5nZSBwaWNrZXJzLiBVc2UgdGhlIG5hdGl2ZSBgbWluYCBhdHRyaWJ1dGUvcHJvcGVydHkgZm9yIHNpbmdsZS1kYXRlIGlucHV0cy4iKX1zZXQgbWF4''@;'; put 'put ''KGEpe3RoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXI/KHRoaXMuZGF0ZUlPU2VydmljZS5zZXRNYXhEYXRlKGEpLHRoaXMuY2xyU3RhcnREYXRlSW5wdXQ/LnRyaWdnZXJDb250cm9sSW5wdXRWYWxpZGF0aW9uKCksdGhpcy5jbHJFbmREYXRlSW5wdXQ/LnRyaWdnZXJD''@;'; put 'put ''b250cm9sSW5wdXRWYWxpZGF0aW9uKCkpOmNvbnNvbGUuZXJyb3IoIkVycm9yISBUaGUgZGF0ZSBjb250YWluZXIgW21heF0gaW5wdXQgb25seSB3b3JrcyBmb3IgZGF0ZSByYW5nZSBwaWNrZXJzLiBVc2UgdGhlIG5hdGl2ZSBgbWF4YCBhdHRyaWJ1dGUvcHJvcGVydHkgZm9yIHNpbmdsZS1k''@;'; put 'put ''YXRlIGlucHV0cy4iKX1zZXQgYWN0aW9uQnV0dG9uKGEpe3RoaXMudG9nZ2xlQnV0dG9uPWF9Z2V0IHBvcG92ZXJQb3NpdGlvbigpe3JldHVybiB0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5wb3NpdGlvbn1nZXQgb3Blbigpe3JldHVybiB0aGlzLnRvZ2dsZVNlcnZpY2Uub3Blbn1nZXQgaXNF''@;'; put 'put ''bmFibGVkKCl7cmV0dXJuIHRoaXMuZGF0ZXBpY2tlckVuYWJsZWRTZXJ2aWNlLmlzRW5hYmxlZH1nZXQgaXNJbnB1dERhdGVEaXNhYmxlZCgpe3JldHVybiB0aGlzLmNvbnRyb2wmJnRoaXMuY29udHJvbC5kaXNhYmxlZHx8dGhpcy5kYXRlRm9ybUNvbnRyb2xTZXJ2aWNlJiZ0aGlzLmRhdGVG''@;'; put 'put ''b3JtQ29udHJvbFNlcnZpY2UuZGlzYWJsZWR9Z2V0IGlzUmFuZ2VQaWNrZXIoKXtyZXR1cm4gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaXNSYW5nZVBpY2tlcn1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLmRhdGVSYW5nZVN0cnVjdHVyYWxDaGVja3MoKSx0aGlzLnN1YnNjcmlwdGlvbnMu''@;'; put 'put ''cHVzaCh0aGlzLnRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoYT0+e2E/dGhpcy5pbml0aWFsaXplQ2FsZW5kYXIoKToodGhpcy50b2dnbGVCdXR0b24ubmF0aXZlRWxlbWVudC5mb2N1cygpLHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnJlc2V0U2VsZWN0ZWREYXkoKSl9''@;'; put 'put ''KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5saXN0ZW5Gb3JEYXRlQ2hhbmdlcygpKX1nZXRUb2dnbGVCdXR0b25MYWJlbChhKXtpZihhKXtjb25zdCBkPXRoaXMuZGF0ZUlPU2VydmljZS50b0xvY2FsZURpc3BsYXlGb3JtYXRTdHJpbmcoYS50b0RhdGUoKSk7cmV0dXJuIHRoaXMu''@;'; put 'put ''Y29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5kYXRlcGlja2VyVG9nZ2xlQ2hhbmdlRGF0ZUxhYmVsLHtTRUxFQ1RFRF9EQVRFOmR9KX1yZXR1cm4gdGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0ZXBpY2tlclRvZ2dsZUNob29zZURhdGVMYWJlbH1saXN0ZW5G''@;'; put 'put ''b3JEYXRlQ2hhbmdlcygpe3JldHVybiB0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5zZWxlY3RlZERheUNoYW5nZS5waXBlKF8yKHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLnNlbGVjdGVkRGF5KSkuc3Vic2NyaWJlKGE9PntpZih0aGlzLmlzRW5hYmxlZCl7Y29uc3QgZD10aGlzLmdl''@;'; put 'put ''dFRvZ2dsZUJ1dHRvbkxhYmVsKGEpLGg9dGhpcy50b2dnbGVCdXR0b24ubmF0aXZlRWxlbWVudDt0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShoLCJhcmlhLWxhYmVsIixkKSx0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShoLCJ0aXRsZSIsZCl9fSl9aW5pdGlhbGl6ZUNhbGVuZGFyKCl7''@;'; put 'put ''dGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuaW5pdGlhbGl6ZUNhbGVuZGFyKCl9ZGF0ZVJhbmdlU3RydWN0dXJhbENoZWNrcygpe3RoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmlzUmFuZ2VQaWNrZXImJih0aGlzLmNsckRhdGVJbnB1dCYmY29uc29sZS5lcnJvcigiRXJyb3IhIGNsci1k''@;'; put 'put ''YXRlLXJhbmdlLWNvbnRhaW5lciBtdXN0IGNvbnRhaW4gY2xyU3RhcnREYXRlIGFuZCBjbHJFbmREYXRlIGlucHV0cyIpLHRoaXMuY2xyU3RhcnREYXRlSW5wdXR8fGNvbnNvbGUuZXJyb3IoIkVycm9yISBjbHItZGF0ZS1yYW5nZS1jb250YWluZXIgbXVzdCBjb250YWluIGNsclN0YXJ0RGF0''@;'; put 'put ''ZSBpbnB1dCIpLHRoaXMuY2xyRW5kRGF0ZUlucHV0fHxjb25zb2xlLmVycm9yKCJFcnJvciEgY2xyLWRhdGUtcmFuZ2UtY29udGFpbmVyIG11c3QgY29udGFpbiBjbHJFbmREYXRlIGlucHV0IikpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShF''@;'; put 'put ''YSksR2UoZW8pLEdlKGFjKSxHZSh3aCksR2UoWkwpLEdlKGp5KSxHZShhZyksR2UodHMpLEdlKE55KSxHZSh6eSksR2Uoa2QpLEdlKHZwLDgpLEdlKHAxKSxHZShBZCkpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0ZS1jb250YWluZXIiXSxbImNsci1kYXRl''@;'; put 'put ''LXJhbmdlLWNvbnRhaW5lciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYobGEoaCxXTCw1KSxsYShoLGVkZSw1KSxsYShoLFExZSw1KSksMiZhKXtsZXQgZjt4aShmPUVpKCkpJiYoZC5jbHJEYXRlSW5wdXQ9Zi5maXJzdCkseGkoZj1FaSgpKSYmKGQuY2xyU3Rh''@;'; put 'put ''cnREYXRlSW5wdXQ9Zi5maXJzdCkseGkoZj1FaSgpKSYmKGQuY2xyRW5kRGF0ZUlucHV0PWYuZmlyc3QpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZuYShtTmUsNSksMiZhKXtsZXQgaDt4aShoPUVpKCkpJiYoZC5hY3Rpb25CdXR0b249aC5maXJzdCl9fSxob3N0VmFyczo4''@;'; put 'put ''LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmeHIoImNsci1kYXRlLWNvbnRhaW5lciIsITApKCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIixkLmlzSW5wdXREYXRlRGlzYWJsZWQpKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKX0saW5wdXRz''@;'; put 'put ''OntzaG93QWN0aW9uQnV0dG9uczoic2hvd0FjdGlvbkJ1dHRvbnMiLGNsclBvc2l0aW9uOiJjbHJQb3NpdGlvbiIscmFuZ2VPcHRpb25zOiJyYW5nZU9wdGlvbnMiLG1pbjoibWluIixtYXg6Im1heCJ9LGZlYXR1cmVzOltwbyhbeWgsengsa2QsTnkscDEsYWcsd2gsWkwsanksenksQWRdKSx2''@;'; put 'put ''ZChbcmddKSxDb10sbmdDb250ZW50U2VsZWN0b3JzOmJOZSxkZWNsczoxNCx2YXJzOjE1LGNvbnN0czpbWyJhY3Rpb25CdXR0b24iLCIiXSxbNCwibmdJZiJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLDMsIm5nQ2xhc3MiXSxbImNsclBvcG92ZXJBbmNob3IiLCIiLDEsImNsci1pbnB1''@;'; put 'put ''dC13cmFwcGVyIl0sWzEsImNsci1pbnB1dC1ncm91cCJdLFsidHlwZSIsImJ1dHRvbiIsImNsclBvcG92ZXJPcGVuQ2xvc2VCdXR0b24iLCIiLCJjbGFzcyIsImNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbiIsMywiZGlzYWJsZWQiLDQsIm5nSWYiXSxbImNka1RyYXBGb2N1cyIsIiIsNCwi''@;'; put 'put ''Y2xyUG9wb3ZlckNvbnRlbnQiLCJjbHJQb3BvdmVyQ29udGVudEF0IiwiY2xyUG9wb3ZlckNvbnRlbnRPdXRzaWRlQ2xpY2tUb0Nsb3NlIiwiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJleGNsYW1hdGlvbi1j''@;'; put 'put ''aXJjbGUiLCJzdGF0dXMiLCJkYW5nZXIiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXZhbGlkYXRlLWljb24iLCJzaGFwZSIsImNoZWNrLWNpcmNsZSIsInN0YXR1cyIsInN1Y2Nlc3MiLCJhcmlhLWhpZGRlbiIsInRydWUiLDQsIm5nSWYiXSxbMSwiZGF0''@;'; put 'put ''ZS1yYW5nZS1zZXBhcmF0b3IiXSxbInR5cGUiLCJidXR0b24iLCJjbHJQb3BvdmVyT3BlbkNsb3NlQnV0dG9uIiwiIiwxLCJjbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb24iLDMsImRpc2FibGVkIl0sWyJzdGF0dXMiLCJpbmZvIiwic2hhcGUiLCJjYWxlbmRhciJdLFsiY2RrVHJhcEZvY3Vz''@;'; put 'put ''IiwiIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwi''@;'; put 'put ''Y2xyLXZhbGlkYXRlLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihsbyh2TmUpLFdyKDApLGd0KDEseU5lLDEsMCwibGFiZWwiLDEpLGRlKDIsImRpdiIsMikoMywiZGl2IiwzKSg0LCJkaXYiLDQpLGd0KDUsX05lLDUsMCwibmctY29udGFpbmVyIiwxKSxXcig2LDEpLGd0''@;'; put 'put ''KDcsd05lLDMsMSwiYnV0dG9uIiw1KSg4LENOZSwxLDAsImNsci1kYXRlcGlja2VyLXZpZXctbWFuYWdlciIsNiksaGUoKSxndCg5LFNOZSwxLDAsImNkcy1pY29uIiw3KSgxMCxNTmUsMSwwLCJjZHMtaWNvbiIsOCksaGUoKSxndCgxMSx4TmUsMSwwLCJuZy1jb250ZW50IiwxKSgxMixFTmUs''@;'; put 'put ''MSwwLCJuZy1jb250ZW50IiwxKSgxMyxUTmUsMSwwLCJuZy1jb250ZW50IiwxKSxoZSgpKSwyJmEmJihmZSgpLHhlKCJuZ0lmIiwhZC5sYWJlbCYmZC5hZGRHcmlkKCkpLGZlKCkseGUoIm5nQ2xhc3MiLGQuY29udHJvbENsYXNzKCkpLGZlKDIpLHhyKCJjbHItZm9jdXMiLGQuZm9jdXMpLGZl''@;'; put 'put ''KCkseGUoIm5nSWYiLGQuaXNSYW5nZVBpY2tlciksZmUoMikseGUoIm5nSWYiLGQuaXNFbmFibGVkKSxmZSgpLHhlKCJjbHJQb3BvdmVyQ29udGVudCIsZC5vcGVuKSgiY2xyUG9wb3ZlckNvbnRlbnRBdCIsZC5wb3BvdmVyUG9zaXRpb24pKCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlj''@;'; put 'put ''a1RvQ2xvc2UiLCEwKSgiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3NlIiwhMCksZmUoKSx4ZSgibmdJZiIsZC5zaG93SW52YWxpZCksZmUoKSx4ZSgibmdJZiIsZC5zaG93VmFsaWQpLGZlKCkseGUoIm5nSWYiLGQuc2hvd0hlbHBlciksZmUoKSx4ZSgibmdJZiIsZC5zaG93SW52YWxp''@;'; put 'put ''ZCksZmUoKSx4ZSgibmdJZiIsZC5zaG93VmFsaWQpKX0sZGVwZW5kZW5jaWVzOlt3dSx5byxWeSxMeCxGeCxQeCxjcyx1cyxhZGVdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLHFZPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5kYXRlSU9TZXJ2aWNlPWF9dmFsaWRhdGUoYSl7''@;'; put 'put ''aWYodGhpcy5kYXRlSU9TZXJ2aWNlKXtjb25zdCBkPXRoaXMuZGF0ZUlPU2VydmljZS5nZXREYXRlVmFsdWVGcm9tRGF0ZVN0cmluZyhhLnZhbHVlKSxoPXRoaXMuZGF0ZUlPU2VydmljZS5kaXNhYmxlZERhdGVzLm1pbkRhdGUudG9EYXRlKCksZj10aGlzLmRhdGVJT1NlcnZpY2UuZGlzYWJs''@;'; put 'put ''ZWREYXRlcy5tYXhEYXRlLnRvRGF0ZSgpO2lmKGQmJmQ8aClyZXR1cm57bWluOnttaW46aC50b0xvY2FsZURhdGVTdHJpbmcoKSxhY3R1YWw6ZC50b0xvY2FsZURhdGVTdHJpbmcoKX19O2lmKGQmJmQ+ZilyZXR1cm57bWF4OnttYXg6Zi50b0xvY2FsZURhdGVTdHJpbmcoKSxhY3R1YWw6ZC50''@;'; put 'put ''b0xvY2FsZURhdGVTdHJpbmcoKX19fXJldHVybiBudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShhZyw4KSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNsckRhdGUiLCIiXSxbIiIsImNsclN0YXJ0RGF0ZSIs''@;'; put 'put ''IiJdLFsiIiwiY2xyRW5kRGF0ZSIsIiJdXSxmZWF0dXJlczpbcG8oW3twcm92aWRlOmQwLHVzZUV4aXN0aW5nOmMsbXVsdGk6ITB9XSldfSksY30pKCksalVlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtFcy5hZGRJY29ucyhwaCxnaCx3eSxkT2UsaE9lKX19cmV0dXJuIGMuXHUwMjc1''@;'; put 'put ''ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTG8sekwsTngsRTIsSHgsVHMsaXUsJDFlXX0pLGN9KSgpO25ldyBTdCgiQ2xyRmlsZU1lc3NhZ2VzVGVtcGxhdGVDb250ZXh0Iik7bGV0IFVV''@;'; put 'put ''ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7RXMuYWRkSWNvbnMoZk9lKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTG8sVHMsaXUsaXVdfSksY30p''@;'; put 'put ''KCksc2RlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBiN3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3N1cGVyKHYsZCxhLGgpLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPXYsdGhpcy5mb2N1cz0hMSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChmLmZvY3VzQ2hhbmdlLnN1YnNjcmliZShNPT50''@;'; put 'put ''aGlzLmZvY3VzPU0pKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2Uoa2QpLEdlKHZwLDgpLEdlKHAxKSxHZShOeSksR2UoQWQpKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLW51bWJlci1pbnB1dC1jb250YWluZXIi''@;'; put 'put ''XV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmbGEoaCxsZGUsNSksMiZhKXtsZXQgZjt4aShmPUVpKCkpJiYoZC5pbnB1dD1mLmZpcnN0KX19LGhvc3RWYXJzOjgsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZ4cigiY2xyLWZvcm0tY29udHJvbCIsITAp''@;'; put 'put ''KCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIixudWxsPT1kLmNvbnRyb2w/bnVsbDpkLmNvbnRyb2wuZGlzYWJsZWQpKCJjbHItZm9ybS1jb250cm9sLXJlYWRvbmx5IixkLmlucHV0LnJlYWRvbmx5KSgiY2xyLXJvdyIsZC5hZGRHcmlkKCkpfSxmZWF0dXJlczpbcG8oW055LEFkLHAxLHlo''@;'; put 'put ''LGtkXSksQ29dLG5nQ29udGVudFNlbGVjdG9yczpSTmUsZGVjbHM6MTcsdmFyczoxMSxjb25zdHM6W1s0LCJuZ0lmIl0sWzEsImNsci1jb250cm9sLWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFsxLCJjbHItbnVtYmVyLWlucHV0LXdyYXBwZXIiXSxbMSwiY2xyLWlucHV0LWdyb3VwIl0sWzEs''@;'; put 'put ''ImNsci1pbnB1dC1ncm91cC1hY3Rpb25zIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb24iLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwibWludXMiLCJzaXplIiwic20iXSxbMSwiY2xyLW51bWJlci1pbnB1dC1zZXBhcmF0b3IiXSxbInNo''@;'; put 'put ''YXBlIiwicGx1cyIsInNpemUiLCJzbSJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hh''@;'; put 'put ''cGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXSxbInNo''@;'; put 'put ''YXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihsbyhJTmUpLFdyKDApLGd0KDEsTE5lLDEsMCwibGFiZWwiLDApLGRlKDIsImRpdiIsMSko''@;'; put 'put ''MywiZGl2IiwyKSg0LCJkaXYiLDMpLFdyKDUsMSksZGUoNiwiZGl2Iiw0KSg3LCJidXR0b24iLDUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5pbnB1dC5zdGVwRG93bigpfSksR3QoOCwiY2RzLWljb24iLDYpLGhlKCksR3QoOSwiZGl2Iiw3KSxkZSgxMCwiYnV0dG9uIiw1KSxG''@;'; put 'put ''dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGQuaW5wdXQuc3RlcFVwKCl9KSxHdCgxMSwiY2RzLWljb24iLDgpLGhlKCkoKSgpLGd0KDEyLE9OZSwxLDAsImNkcy1pY29uIiw5KSgxMyxQTmUsMSwwLCJjZHMtaWNvbiIsMTApLGhlKCksZ3QoMTQsRk5lLDEsMCwibmctY29udGVudCIsMCko''@;'; put 'put ''MTUsSE5lLDEsMCwibmctY29udGVudCIsMCkoMTYsTk5lLDEsMCwibmctY29udGVudCIsMCksaGUoKSksMiZhJiYoZmUoKSx4ZSgibmdJZiIsIWQubGFiZWwmJmQuYWRkR3JpZCgpKSxmZSgpLHhlKCJuZ0NsYXNzIixkLmNvbnRyb2xDbGFzcygpKSxmZSgyKSx4cigiY2xyLWZvY3VzIixkLmZv''@;'; put 'put ''Y3VzKSxmZSgzKSx4ZSgiZGlzYWJsZWQiLG51bGw9PWQuY29udHJvbD9udWxsOmQuY29udHJvbC5kaXNhYmxlZCksZmUoMykseGUoImRpc2FibGVkIixudWxsPT1kLmNvbnRyb2w/bnVsbDpkLmNvbnRyb2wuZGlzYWJsZWQpLGZlKDIpLHhlKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLHhl''@;'; put 'put ''KCJuZ0lmIixkLnNob3dWYWxpZCksZmUoKSx4ZSgibmdJZiIsZC5zaG93SGVscGVyKSxmZSgpLHhlKCJuZ0lmIixkLnNob3dJbnZhbGlkKSxmZSgpLHhlKCJuZ0lmIixkLnNob3dWYWxpZCkpfSxkZXBlbmRlbmNpZXM6W3d1LHlvLGNzLHVzXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxsZGU9''@;'; put 'put ''KCgpPT57Y2xhc3MgYyBleHRlbmRzIHk3e2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXtpZihzdXBlcihkLHNkZSxoLGYsdixNKSx0aGlzLmZvY3VzU2VydmljZT1hLHRoaXMuY29udHJvbD1mLHRoaXMuZWw9TSx0aGlzLmluZGV4PTEsIWEpdGhyb3cgbmV3IEVycm9yKCJjbHJOdW1iZXJJbnB1''@;'; put 'put ''dCByZXF1aXJlcyBiZWluZyB3cmFwcGVkIGluIDxjbHItbnVtYmVyLWlucHV0LWNvbnRhaW5lcj4iKX1nZXQgcmVhZG9ubHkoKXtyZXR1cm4gbnVsbCE9PXRoaXMuZWwubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoInJlYWRvbmx5Iil9dHJpZ2dlckZvY3VzKCl7IXRoaXMucmVhZG9ubHkm''@;'; put 'put ''JnRoaXMuZm9jdXNTZXJ2aWNlJiYodGhpcy5mb2N1c1NlcnZpY2UuZm9jdXNlZD0hMCl9dHJpZ2dlclZhbGlkYXRpb24oKXt0aGlzLnJlYWRvbmx5fHwoc3VwZXIudHJpZ2dlclZhbGlkYXRpb24oKSx0aGlzLmZvY3VzU2VydmljZSYmKHRoaXMuZm9jdXNTZXJ2aWNlLmZvY3VzZWQ9ITEpKX1z''@;'; put 'put ''dGVwVXAoKXt0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3RlcFVwKCksdGhpcy5lbC5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCJpbnB1dCIse2J1YmJsZXM6ITAsY2FuY2VsYWJsZTohMH0pKSx0aGlzLmNvbnRyb2wuY29udHJvbC5tYXJrQWxsQXNUb3VjaGVkKCl9c3Rl''@;'; put 'put ''cERvd24oKXt0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuc3RlcERvd24oKSx0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoImlucHV0Iix7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwfSkpLHRoaXMuY29udHJvbC5jb250cm9sLm1hcmtBbGxBc1RvdWNoZWQoKX19''@;'; put 'put ''cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoTnksOCksR2UoRGEpLEdlKERzKSxHZShoMSwxMCksR2UoRWEpLEdlKGVvKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImlucHV0IiwidHlwZSIsIm51bWJlciIsImNsck51bWJl''@;'; put 'put ''cklucHV0IiwiIl1dLGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MSZhJiZGdCgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIGQudHJpZ2dlckZvY3VzKCl9KSgiYmx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC50cmlnZ2VyVmFsaWRhdGlvbigpfSksMiZhJiZ4cigiY2xy''@;'; put 'put ''LWlucHV0IiwhMCkoImNsci1udW1iZXItaW5wdXQiLCEwKX0sZmVhdHVyZXM6W0NvXX0pLGN9KSgpLFpVZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7RXMuYWRkSWNvbnMocGgsZ2gpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAy''@;'; put 'put ''NzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMbyxEYyxUcyxpdSxpdV19KSxjfSkoKTtuZXcgU3Qodm9pZCAwKTtsZXQgR1VlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtFcy5hZGRJY29ucyhwT2UsZ09lLHBoLGdoKX19cmV0dXJuIGMuXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTG8sRGMsVHMsaXUsaXVdfSksY30pKCksWFk9KCgpPT57Y2xhc3MgY3tuZ09uSW5pdCgpe3RoaXMubGFiZWwmJnRoaXMubGFiZWwuZGlzYWJsZUdy''@;'; put 'put ''aWQoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1yYWRpby13cmFwcGVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmxhKGgsdXMsNyksMiZh''@;'; put 'put ''KXtsZXQgZjt4aShmPUVpKCkpJiYoZC5sYWJlbD1mLmZpcnN0KX19LGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZ4cigiY2xyLXJhZGlvLXdyYXBwZXIiLCEwKX0sZmVhdHVyZXM6W3BvKFt5aF0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6Qk5lLGRlY2xzOjMsdmFy''@;'; put 'put ''czoxLGNvbnN0czpbWzQsIm5nSWYiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihsbyhWTmUpLFdyKDApLFdyKDEsMSksZ3QoMixqTmUsMSwwLCJsYWJlbCIsMCkpLDImYSYmKGZlKDIpLHhlKCJuZ0lmIiwhZC5sYWJlbCkpfSxkZXBlbmRlbmNpZXM6W3lvLHVzXSxlbmNhcHN1bGF0''@;'; put 'put ''aW9uOjJ9KSxjfSkoKSxKWT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgeTd7Y29uc3RydWN0b3IoYSxkLGgsZix2KXtzdXBlcihhLFhZLGQsaCxmLHYpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShEYSksR2UoRHMpLEdlKGgxLDEwKSxHZShFYSks''@;'; put 'put ''R2UoZW8pKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyUmFkaW8iLCIiXV0sZmVhdHVyZXM6W0NvXX0pLGN9KSgpLCRVZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgYjd7Y29uc3RydWN0b3IoYSxkLGgsZil7c3VwZXIoZixhLGQsaCksdGhpcy5sYXlvdXRTZXJ2''@;'; put 'put ''aWNlPWEsdGhpcy5jb250cm9sQ2xhc3NTZXJ2aWNlPWQsdGhpcy5uZ0NvbnRyb2xTZXJ2aWNlPWgsdGhpcy5pZkNvbnRyb2xTdGF0ZVNlcnZpY2U9Zix0aGlzLmlubGluZT0hMSx0aGlzLl9nZW5lcmF0ZWRJZD1TdSgpfWdldCBjbHJJbmxpbmUoKXtyZXR1cm4gdGhpcy5pbmxpbmV9c2V0IGNs''@;'; put 'put ''cklubGluZShhKXt0aGlzLmlubGluZT0ic3RyaW5nIj09dHlwZW9mIGE/ImZhbHNlIiE9PWE6ISFhfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc2V0QXJpYVJvbGVzKCksdGhpcy5zZXRBcmlhTGFiZWxsZWRCeSgpfXNldEFyaWFSb2xlcygpe3RoaXMucm9sZT10aGlzLnJhZGlvcy5sZW5n''@;'; put 'put ''dGg/InJhZGlvZ3JvdXAiOm51bGx9c2V0QXJpYUxhYmVsbGVkQnkoKXtjb25zdCBhPXRoaXMuZ3JvdXBMYWJlbD8ubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoImlkIik7YT90aGlzLmFyaWFMYWJlbGxlZEJ5PXRoaXMucmFkaW9zLmxlbmd0aD9hOm51bGw6KHRoaXMuZ3JvdXBMYWJlbD8u''@;'; put 'put ''bmF0aXZlRWxlbWVudC5zZXRBdHRyaWJ1dGUoImlkIix0aGlzLl9nZW5lcmF0ZWRJZCksdGhpcy5hcmlhTGFiZWxsZWRCeT10aGlzLnJhZGlvcy5sZW5ndGg/dGhpcy5fZ2VuZXJhdGVkSWQ6bnVsbCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdl''@;'; put 'put ''KHZwLDgpLEdlKGtkKSxHZShwMSksR2UoQWQpKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXJhZGlvLWNvbnRhaW5lciJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiYobGEoaCx1cyw3LGVvKSxsYShoLEpZLDUpKSwyJmEpe2xldCBm''@;'; put 'put ''O3hpKGY9RWkoKSkmJihkLmdyb3VwTGFiZWw9Zi5maXJzdCkseGkoZj1FaSgpKSYmKGQucmFkaW9zPWYpfX0saG9zdFZhcnM6OCxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihkcigicm9sZSIsZC5yb2xlKSgiYXJpYS1sYWJlbGxlZGJ5IixkLmFyaWFMYWJlbGxlZEJ5KSx4cigi''@;'; put 'put ''Y2xyLWZvcm0tY29udHJvbCIsITApKCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIixudWxsPT1kLmNvbnRyb2w/bnVsbDpkLmNvbnRyb2wuZGlzYWJsZWQpKCJjbHItcm93IixkLmFkZEdyaWQoKSkpfSxpbnB1dHM6e2NscklubGluZToiY2xySW5saW5lIn0sZmVhdHVyZXM6W3BvKFtwMSxB''@;'; put 'put ''ZCxrZCxkN10pLENvXSxuZ0NvbnRlbnRTZWxlY3RvcnM6VU5lLGRlY2xzOjYsdmFyczo2LGNvbnN0czpbWzQsIm5nSWYiXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNsci1zdWJ0ZXh0LXdyYXBwZXIiLDQsIm5nSWYiXSxbMSwiY2xyLXN1YnRl''@;'; put 'put ''eHQtd3JhcHBlciJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJjaGVjay1j''@;'; put 'put ''aXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hlY2st''@;'; put 'put ''Y2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihsbyh6TmUpLFdyKDApLGd0KDEsWk5lLDEsMCwibGFiZWwiLDApLGRlKDIsImRpdiIsMSksV3IoMywxKSxndCg0''@;'; put 'put ''LFdOZSwyLDAsImRpdiIsMikoNSxxTmUsNSw0LCJkaXYiLDIpLGhlKCkpLDImYSYmKGZlKCkseGUoIm5nSWYiLCFkLmxhYmVsJiZkLmFkZEdyaWQoKSksZmUoKSx4cigiY2xyLWNvbnRyb2wtaW5saW5lIixkLmNscklubGluZSkseGUoIm5nQ2xhc3MiLGQuY29udHJvbENsYXNzKCkpLGZlKDIp''@;'; put 'put ''LHhlKCJuZ0lmIixkLnNob3dIZWxwZXIpLGZlKCkseGUoIm5nSWYiLGQuc2hvd1ZhbGlkfHxkLnNob3dJbnZhbGlkKSl9LGRlcGVuZGVuY2llczpbd3UseW8sdXMsY3NdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLEtVZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7RXMuYWRkSWNvbnMo''@;'; put 'put ''cGgsZ2gpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMbyxpdSxOeCxUcyxpdV19KSxjfSkoKSxxVWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe0Vz''@;'; put 'put ''LmFkZEljb25zKHBoLGdoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTG8saXUsTngsVHMsaXVdfSksY30pKCksVXk9KCgpPT57Y2xhc3MgYyBleHRlbmRz''@;'; put 'put ''IGI3e2NvbnN0cnVjdG9yKGEsZCxoLGYpe3N1cGVyKGYsYSxkLGgpLHRoaXMubGF5b3V0U2VydmljZT1hLHRoaXMuY29udHJvbENsYXNzU2VydmljZT1kLHRoaXMubmdDb250cm9sU2VydmljZT1oLHRoaXMuaWZDb250cm9sU3RhdGVTZXJ2aWNlPWYsdGhpcy5tdWx0aT0hMX1uZ09uSW5pdCgp''@;'; put 'put ''e3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubmdDb250cm9sU2VydmljZS5jb250cm9sQ2hhbmdlcy5zdWJzY3JpYmUoYT0+e2EmJih0aGlzLm11bHRpPWEudmFsdWVBY2Nlc3NvciBpbnN0YW5jZW9mIHB4LHRoaXMuY29udHJvbD1hKX0pKX13cmFwcGVyQ2xhc3MoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5tdWx0aT8iY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIiOiJjbHItc2VsZWN0LXdyYXBwZXIifX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZSh2cCw4KSxHZShrZCksR2UocDEpLEdlKEFkKSl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0''@;'; put 'put ''b3JzOltbImNsci1zZWxlY3QtY29udGFpbmVyIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmxhKGgscHgsNSksMiZhKXtsZXQgZjt4aShmPUVpKCkpJiYoZC5tdWx0aXBsZT1mLmZpcnN0KX19LGhvc3RWYXJzOjYsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7''@;'; put 'put ''MiZhJiZ4cigiY2xyLWZvcm0tY29udHJvbCIsITApKCJjbHItZm9ybS1jb250cm9sLWRpc2FibGVkIixudWxsPT1kLmNvbnRyb2w/bnVsbDpkLmNvbnRyb2wuZGlzYWJsZWQpKCJjbHItcm93IixkLmFkZEdyaWQoKSl9LGZlYXR1cmVzOltwbyhbQWQscDEseWgsa2RdKSxDb10sbmdDb250ZW50''@;'; put 'put ''U2VsZWN0b3JzOkpOZSxkZWNsczoxMCx2YXJzOjgsY29uc3RzOltbNCwibmdJZiJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLDMsIm5nQ2xhc3MiXSxbMywibmdDbGFzcyJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3Rh''@;'; put 'put ''dHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImV4Y2xhbWF0''@;'; put 'put ''aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXV0sdGVt''@;'; put 'put ''cGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihsbyhYTmUpLFdyKDApLGd0KDEsUU5lLDEsMCwibGFiZWwiLDApLGRlKDIsImRpdiIsMSkoMywiZGl2IiwyKSxXcig0LDEpLGd0KDUsZVZlLDEsMCwiY2RzLWljb24iLDMpKDYsdFZlLDEsMCwiY2RzLWljb24iLDQpLGhlKCksZ3QoNyxuVmUsMSww''@;'; put 'put ''LCJuZy1jb250ZW50IiwwKSg4LHJWZSwxLDAsIm5nLWNvbnRlbnQiLDApKDksaVZlLDEsMCwibmctY29udGVudCIsMCksaGUoKSksMiZhJiYoZmUoKSx4ZSgibmdJZiIsIWQubGFiZWwmJmQuYWRkR3JpZCgpKSxmZSgpLHhlKCJuZ0NsYXNzIixkLmNvbnRyb2xDbGFzcygpKSxmZSgpLHhlKCJu''@;'; put 'put ''Z0NsYXNzIixkLndyYXBwZXJDbGFzcygpKSxmZSgyKSx4ZSgibmdJZiIsZC5zaG93SW52YWxpZCksZmUoKSx4ZSgibmdJZiIsZC5zaG93VmFsaWQpLGZlKCkseGUoIm5nSWYiLGQuc2hvd0hlbHBlciksZmUoKSx4ZSgibmdJZiIsZC5zaG93SW52YWxpZCksZmUoKSx4ZSgibmdJZiIsZC5zaG93''@;'; put 'put ''VmFsaWQpKX0sZGVwZW5kZW5jaWVzOlt3dSx5byxjcyx1c10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksWnk9KCgpPT57Y2xhc3MgYyBleHRlbmRzIHk3e2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7c3VwZXIoYSxVeSxkLGgsZix2KSx0aGlzLmluZGV4PTF9fXJldHVybiBjLlx1MDI3NWZhYz1m''@;'; put 'put ''dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKERhKSxHZShEcyksR2UoaDEsMTApLEdlKEVhKSxHZShlbykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJjbHJTZWxlY3QiLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEm''@;'; put 'put ''JnhyKCJjbHItc2VsZWN0IiwhMCl9LGZlYXR1cmVzOltDb119KSxjfSkoKSxYVWU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe0VzLmFkZEljb25zKHBoLGdoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBl''@;'; put 'put ''OmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTG8sRGMsVHMsaXUsaXVdfSksY30pKCksY2RlPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBiN3t9cmV0dXJuIGMuXHUwMjc1ZmFjPSgoKT0+e2xldCBsO3JldHVybiBmdW5jdGlvbihkKXtyZXR1cm4obHx8KGw9WnMoYykpKShkfHxjKX19KSgp''@;'; put 'put ''LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci10ZXh0YXJlYS1jb250YWluZXIiXV0saG9zdFZhcnM6Nixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJnhyKCJjbHItZm9ybS1jb250cm9sIiwhMCkoImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiLG51bGw9''@;'; put 'put ''PWQuY29udHJvbD9udWxsOmQuY29udHJvbC5kaXNhYmxlZCkoImNsci1yb3ciLGQuYWRkR3JpZCgpKX0sZmVhdHVyZXM6W3BvKFtBZCxwMSx5aCxrZF0pLENvXSxuZ0NvbnRlbnRTZWxlY3RvcnM6YVZlLGRlY2xzOjEwLHZhcnM6Nyxjb25zdHM6W1s0LCJuZ0lmIl0sWzEsImNsci1jb250cm9s''@;'; put 'put ''LWNvbnRhaW5lciIsMywibmdDbGFzcyJdLFsxLCJjbHItdGV4dGFyZWEtd3JhcHBlciJdLFsiY2xhc3MiLCJjbHItdmFsaWRhdGUtaWNvbiIsInNoYXBlIiwiZXhjbGFtYXRpb24tY2lyY2xlIiwic3RhdHVzIiwiZGFuZ2VyIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJjbGFz''@;'; put 'put ''cyIsImNsci12YWxpZGF0ZS1pY29uIiwic2hhcGUiLCJjaGVjay1jaXJjbGUiLCJzdGF0dXMiLCJzdWNjZXNzIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSIsInN0YXR1cyIsImRhbmdlciIsImFyaWEtaGlkZGVuIiwidHJ1ZSIs''@;'; put 'put ''MSwiY2xyLXZhbGlkYXRlLWljb24iXSxbInNoYXBlIiwiY2hlY2stY2lyY2xlIiwic3RhdHVzIiwic3VjY2VzcyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwiY2xyLXZhbGlkYXRlLWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihsbyhvVmUpLFdyKDApLGd0KDEsc1ZlLDEs''@;'; put 'put ''MCwibGFiZWwiLDApLGRlKDIsImRpdiIsMSkoMywiZGl2IiwyKSxXcig0LDEpLGd0KDUsbFZlLDEsMCwiY2RzLWljb24iLDMpKDYsY1ZlLDEsMCwiY2RzLWljb24iLDQpLGhlKCksZ3QoNyx1VmUsMSwwLCJuZy1jb250ZW50IiwwKSg4LGRWZSwxLDAsIm5nLWNvbnRlbnQiLDApKDksaFZlLDEs''@;'; put 'put ''MCwibmctY29udGVudCIsMCksaGUoKSksMiZhJiYoZmUoKSx4ZSgibmdJZiIsIWQubGFiZWwmJmQuYWRkR3JpZCgpKSxmZSgpLHhlKCJuZ0NsYXNzIixkLmNvbnRyb2xDbGFzcygpKSxmZSgzKSx4ZSgibmdJZiIsZC5zaG93SW52YWxpZCksZmUoKSx4ZSgibmdJZiIsZC5zaG93VmFsaWQpLGZl''@;'; put 'put ''KCkseGUoIm5nSWYiLGQuc2hvd0hlbHBlciksZmUoKSx4ZSgibmdJZiIsZC5zaG93SW52YWxpZCksZmUoKSx4ZSgibmdJZiIsZC5zaG93VmFsaWQpKX0sZGVwZW5kZW5jaWVzOlt3dSx5byxjcyx1c10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksWUw9KCgpPT57Y2xhc3MgYyBleHRlbmRzIHk3''@;'; put 'put ''e2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7c3VwZXIoYSxjZGUsZCxoLGYsdiksdGhpcy5pbmRleD0xfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShEYSksR2UoRHMpLEdlKGgxLDEwKSxHZShFYSksR2UoZW8pKX0sYy5cdTAyNzVkaXI9RXIoe3R5''@;'; put 'put ''cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVGV4dGFyZWEiLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJnhyKCJjbHItdGV4dGFyZWEiLCEwKX0sZmVhdHVyZXM6W0NvXX0pLGN9KSgpLEpVZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7RXMuYWRk''@;'; put 'put ''SWNvbnMocGgsZ2gpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMbyxEYyxUcyxpdSxpdV19KSxjfSkoKSx1ZGU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMu''@;'; put 'put ''XHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTG8saXUsdFVlLGFVZSxqVWUsVVVlLFUxZSxHVWUsS1VlLFhVZSxKVWUscVVlLHNVZSxaVWVdfSksY30pKCksZGRlPSgoKT0+e2Ns''@;'; put 'put ''YXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xvXX0pLGN9KSgpLFFVZT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgbVl7Y29uc3RydWN0b3IoYSxkLGgs''@;'; put 'put ''Zix2LE0sRCxaLG5lKXtzdXBlcihhLGQsaCxmLHYsTSxELFosbmUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShlbyksR2UoZ1ksOCksR2UodnMsOCksR2UoWW8pLEdlKERhKSxHZShwWSw4KSxHZShkbSksR2UoQUwpLEdlKHhzKSl9LGMuXHUw''@;'; put 'put ''Mjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImNka0RyYWciLCIiXV0sZmVhdHVyZXM6W0NvXX0pLGN9KSgpLGVaZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMu''@;'; put 'put ''XHUwMjc1aW5qPUFyKHt9KSxjfSkoKSx0WmU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTG9dfSksY30pKCk7Y2xhc3MgR0x7fWxl''@;'; put 'put ''dCBXeD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5uYkNoYW5nZXM9MCx0aGlzLl9jaGFuZ2U9bmV3IFdufWdldCBjaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWNoYW5nZVN0YXJ0KCl7dGhpcy5uYkNoYW5nZXMrK31jaGFuZ2VEb25lKCl7MD09''@;'; put 'put ''LS10aGlzLm5iQ2hhbmdlcyYmdGhpcy5fY2hhbmdlLm5leHQoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksd209KCgpPT57Y2xhc3MgY3tjb25zdHJ1''@;'; put 'put ''Y3RvcihhKXt0aGlzLnN0YXRlRGVib3VuY2VyPWEsdGhpcy5hY3RpdmF0ZWQ9ITEsdGhpcy5fc2l6ZT0wLHRoaXMuX2N1cnJlbnQ9MSx0aGlzLl9jaGFuZ2U9bmV3IFduLHRoaXMucHJldmVudEVtaXQ9ITEsdGhpcy5fc2l6ZUNoYW5nZT1uZXcgV259Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''c2l6ZX1zZXQgc2l6ZShhKXtjb25zdCBkPXRoaXMuX3NpemU7YSE9PWQmJih0aGlzLnByZXZlbnRFbWl0fHx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZVN0YXJ0KCksdGhpcy5fc2l6ZT1hLHRoaXMuX2N1cnJlbnQ9MD09PWE/MTpNYXRoLmZsb29yKGQvYSoodGhpcy5fY3VycmVudC0xKSkr''@;'; put 'put ''MSx0aGlzLnByZXZlbnRFbWl0fHwodGhpcy5fY2hhbmdlLm5leHQodGhpcy5fY3VycmVudCksdGhpcy5fc2l6ZUNoYW5nZS5uZXh0KHRoaXMuX3NpemUpLHRoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlRG9uZSgpKSksdGhpcy5wcmV2ZW50RW1pdD0hMX1nZXQgdG90YWxJdGVtcygpe3JldHVy''@;'; put 'put ''biB0aGlzLl90b3RhbEl0ZW1zfHwwfXNldCB0b3RhbEl0ZW1zKGEpe3RoaXMuX3RvdGFsSXRlbXM9YSx0aGlzLmN1cnJlbnQ+dGhpcy5sYXN0JiYodGhpcy5jdXJyZW50PXRoaXMubGFzdCl9Z2V0IGxhc3QoKXtyZXR1cm4gdGhpcy5fbGFzdD90aGlzLl9sYXN0OnRoaXMuc2l6ZT4wJiZ0aGlz''@;'; put 'put ''LnRvdGFsSXRlbXM/TWF0aC5jZWlsKHRoaXMudG90YWxJdGVtcy90aGlzLnNpemUpOjF9c2V0IGxhc3QoYSl7dGhpcy5fbGFzdD1hfWdldCBjaGFuZ2UoKXtyZXR1cm4gdGhpcy5fY2hhbmdlLmFzT2JzZXJ2YWJsZSgpfWdldCBzaXplQ2hhbmdlKCl7cmV0dXJuIHRoaXMuX3NpemVDaGFuZ2Uu''@;'; put 'put ''YXNPYnNlcnZhYmxlKCl9Z2V0IGN1cnJlbnQoKXtyZXR1cm4gdGhpcy5fY3VycmVudH1zZXQgY3VycmVudChhKXthIT09dGhpcy5fY3VycmVudCYmKHRoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlU3RhcnQoKSx0aGlzLl9jdXJyZW50PWEsdGhpcy5fY2hhbmdlLm5leHQoYSksdGhpcy5zdGF0''@;'; put 'put ''ZURlYm91bmNlci5jaGFuZ2VEb25lKCkpfWdldCBmaXJzdEl0ZW0oKXtyZXR1cm4gMD09PXRoaXMuX3RvdGFsSXRlbXM/LTE6MD09PXRoaXMuc2l6ZT8wOih0aGlzLmN1cnJlbnQtMSkqdGhpcy5zaXplfWdldCBsYXN0SXRlbSgpe2lmKDA9PT10aGlzLl90b3RhbEl0ZW1zKXJldHVybi0xO2lm''@;'; put 'put ''KDA9PT10aGlzLnNpemUpcmV0dXJuIHRoaXMudG90YWxJdGVtcy0xO2xldCBhPXRoaXMuY3VycmVudCp0aGlzLnNpemUtMTtyZXR1cm4gdGhpcy50b3RhbEl0ZW1zJiYoYT1NYXRoLm1pbihhLHRoaXMudG90YWxJdGVtcy0xKSksYX1wcmV2aW91cygpe3RoaXMuY3VycmVudD4xJiZ0aGlzLmN1''@;'; put 'put ''cnJlbnQtLX1uZXh0KCl7dGhpcy5jdXJyZW50PHRoaXMubGFzdCYmdGhpcy5jdXJyZW50Kyt9cmVzZXRQYWdlU2l6ZShhPSExKXt0aGlzLnByZXZlbnRFbWl0PWEsdGhpcy5zaXplPTB9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKE1yKFd4KSl9LGMu''@;'; put 'put ''XHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksc2c9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuX3BhZ2U9YSx0aGlzLnN0YXRlRGVib3VuY2VyPWQsdGhpcy5fY2hhbmdlPW5ldyBXbix0aGlzLl9hbGw9W119Z2V0IGNoYW5nZSgp''@;'; put 'put ''e3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9aGFzQWN0aXZlRmlsdGVycygpe2Zvcihjb25zdHtmaWx0ZXI6YX1vZiB0aGlzLl9hbGwpaWYoYSYmYS5pc0FjdGl2ZSgpKXJldHVybiEwO3JldHVybiExfWdldEFjdGl2ZUZpbHRlcnMoKXtjb25zdCBhPVtdO2Zvcihjb25zdHtm''@;'; put 'put ''aWx0ZXI6ZH1vZiB0aGlzLl9hbGwpZCYmZC5pc0FjdGl2ZSgpJiZhLnB1c2goZCk7cmV0dXJuIGF9YWRkKGEpe2NvbnN0IGQ9YS5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+dGhpcy5yZXNldFBhZ2VBbmRFbWl0RmlsdGVyQ2hhbmdlKFthXSkpO2xldCBoPSExO2NvbnN0IGY9bmV3ICRMKGEsKCk9''@;'; put 'put ''PntpZihoKXJldHVybjtkLnVuc3Vic2NyaWJlKCk7Y29uc3Qgdj10aGlzLl9hbGwuZmluZEluZGV4KE09Pk0uZmlsdGVyPT09YSk7dj49MCYmdGhpcy5fYWxsLnNwbGljZSh2LDEpLGEuaXNBY3RpdmUoKSYmdGhpcy5yZXNldFBhZ2VBbmRFbWl0RmlsdGVyQ2hhbmdlKFtdKSxoPSEwfSk7cmV0''@;'; put 'put ''dXJuIHRoaXMuX2FsbC5wdXNoKGYpLGEuaXNBY3RpdmUoKSYmdGhpcy5yZXNldFBhZ2VBbmRFbWl0RmlsdGVyQ2hhbmdlKFthXSksZn1hY2NlcHRzKGEpe2Zvcihjb25zdHtmaWx0ZXI6ZH1vZiB0aGlzLl9hbGwpaWYoZCYmZC5pc0FjdGl2ZSgpJiYhZC5hY2NlcHRzKGEpKXJldHVybiExO3Jl''@;'; put 'put ''dHVybiEwfXJlc2V0UGFnZUFuZEVtaXRGaWx0ZXJDaGFuZ2UoYSl7dGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuX3BhZ2UuY3VycmVudD0xLHRoaXMuX2NoYW5nZS5uZXh0KGEpLHRoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlRG9uZSgpfX1yZXR1cm4gYy5cdTAyNzVm''@;'; put 'put ''YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShNcih3bSksTXIoV3gpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjbGFzcyAkTHtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuZmlsdGVyPWwsdGhpcy51bnJlZ2lzdGVyPWF9fWxldCBL''@;'; put 'put ''TD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZmlsdGVycz1hfWdldCBmaWx0ZXIoKXtyZXR1cm4gdGhpcy5yZWdpc3RlcmVkJiZ0aGlzLnJlZ2lzdGVyZWQuZmlsdGVyfW5nT25EZXN0cm95KCl7dGhpcy5kZWxldGVGaWx0ZXIoKX1zZXRGaWx0ZXIoYSl7dGhpcy5kZWxldGVG''@;'; put 'put ''aWx0ZXIoKSxhIGluc3RhbmNlb2YgJEw/dGhpcy5yZWdpc3RlcmVkPWE6YSYmKHRoaXMucmVnaXN0ZXJlZD10aGlzLmZpbHRlcnMuYWRkKGEpKX1kZWxldGVGaWx0ZXIoKXt0aGlzLnJlZ2lzdGVyZWQmJih0aGlzLnJlZ2lzdGVyZWQudW5yZWdpc3RlcigpLGRlbGV0ZSB0aGlzLnJlZ2lzdGVy''@;'; put 'put ''ZWQpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShzZykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjfSksY30pKCk7Y29uc3QgaGRlPVsiYVtocmVmXSIsImFyZWFbaHJlZl0iLCJpbnB1dDpub3QoW2Rpc2FibGVkXSkiLCJidXR0b246bm90KFtk''@;'; put 'put ''aXNhYmxlZF0pIiwic2VsZWN0Om5vdChbZGlzYWJsZWRdKSIsInRleHRhcmVhOm5vdChbZGlzYWJsZWRdKSIsImlmcmFtZSIsIm9iamVjdCIsImVtYmVkIiwiW2NvbnRlbnRlZGl0YWJsZT10cnVlXSIsIltyb2xlPWJ1dHRvbl06bm90KFtkaXNhYmxlZF0pIl07ZnVuY3Rpb24gclplKGMpe2Nv''@;'; put 'put ''bnN0IGw9aGRlLmpvaW4oIiwiKTtyZXR1cm4gYy5tYXRjaGVzKGwpfWxldCBxTD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuem9uZT1hLHRoaXMuc2tpcEl0ZW1Gb2N1cz0hMSx0aGlzLmxpc3RlbmVyc0FkZGVkPSExLHRoaXMuZGVzdHJveSQ9bmV3IFduLHRoaXMuX2FjdGl2''@;'; put 'put ''ZUNlbGw9bnVsbCx0aGlzLmNvbmZpZz17a2V5R3JpZFJvd3M6J1tyb2xlPXJvd106bm90KC5kYXRhZ3JpZC1wbGFjZWhvbGRlcik6bm90KFtzdHlsZSo9ImRpc3BsYXk6IG5vbmUiXSknLGtleUdyaWRDZWxsczoiW3JvbGU9Z3JpZGNlbGxdOm5vdCguZGF0YWdyaWQtaGlkZGVuLWNvbHVtbik6''@;'; put 'put ''bm90KC5kYXRhZ3JpZC1wbGFjZWhvbGRlci1jb250ZW50KSwgW3JvbGU9Y29sdW1uaGVhZGVyXTpub3QoLmRhdGFncmlkLWhpZGRlbi1jb2x1bW4pOm5vdCguZGF0YWdyaWQtcGxhY2Vob2xkZXItY29udGVudCksIC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQiLGtleUdyaWQ6Iltyb2xlPWdyaWRd''@;'; put 'put ''In19Z2V0IGdyaWQoKXtyZXR1cm4gdGhpcy5ob3N0Py5xdWVyeVNlbGVjdG9yKHRoaXMuY29uZmlnLmtleUdyaWQpfWdldCByb3dzKCl7cmV0dXJuIHRoaXMuaG9zdD8ucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5rZXlHcmlkUm93cyl9Z2V0IGNlbGxzKCl7cmV0dXJuIHRoaXMuaG9z''@;'; put 'put ''dD8ucXVlcnlTZWxlY3RvckFsbCh0aGlzLmNvbmZpZy5rZXlHcmlkQ2VsbHMpfW5nT25EZXN0cm95KCl7dGhpcy5kZXN0cm95JC5uZXh0KCksdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpfWFkZExpc3RlbmVycygpe3RoaXMubGlzdGVuZXJzQWRkZWR8fCh0aGlzLnpvbmUucnVuT3V0c2lkZUFu''@;'; put 'put ''Z3VsYXIoKCk9PntNZCh0aGlzLmdyaWQsIm1vdXNlZG93biIpLnBpcGUoVjAodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShhPT57aWYoMT09PWEuYnV0dG9ucyYmIWEuY3RybEtleSl7Y29uc3QgZD10aGlzLmNlbGxzP0FycmF5LmZyb20odGhpcy5jZWxscykuZmluZChoPT5oPT09YS50YXJn''@;'; put 'put ''ZXR8fGg9PT1hLnRhcmdldC5jbG9zZXN0KHRoaXMuY29uZmlnLmtleUdyaWRDZWxscykpOm51bGw7ZCYmdGhpcy5zZXRBY3RpdmVDZWxsKGQse2tlZXBGb2N1czpyWmUoYS50YXJnZXQpfSl9fSksTWQodGhpcy5ncmlkLCJ3aGVlbCIpLnBpcGUoVjAodGhpcy5kZXN0cm95JCkpLnN1YnNjcmli''@;'; put 'put ''ZSgoKT0+e3RoaXMucmVtb3ZlQWN0aXZlQ2VsbCgpfSksTWQodGhpcy5ncmlkLCJmb2N1c291dCIpLnBpcGUodW0oMCksVjAodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoKT0+e3RoaXMuZ3JpZC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KXx8dGhpcy5yZW1vdmVBY3RpdmVD''@;'; put 'put ''ZWxsKCl9KSxNZCh0aGlzLmdyaWQsImtleWRvd24iKS5waXBlKFYwKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoYT0+e2lmKCghYS50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCJkcmFnLWhhbmRsZSIpfHxhLmtleSE9PXRvLkFycm93TGVmdCYmYS5rZXkhPT10by5BcnJvd1JpZ2h0KSYm''@;'; put 'put ''KGEua2V5PT09dG8uQXJyb3dVcHx8YS5rZXk9PT10by5BcnJvd0Rvd258fGEua2V5PT09dG8uQXJyb3dMZWZ0fHxhLmtleT09PXRvLkFycm93UmlnaHR8fGEua2V5PT09dG8uRW5kfHxhLmtleT09PXRvLkhvbWV8fGEua2V5PT09dG8uUGFnZVVwfHxhLmtleT09PXRvLlBhZ2VEb3duKSl7Y29u''@;'; put 'put ''c3QgZD10aGlzLmdldEN1cnJlbnRDZWxsQ29vcmRpbmF0ZXMoKSxoPXRoaXMuaXNFeHBhbmRlZFJvdyhkLnkpfHx0aGlzLmlzRGV0YWlsc1JvdyhkLnkpP3RoaXMuZ2V0TmV4dEZvckV4cGFuZGVkUm93Q29vcmRpbmF0ZShhLGQpOnRoaXMuZ2V0TmV4dEl0ZW1Db29yZGluYXRlKGEsZCksZj10''@;'; put 'put ''aGlzLnJvd3M/QXJyYXkuZnJvbSh0aGlzLmdldENlbGxzRm9yUm93KGgueSkpW2gueF06bnVsbDtmJiZ0aGlzLnNldEFjdGl2ZUNlbGwoZiksYS5wcmV2ZW50RGVmYXVsdCgpfX0pfSksdGhpcy5saXN0ZW5lcnNBZGRlZD0hMCl9aW5pdGlhbGl6ZUtleUdyaWQoYSl7dGhpcy5ob3N0PWEsdGhp''@;'; put 'put ''cy5hZGRMaXN0ZW5lcnMoKSx0aGlzLnJlc2V0S2V5R3JpZCgpfXJlc2V0S2V5R3JpZCgpe3RoaXMuY2VsbHM/LmZvckVhY2goZD0+ZC5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwiLTEiKSksKHRoaXMuY2VsbHM/dGhpcy5jZWxsc1swXTpudWxsKT8uc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIs''@;'; put 'put ''IjAiKX1yZW1vdmVBY3RpdmVDZWxsKCl7dGhpcy5fYWN0aXZlQ2VsbD1udWxsfWdldEFjdGl2ZUNlbGwoKXtyZXR1cm4gdGhpcy5fYWN0aXZlQ2VsbH1zZXRBY3RpdmVDZWxsKGEse2tlZXBGb2N1czpkfT17a2VlcEZvY3VzOiExfSl7Y29uc3QgaD10aGlzLmNlbGxzP0FycmF5LmZyb20odGhp''@;'; put 'put ''cy5jZWxscykuZmluZChmPT4iMCI9PT1mLmdldEF0dHJpYnV0ZSgidGFiaW5kZXgiKSk6bnVsbDtpZihoJiZoLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCItMSIpLGEuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIjAiKSx0aGlzLl9hY3RpdmVDZWxsPWEsIXRoaXMuc2tpcEl0ZW1Gb2N1cyYm''@;'; put 'put ''IWQpe2xldCBmO2lmKCJjb2x1bW5oZWFkZXIiPT09YS5nZXRBdHRyaWJ1dGUoInJvbGUiKSlmPWE7ZWxzZXtjb25zdCB2PWZ1bmN0aW9uIG5aZShjKXtjb25zdCBhPVsuLi5oZGUsJ1t0YWJpbmRleD0iMCJdOm5vdChbZGlzYWJsZWRdKSddLmpvaW4oIiwiKTtyZXR1cm4gQXJyYXkuZnJvbShj''@;'; put 'put ''LnF1ZXJ5U2VsZWN0b3JBbGwoYSkpfShhKTtmPXYubGVuZ3RoP3ZbMF06YX1mLmZvY3VzKCl9fWdldE5leHRGb3JFeHBhbmRlZFJvd0Nvb3JkaW5hdGUoYSxkKXtpZihhLmtleT09PXRvLlBhZ2VVcHx8YS5rZXk9PT10by5QYWdlRG93bilyZXR1cm4gdGhpcy5nZXROZXh0SXRlbUNvb3JkaW5h''@;'; put 'put ''dGUoYSxkKTtpZighKHRoaXMuaXNEZXRhaWxzUm93KGQueSl8fHRoaXMuaXNSb3dSZXBsYWNlZChkLnkpfHxhLmtleSE9PXRvLkhvbWUmJmEua2V5IT09dG8uRW5kJiZhLmtleSE9PXRvLkFycm93UmlnaHQmJmEua2V5IT09dG8uQXJyb3dMZWZ0KSlyZXR1cm4gdGhpcy5nZXROZXh0SXRlbUNv''@;'; put 'put ''b3JkaW5hdGUoYSxkKTtjb25zdHtudW1PZlJvd3M6aCxudW1PZkNvbHVtbnM6ZixpbmxpbmVTdGFydDp2LGlubGluZUVuZDpNLGlzQWN0aW9uQ2VsbDpELG5leHRDZWxsQ29vcmRzOlp9PXRoaXMuZ2V0Q2FsY1ZhcmlhYmxlcyhkKSxuZT10aGlzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGQu''@;'; put 'put ''eSk7aWYoYS5rZXk9PT10by5BcnJvd1VwJiYwIT09ZC55KXtpZihaLnk9ZC55LTEsbmUmJiFEKXJldHVybiB0aGlzLmlzUm93UmVwbGFjZWQoZC55KSYmKFoueT1aLnktMSksWi54PXRoaXMuaXNEZXRhaWxzUm93KFoueSk/MDohMT09PXRoaXMuaXNEZXRhaWxzUm93KGQueSk/ZC54OnRoaXMu''@;'; put 'put ''YWN0aW9uQ2VsbENvdW50KFoueSksWjtEJiZ0aGlzLmlzRGV0YWlsc1JvdyhaLnkpP1oueT1aLnktMTp0aGlzLmlzUm93UmVwbGFjZWQoWi55KT8oWi55PVoueS0xLHRoaXMuaXNEZXRhaWxzUm93KFoueSl8fChaLng9ZC54K3RoaXMuYWN0aW9uQ2VsbENvdW50KFoueSkpKTp0aGlzLmlzRGV0''@;'; put 'put ''YWlsc1JvdyhkLnkpJiYhdGhpcy5pc0RldGFpbHNSb3coWi55KT9aLng9ZC54K3RoaXMuYWN0aW9uQ2VsbENvdW50KFoueSk6IUQmJnRoaXMuaXNEZXRhaWxzUm93KFoueSkmJihaLng9ZC54LXRoaXMuYWN0aW9uQ2VsbENvdW50KGQueSkpfWVsc2UgaWYoYS5rZXk9PT10by5BcnJvd0Rvd24m''@;'; put 'put ''JmQueTxoKXtpZihaLnk9ZC55KzEsbmUmJiFEKXJldHVybiB0aGlzLmlzUm93UmVwbGFjZWQoWi55KSYmKFoueT1aLnkrMSksWi54PXRoaXMuaXNEZXRhaWxzUm93KFoueSk/MDp0aGlzLmFjdGlvbkNlbGxDb3VudChaLnkpLFo7RHx8dGhpcy5pc1Jvd1JlcGxhY2VkKFoueSk/Wi55PVoueSsx''@;'; put 'put ''OloueD10aGlzLmdldENlbGxzRm9yUm93KGQueSkubGVuZ3RoPmY/ZC54LXRoaXMuYWN0aW9uQ2VsbENvdW50KGQueSk6ZC54K3RoaXMuYWN0aW9uQ2VsbENvdW50KFoueSl9ZWxzZSBhLmtleT09PXY/MCE9PWQueD9aLng9ZC54LTE6RHx8KFoueT1kLnktMSxaLng9dGhpcy5hY3Rpb25DZWxs''@;'; put 'put ''Q291bnQoWi55KS0xKTphLmtleT09PU0mJmQueDxmP0QmJmQueD09PXRoaXMuYWN0aW9uQ2VsbENvdW50KGQueCktMSYmdGhpcy5pc1Jvd1JlcGxhY2VkKGQueSkmJiF0aGlzLmlzRGV0YWlsc1JvdyhkLnkpPyhaLnk9ZC55KzEsWi54PTApOloueD1kLngrMTphLmtleT09PXRvLkVuZD8oWi54''@;'; put 'put ''PXRoaXMuZ2V0Q2VsbHNGb3JSb3coZC55KS5sZW5ndGgtMSxhLmN0cmxLZXkmJihaLng9ZixaLnk9aCkpOmEua2V5PT09dG8uSG9tZSYmKFoueD0wLFoueT1kLnktMSxhLmN0cmxLZXkmJihaLnk9MCkpO3JldHVybiBafWdldE5leHRJdGVtQ29vcmRpbmF0ZShhLGQpe2NvbnN0e251bU9mUm93''@;'; put 'put ''czpoLG51bU9mQ29sdW1uczpmLGlubGluZVN0YXJ0OnYsaW5saW5lRW5kOk0saXRlbXNQZXJQYWdlOkQsaXNBY3Rpb25DZWxsOlosbmV4dENlbGxDb29yZHM6bmV9PXRoaXMuZ2V0Q2FsY1ZhcmlhYmxlcyhkKTtpZihhLmtleT09PXRvLkFycm93VXAmJjAhPT1kLnkpe2lmKG5lLnk9ZC55LTEs''@;'; put 'put ''dGhpcy5pc1NpbmdsZUNlbGxFeHBhbmRlZFJvdyhuZS55KSYmIVomJnRoaXMuaXNEZXRhaWxzUm93KG5lLnkpKXJldHVybiBuZS54PTAsbmU7dGhpcy5pc0RldGFpbHNSb3cobmUueSkmJihaP25lLnk9bmUueS0xOm5lLng9bmUueC10aGlzLmFjdGlvbkNlbGxDb3VudChkLnkpKX1lbHNlIGlm''@;'; put 'put ''KGEua2V5PT09dG8uQXJyb3dEb3duJiZkLnk8aCl7aWYobmUueT1kLnkrMSx0aGlzLmlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KG5lLnkpJiYhWiYmdGhpcy5pc1Jvd1JlcGxhY2VkKG5lLnkpKXJldHVybiBuZS54PTAsbmUueT1uZS55KzEsbmU7IVomJnRoaXMuaXNSb3dSZXBsYWNlZChuZS55''@;'; put 'put ''KSYmKG5lLnk9bmUueSsxLG5lLng9bmUueC10aGlzLmFjdGlvbkNlbGxDb3VudChkLnkpKX1lbHNlIGEua2V5PT09diYmMCE9PWQueD9uZS54PWQueC0xOmEua2V5PT09TSYmZC54PGY/bmUueD1kLngrMTphLmtleT09PXRvLkVuZD8obmUueD1mLGEuY3RybEtleSYmKG5lLnk9aCkpOmEua2V5''@;'; put 'put ''PT09dG8uSG9tZT8obmUueD0wLGEuY3RybEtleSYmKG5lLnk9MCkpOmEua2V5PT09dG8uUGFnZVVwP25lLnk9ZC55LUQ+MD9kLnktRCsxOjE6YS5rZXk9PT10by5QYWdlRG93biYmKG5lLnk9ZC55K0Q8aD9kLnkrRDpoKTtyZXR1cm4gbmV9Z2V0Q2FsY1ZhcmlhYmxlcyhhKXtjb25zdCBkPXRo''@;'; put 'put ''aXMucm93cz90aGlzLnJvd3MubGVuZ3RoLTE6MCxoPWQ/dGhpcy5nZXRDZWxsc0ZvclJvdygwKS5sZW5ndGgtMTowLGY9dGhpcy5ob3N0LmRpcjtyZXR1cm57bnVtT2ZSb3dzOmQsbnVtT2ZDb2x1bW5zOmgsaW5saW5lU3RhcnQ6InJ0bCI9PT1mP3RvLkFycm93UmlnaHQ6dG8uQXJyb3dMZWZ0''@;'; put 'put ''LGlubGluZUVuZDoicnRsIj09PWY/dG8uQXJyb3dMZWZ0OnRvLkFycm93UmlnaHQsaXRlbXNQZXJQYWdlOk1hdGguZmxvb3IodGhpcy5ob3N0Py5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQiKS5jbGllbnRIZWlnaHQvdGhpcy5yb3dzWzBdLmNsaWVudEhlaWdodCktMXx8MCxpc0FjdGlvbkNl''@;'; put 'put ''bGw6dGhpcy5pc0FjdGlvbkNlbGwoYSksbmV4dENlbGxDb29yZHM6e3g6YS54LHk6YS55fX19Z2V0Q3VycmVudENlbGxDb29yZGluYXRlcygpe2NvbnN0IGE9dGhpcy5jZWxscz9BcnJheS5mcm9tKHRoaXMuY2VsbHMpLmZpbmQoZj0+IjAiPT09Zi5nZXRBdHRyaWJ1dGUoInRhYmluZGV4Iikp''@;'; put 'put ''Om51bGwsZD1hP2EuY2xvc2VzdCh0aGlzLmNvbmZpZy5rZXlHcmlkUm93cyk6bnVsbDtyZXR1cm57eDpkJiZhP0FycmF5LmZyb20oZC5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuY29uZmlnLmtleUdyaWRDZWxscykpLmluZGV4T2YoYSk6MCx5OmQmJmEmJnRoaXMucm93cz9BcnJheS5mcm9tKHRo''@;'; put 'put ''aXMucm93cykuaW5kZXhPZihkKTowfX1nZXRDZWxsc0ZvclJvdyhhKXtyZXR1cm4gdGhpcy5yb3dzW2FdLnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5jb25maWcua2V5R3JpZENlbGxzKX1pc0V4cGFuZGVkUm93KGEpe2NvbnN0IGQ9dGhpcy5yb3dzW2FdLnF1ZXJ5U2VsZWN0b3IoIi5kYXRhZ3Jp''@;'; put 'put ''ZC1yb3ctZGV0YWlsIik7cmV0dXJuISFkJiYibm9uZSIhPT1kLnN0eWxlLmRpc3BsYXl9aXNEZXRhaWxzUm93KGEpe3JldHVybiB0aGlzLnJvd3NbYV0uY2xhc3NMaXN0LmNvbnRhaW5zKCJkYXRhZ3JpZC1yb3ctZGV0YWlsIil9aXNSb3dSZXBsYWNlZChhKXtyZXR1cm4hIXRoaXMucm93c1th''@;'; put 'put ''XS5jbG9zZXN0KCJjbHItZGctcm93LmRhdGFncmlkLXJvdy1yZXBsYWNlZCIpfWlzU2luZ2xlQ2VsbEV4cGFuZGVkUm93KGEpe3JldHVybiAxPT09KHRoaXMucm93c1thXS5jbGFzc0xpc3QuY29udGFpbnMoImRhdGFncmlkLXJvdy1kZXRhaWwiKT90aGlzLnJvd3NbYV06dGhpcy5yb3dzW2Fd''@;'; put 'put ''LnF1ZXJ5U2VsZWN0b3IoIi5kYXRhZ3JpZC1yb3ctZGV0YWlsIikpPy5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuY29uZmlnLmtleUdyaWRDZWxscykubGVuZ3RofWFjdGlvbkNlbGxDb3VudChhKXtyZXR1cm4gdGhpcy5hY3Rpb25DZWxsc0FzQXJyYXkoYSkubGVuZ3RofWFjdGlvbkNlbGxzQXNB''@;'; put 'put ''cnJheShhKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnJvd3NbYV0ucXVlcnlTZWxlY3RvckFsbCgiLmRhdGFncmlkLXJvdy1zdGlja3kgLmRhdGFncmlkLWNlbGwsIC5kYXRhZ3JpZC1yb3ctc3RpY2t5IC5kYXRhZ3JpZC1jb2x1bW4iKSl9aXNBY3Rpb25DZWxsKGEpe3JldHVybiEhdGhpcy5h''@;'; put 'put ''Y3Rpb25DZWxsc0FzQXJyYXkoYS55KVthLnhdfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShNcihZbykpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLFl4PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBL''@;'; put 'put ''THtjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7c3VwZXIoYSksdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5zbWFydFRvZ2dsZVNlcnZpY2U9aCx0aGlzLnBsYXRmb3JtSWQ9Zix0aGlzLmVsZW1lbnRSZWY9dix0aGlzLmtleU5hdmlnYXRpb249TSx0aGlzLm9wZW5DaGFuZ2U9bmV3IHFyKCEx''@;'; put 'put ''KSx0aGlzLmFyaWFFeHBhbmRlZD0hMSx0aGlzLnBvcG92ZXJJZD1TdSgpLHRoaXMuc21hcnRQb3NpdGlvbj17YXhpczpmMS5WRVJUSUNBTCxzaWRlOk0yLkFGVEVSLGFuY2hvcjpPcy5FTkQsY29udGVudDpPcy5FTkR9LHRoaXMuX29wZW49ITEsdGhpcy5zdWJzPVtdLHRoaXMuc3Vicy5wdXNo''@;'; put 'put ''KGgub3BlbkNoYW5nZS5zdWJzY3JpYmUoRD0+e3RoaXMub3Blbj1ELHRoaXMuYXJpYUV4cGFuZGVkPUR9KSl9Z2V0IG9wZW4oKXtyZXR1cm4gdGhpcy5fb3Blbn1zZXQgb3BlbihhKXt0aGlzLm9wZW4hPT0oYT0hIWEpJiYodGhpcy5zbWFydFRvZ2dsZVNlcnZpY2Uub3Blbj1hLHRoaXMub3Bl''@;'; put 'put ''bkNoYW5nZS5lbWl0KGEpLCFhJiZYcyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLmFuY2hvci5uYXRpdmVFbGVtZW50LmZvY3VzKCksdGhpcy5rZXlOYXZpZ2F0aW9uJiYodGhpcy5rZXlOYXZpZ2F0aW9uLnNraXBJdGVtRm9jdXM9YSksdGhpcy5fb3Blbj1hKX1zZXQgY3VzdG9tRmlsdGVyKGEp''@;'; put 'put ''e3RoaXMuc2V0RmlsdGVyKGEpfWdldCBhY3RpdmUoKXtyZXR1cm4hIXRoaXMuZmlsdGVyJiZ0aGlzLmZpbHRlci5pc0FjdGl2ZSgpfW5nT25DaGFuZ2VzKCl7c2V0VGltZW91dCgoKT0+e3RoaXMuc2V0VG9nZ2xlQnV0dG9uQXJpYUxhYmVsKCl9KX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25E''@;'; put 'put ''ZXN0cm95KCksdGhpcy5zdWJzLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1zZXRUb2dnbGVCdXR0b25BcmlhTGFiZWwoKXtjb25zdCBoPXRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Py5jbG9zZXN0KCJjbHItZGctY29sdW1uIik/LnF1ZXJ5U2VsZWN0b3IoIi5kYXRhZ3JpZC1j''@;'; put 'put ''b2x1bW4tdGl0bGUiKT8udGV4dENvbnRlbnQudHJpbSgpLnRvTG9jYWxlTG93ZXJDYXNlKCk7dGhpcy50b2dnbGVCdXR0b25BcmlhTGFiZWw9dGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhdGFncmlkRmlsdGVyQXJpYUxhYmVsLHtDT0xVTU46aHx8''@;'; put 'put ''IiJ9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2Uoc2cpLEdlKHRzKSxHZShhYyksR2Uob2EpLEdlKGVvKSxHZShxTCw4KSl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1maWx0ZXIiXV0sdmlld1F1ZXJ5OmZ1''@;'; put 'put ''bmN0aW9uKGEsZCl7aWYoMSZhJiZuYShmVmUsNSxlbyksMiZhKXtsZXQgaDt4aShoPUVpKCkpJiYoZC5hbmNob3I9aC5maXJzdCl9fSxpbnB1dHM6e29wZW46W1puLk5vbmUsImNsckRnRmlsdGVyT3BlbiIsIm9wZW4iXSxjdXN0b21GaWx0ZXI6W1puLk5vbmUsImNsckRnRmlsdGVyIiwiY3Vz''@;'; put 'put ''dG9tRmlsdGVyIl19LG91dHB1dHM6e29wZW5DaGFuZ2U6ImNsckRnRmlsdGVyT3BlbkNoYW5nZSJ9LGZlYXR1cmVzOltwbyhbe3Byb3ZpZGU6R0wsdXNlRXhpc3Rpbmc6Y31dKSxDbyx5bF0sbmdDb250ZW50U2VsZWN0b3JzOnlhLGRlY2xzOjQsdmFyczoxMyxjb25zdHM6W1siYW5jaG9yIiwi''@;'; put 'put ''Il0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xyUG9wb3ZlckFuY2hvciIsIiIsImNsclBvcG92ZXJPcGVuQ2xvc2VCdXR0b24iLCIiLDEsImRhdGFncmlkLWZpbHRlci10b2dnbGUiXSxbInNvbGlkIiwiIl0sWyJjbGFzcyIsImRhdGFncmlkLWZpbHRlciIsImNka1RyYXBGb2N1cyIsIiIsInJvbGUi''@;'; put 'put ''LCJkaWFsb2ciLDMsImlkIiw0LCJjbHJQb3BvdmVyQ29udGVudCIsImNsclBvcG92ZXJDb250ZW50QXQiLCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCJjbHJQb3BvdmVyQ29udGVudFNjcm9sbFRvQ2xvc2UiXSxbImNka1RyYXBGb2N1cyIsIiIsInJvbGUiLCJkaWFs''@;'; put 'put ''b2ciLDEsImRhdGFncmlkLWZpbHRlciIsMywiaWQiXSxbMSwiZGF0YWdyaWQtZmlsdGVyLWNsb3NlLXdyYXBwZXIiXSxbInR5cGUiLCJidXR0b24iLCJjbHJQb3BvdmVyQ2xvc2VCdXR0b24iLCIiLDEsImNsb3NlIl0sWyJzaGFwZSIsIndpbmRvdy1jbG9zZSJdXSx0ZW1wbGF0ZTpmdW5jdGlv''@;'; put 'put ''bihhLGQpezEmYSYmKGxvKCksZGUoMCwiYnV0dG9uIiwxLDApLEd0KDIsImNkcy1pY29uIiwyKSxoZSgpLGd0KDMscFZlLDUsMywiZGl2IiwzKSksMiZhJiYoeHIoImRhdGFncmlkLWZpbHRlci1vcGVuIixkLm9wZW4pKCJkYXRhZ3JpZC1maWx0ZXJlZCIsZC5hY3RpdmUpLGRyKCJhcmlhLWxh''@;'; put 'put ''YmVsIixkLnRvZ2dsZUJ1dHRvbkFyaWFMYWJlbCkoImFyaWEtZXhwYW5kZWQiLGQuYXJpYUV4cGFuZGVkKSgiYXJpYS1jb250cm9scyIsZC5wb3BvdmVySWQpLGZlKDIpLGRyKCJzdGF0dXMiLGQuYWN0aXZlPyJpbmZvIjpudWxsKSgic2hhcGUiLGQuYWN0aXZlPyJmaWx0ZXItZ3JpZC1jaXJj''@;'; put 'put ''bGUiOiJmaWx0ZXItZ3JpZCIpLGZlKCkseGUoImNsclBvcG92ZXJDb250ZW50IixkLm9wZW4pKCJjbHJQb3BvdmVyQ29udGVudEF0IixkLnNtYXJ0UG9zaXRpb24pKCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCEwKSgiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Ns''@;'; put 'put ''b3NlIiwhMCkpfSxkZXBlbmRlbmNpZXM6W1Z5LGNzLEx4LHcxZSxGeCxQeF0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7Y2xhc3MgUVl7Y29uc3RydWN0b3IobCl7dGhpcy5wcm9wPWwsbC5pbmRleE9mKCIuIik+PTAmJih0aGlzLnNwbGl0UHJvcD1sLnNwbGl0KCIuIikpfWdldFByb3BWYWx1''@;'; put 'put ''ZShsKXtpZih0aGlzLnNwbGl0UHJvcCl7bGV0IGE9bDtmb3IoY29uc3QgZCBvZiB0aGlzLnNwbGl0UHJvcCl7aWYobnVsbD09PWF8fHR5cGVvZiBhPiJ1Inx8dHlwZW9mIGFbZF0+InUiKXJldHVybjthPWFbZF19cmV0dXJuIGF9cmV0dXJuIGxbdGhpcy5wcm9wXX19Y2xhc3MgWEx7Y29uc3Ry''@;'; put 'put ''dWN0b3IobCxhPSExKXt0aGlzLnByb3A9bCx0aGlzLmV4YWN0PWEsdGhpcy5uZXN0ZWRQcm9wPW5ldyBRWShsKX1hY2NlcHRzKGwsYSxkKXtjb25zdCBoPXRoaXMubmVzdGVkUHJvcC5nZXRQcm9wVmFsdWUobCk7cmV0dXJuISh2b2lkIDA9PT1ofHxudWxsIT09YSYmKCJudW1iZXIiIT10eXBl''@;'; put 'put ''b2YgaHx8aDxhKXx8bnVsbCE9PWQmJigibnVtYmVyIiE9dHlwZW9mIGh8fGg+ZCkpfX1jbGFzcyBTN3tjb25zdHJ1Y3RvcihsKXt0aGlzLmZpbHRlckZuPWwsdGhpcy5fY2hhbmdlcz1uZXcgV24sdGhpcy5fbG93PW51bGwsdGhpcy5faGlnaD1udWxsfWdldCBjaGFuZ2VzKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuX2NoYW5nZXMuYXNPYnNlcnZhYmxlKCl9Z2V0IHZhbHVlKCl7cmV0dXJuW3RoaXMuX2xvdyx0aGlzLl9oaWdoXX1zZXQgdmFsdWUobCl7Y29uc3QgYT1sWzBdLGQ9bFsxXTsoYSE9PXRoaXMuX2xvd3x8ZCE9PXRoaXMuX2hpZ2gpJiYodGhpcy5fbG93PWEsdGhpcy5faGlnaD1kLHRoaXMu''@;'; put 'put ''X2NoYW5nZXMubmV4dChbdGhpcy5fbG93LHRoaXMuX2hpZ2hdKSl9Z2V0IGxvdygpe3JldHVybiB0aGlzLl9sb3d9c2V0IGxvdyhsKXtsIT09dGhpcy5fbG93JiYodGhpcy5fbG93PWwsdGhpcy5fY2hhbmdlcy5uZXh0KFt0aGlzLl9sb3csdGhpcy5faGlnaF0pKX1nZXQgaGlnaCgpe3JldHVy''@;'; put 'put ''biB0aGlzLl9oaWdofXNldCBoaWdoKGwpe2whPT10aGlzLl9oaWdoJiYodGhpcy5faGlnaD1sLHRoaXMuX2NoYW5nZXMubmV4dChbdGhpcy5fbG93LHRoaXMuX2hpZ2hdKSl9Z2V0IHN0YXRlKCl7cmV0dXJuIHRoaXMuZmlsdGVyRm4gaW5zdGFuY2VvZiBYTD97cHJvcGVydHk6dGhpcy5maWx0''@;'; put 'put ''ZXJGbi5wcm9wLGxvdzp0aGlzLl9sb3csaGlnaDp0aGlzLl9oaWdofTp0aGlzfWlzQWN0aXZlKCl7cmV0dXJuIG51bGwhPT10aGlzLl9sb3d8fG51bGwhPT10aGlzLmhpZ2h9YWNjZXB0cyhsKXtyZXR1cm4gdGhpcy5maWx0ZXJGbi5hY2NlcHRzKGwsdGhpcy5fbG93LHRoaXMuX2hpZ2gpfWVx''@;'; put 'put ''dWFscyhsKXtyZXR1cm4gbCBpbnN0YW5jZW9mIFM3JiYobC5maWx0ZXJGbiBpbnN0YW5jZW9mIFhMP3RoaXMuZmlsdGVyRm4gaW5zdGFuY2VvZiBYTCYmbC5maWx0ZXJGbi5wcm9wPT09dGhpcy5maWx0ZXJGbi5wcm9wJiZsLmxvdz09PXRoaXMuX2xvdyYmbC5oaWdoPT09dGhpcy5faGlnaDps''@;'; put 'put ''PT09dGhpcyl9fWxldCBmZGU9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEtMe2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7c3VwZXIoYSksdGhpcy5kb21BZGFwdGVyPWQsdGhpcy5jb21tb25TdHJpbmdzPWgsdGhpcy5wb3BvdmVyVG9nZ2xlU2VydmljZT1mLHRoaXMubmdab25lPXYsdGhpcy5maWx0''@;'; put 'put ''ZXJWYWx1ZUNoYW5nZT1uZXcgcXIsdGhpcy5vcGVuPSExLHRoaXMuc3Vic2NyaXB0aW9ucz1bXX1nZXQgdmFsdWUoKXtyZXR1cm5bdGhpcy5maWx0ZXIubG93LHRoaXMuZmlsdGVyLmhpZ2hdfXNldCB2YWx1ZShhKXt0aGlzLmZpbHRlciYmQXJyYXkuaXNBcnJheShhKT9hJiYoYVswXSE9PXRo''@;'; put 'put ''aXMuZmlsdGVyLmxvd3x8YVsxXSE9PXRoaXMuZmlsdGVyLmhpZ2gpJiYodGhpcy5maWx0ZXIubG93PSJudW1iZXIiPT10eXBlb2YgYVswXT9hWzBdOm51bGwsdGhpcy5maWx0ZXIuaGlnaD0ibnVtYmVyIj09dHlwZW9mIGFbMV0/YVsxXTpudWxsLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1p''@;'; put 'put ''dChhKSk6dGhpcy5pbml0RmlsdGVyVmFsdWVzPWF9c2V0IGN1c3RvbU51bWVyaWNGaWx0ZXIoYSl7dGhpcy5zZXRGaWx0ZXIoYSBpbnN0YW5jZW9mICRMP2E6bmV3IFM3KGEpKSx0aGlzLmluaXRGaWx0ZXJWYWx1ZXMmJih0aGlzLnZhbHVlPXRoaXMuaW5pdEZpbHRlclZhbHVlcyxkZWxldGUg''@;'; put 'put ''dGhpcy5pbml0RmlsdGVyVmFsdWVzKX1nZXQgbWF4UGxhY2Vob2xkZXJWYWx1ZSgpe3JldHVybiB0aGlzLm1heFBsYWNlaG9sZGVyfHx0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5tYXhWYWx1ZX1nZXQgbWluUGxhY2Vob2xkZXJWYWx1ZSgpe3JldHVybiB0aGlzLm1pblBsYWNlaG9sZGVyfHx0''@;'; put 'put ''aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5taW5WYWx1ZX1nZXQgZnJvbUxhYmVsVmFsdWUoKXtyZXR1cm4gdGhpcy5mcm9tTGFiZWx8fHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmZyb21MYWJlbH1nZXQgdG9MYWJlbFZhbHVlKCl7cmV0dXJuIHRoaXMudG9MYWJlbHx8dGhpcy5jb21tb25TdHJp''@;'; put 'put ''bmdzLmtleXMudG9MYWJlbH1nZXQgbG93KCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiB0aGlzLmZpbHRlci5sb3cmJmlzRmluaXRlKHRoaXMuZmlsdGVyLmxvdyk/dGhpcy5maWx0ZXIubG93Om51bGx9c2V0IGxvdyhhKXsibnVtYmVyIj09dHlwZW9mIGEmJmEhPT10aGlzLmZpbHRlci5sb3c/''@;'; put 'put ''KHRoaXMuZmlsdGVyLmxvdz1hLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdChbdGhpcy5maWx0ZXIubG93LHRoaXMuZmlsdGVyLmhpZ2hdKSk6Im51bWJlciIhPXR5cGVvZiBhJiYodGhpcy5maWx0ZXIubG93PW51bGwsdGhpcy5maWx0ZXJWYWx1ZUNoYW5nZS5lbWl0KFt0aGlzLmZpbHRl''@;'; put 'put ''ci5sb3csdGhpcy5maWx0ZXIuaGlnaF0pKX1nZXQgaGlnaCgpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdGhpcy5maWx0ZXIuaGlnaCYmaXNGaW5pdGUodGhpcy5maWx0ZXIuaGlnaCk/dGhpcy5maWx0ZXIuaGlnaDpudWxsfXNldCBoaWdoKGEpeyJudW1iZXIiPT10eXBlb2YgYSYmYSE9PXRo''@;'; put 'put ''aXMuZmlsdGVyLmhpZ2g/KHRoaXMuZmlsdGVyLmhpZ2g9YSx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVtaXQoW3RoaXMuZmlsdGVyLmxvdyx0aGlzLmZpbHRlci5oaWdoXSkpOiJudW1iZXIiIT10eXBlb2YgYSYmKHRoaXMuZmlsdGVyLmhpZ2g9bnVsbCx0aGlzLmZpbHRlclZhbHVlQ2hhbmdl''@;'; put 'put ''LmVtaXQoW3RoaXMuZmlsdGVyLmxvdyx0aGlzLmZpbHRlci5oaWdoXSkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMucG9wb3ZlclRvZ2dsZVNlcnZpY2Uub3BlbkNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMub3Blbj1hLHRoaXMubmdab25lLnJ1bk91''@;'; put 'put ''dHNpZGVBbmd1bGFyKCgpPT57cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57dGhpcy5kb21BZGFwdGVyLmZvY3VzKHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudCl9KX0pfSkpfW5nT25EZXN0cm95KCl7c3VwZXIubmdPbkRlc3Ryb3koKSx0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT57''@;'; put 'put ''YS51bnN1YnNjcmliZSgpfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHNnKSxHZShwbSksR2UodHMpLEdlKGFjKSxHZShZbykpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctbnVtZXJpYy1maWx0ZXIiXV0s''@;'; put 'put ''dmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYobmEoZ1ZlLDUpLG5hKFl4LDUpKSwyJmEpe2xldCBoO3hpKGg9RWkoKSkmJihkLmlucHV0PWguZmlyc3QpLHhpKGg9RWkoKSkmJihkLmZpbHRlckNvbnRhaW5lcj1oLmZpcnN0KX19LGlucHV0czp7bWluUGxhY2Vob2xkZXI6W1puLk5v''@;'; put 'put ''bmUsImNsckZpbHRlck1pblBsYWNlaG9sZGVyIiwibWluUGxhY2Vob2xkZXIiXSxtYXhQbGFjZWhvbGRlcjpbWm4uTm9uZSwiY2xyRmlsdGVyTWF4UGxhY2Vob2xkZXIiLCJtYXhQbGFjZWhvbGRlciJdLGZyb21MYWJlbDpbWm4uTm9uZSwiY2xyRmlsdGVyRnJvbUxhYmVsIiwiZnJvbUxhYmVs''@;'; put 'put ''Il0sdG9MYWJlbDpbWm4uTm9uZSwiY2xyRmlsdGVyVG9MYWJlbCIsInRvTGFiZWwiXSx2YWx1ZTpbWm4uTm9uZSwiY2xyRmlsdGVyVmFsdWUiLCJ2YWx1ZSJdLGN1c3RvbU51bWVyaWNGaWx0ZXI6W1puLk5vbmUsImNsckRnTnVtZXJpY0ZpbHRlciIsImN1c3RvbU51bWVyaWNGaWx0ZXIiXX0s''@;'; put 'put ''b3V0cHV0czp7ZmlsdGVyVmFsdWVDaGFuZ2U6ImNsckZpbHRlclZhbHVlQ2hhbmdlIn0sZmVhdHVyZXM6W3BvKFt7cHJvdmlkZTpHTCx1c2VFeGlzdGluZzpjfV0pLENvXSxkZWNsczoxMix2YXJzOjEwLGNvbnN0czpbWyJpbnB1dF9sb3ciLCIiXSxbImlucHV0X2hpZ2giLCIiXSxbMywiY2xy''@;'; put 'put ''RGdGaWx0ZXJPcGVuQ2hhbmdlIiwiY2xyRGdGaWx0ZXIiLCJjbHJEZ0ZpbHRlck9wZW4iXSxbMSwiZGF0YWdyaWQtbnVtZXJpYy1maWx0ZXItZm9ybSJdLFsxLCJjbHItY29udHJvbC1sYWJlbCJdLFsiY2xyTnVtYmVySW5wdXQiLCIiLCJ0eXBlIiwibnVtYmVyIiwiYXV0b2NvbXBsZXRlIiwi''@;'; put 'put ''b2ZmIiwibmFtZSIsImxvdyIsMSwiZGF0YWdyaWQtbnVtZXJpYy1maWx0ZXItaW5wdXQiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwicGxhY2Vob2xkZXIiXSxbImNsck51bWJlcklucHV0IiwiIiwidHlwZSIsIm51bWJlciIsImF1dG9jb21wbGV0ZSIsIm9mZiIsIm5hbWUiLCJoaWdo''@;'; put 'put ''IiwxLCJkYXRhZ3JpZC1udW1lcmljLWZpbHRlci1pbnB1dCIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJwbGFjZWhvbGRlciJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpe2lmKDEmYSl7Y29uc3QgaD1PbigpO2RlKDAsImNsci1kZy1maWx0ZXIiLDIpLHBpKCJjbHJEZ0ZpbHRlck9w''@;'; put 'put ''ZW5DaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiB3dChoKSx2aShkLm9wZW4sdil8fChkLm9wZW49diksQ3Qodil9KSxkZSgxLCJkaXYiLDMpKDIsImNsci1udW1iZXItaW5wdXQtY29udGFpbmVyIikoMywibGFiZWwiLDQpLExlKDQpLGhlKCksZGUoNSwiaW5wdXQiLDUsMCkscGkoIm5nTW9k''@;'; put 'put ''ZWxDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiB3dChoKSx2aShkLmxvdyx2KXx8KGQubG93PXYpLEN0KHYpfSksaGUoKSgpLGRlKDcsImNsci1udW1iZXItaW5wdXQtY29udGFpbmVyIikoOCwibGFiZWwiLDQpLExlKDkpLGhlKCksZGUoMTAsImlucHV0Iiw2LDEpLHBpKCJuZ01vZGVsQ2hh''@;'; put 'put ''bmdlIixmdW5jdGlvbih2KXtyZXR1cm4gd3QoaCksdmkoZC5oaWdoLHYpfHwoZC5oaWdoPXYpLEN0KHYpfSksaGUoKSgpKCkoKX0yJmEmJih4ZSgiY2xyRGdGaWx0ZXIiLGQucmVnaXN0ZXJlZCksZmkoImNsckRnRmlsdGVyT3BlbiIsZC5vcGVuKSxmZSg0KSxfcihkLmZyb21MYWJlbFZhbHVl''@;'; put 'put ''KSxmZSgpLGZpKCJuZ01vZGVsIixkLmxvdykseGUoInBsYWNlaG9sZGVyIixkLm1pblBsYWNlaG9sZGVyVmFsdWUpLGRyKCJhcmlhLWxhYmVsIixkLm1pblBsYWNlaG9sZGVyVmFsdWUpLGZlKDQpLF9yKGQudG9MYWJlbFZhbHVlKSxmZSgpLGZpKCJuZ01vZGVsIixkLmhpZ2gpLHhlKCJwbGFj''@;'; put 'put ''ZWhvbGRlciIsZC5tYXhQbGFjZWhvbGRlclZhbHVlKSxkcigiYXJpYS1sYWJlbCIsZC5tYXhQbGFjZWhvbGRlclZhbHVlKSl9LGRlcGVuZGVuY2llczpbdXMsbGRlLHNkZSxRbCx1TCxRcyxZcyxZeF0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7Y2xhc3MgSkx7Y29uc3RydWN0b3IobCxhPSEx''@;'; put 'put ''KXt0aGlzLnByb3A9bCx0aGlzLmV4YWN0PWEsdGhpcy5uZXN0ZWRQcm9wPW5ldyBRWShsKX1hY2NlcHRzKGwsYSl7Y29uc3QgZD10aGlzLm5lc3RlZFByb3AuZ2V0UHJvcFZhbHVlKGwpO3JldHVybiEodHlwZW9mIGQ+InUiKSYmKHRoaXMuZXhhY3Q/KCIiK2QpLnRvTG93ZXJDYXNlKCk9PT1h''@;'; put 'put ''OigiIitkKS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoYSk+PTApfX1jbGFzcyBNN3tjb25zdHJ1Y3RvcihsKXt0aGlzLmZpbHRlckZuPWwsdGhpcy5fY2hhbmdlcz1uZXcgV24sdGhpcy5fbG93ZXJDYXNlVmFsdWU9IiIsdGhpcy5fcmF3VmFsdWU9IiJ9Z2V0IGNoYW5nZXMoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fY2hhbmdlcy5hc09ic2VydmFibGUoKX1nZXQgbG93ZXJDYXNlVmFsdWUoKXtyZXR1cm4gdGhpcy5fbG93ZXJDYXNlVmFsdWV9Z2V0IHN0YXRlKCl7cmV0dXJuIHRoaXMuZmlsdGVyRm4gaW5zdGFuY2VvZiBKTD97cHJvcGVydHk6dGhpcy5maWx0ZXJGbi5wcm9wLHZhbHVlOnRoaXMudmFs''@;'; put 'put ''dWV9OnRoaXN9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuX3Jhd1ZhbHVlfXNldCB2YWx1ZShsKXtsfHwobD0iIiksbCE9PXRoaXMuX3Jhd1ZhbHVlJiYodGhpcy5fcmF3VmFsdWU9bCx0aGlzLl9sb3dlckNhc2VWYWx1ZT1sLnRvTG93ZXJDYXNlKCkudHJpbSgpLHRoaXMuX2NoYW5nZXMubmV4''@;'; put 'put ''dChsKSl9aXNBY3RpdmUoKXtyZXR1cm4hIXRoaXMudmFsdWV9YWNjZXB0cyhsKXtyZXR1cm4gdGhpcy5maWx0ZXJGbi5hY2NlcHRzKGwsdGhpcy5sb3dlckNhc2VWYWx1ZSl9ZXF1YWxzKGwpe3JldHVybiBsIGluc3RhbmNlb2YgTTcmJihsLmZpbHRlckZuIGluc3RhbmNlb2YgSkw/dGhpcy5m''@;'; put 'put ''aWx0ZXJGbiBpbnN0YW5jZW9mIEpMJiZsLmZpbHRlckZuLnByb3A9PT10aGlzLmZpbHRlckZuLnByb3AmJmwudmFsdWU9PT10aGlzLnZhbHVlOmw9PT10aGlzKX19bGV0IGVHPSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyBLTHtjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxEKXtzdXBlcihhKSx0aGlz''@;'; put 'put ''LmRvbUFkYXB0ZXI9ZCx0aGlzLmNvbW1vblN0cmluZ3M9aCx0aGlzLnNtYXJ0VG9nZ2xlU2VydmljZT1mLHRoaXMuZWxlbWVudFJlZj12LHRoaXMuY2RyPU0sdGhpcy5uZ1pvbmU9RCx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlPW5ldyBxcix0aGlzLm9wZW49ITEsdGhpcy5sYWJlbFZhbHVlPSIi''@;'; put 'put ''LHRoaXMuc3Vicz1bXX1zZXQgY3VzdG9tU3RyaW5nRmlsdGVyKGEpe3RoaXMuc2V0RmlsdGVyKGEgaW5zdGFuY2VvZiAkTD9hOm5ldyBNNyhhKSksdGhpcy5pbml0RmlsdGVyVmFsdWUmJih0aGlzLnZhbHVlPXRoaXMuaW5pdEZpbHRlclZhbHVlLGRlbGV0ZSB0aGlzLmluaXRGaWx0ZXJWYWx1''@;'; put 'put ''ZSl9Z2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMuZmlsdGVyLnZhbHVlfXNldCB2YWx1ZShhKXt0aGlzLmZpbHRlciYmInN0cmluZyI9PXR5cGVvZiBhPyhhfHwoYT0iIiksYSE9PXRoaXMuZmlsdGVyLnZhbHVlJiYodGhpcy5maWx0ZXIudmFsdWU9YSx0aGlzLmZpbHRlclZhbHVlQ2hhbmdlLmVt''@;'; put 'put ''aXQoYSkpKTp0aGlzLmluaXRGaWx0ZXJWYWx1ZT1hfWdldCBwbGFjZWhvbGRlclZhbHVlKCl7cmV0dXJuIHRoaXMucGxhY2Vob2xkZXJ8fHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmZpbHRlckl0ZW1zfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuc3Vicy5wdXNoKHRoaXMuc21hcnRUb2dnbGVT''@;'; put 'put ''ZXJ2aWNlLm9wZW5DaGFuZ2Uuc3Vic2NyaWJlKGE9Pnt0aGlzLm9wZW49YSx0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+e3RoaXMuZG9tQWRhcHRlci5mb2N1cyh0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQpfSl9KX0pKX1uZ09u''@;'; put 'put ''Q2hhbmdlcygpe3NldFRpbWVvdXQoKCk9Pnt0aGlzLnNldEZpbHRlckxhYmVsKCksdGhpcy5jZHIubWFya0ZvckNoZWNrKCl9KX1uZ09uRGVzdHJveSgpe3N1cGVyLm5nT25EZXN0cm95KCksdGhpcy5zdWJzLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX1zZXRGaWx0ZXJMYWJlbCgpe2lm''@;'; put 'put ''KHRoaXMubGFiZWwpcmV0dXJuIHZvaWQodGhpcy5sYWJlbFZhbHVlPXRoaXMubGFiZWwpO2NvbnN0IGQ9dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ/LmNsb3Nlc3QoImNsci1kZy1jb2x1bW4iKT8ucXVlcnlTZWxlY3RvcigiLmRhdGFncmlkLWNvbHVtbi10aXRsZSIpO3RoaXMubGFi''@;'; put 'put ''ZWxWYWx1ZT10aGlzLmNvbW1vblN0cmluZ3MucGFyc2UodGhpcy5jb21tb25TdHJpbmdzLmtleXMuZGF0YWdyaWRGaWx0ZXJMYWJlbCx7Q09MVU1OOmQ/LnRleHRDb250ZW50LnRyaW0oKXx8IiJ9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2Uo''@;'; put 'put ''c2cpLEdlKHBtKSxHZSh0cyksR2UoYWMpLEdlKGVvKSxHZSh4cyksR2UoWW8pKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLXN0cmluZy1maWx0ZXIiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYobmEobVZlLDUpLG5hKFl4LDUpKSwyJmEp''@;'; put 'put ''e2xldCBoO3hpKGg9RWkoKSkmJihkLmlucHV0PWguZmlyc3QpLHhpKGg9RWkoKSkmJihkLmZpbHRlckNvbnRhaW5lcj1oLmZpcnN0KX19LGlucHV0czp7cGxhY2Vob2xkZXI6W1puLk5vbmUsImNsckZpbHRlclBsYWNlaG9sZGVyIiwicGxhY2Vob2xkZXIiXSxsYWJlbDpbWm4uTm9uZSwiY2xy''@;'; put 'put ''RmlsdGVyTGFiZWwiLCJsYWJlbCJdLGN1c3RvbVN0cmluZ0ZpbHRlcjpbWm4uTm9uZSwiY2xyRGdTdHJpbmdGaWx0ZXIiLCJjdXN0b21TdHJpbmdGaWx0ZXIiXSx2YWx1ZTpbWm4uTm9uZSwiY2xyRmlsdGVyVmFsdWUiLCJ2YWx1ZSJdfSxvdXRwdXRzOntmaWx0ZXJWYWx1ZUNoYW5nZToiY2xy''@;'; put 'put ''RmlsdGVyVmFsdWVDaGFuZ2UifSxmZWF0dXJlczpbcG8oW3twcm92aWRlOkdMLHVzZUV4aXN0aW5nOmN9XSksQ28seWxdLGRlY2xzOjYsdmFyczo2LGNvbnN0czpbWyJpbnB1dCIsIiJdLFszLCJjbHJEZ0ZpbHRlck9wZW5DaGFuZ2UiLCJjbHJEZ0ZpbHRlciIsImNsckRnRmlsdGVyT3BlbiJd''@;'; put 'put ''LFsidHlwZSIsInRleHQiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJuYW1lIiwic2VhcmNoIiwiY2xySW5wdXQiLCIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwicGxhY2Vob2xkZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXtpZigxJmEpe2NvbnN0IGg9T24oKTtkZSgwLCJjbHIt''@;'; put 'put ''ZGctZmlsdGVyIiwxKSxwaSgiY2xyRGdGaWx0ZXJPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gd3QoaCksdmkoZC5vcGVuLHYpfHwoZC5vcGVuPXYpLEN0KHYpfSksZGUoMSwiY2xyLWlucHV0LWNvbnRhaW5lciIpKDIsImxhYmVsIiksTGUoMyksaGUoKSxkZSg0LCJpbnB1dCIsMiww''@;'; put 'put ''KSxwaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIHd0KGgpLHZpKGQudmFsdWUsdil8fChkLnZhbHVlPXYpLEN0KHYpfSksaGUoKSgpKCl9MiZhJiYoeGUoImNsckRnRmlsdGVyIixkLnJlZ2lzdGVyZWQpLGZpKCJjbHJEZ0ZpbHRlck9wZW4iLGQub3BlbiksZmUoMyksX3Io''@;'; put 'put ''ZC5sYWJlbFZhbHVlKSxmZSgpLGZpKCJuZ01vZGVsIixkLnZhbHVlKSx4ZSgicGxhY2Vob2xkZXIiLGQucGxhY2Vob2xkZXJWYWx1ZSksZHIoImFyaWEtbGFiZWwiLGQucGxhY2Vob2xkZXJWYWx1ZSkpfSxkZXBlbmRlbmNpZXM6W3VzLElkLEJMLFFsLFFzLFlzLFl4XSxlbmNhcHN1bGF0aW9u''@;'; put 'put ''OjJ9KSxjfSkoKSxDbT0oKCk9PntjbGFzcyBjIGV4dGVuZHMgVHl7fXJldHVybiBjLlx1MDI3NWZhYz0oKCk9PntsZXQgbDtyZXR1cm4gZnVuY3Rpb24oZCl7cmV0dXJuKGx8fChsPVpzKGMpKSkoZHx8Yyl9fSkoKSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0''@;'; put 'put ''YWdyaWQiXV0sZmVhdHVyZXM6W0NvXX0pLGN9KSgpLFd5PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmFjdGlvbmFibGVDb3VudD0wfWdldCBoYXNBY3Rpb25hYmxlUm93KCl7cmV0dXJuIHRoaXMuYWN0aW9uYWJsZUNvdW50PjB9cmVnaXN0ZXIoKXt0aGlzLmFjdGlvbmFibGVD''@;'; put 'put ''b3VudCsrfXVucmVnaXN0ZXIoKXt0aGlzLmFjdGlvbmFibGVDb3VudC0tfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSx4Nz0oKCk9PntjbGFzcyBjIGV4''@;'; put 'put ''dGVuZHMgQXl7Y29uc3RydWN0b3IoYSxkLGgpe2lmKCFkKXRocm93IG5ldyBFcnJvcigiY2xyLWRnLXJvdyBzaG91bGQgb25seSBiZSB1c2VkIGluc2lkZSBvZiBhIGNsci1kYXRhZ3JpZCIpO3N1cGVyKGEsZCksdGhpcy5yb3dBY3Rpb25zPWh9Z2V0IGZsYXZvcigpe3JldHVybiB0aGlzLnJv''@;'; put 'put ''d0FjdGlvbnMuaGFzQWN0aW9uYWJsZVJvd319cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoeHMpLEdlKENtLDgpLEdlKFd5KSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kYXRhZ3JpZCJdLFsiY2xyLWRnLXJvdyJd''@;'; put 'put ''XSxmZWF0dXJlczpbQ29dfSksY30pKCkscGRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5wbGF0Zm9ybUlkPWEsdGhpcy5tb2RhbFN0YWNrPVtdLHRoaXMua2V5VXBFdmVudExpc3RlbmVyPXRoaXMub25LZXlVcC5iaW5kKHRoaXMpfXRyYWNrTW9kYWxPcGVuKGEpeyExPT09''@;'; put 'put ''dGhpcy5tb2RhbFN0YWNrLmluY2x1ZGVzKGEpJiZ0aGlzLm1vZGFsU3RhY2sudW5zaGlmdChhKSxYcyh0aGlzLnBsYXRmb3JtSWQpJiZkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIix0aGlzLmtleVVwRXZlbnRMaXN0ZW5lcil9dHJhY2tNb2RhbENsb3NlKGEpe2NvbnN0''@;'; put 'put ''IGQ9dGhpcy5tb2RhbFN0YWNrLmluZGV4T2YoYSk7ZD4tMSYmdGhpcy5tb2RhbFN0YWNrLnNwbGljZShkLDEpLDA9PT10aGlzLm1vZGFsU3RhY2subGVuZ3RoJiZYcyh0aGlzLnBsYXRmb3JtSWQpJiZkb2N1bWVudC5ib2R5LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIix0aGlzLmtleVVw''@;'; put 'put ''RXZlbnRMaXN0ZW5lcil9b25LZXlVcChhKXt0aGlzLm1vZGFsU3RhY2subGVuZ3RoJiZTMihhLmtleSk9PT10by5Fc2NhcGUmJihkb2N1bWVudC5hY3RpdmVFbGVtZW50LmJsdXIoKSx0aGlzLm1vZGFsU3RhY2tbMF0uY2xvc2UoKSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXty''@;'; put 'put ''ZXR1cm4gbmV3KGF8fGMpKE1yKG9hKSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSksY30pKCksJGY9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLm1vZGFsU3RhY2tTZXJ2aWNlPWEsdGhpcy5wcmV2ZW50''@;'; put 'put ''U2Nyb2xsPSExLHRoaXMudG9nZ2xlU3RhdGU9ITEsdGhpcy5fZW5hYmxlZD0hMSx0aGlzLl9zdGF0ZT1uZXcgUXIodGhpcy50b2dnbGVTdGF0ZSl9Z2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy5fZW5hYmxlZH1zZXQgZW5hYmxlZChhKXt0aGlzLl9lbmFibGVkPWF9Z2V0IHByZXZlbnRGb2N1''@;'; put 'put ''c1Njcm9sbCgpe3JldHVybiB0aGlzLnByZXZlbnRTY3JvbGx9c2V0IHByZXZlbnRGb2N1c1Njcm9sbChhKXt0aGlzLnByZXZlbnRTY3JvbGw9YX1nZXQgc3RhdGUoKXtyZXR1cm4gdGhpcy5jYWNoZX1nZXQgc3RhdGVDaGFuZ2UoKXtyZXR1cm4gdGhpcy5fc3RhdGUuYXNPYnNlcnZhYmxlKCl9''@;'; put 'put ''Z2V0IGlzT3Blbigpe3JldHVybiEwPT09dGhpcy50b2dnbGVTdGF0ZX1vcGVuKGEsZCl7dGhpcy5jYWNoZT1hLHRoaXMuYnV0dG9uPWQsdGhpcy50b2dnbGVTdGF0ZT0hMCx0aGlzLl9zdGF0ZS5uZXh0KHRoaXMudG9nZ2xlU3RhdGUpLHRoaXMubW9kYWxTdGFja1NlcnZpY2UudHJhY2tNb2Rh''@;'; put 'put ''bE9wZW4odGhpcyl9Y2xvc2UoKXt0aGlzLnRvZ2dsZVN0YXRlPSExLHRoaXMucmV0dXJuRm9jdXMoKSx0aGlzLl9zdGF0ZS5uZXh0KHRoaXMudG9nZ2xlU3RhdGUpLHRoaXMubW9kYWxTdGFja1NlcnZpY2UudHJhY2tNb2RhbENsb3NlKHRoaXMpfXJldHVybkZvY3VzKCl7dGhpcy5idXR0b24m''@;'; put 'put ''Jih0aGlzLmJ1dHRvbi5mb2N1cyh7cHJldmVudFNjcm9sbDp0aGlzLnByZXZlbnRGb2N1c1Njcm9sbH0pLHRoaXMuYnV0dG9uPW51bGwpfXRvZ2dsZShhLGQpe3RoaXMuaXNSb3dPcGVuKGEpfHwhYT90aGlzLmNsb3NlKCk6dGhpcy5vcGVuKGEsZCl9aXNSb3dPcGVuKGEpe3JldHVybiEoIXRo''@;'; put 'put ''aXMudG9nZ2xlU3RhdGV8fHRoaXMuY2FjaGUhPT1hKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoTXIocGRlKSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksWXk9KCgpPT57Y2xhc3MgY3tjb25z''@;'; put 'put ''dHJ1Y3RvcihhKXt0aGlzLmRldGFpbFNlcnZpY2U9YSx0aGlzLmV4cGFuZGFibGVDb3VudD0wfWdldCBoYXNFeHBhbmRhYmxlUm93KCl7cmV0dXJuIXRoaXMuZGV0YWlsU2VydmljZS5lbmFibGVkJiZ0aGlzLmV4cGFuZGFibGVDb3VudD4wfXJlZ2lzdGVyKCl7dGhpcy5leHBhbmRhYmxlQ291''@;'; put 'put ''bnQrK311bnJlZ2lzdGVyKCl7dGhpcy5leHBhbmRhYmxlQ291bnQtLX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoTXIoJGYpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxFNz0oKCk9PntjbGFz''@;'; put 'put ''cyBjIGV4dGVuZHMgQXl7Y29uc3RydWN0b3IoYSxkLGgpe2lmKCFkKXRocm93IG5ldyBFcnJvcigiY2xyLWRnLXJvdyBzaG91bGQgb25seSBiZSB1c2VkIGluc2lkZSBvZiBhIGNsci1kYXRhZ3JpZCIpO3N1cGVyKGEsZCksdGhpcy5leHBhbmRhYmxlQ291bnQ9aH1nZXQgZmxhdm9yKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuZXhwYW5kYWJsZUNvdW50Lmhhc0V4cGFuZGFibGVSb3d9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHhzKSxHZShDbSw4KSxHZShZeSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGF0YWdyaWQi''@;'; put 'put ''XSxbImNsci1kZy1yb3ciXV0sZmVhdHVyZXM6W0NvXX0pLGN9KSgpO2NsYXNzIFFMe2NvbnN0cnVjdG9yKGwpe3RoaXMucHJvcD1sLHRoaXMubmVzdGVkUHJvcD1uZXcgUVkobCl9Y29tcGFyZShsLGEpe2xldCBkPXRoaXMubmVzdGVkUHJvcC5nZXRQcm9wVmFsdWUobCksaD10aGlzLm5lc3Rl''@;'; put 'put ''ZFByb3AuZ2V0UHJvcFZhbHVlKGEpO3JldHVybiJzdHJpbmciPT10eXBlb2YgZCYmKGQ9ZC50b0xvd2VyQ2FzZSgpKSwic3RyaW5nIj09dHlwZW9mIGgmJihoPWgudG9Mb3dlckNhc2UoKSksdHlwZW9mIGQ+InUifHxudWxsPT09ZD90eXBlb2YgaD4idSJ8fG51bGw9PT1oPzA6MTp0eXBlb2Yg''@;'; put 'put ''aD4idSJ8fG51bGw9PT1ofHxkPGg/LTE6ZD5oPzE6MH19dmFyIENoPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuVU5TT1JURUQ9MF09IlVOU09SVEVEIixjW2MuQVNDPTFdPSJBU0MiLGNbYy5ERVNDPS0xXT0iREVTQyIsY30oQ2h8fHt9KTtjb25zdCBHeT0iZGF0YWdyaWQtZml4ZWQtd2lkdGgi''@;'; put 'put ''LEd4PSJkYXRhZ3JpZC1oaWRkZW4tY29sdW1uIjtsZXQgdEc9KCgpPT57Y2xhc3MgY3tuZ0FmdGVyVmlld0luaXQoKXt0aGlzLmNvbHVtblZpZXc9dGhpcy50ZW1wbGF0ZVJlZi5jcmVhdGVFbWJlZGRlZFZpZXcobnVsbCl9bmdPbkRlc3Ryb3koKXt0aGlzLmNvbHVtblZpZXcuZGVzdHJveSgp''@;'; put 'put ''fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siZGctd3JhcHBlZC1jb2x1bW4iXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZuYSh2VmUsNSksMiZhKXtsZXQgaDt4aSho''@;'; put 'put ''PUVpKCkpJiYoZC50ZW1wbGF0ZVJlZj1oLmZpcnN0KX19LG5nQ29udGVudFNlbGVjdG9yczp5YSxkZWNsczoyLHZhcnM6MCxjb25zdHM6W1siY29sdW1uUG9ydGFsIiwiIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobG8oKSxndCgwLGJWZSwxLDAsIm5nLXRlbXBsYXRlIixudWxs''@;'; put 'put ''LDAsX3UpKX0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksZU89KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnN0YXRlRGVib3VuY2VyPWEsdGhpcy5fcmV2ZXJzZT0hMSx0aGlzLl9jaGFuZ2U9bmV3IFdufWdldCBjb21wYXJhdG9yKCl7cmV0dXJuIHRoaXMuX2NvbXBhcmF0b3J9''@;'; put 'put ''c2V0IGNvbXBhcmF0b3IoYSl7dGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuX2NvbXBhcmF0b3I9YSx0aGlzLmVtaXRDaGFuZ2UoKSx0aGlzLnN0YXRlRGVib3VuY2VyLmNoYW5nZURvbmUoKX1nZXQgcmV2ZXJzZSgpe3JldHVybiB0aGlzLl9yZXZlcnNlfXNldCByZXZl''@;'; put 'put ''cnNlKGEpe3RoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlU3RhcnQoKSx0aGlzLl9yZXZlcnNlPWEsdGhpcy5lbWl0Q2hhbmdlKCksdGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VEb25lKCl9Z2V0IGNoYW5nZSgpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9dG9nZ2xlKGEs''@;'; put 'put ''ZCl7dGhpcy5zdGF0ZURlYm91bmNlci5jaGFuZ2VTdGFydCgpLHRoaXMuY29tcGFyYXRvcj09PWE/dGhpcy5fcmV2ZXJzZT10eXBlb2YgZDwidSImJmR8fCF0aGlzLl9yZXZlcnNlOih0aGlzLl9jb21wYXJhdG9yPWEsdGhpcy5fcmV2ZXJzZT10eXBlb2YgZDwidSImJmQpLHRoaXMuZW1pdENo''@;'; put 'put ''YW5nZSgpLHRoaXMuc3RhdGVEZWJvdW5jZXIuY2hhbmdlRG9uZSgpfWNsZWFyKCl7dGhpcy5jb21wYXJhdG9yPW51bGx9Y29tcGFyZShhLGQpe3JldHVybih0aGlzLnJldmVyc2U/LTE6MSkqdGhpcy5jb21wYXJhdG9yLmNvbXBhcmUoYSxkKX1lbWl0Q2hhbmdlKCl7dGhpcy5fY2hhbmdlLm5l''@;'; put 'put ''eHQodGhpcyl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKE1yKFd4KSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7dmFyIEtmPWZ1bmN0aW9uKGMpe3JldHVybiBjW2MuQUxJR05fQ09MVU1OUz0w''@;'; put 'put ''XT0iQUxJR05fQ09MVU1OUyIsY1tjLkNBTENVTEFURV9NT0RFX09OPTFdPSJDQUxDVUxBVEVfTU9ERV9PTiIsY1tjLkNBTENVTEFURV9NT0RFX09GRj0yXT0iQ0FMQ1VMQVRFX01PREVfT0ZGIixjW2MuQ0xFQVJfV0lEVEhTPTNdPSJDTEVBUl9XSURUSFMiLGNbYy5DT01QVVRFX0NPTFVNTl9X''@;'; put 'put ''SURUSFM9NF09IkNPTVBVVEVfQ09MVU1OX1dJRFRIUyIsY30oS2Z8fHt9KTtsZXQgVDc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX3JlbmRlclN0ZXA9bmV3IFduLHRoaXMuYWxyZWFkeVNpemVkPSExfWdldCByZW5kZXJTdGVwKCl7cmV0dXJuIHRoaXMuX3JlbmRlclN0ZXAu''@;'; put 'put ''YXNPYnNlcnZhYmxlKCl9ZmlsdGVyUmVuZGVyU3RlcHMoYSl7cmV0dXJuIHRoaXMucmVuZGVyU3RlcC5waXBlKFdsKGQ9PmE9PT1kKSl9cmVzaXplKCl7dGhpcy5fcmVuZGVyU3RlcC5uZXh0KEtmLkNBTENVTEFURV9NT0RFX09OKSx0aGlzLmFscmVhZHlTaXplZCYmdGhpcy5fcmVuZGVyU3Rl''@;'; put 'put ''cC5uZXh0KEtmLkNMRUFSX1dJRFRIUyksdGhpcy5fcmVuZGVyU3RlcC5uZXh0KEtmLkNPTVBVVEVfQ09MVU1OX1dJRFRIUyksdGhpcy5fcmVuZGVyU3RlcC5uZXh0KEtmLkFMSUdOX0NPTFVNTlMpLHRoaXMuYWxyZWFkeVNpemVkPSEwLHRoaXMuX3JlbmRlclN0ZXAubmV4dChLZi5DQUxDVUxB''@;'; put 'put ''VEVfTU9ERV9PRkYpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxuRz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmVsPWEsdGhp''@;'; put 'put ''cy5kb21BZGFwdGVyPWQsdGhpcy5vcmdhbml6ZXI9aCx0aGlzLl9yZXNpemVkQnk9MH1nZXQgcmVzaXplZEJ5KCl7cmV0dXJuIHRoaXMuX3Jlc2l6ZWRCeX1nZXQgbWluQ29sdW1uV2lkdGgoKXtyZXR1cm4gdGhpcy5kb21BZGFwdGVyLm1pbldpZHRoKHRoaXMuZWwubmF0aXZlRWxlbWVudCl8''@;'; put 'put ''fDk2fWdldCBtYXhSZXNpemVSYW5nZSgpe3JldHVybiB0aGlzLndpZHRoQmVmb3JlUmVzaXplLXRoaXMubWluQ29sdW1uV2lkdGh9Z2V0IHdpZHRoQWZ0ZXJSZXNpemUoKXtyZXR1cm4gdGhpcy53aWR0aEJlZm9yZVJlc2l6ZSt0aGlzLl9yZXNpemVkQnl9c3RhcnRSZXNpemUoKXt0aGlzLl9y''@;'; put 'put ''ZXNpemVkQnk9MCx0aGlzLmlzV2l0aGluTWF4UmVzaXplUmFuZ2U9ITAsdGhpcy53aWR0aEJlZm9yZVJlc2l6ZT10aGlzLmRvbUFkYXB0ZXIuY2xpZW50UmVjdCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpLndpZHRofWVuZFJlc2l6ZSgpe3RoaXMub3JnYW5pemVyLnJlc2l6ZSgpfWNhbGN1bGF0''@;'; put 'put ''ZVJlc2l6ZShhKXthPC10aGlzLm1heFJlc2l6ZVJhbmdlPyh0aGlzLl9yZXNpemVkQnk9LXRoaXMubWF4UmVzaXplUmFuZ2UsdGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlPSExKToodGhpcy5fcmVzaXplZEJ5PWEsdGhpcy5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlPSEwKX19cmV0dXJuIGMu''@;'; put 'put ''XHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoTXIoZW8pLE1yKHBtKSxNcihUNykpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHJHPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5wbGF0Zm9ybUlkPWF9''@;'; put 'put ''Z2V0IHRhYmxlUmVmKCl7cmV0dXJuIHRoaXMuX3RhYmxlUmVmfXNldCB0YWJsZVJlZihhKXt0aGlzLl90YWJsZVJlZj1hfXNldCB0YWJsZShhKXtYcyh0aGlzLnBsYXRmb3JtSWQpJiZhLm5hdGl2ZUVsZW1lbnQmJih0aGlzLnRhYmxlUmVmPWEubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9y''@;'; put 'put ''KCIuZGF0YWdyaWQtdGFibGUiKSl9Z2V0Q29sdW1uRHJhZ0hlaWdodCgpe3JldHVybiB0aGlzLnRhYmxlUmVmP2Ake3RoaXMudGFibGVSZWYuY2xpZW50SGVpZ2h0fXB4YDpudWxsfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShNcihvYSkpfSxjLlx1''@;'; put 'put ''MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLG1kZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXt0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlPWEsdGhpcy5yZW5kZXJlcj1kLHRoaXMubmdab25lPWgsdGhpcy50YWJsZVNpemVT''@;'; put 'put ''ZXJ2aWNlPWYsdGhpcy5jb21tb25TdHJpbmc9dix0aGlzLmRvY3VtZW50PU0sdGhpcy5jb2x1bW5TZXBhcmF0b3JJZD1TdSgpLHRoaXMucmVzaXplU3RhcnRlZE9uS2V5RG93bj0hMSx0aGlzLnVubGlzdGVuZXJzPVtdfWdldCBkZXNjcmlwdGlvbklkKCl7cmV0dXJuYCR7dGhpcy5jb2x1bW5T''@;'; put 'put ''ZXBhcmF0b3JJZH0tYXJpYS1kZXNjcmliZWRieWB9Z2V0IHJlc2l6ZVRyYWNrZXJFbCgpe3JldHVybiB0aGlzLnJlc2l6ZVRyYWNrZXJSZWYubmF0aXZlRWxlbWVudH1nZXQgY29sdW1uSGFuZGxlRWwoKXtyZXR1cm4gdGhpcy5jb2x1bW5IYW5kbGVSZWYubmF0aXZlRWxlbWVudH1uZ0FmdGVy''@;'; put 'put ''Vmlld0luaXQoKXt0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e3RoaXMudW5saXN0ZW5lcnMucHVzaCh0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLmNvbHVtbkhhbmRsZUVsLCJrZXlkb3duIixhPT57dGhpcy5zaG93VHJhY2tlck9uRmlyc3RLZXlEb3duKGEpLHRoaXMubW92''@;'; put 'put ''ZVRyYWNrZXJPbktleURvd24oYSl9KSksdGhpcy51bmxpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuY29sdW1uSGFuZGxlRWwsImtleXVwIixhPT57dGhpcy5oaWRlVHJhY2tlck9uS2V5VXAoYSl9KSl9KX1uZ09uRGVzdHJveSgpe3RoaXMudW5saXN0ZW5lcnMuZm9y''@;'; put 'put ''RWFjaChhPT5hKCkpfXNob3dUcmFja2VyKCl7dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5zdGFydFJlc2l6ZSgpO2NvbnN0IGE9dGhpcy50YWJsZVNpemVTZXJ2aWNlLmdldENvbHVtbkRyYWdIZWlnaHQoKTt0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMucmVzaXplVHJhY2tlckVsLCJo''@;'; put 'put ''ZWlnaHQiLGEpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5yZXNpemVUcmFja2VyRWwsImRpc3BsYXkiLCJibG9jayIpfW1vdmVUcmFja2VyKGEpe3RoaXMuY29sdW1uUmVzaXplclNlcnZpY2UuY2FsY3VsYXRlUmVzaXplKGEpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5yZXNp''@;'; put 'put ''emVUcmFja2VyRWwsInRyYW5zZm9ybSIsYHRyYW5zbGF0ZVgoJHt0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6ZWRCeX1weClgKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZG9jdW1lbnQuYm9keSwiY3Vyc29yIiwiY29sLXJlc2l6ZSIpLHRoaXMucmVkRmxhZ1RyYWNrZXIo''@;'; put 'put ''KX1oaWRlVHJhY2tlcigpe3RoaXMuY29sdW1uUmVzaXplclNlcnZpY2UuZW5kUmVzaXplKCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLnJlc2l6ZVRyYWNrZXJFbCwiZGlzcGxheSIsIm5vbmUiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMucmVzaXplVHJhY2tlckVsLCJ0cmFu''@;'; put 'put ''c2Zvcm0iLCJ0cmFuc2xhdGVYKDBweCkiKSx0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuY29sdW1uSGFuZGxlRWwsInRyYW5zZm9ybSIsInRyYW5zbGF0ZVgoMHB4KSIpLHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5kb2N1bWVudC5ib2R5LCJjdXJzb3IiLCJhdXRvIil9c2hvd1Ry''@;'; put 'put ''YWNrZXJPbkZpcnN0S2V5RG93bihhKXshdGhpcy5yZXNpemVTdGFydGVkT25LZXlEb3duJiYodGhpcy5pc0Fycm93TGVmdEtleUV2ZW50KGEpfHx0aGlzLmlzQXJyb3dSaWdodEtleUV2ZW50KGEpKSYmKHRoaXMucmVzaXplU3RhcnRlZE9uS2V5RG93bj0hMCx0aGlzLnJlbmRlcmVyLmFkZENs''@;'; put 'put ''YXNzKHRoaXMucmVzaXplVHJhY2tlckVsLCJvbi1hcnJvdy1rZXktcmVzaXplIiksdGhpcy5zaG93VHJhY2tlcigpKX1tb3ZlVHJhY2tlck9uS2V5RG93bihhKXt0aGlzLmlzQXJyb3dMZWZ0S2V5RXZlbnQoYSk/KGEuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5tb3ZlVHJhY2tlcih0aGlzLmNv''@;'; put 'put ''bHVtblJlc2l6ZXJTZXJ2aWNlLnJlc2l6ZWRCeS0xMikpOnRoaXMuaXNBcnJvd1JpZ2h0S2V5RXZlbnQoYSkmJihhLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMubW92ZVRyYWNrZXIodGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5yZXNpemVkQnkrMTIpKX1oaWRlVHJhY2tlck9uS2V5VXAoYSl7''@;'; put 'put ''dGhpcy5yZXNpemVTdGFydGVkT25LZXlEb3duJiYodGhpcy5pc0Fycm93TGVmdEtleUV2ZW50KGEpfHx0aGlzLmlzQXJyb3dSaWdodEtleUV2ZW50KGEpKSYmKHRoaXMucmVzaXplU3RhcnRlZE9uS2V5RG93bj0hMSx0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMucmVzaXplVHJhY2tl''@;'; put 'put ''ckVsLCJvbi1hcnJvdy1rZXktcmVzaXplIiksdGhpcy5oaWRlVHJhY2tlcigpLHRoaXMuY29sdW1uSGFuZGxlRWwuZm9jdXMoKSl9cmVkRmxhZ1RyYWNrZXIoKXt0aGlzLmlzV2l0aGluTWF4UmVzaXplUmFuZ2UhPT10aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlLmlzV2l0aGluTWF4UmVzaXpl''@;'; put 'put ''UmFuZ2UmJih0aGlzLmlzV2l0aGluTWF4UmVzaXplUmFuZ2U9dGhpcy5jb2x1bW5SZXNpemVyU2VydmljZS5pc1dpdGhpbk1heFJlc2l6ZVJhbmdlLHRoaXMuaXNXaXRoaW5NYXhSZXNpemVSYW5nZT90aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMucmVzaXplVHJhY2tlckVsLCJleGNl''@;'; put 'put ''ZWRlZC1tYXgiKTp0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMucmVzaXplVHJhY2tlckVsLCJleGNlZWRlZC1tYXgiKSl9aXNBcnJvd0xlZnRLZXlFdmVudChhKXtyZXR1cm4gUzIoYS5rZXkpPT09dG8uQXJyb3dMZWZ0fWlzQXJyb3dSaWdodEtleUV2ZW50KGEpe3JldHVybiBTMihhLmtl''@;'; put 'put ''eSk9PT10by5BcnJvd1JpZ2h0fX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShuRyksR2UoRWEpLEdlKFlvKSxHZShyRyksR2UodHMpLEdlKHZzKSl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1jb2x1bW4tc2Vw''@;'; put 'put ''YXJhdG9yIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKG5hKHlWZSw1KSxuYShfVmUsNSkpLDImYSl7bGV0IGg7eGkoaD1FaSgpKSYmKGQucmVzaXplVHJhY2tlclJlZj1oLmZpcnN0KSx4aShoPUVpKCkpJiYoZC5jb2x1bW5IYW5kbGVSZWY9aC5maXJzdCl9fSxob3N0VmFy''@;'; put 'put ''czoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmeHIoImRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3IiLCEwKX0sZGVjbHM6Nix2YXJzOjQsY29uc3RzOltbImNvbHVtbkhhbmRsZSIsIiJdLFsicmVzaXplVHJhY2tlciIsIiJdLFsidHlwZSIsImJ1dHRvbiIsImNka0RyYWciLCIi''@;'; put 'put ''LCJjZGtEcmFnTG9ja0F4aXMiLCJ4IiwxLCJkYXRhZ3JpZC1jb2x1bW4taGFuZGxlIiwzLCJjZGtEcmFnU3RhcnRlZCIsImNka0RyYWdNb3ZlZCIsImNka0RyYWdFbmRlZCJdLFsxLCJjbHItc3Itb25seSJdLFsxLCJkYXRhZ3JpZC1jb2x1bW4tcmVzaXplLXRyYWNrZXIiXV0sdGVtcGxhdGU6''@;'; put 'put ''ZnVuY3Rpb24oYSxkKXtpZigxJmEpe2NvbnN0IGg9T24oKTtkZSgwLCJidXR0b24iLDIsMCksRnQoImNka0RyYWdTdGFydGVkIixmdW5jdGlvbigpe3JldHVybiB3dChoKSxDdChkLnNob3dUcmFja2VyKCkpfSkoImNka0RyYWdNb3ZlZCIsZnVuY3Rpb24odil7cmV0dXJuIHd0KGgpLEN0KGQu''@;'; put 'put ''bW92ZVRyYWNrZXIodi5kaXN0YW5jZS54KSl9KSgiY2RrRHJhZ0VuZGVkIixmdW5jdGlvbih2KXtyZXR1cm4gd3QoaCksZC5oaWRlVHJhY2tlcigpLEN0KHYuc291cmNlLl9kcmFnUmVmLnJlc2V0KCkpfSksaGUoKSxkZSgyLCJzcGFuIiwzKSxMZSgzKSxoZSgpLEd0KDQsImRpdiIsNCwxKX0y''@;'; put 'put ''JmEmJihkcigiYXJpYS1sYWJlbCIsZC5jb21tb25TdHJpbmcua2V5cy5jb2x1bW5TZXBhcmF0b3JBcmlhTGFiZWwpKCJhcmlhLWRlc2NyaWJlZGJ5IixkLmRlc2NyaXB0aW9uSWQpLGZlKDIpLGRyKCJpZCIsZC5kZXNjcmlwdGlvbklkKSxmZSgpLFJyKCIgIixkLmNvbW1vblN0cmluZy5rZXlz''@;'; put 'put ''LmNvbHVtblNlcGFyYXRvckRlc2NyaXB0aW9uLCIgIikpfSxkZXBlbmRlbmNpZXM6W1FVZV0sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksQTc9KCgpPT57Y2xhc3MgYyBleHRlbmRzIEtMe2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNKXtzdXBlcihoKSx0aGlzLmVsPWEsdGhpcy5fc29ydD1kLHRo''@;'; put 'put ''aXMudmNyPWYsdGhpcy5kZXRhaWxTZXJ2aWNlPXYsdGhpcy5jaGFuZ2VEZXRlY3RvclJlZj1NLHRoaXMuc29ydE9yZGVyQ2hhbmdlPW5ldyBxcix0aGlzLmZpbHRlclZhbHVlQ2hhbmdlPW5ldyBxcix0aGlzLmN1c3RvbUZpbHRlcj0hMSx0aGlzLl9jb2xUeXBlPSJzdHJpbmciLHRoaXMuX3Nv''@;'; put 'put ''cnRPcmRlcj1DaC5VTlNPUlRFRCx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5fc2hvd1NlcGFyYXRvcj0hMCx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmxpc3RlbkZvclNvcnRpbmdDaGFuZ2VzKCkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMubGlzdGVuRm9yRGV0YWls''@;'; put 'put ''UGFuZUNoYW5nZXMoKSl9Z2V0IGlzSGlkZGVuKCl7cmV0dXJuIHRoaXMuZWwubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoR3gpfWdldCBzaG93U2VwYXJhdG9yKCl7cmV0dXJuIHRoaXMuX3Nob3dTZXBhcmF0b3J9c2V0IHNob3dTZXBhcmF0b3IoYSl7dGhpcy5fc2hvd1NlcGFy''@;'; put 'put ''YXRvcj1hLHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCl9Z2V0IGNvbFR5cGUoKXtyZXR1cm4gdGhpcy5fY29sVHlwZX1zZXQgY29sVHlwZShhKXt0aGlzLl9jb2xUeXBlPWF9Z2V0IGZpZWxkKCl7cmV0dXJuIHRoaXMuX2ZpZWxkfXNldCBmaWVsZChhKXsic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIGEmJih0aGlzLl9maWVsZD1hLHRoaXMuX3NvcnRCeXx8KHRoaXMuX3NvcnRCeT1uZXcgUUwoYSkpKX1nZXQgc29ydEJ5KCl7cmV0dXJuIHRoaXMuX3NvcnRCeX1zZXQgc29ydEJ5KGEpeyJzdHJpbmciPT10eXBlb2YgYT90aGlzLl9zb3J0Qnk9bmV3IFFMKGEpOmE/dGhpcy5fc29y''@;'; put 'put ''dEJ5PWE6dGhpcy5maWVsZD90aGlzLl9zb3J0Qnk9bmV3IFFMKHRoaXMuZmllbGQpOmRlbGV0ZSB0aGlzLl9zb3J0Qnl9Z2V0IHNvcnRPcmRlcigpe3JldHVybiB0aGlzLl9zb3J0T3JkZXJ9c2V0IHNvcnRPcmRlcihhKXtpZighKHR5cGVvZiBhPiJ1IikmJnRoaXMuX3NvcnRPcmRlciE9PWEp''@;'; put 'put ''c3dpdGNoKGEpe2Nhc2UgQ2guQVNDOnRoaXMuc29ydCghMSk7YnJlYWs7Y2FzZSBDaC5ERVNDOnRoaXMuc29ydCghMCk7YnJlYWs7ZGVmYXVsdDp0aGlzLl9zb3J0LmNsZWFyKCl9fXNldCB1cGRhdGVGaWx0ZXJWYWx1ZShhKXt0aGlzLmZpbHRlcj90aGlzLmZpbHRlciBpbnN0YW5jZW9mIE03''@;'; put 'put ''PygoIWF8fCJzdHJpbmciIT10eXBlb2YgYSkmJihhPSIiKSxhIT09dGhpcy5maWx0ZXIudmFsdWUmJih0aGlzLmZpbHRlci52YWx1ZT1hKSk6dGhpcy5maWx0ZXIgaW5zdGFuY2VvZiBTNyYmKCghYXx8IShhIGluc3RhbmNlb2YgQXJyYXkpKSYmKGE9W251bGwsbnVsbF0pLDI9PT1hLmxlbmd0''@;'; put 'put ''aCYmKGFbMF0hPT10aGlzLmZpbHRlci52YWx1ZVswXXx8YVsxXSE9PXRoaXMuZmlsdGVyLnZhbHVlWzFdKSYmKHRoaXMuZmlsdGVyLnZhbHVlPWEpKTp0aGlzLmluaXRGaWx0ZXJWYWx1ZT1hfXNldCBwcm9qZWN0ZWRGaWx0ZXIoYSl7YSYmKHRoaXMuZGVsZXRlRmlsdGVyKCksdGhpcy5jdXN0''@;'; put 'put ''b21GaWx0ZXI9ITApfWdldCBzb3J0YWJsZSgpe3JldHVybiEhdGhpcy5fc29ydEJ5fWdldCBhcmlhU29ydCgpe3N3aXRjaCh0aGlzLl9zb3J0T3JkZXIpe2Nhc2UgQ2guQVNDOnJldHVybiJhc2NlbmRpbmciO2Nhc2UgQ2guREVTQzpyZXR1cm4iZGVzY2VuZGluZyI7ZGVmYXVsdDpyZXR1cm4i''@;'; put 'put ''bm9uZSJ9fWdldCBzb3J0RGlyZWN0aW9uKCl7cmV0dXJuIHRoaXMuX3NvcnREaXJlY3Rpb259Z2V0IGZpbHRlclZhbHVlKCl7cmV0dXJuIHRoaXMuZmlsdGVyIGluc3RhbmNlb2YgTTd8fHRoaXMuZmlsdGVyIGluc3RhbmNlb2YgUzc/dGhpcy5maWx0ZXIudmFsdWU6bnVsbH1zZXQgZmlsdGVy''@;'; put 'put ''VmFsdWUoYSl7KHRoaXMuZmlsdGVyIGluc3RhbmNlb2YgTTd8fHRoaXMuZmlsdGVyIGluc3RhbmNlb2YgUzcpJiYodGhpcy51cGRhdGVGaWx0ZXJWYWx1ZT1hLHRoaXMuZmlsdGVyVmFsdWVDaGFuZ2UuZW1pdCh0aGlzLmZpbHRlci52YWx1ZSkpfWdldCBfdmlldygpe3JldHVybiB0aGlzLndy''@;'; put 'put ''YXBwZWRJbmplY3Rvci5nZXQodEcsdGhpcy52Y3IpLmNvbHVtblZpZXd9bmdPbkluaXQoKXt0aGlzLndyYXBwZWRJbmplY3Rvcj1uZXcgVkwodEcsdGhpcy52Y3IpfW5nT25DaGFuZ2VzKGEpe2EuY29sVHlwZSYmYS5jb2xUeXBlLmN1cnJlbnRWYWx1ZSYmYS5jb2xUeXBlLmN1cnJlbnRWYWx1''@;'; put 'put ''ZSE9PWEuY29sVHlwZS5wcmV2aW91c1ZhbHVlJiYhdGhpcy5jdXN0b21GaWx0ZXImJiF0aGlzLmZpbHRlciYmdGhpcy5jb2xUeXBlJiZ0aGlzLmZpZWxkJiZ0aGlzLnNldHVwRGVmYXVsdEZpbHRlcih0aGlzLmZpZWxkLHRoaXMuY29sVHlwZSksYS5maWVsZCYmYS5maWVsZC5jdXJyZW50VmFs''@;'; put 'put ''dWUmJmEuZmllbGQuY3VycmVudFZhbHVlIT09YS5maWVsZC5wcmV2aW91c1ZhbHVlJiYhdGhpcy5jdXN0b21GaWx0ZXImJnRoaXMuY29sVHlwZSYmdGhpcy5zZXR1cERlZmF1bHRGaWx0ZXIodGhpcy5maWVsZCx0aGlzLmNvbFR5cGUpfW5nT25EZXN0cm95KCl7c3VwZXIubmdPbkRlc3Ryb3ko''@;'; put 'put ''KSx0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXNvcnQoYSl7dGhpcy5zb3J0YWJsZSYmKHRoaXMuX3NvcnQudG9nZ2xlKHRoaXMuX3NvcnRCeSxhKSx0aGlzLl9zb3J0T3JkZXI9dGhpcy5fc29ydC5yZXZlcnNlP0NoLkRFU0M6Q2guQVNDLHRoaXMuX3Nv''@;'; put 'put ''cnREaXJlY3Rpb249dGhpcy5fc29ydE9yZGVyPT09Q2guREVTQz8iZG93biI6InVwIix0aGlzLnNvcnRPcmRlckNoYW5nZS5lbWl0KHRoaXMuX3NvcnRPcmRlcikpfWxpc3RlbkZvckRldGFpbFBhbmVDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuZGV0YWlsU2VydmljZS5zdGF0ZUNoYW5nZS5zdWJz''@;'; put 'put ''Y3JpYmUoYT0+e3RoaXMuc2hvd1NlcGFyYXRvciE9PSFhJiYodGhpcy5zaG93U2VwYXJhdG9yPSFhKX0pfWxpc3RlbkZvclNvcnRpbmdDaGFuZ2VzKCl7cmV0dXJuIHRoaXMuX3NvcnQuY2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKSx0''@;'; put 'put ''aGlzLnNvcnRPcmRlciE9PUNoLlVOU09SVEVEJiZhLmNvbXBhcmF0b3IhPT10aGlzLl9zb3J0QnkmJih0aGlzLl9zb3J0T3JkZXI9Q2guVU5TT1JURUQsdGhpcy5zb3J0T3JkZXJDaGFuZ2UuZW1pdCh0aGlzLl9zb3J0T3JkZXIpLHRoaXMuX3NvcnREaXJlY3Rpb249bnVsbCl9KX1zZXR1cERl''@;'; put 'put ''ZmF1bHRGaWx0ZXIoYSxkKXsibnVtYmVyIj09PWQ/dGhpcy5zZXRGaWx0ZXIobmV3IFM3KG5ldyBYTChhKSkpOiJzdHJpbmciPT09ZCYmdGhpcy5zZXRGaWx0ZXIobmV3IE03KG5ldyBKTChhKSkpLHRoaXMuZmlsdGVyJiZ0aGlzLmluaXRGaWx0ZXJWYWx1ZSYmKHRoaXMudXBkYXRlRmlsdGVy''@;'; put 'put ''VmFsdWU9dGhpcy5pbml0RmlsdGVyVmFsdWUsZGVsZXRlIHRoaXMuaW5pdEZpbHRlclZhbHVlKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoZW8pLEdlKGVPKSxHZShzZyksR2UoRGEpLEdlKCRmKSxHZSh4cykpfSxjLlx1MDI3NWNtcD1Ocih7''@;'; put 'put ''dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctY29sdW1uIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmxhKGgsR0wsNSksMiZhKXtsZXQgZjt4aShmPUVpKCkpJiYoZC5wcm9qZWN0ZWRGaWx0ZXI9Zi5maXJzdCl9fSxob3N0QXR0cnM6WyJyb2xlIiwiY29sdW1u''@;'; put 'put ''aGVhZGVyIl0saG9zdFZhcnM6Myxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJihkcigiYXJpYS1zb3J0IixkLmFyaWFTb3J0KSx4cigiZGF0YWdyaWQtY29sdW1uIiwhMCkpfSxpbnB1dHM6e2ZpbHRlclN0cmluZ1BsYWNlaG9sZGVyOltabi5Ob25lLCJjbHJGaWx0ZXJTdHJpbmdQ''@;'; put 'put ''bGFjZWhvbGRlciIsImZpbHRlclN0cmluZ1BsYWNlaG9sZGVyIl0sZmlsdGVyTnVtYmVyTWF4UGxhY2Vob2xkZXI6W1puLk5vbmUsImNsckZpbHRlck51bWJlck1heFBsYWNlaG9sZGVyIiwiZmlsdGVyTnVtYmVyTWF4UGxhY2Vob2xkZXIiXSxmaWx0ZXJOdW1iZXJNaW5QbGFjZWhvbGRlcjpb''@;'; put 'put ''Wm4uTm9uZSwiY2xyRmlsdGVyTnVtYmVyTWluUGxhY2Vob2xkZXIiLCJmaWx0ZXJOdW1iZXJNaW5QbGFjZWhvbGRlciJdLGNvbFR5cGU6W1puLk5vbmUsImNsckRnQ29sVHlwZSIsImNvbFR5cGUiXSxmaWVsZDpbWm4uTm9uZSwiY2xyRGdGaWVsZCIsImZpZWxkIl0sc29ydEJ5Oltabi5Ob25l''@;'; put 'put ''LCJjbHJEZ1NvcnRCeSIsInNvcnRCeSJdLHNvcnRPcmRlcjpbWm4uTm9uZSwiY2xyRGdTb3J0T3JkZXIiLCJzb3J0T3JkZXIiXSx1cGRhdGVGaWx0ZXJWYWx1ZTpbWm4uTm9uZSwiY2xyRmlsdGVyVmFsdWUiLCJ1cGRhdGVGaWx0ZXJWYWx1ZSJdfSxvdXRwdXRzOntzb3J0T3JkZXJDaGFuZ2U6''@;'; put 'put ''ImNsckRnU29ydE9yZGVyQ2hhbmdlIixmaWx0ZXJWYWx1ZUNoYW5nZToiY2xyRmlsdGVyVmFsdWVDaGFuZ2UifSxmZWF0dXJlczpbdmQoW3JnXSksQ28seWxdLG5nQ29udGVudFNlbGVjdG9yczpDVmUsZGVjbHM6OSx2YXJzOjUsY29uc3RzOltbImNvbHVtblRpdGxlIiwiIl0sWzEsImRhdGFn''@;'; put 'put ''cmlkLWNvbHVtbi1mbGV4Il0sWyJjbGFzcyIsImRhdGFncmlkLWNvbHVtbi10aXRsZSIsInR5cGUiLCJidXR0b24iLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsckZpbHRlclBsYWNlaG9sZGVyIiwiY2xyRGdTdHJpbmdGaWx0ZXIiLCJjbHJGaWx0ZXJWYWx1ZSIsImNsckZpbHRlclZhbHVl''@;'; put 'put ''Q2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsckZpbHRlck1heFBsYWNlaG9sZGVyIiwiY2xyRmlsdGVyTWluUGxhY2Vob2xkZXIiLCJjbHJEZ051bWVyaWNGaWx0ZXIiLCJjbHJGaWx0ZXJWYWx1ZSIsImNsckZpbHRlclZhbHVlQ2hhbmdlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRhdGFncmlkLWNv''@;'; put 'put ''bHVtbi10aXRsZSIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJkYXRhZ3JpZC1jb2x1bW4tdGl0bGUiLDMsImNsaWNrIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiXSxbInNoYXBlIiwiYXJyb3ciLCJhcmlhLWhpZGRlbiIsInRydWUiLCJjbGFzcyIsInNvcnQtaWNv''@;'; put 'put ''biIsNCwibmdJZiJdLFsic2hhcGUiLCJhcnJvdyIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwic29ydC1pY29uIl0sWzMsImNsckZpbHRlclZhbHVlQ2hhbmdlIiwiY2xyRmlsdGVyUGxhY2Vob2xkZXIiLCJjbHJEZ1N0cmluZ0ZpbHRlciIsImNsckZpbHRlclZhbHVlIl0sWzMsImNsckZpbHRl''@;'; put 'put ''clZhbHVlQ2hhbmdlIiwiY2xyRmlsdGVyTWF4UGxhY2Vob2xkZXIiLCJjbHJGaWx0ZXJNaW5QbGFjZWhvbGRlciIsImNsckRnTnVtZXJpY0ZpbHRlciIsImNsckZpbHRlclZhbHVlIl0sWzEsImRhdGFncmlkLWNvbHVtbi10aXRsZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGxv''@;'; put 'put ''KHdWZSksZGUoMCwiZGl2IiwxKSxndCgxLHhWZSwzLDIsImJ1dHRvbiIsMiksV3IoMiksZ3QoMyxFVmUsMSwzLCJjbHItZGctc3RyaW5nLWZpbHRlciIsMykoNCxUVmUsMSw0LCJjbHItZGctbnVtZXJpYy1maWx0ZXIiLDQpKDUsQVZlLDEsMCwibmctdGVtcGxhdGUiLG51bGwsMCxfdSkoNyxE''@;'; put 'put ''VmUsMiwxLCJzcGFuIiw1KSg4LElWZSwxLDAsImNsci1kZy1jb2x1bW4tc2VwYXJhdG9yIiw2KSxoZSgpKSwyJmEmJihmZSgpLHhlKCJuZ0lmIixkLnNvcnRhYmxlKSxmZSgyKSx4ZSgibmdJZiIsZC5maWVsZCYmIWQuY3VzdG9tRmlsdGVyJiYic3RyaW5nIj09ZC5jb2xUeXBlKSxmZSgpLHhl''@;'; put 'put ''KCJuZ0lmIixkLmZpZWxkJiYhZC5jdXN0b21GaWx0ZXImJiJudW1iZXIiPT1kLmNvbFR5cGUpLGZlKDMpLHhlKCJuZ0lmIiwhZC5zb3J0YWJsZSksZmUoKSx4ZSgibmdJZiIsZC5zaG93U2VwYXJhdG9yKSl9LGRlcGVuZGVuY2llczpbeW8sTjEsY3MsbWRlLGZkZSxlR10sZW5jYXBzdWxhdGlv''@;'; put 'put ''bjoyLGNoYW5nZURldGVjdGlvbjowfSksY30pKCksbGc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5fZmlsdGVycz1hLHRoaXMuX3NvcnQ9ZCx0aGlzLl9wYWdlPWgsdGhpcy5sb2FkaW5nPSExLHRoaXMuX3NtYXJ0PSExLHRoaXMuX2Rpc3BsYXllZD1bXSx0aGlzLl9j''@;'; put 'put ''aGFuZ2U9bmV3IFduLHRoaXMuX2FsbENoYW5nZXM9bmV3IFduLHRoaXMudHJhY2tCeT1mPT5mfWdldCBzbWFydCgpe3JldHVybiB0aGlzLl9zbWFydH1nZXQgYWxsKCl7cmV0dXJuIHRoaXMuX2FsbH1zZXQgYWxsKGEpe3RoaXMuX2FsbD1hLHRoaXMuZW1pdEFsbENoYW5nZXMoYSksdGhpcy5z''@;'; put 'put ''bWFydD90aGlzLl9maWx0ZXJJdGVtcygpOih0aGlzLl9kaXNwbGF5ZWQ9YSx0aGlzLmVtaXRDaGFuZ2UoKSl9Z2V0IGRpc3BsYXllZCgpe3JldHVybiB0aGlzLl9kaXNwbGF5ZWR9Z2V0IGNoYW5nZSgpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGFsbENoYW5nZXMo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fYWxsQ2hhbmdlcy5hc09ic2VydmFibGUoKX1nZXQgdW5pbml0aWFsaXplZCgpe3JldHVybiF0aGlzLl9hbGx9ZGVzdHJveSgpe3RoaXMuX2ZpbHRlcnNTdWImJnRoaXMuX2ZpbHRlcnNTdWIudW5zdWJzY3JpYmUoKSx0aGlzLl9zb3J0U3ViJiZ0aGlzLl9zb3J0U3Vi''@;'; put 'put ''LnVuc3Vic2NyaWJlKCksdGhpcy5fcGFnZVN1YiYmdGhpcy5fcGFnZVN1Yi51bnN1YnNjcmliZSgpfXNtYXJ0ZW5VcCgpe3RoaXMuX3NtYXJ0PSEwLHRoaXMuX2ZpbHRlcnNTdWI9dGhpcy5fZmlsdGVycy5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT50aGlzLl9maWx0ZXJJdGVtcygpKSx0aGlzLl9z''@;'; put 'put ''b3J0U3ViPXRoaXMuX3NvcnQuY2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMuX3NvcnQuY29tcGFyYXRvcj90aGlzLl9zb3J0SXRlbXMoKTp0aGlzLl9maWx0ZXJJdGVtcygpfSksdGhpcy5fcGFnZVN1Yj10aGlzLl9wYWdlLmNoYW5nZS5zdWJzY3JpYmUoKCk9PnRoaXMuX2NoYW5nZVBhZ2Uo''@;'; put 'put ''KSl9cmVmcmVzaCgpe3RoaXMuc21hcnQmJnRoaXMuX2ZpbHRlckl0ZW1zKCl9ZW1pdENoYW5nZSgpe3RoaXMuX2NoYW5nZS5uZXh0KHRoaXMuZGlzcGxheWVkKX1lbWl0QWxsQ2hhbmdlcyhhKXt0aGlzLl9hbGxDaGFuZ2VzLm5leHQoYSl9X2ZpbHRlckl0ZW1zKCl7dGhpcy51bmluaXRpYWxp''@;'; put 'put ''emVkfHwodGhpcy5fZmlsdGVyZWQ9dGhpcy5fZmlsdGVycy5oYXNBY3RpdmVGaWx0ZXJzKCk/dGhpcy5fYWxsLmZpbHRlcihhPT50aGlzLl9maWx0ZXJzLmFjY2VwdHMoYSkpOnRoaXMuX2FsbC5zbGljZSgpLHRoaXMuX3BhZ2UudG90YWxJdGVtcz10aGlzLl9maWx0ZXJlZC5sZW5ndGgsdGhp''@;'; put 'put ''cy5fc29ydEl0ZW1zKCkpfV9zb3J0SXRlbXMoKXt0aGlzLnVuaW5pdGlhbGl6ZWR8fCh0aGlzLl9zb3J0LmNvbXBhcmF0b3ImJnRoaXMuX2ZpbHRlcmVkLnNvcnQoKGEsZCk9PnRoaXMuX3NvcnQuY29tcGFyZShhLGQpKSx0aGlzLl9jaGFuZ2VQYWdlKCkpfV9jaGFuZ2VQYWdlKCl7dGhpcy51''@;'; put 'put ''bmluaXRpYWxpemVkfHx0aGlzLl9wYWdlLmFjdGl2YXRlZCYmMD09PXRoaXMuX3BhZ2Uuc2l6ZXx8KHRoaXMuX2Rpc3BsYXllZD10aGlzLl9wYWdlLnNpemU+MD90aGlzLl9maWx0ZXJlZC5zbGljZSh0aGlzLl9wYWdlLmZpcnN0SXRlbSx0aGlzLl9wYWdlLmxhc3RJdGVtKzEpOnRoaXMuX2Zp''@;'; put 'put ''bHRlcmVkLHRoaXMuZW1pdENoYW5nZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoTXIoc2cpLE1yKGVPKSxNcih3bSkpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLCR5PSgoKT0+e2NsYXNz''@;'; put 'put ''IGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy50ZW1wbGF0ZT1hLHRoaXMuZGlmZmVycz1kLHRoaXMuaXRlbXM9aCx0aGlzLmRpZmZlcj1udWxsLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSxoLnNtYXJ0ZW5VcCgpLHRoaXMuaXRlcmFibGVQcm94eT1uZXcgc3MoZixhLGQpLHRoaXMuc3Vic2Ny''@;'; put 'put ''aXB0aW9ucy5wdXNoKGguY2hhbmdlLnN1YnNjcmliZSh2PT57dGhpcy5pdGVyYWJsZVByb3h5Lm5nRm9yT2Y9dix0aGlzLml0ZXJhYmxlUHJveHkubmdEb0NoZWNrKCl9KSl9c2V0IHJhd0l0ZW1zKGEpe3RoaXMuX3Jhd0l0ZW1zPWF8fFtdfXNldCB0cmFja0J5KGEpe3RoaXMuaXRlcmFibGVQ''@;'; put 'put ''cm94eS5uZ0ZvclRyYWNrQnk9YX1zdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZChhLGQpe3JldHVybiEwfW5nRG9DaGVjaygpe3RoaXMuZGlmZmVyfHwodGhpcy5kaWZmZXI9dGhpcy5kaWZmZXJzLmZpbmQodGhpcy5fcmF3SXRlbXMpLmNyZWF0ZSh0aGlzLml0ZXJhYmxlUHJveHkubmdG''@;'; put 'put ''b3JUcmFja0J5KSksdGhpcy5kaWZmZXImJnRoaXMuZGlmZmVyLmRpZmYodGhpcy5fcmF3SXRlbXMpJiYodGhpcy5pdGVtcy5hbGw9dGhpcy5fcmF3SXRlbXMpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX19cmV0dXJuIGMuXHUw''@;'; put 'put ''Mjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2Uod2wpLEdlKFg1KSxHZShsZyksR2UoRGEpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyRGdJdGVtcyIsIiIsImNsckRnSXRlbXNPZiIsIiJdXSxpbnB1dHM6e3Jhd0l0ZW1zOltabi5Ob25l''@;'; put 'put ''LCJjbHJEZ0l0ZW1zT2YiLCJyYXdJdGVtcyJdLHRyYWNrQnk6W1puLk5vbmUsImNsckRnSXRlbXNUcmFja0J5IiwidHJhY2tCeSJdfX0pLGN9KSgpLGlHPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5pdGVtcz1hfWdldCBlbXB0eURhdGFncmlkKCl7cmV0dXJuISh0aGlzLml0''@;'; put 'put ''ZW1zLmxvYWRpbmd8fHRoaXMuaXRlbXMuZGlzcGxheWVkJiYwIT09dGhpcy5pdGVtcy5kaXNwbGF5ZWQubGVuZ3RoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UobGcpKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xy''@;'; put 'put ''LWRnLXBsYWNlaG9sZGVyIl1dLGhvc3RWYXJzOjIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZ4cigiZGF0YWdyaWQtcGxhY2Vob2xkZXItY29udGFpbmVyIiwhMCl9LG5nQ29udGVudFNlbGVjdG9yczp5YSxkZWNsczo0LHZhcnM6NCxjb25zdHM6W1sxLCJkYXRhZ3JpZC1wbGFj''@;'; put 'put ''ZWhvbGRlciJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1wbGFjZWhvbGRlci1pbWFnZSIsNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1wbGFjZWhvbGRlci1jb250ZW50Il0sWzQsIm5nSWYiXSxbMSwiZGF0YWdyaWQtcGxhY2Vob2xkZXItaW1hZ2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEm''@;'; put 'put ''JihsbygpLGRlKDAsImRpdiIsMCksZ3QoMSxSVmUsMSwwLCJkaXYiLDEpLGRlKDIsInNwYW4iLDIpLGd0KDMsTFZlLDEsMCwibmctY29udGVudCIsMyksaGUoKSgpKSwyJmEmJih4cigiZGF0YWdyaWQtZW1wdHkiLGQuZW1wdHlEYXRhZ3JpZCksZmUoKSx4ZSgibmdJZiIsZC5lbXB0eURhdGFn''@;'; put 'put ''cmlkKSxmZSgyKSx4ZSgibmdJZiIsZC5lbXB0eURhdGFncmlkKSl9LGRlcGVuZGVuY2llczpbeW9dLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLG9HPSgoKT0+e2NsYXNzIGN7bmdBZnRlclZpZXdJbml0KCl7dGhpcy5jZWxsVmlldz10aGlzLnRlbXBsYXRlUmVmLmNyZWF0ZUVtYmVkZGVkVmll''@;'; put 'put ''dyhudWxsKX1uZ09uRGVzdHJveSgpe3RoaXMuY2VsbFZpZXcuZGVzdHJveSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siZGctd3JhcHBlZC1jZWxsIl1dLHZpZXdRdWVyeTpmdW5j''@;'; put 'put ''dGlvbihhLGQpe2lmKDEmYSYmbmEoT1ZlLDUpLDImYSl7bGV0IGg7eGkoaD1FaSgpKSYmKGQudGVtcGxhdGVSZWY9aC5maXJzdCl9fSxuZ0NvbnRlbnRTZWxlY3RvcnM6eWEsZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbImNlbGxQb3J0YWwiLCIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsx''@;'; put 'put ''JmEmJihsbygpLGd0KDAsUFZlLDEsMCwibmctdGVtcGxhdGUiLG51bGwsMCxfdSkpfSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxicD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMudmNyPWF9Z2V0IF92aWV3KCl7cmV0dXJuIHRoaXMud3JhcHBlZEluamVjdG9yLmdldChvRyx0''@;'; put 'put ''aGlzLnZjcikuY2VsbFZpZXd9bmdPbkluaXQoKXt0aGlzLndyYXBwZWRJbmplY3Rvcj1uZXcgVkwob0csdGhpcy52Y3IpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShEYSkpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJj''@;'; put 'put ''bHItZGctY2VsbCJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZsYShoLE5MLDQpLDImYSl7bGV0IGY7eGkoZj1FaSgpKSYmKGQuc2lnbnBvc3Q9Zil9fSxob3N0QXR0cnM6WyJyb2xlIiwiZ3JpZGNlbGwiXSxob3N0VmFyczo0LGhvc3RCaW5kaW5nczpmdW5jdGlv''@;'; put 'put ''bihhLGQpezImYSYmeHIoImRhdGFncmlkLWNlbGwiLCEwKSgiZGF0YWdyaWQtc2lnbnBvc3QtdHJpZ2dlciIsZC5zaWducG9zdC5sZW5ndGg+MCl9LG5nQ29udGVudFNlbGVjdG9yczp5YSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGxvKCksV3IoMCkpfSxl''@;'; put 'put ''bmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSx2ZGU9MCwkeD0oKCk9PntjbGFzcyBjIGV4dGVuZHMgWjF7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuZXhwYW5kYWJsZUlkPSIiLHRoaXMuX3JlcGxhY2U9bmV3IFFyKCExKSx0aGlzLl9hbmltYXRlPW5ldyBXbix2ZGUrKyx0aGlzLmV4cGFuZGFi''@;'; put 'put ''bGVJZD0iY2xyLWRnLWV4cGFuZGFibGUtcm93LSIrdmRlfWdldCBleHBhbmRlZCgpe3JldHVybiB0aGlzLl9leHBhbmRlZH1zZXQgZXhwYW5kZWQoYSl7KGE9ISFhKSE9PXRoaXMuX2V4cGFuZGVkJiYodGhpcy5fZXhwYW5kZWQ9YSx0aGlzLl9hbmltYXRlLm5leHQoKSx0aGlzLl9leHBhbmRD''@;'; put 'put ''aGFuZ2UubmV4dChhKSl9Z2V0IHJlcGxhY2UoKXtyZXR1cm4gdGhpcy5fcmVwbGFjZS5hc09ic2VydmFibGUoKX1nZXQgYW5pbWF0ZSgpe3JldHVybiB0aGlzLl9hbmltYXRlLmFzT2JzZXJ2YWJsZSgpfWxvYWRpbmdTdGF0ZUNoYW5nZShhKXtzdXBlci5sb2FkaW5nU3RhdGVDaGFuZ2UoYSks''@;'; put 'put ''YSE9PVUxLkxPQURJTkcmJnRoaXMuX2FuaW1hdGUubmV4dCgpfXNldFJlcGxhY2UoYSl7dGhpcy5fcmVwbGFjZS5uZXh0KGEpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVm''@;'; put 'put ''YWN9KSxjfSkoKTt2YXIgS3k9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5ESVNQTEFZPTBdPSJESVNQTEFZIixjW2MuQ0FMQ1VMQVRFPTFdPSJDQUxDVUxBVEUiLGN9KEt5fHx7fSksaGw9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5Ob25lPTBdPSJOb25lIixjW2MuU2luZ2xlPTFdPSJTaW5nbGUi''@;'; put 'put ''LGNbYy5NdWx0aT0yXT0iTXVsdGkiLGN9KGhsfHx7fSk7bGV0IGFHPSgoKT0+e2NsYXNzIGN7bmdBZnRlclZpZXdJbml0KCl7dGhpcy5yb3dWaWV3PXRoaXMudGVtcGxhdGVSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KG51bGwpfW5nT25EZXN0cm95KCl7dGhpcy5yb3dWaWV3LmRlc3Ryb3koKX19''@;'; put 'put ''cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImRnLXdyYXBwZWQtcm93Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmbmEoRlZlLDUpLDImYSl7bGV0IGg7eGkoaD1FaSgp''@;'; put 'put ''KSYmKGQudGVtcGxhdGVSZWY9aC5maXJzdCl9fSxuZ0NvbnRlbnRTZWxlY3RvcnM6eWEsZGVjbHM6Mix2YXJzOjAsY29uc3RzOltbInJvd1BvcnRhbCIsIiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGxvKCksZ3QoMCxIVmUsMSwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwwLF91KSl9''@;'; put 'put ''LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLG9aZT0wLHF5PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLl9pdGVtcz1hLHRoaXMucHJlc2VydmVTZWxlY3Rpb249ITEsdGhpcy5zaGlmdFByZXNzZWQ9ITEsdGhpcy5yb3dTZWxlY3Rpb25Nb2RlPSExLHRoaXMucHJldlNlbGVj''@;'; put 'put ''dGlvblJlZnM9W10sdGhpcy5sb2NrZWRSZWZzPVtdLHRoaXMudmFsdWVDb2xsZWN0b3I9bmV3IFduLHRoaXMuX3NlbGVjdGlvblR5cGU9aGwuTm9uZSx0aGlzLl9jaGFuZ2U9bmV3IFduLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLmlkPSJjbHItZGctc2VsZWN0aW9uIitvWmUrKyx0aGlz''@;'; put 'put ''LnN1YnNjcmlwdGlvbnMucHVzaChkLmNoYW5nZS5zdWJzY3JpYmUoKCk9PnshdGhpcy5fc2VsZWN0YWJsZXx8dGhpcy5wcmVzZXJ2ZVNlbGVjdGlvbnx8dGhpcy5jbGVhclNlbGVjdGlvbigpfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGEuYWxsQ2hhbmdlcy5zdWJzY3JpYmUoaD0+e2Nv''@;'; put 'put ''bnN0IGY9W107c3dpdGNoKHRoaXMuc2VsZWN0aW9uVHlwZSl7Y2FzZSBobC5Ob25lOmJyZWFrO2Nhc2UgaGwuU2luZ2xlOntsZXQgdixNPSExO3RoaXMuY3VycmVudFNpbmdsZSYmIXRoaXMucHJldlNpbmdsZVNlbGVjdGlvblJlZiYmKHRoaXMucHJldlNpbmdsZVNlbGVjdGlvblJlZj1hLnRy''@;'; put 'put ''YWNrQnkodGhpcy5jdXJyZW50U2luZ2xlKSksaC5mb3JFYWNoKEQ9Pntjb25zdCBaPWEudHJhY2tCeShEKTt0aGlzLnByZXZTaW5nbGVTZWxlY3Rpb25SZWY9PT1aJiYodj1ELE09ITApLHRoaXMubG9ja2VkUmVmcy5pbmRleE9mKFopPi0xJiZmLnB1c2goWil9KSxhLnNtYXJ0JiYhdiYmKE09''@;'; put 'put ''ITApLHNldFRpbWVvdXQoKCk9PntNJiYodGhpcy5jdXJyZW50U2luZ2xlPXYpfSwwKTticmVha31jYXNlIGhsLk11bHRpOntsZXQgdj10aGlzLmN1cnJlbnQuc2xpY2UoKSxNPSExO3RoaXMuY3VycmVudC5sZW5ndGg+MCYmdGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5sZW5ndGghPT10aGlzLmN1''@;'; put 'put ''cnJlbnQubGVuZ3RoJiYodGhpcy5wcmV2U2VsZWN0aW9uUmVmcz1bXSx0aGlzLmN1cnJlbnQuZm9yRWFjaChEPT57dGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5wdXNoKGEudHJhY2tCeShEKSl9KSksaC5mb3JFYWNoKEQ9Pntjb25zdCBaPWEudHJhY2tCeShEKTt0aGlzLmxvY2tlZFJlZnMuaW5k''@;'; put 'put ''ZXhPZihaKT4tMSYmZi5wdXNoKFopfSksdi5sZW5ndGg+MCYmKGguZm9yRWFjaChEPT57Y29uc3QgWj1hLnRyYWNrQnkoRCksbmU9dGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5pbmRleE9mKFopO25lPi0xJiYodltuZV09RCxNPSEwKX0pLGEuc21hcnQmJih2PXYuZmlsdGVyKEQ9PmguaW5kZXhP''@;'; put 'put ''ZihEKT4tMSksdGhpcy5jdXJyZW50Lmxlbmd0aCE9PXYubGVuZ3RoJiYoTT0hMCkpLHNldFRpbWVvdXQoKCk9PntNJiYodGhpcy5jdXJyZW50PXYpfSwwKSk7YnJlYWt9fXRoaXMubG9ja2VkUmVmcz1mfSkpLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudmFsdWVDb2xsZWN0b3IucGlw''@;'; put 'put ''ZSh1bSgwKSkuc3Vic2NyaWJlKCgpPT50aGlzLmVtaXRDaGFuZ2UoKSkpfWdldCBzZWxlY3Rpb25UeXBlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvblR5cGV9c2V0IHNlbGVjdGlvblR5cGUoYSl7YSE9PXRoaXMuc2VsZWN0aW9uVHlwZSYmKHRoaXMuX3NlbGVjdGlvblR5cGU9YSxhPT09aGwu''@;'; put 'put ''Tm9uZT9kZWxldGUgdGhpcy5jdXJyZW50OnRoaXMudXBkYXRlQ3VycmVudChbXSwhMSkpfWdldCBjdXJyZW50KCl7cmV0dXJuIHRoaXMuX2N1cnJlbnR9c2V0IGN1cnJlbnQoYSl7dGhpcy51cGRhdGVDdXJyZW50KGEsITApfWdldCBjdXJyZW50U2luZ2xlKCl7cmV0dXJuIHRoaXMuX2N1cnJl''@;'; put 'put ''bnRTaW5nbGV9c2V0IGN1cnJlbnRTaW5nbGUoYSl7YSE9PXRoaXMuX2N1cnJlbnRTaW5nbGUmJih0aGlzLl9jdXJyZW50U2luZ2xlPWEsYSYmKHRoaXMucHJldlNpbmdsZVNlbGVjdGlvblJlZj10aGlzLl9pdGVtcy50cmFja0J5KGEpKSx0aGlzLmVtaXRDaGFuZ2UoKSl9Z2V0IGNoYW5nZSgp''@;'; put 'put ''e3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IF9zZWxlY3RhYmxlKCl7cmV0dXJuIHRoaXMuX3NlbGVjdGlvblR5cGU9PT1obC5NdWx0aXx8dGhpcy5fc2VsZWN0aW9uVHlwZT09PWhsLlNpbmdsZX1jbGVhclNlbGVjdGlvbigpe3RoaXMuX2N1cnJlbnQ9W10sdGhpcy5w''@;'; put 'put ''cmV2U2VsZWN0aW9uUmVmcz1bXSx0aGlzLnByZXZTaW5nbGVTZWxlY3Rpb25SZWY9bnVsbCx0aGlzLl9jdXJyZW50U2luZ2xlPW51bGwsdGhpcy5lbWl0Q2hhbmdlKCl9ZGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9dXBkYXRlQ3VycmVu''@;'; put 'put ''dChhLGQpe3RoaXMuX2N1cnJlbnQ9YSxkJiZ0aGlzLnZhbHVlQ29sbGVjdG9yLm5leHQoYSl9aXNTZWxlY3RlZChhKXtyZXR1cm4gdGhpcy5fc2VsZWN0aW9uVHlwZT09PWhsLlNpbmdsZT90aGlzLmN1cnJlbnRTaW5nbGU9PT1hOnRoaXMuX3NlbGVjdGlvblR5cGU9PT1obC5NdWx0aSYmdGhp''@;'; put 'put ''cy5jdXJyZW50LmluZGV4T2YoYSk+PTB9c2V0U2VsZWN0ZWQoYSxkKXtjb25zdCBoPXRoaXMuY3VycmVudD90aGlzLmN1cnJlbnQuaW5kZXhPZihhKTotMTtzd2l0Y2godGhpcy5fc2VsZWN0aW9uVHlwZSl7Y2FzZSBobC5Ob25lOmNhc2UgaGwuU2luZ2xlOmJyZWFrO2Nhc2UgaGwuTXVsdGk6''@;'; put 'put ''aD49MCYmIWQ/dGhpcy5kZXNlbGVjdEl0ZW0oaCk6aDwwJiZkJiZ0aGlzLnNlbGVjdEl0ZW0oYSl9fWlzQWxsU2VsZWN0ZWQoKXtpZih0aGlzLl9zZWxlY3Rpb25UeXBlIT09aGwuTXVsdGl8fCF0aGlzLl9pdGVtcy5kaXNwbGF5ZWQpcmV0dXJuITE7Y29uc3QgYT10aGlzLl9pdGVtcy5kaXNw''@;'; put 'put ''bGF5ZWQuZmlsdGVyKGY9PiExPT09dGhpcy5pc0xvY2tlZChmKSk7cmV0dXJuIShhLmxlbmd0aDwxKSYmYS5maWx0ZXIoZj0+dGhpcy5jdXJyZW50LmluZGV4T2YoZik+LTEpLmxlbmd0aD09PWEubGVuZ3RofWxvY2tJdGVtKGEsZCl7aWYodGhpcy5jYW5JdEJlTG9ja2VkKCkpe2NvbnN0IGg9''@;'; put 'put ''dGhpcy5faXRlbXMudHJhY2tCeShhKTshMD09PWQ/dGhpcy5sb2NrZWRSZWZzLnB1c2goaCk6dGhpcy5sb2NrZWRSZWZzPXRoaXMubG9ja2VkUmVmcy5maWx0ZXIoZj0+aCE9PWYpfX1pc0xvY2tlZChhKXtpZih0aGlzLmNhbkl0QmVMb2NrZWQoKSl7Y29uc3QgZD10aGlzLl9pdGVtcy50cmFj''@;'; put 'put ''a0J5KGEpO3JldHVybiB0aGlzLmxvY2tlZFJlZnMuaW5kZXhPZihkKT4tMX1yZXR1cm4hMX10b2dnbGVBbGwoKXt0aGlzLl9zZWxlY3Rpb25UeXBlPT09aGwuTm9uZXx8dGhpcy5fc2VsZWN0aW9uVHlwZT09PWhsLlNpbmdsZXx8KHRoaXMuaXNBbGxTZWxlY3RlZCgpP3RoaXMuX2l0ZW1zLmRp''@;'; put 'put ''c3BsYXllZC5mb3JFYWNoKGE9Pntjb25zdCBkPXRoaXMuY3VycmVudC5pbmRleE9mKGEpO2Q+LTEmJiExPT09dGhpcy5pc0xvY2tlZChhKSYmdGhpcy5kZXNlbGVjdEl0ZW0oZCl9KTp0aGlzLl9pdGVtcy5kaXNwbGF5ZWQuZm9yRWFjaChhPT57dGhpcy5jdXJyZW50LmluZGV4T2YoYSk8MCYm''@;'; put 'put ''ITE9PT10aGlzLmlzTG9ja2VkKGEpJiZ0aGlzLnNlbGVjdEl0ZW0oYSl9KSl9c2VsZWN0SXRlbShhKXt0aGlzLmN1cnJlbnQ9dGhpcy5jdXJyZW50LmNvbmNhdChhKSx0aGlzLnByZXZTZWxlY3Rpb25SZWZzLnB1c2godGhpcy5faXRlbXMudHJhY2tCeShhKSl9ZGVzZWxlY3RJdGVtKGEpe2lm''@;'; put 'put ''KHRoaXMuY3VycmVudD10aGlzLmN1cnJlbnQuc2xpY2UoMCxhKS5jb25jYXQodGhpcy5jdXJyZW50LnNsaWNlKGErMSkpLGE8dGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5sZW5ndGgpe2NvbnN0IGQ9dGhpcy5wcmV2U2VsZWN0aW9uUmVmcy5zcGxpY2UoYSwxKTt0aGlzLmxvY2tlZFJlZnM9dGhp''@;'; put 'put ''cy5sb2NrZWRSZWZzLmZpbHRlcihoPT5oIT09ZFswXSl9fWNhbkl0QmVMb2NrZWQoKXtyZXR1cm4gdGhpcy5fc2VsZWN0aW9uVHlwZSE9PWhsLk5vbmV9ZW1pdENoYW5nZSgpe3RoaXMuX3NlbGVjdGlvblR5cGU9PT1obC5TaW5nbGU/dGhpcy5fY2hhbmdlLm5leHQodGhpcy5jdXJyZW50U2lu''@;'; put 'put ''Z2xlKTp0aGlzLl9zZWxlY3Rpb25UeXBlPT09aGwuTXVsdGkmJnRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuY3VycmVudCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKE1yKGxnKSxNcihzZykpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9y''@;'; put 'put ''eTpjLlx1MDI3NWZhY30pLGN9KSgpLHNHPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fdmlldz1uZXcgUXIoS3kuRElTUExBWSksdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKGEuZmlsdGVyUmVuZGVyU3RlcHMoS2YuQ0FMQ1VMQVRFX01P''@;'; put 'put ''REVfT04pLnN1YnNjcmliZSgoKT0+dGhpcy5fdmlldy5uZXh0KEt5LkNBTENVTEFURSkpKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChhLmZpbHRlclJlbmRlclN0ZXBzKEtmLkNBTENVTEFURV9NT0RFX09GRikuc3Vic2NyaWJlKCgpPT50aGlzLl92aWV3Lm5leHQoS3kuRElTUExBWSkpKX1n''@;'; put 'put ''ZXQgdmlldygpe3JldHVybiB0aGlzLl92aWV3LmFzT2JzZXJ2YWJsZSgpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoTXIoVDcpKX0sYy5c''@;'; put 'put ''dTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKSxsRz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuc2VsZWN0aW9uPWF9b25TZWxlY3Rpb25DZWxsQ2xpY2soYSl7dGhpcy5zZWxlY3Rpb24ucm93U2VsZWN0aW9uTW9kZXx8IkxBQkVMIiE9''@;'; put 'put ''PWEudGFyZ2V0LnRhZ05hbWUmJiJJTlBVVCIhPT1hLnRhcmdldC50YWdOYW1lJiZhLnRhcmdldC5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpPy5jbGljaygpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShxeSkpfSxjLlx1MDI3NWRpcj1Fcih7dHlw''@;'; put 'put ''ZTpjLHNlbGVjdG9yczpbWyIiLDgsImRhdGFncmlkLXNlbGVjdCJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsxJmEmJkZ0KCJjbGljayIsZnVuY3Rpb24oZil7cmV0dXJuIGQub25TZWxlY3Rpb25DZWxsQ2xpY2soZil9KX19KSxjfSkoKSx0Tz0wLFNtPSgoKT0+e2NsYXNzIGN7Y29u''@;'; put 'put ''c3RydWN0b3IoYSxkLGgsZix2LE0sRCxaLG5lLGNlLGJlLEVlKXt0aGlzLnNlbGVjdGlvbj1hLHRoaXMucm93QWN0aW9uU2VydmljZT1kLHRoaXMuZ2xvYmFsRXhwYW5kYWJsZT1oLHRoaXMuZXhwYW5kPWYsdGhpcy5kZXRhaWxTZXJ2aWNlPXYsdGhpcy5kaXNwbGF5TW9kZT1NLHRoaXMudmNy''@;'; put 'put ''PUQsdGhpcy5jb21tb25TdHJpbmdzPWNlLHRoaXMuaXRlbXM9YmUsdGhpcy5kb2N1bWVudD1FZSx0aGlzLnNlbGVjdGVkQ2hhbmdlZD1uZXcgcXIoITEpLHRoaXMuZXhwYW5kZWRDaGFuZ2U9bmV3IHFyKCExKSx0aGlzLmRldGFpbERpc2FibGVkPSExLHRoaXMuZGV0YWlsSGlkZGVuPSExLHRo''@;'; put 'put ''aXMuZGlzcGxheUNlbGxzPSExLHRoaXMuZXhwYW5kQW5pbWF0aW9uVHJpZ2dlcj0hMSx0aGlzLlNFTEVDVElPTl9UWVBFPWhsLHRoaXMuaXRlbUNoYW5nZXM9bmV3IHZ4KDEpLHRoaXMuX3NlbGVjdGVkPSExLHRoaXMuX2RldGFpbE9wZW5MYWJlbD0iIix0aGlzLl9kZXRhaWxDbG9zZUxhYmVs''@;'; put 'put ''PSIiLHRoaXMuX3Jvd1NlbGVjdGlvbkxhYmVsPSIiLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLl9zZWxlY3RhYmxlPSEwLHRPKyssdGhpcy5pZD0iY2xyLWRnLXJvdyIrdE8sdGhpcy5yYWRpb0lkPSJjbHItZGctcm93LXJkIit0Tyx0aGlzLmNoZWNrYm94SWQ9ImNsci1kZy1yb3ctY2Ii''@;'; put 'put ''K3RPLHRoaXMuZXhwYW5kYWJsZUlkPWYuZXhwYW5kYWJsZUlkLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKCQ4KGYucmVwbGFjZSxmLmV4cGFuZENoYW5nZSkuc3Vic2NyaWJlKChbQmUscWVdKT0+e0JlJiZxZT8odGhpcy5yZXBsYWNlZD0hMCxaLmFkZENsYXNzKG5lLm5hdGl2ZUVsZW1lbnQs''@;'; put 'put ''ImRhdGFncmlkLXJvdy1yZXBsYWNlZCIpKToodGhpcy5yZXBsYWNlZD0hMSxaLnJlbW92ZUNsYXNzKG5lLm5hdGl2ZUVsZW1lbnQsImRhdGFncmlkLXJvdy1yZXBsYWNlZCIpKX0pKX1nZXQgaXRlbSgpe3JldHVybiB0aGlzLl9pdGVtfXNldCBpdGVtKGEpe3RoaXMuX2l0ZW09YSx0aGlzLml0''@;'; put 'put ''ZW1DaGFuZ2VzLm5leHQoYSksdGhpcy5jbHJEZ1NlbGVjdGFibGU9dGhpcy5fc2VsZWN0YWJsZX1nZXQgY2xyRGdTZWxlY3RhYmxlKCl7cmV0dXJuIXRoaXMuc2VsZWN0aW9uLmlzTG9ja2VkKHRoaXMuaXRlbSl9c2V0IGNsckRnU2VsZWN0YWJsZShhKXt0aGlzLml0ZW0mJnRoaXMuc2VsZWN0''@;'; put 'put ''aW9uLmxvY2tJdGVtKHRoaXMuaXRlbSwiZmFsc2UiPT09YXx8ITE9PT1hKSx0aGlzLl9zZWxlY3RhYmxlPWF9Z2V0IHNlbGVjdGVkKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1obC5Ob25lP3RoaXMuX3NlbGVjdGVkOnRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWQo''@;'; put 'put ''dGhpcy5pdGVtKX1zZXQgc2VsZWN0ZWQoYSl7dGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWhsLk5vbmU/dGhpcy5fc2VsZWN0ZWQ9YTooYSYmdGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWhsLk11bHRpP3RoaXMucmFuZ2VTZWxlY3QoKTp0aGlzLnNlbGVjdGlvbi5yYW5n''@;'; put 'put ''ZVN0YXJ0PW51bGwsdGhpcy5zZWxlY3Rpb24uc2V0U2VsZWN0ZWQodGhpcy5pdGVtLGEpKX1nZXQgZXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5leHBhbmQuZXhwYW5kZWR9c2V0IGV4cGFuZGVkKGEpe3RoaXMuZXhwYW5kLmV4cGFuZGVkPWF9Z2V0IGNsckRnRGV0YWlsT3BlbkxhYmVsKCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuX2RldGFpbE9wZW5MYWJlbD90aGlzLl9kZXRhaWxPcGVuTGFiZWw6dGhpcy5jb21tb25TdHJpbmdzLmtleXMub3Blbn1zZXQgY2xyRGdEZXRhaWxPcGVuTGFiZWwoYSl7dGhpcy5fZGV0YWlsT3BlbkxhYmVsPWF9Z2V0IGNsckRnRGV0YWlsQ2xvc2VMYWJlbCgpe3JldHVybiB0''@;'; put 'put ''aGlzLl9kZXRhaWxDbG9zZUxhYmVsP3RoaXMuX2RldGFpbENsb3NlTGFiZWw6dGhpcy5jb21tb25TdHJpbmdzLmtleXMuY2xvc2V9c2V0IGNsckRnRGV0YWlsQ2xvc2VMYWJlbChhKXt0aGlzLl9kZXRhaWxDbG9zZUxhYmVsPWF9Z2V0IGNsckRnUm93U2VsZWN0aW9uTGFiZWwoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fcm93U2VsZWN0aW9uTGFiZWw/dGhpcy5fcm93U2VsZWN0aW9uTGFiZWw6dGhpcy5jb21tb25TdHJpbmdzLmtleXMuc2VsZWN0fXNldCBjbHJEZ1Jvd1NlbGVjdGlvbkxhYmVsKGEpe3RoaXMuX3Jvd1NlbGVjdGlvbkxhYmVsPWF9Z2V0IF92aWV3KCl7cmV0dXJuIHRoaXMud3JhcHBl''@;'; put 'put ''ZEluamVjdG9yLmdldChhRyx0aGlzLnZjcikucm93Vmlld31uZ09uSW5pdCgpe3RoaXMud3JhcHBlZEluamVjdG9yPW5ldyBWTChhRyx0aGlzLnZjciksdGhpcy5zZWxlY3Rpb24ubG9ja0l0ZW0odGhpcy5pdGVtLCExPT09dGhpcy5jbHJEZ1NlbGVjdGFibGUpfW5nQWZ0ZXJDb250ZW50SW5p''@;'; put 'put ''dCgpe3RoaXMuZGdDZWxscy5jaGFuZ2VzLnN1YnNjcmliZSgoKT0+e3RoaXMuZGdDZWxscy5mb3JFYWNoKGE9PnthLl92aWV3LmRlc3Ryb3llZHx8dGhpcy5fc2Nyb2xsYWJsZUNlbGxzLmluc2VydChhLl92aWV3KX0pfSl9bmdBZnRlclZpZXdJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1''@;'; put 'put ''c2godGhpcy5kaXNwbGF5TW9kZS52aWV3LnN1YnNjcmliZShhPT57Zm9yKGxldCBkPXRoaXMuX3Njcm9sbGFibGVDZWxscy5sZW5ndGg7ZD4wO2QtLSl0aGlzLl9zY3JvbGxhYmxlQ2VsbHMuZGV0YWNoKCk7Zm9yKGxldCBkPXRoaXMuX2NhbGN1bGF0ZWRDZWxscy5sZW5ndGg7ZD4wO2QtLSl0''@;'; put 'put ''aGlzLl9jYWxjdWxhdGVkQ2VsbHMuZGV0YWNoKCk7YT09PUt5LkNBTENVTEFURT8odGhpcy5kaXNwbGF5Q2VsbHM9ITEsdGhpcy5kZ0NlbGxzLmZvckVhY2goZD0+e2QuX3ZpZXcuZGVzdHJveWVkfHx0aGlzLl9jYWxjdWxhdGVkQ2VsbHMuaW5zZXJ0KGQuX3ZpZXcpfSkpOih0aGlzLmRpc3Bs''@;'; put 'put ''YXlDZWxscz0hMCx0aGlzLmRnQ2VsbHMuZm9yRWFjaChkPT57ZC5fdmlldy5kZXN0cm95ZWR8fHRoaXMuX3Njcm9sbGFibGVDZWxscy5pbnNlcnQoZC5fdmlldyl9KSl9KSx0aGlzLmV4cGFuZC5hbmltYXRlLnN1YnNjcmliZSgoKT0+e3RoaXMuZXhwYW5kQW5pbWF0aW9uVHJpZ2dlcj0hdGhp''@;'; put 'put ''cy5leHBhbmRBbmltYXRpb25UcmlnZ2VyfSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKX10b2dnbGUoYT0hdGhpcy5zZWxlY3RlZCl7YSE9PXRoaXMuc2VsZWN0ZWQmJih0aGlzLnNlbGVjdGVkPWEsdGhpcy5zZWxlY3RlZENo''@;'; put 'put ''YW5nZWQuZW1pdChhKSl9dG9nZ2xlRXhwYW5kKCl7dGhpcy5leHBhbmQuZXhwYW5kYWJsZSYmKHRoaXMuZXhwYW5kQW5pbWF0aW9uLnVwZGF0ZVN0YXJ0SGVpZ2h0KCksdGhpcy5leHBhbmRlZD0hdGhpcy5leHBhbmRlZCx0aGlzLmV4cGFuZGVkQ2hhbmdlLmVtaXQodGhpcy5leHBhbmRlZCkp''@;'; put 'put ''fWNsZWFyUmFuZ2VzKGEpe2Euc2hpZnRLZXkmJih0aGlzLmRvY3VtZW50LmdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpLC0xIT09d2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiRmlyZWZveCIpJiYoYS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMudG9nZ2xlKCEwKSkp''@;'; put 'put ''fXNlbGVjdFJvdyhhPSF0aGlzLnNlbGVjdGVkLGQpeyJMQUJFTCIhPT1kLnRhcmdldC50YWdOYW1lJiYodGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PXRoaXMuU0VMRUNUSU9OX1RZUEUuU2luZ2xlP3RoaXMuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGU9dGhpcy5pdGVtOnRoaXMudG9n''@;'; put 'put ''Z2xlKGEpKX1yYW5nZVNlbGVjdCgpe2NvbnN0IGE9dGhpcy5pdGVtcy5kaXNwbGF5ZWQ7aWYoIWEpcmV0dXJuO2NvbnN0IGQ9YS5pbmRleE9mKHRoaXMuc2VsZWN0aW9uLnJhbmdlU3RhcnQpO2lmKHRoaXMuc2VsZWN0aW9uLnJhbmdlU3RhcnQmJnRoaXMuc2VsZWN0aW9uLmN1cnJlbnQuaW5j''@;'; put 'put ''bHVkZXModGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydCkmJnRoaXMuc2VsZWN0aW9uLnNoaWZ0UHJlc3NlZCYmLTEhPT1kKXtjb25zdCBoPWEuaW5kZXhPZih0aGlzLml0ZW0pLGY9bmV3IFNldCh0aGlzLnNlbGVjdGlvbi5jdXJyZW50LmNvbmNhdChhLnNsaWNlKE1hdGgubWluKGQsaCksTWF0''@;'; put 'put ''aC5tYXgoZCxoKSsxKSkpO3RoaXMuc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCksdGhpcy5zZWxlY3Rpb24uY3VycmVudC5wdXNoKC4uLmYpfWVsc2UgdGhpcy5zZWxlY3Rpb24ucmFuZ2VTdGFydD10aGlzLml0ZW19fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3''@;'; put 'put ''KGF8fGMpKEdlKHF5KSxHZShXeSksR2UoWXkpLEdlKCR4KSxHZSgkZiksR2Uoc0cpLEdlKERhKSxHZShFYSksR2UoZW8pLEdlKHRzKSxHZShsZyksR2UodnMpKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLXJvdyJdXSxjb250ZW50UXVlcmllczpmdW5jdGlv''@;'; put 'put ''bihhLGQsaCl7aWYoMSZhJiZsYShoLGJwLDQpLDImYSl7bGV0IGY7eGkoZj1FaSgpKSYmKGQuZGdDZWxscz1mKX19LHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKG5hKFJMLDUpLG5hKE5WZSw1KSxuYShWVmUsNSxEYSksbmEoQlZlLDUsRGEpLG5hKGpWZSw1LERhKSksMiZhKXts''@;'; put 'put ''ZXQgaDt4aShoPUVpKCkpJiYoZC5leHBhbmRBbmltYXRpb249aC5maXJzdCkseGkoaD1FaSgpKSYmKGQuZGV0YWlsQnV0dG9uPWguZmlyc3QpLHhpKGg9RWkoKSkmJihkLl9zdGlja3lDZWxscz1oLmZpcnN0KSx4aShoPUVpKCkpJiYoZC5fc2Nyb2xsYWJsZUNlbGxzPWguZmlyc3QpLHhpKGg9''@;'; put 'put ''RWkoKSkmJihkLl9jYWxjdWxhdGVkQ2VsbHM9aC5maXJzdCl9fSxob3N0QXR0cnM6WyJyb2xlIiwicm93Z3JvdXAiXSxob3N0VmFyczo1LGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGRyKCJhcmlhLW93bnMiLGQuaWQpLHhyKCJkYXRhZ3JpZC1yb3ciLCEwKSgiZGF0YWdyaWQt''@;'; put 'put ''c2VsZWN0ZWQiLGQuc2VsZWN0ZWQpKX0saW5wdXRzOntkZXRhaWxEaXNhYmxlZDpbWm4uTm9uZSwiY2xyRGdEZXRhaWxEaXNhYmxlZCIsImRldGFpbERpc2FibGVkIl0sZGV0YWlsSGlkZGVuOltabi5Ob25lLCJjbHJEZ0RldGFpbEhpZGRlbiIsImRldGFpbEhpZGRlbiJdLGl0ZW06W1puLk5v''@;'; put 'put ''bmUsImNsckRnSXRlbSIsIml0ZW0iXSxjbHJEZ1NlbGVjdGFibGU6ImNsckRnU2VsZWN0YWJsZSIsc2VsZWN0ZWQ6W1puLk5vbmUsImNsckRnU2VsZWN0ZWQiLCJzZWxlY3RlZCJdLGV4cGFuZGVkOltabi5Ob25lLCJjbHJEZ0V4cGFuZGVkIiwiZXhwYW5kZWQiXSxjbHJEZ0RldGFpbE9wZW5M''@;'; put 'put ''YWJlbDoiY2xyRGdEZXRhaWxPcGVuTGFiZWwiLGNsckRnRGV0YWlsQ2xvc2VMYWJlbDoiY2xyRGdEZXRhaWxDbG9zZUxhYmVsIixjbHJEZ1Jvd1NlbGVjdGlvbkxhYmVsOiJjbHJEZ1Jvd1NlbGVjdGlvbkxhYmVsIn0sb3V0cHV0czp7c2VsZWN0ZWRDaGFuZ2VkOiJjbHJEZ1NlbGVjdGVkQ2hh''@;'; put 'put ''bmdlIixleHBhbmRlZENoYW5nZToiY2xyRGdFeHBhbmRlZENoYW5nZSJ9LGZlYXR1cmVzOltwbyhbJHgse3Byb3ZpZGU6WjEsdXNlRXhpc3Rpbmc6JHh9LHtwcm92aWRlOkF4LHVzZUV4aXN0aW5nOiR4fV0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6VVZlLGRlY2xzOjksdmFyczozLGNvbnN0czpb''@;'; put 'put ''WyJkZXRhaWwiLCIiXSxbInJvd0NvbnRlbnQiLCIiXSxbImNhbGN1bGF0ZWRDZWxscyIsIiJdLFsic3RpY2t5Q2VsbHMiLCIiXSxbInNjcm9sbGFibGVDZWxscyIsIiJdLFsiZGV0YWlsQnV0dG9uIiwiIl0sWyJjbGFzcyIsImRhdGFncmlkLXJvdy1jbGlja2FibGUiLDMsIm1vdXNlZG93biIs''@;'; put 'put ''ImNsaWNrIiw0LCJuZ0lmIl0sWzMsImNsckV4cGFuZFRyaWdnZXIiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJkYXRhZ3JpZC1yb3ctY2xpY2thYmxlIiwzLCJtb3VzZWRvd24iLCJjbGljayJdLFszLCJjbHJFeHBhbmRUcmlnZ2VyIl0sWzMsIm5nVGVtcGxhdGVPdXRsZXQiXSxbInJvbGUi''@;'; put 'put ''LCJyb3ciLDEsImRhdGFncmlkLXJvdy1tYXN0ZXIiLCJkYXRhZ3JpZC1yb3ctZmxleCIsMywiaWQiXSxbMSwiZGF0YWdyaWQtcm93LXN0aWNreSJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1zZWxlY3QgZGF0YWdyaWQtZml4ZWQtY29sdW1uIGRhdGFncmlkLWNlbGwiLCJyb2xlIiwiZ3JpZGNlbGwi''@;'; put 'put ''LDMsIm5nQ2xhc3MiLDQsIm5nSWYiXSxbImNsYXNzIiwiZGF0YWdyaWQtcm93LWFjdGlvbnMgZGF0YWdyaWQtZml4ZWQtY29sdW1uIGRhdGFncmlkLWNlbGwiLCJyb2xlIiwiZ3JpZGNlbGwiLDQsIm5nSWYiXSxbImNsYXNzIiwiZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCBkYXRhZ3JpZC1m''@;'; put 'put ''aXhlZC1jb2x1bW4gZGF0YWdyaWQtY2VsbCIsInJvbGUiLCJncmlkY2VsbCIsNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1kZXRhaWwtY2FyZXQgZGF0YWdyaWQtZml4ZWQtY29sdW1uIGRhdGFncmlkLWNlbGwiLCJyb2xlIiwiZ3JpZGNlbGwiLDQsIm5nSWYiXSxbMSwiZGF0YWdyaWQt''@;'; put 'put ''cm93LXNjcm9sbGFibGUiLDMsIm5nQ2xhc3MiXSxbMSwiZGF0YWdyaWQtc2Nyb2xsaW5nLWNlbGxzIl0sWyJyb2xlIiwiZ3JpZGNlbGwiLDEsImRhdGFncmlkLXNlbGVjdCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiIsImRhdGFncmlkLWNlbGwiLDMsIm5nQ2xhc3MiXSxbMSwiY2xyLWNoZWNr''@;'; put 'put ''Ym94LXdyYXBwZXIiXSxbInRhYmluZGV4IiwiLTEiLCJ0eXBlIiwiY2hlY2tib3giLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwiaWQiLCJkaXNhYmxlZCJdLFsxLCJjbHItY29udHJvbC1sYWJlbCIsImNsci1jb2wtbnVsbCIsMywiY2xpY2siLCJmb3IiXSxbMSwiY2xyLXNyLW9ubHki''@;'; put 'put ''XSxbInRhYmluZGV4IiwiLTEiLCJ0eXBlIiwicmFkaW8iLCJjbHJSYWRpbyIsIiIsMywibmdNb2RlbENoYW5nZSIsImlkIiwibmFtZSIsInZhbHVlIiwibmdNb2RlbCIsImNoZWNrZWQiLCJkaXNhYmxlZCJdLFsxLCJjbHItY29udHJvbC1sYWJlbCIsImNsci1jb2wtbnVsbCIsMywiZm9yIl0s''@;'; put 'put ''WyJyb2xlIiwiZ3JpZGNlbGwiLDEsImRhdGFncmlkLXJvdy1hY3Rpb25zIiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIiwiZGF0YWdyaWQtY2VsbCJdLFsicm9sZSIsImdyaWRjZWxsIiwxLCJkYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIiwiZGF0YWdy''@;'; put 'put ''aWQtY2VsbCJdLFsidGFiaW5kZXgiLCItMSIsInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9uIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xyU21hbGwiLCIiLDQsIm5nSWYiXSxbInRhYmluZGV4IiwiLTEiLCJ0eXBlIiwiYnV0dG9uIiwx''@;'; put 'put ''LCJkYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LWJ1dHRvbiIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLDEsImRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtaWNvbiJdLFsiY2xyU21hbGwiLCIiXSxbInJvbGUiLCJncmlkY2VsbCIsMSwiZGF0YWdyaWQtZGV0YWlsLWNhcmV0IiwiZGF0''@;'; put 'put ''YWdyaWQtZml4ZWQtY29sdW1uIiwiZGF0YWdyaWQtY2VsbCJdLFsidGFiaW5kZXgiLCItMSIsInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImRhdGFncmlkLWRldGFpbC1jYXJldC1idXR0b24iLCJhcmlhLWhhc3BvcHVwIiwiZGlhbG9nIiwzLCJkaXNhYmxlZCIsImlzLW9wZW4iLCJjbGljayIs''@;'; put 'put ''NCwibmdJZiJdLFsidGFiaW5kZXgiLCItMSIsInR5cGUiLCJidXR0b24iLCJhcmlhLWhhc3BvcHVwIiwiZGlhbG9nIiwxLCJkYXRhZ3JpZC1kZXRhaWwtY2FyZXQtYnV0dG9uIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJzaGFwZSIsImFuZ2xlLWRvdWJsZSIsMSwiZGF0YWdyaWQtZGV0YWls''@;'; put 'put ''LWNhcmV0LWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihsbyh6VmUpLGd0KDAsS1ZlLDMsMiwiZGl2Iiw2KSgxLFhWZSwyLDIsImNsci1leHBhbmRhYmxlLWFuaW1hdGlvbiIsNykoMixRVmUsMSwxLG51bGwsOCkoMyxlQmUsMSwwLCJuZy10ZW1wbGF0ZSIsbnVsbCwwLF91''@;'; put 'put ''KSg1LHBCZSwxNiwxMywibmctdGVtcGxhdGUiLG51bGwsMSxfdSksWGwoNyxudWxsLDIpKSwyJmEmJih4ZSgibmdJZiIsZC5zZWxlY3Rpb24ucm93U2VsZWN0aW9uTW9kZSksZmUoKSx4ZSgibmdJZiIsIWQuc2VsZWN0aW9uLnJvd1NlbGVjdGlvbk1vZGUmJmQuZXhwYW5kLmV4cGFuZGFibGUp''@;'; put 'put ''LGZlKCkseGUoIm5nSWYiLCFkLnNlbGVjdGlvbi5yb3dTZWxlY3Rpb25Nb2RlJiYhZC5leHBhbmQuZXhwYW5kYWJsZSkpfSxkZXBlbmRlbmNpZXM6W3d1LHlvLE4xLGNzLHVzLEpZLFhZLFFsLEIxLGRMLFFzLFlzLFJMLF9oLGxHXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTt2YXIgWTE9ZnVu''@;'; put 'put ''Y3Rpb24oYyl7cmV0dXJuIGNbYy5XSURUSD0wXT0iV0lEVEgiLGNbYy5ISURERU49MV09IkhJRERFTiIsY1tjLklOSVRJQUxJWkU9Ml09IklOSVRJQUxJWkUiLGN9KFkxfHx7fSk7Y29uc3QgYVplPU9iamVjdC5rZXlzKFkxKS5tYXAoYz0+WTFbY10pLmZpbHRlcihjPT5jPT09cGFyc2VJbnQo''@;'; put 'put ''YywxMCkmJmMhPT1ZMS5JTklUSUFMSVpFKTtsZXQgY2c9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuY29sdW1ucz1bXSx0aGlzLmNvbHVtbnNTdGF0ZUNoYW5nZT1uZXcgUXIobnVsbCksdGhpcy5fY2FjaGU9W119Z2V0IGNvbHVtblN0YXRlcygpe3JldHVybiB0aGlzLmNvbHVt''@;'; put 'put ''bnMubWFwKGE9PmEudmFsdWUpfWdldCBoYXNIaWRlYWJsZUNvbHVtbnMoKXtyZXR1cm4gdGhpcy5jb2x1bW5TdGF0ZXMuZmlsdGVyKGE9PmEuaGlkZWFibGUpLmxlbmd0aD4wfWdldCB2aXNpYmxlQ29sdW1ucygpe3JldHVybiB0aGlzLmNvbHVtblN0YXRlcy5maWx0ZXIoYT0+IWEuaGlkZGVu''@;'; put 'put ''KX1jYWNoZSgpe3RoaXMuX2NhY2hlPXRoaXMuY29sdW1ucy5tYXAoYT0+e2NvbnN0IGQ9ey4uLmEudmFsdWV9O3JldHVybiBkZWxldGUgZC5jaGFuZ2VzLGR9KX1oYXNDYWNoZSgpe3JldHVybiEhdGhpcy5fY2FjaGUubGVuZ3RofXJlc2V0VG9MYXN0Q2FjaGUoKXt0aGlzLl9jYWNoZS5mb3JF''@;'; put 'put ''YWNoKChhLGQpPT57Y29uc3QgaD17Li4uYSxjaGFuZ2VzOmFaZX07dGhpcy5jb2x1bW5zW2RdLm5leHQoaCksdGhpcy5jb2x1bW5zU3RhdGVDaGFuZ2UubmV4dChoKX0pLHRoaXMuX2NhY2hlPVtdfWVtaXRTdGF0ZUNoYW5nZUF0KGEsZCl7dGhpcy5jb2x1bW5zW2FdJiZ0aGlzLmVtaXRTdGF0''@;'; put 'put ''ZUNoYW5nZSh0aGlzLmNvbHVtbnNbYV0sZCl9ZW1pdFN0YXRlQ2hhbmdlKGEsZCl7Y29uc3QgaD17Li4uYS52YWx1ZSwuLi5kfTthLm5leHQoaCksdGhpcy5jb2x1bW5zU3RhdGVDaGFuZ2UubmV4dChoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9''@;'; put 'put ''LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y29uc3Qgc1plPXtpdGVtU2l6ZTozMixtaW5CdWZmZXJQeDoyMDAsbWF4QnVmZmVyUHg6NDAwfTtsZXQgYmRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaLG5lLGNl''@;'; put 'put ''LGJlLEVlLEJlKXt0aGlzLmNoYW5nZURldGVjdG9yUmVmPWEsdGhpcy5pdGVyYWJsZURpZmZlcnM9ZCx0aGlzLml0ZW1zPWgsdGhpcy5uZ1pvbmU9Zix0aGlzLnJlbmRlcmVyMj12LHRoaXMudGVtcGxhdGVSZWY9TSx0aGlzLnZpZXdDb250YWluZXJSZWY9RCx0aGlzLmRpcmVjdGlvbmFsaXR5''@;'; put 'put ''PVosdGhpcy5zY3JvbGxEaXNwYXRjaGVyPW5lLHRoaXMudmlld3BvcnRSdWxlcj1jZSx0aGlzLmRhdGFncmlkPWJlLHRoaXMuY29sdW1uc1NlcnZpY2U9RWUsdGhpcy5pbmplY3Rvcj1CZSx0aGlzLnJlbmRlcmVkUmFuZ2VDaGFuZ2U9bmV3IHFyLHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxT''@;'; put 'put ''Y3JvbGxJbnB1dHM9ey4uLnNaZX0sdGhpcy5zdWJzY3JpcHRpb25zPVtdLHRoaXMudG9wSW5kZXg9MCx0aGlzLm11dGF0aW9uQ2hhbmdlcz1uZXcgTXV0YXRpb25PYnNlcnZlcihxZT0+e3FlLmZvckVhY2gobnQ9PntudC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCJkYXRhZ3JpZC1jb21w''@;'; put 'put ''YWN0IikmJnRoaXMuaXRlbVNpemU+MjQmJih0aGlzLml0ZW1TaXplPTI0KX0pfSksdGhpcy52aWV3UmVwZWF0ZXI9bmV3IEwwZSx0aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHM9e2Nka1ZpcnR1YWxGb3JUcmFja0J5OnFlPT5xZX0saC5zbWFydGVuVXAoKSxiZS5kZXRhaWxTZXJ2aWNlLnByZXZl''@;'; put 'put ''bnRGb2N1c1Njcm9sbD0hMCx0aGlzLmRhdGFncmlkRWxlbWVudFJlZj1iZS5lbCx0aGlzLmNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZT0yMCx0aGlzLm11dGF0aW9uQ2hhbmdlcy5vYnNlcnZlKHRoaXMuZGF0YWdyaWRFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQse2F0dHJpYnV0ZUZp''@;'; put 'put ''bHRlcjpbImNsYXNzIl0sYXR0cmlidXRlT2xkVmFsdWU6ITB9KSx0aGlzLnZpcnR1YWxTY3JvbGxTdHJhdGVneT1uZXcgbkZlKHRoaXMuX2Nka0ZpeGVkU2l6ZVZpcnR1YWxTY3JvbGxJbnB1dHMuaXRlbVNpemUsdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5taW5CdWZm''@;'; put 'put ''ZXJQeCx0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzLm1heEJ1ZmZlclB4KX1nZXQgY2RrVmlydHVhbEZvck9mKCl7cmV0dXJuIHRoaXMuY2RrVmlydHVhbEZvcklucHV0cy5jZGtWaXJ0dWFsRm9yT2Z9c2V0IGNka1ZpcnR1YWxGb3JPZihhKXt0aGlzLmNka1ZpcnR1YWxG''@;'; put 'put ''b3JJbnB1dHMuY2RrVmlydHVhbEZvck9mPWEsdGhpcy5pdGVtcy5hbGw9YSx0aGlzLnVwZGF0ZUNka1ZpcnR1YWxGb3JJbnB1dHMoKX1nZXQgY2RrVmlydHVhbEZvclRyYWNrQnkoKXtyZXR1cm4gdGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzLmNka1ZpcnR1YWxGb3JUcmFja0J5fXNldCBjZGtW''@;'; put 'put ''aXJ0dWFsRm9yVHJhY2tCeShhKXt0aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHMuY2RrVmlydHVhbEZvclRyYWNrQnk9YSx0aGlzLnVwZGF0ZUNka1ZpcnR1YWxGb3JJbnB1dHMoKX1nZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlKCl7cmV0dXJuIHRoaXM/LmNka1ZpcnR1YWxGb3JJbnB1dHM/LmNk''@;'; put 'put ''a1ZpcnR1YWxGb3JUZW1wbGF0ZX1zZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlKGEpe3RoaXMuY2RrVmlydHVhbEZvcklucHV0cy5jZGtWaXJ0dWFsRm9yVGVtcGxhdGU9YSx0aGlzLnVwZGF0ZUNka1ZpcnR1YWxGb3JJbnB1dHMoKX1nZXQgY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXpl''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuY2RrVmlydHVhbEZvcklucHV0cy5jZGtWaXJ0dWFsRm9yVGVtcGxhdGVDYWNoZVNpemV9c2V0IGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZShhKXt0aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHMuY2RrVmlydHVhbEZvclRlbXBsYXRlQ2FjaGVTaXplPWw3KGEp''@;'; put 'put ''LHRoaXMudXBkYXRlQ2RrVmlydHVhbEZvcklucHV0cygpfWdldCBpdGVtU2l6ZSgpe3JldHVybiB0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzLml0ZW1TaXplfXNldCBpdGVtU2l6ZShhKXt0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzLml0ZW1TaXpl''@;'; put 'put ''PWw3KGEpLHRoaXMudXBkYXRlRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cygpfWdldCBtaW5CdWZmZXJQeCgpe3JldHVybiB0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzLm1pbkJ1ZmZlclB4fXNldCBtaW5CdWZmZXJQeChhKXt0aGlzLl9jZGtGaXhlZFNpemVWaXJ0''@;'; put 'put ''dWFsU2Nyb2xsSW5wdXRzLm1pbkJ1ZmZlclB4PWw3KGEpLHRoaXMudXBkYXRlRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cygpfWdldCBtYXhCdWZmZXJQeCgpe3JldHVybiB0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzLm1heEJ1ZmZlclB4fXNldCBtYXhCdWZmZXJQ''@;'; put 'put ''eChhKXt0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzLm1heEJ1ZmZlclB4PWw3KGEpLHRoaXMudXBkYXRlRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cygpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMuaW5qZWN0b3IucnVuSW5Db250ZXh0KCgpPT57dGhpcy52aXJ0dWFs''@;'; put 'put ''U2Nyb2xsVmlld3BvcnQ9dGhpcy5jcmVhdGVWaXJ0dWFsU2Nyb2xsVmlld3BvcnRGb3JEYXRhZ3JpZCh0aGlzLmNoYW5nZURldGVjdG9yUmVmLHRoaXMubmdab25lLHRoaXMucmVuZGVyZXIyLHRoaXMuZGlyZWN0aW9uYWxpdHksdGhpcy5zY3JvbGxEaXNwYXRjaGVyLHRoaXMudmlld3BvcnRS''@;'; put 'put ''dWxlcix0aGlzLmRhdGFncmlkRWxlbWVudFJlZix0aGlzLnZpcnR1YWxTY3JvbGxTdHJhdGVneSksdGhpcy5jZGtWaXJ0dWFsRm9yPWZ1bmN0aW9uIGNaZShjLGwsYSxkLGgsZil7aWYoK1RpZS5tYWpvcjwxOSlyZXR1cm4gbmV3IENMKGMsbCxhLGQsaCxmKTt7Y29uc3Qgdj1Ecy5jcmVhdGUo''@;'; put 'put ''e3BhcmVudDpoaShjYykscHJvdmlkZXJzOlt7cHJvdmlkZTp4eSx1c2VWYWx1ZTpofV19KTtyZXR1cm4gRHMuY3JlYXRlKHtwYXJlbnQ6dixwcm92aWRlcnM6W3twcm92aWRlOkRhLHVzZVZhbHVlOmN9LHtwcm92aWRlOndsLHVzZVZhbHVlOmx9LHtwcm92aWRlOlg1LHVzZVZhbHVlOmF9LHtw''@;'; put 'put ''cm92aWRlOmNZLHVzZVZhbHVlOmR9LHtwcm92aWRlOllvLHVzZVZhbHVlOmZ9LHtwcm92aWRlOkNMLHVzZUNsYXNzOkNMfV19KS5nZXQoQ0wpfX0odGhpcy52aWV3Q29udGFpbmVyUmVmLHRoaXMudGVtcGxhdGVSZWYsdGhpcy5pdGVyYWJsZURpZmZlcnMsdGhpcy52aWV3UmVwZWF0ZXIsdGhp''@;'; put 'put ''cy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQsdGhpcy5uZ1pvbmUpLHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0Lm5nT25Jbml0KCl9KSx0aGlzLmdyaWRSb2xlRWxlbWVudD10aGlzLmRhdGFncmlkRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tyb2xlPSJncmlkIl0n''@;'; put 'put ''KSx0aGlzLnVwZGF0ZUNka1ZpcnR1YWxGb3JJbnB1dHMoKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLml0ZW1zLmNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuY2RrVmlydHVhbEZvci5jZGtWaXJ0dWFsRm9yT2Y9YX0pLHRoaXMuY2RrVmlydHVhbEZvci5kYXRhU3RyZWFtLnN1YnNj''@;'; put 'put ''cmliZShhPT57dGhpcy51cGRhdGVBcmlhUm93Q291bnQoYS5sZW5ndGgpfSksdGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQuc2Nyb2xsZWRJbmRleENoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMudG9wSW5kZXg9YX0pLHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0LnJlbmRlcmVkUmFuZ2VT''@;'; put 'put ''dHJlYW0uc3Vic2NyaWJlKGE9Pnt0aGlzLnJlbmRlcmVkUmFuZ2VDaGFuZ2UuZW1pdChhKX0pLHRoaXMuZGF0YWdyaWQucmVmcmVzaC5zdWJzY3JpYmUoYT0+e2EuZmlsdGVycyYmdGhpcy5zY3JvbGxUb0luZGV4KDApfSksdGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zU3RhdGVDaGFuZ2Uu''@;'; put 'put ''c3Vic2NyaWJlKCgpPT57dGhpcy52aWV3UmVwZWF0ZXIuZGV0YWNoKCl9KSl9bmdEb0NoZWNrKCl7dGhpcy5jZGtWaXJ0dWFsRm9yPy5uZ0RvQ2hlY2soKSx0aGlzLnVwZGF0ZUFyaWFSb3dJbmRleGVzKCl9bmdPbkRlc3Ryb3koKXt0aGlzLmNka1ZpcnR1YWxGb3I/Lm5nT25EZXN0cm95KCks''@;'; put 'put ''dGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQ/Lm5nT25EZXN0cm95KCksdGhpcy5tdXRhdGlvbkNoYW5nZXM/LmRpc2Nvbm5lY3QoKSx0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT57YS51bnN1YnNjcmliZSgpfSl9c2Nyb2xsVXAoYSxkPSJhdXRvIil7dGhpcy5zY3JvbGxUb0luZGV4''@;'; put 'put ''KHRoaXMudG9wSW5kZXgtYSxkKX1zY3JvbGxEb3duKGEsZD0iYXV0byIpe3RoaXMuc2Nyb2xsVG9JbmRleCh0aGlzLnRvcEluZGV4K2EsZCl9c2Nyb2xsVG9JbmRleChhLGQ9ImF1dG8iKXt0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydD8uc2Nyb2xsVG9JbmRleChhLGQpfXVwZGF0ZUNka1Zp''@;'; put 'put ''cnR1YWxGb3JJbnB1dHMoKXtpZih0aGlzLmNka1ZpcnR1YWxGb3IpZm9yKGNvbnN0IGEgb2YgT2JqZWN0LmtleXModGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzKSl0aGlzLmNka1ZpcnR1YWxGb3JbYV0hPT10aGlzLmNka1ZpcnR1YWxGb3JJbnB1dHNbYV0mJih0aGlzLmNka1ZpcnR1YWxGb3Jb''@;'; put 'put ''YV09dGhpcy5jZGtWaXJ0dWFsRm9ySW5wdXRzW2FdKX11cGRhdGVGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzKCl7dGhpcy52aXJ0dWFsU2Nyb2xsU3RyYXRlZ3kmJnRoaXMudmlydHVhbFNjcm9sbFN0cmF0ZWd5LnVwZGF0ZUl0ZW1BbmRCdWZmZXJTaXplKHRoaXMuX2Nka0ZpeGVkU2l6''@;'; put 'put ''ZVZpcnR1YWxTY3JvbGxJbnB1dHMuaXRlbVNpemUsdGhpcy5fY2RrRml4ZWRTaXplVmlydHVhbFNjcm9sbElucHV0cy5taW5CdWZmZXJQeCx0aGlzLl9jZGtGaXhlZFNpemVWaXJ0dWFsU2Nyb2xsSW5wdXRzLm1heEJ1ZmZlclB4KX11cGRhdGVBcmlhUm93Q291bnQoYSl7dGhpcy5ncmlkUm9s''@;'; put 'put ''ZUVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgiYXJpYS1yb3djb3VudCIsYS50b1N0cmluZygpKX11cGRhdGVBcmlhUm93SW5kZXhlcygpe2ZvcihsZXQgYT0wO2E8dGhpcy52aWV3Q29udGFpbmVyUmVmLmxlbmd0aDthKyspe2NvbnN0IGQ9dGhpcy52aWV3Q29udGFpbmVyUmVmLmdldChhKTtkLnJv''@;'; put 'put ''b3ROb2Rlcy5maW5kKE09PiJDTFItREctUk9XIj09PU0udGFnTmFtZSk/LnF1ZXJ5U2VsZWN0b3IoJ1tyb2xlPSJyb3ciXScpPy5zZXRBdHRyaWJ1dGUoImFyaWEtcm93aW5kZXgiLChkLmNvbnRleHQuaW5kZXgrMSkudG9TdHJpbmcoKSl9fWNyZWF0ZVZpcnR1YWxTY3JvbGxWaWV3cG9ydEZv''@;'; put 'put ''ckRhdGFncmlkKGEsZCxoLGYsdixNLEQsWil7Y29uc3QgbmU9RC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoIi5kYXRhZ3JpZCIpLGNlPUQubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCIuZGF0YWdyaWQtdGFibGUiKSxiZT1ELm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3Rvcigi''@;'; put 'put ''LmRhdGFncmlkLXJvd3MiKTtsZXQgQmU9MCxxZT0wO2Z1bmN0aW9uIG50KCl7YmUuc3R5bGUudHJhbnNmb3JtPWB0cmFuc2xhdGVZKCR7QmV9cHgpYCxiZS5zdHlsZS5oZWlnaHQ9cWUtQmUrInB4In1jb25zdCBsdD1mdW5jdGlvbiBsWmUoYyxsLGEsZCxoLGYsdixNLEQpe3JldHVybitUaWUu''@;'; put 'put ''bWFqb3I8MTk/bmV3IHh5KGMsbCxhLGgsZix2LE0sRCk6RHMuY3JlYXRlKHtwYXJlbnQ6aGkoY2MpLHByb3ZpZGVyczpbe3Byb3ZpZGU6ZW8sdXNlVmFsdWU6Y30se3Byb3ZpZGU6eHMsdXNlVmFsdWU6bH0se3Byb3ZpZGU6WW8sdXNlVmFsdWU6YX0se3Byb3ZpZGU6RWEsdXNlVmFsdWU6ZH0s''@;'; put 'put ''e3Byb3ZpZGU6TzBlLHVzZVZhbHVlOmh9LHtwcm92aWRlOmRtLHVzZVZhbHVlOmZ9LHtwcm92aWRlOk15LHVzZVZhbHVlOnZ9LHtwcm92aWRlOndMLHVzZVZhbHVlOk19LHtwcm92aWRlOkgwZSx1c2VWYWx1ZTpEfSx7cHJvdmlkZTp4eSx1c2VDbGFzczp4eX1dfSkuZ2V0KHh5KX0oe25hdGl2''@;'; put 'put ''ZUVsZW1lbnQ6bmV9LGEsZCxoLFosZix2LE0sbnVsbCk7cmV0dXJuIGx0Ll9jb250ZW50V3JhcHBlcj17bmF0aXZlRWxlbWVudDp7c3R5bGU6e3NldCB0cmFuc2Zvcm0obXQpe0JlPXZvaWQgMD09PW10PzA6Ky90cmFuc2xhdGVZXCgoWzAtOV0rKXB4XCkvLmV4ZWMobXQpPy5bMV0sbnQoKX19''@;'; put 'put ''fX0sbHQuc2V0VG90YWxDb250ZW50U2l6ZT1tdD0+e3FlPW10LGNlLnN0eWxlLmhlaWdodD1gJHtxZX1weGAsbnQoKX0sbHR9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHhzKSxHZShYNSksR2UobGcsNCksR2UoWW8pLEdlKEVhKSxHZSh3bCks''@;'; put 'put ''R2UoRGEpLEdlKGRtKSxHZShNeSksR2Uod0wpLEdlKHhtKSxHZShjZyksR2UoY2MpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwiY2xyVmlydHVhbFNjcm9sbCIsIiJdLFsiIiwiQ2xyVmlydHVhbFNjcm9sbCIsIiJdXSxpbnB1dHM6e2Nka1ZpcnR1YWxGb3JPZjpb''@;'; put 'put ''Wm4uTm9uZSwiY2xyVmlydHVhbFJvd3NPZiIsImNka1ZpcnR1YWxGb3JPZiJdLGNka1ZpcnR1YWxGb3JUcmFja0J5Oltabi5Ob25lLCJjbHJWaXJ0dWFsUm93c1RyYWNrQnkiLCJjZGtWaXJ0dWFsRm9yVHJhY2tCeSJdLGNka1ZpcnR1YWxGb3JUZW1wbGF0ZTpbWm4uTm9uZSwiY2xyVmlydHVh''@;'; put 'put ''bFJvd3NUZW1wbGF0ZSIsImNka1ZpcnR1YWxGb3JUZW1wbGF0ZSJdLGNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZTpbWm4uTm9uZSwiY2xyVmlydHVhbFJvd3NUZW1wbGF0ZUNhY2hlU2l6ZSIsImNka1ZpcnR1YWxGb3JUZW1wbGF0ZUNhY2hlU2l6ZSJdLGl0ZW1TaXplOltabi5Ob25l''@;'; put 'put ''LCJjbHJWaXJ0dWFsUm93c0l0ZW1TaXplIiwiaXRlbVNpemUiXSxtaW5CdWZmZXJQeDpbWm4uTm9uZSwiY2xyVmlydHVhbFJvd3NNaW5CdWZmZXJQeCIsIm1pbkJ1ZmZlclB4Il0sbWF4QnVmZmVyUHg6W1puLk5vbmUsImNsclZpcnR1YWxSb3dzTWF4QnVmZmVyUHgiLCJtYXhCdWZmZXJQeCJd''@;'; put 'put ''fSxvdXRwdXRzOntyZW5kZXJlZFJhbmdlQ2hhbmdlOiJyZW5kZXJlZFJhbmdlQ2hhbmdlIn0sZmVhdHVyZXM6W3BvKFtsZ10pXX0pLGN9KSgpLHlkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuZmlsdGVycz1hLHRoaXMuc29ydD1kLHRoaXMucGFnZT1oLHRoaXMu''@;'; put 'put ''ZGVib3VuY2VyPWYsdGhpcy5jaGFuZ2U9dGhpcy5kZWJvdW5jZXIuY2hhbmdlLnBpcGUoT3IoKCk9PnRoaXMuc3RhdGUpKX1nZXQgc3RhdGUoKXtjb25zdCBhPXt9O3RoaXMucGFnZS5zaXplPjAmJihhLnBhZ2U9e2Zyb206dGhpcy5wYWdlLmZpcnN0SXRlbSx0bzp0aGlzLnBhZ2UubGFzdEl0''@;'; put 'put ''ZW0sc2l6ZTp0aGlzLnBhZ2Uuc2l6ZSxjdXJyZW50OnRoaXMucGFnZS5jdXJyZW50fSksdGhpcy5zb3J0LmNvbXBhcmF0b3ImJihhLnNvcnQ9dGhpcy5zb3J0LmNvbXBhcmF0b3IgaW5zdGFuY2VvZiBRTD97Ynk6dGhpcy5zb3J0LmNvbXBhcmF0b3IucHJvcCxyZXZlcnNlOnRoaXMuc29ydC5y''@;'; put 'put ''ZXZlcnNlfTp7Ynk6dGhpcy5zb3J0LmNvbXBhcmF0b3IscmV2ZXJzZTp0aGlzLnNvcnQucmV2ZXJzZX0pO2NvbnN0IGQ9dGhpcy5maWx0ZXJzLmdldEFjdGl2ZUZpbHRlcnMoKTtpZihkLmxlbmd0aD4wKXthLmZpbHRlcnM9W107Zm9yKGNvbnN0IGggb2YgZClhLmZpbHRlcnMucHVzaChoLnN0''@;'; put 'put ''YXRlP2guc3RhdGU6aCl9cmV0dXJuIGF9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKE1yKHNnKSxNcihlTyksTXIod20pLE1yKFd4KSl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSksY30pKCksdWc9KCgpPT57''@;'; put 'put ''Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5lbD1hLHRoaXMucmVuZGVyZXI9ZCx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goaC5maWx0ZXJSZW5kZXJTdGVwcyhLZi5DTEVBUl9XSURUSFMpLnN1YnNjcmliZSgoKT0+dGhpcy5jbGVhcldpZHRo''@;'; put 'put ''KCkpKX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSksdGhpcy5zdGF0ZVN1YnNjcmlwdGlvbiYmdGhpcy5zdGF0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfXJlc2V0U3RhdGUoYSl7dGhpcy5zZXRXaWR0aChhKSx0aGlzLnNl''@;'; put 'put ''dEhpZGRlbihhKX1zZXRXaWR0aChhKXthLnN0cmljdFdpZHRoP3RoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LEd5KTp0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxHeSksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlz''@;'; put 'put ''LmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixhLndpZHRoKyJweCIpfXNldEhpZGRlbihhKXthLmhpZGRlbj90aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxHeCk6dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsR3gpfWNs''@;'; put 'put ''ZWFyV2lkdGgoKXt0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxHeSksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixudWxsKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXco''@;'; put 'put ''YXx8YykoR2UoZW8pLEdlKEVhKSxHZShUNykpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctY2VsbCJdXX0pLGN9KSgpLE1tPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5jb2x1bW5zU2VydmljZT1hLHRoaXMuc3Vic2NyaXB0aW9ucz1bXX1u''@;'; put 'put ''Z0FmdGVyQ29udGVudEluaXQoKXt0aGlzLnNldENlbGxzU3RhdGUoKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmNlbGxzLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57dGhpcy5zZXRDZWxsc1N0YXRlKCl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChh''@;'; put 'put ''PT5hLnVuc3Vic2NyaWJlKCkpfXNldENlbGxzU3RhdGUoKXt0aGlzLmNlbGxzLmxlbmd0aD09PXRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5sZW5ndGgmJnRoaXMuY2VsbHMuZm9yRWFjaCgoYSxkKT0+e3RoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1uc1tkXSYmYS5yZXNldFN0YXRlKHRo''@;'; put 'put ''aXMuY29sdW1uc1NlcnZpY2UuY29sdW1uc1tkXS52YWx1ZSl9KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoY2cpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLXJvdyJdLFsiY2xyLWRnLXJvdy1kZXRhaWwi''@;'; put 'put ''XV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmKGxhKGgsYyw1KSxsYShoLHVnLDQpKSwyJmEpe2xldCBmO3hpKGY9RWkoKSkmJihkLmV4cGFuZGFibGVSb3c9Zi5maXJzdCkseGkoZj1FaSgpKSYmKGQuY2VsbHM9Zil9fX0pLGN9KSgpLHhtPSgoKT0+e2NsYXNzIGN7''@;'; put 'put ''Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaLG5lLGNlLGJlLEVlLEJlLHFlLG50KXt0aGlzLm9yZ2FuaXplcj1hLHRoaXMuaXRlbXM9ZCx0aGlzLmV4cGFuZGFibGVSb3dzPWgsdGhpcy5zZWxlY3Rpb249Zix0aGlzLnJvd0FjdGlvblNlcnZpY2U9dix0aGlzLnN0YXRlUHJvdmlkZXI9TSx0''@;'; put 'put ''aGlzLmRpc3BsYXlNb2RlPUQsdGhpcy5yZW5kZXJlcj1aLHRoaXMuZGV0YWlsU2VydmljZT1uZSx0aGlzLmRvY3VtZW50PWNlLHRoaXMuZWw9YmUsdGhpcy5wYWdlPUVlLHRoaXMuY29tbW9uU3RyaW5ncz1CZSx0aGlzLmtleU5hdmlnYXRpb249cWUsdGhpcy56b25lPW50LHRoaXMuY2xyRGdT''@;'; put 'put ''aW5nbGVTZWxlY3Rpb25BcmlhTGFiZWw9dGhpcy5jb21tb25TdHJpbmdzLmtleXMuc2luZ2xlU2VsZWN0aW9uQXJpYUxhYmVsLHRoaXMuY2xyRGdTaW5nbGVBY3Rpb25hYmxlQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLnNpbmdsZUFjdGlvbmFibGVBcmlhTGFiZWwsdGhpcy5j''@;'; put 'put ''bHJEZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmRldGFpbEV4cGFuZGFibGVBcmlhTGFiZWwsdGhpcy5jbHJEZ0Rpc2FibGVQYWdlRm9jdXM9ITEsdGhpcy5zZWxlY3RlZENoYW5nZWQ9bmV3IHFyKCExKSx0aGlzLnNpbmdsZVNlbGVjdGVkQ2hhbmdl''@;'; put 'put ''ZD1uZXcgcXIoITEpLHRoaXMucmVmcmVzaD1uZXcgcXIoITEpLHRoaXMuU0VMRUNUSU9OX1RZUEU9aGwsdGhpcy5fc3Vic2NyaXB0aW9ucz1bXTtjb25zdCBsdD1TdSgpO3RoaXMuc2VsZWN0QWxsSWQ9ImNsci1kZy1zZWxlY3QtYWxsLSIrbHQsbmUuaWQ9bHR9Z2V0IGxvYWRpbmcoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5pdGVtcy5sb2FkaW5nfXNldCBsb2FkaW5nKGEpe3RoaXMuaXRlbXMubG9hZGluZz1hfXNldCBzZWxlY3RlZChhKXt0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPWE/aGwuTXVsdGk6aGwuTm9uZSx0aGlzLnNlbGVjdGlvbi51cGRhdGVDdXJyZW50KGEsITEpfXNldCBzaW5n''@;'; put 'put ''bGVTZWxlY3RlZChhKXt0aGlzLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPWhsLlNpbmdsZSxhP3RoaXMuc2VsZWN0aW9uLmN1cnJlbnRTaW5nbGU9YTp0aGlzLnNlbGVjdGlvbi5jdXJyZW50U2luZ2xlJiYodGhpcy5zZWxlY3Rpb24uY3VycmVudFNpbmdsZT1udWxsKX1zZXQgY2xyRGdQcmVz''@;'; put 'put ''ZXJ2ZVNlbGVjdGlvbihhKXt0aGlzLnNlbGVjdGlvbi5wcmVzZXJ2ZVNlbGVjdGlvbj1hfXNldCByb3dTZWxlY3Rpb25Nb2RlKGEpe3RoaXMuc2VsZWN0aW9uLnJvd1NlbGVjdGlvbk1vZGU9YX1zZXQgdHJhY2tCeShhKXt0aGlzLml0ZW1zLnRyYWNrQnk9YX1nZXQgYWxsU2VsZWN0ZWQoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5zZWxlY3Rpb24uaXNBbGxTZWxlY3RlZCgpfXNldCBhbGxTZWxlY3RlZChhKXt0aGlzLnNlbGVjdGlvbi50b2dnbGVBbGwoKX1uZ0FmdGVyQ29udGVudEluaXQoKXt0aGlzLml0ZW1zLnNtYXJ0fHwodGhpcy5pdGVtcy5hbGw9dGhpcy5yb3dzLm1hcChkPT5kLml0ZW0pKTtj''@;'; put 'put ''b25zdCBhPXRoaXMucm93cy5jaGFuZ2VzLnBpcGUoVjEoZD0+YngoZmEoZC5tYXAoaD0+aC5pdGVtKSksJDgoZC5tYXAoaD0+aC5pdGVtQ2hhbmdlcykpLnBpcGUodW0oMCkpKSkpO3RoaXMuX3N1YnNjcmlwdGlvbnMucHVzaChhLnN1YnNjcmliZShkPT57dGhpcy5pdGVtcy5zbWFydHx8KHRo''@;'; put 'put ''aXMuaXRlbXMuYWxsPWQpfSksdGhpcy5yb3dzLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57Zm9yKGxldCBkPXRoaXMuX2Rpc3BsYXllZFJvd3MubGVuZ3RoLTE7ZD49MDtkLS0pdGhpcy5fZGlzcGxheWVkUm93cy5nZXQoZCkuZGVzdHJveWVkJiZ0aGlzLl9kaXNwbGF5ZWRSb3dzLnJlbW92ZShk''@;'; put 'put ''KTtpZih0aGlzLnJvd3MuZm9yRWFjaChkPT57dGhpcy5fZGlzcGxheWVkUm93cy5pbnNlcnQoZC5fdmlldyl9KSx0aGlzLnVwZGF0ZURldGFpbFN0YXRlKCksdGhpcy52aXJ0dWFsU2Nyb2xsKXtjb25zdCBkPXRoaXMua2V5TmF2aWdhdGlvbi5nZXRBY3RpdmVDZWxsKCk7ZCYmdGhpcy56b25l''@;'; put 'put ''LnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57c2V0VGltZW91dCgoKT0+dGhpcy5rZXlOYXZpZ2F0aW9uLnNldEFjdGl2ZUNlbGwoZCkpfSl9fSkpfW5nQWZ0ZXJWaWV3SW5pdCgpe3RoaXMua2V5TmF2aWdhdGlvbi5pbml0aWFsaXplS2V5R3JpZCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpLHRoaXMu''@;'; put 'put ''dXBkYXRlRGV0YWlsU3RhdGUoKSx0aGlzLnJlZnJlc2guZW1pdCh0aGlzLnN0YXRlUHJvdmlkZXIuc3RhdGUpLHRoaXMuX3N1YnNjcmlwdGlvbnMucHVzaCh0aGlzLnN0YXRlUHJvdmlkZXIuY2hhbmdlLnN1YnNjcmliZShhPT50aGlzLnJlZnJlc2guZW1pdChhKSksdGhpcy5zZWxlY3Rpb24u''@;'; put 'put ''Y2hhbmdlLnN1YnNjcmliZShhPT57dGhpcy5zZWxlY3Rpb24uc2VsZWN0aW9uVHlwZT09PWhsLlNpbmdsZT90aGlzLnNpbmdsZVNlbGVjdGVkQ2hhbmdlZC5lbWl0KGEpOnRoaXMuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1obC5NdWx0aSYmdGhpcy5zZWxlY3RlZENoYW5nZWQuZW1pdChh''@;'; put 'put ''KX0pLHRoaXMucGFnZS5jaGFuZ2Uuc3Vic2NyaWJlKCgpPT57dGhpcy5rZXlOYXZpZ2F0aW9uLnJlc2V0S2V5R3JpZCgpLHRoaXMuY2xyRGdEaXNhYmxlUGFnZUZvY3VzfHx0aGlzLmRhdGFncmlkVGFibGUubmF0aXZlRWxlbWVudC5mb2N1cygpfSksdGhpcy5kaXNwbGF5TW9kZS52aWV3LnN1''@;'; put 'put ''YnNjcmliZShhPT57Zm9yKGxldCBkPXRoaXMuX3Byb2plY3RlZERpc3BsYXlDb2x1bW5zLmxlbmd0aDtkPjA7ZC0tKXRoaXMuX3Byb2plY3RlZERpc3BsYXlDb2x1bW5zLmRldGFjaCgpO2ZvcihsZXQgZD10aGlzLl9wcm9qZWN0ZWRDYWxjdWxhdGlvbkNvbHVtbnMubGVuZ3RoO2Q+MDtkLS0p''@;'; put 'put ''dGhpcy5fcHJvamVjdGVkQ2FsY3VsYXRpb25Db2x1bW5zLmRldGFjaCgpO2ZvcihsZXQgZD10aGlzLl9jYWxjdWxhdGlvblJvd3MubGVuZ3RoO2Q+MDtkLS0pdGhpcy5fY2FsY3VsYXRpb25Sb3dzLmRldGFjaCgpO2ZvcihsZXQgZD10aGlzLl9kaXNwbGF5ZWRSb3dzLmxlbmd0aDtkPjA7ZC0t''@;'; put 'put ''KXRoaXMuX2Rpc3BsYXllZFJvd3MuZGV0YWNoKCk7YT09PUt5LkRJU1BMQVk/KHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCJkYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSIpLHRoaXMuY29sdW1ucy5mb3JFYWNoKGQ9Pnt0aGlzLl9wcm9qZWN0ZWREaXNw''@;'; put 'put ''bGF5Q29sdW1ucy5pbnNlcnQoZC5fdmlldyl9KSx0aGlzLnJvd3MuZm9yRWFjaChkPT57dGhpcy5fZGlzcGxheWVkUm93cy5pbnNlcnQoZC5fdmlldyl9KSk6KHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LCJkYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSIpLHRo''@;'; put 'put ''aXMuY29sdW1ucy5mb3JFYWNoKGQ9Pnt0aGlzLl9wcm9qZWN0ZWRDYWxjdWxhdGlvbkNvbHVtbnMuaW5zZXJ0KGQuX3ZpZXcpfSksdGhpcy5yb3dzLmZvckVhY2goZD0+e3RoaXMuX2NhbGN1bGF0aW9uUm93cy5pbnNlcnQoZC5fdmlldyl9KSl9KSksdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1''@;'; put 'put ''bGFyKCgpPT57dGhpcy5fc3Vic2NyaXB0aW9ucy5wdXNoKE1kKHRoaXMuZG9jdW1lbnQuYm9keSwia2V5ZG93biIpLnN1YnNjcmliZShhPT57IlNoaWZ0Ij09PWEua2V5JiYodGhpcy5zZWxlY3Rpb24uc2hpZnRQcmVzc2VkPSEwKX0pLE1kKHRoaXMuZG9jdW1lbnQuYm9keSwia2V5dXAiKS5z''@;'; put 'put ''dWJzY3JpYmUoYT0+eyJTaGlmdCI9PT1hLmtleSYmKHRoaXMuc2VsZWN0aW9uLnNoaWZ0UHJlc3NlZD0hMSl9KSl9KX1uZ09uRGVzdHJveSgpe3RoaXMuX3N1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXRvZ2dsZUFsbFNlbGVjdGVkKGEpe2EucHJldmVudERlZmF1''@;'; put 'put ''bHQoKSwhdGhpcy52aXJ0dWFsU2Nyb2xsJiYodGhpcy5hbGxTZWxlY3RlZD0hdGhpcy5hbGxTZWxlY3RlZCl9cmVzaXplKCl7dGhpcy5vcmdhbml6ZXIucmVzaXplKCl9dXBkYXRlRGV0YWlsU3RhdGUoKXtpZih0aGlzLmRldGFpbFNlcnZpY2Uuc3RhdGUmJnRoaXMuZGV0YWlsU2VydmljZS5p''@;'; put 'put ''c09wZW4pe2NvbnN0IGE9dGhpcy5yb3dzLmZpbmQoZD0+dGhpcy5pdGVtcy50cmFja0J5KGQuaXRlbSk9PT10aGlzLml0ZW1zLnRyYWNrQnkodGhpcy5kZXRhaWxTZXJ2aWNlLnN0YXRlKSk7YT90aGlzLmRldGFpbFNlcnZpY2Uub3BlbihhLml0ZW0sYS5kZXRhaWxCdXR0b24ubmF0aXZlRWxl''@;'; put 'put ''bWVudCk6dGhpcy52aXJ0dWFsU2Nyb2xsfHxzZXRUaW1lb3V0KCgpPT57dGhpcy5kZXRhaWxTZXJ2aWNlLmNsb3NlKCl9KX19ZGF0YUNoYW5nZWQoKXt0aGlzLml0ZW1zLnJlZnJlc2goKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoVDcpLEdl''@;'; put 'put ''KGxnKSxHZShZeSksR2UocXkpLEdlKFd5KSxHZSh5ZGUpLEdlKHNHKSxHZShFYSksR2UoJGYpLEdlKHZzKSxHZShlbyksR2Uod20pLEdlKHRzKSxHZShxTCksR2UoWW8pKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGFncmlkIl1dLGNvbnRlbnRRdWVyaWVz''@;'; put 'put ''OmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihsYShoLGJkZSw1KSxsYShoLCR5LDUpLGxhKGgsaUcsNSksbGEoaCxBNyw0KSxsYShoLFNtLDQpKSwyJmEpe2xldCBmO3hpKGY9RWkoKSkmJihkLnZpcnR1YWxTY3JvbGw9Zi5maXJzdCkseGkoZj1FaSgpKSYmKGQuaXRlcmF0b3I9Zi5maXJzdCks''@;'; put 'put ''eGkoZj1FaSgpKSYmKGQucGxhY2Vob2xkZXI9Zi5maXJzdCkseGkoZj1FaSgpKSYmKGQuY29sdW1ucz1mKSx4aShmPUVpKCkpJiYoZC5yb3dzPWYpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiYobmEoZ0JlLDUsZW8pLG5hKG1CZSw1LGVvKSxuYSh2QmUsNSxEYSksbmEoYkJl''@;'; put 'put ''LDUsRGEpLG5hKHlCZSw1LERhKSxuYShfQmUsNSxEYSksbmEod0JlLDUsRGEpKSwyJmEpe2xldCBoO3hpKGg9RWkoKSkmJihkLmRhdGFncmlkPWguZmlyc3QpLHhpKGg9RWkoKSkmJihkLmRhdGFncmlkVGFibGU9aC5maXJzdCkseGkoaD1FaSgpKSYmKGQuc2Nyb2xsYWJsZUNvbHVtbnM9aC5m''@;'; put 'put ''aXJzdCkseGkoaD1FaSgpKSYmKGQuX3Byb2plY3RlZERpc3BsYXlDb2x1bW5zPWguZmlyc3QpLHhpKGg9RWkoKSkmJihkLl9wcm9qZWN0ZWRDYWxjdWxhdGlvbkNvbHVtbnM9aC5maXJzdCkseGkoaD1FaSgpKSYmKGQuX2Rpc3BsYXllZFJvd3M9aC5maXJzdCkseGkoaD1FaSgpKSYmKGQuX2Nh''@;'; put 'put ''bGN1bGF0aW9uUm93cz1oLmZpcnN0KX19LGhvc3RWYXJzOjQsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZ4cigiZGF0YWdyaWQtaG9zdCIsITApKCJkYXRhZ3JpZC1kZXRhaWwtb3BlbiIsZC5kZXRhaWxTZXJ2aWNlLmlzT3Blbil9LGlucHV0czp7bG9hZGluZ01vcmVJdGVtczpb''@;'; put 'put ''Wm4uTm9uZSwiY2xyTG9hZGluZ01vcmVJdGVtcyIsImxvYWRpbmdNb3JlSXRlbXMiXSxjbHJEZ1NpbmdsZVNlbGVjdGlvbkFyaWFMYWJlbDoiY2xyRGdTaW5nbGVTZWxlY3Rpb25BcmlhTGFiZWwiLGNsckRnU2luZ2xlQWN0aW9uYWJsZUFyaWFMYWJlbDoiY2xyRGdTaW5nbGVBY3Rpb25hYmxl''@;'; put 'put ''QXJpYUxhYmVsIixjbHJEZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsOiJjbHJEZXRhaWxFeHBhbmRhYmxlQXJpYUxhYmVsIixjbHJEZ0Rpc2FibGVQYWdlRm9jdXM6ImNsckRnRGlzYWJsZVBhZ2VGb2N1cyIsbG9hZGluZzpbWm4uTm9uZSwiY2xyRGdMb2FkaW5nIiwibG9hZGluZyJdLHNlbGVj''@;'; put 'put ''dGVkOltabi5Ob25lLCJjbHJEZ1NlbGVjdGVkIiwic2VsZWN0ZWQiXSxzaW5nbGVTZWxlY3RlZDpbWm4uTm9uZSwiY2xyRGdTaW5nbGVTZWxlY3RlZCIsInNpbmdsZVNlbGVjdGVkIl0sY2xyRGdQcmVzZXJ2ZVNlbGVjdGlvbjoiY2xyRGdQcmVzZXJ2ZVNlbGVjdGlvbiIscm93U2VsZWN0aW9u''@;'; put 'put ''TW9kZTpbWm4uTm9uZSwiY2xyRGdSb3dTZWxlY3Rpb24iLCJyb3dTZWxlY3Rpb25Nb2RlIl0sdHJhY2tCeTpbWm4uTm9uZSwiY2xyRGdJdGVtc1RyYWNrQnkiLCJ0cmFja0J5Il19LG91dHB1dHM6e3NlbGVjdGVkQ2hhbmdlZDoiY2xyRGdTZWxlY3RlZENoYW5nZSIsc2luZ2xlU2VsZWN0ZWRD''@;'; put 'put ''aGFuZ2VkOiJjbHJEZ1NpbmdsZVNlbGVjdGVkQ2hhbmdlIixyZWZyZXNoOiJjbHJEZ1JlZnJlc2gifSxmZWF0dXJlczpbcG8oW3F5LGVPLHNnLHdtLGxnLFQ3LFd5LFl5LFd4LCRmLHlkZSxyRyxjZyxzRyxxTF0pXSxuZ0NvbnRlbnRTZWxlY3RvcnM6U0JlLGRlY2xzOjM1LHZhcnM6OSxjb25z''@;'; put 'put ''dHM6W1siZGF0YWdyaWQiLCIiXSxbImRhdGFncmlkVGFibGUiLCIiXSxbInByb2plY3RlZERpc3BsYXlDb2x1bW5zIiwiIl0sWyJkaXNwbGF5ZWRSb3dzIiwiIl0sWyJwcm9qZWN0ZWRDYWxjdWxhdGlvbkNvbHVtbnMiLCIiXSxbImNhbGN1bGF0aW9uUm93cyIsIiJdLFsxLCJkYXRhZ3JpZC1v''@;'; put 'put ''dXRlci13cmFwcGVyIl0sWzEsImRhdGFncmlkLWlubmVyLXdyYXBwZXIiXSxbMSwiZGF0YWdyaWQiXSxbMSwiZGF0YWdyaWQtdGFibGUtd3JhcHBlciJdLFsicm9sZSIsImdyaWQiLCJ0YWJpbmRleCIsIi0xIiwxLCJkYXRhZ3JpZC10YWJsZSJdLFsicm9sZSIsInJvd2dyb3VwIiwxLCJkYXRh''@;'; put 'put ''Z3JpZC1oZWFkZXIiXSxbInJvbGUiLCJyb3ciLDEsImRhdGFncmlkLXJvdyJdLFsxLCJkYXRhZ3JpZC1yb3ctbWFzdGVyIiwiZGF0YWdyaWQtcm93LWZsZXgiXSxbMSwiZGF0YWdyaWQtcm93LXN0aWNreSJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsImNsYXNzIiwiZGF0YWdyaWQtY29sdW1u''@;'; put 'put ''IGRhdGFncmlkLXNlbGVjdCBkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLDMsImtleWRvd24uc3BhY2UiLDQsIm5nSWYiXSxbInJvbGUiLCJjb2x1bW5oZWFkZXIiLCJjbGFzcyIsImRhdGFncmlkLWNvbHVtbiBkYXRhZ3JpZC1zZWxlY3QgZGF0YWdyaWQtZml4ZWQtY29sdW1uIiw0LCJuZ0lmIl0s''@;'; put 'put ''WyJyb2xlIiwiY29sdW1uaGVhZGVyIiwiY2xhc3MiLCJkYXRhZ3JpZC1jb2x1bW4gZGF0YWdyaWQtcm93LWFjdGlvbnMgZGF0YWdyaWQtZml4ZWQtY29sdW1uIiw0LCJuZ0lmIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwiY2xhc3MiLCJkYXRhZ3JpZC1jb2x1bW4gZGF0YWdyaWQtZXhwYW5k''@;'; put 'put ''YWJsZS1jYXJldCBkYXRhZ3JpZC1maXhlZC1jb2x1bW4iLDQsIm5nSWYiXSxbMSwiZGF0YWdyaWQtcm93LXNjcm9sbGFibGUiXSxbInJvbGUiLCJwcmVzZW50YXRpb24iLDEsImRhdGFncmlkLXJvd3MiXSxbImNsYXNzIiwiZGF0YWdyaWQtcm93LWxvYWRpbmciLDQsIm5nSWYiXSxbNCwibmdJ''@;'; put 'put ''ZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1zcGlubmVyIiw0LCJuZ0lmIl0sWzEsImRhdGFncmlkLWNhbGN1bGF0aW9uLXRhYmxlIl0sWzEsImRhdGFncmlkLWNhbGN1bGF0aW9uLWhlYWRlciJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMSwiZGF0YWdyaWQtY29sdW1uIiwiZGF0YWdyaWQtc2Vs''@;'; put 'put ''ZWN0IiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIiwzLCJrZXlkb3duLnNwYWNlIl0sWyJjbGFzcyIsImNsci1jaGVja2JveC13cmFwcGVyIiw0LCJuZ0lmIl0sWzEsImRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3IiXSxbMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiXSxbInR5cGUiLCJjaGVja2Jv''@;'; put 'put ''eCIsInRhYmluZGV4IiwiLTEiLDMsIm5nTW9kZWxDaGFuZ2UiLCJpZCIsIm5nTW9kZWwiXSxbMSwiY2xyLWNvbnRyb2wtbGFiZWwiLCJjbHItY29sLW51bGwiLDMsImZvciJdLFsxLCJjbHItc3Itb25seSJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMSwiZGF0YWdyaWQtY29sdW1uIiwiZGF0''@;'; put 'put ''YWdyaWQtc2VsZWN0IiwiZGF0YWdyaWQtZml4ZWQtY29sdW1uIl0sWyJyb2xlIiwiY29sdW1uaGVhZGVyIiwxLCJkYXRhZ3JpZC1jb2x1bW4iLCJkYXRhZ3JpZC1yb3ctYWN0aW9ucyIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiJdLFsicm9sZSIsImNvbHVtbmhlYWRlciIsMSwiZGF0YWdyaWQt''@;'; put 'put ''Y29sdW1uIiwiZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCIsImRhdGFncmlkLWZpeGVkLWNvbHVtbiJdLFsxLCJkYXRhZ3JpZC1yb3ctbG9hZGluZyJdLFsiY2xyTWVkaXVtIiwiIl0sWzEsImRhdGFncmlkLXNwaW5uZXIiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihsbyhDQmUp''@;'; put 'put ''LFdyKDApLGRlKDEsImRpdiIsNikoMiwiZGl2Iiw3KSgzLCJkaXYiLDgsMCkoNSwiZGl2Iiw5KSg2LCJkaXYiLDEwLDEpKDgsImRpdiIsMTEpKDksImRpdiIsMTIpKDEwLCJkaXYiLDEzKSgxMSwiZGl2IiwxNCksZ3QoMTIseEJlLDMsMSwiZGl2IiwxNSkoMTMsRUJlLDQsMSwiZGl2IiwxNiko''@;'; put 'put ''MTQsVEJlLDQsMSwiZGl2IiwxNykoMTUsQUJlLDQsMSwiZGl2IiwxOCksaGUoKSxkZSgxNiwiZGl2IiwxOSksWGwoMTcsbnVsbCwyKSxoZSgpKCkoKSgpLGRlKDE5LCJkaXYiLDIwKSxndCgyMCxrQmUsNSwxLCJjbHItZGctcm93IiwyMSksWGwoMjEsbnVsbCwzKSxndCgyMyxEQmUsNSwxLCJj''@;'; put 'put ''bHItZGctcm93IiwyMSksV3IoMjQsMSksZ3QoMjUsSUJlLDEsMCwiY2xyLWRnLXBsYWNlaG9sZGVyIiwyMiksaGUoKSgpKCkoKSxXcigyNiwyKSxndCgyNyxSQmUsMywwLCJkaXYiLDIzKSxoZSgpLFdyKDI4LDMpLGhlKCksZGUoMjksImRpdiIsMjQpKDMwLCJkaXYiLDI1KSxYbCgzMSxudWxs''@;'; put 'put ''LDQpLGhlKCksWGwoMzMsbnVsbCw1KSxoZSgpKSwyJmEmJihmZSgzKSxkcigiYXJpYS1oaWRkZW4iLCEhZC5kZXRhaWxTZXJ2aWNlLmlzT3Blbnx8bnVsbCksZmUoOSkseGUoIm5nSWYiLGQuc2VsZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1kLlNFTEVDVElPTl9UWVBFLk11bHRpKSxmZSgpLHhl''@;'; put 'put ''KCJuZ0lmIixkLnNlbGVjdGlvbi5zZWxlY3Rpb25UeXBlPT09ZC5TRUxFQ1RJT05fVFlQRS5TaW5nbGUpLGZlKCkseGUoIm5nSWYiLGQucm93QWN0aW9uU2VydmljZS5oYXNBY3Rpb25hYmxlUm93KSxmZSgpLHhlKCJuZ0lmIixkLmV4cGFuZGFibGVSb3dzLmhhc0V4cGFuZGFibGVSb3d8fGQu''@;'; put 'put ''ZGV0YWlsU2VydmljZS5lbmFibGVkKSxmZSg1KSx4ZSgibmdJZiIsZC5sb2FkaW5nTW9yZUl0ZW1zKSxmZSgzKSx4ZSgibmdJZiIsZC5sb2FkaW5nTW9yZUl0ZW1zKSxmZSgyKSx4ZSgibmdJZiIsIWQucGxhY2Vob2xkZXIpLGZlKDIpLHhlKCJuZ0lmIixkLmxvYWRpbmcpKX0sZGVwZW5kZW5j''@;'; put 'put ''aWVzOlt5byx1cyxCMSxRcyxZcyxfaCxicCxpRyxTbSxsRyx1ZyxNbSx4NyxFN10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCk7Y29uc3QgZlplPWM9PmM7bGV0IF9kZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy5jb2x1bW5zU2Vydmlj''@;'; put 'put ''ZT1kLHRoaXMuYWxsU2VsZWN0ZWQ9bmV3IHFyfWdldCBjbHJBbGxTZWxlY3RlZCgpe3JldHVybiB0aGlzLmFsbFNlbGVjdGVkLmFzT2JzZXJ2YWJsZSgpfWdldCBhbGxIaWRlYWJsZXNWaXNpYmxlKCl7cmV0dXJuIDA9PT10aGlzLmhpZGVhYmxlQ29sdW1ucygpLmZpbHRlcihhPT5hLnZhbHVl''@;'; put 'put ''LmhpZGRlbikubGVuZ3RofXNlbGVjdEFsbCgpe3RoaXMuaGlkZWFibGVDb2x1bW5zKCkuZm9yRWFjaChhPT50aGlzLmNvbHVtbnNTZXJ2aWNlLmVtaXRTdGF0ZUNoYW5nZShhLHtoaWRkZW46ITEsY2hhbmdlczpbWTEuSElEREVOXX0pKSx0aGlzLmFsbFNlbGVjdGVkLm5leHQoITApfWhpZGVh''@;'; put 'put ''YmxlQ29sdW1ucygpe3JldHVybiB0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMuZmlsdGVyKGE9PmEudmFsdWUuaGlkZWFibGUpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZSh0cyksR2UoY2cpKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6Yyxz''@;'; put 'put ''ZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVtbi10b2dnbGUtYnV0dG9uIl1dLG91dHB1dHM6e2NsckFsbFNlbGVjdGVkOiJjbHJBbGxTZWxlY3RlZCJ9LGRlY2xzOjIsdmFyczoyLGNvbnN0czpbWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsInN3aXRjaC1idXR0''@;'; put 'put ''b24iLDMsImNsaWNrIiwiZGlzYWJsZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihkZSgwLCJidXR0b24iLDApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5zZWxlY3RBbGwoKX0pLExlKDEpLGhlKCkpLDImYSYmKHhlKCJkaXNhYmxlZCIsZC5hbGxIaWRlYWJsZXNW''@;'; put 'put ''aXNpYmxlKSxmZSgpLFJyKCIgIixkLmNvbW1vblN0cmluZ3Mua2V5cy5zZWxlY3RBbGwsIiAiKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLHdkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLmNvbW1vblN0cmluZ3M9YSx0aGlzLmNvbHVtbnNTZXJ2aWNlPWQsdGhp''@;'; put 'put ''cy5wb3BvdmVySWQ9U3UoKSx0aGlzLm9wZW5TdGF0ZT0hMSx0aGlzLnNtYXJ0UG9zaXRpb249e2F4aXM6ZjEuVkVSVElDQUwsc2lkZTpNMi5CRUZPUkUsYW5jaG9yOk9zLlNUQVJULGNvbnRlbnQ6T3MuU1RBUlR9LHRoaXMudHJhY2tCeUZuPWZaZSx0aGlzLnN1YnNjcmlwdGlvbj1oLm9wZW5D''@;'; put 'put ''aGFuZ2Uuc3Vic2NyaWJlKGY9PnRoaXMub3BlblN0YXRlPWYpfWdldCBhbGxDb2x1bW5zVmlzaWJsZSgpe3JldHVybiB0aGlzLl9hbGxDb2x1bW5zVmlzaWJsZX1zZXQgYWxsQ29sdW1uc1Zpc2libGUoYSl7dGhpcy5fYWxsQ29sdW1uc1Zpc2libGU9YX1nZXQgaGlkZWFibGVDb2x1bW5TdGF0''@;'; put 'put ''ZXMoKXtyZXR1cm4gdGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zLmZpbHRlcihkPT5kLnZhbHVlLmhpZGVhYmxlKS5tYXAoZD0+ZC52YWx1ZSl9Z2V0IGhhc09ubHlPbmVWaXNpYmxlQ29sdW1uKCl7cmV0dXJuIHRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5sZW5ndGgtdGhpcy5oaWRl''@;'; put 'put ''YWJsZUNvbHVtblN0YXRlcy5sZW5ndGg9PTAmJjE9PT10aGlzLmhpZGVhYmxlQ29sdW1uU3RhdGVzLmZpbHRlcihkPT4hZC5oaWRkZW4pLmxlbmd0aH1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9dG9nZ2xlQ29sdW1uU3RhdGUoYSxkKXtjb25zdCBoPXRo''@;'; put 'put ''aXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5maWx0ZXIoZj0+Zi52YWx1ZT09PWEpWzBdO3RoaXMuY29sdW1uc1NlcnZpY2UuZW1pdFN0YXRlQ2hhbmdlKGgse2hpZGRlbjpkLGNoYW5nZXM6W1kxLkhJRERFTl19KX10b2dnbGVTd2l0Y2hQYW5lbCgpe3RoaXMub3BlblN0YXRlPSF0aGlzLm9w''@;'; put 'put ''ZW5TdGF0ZX1hbGxDb2x1bW5zU2VsZWN0ZWQoKXt0aGlzLmFsbFNlbGVjdGVkRWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHRzKSxHZShjZyksR2UoYWMpKX0sYy5cdTAyNzVjbXA9TnIoe3R5''@;'; put 'put ''cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVtbi10b2dnbGUiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZuYShPQmUsNSxlbyksMiZhKXtsZXQgaDt4aShoPUVpKCkpJiYoZC5hbGxTZWxlY3RlZEVsZW1lbnQ9aC5maXJzdCl9fSxob3N0VmFyczo0LGhvc3RCaW5kaW5n''@;'; put 'put ''czpmdW5jdGlvbihhLGQpezImYSYmeHIoImNvbHVtbi1zd2l0Y2gtd3JhcHBlciIsITApKCJhY3RpdmUiLGQub3BlblN0YXRlKX0sZmVhdHVyZXM6W3ZkKFtyZ10pXSxkZWNsczozLHZhcnM6OCxjb25zdHM6W1siYWxsU2VsZWN0ZWQiLCIiXSxbInJvbGUiLCJidXR0b24iLCJ0eXBlIiwiYnV0''@;'; put 'put ''dG9uIiwiY2xyUG9wb3ZlckFuY2hvciIsIiIsImNsclBvcG92ZXJPcGVuQ2xvc2VCdXR0b24iLCIiLDEsImJ0biIsImJ0bi1zbSIsImNvbHVtbi10b2dnbGUtLWFjdGlvbiJdLFsiY2xhc3MiLCJjb2x1bW4tc3dpdGNoIiwicm9sZSIsImRpYWxvZyIsImNka1RyYXBGb2N1cyIsIiIsMywiaWQi''@;'; put 'put ''LDQsImNsclBvcG92ZXJDb250ZW50IiwiY2xyUG9wb3ZlckNvbnRlbnRBdCIsImNsclBvcG92ZXJDb250ZW50T3V0c2lkZUNsaWNrVG9DbG9zZSIsImNsclBvcG92ZXJDb250ZW50U2Nyb2xsVG9DbG9zZSJdLFsicm9sZSIsImRpYWxvZyIsImNka1RyYXBGb2N1cyIsIiIsMSwiY29sdW1uLXN3''@;'; put 'put ''aXRjaCIsMywiaWQiXSxbMSwic3dpdGNoLWhlYWRlciJdLFsidGFiaW5kZXgiLCItMSIsMSwiY2xyLXNyLW9ubHkiXSxbImNsclBvcG92ZXJDbG9zZUJ1dHRvbiIsIiIsInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwidG9nZ2xlLXN3aXRjaC1jbG9zZS1idXR0''@;'; put 'put ''b24iXSxbInNoYXBlIiwid2luZG93LWNsb3NlIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIl0sWzEsImNsci1zci1vbmx5Il0sWzEsInN3aXRjaC1jb250ZW50IiwibGlzdC11bnN0eWxlZCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiLCJuZ0ZvclRyYWNrQnkiXSxbMSwic3dpdGNoLWZvb3RlciJdLFsz''@;'; put 'put ''LCJjbHJBbGxTZWxlY3RlZCJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLDMsIm5nTW9kZWxDaGFuZ2UiLCJkaXNhYmxlZCIsIm5nTW9kZWwiXSxbMywibmdUZW1wbGF0ZU91dGxldCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGRlKDAsImJ1dHRvbiIsMSks''@;'; put 'put ''TGUoMSksaGUoKSxndCgyLEhCZSwxNSw5LCJkaXYiLDIpKSwyJmEmJihkcigiYXJpYS1jb250cm9scyIsZC5wb3BvdmVySWQpKCJhcmlhLWV4cGFuZGVkIixkLm9wZW5TdGF0ZSkoImFyaWEtaGFzcG9wdXAiLCJtZW51IiksZmUoKSxScigiICIsZC5jb21tb25TdHJpbmdzLmtleXMucGlja0Nv''@;'; put 'put ''bHVtbnMsIiAiKSxmZSgpLHhlKCJjbHJQb3BvdmVyQ29udGVudCIsZC5vcGVuU3RhdGUpKCJjbHJQb3BvdmVyQ29udGVudEF0IixkLnNtYXJ0UG9zaXRpb24pKCJjbHJQb3BvdmVyQ29udGVudE91dHNpZGVDbGlja1RvQ2xvc2UiLCEwKSgiY2xyUG9wb3ZlckNvbnRlbnRTY3JvbGxUb0Nsb3Nl''@;'; put 'put ''IiwhMCkpfSxkZXBlbmRlbmNpZXM6W3NzLE4xLFZ5LGNzLHVzLFcxLERkLEIxLFFzLFlzLEx4LHcxZSxGeCxQeCxfZGVdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFNkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZXhwYW5kYWJsZVJvd3NDb3VudD1hLGEmJmEucmVnaXN0''@;'; put 'put ''ZXIoKX1uZ09uRGVzdHJveSgpe3RoaXMuZXhwYW5kYWJsZVJvd3NDb3VudCYmdGhpcy5leHBhbmRhYmxlUm93c0NvdW50LnVucmVnaXN0ZXIoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoWXksOCkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpj''@;'; put 'put ''LHNlbGVjdG9yczpbWyIiLCJjbHJJZkV4cGFuZGVkIiwiIl1dfSksY30pKCksbk89KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnNlbGVjdGlvbj1hLHRoaXMuZGV0YWlsU2VydmljZT1kLHRoaXMuY29sdW1uc1NlcnZpY2U9aCx0aGlzLmNvbW1vblN0cmluZ3M9Zix0''@;'; put 'put ''aGlzLlNFTEVDVElPTl9UWVBFPWhsfWdldCBoYXNIaWRlYWJsZUNvbHVtbnMoKXtyZXR1cm4gdGhpcy5jb2x1bW5zU2VydmljZS5oYXNIaWRlYWJsZUNvbHVtbnN9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHF5KSxHZSgkZiksR2UoY2cpLEdl''@;'; put 'put ''KHRzKSl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1kZy1mb290ZXIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJnhyKCJkYXRhZ3JpZC1mb290ZXIiLCEwKX0sbmdDb250ZW50U2VsZWN0b3JzOkJCZSxkZWNsczozLHZhcnM6''@;'; put 'put ''Mixjb25zdHM6W1s0LCJuZ0lmIl0sWzEsImNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQiXSxbMSwiZGF0YWdyaWQtZm9vdGVyLXNlbGVjdCJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLCJjaGVja2VkIiwiY2hlY2tlZCIsImRpc2FibGVkIiwiIl0sWzEsImNsci1zci1v''@;'; put 'put ''bmx5Il0sWzEsImRhdGFncmlkLWZvb3Rlci1kZXNjcmlwdGlvbiJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGxvKFZCZSksZ3QoMCxqQmUsOCwyLCJuZy1jb250YWluZXIiLDApKDEsVUJlLDQsMSwibmctY29udGFpbmVyIiwwKSxXcigyKSksMiZhJiYoeGUoIm5nSWYiLGQuc2Vs''@;'; put 'put ''ZWN0aW9uLnNlbGVjdGlvblR5cGU9PT1kLlNFTEVDVElPTl9UWVBFLk11bHRpJiZkLnNlbGVjdGlvbi5jdXJyZW50Lmxlbmd0aD4wKSxmZSgpLHhlKCJuZ0lmIiwhZC5kZXRhaWxTZXJ2aWNlLmlzT3BlbikpfSxkZXBlbmRlbmNpZXM6W3lvLHVzLFcxLERkLHdkZV0sZW5jYXBzdWxhdGlvbjoy''@;'; put 'put ''fSksY30pKCk7Y29uc3QgY0c9bmV3IFN0KCJDT0xVTU5fU1RBVEUiKSx2WmU9e3Byb3ZpZGU6Y0csdXNlRmFjdG9yeTpmdW5jdGlvbiBtWmUoKXtyZXR1cm4gbmV3IFFyKHtjaGFuZ2VzOltdfSl9fTtsZXQgS3g9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnBhZ2U9YSx0aGlz''@;'; put 'put ''LnBhZ2VTaXplT3B0aW9uc0lkPVN1KCl9bmdPbkluaXQoKXsoIXRoaXMucGFnZVNpemVPcHRpb25zfHwwPT09dGhpcy5wYWdlU2l6ZU9wdGlvbnMubGVuZ3RoKSYmKHRoaXMucGFnZVNpemVPcHRpb25zPVt0aGlzLnBhZ2Uuc2l6ZV0pfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7''@;'; put 'put ''cmV0dXJuIG5ldyhhfHxjKShHZSh3bSkpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItZGctcGFnZS1zaXplIl1dLGlucHV0czp7cGFnZVNpemVPcHRpb25zOltabi5Ob25lLCJjbHJQYWdlU2l6ZU9wdGlvbnMiLCJwYWdlU2l6ZU9wdGlvbnMiXSxwYWdlU2l6ZU9w''@;'; put 'put ''dGlvbnNJZDpbWm4uTm9uZSwiY2xyUGFnZVNpemVPcHRpb25zSWQiLCJwYWdlU2l6ZU9wdGlvbnNJZCJdfSxuZ0NvbnRlbnRTZWxlY3RvcnM6eWEsZGVjbHM6NSx2YXJzOjYsY29uc3RzOltbMywiZm9yIl0sWzEsImNsci1zZWxlY3Qtd3JhcHBlciJdLFszLCJuZ01vZGVsQ2hhbmdlIiwiaWQi''@;'; put 'put ''LCJuZ01vZGVsIl0sWzMsIm5nVmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJuZ1ZhbHVlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYobG8oKSxkZSgwLCJsYWJlbCIsMCksV3IoMSksaGUoKSxkZSgyLCJkaXYiLDEpKDMsInNlbGVjdCIsMikscGkoIm5nTW9kZWxDaGFu''@;'; put 'put ''Z2UiLGZ1bmN0aW9uKGYpe3JldHVybiB2aShkLnBhZ2Uuc2l6ZSxmKXx8KGQucGFnZS5zaXplPWYpLGZ9KSxndCg0LFpCZSwyLDIsIm9wdGlvbiIsMyksaGUoKSgpKSwyJmEmJih4ZSgiZm9yIixkLnBhZ2VTaXplT3B0aW9uc0lkKSxmZSgzKSx4cigiY2xyLXBhZ2Utc2l6ZS1zZWxlY3QiLCEw''@;'; put 'put ''KSx4ZSgiaWQiLGQucGFnZVNpemVPcHRpb25zSWQpLGZpKCJuZ01vZGVsIixkLnBhZ2Uuc2l6ZSksZmUoKSx4ZSgibmdGb3JPZiIsZC5wYWdlU2l6ZU9wdGlvbnMpKX0sZGVwZW5kZW5jaWVzOltzcyx1cyxVZixaZix6ZixRcyxZc10sZW5jYXBzdWxhdGlvbjoyfSksY30pKCksck89KCgpPT57''@;'; put 'put ''Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5wYWdlPWEsdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5kZXRhaWxTZXJ2aWNlPWgsdGhpcy5jdXJyZW50Q2hhbmdlZD1uZXcgcXIoITEpLGEuYWN0aXZhdGVkPSEwfWdldCBwYWdlU2l6ZSgpe3JldHVybiB0aGlzLnBhZ2Uuc2l6ZX1z''@;'; put 'put ''ZXQgcGFnZVNpemUoYSl7Im51bWJlciI9PXR5cGVvZiBhJiYodGhpcy5wYWdlLnNpemU9YSl9Z2V0IHRvdGFsSXRlbXMoKXtyZXR1cm4gdGhpcy5wYWdlLnRvdGFsSXRlbXN9c2V0IHRvdGFsSXRlbXMoYSl7Im51bWJlciI9PXR5cGVvZiBhJiYodGhpcy5wYWdlLnRvdGFsSXRlbXM9YSl9Z2V0''@;'; put 'put ''IGxhc3RQYWdlKCl7cmV0dXJuIHRoaXMucGFnZS5sYXN0fXNldCBsYXN0UGFnZShhKXsibnVtYmVyIj09dHlwZW9mIGEmJih0aGlzLnBhZ2UubGFzdD1hKX1nZXQgY3VycmVudFBhZ2UoKXtyZXR1cm4gdGhpcy5wYWdlLmN1cnJlbnR9c2V0IGN1cnJlbnRQYWdlKGEpeyJudW1iZXIiPT10eXBl''@;'; put 'put ''b2YgYSYmKHRoaXMucGFnZS5jdXJyZW50PWEpfWdldCBmaXJzdEl0ZW0oKXtyZXR1cm4gdGhpcy5wYWdlLmZpcnN0SXRlbX1nZXQgbGFzdEl0ZW0oKXtyZXR1cm4gdGhpcy5wYWdlLmxhc3RJdGVtfWdldCBtaWRkbGVQYWdlcygpe2NvbnN0IGE9W107cmV0dXJuIHRoaXMucGFnZS5jdXJyZW50''@;'; put 'put ''PjEmJmEucHVzaCh0aGlzLnBhZ2UuY3VycmVudC0xKSxhLnB1c2godGhpcy5wYWdlLmN1cnJlbnQpLHRoaXMucGFnZS5jdXJyZW50PHRoaXMucGFnZS5sYXN0JiZhLnB1c2godGhpcy5wYWdlLmN1cnJlbnQrMSksYX1uZ09uSW5pdCgpe3RoaXMucGFnZS5zaXplfHwodGhpcy5wYWdlLnNpemU9''@;'; put 'put ''MTApLHRoaXMuX3BhZ2VTdWJzY3JpcHRpb249dGhpcy5wYWdlLmNoYW5nZS5zdWJzY3JpYmUoYT0+dGhpcy5jdXJyZW50Q2hhbmdlZC5lbWl0KGEpKX1uZ09uRGVzdHJveSgpe3RoaXMucGFnZS5yZXNldFBhZ2VTaXplKCEwKSx0aGlzLl9wYWdlU3Vic2NyaXB0aW9uJiZ0aGlzLl9wYWdlU3Vi''@;'; put 'put ''c2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9cHJldmlvdXMoKXt0aGlzLnBhZ2UucHJldmlvdXMoKX1uZXh0KCl7dGhpcy5wYWdlLm5leHQoKX12ZXJpZnlDdXJyZW50UGFnZShhKXtwYXJzZUludChhLnRhcmdldC52YWx1ZSwxMCkhPT10aGlzLnBhZ2UuY3VycmVudCYmKGEudGFyZ2V0LnZhbHVl''@;'; put 'put ''PXRoaXMucGFnZS5jdXJyZW50KX11cGRhdGVDdXJyZW50UGFnZShhKXtjb25zdCBkPXBhcnNlSW50KGEudGFyZ2V0LnZhbHVlLDEwKTtpc05hTihkKXx8KHRoaXMucGFnZS5jdXJyZW50PWQ8MT8xOmQ+dGhpcy5wYWdlLmxhc3Q/dGhpcy5wYWdlLmxhc3Q6ZCksdGhpcy5jdXJyZW50UGFnZUlu''@;'; put 'put ''cHV0UmVmLm5hdGl2ZUVsZW1lbnQudmFsdWU9dGhpcy5wYWdlLmN1cnJlbnQudG9TdHJpbmcoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2Uod20pLEdlKHRzKSxHZSgkZikpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJj''@;'; put 'put ''bHItZGctcGFnaW5hdGlvbiJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZsYShoLEt4LDUpLDImYSl7bGV0IGY7eGkoZj1FaSgpKSYmKGQuX3BhZ2VTaXplQ29tcG9uZW50PWYuZmlyc3QpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZuYShXQmUs''@;'; put 'put ''NSksMiZhKXtsZXQgaDt4aShoPUVpKCkpJiYoZC5jdXJyZW50UGFnZUlucHV0UmVmPWguZmlyc3QpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJnhyKCJwYWdpbmF0aW9uIiwhMCl9LGlucHV0czp7ZGlzYWJsZUN1cnJlbnRQYWdlSW5wdXQ6W1puLk5vbmUs''@;'; put 'put ''ImNsckRnUGFnZUlucHV0RGlzYWJsZWQiLCJkaXNhYmxlQ3VycmVudFBhZ2VJbnB1dCJdLHBhZ2VTaXplOltabi5Ob25lLCJjbHJEZ1BhZ2VTaXplIiwicGFnZVNpemUiXSx0b3RhbEl0ZW1zOltabi5Ob25lLCJjbHJEZ1RvdGFsSXRlbXMiLCJ0b3RhbEl0ZW1zIl0sbGFzdFBhZ2U6W1puLk5v''@;'; put 'put ''bmUsImNsckRnTGFzdFBhZ2UiLCJsYXN0UGFnZSJdLGN1cnJlbnRQYWdlOltabi5Ob25lLCJjbHJEZ1BhZ2UiLCJjdXJyZW50UGFnZSJdfSxvdXRwdXRzOntjdXJyZW50Q2hhbmdlZDoiY2xyRGdQYWdlQ2hhbmdlIn0sbmdDb250ZW50U2VsZWN0b3JzOkdCZSxkZWNsczoyLHZhcnM6Mixjb25z''@;'; put 'put ''dHM6W1sicmVhZE9ubHkiLCIiXSxbImN1cnJlbnRQYWdlSW5wdXQiLCIiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJwYWdpbmF0aW9uLXNpemUiLDQsIm5nSWYiXSxbMSwicGFnaW5hdGlvbi1kZXNjcmlwdGlvbiJdLFsiY2xhc3MiLCJwYWdpbmF0aW9uLWxpc3QiLDQsIm5nSWYiXSxbMSwicGFn''@;'; put 'put ''aW5hdGlvbi1zaXplIl0sWzEsInBhZ2luYXRpb24tbGlzdCJdLFsidHlwZSIsImJ1dHRvbiIsMSwicGFnaW5hdGlvbi1maXJzdCIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsxLCJjbHItc3Itb25seSJdLFsic2hhcGUiLCJzdGVwLWZvcndhcmQtMiIsImRpcmVjdGlvbiIsImRvd24iXSxbInR5''@;'; put 'put ''cGUiLCJidXR0b24iLDEsInBhZ2luYXRpb24tcHJldmlvdXMiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJsZWZ0Il0sWyJ0eXBlIiwidGV4dCIsImNsYXNzIiwicGFnaW5hdGlvbi1jdXJyZW50IGNsci1pbnB1dCIsMywic2l6ZSIsInZhbHVl''@;'; put 'put ''Iiwia2V5ZG93bi5lbnRlciIsImJsdXIiLDQsIm5nSWYiLCJuZ0lmRWxzZSJdLFsidHlwZSIsImJ1dHRvbiIsMSwicGFnaW5hdGlvbi1uZXh0IiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJzaGFwZSIsImFuZ2xlIiwiZGlyZWN0aW9uIiwicmlnaHQiXSxbInR5cGUiLCJidXR0b24iLDEsInBh''@;'; put 'put ''Z2luYXRpb24tbGFzdCIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsic2hhcGUiLCJzdGVwLWZvcndhcmQtMiIsImRpcmVjdGlvbiIsInVwIl0sWyJ0eXBlIiwidGV4dCIsMSwicGFnaW5hdGlvbi1jdXJyZW50IiwiY2xyLWlucHV0IiwzLCJrZXlkb3duLmVudGVyIiwiYmx1ciIsInNpemUiLCJ2''@;'; put 'put ''YWx1ZSJdLFsxLCJwYWdpbmF0aW9uLWRlc2NyaXB0aW9uLWNvbXBhY3QiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihsbyhZQmUpLGd0KDAsSkJlLDUsMiwibmctY29udGFpbmVyIiwyKSgxLFFCZSwxNCwxMCwibmctY29udGFpbmVyIiwyKSksMiZhJiYoeGUoIm5nSWYiLCFkLmRl''@;'; put 'put ''dGFpbFNlcnZpY2UuaXNPcGVuKSxmZSgpLHhlKCJuZ0lmIixkLmRldGFpbFNlcnZpY2UuaXNPcGVuKSl9LGRlcGVuZGVuY2llczpbeW8sY3NdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLGs3PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCl7dGhpcy5lbD1hLHRoaXMu''@;'; put 'put ''cmVuZGVyZXI9ZCx0aGlzLmRvbUFkYXB0ZXI9Zix0aGlzLmNvbHVtblJlc2l6ZXJTZXJ2aWNlPXYsdGhpcy5jb2x1bW5zU2VydmljZT1NLHRoaXMuY29sdW1uU3RhdGU9RCx0aGlzLnJlc2l6ZUVtaXR0ZXI9bmV3IHFyLHRoaXMud2lkdGhTZXQ9ITEsdGhpcy5hdXRvU2V0PSExLHRoaXMuc3Vi''@;'; put 'put ''c2NyaXB0aW9ucz1bXSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChoLmZpbHRlclJlbmRlclN0ZXBzKEtmLkNMRUFSX1dJRFRIUykuc3Vic2NyaWJlKCgpPT50aGlzLmNsZWFyV2lkdGgoKSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmli''@;'; put 'put ''ZSgpKX1nZXRDb2x1bW5XaWR0aFN0YXRlKCl7Y29uc3QgYT10aGlzLmRldGVjdFN0cmljdFdpZHRoKCk7cmV0dXJue3dpZHRoOnRoaXMuY29tcHV0ZVdpZHRoKGEpLHN0cmljdFdpZHRoOmF9fXNldENvbHVtblN0YXRlKGEpe3RoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1uc1thXT10aGlzLmNv''@;'; put 'put ''bHVtblN0YXRlfXNldFdpZHRoKGEpe2Euc3RyaWN0V2lkdGg/KHRoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXplZEJ5JiYodGhpcy5yZXNpemVFbWl0dGVyLmVtaXQoYS53aWR0aCksdGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixhLndp''@;'; put 'put ''ZHRoKyJweCIpLHRoaXMud2lkdGhTZXQ9ITEpLHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LEd5KSx0aGlzLmF1dG9TZXQ9ITEpOih0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWwubmF0aXZlRWxlbWVudCxHeSksdGhpcy5yZW5kZXJlci5zZXRT''@;'; put 'put ''dHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIndpZHRoIixhLndpZHRoKyJweCIpLHRoaXMud2lkdGhTZXQ9ITAsdGhpcy5hdXRvU2V0PSEwKX1zZXRIaWRkZW4oYSl7YS5oaWRkZW4/dGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsR3gpOnRoaXMucmVuZGVy''@;'; put 'put ''ZXIucmVtb3ZlQ2xhc3ModGhpcy5lbC5uYXRpdmVFbGVtZW50LEd4KX1jbGVhcldpZHRoKCl7dGhpcy53aWR0aFNldCYmIXRoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXplZEJ5JiZ0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwid2lkdGgiLG51bGwp''@;'; put 'put ''LHRoaXMuYXV0b1NldCYmdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsR3kpfWRldGVjdFN0cmljdFdpZHRoKCl7cmV0dXJuIHRoaXMuY29sdW1uUmVzaXplclNlcnZpY2UucmVzaXplZEJ5P3RoaXMuY29sdW1uUmVzaXplclNlcnZpY2Uud2lkdGhBZnRl''@;'; put 'put ''clJlc2l6ZTp0aGlzLmF1dG9TZXQ/MDp0aGlzLmRvbUFkYXB0ZXIudXNlckRlZmluZWRXaWR0aCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQpfWNvbXB1dGVXaWR0aChhKXtsZXQgZD1hO3JldHVybiBkfHwoZD10aGlzLmRvbUFkYXB0ZXIuc2Nyb2xsV2lkdGgodGhpcy5lbC5uYXRpdmVFbGVtZW50''@;'; put 'put ''KSksZH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoZW8pLEdlKEVhKSxHZShUNyksR2UocG0pLEdlKG5HKSxHZShjZyksR2UoY0cpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRnLWNvbHVtbiJdXSxvdXRwdXRz''@;'; put 'put ''OntyZXNpemVFbWl0dGVyOiJjbHJEZ0NvbHVtblJlc2l6ZSJ9LGZlYXR1cmVzOltwbyhbbkcsdlplXSldfSksY30pKCksd1plPSgoKT0+e2NsYXNzIGN7dXNlckRlZmluZWRXaWR0aChhKXtyZXR1cm4gMH1zY3JvbGxCYXJXaWR0aChhKXtyZXR1cm4gMH1zY3JvbGxXaWR0aChhKXtyZXR1cm4g''@;'; put 'put ''MH1jb21wdXRlZEhlaWdodChhKXtyZXR1cm4gMH1jbGllbnRSZWN0KGEpe3JldHVybnt0b3A6MCxib3R0b206MCxsZWZ0OjAscmlnaHQ6MCx3aWR0aDowLGhlaWdodDowfX1taW5XaWR0aChhKXtyZXR1cm4gMH1mb2N1cyhhKXt9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1''@;'; put 'put ''cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpO2NvbnN0IENaZT1jPT5YcyhjKT9uZXcgcG06bmV3IHdaZTtsZXQgWHk9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSxELFosbmUsY2UsYmUsRWUpe3Ro''@;'; put 'put ''aXMuZGF0YWdyaWQ9YSx0aGlzLm9yZ2FuaXplcj1kLHRoaXMuaXRlbXM9aCx0aGlzLnBhZ2U9Zix0aGlzLmVsPXYsdGhpcy5yZW5kZXJlcj1NLHRoaXMudGFibGVTaXplU2VydmljZT1aLHRoaXMuY29sdW1uc1NlcnZpY2U9bmUsdGhpcy5uZ1pvbmU9Y2UsdGhpcy5rZXlOYXZpZ2F0aW9uPWJl''@;'; put 'put ''LHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWY9RWUsdGhpcy5faGVpZ2h0U2V0PSExLHRoaXMuc2hvdWxkU3RhYmlsaXplQ29sdW1ucz0hMCx0aGlzLnN1YnNjcmlwdGlvbnM9W10sdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlcj1udWxsLHRoaXMuY29sdW1uc1NpemVzU3RhYmxlPSExLHRoaXMuc3Vi''@;'; put 'put ''c2NyaXB0aW9ucy5wdXNoKGQuZmlsdGVyUmVuZGVyU3RlcHMoS2YuQ09NUFVURV9DT0xVTU5fV0lEVEhTKS5zdWJzY3JpYmUoKCk9PnRoaXMuY29tcHV0ZUhlYWRlcnNXaWR0aCgpKSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goZi5zaXplQ2hhbmdlLnN1YnNjcmliZSgoKT0+e3RoaXMuX2hl''@;'; put 'put ''aWdodFNldCYmdGhpcy5yZXNldERhdGFncmlkSGVpZ2h0KCl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goRC5zdGF0ZUNoYW5nZS5zdWJzY3JpYmUoQmU9PnRoaXMudG9nZ2xlRGV0YWlsUGFuZShCZSkpKSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChoLmNoYW5nZS5zdWJzY3JpYmUoKCk9''@;'; put 'put ''PnRoaXMuc2hvdWxkU3RhYmlsaXplQ29sdW1ucz0hMCkpfW5nT25Jbml0KCl7dGhpcy5jb2x1bW5zU2VydmljZS5jb2x1bW5zU3RhdGVDaGFuZ2Uuc3Vic2NyaWJlKGE9PnRoaXMuY29sdW1uU3RhdGVDaGFuZ2VkKGEpKSxudWxsPT09dGhpcy5lbC5uYXRpdmVFbGVtZW50Lm9mZnNldFBhcmVu''@;'; put 'put ''dCYmKHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXI9bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChbYV0pPT57KHRoaXMuZWwubmF0aXZlRWxlbWVudC5vZmZzZXRQYXJlbnR8fGEuaXNJbnRlcnNlY3RpbmcpJiZ0aGlzLmNvbHVtbnNTaXplc1N0YWJsZSYmKHRoaXMuY29sdW1uc1NpemVzU3Rh''@;'; put 'put ''YmxlPSExLHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCksdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5kaXNjb25uZWN0KCkpfSksdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlci5vYnNlcnZlKHRoaXMuZWwubmF0aXZlRWxlbWVudCkpfW5nQWZ0ZXJDb250ZW50SW5pdCgp''@;'; put 'put ''e3RoaXMuc2V0dXBDb2x1bW5zKCksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5oZWFkZXJzLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57dGhpcy5zZXR1cENvbHVtbnMoKSx0aGlzLmNvbHVtbnNTaXplc1N0YWJsZT0hMSx0aGlzLnN0YWJpbGl6ZUNvbHVtbnMoKX0pKX1uZ0FmdGVyVmll''@;'; put 'put ''d0luaXQoKXt0aGlzLnRhYmxlU2l6ZVNlcnZpY2UudGFibGU9dGhpcy5lbH1uZ0FmdGVyVmlld0NoZWNrZWQoKXt0aGlzLnNob3VsZFN0YWJpbGl6ZUNvbHVtbnMmJnRoaXMuc3RhYmlsaXplQ29sdW1ucygpLHRoaXMuc2hvdWxkQ29tcHV0ZUhlaWdodCgpJiZ0aGlzLm5nWm9uZS5ydW5PdXRz''@;'; put 'put ''aWRlQW5ndWxhcigoKT0+e3NldFRpbWVvdXQoKCk9Pnt0aGlzLmNvbXB1dGVEYXRhZ3JpZEhlaWdodCgpfSl9KX1uZ09uRGVzdHJveSgpe3RoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSksdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlcj8uZGlzY29ubmVjdCgp''@;'; put 'put ''fXRvZ2dsZURldGFpbFBhbmUoYSl7dGhpcy5oZWFkZXJzJiYoYSYmIXRoaXMuY29sdW1uc1NlcnZpY2UuaGFzQ2FjaGUoKT8odGhpcy5jb2x1bW5zU2VydmljZS5jYWNoZSgpLHRoaXMuY29sdW1uc1NlcnZpY2UudmlzaWJsZUNvbHVtbnMuZm9yRWFjaCgoZCxoKT0+e2g+MCYmdGhpcy5jb2x1''@;'; put 'put ''bW5zU2VydmljZS5lbWl0U3RhdGVDaGFuZ2VBdChkLmNvbHVtbkluZGV4LHtjaGFuZ2VzOltZMS5ISURERU5dLGhpZGRlbjphfSl9KSk6YXx8dGhpcy5jb2x1bW5zU2VydmljZS5yZXNldFRvTGFzdENhY2hlKCkpfXNldHVwQ29sdW1ucygpe3RoaXMuaGVhZGVycy5mb3JFYWNoKChhLGQpPT5h''@;'; put 'put ''LnNldENvbHVtblN0YXRlKGQpKSx0aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMuc3BsaWNlKHRoaXMuaGVhZGVycy5sZW5ndGgpLHRoaXMuY29sdW1uc1NlcnZpY2UuY29sdW1ucy5mb3JFYWNoKChhLGQpPT57dGhpcy5jb2x1bW5zU2VydmljZS5lbWl0U3RhdGVDaGFuZ2UoYSx7Y2hhbmdl''@;'; put 'put ''czpbWTEuSU5JVElBTElaRV0sY29sdW1uSW5kZXg6ZH0pfSl9c2hvdWxkQ29tcHV0ZUhlaWdodCgpe3JldHVybiF0aGlzLl9oZWlnaHRTZXQmJnRoaXMucGFnZS5zaXplPjAmJnRoaXMuaXRlbXMuZGlzcGxheWVkLmxlbmd0aD09PXRoaXMucGFnZS5zaXplfWNvbXB1dGVEYXRhZ3JpZEhlaWdo''@;'; put 'put ''dCgpe2NvbnN0IGE9d2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5lbC5uYXRpdmVFbGVtZW50KS5oZWlnaHQ7dGhpcy5yZW5kZXJlci5zZXRTdHlsZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImhlaWdodCIsYSksdGhpcy5faGVpZ2h0U2V0PSEwfXJlc2V0RGF0YWdyaWRIZWlnaHQoKXt0''@;'; put 'put ''aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuZWwubmF0aXZlRWxlbWVudCwiaGVpZ2h0IiwiIiksdGhpcy5faGVpZ2h0U2V0PSExfWNvbXB1dGVIZWFkZXJzV2lkdGgoKXtjb25zdCBhPXRoaXMuaGVhZGVycy5sZW5ndGgsZD10aGlzLmhlYWRlcnMubWFwKGY9PmYuZ2V0Q29sdW1uV2lkdGhT''@;'; put 'put ''dGF0ZSgpKTtsZXQgaD0hMDt0aGlzLmhlYWRlcnMuZm9yRWFjaCgoZix2KT0+e2NvbnN0IE09e2NoYW5nZXM6W1kxLldJRFRIXSwuLi5kW3ZdfTtNLnN0cmljdFdpZHRofHwoaD0hMSksYT09PXYrMSYmaCYmKE0uc3RyaWN0V2lkdGg9MCksdGhpcy5jb2x1bW5zU2VydmljZS5lbWl0U3RhdGVD''@;'; put 'put ''aGFuZ2VBdCh2LE0pfSl9Y29sdW1uU3RhdGVDaGFuZ2VkKGEpe2lmKCF0aGlzLmhlYWRlcnN8fG51bGw9PWEuY29sdW1uSW5kZXgpcmV0dXJuO2NvbnN0IGQ9YS5jb2x1bW5JbmRleDthLmNoYW5nZXMmJmEuY2hhbmdlcy5sZW5ndGgmJmEuY2hhbmdlcy5mb3JFYWNoKGg9Pntzd2l0Y2goaCl7''@;'; put 'put ''Y2FzZSBZMS5XSURUSDp0aGlzLmhlYWRlcnMuZ2V0KGQpLnNldFdpZHRoKGEpLHRoaXMucm93cy5mb3JFYWNoKGY9PntmPy5jZWxscy5sZW5ndGg9PT10aGlzLmNvbHVtbnNTZXJ2aWNlLmNvbHVtbnMubGVuZ3RoJiYoZi5jZWxscy5nZXQoZCkuc2V0V2lkdGgoYSksZi5leHBhbmRhYmxlUm93''@;'; put 'put ''Py5jZWxscy5nZXQoZCk/LnNldFdpZHRoKGEpKX0pO2JyZWFrO2Nhc2UgWTEuSElEREVOOnRoaXMuaGVhZGVycy5nZXQoZCkuc2V0SGlkZGVuKGEpLHRoaXMucm93cy5mb3JFYWNoKGY9PntmLmNlbGxzJiZmLmNlbGxzLmxlbmd0aCYmKGYuY2VsbHMuZ2V0KGQpLnNldEhpZGRlbihhKSxmLmV4''@;'; put 'put ''cGFuZGFibGVSb3c/LmNlbGxzLmdldChkKT8uc2V0SGlkZGVuKGEpKX0pLHRoaXMudXBkYXRlQ29sdW1uU2VwYXJhdG9yc1Zpc2liaWxpdHkoKSx0aGlzLmtleU5hdmlnYXRpb24ucmVzZXRLZXlHcmlkKCk7YnJlYWs7Y2FzZSBZMS5JTklUSUFMSVpFOmEuaGlkZWFibGUmJmEuaGlkZGVuJiYo''@;'; put 'put ''dGhpcy5oZWFkZXJzLmdldChkKS5zZXRIaWRkZW4oYSksdGhpcy5yb3dzLmZvckVhY2goZj0+e2Yuc2V0Q2VsbHNTdGF0ZSgpLGYuZXhwYW5kYWJsZVJvdz8uc2V0Q2VsbHNTdGF0ZSgpfSkpfX0pfXN0YWJpbGl6ZUNvbHVtbnMoKXt0aGlzLmNvbHVtbnNTaXplc1N0YWJsZXx8dGhpcy5pdGVt''@;'; put 'put ''cy5kaXNwbGF5ZWQubGVuZ3RoPjAmJih0aGlzLm9yZ2FuaXplci5yZXNpemUoKSx0aGlzLmNvbHVtbnNTaXplc1N0YWJsZT0hMCl9dXBkYXRlQ29sdW1uU2VwYXJhdG9yc1Zpc2liaWxpdHkoKXtjb25zdCBhPXRoaXMuZGF0YWdyaWQuY29sdW1ucy5maWx0ZXIoZD0+IWQuaXNIaWRkZW4pO2Eu''@;'; put 'put ''Zm9yRWFjaCgoZCxoKT0+e2g9PT1hLmxlbmd0aC0xP2Quc2hvd1NlcGFyYXRvcj0hMTpkLnNob3dTZXBhcmF0b3J8fChkLnNob3dTZXBhcmF0b3I9ITApfSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKHhtKSxHZShUNyksR2UobGcpLEdlKHdt''@;'; put 'put ''KSxHZShlbyksR2UoRWEpLEdlKCRmKSxHZShyRyksR2UoY2cpLEdlKFlvKSxHZShxTCksR2UoeHMpKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWRhdGFncmlkIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJihsYShoLGs3LDQpLGxh''@;'; put 'put ''KGgsTW0sNCkpLDImYSl7bGV0IGY7eGkoZj1FaSgpKSYmKGQuaGVhZGVycz1mKSx4aShmPUVpKCkpJiYoZC5yb3dzPWYpfX0sZmVhdHVyZXM6W3BvKFt7cHJvdmlkZTpwbSx1c2VGYWN0b3J5OkNaZSxkZXBzOltvYV19XSldfSksY30pKCksU1plPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3Io''@;'; put 'put ''KXtFcy5hZGRJY29ucyhtT2Usdk9lLGd4LGJPZSx2MGUseU9lLGIwZSxfT2Usd09lKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTG8sZVplLHpMLFRzLHVk''@;'; put 'put ''ZSxEYyxNWSxFMix0WmUsZGRlLEZ5LEh4LFBZXX0pLGN9KSgpLE1kZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXN0YWNrLWNvbnRlbnQiXV19KSxj''@;'; put 'put ''fSkoKSx1Rz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fZ2VuZXJhdGVkSWQ9bnVsbCx0aGlzLl9pZD1udWxsfWdldCBpZCgpe3JldHVybiB0aGlzLl9pZH1zZXQgaWQoYSl7dGhpcy5faWQ9InN0cmluZyI9PXR5cGVvZiBhJiYiIiE9PWE/YTp0aGlzLl9nZW5lcmF0ZWRJZCsi''@;'; put 'put ''In1uZ09uSW5pdCgpe3RoaXMuX2dlbmVyYXRlZElkPSJjbHItc3RhY2stbGFiZWwtIitTdSgpLHRoaXMuaWR8fCh0aGlzLl9pZD10aGlzLl9nZW5lcmF0ZWRJZCsiIil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Ocih7dHlw''@;'; put 'put ''ZTpjLHNlbGVjdG9yczpbWyJjbHItc3RhY2stbGFiZWwiXV0saG9zdFZhcnM6MSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJmRyKCJpZCIsZC5pZCl9LGlucHV0czp7aWQ6ImlkIn0sbmdDb250ZW50U2VsZWN0b3JzOnlhLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9u''@;'; put 'put ''KGEsZCl7MSZhJiYobG8oKSxXcigwKSl9LGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLHhkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5wYXJlbnQ9YSx0aGlzLmNvbW1vblN0cmluZ3M9ZCx0aGlzLmV4cGFuZGVkPSExLHRoaXMuZXhwYW5kYWJsZT0hMSx0aGlzLmV4cGFu''@;'; put 'put ''ZGVkQ2hhbmdlPW5ldyBxcighMSksdGhpcy5mb2N1c2VkPSExLHRoaXMudW5pcXVlSWQ9U3UoKSx0aGlzLl9jaGFuZ2VkQ2hpbGRyZW49MCx0aGlzLl9mdWxseUluaXRpYWxpemVkPSExLHRoaXMuX2NoYW5nZWQ9ITEsYSYmYS5hZGRDaGlsZCgpfXNldCBzZXRDaGFuZ2VkVmFsdWUoYSl7dGhp''@;'; put 'put ''cy5fY2hhbmdlZD1hLHRoaXMucGFyZW50JiZ0aGlzLl9mdWxseUluaXRpYWxpemVkJiYoYT90aGlzLnBhcmVudC5fY2hhbmdlZENoaWxkcmVuKys6dGhpcy5wYXJlbnQuX2NoYW5nZWRDaGlsZHJlbi0tKX1nZXQgZ2V0Q2hhbmdlZFZhbHVlKCl7cmV0dXJuIHRoaXMuX2NoYW5nZWR8fHRoaXMu''@;'; put 'put ''X2NoYW5nZWRDaGlsZHJlbj4wJiYhdGhpcy5leHBhbmRlZH1nZXQgb25TdGFja0xhYmVsRm9jdXMoKXtyZXR1cm4gdGhpcy5leHBhbmRhYmxlJiYhdGhpcy5leHBhbmRlZCYmdGhpcy5mb2N1c2VkfWdldCBsYWJlbGxlZEJ5SWQoKXtyZXR1cm4gdGhpcy5zdGFja0Jsb2NrVGl0bGUuaWR9Z2V0''@;'; put 'put ''IGhlYWRpbmdMZXZlbCgpe3JldHVybiB0aGlzLmFyaWFMZXZlbD90aGlzLmFyaWFMZXZlbCsiIjp0aGlzLnBhcmVudD8iNCI6IjMifWdldCBjYXJldERpcmVjdGlvbigpe3JldHVybiB0aGlzLmV4cGFuZGVkPyJkb3duIjoicmlnaHQifWdldCByb2xlKCl7cmV0dXJuIHRoaXMuZXhwYW5kYWJs''@;'; put 'put ''ZT8iYnV0dG9uIjpudWxsfWdldCB0YWJJbmRleCgpe3JldHVybiB0aGlzLmV4cGFuZGFibGU/IjAiOm51bGx9Z2V0IGFyaWFFeHBhbmRlZCgpe3JldHVybiB0aGlzLmV4cGFuZGFibGU/dGhpcy5leHBhbmRlZD8idHJ1ZSI6ImZhbHNlIjpudWxsfW5nT25Jbml0KCl7dGhpcy5fZnVsbHlJbml0''@;'; put 'put ''aWFsaXplZD0hMH1hZGRDaGlsZCgpe3RoaXMuZXhwYW5kYWJsZT0hMH10b2dnbGVFeHBhbmQoYSl7RWRlKGEpfHx0aGlzLmV4cGFuZGFibGUmJih0aGlzLmV4cGFuZGVkPSF0aGlzLmV4cGFuZGVkLHRoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdCh0aGlzLmV4cGFuZGVkKSl9Z2V0U3RhY2tDaGls''@;'; put 'put ''ZHJlbklkKCl7cmV0dXJuIHRoaXMuZXhwYW5kZWQ/YGNsci1zdGFjay1jaGlsZHJlbi0ke3RoaXMudW5pcXVlSWR9YDpudWxsfXByZXZlbnREZWZhdWx0SWZOb3RJbnB1dEV2ZW50KGEpe0VkZShhKXx8YS5wcmV2ZW50RGVmYXVsdCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7''@;'; put 'put ''cmV0dXJuIG5ldyhhfHxjKShHZShjLDEyKSxHZSh0cykpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc3RhY2stYmxvY2siXV0sY29udGVudFF1ZXJpZXM6ZnVuY3Rpb24oYSxkLGgpe2lmKDEmYSYmbGEoaCx1Ryw1KSwyJmEpe2xldCBmO3hpKGY9RWkoKSkmJihk''@;'; put 'put ''LnN0YWNrQmxvY2tUaXRsZT1mLmZpcnN0KX19LGhvc3RWYXJzOjEyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmKGRyKCJyb2xlIiwiaGVhZGluZyIpKCJhcmlhLWxldmVsIixkLmhlYWRpbmdMZXZlbCkseHIoInN0YWNrLWJsb2NrIiwhMCkoInN0YWNrLWJsb2NrLWV4cGFuZGVk''@;'; put 'put ''IixkLmV4cGFuZGVkKSgic3RhY2stYmxvY2stZXhwYW5kYWJsZSIsZC5leHBhbmRhYmxlKSgic3RhY2stYmxvY2stY2hhbmdlZCIsZC5nZXRDaGFuZ2VkVmFsdWUpKCJvbi1mb2N1cyIsZC5vblN0YWNrTGFiZWxGb2N1cykpfSxpbnB1dHM6e2V4cGFuZGVkOltabi5Ob25lLCJjbHJTYkV4cGFu''@;'; put 'put ''ZGVkIiwiZXhwYW5kZWQiXSxleHBhbmRhYmxlOltabi5Ob25lLCJjbHJTYkV4cGFuZGFibGUiLCJleHBhbmRhYmxlIl0sYXJpYUxldmVsOltabi5Ob25lLCJjbHJTdGFja1ZpZXdMZXZlbCIsImFyaWFMZXZlbCJdLHNldENoYW5nZWRWYWx1ZTpbWm4uTm9uZSwiY2xyU2JOb3RpZnlDaGFuZ2Ui''@;'; put 'put ''LCJzZXRDaGFuZ2VkVmFsdWUiXX0sb3V0cHV0czp7ZXhwYW5kZWRDaGFuZ2U6ImNsclNiRXhwYW5kZWRDaGFuZ2UifSxuZ0NvbnRlbnRTZWxlY3RvcnM6aWplLGRlY2xzOjksdmFyczo5LGNvbnN0czpbWzEsInN0YWNrLWJsb2NrLWxhYmVsIiwzLCJjbGljayIsImtleXVwLmVudGVyIiwia2V5''@;'; put 'put ''dXAuc3BhY2UiLCJrZXlkb3duLnNwYWNlIiwiZm9jdXMiLCJibHVyIiwiaWQiXSxbInNoYXBlIiwiYW5nbGUiLCJjbGFzcyIsInN0YWNrLWJsb2NrLWNhcmV0Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci1zci1vbmx5Iiw0LCJuZ0lmIl0sWzEsInN0YWNrLXZpZXcta2V5Il0sWzEsInN0YWNr''@;'; put 'put ''LWJsb2NrLWNvbnRlbnQiXSxbMSwic3RhY2stY2hpbGRyZW4iLDMsImNsckV4cGFuZFRyaWdnZXIiXSxbInJvbGUiLCJyZWdpb24iLDMsImhlaWdodCIsNCwibmdJZiJdLFsic2hhcGUiLCJhbmdsZSIsMSwic3RhY2stYmxvY2stY2FyZXQiXSxbMSwiY2xyLXNyLW9ubHkiXSxbInJvbGUiLCJy''@;'; put 'put ''ZWdpb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihsbyhyamUpLGRlKDAsImRpdiIsMCksRnQoImNsaWNrIixmdW5jdGlvbihmKXtyZXR1cm4gZC50b2dnbGVFeHBhbmQoZil9KSgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnRvZ2dsZUV4cGFuZChmKX0pKCJr''@;'; put 'put ''ZXl1cC5zcGFjZSIsZnVuY3Rpb24oZil7cmV0dXJuIGQudG9nZ2xlRXhwYW5kKGYpfSkoImtleWRvd24uc3BhY2UiLGZ1bmN0aW9uKGYpe3JldHVybiBkLnByZXZlbnREZWZhdWx0SWZOb3RJbnB1dEV2ZW50KGYpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiBkLmZvY3VzZWQ9ITB9KSgi''@;'; put 'put ''Ymx1ciIsZnVuY3Rpb24oKXtyZXR1cm4gZC5mb2N1c2VkPSExfSksZ3QoMSxvamUsMSwxLCJjZHMtaWNvbiIsMSkoMixhamUsMiwxLCJzcGFuIiwyKSxkZSgzLCJkaXYiLDMpLFdyKDQpLGhlKCksZGUoNSwiZGl2Iiw0KSxXcig2LDEpLGhlKCkoKSxkZSg3LCJjbHItZXhwYW5kYWJsZS1hbmlt''@;'; put 'put ''YXRpb24iLDUpLGd0KDgsc2plLDIsNCwiZGl2Iiw2KSxoZSgpKSwyJmEmJih4ZSgiaWQiLGQudW5pcXVlSWQpLGRyKCJyb2xlIixkLnJvbGUpKCJ0YWJpbmRleCIsZC50YWJJbmRleCkoImFyaWEtZXhwYW5kZWQiLGQuYXJpYUV4cGFuZGVkKSgiYXJpYS1jb250cm9scyIsZC5nZXRTdGFja0No''@;'; put 'put ''aWxkcmVuSWQoKSksZmUoKSx4ZSgibmdJZiIsZC5leHBhbmRhYmxlKSxmZSgpLHhlKCJuZ0lmIixkLmdldENoYW5nZWRWYWx1ZSksZmUoNSkseGUoImNsckV4cGFuZFRyaWdnZXIiLGQuZXhwYW5kZWQpLGZlKCkseGUoIm5nSWYiLGQuZXhwYW5kZWQpKX0sZGVwZW5kZW5jaWVzOlt5byxjcyxS''@;'; put 'put ''TF0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfSJdfSksY30pKCk7ZnVuY3Rpb24gRWRlKGMpe2NvbnN0IGw9Yz8udGFyZ2V0O3JldHVybiEhbD8udGFnTmFtZSYmWyJJTlBVVCIsIlRFWFRBUkVBIiwiQlVUVE9OIiwiQSIsIlNFTEVDVCIsIk9QVElPTiJdLmluY2x1''@;'; put 'put ''ZGVzKGwudGFnTmFtZSl9bGV0IGRHPSgoKT0+e2NsYXNzIGN7fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItc3RhY2stdmlldyJdXSxuZ0NvbnRlbnRTZWxlY3RvcnM6Y2plLGRl''@;'; put 'put ''Y2xzOjMsdmFyczowLGNvbnN0czpbWzEsInN0YWNrLXZpZXciXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihsbyhsamUpLFdyKDApLGRlKDEsImRpdiIsMCksV3IoMiwxKSxoZSgpKX0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfSJdfSksY30pKCkseFpl''@;'; put 'put ''PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtFcy5hZGRJY29ucyh3eSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xvLERjLFRzLGRkZV19KSxjfSko''@;'; put 'put ''KSxENz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5zZWxlY3RhYmxlPSExLHRoaXMuZWFnZXI9ITAsdGhpcy5jaGlsZHJlbkZldGNoZWQ9bmV3IFdufX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tl''@;'; put 'put ''bjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KSxjfSkoKTtjb25zdCBUZGU9e3Byb3ZpZGU6RDcsdXNlRmFjdG9yeTpmdW5jdGlvbiBFWmUoYyl7cmV0dXJuIGN8fG5ldyBEN30sZGVwczpbW25ldyBJMSxuZXcgbGQsRDddXX07bGV0IEFkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7''@;'; put 'put ''dGhpcy5mZWF0dXJlc1NlcnZpY2U9YSx0aGlzLmV4cGFuZFNlcnZpY2U9ZCxkJiYodGhpcy5zdWJzY3JpcHRpb249ZC5leHBhbmRDaGFuZ2Uuc3Vic2NyaWJlKGg9PnshaCYmdGhpcy5wYXJlbnQmJiFhLmVhZ2VyJiZhLnJlY3Vyc2lvbiYmdGhpcy5wYXJlbnQuY2xlYXJDaGlsZHJlbigpfSkp''@;'; put 'put ''fW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc2V0QXJpYVJvbGVzKCl9c2hvdWxkUmVuZGVyKCl7cmV0dXJuIHRoaXMuZmVhdHVyZXNTZXJ2aWNlLnJlY3Vyc2lvbiYmKHRoaXMuZmVhdHVyZXNTZXJ2aWNlLmVhZ2VyfHwhdGhpcy5leHBhbmRTZXJ2aWNlfHx0aGlzLmV4cGFuZFNlcnZpY2Uu''@;'; put 'put ''ZXhwYW5kZWQpfWdldENvbnRleHQoYSl7cmV0dXJueyRpbXBsaWNpdDphLm1vZGVsLGNsck1vZGVsOmF9fW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb24mJnRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9c2V0QXJpYVJvbGVzKCl7dGhpcy5yb2xlPXRoaXMucGFyZW50PyJn''@;'; put 'put ''cm91cCI6bnVsbH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRDcpLEdlKFoxLDgpKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLXJlY3Vyc2l2ZS1jaGlsZHJlbiJdXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpm''@;'; put 'put ''dW5jdGlvbihhLGQpezImYSYmZHIoInJvbGUiLGQucm9sZSl9LGlucHV0czp7cGFyZW50OiJwYXJlbnQiLGNoaWxkcmVuOiJjaGlsZHJlbiJ9LGRlY2xzOjEsdmFyczoxLGNvbnN0czpbWzQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1Rl''@;'; put 'put ''bXBsYXRlT3V0bGV0Q29udGV4dCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmZ3QoMCxwamUsMiwxLCJuZy1jb250YWluZXIiLDApLDImYSYmeGUoIm5nSWYiLGQuc2hvdWxkUmVuZGVyKCkpfSxkZXBlbmRlbmNpZXM6W3NzLHlvLE4xXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKTt2''@;'; put 'put ''YXIgJHU9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5VTlNFTEVDVEVEPTBdPSJVTlNFTEVDVEVEIixjW2MuU0VMRUNURUQ9MV09IlNFTEVDVEVEIixjW2MuSU5ERVRFUk1JTkFURT0yXT0iSU5ERVRFUk1JTkFURSIsY30oJHV8fHt9KTtjbGFzcyBrZGV7Y29uc3RydWN0b3IoKXt0aGlzLmxvYWRp''@;'; put 'put ''bmckPW5ldyBRcighMSksdGhpcy5zZWxlY3RlZD1uZXcgUXIoJHUuVU5TRUxFQ1RFRCksdGhpcy5fbG9hZGluZz0hMX1nZXQgbG9hZGluZygpe3JldHVybiB0aGlzLl9sb2FkaW5nfXNldCBsb2FkaW5nKGwpe3RoaXMuX2xvYWRpbmc9bCx0aGlzLmxvYWRpbmckLm5leHQobCl9Z2V0IGRpc2Fi''@;'; put 'put ''bGVkKCl7cmV0dXJuISghdGhpcy5fZGlzYWJsZWQmJiF0aGlzLnBhcmVudD8uZGlzYWJsZWQpfXNldCBkaXNhYmxlZChsKXt0aGlzLl9kaXNhYmxlZD1sfWRlc3Ryb3koKXt0aGlzLnNlbGVjdGVkLmNvbXBsZXRlKCl9c2V0U2VsZWN0ZWQobCxhLGQpe2whPT10aGlzLnNlbGVjdGVkLnZhbHVl''@;'; put 'put ''JiYodGhpcy5zZWxlY3RlZC5uZXh0KGwpLGQmJmwhPT0kdS5JTkRFVEVSTUlOQVRFJiZ0aGlzLmNoaWxkcmVuJiZ0aGlzLmNoaWxkcmVuLmZvckVhY2goaD0+e2guZGlzYWJsZWR8fGguc2V0U2VsZWN0ZWQobCwhMSwhMCl9KSxhJiZ0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQuX3VwZGF0ZVNl''@;'; put 'put ''bGVjdGlvbkZyb21DaGlsZHJlbigpKX10b2dnbGVTZWxlY3Rpb24obCl7dGhpcy5kaXNhYmxlZHx8dGhpcy5zZXRTZWxlY3RlZCh0aGlzLnNlbGVjdGVkLnZhbHVlPT09JHUuU0VMRUNURUQ/JHUuVU5TRUxFQ1RFRDokdS5TRUxFQ1RFRCwhMCxsKX1fdXBkYXRlU2VsZWN0aW9uRnJvbUNoaWxk''@;'; put 'put ''cmVuKCl7Y29uc3QgbD10aGlzLmNvbXB1dGVTZWxlY3Rpb25TdGF0ZUZyb21DaGlsZHJlbigpO2whPT10aGlzLnNlbGVjdGVkLnZhbHVlJiYodGhpcy5zZWxlY3RlZC5uZXh0KGwpLHRoaXMucGFyZW50JiZ0aGlzLnBhcmVudC5fdXBkYXRlU2VsZWN0aW9uRnJvbUNoaWxkcmVuKCkpfWNvbXB1''@;'; put 'put ''dGVTZWxlY3Rpb25TdGF0ZUZyb21DaGlsZHJlbigpe2xldCBsPSExLGE9ITE7Zm9yKGNvbnN0IGQgb2YgdGhpcy5jaGlsZHJlbilzd2l0Y2goZC5zZWxlY3RlZC52YWx1ZSl7Y2FzZSAkdS5JTkRFVEVSTUlOQVRFOmlmKGQuZGlzYWJsZWQpY29udGludWU7cmV0dXJuICR1LklOREVURVJNSU5B''@;'; put 'put ''VEU7Y2FzZSAkdS5TRUxFQ1RFRDppZihsPSEwLGEpcmV0dXJuICR1LklOREVURVJNSU5BVEU7YnJlYWs7ZGVmYXVsdDppZihhPSEwLGwpcmV0dXJuICR1LklOREVURVJNSU5BVEV9cmV0dXJuIGw/YT8kdS5VTlNFTEVDVEVEOiR1LlNFTEVDVEVEOiR1LlVOU0VMRUNURUR9fWNsYXNzIGlPIGV4''@;'; put 'put ''dGVuZHMga2Rle2NvbnN0cnVjdG9yKGwsYSxkLGgpe3N1cGVyKCksdGhpcy5nZXRDaGlsZHJlbj1kLHRoaXMuZmVhdHVyZXNTZXJ2aWNlPWgsdGhpcy5jaGlsZHJlbkZldGNoZWQ9ITEsdGhpcy5fY2hpbGRyZW49W10sdGhpcy5tb2RlbD1sLHRoaXMucGFyZW50PWF9Z2V0IGNoaWxkcmVuKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuZmV0Y2hDaGlsZHJlbigpLHRoaXMuX2NoaWxkcmVufXNldCBjaGlsZHJlbihsKXt0aGlzLl9jaGlsZHJlbj1sfWRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbiYmdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKSxzdXBlci5kZXN0cm95KCl9Y2xlYXJDaGlsZHJl''@;'; put 'put ''bigpe3RoaXMuX2NoaWxkcmVuLmZvckVhY2gobD0+bC5kZXN0cm95KCkpLGRlbGV0ZSB0aGlzLl9jaGlsZHJlbix0aGlzLmNoaWxkcmVuRmV0Y2hlZD0hMX1mZXRjaENoaWxkcmVuKCl7aWYodGhpcy5jaGlsZHJlbkZldGNoZWQpcmV0dXJuO2NvbnN0IGw9dGhpcy5nZXRDaGlsZHJlbih0aGlz''@;'; put 'put ''Lm1vZGVsKTshZnVuY3Rpb24gVFplKGMpe3JldHVybiBjJiYiZnVuY3Rpb24iPT10eXBlb2YgYy50aGVufShsKT9WTShsKT8odGhpcy5sb2FkaW5nPSEwLHRoaXMuc3Vic2NyaXB0aW9uPWwuc3Vic2NyaWJlKGE9Pnt0aGlzLl9jaGlsZHJlbj10aGlzLndyYXBDaGlsZHJlbihhKSx0aGlzLmxv''@;'; put 'put ''YWRpbmc9ITF9KSk6dGhpcy5fY2hpbGRyZW49bD90aGlzLndyYXBDaGlsZHJlbihsKTpbXToodGhpcy5sb2FkaW5nPSEwLGwudGhlbihhPT57dGhpcy5fY2hpbGRyZW49dGhpcy53cmFwQ2hpbGRyZW4oYSksdGhpcy5sb2FkaW5nPSExfSkpLHRoaXMuY2hpbGRyZW5GZXRjaGVkPSEwLHRoaXMu''@;'; put 'put ''ZmVhdHVyZXNTZXJ2aWNlJiZ0aGlzLmZlYXR1cmVzU2VydmljZS5jaGlsZHJlbkZldGNoZWQubmV4dCgpfXdyYXBDaGlsZHJlbihsKXtyZXR1cm4gbC5tYXAoYT0+bmV3IGlPKGEsdGhpcyx0aGlzLmdldENoaWxkcmVuLHRoaXMuZmVhdHVyZXNTZXJ2aWNlKSl9fWxldCBEZGU9KCgpPT57Y2xh''@;'; put 'put ''c3MgY3tjb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy50ZW1wbGF0ZT1hLHRoaXMuZmVhdHVyZXNTZXJ2aWNlPWQsdGhpcy5jZHI9aH1uZ09uQ2hhbmdlcygpe2xldCBhO2E9QXJyYXkuaXNBcnJheSh0aGlzLm5vZGVzKT90aGlzLm5vZGVzLm1hcChkPT5uZXcgaU8oZCxudWxsLHRoaXMuZ2V0Q2hp''@;'; put 'put ''bGRyZW4sdGhpcy5mZWF0dXJlc1NlcnZpY2UpKTpbbmV3IGlPKHRoaXMubm9kZXMsbnVsbCx0aGlzLmdldENoaWxkcmVuLHRoaXMuZmVhdHVyZXNTZXJ2aWNlKV0sdGhpcy5jaGlsZHJlbkZldGNoU3Vic2NyaXB0aW9ufHwodGhpcy5jaGlsZHJlbkZldGNoU3Vic2NyaXB0aW9uPXRoaXMuZmVh''@;'; put 'put ''dHVyZXNTZXJ2aWNlLmNoaWxkcmVuRmV0Y2hlZC5waXBlKHVtKDApKS5zdWJzY3JpYmUoKCk9Pnt0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCl9KSksdGhpcy5mZWF0dXJlc1NlcnZpY2UucmVjdXJzaW9uPXt0ZW1wbGF0ZTp0aGlzLnRlbXBsYXRlLHJvb3Q6YX19bmdPbkRlc3Ryb3koKXt0aGlz''@;'; put 'put ''LmNoaWxkcmVuRmV0Y2hTdWJzY3JpcHRpb24mJnRoaXMuY2hpbGRyZW5GZXRjaFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZSh3bCksR2UoRDcpLEdlKHhzKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBl''@;'; put 'put ''OmMsc2VsZWN0b3JzOltbIiIsImNsclJlY3Vyc2l2ZUZvciIsIiIsImNsclJlY3Vyc2l2ZUZvck9mIiwiIl1dLGlucHV0czp7bm9kZXM6W1puLk5vbmUsImNsclJlY3Vyc2l2ZUZvck9mIiwibm9kZXMiXSxnZXRDaGlsZHJlbjpbWm4uTm9uZSwiY2xyUmVjdXJzaXZlRm9yR2V0Q2hpbGRyZW4i''@;'; put 'put ''LCJnZXRDaGlsZHJlbiJdfSxmZWF0dXJlczpbeWxdfSksY30pKCksaEc9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuX2ZvY3VzUmVxdWVzdD1uZXcgV24sdGhpcy5fZm9jdXNDaGFuZ2U9bmV3IFdufWdldCBmb2N1c1JlcXVlc3QoKXtyZXR1cm4gdGhpcy5fZm9jdXNSZXF1ZXN0''@;'; put 'put ''LmFzT2JzZXJ2YWJsZSgpfWdldCBmb2N1c0NoYW5nZSgpe3JldHVybiB0aGlzLl9mb2N1c0NoYW5nZS5hc09ic2VydmFibGUoKX1mb2N1c05vZGUoYSl7YSYmdGhpcy5fZm9jdXNSZXF1ZXN0Lm5leHQoYS5ub2RlSWQpfWJyb2FkY2FzdEZvY3VzZWROb2RlKGEpe3RoaXMuZm9jdXNlZE5vZGVJ''@;'; put 'put ''ZCE9PWEmJih0aGlzLmZvY3VzZWROb2RlSWQ9YSx0aGlzLl9mb2N1c0NoYW5nZS5uZXh0KGEpKX1mb2N1c1BhcmVudChhKXthJiZ0aGlzLmZvY3VzTm9kZShhLnBhcmVudCl9Zm9jdXNGaXJzdFZpc2libGVOb2RlKCl7dGhpcy5mb2N1c05vZGUodGhpcy5yb290Tm9kZU1vZGVscyYmdGhpcy5y''@;'; put 'put ''b290Tm9kZU1vZGVsc1swXSl9Zm9jdXNMYXN0VmlzaWJsZU5vZGUoKXt0aGlzLmZvY3VzTm9kZSh0aGlzLmZpbmRMYXN0VmlzaWJsZUluVHJlZSgpKX1mb2N1c05vZGVBYm92ZShhKXt0aGlzLmZvY3VzTm9kZSh0aGlzLmZpbmROb2RlQWJvdmUoYSkpfWZvY3VzTm9kZUJlbG93KGEpe3RoaXMu''@;'; put 'put ''Zm9jdXNOb2RlKHRoaXMuZmluZE5vZGVCZWxvdyhhKSl9Zm9jdXNOb2RlU3RhcnRzV2l0aChhLGQpe3RoaXMuZm9jdXNOb2RlKHRoaXMuZmluZENsb3Nlc3ROb2RlU3RhcnRzV2l0aChhLGQpKX1maW5kU2libGluZ3MoYSl7cmV0dXJuIGEucGFyZW50P2EucGFyZW50LmNoaWxkcmVuOnRoaXMu''@;'; put 'put ''cm9vdE5vZGVNb2RlbHN9ZmluZExhc3RWaXNpYmxlSW5Ob2RlKGEpe2lmKCFhKXJldHVybiBudWxsO2lmKGEuZXhwYW5kZWQmJmEuY2hpbGRyZW4ubGVuZ3RoPjApe2NvbnN0IGQ9YS5jaGlsZHJlbjtyZXR1cm4gdGhpcy5maW5kTGFzdFZpc2libGVJbk5vZGUoZFtkLmxlbmd0aC0xXSl9cmV0''@;'; put 'put ''dXJuIGF9ZmluZE5leHRGb2N1c2FibGUoYSl7aWYoIWEpcmV0dXJuIG51bGw7Y29uc3QgZD10aGlzLmZpbmRTaWJsaW5ncyhhKSxoPWQuaW5kZXhPZihhKTtyZXR1cm4gaDxkLmxlbmd0aC0xP2RbaCsxXTpoPT09ZC5sZW5ndGgtMT90aGlzLmZpbmROZXh0Rm9jdXNhYmxlKGEucGFyZW50KTpu''@;'; put 'put ''dWxsfWZpbmRMYXN0VmlzaWJsZUluVHJlZSgpe3JldHVybiB0aGlzLmZpbmRMYXN0VmlzaWJsZUluTm9kZSh0aGlzLnJvb3ROb2RlTW9kZWxzJiZ0aGlzLnJvb3ROb2RlTW9kZWxzLmxlbmd0aCYmdGhpcy5yb290Tm9kZU1vZGVsc1t0aGlzLnJvb3ROb2RlTW9kZWxzLmxlbmd0aC0xXSl9Zmlu''@;'; put 'put ''ZE5vZGVBYm92ZShhKXtpZighYSlyZXR1cm4gbnVsbDtjb25zdCBkPXRoaXMuZmluZFNpYmxpbmdzKGEpLGg9ZC5pbmRleE9mKGEpO3JldHVybiAwPT09aD9hLnBhcmVudDpoPjA/dGhpcy5maW5kTGFzdFZpc2libGVJbk5vZGUoZFtoLTFdKTpudWxsfWZpbmROb2RlQmVsb3coYSl7cmV0dXJu''@;'; put 'put ''IGE/YS5leHBhbmRlZCYmYS5jaGlsZHJlbi5sZW5ndGg+MD9hLmNoaWxkcmVuWzBdOnRoaXMuZmluZE5leHRGb2N1c2FibGUoYSk6bnVsbH1maW5kRGVzY2VuZGVudE5vZGVTdGFydHNXaXRoKGEsZCl7aWYoZC5leHBhbmRlZCYmZC5jaGlsZHJlbi5sZW5ndGg+MClmb3IoY29uc3QgaCBvZiBk''@;'; put 'put ''LmNoaWxkcmVuKXtjb25zdCBmPXRoaXMuZmluZE5vZGVTdGFydHNXaXRoKGEsaCk7aWYoZilyZXR1cm4gZn1yZXR1cm4gbnVsbH1maW5kU2libGluZ05vZGVTdGFydHNXaXRoKGEsZCl7Y29uc3QgaD10aGlzLmZpbmRTaWJsaW5ncyhkKTtmb3IobGV0IHY9aC5pbmRleE9mKGQpKzE7djxoLmxl''@;'; put 'put ''bmd0aDt2Kyspe2NvbnN0IEQ9dGhpcy5maW5kTm9kZVN0YXJ0c1dpdGgoYSxoW3ZdKTtpZihEKXJldHVybiBEfXJldHVybiBudWxsfWZpbmRSb290Tm9kZVN0YXJ0c1dpdGgoYSxkKXtmb3IoY29uc3QgaCBvZiB0aGlzLnJvb3ROb2RlTW9kZWxzKXtpZihkLnBhcmVudCYmZC5wYXJlbnQ9PT1o''@;'; put 'put ''KWNvbnRpbnVlO2NvbnN0IGY9dGhpcy5maW5kTm9kZVN0YXJ0c1dpdGgoYSxoKTtpZihmKXJldHVybiBmfXJldHVybiBudWxsfWZpbmROb2RlU3RhcnRzV2l0aChhLGQpe3JldHVybiBkP2QudGV4dENvbnRlbnQuc3RhcnRzV2l0aChhKT9kOnRoaXMuZmluZERlc2NlbmRlbnROb2RlU3RhcnRz''@;'; put 'put ''V2l0aChhLGQpOm51bGx9ZmluZENsb3Nlc3ROb2RlU3RhcnRzV2l0aChhLGQpe2lmKCFkKXJldHVybiBudWxsO2NvbnN0IGg9dGhpcy5maW5kRGVzY2VuZGVudE5vZGVTdGFydHNXaXRoKGEsZCk7aWYoaClyZXR1cm4gaDtjb25zdCBmPXRoaXMuZmluZFNpYmxpbmdOb2RlU3RhcnRzV2l0aChh''@;'; put 'put ''LGQpO3JldHVybiBmfHwodGhpcy5maW5kUm9vdE5vZGVTdGFydHNXaXRoKGEsZCl8fHRoaXMuZmluZE5vZGVTdGFydHNXaXRoKGEsZC5wYXJlbnQpKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0''@;'; put 'put ''b3J5OmMuXHUwMjc1ZmFjfSksY30pKCk7Y2xhc3MgQVplIGV4dGVuZHMga2Rle2NvbnN0cnVjdG9yKGwpe3N1cGVyKCksdGhpcy5wYXJlbnQ9bCxsJiZsLl9hZGRDaGlsZCh0aGlzKSx0aGlzLmNoaWxkcmVuPVtdfWRlc3Ryb3koKXt0aGlzLnBhcmVudCYmdGhpcy5wYXJlbnQuX3JlbW92ZUNo''@;'; put 'put ''aWxkKHRoaXMpLHN1cGVyLmRlc3Ryb3koKX1fYWRkQ2hpbGQobCl7dGhpcy5jaGlsZHJlbi5wdXNoKGwpfV9yZW1vdmVDaGlsZChsKXtjb25zdCBhPXRoaXMuY2hpbGRyZW4uaW5kZXhPZihsKTthPi0xJiZ0aGlzLmNoaWxkcmVuLnNwbGljZShhLDEpfX1sZXQgZGc9KCgpPT57Y2xhc3MgY3tj''@;'; put 'put ''b25zdHJ1Y3RvcihhKXt0aGlzLmVsPWF9Z2V0IGFjdGl2ZSgpe3JldHVybiB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCJhY3RpdmUiKX1hY3RpdmF0ZSgpe3RoaXMuZWwubmF0aXZlRWxlbWVudCYmdGhpcy5lbC5uYXRpdmVFbGVtZW50LmNsaWNrJiZ0aGlzLmVs''@;'; put 'put ''Lm5hdGl2ZUVsZW1lbnQuY2xpY2soKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoZW8pKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiw4LCJjbHItdHJlZW5vZGUtbGluayJdXX0pLGN9KSgpLE9kPSgoKT0+e2NsYXNz''@;'; put 'put ''IGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaKXt0aGlzLnBsYXRmb3JtSWQ9YSx0aGlzLmZlYXR1cmVzU2VydmljZT1oLHRoaXMuZXhwYW5kU2VydmljZT1mLHRoaXMuY29tbW9uU3RyaW5ncz12LHRoaXMuZm9jdXNNYW5hZ2VyPU0sdGhpcy5lbGVtZW50UmVmPUQsdGhpcy5zZWxlY3Rl''@;'; put 'put ''ZENoYW5nZT1uZXcgcXIoITEpLHRoaXMuZXhwYW5kZWRDaGFuZ2U9bmV3IHFyLHRoaXMuU1RBVEVTPSR1LHRoaXMuaXNNb2RlbExvYWRpbmc9ITEsdGhpcy5ub2RlSWQ9U3UoKSx0aGlzLmNvbnRlbnRDb250YWluZXJUYWJpbmRleD0tMSx0aGlzLnNraXBFbWl0Q2hhbmdlPSExLHRoaXMudHlw''@;'; put 'put ''ZUFoZWFkS2V5QnVmZmVyPSIiLHRoaXMudHlwZUFoZWFkS2V5RXZlbnQ9bmV3IFduLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLl9tb2RlbD1oLnJlY3Vyc2lvbj9aLnZpZXc/Wi52aWV3LmNvbnRleHQuY2xyTW9kZWw6Wi5fbFZpZXdbOF0uY2xyTW9kZWw6bmV3IEFaZShkP2QuX21vZGVs''@;'; put 'put ''Om51bGwpLHRoaXMuX21vZGVsLm5vZGVJZD10aGlzLm5vZGVJZH1nZXQgZGlzYWJsZWQoKXtyZXR1cm4gdGhpcy5fbW9kZWwuZGlzYWJsZWR9c2V0IGRpc2FibGVkKGEpe3RoaXMuX21vZGVsLmRpc2FibGVkPWF9Z2V0IHNlbGVjdGVkKCl7cmV0dXJuIHRoaXMuX21vZGVsLnNlbGVjdGVkLnZh''@;'; put 'put ''bHVlfXNldCBzZWxlY3RlZChhKXt0aGlzLmZlYXR1cmVzU2VydmljZS5zZWxlY3RhYmxlPSEwLChudWxsPT09YXx8dHlwZW9mIGE+InUiKSYmKGE9JHUuVU5TRUxFQ1RFRCksImJvb2xlYW4iPT10eXBlb2YgYSYmKGE9YT8kdS5TRUxFQ1RFRDokdS5VTlNFTEVDVEVEKSx0aGlzLnNraXBFbWl0''@;'; put 'put ''Q2hhbmdlPSEwLHRoaXMuX21vZGVsLnNldFNlbGVjdGVkKGEsdGhpcy5mZWF0dXJlc1NlcnZpY2UuZWFnZXIsdGhpcy5mZWF0dXJlc1NlcnZpY2UuZWFnZXIpLHRoaXMuc2tpcEVtaXRDaGFuZ2U9ITF9Z2V0IGV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZH1z''@;'; put 'put ''ZXQgZXhwYW5kZWQoYSl7dGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkPWF9c2V0IGNsckZvclR5cGVBaGVhZChhKXt0aGlzLl9tb2RlbC50ZXh0Q29udGVudD1JZGUoYXx8dGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQudGV4dENvbnRlbnQpfWdldCBhcmlhU2VsZWN0ZWQoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5pc1NlbGVjdGFibGUoKT90aGlzLl9tb2RlbC5zZWxlY3RlZC52YWx1ZT09PSR1LlNFTEVDVEVEOiEhdGhpcy50cmVlTm9kZUxpbms/LmFjdGl2ZXx8bnVsbH1nZXQgdHJlZU5vZGVDb250ZW50VGV4dE9ubHkoKXtyZXR1cm4gMD09PXRoaXMudHJlZU5vZGVMaW5rTGlzdC5sZW5n''@;'; put 'put ''dGh9Z2V0IHRyZWVOb2RlTGluaygpe3JldHVybiB0aGlzLnRyZWVOb2RlTGlua0xpc3QmJnRoaXMudHJlZU5vZGVMaW5rTGlzdC5maXJzdH1nZXQgaXNQYXJlbnQoKXtyZXR1cm4gdGhpcy5fbW9kZWwuY2hpbGRyZW4mJnRoaXMuX21vZGVsLmNoaWxkcmVuLmxlbmd0aD4wfW5nT25Jbml0KCl7''@;'; put 'put ''dGhpcy5fbW9kZWwuZXhwYW5kZWQ9dGhpcy5leHBhbmRlZCx0aGlzLl9tb2RlbC5kaXNhYmxlZD10aGlzLmRpc2FibGVkLHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMuX21vZGVsLnNlbGVjdGVkLnBpcGUoV2woKCk9PiF0aGlzLnNraXBFbWl0Q2hhbmdlKSkuc3Vic2NyaWJlKGE9Pnt0''@;'; put 'put ''aGlzLnNlbGVjdGVkQ2hhbmdlLmVtaXQoYSl9KSksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZENoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuZXhwYW5kZWRDaGFuZ2UuZW1pdChhKSx0aGlzLl9tb2RlbC5leHBhbmRlZD1hfSkpLHRoaXMuc3Vic2Ny''@;'; put 'put ''aXB0aW9ucy5wdXNoKHRoaXMuZm9jdXNNYW5hZ2VyLmZvY3VzUmVxdWVzdC5zdWJzY3JpYmUoYT0+e3RoaXMubm9kZUlkPT09YSYmdGhpcy5mb2N1c1RyZWVOb2RlKCl9KSx0aGlzLmZvY3VzTWFuYWdlci5mb2N1c0NoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMuY2hlY2tUYWJJbmRleChhKX0p''@;'; put 'put ''KSx0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLl9tb2RlbC5sb2FkaW5nJC5waXBlKHVtKDApKS5zdWJzY3JpYmUoYT0+dGhpcy5pc01vZGVsTG9hZGluZz1hKSl9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50eXBlQWhlYWRLZXlFdmVudC5w''@;'; put 'put ''aXBlKHVtKDIwMCkpLnN1YnNjcmliZShhPT57dGhpcy5mb2N1c01hbmFnZXIuZm9jdXNOb2RlU3RhcnRzV2l0aChhLHRoaXMuX21vZGVsKSx0aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcj0iIn0pKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9tb2RlbC50ZXh0Q29udGVudHx8KHRoaXMuX21vZGVs''@;'; put 'put ''LnRleHRDb250ZW50PUlkZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudCkpfW5nT25EZXN0cm95KCl7dGhpcy5fbW9kZWwuZGVzdHJveSgpLHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKGE9PmEudW5zdWJzY3JpYmUoKSl9aXNFeHBhbmRhYmxlKCl7cmV0dXJu''@;'; put 'put ''IHR5cGVvZiB0aGlzLmV4cGFuZGFibGU8InUiP3RoaXMuZXhwYW5kYWJsZTohIXRoaXMuZXhwYW5kU2VydmljZS5leHBhbmRhYmxlfHx0aGlzLmlzUGFyZW50fWlzU2VsZWN0YWJsZSgpe3JldHVybiB0aGlzLmZlYXR1cmVzU2VydmljZS5zZWxlY3RhYmxlfWZvY3VzVHJlZU5vZGUoKXtjb25z''@;'; put 'put ''dCBhPXRoaXMuY29udGVudENvbnRhaW5lci5uYXRpdmVFbGVtZW50O1hzKHRoaXMucGxhdGZvcm1JZCkmJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT1hJiYodGhpcy5zZXRUYWJJbmRleCgwKSxhLmZvY3VzKCksYS5zY3JvbGxJbnRvVmlldyh7YmxvY2s6Im5lYXJlc3QiLGlubGluZToibmVh''@;'; put 'put ''cmVzdCJ9KSl9YnJvYWRjYXN0Rm9jdXNPbkNvbnRhaW5lcigpe3RoaXMuZm9jdXNNYW5hZ2VyLmJyb2FkY2FzdEZvY3VzZWROb2RlKHRoaXMubm9kZUlkKX1vbktleURvd24oYSl7c3dpdGNoKHdZKGEpLFMyKGEua2V5KSl7Y2FzZSB0by5BcnJvd1VwOnRoaXMuZm9jdXNNYW5hZ2VyLmZvY3Vz''@;'; put 'put ''Tm9kZUFib3ZlKHRoaXMuX21vZGVsKTticmVhaztjYXNlIHRvLkFycm93RG93bjp0aGlzLmZvY3VzTWFuYWdlci5mb2N1c05vZGVCZWxvdyh0aGlzLl9tb2RlbCk7YnJlYWs7Y2FzZSB0by5BcnJvd1JpZ2h0OnRoaXMuZXhwYW5kT3JGb2N1c0ZpcnN0Q2hpbGQoKTticmVhaztjYXNlIHRvLkFy''@;'; put 'put ''cm93TGVmdDp0aGlzLmNvbGxhcHNlT3JGb2N1c1BhcmVudCgpO2JyZWFrO2Nhc2UgdG8uSG9tZTphLnByZXZlbnREZWZhdWx0KCksdGhpcy5mb2N1c01hbmFnZXIuZm9jdXNGaXJzdFZpc2libGVOb2RlKCk7YnJlYWs7Y2FzZSB0by5FbmQ6YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuZm9jdXNN''@;'; put 'put ''YW5hZ2VyLmZvY3VzTGFzdFZpc2libGVOb2RlKCk7YnJlYWs7Y2FzZSB0by5FbnRlcjp0aGlzLnRvZ2dsZUV4cGFuZE9yVHJpZ2dlckRlZmF1bHQoKTticmVhaztjYXNlIHRvLlNwYWNlOmNhc2UgdG8uU3BhY2ViYXI6YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMudG9nZ2xlRXhwYW5kT3JUcmln''@;'; put 'put ''Z2VyRGVmYXVsdCgpO2JyZWFrO2RlZmF1bHQ6aWYodGhpcy5fbW9kZWwudGV4dENvbnRlbnQmJmZ1bmN0aW9uIGJ6ZShjKXtjb25zdCBsPWMua2V5O3JldHVybiBsLnRvTG93ZXJDYXNlKCkhPT1sLnRvVXBwZXJDYXNlKCl8fGw+PSIwIiYmbDw9IjkifShhKSlyZXR1cm4gdGhpcy50eXBlQWhl''@;'; put 'put ''YWRLZXlCdWZmZXIrPWEua2V5LHZvaWQgdGhpcy50eXBlQWhlYWRLZXlFdmVudC5uZXh0KHRoaXMudHlwZUFoZWFkS2V5QnVmZmVyKX10aGlzLnR5cGVBaGVhZEtleUJ1ZmZlcj0iIn1zZXRUYWJJbmRleChhKXt0aGlzLmNvbnRlbnRDb250YWluZXJUYWJpbmRleD1hLHRoaXMuY29udGVudENv''@;'; put 'put ''bnRhaW5lci5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLGEudG9TdHJpbmcoKSl9Y2hlY2tUYWJJbmRleChhKXtYcyh0aGlzLnBsYXRmb3JtSWQpJiZ0aGlzLm5vZGVJZCE9PWEmJi0xIT09dGhpcy5jb250ZW50Q29udGFpbmVyVGFiaW5kZXgmJnRoaXMuc2V0VGFiSW5k''@;'; put 'put ''ZXgoLTEpfXRvZ2dsZUV4cGFuZE9yVHJpZ2dlckRlZmF1bHQoKXt0aGlzLmRpc2FibGVkfHwodGhpcy5pc0V4cGFuZGFibGUoKSYmIXRoaXMuaXNTZWxlY3RhYmxlKCk/dGhpcy5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkPSF0aGlzLmV4cGFuZGVkOnRoaXMudHJpZ2dlckRlZmF1bHRBY3Rpb24o''@;'; put 'put ''KSl9ZXhwYW5kT3JGb2N1c0ZpcnN0Q2hpbGQoKXt0aGlzLmRpc2FibGVkfHwodGhpcy5leHBhbmRlZD90aGlzLmlzUGFyZW50JiZ0aGlzLmZvY3VzTWFuYWdlci5mb2N1c05vZGVCZWxvdyh0aGlzLl9tb2RlbCk6dGhpcy5pc0V4cGFuZGFibGUoKSYmKHRoaXMuZXhwYW5kU2VydmljZS5leHBh''@;'; put 'put ''bmRlZD0hMCkpfWNvbGxhcHNlT3JGb2N1c1BhcmVudCgpe3RoaXMuZGlzYWJsZWR8fCh0aGlzLmV4cGFuZGVkP3RoaXMuZXhwYW5kU2VydmljZS5leHBhbmRlZD0hMTp0aGlzLmZvY3VzTWFuYWdlci5mb2N1c1BhcmVudCh0aGlzLl9tb2RlbCkpfXRyaWdnZXJEZWZhdWx0QWN0aW9uKCl7dGhp''@;'; put 'put ''cy50cmVlTm9kZUxpbms/dGhpcy50cmVlTm9kZUxpbmsuYWN0aXZhdGUoKTp0aGlzLmlzU2VsZWN0YWJsZSgpJiZ0aGlzLl9tb2RlbC50b2dnbGVTZWxlY3Rpb24odGhpcy5mZWF0dXJlc1NlcnZpY2UuZWFnZXIpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhh''@;'; put 'put ''fHxjKShHZShvYSksR2UoYywxMiksR2UoRDcpLEdlKFoxKSxHZSh0cyksR2UoaEcpLEdlKGVvKSxHZShEcykpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJjbHItdHJlZS1ub2RlIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxoKXtpZigxJmEmJmxhKGgsZGcs''@;'; put 'put ''NCksMiZhKXtsZXQgZjt4aShmPUVpKCkpJiYoZC50cmVlTm9kZUxpbmtMaXN0PWYpfX0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGEsZCl7aWYoMSZhJiZuYShnamUsNyxlbyksMiZhKXtsZXQgaDt4aShoPUVpKCkpJiYoZC5jb250ZW50Q29udGFpbmVyPWguZmlyc3QpfX0saG9zdFZhcnM6NCxob3N0''@;'; put 'put ''QmluZGluZ3M6ZnVuY3Rpb24oYSxkKXsyJmEmJnhyKCJjbHItdHJlZS1ub2RlIiwhMCkoImRpc2FibGVkIixkLl9tb2RlbC5kaXNhYmxlZCl9LGlucHV0czp7ZXhwYW5kYWJsZTpbWm4uTm9uZSwiY2xyRXhwYW5kYWJsZSIsImV4cGFuZGFibGUiXSxkaXNhYmxlZDpbWm4uTm9uZSwiY2xyRGlz''@;'; put 'put ''YWJsZWQiLCJkaXNhYmxlZCJdLHNlbGVjdGVkOltabi5Ob25lLCJjbHJTZWxlY3RlZCIsInNlbGVjdGVkIl0sZXhwYW5kZWQ6W1puLk5vbmUsImNsckV4cGFuZGVkIiwiZXhwYW5kZWQiXSxjbHJGb3JUeXBlQWhlYWQ6ImNsckZvclR5cGVBaGVhZCJ9LG91dHB1dHM6e3NlbGVjdGVkQ2hhbmdl''@;'; put 'put ''OiJjbHJTZWxlY3RlZENoYW5nZSIsZXhwYW5kZWRDaGFuZ2U6ImNsckV4cGFuZGVkQ2hhbmdlIn0sZmVhdHVyZXM6W3BvKFtUZGUsWjEse3Byb3ZpZGU6QXgsdXNlRXhpc3Rpbmc6WjF9XSldLG5nQ29udGVudFNlbGVjdG9yczp2amUsZGVjbHM6MTIsdmFyczoxMixjb25zdHM6W1siY29udGVu''@;'; put 'put ''dENvbnRhaW5lciIsIiJdLFsidHJlZW5vZGVDb250ZW50IiwiIl0sWyJyb2xlIiwidHJlZWl0ZW0iLCJ0YWJpbmRleCIsIi0xIiwxLCJjbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIiwzLCJrZXlkb3duIiwiZm9jdXMiXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInR5cGUiLCJidXR0''@;'; put 'put ''b24iLCJ0YWJpbmRleCIsIi0xIiwiY2xhc3MiLCJjbHItdHJlZW5vZGUtY2FyZXQiLDMsImRpc2FibGVkIiwiY2xpY2siLCJmb2N1cyIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItdHJlZW5vZGUtc3Bpbm5lci1jb250YWluZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLWNoZWNrYm94LXdy''@;'; put 'put ''YXBwZXIgY2xyLXRyZWVub2RlLWNoZWNrYm94Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNsci10cmVlbm9kZS1jb250ZW50IiwzLCJjbHItdHJlZW5vZGUtdGV4dC1vbmx5IiwibW91c2V1cCIsNCwibmdJZiJdLFsxLCJjbHItdHJlZW5vZGUtY2hpbGRyZW4iXSxbMywicGFyZW50Il0sWyJhcmlh''@;'; put 'put ''LWhpZGRlbiIsInRydWUiLCJ0eXBlIiwiYnV0dG9uIiwidGFiaW5kZXgiLCItMSIsMSwiY2xyLXRyZWVub2RlLWNhcmV0IiwzLCJjbGljayIsImZvY3VzIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwiYW5nbGUiLDEsImNsci10cmVlbm9kZS1jYXJldC1pY29uIl0sWzEsImNsci10cmVlbm9kZS1z''@;'; put 'put ''cGlubmVyLWNvbnRhaW5lciJdLFsxLCJjbHItdHJlZW5vZGUtc3Bpbm5lciIsInNwaW5uZXIiXSxbMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLCJjbHItdHJlZW5vZGUtY2hlY2tib3giXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsInR5cGUiLCJjaGVja2JveCIsInRhYmluZGV4IiwiLTEiLDEs''@;'; put 'put ''ImNsci1jaGVja2JveCIsMywiY2hhbmdlIiwiZm9jdXMiLCJpZCIsImRpc2FibGVkIiwiY2hlY2tlZCIsImluZGV0ZXJtaW5hdGUiXSxbMSwiY2xyLWNvbnRyb2wtbGFiZWwiLDMsImZvciJdLFszLCJuZ1RlbXBsYXRlT3V0bGV0Il0sWzEsImNsci10cmVlbm9kZS1jb250ZW50IiwzLCJtb3Vz''@;'; put 'put ''ZXVwIl0sWyJjbGFzcyIsImNsci1zci1vbmx5Iiw0LCJuZ0lmIl0sWzEsImNsci1zci1vbmx5Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7aWYoMSZhKXtjb25zdCBoPU9uKCk7bG8obWplKSxkZSgwLCJkaXYiLDIsMCksRnQoImtleWRvd24iLGZ1bmN0aW9uKHYpe3JldHVybiB3dChoKSxD''@;'; put 'put ''dChkLm9uS2V5RG93bih2KSl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGgpLEN0KGQuYnJvYWRjYXN0Rm9jdXNPbkNvbnRhaW5lcigpKX0pLGd0KDIsYmplLDIsMiwiYnV0dG9uIiwzKSgzLHlqZSwyLDAsImRpdiIsNCkoNCxfamUsNCw2LCJkaXYiLDUpKDUsd2plLDIsMywiZGl2''@;'; put 'put ''Iiw2KSg2LFNqZSwyLDEsIm5nLXRlbXBsYXRlIixudWxsLDEsX3UpLGhlKCksZGUoOCwiZGl2Iiw3KSxXcig5KSxXcigxMCwxKSxHdCgxMSwiY2xyLXJlY3Vyc2l2ZS1jaGlsZHJlbiIsOCksaGUoKX0yJmEmJih4cigiY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCIsZC5kaXNhYmxlZCksZHIo''@;'; put 'put ''ImFyaWEtZGlzYWJsZWQiLGQuZGlzYWJsZWQpKCJhcmlhLWV4cGFuZGVkIixkLmlzRXhwYW5kYWJsZSgpP2QuZXhwYW5kZWQ6bnVsbCkoImFyaWEtc2VsZWN0ZWQiLGQuYXJpYVNlbGVjdGVkKSxmZSgyKSx4ZSgibmdJZiIsZC5pc0V4cGFuZGFibGUoKSYmIWQuaXNNb2RlbExvYWRpbmcmJiFk''@;'; put 'put ''LmV4cGFuZFNlcnZpY2UubG9hZGluZyksZmUoKSx4ZSgibmdJZiIsZC5leHBhbmRTZXJ2aWNlLmxvYWRpbmd8fGQuaXNNb2RlbExvYWRpbmcpLGZlKCkseGUoIm5nSWYiLGQuZmVhdHVyZXNTZXJ2aWNlLnNlbGVjdGFibGUpLGZlKCkseGUoIm5nSWYiLCFkLmZlYXR1cmVzU2VydmljZS5zZWxl''@;'; put 'put ''Y3RhYmxlKSxmZSgzKSx4ZSgiQHRvZ2dsZUNoaWxkcmVuQW5pbSIsZC5leHBhbmRTZXJ2aWNlLmV4cGFuZGVkPyJleHBhbmRlZCI6ImNvbGxhcHNlZCIpLGRyKCJyb2xlIixkLmlzRXhwYW5kYWJsZSgpJiYhZC5mZWF0dXJlc1NlcnZpY2UucmVjdXJzaW9uPyJncm91cCI6bnVsbCksZmUoMyks''@;'; put 'put ''eGUoInBhcmVudCIsZC5fbW9kZWwpKX0sZGVwZW5kZW5jaWVzOlt5byxOMSxjcyxBZGVdLGVuY2Fwc3VsYXRpb246MixkYXRhOnthbmltYXRpb246W21oKCJ0b2dnbGVDaGlsZHJlbkFuaW0iLFtydSgiY29sbGFwc2VkID0+IGV4cGFuZGVkIixbbHMoe2hlaWdodDowfSkseDAoMjAwLGxzKHto''@;'; put 'put ''ZWlnaHQ6IioifSkpXSkscnUoImV4cGFuZGVkID0+IGNvbGxhcHNlZCIsW2xzKHtoZWlnaHQ6IioifSkseDAoMjAwLGxzKHtoZWlnaHQ6MH0pKV0pLG1MKCJleHBhbmRlZCIsbHMoe2hlaWdodDoiKiIsIm92ZXJmbG93LXkiOiJ2aXNpYmxlIn0pKSxtTCgiY29sbGFwc2VkIixscyh7aGVpZ2h0''@;'; put 'put ''OjB9KSldKV19fSksY30pKCk7ZnVuY3Rpb24gSWRlKGMpe3JldHVybiBjLnRvTG9jYWxlTG93ZXJDYXNlKCkudHJpbSgpfWxldCBTaD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5mZWF0dXJlc1NlcnZpY2U9YSx0aGlzLmZvY3VzTWFuYWdlclNlcnZpY2U9ZCx0''@;'; put 'put ''aGlzLnJlbmRlcmVyPWgsdGhpcy5lbD1mLHRoaXMuc3Vic2NyaXB0aW9ucz1bXSx0aGlzLl9pc011bHRpU2VsZWN0YWJsZT0hMTtjb25zdCBNPXYucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pk1kKGYubmF0aXZlRWxlbWVudCwiZm9jdXNpbiIpLnN1YnNjcmliZShEPT57RC50YXJnZXQ9PT1mLm5h''@;'; put 'put ''dGl2ZUVsZW1lbnQmJihkLmZvY3VzRmlyc3RWaXNpYmxlTm9kZSgpLGgucmVtb3ZlQXR0cmlidXRlKGYubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiKSl9KSk7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2goTSl9c2V0IGxhenkoYSl7dGhpcy5mZWF0dXJlc1NlcnZpY2UuZWFnZXI9IWF9Z2V0IGlz''@;'; put 'put ''TXVsdGlTZWxlY3RhYmxlKCl7cmV0dXJuIHRoaXMuX2lzTXVsdGlTZWxlY3RhYmxlfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMuc2V0Um9vdE5vZGVzKCksdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5yb290Tm9kZXMuY2hhbmdlcy5zdWJzY3JpYmUoKCk9Pnt0aGlzLnNldE11bHRp''@;'; put 'put ''U2VsZWN0YWJsZSgpLHRoaXMuc2V0Um9vdE5vZGVzKCl9KSl9bmdPbkRlc3Ryb3koKXt0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChhPT5hLnVuc3Vic2NyaWJlKCkpfXNldE11bHRpU2VsZWN0YWJsZSgpe3RoaXMuZmVhdHVyZXNTZXJ2aWNlLnNlbGVjdGFibGUmJnRoaXMucm9vdE5vZGVz''@;'; put 'put ''Lmxlbmd0aD4wPyh0aGlzLl9pc011bHRpU2VsZWN0YWJsZT0hMCx0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsImFyaWEtbXVsdGlzZWxlY3RhYmxlIiwidHJ1ZSIpKToodGhpcy5faXNNdWx0aVNlbGVjdGFibGU9ITEsdGhpcy5yZW5kZXJlci5yZW1v''@;'; put 'put ''dmVBdHRyaWJ1dGUodGhpcy5lbC5uYXRpdmVFbGVtZW50LCJhcmlhLW11bHRpc2VsZWN0YWJsZSIpKX1zZXRSb290Tm9kZXMoKXt0aGlzLmZvY3VzTWFuYWdlclNlcnZpY2Uucm9vdE5vZGVNb2RlbHM9dGhpcy5yb290Tm9kZXMubWFwKGE9PmEuX21vZGVsKS5maWx0ZXIoYT0+IWEucGFyZW50''@;'; put 'put ''KX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRDcpLEdlKGhHKSxHZShFYSksR2UoZW8pLEdlKFlvKSl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci10cmVlIl1dLGNvbnRlbnRRdWVyaWVzOmZ1bmN0aW9uKGEsZCxo''@;'; put 'put ''KXtpZigxJmEmJmxhKGgsT2QsNCksMiZhKXtsZXQgZjt4aShmPUVpKCkpJiYoZC5yb290Tm9kZXM9Zil9fSxob3N0QXR0cnM6WyJ0YWJpbmRleCIsIjAiXSxob3N0VmFyczoxLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmZHIoInJvbGUiLCJ0cmVlIil9LGlucHV0czp7bGF6eTpb''@;'; put 'put ''Wm4uTm9uZSwiY2xyTGF6eSIsImxhenkiXX0sZmVhdHVyZXM6W3BvKFtUZGUsaEddKV0sbmdDb250ZW50U2VsZWN0b3JzOnlhLGRlY2xzOjIsdmFyczoxLGNvbnN0czpbWzMsImNoaWxkcmVuIiw0LCJuZ0lmIl0sWzMsImNoaWxkcmVuIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGEsZCl7MSZhJiYo''@;'; put 'put ''bG8oKSxXcigwKSxndCgxLE1qZSwxLDEsImNsci1yZWN1cnNpdmUtY2hpbGRyZW4iLDApKSwyJmEmJihmZSgpLHhlKCJuZ0lmIixkLmZlYXR1cmVzU2VydmljZS5yZWN1cnNpb24pKX0sZGVwZW5kZW5jaWVzOlt5byxBZGVdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLElaZT0oKCk9PntjbGFz''@;'; put 'put ''cyBje2NvbnN0cnVjdG9yKCl7RXMuYWRkSWNvbnMod3kpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMbyxUcyxNWV19KSxjfSkoKSxSWmU9KCgpPT57Y2xh''@;'; put 'put ''c3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbU1plLHhaZSxJWmVdfSksY30pKCk7Y29uc3QgTFplPVsiaW5mbyIsIndhcm5pbmciLCJkYW5nZXIiLCJz''@;'; put 'put ''dWNjZXNzIiwibmV1dHJhbCIsInVua25vd24iLCJsb2FkaW5nIl07bGV0IGZHPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5jb21tb25TdHJpbmdzPWEsdGhpcy5kZWZhdWx0SWNvblNoYXBlPSJpbmZvLXN0YW5kYXJkIix0aGlzLl9hbGVydEljb25TaGFwZT0iIix0aGlzLl9h''@;'; put 'put ''bGVydFR5cGU9ImluZm8ifWdldCBhbGVydFR5cGUoKXtyZXR1cm4gdGhpcy5fYWxlcnRUeXBlfXNldCBhbGVydFR5cGUoYSl7TFplLmluZGV4T2YoYSk+LTEmJih0aGlzLl9hbGVydFR5cGU9YSl9Z2V0IGFsZXJ0SWNvblNoYXBlKCl7cmV0dXJuIiI9PT10aGlzLl9hbGVydEljb25TaGFwZT90''@;'; put 'put ''aGlzLmljb25JbmZvRnJvbVR5cGUodGhpcy5fYWxlcnRUeXBlKS5zaGFwZTp0aGlzLl9hbGVydEljb25TaGFwZX1zZXQgYWxlcnRJY29uU2hhcGUoYSl7YT9hIT09dGhpcy5fYWxlcnRJY29uU2hhcGUmJih0aGlzLl9hbGVydEljb25TaGFwZT1hKTp0aGlzLl9hbGVydEljb25TaGFwZT0iIn1n''@;'; put 'put ''ZXQgYWxlcnRJY29uVGl0bGUoKXtyZXR1cm4gdGhpcy5pY29uSW5mb0Zyb21UeXBlKHRoaXMuX2FsZXJ0VHlwZSkudGl0bGV9aWNvbkluZm9Gcm9tVHlwZShhKXtjb25zdCBkPXtzaGFwZToiIixjc3NDbGFzczoiIix0aXRsZToiIn07c3dpdGNoKGEpe2Nhc2Uid2FybmluZyI6ZC5zaGFwZT0i''@;'; put 'put ''d2FybmluZy1zdGFuZGFyZCIsZC5jc3NDbGFzcz0iYWxlcnQtd2FybmluZyIsZC50aXRsZT10aGlzLmNvbW1vblN0cmluZ3Mua2V5cy53YXJuaW5nO2JyZWFrO2Nhc2UiZGFuZ2VyIjpkLnNoYXBlPSJlcnJvci1zdGFuZGFyZCIsZC5jc3NDbGFzcz0iYWxlcnQtZGFuZ2VyIixkLnRpdGxlPXRo''@;'; put 'put ''aXMuY29tbW9uU3RyaW5ncy5rZXlzLmRhbmdlcjticmVhaztjYXNlInN1Y2Nlc3MiOmQuc2hhcGU9InN1Y2Nlc3Mtc3RhbmRhcmQiLGQuY3NzQ2xhc3M9ImFsZXJ0LXN1Y2Nlc3MiLGQudGl0bGU9dGhpcy5jb21tb25TdHJpbmdzLmtleXMuc3VjY2VzczticmVhaztjYXNlIm5ldXRyYWwiOmQu''@;'; put 'put ''c2hhcGU9Im5vdGUiLGQuY3NzQ2xhc3M9ImFsZXJ0LW5ldXRyYWwiLGQudGl0bGU9dGhpcy5jb21tb25TdHJpbmdzLmtleXMubmV1dHJhbDticmVhaztjYXNlInVua25vd24iOmQuc2hhcGU9ImhlbHAiLGQuY3NzQ2xhc3M9ImFsZXJ0LW5ldXRyYWwiLGQudGl0bGU9dGhpcy5jb21tb25TdHJp''@;'; put 'put ''bmdzLmtleXMudW5rbm93bjticmVhaztjYXNlImxvYWRpbmciOmQuc2hhcGU9ImxvYWRpbmciLGQuY3NzQ2xhc3M9ImFsZXJ0LW5ldXRyYWwiLGQudGl0bGU9dGhpcy5jb21tb25TdHJpbmdzLmtleXMudW5rbm93bjticmVhaztkZWZhdWx0OmQuc2hhcGU9dGhpcy5kZWZhdWx0SWNvblNoYXBl''@;'; put 'put ''LGQuY3NzQ2xhc3M9ImFsZXJ0LWluZm8iLGQudGl0bGU9dGhpcy5jb21tb25TdHJpbmdzLmtleXMuaW5mb31yZXR1cm4gZH19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoTXIodHMpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5c''@;'; put 'put ''dTAyNzVmYWN9KSxjfSkoKSxvTz0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5fY2hhbmdlPW5ldyBXbn1nZXQgY2hhbmdlcygpe3JldHVybiB0aGlzLl9jaGFuZ2UuYXNPYnNlcnZhYmxlKCl9Z2V0IGN1cnJlbnQoKXtyZXR1cm4gdGhpcy5fY3VycmVudH1zZXQgY3VycmVudChh''@;'; put 'put ''KXthIT09dGhpcy5fY3VycmVudCYmKHRoaXMuX2N1cnJlbnQ9YSx0aGlzLl9jaGFuZ2UubmV4dChhKSl9Z2V0IGFjdGl2ZUFsZXJ0cygpe3JldHVybiB0aGlzLmFsbEFsZXJ0cyYmdGhpcy5hbGxBbGVydHMuZmlsdGVyKGE9PiFhLl9jbG9zZWQpfWdldCBjdXJyZW50QWxlcnQoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5hY3RpdmVBbGVydHMmJnRoaXMuYWN0aXZlQWxlcnRzW3RoaXMuY3VycmVudF19c2V0IGN1cnJlbnRBbGVydChhKXt0aGlzLmN1cnJlbnQ9dGhpcy5hY3RpdmVBbGVydHMuaW5kZXhPZihhKX1nZXQgY291bnQoKXtyZXR1cm4gdGhpcy5hY3RpdmVBbGVydHMmJnRoaXMuYWN0aXZlQWxl''@;'; put 'put ''cnRzLmxlbmd0aHx8MH1tYW5hZ2UoYSl7dGhpcy5zdWJzY3JpcHRpb24mJnRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCksdGhpcy5hbGxBbGVydHM9YSx0aGlzLmN1cnJlbnQ9Im51bWJlciI9PXR5cGVvZiB0aGlzLl9jdXJyZW50P3RoaXMuX2N1cnJlbnQ6MCx0aGlzLl9jaGFuZ2Uu''@;'; put 'put ''bmV4dCh0aGlzLmN1cnJlbnQpLHRoaXMuc3Vic2NyaXB0aW9uPXRoaXMuYWxsQWxlcnRzLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57dGhpcy5jdXJyZW50Pj10aGlzLmFsbEFsZXJ0cy5sZW5ndGgmJih0aGlzLmN1cnJlbnQ9TWF0aC5tYXgoMCx0aGlzLmFsbEFsZXJ0cy5sZW5ndGgtMSkpfSl9''@;'; put 'put ''bmV4dCgpe3RoaXMuX2N1cnJlbnQ9dGhpcy5jdXJyZW50PT09dGhpcy5hY3RpdmVBbGVydHMubGVuZ3RoLTE/MDp0aGlzLmN1cnJlbnQrMSx0aGlzLl9jaGFuZ2UubmV4dCh0aGlzLl9jdXJyZW50KX1wcmV2aW91cygpezAhPT10aGlzLmFjdGl2ZUFsZXJ0cy5sZW5ndGgmJih0aGlzLl9jdXJy''@;'; put 'put ''ZW50PTA9PT10aGlzLmN1cnJlbnQ/dGhpcy5hY3RpdmVBbGVydHMubGVuZ3RoLTE6dGhpcy5jdXJyZW50LTEsdGhpcy5fY2hhbmdlLm5leHQodGhpcy5fY3VycmVudCkpfW9wZW4oKXswIT09dGhpcy5hY3RpdmVBbGVydHMubGVuZ3RoJiYodGhpcy5jdXJyZW50QWxlcnR8fCh0aGlzLl9jdXJy''@;'; put 'put ''ZW50PTApLHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuX2N1cnJlbnQpKX1jbG9zZShhKXswIT09dGhpcy5hY3RpdmVBbGVydHMubGVuZ3RoJiYoYSYmKHRoaXMuX2N1cnJlbnQ9TWF0aC5tYXgoMCx0aGlzLmN1cnJlbnQtMSkpLHRoaXMuX2NoYW5nZS5uZXh0KHRoaXMuX2N1cnJlbnQpKX1kZXN0''@;'; put 'put ''cm95KCl7dGhpcy5zdWJzY3JpcHRpb24mJnRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLHF4PSgo''@;'; put 'put ''KT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMuaWNvblNlcnZpY2U9YSx0aGlzLmNkcj1kLHRoaXMubXVsdGlBbGVydFNlcnZpY2U9aCx0aGlzLmNvbW1vblN0cmluZ3M9Zix0aGlzLnJlbmRlcmVyPXYsdGhpcy5ob3N0RWxlbWVudD1NLHRoaXMuaXNTbWFsbD0hMSx0''@;'; put 'put ''aGlzLmNsb3NhYmxlPSEwLHRoaXMuaXNBcHBMZXZlbD0hMSx0aGlzLmNsckNsb3NlQnV0dG9uQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmFsZXJ0Q2xvc2VCdXR0b25BcmlhTGFiZWwsdGhpcy5fY2xvc2VkQ2hhbmdlZD1uZXcgcXIoITEpLHRoaXMuX2Nsb3NlZD0hMSx0aGlz''@;'; put 'put ''LnN1YnNjcmlwdGlvbnM9W10sdGhpcy5faXNMaWdodHdlaWdodD0hMX1nZXQgaXNMaWdodHdlaWdodCgpe3JldHVybiB0aGlzLl9pc0xpZ2h0d2VpZ2h0fXNldCBpc0xpZ2h0d2VpZ2h0KGEpe3RoaXMuX2lzTGlnaHR3ZWlnaHQ9YSx0aGlzLmNvbmZpZ0FsZXJ0VHlwZSh0aGlzLl9vcmlnQWxl''@;'; put 'put ''cnRUeXBlKX1nZXQgYWxlcnRUeXBlKCl7cmV0dXJuIHRoaXMuaWNvblNlcnZpY2UuYWxlcnRUeXBlfXNldCBhbGVydFR5cGUoYSl7dGhpcy5fb3JpZ0FsZXJ0VHlwZT1hLHRoaXMuY29uZmlnQWxlcnRUeXBlKGEpfXNldCBhbGVydEljb25TaGFwZShhKXt0aGlzLmljb25TZXJ2aWNlLmFsZXJ0''@;'; put 'put ''SWNvblNoYXBlPWF9c2V0IGNsb3NlZChhKXthJiYhdGhpcy5fY2xvc2VkP3RoaXMuY2xvc2UoKTohYSYmdGhpcy5fY2xvc2VkJiZ0aGlzLm9wZW4oKX1nZXQgYWxlcnRDbGFzcygpe3JldHVybiB0aGlzLmljb25TZXJ2aWNlLmljb25JbmZvRnJvbVR5cGUodGhpcy5pY29uU2VydmljZS5hbGVy''@;'; put 'put ''dFR5cGUpLmNzc0NsYXNzfWdldCBoaWRkZW4oKXtyZXR1cm4gdGhpcy5faGlkZGVufXNldCBoaWRkZW4oYSl7YSE9PXRoaXMuX2hpZGRlbiYmKHRoaXMuX2hpZGRlbj1hLHRoaXMuX2hpZGRlbj90aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudCwi''@;'; put 'put ''YWxlcnQtaGlkZGVuIik6dGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmhvc3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsImFsZXJ0LWhpZGRlbiIpLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSl9bmdPbkluaXQoKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlJiZ0aGlzLnN1YnNjcmlwdGlv''@;'; put 'put ''bnMucHVzaCh0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNoYW5nZXMuc3Vic2NyaWJlKCgpPT57dGhpcy5oaWRkZW49dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQhPT10aGlzfSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNj''@;'; put 'put ''cmliZSgpKX1jb25maWdBbGVydFR5cGUoYSl7dGhpcy5pY29uU2VydmljZS5hbGVydFR5cGU9YX1vcGVuKCl7dGhpcy5fY2xvc2VkPSExLHRoaXMubXVsdGlBbGVydFNlcnZpY2UmJnRoaXMubXVsdGlBbGVydFNlcnZpY2Uub3BlbigpLHRoaXMuX2Nsb3NlZENoYW5nZWQuZW1pdCghMSl9Y2xv''@;'; put 'put ''c2UoKXtpZighdGhpcy5jbG9zYWJsZSlyZXR1cm47Y29uc3QgYT10aGlzLm11bHRpQWxlcnRTZXJ2aWNlPy5jdXJyZW50QWxlcnQ9PT10aGlzO3RoaXMuX2Nsb3NlZD0hMCx0aGlzLm11bHRpQWxlcnRTZXJ2aWNlPy5hY3RpdmVBbGVydHMmJnRoaXMubXVsdGlBbGVydFNlcnZpY2UuY2xvc2Uo''@;'; put 'put ''YSksdGhpcy5fY2xvc2VkQ2hhbmdlZC5lbWl0KCEwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoZkcpLEdlKHhzKSxHZShvTyw4KSxHZSh0cyksR2UoRWEpLEdlKGVvKSl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImNs''@;'; put 'put ''ci1hbGVydCJdXSxpbnB1dHM6e2lzU21hbGw6W1puLk5vbmUsImNsckFsZXJ0U2l6ZVNtYWxsIiwiaXNTbWFsbCJdLGNsb3NhYmxlOltabi5Ob25lLCJjbHJBbGVydENsb3NhYmxlIiwiY2xvc2FibGUiXSxpc0FwcExldmVsOltabi5Ob25lLCJjbHJBbGVydEFwcExldmVsIiwiaXNBcHBMZXZl''@;'; put 'put ''bCJdLGNsckNsb3NlQnV0dG9uQXJpYUxhYmVsOiJjbHJDbG9zZUJ1dHRvbkFyaWFMYWJlbCIsaXNMaWdodHdlaWdodDpbWm4uTm9uZSwiY2xyQWxlcnRMaWdodHdlaWdodCIsImlzTGlnaHR3ZWlnaHQiXSxhbGVydFR5cGU6W1puLk5vbmUsImNsckFsZXJ0VHlwZSIsImFsZXJ0VHlwZSJdLGFs''@;'; put 'put ''ZXJ0SWNvblNoYXBlOltabi5Ob25lLCJjbHJBbGVydEljb24iLCJhbGVydEljb25TaGFwZSJdLGNsb3NlZDpbWm4uTm9uZSwiY2xyQWxlcnRDbG9zZWQiLCJjbG9zZWQiXX0sb3V0cHV0czp7X2Nsb3NlZENoYW5nZWQ6ImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIn0sZmVhdHVyZXM6W3BvKFtmR10p''@;'; put 'put ''XSxuZ0NvbnRlbnRTZWxlY3RvcnM6eWEsZGVjbHM6MSx2YXJzOjEsY29uc3RzOltbImNsYXNzIiwiYWxlcnQiLDMsIm5nQ2xhc3MiLCJhbGVydC1zbSIsImFsZXJ0LWxpZ2h0d2VpZ2h0IiwiYWxlcnQtYXBwLWxldmVsIiw0LCJuZ0lmIl0sWzEsImFsZXJ0IiwzLCJuZ0NsYXNzIl0sWzEsImFs''@;'; put 'put ''ZXJ0LWl0ZW1zIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJjbG9zZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImNsb3NlIiwzLCJjbGljayJdLFsic2hhcGUiLCJ3aW5kb3ctY2xvc2UiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihsbygpLGd0''@;'; put 'put ''KDAsRWplLDQsOCwiZGl2IiwwKSksMiZhJiZ4ZSgibmdJZiIsIWQuX2Nsb3NlZCl9LGRlcGVuZGVuY2llczpbd3UseW8sY3NdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLFJkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuaWNvblNlcnZpY2U9YX19cmV0dXJuIGMuXHUwMjc1''@;'; put 'put ''ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoZkcpKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFsZXJ0LWl0ZW0iXV0saG9zdEF0dHJzOlsxLCJhbGVydC1pdGVtIl0sbmdDb250ZW50U2VsZWN0b3JzOnlhLGRlY2xzOjQsdmFyczoyLGNvbnN0''@;'; put 'put ''czpbWzEsImFsZXJ0LWljb24td3JhcHBlciJdLFsiY2xhc3MiLCJhbGVydC1zcGlubmVyIiwiY2xySW5saW5lIiwiIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImFsZXJ0LWljb24iLCJyb2xlIiwiaW1nIiw0LCJuZ0lmIl0sWyJjbHJJbmxpbmUiLCIiLDEsImFsZXJ0LXNwaW5uZXIiXSxbInJvbGUi''@;'; put 'put ''LCJpbWciLDEsImFsZXJ0LWljb24iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihsbygpLGRlKDAsImRpdiIsMCksZ3QoMSxUamUsMSwwLCJjbHItc3Bpbm5lciIsMSkoMixBamUsMSwyLCJjZHMtaWNvbiIsMiksaGUoKSxXcigzKSksMiZhJiYoZmUoKSx4ZSgibmdJZiIsImxvYWRp''@;'; put 'put ''bmciPT09ZC5pY29uU2VydmljZS5hbGVydEljb25TaGFwZSksZmUoKSx4ZSgibmdJZiIsImxvYWRpbmciIT09ZC5pY29uU2VydmljZS5hbGVydEljb25TaGFwZSkpfSxkZXBlbmRlbmNpZXM6W3lvLGNzLF9oXSxlbmNhcHN1bGF0aW9uOjJ9KSxjfSkoKSxYeD0oKCk9PntjbGFzcyBje31yZXR1''@;'; put 'put ''cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiw4LCJhbGVydC10ZXh0Il1dfSksY30pKCksTGRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNl''@;'; put 'put ''PWEsdGhpcy5jb21tb25TdHJpbmdzPWQsdGhpcy5jdXJyZW50QWxlcnRDaGFuZ2U9bmV3IHFyKCExKSx0aGlzLmN1cnJlbnRBbGVydEluZGV4Q2hhbmdlPW5ldyBxcn1nZXQgY3VycmVudEFsZXJ0KCl7cmV0dXJuIHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudEFsZXJ0fXNldCBjdXJy''@;'; put 'put ''ZW50QWxlcnQoYSl7YSYmKHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudEFsZXJ0PWEpfWdldCBjdXJyZW50QWxlcnRJbmRleCgpe3JldHVybiB0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnR9c2V0IGN1cnJlbnRBbGVydEluZGV4KGEpe3RoaXMubXVsdGlBbGVydFNlcnZpY2Uu''@;'; put 'put ''Y3VycmVudD1hfWdldCBwcmV2aW91c0FsZXJ0QXJpYUxhYmVsKCl7Y29uc3QgYT10aGlzLmN1cnJlbnRBbGVydEluZGV4KzE7cmV0dXJuIHRoaXMuY29tbW9uU3RyaW5ncy5wYXJzZSh0aGlzLmNvbW1vblN0cmluZ3Mua2V5cy5hbGVydFByZXZpb3VzQWxlcnRBcmlhTGFiZWwse0NVUlJFTlQ6''@;'; put 'put ''KDE9PT1hP3RoaXMubXVsdGlBbGVydFNlcnZpY2UuY291bnQ6YS0xKS50b1N0cmluZygpLENPVU5UOnRoaXMubXVsdGlBbGVydFNlcnZpY2UuY291bnQudG9TdHJpbmcoKX0pfWdldCBuZXh0QWxlcnRBcmlhTGFiZWwoKXtjb25zdCBhPXRoaXMuY3VycmVudEFsZXJ0SW5kZXgrMTtyZXR1cm4g''@;'; put 'put ''dGhpcy5jb21tb25TdHJpbmdzLnBhcnNlKHRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmFsZXJ0TmV4dEFsZXJ0QXJpYUxhYmVsLHtDVVJSRU5UOihhPT09dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jb3VudD8xOmErMSkudG9TdHJpbmcoKSxDT1VOVDp0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmNv''@;'; put 'put ''dW50LnRvU3RyaW5nKCl9KX1uZ09uSW5pdCgpe3RoaXMubXVsdGlBbGVydFNlcnZpY2VDaGFuZ2VzPXRoaXMubXVsdGlBbGVydFNlcnZpY2UuY2hhbmdlcy5zdWJzY3JpYmUoYT0+e3RoaXMuY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2UuZW1pdChhKSx0aGlzLmN1cnJlbnRBbGVydENoYW5nZS5l''@;'; put 'put ''bWl0KHRoaXMubXVsdGlBbGVydFNlcnZpY2UuYWN0aXZlQWxlcnRzW2FdKX0pfW5nT25EZXN0cm95KCl7dGhpcy5tdWx0aUFsZXJ0U2VydmljZUNoYW5nZXMudW5zdWJzY3JpYmUoKX1wYWdlVXAoKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLm5leHQoKX1wYWdlRG93bigpe3RoaXMubXVsdGlB''@;'; put 'put ''bGVydFNlcnZpY2UucHJldmlvdXMoKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2Uob08pLEdlKHRzKSl9LGMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImNsci1hbGVydHMtcGFnZXIiXV0saG9zdFZhcnM6Mixob3N0QmluZGlu''@;'; put 'put ''Z3M6ZnVuY3Rpb24oYSxkKXsyJmEmJnhyKCJhbGVydHMtcGFnZXIiLCEwKX0saW5wdXRzOntjdXJyZW50QWxlcnQ6W1puLk5vbmUsImNsckN1cnJlbnRBbGVydCIsImN1cnJlbnRBbGVydCJdLGN1cnJlbnRBbGVydEluZGV4Oltabi5Ob25lLCJjbHJDdXJyZW50QWxlcnRJbmRleCIsImN1cnJl''@;'; put 'put ''bnRBbGVydEluZGV4Il19LG91dHB1dHM6e2N1cnJlbnRBbGVydENoYW5nZToiY2xyQ3VycmVudEFsZXJ0Q2hhbmdlIixjdXJyZW50QWxlcnRJbmRleENoYW5nZToiY2xyQ3VycmVudEFsZXJ0SW5kZXhDaGFuZ2UifSxkZWNsczo5LHZhcnM6Nixjb25zdHM6W1sxLCJhbGVydHMtcGFnZXItY29u''@;'; put 'put ''dHJvbCJdLFsxLCJhbGVydHMtcGFnZS1kb3duIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJhbGVydHMtcGFnZXItYnV0dG9uIiwzLCJjbGljayJdLFsic2hhcGUiLCJhbmdsZSIsImRpcmVjdGlvbiIsImxlZnQiXSxbMSwiYWxlcnRzLXBhZ2VyLXRleHQiXSxbMSwiYWxlcnRzLXBhZ2UtdXAiXSxb''@;'; put 'put ''InNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJyaWdodCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGRlKDAsImRpdiIsMCkoMSwiZGl2IiwxKSgyLCJidXR0b24iLDIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5wYWdlRG93bigpfSksR3QoMywiY2RzLWljb24i''@;'; put 'put ''LDMpLGhlKCkoKSxkZSg0LCJkaXYiLDQpLExlKDUpLGhlKCksZGUoNiwiZGl2Iiw1KSg3LCJidXR0b24iLDIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gZC5wYWdlVXAoKX0pLEd0KDgsImNkcy1pY29uIiw2KSxoZSgpKCkoKSksMiZhJiYoZmUoMiksZHIoImFyaWEtbGFiZWwiLGQu''@;'; put 'put ''cHJldmlvdXNBbGVydEFyaWFMYWJlbCksZmUoKSxkcigidGl0bGUiLGQuY29tbW9uU3RyaW5ncy5rZXlzLnByZXZpb3VzKSxmZSgyKSx6dSgiIixkLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnQrMSwiIC8gIixkLm11bHRpQWxlcnRTZXJ2aWNlLmNvdW50LCIiKSxmZSgyKSxkcigiYXJpYS1s''@;'; put 'put ''YWJlbCIsZC5uZXh0QWxlcnRBcmlhTGFiZWwpLGZlKCksZHIoInRpdGxlIixkLmNvbW1vblN0cmluZ3Mua2V5cy5uZXh0KSl9LGRlcGVuZGVuY2llczpbY3NdLGVuY2Fwc3VsYXRpb246Mn0pLGN9KSgpLE9kZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMubXVsdGlBbGVydFNl''@;'; put 'put ''cnZpY2U9YSx0aGlzLmN1cnJlbnRBbGVydENoYW5nZT1uZXcgcXIoITEpLHRoaXMuY3VycmVudEFsZXJ0SW5kZXhDaGFuZ2U9bmV3IHFyKCExKSx0aGlzLnN1YnNjcmlwdGlvbnM9W119c2V0IGFsbEFsZXJ0cyhhKXt0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLm1hbmFnZShhKX1zZXQgX2lucHV0''@;'; put 'put ''Q3VycmVudEluZGV4KGEpe051bWJlci5pc0ludGVnZXIoYSkmJmE+PTAmJih0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnQ9YSl9Z2V0IGN1cnJlbnRBbGVydEluZGV4KCl7cmV0dXJuIHRoaXMubXVsdGlBbGVydFNlcnZpY2UuY3VycmVudH1zZXQgY3VycmVudEFsZXJ0SW5kZXgoYSl7''@;'; put 'put ''dGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jdXJyZW50PWF9Z2V0IGN1cnJlbnRBbGVydCgpe3JldHVybiB0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydH1zZXQgY3VycmVudEFsZXJ0KGEpe2EmJih0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydD1hKX1nZXQgYWxl''@;'; put 'put ''cnRzKCl7cmV0dXJuIHRoaXMuYWxsQWxlcnRzLmZpbHRlcihhPT4hMT09PWEuaGlkZGVuKX1nZXQgY3VycmVudEFsZXJ0VHlwZSgpe3JldHVybiB0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydD90aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmN1cnJlbnRBbGVydC5hbGVydFR5cGU6''@;'; put 'put ''IiJ9bmdBZnRlckNvbnRlbnRJbml0KCl7dGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5tdWx0aUFsZXJ0U2VydmljZS5jaGFuZ2VzLnN1YnNjcmliZShhPT57dGhpcy5jdXJyZW50QWxlcnRJbmRleENoYW5nZS5uZXh0KGEpLHRoaXMuY3VycmVudEFsZXJ0Q2hhbmdlLm5leHQodGhpcy5t''@;'; put 'put ''dWx0aUFsZXJ0U2VydmljZS5jdXJyZW50QWxlcnQpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goYT0+YS51bnN1YnNjcmliZSgpKSx0aGlzLm11bHRpQWxlcnRTZXJ2aWNlLmRlc3Ryb3koKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVy''@;'; put 'put ''biBuZXcoYXx8YykoR2Uob08pKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLWFsZXJ0cyJdXSxjb250ZW50UXVlcmllczpmdW5jdGlvbihhLGQsaCl7aWYoMSZhJiZsYShoLHF4LDQpLDImYSl7bGV0IGY7eGkoZj1FaSgpKSYmKGQuYWxsQWxlcnRzPWYpfX0saG9z''@;'; put 'put ''dFZhcnM6MTIsaG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGEsZCl7MiZhJiZ4cigiYWxlcnRzIiwhMCkoImFsZXJ0LWRhbmdlciIsImRhbmdlciI9PWQuY3VycmVudEFsZXJ0VHlwZSkoImFsZXJ0LWluZm8iLCJpbmZvIj09ZC5jdXJyZW50QWxlcnRUeXBlKSgiYWxlcnQtc3VjY2VzcyIsInN1Y2Nl''@;'; put 'put ''c3MiPT1kLmN1cnJlbnRBbGVydFR5cGUpKCJhbGVydC13YXJuaW5nIiwid2FybmluZyI9PWQuY3VycmVudEFsZXJ0VHlwZSkoImFsZXJ0LW5ldXRyYWwiLCJuZXV0cmFsIj09ZC5jdXJyZW50QWxlcnRUeXBlKX0saW5wdXRzOntfaW5wdXRDdXJyZW50SW5kZXg6W1puLk5vbmUsImNsckN1cnJl''@;'; put 'put ''bnRBbGVydEluZGV4IiwiX2lucHV0Q3VycmVudEluZGV4Il0sY3VycmVudEFsZXJ0Oltabi5Ob25lLCJjbHJDdXJyZW50QWxlcnQiLCJjdXJyZW50QWxlcnQiXX0sb3V0cHV0czp7Y3VycmVudEFsZXJ0Q2hhbmdlOiJjbHJDdXJyZW50QWxlcnRDaGFuZ2UiLGN1cnJlbnRBbGVydEluZGV4Q2hh''@;'; put 'put ''bmdlOiJjbHJDdXJyZW50QWxlcnRJbmRleENoYW5nZSJ9LGZlYXR1cmVzOltwbyhbb09dKV0sbmdDb250ZW50U2VsZWN0b3JzOkRqZSxkZWNsczozLHZhcnM6MSxjb25zdHM6W1sxLCJhbGVydHMtd3JhcHBlciJdLFszLCJjbHJDdXJyZW50QWxlcnRJbmRleCIsNCwibmdJZiJdLFszLCJjbHJD''@;'; put 'put ''dXJyZW50QWxlcnRJbmRleCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihhLGQpezEmYSYmKGxvKGtqZSksZGUoMCwiZGl2IiwwKSxndCgxLElqZSwxLDEsImNsci1hbGVydHMtcGFnZXIiLDEpLFdyKDIpLGhlKCkpLDImYSYmKGZlKCkseGUoIm5nSWYiLGQubXVsdGlBbGVydFNlcnZpY2UuY291bnQ+''@;'; put 'put ''MSkpfSxkZXBlbmRlbmNpZXM6W3lvLExkZV0sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5OmJsb2NrfSJdfSksY30pKCksUGRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtFcy5hZGRJY29ucyhxVyxDT2UsU09lLE1PZSxYVyx4T2UsZ3gpfX1yZXR1cm4gYy5cdTAyNzVm''@;'; put 'put ''YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMbyxUcyxUWSxGeV19KSxjfSkoKSxPWmU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXco''@;'; put 'put ''YXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbUGRlXX0pLGN9KSgpLEZkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuX2RvY3VtZW50PWF9c3RvcFNjcm9sbGluZygpe3RoaXMuX2RvY3VtZW50LmJvZHkuY2xhc3NMaXN0''@;'; put 'put ''LmFkZCgibm8tc2Nyb2xsaW5nIil9cmVzdW1lU2Nyb2xsaW5nKCl7dGhpcy5fZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoIm5vLXNjcm9sbGluZyIpJiZ0aGlzLl9kb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoIm5vLXNjcm9sbGluZyIpfX1yZXR1cm4gYy5cdTAyNzVm''@;'; put 'put ''YWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShNcih2cykpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pLGN9KSgpLEhkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5mYWRlTW92ZT0iZmFkZURvd24iLHRoaXMuYmFja2Ryb3A9''@;'; put 'put ''ITB9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxwcm92aWRlZEluOiJyb290In0pLGN9KSgpLG91PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhp''@;'; put 'put ''cy5fc2Nyb2xsaW5nU2VydmljZT1hLHRoaXMuY29tbW9uU3RyaW5ncz1kLHRoaXMubW9kYWxTdGFja1NlcnZpY2U9aCx0aGlzLmNvbmZpZ3VyYXRpb249Zix0aGlzLm1vZGFsSWQ9U3UoKSx0aGlzLl9vcGVuPSExLHRoaXMuX29wZW5DaGFuZ2VkPW5ldyBxcighMSksdGhpcy5jbG9zYWJsZT0h''@;'; put 'put ''MCx0aGlzLmNsb3NlQnV0dG9uQXJpYUxhYmVsPXRoaXMuY29tbW9uU3RyaW5ncy5rZXlzLmNsb3NlLHRoaXMuc2l6ZT0ibWQiLHRoaXMuc3RhdGljQmFja2Ryb3A9ITAsdGhpcy5za2lwQW5pbWF0aW9uPSExLHRoaXMuc3RvcENsb3NlPSExLHRoaXMuYWx0Q2xvc2U9bmV3IHFyKCExKSx0aGlz''@;'; put 'put ''LmJ5cGFzc1Njcm9sbFNlcnZpY2U9ITF9Z2V0IGZhZGVNb3ZlKCl7cmV0dXJuIHRoaXMuc2tpcEFuaW1hdGlvbj8iIjp0aGlzLmNvbmZpZ3VyYXRpb24uZmFkZU1vdmV9c2V0IGZhZGVNb3ZlKGEpe3RoaXMuY29uZmlndXJhdGlvbi5mYWRlTW92ZT1hfWdldCBiYWNrZHJvcCgpe3JldHVybiB0''@;'; put 'put ''aGlzLmNvbmZpZ3VyYXRpb24uYmFja2Ryb3B9bmdPbkNoYW5nZXMoYSl7IXRoaXMuYnlwYXNzU2Nyb2xsU2VydmljZSYmYSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsIl9vcGVuIikmJihhLl9vcGVuLmN1cnJlbnRWYWx1ZT8odGhpcy5fc2Nyb2xsaW5nU2Vydmlj''@;'; put 'put ''ZS5zdG9wU2Nyb2xsaW5nKCksdGhpcy5tb2RhbFN0YWNrU2VydmljZS50cmFja01vZGFsT3Blbih0aGlzKSk6dGhpcy5fc2Nyb2xsaW5nU2VydmljZS5yZXN1bWVTY3JvbGxpbmcoKSl9bmdPbkRlc3Ryb3koKXt0aGlzLl9zY3JvbGxpbmdTZXJ2aWNlLnJlc3VtZVNjcm9sbGluZygpfW9wZW4o''@;'; put 'put ''KXt0aGlzLl9vcGVufHwodGhpcy5fb3Blbj0hMCx0aGlzLl9vcGVuQ2hhbmdlZC5lbWl0KCEwKSx0aGlzLm1vZGFsU3RhY2tTZXJ2aWNlLnRyYWNrTW9kYWxPcGVuKHRoaXMpKX1iYWNrZHJvcENsaWNrKCl7dGhpcy5zdGF0aWNCYWNrZHJvcD90aGlzLnRpdGxlLm5hdGl2ZUVsZW1lbnQuZm9j''@;'; put 'put ''dXMoKTp0aGlzLmNsb3NlKCl9Y2xvc2UoKXt0aGlzLnN0b3BDbG9zZT90aGlzLmFsdENsb3NlLmVtaXQoITEpOiF0aGlzLmNsb3NhYmxlfHwhdGhpcy5fb3Blbnx8KHRoaXMuX29wZW49ITEpfWZhZGVEb25lKGEpeyJ2b2lkIj09PWEudG9TdGF0ZSYmKHRoaXMuX29wZW5DaGFuZ2VkLmVtaXQo''@;'; put 'put ''ITEpLHRoaXMubW9kYWxTdGFja1NlcnZpY2UudHJhY2tNb2RhbENsb3NlKHRoaXMpKX1zY3JvbGxUb3AoKXt0aGlzLmJvZHlFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG8oMCwwKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8YykoR2UoRmRl''@;'; put 'put ''KSxHZSh0cyksR2UocGRlKSxHZShIZGUpKX0sYy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siY2xyLW1vZGFsIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihhLGQpe2lmKDEmYSYmKG5hKGQxZSw1KSxuYShSamUsNSkpLDImYSl7bGV0IGg7eGkoaD1FaSgpKSYmKGQudGl0bGU9aC5m''@;'; put 'put ''aXJzdCkseGkoaD1FaSgpKSYmKGQuYm9keUVsZW1lbnRSZWY9aC5maXJzdCl9fSxob3N0VmFyczoyLGhvc3RCaW5kaW5nczpmdW5jdGlvbihhLGQpezImYSYmeHIoIm9wZW4iLGQuX29wZW4pfSxpbnB1dHM6e19vcGVuOltabi5Ob25lLCJjbHJNb2RhbE9wZW4iLCJfb3BlbiJdLGNsb3NhYmxl''@;'; put 'put ''Oltabi5Ob25lLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xvc2FibGUiXSxjbG9zZUJ1dHRvbkFyaWFMYWJlbDpbWm4uTm9uZSwiY2xyTW9kYWxDbG9zZUJ1dHRvbkFyaWFMYWJlbCIsImNsb3NlQnV0dG9uQXJpYUxhYmVsIl0sc2l6ZTpbWm4uTm9uZSwiY2xyTW9kYWxTaXplIiwic2l6ZSJdLHN0''@;'; put 'put ''YXRpY0JhY2tkcm9wOltabi5Ob25lLCJjbHJNb2RhbFN0YXRpY0JhY2tkcm9wIiwic3RhdGljQmFja2Ryb3AiXSxza2lwQW5pbWF0aW9uOltabi5Ob25lLCJjbHJNb2RhbFNraXBBbmltYXRpb24iLCJza2lwQW5pbWF0aW9uIl0sc3RvcENsb3NlOltabi5Ob25lLCJjbHJNb2RhbFByZXZlbnRD''@;'; put 'put ''bG9zZSIsInN0b3BDbG9zZSJdLGxhYmVsbGVkQnk6W1puLk5vbmUsImNsck1vZGFsTGFiZWxsZWRCeUlkIiwibGFiZWxsZWRCeSJdLGJ5cGFzc1Njcm9sbFNlcnZpY2U6W1puLk5vbmUsImNsck1vZGFsT3ZlcnJpZGVTY3JvbGxTZXJ2aWNlIiwiYnlwYXNzU2Nyb2xsU2VydmljZSJdfSxvdXRw''@;'; put 'put ''dXRzOntfb3BlbkNoYW5nZWQ6ImNsck1vZGFsT3BlbkNoYW5nZSIsYWx0Q2xvc2U6ImNsck1vZGFsQWx0ZXJuYXRlQ2xvc2UifSxmZWF0dXJlczpbcG8oW10sW0ZkZV0pLHlsXSxuZ0NvbnRlbnRTZWxlY3RvcnM6T2plLGRlY2xzOjIsdmFyczoyLGNvbnN0czpbWyJ0aXRsZSIsIiJdLFsiYm9k''@;'; put 'put ''eSIsIiJdLFsiY2xhc3MiLCJtb2RhbCIsMywibW9kYWwtZnVsbC1zY3JlZW4iLDQsIm5nSWYiXSxbImNsYXNzIiwibW9kYWwtYmFja2Ryb3AiLCJhcmlhLWhpZGRlbiIsInRydWUiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsIm1vZGFsIl0sWyJjZGtUcmFwRm9jdXMiLCIiLCJyb2xlIiwiZGlh''@;'; put 'put ''bG9nIiwiYXJpYS1tb2RhbCIsInRydWUiLDEsIm1vZGFsLWRpYWxvZyIsMywiY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmUiXSxbMSwiY2xyLXNyLW9ubHkiXSxbMSwibW9kYWwtY29udGVudC13cmFwcGVyIl0sWzEsIm1vZGFsLWNvbnRlbnQiXSxbMSwibW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxl''@;'; put 'put ''Il0sWyJjZGtGb2N1c0luaXRpYWwiLCIiLCJ0YWJpbmRleCIsIi0xIiwxLCJtb2RhbC10aXRsZS13cmFwcGVyIiwzLCJpZCJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiY2xvc2UiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWJvZHktd3JhcHBlciJdLFsidHlwZSIsImJ1dHRv''@;'; put 'put ''biIsMSwiY2xvc2UiLDMsImNsaWNrIl0sWyJzaGFwZSIsIndpbmRvdy1jbG9zZSJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJtb2RhbC1iYWNrZHJvcCIsMywiY2xpY2siXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihsbyhMamUpLGd0KDAsRmplLDE5LDE2LCJkaXYiLDIpKDEs''@;'; put 'put ''SGplLDEsMSwiZGl2IiwzKSksMiZhJiYoeGUoIm5nSWYiLGQuX29wZW4pLGZlKCkseGUoIm5nSWYiLGQuYmFja2Ryb3ApKX0sZGVwZW5kZW5jaWVzOlt5byxWeSxjc10sc3R5bGVzOlsiW19uZ2hvc3QtJUNPTVAlXXtkaXNwbGF5Om5vbmV9Lm9wZW5bX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6''@;'; put 'put ''aW5saW5lfSJdLGRhdGE6e2FuaW1hdGlvbjpbbWgoImZhZGVNb3ZlIixbcnUoIiogPT4gZmFkZURvd24iLFtscyh7b3BhY2l0eTowLHRyYW5zZm9ybToidHJhbnNsYXRlKDAsIC0yNSUpIn0pLHgwKCIwLjJzIGVhc2UtaW4tb3V0IildKSxydSgiZmFkZURvd24gPT4gKiIsW3gwKCIwLjJzIGVh''@;'; put 'put ''c2UtaW4tb3V0Iixscyh7b3BhY2l0eTowLHRyYW5zZm9ybToidHJhbnNsYXRlKDAsIC0yNSUpIn0pKV0pLHJ1KCIqID0+IGZhZGVMZWZ0IixbbHMoe29wYWNpdHk6MCx0cmFuc2Zvcm06InRyYW5zbGF0ZSgyNSUsIDApIn0pLHgwKCIwLjJzIGVhc2UtaW4tb3V0IildKSxydSgiZmFkZUxlZnQg''@;'; put 'put ''PT4gKiIsW3gwKCIwLjJzIGVhc2UtaW4tb3V0Iixscyh7b3BhY2l0eTowLHRyYW5zZm9ybToidHJhbnNsYXRlKDI1JSwgMCkifSkpXSldKSxtaCgiZmFkZSIsW3J1KCJ2b2lkID0+ICoiLFtscyh7b3BhY2l0eTowfSkseDAoIjAuMnMgZWFzZS1pbi1vdXQiLGxzKHtvcGFjaXR5Oi44NX0pKV0p''@;'; put 'put ''LHJ1KCIqID0+IHZvaWQiLFt4MCgiMC4ycyBlYXNlLWluLW91dCIsbHMoe29wYWNpdHk6MH0pKV0pXSldfX0pLGN9KSgpLEt1PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMucmVuZGVyZXI9YSx0aGlzLmhvc3Q9ZCx0aGlzLnRhYmluZGV4PSIwIix0aGlzLnVubGlzdGVu''@;'; put 'put ''ZXJzPVtdLGgucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLm9ic2VydmVyPW5ldyBSZXNpemVPYnNlcnZlcigoKT0+dGhpcy5hZGRPclJlbW92ZVRhYkluZGV4KCkpLHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZShkLm5hdGl2ZUVsZW1lbnQpLHRoaXMudW5saXN0ZW5lcnMucHVzaChhLmxpc3Rl''@;'; put 'put ''bihkLm5hdGl2ZUVsZW1lbnQsIm1vdXNldXAiLCgpPT57dGhpcy5hZGRPclJlbW92ZVRhYkluZGV4KCl9KSxhLmxpc3RlbihkLm5hdGl2ZUVsZW1lbnQsIm1vdXNlZG93biIsKCk9Pnt0aGlzLnJlbW92ZVRhYkluZGV4KCl9KSl9KX1uZ09uRGVzdHJveSgpe2Zvcig7dGhpcy51bmxpc3RlbmVy''@;'; put 'put ''cy5sZW5ndGg7KXRoaXMudW5saXN0ZW5lcnMucG9wKCkoKTt0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0aGlzLm9ic2VydmVyPW51bGx9YWRkVGFiSW5kZXgoKXt0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZSh0aGlzLmhvc3QubmF0aXZlRWxlbWVudCwidGFiaW5kZXgiLHRoaXMudGFi''@;'; put 'put ''aW5kZXgpfXJlbW92ZVRhYkluZGV4KCl7dGhpcy5yZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUodGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsInRhYmluZGV4Iil9YWRkT3JSZW1vdmVUYWJJbmRleCgpe2NvbnN0IGE9dGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQucGFyZW50RWxlbWVudDthJiZhLmNs''@;'; put 'put ''aWVudEhlaWdodDxhLnNjcm9sbEhlaWdodD90aGlzLmFkZFRhYkluZGV4KCk6dGhpcy5yZW1vdmVUYWJJbmRleCgpfX1yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKShHZShFYSksR2UoZW8pLEdlKFlvKSl9LGMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2Vs''@;'; put 'put ''ZWN0b3JzOltbIiIsOCwibW9kYWwtYm9keSJdXX0pLGN9KSgpLGFPPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtFcy5hZGRJY29ucyhneCl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAy''@;'; put 'put ''NzVpbmo9QXIoe2ltcG9ydHM6W0xvLHpMLFRzLFRzXX0pLGN9KSgpLFBaZT0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMbyx6TCxU''@;'; put 'put ''cyxhTyxhTyxUc119KSxjfSkoKSxGWmU9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTG9dfSksY30pKCksTlplPSgoKT0+e2NsYXNz''@;'; put 'put ''IGN7Y29uc3RydWN0b3IoKXtFcy5hZGRJY29ucyhFT2UsVE9lLHFXLFhXKX19cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTG8sVHMsRnksVHMsRnldfSksY30p''@;'; put 'put ''KCksVVplPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXtFcy5hZGRJY29ucyhxVyxYVyl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NW1vZD1raSh7dHlwZTpjfSksYy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xvLGFPLFBkZV19''@;'; put 'put ''KSxjfSkoKSxqMD0oKCk9PntjbGFzcyBje31yZXR1cm4gYy5cdTAyNzVmYWM9ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyhhfHxjKX0sYy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pLGMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltPWmUsUlplLFRzLGFPLE1ZLEUyLExMLER6ZSx1ZGUsRVVlLEt6ZSxV''@;'; put 'put ''WmUsUFplLHZ6ZSxGeSxGWmUsSHgsTlplXX0pLGN9KSgpLFpaZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5sb2dnZXJTZXJ2aWNlPWQsdGhpcy5fc3Vic2NyaXB0aW9uPW5ldyBxdCx0aGlzLmxvYWRpbmc9ITEsdGhpcy5hbGVydENsb3Nl''@;'; put 'put ''ZD0hMCx0aGlzLmRhdGE9e3VzZXI6bnVsbCxwYXNzOm51bGx9fW5nT25Jbml0KCl7IlJlZGlyZWN0ZWQiIT09dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCkubG9naW5NZWNoYW5pc20mJih0aGlzLl9zdWJzY3JpcHRpb249dGhpcy5zYXNTZXJ2aWNlLnNob3VsZExvZ2luLnN1YnNj''@;'; put 'put ''cmliZShkPT57dGhpcy5pc0FjdGl2ZT1kO2xldCBoPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImJvZHkiKTtoJiYoZD9oLmNsYXNzTGlzdC5hZGQoInNob3VsZC1sb2dpbiIpOmguY2xhc3NMaXN0LnJlbW92ZSgic2hvdWxkLWxvZ2luIikpfSkpfW5nT25EZXN0cm95KCl7dGhpcy5fc3Vic2Ny''@;'; put 'put ''aXB0aW9uLnVuc3Vic2NyaWJlKCl9c3VibWl0KCl7dGhpcy5sb2FkaW5nfHwodGhpcy5sb2FkaW5nPSEwLHRoaXMuZGF0YS51c2VyJiZ0aGlzLmRhdGEucGFzcyYmdGhpcy5zYXNTZXJ2aWNlLmxvZ2luKHRoaXMuZGF0YS51c2VyLHRoaXMuZGF0YS5wYXNzKS50aGVuKGE9Pnt0aGlzLmxvYWRp''@;'; put 'put ''bmc9ITEsYXx8KHRoaXMuZXJyb3JNc2c9IlVzZXJuYW1lIG9yIHBhc3N3b3JkIGludmFsaWQiLHRoaXMuYWxlcnRDbG9zZWQ9ITEpfSxhPT57dGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyhhKSx0aGlzLmxvYWRpbmc9ITEsdGhpcy5lcnJvck1zZz1hLHRoaXMuYWxlcnRDbG9zZWQ9ITF9KSl9c3Rh''@;'; put 'put ''dGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoSnMpLEdlKFNkKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbG9naW4iXV0sZGVjbHM6MjAsdmFyczo5LGNvbnN0czpbWzEsImxvZ2luLXNpZGViYXIt''@;'; put 'put ''d3JhcHBlciJdLFsxLCJsb2dpbi1zaWRlYmFyIiwic2lkZUJhclByb3BzIl0sWyJzcmMiLCIvU0FTU3RvcmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2VzL2RhdGFjb250cm9sbGVyLXN2ZyIsImFsdCIsImRhdGFjb250cm9sbGVyIGxvZ28i''@;'; put 'put ''LDEsImxvZ2luLWxvZ28iXSxbMSwibG9naW4iLDMsIm5nU3VibWl0Il0sWzEsInRpdGxlIl0sWzEsIndlbGNvbWUiXSxbMSwiaGludCJdLFsxLCJsb2dpbi1ncm91cCJdLFsiY2xySW5wdXQiLCIiLCJuYW1lIiwidXNlciIsInR5cGUiLCJ0ZXh0IiwicGxhY2Vob2xkZXIiLCJVc2VybmFtZSIs''@;'; put 'put ''MSwidXNlcm5hbWUiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWyJjbHJJbnB1dCIsIiIsIm5hbWUiLCJwYXNzIiwidHlwZSIsInBhc3N3b3JkIiwicGxhY2Vob2xkZXIiLCJQYXNzd29yZCIsMSwicGFzc3dvcmQiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzMsImNsckFs''@;'; put 'put ''ZXJ0Q2xvc2VkQ2hhbmdlIiwiY2xyQWxlcnRUeXBlIiwiY2xyQWxlcnRDbG9zZWQiXSxbImNsci1hbGVydC1pdGVtIiwiIiwxLCJhbGVydC1pdGVtIl0sWzEsImFsZXJ0LXRleHQiXSxbInR5cGUiLCJzdWJtaXQiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwzLCJjbHJMb2FkaW5n''@;'; put 'put ''IiwiZGlzYWJsZWQiXSxbMSwib3ZlcmxheSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImRpdiIsMCkoMSwiZGl2IiwxKSxHdCgyLCJpbWciLDIpLGRlKDMsImZvcm0iLDMpLEZ0KCJuZ1N1Ym1pdCIsZnVuY3Rpb24oKXtyZXR1cm4gaC5zdWJtaXQoKX0pLGRlKDQsImxh''@;'; put 'put ''YmVsIiw0KSg1LCJoMyIsNSksTGUoNiwiV2VsY29tZSB0byIpLGhlKCksTGUoNywiIERhdGEgQ29udHJvbGxlciAiKSxkZSg4LCJoNCIsNiksTGUoOSwiQ2FwdHVyZSwgUmV2aWV3LCBhbmQgQXBwcm92ZSIpLGhlKCkoKSxkZSgxMCwiZGl2Iiw3KSgxMSwiaW5wdXQiLDgpLHBpKCJuZ01vZGVs''@;'; put 'put ''Q2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gdmkoaC5kYXRhLnVzZXIsdil8fChoLmRhdGEudXNlcj12KSx2fSksaGUoKSxkZSgxMiwiaW5wdXQiLDkpLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gdmkoaC5kYXRhLnBhc3Msdil8fChoLmRhdGEucGFzcz12KSx2fSks''@;'; put 'put ''aGUoKSxkZSgxMywiY2xyLWFsZXJ0IiwxMCkscGkoImNsckFsZXJ0Q2xvc2VkQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gdmkoaC5hbGVydENsb3NlZCx2KXx8KGguYWxlcnRDbG9zZWQ9diksdn0pLGRlKDE0LCJkaXYiLDExKSgxNSwic3BhbiIsMTIpLExlKDE2KSxoZSgpKCkoKSxkZSgx''@;'; put 'put ''NywiYnV0dG9uIiwxMyksTGUoMTgsIiBMb2cgaW4gIiksaGUoKSgpKCkoKSxHdCgxOSwiZGl2IiwxNCksaGUoKSksMiZkJiYoeHIoImFjdGl2ZSIsaC5pc0FjdGl2ZSksZmUoMTEpLGZpKCJuZ01vZGVsIixoLmRhdGEudXNlciksZmUoKSxmaSgibmdNb2RlbCIsaC5kYXRhLnBhc3MpLGZlKCks''@;'; put 'put ''eGUoImNsckFsZXJ0VHlwZSIsImFsZXJ0LWRhbmdlciIpLGZpKCJjbHJBbGVydENsb3NlZCIsaC5hbGVydENsb3NlZCksZmUoMyksX3IoaC5lcnJvck1zZyksZmUoKSx4ZSgiY2xyTG9hZGluZyIsaC5sb2FkaW5nKSgiZGlzYWJsZWQiLGgubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W283LFFs''@;'; put 'put ''LFFzLHI3LFlzLHBwLHF4LFh4LEIwLFQyLHVzLElkXSxzdHlsZXM6WyIuc2lkZUJhclByb3BzW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiMzMTQzNTEhaW1wb3J0YW50O2NvbG9yOiNlMGUwZTB9LnNpZGVCYXJQcm9wc1tfbmdjb250ZW50LSVDT01QJV0gICBoMltfbmdjb250ZW50''@;'; put 'put ''LSVDT01QJV0sIC5zaWRlQmFyUHJvcHNbX25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAuc2lkZUJhclByb3BzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnNpZGVCYXJQcm9wc1tfbmdjb250ZW50LSVDT01QJV0gICBoNVtf''@;'; put 'put ''bmdjb250ZW50LSVDT01QJV0sIC5zaWRlQmFyUHJvcHNbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNlMGUwZTB9LnNpZGVCYXJQcm9wc1tfbmdjb250ZW50LSVDT01QJV0gICBidXR0b25bX25nY29udGVudC0lQ09NUCVde2JvcmRlci1jb2xv''@;'; put 'put ''cjp3aGVhdCFpbXBvcnRhbnR9LnNpZGVCYXJQcm9wc1tfbmdjb250ZW50LSVDT01QJV0gICBhW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZTBlMGUwfS5sb2dpbi1zaWRlYmFyLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7cG9zaXRpb246Zml4''@;'; put 'put ''ZWQ7dG9wOjA7bGVmdDowO3BvaW50ZXItZXZlbnRzOm5vbmU7ei1pbmRleDoxMDAwMH0ubG9naW4tc2lkZWJhci13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSA+ICpbX25nY29udGVudC0lQ09NUCVde3BvaW50ZXItZXZlbnRzOmF1dG99LmxvZ2luLXNpZGViYXItd3JhcHBlcltfbmdjb250''@;'; put 'put ''ZW50LSVDT01QJV0gICAubG9naW4tc2lkZWJhcltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6NDAwcHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7bGVmdDowO2JhY2tncm91bmQ6I2ZmZjtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNkZGQ7cGFkZGluZzo0MHB4O3RyYW5zZm9y''@;'; put 'put ''bTp0cmFuc2xhdGUoLTQwMHB4KTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgZWFzZX0ubG9naW4tc2lkZWJhci13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5sb2dpbi1zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGZvcm0ubG9naW5bX25nY29udGVudC0lQ09NUCVde3otaW5k''@;'; put 'put ''ZXg6MTAxO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47anVzdGlmeS1jb250ZW50OmNlbnRlcn0ubG9naW4tc2lkZWJhci13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5sb2dpbi1zaWRlYmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGZvcm0ubG9naW5bX25nY29udGVu''@;'; put 'put ''dC0lQ09NUCVdICAgLnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MzJweDtsZXR0ZXItc3BhY2luZzpub3JtYWw7bGluZS1oZWlnaHQ6MzZweH0ubG9naW4tc2lkZWJhci13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5sb2dpbi1zaWRlYmFyW19uZ2NvbnRlbnQtJUNP''@;'; put 'put ''TVAlXSAgIGZvcm0ubG9naW5bX25nY29udGVudC0lQ09NUCVdICAgLnRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC53ZWxjb21lW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjM2cHh9LmxvZ2luLXNpZGViYXItd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubG9naW4tc2lk''@;'; put 'put ''ZWJhcltfbmdjb250ZW50LSVDT01QJV0gICBmb3JtLmxvZ2luW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5sb2dpbi1ncm91cFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nOjQ4cHggMCAwfS5sb2dpbi1zaWRlYmFyLXdyYXBwZXJb''@;'; put 'put ''X25nY29udGVudC0lQ09NUCVdICAgLmxvZ2luLXNpZGViYXJbX25nY29udGVudC0lQ09NUCVdICAgZm9ybS5sb2dpbltfbmdjb250ZW50LSVDT01QJV0gICAubG9naW4tZ3JvdXBbX25nY29udGVudC0lQ09NUCVdID4gKltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjZweCAwIDE4cHh9Lmxv''@;'; put 'put ''Z2luLXNpZGViYXItd3JhcHBlci5hY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgLmxvZ2luLXNpZGViYXJbX25nY29udGVudC0lQ09NUCVde3RyYW5zZm9ybTp0cmFuc2xhdGUoMCk7ei1pbmRleDoxMDF9LmxvZ2luLXNpZGViYXItd3JhcHBlci5hY3RpdmVbX25nY29udGVudC0lQ09NUCVd''@;'; put 'put ''ICAgLm92ZXJsYXlbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9LmxvZ2luLXNpZGViYXItd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAub3ZlcmxheVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpub25lO3Bvc2l0aW9uOmZpeGVkO3RvcDowO2xlZnQ6MDtoZWlnaHQ6''@;'; put 'put ''MTAwJTt3aWR0aDoxMDAlO2JhY2tncm91bmQ6IzIxMjEyMTgwO3otaW5kZXg6MTAwfSAgLmxvZ2luLXNpZGViYXItd3JhcHBlciAubG9naW4tZ3JvdXAgLmNsci1jb250cm9sLWNvbnRhaW5lciwgICAubG9naW4tc2lkZWJhci13cmFwcGVyIC5sb2dpbi1ncm91cCAuY2xyLWlucHV0LWdyb3Vw''@;'; put 'put ''LCAgIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLWdyb3VwIC51c2VybmFtZSwgICAubG9naW4tc2lkZWJhci13cmFwcGVyIC5sb2dpbi1ncm91cCAucGFzc3dvcmR7d2lkdGg6MTAwJX0gIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLWdyb3VwIC5jbHItaW5wdXQtd3JhcHBl''@;'; put 'put ''cnttYXgtd2lkdGg6bm9uZX0gIC5sb2dpbi1zaWRlYmFyLXdyYXBwZXIgLmxvZ2luLWdyb3VwIGJ1dHRvbnttYXgtd2lkdGg6bm9uZX0ubG9naW4tbG9nb1tfbmdjb250ZW50LSVDT01QJV17bWF4LXdpZHRoOjIwMHB4fSJdfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBXWmUoYyxsKXsxJmMm''@;'; put 'put ''JihkZSgwLCJzcGFuIiwxMCksTGUoMSwibG9hZGluZyIpLGhlKCkpfWZ1bmN0aW9uIFlaZShjLGwpezEmYyYmKGRlKDAsInNwYW4iLDExKSxMZSgxLCJsb2FkZWQiKSxoZSgpKX1mdW5jdGlvbiBHWmUoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiwxMiksTGUoMSwiZmFpbGVkIiksaGUoKSl9ZnVu''@;'; put 'put ''Y3Rpb24gJFplKGMsbCl7aWYoMSZjJiYoZGUoMCwicCIpKDEsImNvZGUiKSxMZSgyKSxoZSgpLExlKDMsIiBceGEwICIpLGd0KDQsV1plLDIsMCwic3BhbiIsNykoNSxZWmUsMiwwLCJzcGFuIiw4KSg2LEdaZSwyLDAsInNwYW4iLDkpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtm''@;'; put 'put ''ZSgyKSxfcihhLnByb2dyYW0pLGZlKDIpLHhlKCJuZ0lmIixhLnJ1bm5pbmcpLGZlKCkseGUoIm5nSWYiLCFhLnJ1bm5pbmcmJmEuc3VjY2Vzc2Z1bCksZmUoKSx4ZSgibmdJZiIsIWEucnVubmluZyYmIWEuc3VjY2Vzc2Z1bCl9fWZ1bmN0aW9uIEtaZShjLGwpe2lmKDEmYyYmKGRlKDAsImNs''@;'; put 'put ''ci1zaWducG9zdC1jb250ZW50Iiw1KSxndCgxLCRaZSw3LDQsInAiLDYpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO3hlKCJjbHJQb3NpdGlvbiIsImJvdHRvbS1taWRkbGUiKSxmZSgpLHhlKCJuZ0Zvck9mIixhLnJlcXVlc3RzKX19bGV0IHFaZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9y''@;'; put 'put ''KCl7dGhpcy5sb2FkaW5nPSExLHRoaXMucmVxdWVzdHM9W10sdGhpcy5fbG9hZGluZ1N1Yj1uZXcgcXR9bmdPbkluaXQoKXt9bmdPbkRlc3Ryb3koKXt0aGlzLl9sb2FkaW5nU3ViLnVuc3Vic2NyaWJlKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8''@;'; put 'put ''Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbG9hZGluZy1pbmRpY2F0b3IiXV0sZGVjbHM6Nix2YXJzOjYsY29uc3RzOltbMSwibG9hZGluZy1pbmRpY2F0b3IiXSxbImNsclNpZ25wb3N0VHJpZ2dlciIsIiIsMSwic3Bpbm5lciIsInNwaW5u''@;'; put 'put ''ZXItc20iLCJzcGlubmVyLWludmVyc2UiXSxbImNsclNpZ25wb3N0VHJpZ2dlciIsIiIsInNoYXBlIiwiY2hlY2siLCJzaXplIiwiMjAiLDEsImlzLWluZm8iXSxbImNsclNpZ25wb3N0VHJpZ2dlciIsIiIsInNoYXBlIiwiZXJyb3IiLCJzaXplIiwiMjQiLDEsImlzLWVycm9yIl0sWzMsImNs''@;'; put 'put ''clBvc2l0aW9uIiw0LCJjbHJJZk9wZW4iXSxbMywiY2xyUG9zaXRpb24iXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsInJ1bm5pbmciLDQsIm5nSWYiXSxbImNsYXNzIiwic3VjY2VzcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJmYWlsIiw0LCJuZ0lmIl0sWzEsInJ1bm5pbmciXSxb''@;'; put 'put ''MSwic3VjY2VzcyJdLFsxLCJmYWlsIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwwKSgxLCJjbHItc2lnbnBvc3QiKSxHdCgyLCJzcGFuIiwxKSgzLCJjbHItaWNvbiIsMikoNCwiY2xyLWljb24iLDMpLGd0KDUsS1plLDIsMiwiY2xyLXNpZ25wb3N0LWNvbnRl''@;'; put 'put ''bnQiLDQpLGhlKCkoKSksMiZkJiYoZmUoMiksX2QoImRpc3BsYXkiLGgubG9hZGluZz8iaW5saW5lLWJsb2NrIjoibm9uZSIpLGZlKCksX2QoImRpc3BsYXkiLCFoLmxvYWRpbmcmJmgucmVxdWVzdHMubGVuZ3RoPjAmJmgucmVxdWVzdHNbMF0uc3VjY2Vzc2Z1bD8iaW5saW5lLWJsb2NrIjoi''@;'; put 'put ''bm9uZSIpLGZlKCksX2QoImRpc3BsYXkiLCFoLmxvYWRpbmcmJmgucmVxdWVzdHMubGVuZ3RoPjAmJiFoLnJlcXVlc3RzWzBdLnN1Y2Nlc3NmdWw/ImlubGluZS1ibG9jayI6Im5vbmUiKSl9LGRlcGVuZGVuY2llczpbc3MseW8sT2wseDIsTkwsTjFlLEhMXSxzdHlsZXM6WyIubG9hZGluZy1p''@;'; put 'put ''bmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVde2xpbmUtaGVpZ2h0OjIuNXJlbTtoZWlnaHQ6Mi41cmVtO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OjEwMCU7bWFyZ2luLXJpZ2h0OjEwcHh9LmxvYWRpbmctaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5z''@;'; put 'put ''cGlubmVyW19uZ2NvbnRlbnQtJUNPTVAlXXt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmxvYWRpbmctaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1zaWducG9zdC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXXtsaW5lLWhlaWdodDoyNHB4O2NvbG9yOiM1NjU2NTY7Y3Vyc29y''@;'; put 'put ''OmF1dG99LmxvYWRpbmctaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1zaWducG9zdC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MTBweDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdl''@;'; put 'put ''ZW59LmxvYWRpbmctaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1zaWducG9zdC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdOmZpcnN0LWNoaWxke21hcmdpbi10b3A6MH0ubG9hZGluZy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09N''@;'; put 'put ''UCVdICAgY2xyLXNpZ25wb3N0LWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV06bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LmxvYWRpbmctaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1zaWducG9zdC1jb250ZW50W19uZ2NvbnRl''@;'; put 'put ''bnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVdICAgc3Bhbltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWxlZnQ6MTBweH0ubG9hZGluZy1pbmRpY2F0b3JbX25nY29udGVudC0lQ09NUCVdICAgY2xyLXNpZ25wb3N0LWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdj''@;'; put 'put ''b250ZW50LSVDT01QJV0gICBzcGFuLnJ1bm5pbmdbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNlOWJmMDR9LmxvYWRpbmctaW5kaWNhdG9yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1zaWducG9zdC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVd''@;'; put 'put ''ICAgc3Bhbi5zdWNjZXNzW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNjBiNTE1fS5sb2FkaW5nLWluZGljYXRvcltfbmdjb250ZW50LSVDT01QJV0gICBjbHItc2lnbnBvc3QtY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICBwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHNwYW4uZmFpbFtf''@;'; put 'put ''bmdjb250ZW50LSVDT01QJV17Y29sb3I6I2M5MjEwMH0iXX0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gWFplKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2RzLWljb24iLDEyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkudG9nZ2xlRGFya01v''@;'; put 'put ''ZGUoITApKX0pLGhlKCl9fWZ1bmN0aW9uIEpaZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNkcy1pY29uIiwxMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLnRvZ2dsZURhcmtNb2RlKCExKSl9KSxoZSgpfX1mdW5jdGlvbiBRWmUoYyxsKXtp''@;'; put 'put ''ZigxJmMmJihkZSgwLCJzcGFuIiksR3QoMSwiaW1nIiwxNCksaGUoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSxoTSgic3JjIixhLmdldFBpY3R1cmVVcmwoKSxVQyl9fWZ1bmN0aW9uIGVXZShjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDE1KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9''@;'; put 'put ''T2UoKTt4cigiaGlkZGVuIiwwPT09YS5mYWlsZWRSZXFzLmxlbmd0aCksZmUoKSxfcihhLmZhaWxlZFJlcXMubGVuZ3RoKX19ZnVuY3Rpb24gdFdlKGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIsMTYpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO3hyKCJoaWRkZW4iLDA9PT1hLmRl''@;'; put 'put ''YnVnTG9ncy5sZW5ndGgpLGZlKCksX3IoYS5kZWJ1Z0xvZ3MubGVuZ3RoKX19ZnVuY3Rpb24gbldlKGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMTcpfWZ1bmN0aW9uIHJXZShjLGwpezEmYyYmKGxpKDApLGRlKDEsImEiLDI4KSgyLCJzcGFuIiwyOSksTGUoMywiRG9jdW1lbnRhdGlvbiIp''@;'; put 'put ''LGhlKCkoKSxjaSgpKX1mdW5jdGlvbiBpV2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItZHJvcGRvd24tbWVudSIsMTgpKDEsImRpdiIsMTksMCkoMywiY2xyLXRvZ2dsZS1jb250YWluZXIiLDIwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9dm8o''@;'; put 'put ''Mik7cmV0dXJuIEN0KE9lKCkub25EZWJ1Z1Jvd0NsaWNrKGgsZikpfSksZGUoNCwiY2xyLXRvZ2dsZS13cmFwcGVyIikoNSwiaW5wdXQiLDIxKSxwaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpO3JldHVybiB2aShmLnNhc2pzQ29uZmlnLmRlYnVnLGgp''@;'; put 'put ''fHwoZi5zYXNqc0NvbmZpZy5kZWJ1Zz1oKSxDdChoKX0pLEZ0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLm9uRGVidWdNb2RlQ2hhbmdlKCkpfSksaGUoKSxkZSg2LCJsYWJlbCIpLExlKDcsIkRlYnVnIE1vZGUiKSxoZSgpKCkoKSgpLGRlKDgsImEi''@;'; put 'put ''LDIyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkub3BlblJlcXVlc3RzTW9kYWwoKSl9KSxkZSg5LCJzcGFuIiksTGUoMTAsIlNBUyBSZXF1ZXN0cyIpLGhlKCkoKSxndCgxMSxyV2UsNCwwLCJuZy1jb250YWluZXIiLDcpLEd0KDEyLCJkaXYiLDIzKSxkZSgx''@;'; put 'put ''MywiYSIsMjQpKDE0LCJzcGFuIiksTGUoMTUsIlN5c3RlbSIpLGhlKCkoKSxkZSgxNiwiYSIsMjUpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkubG9nb3V0KGgpKX0pLGRlKDE3LCJzcGFuIiksTGUoMTgsIkxvZyBPdXQiKSxoZSgpLEd0KDE5LCJjbHItaWNv''@;'; put 'put ''biIsMjYpLGhlKCksZGUoMjAsImRpdiIsMjcpKDIxLCJzcGFuIiksTGUoMjIpLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpO2ZlKDUpLGZpKCJuZ01vZGVsIixhLnNhc2pzQ29uZmlnLmRlYnVnKSxmZSg2KSx4ZSgibmdJZiIsIWEuaXNEZXBsb3lQYWdlKSxmZSgxMSksUnIoInYiLGEu''@;'; put 'put ''Y29tbWl0VmVyLCIiKX19bGV0IG9XZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMudXNlclNlcnZpY2U9YSx0aGlzLnNhc1NlcnZpY2U9ZCx0aGlzLmV2ZW50U2VydmljZT1oLHRoaXMucm91dGVyPWYsdGhpcy51c2VyTmFtZT0iTm90IGxvZ2dlZCBpbiIsdGhpcy5y''@;'; put 'put ''ZXFTdWI9bmV3IHF0LHRoaXMudXNlclN1Yj1uZXcgcXQsdGhpcy5hcHBMb2dzPVtdLHRoaXMuZGVidWdMb2dzPVtdLHRoaXMuZmFpbGVkUmVxcz1bXSx0aGlzLnNhc0Vycm9ycz1bXSx0aGlzLmlzVml5YT0hMSx0aGlzLnNhc2pzQ29uZmlnPW5ldyBmaC5TQVNqc0NvbmZpZyx0aGlzLnJlcXVl''@;'; put 'put ''c3RzQ291bnQ9MCx0aGlzLmNvbW1pdFZlcj0iIix0aGlzLmRhcmtNb2RlPXRoaXMuZXZlbnRTZXJ2aWNlLmRhcmtNb2RlfW5nT25Jbml0KCl7dGhpcy51c2VyU3ViPXRoaXMudXNlclNlcnZpY2UudXNlckNoYW5nZS5zdWJzY3JpYmUoYT0+e3RoaXMudXNlck5hbWU9YS51c2VybmFtZX0pLHRo''@;'; put 'put ''aXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksIlNBU1ZJWUEiPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlJiYodGhpcy5pc1ZpeWE9ITApLHRoaXMuY29tbWl0VmVyPSJ2Ni4xNC42Ii5yZXBsYWNlKCJ2IiwiIikrIi5nN2UxMWM4ZiJ9bmdPbkRl''@;'; put 'put ''c3Ryb3koKXt0aGlzLnJlcVN1Yi51bnN1YnNjcmliZSgpLHRoaXMudXNlclN1Yi51bnN1YnNjcmliZSgpfXRvZ2dsZURhcmtNb2RlKGEpe3RoaXMuZXZlbnRTZXJ2aWNlLnRvZ2dsZURhcmtNb2RlKGEpfW9wZW5SZXF1ZXN0c01vZGFsKCl7dGhpcy5ldmVudFNlcnZpY2Uub3BlblJlcXVlc3Rz''@;'; put 'put ''TW9kYWwoKX1vbkRlYnVnTW9kZUNoYW5nZShhKXt0aGlzLnNhc2pzQ29uZmlnJiZ0aGlzLnNhc1NlcnZpY2Uuc2V0RGVidWdTdGF0ZSh0aGlzLnNhc2pzQ29uZmlnLmRlYnVnKX1vbkRlYnVnUm93Q2xpY2soYSxkKXthLnN0b3BQcm9wYWdhdGlvbigpLHNldFRpbWVvdXQoKCk9PntkLmNsaWNr''@;'; put 'put ''KCl9LDMwMCl9bG9nb3V0KGEpe2EucHJldmVudERlZmF1bHQoKTt0cnl7dGhpcy5zYXNTZXJ2aWNlLmxvZ291dCgpfWNhdGNoKGQpe2NvbnNvbGUuZXJyb3IoZCl9fWdldFBpY3R1cmVVcmwoKXtyZXR1cm5gJHt0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybH0vaWRlbnRpdGllcy91c2Vycy8k''@;'; put 'put ''e3RoaXMudXNlck5hbWV9L2F2YXRhci9jb250ZW50YH1nZXQgaXNEZXBsb3lQYWdlKCl7cmV0dXJuIHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygiZGVwbG95Iil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UodVcpLEdlKEpzKSxHZShwYyks''@;'; put 'put ''R2UoTHMpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1oZWFkZXItYWN0aW9ucyJdXSxkZWNsczoxNCx2YXJzOjcsY29uc3RzOltbImRyb3Bkb3duSXRlbURlYnVnIiwiIl0sWzEsImhlYWRlci1hY3Rpb25zIl0sWzEsImQtZmxleCIsImNsci1h''@;'; put 'put ''bGlnbi1pdGVtcy1jZW50ZXIiXSxbInNpemUiLCJtZCIsImNsYXNzIiwidGhlbWUtdG9nZ2xlLWljb24gY3Vyc29yLXBvaW50ZXIiLCJzaGFwZSIsIm1vb24iLCJpbnZlcnNlIiwiZmFsc2UiLCJzb2xpZCIsImZhbHNlIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2l6ZSIsIm1kIiwiY2xhc3Mi''@;'; put 'put ''LCJ0aGVtZS10b2dnbGUtaWNvbiBjdXJzb3ItcG9pbnRlciIsInNoYXBlIiwic3VuIiwiaW52ZXJzZSIsImZhbHNlIiwic29saWQiLCJmYWxzZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwiYXBwLW5hdi1kcm9wZG93biJdLFsiY2xyRHJvcGRvd25Ub2dnbGUiLCIiLDEsIm5hdi10ZXh0Iiwi''@;'; put 'put ''Y29sb3Itd2hpdGUiLCJ1c2VyLW5hdi10b2dnbGUiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJiYWRnZSBiYWRnZS1kYW5nZXIiLDMsImhpZGRlbiIsNCwibmdJZiJdLFsiY2xhc3MiLCJiYWRnZSBiYWRnZS1pbmZvIiwzLCJoaWRkZW4iLDQsIm5nSWYiXSxbInNoYXBlIiwiY2FyZXQgZG93biIs''@;'; put 'put ''NCwibmdJZiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLDQsImNscklmT3BlbiJdLFsic2l6ZSIsIm1kIiwic2hhcGUiLCJtb29uIiwiaW52ZXJzZSIsImZhbHNlIiwic29saWQiLCJmYWxzZSIsMSwidGhlbWUtdG9nZ2xlLWljb24iLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2si''@;'; put 'put ''XSxbInNpemUiLCJtZCIsInNoYXBlIiwic3VuIiwiaW52ZXJzZSIsImZhbHNlIiwic29saWQiLCJmYWxzZSIsMSwidGhlbWUtdG9nZ2xlLWljb24iLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbImFsdCIsInByb2ZpbGUgcGljdHVyZSIsMSwiYXZhdGFyLWltZyIsMywic3JjIl0sWzEs''@;'; put 'put ''ImJhZGdlIiwiYmFkZ2UtZGFuZ2VyIl0sWzEsImJhZGdlIiwiYmFkZ2UtaW5mbyJdLFsic2hhcGUiLCJjYXJldCBkb3duIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwxLCJkZWJ1Zy1zd2l0Y2gtaXRlbSJdLFsxLCJ0b2dnbGUtc3dpdGNo''@;'; put 'put ''IiwzLCJjbGljayJdLFsiaWQiLCJkZWJ1Zy10b2dnbGUxIiwidHlwZSIsImNoZWNrYm94IiwiY2xyVG9nZ2xlIiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwzLCJjbGljayJdLFsxLCJzZXBhcmF0b3IiXSxbImhyZWYiLCIuLi4iLCJyb3V0''@;'; put 'put ''ZXJMaW5rIiwiL3N5c3RlbSIsImNsckRyb3Bkb3duSXRlbSIsIiJdLFsiaHJlZiIsIi4uLiIsImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siXSxbInNoYXBlIiwibG9nb3V0IiwxLCJjbHItbG9nb3V0Il0sWzEsImNvcHlSaWdodCJdLFsidGFyZ2V0IiwiX2JsYW5rIiwiaHJlZiIsImh0''@;'; put 'put ''dHBzOi8vZG9jcy5kYXRhY29udHJvbGxlci5pbyIsImNsckRyb3Bkb3duSXRlbSIsIiJdLFsxLCJkcm9wZG93bi10ZXh0Il1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwxKSgxLCJkaXYiLDIpLGd0KDIsWFplLDEsMCwiY2RzLWljb24iLDMpKDMsSlplLDEsMCwi''@;'; put 'put ''Y2RzLWljb24iLDQpLGhlKCksR3QoNCwiYXBwLWxvYWRpbmctaW5kaWNhdG9yIiksZGUoNSwiY2xyLWRyb3Bkb3duIiw1KSg2LCJidXR0b24iLDYpKDcsInNwYW4iKSxMZSg4KSxoZSgpLGd0KDksUVplLDIsMSwic3BhbiIsNykoMTAsZVdlLDIsMywic3BhbiIsOCkoMTEsdFdlLDIsMywic3Bh''@;'; put 'put ''biIsOSkoMTIsbldlLDEsMCwiY2xyLWljb24iLDEwKSxoZSgpLGd0KDEzLGlXZSwyMywzLCJjbHItZHJvcGRvd24tbWVudSIsMTEpLGhlKCkoKSksMiZkJiYoZmUoMikseGUoIm5nSWYiLCFoLmRhcmtNb2RlLnZhbHVlKSxmZSgpLHhlKCJuZ0lmIiwhIWguZGFya01vZGUudmFsdWUpLGZlKDUp''@;'; put 'put ''LF9yKGgudXNlck5hbWUpLGZlKCkseGUoIm5nSWYiLCJOb3QgbG9nZ2VkIGluIiE9PWgudXNlck5hbWUmJmguaXNWaXlhKSxmZSgpLHhlKCJuZ0lmIiwhaC5zYXNqc0NvbmZpZy5kZWJ1ZyksZmUoKSx4ZSgibmdJZiIsaC5zYXNqc0NvbmZpZy5kZWJ1ZyksZmUoKSx4ZSgibmdJZiIsIWguaXNW''@;'; put 'put ''aXlhKSl9LGRlcGVuZGVuY2llczpbeW8sQjEsUXMsWXMsdTEsT2wsY3MseDIsdXMsVzEsUHksRGQsaWcsaDcsZjcsT3kscVplXSxzdHlsZXM6WydbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6Y29udGVudHN9LmNvcHlSaWdodFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDoxMHB4fS5j''@;'; put 'put ''b3B5UmlnaHRbX25nY29udGVudC0lQ09NUCVdICAgc3Bhbltfbmdjb250ZW50LSVDT01QJV17d29yZC1icmVhazpicmVhay13b3JkO3doaXRlLXNwYWNlOnByZS13cmFwO3dpZHRoOjEwMCU7dGV4dC1hbGlnbjpjZW50ZXI7bGluZS1oZWlnaHQ6MS41fS51c2VyLW5hdi10b2dnbGVbX25nY29u''@;'; put 'put ''dGVudC0lQ09NUCVde3BhZGRpbmc6MCAxMHB4IWltcG9ydGFudDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDoxMDAlfS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLXJpZ2h0OjE1cHg7bGluZS1oZWlnaHQ6M3JlbTtoZWlnaHQ6M3Jl''@;'; put 'put ''bX0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gPiBidXR0b24uZHJvcGRvd24tdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojZmFmYWZhO3Bvc2l0aW9uOnJlbGF0aXZlfS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXSA+IGJ1dHRvbi5kcm9w''@;'; put 'put ''ZG93bi10b2dnbGVbX25nY29udGVudC0lQ09NUCVdOmFmdGVye2NvbnRlbnQ6IiI7YmFja2dyb3VuZC1jb2xvcjojZmFmYWZhO29wYWNpdHk6LjE1O2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHg7aGVpZ2h0OjQwcHg7dG9wOjEwcHh9LmFwcC1uYXYtZHJvcGRvd25bX25nY29u''@;'; put 'put ''dGVudC0lQ09NUCVdID4gYnV0dG9uLmRyb3Bkb3duLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV0gICAuYmFkZ2UuaGlkZGVuW19uZ2NvbnRlbnQtJUNPTVAlXXt2aXNpYmlsaXR5OmhpZGRlbn0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVu''@;'; put 'put ''dVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzU2NTY1NjtwYWRkaW5nLWJvdHRvbTowfS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1kcm9wZG93bi1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZXBhcmF0b3JbX25nY29udGVudC0lQ09NUCVde21hcmdp''@;'; put 'put ''bjoxMHB4IDA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgZ3JheX0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAuZHJvcGRvd24taXRlbVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2Zs''@;'; put 'put ''ZXgtZGlyZWN0aW9uOnJvdzthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmU7aGVpZ2h0OjQ1cHg7bGluZS1oZWlnaHQ6NDBweH0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAuZHJv''@;'; put 'put ''cGRvd24taXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAuYmFkZ2VbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxNXB4O3JpZ2h0OjI2cHg7bWFyZ2luLXJpZ2h0OjB9LmFwcC1uYXYtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdICAgY2xyLWRyb3Bkb3duLW1l''@;'; put 'put ''bnVbX25nY29udGVudC0lQ09NUCVdICAgLmRyb3Bkb3duLWl0ZW0uZGVidWctc3dpdGNoLWl0ZW1bX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MH0uYXBwLW5hdi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gICBjbHItZHJvcGRvd24tbWVudVtfbmdjb250ZW50LSVDT01QJV0gICAu''@;'; put 'put ''ZHJvcGRvd24taXRlbVtfbmdjb250ZW50LSVDT01QJV0gICAudG9nZ2xlLXN3aXRjaFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNs''@;'; put 'put ''ci1kcm9wZG93bi1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcm9wZG93bi1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbHItbG9nb3V0W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoyMHB4O3RvcDoxNXB4fS5hcHAtbmF2LWRyb3Bkb3duW19uZ2Nv''@;'; put 'put ''bnRlbnQtJUNPTVAlXSAgIGNsci1kcm9wZG93bi1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcm9wZG93bi1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1jb250cm9sLWNvbnRhaW5lcnt3aWR0aDoxMDAlO2hlaWdodDoxMDAlfS5hcHAtbmF2LWRyb3Bkb3duW19uZ2NvbnRl''@;'; put 'put ''bnQtJUNPTVAlXSAgIGNsci1kcm9wZG93bi1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcm9wZG93bi1pdGVtW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgY2xyLXRvZ2dsZS13cmFwcGVye3dpZHRoOjEwMCU7bWFyZ2luOjA7aGVpZ2h0OjEwMCU7cGFkZGluZzoxMHB4IDIwcHh9LmFwcC1u''@;'; put 'put ''YXYtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdICAgY2xyLWRyb3Bkb3duLW1lbnVbX25nY29udGVudC0lQ09NUCVdICAgLmRyb3Bkb3duLWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgICBpbnB1dHtpbnNldDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7Y3Vyc29yOnBvaW50ZXJ9LmFw''@;'; put 'put ''cC1uYXYtZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVdICAgY2xyLWRyb3Bkb3duLW1lbnVbX25nY29udGVudC0lQ09NUCVdICAgLmRyb3Bkb3duLWl0ZW1bX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLXRvZ2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdK2xhYmVsOmFmdGVy''@;'; put 'put ''e3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnR9LmRlYnVnLXRvZ2dsZS1sYWJlbFtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1sZWZ0OjQycHh9QG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KXsuc2lkZW5hdi1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGEubmF2LWxpbmsuYWN0aXZl''@;'; put 'put ''W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjppbmhlcml0O3BhZGRpbmc6MTVweDtiYWNrZ3JvdW5kOiM1NjU2NTZ9fS5uYXYtbGluay5kLWJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHNwYW4uYmFkZ2VbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlfS5hdmF0YXItaW1n''@;'; put 'put ''W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDo0MHB4O2hlaWdodDo0MHB4O21hcmdpbi1sZWZ0OjEwcHg7Ym9yZGVyLXJhZGl1czo1MHB4fSddfSl9fXJldHVybiBjfSkoKSxYZGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuYWxlcnRzPW5ldyBXbn1zdGF0aWN7dGhpcy5cdTAy''@;'; put 'put ''NzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBhV2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItYWxlcnQiLDIp''@;'; put 'put ''LHBpKCJjbHJBbGVydENsb3NlZENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIHZpKGYuY2xvc2VkLGgpfHwoZi5jbG9zZWQ9aCksQ3QoaCl9KSxGdCgiY2xyQWxlcnRDbG9zZWRDaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDIp''@;'; put 'put ''Lm9uQWxlcnRDbG9zZSgpKX0pLGRlKDEsImRpdiIsMykoMiwic3BhbiIsNCksTGUoMyksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O3hlKCJjbHJBbGVydFR5cGUiLGEudHlwZSkoImNsckFsZXJ0QXBwTGV2ZWwiLCEwKSxmaSgiY2xyQWxlcnRDbG9zZWQiLGEuY2xvc2Vk''@;'; put 'put ''KSxmZSgzKSxScigiICIsYS5tZXNzYWdlLCIgIil9fWZ1bmN0aW9uIHNXZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1hbGVydHMiKSxndCgxLGFXZSw0LDQsImNsci1hbGVydCIsMSksaGUoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSx4ZSgibmdGb3JPZiIsYS5hbGVydHMpfX1sZXQgbFdl''@;'; put 'put ''PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5fYWxlcnRzU2VydmljZT1hLHRoaXMuYWxlcnRzPVtdLHRoaXMuaGFzT3BlbkFsZXJ0PSExLHRoaXMuYWxlcnRzU3ViPW5ldyBxdH1uZ09uSW5pdCgpe3RoaXMuYWxlcnRzU3ViPXRoaXMuX2FsZXJ0c1NlcnZpY2UuYWxlcnRzLnN1''@;'; put 'put ''YnNjcmliZShhPT57dGhpcy5hbGVydHMucHVzaChhKSx0aGlzLmhhc09wZW5BbGVydD0hMCxhLmVyciYmY29uc29sZS5lcnJvcihhLmVycil9KX1vbkFsZXJ0Q2xvc2UoKXt0aGlzLmhhc09wZW5BbGVydD10aGlzLmFsZXJ0cy5zb21lKGE9PiFhLmNsb3NlZCl9c3RhdGlje3RoaXMuXHUwMjc1''@;'; put 'put ''ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoWGRlKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtYWxlcnRzIl1dLGRlY2xzOjEsdmFyczoxLGNvbnN0czpbWzQsIm5nSWYiXSxbMywiY2xyQWxlcnRUeXBlIiwiY2xyQWxlcnRB''@;'; put 'put ''cHBMZXZlbCIsImNsckFsZXJ0Q2xvc2VkIiwiY2xyQWxlcnRDbG9zZWRDaGFuZ2UiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJjbHJBbGVydENsb3NlZENoYW5nZSIsImNsckFsZXJ0VHlwZSIsImNsckFsZXJ0QXBwTGV2ZWwiLCJjbHJBbGVydENsb3NlZCJdLFsxLCJhbGVydC1pdGVtIl0s''@;'; put 'put ''WzEsImFsZXJ0LXRleHQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJmd0KDAsc1dlLDIsMSwiY2xyLWFsZXJ0cyIsMCksMiZkJiZ4ZSgibmdJZiIsaC5oYXNPcGVuQWxlcnQpfSxkZXBlbmRlbmNpZXM6W3NzLHlvLHF4LE9kZSxYeF0sc3R5bGVzOlsiY2xyLWFsZXJ0c1tfbmdjb250''@;'; put 'put ''ZW50LSVDT01QJV17ZGlzcGxheTpibG9ja30iXX0pfX1yZXR1cm4gY30pKCksc089KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe3RoaXMuY2xhc3Nlcz0iIn1uZ09uSW5pdCgpe31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3Ro''@;'; put 'put ''aXMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImNvbnRhY3QtbGluayJdXSxpbnB1dHM6e2NsYXNzZXM6ImNsYXNzZXMifSxkZWNsczoyLHZhcnM6Myxjb25zdHM6W1siaHJlZiIsIm1haWx0bzpzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvP3N1YmplY3Q9TGljZW5jZSIsMywi''@;'; put 'put ''bmdDbGFzcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImEiLDApLExlKDEsInN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKSxoZSgpKSwyJmQmJih4cigidW5zZXQiLCIiIT09aC5jbGFzc2VzKSx4ZSgibmdDbGFzcyIsaC5jbGFzc2VzKSl9LGRlcGVuZGVuY2llczpb''@;'; put 'put ''d3VdLHN0eWxlczpbIi51bnNldFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dW5zZXR9Il19KX19cmV0dXJuIGN9KSgpLEpkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5vcHRpb25zU3ViamVjdCQ9bmV3IFduLHRoaXMucmVzdWx0Q2hhbmdlJD1uZXcgV259b3BlbihhKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5vcHRpb25zU3ViamVjdCQubmV4dCh7b3BlbjohMCwuLi5hfSksdGhpcy5yZXN1bHRDaGFuZ2UkPW5ldyBXbix0aGlzLnJlc3VsdENoYW5nZSQuYXNPYnNlcnZhYmxlKCl9Y2xvc2UoYSl7dGhpcy5vcHRpb25zU3ViamVjdCQubmV4dCh7b3BlbjohMX0pLHRoaXMucmVzdWx0''@;'; put 'put ''Q2hhbmdlJC5uZXh0KHtwYXNzd29yZDphfSksdGhpcy5yZXN1bHRDaGFuZ2UkLmNvbXBsZXRlKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhYyxw''@;'; put 'put ''cm92aWRlZEluOiJyb290In0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gY1dlKGMsbCl7MSZjJiYoZGUoMCwicCIsMTMpLExlKDEsIiBTb3JyeSB0aGF0IGRpZG4ndCB3b3JrLCB0cnkgYWdhaW4uICIpLGhlKCkpfWZ1bmN0aW9uIHVXZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAs''@;'; put 'put ''ImRpdiIsMikoMSwiY2xyLW1vZGFsIiwzKSgyLCJoMyIsNCksTGUoMywiIFBhc3N3b3JkIFByb3RlY3RlZCBGaWxlICIpLGhlKCksZGUoNCwiZGl2Iiw1KSg1LCJwIiw2KSxMZSg2LCJQbGVhc2UgZW50ZXIgcGFzc3dvcmQ6IiksaGUoKSxkZSg3LCJpbnB1dCIsNywwKSxwaSgibmdNb2RlbENo''@;'; put 'put ''YW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpO3JldHVybiB2aShmLnBhc3N3b3JkSW5wdXQsaCl8fChmLnBhc3N3b3JkSW5wdXQ9aCksQ3QoaCl9KSxoZSgpKCksZGUoOSwiZGl2Iiw4KSgxMCwiZGl2IiksZ3QoMTEsY1dlLDIsMCwicCIsOSksaGUoKSxkZSgxMiwiZGl2Iiwx''@;'; put 'put ''MCkoMTMsImJ1dHRvbiIsMTEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5jbG9zZSgpKX0pLExlKDE0LCIgQ2FuY2VsICIpLGhlKCksZGUoMTUsImJ1dHRvbiIsMTIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPXZvKDgpO3JldHVybiBD''@;'; put 'put ''dChPZSgpLmNsb3NlKGgudmFsdWUpKX0pLExlKDE2LCIgVW5sb2NrICIpLGhlKCkoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC5uZ0lmLGQ9dm8oOCksaD1PZSgpO2ZlKCkseGUoImNsck1vZGFsT3BlbiIsYS5vcGVuKSgiY2xyTW9kYWxTaXplIiwibWQiKSgiY2xyTW9kYWxDbG9zYWJsZSIs''@;'; put 'put ''ITEpLGZlKDYpLGZpKCJuZ01vZGVsIixoLnBhc3N3b3JkSW5wdXQpLGZlKDQpLHhlKCJuZ0lmIixhLmVycm9yKSxmZSg0KSx4ZSgiZGlzYWJsZWQiLGQudmFsdWUubGVuZ3RoPDEpfX1sZXQgZFdlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5leGNlbFBhc3N3b3JkTW9kYWxT''@;'; put 'put ''ZXJ2aWNlPWEsdGhpcy5vcHRpb25zJD10aGlzLmV4Y2VsUGFzc3dvcmRNb2RhbFNlcnZpY2Uub3B0aW9uc1N1YmplY3QkLHRoaXMuZmlsZVVubG9ja0Vycm9yPSExLHRoaXMucGFzc3dvcmRJbnB1dD0iIn1jbG9zZShhKXt0aGlzLnBhc3N3b3JkSW5wdXQ9IiIsdGhpcy5leGNlbFBhc3N3b3Jk''@;'; put 'put ''TW9kYWxTZXJ2aWNlLmNsb3NlKGEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEpkZSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWV4Y2VsLXBhc3N3b3JkLW1vZGFsIl1dLGRlY2xzOjIs''@;'; put 'put ''dmFyczozLGNvbnN0czpbWyJmaWxlUGFzc3dvcmRJbnB1dCIsIiJdLFsiY2xhc3MiLCJleGNlbC1wYXNzd29yZC1yb290Iiw0LCJuZ0lmIl0sWzEsImV4Y2VsLXBhc3N3b3JkLXJvb3QiXSxbMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJt''@;'; put 'put ''b2RhbC10aXRsZSIsImNlbnRlciIsInRleHQtY2VudGVyIiwiY29sb3ItZGFya2VyLWdyYXkiXSxbMSwibW9kYWwtYm9keSIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsIm0tMCJdLFsiZGF0YS1scGlnbm9yZSIsInRydWUiLCJhdXRvY29tcGxldGUiLCJvZmYi''@;'; put 'put ''LCJpZCIsImZpbGVQYXNzd29yZElucHV0IiwidHlwZSIsInRleHQiLDEsImNsci1pbnB1dCIsImRpc2FibGUtcGFzc3dvcmQtbWFuYWdlciIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJjbGFzcyIsIm0tMCBjb2xvci1yZWQiLDQsIm5nSWYiXSxb''@;'; put 'put ''MSwiYnV0dG9ucyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJjbGljayIsImRpc2FibGVkIl0sWzEsIm0tMCIsImNvbG9y''@;'; put 'put ''LXJlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGd0KDAsdVdlLDE3LDYsImRpdiIsMSkscXMoMSwiYXN5bmMiKSksMiZkJiZ4ZSgibmdJZiIsa2MoMSwxLGgub3B0aW9ucyQpKX0sZGVwZW5kZW5jaWVzOlt5byxRbCxRcyxZcyxvdSxLdSx4TV0sc3R5bGVzOlsiLmV4Y2VsLXBh''@;'; put 'put ''c3N3b3JkLXJvb3RbX25nY29udGVudC0lQ09NUCVdICAgICAubW9kYWx7ei1pbmRleDoxMDYwfS5tb2RhbC1mb290ZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59Lm1vZGFsLWZvb3Rlcltf''@;'; put 'put ''bmdjb250ZW50LSVDT01QJV0gICAuYnV0dG9uc1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2dhcDo1cHh9Il19KX19cmV0dXJuIGN9KSgpLFF4PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLmZpbGVPdmVyPSExLHRoaXMuZmlsZURyb3BwZWQ9bmV3IHFyLHRoaXMu''@;'; put 'put ''ZmlsZURyYWdnZWRPdmVyPW5ldyBxcn1vbkRyYWdPdmVyKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpLHRoaXMuY29udGFpbnNGaWxlcyhhKSYmIXRoaXMuZmlsZU92ZXImJih0aGlzLmZpbGVPdmVyPSEwLHRoaXMuZmlsZURyYWdnZWRPdmVyLmVtaXQoKSl9b25E''@;'; put 'put ''cmFnTGVhdmUoYSl7YS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5maWxlT3Zlcj0hMX1vbmRyb3AoYSl7YS5wcmV2ZW50RGVmYXVsdCgpLGEuc3RvcFByb3BhZ2F0aW9uKCksdGhpcy5maWxlT3Zlcj0hMTtjb25zdCBkPWEuZGF0YVRyYW5zZmVyLmZpbGVzO2Qu''@;'; put 'put ''bGVuZ3RoPjAmJnRoaXMuZmlsZURyb3BwZWQuZW1pdChkKX1jb250YWluc0ZpbGVzKGEpe2lmKGEmJmEuZGF0YVRyYW5zZmVyJiZhLmRhdGFUcmFuc2Zlci50eXBlcylmb3IobGV0IGQ9MDtkPGEuZGF0YVRyYW5zZmVyLnR5cGVzLmxlbmd0aDtkKyspaWYoIkZpbGVzIj09YS5kYXRhVHJhbnNm''@;'; put 'put ''ZXIudHlwZXNbZF0pcmV0dXJuITB9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJhcHBEcmFnTmRyb3AiLCIiXV0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6''@;'; put 'put ''ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0KCJkcmFnb3ZlciIsZnVuY3Rpb24odil7cmV0dXJuIGgub25EcmFnT3Zlcih2KX0pKCJkcmFnbGVhdmUiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uRHJhZ0xlYXZlKHYpfSkoImRyb3AiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uZHJvcCh2KX0pLDImZCYm''@;'; put 'put ''eHIoImZpbGVvdmVyIixoLmZpbGVPdmVyKX0sb3V0cHV0czp7ZmlsZURyb3BwZWQ6ImZpbGVEcm9wcGVkIixmaWxlRHJhZ2dlZE92ZXI6ImZpbGVEcmFnZ2VkT3ZlciJ9fSl9fXJldHVybiBjfSkoKTtjb25zdCBRZGU9KCk9PltdO2Z1bmN0aW9uIGhXZShjLGwpezEmYyYmKGRlKDAsInAiLDYp''@;'; put 'put ''LExlKDEsIk5vIHJlcXVlc3RzIG1hZGUiKSxoZSgpKX1mdW5jdGlvbiBmV2UoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiksR3QoMSwiY2xyLWljb24iLDEzKSxoZSgpKX1mdW5jdGlvbiBwV2UoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiksR3QoMSwiY2xyLWljb24iLDE0KSxoZSgpKX1mdW5jdGlv''@;'; put 'put ''biBnV2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwyMSksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0LGY9T2UoMykuaW5kZXg7cmV0dXJuIEN0KE9lKDIpLmdvVG9Mb2dMaW5lKGgsInJlcXVlc3RfIitmLCJlcnJv''@;'; put 'put ''ciIpKX0pLGRlKDEsImJ1dHRvbiIsMjIpLExlKDIpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoMiksUnIoIiAiLGEsIiAiKX19ZnVuY3Rpb24gbVdlKGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRyZWUtbm9kZSIsMTgpLEd0KDEsImNsci1pY29uIiwxOSksTGUoMiks''@;'; put 'put ''Z3QoMyxnV2UsMywxLCJjbHItdHJlZS1ub2RlIiwyMCksaGUoKSksMiZjKXtjb25zdCBhPU9lKDIpLiRpbXBsaWNpdDtmZSgyKSxScigiIEVycm9ycyAoIixhLmxvZ0Vycm9ycy5sZW5ndGgsIikgIiksZmUoKSx4ZSgibmdGb3JPZiIsYS5sb2dFcnJvcnN8fFdzKDIsUWRlKSl9fWZ1bmN0aW9u''@;'; put 'put ''IHZXZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDIxKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQsZj1PZSgzKS5pbmRleDtyZXR1cm4gQ3QoT2UoMikuZ29Ub0xvZ0xpbmUoaCwicmVxdWVzdF8iK2YsIndhcm5p''@;'; put 'put ''bmciKSl9KSxkZSgxLCJidXR0b24iLDIyKSxMZSgyKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKDIpLFJyKCIgIixhLCIgIil9fWZ1bmN0aW9uIGJXZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10cmVlLW5vZGUiLDE4KSxHdCgxLCJjbHItaWNvbiIsMjMpLExlKDIp''@;'; put 'put ''LGd0KDMsdldlLDMsMSwiY2xyLXRyZWUtbm9kZSIsMjApLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKS4kaW1wbGljaXQ7ZmUoMiksUnIoIiBXYXJuaW5ncyAoIixhLmxvZ1dhcm5pbmdzLmxlbmd0aCwiKSAiKSxmZSgpLHhlKCJuZ0Zvck9mIixhLmxvZ1dhcm5pbmdzfHxXcygyLFFkZSkpfX1m''@;'; put 'put ''dW5jdGlvbiB5V2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJidXR0b24iLDI0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKDIpLmRvd25sb2FkTG9nKGgubG9nRmlsZSkpfSksTGUoMSwiIERvd25sb2Fk''@;'; put 'put ''ICIpLGhlKCl9fWZ1bmN0aW9uIF9XZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10YWItY29udGVudCIpKDEsImNsci10cmVlIiksZ3QoMixtV2UsNCwzLCJjbHItdHJlZS1ub2RlIiwxNSkoMyxiV2UsNCwzLCJjbHItdHJlZS1ub2RlIiwxNSksaGUoKSxHdCg0LCJkaXYiLDE2KSxndCg1LHlX''@;'; put 'put ''ZSwyLDAsImJ1dHRvbiIsMTcpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpLiRpbXBsaWNpdDtmZSgyKSx4ZSgibmdJZiIsYS5sb2dFcnJvcnMpLGZlKCkseGUoIm5nSWYiLGEubG9nV2FybmluZ3MpLGZlKCkseGUoImlubmVySFRNTCIsYS5sb2dGaWxlLEY0KSxmZSgpLHhlKCJuZ0lmIiwobnVs''@;'; put 'put ''bD09YS5sb2dGaWxlP251bGw6YS5sb2dGaWxlLmxlbmd0aCk+MCl9fWZ1bmN0aW9uIHdXZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImJ1dHRvbiIsMjQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoMiku''@;'; put 'put ''ZG93bmxvYWRTb3VyY2VDb2RlKGguc291cmNlQ29kZSkpfSksTGUoMSwiIERvd25sb2FkICIpLGhlKCl9fWZ1bmN0aW9uIENXZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10YWItY29udGVudCIpKDEsImRpdiIsMjUpLExlKDIpLGhlKCksZ3QoMyx3V2UsMiwwLCJidXR0b24iLDE3KSxoZSgp''@;'; put 'put ''KSwyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQ7ZmUoMiksX3IoYS5zb3VyY2VDb2RlKSxmZSgpLHhlKCJuZ0lmIiwobnVsbD09YS5zb3VyY2VDb2RlP251bGw6YS5zb3VyY2VDb2RlLmxlbmd0aCk+MCl9fWZ1bmN0aW9uIFNXZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImJ1''@;'; put 'put ''dHRvbiIsMjQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoMikuZG93bmxvYWRHZW5lcmF0ZWRDb2RlKGguZ2VuZXJhdGVkQ29kZSkpfSksTGUoMSwiIERvd25sb2FkICIpLGhlKCl9fWZ1bmN0aW9uIE1XZShjLGwpe2lm''@;'; put 'put ''KDEmYyYmKGRlKDAsImNsci10YWItY29udGVudCIpKDEsImRpdiIsMjUpLExlKDIpLGhlKCksZ3QoMyxTV2UsMiwwLCJidXR0b24iLDE3KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQ7ZmUoMiksUnIoIiAiLGEuZ2VuZXJhdGVkQ29kZSwiICIpLGZlKCkseGUoIm5nSWYiLChu''@;'; put 'put ''dWxsPT1hLmdlbmVyYXRlZENvZGU/bnVsbDphLmdlbmVyYXRlZENvZGUubGVuZ3RoKT4wKX19ZnVuY3Rpb24geFdlKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2IiwzMSksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChP''@;'; put 'put ''ZSgzKS4kaW1wbGljaXQuc2VsZWN0ZWRUYWJsZT1oLmtleSl9KSxMZSgxKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDt4cigic2VsZWN0ZWQiLE9lKDMpLiRpbXBsaWNpdC5zZWxlY3RlZFRhYmxlPT09YS5rZXkpLGZlKCksUnIoIiAiLGEua2V5LCIgIil9fWZ1bmN0aW9uIEVX''@;'; put 'put ''ZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1kcm9wZG93bi1tZW51IiksZ3QoMSx4V2UsMiwzLCJkaXYiLDMwKSxxcygyLCJrZXl2YWx1ZSIpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKS4kaW1wbGljaXQ7ZmUoKSx4ZSgibmdGb3JPZiIsa2MoMiwxLGEuU0FTV09SSykpfX1mdW5jdGlvbiBU''@;'; put 'put ''V2UoYyxsKXtpZigxJmMmJihkZSgwLCJwIiwzNSkoMSwic3Ryb25nIiksTGUoMiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMykuJGltcGxpY2l0O2ZlKDIpLFJyKCIiLGEuc2VsZWN0ZWRUYWJsZSwiIChmaXJzdCAxMCByb3dzKSAiKX19ZnVuY3Rpb24gQVdlKGMsbCl7aWYoMSZjJiYoZGUo''@;'; put 'put ''MCwidGgiKSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxScigiICIsYS5rZXksIiAiKX19ZnVuY3Rpb24ga1dlKGMsbCl7aWYoMSZjJiYoZGUoMCwidGQiKSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1PZSgpLiRpbXBsaWNpdDtmZSgp''@;'; put 'put ''LFJyKCIgIixkW2Eua2V5XSwiICIpfX1mdW5jdGlvbiBEV2UoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpLGd0KDEsa1dlLDIsMSwidGQiLDM3KSxxcygyLCJrZXl2YWx1ZSIpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSg0KS4kaW1wbGljaXQ7ZmUoKSx4ZSgibmdGb3JPZiIsa2MoMiwxLGEuU0FT''@;'; put 'put ''V09SS1thLnNlbGVjdGVkVGFibGVdLmZpcnN0MTByb3dzWzBdKSl9fWZ1bmN0aW9uIElXZShjLGwpe2lmKDEmYyYmKGRlKDAsInRhYmxlIiwzNikoMSwidGhlYWQiKSgyLCJ0ciIpLGd0KDMsQVdlLDIsMSwidGgiLDM3KSxxcyg0LCJrZXl2YWx1ZSIpLGhlKCkoKSxkZSg1LCJ0Ym9keSIpLGd0''@;'; put 'put ''KDYsRFdlLDMsMywidHIiLDM3KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgzKS4kaW1wbGljaXQ7ZmUoMykseGUoIm5nRm9yT2YiLGtjKDQsMixhLlNBU1dPUktbYS5zZWxlY3RlZFRhYmxlXS5maXJzdDEwcm93c1swXSkpLGZlKDMpLHhlKCJuZ0Zvck9mIixhLlNBU1dPUktbYS5zZWxlY3Rl''@;'; put 'put ''ZFRhYmxlXS5maXJzdDEwcm93cyl9fWZ1bmN0aW9uIFJXZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10YWItY29udGVudCIpLGd0KDEsVFdlLDMsMSwicCIsMzIpLGRlKDIsImRpdiIsMzMpLGd0KDMsSVdlLDcsNCwidGFibGUiLDM0KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgyKS4kaW1w''@;'; put 'put ''bGljaXQ7ZmUoKSx4ZSgibmdJZiIsYS5zZWxlY3RlZFRhYmxlKSxmZSgyKSx4ZSgibmdJZiIsYS5zZWxlY3RlZFRhYmxlKX19ZnVuY3Rpb24gTFdlKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXRhYiIpKDEsImNsci1kcm9wZG93biIsMjYpKDIsImJ1dHRvbiIsMjcpLExl''@;'; put 'put ''KDMsIiBTQVMgV29yayBUYWJsZXMgIiksR3QoNCwiY2xyLWljb24iLDI4KSxoZSgpLGd0KDUsRVdlLDMsMywiY2xyLWRyb3Bkb3duLW1lbnUiLDI5KSxoZSgpLGd0KDYsUldlLDQsMiwibmctdGVtcGxhdGUiLDEyKSxwaSgiY2xySWZBY3RpdmVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2Nv''@;'; put 'put ''bnN0IGY9T2UoMyk7cmV0dXJuIHZpKGYudGFibGVzQWN0aXZlLGgpfHwoZi50YWJsZXNBY3RpdmU9aCksQ3QoaCl9KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1PZSgzKTtmZSgpLHhlKCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayIsITApLGZlKDUpLGZpKCJjbHJJZkFjdGl2ZSIsYS50YWJsZXNB''@;'; put 'put ''Y3RpdmUpfX1mdW5jdGlvbiBPV2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItc3RhY2stYmxvY2siLDgpKDEsImNsci1zdGFjay1sYWJlbCIpLExlKDIpLGRlKDMsInNwYW4iLDkpLGd0KDQsZldlLDIsMCwic3BhbiIsNSkoNSxwV2UsMiwwLCJzcGFuIiw1KSxoZSgpKCks''@;'; put 'put ''ZGUoNiwiY2xyLXN0YWNrLWNvbnRlbnQiKSxMZSg3KSxoZSgpLGRlKDgsImNsci1zdGFjay1ibG9jayIsMTApKDksImNsci1zdGFjay1jb250ZW50IikoMTAsImNsci10YWJzIikoMTEsImNsci10YWIiKSgxMiwiYnV0dG9uIiwxMSksTGUoMTMsIlNBUyBMb2ciKSxoZSgpLGd0KDE0LF9XZSw2''@;'; put 'put ''LDQsIm5nLXRlbXBsYXRlIiwxMikscGkoImNscklmQWN0aXZlQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDIpO3JldHVybiB2aShmLnNhc0xvZ0FjdGl2ZSxoKXx8KGYuc2FzTG9nQWN0aXZlPWgpLEN0KGgpfSksaGUoKSxkZSgxNSwiY2xyLXRhYiIpKDE2LCJidXR0b24i''@;'; put 'put ''LDExKSxMZSgxNywiU0FTIFNvdXJjZSBDb2RlIiksaGUoKSxndCgxOCxDV2UsNCwyLCJuZy10ZW1wbGF0ZSIsMTIpLHBpKCJjbHJJZkFjdGl2ZUNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgyKTtyZXR1cm4gdmkoZi5zYXNTb3VyY2VDb2RlQWN0aXZlLGgpfHwoZi5zYXNT''@;'; put 'put ''b3VyY2VDb2RlQWN0aXZlPWgpLEN0KGgpfSksaGUoKSxkZSgxOSwiY2xyLXRhYiIpKDIwLCJidXR0b24iLDExKSxMZSgyMSwiU0FTIEdlbmVyYXRlZCBDb2RlIiksaGUoKSxndCgyMixNV2UsNCwyLCJuZy10ZW1wbGF0ZSIsMTIpLHBpKCJjbHJJZkFjdGl2ZUNoYW5nZSIsZnVuY3Rpb24oaCl7''@;'; put 'put ''d3QoYSk7Y29uc3QgZj1PZSgyKTtyZXR1cm4gdmkoZi5zYXNHZW5lcmF0ZWRDb2RlQWN0aXZlLGgpfHwoZi5zYXNHZW5lcmF0ZWRDb2RlQWN0aXZlPWgpLEN0KGgpfSksaGUoKSxndCgyMyxMV2UsNywyLCJjbHItdGFiIiw1KSxoZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNp''@;'; put 'put ''dCxkPWwuaW5kZXgsaD1PZSgyKTt4ZSgiaWQiLCJyZXF1ZXN0XyIrZCkoImNsclN0YWNrVmlld0xldmVsIiwxKSxmZSgyKSxScigiICIsYS5zZXJ2aWNlTGluaywiICIpLGZlKDIpLHhlKCJuZ0lmIiwobnVsbD09YS5sb2dXYXJuaW5ncz9udWxsOmEubG9nV2FybmluZ3MubGVuZ3RoKT4wKSxm''@;'; put 'put ''ZSgpLHhlKCJuZ0lmIiwobnVsbD09YS5sb2dFcnJvcnM/bnVsbDphLmxvZ0Vycm9ycy5sZW5ndGgpPjApLGZlKDIpLF9yKGEucGFyc2VkVGltZXN0YW1wKSxmZSg3KSxmaSgiY2xySWZBY3RpdmUiLGguc2FzTG9nQWN0aXZlKSxmZSg0KSxmaSgiY2xySWZBY3RpdmUiLGguc2FzU291cmNlQ29k''@;'; put 'put ''ZUFjdGl2ZSksZmUoNCksZmkoImNscklmQWN0aXZlIixoLnNhc0dlbmVyYXRlZENvZGVBY3RpdmUpLGZlKCkseGUoIm5nSWYiLGEuU0FTV09SSyl9fWZ1bmN0aW9uIFBXZShjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1zdGFjay12aWV3IiksZ3QoMSxPV2UsMjQsMTAsImNsci1zdGFjay1ibG9j''@;'; put 'put ''ayIsNyksaGUoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSx4ZSgibmdGb3JPZiIsYS5zYXNqc1JlcXVlc3RzKX19bGV0IEZXZT0oKCk9PntjbGFzcyBje2dldCBvcGVuZWQoKXtyZXR1cm4gdGhpcy5fb3BlbmVkfXNldCBvcGVuZWQoYSl7dGhpcy5fb3BlbmVkPWEsYSYmdGhpcy5tb2RhbE9w''@;'; put 'put ''ZW5lZCgpLHRoaXMubG9nZ2VyU2VydmljZS5sb2codGhpcy5zYXNqc1JlcXVlc3RzKX1jb25zdHJ1Y3RvcihhLGQsaCl7dGhpcy5zYXNTZXJ2aWNlPWEsdGhpcy5sb2dnZXJTZXJ2aWNlPWQsdGhpcy5oZWxwZXJTZXJ2aWNlPWgsdGhpcy5fb3BlbmVkPSExLHRoaXMub3BlbmVkQ2hhbmdlPW5l''@;'; put 'put ''dyBxcix0aGlzLnNhc0xvZ0FjdGl2ZT0hMCx0aGlzLnNhc1NvdXJjZUNvZGVBY3RpdmU9ITEsdGhpcy5zYXNHZW5lcmF0ZWRDb2RlQWN0aXZlPSExLHRoaXMudGFibGVzQWN0aXZlPSExLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksdGhpcy5zYXNq''@;'; put 'put ''c1JlcXVlc3RzPVtdfW5nT25Jbml0KCl7fXBhcnNlTG9nVGltZXN0YW1wKGEpe3JldHVybmAke3RoaXMuZm9ybWF0VGltZXN0YW1wKGEpfSAke3RoaXMudGltZXN0YW1wRnJvbU5vdyhhKX1gfWN1dEFwcExvYyhhKXtyZXR1cm4gYS5yZXBsYWNlKHRoaXMuc2FzanNDb25maWcuYXBwTG9jKyIv''@;'; put 'put ''IiwiIil9Zm9ybWF0VGltZXN0YW1wKGEpe3JldHVybiBMYShhKS5mb3JtYXQoKT9MYShhKS5mb3JtYXQoImRkZGQsIE1NTU0gRG8gWVlZWSwgaDptbTpzcyBhIik6YX10aW1lc3RhbXBGcm9tTm93KGEpe3JldHVybiBMYShhKS5mb3JtYXQoKT9gICgke0xhKGEpLmZyb21Ob3coKX0pYDoiIn1t''@;'; put 'put ''b2RhbE9wZW5DaGFuZ2UoYSl7dGhpcy5vcGVuZWQ9YSx0aGlzLm9wZW5lZENoYW5nZS5lbWl0KHRoaXMub3BlbmVkKX1tb2RhbE9wZW5lZCgpe3RoaXMuc2FzanNSZXF1ZXN0cz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzUmVxdWVzdHMoKTtmb3IobGV0IGEgb2YgdGhpcy5zYXNqc1JlcXVlc3Rz''@;'; put 'put ''KXRoaXMucGFyc2VFcnJvcnNBbmRXYXJuaW5ncyhhKSxhLnNlcnZpY2VMaW5rPXRoaXMuY3V0QXBwTG9jKGEuc2VydmljZUxpbmspLGEucGFyc2VkVGltZXN0YW1wPXRoaXMucGFyc2VMb2dUaW1lc3RhbXAoYS50aW1lc3RhbXApfWdvVG9Mb2dMaW5lKGEsZCxoKXtsZXQgZj1kb2N1bWVudC5x''@;'; put 'put ''dWVyeVNlbGVjdG9yQWxsKGAjJHtkfSAubG9nLXdyYXBwZXIuc2FzbG9nIGZvbnRgKSx2PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke2R9IC5sb2ctd3JhcHBlci5zYXNsb2dgKTtmb3IobGV0IE0gb2YgZilNLnRleHRDb250ZW50LmluY2x1ZGVzKGEpJiYodi5zY3JvbGxUb3A9TS5vZmZz''@;'; put 'put ''ZXRUb3Atdi5vZmZzZXRUb3AsTS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9IiM2MWEyMjAyYiIsc2V0VGltZW91dCgoKT0+e00uc3R5bGU9IiJ9LDNlMykpfXBhcnNlRXJyb3JzQW5kV2FybmluZ3MoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aWYoIWF8fCFhLmxvZ0ZpbGV8''@;'; put 'put ''fCJzdHJpbmciIT10eXBlb2YgYS5sb2dGaWxlfHx2b2lkIDAhPT1hLmxvZ0Vycm9yc3x8dm9pZCAwIT09YS5sb2dXYXJuaW5ncylyZXR1cm47bGV0IGg9W10sZj1bXSx2PWEubG9nRmlsZS5zcGxpdCgiXG4iKTtmb3IobGV0IE09MDtNPHYubGVuZ3RoO00rKyl7aWYoLzwuKj5FUlJPUi9nbS50''@;'; put 'put ''ZXN0KHZbTV0pKXtsZXQgRD12W01dLnN1YnN0cmluZyh2W01dLmluZGV4T2YoIkUiKSx2W01dLmxlbmd0aC0xKTtoLnB1c2goRCl9ZWxzZS9eRVJST1IvZ20udGVzdCh2W01dKSYmKGgucHVzaCh2W01dKSx2W01dPSI8Zm9udD4iK3ZbTV0rIjwvZm9udD4iKTtpZigvPC4qPldBUk5JTkcvZ20u''@;'; put 'put ''dGVzdCh2W01dKSl7bGV0IEQ9dltNXS5zdWJzdHJpbmcodltNXS5pbmRleE9mKCJXIiksdltNXS5sZW5ndGgtMSk7Zi5wdXNoKEQpfWVsc2UvXldBUk5JTkcvZ20udGVzdCh2W01dKSYmKGYucHVzaCh2W01dKSx2W01dPSI8Zm9udD4iK3ZbTV0rIjwvZm9udD4iKX1kLmxvZ2dlclNlcnZpY2Uu''@;'; put 'put ''bG9nKGYpLGEubG9nRmlsZT12LmpvaW4oIlxuIiksYS5sb2dFcnJvcnM9aCxhLmxvZ1dhcm5pbmdzPWZ9KSgpfWRvd25sb2FkTG9nKGEpe2NvbnN0IGQ9KG5ldyBEYXRlKS52YWx1ZU9mKCk7dGhpcy5oZWxwZXJTZXJ2aWNlLmRvd25sb2FkVGV4dEZpbGUoYGxvZ0ZpbGUtJHtkfWAsYSl9ZG93''@;'; put 'put ''bmxvYWRTb3VyY2VDb2RlKGEpe2NvbnN0IGQ9KG5ldyBEYXRlKS52YWx1ZU9mKCk7dGhpcy5oZWxwZXJTZXJ2aWNlLmRvd25sb2FkVGV4dEZpbGUoYHNvdXJjZUNvZGUtJHtkfWAsYSl9ZG93bmxvYWRHZW5lcmF0ZWRDb2RlKGEpe2NvbnN0IGQ9KG5ldyBEYXRlKS52YWx1ZU9mKCk7dGhpcy5o''@;'; put 'put ''ZWxwZXJTZXJ2aWNlLmRvd25sb2FkVGV4dEZpbGUoYGdlbmVyYXRlZENvZGUtJHtkfWAsYSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoSnMpLEdlKFNkKSxHZShHdSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxl''@;'; put 'put ''Y3RvcnM6W1siYXBwLXJlcXVlc3RzLW1vZGFsIl1dLGlucHV0czp7b3BlbmVkOiJvcGVuZWQifSxvdXRwdXRzOntvcGVuZWRDaGFuZ2U6Im9wZW5lZENoYW5nZSJ9LGRlY2xzOjgsdmFyczo0LGNvbnN0czpbWyJjbHJNb2RhbFNpemUiLCJ4bCIsMSwicmVxdWVzdHMtbW9kYWwiLDMsImNsck1v''@;'; put 'put ''ZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtdC0wIiwiZC1pbmxpbmUtYmxvY2siXSxbMSwibW9kYWwtYm9keSIsImgtNzB2aCJdLFsiY2xhc3MiLCJuby1yZXFzIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwibm8tcmVxcyJdLFszLCJpZCIs''@;'; put 'put ''ImNsclN0YWNrVmlld0xldmVsIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMywiaWQiLCJjbHJTdGFja1ZpZXdMZXZlbCJdLFsxLCJtbC0xMCJdLFsxLCJjb250ZW50Il0sWyJjbHJUYWJMaW5rIiwiIl0sWzMsImNscklmQWN0aXZlQ2hhbmdlIiwiY2xySWZBY3RpdmUiXSxbInNoYXBlIiwiZXhj''@;'; put 'put ''bGFtYXRpb24tY2lyY2xlIiwxLCJtYi01IiwiY29sb3ItZ3JlZW4iXSxbInNoYXBlIiwiZXhjbGFtYXRpb24tdHJpYW5nbGUiLDEsIm1iLTUiLCJjb2xvci1yZWQiXSxbImNsYXNzIiwiZXJyLWxpbmtzIiw0LCJuZ0lmIl0sWzEsImxvZy13cmFwcGVyIiwic2FzbG9nIiwzLCJpbm5lckhUTUwi''@;'; put 'put ''XSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImJ0biBidG4tbGluayIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwiZXJyLWxpbmtzIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIiwxLCJjb2xvci1yZWQiXSxbMywiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJjbGlj''@;'; put 'put ''ayJdLFsxLCJjbHItdHJlZW5vZGUtbGluayJdLFsic2hhcGUiLCJleGNsYW1hdGlvbi1jaXJjbGUiLDEsImNvbG9yLWdyZWVuIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tbGluayIsMywiY2xpY2siXSxbMSwibG9nLXdyYXBwZXIiXSxbImNsclRhYkxpbmsiLCIiLDEsIndvcmst''@;'; put 'put ''dGFibGVzLWRyb3Bkb3duIiwzLCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayJdLFsiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIl0sWyJzaGFwZSIsImNhcmV0IGRvd24iXSxbNCwiY2xySWZPcGVuIl0sWyJjbGFzcyIsImRyb3Bkb3duLWl0ZW0iLCJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsInNlbGVj''@;'; put 'put ''dGVkIiwiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xyRHJvcGRvd25JdGVtIiwiIiwxLCJkcm9wZG93bi1pdGVtIiwzLCJjbGljayJdLFsiY2xhc3MiLCJtdC0xMCIsNCwibmdJZiJdLFsxLCJtaW4taC01MHZoIl0sWyJjbGFzcyIsInRhYmxlIG10LTEwIiw0LCJuZ0lmIl0sWzEs''@;'; put 'put ''Im10LTEwIl0sWzEsInRhYmxlIiwibXQtMTAiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiY2xyLW1vZGFsIiwwKSxGdCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gaC5tb2RhbE9wZW5DaGFuZ2Uodil9''@;'; put 'put ''KSxkZSgxLCJoMyIsMSksTGUoMiwiIFJlcXVlc3QgSGlzdG9yeSAiKSxkZSgzLCJwIiwyKSxMZSg0KSxoZSgpKCksZGUoNSwiZGl2IiwzKSxndCg2LGhXZSwyLDAsInAiLDQpKDcsUFdlLDIsMSwiY2xyLXN0YWNrLXZpZXciLDUpLGhlKCkoKSksMiZkJiYoeGUoImNsck1vZGFsT3BlbiIsaC5v''@;'; put 'put ''cGVuZWQpLGZlKDQpLFJyKCJBcHAgTG9jYXRpb246ICIsaC5zYXNqc0NvbmZpZy5hcHBMb2MsIiIpLGZlKDIpLHhlKCJuZ0lmIiwobnVsbD09aC5zYXNqc1JlcXVlc3RzP251bGw6aC5zYXNqc1JlcXVlc3RzLmxlbmd0aCk8MSksZmUoKSx4ZSgibmdJZiIsaC5vcGVuZWQmJihudWxsPT1oLnNh''@;'; put 'put ''c2pzUmVxdWVzdHM/bnVsbDpoLnNhc2pzUmVxdWVzdHMubGVuZ3RoKT4wKSl9LGRlcGVuZGVuY2llczpbc3MseW8sZEcseGRlLHVHLE1kZSxTaCxPZCxkZyxPbCxvdSxLdSxSeSx4Mix2bSx5bSxDNyxibSxtbSxfNyxpZyxoNyxmNyxPeSxmUl0sc3R5bGVzOlsiLnJlcXVlc3RzLW1vZGFsIC5t''@;'; put 'put ''b2RhbC1oZWFkZXIgLmNsb3NlIGNsci1pY29ue2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fSAgLnJlcXVlc3RzLW1vZGFsIC5tb2RhbC1jb250ZW50e3BhZGRpbmc6MjBweCAxMHB4IDVweH0gIC53b3JrLXRhYmxlcy1kcm9wZG93biBidXR0b257Y29sb3I6dmFyKC0tY2xyLW5hdi1saW5rLWNv''@;'; put 'put ''bG9yLCAjOGM4YzhjKSFpbXBvcnRhbnR9ICAuc3RhY2stdmlld3toZWlnaHQ6YXV0byFpbXBvcnRhbnQ7bWFzay1pbWFnZTpub25lIWltcG9ydGFudDstd2Via2l0LW1hc2staW1hZ2U6bm9uZSFpbXBvcnRhbnR9ICAuY29udGVudCBjbHItaWNvbnttYXJnaW4tYm90dG9tOjVweH0gIC5jb250''@;'; put 'put ''ZW50IHByZXt3b3JkLWJyZWFrOmJyZWFrLWFsbDt3aGl0ZS1zcGFjZTpwcmUtd3JhcDttYXgtaGVpZ2h0OmluaXRpYWw7b3ZlcmZsb3c6dmlzaWJsZTtib3JkZXI6MH0gIC5jb250ZW50IC5zdGFjay1ibG9jay1sYWJlbHt3aWR0aDoxMDAlO3BhZGRpbmctbGVmdDouNnJlbSFpbXBvcnRhbnR9''@;'; put 'put ''ICAuY29udGVudCAuc3RhY2stYmxvY2stbGFiZWwgLnN0YWNrLXZpZXcta2V5e2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9ICAuZXJyLWxpbmtzIC5jbHItdHJlZW5vZGUtY2hpbGRyZW57bWF4LWhlaWdodDo1NXB4O292ZXJmbG93OmF1dG99LmRyb3Bkb3duLWl0ZW0uc2VsZWN0ZWRbX25nY29u''@;'; put 'put ''dGVudC0lQ09NUCVde2JhY2tncm91bmQ6I2Q4ZTNlOX0ubm8tcmVxc1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyLXRvcDoxcHggc29saWQgcmdiYSgwLDAsMCwuMTAxOTYwNzg0Myk7cGFkZGluZy10b3A6NXB4O3RleHQtYWxpZ246Y2VudGVyfSJdfSl9fXJldHVybiBjfSkoKTtjbGFzcyBI''@;'; put 'put ''V2V7Y29uc3RydWN0b3IoKXt0aGlzLnNhc1NlcnZpY2U9bnVsbCx0aGlzLm1lc3NhZ2U9IiIsdGhpcy5kZXRhaWxzPW5ldyBlaGV9fWNsYXNzIGVoZXt9ZnVuY3Rpb24gTldlKGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsOCksTGUoMSwiIFNBUyBTZXJ2aWNlOiAiKSxkZSgyLCJzdHJvbmciKSxM''@;'; put 'put ''ZSgzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDMpLF9yKGEuZGF0YS5zYXNTZXJ2aWNlKX19ZnVuY3Rpb24gVldlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw5KSgxLCJwIikoMiwic3Ryb25nIiksTGUoMywiU1lTV0FSTklOR1RFWFQ6IiksaGUoKSxMZSg0KSxoZSgpLGRlKDUs''@;'; put 'put ''InAiKSg2LCJzdHJvbmciKSxMZSg3LCJTWVNFUlJPUlRFWFQ6IiksaGUoKSxMZSg4KSxoZSgpLGRlKDksInAiKSgxMCwic3Ryb25nIiksTGUoMTEsIk1BQzoiKSxoZSgpLExlKDEyKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDQpLFJyKCIgIixhLmRhdGEuZGV0YWlscy5TWVNXQVJO''@;'; put 'put ''SU5HVEVYVCwiIiksZmUoNCksUnIoIiAiLGEuZGF0YS5kZXRhaWxzLlNZU0VSUk9SVEVYVCwiIiksZmUoNCksUnIoIiAiLGEuZGF0YS5kZXRhaWxzLk1BQywiIil9fWZ1bmN0aW9uIEJXZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImJ1dHRvbiIsMTApLEZ0KCJjbGljayIsZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5vcGVuQ29uZmlndXJhdG9yKCkpfSksTGUoMSwiIE9wZW4gY29uZmlndXJhdG9yICIpLGhlKCl9fWZ1bmN0aW9uIGpXZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImJ1dHRvbiIsMTApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gd3QoYSksQ3QoT2UoKS5vcGVuUmVxdWVzdHNNb2RhbCgpKX0pLExlKDEsIiBPcGVuIHJlcXVlc3RzIG1vZGFsICIpLGhlKCl9fWZ1bmN0aW9uIHpXZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImJ1dHRvbiIsMTApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''d3QoYSksQ3QoT2UoKS5kb3dubG9hZExvZygpKX0pLExlKDEsIiBEb3dubG9hZCBsb2cgIiksaGUoKX19ZnVuY3Rpb24gVVdlKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiYnV0dG9uIiwxMCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLmNsb3Nl''@;'; put 'put ''QWJvcnRNb2RhbCgpKX0pLExlKDEsIiBDbG9zZSAiKSxoZSgpfX1mdW5jdGlvbiBaV2UoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJidXR0b24iLDEwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkucmVsb2FkKCkpfSksTGUoMSwiIFJlbG9hZCAi''@;'; put 'put ''KSxoZSgpfX1sZXQgV1dlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5oZWxwZXJTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLnNhc1NlcnZpY2U9aCx0aGlzLnJvdXRlcj1mLHRoaXMub25Db25maXJtTW9kYWxDbGljaz1uZXcgcXIsdGhpcy5kYXRh''@;'; put 'put ''PW5ldyBIV2UsdGhpcy5mb3JjZVJlbG9hZD0hMSx0aGlzLm1vZGFsRW5hYmxlZD0hMCx0aGlzLmRlZmF1bHREYXRhPXttb2RhbFRpdGxlOiJBYm9ydCBNZXNzYWdlIixzYXNTZXJ2aWNlOm51bGwsbWVzc2FnZToiIixkZXRhaWxzOm5ldyBlaGV9fW5nT25Jbml0KCl7bGV0IGE9ey4uLnRoaXMu''@;'; put 'put ''ZGVmYXVsdERhdGEsLi4udGhpcy5kYXRhfTt0aGlzLmRhdGE9YX1zaG93Q29uZmlndXJhdG9yQnV0dG9uKGEpe2NvbnN0IGQ9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCk7cmV0dXJuIGE/LmluY2x1ZGVzKCJzdGFydHVwc2VydmljZSIpJiZkLnNlcnZlclR5cGU9PT1NMC5ZLlNh''@;'; put 'put ''czl9Y2xvc2VBYm9ydE1vZGFsKCl7dGhpcy5vbkNvbmZpcm1Nb2RhbENsaWNrLmVtaXQoKX1vcGVuQ29uZmlndXJhdG9yKCl7dGhpcy5ldmVudFNlcnZpY2Uuc3RhcnR1cERhdGFMb2FkZWQoKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZGVwbG95IiksdGhpcy5jbG9zZUFib3J0TW9k''@;'; put 'put ''YWwoKX1kb3dubG9hZExvZygpe3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRGaWxlKGAke3RoaXMuZGF0YS5zYXNTZXJ2aWNlfS1MT0dgLHRoaXMuZGF0YS5kZXRhaWxzPy5MT0d8fCJFcnJvciBwYXJzaW5nIHRoZSBsb2ciKX1vcGVuUmVxdWVzdHNNb2RhbCgpe3RoaXMuZXZlbnRT''@;'; put 'put ''ZXJ2aWNlLm9wZW5SZXF1ZXN0c01vZGFsKCl9cmVsb2FkKCl7bG9jYXRpb24ucmVsb2FkKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoR3UpLEdlKHBjKSxHZShKcyksR2UoTHMpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPU5yKHt0eXBl''@;'; put 'put ''OmMsc2VsZWN0b3JzOltbImFwcC1pbmZvLW1vZGFsIl1dLGlucHV0czp7ZGF0YToiZGF0YSIsZm9yY2VSZWxvYWQ6ImZvcmNlUmVsb2FkIn0sb3V0cHV0czp7b25Db25maXJtTW9kYWxDbGljazoib25Db25maXJtTW9kYWxDbGljayJ9LGRlY2xzOjEzLHZhcnM6MTIsY29uc3RzOltbImFwcERy''@;'; put 'put ''YWdOZHJvcCIsIiIsMSwiY2xyLWFib3J0LW1vZGFsIiwzLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWyJjbGFzcyIsInNhc1NlcnZpY2UiLDQsIm5nSWYiXSxbMSwibW9kYWwt''@;'; put 'put ''Ym9keSJdLFsxLCJhYm9ydE1zZyIsMywiaW5uZXJIVE1MIl0sWyJjbGFzcyIsInN5c3RleHQiLDQsIm5nSWYiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gYnRuLXByaW1hcnkiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsInNhc1NlcnZpY2UiXSxb''@;'; put 'put ''MSwic3lzdGV4dCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiY2xyLW1vZGFsIiwwKSxwaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gdmkoaC5tb2Rh''@;'; put 'put ''bEVuYWJsZWQsdil8fChoLm1vZGFsRW5hYmxlZD12KSx2fSksZGUoMSwiaDMiLDEpLExlKDIpLGd0KDMsTldlLDQsMSwicCIsMiksaGUoKSxkZSg0LCJkaXYiLDMpLEd0KDUsImRpdiIsNCksZ3QoNixWV2UsMTMsMywiZGl2Iiw1KSxoZSgpLGRlKDcsImRpdiIsNiksZ3QoOCxCV2UsMiwwLCJi''@;'; put 'put ''dXR0b24iLDcpKDksaldlLDIsMCwiYnV0dG9uIiw3KSgxMCx6V2UsMiwwLCJidXR0b24iLDcpKDExLFVXZSwyLDAsImJ1dHRvbiIsNykoMTIsWldlLDIsMCwiYnV0dG9uIiw3KSxoZSgpKCkpLDImZCYmKGZpKCJjbHJNb2RhbE9wZW4iLGgubW9kYWxFbmFibGVkKSx4ZSgiY2xyTW9kYWxTaXpl''@;'; put 'put ''IiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsIWguZm9yY2VSZWxvYWQpLGZlKDIpLFJyKCIgIixoLmRhdGEubW9kYWxUaXRsZSwiICIpLGZlKCkseGUoIm5nSWYiLGguZGF0YS5zYXNTZXJ2aWNlJiZoLmRhdGEuc2FzU2VydmljZS5sZW5ndGg+MCksZmUoMikseGUoImlubmVySFRNTCIsaC5k''@;'; put 'put ''YXRhLm1lc3NhZ2UsRjQpLGZlKCkseGUoIm5nSWYiLG51bGwhPT1oLmRhdGEuZGV0YWlscyksZmUoMikseGUoIm5nSWYiLGguc2hvd0NvbmZpZ3VyYXRvckJ1dHRvbihoLmRhdGEuc2FzU2VydmljZSkpLGZlKCkseGUoIm5nSWYiLG51bGwhPT1oLmRhdGEuZGV0YWlscyksZmUoKSx4ZSgibmdJ''@;'; put 'put ''ZiIsKG51bGw9PWguZGF0YS5kZXRhaWxzP251bGw6aC5kYXRhLmRldGFpbHMuTE9HKSYmKG51bGw9PWguZGF0YS5kZXRhaWxzfHxudWxsPT1oLmRhdGEuZGV0YWlscy5MT0c/bnVsbDpoLmRhdGEuZGV0YWlscy5MT0cudHJpbSgpLmxlbmd0aCk+MCksZmUoKSx4ZSgibmdJZiIsIWguZm9yY2VS''@;'; put 'put ''ZWxvYWQpLGZlKCkseGUoIm5nSWYiLGguZm9yY2VSZWxvYWQpKX0sZGVwZW5kZW5jaWVzOlt5byxvdSxLdSxReF0sc3R5bGVzOlsiLmNsci1hYm9ydC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5tb2RhbC10aXRsZS13cmFwcGVye3dpZHRoOjEwMCV9LmNsci1hYm9ydC1tb2RhbFtf''@;'; put 'put ''bmdjb250ZW50LSVDT01QJV0gICAgIC5tb2RhbHt6LWluZGV4OjIwNTB9Lm1vZGFsLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0uc2FzU2VydmljZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MTBweDttYXJnaW46''@;'; put 'put ''MH0ubW9kYWwtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXItdG9wOjFweCBzb2xpZCAjZGNkY2RjfS5zeXN0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzphdXRvO21hcmdpbi10b3A6MjBweDtwYWRkaW5nOjEwcHggMDtib3JkZXItdG9w''@;'; put 'put ''OjFweCBzb2xpZCAjZGNkY2RjfS5zeXN0ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MDt3b3JkLXdyYXA6YnJlYWstd29yZH0iXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgWVdlPSgpPT5bIi8iXSx0aGU9KCk9PlsiL3ZpZXciXSxuaGU9''@;'; put 'put ''KCk9PlsiL2hvbWUiXSxnRz0oKT0+WyIvcmV2aWV3L3N1Ym1pdHRlZCJdLEdXZT0oKT0+WyIvcmV2aWV3L2FwcHJvdmUiXSwkV2U9KCk9PlsiL3Jldmlldy9oaXN0b3J5Il07ZnVuY3Rpb24gS1dlKGMsbCl7MSZjJiYobGkoMCksZGUoMSwiZGl2IiwxNykoMiwiZGl2IiwxOCkoMywiZGl2Iiwx''@;'; put 'put ''OSksR3QoNCwiY2RzLWljb24iLDIwKSxoZSgpLGRlKDUsImRpdiIsMjEpLExlKDYsIiBEYXRhIENvbnRyb2xsZXIgKEZSRUUgVGllcikgLSB0byB1cGdyYWRlIGNvbnRhY3QgIiksR3QoNywiY29udGFjdC1saW5rIiwyMiksaGUoKSgpKCksZGUoOCwiYSIsMjMpLExlKDksIlVwZGF0ZSBMaWNl''@;'; put 'put ''bmNlIEtleSIpLGhlKCksY2koKSl9ZnVuY3Rpb24gcVdlKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7bGkoMCksZGUoMSwiZGl2IiwxNykoMiwiZGl2IiwxOCkoMywiZGl2IiwxOSksR3QoNCwiY2RzLWljb24iLDIwKSxoZSgpLGRlKDUsImRpdiIsMjEpLExlKDYsIiBEYXRhIENvbnRyb2xs''@;'; put 'put ''ZXIgKEZSRUUgVGllcikgLSBQcm9ibGVtIHdpdGggbGljZW5jZSAiKSxoZSgpKCkoKSxkZSg3LCJhIiwyNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMyk7cmV0dXJuIEN0KGgubGljZW5jZVByb2JsZW1EZXRhaWxzKGgubGljZW5jZVByb2JsZW0udmFsdWUpKX0p''@;'; put 'put ''LExlKDgsIk1vcmUgZGV0YWlscyIpLGhlKCksY2koKX19ZnVuY3Rpb24gWFdlKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxNiksZ3QoMSxLV2UsMTAsMCwibmctY29udGFpbmVyIiwxKSgyLHFXZSw5LDAsIm5nLWNvbnRhaW5lciIsMSksaGUoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKCks''@;'; put 'put ''eGUoIm5nSWYiLG51bGw9PT1hLmxpY2VuY2VQcm9ibGVtLnZhbHVlKSxmZSgpLHhlKCJuZ0lmIixudWxsIT09YS5saWNlbmNlUHJvYmxlbS52YWx1ZSl9fWZ1bmN0aW9uIEpXZShjLGwpezEmYyYmKGRlKDAsImEiLDIzKSxMZSgxLCJVcGRhdGUgTGljZW5jZSBLZXkiKSxoZSgpKX1mdW5jdGlv''@;'; put 'put ''biBRV2UoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDI1KSgxLCJkaXYiLDE3KSgyLCJkaXYiLDE4KSgzLCJkaXYiLDE5KSxHdCg0LCJjZHMtaWNvbiIsMjApLGhlKCksZGUoNSwiZGl2IiwyMSksTGUoNiksR3QoNywiY29udGFjdC1saW5rIiwyMiksTGUoOCksaGUoKSgpKCksZ3QoOSxKV2Us''@;'; put 'put ''MiwwLCJhIiwyNiksaGUoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDYpLHp1KCIgVGhpcyBsaWNlbnNlIGtleSB3aWxsIGV4cGlyZSBpbiAiLGEubGljZW5zZUV4cGlyaW5nRGF5cywiICIsMT09PWEubGljZW5zZUV4cGlyaW5nRGF5cz8iZGF5IjoiZGF5cyIsIi4gUGxlYXNlIGNvbnRhY3Qg''@;'; put 'put ''IiksZmUoMiksUnIoIiBvciB5b3VyIHJlc2VsbGVyIHRvIGFycmFuZ2UgYWRkaXRpb25hbCBsaWNlbmNlIGZvciBzaXRlIGlkICIsYS5zeXNzaXRlLmdldFZhbHVlKCksIi4gIiksZmUoKSx4ZSgibmdJZiIsIWEuZnJlZVRpZXJCYW5uZXIpfX1mdW5jdGlvbiBlWWUoYyxsKXsxJmMmJihkZSgw''@;'; put 'put ''LCJhIiwyMyksTGUoMSwiVXBkYXRlIExpY2VuY2UgS2V5IiksaGUoKSl9ZnVuY3Rpb24gdFllKGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwyNSkoMSwiZGl2IiwxNykoMiwiZGl2IiwxOCkoMywiZGl2IiwxOSksR3QoNCwiY2RzLWljb24iLDIwKSxoZSgpLGRlKDUsImRpdiIsMjEpLExlKDYs''@;'; put 'put ''IiBUaGUgcmVnaXN0ZXJlZCBudW1iZXIgb2YgdXNlcnMgZXhjZWVkcyB0aGUgbGltaXQgc3BlY2lmaWVkIGZvciB5b3VyIGxpY2Vuc2UuIFBsZWFzZSBjb250YWN0ICIpLEd0KDcsImNvbnRhY3QtbGluayIsMjIpLExlKDgpLGhlKCkoKSgpLGd0KDksZVllLDIsMCwiYSIsMjYpLGhlKCkpLDIm''@;'; put 'put ''Yyl7Y29uc3QgYT1PZSgyKTtmZSg4KSxScigiIG9yIHlvdXIgcmVzZWxsZXIgdG8gYXJyYW5nZSBhZGRpdGlvbmFsIGxpY2VuY2UgZm9yIHNpdGUgaWQgIixhLnN5c3NpdGUuZ2V0VmFsdWUoKSwiLiAiKSxmZSgpLHhlKCJuZ0lmIiwhYS5saWNlbnNlRXhwaXJpbmdEYXlzJiYhYS5mcmVlVGll''@;'; put 'put ''ckJhbm5lcil9fWZ1bmN0aW9uIG5ZZShjLGwpe2lmKDEmYyYmKGxpKDApLGd0KDEsWFdlLDMsMiwiZGl2IiwxNCkoMixRV2UsMTAsNCwiZGl2IiwxNSkoMyx0WWUsMTAsMiwiZGl2IiwxNSksY2koKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSx4ZSgibmdJZiIsYS5mcmVlVGllckJhbm5lciYm''@;'; put 'put ''KCFhLmxpY2Vuc2VFeHBpcmluZ0RheXN8fGEubGljZW5zZUV4cGlyaW5nRGF5czwwKSksZmUoKSx4ZSgibmdJZiIsYS5saWNlbnNlRXhwaXJpbmdEYXlzJiYhYS5mcmVlVGllckJhbm5lciksZmUoKSx4ZSgibmdJZiIsYS5hcHBPdmVyQ2FwYWNpdHkpfX1mdW5jdGlvbiByWWUoYyxsKXtpZigx''@;'; put 'put ''JmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDI3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkudG9nZ2xlU2lkZWJhcigpKX0pLEd0KDEsImNsci1pY29uIiwyOCksaGUoKX19ZnVuY3Rpb24gaVllKGMsbCl7MSZjJiYoZGUoMCwiYSIsMjkpLEd0KDEsImlt''@;'; put 'put ''ZyIsMzApKDIsImltZyIsMzEpLGhlKCkpLDImYyYmeGUoInJvdXRlckxpbmsiLFdzKDEsWVdlKSl9ZnVuY3Rpb24gb1llKGMsbCl7MSZjJiYoZGUoMCwiYSIpLEd0KDEsInNwYW4iLDMyKSxoZSgpKX1mdW5jdGlvbiBhWWUoYyxsKXsxJmMmJihkZSgwLCJjbHItZHJvcGRvd24tbWVudSIsNDAp''@;'; put 'put ''KDEsImEiLDQxKSxMZSgyLCJWSUVXIiksaGUoKSxkZSgzLCJhIiw0MSksTGUoNCwiTE9BRCIpLGhlKCksZGUoNSwiYSIsNDEpLExlKDYsIlJFVklFVyIpLGhlKCkoKSksMiZjJiYoZmUoKSx4ZSgicm91dGVyTGluayIsV3MoMyx0aGUpKSxmZSgyKSx4ZSgicm91dGVyTGluayIsV3MoNCxuaGUp''@;'; put 'put ''KSxmZSgyKSx4ZSgicm91dGVyTGluayIsV3MoNSxnRykpKX1mdW5jdGlvbiBzWWUoYyxsKXtpZigxJmMmJihsaSgwKSxkZSgxLCJkaXYiLDMzKSgyLCJjbHItZHJvcGRvd24iKSgzLCJidXR0b24iLDM0KSxMZSg0LCIgTWVudSAiKSxoZSgpLGd0KDUsYVllLDcsNiwiY2xyLWRyb3Bkb3duLW1l''@;'; put 'put ''bnUiLDM1KSxoZSgpKCksZGUoNiwiZGl2IiwzNikoNywiYSIsMzcpLExlKDgsIlZJRVciKSxoZSgpLGRlKDksImEiLDM4KSxMZSgxMCwiTE9BRCIpLGhlKCksZGUoMTEsImEiLDM5KSxMZSgxMiwiUkVWSUVXIiksaGUoKSgpLGNpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDcpLHhlKCJyb3V0''@;'; put 'put ''ZXJMaW5rIixXcyg3LHRoZSkpLGZlKDIpLHhyKCJhY3RpdmUiLGEucm91dGVyLnVybC5pbmNsdWRlcygiZWRpdG9yIil8fGEucm91dGVyLnVybC5pbmNsdWRlcygiZWRpdC1yZWNvcmQiKXx8YS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJob21lIikpLHhlKCJyb3V0ZXJMaW5rIixXcyg4LG5oZSkp''@;'; put 'put ''LGZlKDIpLHhyKCJhY3RpdmUiLGEucm91dGVyLnVybC5pbmNsdWRlcygic3VibWl0dGVkIil8fGEucm91dGVyLnVybC5pbmNsdWRlcygiYXBwcm92ZSIpfHxhLnJvdXRlci51cmwuaW5jbHVkZXMoImhpc3RvcnkiKSkseGUoInJvdXRlckxpbmsiLFdzKDksZ0cpKX19ZnVuY3Rpb24gbFllKGMs''@;'; put 'put ''bCl7aWYoMSZjJiYoZGUoMCwibmF2Iiw0MikoMSwidWwiLDQzKSgyLCJsaSIsNDQpKDMsImEiLDM3KSxMZSg0LCJTVUJNSVQiKSxoZSgpKCksZGUoNSwibGkiLDQ0KSg2LCJhIiwzNyksTGUoNywiQVBQUk9WRSIpLGhlKCkoKSxkZSg4LCJsaSIsNDQpKDksImEiLDM3KSxMZSgxMCwiSElTVE9S''@;'; put 'put ''WSIpLGhlKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDMpLHhlKCJyb3V0ZXJMaW5rIixXcyg1LGdHKSksZmUoMykseHIoImFjdGl2ZSIsYS5yb3V0ZXIudXJsLmluY2x1ZGVzKCJhcHByb3ZlIikpLHhlKCJyb3V0ZXJMaW5rIixXcyg2LEdXZSkpLGZlKDMpLHhlKCJyb3V0ZXJMaW5r''@;'; put 'put ''IixXcyg3LCRXZSkpfX1mdW5jdGlvbiBjWWUoYyxsKXsxJmMmJkd0KDAsImFwcC1hbGVydHMiKX1mdW5jdGlvbiB1WWUoYyxsKXsxJmMmJkd0KDAsInJvdXRlci1vdXRsZXQiKX1mdW5jdGlvbiBkWWUoYyxsKXsxJmMmJkd0KDAsImFwcC1hbGVydHMiKX1mdW5jdGlvbiBoWWUoYyxsKXtpZigx''@;'; put 'put ''JmMpe2NvbnN0IGE9T24oKTtkZSgwLCJhcHAtaW5mby1tb2RhbCIsNDUpLEZ0KCJvbkNvbmZpcm1Nb2RhbENsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLmNsb3NlQWJvcnRNb2RhbChoLmlkKSl9KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1s''@;'; put 'put ''LiRpbXBsaWNpdCxkPU9lKCk7eGUoImRhdGEiLGEpKCJmb3JjZVJlbG9hZCIsIWQuc3RhcnR1cERhdGFMb2FkZWQmJjE9PT1kLnNhc2pzQWJvcnRzLmxlbmd0aCl9fWZ1bmN0aW9uIGZZZShjLGwpezEmYyYmKGRlKDAsImRpdiIsNDkpLEd0KDEsImRpdiIsNTApKDIsImRpdiIsNTEpKDMsImRp''@;'; put 'put ''diIsNTIpLGhlKCkpfWZ1bmN0aW9uIHBZZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNDYpLEd0KDEsImltZyIsNDcpLGd0KDIsZlllLDQsMCwiZGl2Iiw0OCksaGUoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoMikseGUoIm5nSWYiLG51bGw9PT1hLmFwcEFjdGl2ZSl9fUVzLmFkZEljb25z''@;'; put 'put ''KFsibW9vbiIse291dGxpbmU6JzxwYXRoIGQ9Ik0xOC4xMSAzMi4wMDAzQzEwLjMzIDMyLjAwMDMgNCAyNS43MjAzIDQgMTcuOTkwM0M0IDEwLjI2MDMgMTAuMDMgNC4yMDAzIDE3LjczIDQuMDAwM0MxOC4xNSAzLjk5MDMgMTguNTIgNC4yMzAzIDE4LjY4IDQuNjEwM0MxOC44NCA0Ljk5MDMg''@;'; put 'put ''MTguNzUgNS40MzAzIDE4LjQ2IDUuNzIwM0MxNi42OSA3LjQ1MDMgMTUuNzEgOS43NjAzIDE1LjcxIDEyLjIxMDNDMTUuNzEgMTcuMjQwMyAxOS44MyAyMS4zMzAzIDI0LjkxIDIxLjMzMDNDMjYuOSAyMS4zMzAzIDI4LjggMjAuNzAwMyAzMC40MSAxOS41MTAzQzMwLjc0IDE5LjI3MDMgMzEu''@;'; put 'put ''MTkgMTkuMjUwMyAzMS41MyAxOS40NjAzQzMxLjg4IDE5LjY4MDMgMzIuMDYgMjAuMDgwMyAzMS45OSAyMC40OTAzQzMwLjc4IDI3LjE2MDMgMjQuOTQgMzIuMDAwMyAxOC4xMSAzMi4wMDAzWk0xNS40MyA2LjI5MDNDOS45OSA3LjQ4MDMgNiAxMi4yNDAzIDYgMTcuOTkwM0M2IDI0LjYxMDMg''@;'; put 'put ''MTEuNDMgMzAuMDAwMyAxOC4xMSAzMC4wMDAzQzIzLjE2IDMwLjAwMDMgMjcuNTggMjYuOTIwMyAyOS4zNyAyMi40MDAzQzI3Ljk3IDIzLjAxMDMgMjYuNDYgMjMuMzIwMyAyNC45MSAyMy4zMjAzQzE4Ljc0IDIzLjMyMDMgMTMuNzEgMTguMzMwMyAxMy43MSAxMi4yMDAzQzEzLjcxIDEwLjA3''@;'; put 'put ''MDMgMTQuMzEgOC4wMzAzIDE1LjQzIDYuMjgwM1Y2LjI5MDNaIi8+Jyxzb2xpZDonPHBhdGggZD0iTTE4LjExIDMyLjAwMDNDMTAuMzMgMzIuMDAwMyA0IDI1LjcyMDMgNCAxNy45OTAzQzQgMTAuMjYwMyAxMC4wMyA0LjIwMDMgMTcuNzMgNC4wMDAzQzE4LjE1IDMuOTkwMyAxOC41MiA0LjIz''@;'; put 'put ''MDMgMTguNjggNC42MTAzQzE4Ljg0IDQuOTkwMyAxOC43NSA1LjQzMDMgMTguNDYgNS43MjAzQzE2LjY5IDcuNDUwMyAxNS43MSA5Ljc2MDMgMTUuNzEgMTIuMjEwM0MxNS43MSAxNy4yNDAzIDE5LjgzIDIxLjMzMDMgMjQuOTEgMjEuMzMwM0MyNi45IDIxLjMzMDMgMjguOCAyMC43MDAzIDMw''@;'; put 'put ''LjQxIDE5LjUxMDNDMzAuNzQgMTkuMjcwMyAzMS4xOSAxOS4yNTAzIDMxLjUzIDE5LjQ2MDNDMzEuODggMTkuNjgwMyAzMi4wNiAyMC4wODAzIDMxLjk5IDIwLjQ5MDNDMzAuNzggMjcuMTYwMyAyNC45NCAzMi4wMDAzIDE4LjExIDMyLjAwMDNaIi8+J31dLFsic3VuIix7b3V0bGluZTonPHBh''@;'; put 'put ''dGggZD0iTTguODEgMTAuMjJDOS4wMSAxMC40MiA5LjI2IDEwLjUxIDkuNTIgMTAuNTFDOS43OCAxMC41MSAxMC4wMyAxMC40MSAxMC4yMyAxMC4yMkMxMC42MiA5LjgzIDEwLjYyIDkuMiAxMC4yMyA4LjgxTDguMTEgNi42OUM3LjcyIDYuMyA3LjA5IDYuMyA2LjcgNi42OUM2LjMxIDcuMDgg''@;'; put 'put ''Ni4zMSA3LjcxIDYuNyA4LjFMOC44MiAxMC4yMkg4LjgxWk03IDE4QzcgMTcuNDUgNi41NSAxNyA2IDE3SDNDMi40NSAxNyAyIDE3LjQ1IDIgMThDMiAxOC41NSAyLjQ1IDE5IDMgMTlINkM2LjU1IDE5IDcgMTguNTUgNyAxOFpNMTggN0MxOC41NSA3IDE5IDYuNTUgMTkgNlYzQzE5IDIuNDUg''@;'; put 'put ''MTguNTUgMiAxOCAyQzE3LjQ1IDIgMTcgMi40NSAxNyAzVjZDMTcgNi41NSAxNy40NSA3IDE4IDdaTTI2LjQ5IDEwLjUxQzI2Ljc1IDEwLjUxIDI3IDEwLjQxIDI3LjIgMTAuMjJMMjkuMzIgOC4xQzI5LjcxIDcuNzEgMjkuNzEgNy4wOCAyOS4zMiA2LjY5QzI4LjkzIDYuMyAyOC4zIDYuMyAy''@;'; put 'put ''Ny45MSA2LjY5TDI1Ljc5IDguODFDMjUuNCA5LjIgMjUuNCA5LjgzIDI1Ljc5IDEwLjIyQzI1Ljk5IDEwLjQyIDI2LjI0IDEwLjUxIDI2LjUgMTAuNTFIMjYuNDlaTTguODEgMjUuNzhMNi42OSAyNy45QzYuMyAyOC4yOSA2LjMgMjguOTIgNi42OSAyOS4zMUM2Ljg5IDI5LjUxIDcuMTQgMjku''@;'; put 'put ''NiA3LjQgMjkuNkM3LjY2IDI5LjYgNy45MSAyOS41IDguMTEgMjkuMzFMMTAuMjMgMjcuMTlDMTAuNjIgMjYuOCAxMC42MiAyNi4xNyAxMC4yMyAyNS43OEM5Ljg0IDI1LjM5IDkuMjEgMjUuMzkgOC44MiAyNS43OEg4LjgxWk0zMyAxN0gzMEMyOS40NSAxNyAyOSAxNy40NSAyOSAxOEMyOSAx''@;'; put 'put ''OC41NSAyOS40NSAxOSAzMCAxOUgzM0MzMy41NSAxOSAzNCAxOC41NSAzNCAxOEMzNCAxNy40NSAzMy41NSAxNyAzMyAxN1pNMTggOUMxMy4wNCA5IDkgMTMuMDQgOSAxOEM5IDIyLjk2IDEzLjA0IDI3IDE4IDI3QzIyLjk2IDI3IDI3IDIyLjk2IDI3IDE4QzI3IDEzLjA0IDIyLjk2IDkgMTgg''@;'; put 'put ''OVpNMTggMjVDMTQuMTQgMjUgMTEgMjEuODYgMTEgMThDMTEgMTQuMTQgMTQuMTQgMTEgMTggMTFDMjEuODYgMTEgMjUgMTQuMTQgMjUgMThDMjUgMjEuODYgMjEuODYgMjUgMTggMjVaTTI3LjE5IDI1Ljc4QzI2LjggMjUuMzkgMjYuMTcgMjUuMzkgMjUuNzggMjUuNzhDMjUuMzkgMjYuMTcg''@;'; put 'put ''MjUuMzkgMjYuOCAyNS43OCAyNy4xOUwyNy45IDI5LjMxQzI4LjEgMjkuNTEgMjguMzUgMjkuNiAyOC42MSAyOS42QzI4Ljg3IDI5LjYgMjkuMTIgMjkuNSAyOS4zMiAyOS4zMUMyOS43MSAyOC45MiAyOS43MSAyOC4yOSAyOS4zMiAyNy45TDI3LjIgMjUuNzhIMjcuMTlaTTE4IDI5QzE3LjQ1''@;'; put 'put ''IDI5IDE3IDI5LjQ1IDE3IDMwVjMzQzE3IDMzLjU1IDE3LjQ1IDM0IDE4IDM0QzE4LjU1IDM0IDE5IDMzLjU1IDE5IDMzVjMwQzE5IDI5LjQ1IDE4LjU1IDI5IDE4IDI5WiIvPicsc29saWQ6JzxwYXRoIGQ9Ik04LjgxIDI1Ljc4TDYuNjkgMjcuOUM2LjMgMjguMjkgNi4zIDI4LjkyIDYuNjkg''@;'; put 'put ''MjkuMzFDNi44OSAyOS41MSA3LjE0IDI5LjYgNy40IDI5LjZDNy42NiAyOS42IDcuOTEgMjkuNSA4LjExIDI5LjMxTDEwLjIzIDI3LjE5QzEwLjYyIDI2LjggMTAuNjIgMjYuMTcgMTAuMjMgMjUuNzhDOS44NCAyNS4zOSA5LjIxIDI1LjM5IDguODIgMjUuNzhIOC44MVpNNyAxOEM3IDE3LjQ1''@;'; put 'put ''IDYuNTUgMTcgNiAxN0gzQzIuNDUgMTcgMiAxNy40NSAyIDE4QzIgMTguNTUgMi40NSAxOSAzIDE5SDZDNi41NSAxOSA3IDE4LjU1IDcgMThaTTguODEgMTAuMjJDOS4wMSAxMC40MiA5LjI2IDEwLjUxIDkuNTIgMTAuNTFDOS43OCAxMC41MSAxMC4wMyAxMC40MSAxMC4yMyAxMC4yMkMxMC42''@;'; put 'put ''MiA5LjgzIDEwLjYyIDkuMiAxMC4yMyA4LjgxTDguMTEgNi42OUM3LjcyIDYuMyA3LjA5IDYuMyA2LjcgNi42OUM2LjMxIDcuMDggNi4zMSA3LjcxIDYuNyA4LjFMOC44MiAxMC4yMkg4LjgxWk0yNi40OSAxMC41MUMyNi43NSAxMC41MSAyNyAxMC40MSAyNy4yIDEwLjIyTDI5LjMyIDguMUMy''@;'; put 'put ''OS43MSA3LjcxIDI5LjcxIDcuMDggMjkuMzIgNi42OUMyOC45MyA2LjMgMjguMyA2LjMgMjcuOTEgNi42OUwyNS43OSA4LjgxQzI1LjQgOS4yIDI1LjQgOS44MyAyNS43OSAxMC4yMkMyNS45OSAxMC40MiAyNi4yNCAxMC41MSAyNi41IDEwLjUxSDI2LjQ5Wk0xOCA3QzE4LjU1IDcgMTkgNi41''@;'; put 'put ''NSAxOSA2VjNDMTkgMi40NSAxOC41NSAyIDE4IDJDMTcuNDUgMiAxNyAyLjQ1IDE3IDNWNkMxNyA2LjU1IDE3LjQ1IDcgMTggN1pNMTggMjlDMTcuNDUgMjkgMTcgMjkuNDUgMTcgMzBWMzNDMTcgMzMuNTUgMTcuNDUgMzQgMTggMzRDMTguNTUgMzQgMTkgMzMuNTUgMTkgMzNWMzBDMTkgMjku''@;'; put 'put ''NDUgMTguNTUgMjkgMTggMjlaTTMzIDE3SDMwQzI5LjQ1IDE3IDI5IDE3LjQ1IDI5IDE4QzI5IDE4LjU1IDI5LjQ1IDE5IDMwIDE5SDMzQzMzLjU1IDE5IDM0IDE4LjU1IDM0IDE4QzM0IDE3LjQ1IDMzLjU1IDE3IDMzIDE3Wk0yNy4xOSAyNS43OEMyNi44IDI1LjM5IDI2LjE3IDI1LjM5IDI1''@;'; put 'put ''Ljc4IDI1Ljc4QzI1LjM5IDI2LjE3IDI1LjM5IDI2LjggMjUuNzggMjcuMTlMMjcuOSAyOS4zMUMyOC4xIDI5LjUxIDI4LjM1IDI5LjYgMjguNjEgMjkuNkMyOC44NyAyOS42IDI5LjEyIDI5LjUgMjkuMzIgMjkuMzFDMjkuNzEgMjguOTIgMjkuNzEgMjguMjkgMjkuMzIgMjcuOUwyNy4yIDI1''@;'; put 'put ''Ljc4SDI3LjE5Wk0xOCA5QzEzLjA0IDkgOSAxMy4wNCA5IDE4QzkgMjIuOTYgMTMuMDQgMjcgMTggMjdDMjIuOTYgMjcgMjcgMjIuOTYgMjcgMThDMjcgMTMuMDQgMjIuOTYgOSAxOCA5WiIvPid9XSxbImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIix7b3V0bGluZTonPHBhdGggZD0iTTE3Ljk5NDMg''@;'; put 'put ''MjAuOEMxOC41NDQgMjAuOCAxOC45OTM4IDIwLjM1IDE4Ljk5MzggMTkuOFYxNEMxOC45OTM4IDEzLjQ1IDE4LjU0NCAxMyAxNy45OTQzIDEzQzE3LjQ0NDUgMTMgMTYuOTk0NyAxMy40NSAxNi45OTQ3IDE0VjE5LjhDMTYuOTk0NyAyMC4zNSAxNy40NDQ1IDIwLjggMTcuOTk0MyAyMC44Wk0x''@;'; put 'put ''OC44NDM5IDIyLjk1QzE4LjcyMzkgMjIuODQgMTguNTk0IDIyLjc1IDE4LjQ1NDEgMjIuNjlDMTguMTY0MiAyMi41NyAxNy44MjQzIDIyLjU3IDE3LjUzNDUgMjIuNjlDMTcuMzk0NSAyMi43NSAxNy4yNjQ2IDIyLjg0IDE3LjE0NDYgMjIuOTVDMTYuOTI0NyAyMy4xOCAxNi43OTQ4IDIzLjQ4''@;'; put 'put ''IDE2Ljc5NDggMjMuOEMxNi43OTQ4IDI0LjEyIDE2LjkyNDcgMjQuNDIgMTcuMTQ0NiAyNC42NUMxNy4yNjQ2IDI0Ljc2IDE3LjM5NDUgMjQuODUgMTcuNTM0NSAyNC45MUMxNy42ODQ0IDI0Ljk3IDE3LjgzNDMgMjUgMTcuOTk0MyAyNUMxOC4xNTQyIDI1IDE4LjMwNDEgMjQuOTcgMTguNDU0''@;'; put 'put ''MSAyNC45MUMxOC41OTQgMjQuODUgMTguNzIzOSAyNC43NiAxOC44NDM5IDI0LjY1QzE5LjA2MzggMjQuNDIgMTkuMTkzNyAyNC4xMiAxOS4xOTM3IDIzLjhDMTkuMTkzNyAyMy42NCAxOS4xNjM3IDIzLjQ5IDE5LjEwMzggMjMuMzRDMTkuMDQzOCAyMy4yIDE4Ljk1MzggMjMuMDYgMTguODQz''@;'; put 'put ''OSAyMi45NVpNMzAuNTk4NiAyNS40M0wyMC42NjMxIDcuNTdDMjAuMTEzMyA2LjU5IDE5LjEyMzggNiAxNy45OTQzIDZDMTYuODY0OCA2IDE1Ljg3NTIgNi41OSAxNS4zMjU0IDcuNTdMNS4zODk4OCAyNS40M0M0Ljg1MDEyIDI2LjM5IDQuODcwMTEgMjcuNTMgNS40MTk4NyAyOC40OEM1Ljk2''@;'; put 'put ''OTYyIDI5LjQzIDYuOTU5MTggMzAgOC4wNTg2OSAzMEgyNy45Mjk4QzI5LjAyOTMgMzAgMzAuMDA4OSAyOS40MyAzMC41Njg2IDI4LjQ4QzMxLjEyODQgMjcuNTMgMzEuMTM4NCAyNi4zOSAzMC41OTg2IDI1LjQzWk0yOC44NDk0IDI3LjQ3QzI4Ljc1OTUgMjcuNjMgMjguNDc5NiAyOCAyNy45''@;'; put 'put ''Mzk4IDI4SDguMDU4NjlDNy41MDg5NCAyOCA3LjIzOTA2IDI3LjYzIDcuMTQ5MSAyNy40N0M3LjA1OTE0IDI3LjMxIDYuODY5MjIgMjYuODkgNy4xNDkxIDI2LjQxTDE3LjA2NDcgOC41NUMxNy4zMzQ2IDguMDYgMTcuODA0MyA4IDE3Ljk4NDMgOEMxOC4xNjQyIDggMTguNjM0IDguMDUgMTgu''@;'; put 'put ''OTAzOSA4LjU1TDI4LjgzOTQgMjYuNDFDMjkuMTA5MyAyNi44OSAyOC45MTk0IDI3LjMxIDI4LjgyOTQgMjcuNDdIMjguODQ5NFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMzAuNTk4NiAyNS40M0wyMC42NjMxIDcuNTdDMjAuMTEzMyA2LjU5IDE5LjEyMzggNiAxNy45OTQzIDZDMTYuODY0OCA2''@;'; put 'put ''IDE1Ljg3NTIgNi41OSAxNS4zMjU0IDcuNTdMNS4zODk4OCAyNS40M0M0Ljg1MDEyIDI2LjM5IDQuODcwMTEgMjcuNTMgNS40MTk4NyAyOC40OEM1Ljk2OTYyIDI5LjQzIDYuOTU5MTggMzAgOC4wNTg2OSAzMEgyNy45Mjk4QzI5LjAyOTMgMzAgMzAuMDA4OSAyOS40MyAzMC41Njg2IDI4LjQ4''@;'; put 'put ''QzMxLjEyODQgMjcuNTMgMzEuMTM4NCAyNi4zOSAzMC41OTg2IDI1LjQzWk0xNi43OTQ4IDEzLjVDMTYuNzk0OCAxMi44NCAxNy4zMzQ2IDEyLjMgMTcuOTk0MyAxMi4zQzE4LjY1NCAxMi4zIDE5LjE5MzcgMTIuODQgMTkuMTkzNyAxMy41VjE5LjNDMTkuMTkzNyAxOS45NiAxOC42NTQgMjAu''@;'; put 'put ''NSAxNy45OTQzIDIwLjVDMTcuMzM0NiAyMC41IDE2Ljc5NDggMTkuOTYgMTYuNzk0OCAxOS4zVjEzLjVaTTE4Ljk3MzggMjVDMTguODMzOSAyNS4xMyAxOC42ODQgMjUuMjMgMTguNTI0IDI1LjNDMTguMzQ0MSAyNS4zNyAxOC4xNzQyIDI1LjQxIDE3Ljk5NDMgMjUuNDFDMTcuODE0MyAyNS40''@;'; put 'put ''MSAxNy42MzQ0IDI1LjM4IDE3LjQ1NDUgMjUuM0MxNy4zMDQ2IDI1LjIzIDE3LjE1NDYgMjUuMTMgMTYuOTk0NyAyNC45OUMxNi43MzQ4IDI0LjcyIDE2LjU4NDkgMjQuMzcgMTYuNTg0OSAyNEMxNi41ODQ5IDIzLjYzIDE2LjcyNDggMjMuMjkgMTYuOTk0NyAyM0MxNy4xMzQ2IDIyLjg3IDE3''@;'; put 'put ''LjI4NDYgMjIuNzcgMTcuNDQ0NSAyMi43QzE3LjYxNDQgMjIuNjMgMTcuNzk0MyAyMi41OSAxNy45ODQzIDIyLjU5QzE4LjE3NDIgMjIuNTkgMTguMzU0MSAyMi42MyAxOC41MjQgMjIuN0MxOC42NzQgMjIuNzcgMTguODIzOSAyMi44NyAxOC45NzM4IDIzQzE5LjA5MzggMjMuMTIgMTkuMjAz''@;'; put 'put ''NyAyMy4yOCAxOS4yNzM3IDIzLjQ2QzE5LjM0MzcgMjMuNjQgMTkuMzgzNiAyMy44MSAxOS4zODM2IDIzLjk5QzE5LjM4MzYgMjQuMzUgMTkuMjQzNyAyNC43IDE4Ljk2MzggMjQuOTlMMTguOTczOCAyNVoiLz4nfV0sWyJ0YWJsZSIse291dGxpbmU6JzxwYXRoIGQ9Ik0zMyAxOEMzMy41NSAx''@;'; put 'put ''OCAzNCAxNy41NSAzNCAxN0MzNCAxNi40NSAzMy41NSAxNiAzMyAxNkgyOFY4SDMzQzMzLjU1IDggMzQgNy41NSAzNCA3QzM0IDYuNDUgMzMuNTUgNiAzMyA2SDhWM0M4IDIuNDUgNy41NSAyIDcgMkM2LjQ1IDIgNiAyLjQ1IDYgM1Y2SDNDMi40NSA2IDIgNi40NSAyIDdDMiA3LjU1IDIuNDUg''@;'; put 'put ''OCAzIDhINlYzM0M2IDMzLjU1IDYuNDUgMzQgNyAzNEM3LjU1IDM0IDggMzMuNTUgOCAzM1YyOEgxNlYzM0MxNiAzMy41NSAxNi40NSAzNCAxNyAzNEMxNy41NSAzNCAxOCAzMy41NSAxOCAzM1YyOEgyNlYzM0MyNiAzMy41NSAyNi40NSAzNCAyNyAzNEMyNy41NSAzNCAyOCAzMy41NSAyOCAz''@;'; put 'put ''M1YyOEgzM0MzMy41NSAyOCAzNCAyNy41NSAzNCAyN0MzNCAyNi40NSAzMy41NSAyNiAzMyAyNkgyOFYxOEgzM1pNMTYgMjZIOFYxOEgxNlYyNlpNMTYgMTZIOFY4SDE2VjE2Wk0yNiAyNkgxOFYxOEgyNlYyNlpNMjYgMTZIMThWOEgyNlYxNloiLz4nfV0sWyJ0cmFzaCIse291dGxpbmU6Jzxw''@;'; put 'put ''YXRoIGQ9Ik0yNy45OCAzMUMyOCAzMS4yNSAyNy45MiAzMS40OSAyNy43NiAzMS42OEMyNy42IDMxLjg3IDI3LjM3IDMxLjk4IDI3LjEyIDMySDguODVDOC42IDMxLjk4IDguMzcgMzEuODcgOC4yMSAzMS42OEM4LjA1IDMxLjQ5IDcuOTcgMzEuMjUgNy45OSAzMVYxMS4wM0g1Ljk3VjMxQzUu''@;'; put 'put ''OTUgMzEuNzggNi4yNCAzMi41MyA2Ljc4IDMzLjA5QzcuMzIgMzMuNjUgOC4wNiAzMy45OCA4Ljg1IDM0SDI3LjEyQzI3LjkgMzMuOTggMjguNjUgMzMuNjYgMjkuMTkgMzMuMDlDMjkuNzMgMzIuNTIgMzAuMDIgMzEuNzcgMzAgMzFWMTEuMDNIMjcuOThWMzFaTTEzIDEyLjk4VjI3Ljk4SDE1''@;'; put 'put ''LjAyVjEyLjk4SDEzWk0xNSA0SDIxVjZIMjNWNEMyMyAyLjkgMjIuMSAyIDIxIDJIMTVDMTMuOSAyIDEzIDIuOSAxMyA0VjZIMTVWNFpNMzAuOTkgNi45OEg1LjAxQzQuNDUgNi45OCA0IDcuNDMgNCA3Ljk4QzQgOC41MyA0LjQ1IDguOTggNS4wMSA4Ljk4SDMwLjk5QzMxLjU1IDguOTggMzIg''@;'; put 'put ''OC41MyAzMiA3Ljk4QzMyIDcuNDMgMzEuNTUgNi45OCAzMC45OSA2Ljk4Wk0yMC45OCAxMi45OFYyNy45OEgyM1YxMi45OEgyMC45OFoiLz4nLHNvbGlkOic8cGF0aCBkPSJNMTUgNEgyMVY2SDIzVjRDMjMgMi45IDIyLjEgMiAyMSAySDE1QzEzLjkgMiAxMyAyLjkgMTMgNFY2SDE1VjRaTTMw''@;'; put 'put ''Ljk5IDYuOThINS4wMUM0LjQ1IDYuOTggNCA3LjQzIDQgNy45OEM0IDguNTMgNC40NSA4Ljk4IDUuMDEgOC45OEgzMC45OUMzMS41NSA4Ljk4IDMyIDguNTMgMzIgNy45OEMzMiA3LjQzIDMxLjU1IDYuOTggMzAuOTkgNi45OFpNNS45NyAxMS4wM1YzMUM1Ljk1IDMxLjc4IDYuMjQgMzIuNTMg''@;'; put 'put ''Ni43OCAzMy4wOUM3LjMyIDMzLjY1IDguMDYgMzMuOTggOC44NSAzNEgyNy4xMkMyNy45IDMzLjk4IDI4LjY1IDMzLjY2IDI5LjE5IDMzLjA5QzI5LjczIDMyLjUyIDMwLjAyIDMxLjc3IDMwIDMxVjExLjAzSDUuOTdaTTIwLjc5IDI4LjgyVjE1SDIzLjIxVjI5SDIwLjc5VjI4LjgyWk0xMi44''@;'; put 'put ''MSAyOC44MlYxNUgxNS4yM1YyOUgxMi44MVYyOC44MloiLz4nfV0sWyJwcm9jZXNzLW9uLXZtIix7b3V0bGluZTonPHBhdGggZD0iTTEyIDE0LjUwMDFWMjQuNTAwMUMxMiAyNS4wNTAxIDEyLjQ1IDI1LjUwMDEgMTMgMjUuNTAwMUgyM0MyMy41NSAyNS41MDAxIDI0IDI1LjA1MDEgMjQgMjQu''@;'; put 'put ''NTAwMVYxNC41MDAxQzI0IDEzLjk1MDEgMjMuNTUgMTMuNTAwMSAyMyAxMy41MDAxSDEzQzEyLjQ1IDEzLjUwMDEgMTIgMTMuOTUwMSAxMiAxNC41MDAxWk0xNCAxNS41MDAxSDIyVjIzLjUwMDFIMTRWMTUuNTAwMVpNNS4yNiAyMi4yODAxQzUuODEgMjIuMjAwMSA2LjE5IDIxLjcwMDEgNi4x''@;'; put 'put ''MSAyMS4xNTAxQzYuMDMgMjAuNjEwMSA2IDIwLjA1MDEgNiAxOS40OTAxQzYgMTMuNDEwMSAxMC41NSA4LjM5MDA2IDE2LjQ3IDcuNjEwMDZMMTYuMjkgNy43OTAwNkMxNS45IDguMTgwMDYgMTUuOSA4LjgxMDA2IDE2LjI5IDkuMjAwMDZDMTYuNDkgOS40MDAwNiAxNi43NCA5LjQ5MDA2IDE3''@;'; put 'put ''IDkuNDkwMDZDMTcuMjYgOS40OTAwNiAxNy41MSA5LjM5MDA2IDE3LjcxIDkuMjAwMDZMMjAuNDIgNi40OTAwNkwxNy43MSAzLjc5MDA2QzE3LjMyIDMuNDAwMDYgMTYuNjkgMy40MDAwNiAxNi4zIDMuNzkwMDZDMTUuOTEgNC4xODAwNiAxNS45MSA0LjgxMDA2IDE2LjMgNS4yMDAwNkwxNi42''@;'; put 'put ''NiA1LjU2MDA2QzkuNTYgNi4yNTAwNiA0IDEyLjIzMDEgNCAxOS41MDAxQzQgMjAuMTUwMSA0LjA0IDIwLjgwMDEgNC4xMyAyMS40MzAxQzQuMiAyMS45MzAxIDQuNjMgMjIuMjkwMSA1LjEyIDIyLjI5MDFDNS4xNiAyMi4yOTAxIDUuMjEgMjIuMjkwMSA1LjI2IDIyLjI5MDFWMjIuMjgwMVpN''@;'; put 'put ''MjMuNjcgMzAuMDcwMUMyMS45NCAzMS4wMDAxIDE5Ljk4IDMxLjQ5MDEgMTggMzEuNDkwMUMxNC4zIDMxLjQ5MDEgMTAuODMgMjkuNzYwMSA4LjU3IDI2LjkwMDFMOC44MyAyNi45NDAxQzkuMzggMjcuMDQwMSA5Ljg5IDI2LjY2MDEgOS45OCAyNi4xMjAxQzEwLjA3IDI1LjU4MDEgOS43IDI1''@;'; put 'put ''LjA2MDEgOS4xNiAyNC45NzAxTDUuMzggMjQuMzQwMUw0Ljc1IDI4LjEyMDFDNC42NiAyOC42NjAxIDUuMDMgMjkuMTgwMSA1LjU3IDI5LjI3MDFDNS42MyAyOS4yNzAxIDUuNjggMjkuMjgwMSA1Ljc0IDI5LjI4MDFDNi4yMiAyOS4yODAxIDYuNjQgMjguOTMwMSA2LjczIDI4LjQ1MDFMNi44''@;'; put 'put ''MiAyNy45MjAxQzkuNDUgMzEuNDAwMSAxMy41OSAzMy41MDAxIDE4IDMzLjUwMDFDMjAuMzEgMzMuNTAwMSAyMi42IDMyLjkzMDEgMjQuNjIgMzEuODQwMUMyNS4xMSAzMS41ODAxIDI1LjI5IDMwLjk3MDEgMjUuMDMgMzAuNDkwMUMyNC43NyAzMC4wMDAxIDI0LjE2IDI5LjgyMDEgMjMuNjgg''@;'; put 'put ''MzAuMDgwMUwyMy42NyAzMC4wNzAxWk0zMC4wOSAyNi44MzAxTDI5LjkgMjYuODYwMUMzMS4yNiAyNC42NjAxIDMyIDIyLjEyMDEgMzIgMTkuNDkwMUMzMiAxMy45MDAxIDI4LjY4IDguODUwMDYgMjMuNTUgNi42MzAwNkMyMy4wNCA2LjQxMDA2IDIyLjQ2IDYuNjQwMDYgMjIuMjQgNy4xNTAw''@;'; put 'put ''NkMyMi4wMiA3LjY2MDA2IDIyLjI1IDguMjUwMDYgMjIuNzYgOC40NjAwNkMyNy4xNiAxMC4zNjAxIDMwLjAxIDE0LjY5MDEgMzAuMDEgMTkuNDgwMUMzMC4wMSAyMS44MDAxIDI5LjM0IDI0LjA0MDEgMjguMSAyNS45NjAxTDI3Ljk5IDI1LjMyMDFDMjcuOSAyNC43ODAxIDI3LjM5IDI0LjQw''@;'; put 'put ''MDEgMjYuODQgMjQuNTAwMUMyNi4zIDI0LjU5MDEgMjUuOTMgMjUuMTAwMSAyNi4wMiAyNS42NTAxTDI2LjY0IDI5LjQzMDFMMzAuNDIgMjguODEwMUMzMC45NiAyOC43MjAxIDMxLjMzIDI4LjIxMDEgMzEuMjQgMjcuNjYwMUMzMS4xNSAyNy4xMjAxIDMwLjY0IDI2Ljc0MDEgMzAuMDkgMjYu''@;'; put 'put ''ODQwMVYyNi44MzAxWiIvPid9XSk7bGV0IGdZZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixNLEQsWixuZSl7dGhpcy5hcHBTZXJ2aWNlPWEsdGhpcy5saWNlbmNlU2VydmljZT1kLHRoaXMucm91dGVyPWgsdGhpcy5yb3V0ZT1mLHRoaXMubG9jYXRpb249dix0aGlzLmV2''@;'; put 'put ''ZW50U2VydmljZT1NLHRoaXMuYXBwU3RvcmVTZXJ2aWNlPUQsdGhpcy5jZHI9Wix0aGlzLmVsZW1lbnRSZWY9bmUsdGhpcy5saWNlbnNlRXhwaXJpbmdEYXlzPW51bGwsdGhpcy5zYXNqc0Fib3J0cz1bXSx0aGlzLmVkaXRvckFjdGl2ZT0hMSx0aGlzLmFwcHJvdmVBY3RpdmU9ITEsdGhpcy5m''@;'; put 'put ''cmVlVGllckJhbm5lcj10aGlzLmxpY2VuY2VTZXJ2aWNlLmlzQXBwRnJlZVRpZXIudmFsdWUsdGhpcy5saWNlbmNlUHJvYmxlbT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VQcm9ibGVtLHRoaXMuYXBwT3ZlckNhcGFjaXR5PSExLHRoaXMuYXBwQWN0aXZlPW51bGwsdGhpcy5yZXF1ZXN0''@;'; put 'put ''c01vZGFsPSExLHRoaXMuc2hvd1JlZ2lzdHJhdGlvbj0hMCx0aGlzLnN0YXJ0dXBEYXRhTG9hZGVkPSExLHRoaXMuZGVtb0xpbWl0Tm90aWNlPXtvcGVuOiExLGZlYXR1cmVOYW1lOiIifSx0aGlzLnN5c3NpdGU9dGhpcy5hcHBTZXJ2aWNlLnN5c3NpdGUsdGhpcy5saWNlbmNlU3RhdGU9dGhp''@;'; put 'put ''cy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5wYXJzZURjQWRhcHRlclNldHRpbmdzKCksd2luZG93LmFwcGluZm89KCk9Pntjb25zb2xlLnRhYmxlKHsiQWRhcHRlciB2ZXJzaW9uIjoiNC4xMS4zIiwiQXBwIHZlcnNpb24iOiJ2Ni4xNC42Ii5yZXBsYWNlKCJ2IiwiIiksIkJ1''@;'; put 'put ''aWxkIHRpbWVzdGFtcCI6TGEocGFyc2VJbnQoIjE3NDM2NjkxNTkxNzMiKSkuZm9ybWF0KCJERC1NTU0tWVlZWSBISDpNTSIpLCIuLi4iOiIuLi4ifSl9LHRoaXMuc3Vic2NyaWJlVG9MaWNlbnNlRXZlbnRzKCksdGhpcy5jb21taXRWZXI9InY2LjE0LjYiLnJlcGxhY2UoInYiLCIiKSsiLmc3''@;'; put 'put ''ZTExYzhmIixoLmV2ZW50cy5zdWJzY3JpYmUoY2U9PntpZih0aGlzLnJvdXRlVXJsPXRoaXMucm91dGVyLnVybCx0eXBlb2YgdGhpcy5yb3V0ZVVybDwidSImJnRoaXMucm91dGVVcmwubGVuZ3RoPjQpe2xldCBiZT10aGlzLnJvdXRlVXJsLnNwbGl0KCIvIilbMV07ImVkaXRvciI9PT1iZT8o''@;'; put 'put ''dGhpcy5lcnJUb3A9ITAsdGhpcy5lZGl0b3JBY3RpdmU9ITAsdGhpcy5hcHByb3ZlQWN0aXZlPSExKToiaG9tZSI9PT1iZT8odGhpcy5lcnJUb3A9ITEsdGhpcy5lZGl0b3JBY3RpdmU9ITAsdGhpcy5hcHByb3ZlQWN0aXZlPSExKToodGhpcy5lcnJUb3A9ITAsdGhpcy5lZGl0b3JBY3RpdmU9''@;'; put 'put ''ITEpLEtuLnJvb3RQYXJhbT1iZX10eXBlb2YgdGhpcy5yb3V0ZVVybDwidSImJnRoaXMucm91dGVVcmwubGVuZ3RoPjYmJih0aGlzLmFwcHJvdmVBY3RpdmU9ISF0aGlzLnJvdXRlVXJsLmluY2x1ZGVzKCJhcHByb3ZlRGV0Iil8fCEhdGhpcy5yb3V0ZVVybC5pbmNsdWRlcygidG9hcHByb3Zl''@;'; put 'put ''IikpfSksdGhpcy5zdWJzY3JpYmVUb1Nob3dBYm9ydE1vZGFsKCksdGhpcy5zdWJzY3JpYmVUb1JlcXVlc3RzTW9kYWwoKSx0aGlzLnN1YnNjcmliZVRvU3RhcnR1cERhdGEoKSx0aGlzLnN1YnNjcmliZVRvQXBwQWN0aXZlKCksdGhpcy5zdWJzY3JpYmVUb0RlbW9MaW1pdE1vZGFsKCksd2lu''@;'; put 'put ''ZG93LmZyYW1lRWxlbWVudCYmKHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJzdHlsZSIsImhlaWdodDoxMDAlO3dpZHRoOjEwMCU7cG9zaXRpb246YWJzb2x1dGUiKSx3aW5kb3cuZnJhbWVFbGVtZW50LnNldEF0dHJpYnV0ZSgiYWxsb3dmdWxsc2NyZWVuIiwiIiksd2luZG93''@;'; put 'put ''LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoImZyYW1lYm9yZGVyIiwiMCIpLHdpbmRvdy5mcmFtZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJtYXJnaW5oZWlnaHQiLCIwIiksd2luZG93LmZyYW1lRWxlbWVudC5zZXRBdHRyaWJ1dGUoIm1hcmdpbndpZHRoIiwiMCIpLHdpbmRvdy5mcmFtZUVs''@;'; put 'put ''ZW1lbnQuc2V0QXR0cmlidXRlKCJzY3JvbGxpbmciLCJhdXRvIiksd2luZG93LmZvY3VzKCkpfXBhcnNlRGNBZGFwdGVyU2V0dGluZ3MoKXtjb25zdCBhPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInNhc2pzIik7aWYoIWEpcmV0dXJuIHRoaXMubGljZW5jZVNlcnZpY2UuZGVhY3RpdmF0ZUFw''@;'; put 'put ''cCgpLHZvaWQgc2V0VGltZW91dCgoKT0+e3RoaXMuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIlBsZWFzZSBtYWtlIHN1cmUgJ1NBU0pTJyB0YWcgd2l0aCBjb25maWcgYXR0cmlidXRlcyBpcyBhZGRlZCB0byBpbmRleC5odG1sIixudWxsLCJTQVNqcyBDb25maWcgbm90IGZv''@;'; put 'put ''dW5kIil9KTtjb25zdCBkPWY9PmEuZ2V0QXR0cmlidXRlKGYpfHx2b2lkIDAsaD17c2VydmVyVXJsOmQoInNlcnZlclVybCIpfHwiIixhcHBMb2M6ZCgiYXBwTG9jIil8fCIiLHNlcnZlclR5cGU6ZCgic2VydmVyVHlwZSIpLGxvZ2luTWVjaGFuaXNtOmQoImxvZ2luTWVjaGFuaXNtIil8fCIi''@;'; put 'put ''LGFkbWluR3JvdXA6ZCgiYWRtaW5Hcm91cCIpfHwiIixkY1BhdGg6ZCgiZGNQYXRoIil8fCIiLGRlYnVnOiJ0cnVlIj09PWQoImRlYnVnIil8fCExLHVzZUNvbXB1dGVBcGk6dGhpcy5wYXJzZUNvbXB1dGVBcGkoZCgidXNlQ29tcHV0ZUFwaSIpKSxjb250ZXh0TmFtZTpkKCJjb250ZXh0TmFt''@;'; put 'put ''ZSIpfHwiIixob3RMaWNlbmNlS2V5OmQoImhvdExpY2VuY2VLZXkiKXx8IiJ9O3RoaXMuZGNBZGFwdGVyU2V0dGluZ3M9aCx0aGlzLmFwcFN0b3JlU2VydmljZS5zZXREY0FkYXB0ZXJTZXR0aW5ncyhoKSx0aGlzLmFwcFNlcnZpY2Uuc2FzU2VydmljZUluaXQoKX1saWNlbmNlUHJvYmxlbURl''@;'; put 'put ''dGFpbHMoYSl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChhKX1wYXJzZUNvbXB1dGVBcGkoYSl7cmV0dXJuIHZvaWQgMD09PWF8fCJ1bmRlZmluZWQiPT09YXx8Im51bGwiPT09YT9udWxsOiJ0cnVlIj09PWF8fCExfXN1YnNjcmliZVRvRGVtb0xpbWl0TW9kYWwoKXt0aGlzLmV2ZW50U2Vy''@;'; put 'put ''dmljZS5vbkRlbW9MaW1pdE1vZGFsU2hvdy5zdWJzY3JpYmUoYT0+e3RoaXMuZGVtb0xpbWl0Tm90aWNlPXtvcGVuOiEwLGZlYXR1cmVOYW1lOmF9fSl9c3Vic2NyaWJlVG9MaWNlbnNlRXZlbnRzKCl7dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEZyZWVUaWVyLnN1YnNjcmliZShhPT57dGhp''@;'; put 'put ''cy5mcmVlVGllckJhbm5lcj1hfSksdGhpcy5saWNlbmNlU2VydmljZS5saWNlbnNlRXhwaXJlc0luRGF5cy5zdWJzY3JpYmUoYT0+e2EmJmE8PTE0JiYodGhpcy5saWNlbnNlRXhwaXJpbmdEYXlzPWEpfSksdGhpcy5saWNlbmNlU2VydmljZS5pc0FwcE92ZXJDYXBhY2l0eS5zdWJzY3JpYmUo''@;'; put 'put ''YT0+e3RoaXMuYXBwT3ZlckNhcGFjaXR5PWF9KX1zdWJzY3JpYmVUb0FwcEFjdGl2ZSgpe3RoaXMubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWQuc3Vic2NyaWJlKGE9Pnt0aGlzLmFwcEFjdGl2ZT1hfSl9c3Vic2NyaWJlVG9TaG93QWJvcnRNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNl''@;'; put 'put ''Lm9uU2hvd0Fib3J0TW9kYWwuc3Vic2NyaWJlKGE9PnthLmlkPXRoaXMuc2FzanNBYm9ydHMubGVuZ3RoKzEsdGhpcy5zYXNqc0Fib3J0cy5wdXNoKGEpLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKX0pfXN1YnNjcmliZVRvU3RhcnR1cERhdGEoKXt0aGlzLmV2ZW50U2VydmljZS5vblN0YXJ0''@;'; put 'put ''dXBEYXRhTG9hZGVkLnN1YnNjcmliZSgoKT0+e3RoaXMuc3RhcnR1cERhdGFMb2FkZWQ9ITB9KX1zdWJzY3JpYmVUb1JlcXVlc3RzTW9kYWwoKXt0aGlzLmV2ZW50U2VydmljZS5vblJlcXVlc3RzTW9kYWxPcGVuLnN1YnNjcmliZShhPT57dGhpcy5yZXF1ZXN0c01vZGFsPSEwfSl9Y2xvc2VB''@;'; put 'put ''Ym9ydE1vZGFsKGEpe2xldCBkPXRoaXMuc2FzanNBYm9ydHMuZmluZEluZGV4KGg9PmguaWQ9PT1hKTt0aGlzLnNhc2pzQWJvcnRzLnNwbGljZShkLDEpfXRvZ2dsZVNpZGViYXIoKXt0aGlzLmV2ZW50U2VydmljZS50b2dnbGVTaWRlYmFyKCl9aXNNYWluUm91dGUoYSl7cmV0dXJuIHRoaXMu''@;'; put 'put ''cm91dGVyLnVybC5pbmNsdWRlcyhhKX1vcGVuTGljZW5jaW5nUGFnZSgpe3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9saWNlbnNpbmcvdXBkYXRlIil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoUVIpLEdlKGQxKSxHZShMcyksR2Uo''@;'; put 'put ''Q3UpLEdlKHVoKSxHZShwYyksR2UocTgpLEdlKHhzKSxHZShlbykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1sibXktYXBwIl1dLGRlY2xzOjI2LHZhcnM6MTcsY29uc3RzOltbMSwibWFpbi1jb250YWluZXIiXSxbNCwibmdJZiJdLFsxLCJhcHAtaGVh''@;'; put 'put ''ZGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJjdXJzb3ItcG9pbnRlciBzZWxlY3Qtbm9uZSBtbC0xMCBkLWZsZXggY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIgY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwibG9nbyIsImQtZmxleCIsImNs''@;'; put 'put ''ci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbImhyZWYiLCIjIiwiY2xhc3MiLCJuYXYtbGluayIsMywicm91dGVyTGluayIsNCwibmdJZiJdLFsiY2xhc3MiLCJzdWJuYXYiLDQsIm5nSWYiXSxbMywib3BlbmVkQ2hhbmdlIiwib3BlbmVkIl0sWzMsImRhdGEiLCJmb3JjZVJlbG9hZCIsIm9uQ29u''@;'; put 'put ''ZmlybU1vZGFsQ2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiYXBwRHJhZ05kcm9wIiwiIiwxLCJwb3NpdGlvbi1yZWxhdGl2ZSIsMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNsck1vZGFsU2l6ZSJdLFsxLCJtb2RhbC10aXRs''@;'; put 'put ''ZSJdLFsic2l6ZSIsIjIwIiwic2hhcGUiLCJsb2NrIl0sWzEsIm1vZGFsLWJvZHkiXSxbImNsYXNzIiwiYXBwLWxvYWRpbmciLDQsIm5nSWYiXSxbImNsYXNzIiwiYWxlcnQgYWxlcnQtYXBwLWxldmVsIGFsZXJ0LXdhcm5pbmciLCJpZCIsImRlbW8tYmFubmVyIiwicm9sZSIsImFsZXJ0Iiw0''@;'; put 'put ''LCJuZ0lmIl0sWyJjbGFzcyIsImFsZXJ0IGFsZXJ0LWFwcC1sZXZlbCBhbGVydC1kYW5nZXIiLCJpZCIsImRlbW8tYmFubmVyIiwicm9sZSIsImFsZXJ0Iiw0LCJuZ0lmIl0sWyJpZCIsImRlbW8tYmFubmVyIiwicm9sZSIsImFsZXJ0IiwxLCJhbGVydCIsImFsZXJ0LWFwcC1sZXZlbCIsImFs''@;'; put 'put ''ZXJ0LXdhcm5pbmciXSxbMSwiYWxlcnQtaXRlbXMiXSxbMSwiYWxlcnQtaXRlbSIsInN0YXRpYyJdLFsxLCJhbGVydC1pY29uLXdyYXBwZXIiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsMSwiYWxlcnQtaWNvbiJdLFsxLCJhbGVydC10ZXh0Il0sWyJjbGFzc2VzIiwiY29sb3Itd2hp''@;'; put 'put ''dGUiXSxbInJvdXRlckxpbmsiLCIvbGljZW5zaW5nL3VwZGF0ZSIsMSwidXBkYXRlLWtleSJdLFsxLCJ1cGRhdGUta2V5IiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJpZCIsImRlbW8tYmFubmVyIiwicm9sZSIsImFsZXJ0IiwxLCJhbGVydCIsImFsZXJ0LWFwcC1sZXZlbCIsImFs''@;'; put 'put ''ZXJ0LWRhbmdlciJdLFsicm91dGVyTGluayIsIi9saWNlbnNpbmcvdXBkYXRlIiwiY2xhc3MiLCJ1cGRhdGUta2V5Iiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJjdXJzb3ItcG9pbnRlciIsInNlbGVjdC1ub25lIiwibWwtMTAiLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50''@;'; put 'put ''LWNlbnRlciIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLDMsImNsaWNrIl0sWyJzaXplIiwiMjQiLCJzaGFwZSIsInRyZWUtdmlldyJdLFsiaHJlZiIsIiMiLDEsIm5hdi1saW5rIiwzLCJyb3V0ZXJMaW5rIl0sWyJzcmMiLCIvU0FTU3RvcmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVq''@;'; put 'put ''RUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2VzL2RjLWxvZ28tc3ZnIiwiYWx0IiwiZGF0YWNvbnRyb2xsZXIgbG9nbyB3aXRob3V0IHRleHQiLDEsIndpdGhvdXQtdGV4dCIsImQtYmxvY2siLCJkLW1kLW5vbmUiXSxbInNyYyIsIi9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5''@;'; put 'put ''NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9pbWFnZXMvZGF0YWNvbnRyb2xsZXItc3ZnIiwiYWx0IiwiZGF0YWNvbnRyb2xsZXIgbG9nbyIsMSwid2l0aC10ZXh0IiwiZC1ub25lIiwiZC1tZC1ibG9jayJdLFsxLCJjbHItaWNvbiIsImhlYWRlci1sb2dvIiwibWwtMTAiXSxbMSwiaGVhZGVyLW5h''@;'; put 'put ''diIsImQtZmxleCIsImQtc20tbm9uZSJdLFsiY2xyRHJvcGRvd25UcmlnZ2VyIiwiIiwiYXJpYS1sYWJlbCIsInRvZ2dsZSBzZXR0aW5ncyBtZW51IiwxLCJuYXYtaWNvbiIsImNvbG9yLXdoaXRlLWkiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLDQsImNscklmT3BlbiJdLFsxLCJo''@;'; put 'put ''ZWFkZXItbmF2IiwiZC1ub25lIiwiZC1zbS1mbGV4Il0sWyJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiwxLCJuYXYtbGluayIsIm5hdi10ZXh0IiwzLCJyb3V0ZXJMaW5rIl0sWzEsIm5hdi1saW5rIiwibmF2LXRleHQiLDMsInJvdXRlckxpbmsiXSxbMSwibmF2LWxpbmsiLCJuYXYtdGV4''@;'; put 'put ''dCIsImN1cnNvci1wb2ludGVyIiwzLCJyb3V0ZXJMaW5rIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0Il0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsInJvdXRlckxpbmsiXSxbMSwic3VibmF2Il0sWzEsIm5hdiJdLFsxLCJuYXYtaXRlbSJdLFszLCJvbkNvbmZpcm1Nb2RhbENsaWNr''@;'; put 'put ''IiwiZGF0YSIsImZvcmNlUmVsb2FkIl0sWzEsImFwcC1sb2FkaW5nIl0sWyJzcmMiLCIvU0FTU3RvcmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2VzL2RhdGFjb250cm9sbGVyLXN2ZyIsImFsdCIsImRhdGFjb250cm9sbGVyIGxvZ28iLDEs''@;'; put 'put ''ImxvYWRpbmctbG9nbyJdLFsiY2xhc3MiLCJzbGlkZXIiLDQsIm5nSWYiXSxbMSwic2xpZGVyIl0sWzEsImxpbmUiXSxbMSwic3VibGluZSIsImluYyJdLFsxLCJzdWJsaW5lIiwiZGVjIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwwKSxndCgxLG5ZZSw0LDMs''@;'; put 'put ''Im5nLWNvbnRhaW5lciIsMSksZGUoMiwiaGVhZGVyIiwyKSxndCgzLHJZZSwyLDAsImRpdiIsMyksZGUoNCwiZGl2Iiw0KSxndCg1LGlZZSwzLDIsImEiLDUpKDYsb1llLDIsMCwiYSIsMSksaGUoKSxndCg3LHNZZSwxMywxMCwibmctY29udGFpbmVyIiwxKSxHdCg4LCJhcHAtaGVhZGVyLWFj''@;'; put 'put ''dGlvbnMiKSxoZSgpLGd0KDksbFllLDExLDgsIm5hdiIsNikoMTAsY1llLDEsMCwiYXBwLWFsZXJ0cyIsMSksZGUoMTEsImFwcC1yZXF1ZXN0cy1tb2RhbCIsNykscGkoIm9wZW5lZENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIHZpKGgucmVxdWVzdHNNb2RhbCx2KXx8KGgucmVxdWVzdHNN''@;'; put 'put ''b2RhbD12KSx2fSksaGUoKSxHdCgxMiwiYXBwLWV4Y2VsLXBhc3N3b3JkLW1vZGFsIiksZ3QoMTMsdVllLDEsMCwicm91dGVyLW91dGxldCIsMSksR3QoMTQsImFwcC1sb2dpbiIpLGd0KDE1LGRZZSwxLDAsImFwcC1hbGVydHMiLDEpKDE2LGhZZSwxLDIsImFwcC1pbmZvLW1vZGFsIiw4KSxk''@;'; put 'put ''ZSgxNywiY2xyLW1vZGFsIiw5KSxwaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gdmkoaC5kZW1vTGltaXROb3RpY2Uub3Blbix2KXx8KGguZGVtb0xpbWl0Tm90aWNlLm9wZW49diksdn0pLGRlKDE4LCJoMyIsMTApLExlKDE5KSxHdCgyMCwiY2xyLWljb24iLDEx''@;'; put 'put ''KSxoZSgpLGRlKDIxLCJkaXYiLDEyKSxMZSgyMiwiIENvbnRhY3QgIiksR3QoMjMsImNvbnRhY3QtbGluayIpLExlKDI0KSxoZSgpKCkoKSxndCgyNSxwWWUsMywxLCJkaXYiLDEzKSksMiZkJiYoZmUoKSx4ZSgibmdJZiIsIWgucm91dGVyLnVybC5pbmNsdWRlcygibGljZW5zaW5nIikpLGZl''@;'; put 'put ''KDIpLHhlKCJuZ0lmIixoLmlzTWFpblJvdXRlKCJ2aWV3Iil8fGguaXNNYWluUm91dGUoImhvbWUiKSYmIWgucm91dGVyLnVybC5pbmNsdWRlcygibGljZW5zaW5nIikpLGZlKDIpLHhlKCJuZ0lmIiwhaC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJkZXBsb3kiKSksZmUoKSx4ZSgibmdJZiIsaC5y''@;'; put 'put ''b3V0ZXIudXJsLmluY2x1ZGVzKCJkZXBsb3kiKSksZmUoKSx4ZSgibmdJZiIsIWgucm91dGVyLnVybC5pbmNsdWRlcygiZGVwbG95IikmJiFoLnJvdXRlci51cmwuaW5jbHVkZXMoImxpY2Vuc2luZyIpKSxmZSgyKSx4ZSgibmdJZiIsaC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJzdWJtaXR0ZWQi''@;'; put 'put ''KXx8aC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJhcHByb3ZlIil8fGgucm91dGVyLnVybC5pbmNsdWRlcygiaGlzdG9yeSIpKSxmZSgpLHhlKCJuZ0lmIiwhaC5lcnJUb3ApLGZlKCksZmkoIm9wZW5lZCIsaC5yZXF1ZXN0c01vZGFsKSxmZSgyKSx4ZSgibmdJZiIsaC5zdGFydHVwRGF0YUxvYWRl''@;'; put 'put ''ZCksZmUoMikseGUoIm5nSWYiLGguZXJyVG9wKSxmZSgpLHhlKCJuZ0Zvck9mIixoLnNhc2pzQWJvcnRzKSxmZSgpLGZpKCJjbHJNb2RhbE9wZW4iLGguZGVtb0xpbWl0Tm90aWNlLm9wZW4pLHhlKCJjbHJNb2RhbENsb3NhYmxlIiwhMCkoImNsck1vZGFsU2l6ZSIsImxnIiksZmUoMiksUnIo''@;'; put 'put ''IiBMb2NrZWQgRmVhdHVyZSAoIixoLmRlbW9MaW1pdE5vdGljZS5mZWF0dXJlTmFtZSwiKSAiKSxmZSg1KSxScigiIHdpdGggeW91ciBzaXRlIGlkICgiLGguc3lzc2l0ZS52YWx1ZSwiKSB0byBhY3RpdmF0ZSEgIiksZmUoKSx4ZSgibmdJZiIsIWguc3RhcnR1cERhdGFMb2FkZWQpKX0sZGVw''@;'; put 'put ''ZW5kZW5jaWVzOltzcyx5byxlZyx1MSxjeSxaWmUsb1dlLGxXZSxzTyxkV2UsWHgsT2wsY3Msb3UsS3UseDIsaWcsaDcsZjcsT3ksUXgsRldlLFdXZV0sc3R5bGVzOlsiYXBwLXJlcXVlc3RzLW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXXt6LWluZGV4OjEwMDAwfWhlYWRlci5hcHAtaGVhZGVy''@;'; put 'put ''W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiMzMTQzNTEhaW1wb3J0YW50O2NvbG9yOiNmZmZ9LmxvZ29bX25nY29udGVudC0lQ09NUCVdICAgaW1nLndpdGhvdXQtdGV4dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MzBweH0ubG9nb1tfbmdjb250ZW50LSVDT01QJV0gICBpbWcu''@;'; put 'put ''d2l0aC10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoyMTBweH0uaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmJsb2NrO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOjA7bWFyZ2luLWxlZnQ6MTBweH0uZGVtby1leHBpcmVkLW5v''@;'; put 'put ''dGljZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOmZpeGVkO2xlZnQ6MDt0b3A6MDtoZWlnaHQ6MTAwdmghaW1wb3J0YW50O3dpZHRoOjEwMHZ3IWltcG9ydGFudDt6LWluZGV4OjEwNTti''@;'; put 'put ''YWNrZ3JvdW5kOiMyMTIxMjE4MH0uZGVtby1leHBpcmVkLW5vdGljZVtfbmdjb250ZW50LSVDT01QJV0gICAuZXhwaXJlZC1kZXRhaWxzW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6MzBweDt6LWluZGV4OjExMDti''@;'; put 'put ''YWNrZ3JvdW5kOiMzMTQzNTF9LmRlbW8tZXhwaXJlZC1ub3RpY2VbX25nY29udGVudC0lQ09NUCVdICAgLmV4cGlyZWQtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICAuZXhwaXJlZC1ub3RpY2VbX25nY29udGVudC0lQ09NUCVde2NvbG9yOiNlMGUwZTA7Zm9udC1zaXplOjE2cHh9LmRl''@;'; put 'put ''bW8tZXhwaXJlZC1ub3RpY2VbX25nY29udGVudC0lQ09NUCVdICAgLmV4cGlyZWQtZGV0YWlsc1tfbmdjb250ZW50LSVDT01QJV0gICAuZXhwaXJlZC1ub3RpY2VbX25nY29udGVudC0lQ09NUCVdICAgLm1haWx0b1tfbmdjb250ZW50LSVDT01QJV17Y29sb3I6IzhkYzUzZX0ubWFpbi1jb250''@;'; put 'put ''YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLnVwZGF0ZS1rZXlbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6I2ZmZjtwYWRkaW5nOjAgMTBweDtiYWNrZ3JvdW5kOiMwMDAwMDAyNn0uYWxlcnQtaWNvbi13cmFwcGVyW19uZ2NvbnRl''@;'; put 'put ''bnQtJUNPTVAlXXttYXJnaW4tdG9wOjAhaW1wb3J0YW50fS5uYXYtdGV4dFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXJpZ2h0OjIwcHh9LnNpZGViYXItdG9nZ2xlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7aGVpZ2h0OjEwMCU7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRp''@;'; put 'put ''bmctbGVmdDoxMHB4fS5zaWRlYmFyLXRvZ2dsZVtfbmdjb250ZW50LSVDT01QJV0gICBjbHItaWNvbltfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOnBvaW50ZXI7d2lkdGg6MzBweDtoZWlnaHQ6MzBweH1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAgLmhlYWRlci1hY3Rpb25zW19uZ2Nv''@;'; put 'put ''bnRlbnQtJUNPTVAlXSAgIC5kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246dW5zZXR9aGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXYtbGlua1tfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7Y29sb3I6I2ZhZmFmYX1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdICAg''@;'; put 'put ''Lm5hdi1saW5rLmFjdGl2ZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojMWQyZjNkfS5ub3RmW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiMxNmE1N2E7Y29sb3I6I2ZmZmNmYztmb250LXNpemU6MTJweH0udG9nZ2xlLXN3aXRjaFtfbmdjb250ZW50LSVDT01QJV0gICBp''@;'; put 'put ''bnB1dFt0eXBlPWNoZWNrYm94XVtfbmdjb250ZW50LSVDT01QJV06Y2hlY2tlZCArIGxhYmVsW19uZ2NvbnRlbnQtJUNPTVAlXTpiZWZvcmV7Ym9yZGVyLWNvbG9yOiM2MTcxN2Q7YmFja2dyb3VuZC1jb2xvcjojNjE3MTdkO3RyYW5zaXRpb246LjE1cyBlYXNlLWluO3RyYW5zaXRpb24tcHJv''@;'; put 'put ''cGVydHk6Ym9yZGVyLWNvbG9yLGJhY2tncm91bmQtY29sb3J9Lm1haW4tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OjEwMHZoIWltcG9ydGFudH0ubWFpbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRlbnQtY29udGFpbmVyW19uZ2NvbnRlbnQt''@;'; put 'put ''JUNPTVAlXSAgIC5jb250ZW50LWFyZWFbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MHJlbSAxcmVtIDFyZW19LmNvbnRlbnQtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXt6LWluZGV4OjAhaW1wb3J0YW50fS5uYXZCYXJSZXNwW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZs''@;'; put 'put ''ZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtiYWNrZ3JvdW5kOiM0OTVhNjc7Y29sb3I6I2ZmZn0gIC5odEludmFsaWR7YmFja2dyb3VuZDojMDAwIWltcG9ydGFudH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0ODBweCl7ICBoMntmb250LXNpemU6LjdyZW0haW1wb3J0YW50fSAg''@;'; put 'put ''aDN7Zm9udC1zaXplOi43cmVtfX0gIC5uYXYtbGlua3twYWRkaW5nOjByZW0gMXJlbX0gIGJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAuYnRuLXByaW1hcnkgLmJ0biwgICBib2R5W2Nkcy10aGVtZT1saWdodF0gLmJ0bi5idG4tcHJpbWFyeXtib3JkZXItY29sb3I6IzMxNDM1MTtiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOiMzMTQzNTE7Y29sb3I6I2ZmZn0gIGJvZHlbY2RzLXRoZW1lPWRhcmtdIC5idG4tcHJpbWFyeSAuYnRuLCAgIGJvZHlbY2RzLXRoZW1lPWRhcmtdIC5idG4uYnRuLXByaW1hcnl7Ym9yZGVyLWNvbG9yOiM1ZTczODI7YmFja2dyb3VuZC1jb2xvcjojNWU3MzgyO2NvbG9yOiNmZmZ9''@;'; put 'put ''ICBib2R5W2Nkcy10aGVtZT1kYXJrXSAuYnRuLXByaW1hcnkgLmJ0biBjbHItaWNvbiwgICBib2R5W2Nkcy10aGVtZT1kYXJrXSAuYnRuLXByaW1hcnkgLmJ0biBjZHMtaWNvbiwgICBib2R5W2Nkcy10aGVtZT1kYXJrXSAuYnRuLmJ0bi1wcmltYXJ5IGNsci1pY29uLCAgIGJvZHlbY2RzLXRo''@;'; put 'put ''ZW1lPWRhcmtdIC5idG4uYnRuLXByaW1hcnkgY2RzLWljb257Y29sb3I6I2ZmZn0gIC5idG4tcHJpbWFyeSAuYnRuOmRpc2FibGVkLCAgIC5idG4uYnRuLXByaW1hcnk6ZGlzYWJsZWR7b3BhY2l0eTouNjV9ICAuYnRue2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrOy13ZWJr''@;'; put 'put ''aXQtYXBwZWFyYW5jZTpub25lIWltcG9ydGFudDtib3JkZXItcmFkaXVzOi4xMjVyZW07Ym9yZGVyOjFweCBzb2xpZDttaW4td2lkdGg6M3JlbTttYXgtd2lkdGg6MTVyZW07d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVuO3RleHQtYWxp''@;'; put 'put ''Z246Y2VudGVyO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7bGluZS1oZWlnaHQ6MS41cmVtO2xldHRlci1zcGFjaW5nOi4xMmVtO2ZvbnQtc2l6ZTouNXJlbTtmb250LXdlaWdodDo1MDA7aGVpZ2h0OjEuNXJlbTtwYWRkaW5nOjAgLjVyZW19ICAuYnRu''@;'; put 'put ''LmJ0bi1vdXRsaW5lOmhvdmVye2JvcmRlci1jb2xvcjojMzE0MzUxO2JhY2tncm91bmQtY29sb3I6IzQ5NWE2Nztjb2xvcjojZmZmfSAgYm9keVtjZHMtdGhlbWU9ZGFya10gLmJ0bi5idG4taWNvbi5idG4tZGltbWVke2NvbG9yOiM3Mjk1YWV9ICBib2R5W2Nkcy10aGVtZT1saWdodF0gLmJ0''@;'; put 'put ''bi5idG4taWNvbi5idG4tZGltbWVke2NvbG9yOiMzMTQzNTF9ICBib2R5W2Nkcy10aGVtZT1saWdodF0gLmJ0bi5idG4tb3V0bGluZXtib3JkZXItY29sb3I6IzMxNDM1MTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2NvbG9yOiMzMTQzNTF9ICAuaHRNb2JpbGVFZGl0b3JDb250YWlu''@;'; put 'put ''ZXIgLmlucHV0cyB0ZXh0YXJlYXtmb250LXNpemU6MTNwdDtib3JkZXI6MnB4IHNvbGlkICM0ODU5Njc7Ym9yZGVyLXJhZGl1czo0cHg7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7Ym94LXNoYWRvdzpub25lO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjAgMCAwIDE0cHg7cGFkZGluZzo3cHQ7''@;'; put 'put ''d2lkdGg6MjkwcHh9ICAuaHRNb2JpbGVFZGl0b3JDb250YWluZXIgLnBvc2l0aW9uQ29udHJvbHN7d2lkdGg6MzMzcHg7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6NXB0O3RvcDo1MHB4O2JvdHRvbTowO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfSAgLmh0TW9iaWxlRWRp''@;'; put 'put ''dG9yQ29udGFpbmVyLmFjdGl2ZXtkaXNwbGF5OmJsb2NrO2hlaWdodDoxMjBweDt3aWR0aDozNTBweH0gIGJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAud3RCb3JkZXJ7YmFja2dyb3VuZC1jb2xvcjojNDk1YTY3IWltcG9ydGFudH0gIGJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAuaHRfbWFzdGVyIHRy''@;'; put 'put ''Om50aC1vZi10eXBlKG9kZCk+dGR7ZmlsdGVyOmJyaWdodG5lc3MoLjk1KX0gIGJvZHlbY2RzLXRoZW1lPWRhcmtdIC5odF9tYXN0ZXIgdHI6bnRoLW9mLXR5cGUob2RkKT50ZHtmaWx0ZXI6YnJpZ2h0bmVzcygxLjIpfSAgYm9keVtjZHMtdGhlbWU9ZGFya10gLmh0X21hc3Rlcjpub3QoLmVt''@;'; put 'put ''cHR5Q29sdW1ucyl+LmhhbmRzb250YWJsZSB0Ym9keSB0ciB0aCwgICBib2R5W2Nkcy10aGVtZT1kYXJrXSAuaHRfbWFzdGVyOm5vdCguZW1wdHlDb2x1bW5zKX4uaGFuZHNvbnRhYmxlOm5vdCguaHRfY2xvbmVfdG9wKSB0aGVhZCB0ciB0aDpmaXJzdC1jaGlsZHtiYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OiMyZDQwNDg7Ym9yZGVyLWNvbG9yOiM2OTdjODV9ICBib2R5W2Nkcy10aGVtZT1kYXJrXSAuaGFuZHNvbnRhYmxlIHRke2JvcmRlci1jb2xvcjojNjk3Yzg1fSAgYm9keVtjZHMtdGhlbWU9ZGFya10gLmhhbmRzb250YWJsZSB0cjpmaXJzdC1jaGlsZCB0aCwgICBib2R5W2Nkcy10aGVtZT1k''@;'; put 'put ''YXJrXSAuaGFuZHNvbnRhYmxlIHRyOmZpcnN0LWNoaWxkIHRke2JvcmRlci1jb2xvcjojNjk3Yzg1fSAgYm9keVtjZHMtdGhlbWU9ZGFya10gLmhhbmRzb250YWJsZSAuaGFuZHNvbnRhYmxlLmh0X2Nsb25lX3RvcCAud3RIaWRlcntib3JkZXItY29sb3I6IzY5N2M4NX0gIGJvZHlbY2RzLXRo''@;'; put 'put ''ZW1lPWRhcmtdIC5oYW5kc29udGFibGUgLmNoYW5nZVR5cGV7YmFja2dyb3VuZC1jb2xvcjojM2M1NjYyO2JvcmRlci1jb2xvcjojNjk3Yzg1fSAgYm9keVtjZHMtdGhlbWU9ZGFya10gLmhhbmRzb250YWJsZUlucHV0e2JhY2tncm91bmQtY29sb3I6IzcwOGI5OH0gIC5oYW5kc29udGFibGUg''@;'; put 'put ''LmhhbmRzb250YWJsZS5odF9jbG9uZV90b3AgLnd0SGlkZXJ7cGFkZGluZzowIWltcG9ydGFudDttYXJnaW46MDtib3JkZXItYm90dG9tOjNweCBzb2xpZCAjZDZkM2QzfSAgYm9keVtjZHMtdGhlbWU9bGlnaHRdIC5jb250ZW50LWNvbnRhaW5lcntiYWNrZ3JvdW5kOiNmNWY2ZmZ9ICAuZGF0''@;'; put 'put ''YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQsICAgLmRhdGFncmlkLWhpc3RvcnkgLmRhdGFncmlke2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZTtib3JkZXI6MXB4IHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yYWRpdXM6LjEyNXJlbTttYXJnaW46MDttYXJnaW4tdG9wOjFyZW07bWF4LXdpZHRo''@;'; put 'put ''OjEwMCU7d2lkdGg6MTAwJTtwYWRkaW5nOjE1cHggMTVweCA1MHB4fSAgLmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWZvb3QsICAgLmRhdGFncmlkLWhpc3RvcnkgLmRhdGFncmlkLWZvb3R7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO2hlaWdodDoxLjVyZW07cGFkZGluZzowIC41cmVt''@;'; put 'put ''O2xpbmUtaGVpZ2h0OmNhbGMoMS41cmVtIC0gM3B4KTtmb250LXNpemU6LjQ1ODMzcmVtO2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXItdG9wOjFweCBzb2xpZCAjY2NjO2JvcmRlci1yYWRpdXM6MH0gIC5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1mb290ZXIsICAgLmRhdGFncmlk''@;'; put 'put ''LWhpc3RvcnkgLmRhdGFncmlkLWZvb3Rlcntwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDozMHB4O3RvcDoxcHh9ICAuZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQgLmRhdGFncmlkLWhlYWQsICAgLmRhdGFncmlkLWhpc3RvcnkgLmRhdGFncmlkIC5kYXRhZ3JpZC1oZWFke2JhY2tncm91bmQt''@;'; put 'put ''Y29sb3I6I2ZmZjtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjY2NjfSAgLmRyb3Bkb3duLW1lbnV7cG9zaXRpb246YWJzb2x1dGU7dG9wOjEwMCU7bGVmdDowO21hcmdpbi10b3A6LjA4MzMzM3JlbTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3BhZGRpbmc6LjVyZW0gMDti''@;'; put 'put ''b3JkZXI6MXB4IHNvbGlkICNjY2M7Ym94LXNoYWRvdzowIDFweCAuMTI1cmVtICM3MzczNzM0MDttaW4td2lkdGg6NXJlbTttYXgtd2lkdGg6MTVyZW07Ym9yZGVyLXJhZGl1czouMTI1cmVtO3Zpc2liaWxpdHk6aGlkZGVuO3otaW5kZXg6MTAwMH0gIC50YWJsZXtib3JkZXItY29sbGFwc2U6''@;'; put 'put ''c2VwYXJhdGU7Ym9yZGVyOjFweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmFkaXVzOjA7bWFyZ2luOjA7bWFyZ2luLXRvcDoxcmVtO21heC13aWR0aDoxMDAlO3dpZHRoOjEwMCV9ICAudGFibGUgdGh7Zm9udC1zaXplOi40NTgzM3JlbTtmb250LXdlaWdodDo2MDA7bGV0dGVyLXNwYWNp''@;'; put 'put ''bmc6LjAzZW07dmVydGljYWwtYWxpZ246Ym90dG9tO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNjY2M7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlfSAgLm1vZGFsLWhlYWRlcntib3JkZXItYm90dG9tOjJweCBzb2xpZCAjZTRlNGU0O3BhZGRpbmc6MCAwIC41cmVtO21hcmdpbi1ib3R0b206''@;'; put 'put ''MXJlbX0gIC5tYWluLWNvbnRhaW5lciAuY29udGVudC1jb250YWluZXJ7bWluLWhlaWdodDowcHg7cG9zaXRpb246cmVsYXRpdmV9LmFwcC1sb2FkaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5sb2FkaW5nLWxvZ29bX25nY29udGVudC0lQ09NUCVde21heC13aWR0aDo0MDBweDt3aWR0aDox''@;'; put 'put ''MDAlfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KXsubmF2QmFyUmVzcFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0O2JhY2tncm91bmQ6IzQ5NWE2Nztjb2xvcjojZmZmfS5tYWluLWNvbnRhaW5lcltfbmdjb250''@;'; put 'put ''ZW50LSVDT01QJV0gICAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTFbX25nY29udGVudC0lQ09NUCVdICAgLm5hdltfbmdjb250ZW50LSVDT01QJV0gICAubmF2LWxpbmtbX25nY29udGVudC0lQ09NUCVdLCAubWFpbi1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLnN1Yi1uYXYuY2xy''@;'; put 'put ''LW5hdi1sZXZlbC0yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXZbX25nY29udGVudC0lQ09NUCVdICAgLm5hdi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1haW4tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xW19uZ2NvbnRlbnQtJUNP''@;'; put 'put ''TVAlXSAgIC5uYXZbX25nY29udGVudC0lQ09NUCVdICAgLm5hdi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm1haW4tY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXZbX25nY29udGVudC0lQ09N''@;'; put 'put ''UCVdICAgLm5hdi1saW5rW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjAgLjVyZW0gMCAxcmVtO3dpZHRoOjEwMCU7bWF4LXdpZHRoOjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7Ym9yZGVyLXJhZGl1czouMTI1cmVtIDAgMCAuMTI1cmVtO2NvbG9yOiM5''@;'; put 'put ''NWM4NGJ9LmNhcmQtYmxvY2tbX25nY29udGVudC0lQ09NUCVdLCAuY2FyZC1mb290ZXJbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MTBweCAwIDB9Lm1haW4tY29udGFpbmVyW19uZ2NvbnRlbnQtYzBdW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250ZW50LWNvbnRhaW5lcltfbmdjb250''@;'; put 'put ''ZW50LWMwXVtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudC1hcmVhW19uZ2NvbnRlbnQtYzBdW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjByZW19fSJdfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiByaGUoYyl7cmV0dXJuIG5ldyBlcigzZTMsITEpfWZ1bmN0aW9uIFRtKGMpe3N3''@;'; put 'put ''aXRjaChjLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgeXg7Y2FzZSAxOnJldHVybiBjWzBdO2RlZmF1bHQ6cmV0dXJuIG5ldyB3MGUoYyl9fWZ1bmN0aW9uIGloZShjLGwsYT1uZXcgTWFwLGQ9bmV3IE1hcCl7Y29uc3QgaD1bXSxmPVtdO2xldCB2PS0xLE09bnVsbDtpZihsLmZvckVhY2go''@;'; put 'put ''RD0+e2NvbnN0IFo9RC5nZXQoIm9mZnNldCIpLG5lPVo9PXYsY2U9bmUmJk18fG5ldyBNYXA7RC5mb3JFYWNoKChiZSxFZSk9PntsZXQgQmU9RWUscWU9YmU7aWYoIm9mZnNldCIhPT1FZSlzd2l0Y2goQmU9Yy5ub3JtYWxpemVQcm9wZXJ0eU5hbWUoQmUsaCkscWUpe2Nhc2UiISI6cWU9YS5n''@;'; put 'put ''ZXQoRWUpO2JyZWFrO2Nhc2UgdGc6cWU9ZC5nZXQoRWUpO2JyZWFrO2RlZmF1bHQ6cWU9Yy5ub3JtYWxpemVTdHlsZVZhbHVlKEVlLEJlLHFlLGgpfWNlLnNldChCZSxxZSl9KSxuZXx8Zi5wdXNoKGNlKSxNPWNlLHY9Wn0pLGgubGVuZ3RoKXRocm93IGZ1bmN0aW9uIE5ZZShjKXtyZXR1cm4g''@;'; put 'put ''bmV3IGVyKDM1MDIsITEpfSgpO3JldHVybiBmfWZ1bmN0aW9uIG1HKGMsbCxhLGQpe3N3aXRjaChsKXtjYXNlInN0YXJ0IjpjLm9uU3RhcnQoKCk9PmQoYSYmdkcoYSwic3RhcnQiLGMpKSk7YnJlYWs7Y2FzZSJkb25lIjpjLm9uRG9uZSgoKT0+ZChhJiZ2RyhhLCJkb25lIixjKSkpO2JyZWFr''@;'; put 'put ''O2Nhc2UiZGVzdHJveSI6Yy5vbkRlc3Ryb3koKCk9PmQoYSYmdkcoYSwiZGVzdHJveSIsYykpKX19ZnVuY3Rpb24gdkcoYyxsLGEpe2NvbnN0IGY9YkcoYy5lbGVtZW50LGMudHJpZ2dlck5hbWUsYy5mcm9tU3RhdGUsYy50b1N0YXRlLGx8fGMucGhhc2VOYW1lLGEudG90YWxUaW1lPz9jLnRv''@;'; put 'put ''dGFsVGltZSwhIWEuZGlzYWJsZWQpLHY9Yy5fZGF0YTtyZXR1cm4gbnVsbCE9diYmKGYuX2RhdGE9diksZn1mdW5jdGlvbiBiRyhjLGwsYSxkLGg9IiIsZj0wLHYpe3JldHVybntlbGVtZW50OmMsdHJpZ2dlck5hbWU6bCxmcm9tU3RhdGU6YSx0b1N0YXRlOmQscGhhc2VOYW1lOmgsdG90YWxU''@;'; put 'put ''aW1lOmYsZGlzYWJsZWQ6ISF2fX1mdW5jdGlvbiBNaChjLGwsYSl7bGV0IGQ9Yy5nZXQobCk7cmV0dXJuIGR8fGMuc2V0KGwsZD1hKSxkfWZ1bmN0aW9uIG9oZShjKXtjb25zdCBsPWMuaW5kZXhPZigiOiIpO3JldHVybltjLnN1YnN0cmluZygxLGwpLGMuc2xpY2UobCsxKV19Y29uc3QgcVll''@;'; put 'put ''PXR5cGVvZiBkb2N1bWVudD4idSI/bnVsbDpkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7ZnVuY3Rpb24geUcoYyl7Y29uc3QgbD1jLnBhcmVudE5vZGV8fGMuaG9zdHx8bnVsbDtyZXR1cm4gbD09PXFZZT9udWxsOmx9bGV0IEk3PW51bGwsYWhlPSExO2Z1bmN0aW9uIHNoZShjLGwpe2Zvcig7''@;'; put 'put ''bDspe2lmKGw9PT1jKXJldHVybiEwO2w9eUcobCl9cmV0dXJuITF9ZnVuY3Rpb24gbGhlKGMsbCxhKXtpZihhKXJldHVybiBBcnJheS5mcm9tKGMucXVlcnlTZWxlY3RvckFsbChsKSk7Y29uc3QgZD1jLnF1ZXJ5U2VsZWN0b3IobCk7cmV0dXJuIGQ/W2RdOltdfWxldCBfRz0oKCk9PntjbGFz''@;'; put 'put ''cyBje3ZhbGlkYXRlU3R5bGVQcm9wZXJ0eShhKXtyZXR1cm4gZnVuY3Rpb24gSlllKGMpe0k3fHwoSTc9ZnVuY3Rpb24gUVllKCl7cmV0dXJuIHR5cGVvZiBkb2N1bWVudDwidSI/ZG9jdW1lbnQuYm9keTpudWxsfSgpfHx7fSxhaGU9ISFJNy5zdHlsZSYmIldlYmtpdEFwcGVhcmFuY2UiaW4g''@;'; put 'put ''STcuc3R5bGUpO2xldCBsPSEwO3JldHVybiBJNy5zdHlsZSYmIWZ1bmN0aW9uIFhZZShjKXtyZXR1cm4iZWJraXQiPT1jLnN1YnN0cmluZygxLDYpfShjKSYmKGw9YyBpbiBJNy5zdHlsZSwhbCYmYWhlJiYobD0iV2Via2l0IitjLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Muc2xpY2UoMSlp''@;'; put 'put ''biBJNy5zdHlsZSkpLGx9KGEpfW1hdGNoZXNFbGVtZW50KGEsZCl7cmV0dXJuITF9Y29udGFpbnNFbGVtZW50KGEsZCl7cmV0dXJuIHNoZShhLGQpfWdldFBhcmVudEVsZW1lbnQoYSl7cmV0dXJuIHlHKGEpfXF1ZXJ5KGEsZCxoKXtyZXR1cm4gbGhlKGEsZCxoKX1jb21wdXRlU3R5bGUoYSxk''@;'; put 'put ''LGgpe3JldHVybiBofHwiIn1hbmltYXRlKGEsZCxoLGYsdixNPVtdLEQpe3JldHVybiBuZXcgeXgoaCxmKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1''@;'; put 'put ''ZmFjfSl9fXJldHVybiBjfSkoKTtjbGFzcyB3R3tzdGF0aWN7dGhpcy5OT09QPW5ldyBfR319Y2xhc3MgQ0d7fWNvbnN0IHRHZT0xZTMsU0c9Im5nLWVudGVyIixsTz0ibmctbGVhdmUiLGNPPSJuZy10cmlnZ2VyIix1Tz0iLm5nLXRyaWdnZXIiLHVoZT0ibmctYW5pbWF0aW5nIixNRz0iLm5n''@;'; put 'put ''LWFuaW1hdGluZyI7ZnVuY3Rpb24gaGcoYyl7aWYoIm51bWJlciI9PXR5cGVvZiBjKXJldHVybiBjO2NvbnN0IGw9Yy5tYXRjaCgvXigtP1tcLlxkXSspKG0/cykvKTtyZXR1cm4hbHx8bC5sZW5ndGg8Mj8wOnhHKHBhcnNlRmxvYXQobFsxXSksbFsyXSl9ZnVuY3Rpb24geEcoYyxsKXtyZXR1''@;'; put 'put ''cm4icyI9PT1sP2MqdEdlOmN9ZnVuY3Rpb24gZE8oYyxsLGEpe3JldHVybiBjLmhhc093blByb3BlcnR5KCJkdXJhdGlvbiIpP2M6ZnVuY3Rpb24gckdlKGMsbCxhKXtsZXQgaCxmPTAsdj0iIjtpZigic3RyaW5nIj09dHlwZW9mIGMpe2NvbnN0IE09Yy5tYXRjaCgvXigtP1tcLlxkXSspKG0/''@;'; put 'put ''cykoPzpccysoLT9bXC5cZF0rKShtP3MpKT8oPzpccysoWy1hLXpdKyg/OlwoLis/XCkpPykpPyQvaSk7aWYobnVsbD09PU0pcmV0dXJuIGwucHVzaChyaGUoKSkse2R1cmF0aW9uOjAsZGVsYXk6MCxlYXNpbmc6IiJ9O2g9eEcocGFyc2VGbG9hdChNWzFdKSxNWzJdKTtjb25zdCBEPU1bM107''@;'; put 'put ''bnVsbCE9RCYmKGY9eEcocGFyc2VGbG9hdChEKSxNWzRdKSk7Y29uc3QgWj1NWzVdO1omJih2PVopfWVsc2UgaD1jO2lmKCFhKXtsZXQgTT0hMSxEPWwubGVuZ3RoO2g8MCYmKGwucHVzaChmdW5jdGlvbiBtWWUoKXtyZXR1cm4gbmV3IGVyKDMxMDAsITEpfSgpKSxNPSEwKSxmPDAmJihsLnB1''@;'; put 'put ''c2goZnVuY3Rpb24gdlllKCl7cmV0dXJuIG5ldyBlcigzMTAxLCExKX0oKSksTT0hMCksTSYmbC5zcGxpY2UoRCwwLHJoZSgpKX1yZXR1cm57ZHVyYXRpb246aCxkZWxheTpmLGVhc2luZzp2fX0oYyxsLGEpfWZ1bmN0aW9uIHlwKGMsbCxhKXtsLmZvckVhY2goKGQsaCk9Pntjb25zdCBmPVRH''@;'; put 'put ''KGgpO2EmJiFhLmhhcyhoKSYmYS5zZXQoaCxjLnN0eWxlW2ZdKSxjLnN0eWxlW2ZdPWR9KX1mdW5jdGlvbiBSNyhjLGwpe2wuZm9yRWFjaCgoYSxkKT0+e2NvbnN0IGg9VEcoZCk7Yy5zdHlsZVtoXT0iIn0pfWZ1bmN0aW9uIGVFKGMpe3JldHVybiBBcnJheS5pc0FycmF5KGMpPzE9PWMubGVu''@;'; put 'put ''Z3RoP2NbMF06ZnVuY3Rpb24gVk9lKGMsbD1udWxsKXtyZXR1cm57dHlwZTpBYS5TZXF1ZW5jZSxzdGVwczpjLG9wdGlvbnM6bH19KGMpOmN9Y29uc3QgRUc9bmV3IFJlZ0V4cCgie3tcXHMqKC4rPylcXHMqfX0iLCJnIik7ZnVuY3Rpb24gaGhlKGMpe2xldCBsPVtdO2lmKCJzdHJpbmciPT10''@;'; put 'put ''eXBlb2YgYyl7bGV0IGE7Zm9yKDthPUVHLmV4ZWMoYyk7KWwucHVzaChhWzFdKTtFRy5sYXN0SW5kZXg9MH1yZXR1cm4gbH1mdW5jdGlvbiB0RShjLGwsYSl7Y29uc3QgZD1gJHtjfWAsaD1kLnJlcGxhY2UoRUcsKGYsdik9PntsZXQgTT1sW3ZdO3JldHVybiBudWxsPT1NJiYoYS5wdXNoKGZ1''@;'; put 'put ''bmN0aW9uIHlZZShjKXtyZXR1cm4gbmV3IGVyKDMwMDMsITEpfSgpKSxNPSIiKSxNLnRvU3RyaW5nKCl9KTtyZXR1cm4gaD09ZD9jOmh9Y29uc3QgYUdlPS8tKyhbYS16MC05XSkvZztmdW5jdGlvbiBURyhjKXtyZXR1cm4gYy5yZXBsYWNlKGFHZSwoLi4ubCk9PmxbMV0udG9VcHBlckNhc2Uo''@;'; put 'put ''KSl9ZnVuY3Rpb24geGgoYyxsLGEpe3N3aXRjaChsLnR5cGUpe2Nhc2UgQWEuVHJpZ2dlcjpyZXR1cm4gYy52aXNpdFRyaWdnZXIobCxhKTtjYXNlIEFhLlN0YXRlOnJldHVybiBjLnZpc2l0U3RhdGUobCxhKTtjYXNlIEFhLlRyYW5zaXRpb246cmV0dXJuIGMudmlzaXRUcmFuc2l0aW9uKGws''@;'; put 'put ''YSk7Y2FzZSBBYS5TZXF1ZW5jZTpyZXR1cm4gYy52aXNpdFNlcXVlbmNlKGwsYSk7Y2FzZSBBYS5Hcm91cDpyZXR1cm4gYy52aXNpdEdyb3VwKGwsYSk7Y2FzZSBBYS5BbmltYXRlOnJldHVybiBjLnZpc2l0QW5pbWF0ZShsLGEpO2Nhc2UgQWEuS2V5ZnJhbWVzOnJldHVybiBjLnZpc2l0S2V5''@;'; put 'put ''ZnJhbWVzKGwsYSk7Y2FzZSBBYS5TdHlsZTpyZXR1cm4gYy52aXNpdFN0eWxlKGwsYSk7Y2FzZSBBYS5SZWZlcmVuY2U6cmV0dXJuIGMudmlzaXRSZWZlcmVuY2UobCxhKTtjYXNlIEFhLkFuaW1hdGVDaGlsZDpyZXR1cm4gYy52aXNpdEFuaW1hdGVDaGlsZChsLGEpO2Nhc2UgQWEuQW5pbWF0''@;'; put 'put ''ZVJlZjpyZXR1cm4gYy52aXNpdEFuaW1hdGVSZWYobCxhKTtjYXNlIEFhLlF1ZXJ5OnJldHVybiBjLnZpc2l0UXVlcnkobCxhKTtjYXNlIEFhLlN0YWdnZXI6cmV0dXJuIGMudmlzaXRTdGFnZ2VyKGwsYSk7ZGVmYXVsdDp0aHJvdyBmdW5jdGlvbiBfWWUoYyl7cmV0dXJuIG5ldyBlcigzMDA0''@;'; put 'put ''LCExKX0oKX19ZnVuY3Rpb24gQUcoYyxsKXtyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUoYylbbF19Y29uc3QgY0dlPW5ldyBTZXQoWyJ3aWR0aCIsImhlaWdodCIsIm1pbldpZHRoIiwibWluSGVpZ2h0IiwibWF4V2lkdGgiLCJtYXhIZWlnaHQiLCJsZWZ0IiwidG9wIiwiYm90dG9t''@;'; put 'put ''IiwicmlnaHQiLCJmb250U2l6ZSIsIm91dGxpbmVXaWR0aCIsIm91dGxpbmVPZmZzZXQiLCJwYWRkaW5nVG9wIiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nQm90dG9tIiwicGFkZGluZ1JpZ2h0IiwibWFyZ2luVG9wIiwibWFyZ2luTGVmdCIsIm1hcmdpbkJvdHRvbSIsIm1hcmdpblJpZ2h0Iiwi''@;'; put 'put ''Ym9yZGVyUmFkaXVzIiwiYm9yZGVyV2lkdGgiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlckxlZnRXaWR0aCIsImJvcmRlclJpZ2h0V2lkdGgiLCJib3JkZXJCb3R0b21XaWR0aCIsInRleHRJbmRlbnQiLCJwZXJzcGVjdGl2ZSJdKTtjbGFzcyBmaGUgZXh0ZW5kcyBDR3tub3JtYWxpemVQcm9w''@;'; put 'put ''ZXJ0eU5hbWUobCxhKXtyZXR1cm4gVEcobCl9bm9ybWFsaXplU3R5bGVWYWx1ZShsLGEsZCxoKXtsZXQgZj0iIjtjb25zdCB2PWQudG9TdHJpbmcoKS50cmltKCk7aWYoY0dlLmhhcyhhKSYmMCE9PWQmJiIwIiE9PWQpaWYoIm51bWJlciI9PXR5cGVvZiBkKWY9InB4IjtlbHNle2NvbnN0IE09''@;'; put 'put ''ZC5tYXRjaCgvXlsrLV0/W1xkXC5dKyhbYS16XSopJC8pO00mJjA9PU1bMV0ubGVuZ3RoJiZoLnB1c2goZnVuY3Rpb24gd1llKGMsbCl7cmV0dXJuIG5ldyBlcigzMDA1LCExKX0oKSl9cmV0dXJuIHYrZn19Y29uc3QgaE89IioiO2NvbnN0IGZPPW5ldyBTZXQoWyJ0cnVlIiwiMSJdKSxwTz1u''@;'; put 'put ''ZXcgU2V0KFsiZmFsc2UiLCIwIl0pO2Z1bmN0aW9uIHBoZShjLGwpe2NvbnN0IGE9Zk8uaGFzKGMpfHxwTy5oYXMoYyksZD1mTy5oYXMobCl8fHBPLmhhcyhsKTtyZXR1cm4oaCxmKT0+e2xldCB2PWM9PWhPfHxjPT1oLE09bD09aE98fGw9PWY7cmV0dXJuIXYmJmEmJiJib29sZWFuIj09dHlw''@;'; put 'put ''ZW9mIGgmJih2PWg/Zk8uaGFzKGMpOnBPLmhhcyhjKSksIU0mJmQmJiJib29sZWFuIj09dHlwZW9mIGYmJihNPWY/Zk8uaGFzKGwpOnBPLmhhcyhsKSksdiYmTX19Y29uc3QgZkdlPW5ldyBSZWdFeHAoInMqOnNlbGZzKiw/IiwiZyIpO2Z1bmN0aW9uIGtHKGMsbCxhLGQpe3JldHVybiBuZXcg''@;'; put 'put ''cEdlKGMpLmJ1aWxkKGwsYSxkKX1jbGFzcyBwR2V7Y29uc3RydWN0b3IobCl7dGhpcy5fZHJpdmVyPWx9YnVpbGQobCxhLGQpe2NvbnN0IGg9bmV3IHZHZShhKTtyZXR1cm4gdGhpcy5fcmVzZXRDb250ZXh0U3R5bGVUaW1pbmdTdGF0ZShoKSx4aCh0aGlzLGVFKGwpLGgpfV9yZXNldENvbnRl''@;'; put 'put ''eHRTdHlsZVRpbWluZ1N0YXRlKGwpe2wuY3VycmVudFF1ZXJ5U2VsZWN0b3I9IiIsbC5jb2xsZWN0ZWRTdHlsZXM9bmV3IE1hcCxsLmNvbGxlY3RlZFN0eWxlcy5zZXQoIiIsbmV3IE1hcCksbC5jdXJyZW50VGltZT0wfXZpc2l0VHJpZ2dlcihsLGEpe2xldCBkPWEucXVlcnlDb3VudD0wLGg9''@;'; put 'put ''YS5kZXBDb3VudD0wO2NvbnN0IGY9W10sdj1bXTtyZXR1cm4iQCI9PWwubmFtZS5jaGFyQXQoMCkmJmEuZXJyb3JzLnB1c2goZnVuY3Rpb24gQ1llKCl7cmV0dXJuIG5ldyBlcigzMDA2LCExKX0oKSksbC5kZWZpbml0aW9ucy5mb3JFYWNoKE09PntpZih0aGlzLl9yZXNldENvbnRleHRTdHls''@;'; put 'put ''ZVRpbWluZ1N0YXRlKGEpLE0udHlwZT09QWEuU3RhdGUpe2NvbnN0IEQ9TSxaPUQubmFtZTtaLnRvU3RyaW5nKCkuc3BsaXQoL1xzKixccyovKS5mb3JFYWNoKG5lPT57RC5uYW1lPW5lLGYucHVzaCh0aGlzLnZpc2l0U3RhdGUoRCxhKSl9KSxELm5hbWU9Wn1lbHNlIGlmKE0udHlwZT09QWEu''@;'; put 'put ''VHJhbnNpdGlvbil7Y29uc3QgRD10aGlzLnZpc2l0VHJhbnNpdGlvbihNLGEpO2QrPUQucXVlcnlDb3VudCxoKz1ELmRlcENvdW50LHYucHVzaChEKX1lbHNlIGEuZXJyb3JzLnB1c2goZnVuY3Rpb24gU1llKCl7cmV0dXJuIG5ldyBlcigzMDA3LCExKX0oKSl9KSx7dHlwZTpBYS5UcmlnZ2Vy''@;'; put 'put ''LG5hbWU6bC5uYW1lLHN0YXRlczpmLHRyYW5zaXRpb25zOnYscXVlcnlDb3VudDpkLGRlcENvdW50Omgsb3B0aW9uczpudWxsfX12aXNpdFN0YXRlKGwsYSl7Y29uc3QgZD10aGlzLnZpc2l0U3R5bGUobC5zdHlsZXMsYSksaD1sLm9wdGlvbnMmJmwub3B0aW9ucy5wYXJhbXN8fG51bGw7aWYo''@;'; put 'put ''ZC5jb250YWluc0R5bmFtaWNTdHlsZXMpe2NvbnN0IGY9bmV3IFNldCx2PWh8fHt9O2Quc3R5bGVzLmZvckVhY2goTT0+e00gaW5zdGFuY2VvZiBNYXAmJk0uZm9yRWFjaChEPT57aGhlKEQpLmZvckVhY2goWj0+e3YuaGFzT3duUHJvcGVydHkoWil8fGYuYWRkKFopfSl9KX0pLGYuc2l6ZSYm''@;'; put 'put ''YS5lcnJvcnMucHVzaChmdW5jdGlvbiBNWWUoYyxsKXtyZXR1cm4gbmV3IGVyKDMwMDgsITEpfSgwLGYudmFsdWVzKCkpKX1yZXR1cm57dHlwZTpBYS5TdGF0ZSxuYW1lOmwubmFtZSxzdHlsZTpkLG9wdGlvbnM6aD97cGFyYW1zOmh9Om51bGx9fXZpc2l0VHJhbnNpdGlvbihsLGEpe2EucXVl''@;'; put 'put ''cnlDb3VudD0wLGEuZGVwQ291bnQ9MDtjb25zdCBkPXhoKHRoaXMsZUUobC5hbmltYXRpb24pLGEpLGg9ZnVuY3Rpb24gdUdlKGMsbCl7Y29uc3QgYT1bXTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGM/Yy5zcGxpdCgvXHMqLFxzKi8pLmZvckVhY2goZD0+ZnVuY3Rpb24gZEdlKGMsbCxhKXtp''@;'; put 'put ''ZigiOiI9PWNbMF0pe2NvbnN0IEQ9ZnVuY3Rpb24gaEdlKGMsbCl7c3dpdGNoKGMpe2Nhc2UiOmVudGVyIjpyZXR1cm4idm9pZCA9PiAqIjtjYXNlIjpsZWF2ZSI6cmV0dXJuIiogPT4gdm9pZCI7Y2FzZSI6aW5jcmVtZW50IjpyZXR1cm4oYSxkKT0+cGFyc2VGbG9hdChkKT5wYXJzZUZsb2F0''@;'; put 'put ''KGEpO2Nhc2UiOmRlY3JlbWVudCI6cmV0dXJuKGEsZCk9PnBhcnNlRmxvYXQoZCk8cGFyc2VGbG9hdChhKTtkZWZhdWx0OnJldHVybiBsLnB1c2goZnVuY3Rpb24gT1llKGMpe3JldHVybiBuZXcgZXIoMzAxNiwhMSl9KCkpLCIqID0+ICoifX0oYyxhKTtpZigiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''RClyZXR1cm4gdm9pZCBsLnB1c2goRCk7Yz1EfWNvbnN0IGQ9Yy5tYXRjaCgvXihcKnxbLVx3XSspXHMqKDw/Wz0tXT4pXHMqKFwqfFstXHddKykkLyk7aWYobnVsbD09ZHx8ZC5sZW5ndGg8NClyZXR1cm4gYS5wdXNoKGZ1bmN0aW9uIExZZShjKXtyZXR1cm4gbmV3IGVyKDMwMTUsITEpfSgp''@;'; put 'put ''KSxsO2NvbnN0IGg9ZFsxXSxmPWRbMl0sdj1kWzNdO2wucHVzaChwaGUoaCx2KSksIjwiPT1mWzBdJiYoaCE9aE98fHYhPWhPKSYmbC5wdXNoKHBoZSh2LGgpKX0oZCxhLGwpKTphLnB1c2goYyksYX0obC5leHByLGEuZXJyb3JzKTtyZXR1cm57dHlwZTpBYS5UcmFuc2l0aW9uLG1hdGNoZXJz''@;'; put 'put ''OmgsYW5pbWF0aW9uOmQscXVlcnlDb3VudDphLnF1ZXJ5Q291bnQsZGVwQ291bnQ6YS5kZXBDb3VudCxvcHRpb25zOkw3KGwub3B0aW9ucyl9fXZpc2l0U2VxdWVuY2UobCxhKXtyZXR1cm57dHlwZTpBYS5TZXF1ZW5jZSxzdGVwczpsLnN0ZXBzLm1hcChkPT54aCh0aGlzLGQsYSkpLG9wdGlv''@;'; put 'put ''bnM6TDcobC5vcHRpb25zKX19dmlzaXRHcm91cChsLGEpe2NvbnN0IGQ9YS5jdXJyZW50VGltZTtsZXQgaD0wO2NvbnN0IGY9bC5zdGVwcy5tYXAodj0+e2EuY3VycmVudFRpbWU9ZDtjb25zdCBNPXhoKHRoaXMsdixhKTtyZXR1cm4gaD1NYXRoLm1heChoLGEuY3VycmVudFRpbWUpLE19KTty''@;'; put 'put ''ZXR1cm4gYS5jdXJyZW50VGltZT1oLHt0eXBlOkFhLkdyb3VwLHN0ZXBzOmYsb3B0aW9uczpMNyhsLm9wdGlvbnMpfX12aXNpdEFuaW1hdGUobCxhKXtjb25zdCBkPWZ1bmN0aW9uIHlHZShjLGwpe2lmKGMuaGFzT3duUHJvcGVydHkoImR1cmF0aW9uIikpcmV0dXJuIGM7aWYoIm51bWJlciI9''@;'; put 'put ''PXR5cGVvZiBjKXJldHVybiBERyhkTyhjLGwpLmR1cmF0aW9uLDAsIiIpO2NvbnN0IGE9YztpZihhLnNwbGl0KC9ccysvKS5zb21lKGY9PiJ7Ij09Zi5jaGFyQXQoMCkmJiJ7Ij09Zi5jaGFyQXQoMSkpKXtjb25zdCBmPURHKDAsMCwiIik7cmV0dXJuIGYuZHluYW1pYz0hMCxmLnN0clZhbHVl''@;'; put 'put ''PWEsZn1jb25zdCBoPWRPKGEsbCk7cmV0dXJuIERHKGguZHVyYXRpb24saC5kZWxheSxoLmVhc2luZyl9KGwudGltaW5ncyxhLmVycm9ycyk7YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9ZDtsZXQgaCxmPWwuc3R5bGVzP2wuc3R5bGVzOmxzKHt9KTtpZihmLnR5cGU9PUFhLktleWZyYW1lcylo''@;'; put 'put ''PXRoaXMudmlzaXRLZXlmcmFtZXMoZixhKTtlbHNle2xldCB2PWwuc3R5bGVzLE09ITE7aWYoIXYpe009ITA7Y29uc3QgWj17fTtkLmVhc2luZyYmKFouZWFzaW5nPWQuZWFzaW5nKSx2PWxzKFopfWEuY3VycmVudFRpbWUrPWQuZHVyYXRpb24rZC5kZWxheTtjb25zdCBEPXRoaXMudmlzaXRT''@;'; put 'put ''dHlsZSh2LGEpO0QuaXNFbXB0eVN0ZXA9TSxoPUR9cmV0dXJuIGEuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwse3R5cGU6QWEuQW5pbWF0ZSx0aW1pbmdzOmQsc3R5bGU6aCxvcHRpb25zOm51bGx9fXZpc2l0U3R5bGUobCxhKXtjb25zdCBkPXRoaXMuX21ha2VTdHlsZUFzdChsLGEpO3Jl''@;'; put 'put ''dHVybiB0aGlzLl92YWxpZGF0ZVN0eWxlQXN0KGQsYSksZH1fbWFrZVN0eWxlQXN0KGwsYSl7Y29uc3QgZD1bXSxoPUFycmF5LmlzQXJyYXkobC5zdHlsZXMpP2wuc3R5bGVzOltsLnN0eWxlc107Zm9yKGxldCBNIG9mIGgpInN0cmluZyI9PXR5cGVvZiBNP009PT10Zz9kLnB1c2goTSk6YS5l''@;'; put 'put ''cnJvcnMucHVzaChuZXcgZXIoMzAwMiwhMSkpOmQucHVzaChuZXcgTWFwKE9iamVjdC5lbnRyaWVzKE0pKSk7bGV0IGY9ITEsdj1udWxsO3JldHVybiBkLmZvckVhY2goTT0+e2lmKE0gaW5zdGFuY2VvZiBNYXAmJihNLmhhcygiZWFzaW5nIikmJih2PU0uZ2V0KCJlYXNpbmciKSxNLmRlbGV0''@;'; put 'put ''ZSgiZWFzaW5nIikpLCFmKSlmb3IobGV0IEQgb2YgTS52YWx1ZXMoKSlpZihELnRvU3RyaW5nKCkuaW5kZXhPZigie3siKT49MCl7Zj0hMDticmVha319KSx7dHlwZTpBYS5TdHlsZSxzdHlsZXM6ZCxlYXNpbmc6dixvZmZzZXQ6bC5vZmZzZXQsY29udGFpbnNEeW5hbWljU3R5bGVzOmYsb3B0''@;'; put 'put ''aW9uczpudWxsfX1fdmFsaWRhdGVTdHlsZUFzdChsLGEpe2NvbnN0IGQ9YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M7bGV0IGg9YS5jdXJyZW50VGltZSxmPWEuY3VycmVudFRpbWU7ZCYmZj4wJiYoZi09ZC5kdXJhdGlvbitkLmRlbGF5KSxsLnN0eWxlcy5mb3JFYWNoKHY9Pnsic3RyaW5nIiE9''@;'; put 'put ''dHlwZW9mIHYmJnYuZm9yRWFjaCgoTSxEKT0+e2NvbnN0IFo9YS5jb2xsZWN0ZWRTdHlsZXMuZ2V0KGEuY3VycmVudFF1ZXJ5U2VsZWN0b3IpLG5lPVouZ2V0KEQpO2xldCBjZT0hMDtuZSYmKGYhPWgmJmY+PW5lLnN0YXJ0VGltZSYmaDw9bmUuZW5kVGltZSYmKGEuZXJyb3JzLnB1c2goZnVu''@;'; put 'put ''Y3Rpb24gRVllKGMsbCxhLGQsaCl7cmV0dXJuIG5ldyBlcigzMDEwLCExKX0oKSksY2U9ITEpLGY9bmUuc3RhcnRUaW1lKSxjZSYmWi5zZXQoRCx7c3RhcnRUaW1lOmYsZW5kVGltZTpofSksYS5vcHRpb25zJiZmdW5jdGlvbiBvR2UoYyxsLGEpe2NvbnN0IGQ9bC5wYXJhbXN8fHt9LGg9aGhl''@;'; put 'put ''KGMpO2gubGVuZ3RoJiZoLmZvckVhY2goZj0+e2QuaGFzT3duUHJvcGVydHkoZil8fGEucHVzaChmdW5jdGlvbiBiWWUoYyl7cmV0dXJuIG5ldyBlcigzMDAxLCExKX0oKSl9KX0oTSxhLm9wdGlvbnMsYS5lcnJvcnMpfSl9KX12aXNpdEtleWZyYW1lcyhsLGEpe2NvbnN0IGQ9e3R5cGU6QWEu''@;'; put 'put ''S2V5ZnJhbWVzLHN0eWxlczpbXSxvcHRpb25zOm51bGx9O2lmKCFhLmN1cnJlbnRBbmltYXRlVGltaW5ncylyZXR1cm4gYS5lcnJvcnMucHVzaChmdW5jdGlvbiBUWWUoKXtyZXR1cm4gbmV3IGVyKDMwMTEsITEpfSgpKSxkO2xldCBmPTA7Y29uc3Qgdj1bXTtsZXQgTT0hMSxEPSExLFo9MDtj''@;'; put 'put ''b25zdCBuZT1sLnN0ZXBzLm1hcChsdD0+e2NvbnN0IG10PXRoaXMuX21ha2VTdHlsZUFzdChsdCxhKTtsZXQgSnQ9bnVsbCE9bXQub2Zmc2V0P210Lm9mZnNldDpmdW5jdGlvbiBiR2UoYyl7aWYoInN0cmluZyI9PXR5cGVvZiBjKXJldHVybiBudWxsO2xldCBsPW51bGw7aWYoQXJyYXkuaXNB''@;'; put 'put ''cnJheShjKSljLmZvckVhY2goYT0+e2lmKGEgaW5zdGFuY2VvZiBNYXAmJmEuaGFzKCJvZmZzZXQiKSl7Y29uc3QgZD1hO2w9cGFyc2VGbG9hdChkLmdldCgib2Zmc2V0IikpLGQuZGVsZXRlKCJvZmZzZXQiKX19KTtlbHNlIGlmKGMgaW5zdGFuY2VvZiBNYXAmJmMuaGFzKCJvZmZzZXQiKSl7''@;'; put 'put ''Y29uc3QgYT1jO2w9cGFyc2VGbG9hdChhLmdldCgib2Zmc2V0IikpLGEuZGVsZXRlKCJvZmZzZXQiKX1yZXR1cm4gbH0obXQuc3R5bGVzKSx5bj0wO3JldHVybiBudWxsIT1KdCYmKGYrKyx5bj1tdC5vZmZzZXQ9SnQpLEQ9RHx8eW48MHx8eW4+MSxNPU18fHluPFosWj15bix2LnB1c2goeW4p''@;'; put 'put ''LG10fSk7RCYmYS5lcnJvcnMucHVzaChmdW5jdGlvbiBBWWUoKXtyZXR1cm4gbmV3IGVyKDMwMTIsITEpfSgpKSxNJiZhLmVycm9ycy5wdXNoKGZ1bmN0aW9uIGtZZSgpe3JldHVybiBuZXcgZXIoMzIwMCwhMSl9KCkpO2NvbnN0IGNlPWwuc3RlcHMubGVuZ3RoO2xldCBiZT0wO2Y+MCYmZjxj''@;'; put 'put ''ZT9hLmVycm9ycy5wdXNoKGZ1bmN0aW9uIERZZSgpe3JldHVybiBuZXcgZXIoMzIwMiwhMSl9KCkpOjA9PWYmJihiZT0xLyhjZS0xKSk7Y29uc3QgRWU9Y2UtMSxCZT1hLmN1cnJlbnRUaW1lLHFlPWEuY3VycmVudEFuaW1hdGVUaW1pbmdzLG50PXFlLmR1cmF0aW9uO3JldHVybiBuZS5mb3JF''@;'; put 'put ''YWNoKChsdCxtdCk9Pntjb25zdCBKdD1iZT4wP210PT1FZT8xOmJlKm10OnZbbXRdLHluPUp0Km50O2EuY3VycmVudFRpbWU9QmUrcWUuZGVsYXkreW4scWUuZHVyYXRpb249eW4sdGhpcy5fdmFsaWRhdGVTdHlsZUFzdChsdCxhKSxsdC5vZmZzZXQ9SnQsZC5zdHlsZXMucHVzaChsdCl9KSxk''@;'; put 'put ''fXZpc2l0UmVmZXJlbmNlKGwsYSl7cmV0dXJue3R5cGU6QWEuUmVmZXJlbmNlLGFuaW1hdGlvbjp4aCh0aGlzLGVFKGwuYW5pbWF0aW9uKSxhKSxvcHRpb25zOkw3KGwub3B0aW9ucyl9fXZpc2l0QW5pbWF0ZUNoaWxkKGwsYSl7cmV0dXJuIGEuZGVwQ291bnQrKyx7dHlwZTpBYS5BbmltYXRl''@;'; put 'put ''Q2hpbGQsb3B0aW9uczpMNyhsLm9wdGlvbnMpfX12aXNpdEFuaW1hdGVSZWYobCxhKXtyZXR1cm57dHlwZTpBYS5BbmltYXRlUmVmLGFuaW1hdGlvbjp0aGlzLnZpc2l0UmVmZXJlbmNlKGwuYW5pbWF0aW9uLGEpLG9wdGlvbnM6TDcobC5vcHRpb25zKX19dmlzaXRRdWVyeShsLGEpe2NvbnN0''@;'; put 'put ''IGQ9YS5jdXJyZW50UXVlcnlTZWxlY3RvcixoPWwub3B0aW9uc3x8e307YS5xdWVyeUNvdW50KyssYS5jdXJyZW50UXVlcnk9bDtjb25zdFtmLHZdPWZ1bmN0aW9uIGdHZShjKXtjb25zdCBsPSEhYy5zcGxpdCgvXHMqLFxzKi8pLmZpbmQoYT0+IjpzZWxmIj09YSk7cmV0dXJuIGwmJihjPWMu''@;'; put 'put ''cmVwbGFjZShmR2UsIiIpKSxjPWMucmVwbGFjZSgvQFwqL2csdU8pLnJlcGxhY2UoL0BcdysvZyxhPT51TysiLSIrYS5zbGljZSgxKSkucmVwbGFjZSgvOmFuaW1hdGluZy9nLE1HKSxbYyxsXX0obC5zZWxlY3Rvcik7YS5jdXJyZW50UXVlcnlTZWxlY3Rvcj1kLmxlbmd0aD9kKyIgIitmOmYs''@;'; put 'put ''TWgoYS5jb2xsZWN0ZWRTdHlsZXMsYS5jdXJyZW50UXVlcnlTZWxlY3RvcixuZXcgTWFwKTtjb25zdCBNPXhoKHRoaXMsZUUobC5hbmltYXRpb24pLGEpO3JldHVybiBhLmN1cnJlbnRRdWVyeT1udWxsLGEuY3VycmVudFF1ZXJ5U2VsZWN0b3I9ZCx7dHlwZTpBYS5RdWVyeSxzZWxlY3Rvcjpm''@;'; put 'put ''LGxpbWl0OmgubGltaXR8fDAsb3B0aW9uYWw6ISFoLm9wdGlvbmFsLGluY2x1ZGVTZWxmOnYsYW5pbWF0aW9uOk0sb3JpZ2luYWxTZWxlY3RvcjpsLnNlbGVjdG9yLG9wdGlvbnM6TDcobC5vcHRpb25zKX19dmlzaXRTdGFnZ2VyKGwsYSl7YS5jdXJyZW50UXVlcnl8fGEuZXJyb3JzLnB1c2go''@;'; put 'put ''ZnVuY3Rpb24gSVllKCl7cmV0dXJuIG5ldyBlcigzMDEzLCExKX0oKSk7Y29uc3QgZD0iZnVsbCI9PT1sLnRpbWluZ3M/e2R1cmF0aW9uOjAsZGVsYXk6MCxlYXNpbmc6ImZ1bGwifTpkTyhsLnRpbWluZ3MsYS5lcnJvcnMsITApO3JldHVybnt0eXBlOkFhLlN0YWdnZXIsYW5pbWF0aW9uOnho''@;'; put 'put ''KHRoaXMsZUUobC5hbmltYXRpb24pLGEpLHRpbWluZ3M6ZCxvcHRpb25zOm51bGx9fX1jbGFzcyB2R2V7Y29uc3RydWN0b3IobCl7dGhpcy5lcnJvcnM9bCx0aGlzLnF1ZXJ5Q291bnQ9MCx0aGlzLmRlcENvdW50PTAsdGhpcy5jdXJyZW50VHJhbnNpdGlvbj1udWxsLHRoaXMuY3VycmVudFF1''@;'; put 'put ''ZXJ5PW51bGwsdGhpcy5jdXJyZW50UXVlcnlTZWxlY3Rvcj1udWxsLHRoaXMuY3VycmVudEFuaW1hdGVUaW1pbmdzPW51bGwsdGhpcy5jdXJyZW50VGltZT0wLHRoaXMuY29sbGVjdGVkU3R5bGVzPW5ldyBNYXAsdGhpcy5vcHRpb25zPW51bGwsdGhpcy51bnN1cHBvcnRlZENTU1Byb3BlcnRp''@;'; put 'put ''ZXNGb3VuZD1uZXcgU2V0fX1mdW5jdGlvbiBMNyhjKXtyZXR1cm4gYz8oYz17Li4uY30pLnBhcmFtcyYmKGMucGFyYW1zPWZ1bmN0aW9uIG1HZShjKXtyZXR1cm4gYz97Li4uY306bnVsbH0oYy5wYXJhbXMpKTpjPXt9LGN9ZnVuY3Rpb24gREcoYyxsLGEpe3JldHVybntkdXJhdGlvbjpjLGRl''@;'; put 'put ''bGF5OmwsZWFzaW5nOmF9fWZ1bmN0aW9uIElHKGMsbCxhLGQsaCxmLHY9bnVsbCxNPSExKXtyZXR1cm57dHlwZToxLGVsZW1lbnQ6YyxrZXlmcmFtZXM6bCxwcmVTdHlsZVByb3BzOmEscG9zdFN0eWxlUHJvcHM6ZCxkdXJhdGlvbjpoLGRlbGF5OmYsdG90YWxUaW1lOmgrZixlYXNpbmc6dixz''@;'; put 'put ''dWJUaW1lbGluZTpNfX1jbGFzcyBnT3tjb25zdHJ1Y3Rvcigpe3RoaXMuX21hcD1uZXcgTWFwfWdldChsKXtyZXR1cm4gdGhpcy5fbWFwLmdldChsKXx8W119YXBwZW5kKGwsYSl7bGV0IGQ9dGhpcy5fbWFwLmdldChsKTtkfHx0aGlzLl9tYXAuc2V0KGwsZD1bXSksZC5wdXNoKC4uLmEpfWhh''@;'; put 'put ''cyhsKXtyZXR1cm4gdGhpcy5fbWFwLmhhcyhsKX1jbGVhcigpe3RoaXMuX21hcC5jbGVhcigpfX1jb25zdCBDR2U9bmV3IFJlZ0V4cCgiOmVudGVyIiwiZyIpLE1HZT1uZXcgUmVnRXhwKCI6bGVhdmUiLCJnIik7ZnVuY3Rpb24gUkcoYyxsLGEsZCxoLGY9bmV3IE1hcCx2PW5ldyBNYXAsTSxE''@;'; put 'put ''LFo9W10pe3JldHVybihuZXcgeEdlKS5idWlsZEtleWZyYW1lcyhjLGwsYSxkLGgsZix2LE0sRCxaKX1jbGFzcyB4R2V7YnVpbGRLZXlmcmFtZXMobCxhLGQsaCxmLHYsTSxELFosbmU9W10pe1o9Wnx8bmV3IGdPO2NvbnN0IGNlPW5ldyBMRyhsLGEsWixoLGYsbmUsW10pO2NlLm9wdGlvbnM9''@;'; put 'put ''RDtjb25zdCBiZT1ELmRlbGF5P2hnKEQuZGVsYXkpOjA7Y2UuY3VycmVudFRpbWVsaW5lLmRlbGF5TmV4dFN0ZXAoYmUpLGNlLmN1cnJlbnRUaW1lbGluZS5zZXRTdHlsZXMoW3ZdLG51bGwsY2UuZXJyb3JzLEQpLHhoKHRoaXMsZCxjZSk7Y29uc3QgRWU9Y2UudGltZWxpbmVzLmZpbHRlcihC''@;'; put 'put ''ZT0+QmUuY29udGFpbnNBbmltYXRpb24oKSk7aWYoRWUubGVuZ3RoJiZNLnNpemUpe2xldCBCZTtmb3IobGV0IHFlPUVlLmxlbmd0aC0xO3FlPj0wO3FlLS0pe2NvbnN0IG50PUVlW3FlXTtpZihudC5lbGVtZW50PT09YSl7QmU9bnQ7YnJlYWt9fUJlJiYhQmUuYWxsb3dPbmx5VGltZWxpbmVT''@;'; put 'put ''dHlsZXMoKSYmQmUuc2V0U3R5bGVzKFtNXSxudWxsLGNlLmVycm9ycyxEKX1yZXR1cm4gRWUubGVuZ3RoP0VlLm1hcChCZT0+QmUuYnVpbGRLZXlmcmFtZXMoKSk6W0lHKGEsW10sW10sW10sMCxiZSwiIiwhMSldfXZpc2l0VHJpZ2dlcihsLGEpe312aXNpdFN0YXRlKGwsYSl7fXZpc2l0VHJh''@;'; put 'put ''bnNpdGlvbihsLGEpe312aXNpdEFuaW1hdGVDaGlsZChsLGEpe2NvbnN0IGQ9YS5zdWJJbnN0cnVjdGlvbnMuZ2V0KGEuZWxlbWVudCk7aWYoZCl7Y29uc3QgaD1hLmNyZWF0ZVN1YkNvbnRleHQobC5vcHRpb25zKSxmPWEuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLHY9dGhpcy5fdmlz''@;'; put 'put ''aXRTdWJJbnN0cnVjdGlvbnMoZCxoLGgub3B0aW9ucyk7ZiE9diYmYS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUodil9YS5wcmV2aW91c05vZGU9bH12aXNpdEFuaW1hdGVSZWYobCxhKXtjb25zdCBkPWEuY3JlYXRlU3ViQ29udGV4dChsLm9wdGlvbnMpO2QudHJhbnNmb3JtSW50b05ld1Rp''@;'; put 'put ''bWVsaW5lKCksdGhpcy5fYXBwbHlBbmltYXRpb25SZWZEZWxheXMoW2wub3B0aW9ucyxsLmFuaW1hdGlvbi5vcHRpb25zXSxhLGQpLHRoaXMudmlzaXRSZWZlcmVuY2UobC5hbmltYXRpb24sZCksYS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoZC5jdXJyZW50VGltZWxpbmUuY3VycmVudFRp''@;'; put 'put ''bWUpLGEucHJldmlvdXNOb2RlPWx9X2FwcGx5QW5pbWF0aW9uUmVmRGVsYXlzKGwsYSxkKXtmb3IoY29uc3QgaCBvZiBsKXtjb25zdCBmPWg/LmRlbGF5O2lmKGYpe2NvbnN0IHY9Im51bWJlciI9PXR5cGVvZiBmP2Y6aGcodEUoZixoPy5wYXJhbXM/P3t9LGEuZXJyb3JzKSk7ZC5kZWxheU5l''@;'; put 'put ''eHRTdGVwKHYpfX19X3Zpc2l0U3ViSW5zdHJ1Y3Rpb25zKGwsYSxkKXtsZXQgZj1hLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZTtjb25zdCB2PW51bGwhPWQuZHVyYXRpb24/aGcoZC5kdXJhdGlvbik6bnVsbCxNPW51bGwhPWQuZGVsYXk/aGcoZC5kZWxheSk6bnVsbDtyZXR1cm4gMCE9''@;'; put 'put ''PXYmJmwuZm9yRWFjaChEPT57Y29uc3QgWj1hLmFwcGVuZEluc3RydWN0aW9uVG9UaW1lbGluZShELHYsTSk7Zj1NYXRoLm1heChmLFouZHVyYXRpb24rWi5kZWxheSl9KSxmfXZpc2l0UmVmZXJlbmNlKGwsYSl7YS51cGRhdGVPcHRpb25zKGwub3B0aW9ucywhMCkseGgodGhpcyxsLmFuaW1h''@;'; put 'put ''dGlvbixhKSxhLnByZXZpb3VzTm9kZT1sfXZpc2l0U2VxdWVuY2UobCxhKXtjb25zdCBkPWEuc3ViQ29udGV4dENvdW50O2xldCBoPWE7Y29uc3QgZj1sLm9wdGlvbnM7aWYoZiYmKGYucGFyYW1zfHxmLmRlbGF5KSYmKGg9YS5jcmVhdGVTdWJDb250ZXh0KGYpLGgudHJhbnNmb3JtSW50b05l''@;'; put 'put ''d1RpbWVsaW5lKCksbnVsbCE9Zi5kZWxheSkpe2gucHJldmlvdXNOb2RlLnR5cGU9PUFhLlN0eWxlJiYoaC5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCksaC5wcmV2aW91c05vZGU9bU8pO2NvbnN0IHY9aGcoZi5kZWxheSk7aC5kZWxheU5leHRTdGVwKHYpfWwuc3Rl''@;'; put 'put ''cHMubGVuZ3RoJiYobC5zdGVwcy5mb3JFYWNoKHY9PnhoKHRoaXMsdixoKSksaC5jdXJyZW50VGltZWxpbmUuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksaC5zdWJDb250ZXh0Q291bnQ+ZCYmaC50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoKSksYS5wcmV2aW91c05vZGU9bH12aXNpdEdyb3Vw''@;'; put 'put ''KGwsYSl7Y29uc3QgZD1bXTtsZXQgaD1hLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZTtjb25zdCBmPWwub3B0aW9ucyYmbC5vcHRpb25zLmRlbGF5P2hnKGwub3B0aW9ucy5kZWxheSk6MDtsLnN0ZXBzLmZvckVhY2godj0+e2NvbnN0IE09YS5jcmVhdGVTdWJDb250ZXh0KGwub3B0aW9u''@;'; put 'put ''cyk7ZiYmTS5kZWxheU5leHRTdGVwKGYpLHhoKHRoaXMsdixNKSxoPU1hdGgubWF4KGgsTS5jdXJyZW50VGltZWxpbmUuY3VycmVudFRpbWUpLGQucHVzaChNLmN1cnJlbnRUaW1lbGluZSl9KSxkLmZvckVhY2godj0+YS5jdXJyZW50VGltZWxpbmUubWVyZ2VUaW1lbGluZUNvbGxlY3RlZFN0''@;'; put 'put ''eWxlcyh2KSksYS50cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUoaCksYS5wcmV2aW91c05vZGU9bH1fdmlzaXRUaW1pbmcobCxhKXtpZihsLmR5bmFtaWMpe2NvbnN0IGQ9bC5zdHJWYWx1ZTtyZXR1cm4gZE8oYS5wYXJhbXM/dEUoZCxhLnBhcmFtcyxhLmVycm9ycyk6ZCxhLmVycm9ycyl9cmV0''@;'; put 'put ''dXJue2R1cmF0aW9uOmwuZHVyYXRpb24sZGVsYXk6bC5kZWxheSxlYXNpbmc6bC5lYXNpbmd9fXZpc2l0QW5pbWF0ZShsLGEpe2NvbnN0IGQ9YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9dGhpcy5fdmlzaXRUaW1pbmcobC50aW1pbmdzLGEpLGg9YS5jdXJyZW50VGltZWxpbmU7ZC5kZWxheSYm''@;'; put 'put ''KGEuaW5jcmVtZW50VGltZShkLmRlbGF5KSxoLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKTtjb25zdCBmPWwuc3R5bGU7Zi50eXBlPT1BYS5LZXlmcmFtZXM/dGhpcy52aXNpdEtleWZyYW1lcyhmLGEpOihhLmluY3JlbWVudFRpbWUoZC5kdXJhdGlvbiksdGhpcy52aXNpdFN0eWxlKGYsYSks''@;'; put 'put ''aC5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSksYS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M9bnVsbCxhLnByZXZpb3VzTm9kZT1sfXZpc2l0U3R5bGUobCxhKXtjb25zdCBkPWEuY3VycmVudFRpbWVsaW5lLGg9YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3M7IWgmJmQuaGFzQ3VycmVudFN0eWxlUHJv''@;'; put 'put ''cGVydGllcygpJiZkLmZvcndhcmRGcmFtZSgpO2NvbnN0IGY9aCYmaC5lYXNpbmd8fGwuZWFzaW5nO2wuaXNFbXB0eVN0ZXA/ZC5hcHBseUVtcHR5U3RlcChmKTpkLnNldFN0eWxlcyhsLnN0eWxlcyxmLGEuZXJyb3JzLGEub3B0aW9ucyksYS5wcmV2aW91c05vZGU9bH12aXNpdEtleWZyYW1l''@;'; put 'put ''cyhsLGEpe2NvbnN0IGQ9YS5jdXJyZW50QW5pbWF0ZVRpbWluZ3MsaD1hLmN1cnJlbnRUaW1lbGluZS5kdXJhdGlvbixmPWQuZHVyYXRpb24sTT1hLmNyZWF0ZVN1YkNvbnRleHQoKS5jdXJyZW50VGltZWxpbmU7TS5lYXNpbmc9ZC5lYXNpbmcsbC5zdHlsZXMuZm9yRWFjaChEPT57TS5mb3J3''@;'; put 'put ''YXJkVGltZSgoRC5vZmZzZXR8fDApKmYpLE0uc2V0U3R5bGVzKEQuc3R5bGVzLEQuZWFzaW5nLGEuZXJyb3JzLGEub3B0aW9ucyksTS5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKX0pLGEuY3VycmVudFRpbWVsaW5lLm1lcmdlVGltZWxpbmVDb2xsZWN0ZWRTdHlsZXMoTSksYS50cmFuc2Zvcm1J''@;'; put 'put ''bnRvTmV3VGltZWxpbmUoaCtmKSxhLnByZXZpb3VzTm9kZT1sfXZpc2l0UXVlcnkobCxhKXtjb25zdCBkPWEuY3VycmVudFRpbWVsaW5lLmN1cnJlbnRUaW1lLGg9bC5vcHRpb25zfHx7fSxmPWguZGVsYXk/aGcoaC5kZWxheSk6MDtmJiYoYS5wcmV2aW91c05vZGUudHlwZT09PUFhLlN0eWxl''@;'; put 'put ''fHwwPT1kJiZhLmN1cnJlbnRUaW1lbGluZS5oYXNDdXJyZW50U3R5bGVQcm9wZXJ0aWVzKCkpJiYoYS5jdXJyZW50VGltZWxpbmUuc25hcHNob3RDdXJyZW50U3R5bGVzKCksYS5wcmV2aW91c05vZGU9bU8pO2xldCB2PWQ7Y29uc3QgTT1hLmludm9rZVF1ZXJ5KGwuc2VsZWN0b3IsbC5vcmln''@;'; put 'put ''aW5hbFNlbGVjdG9yLGwubGltaXQsbC5pbmNsdWRlU2VsZiwhIWgub3B0aW9uYWwsYS5lcnJvcnMpO2EuY3VycmVudFF1ZXJ5VG90YWw9TS5sZW5ndGg7bGV0IEQ9bnVsbDtNLmZvckVhY2goKFosbmUpPT57YS5jdXJyZW50UXVlcnlJbmRleD1uZTtjb25zdCBjZT1hLmNyZWF0ZVN1YkNvbnRl''@;'; put 'put ''eHQobC5vcHRpb25zLFopO2YmJmNlLmRlbGF5TmV4dFN0ZXAoZiksWj09PWEuZWxlbWVudCYmKEQ9Y2UuY3VycmVudFRpbWVsaW5lKSx4aCh0aGlzLGwuYW5pbWF0aW9uLGNlKSxjZS5jdXJyZW50VGltZWxpbmUuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCksdj1NYXRoLm1heCh2LGNlLmN1cnJl''@;'; put 'put ''bnRUaW1lbGluZS5jdXJyZW50VGltZSl9KSxhLmN1cnJlbnRRdWVyeUluZGV4PTAsYS5jdXJyZW50UXVlcnlUb3RhbD0wLGEudHJhbnNmb3JtSW50b05ld1RpbWVsaW5lKHYpLEQmJihhLmN1cnJlbnRUaW1lbGluZS5tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKEQpLGEuY3VycmVudFRp''@;'; put 'put ''bWVsaW5lLnNuYXBzaG90Q3VycmVudFN0eWxlcygpKSxhLnByZXZpb3VzTm9kZT1sfXZpc2l0U3RhZ2dlcihsLGEpe2NvbnN0IGQ9YS5wYXJlbnRDb250ZXh0LGg9YS5jdXJyZW50VGltZWxpbmUsZj1sLnRpbWluZ3Msdj1NYXRoLmFicyhmLmR1cmF0aW9uKSxNPXYqKGEuY3VycmVudFF1ZXJ5''@;'; put 'put ''VG90YWwtMSk7bGV0IEQ9diphLmN1cnJlbnRRdWVyeUluZGV4O3N3aXRjaChmLmR1cmF0aW9uPDA/InJldmVyc2UiOmYuZWFzaW5nKXtjYXNlInJldmVyc2UiOkQ9TS1EO2JyZWFrO2Nhc2UiZnVsbCI6RD1kLmN1cnJlbnRTdGFnZ2VyVGltZX1jb25zdCBuZT1hLmN1cnJlbnRUaW1lbGluZTtE''@;'; put 'put ''JiZuZS5kZWxheU5leHRTdGVwKEQpO2NvbnN0IGNlPW5lLmN1cnJlbnRUaW1lO3hoKHRoaXMsbC5hbmltYXRpb24sYSksYS5wcmV2aW91c05vZGU9bCxkLmN1cnJlbnRTdGFnZ2VyVGltZT1oLmN1cnJlbnRUaW1lLWNlKyhoLnN0YXJ0VGltZS1kLmN1cnJlbnRUaW1lbGluZS5zdGFydFRpbWUp''@;'; put 'put ''fX1jb25zdCBtTz17fTtjbGFzcyBMR3tjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdixNLEQpe3RoaXMuX2RyaXZlcj1sLHRoaXMuZWxlbWVudD1hLHRoaXMuc3ViSW5zdHJ1Y3Rpb25zPWQsdGhpcy5fZW50ZXJDbGFzc05hbWU9aCx0aGlzLl9sZWF2ZUNsYXNzTmFtZT1mLHRoaXMuZXJyb3JzPXYs''@;'; put 'put ''dGhpcy50aW1lbGluZXM9TSx0aGlzLnBhcmVudENvbnRleHQ9bnVsbCx0aGlzLmN1cnJlbnRBbmltYXRlVGltaW5ncz1udWxsLHRoaXMucHJldmlvdXNOb2RlPW1PLHRoaXMuc3ViQ29udGV4dENvdW50PTAsdGhpcy5vcHRpb25zPXt9LHRoaXMuY3VycmVudFF1ZXJ5SW5kZXg9MCx0aGlzLmN1''@;'; put 'put ''cnJlbnRRdWVyeVRvdGFsPTAsdGhpcy5jdXJyZW50U3RhZ2dlclRpbWU9MCx0aGlzLmN1cnJlbnRUaW1lbGluZT1EfHxuZXcgdk8odGhpcy5fZHJpdmVyLGEsMCksTS5wdXNoKHRoaXMuY3VycmVudFRpbWVsaW5lKX1nZXQgcGFyYW1zKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wYXJhbXN9dXBk''@;'; put 'put ''YXRlT3B0aW9ucyhsLGEpe2lmKCFsKXJldHVybjtjb25zdCBkPWw7bGV0IGg9dGhpcy5vcHRpb25zO251bGwhPWQuZHVyYXRpb24mJihoLmR1cmF0aW9uPWhnKGQuZHVyYXRpb24pKSxudWxsIT1kLmRlbGF5JiYoaC5kZWxheT1oZyhkLmRlbGF5KSk7Y29uc3QgZj1kLnBhcmFtcztpZihmKXts''@;'; put 'put ''ZXQgdj1oLnBhcmFtczt2fHwodj10aGlzLm9wdGlvbnMucGFyYW1zPXt9KSxPYmplY3Qua2V5cyhmKS5mb3JFYWNoKE09PnsoIWF8fCF2Lmhhc093blByb3BlcnR5KE0pKSYmKHZbTV09dEUoZltNXSx2LHRoaXMuZXJyb3JzKSl9KX19X2NvcHlPcHRpb25zKCl7Y29uc3QgbD17fTtpZih0aGlz''@;'; put 'put ''Lm9wdGlvbnMpe2NvbnN0IGE9dGhpcy5vcHRpb25zLnBhcmFtcztpZihhKXtjb25zdCBkPWwucGFyYW1zPXt9O09iamVjdC5rZXlzKGEpLmZvckVhY2goaD0+e2RbaF09YVtoXX0pfX1yZXR1cm4gbH1jcmVhdGVTdWJDb250ZXh0KGw9bnVsbCxhLGQpe2NvbnN0IGg9YXx8dGhpcy5lbGVtZW50''@;'; put 'put ''LGY9bmV3IExHKHRoaXMuX2RyaXZlcixoLHRoaXMuc3ViSW5zdHJ1Y3Rpb25zLHRoaXMuX2VudGVyQ2xhc3NOYW1lLHRoaXMuX2xlYXZlQ2xhc3NOYW1lLHRoaXMuZXJyb3JzLHRoaXMudGltZWxpbmVzLHRoaXMuY3VycmVudFRpbWVsaW5lLmZvcmsoaCxkfHwwKSk7cmV0dXJuIGYucHJldmlv''@;'; put 'put ''dXNOb2RlPXRoaXMucHJldmlvdXNOb2RlLGYuY3VycmVudEFuaW1hdGVUaW1pbmdzPXRoaXMuY3VycmVudEFuaW1hdGVUaW1pbmdzLGYub3B0aW9ucz10aGlzLl9jb3B5T3B0aW9ucygpLGYudXBkYXRlT3B0aW9ucyhsKSxmLmN1cnJlbnRRdWVyeUluZGV4PXRoaXMuY3VycmVudFF1ZXJ5SW5k''@;'; put 'put ''ZXgsZi5jdXJyZW50UXVlcnlUb3RhbD10aGlzLmN1cnJlbnRRdWVyeVRvdGFsLGYucGFyZW50Q29udGV4dD10aGlzLHRoaXMuc3ViQ29udGV4dENvdW50KyssZn10cmFuc2Zvcm1JbnRvTmV3VGltZWxpbmUobCl7cmV0dXJuIHRoaXMucHJldmlvdXNOb2RlPW1PLHRoaXMuY3VycmVudFRpbWVs''@;'; put 'put ''aW5lPXRoaXMuY3VycmVudFRpbWVsaW5lLmZvcmsodGhpcy5lbGVtZW50LGwpLHRoaXMudGltZWxpbmVzLnB1c2godGhpcy5jdXJyZW50VGltZWxpbmUpLHRoaXMuY3VycmVudFRpbWVsaW5lfWFwcGVuZEluc3RydWN0aW9uVG9UaW1lbGluZShsLGEsZCl7Y29uc3QgaD17ZHVyYXRpb246YT8/''@;'; put 'put ''bC5kdXJhdGlvbixkZWxheTp0aGlzLmN1cnJlbnRUaW1lbGluZS5jdXJyZW50VGltZSsoZD8/MCkrbC5kZWxheSxlYXNpbmc6IiJ9LGY9bmV3IEVHZSh0aGlzLl9kcml2ZXIsbC5lbGVtZW50LGwua2V5ZnJhbWVzLGwucHJlU3R5bGVQcm9wcyxsLnBvc3RTdHlsZVByb3BzLGgsbC5zdHJldGNo''@;'; put 'put ''U3RhcnRpbmdLZXlmcmFtZSk7cmV0dXJuIHRoaXMudGltZWxpbmVzLnB1c2goZiksaH1pbmNyZW1lbnRUaW1lKGwpe3RoaXMuY3VycmVudFRpbWVsaW5lLmZvcndhcmRUaW1lKHRoaXMuY3VycmVudFRpbWVsaW5lLmR1cmF0aW9uK2wpfWRlbGF5TmV4dFN0ZXAobCl7bD4wJiZ0aGlzLmN1cnJl''@;'; put 'put ''bnRUaW1lbGluZS5kZWxheU5leHRTdGVwKGwpfWludm9rZVF1ZXJ5KGwsYSxkLGgsZix2KXtsZXQgTT1bXTtpZihoJiZNLnB1c2godGhpcy5lbGVtZW50KSxsLmxlbmd0aD4wKXtsPShsPWwucmVwbGFjZShDR2UsIi4iK3RoaXMuX2VudGVyQ2xhc3NOYW1lKSkucmVwbGFjZShNR2UsIi4iK3Ro''@;'; put 'put ''aXMuX2xlYXZlQ2xhc3NOYW1lKTtsZXQgWj10aGlzLl9kcml2ZXIucXVlcnkodGhpcy5lbGVtZW50LGwsMSE9ZCk7MCE9PWQmJihaPWQ8MD9aLnNsaWNlKFoubGVuZ3RoK2QsWi5sZW5ndGgpOlouc2xpY2UoMCxkKSksTS5wdXNoKC4uLlopfXJldHVybiFmJiYwPT1NLmxlbmd0aCYmdi5wdXNo''@;'; put 'put ''KGZ1bmN0aW9uIFJZZShjKXtyZXR1cm4gbmV3IGVyKDMwMTQsITEpfSgpKSxNfX1jbGFzcyB2T3tjb25zdHJ1Y3RvcihsLGEsZCxoKXt0aGlzLl9kcml2ZXI9bCx0aGlzLmVsZW1lbnQ9YSx0aGlzLnN0YXJ0VGltZT1kLHRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cD1oLHRoaXMu''@;'; put 'put ''ZHVyYXRpb249MCx0aGlzLmVhc2luZz1udWxsLHRoaXMuX3ByZXZpb3VzS2V5ZnJhbWU9bmV3IE1hcCx0aGlzLl9jdXJyZW50S2V5ZnJhbWU9bmV3IE1hcCx0aGlzLl9rZXlmcmFtZXM9bmV3IE1hcCx0aGlzLl9zdHlsZVN1bW1hcnk9bmV3IE1hcCx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVz''@;'; put 'put ''PW5ldyBNYXAsdGhpcy5fcGVuZGluZ1N0eWxlcz1uZXcgTWFwLHRoaXMuX2JhY2tGaWxsPW5ldyBNYXAsdGhpcy5fY3VycmVudEVtcHR5U3RlcEtleWZyYW1lPW51bGwsdGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3VwfHwodGhpcy5fZWxlbWVudFRpbWVsaW5lU3R5bGVzTG9va3Vw''@;'; put 'put ''PW5ldyBNYXApLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzPXRoaXMuX2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cC5nZXQoYSksdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXN8fCh0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcz10aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLHRoaXMu''@;'; put 'put ''X2VsZW1lbnRUaW1lbGluZVN0eWxlc0xvb2t1cC5zZXQoYSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzKSksdGhpcy5fbG9hZEtleWZyYW1lKCl9Y29udGFpbnNBbmltYXRpb24oKXtzd2l0Y2godGhpcy5fa2V5ZnJhbWVzLnNpemUpe2Nhc2UgMDpyZXR1cm4hMTtjYXNlIDE6cmV0dXJuIHRo''@;'; put 'put ''aXMuaGFzQ3VycmVudFN0eWxlUHJvcGVydGllcygpO2RlZmF1bHQ6cmV0dXJuITB9fWhhc0N1cnJlbnRTdHlsZVByb3BlcnRpZXMoKXtyZXR1cm4gdGhpcy5fY3VycmVudEtleWZyYW1lLnNpemU+MH1nZXQgY3VycmVudFRpbWUoKXtyZXR1cm4gdGhpcy5zdGFydFRpbWUrdGhpcy5kdXJhdGlv''@;'; put 'put ''bn1kZWxheU5leHRTdGVwKGwpe2NvbnN0IGE9MT09PXRoaXMuX2tleWZyYW1lcy5zaXplJiZ0aGlzLl9wZW5kaW5nU3R5bGVzLnNpemU7dGhpcy5kdXJhdGlvbnx8YT8odGhpcy5mb3J3YXJkVGltZSh0aGlzLmN1cnJlbnRUaW1lK2wpLGEmJnRoaXMuc25hcHNob3RDdXJyZW50U3R5bGVzKCkp''@;'; put 'put ''OnRoaXMuc3RhcnRUaW1lKz1sfWZvcmsobCxhKXtyZXR1cm4gdGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSxuZXcgdk8odGhpcy5fZHJpdmVyLGwsYXx8dGhpcy5jdXJyZW50VGltZSx0aGlzLl9lbGVtZW50VGltZWxpbmVTdHlsZXNMb29rdXApfV9sb2FkS2V5ZnJhbWUoKXt0aGlzLl9j''@;'; put 'put ''dXJyZW50S2V5ZnJhbWUmJih0aGlzLl9wcmV2aW91c0tleWZyYW1lPXRoaXMuX2N1cnJlbnRLZXlmcmFtZSksdGhpcy5fY3VycmVudEtleWZyYW1lPXRoaXMuX2tleWZyYW1lcy5nZXQodGhpcy5kdXJhdGlvbiksdGhpcy5fY3VycmVudEtleWZyYW1lfHwodGhpcy5fY3VycmVudEtleWZyYW1l''@;'; put 'put ''PW5ldyBNYXAsdGhpcy5fa2V5ZnJhbWVzLnNldCh0aGlzLmR1cmF0aW9uLHRoaXMuX2N1cnJlbnRLZXlmcmFtZSkpfWZvcndhcmRGcmFtZSgpe3RoaXMuZHVyYXRpb24rPTEsdGhpcy5fbG9hZEtleWZyYW1lKCl9Zm9yd2FyZFRpbWUobCl7dGhpcy5hcHBseVN0eWxlc1RvS2V5ZnJhbWUoKSx0''@;'; put 'put ''aGlzLmR1cmF0aW9uPWwsdGhpcy5fbG9hZEtleWZyYW1lKCl9X3VwZGF0ZVN0eWxlKGwsYSl7dGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcy5zZXQobCxhKSx0aGlzLl9nbG9iYWxUaW1lbGluZVN0eWxlcy5zZXQobCxhKSx0aGlzLl9zdHlsZVN1bW1hcnkuc2V0KGwse3RpbWU6dGhpcy5jdXJy''@;'; put 'put ''ZW50VGltZSx2YWx1ZTphfSl9YWxsb3dPbmx5VGltZWxpbmVTdHlsZXMoKXtyZXR1cm4gdGhpcy5fY3VycmVudEVtcHR5U3RlcEtleWZyYW1lIT09dGhpcy5fY3VycmVudEtleWZyYW1lfWFwcGx5RW1wdHlTdGVwKGwpe2wmJnRoaXMuX3ByZXZpb3VzS2V5ZnJhbWUuc2V0KCJlYXNpbmciLGwp''@;'; put 'put ''O2ZvcihsZXRbYSxkXW9mIHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzKXRoaXMuX2JhY2tGaWxsLnNldChhLGR8fHRnKSx0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2V0KGEsdGcpO3RoaXMuX2N1cnJlbnRFbXB0eVN0ZXBLZXlmcmFtZT10aGlzLl9jdXJyZW50S2V5ZnJhbWV9c2V0U3R5bGVz''@;'; put 'put ''KGwsYSxkLGgpe2EmJnRoaXMuX3ByZXZpb3VzS2V5ZnJhbWUuc2V0KCJlYXNpbmciLGEpO2NvbnN0IGY9aCYmaC5wYXJhbXN8fHt9LHY9ZnVuY3Rpb24gVEdlKGMsbCl7Y29uc3QgYT1uZXcgTWFwO2xldCBkO3JldHVybiBjLmZvckVhY2goaD0+e2lmKCIqIj09PWgpe2Q/Pz1sLmtleXMoKTtm''@;'; put 'put ''b3IobGV0IGYgb2YgZClhLnNldChmLHRnKX1lbHNlIGZvcihsZXRbZix2XW9mIGgpYS5zZXQoZix2KX0pLGF9KGwsdGhpcy5fZ2xvYmFsVGltZWxpbmVTdHlsZXMpO2ZvcihsZXRbTSxEXW9mIHYpe2NvbnN0IFo9dEUoRCxmLGQpO3RoaXMuX3BlbmRpbmdTdHlsZXMuc2V0KE0sWiksdGhpcy5f''@;'; put 'put ''bG9jYWxUaW1lbGluZVN0eWxlcy5oYXMoTSl8fHRoaXMuX2JhY2tGaWxsLnNldChNLHRoaXMuX2dsb2JhbFRpbWVsaW5lU3R5bGVzLmdldChNKT8/dGcpLHRoaXMuX3VwZGF0ZVN0eWxlKE0sWil9fWFwcGx5U3R5bGVzVG9LZXlmcmFtZSgpezAhPXRoaXMuX3BlbmRpbmdTdHlsZXMuc2l6ZSYm''@;'; put 'put ''KHRoaXMuX3BlbmRpbmdTdHlsZXMuZm9yRWFjaCgobCxhKT0+e3RoaXMuX2N1cnJlbnRLZXlmcmFtZS5zZXQoYSxsKX0pLHRoaXMuX3BlbmRpbmdTdHlsZXMuY2xlYXIoKSx0aGlzLl9sb2NhbFRpbWVsaW5lU3R5bGVzLmZvckVhY2goKGwsYSk9Pnt0aGlzLl9jdXJyZW50S2V5ZnJhbWUuaGFz''@;'; put 'put ''KGEpfHx0aGlzLl9jdXJyZW50S2V5ZnJhbWUuc2V0KGEsbCl9KSl9c25hcHNob3RDdXJyZW50U3R5bGVzKCl7Zm9yKGxldFtsLGFdb2YgdGhpcy5fbG9jYWxUaW1lbGluZVN0eWxlcyl0aGlzLl9wZW5kaW5nU3R5bGVzLnNldChsLGEpLHRoaXMuX3VwZGF0ZVN0eWxlKGwsYSl9Z2V0RmluYWxL''@;'; put 'put ''ZXlmcmFtZSgpe3JldHVybiB0aGlzLl9rZXlmcmFtZXMuZ2V0KHRoaXMuZHVyYXRpb24pfWdldCBwcm9wZXJ0aWVzKCl7Y29uc3QgbD1bXTtmb3IobGV0IGEgaW4gdGhpcy5fY3VycmVudEtleWZyYW1lKWwucHVzaChhKTtyZXR1cm4gbH1tZXJnZVRpbWVsaW5lQ29sbGVjdGVkU3R5bGVzKGwp''@;'; put 'put ''e2wuX3N0eWxlU3VtbWFyeS5mb3JFYWNoKChhLGQpPT57Y29uc3QgaD10aGlzLl9zdHlsZVN1bW1hcnkuZ2V0KGQpOyghaHx8YS50aW1lPmgudGltZSkmJnRoaXMuX3VwZGF0ZVN0eWxlKGQsYS52YWx1ZSl9KX1idWlsZEtleWZyYW1lcygpe3RoaXMuYXBwbHlTdHlsZXNUb0tleWZyYW1lKCk7''@;'; put 'put ''Y29uc3QgbD1uZXcgU2V0LGE9bmV3IFNldCxkPTE9PT10aGlzLl9rZXlmcmFtZXMuc2l6ZSYmMD09PXRoaXMuZHVyYXRpb247bGV0IGg9W107dGhpcy5fa2V5ZnJhbWVzLmZvckVhY2goKE0sRCk9Pntjb25zdCBaPW5ldyBNYXAoWy4uLnRoaXMuX2JhY2tGaWxsLC4uLk1dKTtaLmZvckVhY2go''@;'; put 'put ''KG5lLGNlKT0+eyIhIj09PW5lP2wuYWRkKGNlKTpuZT09PXRnJiZhLmFkZChjZSl9KSxkfHxaLnNldCgib2Zmc2V0IixEL3RoaXMuZHVyYXRpb24pLGgucHVzaChaKX0pO2NvbnN0IGY9Wy4uLmwudmFsdWVzKCldLHY9Wy4uLmEudmFsdWVzKCldO2lmKGQpe2NvbnN0IE09aFswXSxEPW5ldyBN''@;'; put 'put ''YXAoTSk7TS5zZXQoIm9mZnNldCIsMCksRC5zZXQoIm9mZnNldCIsMSksaD1bTSxEXX1yZXR1cm4gSUcodGhpcy5lbGVtZW50LGgsZix2LHRoaXMuZHVyYXRpb24sdGhpcy5zdGFydFRpbWUsdGhpcy5lYXNpbmcsITEpfX1jbGFzcyBFR2UgZXh0ZW5kcyB2T3tjb25zdHJ1Y3RvcihsLGEsZCxo''@;'; put 'put ''LGYsdixNPSExKXtzdXBlcihsLGEsdi5kZWxheSksdGhpcy5rZXlmcmFtZXM9ZCx0aGlzLnByZVN0eWxlUHJvcHM9aCx0aGlzLnBvc3RTdHlsZVByb3BzPWYsdGhpcy5fc3RyZXRjaFN0YXJ0aW5nS2V5ZnJhbWU9TSx0aGlzLnRpbWluZ3M9e2R1cmF0aW9uOnYuZHVyYXRpb24sZGVsYXk6di5k''@;'; put 'put ''ZWxheSxlYXNpbmc6di5lYXNpbmd9fWNvbnRhaW5zQW5pbWF0aW9uKCl7cmV0dXJuIHRoaXMua2V5ZnJhbWVzLmxlbmd0aD4xfWJ1aWxkS2V5ZnJhbWVzKCl7bGV0IGw9dGhpcy5rZXlmcmFtZXMse2RlbGF5OmEsZHVyYXRpb246ZCxlYXNpbmc6aH09dGhpcy50aW1pbmdzO2lmKHRoaXMuX3N0''@;'; put 'put ''cmV0Y2hTdGFydGluZ0tleWZyYW1lJiZhKXtjb25zdCBmPVtdLHY9ZCthLE09YS92LEQ9bmV3IE1hcChsWzBdKTtELnNldCgib2Zmc2V0IiwwKSxmLnB1c2goRCk7Y29uc3QgWj1uZXcgTWFwKGxbMF0pO1ouc2V0KCJvZmZzZXQiLHZoZShNKSksZi5wdXNoKFopO2NvbnN0IG5lPWwubGVuZ3Ro''@;'; put 'put ''LTE7Zm9yKGxldCBjZT0xO2NlPD1uZTtjZSsrKXtsZXQgYmU9bmV3IE1hcChsW2NlXSk7Y29uc3QgRWU9YmUuZ2V0KCJvZmZzZXQiKTtiZS5zZXQoIm9mZnNldCIsdmhlKChhK0VlKmQpL3YpKSxmLnB1c2goYmUpfWQ9dixhPTAsaD0iIixsPWZ9cmV0dXJuIElHKHRoaXMuZWxlbWVudCxsLHRo''@;'; put 'put ''aXMucHJlU3R5bGVQcm9wcyx0aGlzLnBvc3RTdHlsZVByb3BzLGQsYSxoLCEwKX19ZnVuY3Rpb24gdmhlKGMsbD0zKXtjb25zdCBhPU1hdGgucG93KDEwLGwtMSk7cmV0dXJuIE1hdGgucm91bmQoYyphKS9hfWZ1bmN0aW9uIGJoZShjLGwsYSxkLGgsZix2LE0sRCxaLG5lLGNlLGJlKXtyZXR1''@;'; put 'put ''cm57dHlwZTowLGVsZW1lbnQ6Yyx0cmlnZ2VyTmFtZTpsLGlzUmVtb3ZhbFRyYW5zaXRpb246aCxmcm9tU3RhdGU6YSxmcm9tU3R5bGVzOmYsdG9TdGF0ZTpkLHRvU3R5bGVzOnYsdGltZWxpbmVzOk0scXVlcmllZEVsZW1lbnRzOkQscHJlU3R5bGVQcm9wczpaLHBvc3RTdHlsZVByb3BzOm5l''@;'; put 'put ''LHRvdGFsVGltZTpjZSxlcnJvcnM6YmV9fWNvbnN0IE9HPXt9O2NsYXNzIHloZXtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5fdHJpZ2dlck5hbWU9bCx0aGlzLmFzdD1hLHRoaXMuX3N0YXRlU3R5bGVzPWR9bWF0Y2gobCxhLGQsaCl7cmV0dXJuIGZ1bmN0aW9uIEFHZShjLGwsYSxkLGgpe3Jl''@;'; put 'put ''dHVybiBjLnNvbWUoZj0+ZihsLGEsZCxoKSl9KHRoaXMuYXN0Lm1hdGNoZXJzLGwsYSxkLGgpfWJ1aWxkU3R5bGVzKGwsYSxkKXtsZXQgaD10aGlzLl9zdGF0ZVN0eWxlcy5nZXQoIioiKTtyZXR1cm4gdm9pZCAwIT09bCYmKGg9dGhpcy5fc3RhdGVTdHlsZXMuZ2V0KGw/LnRvU3RyaW5nKCkp''@;'; put 'put ''fHxoKSxoP2guYnVpbGRTdHlsZXMoYSxkKTpuZXcgTWFwfWJ1aWxkKGwsYSxkLGgsZix2LE0sRCxaLG5lKXtjb25zdCBjZT1bXSxiZT10aGlzLmFzdC5vcHRpb25zJiZ0aGlzLmFzdC5vcHRpb25zLnBhcmFtc3x8T0csQmU9dGhpcy5idWlsZFN0eWxlcyhkLE0mJk0ucGFyYW1zfHxPRyxjZSks''@;'; put 'put ''cWU9RCYmRC5wYXJhbXN8fE9HLG50PXRoaXMuYnVpbGRTdHlsZXMoaCxxZSxjZSksbHQ9bmV3IFNldCxtdD1uZXcgTWFwLEp0PW5ldyBNYXAseW49InZvaWQiPT09aCxDbj17cGFyYW1zOl9oZShxZSxiZSksZGVsYXk6dGhpcy5hc3Qub3B0aW9ucz8uZGVsYXl9LHRuPW5lP1tdOlJHKGwsYSx0''@;'; put 'put ''aGlzLmFzdC5hbmltYXRpb24sZix2LEJlLG50LENuLFosY2UpO2xldCB4bj0wO3JldHVybiB0bi5mb3JFYWNoKFFuPT57eG49TWF0aC5tYXgoUW4uZHVyYXRpb24rUW4uZGVsYXkseG4pfSksY2UubGVuZ3RoP2JoZShhLHRoaXMuX3RyaWdnZXJOYW1lLGQsaCx5bixCZSxudCxbXSxbXSxtdCxK''@;'; put 'put ''dCx4bixjZSk6KHRuLmZvckVhY2goUW49Pntjb25zdCB5aT1Rbi5lbGVtZW50LHlyPU1oKG10LHlpLG5ldyBTZXQpO1FuLnByZVN0eWxlUHJvcHMuZm9yRWFjaChpaT0+eXIuYWRkKGlpKSk7Y29uc3QgR249TWgoSnQseWksbmV3IFNldCk7UW4ucG9zdFN0eWxlUHJvcHMuZm9yRWFjaChpaT0+''@;'; put 'put ''R24uYWRkKGlpKSkseWkhPT1hJiZsdC5hZGQoeWkpfSksYmhlKGEsdGhpcy5fdHJpZ2dlck5hbWUsZCxoLHluLEJlLG50LHRuLFsuLi5sdC52YWx1ZXMoKV0sbXQsSnQseG4pKX19ZnVuY3Rpb24gX2hlKGMsbCl7Y29uc3QgYT17Li4ubH07cmV0dXJuIE9iamVjdC5lbnRyaWVzKGMpLmZvckVh''@;'; put 'put ''Y2goKFtkLGhdKT0+e251bGwhPWgmJihhW2RdPWgpfSksYX1jbGFzcyBrR2V7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuc3R5bGVzPWwsdGhpcy5kZWZhdWx0UGFyYW1zPWEsdGhpcy5ub3JtYWxpemVyPWR9YnVpbGRTdHlsZXMobCxhKXtjb25zdCBkPW5ldyBNYXAsaD1faGUobCx0aGlzLmRl''@;'; put 'put ''ZmF1bHRQYXJhbXMpO3JldHVybiB0aGlzLnN0eWxlcy5zdHlsZXMuZm9yRWFjaChmPT57InN0cmluZyIhPXR5cGVvZiBmJiZmLmZvckVhY2goKHYsTSk9Pnt2JiYodj10RSh2LGgsYSkpO2NvbnN0IEQ9dGhpcy5ub3JtYWxpemVyLm5vcm1hbGl6ZVByb3BlcnR5TmFtZShNLGEpO3Y9dGhpcy5u''@;'; put 'put ''b3JtYWxpemVyLm5vcm1hbGl6ZVN0eWxlVmFsdWUoTSxELHYsYSksZC5zZXQoTSx2KX0pfSksZH19Y2xhc3MgSUdle2NvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLm5hbWU9bCx0aGlzLmFzdD1hLHRoaXMuX25vcm1hbGl6ZXI9ZCx0aGlzLnRyYW5zaXRpb25GYWN0b3JpZXM9W10sdGhpcy5zdGF0''@;'; put 'put ''ZXM9bmV3IE1hcCxhLnN0YXRlcy5mb3JFYWNoKGg9Pnt0aGlzLnN0YXRlcy5zZXQoaC5uYW1lLG5ldyBrR2UoaC5zdHlsZSxoLm9wdGlvbnMmJmgub3B0aW9ucy5wYXJhbXN8fHt9LGQpKX0pLHdoZSh0aGlzLnN0YXRlcywidHJ1ZSIsIjEiKSx3aGUodGhpcy5zdGF0ZXMsImZhbHNlIiwiMCIp''@;'; put 'put ''LGEudHJhbnNpdGlvbnMuZm9yRWFjaChoPT57dGhpcy50cmFuc2l0aW9uRmFjdG9yaWVzLnB1c2gobmV3IHloZShsLGgsdGhpcy5zdGF0ZXMpKX0pLHRoaXMuZmFsbGJhY2tUcmFuc2l0aW9uPWZ1bmN0aW9uIFJHZShjLGwsYSl7cmV0dXJuIG5ldyB5aGUoYyx7dHlwZTpBYS5UcmFuc2l0aW9u''@;'; put 'put ''LGFuaW1hdGlvbjp7dHlwZTpBYS5TZXF1ZW5jZSxzdGVwczpbXSxvcHRpb25zOm51bGx9LG1hdGNoZXJzOlsodixNKT0+ITBdLG9wdGlvbnM6bnVsbCxxdWVyeUNvdW50OjAsZGVwQ291bnQ6MH0sbCl9KGwsdGhpcy5zdGF0ZXMpfWdldCBjb250YWluc1F1ZXJpZXMoKXtyZXR1cm4gdGhpcy5h''@;'; put 'put ''c3QucXVlcnlDb3VudD4wfW1hdGNoVHJhbnNpdGlvbihsLGEsZCxoKXtyZXR1cm4gdGhpcy50cmFuc2l0aW9uRmFjdG9yaWVzLmZpbmQodj0+di5tYXRjaChsLGEsZCxoKSl8fG51bGx9bWF0Y2hTdHlsZXMobCxhLGQpe3JldHVybiB0aGlzLmZhbGxiYWNrVHJhbnNpdGlvbi5idWlsZFN0eWxl''@;'; put 'put ''cyhsLGEsZCl9fWZ1bmN0aW9uIHdoZShjLGwsYSl7Yy5oYXMobCk/Yy5oYXMoYSl8fGMuc2V0KGEsYy5nZXQobCkpOmMuaGFzKGEpJiZjLnNldChsLGMuZ2V0KGEpKX1jb25zdCBMR2U9bmV3IGdPO2NsYXNzIE9HZXtjb25zdHJ1Y3RvcihsLGEsZCl7dGhpcy5ib2R5Tm9kZT1sLHRoaXMuX2Ry''@;'; put 'put ''aXZlcj1hLHRoaXMuX25vcm1hbGl6ZXI9ZCx0aGlzLl9hbmltYXRpb25zPW5ldyBNYXAsdGhpcy5fcGxheWVyc0J5SWQ9bmV3IE1hcCx0aGlzLnBsYXllcnM9W119cmVnaXN0ZXIobCxhKXtjb25zdCBkPVtdLGY9a0codGhpcy5fZHJpdmVyLGEsZCxbXSk7aWYoZC5sZW5ndGgpdGhyb3cgZnVu''@;'; put 'put ''Y3Rpb24gVlllKGMpe3JldHVybiBuZXcgZXIoMzUwMywhMSl9KCk7dGhpcy5fYW5pbWF0aW9ucy5zZXQobCxmKX1fYnVpbGRQbGF5ZXIobCxhLGQpe2NvbnN0IGg9bC5lbGVtZW50LGY9aWhlKHRoaXMuX25vcm1hbGl6ZXIsbC5rZXlmcmFtZXMsYSxkKTtyZXR1cm4gdGhpcy5fZHJpdmVyLmFu''@;'; put 'put ''aW1hdGUoaCxmLGwuZHVyYXRpb24sbC5kZWxheSxsLmVhc2luZyxbXSwhMCl9Y3JlYXRlKGwsYSxkPXt9KXtjb25zdCBoPVtdLGY9dGhpcy5fYW5pbWF0aW9ucy5nZXQobCk7bGV0IHY7Y29uc3QgTT1uZXcgTWFwO2lmKGY/KHY9UkcodGhpcy5fZHJpdmVyLGEsZixTRyxsTyxuZXcgTWFwLG5l''@;'; put 'put ''dyBNYXAsZCxMR2UsaCksdi5mb3JFYWNoKG5lPT57Y29uc3QgY2U9TWgoTSxuZS5lbGVtZW50LG5ldyBNYXApO25lLnBvc3RTdHlsZVByb3BzLmZvckVhY2goYmU9PmNlLnNldChiZSxudWxsKSl9KSk6KGgucHVzaChmdW5jdGlvbiBCWWUoKXtyZXR1cm4gbmV3IGVyKDMzMDAsITEpfSgpKSx2''@;'; put 'put ''PVtdKSxoLmxlbmd0aCl0aHJvdyBmdW5jdGlvbiBqWWUoYyl7cmV0dXJuIG5ldyBlcigzNTA0LCExKX0oKTtNLmZvckVhY2goKG5lLGNlKT0+e25lLmZvckVhY2goKGJlLEVlKT0+e25lLnNldChFZSx0aGlzLl9kcml2ZXIuY29tcHV0ZVN0eWxlKGNlLEVlLHRnKSl9KX0pO2NvbnN0IFo9VG0o''@;'; put 'put ''di5tYXAobmU9Pntjb25zdCBjZT1NLmdldChuZS5lbGVtZW50KTtyZXR1cm4gdGhpcy5fYnVpbGRQbGF5ZXIobmUsbmV3IE1hcCxjZSl9KSk7cmV0dXJuIHRoaXMuX3BsYXllcnNCeUlkLnNldChsLFopLFoub25EZXN0cm95KCgpPT50aGlzLmRlc3Ryb3kobCkpLHRoaXMucGxheWVycy5wdXNo''@;'; put 'put ''KFopLFp9ZGVzdHJveShsKXtjb25zdCBhPXRoaXMuX2dldFBsYXllcihsKTthLmRlc3Ryb3koKSx0aGlzLl9wbGF5ZXJzQnlJZC5kZWxldGUobCk7Y29uc3QgZD10aGlzLnBsYXllcnMuaW5kZXhPZihhKTtkPj0wJiZ0aGlzLnBsYXllcnMuc3BsaWNlKGQsMSl9X2dldFBsYXllcihsKXtjb25z''@;'; put 'put ''dCBhPXRoaXMuX3BsYXllcnNCeUlkLmdldChsKTtpZighYSl0aHJvdyBmdW5jdGlvbiB6WWUoYyl7cmV0dXJuIG5ldyBlcigzMzAxLCExKX0oKTtyZXR1cm4gYX1saXN0ZW4obCxhLGQsaCl7Y29uc3QgZj1iRyhhLCIiLCIiLCIiKTtyZXR1cm4gbUcodGhpcy5fZ2V0UGxheWVyKGwpLGQsZixo''@;'; put 'put ''KSwoKT0+e319Y29tbWFuZChsLGEsZCxoKXtpZigicmVnaXN0ZXIiPT1kKXJldHVybiB2b2lkIHRoaXMucmVnaXN0ZXIobCxoWzBdKTtpZigiY3JlYXRlIj09ZClyZXR1cm4gdm9pZCB0aGlzLmNyZWF0ZShsLGEsaFswXXx8e30pO2NvbnN0IGY9dGhpcy5fZ2V0UGxheWVyKGwpO3N3aXRjaChk''@;'; put 'put ''KXtjYXNlInBsYXkiOmYucGxheSgpO2JyZWFrO2Nhc2UicGF1c2UiOmYucGF1c2UoKTticmVhaztjYXNlInJlc2V0IjpmLnJlc2V0KCk7YnJlYWs7Y2FzZSJyZXN0YXJ0IjpmLnJlc3RhcnQoKTticmVhaztjYXNlImZpbmlzaCI6Zi5maW5pc2goKTticmVhaztjYXNlImluaXQiOmYuaW5pdCgp''@;'; put 'put ''O2JyZWFrO2Nhc2Uic2V0UG9zaXRpb24iOmYuc2V0UG9zaXRpb24ocGFyc2VGbG9hdChoWzBdKSk7YnJlYWs7Y2FzZSJkZXN0cm95Ijp0aGlzLmRlc3Ryb3kobCl9fX1jb25zdCBDaGU9Im5nLWFuaW1hdGUtcXVldWVkIixQRz0ibmctYW5pbWF0ZS1kaXNhYmxlZCIsVkdlPVtdLFNoZT17bmFt''@;'; put 'put ''ZXNwYWNlSWQ6IiIsc2V0Rm9yUmVtb3ZhbDohMSxzZXRGb3JNb3ZlOiExLGhhc0FuaW1hdGlvbjohMSxyZW1vdmVkQmVmb3JlUXVlcmllZDohMX0sQkdlPXtuYW1lc3BhY2VJZDoiIixzZXRGb3JNb3ZlOiExLHNldEZvclJlbW92YWw6ITEsaGFzQW5pbWF0aW9uOiExLHJlbW92ZWRCZWZvcmVR''@;'; put 'put ''dWVyaWVkOiEwfSxxZj0iX19uZ19yZW1vdmVkIjtjbGFzcyBGR3tnZXQgcGFyYW1zKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5wYXJhbXN9Y29uc3RydWN0b3IobCxhPSIiKXt0aGlzLm5hbWVzcGFjZUlkPWE7Y29uc3QgZD1sJiZsLmhhc093blByb3BlcnR5KCJ2YWx1ZSIpO2lmKHRoaXMudmFs''@;'; put 'put ''dWU9ZnVuY3Rpb24gWkdlKGMpe3JldHVybiBjPz9udWxsfShkP2wudmFsdWU6bCksZCl7Y29uc3R7dmFsdWU6ZiwuLi52fT1sO3RoaXMub3B0aW9ucz12fWVsc2UgdGhpcy5vcHRpb25zPXt9O3RoaXMub3B0aW9ucy5wYXJhbXN8fCh0aGlzLm9wdGlvbnMucGFyYW1zPXt9KX1hYnNvcmJPcHRp''@;'; put 'put ''b25zKGwpe2NvbnN0IGE9bC5wYXJhbXM7aWYoYSl7Y29uc3QgZD10aGlzLm9wdGlvbnMucGFyYW1zO09iamVjdC5rZXlzKGEpLmZvckVhY2goaD0+e251bGw9PWRbaF0mJihkW2hdPWFbaF0pfSl9fX1jb25zdCBuRT0idm9pZCIsSEc9bmV3IEZHKG5FKTtjbGFzcyBqR2V7Y29uc3RydWN0b3Io''@;'; put 'put ''bCxhLGQpe3RoaXMuaWQ9bCx0aGlzLmhvc3RFbGVtZW50PWEsdGhpcy5fZW5naW5lPWQsdGhpcy5wbGF5ZXJzPVtdLHRoaXMuX3RyaWdnZXJzPW5ldyBNYXAsdGhpcy5fcXVldWU9W10sdGhpcy5fZWxlbWVudExpc3RlbmVycz1uZXcgTWFwLHRoaXMuX2hvc3RDbGFzc05hbWU9Im5nLXRucy0i''@;'; put 'put ''K2wsQTIoYSx0aGlzLl9ob3N0Q2xhc3NOYW1lKX1saXN0ZW4obCxhLGQsaCl7aWYoIXRoaXMuX3RyaWdnZXJzLmhhcyhhKSl0aHJvdyBmdW5jdGlvbiBVWWUoYyxsKXtyZXR1cm4gbmV3IGVyKDMzMDIsITEpfSgpO2lmKG51bGw9PWR8fDA9PWQubGVuZ3RoKXRocm93IGZ1bmN0aW9uIFpZZShj''@;'; put 'put ''KXtyZXR1cm4gbmV3IGVyKDMzMDMsITEpfSgpO2lmKCFmdW5jdGlvbiBXR2UoYyl7cmV0dXJuInN0YXJ0Ij09Y3x8ImRvbmUiPT1jfShkKSl0aHJvdyBmdW5jdGlvbiBXWWUoYyxsKXtyZXR1cm4gbmV3IGVyKDM0MDAsITEpfSgpO2NvbnN0IGY9TWgodGhpcy5fZWxlbWVudExpc3RlbmVycyxs''@;'; put 'put ''LFtdKSx2PXtuYW1lOmEscGhhc2U6ZCxjYWxsYmFjazpofTtmLnB1c2godik7Y29uc3QgTT1NaCh0aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LGwsbmV3IE1hcCk7cmV0dXJuIE0uaGFzKGEpfHwoQTIobCxjTyksQTIobCxjTysiLSIrYSksTS5zZXQoYSxIRykpLCgpPT57dGhpcy5fZW5n''@;'; put 'put ''aW5lLmFmdGVyRmx1c2goKCk9Pntjb25zdCBEPWYuaW5kZXhPZih2KTtEPj0wJiZmLnNwbGljZShELDEpLHRoaXMuX3RyaWdnZXJzLmhhcyhhKXx8TS5kZWxldGUoYSl9KX19cmVnaXN0ZXIobCxhKXtyZXR1cm4hdGhpcy5fdHJpZ2dlcnMuaGFzKGwpJiYodGhpcy5fdHJpZ2dlcnMuc2V0KGws''@;'; put 'put ''YSksITApfV9nZXRUcmlnZ2VyKGwpe2NvbnN0IGE9dGhpcy5fdHJpZ2dlcnMuZ2V0KGwpO2lmKCFhKXRocm93IGZ1bmN0aW9uIFlZZShjKXtyZXR1cm4gbmV3IGVyKDM0MDEsITEpfSgpO3JldHVybiBhfXRyaWdnZXIobCxhLGQsaD0hMCl7Y29uc3QgZj10aGlzLl9nZXRUcmlnZ2VyKGEpLHY9''@;'; put 'put ''bmV3IE5HKHRoaXMuaWQsYSxsKTtsZXQgTT10aGlzLl9lbmdpbmUuc3RhdGVzQnlFbGVtZW50LmdldChsKTtNfHwoQTIobCxjTyksQTIobCxjTysiLSIrYSksdGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5zZXQobCxNPW5ldyBNYXApKTtsZXQgRD1NLmdldChhKTtjb25zdCBaPW5ldyBG''@;'; put 'put ''RyhkLHRoaXMuaWQpO2lmKCEoZCYmZC5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKSkmJkQmJlouYWJzb3JiT3B0aW9ucyhELm9wdGlvbnMpLE0uc2V0KGEsWiksRHx8KEQ9SEcpLFoudmFsdWUhPT1uRSYmRC52YWx1ZT09PVoudmFsdWUpe2lmKCFmdW5jdGlvbiAkR2UoYyxsKXtjb25zdCBhPU9i''@;'; put 'put ''amVjdC5rZXlzKGMpLGQ9T2JqZWN0LmtleXMobCk7aWYoYS5sZW5ndGghPWQubGVuZ3RoKXJldHVybiExO2ZvcihsZXQgaD0wO2g8YS5sZW5ndGg7aCsrKXtjb25zdCBmPWFbaF07aWYoIWwuaGFzT3duUHJvcGVydHkoZil8fGNbZl0hPT1sW2ZdKXJldHVybiExfXJldHVybiEwfShELnBhcmFt''@;'; put 'put ''cyxaLnBhcmFtcykpe2NvbnN0IHFlPVtdLG50PWYubWF0Y2hTdHlsZXMoRC52YWx1ZSxELnBhcmFtcyxxZSksbHQ9Zi5tYXRjaFN0eWxlcyhaLnZhbHVlLFoucGFyYW1zLHFlKTtxZS5sZW5ndGg/dGhpcy5fZW5naW5lLnJlcG9ydEVycm9yKHFlKTp0aGlzLl9lbmdpbmUuYWZ0ZXJGbHVzaCgo''@;'; put 'put ''KT0+e1I3KGwsbnQpLHlwKGwsbHQpfSl9cmV0dXJufWNvbnN0IGJlPU1oKHRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LGwsW10pO2JlLmZvckVhY2gocWU9PntxZS5uYW1lc3BhY2VJZD09dGhpcy5pZCYmcWUudHJpZ2dlck5hbWU9PWEmJnFlLnF1ZXVlZCYmcWUuZGVzdHJveSgpfSk7''@;'; put 'put ''bGV0IEVlPWYubWF0Y2hUcmFuc2l0aW9uKEQudmFsdWUsWi52YWx1ZSxsLFoucGFyYW1zKSxCZT0hMTtpZighRWUpe2lmKCFoKXJldHVybjtFZT1mLmZhbGxiYWNrVHJhbnNpdGlvbixCZT0hMH1yZXR1cm4gdGhpcy5fZW5naW5lLnRvdGFsUXVldWVkUGxheWVycysrLHRoaXMuX3F1ZXVlLnB1''@;'; put 'put ''c2goe2VsZW1lbnQ6bCx0cmlnZ2VyTmFtZTphLHRyYW5zaXRpb246RWUsZnJvbVN0YXRlOkQsdG9TdGF0ZTpaLHBsYXllcjp2LGlzRmFsbGJhY2tUcmFuc2l0aW9uOkJlfSksQmV8fChBMihsLENoZSksdi5vblN0YXJ0KCgpPT57ZV8obCxDaGUpfSkpLHYub25Eb25lKCgpPT57bGV0IHFlPXRo''@;'; put 'put ''aXMucGxheWVycy5pbmRleE9mKHYpO3FlPj0wJiZ0aGlzLnBsYXllcnMuc3BsaWNlKHFlLDEpO2NvbnN0IG50PXRoaXMuX2VuZ2luZS5wbGF5ZXJzQnlFbGVtZW50LmdldChsKTtpZihudCl7bGV0IGx0PW50LmluZGV4T2Yodik7bHQ+PTAmJm50LnNwbGljZShsdCwxKX19KSx0aGlzLnBsYXll''@;'; put 'put ''cnMucHVzaCh2KSxiZS5wdXNoKHYpLHZ9ZGVyZWdpc3RlcihsKXt0aGlzLl90cmlnZ2Vycy5kZWxldGUobCksdGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5mb3JFYWNoKGE9PmEuZGVsZXRlKGwpKSx0aGlzLl9lbGVtZW50TGlzdGVuZXJzLmZvckVhY2goKGEsZCk9Pnt0aGlzLl9lbGVt''@;'; put 'put ''ZW50TGlzdGVuZXJzLnNldChkLGEuZmlsdGVyKGg9PmgubmFtZSE9bCkpfSl9Y2xlYXJFbGVtZW50Q2FjaGUobCl7dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5kZWxldGUobCksdGhpcy5fZWxlbWVudExpc3RlbmVycy5kZWxldGUobCk7Y29uc3QgYT10aGlzLl9lbmdpbmUucGxheWVy''@;'; put 'put ''c0J5RWxlbWVudC5nZXQobCk7YSYmKGEuZm9yRWFjaChkPT5kLmRlc3Ryb3koKSksdGhpcy5fZW5naW5lLnBsYXllcnNCeUVsZW1lbnQuZGVsZXRlKGwpKX1fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnMobCxhKXtjb25zdCBkPXRoaXMuX2VuZ2luZS5kcml2ZXIucXVlcnkobCx1Tywh''@;'; put 'put ''MCk7ZC5mb3JFYWNoKGg9PntpZihoW3FmXSlyZXR1cm47Y29uc3QgZj10aGlzLl9lbmdpbmUuZmV0Y2hOYW1lc3BhY2VzQnlFbGVtZW50KGgpO2Yuc2l6ZT9mLmZvckVhY2godj0+di50cmlnZ2VyTGVhdmVBbmltYXRpb24oaCxhLCExLCEwKSk6dGhpcy5jbGVhckVsZW1lbnRDYWNoZShoKX0p''@;'; put 'put ''LHRoaXMuX2VuZ2luZS5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoKCk9PmQuZm9yRWFjaChoPT50aGlzLmNsZWFyRWxlbWVudENhY2hlKGgpKSl9dHJpZ2dlckxlYXZlQW5pbWF0aW9uKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5fZW5naW5lLnN0YXRlc0J5RWxlbWVudC5nZXQobCksdj1uZXcg''@;'; put 'put ''TWFwO2lmKGYpe2NvbnN0IE09W107aWYoZi5mb3JFYWNoKChELFopPT57aWYodi5zZXQoWixELnZhbHVlKSx0aGlzLl90cmlnZ2Vycy5oYXMoWikpe2NvbnN0IG5lPXRoaXMudHJpZ2dlcihsLFosbkUsaCk7bmUmJk0ucHVzaChuZSl9fSksTS5sZW5ndGgpcmV0dXJuIHRoaXMuX2VuZ2luZS5t''@;'; put 'put ''YXJrRWxlbWVudEFzUmVtb3ZlZCh0aGlzLmlkLGwsITAsYSx2KSxkJiZUbShNKS5vbkRvbmUoKCk9PnRoaXMuX2VuZ2luZS5wcm9jZXNzTGVhdmVOb2RlKGwpKSwhMH1yZXR1cm4hMX1wcmVwYXJlTGVhdmVBbmltYXRpb25MaXN0ZW5lcnMobCl7Y29uc3QgYT10aGlzLl9lbGVtZW50TGlzdGVu''@;'; put 'put ''ZXJzLmdldChsKSxkPXRoaXMuX2VuZ2luZS5zdGF0ZXNCeUVsZW1lbnQuZ2V0KGwpO2lmKGEmJmQpe2NvbnN0IGg9bmV3IFNldDthLmZvckVhY2goZj0+e2NvbnN0IHY9Zi5uYW1lO2lmKGguaGFzKHYpKXJldHVybjtoLmFkZCh2KTtjb25zdCBEPXRoaXMuX3RyaWdnZXJzLmdldCh2KS5mYWxs''@;'; put 'put ''YmFja1RyYW5zaXRpb24sWj1kLmdldCh2KXx8SEcsbmU9bmV3IEZHKG5FKSxjZT1uZXcgTkcodGhpcy5pZCx2LGwpO3RoaXMuX2VuZ2luZS50b3RhbFF1ZXVlZFBsYXllcnMrKyx0aGlzLl9xdWV1ZS5wdXNoKHtlbGVtZW50OmwsdHJpZ2dlck5hbWU6dix0cmFuc2l0aW9uOkQsZnJvbVN0YXRl''@;'; put 'put ''OlosdG9TdGF0ZTpuZSxwbGF5ZXI6Y2UsaXNGYWxsYmFja1RyYW5zaXRpb246ITB9KX0pfX1yZW1vdmVOb2RlKGwsYSl7Y29uc3QgZD10aGlzLl9lbmdpbmU7aWYobC5jaGlsZEVsZW1lbnRDb3VudCYmdGhpcy5fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnMobCxhKSx0aGlzLnRyaWdn''@;'; put 'put ''ZXJMZWF2ZUFuaW1hdGlvbihsLGEsITApKXJldHVybjtsZXQgaD0hMTtpZihkLnRvdGFsQW5pbWF0aW9ucyl7Y29uc3QgZj1kLnBsYXllcnMubGVuZ3RoP2QucGxheWVyc0J5UXVlcmllZEVsZW1lbnQuZ2V0KGwpOltdO2lmKGYmJmYubGVuZ3RoKWg9ITA7ZWxzZXtsZXQgdj1sO2Zvcig7dj12''@;'; put 'put ''LnBhcmVudE5vZGU7KWlmKGQuc3RhdGVzQnlFbGVtZW50LmdldCh2KSl7aD0hMDticmVha319fWlmKHRoaXMucHJlcGFyZUxlYXZlQW5pbWF0aW9uTGlzdGVuZXJzKGwpLGgpZC5tYXJrRWxlbWVudEFzUmVtb3ZlZCh0aGlzLmlkLGwsITEsYSk7ZWxzZXtjb25zdCBmPWxbcWZdOyghZnx8Zj09''@;'; put 'put ''PVNoZSkmJihkLmFmdGVyRmx1c2goKCk9PnRoaXMuY2xlYXJFbGVtZW50Q2FjaGUobCkpLGQuZGVzdHJveUlubmVyQW5pbWF0aW9ucyhsKSxkLl9vblJlbW92YWxDb21wbGV0ZShsLGEpKX19aW5zZXJ0Tm9kZShsLGEpe0EyKGwsdGhpcy5faG9zdENsYXNzTmFtZSl9ZHJhaW5RdWV1ZWRUcmFu''@;'; put 'put ''c2l0aW9ucyhsKXtjb25zdCBhPVtdO3JldHVybiB0aGlzLl9xdWV1ZS5mb3JFYWNoKGQ9Pntjb25zdCBoPWQucGxheWVyO2lmKGguZGVzdHJveWVkKXJldHVybjtjb25zdCBmPWQuZWxlbWVudCx2PXRoaXMuX2VsZW1lbnRMaXN0ZW5lcnMuZ2V0KGYpO3YmJnYuZm9yRWFjaChNPT57aWYoTS5u''@;'; put 'put ''YW1lPT1kLnRyaWdnZXJOYW1lKXtjb25zdCBEPWJHKGYsZC50cmlnZ2VyTmFtZSxkLmZyb21TdGF0ZS52YWx1ZSxkLnRvU3RhdGUudmFsdWUpO0QuX2RhdGE9bCxtRyhkLnBsYXllcixNLnBoYXNlLEQsTS5jYWxsYmFjayl9fSksaC5tYXJrZWRGb3JEZXN0cm95P3RoaXMuX2VuZ2luZS5hZnRl''@;'; put 'put ''ckZsdXNoKCgpPT57aC5kZXN0cm95KCl9KTphLnB1c2goZCl9KSx0aGlzLl9xdWV1ZT1bXSxhLnNvcnQoKGQsaCk9Pntjb25zdCBmPWQudHJhbnNpdGlvbi5hc3QuZGVwQ291bnQsdj1oLnRyYW5zaXRpb24uYXN0LmRlcENvdW50O3JldHVybiAwPT1mfHwwPT12P2Ytdjp0aGlzLl9lbmdpbmUu''@;'; put 'put ''ZHJpdmVyLmNvbnRhaW5zRWxlbWVudChkLmVsZW1lbnQsaC5lbGVtZW50KT8xOi0xfSl9ZGVzdHJveShsKXt0aGlzLnBsYXllcnMuZm9yRWFjaChhPT5hLmRlc3Ryb3koKSksdGhpcy5fc2lnbmFsUmVtb3ZhbEZvcklubmVyVHJpZ2dlcnModGhpcy5ob3N0RWxlbWVudCxsKX19Y2xhc3Mgekdl''@;'; put 'put ''e19vblJlbW92YWxDb21wbGV0ZShsLGEpe3RoaXMub25SZW1vdmFsQ29tcGxldGUobCxhKX1jb25zdHJ1Y3RvcihsLGEsZCxoKXt0aGlzLmJvZHlOb2RlPWwsdGhpcy5kcml2ZXI9YSx0aGlzLl9ub3JtYWxpemVyPWQsdGhpcy5zY2hlZHVsZXI9aCx0aGlzLnBsYXllcnM9W10sdGhpcy5uZXdI''@;'; put 'put ''b3N0RWxlbWVudHM9bmV3IE1hcCx0aGlzLnBsYXllcnNCeUVsZW1lbnQ9bmV3IE1hcCx0aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50PW5ldyBNYXAsdGhpcy5zdGF0ZXNCeUVsZW1lbnQ9bmV3IE1hcCx0aGlzLmRpc2FibGVkTm9kZXM9bmV3IFNldCx0aGlzLnRvdGFsQW5pbWF0aW9ucz0w''@;'; put 'put ''LHRoaXMudG90YWxRdWV1ZWRQbGF5ZXJzPTAsdGhpcy5fbmFtZXNwYWNlTG9va3VwPXt9LHRoaXMuX25hbWVzcGFjZUxpc3Q9W10sdGhpcy5fZmx1c2hGbnM9W10sdGhpcy5fd2hlblF1aWV0Rm5zPVtdLHRoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQ9bmV3IE1hcCx0aGlzLmNvbGxlY3Rl''@;'; put 'put ''ZEVudGVyRWxlbWVudHM9W10sdGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzPVtdLHRoaXMub25SZW1vdmFsQ29tcGxldGU9KGYsdik9Pnt9fWdldCBxdWV1ZWRQbGF5ZXJzKCl7Y29uc3QgbD1bXTtyZXR1cm4gdGhpcy5fbmFtZXNwYWNlTGlzdC5mb3JFYWNoKGE9PnthLnBsYXllcnMuZm9y''@;'; put 'put ''RWFjaChkPT57ZC5xdWV1ZWQmJmwucHVzaChkKX0pfSksbH1jcmVhdGVOYW1lc3BhY2UobCxhKXtjb25zdCBkPW5ldyBqR2UobCxhLHRoaXMpO3JldHVybiB0aGlzLmJvZHlOb2RlJiZ0aGlzLmRyaXZlci5jb250YWluc0VsZW1lbnQodGhpcy5ib2R5Tm9kZSxhKT90aGlzLl9iYWxhbmNlTmFt''@;'; put 'put ''ZXNwYWNlTGlzdChkLGEpOih0aGlzLm5ld0hvc3RFbGVtZW50cy5zZXQoYSxkKSx0aGlzLmNvbGxlY3RFbnRlckVsZW1lbnQoYSkpLHRoaXMuX25hbWVzcGFjZUxvb2t1cFtsXT1kfV9iYWxhbmNlTmFtZXNwYWNlTGlzdChsLGEpe2NvbnN0IGQ9dGhpcy5fbmFtZXNwYWNlTGlzdCxoPXRoaXMu''@;'; put 'put ''bmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQ7aWYoZC5sZW5ndGgtMT49MCl7bGV0IHY9ITEsTT10aGlzLmRyaXZlci5nZXRQYXJlbnRFbGVtZW50KGEpO2Zvcig7TTspe2NvbnN0IEQ9aC5nZXQoTSk7aWYoRCl7Y29uc3QgWj1kLmluZGV4T2YoRCk7ZC5zcGxpY2UoWisxLDAsbCksdj0hMDticmVh''@;'; put 'put ''a31NPXRoaXMuZHJpdmVyLmdldFBhcmVudEVsZW1lbnQoTSl9dnx8ZC51bnNoaWZ0KGwpfWVsc2UgZC5wdXNoKGwpO3JldHVybiBoLnNldChhLGwpLGx9cmVnaXN0ZXIobCxhKXtsZXQgZD10aGlzLl9uYW1lc3BhY2VMb29rdXBbbF07cmV0dXJuIGR8fChkPXRoaXMuY3JlYXRlTmFtZXNwYWNl''@;'; put 'put ''KGwsYSkpLGR9cmVnaXN0ZXJUcmlnZ2VyKGwsYSxkKXtsZXQgaD10aGlzLl9uYW1lc3BhY2VMb29rdXBbbF07aCYmaC5yZWdpc3RlcihhLGQpJiZ0aGlzLnRvdGFsQW5pbWF0aW9ucysrfWRlc3Ryb3kobCxhKXtsJiYodGhpcy5hZnRlckZsdXNoKCgpPT57fSksdGhpcy5hZnRlckZsdXNoQW5p''@;'; put 'put ''bWF0aW9uc0RvbmUoKCk9Pntjb25zdCBkPXRoaXMuX2ZldGNoTmFtZXNwYWNlKGwpO3RoaXMubmFtZXNwYWNlc0J5SG9zdEVsZW1lbnQuZGVsZXRlKGQuaG9zdEVsZW1lbnQpO2NvbnN0IGg9dGhpcy5fbmFtZXNwYWNlTGlzdC5pbmRleE9mKGQpO2g+PTAmJnRoaXMuX25hbWVzcGFjZUxpc3Qu''@;'; put 'put ''c3BsaWNlKGgsMSksZC5kZXN0cm95KGEpLGRlbGV0ZSB0aGlzLl9uYW1lc3BhY2VMb29rdXBbbF19KSl9X2ZldGNoTmFtZXNwYWNlKGwpe3JldHVybiB0aGlzLl9uYW1lc3BhY2VMb29rdXBbbF19ZmV0Y2hOYW1lc3BhY2VzQnlFbGVtZW50KGwpe2NvbnN0IGE9bmV3IFNldCxkPXRoaXMuc3Rh''@;'; put 'put ''dGVzQnlFbGVtZW50LmdldChsKTtpZihkKWZvcihsZXQgaCBvZiBkLnZhbHVlcygpKWlmKGgubmFtZXNwYWNlSWQpe2NvbnN0IGY9dGhpcy5fZmV0Y2hOYW1lc3BhY2UoaC5uYW1lc3BhY2VJZCk7ZiYmYS5hZGQoZil9cmV0dXJuIGF9dHJpZ2dlcihsLGEsZCxoKXtpZihiTyhhKSl7Y29uc3Qg''@;'; put 'put ''Zj10aGlzLl9mZXRjaE5hbWVzcGFjZShsKTtpZihmKXJldHVybiBmLnRyaWdnZXIoYSxkLGgpLCEwfXJldHVybiExfWluc2VydE5vZGUobCxhLGQsaCl7aWYoIWJPKGEpKXJldHVybjtjb25zdCBmPWFbcWZdO2lmKGYmJmYuc2V0Rm9yUmVtb3ZhbCl7Zi5zZXRGb3JSZW1vdmFsPSExLGYuc2V0''@;'; put 'put ''Rm9yTW92ZT0hMDtjb25zdCB2PXRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5pbmRleE9mKGEpO3Y+PTAmJnRoaXMuY29sbGVjdGVkTGVhdmVFbGVtZW50cy5zcGxpY2UodiwxKX1pZihsKXtjb25zdCB2PXRoaXMuX2ZldGNoTmFtZXNwYWNlKGwpO3YmJnYuaW5zZXJ0Tm9kZShhLGQpfWgm''@;'; put 'put ''JnRoaXMuY29sbGVjdEVudGVyRWxlbWVudChhKX1jb2xsZWN0RW50ZXJFbGVtZW50KGwpe3RoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5wdXNoKGwpfW1hcmtFbGVtZW50QXNEaXNhYmxlZChsLGEpe2E/dGhpcy5kaXNhYmxlZE5vZGVzLmhhcyhsKXx8KHRoaXMuZGlzYWJsZWROb2Rlcy5h''@;'; put 'put ''ZGQobCksQTIobCxQRykpOnRoaXMuZGlzYWJsZWROb2Rlcy5oYXMobCkmJih0aGlzLmRpc2FibGVkTm9kZXMuZGVsZXRlKGwpLGVfKGwsUEcpKX1yZW1vdmVOb2RlKGwsYSxkKXtpZihiTyhhKSl7dGhpcy5zY2hlZHVsZXI/Lm5vdGlmeSgpO2NvbnN0IGg9bD90aGlzLl9mZXRjaE5hbWVzcGFj''@;'; put 'put ''ZShsKTpudWxsO2g/aC5yZW1vdmVOb2RlKGEsZCk6dGhpcy5tYXJrRWxlbWVudEFzUmVtb3ZlZChsLGEsITEsZCk7Y29uc3QgZj10aGlzLm5hbWVzcGFjZXNCeUhvc3RFbGVtZW50LmdldChhKTtmJiZmLmlkIT09bCYmZi5yZW1vdmVOb2RlKGEsZCl9ZWxzZSB0aGlzLl9vblJlbW92YWxDb21w''@;'; put 'put ''bGV0ZShhLGQpfW1hcmtFbGVtZW50QXNSZW1vdmVkKGwsYSxkLGgsZil7dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLnB1c2goYSksYVtxZl09e25hbWVzcGFjZUlkOmwsc2V0Rm9yUmVtb3ZhbDpoLGhhc0FuaW1hdGlvbjpkLHJlbW92ZWRCZWZvcmVRdWVyaWVkOiExLHByZXZpb3VzVHJp''@;'; put 'put ''Z2dlcnNWYWx1ZXM6Zn19bGlzdGVuKGwsYSxkLGgsZil7cmV0dXJuIGJPKGEpP3RoaXMuX2ZldGNoTmFtZXNwYWNlKGwpLmxpc3RlbihhLGQsaCxmKTooKT0+e319X2J1aWxkSW5zdHJ1Y3Rpb24obCxhLGQsaCxmKXtyZXR1cm4gbC50cmFuc2l0aW9uLmJ1aWxkKHRoaXMuZHJpdmVyLGwuZWxl''@;'; put 'put ''bWVudCxsLmZyb21TdGF0ZS52YWx1ZSxsLnRvU3RhdGUudmFsdWUsZCxoLGwuZnJvbVN0YXRlLm9wdGlvbnMsbC50b1N0YXRlLm9wdGlvbnMsYSxmKX1kZXN0cm95SW5uZXJBbmltYXRpb25zKGwpe2xldCBhPXRoaXMuZHJpdmVyLnF1ZXJ5KGwsdU8sITApO2EuZm9yRWFjaChkPT50aGlzLmRl''@;'; put 'put ''c3Ryb3lBY3RpdmVBbmltYXRpb25zRm9yRWxlbWVudChkKSksMCE9dGhpcy5wbGF5ZXJzQnlRdWVyaWVkRWxlbWVudC5zaXplJiYoYT10aGlzLmRyaXZlci5xdWVyeShsLE1HLCEwKSxhLmZvckVhY2goZD0+dGhpcy5maW5pc2hBY3RpdmVRdWVyaWVkQW5pbWF0aW9uT25FbGVtZW50KGQpKSl9''@;'; put 'put ''ZGVzdHJveUFjdGl2ZUFuaW1hdGlvbnNGb3JFbGVtZW50KGwpe2NvbnN0IGE9dGhpcy5wbGF5ZXJzQnlFbGVtZW50LmdldChsKTthJiZhLmZvckVhY2goZD0+e2QucXVldWVkP2QubWFya2VkRm9yRGVzdHJveT0hMDpkLmRlc3Ryb3koKX0pfWZpbmlzaEFjdGl2ZVF1ZXJpZWRBbmltYXRpb25P''@;'; put 'put ''bkVsZW1lbnQobCl7Y29uc3QgYT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldChsKTthJiZhLmZvckVhY2goZD0+ZC5maW5pc2goKSl9d2hlblJlbmRlcmluZ0RvbmUoKXtyZXR1cm4gbmV3IFByb21pc2UobD0+e2lmKHRoaXMucGxheWVycy5sZW5ndGgpcmV0dXJuIFRtKHRoaXMu''@;'; put 'put ''cGxheWVycykub25Eb25lKCgpPT5sKCkpO2woKX0pfXByb2Nlc3NMZWF2ZU5vZGUobCl7Y29uc3QgYT1sW3FmXTtpZihhJiZhLnNldEZvclJlbW92YWwpe2lmKGxbcWZdPVNoZSxhLm5hbWVzcGFjZUlkKXt0aGlzLmRlc3Ryb3lJbm5lckFuaW1hdGlvbnMobCk7Y29uc3QgZD10aGlzLl9mZXRj''@;'; put 'put ''aE5hbWVzcGFjZShhLm5hbWVzcGFjZUlkKTtkJiZkLmNsZWFyRWxlbWVudENhY2hlKGwpfXRoaXMuX29uUmVtb3ZhbENvbXBsZXRlKGwsYS5zZXRGb3JSZW1vdmFsKX1sLmNsYXNzTGlzdD8uY29udGFpbnMoUEcpJiZ0aGlzLm1hcmtFbGVtZW50QXNEaXNhYmxlZChsLCExKSx0aGlzLmRyaXZl''@;'; put 'put ''ci5xdWVyeShsLCIubmctYW5pbWF0ZS1kaXNhYmxlZCIsITApLmZvckVhY2goZD0+e3RoaXMubWFya0VsZW1lbnRBc0Rpc2FibGVkKGQsITEpfSl9Zmx1c2gobD0tMSl7bGV0IGE9W107aWYodGhpcy5uZXdIb3N0RWxlbWVudHMuc2l6ZSYmKHRoaXMubmV3SG9zdEVsZW1lbnRzLmZvckVhY2go''@;'; put 'put ''KGQsaCk9PnRoaXMuX2JhbGFuY2VOYW1lc3BhY2VMaXN0KGQsaCkpLHRoaXMubmV3SG9zdEVsZW1lbnRzLmNsZWFyKCkpLHRoaXMudG90YWxBbmltYXRpb25zJiZ0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMubGVuZ3RoKWZvcihsZXQgZD0wO2Q8dGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1l''@;'; put 'put ''bnRzLmxlbmd0aDtkKyspQTIodGhpcy5jb2xsZWN0ZWRFbnRlckVsZW1lbnRzW2RdLCJuZy1zdGFyLWluc2VydGVkIik7aWYodGhpcy5fbmFtZXNwYWNlTGlzdC5sZW5ndGgmJih0aGlzLnRvdGFsUXVldWVkUGxheWVyc3x8dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aCkpe2Nv''@;'; put 'put ''bnN0IGQ9W107dHJ5e2E9dGhpcy5fZmx1c2hBbmltYXRpb25zKGQsbCl9ZmluYWxseXtmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grKylkW2hdKCl9fWVsc2UgZm9yKGxldCBkPTA7ZDx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoO2QrKyl0aGlzLnByb2Nlc3NMZWF2ZU5vZGUo''@;'; put 'put ''dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzW2RdKTtpZih0aGlzLnRvdGFsUXVldWVkUGxheWVycz0wLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cy5sZW5ndGg9MCx0aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHMubGVuZ3RoPTAsdGhpcy5fZmx1c2hGbnMuZm9yRWFjaChkPT5kKCkp''@;'; put 'put ''LHRoaXMuX2ZsdXNoRm5zPVtdLHRoaXMuX3doZW5RdWlldEZucy5sZW5ndGgpe2NvbnN0IGQ9dGhpcy5fd2hlblF1aWV0Rm5zO3RoaXMuX3doZW5RdWlldEZucz1bXSxhLmxlbmd0aD9UbShhKS5vbkRvbmUoKCk9PntkLmZvckVhY2goaD0+aCgpKX0pOmQuZm9yRWFjaChoPT5oKCkpfX1yZXBv''@;'; put 'put ''cnRFcnJvcihsKXt0aHJvdyBmdW5jdGlvbiBHWWUoYyl7cmV0dXJuIG5ldyBlcigzNDAyLCExKX0oKX1fZmx1c2hBbmltYXRpb25zKGwsYSl7Y29uc3QgZD1uZXcgZ08saD1bXSxmPW5ldyBNYXAsdj1bXSxNPW5ldyBNYXAsRD1uZXcgTWFwLFo9bmV3IE1hcCxuZT1uZXcgU2V0O3RoaXMuZGlz''@;'; put 'put ''YWJsZWROb2Rlcy5mb3JFYWNoKFhuPT57bmUuYWRkKFhuKTtjb25zdCBJcj10aGlzLmRyaXZlci5xdWVyeShYbiwiLm5nLWFuaW1hdGUtcXVldWVkIiwhMCk7Zm9yKGxldCAkcj0wOyRyPElyLmxlbmd0aDskcisrKW5lLmFkZChJclskcl0pfSk7Y29uc3QgY2U9dGhpcy5ib2R5Tm9kZSxiZT1B''@;'; put 'put ''cnJheS5mcm9tKHRoaXMuc3RhdGVzQnlFbGVtZW50LmtleXMoKSksRWU9RWhlKGJlLHRoaXMuY29sbGVjdGVkRW50ZXJFbGVtZW50cyksQmU9bmV3IE1hcDtsZXQgcWU9MDtFZS5mb3JFYWNoKChYbixJcik9Pntjb25zdCAkcj1TRytxZSsrO0JlLnNldChJciwkciksWG4uZm9yRWFjaCh3aT0+''@;'; put 'put ''QTIod2ksJHIpKX0pO2NvbnN0IG50PVtdLGx0PW5ldyBTZXQsbXQ9bmV3IFNldDtmb3IobGV0IFhuPTA7WG48dGhpcy5jb2xsZWN0ZWRMZWF2ZUVsZW1lbnRzLmxlbmd0aDtYbisrKXtjb25zdCBJcj10aGlzLmNvbGxlY3RlZExlYXZlRWxlbWVudHNbWG5dLCRyPUlyW3FmXTskciYmJHIuc2V0''@;'; put 'put ''Rm9yUmVtb3ZhbCYmKG50LnB1c2goSXIpLGx0LmFkZChJciksJHIuaGFzQW5pbWF0aW9uP3RoaXMuZHJpdmVyLnF1ZXJ5KElyLCIubmctc3Rhci1pbnNlcnRlZCIsITApLmZvckVhY2god2k9Pmx0LmFkZCh3aSkpOm10LmFkZChJcikpfWNvbnN0IEp0PW5ldyBNYXAseW49RWhlKGJlLEFycmF5''@;'; put 'put ''LmZyb20obHQpKTt5bi5mb3JFYWNoKChYbixJcik9Pntjb25zdCAkcj1sTytxZSsrO0p0LnNldChJciwkciksWG4uZm9yRWFjaCh3aT0+QTIod2ksJHIpKX0pLGwucHVzaCgoKT0+e0VlLmZvckVhY2goKFhuLElyKT0+e2NvbnN0ICRyPUJlLmdldChJcik7WG4uZm9yRWFjaCh3aT0+ZV8od2ks''@;'; put 'put ''JHIpKX0pLHluLmZvckVhY2goKFhuLElyKT0+e2NvbnN0ICRyPUp0LmdldChJcik7WG4uZm9yRWFjaCh3aT0+ZV8od2ksJHIpKX0pLG50LmZvckVhY2goWG49Pnt0aGlzLnByb2Nlc3NMZWF2ZU5vZGUoWG4pfSl9KTtjb25zdCBDbj1bXSx0bj1bXTtmb3IobGV0IFhuPXRoaXMuX25hbWVzcGFj''@;'; put 'put ''ZUxpc3QubGVuZ3RoLTE7WG4+PTA7WG4tLSl0aGlzLl9uYW1lc3BhY2VMaXN0W1huXS5kcmFpblF1ZXVlZFRyYW5zaXRpb25zKGEpLmZvckVhY2goJHI9Pntjb25zdCB3aT0kci5wbGF5ZXIsUWk9JHIuZWxlbWVudDtpZihDbi5wdXNoKHdpKSx0aGlzLmNvbGxlY3RlZEVudGVyRWxlbWVudHMu''@;'; put 'put ''bGVuZ3RoKXtjb25zdCBVcj1RaVtxZl07aWYoVXImJlVyLnNldEZvck1vdmUpe2lmKFVyLnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMmJlVyLnByZXZpb3VzVHJpZ2dlcnNWYWx1ZXMuaGFzKCRyLnRyaWdnZXJOYW1lKSl7Y29uc3QgWXI9VXIucHJldmlvdXNUcmlnZ2Vyc1ZhbHVlcy5nZXQoJHIu''@;'; put 'put ''dHJpZ2dlck5hbWUpLE5pPXRoaXMuc3RhdGVzQnlFbGVtZW50LmdldCgkci5lbGVtZW50KTtpZihOaSYmTmkuaGFzKCRyLnRyaWdnZXJOYW1lKSl7Y29uc3Qgcm49TmkuZ2V0KCRyLnRyaWdnZXJOYW1lKTtybi52YWx1ZT1ZcixOaS5zZXQoJHIudHJpZ2dlck5hbWUscm4pfX1yZXR1cm4gdm9p''@;'; put 'put ''ZCB3aS5kZXN0cm95KCl9fWNvbnN0IHZ0PSFjZXx8IXRoaXMuZHJpdmVyLmNvbnRhaW5zRWxlbWVudChjZSxRaSksTnQ9SnQuZ2V0KFFpKSxXdD1CZS5nZXQoUWkpLGduPXRoaXMuX2J1aWxkSW5zdHJ1Y3Rpb24oJHIsZCxXdCxOdCx2dCk7aWYoZ24uZXJyb3JzJiZnbi5lcnJvcnMubGVuZ3Ro''@;'; put 'put ''KXJldHVybiB2b2lkIHRuLnB1c2goZ24pO2lmKHZ0KXJldHVybiB3aS5vblN0YXJ0KCgpPT5SNyhRaSxnbi5mcm9tU3R5bGVzKSksd2kub25EZXN0cm95KCgpPT55cChRaSxnbi50b1N0eWxlcykpLHZvaWQgaC5wdXNoKHdpKTtpZigkci5pc0ZhbGxiYWNrVHJhbnNpdGlvbilyZXR1cm4gd2ku''@;'; put 'put ''b25TdGFydCgoKT0+UjcoUWksZ24uZnJvbVN0eWxlcykpLHdpLm9uRGVzdHJveSgoKT0+eXAoUWksZ24udG9TdHlsZXMpKSx2b2lkIGgucHVzaCh3aSk7Y29uc3QgJG49W107Z24udGltZWxpbmVzLmZvckVhY2goVXI9PntVci5zdHJldGNoU3RhcnRpbmdLZXlmcmFtZT0hMCx0aGlzLmRpc2Fi''@;'; put 'put ''bGVkTm9kZXMuaGFzKFVyLmVsZW1lbnQpfHwkbi5wdXNoKFVyKX0pLGduLnRpbWVsaW5lcz0kbixkLmFwcGVuZChRaSxnbi50aW1lbGluZXMpLHYucHVzaCh7aW5zdHJ1Y3Rpb246Z24scGxheWVyOndpLGVsZW1lbnQ6UWl9KSxnbi5xdWVyaWVkRWxlbWVudHMuZm9yRWFjaChVcj0+TWgoTSxV''@;'; put 'put ''cixbXSkucHVzaCh3aSkpLGduLnByZVN0eWxlUHJvcHMuZm9yRWFjaCgoVXIsWXIpPT57aWYoVXIuc2l6ZSl7bGV0IE5pPUQuZ2V0KFlyKTtOaXx8RC5zZXQoWXIsTmk9bmV3IFNldCksVXIuZm9yRWFjaCgocm4sdW4pPT5OaS5hZGQodW4pKX19KSxnbi5wb3N0U3R5bGVQcm9wcy5mb3JFYWNo''@;'; put 'put ''KChVcixZcik9PntsZXQgTmk9Wi5nZXQoWXIpO05pfHxaLnNldChZcixOaT1uZXcgU2V0KSxVci5mb3JFYWNoKChybix1bik9Pk5pLmFkZCh1bikpfSl9KTtpZih0bi5sZW5ndGgpe2NvbnN0IFhuPVtdO3RuLmZvckVhY2goSXI9PntYbi5wdXNoKGZ1bmN0aW9uICRZZShjLGwpe3JldHVybiBu''@;'; put 'put ''ZXcgZXIoMzUwNSwhMSl9KCkpfSksQ24uZm9yRWFjaChJcj0+SXIuZGVzdHJveSgpKSx0aGlzLnJlcG9ydEVycm9yKFhuKX1jb25zdCB4bj1uZXcgTWFwLFFuPW5ldyBNYXA7di5mb3JFYWNoKFhuPT57Y29uc3QgSXI9WG4uZWxlbWVudDtkLmhhcyhJcikmJihRbi5zZXQoSXIsSXIpLHRoaXMu''@;'; put 'put ''X2JlZm9yZUFuaW1hdGlvbkJ1aWxkKFhuLnBsYXllci5uYW1lc3BhY2VJZCxYbi5pbnN0cnVjdGlvbix4bikpfSksaC5mb3JFYWNoKFhuPT57Y29uc3QgSXI9WG4uZWxlbWVudDt0aGlzLl9nZXRQcmV2aW91c1BsYXllcnMoSXIsITEsWG4ubmFtZXNwYWNlSWQsWG4udHJpZ2dlck5hbWUsbnVs''@;'; put 'put ''bCkuZm9yRWFjaCh3aT0+e01oKHhuLElyLFtdKS5wdXNoKHdpKSx3aS5kZXN0cm95KCl9KX0pO2NvbnN0IHlpPW50LmZpbHRlcihYbj0+QWhlKFhuLEQsWikpLHlyPW5ldyBNYXA7eGhlKHlyLHRoaXMuZHJpdmVyLG10LFosdGcpLmZvckVhY2goWG49PntBaGUoWG4sRCxaKSYmeWkucHVzaChY''@;'; put 'put ''bil9KTtjb25zdCBpaT1uZXcgTWFwO0VlLmZvckVhY2goKFhuLElyKT0+e3hoZShpaSx0aGlzLmRyaXZlcixuZXcgU2V0KFhuKSxELCIhIil9KSx5aS5mb3JFYWNoKFhuPT57Y29uc3QgSXI9eXIuZ2V0KFhuKSwkcj1paS5nZXQoWG4pO3lyLnNldChYbixuZXcgTWFwKFsuLi5Jcj8uZW50cmll''@;'; put 'put ''cygpPz9bXSwuLi4kcj8uZW50cmllcygpPz9bXV0pKX0pO2NvbnN0IF9pPVtdLFBuPVtdLGpyPXt9O3YuZm9yRWFjaChYbj0+e2NvbnN0e2VsZW1lbnQ6SXIscGxheWVyOiRyLGluc3RydWN0aW9uOndpfT1YbjtpZihkLmhhcyhJcikpe2lmKG5lLmhhcyhJcikpcmV0dXJuICRyLm9uRGVzdHJv''@;'; put 'put ''eSgoKT0+eXAoSXIsd2kudG9TdHlsZXMpKSwkci5kaXNhYmxlZD0hMCwkci5vdmVycmlkZVRvdGFsVGltZSh3aS50b3RhbFRpbWUpLHZvaWQgaC5wdXNoKCRyKTtsZXQgUWk9anI7aWYoUW4uc2l6ZT4xKXtsZXQgTnQ9SXI7Y29uc3QgV3Q9W107Zm9yKDtOdD1OdC5wYXJlbnROb2RlOyl7Y29u''@;'; put 'put ''c3QgZ249UW4uZ2V0KE50KTtpZihnbil7UWk9Z247YnJlYWt9V3QucHVzaChOdCl9V3QuZm9yRWFjaChnbj0+UW4uc2V0KGduLFFpKSl9Y29uc3QgdnQ9dGhpcy5fYnVpbGRBbmltYXRpb24oJHIubmFtZXNwYWNlSWQsd2kseG4sZixpaSx5cik7aWYoJHIuc2V0UmVhbFBsYXllcih2dCksUWk9''@;'; put 'put ''PT1qcilfaS5wdXNoKCRyKTtlbHNle2NvbnN0IE50PXRoaXMucGxheWVyc0J5RWxlbWVudC5nZXQoUWkpO050JiZOdC5sZW5ndGgmJigkci5wYXJlbnRQbGF5ZXI9VG0oTnQpKSxoLnB1c2goJHIpfX1lbHNlIFI3KElyLHdpLmZyb21TdHlsZXMpLCRyLm9uRGVzdHJveSgoKT0+eXAoSXIsd2ku''@;'; put 'put ''dG9TdHlsZXMpKSxQbi5wdXNoKCRyKSxuZS5oYXMoSXIpJiZoLnB1c2goJHIpfSksUG4uZm9yRWFjaChYbj0+e2NvbnN0IElyPWYuZ2V0KFhuLmVsZW1lbnQpO2lmKElyJiZJci5sZW5ndGgpe2NvbnN0ICRyPVRtKElyKTtYbi5zZXRSZWFsUGxheWVyKCRyKX19KSxoLmZvckVhY2goWG49PntY''@;'; put 'put ''bi5wYXJlbnRQbGF5ZXI/WG4uc3luY1BsYXllckV2ZW50cyhYbi5wYXJlbnRQbGF5ZXIpOlhuLmRlc3Ryb3koKX0pO2ZvcihsZXQgWG49MDtYbjxudC5sZW5ndGg7WG4rKyl7Y29uc3QgSXI9bnRbWG5dLCRyPUlyW3FmXTtpZihlXyhJcixsTyksJHImJiRyLmhhc0FuaW1hdGlvbiljb250aW51''@;'; put 'put ''ZTtsZXQgd2k9W107aWYoTS5zaXplKXtsZXQgdnQ9TS5nZXQoSXIpO3Z0JiZ2dC5sZW5ndGgmJndpLnB1c2goLi4udnQpO2xldCBOdD10aGlzLmRyaXZlci5xdWVyeShJcixNRywhMCk7Zm9yKGxldCBXdD0wO1d0PE50Lmxlbmd0aDtXdCsrKXtsZXQgZ249TS5nZXQoTnRbV3RdKTtnbiYmZ24u''@;'; put 'put ''bGVuZ3RoJiZ3aS5wdXNoKC4uLmduKX19Y29uc3QgUWk9d2kuZmlsdGVyKHZ0PT4hdnQuZGVzdHJveWVkKTtRaS5sZW5ndGg/WUdlKHRoaXMsSXIsUWkpOnRoaXMucHJvY2Vzc0xlYXZlTm9kZShJcil9cmV0dXJuIG50Lmxlbmd0aD0wLF9pLmZvckVhY2goWG49Pnt0aGlzLnBsYXllcnMucHVz''@;'; put 'put ''aChYbiksWG4ub25Eb25lKCgpPT57WG4uZGVzdHJveSgpO2NvbnN0IElyPXRoaXMucGxheWVycy5pbmRleE9mKFhuKTt0aGlzLnBsYXllcnMuc3BsaWNlKElyLDEpfSksWG4ucGxheSgpfSksX2l9YWZ0ZXJGbHVzaChsKXt0aGlzLl9mbHVzaEZucy5wdXNoKGwpfWFmdGVyRmx1c2hBbmltYXRp''@;'; put 'put ''b25zRG9uZShsKXt0aGlzLl93aGVuUXVpZXRGbnMucHVzaChsKX1fZ2V0UHJldmlvdXNQbGF5ZXJzKGwsYSxkLGgsZil7bGV0IHY9W107aWYoYSl7Y29uc3QgTT10aGlzLnBsYXllcnNCeVF1ZXJpZWRFbGVtZW50LmdldChsKTtNJiYodj1NKX1lbHNle2NvbnN0IE09dGhpcy5wbGF5ZXJzQnlF''@;'; put 'put ''bGVtZW50LmdldChsKTtpZihNKXtjb25zdCBEPSFmfHxmPT1uRTtNLmZvckVhY2goWj0+e1oucXVldWVkfHwhRCYmWi50cmlnZ2VyTmFtZSE9aHx8di5wdXNoKFopfSl9fXJldHVybihkfHxoKSYmKHY9di5maWx0ZXIoTT0+IShkJiZkIT1NLm5hbWVzcGFjZUlkfHxoJiZoIT1NLnRyaWdnZXJO''@;'; put 'put ''YW1lKSkpLHZ9X2JlZm9yZUFuaW1hdGlvbkJ1aWxkKGwsYSxkKXtjb25zdCBmPWEuZWxlbWVudCx2PWEuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6bCxNPWEuaXNSZW1vdmFsVHJhbnNpdGlvbj92b2lkIDA6YS50cmlnZ2VyTmFtZTtmb3IoY29uc3QgRCBvZiBhLnRpbWVsaW5lcyl7Y29u''@;'; put 'put ''c3QgWj1ELmVsZW1lbnQsbmU9WiE9PWYsY2U9TWgoZCxaLFtdKTt0aGlzLl9nZXRQcmV2aW91c1BsYXllcnMoWixuZSx2LE0sYS50b1N0YXRlKS5mb3JFYWNoKEVlPT57Y29uc3QgQmU9RWUuZ2V0UmVhbFBsYXllcigpO0JlLmJlZm9yZURlc3Ryb3kmJkJlLmJlZm9yZURlc3Ryb3koKSxFZS5k''@;'; put 'put ''ZXN0cm95KCksY2UucHVzaChFZSl9KX1SNyhmLGEuZnJvbVN0eWxlcyl9X2J1aWxkQW5pbWF0aW9uKGwsYSxkLGgsZix2KXtjb25zdCBNPWEudHJpZ2dlck5hbWUsRD1hLmVsZW1lbnQsWj1bXSxuZT1uZXcgU2V0LGNlPW5ldyBTZXQsYmU9YS50aW1lbGluZXMubWFwKEJlPT57Y29uc3QgcWU9''@;'; put 'put ''QmUuZWxlbWVudDtuZS5hZGQocWUpO2NvbnN0IG50PXFlW3FmXTtpZihudCYmbnQucmVtb3ZlZEJlZm9yZVF1ZXJpZWQpcmV0dXJuIG5ldyB5eChCZS5kdXJhdGlvbixCZS5kZWxheSk7Y29uc3QgbHQ9cWUhPT1ELG10PWZ1bmN0aW9uIEdHZShjKXtjb25zdCBsPVtdO3JldHVybiBUaGUoYyxs''@;'; put 'put ''KSxsfSgoZC5nZXQocWUpfHxWR2UpLm1hcCh4bj0+eG4uZ2V0UmVhbFBsYXllcigpKSkuZmlsdGVyKHhuPT4hIXhuLmVsZW1lbnQmJnhuLmVsZW1lbnQ9PT1xZSksSnQ9Zi5nZXQocWUpLHluPXYuZ2V0KHFlKSxDbj1paGUodGhpcy5fbm9ybWFsaXplcixCZS5rZXlmcmFtZXMsSnQseW4pLHRu''@;'; put 'put ''PXRoaXMuX2J1aWxkUGxheWVyKEJlLENuLG10KTtpZihCZS5zdWJUaW1lbGluZSYmaCYmY2UuYWRkKHFlKSxsdCl7Y29uc3QgeG49bmV3IE5HKGwsTSxxZSk7eG4uc2V0UmVhbFBsYXllcih0biksWi5wdXNoKHhuKX1yZXR1cm4gdG59KTtaLmZvckVhY2goQmU9PntNaCh0aGlzLnBsYXllcnNC''@;'; put 'put ''eVF1ZXJpZWRFbGVtZW50LEJlLmVsZW1lbnQsW10pLnB1c2goQmUpLEJlLm9uRG9uZSgoKT0+ZnVuY3Rpb24gVUdlKGMsbCxhKXtsZXQgZD1jLmdldChsKTtpZihkKXtpZihkLmxlbmd0aCl7Y29uc3QgaD1kLmluZGV4T2YoYSk7ZC5zcGxpY2UoaCwxKX0wPT1kLmxlbmd0aCYmYy5kZWxldGUo''@;'; put 'put ''bCl9cmV0dXJuIGR9KHRoaXMucGxheWVyc0J5UXVlcmllZEVsZW1lbnQsQmUuZWxlbWVudCxCZSkpfSksbmUuZm9yRWFjaChCZT0+QTIoQmUsdWhlKSk7Y29uc3QgRWU9VG0oYmUpO3JldHVybiBFZS5vbkRlc3Ryb3koKCk9PntuZS5mb3JFYWNoKEJlPT5lXyhCZSx1aGUpKSx5cChELGEudG9T''@;'; put 'put ''dHlsZXMpfSksY2UuZm9yRWFjaChCZT0+e01oKGgsQmUsW10pLnB1c2goRWUpfSksRWV9X2J1aWxkUGxheWVyKGwsYSxkKXtyZXR1cm4gYS5sZW5ndGg+MD90aGlzLmRyaXZlci5hbmltYXRlKGwuZWxlbWVudCxhLGwuZHVyYXRpb24sbC5kZWxheSxsLmVhc2luZyxkKTpuZXcgeXgobC5kdXJh''@;'; put 'put ''dGlvbixsLmRlbGF5KX19Y2xhc3MgTkd7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMubmFtZXNwYWNlSWQ9bCx0aGlzLnRyaWdnZXJOYW1lPWEsdGhpcy5lbGVtZW50PWQsdGhpcy5fcGxheWVyPW5ldyB5eCx0aGlzLl9jb250YWluc1JlYWxQbGF5ZXI9ITEsdGhpcy5fcXVldWVkQ2FsbGJhY2tz''@;'; put 'put ''PW5ldyBNYXAsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5wYXJlbnRQbGF5ZXI9bnVsbCx0aGlzLm1hcmtlZEZvckRlc3Ryb3k9ITEsdGhpcy5kaXNhYmxlZD0hMSx0aGlzLnF1ZXVlZD0hMCx0aGlzLnRvdGFsVGltZT0wfXNldFJlYWxQbGF5ZXIobCl7dGhpcy5fY29udGFpbnNSZWFsUGxheWVy''@;'; put 'put ''fHwodGhpcy5fcGxheWVyPWwsdGhpcy5fcXVldWVkQ2FsbGJhY2tzLmZvckVhY2goKGEsZCk9PnthLmZvckVhY2goaD0+bUcobCxkLHZvaWQgMCxoKSl9KSx0aGlzLl9xdWV1ZWRDYWxsYmFja3MuY2xlYXIoKSx0aGlzLl9jb250YWluc1JlYWxQbGF5ZXI9ITAsdGhpcy5vdmVycmlkZVRvdGFs''@;'; put 'put ''VGltZShsLnRvdGFsVGltZSksdGhpcy5xdWV1ZWQ9ITEpfWdldFJlYWxQbGF5ZXIoKXtyZXR1cm4gdGhpcy5fcGxheWVyfW92ZXJyaWRlVG90YWxUaW1lKGwpe3RoaXMudG90YWxUaW1lPWx9c3luY1BsYXllckV2ZW50cyhsKXtjb25zdCBhPXRoaXMuX3BsYXllcjthLnRyaWdnZXJDYWxsYmFj''@;'; put 'put ''ayYmbC5vblN0YXJ0KCgpPT5hLnRyaWdnZXJDYWxsYmFjaygic3RhcnQiKSksbC5vbkRvbmUoKCk9PnRoaXMuZmluaXNoKCkpLGwub25EZXN0cm95KCgpPT50aGlzLmRlc3Ryb3koKSl9X3F1ZXVlRXZlbnQobCxhKXtNaCh0aGlzLl9xdWV1ZWRDYWxsYmFja3MsbCxbXSkucHVzaChhKX1vbkRv''@;'; put 'put ''bmUobCl7dGhpcy5xdWV1ZWQmJnRoaXMuX3F1ZXVlRXZlbnQoImRvbmUiLGwpLHRoaXMuX3BsYXllci5vbkRvbmUobCl9b25TdGFydChsKXt0aGlzLnF1ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgic3RhcnQiLGwpLHRoaXMuX3BsYXllci5vblN0YXJ0KGwpfW9uRGVzdHJveShsKXt0aGlzLnF1''@;'; put 'put ''ZXVlZCYmdGhpcy5fcXVldWVFdmVudCgiZGVzdHJveSIsbCksdGhpcy5fcGxheWVyLm9uRGVzdHJveShsKX1pbml0KCl7dGhpcy5fcGxheWVyLmluaXQoKX1oYXNTdGFydGVkKCl7cmV0dXJuIXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIuaGFzU3RhcnRlZCgpfXBsYXkoKXshdGhpcy5xdWV1''@;'; put 'put ''ZWQmJnRoaXMuX3BsYXllci5wbGF5KCl9cGF1c2UoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5wYXVzZSgpfXJlc3RhcnQoKXshdGhpcy5xdWV1ZWQmJnRoaXMuX3BsYXllci5yZXN0YXJ0KCl9ZmluaXNoKCl7dGhpcy5fcGxheWVyLmZpbmlzaCgpfWRlc3Ryb3koKXt0aGlzLmRlc3Ry''@;'; put 'put ''b3llZD0hMCx0aGlzLl9wbGF5ZXIuZGVzdHJveSgpfXJlc2V0KCl7IXRoaXMucXVldWVkJiZ0aGlzLl9wbGF5ZXIucmVzZXQoKX1zZXRQb3NpdGlvbihsKXt0aGlzLnF1ZXVlZHx8dGhpcy5fcGxheWVyLnNldFBvc2l0aW9uKGwpfWdldFBvc2l0aW9uKCl7cmV0dXJuIHRoaXMucXVldWVkPzA6''@;'; put 'put ''dGhpcy5fcGxheWVyLmdldFBvc2l0aW9uKCl9dHJpZ2dlckNhbGxiYWNrKGwpe2NvbnN0IGE9dGhpcy5fcGxheWVyO2EudHJpZ2dlckNhbGxiYWNrJiZhLnRyaWdnZXJDYWxsYmFjayhsKX19ZnVuY3Rpb24gYk8oYyl7cmV0dXJuIGMmJjE9PT1jLm5vZGVUeXBlfWZ1bmN0aW9uIE1oZShjLGwp''@;'; put 'put ''e2NvbnN0IGE9Yy5zdHlsZS5kaXNwbGF5O3JldHVybiBjLnN0eWxlLmRpc3BsYXk9bD8/Im5vbmUiLGF9ZnVuY3Rpb24geGhlKGMsbCxhLGQsaCl7Y29uc3QgZj1bXTthLmZvckVhY2goRD0+Zi5wdXNoKE1oZShEKSkpO2NvbnN0IHY9W107ZC5mb3JFYWNoKChELFopPT57Y29uc3QgbmU9bmV3''@;'; put 'put ''IE1hcDtELmZvckVhY2goY2U9Pntjb25zdCBiZT1sLmNvbXB1dGVTdHlsZShaLGNlLGgpO25lLnNldChjZSxiZSksKCFiZXx8MD09YmUubGVuZ3RoKSYmKFpbcWZdPUJHZSx2LnB1c2goWikpfSksYy5zZXQoWixuZSl9KTtsZXQgTT0wO3JldHVybiBhLmZvckVhY2goRD0+TWhlKEQsZltNKytd''@;'; put 'put ''KSksdn1mdW5jdGlvbiBFaGUoYyxsKXtjb25zdCBhPW5ldyBNYXA7aWYoYy5mb3JFYWNoKE09PmEuc2V0KE0sW10pKSwwPT1sLmxlbmd0aClyZXR1cm4gYTtjb25zdCBoPW5ldyBTZXQobCksZj1uZXcgTWFwO2Z1bmN0aW9uIHYoTSl7aWYoIU0pcmV0dXJuIDE7bGV0IEQ9Zi5nZXQoTSk7aWYo''@;'; put 'put ''RClyZXR1cm4gRDtjb25zdCBaPU0ucGFyZW50Tm9kZTtyZXR1cm4gRD1hLmhhcyhaKT9aOmguaGFzKFopPzE6dihaKSxmLnNldChNLEQpLER9cmV0dXJuIGwuZm9yRWFjaChNPT57Y29uc3QgRD12KE0pOzEhPT1EJiZhLmdldChEKS5wdXNoKE0pfSksYX1mdW5jdGlvbiBBMihjLGwpe2MuY2xh''@;'; put 'put ''c3NMaXN0Py5hZGQobCl9ZnVuY3Rpb24gZV8oYyxsKXtjLmNsYXNzTGlzdD8ucmVtb3ZlKGwpfWZ1bmN0aW9uIFlHZShjLGwsYSl7VG0oYSkub25Eb25lKCgpPT5jLnByb2Nlc3NMZWF2ZU5vZGUobCkpfWZ1bmN0aW9uIFRoZShjLGwpe2ZvcihsZXQgYT0wO2E8Yy5sZW5ndGg7YSsrKXtjb25z''@;'; put 'put ''dCBkPWNbYV07ZCBpbnN0YW5jZW9mIHcwZT9UaGUoZC5wbGF5ZXJzLGwpOmwucHVzaChkKX19ZnVuY3Rpb24gQWhlKGMsbCxhKXtjb25zdCBkPWEuZ2V0KGMpO2lmKCFkKXJldHVybiExO2xldCBoPWwuZ2V0KGMpO3JldHVybiBoP2QuZm9yRWFjaChmPT5oLmFkZChmKSk6bC5zZXQoYyxkKSxh''@;'; put 'put ''LmRlbGV0ZShjKSwhMH1jbGFzcyByRXtjb25zdHJ1Y3RvcihsLGEsZCxoKXt0aGlzLl9kcml2ZXI9YSx0aGlzLl9ub3JtYWxpemVyPWQsdGhpcy5fdHJpZ2dlckNhY2hlPXt9LHRoaXMub25SZW1vdmFsQ29tcGxldGU9KGYsdik9Pnt9LHRoaXMuX3RyYW5zaXRpb25FbmdpbmU9bmV3IHpHZShs''@;'; put 'put ''LmJvZHksYSxkLGgpLHRoaXMuX3RpbWVsaW5lRW5naW5lPW5ldyBPR2UobC5ib2R5LGEsZCksdGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5vblJlbW92YWxDb21wbGV0ZT0oZix2KT0+dGhpcy5vblJlbW92YWxDb21wbGV0ZShmLHYpfXJlZ2lzdGVyVHJpZ2dlcihsLGEsZCxoLGYpe2NvbnN0IHY9''@;'; put 'put ''bCsiLSIraDtsZXQgTT10aGlzLl90cmlnZ2VyQ2FjaGVbdl07aWYoIU0pe2NvbnN0IEQ9W10sbmU9a0codGhpcy5fZHJpdmVyLGYsRCxbXSk7aWYoRC5sZW5ndGgpdGhyb3cgZnVuY3Rpb24gSFllKGMsbCl7cmV0dXJuIG5ldyBlcigzNDA0LCExKX0oKTtNPWZ1bmN0aW9uIERHZShjLGwsYSl7''@;'; put 'put ''cmV0dXJuIG5ldyBJR2UoYyxsLGEpfShoLG5lLHRoaXMuX25vcm1hbGl6ZXIpLHRoaXMuX3RyaWdnZXJDYWNoZVt2XT1NfXRoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVnaXN0ZXJUcmlnZ2VyKGEsaCxNKX1yZWdpc3RlcihsLGEpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUucmVnaXN0ZXIobCxh''@;'; put 'put ''KX1kZXN0cm95KGwsYSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5kZXN0cm95KGwsYSl9b25JbnNlcnQobCxhLGQsaCl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5pbnNlcnROb2RlKGwsYSxkLGgpfW9uUmVtb3ZlKGwsYSxkKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLnJlbW92ZU5vZGUobCxh''@;'; put 'put ''LGQpfWRpc2FibGVBbmltYXRpb25zKGwsYSl7dGhpcy5fdHJhbnNpdGlvbkVuZ2luZS5tYXJrRWxlbWVudEFzRGlzYWJsZWQobCxhKX1wcm9jZXNzKGwsYSxkLGgpe2lmKCJAIj09ZC5jaGFyQXQoMCkpe2NvbnN0W2Ysdl09b2hlKGQpO3RoaXMuX3RpbWVsaW5lRW5naW5lLmNvbW1hbmQoZixh''@;'; put 'put ''LHYsaCl9ZWxzZSB0aGlzLl90cmFuc2l0aW9uRW5naW5lLnRyaWdnZXIobCxhLGQsaCl9bGlzdGVuKGwsYSxkLGgsZil7aWYoIkAiPT1kLmNoYXJBdCgwKSl7Y29uc3RbdixNXT1vaGUoZCk7cmV0dXJuIHRoaXMuX3RpbWVsaW5lRW5naW5lLmxpc3Rlbih2LGEsTSxmKX1yZXR1cm4gdGhpcy5f''@;'; put 'put ''dHJhbnNpdGlvbkVuZ2luZS5saXN0ZW4obCxhLGQsaCxmKX1mbHVzaChsPS0xKXt0aGlzLl90cmFuc2l0aW9uRW5naW5lLmZsdXNoKGwpfWdldCBwbGF5ZXJzKCl7cmV0dXJuWy4uLnRoaXMuX3RyYW5zaXRpb25FbmdpbmUucGxheWVycywuLi50aGlzLl90aW1lbGluZUVuZ2luZS5wbGF5ZXJz''@;'; put 'put ''XX13aGVuUmVuZGVyaW5nRG9uZSgpe3JldHVybiB0aGlzLl90cmFuc2l0aW9uRW5naW5lLndoZW5SZW5kZXJpbmdEb25lKCl9YWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKGwpe3RoaXMuX3RyYW5zaXRpb25FbmdpbmUuYWZ0ZXJGbHVzaEFuaW1hdGlvbnNEb25lKGwpfX1jbGFzcyBpRXtzdGF0''@;'; put 'put ''aWN7dGhpcy5pbml0aWFsU3R5bGVzQnlFbGVtZW50PW5ldyBXZWFrTWFwfWNvbnN0cnVjdG9yKGwsYSxkKXt0aGlzLl9lbGVtZW50PWwsdGhpcy5fc3RhcnRTdHlsZXM9YSx0aGlzLl9lbmRTdHlsZXM9ZCx0aGlzLl9zdGF0ZT0wO2xldCBoPWlFLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuZ2V0''@;'; put 'put ''KGwpO2h8fGlFLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuc2V0KGwsaD1uZXcgTWFwKSx0aGlzLl9pbml0aWFsU3R5bGVzPWh9c3RhcnQoKXt0aGlzLl9zdGF0ZTwxJiYodGhpcy5fc3RhcnRTdHlsZXMmJnlwKHRoaXMuX2VsZW1lbnQsdGhpcy5fc3RhcnRTdHlsZXMsdGhpcy5faW5pdGlhbFN0''@;'; put 'put ''eWxlcyksdGhpcy5fc3RhdGU9MSl9ZmluaXNoKCl7dGhpcy5zdGFydCgpLHRoaXMuX3N0YXRlPDImJih5cCh0aGlzLl9lbGVtZW50LHRoaXMuX2luaXRpYWxTdHlsZXMpLHRoaXMuX2VuZFN0eWxlcyYmKHlwKHRoaXMuX2VsZW1lbnQsdGhpcy5fZW5kU3R5bGVzKSx0aGlzLl9lbmRTdHlsZXM9''@;'; put 'put ''bnVsbCksdGhpcy5fc3RhdGU9MSl9ZGVzdHJveSgpe3RoaXMuZmluaXNoKCksdGhpcy5fc3RhdGU8MyYmKGlFLmluaXRpYWxTdHlsZXNCeUVsZW1lbnQuZGVsZXRlKHRoaXMuX2VsZW1lbnQpLHRoaXMuX3N0YXJ0U3R5bGVzJiYoUjcodGhpcy5fZWxlbWVudCx0aGlzLl9zdGFydFN0eWxlcyks''@;'; put 'put ''dGhpcy5fZW5kU3R5bGVzPW51bGwpLHRoaXMuX2VuZFN0eWxlcyYmKFI3KHRoaXMuX2VsZW1lbnQsdGhpcy5fZW5kU3R5bGVzKSx0aGlzLl9lbmRTdHlsZXM9bnVsbCkseXAodGhpcy5fZWxlbWVudCx0aGlzLl9pbml0aWFsU3R5bGVzKSx0aGlzLl9zdGF0ZT0zKX19ZnVuY3Rpb24gVkcoYyl7''@;'; put 'put ''bGV0IGw9bnVsbDtyZXR1cm4gYy5mb3JFYWNoKChhLGQpPT57KGZ1bmN0aW9uIHFHZShjKXtyZXR1cm4iZGlzcGxheSI9PT1jfHwicG9zaXRpb24iPT09Y30pKGQpJiYobD1sfHxuZXcgTWFwLGwuc2V0KGQsYSkpfSksbH1jbGFzcyBraGV7Y29uc3RydWN0b3IobCxhLGQsaCl7dGhpcy5lbGVt''@;'; put 'put ''ZW50PWwsdGhpcy5rZXlmcmFtZXM9YSx0aGlzLm9wdGlvbnM9ZCx0aGlzLl9zcGVjaWFsU3R5bGVzPWgsdGhpcy5fb25Eb25lRm5zPVtdLHRoaXMuX29uU3RhcnRGbnM9W10sdGhpcy5fb25EZXN0cm95Rm5zPVtdLHRoaXMuX2luaXRpYWxpemVkPSExLHRoaXMuX2ZpbmlzaGVkPSExLHRoaXMu''@;'; put 'put ''X3N0YXJ0ZWQ9ITEsdGhpcy5fZGVzdHJveWVkPSExLHRoaXMuX29yaWdpbmFsT25Eb25lRm5zPVtdLHRoaXMuX29yaWdpbmFsT25TdGFydEZucz1bXSx0aGlzLnRpbWU9MCx0aGlzLnBhcmVudFBsYXllcj1udWxsLHRoaXMuY3VycmVudFNuYXBzaG90PW5ldyBNYXAsdGhpcy5fZHVyYXRpb249''@;'; put 'put ''ZC5kdXJhdGlvbix0aGlzLl9kZWxheT1kLmRlbGF5fHwwLHRoaXMudGltZT10aGlzLl9kdXJhdGlvbit0aGlzLl9kZWxheX1fb25GaW5pc2goKXt0aGlzLl9maW5pc2hlZHx8KHRoaXMuX2ZpbmlzaGVkPSEwLHRoaXMuX29uRG9uZUZucy5mb3JFYWNoKGw9PmwoKSksdGhpcy5fb25Eb25lRm5z''@;'; put 'put ''PVtdKX1pbml0KCl7dGhpcy5fYnVpbGRQbGF5ZXIoKSx0aGlzLl9wcmVwYXJlUGxheWVyQmVmb3JlU3RhcnQoKX1fYnVpbGRQbGF5ZXIoKXtpZih0aGlzLl9pbml0aWFsaXplZClyZXR1cm47dGhpcy5faW5pdGlhbGl6ZWQ9ITA7Y29uc3QgbD10aGlzLmtleWZyYW1lczt0aGlzLmRvbVBsYXll''@;'; put 'put ''cj10aGlzLl90cmlnZ2VyV2ViQW5pbWF0aW9uKHRoaXMuZWxlbWVudCxsLHRoaXMub3B0aW9ucyksdGhpcy5fZmluYWxLZXlmcmFtZT1sLmxlbmd0aD9sW2wubGVuZ3RoLTFdOm5ldyBNYXA7Y29uc3QgYT0oKT0+dGhpcy5fb25GaW5pc2goKTt0aGlzLmRvbVBsYXllci5hZGRFdmVudExpc3Rl''@;'; put 'put ''bmVyKCJmaW5pc2giLGEpLHRoaXMub25EZXN0cm95KCgpPT57dGhpcy5kb21QbGF5ZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZmluaXNoIixhKX0pfV9wcmVwYXJlUGxheWVyQmVmb3JlU3RhcnQoKXt0aGlzLl9kZWxheT90aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCk6dGhpcy5kb21QbGF5''@;'; put 'put ''ZXIucGF1c2UoKX1fY29udmVydEtleWZyYW1lc1RvT2JqZWN0KGwpe2NvbnN0IGE9W107cmV0dXJuIGwuZm9yRWFjaChkPT57YS5wdXNoKE9iamVjdC5mcm9tRW50cmllcyhkKSl9KSxhfV90cmlnZ2VyV2ViQW5pbWF0aW9uKGwsYSxkKXtyZXR1cm4gbC5hbmltYXRlKHRoaXMuX2NvbnZlcnRL''@;'; put 'put ''ZXlmcmFtZXNUb09iamVjdChhKSxkKX1vblN0YXJ0KGwpe3RoaXMuX29yaWdpbmFsT25TdGFydEZucy5wdXNoKGwpLHRoaXMuX29uU3RhcnRGbnMucHVzaChsKX1vbkRvbmUobCl7dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnMucHVzaChsKSx0aGlzLl9vbkRvbmVGbnMucHVzaChsKX1vbkRlc3Ry''@;'; put 'put ''b3kobCl7dGhpcy5fb25EZXN0cm95Rm5zLnB1c2gobCl9cGxheSgpe3RoaXMuX2J1aWxkUGxheWVyKCksdGhpcy5oYXNTdGFydGVkKCl8fCh0aGlzLl9vblN0YXJ0Rm5zLmZvckVhY2gobD0+bCgpKSx0aGlzLl9vblN0YXJ0Rm5zPVtdLHRoaXMuX3N0YXJ0ZWQ9ITAsdGhpcy5fc3BlY2lhbFN0''@;'; put 'put ''eWxlcyYmdGhpcy5fc3BlY2lhbFN0eWxlcy5zdGFydCgpKSx0aGlzLmRvbVBsYXllci5wbGF5KCl9cGF1c2UoKXt0aGlzLmluaXQoKSx0aGlzLmRvbVBsYXllci5wYXVzZSgpfWZpbmlzaCgpe3RoaXMuaW5pdCgpLHRoaXMuX3NwZWNpYWxTdHlsZXMmJnRoaXMuX3NwZWNpYWxTdHlsZXMuZmlu''@;'; put 'put ''aXNoKCksdGhpcy5fb25GaW5pc2goKSx0aGlzLmRvbVBsYXllci5maW5pc2goKX1yZXNldCgpe3RoaXMuX3Jlc2V0RG9tUGxheWVyU3RhdGUoKSx0aGlzLl9kZXN0cm95ZWQ9ITEsdGhpcy5fZmluaXNoZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9vblN0YXJ0Rm5zPXRoaXMuX29yaWdp''@;'; put 'put ''bmFsT25TdGFydEZucyx0aGlzLl9vbkRvbmVGbnM9dGhpcy5fb3JpZ2luYWxPbkRvbmVGbnN9X3Jlc2V0RG9tUGxheWVyU3RhdGUoKXt0aGlzLmRvbVBsYXllciYmdGhpcy5kb21QbGF5ZXIuY2FuY2VsKCl9cmVzdGFydCgpe3RoaXMucmVzZXQoKSx0aGlzLnBsYXkoKX1oYXNTdGFydGVkKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuX3N0YXJ0ZWR9ZGVzdHJveSgpe3RoaXMuX2Rlc3Ryb3llZHx8KHRoaXMuX2Rlc3Ryb3llZD0hMCx0aGlzLl9yZXNldERvbVBsYXllclN0YXRlKCksdGhpcy5fb25GaW5pc2goKSx0aGlzLl9zcGVjaWFsU3R5bGVzJiZ0aGlzLl9zcGVjaWFsU3R5bGVzLmRlc3Ryb3koKSx0''@;'; put 'put ''aGlzLl9vbkRlc3Ryb3lGbnMuZm9yRWFjaChsPT5sKCkpLHRoaXMuX29uRGVzdHJveUZucz1bXSl9c2V0UG9zaXRpb24obCl7dm9pZCAwPT09dGhpcy5kb21QbGF5ZXImJnRoaXMuaW5pdCgpLHRoaXMuZG9tUGxheWVyLmN1cnJlbnRUaW1lPWwqdGhpcy50aW1lfWdldFBvc2l0aW9uKCl7cmV0''@;'; put 'put ''dXJuKyh0aGlzLmRvbVBsYXllci5jdXJyZW50VGltZT8/MCkvdGhpcy50aW1lfWdldCB0b3RhbFRpbWUoKXtyZXR1cm4gdGhpcy5fZGVsYXkrdGhpcy5fZHVyYXRpb259YmVmb3JlRGVzdHJveSgpe2NvbnN0IGw9bmV3IE1hcDt0aGlzLmhhc1N0YXJ0ZWQoKSYmdGhpcy5fZmluYWxLZXlmcmFt''@;'; put 'put ''ZS5mb3JFYWNoKChkLGgpPT57Im9mZnNldCIhPT1oJiZsLnNldChoLHRoaXMuX2ZpbmlzaGVkP2Q6QUcodGhpcy5lbGVtZW50LGgpKX0pLHRoaXMuY3VycmVudFNuYXBzaG90PWx9dHJpZ2dlckNhbGxiYWNrKGwpe2NvbnN0IGE9InN0YXJ0Ij09PWw/dGhpcy5fb25TdGFydEZuczp0aGlzLl9v''@;'; put 'put ''bkRvbmVGbnM7YS5mb3JFYWNoKGQ9PmQoKSksYS5sZW5ndGg9MH19Y2xhc3MgRGhle3ZhbGlkYXRlU3R5bGVQcm9wZXJ0eShsKXtyZXR1cm4hMH12YWxpZGF0ZUFuaW1hdGFibGVTdHlsZVByb3BlcnR5KGwpe3JldHVybiEwfW1hdGNoZXNFbGVtZW50KGwsYSl7cmV0dXJuITF9Y29udGFpbnNF''@;'; put 'put ''bGVtZW50KGwsYSl7cmV0dXJuIHNoZShsLGEpfWdldFBhcmVudEVsZW1lbnQobCl7cmV0dXJuIHlHKGwpfXF1ZXJ5KGwsYSxkKXtyZXR1cm4gbGhlKGwsYSxkKX1jb21wdXRlU3R5bGUobCxhLGQpe3JldHVybiBBRyhsLGEpfWFuaW1hdGUobCxhLGQsaCxmLHY9W10pe2NvbnN0IEQ9e2R1cmF0''@;'; put 'put ''aW9uOmQsZGVsYXk6aCxmaWxsOjA9PWg/ImJvdGgiOiJmb3J3YXJkcyJ9O2YmJihELmVhc2luZz1mKTtjb25zdCBaPW5ldyBNYXAsbmU9di5maWx0ZXIoRWU9PkVlIGluc3RhbmNlb2Yga2hlKTsoZnVuY3Rpb24gc0dlKGMsbCl7cmV0dXJuIDA9PT1jfHwwPT09bH0pKGQsaCkmJm5lLmZvckVh''@;'; put 'put ''Y2goRWU9PntFZS5jdXJyZW50U25hcHNob3QuZm9yRWFjaCgoQmUscWUpPT5aLnNldChxZSxCZSkpfSk7bGV0IGNlPWZ1bmN0aW9uIGlHZShjKXtyZXR1cm4gYy5sZW5ndGg/Y1swXWluc3RhbmNlb2YgTWFwP2M6Yy5tYXAobD0+bmV3IE1hcChPYmplY3QuZW50cmllcyhsKSkpOltdfShhKS5t''@;'; put 'put ''YXAoRWU9Pm5ldyBNYXAoRWUpKTtjZT1mdW5jdGlvbiBsR2UoYyxsLGEpe2lmKGEuc2l6ZSYmbC5sZW5ndGgpe2xldCBkPWxbMF0saD1bXTtpZihhLmZvckVhY2goKGYsdik9PntkLmhhcyh2KXx8aC5wdXNoKHYpLGQuc2V0KHYsZil9KSxoLmxlbmd0aClmb3IobGV0IGY9MTtmPGwubGVuZ3Ro''@;'; put 'put ''O2YrKyl7bGV0IHY9bFtmXTtoLmZvckVhY2goTT0+di5zZXQoTSxBRyhjLE0pKSl9fXJldHVybiBsfShsLGNlLFopO2NvbnN0IGJlPWZ1bmN0aW9uIEtHZShjLGwpe2xldCBhPW51bGwsZD1udWxsO3JldHVybiBBcnJheS5pc0FycmF5KGwpJiZsLmxlbmd0aD8oYT1WRyhsWzBdKSxsLmxlbmd0''@;'; put 'put ''aD4xJiYoZD1WRyhsW2wubGVuZ3RoLTFdKSkpOmwgaW5zdGFuY2VvZiBNYXAmJihhPVZHKGwpKSxhfHxkP25ldyBpRShjLGEsZCk6bnVsbH0obCxjZSk7cmV0dXJuIG5ldyBraGUobCxjZSxELGJlKX19Y29uc3QgSWhlPSJALmRpc2FibGVkIjtjbGFzcyBSaGV7Y29uc3RydWN0b3IobCxhLGQs''@;'; put 'put ''aCl7dGhpcy5uYW1lc3BhY2VJZD1sLHRoaXMuZGVsZWdhdGU9YSx0aGlzLmVuZ2luZT1kLHRoaXMuX29uRGVzdHJveT1oLHRoaXMuXHUwMjc1dHlwZT0wfWdldCBkYXRhKCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuZGF0YX1kZXN0cm95Tm9kZShsKXt0aGlzLmRlbGVnYXRlLmRlc3Ryb3lOb2Rl''@;'; put 'put ''Py4obCl9ZGVzdHJveSgpe3RoaXMuZW5naW5lLmRlc3Ryb3kodGhpcy5uYW1lc3BhY2VJZCx0aGlzLmRlbGVnYXRlKSx0aGlzLmVuZ2luZS5hZnRlckZsdXNoQW5pbWF0aW9uc0RvbmUoKCk9PntxdWV1ZU1pY3JvdGFzaygoKT0+e3RoaXMuZGVsZWdhdGUuZGVzdHJveSgpfSl9KSx0aGlzLl9v''@;'; put 'put ''bkRlc3Ryb3k/LigpfWNyZWF0ZUVsZW1lbnQobCxhKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVFbGVtZW50KGwsYSl9Y3JlYXRlQ29tbWVudChsKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVDb21tZW50KGwpfWNyZWF0ZVRleHQobCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuY3Jl''@;'; put 'put ''YXRlVGV4dChsKX1hcHBlbmRDaGlsZChsLGEpe3RoaXMuZGVsZWdhdGUuYXBwZW5kQ2hpbGQobCxhKSx0aGlzLmVuZ2luZS5vbkluc2VydCh0aGlzLm5hbWVzcGFjZUlkLGEsbCwhMSl9aW5zZXJ0QmVmb3JlKGwsYSxkLGg9ITApe3RoaXMuZGVsZWdhdGUuaW5zZXJ0QmVmb3JlKGwsYSxkKSx0''@;'; put 'put ''aGlzLmVuZ2luZS5vbkluc2VydCh0aGlzLm5hbWVzcGFjZUlkLGEsbCxoKX1yZW1vdmVDaGlsZChsLGEsZCl7dGhpcy5lbmdpbmUub25SZW1vdmUodGhpcy5uYW1lc3BhY2VJZCxhLHRoaXMuZGVsZWdhdGUpfXNlbGVjdFJvb3RFbGVtZW50KGwsYSl7cmV0dXJuIHRoaXMuZGVsZWdhdGUuc2Vs''@;'; put 'put ''ZWN0Um9vdEVsZW1lbnQobCxhKX1wYXJlbnROb2RlKGwpe3JldHVybiB0aGlzLmRlbGVnYXRlLnBhcmVudE5vZGUobCl9bmV4dFNpYmxpbmcobCl7cmV0dXJuIHRoaXMuZGVsZWdhdGUubmV4dFNpYmxpbmcobCl9c2V0QXR0cmlidXRlKGwsYSxkLGgpe3RoaXMuZGVsZWdhdGUuc2V0QXR0cmli''@;'; put 'put ''dXRlKGwsYSxkLGgpfXJlbW92ZUF0dHJpYnV0ZShsLGEsZCl7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVBdHRyaWJ1dGUobCxhLGQpfWFkZENsYXNzKGwsYSl7dGhpcy5kZWxlZ2F0ZS5hZGRDbGFzcyhsLGEpfXJlbW92ZUNsYXNzKGwsYSl7dGhpcy5kZWxlZ2F0ZS5yZW1vdmVDbGFzcyhsLGEpfXNl''@;'; put 'put ''dFN0eWxlKGwsYSxkLGgpe3RoaXMuZGVsZWdhdGUuc2V0U3R5bGUobCxhLGQsaCl9cmVtb3ZlU3R5bGUobCxhLGQpe3RoaXMuZGVsZWdhdGUucmVtb3ZlU3R5bGUobCxhLGQpfXNldFByb3BlcnR5KGwsYSxkKXsiQCI9PWEuY2hhckF0KDApJiZhPT1JaGU/dGhpcy5kaXNhYmxlQW5pbWF0aW9u''@;'; put 'put ''cyhsLCEhZCk6dGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eShsLGEsZCl9c2V0VmFsdWUobCxhKXt0aGlzLmRlbGVnYXRlLnNldFZhbHVlKGwsYSl9bGlzdGVuKGwsYSxkKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4obCxhLGQpfWRpc2FibGVBbmltYXRpb25zKGwsYSl7dGhpcy5lbmdp''@;'; put 'put ''bmUuZGlzYWJsZUFuaW1hdGlvbnMobCxhKX19Y2xhc3MgWEdlIGV4dGVuZHMgUmhle2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7c3VwZXIoYSxkLGgsZiksdGhpcy5mYWN0b3J5PWwsdGhpcy5uYW1lc3BhY2VJZD1hfXNldFByb3BlcnR5KGwsYSxkKXsiQCI9PWEuY2hhckF0KDApPyIuIj09YS5j''@;'; put 'put ''aGFyQXQoMSkmJmE9PUloZT90aGlzLmRpc2FibGVBbmltYXRpb25zKGwsZD12b2lkIDA9PT1kfHwhIWQpOnRoaXMuZW5naW5lLnByb2Nlc3ModGhpcy5uYW1lc3BhY2VJZCxsLGEuc2xpY2UoMSksZCk6dGhpcy5kZWxlZ2F0ZS5zZXRQcm9wZXJ0eShsLGEsZCl9bGlzdGVuKGwsYSxkKXtpZigi''@;'; put 'put ''QCI9PWEuY2hhckF0KDApKXtjb25zdCBoPWZ1bmN0aW9uIEpHZShjKXtzd2l0Y2goYyl7Y2FzZSJib2R5IjpyZXR1cm4gZG9jdW1lbnQuYm9keTtjYXNlImRvY3VtZW50IjpyZXR1cm4gZG9jdW1lbnQ7Y2FzZSJ3aW5kb3ciOnJldHVybiB3aW5kb3c7ZGVmYXVsdDpyZXR1cm4gY319KGwpO2xl''@;'; put 'put ''dCBmPWEuc2xpY2UoMSksdj0iIjtyZXR1cm4iQCIhPWYuY2hhckF0KDApJiYoW2Ysdl09ZnVuY3Rpb24gUUdlKGMpe2NvbnN0IGw9Yy5pbmRleE9mKCIuIik7cmV0dXJuW2Muc3Vic3RyaW5nKDAsbCksYy5zbGljZShsKzEpXX0oZikpLHRoaXMuZW5naW5lLmxpc3Rlbih0aGlzLm5hbWVzcGFj''@;'; put 'put ''ZUlkLGgsZix2LE09Pnt0aGlzLmZhY3Rvcnkuc2NoZWR1bGVMaXN0ZW5lckNhbGxiYWNrKE0uX2RhdGF8fC0xLGQsTSl9KX1yZXR1cm4gdGhpcy5kZWxlZ2F0ZS5saXN0ZW4obCxhLGQpfX1jbGFzcyBlJGV7Y29uc3RydWN0b3IobCxhLGQpe3RoaXMuZGVsZWdhdGU9bCx0aGlzLmVuZ2luZT1h''@;'; put 'put ''LHRoaXMuX3pvbmU9ZCx0aGlzLl9jdXJyZW50SWQ9MCx0aGlzLl9taWNyb3Rhc2tJZD0xLHRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlcj1bXSx0aGlzLl9yZW5kZXJlckNhY2hlPW5ldyBNYXAsdGhpcy5fY2RSZWN1ckRlcHRoPTAsYS5vblJlbW92YWxDb21wbGV0ZT0oaCxmKT0+e2Nv''@;'; put 'put ''bnN0IHY9Zj8ucGFyZW50Tm9kZShoKTt2JiZmLnJlbW92ZUNoaWxkKHYsaCl9fWNyZWF0ZVJlbmRlcmVyKGwsYSl7Y29uc3QgaD10aGlzLmRlbGVnYXRlLmNyZWF0ZVJlbmRlcmVyKGwsYSk7aWYoIWx8fCFhPy5kYXRhPy5hbmltYXRpb24pe2NvbnN0IFo9dGhpcy5fcmVuZGVyZXJDYWNoZTts''@;'; put 'put ''ZXQgbmU9Wi5nZXQoaCk7cmV0dXJuIG5lfHwobmU9bmV3IFJoZSgiIixoLHRoaXMuZW5naW5lLCgpPT5aLmRlbGV0ZShoKSksWi5zZXQoaCxuZSkpLG5lfWNvbnN0IGY9YS5pZCx2PWEuaWQrIi0iK3RoaXMuX2N1cnJlbnRJZDt0aGlzLl9jdXJyZW50SWQrKyx0aGlzLmVuZ2luZS5yZWdpc3Rl''@;'; put 'put ''cih2LGwpO2NvbnN0IE09Wj0+e0FycmF5LmlzQXJyYXkoWik/Wi5mb3JFYWNoKE0pOnRoaXMuZW5naW5lLnJlZ2lzdGVyVHJpZ2dlcihmLHYsbCxaLm5hbWUsWil9O3JldHVybiBhLmRhdGEuYW5pbWF0aW9uLmZvckVhY2goTSksbmV3IFhHZSh0aGlzLHYsaCx0aGlzLmVuZ2luZSl9YmVnaW4o''@;'; put 'put ''KXt0aGlzLl9jZFJlY3VyRGVwdGgrKyx0aGlzLmRlbGVnYXRlLmJlZ2luJiZ0aGlzLmRlbGVnYXRlLmJlZ2luKCl9X3NjaGVkdWxlQ291bnRUYXNrKCl7cXVldWVNaWNyb3Rhc2soKCk9Pnt0aGlzLl9taWNyb3Rhc2tJZCsrfSl9c2NoZWR1bGVMaXN0ZW5lckNhbGxiYWNrKGwsYSxkKXtpZihs''@;'; put 'put ''Pj0wJiZsPHRoaXMuX21pY3JvdGFza0lkKXJldHVybiB2b2lkIHRoaXMuX3pvbmUucnVuKCgpPT5hKGQpKTtjb25zdCBoPXRoaXMuX2FuaW1hdGlvbkNhbGxiYWNrc0J1ZmZlcjswPT1oLmxlbmd0aCYmcXVldWVNaWNyb3Rhc2soKCk9Pnt0aGlzLl96b25lLnJ1bigoKT0+e2guZm9yRWFjaChm''@;'; put 'put ''PT57Y29uc3RbdixNXT1mO3YoTSl9KSx0aGlzLl9hbmltYXRpb25DYWxsYmFja3NCdWZmZXI9W119KX0pLGgucHVzaChbYSxkXSl9ZW5kKCl7dGhpcy5fY2RSZWN1ckRlcHRoLS0sMD09dGhpcy5fY2RSZWN1ckRlcHRoJiZ0aGlzLl96b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5f''@;'; put 'put ''c2NoZWR1bGVDb3VudFRhc2soKSx0aGlzLmVuZ2luZS5mbHVzaCh0aGlzLl9taWNyb3Rhc2tJZCl9KSx0aGlzLmRlbGVnYXRlLmVuZCYmdGhpcy5kZWxlZ2F0ZS5lbmQoKX13aGVuUmVuZGVyaW5nRG9uZSgpe3JldHVybiB0aGlzLmVuZ2luZS53aGVuUmVuZGVyaW5nRG9uZSgpfX1sZXQgdCRl''@;'; put 'put ''PSgoKT0+e2NsYXNzIGMgZXh0ZW5kcyByRXtjb25zdHJ1Y3RvcihhLGQsaCl7c3VwZXIoYSxkLGgsaGkoaGIse29wdGlvbmFsOiEwfSkpfW5nT25EZXN0cm95KCl7dGhpcy5mbHVzaCgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKE1yKHZzKSxN''@;'; put 'put ''cih3RyksTXIoQ0cpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9fXJldHVybiBjfSkoKTtjb25zdCBMaGU9W3twcm92aWRlOkNHLHVzZUZhY3Rvcnk6ZnVuY3Rpb24gbiRlKCl7cmV0dXJuIG5ldyBmaGV9fSx7cHJvdmlkZTpyRSx1''@;'; put 'put ''c2VDbGFzczp0JGV9LHtwcm92aWRlOlM4LHVzZUZhY3Rvcnk6ZnVuY3Rpb24gciRlKGMsbCxhKXtyZXR1cm4gbmV3IGUkZShjLGwsYSl9LGRlcHM6W1FVLHJFLFlvXX1dLEJHPVt7cHJvdmlkZTp3Ryx1c2VGYWN0b3J5OigpPT5uZXcgRGhlfSx7cHJvdmlkZTpBayx1c2VWYWx1ZToiQnJvd3Nl''@;'; put 'put ''ckFuaW1hdGlvbnMifSwuLi5MaGVdLE9oZT1be3Byb3ZpZGU6d0csdXNlQ2xhc3M6X0d9LHtwcm92aWRlOkFrLHVzZVZhbHVlOiJOb29wQW5pbWF0aW9ucyJ9LC4uLkxoZV07bGV0IGkkZT0oKCk9PntjbGFzcyBje3N0YXRpYyB3aXRoQ29uZmlnKGEpe3JldHVybntuZ01vZHVsZTpjLHByb3Zp''@;'; put 'put ''ZGVyczphLmRpc2FibGVBbmltYXRpb25zP09oZTpCR319c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtwcm92aWRlcnM6QkcsaW1wb3J0''@;'; put 'put ''czpbbWFlXX0pfX1yZXR1cm4gY30pKCksbyRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpb''@;'; put 'put ''WyJhcHAtbm90LWZvdW5kIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczozLHZhcnM6MCxjb25zdHM6W1sxLCJjb250ZW50LWFyZWEiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiLDApKDEsInAiKSxMZSgyLCI0MDQgLSBOb3QgRm91''@;'; put 'put ''bmQiKSxoZSgpKCkpfX0pfX1yZXR1cm4gY30pKCksUGhlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9ZG93bmxvYWRGaWxlKGEsZCxoPSJ0eHQiKXtsZXQgZj1uZXcgQmxvYihbYV0se3R5cGU6InRleHQvcGxhaW4ifSk7aWYobmF2aWdhdG9yLmFwcFZlcnNpb24udG9TdHJpbmcoKS5p''@;'; put 'put ''bmRleE9mKCIuTkVUIik+MCl3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZUJsb2IoZixgJHtkfS4ke2h9YCk7ZWxzZXtsZXQgdj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7di5ocmVmPSJkYXRhOnRleHQvcGxhaW4sIitlbmNvZGVVUklDb21wb25lbnQoYSksdi5kb3dubG9hZD1gJHtkfS4k''@;'; put 'put ''e2h9YCxkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHYpLHYuY2xpY2soKSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHYpfX1yZWFkRmlsZShhKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9PntsZXQgZj1uZXcgRmlsZVJlYWRlcjtmLm9ubG9hZD0oKT0+e2YucmVzdWx0JiZkKEpTT04u''@;'; put 'put ''cGFyc2UoZi5yZXN1bHQudG9TdHJpbmcoKSkpfSxmLnJlYWRBc1RleHQoYSl9KX1jbGVhclVwbG9hZElucHV0KGEpe2EudGFyZ2V0LnZhbHVlPSIifXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0''@;'; put 'put ''b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIGEkZShjLGwpezEmYyYmKGxpKDApLGRlKDEsInNwYW4iLDE5KSxMZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpLGRlKDMsInAiKSxMZSg0LCJEZXBsb3lpbmcuLi4iKSxo''@;'; put 'put ''ZSgpLGNpKCkpfWZ1bmN0aW9uIHMkZShjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDMwKX1mdW5jdGlvbiBsJGUoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwzMSl9ZnVuY3Rpb24gYyRlKGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMzApfWZ1bmN0aW9uIHUkZShjLGwpezEmYyYmR3Qo''@;'; put 'put ''MCwiY2xyLWljb24iLDMxKX1mdW5jdGlvbiBkJGUoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDIyKSxndCgxLGMkZSwxLDAsImNsci1pY29uIiwyMykoMix1JGUsMSwwLCJjbHItaWNvbiIsMjQpLGRlKDMsInAiKSxMZSg0LCJDcmVhdGUgZGF0YWJhc2UiKSxoZSgpKCkpLDImYyl7Y29uc3Qg''@;'; put 'put ''YT1PZSgzKTtmZSgpLHhlKCJuZ0lmIixhLmF1dG9EZXBsb3lTdGF0dXMucnVuTWFrZURhdGEpLGZlKCkseGUoIm5nSWYiLCExPT09YS5hdXRvRGVwbG95U3RhdHVzLnJ1bk1ha2VEYXRhKX19ZnVuY3Rpb24gaCRlKGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMzEpfWZ1bmN0aW9uIGYkZShj''@;'; put 'put ''LGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2xpKDApLGRlKDEsInAiLDIwKSxMZSgyLCJEb25lIiksaGUoKSxHdCgzLCJociIsMjEpLGRlKDQsImRpdiIsMjIpLGd0KDUscyRlLDEsMCwiY2xyLWljb24iLDIzKSg2LGwkZSwxLDAsImNsci1pY29uIiwyNCksZGUoNywicCIpLExlKDgsIkRlcGxv''@;'; put 'put ''eSBTQVMgSm9icyIpLGhlKCkoKSxndCg5LGQkZSw1LDIsImRpdiIsMjUpLEd0KDEwLCJociIsMjEpLGRlKDExLCJkaXYiLDI2KSgxMiwiYnV0dG9uIiwyNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5uYXZpZ2F0ZVRvSG9tZSgpKX0pLGd0KDEzLGgkZSwx''@;'; put 'put ''LDAsImNsci1pY29uIiwyNCksTGUoMTQsIiBMQVVOQ0ggLyBDT05GSUdVUkUgIiksaGUoKSxkZSgxNSwiYnV0dG9uIiwyOCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMik7cmV0dXJuIEN0KGguZG93bmxvYWRGaWxlKGgubWFrZURhdGFSZXNwb25zZSwiY3JlYXRl''@;'; put 'put ''LWRhdGFiYXNlLWxvZyIsInR4dCIpKX0pLExlKDE2LCIgRG93bmxvYWQgbG9nICIpLGhlKCkoKSxHdCgxNywiaHIiLDIxKSxkZSgxOCwiZGl2IiwyNikoMTksImJ1dHRvbiIsMjkpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDIpO3JldHVybiBoLmF1dG9kZXBsb3lp''@;'; put 'put ''bmc9ITEsQ3QoaC5hdXRvZGVwbG95RG9uZT0hMSl9KSxMZSgyMCwiIENsb3NlICIpLGhlKCksZGUoMjEsImJ1dHRvbiIsMjkpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikub3BlblNhc1JlcXVlc3RzTW9kYWwoKSl9KSxMZSgyMiwiIFNBUyBSZXF1ZXN0cyAi''@;'; put 'put ''KSxoZSgpKCksY2koKX1pZigyJmMpe2NvbnN0IGE9T2UoMik7ZmUoNSkseGUoIm5nSWYiLGEuYXV0b0RlcGxveVN0YXR1cy5kZXBsb3lTZXJ2aWNlUGFjayksZmUoKSx4ZSgibmdJZiIsIWEuYXV0b0RlcGxveVN0YXR1cy5kZXBsb3lTZXJ2aWNlUGFjayksZmUoMykseGUoIm5nSWYiLG51bGwh''@;'; put 'put ''PT1hLmF1dG9EZXBsb3lTdGF0dXMucnVuTWFrZURhdGEpLGZlKDQpLHhlKCJuZ0lmIiwhMT09PWEuYXV0b0RlcGxveVN0YXR1cy5kZXBsb3lTZXJ2aWNlUGFja3x8ITE9PT1hLmF1dG9EZXBsb3lTdGF0dXMucnVuTWFrZURhdGEpfX1mdW5jdGlvbiBwJGUoYyxsKXtpZigxJmMmJihkZSgwLCJk''@;'; put 'put ''aXYiLDE2KSgxLCJkaXYiLDE3KSxndCgyLGEkZSw1LDAsIm5nLWNvbnRhaW5lciIsMTgpKDMsZiRlLDIzLDQsIm5nLWNvbnRhaW5lciIsMTgpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoMikseGUoIm5nSWYiLCFhLmF1dG9kZXBsb3lEb25lKSxmZSgpLHhlKCJuZ0lmIixhLmF1dG9k''@;'; put 'put ''ZXBsb3lEb25lKX19bGV0IGckZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuZXZlbnRTZXJ2aWNlPWEsdGhpcy5kZXBsb3lTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5sb2dnZXJTZXJ2aWNlPWYsdGhpcy5zYXNKc0NvbmZpZz1uZXcgZmguU0FTanND''@;'; put 'put ''b25maWcsdGhpcy5hcHBMb2M9IiIsdGhpcy5kY1BhdGg9IiIsdGhpcy5zZWxlY3RlZEFkbWluR3JvdXA9IiIsdGhpcy5vbk5hdmlnYXRlVG9Ib21lPW5ldyBxcix0aGlzLm1ha2VEYXRhUmVzcG9uc2U9IiIsdGhpcy5qc29uRmlsZT1udWxsLHRoaXMuYXV0b2RlcGxveWluZz0hMSx0aGlzLmF1''@;'; put 'put ''dG9kZXBsb3lEb25lPSExLHRoaXMucmVjcmVhdGVEYXRhYmFzZU1vZGFsPSExLHRoaXMuaXNTdWJtaXR0aW5nSnNvbj0hMSx0aGlzLmlzSnNvblN1Ym1pdHRlZD0hMSx0aGlzLnJlY3JlYXRlRGF0YWJhc2U9ITEsdGhpcy5jcmVhdGVEYXRhYmFzZUxvYWRpbmc9ITEsdGhpcy5hdXRvRGVwbG95''@;'; put 'put ''U3RhdHVzPXtkZXBsb3lTZXJ2aWNlUGFjazpudWxsLHJ1bk1ha2VEYXRhOm51bGx9fW5nT25Jbml0KCl7fWV4ZWN1dGVKc29uKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5hdXRvZGVwbG95aW5nPSEwLGEuaXNTdWJtaXR0aW5nSnNvbj0hMDt0cnl7eWllbGQgYS5zYXNK''@;'; put 'put ''cy5kZXBsb3lTZXJ2aWNlUGFjayhhLmpzb25GaWxlLGEuZGNBZGFwdGVyU2V0dGluZ3M/LmFwcExvYyx2b2lkIDAsdm9pZCAwLCEwKSxhLmF1dG9EZXBsb3lTdGF0dXMuZGVwbG95U2VydmljZVBhY2s9ITAsYS5pc0pzb25TdWJtaXR0ZWQ9ITB9Y2F0Y2goZCl7bGV0IGg9IiI7cmV0dXJuIGg9''@;'; put 'put ''InN0cmluZyIhPXR5cGVvZiBkLm1lc3NhZ2U/SlNPTi5zdHJpbmdpZnkoZCkucmVwbGFjZSgvXFwvZ20sIiIpOmQubWVzc2FnZSxhLmF1dG9EZXBsb3lTdGF0dXMuZGVwbG95U2VydmljZVBhY2s9ITEsYS5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRGVwbG95IGVycm9yIixgRXhjZXB0''@;'; put 'put ''aW9uOiBcbiAkeyIiIT09aD9oOmR9YCksYS5hdXRvZGVwbG95aW5nPSExLHZvaWQoYS5hdXRvZGVwbG95RG9uZT0hMSl9YS5pc1N1Ym1pdHRpbmdKc29uPSExLGEucmVjcmVhdGVEYXRhYmFzZT9hLmNyZWF0ZURhdGFiYXNlKCk6YS5hdXRvZGVwbG95RG9uZT0hMH0pKCl9Y3JlYXRlRGF0YWJh''@;'; put 'put ''c2UoKXt0aGlzLnNhc0pzLnJlcXVlc3QoInNlcnZpY2VzL2FkbWluL21ha2VkYXRhIix7ZnJvbWpzOlt7QURNSU46dGhpcy5zZWxlY3RlZEFkbWluR3JvdXAsRENQQVRIOnRoaXMuZGNQYXRofV19LHt1c2VDb21wdXRlQXBpOiExLGNvbnRleHROYW1lOnRoaXMuc2FzSnNDb25maWcuY29udGV4''@;'; put 'put ''dE5hbWUsZGVidWc6ITB9LCgpPT57dGhpcy5zYXNTZXJ2aWNlLnNob3VsZExvZ2luLm5leHQoITApfSkudGhlbihoPT57dGhpcy5hdXRvZGVwbG95RG9uZT0hMDt0cnl7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPUpTT04uc3RyaW5naWZ5KGgpfWNhdGNoe3RoaXMubWFrZURhdGFSZXNwb25zZT1o''@;'; put 'put ''fXRoaXMuYXV0b0RlcGxveVN0YXR1cy5ydW5NYWtlRGF0YT0hIShoLnJlc3VsdCYmaC5yZXN1bHQubGVuZ3RoPjApfSkuY2F0Y2goaD0+e3RoaXMuYXV0b0RlcGxveVN0YXR1cy5ydW5NYWtlRGF0YT0hMSx0aGlzLmF1dG9kZXBsb3lEb25lPSEwO3RyeXt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9''@;'; put 'put ''SlNPTi5zdHJpbmdpZnkoaCl9Y2F0Y2h7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPWh9fSl9ZG93bmxvYWRGaWxlKGEsZCxoPSJ0eHQiKXt0aGlzLmRlcGxveVNlcnZpY2UuZG93bmxvYWRGaWxlKGEsZCxoKX1vbkpzb25GaWxlQ2hhbmdlKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9u''@;'; put 'put ''Kigpe2xldCBoPWEudGFyZ2V0LmZpbGVzWzBdO2QuanNvbkZpbGU9eWllbGQgZC5kZXBsb3lTZXJ2aWNlLnJlYWRGaWxlKGgpfSkoKX1yZWNyZWF0ZURhdGFiYXNlQ2xpY2tlZChhKXshMD09PWEudGFyZ2V0LmNoZWNrZWQmJih0aGlzLnJlY3JlYXRlRGF0YWJhc2VNb2RhbD0hMCl9Y2xlYXJV''@;'; put 'put ''cGxvYWRJbnB1dChhKXt0aGlzLmRlcGxveVNlcnZpY2UuY2xlYXJVcGxvYWRJbnB1dChhKX1vcGVuU2FzUmVxdWVzdHNNb2RhbCgpe3RoaXMuZXZlbnRTZXJ2aWNlLm9wZW5SZXF1ZXN0c01vZGFsKCl9bmF2aWdhdGVUb0hvbWUoKXt0aGlzLm9uTmF2aWdhdGVUb0hvbWUuZW1pdCgpfXN0YXRp''@;'; put 'put ''Y3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKHBjKSxHZShQaGUpLEdlKEpzKSxHZShTZCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWF1dG9tYXRpYy1kZXBsb3kiXV0saW5wdXRzOntzYXNKczoic2Fz''@;'; put 'put ''SnMiLHNhc0pzQ29uZmlnOiJzYXNKc0NvbmZpZyIsZGNBZGFwdGVyU2V0dGluZ3M6ImRjQWRhcHRlclNldHRpbmdzIixhcHBMb2M6ImFwcExvYyIsZGNQYXRoOiJkY1BhdGgiLHNlbGVjdGVkQWRtaW5Hcm91cDoic2VsZWN0ZWRBZG1pbkdyb3VwIn0sb3V0cHV0czp7b25OYXZpZ2F0ZVRvSG9t''@;'; put 'put ''ZToib25OYXZpZ2F0ZVRvSG9tZSJ9LGRlY2xzOjQ2LHZhcnM6MTAsY29uc3RzOltbInVwbG9hZEpzb25BdXRvIiwiIl0sWyJjbGFzcyIsImF1dG8tZGVwbG95Iiw0LCJuZ0lmIl0sWzEsInRleHQtY2VudGVyIiwibXktMTUiXSxbImZvciIsImRjbG9jIiwxLCJtdC0yMCIsImNsci1jb250cm9s''@;'; put 'put ''LWxhYmVsIl0sWzEsIm1iLTEwIiwiY2xyLWNvbnRyb2wtY29udGFpbmVyIl0sWzEsImNsci1pbnB1dC13cmFwcGVyIl0sWzEsIm10LTAiXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNoZWNrYm94IiwiY2hlY2tlZCIsIiIsMywibmdNb2RlbENoYW5nZSIsImNsaWNrIiwibmdNb2RlbCJd''@;'; put 'put ''LFsxLCJidG4tYXV0b2RlcGxveSIsImJ0biIsImJ0bi1wcmltYXJ5IiwiZC1pbmxpbmUtYmxvY2siLCJtci0xMCIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsxLCJidG4tYXV0b2RlcGxveSIsImJ0biIsImJ0bi1wcmltYXJ5IiwiZC1pbmxpbmUtYmxvY2siLCJtci0xMCIsMywiY2xpY2siXSxb''@;'; put 'put ''InR5cGUiLCJmaWxlIiwiaGlkZGVuIiwiIiwzLCJjbGljayIsImNoYW5nZSJdLFszLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBl''@;'; put 'put ''IiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbMSwiYXV0by1kZXBsb3kiXSxbMSwic3Bpbm5lci1ib3giXSxbNCwibmdJZiJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1tZCJdLFsxLCJtLTAiLCJhbGlnbi1zZWxmLXN0YXJ0Il0sWzEsInctMTAw''@;'; put 'put ''Il0sWzEsImRlcGxveS1zdGF0dXMtcm93Il0sWyJjbGFzcyIsImRlcGxveS1zdWNjZXNzIiwic2hhcGUiLCJzdWNjZXNzLXN0YW5kYXJkIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRlcGxveS1lcnJvciIsInNoYXBlIiwidGltZXMtY2lyY2xlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImRlcGxveS1z''@;'; put 'put ''dGF0dXMtcm93Iiw0LCJuZ0lmIl0sWzEsImJ1dHRvbnMiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtdC0xNSIsIm1yLTAiLDMsImNsaWNrIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5LW91dGxpbmUiLCJtdC0xNSIsIm1yLTAiLDMsImNsaWNrIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5LW91''@;'; put 'put ''dGxpbmUiLCJtdC0xNSIsIm1yLTAiLCJhbGlnbi1zZWxmLWVuZCIsMywiY2xpY2siXSxbInNoYXBlIiwic3VjY2Vzcy1zdGFuZGFyZCIsMSwiZGVwbG95LXN1Y2Nlc3MiXSxbInNoYXBlIiwidGltZXMtY2lyY2xlIiwxLCJkZXBsb3ktZXJyb3IiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtp''@;'; put 'put ''ZigxJmQpe2NvbnN0IGY9T24oKTtndCgwLHAkZSw0LDIsImRpdiIsMSksZGUoMSwiaDQiLDIpLExlKDIsIlZpeWEgRGVwbG95IiksaGUoKSxHdCgzLCJociIpLGRlKDQsImxhYmVsIiwzKSxMZSg1LCJBcHAgTG9jIiksaGUoKSxkZSg2LCJkaXYiLDQpKDcsImRpdiIsNSkoOCwicCIsNiksTGUo''@;'; put 'put ''OSksaGUoKSgpKCksZGUoMTAsImxhYmVsIiwzKSxMZSgxMSwiREMgTG9jIiksaGUoKSxkZSgxMiwiZGl2Iiw0KSgxMywiZGl2Iiw1KSgxNCwicCIsNiksTGUoMTUpLGhlKCkoKSgpLGRlKDE2LCJsYWJlbCIsMyksTGUoMTcsIlNBUyBBZG1pbiBncm91cCIpLGhlKCksZGUoMTgsImRpdiIsNCko''@;'; put 'put ''MTksImRpdiIsNSkoMjAsInAiLDYpLExlKDIxKSxoZSgpKCkoKSxkZSgyMiwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgyMywiaW5wdXQiLDcpLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksdmkoaC5yZWNyZWF0ZURhdGFiYXNlLE0pfHwoaC5yZWNyZWF0ZURh''@;'; put 'put ''dGFiYXNlPU0pLEN0KE0pfSksRnQoImNsaWNrIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5yZWNyZWF0ZURhdGFiYXNlQ2xpY2tlZChNKSl9KSxoZSgpLGRlKDI0LCJsYWJlbCIpLExlKDI1LCJSZWNyZWF0ZSBkYXRhYmFzZSIpLGhlKCkoKSxHdCgyNiwiaHIiKSxkZSgyNywiYnV0''@;'; put 'put ''dG9uIiw4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguZXhlY3V0ZUpzb24oKSl9KSxMZSgyOCksaGUoKSxkZSgyOSwiYnV0dG9uIiw5KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KHZvKDMyKS5jbGljaygpKX0pLExlKDMwLCIgVXBsb2Fk''@;'; put 'put ''IGRpZmZlcmVudCBmaWxlIHRvIGRlcGxveVxuIiksaGUoKSxkZSgzMSwiaW5wdXQiLDEwLDApLEZ0KCJjbGljayIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGguY2xlYXJVcGxvYWRJbnB1dChNKSl9KSgiY2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbkpzb25G''@;'; put 'put ''aWxlQ2hhbmdlKE0pKX0pLGhlKCksZGUoMzMsImNsci1tb2RhbCIsMTEpLHBpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSx2aShoLnJlY3JlYXRlRGF0YWJhc2VNb2RhbCxNKXx8KGgucmVjcmVhdGVEYXRhYmFzZU1vZGFsPU0pLEN0KE0pfSksZGUoMzQs''@;'; put 'put ''ImgzIiwxMiksTGUoMzUsIldhcm5pbmciKSxoZSgpLGRlKDM2LCJkaXYiLDEzKSxMZSgzNywiIFRoaXMgYWN0aW9uIHdpbGwgcmVjcmVhdGUgdGhlIGRhdGFiYXNlIChpZiBpdCBleGlzdHMpLiBGb3IgYW4gaW5pdGlhbCBkZXBsb3ltZW50LCB0aGlzIGlzIGV4cGVjdGVkLiBJZiB0aGlzIGlz''@;'; put 'put ''IGEgcmUtZGVwbG95bWVudCwgeW91IHdpbGwgbG9zZSBhbnkgZXhpc3RpbmcgdGFibGVzIGluICIpLGRlKDM4LCJzdHJvbmciKSxMZSgzOSksaGUoKSxMZSg0MCwiLiAiKSxoZSgpLGRlKDQxLCJkaXYiLDE0KSg0MiwiYnV0dG9uIiwxNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3''@;'; put 'put ''dChmKSxoLnJlY3JlYXRlRGF0YWJhc2VNb2RhbD0hMSxDdChoLnJlY3JlYXRlRGF0YWJhc2U9ITEpfSksTGUoNDMsIiBDYW5jZWwgIiksaGUoKSxkZSg0NCwiYnV0dG9uIiwxNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxoLnJlY3JlYXRlRGF0YWJhc2VNb2RhbD0hMSxD''@;'; put 'put ''dChoLnJlY3JlYXRlRGF0YWJhc2U9ITApfSksTGUoNDUsIiBPayAiKSxoZSgpKCkoKX0yJmQmJih4ZSgibmdJZiIsaC5hdXRvZGVwbG95aW5nKSxmZSg5KSxfcihoLmFwcExvYyksZmUoNiksX3IoaC5kY1BhdGgpLGZlKDYpLF9yKGguc2VsZWN0ZWRBZG1pbkdyb3VwKSxmZSgyKSxmaSgibmdN''@;'; put 'put ''b2RlbCIsaC5yZWNyZWF0ZURhdGFiYXNlKSxmZSg0KSx4ZSgiZGlzYWJsZWQiLCFoLmpzb25GaWxlKSxmZSgpLFJyKCIgRGVwbG95ICIsaC5qc29uRmlsZT8iIjoiKGpzb24gZmlsZSBpcyBub3QgYXZhaWxhYmxlKSIsIlxuIiksZmUoNSksZmkoImNsck1vZGFsT3BlbiIsaC5yZWNyZWF0ZURh''@;'; put 'put ''dGFiYXNlTW9kYWwpLHhlKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoNiksX3IoaC5kY1BhdGgpKX0sZGVwZW5kZW5jaWVzOlt5byxCMSxRcyxZcyxPbCxvdSxLdSx1cyxXMSxEZF0sc3R5bGVzOlsiLmF1dG8tZGVwbG95W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlm''@;'; put 'put ''eS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6MDtiYWNrZ3JvdW5kOiMwMDA2O3otaW5kZXg6MTAwfS5zcGlubmVyLWJveFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6NDAwcHg7cGFkZGluZzoyMHB4O2JvcmRlci1yYWRpdXM6M3B4O2Jh''@;'; put 'put ''Y2tncm91bmQ6I2ZmZjtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2JveC1zaGFkb3c6MXB4IDFweCA4cHggIzAwMDAwMDgyfS5zcGlubmVyLWJveFtfbmdjb250ZW50LSVDT01QJV0gICAuYnV0dG9u''@;'; put 'put ''c1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO3dpZHRoOjEwMCV9LmRlcGxveS1zdGF0dXMtcm93W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLXNlbGY6ZmxleC1zdGFy''@;'; put 'put ''dH0uZGVwbG95LXN0YXR1cy1yb3dbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAwIDEwcHh9LmRlcGxveS1zdWNjZXNzW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojNmVjZjQ0fS5kZXBsb3ktZXJyb3JbX25nY29udGVudC0lQ09NUCVde2Nv''@;'; put 'put ''bG9yOiNlNzRjM2N9LmRlcGxveS11bmRldGVybWluYXRlZFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2NhY2FjYX1ocltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgcmdiYSgwLDAsMCwuMjcwNTg4MjM1Myl9Il19KX19cmV0dXJuIGN9KSgp''@;'; put 'put ''O2NvbnN0IGpHPSgpPT4oe3N0YW5kYWxvbmU6ITB9KTtmdW5jdGlvbiBtJGUoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDYpKDEsInAiLDcpLExlKDIsIlBsZWFzZSBsb2cgaW4gZmlyc3QiKSxoZSgpLGRlKDMsImxhYmVsIiw4KSxMZSg0LCJVc2VybmFtZSIpLGhlKCksZGUoNSwiZGl2Iiw5KSg2''@;'; put 'put ''LCJkaXYiLDEwKSxHdCg3LCJpbnB1dCIsMTEpLGhlKCkoKSxkZSg4LCJsYWJlbCIsMTIpLExlKDksIlBhc3N3b3JkIiksaGUoKSxkZSgxMCwiZGl2Iiw5KSgxMSwiZGl2IiwxMCksR3QoMTIsImlucHV0IiwxMyksaGUoKSgpLGRlKDEzLCJidXR0b24iLDE0KSxMZSgxNCwiTG9nIGluIiksaGUo''@;'; put 'put ''KSgpKX1mdW5jdGlvbiB2JGUoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDM2KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7eGUoInZhbHVlIixhLmlkKSxmZSgpLFJyKCIgIixhLm5hbWUsIiAiKX19ZnVuY3Rpb24gYiRlKGMsbCl7aWYoMSZjJiYoZGUoMCwic3Bh''@;'; put 'put ''biIpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpLiRpbXBsaWNpdDtmZSgpLFJyKCIoICIsYS5hdHRyaWJ1dGVzLnN5c1VzZXJJZCwiICkiKX19ZnVuY3Rpb24geSRlKGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiwzNiksTGUoMSksZ3QoMixiJGUsMiwxLCJzcGFuIiw1KSxxcygz''@;'; put 'put ''LCJqc29uIiksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O3hlKCJ2YWx1ZSIsYS5uYW1lKSxmZSgpLFJyKCIgIixhLm5hbWUsIiAiKSxmZSgpLHhlKCJuZ0lmIiwie30iIT1rYygzLDMsYS5hdHRyaWJ1dGVzKSl9fWZ1bmN0aW9uIF8kZShjLGwpezEmYyYmKGRlKDAsInNwYW4iKSxM''@;'; put 'put ''ZSgxLCJKU09OIFN1Ym1pdHRlZCBTdWNjZXNzZnVsbHkiKSxoZSgpKX1mdW5jdGlvbiB3JGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJidXR0b24iLDM3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDIpLmRvd25sb2FkU2FzUHJlY29kZUZpbGUo''@;'; put 'put ''KSl9KSxHdCgxLCJjbHItaWNvbiIsMzgpLGhlKCl9fWZ1bmN0aW9uIEMkZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2xpKDApLGRlKDEsInAiLDM5KSxMZSgyLCJGaWxlIGV4ZWN1dGUgY29tcGxldGVkIiksaGUoKSxHdCgzLCJociIpLGRlKDQsImRpdiIpKDUsImJ1dHRvbiIsNDApLEZ0''@;'; put 'put ''KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDIpO3JldHVybiBDdChoLmRvd25sb2FkRmlsZShoLmpvYkxvZywiZXhlY3V0ZS1zY3JpcHQtbG9nIiwidHh0IikpfSksTGUoNiwiIERvd25sb2FkIGxvZyAiKSxoZSgpKCksY2koKX19ZnVuY3Rpb24gUyRlKGMsbCl7aWYoMSZj''@;'; put 'put ''JiYoZGUoMCwiZGl2Iiw0NCksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPU9lKDMpO2ZlKCksUnIoIiAiLGEubWFrZURhdGFSZXNwb25zZSwiICIpfX1mdW5jdGlvbiBNJGUoYyxsKXsxJmMmJihsaSgwKSxkZSgxLCJzcGFuIiwyNSksTGUoMiwiIFZhbGlkYXRpbmcgZGVwbG95Li4uICIpLGhl''@;'; put 'put ''KCksZGUoMywic3BhbiIpLExlKDQsIiBWYWxpZGF0aW5nIGRlcGxveS4uLiAiKSxoZSgpLGNpKCkpfWZ1bmN0aW9uIHgkZShjLGwpezEmYyYmKGxpKDApLEd0KDEsImNsci1pY29uIiw0NiksZGUoMiwic3BhbiIpLExlKDMsIiBWYWxpZGF0aW9uIGZhaWxlZCAiKSxoZSgpLGNpKCkpfWZ1bmN0''@;'; put 'put ''aW9uIEUkZShjLGwpezEmYyYmKGxpKDApLEd0KDEsImNsci1pY29uIiw0NyksZGUoMiwic3BhbiIpLExlKDMsIiBWYWxpZGF0aW9uIHN1Y2NlZWRlZCAiKSxoZSgpLGNpKCkpfWZ1bmN0aW9uIFQkZShjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNDUpLGd0KDEsTSRlLDUsMCwibmctY29udGFp''@;'; put 'put ''bmVyIiw1KSgyLHgkZSw0LDAsIm5nLWNvbnRhaW5lciIsNSkoMyxFJGUsNCwwLCJuZy1jb250YWluZXIiLDUpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgzKTtmZSgpLHhlKCJuZ0lmIixhLmlzVmFsaWRhdGluZyksZmUoKSx4ZSgibmdJZiIsIWEuaXNWYWxpZGF0aW5nJiYiZXJyb3IiPT09YS52''@;'; put 'put ''YWxpZGF0aW9uU3RhdGUpLGZlKCkseGUoIm5nSWYiLCFhLmlzVmFsaWRhdGluZyYmInN1Y2Nlc3MiPT09YS52YWxpZGF0aW9uU3RhdGUpfX1mdW5jdGlvbiBBJGUoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtsaSgwKSxkZSgxLCJwIiwzOSksTGUoMiwiQ3JlYXRlIERhdGFiYXNlIENvbXBs''@;'; put 'put ''ZXRlZCIpLGhlKCksR3QoMywiaHIiKSxndCg0LFMkZSwyLDEsImRpdiIsNDEpLGRlKDUsImJ1dHRvbiIsNDIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikubmF2aWdhdGVUb0hvbWUoKSl9KSxMZSg2LCIgTGV0J3MgZ2V0IHN0YXJ0ZWQgIiksaGUoKSxkZSg3''@;'; put 'put ''LCJidXR0b24iLDQyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgyKTtyZXR1cm4gQ3QoaC5kb3dubG9hZEZpbGUoaC5tYWtlRGF0YVJlc3BvbnNlLCJjcmVhdGUtZGF0YWJhc2UtbG9nIiwidHh0IikpfSksTGUoOCwiIERvd25sb2FkIGxvZyAiKSxoZSgpLGRlKDks''@;'; put 'put ''ImJ1dHRvbiIsNDIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikudmFsaWRhdGVEZXBsb3koKSl9KSxMZSgxMCwiIFZhbGlkYXRlICIpLGhlKCksZ3QoMTEsVCRlLDQsMywiZGl2Iiw0MyksY2koKX1pZigyJmMpe2NvbnN0IGE9T2UoMik7ZmUoNCkseGUoIm5n''@;'; put 'put ''SWYiLGEubWFrZURhdGFSZXNwb25zZS5sZW5ndGg+MCksZmUoNykseGUoIm5nSWYiLCJub25lIiE9PWEudmFsaWRhdGlvblN0YXRlfHxhLmlzVmFsaWRhdGluZyl9fWZ1bmN0aW9uIGskZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2xpKDApLGRlKDEsImZvcm0iKSgyLCJkaXYiLDE1KSgz''@;'; put 'put ''LCJsYWJlbCIsMTYpLExlKDQsIkFkbWluIGdyb3VwIiksaGUoKSxkZSg1LCJkaXYiLDE3KSg2LCJkaXYiLDE4KSg3LCJzZWxlY3QiLDE5KSxwaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpO3JldHVybiB2aShmLnNlbGVjdGVkQWRtaW5Hcm91cCxoKXx8''@;'; put 'put ''KGYuc2VsZWN0ZWRBZG1pbkdyb3VwPWgpLEN0KGgpfSksZ3QoOCx2JGUsMiwyLCJvcHRpb24iLDIwKSxoZSgpKCkoKSgpLGRlKDksImRpdiIsMTUpKDEwLCJkaXYiKSgxMSwibGFiZWwiLDE2KSxMZSgxMiwiQ29udGV4dCIpLGhlKCksZGUoMTMsImRpdiIsMTcpKDE0LCJkaXYiLDE4KSgxNSwi''@;'; put 'put ''c2VsZWN0IiwyMSkscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKTtyZXR1cm4gdmkoZi5zZWxlY3RlZENvbnRleHQsaCl8fChmLnNlbGVjdGVkQ29udGV4dD1oKSxDdChoKX0pLGd0KDE2LHkkZSw0LDUsIm9wdGlvbiIsMjApLGhlKCkoKSgpLGRlKDE3''@;'; put 'put ''LCJidXR0b24iLDIyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuZXhlY3V0YWJsZUNvbnRleHQoKSl9KSxHdCgxOCwiY2xyLWljb24iLDIzKSxoZSgpKCksZGUoMTksImRpdiIsMjQpKDIwLCJzcGFuIiwyNSksTGUoMjEsIiBMb2FkaW5nIGNvbnRleHRzLi4u''@;'; put 'put ''ICIpLGhlKCksZGUoMjIsInNwYW4iKSxMZSgyMywiIExvYWRpbmcgY29udGV4dHMuLi4gIiksaGUoKSgpLGRlKDI0LCJsYWJlbCIsMjYpLExlKDI1LCJEQyBMb2MiKSxoZSgpLGRlKDI2LCJkaXYiLDkpKDI3LCJkaXYiLDEwKSgyOCwiaW5wdXQiLDI3KSxwaSgibmdNb2RlbENoYW5nZSIsZnVu''@;'; put 'put ''Y3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpO3JldHVybiB2aShmLmRjUGF0aCxoKXx8KGYuZGNQYXRoPWgpLEN0KGgpfSksRnQoImZvY3Vzb3V0IixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLnNhdmVEY1BhdGgoKSl9KSxoZSgpKCkoKSxkZSgyOSwicCIsMjgpLExlKDMwLCIg''@;'; put 'put ''U2VsZWN0IEpTT04gZmlsZSB0byB1cGxvYWQgKGpzb24gYnVpbGQgZmlsZSBwcmVsb2FkZWQpOiAiKSxoZSgpLGRlKDMxLCJkaXYiLDI5KSgzMiwiaW5wdXQiLDMwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgpLmNsZWFyVXBsb2FkSW5wdXQoaCkpfSkoImNo''@;'; put 'put ''YW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkub25Kc29uRmlsZUNoYW5nZShoKSl9KSxoZSgpKCksZGUoMzMsImRpdiIsMzEpKDM0LCJidXR0b24iLDMyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuZXhlY3V0ZUpzb24oKSl9KSxMZSgz''@;'; put 'put ''NSwiIFNVQk1JVCBKU09OICIpLGhlKCksZ3QoMzYsXyRlLDIsMCwic3BhbiIsNSksaGUoKSxkZSgzNywicCIsMjgpLExlKDM4LCJTZWxlY3QgU0FTIGZpbGUgdG8gdXBsb2FkOiIpLGhlKCksZGUoMzksImRpdiIsMjkpKDQwLCJpbnB1dCIsMzApLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7cmV0''@;'; put 'put ''dXJuIHd0KGEpLEN0KE9lKCkuY2xlYXJVcGxvYWRJbnB1dChoKSl9KSgiY2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCk7cmV0dXJuIGYub25TYXNGaWxlQ2hhbmdlKGgpLEN0KGYuZG93bmxvYWRGaWxlQnRuPSEwKX0pLGhlKCksZ3QoNDEsdyRlLDIsMCwiYnV0dG9uIiwz''@;'; put 'put ''MyksaGUoKSxkZSg0MiwiZGl2IiwzMSkoNDMsImJ1dHRvbiIsMzQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5leGVjdXRlU0FTKCkpfSksTGUoNDQsIiBTVUJNSVQgIiksaGUoKSgpKCksZ3QoNDUsQyRlLDcsMCwibmctY29udGFpbmVyIiw1KSxkZSg0Niwi''@;'; put 'put ''YnV0dG9uIiwzNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLmNyZWF0ZURhdGFiYXNlKCkpfSksTGUoNDcsIiBDcmVhdGUgRGF0YWJhc2UgIiksaGUoKSxndCg0OCxBJGUsMTIsMiwibmctY29udGFpbmVyIiw1KSxoZSgpLGNpKCl9aWYoMiZjKXtjb25zdCBh''@;'; put 'put ''PU9lKCk7ZmUoNyksZmkoIm5nTW9kZWwiLGEuc2VsZWN0ZWRBZG1pbkdyb3VwKSx4ZSgibmdNb2RlbE9wdGlvbnMiLFdzKDE5LGpHKSksZmUoKSx4ZSgibmdGb3JPZiIsYS5hZG1pbkdyb3VwcyksZmUoMikseHIoImhpZGRlbiIsYS5jb250ZXh0c0xvYWRpbmcpLGZlKDUpLGZpKCJuZ01vZGVs''@;'; put 'put ''IixhLnNlbGVjdGVkQ29udGV4dCkseGUoIm5nTW9kZWxPcHRpb25zIixXcygyMCxqRykpLGZlKCkseGUoIm5nRm9yT2YiLGEuYWxsQ29udGV4dHMpLGZlKDMpLHhyKCJoaWRkZW4iLCFhLmNvbnRleHRzTG9hZGluZyksZmUoOSksZmkoIm5nTW9kZWwiLGEuZGNQYXRoKSx4ZSgibmdNb2RlbE9w''@;'; put 'put ''dGlvbnMiLFdzKDIxLGpHKSksZmUoNikseGUoImNsckxvYWRpbmciLGEuaXNTdWJtaXR0aW5nSnNvbiksZmUoMikseGUoIm5nSWYiLGEuaXNKc29uU3VibWl0dGVkKSxmZSg1KSx4ZSgibmdJZiIsYS5kb3dubG9hZEZpbGVCdG4pLGZlKDIpLHhlKCJjbHJMb2FkaW5nIixhLmV4ZWN1dGluZ1Nj''@;'; put 'put ''cmlwdCksZmUoMikseGUoIm5nSWYiLGEuam9iTG9nLmxlbmd0aD4wKSxmZSgpLHhlKCJjbHJMb2FkaW5nIixhLmNyZWF0ZURhdGFiYXNlTG9hZGluZyksZmUoMikseGUoIm5nSWYiLGEubWFrZURhdGFSZXNwb25zZS5sZW5ndGg+MCl9fWxldCBEJGU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rv''@;'; put 'put ''cihhLGQsaCxmKXt0aGlzLnNhc1NlcnZpY2U9YSx0aGlzLmV2ZW50U2VydmljZT1kLHRoaXMubG9nZ2VyU2VydmljZT1oLHRoaXMuZGVwbG95U2VydmljZT1mLHRoaXMuc2FzSnNDb25maWc9bmV3IGZoLlNBU2pzQ29uZmlnLHRoaXMub25OYXZpZ2F0ZVRvSG9tZT1uZXcgcXIsdGhpcy5uZWVk''@;'; put 'put ''c0xvZ2luPSExLHRoaXMuYWRtaW5Hcm91cHM9W10sdGhpcy5hbGxDb250ZXh0cz1bXSx0aGlzLmFwcExvYz0iIix0aGlzLmRjUGF0aD0iIix0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cD0iIix0aGlzLnNlbGVjdGVkQ29udGV4dD0iIix0aGlzLmpvYkxvZz0iIix0aGlzLm1ha2VEYXRhUmVzcG9u''@;'; put 'put ''c2U9IiIsdGhpcy5saW5lc09mQ29kZT1bXSx0aGlzLmZpbGVOYW1lPSIiLHRoaXMucHJlbG9hZGVkRmlsZT0hMCx0aGlzLmV4ZWN1dGVTQVNFbmFibGVkPSExLHRoaXMuY29udGV4dHNMb2FkaW5nPSExLHRoaXMuY3JlYXRlRGF0YWJhc2VMb2FkaW5nPSExLHRoaXMuZXhlY3V0aW5nU2NyaXB0''@;'; put 'put ''PSExLHRoaXMuZG93bmxvYWRGaWxlQnRuPSExLHRoaXMuaXNWYWxpZGF0aW5nPSExLHRoaXMuanNvbkZpbGU9bnVsbCx0aGlzLmlzU3VibWl0dGluZ0pzb249ITEsdGhpcy5pc0pzb25TdWJtaXR0ZWQ9ITEsdGhpcy52YWxpZGF0aW9uU3RhdGU9Im5vbmUifW5nT25Jbml0KCl7fWV4ZWN1dGFi''@;'; put 'put ''bGVDb250ZXh0KCl7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe30pKCl9Y2xlYXJVcGxvYWRJbnB1dChhKXt0aGlzLmRlcGxveVNlcnZpY2UuY2xlYXJVcGxvYWRJbnB1dChhKX1vblNhc0ZpbGVDaGFuZ2UoYSl7dGhpcy5wcmVsb2FkZWRGaWxlPSExO2xldCBkPWEudGFyZ2V0LmZpbGVzWzBdO3Ro''@;'; put 'put ''aXMuZmlsZU5hbWU9ZC5uYW1lO2xldCBoPW5ldyBGaWxlUmVhZGVyO2gub25sb2FkPSgpPT57aC5yZXN1bHQmJih0aGlzLmxpbmVzT2ZDb2RlPWgucmVzdWx0LnNwbGl0KCJcbiIpLHRoaXMubGluZXNPZkNvZGU9dGhpcy5saW5lc09mQ29kZS5maWx0ZXIoZj0+IiIhPT1mJiZudWxsIT09Ziks''@;'; put 'put ''dGhpcy5leGVjdXRlU0FTRW5hYmxlZD0hMCx0aGlzLmFkZFByZWNvZGVMaW5lcygpKX0saC5yZWFkQXNUZXh0KGQpfW9uSnNvbkZpbGVDaGFuZ2UoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IGg9YS50YXJnZXQuZmlsZXNbMF07ZC5qc29uRmlsZT15aWVsZCBkLmRl''@;'; put 'put ''cGxveVNlcnZpY2UucmVhZEZpbGUoaCl9KSgpfWFkZFByZWNvZGVMaW5lcygpe3RoaXMubGluZXNPZkNvZGUudW5zaGlmdChgJWxldCBjb250ZXh0PSR7dGhpcy5zZWxlY3RlZENvbnRleHR9O2AsYCVsZXQgYXBwTG9jPSR7dGhpcy5hcHBMb2N9O2AsYCVsZXQgYWRtaW49JHt0aGlzLnNlbGVj''@;'; put 'put ''dGVkQWRtaW5Hcm91cH07YCxgJWxldCBkY3BhdGg9JHt0aGlzLmRjUGF0aH07YCl9ZG93bmxvYWRTYXNQcmVjb2RlRmlsZSgpe2xldCBhPXRoaXMubGluZXNPZkNvZGUuam9pbigiXG4iKSxkPXRoaXMuZmlsZU5hbWUuc3BsaXQoIi4iKVswXTt0aGlzLmRvd25sb2FkRmlsZShhLGQsInNhcyIp''@;'; put 'put ''fWRvd25sb2FkRmlsZShhLGQsaD0idHh0Iil7dGhpcy5kZXBsb3lTZXJ2aWNlLmRvd25sb2FkRmlsZShhLGQsaCl9c2F2ZURjUGF0aCgpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJkZXBsb3lfZGNfbG9jIix0aGlzLmRjUGF0aCl9ZXhlY3V0ZUpzb24oKXt2YXIgYT10aGlzO3JldHVybiBlZShm''@;'; put 'put ''dW5jdGlvbiooKXthLmlzU3VibWl0dGluZ0pzb249ITA7dHJ5e3lpZWxkIGEuc2FzSnMuZGVwbG95U2VydmljZVBhY2soYS5qc29uRmlsZSxhLmRjQWRhcHRlclNldHRpbmdzPy5hcHBMb2N8fCIiLHZvaWQgMCx2b2lkIDAsITApLGEuaXNKc29uU3VibWl0dGVkPSEwfWNhdGNoKGQpe2xldCBo''@;'; put 'put ''PSIiO3JldHVybiBoPSJzdHJpbmciIT10eXBlb2YgZC5tZXNzYWdlP0pTT04uc3RyaW5naWZ5KGQpLnJlcGxhY2UoL1xcL2dtLCIiKTpkLm1lc3NhZ2Usdm9pZCBhLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJEZXBsb3kgZXJyb3IiLGBFeGNlcHRpb246IFxuICR7IiIhPT1oP2g6ZH1g''@;'; put 'put ''KX1hLmlzU3VibWl0dGluZ0pzb249ITF9KSgpfWV4ZWN1dGVTQVMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLmV4ZWN1dGluZ1NjcmlwdD0hMCxhLmpvYkxvZz0iIixhLm1ha2VEYXRhUmVzcG9uc2U9IiI7dHJ5e2xldCBkPXlpZWxkIGEuc2FzSnMuZXhlY3V0ZVNjcmlw''@;'; put 'put ''dCh7ZmlsZU5hbWU6YS5maWxlTmFtZSxsaW5lc09mQ29kZTphLmxpbmVzT2ZDb2RlLGNvbnRleHROYW1lOmEuc2VsZWN0ZWRDb250ZXh0fSk7YS5sb2dnZXJTZXJ2aWNlLmxvZyhkKSwic3RyaW5nIj09dHlwZW9mIGQubG9nJiYoZC5sb2c9SlNPTi5wYXJzZShkLmxvZykpLCJlcnJvciI9PT1k''@;'; put 'put ''LmpvYlN0YXR1cz9hbGVydCgiRXJyb3IhIik6YS5qb2JMb2c9ZC5sb2cuaXRlbXM/ZC5sb2cuaXRlbXMubWFwKGg9PmgubGluZSkuam9pbigiXG4iKTpKU09OLnN0cmluZ2lmeShkLmxvZyksYS5leGVjdXRpbmdTY3JpcHQ9ITF9Y2F0Y2h7YS5leGVjdXRpbmdTY3JpcHQ9ITF9fSkoKX1jcmVh''@;'; put 'put ''dGVEYXRhYmFzZShhPSEwKXtpZihhKXtsZXQgZj10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKS5zZXJ2ZXJVcmwrIi9TQVNKb2JFeGVjdXRpb24vP19wcm9ncmFtPSIrdGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz8uYXBwTG9jfHwiL2FkbWluL21ha2VkYXRhJkFETUlOPSIrdGhpcy5z''@;'; put 'put ''ZWxlY3RlZEFkbWluR3JvdXArIiZEQ1BBVEg9Iit0aGlzLmRjUGF0aCsiJl9kZWJ1Zz0xMzEiO3dpbmRvdy5vcGVuKGYsIl9ibGFuayIpfWVsc2UgdGhpcy5jcmVhdGVEYXRhYmFzZUxvYWRpbmc9ITAsdGhpcy5zYXNKcy5yZXF1ZXN0KCJzZXJ2aWNlcy9hZG1pbi9tYWtlZGF0YSIse2Zyb21q''@;'; put 'put ''czpbe0FETUlOOnRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwLERDUEFUSDp0aGlzLmRjUGF0aH1dfSx7dXNlQ29tcHV0ZUFwaTohMSxjb250ZXh0TmFtZTp0aGlzLnNhc0pzQ29uZmlnLmNvbnRleHROYW1lLGRlYnVnOiEwfSwoKT0+e3RoaXMuc2FzU2VydmljZS5zaG91bGRMb2dpbi5uZXh0KCEw''@;'; put 'put ''KX0pLnRoZW4oZj0+e3RyeXt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9SlNPTi5zdHJpbmdpZnkoZil9Y2F0Y2h7dGhpcy5tYWtlRGF0YVJlc3BvbnNlPWZ9dGhpcy5jcmVhdGVEYXRhYmFzZUxvYWRpbmc9ITF9KS5jYXRjaChmPT57dGhpcy5jcmVhdGVEYXRhYmFzZUxvYWRpbmc9ITE7dHJ5e3Ro''@;'; put 'put ''aXMubWFrZURhdGFSZXNwb25zZT1KU09OLnN0cmluZ2lmeShmKX1jYXRjaHt0aGlzLm1ha2VEYXRhUmVzcG9uc2U9Zn19KX1uYXZpZ2F0ZVRvSG9tZSgpe3RoaXMub25OYXZpZ2F0ZVRvSG9tZS5lbWl0KCl9dmFsaWRhdGVEZXBsb3koKXt0aGlzLmlzVmFsaWRhdGluZz0hMCx0aGlzLnNhc1Nl''@;'; put 'put ''cnZpY2UucmVxdWVzdCgicHVibGljL3N0YXJ0dXBzZXJ2aWNlIixudWxsKS50aGVuKGE9Pnt0aGlzLmxvZ2dlclNlcnZpY2UubG9nKGEuYWRhcHRlclJlc3BvbnNlKSx0aGlzLnZhbGlkYXRpb25TdGF0ZT1hLmFkYXB0ZXJSZXNwb25zZS5zYXNsaWJzPyJzdWNjZXNzIjoiZXJyb3IiLHRoaXMu''@;'; put 'put ''aXNWYWxpZGF0aW5nPSExfSkuY2F0Y2goYT0+e3RoaXMuaXNWYWxpZGF0aW5nPSExLHRoaXMudmFsaWRhdGlvblN0YXRlPSJlcnJvciJ9KX1kZWxldGVLZXlzKCl7bG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oImRlcGxveV9kY19sb2MiKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24o''@;'; put 'put ''ZCl7cmV0dXJuIG5ldyhkfHxjKShHZShKcyksR2UocGMpLEdlKFNkKSxHZShQaGUpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1tYW51YWwtZGVwbG95Il1dLGlucHV0czp7c2FzSnM6InNhc0pzIixzYXNKc0NvbmZpZzoic2FzSnNDb25maWci''@;'; put 'put ''LGRjQWRhcHRlclNldHRpbmdzOiJkY0FkYXB0ZXJTZXR0aW5ncyJ9LG91dHB1dHM6e29uTmF2aWdhdGVUb0hvbWU6Im9uTmF2aWdhdGVUb0hvbWUifSxkZWNsczo5LHZhcnM6Myxjb25zdHM6W1sxLCJjYXJkLWhlYWRlciIsInBvc2l0aW9uLXJlbGF0aXZlIl0sWzEsImQtaW5saW5lLWJsb2Nr''@;'; put 'put ''IiwibWwtMTAiLCJtYi0xMCIsIm10LTAiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJjbGVhci1tZW1vcnktYnV0dG9uIiwicG9zaXRpb24tYWJzb2x1dGUiLDMsImNsaWNrIl0sWzEsImNhcmQtYmxvY2siXSxbImlkIiwibG9naW5Gb3JtIiwiY2xhc3MiLCJkLW5vbmUiLDQsIm5nSWYiXSxb''@;'; put 'put ''NCwibmdJZiJdLFsiaWQiLCJsb2dpbkZvcm0iLDEsImQtbm9uZSJdLFsxLCJtYi0xMCJdLFsiZm9yIiwidXNlcm5hbWUiLDEsImNsci1jb250cm9sLWxhYmVsIl0sWzEsIm1iLTEwIiwiY2xyLWNvbnRyb2wtY29udGFpbmVyIl0sWzEsImNsci1pbnB1dC13cmFwcGVyIl0sWyJ0eXBlIiwidGV4''@;'; put 'put ''dCIsImlkIiwidXNlcm5hbWUiLDEsImNsci1pbnB1dCJdLFsiZm9yIiwicGFzc3dvcmQiLDEsImNsci1jb250cm9sLWxhYmVsIl0sWyJ0eXBlIiwicGFzc3dvcmQiLCJpZCIsInBhc3N3b3JkIiwxLCJjbHItaW5wdXQiXSxbImlkIiwibG9naW5CdG4iLDEsImJ0biIsImJ0bi1wcmltYXJ5Iiwi''@;'; put 'put ''ZC1ub25lIl0sWzEsImNsci1mb3JtLWNvbnRyb2wiXSxbImZvciIsInNlbGVjdC1mdWxsIiwxLCJjbHItY29udHJvbC1sYWJlbCJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiXSxbMSwiY2xyLXNlbGVjdC13cmFwcGVyIl0sWyJuYW1lIiwic2VsZWN0ZWRBZG1pbkdyb3VwIiwiaWQiLCJh''@;'; put 'put ''ZG1pbkdyb3Vwc1NlbGVjdCIsMSwiY2xyLXNlbGVjdCIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJuZ01vZGVsT3B0aW9ucyJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJuYW1lIiwic2VsZWN0ZWRDb250ZXh0IiwxLCJjbHItc2VsZWN0IiwzLCJuZ01vZGVsQ2hh''@;'; put 'put ''bmdlIiwibmdNb2RlbCIsIm5nTW9kZWxPcHRpb25zIl0sWyJ0eXBlIiwiYnV0dG9uIiwiaWQiLCJjb250ZXh0cy1idG4iLDEsImJ0biIsImJ0bi1pY29uIiwzLCJjbGljayJdLFsic2hhcGUiLCJwbGF5Il0sWzEsImQtZmxleCJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiLCJtci0x''@;'; put 'put ''MCJdLFsiZm9yIiwiZGNsb2MiLDEsIm10LTIwIiwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbIm5hbWUiLCJkY1BhdGgiLCJ0eXBlIiwidGV4dCIsImlkIiwiZGNsb2MiLDEsImNsci1pbnB1dCIsMywibmdNb2RlbENoYW5nZSIsImZvY3Vzb3V0IiwibmdNb2RlbCIsIm5nTW9kZWxPcHRpb25zIl0s''@;'; put 'put ''WzEsIm10LTEwIl0sWzEsImQtZmxleCIsImZsZXgtY29sdW1uIl0sWyJ0eXBlIiwiZmlsZSIsMywiY2xpY2siLCJjaGFuZ2UiXSxbMSwibXQtMjAiLCJkLWZsZXgiLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbImlkIiwiIiwxLCJtdC0wIiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbImNsYXNz''@;'; put 'put ''IiwiYnRuIGJ0bi1zbSBidG4taWNvbiBtaW4tdy0wIHctNDAiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJpZCIsImRlcGxveSIsMSwibXQtMCIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwibXQtMTAiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFszLCJ2''@;'; put 'put ''YWx1ZSJdLFsxLCJidG4iLCJidG4tc20iLCJidG4taWNvbiIsIm1pbi13LTAiLCJ3LTQwIiwzLCJjbGljayJdLFsic2hhcGUiLCJkb3dubG9hZCJdLFsxLCJtYi0wIiwibXQtMTAiXSxbMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtdC0wIiwibXItMjAiLDMsImNsaWNrIl0sWyJjbGFzcyIsImxv''@;'; put 'put ''Zy13cmFwcGVyIiw0LCJuZ0lmIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5IiwibXQtMTUiLDMsImNsaWNrIl0sWyJjbGFzcyIsInZhbGlkYXRpb24tYmFyIiw0LCJuZ0lmIl0sWzEsImxvZy13cmFwcGVyIl0sWzEsInZhbGlkYXRpb24tYmFyIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNs''@;'; put 'put ''ZSIsMSwiaXMtZXJyb3IiXSxbInNoYXBlIiwiY2hlY2stY2lyY2xlIiwxLCJpcy1zdWNjZXNzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwwKSxMZSgxLCIgQ29uZmlndXJhdG9yICIpLGRlKDIsInAiLDEpLExlKDMpLGhlKCksZGUoNCwiYnV0dG9uIiwyKSxG''@;'; put 'put ''dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGguZGVsZXRlS2V5cygpfSksTGUoNSwiIENsZWFyIG1lbW9yeSAiKSxoZSgpKCksZGUoNiwiZGl2IiwzKSxndCg3LG0kZSwxNSwwLCJkaXYiLDQpKDgsayRlLDQ5LDIyLCJuZy1jb250YWluZXIiLDUpLGhlKCkpLDImZCYmKGZlKDMpLFJyKCJB''@;'; put 'put ''cHAgTG9jYXRpb246ICIsaC5hcHBMb2MsIiIpLGZlKDQpLHhlKCJuZ0lmIixoLm5lZWRzTG9naW4pLGZlKCkseGUoIm5nSWYiLCFoLm5lZWRzTG9naW4pKX0sZGVwZW5kZW5jaWVzOltzcyx5byxvNyxVZixaZixRbCx6ZixRcyxyNyxZcyxwcCxPbCxCMCxUMix1cyxaVV0sc3R5bGVzOlsiLmNs''@;'; put 'put ''ZWFyLW1lbW9yeS1idXR0b25bX25nY29udGVudC0lQ09NUCVde3JpZ2h0OjEwcHg7dG9wOjJweH0iXX0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gSSRlKGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwxNSksR3QoMSwicHJvZ3Jlc3MiKSxoZSgpKX1mdW5jdGlvbiBSJGUoYyxsKXtpZigxJmMmJihk''@;'; put 'put ''ZSgwLCJvcHRpb24iLDE2KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7eGUoInZhbHVlIixhLkdST1VQTkFNRSksZmUoKSx6dSgiICIsYS5HUk9VUE5BTUUsIiAtICIsYS5HUk9VUERFU0MsIiAiKX19bGV0IEwkZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxo''@;'; put 'put ''KXt0aGlzLnNhc1NlcnZpY2U9YSx0aGlzLnNhc2pzU2VydmljZT1kLHRoaXMubG9jYXRpb249aCx0aGlzLnNhc0pzQ29uZmlnPW5ldyBmaC5TQVNqc0NvbmZpZyx0aGlzLm9uTmF2aWdhdGVUb0hvbWU9bmV3IHFyLHRoaXMuZGNEaXJlY3Rvcnk9IiIsdGhpcy5kY0FkbWluR3JvdXA9IkRDREVG''@;'; put 'put ''QVVMVCIsdGhpcy5NRVRBUEVSU09OPSJuL2EiLHRoaXMuTUVUQVVTRVI9Im4vYSIsdGhpcy5TWVNVU0VSSUQ9Im4vYSIsdGhpcy5TWVNIT1NUTkFNRT0ibi9hIix0aGlzLlNZU1ZMT05HPSJuL2EiLHRoaXMuZGNBZG1pbkdyb3VwTGlzdD1bXSx0aGlzLmxvYWRpbmc9ITEsdGhpcy5zaG93TG9n''@;'; put 'put ''b3V0PSExLHRoaXMudG1wRGlyZWN0b3JpZXM9e2xpbnV4OiIvdG1wL0RhdGFDb250cm9sbGVyIix3aW5kb3dzOiJDOlxcRGF0YUNvbnRyb2xsZXIifX1uZ09uSW5pdCgpe3RoaXMuZ2V0VXNlckdyb3VwcygpLHRoaXMuZ2V0U2VydmVySW5mbygpfWdldFNlcnZlckluZm8oKXt0aGlzLnNhc2pz''@;'; put 'put ''U2VydmljZS5nZXRTZXJ2ZXJJbmZvKCkuc3Vic2NyaWJlKGE9PnsiZGVza3RvcCIhPT1hLm1vZGUmJih0aGlzLnNob3dMb2dvdXQ9ITApfSl9Z2V0VXNlckdyb3Vwcygpe3RoaXMubG9hZGluZz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VyZ3JvdXBzYnltZW1iZXIi''@;'; put 'put ''LG51bGwpLnRoZW4oYT0+e3RoaXMuTUVUQVBFUlNPTj1hLmFkYXB0ZXJSZXNwb25zZS5NRl9HRVRVU0VSLHRoaXMuU1lTVVNFUklEPWEuYWRhcHRlclJlc3BvbnNlLlNZU1VTRVJJRCx0aGlzLlNZU0hPU1ROQU1FPWEuYWRhcHRlclJlc3BvbnNlLlNZU0hPU1ROQU1FLHRoaXMuU1lTVkxPTkc9''@;'; put 'put ''YS5hZGFwdGVyUmVzcG9uc2UuU1lTVkxPTkcsdGhpcy5kY0RpcmVjdG9yeT10aGlzLnRtcERpcmVjdG9yaWVzW1siTCIsIkgiLCJBIiwiUyJdLmluY2x1ZGVzKGEuYWRhcHRlclJlc3BvbnNlLlNZU1NDUEwuc3Vic3RyaW5nKDAsMSkpPyJsaW51eCI6IndpbmRvd3MiXSx0aGlzLmRjQWRtaW5H''@;'; put 'put ''cm91cExpc3Q9YS5hZGFwdGVyUmVzcG9uc2UuZ3JvdXBzLHRoaXMuZGNBZG1pbkdyb3VwPXRoaXMuZGNBZG1pbkdyb3VwTGlzdFswXS5HUk9VUE5BTUUsdGhpcy5sb2FkaW5nPSExfSxhPT57dGhpcy5sb2FkaW5nPSExfSl9bWFrZURhdGEoKXtsZXQgZD10aGlzLnNhc1NlcnZpY2UuZ2V0RXhl''@;'; put 'put ''Y3V0aW9uUGF0aCgpO2NvbnN0IGg9dGhpcy5zYXNKc0NvbmZpZy5hcHBMb2M7bGV0IGY9dGhpcy5zYXNKc0NvbmZpZy5zZXJ2ZXJVcmwsdj10aGlzLmRjRGlyZWN0b3J5O3RoaXMuc2FzSnNDb25maWcuc2VydmVyVHlwZT09PU0wLlkuU2FzanM/dGhpcy5zYXNTZXJ2aWNlLnNhc2pzTWFrZWRh''@;'; put 'put ''dGFDaGVja2luZygpLnRoZW4oRD0+e0QmJih0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSgiLyIpLGxvY2F0aW9uLnJlbG9hZCgpKX0pOnRoaXMuc2FzSnNDb25maWcuc2VydmVyVHlwZT09PU0wLlkuU2FzOSYmKGY9IiIsZD13aW5kb3cubG9jYXRpb24ub3JpZ2luK2QrIi8iLHY9ZW5jb2Rl''@;'; put 'put ''VVJJQ29tcG9uZW50KHRoaXMuZGNEaXJlY3RvcnkpKSx3aW5kb3cub3BlbihgJHtmfHwiIn0ke2R9P19wcm9ncmFtPSR7aH0vc2VydmljZXMvYWRtaW4vbWFrZWRhdGEmYWRtaW49JHt0aGlzLmRjQWRtaW5Hcm91cH0mcGF0aD0ke3Z9IGAsIl9ibGFuayIpfWxvZ291dCgpe3RoaXMuc2FzU2Vy''@;'; put 'put ''dmljZS5sb2dvdXQoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShKcyksR2UoQWNlKSxHZSh1aCkpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXNhc2pzLWNvbmZpZ3VyYXRvciJdXSxpbnB1''@;'; put 'put ''dHM6e3Nhc0pzOiJzYXNKcyIsc2FzSnNDb25maWc6InNhc0pzQ29uZmlnIixkY0FkYXB0ZXJTZXR0aW5nczoiZGNBZGFwdGVyU2V0dGluZ3MifSxvdXRwdXRzOntvbk5hdmlnYXRlVG9Ib21lOiJvbk5hdmlnYXRlVG9Ib21lIn0sZGVjbHM6NDQsdmFyczoxMCxjb25zdHM6W1siY2xhc3MiLCJ0''@;'; put 'put ''aGluUHJvZ3Jlc3MgcHJvZ3Jlc1N0YXRpYyBwcm9ncmVzcyBsb29wIiw0LCJuZ0lmIl0sWzEsInRleHQtY2VudGVyIiwibXktMTUiXSxbMSwibGlnaHQiXSxbMSwibS0wIl0sWzEsIm0tMCIsIm10LTEwIl0sWzEsIm10LTIwIiwiY2xyLWNvbnRyb2wtbGFiZWwiXSxbMSwibWItMTAiLCJjbHIt''@;'; put 'put ''Y29udHJvbC1jb250YWluZXIiXSxbMSwiY2xyLWlucHV0LXdyYXBwZXIiXSxbInBsYWNlaG9sZGVyIiwiVHlwZSBpbiBkaXJlY3RvcnkiLDEsImNsci1pbnB1dCIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMSwibWItMTAiLCJtdC0wIiwidy01MHZ3Il0sWyJjbHJTZWxlY3QiLCIi''@;'; put 'put ''LDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY2xyLWZsZXgiXSxbMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLCJtdC0xNSIsInRleHQtY2VudGVyIiwzLCJjbGljayJdLFsxLCJjYXJkLXRleHQiLCJwYi0xMCJdLFsxLCJ0aGlu''@;'; put 'put ''UHJvZ3Jlc3MiLCJwcm9ncmVzU3RhdGljIiwicHJvZ3Jlc3MiLCJsb29wIl0sWzMsInZhbHVlIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZ3QoMCxJJGUsMiwwLCJkaXYiLDApLGRlKDEsImg0IiwxKSxMZSgyLCJTYXNqcyBEZXBsb3kiKSxoZSgpLEd0KDMsImhyIiwyKSxkZSg0''@;'; put 'put ''LCJwIiwzKSxMZSg1LCIgVG8gY29uZmlndXJlIERhdGEgQ29udHJvbGxlciBmb3IgU0FTXHhhOSwgcGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzOlxuIiksaGUoKSxkZSg2LCJwIiw0KSxMZSg3LCIgUGxlYXNlIHNwZWNpZnkgYSBwaHlzaWNhbCBkaXJlY3RvcnkgKG9uIHRo''@;'; put 'put ''ZSAiKSxkZSg4LCJzdHJvbmciKSxMZSg5KSxoZSgpLExlKDEwLCIgY29tcHV0ZSBzZXJ2ZXIpIGJlbG93LCB0byB3aGljaCB1c2VyICIpLGRlKDExLCJzdHJvbmciKSxMZSgxMiksaGUoKSxMZSgxMywiIGNhbiB3cml0ZSwgb24gYmVoYWxmIG9mIERhdGEgQ29udHJvbGxlci5cbiIpLGhlKCks''@;'; put 'put ''ZGUoMTQsImxhYmVsIiw1KSxMZSgxNSwiREMgU3RhZ2luZyBEaXJlY3RvcnkiKSxoZSgpLGRlKDE2LCJkaXYiLDYpKDE3LCJkaXYiLDcpKDE4LCJpbnB1dCIsOCkscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiB2aShoLmRjRGlyZWN0b3J5LHYpfHwoaC5kY0RpcmVjdG9y''@;'; put 'put ''eT12KSx2fSksaGUoKSgpKCksZGUoMTksInAiLDQpLExlKDIwLCIgQmVsb3cgYXJlIHRoZSBsaXN0IG9mIGdyb3VwcyB0byB3aGljaCB5b3UgYmVsb25nLiBUaGUgZ3JvdXAgeW91IHNlbGVjdCB3aWxsIGJlY29tZSB0aGUgRGF0YSBDb250cm9sbGVyIEFkbWluIEdyb3VwLCBhbmQgZXZlcnlv''@;'; put 'put ''bmUgaW4gaXQgd2lsbCBoYXZlIHVucmVzdHJpY3RlZCBhY2Nlc3MgdG8gRGF0YSBDb250cm9sbGVyLlxuIiksaGUoKSxkZSgyMSwibGFiZWwiLDUpLExlKDIyLCJEYXRhIENvbnRyb2xsZXIgQWRtaW4gZ3JvdXAiKSxoZSgpLGRlKDIzLCJjbHItc2VsZWN0LWNvbnRhaW5lciIsOSkoMjQsInNl''@;'; put 'put ''bGVjdCIsMTApLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gdmkoaC5kY0FkbWluR3JvdXAsdil8fChoLmRjQWRtaW5Hcm91cD12KSx2fSksZ3QoMjUsUiRlLDIsMywib3B0aW9uIiwxMSksaGUoKSgpLGRlKDI2LCJwIiw0KSxMZSgyNywiIE5vdywgY3JlYXRlIHRoZSB0''@;'; put 'put ''YXJnZXQgZGlyZWN0b3J5IGFuZCBkZXBsb3kgdGhlIGNvbnRyb2wgbGlicmFyeSB1c2luZyB0aGUgYWRtaW4gZ3JvdXAgc2VsZWN0ZWQgYWJvdmU6XG4iKSxoZSgpLGRlKDI4LCJkaXYiLDEyKSgyOSwiYnV0dG9uIiwxMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLm1ha2VEYXRh''@;'; put 'put ''KCl9KSxMZSgzMCwiIFNVQk1JVCAiKSxoZSgpKCksR3QoMzEsImhyIiwyKSxkZSgzMiwiZGl2IiwxNCkoMzMsInAiKSxMZSgzNCwiWW91IGFyZSBjb25uZWN0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIGNyZWRlbnRpYWxzOiIpLGhlKCksZGUoMzUsInVsIikoMzYsImxpIiksTGUoMzcpLGhlKCks''@;'; put 'put ''ZGUoMzgsImxpIiksTGUoMzkpLGhlKCksZGUoNDAsImxpIiksTGUoNDEpLGhlKCksZGUoNDIsImxpIiksTGUoNDMpLGhlKCkoKSgpKSwyJmQmJih4ZSgibmdJZiIsaC5sb2FkaW5nKSxmZSg5KSxScigiICIsaC5TWVNIT1NUTkFNRSwiIiksZmUoMyksX3IoaC5TWVNVU0VSSUQpLGZlKDYpLGZp''@;'; put 'put ''KCJuZ01vZGVsIixoLmRjRGlyZWN0b3J5KSxmZSg2KSxmaSgibmdNb2RlbCIsaC5kY0FkbWluR3JvdXApLGZlKCkseGUoIm5nRm9yT2YiLGguZGNBZG1pbkdyb3VwTGlzdCksZmUoMTIpLFJyKCJNRVRBUEVSU09OOiAiLGguTUVUQVBFUlNPTiwiIiksZmUoMiksUnIoIlNZU1VTRVJJRDogIixo''@;'; put 'put ''LlNZU1VTRVJJRCwiIiksZmUoMiksUnIoIlNZU0hPU1ROQU1FOiAiLGguU1lTSE9TVE5BTUUsIiIpLGZlKDIpLFJyKCJTWVNWTE9ORzogIixoLlNZU1ZMT05HLCIiKSl9LGRlcGVuZGVuY2llczpbc3MseW8sVWYsWmYsUWwsemYsUXMsWXMsdXMsWnksVXldLHN0eWxlczpbIi5jbHItY29udHJv''@;'; put 'put ''bC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjUwdnd9LmNsci1pbnB1dC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNsci1pbnB1dC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS50aGluUHJv''@;'; put 'put ''Z3Jlc3NbX25nY29udGVudC0lQ09NUCVde2xlZnQ6MDtyaWdodDowO3dpZHRoOnVuc2V0O2hlaWdodDoxcHg7bWFyZ2luLXRvcDowIWltcG9ydGFudH0udGhpblByb2dyZXNzW19uZ2NvbnRlbnQtJUNPTVAlXTphZnRlcnt0b3A6MH0iXX0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gTyRlKGMs''@;'; put 'put ''bCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2Iiw0KSgxLCJkaXYiLDUpLExlKDIsIlRlcm1zIGFuZCBDb25kaXRpb25zIiksaGUoKSxkZSgzLCJkaXYiLDYpKDQsImRpdiIsNykoNSwicCIpLExlKDYsIiBUaGUgRGVtbyB2ZXJzaW9uIG9mIERhdGEgQ29udHJvbGxlciBpcyBmcmVl''@;'; put 'put ''IGZvciBFVkFMVUFUSU9OIHB1cnBvc2VzIG9ubHkuIEJlZm9yZSBwcm9jZWVkaW5nIHdpdGggY29uZmlndXJhdGlvbiwgcGxlYXNlIGNvbmZpcm0gdGhhdCB5b3UgaGF2ZSByZWFkLCB1bmRlcnN0b29kLCBhbmQgYWdyZWVkIHRvIHRoZSAiKSxkZSg3LCJhIiw4KSxMZSg4LCJEYXRhIENvbnRy''@;'; put 'put ''b2xsZXIgZm9yIFNBU1x4YTkgRXZhbHVhdGlvbiBBZ3JlZW1lbnQiKSxoZSgpLExlKDksIi4gIiksaGUoKSgpLEd0KDEwLCJociIsOSksZGUoMTEsImNsci1jaGVja2JveC13cmFwcGVyIikoMTIsImlucHV0IiwxMCksRnQoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2Uo''@;'; put 'put ''KS50ZXJtc0FncmVlQ2hhbmdlKCkpfSksaGUoKSxkZSgxMywibGFiZWwiKSxMZSgxNCwiSSBoYXZlIHJlYWQgYW5kIGFncmVlIHRvIHRoZSB0ZXJtcyBvZiB0aGUgIiksZGUoMTUsImEiLDgpLExlKDE2LCJEYXRhIENvbnRyb2xsZXIgZm9yIFNBU1x4YTkgRXZhbHVhdGlvbiBBZ3JlZW1lbnQi''@;'; put 'put ''KSxoZSgpKCkoKSgpKCl9fWZ1bmN0aW9uIFAkZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsMTUpKDEsImFwcC1hdXRvbWF0aWMtZGVwbG95IiwxNiksRnQoIm9uTmF2aWdhdGVUb0hvbWUiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDMpLm9uTmF2aWdhdGVU''@;'; put 'put ''b0hvbWUoKSl9KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPU9lKDMpO2ZlKCkseGUoInNhc0pzIixhLnNhc0pzKSgic2FzSnNDb25maWciLGEuc2FzSnNDb25maWcpKCJkY0FkYXB0ZXJTZXR0aW5ncyIsYS5kY0FkYXB0ZXJTZXR0aW5ncykoImFwcExvYyIsYS5hcHBMb2MpKCJkY1BhdGgiLGEu''@;'; put 'put ''ZGNQYXRoKSgic2VsZWN0ZWRBZG1pbkdyb3VwIixhLnNlbGVjdGVkQWRtaW5Hcm91cCl9fWZ1bmN0aW9uIEYkZShjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsMTcpKDEsImFwcC1tYW51YWwtZGVwbG95IiwxOCksRnQoIm9uTmF2aWdhdGVUb0hvbWUiLGZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIHd0KGEpLEN0KE9lKDMpLm9uTmF2aWdhdGVUb0hvbWUoKSl9KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPU9lKDMpO2ZlKCkseGUoInNhc0pzIixhLnNhc0pzKSgic2FzSnNDb25maWciLGEuc2FzSnNDb25maWcpKCJkY0FkYXB0ZXJTZXR0aW5ncyIsYS5kY0FkYXB0ZXJTZXR0aW5n''@;'; put 'put ''cyl9fWZ1bmN0aW9uIEgkZShjLGwpe2lmKDEmYyYmKGxpKDApLGd0KDEsUCRlLDIsNiwiZGl2IiwxMykoMixGJGUsMiwzLCJkaXYiLDE0KSxjaSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoKSx4ZSgibmdJZiIsYS5hdXRvZGVwbG95KSxmZSgpLHhlKCJuZ0lmIiwhYS5hdXRvZGVwbG95KX19''@;'; put 'put ''ZnVuY3Rpb24gTiRlKGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7bGkoMCksZGUoMSwiZGl2IiwxNSkoMiwiYXBwLXNhc2pzLWNvbmZpZ3VyYXRvciIsMTgpLEZ0KCJvbk5hdmlnYXRlVG9Ib21lIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5vbk5hdmlnYXRlVG9Ib21lKCkp''@;'; put 'put ''fSksaGUoKSgpLGNpKCl9aWYoMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDIpLHhlKCJzYXNKcyIsYS5zYXNKcykoInNhc0pzQ29uZmlnIixhLnNhc0pzQ29uZmlnKSgiZGNBZGFwdGVyU2V0dGluZ3MiLGEuZGNBZGFwdGVyU2V0dGluZ3MpfX1mdW5jdGlvbiBWJGUoYyxsKXtpZigxJmMpe2NvbnN0''@;'; put 'put ''IGE9T24oKTtsaSgwKSxkZSgxLCJkaXYiLDE1KSgyLCJhcHAtc2FzanMtY29uZmlndXJhdG9yIiwxOCksRnQoIm9uTmF2aWdhdGVUb0hvbWUiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDIpLm9uTmF2aWdhdGVUb0hvbWUoKSl9KSxoZSgpKCksY2koKX1pZigyJmMpe2NvbnN0IGE9''@;'; put 'put ''T2UoMik7ZmUoMikseGUoInNhc0pzIixhLnNhc0pzKSgic2FzSnNDb25maWciLGEuc2FzSnNDb25maWcpKCJkY0FkYXB0ZXJTZXR0aW5ncyIsYS5kY0FkYXB0ZXJTZXR0aW5ncyl9fWZ1bmN0aW9uIEIkZShjLGwpe2lmKDEmYyYmKGxpKDAsMTEpLGd0KDEsSCRlLDMsMiwibmctY29udGFpbmVy''@;'; put 'put ''IiwxMikoMixOJGUsMywzLCJuZy1jb250YWluZXIiLDEyKSgzLFYkZSwzLDMsIm5nLWNvbnRhaW5lciIsMTIpLGNpKCkpLDImYyl7Y29uc3QgYT1PZSgpO3hlKCJuZ1N3aXRjaCIsITApLGZlKCkseGUoIm5nU3dpdGNoQ2FzZSIsYS5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJU''@;'; put 'put ''eXBlLlNhc1ZpeWEpLGZlKCkseGUoIm5nU3dpdGNoQ2FzZSIsYS5zYXNKc0NvbmZpZy5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhc2pzKSxmZSgpLHhlKCJuZ1N3aXRjaENhc2UiLGEuc2FzSnNDb25maWcuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KX19bGV0IEZoZT0oKCk9''@;'; put 'put ''PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYpe3RoaXMuYXBwU3RvcmVTZXJ2aWNlPWEsdGhpcy5zYXNTZXJ2aWNlPWQsdGhpcy5sb2dnZXJTZXJ2aWNlPWgsdGhpcy5yb3V0ZXI9Zix0aGlzLnN0ZXA9MCx0aGlzLmFkbWluR3JvdXBzPVtdLHRoaXMuY2xpZW50X2lkPSIiLHRoaXMuY2xp''@;'; put 'put ''ZW50X3NlY3JldD0iIix0aGlzLmFwcExvYz0iIix0aGlzLmRjUGF0aD0iIix0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cD0iIix0aGlzLmF1dG9kZXBsb3k9ITAsdGhpcy5qc29uRmlsZT1udWxsLHRoaXMuc2FzSnNDb25maWc9bmV3IGZoLlNBU2pzQ29uZmlnLHRoaXMuU2VydmVyVHlwZT1NMC5Z''@;'; put 'put ''LHRoaXMuZGNBZGFwdGVyU2V0dGluZ3M9dGhpcy5hcHBTdG9yZVNlcnZpY2UuZ2V0RGNBZGFwdGVyU2V0dGluZ3MoKSx0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoIm1hbnVhbGRlcGxveSIpJiYodGhpcy5hdXRvZGVwbG95PSExKSx0aGlzLnNhc0pzPXRoaXMuc2FzU2VydmljZS5nZXRTYXNq''@;'; put 'put ''c0luc3RhbmNlKCksdGhpcy5zYXNKc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLmFwcExvYz10aGlzLmRjQWRhcHRlclNldHRpbmdzPy5hcHBMb2N8fCIiLHRoaXMuY2xpZW50X2lkPWxvY2FsU3RvcmFnZS5nZXRJdGVtKCJkZXBsb3lfY2xpZW50X2lkIil8''@;'; put 'put ''fCIiLHRoaXMuY2xpZW50X3NlY3JldD1sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiZGVwbG95X3NlY3JldF9rZXkiKXx8IiIsdGhpcy5kY1BhdGg9bG9jYWxTdG9yYWdlLmdldEl0ZW0oImRlcGxveV9kY19sb2MiKXx8IiJ9bmdPbkluaXQoKXt0aGlzLnNhc0pzQ29uZmlnLnNlcnZlclR5cGU9PT1N''@;'; put 'put ''MC5ZLlNhc1ZpeWEmJmZldGNoKCJzYXNidWlsZC92aXlhLmpzb24iKS50aGVuKGE9PmEudGV4dCgpKS50aGVuKGE9PntsZXQgZD1udWxsO3RyeXtkPUpTT04ucGFyc2UoYSl9Y2F0Y2goaCl7Y29uc29sZS5lcnJvcihoKX1kJiYodGhpcy5qc29uRmlsZT1kLHRoaXMubG9nZ2VyU2VydmljZS5s''@;'; put 'put ''b2codGhpcy5qc29uRmlsZSkpfSksdGhpcy5zZXREZXBsb3lEZWZhdWx0cygpfXNldERlcGxveURlZmF1bHRzKCl7dGhpcy5kY1BhdGg9dGhpcy5kY0FkYXB0ZXJTZXR0aW5ncz8uZGNQYXRofHwiIix0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cD10aGlzLmRjQWRhcHRlclNldHRpbmdzPy5hZG1p''@;'; put 'put ''bkdyb3VwfHwiIix0aGlzLnNlbGVjdGVkQWRtaW5Hcm91cHx8KHRoaXMuc2VsZWN0ZWRBZG1pbkdyb3VwPSJTQVNBZG1pbmlzdHJhdG9ycyIpfXRlcm1zQWdyZWVDaGFuZ2UoKXt0aGlzLmF1dG9kZXBsb3l8fHRoaXMuZ2V0QWRtaW5Hcm91cHMoKSx0aGlzLnN0ZXArK31nZXRBZG1pbkdyb3Vw''@;'; put 'put ''cygpe2ZldGNoKHRoaXMuc2FzSnNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy9ncm91cHM/c29ydEJ5PW5hbWUmbGltaXQ9NTAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihhPT5hLnRleHQoKSkudGhlbihhPT57bGV0IGQ7dHJ5e2Q9SlNPTi5w''@;'; put 'put ''YXJzZShhKX1jYXRjaChoKXtjb25zb2xlLmVycm9yKGgpfWQmJih0aGlzLmFkbWluR3JvdXBzPWQuaXRlbXMsdGhpcy5zZWxlY3RlZEFkbWluR3JvdXA9dGhpcy5hZG1pbkdyb3Vwc1swXS5pZCl9KX1vbk5hdmlnYXRlVG9Ib21lKCl7d2luZG93Lm9wZW4obG9jYXRpb24uaHJlZi5zcGxpdCgi''@;'; put 'put ''IyIpWzBdLCJfYmxhbmsiKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShxOCksR2UoSnMpLEdlKFNkKSxHZShMcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWRlcGxveSJdXSxob3N0QXR0''@;'; put 'put ''cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwiY29udGVudC1hcmVhIiwicG9zaXRpb24tcmVsYXRpdmUiXSxbMSwiY2xyLXJvdyJdLFsiaWQiLCJUQ1MiLCJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbMywibmdTd2l0Y2giLDQsIm5nSWYiXSxb''@;'; put 'put ''ImlkIiwiVENTIiwxLCJjYXJkIl0sWzEsImNhcmQtaGVhZGVyIl0sWzEsImNhcmQtYmxvY2siXSxbMSwiY2FyZC10ZXh0Il0sWyJocmVmIiwiaHR0cHM6Ly9kb2NzLmRhdGFjb250cm9sbGVyLmlvL2V2YWx1YXRpb24tbGljZW5jZS1hZ3JlZW1lbnQiLCJ0YXJnZXQiLCJfYmxhbmsiXSxbMSwi''@;'; put 'put ''bGlnaHQiXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNoZWNrYm94IiwzLCJjaGFuZ2UiXSxbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWyJjbGFzcyIsImF1dG9kZXBsb3ktc2VjdGlvbiBjYXJkIiw0LCJuZ0lmIl0sWyJpZCIsIm1haW5ib2R5IiwiY2xhc3MiLCJjYXJk''@;'; put 'put ''Iiw0LCJuZ0lmIl0sWzEsImF1dG9kZXBsb3ktc2VjdGlvbiIsImNhcmQiXSxbMywib25OYXZpZ2F0ZVRvSG9tZSIsInNhc0pzIiwic2FzSnNDb25maWciLCJkY0FkYXB0ZXJTZXR0aW5ncyIsImFwcExvYyIsImRjUGF0aCIsInNlbGVjdGVkQWRtaW5Hcm91cCJdLFsiaWQiLCJtYWluYm9keSIs''@;'; put 'put ''MSwiY2FyZCJdLFszLCJvbk5hdmlnYXRlVG9Ib21lIiwic2FzSnMiLCJzYXNKc0NvbmZpZyIsImRjQWRhcHRlclNldHRpbmdzIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpLGd0KDIsTyRlLDE3LDAsImRpdiIsMiksaGUoKSxndCgzLEIk''@;'; put 'put ''ZSw0LDQsIm5nLWNvbnRhaW5lciIsMyksaGUoKSksMiZkJiYoZmUoMikseGUoIm5nSWYiLDA9PT1oLnN0ZXApLGZlKCkseGUoIm5nSWYiLGguc3RlcD4wKSl9LGRlcGVuZGVuY2llczpbeW8sYjIsaXAsdXMsVzEsRGQsZyRlLEQkZSxMJGVdLHN0eWxlczpbIi5jYXJkW19uZ2NvbnRlbnQtJUNP''@;'; put 'put ''TVAlXXttYXJnaW4tdG9wOjB9LmJ0bltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDoxMHB4fS5sb2ctd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTtiYWNrZ3JvdW5kOiNmMGYwZjA7Ym9yZGVyOjFweCBzb2xpZCAjYzljOWM5O3BhZGRpbmc6MTBweDtvdmVyZmxv''@;'; put 'put ''dzphdXRvO3doaXRlLXNwYWNlOnByZS13cmFwfSNjb250ZXh0cy1idG5bX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6M3B4IDAgMDttaW4td2lkdGg6MzBweDttYXJnaW4tbGVmdDoxMHB4O2hlaWdodDozMHB4O2Rpc3BsYXk6aW5saW5lLWZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjth''@;'; put 'put ''bGlnbi1pdGVtczpjZW50ZXJ9LnZhbGlkYXRpb24tYmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7bWFyZ2luLXRvcDoyMHB4O2FsaWduLWl0ZW1zOmNlbnRlcn0udmFsaWRhdGlvbi1iYXJbX25nY29udGVudC0lQ09NUCVdICAgY2xyLWljb25bX25nY29udGVudC0lQ09NUCVd''@;'; put 'put ''e21hcmdpbi1yaWdodDo1cHh9LmF1dG9kZXBsb3ktc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzowIDE1cHh9LmF1dG9kZXBsb3ktc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAuY2xyLWNoZWNrYm94LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbjoyMHB4''@;'; put 'put ''IDB9LmF1dG9kZXBsb3ktc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV0gICAuYnRuLWF1dG9kZXBsb3lbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjE1cHggMH0iXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgaiRlPVt7cGF0aDoiIixjb21wb25lbnQ6RmhlfSx7cGF0''@;'; put 'put ''aDoibWFudWFsZGVwbG95Iixjb21wb25lbnQ6RmhlfV07bGV0IHokZT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1B''@;'; put 'put ''cih7aW1wb3J0czpbamMuZm9yQ2hpbGQoaiRlKSxqY119KX19cmV0dXJuIGN9KSgpLFUkZT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlz''@;'; put 'put ''Llx1MDI3NWluaj1Bcih7aW1wb3J0czpbTG8sRGMsajAseiRlXX0pfX1yZXR1cm4gY30pKCk7Xyg0OTUzNyksXyg3NzUyNSksXyg2OTg3NSksXygxNjA5MyksXyg5NTYwOCksXygxNjQ5MyksXyg2MTkzNCksXygxMDEwMSksXygyNjg4OSksXyg0MzI4NyksXyg2NTc0NSksXygyOTcwOCksXyg2''@;'; put 'put ''NTExNyksXygxMDM2Myk7Y29uc3R7ZW50cmllczpIaGUsc2V0UHJvdG90eXBlT2Y6TmhlLGlzRnJvemVuOlokZSxnZXRQcm90b3R5cGVPZjpXJGUsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOlkkZX09T2JqZWN0O2xldHtmcmVlemU6RzEsc2VhbDprMixjcmVhdGU6VmhlfT1PYmplY3Qse2Fw''@;'; put 'put ''cGx5OnpHLGNvbnN0cnVjdDpVR309dHlwZW9mIFJlZmxlY3Q8InUiJiZSZWZsZWN0O0cxfHwoRzE9ZnVuY3Rpb24obCl7cmV0dXJuIGx9KSxrMnx8KGsyPWZ1bmN0aW9uKGwpe3JldHVybiBsfSksekd8fCh6Rz1mdW5jdGlvbihsLGEsZCl7cmV0dXJuIGwuYXBwbHkoYSxkKX0pLFVHfHwoVUc9''@;'; put 'put ''ZnVuY3Rpb24obCxhKXtyZXR1cm4gbmV3IGwoLi4uYSl9KTtjb25zdCBfTz1LMShBcnJheS5wcm90b3R5cGUuZm9yRWFjaCksRyRlPUsxKEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZiksQmhlPUsxKEFycmF5LnByb3RvdHlwZS5wb3ApLG9FPUsxKEFycmF5LnByb3RvdHlwZS5wdXNoKSwk''@;'; put 'put ''JGU9SzEoQXJyYXkucHJvdG90eXBlLnNwbGljZSksd089SzEoU3RyaW5nLnByb3RvdHlwZS50b0xvd2VyQ2FzZSksWkc9SzEoU3RyaW5nLnByb3RvdHlwZS50b1N0cmluZyksamhlPUsxKFN0cmluZy5wcm90b3R5cGUubWF0Y2gpLGFFPUsxKFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSksSyRl''@;'; put 'put ''PUsxKFN0cmluZy5wcm90b3R5cGUuaW5kZXhPZikscSRlPUsxKFN0cmluZy5wcm90b3R5cGUudHJpbSksWGY9SzEoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSksJDE9SzEoUmVnRXhwLnByb3RvdHlwZS50ZXN0KSxzRT1mdW5jdGlvbiBYJGUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7''@;'; put 'put ''Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07cmV0dXJuIFVHKGMsYSl9fShUeXBlRXJyb3IpO2Z1bmN0aW9uIEsxKGMpe3JldHVybiBmdW5jdGlvbihsKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5l''@;'; put 'put ''dyBBcnJheShhPjE/YS0xOjApLGg9MTtoPGE7aCsrKWRbaC0xXT1hcmd1bWVudHNbaF07cmV0dXJuIHpHKGMsbCxkKX19ZnVuY3Rpb24gYnMoYyxsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06d087TmhlJiZOaGUoYyxudWxs''@;'; put 'put ''KTtsZXQgZD1sLmxlbmd0aDtmb3IoO2QtLTspe2xldCBoPWxbZF07aWYoInN0cmluZyI9PXR5cGVvZiBoKXtjb25zdCBmPWEoaCk7ZiE9PWgmJihaJGUobCl8fChsW2RdPWYpLGg9Zil9Y1toXT0hMH1yZXR1cm4gY31mdW5jdGlvbiBKJGUoYyl7Zm9yKGxldCBsPTA7bDxjLmxlbmd0aDtsKysp''@;'; put 'put ''WGYoYyxsKXx8KGNbbF09bnVsbCk7cmV0dXJuIGN9ZnVuY3Rpb24gTzcoYyl7Y29uc3QgbD1WaGUobnVsbCk7Zm9yKGNvbnN0W2EsZF1vZiBIaGUoYykpWGYoYyxhKSYmKGxbYV09QXJyYXkuaXNBcnJheShkKT9KJGUoZCk6ZCYmIm9iamVjdCI9PXR5cGVvZiBkJiZkLmNvbnN0cnVjdG9yPT09''@;'; put 'put ''T2JqZWN0P083KGQpOmQpO3JldHVybiBsfWZ1bmN0aW9uIGxFKGMsbCl7Zm9yKDtudWxsIT09Yzspe2NvbnN0IGQ9WSRlKGMsbCk7aWYoZCl7aWYoZC5nZXQpcmV0dXJuIEsxKGQuZ2V0KTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZC52YWx1ZSlyZXR1cm4gSzEoZC52YWx1ZSl9Yz1XJGUoYyl9''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uIGEoKXtyZXR1cm4gbnVsbH19Y29uc3QgemhlPUcxKFsiYSIsImFiYnIiLCJhY3JvbnltIiwiYWRkcmVzcyIsImFyZWEiLCJhcnRpY2xlIiwiYXNpZGUiLCJhdWRpbyIsImIiLCJiZGkiLCJiZG8iLCJiaWciLCJibGluayIsImJsb2NrcXVvdGUiLCJib2R5IiwiYnIi''@;'; put 'put ''LCJidXR0b24iLCJjYW52YXMiLCJjYXB0aW9uIiwiY2VudGVyIiwiY2l0ZSIsImNvZGUiLCJjb2wiLCJjb2xncm91cCIsImNvbnRlbnQiLCJkYXRhIiwiZGF0YWxpc3QiLCJkZCIsImRlY29yYXRvciIsImRlbCIsImRldGFpbHMiLCJkZm4iLCJkaWFsb2ciLCJkaXIiLCJkaXYiLCJkbCIsImR0''@;'; put 'put ''IiwiZWxlbWVudCIsImVtIiwiZmllbGRzZXQiLCJmaWdjYXB0aW9uIiwiZmlndXJlIiwiZm9udCIsImZvb3RlciIsImZvcm0iLCJoMSIsImgyIiwiaDMiLCJoNCIsImg1IiwiaDYiLCJoZWFkIiwiaGVhZGVyIiwiaGdyb3VwIiwiaHIiLCJodG1sIiwiaSIsImltZyIsImlucHV0IiwiaW5zIiwi''@;'; put 'put ''a2JkIiwibGFiZWwiLCJsZWdlbmQiLCJsaSIsIm1haW4iLCJtYXAiLCJtYXJrIiwibWFycXVlZSIsIm1lbnUiLCJtZW51aXRlbSIsIm1ldGVyIiwibmF2Iiwibm9iciIsIm9sIiwib3B0Z3JvdXAiLCJvcHRpb24iLCJvdXRwdXQiLCJwIiwicGljdHVyZSIsInByZSIsInByb2dyZXNzIiwicSIs''@;'; put 'put ''InJwIiwicnQiLCJydWJ5IiwicyIsInNhbXAiLCJzZWN0aW9uIiwic2VsZWN0Iiwic2hhZG93Iiwic21hbGwiLCJzb3VyY2UiLCJzcGFjZXIiLCJzcGFuIiwic3RyaWtlIiwic3Ryb25nIiwic3R5bGUiLCJzdWIiLCJzdW1tYXJ5Iiwic3VwIiwidGFibGUiLCJ0Ym9keSIsInRkIiwidGVtcGxh''@;'; put 'put ''dGUiLCJ0ZXh0YXJlYSIsInRmb290IiwidGgiLCJ0aGVhZCIsInRpbWUiLCJ0ciIsInRyYWNrIiwidHQiLCJ1IiwidWwiLCJ2YXIiLCJ2aWRlbyIsIndiciJdKSxXRz1HMShbInN2ZyIsImEiLCJhbHRnbHlwaCIsImFsdGdseXBoZGVmIiwiYWx0Z2x5cGhpdGVtIiwiYW5pbWF0ZWNvbG9yIiwi''@;'; put 'put ''YW5pbWF0ZW1vdGlvbiIsImFuaW1hdGV0cmFuc2Zvcm0iLCJjaXJjbGUiLCJjbGlwcGF0aCIsImRlZnMiLCJkZXNjIiwiZWxsaXBzZSIsImZpbHRlciIsImZvbnQiLCJnIiwiZ2x5cGgiLCJnbHlwaHJlZiIsImhrZXJuIiwiaW1hZ2UiLCJsaW5lIiwibGluZWFyZ3JhZGllbnQiLCJtYXJrZXIi''@;'; put 'put ''LCJtYXNrIiwibWV0YWRhdGEiLCJtcGF0aCIsInBhdGgiLCJwYXR0ZXJuIiwicG9seWdvbiIsInBvbHlsaW5lIiwicmFkaWFsZ3JhZGllbnQiLCJyZWN0Iiwic3RvcCIsInN0eWxlIiwic3dpdGNoIiwic3ltYm9sIiwidGV4dCIsInRleHRwYXRoIiwidGl0bGUiLCJ0cmVmIiwidHNwYW4iLCJ2''@;'; put 'put ''aWV3Iiwidmtlcm4iXSksWUc9RzEoWyJmZUJsZW5kIiwiZmVDb2xvck1hdHJpeCIsImZlQ29tcG9uZW50VHJhbnNmZXIiLCJmZUNvbXBvc2l0ZSIsImZlQ29udm9sdmVNYXRyaXgiLCJmZURpZmZ1c2VMaWdodGluZyIsImZlRGlzcGxhY2VtZW50TWFwIiwiZmVEaXN0YW50TGlnaHQiLCJmZURy''@;'; put 'put ''b3BTaGFkb3ciLCJmZUZsb29kIiwiZmVGdW5jQSIsImZlRnVuY0IiLCJmZUZ1bmNHIiwiZmVGdW5jUiIsImZlR2F1c3NpYW5CbHVyIiwiZmVJbWFnZSIsImZlTWVyZ2UiLCJmZU1lcmdlTm9kZSIsImZlTW9ycGhvbG9neSIsImZlT2Zmc2V0IiwiZmVQb2ludExpZ2h0IiwiZmVTcGVjdWxhckxp''@;'; put 'put ''Z2h0aW5nIiwiZmVTcG90TGlnaHQiLCJmZVRpbGUiLCJmZVR1cmJ1bGVuY2UiXSksUSRlPUcxKFsiYW5pbWF0ZSIsImNvbG9yLXByb2ZpbGUiLCJjdXJzb3IiLCJkaXNjYXJkIiwiZm9udC1mYWNlIiwiZm9udC1mYWNlLWZvcm1hdCIsImZvbnQtZmFjZS1uYW1lIiwiZm9udC1mYWNlLXNyYyIs''@;'; put 'put ''ImZvbnQtZmFjZS11cmkiLCJmb3JlaWdub2JqZWN0IiwiaGF0Y2giLCJoYXRjaHBhdGgiLCJtZXNoIiwibWVzaGdyYWRpZW50IiwibWVzaHBhdGNoIiwibWVzaHJvdyIsIm1pc3NpbmctZ2x5cGgiLCJzY3JpcHQiLCJzZXQiLCJzb2xpZGNvbG9yIiwidW5rbm93biIsInVzZSJdKSxHRz1HMShb''@;'; put 'put ''Im1hdGgiLCJtZW5jbG9zZSIsIm1lcnJvciIsIm1mZW5jZWQiLCJtZnJhYyIsIm1nbHlwaCIsIm1pIiwibWxhYmVsZWR0ciIsIm1tdWx0aXNjcmlwdHMiLCJtbiIsIm1vIiwibW92ZXIiLCJtcGFkZGVkIiwibXBoYW50b20iLCJtcm9vdCIsIm1yb3ciLCJtcyIsIm1zcGFjZSIsIm1zcXJ0Iiwi''@;'; put 'put ''bXN0eWxlIiwibXN1YiIsIm1zdXAiLCJtc3Vic3VwIiwibXRhYmxlIiwibXRkIiwibXRleHQiLCJtdHIiLCJtdW5kZXIiLCJtdW5kZXJvdmVyIiwibXByZXNjcmlwdHMiXSksZUtlPUcxKFsibWFjdGlvbiIsIm1hbGlnbmdyb3VwIiwibWFsaWdubWFyayIsIm1sb25nZGl2IiwibXNjYXJyaWVz''@;'; put 'put ''IiwibXNjYXJyeSIsIm1zZ3JvdXAiLCJtc3RhY2siLCJtc2xpbmUiLCJtc3JvdyIsInNlbWFudGljcyIsImFubm90YXRpb24iLCJhbm5vdGF0aW9uLXhtbCIsIm1wcmVzY3JpcHRzIiwibm9uZSJdKSxVaGU9RzEoWyIjdGV4dCJdKSxaaGU9RzEoWyJhY2NlcHQiLCJhY3Rpb24iLCJhbGlnbiIs''@;'; put 'put ''ImFsdCIsImF1dG9jYXBpdGFsaXplIiwiYXV0b2NvbXBsZXRlIiwiYXV0b3BpY3R1cmVpbnBpY3R1cmUiLCJhdXRvcGxheSIsImJhY2tncm91bmQiLCJiZ2NvbG9yIiwiYm9yZGVyIiwiY2FwdHVyZSIsImNlbGxwYWRkaW5nIiwiY2VsbHNwYWNpbmciLCJjaGVja2VkIiwiY2l0ZSIsImNsYXNz''@;'; put 'put ''IiwiY2xlYXIiLCJjb2xvciIsImNvbHMiLCJjb2xzcGFuIiwiY29udHJvbHMiLCJjb250cm9sc2xpc3QiLCJjb29yZHMiLCJjcm9zc29yaWdpbiIsImRhdGV0aW1lIiwiZGVjb2RpbmciLCJkZWZhdWx0IiwiZGlyIiwiZGlzYWJsZWQiLCJkaXNhYmxlcGljdHVyZWlucGljdHVyZSIsImRpc2Fi''@;'; put 'put ''bGVyZW1vdGVwbGF5YmFjayIsImRvd25sb2FkIiwiZHJhZ2dhYmxlIiwiZW5jdHlwZSIsImVudGVya2V5aGludCIsImZhY2UiLCJmb3IiLCJoZWFkZXJzIiwiaGVpZ2h0IiwiaGlkZGVuIiwiaGlnaCIsImhyZWYiLCJocmVmbGFuZyIsImlkIiwiaW5wdXRtb2RlIiwiaW50ZWdyaXR5IiwiaXNt''@;'; put 'put ''YXAiLCJraW5kIiwibGFiZWwiLCJsYW5nIiwibGlzdCIsImxvYWRpbmciLCJsb29wIiwibG93IiwibWF4IiwibWF4bGVuZ3RoIiwibWVkaWEiLCJtZXRob2QiLCJtaW4iLCJtaW5sZW5ndGgiLCJtdWx0aXBsZSIsIm11dGVkIiwibmFtZSIsIm5vbmNlIiwibm9zaGFkZSIsIm5vdmFsaWRhdGUi''@;'; put 'put ''LCJub3dyYXAiLCJvcGVuIiwib3B0aW11bSIsInBhdHRlcm4iLCJwbGFjZWhvbGRlciIsInBsYXlzaW5saW5lIiwicG9wb3ZlciIsInBvcG92ZXJ0YXJnZXQiLCJwb3BvdmVydGFyZ2V0YWN0aW9uIiwicG9zdGVyIiwicHJlbG9hZCIsInB1YmRhdGUiLCJyYWRpb2dyb3VwIiwicmVhZG9ubHki''@;'; put 'put ''LCJyZWwiLCJyZXF1aXJlZCIsInJldiIsInJldmVyc2VkIiwicm9sZSIsInJvd3MiLCJyb3dzcGFuIiwic3BlbGxjaGVjayIsInNjb3BlIiwic2VsZWN0ZWQiLCJzaGFwZSIsInNpemUiLCJzaXplcyIsInNwYW4iLCJzcmNsYW5nIiwic3RhcnQiLCJzcmMiLCJzcmNzZXQiLCJzdGVwIiwic3R5''@;'; put 'put ''bGUiLCJzdW1tYXJ5IiwidGFiaW5kZXgiLCJ0aXRsZSIsInRyYW5zbGF0ZSIsInR5cGUiLCJ1c2VtYXAiLCJ2YWxpZ24iLCJ2YWx1ZSIsIndpZHRoIiwid3JhcCIsInhtbG5zIiwic2xvdCJdKSwkRz1HMShbImFjY2VudC1oZWlnaHQiLCJhY2N1bXVsYXRlIiwiYWRkaXRpdmUiLCJhbGlnbm1l''@;'; put 'put ''bnQtYmFzZWxpbmUiLCJhbXBsaXR1ZGUiLCJhc2NlbnQiLCJhdHRyaWJ1dGVuYW1lIiwiYXR0cmlidXRldHlwZSIsImF6aW11dGgiLCJiYXNlZnJlcXVlbmN5IiwiYmFzZWxpbmUtc2hpZnQiLCJiZWdpbiIsImJpYXMiLCJieSIsImNsYXNzIiwiY2xpcCIsImNsaXBwYXRodW5pdHMiLCJjbGlw''@;'; put 'put ''LXBhdGgiLCJjbGlwLXJ1bGUiLCJjb2xvciIsImNvbG9yLWludGVycG9sYXRpb24iLCJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMiLCJjb2xvci1wcm9maWxlIiwiY29sb3ItcmVuZGVyaW5nIiwiY3giLCJjeSIsImQiLCJkeCIsImR5IiwiZGlmZnVzZWNvbnN0YW50IiwiZGlyZWN0aW9u''@;'; put 'put ''IiwiZGlzcGxheSIsImRpdmlzb3IiLCJkdXIiLCJlZGdlbW9kZSIsImVsZXZhdGlvbiIsImVuZCIsImV4cG9uZW50IiwiZmlsbCIsImZpbGwtb3BhY2l0eSIsImZpbGwtcnVsZSIsImZpbHRlciIsImZpbHRlcnVuaXRzIiwiZmxvb2QtY29sb3IiLCJmbG9vZC1vcGFjaXR5IiwiZm9udC1mYW1p''@;'; put 'put ''bHkiLCJmb250LXNpemUiLCJmb250LXNpemUtYWRqdXN0IiwiZm9udC1zdHJldGNoIiwiZm9udC1zdHlsZSIsImZvbnQtdmFyaWFudCIsImZvbnQtd2VpZ2h0IiwiZngiLCJmeSIsImcxIiwiZzIiLCJnbHlwaC1uYW1lIiwiZ2x5cGhyZWYiLCJncmFkaWVudHVuaXRzIiwiZ3JhZGllbnR0cmFu''@;'; put 'put ''c2Zvcm0iLCJoZWlnaHQiLCJocmVmIiwiaWQiLCJpbWFnZS1yZW5kZXJpbmciLCJpbiIsImluMiIsImludGVyY2VwdCIsImsiLCJrMSIsImsyIiwiazMiLCJrNCIsImtlcm5pbmciLCJrZXlwb2ludHMiLCJrZXlzcGxpbmVzIiwia2V5dGltZXMiLCJsYW5nIiwibGVuZ3RoYWRqdXN0IiwibGV0''@;'; put 'put ''dGVyLXNwYWNpbmciLCJrZXJuZWxtYXRyaXgiLCJrZXJuZWx1bml0bGVuZ3RoIiwibGlnaHRpbmctY29sb3IiLCJsb2NhbCIsIm1hcmtlci1lbmQiLCJtYXJrZXItbWlkIiwibWFya2VyLXN0YXJ0IiwibWFya2VyaGVpZ2h0IiwibWFya2VydW5pdHMiLCJtYXJrZXJ3aWR0aCIsIm1hc2tjb250''@;'; put 'put ''ZW50dW5pdHMiLCJtYXNrdW5pdHMiLCJtYXgiLCJtYXNrIiwibWVkaWEiLCJtZXRob2QiLCJtb2RlIiwibWluIiwibmFtZSIsIm51bW9jdGF2ZXMiLCJvZmZzZXQiLCJvcGVyYXRvciIsIm9wYWNpdHkiLCJvcmRlciIsIm9yaWVudCIsIm9yaWVudGF0aW9uIiwib3JpZ2luIiwib3ZlcmZsb3ci''@;'; put 'put ''LCJwYWludC1vcmRlciIsInBhdGgiLCJwYXRobGVuZ3RoIiwicGF0dGVybmNvbnRlbnR1bml0cyIsInBhdHRlcm50cmFuc2Zvcm0iLCJwYXR0ZXJudW5pdHMiLCJwb2ludHMiLCJwcmVzZXJ2ZWFscGhhIiwicHJlc2VydmVhc3BlY3RyYXRpbyIsInByaW1pdGl2ZXVuaXRzIiwiciIsInJ4Iiwi''@;'; put 'put ''cnkiLCJyYWRpdXMiLCJyZWZ4IiwicmVmeSIsInJlcGVhdGNvdW50IiwicmVwZWF0ZHVyIiwicmVzdGFydCIsInJlc3VsdCIsInJvdGF0ZSIsInNjYWxlIiwic2VlZCIsInNoYXBlLXJlbmRlcmluZyIsInNsb3BlIiwic3BlY3VsYXJjb25zdGFudCIsInNwZWN1bGFyZXhwb25lbnQiLCJzcHJl''@;'; put 'put ''YWRtZXRob2QiLCJzdGFydG9mZnNldCIsInN0ZGRldmlhdGlvbiIsInN0aXRjaHRpbGVzIiwic3RvcC1jb2xvciIsInN0b3Atb3BhY2l0eSIsInN0cm9rZS1kYXNoYXJyYXkiLCJzdHJva2UtZGFzaG9mZnNldCIsInN0cm9rZS1saW5lY2FwIiwic3Ryb2tlLWxpbmVqb2luIiwic3Ryb2tlLW1p''@;'; put 'put ''dGVybGltaXQiLCJzdHJva2Utb3BhY2l0eSIsInN0cm9rZSIsInN0cm9rZS13aWR0aCIsInN0eWxlIiwic3VyZmFjZXNjYWxlIiwic3lzdGVtbGFuZ3VhZ2UiLCJ0YWJpbmRleCIsInRhYmxldmFsdWVzIiwidGFyZ2V0eCIsInRhcmdldHkiLCJ0cmFuc2Zvcm0iLCJ0cmFuc2Zvcm0tb3JpZ2lu''@;'; put 'put ''IiwidGV4dC1hbmNob3IiLCJ0ZXh0LWRlY29yYXRpb24iLCJ0ZXh0LXJlbmRlcmluZyIsInRleHRsZW5ndGgiLCJ0eXBlIiwidTEiLCJ1MiIsInVuaWNvZGUiLCJ2YWx1ZXMiLCJ2aWV3Ym94IiwidmlzaWJpbGl0eSIsInZlcnNpb24iLCJ2ZXJ0LWFkdi15IiwidmVydC1vcmlnaW4teCIsInZl''@;'; put 'put ''cnQtb3JpZ2luLXkiLCJ3aWR0aCIsIndvcmQtc3BhY2luZyIsIndyYXAiLCJ3cml0aW5nLW1vZGUiLCJ4Y2hhbm5lbHNlbGVjdG9yIiwieWNoYW5uZWxzZWxlY3RvciIsIngiLCJ4MSIsIngyIiwieG1sbnMiLCJ5IiwieTEiLCJ5MiIsInoiLCJ6b29tYW5kcGFuIl0pLFdoZT1HMShbImFjY2Vu''@;'; put 'put ''dCIsImFjY2VudHVuZGVyIiwiYWxpZ24iLCJiZXZlbGxlZCIsImNsb3NlIiwiY29sdW1uc2FsaWduIiwiY29sdW1ubGluZXMiLCJjb2x1bW5zcGFuIiwiZGVub21hbGlnbiIsImRlcHRoIiwiZGlyIiwiZGlzcGxheSIsImRpc3BsYXlzdHlsZSIsImVuY29kaW5nIiwiZmVuY2UiLCJmcmFtZSIs''@;'; put 'put ''ImhlaWdodCIsImhyZWYiLCJpZCIsImxhcmdlb3AiLCJsZW5ndGgiLCJsaW5ldGhpY2tuZXNzIiwibHNwYWNlIiwibHF1b3RlIiwibWF0aGJhY2tncm91bmQiLCJtYXRoY29sb3IiLCJtYXRoc2l6ZSIsIm1hdGh2YXJpYW50IiwibWF4c2l6ZSIsIm1pbnNpemUiLCJtb3ZhYmxlbGltaXRzIiwi''@;'; put 'put ''bm90YXRpb24iLCJudW1hbGlnbiIsIm9wZW4iLCJyb3dhbGlnbiIsInJvd2xpbmVzIiwicm93c3BhY2luZyIsInJvd3NwYW4iLCJyc3BhY2UiLCJycXVvdGUiLCJzY3JpcHRsZXZlbCIsInNjcmlwdG1pbnNpemUiLCJzY3JpcHRzaXplbXVsdGlwbGllciIsInNlbGVjdGlvbiIsInNlcGFyYXRv''@;'; put 'put ''ciIsInNlcGFyYXRvcnMiLCJzdHJldGNoeSIsInN1YnNjcmlwdHNoaWZ0Iiwic3Vwc2NyaXB0c2hpZnQiLCJzeW1tZXRyaWMiLCJ2b2Zmc2V0Iiwid2lkdGgiLCJ4bWxucyJdKSxDTz1HMShbInhsaW5rOmhyZWYiLCJ4bWw6aWQiLCJ4bGluazp0aXRsZSIsInhtbDpzcGFjZSIsInhtbG5zOnhs''@;'; put 'put ''aW5rIl0pLHRLZT1rMigvXHtce1tcd1xXXSp8W1x3XFddKlx9XH0vZ20pLG5LZT1rMigvPCVbXHdcV10qfFtcd1xXXSolPi9nbSkscktlPWsyKC9cJFx7W1x3XFddKi9nbSksaUtlPWsyKC9eZGF0YS1bXC1cdy5cdTAwQjctXHVGRkZGXSskLyksb0tlPWsyKC9eYXJpYS1bXC1cd10rJC8pLFlo''@;'; put 'put ''ZT1rMigvXig/Oig/Oig/OmZ8aHQpdHBzP3xtYWlsdG98dGVsfGNhbGx0b3xzbXN8Y2lkfHhtcHApOnxbXmEtel18W2EteisuXC1dKyg/OlteYS16Ky5cLTpdfCQpKS9pKSxhS2U9azIoL14oPzpcdytzY3JpcHR8ZGF0YSk6L2kpLHNLZT1rMigvW1x1MDAwMC1cdTAwMjBcdTAwQTBcdTE2ODBc''@;'; put 'put ''dTE4MEVcdTIwMDAtXHUyMDI5XHUyMDVGXHUzMDAwXS9nKSxHaGU9azIoL15odG1sJC9pKSxsS2U9azIoL15bYS16XVsuXHddKigtWy5cd10rKSskL2kpO3ZhciAkaGU9T2JqZWN0LmZyZWV6ZSh7X19wcm90b19fOm51bGwsQVJJQV9BVFRSOm9LZSxBVFRSX1dISVRFU1BBQ0U6c0tlLENVU1RP''@;'; put 'put ''TV9FTEVNRU5UOmxLZSxEQVRBX0FUVFI6aUtlLERPQ1RZUEVfTkFNRTpHaGUsRVJCX0VYUFI6bktlLElTX0FMTE9XRURfVVJJOlloZSxJU19TQ1JJUFRfT1JfREFUQTphS2UsTVVTVEFDSEVfRVhQUjp0S2UsVE1QTElUX0VYUFI6cktlfSk7dmFyIGRLZT1mdW5jdGlvbiBxaGUoKXtsZXQgYz1h''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dHlwZW9mIHdpbmRvdz4idSI/bnVsbDp3aW5kb3c7Y29uc3QgbD11YT0+cWhlKHVhKTtpZihsLnZlcnNpb249IjMuMi40IixsLnJlbW92ZWQ9W10sIWN8fCFjLmRvY3VtZW50fHw5IT09Yy5kb2N1''@;'; put 'put ''bWVudC5ub2RlVHlwZXx8IWMuRWxlbWVudClyZXR1cm4gbC5pc1N1cHBvcnRlZD0hMSxsO2xldHtkb2N1bWVudDphfT1jO2NvbnN0IGQ9YSxoPWQuY3VycmVudFNjcmlwdCx7RG9jdW1lbnRGcmFnbWVudDpmLEhUTUxUZW1wbGF0ZUVsZW1lbnQ6dixOb2RlOk0sRWxlbWVudDpELE5vZGVGaWx0''@;'; put 'put ''ZXI6WixOYW1lZE5vZGVNYXA6bmU9Yy5OYW1lZE5vZGVNYXB8fGMuTW96TmFtZWRBdHRyTWFwLEhUTUxGb3JtRWxlbWVudDpjZSxET01QYXJzZXI6YmUsdHJ1c3RlZFR5cGVzOkVlfT1jLEJlPUQucHJvdG90eXBlLHFlPWxFKEJlLCJjbG9uZU5vZGUiKSxudD1sRShCZSwicmVtb3ZlIiksbHQ9''@;'; put 'put ''bEUoQmUsIm5leHRTaWJsaW5nIiksbXQ9bEUoQmUsImNoaWxkTm9kZXMiKSxKdD1sRShCZSwicGFyZW50Tm9kZSIpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiB2KXtjb25zdCB1YT1hLmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7dWEuY29udGVudCYmdWEuY29udGVudC5vd25lckRvY3VtZW50''@;'; put 'put ''JiYoYT11YS5jb250ZW50Lm93bmVyRG9jdW1lbnQpfWxldCB5bixDbj0iIjtjb25zdHtpbXBsZW1lbnRhdGlvbjp0bixjcmVhdGVOb2RlSXRlcmF0b3I6eG4sY3JlYXRlRG9jdW1lbnRGcmFnbWVudDpRbixnZXRFbGVtZW50c0J5VGFnTmFtZTp5aX09YSx7aW1wb3J0Tm9kZTp5cn09ZDtsZXQg''@;'; put 'put ''R249e2FmdGVyU2FuaXRpemVBdHRyaWJ1dGVzOltdLGFmdGVyU2FuaXRpemVFbGVtZW50czpbXSxhZnRlclNhbml0aXplU2hhZG93RE9NOltdLGJlZm9yZVNhbml0aXplQXR0cmlidXRlczpbXSxiZWZvcmVTYW5pdGl6ZUVsZW1lbnRzOltdLGJlZm9yZVNhbml0aXplU2hhZG93RE9NOltdLHVw''@;'; put 'put ''b25TYW5pdGl6ZUF0dHJpYnV0ZTpbXSx1cG9uU2FuaXRpemVFbGVtZW50OltdLHVwb25TYW5pdGl6ZVNoYWRvd05vZGU6W119O2wuaXNTdXBwb3J0ZWQ9ImZ1bmN0aW9uIj09dHlwZW9mIEhoZSYmImZ1bmN0aW9uIj09dHlwZW9mIEp0JiZ0biYmdm9pZCAwIT09dG4uY3JlYXRlSFRNTERvY3Vt''@;'; put 'put ''ZW50O2NvbnN0e01VU1RBQ0hFX0VYUFI6aWksRVJCX0VYUFI6X2ksVE1QTElUX0VYUFI6UG4sREFUQV9BVFRSOmpyLEFSSUFfQVRUUjpYbixJU19TQ1JJUFRfT1JfREFUQTpJcixBVFRSX1dISVRFU1BBQ0U6JHIsQ1VTVE9NX0VMRU1FTlQ6d2l9PSRoZTtsZXR7SVNfQUxMT1dFRF9VUkk6UWl9''@;'; put 'put ''PSRoZSx2dD1udWxsO2NvbnN0IE50PWJzKHt9LFsuLi56aGUsLi4uV0csLi4uWUcsLi4uR0csLi4uVWhlXSk7bGV0IFd0PW51bGw7Y29uc3QgZ249YnMoe30sWy4uLlpoZSwuLi4kRywuLi5XaGUsLi4uQ09dKTtsZXQgJG49T2JqZWN0LnNlYWwoVmhlKG51bGwse3RhZ05hbWVDaGVjazp7d3Jp''@;'; put 'put ''dGFibGU6ITAsY29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITAsdmFsdWU6bnVsbH0sYXR0cmlidXRlTmFtZUNoZWNrOnt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCx2YWx1ZTpudWxsfSxhbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHM6e3dyaXRhYmxl''@;'; put 'put ''OiEwLGNvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLHZhbHVlOiExfX0pKSxocj1udWxsLFVyPW51bGwsWXI9ITAsTmk9ITAscm49ITEsdW49ITAsa249ITEsd3I9ITAsbnI9ITEsU3I9ITEsWnI9ITEsVW49ITEsYnI9ITEsVHI9ITEsa3I9ITAsR3I9ITEsam89ITAsU2E9ITEsVWE9e30s''@;'; put 'put ''cHM9bnVsbDtjb25zdCBGYT1icyh7fSxbImFubm90YXRpb24teG1sIiwiYXVkaW8iLCJjb2xncm91cCIsImRlc2MiLCJmb3JlaWdub2JqZWN0IiwiaGVhZCIsImlmcmFtZSIsIm1hdGgiLCJtaSIsIm1uIiwibW8iLCJtcyIsIm10ZXh0Iiwibm9lbWJlZCIsIm5vZnJhbWVzIiwibm9zY3JpcHQi''@;'; put 'put ''LCJwbGFpbnRleHQiLCJzY3JpcHQiLCJzdHlsZSIsInN2ZyIsInRlbXBsYXRlIiwidGhlYWQiLCJ0aXRsZSIsInZpZGVvIiwieG1wIl0pO2xldCBocz1udWxsO2NvbnN0IEljPWJzKHt9LFsiYXVkaW8iLCJ2aWRlbyIsImltZyIsInNvdXJjZSIsImltYWdlIiwidHJhY2siXSk7bGV0IEphPW51''@;'; put 'put ''bGw7Y29uc3QgSjI9YnMoe30sWyJhbHQiLCJjbGFzcyIsImZvciIsImlkIiwibGFiZWwiLCJuYW1lIiwicGF0dGVybiIsInBsYWNlaG9sZGVyIiwicm9sZSIsInN1bW1hcnkiLCJ0aXRsZSIsInZhbHVlIiwic3R5bGUiLCJ4bWxucyJdKSxJdT0iaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRo''@;'; put 'put ''L01hdGhNTCIsSGw9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixDYz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI7bGV0IG5sPUNjLGpzPSExLFFhPW51bGw7Y29uc3QgQzY9YnMoe30sW0l1LEhsLENjXSxaRyk7bGV0IF8zPWJzKHt9LFsibWkiLCJtbyIsIm1uIiwibXMiLCJt''@;'; put 'put ''dGV4dCJdKSxUdz1icyh7fSxbImFubm90YXRpb24teG1sIl0pO2NvbnN0IGw0PWJzKHt9LFsidGl0bGUiLCJzdHlsZSIsImZvbnQiLCJhIiwic2NyaXB0Il0pO2xldCBROT1udWxsO2NvbnN0IFJBPVsiYXBwbGljYXRpb24veGh0bWwreG1sIiwidGV4dC9odG1sIl07bGV0IEtvPW51bGwsUzY9''@;'; put 'put ''bnVsbDtjb25zdCBPdGU9YS5jcmVhdGVFbGVtZW50KCJmb3JtIiksT049ZnVuY3Rpb24oZnIpe3JldHVybiBmciBpbnN0YW5jZW9mIFJlZ0V4cHx8ZnIgaW5zdGFuY2VvZiBGdW5jdGlvbn0sTEE9ZnVuY3Rpb24oKXtsZXQgZnI9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVu''@;'; put 'put ''dHNbMF0/YXJndW1lbnRzWzBdOnt9O2lmKCFTNnx8UzYhPT1mcil7aWYoKCFmcnx8Im9iamVjdCIhPXR5cGVvZiBmcikmJihmcj17fSksZnI9TzcoZnIpLFE5PS0xPT09UkEuaW5kZXhPZihmci5QQVJTRVJfTUVESUFfVFlQRSk/InRleHQvaHRtbCI6ZnIuUEFSU0VSX01FRElBX1RZUEUsS289''@;'; put 'put ''ImFwcGxpY2F0aW9uL3hodG1sK3htbCI9PT1ROT9aRzp3Tyx2dD1YZihmciwiQUxMT1dFRF9UQUdTIik/YnMoe30sZnIuQUxMT1dFRF9UQUdTLEtvKTpOdCxXdD1YZihmciwiQUxMT1dFRF9BVFRSIik/YnMoe30sZnIuQUxMT1dFRF9BVFRSLEtvKTpnbixRYT1YZihmciwiQUxMT1dFRF9OQU1F''@;'; put 'put ''U1BBQ0VTIik/YnMoe30sZnIuQUxMT1dFRF9OQU1FU1BBQ0VTLFpHKTpDNixKYT1YZihmciwiQUREX1VSSV9TQUZFX0FUVFIiKT9icyhPNyhKMiksZnIuQUREX1VSSV9TQUZFX0FUVFIsS28pOkoyLGhzPVhmKGZyLCJBRERfREFUQV9VUklfVEFHUyIpP2JzKE83KEljKSxmci5BRERfREFUQV9V''@;'; put 'put ''UklfVEFHUyxLbyk6SWMscHM9WGYoZnIsIkZPUkJJRF9DT05URU5UUyIpP2JzKHt9LGZyLkZPUkJJRF9DT05URU5UUyxLbyk6RmEsaHI9WGYoZnIsIkZPUkJJRF9UQUdTIik/YnMoe30sZnIuRk9SQklEX1RBR1MsS28pOnt9LFVyPVhmKGZyLCJGT1JCSURfQVRUUiIpP2JzKHt9LGZyLkZPUkJJ''@;'; put 'put ''RF9BVFRSLEtvKTp7fSxVYT0hIVhmKGZyLCJVU0VfUFJPRklMRVMiKSYmZnIuVVNFX1BST0ZJTEVTLFlyPSExIT09ZnIuQUxMT1dfQVJJQV9BVFRSLE5pPSExIT09ZnIuQUxMT1dfREFUQV9BVFRSLHJuPWZyLkFMTE9XX1VOS05PV05fUFJPVE9DT0xTfHwhMSx1bj0hMSE9PWZyLkFMTE9XX1NF''@;'; put 'put ''TEZfQ0xPU0VfSU5fQVRUUixrbj1mci5TQUZFX0ZPUl9URU1QTEFURVN8fCExLHdyPSExIT09ZnIuU0FGRV9GT1JfWE1MLG5yPWZyLldIT0xFX0RPQ1VNRU5UfHwhMSxVbj1mci5SRVRVUk5fRE9NfHwhMSxicj1mci5SRVRVUk5fRE9NX0ZSQUdNRU5UfHwhMSxUcj1mci5SRVRVUk5fVFJVU1RF''@;'; put 'put ''RF9UWVBFfHwhMSxacj1mci5GT1JDRV9CT0RZfHwhMSxrcj0hMSE9PWZyLlNBTklUSVpFX0RPTSxHcj1mci5TQU5JVElaRV9OQU1FRF9QUk9QU3x8ITEsam89ITEhPT1mci5LRUVQX0NPTlRFTlQsU2E9ZnIuSU5fUExBQ0V8fCExLFFpPWZyLkFMTE9XRURfVVJJX1JFR0VYUHx8WWhlLG5sPWZy''@;'; put 'put ''Lk5BTUVTUEFDRXx8Q2MsXzM9ZnIuTUFUSE1MX1RFWFRfSU5URUdSQVRJT05fUE9JTlRTfHxfMyxUdz1mci5IVE1MX0lOVEVHUkFUSU9OX1BPSU5UU3x8VHcsJG49ZnIuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkd8fHt9LGZyLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HJiZPTihmci5DVVNUT01f''@;'; put 'put ''RUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2spJiYoJG4udGFnTmFtZUNoZWNrPWZyLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjayksZnIuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcmJk9OKGZyLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVj''@;'; put 'put ''aykmJigkbi5hdHRyaWJ1dGVOYW1lQ2hlY2s9ZnIuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrKSxmci5DVVNUT01fRUxFTUVOVF9IQU5ETElORyYmImJvb2xlYW4iPT10eXBlb2YgZnIuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYWxsb3dDdXN0b21pemVkQnVp''@;'; put 'put ''bHRJbkVsZW1lbnRzJiYoJG4uYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzPWZyLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyksa24mJihOaT0hMSksYnImJihVbj0hMCksVWEmJih2dD1icyh7fSxVaGUpLFd0PVtdLCEwPT09VWEu''@;'; put 'put ''aHRtbCYmKGJzKHZ0LHpoZSksYnMoV3QsWmhlKSksITA9PT1VYS5zdmcmJihicyh2dCxXRyksYnMoV3QsJEcpLGJzKFd0LENPKSksITA9PT1VYS5zdmdGaWx0ZXJzJiYoYnModnQsWUcpLGJzKFd0LCRHKSxicyhXdCxDTykpLCEwPT09VWEubWF0aE1sJiYoYnModnQsR0cpLGJzKFd0LFdoZSks''@;'; put 'put ''YnMoV3QsQ08pKSksZnIuQUREX1RBR1MmJih2dD09PU50JiYodnQ9TzcodnQpKSxicyh2dCxmci5BRERfVEFHUyxLbykpLGZyLkFERF9BVFRSJiYoV3Q9PT1nbiYmKFd0PU83KFd0KSksYnMoV3QsZnIuQUREX0FUVFIsS28pKSxmci5BRERfVVJJX1NBRkVfQVRUUiYmYnMoSmEsZnIuQUREX1VS''@;'; put 'put ''SV9TQUZFX0FUVFIsS28pLGZyLkZPUkJJRF9DT05URU5UUyYmKHBzPT09RmEmJihwcz1PNyhwcykpLGJzKHBzLGZyLkZPUkJJRF9DT05URU5UUyxLbykpLGpvJiYodnRbIiN0ZXh0Il09ITApLG5yJiZicyh2dCxbImh0bWwiLCJoZWFkIiwiYm9keSJdKSx2dC50YWJsZSYmKGJzKHZ0LFsidGJv''@;'; put 'put ''ZHkiXSksZGVsZXRlIGhyLnRib2R5KSxmci5UUlVTVEVEX1RZUEVTX1BPTElDWSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGZyLlRSVVNURURfVFlQRVNfUE9MSUNZLmNyZWF0ZUhUTUwpdGhyb3cgc0UoJ1RSVVNURURfVFlQRVNfUE9MSUNZIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG11c3QgcHJv''@;'; put 'put ''dmlkZSBhICJjcmVhdGVIVE1MIiBob29rLicpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBmci5UUlVTVEVEX1RZUEVTX1BPTElDWS5jcmVhdGVTY3JpcHRVUkwpdGhyb3cgc0UoJ1RSVVNURURfVFlQRVNfUE9MSUNZIGNvbmZpZ3VyYXRpb24gb3B0aW9uIG11c3QgcHJvdmlkZSBhICJjcmVhdGVT''@;'; put 'put ''Y3JpcHRVUkwiIGhvb2suJyk7eW49ZnIuVFJVU1RFRF9UWVBFU19QT0xJQ1ksQ249eW4uY3JlYXRlSFRNTCgiIil9ZWxzZSB2b2lkIDA9PT15biYmKHluPWZ1bmN0aW9uKGwsYSl7aWYoIm9iamVjdCIhPXR5cGVvZiBsfHwiZnVuY3Rpb24iIT10eXBlb2YgbC5jcmVhdGVQb2xpY3kpcmV0dXJu''@;'; put 'put ''IG51bGw7bGV0IGQ9bnVsbDtjb25zdCBoPSJkYXRhLXR0LXBvbGljeS1zdWZmaXgiO2EmJmEuaGFzQXR0cmlidXRlKGgpJiYoZD1hLmdldEF0dHJpYnV0ZShoKSk7Y29uc3QgZj0iZG9tcHVyaWZ5IisoZD8iIyIrZDoiIik7dHJ5e3JldHVybiBsLmNyZWF0ZVBvbGljeShmLHtjcmVhdGVIVE1M''@;'; put 'put ''OnY9PnYsY3JlYXRlU2NyaXB0VVJMOnY9PnZ9KX1jYXRjaHtyZXR1cm4gY29uc29sZS53YXJuKCJUcnVzdGVkVHlwZXMgcG9saWN5ICIrZisiIGNvdWxkIG5vdCBiZSBjcmVhdGVkLiIpLG51bGx9fShFZSxoKSksbnVsbCE9PXluJiYic3RyaW5nIj09dHlwZW9mIENuJiYoQ249eW4uY3JlYXRl''@;'; put 'put ''SFRNTCgiIikpO0cxJiZHMShmciksUzY9ZnJ9fSxQTj1icyh7fSxbLi4uV0csLi4uWUcsLi4uUSRlXSksRk49YnMoe30sWy4uLkdHLC4uLmVLZV0pLFl0PWZ1bmN0aW9uKGZyKXtvRShsLnJlbW92ZWQse2VsZW1lbnQ6ZnJ9KTt0cnl7SnQoZnIpLnJlbW92ZUNoaWxkKGZyKX1jYXRjaHtudChm''@;'; put 'put ''cil9fSxXMD1mdW5jdGlvbihmcixubyl7dHJ5e29FKGwucmVtb3ZlZCx7YXR0cmlidXRlOm5vLmdldEF0dHJpYnV0ZU5vZGUoZnIpLGZyb206bm99KX1jYXRjaHtvRShsLnJlbW92ZWQse2F0dHJpYnV0ZTpudWxsLGZyb206bm99KX1pZihuby5yZW1vdmVBdHRyaWJ1dGUoZnIpLCJpcyI9PT1m''@;'; put 'put ''cilpZihVbnx8YnIpdHJ5e1l0KG5vKX1jYXRjaHt9ZWxzZSB0cnl7bm8uc2V0QXR0cmlidXRlKGZyLCIiKX1jYXRjaHt9fSx6cz1mdW5jdGlvbihmcil7bGV0IG5vPW51bGwsWG89bnVsbDtpZihacilmcj0iPHJlbW92ZT48L3JlbW92ZT4iK2ZyO2Vsc2V7Y29uc3QgdjA9amhlKGZyLC9eW1xy''@;'; put 'put ''XG5cdCBdKy8pO1hvPXYwJiZ2MFswXX0iYXBwbGljYXRpb24veGh0bWwreG1sIj09PVE5JiZubD09PUNjJiYoZnI9JzxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj48aGVhZD48L2hlYWQ+PGJvZHk+JytmcisiPC9ib2R5PjwvaHRtbD4iKTtjb25zdCBsYz15bj95''@;'; put 'put ''bi5jcmVhdGVIVE1MKGZyKTpmcjtpZihubD09PUNjKXRyeXtubz0obmV3IGJlKS5wYXJzZUZyb21TdHJpbmcobGMsUTkpfWNhdGNoe31pZighbm98fCFuby5kb2N1bWVudEVsZW1lbnQpe25vPXRuLmNyZWF0ZURvY3VtZW50KG5sLCJ0ZW1wbGF0ZSIsbnVsbCk7dHJ5e25vLmRvY3VtZW50RWxl''@;'; put 'put ''bWVudC5pbm5lckhUTUw9anM/Q246bGN9Y2F0Y2h7fX1jb25zdCBrMD1uby5ib2R5fHxuby5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIGZyJiZYbyYmazAuaW5zZXJ0QmVmb3JlKGEuY3JlYXRlVGV4dE5vZGUoWG8pLGswLmNoaWxkTm9kZXNbMF18fG51bGwpLG5sPT09Q2M/eWkuY2FsbChubyxu''@;'; put 'put ''cj8iaHRtbCI6ImJvZHkiKVswXTpucj9uby5kb2N1bWVudEVsZW1lbnQ6azB9LEhOPWZ1bmN0aW9uKGZyKXtyZXR1cm4geG4uY2FsbChmci5vd25lckRvY3VtZW50fHxmcixmcixaLlNIT1dfRUxFTUVOVHxaLlNIT1dfQ09NTUVOVHxaLlNIT1dfVEVYVHxaLlNIT1dfUFJPQ0VTU0lOR19JTlNU''@;'; put 'put ''UlVDVElPTnxaLlNIT1dfQ0RBVEFfU0VDVElPTixudWxsKX0sTTY9ZnVuY3Rpb24oZnIpe3JldHVybiBmciBpbnN0YW5jZW9mIGNlJiYoInN0cmluZyIhPXR5cGVvZiBmci5ub2RlTmFtZXx8InN0cmluZyIhPXR5cGVvZiBmci50ZXh0Q29udGVudHx8ImZ1bmN0aW9uIiE9dHlwZW9mIGZyLnJl''@;'; put 'put ''bW92ZUNoaWxkfHwhKGZyLmF0dHJpYnV0ZXMgaW5zdGFuY2VvZiBuZSl8fCJmdW5jdGlvbiIhPXR5cGVvZiBmci5yZW1vdmVBdHRyaWJ1dGV8fCJmdW5jdGlvbiIhPXR5cGVvZiBmci5zZXRBdHRyaWJ1dGV8fCJzdHJpbmciIT10eXBlb2YgZnIubmFtZXNwYWNlVVJJfHwiZnVuY3Rpb24iIT10''@;'; put 'put ''eXBlb2YgZnIuaW5zZXJ0QmVmb3JlfHwiZnVuY3Rpb24iIT10eXBlb2YgZnIuaGFzQ2hpbGROb2Rlcyl9LFhnPWZ1bmN0aW9uKGZyKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTSYmZnIgaW5zdGFuY2VvZiBNfTtmdW5jdGlvbiB3Myh1YSxmcixubyl7X08odWEsWG89PntYby5jYWxsKGws''@;'; put 'put ''ZnIsbm8sUzYpfSl9Y29uc3QgTk49ZnVuY3Rpb24oZnIpe2xldCBubz1udWxsO2lmKHczKEduLmJlZm9yZVNhbml0aXplRWxlbWVudHMsZnIsbnVsbCksTTYoZnIpKXJldHVybiBZdChmciksITA7Y29uc3QgWG89S28oZnIubm9kZU5hbWUpO2lmKHczKEduLnVwb25TYW5pdGl6ZUVsZW1lbnQs''@;'; put 'put ''ZnIse3RhZ05hbWU6WG8sYWxsb3dlZFRhZ3M6dnR9KSxmci5oYXNDaGlsZE5vZGVzKCkmJiFYZyhmci5maXJzdEVsZW1lbnRDaGlsZCkmJiQxKC88Wy9cd10vZyxmci5pbm5lckhUTUwpJiYkMSgvPFsvXHddL2csZnIudGV4dENvbnRlbnQpfHw3PT09ZnIubm9kZVR5cGV8fHdyJiY4PT09ZnIu''@;'; put 'put ''bm9kZVR5cGUmJiQxKC88Wy9cd10vZyxmci5kYXRhKSlyZXR1cm4gWXQoZnIpLCEwO2lmKCF2dFtYb118fGhyW1hvXSl7aWYoIWhyW1hvXSYmQk4oWG8pJiYoJG4udGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiYkMSgkbi50YWdOYW1lQ2hlY2ssWG8pfHwkbi50YWdOYW1lQ2hlY2sg''@;'; put 'put ''aW5zdGFuY2VvZiBGdW5jdGlvbiYmJG4udGFnTmFtZUNoZWNrKFhvKSkpcmV0dXJuITE7aWYoam8mJiFwc1tYb10pe2NvbnN0IGxjPUp0KGZyKXx8ZnIucGFyZW50Tm9kZSxrMD1tdChmcil8fGZyLmNoaWxkTm9kZXM7aWYoazAmJmxjKWZvcihsZXQgVDE9azAubGVuZ3RoLTE7VDE+PTA7LS1U''@;'; put 'put ''MSl7Y29uc3QgcWQ9cWUoazBbVDFdLCEwKTtxZC5fX3JlbW92YWxDb3VudD0oZnIuX19yZW1vdmFsQ291bnR8fDApKzEsbGMuaW5zZXJ0QmVmb3JlKHFkLGx0KGZyKSl9fXJldHVybiBZdChmciksITB9cmV0dXJuIGZyIGluc3RhbmNlb2YgRCYmIWZ1bmN0aW9uKGZyKXtsZXQgbm89SnQoZnIp''@;'; put 'put ''Oyghbm98fCFuby50YWdOYW1lKSYmKG5vPXtuYW1lc3BhY2VVUkk6bmwsdGFnTmFtZToidGVtcGxhdGUifSk7Y29uc3QgWG89d08oZnIudGFnTmFtZSksbGM9d08obm8udGFnTmFtZSk7cmV0dXJuISFRYVtmci5uYW1lc3BhY2VVUkldJiYoZnIubmFtZXNwYWNlVVJJPT09SGw/bm8ubmFtZXNw''@;'; put 'put ''YWNlVVJJPT09Q2M/InN2ZyI9PT1Ybzpuby5uYW1lc3BhY2VVUkk9PT1JdT8ic3ZnIj09PVhvJiYoImFubm90YXRpb24teG1sIj09PWxjfHxfM1tsY10pOiEhUE5bWG9dOmZyLm5hbWVzcGFjZVVSST09PUl1P25vLm5hbWVzcGFjZVVSST09PUNjPyJtYXRoIj09PVhvOm5vLm5hbWVzcGFjZVVS''@;'; put 'put ''ST09PUhsPyJtYXRoIj09PVhvJiZUd1tsY106ISFGTltYb106ZnIubmFtZXNwYWNlVVJJPT09Q2M/IShuby5uYW1lc3BhY2VVUkk9PT1IbCYmIVR3W2xjXXx8bm8ubmFtZXNwYWNlVVJJPT09SXUmJiFfM1tsY10pJiYhRk5bWG9dJiYobDRbWG9dfHwhUE5bWG9dKTohKCJhcHBsaWNhdGlvbi94''@;'; put 'put ''aHRtbCt4bWwiIT09UTl8fCFRYVtmci5uYW1lc3BhY2VVUkldKSl9KGZyKXx8KCJub3NjcmlwdCI9PT1Yb3x8Im5vZW1iZWQiPT09WG98fCJub2ZyYW1lcyI9PT1YbykmJiQxKC88XC9ubyhzY3JpcHR8ZW1iZWR8ZnJhbWVzKS9pLGZyLmlubmVySFRNTCk/KFl0KGZyKSwhMCk6KGtuJiYzPT09''@;'; put 'put ''ZnIubm9kZVR5cGUmJihubz1mci50ZXh0Q29udGVudCxfTyhbaWksX2ksUG5dLGxjPT57bm89YUUobm8sbGMsIiAiKX0pLGZyLnRleHRDb250ZW50IT09bm8mJihvRShsLnJlbW92ZWQse2VsZW1lbnQ6ZnIuY2xvbmVOb2RlKCl9KSxmci50ZXh0Q29udGVudD1ubykpLHczKEduLmFmdGVyU2Fu''@;'; put 'put ''aXRpemVFbGVtZW50cyxmcixudWxsKSwhMSl9LFZOPWZ1bmN0aW9uKGZyLG5vLFhvKXtpZihrciYmKCJpZCI9PT1ub3x8Im5hbWUiPT09bm8pJiYoWG8gaW4gYXx8WG8gaW4gT3RlKSlyZXR1cm4hMTtpZigoIU5pfHxVcltub118fCEkMShqcixubykpJiYoIVlyfHwhJDEoWG4sbm8pKSlpZigh''@;'; put 'put ''V3Rbbm9dfHxVcltub10pe2lmKCEoQk4oZnIpJiYoJG4udGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwJiYkMSgkbi50YWdOYW1lQ2hlY2ssZnIpfHwkbi50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiYmJG4udGFnTmFtZUNoZWNrKGZyKSkmJigkbi5hdHRyaWJ1dGVOYW1l''@;'; put 'put ''Q2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJiQxKCRuLmF0dHJpYnV0ZU5hbWVDaGVjayxubyl8fCRuLmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiYkbi5hdHRyaWJ1dGVOYW1lQ2hlY2sobm8pKXx8ImlzIj09PW5vJiYkbi5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxl''@;'; put 'put ''bWVudHMmJigkbi50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBSZWdFeHAmJiQxKCRuLnRhZ05hbWVDaGVjayxYbyl8fCRuLnRhZ05hbWVDaGVjayBpbnN0YW5jZW9mIEZ1bmN0aW9uJiYkbi50YWdOYW1lQ2hlY2soWG8pKSkpcmV0dXJuITF9ZWxzZSBpZighSmFbbm9dJiYhJDEoUWksYUUoWG8s''@;'; put 'put ''JHIsIiIpKSYmKCJzcmMiIT09bm8mJiJ4bGluazpocmVmIiE9PW5vJiYiaHJlZiIhPT1ub3x8InNjcmlwdCI9PT1mcnx8MCE9PUskZShYbywiZGF0YToiKXx8IWhzW2ZyXSkmJighcm58fCQxKElyLGFFKFhvLCRyLCIiKSkpJiZYbylyZXR1cm4hMTtyZXR1cm4hMH0sQk49ZnVuY3Rpb24oZnIp''@;'; put 'put ''e3JldHVybiJhbm5vdGF0aW9uLXhtbCIhPT1mciYmamhlKGZyLHdpKX0sak49ZnVuY3Rpb24oZnIpe3czKEduLmJlZm9yZVNhbml0aXplQXR0cmlidXRlcyxmcixudWxsKTtjb25zdHthdHRyaWJ1dGVzOm5vfT1mcjtpZighbm98fE02KGZyKSlyZXR1cm47Y29uc3QgWG89e2F0dHJOYW1lOiIi''@;'; put 'put ''LGF0dHJWYWx1ZToiIixrZWVwQXR0cjohMCxhbGxvd2VkQXR0cmlidXRlczpXdCxmb3JjZUtlZXBBdHRyOnZvaWQgMH07bGV0IGxjPW5vLmxlbmd0aDtmb3IoO2xjLS07KXtjb25zdCBrMD1ub1tsY10se25hbWU6djAsbmFtZXNwYWNlVVJJOlQxLHZhbHVlOnFkfT1rMCx0dj1Lbyh2MCk7bGV0''@;'; put 'put ''IFkwPSJ2YWx1ZSI9PT12MD9xZDpxJGUocWQpO2lmKFhvLmF0dHJOYW1lPXR2LFhvLmF0dHJWYWx1ZT1ZMCxYby5rZWVwQXR0cj0hMCxYby5mb3JjZUtlZXBBdHRyPXZvaWQgMCx3MyhHbi51cG9uU2FuaXRpemVBdHRyaWJ1dGUsZnIsWG8pLFkwPVhvLmF0dHJWYWx1ZSxHciYmKCJpZCI9PT10''@;'; put 'put ''dnx8Im5hbWUiPT09dHYpJiYoVzAodjAsZnIpLFkwPSJ1c2VyLWNvbnRlbnQtIitZMCksd3ImJiQxKC8oKC0tIT98XSk+KXw8XC8oc3R5bGV8dGl0bGUpL2ksWTApKXtXMCh2MCxmcik7Y29udGludWV9aWYoWG8uZm9yY2VLZWVwQXR0cnx8KFcwKHYwLGZyKSwhWG8ua2VlcEF0dHIpKWNvbnRp''@;'; put 'put ''bnVlO2lmKCF1biYmJDEoL1wvPi9pLFkwKSl7VzAodjAsZnIpO2NvbnRpbnVlfWtuJiZfTyhbaWksX2ksUG5dLEF3PT57WTA9YUUoWTAsQXcsIiAiKX0pO2NvbnN0IHpOPUtvKGZyLm5vZGVOYW1lKTtpZihWTih6Tix0dixZMCkpe2lmKHluJiYib2JqZWN0Ij09dHlwZW9mIEVlJiYiZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgRWUuZ2V0QXR0cmlidXRlVHlwZSYmIVQxKXN3aXRjaChFZS5nZXRBdHRyaWJ1dGVUeXBlKHpOLHR2KSl7Y2FzZSJUcnVzdGVkSFRNTCI6WTA9eW4uY3JlYXRlSFRNTChZMCk7YnJlYWs7Y2FzZSJUcnVzdGVkU2NyaXB0VVJMIjpZMD15bi5jcmVhdGVTY3JpcHRVUkwoWTAp''@;'; put 'put ''fXRyeXtUMT9mci5zZXRBdHRyaWJ1dGVOUyhUMSx2MCxZMCk6ZnIuc2V0QXR0cmlidXRlKHYwLFkwKSxNNihmcik/WXQoZnIpOkJoZShsLnJlbW92ZWQpfWNhdGNoe319fXczKEduLmFmdGVyU2FuaXRpemVBdHRyaWJ1dGVzLGZyLG51bGwpfSxldj1mdW5jdGlvbiB1YShmcil7bGV0IG5vPW51''@;'; put 'put ''bGw7Y29uc3QgWG89SE4oZnIpO2Zvcih3MyhHbi5iZWZvcmVTYW5pdGl6ZVNoYWRvd0RPTSxmcixudWxsKTtubz1Yby5uZXh0Tm9kZSgpOyl3MyhHbi51cG9uU2FuaXRpemVTaGFkb3dOb2RlLG5vLG51bGwpLE5OKG5vKSxqTihubyksbm8uY29udGVudCBpbnN0YW5jZW9mIGYmJnVhKG5vLmNv''@;'; put 'put ''bnRlbnQpO3czKEduLmFmdGVyU2FuaXRpemVTaGFkb3dET00sZnIsbnVsbCl9O3JldHVybiBsLnNhbml0aXplPWZ1bmN0aW9uKHVhKXtsZXQgZnI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LG5vPW51bGwsWG89bnVsbCxsYz1udWxs''@;'; put 'put ''LGswPW51bGw7aWYoanM9IXVhLGpzJiYodWE9Ilx4M2MhLS1ceDNlIiksInN0cmluZyIhPXR5cGVvZiB1YSYmIVhnKHVhKSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHVhLnRvU3RyaW5nKXRocm93IHNFKCJ0b1N0cmluZyBpcyBub3QgYSBmdW5jdGlvbiIpO2lmKCJzdHJpbmciIT10eXBlb2Yo''@;'; put 'put ''dWE9dWEudG9TdHJpbmcoKSkpdGhyb3cgc0UoImRpcnR5IGlzIG5vdCBhIHN0cmluZywgYWJvcnRpbmciKX1pZighbC5pc1N1cHBvcnRlZClyZXR1cm4gdWE7aWYoU3J8fExBKGZyKSxsLnJlbW92ZWQ9W10sInN0cmluZyI9PXR5cGVvZiB1YSYmKFNhPSExKSxTYSl7aWYodWEubm9kZU5hbWUp''@;'; put 'put ''e2NvbnN0IHFkPUtvKHVhLm5vZGVOYW1lKTtpZighdnRbcWRdfHxocltxZF0pdGhyb3cgc0UoInJvb3Qgbm9kZSBpcyBmb3JiaWRkZW4gYW5kIGNhbm5vdCBiZSBzYW5pdGl6ZWQgaW4tcGxhY2UiKX19ZWxzZSBpZih1YSBpbnN0YW5jZW9mIE0pbm89enMoIlx4M2MhLS0tLVx4M2UiKSxYbz1u''@;'; put 'put ''by5vd25lckRvY3VtZW50LmltcG9ydE5vZGUodWEsITApLDE9PT1Yby5ub2RlVHlwZSYmIkJPRFkiPT09WG8ubm9kZU5hbWV8fCJIVE1MIj09PVhvLm5vZGVOYW1lP25vPVhvOm5vLmFwcGVuZENoaWxkKFhvKTtlbHNle2lmKCFVbiYmIWtuJiYhbnImJi0xPT09dWEuaW5kZXhPZigiPCIpKXJl''@;'; put 'put ''dHVybiB5biYmVHI/eW4uY3JlYXRlSFRNTCh1YSk6dWE7aWYobm89enModWEpLCFubylyZXR1cm4gVW4/bnVsbDpUcj9DbjoiIn1ubyYmWnImJll0KG5vLmZpcnN0Q2hpbGQpO2NvbnN0IHYwPUhOKFNhP3VhOm5vKTtmb3IoO2xjPXYwLm5leHROb2RlKCk7KU5OKGxjKSxqTihsYyksbGMuY29u''@;'; put 'put ''dGVudCBpbnN0YW5jZW9mIGYmJmV2KGxjLmNvbnRlbnQpO2lmKFNhKXJldHVybiB1YTtpZihVbil7aWYoYnIpZm9yKGswPVFuLmNhbGwobm8ub3duZXJEb2N1bWVudCk7bm8uZmlyc3RDaGlsZDspazAuYXBwZW5kQ2hpbGQobm8uZmlyc3RDaGlsZCk7ZWxzZSBrMD1ubztyZXR1cm4oV3Quc2hh''@;'; put 'put ''ZG93cm9vdHx8V3Quc2hhZG93cm9vdG1vZGUpJiYoazA9eXIuY2FsbChkLGswLCEwKSksazB9bGV0IFQxPW5yP25vLm91dGVySFRNTDpuby5pbm5lckhUTUw7cmV0dXJuIG5yJiZ2dFsiIWRvY3R5cGUiXSYmbm8ub3duZXJEb2N1bWVudCYmbm8ub3duZXJEb2N1bWVudC5kb2N0eXBlJiZuby5v''@;'; put 'put ''d25lckRvY3VtZW50LmRvY3R5cGUubmFtZSYmJDEoR2hlLG5vLm93bmVyRG9jdW1lbnQuZG9jdHlwZS5uYW1lKSYmKFQxPSI8IURPQ1RZUEUgIituby5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZSsiPlxuIitUMSksa24mJl9PKFtpaSxfaSxQbl0scWQ9PntUMT1hRShUMSxxZCwiICIpfSks''@;'; put 'put ''eW4mJlRyP3luLmNyZWF0ZUhUTUwoVDEpOlQxfSxsLnNldENvbmZpZz1mdW5jdGlvbigpe0xBKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSksU3I9ITB9LGwuY2xlYXJDb25maWc9ZnVuY3Rpb24oKXtTNj1udWxsLFNyPSExfSxsLmlz''@;'; put 'put ''VmFsaWRBdHRyaWJ1dGU9ZnVuY3Rpb24odWEsZnIsbm8pe1M2fHxMQSh7fSk7Y29uc3QgWG89S28odWEpLGxjPUtvKGZyKTtyZXR1cm4gVk4oWG8sbGMsbm8pfSxsLmFkZEhvb2s9ZnVuY3Rpb24odWEsZnIpeyJmdW5jdGlvbiI9PXR5cGVvZiBmciYmb0UoR25bdWFdLGZyKX0sbC5yZW1vdmVI''@;'; put 'put ''b29rPWZ1bmN0aW9uKHVhLGZyKXtpZih2b2lkIDAhPT1mcil7Y29uc3Qgbm89RyRlKEduW3VhXSxmcik7cmV0dXJuLTE9PT1ubz92b2lkIDA6JCRlKEduW3VhXSxubywxKVswXX1yZXR1cm4gQmhlKEduW3VhXSl9LGwucmVtb3ZlSG9va3M9ZnVuY3Rpb24odWEpe0duW3VhXT1bXX0sbC5yZW1v''@;'; put 'put ''dmVBbGxIb29rcz1mdW5jdGlvbigpe0duPXthZnRlclNhbml0aXplQXR0cmlidXRlczpbXSxhZnRlclNhbml0aXplRWxlbWVudHM6W10sYWZ0ZXJTYW5pdGl6ZVNoYWRvd0RPTTpbXSxiZWZvcmVTYW5pdGl6ZUF0dHJpYnV0ZXM6W10sYmVmb3JlU2FuaXRpemVFbGVtZW50czpbXSxiZWZvcmVT''@;'; put 'put ''YW5pdGl6ZVNoYWRvd0RPTTpbXSx1cG9uU2FuaXRpemVBdHRyaWJ1dGU6W10sdXBvblNhbml0aXplRWxlbWVudDpbXSx1cG9uU2FuaXRpemVTaGFkb3dOb2RlOltdfX0sbH0oKTtmdW5jdGlvbiBYaGUoYyl7Y29uc3QgbD1jLmxlbmd0aDtsZXQgYT0wO2Zvcig7YTxsOyljW2FdPVtjW2FdXSxh''@;'; put 'put ''Kz0xfWZ1bmN0aW9uIEtHKGMsbCl7Y29uc3QgYT1sLmxlbmd0aDtsZXQgZD0wO2Zvcig7ZDxhOyljLnB1c2gobFtkXSksZCs9MX1mdW5jdGlvbiB1RShjKXtjb25zdCBsPVtdO2lmKCFjfHwwPT09Yy5sZW5ndGh8fCFjWzBdfHwwPT09Y1swXS5sZW5ndGgpcmV0dXJuIGw7Y29uc3QgYT1jLmxl''@;'; put 'put ''bmd0aCxkPWNbMF0ubGVuZ3RoO2ZvcihsZXQgaD0wO2g8YTtoKyspZm9yKGxldCBmPTA7ZjxkO2YrKylsW2ZdfHwobFtmXT1bXSksbFtmXVtoXT1jW2hdW2ZdO3JldHVybiBsfWZ1bmN0aW9uIHF1KGMsbCxhLGQpe2xldCBoPS0xLGY9Yyx2PWE7QXJyYXkuaXNBcnJheShjKXx8KGY9QXJyYXku''@;'; put 'put ''ZnJvbShjKSk7Y29uc3QgTT1mLmxlbmd0aDtmb3IoZCYmTSYmKGgrPTEsdj1mW2hdKSxoKz0xO2g8TTspdj1sKHYsZltoXSxoLGYpLGgrPTE7cmV0dXJuIHZ9ZnVuY3Rpb24gQW0oYyxsKXtsZXQgYT0wLGQ9YztBcnJheS5pc0FycmF5KGMpfHwoZD1BcnJheS5mcm9tKGMpKTtjb25zdCBoPWQu''@;'; put 'put ''bGVuZ3RoLGY9W107bGV0IHY9LTE7Zm9yKDthPGg7KXtjb25zdCBNPWRbYV07bChNLGEsZCkmJih2Kz0xLGZbdl09TSksYSs9MX1yZXR1cm4gZn1mdW5jdGlvbiB5cyhjLGwpe2xldCBhPTAsZD1jO0FycmF5LmlzQXJyYXkoYyl8fChkPUFycmF5LmZyb20oYykpO2NvbnN0IGg9ZC5sZW5ndGgs''@;'; put 'put ''Zj1bXTtsZXQgdj0tMTtmb3IoO2E8aDspdis9MSxmW3ZdPWwoZFthXSxhLGQpLGErPTE7cmV0dXJuIGZ9ZnVuY3Rpb24gWW4oYyxsKXtsZXQgYT0wLGQ9YztBcnJheS5pc0FycmF5KGMpfHwoZD1BcnJheS5mcm9tKGMpKTtjb25zdCBoPWQubGVuZ3RoO2Zvcig7YTxoJiYhMSE9PWwoZFthXSxh''@;'; put 'put ''LGQpOylhKz0xO3JldHVybiBjfWZ1bmN0aW9uIEpoZShjKXtyZXR1cm4gcXUoYywobCxhKT0+bCthLDApfWZ1bmN0aW9uIGhLZShjKXtyZXR1cm4gcXUoYywobCxhKT0+bD5hP2w6YSxBcnJheS5pc0FycmF5KGMpP2NbMF06dm9pZCAwKX1mdW5jdGlvbiBmS2UoYyl7cmV0dXJuIHF1KGMsKGws''@;'; put 'put ''YSk9Pmw8YT9sOmEsQXJyYXkuaXNBcnJheShjKT9jWzBdOnZvaWQgMCl9ZnVuY3Rpb24gcEtlKGMpe3JldHVybiBjLmxlbmd0aD9KaGUoYykvYy5sZW5ndGg6MH1mdW5jdGlvbiBRaGUoYyl7cmV0dXJuIHF1KGMsKGwsYSk9PmwuY29uY2F0KEFycmF5LmlzQXJyYXkoYSk/UWhlKGEpOmEpLFtd''@;'; put 'put ''KX1mdW5jdGlvbiBlMmUoYyl7Y29uc3QgbD1bXTtyZXR1cm4gWW4oYyxhPT57LTE9PT1sLmluZGV4T2YoYSkmJmwucHVzaChhKX0pLGx9ZnVuY3Rpb24gcUcoKXtmb3IodmFyIGM9YXJndW1lbnRzLmxlbmd0aCxsPW5ldyBBcnJheShjKSxhPTA7YTxjO2ErKylsW2FdPWFyZ3VtZW50c1thXTtj''@;'; put 'put ''b25zdFtkLC4uLmhdPVsuLi5sXTtsZXQgZj1kO3JldHVybiBZbihoLHY9PntmPWYuZmlsdGVyKE09PiF2LmluY2x1ZGVzKE0pKX0pLGZ9ZnVuY3Rpb24gZ0tlKCl7Zm9yKHZhciBjPWFyZ3VtZW50cy5sZW5ndGgsbD1uZXcgQXJyYXkoYyksYT0wO2E8YzthKyspbFthXT1hcmd1bWVudHNbYV07''@;'; put 'put ''Y29uc3RbZCwuLi5oXT1bLi4ubF07bGV0IGY9ZDtyZXR1cm4gWW4oaCx2PT57Zj1mLmZpbHRlcihNPT52LmluY2x1ZGVzKE0pKX0pLGZ9ZnVuY3Rpb24gbUtlKCl7Zm9yKHZhciBjPWFyZ3VtZW50cy5sZW5ndGgsbD1uZXcgQXJyYXkoYyksYT0wO2E8YzthKyspbFthXT1hcmd1bWVudHNbYV07''@;'; put 'put ''Y29uc3RbZCwuLi5oXT1bLi4ubF0sZj1uZXcgU2V0KGQpO3JldHVybiBZbihoLHY9PntZbih2LE09PntmLmhhcyhNKXx8Zi5hZGQoTSl9KX0pLEFycmF5LmZyb20oZil9ZnVuY3Rpb24gWEcoYyl7cmV0dXJuIGMuc3BsaXQoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNb''@;'; put 'put ''MV0/YXJndW1lbnRzWzFdOiIgIil9ZnVuY3Rpb24gZmwoYyl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobD4xP2wtMTowKSxkPTE7ZDxsO2QrKylhW2QtMV09YXJndW1lbnRzW2RdO3JldHVybiBxdShjLChmLHYsTSk9PmYrdi5yZXBsYWNlKC9ccj9cblxzKi9nLCIi''@;'; put 'put ''KSsoYVtNXT9hW01dOiIiKSwiIikudHJpbSgpfWZ1bmN0aW9uIHpjKGMpe2xldCBsO3N3aXRjaCh0eXBlb2YgYyl7Y2FzZSJzdHJpbmciOmNhc2UibnVtYmVyIjpsPWAke2N9YDticmVhaztjYXNlIm9iamVjdCI6bD1udWxsPT09Yz8iIjpjLnRvU3RyaW5nKCk7YnJlYWs7Y2FzZSJ1bmRlZmlu''@;'; put 'put ''ZWQiOmw9IiI7YnJlYWs7ZGVmYXVsdDpsPWMudG9TdHJpbmcoKX1yZXR1cm4gbH1mdW5jdGlvbiBGbyhjKXtyZXR1cm4gdHlwZW9mIGM8InUifWZ1bmN0aW9uIG1jKGMpe3JldHVybiB0eXBlb2YgYz4idSJ9ZnVuY3Rpb24gVWMoYyl7cmV0dXJuIG51bGw9PT1jfHwiIj09PWN8fG1jKGMpfWZ1''@;'; put 'put ''bmN0aW9uIHQyZShjKXtyZXR1cm4iW29iamVjdCBSZWdFeHBdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChjKX1jb25zdCBkRT0ibGVuZ3RoIixoRT1jPT5wYXJzZUludChjLDE2KSxuMmU9Yz0+cGFyc2VJbnQoYywxMCksU089KGMsbCxhKT0+Yy5zdWJzdHIobCxhKSxmRT1j''@;'; put 'put ''PT5jLmNvZGVQb2ludEF0KDApLTY1LEpHPWM9PmAke2N9YC5yZXBsYWNlKC9cLS9nLCIiKSx2S2U9Yz0+aEUoU08oSkcoYyksaEUoIjEyIiksZkUoIkYiKSkpLyhoRShTTyhKRyhjKSxmRSgiQiIpLH5+IVtdW2RFXSkpfHw5KSxiS2U9KCk9PnR5cGVvZiBsb2NhdGlvbjwidSImJi9eKFthLXow''@;'; put 'put ''LTlcLV0rXC4pP1x4NjhceDYxXHg2RVx4NjRceDczXHg2Rlx4NkVceDc0XHg2MVx4NjJceDZDXHg2NVx4MkVceDYzXHg2Rlx4NkQkL2kudGVzdChsb2NhdGlvbi5ob3N0KTtsZXQgcjJlPSExO2NvbnN0IGkyZT17aW52YWxpZDooKT0+ZmxgCiAgICBUaGUgbGljZW5zZSBrZXkgZm9yIEhhbmRz''@;'; put 'put ''b250YWJsZSBpcyBpbnZhbGlkLlx4MjAKICAgIElmIHlvdSBuZWVkIGFueSBoZWxwLCBjb250YWN0IHVzIGF0IHN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbS5gLGV4cGlyZWQ6Yz0+e2xldHtrZXlWYWxpZGl0eURhdGU6bCxob3RWZXJzaW9uOmF9PWM7cmV0dXJuIGZsYAogICAgVGhlIGxpY2Vu''@;'; put 'put ''c2Uga2V5IGZvciBIYW5kc29udGFibGUgZXhwaXJlZCBvbiAke2x9LCBhbmQgaXMgbm90IHZhbGlkIGZvciB0aGUgaW5zdGFsbGVkXHgyMAogICAgdmVyc2lvbiAke2F9LiBSZW5ldyB5b3VyIGxpY2Vuc2Uga2V5IGF0IGhhbmRzb250YWJsZS5jb20gb3IgZG93bmdyYWRlIHRvIGEgdmVyc2lv''@;'; put 'put ''biByZWxlYXNlZCBwcmlvclx4MjAKICAgIHRvICR7bH0uIElmIHlvdSBuZWVkIGFueSBoZWxwLCBjb250YWN0IHVzIGF0IHNhbGVzQGhhbmRzb250YWJsZS5jb20uYH0sbWlzc2luZzooKT0+ZmxgCiAgICBUaGUgbGljZW5zZSBrZXkgZm9yIEhhbmRzb250YWJsZSBpcyBtaXNzaW5nLiBVc2Ug''@;'; put 'put ''eW91ciBwdXJjaGFzZWQga2V5IHRvIGFjdGl2YXRlIHRoZSBwcm9kdWN0Llx4MjAKICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gYWN0aXZhdGUgSGFuZHNvbnRhYmxlIHRvIHVzZSBmb3Igbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMgYnlceDIwCiAgICBwYXNzaW5nIHRoZSBrZXk6ICdub24t''@;'; put 'put ''Y29tbWVyY2lhbC1hbmQtZXZhbHVhdGlvbicuIElmIHlvdSBuZWVkIGFueSBoZWxwLCBjb250YWN0XHgyMAogICAgdXMgYXQgc3VwcG9ydEBoYW5kc29udGFibGUuY29tLmAsbm9uX2NvbW1lcmNpYWw6KCk9PiIifSxvMmU9e2ludmFsaWQ6KCk9PmZsYAogICAgVGhlIGxpY2Vuc2Uga2V5IGZv''@;'; put 'put ''ciBIYW5kc29udGFibGUgaXMgaW52YWxpZC5ceDIwCiAgICA8YSBocmVmPSJodHRwczovL2hhbmRzb250YWJsZS5jb20vZG9jcy90dXRvcmlhbC1saWNlbnNlLWtleS5odG1sIiB0YXJnZXQ9Il9ibGFuayI+UmVhZCBtb3JlPC9hPiBvbiBob3cgdG9ceDIwCiAgICBpbnN0YWxsIGl0IHByb3Bl''@;'; put 'put ''cmx5IG9yIGNvbnRhY3QgdXMgYXQgPGEgaHJlZj0ibWFpbHRvOnN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbSI+c3VwcG9ydEBoYW5kc29udGFibGUuY29tPC9hPi5gLGV4cGlyZWQ6Yz0+e2xldHtrZXlWYWxpZGl0eURhdGU6bCxob3RWZXJzaW9uOmF9PWM7cmV0dXJuIGZsYAogICAgVGhlIGxp''@;'; put 'put ''Y2Vuc2Uga2V5IGZvciBIYW5kc29udGFibGUgZXhwaXJlZCBvbiAke2x9LCBhbmQgaXMgbm90IHZhbGlkIGZvciB0aGUgaW5zdGFsbGVkXHgyMAogICAgdmVyc2lvbiAke2F9LiA8YSBocmVmPSJodHRwczovL2hhbmRzb250YWJsZS5jb20vcHJpY2luZyIgdGFyZ2V0PSJfYmxhbmsiPlJlbmV3''@;'; put 'put ''PC9hPiB5b3VyXHgyMAogICAgbGljZW5zZSBrZXkgb3IgZG93bmdyYWRlIHRvIGEgdmVyc2lvbiByZWxlYXNlZCBwcmlvciB0byAke2x9LiBJZiB5b3UgbmVlZCBhbnlceDIwCiAgICBoZWxwLCBjb250YWN0IHVzIGF0IDxhIGhyZWY9Im1haWx0bzpzYWxlc0BoYW5kc29udGFibGUuY29tIj5z''@;'; put 'put ''YWxlc0BoYW5kc29udGFibGUuY29tPC9hPi5gfSxtaXNzaW5nOigpPT5mbGAKICAgIFRoZSBsaWNlbnNlIGtleSBmb3IgSGFuZHNvbnRhYmxlIGlzIG1pc3NpbmcuIFVzZSB5b3VyIHB1cmNoYXNlZCBrZXkgdG8gYWN0aXZhdGUgdGhlIHByb2R1Y3QuXHgyMAogICAgQWx0ZXJuYXRpdmVseSwg''@;'; put 'put ''eW91IGNhbiBhY3RpdmF0ZSBIYW5kc29udGFibGUgdG8gdXNlIGZvciBub24tY29tbWVyY2lhbCBwdXJwb3NlcyBieVx4MjAKICAgIHBhc3NpbmcgdGhlIGtleTogJ25vbi1jb21tZXJjaWFsLWFuZC1ldmFsdWF0aW9uJy5ceDIwCiAgICA8YSBocmVmPSJodHRwczovL2hhbmRzb250YWJsZS5j''@;'; put 'put ''b20vZG9jcy90dXRvcmlhbC1saWNlbnNlLWtleS5odG1sIiB0YXJnZXQ9Il9ibGFuayI+UmVhZCBtb3JlPC9hPiBhYm91dCBpdCBpblx4MjAKICAgIHRoZSBkb2N1bWVudGF0aW9uIG9yIGNvbnRhY3QgdXMgYXQgPGEgaHJlZj0ibWFpbHRvOnN1cHBvcnRAaGFuZHNvbnRhYmxlLmNvbSI+c3Vw''@;'; put 'put ''cG9ydEBoYW5kc29udGFibGUuY29tPC9hPi5gLG5vbl9jb21tZXJjaWFsOigpPT4iIn07ZnVuY3Rpb24gYTJlKGMsbCl7Y29uc3QgYT0hVWMoYyksZD0ic3RyaW5nIj09dHlwZW9mIGMmJiJub24tY29tbWVyY2lhbC1hbmQtZXZhbHVhdGlvbiI9PT1jLnRvTG93ZXJDYXNlKCksaD0iMTUuMi4w''@;'; put 'put ''IjtsZXQgZix2PSJpbnZhbGlkIixNPSJpbnZhbGlkIjtjb25zdCBEPWZ1bmN0aW9uIHlLZShjKXtsZXQgbD1bXVtkRV0sYT1sO2lmKGNbZEVdIT09ZkUoIloiKSlyZXR1cm4hMTtmb3IobGV0IGQ9IiIsaD0iQjxINFArIi5zcGxpdCgiIiksZj1mRShoLnNoaWZ0KCkpO2Y7Zj1mRShoLnNoaWZ0''@;'; put 'put ''KCl8fCJBIikpLS1mPCIiW2RFXT9hfD0objJlKGAke24yZShoRShkKSsoaEUoU08oYyxNYXRoLmFicyhmKSwyKSkrW10pLnBhZFN0YXJ0KDIsIjAiKSl9YCklOTd8fDIpPj4xOmQ9U08oYyxmLGY/MT09PWhbZEVdPzk6ODo2KTtyZXR1cm4gYT09PWx9KGM9SkcoY3x8IiIpKTtpZihhfHxkfHxE''@;'; put 'put ''KWlmKEQpe2NvbnN0IFo9TGEoIjE5LzAzLzIwMjUiLCJERC9NTS9ZWVlZIiksbmU9TWF0aC5mbG9vcihaLnRvRGF0ZSgpLmdldFRpbWUoKS84NjRlNSksY2U9dktlKGMpO2Y9TGEoODY0ZTUqKGNlKzEpLCJ4IikuZm9ybWF0KCJNTU1NIERELCBZWVlZIiksbmU+Y2U/KHY9ImV4cGlyZWQiLE09''@;'; put 'put ''ImV4cGlyZWQiKToodj0idmFsaWQiLE09InZhbGlkIil9ZWxzZSBkPyh2PSJub25fY29tbWVyY2lhbCIsTT0idmFsaWQiKToodj0iaW52YWxpZCIsTT0iaW52YWxpZCIpO2Vsc2Ugdj0ibWlzc2luZyIsTT0ibWlzc2luZyI7aWYoYktlKCkmJih2PSJ2YWxpZCIsTT0idmFsaWQiKSwhcjJlJiYi''@;'; put 'put ''dmFsaWQiIT09diYmKGkyZVt2XSh7a2V5VmFsaWRpdHlEYXRlOmYsaG90VmVyc2lvbjpofSkmJmNvbnNvbGVbIm5vbl9jb21tZXJjaWFsIj09PXY/ImluZm8iOiJ3YXJuIl0oaTJlW3ZdKHtrZXlWYWxpZGl0eURhdGU6Zixob3RWZXJzaW9uOmh9KSkscjJlPSEwKSwidmFsaWQiIT09TSYmbC5w''@;'; put 'put ''YXJlbnROb2RlJiZvMmVbTV0oe2tleVZhbGlkaXR5RGF0ZTpmLGhvdFZlcnNpb246aH0pKXtjb25zdCBuZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtuZS5jbGFzc05hbWU9ImhhbmRzb250YWJsZSBob3QtZGlzcGxheS1saWNlbnNlLWluZm8iLG5lLmlubmVySFRNTD1vMmVbTV0o''@;'; put 'put ''e2tleVZhbGlkaXR5RGF0ZTpmLGhvdFZlcnNpb246aH0pLGwucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobmUsbC5uZXh0U2libGluZyl9fWZ1bmN0aW9uIGcxKGMpe3JldHVybiBjWzBdLnRvVXBwZXJDYXNlKCkrYy5zdWJzdHIoMSl9ZnVuY3Rpb24gX0tlKCl7Y29uc3QgYz1bXTtmb3IodmFy''@;'; put 'put ''IGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTtsZXQgaD1hLmxlbmd0aDtmb3IoO2g7KXtoLT0xO2NvbnN0IGY9emMoYVtoXSkudG9Mb3dlckNhc2UoKTstMT09PWMuaW5kZXhPZihmKSYmYy5wdXNoKGYpfXJldHVybiAxPT09''@;'; put 'put ''Yy5sZW5ndGh9ZnVuY3Rpb24gUUcoKXtmdW5jdGlvbiBjKCl7cmV0dXJuIE1hdGguZmxvb3IoNjU1MzYqKDErTWF0aC5yYW5kb20oKSkpLnRvU3RyaW5nKDE2KS5zdWJzdHJpbmcoMSl9cmV0dXJuIGMoKStjKCkrYygpK2MoKX1mdW5jdGlvbiBlJChjKXtyZXR1cm4vXihbMC05XVswLTldPyUk''@;'; put 'put ''KXwoXjEwMCUkKS8udGVzdChjKX1mdW5jdGlvbiB0JChjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307cmV0dXJuYCR7Y31gLnJlcGxhY2UoLyg/OlxcKT9cWyhbXltcXV0rKV0vZywoYSxkKT0+IlxcIj09PWEuY2hhckF0''@;'; put 'put ''KDApP2Euc3Vic3RyKDEsYS5sZW5ndGgtMSk6dm9pZCAwPT09bFtkXT8iIjpsW2RdKX1mdW5jdGlvbiBuJChjKXtyZXR1cm4gTU8oYCR7Y31gLHtBTExPV0VEX1RBR1M6W119KX1mdW5jdGlvbiBNTyhjLGwpe3JldHVybiBkS2Uuc2FuaXRpemUoYyxsKX1jb25zdCBQNz1jPT5bInRhYmluZGV4''@;'; put 'put ''IixjXSxfcD0oKT0+WyJyb2xlIiwicHJlc2VudGF0aW9uIl0sREtlPSgpPT5bInJvbGUiLCJjaGVja2JveCJdLHhPPWM9PlsiYXJpYS1sYWJlbCIsY10sa209KCk9PlsiYXJpYS1oaWRkZW4iLCJ0cnVlIl0sYzJlPWM9PlsiYXJpYS1oYXNwb3B1cCIsY10sdTJlPWM9PlsiYXJpYS1yb3djb3Vu''@;'; put 'put ''dCIsY10sRU89Yz0+WyJhcmlhLWNvbGNvdW50IixjXSxkMmU9Yz0+WyJhcmlhLXJvd2luZGV4IixjXSxpJD1jPT5bImFyaWEtY29saW5kZXgiLGNdLEQyPWM9PlsiYXJpYS1leHBhbmRlZCIsY10saDJlPSgpPT5bImFyaWEtcmVhZG9ubHkiLCJ0cnVlIl0sZjJlPSgpPT5bImFyaWEtaW52YWxp''@;'; put 'put ''ZCIsInRydWUiXSxwMmU9Yz0+WyJhcmlhLWNoZWNrZWQiLGNdLE5LZT1jPT5bImFyaWEtY29udHJvbHMiLGNdLEJLZT1jPT5bImFyaWEtbGl2ZSIsY10saktlPWM9PlsiYXJpYS1yZWxldmFudCIsY10sektlPWM9PlsiYXJpYS1zZXRzaXplIixjXSxVS2U9Yz0+WyJhcmlhLXBvc2luc2V0Iixj''@;'; put 'put ''XTtmdW5jdGlvbiBnMmUoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjAsYT0tMSxkPW51bGwsaD1jO2Zvcig7bnVsbCE9PWg7KXtpZihhPT09bCl7ZD1oO2JyZWFrfWguaG9zdCYmaC5ub2RlVHlwZT09PU5vZGUuRE9DVU1F''@;'; put 'put ''TlRfRlJBR01FTlRfTk9ERT9oPWguaG9zdDooYSs9MSxoPWgucGFyZW50Tm9kZSl9cmV0dXJuIGR9ZnVuY3Rpb24gcEUoYyxsKXtjb25zdCBhPWMuY2xvc2VzdCgiLmhhbmRzb250YWJsZSIpO3JldHVybiEhYSYmKGEucGFyZW50Tm9kZT09PWx8fGE9PT1sKX1mdW5jdGlvbiBtMmUoYyl7cmV0''@;'; put 'put ''dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihjLnBhcmVudCkmJmMuZnJhbWVFbGVtZW50fWZ1bmN0aW9uIEY3KGMpe3JldHVybiBtMmUoYykmJmMucGFyZW50fWZ1bmN0aW9uIFpLZShjKXtyZXR1cm4hIU9iamVjdC5nZXRQcm90b3R5cGVPZihjLnBhcmVudCl9ZnVuY3Rpb24gRG0oYyl7bGV0''@;'; put 'put ''IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdLGE9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7Y29uc3R7RUxFTUVOVF9OT0RFOmQsRE9DVU1FTlRfRlJBR01FTlRfTk9ERTpofT1Ob2RlO2xldCBmPWM7Zm9y''@;'; put 'put ''KDtudWxsIT1mJiZmIT09YTspe2NvbnN0e25vZGVUeXBlOnYsbm9kZU5hbWU6TX09ZjtpZih2PT09ZCYmKGwuaW5jbHVkZXMoTSl8fGwuaW5jbHVkZXMoZikpKXJldHVybiBmO2NvbnN0e2hvc3Q6RH09ZjtmPUQmJnY9PT1oP0Q6Zi5wYXJlbnROb2RlfXJldHVybiBudWxsfWZ1bmN0aW9uIGdF''@;'; put 'put ''KGMsbCxhKXtjb25zdCBkPVtdO2xldCBoPWM7Zm9yKDtoJiYoaD1EbShoLGwsYSksaCYmKCFhfHxhLmNvbnRhaW5zKGgpKSk7KWQucHVzaChoKSxoPWguaG9zdCYmaC5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERT9oLmhvc3Q6aC5wYXJlbnROb2RlO2NvbnN0IGY9ZC5s''@;'; put 'put ''ZW5ndGg7cmV0dXJuIGY/ZFtmLTFdOm51bGx9ZnVuY3Rpb24gdjJlKGMsbCl7Y29uc3QgYT17ZWxlbWVudDp2b2lkIDAsY2xhc3NOYW1lczpbXX07bGV0IGQ9Yztmb3IoO251bGwhPT1kJiZkIT09Yy5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCYmIWEuZWxlbWVudDspe2lmKCJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgbCYmZC5jbGFzc0xpc3QuY29udGFpbnMobCkpYS5lbGVtZW50PWQsYS5jbGFzc05hbWVzLnB1c2gobCk7ZWxzZSBpZihsIGluc3RhbmNlb2YgUmVnRXhwKXtjb25zdCBoPUFycmF5LmZyb20oZC5jbGFzc0xpc3QpLmZpbHRlcihmPT5sLnRlc3QoZikpO2gubGVuZ3RoJiYo''@;'; put 'put ''YS5lbGVtZW50PWQsYS5jbGFzc05hbWVzLnB1c2goLi4uaCkpfWQ9ZC5wYXJlbnRFbGVtZW50fXJldHVybiBhfWZ1bmN0aW9uIEltKGMsbCl7bGV0IGE9Yy5wYXJlbnROb2RlLGQ9W107Zm9yKCJzdHJpbmciPT10eXBlb2YgbD9kPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGMuZGVmYXVs''@;'; put 'put ''dFZpZXc/Yy5xdWVyeVNlbGVjdG9yQWxsKGwpOmMub3duZXJEb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGwpLDApOmQucHVzaChsKTtudWxsIT09YTspe2lmKGQuaW5kZXhPZihhKT4tMSlyZXR1cm4hMDthPWEucGFyZW50Tm9kZX1yZXR1cm4hMX1mdW5jdGlvbiBiMmUoYyl7bGV0IGw9MCxh''@;'; put 'put ''PWM7aWYoYS5wcmV2aW91c1NpYmxpbmcpZm9yKDthPWEucHJldmlvdXNTaWJsaW5nOylsKz0xO3JldHVybiBsfWZ1bmN0aW9uIFJtKGMsbCxhKXtjb25zdCBkPWEucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKGAuaHRfY2xvbmVfJHtjfWApO3JldHVybiBkP2QuY29udGFpbnMobCk6bnVs''@;'; put 'put ''bH1mdW5jdGlvbiB5MmUoYyl7cmV0dXJuIGMmJmMubGVuZ3RoP2MuZmlsdGVyKGw9PiEhbCk6W119ZnVuY3Rpb24gXzJlKGMsbCl7aWYoIWN8fCFjLmxlbmd0aClyZXR1cm4gbD97cmVnZXhGcmVlOltdLHJlZ2V4ZXM6W119OltdO2NvbnN0IGE9W10sZD1bXTtyZXR1cm4gZC5wdXNoKC4uLmMu''@;'; put 'put ''ZmlsdGVyKGg9Pntjb25zdCBmPWggaW5zdGFuY2VvZiBSZWdFeHA7cmV0dXJuIGYmJmwmJmEucHVzaChoKSwhZn0pKSxsP3tyZWdleEZyZWU6ZCxyZWdleGVzOmF9OmR9ZnVuY3Rpb24gcGEoYyxsKXtyZXR1cm4gdm9pZCAwIT09Yy5jbGFzc0xpc3QmJiJzdHJpbmciPT10eXBlb2YgbCYmIiIh''@;'; put 'put ''PT1sJiZjLmNsYXNzTGlzdC5jb250YWlucyhsKX1mdW5jdGlvbiBUaShjLGwpeyJzdHJpbmciPT10eXBlb2YgbCYmKGw9bC5zcGxpdCgiICIpKSwobD15MmUobCkpLmxlbmd0aD4wJiZjLmNsYXNzTGlzdC5hZGQoLi4ubCl9ZnVuY3Rpb24gY2EoYyxsKXsic3RyaW5nIj09dHlwZW9mIGw/bD1s''@;'; put 'put ''LnNwbGl0KCIgIik6bCBpbnN0YW5jZW9mIFJlZ0V4cCYmKGw9W2xdKTtsZXR7cmVnZXhGcmVlOmEscmVnZXhlczpkfT1fMmUobCwhMCk7YT15MmUoYSksYS5sZW5ndGg+MCYmYy5jbGFzc0xpc3QucmVtb3ZlKC4uLmEpLGQuZm9yRWFjaChoPT57Yy5jbGFzc0xpc3QuZm9yRWFjaChmPT57aC50''@;'; put 'put ''ZXN0KGYpJiZjLmNsYXNzTGlzdC5yZW1vdmUoZil9KX0pfWZ1bmN0aW9uIHZhKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXSxhPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO0FycmF5LmlzQXJy''@;'; put 'put ''YXkobCl8fChsPVtbbCxhXV0pLGwuZm9yRWFjaChkPT57QXJyYXkuaXNBcnJheShkKSYmIiIhPT1kWzBdJiZjLnNldEF0dHJpYnV0ZSguLi5kKX0pfWZ1bmN0aW9uIEg3KGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXTsi''@;'; put 'put ''c3RyaW5nIj09dHlwZW9mIGw/bD1sLnNwbGl0KCIgIik6bCBpbnN0YW5jZW9mIFJlZ0V4cCYmKGw9W2xdKTtjb25zdHtyZWdleEZyZWU6YSxyZWdleGVzOmR9PV8yZShsLCEwKTthLmZvckVhY2goaD0+eyIiIT09aCYmYy5yZW1vdmVBdHRyaWJ1dGUoaCl9KSxkLmZvckVhY2goaD0+e2MuZ2V0''@;'; put 'put ''QXR0cmlidXRlTmFtZXMoKS5mb3JFYWNoKGY9PntoLnRlc3QoZikmJmMucmVtb3ZlQXR0cmlidXRlKGYpfSl9KX1mdW5jdGlvbiBhJChjKXtpZigzPT09Yy5ub2RlVHlwZSljLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYyk7ZWxzZSBpZihbIlRBQkxFIiwiVEhFQUQiLCJUQk9EWSIsIlRGT09U''@;'; put 'put ''IiwiVFIiXS5pbmRleE9mKGMubm9kZU5hbWUpPi0xKXtjb25zdCBsPWMuY2hpbGROb2Rlcztmb3IobGV0IGE9bC5sZW5ndGgtMTthPj0wO2EtLSlhJChsW2FdKX19ZnVuY3Rpb24gd3AoYyl7bGV0IGw7Zm9yKDtsPWMubGFzdENoaWxkOyljLnJlbW92ZUNoaWxkKGwpfWNvbnN0IHcyZT0vKDwo''@;'; put 'put ''LiopPnwmKC4qKTspLztmdW5jdGlvbiBONyhjLGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07dzJlLnRlc3QobCk/Yy5pbm5lckhUTUw9YT9NTyhsKTpsOkxtKGMsbCl9ZnVuY3Rpb24gTG0oYyxsKXtjb25zdCBhPWMu''@;'; put 'put ''Zmlyc3RDaGlsZDthJiYzPT09YS5ub2RlVHlwZSYmbnVsbD09PWEubmV4dFNpYmxpbmc/YS50ZXh0Q29udGVudD1sOih3cChjKSxjLmFwcGVuZENoaWxkKGMub3duZXJEb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShsKSkpfWZ1bmN0aW9uIFY3KGMpe2NvbnN0IGw9Yy5vd25lckRvY3VtZW50LmRv''@;'; put 'put ''Y3VtZW50RWxlbWVudCxhPWMub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztsZXQgZD1jO2Zvcig7ZCE9PWw7KXtpZihudWxsPT09ZClyZXR1cm4hMTtpZihkLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFKXtpZihkLmhvc3Qpe2lmKGQuaG9zdC5pbXBsKXJldHVybiBW''@;'; put 'put ''NyhkLmhvc3QuaW1wbCk7aWYoZC5ob3N0KXJldHVybiBWNyhkLmhvc3QpO3Rocm93IG5ldyBFcnJvcigiTG9zdCBpbiBXZWIgQ29tcG9uZW50cyB3b3JsZCIpfXJldHVybiExfWlmKCJub25lIj09PWEuZ2V0Q29tcHV0ZWRTdHlsZShkKS5kaXNwbGF5KXJldHVybiExO2Q9ZC5wYXJlbnROb2Rl''@;'; put 'put ''fXJldHVybiEwfWZ1bmN0aW9uIHowKGMpe2NvbnN0IGw9Yy5vd25lckRvY3VtZW50LGE9bC5kZWZhdWx0VmlldyxkPWwuZG9jdW1lbnRFbGVtZW50O2xldCBmLHYsTSxoPWM7Zm9yKGY9aC5vZmZzZXRMZWZ0LHY9aC5vZmZzZXRUb3AsTT1oOyhoPWgub2Zmc2V0UGFyZW50KSYmaCE9PWwuYm9k''@;'; put 'put ''eSYmIm9mZnNldExlZnQiaW4gaDspZis9aC5vZmZzZXRMZWZ0LHYrPWgub2Zmc2V0VG9wLE09aDtyZXR1cm4gTSYmImZpeGVkIj09PU0uc3R5bGUucG9zaXRpb24mJihmKz1hLnBhZ2VYT2Zmc2V0fHxkLnNjcm9sbExlZnQsdis9YS5wYWdlWU9mZnNldHx8ZC5zY3JvbGxUb3ApLHtsZWZ0OmYs''@;'; put 'put ''dG9wOnZ9fWZ1bmN0aW9uIHMkKCl7cmV0dXJuKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp3aW5kb3cpLnNjcm9sbFl9ZnVuY3Rpb24gVE8oKXtyZXR1cm4oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJn''@;'; put 'put ''dW1lbnRzWzBdOndpbmRvdykuc2Nyb2xsWH1mdW5jdGlvbiBBTyhjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06d2luZG93O3JldHVybiBjPT09bD9zJChsKTpjLnNjcm9sbFRvcH1mdW5jdGlvbiBsJChjKXtsZXQgbD1hcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06d2luZG93O3JldHVybiBjPT09bD9UTyhsKTpjLnNjcm9sbExlZnR9ZnVuY3Rpb24gbUUoYyl7bGV0IGw9Yy5vd25lckRvY3VtZW50LGE9bD9sLmRlZmF1bHRWaWV3OnZvaWQgMDtsfHwobD1jLmRvY3Vt''@;'; put 'put ''ZW50P2MuZG9jdW1lbnQ6YyxhPWwuZGVmYXVsdFZpZXcpO2NvbnN0IGQ9WyJhdXRvIiwic2Nyb2xsIl07bGV0IGg9Yy5wYXJlbnROb2RlO2Zvcig7aCYmaC5zdHlsZSYmbC5ib2R5IT09aDspe2xldHtvdmVyZmxvdzpmLG92ZXJmbG93WDp2LG92ZXJmbG93WTpNfT1oLnN0eWxlO2lmKFtmLHYs''@;'; put 'put ''TV0uaW5jbHVkZXMoInNjcm9sbCIpKXJldHVybiBoO2lmKCh7b3ZlcmZsb3c6ZixvdmVyZmxvd1g6dixvdmVyZmxvd1k6TX09YS5nZXRDb21wdXRlZFN0eWxlKGgpKSxkLmluY2x1ZGVzKGYpfHxkLmluY2x1ZGVzKHYpfHxkLmluY2x1ZGVzKE0pfHxoLmNsaWVudEhlaWdodDw9aC5zY3JvbGxI''@;'; put 'put ''ZWlnaHQrMSYmKGQuaW5jbHVkZXMoTSl8fGQuaW5jbHVkZXMoZikpfHxoLmNsaWVudFdpZHRoPD1oLnNjcm9sbFdpZHRoKzEmJihkLmluY2x1ZGVzKHYpfHxkLmluY2x1ZGVzKGYpKSlyZXR1cm4gaDtoPWgucGFyZW50Tm9kZX1yZXR1cm4gYX1mdW5jdGlvbiBDMmUoYyl7cmV0dXJuIGMuc2Ny''@;'; put 'put ''b2xsSGVpZ2h0LWMuY2xpZW50SGVpZ2h0fWZ1bmN0aW9uIFMyZShjKXtyZXR1cm4gYy5zY3JvbGxXaWR0aC1jLmNsaWVudFdpZHRofWZ1bmN0aW9uIHRfKGMpe2NvbnN0IGw9Yy5vd25lckRvY3VtZW50LGE9bC5kZWZhdWx0VmlldztsZXQgZD1jLnBhcmVudE5vZGU7Zm9yKDtkJiZkLnN0eWxl''@;'; put 'put ''JiZsLmJvZHkhPT1kOyl7aWYoInZpc2libGUiIT09ZC5zdHlsZS5vdmVyZmxvdyYmIiIhPT1kLnN0eWxlLm92ZXJmbG93KXJldHVybiBkO2NvbnN0IGg9YS5nZXRDb21wdXRlZFN0eWxlKGQpLGY9WyJzY3JvbGwiLCJoaWRkZW4iLCJhdXRvIl0sdj1oLmdldFByb3BlcnR5VmFsdWUoIm92ZXJm''@;'; put 'put ''bG93IiksTT1oLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93LXkiKSxEPWguZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3cteCIpO2lmKGYuaW5jbHVkZXModil8fGYuaW5jbHVkZXMoTSl8fGYuaW5jbHVkZXMoRCkpcmV0dXJuIGQ7ZD1kLnBhcmVudE5vZGV9cmV0dXJuIGF9ZnVuY3Rpb24g''@;'; put 'put ''dkUoYyxsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06d2luZG93O2lmKCFjKXJldHVybjtpZihjPT09YSlyZXR1cm4id2lkdGgiPT09bD9gJHthLmlubmVyV2lkdGh9cHhgOiJoZWlnaHQiPT09bD9gJHthLmlubmVySGVpZ2h0''@;'; put 'put ''fXB4YDp2b2lkIDA7Y29uc3QgZD1jLnN0eWxlW2xdO2lmKCIiIT09ZCYmdm9pZCAwIT09ZClyZXR1cm4gZDtjb25zdCBoPWEuZ2V0Q29tcHV0ZWRTdHlsZShjKTtyZXR1cm4iIiE9PWhbbF0mJnZvaWQgMCE9PWhbbF0/aFtsXTp2b2lkIDB9ZnVuY3Rpb24gV0tlKGMsbCl7Y29uc3R7c2VsZWN0''@;'; put 'put ''b3JUZXh0OmF9PWw7bGV0IGQ9ITE7cmV0dXJuIGwudHlwZT09PUNTU1J1bGUuU1RZTEVfUlVMRSYmYSYmKGMubXNNYXRjaGVzU2VsZWN0b3I/ZD1jLm1zTWF0Y2hlc1NlbGVjdG9yKGEpOmMubWF0Y2hlcyYmKGQ9Yy5tYXRjaGVzKGEpKSksZH1mdW5jdGlvbiBhdShjKXtyZXR1cm4gYy5vZmZz''@;'; put 'put ''ZXRXaWR0aH1mdW5jdGlvbiBNdShjKXtyZXR1cm4gYy5vZmZzZXRIZWlnaHR9ZnVuY3Rpb24gbl8oYyl7cmV0dXJuIGMuY2xpZW50SGVpZ2h0fHxjLmlubmVySGVpZ2h0fWZ1bmN0aW9uIGMkKGMpe3JldHVybiBjLmNsaWVudFdpZHRofHxjLmlubmVyV2lkdGh9ZnVuY3Rpb24gWUtlKGMsbCxh''@;'; put 'put ''KXtjLmFkZEV2ZW50TGlzdGVuZXIobCxhLCExKX1mdW5jdGlvbiBHS2UoYyxsLGEpe2MucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLGEsITEpfWZ1bmN0aW9uIHUkKGMpe3JldHVybiBjLnNlbGVjdGlvblN0YXJ0P2Muc2VsZWN0aW9uU3RhcnQ6MH1mdW5jdGlvbiBNMmUoYyl7cmV0dXJuIGMuc2Vs''@;'; put 'put ''ZWN0aW9uRW5kP2Muc2VsZWN0aW9uRW5kOjB9ZnVuY3Rpb24gJEtlKCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOndpbmRvdztjb25zdCBsPWMuZG9jdW1lbnQ7bGV0IGE9IiI7cmV0dXJuIGMuZ2V0U2VsZWN0aW9uP2E9Yy5n''@;'; put 'put ''ZXRTZWxlY3Rpb24oKS50b1N0cmluZygpOmwuc2VsZWN0aW9uJiYiQ29udHJvbCIhPT1sLnNlbGVjdGlvbi50eXBlJiYoYT1sLnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpLnRleHQpLGF9ZnVuY3Rpb24gZCQoKXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1sw''@;'; put 'put ''XT9hcmd1bWVudHNbMF06d2luZG93O2MuZ2V0U2VsZWN0aW9uJiYoYy5nZXRTZWxlY3Rpb24oKS5lbXB0eT9jLmdldFNlbGVjdGlvbigpLmVtcHR5KCk6Yy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMmJmMuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCkpfWZ1bmN0aW9u''@;'; put 'put ''IGJFKGMsbCxhKXtpZih2b2lkIDA9PT1hJiYoYT1sKSxjLnNldFNlbGVjdGlvblJhbmdlKXtjLmZvY3VzKCk7dHJ5e2Muc2V0U2VsZWN0aW9uUmFuZ2UobCxhKX1jYXRjaHtjb25zdCBoPWMucGFyZW50Tm9kZSxmPWguc3R5bGUuZGlzcGxheTtoLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixjLnNl''@;'; put 'put ''dFNlbGVjdGlvblJhbmdlKGwsYSksaC5zdHlsZS5kaXNwbGF5PWZ9fX1sZXQgaCQsaV87ZnVuY3Rpb24gaDAoKXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06ZG9jdW1lbnQ7cmV0dXJuIHZvaWQgMD09PWgkJiYoaCQ9ZnVuY3Rp''@;'; put 'put ''b24gS0tlKCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOmRvY3VtZW50O2NvbnN0IGw9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKTtsLnN0eWxlLmhlaWdodD0iMjAwcHgiLGwuc3R5bGUud2lkdGg9IjEwMCUiO2NvbnN0IGE9Yy5j''@;'; put 'put ''cmVhdGVFbGVtZW50KCJkaXYiKTthLnN0eWxlLmJveFNpemluZz0iY29udGVudC1ib3giLGEuc3R5bGUuaGVpZ2h0PSIxNTBweCIsYS5zdHlsZS5sZWZ0PSIwcHgiLGEuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIsYS5zdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLGEuc3R5bGUudG9wPSIwcHgi''@;'; put 'put ''LGEuc3R5bGUud2lkdGg9IjIwMHB4IixhLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIsYS5hcHBlbmRDaGlsZChsKSwoYy5ib2R5fHxjLmRvY3VtZW50RWxlbWVudCkuYXBwZW5kQ2hpbGQoYSk7Y29uc3QgZD1sLm9mZnNldFdpZHRoO2Euc3R5bGUub3ZlcmZsb3c9InNjcm9sbCI7bGV0IGg9''@;'; put 'put ''bC5vZmZzZXRXaWR0aDtyZXR1cm4gZD09PWgmJihoPWEuY2xpZW50V2lkdGgpLChjLmJvZHl8fGMuZG9jdW1lbnRFbGVtZW50KS5yZW1vdmVDaGlsZChhKSxkLWh9KGMpKSxoJH1mdW5jdGlvbiBmJChjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIFdpbmRvdz9jLmRvY3VtZW50LmJvZHkuc2Nyb2xs''@;'; put 'put ''SGVpZ2h0PmMuaW5uZXJIZWlnaHQ6Yy5vZmZzZXRXaWR0aCE9PWMuY2xpZW50V2lkdGh9ZnVuY3Rpb24gcCQoYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiBXaW5kb3c/Yy5kb2N1bWVudC5ib2R5LnNjcm9sbFdpZHRoPmMuaW5uZXJXaWR0aDpjLm9mZnNldEhlaWdodCE9PWMuY2xpZW50SGVpZ2h0''@;'; put 'put ''fWZ1bmN0aW9uIGtPKGMsbCxhKXtjLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlM2QoJHtsfSwke2F9LDApYH1mdW5jdGlvbiBxS2UoYyl7bGV0IGw7cmV0dXJuIGMuc3R5bGUudHJhbnNmb3JtJiYiIiE9PShsPWMuc3R5bGUudHJhbnNmb3JtKT9bInRyYW5zZm9ybSIsbF06LTF9ZnVuY3Rp''@;'; put 'put ''b24geUUoYyl7Yy5zdHlsZS50cmFuc2Zvcm0mJiIiIT09Yy5zdHlsZS50cmFuc2Zvcm0mJihjLnN0eWxlLnRyYW5zZm9ybT0iIil9ZnVuY3Rpb24gX0UoYyl7cmV0dXJuIGMmJihbIklOUFVUIiwiU0VMRUNUIiwiVEVYVEFSRUEiXS5pbmRleE9mKGMubm9kZU5hbWUpPi0xfHwidHJ1ZSI9PT1j''@;'; put 'put ''LmNvbnRlbnRFZGl0YWJsZSl9ZnVuY3Rpb24gRE8oYyl7cmV0dXJuIF9FKGMpJiYhMT09PWMuaGFzQXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIpfWZ1bmN0aW9uIFhLZShjKXtETyhjLm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudCl8fGMuc2VsZWN0KCl9ZnVuY3Rpb24gZyQoYyl7cmV0''@;'; put 'put ''dXJuIWMucGFyZW50Tm9kZX1mdW5jdGlvbiB4MmUoYyxsKXtuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKGQsaCk9PntkLmZvckVhY2goZj0+e2YuaXNJbnRlcnNlY3RpbmcmJm51bGwhPT1jLm9mZnNldFBhcmVudCYmKGwoKSxoLnVub2JzZXJ2ZShjKSl9KX0se3Jvb3Q6Yy5vd25lckRvY3Vt''@;'; put 'put ''ZW50LmJvZHl9KS5vYnNlcnZlKGMpfWZ1bmN0aW9uIG0kKGMpe2xldCBsPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sYT0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO2Nv''@;'; put 'put ''bnN0IGQ9Yy5vd25lckRvY3VtZW50LGg9ZC5jcmVhdGVSYW5nZSgpLGY9ZC5kZWZhdWx0Vmlldy5nZXRTZWxlY3Rpb24oKTt2YShjLCJjb250ZW50ZWRpdGFibGUiLCEwKSxhJiZ2YShjLC4uLmttKCkpLGwmJlRpKGMsImludmlzaWJsZVNlbGVjdGlvbiIpLGguc2VsZWN0Tm9kZUNvbnRlbnRz''@;'; put 'put ''KGMpLGYucmVtb3ZlQWxsUmFuZ2VzKCksZi5hZGRSYW5nZShoKX1mdW5jdGlvbiB2JChjKXtsZXQgbD0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO2NvbnN0IGE9Yy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldFNlbGVjdGlv''@;'; put 'put ''bigpO2MuaGFzQXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpJiZjLnJlbW92ZUF0dHJpYnV0ZSgiYXJpYS1oaWRkZW4iKSxhLnJlbW92ZUFsbFJhbmdlcygpLGwmJmNhKGMsImludmlzaWJsZVNlbGVjdGlvbiIpLGMucmVtb3ZlQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKX1mdW5jdGlvbiBF''@;'; put 'put ''MmUoYyxsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdKXx8YXJndW1lbnRzWzJdO20kKGMsYSksbCgpLHYkKGMsYSl9ZnVuY3Rpb24gZmcoYyl7dmFyIGw7Y29uc3QgYT1udWxsPT1jfHxudWxsPT09KGw9Yy5vd25lckRvY3VtZW50KXx8dm9pZCAw''@;'; put 'put ''PT09bD92b2lkIDA6bC5kZWZhdWx0Vmlldy5FbGVtZW50O3JldHVybiEhKGEmJm51bGwhPT1hJiZjIGluc3RhbmNlb2YgYSl9ZnVuY3Rpb24gZWMoYyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGN9ZnVuY3Rpb24gVDJlKGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09''@;'; put 'put ''YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToyMDAsYT0wO2NvbnN0IGQ9e2xhc3RDYWxsVGhyb3R0bGVkOiEwfTtsZXQgaD1udWxsO3JldHVybiBmdW5jdGlvbiBmKCl7Zm9yKHZhciB2PWFyZ3VtZW50cy5sZW5ndGgsTT1uZXcgQXJyYXkodiksRD0wO0Q8djtEKyspTVtEXT1hcmd1bWVudHNb''@;'; put 'put ''RF07Y29uc3QgWj1EYXRlLm5vdygpO2xldCBuZT0hMTtkLmxhc3RDYWxsVGhyb3R0bGVkPSEwLGF8fChhPVosbmU9ITApO2NvbnN0IGNlPWwtKFotYSk7cmV0dXJuIG5lPyhkLmxhc3RDYWxsVGhyb3R0bGVkPSExLGMuYXBwbHkodGhpcyxNKSk6KGgmJmNsZWFyVGltZW91dChoKSxoPXNldFRp''@;'; put 'put ''bWVvdXQoKCk9PntkLmxhc3RDYWxsVGhyb3R0bGVkPSExLGMuYXBwbHkodGhpcyxNKSxhPTAsaD12b2lkIDB9LGNlKSksZH19ZnVuY3Rpb24gSktlKGMpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToxMDtjb25zdCBkPVQyZShj''@;'; put 'put ''LGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToyMDApO2xldCBoPWE7ZnVuY3Rpb24gdigpe2Zvcih2YXIgTT1hcmd1bWVudHMubGVuZ3RoLEQ9bmV3IEFycmF5KE0pLFo9MDtaPE07WisrKURbWl09YXJndW1lbnRzW1pdO3JldHVybiBoPyho''@;'; put 'put ''LT0xLGMuYXBwbHkodGhpcyxEKSk6ZC5hcHBseSh0aGlzLEQpfXJldHVybiB2LmNsZWFySGl0cz1mdW5jdGlvbiBmKCl7aD1hfSx2fWZ1bmN0aW9uIElPKGMpe2xldCBkLGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjIwMCxhPW51bGw7''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uIGgoKXtmb3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCx2PW5ldyBBcnJheShmKSxNPTA7TTxmO00rKyl2W01dPWFyZ3VtZW50c1tNXTtyZXR1cm4gYSYmY2xlYXJUaW1lb3V0KGEpLGE9c2V0VGltZW91dCgoKT0+e2Q9Yy5hcHBseSh0aGlzLHYpfSxsKSxkfX1mdW5j''@;'; put 'put ''dGlvbiBRS2UoKXtmb3IodmFyIGM9YXJndW1lbnRzLmxlbmd0aCxsPW5ldyBBcnJheShjKSxhPTA7YTxjO2ErKylsW2FdPWFyZ3VtZW50c1thXTtjb25zdFtkLC4uLmhdPWw7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciB2PWFyZ3VtZW50cy5sZW5ndGgsTT1uZXcgQXJyYXkodiksRD0wO0Q8''@;'; put 'put ''djtEKyspTVtEXT1hcmd1bWVudHNbRF07cmV0dXJuIHF1KGgsKFosbmUpPT5uZShaKSxkLmFwcGx5KHRoaXMsTSkpfX1mdW5jdGlvbiBiJChjKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsPjE/bC0xOjApLGQ9MTtkPGw7ZCsrKWFbZC0xXT1hcmd1bWVudHNbZF07''@;'; put 'put ''cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciBmPWFyZ3VtZW50cy5sZW5ndGgsdj1uZXcgQXJyYXkoZiksTT0wO008ZjtNKyspdltNXT1hcmd1bWVudHNbTV07cmV0dXJuIGMuYXBwbHkodGhpcyxhLmNvbmNhdCh2KSl9fWZ1bmN0aW9uIEEyZShjKXtjb25zdCBsPWMubGVuZ3RoO3JldHVybiBm''@;'; put 'put ''dW5jdGlvbiBhKGQpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZj1hcmd1bWVudHMubGVuZ3RoLHY9bmV3IEFycmF5KGYpLE09MDtNPGY7TSsrKXZbTV09YXJndW1lbnRzW01dO2NvbnN0IEQ9ZC5jb25jYXQodik7bGV0IFo7cmV0dXJuIFo9RC5sZW5ndGg+PWw/Yy5hcHBseSh0aGlzLEQp''@;'; put 'put ''OmEoRCksWn19KFtdKX1mdW5jdGlvbiBlcWUoYyl7Y29uc3QgbD1jLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24gYShkKXtyZXR1cm4gZnVuY3Rpb24oKXtmb3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCx2PW5ldyBBcnJheShmKSxNPTA7TTxmO00rKyl2W01dPWFyZ3VtZW50c1tNXTtjb25zdCBE''@;'; put 'put ''PWQuY29uY2F0KHYucmV2ZXJzZSgpKTtsZXQgWjtyZXR1cm4gWj1ELmxlbmd0aD49bD9jLmFwcGx5KHRoaXMsRCk6YShEKSxafX0oW10pfWZ1bmN0aW9uIFJPKGMsbCxhLGQsaCxmLHYsTSl7cmV0dXJuIEZvKE0pP2MuY2FsbChsLGEsZCxoLGYsdixNKTpGbyh2KT9jLmNhbGwobCxhLGQsaCxm''@;'; put 'put ''LHYpOkZvKGYpP2MuY2FsbChsLGEsZCxoLGYpOkZvKGgpP2MuY2FsbChsLGEsZCxoKTpGbyhkKT9jLmNhbGwobCxhLGQpOkZvKGEpP2MuY2FsbChsLGEpOmMuY2FsbChsKX1mdW5jdGlvbiByXyhjKXtsZXQgbDtyZXR1cm4gQXJyYXkuaXNBcnJheShjKT9sPWMubGVuZ3RoP25ldyBBcnJheShj''@;'; put 'put ''Lmxlbmd0aCkuZmlsbChudWxsKTpbXToobD17fSxxYShjLChhLGQpPT57Il9fY2hpbGRyZW4iIT09ZCYmKGxbZF09YSYmIm9iamVjdCI9PXR5cGVvZiBhJiYhQXJyYXkuaXNBcnJheShhKT9yXyhhKTpBcnJheS5pc0FycmF5KGEpP2EubGVuZ3RoJiYib2JqZWN0Ij09dHlwZW9mIGFbMF0mJiFB''@;'; put 'put ''cnJheS5pc0FycmF5KGFbMF0pP1tyXyhhWzBdKV06W106bnVsbCl9KSksbH1mdW5jdGlvbiBrMmUoYyxsKXtyZXR1cm4gbC5wcm90b3R5cGUuY29uc3RydWN0b3I9bCxjLnByb3RvdHlwZT1uZXcgbCxjLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1jLGN9ZnVuY3Rpb24geHUoYyxsLGEpe2NvbnN0''@;'; put 'put ''IGQ9QXJyYXkuaXNBcnJheShhKTtyZXR1cm4gcWEobCwoaCxmKT0+eyghMT09PWR8fGEuaW5jbHVkZXMoZikpJiYoY1tmXT1oKX0pLGN9ZnVuY3Rpb24gd0UoYyxsKXtxYShsLChhLGQpPT57bFtkXSYmIm9iamVjdCI9PXR5cGVvZiBsW2RdPyhjW2RdfHwoY1tkXT1BcnJheS5pc0FycmF5KGxb''@;'; put 'put ''ZF0pP1tdOiJbb2JqZWN0IERhdGVdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChsW2RdKT9sW2RdOnt9KSx3RShjW2RdLGxbZF0pKTpjW2RdPWxbZF19KX1mdW5jdGlvbiBtMShjKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGM/SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShj''@;'; put 'put ''KSk6Y31mdW5jdGlvbiBKZihjKXtjb25zdCBsPXt9O3JldHVybiBxYShjLChhLGQpPT57bFtkXT1hfSksbH1mdW5jdGlvbiB4bChjKXtjLk1JWElOU3x8KGMuTUlYSU5TPVtdKTtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsPjE/bC0xOjApLGQ9MTtkPGw7ZCsrKWFb''@;'; put 'put ''ZC0xXT1hcmd1bWVudHNbZF07cmV0dXJuIFluKGEsaD0+e2MuTUlYSU5TLnB1c2goaC5NSVhJTl9OQU1FKSxxYShoLChmLHYpPT57aWYodm9pZCAwIT09Yy5wcm90b3R5cGVbdl0pdGhyb3cgbmV3IEVycm9yKGBNaXhpbiBjb25mbGljdC4gUHJvcGVydHkgJyR7dn0nIGFscmVhZHkgZXhpc3Qg''@;'; put 'put ''YW5kIGNhbm5vdCBiZSBvdmVyd3JpdHRlbi5gKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgZiljLnByb3RvdHlwZVt2XT1mO2Vsc2V7Y29uc3QgRD1mdW5jdGlvbihuZSl7Y29uc3QgY2U9YF8ke25lfWA7cmV0dXJuIGZ1bmN0aW9uKGJlKXt0aGlzW2NlXT1iZX19O09iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShjLnByb3RvdHlwZSx2LHtnZXQ6ZnVuY3Rpb24obmUsY2Upe2NvbnN0IGJlPWBfJHtuZX1gO3JldHVybiBmdW5jdGlvbigpe3JldHVybiB2b2lkIDA9PT10aGlzW2JlXSYmKHRoaXNbYmVdPShCZT0+e2xldCBxZT1CZTtyZXR1cm4oQXJyYXkuaXNBcnJheShxZSl8fEthKHFlKSkmJihx''@;'; put 'put ''ZT1tMShxZSkpLHFlfSkoY2UpKSx0aGlzW2JlXX19KHYsZiksc2V0OkQodiksY29uZmlndXJhYmxlOiEwfSl9fSl9KSxjfWZ1bmN0aW9uIExPKGMsbCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KGMpPT09SlNPTi5zdHJpbmdpZnkobCl9ZnVuY3Rpb24gS2EoYyl7cmV0dXJuIltvYmplY3QgT2Jq''@;'; put 'put ''ZWN0XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYyl9ZnVuY3Rpb24gQ3AoYyxsLGEsZCl7ZC52YWx1ZT1hLGQud3JpdGFibGU9ITEhPT1kLndyaXRhYmxlLGQuZW51bWVyYWJsZT0hMSE9PWQuZW51bWVyYWJsZSxkLmNvbmZpZ3VyYWJsZT0hMSE9PWQuY29uZmlndXJhYmxl''@;'; put 'put ''LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwsZCl9ZnVuY3Rpb24gcWEoYyxsKXtmb3IoY29uc3QgYSBpbiBjKWlmKCghYy5oYXNPd25Qcm9wZXJ0eXx8Yy5oYXNPd25Qcm9wZXJ0eSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsYSkpJiYhMT09PWwoY1thXSxhLGMp''@;'; put 'put ''KWJyZWFrO3JldHVybiBjfWZ1bmN0aW9uIEQyZShjLGwpe2NvbnN0IGE9bC5zcGxpdCgiLiIpO2xldCBkPWM7cmV0dXJuIHFhKGEsaD0+e2lmKGQ9ZFtoXSx2b2lkIDA9PT1kKXJldHVybiBkPXZvaWQgMCwhMX0pLGR9ZnVuY3Rpb24gT08oYyxsLGEpe2NvbnN0IGQ9bC5zcGxpdCgiLiIpO2xl''@;'; put 'put ''dCBoPWM7ZC5mb3JFYWNoKChmLHYpPT57Il9fcHJvdG9fXyI9PT1mfHwiY29uc3RydWN0b3IiPT09Znx8InByb3RvdHlwZSI9PT1mfHwodiE9PWQubGVuZ3RoLTE/KEV1KGgsZil8fChoW2ZdPXt9KSxoPWhbZl0pOmhbZl09YSl9KX1mdW5jdGlvbiBQTyhjKXtpZighS2EoYykpcmV0dXJuIDA7''@;'; put 'put ''Y29uc3QgbD1mdW5jdGlvbihhKXtsZXQgZD0wO3JldHVybiBLYShhKT9xYShhLChoLGYpPT57Il9fY2hpbGRyZW4iIT09ZiYmKGQrPWwoaCkpfSk6ZCs9MSxkfTtyZXR1cm4gbChjKX1mdW5jdGlvbiBQZChjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sx''@;'; put 'put ''XT9hcmd1bWVudHNbMV06InZhbHVlIjtjb25zdCBhPWBfJHtsfWAsZD17X3RvdWNoZWQ6ITEsW2FdOmMsaXNUb3VjaGVkKCl7cmV0dXJuIHRoaXMuX3RvdWNoZWR9fTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGQsbCx7Z2V0KCl7cmV0dXJuIHRoaXNbYV19LHNldChoKXt0aGlzLl90''@;'; put 'put ''b3VjaGVkPSEwLHRoaXNbYV09aH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxkfWZ1bmN0aW9uIEV1KGMsbCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjLGwpfWZ1bmN0aW9uIENFKGMpe3JldHVybiB3aW5kb3cucmVxdWVzdEFuaW1hdGlv''@;'; put 'put ''bkZyYW1lKGMpfWZ1bmN0aW9uIFNFKGMpe3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZShjKX1mdW5jdGlvbiB5JCgpe3JldHVybiJvbnRvdWNoc3RhcnQiaW4gd2luZG93fWZ1bmN0aW9uIEkyZSgpe3JldHVybiB0eXBlb2Ygd2luZG93PCJ1In1mdW5jdGlvbiBSMmUoYyl7cmV0dXJuIGlf''@;'; put 'put ''fHwoaV89Im9iamVjdCI9PXR5cGVvZiBJbnRsP25ldyBJbnRsLkNvbGxhdG9yKGMsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9KS5jb21wYXJlOiJmdW5jdGlvbiI9PXR5cGVvZiBTdHJpbmcucHJvdG90eXBlLmxvY2FsZUNvbXBhcmU/''@;'; put 'put ''KGEsZCk9PmAke2F9YC5sb2NhbGVDb21wYXJlKGQpOihhLGQpPT5hPT09ZD8wOmE+ZD8tMToxLGlfKX1fKDk1NDkzKTtjb25zdCBJMj1jPT57Y29uc3QgbD17dmFsdWU6ITEsdGVzdDooYSxkKT0+e2wudmFsdWU9YyhhLGQpfX07cmV0dXJuIGx9LHBnPXtjaHJvbWU6STIoKGMsbCk9Pi9DaHJv''@;'; put 'put ''bWUvLnRlc3QoYykmJi9Hb29nbGUvLnRlc3QobCkpLGNocm9tZVdlYktpdDpJMihjPT4vQ3JpT1MvLnRlc3QoYykpLGVkZ2U6STIoYz0+L0VkZ2UvLnRlc3QoYykpLGVkZ2VXZWJLaXQ6STIoYz0+L0VkZ2lPUy8udGVzdChjKSksZmlyZWZveDpJMihjPT4vRmlyZWZveC8udGVzdChjKSksZmly''@;'; put 'put ''ZWZveFdlYktpdDpJMihjPT4vRnhpT1MvLnRlc3QoYykpLG1vYmlsZTpJMihjPT4vQW5kcm9pZHx3ZWJPU3xpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8SUVNb2JpbGV8T3BlcmEgTWluaS9pLnRlc3QoYykpLHNhZmFyaTpJMigoYyxsKT0+L1NhZmFyaS8udGVzdChjKSYmL0FwcGxlIENv''@;'; put 'put ''bXB1dGVyLy50ZXN0KGwpKX0sb189e21hYzpJMihjPT4vXk1hYy8udGVzdChjKSksd2luOkkyKGM9Pi9eV2luLy50ZXN0KGMpKSxsaW51eDpJMihjPT4vXkxpbnV4Ly50ZXN0KGMpKSxpb3M6STIoYz0+L2lQaG9uZXxpUGFkfGlQb2QvaS50ZXN0KGMpKX07ZnVuY3Rpb24gTDJlKCl7bGV0e3Vz''@;'; put 'put ''ZXJBZ2VudDpjPW5hdmlnYXRvci51c2VyQWdlbnQsdmVuZG9yOmw9bmF2aWdhdG9yLnZlbmRvcn09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O3FhKHBnLGE9PntsZXR7dGVzdDpkfT1hO2QoYyxsKX0pfWZ1bmN0aW9uIE8yZSgpe2xl''@;'; put 'put ''dHtwbGF0Zm9ybTpjPW5hdmlnYXRvci5wbGF0Zm9ybX09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O3FhKG9fLGw9PntsZXR7dGVzdDphfT1sO2EoYyl9KX1mdW5jdGlvbiBfJCgpe3JldHVybiBwZy5jaHJvbWUudmFsdWV9ZnVuY3Rp''@;'; put 'put ''b24gUDJlKCl7cmV0dXJuIHBnLmNocm9tZVdlYktpdC52YWx1ZX1mdW5jdGlvbiBGTygpe3JldHVybiBwZy5maXJlZm94LnZhbHVlfWZ1bmN0aW9uIEYyZSgpe3JldHVybiBwZy5maXJlZm94V2ViS2l0LnZhbHVlfWZ1bmN0aW9uIHckKCl7cmV0dXJuIHBnLnNhZmFyaS52YWx1ZX1mdW5jdGlv''@;'; put 'put ''biBIMmUoKXtyZXR1cm4gcGcuZWRnZS52YWx1ZX1mdW5jdGlvbiB0cWUoKXtyZXR1cm4gcGcuZWRnZVdlYktpdC52YWx1ZX1mdW5jdGlvbiBTcCgpe3JldHVybiBwZy5tb2JpbGUudmFsdWV9ZnVuY3Rpb24gQyQoKXtyZXR1cm4gb18uaW9zLnZhbHVlfWZ1bmN0aW9uIFMkKCl7bGV0e21heFRv''@;'; put 'put ''dWNoUG9pbnRzOmN9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpuYXZpZ2F0b3I7cmV0dXJuIGM+MiYmb18ubWFjLnZhbHVlfWZ1bmN0aW9uIE0kKCl7cmV0dXJuIG9fLndpbi52YWx1ZX1mdW5jdGlvbiBITygpe3JldHVybiBvXy5tYWMu''@;'; put 'put ''dmFsdWV9ZnVuY3Rpb24gbnFlKCl7cmV0dXJuIG9fLmxpbnV4LnZhbHVlfUkyZSgpJiYoTDJlKCksTzJlKCkpO2NvbnN0IEdvPXtBTFQ6MTgsQVJST1dfRE9XTjo0MCxBUlJPV19MRUZUOjM3LEFSUk9XX1JJR0hUOjM5LEFSUk9XX1VQOjM4LEFVRElPX0RPV046Rk8oKT8xODI6MTc0LEFVRElP''@;'; put 'put ''X01VVEU6Rk8oKT8xODE6MTczLEFVRElPX1VQOkZPKCk/MTgzOjE3NSxCQUNLU1BBQ0U6OCxDQVBTX0xPQ0s6MjAsQ09NTUE6MTg4LENPTU1BTkRfTEVGVDo5MSxDT01NQU5EX1JJR0hUOjkzLENPTU1BTkRfRklSRUZPWDoyMjQsQ09OVFJPTDoxNyxERUxFVEU6NDYsRU5EOjM1LEVOVEVSOjEz''@;'; put 'put ''LEVTQ0FQRToyNyxGMToxMTIsRjI6MTEzLEYzOjExNCxGNDoxMTUsRjU6MTE2LEY2OjExNyxGNzoxMTgsRjg6MTE5LEY5OjEyMCxGMTA6MTIxLEYxMToxMjIsRjEyOjEyMyxGMTM6MTI0LEYxNDoxMjUsRjE1OjEyNixGMTY6MTI3LEYxNzoxMjgsRjE4OjEyOSxGMTk6MTMwLEhPTUU6MzYsSU5T''@;'; put 'put ''RVJUOjQ1LE1FRElBX05FWFQ6MTc2LE1FRElBX1BMQVlfUEFVU0U6MTc5LE1FRElBX1BSRVY6MTc3LE1FRElBX1NUT1A6MTc4LE5VTEw6MCxOVU1fTE9DSzoxNDQsUEFHRV9ET1dOOjM0LFBBR0VfVVA6MzMsUEFVU0U6MTksUEVSSU9EOjE5MCxTQ1JPTExfTE9DSzoxNDUsU0hJRlQ6MTYsU1BB''@;'; put 'put ''Q0U6MzIsVEFCOjksQTo2NSxDOjY3LEQ6NjgsRjo3MCxMOjc2LE86NzksUDo4MCxTOjgzLFY6ODYsWDo4OCxZOjg5LFo6OTB9LHJxZT1bR28uQUxULEdvLkFSUk9XX0RPV04sR28uQVJST1dfTEVGVCxHby5BUlJPV19SSUdIVCxHby5BUlJPV19VUCxHby5BVURJT19ET1dOLEdvLkFVRElPX01V''@;'; put 'put ''VEUsR28uQVVESU9fVVAsR28uQkFDS1NQQUNFLEdvLkNBUFNfTE9DSyxHby5ERUxFVEUsR28uRU5ELEdvLkVOVEVSLEdvLkVTQ0FQRSxHby5GMSxHby5GMixHby5GMyxHby5GNCxHby5GNSxHby5GNixHby5GNyxHby5GOCxHby5GOSxHby5GMTAsR28uRjExLEdvLkYxMixHby5GMTMsR28uRjE0''@;'; put 'put ''LEdvLkYxNSxHby5GMTYsR28uRjE3LEdvLkYxOCxHby5GMTksR28uSE9NRSxHby5JTlNFUlQsR28uTUVESUFfTkVYVCxHby5NRURJQV9QTEFZX1BBVVNFLEdvLk1FRElBX1BSRVYsR28uTUVESUFfU1RPUCxHby5OVUxMLEdvLk5VTV9MT0NLLEdvLlBBR0VfRE9XTixHby5QQUdFX1VQLEdvLlBB''@;'; put 'put ''VVNFLEdvLlNDUk9MTF9MT0NLLEdvLlNISUZULEdvLlRBQl07ZnVuY3Rpb24gTjJlKGMpe3JldHVybiAzMj09PWN8fGM+PTQ4JiZjPD01N3x8Yz49OTYmJmM8PTExMXx8Yz49MTg2JiZjPD0xOTJ8fGM+PTIxOSYmYzw9MjIyfHxjPj0yMjZ8fGM+PTY1JiZjPD05MH1mdW5jdGlvbiB4JChjKXty''@;'; put 'put ''ZXR1cm4gcnFlLmluY2x1ZGVzKGMpfWZ1bmN0aW9uIGlxZShjKXtjb25zdCBsPVtdO3JldHVybiBITygpP2wucHVzaChHby5DT01NQU5EX0xFRlQsR28uQ09NTUFORF9SSUdIVCxHby5DT01NQU5EX0ZJUkVGT1gpOmwucHVzaChHby5DT05UUk9MKSxsLmluY2x1ZGVzKGMpfWZ1bmN0aW9uIFYy''@;'; put 'put ''ZShjKXtyZXR1cm5bR28uQ09OVFJPTCxHby5DT01NQU5EX0xFRlQsR28uQ09NTUFORF9SSUdIVCxHby5DT01NQU5EX0ZJUkVGT1hdLmluY2x1ZGVzKGMpfWZ1bmN0aW9uIGFfKGMsbCl7Y29uc3QgYT1sLnNwbGl0KCJ8Iik7bGV0IGQ9ITE7cmV0dXJuIFluKGEsaD0+e2lmKGM9PT1Hb1toXSly''@;'; put 'put ''ZXR1cm4gZD0hMCwhMX0pLGR9ZnVuY3Rpb24gUjIoYyl7Yy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uRW5hYmxlZD0hMSxjLmNhbmNlbEJ1YmJsZT0hMH1mdW5jdGlvbiBPbShjKXtyZXR1cm4hMT09PWMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvbkVuYWJsZWR9ZnVuY3Rpb24gUG0oYyl7cmV0dXJu''@;'; put 'put ''IDI9PT1jLmJ1dHRvbn1mdW5jdGlvbiBOTyhjKXtyZXR1cm4gMD09PWMuYnV0dG9ufWZ1bmN0aW9uIEIyZShjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIFRvdWNoRXZlbnR9ZnVuY3Rpb24gajJlKGMsbCl7Y29uc3QgYT17eDpjLm9mZnNldFgseTpjLm9mZnNldFl9O2xldCBkPWMudGFyZ2V0O2lm''@;'; put 'put ''KCFmZyhsKXx8ZCE9PWwmJmQuY29udGFpbnMobCkpcmV0dXJuIGE7Zm9yKDtkIT09bDspYS54Kz1kLm9mZnNldExlZnQsYS55Kz1kLm9mZnNldFRvcCxkPWQub2Zmc2V0UGFyZW50O3JldHVybiBhfWZ1bmN0aW9uIHRsKCl7Rm8oY29uc29sZSkmJmNvbnNvbGUud2FybiguLi5hcmd1bWVudHMp''@;'; put 'put ''fWZ1bmN0aW9uIEUkKCl7Rm8oY29uc29sZSkmJmNvbnNvbGUuZXJyb3IoLi4uYXJndW1lbnRzKX1jb25zdCBCNz1bImFmdGVyQ2VsbE1ldGFSZXNldCIsImFmdGVyQ2hhbmdlIiwiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIiwiYmVmb3JlQ29udGV4dE1lbnVTZXRJdGVtcyIsImFm''@;'; put 'put ''dGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnMiLCJiZWZvcmVEcm9wZG93bk1lbnVTZXRJdGVtcyIsImFmdGVyQ29udGV4dE1lbnVIaWRlIiwiYmVmb3JlQ29udGV4dE1lbnVTaG93IiwiYWZ0ZXJDb250ZXh0TWVudVNob3ciLCJhZnRlckNvcHlMaW1pdCIsImJlZm9yZUNyZWF0ZUNvbCIs''@;'; put 'put ''ImFmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2UiLCJhZnRlckNyZWF0ZUNvbCIsImJlZm9yZUNyZWF0ZVJvdyIsImFmdGVyQ3JlYXRlUm93IiwiYWZ0ZXJEZXNlbGVjdCIsImFmdGVyRGVzdHJveSIsImFmdGVyRG9jdW1lbnRLZXlEb3duIiwiYWZ0ZXJEcmF3U2VsZWN0aW9uIiwiYmVmb3JlUmVt''@;'; put 'put ''b3ZlQ2VsbENsYXNzTmFtZXMiLCJhZnRlckdldENlbGxNZXRhIiwiYWZ0ZXJHZXRDb2xIZWFkZXIiLCJhZnRlckdldFJvd0hlYWRlciIsImFmdGVySW5pdCIsImFmdGVyTG9hZERhdGEiLCJhZnRlclVwZGF0ZURhdGEiLCJhZnRlck1vbWVudHVtU2Nyb2xsIiwiYWZ0ZXJPbkNlbGxDb3JuZXJN''@;'; put 'put ''b3VzZURvd24iLCJhZnRlck9uQ2VsbENvcm5lckRibENsaWNrIiwiYWZ0ZXJPbkNlbGxNb3VzZURvd24iLCJhZnRlck9uQ2VsbE1vdXNlVXAiLCJhZnRlck9uQ2VsbENvbnRleHRNZW51IiwiYWZ0ZXJPbkNlbGxNb3VzZU92ZXIiLCJhZnRlck9uQ2VsbE1vdXNlT3V0IiwiYWZ0ZXJSZW1vdmVD''@;'; put 'put ''b2wiLCJhZnRlclJlbW92ZVJvdyIsImJlZm9yZVJlbmRlcmVyIiwiYWZ0ZXJSZW5kZXJlciIsImFmdGVyUm93U2VxdWVuY2VDaGFuZ2UiLCJiZWZvcmVWaWV3cG9ydFNjcm9sbFZlcnRpY2FsbHkiLCJiZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseSIsImJlZm9yZVZpZXdwb3J0U2Ny''@;'; put 'put ''b2xsIiwiYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkiLCJhZnRlclNjcm9sbFZlcnRpY2FsbHkiLCJhZnRlclNjcm9sbCIsImFmdGVyU2VsZWN0aW9uIiwiYWZ0ZXJTZWxlY3Rpb25CeVByb3AiLCJhZnRlclNlbGVjdGlvbkVuZCIsImFmdGVyU2VsZWN0aW9uRW5kQnlQcm9wIiwiYWZ0ZXJTZWxl''@;'; put 'put ''Y3Rpb25Gb2N1c1NldCIsImJlZm9yZVNlbGVjdENvbHVtbnMiLCJhZnRlclNlbGVjdENvbHVtbnMiLCJiZWZvcmVTZWxlY3RSb3dzIiwiYWZ0ZXJTZWxlY3RSb3dzIiwiYWZ0ZXJTZXRDZWxsTWV0YSIsImFmdGVyUmVtb3ZlQ2VsbE1ldGEiLCJhZnRlclNldERhdGFBdENlbGwiLCJhZnRlclNl''@;'; put 'put ''dERhdGFBdFJvd1Byb3AiLCJhZnRlclNldFNvdXJjZURhdGFBdENlbGwiLCJhZnRlclNldFRoZW1lIiwiYWZ0ZXJVcGRhdGVTZXR0aW5ncyIsImFmdGVyVmFsaWRhdGUiLCJiZWZvcmVMYW5ndWFnZUNoYW5nZSIsImFmdGVyTGFuZ3VhZ2VDaGFuZ2UiLCJiZWZvcmVBdXRvZmlsbCIsImFmdGVy''@;'; put 'put ''QXV0b2ZpbGwiLCJiZWZvcmVDZWxsQWxpZ25tZW50IiwiYmVmb3JlQ2hhbmdlIiwiYmVmb3JlQ2hhbmdlUmVuZGVyIiwiYmVmb3JlRHJhd0JvcmRlcnMiLCJiZWZvcmVHZXRDZWxsTWV0YSIsImJlZm9yZVJlbW92ZUNlbGxNZXRhIiwiYmVmb3JlSW5pdCIsImJlZm9yZUluaXRXYWxrb250YWJs''@;'; put 'put ''ZSIsImJlZm9yZUxvYWREYXRhIiwiYmVmb3JlVXBkYXRlRGF0YSIsImJlZm9yZUtleURvd24iLCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLCJiZWZvcmVPbkNlbGxNb3VzZVVwIiwiYmVmb3JlT25DZWxsQ29udGV4dE1lbnUiLCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLCJiZWZvcmVPbkNlbGxN''@;'; put 'put ''b3VzZU91dCIsImJlZm9yZVJlbW92ZUNvbCIsImJlZm9yZVJlbW92ZVJvdyIsImJlZm9yZVZpZXdSZW5kZXIiLCJhZnRlclZpZXdSZW5kZXIiLCJiZWZvcmVSZW5kZXIiLCJhZnRlclJlbmRlciIsImJlZm9yZVJvd1dyYXAiLCJiZWZvcmVDb2x1bW5XcmFwIiwiYmVmb3JlU2V0Q2VsbE1ldGEi''@;'; put 'put ''LCJiZWZvcmVTZWxlY3Rpb25Gb2N1c1NldCIsImJlZm9yZVNldFJhbmdlU3RhcnRPbmx5IiwiYmVmb3JlU2V0UmFuZ2VTdGFydCIsImJlZm9yZVNldFJhbmdlRW5kIiwiYmVmb3JlU2VsZWN0aW9uSGlnaGxpZ2h0U2V0IiwiYmVmb3JlVG91Y2hTY3JvbGwiLCJiZWZvcmVWYWxpZGF0ZSIsImJl''@;'; put 'put ''Zm9yZVZhbHVlUmVuZGVyIiwiY29uc3RydWN0IiwiaW5pdCIsIm1vZGlmeUNvbEhlYWRlciIsIm1vZGlmeUNvbFdpZHRoIiwibW9kaWZ5RmlsdGVyc011bHRpU2VsZWN0VmFsdWUiLCJtb2RpZnlGb2N1c2VkRWxlbWVudCIsIm1vZGlmeVJvd0hlYWRlciIsIm1vZGlmeVJvd0hlaWdodCIsIm1v''@;'; put 'put ''ZGlmeVJvd0hlaWdodEJ5T3ZlcmxheU5hbWUiLCJtb2RpZnlEYXRhIiwibW9kaWZ5U291cmNlRGF0YSIsIm1vZGlmeVJvd0RhdGEiLCJtb2RpZnlHZXRDZWxsQ29vcmRzIiwibW9kaWZ5R2V0Q29vcmRzRWxlbWVudCIsIm1vZGlmeUZvY3VzT25UYWJOYXZpZ2F0aW9uIiwiYmVmb3JlSGlnaGxp''@;'; put 'put ''Z2h0aW5nUm93SGVhZGVyIiwiYmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyIiwicGVyc2lzdGVudFN0YXRlTG9hZCIsInBlcnNpc3RlbnRTdGF0ZVJlc2V0IiwicGVyc2lzdGVudFN0YXRlU2F2ZSIsImJlZm9yZUNvbHVtblNvcnQiLCJhZnRlckNvbHVtblNvcnQiLCJtb2RpZnlBdXRv''@;'; put 'put ''ZmlsbFJhbmdlIiwibW9kaWZ5Q29weWFibGVSYW5nZSIsImJlZm9yZUN1dCIsImFmdGVyQ3V0IiwiYmVmb3JlQ29weSIsImFmdGVyQ29weSIsImJlZm9yZVBhc3RlIiwiYWZ0ZXJQYXN0ZSIsImJlZm9yZUNvbHVtbkZyZWV6ZSIsImFmdGVyQ29sdW1uRnJlZXplIiwiYmVmb3JlQ29sdW1uTW92''@;'; put 'put ''ZSIsImFmdGVyQ29sdW1uTW92ZSIsImJlZm9yZUNvbHVtblVuZnJlZXplIiwiYWZ0ZXJDb2x1bW5VbmZyZWV6ZSIsImJlZm9yZVJvd01vdmUiLCJhZnRlclJvd01vdmUiLCJiZWZvcmVDb2x1bW5SZXNpemUiLCJhZnRlckNvbHVtblJlc2l6ZSIsImJlZm9yZVJvd1Jlc2l6ZSIsImFmdGVyUm93''@;'; put 'put ''UmVzaXplIiwiYWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnMiLCJhZnRlckdldFJvd0hlYWRlclJlbmRlcmVycyIsImJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aCIsImJlZm9yZUZpbHRlciIsImFmdGVyRmlsdGVyIiwiYWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZSIsImFmdGVyTmFt''@;'; put 'put ''ZWRFeHByZXNzaW9uQWRkZWQiLCJhZnRlck5hbWVkRXhwcmVzc2lvblJlbW92ZWQiLCJhZnRlclNoZWV0QWRkZWQiLCJhZnRlclNoZWV0UmVuYW1lZCIsImFmdGVyU2hlZXRSZW1vdmVkIiwibW9kaWZ5Q29sdW1uSGVhZGVySGVpZ2h0IiwibW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWUiLCJiZWZv''@;'; put 'put ''cmVVbmRvIiwiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIiwiYWZ0ZXJVbmRvIiwiYWZ0ZXJVbmRvU3RhY2tDaGFuZ2UiLCJiZWZvcmVSZWRvIiwiYmVmb3JlUmVkb1N0YWNrQ2hhbmdlIiwiYWZ0ZXJSZWRvIiwiYWZ0ZXJSZWRvU3RhY2tDaGFuZ2UiLCJtb2RpZnlSb3dIZWFkZXJXaWR0aCIsIm1v''@;'; put 'put ''ZGlmeVRyYW5zZm9ybUZvY3VzIiwibW9kaWZ5VHJhbnNmb3JtU3RhcnQiLCJtb2RpZnlUcmFuc2Zvcm1FbmQiLCJhZnRlck1vZGlmeVRyYW5zZm9ybUZvY3VzIiwiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1TdGFydCIsImFmdGVyTW9kaWZ5VHJhbnNmb3JtRW5kIiwiYWZ0ZXJWaWV3cG9ydFJvd0Nh''@;'; put 'put ''bGN1bGF0b3JPdmVycmlkZSIsImFmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUiLCJhZnRlclBsdWdpbnNJbml0aWFsaXplZCIsImJlZm9yZUhpZGVSb3dzIiwiYWZ0ZXJIaWRlUm93cyIsImJlZm9yZVVuaGlkZVJvd3MiLCJhZnRlclVuaGlkZVJvd3MiLCJiZWZvcmVIaWRl''@;'; put 'put ''Q29sdW1ucyIsImFmdGVySGlkZUNvbHVtbnMiLCJiZWZvcmVVbmhpZGVDb2x1bW5zIiwiYWZ0ZXJVbmhpZGVDb2x1bW5zIiwiYmVmb3JlVHJpbVJvdyIsImFmdGVyVHJpbVJvdyIsImJlZm9yZVVudHJpbVJvdyIsImFmdGVyVW50cmltUm93IiwiYmVmb3JlRHJvcGRvd25NZW51U2hvdyIsImFm''@;'; put 'put ''dGVyRHJvcGRvd25NZW51U2hvdyIsImFmdGVyRHJvcGRvd25NZW51SGlkZSIsImJlZm9yZUFkZENoaWxkIiwiYWZ0ZXJBZGRDaGlsZCIsImJlZm9yZURldGFjaENoaWxkIiwiYWZ0ZXJEZXRhY2hDaGlsZCIsImJlZm9yZUJlZ2luRWRpdGluZyIsImFmdGVyQmVnaW5FZGl0aW5nIiwiYmVmb3Jl''@;'; put 'put ''TWVyZ2VDZWxscyIsImFmdGVyTWVyZ2VDZWxscyIsImJlZm9yZVVubWVyZ2VDZWxscyIsImFmdGVyVW5tZXJnZUNlbGxzIiwiYWZ0ZXJMaXN0ZW4iLCJhZnRlclVubGlzdGVuIiwiYWZ0ZXJSZWZyZXNoRGltZW5zaW9ucyIsImJlZm9yZVJlZnJlc2hEaW1lbnNpb25zIiwiYmVmb3JlQ29sdW1u''@;'; put 'put ''Q29sbGFwc2UiLCJhZnRlckNvbHVtbkNvbGxhcHNlIiwiYmVmb3JlQ29sdW1uRXhwYW5kIiwiYWZ0ZXJDb2x1bW5FeHBhbmQiLCJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiXSxUJD1uZXcgTWFwKFtbIm1vZGlmeVJvdyIsIjguMC4wIl0sWyJtb2RpZnlDb2wiLCI4LjAuMCJdLFsidW5tb2Rp''@;'; put 'put ''ZnlSb3ciLCI4LjAuMCJdLFsidW5tb2RpZnlDb2wiLCI4LjAuMCJdLFsic2tpcExlbmd0aENhY2hlIiwiOC4wLjAiXSxbImhpZGRlbkNvbHVtbiIsIjguMC4wIl0sWyJoaWRkZW5Sb3ciLCI4LjAuMCJdXSksQSQ9bmV3IE1hcChbW11dKTtmdW5jdGlvbiBrJChjLGwsYSl7ejJlKGMsbCksbC5z''@;'; put 'put ''ZXQoYyxhKX1mdW5jdGlvbiB6MmUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIFUyZShjLGwsYSl7cmV0dXJuIGMuc2V0KFZPKGMsbCks''@;'; put 'put ''YSksYX1mdW5jdGlvbiBVMChjLGwpe3JldHVybiBjLmdldChWTyhjLGwpKX1mdW5jdGlvbiBWTyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVt''@;'; put 'put ''ZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9XygyMzAxMiksXyg4MTI2MCk7dmFyIEVoPW5ldyBXZWFrTWFwLHNfPW5ldyBXZWFrTWFwLEQkPW5ldyBXZWFrTWFwLEkkPW5ldyBXZWFrU2V0O2NsYXNzIFoyZXtjb25zdHJ1Y3RvcigpeyhmdW5jdGlvbiBvcWUoYyxsKXt6MmUo''@;'; put 'put ''YyxsKSxsLmFkZChjKX0pKHRoaXMsSSQpLGskKHRoaXMsRWgsbmV3IE1hcCksayQodGhpcyxzXyxuZXcgTWFwKSxrJCh0aGlzLEQkLG5ldyBTZXQpLEI3LmZvckVhY2gobD0+Vk8oSSQsdGhpcyxXMmUpLmNhbGwodGhpcyxsKSl9Z2V0SG9va3MobCl7dmFyIGE7cmV0dXJuIG51bGwhPT0oYT1V''@;'; put 'put ''MChFaCx0aGlzKS5nZXQobCkpJiZ2b2lkIDAhPT1hP2E6W119YWRkKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9O1UwKEVoLHRoaXMpLmhhcyhsKXx8KFZPKEkkLHRoaXMsVzJlKS5jYWxsKHRoaXMsbCksQjcucHVz''@;'; put 'put ''aChsKSk7Y29uc3QgaD1VMChFaCx0aGlzKS5nZXQobCk7aWYoaC5maW5kKFo9PlouY2FsbGJhY2s9PT1hKSlyZXR1cm47Y29uc3QgZj1OdW1iZXIuaXNJbnRlZ2VyKGQub3JkZXJJbmRleCk/ZC5vcmRlckluZGV4OjAsdj0hIWQucnVuT25jZSxNPSEhZC5pbml0aWFsSG9vaztsZXQgRD0hMTtp''@;'; put 'put ''ZihNKXtjb25zdCBaPWguZmluZChuZT0+bmUuaW5pdGlhbEhvb2spO1omJihaLmNhbGxiYWNrPWEsRD0hMCl9aWYoIUQpe2gucHVzaCh7Y2FsbGJhY2s6YSxvcmRlckluZGV4OmYscnVuT25jZTp2LGluaXRpYWxIb29rOk0sc2tpcDohMX0pO2xldCBaPVUwKEQkLHRoaXMpLmhhcyhsKTshWiYm''@;'; put 'put ''MCE9PWYmJihaPSEwLFUwKEQkLHRoaXMpLmFkZChsKSksWiYmaC5sZW5ndGg+MSYmVTAoRWgsdGhpcykuc2V0KGwsaC50b1NvcnRlZCgobmUsY2UpPT5uZS5vcmRlckluZGV4LWNlLm9yZGVySW5kZXgpKX19aGFzKGwpe3JldHVybiBVMChFaCx0aGlzKS5oYXMobCkmJlUwKEVoLHRoaXMpLmdl''@;'; put 'put ''dChsKS5sZW5ndGg+MH1yZW1vdmUobCxhKXtpZighVTAoRWgsdGhpcykuaGFzKGwpKXJldHVybiExO2NvbnN0IGQ9VTAoRWgsdGhpcykuZ2V0KGwpLGg9ZC5maW5kKGY9PmYuY2FsbGJhY2s9PT1hKTtpZihoKXtsZXQgZj1VMChzXyx0aGlzKS5nZXQobCk7cmV0dXJuIGguc2tpcD0hMCxmKz0x''@;'; put 'put ''LGY+MTAwJiYoVTAoRWgsdGhpcykuc2V0KGwsZC5maWx0ZXIodj0+IXYuc2tpcCkpLGY9MCksVTAoc18sdGhpcykuc2V0KGwsZiksITB9cmV0dXJuITF9ZGVzdHJveSgpe1UwKEVoLHRoaXMpLmNsZWFyKCksVTAoc18sdGhpcykuY2xlYXIoKSxVMmUoRWgsdGhpcyxudWxsKSxVMmUoc18sdGhp''@;'; put 'put ''cyxudWxsKX19ZnVuY3Rpb24gVzJlKGMpe1UwKEVoLHRoaXMpLnNldChjLFtdKSxVMChzXyx0aGlzKS5zZXQoYywwKX1jb25zdCB1cWU9ZmxgVGhlIHBsdWdpbiBob29rICJbaG9va05hbWVdIiB3YXMgcmVtb3ZlZCBpbiBIYW5kc29udGFibGUgW3JlbW92ZWRJblZlcnNpb25dLlx4MjAKICBQ''@;'; put 'put ''bGVhc2UgY29uc3VsdCByZWxlYXNlIG5vdGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9oYW5kc29udGFibGUvaGFuZHNvbnRhYmxlL3JlbGVhc2VzL3RhZy9bcmVtb3ZlZEluVmVyc2lvbl0gdG9ceDIwCiAgbGVhcm4gYWJvdXQgdGhlIG1pZ3JhdGlvbiBwYXRoLmA7Y2xhc3MgQW97Y29uc3RydWN0''@;'; put 'put ''b3IoKXshZnVuY3Rpb24gc3FlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBscWUoYyl7dmFyIGw9ZnVuY3Rpb24gY3FlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxs''@;'; put 'put ''KGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmci''@;'; put 'put ''KTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiZ2xvYmFsQnVja2V0IixuZXcgWjJlKX1zdGF0''@;'; put 'put ''aWMgZ2V0U2luZ2xldG9uKCl7cmV0dXJuIGZ1bmN0aW9uIGhxZSgpe3JldHVybiBkcWV9KCl9Z2V0QnVja2V0KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7cmV0dXJuIGw/KGwucGx1Z2luSG9va0J1Y2tldHx8KGwu''@;'; put 'put ''cGx1Z2luSG9va0J1Y2tldD1uZXcgWjJlKSxsLnBsdWdpbkhvb2tCdWNrZXQpOnRoaXMuZ2xvYmFsQnVja2V0fWFkZChsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsLGg9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3Vt''@;'; put 'put ''ZW50c1szXTp2b2lkIDA7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/WW4oYSxmPT50aGlzLmFkZChsLGYsZCkpOihUJC5oYXMobCkmJnRsKHQkKHVxZSx7aG9va05hbWU6bCxyZW1vdmVkSW5WZXJzaW9uOlQkLmdldChsKX0pKSxBJC5oYXMobCkmJnRsKEEkLmdldChsKSksdGhpcy5nZXRCdWNr''@;'; put 'put ''ZXQoZCkuYWRkKGwsYSx7b3JkZXJJbmRleDpoLHJ1bk9uY2U6ITF9KSksdGhpc31vbmNlKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGwsaD1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMDty''@;'; put 'put ''ZXR1cm4gQXJyYXkuaXNBcnJheShhKT9ZbihhLGY9PnRoaXMub25jZShsLGYsZCkpOnRoaXMuZ2V0QnVja2V0KGQpLmFkZChsLGEse29yZGVySW5kZXg6aCxydW5PbmNlOiEwfSksdGhpc31hZGRBc0ZpeGVkKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVu''@;'; put 'put ''dHNbMl0/YXJndW1lbnRzWzJdOm51bGw7cmV0dXJuIEFycmF5LmlzQXJyYXkoYSk/WW4oYSxoPT50aGlzLmFkZEFzRml4ZWQobCxoLGQpKTp0aGlzLmdldEJ1Y2tldChkKS5hZGQobCxhLHtpbml0aWFsSG9vazohMH0pLHRoaXN9cmVtb3ZlKGwsYSl7cmV0dXJuIHRoaXMuZ2V0QnVja2V0KGFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsKS5yZW1vdmUobCxhKX1oYXMobCl7cmV0dXJuIHRoaXMuZ2V0QnVja2V0KGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsKS5oYXMo''@;'; put 'put ''bCl9cnVuKGwsYSxkLGgsZix2LE0sRCl7e2NvbnN0IFo9dGhpcy5nZXRCdWNrZXQoKS5nZXRIb29rcyhhKSxuZT1aP1oubGVuZ3RoOjA7bGV0IGNlPTA7aWYobmUpZm9yKDtjZTxuZTspe2lmKCFaW2NlXXx8WltjZV0uc2tpcCl7Y2UrPTE7Y29udGludWV9Y29uc3QgYmU9Uk8oWltjZV0uY2Fs''@;'; put 'put ''bGJhY2ssbCxkLGgsZix2LE0sRCk7dm9pZCAwIT09YmUmJihkPWJlKSxaW2NlXSYmWltjZV0ucnVuT25jZSYmdGhpcy5yZW1vdmUoYSxaW2NlXS5jYWxsYmFjayksY2UrPTF9fXtjb25zdCBaPXRoaXMuZ2V0QnVja2V0KGwpLmdldEhvb2tzKGEpLG5lPVo/Wi5sZW5ndGg6MDtsZXQgY2U9MDtp''@;'; put 'put ''ZihuZSlmb3IoO2NlPG5lOyl7aWYoIVpbY2VdfHxaW2NlXS5za2lwKXtjZSs9MTtjb250aW51ZX1jb25zdCBiZT1STyhaW2NlXS5jYWxsYmFjayxsLGQsaCxmLHYsTSxEKTt2b2lkIDAhPT1iZSYmKGQ9YmUpLFpbY2VdJiZaW2NlXS5ydW5PbmNlJiZ0aGlzLnJlbW92ZShhLFpbY2VdLmNhbGxi''@;'; put 'put ''YWNrLGwpLGNlKz0xfX1yZXR1cm4gZH1kZXN0cm95KCl7dGhpcy5nZXRCdWNrZXQoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGwpLmRlc3Ryb3koKX1yZWdpc3RlcihsKXt0aGlzLmlzUmVnaXN0ZXJlZChsKXx8QjcucHVzaChsKX1k''@;'; put 'put ''ZXJlZ2lzdGVyKGwpe3RoaXMuaXNSZWdpc3RlcmVkKGwpJiZCNy5zcGxpY2UoQjcuaW5kZXhPZihsKSwxKX1pc0RlcHJlY2F0ZWQobCl7cmV0dXJuIEEkLmhhcyhsKXx8VCQuaGFzKGwpfWlzUmVnaXN0ZXJlZChsKXtyZXR1cm4gQjcuaW5kZXhPZihsKT49MH1nZXRSZWdpc3RlcmVkKCl7cmV0''@;'; put 'put ''dXJuIEI3fX1jb25zdCBkcWU9bmV3IEFvLFIkPW5ldyBNYXA7ZnVuY3Rpb24gUWYoKXtsZXQgYz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06ImNvbW1vbiI7UiQuaGFzKGMpfHxSJC5zZXQoYyxuZXcgTWFwKTtjb25zdCBsPVIkLmdldChj''@;'; put 'put ''KTtyZXR1cm57cmVnaXN0ZXI6ZnVuY3Rpb24gYShNLEQpe2wuc2V0KE0sRCl9LGdldEl0ZW06ZnVuY3Rpb24gZChNKXtyZXR1cm4gbC5nZXQoTSl9LGhhc0l0ZW06ZnVuY3Rpb24gaChNKXtyZXR1cm4gbC5oYXMoTSl9LGdldE5hbWVzOmZ1bmN0aW9uIGYoKXtyZXR1cm5bLi4ubC5rZXlzKCld''@;'; put 'put ''fSxnZXRWYWx1ZXM6ZnVuY3Rpb24gdigpe3JldHVyblsuLi5sLnZhbHVlcygpXX19fWNvbnN0IEwkPW5ldyBXZWFrTWFwLHtyZWdpc3RlcjpmcWUsZ2V0SXRlbTpZMmUsaGFzSXRlbTpHMmUsZ2V0TmFtZXM6cHFlfT1RZigiZWRpdG9ycyIpO2Z1bmN0aW9uIGdxZShjKXtjb25zdCBsPXt9LGE9''@;'; put 'put ''Yzt0aGlzLmdldENvbnN0cnVjdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIGN9LHRoaXMuZ2V0SW5zdGFuY2U9ZnVuY3Rpb24oZCl7cmV0dXJuIGQuZ3VpZCBpbiBsfHwobFtkLmd1aWRdPW5ldyBhKGQpKSxsW2QuZ3VpZF19LEFvLmdldFNpbmdsZXRvbigpLmFkZCgiYWZ0ZXJEZXN0cm95IixmdW5j''@;'; put 'put ''dGlvbigpe2xbdGhpcy5ndWlkXT1udWxsfSl9ZnVuY3Rpb24gJDJlKGMsbCl7bGV0IGE7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGMpTCQuZ2V0KGMpfHxGZChudWxsLGMpLGE9TCQuZ2V0KGMpO2Vsc2V7aWYoInN0cmluZyIhPXR5cGVvZiBjKXRocm93IEVycm9yKCdPbmx5IHN0cmluZ3MgYW5k''@;'; put 'put ''IGZ1bmN0aW9ucyBjYW4gYmUgcGFzc2VkIGFzICJlZGl0b3IiIHBhcmFtZXRlcicpO2E9WTJlKGMpfWlmKCFhKXRocm93IEVycm9yKGBObyBlZGl0b3IgcmVnaXN0ZXJlZCB1bmRlciBuYW1lICIke2N9ImApO3JldHVybiBhLmdldEluc3RhbmNlKGwpfWZ1bmN0aW9uIEJPKGMpe2lmKCJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiBjKXJldHVybiBjO2lmKCFHMmUoYykpdGhyb3cgRXJyb3IoYE5vIHJlZ2lzdGVyZWQgZWRpdG9yIGZvdW5kIHVuZGVyICIke2N9IiBuYW1lYCk7cmV0dXJuIFkyZShjKS5nZXRDb25zdHJ1Y3RvcigpfWZ1bmN0aW9uIEZkKGMsbCl7YyYmInN0cmluZyIhPXR5cGVvZiBj''@;'; put 'put ''JiYoYz0obD1jKS5FRElUT1JfVFlQRSk7Y29uc3QgYT1uZXcgZ3FlKGwpOyJzdHJpbmciPT10eXBlb2YgYyYmZnFlKGMsYSksTCQuc2V0KGwsYSl9bGV0IGpPPTA7Y29uc3QgTDI9Y2xhc3MgeXFle2NvbnN0cnVjdG9yKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1''@;'; put 'put ''bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7KGZ1bmN0aW9uIG1xZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gdnFlKGMpe3ZhciBsPWZ1bmN0aW9uIGJxZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZv''@;'; put 'put ''aWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6''@;'; put 'put ''TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KSh0aGlzLCJjb250''@;'; put 'put ''ZXh0Iix2b2lkIDApLHRoaXMuY29udGV4dD1sfHx0aGlzLHRoaXMuY29udGV4dC5ldmVudExpc3RlbmVyc3x8KHRoaXMuY29udGV4dC5ldmVudExpc3RlbmVycz1bXSl9YWRkRXZlbnRMaXN0ZW5lcihsLGEsZCl7bGV0IGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNb''@;'; put 'put ''M10mJmFyZ3VtZW50c1szXTtmdW5jdGlvbiBmKHYpe2QuY2FsbCh0aGlzLGZ1bmN0aW9uIF9xZShjKXtjb25zdCBsPWMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uO3JldHVybiBjLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbj1mdW5jdGlvbigpe2wuYXBwbHkodGhpcyksUjIodGhpcyl9LGN9''@;'; put 'put ''KHYpKX1yZXR1cm4gdGhpcy5jb250ZXh0LmV2ZW50TGlzdGVuZXJzLnB1c2goe2VsZW1lbnQ6bCxldmVudDphLGNhbGxiYWNrOmQsY2FsbGJhY2tQcm94eTpmLG9wdGlvbnM6aCxldmVudE1hbmFnZXI6dGhpc30pLGwuYWRkRXZlbnRMaXN0ZW5lcihhLGYsaCksak8rPTEsKCk9Pnt0aGlzLnJl''@;'; put 'put ''bW92ZUV2ZW50TGlzdGVuZXIobCxhLGQpfX1yZW1vdmVFdmVudExpc3RlbmVyKGwsYSxkKXtsZXQgdixoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM10sZj10aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnMubGVuZ3RoO2Zvcig7ZjspaWYo''@;'; put 'put ''Zi09MSx2PXRoaXMuY29udGV4dC5ldmVudExpc3RlbmVyc1tmXSx2LmV2ZW50PT09YSYmdi5lbGVtZW50PT09bCl7aWYoZCYmZCE9PXYuY2FsbGJhY2t8fGgmJnYuZXZlbnRNYW5hZ2VyIT09dGhpcyljb250aW51ZTt0aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnMuc3BsaWNlKGYsMSksdi5l''@;'; put 'put ''bGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodi5ldmVudCx2LmNhbGxiYWNrUHJveHksdi5vcHRpb25zKSxqTy09MX19Y2xlYXJFdmVudHMoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2lmKCF0aGlzLmNvbnRleHQpcmV0''@;'; put 'put ''dXJuO2xldCBhPXRoaXMuY29udGV4dC5ldmVudExpc3RlbmVycy5sZW5ndGg7Zm9yKDthOyl7YS09MTtjb25zdCBkPXRoaXMuY29udGV4dC5ldmVudExpc3RlbmVyc1thXTtsJiZkLmV2ZW50TWFuYWdlciE9PXRoaXN8fCh0aGlzLmNvbnRleHQuZXZlbnRMaXN0ZW5lcnMuc3BsaWNlKGEsMSks''@;'; put 'put ''ZC5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZC5ldmVudCxkLmNhbGxiYWNrUHJveHksZC5vcHRpb25zKSxqTy09MSl9fWNsZWFyKCl7dGhpcy5jbGVhckV2ZW50cygpfWRlc3Ryb3koKXt0aGlzLmNsZWFyRXZlbnRzKCksdGhpcy5jb250ZXh0PW51bGx9ZGVzdHJveVdpdGhPd25FdmVu''@;'; put 'put ''dHNPbmx5KCl7dGhpcy5jbGVhckV2ZW50cyghMCksdGhpcy5jb250ZXh0PW51bGx9ZmlyZUV2ZW50KGwsYSl7bGV0IGQ9bC5kb2N1bWVudCxoPWw7ZHx8KGQ9bC5vd25lckRvY3VtZW50P2wub3duZXJEb2N1bWVudDpsLGg9ZC5kZWZhdWx0Vmlldyk7Y29uc3QgZj17YnViYmxlczohMCxjYW5j''@;'; put 'put ''ZWxhYmxlOiJtb3VzZW1vdmUiIT09YSx2aWV3OmgsZGV0YWlsOjAsc2NyZWVuWDowLHNjcmVlblk6MCxjbGllbnRYOjEsY2xpZW50WToxLGN0cmxLZXk6ITEsYWx0S2V5OiExLHNoaWZ0S2V5OiExLG1ldGFLZXk6ITEsYnV0dG9uOjAscmVsYXRlZFRhcmdldDp2b2lkIDB9O2xldCB2O2QuY3Jl''@;'; put 'put ''YXRlRXZlbnQ/KHY9ZC5jcmVhdGVFdmVudCgiTW91c2VFdmVudHMiKSx2LmluaXRNb3VzZUV2ZW50KGEsZi5idWJibGVzLGYuY2FuY2VsYWJsZSxmLnZpZXcsZi5kZXRhaWwsZi5zY3JlZW5YLGYuc2NyZWVuWSxmLmNsaWVudFgsZi5jbGllbnRZLGYuY3RybEtleSxmLmFsdEtleSxmLnNoaWZ0''@;'; put 'put ''S2V5LGYubWV0YUtleSxmLmJ1dHRvbixmLnJlbGF0ZWRUYXJnZXR8fGQuYm9keS5wYXJlbnROb2RlKSk6dj1kLmNyZWF0ZUV2ZW50T2JqZWN0KCksbC5kaXNwYXRjaEV2ZW50P2wuZGlzcGF0Y2hFdmVudCh2KTpsLmZpcmVFdmVudChgb24ke2F9YCx2KX19O2Z1bmN0aW9uIGo3KGMsbCxhKXty''@;'; put 'put ''ZXR1cm4obD1mdW5jdGlvbiBNcWUoYyl7dmFyIGw9ZnVuY3Rpb24geHFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0''@;'; put 'put ''IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/''@;'; put 'put ''bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBLMmUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJl''@;'; put 'put ''dHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBPJD1uZXcgV2Vha1NldDtjbGFzcyBQJHtjb25zdHJ1Y3RvcihsLGEsZCl7KGZ1bmN0aW9uIENxZShjLGwpeyhm''@;'; put 'put ''dW5jdGlvbiBTcWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0pKHRoaXMsTyQpLGo3KHRoaXMsImhvdCIsdm9pZCAwKSxq''@;'; put 'put ''Nyh0aGlzLCJ0YWJsZU1ldGEiLHZvaWQgMCksajcodGhpcywic2VsZWN0aW9uIix2b2lkIDApLGo3KHRoaXMsImV2ZW50TWFuYWdlciIsdm9pZCAwKSxqNyh0aGlzLCJkZXN0cm95ZWQiLCExKSxqNyh0aGlzLCJhY3RpdmVFZGl0b3IiLHZvaWQgMCksajcodGhpcywiY2VsbFByb3BlcnRpZXMi''@;'; put 'put ''LHZvaWQgMCksdGhpcy5ob3Q9bCx0aGlzLnRhYmxlTWV0YT1hLHRoaXMuc2VsZWN0aW9uPWQsdGhpcy5ldmVudE1hbmFnZXI9bmV3IEwyKGwpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyRG9jdW1lbnRLZXlEb3duIixoPT5LMmUoTyQsdGhpcyxFcWUpLmNhbGwodGhpcyxoKSksdGhpcy5ldmVu''@;'; put 'put ''dE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhvdC5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCJjb21wb3NpdGlvbnN0YXJ0IixoPT57IXRoaXMuZGVzdHJveWVkJiZ0aGlzLmhvdC5pc0xpc3RlbmluZygpJiZ0aGlzLm9wZW5FZGl0b3IoIiIsaCl9KSx0aGlzLmhvdC52aWV3''@;'; put 'put ''Ll93dC51cGRhdGUoIm9uQ2VsbERibENsaWNrIiwoaCxmLHYpPT5LMmUoTyQsdGhpcyxUcWUpLmNhbGwodGhpcyxoLGYsdikpfWdldEFjdGl2ZUVkaXRvcigpe3JldHVybiB0aGlzLmFjdGl2ZUVkaXRvcn1wcmVwYXJlRWRpdG9yKCl7dmFyIGw7aWYodGhpcy5hY3RpdmVFZGl0b3ImJnRoaXMu''@;'; put 'put ''YWN0aXZlRWRpdG9yLmlzV2FpdGluZygpKXJldHVybiB2b2lkIHRoaXMuY2xvc2VFZGl0b3IoITEsITEsWj0+e1omJnRoaXMucHJlcGFyZUVkaXRvcigpfSk7Y29uc3QgYT1udWxsPT09KGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaGln''@;'; put 'put ''aGxpZ2h0O2lmKCFhfHxhLmlzSGVhZGVyKCkpcmV0dXJuO2NvbnN0e3JvdzpkLGNvbDpofT1hLGY9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUdldENlbGxDb29yZHMiLGQsaCwhMSwibWV0YSIpO2xldCB2PWQsTT1oO2lmKEFycmF5LmlzQXJyYXkoZikmJihbdixNXT1mKSx0aGlzLmNlbGxQ''@;'; put 'put ''cm9wZXJ0aWVzPXRoaXMuaG90LmdldENlbGxNZXRhKHYsTSksIXRoaXMuaXNDZWxsRWRpdGFibGUoKSlyZXR1cm4gdm9pZCB0aGlzLmNsZWFyQWN0aXZlRWRpdG9yKCk7Y29uc3QgRD10aGlzLmhvdC5nZXRDZWxsKGQsaCwhMCk7aWYoRCl7Y29uc3QgWj10aGlzLmhvdC5nZXRDZWxsRWRpdG9y''@;'; put 'put ''KHRoaXMuY2VsbFByb3BlcnRpZXMpLG5lPXRoaXMuaG90LmNvbFRvUHJvcChNKSxjZT10aGlzLmhvdC5nZXRTb3VyY2VEYXRhQXRDZWxsKHRoaXMuaG90LnRvUGh5c2ljYWxSb3codiksTSk7dGhpcy5hY3RpdmVFZGl0b3I9JDJlKFosdGhpcy5ob3QpLHRoaXMuYWN0aXZlRWRpdG9yLnByZXBh''@;'; put 'put ''cmUoZCxoLG5lLEQsY2UsdGhpcy5jZWxsUHJvcGVydGllcyl9fWlzRWRpdG9yT3BlbmVkKCl7cmV0dXJuIHRoaXMuYWN0aXZlRWRpdG9yJiZ0aGlzLmFjdGl2ZUVkaXRvci5pc09wZW5lZCgpfW9wZW5FZGl0b3IobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3Vt''@;'; put 'put ''ZW50c1syXSYmYXJndW1lbnRzWzJdO2lmKCF0aGlzLmlzQ2VsbEVkaXRhYmxlKCkpcmV0dXJuIHZvaWQgdGhpcy5jbGVhckFjdGl2ZUVkaXRvcigpO2NvbnN0IGg9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtsZXQgZj10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQmVnaW5FZGl0''@;'; put 'put ''aW5nIixoLmhpZ2hsaWdodC5yb3csaC5oaWdobGlnaHQuY29sLGwsYSxkKTthIGluc3RhbmNlb2YgTW91c2VFdmVudCYmImJvb2xlYW4iIT10eXBlb2YgZiYmKGY9MD09PXRoaXMuaG90LnNlbGVjdGlvbi5nZXRMYXllckxldmVsKCkmJmguaXNTaW5nbGUoKSksITEhPT1mPyh0aGlzLmFjdGl2''@;'; put 'put ''ZUVkaXRvcnx8KHRoaXMuaG90LnNjcm9sbFRvRm9jdXNlZENlbGwoKSx0aGlzLnByZXBhcmVFZGl0b3IoKSksdGhpcy5hY3RpdmVFZGl0b3ImJihkJiZ0aGlzLmFjdGl2ZUVkaXRvci5lbmFibGVGdWxsRWRpdE1vZGUoKSx0aGlzLmFjdGl2ZUVkaXRvci5iZWdpbkVkaXRpbmcobCxhKSkpOnRo''@;'; put 'put ''aXMuY2xlYXJBY3RpdmVFZGl0b3IoKX1jbG9zZUVkaXRvcihsLGEsZCl7dGhpcy5hY3RpdmVFZGl0b3I/dGhpcy5hY3RpdmVFZGl0b3IuZmluaXNoRWRpdGluZyhsLGEsZCk6ZCYmZCghMSl9Y2xvc2VFZGl0b3JBbmRTYXZlQ2hhbmdlcyhsKXt0aGlzLmNsb3NlRWRpdG9yKCExLGwpfWNsb3Nl''@;'; put 'put ''RWRpdG9yQW5kUmVzdG9yZU9yaWdpbmFsVmFsdWUobCl7dGhpcy5jbG9zZUVkaXRvcighMCxsKX1jbGVhckFjdGl2ZUVkaXRvcigpe3RoaXMuYWN0aXZlRWRpdG9yPXZvaWQgMH1pc0NlbGxFZGl0YWJsZSgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbCly''@;'; put 'put ''ZXR1cm4hMTtjb25zdCBhPXRoaXMuaG90LmdldENlbGxFZGl0b3IodGhpcy5jZWxsUHJvcGVydGllcykse3JvdzpkLGNvbDpofT1sLmhpZ2hsaWdodCx7cm93SW5kZXhNYXBwZXI6Zixjb2x1bW5JbmRleE1hcHBlcjp2fT10aGlzLmhvdCxNPWYuaXNIaWRkZW4odGhpcy5ob3QudG9QaHlzaWNh''@;'; put 'put ''bFJvdyhkKSl8fHYuaXNIaWRkZW4odGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihoKSk7cmV0dXJuISh0aGlzLmNlbGxQcm9wZXJ0aWVzLnJlYWRPbmx5fHwhYXx8TSl9bW92ZVNlbGVjdGlvbkFmdGVyRW50ZXIobCl7Y29uc3QgYT17Li4uImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMudGFibGVN''@;'; put 'put ''ZXRhLmVudGVyTW92ZXM/dGhpcy50YWJsZU1ldGEuZW50ZXJNb3ZlcyhsKTp0aGlzLnRhYmxlTWV0YS5lbnRlck1vdmVzfTtsLnNoaWZ0S2V5JiYoYS5yb3c9LWEucm93LGEuY29sPS1hLmNvbCksdGhpcy5ob3Quc2VsZWN0aW9uLmlzTXVsdGlwbGUoKT90aGlzLnNlbGVjdGlvbi50cmFuc2Zv''@;'; put 'put ''cm1Gb2N1cyhhLnJvdyxhLmNvbCk6dGhpcy5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoYS5yb3csYS5jb2wsITApfWRlc3Ryb3koKXt0aGlzLmRlc3Ryb3llZD0hMCx0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCl9fWZ1bmN0aW9uIEVxZShjKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVj''@;'; put 'put ''dGVkUmFuZ2VMYXN0KCk7aWYoIXRoaXMuaG90LmlzTGlzdGVuaW5nKCl8fCFsfHxsLmhpZ2hsaWdodC5pc0hlYWRlcigpfHxPbShjKSlyZXR1cm47Y29uc3R7a2V5Q29kZTphfT1jLGQ9KGMuY3RybEtleXx8Yy5tZXRhS2V5KSYmIWMuYWx0S2V5OyghdGhpcy5hY3RpdmVFZGl0b3J8fHRoaXMu''@;'; put 'put ''YWN0aXZlRWRpdG9yJiYhdGhpcy5hY3RpdmVFZGl0b3IuaXNXYWl0aW5nKCkpJiYheCQoYSkmJiFWMmUoYSkmJiFkJiYhdGhpcy5pc0VkaXRvck9wZW5lZCgpJiZ0aGlzLm9wZW5FZGl0b3IoIiIsYyl9ZnVuY3Rpb24gVHFlKGMsbCl7bC5pc0NlbGwoKSYmdGhpcy5vcGVuRWRpdG9yKG51bGws''@;'; put 'put ''YywhMCl9Y29uc3QgcTJlPW5ldyBXZWFrTWFwO1AkLmdldEluc3RhbmNlPWZ1bmN0aW9uKGMsbCxhKXtsZXQgZD1xMmUuZ2V0KGMpO3JldHVybiBkfHwoZD1uZXcgUCQoYyxsLGEpLHEyZS5zZXQoYyxkKSksZH07Y29uc3QgQXFlPVAkO2Z1bmN0aW9uIE1FKGMsbCxhKXtYMmUoYyxsKSxsLnNl''@;'; put 'put ''dChjLGEpfWZ1bmN0aW9uIFgyZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gdmMoYyxsKXtyZXR1cm4gYy5nZXQoZ2coYyxsKSl9ZnVu''@;'; put 'put ''Y3Rpb24geEUoYyxsLGEpe3JldHVybiBjLnNldChnZyhjLGwpLGEpLGF9ZnVuY3Rpb24gZ2coYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVu''@;'; put 'put ''dCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IGxfPU9iamVjdC5mcmVlemUoe0NFTEw6ImNlbGwiLE1JWEVEOiJtaXhlZCJ9KTt2YXIgZjA9bmV3IFdlYWtNYXAsek89bmV3IFdlYWtNYXAsVU89bmV3IFdlYWtNYXAsWk89bmV3IFdlYWtNYXAsV089bmV3IFdlYWtNYXAs''@;'; put 'put ''Rm09bmV3IFdlYWtTZXQ7Y2xhc3MgRHFle2NvbnN0cnVjdG9yKGwpe3ZhciBhPXRoaXM7KGZ1bmN0aW9uIGtxZShjLGwpe1gyZShjLGwpLGwuYWRkKGMpfSkodGhpcyxGbSksTUUodGhpcyxmMCx2b2lkIDApLE1FKHRoaXMsek8sdm9pZCAwKSxNRSh0aGlzLFVPLDEpLE1FKHRoaXMsWk8sbnVs''@;'; put 'put ''bCksTUUodGhpcyxXTyxuZXcgTWFwKTtjb25zdCBkPWwuZ2V0U2V0dGluZ3MoKTt4RShmMCx0aGlzLGwpLHhFKHpPLHRoaXMsZC5pbWVGYXN0RWRpdD9sXy5NSVhFRDpsXy5DRUxMKSx2YyhmMCx0aGlzKS5hZGRIb29rKCJhZnRlclVwZGF0ZVNldHRpbmdzIixmdW5jdGlvbigpe2Zvcih2YXIg''@;'; put 'put ''aD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBnZyhGbSxhLFJxZSkuY2FsbChhLC4uLmYpfSksdmMoZjAsdGhpcykuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb24iLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGdnKEZtLGEsSjJlKS5jYWxsKGEsLi4uZil9KSx2YyhmMCx0aGlzKS5hZGRIb29rKCJhZnRlclNlbGVjdGlvbkZvY3VzU2V0IixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBnZyhGbSxhLEoyZSkuY2FsbChhLC4uLmYpfSksdmMoZjAsdGhpcykuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb25FbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgs''@;'; put 'put ''Zj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGdnKEZtLGEsSXFlKS5jYWxsKGEsLi4uZil9KX1nZXRGb2N1c01vZGUoKXtyZXR1cm4gdmMoek8sdGhpcyl9c2V0Rm9jdXNNb2RlKGwpe09iamVjdC52YWx1ZXMobF8pLmluY2x1ZGVzKGwpP3hFKHpP''@;'; put 'put ''LHRoaXMsbCk6dGwoYCIke2x9IiBpcyBub3QgYSB2YWxpZCBmb2N1cyBtb2RlLmApfWdldFJlZm9jdXNEZWxheSgpe3JldHVybiB2YyhVTyx0aGlzKX1zZXRSZWZvY3VzRGVsYXkobCl7eEUoVU8sdGhpcyxsKX1zZXRSZWZvY3VzRWxlbWVudEdldHRlcihsKXt4RShaTyx0aGlzLGwpfWdldFJl''@;'; put 'put ''Zm9jdXNFbGVtZW50KCl7dmFyIGw7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHZjKFpPLHRoaXMpP3ZjKFpPLHRoaXMpLmNhbGwodGhpcyk6bnVsbD09PShsPXZjKGYwLHRoaXMpLmdldEFjdGl2ZUVkaXRvcigpKXx8dm9pZCAwPT09bD92b2lkIDA6bC5URVhUQVJFQX1mb2N1c09uSGlnaGxp''@;'; put 'put ''Z2h0ZWRDZWxsKGwpe2NvbnN0IGE9ZD0+e3ZhciBoLGY7Y29uc3Qgdj1udWxsPT09KGg9dmMoZjAsdGhpcykuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWg/dm9pZCAwOmguaGlnaGxpZ2h0O2lmKCF2KXJldHVybjtsZXQgTT12YyhmMCx0aGlzKS5ydW5Ib29rcygibW9kaWZ5''@;'; put 'put ''Rm9jdXNlZEVsZW1lbnQiLHYucm93LHYuY29sLGQpO2ZnKE0pfHwoTT1kKSxNJiYobnVsbD09PShmPXZjKGYwLHRoaXMpLmdldEFjdGl2ZUVkaXRvcigpKXx8dm9pZCAwPT09Znx8IWYuaXNPcGVuZWQoKSkmJk0uZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KX07bD9hKGwpOmdnKEZtLHRoaXMs''@;'; put 'put ''RiQpLmNhbGwodGhpcyxkPT5hKGQpKX1yZWZvY3VzVG9FZGl0b3JUZXh0YXJlYSgpe3ZhciBsO2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp2YyhVTyx0aGlzKTt2YXIgZCxoOyF2YyhmMCx0aGlzKS5nZXRTZXR0aW5ncygpLmlt''@;'; put 'put ''ZUZhc3RFZGl0fHxudWxsIT09KGw9dmMoZjAsdGhpcykuZ2V0QWN0aXZlRWRpdG9yKCkpJiZ2b2lkIDAhPT1sJiZsLmlzT3BlbmVkKCl8fChudWxsPT09KGQ9dmMoZjAsdGhpcykuZ2V0QWN0aXZlRWRpdG9yKCkpfHx2b2lkIDA9PT1kfHxudWxsPT09KGg9ZC5yZWZyZXNoVmFsdWUpfHx2b2lk''@;'; put 'put ''IDA9PT1ofHxoLmNhbGwoZCksdmMoV08sdGhpcykuaGFzKGEpfHx2YyhXTyx0aGlzKS5zZXQoYSxJTygoKT0+e3ZhciBmO251bGw9PT0oZj10aGlzLmdldFJlZm9jdXNFbGVtZW50KCkpfHx2b2lkIDA9PT1mfHxmLnNlbGVjdCgpfSxhKSksdmMoV08sdGhpcykuZ2V0KGEpKCkpfX1mdW5jdGlv''@;'; put 'put ''biBGJChjKXt2YXIgbDtjb25zdCBhPW51bGw9PT0obD12YyhmMCx0aGlzKS5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09bD92b2lkIDA6bC5oaWdobGlnaHQ7aWYoIWF8fCF2YyhmMCx0aGlzKS5zZWxlY3Rpb24uaXNDZWxsVmlzaWJsZShhKSlyZXR1cm4gdm9pZCBjKG51bGwp''@;'; put 'put ''O2NvbnN0IGQ9dmMoZjAsdGhpcykuZ2V0Q2VsbChhLnJvdyxhLmNvbCwhMCk7bnVsbD09PWQ/dmMoZjAsdGhpcykuYWRkSG9va09uY2UoImFmdGVyU2Nyb2xsIiwoKT0+e2ModmMoZjAsdGhpcykuZ2V0Q2VsbChhLnJvdyxhLmNvbCwhMCkpfSk6YyhkKX1mdW5jdGlvbiBKMmUoKXtnZyhGbSx0''@;'; put 'put ''aGlzLEYkKS5jYWxsKHRoaXMsYz0+e2NvbnN0e2FjdGl2ZUVsZW1lbnQ6bH09dmMoZjAsdGhpcykucm9vdERvY3VtZW50O2wmJkRPKGwpJiZsLmJsdXIoKSx0aGlzLmZvY3VzT25IaWdobGlnaHRlZENlbGwoYyl9KX1mdW5jdGlvbiBJcWUoKXtnZyhGbSx0aGlzLEYkKS5jYWxsKHRoaXMsYz0+''@;'; put 'put ''e3RoaXMuZ2V0Rm9jdXNNb2RlKCk9PT1sXy5NSVhFRCYmIlREIj09PWM/Lm5vZGVOYW1lJiZ0aGlzLnJlZm9jdXNUb0VkaXRvclRleHRhcmVhKCl9KX1mdW5jdGlvbiBScWUoYyl7ImJvb2xlYW4iPT10eXBlb2YgYy5pbWVGYXN0RWRpdCYmdGhpcy5zZXRGb2N1c01vZGUoYy5pbWVGYXN0RWRp''@;'; put 'put ''dD9sXy5NSVhFRDpsXy5DRUxMKX1fKDE2MjI5KSxfKDQ0MjEzKTtjb25zdCBRMmU9eyImbmJzcDsiOiIgIiwiJmFtcDsiOiImIiwiJmx0OyI6IjwiLCImZ3Q7IjoiPiJ9LExxZT1uZXcgUmVnRXhwKE9iamVjdC5rZXlzKFEyZSkubWFwKGM9PmAoJHtjfSlgKS5qb2luKCJ8IiksImdpIik7ZnVu''@;'; put 'put ''Y3Rpb24gSCQoYyl7Y29uc3QgbD1jLmhhc0NvbEhlYWRlcnMoKSxhPWMuaGFzUm93SGVhZGVycygpLGQ9W2w/LTE6MCxhPy0xOjAsYy5jb3VudFJvd3MoKS0xLGMuY291bnRDb2xzKCktMV0saD1jLmdldERhdGEoLi4uZCksZj1oLmxlbmd0aCx2PWY+MD9oWzBdLmxlbmd0aDowLE09WyI8dGFi''@;'; put 'put ''bGU+IiwiPC90YWJsZT4iXSxEPWw/WyI8dGhlYWQ+IiwiPC90aGVhZD4iXTpbXSxaPVsiPHRib2R5PiIsIjwvdGJvZHk+Il0sbmU9YT8xOjAsY2U9bD8xOjA7Zm9yKGxldCBiZT0wO2JlPGY7YmUrPTEpe2NvbnN0IEVlPWwmJjA9PT1iZSxCZT1bXTtmb3IobGV0IG50PTA7bnQ8djtudCs9MSl7''@;'; put 'put ''Y29uc3QgbHQ9IUVlJiZhJiYwPT09bnQ7bGV0IG10PSIiO2lmKEVlKW10PWA8dGg+JHtjLmdldENvbEhlYWRlcihudC1uZSl9PC90aD5gO2Vsc2UgaWYobHQpbXQ9YDx0aD4ke2MuZ2V0Um93SGVhZGVyKGJlLWNlKX08L3RoPmA7ZWxzZXtjb25zdCBKdD1oW2JlXVtudF0se2hpZGRlbjp5bixy''@;'; put 'put ''b3dzcGFuOkNuLGNvbHNwYW46dG59PWMuZ2V0Q2VsbE1ldGEoYmUtY2UsbnQtbmUpO2lmKCF5bil7Y29uc3QgeG49W107aWYoQ24mJnhuLnB1c2goYHJvd3NwYW49IiR7Q259ImApLHRuJiZ4bi5wdXNoKGBjb2xzcGFuPSIke3RufSJgKSxVYyhKdCkpbXQ9YDx0ZCAke3huLmpvaW4oIiAiKX0+''@;'; put 'put ''PC90ZD5gO2Vsc2V7Y29uc3QgUW49SnQudG9TdHJpbmcoKS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKS5yZXBsYWNlKC8oPGJyKFxzKnxcLyk+KFxyXG58XG4pP3xcclxufFxuKS9nLCI8YnI+XHJcbiIpLnJlcGxhY2UoL1x4MjAvZ2ksIiZuYnNwOyIpLnJlcGxh''@;'; put 'put ''Y2UoL1x0L2dpLCImIzk7Iik7bXQ9YDx0ZCAke3huLmpvaW4oIiAiKX0+JHtRbn08L3RkPmB9fX1CZS5wdXNoKG10KX1jb25zdCBxZT1bIjx0cj4iLC4uLkJlLCI8L3RyPiJdLmpvaW4oIiIpO0VlP0Quc3BsaWNlKDEsMCxxZSk6Wi5zcGxpY2UoLTEsMCxxZSl9cmV0dXJuIE0uc3BsaWNlKDEs''@;'; put 'put ''MCxELmpvaW4oIiIpLFouam9pbigiIikpLE0uam9pbigiIil9ZnVuY3Rpb24gTiQoYyl7Y29uc3QgbD1jLmxlbmd0aCxhPVsiPHRhYmxlPiJdO2ZvcihsZXQgZD0wO2Q8bDtkKz0xKXtjb25zdCBoPWNbZF0sZj1oLmxlbmd0aCx2PVtdOzA9PT1kJiZhLnB1c2goIjx0Ym9keT4iKTtmb3IobGV0''@;'; put 'put ''IE09MDtNPGY7TSs9MSl7Y29uc3QgRD1oW01dLFo9VWMoRCk/IiI6RC50b1N0cmluZygpLnJlcGxhY2UoLyYvZywiJmFtcDsiKS5yZXBsYWNlKC88L2csIiZsdDsiKS5yZXBsYWNlKC8+L2csIiZndDsiKS5yZXBsYWNlKC8oPGJyKFxzKnxcLyk+KFxyXG58XG4pP3xcclxufFxuKS9nLCI8YnI+''@;'; put 'put ''XHJcbiIpLnJlcGxhY2UoL1x4MjB7Mix9L2dpLG5lPT5gPHNwYW4gc3R5bGU9Im1zby1zcGFjZXJ1bjogeWVzIj4keyImbmJzcDsiLnJlcGVhdChuZS5sZW5ndGgtMSl9IDwvc3Bhbj5gKS5yZXBsYWNlKC9cdC9naSwiJiM5OyIpO3YucHVzaChgPHRkPiR7Wn08L3RkPmApfWEucHVzaCgiPHRy''@;'; put 'put ''PiIsLi4udiwiPC90cj4iKSxkKzE9PT1sJiZhLnB1c2goIjwvdGJvZHk+Iil9cmV0dXJuIGEucHVzaCgiPC90YWJsZT4iKSxhLmpvaW4oIiIpfWZ1bmN0aW9uIGVmZShjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06ZG9jdW1l''@;'; put 'put ''bnQ7Y29uc3QgYT17fSxkPWwuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGg9bC5jcmVhdGVFbGVtZW50KCJkaXYiKTtkLmFwcGVuZENoaWxkKGgpO2xldCBmPWM7aWYoInN0cmluZyI9PXR5cGVvZiBmKXtjb25zdCBKdD1mLnJlcGxhY2UoLzx0ZFxiW14+XSo/PihbXHNcU10qPyk8XC9ccyp0''@;'; put 'put ''ZD4vZyx5bj0+e2NvbnN0IENuPXluLm1hdGNoKC88dGRcYltePl0qPz4vZylbMF07cmV0dXJuYCR7Q259JHt5bi5zdWJzdHJpbmcoQ24ubGVuZ3RoLHluLmxhc3RJbmRleE9mKCI8IikpLnRyaW0oKS5yZXBsYWNlQWxsKC9cblxzKy9nLCIgIikucmVwbGFjZUFsbCgvPHAuKj8+L2csIlxuIiku''@;'; put 'put ''cmVwbGFjZSgiXG4iLCIiKS5yZXBsYWNlQWxsKC88XC8oLiopPlxzKyQvZ20sIjwvJDE+IikucmVwbGFjZSgvKDwoPyFicikoW14+XSspPikvZ2ksIiIpLnJlcGxhY2VBbGwoL14mbmJzcDskL2dtLCIiKX08L3RkPmB9KTtoLmluc2VydEFkamFjZW50SFRNTCgiYWZ0ZXJiZWdpbiIsYCR7SnR9''@;'; put 'put ''YCksZj1oLnF1ZXJ5U2VsZWN0b3IoInRhYmxlIil9aWYoIWZ8fCFmdW5jdGlvbiBPcWUoYyl7cmV0dXJuIlRBQkxFIj09PShjJiZjLm5vZGVOYW1lfHwiIil9KGYpKXJldHVybjtjb25zdCB2PWgucXVlcnlTZWxlY3RvcignbWV0YVtuYW1lJD0iZW5lcmF0b3IiXScpLE09bnVsbCE9PWYucXVl''@;'; put 'put ''cnlTZWxlY3RvcigidGJvZHkgdGgiKSxEPWYucXVlcnlTZWxlY3RvcigidHIiKSxaPUQ/QXJyYXkuZnJvbShELmNlbGxzKS5yZWR1Y2UoKEp0LHluKT0+SnQreW4uY29sU3BhbiwwKS0oTT8xOjApOjAsbmU9Zi50Rm9vdCYmQXJyYXkuZnJvbShmLnRGb290LnJvd3MpfHxbXSxjZT1bXTtsZXQg''@;'; put 'put ''YmU9ITEsRWU9MCxCZT0wO2lmKGYudEhlYWQpe2NvbnN0IEp0PUFycmF5LmZyb20oZi50SGVhZC5yb3dzKS5maWx0ZXIoeW49Pntjb25zdCBDbj1udWxsIT09eW4ucXVlcnlTZWxlY3RvcigidGQiKTtyZXR1cm4gQ24mJmNlLnB1c2goeW4pLCFDbn0pO0VlPUp0Lmxlbmd0aCxiZT1FZT4wLEVl''@;'; put 'put ''PjE/YS5uZXN0ZWRIZWFkZXJzPUFycmF5LmZyb20oSnQpLnJlZHVjZSgoeW4sQ24pPT57Y29uc3QgdG49QXJyYXkuZnJvbShDbi5jZWxscykucmVkdWNlKCh4bixRbix5aSk9PntpZihNJiYwPT09eWkpcmV0dXJuIHhuO2NvbnN0e2NvbFNwYW46eXIsaW5uZXJIVE1MOkdufT1RbjtyZXR1cm4g''@;'; put 'put ''eG4ucHVzaCh5cj4xP3tsYWJlbDpHbixjb2xzcGFuOnlyfTpHbikseG59LFtdKTtyZXR1cm4geW4ucHVzaCh0bikseW59LFtdKTpiZSYmKGEuY29sSGVhZGVycz1BcnJheS5mcm9tKEp0WzBdLmNoaWxkcmVuKS5yZWR1Y2UoKHluLENuLHRuKT0+KE0mJjA9PT10bnx8eW4ucHVzaChDbi5pbm5l''@;'; put 'put ''ckhUTUwpLHluKSxbXSkpfWNlLmxlbmd0aCYmKGEuZml4ZWRSb3dzVG9wPWNlLmxlbmd0aCksbmUubGVuZ3RoJiYoYS5maXhlZFJvd3NCb3R0b209bmUubGVuZ3RoKTtjb25zdCBxZT1bLi4uY2UsLi4uQXJyYXkuZnJvbShmLnRCb2RpZXMpLnJlZHVjZSgoSnQseW4pPT4oSnQucHVzaCguLi5B''@;'; put 'put ''cnJheS5mcm9tKHluLnJvd3MpKSxKdCksW10pLC4uLm5lXTtCZT1xZS5sZW5ndGg7Y29uc3QgbnQ9bmV3IEFycmF5KEJlKTtmb3IobGV0IEp0PTA7SnQ8QmU7SnQrKyludFtKdF09bmV3IEFycmF5KFopO2NvbnN0IGx0PVtdLG10PVtdO2ZvcihsZXQgSnQ9MDtKdDxCZTtKdCsrKXtjb25zdCBD''@;'; put 'put ''bj1BcnJheS5mcm9tKHFlW0p0XS5jZWxscyksdG49Q24ubGVuZ3RoO2ZvcihsZXQgeG49MDt4bjx0bjt4bisrKXtjb25zdCBRbj1Dblt4bl0se25vZGVOYW1lOnlpLGlubmVySFRNTDp5cixyb3dTcGFuOkduLGNvbFNwYW46aWl9PVFuLF9pPW50W0p0XS5maW5kSW5kZXgoUG49PnZvaWQgMD09''@;'; put 'put ''PVBuKTtpZigiVEQiPT09eWkpe2lmKEduPjF8fGlpPjEpe2ZvcihsZXQgSXI9SnQ7SXI8SnQrR247SXIrKylpZihJcjxCZSlmb3IobGV0ICRyPV9pOyRyPF9pK2lpOyRyKyspbnRbSXJdWyRyXT1udWxsO2NvbnN0IGpyPVFuLmdldEF0dHJpYnV0ZSgic3R5bGUiKTtqciYmanIuaW5jbHVkZXMo''@;'; put 'put ''Im1zby1pZ25vcmU6Y29sc3BhbiIpfHxsdC5wdXNoKHtjb2w6X2kscm93Okp0LHJvd3NwYW46R24sY29sc3BhbjppaX0pfWxldCBQbj0iIjtQbj12JiYvZXhjZWwvZ2kudGVzdCh2LmNvbnRlbnQpP3lyLnJlcGxhY2UoL1tcclxuXVtceDIwXXswLDJ9L2csIiAiKS5yZXBsYWNlKC88YnIoXHMq''@;'; put 'put ''fFwvKT5bXHJcbl0/W1x4MjBdezAsM30vZ2ltLCJcclxuIik6eXIucmVwbGFjZSgvPGJyKFxzKnxcLyk+W1xyXG5dPy9naW0sIlxyXG4iKSxudFtKdF1bX2ldPVBuLnJlcGxhY2UoTHFlLGpyPT5RMmVbanJdKX1lbHNlIG10LnB1c2goeXIpfX1yZXR1cm4gbHQubGVuZ3RoJiYoYS5tZXJnZUNl''@;'; put 'put ''bGxzPWx0KSxtdC5sZW5ndGgmJihhLnJvd0hlYWRlcnM9bXQpLG50Lmxlbmd0aCYmKGEuZGF0YT1udCksYX1mdW5jdGlvbiB2MShjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06W107Y29uc3QgYT10eXBlb2YgYztpZigibnVt''@;'; put 'put ''YmVyIj09PWEpcmV0dXJuIWlzTmFOKGMpJiZpc0Zpbml0ZShjKTtpZigic3RyaW5nIj09PWEpe2lmKDA9PT1jLmxlbmd0aClyZXR1cm4hMTtpZigxPT09Yy5sZW5ndGgpcmV0dXJuL1xkLy50ZXN0KGMpO2NvbnN0IGQ9QXJyYXkuZnJvbShuZXcgU2V0KFsiLiIsLi4ubF0pKS5tYXAoaD0+YFxc''@;'; put 'put ''JHtofWApLmpvaW4oInwiKTtyZXR1cm4gbmV3IFJlZ0V4cChgXlsrLV0/KCgoJHtkfSk/XFxkKygoJHtkfSlcXGQrKT8oZVsrLV0/XFxkKyk/KXwoMHhbYS1mXFxkXSspKSRgLCJpIikudGVzdChjLnRyaW0oKSl9cmV0dXJuIm9iamVjdCI9PT1hJiYhKCFjfHwibnVtYmVyIiE9dHlwZW9mIGMu''@;'; put 'put ''dmFsdWVPZigpfHxjIGluc3RhbmNlb2YgRGF0ZSl9ZnVuY3Rpb24gdGZlKGMpe3JldHVybiB2MShjLFsiLCJdKX1mdW5jdGlvbiAkbyhjLGwsYSl7bGV0IGQ9LTE7Zm9yKCJmdW5jdGlvbiI9PXR5cGVvZiBsPyhhPWwsbD1jKTpkPWMtMTsrK2Q8PWwmJiExIT09YShkKTspO31mdW5jdGlvbiBW''@;'; put 'put ''JChjLGwsYSl7bGV0IGQ9YysxO2ZvcigiZnVuY3Rpb24iPT10eXBlb2YgbCYmKGE9bCxsPTApOy0tZD49bCYmITEhPT1hKGQpOyk7fWZ1bmN0aW9uIEIkKGMsbCl7cmV0dXJuIGw9cGFyc2VJbnQobC50b1N0cmluZygpLnJlcGxhY2UoIiUiLCIiKSwxMCksbD1pc05hTihsKT8wOmwscGFyc2VJ''@;'; put 'put ''bnQoYypsLzEwMCwxMCl9ZnVuY3Rpb24gQXMoYyxsLGEpe3JldHVybiBNYXRoLm1pbihjLGwpPT09Yz9sOk1hdGgubWF4KGMsYSk9PT1jP2E6Y31jb25zdCBuZmU9bmV3IE1hcChbWyJhc2MiLFstMSwxXV0sWyJkZXNjIixbMSwtMV1dXSksRnFlPWM9PmBUaGUgcHJpb3JpdHkgJyR7Y30nIGlz''@;'; put 'put ''IGFscmVhZHkgZGVjbGFyZWQgaW4gYSBtYXAuYCxIcWU9Yz0+YFRoZSBwcmlvcml0eSAnJHtjfScgaXMgbm90IGEgbnVtYmVyLmAsVnFlPWM9PmBUaGUgaWQgJyR7Y30nIGlzIGFscmVhZHkgZGVjbGFyZWQgaW4gYSBtYXAuYDtmdW5jdGlvbiBZTygpe2xldHtlcnJvcklkRXhpc3RzOmN9PWFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtjb25zdCBsPW5ldyBNYXA7ZnVuY3Rpb24gTSgpe3JldHVyblsuLi5sXX1mdW5jdGlvbiBEKFope3JldHVybiBsLmhhcyhaKX1yZXR1cm4gYz1lYyhjKT9jOlZxZSx7YWRkSXRlbTpmdW5jdGlv''@;'; put 'put ''biBhKFosbmUpe2lmKEQoWikpdGhyb3cgbmV3IEVycm9yKGMoWikpO2wuc2V0KFosbmUpfSxjbGVhcjpmdW5jdGlvbiBoKCl7bC5jbGVhcigpfSxnZXRJZDpmdW5jdGlvbiBmKFope2NvbnN0W25lXT1NKCkuZmluZChjZT0+e2xldFtiZSxFZV09Y2U7cmV0dXJuIFo9PT1FZSYmYmV9KXx8W251''@;'; put 'put ''bGxdO3JldHVybiBuZX0sZ2V0SXRlbTpmdW5jdGlvbiB2KFope3JldHVybiBsLmdldChaKX0sZ2V0SXRlbXM6TSxoYXNJdGVtOkQscmVtb3ZlSXRlbTpmdW5jdGlvbiBkKFope3JldHVybiBsLmRlbGV0ZShaKX19fWNvbnN0IEJxZT1jPT5gJyR7Y30nIHZhbHVlIGlzIGFscmVhZHkgZGVjbGFy''@;'; put 'put ''ZWQgaW4gYSB1bmlxdWUgc2V0LmAseiQ9Yz0+YFRoZXJlIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCAiJHtjfSIgcGx1Z2luLmAscmZlPWZ1bmN0aW9uIE5xZSgpe2xldHtlcnJvclByaW9yaXR5RXhpc3RzOmMsZXJyb3JQcmlvcml0eU5hTjpsfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9''@;'; put 'put ''PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307Y29uc3QgYT1uZXcgTWFwO3JldHVybiBjPWVjKGMpP2M6RnFlLGw9ZWMobCk/bDpIcWUse2FkZEl0ZW06ZnVuY3Rpb24gZChmLHYpe2lmKCF2MShmKSl0aHJvdyBuZXcgRXJyb3IobChmKSk7aWYoYS5oYXMoZikpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KGMoZikpO2Euc2V0KGYsdil9LGdldEl0ZW1zOmZ1bmN0aW9uIGgoKXtsZXQgZj1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06ImFzYyI7Y29uc3RbdixNXT1uZmUuZ2V0KGYpfHxuZmUuZ2V0KCJhc2MiKTtyZXR1cm5bLi4uYV0uc29ydCgo''@;'; put 'put ''RCxaKT0+RFswXTxaWzBdP3Y6TSkubWFwKEQ9PkRbMV0pfX19KHtlcnJvclByaW9yaXR5RXhpc3RzOmM9PmBUaGVyZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgcGx1Z2luIG9uIHByaW9yaXR5ICIke2N9Ii5gLGVycm9yUHJpb3JpdHlOYU46Yz0+YFRoZSBwcmlvcml0eSAiJHtjfSIgaXMgbm90''@;'; put 'put ''IGEgbnVtYmVyLmB9KSxpZmU9ZnVuY3Rpb24ganFlKCl7bGV0e2Vycm9ySXRlbUV4aXN0czpjfT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e307Y29uc3QgbD1uZXcgU2V0O3JldHVybiBjPWVjKGMpP2M6QnFlLHthZGRJdGVtOmZ1bmN0''@;'; put 'put ''aW9uIGEoZil7aWYobC5oYXMoZikpdGhyb3cgbmV3IEVycm9yKGMoZikpO2wuYWRkKGYpfSxjbGVhcjpmdW5jdGlvbiBoKCl7bC5jbGVhcigpfSxnZXRJdGVtczpmdW5jdGlvbiBkKCl7cmV0dXJuWy4uLmxdfX19KHtlcnJvckl0ZW1FeGlzdHM6eiR9KSxVJD1ZTyh7ZXJyb3JJZEV4aXN0czp6''@;'; put 'put ''JH0pO2Z1bmN0aW9uIFokKCl7cmV0dXJuWy4uLnJmZS5nZXRJdGVtcygpLC4uLmlmZS5nZXRJdGVtcygpXX1mdW5jdGlvbiBFRShjKXtjb25zdCBsPWcxKGMpO3JldHVybiBVJC5nZXRJdGVtKGwpfWZ1bmN0aW9uIFBzKGMsbCxhKXtbYyxsLGFdPWZ1bmN0aW9uIFpxZShjLGwsYSl7cmV0dXJu''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIGMmJihjPShsPWMpLlBMVUdJTl9LRVksYT1sLlBMVUdJTl9QUklPUklUWSksW2MsbCxhXX0oYyxsLGEpLHZvaWQgMD09PUVFKGMpJiZmdW5jdGlvbiBVcWUoYyxsLGEpe2NvbnN0IGQ9ZzEoYyk7aWYoVSQuaGFzSXRlbShkKSl0aHJvdyBuZXcgRXJyb3IoeiQo''@;'; put 'put ''ZCkpO3ZvaWQgMD09PWE/aWZlLmFkZEl0ZW0oZCk6cmZlLmFkZEl0ZW0oYSxkKSxVJC5hZGRJdGVtKGQsbCl9KGMsbCxhKX1jb25zdHtyZWdpc3RlcjpXcWUsZ2V0SXRlbTpZcWUsaGFzSXRlbTpvZmUsZ2V0TmFtZXM6R3FlfT1RZigicmVuZGVyZXJzIik7ZnVuY3Rpb24gR08oYyl7aWYoImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIGMpcmV0dXJuIGM7aWYoIW9mZShjKSl0aHJvdyBFcnJvcihgTm8gcmVnaXN0ZXJlZCByZW5kZXJlciBmb3VuZCB1bmRlciAiJHtjfSIgbmFtZWApO3JldHVybiBZcWUoYyl9ZnVuY3Rpb24gVGgoYyxsKXsic3RyaW5nIiE9dHlwZW9mIGMmJihjPShsPWMpLlJFTkRF''@;'; put 'put ''UkVSX1RZUEUpLFdxZShjLGwpfWNvbnN0e3JlZ2lzdGVyOiRxZSxnZXRJdGVtOktxZSxoYXNJdGVtOmFmZSxnZXROYW1lczpxcWV9PVFmKCJ2YWxpZGF0b3JzIik7ZnVuY3Rpb24gVyQoYyl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGMpcmV0dXJuIGM7aWYoIWFmZShjKSl0aHJvdyBFcnJvcihg''@;'; put 'put ''Tm8gcmVnaXN0ZXJlZCB2YWxpZGF0b3IgZm91bmQgdW5kZXIgIiR7Y30iIG5hbWVgKTtyZXR1cm4gS3FlKGMpfWZ1bmN0aW9uIHo3KGMsbCl7InN0cmluZyIhPXR5cGVvZiBjJiYoYz0obD1jKS5WQUxJREFUT1JfVFlQRSksJHFlKGMsbCl9ZnVuY3Rpb24gTXAoYyxsLGEpeyhmdW5jdGlvbiBY''@;'; put 'put ''cWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIFFvKGMsbCl7cmV0dXJuIGMuZ2V0KHNmZShjLGwpKX1m''@;'; put 'put ''dW5jdGlvbiBIbShjLGwsYSl7cmV0dXJuIGMuc2V0KHNmZShjLGwpLGEpLGF9ZnVuY3Rpb24gc2ZlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVs''@;'; put 'put ''ZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgTzI9bmV3IFdlYWtNYXAsWSQ9bmV3IFdlYWtNYXAsRTA9bmV3IFdlYWtNYXAsY189bmV3IFdlYWtNYXAsJE89bmV3IFdlYWtNYXAsZTM9bmV3IFdlYWtNYXAsRyQ9bmV3IFdlYWtNYXAsVEU9bmV3IFdlYWtNYXAsVTc9''@;'; put 'put ''bmV3IFdlYWtNYXAseHA9bmV3IFdlYWtNYXA7Y29uc3QgbGZlPWNsYXNzIEpxZXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdil7bGV0IE09YXJndW1lbnRzLmxlbmd0aD42JiZ2b2lkIDAhPT1hcmd1bWVudHNbNl0/YXJndW1lbnRzWzZdOm51bGw7TXAodGhpcyxPMix2b2lkIDApLE1wKHRoaXMs''@;'; put 'put ''WSQsdm9pZCAwKSxNcCh0aGlzLEUwLHZvaWQgMCksTXAodGhpcyxjXyx2b2lkIDApLE1wKHRoaXMsJE8sdm9pZCAwKSxNcCh0aGlzLGUzLHZvaWQgMCksTXAodGhpcyxHJCx2b2lkIDApLE1wKHRoaXMsVEUsdm9pZCAwKSxNcCh0aGlzLFU3LFtudWxsLG51bGxdKSxNcCh0aGlzLHhwLFtudWxs''@;'; put 'put ''LG51bGxdKSxIbShPMix0aGlzLGQpLEhtKFkkLHRoaXMsYSksSG0oRTAsdGhpcyxmKSxIbShjXyx0aGlzLHYpLEhtKCRPLHRoaXMsTSksSG0oZTMsdGhpcyxoKSxIbShHJCx0aGlzLGwpLHRoaXMucmVnaXN0ZXJFdmVudHMoKX1yZWdpc3RlckV2ZW50cygpe1FvKGUzLHRoaXMpLmFkZEV2ZW50''@;'; put 'put ''TGlzdGVuZXIoUW8oRTAsdGhpcykuaG9sZGVyLCJjb250ZXh0bWVudSIsZD0+dGhpcy5vbkNvbnRleHRNZW51KGQpKSxRbyhlMyx0aGlzKS5hZGRFdmVudExpc3RlbmVyKFFvKEUwLHRoaXMpLlRBQkxFLCJtb3VzZW92ZXIiLGQ9PnRoaXMub25Nb3VzZU92ZXIoZCkpLFFvKGUzLHRoaXMpLmFk''@;'; put 'put ''ZEV2ZW50TGlzdGVuZXIoUW8oRTAsdGhpcykuVEFCTEUsIm1vdXNlb3V0IixkPT50aGlzLm9uTW91c2VPdXQoZCkpO2NvbnN0IGw9KCk9PntRbyhlMyx0aGlzKS5hZGRFdmVudExpc3RlbmVyKFFvKEUwLHRoaXMpLmhvbGRlciwidG91Y2hzdGFydCIsZD0+dGhpcy5vblRvdWNoU3RhcnQoZCkp''@;'; put 'put ''LFFvKGUzLHRoaXMpLmFkZEV2ZW50TGlzdGVuZXIoUW8oRTAsdGhpcykuaG9sZGVyLCJ0b3VjaGVuZCIsZD0+dGhpcy5vblRvdWNoRW5kKGQpKSx0aGlzLm1vbWVudHVtU2Nyb2xsaW5nfHwodGhpcy5tb21lbnR1bVNjcm9sbGluZz17fSksUW8oZTMsdGhpcykuYWRkRXZlbnRMaXN0ZW5lcihR''@;'; put 'put ''byhFMCx0aGlzKS5ob2xkZXIsInNjcm9sbCIsKCk9PntjbGVhclRpbWVvdXQodGhpcy5tb21lbnR1bVNjcm9sbGluZy5fdGltZW91dCksdGhpcy5tb21lbnR1bVNjcm9sbGluZy5vbmdvaW5nfHxRbyhPMix0aGlzKS5nZXRTZXR0aW5nKCJvbkJlZm9yZVRvdWNoU2Nyb2xsIiksdGhpcy5tb21l''@;'; put 'put ''bnR1bVNjcm9sbGluZy5vbmdvaW5nPSEwLHRoaXMubW9tZW50dW1TY3JvbGxpbmcuX3RpbWVvdXQ9c2V0VGltZW91dCgoKT0+e3RoaXMudG91Y2hBcHBsaWVkfHwodGhpcy5tb21lbnR1bVNjcm9sbGluZy5vbmdvaW5nPSExLFFvKE8yLHRoaXMpLmdldFNldHRpbmcoIm9uQWZ0ZXJNb21lbnR1''@;'; put 'put ''bVNjcm9sbCIpKX0sMjAwKX0pfTtTcCgpP2woKTooeSQoKSYmbCgpLCgoKT0+e1FvKGUzLHRoaXMpLmFkZEV2ZW50TGlzdGVuZXIoUW8oRTAsdGhpcykuaG9sZGVyLCJtb3VzZXVwIixkPT50aGlzLm9uTW91c2VVcChkKSksUW8oZTMsdGhpcykuYWRkRXZlbnRMaXN0ZW5lcihRbyhFMCx0aGlz''@;'; put 'put ''KS5ob2xkZXIsIm1vdXNlZG93biIsZD0+dGhpcy5vbk1vdXNlRG93bihkKSl9KSgpKX1zZWxlY3RlZENlbGxXYXNUb3VjaGVkKGwpe2NvbnN0IGQ9dGhpcy5wYXJlbnRDZWxsKGwpLmNvb3JkcztpZihRbyhURSx0aGlzKSYmZCl7Y29uc3RbaCxmXT1bZC5yb3csUW8oVEUsdGhpcykuZnJvbS5y''@;'; put 'put ''b3ddLFt2LE1dPVtkLmNvbCxRbyhURSx0aGlzKS5mcm9tLmNvbF07cmV0dXJuIGg9PT1mJiZ2PT09TX1yZXR1cm4hMX1wYXJlbnRDZWxsKGwpe2NvbnN0IGE9e30saD1nRShsLFsiVEQiLCJUSCJdLFFvKEUwLHRoaXMpLlRBQkxFKTtyZXR1cm4gaD8oYS5jb29yZHM9UW8oRTAsdGhpcykuZ2V0''@;'; put 'put ''Q29vcmRzKGgpLGEuVEQ9aCk6cGEobCwid3RCb3JkZXIiKSYmcGEobCwiY3VycmVudCIpPyhhLmNvb3Jkcz1RbyhjXyx0aGlzKS5nZXRGb2N1c1NlbGVjdGlvbigpLmNlbGxSYW5nZS5oaWdobGlnaHQsYS5URD1RbyhFMCx0aGlzKS5nZXRDZWxsKGEuY29vcmRzKSk6cGEobCwid3RCb3JkZXIi''@;'; put 'put ''KSYmcGEobCwiYXJlYSIpJiZRbyhjXyx0aGlzKS5nZXRBcmVhU2VsZWN0aW9uKCkuY2VsbFJhbmdlJiYoYS5jb29yZHM9UW8oY18sdGhpcykuZ2V0QXJlYVNlbGVjdGlvbigpLmNlbGxSYW5nZS50byxhLlREPVFvKEUwLHRoaXMpLmdldENlbGwoYS5jb29yZHMpKSxhfW9uTW91c2VEb3duKGwp''@;'; put 'put ''e2NvbnN0IGE9UW8oWSQsdGhpcykucm9vdERvY3VtZW50LmFjdGl2ZUVsZW1lbnQsZD1iJChnMmUsbC50YXJnZXQpLGg9bC50YXJnZXQ7aWYoIVsiVEQiLCJUSCJdLmluY2x1ZGVzKGEubm9kZU5hbWUpJiYoaD09PWF8fGQoMCk9PT1hfHxkKDEpPT09YSkpcmV0dXJuO2NvbnN0IGY9dGhpcy5w''@;'; put 'put ''YXJlbnRDZWxsKGgpO3BhKGgsImNvcm5lciIpP1FvKE8yLHRoaXMpLmdldFNldHRpbmcoIm9uQ2VsbENvcm5lck1vdXNlRG93biIsbCxoKTpmLlREJiZRbyhPMix0aGlzKS5oYXMoIm9uQ2VsbE1vdXNlRG93biIpJiZ0aGlzLmNhbGxMaXN0ZW5lcigib25DZWxsTW91c2VEb3duIixsLGYuY29v''@;'; put 'put ''cmRzLGYuVEQpLCgwPT09bC5idXR0b258fHRoaXMudG91Y2hBcHBsaWVkKSYmZi5URCYmKFFvKHhwLHRoaXMpWzBdPWYuVEQsY2xlYXJUaW1lb3V0KFFvKFU3LHRoaXMpWzBdKSxRbyhVNyx0aGlzKVswXT1zZXRUaW1lb3V0KCgpPT57UW8oeHAsdGhpcylbMF09bnVsbH0sMWUzKSl9b25Db250''@;'; put 'put ''ZXh0TWVudShsKXtpZihRbyhPMix0aGlzKS5oYXMoIm9uQ2VsbENvbnRleHRNZW51Iikpe2NvbnN0IGE9dGhpcy5wYXJlbnRDZWxsKGwudGFyZ2V0KTthLlREJiZ0aGlzLmNhbGxMaXN0ZW5lcigib25DZWxsQ29udGV4dE1lbnUiLGwsYS5jb29yZHMsYS5URCl9fW9uTW91c2VPdmVyKGwpe2lm''@;'; put 'put ''KCFRbyhPMix0aGlzKS5oYXMoIm9uQ2VsbE1vdXNlT3ZlciIpKXJldHVybjtjb25zdCBhPVFvKEUwLHRoaXMpLlRBQkxFLGQ9Z0UobC50YXJnZXQsWyJURCIsIlRIIl0sYSksaD1RbygkTyx0aGlzKXx8dGhpcztkJiZkIT09aC5sYXN0TW91c2VPdmVyJiZJbShkLGEpJiYoaC5sYXN0TW91c2VP''@;'; put 'put ''dmVyPWQsdGhpcy5jYWxsTGlzdGVuZXIoIm9uQ2VsbE1vdXNlT3ZlciIsbCxRbyhFMCx0aGlzKS5nZXRDb29yZHMoZCksZCkpfW9uTW91c2VPdXQobCl7aWYoIVFvKE8yLHRoaXMpLmhhcygib25DZWxsTW91c2VPdXQiKSlyZXR1cm47Y29uc3QgYT1RbyhFMCx0aGlzKS5UQUJMRSxkPWdFKGwu''@;'; put 'put ''dGFyZ2V0LFsiVEQiLCJUSCJdLGEpLGg9Z0UobC5yZWxhdGVkVGFyZ2V0LFsiVEQiLCJUSCJdLGEpLGY9UW8oJE8sdGhpcyl8fHRoaXM7ZCYmZCE9PWgmJkltKGQsYSkmJih0aGlzLmNhbGxMaXN0ZW5lcigib25DZWxsTW91c2VPdXQiLGwsUW8oRTAsdGhpcykuZ2V0Q29vcmRzKGQpLGQpLG51''@;'; put 'put ''bGw9PT1oJiYoZi5sYXN0TW91c2VPdmVyPW51bGwpKX1vbk1vdXNlVXAobCl7Y29uc3QgYT10aGlzLnBhcmVudENlbGwobC50YXJnZXQpO2EuVEQmJlFvKE8yLHRoaXMpLmhhcygib25DZWxsTW91c2VVcCIpJiZ0aGlzLmNhbGxMaXN0ZW5lcigib25DZWxsTW91c2VVcCIsbCxhLmNvb3Jkcyxh''@;'; put 'put ''LlREKSwoMD09PWwuYnV0dG9ufHx0aGlzLnRvdWNoQXBwbGllZCkmJihhLlREPT09UW8oeHAsdGhpcylbMF0mJmEuVEQ9PT1Rbyh4cCx0aGlzKVsxXT8ocGEobC50YXJnZXQsImNvcm5lciIpP3RoaXMuY2FsbExpc3RlbmVyKCJvbkNlbGxDb3JuZXJEYmxDbGljayIsbCxhLmNvb3JkcyxhLlRE''@;'; put 'put ''KTp0aGlzLmNhbGxMaXN0ZW5lcigib25DZWxsRGJsQ2xpY2siLGwsYS5jb29yZHMsYS5URCksUW8oeHAsdGhpcylbMF09bnVsbCxRbyh4cCx0aGlzKVsxXT1udWxsKTphLlREPT09UW8oeHAsdGhpcylbMF0mJihRbyh4cCx0aGlzKVsxXT1hLlRELGNsZWFyVGltZW91dChRbyhVNyx0aGlzKVsx''@;'; put 'put ''XSksUW8oVTcsdGhpcylbMV09c2V0VGltZW91dCgoKT0+e1FvKHhwLHRoaXMpWzFdPW51bGx9LDUwMCkpKX1vblRvdWNoU3RhcnQobCl7SG0oVEUsdGhpcyxRbyhjXyx0aGlzKS5nZXRGb2N1c1NlbGVjdGlvbigpLmNlbGxSYW5nZSksdGhpcy50b3VjaEFwcGxpZWQ9ITAsdGhpcy5vbk1vdXNl''@;'; put 'put ''RG93bihsKX1vblRvdWNoRW5kKGwpe3ZhciBhO2NvbnN0IGQ9bC50YXJnZXQsaD1udWxsPT09KGE9dGhpcy5wYXJlbnRDZWxsKGQpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5jb29yZHMsZj1GbyhoKSYmaC5yb3c+PTAmJmguY29sPj0wO2lmKGwuY2FuY2VsYWJsZSYmZiYmUW8oTzIsdGhpcyku''@;'; put 'put ''Z2V0U2V0dGluZygiaXNEYXRhVmlld0luc3RhbmNlIikpe2NvbnN0IE09WyJBIiwiQlVUVE9OIiwiSU5QVVQiXTtDJCgpJiYoUDJlKCl8fEYyZSgpKSYmdGhpcy5zZWxlY3RlZENlbGxXYXNUb3VjaGVkKGQpJiYhTS5pbmNsdWRlcyhkLnRhZ05hbWUpP2wucHJldmVudERlZmF1bHQoKTp0aGlz''@;'; put 'put ''LnNlbGVjdGVkQ2VsbFdhc1RvdWNoZWQoZCl8fGwucHJldmVudERlZmF1bHQoKX10aGlzLm9uTW91c2VVcChsKSx0aGlzLnRvdWNoQXBwbGllZD0hMX1jYWxsTGlzdGVuZXIobCxhLGQsaCl7Y29uc3QgZj1RbyhPMix0aGlzKS5nZXRTZXR0aW5nUHVyZShsKTtmJiZmKGEsZCxoLFFvKEckLHRo''@;'; put 'put ''aXMpLmNhbGwodGhpcykpfWRlc3Ryb3koKXtjbGVhclRpbWVvdXQoUW8oVTcsdGhpcylbMF0pLGNsZWFyVGltZW91dChRbyhVNyx0aGlzKVsxXSksUW8oZTMsdGhpcykuZGVzdHJveSgpfX07ZnVuY3Rpb24gJCQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFFxZShjKXt2YXIgbD1mdW5jdGlv''@;'; put 'put ''biBlWGUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVy''@;'; put 'put ''cm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5''@;'; put 'put ''KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IG5YZT1jbGFzcyB0WGV7Y29uc3RydWN0b3IobCxhLGQpeyQkKHRoaXMsIm9mZnNldCIsdm9pZCAwKSwkJCh0aGlzLCJ0b3RhbCIsdm9pZCAwKSwkJCh0aGlzLCJj''@;'; put 'put ''b3VudFRIIix2b2lkIDApLHRoaXMub2Zmc2V0PWwsdGhpcy50b3RhbD1hLHRoaXMuY291bnRUSD1kfW9mZnNldHRlZChsKXtyZXR1cm4gbCt0aGlzLm9mZnNldH11bk9mZnNldHRlZChsKXtyZXR1cm4gbC10aGlzLm9mZnNldH1yZW5kZXJlZFRvU291cmNlKGwpe3JldHVybiB0aGlzLm9mZnNl''@;'; put 'put ''dHRlZChsKX1zb3VyY2VUb1JlbmRlcmVkKGwpe3JldHVybiB0aGlzLnVuT2Zmc2V0dGVkKGwpfW9mZnNldHRlZFRIKGwpe3JldHVybiBsLXRoaXMuY291bnRUSH11bk9mZnNldHRlZFRIKGwpe3JldHVybiBsK3RoaXMuY291bnRUSH12aXNpYmxlUm93SGVhZGVkQ29sdW1uVG9Tb3VyY2VDb2x1''@;'; put 'put ''bW4obCl7cmV0dXJuIHRoaXMucmVuZGVyZWRUb1NvdXJjZSh0aGlzLm9mZnNldHRlZFRIKGwpKX1zb3VyY2VDb2x1bW5Ub1Zpc2libGVSb3dIZWFkZWRDb2x1bW4obCl7cmV0dXJuIHRoaXMudW5PZmZzZXR0ZWRUSCh0aGlzLnNvdXJjZVRvUmVuZGVyZWQobCkpfX07ZnVuY3Rpb24gSyQoYyxs''@;'; put 'put ''LGEpe3JldHVybihsPWZ1bmN0aW9uIHJYZShjKXt2YXIgbD1mdW5jdGlvbiBpWGUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJv''@;'; put 'put ''YmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBl''@;'; put 'put ''b2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IGFYZT1jbGFzcyBvWGV7Y29uc3RydWN0b3IobCxhLGQpe0skKHRoaXMsIm9mZnNldCIs''@;'; put 'put ''dm9pZCAwKSxLJCh0aGlzLCJ0b3RhbCIsdm9pZCAwKSxLJCh0aGlzLCJjb3VudFRIIix2b2lkIDApLHRoaXMub2Zmc2V0PWwsdGhpcy50b3RhbD1hLHRoaXMuY291bnRUSD1kfW9mZnNldHRlZChsKXtyZXR1cm4gbCt0aGlzLm9mZnNldH11bk9mZnNldHRlZChsKXtyZXR1cm4gbC10aGlzLm9m''@;'; put 'put ''ZnNldH1yZW5kZXJlZFRvU291cmNlKGwpe3JldHVybiB0aGlzLm9mZnNldHRlZChsKX1zb3VyY2VUb1JlbmRlcmVkKGwpe3JldHVybiB0aGlzLnVuT2Zmc2V0dGVkKGwpfW9mZnNldHRlZFRIKGwpe3JldHVybiBsLXRoaXMuY291bnRUSH11bk9mZnNldHRlZFRIKGwpe3JldHVybiBsK3RoaXMu''@;'; put 'put ''Y291bnRUSH12aXNpYmxlQ29sSGVhZGVkUm93VG9Tb3VyY2VSb3cobCl7cmV0dXJuIHRoaXMucmVuZGVyZWRUb1NvdXJjZSh0aGlzLm9mZnNldHRlZFRIKGwpKX1zb3VyY2VSb3dUb1Zpc2libGVDb2xIZWFkZWRSb3cobCl7cmV0dXJuIHRoaXMudW5PZmZzZXR0ZWRUSCh0aGlzLnNvdXJjZVRv''@;'; put 'put ''UmVuZGVyZWQobCkpfX07ZnVuY3Rpb24gS08oYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHNYZShjKXt2YXIgbD1mdW5jdGlvbiBsWGUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIg''@;'; put 'put ''ZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMs''@;'; put 'put ''InN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGNYZXtjb25zdHJ1Y3Rvcigpe0tP''@;'; put 'put ''KHRoaXMsImN1cnJlbnRTaXplIiwwKSxLTyh0aGlzLCJuZXh0U2l6ZSIsMCksS08odGhpcywiY3VycmVudE9mZnNldCIsMCksS08odGhpcywibmV4dE9mZnNldCIsMCl9c2V0U2l6ZShsKXt0aGlzLmN1cnJlbnRTaXplPXRoaXMubmV4dFNpemUsdGhpcy5uZXh0U2l6ZT1sfXNldE9mZnNldChs''@;'; put 'put ''KXt0aGlzLmN1cnJlbnRPZmZzZXQ9dGhpcy5uZXh0T2Zmc2V0LHRoaXMubmV4dE9mZnNldD1sfX1mdW5jdGlvbiBYJChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gZFhlKGMpe3ZhciBsPWZ1bmN0aW9uIGhYZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9''@;'; put 'put ''Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9''@;'; put 'put ''cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxl''@;'; put 'put ''OiEwfSk6Y1tsXT1hLGN9Y2xhc3MgZlhle2NvbnN0cnVjdG9yKCl7WCQodGhpcywic2l6ZSIsbmV3IGNYZSksWCQodGhpcywid29ya2luZ1NwYWNlIiwwKSxYJCh0aGlzLCJzaGFyZWRTaXplIixudWxsKX1zZXRTaXplKGwpe3RoaXMuc2l6ZS5zZXRTaXplKGwpfXNldE9mZnNldChsKXt0aGlz''@;'; put 'put ''LnNpemUuc2V0T2Zmc2V0KGwpfWdldFZpZXdTaXplKCl7cmV0dXJuIHRoaXMuc2l6ZX1pc1NoYXJlZCgpe3JldHVybiBudWxsIT09dGhpcy5zaGFyZWRTaXplfWlzUGxhY2VPbihsKXtyZXR1cm4gdGhpcy53b3JraW5nU3BhY2U9PT1sfWFwcGVuZChsKXt0aGlzLndvcmtpbmdTcGFjZT0xLGwu''@;'; put 'put ''d29ya2luZ1NwYWNlPTIsdGhpcy5zaGFyZWRTaXplPWwuZ2V0Vmlld1NpemUoKX1wcmVwZW5kKGwpe3RoaXMud29ya2luZ1NwYWNlPTIsbC53b3JraW5nU3BhY2U9MSx0aGlzLnNoYXJlZFNpemU9bC5nZXRWaWV3U2l6ZSgpfX1fKDI5NzYwKTtjbGFzcyB1ZmV7Y29uc3RydWN0b3IobCxhKXso''@;'; put 'put ''ZnVuY3Rpb24gcFhlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBnWGUoYyl7dmFyIGw9ZnVuY3Rpb24gbVhlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8''@;'; put 'put ''ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1''@;'; put 'put ''cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30pKHRoaXMsIm9yZGVyIixbXSksdGhpcy5vcmRlcj1bLi4uQXJyYXko''@;'; put 'put ''YSkua2V5cygpXS5tYXAoZD0+bCtkKX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMub3JkZXIubGVuZ3RofWhhcyhsKXtyZXR1cm4gdGhpcy5vcmRlci5pbmRleE9mKGwpPi0xfWdldChsKXtyZXR1cm4gbDx0aGlzLm9yZGVyLmxlbmd0aD90aGlzLm9yZGVyW2xdOi0xfXJlbW92ZShsKXt0aGlz''@;'; put 'put ''Lm9yZGVyLnNwbGljZSh0aGlzLm9yZGVyLmluZGV4T2YobCksMSl9cHJlcGVuZChsKXtyZXR1cm4gdGhpcy5vcmRlci51bnNoaWZ0KGwpLHRoaXMub3JkZXIucG9wKCl9fWNsYXNzIF9YZXtjb25zdHJ1Y3RvcihsKXsoZnVuY3Rpb24gdlhlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBiWGUo''@;'; put 'put ''Yyl7dmFyIGw9ZnVuY3Rpb24geVhlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7''@;'; put 'put ''dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVj''@;'; put 'put ''dC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30pKHRoaXMsInNpemVTZXQiLHZvaWQgMCksdGhpcy5zaXplU2V0PWx9ZGlmZigpe2NvbnN0e3NpemVTZXQ6bH09dGhpcyx7Y3VycmVudFNpemU6''@;'; put 'put ''YSxuZXh0U2l6ZTpkfT1sLmdldFZpZXdTaXplKCk7bGV0IGg9TWF0aC5tYXgoZCxhKTtpZigwPT09aClyZXR1cm5bXTtjb25zdHtjdXJyZW50T2Zmc2V0OmYsbmV4dE9mZnNldDp2fT1sLmdldFZpZXdTaXplKCksTT1uZXcgdWZlKGYsYSksRD1uZXcgdWZlKHYsZCksWj1bXTtmb3IobGV0IG5l''@;'; put 'put ''PTA7bmU8aDtuZSsrKXtjb25zdCBjZT1NLmdldChuZSksYmU9RC5nZXQobmUpO2lmKC0xPT09YmUpWi5wdXNoKFsicmVtb3ZlIixjZV0pO2Vsc2UgaWYoLTE9PT1jZSkhbC5pc1NoYXJlZCgpfHxsLmlzU2hhcmVkKCkmJmwuaXNQbGFjZU9uKDIpP1oucHVzaChbImFwcGVuZCIsYmVdKTpaLnB1''@;'; put 'put ''c2goWyJwcmVwZW5kIixiZV0pO2Vsc2UgaWYoYmU+Y2UpTS5oYXMoYmUpJiYoTS5yZW1vdmUoYmUpLGQ8PU0ubGVuZ3RoJiYoaC09MSkpLFoucHVzaChbInJlcGxhY2UiLGJlLGNlXSk7ZWxzZSBpZihiZTxjZSl7Y29uc3QgRWU9TS5wcmVwZW5kKGJlKTtaLnB1c2goWyJpbnNlcnRfYmVmb3Jl''@;'; put 'put ''IixiZSxjZSxFZV0pfWVsc2UgWi5wdXNoKFsibm9uZSIsYmVdKX1yZXR1cm4gWn19ZnVuY3Rpb24gdV8oYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHdYZShjKXt2YXIgbD1mdW5jdGlvbiBDWGUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9s''@;'; put 'put ''LnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigi''@;'; put 'put ''c3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNb''@;'; put 'put ''bF09YSxjfWNsYXNzIGRmZXtjb25zdHJ1Y3RvcihsLGEpe3VfKHRoaXMsInJvb3ROb2RlIix2b2lkIDApLHVfKHRoaXMsIm5vZGVzUG9vbCIsdm9pZCAwKSx1Xyh0aGlzLCJzaXplU2V0IixuZXcgZlhlKSx1Xyh0aGlzLCJjb2xsZWN0ZWROb2RlcyIsW10pLHVfKHRoaXMsInZpZXdEaWZmZXIi''@;'; put 'put ''LG5ldyBfWGUodGhpcy5zaXplU2V0KSksdV8odGhpcywibGVhZHMiLFtdKSx0aGlzLnJvb3ROb2RlPWwsdGhpcy5ub2Rlc1Bvb2w9YX1zZXRTaXplKGwpe3JldHVybiB0aGlzLnNpemVTZXQuc2V0U2l6ZShsKSx0aGlzfXNldE9mZnNldChsKXtyZXR1cm4gdGhpcy5zaXplU2V0LnNldE9mZnNl''@;'; put 'put ''dChsKSx0aGlzfWlzU2hhcmVkVmlld1NldCgpe3JldHVybiB0aGlzLnNpemVTZXQuaXNTaGFyZWQoKX1nZXROb2RlKGwpe3JldHVybiBsPHRoaXMuY29sbGVjdGVkTm9kZXMubGVuZ3RoP3RoaXMuY29sbGVjdGVkTm9kZXNbbF06bnVsbH1nZXRDdXJyZW50Tm9kZSgpe2NvbnN0IGw9dGhpcy5j''@;'; put 'put ''b2xsZWN0ZWROb2Rlcy5sZW5ndGg7cmV0dXJuIGw+MD90aGlzLmNvbGxlY3RlZE5vZGVzW2wtMV06bnVsbH1hcHBseUNvbW1hbmQobCl7Y29uc3R7cm9vdE5vZGU6YX09dGhpcyxbZCxoLGYsdl09bCxNPXRoaXMubm9kZXNQb29sKGgpO3N3aXRjaCh0aGlzLmNvbGxlY3RlZE5vZGVzLnB1c2go''@;'; put 'put ''TSksZCl7Y2FzZSJwcmVwZW5kIjphLmluc2VydEJlZm9yZShNLGEuZmlyc3RDaGlsZCk7YnJlYWs7Y2FzZSJhcHBlbmQiOmEuYXBwZW5kQ2hpbGQoTSk7YnJlYWs7Y2FzZSJpbnNlcnRfYmVmb3JlIjphLmluc2VydEJlZm9yZShNLHRoaXMubm9kZXNQb29sKGYpKSxhLnJlbW92ZUNoaWxkKHRo''@;'; put 'put ''aXMubm9kZXNQb29sKHYpKTticmVhaztjYXNlInJlcGxhY2UiOmEucmVwbGFjZUNoaWxkKE0sdGhpcy5ub2Rlc1Bvb2woZikpO2JyZWFrO2Nhc2UicmVtb3ZlIjphLnJlbW92ZUNoaWxkKE0pfX1zdGFydCgpe3RoaXMuY29sbGVjdGVkTm9kZXMubGVuZ3RoPTAsdGhpcy5sZWFkcz10aGlzLnZp''@;'; put 'put ''ZXdEaWZmZXIuZGlmZigpfXJlbmRlcigpe3RoaXMubGVhZHMubGVuZ3RoPjAmJnRoaXMuYXBwbHlDb21tYW5kKHRoaXMubGVhZHMuc2hpZnQoKSl9ZW5kKCl7Zm9yKDt0aGlzLmxlYWRzLmxlbmd0aD4wOyl0aGlzLmFwcGx5Q29tbWFuZCh0aGlzLmxlYWRzLnNoaWZ0KCkpfX1jbGFzcyBoZmUg''@;'; put 'put ''ZXh0ZW5kcyBkZmV7cHJlcGVuZFZpZXcobCl7cmV0dXJuIHRoaXMuc2l6ZVNldC5wcmVwZW5kKGwuc2l6ZVNldCksbC5zaXplU2V0LmFwcGVuZCh0aGlzLnNpemVTZXQpLHRoaXN9YXBwZW5kVmlldyhsKXtyZXR1cm4gdGhpcy5zaXplU2V0LmFwcGVuZChsLnNpemVTZXQpLGwuc2l6ZVNldC5w''@;'; put 'put ''cmVwZW5kKHRoaXMuc2l6ZVNldCksdGhpc319ZnVuY3Rpb24gZmZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBTWGUoYyl7dmFyIGw9ZnVuY3Rpb24gTVhlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9p''@;'; put 'put ''ZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpO''@;'; put 'put ''dW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyB4WGV7Y29u''@;'; put 'put ''c3RydWN0b3IobCl7ZmZlKHRoaXMsIm5vZGVUeXBlIix2b2lkIDApLGZmZSh0aGlzLCJwb29sIixuZXcgTWFwKSx0aGlzLm5vZGVUeXBlPWwudG9VcHBlckNhc2UoKX1zZXRSb290RG9jdW1lbnQobCl7dGhpcy5yb290RG9jdW1lbnQ9bH1vYnRhaW4obCxhKXtjb25zdCBoPSJudW1iZXIiPT10''@;'; put 'put ''eXBlb2YgYT9gJHtsfXgke2F9YDpsLnRvU3RyaW5nKCk7aWYodGhpcy5wb29sLmhhcyhoKSlyZXR1cm4gdGhpcy5wb29sLmdldChoKTtjb25zdCBmPXRoaXMucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy5ub2RlVHlwZSk7cmV0dXJuIHRoaXMucG9vbC5zZXQoaCxmKSxmfX1mdW5j''@;'; put 'put ''dGlvbiBBRShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRVhlKGMpe3ZhciBsPWZ1bmN0aW9uIFRYZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZh''@;'; put 'put ''dWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5''@;'; put 'put ''bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3Mga0V7Y29uc3RydWN0b3IobCxhKXtBRSh0aGlzLCJub2Rlc1Bvb2wi''@;'; put 'put ''LG51bGwpLEFFKHRoaXMsIm5vZGVUeXBlIix2b2lkIDApLEFFKHRoaXMsInJvb3ROb2RlIix2b2lkIDApLEFFKHRoaXMsInRhYmxlIixudWxsKSxBRSh0aGlzLCJyZW5kZXJlZE5vZGVzIiwwKSx0aGlzLm5vZGVzUG9vbD0ic3RyaW5nIj09dHlwZW9mIGw/bmV3IHhYZShsKTpudWxsLHRoaXMu''@;'; put 'put ''bm9kZVR5cGU9bCx0aGlzLnJvb3ROb2RlPWF9c2V0VGFibGUobCl7dGhpcy5ub2Rlc1Bvb2wmJnRoaXMubm9kZXNQb29sLnNldFJvb3REb2N1bWVudChsLnJvb3REb2N1bWVudCksdGhpcy50YWJsZT1sfWFkanVzdCgpe31yZW5kZXIoKXt9fWZ1bmN0aW9uIHBmZShjLGwsYSl7cmV0dXJuKGw9''@;'; put 'put ''ZnVuY3Rpb24gQVhlKGMpe3ZhciBsPWZ1bmN0aW9uIGtYZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVv''@;'; put 'put ''ZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0o''@;'; put 'put ''bCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgRFhlIGV4dGVuZHMga0V7Y29uc3RydWN0b3IoKXtzdXBlcigiVEgiKSxwZmUodGhpcywib3JkZXJWaWV3cyIs''@;'; put 'put ''bmV3IFdlYWtNYXApLHBmZSh0aGlzLCJzb3VyY2VSb3dJbmRleCIsMCl9b2J0YWluT3JkZXJWaWV3KGwpe2xldCBhO3JldHVybiB0aGlzLm9yZGVyVmlld3MuaGFzKGwpP2E9dGhpcy5vcmRlclZpZXdzLmdldChsKTooYT1uZXcgaGZlKGwsZD0+dGhpcy5ub2Rlc1Bvb2wub2J0YWluKHRoaXMu''@;'; put 'put ''c291cmNlUm93SW5kZXgsZCkpLHRoaXMub3JkZXJWaWV3cy5zZXQobCxhKSksYX1yZW5kZXIoKXtjb25zdHtyb3dzVG9SZW5kZXI6bCxyb3dIZWFkZXJGdW5jdGlvbnM6YSxyb3dIZWFkZXJzQ291bnQ6ZCxyb3dzOmgsY2VsbHM6Zn09dGhpcy50YWJsZTtmb3IobGV0IHY9MDt2PGw7disrKXtj''@;'; put 'put ''b25zdCBNPXRoaXMudGFibGUucmVuZGVyZWRSb3dUb1NvdXJjZSh2KSxEPWguZ2V0UmVuZGVyZWROb2RlKHYpO3RoaXMuc291cmNlUm93SW5kZXg9TTtjb25zdCBaPXRoaXMub2J0YWluT3JkZXJWaWV3KEQpLG5lPWYub2J0YWluT3JkZXJWaWV3KEQpO1ouYXBwZW5kVmlldyhuZSkuc2V0U2l6''@;'; put 'put ''ZShkKS5zZXRPZmZzZXQoMCkuc3RhcnQoKTtmb3IobGV0IGNlPTA7Y2U8ZDtjZSsrKXtaLnJlbmRlcigpO2NvbnN0IGJlPVouZ2V0Q3VycmVudE5vZGUoKTtiZS5jbGFzc05hbWU9IiIsYmUucmVtb3ZlQXR0cmlidXRlKCJzdHlsZSIpLEg3KGJlLFtuZXcgUmVnRXhwKCJhcmlhLSguKikiKSxu''@;'; put 'put ''ZXcgUmVnRXhwKCJyb2xlIildKSx0aGlzLnRhYmxlLmlzQXJpYUVuYWJsZWQoKSYmdmEoYmUsW1sicm9sZSIsInJvd2hlYWRlciJdLFsic2NvcGUiLCJyb3ciXSxpJChjZSsxKSxQNygtMSldKSxhW2NlXShNLGJlLGNlKX1aLmVuZCgpfX19Y2xhc3MgSVhlIGV4dGVuZHMga0V7Y29uc3RydWN0''@;'; put 'put ''b3IobCl7c3VwZXIobnVsbCxsKX1hZGp1c3QoKXtjb25zdHtjb2x1bW5IZWFkZXJzQ291bnQ6bCxyb3dIZWFkZXJzQ291bnQ6YX09dGhpcy50YWJsZTtsZXQgZD10aGlzLnJvb3ROb2RlLmZpcnN0Q2hpbGQ7aWYobCl7Y29uc3R7Y29sdW1uc1RvUmVuZGVyOmh9PXRoaXMudGFibGUsZj1oK2E7''@;'; put 'put ''Zm9yKGxldCBNPTAsRD1sO008RDtNKyspe2ZvcihkPXRoaXMucm9vdE5vZGUuY2hpbGROb2Rlc1tNXSxkfHwoZD10aGlzLnRhYmxlLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ciIpLHRoaXMucm9vdE5vZGUuYXBwZW5kQ2hpbGQoZCkpLHRoaXMucmVuZGVyZWROb2Rlcz1kLmNoaWxk''@;'; put 'put ''Tm9kZXMubGVuZ3RoO3RoaXMucmVuZGVyZWROb2RlczxmOylkLmFwcGVuZENoaWxkKHRoaXMudGFibGUucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRoIikpLHRoaXMucmVuZGVyZWROb2Rlcys9MTtmb3IoO3RoaXMucmVuZGVyZWROb2Rlcz5mOylkLnJlbW92ZUNoaWxkKGQubGFzdENo''@;'; put 'put ''aWxkKSx0aGlzLnJlbmRlcmVkTm9kZXMtPTF9Y29uc3Qgdj10aGlzLnJvb3ROb2RlLmNoaWxkTm9kZXMubGVuZ3RoO2lmKHY+bClmb3IobGV0IE09bDtNPHY7TSsrKXRoaXMucm9vdE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5yb290Tm9kZS5sYXN0Q2hpbGQpfWVsc2UgZCYmd3AoZCl9cmVuZGVy''@;'; put 'put ''KCl7Y29uc3R7Y29sdW1uSGVhZGVyc0NvdW50Omx9PXRoaXMudGFibGU7dGhpcy50YWJsZS5pc0FyaWFFbmFibGVkKCkmJnZhKHRoaXMucm9vdE5vZGUsW1sicm9sZSIsInJvd2dyb3VwIl1dKTtmb3IobGV0IGE9MDthPGw7YSs9MSl7Y29uc3R7Y29sdW1uSGVhZGVyRnVuY3Rpb25zOmQsY29s''@;'; put 'put ''dW1uc1RvUmVuZGVyOmgscm93SGVhZGVyc0NvdW50OmZ9PXRoaXMudGFibGUsdj10aGlzLnJvb3ROb2RlLmNoaWxkTm9kZXNbYV07dGhpcy50YWJsZS5pc0FyaWFFbmFibGVkKCkmJnZhKHYsW1sicm9sZSIsInJvdyJdLGQyZShhKzEpXSk7Zm9yKGxldCBNPS0xKmY7TTxoO00rPTEpe2NvbnN0''@;'; put 'put ''IEQ9dGhpcy50YWJsZS5yZW5kZXJlZENvbHVtblRvU291cmNlKE0pLFo9di5jaGlsZE5vZGVzW00rZl07Wi5jbGFzc05hbWU9IiIsWi5yZW1vdmVBdHRyaWJ1dGUoInN0eWxlIiksSDcoWixbbmV3IFJlZ0V4cCgiYXJpYS0oLiopIiksbmV3IFJlZ0V4cCgicm9sZSIpXSksdGhpcy50YWJsZS5p''@;'; put 'put ''c0FyaWFFbmFibGVkKCkmJnZhKFosW2kkKE0rMSt0aGlzLnRhYmxlLnJvd0hlYWRlcnNDb3VudCksUDcoLTEpLFsicm9sZSIsImNvbHVtbmhlYWRlciJdLC4uLk0+PTA/W1sic2NvcGUiLCJjb2wiXV06W1sicm9sZSIsInJvdyJdXV0pLGRbYV0oRCxaLGEpfX19fWxldCBnZmU9ITE7Y2xhc3Mg''@;'; put 'put ''UlhlIGV4dGVuZHMga0V7Y29uc3RydWN0b3IobCl7c3VwZXIobnVsbCxsKX1hZGp1c3QoKXtjb25zdHtjb2x1bW5zVG9SZW5kZXI6bCxyb3dIZWFkZXJzQ291bnQ6YX09dGhpcy50YWJsZSxkPWwrYTtmb3IoO3RoaXMucmVuZGVyZWROb2RlczxkOyl0aGlzLnJvb3ROb2RlLmFwcGVuZENoaWxk''@;'; put 'put ''KHRoaXMudGFibGUucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNvbCIpKSx0aGlzLnJlbmRlcmVkTm9kZXMrPTE7Zm9yKDt0aGlzLnJlbmRlcmVkTm9kZXM+ZDspdGhpcy5yb290Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnJvb3ROb2RlLmxhc3RDaGlsZCksdGhpcy5yZW5kZXJlZE5vZGVz''@;'; put 'put ''LT0xfXJlbmRlcigpe3RoaXMuYWRqdXN0KCk7Y29uc3R7Y29sdW1uc1RvUmVuZGVyOmwscm93SGVhZGVyc0NvdW50OmF9PXRoaXMudGFibGU7IWdmZSYmbD4xZTMmJihnZmU9ITAsdGwoZmxgUGVyZm9ybWFuY2UgdGlwOiBIYW5kc29udGFibGUgcmVuZGVyZWQgbW9yZSB0aGFuIDEwMDAgdmlz''@;'; put 'put ''aWJsZSBjb2x1bW5zLlx4MjAKICAgICAgICBDb25zaWRlciBsaW1pdGluZyB0aGUgbnVtYmVyIG9mIHJlbmRlcmVkIGNvbHVtbnMgYnkgc3BlY2lmeWluZyB0aGUgdGFibGUgd2lkdGggYW5kL29yXHgyMAogICAgICAgIHR1cm5pbmcgb2ZmIHRoZSAicmVuZGVyQWxsQ29sdW1ucyIgb3B0aW9u''@;'; put 'put ''LmApKTtmb3IobGV0IGg9MDtoPGE7aCsrKXtjb25zdCBmPXRoaXMudGFibGUucmVuZGVyZWRDb2x1bW5Ub1NvdXJjZShoKSx2PXRoaXMudGFibGUuY29sdW1uVXRpbHMuZ2V0SGVhZGVyV2lkdGgoZik7dGhpcy5yb290Tm9kZS5jaGlsZE5vZGVzW2hdLnN0eWxlLndpZHRoPWAke3Z9cHhgfWZv''@;'; put 'put ''cihsZXQgaD0wO2g8bDtoKyspe2NvbnN0IGY9dGhpcy50YWJsZS5yZW5kZXJlZENvbHVtblRvU291cmNlKGgpLHY9dGhpcy50YWJsZS5jb2x1bW5VdGlscy5nZXRXaWR0aChmKTt0aGlzLnJvb3ROb2RlLmNoaWxkTm9kZXNbaCthXS5zdHlsZS53aWR0aD1gJHt2fXB4YH1jb25zdCBkPXRoaXMu''@;'; put 'put ''cm9vdE5vZGUuZmlyc3RDaGlsZDtkJiZUaShkLCJyb3dIZWFkZXIiKX19bGV0IG1mZT0hMTtjbGFzcyBGWGUgZXh0ZW5kcyBrRXtjb25zdHJ1Y3RvcihsKXtzdXBlcigiVFIiLGwpLGZ1bmN0aW9uIExYZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gT1hlKGMpe3ZhciBsPWZ1bmN0aW9uIFBY''@;'; put 'put ''ZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3Io''@;'; put 'put ''IkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxs''@;'; put 'put ''LHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsIm9yZGVyVmlldyIsdm9pZCAwKSx0aGlzLm9yZGVyVmlldz1uZXcgZGZlKGwsYT0+dGhpcy5ub2Rlc1Bvb2wub2J0YWluKGEpKX1nZXRSZW5kZXJlZE5vZGUobCl7cmV0''@;'; put 'put ''dXJuIHRoaXMub3JkZXJWaWV3LmdldE5vZGUobCl9aGFzU3RhbGVDb250ZW50KGwpe3JldHVybiB0aGlzLm9yZGVyVmlldy5oYXNTdGFsZUNvbnRlbnQobCl9cmVuZGVyKCl7Y29uc3R7cm93c1RvUmVuZGVyOmx9PXRoaXMudGFibGU7IW1mZSYmbD4xZTMmJihtZmU9ITAsdGwoZmxgUGVyZm9y''@;'; put 'put ''bWFuY2UgdGlwOiBIYW5kc29udGFibGUgcmVuZGVyZWQgbW9yZSB0aGFuIDEwMDAgdmlzaWJsZSByb3dzLlx4MjAKICAgICAgICBDb25zaWRlciBsaW1pdGluZyB0aGUgbnVtYmVyIG9mIHJlbmRlcmVkIHJvd3MgYnkgc3BlY2lmeWluZyB0aGUgdGFibGUgaGVpZ2h0IGFuZC9vclx4MjAKICAg''@;'; put 'put ''ICAgICB0dXJuaW5nIG9mZiB0aGUgInJlbmRlckFsbFJvd3MiIG9wdGlvbi5gKSksdGhpcy50YWJsZS5pc0FyaWFFbmFibGVkKCkmJnZhKHRoaXMucm9vdE5vZGUsW1sicm9sZSIsInJvd2dyb3VwIl1dKSx0aGlzLm9yZGVyVmlldy5zZXRTaXplKGwpLnNldE9mZnNldCh0aGlzLnRhYmxlLnJl''@;'; put 'put ''bmRlcmVkUm93VG9Tb3VyY2UoMCkpLnN0YXJ0KCk7Zm9yKGxldCBoPTA7aDxsO2grKyl7dGhpcy5vcmRlclZpZXcucmVuZGVyKCk7Y29uc3QgZj10aGlzLm9yZGVyVmlldy5nZXRDdXJyZW50Tm9kZSgpLHY9dGhpcy50YWJsZS5yZW5kZXJlZFJvd1RvU291cmNlKGgpO3ZhciBhLGQ7dGhpcy50''@;'; put 'put ''YWJsZS5pc0FyaWFFbmFibGVkKCkmJnZhKGYsW1sicm9sZSIsInJvdyJdLGQyZSh2KyhudWxsIT09KGE9bnVsbD09PShkPXRoaXMudGFibGUucm93VXRpbHMpfHx2b2lkIDA9PT1kfHxudWxsPT09KGQ9ZC5kYXRhQWNjZXNzT2JqZWN0KXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5jb2x1bW5IZWFk''@;'; put 'put ''ZXJzLmxlbmd0aCkmJnZvaWQgMCE9PWE/YTowKSsxKV0pLCh2KzEpJTI9PTA/cGEoZiwiaHRfX3Jvd19ldmVuIil8fChjYShmLCJodF9fcm93X29kZCIpLFRpKGYsImh0X19yb3dfZXZlbiIpKTpwYShmLCJodF9fcm93X29kZCIpfHwoY2EoZiwiaHRfX3Jvd19ldmVuIiksVGkoZiwiaHRfX3Jv''@;'; put 'put ''d19vZGQiKSl9dGhpcy5vcmRlclZpZXcuZW5kKCl9fWZ1bmN0aW9uIHZmZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gSFhlKGMpe3ZhciBsPWZ1bmN0aW9uIE5YZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lm''@;'; put 'put ''KHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJp''@;'; put 'put ''bmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgVlhl''@;'; put 'put ''IGV4dGVuZHMga0V7Y29uc3RydWN0b3IoKXtzdXBlcigiVEQiKSx2ZmUodGhpcywib3JkZXJWaWV3cyIsbmV3IFdlYWtNYXApLHZmZSh0aGlzLCJzb3VyY2VSb3dJbmRleCIsMCl9b2J0YWluT3JkZXJWaWV3KGwpe2xldCBhO3JldHVybiB0aGlzLm9yZGVyVmlld3MuaGFzKGwpP2E9dGhpcy5v''@;'; put 'put ''cmRlclZpZXdzLmdldChsKTooYT1uZXcgaGZlKGwsZD0+dGhpcy5ub2Rlc1Bvb2wub2J0YWluKHRoaXMuc291cmNlUm93SW5kZXgsZCksdGhpcy5ub2RlVHlwZSksdGhpcy5vcmRlclZpZXdzLnNldChsLGEpKSxhfXJlbmRlcigpe2NvbnN0e3Jvd3NUb1JlbmRlcjpsLGNvbHVtbnNUb1JlbmRl''@;'; put 'put ''cjphLHJvd3M6ZCxyb3dIZWFkZXJzOmh9PXRoaXMudGFibGU7Zm9yKGxldCBNPTA7TTxsO00rKyl7Y29uc3QgRD10aGlzLnRhYmxlLnJlbmRlcmVkUm93VG9Tb3VyY2UoTSksWj1kLmdldFJlbmRlcmVkTm9kZShNKTt0aGlzLnNvdXJjZVJvd0luZGV4PUQ7Y29uc3QgbmU9dGhpcy5vYnRhaW5P''@;'; put 'put ''cmRlclZpZXcoWiksY2U9aC5vYnRhaW5PcmRlclZpZXcoWik7bmUucHJlcGVuZFZpZXcoY2UpLnNldFNpemUoYSkuc2V0T2Zmc2V0KDApLnN0YXJ0KCk7Zm9yKGxldCBiZT0wO2JlPGE7YmUrKyl7bmUucmVuZGVyKCk7Y29uc3QgRWU9dGhpcy50YWJsZS5yZW5kZXJlZENvbHVtblRvU291cmNl''@;'; put 'put ''KGJlKSxCZT1uZS5nZXRDdXJyZW50Tm9kZSgpO3ZhciBmLHY7cGEoQmUsImhpZGUiKXx8KEJlLmNsYXNzTmFtZT0iIiksQmUucmVtb3ZlQXR0cmlidXRlKCJzdHlsZSIpLEJlLnJlbW92ZUF0dHJpYnV0ZSgiZGlyIiksSDcoQmUsW25ldyBSZWdFeHAoImFyaWEtKC4qKSIpLG5ldyBSZWdFeHAo''@;'; put 'put ''InJvbGUiKV0pLHRoaXMudGFibGUuY2VsbFJlbmRlcmVyKEQsRWUsQmUpLHRoaXMudGFibGUuaXNBcmlhRW5hYmxlZCgpJiZ2YShCZSxbLi4uQmUuaGFzQXR0cmlidXRlKCJyb2xlIik/W106W1sicm9sZSIsImdyaWRjZWxsIl1dLFA3KC0xKSxpJChFZSsobnVsbCE9PShmPW51bGw9PT0odj10''@;'; put 'put ''aGlzLnRhYmxlLnJvd1V0aWxzKXx8dm9pZCAwPT09dnx8bnVsbD09PSh2PXYuZGF0YUFjY2Vzc09iamVjdCl8fHZvaWQgMD09PXY/dm9pZCAwOnYucm93SGVhZGVycy5sZW5ndGgpJiZ2b2lkIDAhPT1mP2Y6MCkrMSldKX1uZS5lbmQoKX19fWZ1bmN0aW9uIFh1KGMsbCxhKXtyZXR1cm4obD1m''@;'; put 'put ''dW5jdGlvbiBCWGUoYyl7dmFyIGw9ZnVuY3Rpb24galhlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9m''@;'; put 'put ''IGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShs''@;'; put 'put ''KSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyB6WGV7Y29uc3RydWN0b3IobCl7bGV0e2NlbGxSZW5kZXJlcjphLHN0eWxlc0hhbmRsZXI6ZH09YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O1h1KHRoaXMsInJvb3ROb2RlIix2b2lkIDApLFh1KHRoaXMsInJvb3REb2N1bWVudCIsdm9pZCAwKSxYdSh0aGlzLCJyb3dIZWFkZXJzIixudWxsKSxYdSh0aGlzLCJjb2x1bW5IZWFkZXJzIixudWxsKSxY''@;'; put 'put ''dSh0aGlzLCJjb2xHcm91cCIsbnVsbCksWHUodGhpcywicm93cyIsbnVsbCksWHUodGhpcywiY2VsbHMiLG51bGwpLFh1KHRoaXMsInJvd0ZpbHRlciIsbnVsbCksWHUodGhpcywiY29sdW1uRmlsdGVyIixudWxsKSxYdSh0aGlzLCJyb3dVdGlscyIsbnVsbCksWHUodGhpcywiY29sdW1uVXRp''@;'; put 'put ''bHMiLG51bGwpLFh1KHRoaXMsInJvd3NUb1JlbmRlciIsMCksWHUodGhpcywiY29sdW1uc1RvUmVuZGVyIiwwKSxYdSh0aGlzLCJyb3dIZWFkZXJGdW5jdGlvbnMiLFtdKSxYdSh0aGlzLCJyb3dIZWFkZXJzQ291bnQiLDApLFh1KHRoaXMsImNvbHVtbkhlYWRlckZ1bmN0aW9ucyIsW10pLFh1''@;'; put 'put ''KHRoaXMsImNvbHVtbkhlYWRlcnNDb3VudCIsMCksWHUodGhpcywiY2VsbFJlbmRlcmVyIix2b2lkIDApLFh1KHRoaXMsImFjdGl2ZU92ZXJsYXlOYW1lIix2b2lkIDApLFh1KHRoaXMsInN0eWxlc0hhbmRsZXIiLHZvaWQgMCksdGhpcy5yb290Tm9kZT1sLHRoaXMucm9vdERvY3VtZW50PXRo''@;'; 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 ''fX19Y2xhc3MgVVhle2NvbnN0cnVjdG9yKCl7bGV0e1RBQkxFOmwsVEhFQUQ6YSxDT0xHUk9VUDpkLFRCT0RZOmgscm93VXRpbHM6Zixjb2x1bW5VdGlsczp2LGNlbGxSZW5kZXJlcjpNLHN0eWxlc0hhbmRsZXI6RH09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/''@;'; put 'put ''YXJndW1lbnRzWzBdOnt9O3RoaXMucmVuZGVyZXI9bmV3IHpYZShsLHtjZWxsUmVuZGVyZXI6TSxzdHlsZXNIYW5kbGVyOkR9KSx0aGlzLnJlbmRlcmVyLnNldFJlbmRlcmVycyh7cm93SGVhZGVyczpuZXcgRFhlLGNvbHVtbkhlYWRlcnM6bmV3IElYZShhKSxjb2xHcm91cDpuZXcgUlhlKGQp''@;'; put 'put ''LHJvd3M6bmV3IEZYZShoKSxjZWxsczpuZXcgVlhlfSksdGhpcy5yZW5kZXJlci5zZXRBeGlzVXRpbHMoZix2KX1zZXRBY3RpdmVPdmVybGF5TmFtZShsKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5zZXRBY3RpdmVPdmVybGF5TmFtZShsKSx0aGlzfXNldEZpbHRlcnMobCxhKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5yZW5kZXJlci5zZXRGaWx0ZXJzKGwsYSksdGhpc31zZXRWaWV3cG9ydFNpemUobCxhKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5zZXRWaWV3cG9ydFNpemUobCxhKSx0aGlzfXNldEhlYWRlckNvbnRlbnRSZW5kZXJlcnMobCxhKXtyZXR1cm4gdGhpcy5yZW5kZXJlci5zZXRIZWFkZXJDb250''@;'; put 'put ''ZW50UmVuZGVyZXJzKGwsYSksdGhpc31hZGp1c3QoKXt0aGlzLnJlbmRlcmVyLmFkanVzdCgpfXJlbmRlcigpe3RoaXMucmVuZGVyZXIucmVuZGVyKCl9fWZ1bmN0aW9uIEokKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBaWGUoYyl7dmFyIGw9ZnVuY3Rpb24gV1hlKGMsbCl7aWYoIm9iamVj''@;'; put 'put ''dCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBt''@;'; put 'put ''dXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVy''@;'; put 'put ''YWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBZWGV7Y29uc3RydWN0b3IobCxhKXtKJCh0aGlzLCJkYXRhQWNjZXNzT2JqZWN0Iix2b2lkIDApLEokKHRoaXMsInd0U2V0dGluZ3MiLHZvaWQgMCksSiQodGhpcywiaGVhZGVyV2lkdGhzIixuZXcg''@;'; put 'put ''TWFwKSx0aGlzLmRhdGFBY2Nlc3NPYmplY3Q9bCx0aGlzLnd0U2V0dGluZ3M9YX1nZXRXaWR0aChsKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbldpZHRoIixsKXx8dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImRlZmF1bHRDb2x1bW5XaWR0aCIpfWdldEhl''@;'; put 'put ''YWRlckhlaWdodChsKXtsZXQgYT10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3R5bGVzSGFuZGxlci5nZXREZWZhdWx0Um93SGVpZ2h0KCk7Y29uc3QgZD10aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW2xdO3JldHVybiB2b2lkIDAhPT1kJiYo''@;'; put 'put ''YT1hP01hdGgubWF4KGEsZCk6ZCksYX1nZXRIZWFkZXJXaWR0aChsKXtyZXR1cm4gdGhpcy5oZWFkZXJXaWR0aHMuZ2V0KHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFRhYmxlLmNvbHVtbkZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGwpKX1jYWxjdWxhdGVXaWR0aHMoKXtjb25zdHt3dFNldHRp''@;'; put 'put ''bmdzOmx9PXRoaXM7bGV0IGE9bC5nZXRTZXR0aW5nKCJyb3dIZWFkZXJXaWR0aCIpO2lmKGE9bC5nZXRTZXR0aW5nKCJvbk1vZGlmeVJvd0hlYWRlcldpZHRoIixhKSxudWxsIT1hKXtjb25zdCBkPWwuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLmxlbmd0aCxoPWwuZ2V0U2V0dGluZygiZGVm''@;'; put 'put ''YXVsdENvbHVtbldpZHRoIik7Zm9yKGxldCBmPTA7ZjxkO2YrKyl7bGV0IHY9QXJyYXkuaXNBcnJheShhKT9hW2ZdOmE7dj12Pz9oLHRoaXMuaGVhZGVyV2lkdGhzLnNldChmLHYpfX19fWZ1bmN0aW9uIGJmZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gR1hlKGMpe3ZhciBsPWZ1bmN0aW9u''@;'; put 'put ''ICRYZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJy''@;'; put 'put ''b3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''YyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgS1hle2NvbnN0cnVjdG9yKGwsYSl7YmZlKHRoaXMsImRhdGFBY2Nlc3NPYmplY3QiLHZvaWQgMCksYmZlKHRoaXMsInd0U2V0dGluZ3MiLHZvaWQgMCksdGhpcy5k''@;'; put 'put ''YXRhQWNjZXNzT2JqZWN0PWwsdGhpcy53dFNldHRpbmdzPWF9Z2V0SGVpZ2h0KGwpe2xldCBhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWlnaHQiLGwpO2NvbnN0IGQ9dGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkUm93c1tsXTtyZXR1cm4gdm9p''@;'; put 'put ''ZCAwIT09ZCYmKGE9dm9pZCAwPT09YT9kOk1hdGgubWF4KGEsZCkpLGF9Z2V0SGVpZ2h0QnlPdmVybGF5TmFtZShsLGEpe2xldCBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWlnaHRCeU92ZXJsYXlOYW1lIixsLGEpO2NvbnN0IGg9dGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0''@;'; put 'put ''Vmlld3BvcnQub3ZlcnNpemVkUm93c1tsXTtyZXR1cm4gdm9pZCAwIT09aCYmKGQ9dm9pZCAwPT09ZD9oOk1hdGgubWF4KGQsaCkpLGR9fWNvbnN0IFo3PSJ0b3AiLEVwPSJib3R0b20iLFc3PSJpbmxpbmVfc3RhcnQiLFk3PSJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciIsTm09ImJvdHRvbV9p''@;'; put 'put ''bmxpbmVfc3RhcnRfY29ybmVyIix5ZmU9W1o3LEVwLFc3LFk3LE5tXSxxWGU9bmV3IE1hcChbW1o3LGBodF9jbG9uZV8ke1o3fWBdLFtFcCxgaHRfY2xvbmVfJHtFcH1gXSxbVzcsYGh0X2Nsb25lXyR7Vzd9IGh0X2Nsb25lX2xlZnRgXSxbWTcsYGh0X2Nsb25lXyR7WTd9IGh0X2Nsb25lX3Rv''@;'; put 'put ''cF9sZWZ0X2Nvcm5lcmBdLFtObSxgaHRfY2xvbmVfJHtObX0gaHRfY2xvbmVfYm90dG9tX2xlZnRfY29ybmVyYF1dKTtmdW5jdGlvbiBUcChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gWFhlKGMpe3ZhciBsPWZ1bmN0aW9uIEpYZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0''@;'; put 'put ''dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRp''@;'; put 'put ''dmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxl''@;'; put 'put ''OiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgaF89Y2xhc3MgUVhle2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7VHAodGhpcywid3RTZXR0aW5ncyIsbnVsbCksVHAodGhpcywiZG9tQmluZGluZ3MiLHZvaWQgMCksVHAodGhpcywiVEJPRFkiLG51bGwpLFRwKHRoaXMsIlRIRUFEIixu''@;'; put 'put ''dWxsKSxUcCh0aGlzLCJDT0xHUk9VUCIsbnVsbCksVHAodGhpcywiaGFzVGFibGVIZWlnaHQiLCEwKSxUcCh0aGlzLCJoYXNUYWJsZVdpZHRoIiwhMCksVHAodGhpcywiaXNUYWJsZVZpc2libGUiLCExKSxUcCh0aGlzLCJ0YWJsZU9mZnNldCIsMCksVHAodGhpcywiaG9sZGVyT2Zmc2V0Iiww''@;'; put 'put ''KSx0aGlzLmRvbUJpbmRpbmdzPWQsdGhpcy5pc01hc3Rlcj0ibWFzdGVyIj09PWYsdGhpcy5uYW1lPWYsdGhpcy5kYXRhQWNjZXNzT2JqZWN0PWwsdGhpcy5mYWNhZGVHZXR0ZXI9YSx0aGlzLnd0U2V0dGluZ3M9aCx0aGlzLmluc3RhbmNlPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53b3QsdGhp''@;'; put 'put ''cy53b3Q9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LndvdCx0aGlzLlRBQkxFPWQucm9vdFRhYmxlLGEkKHRoaXMuVEFCTEUpLHRoaXMuc3ByZWFkZXI9dGhpcy5jcmVhdGVTcHJlYWRlcih0aGlzLlRBQkxFKSx0aGlzLmhpZGVyPXRoaXMuY3JlYXRlSGlkZXIodGhpcy5zcHJlYWRlciksdGhpcy5o''@;'; put 'put ''b2xkZXI9dGhpcy5jcmVhdGVIb2xkZXIodGhpcy5oaWRlciksdGhpcy53dFJvb3RFbGVtZW50PXRoaXMuaG9sZGVyLnBhcmVudE5vZGUsdGhpcy5pc01hc3RlciYmdGhpcy5hbGlnbk92ZXJsYXlzV2l0aFRyaW1taW5nQ29udGFpbmVyKCksdGhpcy5maXhUYWJsZURvbVRyZWUoKSx0aGlzLnJv''@;'; put 'put ''d0ZpbHRlcj1udWxsLHRoaXMuY29sdW1uRmlsdGVyPW51bGwsdGhpcy5jb3JyZWN0SGVhZGVyV2lkdGg9ITE7Y29uc3Qgdj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZ1B1cmUoInJvd0hlYWRlcldpZHRoIik7dGhpcy53dFNldHRpbmdzLnVwZGF0ZSgicm93SGVhZGVyV2lkdGgiLCgpPT50''@;'; put 'put ''aGlzLl9tb2RpZnlSb3dIZWFkZXJXaWR0aCh2KSksdGhpcy5yb3dVdGlscz1uZXcgS1hlKHRoaXMuZGF0YUFjY2Vzc09iamVjdCx0aGlzLnd0U2V0dGluZ3MpLHRoaXMuY29sdW1uVXRpbHM9bmV3IFlYZSh0aGlzLmRhdGFBY2Nlc3NPYmplY3QsdGhpcy53dFNldHRpbmdzKSx0aGlzLnRhYmxl''@;'; put 'put ''UmVuZGVyZXI9bmV3IFVYZSh7VEFCTEU6dGhpcy5UQUJMRSxUSEVBRDp0aGlzLlRIRUFELENPTEdST1VQOnRoaXMuQ09MR1JPVVAsVEJPRFk6dGhpcy5UQk9EWSxyb3dVdGlsczp0aGlzLnJvd1V0aWxzLGNvbHVtblV0aWxzOnRoaXMuY29sdW1uVXRpbHMsY2VsbFJlbmRlcmVyOnRoaXMud3RT''@;'; put 'put ''ZXR0aW5ncy5nZXRTZXR0aW5nUHVyZSgiY2VsbFJlbmRlcmVyIiksc3R5bGVzSGFuZGxlcjp0aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3R5bGVzSGFuZGxlcn0pfWlzKGwpe3JldHVybiB0aGlzLm5hbWU9PT1sfWZpeFRhYmxlRG9tVHJlZSgpe2NvbnN0IGw9dGhpcy5kb21CaW5kaW5ncy5yb290''@;'; put 'put ''RG9jdW1lbnQ7dGhpcy5UQk9EWT10aGlzLlRBQkxFLnF1ZXJ5U2VsZWN0b3IoInRib2R5IiksdGhpcy5UQk9EWXx8KHRoaXMuVEJPRFk9bC5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpLHRoaXMuVEFCTEUuYXBwZW5kQ2hpbGQodGhpcy5UQk9EWSkpLHRoaXMuVEhFQUQ9dGhpcy5UQUJMRS5xdWVy''@;'; put 'put ''eVNlbGVjdG9yKCJ0aGVhZCIpLHRoaXMuVEhFQUR8fCh0aGlzLlRIRUFEPWwuY3JlYXRlRWxlbWVudCgidGhlYWQiKSx0aGlzLlRBQkxFLmluc2VydEJlZm9yZSh0aGlzLlRIRUFELHRoaXMuVEJPRFkpKSx0aGlzLkNPTEdST1VQPXRoaXMuVEFCTEUucXVlcnlTZWxlY3RvcigiY29sZ3JvdXAi''@;'; put 'put ''KSx0aGlzLkNPTEdST1VQfHwodGhpcy5DT0xHUk9VUD1sLmNyZWF0ZUVsZW1lbnQoImNvbGdyb3VwIiksdGhpcy5UQUJMRS5pbnNlcnRCZWZvcmUodGhpcy5DT0xHUk9VUCx0aGlzLlRIRUFEKSl9Y3JlYXRlU3ByZWFkZXIobCl7Y29uc3QgYT1sLnBhcmVudE5vZGU7bGV0IGQ7cmV0dXJuKCFh''@;'; put 'put ''fHxhLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREV8fCFwYShhLCJ3dEhvbGRlciIpKSYmKGQ9dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksZC5jbGFzc05hbWU9Ind0U3ByZWFkZXIiLGEmJmEuaW5zZXJ0QmVmb3JlKGQsbCksZC5hcHBlbmRD''@;'; put 'put ''aGlsZChsKSksZC5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJhcmlhVGFncyIpJiZ2YShkLFtfcCgpXSksZH1jcmVhdGVIaWRlcihsKXtjb25zdCBhPWwucGFyZW50Tm9kZTtsZXQgZDtyZXR1cm4oIWF8fGEubm9kZVR5cGUhPT1Ob2RlLkVM''@;'; put 'put ''RU1FTlRfTk9ERXx8IXBhKGEsInd0SG9sZGVyIikpJiYoZD10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxkLmNsYXNzTmFtZT0id3RIaWRlciIsYSYmYS5pbnNlcnRCZWZvcmUoZCxsKSxkLmFwcGVuZENoaWxkKGwpKSx0aGlzLnd0U2V0dGluZ3Mu''@;'; put 'put ''Z2V0U2V0dGluZygiYXJpYVRhZ3MiKSYmdmEoZCxbX3AoKV0pLGR9Y3JlYXRlSG9sZGVyKGwpe2NvbnN0IGE9bC5wYXJlbnROb2RlO2xldCBkO3JldHVybighYXx8YS5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFfHwhcGEoYSwid3RIb2xkZXIiKSkmJihkPXRoaXMuZG9tQmluZGluZ3Mu''@;'; put 'put ''cm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixkLmNsYXNzTmFtZT0id3RIb2xkZXIiLHZhKGQsW1A3KC0xKV0pLGEmJmEuaW5zZXJ0QmVmb3JlKGQsbCksdGhpcy5pc01hc3RlciYmKGQucGFyZW50Tm9kZS5jbGFzc05hbWUrPSJo''@;'; put 'put ''dF9tYXN0ZXIgaGFuZHNvbnRhYmxlIixkLnBhcmVudE5vZGUuc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nUHVyZSgicnRsTW9kZSIpPyJydGwiOiJsdHIiKSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiYXJpYVRhZ3MiKSYmdmEoZC5wYXJlbnROb2Rl''@;'; put 'put ''LFtfcCgpXSkpLGQuYXBwZW5kQ2hpbGQobCkpLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJhcmlhVGFncyIpJiZ2YShkLFtfcCgpXSksZH1kcmF3KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtjb25zdHt3dFNldHRp''@;'; put 'put ''bmdzOmF9PXRoaXMse3d0T3ZlcmxheXM6ZCx3dFZpZXdwb3J0Omh9PXRoaXMuZGF0YUFjY2Vzc09iamVjdCxmPWEuZ2V0U2V0dGluZygidG90YWxSb3dzIiksdj1hLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLE09YS5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIiksRD1NLmxlbmd0aCxaPWEu''@;'; put 'put ''Z2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLG5lPVoubGVuZ3RoO2xldCBjZT1sO2lmKHRoaXMuaXNNYXN0ZXImJihkLmJlZm9yZURyYXcoKSx0aGlzLmhvbGRlck9mZnNldD16MCh0aGlzLmhvbGRlciksY2U9aC5jcmVhdGVDYWxjdWxhdG9ycyhjZSksRCYmIWEuZ2V0U2V0dGluZygiZml4''@;'; put 'put ''ZWRDb2x1bW5zU3RhcnQiKSkpe2NvbnN0IEVlPWQuaW5saW5lU3RhcnRPdmVybGF5LmdldFNjcm9sbFBvc2l0aW9uKCksQmU9dGhpcy5jb3JyZWN0SGVhZGVyV2lkdGg7dGhpcy5jb3JyZWN0SGVhZGVyV2lkdGg9MCE9PUVlLEJlIT09dGhpcy5jb3JyZWN0SGVhZGVyV2lkdGgmJihjZT0hMSl9''@;'; put 'put ''aWYoY2UpdGhpcy5pc01hc3RlciYmZC5yZWZyZXNoKCEwKTtlbHNle3RoaXMudGFibGVPZmZzZXQ9dGhpcy5pc01hc3Rlcj96MCh0aGlzLlRBQkxFKTp0aGlzLmRhdGFBY2Nlc3NPYmplY3QucGFyZW50VGFibGVPZmZzZXQ7Y29uc3QgRWU9Zj4wP3RoaXMuZ2V0Rmlyc3RSZW5kZXJlZFJvdygp''@;'; put 'put ''OjAsQmU9dj4wP3RoaXMuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpOjA7dGhpcy5yb3dGaWx0ZXI9bmV3IGFYZShFZSxmLG5lKSx0aGlzLmNvbHVtbkZpbHRlcj1uZXcgblhlKEJlLHYsRCk7bGV0IHFlPSEwO2lmKHRoaXMuaXNNYXN0ZXIpe3RoaXMuYWxpZ25PdmVybGF5c1dpdGhUcmltbWlu''@;'; put 'put ''Z0NvbnRhaW5lcigpO2NvbnN0IG50PXt9O3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJiZWZvcmVEcmF3IiwhMCxudCkscWU9ITAhPT1udC5za2lwUmVuZGVyfXFlJiYodGhpcy50YWJsZVJlbmRlcmVyLnNldEhlYWRlckNvbnRlbnRSZW5kZXJlcnMoTSxaKSwodGhpcy5pcyhFcCl8fHRo''@;'; put 'put ''aXMuaXMoTm0pKSYmdGhpcy50YWJsZVJlbmRlcmVyLnNldEhlYWRlckNvbnRlbnRSZW5kZXJlcnMoTSxbXSksdGhpcy5yZXNldE92ZXJzaXplZFJvd3MoKSx0aGlzLnRhYmxlUmVuZGVyZXIuc2V0QWN0aXZlT3ZlcmxheU5hbWUodGhpcy5uYW1lKS5zZXRWaWV3cG9ydFNpemUodGhpcy5nZXRS''@;'; put 'put ''ZW5kZXJlZFJvd3NDb3VudCgpLHRoaXMuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKSkuc2V0RmlsdGVycyh0aGlzLnJvd0ZpbHRlcix0aGlzLmNvbHVtbkZpbHRlcikucmVuZGVyKCksdGhpcy5pc01hc3RlciYmdGhpcy5tYXJrT3ZlcnNpemVkQ29sdW1uSGVhZGVycygpLHRoaXMuYWRqdXN0''@;'; put 'put ''Q29sdW1uSGVhZGVySGVpZ2h0cygpLCh0aGlzLmlzTWFzdGVyfHx0aGlzLmlzKEVwKSkmJnRoaXMubWFya092ZXJzaXplZFJvd3MoKSx0aGlzLmlzTWFzdGVyPyh0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZXh0ZXJuYWxSb3dDYWxjdWxhdG9yIil8fGguY3JlYXRlVmlzaWJsZUNhbGN1''@;'; put 'put ''bGF0b3JzKCksZC5yZWZyZXNoKCExKSxkLmFwcGx5VG9ET00oKSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25EcmF3IiwhMCkpOnRoaXMuaXMoRXApJiZ0aGlzLmRhdGFBY2Nlc3NPYmplY3QuY2xvbmVTb3VyY2Uud3RPdmVybGF5cy5hZGp1c3RFbGVtZW50c1NpemUoKSl9bGV0IGJl''@;'; put 'put ''PSExO3JldHVybiB0aGlzLmlzTWFzdGVyJiYoYmU9ZC50b3BPdmVybGF5LnJlc2V0Rml4ZWRQb3NpdGlvbigpLGQuYm90dG9tT3ZlcmxheS5jbG9uZSYmKGJlPWQuYm90dG9tT3ZlcmxheS5yZXNldEZpeGVkUG9zaXRpb24oKXx8YmUpLGJlPWQuaW5saW5lU3RhcnRPdmVybGF5LnJlc2V0Rml4''@;'; put 'put ''ZWRQb3NpdGlvbigpfHxiZSxkLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSYmZC50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkucmVzZXRGaXhlZFBvc2l0aW9uKCksZC5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkmJmQuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5''@;'; put 'put ''LmNsb25lJiZkLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5yZXNldEZpeGVkUG9zaXRpb24oKSksYmU/KGQucmVmcmVzaEFsbCgpLGQuYWRqdXN0RWxlbWVudHNTaXplKCkpOnRoaXMuZGF0YUFjY2Vzc09iamVjdC5zZWxlY3Rpb25NYW5hZ2VyLnNldEFjdGl2ZU92ZXJsYXkodGhp''@;'; put 'put ''cy5mYWNhZGVHZXR0ZXIoKSkucmVuZGVyKGNlKSx0aGlzLmlzTWFzdGVyJiZkLmFmdGVyRHJhdygpLHRoaXMuZGF0YUFjY2Vzc09iamVjdC5kcmF3bj0hMCx0aGlzfW1hcmtJZk92ZXJzaXplZENvbHVtbkhlYWRlcihsKXtjb25zdCBhPXRoaXMuY29sdW1uRmlsdGVyLnJlbmRlcmVkVG9Tb3Vy''@;'; put 'put ''Y2UobCk7bGV0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg7Y29uc3QgaD10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3R5bGVzSGFuZGxlci5nZXREZWZhdWx0Um93SGVpZ2h0KCk7bGV0IGYsdixNO2NvbnN0IEQ9dGhpcy53dFNldHRpbmdzLmdl''@;'; put 'put ''dFNldHRpbmcoImNvbHVtbkhlYWRlckhlaWdodCIpfHxbXTtmb3IoO2Q7KWQtPTEsZj10aGlzLmdldENvbHVtbkhlYWRlckhlaWdodChkKSx2PXRoaXMuZ2V0Q29sdW1uSGVhZGVyKGEsZCksdiYmKE09bl8odiksKCFmJiZoPE18fGY8TSkmJih0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RWaWV3''@;'; put 'put ''cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW2RdPU0pLEFycmF5LmlzQXJyYXkoRCk/bnVsbCE9RFtkXSYmKHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnNbZF09RFtkXSk6aXNOYU4oRCl8fCh0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RW''@;'; put 'put ''aWV3cG9ydC5vdmVyc2l6ZWRDb2x1bW5IZWFkZXJzW2RdPUQpLHRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnNbZF08KERbZF18fEQpJiYodGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkQ29sdW1uSGVhZGVyc1tk''@;'; put 'put ''XT1EW2RdfHxEKSl9YWRqdXN0Q29sdW1uSGVhZGVySGVpZ2h0cygpe2NvbnN0e3d0U2V0dGluZ3M6bH09dGhpcyxhPXRoaXMuVEhFQUQuY2hpbGROb2RlcyxkPXRoaXMuZGF0YUFjY2Vzc09iamVjdC53dFZpZXdwb3J0Lm92ZXJzaXplZENvbHVtbkhlYWRlcnM7Zm9yKGxldCBmPTAsdj1sLmdl''@;'; put 'put ''dFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg7Zjx2O2YrKylpZihkW2ZdKXtpZighYVtmXXx8MD09PWFbZl0uY2hpbGROb2Rlcy5sZW5ndGgpcmV0dXJuO2FbZl0uY2hpbGROb2Rlc1swXS5zdHlsZS5oZWlnaHQ9YCR7ZFtmXX1weGB9fXJlc2V0T3ZlcnNpemVkUm93cygpe2NvbnN0''@;'; put 'put ''e3d0U2V0dGluZ3M6bH09dGhpcyx7d3RWaWV3cG9ydDphfT10aGlzLmRhdGFBY2Nlc3NPYmplY3Q7aWYoKHRoaXMuaXNNYXN0ZXJ8fHRoaXMuaXMoRXApKSYmIWwuZ2V0U2V0dGluZygiZXh0ZXJuYWxSb3dDYWxjdWxhdG9yIikpe2NvbnN0IGQ9dGhpcy5nZXRSZW5kZXJlZFJvd3NDb3VudCgp''@;'; put 'put ''O2ZvcihsZXQgaD0wO2g8ZDtoKyspe2NvbnN0IGY9dGhpcy5yb3dGaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShoKTthLm92ZXJzaXplZFJvd3MmJmEub3ZlcnNpemVkUm93c1tmXSYmKGEub3ZlcnNpemVkUm93c1tmXT12b2lkIDApfX19Z2V0Q2VsbChsKXtsZXQgYT1sLnJvdyxkPWwuY29sO2Nv''@;'; put 'put ''bnN0IGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uTW9kaWZ5R2V0Q2VsbENvb3JkcyIsYSxkLCF0aGlzLmlzTWFzdGVyLCJyZW5kZXIiKTtpZihoJiZBcnJheS5pc0FycmF5KGgpJiYoW2EsZF09aCksdGhpcy5pc1Jvd0JlZm9yZVJlbmRlcmVkUm93cyhhKSlyZXR1cm4tMTtpZih0''@;'; put 'put ''aGlzLmlzUm93QWZ0ZXJSZW5kZXJlZFJvd3MoYSkpcmV0dXJuLTI7aWYodGhpcy5pc0NvbHVtbkJlZm9yZVJlbmRlcmVkQ29sdW1ucyhkKSlyZXR1cm4tMztpZih0aGlzLmlzQ29sdW1uQWZ0ZXJSZW5kZXJlZENvbHVtbnMoZCkpcmV0dXJuLTQ7Y29uc3QgZj10aGlzLmdldFJvdyhhKTtpZigh''@;'; put 'put ''ZiYmYT49MCl0aHJvdyBuZXcgRXJyb3IoIlRSIHdhcyBleHBlY3RlZCB0byBiZSByZW5kZXJlZCBidXQgaXMgbm90Iik7Y29uc3Qgdj1mLmNoaWxkTm9kZXNbdGhpcy5jb2x1bW5GaWx0ZXIuc291cmNlQ29sdW1uVG9WaXNpYmxlUm93SGVhZGVkQ29sdW1uKGQpXTtpZighdiYmZD49MCl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIlREIG9yIFRIIHdhcyBleHBlY3RlZCB0byBiZSByZW5kZXJlZCBidXQgaXMgbm90Iik7cmV0dXJuIHZ9Z2V0Um93KGwpe2xldCBhPW51bGwsZD1udWxsO3ZhciBoLGY7cmV0dXJuIGw8MD8oYT1udWxsPT09KGg9dGhpcy5yb3dGaWx0ZXIpfHx2b2lkIDA9PT1oP3ZvaWQg''@;'; put 'put ''MDpoLnNvdXJjZVJvd1RvVmlzaWJsZUNvbEhlYWRlZFJvdyhsKSxkPXRoaXMuVEhFQUQpOihhPW51bGw9PT0oZj10aGlzLnJvd0ZpbHRlcil8fHZvaWQgMD09PWY/dm9pZCAwOmYuc291cmNlVG9SZW5kZXJlZChsKSxkPXRoaXMuVEJPRFkpLHZvaWQgMCE9PWEmJnZvaWQgMCE9PWQmJiEoZC5j''@;'; put 'put ''aGlsZE5vZGVzLmxlbmd0aDxhKzEpJiZkLmNoaWxkTm9kZXNbYV19Z2V0Q29sdW1uSGVhZGVyKGwpe2NvbnN0IGQ9dGhpcy5USEVBRC5jaGlsZE5vZGVzW2FyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowXTtyZXR1cm4gZD8uY2hpbGROb2Rl''@;'; put 'put ''c1t0aGlzLmNvbHVtbkZpbHRlci5zb3VyY2VDb2x1bW5Ub1Zpc2libGVSb3dIZWFkZWRDb2x1bW4obCldfWdldENvbHVtbkhlYWRlcnMobCl7Y29uc3QgYT1bXSxkPXRoaXMuY29sdW1uRmlsdGVyLnNvdXJjZUNvbHVtblRvVmlzaWJsZVJvd0hlYWRlZENvbHVtbihsKTtyZXR1cm4gdGhpcy5U''@;'; put 'put ''SEVBRC5jaGlsZE5vZGVzLmZvckVhY2goaD0+e2NvbnN0IGY9aC5jaGlsZE5vZGVzW2RdO2YmJmEucHVzaChmKX0pLGF9Z2V0Um93SGVhZGVyKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowO2lmKGE+PXRoaXMud3RTZXR0''@;'; put 'put ''aW5ncy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoKXJldHVybjtjb25zdCBoPXRoaXMucm93RmlsdGVyLnNvdXJjZVRvUmVuZGVyZWQobCksZj1oPDA/dGhpcy5yb3dGaWx0ZXIuc291cmNlUm93VG9WaXNpYmxlQ29sSGVhZGVkUm93KGwpOmgsTT0oaDwwP3RoaXMuVEhFQUQ6dGhp''@;'; put 'put ''cy5UQk9EWSkuY2hpbGROb2Rlc1tmXTtyZXR1cm4gTT8uY2hpbGROb2Rlc1thXX1nZXRSb3dIZWFkZXJzKGwpe2NvbnN0IGE9W10sZD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLmxlbmd0aDtmb3IobGV0IGg9MDtoPGQ7aCsrKXtjb25zdCBmPXRoaXMuVEJPRFku''@;'; put 'put ''Y2hpbGROb2Rlc1t0aGlzLnJvd0ZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGwpXSx2PWY/LmNoaWxkTm9kZXNbaF07diYmYS5wdXNoKHYpfXJldHVybiBhfWdldENvb3JkcyhsKXtsZXQgYT1sO2lmKCJURCIhPT1hLm5vZGVOYW1lJiYiVEgiIT09YS5ub2RlTmFtZSYmKGE9RG0oYSxbIlREIiwi''@;'; put 'put ''VEgiXSkpLG51bGw9PT1hKXJldHVybiBudWxsO2NvbnN0IGQ9YS5wYXJlbnROb2RlLGg9ZC5wYXJlbnROb2RlO2xldCBmPWIyZShkKSx2PWEuY2VsbEluZGV4O1JtKFk3LGEsdGhpcy53dFJvb3RFbGVtZW50KXx8Um0oWjcsYSx0aGlzLnd0Um9vdEVsZW1lbnQpPyJUSEVBRCI9PT1oLm5vZGVO''@;'; put 'put ''YW1lJiYoZi09aC5jaGlsZE5vZGVzLmxlbmd0aCk6Um0oTm0sYSx0aGlzLnd0Um9vdEVsZW1lbnQpfHxSbShFcCxhLHRoaXMud3RSb290RWxlbWVudCk/Zj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIiktaC5jaGlsZE5vZGVzLmxlbmd0aCtmOmg9PT10aGlzLlRIRUFE''@;'; put 'put ''P2Y9dGhpcy5yb3dGaWx0ZXIudmlzaWJsZUNvbEhlYWRlZFJvd1RvU291cmNlUm93KGYpOnRoaXMucm93RmlsdGVyJiYoZj10aGlzLnJvd0ZpbHRlci5yZW5kZXJlZFRvU291cmNlKGYpKSxSbShZNyxhLHRoaXMud3RSb290RWxlbWVudCl8fFJtKFc3LGEsdGhpcy53dFJvb3RFbGVtZW50KXx8''@;'; put 'put ''Um0oTm0sYSx0aGlzLnd0Um9vdEVsZW1lbnQpP3Y9dGhpcy5jb2x1bW5GaWx0ZXIub2Zmc2V0dGVkVEgodik6dGhpcy5jb2x1bW5GaWx0ZXImJih2PXRoaXMuY29sdW1uRmlsdGVyLnZpc2libGVSb3dIZWFkZWRDb2x1bW5Ub1NvdXJjZUNvbHVtbih2KSk7Y29uc3QgTT10aGlzLnd0U2V0dGlu''@;'; put 'put ''Z3MuZ2V0U2V0dGluZygib25Nb2RpZnlHZXRDb29yZHNFbGVtZW50IixmLHYpO3JldHVybiBNJiZBcnJheS5pc0FycmF5KE0pJiYoW2Ysdl09TSksdGhpcy53b3QuY3JlYXRlQ2VsbENvb3JkcyhmLHYpfW1hcmtPdmVyc2l6ZWRSb3dzKCl7aWYodGhpcy53dFNldHRpbmdzLmdldFNldHRpbmco''@;'; put 'put ''ImV4dGVybmFsUm93Q2FsY3VsYXRvciIpKXJldHVybjtsZXQgbD10aGlzLlRCT0RZLmNoaWxkTm9kZXMubGVuZ3RoO2NvbnN0IGE9bCp0aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3R5bGVzSGFuZGxlci5nZXREZWZhdWx0Um93SGVpZ2h0KCksZD1uXyh0aGlzLlRCT0RZKS0xLGg9dGhpcy53b3Qu''@;'; put 'put ''c3R5bGVzSGFuZGxlci5hcmVDZWxsc0JvcmRlckJveCgpLGY9aD9NdTpuXyx2PWg/MDoxLE09aD8xOjA7bGV0IEQsWixuZSxjZSxiZTtpZihhIT09ZHx8dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpKWZvcig7bDspe2wtPTEsbmU9dGhpcy5yb3dGaWx0ZXIu''@;'; put 'put ''cmVuZGVyZWRUb1NvdXJjZShsKSxEPXRoaXMuZ2V0Um93SGVpZ2h0KG5lKSxjZT10aGlzLmdldFRyRm9yUm93KG5lKSxiZT1jZS5xdWVyeVNlbGVjdG9yKCJ0aCIpO2NvbnN0IEVlPTA9PT1uZT9NOjA7Wj1iZT9mKGJlKTpmKGNlKS12LCghRCYmdGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0eWxl''@;'; put 'put ''c0hhbmRsZXIuZ2V0RGVmYXVsdFJvd0hlaWdodCgpPFotRWV8fEQ8WikmJihofHwoWis9MSksdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0Vmlld3BvcnQub3ZlcnNpemVkUm93c1tuZV09Wil9fWdldFRyRm9yUm93KGwpe3JldHVybiB0aGlzLlRCT0RZLmNoaWxkTm9kZXNbdGhpcy5yb3dGaWx0''@;'; put 'put ''ZXIuc291cmNlVG9SZW5kZXJlZChsKV19aXNDb2x1bW5IZWFkZXJSZW5kZXJlZChsKXtpZihsPj0wKXJldHVybiExO2NvbnN0IGQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKS5sZW5ndGg7cmV0dXJuIE1hdGguYWJzKGwpPD1kfWlzUm93SGVhZGVyUmVuZGVyZWQo''@;'; put 'put ''bCl7aWYobD49MClyZXR1cm4hMTtjb25zdCBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoO3JldHVybiBNYXRoLmFicyhsKTw9ZH1pc1Jvd0JlZm9yZVJlbmRlcmVkUm93cyhsKXtjb25zdCBhPXRoaXMuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpO3Jl''@;'; put 'put ''dHVybiBsPDAmJmE8PTA/IXRoaXMuaXNSb3dIZWFkZXJSZW5kZXJlZChsKTpsPGF9aXNSb3dBZnRlclJlbmRlcmVkUm93cyhsKXtyZXR1cm4gbD50aGlzLmdldExhc3RSZW5kZXJlZFJvdygpfWlzQ29sdW1uQmVmb3JlUmVuZGVyZWRDb2x1bW5zKGwpe2NvbnN0IGE9dGhpcy5nZXRGaXJzdFJl''@;'; put 'put ''bmRlcmVkQ29sdW1uKCk7cmV0dXJuIGw8MCYmYTw9MD8hdGhpcy5pc0NvbHVtbkhlYWRlclJlbmRlcmVkKGwpOmw8YX1pc0NvbHVtbkFmdGVyUmVuZGVyZWRDb2x1bW5zKGwpe3JldHVybiB0aGlzLmNvbHVtbkZpbHRlciYmbD50aGlzLmdldExhc3RSZW5kZXJlZENvbHVtbigpfWlzQ29sdW1u''@;'; put 'put ''QWZ0ZXJWaWV3cG9ydChsKXtyZXR1cm4gdGhpcy5jb2x1bW5GaWx0ZXImJmw+dGhpcy5nZXRMYXN0VmlzaWJsZUNvbHVtbigpfWlzUm93QWZ0ZXJWaWV3cG9ydChsKXtyZXR1cm4gdGhpcy5yb3dGaWx0ZXImJmw+dGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpfWlzQ29sdW1uQmVmb3JlVmlld3Bv''@;'; put 'put ''cnQobCl7cmV0dXJuIHRoaXMuY29sdW1uRmlsdGVyJiZ0aGlzLmNvbHVtbkZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGwpPDAmJmw+PTB9aXNMYXN0Um93RnVsbHlWaXNpYmxlKCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFZpc2libGVSb3coKT09PXRoaXMuZ2V0TGFzdFJlbmRlcmVkUm93KCl9aXNM''@;'; put 'put ''YXN0Q29sdW1uRnVsbHlWaXNpYmxlKCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFZpc2libGVDb2x1bW4oKT09PXRoaXMuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCl9YWxsUm93c0luVmlld3BvcnQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpPT09dGhpcy5n''@;'; put 'put ''ZXRWaXNpYmxlUm93c0NvdW50KCl9YWxsQ29sdW1uc0luVmlld3BvcnQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpPT09dGhpcy5nZXRWaXNpYmxlQ29sdW1uc0NvdW50KCl9Z2V0Um93SGVpZ2h0KGwpe3JldHVybiB0aGlzLnJvd1V0aWxzLmdl''@;'; put 'put ''dEhlaWdodChsKX1nZXRDb2x1bW5IZWFkZXJIZWlnaHQobCl7cmV0dXJuIHRoaXMuY29sdW1uVXRpbHMuZ2V0SGVhZGVySGVpZ2h0KGwpfWdldENvbHVtbldpZHRoKGwpe3JldHVybiB0aGlzLmNvbHVtblV0aWxzLmdldFdpZHRoKGwpfWhhc0RlZmluZWRTaXplKCl7cmV0dXJuIHRoaXMuaGFz''@;'; put 'put ''VGFibGVIZWlnaHQmJnRoaXMuaGFzVGFibGVXaWR0aH1nZXRXaWR0aCgpe3JldHVybiBhdSh0aGlzLlRBQkxFKX1nZXRIZWlnaHQoKXtyZXR1cm4gTXUodGhpcy5UQUJMRSl9Z2V0VG90YWxXaWR0aCgpe2NvbnN0IGw9YXUodGhpcy5oaWRlcik7cmV0dXJuIDAhPT1sP2w6dGhpcy5nZXRXaWR0''@;'; put 'put ''aCgpfWdldFRvdGFsSGVpZ2h0KCl7Y29uc3QgbD1NdSh0aGlzLmhpZGVyKTtyZXR1cm4gMCE9PWw/bDp0aGlzLmdldEhlaWdodCgpfWlzVmlzaWJsZSgpe3JldHVybiBWNyh0aGlzLlRBQkxFKX1fbW9kaWZ5Um93SGVhZGVyV2lkdGgobCl7bGV0IGE9ZWMobCk/bCgpOm51bGw7cmV0dXJuIEFy''@;'; put 'put ''cmF5LmlzQXJyYXkoYSk/KGE9Wy4uLmFdLGFbYS5sZW5ndGgtMV09dGhpcy5fY29ycmVjdFJvd0hlYWRlcldpZHRoKGFbYS5sZW5ndGgtMV0pKTphPXRoaXMuX2NvcnJlY3RSb3dIZWFkZXJXaWR0aChhKSxhfV9jb3JyZWN0Um93SGVhZGVyV2lkdGgobCl7bGV0IGE9bDtyZXR1cm4ibnVtYmVy''@;'; put 'put ''IiE9dHlwZW9mIGwmJihhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJkZWZhdWx0Q29sdW1uV2lkdGgiKSksdGhpcy5jb3JyZWN0SGVhZGVyV2lkdGgmJihhKz0xKSxhfX0sX2ZlPXtnZXRGaXJzdFJlbmRlcmVkUm93KCl7cmV0dXJuIDA9PT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGlu''@;'; put 'put ''ZygidG90YWxSb3dzIik/LTE6MH0sZ2V0Rmlyc3RWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpfSxnZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5nZXRGaXJzdFJlbmRlcmVkUm93KCl9LGdldExhc3RSZW5kZXJlZFJvdygpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCktMX0sZ2V0TGFzdFZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5nZXRMYXN0UmVuZGVyZWRSb3coKX0sZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5nZXRMYXN0UmVuZGVyZWRSb3coKX0sZ2V0UmVuZGVyZWRS''@;'; put 'put ''b3dzQ291bnQoKXtjb25zdCBjPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKTtyZXR1cm4gTWF0aC5taW4odGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLGMpfSxnZXRWaXNpYmxlUm93c0NvdW50KCl7cmV0dXJuIHRoaXMuZ2V0UmVuZGVy''@;'; put 'put ''ZWRSb3dzQ291bnQoKX0sZ2V0Q29sdW1uSGVhZGVyc0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5jb2x1bW5IZWFkZXJzLmxlbmd0aH19O0NwKF9mZSwiTUlYSU5fTkFNRSIsInN0aWNreVJvd3NUb3AiLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3Qgd2Zl''@;'; put 'put ''PV9mZSxDZmU9e2dldEZpcnN0UmVuZGVyZWRDb2x1bW4oKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5zdGFydENvbHVtblJlbmRlcmVkO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRGaXJzdFZpc2libGVDb2x1bW4oKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5zdGFy''@;'; put 'put ''dENvbHVtblZpc2libGU7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnN0YXJ0Q29sdW1uUGFydGlhbGx5VmlzaWJsZTtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0TGFzdFJlbmRlcmVk''@;'; put 'put ''Q29sdW1uKCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3QuZW5kQ29sdW1uUmVuZGVyZWQ7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldExhc3RWaXNpYmxlQ29sdW1uKCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3QuZW5kQ29sdW1uVmlzaWJsZTtyZXR1cm4gbnVsbD09PWM/''@;'; put 'put ''LTE6Y30sZ2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5lbmRDb2x1bW5QYXJ0aWFsbHlWaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NP''@;'; put 'put ''YmplY3QuY291bnRDb2x1bW5zUmVuZGVyZWR9LGdldFZpc2libGVDb2x1bW5zQ291bnQoKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNvdW50Q29sdW1uc1Zpc2libGV9LGdldFJvd0hlYWRlcnNDb3VudCgpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3Qucm93SGVhZGVycy5s''@;'; put 'put ''ZW5ndGh9fTtDcChDZmUsIk1JWElOX05BTUUiLCJjYWxjdWxhdGVkQ29sdW1ucyIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9KTtjb25zdCBRJD1DZmU7Y2xhc3MgZUsgZXh0ZW5kcyBoX3tjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsZCxoLFo3KX19eGwoZUssd2ZlKSx4bChl''@;'; put 'put ''SyxRJCk7Y29uc3QgbkplPWVLO2Z1bmN0aW9uIHFPKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhp''@;'; put 'put ''cyBvYmplY3QiKX12YXIgREU9bmV3IFdlYWtTZXQ7ZnVuY3Rpb24gU2ZlKGMpe2NvbnN0e3d0U2V0dGluZ3M6bCxpbmxpbmVTdGFydE92ZXJsYXk6YSx3dFRhYmxlOmQsd3RWaWV3cG9ydDpoLHRvdGFsQ29sdW1uczpmLHJvb3RXaW5kb3c6dn09dGhpcy5kYXRhQWNjZXNzT2JqZWN0O2lmKGEu''@;'; put 'put ''bWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT12KXtsZXQgRD1udWxsO2lmKGwuZ2V0U2V0dGluZygicnRsTW9kZSIpKXtjb25zdCBuZT1kLlRBQkxFLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO0Q9TWF0aC5hYnMobmUucmlnaHQtdGhpcy5kYXRhQWNjZXNzT2JqZWN0LnJvb3RXaW5kb3cu''@;'; put 'put ''ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9mZnNldFdpZHRoKX1lbHNlIEQ9ejAoZC53dFJvb3RFbGVtZW50KS5sZWZ0O2NvbnN0IFo9TWF0aC5hYnMobCQodix2KSk7aWYoRD5aKXtjb25zdCBuZT1jJCh2KTtsZXQgY2U9aC5nZXRSb3dIZWFkZXJXaWR0aCgpO2ZvcihsZXQgYmU9MTtiZTw9''@;'; put 'put ''ZjtiZSsrKWlmKGNlKz1hLnN1bUNlbGxTaXplcyhiZS0xLGJlKSxEK2NlLVo+PW5lKXtjPWJlLTI7YnJlYWt9fX1yZXR1cm4gY31mdW5jdGlvbiBNZmUoYyl7Y29uc3R7dG9wT3ZlcmxheTpsLHd0VGFibGU6YSx3dFZpZXdwb3J0OmQsdG90YWxSb3dzOmgscm9vdFdpbmRvdzpmfT10aGlzLmRh''@;'; put 'put ''dGFBY2Nlc3NPYmplY3Q7aWYobC5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD09PWYpe2NvbnN0IHY9ejAoYS53dFJvb3RFbGVtZW50KSxNPUFPKGYsZik7aWYodi50b3A+TSl7Y29uc3QgRD1uXyhmKTtsZXQgWj1kLmdldENvbHVtbkhlYWRlckhlaWdodCgpO2ZvcihsZXQgbmU9MTtuZTw9''@;'; put 'put ''aDtuZSsrKWlmKForPWwuc3VtQ2VsbFNpemVzKG5lLTEsbmUpLHYudG9wK1otTT49RCl7Yz1uZS0yO2JyZWFrfX19cmV0dXJuIGN9Y29uc3QgY0plPWNsYXNzIGxKZXtjb25zdHJ1Y3RvcihsKXsoZnVuY3Rpb24gckplKGMsbCl7KGZ1bmN0aW9uIGlKZShjLGwpe2lmKGwuaGFzKGMpKXRocm93''@;'; put 'put ''IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSkodGhpcyxERSksZnVuY3Rpb24gb0plKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBhSmUoYyl7dmFyIGw9ZnVuY3Rp''@;'; put 'put ''b24gc0plKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiZGF0YUFjY2Vzc09iamVjdCIsdm9pZCAwKSx0aGlzLmRhdGFBY2Nlc3NPYmplY3Q9bH1zY3JvbGxWaWV3cG9ydChsLGEsZCl7aWYobC5jb2w8MHx8bC5yb3c8''@;'; put 'put ''MClyZXR1cm4hMTtjb25zdCBoPXRoaXMuc2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkobC5jb2wsYSksZj10aGlzLnNjcm9sbFZpZXdwb3J0VmVydGljYWxseShsLnJvdyxkKTtyZXR1cm4gaHx8Zn1zY3JvbGxWaWV3cG9ydEhvcml6b250YWxseShsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''PjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06ImF1dG8iO2NvbnN0e2RyYXduOmQsdG90YWxDb2x1bW5zOmh9PXRoaXMuZGF0YUFjY2Vzc09iamVjdDtpZighZClyZXR1cm4hMTtjb25zdCBmPVBkKGEpO2lmKGw9dGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0U2V0dGluZ3Mu''@;'; put 'put ''Z2V0U2V0dGluZygib25CZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseSIsbCxmKSwhTnVtYmVyLmlzSW50ZWdlcihsKXx8bDwwfHxsPmgpcmV0dXJuITE7YT1mLnZhbHVlO2NvbnN0e2ZpeGVkQ29sdW1uc1N0YXJ0OnYsaW5saW5lU3RhcnRPdmVybGF5Ok19PXRoaXMuZGF0YUFjY2Vz''@;'; put 'put ''c09iamVjdCxEPSJhdXRvIj09PWE7aWYoRCYmbDx2KXJldHVybiExO2NvbnN0IFo9dGhpcy5nZXRGaXJzdFZpc2libGVDb2x1bW4oKSxuZT10aGlzLmdldExhc3RWaXNpYmxlQ29sdW1uKCk7bGV0IGNlPSExO3JldHVybihEJiYobDxafHxsPm5lKXx8IUQpJiYoY2U9TS5zY3JvbGxUbyhsLEQ/''@;'; put 'put ''bD49dGhpcy5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpOiJlbmQiPT09YSkpLGNlfXNjcm9sbFZpZXdwb3J0VmVydGljYWxseShsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06ImF1dG8iO2NvbnN0e2RyYXduOmQs''@;'; put 'put ''dG90YWxSb3dzOmh9PXRoaXMuZGF0YUFjY2Vzc09iamVjdDtpZighZClyZXR1cm4hMTtjb25zdCBmPVBkKGEpO2lmKGw9dGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25CZWZvcmVWaWV3cG9ydFNjcm9sbFZlcnRpY2FsbHkiLGwsZiksIU51bWJlci5pc0lu''@;'; put 'put ''dGVnZXIobCl8fGw8MHx8bD5oKXJldHVybiExO2E9Zi52YWx1ZTtjb25zdHtmaXhlZFJvd3NCb3R0b206dixmaXhlZFJvd3NUb3A6TSx0b3BPdmVybGF5OkR9PXRoaXMuZGF0YUFjY2Vzc09iamVjdCxaPSJhdXRvIj09PWE7aWYoWiYmKGw8TXx8bD5oLXYtMSkpcmV0dXJuITE7Y29uc3QgbmU9''@;'; put 'put ''dGhpcy5nZXRGaXJzdFZpc2libGVSb3coKSxjZT10aGlzLmdldExhc3RWaXNpYmxlUm93KCk7bGV0IGJlPSExO3JldHVybihaJiYobDxuZXx8bD5jZSl8fCFaKSYmKGJlPUQuc2Nyb2xsVG8obCxaP2w+PXRoaXMuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKToiYm90dG9tIj09PWEpKSxi''@;'; put 'put ''ZX1nZXRGaXJzdFZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0Rmlyc3RWaXNpYmxlUm93KCl9Z2V0TGFzdFZpc2libGVSb3coKXtyZXR1cm4gcU8oREUsdGhpcyxNZmUpLmNhbGwodGhpcyx0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RUYWJsZS5n''@;'; put 'put ''ZXRMYXN0VmlzaWJsZVJvdygpKX1nZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3coKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl9Z2V0TGFzdFBhcnRpYWxseVZpc2libGVSb3coKXtyZXR1cm4gcU8oREUsdGhpcyxN''@;'; put 'put ''ZmUpLmNhbGwodGhpcyx0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RUYWJsZS5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpKX1nZXRGaXJzdFZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0Lnd0VGFibGUuZ2V0Rmlyc3RWaXNpYmxlQ29sdW1uKCl9Z2V0TGFz''@;'; put 'put ''dFZpc2libGVDb2x1bW4oKXtyZXR1cm4gcU8oREUsdGhpcyxTZmUpLmNhbGwodGhpcyx0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RUYWJsZS5nZXRMYXN0VmlzaWJsZUNvbHVtbigpKX1nZXRGaXJzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0''@;'; put 'put ''Lnd0VGFibGUuZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl9Z2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKXtyZXR1cm4gcU8oREUsdGhpcyxTZmUpLmNhbGwodGhpcyx0aGlzLmRhdGFBY2Nlc3NPYmplY3Qud3RUYWJsZS5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVt''@;'; put 'put ''bigpKX19O2Z1bmN0aW9uIHhmZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gaEplKGMpe3ZhciBsPWZ1bmN0aW9uIGZKZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2Fs''@;'; put 'put ''bChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5n''@;'; put 'put ''Iik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gZl8oYyxsKXtyZXR1cm4gYy5nZXQoVGZl''@;'; put 'put ''KGMsbCkpfWZ1bmN0aW9uIEVmZShjLGwsYSl7cmV0dXJuIGMuc2V0KFRmZShjLGwpLGEpLGF9ZnVuY3Rpb24gVGZlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQ''@;'; put 'put ''cml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgbWc9bmV3IFdlYWtNYXA7Y2xhc3MgWE97Y29uc3RydWN0b3IobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO3hmZSh0aGlzLCJy''@;'; put 'put ''b3ciLG51bGwpLHhmZSh0aGlzLCJjb2wiLG51bGwpLGZ1bmN0aW9uIHVKZShjLGwsYSl7KGZ1bmN0aW9uIGRKZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0''@;'; put 'put ''Iil9KShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsbWcsITEpLEVmZShtZyx0aGlzLGQpLHR5cGVvZiBsPCJ1IiYmdHlwZW9mIGE8InUiJiYodGhpcy5yb3c9bCx0aGlzLmNvbD1hKX1pc1ZhbGlkKGwpe2NvbnN0e2NvdW50Um93czphLGNvdW50Q29sczpkLGNvdW50Um93SGVhZGVyczpoLGNvdW50''@;'; put 'put ''Q29sSGVhZGVyczpmfT17Y291bnRSb3dzOjAsY291bnRDb2xzOjAsY291bnRSb3dIZWFkZXJzOjAsY291bnRDb2xIZWFkZXJzOjAsLi4ubH07cmV0dXJuISghTnVtYmVyLmlzSW50ZWdlcih0aGlzLnJvdyl8fCFOdW1iZXIuaXNJbnRlZ2VyKHRoaXMuY29sKXx8dGhpcy5yb3c8LWZ8fHRoaXMu''@;'; put 'put ''Y29sPC1ofHx0aGlzLnJvdz49YXx8dGhpcy5jb2w+PWQpfWlzRXF1YWwobCl7cmV0dXJuIGw9PT10aGlzfHx0aGlzLnJvdz09PWwucm93JiZ0aGlzLmNvbD09PWwuY29sfWlzSGVhZGVyKCl7cmV0dXJuIXRoaXMuaXNDZWxsKCl9aXNDZWxsKCl7cmV0dXJuIHRoaXMucm93Pj0wJiZ0aGlzLmNv''@;'; put 'put ''bD49MH1pc1J0bCgpe3JldHVybiBmXyhtZyx0aGlzKX1pc1NvdXRoRWFzdE9mKGwpe3JldHVybiB0aGlzLnJvdz49bC5yb3cmJihmXyhtZyx0aGlzKT90aGlzLmNvbDw9bC5jb2w6dGhpcy5jb2w+PWwuY29sKX1pc05vcnRoV2VzdE9mKGwpe3JldHVybiB0aGlzLnJvdzw9bC5yb3cmJihmXyht''@;'; put 'put ''Zyx0aGlzKT90aGlzLmNvbD49bC5jb2w6dGhpcy5jb2w8PWwuY29sKX1pc1NvdXRoV2VzdE9mKGwpe3JldHVybiB0aGlzLnJvdz49bC5yb3cmJihmXyhtZyx0aGlzKT90aGlzLmNvbD49bC5jb2w6dGhpcy5jb2w8PWwuY29sKX1pc05vcnRoRWFzdE9mKGwpe3JldHVybiB0aGlzLnJvdzw9bC5y''@;'; put 'put ''b3cmJihmXyhtZyx0aGlzKT90aGlzLmNvbDw9bC5jb2w6dGhpcy5jb2w+PWwuY29sKX1ub3JtYWxpemUoKXtyZXR1cm4gdGhpcy5yb3c9bnVsbD09PXRoaXMucm93P3RoaXMucm93Ok1hdGgubWF4KHRoaXMucm93LDApLHRoaXMuY29sPW51bGw9PT10aGlzLmNvbD90aGlzLmNvbDpNYXRoLm1h''@;'; put 'put ''eCh0aGlzLmNvbCwwKSx0aGlzfWFzc2lnbihsKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihsPy5yb3cpJiYodGhpcy5yb3c9bC5yb3cpLE51bWJlci5pc0ludGVnZXIobD8uY29sKSYmKHRoaXMuY29sPWwuY29sKSxsIGluc3RhbmNlb2YgWE8mJkVmZShtZyx0aGlzLGwuaXNSdGwoKSksdGhp''@;'; put 'put ''c31jbG9uZSgpe3JldHVybiBuZXcgWE8odGhpcy5yb3csdGhpcy5jb2wsZl8obWcsdGhpcykpfXRvT2JqZWN0KCl7cmV0dXJue3Jvdzp0aGlzLnJvdyxjb2w6dGhpcy5jb2x9fX1jb25zdCBKTz1YTztmdW5jdGlvbiB0SyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gbUplKGMpe3ZhciBsPWZ1''@;'; put 'put ''bmN0aW9uIHZKZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBU''@;'; put 'put ''eXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gUDIoYyxsKXtyZXR1cm4gYy5nZXQoQWZlKGMsbCkpfWZ1bmN0aW9uIEFmZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5o''@;'; put 'put ''YXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIEhkPW5ldyBXZWFrTWFwO2NsYXNzIG5Le2NvbnN0cnVjdG9yKGwpe2xldCBhPWFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOmwsaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXSYmYXJndW1lbnRzWzNdO3RL''@;'; put 'put ''KHRoaXMsImhpZ2hsaWdodCIsbnVsbCksdEsodGhpcywiZnJvbSIsbnVsbCksdEsodGhpcywidG8iLG51bGwpLGZ1bmN0aW9uIHBKZShjLGwsYSl7KGZ1bmN0aW9uIGdKZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHBy''@;'; put 'put ''aXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsSGQsITEpLHRoaXMuaGlnaGxpZ2h0PWwuY2xvbmUoKSx0aGlzLmZyb209YS5jbG9uZSgpLHRoaXMudG89ZC5jbG9uZSgpLGZ1bmN0aW9uIGJKZShjLGwsYSl7Yy5zZXQoQWZlKGMsbCks''@;'; put 'put ''YSl9KEhkLHRoaXMsaCl9c2V0SGlnaGxpZ2h0KGwpe3JldHVybiB0aGlzLmhpZ2hsaWdodD1sLmNsb25lKCksdGhpc31zZXRGcm9tKGwpe3JldHVybiB0aGlzLmZyb209bC5jbG9uZSgpLHRoaXN9c2V0VG8obCl7cmV0dXJuIHRoaXMudG89bC5jbG9uZSgpLHRoaXN9aXNWYWxpZChsKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5mcm9tLmlzVmFsaWQobCkmJnRoaXMudG8uaXNWYWxpZChsKX1pc1NpbmdsZSgpe3JldHVybiB0aGlzLmlzU2luZ2xlQ2VsbCgpfHx0aGlzLmlzU2luZ2xlSGVhZGVyKCl9aXNTaW5nbGVDZWxsKCl7cmV0dXJuIHRoaXMuZnJvbS5yb3c+PTAmJnRoaXMuZnJvbS5yb3c9PT10aGlz''@;'; put 'put ''LnRvLnJvdyYmdGhpcy5mcm9tLmNvbD49MCYmdGhpcy5mcm9tLmNvbD09PXRoaXMudG8uY29sfWlzU2luZ2xlSGVhZGVyKCl7cmV0dXJuKHRoaXMuZnJvbS5yb3c8MHx8dGhpcy5mcm9tLmNvbDwwKSYmdGhpcy5mcm9tLnJvdz09PXRoaXMudG8ucm93JiZ0aGlzLmZyb20uY29sPT09dGhpcy50''@;'; put 'put ''by5jb2x9aXNIZWFkZXIoKXtyZXR1cm4hKCF0aGlzLmZyb20uaXNIZWFkZXIoKXx8IXRoaXMudG8uaXNIZWFkZXIoKSl8fHRoaXMuZnJvbS5jb2w8MCYmdGhpcy50by5jb2w8MHx8dGhpcy5mcm9tLnJvdzwwJiZ0aGlzLnRvLnJvdzwwfWNvbnRhaW5zSGVhZGVycygpe3JldHVybiB0aGlzLmZy''@;'; put 'put ''b20uaXNIZWFkZXIoKXx8dGhpcy50by5pc0hlYWRlcigpfWdldE91dGVySGVpZ2h0KCl7cmV0dXJuIE1hdGgubWF4KHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLU1hdGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpKzF9Z2V0T3V0ZXJXaWR0aCgpe3JldHVybiBNYXRoLm1heCh0''@;'; put 'put ''aGlzLmZyb20uY29sLHRoaXMudG8uY29sKS1NYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSsxfWdldEhlaWdodCgpe2lmKHRoaXMuZnJvbS5yb3c8MCYmdGhpcy50by5yb3c8MClyZXR1cm4gMDtjb25zdCBsPU1hdGgubWF4KHRoaXMuZnJvbS5yb3csMCksYT1NYXRoLm1heCh0''@;'; put 'put ''aGlzLnRvLnJvdywwKTtyZXR1cm4gTWF0aC5tYXgobCxhKS1NYXRoLm1pbihsLGEpKzF9Z2V0V2lkdGgoKXtpZih0aGlzLmZyb20uY29sPDAmJnRoaXMudG8uY29sPDApcmV0dXJuIDA7Y29uc3QgbD1NYXRoLm1heCh0aGlzLmZyb20uY29sLDApLGE9TWF0aC5tYXgodGhpcy50by5jb2wsMCk7''@;'; put 'put ''cmV0dXJuIE1hdGgubWF4KGwsYSktTWF0aC5taW4obCxhKSsxfWdldENlbGxzQ291bnQoKXtyZXR1cm4gdGhpcy5nZXRXaWR0aCgpKnRoaXMuZ2V0SGVpZ2h0KCl9aW5jbHVkZXMobCl7Y29uc3R7cm93OmEsY29sOmR9PWwsaD10aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxmPXRoaXMu''@;'; put 'put ''Z2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTtyZXR1cm4gaC5yb3c8PWEmJmYucm93Pj1hJiZoLmNvbDw9ZCYmZi5jb2w+PWR9aW5jbHVkZXNSYW5nZShsKXtyZXR1cm4gdGhpcy5pbmNsdWRlcyhsLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSkmJnRoaXMuaW5jbHVkZXMobC5nZXRPdXRlckJv''@;'; put 'put ''dHRvbUVuZENvcm5lcigpKX1pc0VxdWFsKGwpe3JldHVybiBNYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KT09PU1hdGgubWluKGwuZnJvbS5yb3csbC50by5yb3cpJiZNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KT09PU1hdGgubWF4KGwuZnJvbS5yb3csbC50''@;'; put 'put ''by5yb3cpJiZNYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKT09PU1hdGgubWluKGwuZnJvbS5jb2wsbC50by5jb2wpJiZNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKT09PU1hdGgubWF4KGwuZnJvbS5jb2wsbC50by5jb2wpfW92ZXJsYXBzKGwpe3JldHVybiBs''@;'; put 'put ''LmlzU291dGhFYXN0T2YodGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKSkmJmwuaXNOb3J0aFdlc3RPZih0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKSl9aXNTb3V0aEVhc3RPZihsKXtyZXR1cm4gdGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKS5pc1NvdXRoRWFzdE9mKGwp''@;'; put 'put ''fHx0aGlzLmdldE91dGVyQm90dG9tUmlnaHRDb3JuZXIoKS5pc1NvdXRoRWFzdE9mKGwpfWlzTm9ydGhXZXN0T2YobCl7cmV0dXJuIHRoaXMuZ2V0T3V0ZXJUb3BMZWZ0Q29ybmVyKCkuaXNOb3J0aFdlc3RPZihsKXx8dGhpcy5nZXRPdXRlckJvdHRvbVJpZ2h0Q29ybmVyKCkuaXNOb3J0aFdl''@;'; put 'put ''c3RPZihsKX1pc092ZXJsYXBwaW5nSG9yaXpvbnRhbGx5KGwpe3JldHVybiB0aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCkuY29sPj1sLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKS5jb2wmJnRoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKS5jb2w8PWwuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIo''@;'; put 'put ''KS5jb2x8fHRoaXMuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLmNvbDw9bC5nZXRPdXRlclRvcEVuZENvcm5lcigpLmNvbCYmdGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCkuY29sPj1sLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKS5jb2x9aXNPdmVybGFwcGluZ1ZlcnRpY2FsbHkobCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpLnJvdz49bC5nZXRPdXRlclRvcFJpZ2h0Q29ybmVyKCkucm93JiZ0aGlzLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKS5yb3c8PWwuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpLnJvd3x8dGhpcy5nZXRPdXRlclRv''@;'; put 'put ''cEVuZENvcm5lcigpLnJvdzw9bC5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCkucm93JiZ0aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCkucm93Pj1sLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKS5yb3d9ZXhwYW5kKGwpe2NvbnN0IGE9dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCks''@;'; put 'put ''ZD10aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk7cmV0dXJuKGwucm93PGEucm93fHxsLmNvbDxhLmNvbHx8bC5yb3c+ZC5yb3d8fGwuY29sPmQuY29sKSYmKHRoaXMuZnJvbT10aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWluKGEucm93LGwucm93KSxNYXRoLm1pbihhLmNvbCxs''@;'; put 'put ''LmNvbCkpLHRoaXMudG89dGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heChkLnJvdyxsLnJvdyksTWF0aC5tYXgoZC5jb2wsbC5jb2wpKSwhMCl9ZXhwYW5kQnlSYW5nZShsKXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRz''@;'; put 'put ''WzFdO2lmKHRoaXMuaW5jbHVkZXNSYW5nZShsKXx8IXRoaXMub3ZlcmxhcHMobCkpcmV0dXJuITE7Y29uc3QgZD10aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKSxoPXRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKSxmPXRoaXMuZ2V0RGlyZWN0aW9uKCksdj1sLmdldE91dGVyVG9w''@;'; put 'put ''U3RhcnRDb3JuZXIoKSxNPWwuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKSxEPU1hdGgubWluKGQucm93LHYucm93KSxaPU1hdGgubWluKGQuY29sLHYuY29sKSxuZT1NYXRoLm1heChoLnJvdyxNLnJvdyksY2U9TWF0aC5tYXgoaC5jb2wsTS5jb2wpLGJlPXRoaXMuX2NyZWF0ZUNlbGxDb29y''@;'; put 'put ''ZHMoRCxaKSxFZT10aGlzLl9jcmVhdGVDZWxsQ29vcmRzKG5lLGNlKTtyZXR1cm4gdGhpcy5mcm9tPWJlLHRoaXMudG89RWUsdGhpcy5zZXREaXJlY3Rpb24oZiksYSYmKHRoaXMuaGlnaGxpZ2h0LnJvdz09PXRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpLnJvdyYmIk4tUyI9PT10''@;'; put 'put ''aGlzLmdldFZlcnRpY2FsRGlyZWN0aW9uKCkmJnRoaXMuZmxpcERpcmVjdGlvblZlcnRpY2FsbHkoKSx0aGlzLmhpZ2hsaWdodC5jb2w9PT10aGlzLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKS5jb2wmJiJXLUUiPT09dGhpcy5nZXRIb3Jpem9udGFsRGlyZWN0aW9uKCkmJnRoaXMuZmxpcERp''@;'; put 'put ''cmVjdGlvbkhvcml6b250YWxseSgpKSwhMH1nZXREaXJlY3Rpb24oKXtyZXR1cm4gdGhpcy5mcm9tLmlzTm9ydGhXZXN0T2YodGhpcy50byk/Ik5XLVNFIjp0aGlzLmZyb20uaXNOb3J0aEVhc3RPZih0aGlzLnRvKT8iTkUtU1ciOnRoaXMuZnJvbS5pc1NvdXRoRWFzdE9mKHRoaXMudG8pPyJT''@;'; put 'put ''RS1OVyI6dGhpcy5mcm9tLmlzU291dGhXZXN0T2YodGhpcy50byk/IlNXLU5FIjp2b2lkIDB9c2V0RGlyZWN0aW9uKGwpe3N3aXRjaChsKXtjYXNlIk5XLVNFIjpbdGhpcy5mcm9tLHRoaXMudG9dPVt0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpLHRoaXMuZ2V0T3V0ZXJCb3R0b21SaWdo''@;'; put 'put ''dENvcm5lcigpXTticmVhaztjYXNlIk5FLVNXIjpbdGhpcy5mcm9tLHRoaXMudG9dPVt0aGlzLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKSx0aGlzLmdldE91dGVyQm90dG9tTGVmdENvcm5lcigpXTticmVhaztjYXNlIlNFLU5XIjpbdGhpcy5mcm9tLHRoaXMudG9dPVt0aGlzLmdldE91dGVy''@;'; put 'put ''Qm90dG9tUmlnaHRDb3JuZXIoKSx0aGlzLmdldE91dGVyVG9wTGVmdENvcm5lcigpXTticmVhaztjYXNlIlNXLU5FIjpbdGhpcy5mcm9tLHRoaXMudG9dPVt0aGlzLmdldE91dGVyQm90dG9tTGVmdENvcm5lcigpLHRoaXMuZ2V0T3V0ZXJUb3BSaWdodENvcm5lcigpXX19Z2V0VmVydGljYWxE''@;'; put 'put ''aXJlY3Rpb24oKXtyZXR1cm5bIk5FLVNXIiwiTlctU0UiXS5pbmRleE9mKHRoaXMuZ2V0RGlyZWN0aW9uKCkpPi0xPyJOLVMiOiJTLU4ifWdldEhvcml6b250YWxEaXJlY3Rpb24oKXtyZXR1cm5bIk5XLVNFIiwiU1ctTkUiXS5pbmRleE9mKHRoaXMuZ2V0RGlyZWN0aW9uKCkpPi0xPyJXLUUi''@;'; put 'put ''OiJFLVcifWZsaXBEaXJlY3Rpb25WZXJ0aWNhbGx5KCl7c3dpdGNoKHRoaXMuZ2V0RGlyZWN0aW9uKCkpe2Nhc2UiTlctU0UiOnRoaXMuc2V0RGlyZWN0aW9uKCJTVy1ORSIpO2JyZWFrO2Nhc2UiTkUtU1ciOnRoaXMuc2V0RGlyZWN0aW9uKCJTRS1OVyIpO2JyZWFrO2Nhc2UiU0UtTlciOnRo''@;'; put 'put ''aXMuc2V0RGlyZWN0aW9uKCJORS1TVyIpO2JyZWFrO2Nhc2UiU1ctTkUiOnRoaXMuc2V0RGlyZWN0aW9uKCJOVy1TRSIpfX1mbGlwRGlyZWN0aW9uSG9yaXpvbnRhbGx5KCl7c3dpdGNoKHRoaXMuZ2V0RGlyZWN0aW9uKCkpe2Nhc2UiTlctU0UiOnRoaXMuc2V0RGlyZWN0aW9uKCJORS1TVyIp''@;'; put 'put ''O2JyZWFrO2Nhc2UiTkUtU1ciOnRoaXMuc2V0RGlyZWN0aW9uKCJOVy1TRSIpO2JyZWFrO2Nhc2UiU0UtTlciOnRoaXMuc2V0RGlyZWN0aW9uKCJTVy1ORSIpO2JyZWFrO2Nhc2UiU1ctTkUiOnRoaXMuc2V0RGlyZWN0aW9uKCJTRS1OVyIpfX1nZXRUb3BTdGFydENvcm5lcigpe3JldHVybiB0''@;'; put 'put ''aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKS5ub3JtYWxpemUoKX1nZXRUb3BMZWZ0Q29ybmVyKCl7cmV0dXJuIFAyKEhkLHRoaXMpP3RoaXMuZ2V0VG9wRW5kQ29ybmVy''@;'; put 'put ''KCk6dGhpcy5nZXRUb3BTdGFydENvcm5lcigpfWdldEJvdHRvbUVuZENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLE1hdGgubWF4KHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKS5ub3JtYWxpemUoKX1n''@;'; put 'put ''ZXRCb3R0b21SaWdodENvcm5lcigpe3JldHVybiBQMihIZCx0aGlzKT90aGlzLmdldEJvdHRvbVN0YXJ0Q29ybmVyKCk6dGhpcy5nZXRCb3R0b21FbmRDb3JuZXIoKX1nZXRUb3BFbmRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbih0aGlzLmZyb20ucm93''@;'; put 'put ''LHRoaXMudG8ucm93KSxNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSkubm9ybWFsaXplKCl9Z2V0VG9wUmlnaHRDb3JuZXIoKXtyZXR1cm4gUDIoSGQsdGhpcyk/dGhpcy5nZXRUb3BTdGFydENvcm5lcigpOnRoaXMuZ2V0VG9wRW5kQ29ybmVyKCl9Z2V0Qm90dG9tU3RhcnRD''@;'; put 'put ''b3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSkubm9ybWFsaXplKCl9Z2V0Qm90dG9tTGVmdENvcm5lcigpe3JldHVybiBQMihIZCx0aGlzKT90''@;'; put 'put ''aGlzLmdldEJvdHRvbUVuZENvcm5lcigpOnRoaXMuZ2V0Qm90dG9tU3RhcnRDb3JuZXIoKX1nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUNlbGxDb29yZHMoTWF0aC5taW4odGhpcy5mcm9tLnJvdyx0aGlzLnRvLnJvdyksTWF0aC5taW4odGhpcy5mcm9tLmNv''@;'; put 'put ''bCx0aGlzLnRvLmNvbCkpfWdldE91dGVyVG9wTGVmdENvcm5lcigpe3JldHVybiBQMihIZCx0aGlzKT90aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCk6dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCl9Z2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2Vs''@;'; put 'put ''bENvb3JkcyhNYXRoLm1heCh0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSl9Z2V0T3V0ZXJCb3R0b21SaWdodENvcm5lcigpe3JldHVybiBQMihIZCx0aGlzKT90aGlzLmdldE91dGVyQm90dG9tU3RhcnRDb3JuZXIoKTp0aGlz''@;'; put 'put ''LmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCl9Z2V0T3V0ZXJUb3BFbmRDb3JuZXIoKXtyZXR1cm4gdGhpcy5fY3JlYXRlQ2VsbENvb3JkcyhNYXRoLm1pbih0aGlzLmZyb20ucm93LHRoaXMudG8ucm93KSxNYXRoLm1heCh0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSl9Z2V0T3V0ZXJUb3BS''@;'; put 'put ''aWdodENvcm5lcigpe3JldHVybiBQMihIZCx0aGlzKT90aGlzLmdldE91dGVyVG9wU3RhcnRDb3JuZXIoKTp0aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCl9Z2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigpe3JldHVybiB0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KHRoaXMuZnJv''@;'; put 'put ''bS5yb3csdGhpcy50by5yb3cpLE1hdGgubWluKHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpKX1nZXRPdXRlckJvdHRvbUxlZnRDb3JuZXIoKXtyZXR1cm4gUDIoSGQsdGhpcyk/dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpOnRoaXMuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigp''@;'; put 'put ''fWlzQ29ybmVyKGwpe3JldHVybiBsLmlzRXF1YWwodGhpcy5nZXRPdXRlclRvcExlZnRDb3JuZXIoKSl8fGwuaXNFcXVhbCh0aGlzLmdldE91dGVyVG9wUmlnaHRDb3JuZXIoKSl8fGwuaXNFcXVhbCh0aGlzLmdldE91dGVyQm90dG9tTGVmdENvcm5lcigpKXx8bC5pc0VxdWFsKHRoaXMuZ2V0''@;'; put 'put ''T3V0ZXJCb3R0b21SaWdodENvcm5lcigpKX1nZXRPcHBvc2l0ZUNvcm5lcihsKXtyZXR1cm4gbCBpbnN0YW5jZW9mIEpPJiYobC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKSk/dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCk6bC5pc0VxdWFsKHRoaXMuZ2V0T3V0''@;'; put 'put ''ZXJUb3BTdGFydENvcm5lcigpKT90aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCk6bC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJUb3BFbmRDb3JuZXIoKSk/dGhpcy5nZXRPdXRlckJvdHRvbVN0YXJ0Q29ybmVyKCk6bC5pc0VxdWFsKHRoaXMuZ2V0T3V0ZXJCb3R0b21TdGFydENvcm5lcigp''@;'; put 'put ''KT90aGlzLmdldE91dGVyVG9wRW5kQ29ybmVyKCk6dm9pZCAwKX1nZXRCb3JkZXJzU2hhcmVkV2l0aChsKXtpZighdGhpcy5pbmNsdWRlc1JhbmdlKGwpKXJldHVybltdO2NvbnN0IGFfdG9wPU1hdGgubWluKHRoaXMuZnJvbS5yb3csdGhpcy50by5yb3cpLGFfYm90dG9tPU1hdGgubWF4KHRo''@;'; put 'put ''aXMuZnJvbS5yb3csdGhpcy50by5yb3cpLGFfbGVmdD1NYXRoLm1pbih0aGlzLmZyb20uY29sLHRoaXMudG8uY29sKSxhX3JpZ2h0PU1hdGgubWF4KHRoaXMuZnJvbS5jb2wsdGhpcy50by5jb2wpLGRfdG9wPU1hdGgubWluKGwuZnJvbS5yb3csbC50by5yb3cpLGRfYm90dG9tPU1hdGgubWF4''@;'; put 'put ''KGwuZnJvbS5yb3csbC50by5yb3cpLGRfbGVmdD1NYXRoLm1pbihsLmZyb20uY29sLGwudG8uY29sKSxkX3JpZ2h0PU1hdGgubWF4KGwuZnJvbS5jb2wsbC50by5jb2wpLGg9W107cmV0dXJuIGFfdG9wPT09ZF90b3AmJmgucHVzaCgidG9wIiksYV9yaWdodD09PWRfcmlnaHQmJmgucHVzaChQ''@;'; put 'put ''MihIZCx0aGlzKT8ibGVmdCI6InJpZ2h0IiksYV9ib3R0b209PT1kX2JvdHRvbSYmaC5wdXNoKCJib3R0b20iKSxhX2xlZnQ9PT1kX2xlZnQmJmgucHVzaChQMihIZCx0aGlzKT8icmlnaHQiOiJsZWZ0IiksaH1nZXRJbm5lcigpe2NvbnN0IGw9dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVy''@;'; put 'put ''KCksYT10aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCksZD1bXTtmb3IobGV0IGg9bC5yb3c7aDw9YS5yb3c7aCsrKWZvcihsZXQgZj1sLmNvbDtmPD1hLmNvbDtmKyspKHRoaXMuZnJvbS5yb3chPT1ofHx0aGlzLmZyb20uY29sIT09ZikmJih0aGlzLnRvLnJvdyE9PWh8fHRoaXMudG8u''@;'; put 'put ''Y29sIT09ZikmJmQucHVzaCh0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKGgsZikpO3JldHVybiBkfWdldEFsbCgpe2NvbnN0IGw9dGhpcy5nZXRPdXRlclRvcFN0YXJ0Q29ybmVyKCksYT10aGlzLmdldE91dGVyQm90dG9tRW5kQ29ybmVyKCksZD1bXTtmb3IobGV0IGg9bC5yb3c7aDw9YS5yb3c7''@;'; put 'put ''aCsrKWZvcihsZXQgZj1sLmNvbDtmPD1hLmNvbDtmKyspZC5wdXNoKGwucm93PT09aCYmbC5jb2w9PT1mP2w6YS5yb3c9PT1oJiZhLmNvbD09PWY/YTp0aGlzLl9jcmVhdGVDZWxsQ29vcmRzKGgsZikpO3JldHVybiBkfWZvckFsbChsKXtjb25zdCBhPXRoaXMuZ2V0T3V0ZXJUb3BTdGFydENv''@;'; put 'put ''cm5lcigpLGQ9dGhpcy5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpO2ZvcihsZXQgaD1hLnJvdztoPD1kLnJvdztoKyspZm9yKGxldCBmPWEuY29sO2Y8PWQuY29sO2YrKylpZighMT09PWwoaCxmKSlyZXR1cm59Y2xvbmUoKXtyZXR1cm4gbmV3IG5LKHRoaXMuaGlnaGxpZ2h0LHRoaXMuZnJv''@;'; put 'put ''bSx0aGlzLnRvLFAyKEhkLHRoaXMpKX10b09iamVjdCgpe3JldHVybntmcm9tOnRoaXMuZnJvbS50b09iamVjdCgpLHRvOnRoaXMudG8udG9PYmplY3QoKX19X2NyZWF0ZUNlbGxDb29yZHMobCxhKXtyZXR1cm4gbmV3IEpPKGwsYSxQMihIZCx0aGlzKSl9fWNvbnN0IHJLPW5LO2Z1bmN0aW9u''@;'; put 'put ''IEYyKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB5SmUoYyl7dmFyIGw9ZnVuY3Rpb24gX0plKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQi''@;'; put 'put ''KTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9s''@;'; put 'put ''Ij09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBpS3tnZXQgZXZlbnRNYW5hZ2VyKCl7cmV0dXJuIG5ldyBMMih0aGlzKX1j''@;'; put 'put ''b25zdHJ1Y3RvcihsLGEpe0YyKHRoaXMsInd0VGFibGUiLHZvaWQgMCksRjIodGhpcywid3RTY3JvbGwiLHZvaWQgMCksRjIodGhpcywid3RWaWV3cG9ydCIsdm9pZCAwKSxGMih0aGlzLCJ3dE92ZXJsYXlzIix2b2lkIDApLEYyKHRoaXMsInNlbGVjdGlvbk1hbmFnZXIiLHZvaWQgMCksRjIo''@;'; put 'put ''dGhpcywid3RFdmVudCIsdm9pZCAwKSxGMih0aGlzLCJndWlkIixgd3RfJHtRRygpfWApLEYyKHRoaXMsImRyYXdJbnRlcnJ1cHRlZCIsITEpLEYyKHRoaXMsImRyYXduIiwhMSksRjIodGhpcywiYWN0aXZlT3ZlcmxheU5hbWUiLCJtYXN0ZXIiKSxGMih0aGlzLCJkb21CaW5kaW5ncyIsdm9p''@;'; put 'put ''ZCAwKSxGMih0aGlzLCJ3dFNldHRpbmdzIix2b2lkIDApLHRoaXMuZG9tQmluZGluZ3M9e3Jvb3RUYWJsZTpsLHJvb3REb2N1bWVudDpsLm93bmVyRG9jdW1lbnQscm9vdFdpbmRvdzpsLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXd9LHRoaXMud3RTZXR0aW5ncz1hLHRoaXMud3RTY3JvbGw9''@;'; put 'put ''bmV3IGNKZSh0aGlzLmNyZWF0ZVNjcm9sbERhbygpKX1maW5kT3JpZ2luYWxIZWFkZXJzKCl7Y29uc3QgbD1bXTtpZih0aGlzLnd0VGFibGUuVEhFQUQuY2hpbGROb2Rlcy5sZW5ndGgmJnRoaXMud3RUYWJsZS5USEVBRC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXMubGVuZ3RoKXtmb3IobGV0''@;'; put 'put ''IGE9MCxkPXRoaXMud3RUYWJsZS5USEVBRC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXMubGVuZ3RoO2E8ZDthKyspbC5wdXNoKHRoaXMud3RUYWJsZS5USEVBRC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbYV0uaW5uZXJIVE1MKTt0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1u''@;'; put 'put ''SGVhZGVycyIpLmxlbmd0aHx8dGhpcy53dFNldHRpbmdzLnVwZGF0ZSgiY29sdW1uSGVhZGVycyIsW2Z1bmN0aW9uKGEsZCl7TG0oZCxsW2FdKX1dKX19Y3JlYXRlQ2VsbENvb3JkcyhsLGEpe3JldHVybiBuZXcgSk8obCxhLHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJydGxNb2RlIikp''@;'; put 'put ''fWNyZWF0ZUNlbGxSYW5nZShsLGEsZCl7cmV0dXJuIG5ldyBySyhsLGEsZCx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicnRsTW9kZSIpKX1kcmF3KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtyZXR1cm4gdGhpcy5k''@;'; put 'put ''cmF3SW50ZXJydXB0ZWQ9ITEsdGhpcy53dFRhYmxlLmlzVmlzaWJsZSgpP3RoaXMud3RUYWJsZS5kcmF3KGwpOnRoaXMuZHJhd0ludGVycnVwdGVkPSEwLHRoaXN9Z2V0Q2VsbChsKXtpZighKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0p''@;'; put 'put ''KXJldHVybiB0aGlzLnd0VGFibGUuZ2V0Q2VsbChsKTtjb25zdCBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKSxoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxmPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NC''@;'; put 'put ''b3R0b20iKSx2PXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpO2lmKGwucm93PGgmJmwuY29sPHYpcmV0dXJuIHRoaXMud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUud3RUYWJsZS5nZXRDZWxsKGwpO2lmKGwucm93PGgp''@;'; put 'put ''cmV0dXJuIHRoaXMud3RPdmVybGF5cy50b3BPdmVybGF5LmNsb25lLnd0VGFibGUuZ2V0Q2VsbChsKTtpZihsLmNvbDx2JiZsLnJvdz49ZC1mKXtpZih0aGlzLnd0T3ZlcmxheXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZ0aGlzLnd0T3ZlcmxheXMuYm90dG9tSW5saW5lU3Rh''@;'; put 'put ''cnRDb3JuZXJPdmVybGF5LmNsb25lKXJldHVybiB0aGlzLnd0T3ZlcmxheXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lLnd0VGFibGUuZ2V0Q2VsbChsKX1lbHNle2lmKGwuY29sPHYpcmV0dXJuIHRoaXMud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuY2xvbmUu''@;'; put 'put ''d3RUYWJsZS5nZXRDZWxsKGwpO2lmKGwucm93PGQmJmwucm93Pj1kLWYmJnRoaXMud3RPdmVybGF5cy5ib3R0b21PdmVybGF5JiZ0aGlzLnd0T3ZlcmxheXMuYm90dG9tT3ZlcmxheS5jbG9uZSlyZXR1cm4gdGhpcy53dE92ZXJsYXlzLmJvdHRvbU92ZXJsYXkuY2xvbmUud3RUYWJsZS5nZXRD''@;'; put 'put ''ZWxsKGwpfXJldHVybiB0aGlzLnd0VGFibGUuZ2V0Q2VsbChsKX1zY3JvbGxWaWV3cG9ydChsLGEsZCl7cmV0dXJuIHRoaXMud3RTY3JvbGwuc2Nyb2xsVmlld3BvcnQobCxhLGQpfXNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwsYSl7cmV0dXJuIHRoaXMud3RTY3JvbGwuc2Nyb2xsVmll''@;'; put 'put ''d3BvcnRIb3Jpem9udGFsbHkobCxhKX1zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkobCxhKXtyZXR1cm4gdGhpcy53dFNjcm9sbC5zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkobCxhKX1nZXRWaWV3cG9ydCgpe3JldHVyblt0aGlzLnd0VGFibGUuZ2V0Rmlyc3RWaXNpYmxlUm93KCksdGhpcy53''@;'; put 'put ''dFRhYmxlLmdldEZpcnN0VmlzaWJsZUNvbHVtbigpLHRoaXMud3RUYWJsZS5nZXRMYXN0VmlzaWJsZVJvdygpLHRoaXMud3RUYWJsZS5nZXRMYXN0VmlzaWJsZUNvbHVtbigpXX1kZXN0cm95KCl7dGhpcy53dE92ZXJsYXlzLmRlc3Ryb3koKSx0aGlzLnd0RXZlbnQuZGVzdHJveSgpfWNyZWF0''@;'; put 'put ''ZVNjcm9sbERhbygpe2NvbnN0IGw9dGhpcztyZXR1cm57Z2V0IGRyYXduKCl7cmV0dXJuIGwuZHJhd259LGdldCB0b3BPdmVybGF5KCl7cmV0dXJuIGwud3RPdmVybGF5cy50b3BPdmVybGF5fSxnZXQgaW5saW5lU3RhcnRPdmVybGF5KCl7cmV0dXJuIGwud3RPdmVybGF5cy5pbmxpbmVTdGFy''@;'; put 'put ''dE92ZXJsYXl9LGdldCB3dFRhYmxlKCl7cmV0dXJuIGwud3RUYWJsZX0sZ2V0IHd0Vmlld3BvcnQoKXtyZXR1cm4gbC53dFZpZXdwb3J0fSxnZXQgd3RTZXR0aW5ncygpe3JldHVybiBsLnd0U2V0dGluZ3N9LGdldCByb290V2luZG93KCl7cmV0dXJuIGwuZG9tQmluZGluZ3Mucm9vdFdpbmRv''@;'; put 'put ''d30sZ2V0IHRvdGFsUm93cygpe3JldHVybiBsLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIil9LGdldCB0b3RhbENvbHVtbnMoKXtyZXR1cm4gbC53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpfSxnZXQgZml4ZWRSb3dzVG9wKCl7cmV0dXJuIGwud3RTZXR0''@;'; put 'put ''aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKX0sZ2V0IGZpeGVkUm93c0JvdHRvbSgpe3JldHVybiBsLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIil9LGdldCBmaXhlZENvbHVtbnNTdGFydCgpe3JldHVybiBsLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4''@;'; put 'put ''ZWRDb2x1bW5zU3RhcnQiKX19fWdldFRhYmxlRGFvKCl7Y29uc3QgbD10aGlzO3JldHVybntnZXQgd290KCl7cmV0dXJuIGx9LGdldCBwYXJlbnRUYWJsZU9mZnNldCgpe3JldHVybiBsLmNsb25lU291cmNlLnd0VGFibGUudGFibGVPZmZzZXR9LGdldCBjbG9uZVNvdXJjZSgpe3JldHVybiBs''@;'; put 'put ''LmNsb25lU291cmNlfSxnZXQgd29ya3NwYWNlV2lkdGgoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZVdpZHRoKCl9LGdldCB3dFZpZXdwb3J0KCl7cmV0dXJuIGwud3RWaWV3cG9ydH0sZ2V0IHd0T3ZlcmxheXMoKXtyZXR1cm4gbC53dE92ZXJsYXlzfSxnZXQgc2VsZWN0aW9u''@;'; put 'put ''TWFuYWdlcigpe3JldHVybiBsLnNlbGVjdGlvbk1hbmFnZXJ9LGdldCBzdHlsZXNIYW5kbGVyKCl7cmV0dXJuIGwuc3R5bGVzSGFuZGxlcn0sZ2V0IGRyYXduKCl7cmV0dXJuIGwuZHJhd259LHNldCBkcmF3bihhKXtsLmRyYXduPWF9LGdldCB3dFRhYmxlKCl7cmV0dXJuIGwud3RUYWJsZX0s''@;'; put 'put ''Z2V0IHN0YXJ0Q29sdW1uUmVuZGVyZWQoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0Q29sdW1ufSxnZXQgc3RhcnRDb2x1bW5WaXNpYmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3Iuc3RhcnRDb2x1bW59''@;'; put 'put ''LGdldCBzdGFydENvbHVtblBhcnRpYWxseVZpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvci5zdGFydENvbHVtbn0sZ2V0IGVuZENvbHVtblJlbmRlcmVkKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3Vs''@;'; put 'put ''YXRvci5lbmRDb2x1bW59LGdldCBlbmRDb2x1bW5WaXNpYmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3IuZW5kQ29sdW1ufSxnZXQgZW5kQ29sdW1uUGFydGlhbGx5VmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQuY29sdW1uc1BhcnRpYWxseVZp''@;'; put 'put ''c2libGVDYWxjdWxhdG9yLmVuZENvbHVtbn0sZ2V0IGNvdW50Q29sdW1uc1JlbmRlcmVkKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5jb3VudH0sZ2V0IGNvdW50Q29sdW1uc1Zpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LmNvbHVtbnNWaXNpYmxl''@;'; put 'put ''Q2FsY3VsYXRvci5jb3VudH0sZ2V0IHN0YXJ0Um93UmVuZGVyZWQoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0Um93fSxnZXQgc3RhcnRSb3dWaXNpYmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5yb3dzVmlzaWJsZUNhbGN1bGF0b3Iuc3RhcnRSb3d9''@;'; put 'put ''LGdldCBzdGFydFJvd1BhcnRpYWxseVZpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvci5zdGFydFJvd30sZ2V0IGVuZFJvd1JlbmRlcmVkKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5lbmRSb3d9LGdl''@;'; put 'put ''dCBlbmRSb3dWaXNpYmxlKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5yb3dzVmlzaWJsZUNhbGN1bGF0b3IuZW5kUm93fSxnZXQgZW5kUm93UGFydGlhbGx5VmlzaWJsZSgpe3JldHVybiBsLnd0Vmlld3BvcnQucm93c1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9yLmVuZFJvd30sZ2V0IGNvdW50''@;'; put 'put ''Um93c1JlbmRlcmVkKCl7cmV0dXJuIGwud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5jb3VudH0sZ2V0IGNvdW50Um93c1Zpc2libGUoKXtyZXR1cm4gbC53dFZpZXdwb3J0LnJvd3NWaXNpYmxlQ2FsY3VsYXRvci5jb3VudH0sZ2V0IGNvbHVtbkhlYWRlcnMoKXtyZXR1cm4gbC53''@;'; put 'put ''dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKX0sZ2V0IHJvd0hlYWRlcnMoKXtyZXR1cm4gbC53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKX19fX1mdW5jdGlvbiBrZmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHdKZShjKXt2YXIgbD1mdW5jdGlvbiBD''@;'; put 'put ''SmUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9y''@;'; put 'put ''KCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMs''@;'; put 'put ''bCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFNKZSBleHRlbmRzIGlLe2NvbnN0cnVjdG9yKGwsYSxkKXtzdXBlcihsLGEpLGtmZSh0aGlzLCJjbG9uZVNvdXJjZSIsdm9pZCAwKSxrZmUodGhpcywiY2xvbmVPdmVy''@;'; put 'put ''bGF5Iix2b2lkIDApO2NvbnN0IGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZhY2FkZSIsdGhpcyk7dGhpcy5jbG9uZVNvdXJjZT1kLnNvdXJjZSx0aGlzLmNsb25lT3ZlcmxheT1kLm92ZXJsYXksdGhpcy5zdHlsZXNIYW5kbGVyPWQuc3R5bGVzSGFuZGxlcix0aGlzLnd0VGFibGU9''@;'; put 'put ''dGhpcy5jbG9uZU92ZXJsYXkuY3JlYXRlVGFibGUodGhpcy5nZXRUYWJsZURhbygpLGgsdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3MpLHRoaXMud3RWaWV3cG9ydD1kLnZpZXdwb3J0LHRoaXMuc2VsZWN0aW9uTWFuYWdlcj1kLnNlbGVjdGlvbk1hbmFnZXIsdGhpcy53dEV2ZW50''@;'; put 'put ''PW5ldyBsZmUoaCx0aGlzLmRvbUJpbmRpbmdzLHRoaXMud3RTZXR0aW5ncyx0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnd0VGFibGUsdGhpcy5zZWxlY3Rpb25NYW5hZ2VyLGQuZXZlbnQpLHRoaXMuZmluZE9yaWdpbmFsSGVhZGVycygpfX1jbGFzcyBJRXtjb25zdHJ1Y3RvcihsLGEsZCxoLGYp''@;'; put 'put ''eyhmdW5jdGlvbiBNSmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHhKZShjKXt2YXIgbD1mdW5jdGlvbiBFSmUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxs''@;'; put 'put ''fHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3Jl''@;'; put 'put ''dHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSkodGhpcywid3RTZXR0aW5ncyIsbnVsbCksQ3AodGhpcywid290''@;'; put 'put ''IixsLHt3cml0YWJsZTohMX0pLHRoaXMuZG9tQmluZGluZ3M9Zix0aGlzLmZhY2FkZUdldHRlcj1hLHRoaXMud3RTZXR0aW5ncz1oO2NvbnN0e1RBQkxFOnYsaGlkZXI6TSxzcHJlYWRlcjpELGhvbGRlcjpaLHd0Um9vdEVsZW1lbnQ6bmV9PXRoaXMud290Lnd0VGFibGU7dGhpcy5pbnN0YW5j''@;'; put 'put ''ZT10aGlzLndvdCx0aGlzLnR5cGU9ZCx0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PW51bGwsdGhpcy5UQUJMRT12LHRoaXMuaGlkZXI9TSx0aGlzLnNwcmVhZGVyPUQsdGhpcy5ob2xkZXI9Wix0aGlzLnd0Um9vdEVsZW1lbnQ9bmUsdGhpcy50cmltbWluZ0NvbnRhaW5lcj10Xyh0''@;'; put 'put ''aGlzLmhpZGVyLnBhcmVudE5vZGUucGFyZW50Tm9kZSksdGhpcy5uZWVkRnVsbFJlbmRlcj10aGlzLnNob3VsZEJlUmVuZGVyZWQoKSx0aGlzLmNsb25lPXRoaXMubWFrZUNsb25lKCl9aGFzUmVuZGVyaW5nU3RhdGVDaGFuZ2VkKCl7cmV0dXJuIHRoaXMubmVlZEZ1bGxSZW5kZXIhPT10aGlz''@;'; put 'put ''LnNob3VsZEJlUmVuZGVyZWQoKX11cGRhdGVTdGF0ZU9mUmVuZGVyaW5nKGwpeyJiZWZvcmUiPT09bCYmdGhpcy5zaG91bGRCZVJlbmRlcmVkKCk/dGhpcy5uZWVkRnVsbFJlbmRlcj0hMDoiYWZ0ZXIiPT09bCYmIXRoaXMuc2hvdWxkQmVSZW5kZXJlZCgpJiYodGhpcy5uZWVkRnVsbFJlbmRl''@;'; put 'put ''cj0hMSl9c2hvdWxkQmVSZW5kZXJlZCgpe3JldHVybiEwfXVwZGF0ZVRyaW1taW5nQ29udGFpbmVyKCl7dGhpcy50cmltbWluZ0NvbnRhaW5lcj10Xyh0aGlzLmhpZGVyLnBhcmVudE5vZGUucGFyZW50Tm9kZSl9dXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50KCl7Y29uc3R7d3RUYWJsZTps''@;'; put 'put ''fT10aGlzLndvdCx7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzO3RoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9ImhpZGRlbiI9PT1hLmdldENvbXB1dGVkU3R5bGUobC53dFJvb3RFbGVtZW50LnBhcmVudE5vZGUpLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93Iik/dGhp''@;'; put 'put ''cy53b3Qud3RUYWJsZS5ob2xkZXI6bUUobC5UQUJMRSl9Z2V0UmVsYXRpdmVDZWxsUG9zaXRpb24obCxhLGQpe2lmKCExPT09dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5jb250YWlucyhsKSlyZXR1cm4gdm9pZCB0bChgVGhlIHByb3ZpZGVkIGVsZW1lbnQgaXMgbm90IGEgY2hpbGQgb2Yg''@;'; put 'put ''dGhlICR7dGhpcy50eXBlfSBvdmVybGF5YCk7Y29uc3QgaD10aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93LGY9ZDx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSx2PWE8dGhpcy53dFNldHRp''@;'; put 'put ''bmdzLmdldFNldHRpbmcoImZpeGVkUm93c1RvcCIpLE09YT49dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSxEPXRoaXMuY2xvbmUud3RUYWJsZS5zcHJlYWRlcixaPXtzdGFydDp0aGlz''@;'; put 'put ''LmdldFJlbGF0aXZlU3RhcnRQb3NpdGlvbihEKSx0b3A6RC5vZmZzZXRUb3B9LG5lPXtzdGFydDp0aGlzLmdldFJlbGF0aXZlU3RhcnRQb3NpdGlvbihsKSx0b3A6bC5vZmZzZXRUb3B9O2xldCBjZT1udWxsO3JldHVybiBjZT1oP3RoaXMuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb25XaXRoaW5X''@;'; put 'put ''aW5kb3codixmLG5lLFopOnRoaXMuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb25XaXRoaW5Ib2xkZXIodixNLGYsbmUsWiksY2V9Z2V0UmVsYXRpdmVTdGFydFBvc2l0aW9uKGwpe3JldHVybiB0aGlzLmlzUnRsKCk/bC5vZmZzZXRQYXJlbnQub2Zmc2V0V2lkdGgtbC5vZmZzZXRMZWZ0LWwub2Zm''@;'; put 'put ''c2V0V2lkdGg6bC5vZmZzZXRMZWZ0fWdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uV2l0aGluV2luZG93KGwsYSxkLGgpe2NvbnN0IGY9dGhpcy53b3Qud3RUYWJsZS53dFJvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCB2PTAsTT0wO2lmKGEpe2xldCBEPWYubGVmdDt0aGlz''@;'; put 'put ''LmlzUnRsKCkmJihEPXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdy5pbm5lcldpZHRoLShmLmxlZnQrZi53aWR0aCtoMCgpKSksdj1EPD0wPy0xKkQ6MH1lbHNlIHY9aC5zdGFydDtyZXR1cm4gTT1sP3RoaXMuY2xvbmUud3RUYWJsZS5UQUJMRS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50''@;'; put 'put ''b3AtZi50b3A6aC50b3Ase3N0YXJ0OmQuc3RhcnQrdix0b3A6ZC50b3ArTX19Z2V0UmVsYXRpdmVDZWxsUG9zaXRpb25XaXRoaW5Ib2xkZXIobCxhLGQsaCxmKXtjb25zdCB2X2hvcml6b250YWw9dGhpcy53b3Qud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRp''@;'; put 'put ''b24oKSx2X3ZlcnRpY2FsPXRoaXMud290Lnd0T3ZlcmxheXMudG9wT3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpO2xldCBNPTAsRD0wO2lmKGR8fChNPXZfaG9yaXpvbnRhbC1mLnN0YXJ0KSxhKXtjb25zdCBaPXRoaXMud290Lnd0VGFibGUud3RSb290RWxlbWVudC5nZXRCb3VuZGluZ0Ns''@;'; put 'put ''aWVudFJlY3QoKTtEPS0xKnRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3ArWi50b3B9ZWxzZSBsfHwoRD12X3ZlcnRpY2FsLWYudG9wKTtyZXR1cm57c3RhcnQ6aC5zdGFydC1NLHRvcDpoLnRvcC1EfX1tYWtlQ2xvbmUoKXtpZigtMT09PXlmZS5p''@;'; put 'put ''bmRleE9mKHRoaXMudHlwZSkpdGhyb3cgbmV3IEVycm9yKGBDbG9uZSB0eXBlICIke3RoaXMudHlwZX0iIGlzIG5vdCBzdXBwb3J0ZWQuYCk7Y29uc3R7d3RUYWJsZTpsLHd0U2V0dGluZ3M6YX09dGhpcy53b3Qse3Jvb3REb2N1bWVudDpkLHJvb3RXaW5kb3c6aH09dGhpcy5kb21CaW5kaW5n''@;'; put 'put ''cyxmPWQuY3JlYXRlRWxlbWVudCgiZGl2Iiksdj1kLmNyZWF0ZUVsZW1lbnQoInRhYmxlIiksTT1sLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZTtmLmNsYXNzTmFtZT1gJHtxWGUuZ2V0KHRoaXMudHlwZSl9IGhhbmRzb250YWJsZWAsZi5zZXRBdHRyaWJ1dGUoImRpciIsdGhpcy5pc1J0bCgp''@;'; put 'put ''PyJydGwiOiJsdHIiKSxmLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsZi5zdHlsZS50b3A9MCxmLnN0eWxlLm92ZXJmbG93PSJ2aXNpYmxlIix0aGlzLmlzUnRsKCk/Zi5zdHlsZS5yaWdodD0wOmYuc3R5bGUubGVmdD0wLGEuZ2V0U2V0dGluZygiYXJpYVRhZ3MiKSYmdmEoZixbX3AoKV0p''@;'; put 'put ''LHYuY2xhc3NOYW1lPWwuVEFCTEUuY2xhc3NOYW1lLGwuVEFCTEUuZ2V0QXR0cmlidXRlKCJyb2xlIikmJnYuc2V0QXR0cmlidXRlKCJyb2xlIixsLlRBQkxFLmdldEF0dHJpYnV0ZSgicm9sZSIpKSxmLmFwcGVuZENoaWxkKHYpLE0uYXBwZW5kQ2hpbGQoZik7Y29uc3QgWj10aGlzLnd0U2V0''@;'; put 'put ''dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7cmV0dXJuIHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9ITA9PT1afHwiaG9yaXpvbnRhbCI9PT1aJiZ0aGlzLnR5cGU9PT1aN3x8InZlcnRpY2FsIj09PVomJnRoaXMudHlwZT09PVc3P2g6ImhpZGRlbiI9PT1oLmdl''@;'; put 'put ''dENvbXB1dGVkU3R5bGUoTSkuZ2V0UHJvcGVydHlWYWx1ZSgib3ZlcmZsb3ciKT9sLmhvbGRlcjptRShsLlRBQkxFKSxuZXcgU0plKHYsdGhpcy53dFNldHRpbmdzLHtzb3VyY2U6dGhpcy53b3Qsb3ZlcmxheTp0aGlzLHZpZXdwb3J0OnRoaXMud290Lnd0Vmlld3BvcnQsZXZlbnQ6dGhpcy53''@;'; put 'put ''b3Qud3RFdmVudCxzZWxlY3Rpb25NYW5hZ2VyOnRoaXMud290LnNlbGVjdGlvbk1hbmFnZXIsc3R5bGVzSGFuZGxlcjp0aGlzLndvdC5zdHlsZXNIYW5kbGVyfSl9cmVmcmVzaCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07''@;'; put 'put ''aWYodGhpcy5uZWVkRnVsbFJlbmRlcil7Y29uc3QgYT10aGlzLmNsb25lLmNsb25lU291cmNlO2EuYWN0aXZlT3ZlcmxheU5hbWU9dGhpcy5jbG9uZS53dFRhYmxlLm5hbWUsdGhpcy5jbG9uZS5kcmF3KGwpLGEuYWN0aXZlT3ZlcmxheU5hbWU9Im1hc3RlciJ9fXJlc2V0KCl7Y29uc3QgbD10''@;'; put 'put ''aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyO1tsLnN0eWxlLHRoaXMuY2xvbmUud3RUYWJsZS5oaWRlci5zdHlsZSxsLnBhcmVudE5vZGUuc3R5bGVdLmZvckVhY2godj0+e3Yud2lkdGg9IiIsdi5oZWlnaHQ9IiJ9KX1pc1J0bCgpe3JldHVybiB0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygi''@;'; put 'put ''cnRsTW9kZSIpfWRlc3Ryb3koKXt0aGlzLmNsb25lLmV2ZW50TWFuYWdlci5kZXN0cm95KCl9fWNvbnN0IG9LPWM9Pntjb25zdCBsPWMuc3R5bGVzSGFuZGxlcjtpZihsLmlzQ2xhc3NpY1RoZW1lKCkpcmV0dXJuIE9iamVjdC5mcmVlemUoe3dpZHRoOjYsaGVpZ2h0OjYsYm9yZGVyV2lkdGg6''@;'; put 'put ''MSxib3JkZXJTdHlsZToic29saWQiLGJvcmRlckNvbG9yOiIjRkZGIn0pO2NvbnN0IGE9bC5nZXRDU1NWYXJpYWJsZVZhbHVlKCJjZWxsLWF1dG9maWxsLXNpemUiKSxkPWwuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1hdXRvZmlsbC1ib3JkZXItd2lkdGgiKSxoPWwuZ2V0Q1NTVmFyaWFi''@;'; put 'put ''bGVWYWx1ZSgiY2VsbC1hdXRvZmlsbC1ib3JkZXItY29sb3IiKTtyZXR1cm4gT2JqZWN0LmZyZWV6ZSh7d2lkdGg6YSxoZWlnaHQ6YSxib3JkZXJXaWR0aDpkLGJvcmRlclN0eWxlOiJzb2xpZCIsYm9yZGVyQ29sb3I6aH0pfTtjbGFzcyBESmUgZXh0ZW5kcyBJRXtjb25zdHJ1Y3RvcihsLGEs''@;'; put 'put ''ZCxoKXtzdXBlcihsLGEsWjcsZCxoKSxmdW5jdGlvbiBUSmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEFKZShjKXt2YXIgbD1mdW5jdGlvbiBrSmUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAh''@;'; put 'put ''PT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJl''@;'; put 'put ''cikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJjYWNoZWRGaXhl''@;'; put 'put ''ZFJvd3NUb3AiLC0xKSx0aGlzLmNhY2hlZEZpeGVkUm93c1RvcD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIil9Y3JlYXRlVGFibGUoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tk''@;'; put 'put ''XTtyZXR1cm4gbmV3IG5KZSguLi5hKX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJUb3BPdmVybGF5Iil9cmVzZXRGaXhlZFBvc2l0aW9uKCl7aWYoIXRoaXMubmVlZEZ1bGxSZW5kZXJ8fCF0aGlzLnNob3VsZEJlUmVu''@;'; put 'put ''ZGVyZWQoKXx8IXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuITE7Y29uc3QgbD10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUse3Jvb3RXaW5kb3c6YX09dGhpcy5kb21CaW5kaW5ncyxkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2''@;'; put 'put ''ZW50T3ZlcmZsb3ciKTtsZXQgaD0wLGY9ITE7aWYodGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWF8fGQmJiJ2ZXJ0aWNhbCI9PT1kKWg9dGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLHlFKGwpO2Vsc2V7Y29uc3R7d3RUYWJsZTpNfT10aGlzLndvdCxEPU0uaGlkZXIuZ2V0Qm91bmRpbmdDbGll''@;'; put 'put ''bnRSZWN0KCk7Zj1NYXRoLmNlaWwoRC5ib3R0b20pPT09bC5vZmZzZXRIZWlnaHQsaD10aGlzLmdldE92ZXJsYXlPZmZzZXQoKSxrTyhsLCIwcHgiLGAke2h9cHhgKX1jb25zdCB2PXRoaXMuYWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKGgsZik7cmV0dXJuIHRoaXMuYWRqdXN0RWxlbWVu''@;'; put 'put ''dHNTaXplKCksdn1zZXRTY3JvbGxQb3NpdGlvbihsKXtjb25zdCBhPXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdztsZXQgZD0hMTtyZXR1cm4gdGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD09PWEmJmEuc2Nyb2xsWSE9PWw/KGEuc2Nyb2xsVG8oVE8oYSksbCksZD0hMCk6dGhp''@;'; put 'put ''cy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3AhPT1sJiYodGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3A9bCxkPSEwKSxkfW9uU2Nyb2xsKCl7dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoIm9uU2Nyb2xsSG9yaXpvbnRhbGx5Iil9c3VtQ2Vs''@;'; put 'put ''bFNpemVzKGwsYSl7Y29uc3QgZD10aGlzLndvdC5zdHlsZXNIYW5kbGVyLmdldERlZmF1bHRSb3dIZWlnaHQoKTtsZXQgaD1sLGY9MDtmb3IoO2g8YTspe2NvbnN0IHY9dGhpcy53b3Qud3RUYWJsZS5nZXRSb3dIZWlnaHQoaCk7Zis9dm9pZCAwPT09dj9kOnYsaCs9MX1yZXR1cm4gZn1hZGp1''@;'; put 'put ''c3RFbGVtZW50c1NpemUoKXt0aGlzLnVwZGF0ZVRyaW1taW5nQ29udGFpbmVyKCksdGhpcy5uZWVkRnVsbFJlbmRlciYmKHRoaXMuYWRqdXN0Um9vdEVsZW1lbnRTaXplKCksdGhpcy5hZGp1c3RSb290Q2hpbGRyZW5TaXplKCkpfWFkanVzdFJvb3RFbGVtZW50U2l6ZSgpe2NvbnN0e3d0VGFi''@;'; put 'put ''bGU6bCx3dFZpZXdwb3J0OmF9PXRoaXMud290LHtyb290RG9jdW1lbnQ6ZCxyb290V2luZG93Omh9PXRoaXMuZG9tQmluZGluZ3Msdj10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUuc3R5bGUsTT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93''@;'; put 'put ''Iik7aWYodGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWh8fCJob3Jpem9udGFsIj09PU0pe2xldCBaPWEuZ2V0V29ya3NwYWNlV2lkdGgoKTthLmhhc1ZlcnRpY2FsU2Nyb2xsKCkmJihaLT1oMChkKSksWj1NYXRoLm1pbihaLGwud3RSb290RWxlbWVudC5zY3JvbGxXaWR0aCksdi53aWR0aD1g''@;'; put 'put ''JHtafXB4YH1lbHNlIHYud2lkdGg9IiI7dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5zdHlsZS53aWR0aD12LndpZHRoO2xldCBEPU11KHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7bC5oYXNEZWZpbmVkU2l6ZSgpfHwoRD0wKSx2LmhlaWdodD1gJHtEfXB4YH1hZGp1c3RSb290Q2hpbGRy''@;'; put 'put ''ZW5TaXplKCl7Y29uc3R7aG9sZGVyOmx9PXRoaXMuY2xvbmUud3RUYWJsZSxhPW9LKHRoaXMud290KSxkPXRoaXMud290LnNlbGVjdGlvbk1hbmFnZXIuZ2V0Rm9jdXNTZWxlY3Rpb24oKT9wYXJzZUludChhLmhlaWdodCwxMCkvMjowO3RoaXMuY2xvbmUud3RUYWJsZS5oaWRlci5zdHlsZS53''@;'; put 'put ''aWR0aD10aGlzLmhpZGVyLnN0eWxlLndpZHRoLGwuc3R5bGUud2lkdGg9bC5wYXJlbnROb2RlLnN0eWxlLndpZHRoLGwuc3R5bGUuaGVpZ2h0PWAke3BhcnNlSW50KGwucGFyZW50Tm9kZS5zdHlsZS5oZWlnaHQsMTApK2R9cHhgfWFwcGx5VG9ET00oKXtjb25zdCBsPXRoaXMud3RTZXR0aW5n''@;'; put 'put ''cy5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKTtpZigibnVtYmVyIj09dHlwZW9mIHRoaXMud290Lnd0Vmlld3BvcnQucm93c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbil0aGlzLnNwcmVhZGVyLnN0eWxlLnRvcD1gJHt0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxh''@;'; put 'put ''dG9yLnN0YXJ0UG9zaXRpb259cHhgO2Vsc2V7aWYoMCE9PWwpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgdmFsdWUgb2YgdGhlIHJvd3NSZW5kZXJDYWxjdWxhdG9yIik7dGhpcy5zcHJlYWRlci5zdHlsZS50b3A9IjAifXRoaXMuc3ByZWFkZXIuc3R5bGUuYm90dG9tPSIiLHRoaXMubmVl''@;'; put 'put ''ZEZ1bGxSZW5kZXImJnRoaXMuc3luY092ZXJsYXlPZmZzZXQoKX1zeW5jT3ZlcmxheU9mZnNldCgpe2NvbnN0IGw9dGhpcy5pc1J0bCgpPyJyaWdodCI6ImxlZnQiLHtzcHJlYWRlcjphfT10aGlzLmNsb25lLnd0VGFibGU7YS5zdHlsZVtsXT0ibnVtYmVyIj09dHlwZW9mIHRoaXMud290Lnd0''@;'; put 'put ''Vmlld3BvcnQuY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbj9gJHt0aGlzLndvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb259cHhgOiIifXNjcm9sbFRvKGwsYSl7Y29uc3R7d290OmQsd3RTZXR0aW5nczpofT10aGlzLHY9KGQu''@;'; put 'put ''Y2xvbmVTb3VyY2U/ZC5jbG9uZVNvdXJjZTpkKS53dFRhYmxlLmhvbGRlcixNPWguZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpLFo9MD09PWguZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIikmJk0ubGVuZ3RoPjAmJiFwYSh2LnBhcmVudE5vZGUsImlubmVyQm9yZGVyVG9wIik/MTowO2xl''@;'; put 'put ''dCBuZT10aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0KCksY2U9MDtpZihhJiZ0aGlzLndvdC53dFRhYmxlLmdldFJvd0hlaWdodChsKT50aGlzLndvdC53dFZpZXdwb3J0LmdldFZpZXdwb3J0SGVpZ2h0KCkmJihhPSExKSxhJiZ2Lm9mZnNldEhlaWdodCE9PXYuY2xpZW50SGVpZ2h0JiYoY2U9''@;'; put 'put ''aDAodGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQpKSxhKXtjb25zdCBiZT1oLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLEVlPWguZ2V0U2V0dGluZygidG90YWxSb3dzIik7bmUrPXRoaXMuc3VtQ2VsbFNpemVzKDAsbCsxKSxuZS09ZC53dFZpZXdwb3J0LmdldFZpZXdwb3J0''@;'; put 'put ''SGVpZ2h0KCktdGhpcy5zdW1DZWxsU2l6ZXMoRWUtYmUsRWUpLG5lKz0xLG5lKz1afWVsc2UgbmUrPXRoaXMuc3VtQ2VsbFNpemVzKGguZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksbCk7cmV0dXJuIG5lKz1jZSxDMmUodGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCk9PT1uZS1a''@;'; put 'put ''JiZaPjAmJnRoaXMud290Lnd0T3ZlcmxheXMuZXhwYW5kSGlkZXJWZXJ0aWNhbGx5QnkoWiksdGhpcy5zZXRTY3JvbGxQb3NpdGlvbihuZSl9Z2V0VGFibGVQYXJlbnRPZmZzZXQoKXtyZXR1cm4gdGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudD09PXRoaXMuZG9tQmluZGluZ3Mucm9v''@;'; put 'put ''dFdpbmRvdz90aGlzLndvdC53dFRhYmxlLmhvbGRlck9mZnNldC50b3A6MH1nZXRTY3JvbGxQb3NpdGlvbigpe3JldHVybiBBTyh0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LHRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvdyl9Z2V0T3ZlcmxheU9mZnNldCgpe2NvbnN0e3Jvb3RX''@;'; put 'put ''aW5kb3c6bH09dGhpcy5kb21CaW5kaW5ncyxhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtsZXQgZD0wO2lmKHRoaXMudHJpbW1pbmdDb250YWluZXI9PT1sJiYoIWF8fCJ2ZXJ0aWNhbCIhPT1hKSl7Y29uc3Qgdj10aGlzLndvdC53dFRhYmxlLmdldFRv''@;'; put 'put ''dGFsSGVpZ2h0KCktdGhpcy5jbG9uZS53dFRhYmxlLmdldFRvdGFsSGVpZ2h0KCk7ZD1NYXRoLm1heCh0aGlzLmdldFNjcm9sbFBvc2l0aW9uKCktdGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLDApLGQ+diYmKGQ9MCl9cmV0dXJuIGR9YWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKGwp''@;'; put 'put ''e2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3R7d3RTZXR0aW5nczpkfT10aGlzLGg9dGhpcy53b3Qud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSxmPWQuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiksdj0iaG9yaXpv''@;'; put 'put ''bnRhbCI9PT1kLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2Y/Y2EoaCwiZW1wdHlDb2x1bW5zIik6VGkoaCwiZW1wdHlDb2x1bW5zIik7bGV0IE09ITE7aWYoIWEmJiF2KXtjb25zdCBEPWQuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksWj10aGlzLmNhY2hlZEZpeGVkUm93c1Rv''@;'; put 'put ''cCE9PUQsbmU9ZC5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIik7aWYoKFp8fDA9PT1EKSYmbmUubGVuZ3RoPjApe2NvbnN0IGNlPXBhKGgsImlubmVyQm9yZGVyVG9wIik7dGhpcy5jYWNoZWRGaXhlZFJvd3NUb3A9ZC5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxsfHwwPT09ZC5nZXRT''@;'; put 'put ''ZXR0aW5nKCJ0b3RhbFJvd3MiKT8oVGkoaCwiaW5uZXJCb3JkZXJUb3AiKSxNPSFjZSk6KGNhKGgsImlubmVyQm9yZGVyVG9wIiksTT1jZSl9fXJldHVybiBNfX1jb25zdCBEZmU9e2dldEZpcnN0UmVuZGVyZWRSb3coKXtjb25zdCBjPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3Rh''@;'; put 'put ''bFJvd3MiKSxsPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSxhPWMtbDtyZXR1cm4gMD09PWN8fDA9PT1sPy0xOmE8MD8wOmF9LGdldEZpcnN0VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmdldEZpcnN0UmVuZGVyZWRSb3coKX0sZ2V0Rmlyc3RQYXJ0aWFs''@;'; put 'put ''bHlWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RSZW5kZXJlZFJvdygpfSxnZXRMYXN0UmVuZGVyZWRSb3coKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLTF9LGdldExhc3RWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFJlbmRl''@;'; put 'put ''cmVkUm93KCl9LGdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuZ2V0TGFzdFJlbmRlcmVkUm93KCl9LGdldFJlbmRlcmVkUm93c0NvdW50KCl7Y29uc3QgYz10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik7cmV0dXJuIE1hdGgubWluKHRoaXMu''@;'; put 'put ''d3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NCb3R0b20iKSxjKX0sZ2V0VmlzaWJsZVJvd3NDb3VudCgpe3JldHVybiB0aGlzLmdldFJlbmRlcmVkUm93c0NvdW50KCl9LGdldENvbHVtbkhlYWRlcnNDb3VudDooKT0+MH07Q3AoRGZlLCJNSVhJTl9OQU1FIiwic3RpY2t5Um93c0Jv''@;'; put 'put ''dHRvbSIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9KTtjb25zdCBJZmU9RGZlO2NsYXNzIGFLIGV4dGVuZHMgaF97Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQsaCxFcCl9fXhsKGFLLElmZSkseGwoYUssUSQpO2NvbnN0IFJKZT1hSztjbGFzcyBGSmUgZXh0ZW5kcyBJRXtj''@;'; put 'put ''b25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsRXAsZCxoKSxmdW5jdGlvbiBMSmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIE9KZShjKXt2YXIgbD1mdW5jdGlvbiBQSmUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0''@;'; put 'put ''aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09''@;'; put 'put ''PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0''@;'; put 'put ''aGlzLCJjYWNoZWRGaXhlZFJvd3NCb3R0b20iLC0xKSx0aGlzLmNhY2hlZEZpeGVkUm93c0JvdHRvbT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIil9Y3JlYXRlVGFibGUoKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7''@;'; put 'put ''ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTtyZXR1cm4gbmV3IFJKZSguLi5hKX1zaG91bGRCZVJlbmRlcmVkKCl7cmV0dXJuIHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzaG91bGRSZW5kZXJCb3R0b21PdmVybGF5Iil9cmVzZXRGaXhlZFBvc2l0aW9uKCl7aWYoIXRoaXMubmVlZEZ1''@;'; put 'put ''bGxSZW5kZXJ8fCF0aGlzLnNob3VsZEJlUmVuZGVyZWQoKXx8IXRoaXMud290Lnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuITE7Y29uc3R7cm9vdFdpbmRvdzpsfT10aGlzLmRvbUJpbmRpbmdzLGE9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlO2Euc3R5bGUu''@;'; put 'put ''dG9wPSIiO2xldCBkPTA7Y29uc3QgaD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicHJldmVudE92ZXJmbG93Iik7dGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWx8fGgmJiJ2ZXJ0aWNhbCI9PT1oPyhkPXRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKSx0aGlzLnJlcG9zaXRpb25PdmVybGF5''@;'; put 'put ''KCkpOihkPXRoaXMuZ2V0T3ZlcmxheU9mZnNldCgpLGEuc3R5bGUuYm90dG9tPWAke2R9cHhgKTtjb25zdCBmPXRoaXMuYWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKGQpO3JldHVybiB0aGlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpLGZ9cmVwb3NpdGlvbk92ZXJsYXkoKXtjb25zdHt3dFRh''@;'; put 'put ''YmxlOmwsd3RWaWV3cG9ydDphfT10aGlzLndvdCx7cm9vdERvY3VtZW50OmR9PXRoaXMuZG9tQmluZGluZ3MsaD10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGU7bGV0IGY9MDthLmhhc1ZlcnRpY2FsU2Nyb2xsKCl8fChmKz1hLmdldFdvcmtzcGFjZUhlaWdodCgpLWwuZ2V0''@;'; put 'put ''VG90YWxIZWlnaHQoKSksYS5oYXNWZXJ0aWNhbFNjcm9sbCgpJiZhLmhhc0hvcml6b250YWxTY3JvbGwoKSYmKGYrPWgwKGQpKSxoLnN0eWxlLmJvdHRvbT1gJHtmfXB4YH1zZXRTY3JvbGxQb3NpdGlvbihsKXtjb25zdHtyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3M7bGV0IGQ9ITE7''@;'; put 'put ''cmV0dXJuIHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ9PT1hPyhhLnNjcm9sbFRvKFRPKGEpLGwpLGQ9ITApOnRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wIT09bCYmKHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wPWwsZD0h''@;'; put 'put ''MCksZH1vblNjcm9sbCgpe3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvblNjcm9sbEhvcml6b250YWxseSIpfXN1bUNlbGxTaXplcyhsLGEpe2NvbnN0e3d0VGFibGU6ZCxzdHlsZXNIYW5kbGVyOmh9PXRoaXMud290LGY9aC5nZXREZWZhdWx0Um93SGVpZ2h0KCk7bGV0IHY9bCxNPTA7''@;'; put 'put ''Zm9yKDt2PGE7KXtjb25zdCBEPWQuZ2V0Um93SGVpZ2h0KHYpO00rPXZvaWQgMD09PUQ/ZjpELHYrPTF9cmV0dXJuIE19YWRqdXN0RWxlbWVudHNTaXplKCl7dGhpcy51cGRhdGVUcmltbWluZ0NvbnRhaW5lcigpLHRoaXMubmVlZEZ1bGxSZW5kZXImJih0aGlzLmFkanVzdFJvb3RFbGVtZW50''@;'; put 'put ''U2l6ZSgpLHRoaXMuYWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpKX1hZGp1c3RSb290RWxlbWVudFNpemUoKXtjb25zdHt3dFRhYmxlOmwsd3RWaWV3cG9ydDphfT10aGlzLndvdCx7cm9vdERvY3VtZW50OmQscm9vdFdpbmRvdzpofT10aGlzLmRvbUJpbmRpbmdzLHY9dGhpcy5jbG9uZS53dFRh''@;'; put 'put ''YmxlLmhvbGRlci5wYXJlbnROb2RlLnN0eWxlLE09dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2lmKHRoaXMudHJpbW1pbmdDb250YWluZXIhPT1ofHwiaG9yaXpvbnRhbCI9PT1NKXtsZXQgWj1hLmdldFdvcmtzcGFjZVdpZHRoKCk7YS5oYXNWZXJ0aWNh''@;'; put 'put ''bFNjcm9sbCgpJiYoWi09aDAoZCkpLFo9TWF0aC5taW4oWixsLnd0Um9vdEVsZW1lbnQuc2Nyb2xsV2lkdGgpLHYud2lkdGg9YCR7Wn1weGB9ZWxzZSB2LndpZHRoPSIiO3RoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIuc3R5bGUud2lkdGg9di53aWR0aDtsZXQgRD1NdSh0aGlzLmNsb25lLnd0''@;'; put 'put ''VGFibGUuVEFCTEUpO2wuaGFzRGVmaW5lZFNpemUoKXx8KEQ9MCksdi5oZWlnaHQ9YCR7RH1weGB9YWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpe2NvbnN0e2hvbGRlcjpsfT10aGlzLmNsb25lLnd0VGFibGU7dGhpcy5jbG9uZS53dFRhYmxlLmhpZGVyLnN0eWxlLndpZHRoPXRoaXMuaGlkZXIu''@;'; put 'put ''c3R5bGUud2lkdGgsbC5zdHlsZS53aWR0aD1sLnBhcmVudE5vZGUuc3R5bGUud2lkdGgsbC5zdHlsZS5oZWlnaHQ9bC5wYXJlbnROb2RlLnN0eWxlLmhlaWdodH1hcHBseVRvRE9NKCl7Y29uc3QgbD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik7aWYoIm51bWJlciI9''@;'; put 'put ''PXR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0UG9zaXRpb24pdGhpcy5zcHJlYWRlci5zdHlsZS50b3A9YCR7dGhpcy53b3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9ufXB4YDtlbHNle2lmKDAhPT1sKXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IHZhbHVlIG9mIHRoZSByb3dzUmVuZGVyQ2FsY3VsYXRvciIpO3RoaXMuc3ByZWFkZXIuc3R5bGUudG9wPSIwIn10aGlzLnNwcmVhZGVyLnN0eWxlLmJvdHRvbT0iIix0aGlzLm5lZWRGdWxsUmVuZGVyJiZ0aGlzLnN5bmNPdmVybGF5T2Zmc2V0KCl9''@;'; put 'put ''c3luY092ZXJsYXlPZmZzZXQoKXtjb25zdCBsPXRoaXMuaXNSdGwoKT8icmlnaHQiOiJsZWZ0Iix7c3ByZWFkZXI6YX09dGhpcy5jbG9uZS53dFRhYmxlO2Euc3R5bGVbbF09Im51bWJlciI9PXR5cGVvZiB0aGlzLndvdC53dFZpZXdwb3J0LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yLnN0YXJ0''@;'; put 'put ''UG9zaXRpb24/YCR7dGhpcy53b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9ufXB4YDoiIn1zY3JvbGxUbyhsLGEpe2xldCBkPXRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKTtjb25zdCBmPSh0aGlzLndvdC5jbG9uZVNvdXJjZT90aGlzLndvdC5j''@;'; put 'put ''bG9uZVNvdXJjZTp0aGlzLndvdCkud3RUYWJsZS5ob2xkZXI7bGV0IHY9MDthJiZmLm9mZnNldEhlaWdodCE9PWYuY2xpZW50SGVpZ2h0JiYodj1oMCh0aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudCkpLGE/KGQrPXRoaXMuc3VtQ2VsbFNpemVzKDAsbCsxKSxkLT10aGlzLndvdC53dFZp''@;'; put 'put ''ZXdwb3J0LmdldFZpZXdwb3J0SGVpZ2h0KCksZCs9MSk6ZCs9dGhpcy5zdW1DZWxsU2l6ZXModGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLGwpLGQrPXYsdGhpcy5zZXRTY3JvbGxQb3NpdGlvbihkKX1nZXRUYWJsZVBhcmVudE9mZnNldCgpe3JldHVybiB0''@;'; put 'put ''aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93P3RoaXMud290Lnd0VGFibGUuaG9sZGVyT2Zmc2V0LnRvcDowfWdldFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIEFPKHRoaXMubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsdGhpcy5k''@;'; put 'put ''b21CaW5kaW5ncy5yb290V2luZG93KX1nZXRPdmVybGF5T2Zmc2V0KCl7Y29uc3R7cm9vdFdpbmRvdzpsfT10aGlzLmRvbUJpbmRpbmdzLGE9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO2xldCBkPTA7aWYodGhpcy50cmltbWluZ0NvbnRhaW5lcj09PWwm''@;'; put 'put ''JighYXx8InZlcnRpY2FsIiE9PWEpKXtjb25zdCBoPXRoaXMud290Lnd0VGFibGUuZ2V0VG90YWxIZWlnaHQoKSx2PWgtdGhpcy5jbG9uZS53dFRhYmxlLmdldFRvdGFsSGVpZ2h0KCksTT10aGlzLmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0''@;'; put 'put ''O2Q9TWF0aC5tYXgodGhpcy5nZXRUYWJsZVBhcmVudE9mZnNldCgpLXRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKS1NK2gsMCksZD52JiYoZD0wKX1yZXR1cm4gZH1hZGp1c3RIZWFkZXJCb3JkZXJzUG9zaXRpb24obCl7Y29uc3QgYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRS''@;'; put 'put ''b3dzQm90dG9tIiksZD10aGlzLmNhY2hlZEZpeGVkUm93c0JvdHRvbSE9PWEsaD10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiY29sdW1uSGVhZGVycyIpO2xldCBmPSExO2lmKChkfHwwPT09YSkmJmgubGVuZ3RoPjApe2NvbnN0IHY9dGhpcy53b3Qud3RUYWJsZS5ob2xkZXIucGFyZW50''@;'; put 'put ''Tm9kZSxNPXBhKHYsImlubmVyQm9yZGVyQm90dG9tIik7dGhpcy5jYWNoZWRGaXhlZFJvd3NCb3R0b209dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpLGx8fDA9PT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxSb3dzIik/KFRpKHYsImlubmVy''@;'; put 'put ''Qm9yZGVyQm90dG9tIiksZj0hTSk6KGNhKHYsImlubmVyQm9yZGVyQm90dG9tIiksZj1NKX1yZXR1cm4gZn19Y29uc3QgUmZlPXtnZXRGaXJzdFJlbmRlcmVkUm93KCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRSb3dSZW5kZXJlZDtyZXR1cm4gbnVsbD09PWM/LTE6Y30s''@;'; put 'put ''Z2V0Rmlyc3RWaXNpYmxlUm93KCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3Quc3RhcnRSb3dWaXNpYmxlO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3coKXtjb25zdCBjPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5zdGFydFJvd1BhcnRpYWxs''@;'; put 'put ''eVZpc2libGU7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldExhc3RSZW5kZXJlZFJvdygpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmVuZFJvd1JlbmRlcmVkO3JldHVybiBudWxsPT09Yz8tMTpjfSxnZXRMYXN0VmlzaWJsZVJvdygpe2NvbnN0IGM9dGhpcy5kYXRhQWNjZXNzT2Jq''@;'; put 'put ''ZWN0LmVuZFJvd1Zpc2libGU7cmV0dXJuIG51bGw9PT1jPy0xOmN9LGdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCl7Y29uc3QgYz10aGlzLmRhdGFBY2Nlc3NPYmplY3QuZW5kUm93UGFydGlhbGx5VmlzaWJsZTtyZXR1cm4gbnVsbD09PWM/LTE6Y30sZ2V0UmVuZGVyZWRSb3dzQ291bnQo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNzT2JqZWN0LmNvdW50Um93c1JlbmRlcmVkfSxnZXRWaXNpYmxlUm93c0NvdW50KCl7cmV0dXJuIHRoaXMuZGF0YUFjY2Vzc09iamVjdC5jb3VudFJvd3NWaXNpYmxlfSxnZXRDb2x1bW5IZWFkZXJzQ291bnQoKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNz''@;'; put 'put ''T2JqZWN0LmNvbHVtbkhlYWRlcnMubGVuZ3RofX07Q3AoUmZlLCJNSVhJTl9OQU1FIiwiY2FsY3VsYXRlZFJvd3MiLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3QgTGZlPVJmZSxPZmU9e2dldEZpcnN0UmVuZGVyZWRDb2x1bW4oKXtyZXR1cm4gMD09PXRoaXMud3RTZXR0aW5n''@;'; put 'put ''cy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKT8tMTowfSxnZXRGaXJzdFZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCl9LGdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmdldEZpcnN0UmVuZGVyZWRDb2x1bW4o''@;'; put 'put ''KX0sZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCl7cmV0dXJuIHRoaXMuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKS0xfSxnZXRMYXN0VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmdldExhc3RSZW5kZXJlZENvbHVtbigpfSxnZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpe3JldHVy''@;'; put 'put ''biB0aGlzLmdldExhc3RSZW5kZXJlZENvbHVtbigpfSxnZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpe2NvbnN0IGM9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpO3JldHVybiBNYXRoLm1pbih0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5z''@;'; put 'put ''U3RhcnQiKSxjKX0sZ2V0VmlzaWJsZUNvbHVtbnNDb3VudCgpe3JldHVybiB0aGlzLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCl9LGdldFJvd0hlYWRlcnNDb3VudCgpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3Qucm93SGVhZGVycy5sZW5ndGh9fTtDcChPZmUsIk1JWElOX05BTUUi''@;'; put 'put ''LCJzdGlja3lDb2x1bW5zU3RhcnQiLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3Qgc0s9T2ZlO2NsYXNzIGxLIGV4dGVuZHMgaF97Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQsaCxXNyl9fXhsKGxLLExmZSkseGwobEssc0spO2NvbnN0IFZKZT1sSztjbGFzcyBC''@;'; put 'put ''SmUgZXh0ZW5kcyBJRXtjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsVzcsZCxoKX1jcmVhdGVUYWJsZSgpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3JldHVybiBuZXcgVkplKC4uLmEpfXNob3Vs''@;'; put 'put ''ZEJlUmVuZGVyZWQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlcklubGluZVN0YXJ0T3ZlcmxheSIpfXJlc2V0Rml4ZWRQb3NpdGlvbigpe2NvbnN0e3d0VGFibGU6bH09dGhpcy53b3Q7aWYoIXRoaXMubmVlZEZ1bGxSZW5kZXJ8fCF0aGlzLnNob3Vs''@;'; put 'put ''ZEJlUmVuZGVyZWQoKXx8IWwuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuITE7Y29uc3R7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzLGQ9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlLGg9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxv''@;'; put 'put ''dyIpO2xldCBmPTA7dGhpcy50cmltbWluZ0NvbnRhaW5lciE9PWF8fGgmJiJob3Jpem9udGFsIj09PWg/KGY9dGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLHlFKGQpKTooZj10aGlzLmdldE92ZXJsYXlPZmZzZXQoKSoodGhpcy5pc1J0bCgpPy0xOjEpLGtPKGQsYCR7Zn1weGAsIjBweCIpKTtj''@;'; put 'put ''b25zdCB2PXRoaXMuYWRqdXN0SGVhZGVyQm9yZGVyc1Bvc2l0aW9uKGYpO3JldHVybiB0aGlzLmFkanVzdEVsZW1lbnRzU2l6ZSgpLHZ9c2V0U2Nyb2xsUG9zaXRpb24obCl7Y29uc3R7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzO2xldCBkPSExO3JldHVybiB0aGlzLmlzUnRsKCkm''@;'; put 'put ''JihsPS1sKSx0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50PT09YSYmYS5zY3JvbGxYIT09bD8oYS5zY3JvbGxUbyhsLHMkKGEpKSxkPSEwKTp0aGlzLm1haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50LnNjcm9sbExlZnQhPT1sJiYodGhpcy5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVu''@;'; put 'put ''dC5zY3JvbGxMZWZ0PWwsZD0hMCksZH1vblNjcm9sbCgpe3RoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvblNjcm9sbFZlcnRpY2FsbHkiKX1zdW1DZWxsU2l6ZXMobCxhKXtjb25zdCBkPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJkZWZhdWx0Q29sdW1uV2lkdGgiKTtsZXQgaD1s''@;'; put 'put ''LGY9MDtmb3IoO2g8YTspZis9dGhpcy53b3Qud3RUYWJsZS5nZXRDb2x1bW5XaWR0aChoKXx8ZCxoKz0xO3JldHVybiBmfWFkanVzdEVsZW1lbnRzU2l6ZSgpe3RoaXMudXBkYXRlVHJpbW1pbmdDb250YWluZXIoKSx0aGlzLm5lZWRGdWxsUmVuZGVyJiYodGhpcy5hZGp1c3RSb290RWxlbWVu''@;'; put 'put ''dFNpemUoKSx0aGlzLmFkanVzdFJvb3RDaGlsZHJlblNpemUoKSl9YWRqdXN0Um9vdEVsZW1lbnRTaXplKCl7Y29uc3R7d3RUYWJsZTpsLHd0Vmlld3BvcnQ6YX09dGhpcy53b3Qse3Jvb3REb2N1bWVudDpkLHJvb3RXaW5kb3c6aH09dGhpcy5kb21CaW5kaW5ncyx2PXRoaXMuY2xvbmUud3RU''@;'; put 'put ''YWJsZS5ob2xkZXIucGFyZW50Tm9kZS5zdHlsZSxNPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtpZih0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09aHx8InZlcnRpY2FsIj09PU0pe2xldCBaPWEuZ2V0V29ya3NwYWNlSGVpZ2h0KCk7YS5oYXNIb3Jpem9u''@;'; put 'put ''dGFsU2Nyb2xsKCkmJihaLT1oMChkKSksWj1NYXRoLm1pbihaLGwud3RSb290RWxlbWVudC5zY3JvbGxIZWlnaHQpLHYuaGVpZ2h0PWAke1p9cHhgfWVsc2Ugdi5oZWlnaHQ9IiI7dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5zdHlsZS5oZWlnaHQ9di5oZWlnaHQ7Y29uc3QgRD1hdSh0aGlz''@;'; put 'put ''LmNsb25lLnd0VGFibGUuVEFCTEUpO3Yud2lkdGg9YCR7RH1weGB9YWRqdXN0Um9vdENoaWxkcmVuU2l6ZSgpe2NvbnN0e2hvbGRlcjpsfT10aGlzLmNsb25lLnd0VGFibGUsYT1vSyh0aGlzLndvdCksZD10aGlzLndvdC5zZWxlY3Rpb25NYW5hZ2VyLmdldEZvY3VzU2VsZWN0aW9uKCk/cGFy''@;'; put 'put ''c2VJbnQoYS53aWR0aCwxMCkvMjowO3RoaXMuY2xvbmUud3RUYWJsZS5oaWRlci5zdHlsZS5oZWlnaHQ9dGhpcy5oaWRlci5zdHlsZS5oZWlnaHQsbC5zdHlsZS5oZWlnaHQ9bC5wYXJlbnROb2RlLnN0eWxlLmhlaWdodCxsLnN0eWxlLndpZHRoPWAke3BhcnNlSW50KGwucGFyZW50Tm9kZS5z''@;'; put 'put ''dHlsZS53aWR0aCwxMCkrZH1weGB9YXBwbHlUb0RPTSgpe2NvbnN0IGw9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLGE9dGhpcy5pc1J0bCgpPyJyaWdodCI6ImxlZnQiO2lmKCJudW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVu''@;'; put 'put ''ZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uKXRoaXMuc3ByZWFkZXIuc3R5bGVbYV09YCR7dGhpcy53b3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9ufXB4YDtlbHNle2lmKDAhPT1sKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IHZhbHVlIG9m''@;'; put 'put ''IHRoZSBjb2x1bW5zUmVuZGVyQ2FsY3VsYXRvciIpO3RoaXMuc3ByZWFkZXIuc3R5bGVbYV09IjAifXRoaXMuaXNSdGwoKT90aGlzLnNwcmVhZGVyLnN0eWxlLmxlZnQ9IiI6dGhpcy5zcHJlYWRlci5zdHlsZS5yaWdodD0iIix0aGlzLm5lZWRGdWxsUmVuZGVyJiZ0aGlzLnN5bmNPdmVybGF5''@;'; put 'put ''T2Zmc2V0KCl9c3luY092ZXJsYXlPZmZzZXQoKXt0aGlzLmNsb25lLnd0VGFibGUuc3ByZWFkZXIuc3R5bGUudG9wPSJudW1iZXIiPT10eXBlb2YgdGhpcy53b3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uP2Ake3RoaXMud290Lnd0Vmlld3BvcnQucm93''@;'; put 'put ''c1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbn1weGA6IiJ9c2Nyb2xsVG8obCxhKXtjb25zdHt3dFNldHRpbmdzOmR9PXRoaXMsaD1kLmdldFNldHRpbmcoInJvd0hlYWRlcnMiKSxmPWQuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQiKSxNPSh0aGlzLndvdC5jbG9uZVNvdXJj''@;'; put 'put ''ZT90aGlzLndvdC5jbG9uZVNvdXJjZTp0aGlzLndvdCkud3RUYWJsZS5ob2xkZXIsRD0wPT09ZiYmaC5sZW5ndGg+MCYmIXBhKE0ucGFyZW50Tm9kZSwiaW5uZXJCb3JkZXJJbmxpbmVTdGFydCIpPzE6MDtsZXQgWj10aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0KCksbmU9MDtyZXR1cm4gYSYm''@;'; put 'put ''dGhpcy53b3Qud3RUYWJsZS5nZXRDb2x1bW5XaWR0aChsKT50aGlzLndvdC53dFZpZXdwb3J0LmdldFZpZXdwb3J0V2lkdGgoKSYmKGE9ITEpLGEmJk0ub2Zmc2V0V2lkdGghPT1NLmNsaWVudFdpZHRoJiYobmU9aDAodGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQpKSxhPyhaKz10aGlz''@;'; put 'put ''LnN1bUNlbGxTaXplcygwLGwrMSksWi09dGhpcy53b3Qud3RWaWV3cG9ydC5nZXRWaWV3cG9ydFdpZHRoKCksWis9RCk6Wis9dGhpcy5zdW1DZWxsU2l6ZXModGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0IiksbCksWis9bmUsUzJlKHRoaXMubWFpblRhYmxl''@;'; put 'put ''U2Nyb2xsYWJsZUVsZW1lbnQpPT09Wi1EJiZEPjAmJnRoaXMud290Lnd0T3ZlcmxheXMuZXhwYW5kSGlkZXJIb3Jpem9udGFsbHlCeShEKSx0aGlzLnNldFNjcm9sbFBvc2l0aW9uKFopfWdldFRhYmxlUGFyZW50T2Zmc2V0KCl7bGV0IGE9MDtyZXR1cm4hdGhpcy53dFNldHRpbmdzLmdldFNl''@;'; put 'put ''dHRpbmcoInByZXZlbnRPdmVyZmxvdyIpJiZ0aGlzLnRyaW1taW5nQ29udGFpbmVyPT09dGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93JiYoYT10aGlzLndvdC53dFRhYmxlLmhvbGRlck9mZnNldC5sZWZ0KSxhfWdldFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIE1hdGguYWJzKGwkKHRoaXMu''@;'; put 'put ''bWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQsdGhpcy5kb21CaW5kaW5ncy5yb290V2luZG93KSl9Z2V0T3ZlcmxheU9mZnNldCgpe2NvbnN0e3Jvb3RXaW5kb3c6bH09dGhpcy5kb21CaW5kaW5ncyxhPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKTtsZXQg''@;'; put 'put ''ZD0wO3JldHVybiB0aGlzLnRyaW1taW5nQ29udGFpbmVyIT09bHx8YSYmImhvcml6b250YWwiPT09YXx8KGQ9dGhpcy5pc1J0bCgpP01hdGguYWJzKE1hdGgubWluKHRoaXMuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKS10aGlzLmdldFNjcm9sbFBvc2l0aW9uKCksMCkpOk1hdGgubWF4KHRoaXMu''@;'; put 'put ''Z2V0U2Nyb2xsUG9zaXRpb24oKS10aGlzLmdldFRhYmxlUGFyZW50T2Zmc2V0KCksMCksZD50aGlzLndvdC53dFRhYmxlLmdldFRvdGFsV2lkdGgoKS10aGlzLmNsb25lLnd0VGFibGUuZ2V0VG90YWxXaWR0aCgpJiYoZD0wKSksZH1hZGp1c3RIZWFkZXJCb3JkZXJzUG9zaXRpb24obCl7Y29u''@;'; put 'put ''c3R7d3RTZXR0aW5nczphfT10aGlzLGQ9dGhpcy53b3Qud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSxoPWEuZ2V0U2V0dGluZygicm93SGVhZGVycyIpLGY9YS5nZXRTZXR0aW5nKCJmaXhlZENvbHVtbnNTdGFydCIpLHY9YS5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKSxNPSJ2ZXJ0aWNhbCI9''@;'; put 'put ''PT1hLmdldFNldHRpbmcoInByZXZlbnRPdmVyZmxvdyIpO3Y/Y2EoZCwiZW1wdHlSb3dzIik6VGkoZCwiZW1wdHlSb3dzIik7bGV0IEQ9ITE7aWYoIU0paWYoZiYmIWgubGVuZ3RoKVRpKGQsImlubmVyQm9yZGVyTGVmdCBpbm5lckJvcmRlcklubGluZVN0YXJ0Iik7ZWxzZSBpZighZiYmaC5s''@;'; put 'put ''ZW5ndGgpe2NvbnN0IFo9cGEoZCwiaW5uZXJCb3JkZXJJbmxpbmVTdGFydCIpO2w/KFRpKGQsImlubmVyQm9yZGVyTGVmdCBpbm5lckJvcmRlcklubGluZVN0YXJ0IiksRD0hWik6KGNhKGQsImlubmVyQm9yZGVyTGVmdCBpbm5lckJvcmRlcklubGluZVN0YXJ0IiksRD1aKX1yZXR1cm4gRH19''@;'; put 'put ''Y2xhc3MgY0sgZXh0ZW5kcyBoX3tjb25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsZCxoLFk3KX19eGwoY0ssd2ZlKSx4bChjSyxzSyk7Y29uc3QgakplPWNLO2Z1bmN0aW9uIFBmZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gekplKGMpe3ZhciBsPWZ1bmN0aW9uIFVKZShjLGwpe2lm''@;'; put 'put ''KCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9Qcmlt''@;'; put 'put ''aXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTph''@;'; put 'put ''LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgWkplIGV4dGVuZHMgSUV7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYpe3N1cGVyKGwsYSxZNyxkLGgpLFBmZSh0aGlzLCJ0b3BPdmVybGF5Iix2b2lkIDApLFBmZSh0aGlzLCJpbmxpbmVT''@;'; put 'put ''dGFydE92ZXJsYXkiLHZvaWQgMCksdGhpcy50b3BPdmVybGF5PWYsdGhpcy5pbmxpbmVTdGFydE92ZXJsYXk9dn1jcmVhdGVUYWJsZSgpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3JldHVybiBuZXcgakpl''@;'; put 'put ''KC4uLmEpfXNob3VsZEJlUmVuZGVyZWQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlclRvcE92ZXJsYXkiKSYmdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInNob3VsZFJlbmRlcklubGluZVN0YXJ0T3ZlcmxheSIpfXJlc2V0Rml4ZWRQb3NpdGlv''@;'; put 'put ''bigpe2lmKHRoaXMudXBkYXRlVHJpbW1pbmdDb250YWluZXIoKSwhdGhpcy53b3Qud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSlyZXR1cm4hMTtjb25zdCBsPXRoaXMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZTt0aGlzLnRyaW1taW5nQ29udGFpbmVyPT09dGhpcy5kb21CaW5k''@;'; put 'put ''aW5ncy5yb290V2luZG93P2tPKGwsdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpKih0aGlzLmlzUnRsKCk/LTE6MSkrInB4IixgJHt0aGlzLnRvcE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpfXB4YCk6eUUobCk7bGV0IGE9TXUodGhpcy5jbG9uZS53dFRhYmxl''@;'; put 'put ''LlRBQkxFKTtjb25zdCBkPWF1KHRoaXMuY2xvbmUud3RUYWJsZS5UQUJMRSk7cmV0dXJuIHRoaXMud290Lnd0VGFibGUuaGFzRGVmaW5lZFNpemUoKXx8KGE9MCksbC5zdHlsZS5oZWlnaHQ9YCR7YX1weGAsbC5zdHlsZS53aWR0aD1gJHtkfXB4YCwhMX19Y2xhc3MgdUsgZXh0ZW5kcyBoX3tj''@;'; put 'put ''b25zdHJ1Y3RvcihsLGEsZCxoKXtzdXBlcihsLGEsZCxoLE5tKX19eGwodUssSWZlKSx4bCh1SyxzSyk7Y29uc3QgV0plPXVLO2NsYXNzIFlKZSBleHRlbmRzIElFe2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2KXtzdXBlcihsLGEsTm0sZCxoKSx0aGlzLmJvdHRvbU92ZXJsYXk9Zix0aGlzLmlu''@;'; put 'put ''bGluZVN0YXJ0T3ZlcmxheT12fWNyZWF0ZVRhYmxlKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtkXT1hcmd1bWVudHNbZF07cmV0dXJuIG5ldyBXSmUoLi4uYSl9c2hvdWxkQmVSZW5kZXJlZCgpe3JldHVybiB0aGlzLnd0U2V0dGlu''@;'; put 'put ''Z3MuZ2V0U2V0dGluZygic2hvdWxkUmVuZGVyQm90dG9tT3ZlcmxheSIpJiZ0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygic2hvdWxkUmVuZGVySW5saW5lU3RhcnRPdmVybGF5Iil9cmVzZXRGaXhlZFBvc2l0aW9uKCl7Y29uc3R7d290Omx9PXRoaXM7aWYodGhpcy51cGRhdGVUcmltbWlu''@;'; put 'put ''Z0NvbnRhaW5lcigpLCFsLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpcmV0dXJuITE7Y29uc3QgYT10aGlzLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGU7aWYoYS5zdHlsZS50b3A9IiIsdGhpcy50cmltbWluZ0NvbnRhaW5lcj09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRv''@;'; put 'put ''dyl7Y29uc3QgZj10aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCksdj10aGlzLmJvdHRvbU92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpO2Euc3R5bGVbdGhpcy5pc1J0bCgpPyJyaWdodCI6ImxlZnQiXT1gJHtmfXB4YCxhLnN0eWxlLmJvdHRvbT1gJHt2fXB4YH1l''@;'; put 'put ''bHNlIHlFKGEpLHRoaXMucmVwb3NpdGlvbk92ZXJsYXkoKTtsZXQgZD1NdSh0aGlzLmNsb25lLnd0VGFibGUuVEFCTEUpO2NvbnN0IGg9YXUodGhpcy5jbG9uZS53dFRhYmxlLlRBQkxFKTtyZXR1cm4gdGhpcy53b3Qud3RUYWJsZS5oYXNEZWZpbmVkU2l6ZSgpfHwoZD0wKSxhLnN0eWxlLmhl''@;'; put 'put ''aWdodD1gJHtkfXB4YCxhLnN0eWxlLndpZHRoPWAke2h9cHhgLCExfXJlcG9zaXRpb25PdmVybGF5KCl7Y29uc3R7d3RUYWJsZTpsLHd0Vmlld3BvcnQ6YX09dGhpcy53b3Qse3Jvb3REb2N1bWVudDpkfT10aGlzLmRvbUJpbmRpbmdzLGg9dGhpcy5jbG9uZS53dFRhYmxlLmhvbGRlci5wYXJl''@;'; put 'put ''bnROb2RlO2xldCBmPTA7YS5oYXNWZXJ0aWNhbFNjcm9sbCgpfHwoZis9YS5nZXRXb3Jrc3BhY2VIZWlnaHQoKS1sLmdldFRvdGFsSGVpZ2h0KCkpLGEuaGFzVmVydGljYWxTY3JvbGwoKSYmYS5oYXNIb3Jpem9udGFsU2Nyb2xsKCkmJihmKz1oMChkKSksaC5zdHlsZS5ib3R0b209YCR7Zn1w''@;'; put 'put ''eGB9fWZ1bmN0aW9uIFFPKGMsbCxhKXsoZnVuY3Rpb24gR0plKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlv''@;'; put 'put ''biB2ZyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gJEplKGMpe3ZhciBsPWZ1bmN0aW9uIEtKZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0''@;'; put 'put ''Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJv''@;'; put 'put ''bCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gRzcoYyxsLGEpe3JldHVybiBjLnNldChGZmUoYyxsKSxhKSxhfWZ1''@;'; put 'put ''bmN0aW9uIGJnKGMsbCl7cmV0dXJuIGMuZ2V0KEZmZShjLGwpKX1mdW5jdGlvbiBGZmUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBp''@;'; put 'put ''cyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBwXz1uZXcgV2Vha01hcCxlUD1uZXcgV2Vha01hcCxnXz1uZXcgV2Vha01hcCx0UD1uZXcgV2Vha01hcDtjb25zdCBYSmU9Y2xhc3MgcUple2NvbnN0cnVjdG9yKGwsYSxkLGgsZix2KXt2Zyh0aGlzLCJ3b3QiLG51bGwpLFFPKHRo''@;'; put 'put ''aXMscF8sW10pLHZnKHRoaXMsInRvcE92ZXJsYXkiLG51bGwpLHZnKHRoaXMsImJvdHRvbU92ZXJsYXkiLG51bGwpLHZnKHRoaXMsImlubGluZVN0YXJ0T3ZlcmxheSIsbnVsbCksdmcodGhpcywidG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5IixudWxsKSx2Zyh0aGlzLCJib3R0b21Jbmxp''@;'; put 'put ''bmVTdGFydENvcm5lck92ZXJsYXkiLG51bGwpLHZnKHRoaXMsImJyb3dzZXJMaW5lSGVpZ2h0Iix2b2lkIDApLHZnKHRoaXMsInd0U2V0dGluZ3MiLG51bGwpLFFPKHRoaXMsZVAsITEpLFFPKHRoaXMsZ18sMCksUU8odGhpcyx0UCxudWxsKSx2Zyh0aGlzLCJyZXNpemVPYnNlcnZlciIsbmV3''@;'; put 'put ''IFJlc2l6ZU9ic2VydmVyKG5lPT57Q0UoKCk9PnshQXJyYXkuaXNBcnJheShuZSl8fCFuZS5sZW5ndGh8fChHNyhnXyx0aGlzLGJnKGdfLHRoaXMpKzEpLDEwMD09PWJnKGdfLHRoaXMpJiYodGwoIlRoZSBSZXNpemVPYnNlcnZlciBjYWxsYmFjayB3YXMgZmlyZWQgdG9vIG1hbnkgdGltZXMg''@;'; put 'put ''aW4gZGlyZWN0IHN1Y2Nlc3Npb24uXG5UaGlzIG1heSBiZSBkdWUgdG8gYW4gaW5maW5pdGUgbG9vcCBjYXVzZWQgYnkgc2V0dGluZyBhIGR5bmFtaWMgaGVpZ2h0L3dpZHRoIChmb3IgZXhhbXBsZSwgd2l0aCB0aGUgYGR2aGAgdW5pdHMpIHRvIGEgSGFuZHNvbnRhYmxlIGNvbnRhaW5lcidz''@;'; put 'put ''IHBhcmVudC4gXG5UaGUgb2JzZXJ2ZXIgd2lsbCBiZSBkaXNjb25uZWN0ZWQuIiksdGhpcy5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCkpLG51bGwhPT1iZyh0UCx0aGlzKSYmY2xlYXJUaW1lb3V0KGJnKHRQLHRoaXMpKSxHNyh0UCx0aGlzLHNldFRpbWVvdXQoKCk9PntHNyhnXyx0aGlz''@;'; put 'put ''LDApfSwxMDApKSx0aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygib25Db250YWluZXJFbGVtZW50UmVzaXplIikpfSl9KSksdGhpcy53b3Q9bCx0aGlzLnd0U2V0dGluZ3M9aCx0aGlzLmRvbUJpbmRpbmdzPWQsdGhpcy5mYWNhZGVHZXR0ZXI9YSx0aGlzLnd0VGFibGU9djtjb25zdHtyb290''@;'; put 'put ''RG9jdW1lbnQ6TSxyb290V2luZG93OkR9PXRoaXMuZG9tQmluZGluZ3M7dGhpcy5pbnN0YW5jZT10aGlzLndvdCx0aGlzLmV2ZW50TWFuYWdlcj1mLHRoaXMuc2Nyb2xsYmFyU2l6ZT1oMChNKTtjb25zdCBaPSJoaWRkZW4iPT09RC5nZXRDb21wdXRlZFN0eWxlKHYud3RSb290RWxlbWVudC5w''@;'; put 'put ''YXJlbnROb2RlKS5nZXRQcm9wZXJ0eVZhbHVlKCJvdmVyZmxvdyIpO3RoaXMuc2Nyb2xsYWJsZUVsZW1lbnQ9Wj92LmhvbGRlcjptRSh2LlRBQkxFKSx0aGlzLmluaXRPdmVybGF5cygpLHRoaXMuZGVzdHJveWVkPSExLHRoaXMua2V5UHJlc3NlZD0hMSx0aGlzLnNwcmVhZGVyTGFzdFNpemU9''@;'; put 'put ''e3dpZHRoOm51bGwsaGVpZ2h0Om51bGx9LHRoaXMudmVydGljYWxTY3JvbGxpbmc9ITEsdGhpcy5ob3Jpem9udGFsU2Nyb2xsaW5nPSExLHRoaXMuaW5pdEJyb3dzZXJMaW5lSGVpZ2h0KCksdGhpcy5yZWdpc3Rlckxpc3RlbmVycygpLHRoaXMubGFzdFNjcm9sbFg9RC5zY3JvbGxYLHRoaXMu''@;'; put 'put ''bGFzdFNjcm9sbFk9RC5zY3JvbGxZfWdldE92ZXJsYXlzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtjb25zdCBhPVsuLi5iZyhwXyx0aGlzKV07cmV0dXJuIGwmJmEucHVzaCh0aGlzLnd0VGFibGUpLGF9aW5pdEJyb3dz''@;'; put 'put ''ZXJMaW5lSGVpZ2h0KCl7Y29uc3R7cm9vdFdpbmRvdzpsLHJvb3REb2N1bWVudDphfT10aGlzLmRvbUJpbmRpbmdzLGQ9bC5nZXRDb21wdXRlZFN0eWxlKGEuYm9keSksaD1wYXJzZUludChkLmxpbmVIZWlnaHQsMTApLGY9MS4yKnBhcnNlSW50KGQuZm9udFNpemUsMTApO3RoaXMuYnJvd3Nl''@;'; put 'put ''ckxpbmVIZWlnaHQ9aHx8Zn1pbml0T3ZlcmxheXMoKXtjb25zdCBsPVt0aGlzLndvdCx0aGlzLmZhY2FkZUdldHRlcix0aGlzLnd0U2V0dGluZ3MsdGhpcy5kb21CaW5kaW5nc107dGhpcy50b3BPdmVybGF5PW5ldyBESmUoLi4ubCksdGhpcy5ib3R0b21PdmVybGF5PW5ldyBGSmUoLi4ubCks''@;'; put 'put ''dGhpcy5pbmxpbmVTdGFydE92ZXJsYXk9bmV3IEJKZSguLi5sKSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheT1uZXcgWkplKC4uLmwsdGhpcy50b3BPdmVybGF5LHRoaXMuaW5saW5lU3RhcnRPdmVybGF5KSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheT1uZXcg''@;'; put 'put ''WUplKC4uLmwsdGhpcy5ib3R0b21PdmVybGF5LHRoaXMuaW5saW5lU3RhcnRPdmVybGF5KSxHNyhwXyx0aGlzLFt0aGlzLnRvcE92ZXJsYXksdGhpcy5ib3R0b21PdmVybGF5LHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LHRoaXMuYm90''@;'; put 'put ''dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5XSl9YmVmb3JlRHJhdygpe0c3KGVQLHRoaXMsYmcocF8sdGhpcykucmVkdWNlKChsLGEpPT5hLmhhc1JlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpfHxsLCExKSksYmcocF8sdGhpcykuZm9yRWFjaChsPT5sLnVwZGF0ZVN0YXRlT2ZSZW5kZXJpbmco''@;'; put 'put ''ImJlZm9yZSIpKX1hZnRlckRyYXcoKXt0aGlzLnN5bmNTY3JvbGxXaXRoTWFzdGVyKCksYmcocF8sdGhpcykuZm9yRWFjaChsPT57Y29uc3QgYT1sLmhhc1JlbmRlcmluZ1N0YXRlQ2hhbmdlZCgpO2wudXBkYXRlU3RhdGVPZlJlbmRlcmluZygiYWZ0ZXIiKSxhJiYhbC5uZWVkRnVsbFJlbmRl''@;'; put 'put ''ciYmbC5yZXNldCgpfSl9cmVmcmVzaEFsbCgpe2lmKHRoaXMud290LmRyYXduKXtpZighdGhpcy53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKXJldHVybiB2b2lkIHRoaXMuZGVzdHJveSgpO3RoaXMud290LmRyYXcoITApLHRoaXMudmVydGljYWxTY3JvbGxpbmcmJnRoaXMuaW5saW5lU3Rh''@;'; put 'put ''cnRPdmVybGF5Lm9uU2Nyb2xsKCksdGhpcy5ob3Jpem9udGFsU2Nyb2xsaW5nJiZ0aGlzLnRvcE92ZXJsYXkub25TY3JvbGwoKSx0aGlzLnZlcnRpY2FsU2Nyb2xsaW5nPSExLHRoaXMuaG9yaXpvbnRhbFNjcm9sbGluZz0hMX19cmVnaXN0ZXJMaXN0ZW5lcnMoKXtjb25zdHtyb290RG9jdW1l''@;'; put 'put ''bnQ6bCxyb290V2luZG93OmF9PXRoaXMuZG9tQmluZGluZ3Mse21haW5UYWJsZVNjcm9sbGFibGVFbGVtZW50OmR9PXRoaXMudG9wT3ZlcmxheSx7bWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ6aH09dGhpcy5pbmxpbmVTdGFydE92ZXJsYXk7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRM''@;'; put 'put ''aXN0ZW5lcihsLmRvY3VtZW50RWxlbWVudCwia2V5ZG93biIsY2U9PnRoaXMub25LZXlEb3duKGNlKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLmRvY3VtZW50RWxlbWVudCwia2V5dXAiLCgpPT50aGlzLm9uS2V5VXAoKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZl''@;'; put 'put ''bnRMaXN0ZW5lcihsLCJ2aXNpYmlsaXR5Y2hhbmdlIiwoKT0+dGhpcy5vbktleVVwKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZCwic2Nyb2xsIixjZT0+dGhpcy5vblRhYmxlU2Nyb2xsKGNlKSx7cGFzc2l2ZTohMH0pLGQhPT1oJiZ0aGlzLmV2ZW50TWFuYWdlci5h''@;'; put 'put ''ZGRFdmVudExpc3RlbmVyKGgsInNjcm9sbCIsY2U9PnRoaXMub25UYWJsZVNjcm9sbChjZSkse3Bhc3NpdmU6ITB9KTtjb25zdCBmPWEuZGV2aWNlUGl4ZWxSYXRpbyYmYS5kZXZpY2VQaXhlbFJhdGlvPjEsdj10aGlzLnNjcm9sbGFibGVFbGVtZW50PT09YSxNPXRoaXMud3RTZXR0aW5ncy5n''@;'; put 'put ''ZXRTZXR0aW5nKCJwcmV2ZW50V2hlZWwiKSxEPXtwYXNzaXZlOnZ9O2xldCBuZTsoTXx8Znx8IV8kKCkpJiZ0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMud3RUYWJsZS53dFJvb3RFbGVtZW50LCJ3aGVlbCIsY2U9PnRoaXMub25DbG9uZVdoZWVsKGNlLE0pLEQpLFt0''@;'; put 'put ''aGlzLnRvcE92ZXJsYXksdGhpcy5ib3R0b21PdmVybGF5LHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5XS5mb3JFYWNoKGNlPT57dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZl''@;'; put 'put ''bnRMaXN0ZW5lcihjZS5jbG9uZS53dFRhYmxlLmhvbGRlciwid2hlZWwiLGJlPT50aGlzLm9uQ2xvbmVXaGVlbChiZSxNKSxEKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwicmVzaXplIiwoKT0+e0NFKCgpPT57Y2xlYXJUaW1lb3V0KG5lKSx0aGlzLnd0U2V0dGlu''@;'; put 'put ''Z3MuZ2V0U2V0dGluZygib25XaW5kb3dSZXNpemUiKSxuZT1zZXRUaW1lb3V0KCgpPT57RzcoZ18sdGhpcywwKX0sMjAwKX0pfSksdnx8dGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMud3RUYWJsZS53dFJvb3RFbGVtZW50LnBhcmVudEVsZW1lbnQpfW9uVGFibGVTY3JvbGwobCl7''@;'; put 'put ''Y29uc3QgYT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3csZD10aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCxoPXRoaXMudG9wT3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCxmPWwudGFyZ2V0O3RoaXMua2V5UHJlc3NlZCYmKGgh''@;'; put 'put ''PT1hJiZmIT09YSYmIWwudGFyZ2V0LmNvbnRhaW5zKGgpfHxkIT09YSYmZiE9PWEmJiFsLnRhcmdldC5jb250YWlucyhkKSl8fHRoaXMuc3luY1Njcm9sbFBvc2l0aW9ucyhsKX1vbkNsb25lV2hlZWwobCxhKXtjb25zdHtyb290V2luZG93OmR9PXRoaXMuZG9tQmluZGluZ3MsaD10aGlzLmlu''@;'; put 'put ''bGluZVN0YXJ0T3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCxmPXRoaXMudG9wT3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCx2PWwudGFyZ2V0LE09ZiE9PWQmJnYhPT1kJiYhdi5jb250YWlucyhmKSxEPWghPT1kJiZ2IT09ZCYmIXYuY29udGFpbnMoaCk7aWYo''@;'; put 'put ''dGhpcy5rZXlQcmVzc2VkJiYoTXx8RCl8fHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQ9PT1kKXJldHVybjtjb25zdCBaPXRoaXMudHJhbnNsYXRlTW91c2VXaGVlbFRvU2Nyb2xsKGwpOyhhfHx0aGlzLnNjcm9sbGFibGVFbGVtZW50IT09ZCYmWikmJmwucHJldmVudERlZmF1bHQoKX1vbktleURv''@;'; put 'put ''d24obCl7dGhpcy5rZXlQcmVzc2VkPWFfKGwua2V5Q29kZSwiQVJST1dfVVB8QVJST1dfUklHSFR8QVJST1dfRE9XTnxBUlJPV19MRUZUIil9b25LZXlVcCgpe3RoaXMua2V5UHJlc3NlZD0hMX10cmFuc2xhdGVNb3VzZVdoZWVsVG9TY3JvbGwobCl7bGV0IGE9aXNOYU4obC5kZWx0YVkpPy0x''@;'; put 'put ''Kmwud2hlZWxEZWx0YVk6bC5kZWx0YVksZD1pc05hTihsLmRlbHRhWCk/LTEqbC53aGVlbERlbHRhWDpsLmRlbHRhWDsxPT09bC5kZWx0YU1vZGUmJihkKz1kKnRoaXMuYnJvd3NlckxpbmVIZWlnaHQsYSs9YSp0aGlzLmJyb3dzZXJMaW5lSGVpZ2h0KTtjb25zdCBoPXRoaXMuc2Nyb2xsVmVy''@;'; put 'put ''dGljYWxseShhKSxmPXRoaXMuc2Nyb2xsSG9yaXpvbnRhbGx5KGQpO3JldHVybiBofHxmfXNjcm9sbFZlcnRpY2FsbHkobCl7Y29uc3QgYT10aGlzLnNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFRvcDtyZXR1cm4gdGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3ArPWwsYSE9PXRoaXMu''@;'; put 'put ''c2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wfXNjcm9sbEhvcml6b250YWxseShsKXtjb25zdCBhPXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsTGVmdDtyZXR1cm4gdGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxMZWZ0Kz1sLGEhPT10aGlzLnNjcm9sbGFibGVFbGVtZW50LnNj''@;'; put 'put ''cm9sbExlZnR9c3luY1Njcm9sbFBvc2l0aW9ucygpe2lmKHRoaXMuZGVzdHJveWVkKXJldHVybjtjb25zdHtyb290V2luZG93Omx9PXRoaXMuZG9tQmluZGluZ3MsYT10aGlzLnRvcE92ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXIsZD10aGlzLmlubGluZVN0YXJ0T3ZlcmxheS5jbG9uZS53''@;'; put 'put ''dFRhYmxlLmhvbGRlcixbaCxmXT1bdGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxMZWZ0LHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsVG9wXTtpZih0aGlzLmhvcml6b250YWxTY3JvbGxpbmc9YS5zY3JvbGxMZWZ0IT09aHx8dGhpcy5sYXN0U2Nyb2xsWCE9PWwuc2Nyb2xsWCx0''@;'; put 'put ''aGlzLnZlcnRpY2FsU2Nyb2xsaW5nPWQuc2Nyb2xsVG9wIT09Znx8dGhpcy5sYXN0U2Nyb2xsWSE9PWwuc2Nyb2xsWSx0aGlzLmxhc3RTY3JvbGxYPWwuc2Nyb2xsWCx0aGlzLmxhc3RTY3JvbGxZPWwuc2Nyb2xsWSx0aGlzLmhvcml6b250YWxTY3JvbGxpbmcpe2Euc2Nyb2xsTGVmdD1oO2Nv''@;'; put 'put ''bnN0IHY9dGhpcy5ib3R0b21PdmVybGF5Lm5lZWRGdWxsUmVuZGVyP3RoaXMuYm90dG9tT3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlcjpudWxsO3YmJih2LnNjcm9sbExlZnQ9aCl9dGhpcy52ZXJ0aWNhbFNjcm9sbGluZyYmKGQuc2Nyb2xsVG9wPWYpLHRoaXMucmVmcmVzaEFsbCgpfXN5''@;'; put 'put ''bmNTY3JvbGxXaXRoTWFzdGVyKCl7aWYoIWJnKGVQLHRoaXMpKXJldHVybjtjb25zdCBsPXRoaXMudG9wT3ZlcmxheS5tYWluVGFibGVTY3JvbGxhYmxlRWxlbWVudCx7c2Nyb2xsTGVmdDphLHNjcm9sbFRvcDpkfT1sO3RoaXMudG9wT3ZlcmxheS5uZWVkRnVsbFJlbmRlciYmKHRoaXMudG9w''@;'; put 'put ''T3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlci5zY3JvbGxMZWZ0PWEpLHRoaXMuYm90dG9tT3ZlcmxheS5uZWVkRnVsbFJlbmRlciYmKHRoaXMuYm90dG9tT3ZlcmxheS5jbG9uZS53dFRhYmxlLmhvbGRlci5zY3JvbGxMZWZ0PWEpLHRoaXMuaW5saW5lU3RhcnRPdmVybGF5Lm5lZWRGdWxs''@;'; put 'put ''UmVuZGVyJiYodGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuY2xvbmUud3RUYWJsZS5ob2xkZXIuc2Nyb2xsVG9wPWQpLEc3KGVQLHRoaXMsITEpfXVwZGF0ZU1haW5TY3JvbGxhYmxlRWxlbWVudHMoKXt0aGlzLmV2ZW50TWFuYWdlci5jbGVhckV2ZW50cyghMCksdGhpcy5pbmxpbmVTdGFydE92''@;'; put 'put ''ZXJsYXkudXBkYXRlTWFpblNjcm9sbGFibGVFbGVtZW50KCksdGhpcy50b3BPdmVybGF5LnVwZGF0ZU1haW5TY3JvbGxhYmxlRWxlbWVudCgpLHRoaXMuYm90dG9tT3ZlcmxheS5uZWVkRnVsbFJlbmRlciYmdGhpcy5ib3R0b21PdmVybGF5LnVwZGF0ZU1haW5TY3JvbGxhYmxlRWxlbWVudCgp''@;'; put 'put ''O2NvbnN0e3d0VGFibGU6bH09dGhpcyx7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzO3RoaXMuc2Nyb2xsYWJsZUVsZW1lbnQ9ImhpZGRlbiI9PT1hLmdldENvbXB1dGVkU3R5bGUobC53dFJvb3RFbGVtZW50LnBhcmVudE5vZGUpLmdldFByb3BlcnR5VmFsdWUoIm92ZXJmbG93Iik/''@;'; put 'put ''bC5ob2xkZXI6bUUobC5UQUJMRSksdGhpcy5yZWdpc3Rlckxpc3RlbmVycygpfWRlc3Ryb3koKXt0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSx0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCksdGhpcy50b3BPdmVybGF5LmRlc3Ryb3koKSx0aGlzLmJvdHRvbU92ZXJsYXkuY2xv''@;'; put 'put ''bmUmJnRoaXMuYm90dG9tT3ZlcmxheS5kZXN0cm95KCksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuZGVzdHJveSgpLHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZ0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5kZXN0cm95KCksdGhpcy5ib3R0b21JbmxpbmVTdGFy''@;'; put 'put ''dENvcm5lck92ZXJsYXkmJnRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lJiZ0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5kZXN0cm95KCksdGhpcy5kZXN0cm95ZWQ9ITB9cmVmcmVzaCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAw''@;'; put 'put ''IT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07dGhpcy51cGRhdGVMYXN0U3ByZWFkZXJTaXplKCkmJnRoaXMuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5ib3R0b21PdmVybGF5LmNsb25lJiZ0aGlzLmJvdHRvbU92ZXJsYXkucmVmcmVzaChsKSx0aGlzLmlubGluZVN0YXJ0T3Zlcmxh''@;'; put 'put ''eS5yZWZyZXNoKGwpLHRoaXMudG9wT3ZlcmxheS5yZWZyZXNoKGwpLHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZ0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5yZWZyZXNoKGwpLHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5JiZ0aGlzLmJvdHRv''@;'; put 'put ''bUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5jbG9uZSYmdGhpcy5ib3R0b21JbmxpbmVTdGFydENvcm5lck92ZXJsYXkucmVmcmVzaChsKX11cGRhdGVMYXN0U3ByZWFkZXJTaXplKCl7Y29uc3QgbD10aGlzLnd0VGFibGUuc3ByZWFkZXIsYT1sLmNsaWVudFdpZHRoLGQ9bC5jbGllbnRIZWln''@;'; put 'put ''aHQsaD1hIT09dGhpcy5zcHJlYWRlckxhc3RTaXplLndpZHRofHxkIT09dGhpcy5zcHJlYWRlckxhc3RTaXplLmhlaWdodDtyZXR1cm4gaCYmKHRoaXMuc3ByZWFkZXJMYXN0U2l6ZS53aWR0aD1hLHRoaXMuc3ByZWFkZXJMYXN0U2l6ZS5oZWlnaHQ9ZCksaH1hZGp1c3RFbGVtZW50c1NpemUo''@;'; put 'put ''KXtjb25zdHt3dFZpZXdwb3J0Omx9PXRoaXMud290LHt3dFRhYmxlOmF9PXRoaXMse3Jvb3RXaW5kb3c6ZH09dGhpcy5kb21CaW5kaW5ncyxoPXRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQ9PT1kLGY9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsQ29sdW1ucyIpLHY9dGhpcy53dFNl''@;'; put 'put ''dHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLE09bC5nZXRSb3dIZWFkZXJXaWR0aCgpLFo9bC5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKSt0aGlzLnRvcE92ZXJsYXkuc3VtQ2VsbFNpemVzKDAsdikrMSxuZT1NK3RoaXMuaW5saW5lU3RhcnRPdmVybGF5LnN1bUNlbGxTaXplcygwLGYp''@;'; put 'put ''LGJlPWEuaGlkZXIuc3R5bGUscWU9KCgpPT4haCYmdGhpcy5zY3JvbGxhYmxlRWxlbWVudC5zY3JvbGxUb3A+TWF0aC5tYXgoMCxaLWEuaG9sZGVyLmNsaWVudEhlaWdodCkpKCk/MTowLG50PSgoKT0+IWgmJnRoaXMuc2Nyb2xsYWJsZUVsZW1lbnQuc2Nyb2xsTGVmdD5NYXRoLm1heCgwLG5l''@;'; put 'put ''LWEuaG9sZGVyLmNsaWVudFdpZHRoKSkoKT8xOjA7YmUud2lkdGg9YCR7bmUrbnR9cHhgLGJlLmhlaWdodD1gJHtaK3FlfXB4YCx0aGlzLnRvcE92ZXJsYXkuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuYWRqdXN0RWxlbWVudHNTaXplKCksdGhpcy5ib3R0''@;'; put 'put ''b21PdmVybGF5LmFkanVzdEVsZW1lbnRzU2l6ZSgpfWV4cGFuZEhpZGVyVmVydGljYWxseUJ5KGwpe2NvbnN0e3d0VGFibGU6YX09dGhpczthLmhpZGVyLnN0eWxlLmhlaWdodD1gJHtwYXJzZUludChhLmhpZGVyLnN0eWxlLmhlaWdodCwxMCkrbH1weGB9ZXhwYW5kSGlkZXJIb3Jpem9udGFs''@;'; put 'put ''bHlCeShsKXtjb25zdHt3dFRhYmxlOmF9PXRoaXM7YS5oaWRlci5zdHlsZS53aWR0aD1gJHtwYXJzZUludChhLmhpZGVyLnN0eWxlLndpZHRoLDEwKStsfXB4YH1hcHBseVRvRE9NKCl7dGhpcy53dFRhYmxlLmlzVmlzaWJsZSgpJiYodGhpcy50b3BPdmVybGF5LmFwcGx5VG9ET00oKSx0aGlz''@;'; put 'put ''LmJvdHRvbU92ZXJsYXkuY2xvbmUmJnRoaXMuYm90dG9tT3ZlcmxheS5hcHBseVRvRE9NKCksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXkuYXBwbHlUb0RPTSgpKX1nZXRQYXJlbnRPdmVybGF5KGwpe2lmKCFsKXJldHVybiBudWxsO2xldCBkPW51bGw7cmV0dXJuIFluKFt0aGlzLnRvcE92ZXJs''@;'; put 'put ''YXksdGhpcy5pbmxpbmVTdGFydE92ZXJsYXksdGhpcy5ib3R0b21PdmVybGF5LHRoaXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LHRoaXMuYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5XSxoPT57aCYmaC5jbG9uZSYmaC5jbG9uZS53dFRhYmxlLlRBQkxFLmNvbnRhaW5zKGwp''@;'; put 'put ''JiYoZD1oLmNsb25lKX0pLGR9c3luY092ZXJsYXlUYWJsZUNsYXNzTmFtZXMoKXtjb25zdCBsPXRoaXMud3RUYWJsZS5UQUJMRTtZbihbdGhpcy50b3BPdmVybGF5LHRoaXMuaW5saW5lU3RhcnRPdmVybGF5LHRoaXMuYm90dG9tT3ZlcmxheSx0aGlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3Zl''@;'; put 'put ''cmxheSx0aGlzLmJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheV0sZD0+e2QmJihkLmNsb25lLnd0VGFibGUuVEFCTEUuY2xhc3NOYW1lPWwuY2xhc3NOYW1lKX0pfX07ZnVuY3Rpb24gSGZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBKSmUoYyl7dmFyIGw9ZnVuY3Rpb24gUUplKGMs''@;'; put 'put ''bCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0''@;'; put 'put ''b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3Zh''@;'; put 'put ''bHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBlUWV7Y29uc3RydWN0b3IobCl7SGZlKHRoaXMsInNldHRpbmdzIix7fSksSGZlKHRoaXMsImRlZmF1bHRzIixPYmplY3QuZnJlZXplKHRoaXMuZ2V0RGVmYXVsdHMoKSkpLHFh''@;'; put 'put ''KHRoaXMuZGVmYXVsdHMsKGEsZCk9PntpZih2b2lkIDAhPT1sW2RdKXRoaXMuc2V0dGluZ3NbZF09bFtkXTtlbHNle2lmKHZvaWQgMD09PWEpdGhyb3cgbmV3IEVycm9yKGBBIHJlcXVpcmVkIHNldHRpbmcgIiR7ZH0iIHdhcyBub3QgcHJvdmlkZWRgKTt0aGlzLnNldHRpbmdzW2RdPWF9fSl9''@;'; put 'put ''Z2V0RGVmYXVsdHMoKXtyZXR1cm57ZmFjYWRlOnZvaWQgMCx0YWJsZTp2b2lkIDAsaXNEYXRhVmlld0luc3RhbmNlOiEwLGV4dGVybmFsUm93Q2FsY3VsYXRvcjohMSxjdXJyZW50Um93Q2xhc3NOYW1lOm51bGwsY3VycmVudENvbHVtbkNsYXNzTmFtZTpudWxsLHByZXZlbnRPdmVyZmxvdzoo''@;'; put 'put ''KT0+ITEscHJldmVudFdoZWVsOiExLGRhdGE6dm9pZCAwLGZpeGVkQ29sdW1uc1N0YXJ0OjAsZml4ZWRSb3dzVG9wOjAsZml4ZWRSb3dzQm90dG9tOjAsc2hvdWxkUmVuZGVySW5saW5lU3RhcnRPdmVybGF5OigpPT50aGlzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik+MHx8dGhp''@;'; put 'put ''cy5nZXRTZXR0aW5nKCJyb3dIZWFkZXJzIikubGVuZ3RoPjAsc2hvdWxkUmVuZGVyVG9wT3ZlcmxheTooKT0+dGhpcy5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKT4wfHx0aGlzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg+MCxzaG91bGRSZW5kZXJCb3R0b21PdmVybGF5''@;'; put 'put ''OigpPT50aGlzLmdldFNldHRpbmcoImZpeGVkUm93c0JvdHRvbSIpPjAsbWluU3BhcmVSb3dzOjAscm93SGVhZGVyczooKT0+W10sY29sdW1uSGVhZGVyczooKT0+W10sdG90YWxSb3dzOnZvaWQgMCx0b3RhbENvbHVtbnM6dm9pZCAwLGNlbGxSZW5kZXJlcjoobCxhLGQpPT57TG0oZCx0aGlz''@;'; put 'put ''LmdldFNldHRpbmcoImRhdGEiLGwsYSk/PyIiKX0sY29sdW1uV2lkdGgoKXt9LHJvd0hlaWdodCgpe30scm93SGVpZ2h0QnlPdmVybGF5TmFtZSgpe30sZGVmYXVsdENvbHVtbldpZHRoOjUwLHNlbGVjdGlvbnM6bnVsbCxoaWRlQm9yZGVyT25Nb3VzZURvd25PdmVyOiExLHZpZXdwb3J0Um93''@;'; put 'put ''Q2FsY3VsYXRvck92ZXJyaWRlOm51bGwsdmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGU6bnVsbCx2aWV3cG9ydFJvd1JlbmRlcmluZ1RocmVzaG9sZDpudWxsLHZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nVGhyZXNob2xkOm51bGwsb25DZWxsTW91c2VEb3duOm51bGwsb25DZWxsQ29u''@;'; put 'put ''dGV4dE1lbnU6bnVsbCxvbkNlbGxNb3VzZU92ZXI6bnVsbCxvbkNlbGxNb3VzZU91dDpudWxsLG9uQ2VsbE1vdXNlVXA6bnVsbCxvbkNlbGxEYmxDbGljazpudWxsLG9uQ2VsbENvcm5lck1vdXNlRG93bjpudWxsLG9uQ2VsbENvcm5lckRibENsaWNrOm51bGwsYmVmb3JlRHJhdzpudWxsLG9u''@;'; put 'put ''RHJhdzpudWxsLG9uQmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXM6bnVsbCxvbkFmdGVyRHJhd1NlbGVjdGlvbjpudWxsLG9uQmVmb3JlRHJhd0JvcmRlcnM6bnVsbCxvbkJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5Omw9Pmwsb25CZWZvcmVWaWV3cG9ydFNjcm9sbFZlcnRpY2Fs''@;'; put 'put ''bHk6bD0+bCxvblNjcm9sbEhvcml6b250YWxseTpudWxsLG9uU2Nyb2xsVmVydGljYWxseTpudWxsLG9uQmVmb3JlVG91Y2hTY3JvbGw6bnVsbCxvbkFmdGVyTW9tZW50dW1TY3JvbGw6bnVsbCxvbk1vZGlmeVJvd0hlYWRlcldpZHRoOm51bGwsb25Nb2RpZnlHZXRDZWxsQ29vcmRzOm51bGws''@;'; put 'put ''b25Nb2RpZnlHZXRDb29yZHNFbGVtZW50Om51bGwsb25Nb2RpZnlHZXRDb29yZHM6bnVsbCxvbkJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hlYWRlcjpsPT5sLG9uQmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyOmw9Pmwsb25XaW5kb3dSZXNpemU6bnVsbCxvbkNvbnRhaW5lckVsZW1lbnRS''@;'; put 'put ''ZXNpemU6bnVsbCxyZW5kZXJBbGxDb2x1bW5zOiExLHJlbmRlckFsbFJvd3M6ITEsZ3JvdXBzOiExLHJvd0hlYWRlcldpZHRoOm51bGwsY29sdW1uSGVhZGVySGVpZ2h0Om51bGwsaGVhZGVyQ2xhc3NOYW1lOm51bGwscnRsTW9kZTohMSxhcmlhVGFnczohMH19dXBkYXRlKGwsYSl7cmV0dXJu''@;'; put 'put ''IHZvaWQgMD09PWE/cWEobCwoZCxoKT0+e3RoaXMuc2V0dGluZ3NbaF09ZH0pOnRoaXMuc2V0dGluZ3NbbF09YSx0aGlzfWdldFNldHRpbmcobCxhLGQsaCxmKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5zZXR0aW5nc1tsXT90aGlzLnNldHRpbmdzW2xdKGEsZCxoLGYpOnZvaWQg''@;'; put 'put ''MCE9PWEmJkFycmF5LmlzQXJyYXkodGhpcy5zZXR0aW5nc1tsXSk/dGhpcy5zZXR0aW5nc1tsXVthXTp0aGlzLnNldHRpbmdzW2xdfWdldFNldHRpbmdQdXJlKGwpe3JldHVybiB0aGlzLnNldHRpbmdzW2xdfWhhcyhsKXtyZXR1cm4hIXRoaXMuc2V0dGluZ3NbbF19fWNsYXNzIGRLIGV4dGVu''@;'; put 'put ''ZHMgaF97Y29uc3RydWN0b3IobCxhLGQsaCl7c3VwZXIobCxhLGQsaCwibWFzdGVyIil9YWxpZ25PdmVybGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpe2NvbnN0IGw9dF8odGhpcy53dFJvb3RFbGVtZW50KSx7cm9vdFdpbmRvdzphfT10aGlzLmRvbUJpbmRpbmdzO2lmKGw9PT1hKXRoaXMu''@;'; put 'put ''d3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJwcmV2ZW50T3ZlcmZsb3ciKXx8KHRoaXMuaG9sZGVyLnN0eWxlLm92ZXJmbG93PSJ2aXNpYmxlIix0aGlzLnd0Um9vdEVsZW1lbnQuc3R5bGUub3ZlcmZsb3c9InZpc2libGUiKTtlbHNle2NvbnN0IGQ9bC5wYXJlbnRFbGVtZW50LGg9dkUobCwiaGVp''@;'; put 'put ''Z2h0IixhKSxmPXZFKGwsIm92ZXJmbG93IixhKSx2PXRoaXMuaG9sZGVyLnN0eWxlLHtzY3JvbGxXaWR0aDpNLHNjcm9sbEhlaWdodDpEfT1sO2xldCBaPWwub2Zmc2V0V2lkdGgsbmU9bC5vZmZzZXRIZWlnaHQ7aWYoZCYmWyJhdXRvIiwiaGlkZGVuIiwic2Nyb2xsIl0uaW5jbHVkZXMoZikp''@;'; put 'put ''e2NvbnN0IGJlPWwuY2xvbmVOb2RlKCExKTtiZS5zdHlsZS5vdmVyZmxvdz0iYXV0byIsYmUuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixsLm5leHRFbGVtZW50U2libGluZz9kLmluc2VydEJlZm9yZShiZSxsLm5leHRFbGVtZW50U2libGluZyk6ZC5hcHBlbmRDaGlsZChiZSk7Y29uc3Qg''@;'; put 'put ''RWU9cGFyc2VJbnQoYS5nZXRDb21wdXRlZFN0eWxlKGJlKS5oZWlnaHQsMTApO2QucmVtb3ZlQ2hpbGQoYmUpLDA9PT1FZSYmKG5lPTApfW5lPU1hdGgubWluKG5lLEQpLHYuaGVpZ2h0PSJhdXRvIj09PWg/ImF1dG8iOmAke25lfXB4YCxaPU1hdGgubWluKFosTSksdi53aWR0aD1gJHtafXB4''@;'; put 'put ''YCx2Lm92ZXJmbG93PSIiLHRoaXMuaGFzVGFibGVIZWlnaHQ9ImF1dG8iPT09di5oZWlnaHR8fG5lPjAsdGhpcy5oYXNUYWJsZVdpZHRoPVo+MH10aGlzLmlzVGFibGVWaXNpYmxlPVY3KHRoaXMuVEFCTEUpfW1hcmtPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzKCl7Y29uc3R7d3RTZXR0aW5nczps''@;'; put 'put ''fT10aGlzLHt3dFZpZXdwb3J0OmF9PXRoaXMuZGF0YUFjY2Vzc09iamVjdCxkPSJtYXN0ZXIiLGY9bC5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoO2lmKGYmJiFhLmhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWRbZF0pe2NvbnN0IE09bC5nZXRTZXR0aW5nKCJyb3dI''@;'; put 'put ''ZWFkZXJzIikubGVuZ3RoLEQ9dGhpcy5nZXRSZW5kZXJlZENvbHVtbnNDb3VudCgpO2ZvcihsZXQgWj0wO1o8ZjtaKyspZm9yKGxldCBuZT0tMSpNO25lPEQ7bmUrKyl0aGlzLm1hcmtJZk92ZXJzaXplZENvbHVtbkhlYWRlcihuZSk7YS5oYXNPdmVyc2l6ZWRDb2x1bW5IZWFkZXJzTWFya2Vk''@;'; put 'put ''W2RdPSEwfX19eGwoZEssTGZlKSx4bChkSyxRJCk7Y29uc3QgdFFlPWRLO2Z1bmN0aW9uIFJFKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBuUWUoYyl7dmFyIGw9ZnVuY3Rpb24gclFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1By''@;'; put 'put ''aW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmlu''@;'; put 'put ''ZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEs''@;'; put 'put ''Y31jbGFzcyBpUWV7Y29uc3RydWN0b3IoKXtSRSh0aGlzLCJjb3VudCIsMCksUkUodGhpcywic3RhcnRSb3ciLDApLFJFKHRoaXMsImVuZFJvdyIsMCksUkUodGhpcywic3RhcnRQb3NpdGlvbiIsMCksUkUodGhpcywiaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lciIsITApfWluaXRpYWxp''@;'; put 'put ''emUobCl7bGV0e3RvdGFsUm93czphfT1sO3RoaXMuY291bnQ9YSx0aGlzLmVuZFJvdz10aGlzLmNvdW50LTF9cHJvY2Vzcygpe31maW5hbGl6ZSgpe319ZnVuY3Rpb24gTEUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIG9RZShjKXt2YXIgbD1mdW5jdGlvbiBhUWUoYyxsKXtpZigib2JqZWN0''@;'; put 'put ''IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11''@;'; put 'put ''c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJh''@;'; put 'put ''YmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfV8oMzkwOTIpLF8oMTQzNjApO2NsYXNzIE5mZXtjb25zdHJ1Y3Rvcigpe0xFKHRoaXMsImNvdW50IiwwKSxMRSh0aGlzLCJzdGFydFJvdyIsbnVsbCksTEUodGhpcywiZW5kUm93IixudWxsKSxMRSh0aGlzLCJz''@;'; put 'put ''dGFydFBvc2l0aW9uIixudWxsKSxMRSh0aGlzLCJpc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyIiwhMSl9aW5pdGlhbGl6ZSgpe31wcm9jZXNzKGwsYSl7Y29uc3R7dG90YWxDYWxjdWxhdGVkSGVpZ2h0OmQsemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0OmgsaW5uZXJWaWV3cG9ydEhlaWdodDpm''@;'; put 'put ''fT1hO2Q8PWgmJih0aGlzLnN0YXJ0Um93PWwpLGQ+PWgmJmQ8PWYmJm51bGw9PT10aGlzLnN0YXJ0Um93JiYodGhpcy5zdGFydFJvdz1sKSx0aGlzLmVuZFJvdz1sfWZpbmFsaXplKGwpe3ZhciBhO2NvbnN0e3Njcm9sbE9mZnNldDpkLHZpZXdwb3J0SGVpZ2h0OmgsaG9yaXpvbnRhbFNjcm9s''@;'; put 'put ''bGJhckhlaWdodDpmLHRvdGFsUm93czp2LG5lZWRSZXZlcnNlOk0sc3RhcnRQb3NpdGlvbnM6RCxyb3dIZWlnaHQ6Wn09bDtpZih0aGlzLmVuZFJvdz09PXYtMSYmTSlmb3IodGhpcy5zdGFydFJvdz10aGlzLmVuZFJvdzt0aGlzLnN0YXJ0Um93PjA7KXtjb25zdCBjZT1EW3RoaXMuZW5kUm93''@;'; put 'put ''XStaLURbdGhpcy5zdGFydFJvdy0xXTtpZih0aGlzLnN0YXJ0Um93LT0xLGNlPj1oLWYpYnJlYWt9dGhpcy5zdGFydFBvc2l0aW9uPW51bGwhPT0oYT1EW3RoaXMuc3RhcnRSb3ddKSYmdm9pZCAwIT09YT9hOm51bGwsdGhpcy5pc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyPSEoZCtoLWY8''@;'; put 'put ''MHx8ZD5ELmF0KC0xKStaKSx2PHRoaXMuZW5kUm93JiYodGhpcy5lbmRSb3c9di0xKSxudWxsIT09dGhpcy5zdGFydFJvdyYmKHRoaXMuY291bnQ9dGhpcy5lbmRSb3ctdGhpcy5zdGFydFJvdysxKX19ZnVuY3Rpb24gVmZlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBzUWUoYyl7dmFyIGw9''@;'; put 'put ''ZnVuY3Rpb24gbFFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3''@;'; put 'put ''IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBjUWUgZXh0ZW5kcyBOZmV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLFZmZSh0aGlzLCJyb3dTdGFydE9mZnNldCIsMCksVmZlKHRo''@;'; put 'put ''aXMsInJvd0VuZE9mZnNldCIsMCl9ZmluYWxpemUobCl7dmFyIGE7c3VwZXIuZmluYWxpemUobCk7Y29uc3R7b3ZlcnJpZGVGbjpkLHRvdGFsUm93czpoLHN0YXJ0UG9zaXRpb25zOmZ9PWw7aWYobnVsbCE9PXRoaXMuc3RhcnRSb3cmJiJmdW5jdGlvbiI9PXR5cGVvZiBkKXtjb25zdCB2PXRo''@;'; put 'put ''aXMuc3RhcnRSb3csTT10aGlzLmVuZFJvdztkKHRoaXMpLHRoaXMucm93U3RhcnRPZmZzZXQ9di10aGlzLnN0YXJ0Um93LHRoaXMucm93RW5kT2Zmc2V0PXRoaXMuZW5kUm93LU19dGhpcy5zdGFydFJvdzwwJiYodGhpcy5zdGFydFJvdz0wKSx0aGlzLnN0YXJ0UG9zaXRpb249bnVsbCE9PShh''@;'; put 'put ''PWZbdGhpcy5zdGFydFJvd10pJiZ2b2lkIDAhPT1hP2E6bnVsbCxoPHRoaXMuZW5kUm93JiYodGhpcy5lbmRSb3c9aC0xKSxudWxsIT09dGhpcy5zdGFydFJvdyYmKHRoaXMuY291bnQ9dGhpcy5lbmRSb3ctdGhpcy5zdGFydFJvdysxKX19ZnVuY3Rpb24gT0UoYyxsLGEpe3JldHVybihsPWZ1''@;'; put 'put ''bmN0aW9uIHVRZShjKXt2YXIgbD1mdW5jdGlvbiBkUWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2Yg''@;'; put 'put ''ZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwp''@;'; put 'put ''KWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGhRZXtjb25zdHJ1Y3Rvcigpe09FKHRoaXMsImNvdW50IiwwKSxPRSh0aGlzLCJzdGFydFJvdyIsbnVsbCksT0Uo''@;'; put 'put ''dGhpcywiZW5kUm93IixudWxsKSxPRSh0aGlzLCJzdGFydFBvc2l0aW9uIixudWxsKSxPRSh0aGlzLCJpc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyIiwhMSl9aW5pdGlhbGl6ZSgpe31wcm9jZXNzKGwsYSl7Y29uc3R7dG90YWxDYWxjdWxhdGVkSGVpZ2h0OmQsemVyb0Jhc2VkU2Nyb2xs''@;'; put 'put ''T2Zmc2V0OmgsaW5uZXJWaWV3cG9ydEhlaWdodDpmLHJvd0hlaWdodDp2fT1hO2Q+PWgmJmQrdjw9ZiYmKG51bGw9PT10aGlzLnN0YXJ0Um93JiYodGhpcy5zdGFydFJvdz1sKSx0aGlzLmVuZFJvdz1sKX1maW5hbGl6ZShsKXt2YXIgYTtjb25zdHtzY3JvbGxPZmZzZXQ6ZCx2aWV3cG9ydEhl''@;'; put 'put ''aWdodDpoLGhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQ6Zix0b3RhbFJvd3M6dixuZWVkUmV2ZXJzZTpNLHN0YXJ0UG9zaXRpb25zOkQscm93SGVpZ2h0Olp9PWw7aWYodGhpcy5lbmRSb3c9PT12LTEmJk0pZm9yKHRoaXMuc3RhcnRSb3c9dGhpcy5lbmRSb3c7dGhpcy5zdGFydFJvdz4wOyl7''@;'; put 'put ''Y29uc3QgYmU9RFt0aGlzLmVuZFJvd10rWi1EW3RoaXMuc3RhcnRSb3ctMV07aWYoYmU8PWgtZiYmKHRoaXMuc3RhcnRSb3ctPTEpLGJlPj1oLWYpYnJlYWt9dGhpcy5zdGFydFBvc2l0aW9uPW51bGwhPT0oYT1EW3RoaXMuc3RhcnRSb3ddKSYmdm9pZCAwIT09YT9hOm51bGw7Y29uc3QgbmU9''@;'; put 'put ''ZCtoLWYsY2U9bnVsbD09PXRoaXMuc3RhcnRSb3c/MDpsLmdldFJvd0hlaWdodCh0aGlzLnN0YXJ0Um93KTt0aGlzLmlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXI9IShuZTxjZXx8ZD5ELmF0KC0xKSksdjx0aGlzLmVuZFJvdyYmKHRoaXMuZW5kUm93PXYtMSksbnVsbCE9PXRoaXMuc3Rh''@;'; put 'put ''cnRSb3cmJih0aGlzLmNvdW50PXRoaXMuZW5kUm93LXRoaXMuc3RhcnRSb3crMSl9fWZ1bmN0aW9uIFBFKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBmUWUoYyl7dmFyIGw9ZnVuY3Rpb24gcFFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJv''@;'; put 'put ''bC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4o''@;'; put 'put ''InN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpj''@;'; put 'put ''W2xdPWEsY31jbGFzcyBnUWV7Y29uc3RydWN0b3IoKXtQRSh0aGlzLCJjb3VudCIsMCksUEUodGhpcywic3RhcnRDb2x1bW4iLDApLFBFKHRoaXMsImVuZENvbHVtbiIsMCksUEUodGhpcywic3RhcnRQb3NpdGlvbiIsMCksUEUodGhpcywiaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lciIs''@;'; put 'put ''ITApfWluaXRpYWxpemUobCl7bGV0e3RvdGFsQ29sdW1uczphfT1sO3RoaXMuY291bnQ9YSx0aGlzLmVuZENvbHVtbj10aGlzLmNvdW50LTF9cHJvY2Vzcygpe31maW5hbGl6ZSgpe319ZnVuY3Rpb24gRkUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIG1RZShjKXt2YXIgbD1mdW5jdGlvbiB2''@;'; put 'put ''UWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9y''@;'; put 'put ''KCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMs''@;'; put 'put ''bCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIEJmZXtjb25zdHJ1Y3Rvcigpe0ZFKHRoaXMsImNvdW50IiwwKSxGRSh0aGlzLCJzdGFydENvbHVtbiIsbnVsbCksRkUodGhpcywiZW5kQ29sdW1uIixudWxsKSxGRSh0''@;'; put 'put ''aGlzLCJzdGFydFBvc2l0aW9uIixudWxsKSxGRSh0aGlzLCJpc1Zpc2libGVJblRyaW1taW5nQ29udGFpbmVyIiwhMSl9aW5pdGlhbGl6ZSgpe31wcm9jZXNzKGwsYSl7Y29uc3R7dG90YWxDYWxjdWxhdGVkV2lkdGg6ZCx6ZXJvQmFzZWRTY3JvbGxPZmZzZXQ6aCx2aWV3cG9ydFdpZHRoOmZ9''@;'; put 'put ''PWE7ZDw9aCYmKHRoaXMuc3RhcnRDb2x1bW49bCksZD49aCYmZDw9aCsoaD4wP2YrMTpmKSYmbnVsbD09dGhpcy5zdGFydENvbHVtbiYmKHRoaXMuc3RhcnRDb2x1bW49bCksdGhpcy5lbmRDb2x1bW49bH1maW5hbGl6ZShsKXt2YXIgYTtjb25zdHtzY3JvbGxPZmZzZXQ6ZCx2aWV3cG9ydFdp''@;'; put 'put ''ZHRoOmgsaW5saW5lU3RhcnRPZmZzZXQ6Zix6ZXJvQmFzZWRTY3JvbGxPZmZzZXQ6dix0b3RhbENvbHVtbnM6TSxuZWVkUmV2ZXJzZTpELHN0YXJ0UG9zaXRpb25zOlosY29sdW1uV2lkdGg6bmV9PWw7aWYodGhpcy5lbmRDb2x1bW49PT1NLTEmJkQpZm9yKHRoaXMuc3RhcnRDb2x1bW49dGhp''@;'; put 'put ''cy5lbmRDb2x1bW47dGhpcy5zdGFydENvbHVtbj4wOyl7Y29uc3QgRWU9Wlt0aGlzLmVuZENvbHVtbl0rbmUtWlt0aGlzLnN0YXJ0Q29sdW1uLTFdO2lmKHRoaXMuc3RhcnRDb2x1bW4tPTEsRWU+aClicmVha310aGlzLnN0YXJ0UG9zaXRpb249bnVsbCE9PShhPVpbdGhpcy5zdGFydENvbHVt''@;'; put 'put ''bl0pJiZ2b2lkIDAhPT1hP2E6bnVsbCx0aGlzLmlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXI9IShkK2gtKHY+MD9oKzE6aCk8LTEqZnx8ZD5aLmF0KC0xKStuZXx8LTEqZC1oPjApLE08dGhpcy5lbmRDb2x1bW4mJih0aGlzLmVuZENvbHVtbj1NLTEpLG51bGwhPT10aGlzLnN0YXJ0Q29s''@;'; put 'put ''dW1uJiYodGhpcy5jb3VudD10aGlzLmVuZENvbHVtbi10aGlzLnN0YXJ0Q29sdW1uKzEpfX1mdW5jdGlvbiBqZmUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGJRZShjKXt2YXIgbD1mdW5jdGlvbiB5UWUoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNb''@;'; put 'put ''U3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJl''@;'; put 'put ''dHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZToh''@;'; put 'put ''MH0pOmNbbF09YSxjfWNsYXNzIF9RZSBleHRlbmRzIEJmZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksamZlKHRoaXMsImNvbHVtblN0YXJ0T2Zmc2V0IiwwKSxqZmUodGhpcywiY29sdW1uRW5kT2Zmc2V0IiwwKX1maW5hbGl6ZShsKXt2YXIgYTtzdXBlci5maW5hbGl6ZShs''@;'; put 'put ''KTtjb25zdHtvdmVycmlkZUZuOmQsdG90YWxDb2x1bW5zOmgsc3RhcnRQb3NpdGlvbnM6Zn09bDtpZihudWxsIT09dGhpcy5zdGFydENvbHVtbiYmImZ1bmN0aW9uIj09dHlwZW9mIGQpe2NvbnN0IHY9dGhpcy5zdGFydENvbHVtbixNPXRoaXMuZW5kQ29sdW1uO2QodGhpcyksdGhpcy5jb2x1''@;'; put 'put ''bW5TdGFydE9mZnNldD12LXRoaXMuc3RhcnRDb2x1bW4sdGhpcy5jb2x1bW5FbmRPZmZzZXQ9dGhpcy5lbmRDb2x1bW4tTX10aGlzLnN0YXJ0Q29sdW1uPDAmJih0aGlzLnN0YXJ0Q29sdW1uPTApLHRoaXMuc3RhcnRQb3NpdGlvbj1udWxsIT09KGE9Zlt0aGlzLnN0YXJ0Q29sdW1uXSkmJnZv''@;'; put 'put ''aWQgMCE9PWE/YTpudWxsLGg8dGhpcy5lbmRDb2x1bW4mJih0aGlzLmVuZENvbHVtbj1oLTEpLG51bGwhPT10aGlzLnN0YXJ0Q29sdW1uJiYodGhpcy5jb3VudD10aGlzLmVuZENvbHVtbi10aGlzLnN0YXJ0Q29sdW1uKzEpfX1mdW5jdGlvbiBIRShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24g''@;'; put 'put ''d1FlKGMpe3ZhciBsPWZ1bmN0aW9uIENRZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVy''@;'; put 'put ''biBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9P''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgU1Fle2NvbnN0cnVjdG9yKCl7SEUodGhpcywiY291bnQiLDApLEhFKHRoaXMsInN0YXJ0Q29sdW1uIixudWxsKSxIRSh0aGlz''@;'; put 'put ''LCJlbmRDb2x1bW4iLG51bGwpLEhFKHRoaXMsInN0YXJ0UG9zaXRpb24iLG51bGwpLEhFKHRoaXMsImlzVmlzaWJsZUluVHJpbW1pbmdDb250YWluZXIiLCExKX1pbml0aWFsaXplKCl7fXByb2Nlc3MobCxhKXtjb25zdHt0b3RhbENhbGN1bGF0ZWRXaWR0aDpkLHplcm9CYXNlZFNjcm9sbE9m''@;'; put 'put ''ZnNldDpoLHZpZXdwb3J0V2lkdGg6Zixjb2x1bW5XaWR0aDp2fT1hO2Q+PWgmJmQrdjw9aCsoaD4wP2YrMTpmKSYmKG51bGw9PXRoaXMuc3RhcnRDb2x1bW4mJih0aGlzLnN0YXJ0Q29sdW1uPWwpLHRoaXMuZW5kQ29sdW1uPWwpfWZpbmFsaXplKGwpe3ZhciBhO2NvbnN0e3Njcm9sbE9mZnNl''@;'; put 'put ''dDpkLHZpZXdwb3J0V2lkdGg6aCxpbmxpbmVTdGFydE9mZnNldDpmLHplcm9CYXNlZFNjcm9sbE9mZnNldDp2LHRvdGFsQ29sdW1uczpNLG5lZWRSZXZlcnNlOkQsc3RhcnRQb3NpdGlvbnM6Wixjb2x1bW5XaWR0aDpuZX09bDtpZih0aGlzLmVuZENvbHVtbj09PU0tMSYmRClmb3IodGhpcy5z''@;'; put 'put ''dGFydENvbHVtbj10aGlzLmVuZENvbHVtbjt0aGlzLnN0YXJ0Q29sdW1uPjA7KXtjb25zdCBCZT1aW3RoaXMuZW5kQ29sdW1uXStuZS1aW3RoaXMuc3RhcnRDb2x1bW4tMV07aWYoQmU8PWgmJih0aGlzLnN0YXJ0Q29sdW1uLT0xKSxCZT49aClicmVha310aGlzLnN0YXJ0UG9zaXRpb249bnVs''@;'; put 'put ''bCE9PShhPVpbdGhpcy5zdGFydENvbHVtbl0pJiZ2b2lkIDAhPT1hP2E6bnVsbDtjb25zdCBiZT1kK2gtKHY+MD9oKzE6aCksRWU9bnVsbD09PXRoaXMuc3RhcnRDb2x1bW4/MDpsLmdldENvbHVtbldpZHRoKHRoaXMuc3RhcnRDb2x1bW4pO3RoaXMuaXNWaXNpYmxlSW5UcmltbWluZ0NvbnRh''@;'; put 'put ''aW5lcj0hKGJlPC0xKmZ8fGQ+Wi5hdCgtMSl8fC0xKmQtaD4tMSpFZSksTTx0aGlzLmVuZENvbHVtbiYmKHRoaXMuZW5kQ29sdW1uPU0tMSksbnVsbCE9PXRoaXMuc3RhcnRDb2x1bW4mJih0aGlzLmNvdW50PXRoaXMuZW5kQ29sdW1uLXRoaXMuc3RhcnRDb2x1bW4rMSl9fWZ1bmN0aW9uIHpm''@;'; put 'put ''ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gTVFlKGMpe3ZhciBsPWZ1bmN0aW9uIHhRZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7''@;'; put 'put ''aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9''@;'; put 'put ''PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgVWZle2NvbnN0cnVjdG9yKGwpe3pmZSh0aGlzLCJjYWxjdWxhdGlvblR5cGVz''@;'; put 'put ''IixbXSksemZlKHRoaXMsImNhbGN1bGF0aW9uUmVzdWx0cyIsbmV3IE1hcCksdGhpcy5jYWxjdWxhdGlvblR5cGVzPWx9X2luaXRpYWxpemUobCl7dGhpcy5jYWxjdWxhdGlvblR5cGVzLmZvckVhY2goYT0+e2xldFtkLGhdPWE7dGhpcy5jYWxjdWxhdGlvblJlc3VsdHMuc2V0KGQsaCksaC5p''@;'; put 'put ''bml0aWFsaXplKGwpfSl9X3Byb2Nlc3MobCxhKXt0aGlzLmNhbGN1bGF0aW9uVHlwZXMuZm9yRWFjaChkPT57bGV0WyxoXT1kO3JldHVybiBoLnByb2Nlc3MobCxhKX0pfV9maW5hbGl6ZShsKXt0aGlzLmNhbGN1bGF0aW9uVHlwZXMuZm9yRWFjaChhPT57bGV0WyxkXT1hO3JldHVybiBkLmZp''@;'; put 'put ''bmFsaXplKGwpfSl9Z2V0UmVzdWx0c0ZvcihsKXtyZXR1cm4gdGhpcy5jYWxjdWxhdGlvblJlc3VsdHMuZ2V0KGwpfX1mdW5jdGlvbiBIMihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRVFlKGMpe3ZhciBsPWZ1bmN0aW9uIFRRZShjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0''@;'; put 'put ''dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRp''@;'; put 'put ''dmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxl''@;'; put 'put ''OiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgQVFlIGV4dGVuZHMgVWZle2NvbnN0cnVjdG9yKGwpe2xldHtjYWxjdWxhdGlvblR5cGVzOmEsdmlld3BvcnRIZWlnaHQ6ZCxzY3JvbGxPZmZzZXQ6aCx0b3RhbFJvd3M6ZixkZWZhdWx0Um93SGVpZ2h0OnYscm93SGVpZ2h0Rm46TSxv''@;'; put 'put ''dmVycmlkZUZuOkQsaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodDpafT1sO3N1cGVyKGEpLEgyKHRoaXMsInZpZXdwb3J0SGVpZ2h0IiwwKSxIMih0aGlzLCJzY3JvbGxPZmZzZXQiLDApLEgyKHRoaXMsInplcm9CYXNlZFNjcm9sbE9mZnNldCIsMCksSDIodGhpcywidG90YWxSb3dzIiwwKSxI''@;'; put 'put ''Mih0aGlzLCJyb3dIZWlnaHRGbiIsbnVsbCksSDIodGhpcywicm93SGVpZ2h0IiwwKSxIMih0aGlzLCJvdmVycmlkZUZuIixudWxsKSxIMih0aGlzLCJob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0IiwwKSxIMih0aGlzLCJpbm5lclZpZXdwb3J0SGVpZ2h0IiwwKSxIMih0aGlzLCJ0b3RhbENh''@;'; put 'put ''bGN1bGF0ZWRIZWlnaHQiLDApLEgyKHRoaXMsInN0YXJ0UG9zaXRpb25zIixbXSksSDIodGhpcywibmVlZFJldmVyc2UiLCEwKSx0aGlzLmRlZmF1bHRIZWlnaHQ9dix0aGlzLnZpZXdwb3J0SGVpZ2h0PWQsdGhpcy5zY3JvbGxPZmZzZXQ9aCx0aGlzLnplcm9CYXNlZFNjcm9sbE9mZnNldD1N''@;'; put 'put ''YXRoLm1heChoLDApLHRoaXMudG90YWxSb3dzPWYsdGhpcy5yb3dIZWlnaHRGbj1NLHRoaXMub3ZlcnJpZGVGbj1ELHRoaXMuaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodD1aPz8wLHRoaXMuaW5uZXJWaWV3cG9ydEhlaWdodD10aGlzLnplcm9CYXNlZFNjcm9sbE9mZnNldCt0aGlzLnZpZXdw''@;'; put 'put ''b3J0SGVpZ2h0LXRoaXMuaG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCx0aGlzLmNhbGN1bGF0ZSgpfWNhbGN1bGF0ZSgpe3RoaXMuX2luaXRpYWxpemUodGhpcyk7Zm9yKGxldCBsPTA7bDx0aGlzLnRvdGFsUm93cztsKyspaWYodGhpcy5yb3dIZWlnaHQ9dGhpcy5nZXRSb3dIZWlnaHQobCks''@;'; put 'put ''dGhpcy5fcHJvY2VzcyhsLHRoaXMpLHRoaXMuc3RhcnRQb3NpdGlvbnMucHVzaCh0aGlzLnRvdGFsQ2FsY3VsYXRlZEhlaWdodCksdGhpcy50b3RhbENhbGN1bGF0ZWRIZWlnaHQrPXRoaXMucm93SGVpZ2h0LHRoaXMudG90YWxDYWxjdWxhdGVkSGVpZ2h0Pj10aGlzLmlubmVyVmlld3BvcnRI''@;'; put 'put ''ZWlnaHQpe3RoaXMubmVlZFJldmVyc2U9ITE7YnJlYWt9dGhpcy5fZmluYWxpemUodGhpcyl9Z2V0Um93SGVpZ2h0KGwpe2NvbnN0IGE9dGhpcy5yb3dIZWlnaHRGbihsKTtyZXR1cm4gaXNOYU4oYSk/dGhpcy5kZWZhdWx0SGVpZ2h0OmF9fWZ1bmN0aW9uIHQzKGMsbCxhKXtyZXR1cm4obD1m''@;'; put 'put ''dW5jdGlvbiBrUWUoYyl7dmFyIGw9ZnVuY3Rpb24gRFFlKGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9m''@;'; put 'put ''IGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShs''@;'; put 'put ''KSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBtXz01MDtjbGFzcyBJUWUgZXh0ZW5kcyBVZmV7Y29uc3RydWN0b3IobCl7bGV0e2NhbGN1bGF0aW9uVHlwZXM6''@;'; put 'put ''YSx2aWV3cG9ydFdpZHRoOmQsc2Nyb2xsT2Zmc2V0OmgsdG90YWxDb2x1bW5zOmYsY29sdW1uV2lkdGhGbjp2LG92ZXJyaWRlRm46TSxpbmxpbmVTdGFydE9mZnNldDpEfT1sO3N1cGVyKGEpLHQzKHRoaXMsInZpZXdwb3J0V2lkdGgiLDApLHQzKHRoaXMsInNjcm9sbE9mZnNldCIsMCksdDMo''@;'; put 'put ''dGhpcywiemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0IiwwKSx0Myh0aGlzLCJ0b3RhbENvbHVtbnMiLDApLHQzKHRoaXMsImNvbHVtbldpZHRoRm4iLG51bGwpLHQzKHRoaXMsImNvbHVtbldpZHRoIiwwKSx0Myh0aGlzLCJvdmVycmlkZUZuIixudWxsKSx0Myh0aGlzLCJpbmxpbmVTdGFydE9mZnNl''@;'; put 'put ''dCIsMCksdDModGhpcywidG90YWxDYWxjdWxhdGVkV2lkdGgiLDApLHQzKHRoaXMsInN0YXJ0UG9zaXRpb25zIixbXSksdDModGhpcywibmVlZFJldmVyc2UiLCEwKSx0aGlzLnZpZXdwb3J0V2lkdGg9ZCx0aGlzLnNjcm9sbE9mZnNldD1oLHRoaXMuemVyb0Jhc2VkU2Nyb2xsT2Zmc2V0PU1h''@;'; put 'put ''dGgubWF4KGgsMCksdGhpcy50b3RhbENvbHVtbnM9Zix0aGlzLmNvbHVtbldpZHRoRm49dix0aGlzLm92ZXJyaWRlRm49TSx0aGlzLmlubGluZVN0YXJ0T2Zmc2V0PUQsdGhpcy5jYWxjdWxhdGUoKX1jYWxjdWxhdGUoKXt0aGlzLl9pbml0aWFsaXplKHRoaXMpO2ZvcihsZXQgbD0wO2w8dGhp''@;'; put 'put ''cy50b3RhbENvbHVtbnM7bCsrKWlmKHRoaXMuY29sdW1uV2lkdGg9dGhpcy5nZXRDb2x1bW5XaWR0aChsKSx0aGlzLl9wcm9jZXNzKGwsdGhpcyksdGhpcy5zdGFydFBvc2l0aW9ucy5wdXNoKHRoaXMudG90YWxDYWxjdWxhdGVkV2lkdGgpLHRoaXMudG90YWxDYWxjdWxhdGVkV2lkdGgrPXRo''@;'; put 'put ''aXMuY29sdW1uV2lkdGgsdGhpcy50b3RhbENhbGN1bGF0ZWRXaWR0aD49dGhpcy56ZXJvQmFzZWRTY3JvbGxPZmZzZXQrdGhpcy52aWV3cG9ydFdpZHRoKXt0aGlzLm5lZWRSZXZlcnNlPSExO2JyZWFrfXRoaXMuX2ZpbmFsaXplKHRoaXMpfWdldENvbHVtbldpZHRoKGwpe2NvbnN0IGE9dGhp''@;'; put 'put ''cy5jb2x1bW5XaWR0aEZuKGwpO3JldHVybiBpc05hTihhKT9tXzphfX1jb25zdCBMUWU9Y2xhc3MgUlFle2NvbnN0cnVjdG9yKGwsYSxkLGgsZil7dGhpcy5kYXRhQWNjZXNzT2JqZWN0PWwsdGhpcy53b3Q9bC53b3QsdGhpcy5pbnN0YW5jZT10aGlzLndvdCx0aGlzLmRvbUJpbmRpbmdzPWEs''@;'; put 'put ''dGhpcy53dFNldHRpbmdzPWQsdGhpcy53dFRhYmxlPWYsdGhpcy5vdmVyc2l6ZWRSb3dzPVtdLHRoaXMub3ZlcnNpemVkQ29sdW1uSGVhZGVycz1bXSx0aGlzLmhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQ9e30sdGhpcy5jbGllbnRIZWlnaHQ9MCx0aGlzLnJvd0hlYWRlcldpZHRo''@;'; put 'put ''PU5hTix0aGlzLnJvd3NWaXNpYmxlQ2FsY3VsYXRvcj1udWxsLHRoaXMuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yPW51bGwsdGhpcy5yb3dzQ2FsY3VsYXRvclR5cGVzPW5ldyBNYXAoW1sicmVuZGVyZWQiLCgpPT50aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicmVuZGVyQWxsUm93cyIp''@;'; put 'put ''P25ldyBpUWU6bmV3IGNRZV0sWyJmdWxseVZpc2libGUiLCgpPT5uZXcgaFFlXSxbInBhcnRpYWxseVZpc2libGUiLCgpPT5uZXcgTmZlXV0pLHRoaXMuY29sdW1uc0NhbGN1bGF0b3JUeXBlcz1uZXcgTWFwKFtbInJlbmRlcmVkIiwoKT0+dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJl''@;'; put 'put ''bmRlckFsbENvbHVtbnMiKT9uZXcgZ1FlOm5ldyBfUWVdLFsiZnVsbHlWaXNpYmxlIiwoKT0+bmV3IFNRZV0sWyJwYXJ0aWFsbHlWaXNpYmxlIiwoKT0+bmV3IEJmZV1dKSx0aGlzLmV2ZW50TWFuYWdlcj1oLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5kb21CaW5k''@;'; put 'put ''aW5ncy5yb290V2luZG93LCJyZXNpemUiLCgpPT57dGhpcy5jbGllbnRIZWlnaHQ9dGhpcy5nZXRXb3Jrc3BhY2VIZWlnaHQoKX0pfWdldFdvcmtzcGFjZUhlaWdodCgpe2NvbnN0IGE9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnRvcE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcjtsZXQgZD0wO3Jl''@;'; put 'put ''dHVybiBkPWE9PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3c/dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDpNdShhKT4wJiZhLmNsaWVudEhlaWdodD4wP2EuY2xpZW50SGVpZ2h0OjEvMCxkfWdldFZpZXdwb3J0SGVpZ2h0KCl7''@;'; put 'put ''bGV0IGw9dGhpcy5nZXRXb3Jrc3BhY2VIZWlnaHQoKTtpZihsPT09MS8wKXJldHVybiBsO2NvbnN0IGE9dGhpcy5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKTtyZXR1cm4gYT4wJiYobC09YSksbH1nZXRXb3Jrc3BhY2VXaWR0aCgpe2NvbnN0e3Jvb3REb2N1bWVudDpsLHJvb3RXaW5kb3c6YX09''@;'; put 'put ''dGhpcy5kb21CaW5kaW5ncyxkPXRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcjtsZXQgaDtpZihkPT09YSl7Y29uc3QgZj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIik7aD10aGlzLnd0VGFibGUuaG9sZGVy''@;'; put 'put ''Lm9mZnNldFdpZHRoLHRoaXMuZ2V0Um93SGVhZGVyV2lkdGgoKSt0aGlzLnN1bUNvbHVtbldpZHRocygwLGYpPmgmJihoPWwuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKX1lbHNlIGg9ZC5jbGllbnRXaWR0aDtyZXR1cm4gaH1nZXRWaWV3cG9ydFdpZHRoKCl7Y29uc3QgbD10aGlzLmdl''@;'; put 'put ''dFdvcmtzcGFjZVdpZHRoKCk7aWYobD09PTEvMClyZXR1cm4gbDtjb25zdCBhPXRoaXMuZ2V0Um93SGVhZGVyV2lkdGgoKTtyZXR1cm4gYT4wP2wtYTpsfWhhc1ZlcnRpY2FsU2Nyb2xsKCl7aWYodGhpcy5pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKSl7Y29uc3QgZj10aGlzLmRv''@;'; put 'put ''bUJpbmRpbmdzLnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7cmV0dXJuIGYuc2Nyb2xsSGVpZ2h0PmYuY2xpZW50SGVpZ2h0fWNvbnN0e2hvbGRlcjpsLGhpZGVyOmF9PXRoaXMud3RUYWJsZSxoPWEub2Zmc2V0SGVpZ2h0O3JldHVybiBsLmNsaWVudEhlaWdodDxofHxoPnRoaXMuZ2V0''@;'; put 'put ''V29ya3NwYWNlSGVpZ2h0KCl9aGFzSG9yaXpvbnRhbFNjcm9sbCgpe2lmKHRoaXMuaXNWZXJ0aWNhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCkpe2NvbnN0IGY9dGhpcy5kb21CaW5kaW5ncy5yb290RG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O3JldHVybiBmLnNjcm9sbFdpZHRoPmYuY2xpZW50''@;'; put 'put ''V2lkdGh9Y29uc3R7aG9sZGVyOmwsaGlkZXI6YX09dGhpcy53dFRhYmxlLGg9YS5vZmZzZXRXaWR0aDtyZXR1cm4gbC5jbGllbnRXaWR0aDxofHxoPnRoaXMuZ2V0V29ya3NwYWNlV2lkdGgoKX1pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKXtyZXR1cm4gdGhpcy5kYXRhQWNjZXNz''@;'; put 'put ''T2JqZWN0LnRvcE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcj09PXRoaXMuZG9tQmluZGluZ3Mucm9vdFdpbmRvd31pc0hvcml6b250YWxseVNjcm9sbGFibGVCeVdpbmRvdygpe3JldHVybiB0aGlzLmRhdGFBY2Nlc3NPYmplY3QuaW5saW5lU3RhcnRPdmVybGF5VHJpbW1pbmdDb250YWluZXI9''@;'; put 'put ''PT10aGlzLmRvbUJpbmRpbmdzLnJvb3RXaW5kb3d9c3VtQ29sdW1uV2lkdGhzKGwsYSl7bGV0IGQ9MCxoPWw7Zm9yKDtoPGE7KWQrPXRoaXMud3RUYWJsZS5nZXRDb2x1bW5XaWR0aChoKSxoKz0xO3JldHVybiBkfWdldFdvcmtzcGFjZU9mZnNldCgpe3JldHVybiB6MCh0aGlzLnd0VGFibGUu''@;'; put 'put ''aG9sZGVyKX1nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKXtyZXR1cm4gdGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGg/aXNOYU4odGhpcy5jb2x1bW5IZWFkZXJIZWlnaHQpJiYodGhpcy5jb2x1bW5IZWFkZXJIZWlnaHQ9TXUodGhpcy53dFRhYmxlLlRI''@;'; put 'put ''RUFEKSk6dGhpcy5jb2x1bW5IZWFkZXJIZWlnaHQ9MCx0aGlzLmNvbHVtbkhlYWRlckhlaWdodH1nZXRSb3dIZWFkZXJXaWR0aCgpe2NvbnN0IGw9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInJvd0hlYWRlcldpZHRoIiksYT10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicm93SGVh''@;'; put 'put ''ZGVycyIpO2lmKGwpe3RoaXMucm93SGVhZGVyV2lkdGg9MDtmb3IobGV0IGQ9MCxoPWEubGVuZ3RoO2Q8aDtkKyspdGhpcy5yb3dIZWFkZXJXaWR0aCs9bFtkXXx8bH1pZihpc05hTih0aGlzLnJvd0hlYWRlcldpZHRoKSlpZihhLmxlbmd0aCl7bGV0IGQ9dGhpcy53dFRhYmxlLlRBQkxFLnF1''@;'; put 'put ''ZXJ5U2VsZWN0b3IoIlRIIik7dGhpcy5yb3dIZWFkZXJXaWR0aD0wO2ZvcihsZXQgaD0wLGY9YS5sZW5ndGg7aDxmO2grKylkPyh0aGlzLnJvd0hlYWRlcldpZHRoKz1hdShkKSxkPWQubmV4dFNpYmxpbmcpOnRoaXMucm93SGVhZGVyV2lkdGgrPTUwfWVsc2UgdGhpcy5yb3dIZWFkZXJXaWR0''@;'; put 'put ''aD0wO3JldHVybiB0aGlzLnJvd0hlYWRlcldpZHRoPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbk1vZGlmeVJvd0hlYWRlcldpZHRoIix0aGlzLnJvd0hlYWRlcldpZHRoKXx8dGhpcy5yb3dIZWFkZXJXaWR0aCx0aGlzLnJvd0hlYWRlcldpZHRofWNyZWF0ZVJvd3NDYWxjdWxhdG9y''@;'; put 'put ''KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOlsicmVuZGVyZWQiLCJmdWxseVZpc2libGUiLCJwYXJ0aWFsbHlWaXNpYmxlIl07Y29uc3R7d3RTZXR0aW5nczphLHd0VGFibGU6ZH09dGhpcztsZXQgZix2LGg9dGhpcy5nZXRW''@;'; put 'put ''aWV3cG9ydEhlaWdodCgpO3RoaXMucm93SGVhZGVyV2lkdGg9TmFOO2xldCBNPXRoaXMuZGF0YUFjY2Vzc09iamVjdC50b3BTY3JvbGxQb3NpdGlvbi10aGlzLmRhdGFBY2Nlc3NPYmplY3QudG9wUGFyZW50T2Zmc2V0O2NvbnN0IEQ9YS5nZXRTZXR0aW5nKCJmaXhlZFJvd3NUb3AiKSxaPWEu''@;'; put 'put ''Z2V0U2V0dGluZygiZml4ZWRSb3dzQm90dG9tIiksbmU9YS5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKTtyZXR1cm4gRCYmTT49MCYmKHY9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LnRvcE92ZXJsYXkuc3VtQ2VsbFNpemVzKDAsRCksTSs9dixoLT12KSxaJiZ0aGlzLmRhdGFBY2Nlc3NPYmplY3Qu''@;'; put 'put ''Ym90dG9tT3ZlcmxheS5jbG9uZSYmKHY9dGhpcy5kYXRhQWNjZXNzT2JqZWN0LmJvdHRvbU92ZXJsYXkuc3VtQ2VsbFNpemVzKG5lLVosbmUpLGgtPXYpLGY9ZC5ob2xkZXIuY2xpZW50SGVpZ2h0PT09ZC5ob2xkZXIub2Zmc2V0SGVpZ2h0PzA6aDAodGhpcy5kb21CaW5kaW5ncy5yb290RG9j''@;'; put 'put ''dW1lbnQpLG5ldyBBUWUoe2NhbGN1bGF0aW9uVHlwZXM6bC5tYXAoY2U9PltjZSx0aGlzLnJvd3NDYWxjdWxhdG9yVHlwZXMuZ2V0KGNlKSgpXSksdmlld3BvcnRIZWlnaHQ6aCxzY3JvbGxPZmZzZXQ6TSx0b3RhbFJvd3M6YS5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKSxkZWZhdWx0Um93SGVp''@;'; put 'put ''Z2h0OnRoaXMuaW5zdGFuY2Uuc3R5bGVzSGFuZGxlci5nZXREZWZhdWx0Um93SGVpZ2h0KCkscm93SGVpZ2h0Rm46Y2U9PmQuZ2V0Um93SGVpZ2h0KGNlKSxvdmVycmlkZUZuOmEuZ2V0U2V0dGluZ1B1cmUoInZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlIiksaG9yaXpvbnRhbFNjcm9s''@;'; put 'put ''bGJhckhlaWdodDpmfSl9Y3JlYXRlQ29sdW1uc0NhbGN1bGF0b3IoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06WyJyZW5kZXJlZCIsImZ1bGx5VmlzaWJsZSIsInBhcnRpYWxseVZpc2libGUiXTtjb25zdHt3dFNldHRpbmdz''@;'; put 'put ''OmEsd3RUYWJsZTpkfT10aGlzO2xldCBoPXRoaXMuZ2V0Vmlld3BvcnRXaWR0aCgpLGY9TWF0aC5hYnModGhpcy5kYXRhQWNjZXNzT2JqZWN0LmlubGluZVN0YXJ0U2Nyb2xsUG9zaXRpb24pLXRoaXMuZGF0YUFjY2Vzc09iamVjdC5pbmxpbmVTdGFydFBhcmVudE9mZnNldDt0aGlzLmNvbHVt''@;'; put 'put ''bkhlYWRlckhlaWdodD1OYU47Y29uc3Qgdj1hLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik7aWYodiYmZj49MCl7Y29uc3QgTT10aGlzLmRhdGFBY2Nlc3NPYmplY3QuaW5saW5lU3RhcnRPdmVybGF5LnN1bUNlbGxTaXplcygwLHYpO2YrPU0saC09TX1yZXR1cm4gZC5ob2xkZXIu''@;'; put 'put ''Y2xpZW50V2lkdGghPT1kLmhvbGRlci5vZmZzZXRXaWR0aCYmKGgtPWgwKHRoaXMuZG9tQmluZGluZ3Mucm9vdERvY3VtZW50KSksbmV3IElRZSh7Y2FsY3VsYXRpb25UeXBlczpsLm1hcChNPT5bTSx0aGlzLmNvbHVtbnNDYWxjdWxhdG9yVHlwZXMuZ2V0KE0pKCldKSx2aWV3cG9ydFdpZHRo''@;'; put 'put ''Omgsc2Nyb2xsT2Zmc2V0OmYsdG90YWxDb2x1bW5zOmEuZ2V0U2V0dGluZygidG90YWxDb2x1bW5zIiksY29sdW1uV2lkdGhGbjpNPT5kLmdldENvbHVtbldpZHRoKE0pLG92ZXJyaWRlRm46YS5nZXRTZXR0aW5nUHVyZSgidmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUiKSxpbmxp''@;'; put 'put ''bmVTdGFydE9mZnNldDp0aGlzLmRhdGFBY2Nlc3NPYmplY3QuaW5saW5lU3RhcnRQYXJlbnRPZmZzZXR9KX1jcmVhdGVDYWxjdWxhdG9ycygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07Y29uc3R7d3RTZXR0aW5nczphfT10''@;'; put 'put ''aGlzLGQ9dGhpcy5jcmVhdGVSb3dzQ2FsY3VsYXRvcigpLGg9dGhpcy5jcmVhdGVDb2x1bW5zQ2FsY3VsYXRvcigpO2lmKGwmJiFhLmdldFNldHRpbmcoInJlbmRlckFsbFJvd3MiKSl7Y29uc3QgZj1kLmdldFJlc3VsdHNGb3IoImZ1bGx5VmlzaWJsZSIpO2w9dGhpcy5hcmVBbGxQcm9wb3Nl''@;'; put 'put ''ZFZpc2libGVSb3dzQWxyZWFkeVJlbmRlcmVkKGYpfWlmKGwmJiFhLmdldFNldHRpbmcoInJlbmRlckFsbENvbHVtbnMiKSl7Y29uc3QgZj1oLmdldFJlc3VsdHNGb3IoImZ1bGx5VmlzaWJsZSIpO2w9dGhpcy5hcmVBbGxQcm9wb3NlZFZpc2libGVDb2x1bW5zQWxyZWFkeVJlbmRlcmVkKGYp''@;'; put 'put ''fXJldHVybiBsfHwodGhpcy5yb3dzUmVuZGVyQ2FsY3VsYXRvcj1kLmdldFJlc3VsdHNGb3IoInJlbmRlcmVkIiksdGhpcy5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvcj1oLmdldFJlc3VsdHNGb3IoInJlbmRlcmVkIikpLHRoaXMucm93c1Zpc2libGVDYWxjdWxhdG9yPWQuZ2V0UmVzdWx0c0Zv''@;'; put 'put ''cigiZnVsbHlWaXNpYmxlIiksdGhpcy5jb2x1bW5zVmlzaWJsZUNhbGN1bGF0b3I9aC5nZXRSZXN1bHRzRm9yKCJmdWxseVZpc2libGUiKSx0aGlzLnJvd3NQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvcj1kLmdldFJlc3VsdHNGb3IoInBhcnRpYWxseVZpc2libGUiKSx0aGlzLmNvbHVtbnNQ''@;'; put 'put ''YXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvcj1oLmdldFJlc3VsdHNGb3IoInBhcnRpYWxseVZpc2libGUiKSxsfWNyZWF0ZVZpc2libGVDYWxjdWxhdG9ycygpe2NvbnN0IGw9dGhpcy5jcmVhdGVSb3dzQ2FsY3VsYXRvcihbImZ1bGx5VmlzaWJsZSIsInBhcnRpYWxseVZpc2libGUiXSksYT10''@;'; put 'put ''aGlzLmNyZWF0ZUNvbHVtbnNDYWxjdWxhdG9yKFsiZnVsbHlWaXNpYmxlIiwicGFydGlhbGx5VmlzaWJsZSJdKTt0aGlzLnJvd3NWaXNpYmxlQ2FsY3VsYXRvcj1sLmdldFJlc3VsdHNGb3IoImZ1bGx5VmlzaWJsZSIpLHRoaXMuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yPWEuZ2V0UmVzdWx0''@;'; put 'put ''c0ZvcigiZnVsbHlWaXNpYmxlIiksdGhpcy5yb3dzUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3I9bC5nZXRSZXN1bHRzRm9yKCJwYXJ0aWFsbHlWaXNpYmxlIiksdGhpcy5jb2x1bW5zUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3I9YS5nZXRSZXN1bHRzRm9yKCJwYXJ0aWFsbHlWaXNpYmxl''@;'; put 'put ''Iil9YXJlQWxsUHJvcG9zZWRWaXNpYmxlUm93c0FscmVhZHlSZW5kZXJlZChsKXtpZighdGhpcy5yb3dzVmlzaWJsZUNhbGN1bGF0b3IpcmV0dXJuITE7bGV0e3N0YXJ0Um93OmEsZW5kUm93OmR9PWw7aWYobnVsbD09PWEmJm51bGw9PT1kKXtpZighbC5pc1Zpc2libGVJblRyaW1taW5nQ29u''@;'; put 'put ''dGFpbmVyKXJldHVybiEwO2E9dGhpcy5yb3dzUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3Iuc3RhcnRSb3csZD10aGlzLnJvd3NQYXJ0aWFsbHlWaXNpYmxlQ2FsY3VsYXRvci5lbmRSb3d9Y29uc3R7c3RhcnRSb3c6aCxlbmRSb3c6Zixyb3dTdGFydE9mZnNldDp2LHJvd0VuZE9mZnNldDpN''@;'; put 'put ''fT10aGlzLnJvd3NSZW5kZXJDYWxjdWxhdG9yLEQ9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInRvdGFsUm93cyIpLTEsWj10aGlzLnd0U2V0dGluZ3MuZ2V0U2V0dGluZygidmlld3BvcnRSb3dSZW5kZXJpbmdUaHJlc2hvbGQiKTtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihaKSYmWj4w''@;'; put 'put ''PyhhPU1hdGgubWF4KDAsYS1NYXRoLm1pbih2LFopKSxkPU1hdGgubWluKEQsZCtNYXRoLm1pbihNLFopKSk6ImF1dG8iPT09WiYmKGE9TWF0aC5tYXgoMCxhLU1hdGguY2VpbCh2LzIpKSxkPU1hdGgubWluKEQsZCtNYXRoLmNlaWwoTS8yKSkpLCEoYTxofHxhPT09aCYmYT4wfHxkPmZ8fGQ9''@;'; put 'put ''PT1mJiZkPEQpfWFyZUFsbFByb3Bvc2VkVmlzaWJsZUNvbHVtbnNBbHJlYWR5UmVuZGVyZWQobCl7aWYoIXRoaXMuY29sdW1uc1Zpc2libGVDYWxjdWxhdG9yKXJldHVybiExO2xldHtzdGFydENvbHVtbjphLGVuZENvbHVtbjpkfT1sO2lmKG51bGw9PT1hJiZudWxsPT09ZCl7aWYoIWwuaXNW''@;'; put 'put ''aXNpYmxlSW5UcmltbWluZ0NvbnRhaW5lcilyZXR1cm4hMDthPXRoaXMuY29sdW1uc1BhcnRpYWxseVZpc2libGVDYWxjdWxhdG9yLnN0YXJ0Q29sdW1uLGQ9dGhpcy5jb2x1bW5zUGFydGlhbGx5VmlzaWJsZUNhbGN1bGF0b3IuZW5kQ29sdW1ufWNvbnN0e3N0YXJ0Q29sdW1uOmgsZW5kQ29s''@;'; put 'put ''dW1uOmYsY29sdW1uU3RhcnRPZmZzZXQ6dixjb2x1bW5FbmRPZmZzZXQ6TX09dGhpcy5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvcixEPXRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJ0b3RhbENvbHVtbnMiKS0xLFo9dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoInZpZXdwb3J0Q29sdW1u''@;'; put 'put ''UmVuZGVyaW5nVGhyZXNob2xkIik7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoWikmJlo+MD8oYT1NYXRoLm1heCgwLGEtTWF0aC5taW4odixaKSksZD1NYXRoLm1pbihELGQrTWF0aC5taW4oTSxaKSkpOiJhdXRvIj09PVomJihhPU1hdGgubWF4KDAsYS1NYXRoLmNlaWwodi8yKSksZD1NYXRo''@;'; put 'put ''Lm1pbihELGQrTWF0aC5jZWlsKE0vMikpKSwhKGE8aHx8YT09PWgmJmE+MHx8ZD5mfHxkPT09ZiYmZDxEKX1yZXNldEhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQoKXtxYSh0aGlzLmhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQsKGwsYSxkKT0+e2RbYV09dm9pZCAwfSl9''@;'; put 'put ''fTtmdW5jdGlvbiBaZmUoYyxsLGEpe1dmZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gV2ZlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlv''@;'; put 'put ''biBaYyhjLGwpe3JldHVybiBjLmdldChORShjLGwpKX1mdW5jdGlvbiBZZmUoYyxsLGEpe3JldHVybiBjLnNldChORShjLGwpLGEpLGF9ZnVuY3Rpb24gTkUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDph''@;'; put 'put ''O3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfV8oOTM5MDkpO3ZhciBuMz1uZXcgV2Vha01hcCxiMT1uZXcgV2Vha01hcCxuUD1uZXcgV2Vha1NldDtjbGFzcyBQUWV7Y29uc3RydWN0b3IoKXsoZnVuY3Rpb24gT1Fl''@;'; put 'put ''KGMsbCl7V2ZlKGMsbCksbC5hZGQoYyl9KSh0aGlzLG5QKSxaZmUodGhpcyxuMyx2b2lkIDApLFpmZSh0aGlzLGIxLHZvaWQgMCl9c2V0QWN0aXZlT3ZlcmxheShsKXtyZXR1cm4gWWZlKGIxLHRoaXMsbCksdGhpc31zZXRBY3RpdmVTZWxlY3Rpb24obCl7cmV0dXJuIFlmZShuMyx0aGlzLGwp''@;'; put 'put ''LHRoaXN9c2Nhbigpe2NvbnN0IGw9WmMobjMsdGhpcykuc2V0dGluZ3Muc2VsZWN0aW9uVHlwZSxhPW5ldyBTZXQ7cmV0dXJuImFjdGl2ZS1oZWFkZXIiPT09bD8odGhpcy5zY2FuQ29sdW1uc0luSGVhZGVyc1JhbmdlKGQ9PmEuYWRkKGQpKSx0aGlzLnNjYW5Sb3dzSW5IZWFkZXJzUmFuZ2Uo''@;'; put 'put ''ZD0+YS5hZGQoZCkpKToiYXJlYSI9PT1sP3RoaXMuc2NhbkNlbGxzUmFuZ2UoZD0+YS5hZGQoZCkpOiJmb2N1cyI9PT1sPyh0aGlzLnNjYW5Db2x1bW5zSW5IZWFkZXJzUmFuZ2UoZD0+YS5hZGQoZCkpLHRoaXMuc2NhblJvd3NJbkhlYWRlcnNSYW5nZShkPT5hLmFkZChkKSksdGhpcy5zY2Fu''@;'; put 'put ''Q2VsbHNSYW5nZShkPT5hLmFkZChkKSkpOiJmaWxsIj09PWw/dGhpcy5zY2FuQ2VsbHNSYW5nZShkPT5hLmFkZChkKSk6ImhlYWRlciI9PT1sPyh0aGlzLnNjYW5Db2x1bW5zSW5IZWFkZXJzUmFuZ2UoZD0+YS5hZGQoZCkpLHRoaXMuc2NhblJvd3NJbkhlYWRlcnNSYW5nZShkPT5hLmFkZChk''@;'; put 'put ''KSkpOiJyb3ciPT09bD8odGhpcy5zY2FuUm93c0luSGVhZGVyc1JhbmdlKGQ9PmEuYWRkKGQpKSx0aGlzLnNjYW5Sb3dzSW5DZWxsc1JhbmdlKGQ9PmEuYWRkKGQpKSk6ImNvbHVtbiI9PT1sJiYodGhpcy5zY2FuQ29sdW1uc0luSGVhZGVyc1JhbmdlKGQ9PmEuYWRkKGQpKSx0aGlzLnNjYW5D''@;'; put 'put ''b2x1bW5zSW5DZWxsc1JhbmdlKGQ9PmEuYWRkKGQpKSksYX1zY2FuQ29sdW1uc0luSGVhZGVyc1JhbmdlKGwpe2NvbnN0W2EsZCxoLGZdPVpjKG4zLHRoaXMpLmdldENvcm5lcnMoKSx7d3RUYWJsZTp2fT1aYyhiMSx0aGlzKSxNPXYuZ2V0UmVuZGVyZWRDb2x1bW5zQ291bnQoKSxEPXYuZ2V0''@;'; put 'put ''Q29sdW1uSGVhZGVyc0NvdW50KCk7bGV0IFo9MDtmb3IobGV0IG5lPS12LmdldFJvd0hlYWRlcnNDb3VudCgpO25lPE07bmUrKyl7Y29uc3QgY2U9di5jb2x1bW5GaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShuZSk7aWYoIShjZTxkfHxjZT5mKSl7Zm9yKGxldCBiZT0tRDtiZTwwO2JlKyspe2lm''@;'; put 'put ''KGJlPGF8fGJlPmgpY29udGludWU7Y29uc3QgRWU9YmUrRDtsZXQgQmU9di5nZXRDb2x1bW5IZWFkZXIoY2UsRWUpO2NvbnN0IHFlPVpjKGIxLHRoaXMpLmdldFNldHRpbmcoIm9uQmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyIixjZSxFZSx7c2VsZWN0aW9uVHlwZTpaYyhuMyx0aGlz''@;'; put 'put ''KS5zZXR0aW5ncy5zZWxlY3Rpb25UeXBlLGNvbHVtbkN1cnNvcjpaLHNlbGVjdGlvbldpZHRoOmYtZCsxfSk7bnVsbCE9PXFlJiYocWUhPT1jZSYmKEJlPXYuZ2V0Q29sdW1uSGVhZGVyKHFlLEVlKSksbChCZSkpfVorPTF9fX1zY2FuUm93c0luSGVhZGVyc1JhbmdlKGwpe2NvbnN0W2EsZCxo''@;'; put 'put ''LGZdPVpjKG4zLHRoaXMpLmdldENvcm5lcnMoKSx7d3RUYWJsZTp2fT1aYyhiMSx0aGlzKSxNPXYuZ2V0UmVuZGVyZWRSb3dzQ291bnQoKSxEPXYuZ2V0Um93SGVhZGVyc0NvdW50KCk7bGV0IFo9MDtmb3IobGV0IG5lPS12LmdldENvbHVtbkhlYWRlcnNDb3VudCgpO25lPE07bmUrKyl7Y29u''@;'; put 'put ''c3QgY2U9di5yb3dGaWx0ZXIucmVuZGVyZWRUb1NvdXJjZShuZSk7aWYoIShjZTxhfHxjZT5oKSl7Zm9yKGxldCBiZT0tRDtiZTwwO2JlKyspe2lmKGJlPGR8fGJlPmYpY29udGludWU7Y29uc3QgRWU9YmUrRDtsZXQgQmU9di5nZXRSb3dIZWFkZXIoY2UsRWUpO2NvbnN0IHFlPVpjKGIxLHRo''@;'; put 'put ''aXMpLmdldFNldHRpbmcoIm9uQmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyIixjZSxFZSx7c2VsZWN0aW9uVHlwZTpaYyhuMyx0aGlzKS5zZXR0aW5ncy5zZWxlY3Rpb25UeXBlLHJvd0N1cnNvcjpaLHNlbGVjdGlvbkhlaWdodDpoLWErMX0pO251bGwhPT1xZSYmKHFlIT09Y2UmJihCZT12''@;'; put 'put ''LmdldFJvd0hlYWRlcihxZSxFZSkpLGwoQmUpKX1aKz0xfX19c2NhbkNlbGxzUmFuZ2UobCl7Y29uc3R7d3RUYWJsZTphfT1aYyhiMSx0aGlzKTtORShuUCx0aGlzLEZRZSkuY2FsbCh0aGlzLChkLGgpPT57Y29uc3QgZj1hLmdldENlbGwoWmMoYjEsdGhpcykuY3JlYXRlQ2VsbENvb3Jkcyhk''@;'; put 'put ''LGgpKSx2PVpjKGIxLHRoaXMpLmdldFNldHRpbmcoIm9uQWZ0ZXJEcmF3U2VsZWN0aW9uIixkLGgsWmMobjMsdGhpcykuc2V0dGluZ3MubGF5ZXJMZXZlbCk7InN0cmluZyI9PXR5cGVvZiB2JiZUaShmLHYpLGwoZil9KX1zY2FuUm93c0luQ2VsbHNSYW5nZShsKXtjb25zdFthLCxkXT1aYyhu''@;'; put 'put ''Myx0aGlzKS5nZXRDb3JuZXJzKCkse3d0VGFibGU6aH09WmMoYjEsdGhpcyk7TkUoblAsdGhpcyxHZmUpLmNhbGwodGhpcywoZix2KT0+e2lmKGY+PWEmJmY8PWQpe2NvbnN0IE09aC5nZXRDZWxsKFpjKGIxLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHMoZix2KSk7bChNKX19KX1zY2FuQ29sdW1u''@;'; put 'put ''c0luQ2VsbHNSYW5nZShsKXtjb25zdFssYSwsZF09WmMobjMsdGhpcykuZ2V0Q29ybmVycygpLHt3dFRhYmxlOmh9PVpjKGIxLHRoaXMpO05FKG5QLHRoaXMsR2ZlKS5jYWxsKHRoaXMsKGYsdik9PntpZih2Pj1hJiZ2PD1kKXtjb25zdCBNPWguZ2V0Q2VsbChaYyhiMSx0aGlzKS5jcmVhdGVD''@;'; put 'put ''ZWxsQ29vcmRzKGYsdikpO2woTSl9fSl9fWZ1bmN0aW9uIEZRZShjKXtsZXRbbCxhLGQsaF09WmMobjMsdGhpcykuZ2V0Q29ybmVycygpO2lmKGw8MCYmZDwwfHxhPDAmJmg8MClyZXR1cm47Y29uc3R7d3RUYWJsZTpmfT1aYyhiMSx0aGlzKSx2PWwhPT1kfHxhIT09aDtpZihhPU1hdGgubWF4''@;'; put 'put ''KGEsMCksaD1NYXRoLm1heChoLDApLGw9TWF0aC5tYXgobCwwKSxkPU1hdGgubWF4KGQsMCksdil7aWYoYT1NYXRoLm1heChhLGYuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpKSxoPU1hdGgubWluKGgsZi5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKSksbD1NYXRoLm1heChsLGYuZ2V0Rmlyc3RS''@;'; put 'put ''ZW5kZXJlZFJvdygpKSxkPU1hdGgubWluKGQsZi5nZXRMYXN0UmVuZGVyZWRSb3coKSksaDxhfHxkPGwpcmV0dXJufWVsc2UgaWYoIWZnKGYuZ2V0Q2VsbChaYyhiMSx0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKGwsYSkpKSlyZXR1cm47Zm9yKGxldCBNPWw7TTw9ZDtNKz0xKWZvcihsZXQgRD1h''@;'; put 'put ''O0Q8PWg7RCs9MSljKE0sRCl9ZnVuY3Rpb24gR2ZlKGMpe2NvbnN0e3d0VGFibGU6bH09WmMoYjEsdGhpcyksYT1sLmdldFJlbmRlcmVkUm93c0NvdW50KCksZD1sLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCk7Zm9yKGxldCBoPTA7aDxhO2grPTEpe2NvbnN0IGY9bC5yb3dGaWx0ZXIucmVu''@;'; put 'put ''ZGVyZWRUb1NvdXJjZShoKTtmb3IobGV0IHY9MDt2PGQ7dis9MSljKGYsbC5jb2x1bW5GaWx0ZXIucmVuZGVyZWRUb1NvdXJjZSh2KSl9fWNvbnN0ICRmZT1jbGFzcyBIUWV7Y29uc3RydWN0b3IobCxhKXthJiYodGhpcy5ldmVudE1hbmFnZXI9bC5ldmVudE1hbmFnZXIsdGhpcy5pbnN0YW5j''@;'; put 'put ''ZT1sLHRoaXMud290PWwsdGhpcy5zZXR0aW5ncz1hLHRoaXMubW91c2VEb3duPSExLHRoaXMubWFpbj1udWxsLHRoaXMudG9wPW51bGwsdGhpcy5ib3R0b209bnVsbCx0aGlzLnN0YXJ0PW51bGwsdGhpcy5lbmQ9bnVsbCx0aGlzLnRvcFN0eWxlPW51bGwsdGhpcy5ib3R0b21TdHlsZT1udWxs''@;'; put 'put ''LHRoaXMuc3RhcnRTdHlsZT1udWxsLHRoaXMuZW5kU3R5bGU9bnVsbCx0aGlzLmNvcm5lckRlZmF1bHRTdHlsZT1vSyh0aGlzLmluc3RhbmNlKSx0aGlzLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0PS1NYXRoLmNlaWwocGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUud2lkdGgsMTAp''@;'; put 'put ''LzIpLHRoaXMuY29ybmVyPW51bGwsdGhpcy5jb3JuZXJTdHlsZT1udWxsLHRoaXMuY3JlYXRlQm9yZGVycyhhKSx0aGlzLnJlZ2lzdGVyTGlzdGVuZXJzKCkpfXJlZ2lzdGVyTGlzdGVuZXJzKCl7Y29uc3QgbD10aGlzLndvdC5yb290RG9jdW1lbnQuYm9keTt0aGlzLmV2ZW50TWFuYWdlci5h''@;'; put 'put ''ZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlZG93biIsKCk9PnRoaXMub25Nb3VzZURvd24oKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZXVwIiwoKT0+dGhpcy5vbk1vdXNlVXAoKSk7Zm9yKGxldCBhPTAsZD10aGlzLm1haW4uY2hpbGROb2Rlcy5sZW5ndGg7''@;'; put 'put ''YTxkO2ErKyl0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMubWFpbi5jaGlsZE5vZGVzW2FdLCJtb3VzZWVudGVyIixmPT50aGlzLm9uTW91c2VFbnRlcihmLHRoaXMubWFpbi5jaGlsZE5vZGVzW2FdKSl9b25Nb3VzZURvd24oKXt0aGlzLm1vdXNlRG93bj0hMH1vbk1v''@;'; put 'put ''dXNlVXAoKXt0aGlzLm1vdXNlRG93bj0hMX1vbk1vdXNlRW50ZXIobCxhKXtpZighdGhpcy5tb3VzZURvd258fCF0aGlzLndvdC5nZXRTZXR0aW5nKCJoaWRlQm9yZGVyT25Nb3VzZURvd25PdmVyIikpcmV0dXJuO2wucHJldmVudERlZmF1bHQoKSxSMihsKTtjb25zdCBkPXRoaXMsaD10aGlz''@;'; put 'put ''LndvdC5yb290RG9jdW1lbnQuYm9keSxmPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7YS5zdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGgsIm1vdXNlbW92ZSIsZnVuY3Rpb24gTShEKXsoZnVuY3Rpb24gdihEKXtpZihELmNsaWVudFk8''@;'; put 'put ''TWF0aC5mbG9vcihmLnRvcCl8fEQuY2xpZW50WT5NYXRoLmNlaWwoZi50b3ArZi5oZWlnaHQpfHxELmNsaWVudFg8TWF0aC5mbG9vcihmLmxlZnQpfHxELmNsaWVudFg+TWF0aC5jZWlsKGYubGVmdCtmLndpZHRoKSlyZXR1cm4hMH0pKEQpJiYoZC5ldmVudE1hbmFnZXIucmVtb3ZlRXZlbnRM''@;'; put 'put ''aXN0ZW5lcihoLCJtb3VzZW1vdmUiLE0pLGEuc3R5bGUuZGlzcGxheT0iYmxvY2siKX0pfWNyZWF0ZUJvcmRlcnMobCl7Y29uc3R7cm9vdERvY3VtZW50OmF9PXRoaXMud290O3RoaXMubWFpbj1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2NvbnN0IGQ9WyJ0b3AiLCJzdGFydCIsImJvdHRvbSIs''@;'; put 'put ''ImVuZCIsImNvcm5lciJdO2xldCBoPXRoaXMubWFpbi5zdHlsZTtoLnBvc2l0aW9uPSJhYnNvbHV0ZSIsaC50b3A9MCxoLmxlZnQ9MDtmb3IobGV0IE09MDtNPDU7TSsrKXtjb25zdCBEPWRbTV0sWj1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpO1ouY2xhc3NOYW1lPWB3dEJvcmRlciAke3RoaXMu''@;'; put 'put ''c2V0dGluZ3MuY2xhc3NOYW1lfHwiIn1gLHRoaXMuc2V0dGluZ3NbRF0mJnRoaXMuc2V0dGluZ3NbRF0uaGlkZSYmKFouY2xhc3NOYW1lKz0iIGhpZGRlbiIpLGg9Wi5zdHlsZSxoLmJhY2tncm91bmRDb2xvcj10aGlzLnNldHRpbmdzW0RdJiZ0aGlzLnNldHRpbmdzW0RdLmNvbG9yP3RoaXMu''@;'; put 'put ''c2V0dGluZ3NbRF0uY29sb3I6bC5ib3JkZXIuY29sb3IsaC5oZWlnaHQ9dGhpcy5zZXR0aW5nc1tEXSYmdGhpcy5zZXR0aW5nc1tEXS53aWR0aD9gJHt0aGlzLnNldHRpbmdzW0RdLndpZHRofXB4YDpgJHtsLmJvcmRlci53aWR0aH1weGAsaC53aWR0aD10aGlzLnNldHRpbmdzW0RdJiZ0aGlz''@;'; put 'put ''LnNldHRpbmdzW0RdLndpZHRoP2Ake3RoaXMuc2V0dGluZ3NbRF0ud2lkdGh9cHhgOmAke2wuYm9yZGVyLndpZHRofXB4YCx0aGlzLm1haW4uYXBwZW5kQ2hpbGQoWil9dGhpcy50b3A9dGhpcy5tYWluLmNoaWxkTm9kZXNbMF0sdGhpcy5zdGFydD10aGlzLm1haW4uY2hpbGROb2Rlc1sxXSx0''@;'; put 'put ''aGlzLmJvdHRvbT10aGlzLm1haW4uY2hpbGROb2Rlc1syXSx0aGlzLmVuZD10aGlzLm1haW4uY2hpbGROb2Rlc1szXSx0aGlzLnRvcFN0eWxlPXRoaXMudG9wLnN0eWxlLHRoaXMuc3RhcnRTdHlsZT10aGlzLnN0YXJ0LnN0eWxlLHRoaXMuYm90dG9tU3R5bGU9dGhpcy5ib3R0b20uc3R5bGUs''@;'; put 'put ''dGhpcy5lbmRTdHlsZT10aGlzLmVuZC5zdHlsZSx0aGlzLmNvcm5lcj10aGlzLm1haW4uY2hpbGROb2Rlc1s0XSx0aGlzLmNvcm5lci5jbGFzc05hbWUrPSIgY29ybmVyIix0aGlzLmNvcm5lclN0eWxlPXRoaXMuY29ybmVyLnN0eWxlLHRoaXMuY29ybmVyU3R5bGUud2lkdGg9YCR7dGhpcy5j''@;'; put 'put ''b3JuZXJEZWZhdWx0U3R5bGUud2lkdGh9cHhgLHRoaXMuY29ybmVyU3R5bGUuaGVpZ2h0PWAke3RoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmhlaWdodH1weGAsdGhpcy5jb3JuZXJTdHlsZS5ib3JkZXI9W2Ake3RoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlcldpZHRofXB4YCx0aGlzLmNv''@;'; put 'put ''cm5lckRlZmF1bHRTdHlsZS5ib3JkZXJTdHlsZSx0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJDb2xvcl0uam9pbigiICIpLFNwKCkmJnRoaXMuaW5zdGFuY2UuZ2V0U2V0dGluZygiaXNEYXRhVmlld0luc3RhbmNlIikmJnRoaXMuY3JlYXRlTXVsdGlwbGVTZWxlY3RvckhhbmRsZXMo''@;'; put 'put ''KSx0aGlzLmRpc2FwcGVhcigpO2NvbnN0e3d0VGFibGU6Zn09dGhpcy53b3Q7bGV0IHY9Zi5ib3JkZXJzSG9sZGVyO3Z8fCh2PWEuY3JlYXRlRWxlbWVudCgiZGl2Iiksdi5jbGFzc05hbWU9Imh0Qm9yZGVycyIsZi5ib3JkZXJzSG9sZGVyPXYsZi5zcHJlYWRlci5hcHBlbmRDaGlsZCh2KSks''@;'; put 'put ''di5hcHBlbmRDaGlsZCh0aGlzLm1haW4pfWNyZWF0ZU11bHRpcGxlU2VsZWN0b3JIYW5kbGVzKCl7Y29uc3R7cm9vdERvY3VtZW50Omwsc3R5bGVzSGFuZGxlcjphfT10aGlzLndvdCxkPWEuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1tb2JpbGUtaGFuZGxlLXNpemUiKSxoPWEuZ2V0Q1NT''@;'; put 'put ''VmFyaWFibGVWYWx1ZSgiY2VsbC1tb2JpbGUtaGFuZGxlLWJvcmRlci1yYWRpdXMiKSxmPWEuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1tb2JpbGUtaGFuZGxlLWJhY2tncm91bmQtY29sb3IiKSx2PWEuZ2V0Q1NTVmFyaWFibGVWYWx1ZSgiY2VsbC1tb2JpbGUtaGFuZGxlLWJvcmRlci13''@;'; put 'put ''aWR0aCIpLE09YS5nZXRDU1NWYXJpYWJsZVZhbHVlKCJjZWxsLW1vYmlsZS1oYW5kbGUtYm9yZGVyLWNvbG9yIik7dGhpcy5zZWxlY3Rpb25IYW5kbGVzPXt0b3A6bC5jcmVhdGVFbGVtZW50KCJESVYiKSx0b3BIaXRBcmVhOmwuY3JlYXRlRWxlbWVudCgiRElWIiksYm90dG9tOmwuY3JlYXRl''@;'; put 'put ''RWxlbWVudCgiRElWIiksYm90dG9tSGl0QXJlYTpsLmNyZWF0ZUVsZW1lbnQoIkRJViIpfSx0aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9wLmNsYXNzTmFtZT0idG9wU2VsZWN0aW9uSGFuZGxlIHRvcExlZnRTZWxlY3Rpb25IYW5kbGUiLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy50b3BIaXRBcmVh''@;'; put 'put ''LmNsYXNzTmFtZT0idG9wU2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEgdG9wTGVmdFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tLmNsYXNzTmFtZT0iYm90dG9tU2VsZWN0aW9uSGFuZGxlIGJvdHRvbVJpZ2h0U2VsZWN0aW9uSGFuZGxlIix0aGlz''@;'; put 'put ''LnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tSGl0QXJlYS5jbGFzc05hbWU9ImJvdHRvbVNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIGJvdHRvbVJpZ2h0U2VsZWN0aW9uSGFuZGxlLUhpdEFyZWEiLHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXM9e3RvcDp0aGlzLnNlbGVjdGlvbkhhbmRsZXMu''@;'; put 'put ''dG9wLnN0eWxlLHRvcEhpdEFyZWE6dGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcEhpdEFyZWEuc3R5bGUsYm90dG9tOnRoaXMuc2VsZWN0aW9uSGFuZGxlcy5ib3R0b20uc3R5bGUsYm90dG9tSGl0QXJlYTp0aGlzLnNlbGVjdGlvbkhhbmRsZXMuYm90dG9tSGl0QXJlYS5zdHlsZX0scWEoe3Bv''@;'; put 'put ''c2l0aW9uOiJhYnNvbHV0ZSIsaGVpZ2h0OiI0MHB4Iix3aWR0aDoiNDBweCIsImJvcmRlci1yYWRpdXMiOmAke3BhcnNlSW50KDQwLzEuNSwxMCl9cHhgfSwoYmUsRWUpPT57dGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy5ib3R0b21IaXRBcmVhW0VlXT1iZSx0aGlzLnNlbGVjdGlvbkhh''@;'; put 'put ''bmRsZXMuc3R5bGVzLnRvcEhpdEFyZWFbRWVdPWJlfSkscWEoYS5pc0NsYXNzaWNUaGVtZSgpP3twb3NpdGlvbjoiYWJzb2x1dGUiLGhlaWdodDoiMTBweCIsd2lkdGg6IjEwcHgiLCJib3JkZXItcmFkaXVzIjpgJHtwYXJzZUludCgxMC8xLjUsMTApfXB4YCxiYWNrZ3JvdW5kOiIjRjVGNUZG''@;'; put 'put ''Iixib3JkZXI6IjFweCBzb2xpZCAjNDI4NWM4In06e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsaGVpZ2h0OmAke2R9cHhgLHdpZHRoOmAke2R9cHhgLCJib3JkZXItcmFkaXVzIjpgJHtofXB4YCxiYWNrZ3JvdW5kOmAke2Z9YCxib3JkZXI6YCR7dn1weCBzb2xpZCAke019YH0sKGJlLEVlKT0+e3Ro''@;'; put 'put ''aXMuc2VsZWN0aW9uSGFuZGxlcy5zdHlsZXMuYm90dG9tW0VlXT1iZSx0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLnRvcFtFZV09YmV9KSx0aGlzLm1haW4uYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3Rpb25IYW5kbGVzLnRvcCksdGhpcy5tYWluLmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0''@;'; put 'put ''aW9uSGFuZGxlcy5ib3R0b20pLHRoaXMubWFpbi5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdGlvbkhhbmRsZXMudG9wSGl0QXJlYSksdGhpcy5tYWluLmFwcGVuZENoaWxkKHRoaXMuc2VsZWN0aW9uSGFuZGxlcy5ib3R0b21IaXRBcmVhKX1pc1BhcnRSYW5nZShsLGEpe2NvbnN0IGQ9dGhpcy53''@;'; put 'put ''b3Quc2VsZWN0aW9uTWFuYWdlci5nZXRBcmVhU2VsZWN0aW9uKCk7cmV0dXJuISghZC5jZWxsUmFuZ2V8fGw9PT1kLmNlbGxSYW5nZS50by5yb3cmJmE9PT1kLmNlbGxSYW5nZS50by5jb2wpfXVwZGF0ZU11bHRpcGxlU2VsZWN0aW9uSGFuZGxlc1Bvc2l0aW9uKGwsYSxkLGgsZix2KXtjb25z''@;'; put 'put ''dCBEPXRoaXMud290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygicnRsTW9kZSIpPyJyaWdodCI6ImxlZnQiLHt0b3A6Wix0b3BIaXRBcmVhOm5lLGJvdHRvbTpjZSxib3R0b21IaXRBcmVhOmJlfT10aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLEVlPXBhcnNlSW50KFouYm9yZGVyV2lkdGgs''@;'; put 'put ''MTApLEJlPXBhcnNlSW50KFoud2lkdGgsMTApLHFlPXBhcnNlSW50KG5lLndpZHRoLDEwKSxudD10aGlzLndvdC53dFRhYmxlLmdldFdpZHRoKCksbHQ9dGhpcy53b3Qud3RUYWJsZS5nZXRIZWlnaHQoKTtaLnRvcD1gJHtwYXJzZUludChkLUJlLTEsMTApfXB4YCxaW0RdPWAke3BhcnNlSW50''@;'; put 'put ''KGgtQmUtMSwxMCl9cHhgLG5lLnRvcD1gJHtwYXJzZUludChkLXFlLzQqMywxMCl9cHhgLG5lW0RdPWAke3BhcnNlSW50KGgtcWUvNCozLDEwKX1weGA7Y29uc3QgbXQ9TWF0aC5taW4ocGFyc2VJbnQoaCtmLDEwKSxudC1CZS0yKkVlKSxKdD1NYXRoLm1pbihwYXJzZUludChoK2YtcWUvNCwx''@;'; put 'put ''MCksbnQtcWUtMipFZSk7Y2VbRF09YCR7bXR9cHhgLGJlW0RdPWAke0p0fXB4YDtjb25zdCB5bj1NYXRoLm1pbihwYXJzZUludChkK3YsMTApLGx0LUJlLTIqRWUpLENuPU1hdGgubWluKHBhcnNlSW50KGQrdi1xZS80LDEwKSxsdC1xZS0yKkVlKTtjZS50b3A9YCR7eW59cHhgLGJlLnRvcD1g''@;'; put 'put ''JHtDbn1weGAsdGhpcy5zZXR0aW5ncy5ib3JkZXIuY29ybmVyVmlzaWJsZSYmdGhpcy5zZXR0aW5ncy5ib3JkZXIuY29ybmVyVmlzaWJsZSgpPyhaLmRpc3BsYXk9ImJsb2NrIixuZS5kaXNwbGF5PSJibG9jayIsdGhpcy5pc1BhcnRSYW5nZShsLGEpPyhjZS5kaXNwbGF5PSJub25lIixiZS5k''@;'; put 'put ''aXNwbGF5PSJub25lIik6KGNlLmRpc3BsYXk9ImJsb2NrIixiZS5kaXNwbGF5PSJibG9jayIpKTooWi5kaXNwbGF5PSJub25lIixjZS5kaXNwbGF5PSJub25lIixuZS5kaXNwbGF5PSJub25lIixiZS5kaXNwbGF5PSJub25lIiksbD09PXRoaXMud290Lnd0U2V0dGluZ3MuZ2V0U2V0dGluZygi''@;'; put 'put ''Zml4ZWRSb3dzVG9wIil8fGE9PT10aGlzLndvdC53dFNldHRpbmdzLmdldFNldHRpbmcoImZpeGVkQ29sdW1uc1N0YXJ0Iik/KFouekluZGV4PSI5OTk5IixuZS56SW5kZXg9Ijk5OTkiKTooWi56SW5kZXg9IiIsbmUuekluZGV4PSIiKX1hcHBlYXIobCl7aWYodGhpcy5kaXNhYmxlZClyZXR1''@;'; put 'put ''cm47bGV0W2EsZCxoLGZdPWw7aWYoYTwwJiZoPDB8fGQ8MCYmZjwwKXJldHVybiB2b2lkIHRoaXMuZGlzYXBwZWFyKCk7Y29uc3R7d3RUYWJsZTp2LHJvb3REb2N1bWVudDpNLHJvb3RXaW5kb3c6RH09dGhpcy53b3QsWj1hIT09aHx8ZCE9PWYsbmU9di5nZXRGaXJzdFJlbmRlcmVkUm93KCks''@;'; put 'put ''Y2U9di5nZXRMYXN0UmVuZGVyZWRSb3coKSxiZT12LmdldEZpcnN0UmVuZGVyZWRDb2x1bW4oKSxFZT12LmdldExhc3RSZW5kZXJlZENvbHVtbigpO2xldCBCZTtpZihaKXtpZihkPU1hdGgubWF4KGQsYmUpLGY9TWF0aC5taW4oZixFZSksYT1NYXRoLm1heChhLG5lKSxoPU1hdGgubWluKGgs''@;'; put 'put ''Y2UpLGY8ZHx8aDxhKXJldHVybiB2b2lkIHRoaXMuZGlzYXBwZWFyKCk7QmU9di5nZXRDZWxsKHRoaXMud290LmNyZWF0ZUNlbGxDb29yZHMoYSxkKSl9ZWxzZSBpZihCZT12LmdldENlbGwodGhpcy53b3QuY3JlYXRlQ2VsbENvb3JkcyhhLGQpKSwhZmcoQmUpKXJldHVybiB2b2lkIHRoaXMu''@;'; put 'put ''ZGlzYXBwZWFyKCk7Y29uc3QgcWU9Wj92LmdldENlbGwodGhpcy53b3QuY3JlYXRlQ2VsbENvb3JkcyhoLGYpKTpCZSxudD16MChCZSksbHQ9Wj96MChxZSk6bnQsbXQ9ejAodi5UQUJMRSksSnQ9bnQudG9wLHluPW50LmxlZnQsQ249dGhpcy53b3Qud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJy''@;'; put 'put ''dGxNb2RlIik7bGV0IHRuPTAseG49MDtpZihDbil7Y29uc3QgSXI9YXUodi5UQUJMRSksJHI9YXUoQmUpO3huPXluKyRyLWx0LmxlZnQsdG49RC5pbm5lcldpZHRoLXluLSRyLShELmlubmVyV2lkdGgtbXQubGVmdC1JciktMX1lbHNlIHhuPWx0LmxlZnQrYXUocWUpLXluLHRuPXluLW10Lmxl''@;'; put 'put ''ZnQtMTtpZih0aGlzLmlzRW50aXJlQ29sdW1uU2VsZWN0ZWQoYSxoKSl7Y29uc3QgJHI9dGhpcy5nZXREaW1lbnNpb25zRnJvbUhlYWRlcigiY29sdW1ucyIsZCxmLGEsbXQpO2xldCB3aT1udWxsOyRyJiYoW3dpLHRuLHhuXT0kciksd2kmJihCZT13aSl9bGV0IFFuPUp0LW10LnRvcC0xLHlp''@;'; put 'put ''PWx0LnRvcCtNdShxZSktSnQ7aWYodGhpcy5pc0VudGlyZVJvd1NlbGVjdGVkKGQsZikpe2NvbnN0ICRyPXRoaXMuZ2V0RGltZW5zaW9uc0Zyb21IZWFkZXIoInJvd3MiLGEsaCxkLG10KTtsZXQgd2k9bnVsbDskciYmKFt3aSxRbix5aV09JHIpLHdpJiYoQmU9d2kpfWNvbnN0IHlyPUQuZ2V0''@;'; put 'put ''Q29tcHV0ZWRTdHlsZShCZSk7cGFyc2VJbnQoeXIuYm9yZGVyVG9wV2lkdGgsMTApPjAmJihRbis9MSx5aT15aT4wP3lpLTE6MCkscGFyc2VJbnQoeXJbQ24/ImJvcmRlclJpZ2h0V2lkdGgiOiJib3JkZXJMZWZ0V2lkdGgiXSwxMCk+MCYmKHRuKz0xLHhuPXhuPjA/eG4tMTowKTtjb25zdCBH''@;'; put 'put ''bj1Dbj8icmlnaHQiOiJsZWZ0Ijt0aGlzLnRvcFN0eWxlLnRvcD1gJHtRbn1weGAsdGhpcy50b3BTdHlsZVtHbl09YCR7dG59cHhgLHRoaXMudG9wU3R5bGUud2lkdGg9YCR7eG59cHhgLHRoaXMudG9wU3R5bGUuZGlzcGxheT0iYmxvY2siLHRoaXMuc3RhcnRTdHlsZS50b3A9YCR7UW59cHhg''@;'; put 'put ''LHRoaXMuc3RhcnRTdHlsZVtHbl09YCR7dG59cHhgLHRoaXMuc3RhcnRTdHlsZS5oZWlnaHQ9YCR7eWl9cHhgLHRoaXMuc3RhcnRTdHlsZS5kaXNwbGF5PSJibG9jayI7Y29uc3QgaWk9TWF0aC5mbG9vcih0aGlzLnNldHRpbmdzLmJvcmRlci53aWR0aC8yKTt0aGlzLmJvdHRvbVN0eWxlLnRv''@;'; put 'put ''cD1Rbit5aS1paSsicHgiLHRoaXMuYm90dG9tU3R5bGVbR25dPWAke3RufXB4YCx0aGlzLmJvdHRvbVN0eWxlLndpZHRoPWAke3hufXB4YCx0aGlzLmJvdHRvbVN0eWxlLmRpc3BsYXk9ImJsb2NrIix0aGlzLmVuZFN0eWxlLnRvcD1gJHtRbn1weGAsdGhpcy5lbmRTdHlsZVtHbl09dG4reG4t''@;'; put 'put ''aWkrInB4Iix0aGlzLmVuZFN0eWxlLmhlaWdodD1gJHt5aSsxfXB4YCx0aGlzLmVuZFN0eWxlLmRpc3BsYXk9ImJsb2NrIjtsZXQgX2k9dGhpcy5zZXR0aW5ncy5ib3JkZXIuY29ybmVyVmlzaWJsZTtfaT0iZnVuY3Rpb24iPT10eXBlb2YgX2k/X2kodGhpcy5zZXR0aW5ncy5sYXllckxldmVs''@;'; put 'put ''KTpfaTtjb25zdCBQbj10aGlzLndvdC5nZXRTZXR0aW5nKCJvbk1vZGlmeUdldENlbGxDb29yZHMiLGgsZiwhMSwicmVuZGVyIik7bGV0W2pyLFhuXT1baCxmXTtpZihQbiYmQXJyYXkuaXNBcnJheShQbikmJihbLCxqcixYbl09UG4pLFNwKCl8fCFfaXx8dGhpcy5pc1BhcnRSYW5nZShqcixY''@;'; put 'put ''bikpdGhpcy5jb3JuZXJTdHlsZS5kaXNwbGF5PSJub25lIjtlbHNle3RoaXMuY29ybmVyU3R5bGUudG9wPVFuK3lpK3RoaXMuY29ybmVyQ2VudGVyUG9pbnRPZmZzZXQtdGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVyV2lkdGgrInB4Iix0aGlzLmNvcm5lclN0eWxlW0duXT10bit4bit0''@;'; put 'put ''aGlzLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0LXRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlcldpZHRoKyJweCIsdGhpcy5jb3JuZXJTdHlsZS5ib3JkZXJSaWdodFdpZHRoPWAke3RoaXMuY29ybmVyRGVmYXVsdFN0eWxlLmJvcmRlcldpZHRofXB4YCx0aGlzLmNvcm5lclN0eWxlLmJv''@;'; put 'put ''cmRlckxlZnRXaWR0aD1gJHt0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJXaWR0aH1weGAsdGhpcy5jb3JuZXJTdHlsZS5ib3JkZXJCb3R0b21XaWR0aD1gJHt0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS5ib3JkZXJXaWR0aH1weGAsdGhpcy5jb3JuZXJTdHlsZS53aWR0aD10aGlzLmNv''@;'; put 'put ''cm5lckRlZmF1bHRTdHlsZS53aWR0aCx0aGlzLmNvcm5lclN0eWxlLmRpc3BsYXk9Im5vbmUiO2xldCBJcj10Xyh2LlRBQkxFKTtjb25zdCAkcj1Jcj09PUQ7JHImJihJcj1NLmRvY3VtZW50RWxlbWVudCk7Y29uc3Qgd2k9cGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuYm9yZGVy''@;'; put 'put ''V2lkdGgsMTApLTEsUWk9TWF0aC5jZWlsKHBhcnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLndpZHRoLDEwKS8yKSx2dD1NYXRoLmNlaWwocGFyc2VJbnQodGhpcy5jb3JuZXJEZWZhdWx0U3R5bGUuaGVpZ2h0LDEwKS8yKTtpZihmPT09dGhpcy53b3QuZ2V0U2V0dGluZygidG90YWxD''@;'; put 'put ''b2x1bW5zIiktMSl7Y29uc3QgTnQ9JHI/cWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDpxZS5vZmZzZXRMZWZ0O2xldCBXdD0hMSxnbj0wO0NuPyhnbj1OdC1wYXJzZUludCh0aGlzLmNvcm5lckRlZmF1bHRTdHlsZS53aWR0aCwxMCkvMixXdD1nbjwwKTooZ249TnQrYXUocWUpK3Bh''@;'; put 'put ''cnNlSW50KHRoaXMuY29ybmVyRGVmYXVsdFN0eWxlLndpZHRoLDEwKS8yLFd0PWduPj1jJChJcikpLFd0JiYodGhpcy5jb3JuZXJTdHlsZVtHbl09YCR7TWF0aC5mbG9vcih0bit4bit0aGlzLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0LVFpLXdpKX1weGAsdGhpcy5jb3JuZXJTdHlsZVtDbj8i''@;'; put 'put ''Ym9yZGVyTGVmdFdpZHRoIjoiYm9yZGVyUmlnaHRXaWR0aCJdPTApfWlmKGg9PT10aGlzLndvdC5nZXRTZXR0aW5nKCJ0b3RhbFJvd3MiKS0xKXtjb25zdCBnbj0oJHI/cWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wOnFlLm9mZnNldFRvcCkrTXUocWUpK3BhcnNlSW50KHRoaXMuY29y''@;'; put 'put ''bmVyRGVmYXVsdFN0eWxlLmhlaWdodCwxMCkvMj49bl8oSXIpLCRuPXRoaXMud290LnN0eWxlc0hhbmRsZXIuaXNDbGFzc2ljVGhlbWUoKTtpZihnbil7Y29uc3QgaHI9TWF0aC5mbG9vcihRbit5aSt0aGlzLmNvcm5lckNlbnRlclBvaW50T2Zmc2V0LXZ0LXdpKTskbj8odGhpcy5jb3JuZXJT''@;'; put 'put ''dHlsZS50b3A9YCR7aHJ9cHhgLHRoaXMuY29ybmVyU3R5bGUuYm9yZGVyQm90dG9tV2lkdGg9MCk6dGhpcy5jb3JuZXJTdHlsZS50b3A9aHItMSsicHgifX10aGlzLmNvcm5lclN0eWxlLmRpc3BsYXk9ImJsb2NrIn1TcCgpJiZ0aGlzLmluc3RhbmNlLmdldFNldHRpbmcoImlzRGF0YVZpZXdJ''@;'; put 'put ''bnN0YW5jZSIpJiZ0aGlzLnVwZGF0ZU11bHRpcGxlU2VsZWN0aW9uSGFuZGxlc1Bvc2l0aW9uKGgsZixRbix0bix4bix5aSl9aXNFbnRpcmVDb2x1bW5TZWxlY3RlZChsLGEpe3JldHVybiBsPT09dGhpcy53b3Qud3RUYWJsZS5nZXRGaXJzdFJlbmRlcmVkUm93KCkmJmE9PT10aGlzLndvdC53''@;'; put 'put ''dFRhYmxlLmdldExhc3RSZW5kZXJlZFJvdygpfWlzRW50aXJlUm93U2VsZWN0ZWQobCxhKXtyZXR1cm4gbD09PXRoaXMud290Lnd0VGFibGUuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpJiZhPT09dGhpcy53b3Qud3RUYWJsZS5nZXRMYXN0UmVuZGVyZWRDb2x1bW4oKX1nZXREaW1lbnNpb25z''@;'; put 'put ''RnJvbUhlYWRlcihsLGEsZCxoLGYpe2NvbnN0e3d0VGFibGU6dn09dGhpcy53b3QsTT12Lnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZTtsZXQgRD1udWxsLFo9bnVsbCxuZT1udWxsLGNlPW51bGwsYmU9bnVsbCxFZT1udWxsLEJlPW51bGwscWU9bnVsbDtzd2l0Y2gobCl7Y2FzZSJyb3dzIjpE''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuIHYuZ2V0Um93SGVhZGVyKC4uLmFyZ3VtZW50cyl9LFo9ZnVuY3Rpb24oKXtyZXR1cm4gTXUoLi4uYXJndW1lbnRzKX0sbmU9Imh0X19zZWxlY3Rpb24tLXJvd3MiLEVlPSJ0b3AiO2JyZWFrO2Nhc2UiY29sdW1ucyI6RD1mdW5jdGlvbigpe3JldHVybiB2Lmdl''@;'; put 'put ''dENvbHVtbkhlYWRlciguLi5hcmd1bWVudHMpfSxaPWZ1bmN0aW9uKCl7cmV0dXJuIGF1KC4uLmFyZ3VtZW50cyl9LG5lPSJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIixFZT0ibGVmdCJ9aWYoTS5jbGFzc0xpc3QuY29udGFpbnMobmUpKXtjb25zdCBudD10aGlzLndvdC5nZXRTZXR0aW5nKCJj''@;'; put 'put ''b2x1bW5IZWFkZXJzIikubGVuZ3RoO2lmKEJlPUQoYSxudC1oKSxxZT1EKGQsbnQtaCksIUJlfHwhcWUpcmV0dXJuITE7Y29uc3QgbHQ9ejAoQmUpLG10PXowKHFlKTtyZXR1cm4gQmUmJnFlJiYoY2U9bHRbRWVdLWZbRWVdLTEsYmU9bXRbRWVdK1oocWUpLWx0W0VlXSksW0JlLGNlLGJlXX1y''@;'; put 'put ''ZXR1cm4hMX1jaGFuZ2VCb3JkZXJTdHlsZShsLGEpe2NvbnN0IGQ9dGhpc1tsXS5zdHlsZSxoPWFbbF07IWh8fGguaGlkZT9UaSh0aGlzW2xdLCJoaWRkZW4iKToocGEodGhpc1tsXSwiaGlkZGVuIikmJmNhKHRoaXNbbF0sImhpZGRlbiIpLGQuYmFja2dyb3VuZENvbG9yPWguY29sb3IsKCJ0''@;'; put 'put ''b3AiPT09bHx8ImJvdHRvbSI9PT1sKSYmKGQuaGVpZ2h0PWAke2gud2lkdGh9cHhgKSwoInN0YXJ0Ij09PWx8fCJlbmQiPT09bCkmJihkLndpZHRoPWAke2gud2lkdGh9cHhgKSl9Y2hhbmdlQm9yZGVyVG9EZWZhdWx0U3R5bGUobCl7Y29uc3QgZD10aGlzW2xdLnN0eWxlO2QuYmFja2dyb3Vu''@;'; put 'put ''ZENvbG9yPSIjMDAwIixkLndpZHRoPSIxcHgiLGQuaGVpZ2h0PSIxcHgifXRvZ2dsZUhpZGRlbkNsYXNzKGwsYSl7dGhpcy5jaGFuZ2VCb3JkZXJUb0RlZmF1bHRTdHlsZShsKSxhP1RpKHRoaXNbbF0sImhpZGRlbiIpOmNhKHRoaXNbbF0sImhpZGRlbiIpfWRpc2FwcGVhcigpe3RoaXMudG9w''@;'; put 'put ''U3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5ib3R0b21TdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLnN0YXJ0U3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5lbmRTdHlsZS5kaXNwbGF5PSJub25lIix0aGlzLmNvcm5lclN0eWxlLmRpc3BsYXk9Im5vbmUiLFNwKCkmJnRoaXMuaW5zdGFuY2Uu''@;'; put 'put ''Z2V0U2V0dGluZygiaXNEYXRhVmlld0luc3RhbmNlIikmJih0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLnRvcC5kaXNwbGF5PSJub25lIix0aGlzLnNlbGVjdGlvbkhhbmRsZXMuc3R5bGVzLnRvcEhpdEFyZWEuZGlzcGxheT0ibm9uZSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxl''@;'; put 'put ''cy5ib3R0b20uZGlzcGxheT0ibm9uZSIsdGhpcy5zZWxlY3Rpb25IYW5kbGVzLnN0eWxlcy5ib3R0b21IaXRBcmVhLmRpc3BsYXk9Im5vbmUiKX1kZXN0cm95KCl7dGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveVdpdGhPd25FdmVudHNPbmx5KCksdGhpcy5tYWluLnBhcmVudE5vZGUucmVtb3Zl''@;'; put 'put ''Q2hpbGQodGhpcy5tYWluKX19O2Z1bmN0aW9uIHZfKGMsbCxhKXtLZmUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIEtmZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4g''@;'; put 'put ''b2JqZWN0Iil9ZnVuY3Rpb24gbnMoYyxsKXtyZXR1cm4gYy5nZXQoaEsoYyxsKSl9ZnVuY3Rpb24gcWZlKGMsbCxhKXtyZXR1cm4gYy5zZXQoaEsoYyxsKSxhKSxhfWZ1bmN0aW9uIGhLKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgeTE9bmV3IFdlYWtNYXAsTmQ9bmV3IFdlYWtNYXAsZks9bmV3IFdlYWtNYXAsVkU9bmV3IFdlYWtNYXAscEs9bmV3IFdlYWtNYXAs''@;'; put 'put ''JDc9bmV3IFdlYWtNYXAsWGZlPW5ldyBXZWFrU2V0O2NsYXNzIFZRZXtjb25zdHJ1Y3RvcihsKXsoZnVuY3Rpb24gTlFlKGMsbCl7S2ZlKGMsbCksbC5hZGQoYyl9KSh0aGlzLFhmZSksdl8odGhpcyx5MSx2b2lkIDApLHZfKHRoaXMsTmQsdm9pZCAwKSx2Xyh0aGlzLGZLLG5ldyBQUWUpLHZf''@;'; put 'put ''KHRoaXMsVkUsbmV3IFdlYWtNYXApLHZfKHRoaXMscEssbmV3IFdlYWtTZXQpLHZfKHRoaXMsJDcsbmV3IE1hcCkscWZlKE5kLHRoaXMsbCl9c2V0QWN0aXZlT3ZlcmxheShsKXtyZXR1cm4gcWZlKHkxLHRoaXMsbCksbnMoZkssdGhpcykuc2V0QWN0aXZlT3ZlcmxheShucyh5MSx0aGlzKSks''@;'; put 'put ''bnMoVkUsdGhpcykuaGFzKG5zKHkxLHRoaXMpKXx8bnMoVkUsdGhpcykuc2V0KG5zKHkxLHRoaXMpLG5ldyBTZXQpLHRoaXN9Z2V0Rm9jdXNTZWxlY3Rpb24oKXtyZXR1cm4gbnVsbCE9PW5zKE5kLHRoaXMpP25zKE5kLHRoaXMpLmdldEZvY3VzKCk6bnVsbH1nZXRBcmVhU2VsZWN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIG51bGwhPT1ucyhOZCx0aGlzKT9ucyhOZCx0aGlzKS5jcmVhdGVMYXllcmVkQXJlYSgpOm51bGx9Z2V0Qm9yZGVySW5zdGFuY2UobCl7aWYoIWwuc2V0dGluZ3MuYm9yZGVyKXJldHVybiBudWxsO2lmKG5zKCQ3LHRoaXMpLmhhcyhsKSl7Y29uc3QgZD1ucygkNyx0aGlzKS5nZXQo''@;'; put 'put ''bCk7aWYoZC5oYXMobnMoeTEsdGhpcykpKXJldHVybiBkLmdldChucyh5MSx0aGlzKSk7Y29uc3QgaD1uZXcgJGZlKG5zKHkxLHRoaXMpLGwuc2V0dGluZ3MpO3JldHVybiBkLnNldChucyh5MSx0aGlzKSxoKSxofWNvbnN0IGE9bmV3ICRmZShucyh5MSx0aGlzKSxsLnNldHRpbmdzKTtyZXR1''@;'; put 'put ''cm4gbnMoJDcsdGhpcykuc2V0KGwsbmV3IE1hcChbW25zKHkxLHRoaXMpLGFdXSkpLGF9Z2V0Qm9yZGVySW5zdGFuY2VzKGwpe3ZhciBhLGQ7cmV0dXJuIEFycmF5LmZyb20obnVsbCE9PShhPW51bGw9PT0oZD1ucygkNyx0aGlzKS5nZXQobCkpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLnZhbHVl''@;'; put 'put ''cygpKSYmdm9pZCAwIT09YT9hOltdKX1kZXN0cm95Qm9yZGVycyhsKXtucygkNyx0aGlzKS5nZXQobCkuZm9yRWFjaChhPT5hLmRlc3Ryb3koKSksbnMoJDcsdGhpcykuZGVsZXRlKGwpfXJlbmRlcihsKXtpZihudWxsPT09bnMoTmQsdGhpcykpcmV0dXJuO2wmJmhLKFhmZSx0aGlzLEJRZSku''@;'; put 'put ''Y2FsbCh0aGlzKTtjb25zdCBhPUFycmF5LmZyb20obnMoTmQsdGhpcykpLGQ9bmV3IE1hcCxoPW5ldyBNYXA7Zm9yKGxldCBmPTA7ZjxhLmxlbmd0aDtmKyspe2NvbnN0IHY9YVtmXSx7Y2xhc3NOYW1lOk0saGVhZGVyQXR0cmlidXRlczpELGNyZWF0ZUxheWVyczpaLHNlbGVjdGlvblR5cGU6''@;'; put 'put ''bmV9PXYuc2V0dGluZ3M7bnMocEssdGhpcykuaGFzKHYpfHwobnMocEssdGhpcykuYWRkKHYpLHYuYWRkTG9jYWxIb29rKCJkZXN0cm95IiwoKT0+dGhpcy5kZXN0cm95Qm9yZGVycyh2KSkpO2NvbnN0IGNlPXRoaXMuZ2V0Qm9yZGVySW5zdGFuY2Uodik7aWYodi5pc0VtcHR5KCkpe2NlPy5k''@;'; put 'put ''aXNhcHBlYXIoKTtjb250aW51ZX1NJiZucyhmSyx0aGlzKS5zZXRBY3RpdmVTZWxlY3Rpb24odikuc2NhbigpLmZvckVhY2goQmU9PntpZihkLmhhcyhCZSkpe2NvbnN0IHFlPWQuZ2V0KEJlKTtxZS5oYXMoTSkmJiEwPT09Wj9xZS5zZXQoTSxxZS5nZXQoTSkrMSk6cWUuc2V0KE0sMSl9ZWxz''@;'; put 'put ''ZSBkLnNldChCZSxuZXcgTWFwKFtbTSwxXV0pKTtEJiYoaC5oYXMoQmUpfHxoLnNldChCZSxbXSksIlRIIj09PUJlLm5vZGVOYW1lJiZoLmdldChCZSkucHVzaCguLi5EKSl9KTtjb25zdCBiZT12LmdldENvcm5lcnMoKTtucyh5MSx0aGlzKS5nZXRTZXR0aW5nKCJvbkJlZm9yZURyYXdCb3Jk''@;'; put 'put ''ZXJzIixiZSxuZSksY2U/LmFwcGVhcihiZSl9ZC5mb3JFYWNoKChmLHYpPT57dmFyIE07Y29uc3QgRD1BcnJheS5mcm9tKGYpLm1hcChaPT57bGV0W25lLGNlXT1aO3JldHVybiAxPT09Y2U/bmU6W25lLC4uLkFycmF5LmZyb20oe2xlbmd0aDpjZS0xfSwoYmUsRWUpPT5gJHtuZX0tJHtFZSsx''@;'; put 'put ''fWApXX0pLmZsYXQoKTtELmZvckVhY2goWj0+bnMoVkUsdGhpcykuZ2V0KG5zKHkxLHRoaXMpKS5hZGQoWikpLFRpKHYsRCksIlREIj09PXYubm9kZU5hbWUmJkFycmF5LmlzQXJyYXkobnVsbD09PShNPW5zKE5kLHRoaXMpLm9wdGlvbnMpfHx2b2lkIDA9PT1NP3ZvaWQgMDpNLmNlbGxBdHRy''@;'; put 'put ''aWJ1dGVzKSYmdmEodixucyhOZCx0aGlzKS5vcHRpb25zLmNlbGxBdHRyaWJ1dGVzKX0pLEFycmF5LmZyb20oaC5rZXlzKCkpLmZvckVhY2goZj0+e3ZhKGYsWy4uLmguZ2V0KGYpXSl9KX19ZnVuY3Rpb24gQlFlKCl7Y29uc3QgYz1ucyhWRSx0aGlzKS5nZXQobnMoeTEsdGhpcykpLGw9bnMo''@;'; put 'put ''eTEsdGhpcykud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJvbkJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzIik7aWYoQXJyYXkuaXNBcnJheShsKSlmb3IobGV0IGE9MDthPGwubGVuZ3RoO2ErKyljLmFkZChsW2FdKTtjLmZvckVhY2goYT0+e3ZhciBkLGg7Y29uc3QgZj1ucyh5MSx0aGlzKS53''@;'; put 'put ''dFRhYmxlLlRBQkxFLnF1ZXJ5U2VsZWN0b3JBbGwoYC4ke2F9YCk7bGV0IHY9W107QXJyYXkuaXNBcnJheShudWxsPT09KGQ9bnMoTmQsdGhpcykub3B0aW9ucyl8fHZvaWQgMD09PWQ/dm9pZCAwOmQuY2VsbEF0dHJpYnV0ZXMpJiYodj1ucyhOZCx0aGlzKS5vcHRpb25zLmNlbGxBdHRyaWJ1''@;'; put 'put ''dGVzLm1hcChNPT5NWzBdKSksQXJyYXkuaXNBcnJheShudWxsPT09KGg9bnMoTmQsdGhpcykub3B0aW9ucyl8fHZvaWQgMD09PWg/dm9pZCAwOmguaGVhZGVyQXR0cmlidXRlcykmJih2PVsuLi52LC4uLm5zKE5kLHRoaXMpLm9wdGlvbnMuaGVhZGVyQXR0cmlidXRlcy5tYXAoTT0+TVswXSld''@;'; put 'put ''KTtmb3IobGV0IE09MCxEPWYubGVuZ3RoO008RDtNKyspY2EoZltNXSxhKSxINyhmW01dLHYpfSksYy5jbGVhcigpfWZ1bmN0aW9uIEs3KGMsbCxhKXtKZmUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIEpmZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBp''@;'; put 'put ''bml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gYmMoYyxsKXtyZXR1cm4gYy5nZXQoaTMoYyxsKSl9ZnVuY3Rpb24gcjMoYyxsLGEpe3JldHVybiBjLnNldChpMyhjLGwpLGEpLGF9ZnVuY3Rpb24gaTMoYyxsLGEpe2lmKCJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBBcD1uZXcgV2Vha01hcCx5Zz1uZXcgV2Vha01h''@;'; put 'put ''cCxnSz1uZXcgV2Vha01hcCxtSz1uZXcgV2Vha01hcCxWbT1uZXcgV2Vha01hcCxCRT1uZXcgV2Vha01hcCxqRT1uZXcgV2Vha01hcCxrcD1uZXcgV2Vha1NldDtjbGFzcyB6UWV7Y29uc3RydWN0b3IobCl7KGZ1bmN0aW9uIGpRZShjLGwpe0pmZShjLGwpLGwuYWRkKGMpfSkodGhpcyxrcCks''@;'; put 'put ''SzcodGhpcyxBcCx2b2lkIDApLEs3KHRoaXMseWcsdm9pZCAwKSxLNyh0aGlzLGdLLHZvaWQgMCksSzcodGhpcyxtSyx2b2lkIDApLEs3KHRoaXMsVm0sITApLEs3KHRoaXMsQkUse30pLEs3KHRoaXMsakUse30pLHIzKHlnLHRoaXMsbC5yb290VGFibGUucGFyZW50RWxlbWVudC5wYXJlbnRF''@;'; put 'put ''bGVtZW50KSxyMyhtSyx0aGlzLGwucm9vdERvY3VtZW50KX1pc0NsYXNzaWNUaGVtZSgpe3JldHVybiBiYyhWbSx0aGlzKX1nZXRDU1NWYXJpYWJsZVZhbHVlKGwpe3ZhciBhO2lmKGJjKFZtLHRoaXMpKXJldHVybiBudWxsO2lmKGJjKEJFLHRoaXMpW2AtLWh0LSR7bH1gXSlyZXR1cm4gYmMo''@;'; put 'put ''QkUsdGhpcylbYC0taHQtJHtsfWBdO2NvbnN0IGQ9bnVsbCE9PShhPWkzKGtwLHRoaXMsWVFlKS5jYWxsKHRoaXMsYC0taHQtJHtsfWApKSYmdm9pZCAwIT09YT9hOmkzKGtwLHRoaXMsdDNlKS5jYWxsKHRoaXMsYC0taHQtJHtsfWApO3JldHVybiBudWxsIT09ZD8oYmMoQkUsdGhpcylbYC0t''@;'; put 'put ''aHQtJHtsfWBdPWQsZCk6dm9pZCAwfWdldFN0eWxlRm9yVEQobCl7dmFyIGE7cmV0dXJuIG51bGw9PT0oYT1iYyhqRSx0aGlzKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEudGRbbF19Z2V0RGVmYXVsdFJvd0hlaWdodCgpe2lmKGJjKFZtLHRoaXMpKXJldHVybiAyMztjb25zdCBsPWkzKGtwLHRo''@;'; put 'put ''aXMsVVFlKS5jYWxsKHRoaXMpO3JldHVybiFsJiZwYShiYyh5Zyx0aGlzKSwiaHQtd3JhcHBlciIpPyh0bChgVGhlICIke2JjKEFwLHRoaXMpfSIgdGhlbWUgaXMgZW5hYmxlZCwgYnV0IGl0cyBzdHlsZXNoZWV0cyBhcmUgbWlzc2luZyBvciBub3QgaW1wb3J0ZWQgY29ycmVjdGx5LiBJbXBv''@;'; put 'put ''cnQgdGhlIGNvcnJlY3QgQ1NTIGZpbGVzIGluIG9yZGVyIHRvIHVzZSB0aGF0IHRoZW1lLmApLHIzKFZtLHRoaXMsITApLHRoaXMudXNlVGhlbWUoKSwyMyk6bH1hcmVDZWxsc0JvcmRlckJveCgpe3JldHVybiJib3JkZXItYm94Ij09PXRoaXMuZ2V0U3R5bGVGb3JURCgiYm94LXNpemluZyIp''@;'; put 'put ''fXVzZVRoZW1lKGwpe2lmKCFsKXJldHVybiBpMyhrcCx0aGlzLGUzZSkuY2FsbCh0aGlzKSxyMyhWbSx0aGlzLCEwKSx2b2lkIHIzKEFwLHRoaXMsbHx8dm9pZCAwKTtsJiZsIT09YmMoQXAsdGhpcykmJihiYyhBcCx0aGlzKSYmaTMoa3AsdGhpcyxHUWUpLmNhbGwodGhpcykscjMoQXAsdGhp''@;'; put 'put ''cyxsKSxyMyhWbSx0aGlzLCExKSxpMyhrcCx0aGlzLFpRZSkuY2FsbCh0aGlzKSxpMyhrcCx0aGlzLGUzZSkuY2FsbCh0aGlzKSl9Z2V0VGhlbWVOYW1lKCl7cmV0dXJuIGJjKEFwLHRoaXMpfXJlbW92ZUNsYXNzTmFtZXMoKXtwYShiYyh5Zyx0aGlzKSxiYyhBcCx0aGlzKSkmJmNhKGJjKHln''@;'; put 'put ''LHRoaXMpLGJjKEFwLHRoaXMpKX19ZnVuY3Rpb24gVVFlKCl7Y29uc3QgYz10aGlzLmdldENTU1ZhcmlhYmxlVmFsdWUoImxpbmUtaGVpZ2h0IiksbD10aGlzLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwtdmVydGljYWwtcGFkZGluZyIpLGE9TWF0aC5jZWlsKHBhcnNlRmxvYXQodGhpcy5n''@;'; put 'put ''ZXRTdHlsZUZvclREKCJib3JkZXItYm90dG9tLXdpZHRoIikpKTtyZXR1cm4gbnVsbD09PWN8fG51bGw9PT1sfHxpc05hTihhKT9udWxsOmMrMipsK2F9ZnVuY3Rpb24gWlFlKCl7Y2EoYmMoeWcsdGhpcyksL2h0LXRoZW1lLS4qL2cpLFRpKGJjKHlnLHRoaXMpLGJjKEFwLHRoaXMpKX1mdW5j''@;'; put 'put ''dGlvbiBlM2UoKXt0aGlzLmlzQ2xhc3NpY1RoZW1lKCl8fHIzKGdLLHRoaXMsZ2V0Q29tcHV0ZWRTdHlsZShiYyh5Zyx0aGlzKSkpO2NvbnN0IGM9aTMoa3AsdGhpcyxXUWUpLmNhbGwodGhpcyxbImJveC1zaXppbmciLCJib3JkZXItYm90dG9tLXdpZHRoIl0pO2JjKGpFLHRoaXMpLnRkPXsu''@;'; put 'put ''Li5iYyhqRSx0aGlzKS50ZCwiYm94LXNpemluZyI6Y1siYm94LXNpemluZyJdLCJib3JkZXItYm90dG9tLXdpZHRoIjpjWyJib3JkZXItYm90dG9tLXdpZHRoIl19fWZ1bmN0aW9uIFdRZShjKXtjb25zdCBsPWJjKG1LLHRoaXMpLGE9YmMoeWcsdGhpcyksZD1sLmNyZWF0ZUVsZW1lbnQoInRh''@;'; put 'put ''YmxlIiksaD1sLmNyZWF0ZUVsZW1lbnQoInRib2R5IiksZj1sLmNyZWF0ZUVsZW1lbnQoInRyIiksdj1sLmNyZWF0ZUVsZW1lbnQoInRyIiksTT1sLmNyZWF0ZUVsZW1lbnQoInRkIik7di5hcHBlbmRDaGlsZChNKSxoLmFwcGVuZENoaWxkKGYpLGguYXBwZW5kQ2hpbGQodiksZC5hcHBlbmRD''@;'; put 'put ''aGlsZChoKSxhLmFwcGVuZENoaWxkKGQpO2NvbnN0IEQ9Z2V0Q29tcHV0ZWRTdHlsZShNKSxaPXt9O3JldHVybiBjLmZvckVhY2gobmU9PntaW25lXT1ELmdldFByb3BlcnR5VmFsdWUobmUpfSksYS5yZW1vdmVDaGlsZChkKSxafWZ1bmN0aW9uIFlRZShjKXtjb25zdCBsPU1hdGguY2VpbChw''@;'; put 'put ''YXJzZUZsb2F0KGkzKGtwLHRoaXMsdDNlKS5jYWxsKHRoaXMsYykpKTtyZXR1cm4gTnVtYmVyLmlzTmFOKGwpP251bGw6bH1mdW5jdGlvbiB0M2UoYyl7Y29uc3QgbD1iYyhnSyx0aGlzKS5nZXRQcm9wZXJ0eVZhbHVlKGMpO3JldHVybiIiPT09bD9udWxsOmx9ZnVuY3Rpb24gR1FlKCl7cjMo''@;'; put 'put ''akUsdGhpcyx7fSkscjMoQkUsdGhpcyx7fSkscjMoVm0sdGhpcywhMCl9Y2xhc3MgJFFlIGV4dGVuZHMgaUt7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLG5ldyBlUWUoYSkpLHRoaXMuc3R5bGVzSGFuZGxlcj1uZXcgelFlKHRoaXMuZG9tQmluZGluZ3MpO2NvbnN0IGQ9dGhpcy53dFNldHRp''@;'; put 'put ''bmdzLmdldFNldHRpbmcoImZhY2FkZSIsdGhpcyk7dGhpcy53dFRhYmxlPW5ldyB0UWUodGhpcy5nZXRUYWJsZURhbygpLGQsdGhpcy5kb21CaW5kaW5ncyx0aGlzLnd0U2V0dGluZ3MpLHRoaXMud3RWaWV3cG9ydD1uZXcgTFFlKHRoaXMuZ2V0Vmlld3BvcnREYW8oKSx0aGlzLmRvbUJpbmRp''@;'; put 'put ''bmdzLHRoaXMud3RTZXR0aW5ncyx0aGlzLmV2ZW50TWFuYWdlcix0aGlzLnd0VGFibGUpLHRoaXMuc2VsZWN0aW9uTWFuYWdlcj1uZXcgVlFlKHRoaXMud3RTZXR0aW5ncy5nZXRTZXR0aW5nKCJzZWxlY3Rpb25zIikpLHRoaXMud3RFdmVudD1uZXcgbGZlKGQsdGhpcy5kb21CaW5kaW5ncyx0''@;'; put 'put ''aGlzLnd0U2V0dGluZ3MsdGhpcy5ldmVudE1hbmFnZXIsdGhpcy53dFRhYmxlLHRoaXMuc2VsZWN0aW9uTWFuYWdlciksdGhpcy53dE92ZXJsYXlzPW5ldyBYSmUodGhpcyxkLHRoaXMuZG9tQmluZGluZ3MsdGhpcy53dFNldHRpbmdzLHRoaXMuZXZlbnRNYW5hZ2VyLHRoaXMud3RUYWJsZSks''@;'; put 'put ''dGhpcy5leHBvcnRTZXR0aW5nc0FzQ2xhc3NOYW1lcygpLHRoaXMuZmluZE9yaWdpbmFsSGVhZGVycygpfWV4cG9ydFNldHRpbmdzQXNDbGFzc05hbWVzKCl7Y29uc3QgYT1bXSxkPVtdO3FhKHtyb3dIZWFkZXJzOiJodFJvd0hlYWRlcnMiLGNvbHVtbkhlYWRlcnM6Imh0Q29sdW1uSGVhZGVy''@;'; put 'put ''cyJ9LChoLGYpPT57dGhpcy53dFNldHRpbmdzLmdldFNldHRpbmcoZikubGVuZ3RoJiZkLnB1c2goaCksYS5wdXNoKGgpfSksY2EodGhpcy53dFRhYmxlLnd0Um9vdEVsZW1lbnQucGFyZW50Tm9kZSxhKSxUaSh0aGlzLnd0VGFibGUud3RSb290RWxlbWVudC5wYXJlbnROb2RlLGQpfWdldE92''@;'; put 'put ''ZXJsYXlCeU5hbWUobCl7dmFyIGE7aWYoIXlmZS5pbmNsdWRlcyhsKSlyZXR1cm4gbnVsbDtjb25zdCBkPWwucmVwbGFjZSgvXyhbYS16XSkvZyxoPT5oWzFdLnRvVXBwZXJDYXNlKCkpO3JldHVybiBudWxsIT09KGE9dGhpcy53dE92ZXJsYXlzW2Ake2R9T3ZlcmxheWBdKSYmdm9pZCAwIT09''@;'; put 'put ''YT9hOm51bGx9Z2V0Vmlld3BvcnREYW8oKXtjb25zdCBsPXRoaXM7cmV0dXJue2dldCB3b3QoKXtyZXR1cm4gbH0sZ2V0IHRvcE92ZXJsYXlUcmltbWluZ0NvbnRhaW5lcigpe3JldHVybiBsLnd0T3ZlcmxheXMudG9wT3ZlcmxheS50cmltbWluZ0NvbnRhaW5lcn0sZ2V0IGlubGluZVN0YXJ0''@;'; put 'put ''T3ZlcmxheVRyaW1taW5nQ29udGFpbmVyKCl7cmV0dXJuIGwud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkudHJpbW1pbmdDb250YWluZXJ9LGdldCB0b3BTY3JvbGxQb3NpdGlvbigpe3JldHVybiBsLnd0T3ZlcmxheXMudG9wT3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpfSxnZXQg''@;'; put 'put ''dG9wUGFyZW50T2Zmc2V0KCl7cmV0dXJuIGwud3RPdmVybGF5cy50b3BPdmVybGF5LmdldFRhYmxlUGFyZW50T2Zmc2V0KCl9LGdldCBpbmxpbmVTdGFydFNjcm9sbFBvc2l0aW9uKCl7cmV0dXJuIGwud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKX0s''@;'; put 'put ''Z2V0IGlubGluZVN0YXJ0UGFyZW50T2Zmc2V0KCl7cmV0dXJuIGwud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0VGFibGVQYXJlbnRPZmZzZXQoKX0sZ2V0IHRvcE92ZXJsYXkoKXtyZXR1cm4gbC53dE92ZXJsYXlzLnRvcE92ZXJsYXl9LGdldCBpbmxpbmVTdGFydE92ZXJsYXko''@;'; put 'put ''KXtyZXR1cm4gbC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheX0sZ2V0IGJvdHRvbU92ZXJsYXkoKXtyZXR1cm4gbC53dE92ZXJsYXlzLmJvdHRvbU92ZXJsYXl9fX19Y2xhc3Mgdkt7Y29uc3RydWN0b3IobCl7bCBpbnN0YW5jZW9mIGlLP3RoaXMuX3dvdD1sOnRoaXMuX2luaXRGcm9t''@;'; put 'put ''U2V0dGluZ3MobCl9X2luaXRGcm9tU2V0dGluZ3MobCl7bC5mYWNhZGU9YT0+e2NvbnN0IGQ9bmV3IHZLKGEpO3JldHVybigpPT5kfSx0aGlzLl93b3Q9bmV3ICRRZShsLnRhYmxlLGwpfWdldCBndWlkKCl7cmV0dXJuIHRoaXMuX3dvdC5ndWlkfWdldCByb290RG9jdW1lbnQoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5fd290LmRvbUJpbmRpbmdzLnJvb3REb2N1bWVudH1nZXQgcm9vdFdpbmRvdygpe3JldHVybiB0aGlzLl93b3QuZG9tQmluZGluZ3Mucm9vdFdpbmRvd31nZXQgd3RTZXR0aW5ncygpe3JldHVybiB0aGlzLl93b3Qud3RTZXR0aW5nc31nZXQgY2xvbmVTb3VyY2UoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fd290LmNsb25lU291cmNlfWdldCBjbG9uZU92ZXJsYXkoKXtyZXR1cm4gdGhpcy5fd290LmNsb25lT3ZlcmxheX1nZXQgc2VsZWN0aW9uTWFuYWdlcigpe3JldHVybiB0aGlzLl93b3Quc2VsZWN0aW9uTWFuYWdlcn1nZXQgd3RWaWV3cG9ydCgpe3JldHVybiB0aGlzLl93b3Qud3RWaWV3''@;'; put 'put ''cG9ydH1nZXQgd3RPdmVybGF5cygpe3JldHVybiB0aGlzLl93b3Qud3RPdmVybGF5c31nZXQgd3RUYWJsZSgpe3JldHVybiB0aGlzLl93b3Qud3RUYWJsZX1nZXQgd3RFdmVudCgpe3JldHVybiB0aGlzLl93b3Qud3RFdmVudH1nZXQgd3RTY3JvbGwoKXtyZXR1cm4gdGhpcy5fd290Lnd0U2Ny''@;'; put 'put ''b2xsfWdldCBkcmF3bigpe3JldHVybiB0aGlzLl93b3QuZHJhd259c2V0IGRyYXduKGwpe3RoaXMuX3dvdC5kcmF3bj1sfWdldCBhY3RpdmVPdmVybGF5TmFtZSgpe3JldHVybiB0aGlzLl93b3QuYWN0aXZlT3ZlcmxheU5hbWV9Z2V0IGRyYXdJbnRlcnJ1cHRlZCgpe3JldHVybiB0aGlzLl93''@;'; put 'put ''b3QuZHJhd0ludGVycnVwdGVkfXNldCBkcmF3SW50ZXJydXB0ZWQobCl7dGhpcy5fd290LmRyYXdJbnRlcnJ1cHRlZD1sfWdldCBsYXN0TW91c2VPdmVyKCl7cmV0dXJuIHRoaXMuX3dvdC5sYXN0TW91c2VPdmVyfXNldCBsYXN0TW91c2VPdmVyKGwpe3RoaXMuX3dvdC5sYXN0TW91c2VPdmVy''@;'; put 'put ''PWx9Z2V0IG1vbWVudHVtU2Nyb2xsaW5nKCl7cmV0dXJuIHRoaXMuX3dvdC5tb21lbnR1bVNjcm9sbGluZ31zZXQgbW9tZW50dW1TY3JvbGxpbmcobCl7dGhpcy5fd290Lm1vbWVudHVtU2Nyb2xsaW5nPWx9Z2V0IHRvdWNoQXBwbGllZCgpe3JldHVybiB0aGlzLl93b3QudG91Y2hBcHBsaWVk''@;'; put 'put ''fXNldCB0b3VjaEFwcGxpZWQobCl7dGhpcy5fd290LnRvdWNoQXBwbGllZD1sfWdldCBkb21CaW5kaW5ncygpe3JldHVybiB0aGlzLl93b3QuZG9tQmluZGluZ3N9Z2V0IGV2ZW50TGlzdGVuZXJzKCl7cmV0dXJuIHRoaXMuX3dvdC5ldmVudExpc3RlbmVyc31zZXQgZXZlbnRMaXN0ZW5lcnMo''@;'; put 'put ''bCl7dGhpcy5fd290LmV2ZW50TGlzdGVuZXJzPWx9Z2V0IGV2ZW50TWFuYWdlcigpe3JldHVybiB0aGlzLl93b3QuZXZlbnRNYW5hZ2VyfWdldCBzdHlsZXNIYW5kbGVyKCl7cmV0dXJuIHRoaXMuX3dvdC5zdHlsZXNIYW5kbGVyfWNyZWF0ZUNlbGxDb29yZHMobCxhKXtyZXR1cm4gdGhpcy5f''@;'; put 'put ''d290LmNyZWF0ZUNlbGxDb29yZHMobCxhKX1jcmVhdGVDZWxsUmFuZ2UobCxhLGQpe3JldHVybiB0aGlzLl93b3QuY3JlYXRlQ2VsbFJhbmdlKGwsYSxkKX1kcmF3KCl7cmV0dXJuIHRoaXMuX3dvdC5kcmF3KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1''@;'; put 'put ''bWVudHNbMF0pLHRoaXN9Z2V0Q2VsbChsKXtyZXR1cm4gdGhpcy5fd290LmdldENlbGwobCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdKX1zY3JvbGxWaWV3cG9ydChsLGEsZCl7cmV0dXJuIHRoaXMuX3dvdC5zY3JvbGxWaWV3cG9ydChs''@;'; put 'put ''LGEsZCl9c2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkobCxhKXtyZXR1cm4gdGhpcy5fd290LnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KGwsYSl9c2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSl7cmV0dXJuIHRoaXMuX3dvdC5zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkobCxhKX1n''@;'; put 'put ''ZXRWaWV3cG9ydCgpe3JldHVybiB0aGlzLl93b3QuZ2V0Vmlld3BvcnQoKX1nZXRPdmVybGF5TmFtZSgpe3JldHVybiB0aGlzLl93b3QuY2xvbmVPdmVybGF5P3RoaXMuX3dvdC5jbG9uZU92ZXJsYXkudHlwZToibWFzdGVyIn1nZXRPdmVybGF5QnlOYW1lKGwpe3JldHVybiB0aGlzLl93b3Qu''@;'; put 'put ''Z2V0T3ZlcmxheUJ5TmFtZShsKX1leHBvcnRTZXR0aW5nc0FzQ2xhc3NOYW1lcygpe3JldHVybiB0aGlzLl93b3QuZXhwb3J0U2V0dGluZ3NBc0NsYXNzTmFtZXMoKX11cGRhdGUobCxhKXtyZXR1cm4gdGhpcy5fd290Lnd0U2V0dGluZ3MudXBkYXRlKGwsYSksdGhpc31nZXRTZXR0aW5nKGws''@;'; put 'put ''YSxkLGgsZil7cmV0dXJuIHRoaXMuX3dvdC53dFNldHRpbmdzLmdldFNldHRpbmcobCxhLGQsaCxmKX1oYXNTZXR0aW5nKGwpe3JldHVybiB0aGlzLl93b3Qud3RTZXR0aW5ncy5oYXNTZXR0aW5nKGwpfWRlc3Ryb3koKXt0aGlzLl93b3QuZGVzdHJveSgpfX1mdW5jdGlvbiBuM2UoYyl7bGV0''@;'; put 'put ''e2lzU2hpZnRLZXk6bCxpc0xlZnRDbGljazphLGlzUmlnaHRDbGljazpkLGNvb3JkczpoLHNlbGVjdGlvbjpmLGNvbnRyb2xsZXI6dixjZWxsQ29vcmRzRmFjdG9yeTpNfT1jO2NvbnN0IEQ9Zi5pc1NlbGVjdGVkKCk/Zi5nZXRTZWxlY3RlZFJhbmdlKCkuY3VycmVudCgpOm51bGwsWj1mLmlz''@;'; put 'put ''U2VsZWN0ZWRCeUNvcm5lcigpLG5lPWYuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCk7aWYoZi5tYXJrU291cmNlKCJtb3VzZSIpLGwmJkQpaC5yb3c+PTAmJmguY29sPj0wJiYhdi5jZWxsP2Yuc2V0UmFuZ2VFbmQoaCk6KFp8fG5lKSYmaC5yb3c+PTAmJmguY29sPj0wJiYhdi5jZWxsP2Yuc2V0''@;'; put 'put ''UmFuZ2VFbmQoTShoLnJvdyxoLmNvbCkpOlomJmgucm93PDAmJiF2LmNvbHVtbj9mLnNldFJhbmdlRW5kKE0oRC50by5yb3csaC5jb2wpKTpuZSYmaC5jb2w8MCYmIXYucm93P2Yuc2V0UmFuZ2VFbmQoTShoLnJvdyxELnRvLmNvbCkpOighWiYmIW5lJiZoLmNvbDwwfHxaJiZoLmNvbDwwKSYm''@;'; put 'put ''IXYucm93P2Yuc2VsZWN0Um93cyhNYXRoLm1heChELmZyb20ucm93LDApLGgucm93LGguY29sKTooIVomJiFuZSYmaC5yb3c8MHx8bmUmJmgucm93PDApJiYhdi5jb2x1bW4mJmYuc2VsZWN0Q29sdW1ucyhNYXRoLm1heChELmZyb20uY29sLDApLGguY29sLGgucm93KTtlbHNle2NvbnN0IGNl''@;'; put 'put ''PSFmLmluSW5TZWxlY3Rpb24oaCksYmU9YXx8ZCYmY2U7aC5yb3c8MCYmaC5jb2w+PTAmJiF2LmNvbHVtbj9iZSYmZi5zZWxlY3RDb2x1bW5zKGguY29sLGguY29sLGgucm93KTpoLmNvbDwwJiZoLnJvdz49MCYmIXYucm93P2JlJiZmLnNlbGVjdFJvd3MoaC5yb3csaC5yb3csaC5jb2wpOmgu''@;'; put 'put ''Y29sPj0wJiZoLnJvdz49MCYmIXYuY2VsbD9iZSYmZi5zZXRSYW5nZVN0YXJ0KGgpOmguY29sPDAmJmgucm93PDAmJmYuc2VsZWN0QWxsKCEwLCEwLHtkaXNhYmxlSGVhZGVyc0hpZ2hsaWdodDohMCxmb2N1c1Bvc2l0aW9uOntyb3c6MCxjb2w6MH19KX1mLm1hcmtFbmRTb3VyY2UoKX1jb25z''@;'; put 'put ''dCBxUWU9bmV3IE1hcChbWyJtb3VzZWRvd24iLG4zZV0sWyJtb3VzZW92ZXIiLGZ1bmN0aW9uIEtRZShjKXtsZXR7aXNMZWZ0Q2xpY2s6bCxjb29yZHM6YSxzZWxlY3Rpb246ZCxjb250cm9sbGVyOmgsY2VsbENvb3Jkc0ZhY3Rvcnk6Zn09YztpZighbClyZXR1cm47Y29uc3Qgdj1kLmlzU2Vs''@;'; put 'put ''ZWN0ZWRCeVJvd0hlYWRlcigpLE09ZC5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSxEPWQudGFibGVQcm9wcy5jb3VudENvbHMoKSxaPWQudGFibGVQcm9wcy5jb3VudFJvd3MoKTtkLm1hcmtTb3VyY2UoIm1vdXNlIiksTSYmIWguY29sdW1uP2Quc2V0UmFuZ2VFbmQoZihaLTEsYS5jb2wp''@;'; put 'put ''KTp2JiYhaC5yb3c/ZC5zZXRSYW5nZUVuZChmKGEucm93LEQtMSkpOmguY2VsbHx8ZC5zZXRSYW5nZUVuZChhKSxkLm1hcmtFbmRTb3VyY2UoKX1dLFsidG91Y2hzdGFydCIsbjNlXV0pO2Z1bmN0aW9uIHIzZShjLGwpe2xldHtjb29yZHM6YSxzZWxlY3Rpb246ZCxjb250cm9sbGVyOmgsY2Vs''@;'; put 'put ''bENvb3Jkc0ZhY3Rvcnk6Zn09bDtxUWUuZ2V0KGMudHlwZSkoe2Nvb3JkczphLHNlbGVjdGlvbjpkLGNvbnRyb2xsZXI6aCxjZWxsQ29vcmRzRmFjdG9yeTpmLGlzU2hpZnRLZXk6Yy5zaGlmdEtleSxpc0xlZnRDbGljazpOTyhjKXx8InRvdWNoc3RhcnQiPT09Yy50eXBlLGlzUmlnaHRDbGlj''@;'; put 'put ''azpQbShjKX0pfWNvbnN0IGkzZT1uZXcgV2Vha01hcCxiSz1TeW1ib2woInJvb3RJbnN0YW5jZSIpO2Z1bmN0aW9uIHJQKGMpe3JldHVybiBpM2UuaGFzKGMpfWZ1bmN0aW9uIEJtKGMsbCxhKXtvM2UoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIG8zZShjLGwpe2lmKGwuaGFzKGMpKXRocm93''@;'; put 'put ''IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gam0oYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGVldChjKXt2YXIgbD1mdW5jdGlvbiB0ZXQoYyxsKXtpZigib2JqZWN0IiE9dHlw''@;'; put 'put ''ZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0''@;'; put 'put ''dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEw''@;'; put 'put ''LGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIFR1KGMsbCl7cmV0dXJuIGMuZ2V0KGJfKGMsbCkpfWZ1bmN0aW9uIFZkKGMsbCxhKXtyZXR1cm4gYy5zZXQoYl8oYyxsKSxhKSxhfWZ1bmN0aW9uIGJfKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''Yz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgeUs9bmV3IFdlYWtNYXAsaVA9bmV3IFdlYWtNYXAsb1A9bmV3IFdlYWtNYXAs''@;'; put 'put ''X2c9bmV3IFdlYWtNYXAsbzM9bmV3IFdlYWtNYXAsX0s9bmV3IFdlYWtNYXAsd0s9bmV3IFdlYWtNYXAseV89bmV3IFdlYWtNYXAsekU9bmV3IFdlYWtTZXQ7ZnVuY3Rpb24gYTNlKCl7cmV0dXJuIHBhcnNlSW50KHRoaXMuaG90LnJvb3RFbGVtZW50LmdldEF0dHJpYnV0ZShFTygpWzBdKSwx''@;'; put 'put ''MCl9ZnVuY3Rpb24gcmV0KGMpe2NvbnN0IGw9Yl8oekUsdGhpcyxhM2UpLmNhbGwodGhpcykrYzt2YSh0aGlzLmhvdC5yb290RWxlbWVudCwuLi5FTyhsKSl9ZnVuY3Rpb24gaWV0KCl7Y29uc3QgYz10aGlzLmhvdC5yb290RWxlbWVudDt0aGlzLmhhc1ZlcnRpY2FsU2Nyb2xsKCk/VGkoYywi''@;'; put 'put ''aHRIYXNTY3JvbGxZIik6Y2EoYywiaHRIYXNTY3JvbGxZIiksdGhpcy5oYXNIb3Jpem9udGFsU2Nyb2xsKCk/VGkoYywiaHRIYXNTY3JvbGxYIik6Y2EoYywiaHRIYXNTY3JvbGxYIil9Y29uc3Qgb2V0PWNsYXNzIG5ldHtjb25zdHJ1Y3RvcihsKXsoZnVuY3Rpb24gUVFlKGMsbCl7bzNlKGMs''@;'; put 'put ''bCksbC5hZGQoYyl9KSh0aGlzLHpFKSxqbSh0aGlzLCJob3QiLHZvaWQgMCksam0odGhpcywiZXZlbnRNYW5hZ2VyIix2b2lkIDApLGptKHRoaXMsInNldHRpbmdzIix2b2lkIDApLGptKHRoaXMsIlRIRUFEIix2b2lkIDApLGptKHRoaXMsIlRCT0RZIix2b2lkIDApLGptKHRoaXMsIl93dCIs''@;'; put 'put ''dm9pZCAwKSxqbSh0aGlzLCJhY3RpdmVXdCIsdm9pZCAwKSxCbSh0aGlzLHlLLDApLEJtKHRoaXMsaVAsMCksam0odGhpcywicG9zdHBvbmVkQWRqdXN0RWxlbWVudHNTaXplIiwhMSksQm0odGhpcyxvUCwhMSksQm0odGhpcyxfZyx2b2lkIDApLEJtKHRoaXMsbzMsdm9pZCAwKSxCbSh0aGlz''@;'; put 'put ''LF9LLDApLEJtKHRoaXMsd0ssMCksQm0odGhpcyx5XyxudWxsKSx0aGlzLmhvdD1sLHRoaXMuZXZlbnRNYW5hZ2VyPW5ldyBMMih0aGlzLmhvdCksdGhpcy5zZXR0aW5ncz10aGlzLmhvdC5nZXRTZXR0aW5ncygpLHRoaXMuY3JlYXRlRWxlbWVudHMoKSx0aGlzLnJlZ2lzdGVyRXZlbnRzKCks''@;'; put 'put ''dGhpcy5pbml0aWFsaXplV2Fsa29udGFibGUoKX1yZW5kZXIoKXt0aGlzLmhvdC5pc1JlbmRlclN1c3BlbmRlZCgpfHwodGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlbmRlciIsdGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyKSx0aGlzLnBvc3Rwb25lZEFkanVzdEVsZW1lbnRzU2l6ZSYmKHRo''@;'; put 'put ''aXMucG9zdHBvbmVkQWRqdXN0RWxlbWVudHNTaXplPSExLHRoaXMuYWRqdXN0RWxlbWVudHNTaXplKCkpLHRoaXMuX3d0LmRyYXcoIXRoaXMuaG90LmZvcmNlRnVsbFJlbmRlciksYl8oekUsdGhpcyxpZXQpLmNhbGwodGhpcyksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVuZGVyIix0aGlz''@;'; put 'put ''LmhvdC5mb3JjZUZ1bGxSZW5kZXIpLHRoaXMuaG90LmZvcmNlRnVsbFJlbmRlcj0hMSx0aGlzLmhvdC5yZW5kZXJDYWxsPSExKX1hZGp1c3RFbGVtZW50c1NpemUoKXt0aGlzLmhvdC5pc1JlbmRlclN1c3BlbmRlZCgpP3RoaXMucG9zdHBvbmVkQWRqdXN0RWxlbWVudHNTaXplPSEwOnRoaXMu''@;'; put 'put ''X3d0Lnd0T3ZlcmxheXMuYWRqdXN0RWxlbWVudHNTaXplKCl9Z2V0Q2VsbEF0Q29vcmRzKGwsYSl7Y29uc3QgZD10aGlzLl93dC5nZXRDZWxsKGwsYSk7cmV0dXJuIGQ8MD9udWxsOmR9c2Nyb2xsVmlld3BvcnQobCxhLGQpe3JldHVybiB0aGlzLl93dC5zY3JvbGxWaWV3cG9ydChsLGEsZCl9''@;'; put 'put ''c2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkobCxhKXtyZXR1cm4gdGhpcy5fd3Quc2Nyb2xsVmlld3BvcnRIb3Jpem9udGFsbHkobCxhKX1zY3JvbGxWaWV3cG9ydFZlcnRpY2FsbHkobCxhKXtyZXR1cm4gdGhpcy5fd3Quc2Nyb2xsVmlld3BvcnRWZXJ0aWNhbGx5KGwsYSl9Y3JlYXRlRWxl''@;'; put 'put ''bWVudHMoKXtjb25zdHtyb290RWxlbWVudDpsLHJvb3REb2N1bWVudDphfT10aGlzLmhvdCxkPWwuZ2V0QXR0cmlidXRlKCJzdHlsZSIpO2QmJmwuc2V0QXR0cmlidXRlKCJkYXRhLW9yaWdpbmFsc3R5bGUiLGQpLFRpKGwsImhhbmRzb250YWJsZSIpLFZkKG8zLHRoaXMsYS5jcmVhdGVFbGVt''@;'; put 'put ''ZW50KCJUQUJMRSIpKSxUaShUdShvMyx0aGlzKSwiaHRDb3JlIiksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS50YWJsZUNsYXNzTmFtZSYmVGkoVHUobzMsdGhpcyksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS50YWJsZUNsYXNzTmFtZSksdGhpcy5zZXR0aW5ncy5hcmlhVGFncyYmKHZhKFR1KG8z''@;'; put 'put ''LHRoaXMpLFtfcCgpXSksdmEobCxbWyJyb2xlIiwidHJlZWdyaWQiXSx1MmUoLTEpLEVPKHRoaXMuaG90LmNvdW50Q29scygpKSxbImFyaWEtbXVsdGlzZWxlY3RhYmxlIiwidHJ1ZSJdXSkpLHRoaXMuVEhFQUQ9YS5jcmVhdGVFbGVtZW50KCJUSEVBRCIpLFR1KG8zLHRoaXMpLmFwcGVuZENo''@;'; put 'put ''aWxkKHRoaXMuVEhFQUQpLHRoaXMuVEJPRFk9YS5jcmVhdGVFbGVtZW50KCJUQk9EWSIpLFR1KG8zLHRoaXMpLmFwcGVuZENoaWxkKHRoaXMuVEJPRFkpLHRoaXMuaG90LnRhYmxlPVR1KG8zLHRoaXMpLHRoaXMuaG90LmNvbnRhaW5lci5pbnNlcnRCZWZvcmUoVHUobzMsdGhpcyksdGhpcy5o''@;'; put 'put ''b3QuY29udGFpbmVyLmZpcnN0Q2hpbGQpfXJlZ2lzdGVyRXZlbnRzKCl7Y29uc3R7cm9vdEVsZW1lbnQ6bCxyb290RG9jdW1lbnQ6YSxzZWxlY3Rpb246ZCxyb290V2luZG93Omh9PXRoaXMuaG90LGY9YS5kb2N1bWVudEVsZW1lbnQ7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5l''@;'; put 'put ''cihsLCJtb3VzZWRvd24iLE09PntWZChvUCx0aGlzLCEwKSx0aGlzLmlzVGV4dFNlbGVjdGlvbkFsbG93ZWQoTS50YXJnZXQpfHwoZCQoaCksTS5wcmV2ZW50RGVmYXVsdCgpLGguZm9jdXMoKSl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNldXAiLCgpPT57''@;'; put 'put ''VmQob1AsdGhpcywhMSl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlbW92ZSIsTT0+e1R1KG9QLHRoaXMpJiYhdGhpcy5pc1RleHRTZWxlY3Rpb25BbGxvd2VkKE0udGFyZ2V0KSYmKHRoaXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb24mJmQkKGgpLE0u''@;'; put 'put ''cHJldmVudERlZmF1bHQoKSl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGYsImtleXVwIixNPT57ZC5pc0luUHJvZ3Jlc3MoKSYmIU0uc2hpZnRLZXkmJmQuZmluaXNoKCl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGYsIm1vdXNldXAiLE09Pntk''@;'; put 'put ''LmlzSW5Qcm9ncmVzcygpJiZOTyhNKSYmZC5maW5pc2goKSxWZChfZyx0aGlzLCExKTtjb25zdCBEPURPKGEuYWN0aXZlRWxlbWVudCk7X0UoYS5hY3RpdmVFbGVtZW50KSYmIUR8fChEfHwhZC5pc1NlbGVjdGVkKCkmJiFkLmlzU2VsZWN0ZWRCeUFueUhlYWRlcigpJiYhbC5jb250YWlucyhN''@;'; put 'put ''LnRhcmdldCkmJiFQbShNKSkmJnRoaXMuaG90LnVubGlzdGVuKCl9KSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGYsImNvbnRleHRtZW51IixNPT57ZC5pc0luUHJvZ3Jlc3MoKSYmUG0oTSkmJihkLmZpbmlzaCgpLFZkKF9nLHRoaXMsITEpKX0pLHRoaXMuZXZlbnRNYW5h''@;'; put 'put ''Z2VyLmFkZEV2ZW50TGlzdGVuZXIoZiwidG91Y2hlbmQiLCgpPT57ZC5pc0luUHJvZ3Jlc3MoKSYmZC5maW5pc2goKSxWZChfZyx0aGlzLCExKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoZiwibW91c2Vkb3duIixNPT57Y29uc3QgRD1NLnRhcmdldCxaPU0ueHx8TS5j''@;'; put 'put ''bGllbnRYLG5lPU0ueXx8TS5jbGllbnRZO2xldCBjZT1NLnRhcmdldDtpZihUdShfZyx0aGlzKXx8IWx8fCF0aGlzLmhvdC52aWV3KXJldHVybjtjb25zdHtob2xkZXI6YmV9PXRoaXMuX3d0Lnd0VGFibGU7aWYoY2U9PT1iZSl7Y29uc3QgQmU9aDAoYSk7aWYoYS5lbGVtZW50RnJvbVBvaW50''@;'; put 'put ''KForQmUsbmUpIT09YmV8fGEuZWxlbWVudEZyb21Qb2ludChaLG5lK0JlKSE9PWJlKXJldHVybn1lbHNlIGZvcig7Y2UhPT1mOyl7aWYobnVsbD09PWNlKXtpZihNLmlzVGFyZ2V0V2ViQ29tcG9uZW50KWJyZWFrO3JldHVybn1pZihjZT09PWwpcmV0dXJuO2NlPWNlLnBhcmVudE5vZGV9KCJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiB0aGlzLnNldHRpbmdzLm91dHNpZGVDbGlja0Rlc2VsZWN0cz90aGlzLnNldHRpbmdzLm91dHNpZGVDbGlja0Rlc2VsZWN0cyhEKTp0aGlzLnNldHRpbmdzLm91dHNpZGVDbGlja0Rlc2VsZWN0cyk/dGhpcy5ob3QuZGVzZWxlY3RDZWxsKCk6dGhpcy5ob3QuZGVz''@;'; put 'put ''dHJveUVkaXRvcighMSwhMSl9KTtsZXQgdj1GNyhoKTtmb3IoO251bGwhPT12Oyl0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHYuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCJjbGljayIsKCk9Pnt0aGlzLmhvdC51bmxpc3RlbigpfSksdj1GNyh2KTt0aGlzLmV2ZW50TWFu''@;'; put 'put ''YWdlci5hZGRFdmVudExpc3RlbmVyKFR1KG8zLHRoaXMpLCJzZWxlY3RzdGFydCIsTT0+e3RoaXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb258fF9FKE0udGFyZ2V0KXx8TS5wcmV2ZW50RGVmYXVsdCgpfSl9dHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhsKXtsZXR7''@;'; put 'put ''cm93OmEsY29sOmR9PWw7cmV0dXJuIHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKC4uLnRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbEluZGV4KGEsZCkpfXRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxJbmRleChsLGEpe2xldCBkPWw+PTA/dGhpcy5ob3Qucm93''@;'; put 'put ''SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChsKTpsLGg9YT49MD90aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGEpOmE7cmV0dXJuIG51bGw9PT1kJiYoZD1sKSxudWxsPT09aCYmKGg9YSksW2QsaF19Y291bnRS''@;'; put 'put ''ZW5kZXJhYmxlSW5kZXhlcyhsLGEpe2NvbnN0IGQ9TWF0aC5taW4obC5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpLGEpLGg9bC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZC0xLC0xKTtyZXR1cm4gbnVsbD09PWg/MDpsLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaCkrMX1j''@;'; put 'put ''b3VudFJlbmRlcmFibGVDb2x1bW5zKCl7cmV0dXJuIHRoaXMuY291bnRSZW5kZXJhYmxlSW5kZXhlcyh0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcix0aGlzLnNldHRpbmdzLm1heENvbHMpfWNvdW50UmVuZGVyYWJsZVJvd3MoKXtyZXR1cm4gdGhpcy5jb3VudFJlbmRlcmFibGVJbmRleGVz''@;'; put 'put ''KHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLHRoaXMuc2V0dGluZ3MubWF4Um93cyl9Y291bnROb3RIaWRkZW5Sb3dJbmRleGVzKGwsYSl7cmV0dXJuIHRoaXMuY291bnROb3RIaWRkZW5JbmRleGVzKGwsYSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlcix0aGlzLmNvdW50UmVuZGVyYWJsZVJvd3Mo''@;'; put 'put ''KSl9Y291bnROb3RIaWRkZW5Db2x1bW5JbmRleGVzKGwsYSl7cmV0dXJuIHRoaXMuY291bnROb3RIaWRkZW5JbmRleGVzKGwsYSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcix0aGlzLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMoKSl9Y291bnROb3RIaWRkZW5JbmRleGVzKGwsYSxkLGgpe2lm''@;'; put 'put ''KGlzTmFOKGwpfHxsPDApcmV0dXJuIDA7Y29uc3QgZj1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsLGEpLHY9ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGYpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKHYpKXJldHVybiAwO2xldCBNPTA7cmV0dXJuIGE8MD9NPXYrMTphPjAmJihN''@;'; put 'put ''PWgtdiksTX1jb3VudE5vdEhpZGRlbkZpeGVkQ29sdW1uc1N0YXJ0KCl7Y29uc3QgbD10aGlzLmhvdC5jb3VudENvbHMoKSxhPU1hdGgubWluKHBhcnNlSW50KHRoaXMuc2V0dGluZ3MuZml4ZWRDb2x1bW5zU3RhcnQsMTApLGwpLTE7cmV0dXJuIHRoaXMuY291bnROb3RIaWRkZW5Db2x1bW5J''@;'; put 'put ''bmRleGVzKGEsLTEpfWNvdW50Tm90SGlkZGVuRml4ZWRSb3dzVG9wKCl7Y29uc3QgbD10aGlzLmhvdC5jb3VudFJvd3MoKSxhPU1hdGgubWluKHBhcnNlSW50KHRoaXMuc2V0dGluZ3MuZml4ZWRSb3dzVG9wLDEwKSxsKS0xO3JldHVybiB0aGlzLmNvdW50Tm90SGlkZGVuUm93SW5kZXhlcyhh''@;'; put 'put ''LC0xKX1jb3VudE5vdEhpZGRlbkZpeGVkUm93c0JvdHRvbSgpe2NvbnN0IGw9dGhpcy5ob3QuY291bnRSb3dzKCksYT1NYXRoLm1heChsLXBhcnNlSW50KHRoaXMuc2V0dGluZ3MuZml4ZWRSb3dzQm90dG9tLDEwKSwwKTtyZXR1cm4gdGhpcy5jb3VudE5vdEhpZGRlblJvd0luZGV4ZXMoYSwx''@;'; put 'put ''KX1jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShsLGEpe2xldCBkPTA7Zm9yKGxldCBoPWw7aDw9YTtoKyspbnVsbCE9PXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaCkmJihkKz0xKTtyZXR1cm4gZH1jb3VudFJlbmRlcmFibGVS''@;'; put 'put ''b3dzSW5SYW5nZShsLGEpe2xldCBkPTA7Zm9yKGxldCBoPWw7aDw9YTtoKyspbnVsbCE9PXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoaCkmJihkKz0xKTtyZXR1cm4gZH1nZXRTdHlsZXNIYW5kbGVyKCl7cmV0dXJuIHRoaXMuX3d0LnN0eWxl''@;'; put 'put ''c0hhbmRsZXJ9Z2V0RGVmYXVsdFJvd0hlaWdodCgpe3JldHVybiB0aGlzLl93dC5zdHlsZXNIYW5kbGVyLmdldERlZmF1bHRSb3dIZWlnaHQoKX1hZGRDbGFzc05hbWVUb0xpY2Vuc2VFbGVtZW50KGwpe3ZhciBhO2NvbnN0IGQ9bnVsbD09PShhPXRoaXMuaG90LnJvb3RFbGVtZW50LnBhcmVu''@;'; put 'put ''dE5vZGUpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnF1ZXJ5U2VsZWN0b3IoIi5ob3QtZGlzcGxheS1saWNlbnNlLWluZm8iKTtkJiZUaShkLGwpfXJlbW92ZUNsYXNzTmFtZUZyb21MaWNlbnNlRWxlbWVudChsKXt2YXIgYTtjb25zdCBkPW51bGw9PT0oYT10aGlzLmhvdC5yb290RWxlbWVudC5w''@;'; put 'put ''YXJlbnROb2RlKXx8dm9pZCAwPT09YT92b2lkIDA6YS5xdWVyeVNlbGVjdG9yKCIuaG90LWRpc3BsYXktbGljZW5zZS1pbmZvIik7ZCYmY2EoZCxsKX1pc01haW5UYWJsZU5vdEZ1bGx5Q292ZXJlZEJ5T3ZlcmxheXMoKXtjb25zdCBsPXRoaXMuY291bnROb3RIaWRkZW5GaXhlZFJvd3NUb3Ao''@;'; put 'put ''KSt0aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRSb3dzQm90dG9tKCksYT10aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRDb2x1bW5zU3RhcnQoKTtyZXR1cm4gdGhpcy5ob3QuY291bnRSZW5kZXJlZFJvd3MoKT5sJiZ0aGlzLmhvdC5jb3VudFJlbmRlcmVkQ29scygpPmF9aW5pdGlhbGl6ZVdhbGtv''@;'; put 'put ''bnRhYmxlKCl7Y29uc3QgbD17YXJpYVRhZ3M6dGhpcy5zZXR0aW5ncy5hcmlhVGFncyxydGxNb2RlOnRoaXMuaG90LmlzUnRsKCksZXh0ZXJuYWxSb3dDYWxjdWxhdG9yOnRoaXMuaG90LmdldFBsdWdpbigiYXV0b1Jvd1NpemUiKSYmdGhpcy5ob3QuZ2V0UGx1Z2luKCJhdXRvUm93U2l6ZSIp''@;'; put 'put ''LmlzRW5hYmxlZCgpLHRhYmxlOlR1KG8zLHRoaXMpLGlzRGF0YVZpZXdJbnN0YW5jZTooKT0+clAodGhpcy5ob3QpLHByZXZlbnRPdmVyZmxvdzooKT0+dGhpcy5zZXR0aW5ncy5wcmV2ZW50T3ZlcmZsb3cscHJldmVudFdoZWVsOigpPT50aGlzLnNldHRpbmdzLnByZXZlbnRXaGVlbCx2aWV3''@;'; put 'put ''cG9ydENvbHVtblJlbmRlcmluZ1RocmVzaG9sZDooKT0+dGhpcy5zZXR0aW5ncy52aWV3cG9ydENvbHVtblJlbmRlcmluZ1RocmVzaG9sZCx2aWV3cG9ydFJvd1JlbmRlcmluZ1RocmVzaG9sZDooKT0+dGhpcy5zZXR0aW5ncy52aWV3cG9ydFJvd1JlbmRlcmluZ1RocmVzaG9sZCxkYXRhOihm''@;'; put 'put ''LHYpPT50aGlzLmhvdC5nZXREYXRhQXRDZWxsKC4uLnRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbEluZGV4KGYsdikpLHRvdGFsUm93czooKT0+dGhpcy5jb3VudFJlbmRlcmFibGVSb3dzKCksdG90YWxDb2x1bW5zOigpPT50aGlzLmNvdW50UmVuZGVyYWJsZUNvbHVtbnMo''@;'; put 'put ''KSxmaXhlZENvbHVtbnNTdGFydDooKT0+dGhpcy5jb3VudE5vdEhpZGRlbkZpeGVkQ29sdW1uc1N0YXJ0KCksZml4ZWRSb3dzVG9wOigpPT50aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRSb3dzVG9wKCksZml4ZWRSb3dzQm90dG9tOigpPT50aGlzLmNvdW50Tm90SGlkZGVuRml4ZWRSb3dzQm90''@;'; put 'put ''dG9tKCksc2hvdWxkUmVuZGVySW5saW5lU3RhcnRPdmVybGF5OigpPT50aGlzLnNldHRpbmdzLmZpeGVkQ29sdW1uc1N0YXJ0PjB8fGwucm93SGVhZGVycygpLmxlbmd0aD4wLHNob3VsZFJlbmRlclRvcE92ZXJsYXk6KCk9PnRoaXMuc2V0dGluZ3MuZml4ZWRSb3dzVG9wPjB8fGwuY29sdW1u''@;'; put 'put ''SGVhZGVycygpLmxlbmd0aD4wLHNob3VsZFJlbmRlckJvdHRvbU92ZXJsYXk6KCk9PnRoaXMuc2V0dGluZ3MuZml4ZWRSb3dzQm90dG9tPjAsbWluU3BhcmVSb3dzOigpPT50aGlzLnNldHRpbmdzLm1pblNwYXJlUm93cyxyZW5kZXJBbGxSb3dzOnRoaXMuc2V0dGluZ3MucmVuZGVyQWxsUm93''@;'; put 'put ''cyxyZW5kZXJBbGxDb2x1bW5zOnRoaXMuc2V0dGluZ3MucmVuZGVyQWxsQ29sdW1ucyxyb3dIZWFkZXJzOigpPT57Y29uc3QgZj1bXTtyZXR1cm4gdGhpcy5ob3QuaGFzUm93SGVhZGVycygpJiZmLnB1c2goKHYsTSk9Pntjb25zdCBEPXY+PTA/dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0''@;'; put 'put ''VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh2KTp2O3RoaXMuYXBwZW5kUm93SGVhZGVyKEQsTSl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJHZXRSb3dIZWFkZXJSZW5kZXJlcnMiLGYpLFZkKGlQLHRoaXMsZi5sZW5ndGgpLHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJmJf''@;'; put 'put ''KHpFLHRoaXMsYTNlKS5jYWxsKHRoaXMpPT09dGhpcy5ob3QuY291bnRDb2xzKCkmJmJfKHpFLHRoaXMscmV0KS5jYWxsKHRoaXMsVHUoaVAsdGhpcykpLGZ9LGNvbHVtbkhlYWRlcnM6KCk9Pntjb25zdCBmPVtdO3JldHVybiB0aGlzLmhvdC5oYXNDb2xIZWFkZXJzKCkmJmYucHVzaCgodixN''@;'; put 'put ''KT0+e2NvbnN0IEQ9dj49MD90aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHYpOnY7dGhpcy5hcHBlbmRDb2xIZWFkZXIoRCxNKX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckdldENvbHVtbkhlYWRlclJlbmRlcmVycyIsZiksVmQoeUss''@;'; put 'put ''dGhpcyxmLmxlbmd0aCksZn0sY29sdW1uV2lkdGg6Zj0+e2NvbnN0IHY9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKTtyZXR1cm4gdGhpcy5ob3QuZ2V0Q29sV2lkdGgobnVsbD09PXY/Zjp2KX0scm93SGVpZ2h0OmY9Pntjb25zdCB2''@;'; put 'put ''PXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZik7cmV0dXJuIHRoaXMuaG90LmdldFJvd0hlaWdodChudWxsPT09dj9mOnYpfSxyb3dIZWlnaHRCeU92ZXJsYXlOYW1lOihmLHYpPT57Y29uc3QgTT10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5n''@;'; put 'put ''ZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGYpLEQ9bnVsbD09PU0/ZjpNO3JldHVybiB0aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5Um93SGVpZ2h0QnlPdmVybGF5TmFtZSIsdGhpcy5ob3QuZ2V0Um93SGVpZ2h0KEQpLEQsdil9LGNlbGxSZW5kZXJlcjooZix2LE0pPT57Y29uc3RbRCxa''@;'; put 'put ''XT10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxJbmRleChmLHYpLG5lPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlHZXRDZWxsQ29vcmRzIixELFosITEsIm1ldGEiKTtsZXQgY2U9RCxiZT1aO0FycmF5LmlzQXJyYXkobmUpJiYoW2NlLGJlXT1uZSk7Y29uc3QgRWU9dGhp''@;'; put 'put ''cy5ob3QuZ2V0Q2VsbE1ldGEoY2UsYmUpLEJlPXRoaXMuaG90LmNvbFRvUHJvcChiZSk7bGV0IHFlPXRoaXMuaG90LmdldERhdGFBdFJvd1Byb3AoY2UsQmUpO3RoaXMuaG90Lmhhc0hvb2soImJlZm9yZVZhbHVlUmVuZGVyIikmJihxZT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVmFsdWVS''@;'; put 'put ''ZW5kZXIiLHFlLEVlKSksdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlbmRlcmVyIixNLEQsWixCZSxxZSxFZSksdGhpcy5ob3QuZ2V0Q2VsbFJlbmRlcmVyKEVlKSh0aGlzLmhvdCxNLEQsWixCZSxxZSxFZSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVuZGVyZXIiLE0sRCxaLEJlLHFl''@;'; put 'put ''LEVlKX0sc2VsZWN0aW9uczp0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LGhpZGVCb3JkZXJPbk1vdXNlRG93bk92ZXI6KCk9PnRoaXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb24sb25XaW5kb3dSZXNpemU6KCk9Pnt0aGlzLmhvdCYmIXRoaXMuaG90LmlzRGVzdHJveWVkJiZ0aGlz''@;'; put 'put ''LmhvdC5yZWZyZXNoRGltZW5zaW9ucygpfSxvbkNvbnRhaW5lckVsZW1lbnRSZXNpemU6KCk9Pnt0aGlzLmhvdCYmIXRoaXMuaG90LmlzRGVzdHJveWVkJiZWNyh0aGlzLmhvdC5yb290RWxlbWVudCkmJnRoaXMuaG90LnJlZnJlc2hEaW1lbnNpb25zKCl9LG9uQ2VsbE1vdXNlRG93bjooZix2''@;'; put 'put ''LE0sRCk9Pntjb25zdCBaPXRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkcyh2KSxuZT17cm93OiExLGNvbHVtbjohMSxjZWxsOiExfTt0aGlzLmhvdC5saXN0ZW4oKSx0aGlzLmFjdGl2ZVd0PUQsVmQoX2csdGhpcywhMCksVmQoeV8sdGhpcyx7eDpmLmNsaWVudFgs''@;'; put 'put ''eTpmLmNsaWVudFl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlT25DZWxsTW91c2VEb3duIixmLFosTSxuZSksIU9tKGYpJiYocjNlKGYse2Nvb3JkczpaLHNlbGVjdGlvbjp0aGlzLmhvdC5zZWxlY3Rpb24sY29udHJvbGxlcjpuZSxjZWxsQ29vcmRzRmFjdG9yeTooY2UsYmUpPT50aGlz''@;'; put 'put ''LmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhjZSxiZSl9KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJPbkNlbGxNb3VzZURvd24iLGYsWixNKSx0aGlzLmFjdGl2ZVd0PXRoaXMuX3d0KX0sb25DZWxsQ29udGV4dE1lbnU6KGYsdixNLEQpPT57Y29uc3QgWj10aGlzLnRyYW5zbGF0ZUZyb21SZW5k''@;'; put 'put ''ZXJhYmxlVG9WaXN1YWxDb29yZHModik7dGhpcy5hY3RpdmVXdD1ELFZkKF9nLHRoaXMsITEpLHRoaXMuaG90LnNlbGVjdGlvbi5pc0luUHJvZ3Jlc3MoKSYmdGhpcy5ob3Quc2VsZWN0aW9uLmZpbmlzaCgpLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVPbkNlbGxDb250ZXh0TWVudSIsZixa''@;'; put 'put ''LE0pLCFPbShmKSYmKHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlck9uQ2VsbENvbnRleHRNZW51IixmLFosTSksdGhpcy5hY3RpdmVXdD10aGlzLl93dCl9LG9uQ2VsbE1vdXNlT3V0OihmLHYsTSxEKT0+e2NvbnN0IFo9dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRz''@;'; put 'put ''KHYpO3RoaXMuYWN0aXZlV3Q9RCx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlT25DZWxsTW91c2VPdXQiLGYsWixNKSwhT20oZikmJih0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJPbkNlbGxNb3VzZU91dCIsZixaLE0pLHRoaXMuYWN0aXZlV3Q9dGhpcy5fd3QpfSxvbkNlbGxNb3VzZU92ZXI6''@;'; put 'put ''KGYsdixNLEQpPT57Y29uc3QgWj10aGlzLnRyYW5zbGF0ZUZyb21SZW5kZXJhYmxlVG9WaXN1YWxDb29yZHModiksbmU9e3JvdzohMSxjb2x1bW46ITEsY2VsbDohMX07dGhpcy5hY3RpdmVXdD1ELHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLGYsWixNLG5lKSwh''@;'; put 'put ''T20oZikmJihUdShfZyx0aGlzKSYmKCFUdSh5Xyx0aGlzKXx8VHUoeV8sdGhpcykueCE9PWYuY2xpZW50WHx8VHUoeV8sdGhpcykueSE9PWYuY2xpZW50WSkmJnIzZShmLHtjb29yZHM6WixzZWxlY3Rpb246dGhpcy5ob3Quc2VsZWN0aW9uLGNvbnRyb2xsZXI6bmUsY2VsbENvb3Jkc0ZhY3Rv''@;'; put 'put ''cnk6KGNlLGJlKT0+dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoY2UsYmUpfSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyT25DZWxsTW91c2VPdmVyIixmLFosTSksdGhpcy5hY3RpdmVXdD10aGlzLl93dCxWZCh5Xyx0aGlzLG51bGwpKX0sb25DZWxsTW91c2VVcDooZix2LE0sRCk9Pntj''@;'; put 'put ''b25zdCBaPXRoaXMudHJhbnNsYXRlRnJvbVJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkcyh2KTt0aGlzLmFjdGl2ZVd0PUQsdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZU9uQ2VsbE1vdXNlVXAiLGYsWixNKSwhT20oZikmJiF0aGlzLmhvdC5pc0Rlc3Ryb3llZCYmKHRoaXMuaG90LnJ1bkhvb2tz''@;'; put 'put ''KCJhZnRlck9uQ2VsbE1vdXNlVXAiLGYsWixNKSx0aGlzLmFjdGl2ZVd0PXRoaXMuX3d0KX0sb25DZWxsQ29ybmVyTW91c2VEb3duOmY9PntmLnByZXZlbnREZWZhdWx0KCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duIixmKX0sb25DZWxsQ29ybmVyRGJs''@;'; put 'put ''Q2xpY2s6Zj0+e2YucHJldmVudERlZmF1bHQoKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJPbkNlbGxDb3JuZXJEYmxDbGljayIsZil9LGJlZm9yZURyYXc6KGYsdik9PnRoaXMuYmVmb3JlUmVuZGVyKGYsdiksb25EcmF3OmY9PnRoaXMuYWZ0ZXJSZW5kZXIoZiksb25CZWZvcmVWaWV3cG9y''@;'; put 'put ''dFNjcm9sbFZlcnRpY2FsbHk6KGYsdik9Pntjb25zdCBNPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLEQ9ZjwwO2xldCBaPWY7cmV0dXJuIER8fChaPU0uZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKSxudWxsIT09Wik/KFo9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVZpZXdwb3J0''@;'; put 'put ''U2Nyb2xsVmVydGljYWxseSIsWix2KSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVmlld3BvcnRTY3JvbGwiKSxEP1o6TS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KFopKTpmfSxvbkJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5OihmLHYpPT57Y29uc3QgTT10aGlzLmhv''@;'; put 'put ''dC5jb2x1bW5JbmRleE1hcHBlcixEPWY8MDtsZXQgWj1mO3JldHVybiBEfHwoWj1NLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZiksbnVsbCE9PVopPyhaPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseSIsWix2KSx0aGlzLmhvdC5ydW5I''@;'; put 'put ''b29rcygiYmVmb3JlVmlld3BvcnRTY3JvbGwiKSxEP1o6TS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KFopKTpmfSxvblNjcm9sbFZlcnRpY2FsbHk6KCk9Pnt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJTY3JvbGxWZXJ0aWNhbGx5IiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2Ny''@;'; put 'put ''b2xsIil9LG9uU2Nyb2xsSG9yaXpvbnRhbGx5OigpPT57dGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5IiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2Nyb2xsIil9LG9uQmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXM6KCk9PnRoaXMuaG90LnJ1bkhvb2tzKCJi''@;'; put 'put ''ZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lcyIpLG9uQmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyOihmLHYsTSk9Pntjb25zdCBEPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLFo9ZjwwO2xldCBuZT1mO1p8fChuZT1ELmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZikpO2NvbnN0IGNl''@;'; put 'put ''PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXIiLG5lLHYsTSk7cmV0dXJuIFo/Y2U6RC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KEQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGNlLDEpKX0sb25CZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFk''@;'; put 'put ''ZXI6KGYsdixNKT0+e2NvbnN0IEQ9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsWj1mPDA7bGV0IG5lPWY7Wnx8KG5lPUQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKSk7Y29uc3QgY2U9dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciIs''@;'; put 'put ''bmUsdixNKTtyZXR1cm4gWj9jZTpELmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoRC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoY2UsMSkpfSxvbkFmdGVyRHJhd1NlbGVjdGlvbjooZix2LE0pPT57bGV0IEQ7Y29uc3RbWixuZV09dGhpcy50cmFuc2xhdGVGcm9tUmVuZGVyYWJsZVRv''@;'; put 'put ''VmlzdWFsSW5kZXgoZix2KSxjZT10aGlzLmhvdC5zZWxlY3Rpb24uZ2V0U2VsZWN0ZWRSYW5nZSgpO2lmKGNlLnNpemUoKT4wKXtjb25zdCBFZT1jZS5wZWVrQnlJbmRleChNPz8wKTtEPVtFZS5mcm9tLnJvdyxFZS5mcm9tLmNvbCxFZS50by5yb3csRWUudG8uY29sXX1yZXR1cm4gdGhpcy5o''@;'; put 'put ''b3QucnVuSG9va3MoImFmdGVyRHJhd1NlbGVjdGlvbiIsWixuZSxELE0pfSxvbkJlZm9yZURyYXdCb3JkZXJzOihmLHYpPT57Y29uc3RbTSxELFosbmVdPWYsY2U9W3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoTSksdGhpcy5ob3QuY29sdW1u''@;'; put 'put ''SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChEKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KFopLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobmUpXTtyZXR1''@;'; put 'put ''cm4gdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZURyYXdCb3JkZXJzIixjZSx2KX0sb25CZWZvcmVUb3VjaFNjcm9sbDooKT0+dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVRvdWNoU2Nyb2xsIiksb25BZnRlck1vbWVudHVtU2Nyb2xsOigpPT50aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJNb21l''@;'; put 'put ''bnR1bVNjcm9sbCIpLG9uTW9kaWZ5Um93SGVhZGVyV2lkdGg6Zj0+dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeVJvd0hlYWRlcldpZHRoIixmKSxvbk1vZGlmeUdldENlbGxDb29yZHM6KGYsdixNLEQpPT57Y29uc3QgWj10aGlzLmhvdC5yb3dJbmRleE1hcHBlcixuZT10aGlzLmhvdC5jb2x1''@;'; put 'put ''bW5JbmRleE1hcHBlcixjZT12Pj0wP25lLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodik6dixiZT1mPj0wP1ouZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKTpmLEVlPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlHZXRDZWxsQ29vcmRzIixiZSxjZSxNLEQpO2lmKEFycmF5''@;'; put 'put ''LmlzQXJyYXkoRWUpKXtjb25zdFtCZSxxZSxudCxsdF09RWU7cmV0dXJuW0JlPj0wP1ouZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChaLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChCZSwxKSk6QmUscWU+PTA/bmUuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChuZS5nZXROZWFy''@;'; put 'put ''ZXN0Tm90SGlkZGVuSW5kZXgocWUsMSkpOnFlLG50Pj0wP1ouZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChaLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChudCwtMSkpOm50LGx0Pj0wP25lLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgobmUuZ2V0TmVhcmVzdE5vdEhpZGRlbklu''@;'; put 'put ''ZGV4KGx0LC0xKSk6bHRdfX0sb25Nb2RpZnlHZXRDb29yZHNFbGVtZW50OihmLHYpPT57Y29uc3QgTT10aGlzLmhvdC5yb3dJbmRleE1hcHBlcixEPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLFo9dj49MD9ELmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodik6dixuZT1mPj0wP00u''@;'; put 'put ''Z2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChmKTpmLGNlPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlHZXRDb29yZHNFbGVtZW50IixuZSxaKTtpZihBcnJheS5pc0FycmF5KGNlKSl7Y29uc3RbYmUsRWVdPWNlO3JldHVybltiZT49MD9NLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5k''@;'; put 'put ''ZXgoTS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYmUsMSkpOmJlLEVlPj0wP0QuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChELmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChFZSwxKSk6RWVdfX0sdmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGU6Zj0+e2xldCB2PXRoaXMuc2V0''@;'; put 'put ''dGluZ3Mudmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQ7aWYoImF1dG8iPT09diYmdGhpcy5zZXR0aW5ncy5maXhlZFJvd3NUb3AmJih2PTEwKSx2PjB8fCJhdXRvIj09PXYpe2NvbnN0IE09dGhpcy5jb3VudFJlbmRlcmFibGVSb3dzKCksRD1mLnN0YXJ0Um93LFo9Zi5lbmRSb3c7aWYoIm51''@;'; put 'put ''bWJlciI9PXR5cGVvZiB2KWYuc3RhcnRSb3c9TWF0aC5tYXgoRC12LDApLGYuZW5kUm93PU1hdGgubWluKFordixNLTEpO2Vsc2UgaWYoImF1dG8iPT09dil7Y29uc3QgbmU9TWF0aC5tYXgoMSxNYXRoLmNlaWwoWi9NKjEyKSk7Zi5zdGFydFJvdz1NYXRoLm1heChELW5lLDApLGYuZW5kUm93''@;'; put 'put ''PU1hdGgubWluKForbmUsTS0xKX19dGhpcy5ob3QucnVuSG9va3MoImFmdGVyVmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGUiLGYpfSx2aWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZTpmPT57bGV0IHY9dGhpcy5zZXR0aW5ncy52aWV3cG9ydENvbHVtblJlbmRlcmluZ09mZnNl''@;'; put 'put ''dDtpZigiYXV0byI9PT12JiZ0aGlzLnNldHRpbmdzLmZpeGVkQ29sdW1uc1N0YXJ0JiYodj0xMCksdj4wfHwiYXV0byI9PT12KXtjb25zdCBNPXRoaXMuY291bnRSZW5kZXJhYmxlQ29sdW1ucygpLEQ9Zi5zdGFydENvbHVtbixaPWYuZW5kQ29sdW1uO2lmKCJudW1iZXIiPT10eXBlb2YgdiYm''@;'; put 'put ''KGYuc3RhcnRDb2x1bW49TWF0aC5tYXgoRC12LDApLGYuZW5kQ29sdW1uPU1hdGgubWluKFordixNLTEpKSwiYXV0byI9PT12KXtjb25zdCBuZT1NYXRoLm1heCgxLE1hdGguY2VpbChaL00qNikpO2Yuc3RhcnRDb2x1bW49TWF0aC5tYXgoRC1uZSwwKSxmLmVuZENvbHVtbj1NYXRoLm1pbiha''@;'; put 'put ''K25lLE0tMSl9fXRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIixmKX0scm93SGVhZGVyV2lkdGg6KCk9PnRoaXMuc2V0dGluZ3Mucm93SGVhZGVyV2lkdGgsY29sdW1uSGVhZGVySGVpZ2h0OigpPT57Y29uc3QgZj10aGlzLmhvdC5ydW5I''@;'; put 'put ''b29rcygibW9kaWZ5Q29sdW1uSGVhZGVySGVpZ2h0Iik7cmV0dXJuIHRoaXMuc2V0dGluZ3MuY29sdW1uSGVhZGVySGVpZ2h0fHxmfX07dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUluaXRXYWxrb250YWJsZSIsbCksdGhpcy5fd3Q9bmV3IHZLKGwpLHRoaXMuYWN0aXZlV3Q9dGhpcy5fd3Q7''@;'; put 'put ''Y29uc3QgYT10aGlzLl93dC53dFRhYmxlLnNwcmVhZGVyLHt3aWR0aDpkLGhlaWdodDpofT10aGlzLmhvdC5yb290RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLnNldExhc3RTaXplKGQsaCksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZWRv''@;'; put 'put ''d24iLGY9PntmLnRhcmdldD09PWEmJjM9PT1mLndoaWNoJiZmLnN0b3BQcm9wYWdhdGlvbigpfSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJjb250ZXh0bWVudSIsZj0+e2YudGFyZ2V0PT09YSYmMz09PWYud2hpY2gmJmYuc3RvcFByb3BhZ2F0aW9uKCl9KSx0aGlz''@;'; put 'put ''LmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuaG90LnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsImNsaWNrIiwoKT0+e3RoaXMuc2V0dGluZ3Mub2JzZXJ2ZURPTVZpc2liaWxpdHkmJnRoaXMuX3d0LmRyYXdJbnRlcnJ1cHRlZCYmKHRoaXMuaG90LmZvcmNlRnVsbFJl''@;'; put 'put ''bmRlcj0hMCx0aGlzLnJlbmRlcigpKX0pfWlzVGV4dFNlbGVjdGlvbkFsbG93ZWQobCl7aWYoX0UobCkpcmV0dXJuITA7Y29uc3QgYT1JbShsLHRoaXMuX3d0Lnd0VGFibGUuc3ByZWFkZXIpO3JldHVybiEhKCEwPT09dGhpcy5zZXR0aW5ncy5mcmFnbWVudFNlbGVjdGlvbiYmYXx8ImNlbGwi''@;'; put 'put ''PT09dGhpcy5zZXR0aW5ncy5mcmFnbWVudFNlbGVjdGlvbiYmdGhpcy5pc1NlbGVjdGVkT25seUNlbGwoKSYmYXx8IXRoaXMuc2V0dGluZ3MuZnJhZ21lbnRTZWxlY3Rpb24mJnRoaXMuaXNDZWxsRWRpdGVkKCkmJnRoaXMuaXNTZWxlY3RlZE9ubHlDZWxsKCkpfWlzTW91c2VEb3duKCl7cmV0''@;'; put 'put ''dXJuIFR1KF9nLHRoaXMpfWlzU2VsZWN0ZWRPbmx5Q2VsbCgpe3ZhciBsLGE7cmV0dXJuIG51bGwhPT0obD1udWxsPT09KGE9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWE/dm9pZCAwOmEuaXNTaW5nbGVDZWxsKCkpJiZ2b2lkIDAhPT1sJiZsfWlzQ2VsbEVk''@;'; put 'put ''aXRlZCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0QWN0aXZlRWRpdG9yKCk7cmV0dXJuIGwmJmwuaXNPcGVuZWQoKX1iZWZvcmVSZW5kZXIobCxhKXtsJiZ0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVmlld1JlbmRlciIsdGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyLGEpfWFmdGVyUmVuZGVyKGwp''@;'; put 'put ''e2wmJnRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclZpZXdSZW5kZXIiLHRoaXMuaG90LmZvcmNlRnVsbFJlbmRlcil9YXBwZW5kUm93SGVhZGVyKGwsYSl7aWYoYS5maXJzdENoaWxkKXtjb25zdCBkPWEuZmlyc3RDaGlsZDtpZighcGEoZCwicmVsYXRpdmUiKSlyZXR1cm4gd3AoYSksdm9pZCB0''@;'; put 'put ''aGlzLmFwcGVuZFJvd0hlYWRlcihsLGEpO3RoaXMudXBkYXRlQ2VsbEhlYWRlcihkLnF1ZXJ5U2VsZWN0b3IoIi5yb3dIZWFkZXIiKSxsLHRoaXMuaG90LmdldFJvd0hlYWRlcil9ZWxzZXtjb25zdHtyb290RG9jdW1lbnQ6ZCxnZXRSb3dIZWFkZXI6aH09dGhpcy5ob3QsZj1kLmNyZWF0ZUVs''@;'; put 'put ''ZW1lbnQoImRpdiIpLHY9ZC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Zi5jbGFzc05hbWU9InJlbGF0aXZlIix2LmNsYXNzTmFtZT0icm93SGVhZGVyIix0aGlzLnVwZGF0ZUNlbGxIZWFkZXIodixsLGgpLGYuYXBwZW5kQ2hpbGQodiksYS5hcHBlbmRDaGlsZChmKX10aGlzLmhvdC5ydW5Ib29r''@;'; put 'put ''cygiYWZ0ZXJHZXRSb3dIZWFkZXIiLGwsYSl9YXBwZW5kQ29sSGVhZGVyKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnRoaXMuaG90LmdldENvbEhlYWRlcixoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJn''@;'; put 'put ''dW1lbnRzWzNdP2FyZ3VtZW50c1szXTowO2NvbnN0IGY9KCk9Pntjb25zdCB2PWw+PTA/dGhpcy5ob3QuZ2V0Q29sdW1uTWV0YShsKS5oZWFkZXJDbGFzc05hbWU6bnVsbDtyZXR1cm4gdj92LnNwbGl0KCIgIik6W119O2lmKGEuZmlyc3RDaGlsZCl7Y29uc3Qgdj1hLmZpcnN0Q2hpbGQ7cGEo''@;'; put 'put ''diwicmVsYXRpdmUiKT8odGhpcy51cGRhdGVDZWxsSGVhZGVyKHYucXVlcnlTZWxlY3RvcigiLmNvbEhlYWRlciIpLGwsZCxoKSx2LmNsYXNzTmFtZT0iIixUaSh2LFsicmVsYXRpdmUiLC4uLmYoKV0pKTood3AoYSksdGhpcy5hcHBlbmRDb2xIZWFkZXIobCxhLGQsaCkpfWVsc2V7Y29uc3R7''@;'; put 'put ''cm9vdERvY3VtZW50OnZ9PXRoaXMuaG90LE09di5jcmVhdGVFbGVtZW50KCJkaXYiKSxEPXYuY3JlYXRlRWxlbWVudCgic3BhbiIpLFo9ZigpO00uY2xhc3NMaXN0LmFkZCgicmVsYXRpdmUiLC4uLlopLEQuY2xhc3NOYW1lPSJjb2xIZWFkZXIiLHRoaXMuc2V0dGluZ3MuYXJpYVRhZ3MmJih2''@;'; put 'put ''YShNLC4uLl9wKCkpLHZhKEQsLi4uX3AoKSkpLHRoaXMudXBkYXRlQ2VsbEhlYWRlcihELGwsZCxoKSxNLmFwcGVuZENoaWxkKEQpLGEuYXBwZW5kQ2hpbGQoTSl9dGhpcy5ob3QucnVuSG9va3MoImFmdGVyR2V0Q29sSGVhZGVyIixsLGEsaCl9dXBkYXRlQ2VsbEhlYWRlcihsLGEsZCl7bGV0''@;'; put 'put ''IGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOjAsZj1hO2NvbnN0IHY9dGhpcy5fd3Qud3RPdmVybGF5cy5nZXRQYXJlbnRPdmVybGF5KGwpfHx0aGlzLl93dDtsLnBhcmVudE5vZGUmJihwYShsLCJjb2xIZWFkZXIiKT9mPXYud3RUYWJs''@;'; put 'put ''ZS5jb2x1bW5GaWx0ZXIuc291cmNlVG9SZW5kZXJlZChhKTpwYShsLCJyb3dIZWFkZXIiKSYmKGY9di53dFRhYmxlLnJvd0ZpbHRlci5zb3VyY2VUb1JlbmRlcmVkKGEpKSksZj4tMT9ONyhsLGQoYSxoKSk6KExtKGwsIlx4YTAiKSxUaShsLCJjb3JuZXJIZWFkZXIiKSl9bWF4aW11bVZpc2li''@;'; put 'put ''bGVFbGVtZW50V2lkdGgobCl7Y29uc3QgZD10aGlzLl93dC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZVdpZHRoKCktbDtyZXR1cm4gZD4wP2Q6MH1tYXhpbXVtVmlzaWJsZUVsZW1lbnRIZWlnaHQobCl7Y29uc3QgZD10aGlzLl93dC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZUhlaWdodCgpLWw7''@;'; put 'put ''cmV0dXJuIGQ+MD9kOjB9c2V0TGFzdFNpemUobCxhKXtWZChfSyx0aGlzLGwpLFZkKHdLLHRoaXMsYSl9Z2V0TGFzdFNpemUoKXtyZXR1cm57d2lkdGg6VHUoX0ssdGhpcyksaGVpZ2h0OlR1KHdLLHRoaXMpfX1nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZVJvdygpe2lmKCF0aGlzLl93dC53dFZp''@;'; put 'put ''ZXdwb3J0LnJvd3NSZW5kZXJDYWxjdWxhdG9yKXJldHVybiBudWxsO2NvbnN0IGw9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsYT1sLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RUYWJsZS5nZXRGaXJzdFJlbmRlcmVkUm93KCkpO3JldHVybiBsLmdldE5lYXJlc3RO''@;'; put 'put ''b3RIaWRkZW5JbmRleChhPz8wLDEpfWdldExhc3RSZW5kZXJlZFZpc2libGVSb3coKXtpZighdGhpcy5fd3Qud3RWaWV3cG9ydC5yb3dzUmVuZGVyQ2FsY3VsYXRvcilyZXR1cm4gbnVsbDtjb25zdCBsPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLGE9bC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJs''@;'; put 'put ''ZUluZGV4KHRoaXMuX3d0Lnd0VGFibGUuZ2V0TGFzdFJlbmRlcmVkUm93KCkpO3JldHVybiBsLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhPz90aGlzLmhvdC5jb3VudFJvd3MoKS0xLC0xKX1nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpe2lmKCF0aGlzLl93dC53dFZpZXdwb3J0''@;'; put 'put ''LmNvbHVtbnNSZW5kZXJDYWxjdWxhdG9yKXJldHVybiBudWxsO2NvbnN0IGw9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsYT1sLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodGhpcy5fd3Qud3RUYWJsZS5nZXRGaXJzdFJlbmRlcmVkQ29sdW1uKCkpO3JldHVybiBsLmdldE5lYXJl''@;'; put 'put ''c3ROb3RIaWRkZW5JbmRleChhPz8wLDEpfWdldExhc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKXtpZighdGhpcy5fd3Qud3RWaWV3cG9ydC5jb2x1bW5zUmVuZGVyQ2FsY3VsYXRvcilyZXR1cm4gbnVsbDtjb25zdCBsPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLGE9bC5nZXRWaXN1YWxG''@;'; put 'put ''cm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0VGFibGUuZ2V0TGFzdFJlbmRlcmVkQ29sdW1uKCkpO3JldHVybiBsLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhPz90aGlzLmhvdC5jb3VudENvbHMoKS0xLC0xKX1nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmhv''@;'; put 'put ''dC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0U2Nyb2xsLmdldEZpcnN0VmlzaWJsZVJvdygpKX1nZXRMYXN0RnVsbHlWaXNpYmxlUm93KCl7cmV0dXJuIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxl''@;'; put 'put ''SW5kZXgodGhpcy5fd3Qud3RTY3JvbGwuZ2V0TGFzdFZpc2libGVSb3coKSl9Z2V0Rmlyc3RGdWxseVZpc2libGVDb2x1bW4oKXtyZXR1cm4gdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh0aGlzLl93dC53dFNjcm9sbC5nZXRGaXJzdFZp''@;'; put 'put ''c2libGVDb2x1bW4oKSl9Z2V0TGFzdEZ1bGx5VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0U2Nyb2xsLmdldExhc3RWaXNpYmxlQ29sdW1uKCkpfWdldEZpcnN0UGFydGlhbGx5''@;'; put 'put ''VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0U2Nyb2xsLmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdygpKX1nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpe3JldHVybiB0aGlzLmhv''@;'; put 'put ''dC5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0U2Nyb2xsLmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCkpfWdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRW''@;'; put 'put ''aXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHRoaXMuX3d0Lnd0U2Nyb2xsLmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpKX1nZXRMYXN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbigpe3JldHVybiB0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJs''@;'; put 'put ''ZUluZGV4KHRoaXMuX3d0Lnd0U2Nyb2xsLmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCkpfWdldENvbHVtbkhlYWRlcnNDb3VudCgpe3JldHVybiBUdSh5Syx0aGlzKX1nZXRSb3dIZWFkZXJzQ291bnQoKXtyZXR1cm4gVHUoaVAsdGhpcyl9Z2V0Vmlld3BvcnRXaWR0aCgpe3JldHVy''@;'; put 'put ''biB0aGlzLl93dC53dFZpZXdwb3J0LmdldFZpZXdwb3J0V2lkdGgoKX1nZXRXb3Jrc3BhY2VXaWR0aCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZVdpZHRoKCl9Z2V0Vmlld3BvcnRIZWlnaHQoKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5nZXRWaWV3cG9y''@;'; put 'put ''dEhlaWdodCgpfWdldFdvcmtzcGFjZUhlaWdodCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0LmdldFdvcmtzcGFjZUhlaWdodCgpfWdldEVsZW1lbnRPdmVybGF5TmFtZShsKXt2YXIgYTtyZXR1cm4obnVsbCE9PShhPXRoaXMuX3d0Lnd0T3ZlcmxheXMuZ2V0UGFyZW50T3ZlcmxheShs''@;'; put 'put ''KSkmJnZvaWQgMCE9PWE/YTp0aGlzLl93dCkud3RUYWJsZS5uYW1lfWdldE92ZXJsYXlCeU5hbWUobCl7cmV0dXJuIHRoaXMuX3d0LmdldE92ZXJsYXlCeU5hbWUobCl9Z2V0QWN0aXZlT3ZlcmxheU5hbWUoKXtyZXR1cm4gdGhpcy5fd3QuYWN0aXZlT3ZlcmxheU5hbWV9aXNWaXNpYmxlKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuX3d0Lnd0VGFibGUuaXNWaXNpYmxlKCl9aGFzVmVydGljYWxTY3JvbGwoKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5oYXNWZXJ0aWNhbFNjcm9sbCgpfWhhc0hvcml6b250YWxTY3JvbGwoKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5oYXNIb3Jpem9udGFs''@;'; put 'put ''U2Nyb2xsKCl9Z2V0VGFibGVXaWR0aCgpe3JldHVybiB0aGlzLl93dC53dFRhYmxlLmdldFdpZHRoKCl9Z2V0VGFibGVIZWlnaHQoKXtyZXR1cm4gdGhpcy5fd3Qud3RUYWJsZS5nZXRIZWlnaHQoKX1nZXRUYWJsZU9mZnNldCgpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0LmdldFdvcmtz''@;'; put 'put ''cGFjZU9mZnNldCgpfWdldFJvd0hlYWRlcldpZHRoKCl7cmV0dXJuIHRoaXMuX3d0Lnd0Vmlld3BvcnQuZ2V0Um93SGVhZGVyV2lkdGgoKX1nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoKX1pc1ZlcnRpY2Fs''@;'; put 'put ''bHlTY3JvbGxhYmxlQnlXaW5kb3coKXtyZXR1cm4gdGhpcy5fd3Qud3RWaWV3cG9ydC5pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKX1pc0hvcml6b250YWxseVNjcm9sbGFibGVCeVdpbmRvdygpe3JldHVybiB0aGlzLl93dC53dFZpZXdwb3J0LmlzSG9yaXpvbnRhbGx5U2Nyb2xs''@;'; put 'put ''YWJsZUJ5V2luZG93KCl9ZGVzdHJveSgpe3RoaXMuX3d0LmRlc3Ryb3koKSx0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCl9fTtfKDEzOTA4KTtjb25zdCBzM2U9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIixDSz1zM2UubGVuZ3RoO2Z1bmN0aW9uIGFQKGMpe2xldCBkLGw9YysxLGE9''@;'; put 'put ''IiI7Zm9yKDtsPjA7KWQ9KGwtMSklQ0ssYT1TdHJpbmcuZnJvbUNoYXJDb2RlKDY1K2QpK2EsbD1wYXJzZUludCgobC1kKS9DSywxMCk7cmV0dXJuIGF9ZnVuY3Rpb24gYWV0KGMpe2xldCBsPTA7aWYoYylmb3IobGV0IGE9MCxkPWMubGVuZ3RoLTE7YTxjLmxlbmd0aDthKz0xLGQtPTEpbCs9''@;'; put 'put ''Q0sqKmQqKHMzZS5pbmRleE9mKGNbYV0pKzEpO3JldHVybiBsLT0xLGx9ZnVuY3Rpb24gc2V0KCl7bGV0IGM9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjEwMCxsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFd''@;'; put 'put ''P2FyZ3VtZW50c1sxXTo0O2NvbnN0IGE9W107bGV0IGQsaDtmb3IoZD0wO2Q8YztkKyspe2NvbnN0IGY9W107Zm9yKGg9MDtoPGw7aCsrKWYucHVzaChhUChoKSsoZCsxKSk7YS5wdXNoKGYpfXJldHVybiBhfWZ1bmN0aW9uIGNldCgpe2xldCBjPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAw''@;'; put 'put ''IT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToxMDAsbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06NDtjb25zdCBhPVtdO2xldCBkLGg7Zm9yKGQ9MDtkPGM7ZCsrKXtjb25zdCBmPXt9O2ZvcihoPTA7aDxsO2grKylmW2Bwcm9wJHto''@;'; put 'put ''fWBdPWFQKGgpKyhkKzEpO2EucHVzaChmKX1yZXR1cm4gYX1mdW5jdGlvbiB1ZXQoYyxsKXtjb25zdCBhPVtdO2xldCBkO2ZvcihsZXQgaD0wO2g8YztoKyspe2Q9W107Zm9yKGxldCBmPTA7ZjxsO2YrKylkLnB1c2goIiIpO2EucHVzaChkKX1yZXR1cm4gYX1mdW5jdGlvbiBTSyhjKXtsZXQg''@;'; put 'put ''bD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCxhPWM7Y29uc3QgZD1bXTtyZXR1cm4oIUFycmF5LmlzQXJyYXkoYyl8fCFBcnJheS5pc0FycmF5KGNbMF0pKSYmKGE9W2NdKSxhLmZvckVhY2goKGgsZik9PntBcnJheS5pc0FycmF5KGgp''@;'; put 'put ''P2guZm9yRWFjaCgodixNKT0+e2QucHVzaChbZitsLE0sdl0pfSk6T2JqZWN0LmtleXMoaCkuZm9yRWFjaCh2PT57ZC5wdXNoKFtmK2wsdixoW3ZdXSl9KX0pLGR9ZnVuY3Rpb24gTUsoYyl7bGV0IGw9MDtyZXR1cm4gQXJyYXkuaXNBcnJheShjKSYmKGNbMF0mJkFycmF5LmlzQXJyYXkoY1sw''@;'; put 'put ''XSk/bD1jWzBdLmxlbmd0aDpjWzBdJiZLYShjWzBdKSYmKGw9UE8oY1swXSkpKSxsfWZ1bmN0aW9uIGwzZShjKXtyZXR1cm4hIShBcnJheS5pc0FycmF5KGMpJiZjLmxlbmd0aCYmYy5ldmVyeShsPT5BcnJheS5pc0FycmF5KGwpKSl9ZnVuY3Rpb24gYzNlKGMpe3JldHVybiEhKEFycmF5Lmlz''@;'; put 'put ''QXJyYXkoYykmJmMubGVuZ3RoJiZjLmV2ZXJ5KGw9PiJvYmplY3QiPT10eXBlb2YgbCYmIUFycmF5LmlzQXJyYXkobCkmJm51bGwhPT1sKSl9ZnVuY3Rpb24gVUUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGRldChjKXt2YXIgbD1mdW5jdGlvbiBoZXQoYyxsKXtpZigib2JqZWN0IiE9dHlw''@;'; put 'put ''ZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0''@;'; put 'put ''dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEw''@;'; put 'put ''LGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IHBldD1jbGFzcyBmZXR7Y29uc3RydWN0b3IobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOltdO1VFKHRoaXMsImhvdCIsdm9pZCAwKSxVRSh0''@;'; put 'put ''aGlzLCJkYXRhIix2b2lkIDApLFVFKHRoaXMsImRhdGFUeXBlIiwiYXJyYXkiKSxVRSh0aGlzLCJjb2xUb1Byb3AiLCgpPT57fSksVUUodGhpcywicHJvcFRvQ29sIiwoKT0+e30pLHRoaXMuaG90PWwsdGhpcy5kYXRhPWF9bW9kaWZ5Um93RGF0YShsKXtsZXQgYTtyZXR1cm4gdGhpcy5ob3Qu''@;'; put 'put ''aGFzSG9vaygibW9kaWZ5Um93RGF0YSIpJiYoYT10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5Um93RGF0YSIsbCkpLHZvaWQgMD09PWF8fE51bWJlci5pc0ludGVnZXIoYSk/dGhpcy5kYXRhW2xdOmF9Z2V0RGF0YSgpe3JldHVybiB0aGlzLmRhdGEmJjAhPT10aGlzLmRhdGEubGVuZ3RoP3Ro''@;'; put 'put ''aXMuZ2V0QnlSYW5nZShudWxsLG51bGwsYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSk6dGhpcy5kYXRhfXNldERhdGEobCl7dGhpcy5kYXRhPWx9Z2V0QXRDb2x1bW4obCl7Y29uc3QgYT1bXTtyZXR1cm4gWW4odGhpcy5kYXRhLChkLGgp''@;'; put 'put ''PT57Y29uc3QgZj10aGlzLmdldEF0Q2VsbChoLGwpO2EucHVzaChmKX0pLGF9Z2V0QXRSb3cobCxhLGQpe2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM107Y29uc3QgZj12b2lkIDA9PT1hJiZ2b2lkIDA9PT1kLHtkYXRhRG90Tm90''@;'; put 'put ''YXRpb246dn09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTtsZXQgTT1udWxsLEQ9bnVsbDtpZihNPXRoaXMubW9kaWZ5Um93RGF0YShsKSxBcnJheS5pc0FycmF5KE0pKUQ9W10sZj9NLmZvckVhY2goKFosbmUpPT57RFtuZV09dGhpcy5nZXRBdFBoeXNpY2FsQ2VsbChsLG5lLE0pfSk6JG8oYSxk''@;'; put 'put ''LFo9PntEW1otYV09dGhpcy5nZXRBdFBoeXNpY2FsQ2VsbChsLFosTSl9KTtlbHNlIGlmKEthKE0pfHxlYyhNKSlpZihEPWg/W106e30sIWZ8fGgpe2NvbnN0IG5lPXRoaXMuY291bnRGaXJzdFJvd0tleXMoKS0xOyRvKDAsbmUsY2U9Pntjb25zdCBiZT10aGlzLmNvbFRvUHJvcChjZSk7aWYo''@;'; put 'put ''Y2U+PShhfHwwKSYmY2U8PShkfHxuZSkmJiFOdW1iZXIuaXNJbnRlZ2VyKGJlKSl7Y29uc3QgRWU9dGhpcy5nZXRBdFBoeXNpY2FsQ2VsbChsLGJlLE0pO2g/RC5wdXNoKEVlKTp2P09PKEQsYmUsRWUpOkRbYmVdPUVlfX0pfWVsc2UgcWEoTSwoWixuZSk9Pntjb25zdCBjZT10aGlzLmdldEF0''@;'; put 'put ''UGh5c2ljYWxDZWxsKGwsbmUsTSk7dj9PTyhELG5lLGNlKTpEW25lXT1jZX0pO3JldHVybiBEfXNldEF0Q2VsbChsLGEsZCl7aWYoIShsPj10aGlzLmNvdW50Um93cygpfHxhPj10aGlzLmNvdW50Rmlyc3RSb3dLZXlzKCkpKXtpZih0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlTb3VyY2VEYXRh''@;'; put 'put ''Iikpe2NvbnN0IGg9UGQoZCk7dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeVNvdXJjZURhdGEiLGwsYSxoLCJzZXQiKSxoLmlzVG91Y2hlZCgpJiYoZD1oLnZhbHVlKX1bIl9fcHJvdG9fXyIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIl0uaW5jbHVkZXMobCl8fChOdW1iZXIuaXNJbnRlZ2Vy''@;'; put 'put ''KGEpP3RoaXMuZGF0YVtsXVthXT1kOk9PKHRoaXMuZGF0YVtsXSxhLGQpKX19Z2V0QXRQaHlzaWNhbENlbGwobCxhLGQpe2xldCBoPW51bGw7aWYoZClpZigic3RyaW5nIj09dHlwZW9mIGEpe2NvbnN0e2RhdGFEb3ROb3RhdGlvbjpmfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO2g9Zj9EMmUo''@;'; put 'put ''ZCxhKTpkW2FdfWVsc2UgaD0iZnVuY3Rpb24iPT10eXBlb2YgYT9hKGQpOmRbYV07aWYodGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5U291cmNlRGF0YSIpKXtjb25zdCBmPVBkKGgpO3RoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlTb3VyY2VEYXRhIixsLGEsZiwiZ2V0IiksZi5pc1RvdWNoZWQo''@;'; put 'put ''KSYmKGg9Zi52YWx1ZSl9cmV0dXJuIGh9Z2V0QXRDZWxsKGwsYSl7Y29uc3QgZD10aGlzLm1vZGlmeVJvd0RhdGEobCk7cmV0dXJuIHRoaXMuZ2V0QXRQaHlzaWNhbENlbGwobCx0aGlzLmNvbFRvUHJvcChhKSxkKX1nZXRCeVJhbmdlKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lk''@;'; put 'put ''IDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGwsYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbCxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0saD0hMSxmPW51''@;'; put 'put ''bGwsdj1udWxsLE09bnVsbCxEPW51bGw7bnVsbD09PWx8fG51bGw9PT1hPyhoPSEwLGY9MCxNPXRoaXMuY291bnRSb3dzKCktMSk6KGY9TWF0aC5taW4obC5yb3csYS5yb3cpLHY9TWF0aC5taW4obC5jb2wsYS5jb2wpLE09TWF0aC5tYXgobC5yb3csYS5yb3cpLEQ9TWF0aC5tYXgobC5jb2ws''@;'; put 'put ''YS5jb2wpKTtjb25zdCBaPVtdO3JldHVybiAkbyhmLE0sbmU9PntaLnB1c2goaD90aGlzLmdldEF0Um93KG5lLHZvaWQgMCx2b2lkIDAsZCk6dGhpcy5nZXRBdFJvdyhuZSx2LEQsZCkpfSksWn1jb3VudFJvd3MoKXtpZih0aGlzLmhvdC5oYXNIb29rKCJtb2RpZnlTb3VyY2VMZW5ndGgiKSl7''@;'; put 'put ''Y29uc3QgbD10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5U291cmNlTGVuZ3RoIik7aWYoTnVtYmVyLmlzSW50ZWdlcihsKSlyZXR1cm4gbH1yZXR1cm4gdGhpcy5kYXRhLmxlbmd0aH1jb3VudEZpcnN0Um93S2V5cygpe3JldHVybiBNSyh0aGlzLmRhdGEpfWRlc3Ryb3koKXt0aGlzLmRhdGE9''@;'; put 'put ''bnVsbCx0aGlzLmhvdD1udWxsfX07XygyMDI5MSk7Y29uc3QgdTNlPXtfbG9jYWxIb29rczpPYmplY3QuY3JlYXRlKG51bGwpLGFkZExvY2FsSG9vayhjLGwpe3JldHVybiB0aGlzLl9sb2NhbEhvb2tzW2NdfHwodGhpcy5fbG9jYWxIb29rc1tjXT1bXSksdGhpcy5fbG9jYWxIb29rc1tjXS5w''@;'; put 'put ''dXNoKGwpLHRoaXN9LHJ1bkxvY2FsSG9va3MoYyxsLGEsZCxoLGYsdil7aWYodGhpcy5fbG9jYWxIb29rc1tjXSl7Y29uc3QgTT10aGlzLl9sb2NhbEhvb2tzW2NdLmxlbmd0aDtmb3IobGV0IEQ9MDtEPE07RCsrKVJPKHRoaXMuX2xvY2FsSG9va3NbY11bRF0sdGhpcyxsLGEsZCxoLGYsdil9''@;'; put 'put ''fSxjbGVhckxvY2FsSG9va3MoKXtyZXR1cm4gdGhpcy5fbG9jYWxIb29rcz17fSx0aGlzfX07Q3AodTNlLCJNSVhJTl9OQU1FIiwibG9jYWxIb29rcyIse3dyaXRhYmxlOiExLGVudW1lcmFibGU6ITF9KTtjb25zdCBfMT11M2U7ZnVuY3Rpb24gZDNlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlv''@;'; put 'put ''biBtZXQoYyl7dmFyIGw9ZnVuY3Rpb24gdmV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0''@;'; put 'put ''dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBj''@;'; put 'put ''P09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBxN3tjb25zdHJ1Y3Rvcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3Vt''@;'; put 'put ''ZW50c1swXTpudWxsO2QzZSh0aGlzLCJpbmRleGVkVmFsdWVzIixbXSksZDNlKHRoaXMsImluaXRWYWx1ZU9yRm4iLHZvaWQgMCksdGhpcy5pbml0VmFsdWVPckZuPWx9Z2V0VmFsdWVzKCl7cmV0dXJuIHRoaXMuaW5kZXhlZFZhbHVlc31nZXRWYWx1ZUF0SW5kZXgobCl7Y29uc3QgYT10aGlz''@;'; put 'put ''LmluZGV4ZWRWYWx1ZXM7aWYobDxhLmxlbmd0aClyZXR1cm4gYVtsXX1zZXRWYWx1ZXMobCl7dGhpcy5pbmRleGVkVmFsdWVzPWwuc2xpY2UoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpfXNldFZhbHVlQXRJbmRleChsLGEpe3JldHVybiBsPHRoaXMuaW5kZXhlZFZhbHVlcy5sZW5n''@;'; put 'put ''dGgmJih0aGlzLmluZGV4ZWRWYWx1ZXNbbF09YSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpLCEwKX1jbGVhcigpe3RoaXMuc2V0RGVmYXVsdFZhbHVlcygpfWdldExlbmd0aCgpe3JldHVybiB0aGlzLmdldFZhbHVlcygpLmxlbmd0aH1zZXREZWZhdWx0VmFsdWVzKCl7bGV0IGw9YXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuaW5kZXhlZFZhbHVlcy5sZW5ndGg7dGhpcy5pbmRleGVkVmFsdWVzLmxlbmd0aD0wLGVjKHRoaXMuaW5pdFZhbHVlT3JGbik/JG8obC0xLGE9PnRoaXMuaW5kZXhlZFZhbHVlcy5wdXNoKHRo''@;'; put 'put ''aXMuaW5pdFZhbHVlT3JGbihhKSkpOiRvKGwtMSwoKT0+dGhpcy5pbmRleGVkVmFsdWVzLnB1c2godGhpcy5pbml0VmFsdWVPckZuKSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiKX1pbml0KGwpe3JldHVybiB0aGlzLnNldERlZmF1bHRWYWx1ZXMobCksdGhpcy5ydW5Mb2NhbEhvb2tz''@;'; put 'put ''KCJpbml0IiksdGhpc31pbnNlcnQoKXt0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIpfXJlbW92ZSgpe3RoaXMucnVuTG9jYWxIb29rcygiY2hhbmdlIil9ZGVzdHJveSgpe3RoaXMuY2xlYXJMb2NhbEhvb2tzKCksdGhpcy5pbmRleGVkVmFsdWVzPW51bGwsdGhpcy5pbml0VmFsdWVPckZu''@;'; put 'put ''PW51bGx9fWZ1bmN0aW9uIHhLKGMsbCxhKXtyZXR1cm5bLi4uYy5zbGljZSgwLGwpLC4uLmEsLi4uYy5zbGljZShsKV19ZnVuY3Rpb24gWkUoYyxsKXtyZXR1cm4gQW0oYyxhPT4hMT09PWwuaW5jbHVkZXMoYSkpfWZ1bmN0aW9uIEVLKGMsbCl7cmV0dXJuIHlzKGMsYT0+YS1sLmZpbHRlcihk''@;'; put 'put ''PT5kPGEpLmxlbmd0aCl9ZnVuY3Rpb24gVEsoYyxsKXtjb25zdCBhPWxbMF0sZD1sLmxlbmd0aDtyZXR1cm4geXMoYyxoPT5oPj1hP2grZDpoKX14bChxNyxfMSk7Y2xhc3MgaDNlIGV4dGVuZHMgcTd7Y29uc3RydWN0b3IoKXtzdXBlcihsPT5sKX1pbnNlcnQobCxhKXtjb25zdCBkPVRLKHRo''@;'; put 'put ''aXMuaW5kZXhlZFZhbHVlcyxhKTt0aGlzLmluZGV4ZWRWYWx1ZXM9eEsoZCxsLGEpLHN1cGVyLmluc2VydChsLGEpfXJlbW92ZShsKXtjb25zdCBhPVpFKHRoaXMuaW5kZXhlZFZhbHVlcyxsKTt0aGlzLmluZGV4ZWRWYWx1ZXM9RUsoYSxsKSxzdXBlci5yZW1vdmUobCl9fWZ1bmN0aW9uIEFL''@;'; put 'put ''KGMsbCxhLGQpe2NvbnN0IGg9YS5sZW5ndGg/YVswXTp2b2lkIDA7cmV0dXJuWy4uLmMuc2xpY2UoMCxoKSwuLi5hLm1hcCgoZix2KT0+ZWMoZCk/ZChmLHYpOmQpLC4uLnZvaWQgMD09PWg/W106Yy5zbGljZShoKV19ZnVuY3Rpb24ga0soYyxsKXtyZXR1cm4gQW0oYywoYSxkKT0+ITE9PT1s''@;'; put 'put ''LmluY2x1ZGVzKGQpKX1jbGFzcyB6bSBleHRlbmRzIHE3e2luc2VydChsLGEpe3RoaXMuaW5kZXhlZFZhbHVlcz1BSyh0aGlzLmluZGV4ZWRWYWx1ZXMsMCxhLHRoaXMuaW5pdFZhbHVlT3JGbiksc3VwZXIuaW5zZXJ0KGwsYSl9cmVtb3ZlKGwpe3RoaXMuaW5kZXhlZFZhbHVlcz1rSyh0aGlz''@;'; put 'put ''LmluZGV4ZWRWYWx1ZXMsbCksc3VwZXIucmVtb3ZlKGwpfX1jbGFzcyBzUCBleHRlbmRzIHpte2NvbnN0cnVjdG9yKCl7c3VwZXIoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSl9Z2V0SGlkZGVuSW5kZXhlcygpe3JldHVybiBxdSh0aGlz''@;'; put 'put ''LmdldFZhbHVlcygpLChsLGEsZCk9PihhJiZsLnB1c2goZCksbCksW10pfX1jbGFzcyBsUCBleHRlbmRzIHE3e2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBiZXQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHlldChjKXt2YXIgbD1mdW5jdGlvbiBfZXQoYyxs''@;'; put 'put ''KXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRv''@;'; put 'put ''UHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFs''@;'; put 'put ''dWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJvcmRlck9mSW5kZXhlcyIsW10pfWdldFZhbHVlcygpe3JldHVybiB0aGlzLm9yZGVyT2ZJbmRleGVzLm1hcChsPT50aGlzLmluZGV4ZWRWYWx1ZXNbbF0pfXNldFZhbHVlcyhs''@;'; put 'put ''KXt0aGlzLm9yZGVyT2ZJbmRleGVzPVsuLi5BcnJheShsLmxlbmd0aCkua2V5cygpXSxzdXBlci5zZXRWYWx1ZXMobCl9c2V0VmFsdWVBdEluZGV4KGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnRoaXMub3JkZXJPZklu''@;'; put 'put ''ZGV4ZXMubGVuZ3RoO3JldHVybiBsPHRoaXMuaW5kZXhlZFZhbHVlcy5sZW5ndGgmJih0aGlzLmluZGV4ZWRWYWx1ZXNbbF09YSwhMT09PXRoaXMub3JkZXJPZkluZGV4ZXMuaW5jbHVkZXMobCkmJnRoaXMub3JkZXJPZkluZGV4ZXMuc3BsaWNlKGQsMCxsKSx0aGlzLnJ1bkxvY2FsSG9va3Mo''@;'; put 'put ''ImNoYW5nZSIpLCEwKX1jbGVhclZhbHVlKGwpe3RoaXMub3JkZXJPZkluZGV4ZXM9WkUodGhpcy5vcmRlck9mSW5kZXhlcyxbbF0pLGVjKHRoaXMuaW5pdFZhbHVlT3JGbik/c3VwZXIuc2V0VmFsdWVBdEluZGV4KGwsdGhpcy5pbml0VmFsdWVPckZuKGwpKTpzdXBlci5zZXRWYWx1ZUF0SW5k''@;'; put 'put ''ZXgobCx0aGlzLmluaXRWYWx1ZU9yRm4pfWdldExlbmd0aCgpe3JldHVybiB0aGlzLm9yZGVyT2ZJbmRleGVzLmxlbmd0aH1zZXREZWZhdWx0VmFsdWVzKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuaW5kZXhlZFZh''@;'; put 'put ''bHVlcy5sZW5ndGg7dGhpcy5vcmRlck9mSW5kZXhlcy5sZW5ndGg9MCxzdXBlci5zZXREZWZhdWx0VmFsdWVzKGwpfWluc2VydChsLGEpe3RoaXMuaW5kZXhlZFZhbHVlcz1BSyh0aGlzLmluZGV4ZWRWYWx1ZXMsMCxhLHRoaXMuaW5pdFZhbHVlT3JGbiksdGhpcy5vcmRlck9mSW5kZXhlcz1U''@;'; put 'put ''Syh0aGlzLm9yZGVyT2ZJbmRleGVzLGEpLHN1cGVyLmluc2VydChsLGEpfXJlbW92ZShsKXt0aGlzLmluZGV4ZWRWYWx1ZXM9a0sodGhpcy5pbmRleGVkVmFsdWVzLGwpLHRoaXMub3JkZXJPZkluZGV4ZXM9WkUodGhpcy5vcmRlck9mSW5kZXhlcyxsKSx0aGlzLm9yZGVyT2ZJbmRleGVzPUVL''@;'; put 'put ''KHRoaXMub3JkZXJPZkluZGV4ZXMsbCksc3VwZXIucmVtb3ZlKGwpfWdldEVudHJpZXMoKXtyZXR1cm4gdGhpcy5vcmRlck9mSW5kZXhlcy5tYXAobD0+W2wsdGhpcy5nZXRWYWx1ZUF0SW5kZXgobCldKX19Y2xhc3MgV0UgZXh0ZW5kcyB6bXtjb25zdHJ1Y3Rvcigpe3N1cGVyKGFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0pfWdldFRyaW1tZWRJbmRleGVzKCl7cmV0dXJuIHF1KHRoaXMuZ2V0VmFsdWVzKCksKGwsYSxkKT0+KGEmJmwucHVzaChkKSxsKSxbXSl9fWNvbnN0IGYzZT1uZXcgTWFwKFtbImhpZGluZyIsc1BdLFsiaW5k''@;'; put 'put ''ZXgiLHE3XSxbImxpbmtlZFBoeXNpY2FsSW5kZXhUb1ZhbHVlIixsUF0sWyJwaHlzaWNhbEluZGV4VG9WYWx1ZSIsem1dLFsidHJpbW1pbmciLFdFXV0pO2xldCBESz0wO2NsYXNzIElLe2NvbnN0cnVjdG9yKCl7IWZ1bmN0aW9uIENldChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gTWV0KGMp''@;'; put 'put ''e3ZhciBsPWZ1bmN0aW9uIHhldChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Ro''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsImNvbGxlY3Rpb24iLG5ldyBNYXApfXJlZ2lzdGVyKGwsYSl7ITE9PT10aGlzLmNvbGxlY3Rpb24uaGFzKGwpJiYodGhpcy5jb2xsZWN0''@;'; put 'put ''aW9uLnNldChsLGEpLGEuYWRkTG9jYWxIb29rKCJjaGFuZ2UiLCgpPT50aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsYSkpLERLKz0xKX11bnJlZ2lzdGVyKGwpe2NvbnN0IGE9dGhpcy5jb2xsZWN0aW9uLmdldChsKTtGbyhhKSYmKGEuZGVzdHJveSgpLHRoaXMuY29sbGVjdGlvbi5kZWxl''@;'; put 'put ''dGUobCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGEpLERLLT0xKX11bnJlZ2lzdGVyQWxsKCl7dGhpcy5jb2xsZWN0aW9uLmZvckVhY2goKGwsYSk9PnRoaXMudW5yZWdpc3RlcihhKSksdGhpcy5jb2xsZWN0aW9uLmNsZWFyKCl9Z2V0KGwpe3JldHVybiBtYyhsKT9BcnJheS5mcm9t''@;'; put 'put ''KHRoaXMuY29sbGVjdGlvbi52YWx1ZXMoKSk6dGhpcy5jb2xsZWN0aW9uLmdldChsKX1nZXRMZW5ndGgoKXtyZXR1cm4gdGhpcy5jb2xsZWN0aW9uLnNpemV9cmVtb3ZlRnJvbUV2ZXJ5KGwpe3RoaXMuY29sbGVjdGlvbi5mb3JFYWNoKGE9PnthLnJlbW92ZShsKX0pfWluc2VydFRvRXZlcnko''@;'; put 'put ''bCxhKXt0aGlzLmNvbGxlY3Rpb24uZm9yRWFjaChkPT57ZC5pbnNlcnQobCxhKX0pfWluaXRFdmVyeShsKXt0aGlzLmNvbGxlY3Rpb24uZm9yRWFjaChhPT57YS5pbml0KGwpfSl9fWZ1bmN0aW9uIFJLKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBUZXQoYyl7dmFyIGw9ZnVuY3Rpb24gQWV0''@;'; put 'put ''KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigi''@;'; put 'put ''QEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGws''@;'; put 'put ''e3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY314bChJSyxfMSk7Y2xhc3MgcDNlIGV4dGVuZHMgSUt7Y29uc3RydWN0b3IobCxhKXtzdXBlcigpLFJLKHRoaXMsIm1lcmdlZFZhbHVlc0NhY2hlIixbXSksUksodGhpcywiYWdncmVn''@;'; put 'put ''YXRpb25GdW5jdGlvbiIsdm9pZCAwKSxSSyh0aGlzLCJmYWxsYmFja1ZhbHVlIix2b2lkIDApLHRoaXMuYWdncmVnYXRpb25GdW5jdGlvbj1sLHRoaXMuZmFsbGJhY2tWYWx1ZT1hfWdldE1lcmdlZFZhbHVlcygpe2lmKCEwPT09KCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1''@;'; put 'put ''bWVudHNbMF0pfHxhcmd1bWVudHNbMF0pKXJldHVybiB0aGlzLm1lcmdlZFZhbHVlc0NhY2hlO2lmKDA9PT10aGlzLmdldExlbmd0aCgpKXJldHVybltdO2NvbnN0IGE9eXModGhpcy5nZXQoKSxmPT5mLmdldFZhbHVlcygpKSxkPVtdLGg9Rm8oYVswXSkmJmFbMF0ubGVuZ3RofHwwO2Zvcihs''@;'; put 'put ''ZXQgZj0wO2Y8aDtmKz0xKXtjb25zdCB2PVtdO2ZvcihsZXQgTT0wO008dGhpcy5nZXRMZW5ndGgoKTtNKz0xKXYucHVzaChhW01dW2ZdKTtkLnB1c2godil9cmV0dXJuIHlzKGQsdGhpcy5hZ2dyZWdhdGlvbkZ1bmN0aW9uKX1nZXRNZXJnZWRWYWx1ZUF0SW5kZXgobCxhKXtjb25zdCBkPXRo''@;'; put 'put ''aXMuZ2V0TWVyZ2VkVmFsdWVzKGEpW2xdO3JldHVybiBGbyhkKT9kOnRoaXMuZmFsbGJhY2tWYWx1ZX11cGRhdGVDYWNoZSgpe3RoaXMubWVyZ2VkVmFsdWVzQ2FjaGU9dGhpcy5nZXRNZXJnZWRWYWx1ZXMoITEpfX1mdW5jdGlvbiBnM2UoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBj''@;'; put 'put ''P2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBMSz1uZXcgV2Vha01hcDtjbGFzcyBtM2V7Y29uc3RydWN0b3IoKXshZnVuY3Rp''@;'; put 'put ''b24ga2V0KGMsbCxhKXsoZnVuY3Rpb24gRGV0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX0odGhpcyxMSyxbXSl9c3Vi''@;'; put 'put ''c2NyaWJlKGwpe3JldHVybiB0aGlzLmFkZExvY2FsSG9vaygiY2hhbmdlIixsKSx0aGlzLl93cml0ZShmdW5jdGlvbiBSZXQoYyxsKXtyZXR1cm4gYy5nZXQoZzNlKGMsbCkpfShMSyx0aGlzKSksdGhpc311bnN1YnNjcmliZSgpe3JldHVybiB0aGlzLnJ1bkxvY2FsSG9va3MoInVuc3Vic2Ny''@;'; put 'put ''aWJlIiksdGhpcy5jbGVhckxvY2FsSG9va3MoKSx0aGlzfV93cml0ZShsKXtyZXR1cm4gbC5sZW5ndGg+MCYmdGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGwpLHRoaXN9X3dyaXRlSW5pdGlhbENoYW5nZXMobCl7IWZ1bmN0aW9uIElldChjLGwsYSl7Yy5zZXQoZzNlKGMsbCksYSl9KExL''@;'; put 'put ''LHRoaXMsbCl9fWZ1bmN0aW9uIHYzZShjLGwpe2NvbnN0IGE9W107bGV0IGQ9MCxoPTA7Zm9yKDtkPGMubGVuZ3RoJiZoPGwubGVuZ3RoO2QrKyxoKyspY1tkXSE9PWxbaF0mJmEucHVzaCh7b3A6InJlcGxhY2UiLGluZGV4Omgsb2xkVmFsdWU6Y1tkXSxuZXdWYWx1ZTpsW2hdfSk7Zm9yKDtk''@;'; put 'put ''PGwubGVuZ3RoO2QrKylhLnB1c2goe29wOiJpbnNlcnQiLGluZGV4OmQsb2xkVmFsdWU6dm9pZCAwLG5ld1ZhbHVlOmxbZF19KTtmb3IoO2g8Yy5sZW5ndGg7aCsrKWEucHVzaCh7b3A6InJlbW92ZSIsaW5kZXg6aCxvbGRWYWx1ZTpjW2hdLG5ld1ZhbHVlOnZvaWQgMH0pO3JldHVybiBhfWZ1''@;'; put 'put ''bmN0aW9uIFlFKGMsbCxhKXsoZnVuY3Rpb24gTGV0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBOMihj''@;'; put 'put ''LGwpe3JldHVybiBjLmdldChiM2UoYyxsKSl9ZnVuY3Rpb24gY1AoYyxsLGEpe3JldHVybiBjLnNldChiM2UoYyxsKSxhKSxhfWZ1bmN0aW9uIGIzZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9eGwobTNlLF8xKTt2YXIgdVA9bmV3IFdlYWtNYXAsR0U9bmV3IFdlYWtNYXAsZFA9bmV3IFdlYWtNYXAsaFA9bmV3IFdlYWtNYXAsZlA9bmV3IFdlYWtNYXA7Y2xhc3MgT2V0''@;'; put 'put ''e2NvbnN0cnVjdG9yKCl7bGV0e2luaXRpYWxJbmRleFZhbHVlOmx9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtZRSh0aGlzLHVQLG5ldyBTZXQpLFlFKHRoaXMsR0UsW10pLFlFKHRoaXMsZFAsW10pLFlFKHRoaXMsaFAsITEpLFlF''@;'; put 'put ''KHRoaXMsZlAsITEpLGNQKGZQLHRoaXMsbD8/ITEpfWNyZWF0ZU9ic2VydmVyKCl7Y29uc3QgbD1uZXcgbTNlO3JldHVybiBOMih1UCx0aGlzKS5hZGQobCksbC5hZGRMb2NhbEhvb2soInVuc3Vic2NyaWJlIiwoKT0+e04yKHVQLHRoaXMpLmRlbGV0ZShsKX0pLGwuX3dyaXRlSW5pdGlhbENo''@;'; put 'put ''YW5nZXModjNlKE4yKEdFLHRoaXMpLE4yKGRQLHRoaXMpKSksbH1lbWl0KGwpe2xldCBhPU4yKGRQLHRoaXMpOyghTjIoaFAsdGhpcyl8fE4yKEdFLHRoaXMpLmxlbmd0aCE9PWwubGVuZ3RoKSYmKDA9PT1sLmxlbmd0aD9sPW5ldyBBcnJheShhLmxlbmd0aCkuZmlsbChOMihmUCx0aGlzKSk6''@;'; put 'put ''Y1AoR0UsdGhpcyxuZXcgQXJyYXkobC5sZW5ndGgpLmZpbGwoTjIoZlAsdGhpcykpKSxOMihoUCx0aGlzKXx8KGNQKGhQLHRoaXMsITApLGE9TjIoR0UsdGhpcykpKTtjb25zdCBkPXYzZShhLGwpO04yKHVQLHRoaXMpLmZvckVhY2goaD0+aC5fd3JpdGUoZCkpLGNQKGRQLHRoaXMsbCl9fWZ1''@;'; put 'put ''bmN0aW9uIHExKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBQZXQoYyl7dmFyIGw9ZnVuY3Rpb24gRmV0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRl''@;'; put 'put ''ZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4i''@;'; put 'put ''c3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBPS3tjb25zdHJ1Y3Rvcigpe3ExKHRoaXMsImluZGV4ZXNTZXF1''@;'; put 'put ''ZW5jZSIsbmV3IGgzZSkscTEodGhpcywidHJpbW1pbmdNYXBzQ29sbGVjdGlvbiIsbmV3IHAzZShsPT5sLnNvbWUoYT0+ITA9PT1hKSwhMSkpLHExKHRoaXMsImhpZGluZ01hcHNDb2xsZWN0aW9uIixuZXcgcDNlKGw9Pmwuc29tZShhPT4hMD09PWEpLCExKSkscTEodGhpcywidmFyaW91c01h''@;'; put 'put ''cHNDb2xsZWN0aW9uIixuZXcgSUspLHExKHRoaXMsImhpZGluZ0NoYW5nZXNPYnNlcnZhYmxlIixuZXcgT2V0KHtpbml0aWFsSW5kZXhWYWx1ZTohMX0pKSxxMSh0aGlzLCJub3RUcmltbWVkSW5kZXhlc0NhY2hlIixbXSkscTEodGhpcywibm90SGlkZGVuSW5kZXhlc0NhY2hlIixbXSkscTEo''@;'; put 'put ''dGhpcywiaXNCYXRjaGVkIiwhMSkscTEodGhpcywiaW5kZXhlc1NlcXVlbmNlQ2hhbmdlZCIsITEpLHExKHRoaXMsImluZGV4ZXNDaGFuZ2VTb3VyY2UiLHZvaWQgMCkscTEodGhpcywidHJpbW1lZEluZGV4ZXNDaGFuZ2VkIiwhMSkscTEodGhpcywiaGlkZGVuSW5kZXhlc0NoYW5nZWQiLCEx''@;'; put 'put ''KSxxMSh0aGlzLCJyZW5kZXJhYmxlUGh5c2ljYWxJbmRleGVzQ2FjaGUiLFtdKSxxMSh0aGlzLCJmcm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4ZXNDYWNoZSIsbmV3IE1hcCkscTEodGhpcywiZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXNDYWNoZSIsbmV3IE1hcCksdGhpcy5pbmRleGVz''@;'; put 'put ''U2VxdWVuY2UuYWRkTG9jYWxIb29rKCJjaGFuZ2UiLCgpPT57dGhpcy5pbmRleGVzU2VxdWVuY2VDaGFuZ2VkPSEwLHRoaXMudXBkYXRlQ2FjaGUoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImluZGV4ZXNTZXF1ZW5jZUNoYW5nZSIsdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlKSx0aGlzLnJ1bkxv''@;'; put 'put ''Y2FsSG9va3MoImNoYW5nZSIsdGhpcy5pbmRleGVzU2VxdWVuY2UsbnVsbCl9KSx0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJjaGFuZ2UiLGw9Pnt0aGlzLnRyaW1tZWRJbmRleGVzQ2hhbmdlZD0hMCx0aGlzLnVwZGF0ZUNhY2hlKCksdGhpcy5ydW5Mb2NhbEhv''@;'; put 'put ''b2tzKCJjaGFuZ2UiLGwsdGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uKX0pLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJjaGFuZ2UiLGw9Pnt0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2VkPSEwLHRoaXMudXBkYXRlQ2FjaGUoKSx0aGlzLnJ1bkxvY2FsSG9va3Mo''@;'; put 'put ''ImNoYW5nZSIsbCx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uKX0pLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLmFkZExvY2FsSG9vaygiY2hhbmdlIixsPT57dGhpcy5ydW5Mb2NhbEhvb2tzKCJjaGFuZ2UiLGwsdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24pfSl9c3VzcGVuZE9wZXJh''@;'; put 'put ''dGlvbnMoKXt0aGlzLmlzQmF0Y2hlZD0hMH1yZXN1bWVPcGVyYXRpb25zKCl7dGhpcy5pc0JhdGNoZWQ9ITEsdGhpcy51cGRhdGVDYWNoZSgpfWNyZWF0ZUNoYW5nZXNPYnNlcnZlcihsKXtpZigiaGlkaW5nIiE9PWwpdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBpbmRleCBtYXAgdHlw''@;'; put 'put ''ZSAiJHtsfSIuYCk7cmV0dXJuIHRoaXMuaGlkaW5nQ2hhbmdlc09ic2VydmFibGUuY3JlYXRlT2JzZXJ2ZXIoKX1jcmVhdGVBbmRSZWdpc3RlckluZGV4TWFwKGwsYSxkKXtyZXR1cm4gdGhpcy5yZWdpc3Rlck1hcChsLGZ1bmN0aW9uIHdldChjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEm''@;'; put 'put ''JnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06bnVsbDtpZighZjNlLmhhcyhjKSl0aHJvdyBuZXcgRXJyb3IoYFRoZSBwcm92aWRlZCBtYXAgdHlwZSAoIiR7Y30iKSBkb2VzIG5vdCBleGlzdC5gKTtyZXR1cm4gbmV3KGYzZS5nZXQoYykpKGwpfShhLGQpKX1yZWdpc3Rlck1h''@;'; put 'put ''cChsLGEpe2lmKHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5nZXQobCl8fHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uZ2V0KGwpfHx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi5nZXQobCkpdGhyb3cgRXJyb3IoYE1hcCB3aXRoIG5hbWUgIiR7bH0iIGhhcyBiZWVuIGFscmVhZHkg''@;'; put 'put ''cmVnaXN0ZXJlZC5gKTthIGluc3RhbmNlb2YgV0U/dGhpcy50cmltbWluZ01hcHNDb2xsZWN0aW9uLnJlZ2lzdGVyKGwsYSk6YSBpbnN0YW5jZW9mIHNQP3RoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24ucmVnaXN0ZXIobCxhKTp0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi5yZWdpc3Rlcihs''@;'; put 'put ''LGEpO2NvbnN0IGQ9dGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKTtyZXR1cm4gZD4wJiZhLmluaXQoZCksYX11bnJlZ2lzdGVyTWFwKGwpe3RoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi51bnJlZ2lzdGVyKGwpLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlcihsKSx0aGlz''@;'; put 'put ''LnZhcmlvdXNNYXBzQ29sbGVjdGlvbi51bnJlZ2lzdGVyKGwpfXVucmVnaXN0ZXJBbGwoKXt0aGlzLnRyaW1taW5nTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlckFsbCgpLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24udW5yZWdpc3RlckFsbCgpLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9u''@;'; put 'put ''LnVucmVnaXN0ZXJBbGwoKX1nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleChsKXtjb25zdCBhPXRoaXMubm90VHJpbW1lZEluZGV4ZXNDYWNoZVtsXTtyZXR1cm4gRm8oYSk/YTpudWxsfWdldFBoeXNpY2FsRnJvbVJlbmRlcmFibGVJbmRleChsKXtjb25zdCBhPXRoaXMucmVuZGVyYWJsZVBo''@;'; put 'put ''eXNpY2FsSW5kZXhlc0NhY2hlW2xdO3JldHVybiBGbyhhKT9hOm51bGx9Z2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgobCl7Y29uc3QgYT10aGlzLmZyb21QaHlzaWNhbFRvVmlzdWFsSW5kZXhlc0NhY2hlLmdldChsKTtyZXR1cm4gRm8oYSk/YTpudWxsfWdldFZpc3VhbEZyb21SZW5kZXJh''@;'; put 'put ''YmxlSW5kZXgobCl7cmV0dXJuIHRoaXMuZ2V0VmlzdWFsRnJvbVBoeXNpY2FsSW5kZXgodGhpcy5nZXRQaHlzaWNhbEZyb21SZW5kZXJhYmxlSW5kZXgobCkpfWdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgobCl7Y29uc3QgYT10aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVz''@;'; put 'put ''Q2FjaGUuZ2V0KGwpO3JldHVybiBGbyhhKT9hOm51bGx9Z2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtpZihudWxsPT09dGhpcy5nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRl''@;'; put 'put ''eChsKSlyZXR1cm4gbnVsbDtpZih0aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUuaGFzKGwpKXJldHVybiBsO2NvbnN0IGY9QXJyYXkuZnJvbSh0aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUua2V5cygpKTtsZXQgdj0tMTtyZXR1cm4gdj1hPjA/''@;'; put 'put ''Zi5maW5kSW5kZXgoTT0+TT5sKTpmLnJldmVyc2UoKS5maW5kSW5kZXgoTT0+TTxsKSwtMT09PXY/ZD90aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsLC1hLCExKTpudWxsOmZbdl19aW5pdFRvTGVuZ3RoKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVu''@;'; put 'put ''dHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCk7dGhpcy5ub3RUcmltbWVkSW5kZXhlc0NhY2hlPVsuLi5uZXcgQXJyYXkobCkua2V5cygpXSx0aGlzLm5vdEhpZGRlbkluZGV4ZXNDYWNoZT1bLi4ubmV3IEFycmF5KGwpLmtleXMoKV0sdGhpcy5zdXNwZW5kT3Bl''@;'; put 'put ''cmF0aW9ucygpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT0iaW5pdCIsdGhpcy5pbmRleGVzU2VxdWVuY2UuaW5pdChsKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9dm9pZCAwLHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5pbml0RXZlcnkobCksdGhpcy5yZXN1bWVPcGVyYXRpb25z''@;'; put 'put ''KCksdGhpcy5zdXNwZW5kT3BlcmF0aW9ucygpLHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uaW5pdEV2ZXJ5KGwpLHRoaXMudmFyaW91c01hcHNDb2xsZWN0aW9uLmluaXRFdmVyeShsKSx0aGlzLnJlc3VtZU9wZXJhdGlvbnMoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImluaXQiKX1maXRUb0xl''@;'; put 'put ''bmd0aChsKXtjb25zdCBhPXRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCk7aWYobDxhKXtjb25zdCBkPVsuLi5BcnJheSh0aGlzLmdldE51bWJlck9mSW5kZXhlcygpLWwpLmtleXMoKV0ubWFwKGg9PmgrbCk7dGhpcy5yZW1vdmVJbmRleGVzKGQpfWVsc2UgdGhpcy5pbnNlcnRJbmRleGVzKGEs''@;'; put 'put ''bC1hKX1nZXRJbmRleGVzU2VxdWVuY2UoKXtyZXR1cm4gdGhpcy5pbmRleGVzU2VxdWVuY2UuZ2V0VmFsdWVzKCl9c2V0SW5kZXhlc1NlcXVlbmNlKGwpe3ZvaWQgMD09PXRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZSYmKHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT0idXBkYXRlIiksdGhpcy5p''@;'; put 'put ''bmRleGVzU2VxdWVuY2Uuc2V0VmFsdWVzKGwpLCJ1cGRhdGUiPT09dGhpcy5pbmRleGVzQ2hhbmdlU291cmNlJiYodGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPXZvaWQgMCl9Z2V0Tm90VHJpbW1lZEluZGV4ZXMoKXtyZXR1cm4hMD09PSghKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09''@;'; put 'put ''YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdKT90aGlzLm5vdFRyaW1tZWRJbmRleGVzQ2FjaGU6dGhpcy5nZXRJbmRleGVzU2VxdWVuY2UoKS5maWx0ZXIoZD0+ITE9PT10aGlzLmlzVHJpbW1lZChkKSl9Z2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKXtyZXR1cm4gdGhpcy5nZXROb3RU''@;'; put 'put ''cmltbWVkSW5kZXhlcygpLmxlbmd0aH1nZXROb3RIaWRkZW5JbmRleGVzKCl7cmV0dXJuITA9PT0oIShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSk/dGhpcy5ub3RIaWRkZW5JbmRleGVzQ2FjaGU6dGhpcy5nZXRJbmRleGVzU2VxdWVu''@;'; put 'put ''Y2UoKS5maWx0ZXIoZD0+ITE9PT10aGlzLmlzSGlkZGVuKGQpKX1nZXROb3RIaWRkZW5JbmRleGVzTGVuZ3RoKCl7cmV0dXJuIHRoaXMuZ2V0Tm90SGlkZGVuSW5kZXhlcygpLmxlbmd0aH1nZXRSZW5kZXJhYmxlSW5kZXhlcygpe3JldHVybiEwPT09KCEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2''@;'; put 'put ''b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF0pP3RoaXMucmVuZGVyYWJsZVBoeXNpY2FsSW5kZXhlc0NhY2hlOnRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4ZXMoKS5maWx0ZXIoZD0+ITE9PT10aGlzLmlzSGlkZGVuKGQpKX1nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmdldFJlbmRlcmFibGVJbmRleGVzKCkubGVuZ3RofWdldE51bWJlck9mSW5kZXhlcygpe3JldHVybiB0aGlzLmdldEluZGV4ZXNTZXF1ZW5jZSgpLmxlbmd0aH1tb3ZlSW5kZXhlcyhsLGEpeyJudW1iZXIiPT10eXBlb2YgbCYmKGw9W2xdKTtjb25zdCBkPXlzKGwsWj0+dGhp''@;'; put 'put ''cy5nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleChaKSksaD10aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCksZj1sLmxlbmd0aCx2PVpFKHRoaXMuZ2V0SW5kZXhlc1NlcXVlbmNlKCksZCksTT12LmZpbHRlcihaPT4hMT09PXRoaXMuaXNUcmltbWVkKFopKTtsZXQgRD12LmluZGV4''@;'; put 'put ''T2YoTVtNLmxlbmd0aC0xXSkrMTthK2Y8aCYmKEQ9di5pbmRleE9mKE1bYV0pKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9Im1vdmUiLHRoaXMuc2V0SW5kZXhlc1NlcXVlbmNlKHhLKHYsRCxkKSksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPXZvaWQgMH1pc1RyaW1tZWQobCl7cmV0dXJu''@;'; put 'put ''IHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5nZXRNZXJnZWRWYWx1ZUF0SW5kZXgobCl9aXNIaWRkZW4obCl7cmV0dXJuIHRoaXMuaGlkaW5nTWFwc0NvbGxlY3Rpb24uZ2V0TWVyZ2VkVmFsdWVBdEluZGV4KGwpfWluc2VydEluZGV4ZXMobCxhKXtjb25zdCBkPXRoaXMuZ2V0Tm90VHJp''@;'; put 'put ''bW1lZEluZGV4ZXMoKVtsXSxoPUZvKGQpP2Q6dGhpcy5nZXROdW1iZXJPZkluZGV4ZXMoKSxmPXRoaXMuZ2V0SW5kZXhlc1NlcXVlbmNlKCkuaW5jbHVkZXMoZCk/dGhpcy5nZXRJbmRleGVzU2VxdWVuY2UoKS5pbmRleE9mKGQpOnRoaXMuZ2V0TnVtYmVyT2ZJbmRleGVzKCksdj15cyhuZXcg''@;'; put 'put ''QXJyYXkoYSkuZmlsbChoKSwoTSxEKT0+TStEKTt0aGlzLnN1c3BlbmRPcGVyYXRpb25zKCksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPSJpbnNlcnQiLHRoaXMuaW5kZXhlc1NlcXVlbmNlLmluc2VydChmLHYpLHRoaXMuaW5kZXhlc0NoYW5nZVNvdXJjZT12b2lkIDAsdGhpcy50cmltbWlu''@;'; put 'put ''Z01hcHNDb2xsZWN0aW9uLmluc2VydFRvRXZlcnkoZix2KSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLmluc2VydFRvRXZlcnkoZix2KSx0aGlzLnZhcmlvdXNNYXBzQ29sbGVjdGlvbi5pbnNlcnRUb0V2ZXJ5KGYsdiksdGhpcy5yZXN1bWVPcGVyYXRpb25zKCl9cmVtb3ZlSW5kZXhlcyhs''@;'; put 'put ''KXt0aGlzLnN1c3BlbmRPcGVyYXRpb25zKCksdGhpcy5pbmRleGVzQ2hhbmdlU291cmNlPSJyZW1vdmUiLHRoaXMuaW5kZXhlc1NlcXVlbmNlLnJlbW92ZShsKSx0aGlzLmluZGV4ZXNDaGFuZ2VTb3VyY2U9dm9pZCAwLHRoaXMudHJpbW1pbmdNYXBzQ29sbGVjdGlvbi5yZW1vdmVGcm9tRXZl''@;'; put 'put ''cnkobCksdGhpcy5oaWRpbmdNYXBzQ29sbGVjdGlvbi5yZW1vdmVGcm9tRXZlcnkobCksdGhpcy52YXJpb3VzTWFwc0NvbGxlY3Rpb24ucmVtb3ZlRnJvbUV2ZXJ5KGwpLHRoaXMucmVzdW1lT3BlcmF0aW9ucygpfXVwZGF0ZUNhY2hlKCl7KCEwPT09KGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9p''@;'; put 'put ''ZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0pfHwhMT09PXRoaXMuaXNCYXRjaGVkJiYhMD09PSh0aGlzLmluZGV4ZXNTZXF1ZW5jZUNoYW5nZWR8fHRoaXMudHJpbW1lZEluZGV4ZXNDaGFuZ2VkfHx0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2VkKSkmJih0aGlzLnRyaW1taW5nTWFw''@;'; put 'put ''c0NvbGxlY3Rpb24udXBkYXRlQ2FjaGUoKSx0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLnVwZGF0ZUNhY2hlKCksdGhpcy5ub3RUcmltbWVkSW5kZXhlc0NhY2hlPXRoaXMuZ2V0Tm90VHJpbW1lZEluZGV4ZXMoITEpLHRoaXMubm90SGlkZGVuSW5kZXhlc0NhY2hlPXRoaXMuZ2V0Tm90SGlk''@;'; put 'put ''ZGVuSW5kZXhlcyghMSksdGhpcy5yZW5kZXJhYmxlUGh5c2ljYWxJbmRleGVzQ2FjaGU9dGhpcy5nZXRSZW5kZXJhYmxlSW5kZXhlcyghMSksdGhpcy5jYWNoZUZyb21QaHlzaWNhbFRvVmlzdWFsSW5kZXhlcygpLHRoaXMuY2FjaGVGcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlcygpLHRo''@;'; put 'put ''aXMuaGlkZGVuSW5kZXhlc0NoYW5nZWQmJnRoaXMuaGlkaW5nQ2hhbmdlc09ic2VydmFibGUuZW1pdCh0aGlzLmhpZGluZ01hcHNDb2xsZWN0aW9uLmdldE1lcmdlZFZhbHVlcygpKSx0aGlzLnJ1bkxvY2FsSG9va3MoImNhY2hlVXBkYXRlZCIse2luZGV4ZXNTZXF1ZW5jZUNoYW5nZWQ6dGhp''@;'; put 'put ''cy5pbmRleGVzU2VxdWVuY2VDaGFuZ2VkLHRyaW1tZWRJbmRleGVzQ2hhbmdlZDp0aGlzLnRyaW1tZWRJbmRleGVzQ2hhbmdlZCxoaWRkZW5JbmRleGVzQ2hhbmdlZDp0aGlzLmhpZGRlbkluZGV4ZXNDaGFuZ2VkfSksdGhpcy5pbmRleGVzU2VxdWVuY2VDaGFuZ2VkPSExLHRoaXMudHJpbW1l''@;'; put 'put ''ZEluZGV4ZXNDaGFuZ2VkPSExLHRoaXMuaGlkZGVuSW5kZXhlc0NoYW5nZWQ9ITEpfWNhY2hlRnJvbVBoeXNpY2FsVG9WaXN1YWxJbmRleGVzKCl7Y29uc3QgbD10aGlzLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCk7dGhpcy5mcm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4ZXNDYWNoZS5j''@;'; put 'put ''bGVhcigpO2ZvcihsZXQgYT0wO2E8bDthKz0xKXtjb25zdCBkPXRoaXMuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgoYSk7dGhpcy5mcm9tUGh5c2ljYWxUb1Zpc3VhbEluZGV4ZXNDYWNoZS5zZXQoZCxhKX19Y2FjaGVGcm9tVmlzdWFsVG9SZW5kZXJhYmxlSW5kZXhlcygpe2NvbnN0IGw9''@;'; put 'put ''dGhpcy5nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpO3RoaXMuZnJvbVZpc3VhbFRvUmVuZGVyYWJsZUluZGV4ZXNDYWNoZS5jbGVhcigpO2ZvcihsZXQgYT0wO2E8bDthKz0xKXtjb25zdCBkPXRoaXMuZ2V0UGh5c2ljYWxGcm9tUmVuZGVyYWJsZUluZGV4KGEpLGg9dGhpcy5nZXRWaXN1''@;'; put 'put ''YWxGcm9tUGh5c2ljYWxJbmRleChkKTt0aGlzLmZyb21WaXN1YWxUb1JlbmRlcmFibGVJbmRleGVzQ2FjaGUuc2V0KGgsYSl9fX1mdW5jdGlvbiB5M2UoYyl7Y29uc3QgYT0vXihbYS16QS1aXXsyfSktKFthLXpBLVpdezJ9KSQvLmV4ZWMoYyk7cmV0dXJuIGE/YCR7YVsxXS50b0xvd2VyQ2Fz''@;'; put 'put ''ZSgpfS0ke2FbMl0udG9VcHBlckNhc2UoKX1gOmN9ZnVuY3Rpb24gXzNlKGMpe0ZvKGMpJiZFJChmbGBMYW5ndWFnZSB3aXRoIGNvZGUgIiR7Y30iIHdhcyBub3QgZm91bmQuIFlvdSBzaG91bGQgcmVnaXN0ZXIgcGFydGljdWxhciBsYW5ndWFnZVx4MjAKICAgIGJlZm9yZSB1c2luZyBpdC4g''@;'; put 'put ''UmVhZCBtb3JlIGFib3V0IHRoaXMgaXNzdWUgYXQ6IGh0dHBzOi8vZG9jcy5oYW5kc29udGFibGUuY29tL2kxOG4vbWlzc2luZy1sYW5ndWFnZS1jb2RlLmApfXhsKE9LLF8xKTtjb25zdHtyZWdpc3RlcjpWZXQsZ2V0VmFsdWVzOkJldH09UWYoInBocmFzZUZvcm1hdHRlcnMiKTshZnVuY3Rp''@;'; put 'put ''b24gamV0KGMsbCl7VmV0KGMsbCl9KCJwbHVyYWxpemUiLGZ1bmN0aW9uIE5ldChjLGwpe3JldHVybiBBcnJheS5pc0FycmF5KGMpJiZOdW1iZXIuaXNJbnRlZ2VyKGwpP2NbbF06Y30pO2NvbnN0IHczZT0iQ29udGV4dE1lbnU6aXRlbXMiLFBLPWAke3czZX0ubm9JdGVtc2AsRks9YCR7dzNl''@;'; put 'put ''fS5pbnNlcnRSb3dBYm92ZWAsSEs9YCR7dzNlfS5pbnNlcnRSb3dCZWxvd2AsTks9YCR7dzNlfS5pbnNlcnRDb2x1bW5PblRoZUxlZnRgLFZLPWAke3czZX0uaW5zZXJ0Q29sdW1uT25UaGVSaWdodGAsQks9YCR7dzNlfS5yZW1vdmVSb3dgLGpLPWAke3czZX0ucmVtb3ZlQ29sdW1uYCx6Sz1g''@;'; put 'put ''JHt3M2V9LnVuZG9gLFVLPWAke3czZX0ucmVkb2AscFA9YCR7dzNlfS5yZWFkT25seWAsWks9YCR7dzNlfS5jbGVhckNvbHVtbmAsV0s9YCR7dzNlfS5jb3B5YCxZSz1gJHt3M2V9LmNvcHlXaXRoSGVhZGVyc2AsR0s9YCR7dzNlfS5jb3B5V2l0aEdyb3VwSGVhZGVyc2AsJEs9YCR7dzNlfS5j''@;'; put 'put ''b3B5SGVhZGVyc09ubHlgLEtLPWAke3czZX0uY3V0YCxxSz1gJHt3M2V9LmZyZWV6ZUNvbHVtbmAsWEs9YCR7dzNlfS51bmZyZWV6ZUNvbHVtbmAsSks9YCR7dzNlfS5tZXJnZUNlbGxzYCxRSz1gJHt3M2V9LnVubWVyZ2VDZWxsc2AsZXE9YCR7dzNlfS5hZGRDb21tZW50YCx0cT1gJHt3M2V9''@;'; put 'put ''LmVkaXRDb21tZW50YCxucT1gJHt3M2V9LnJlbW92ZUNvbW1lbnRgLHJxPWAke3czZX0ucmVhZE9ubHlDb21tZW50YCxpcT1gJHt3M2V9LmFsaWduYCxvcT1gJHt3M2V9LmFsaWduLmxlZnRgLGFxPWAke3czZX0uYWxpZ24uY2VudGVyYCxzcT1gJHt3M2V9LmFsaWduLnJpZ2h0YCxscT1gJHt3''@;'; put 'put ''M2V9LmFsaWduLmp1c3RpZnlgLGNxPWAke3czZX0uYWxpZ24udG9wYCx1cT1gJHt3M2V9LmFsaWduLm1pZGRsZWAsZHE9YCR7dzNlfS5hbGlnbi5ib3R0b21gLGhxPWAke3czZX0uYm9yZGVyc2AsZnE9YCR7dzNlfS5ib3JkZXJzLnRvcGAscHE9YCR7dzNlfS5ib3JkZXJzLnJpZ2h0YCxncT1g''@;'; put 'put ''JHt3M2V9LmJvcmRlcnMuYm90dG9tYCxtcT1gJHt3M2V9LmJvcmRlcnMubGVmdGAsdnE9YCR7dzNlfS5ib3JkZXJzLnJlbW92ZWAsYnE9YCR7dzNlfS5uZXN0ZWRIZWFkZXJzLmluc2VydENoaWxkUm93YCx5cT1gJHt3M2V9Lm5lc3RlZEhlYWRlcnMuZGV0YWNoRnJvbVBhcmVudGAsX3E9YCR7''@;'; put 'put ''dzNlfS5oaWRlQ29sdW1uYCx3cT1gJHt3M2V9LnNob3dDb2x1bW5gLENxPWAke3czZX0uaGlkZVJvd2AsU3E9YCR7dzNlfS5zaG93Um93YCxYMT0iRmlsdGVyczoiLFdjPWAke1gxfWNvbmRpdGlvbnNgLGdQPWAke1djfS5ub25lYCxNcT1gJHtXY30uaXNFbXB0eWAseHE9YCR7V2N9LmlzTm90''@;'; put 'put ''RW1wdHlgLEVxPWAke1djfS5pc0VxdWFsVG9gLFRxPWAke1djfS5pc05vdEVxdWFsVG9gLEFxPWAke1djfS5iZWdpbnNXaXRoYCxrcT1gJHtXY30uZW5kc1dpdGhgLERxPWAke1djfS5jb250YWluc2AsSXE9YCR7V2N9LmRvZXNOb3RDb250YWluYCxVZXQ9YCR7V2N9LmJ5VmFsdWVgLFJxPWAk''@;'; put 'put ''e1djfS5ncmVhdGVyVGhhbmAsTHE9YCR7V2N9LmdyZWF0ZXJUaGFuT3JFcXVhbFRvYCxPcT1gJHtXY30ubGVzc1RoYW5gLFBxPWAke1djfS5sZXNzVGhhbk9yRXF1YWxUb2AsRnE9YCR7V2N9LmlzQmV0d2VlbmAsSHE9YCR7V2N9LmlzTm90QmV0d2VlbmAsTnE9YCR7V2N9LmFmdGVyYCxWcT1g''@;'; put 'put ''JHtXY30uYmVmb3JlYCxCcT1gJHtXY30udG9kYXlgLGpxPWAke1djfS50b21vcnJvd2AsenE9YCR7V2N9Lnllc3RlcmRheWAsVXE9YCR7WDF9bGFiZWxzLmZpbHRlckJ5Q29uZGl0aW9uYCxacT1gJHtYMX1sYWJlbHMuZmlsdGVyQnlWYWx1ZWAsV3E9YCR7WDF9bGFiZWxzLmNvbmp1bmN0aW9u''@;'; put 'put ''YCxtUD1gJHtYMX1sYWJlbHMuZGlzanVuY3Rpb25gLHZQPWAke1gxfXZhbHVlcy5ibGFua0NlbGxzYCxZcT1gJHtYMX1idXR0b25zLnNlbGVjdEFsbGAsR3E9YCR7WDF9YnV0dG9ucy5jbGVhcmAsJHE9YCR7WDF9YnV0dG9ucy5va2AsS3E9YCR7WDF9YnV0dG9ucy5jYW5jZWxgLHFxPWAke1gx''@;'; put 'put ''fWJ1dHRvbnMucGxhY2Vob2xkZXIuc2VhcmNoYCxYcT1gJHtYMX1idXR0b25zLnBsYWNlaG9sZGVyLnZhbHVlYCxKcT1gJHtYMX1idXR0b25zLnBsYWNlaG9sZGVyLnNlY29uZFZhbHVlYCxRcT0iQ2hlY2tib3hSZW5kZXJlcjoiLGVYPWAke1FxfWNoZWNrZWRgLHRYPWAke1FxfXVuY2hlY2tl''@;'; put 'put ''ZGAsQzNlPXtsYW5ndWFnZUNvZGU6ImVuLVVTIixbUEtdOiJObyBhdmFpbGFibGUgb3B0aW9ucyIsW0ZLXToiSW5zZXJ0IHJvdyBhYm92ZSIsW0hLXToiSW5zZXJ0IHJvdyBiZWxvdyIsW05LXToiSW5zZXJ0IGNvbHVtbiBsZWZ0IixbVktdOiJJbnNlcnQgY29sdW1uIHJpZ2h0IixbQktdOlsi''@;'; put 'put ''UmVtb3ZlIHJvdyIsIlJlbW92ZSByb3dzIl0sW2pLXTpbIlJlbW92ZSBjb2x1bW4iLCJSZW1vdmUgY29sdW1ucyJdLFt6S106IlVuZG8iLFtVS106IlJlZG8iLFtwUF06IlJlYWQgb25seSIsW1pLXToiQ2xlYXIgY29sdW1uIixbaXFdOiJBbGlnbm1lbnQiLFtvcV06IkxlZnQiLFthcV06IkNl''@;'; put 'put ''bnRlciIsW3NxXToiUmlnaHQiLFtscV06Ikp1c3RpZnkiLFtjcV06IlRvcCIsW3VxXToiTWlkZGxlIixbZHFdOiJCb3R0b20iLFtxS106IkZyZWV6ZSBjb2x1bW4iLFtYS106IlVuZnJlZXplIGNvbHVtbiIsW2hxXToiQm9yZGVycyIsW2ZxXToiVG9wIixbcHFdOiJSaWdodCIsW2dxXToiQm90''@;'; put 'put ''dG9tIixbbXFdOiJMZWZ0IixbdnFdOiJSZW1vdmUgYm9yZGVyKHMpIixbZXFdOiJBZGQgY29tbWVudCIsW3RxXToiRWRpdCBjb21tZW50IixbbnFdOiJEZWxldGUgY29tbWVudCIsW3JxXToiUmVhZC1vbmx5IGNvbW1lbnQiLFtKS106Ik1lcmdlIGNlbGxzIixbUUtdOiJVbm1lcmdlIGNlbGxz''@;'; put 'put ''IixbV0tdOiJDb3B5IixbWUtdOlsiQ29weSB3aXRoIGhlYWRlciIsIkNvcHkgd2l0aCBoZWFkZXJzIl0sW0dLXTpbIkNvcHkgd2l0aCBncm91cCBoZWFkZXIiLCJDb3B5IHdpdGggZ3JvdXAgaGVhZGVycyJdLFskS106WyJDb3B5IGhlYWRlciBvbmx5IiwiQ29weSBoZWFkZXJzIG9ubHkiXSxb''@;'; put 'put ''S0tdOiJDdXQiLFticV06Ikluc2VydCBjaGlsZCByb3ciLFt5cV06IkRldGFjaCBmcm9tIHBhcmVudCIsW19xXTpbIkhpZGUgY29sdW1uIiwiSGlkZSBjb2x1bW5zIl0sW3dxXTpbIlNob3cgY29sdW1uIiwiU2hvdyBjb2x1bW5zIl0sW0NxXTpbIkhpZGUgcm93IiwiSGlkZSByb3dzIl0sW1Nx''@;'; put 'put ''XTpbIlNob3cgcm93IiwiU2hvdyByb3dzIl0sW2dQXToiTm9uZSIsW01xXToiSXMgZW1wdHkiLFt4cV06IklzIG5vdCBlbXB0eSIsW0VxXToiSXMgZXF1YWwgdG8iLFtUcV06IklzIG5vdCBlcXVhbCB0byIsW0FxXToiQmVnaW5zIHdpdGgiLFtrcV06IkVuZHMgd2l0aCIsW0RxXToiQ29udGFp''@;'; put 'put ''bnMiLFtJcV06IkRvZXMgbm90IGNvbnRhaW4iLFtScV06IkdyZWF0ZXIgdGhhbiIsW0xxXToiR3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIixbT3FdOiJMZXNzIHRoYW4iLFtQcV06Ikxlc3MgdGhhbiBvciBlcXVhbCB0byIsW0ZxXToiSXMgYmV0d2VlbiIsW0hxXToiSXMgbm90IGJldHdlZW4i''@;'; put 'put ''LFtOcV06IkFmdGVyIixbVnFdOiJCZWZvcmUiLFtCcV06IlRvZGF5IixbanFdOiJUb21vcnJvdyIsW3pxXToiWWVzdGVyZGF5IixbdlBdOiJCbGFuayBjZWxscyIsW1VxXToiRmlsdGVyIGJ5IGNvbmRpdGlvbiIsW1pxXToiRmlsdGVyIGJ5IHZhbHVlIixbV3FdOiJBbmQiLFttUF06Ik9yIixb''@;'; put 'put ''WXFdOiJTZWxlY3QgYWxsIixbR3FdOiJDbGVhciIsWyRxXToiT0siLFtLcV06IkNhbmNlbCIsW3FxXToiU2VhcmNoIixbWHFdOiJWYWx1ZSIsW0pxXToiU2Vjb25kIHZhbHVlIixbZVhdOiJDaGVja2VkIixbdFhdOiJVbmNoZWNrZWQifSxaZXQ9VyxuWD1DM2UubGFuZ3VhZ2VDb2RlLHtyZWdp''@;'; put 'put ''c3RlcjpXZXQsZ2V0SXRlbTpTM2UsaGFzSXRlbTpZZXQsZ2V0VmFsdWVzOkdldH09UWYoImxhbmd1YWdlc0RpY3Rpb25hcmllcyIpO2Z1bmN0aW9uIE0zZShjLGwpe2xldCBhPWMsZD1sO3JldHVybiBLYShjKSYmKGQ9YyxhPWQubGFuZ3VhZ2VDb2RlKSxmdW5jdGlvbiAkZXQoYyxsKXtjIT09''@;'; put 'put ''blgmJmZ1bmN0aW9uIEhldChjLGwpe3FhKGwsKGEsZCk9PnttYyhjW2RdKSYmKGNbZF09YSl9KX0obCxTM2UoblgpKX0oYSxkKSxXZXQoYSxtMShkKSksbTEoZCl9ZnVuY3Rpb24geDNlKGMpe3JldHVybiByWChjKT9tMShTM2UoYykpOm51bGx9ZnVuY3Rpb24gclgoYyl7cmV0dXJuIFlldChj''@;'; put 'put ''KX1mdW5jdGlvbiBFM2UoYyxsLGEpe2NvbnN0IGQ9eDNlKGMpO2lmKG51bGw9PT1kKXJldHVybiBudWxsO2NvbnN0IGg9ZFtsXTtpZihtYyhoKSlyZXR1cm4gbnVsbDtjb25zdCBmPWZ1bmN0aW9uIHFldChjLGwpe2xldCBhPWM7cmV0dXJuIFluKGZ1bmN0aW9uIHpldCgpe3JldHVybiBCZXQo''@;'; put 'put ''KX0oKSxkPT57YT1kKGMsbCl9KSxhfShoLGEpO3JldHVybiBBcnJheS5pc0FycmF5KGYpP2ZbMF06Zn1NM2UoQzNlKTtjb25zdCBUM2U9ImFjdGl2ZS1oZWFkZXIiLGlYPSJoZWFkZXIiLG9YPSJhcmVhIixiUD0iZm9jdXMiO2NsYXNzIEEzZXtjb25zdHJ1Y3RvcihsLGEpe3RoaXMuc2V0dGlu''@;'; put 'put ''Z3M9bCx0aGlzLmNlbGxSYW5nZT1hfHxudWxsfWlzRW1wdHkoKXtyZXR1cm4gbnVsbD09PXRoaXMuY2VsbFJhbmdlfWFkZChsKXtyZXR1cm4gdGhpcy5pc0VtcHR5KCk/dGhpcy5jZWxsUmFuZ2U9dGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsUmFuZ2UobCk6dGhpcy5jZWxsUmFuZ2UuZXhwYW5k''@;'; put 'put ''KGwpLHRoaXN9cmVwbGFjZShsLGEpe2lmKCF0aGlzLmlzRW1wdHkoKSl7aWYodGhpcy5jZWxsUmFuZ2UuZnJvbS5pc0VxdWFsKGwpKXJldHVybiB0aGlzLmNlbGxSYW5nZS5mcm9tPWEsITA7aWYodGhpcy5jZWxsUmFuZ2UudG8uaXNFcXVhbChsKSlyZXR1cm4gdGhpcy5jZWxsUmFuZ2UudG89''@;'; put 'put ''YSwhMH1yZXR1cm4hMX1jbGVhcigpe3JldHVybiB0aGlzLmNlbGxSYW5nZT1udWxsLHRoaXN9Z2V0Q29ybmVycygpe2NvbnN0IGw9dGhpcy5jZWxsUmFuZ2UuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLGE9dGhpcy5jZWxsUmFuZ2UuZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKTtyZXR1cm5b''@;'; put 'put ''bC5yb3csbC5jb2wsYS5yb3csYS5jb2xdfWRlc3Ryb3koKXt0aGlzLnJ1bkxvY2FsSG9va3MoImRlc3Ryb3kiKX19eGwoQTNlLF8xKTtjb25zdCBudHQ9QTNlO2NvbnN0IHdnPWNsYXNzIGF0dCBleHRlbmRzIG50dHtjb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwsbnVsbCksZnVuY3Rpb24gcnR0''@;'; put 'put ''KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBpdHQoYyl7dmFyIGw9ZnVuY3Rpb24gb3R0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtp''@;'; put 'put ''Zigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09''@;'; put 'put ''dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywidmlzdWFsQ2VsbFJhbmdlIixudWxsKSx0aGlzLnZpc3VhbENlbGxSYW5nZT1h''@;'; put 'put ''fHxudWxsLHRoaXMuY29tbWl0KCl9YWRkKGwpe3JldHVybiBudWxsPT09dGhpcy52aXN1YWxDZWxsUmFuZ2U/dGhpcy52aXN1YWxDZWxsUmFuZ2U9dGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsUmFuZ2UobCk6dGhpcy52aXN1YWxDZWxsUmFuZ2UuZXhwYW5kKGwpLHRoaXN9Y2xlYXIoKXtyZXR1''@;'; put 'put ''cm4gdGhpcy52aXN1YWxDZWxsUmFuZ2U9bnVsbCxzdXBlci5jbGVhcigpfXRyaW1Ub1Zpc2libGVDZWxsc1JhbmdlT25seShsKXtsZXR7ZnJvbTphLHRvOmR9PWwsaD10aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5Db29yZHMoYSwxKSxmPXRoaXMuZ2V0TmVhcmVzdE5vdEhpZGRlbkNvb3Jkcyhk''@;'; put 'put ''LC0xKTtyZXR1cm4gbnVsbD09PWh8fG51bGw9PT1mP251bGw6KChoLnJvdz5mLnJvd3x8aC5jb2w+Zi5jb2wpJiYoaD1hLGY9ZCksdGhpcy5zZXR0aW5ncy5jcmVhdGVDZWxsUmFuZ2UoaCxoLGYpKX1nZXROZWFyZXN0Tm90SGlkZGVuQ29vcmRzKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOmE7Y29uc3QgaD10aGlzLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh0aGlzLnNldHRpbmdzLnJvd0luZGV4TWFwcGVyLGwucm93LGEpO2lmKG51bGw9PT1oKXJldHVybiBudWxsO2NvbnN0IGY9dGhpcy5nZXROZWFyZXN0''@;'; put 'put ''Tm90SGlkZGVuSW5kZXgodGhpcy5zZXR0aW5ncy5jb2x1bW5JbmRleE1hcHBlcixsLmNvbCxkKTtyZXR1cm4gbnVsbD09PWY/bnVsbDp0aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxDb29yZHMoaCxmKX1nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgobCxhLGQpe3JldHVybiBhPDA/YTpsLmdldE5l''@;'; put 'put ''YXJlc3ROb3RIaWRkZW5JbmRleChhLGQpfWNvbW1pdCgpe2lmKG51bGw9PT10aGlzLnZpc3VhbENlbGxSYW5nZSlyZXR1cm4gdGhpcztjb25zdCBsPXRoaXMudHJpbVRvVmlzaWJsZUNlbGxzUmFuZ2VPbmx5KHRoaXMudmlzdWFsQ2VsbFJhbmdlKTtyZXR1cm4gdGhpcy5jZWxsUmFuZ2U9bnVs''@;'; put 'put ''bD09PWw/bnVsbDp0aGlzLmNyZWF0ZVJlbmRlcmFibGVDZWxsUmFuZ2UobC5mcm9tLGwudG8pLHRoaXN9c3luY1dpdGgobCl7Y29uc3QgYT1sLmZyb20uY2xvbmUoKS5ub3JtYWxpemUoKSxkPSJOLVMiPT09bC5nZXRWZXJ0aWNhbERpcmVjdGlvbigpPzE6LTEsaD0iVy1FIj09PWwuZ2V0SG9y''@;'; put 'put ''aXpvbnRhbERpcmVjdGlvbigpPzE6LTEsZj10aGlzLnNldHRpbmdzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3Jkcyh0aGlzLnZpc3VhbENlbGxSYW5nZS5oaWdobGlnaHQpO2xldCB2PW51bGw7aWYoKG51bGw9PT1mfHxudWxsPT09Zi5jb2x8fG51bGw9PT1mLnJvdykmJih2PXRoaXMuZ2V0TmVh''@;'; put 'put ''cmVzdE5vdEhpZGRlbkNvb3JkcyhhLGQsaCkpLG51bGwhPT12JiZsLm92ZXJsYXBzKHYpKXtjb25zdCBNPWwuaGlnaGxpZ2h0LmNsb25lKCk7aWYoTS5yb3c+PTAmJihNLnJvdz12LnJvdyksTS5jb2w+PTAmJihNLmNvbD12LmNvbCksbnVsbD09PXRoaXMuY2VsbFJhbmdlKXtjb25zdCBEPXRo''@;'; put 'put ''aXMuc2V0dGluZ3MudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKE0pO3RoaXMuY2VsbFJhbmdlPXRoaXMuc2V0dGluZ3MuY3JlYXRlQ2VsbFJhbmdlKEQpfWwuc2V0SGlnaGxpZ2h0KE0pfXJldHVybiJmb2N1cyI9PT10aGlzLnNldHRpbmdzLnNlbGVjdGlvblR5cGUmJm51bGwhPT1mJiZudWxs''@;'; put 'put ''PT09diYmbC5zZXRIaWdobGlnaHQodGhpcy52aXN1YWxDZWxsUmFuZ2UuaGlnaGxpZ2h0KSx0aGlzfWdldENvcm5lcnMoKXtjb25zdHtmcm9tOmwsdG86YX09dGhpcy5jZWxsUmFuZ2U7cmV0dXJuW01hdGgubWluKGwucm93LGEucm93KSxNYXRoLm1pbihsLmNvbCxhLmNvbCksTWF0aC5tYXgo''@;'; put 'put ''bC5yb3csYS5yb3cpLE1hdGgubWF4KGwuY29sLGEuY29sKV19Z2V0VmlzdWFsQ29ybmVycygpe2NvbnN0IGw9dGhpcy5zZXR0aW5ncy5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHModGhpcy5jZWxsUmFuZ2UuZ2V0VG9wU3RhcnRDb3JuZXIoKSksYT10aGlzLnNldHRpbmdzLnJlbmRlcmFibGVU''@;'; put 'put ''b1Zpc3VhbENvb3Jkcyh0aGlzLmNlbGxSYW5nZS5nZXRCb3R0b21FbmRDb3JuZXIoKSk7cmV0dXJuW2wucm93LGwuY29sLGEucm93LGEuY29sXX1jcmVhdGVSZW5kZXJhYmxlQ2VsbFJhbmdlKGwsYSl7Y29uc3QgZD10aGlzLnNldHRpbmdzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhsKSxo''@;'; put 'put ''PXRoaXMuc2V0dGluZ3MudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGEpO3JldHVybiBudWxsPT09ZC5yb3d8fG51bGw9PT1kLmNvbHx8bnVsbD09PWgucm93fHxudWxsPT09aC5jb2w/bnVsbDp0aGlzLnNldHRpbmdzLmNyZWF0ZUNlbGxSYW5nZShkLGQsaCl9fTtmdW5jdGlvbiBhWChjKXts''@;'; put 'put ''ZXR7YWN0aXZlSGVhZGVyQ2xhc3NOYW1lOmwsLi4uYX09YztyZXR1cm4gbmV3IHdnKHtjbGFzc05hbWU6bCwuLi5hLHNlbGVjdGlvblR5cGU6VDNlfSl9ZnVuY3Rpb24gc3R0KGMpe2xldHthcmVhQ29ybmVyVmlzaWJsZTpsLC4uLmF9PWM7cmV0dXJuIG5ldyB3Zyh7Y2xhc3NOYW1lOiJhcmVh''@;'; put 'put ''IixjcmVhdGVMYXllcnM6ITAsYm9yZGVyOnt3aWR0aDoxLGNvbG9yOiIjNGI4OWZmIixjb3JuZXJWaXNpYmxlOmx9LC4uLmEsc2VsZWN0aW9uVHlwZTpvWH0pfWZ1bmN0aW9uIGx0dChjKXtsZXR7Li4ubH09YztyZXR1cm4gbmV3IHdnKHtjbGFzc05hbWU6ImhpZ2hsaWdodCIsLi4ubCxzZWxl''@;'; put 'put ''Y3Rpb25UeXBlOm9YfSl9ZnVuY3Rpb24gY3R0KGMpe2xldHtjb2x1bW5DbGFzc05hbWU6bCwuLi5hfT1jO3JldHVybiBuZXcgd2coe2NsYXNzTmFtZTpsLC4uLmEsc2VsZWN0aW9uVHlwZToiY29sdW1uIn0pfWZ1bmN0aW9uIGszZShjKXtsZXR7aGVhZGVyQ2xhc3NOYW1lOmwsLi4uYX09Yzty''@;'; put 'put ''ZXR1cm4gbmV3IHdnKHtjbGFzc05hbWU6bCwuLi5hLHNlbGVjdGlvblR5cGU6aVh9KX1mdW5jdGlvbiBmdHQoYyl7bGV0e3Jvd0NsYXNzTmFtZTpsLC4uLmF9PWM7cmV0dXJuIG5ldyB3Zyh7Y2xhc3NOYW1lOmwsLi4uYSxzZWxlY3Rpb25UeXBlOiJyb3cifSl9ZnVuY3Rpb24gQmQoYyxsLGEp''@;'; put 'put ''e3JldHVybihsPWZ1bmN0aW9uIG10dChjKXt2YXIgbD1mdW5jdGlvbiB2dHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmpl''@;'; put 'put ''Y3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2Yg''@;'; put 'put ''bD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIENnKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSly''@;'; put 'put ''ZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgRHA9bmV3IFdlYWtTZXQ7Y2xhc3MgYnR0e2NvbnN0cnVjdG9yKGwpeyhmdW5jdGlvbiBwdHQoYyxsKXsoZnVu''@;'; put 'put ''Y3Rpb24gZ3R0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KSh0aGlzLERwKSxCZCh0aGlzLCJvcHRpb25zIix2b2lkIDAp''@;'; put 'put ''LEJkKHRoaXMsImxheWVyTGV2ZWwiLDApLEJkKHRoaXMsImZvY3VzIix2b2lkIDApLEJkKHRoaXMsImZpbGwiLHZvaWQgMCksQmQodGhpcywibGF5ZXJlZEFyZWFzIixuZXcgTWFwKSxCZCh0aGlzLCJhcmVhcyIsbmV3IE1hcCksQmQodGhpcywicm93SGVhZGVycyIsbmV3IE1hcCksQmQodGhp''@;'; put 'put ''cywiY29sdW1uSGVhZGVycyIsbmV3IE1hcCksQmQodGhpcywiYWN0aXZlUm93SGVhZGVycyIsbmV3IE1hcCksQmQodGhpcywiYWN0aXZlQ29sdW1uSGVhZGVycyIsbmV3IE1hcCksQmQodGhpcywiYWN0aXZlQ29ybmVySGVhZGVycyIsbmV3IE1hcCksQmQodGhpcywicm93SGlnaGxpZ2h0cyIs''@;'; put 'put ''bmV3IE1hcCksQmQodGhpcywiY29sdW1uSGlnaGxpZ2h0cyIsbmV3IE1hcCksQmQodGhpcywiY3VzdG9tU2VsZWN0aW9ucyIsW10pLHRoaXMub3B0aW9ucz1sLHRoaXMuZm9jdXM9ZnVuY3Rpb24gdXR0KGMpe2xldHtjZWxsQ29ybmVyVmlzaWJsZTpsLC4uLmF9PWM7cmV0dXJuIG5ldyB3Zyh7''@;'; put 'put ''Y2xhc3NOYW1lOiJjdXJyZW50IixoZWFkZXJBdHRyaWJ1dGVzOltbImFyaWEtc2VsZWN0ZWQiLCJ0cnVlIl1dLGJvcmRlcjp7d2lkdGg6Mixjb2xvcjoiIzRiODlmZiIsY29ybmVyVmlzaWJsZTpsfSwuLi5hLHNlbGVjdGlvblR5cGU6YlB9KX0obCksdGhpcy5maWxsPWZ1bmN0aW9uIGh0dChj''@;'; put 'put ''KXtsZXR7Li4ubH09YztyZXR1cm4gbmV3IHdnKHtjbGFzc05hbWU6ImZpbGwiLGJvcmRlcjp7d2lkdGg6MSxjb2xvcjoiI2ZmMDAwMCJ9LC4uLmwsc2VsZWN0aW9uVHlwZToiZmlsbCJ9KX0obCl9aXNFbmFibGVkRm9yKGwsYSl7bGV0IGQ9bDtsPT09YlAmJihkPSJjdXJyZW50Iik7bGV0IGg9''@;'; put 'put ''dGhpcy5vcHRpb25zLmRpc2FibGVkQ2VsbFNlbGVjdGlvbihhLnJvdyxhLmNvbCk7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBoJiYoaD1baF0pLCExPT09aHx8QXJyYXkuaXNBcnJheShoKSYmIWguaW5jbHVkZXMoZCl9dXNlTGF5ZXJMZXZlbCgpe3JldHVybiB0aGlzLmxheWVyTGV2ZWw9YXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjAsdGhpc31nZXRGb2N1cygpe3JldHVybiB0aGlzLmZvY3VzfWdldEZpbGwoKXtyZXR1cm4gdGhpcy5maWxsfWNyZWF0ZUxheWVyZWRBcmVhKCl7cmV0dXJuIENnKERwLHRoaXMsU2cpLmNhbGwodGhp''@;'; put 'put ''cyx0aGlzLmxheWVyZWRBcmVhcyxzdHQpfWdldExheWVyZWRBcmVhcygpe3JldHVyblsuLi50aGlzLmxheWVyZWRBcmVhcy52YWx1ZXMoKV19Y3JlYXRlQXJlYSgpe3JldHVybiBDZyhEcCx0aGlzLFNnKS5jYWxsKHRoaXMsdGhpcy5hcmVhcyxsdHQpfWdldEFyZWFzKCl7cmV0dXJuWy4uLnRo''@;'; put 'put ''aXMuYXJlYXMudmFsdWVzKCldfWNyZWF0ZVJvd0hlYWRlcigpe3JldHVybiBDZyhEcCx0aGlzLFNnKS5jYWxsKHRoaXMsdGhpcy5yb3dIZWFkZXJzLGszZSl9Z2V0Um93SGVhZGVycygpe3JldHVyblsuLi50aGlzLnJvd0hlYWRlcnMudmFsdWVzKCldfWNyZWF0ZUNvbHVtbkhlYWRlcigpe3Jl''@;'; put 'put ''dHVybiBDZyhEcCx0aGlzLFNnKS5jYWxsKHRoaXMsdGhpcy5jb2x1bW5IZWFkZXJzLGszZSl9Z2V0Q29sdW1uSGVhZGVycygpe3JldHVyblsuLi50aGlzLmNvbHVtbkhlYWRlcnMudmFsdWVzKCldfWNyZWF0ZUFjdGl2ZVJvd0hlYWRlcigpe3JldHVybiBDZyhEcCx0aGlzLFNnKS5jYWxsKHRo''@;'; put 'put ''aXMsdGhpcy5hY3RpdmVSb3dIZWFkZXJzLGFYKX1nZXRBY3RpdmVSb3dIZWFkZXJzKCl7cmV0dXJuWy4uLnRoaXMuYWN0aXZlUm93SGVhZGVycy52YWx1ZXMoKV19Y3JlYXRlQWN0aXZlQ29sdW1uSGVhZGVyKCl7cmV0dXJuIENnKERwLHRoaXMsU2cpLmNhbGwodGhpcyx0aGlzLmFjdGl2ZUNv''@;'; put 'put ''bHVtbkhlYWRlcnMsYVgpfWdldEFjdGl2ZUNvbHVtbkhlYWRlcnMoKXtyZXR1cm5bLi4udGhpcy5hY3RpdmVDb2x1bW5IZWFkZXJzLnZhbHVlcygpXX1jcmVhdGVBY3RpdmVDb3JuZXJIZWFkZXIoKXtyZXR1cm4gQ2coRHAsdGhpcyxTZykuY2FsbCh0aGlzLHRoaXMuYWN0aXZlQ29ybmVySGVh''@;'; put 'put ''ZGVycyxhWCl9Z2V0QWN0aXZlQ29ybmVySGVhZGVycygpe3JldHVyblsuLi50aGlzLmFjdGl2ZUNvcm5lckhlYWRlcnMudmFsdWVzKCldfWNyZWF0ZVJvd0hpZ2hsaWdodCgpe3JldHVybiBDZyhEcCx0aGlzLFNnKS5jYWxsKHRoaXMsdGhpcy5yb3dIaWdobGlnaHRzLGZ0dCl9Z2V0Um93SGln''@;'; put 'put ''aGxpZ2h0cygpe3JldHVyblsuLi50aGlzLnJvd0hpZ2hsaWdodHMudmFsdWVzKCldfWNyZWF0ZUNvbHVtbkhpZ2hsaWdodCgpe3JldHVybiBDZyhEcCx0aGlzLFNnKS5jYWxsKHRoaXMsdGhpcy5jb2x1bW5IaWdobGlnaHRzLGN0dCl9Z2V0Q29sdW1uSGlnaGxpZ2h0cygpe3JldHVyblsuLi50''@;'; put 'put ''aGlzLmNvbHVtbkhpZ2hsaWdodHMudmFsdWVzKCldfWdldEN1c3RvbVNlbGVjdGlvbnMoKXtyZXR1cm5bLi4udGhpcy5jdXN0b21TZWxlY3Rpb25zLnZhbHVlcygpXX1hZGRDdXN0b21TZWxlY3Rpb24obCl7dGhpcy5jdXN0b21TZWxlY3Rpb25zLnB1c2goZnVuY3Rpb24gZHR0KGMpe2xldHti''@;'; put 'put ''b3JkZXI6bCx2aXN1YWxDZWxsUmFuZ2U6YSwuLi5kfT1jO3JldHVybiBuZXcgd2coey4uLmwsLi4uZCxzZWxlY3Rpb25UeXBlOiJjdXN0b20tc2VsZWN0aW9uIn0sYSl9KHsuLi50aGlzLm9wdGlvbnMsLi4ubH0pKX1jbGVhcigpe3RoaXMuZm9jdXMuY2xlYXIoKSx0aGlzLmZpbGwuY2xlYXIo''@;'; put 'put ''KSxZbih0aGlzLmFyZWFzLnZhbHVlcygpLGw9PntsLmNsZWFyKCl9KSxZbih0aGlzLmxheWVyZWRBcmVhcy52YWx1ZXMoKSxsPT57bC5jbGVhcigpfSksWW4odGhpcy5yb3dIZWFkZXJzLnZhbHVlcygpLGw9PntsLmNsZWFyKCl9KSxZbih0aGlzLmNvbHVtbkhlYWRlcnMudmFsdWVzKCksbD0+''@;'; put 'put ''e2wuY2xlYXIoKX0pLFluKHRoaXMuYWN0aXZlUm93SGVhZGVycy52YWx1ZXMoKSxsPT57bC5jbGVhcigpfSksWW4odGhpcy5hY3RpdmVDb2x1bW5IZWFkZXJzLnZhbHVlcygpLGw9PntsLmNsZWFyKCl9KSxZbih0aGlzLmFjdGl2ZUNvcm5lckhlYWRlcnMudmFsdWVzKCksbD0+e2wuY2xlYXIo''@;'; put 'put ''KX0pLFluKHRoaXMucm93SGlnaGxpZ2h0cy52YWx1ZXMoKSxsPT57bC5jbGVhcigpfSksWW4odGhpcy5jb2x1bW5IaWdobGlnaHRzLnZhbHVlcygpLGw9PntsLmNsZWFyKCl9KX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVyblt0aGlzLmZvY3VzLHRoaXMuZmlsbCwuLi50aGlzLmFyZWFzLnZh''@;'; put 'put ''bHVlcygpLC4uLnRoaXMubGF5ZXJlZEFyZWFzLnZhbHVlcygpLC4uLnRoaXMucm93SGVhZGVycy52YWx1ZXMoKSwuLi50aGlzLmNvbHVtbkhlYWRlcnMudmFsdWVzKCksLi4udGhpcy5hY3RpdmVSb3dIZWFkZXJzLnZhbHVlcygpLC4uLnRoaXMuYWN0aXZlQ29sdW1uSGVhZGVycy52YWx1ZXMo''@;'; put 'put ''KSwuLi50aGlzLmFjdGl2ZUNvcm5lckhlYWRlcnMudmFsdWVzKCksLi4udGhpcy5yb3dIaWdobGlnaHRzLnZhbHVlcygpLC4uLnRoaXMuY29sdW1uSGlnaGxpZ2h0cy52YWx1ZXMoKSwuLi50aGlzLmN1c3RvbVNlbGVjdGlvbnNdW1N5bWJvbC5pdGVyYXRvcl0oKX19ZnVuY3Rpb24gU2coYyxs''@;'; put 'put ''KXtjb25zdCBhPXRoaXMubGF5ZXJMZXZlbDtpZihjLmhhcyhhKSlyZXR1cm4gYy5nZXQoYSk7Y29uc3QgZD1sKHtsYXllckxldmVsOmEsLi4udGhpcy5vcHRpb25zfSk7cmV0dXJuIGMuc2V0KGEsZCksZH1jb25zdCB5dHQ9YnR0O2Z1bmN0aW9uIEQzZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rp''@;'; put 'put ''b24gX3R0KGMpe3ZhciBsPWZ1bmN0aW9uIHd0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJl''@;'; put 'put ''dHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4g''@;'; put 'put ''Yz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgQ3R0e2NvbnN0cnVjdG9yKGwpe0QzZSh0aGlzLCJyYW5nZXMiLFtdKSxEM2UodGhpcywiY3JlYXRlQ2VsbFJhbmdlIix2''@;'; put 'put ''b2lkIDApLHRoaXMuY3JlYXRlQ2VsbFJhbmdlPWx9aXNFbXB0eSgpe3JldHVybiAwPT09dGhpcy5zaXplKCl9c2V0KGwpe3JldHVybiB0aGlzLmNsZWFyKCksdGhpcy5yYW5nZXMucHVzaCh0aGlzLmNyZWF0ZUNlbGxSYW5nZShsKSksdGhpc31hZGQobCl7cmV0dXJuIHRoaXMucmFuZ2VzLnB1''@;'; put 'put ''c2godGhpcy5jcmVhdGVDZWxsUmFuZ2UobCkpLHRoaXN9cG9wKCl7cmV0dXJuIHRoaXMucmFuZ2VzLnBvcCgpLHRoaXN9Y3VycmVudCgpe3JldHVybiB0aGlzLnBlZWtCeUluZGV4KHRoaXMuc2l6ZSgpLTEpfXByZXZpb3VzKCl7cmV0dXJuIHRoaXMucGVla0J5SW5kZXgodGhpcy5zaXplKCkt''@;'; put 'put ''Mil9aW5jbHVkZXMobCl7cmV0dXJuIHRoaXMucmFuZ2VzLnNvbWUoYT0+YS5pbmNsdWRlcyhsKSl9Y2xlYXIoKXtyZXR1cm4gdGhpcy5yYW5nZXMubGVuZ3RoPTAsdGhpc31zaXplKCl7cmV0dXJuIHRoaXMucmFuZ2VzLmxlbmd0aH1wZWVrQnlJbmRleCgpe2xldCBhLGw9YXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOjA7cmV0dXJuIGw+PTAmJmw8dGhpcy5zaXplKCkmJihhPXRoaXMucmFuZ2VzW2xdKSxhfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHRoaXMucmFuZ2VzW1N5bWJvbC5pdGVyYXRvcl0oKX19Y29uc3QgU3R0PUN0''@;'; put 'put ''dDtmdW5jdGlvbiBzWChjLGwsYSl7STNlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBJM2UoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9u''@;'; put 'put ''IEJzKGMsbCl7cmV0dXJuIGMuZ2V0KEp1KGMsbCkpfWZ1bmN0aW9uIHlQKGMsbCxhKXtyZXR1cm4gYy5zZXQoSnUoYyxsKSxhKSxhfWZ1bmN0aW9uIEp1KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgX1A9bmV3IFdlYWtNYXAsc2M9bmV3IFdlYWtNYXAsYTM9bmV3IFdlYWtNYXAscDA9bmV3IFdlYWtTZXQ7Y2xhc3MgUjNle2NvbnN0cnVjdG9yKGwsYSl7KGZ1bmN0''@;'; put 'put ''aW9uIE10dChjLGwpe0kzZShjLGwpLGwuYWRkKGMpfSkodGhpcyxwMCksc1godGhpcyxfUCx2b2lkIDApLHNYKHRoaXMsc2Msdm9pZCAwKSxzWCh0aGlzLGEzLHt4OjAseTowfSkseVAoX1AsdGhpcyxsKSx5UChzYyx0aGlzLGEpfXRyYW5zZm9ybVN0YXJ0KGwsYSl7bGV0IGQ9YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCBoPUJzKHNjLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHMobCxhKTtsZXQgZj1CcyhfUCx0aGlzKS5jdXJyZW50KCkuaGlnaGxpZ2h0O2NvbnN0IHY9QnMoc2MsdGhpcykudmlzdWFsVG9SZW5kZXJhYmxl''@;'; put 'put ''Q29vcmRzKGYpO2xldCBNPTAsRD0wO2lmKHRoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlVHJhbnNmb3JtU3RhcnQiLGgpLG51bGwhPT12LnJvdyYmbnVsbCE9PXYuY29sKXtjb25zdHt3aWR0aDpaLGhlaWdodDpuZX09SnUocDAsdGhpcyxPM2UpLmNhbGwodGhpcykse3JvdzpjZSxjb2w6YmV9''@;'; put 'put ''PUp1KHAwLHRoaXMsUDNlKS5jYWxsKHRoaXMsZiksRWU9QnMoc2MsdGhpcykuZml4ZWRSb3dzQm90dG9tKCksQmU9QnMoc2MsdGhpcykubWluU3BhcmVSb3dzKCkscWU9QnMoc2MsdGhpcykubWluU3BhcmVDb2xzKCksbnQ9QnMoc2MsdGhpcykuYXV0b1dyYXBSb3coKSxsdD1CcyhzYyx0aGlz''@;'; put 'put ''KS5hdXRvV3JhcENvbCgpLG10PUJzKHNjLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHMoY2UraC5yb3csYmUraC5jb2wpO2lmKG10LnJvdz49bmUpe2NvbnN0IENuPVBkKGQmJkJlPjAmJjA9PT1FZSksdG49bXQuY29sKzEseG49QnMoc2MsdGhpcykuY3JlYXRlQ2VsbENvb3JkcyhtdC5yb3ctbmUs''@;'; put 'put ''dG4+PVo/dG4tWjp0bik7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVDb2x1bW5XcmFwIixDbixKdShwMCx0aGlzLF9fKS5jYWxsKHRoaXMseG4pLHRuPj1aKSxDbi52YWx1ZT90aGlzLnJ1bkxvY2FsSG9va3MoImluc2VydFJvd1JlcXVpcmUiLEJzKHNjLHRoaXMpLmNvdW50UmVuZGVyYWJs''@;'; put 'put ''ZVJvd3MoKSk6bHQmJm10LmFzc2lnbih4bil9ZWxzZSBpZihtdC5yb3c8MCl7Y29uc3QgQ249UGQobHQpLHRuPW10LmNvbC0xLHhuPUJzKHNjLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHMobmUrbXQucm93LHRuPDA/Wit0bjp0bik7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVDb2x1bW5XcmFw''@;'; put 'put ''IixDbixKdShwMCx0aGlzLF9fKS5jYWxsKHRoaXMseG4pLHRuPDApLGx0JiZtdC5hc3NpZ24oeG4pfWlmKG10LmNvbD49Wil7Y29uc3QgQ249UGQoZCYmcWU+MCksdG49bXQucm93KzEseG49QnMoc2MsdGhpcykuY3JlYXRlQ2VsbENvb3Jkcyh0bj49bmU/dG4tbmU6dG4sbXQuY29sLVopO3Ro''@;'; put 'put ''aXMucnVuTG9jYWxIb29rcygiYmVmb3JlUm93V3JhcCIsQ24sSnUocDAsdGhpcyxfXykuY2FsbCh0aGlzLHhuKSx0bj49bmUpLENuLnZhbHVlP3RoaXMucnVuTG9jYWxIb29rcygiaW5zZXJ0Q29sUmVxdWlyZSIsQnMoc2MsdGhpcykuY291bnRSZW5kZXJhYmxlQ29sdW1ucygpKTpudCYmbXQu''@;'; put 'put ''YXNzaWduKHhuKX1lbHNlIGlmKG10LmNvbDwwKXtjb25zdCBDbj1QZChudCksdG49bXQucm93LTEseG49QnMoc2MsdGhpcykuY3JlYXRlQ2VsbENvb3Jkcyh0bjwwP25lK3RuOnRuLForbXQuY29sKTt0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZVJvd1dyYXAiLENuLEp1KHAwLHRoaXMsX18p''@;'; put 'put ''LmNhbGwodGhpcyx4biksdG48MCksbnQmJm10LmFzc2lnbih4bil9Y29uc3R7cm93RGlyOkp0LGNvbERpcjp5bn09SnUocDAsdGhpcyxMM2UpLmNhbGwodGhpcyxtdCk7TT1KdCxEPXluLGY9SnUocDAsdGhpcyxfXykuY2FsbCh0aGlzLG10KX1yZXR1cm4gdGhpcy5ydW5Mb2NhbEhvb2tzKCJh''@;'; put 'put ''ZnRlclRyYW5zZm9ybVN0YXJ0IixmLE0sRCksZn10cmFuc2Zvcm1FbmQobCxhKXtjb25zdCBkPUJzKHNjLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHMobCxhKSxoPUJzKF9QLHRoaXMpLmN1cnJlbnQoKSxmPUJzKHNjLHRoaXMpLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhoLmhpZ2hsaWdodCks''@;'; put 'put ''dj1KdShwMCx0aGlzLGxYKS5jYWxsKHRoaXMsaC50by5yb3csaC5mcm9tLnJvdyksTT1KdShwMCx0aGlzLGNYKS5jYWxsKHRoaXMsaC50by5jb2wsaC5mcm9tLmNvbCksRD1oLnRvLmNsb25lKCk7bGV0IFo9MCxuZT0wO2lmKHRoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlVHJhbnNmb3JtRW5k''@;'; put 'put ''IixkKSxudWxsIT09Zi5yb3cmJm51bGwhPT1mLmNvbCYmbnVsbCE9PXYmJm51bGwhPT1NKXtjb25zdHtyb3c6Y2UsY29sOmJlfT1KdShwMCx0aGlzLFAzZSkuY2FsbCh0aGlzLGguaGlnaGxpZ2h0KSxFZT1CcyhzYyx0aGlzKS5jcmVhdGVDZWxsQ29vcmRzKHYrZC5yb3csTStkLmNvbCksQmU9''@;'; put 'put ''aC5nZXRUb3BTdGFydENvcm5lcigpLHFlPWguZ2V0VG9wRW5kQ29ybmVyKCksbnQ9aC5nZXRCb3R0b21FbmRDb3JuZXIoKTtpZihkLmNvbDwwJiZNPj1iZSYmRWUuY29sPGJlKXtjb25zdCB5bj1FZS5jb2wtYmU7RWUuY29sPUp1KHAwLHRoaXMsY1gpLmNhbGwodGhpcyxCZS5jb2wscWUuY29s''@;'; put 'put ''KSt5bn1lbHNlIGlmKGQuY29sPjAmJk08PWJlJiZFZS5jb2w+YmUpe2NvbnN0IHluPUp1KHAwLHRoaXMsY1gpLmNhbGwodGhpcyxxZS5jb2wsQmUuY29sKSxDbj1NYXRoLm1heChFZS5jb2wteW4sMSk7RWUuY29sPXluK0NufWlmKGQucm93PDAmJnY+PWNlJiZFZS5yb3c8Y2Upe2NvbnN0IHlu''@;'; put 'put ''PUVlLnJvdy1jZTtFZS5yb3c9SnUocDAsdGhpcyxsWCkuY2FsbCh0aGlzLEJlLnJvdyxudC5yb3cpK3lufWVsc2UgaWYoZC5yb3c+MCYmdjw9Y2UmJkVlLnJvdz5jZSl7Y29uc3QgeW49SnUocDAsdGhpcyxsWCkuY2FsbCh0aGlzLG50LnJvdyxCZS5yb3cpLENuPU1hdGgubWF4KEVlLnJvdy15''@;'; put 'put ''biwxKTtFZS5yb3c9eW4rQ259Y29uc3R7cm93RGlyOmx0LGNvbERpcjptdH09SnUocDAsdGhpcyxMM2UpLmNhbGwodGhpcyxFZSk7Wj1sdCxuZT1tdDtjb25zdCBKdD1KdShwMCx0aGlzLF9fKS5jYWxsKHRoaXMsRWUpOzA9PT1kLnJvdyYmMCE9PWQuY29sP0QuY29sPUp0LmNvbDowIT09ZC5y''@;'; put 'put ''b3cmJjA9PT1kLmNvbD9ELnJvdz1KdC5yb3c6KEQucm93PUp0LnJvdyxELmNvbD1KdC5jb2wpfXJldHVybiB0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyVHJhbnNmb3JtRW5kIixELFosbmUpLER9c2V0T2Zmc2V0U2l6ZShsKXtsZXR7eDphLHk6ZH09bDt5UChhMyx0aGlzLHt4OmEseTpkfSl9''@;'; put 'put ''cmVzZXRPZmZzZXRTaXplKCl7eVAoYTMsdGhpcyx7eDowLHk6MH0pfX1mdW5jdGlvbiBMM2UoYyl7Y29uc3R7d2lkdGg6bCxoZWlnaHQ6YX09SnUocDAsdGhpcyxPM2UpLmNhbGwodGhpcyk7bGV0IGQ9MCxoPTA7cmV0dXJuIGMucm93PDA/KGQ9LTEsYy5yb3c9MCk6Yy5yb3c+MCYmYy5yb3c+''@;'; put 'put ''PWEmJihkPTEsYy5yb3c9YS0xKSxjLmNvbDwwPyhoPS0xLGMuY29sPTApOmMuY29sPjAmJmMuY29sPj1sJiYoaD0xLGMuY29sPWwtMSkse3Jvd0RpcjpkLGNvbERpcjpofX1mdW5jdGlvbiBPM2UoKXtyZXR1cm57d2lkdGg6QnMoYTMsdGhpcykueCtCcyhzYyx0aGlzKS5jb3VudFJlbmRlcmFi''@;'; put 'put ''bGVDb2x1bW5zKCksaGVpZ2h0OkJzKGEzLHRoaXMpLnkrQnMoc2MsdGhpcykuY291bnRSZW5kZXJhYmxlUm93cygpfX1mdW5jdGlvbiBsWChjLGwpe2NvbnN0IGE9QnMoc2MsdGhpcykuZmluZEZpcnN0Tm9uSGlkZGVuUmVuZGVyYWJsZVJvdyhjLGwpO3JldHVybiBudWxsPT09YT9udWxsOkJz''@;'; put 'put ''KGEzLHRoaXMpLnkrYX1mdW5jdGlvbiBjWChjLGwpe2NvbnN0IGE9QnMoc2MsdGhpcykuZmluZEZpcnN0Tm9uSGlkZGVuUmVuZGVyYWJsZUNvbHVtbihjLGwpO3JldHVybiBudWxsPT09YT9udWxsOkJzKGEzLHRoaXMpLngrYX1mdW5jdGlvbiBQM2UoYyl7Y29uc3R7cm93OmwsY29sOmF9PUJz''@;'; put 'put ''KHNjLHRoaXMpLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhjKTtpZihudWxsPT09bHx8bnVsbD09PWEpdGhyb3cgbmV3IEVycm9yKCJSZW5kZXJhYmxlIGNvb3JkcyBhcmUgbm90IHZpc2libGUuIik7cmV0dXJuIEJzKHNjLHRoaXMpLmNyZWF0ZUNlbGxDb29yZHMoQnMoYTMsdGhpcykueSts''@;'; put 'put ''LEJzKGEzLHRoaXMpLngrYSl9ZnVuY3Rpb24gX18oYyl7Y29uc3QgbD1jLmNsb25lKCk7cmV0dXJuIGwuY29sPWMuY29sLUJzKGEzLHRoaXMpLngsbC5yb3c9Yy5yb3ctQnMoYTMsdGhpcykueSxCcyhzYyx0aGlzKS5yZW5kZXJhYmxlVG9WaXN1YWxDb29yZHMobCl9eGwoUjNlLF8xKTtjb25z''@;'; put 'put ''dCBGM2U9UjNlLHh0dD1bMywyXSxFdHQ9W1sibnVtYmVyIl0sWyJudW1iZXIiLCJzdHJpbmciXSxbIm51bWJlciIsInVuZGVmaW5lZCJdLFsibnVtYmVyIiwic3RyaW5nIiwidW5kZWZpbmVkIl1dLGRYPVN5bWJvbCgicm9vdCIpLE4zZT1TeW1ib2woImNoaWxkIik7ZnVuY3Rpb24gd18oYyl7''@;'; put 'put ''bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmRYO2lmKGwhPT1kWCYmbCE9PU4zZSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdXNlZCBpbnRlcm5hbGx5IG9ubHkgYW5kIGNhbm5vdCBiZSBvdmVyd3Jp''@;'; put 'put ''dHRlbi4iKTtjb25zdCBhPUFycmF5LmlzQXJyYXkoYyksZD1sPT09ZFg7bGV0IGg9MDtpZihhKXtjb25zdCBmPWNbMF07MD09PWMubGVuZ3RoP2g9MTpkJiZmIGluc3RhbmNlb2Ygcks/aD0zOmQmJkFycmF5LmlzQXJyYXkoZik/aD13XyhmLE4zZSk6Yy5sZW5ndGg+PTImJmMubGVuZ3RoPD00''@;'; put 'put ''JiYhYy5zb21lKChNLEQpPT4hRXR0W0RdLmluY2x1ZGVzKHR5cGVvZiBNKSkmJihoPTIpfXJldHVybiBofWZ1bmN0aW9uICRFKGMpe2xldHtjcmVhdGVDZWxsQ29vcmRzOmwsY3JlYXRlQ2VsbFJhbmdlOmEsa2VlcERpcmVjdGlvbjpkPSExLHByb3BUb0NvbDpofT1hcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''PjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e307aWYoIXh0dC5pbmNsdWRlcyhjKSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHNlbGVjdGlvbiByYW5nZXMgc2NoZW1hIHR5cGUgd2FzIHByb3ZpZGVkLiIpO3JldHVybiBmdW5jdGlvbihmKXtjb25zdCB2PTM9''@;'; put 'put ''PT1jO2xldCBNPXY/Zi5mcm9tLnJvdzpmWzBdLEQ9dj9mLmZyb20uY29sOmZbMV0sWj12P2YudG8ucm93OmZbMl0sbmU9dj9mLnRvLmNvbDpmWzNdO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBoJiYoInN0cmluZyI9PXR5cGVvZiBEJiYoRD1oKEQpKSwic3RyaW5nIj09dHlwZW9mIG5lJiYobmU9''@;'; put 'put ''aChuZSkpKSxtYyhaKSYmKFo9TSksbWMobmUpJiYobmU9RCksIWQpe2NvbnN0IEVlPU0sQmU9RCxxZT1aLG50PW5lO009TWF0aC5taW4oRWUscWUpLEQ9TWF0aC5taW4oQmUsbnQpLFo9TWF0aC5tYXgoRWUscWUpLG5lPU1hdGgubWF4KEJlLG50KX1jb25zdCBjZT1sKE0sRCksYmU9bChaLG5l''@;'; put 'put ''KTtyZXR1cm4gYShjZSxjZSxiZSl9fWZ1bmN0aW9uIENfKGMsbCxhKXsoZnVuY3Rpb24ga3R0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCks''@;'; put 'put ''bC5zZXQoYyxhKX1mdW5jdGlvbiBYNyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRHR0KGMpe3ZhciBsPWZ1bmN0aW9uIEl0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEu''@;'; put 'put ''Y2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3Ry''@;'; put 'put ''aW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24geWMoYyxsKXtyZXR1cm4gYy5nZXQo''@;'; put 'put ''VjNlKGMsbCkpfWZ1bmN0aW9uIElwKGMsbCxhKXtyZXR1cm4gYy5zZXQoVjNlKGMsbCksYSksYX1mdW5jdGlvbiBWM2UoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3Io''@;'; put 'put ''IlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciB3MT1uZXcgV2Vha01hcCxKNz1uZXcgV2Vha01hcCxTUD1uZXcgV2Vha01hcCxLRT1uZXcgV2Vha01hcCxNUD1uZXcgV2Vha01hcCxxRT1uZXcgV2Vha01hcDtjbGFzcyBCM2V7Y29uc3RydWN0b3Io''@;'; put 'put ''bCxhKXt2YXIgZD10aGlzO1g3KHRoaXMsInNldHRpbmdzIix2b2lkIDApLFg3KHRoaXMsInRhYmxlUHJvcHMiLHZvaWQgMCksWDcodGhpcywiaW5Qcm9ncmVzcyIsITEpLFg3KHRoaXMsInNlbGVjdGVkUmFuZ2UiLG5ldyBTdHQoKGgsZix2KT0+dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxS''@;'; put 'put ''YW5nZShoLGYsdikpKSxYNyh0aGlzLCJoaWdobGlnaHQiLHZvaWQgMCksQ18odGhpcyx3MSx2b2lkIDApLENfKHRoaXMsSjcsdm9pZCAwKSxYNyh0aGlzLCJzZWxlY3RlZEJ5Um93SGVhZGVyIixuZXcgU2V0KSxYNyh0aGlzLCJzZWxlY3RlZEJ5Q29sdW1uSGVhZGVyIixuZXcgU2V0KSxDXyh0''@;'; put 'put ''aGlzLFNQLCExKSxDXyh0aGlzLEtFLCExKSxDXyh0aGlzLE1QLCJ1bmtub3duIiksQ18odGhpcyxxRSwtMSksdGhpcy5zZXR0aW5ncz1sLHRoaXMudGFibGVQcm9wcz1hLHRoaXMuaGlnaGxpZ2h0PW5ldyB5dHQoe2hlYWRlckNsYXNzTmFtZTpsLmN1cnJlbnRIZWFkZXJDbGFzc05hbWUsYWN0''@;'; put 'put ''aXZlSGVhZGVyQ2xhc3NOYW1lOmwuYWN0aXZlSGVhZGVyQ2xhc3NOYW1lLHJvd0NsYXNzTmFtZTpsLmN1cnJlbnRSb3dDbGFzc05hbWUsY29sdW1uQ2xhc3NOYW1lOmwuY3VycmVudENvbENsYXNzTmFtZSxjZWxsQXR0cmlidXRlczpbWyJhcmlhLXNlbGVjdGVkIiwidHJ1ZSJdXSxyb3dJbmRl''@;'; put 'put ''eE1hcHBlcjp0aGlzLnRhYmxlUHJvcHMucm93SW5kZXhNYXBwZXIsY29sdW1uSW5kZXhNYXBwZXI6dGhpcy50YWJsZVByb3BzLmNvbHVtbkluZGV4TWFwcGVyLGRpc2FibGVkQ2VsbFNlbGVjdGlvbjooaCxmKT0+dGhpcy50YWJsZVByb3BzLmlzRGlzYWJsZWRDZWxsU2VsZWN0aW9uKGgsZiks''@;'; put 'put ''Y2VsbENvcm5lclZpc2libGU6ZnVuY3Rpb24oKXtyZXR1cm4gZC5pc0NlbGxDb3JuZXJWaXNpYmxlKC4uLmFyZ3VtZW50cyl9LGFyZWFDb3JuZXJWaXNpYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGQuaXNBcmVhQ29ybmVyVmlzaWJsZSguLi5hcmd1bWVudHMpfSx2aXN1YWxUb1JlbmRlcmFibGVD''@;'; put 'put ''b29yZHM6aD0+dGhpcy50YWJsZVByb3BzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhoKSxyZW5kZXJhYmxlVG9WaXN1YWxDb29yZHM6aD0+dGhpcy50YWJsZVByb3BzLnJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhoKSxjcmVhdGVDZWxsQ29vcmRzOihoLGYpPT50aGlzLnRhYmxlUHJvcHMu''@;'; put 'put ''Y3JlYXRlQ2VsbENvb3JkcyhoLGYpLGNyZWF0ZUNlbGxSYW5nZTooaCxmLHYpPT50aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbFJhbmdlKGgsZix2KX0pLElwKHcxLHRoaXMsbmV3IEYzZSh0aGlzLnNlbGVjdGVkUmFuZ2Use3Jvd0luZGV4TWFwcGVyOnRoaXMudGFibGVQcm9wcy5yb3dJbmRl''@;'; put 'put ''eE1hcHBlcixjb2x1bW5JbmRleE1hcHBlcjp0aGlzLnRhYmxlUHJvcHMuY29sdW1uSW5kZXhNYXBwZXIsY291bnRSZW5kZXJhYmxlUm93czooKT0+dGhpcy50YWJsZVByb3BzLmNvdW50UmVuZGVyYWJsZVJvd3MoKSxjb3VudFJlbmRlcmFibGVDb2x1bW5zOigpPT50aGlzLnRhYmxlUHJvcHMu''@;'; put 'put ''Y291bnRSZW5kZXJhYmxlQ29sdW1ucygpLHZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkczpoPT50aGlzLnRhYmxlUHJvcHMudmlzdWFsVG9SZW5kZXJhYmxlQ29vcmRzKGgpLHJlbmRlcmFibGVUb1Zpc3VhbENvb3JkczpoPT50aGlzLnRhYmxlUHJvcHMucmVuZGVyYWJsZVRvVmlzdWFsQ29vcmRz''@;'; put 'put ''KGgpLGZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVSb3c6ZnVuY3Rpb24oKXtyZXR1cm4gZC50YWJsZVByb3BzLmZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVSb3coLi4uYXJndW1lbnRzKX0sZmluZEZpcnN0Tm9uSGlkZGVuUmVuZGVyYWJsZUNvbHVtbjpmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBkLnRhYmxlUHJvcHMuZmluZEZpcnN0Tm9uSGlkZGVuUmVuZGVyYWJsZUNvbHVtbiguLi5hcmd1bWVudHMpfSxjcmVhdGVDZWxsQ29vcmRzOihoLGYpPT50aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhoLGYpLGZpeGVkUm93c0JvdHRvbTooKT0+bC5maXhlZFJvd3NCb3R0b20s''@;'; put 'put ''bWluU3BhcmVSb3dzOigpPT5sLm1pblNwYXJlUm93cyxtaW5TcGFyZUNvbHM6KCk9PmwubWluU3BhcmVDb2xzLGF1dG9XcmFwUm93OigpPT5sLmF1dG9XcmFwUm93LGF1dG9XcmFwQ29sOigpPT5sLmF1dG9XcmFwQ29sfSkpLElwKEo3LHRoaXMsbmV3IEYzZSh0aGlzLnNlbGVjdGVkUmFuZ2Us''@;'; put 'put ''e3Jvd0luZGV4TWFwcGVyOnRoaXMudGFibGVQcm9wcy5yb3dJbmRleE1hcHBlcixjb2x1bW5JbmRleE1hcHBlcjp0aGlzLnRhYmxlUHJvcHMuY29sdW1uSW5kZXhNYXBwZXIsY291bnRSZW5kZXJhYmxlUm93czooKT0+e2NvbnN0IGg9dGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKTtyZXR1''@;'; put 'put ''cm4gdGhpcy50YWJsZVByb3BzLmNvdW50UmVuZGVyYWJsZVJvd3NJblJhbmdlKDAsaC5nZXRPdXRlckJvdHRvbUVuZENvcm5lcigpLnJvdyl9LGNvdW50UmVuZGVyYWJsZUNvbHVtbnM6KCk9Pntjb25zdCBoPXRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCk7cmV0dXJuIHRoaXMudGFibGVQ''@;'; put 'put ''cm9wcy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZSgwLGguZ2V0T3V0ZXJCb3R0b21FbmRDb3JuZXIoKS5jb2wpfSx2aXN1YWxUb1JlbmRlcmFibGVDb29yZHM6aD0+dGhpcy50YWJsZVByb3BzLnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhoKSxyZW5kZXJhYmxlVG9WaXN1YWxDb29y''@;'; put 'put ''ZHM6aD0+dGhpcy50YWJsZVByb3BzLnJlbmRlcmFibGVUb1Zpc3VhbENvb3JkcyhoKSxmaW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlUm93OmZ1bmN0aW9uKCl7cmV0dXJuIGQudGFibGVQcm9wcy5maW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlUm93KC4uLmFyZ3VtZW50cyl9LGZpbmRG''@;'; put 'put ''aXJzdE5vbkhpZGRlblJlbmRlcmFibGVDb2x1bW46ZnVuY3Rpb24oKXtyZXR1cm4gZC50YWJsZVByb3BzLmZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVDb2x1bW4oLi4uYXJndW1lbnRzKX0sY3JlYXRlQ2VsbENvb3JkczooaCxmKT0+dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29y''@;'; put 'put ''ZHMoaCxmKSxmaXhlZFJvd3NCb3R0b206KCk9PjAsbWluU3BhcmVSb3dzOigpPT4wLG1pblNwYXJlQ29sczooKT0+MCxhdXRvV3JhcFJvdzooKT0+ITAsYXV0b1dyYXBDb2w6KCk9PiEwfSkpLHljKHcxLHRoaXMpLmFkZExvY2FsSG9vaygiYmVmb3JlVHJhbnNmb3JtU3RhcnQiLGZ1bmN0aW9u''@;'; put 'put ''KCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucnVuTG9jYWxIb29rcygiYmVmb3JlTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLC4uLmYpfSkseWModzEsdGhpcykuYWRkTG9jYWxIb29rKCJhZnRl''@;'; put 'put ''clRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImFmdGVyTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLC4uLmYpfSkseWModzEs''@;'; put 'put ''dGhpcykuYWRkTG9jYWxIb29rKCJiZWZvcmVUcmFuc2Zvcm1FbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucnVuTG9jYWxIb29rcygiYmVmb3JlTW9kaWZ5VHJhbnNm''@;'; put 'put ''b3JtRW5kIiwuLi5mKX0pLHljKHcxLHRoaXMpLmFkZExvY2FsSG9vaygiYWZ0ZXJUcmFuc2Zvcm1FbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucnVuTG9jYWxIb29r''@;'; put 'put ''cygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1FbmQiLC4uLmYpfSkseWModzEsdGhpcykuYWRkTG9jYWxIb29rKCJpbnNlcnRSb3dSZXF1aXJlIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3Jl''@;'; put 'put ''dHVybiBkLnJ1bkxvY2FsSG9va3MoImluc2VydFJvd1JlcXVpcmUiLC4uLmYpfSkseWModzEsdGhpcykuYWRkTG9jYWxIb29rKCJpbnNlcnRDb2xSZXF1aXJlIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJn''@;'; put 'put ''dW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImluc2VydENvbFJlcXVpcmUiLC4uLmYpfSkseWModzEsdGhpcykuYWRkTG9jYWxIb29rKCJiZWZvcmVSb3dXcmFwIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disr''@;'; put 'put ''KWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImJlZm9yZVJvd1dyYXAiLC4uLmYpfSkseWModzEsdGhpcykuYWRkTG9jYWxIb29rKCJiZWZvcmVDb2x1bW5XcmFwIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9''@;'; put 'put ''MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoImJlZm9yZUNvbHVtbldyYXAiLC4uLmYpfSkseWMoSjcsdGhpcykuYWRkTG9jYWxIb29rKCJiZWZvcmVUcmFuc2Zvcm1TdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxm''@;'; put 'put ''PW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gZC5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVNb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsLi4uZil9KSx5YyhKNyx0aGlzKS5hZGRMb2NhbEhvb2soImFmdGVyVHJhbnNmb3JtU3RhcnQiLGZ1bmN0aW9uKCl7Zm9y''@;'; put 'put ''KHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucnVuTG9jYWxIb29rcygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsLi4uZil9KX1nZXRTZWxlY3RlZFJhbmdlKCl7cmV0dXJuIHRoaXMuc2VsZWN0''@;'; put 'put ''ZWRSYW5nZX1tYXJrU291cmNlKGwpe0lwKE1QLHRoaXMsbCl9bWFya0VuZFNvdXJjZSgpe0lwKE1QLHRoaXMsInVua25vd24iKX1nZXRTZWxlY3Rpb25Tb3VyY2UoKXtyZXR1cm4geWMoTVAsdGhpcyl9c2V0RXhwZWN0ZWRMYXllcnMobCl7SXAocUUsdGhpcyxsKX1iZWdpbigpe3RoaXMuaW5Q''@;'; put 'put ''cm9ncmVzcz0hMH1maW5pc2goKXt0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyU2VsZWN0aW9uRmluaXNoZWQiLEFycmF5LmZyb20odGhpcy5zZWxlY3RlZFJhbmdlKSksdGhpcy5pblByb2dyZXNzPSExLElwKHFFLHRoaXMsLTEpfWlzSW5Qcm9ncmVzcygpe3JldHVybiB0aGlzLmluUHJvZ3Jl''@;'; put 'put ''c3N9c2V0UmFuZ2VTdGFydChsLGEpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0saD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106bDtjb25zdCBmPSJtdWx0aXBsZSI9PT10''@;'; put 'put ''aGlzLnNldHRpbmdzLnNlbGVjdGlvbk1vZGUsdj1tYyhhKT90aGlzLnRhYmxlUHJvcHMuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuaXNDdHJsUHJlc3NlZCgpOmEsTT1sLmNsb25lKCk7SXAoU1AsdGhpcywhMSksdGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVTZXRSYW5nZVN0YXJ0IisoZD8iT25s''@;'; put 'put ''eSI6IiIpLE0pLCghZnx8ZiYmIXYmJm1jKGEpKSYmdGhpcy5zZWxlY3RlZFJhbmdlLmNsZWFyKCksdGhpcy5zZWxlY3RlZFJhbmdlLmFkZChNKS5jdXJyZW50KCkuc2V0SGlnaGxpZ2h0KGguY2xvbmUoKSksMD09PXRoaXMuZ2V0TGF5ZXJMZXZlbCgpJiYodGhpcy5zZWxlY3RlZEJ5Um93SGVh''@;'; put 'put ''ZGVyLmNsZWFyKCksdGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmNsZWFyKCkpLGR8fHRoaXMuc2V0UmFuZ2VFbmQobCl9c2V0UmFuZ2VTdGFydE9ubHkobCxhKXt0aGlzLnNldFJhbmdlU3RhcnQobCxhLCEwLGFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2Fy''@;'; put 'put ''Z3VtZW50c1syXTpsKX1zZXRSYW5nZUVuZChsKXtpZih0aGlzLnNlbGVjdGVkUmFuZ2UuaXNFbXB0eSgpKXJldHVybjtjb25zdCBhPWwuY2xvbmUoKSxkPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSxoPXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKSxmPXRoaXMuc2VsZWN0ZWRSYW5n''@;'; put 'put ''ZS5jdXJyZW50KCkuY2xvbmUoKS5zZXRUbyhsKS5pc1NpbmdsZUhlYWRlcigpO2lmKChkPjB8fGg+MCkmJigwPT09ZCYmYS5jb2w8MCYmIWZ8fDA9PT1oJiZhLnJvdzwwJiYhZikpcmV0dXJuO3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlU2V0UmFuZ2VFbmQiLGEpLHRoaXMuYmVnaW4oKTtj''@;'; put 'put ''b25zdCB2PXRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCk7aWYodGhpcy5zZXR0aW5ncy5uYXZpZ2FibGVIZWFkZXJzfHx2LmhpZ2hsaWdodC5ub3JtYWxpemUoKSwic2luZ2xlIj09PXRoaXMuc2V0dGluZ3Muc2VsZWN0aW9uTW9kZSl2LnNldEZyb20odi5oaWdobGlnaHQpLHYuc2V0VG8o''@;'; put 'put ''di5oaWdobGlnaHQpO2Vsc2V7Y29uc3QgRD12LmdldEhvcml6b250YWxEaXJlY3Rpb24oKSxaPXYuZ2V0VmVydGljYWxEaXJlY3Rpb24oKSxuZT10aGlzLmlzTXVsdGlwbGUoKTt2LnNldFRvKGEpLG5lJiYoRCE9PXYuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpfHwxPT09di5nZXRXaWR0aCgp''@;'; put 'put ''JiYhdi5pbmNsdWRlcyh2LmhpZ2hsaWdodCkpJiZ2LmZyb20uYXNzaWduKHtjb2w6di5oaWdobGlnaHQuY29sfSksbmUmJihaIT09di5nZXRWZXJ0aWNhbERpcmVjdGlvbigpfHwxPT09di5nZXRIZWlnaHQoKSYmIXYuaW5jbHVkZXModi5oaWdobGlnaHQpKSYmdi5mcm9tLmFzc2lnbih7cm93''@;'; put 'put ''OnYuaGlnaGxpZ2h0LnJvd30pfWQ+MCYmaD4wJiYoIXRoaXMuc2V0dGluZ3MubmF2aWdhYmxlSGVhZGVyc3x8dGhpcy5zZXR0aW5ncy5uYXZpZ2FibGVIZWFkZXJzJiYhdi5pc1NpbmdsZUhlYWRlcigpKSYmdi50by5ub3JtYWxpemUoKSx0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9yZUhpZ2hs''@;'; put 'put ''aWdodFNldCIpLHRoaXMuc2V0UmFuZ2VGb2N1cyh0aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpLmhpZ2hsaWdodCksdGhpcy5hcHBseUFuZENvbW1pdCgpO2NvbnN0IE09LTE9PT15YyhxRSx0aGlzKXx8dGhpcy5zZWxlY3RlZFJhbmdlLnNpemUoKT09PXljKHFFLHRoaXMpO3RoaXMucnVu''@;'; put 'put ''TG9jYWxIb29rcygiYWZ0ZXJTZXRSYW5nZUVuZCIsbCxNKX1hcHBseUFuZENvbW1pdCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLnNlbGVjdGVkUmFuZ2UuY3VycmVudCgpLGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2''@;'; put 'put ''b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRoaXMuZ2V0TGF5ZXJMZXZlbCgpO2NvbnN0IGQ9dGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpLGg9dGhpcy50YWJsZVByb3BzLmNvdW50Q29scygpO2E8dGhpcy5oaWdobGlnaHQubGF5ZXJMZXZlbCYmKFluKHRoaXMuaGlnaGxp''@;'; put 'put ''Z2h0LmdldEFyZWFzKCksQmU9PntCZS5jbGVhcigpfSksWW4odGhpcy5oaWdobGlnaHQuZ2V0TGF5ZXJlZEFyZWFzKCksQmU9PntCZS5jbGVhcigpfSksWW4odGhpcy5oaWdobGlnaHQuZ2V0Um93SGVhZGVycygpLEJlPT57QmUuY2xlYXIoKX0pLFluKHRoaXMuaGlnaGxpZ2h0LmdldENvbHVt''@;'; put 'put ''bkhlYWRlcnMoKSxCZT0+e0JlLmNsZWFyKCl9KSxZbih0aGlzLmhpZ2hsaWdodC5nZXRBY3RpdmVSb3dIZWFkZXJzKCksQmU9PntCZS5jbGVhcigpfSksWW4odGhpcy5oaWdobGlnaHQuZ2V0QWN0aXZlQ29sdW1uSGVhZGVycygpLEJlPT57QmUuY2xlYXIoKX0pLFluKHRoaXMuaGlnaGxpZ2h0''@;'; put 'put ''LmdldEFjdGl2ZUNvcm5lckhlYWRlcnMoKSxCZT0+e0JlLmNsZWFyKCl9KSxZbih0aGlzLmhpZ2hsaWdodC5nZXRSb3dIaWdobGlnaHRzKCksQmU9PntCZS5jbGVhcigpfSksWW4odGhpcy5oaWdobGlnaHQuZ2V0Q29sdW1uSGlnaGxpZ2h0cygpLEJlPT57QmUuY2xlYXIoKX0pKSx0aGlzLmhp''@;'; put 'put ''Z2hsaWdodC51c2VMYXllckxldmVsKGEpO2NvbnN0IGY9dGhpcy5oaWdobGlnaHQuY3JlYXRlQXJlYSgpLHY9dGhpcy5oaWdobGlnaHQuY3JlYXRlTGF5ZXJlZEFyZWEoKSxNPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZVJvd0hlYWRlcigpLEQ9dGhpcy5oaWdobGlnaHQuY3JlYXRlQ29sdW1uSGVh''@;'; put 'put ''ZGVyKCksWj10aGlzLmhpZ2hsaWdodC5jcmVhdGVBY3RpdmVSb3dIZWFkZXIoKSxuZT10aGlzLmhpZ2hsaWdodC5jcmVhdGVBY3RpdmVDb2x1bW5IZWFkZXIoKSxjZT10aGlzLmhpZ2hsaWdodC5jcmVhdGVBY3RpdmVDb3JuZXJIZWFkZXIoKSxiZT10aGlzLmhpZ2hsaWdodC5jcmVhdGVSb3dI''@;'; put 'put ''aWdobGlnaHQoKSxFZT10aGlzLmhpZ2hsaWdodC5jcmVhdGVDb2x1bW5IaWdobGlnaHQoKTtpZihmLmNsZWFyKCksdi5jbGVhcigpLE0uY2xlYXIoKSxELmNsZWFyKCksWi5jbGVhcigpLG5lLmNsZWFyKCksY2UuY2xlYXIoKSxiZS5jbGVhcigpLEVlLmNsZWFyKCksdGhpcy5oaWdobGlnaHQu''@;'; put 'put ''aXNFbmFibGVkRm9yKG9YLGwuaGlnaGxpZ2h0KSYmKHRoaXMuaXNNdWx0aXBsZSgpfHxhPj0xKSYmKGYuYWRkKGwuZnJvbSkuYWRkKGwudG8pLmNvbW1pdCgpLHYuYWRkKGwuZnJvbSkuYWRkKGwudG8pLmNvbW1pdCgpLDE9PT1hKSl7Y29uc3QgQmU9dGhpcy5zZWxlY3RlZFJhbmdlLnByZXZp''@;'; put 'put ''b3VzKCk7dGhpcy5oaWdobGlnaHQudXNlTGF5ZXJMZXZlbChhLTEpLHRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFyZWEoKS5hZGQoQmUuZnJvbSkuY29tbWl0KCkuc3luY1dpdGgoQmUpLHRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUxheWVyZWRBcmVhKCkuYWRkKEJlLmZyb20pLmNvbW1pdCgpLnN5bmNX''@;'; put 'put ''aXRoKEJlKSx0aGlzLmhpZ2hsaWdodC51c2VMYXllckxldmVsKGEpfWlmKHRoaXMuaGlnaGxpZ2h0LmlzRW5hYmxlZEZvcihpWCxsLmhpZ2hsaWdodCkpe2lmKCFsLmlzU2luZ2xlSGVhZGVyKCkpe2NvbnN0IG50PXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KGwu''@;'; put 'put ''ZnJvbS5yb3csMCksLTEpLGx0PXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGwudG8ucm93LC0xKSxtdD10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcygtMSxNYXRoLm1heChsLmZyb20uY29sLDApKSxKdD10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3Jkcygt''@;'; put 'put ''MSxsLnRvLmNvbCk7InNpbmdsZSI9PT10aGlzLnNldHRpbmdzLnNlbGVjdGlvbk1vZGU/KE0uYWRkKG50KS5jb21taXQoKSxELmFkZChtdCkuY29tbWl0KCksYmUuYWRkKG50KS5jb21taXQoKSxFZS5hZGQobXQpLmNvbW1pdCgpKTooTS5hZGQobnQpLmFkZChsdCkuY29tbWl0KCksRC5hZGQo''@;'; put 'put ''bXQpLmFkZChKdCkuY29tbWl0KCksYmUuYWRkKG50KS5hZGQobHQpLmNvbW1pdCgpLEVlLmFkZChtdCkuYWRkKEp0KS5jb21taXQoKSl9Y29uc3QgQmU9IXljKEtFLHRoaXMpJiZ0aGlzLmlzRW50aXJlUm93U2VsZWN0ZWQoKSYmKGg+MCYmaD09PWwuZ2V0V2lkdGgoKXx8MD09PWgmJnRoaXMu''@;'; put 'put ''aXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkpLHFlPSF5YyhLRSx0aGlzKSYmdGhpcy5pc0VudGlyZUNvbHVtblNlbGVjdGVkKCkmJihkPjAmJmQ9PT1sLmdldEhlaWdodCgpfHwwPT09ZCYmdGhpcy5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSk7QmUmJlouYWRkKHRoaXMudGFibGVQcm9wcy5j''@;'; put 'put ''cmVhdGVDZWxsQ29vcmRzKE1hdGgubWF4KGwuZnJvbS5yb3csMCksTWF0aC5taW4oLXRoaXMudGFibGVQcm9wcy5jb3VudFJvd0hlYWRlcnMoKSwtMSkpKS5hZGQodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoTWF0aC5tYXgobC50by5yb3csMCksLTEpKS5jb21taXQoKSxxZSYm''@;'; put 'put ''bmUuYWRkKHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKE1hdGgubWluKC10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xIZWFkZXJzKCksLTEpLE1hdGgubWF4KGwuZnJvbS5jb2wsMCkpKS5hZGQodGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoLTEsTWF0aC5tYXgobC50''@;'; put 'put ''by5jb2wsMCkpKS5jb21taXQoKSxCZSYmcWUmJmNlLmFkZCh0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcygtdGhpcy50YWJsZVByb3BzLmNvdW50Q29sSGVhZGVycygpLC10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dIZWFkZXJzKCkpKS5hZGQodGhpcy50YWJsZVByb3BzLmNyZWF0''@;'; put 'put ''ZUNlbGxDb29yZHMoLTEsLTEpKS5jb21taXQoKX19c2V0UmFuZ2VGb2N1cyhsKXtpZih0aGlzLnNlbGVjdGVkUmFuZ2UuaXNFbXB0eSgpKXJldHVybjtjb25zdCBhPXRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCk7dGhpcy5pblByb2dyZXNzfHx0aGlzLnJ1bkxvY2FsSG9va3MoImJlZm9y''@;'; put 'put ''ZVNldEZvY3VzIixsKTtjb25zdCBkPXRoaXMuaGlnaGxpZ2h0LmdldEZvY3VzKCk7ZC5jbGVhcigpLGEuc2V0SGlnaGxpZ2h0KGwpLHRoaXMuaW5Qcm9ncmVzc3x8dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVIaWdobGlnaHRTZXQiKSx0aGlzLmhpZ2hsaWdodC5pc0VuYWJsZWRGb3IoYlAs''@;'; put 'put ''YS5oaWdobGlnaHQpJiZkLmFkZChhLmhpZ2hsaWdodCkuY29tbWl0KCkuc3luY1dpdGgoYSksdGhpcy5pblByb2dyZXNzfHwoSXAoU1AsdGhpcywhMCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclNldEZvY3VzIixhLmhpZ2hsaWdodCkpfXRyYW5zZm9ybVN0YXJ0KGwsYSl7bGV0IGQ9YXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTt0aGlzLnNldHRpbmdzLm5hdmlnYWJsZUhlYWRlcnM/eWModzEsdGhpcykuc2V0T2Zmc2V0U2l6ZSh7eDp0aGlzLnRhYmxlUHJvcHMuY291bnRSb3dIZWFkZXJzKCkseTp0aGlzLnRhYmxlUHJvcHMu''@;'; put 'put ''Y291bnRDb2xIZWFkZXJzKCl9KTp5Yyh3MSx0aGlzKS5yZXNldE9mZnNldFNpemUoKSx0aGlzLnNldFJhbmdlU3RhcnQoeWModzEsdGhpcykudHJhbnNmb3JtU3RhcnQobCxhLGQpKX10cmFuc2Zvcm1FbmQobCxhKXt0aGlzLnNldHRpbmdzLm5hdmlnYWJsZUhlYWRlcnM/eWModzEsdGhpcyku''@;'; put 'put ''c2V0T2Zmc2V0U2l6ZSh7eDp0aGlzLnRhYmxlUHJvcHMuY291bnRSb3dIZWFkZXJzKCkseTp0aGlzLnRhYmxlUHJvcHMuY291bnRDb2xIZWFkZXJzKCl9KTp5Yyh3MSx0aGlzKS5yZXNldE9mZnNldFNpemUoKSx0aGlzLnNldFJhbmdlRW5kKHljKHcxLHRoaXMpLnRyYW5zZm9ybUVuZChsLGEp''@;'; put 'put ''KX10cmFuc2Zvcm1Gb2N1cyhsLGEpe2NvbnN0IGQ9dGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKSx7cm93OmgsY29sOmZ9PWQuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLHY9dGhpcy50YWJsZVByb3BzLmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKDAsZi0xKSxNPXRoaXMudGFi''@;'; put 'put ''bGVQcm9wcy5jb3VudFJlbmRlcmFibGVSb3dzSW5SYW5nZSgwLGgtMSk7ZC5oaWdobGlnaHQuaXNIZWFkZXIoKT95YyhKNyx0aGlzKS5zZXRPZmZzZXRTaXplKHt4OmY8MD9NYXRoLmFicyhmKTotdix5Omg8MD9NYXRoLmFicyhoKTotTX0pOnljKEo3LHRoaXMpLnNldE9mZnNldFNpemUoe3g6''@;'; put 'put ''ZjwwPzA6LXYseTpoPDA/MDotTX0pO2NvbnN0IEQ9eWMoSjcsdGhpcykudHJhbnNmb3JtU3RhcnQobCxhKTt0aGlzLnNldFJhbmdlRm9jdXMoRC5ub3JtYWxpemUoKSl9c2hpZnRSb3dzKGwsYSl7aWYoIXRoaXMuaXNTZWxlY3RlZCgpKXJldHVybjtjb25zdCBkPXRoaXMuc2VsZWN0ZWRSYW5n''@;'; put 'put ''ZS5jdXJyZW50KCk7aWYodGhpcy5pc1NlbGVjdGVkQnlDb3JuZXIoKSl0aGlzLnNlbGVjdEFsbCghMCwhMCx7ZGlzYWJsZUhlYWRlcnNIaWdobGlnaHQ6ITB9KTtlbHNlIGlmKHRoaXMuaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl8fGQuZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLnJvdz49''@;'; put 'put ''bCl7Y29uc3R7ZnJvbTpoLHRvOmYsaGlnaGxpZ2h0OnZ9PWQsTT10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dzKCksRD10aGlzLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpLFo9dGhpcy5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSxuZT1aPy0xOjAsY2U9Wj8wOmE7dGhpcy5nZXRTZWxlY3Rl''@;'; put 'put ''ZFJhbmdlKCkucG9wKCk7Y29uc3QgYmU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoQXMoaC5yb3crY2UsbmUsTS0xKSxoLmNvbCksRWU9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoQXMoZi5yb3crYSxuZSxNLTEpLGYuY29sKTt0aGlzLm1hcmtTb3VyY2UoInNo''@;'; put 'put ''aWZ0Iiksdi5yb3c+PWw/dGhpcy5zZXRSYW5nZVN0YXJ0T25seShiZSwhMCx0aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhBcyh2LnJvdythLDAsTS0xKSx2LmNvbCkpOnRoaXMuc2V0UmFuZ2VTdGFydE9ubHkoYmUsITApLEQmJnRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5hZGQo''@;'; put 'put ''dGhpcy5nZXRMYXllckxldmVsKCkpLFomJnRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLHRoaXMuc2V0UmFuZ2VFbmQoRWUpLHRoaXMubWFya0VuZFNvdXJjZSgpfX1zaGlmdENvbHVtbnMobCxhKXtpZighdGhpcy5pc1NlbGVjdGVkKCkpcmV0''@;'; put 'put ''dXJuO2NvbnN0IGQ9dGhpcy5zZWxlY3RlZFJhbmdlLmN1cnJlbnQoKTtpZih0aGlzLmlzU2VsZWN0ZWRCeUNvcm5lcigpKXRoaXMuc2VsZWN0QWxsKCEwLCEwLHtkaXNhYmxlSGVhZGVyc0hpZ2hsaWdodDohMH0pO2Vsc2UgaWYodGhpcy5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKXx8ZC5nZXRP''@;'; put 'put ''dXRlclRvcFN0YXJ0Q29ybmVyKCkuY29sPj1sKXtjb25zdHtmcm9tOmgsdG86ZixoaWdobGlnaHQ6dn09ZCxNPXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKSxEPXRoaXMuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCksWj10aGlzLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpLG5lPUQ/LTE6''@;'; put 'put ''MCxjZT1EPzA6YTt0aGlzLmdldFNlbGVjdGVkUmFuZ2UoKS5wb3AoKTtjb25zdCBiZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhoLnJvdyxBcyhoLmNvbCtjZSxuZSxNLTEpKSxFZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhmLnJvdyxBcyhmLmNvbCthLG5l''@;'; put 'put ''LE0tMSkpO3RoaXMubWFya1NvdXJjZSgic2hpZnQiKSx2LmNvbD49bD90aGlzLnNldFJhbmdlU3RhcnRPbmx5KGJlLCEwLHRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKHYucm93LEFzKHYuY29sK2EsMCxNLTEpKSk6dGhpcy5zZXRSYW5nZVN0YXJ0T25seShiZSwhMCksRCYmdGhp''@;'; put 'put ''cy5zZWxlY3RlZEJ5Um93SGVhZGVyLmFkZCh0aGlzLmdldExheWVyTGV2ZWwoKSksWiYmdGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmFkZCh0aGlzLmdldExheWVyTGV2ZWwoKSksdGhpcy5zZXRSYW5nZUVuZChFZSksdGhpcy5tYXJrRW5kU291cmNlKCl9fWdldExheWVyTGV2ZWwoKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5zZWxlY3RlZFJhbmdlLnNpemUoKS0xfWlzU2VsZWN0ZWQoKXtyZXR1cm4hdGhpcy5zZWxlY3RlZFJhbmdlLmlzRW1wdHkoKX1pc011bHRpcGxlKCl7aWYoIXRoaXMuaXNTZWxlY3RlZCgpKXJldHVybiExO2NvbnN0IGw9UGQoIXRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50''@;'; put 'put ''KCkuaXNTaW5nbGUoKSk7cmV0dXJuIHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJJc011bHRpcGxlU2VsZWN0aW9uIixsKSxsLnZhbHVlfWlzRm9jdXNTZWxlY3Rpb25DaGFuZ2VkKCl7cmV0dXJuIHRoaXMuaXNTZWxlY3RlZCgpJiZ5YyhTUCx0aGlzKX1pc1NlbGVjdGVkQnlSb3dIZWFkZXIo''@;'; put 'put ''KXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5nZXRMYXllckxldmVsKCk7cmV0dXJuIXRoaXMuaXNTZWxlY3RlZEJ5Q29ybmVyKGwpJiYoLTE9PT1sP3RoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5zaXplPjA6dGhpcy5z''@;'; put 'put ''ZWxlY3RlZEJ5Um93SGVhZGVyLmhhcyhsKSl9aXNFbnRpcmVSb3dTZWxlY3RlZCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLmdldExheWVyTGV2ZWwoKTtjb25zdCBhPWg9Pntjb25zdHtjb2w6Zn09aC5nZXRPdXRl''@;'; put 'put ''clRvcFN0YXJ0Q29ybmVyKCksdj10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dIZWFkZXJzKCksTT10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCk7cmV0dXJuKHY+MCYmZjwwfHwwPT09dikmJmguZ2V0V2lkdGgoKT09PU19O2lmKC0xPT09bClyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnNlbGVj''@;'; put 'put ''dGVkUmFuZ2UpLnNvbWUoaD0+YShoKSk7Y29uc3QgZD10aGlzLnNlbGVjdGVkUmFuZ2UucGVla0J5SW5kZXgobCk7cmV0dXJuISFkJiZhKGQpfWlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50''@;'; put 'put ''c1swXTp0aGlzLmdldExheWVyTGV2ZWwoKTtyZXR1cm4hdGhpcy5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmKC0xPT09bD90aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuc2l6ZT4wOnRoaXMuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5oYXMobCkpfWlzRW50aXJlQ29sdW1uU2VsZWN0ZWQoKXts''@;'; put 'put ''ZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5nZXRMYXllckxldmVsKCk7Y29uc3QgYT1oPT57Y29uc3R7cm93OmZ9PWguZ2V0T3V0ZXJUb3BTdGFydENvcm5lcigpLHY9dGhpcy50YWJsZVByb3BzLmNvdW50Q29sSGVhZGVy''@;'; put 'put ''cygpLE09dGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpO3JldHVybih2PjAmJmY8MHx8MD09PXYpJiZoLmdldEhlaWdodCgpPT09TX07aWYoLTE9PT1sKXJldHVybiBBcnJheS5mcm9tKHRoaXMuc2VsZWN0ZWRSYW5nZSkuc29tZShoPT5hKGgpKTtjb25zdCBkPXRoaXMuc2VsZWN0ZWRSYW5n''@;'; put 'put ''ZS5wZWVrQnlJbmRleChsKTtyZXR1cm4hIWQmJmEoZCl9aXNTZWxlY3RlZEJ5QW55SGVhZGVyKCl7cmV0dXJuIHRoaXMuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKC0xKXx8dGhpcy5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoLTEpfHx0aGlzLmlzU2VsZWN0ZWRCeUNvcm5lcigpfWlzU2VsZWN0''@;'; put 'put ''ZWRCeUNvcm5lcigpe3JldHVybiB0aGlzLnNlbGVjdGVkQnlDb2x1bW5IZWFkZXIuaGFzKHRoaXMuZ2V0TGF5ZXJMZXZlbCgpKSYmdGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyLmhhcyh0aGlzLmdldExheWVyTGV2ZWwoKSl9aW5JblNlbGVjdGlvbihsKXtyZXR1cm4gdGhpcy5zZWxlY3RlZFJh''@;'; put 'put ''bmdlLmluY2x1ZGVzKGwpfWlzQ2VsbENvcm5lclZpc2libGUoKXtyZXR1cm4gdGhpcy5zZXR0aW5ncy5maWxsSGFuZGxlJiYhdGhpcy50YWJsZVByb3BzLmlzRWRpdG9yT3BlbmVkKCkmJiF0aGlzLmlzTXVsdGlwbGUoKX1pc0NlbGxWaXNpYmxlKGwpe2NvbnN0IGE9dGhpcy50YWJsZVByb3Bz''@;'; put 'put ''LnZpc3VhbFRvUmVuZGVyYWJsZUNvb3JkcyhsKTtyZXR1cm4gbnVsbCE9PWEucm93JiZudWxsIT09YS5jb2x9aXNBcmVhQ29ybmVyVmlzaWJsZShsKXtyZXR1cm4oIU51bWJlci5pc0ludGVnZXIobCl8fGw9PT10aGlzLmdldExheWVyTGV2ZWwoKSkmJnRoaXMuc2V0dGluZ3MuZmlsbEhhbmRs''@;'; put 'put ''ZSYmIXRoaXMudGFibGVQcm9wcy5pc0VkaXRvck9wZW5lZCgpJiZ0aGlzLmlzTXVsdGlwbGUoKX1jbGVhcigpe3RoaXMuc2VsZWN0ZWRSYW5nZS5jbGVhcigpLHRoaXMuaGlnaGxpZ2h0LmNsZWFyKCl9ZGVzZWxlY3QoKXt0aGlzLmlzU2VsZWN0ZWQoKSYmKHRoaXMuaW5Qcm9ncmVzcz0hMSx0''@;'; put 'put ''aGlzLmNsZWFyKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckRlc2VsZWN0IikpfXNlbGVjdEFsbCgpe3ZhciBsO2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sZD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3Vt''@;'; put 'put ''ZW50c1sxXSYmYXJndW1lbnRzWzFdLGg9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOntmb2N1c1Bvc2l0aW9uOiExLGRpc2FibGVIZWFkZXJzSGlnaGxpZ2h0OiExfTtjb25zdCBmPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSx2PXRo''@;'; put 'put ''aXMudGFibGVQcm9wcy5jb3VudENvbHMoKSxNPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd0hlYWRlcnMoKSxEPXRoaXMudGFibGVQcm9wcy5jb3VudENvbEhlYWRlcnMoKSxaPWQ/LUQ6MCxuZT1hPy1NOjA7aWYoMD09PVomJjA9PT1uZSYmKDA9PT1mfHwwPT09dikpcmV0dXJuO2xldCBjZT1u''@;'; put 'put ''dWxsPT09KGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCkuY3VycmVudCgpKXx8dm9pZCAwPT09bD92b2lkIDA6bC5oaWdobGlnaHQ7Y29uc3R7Zm9jdXNQb3NpdGlvbjpiZSxkaXNhYmxlSGVhZGVyc0hpZ2hsaWdodDpFZX09aDtJcChLRSx0aGlzLEVlKSxiZSYmTnVtYmVyLmlzSW50ZWdlcihi''@;'; put 'put ''ZT8ucm93KSYmTnVtYmVyLmlzSW50ZWdlcihiZT8uY29sKSYmKGNlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKEFzKGJlLnJvdyxaLGYtMSksQXMoYmUuY29sLG5lLHYtMSkpKTtjb25zdCBCZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhaLG5lKSxxZT10aGlz''@;'; put 'put ''LnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhmLTEsdi0xKTt0aGlzLmNsZWFyKCksdGhpcy5zZXRSYW5nZVN0YXJ0T25seShCZSx2b2lkIDAsY2UpLG5lPDAmJnRoaXMuc2VsZWN0ZWRCeVJvd0hlYWRlci5hZGQodGhpcy5nZXRMYXllckxldmVsKCkpLFo8MCYmdGhpcy5zZWxlY3RlZEJ5''@;'; put 'put ''Q29sdW1uSGVhZGVyLmFkZCh0aGlzLmdldExheWVyTGV2ZWwoKSksdGhpcy5zZXRSYW5nZUVuZChxZSksdGhpcy5maW5pc2goKSxJcChLRSx0aGlzLCExKX1zZWxlY3RDZWxscyhsKXt2YXIgYT10aGlzO2NvbnN0IGQ9d18obCk7aWYoMT09PWQpcmV0dXJuITE7aWYoMD09PWQpdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKGZsYFVuc3VwcG9ydGVkIGZvcm1hdCBvZiB0aGUgc2VsZWN0aW9uIHJhbmdlcyB3YXMgcGFzc2VkLiBUbyBzZWxlY3QgY2VsbHMgcGFzc1x4MjAKICAgICAgICB0aGUgY29vcmRpbmF0ZXMgYXMgYW4gYXJyYXkgb2YgYXJyYXlzIChbW3Jvd1N0YXJ0LCBjb2x1bW5TdGFydC9jb2x1''@;'; put 'put ''bW5Qcm9wU3RhcnQsIHJvd0VuZCxceDIwCiAgICAgICAgY29sdW1uRW5kL2NvbHVtblByb3BFbmRdXSkgb3IgYXMgYW4gYXJyYXkgb2YgQ2VsbFJhbmdlIG9iamVjdHMuYCk7Y29uc3QgaD0kRShkLHtjcmVhdGVDZWxsQ29vcmRzOmZ1bmN0aW9uKCl7cmV0dXJuIGEudGFibGVQcm9wcy5jcmVh''@;'; put 'put ''dGVDZWxsQ29vcmRzKC4uLmFyZ3VtZW50cyl9LGNyZWF0ZUNlbGxSYW5nZTpmdW5jdGlvbigpe3JldHVybiBhLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbFJhbmdlKC4uLmFyZ3VtZW50cyl9LHByb3BUb0NvbDpEPT50aGlzLnRhYmxlUHJvcHMucHJvcFRvQ29sKEQpLGtlZXBEaXJlY3Rpb246ITB9''@;'; put 'put ''KSxmPXRoaXMuc2V0dGluZ3MubmF2aWdhYmxlSGVhZGVycyx2PXtjb3VudFJvd3M6dGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpLGNvdW50Q29sczp0aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCksY291bnRSb3dIZWFkZXJzOmY/dGhpcy50YWJsZVByb3BzLmNvdW50Um93SGVhZGVycygp''@;'; put 'put ''OjAsY291bnRDb2xIZWFkZXJzOmY/dGhpcy50YWJsZVByb3BzLmNvdW50Q29sSGVhZGVycygpOjB9LE09IWwuc29tZShEPT57Y29uc3QgWj1oKEQpLG5lPVouaXNWYWxpZCh2KTtyZXR1cm4hKG5lJiYhWi5jb250YWluc0hlYWRlcnMoKXx8bmUmJlouY29udGFpbnNIZWFkZXJzKCkmJlouaXNT''@;'; put 'put ''aW5nbGVIZWFkZXIoKSl9KTtyZXR1cm4gTSYmKHRoaXMuY2xlYXIoKSx0aGlzLnNldEV4cGVjdGVkTGF5ZXJzKGwubGVuZ3RoKSxZbihsLEQ9Pntjb25zdHtmcm9tOlosdG86bmV9PWgoRCk7dGhpcy5zZXRSYW5nZVN0YXJ0T25seShaLmNsb25lKCksITEpLHRoaXMuc2V0UmFuZ2VFbmQobmUu''@;'; put 'put ''Y2xvbmUoKSl9KSx0aGlzLmZpbmlzaCgpKSxNfXNlbGVjdENvbHVtbnMobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmwsZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06''@;'; put 'put ''MDtjb25zdCBoPSJzdHJpbmciPT10eXBlb2YgbD90aGlzLnRhYmxlUHJvcHMucHJvcFRvQ29sKGwpOmwsZj0ic3RyaW5nIj09dHlwZW9mIGE/dGhpcy50YWJsZVByb3BzLnByb3BUb0NvbChhKTphLHY9dGhpcy50YWJsZVByb3BzLmNvdW50Um93cygpLE09dGhpcy50YWJsZVByb3BzLmNvdW50''@;'; put 'put ''Q29scygpLEQ9dGhpcy50YWJsZVByb3BzLmNvdW50Q29sSGVhZGVycygpLFo9MD09PUQ/MDotRCxuZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbENvb3JkcyhaLGgpLGNlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKHYtMSxmKSxiZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRl''@;'; put 'put ''Q2VsbFJhbmdlKG5lLG5lLGNlKS5pc1ZhbGlkKHtjb3VudFJvd3M6dixjb3VudENvbHM6TSxjb3VudFJvd0hlYWRlcnM6MCxjb3VudENvbEhlYWRlcnM6RH0pO2lmKGJlKXtsZXQgRWU9MCxCZT0wO051bWJlci5pc0ludGVnZXIoZD8ucm93KSYmTnVtYmVyLmlzSW50ZWdlcihkPy5jb2wpPyhF''@;'; put 'put ''ZT1BcyhkLnJvdyxaLHYtMSksQmU9QXMoZC5jb2wsTWF0aC5taW4oaCxmKSxNYXRoLm1heChoLGYpKSk6KEVlPUFzKGQsWix2LTEpLEJlPWgpO2NvbnN0IHFlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKEVlLEJlKSxudD0wPT09RD8wOkFzKHFlLnJvdyxaLC0xKSxsdD12LTEs''@;'; put 'put ''bXQ9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMobnQsaCksSnQ9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMobHQsZik7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVTZWxlY3RDb2x1bW5zIixtdCxKdCxxZSksbXQucm93PW50LEp0LnJvdz1sdCx0aGlzLnNldFJh''@;'; put 'put ''bmdlU3RhcnRPbmx5KG10LHZvaWQgMCxxZSksdGhpcy5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmFkZCh0aGlzLmdldExheWVyTGV2ZWwoKSksdGhpcy5zZXRSYW5nZUVuZChKdCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclNlbGVjdENvbHVtbnMiLG10LEp0LHFlKSx0aGlzLmZpbmlzaCgp''@;'; put 'put ''fXJldHVybiBiZX1zZWxlY3RSb3dzKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOjA7Y29uc3QgaD10aGlzLnRhYmxl''@;'; put 'put ''UHJvcHMuY291bnRSb3dzKCksZj10aGlzLnRhYmxlUHJvcHMuY291bnRDb2xzKCksdj10aGlzLnRhYmxlUHJvcHMuY291bnRSb3dIZWFkZXJzKCksTT0wPT09dj8wOi12LEQ9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMobCxNKSxaPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxs''@;'; put 'put ''Q29vcmRzKGEsZi0xKSxuZT10aGlzLnRhYmxlUHJvcHMuY3JlYXRlQ2VsbFJhbmdlKEQsRCxaKS5pc1ZhbGlkKHtjb3VudFJvd3M6aCxjb3VudENvbHM6Zixjb3VudFJvd0hlYWRlcnM6dixjb3VudENvbEhlYWRlcnM6MH0pO2lmKG5lKXtsZXQgY2U9MCxiZT0wO051bWJlci5pc0ludGVnZXIo''@;'; put 'put ''ZD8ucm93KSYmTnVtYmVyLmlzSW50ZWdlcihkPy5jb2wpPyhjZT1BcyhkLnJvdyxNYXRoLm1pbihsLGEpLE1hdGgubWF4KGwsYSkpLGJlPUFzKGQuY29sLE0sZi0xKSk6KGNlPWwsYmU9QXMoZCxNLGYtMSkpO2NvbnN0IEVlPXRoaXMudGFibGVQcm9wcy5jcmVhdGVDZWxsQ29vcmRzKGNlLGJl''@;'; put 'put ''KSxCZT0wPT09dj8wOkFzKEVlLmNvbCxNLC0xKSxxZT1mLTEsbnQ9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMobCxCZSksbHQ9dGhpcy50YWJsZVByb3BzLmNyZWF0ZUNlbGxDb29yZHMoYSxxZSk7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVTZWxlY3RSb3dzIixudCxsdCxF''@;'; put 'put ''ZSksbnQuY29sPUJlLGx0LmNvbD1xZSx0aGlzLnNldFJhbmdlU3RhcnRPbmx5KG50LHZvaWQgMCxFZSksdGhpcy5zZWxlY3RlZEJ5Um93SGVhZGVyLmFkZCh0aGlzLmdldExheWVyTGV2ZWwoKSksdGhpcy5zZXRSYW5nZUVuZChsdCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlclNlbGVjdFJv''@;'; put 'put ''d3MiLG50LGx0LEVlKSx0aGlzLmZpbmlzaCgpfXJldHVybiBuZX1yZWZyZXNoKCl7aWYoIXRoaXMuaXNTZWxlY3RlZCgpKXJldHVybjtjb25zdCBsPXRoaXMudGFibGVQcm9wcy5jb3VudFJvd3MoKSxhPXRoaXMudGFibGVQcm9wcy5jb3VudENvbHMoKTtpZigwPT09bHx8MD09PWEpcmV0dXJu''@;'; put 'put ''IHZvaWQgdGhpcy5kZXNlbGVjdCgpO2NvbnN0IGQ9dGhpcy5zZWxlY3RlZFJhbmdlLnBlZWtCeUluZGV4KHRoaXMuc2VsZWN0ZWRSYW5nZS5zaXplKCktMSkse2Zyb206aCx0bzpmLGhpZ2hsaWdodDp2fT1kO3RoaXMuY2xlYXIoKSx2LmFzc2lnbih7cm93OkFzKHYucm93LC0xLzAsbC0xKSxj''@;'; put 'put ''b2w6QXModi5jb2wsLTEvMCxhLTEpfSksaC5hc3NpZ24oe3JvdzpBcyhoLnJvdywtMS8wLGwtMSksY29sOkFzKGguY29sLC0xLzAsYS0xKX0pLGYuYXNzaWduKHtyb3c6QXMoZi5yb3csMCxsLTEpLGNvbDpBcyhmLmNvbCwwLGEtMSl9KSx0aGlzLnNlbGVjdGVkUmFuZ2UucmFuZ2VzLnB1c2go''@;'; put 'put ''ZCksdGhpcy5oaWdobGlnaHQuZ2V0Rm9jdXMoKS5hZGQodikuY29tbWl0KCkuc3luY1dpdGgoZCksdGhpcy5hcHBseUFuZENvbW1pdChkKX1jb21taXQoKXtpZih0aGlzLmhpZ2hsaWdodC5nZXRDdXN0b21TZWxlY3Rpb25zKCkuZm9yRWFjaChoPT57aC5jb21taXQoKX0pLCF0aGlzLmlzU2Vs''@;'; put 'put ''ZWN0ZWQoKSlyZXR1cm47Y29uc3QgYT10aGlzLmdldExheWVyTGV2ZWwoKSxkPXRoaXMuc2VsZWN0ZWRSYW5nZS5jdXJyZW50KCk7dGhpcy5oaWdobGlnaHQuaXNFbmFibGVkRm9yKGJQLGQuaGlnaGxpZ2h0KSYmdGhpcy5oaWdobGlnaHQuZ2V0Rm9jdXMoKS5jb21taXQoKS5zeW5jV2l0aChk''@;'; put 'put ''KTtmb3IobGV0IGg9MDtoPHRoaXMuc2VsZWN0ZWRSYW5nZS5zaXplKCk7aCs9MSl7dGhpcy5oaWdobGlnaHQudXNlTGF5ZXJMZXZlbChoKTtjb25zdCBmPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUFyZWEoKSx2PXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUxheWVyZWRBcmVhKCksTT10aGlzLmhpZ2hs''@;'; put 'put ''aWdodC5jcmVhdGVSb3dIZWFkZXIoKSxEPXRoaXMuaGlnaGxpZ2h0LmNyZWF0ZUNvbHVtbkhlYWRlcigpLFo9dGhpcy5oaWdobGlnaHQuY3JlYXRlQWN0aXZlUm93SGVhZGVyKCksbmU9dGhpcy5oaWdobGlnaHQuY3JlYXRlQWN0aXZlQ29sdW1uSGVhZGVyKCksY2U9dGhpcy5oaWdobGlnaHQu''@;'; put 'put ''Y3JlYXRlQWN0aXZlQ29ybmVySGVhZGVyKCksYmU9dGhpcy5oaWdobGlnaHQuY3JlYXRlUm93SGlnaGxpZ2h0KCksRWU9dGhpcy5oaWdobGlnaHQuY3JlYXRlQ29sdW1uSGlnaGxpZ2h0KCk7Zi5jb21taXQoKSx2LmNvbW1pdCgpLE0uY29tbWl0KCksRC5jb21taXQoKSxaLmNvbW1pdCgpLG5l''@;'; put 'put ''LmNvbW1pdCgpLGNlLmNvbW1pdCgpLGJlLmNvbW1pdCgpLEVlLmNvbW1pdCgpfXRoaXMuaGlnaGxpZ2h0LnVzZUxheWVyTGV2ZWwoYSl9fXhsKEIzZSxfMSk7Y29uc3QgUnR0PUIzZSx7cmVnaXN0ZXI6THR0LGdldEl0ZW06T3R0LGhhc0l0ZW06ajNlLGdldE5hbWVzOlB0dH09UWYoImNlbGxU''@;'; put 'put ''eXBlcyIpO2Z1bmN0aW9uIGhYKGMpe2lmKCFqM2UoYykpdGhyb3cgRXJyb3IoYFlvdSBkZWNsYXJlZCBjZWxsIHR5cGUgIiR7Y30iIGFzIGEgc3RyaW5nIHRoYXQgaXMgbm90IG1hcHBlZCB0byBhIGtub3duIG9iamVjdC5cbiAgICAgICAgICAgICAgICAgQ2VsbCB0eXBlIG11c3QgYmUgYW4g''@;'; put 'put ''b2JqZWN0IG9yIGEgc3RyaW5nIG1hcHBlZCB0byBhbiBvYmplY3QgcmVnaXN0ZXJlZCBieVxuICAgICAgICAgICAgICAgICAiSGFuZHNvbnRhYmxlLmNlbGxUeXBlcy5yZWdpc3RlckNlbGxUeXBlIiBtZXRob2RgKTtyZXR1cm4gT3R0KGMpfWZ1bmN0aW9uIFYyKGMsbCl7InN0cmluZyIhPXR5''@;'; put 'put ''cGVvZiBjJiYoYz0obD1jKS5DRUxMX1RZUEUpO2NvbnN0e2VkaXRvcjphLHJlbmRlcmVyOmQsdmFsaWRhdG9yOmh9PWw7YSYmRmQoYyxhKSxkJiZUaChjLGQpLGgmJno3KGMsaCksTHR0KGMsbCl9ZnVuY3Rpb24geFAoYyxsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFy''@;'; put 'put ''Z3VtZW50c1syXT9hcmd1bWVudHNbMl06Yztjb25zdCBkPSJzdHJpbmciPT10eXBlb2YgbC50eXBlP2hYKGwudHlwZSk6bC50eXBlO2lmKGMuX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wcyYmcWEobCwoZix2KT0+e2MuX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wcy5kZWxl''@;'; put 'put ''dGUodil9KSwhS2EoZCkpcmV0dXJuO2E9PT1jJiYhYy5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzJiYoYy5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVByb3BzPW5ldyBTZXQpO2NvbnN0IGg9e307cWEoZCwoZix2KT0+e3ZhciBNOyhmdW5jdGlvbiBGdHQoYyxsKXt2YXIgYTty''@;'; put 'put ''ZXR1cm4iQ0VMTF9UWVBFIiE9PWMmJigobnVsbD09PShhPWwuX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wcyl8fHZvaWQgMD09PWE/dm9pZCAwOmEuaGFzKGMpKXx8IUV1KGwsYykpfSkodixhKSYmKGhbdl09ZixudWxsPT09KE09Yy5fYXV0b21hdGljYWxseUFzc2lnbmVkTWV0YVBy''@;'; put 'put ''b3BzKXx8dm9pZCAwPT09TXx8TS5hZGQodikpfSkseHUoYyxoKX1mdW5jdGlvbiBFUChjKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihjKSYmYz49MH1mdW5jdGlvbiBUUChjLGwpe2lmKCFjKCkpdGhyb3cgbmV3IEVycm9yKGBBc3NlcnRpb24gZmFpbGVkOiAke2x9YCl9ZnVuY3Rpb24gQVAo''@;'; put 'put ''Yyl7cmV0dXJuIG51bGw9PWN9Y29uc3QgejNlPSgpPT4oe19hdXRvbWF0aWNhbGx5QXNzaWduZWRNZXRhUHJvcHM6dm9pZCAwLGFjdGl2ZUhlYWRlckNsYXNzTmFtZToiaHRfX2FjdGl2ZV9oaWdobGlnaHQiLGFsbG93RW1wdHk6ITAsYWxsb3dIdG1sOiExLGFsbG93SW5zZXJ0Q29sdW1uOiEw''@;'; put 'put ''LGFsbG93SW5zZXJ0Um93OiEwLGFsbG93SW52YWxpZDohMCxhbGxvd1JlbW92ZUNvbHVtbjohMCxhbGxvd1JlbW92ZVJvdzohMCxhcmlhVGFnczohMCxhdXRvQ29sdW1uU2l6ZTp2b2lkIDAsYXV0b1Jvd1NpemU6dm9pZCAwLGF1dG9XcmFwQ29sOiExLGF1dG9XcmFwUm93OiExLGJpbmRSb3dz''@;'; put 'put ''V2l0aEhlYWRlcnM6dm9pZCAwLGNlbGw6W10sY2VsbHM6dm9pZCAwLGNoZWNrZWRUZW1wbGF0ZTp2b2lkIDAsY2xhc3NOYW1lOnZvaWQgMCxjb2xIZWFkZXJzOm51bGwsY29sbGFwc2libGVDb2x1bW5zOnZvaWQgMCxjb2x1bW5IZWFkZXJIZWlnaHQ6dm9pZCAwLGNvbHVtbnM6dm9pZCAwLGNv''@;'; put 'put ''bHVtblNvcnRpbmc6dm9pZCAwLGNvbHVtblN1bW1hcnk6dm9pZCAwLGNvbFdpZHRoczp2b2lkIDAsY29tbWVudGVkQ2VsbENsYXNzTmFtZToiaHRDb21tZW50Q2VsbCIsY29tbWVudHM6ITEsY29udGV4dE1lbnU6dm9pZCAwLGNvcHlhYmxlOiEwLGNvcHlQYXN0ZTohMCxjb3JyZWN0Rm9ybWF0''@;'; put 'put ''OiExLGN1cnJlbnRDb2xDbGFzc05hbWU6dm9pZCAwLGN1cnJlbnRIZWFkZXJDbGFzc05hbWU6Imh0X19oaWdobGlnaHQiLGN1cnJlbnRSb3dDbGFzc05hbWU6dm9pZCAwLGN1c3RvbUJvcmRlcnM6ITEsZGF0YTp2b2lkIDAsZGF0YURvdE5vdGF0aW9uOiEwLGRhdGFTY2hlbWE6dm9pZCAwLGRh''@;'; put 'put ''dGVGb3JtYXQ6IkREL01NL1lZWVkiLHRpbWVGb3JtYXQ6Img6bW06c3MgYSIsZGF0ZVBpY2tlckNvbmZpZzp2b2lkIDAsZGVmYXVsdERhdGU6dm9pZCAwLGRpc2FibGVWaXN1YWxTZWxlY3Rpb246ITEsZHJhZ1RvU2Nyb2xsOiEwLGRyb3Bkb3duTWVudTp2b2lkIDAsZWRpdG9yOnZvaWQgMCxl''@;'; put 'put ''bnRlckJlZ2luc0VkaXRpbmc6ITAsZW50ZXJNb3Zlczp7Y29sOjAscm93OjF9LGZpbGxIYW5kbGU6e2F1dG9JbnNlcnRSb3c6ITF9LGZpbHRlcjohMCxmaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlOiExLGZpbHRlcnM6dm9pZCAwLGZpeGVkQ29sdW1uc0xlZnQ6MCxmaXhlZENvbHVtbnNTdGFydDow''@;'; put 'put ''LGZpeGVkUm93c0JvdHRvbTowLGZpeGVkUm93c1RvcDowLGZvcm11bGFzOnZvaWQgMCxmcmFnbWVudFNlbGVjdGlvbjohMSxoZWFkZXJDbGFzc05hbWU6dm9pZCAwLGhlaWdodDp2b2lkIDAsaGlkZGVuQ29sdW1uczp2b2lkIDAsaGlkZGVuUm93czp2b2lkIDAsaW52YWxpZENlbGxDbGFzc05h''@;'; put 'put ''bWU6Imh0SW52YWxpZCIsaW1lRmFzdEVkaXQ6ITEsaXNFbXB0eUNvbChjKXtsZXQgbCxhLGQ7Zm9yKGw9MCxhPXRoaXMuY291bnRSb3dzKCk7bDxhO2wrKylpZihkPXRoaXMuZ2V0RGF0YUF0Q2VsbChsLGMpLCExPT09VWMoZCkpcmV0dXJuITE7cmV0dXJuITB9LGlzRW1wdHlSb3coYyl7bGV0''@;'; put 'put ''IGwsYSxkLGg7Zm9yKGw9MCxhPXRoaXMuY291bnRDb2xzKCk7bDxhO2wrKylpZihkPXRoaXMuZ2V0RGF0YUF0Q2VsbChjLGwpLCExPT09VWMoZCkpcmV0dXJuIm9iamVjdCI9PXR5cGVvZiBkJiYoaD10aGlzLmdldENlbGxNZXRhKGMsbCksTE8odGhpcy5nZXRTY2hlbWEoKVtoLnByb3BdLGQp''@;'; put 'put ''KTtyZXR1cm4hMH0sbGFiZWw6dm9pZCAwLGxhbmd1YWdlOiJlbi1VUyIsbGF5b3V0RGlyZWN0aW9uOiJpbmhlcml0IixsaWNlbnNlS2V5OnZvaWQgMCxsb2NhbGU6ImVuLVVTIixtYW51YWxDb2x1bW5GcmVlemU6dm9pZCAwLG1hbnVhbENvbHVtbk1vdmU6dm9pZCAwLG1hbnVhbENvbHVtblJl''@;'; put 'put ''c2l6ZTp2b2lkIDAsbWFudWFsUm93TW92ZTp2b2lkIDAsbWFudWFsUm93UmVzaXplOnZvaWQgMCxtYXhDb2xzOjEvMCxtYXhSb3dzOjEvMCxtZXJnZUNlbGxzOiExLG1pbkNvbHM6MCxtaW5Sb3dzOjAsbWluU3BhcmVDb2xzOjAsbWluU3BhcmVSb3dzOjAsbXVsdGlDb2x1bW5Tb3J0aW5nOnZv''@;'; put 'put ''aWQgMCxuYXZpZ2FibGVIZWFkZXJzOiExLHRhYk5hdmlnYXRpb246ITAsbmVzdGVkSGVhZGVyczp2b2lkIDAsbmVzdGVkUm93czp2b2lkIDAsbm9Xb3JkV3JhcENsYXNzTmFtZToiaHROb1dyYXAiLG51bWVyaWNGb3JtYXQ6dm9pZCAwLG9ic2VydmVET01WaXNpYmlsaXR5OiEwLG91dHNpZGVD''@;'; put 'put ''bGlja0Rlc2VsZWN0czohMCxwZXJzaXN0ZW50U3RhdGU6dm9pZCAwLHBsYWNlaG9sZGVyOnZvaWQgMCxwbGFjZWhvbGRlckNlbGxDbGFzc05hbWU6Imh0UGxhY2Vob2xkZXIiLHByZXZlbnRPdmVyZmxvdzohMSxwcmV2ZW50V2hlZWw6ITEscmVhZE9ubHk6ITEscmVhZE9ubHlDZWxsQ2xhc3NO''@;'; put 'put ''YW1lOiJodERpbW1lZCIscmVuZGVyQWxsUm93czohMSxyZW5kZXJBbGxDb2x1bW5zOiExLHJlbmRlcmVyOnZvaWQgMCxyb3dIZWFkZXJzOnZvaWQgMCxyb3dIZWFkZXJXaWR0aDp2b2lkIDAscm93SGVpZ2h0czp2b2lkIDAsc2VhcmNoOiExLHNlbGVjdGlvbk1vZGU6Im11bHRpcGxlIixzZWxl''@;'; put 'put ''Y3RPcHRpb25zOnZvaWQgMCxza2lwQ29sdW1uT25QYXN0ZTohMSxza2lwUm93T25QYXN0ZTohMSxzb3J0QnlSZWxldmFuY2U6ITAsc291cmNlOnZvaWQgMCxzdGFydENvbHM6NSxzdGFydFJvd3M6NSxzdHJldGNoSDoibm9uZSIsc3RyaWN0OnZvaWQgMCx0YWJsZUNsYXNzTmFtZTp2b2lkIDAs''@;'; put 'put ''dGhlbWVOYW1lOnZvaWQgMCx0YWJNb3Zlczp7cm93OjAsY29sOjF9LHRpdGxlOnZvaWQgMCx0cmltRHJvcGRvd246ITAsdHJpbVJvd3M6dm9pZCAwLHRyaW1XaGl0ZXNwYWNlOiEwLHR5cGU6InRleHQiLHVuY2hlY2tlZFRlbXBsYXRlOnZvaWQgMCx1bmRvOiEwLHZhbGlkYXRvcjp2b2lkIDAs''@;'; put 'put ''dmlld3BvcnRDb2x1bW5SZW5kZXJpbmdPZmZzZXQ6ImF1dG8iLHZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0OiJhdXRvIix2aWV3cG9ydENvbHVtblJlbmRlcmluZ1RocmVzaG9sZDowLHZpZXdwb3J0Um93UmVuZGVyaW5nVGhyZXNob2xkOjAsdmlzaWJsZVJvd3M6MTAsd2lkdGg6dm9pZCAw''@;'; put 'put ''LHdvcmRXcmFwOiEwfSk7ZnVuY3Rpb24gVTNlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBOdHQoYyl7dmFyIGw9ZnVuY3Rpb24gVnR0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFy''@;'; put 'put ''IGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShj''@;'; put 'put ''LCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBqdHR7Y29uc3RydWN0b3IobCl7''@;'; put 'put ''VTNlKHRoaXMsIm1ldGFDdG9yIixjbGFzc3t9KSxVM2UodGhpcywibWV0YSIsdm9pZCAwKSx0aGlzLm1ldGE9dGhpcy5tZXRhQ3Rvci5wcm90b3R5cGUseHUodGhpcy5tZXRhLHozZSgpKSx0aGlzLm1ldGEuaW5zdGFuY2U9bH1nZXRNZXRhQ29uc3RydWN0b3IoKXtyZXR1cm4gdGhpcy5tZXRh''@;'; put 'put ''Q3Rvcn1nZXRNZXRhKCl7cmV0dXJuIHRoaXMubWV0YX11cGRhdGVNZXRhKGwpe3ZhciBhO3h1KHRoaXMubWV0YSxsKSx4UCh0aGlzLm1ldGEsey4uLmwsdHlwZTpudWxsIT09KGE9bC50eXBlKSYmdm9pZCAwIT09YT9hOnRoaXMubWV0YS50eXBlfSxsKX19Y2xhc3MgV3R0e2NvbnN0cnVjdG9y''@;'; put 'put ''KGwpeyFmdW5jdGlvbiB6dHQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFV0dChjKXt2YXIgbD1mdW5jdGlvbiBadHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwo''@;'; put 'put ''YyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIp''@;'; put 'put ''O3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJtZXRhIix2b2lkIDApO2NvbnN0IGE9bC5nZXRN''@;'; put 'put ''ZXRhQ29uc3RydWN0b3IoKTt0aGlzLm1ldGE9bmV3IGF9Z2V0TWV0YSgpe3JldHVybiB0aGlzLm1ldGF9dXBkYXRlTWV0YShsKXt4dSh0aGlzLm1ldGEsbCkseFAodGhpcy5tZXRhLGwsbCl9fWZ1bmN0aW9uIGtQKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBZdHQoYyl7dmFyIGw9ZnVuY3Rp''@;'; put 'put ''b24gR3R0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0''@;'; put 'put ''eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBEUHtjb25zdHJ1Y3RvcihsKXtrUCh0aGlzLCJ2YWx1ZUZhY3RvcnkiLHZvaWQgMCksa1AodGhpcywiZGF0YSIsW10pLGtQKHRoaXMsImluZGV4IixbXSksa1Ao''@;'; put 'put ''dGhpcywiaG9sZXMiLG5ldyBTZXQpLHRoaXMudmFsdWVGYWN0b3J5PWx9b2J0YWluKGwpe1RQKCgpPT5FUChsKSwiRXhwZWN0aW5nIGFuIHVuc2lnbmVkIG51bWJlci4iKTtjb25zdCBhPXRoaXMuX2dldFN0b3JhZ2VJbmRleEJ5S2V5KGwpO2xldCBkO2lmKGE+PTApZD10aGlzLmRhdGFbYV0s''@;'; put 'put ''dm9pZCAwPT09ZCYmKGQ9dGhpcy52YWx1ZUZhY3RvcnkobCksdGhpcy5kYXRhW2FdPWQpO2Vsc2UgaWYoZD10aGlzLnZhbHVlRmFjdG9yeShsKSx0aGlzLmhvbGVzLnNpemU+MCl7Y29uc3QgaD10aGlzLmhvbGVzLnZhbHVlcygpLm5leHQoKS52YWx1ZTt0aGlzLmhvbGVzLmRlbGV0ZShoKSx0''@;'; put 'put ''aGlzLmRhdGFbaF09ZCx0aGlzLmluZGV4W2xdPWh9ZWxzZSB0aGlzLmRhdGEucHVzaChkKSx0aGlzLmluZGV4W2xdPXRoaXMuZGF0YS5sZW5ndGgtMTtyZXR1cm4gZH1pbnNlcnQobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFd''@;'; put 'put ''OjE7VFAoKCk9PkVQKGwpfHxBUChsKSwiRXhwZWN0aW5nIGFuIHVuc2lnbmVkIG51bWJlciBvciBudWxsL3VuZGVmaW5lZCBhcmd1bWVudC4iKTtjb25zdCBkPVtdLGg9dGhpcy5kYXRhLmxlbmd0aDtmb3IobGV0IHY9MDt2PGE7disrKWQucHVzaChoK3YpLHRoaXMuZGF0YS5wdXNoKHZvaWQg''@;'; put 'put ''MCk7Y29uc3QgZj1BUChsKT90aGlzLmluZGV4Lmxlbmd0aDpsO3RoaXMuaW5kZXg9Wy4uLnRoaXMuaW5kZXguc2xpY2UoMCxmKSwuLi5kLC4uLnRoaXMuaW5kZXguc2xpY2UoZildfXJlbW92ZShsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1''@;'; put 'put ''bWVudHNbMV06MTtUUCgoKT0+RVAobCl8fEFQKGwpLCJFeHBlY3RpbmcgYW4gdW5zaWduZWQgbnVtYmVyIG9yIG51bGwvdW5kZWZpbmVkIGFyZ3VtZW50LiIpO2NvbnN0IGQ9dGhpcy5pbmRleC5zcGxpY2UoQVAobCk/dGhpcy5pbmRleC5sZW5ndGgtYTpsLGEpO2ZvcihsZXQgaD0wO2g8ZC5s''@;'; put 'put ''ZW5ndGg7aCsrKXtjb25zdCBmPWRbaF07Im51bWJlciI9PXR5cGVvZiBmJiZ0aGlzLmhvbGVzLmFkZChmKX19c2l6ZSgpe3JldHVybiB0aGlzLmRhdGEubGVuZ3RoLXRoaXMuaG9sZXMuc2l6ZX12YWx1ZXMoKXtyZXR1cm4gdGhpcy5kYXRhLmZpbHRlcigobCxhKT0+dm9pZCAwIT09bCYmIXRo''@;'; put 'put ''aXMuaG9sZXMuaGFzKGEpKVtTeW1ib2wuaXRlcmF0b3JdKCl9ZW50cmllcygpe2NvbnN0IGw9W107Zm9yKGxldCBkPTA7ZDx0aGlzLmRhdGEubGVuZ3RoO2QrKyl7Y29uc3QgaD10aGlzLl9nZXRLZXlCeVN0b3JhZ2VJbmRleChkKTstMSE9PWgmJnZvaWQgMCE9PXRoaXMuZGF0YVtkXSYmbC5w''@;'; put 'put ''dXNoKFtoLHRoaXMuZGF0YVtkXV0pfWxldCBhPTA7cmV0dXJue25leHQ6KCk9PntpZihhPGwubGVuZ3RoKXtjb25zdCBkPWxbYV07cmV0dXJuIGErPTEse3ZhbHVlOmQsZG9uZTohMX19cmV0dXJue2RvbmU6ITB9fX19Y2xlYXIoKXt0aGlzLmRhdGE9W10sdGhpcy5pbmRleD1bXSx0aGlzLmhv''@;'; put 'put ''bGVzLmNsZWFyKCl9X2dldFN0b3JhZ2VJbmRleEJ5S2V5KGwpe3JldHVybiB0aGlzLmluZGV4Lmxlbmd0aD5sP3RoaXMuaW5kZXhbbF06LTF9X2dldEtleUJ5U3RvcmFnZUluZGV4KGwpe3JldHVybiB0aGlzLmluZGV4LmluZGV4T2YobCl9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5lbnRyaWVzKCl9fWZ1bmN0aW9uIFozZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gJHR0KGMpe3ZhciBsPWZ1bmN0aW9uIEt0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBk''@;'; put 'put ''PWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywi''@;'; put 'put ''c3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgcXR0PVsiZGF0YSIsIndpZHRoIl07''@;'; put 'put ''Y2xhc3MgWHR0e2NvbnN0cnVjdG9yKGwpe1ozZSh0aGlzLCJnbG9iYWxNZXRhIix2b2lkIDApLFozZSh0aGlzLCJtZXRhcyIsbmV3IERQKCgpPT50aGlzLl9jcmVhdGVNZXRhKCkpKSx0aGlzLmdsb2JhbE1ldGE9bCx0aGlzLm1ldGFzPW5ldyBEUCgoKT0+dGhpcy5fY3JlYXRlTWV0YSgpKX11''@;'; put 'put ''cGRhdGVNZXRhKGwsYSl7Y29uc3QgZD10aGlzLmdldE1ldGEobCk7eHUoZCxhKSx4UChkLGEpfWNyZWF0ZUNvbHVtbihsLGEpe3RoaXMubWV0YXMuaW5zZXJ0KGwsYSl9cmVtb3ZlQ29sdW1uKGwsYSl7dGhpcy5tZXRhcy5yZW1vdmUobCxhKX1nZXRNZXRhKGwpe3JldHVybiB0aGlzLm1ldGFz''@;'; put 'put ''Lm9idGFpbihsKX1nZXRNZXRhQ29uc3RydWN0b3IobCl7cmV0dXJuIHRoaXMubWV0YXMub2J0YWluKGwpLmNvbnN0cnVjdG9yfWNsZWFyQ2FjaGUoKXt0aGlzLm1ldGFzLmNsZWFyKCl9X2NyZWF0ZU1ldGEoKXtyZXR1cm4gZnVuY3Rpb24gSHR0KGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+''@;'; put 'put ''MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXTtmdW5jdGlvbiBhKCl7fWsyZShhLGMpO2ZvcihsZXQgZD0wO2Q8bC5sZW5ndGg7ZCsrKWEucHJvdG90eXBlW2xbZF1dPXZvaWQgMDtyZXR1cm4gYX0odGhpcy5nbG9iYWxNZXRhLmdldE1ldGFDb25zdHJ1Y3RvcigpLHF0''@;'; put 'put ''dCkucHJvdG90eXBlfX1mdW5jdGlvbiBXM2UoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEp0dChjKXt2YXIgbD1mdW5jdGlvbiBRdHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIg''@;'; put 'put ''ZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMs''@;'; put 'put ''InN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGVudHtjb25zdHJ1Y3RvcihsKXtX''@;'; put 'put ''M2UodGhpcywiY29sdW1uTWV0YSIsdm9pZCAwKSxXM2UodGhpcywibWV0YXMiLG5ldyBEUCgoKT0+dGhpcy5fY3JlYXRlUm93KCkpKSx0aGlzLmNvbHVtbk1ldGE9bH11cGRhdGVNZXRhKGwsYSxkKXtjb25zdCBoPXRoaXMuZ2V0TWV0YShsLGEpO3h1KGgsZCkseFAoaCxkKX1jcmVhdGVSb3co''@;'; put 'put ''bCxhKXt0aGlzLm1ldGFzLmluc2VydChsLGEpfWNyZWF0ZUNvbHVtbihsLGEpe2ZvcihsZXQgZD0wO2Q8dGhpcy5tZXRhcy5zaXplKCk7ZCsrKXRoaXMubWV0YXMub2J0YWluKGQpLmluc2VydChsLGEpfXJlbW92ZVJvdyhsLGEpe3RoaXMubWV0YXMucmVtb3ZlKGwsYSl9cmVtb3ZlQ29sdW1u''@;'; put 'put ''KGwsYSl7Zm9yKGxldCBkPTA7ZDx0aGlzLm1ldGFzLnNpemUoKTtkKyspdGhpcy5tZXRhcy5vYnRhaW4oZCkucmVtb3ZlKGwsYSl9Z2V0TWV0YShsLGEsZCl7Y29uc3QgaD10aGlzLm1ldGFzLm9idGFpbihsKS5vYnRhaW4oYSk7cmV0dXJuIHZvaWQgMD09PWQ/aDpoW2RdfXNldE1ldGEobCxh''@;'; put 'put ''LGQsaCl7dmFyIGY7Y29uc3Qgdj10aGlzLm1ldGFzLm9idGFpbihsKS5vYnRhaW4oYSk7bnVsbD09PShmPXYuX2F1dG9tYXRpY2FsbHlBc3NpZ25lZE1ldGFQcm9wcyl8fHZvaWQgMD09PWZ8fGYuZGVsZXRlKGQpLHZbZF09aH1yZW1vdmVNZXRhKGwsYSxkKXtkZWxldGUgdGhpcy5tZXRhcy5v''@;'; put 'put ''YnRhaW4obCkub2J0YWluKGEpW2RdfWdldE1ldGFzKCl7Y29uc3QgbD1bXSxhPUFycmF5LmZyb20odGhpcy5tZXRhcy52YWx1ZXMoKSk7Zm9yKGxldCBkPTA7ZDxhLmxlbmd0aDtkKyspRm8oYVtkXSkmJmwucHVzaCguLi5hW2RdLnZhbHVlcygpKTtyZXR1cm4gbH1nZXRNZXRhc0F0Um93KGwp''@;'; put 'put ''e1RQKCgpPT5FUChsKSwiRXhwZWN0aW5nIGFuIHVuc2lnbmVkIG51bWJlci4iKTtjb25zdCBhPW5ldyBNYXAodGhpcy5tZXRhcyk7cmV0dXJuIGEuaGFzKGwpP0FycmF5LmZyb20oYS5nZXQobCkudmFsdWVzKCkpOltdfWNsZWFyQ2FjaGUoKXt0aGlzLm1ldGFzLmNsZWFyKCl9X2NyZWF0ZVJv''@;'; put 'put ''dygpe3JldHVybiBuZXcgRFAobD0+dGhpcy5fY3JlYXRlTWV0YShsKSl9X2NyZWF0ZU1ldGEobCl7cmV0dXJuIG5ldyh0aGlzLmNvbHVtbk1ldGEuZ2V0TWV0YUNvbnN0cnVjdG9yKGwpKX19Y2xhc3MgWTNle2NvbnN0cnVjdG9yKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAw''@;'; put 'put ''IT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpbXTt0aGlzLmhvdD1sLHRoaXMuZ2xvYmFsTWV0YT1uZXcganR0KGwpLHRoaXMudGFibGVNZXRhPW5ldyBXdHQodGhpcy5nbG9iYWxN''@;'; put 'put ''ZXRhKSx0aGlzLmNvbHVtbk1ldGE9bmV3IFh0dCh0aGlzLmdsb2JhbE1ldGEpLHRoaXMuY2VsbE1ldGE9bmV3IGVudCh0aGlzLmNvbHVtbk1ldGEpLGQuZm9yRWFjaChoPT5uZXcgaCh0aGlzKSksdGhpcy5nbG9iYWxNZXRhLnVwZGF0ZU1ldGEoYSl9Z2V0R2xvYmFsTWV0YSgpe3JldHVybiB0''@;'; put 'put ''aGlzLmdsb2JhbE1ldGEuZ2V0TWV0YSgpfXVwZGF0ZUdsb2JhbE1ldGEobCl7dGhpcy5nbG9iYWxNZXRhLnVwZGF0ZU1ldGEobCl9Z2V0VGFibGVNZXRhKCl7cmV0dXJuIHRoaXMudGFibGVNZXRhLmdldE1ldGEoKX11cGRhdGVUYWJsZU1ldGEobCl7dGhpcy50YWJsZU1ldGEudXBkYXRlTWV0''@;'; put 'put ''YShsKX1nZXRDb2x1bW5NZXRhKGwpe3JldHVybiB0aGlzLmNvbHVtbk1ldGEuZ2V0TWV0YShsKX11cGRhdGVDb2x1bW5NZXRhKGwsYSl7dGhpcy5jb2x1bW5NZXRhLnVwZGF0ZU1ldGEobCxhKX1nZXRDZWxsTWV0YShsLGEsZCl7bGV0e3Zpc3VhbFJvdzpoLHZpc3VhbENvbHVtbjpmfT1kO2Nv''@;'; put 'put ''bnN0IHY9dGhpcy5jZWxsTWV0YS5nZXRNZXRhKGwsYSk7cmV0dXJuIHYudmlzdWFsUm93PWgsdi52aXN1YWxDb2w9Zix2LnJvdz1sLHYuY29sPWEsdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckdldENlbGxNZXRhIix2KSx2fWdldENlbGxNZXRhS2V5VmFsdWUobCxhLGQpe2lmKCJzdHJpbmci''@;'; put 'put ''IT10eXBlb2YgZCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBwYXNzZWQgY2VsbCBtZXRhIG9iamVjdCBrZXkgaXMgbm90IGEgc3RyaW5nIik7cmV0dXJuIHRoaXMuY2VsbE1ldGEuZ2V0TWV0YShsLGEsZCl9c2V0Q2VsbE1ldGEobCxhLGQsaCl7dGhpcy5jZWxsTWV0YS5zZXRNZXRhKGwsYSxkLGgp''@;'; put 'put ''fXVwZGF0ZUNlbGxNZXRhKGwsYSxkKXt0aGlzLmNlbGxNZXRhLnVwZGF0ZU1ldGEobCxhLGQpfXJlbW92ZUNlbGxNZXRhKGwsYSxkKXt0aGlzLmNlbGxNZXRhLnJlbW92ZU1ldGEobCxhLGQpfWdldENlbGxzTWV0YSgpe3JldHVybiB0aGlzLmNlbGxNZXRhLmdldE1ldGFzKCl9Z2V0Q2VsbHNN''@;'; put 'put ''ZXRhQXRSb3cobCl7cmV0dXJuIHRoaXMuY2VsbE1ldGEuZ2V0TWV0YXNBdFJvdyhsKX1jcmVhdGVSb3cobCl7dGhpcy5jZWxsTWV0YS5jcmVhdGVSb3cobCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSl9cmVtb3ZlUm93KGwpe3RoaXMu''@;'; put 'put ''Y2VsbE1ldGEucmVtb3ZlUm93KGwsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEpfWNyZWF0ZUNvbHVtbihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MTt0aGlzLmNl''@;'; put 'put ''bGxNZXRhLmNyZWF0ZUNvbHVtbihsLGEpLHRoaXMuY29sdW1uTWV0YS5jcmVhdGVDb2x1bW4obCxhKX1yZW1vdmVDb2x1bW4obCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjE7dGhpcy5jZWxsTWV0YS5yZW1vdmVDb2x1bW4o''@;'; put 'put ''bCxhKSx0aGlzLmNvbHVtbk1ldGEucmVtb3ZlQ29sdW1uKGwsYSl9Y2xlYXJDZWxsc0NhY2hlKCl7dGhpcy5jZWxsTWV0YS5jbGVhckNhY2hlKCl9Y2xlYXJDYWNoZSgpe3RoaXMuY2VsbE1ldGEuY2xlYXJDYWNoZSgpLHRoaXMuY29sdW1uTWV0YS5jbGVhckNhY2hlKCl9fWZ1bmN0aW9uIEcz''@;'; put 'put ''ZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gdG50KGMpe3ZhciBsPWZ1bmN0aW9uIG5udChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7''@;'; put 'put ''aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9''@;'; put 'put ''PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9eGwoWTNlLF8xKTtjbGFzcyBybnR7Y29uc3RydWN0b3IobCl7RzNlKHRoaXMsIm1ldGFN''@;'; put 'put ''YW5hZ2VyIix2b2lkIDApLEczZSh0aGlzLCJtZXRhU3luY01lbW8iLG5ldyBNYXApLHRoaXMubWV0YU1hbmFnZXI9bCxsLmFkZExvY2FsSG9vaygiYWZ0ZXJHZXRDZWxsTWV0YSIsYT0+dGhpcy5leHRlbmRDZWxsTWV0YShhKSksQW8uZ2V0U2luZ2xldG9uKCkuYWRkKCJiZWZvcmVSZW5kZXIi''@;'; put 'put ''LGE9PnthJiZ0aGlzLm1ldGFTeW5jTWVtby5jbGVhcigpfSx0aGlzLm1ldGFNYW5hZ2VyLmhvdCl9ZXh0ZW5kQ2VsbE1ldGEobCl7dmFyIGE7Y29uc3R7cm93OmQsY29sOmh9PWw7aWYobnVsbCE9PShhPXRoaXMubWV0YVN5bmNNZW1vLmdldChkKSkmJnZvaWQgMCE9PWEmJmEuaGFzKGgpKXJl''@;'; put 'put ''dHVybjtjb25zdHt2aXN1YWxSb3c6Zix2aXN1YWxDb2w6dn09bCxNPXRoaXMubWV0YU1hbmFnZXIuaG90LEQ9TS5jb2xUb1Byb3Aodik7bC5wcm9wPUQsTS5ydW5Ib29rcygiYmVmb3JlR2V0Q2VsbE1ldGEiLGYsdixsKTtjb25zdCBaPUV1KGwsInR5cGUiKT9sLnR5cGU6bnVsbDtsZXQgbmU9''@;'; put 'put ''ZWMobC5jZWxscyk/bC5jZWxscyhkLGgsRCk6bnVsbDtpZihaKWlmKG5lKXt2YXIgY2U7bmUudHlwZT1udWxsIT09KGNlPW5lLnR5cGUpJiZ2b2lkIDAhPT1jZT9jZTpafWVsc2UgbmU9e3R5cGU6Wn07bmUmJnRoaXMubWV0YU1hbmFnZXIudXBkYXRlQ2VsbE1ldGEoZCxoLG5lKSxNLnJ1bkhv''@;'; put 'put ''b2tzKCJhZnRlckdldENlbGxNZXRhIixmLHYsbCksdGhpcy5tZXRhU3luY01lbW8uaGFzKGQpfHx0aGlzLm1ldGFTeW5jTWVtby5zZXQoZCxuZXcgU2V0KSx0aGlzLm1ldGFTeW5jTWVtby5nZXQoZCkuYWRkKGgpfX1mdW5jdGlvbiBmWChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gYW50KGMp''@;'; put 'put ''e3ZhciBsPWZ1bmN0aW9uIHNudChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Ro''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9dmFyICQzZT1uZXcgV2Vha01hcDtjbGFzcyB1bnR7Y29uc3RydWN0b3IobCl7ZlgodGhpcywibWV0YU1hbmFnZXIiLHZvaWQgMCksZlgodGhpcywi''@;'; put 'put ''dXNhZ2VUcmFja2VyIixuZXcgU2V0KSxmWCh0aGlzLCJwcm9wRGVzY3JpcHRvcnMiLG5ldyBNYXAoW1siYXJpYVRhZ3MiLHtpbml0T25seTohMH1dLFsiZml4ZWRDb2x1bW5zTGVmdCIse3RhcmdldDoiZml4ZWRDb2x1bW5zU3RhcnQiLG9uQ2hhbmdlKGEpe2lmKHRoaXMubWV0YU1hbmFnZXIu''@;'; put 'put ''aG90LmlzUnRsKCkmJiJmaXhlZENvbHVtbnNMZWZ0Ij09PWEpdGhyb3cgbmV3IEVycm9yKCJUaGUgYGZpeGVkQ29sdW1uc0xlZnRgIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIFJUTC4gUGxlYXNlIHVzZSBvcHRpb24gYGZpeGVkQ29sdW1uc1N0YXJ0YC4iKTtpZih0aGlzLnVzYWdlVHJhY2tlci5o''@;'; put 'put ''YXMoImZpeGVkQ29sdW1uc0xlZnQiKSYmdGhpcy51c2FnZVRyYWNrZXIuaGFzKCJmaXhlZENvbHVtbnNTdGFydCIpKXRocm93IG5ldyBFcnJvcigiVGhlIGBmaXhlZENvbHVtbnNMZWZ0YCBhbmQgYGZpeGVkQ29sdW1uc1N0YXJ0YCBzaG91bGQgbm90IGJlIHVzZWQgdG9nZXRoZXIuIFBsZWFz''@;'; put 'put ''ZSB1c2Ugb25seSB0aGUgb3B0aW9uIGBmaXhlZENvbHVtbnNTdGFydGAuIil9fV0sWyJsYXlvdXREaXJlY3Rpb24iLHtpbml0T25seTohMH1dLFsicmVuZGVyQWxsQ29sdW1ucyIse2luaXRPbmx5OiEwfV0sWyJyZW5kZXJBbGxSb3dzIix7aW5pdE9ubHk6ITB9XV0pKSxmdW5jdGlvbiBpbnQo''@;'; put 'put ''YyxsLGEpeyhmdW5jdGlvbiBvbnQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfSh0aGlzLCQzZSwoYSxkLGgpPT57aWYo''@;'; put 'put ''IWgpdGhyb3cgbmV3IEVycm9yKGBUaGUgXGAke2F9XGAgb3B0aW9uIGNhbiBub3QgYmUgdXBkYXRlZCBhZnRlciB0aGUgSGFuZHNvbnRhYmxlIGlzIGluaXRpYWxpemVkLmApfSksdGhpcy5tZXRhTWFuYWdlcj1sLHRoaXMuZXh0ZW5kTWV0YVByb3BzKCl9ZXh0ZW5kTWV0YVByb3BzKCl7dGhp''@;'; put 'put ''cy5wcm9wRGVzY3JpcHRvcnMuZm9yRWFjaCgobCxhKT0+e2NvbnN0e2luaXRPbmx5OmQsdGFyZ2V0Omgsb25DaGFuZ2U6Zn09bCx2PSJzdHJpbmciPT10eXBlb2YgaCxNPXY/aDphLEQ9YF8ke019YDt0aGlzLm1ldGFNYW5hZ2VyLmdsb2JhbE1ldGEubWV0YVtEXT10aGlzLm1ldGFNYW5hZ2Vy''@;'; put 'put ''Lmdsb2JhbE1ldGEubWV0YVtNXSxmPyh0aGlzLmluc3RhbGxQcm9wV2F0Y2hlcihhLEQsZiksdiYmdGhpcy5pbnN0YWxsUHJvcFdhdGNoZXIoaCxELGYpKTpkJiYodGhpcy5pbnN0YWxsUHJvcFdhdGNoZXIoYSxELGZ1bmN0aW9uIGxudChjLGwpe3JldHVybiBjLmdldChmdW5jdGlvbiBjbnQo''@;'; put 'put ''YyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfShjLGwpKX0oJDNlLHRoaXMpKSx0''@;'; put 'put ''aGlzLm1ldGFNYW5hZ2VyLmdsb2JhbE1ldGEubWV0YS5faW5pdE9ubHlTZXR0aW5nc3x8KHRoaXMubWV0YU1hbmFnZXIuZ2xvYmFsTWV0YS5tZXRhLl9pbml0T25seVNldHRpbmdzPVtdKSx0aGlzLm1ldGFNYW5hZ2VyLmdsb2JhbE1ldGEubWV0YS5faW5pdE9ubHlTZXR0aW5ncy5wdXNoKGEp''@;'; put 'put ''KX0pfWluc3RhbGxQcm9wV2F0Y2hlcihsLGEsZCl7Y29uc3QgaD10aGlzO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLm1ldGFNYW5hZ2VyLmdsb2JhbE1ldGEubWV0YSxsLHtnZXQoKXtyZXR1cm4gdGhpc1thXX0sc2V0KGYpe2NvbnN0IHY9IWgudXNhZ2VUcmFja2VyLmhhcyhsKTtoLnVz''@;'; put 'put ''YWdlVHJhY2tlci5hZGQobCksZC5jYWxsKGgsbCxmLHYpLHRoaXNbYV09Zn0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX19Y29uc3QgSzNlPS9eKFxyXG58XG5ccnxccnxcbikvLGRudD0vXlteXHRcclxuXSsvLHEzZT0vXlx0LztmdW5jdGlvbiBYRShjKXtsZXQgbCxhLGQsaCx2''@;'; put 'put ''LGY9IiI7Zm9yKGw9MCxhPWMubGVuZ3RoO2w8YTtsKz0xKXtmb3IoaD1jW2xdLmxlbmd0aCxkPTA7ZDxoO2QrPTEpZD4wJiYoZis9Ilx0Iiksdj1jW2xdW2RdLCJzdHJpbmciPT10eXBlb2Ygdj92LmluZGV4T2YoIlxuIik+LTE/Zis9YCIke3YucmVwbGFjZSgvIi9nLCciIicpfSJgOmYrPXY6''@;'; put 'put ''Zis9bnVsbD09dj8iIjp2O2whPT1hLTEmJihmKz0iXG4iKX1yZXR1cm4gZn1mdW5jdGlvbiBRNyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gZm50KGMpe3ZhciBsPWZ1bmN0aW9uIHBudChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9Q''@;'; put 'put ''cmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJp''@;'; put 'put ''bmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1h''@;'; put 'put ''LGN9Y2xhc3MgU197c3RhdGljIGdldCBERVNUSU5BVElPTl9SRU5ERVJFUigpe3JldHVybiAxfXN0YXRpYyBnZXQgREVTVElOQVRJT05fQ0xJUEJPQVJEX0dFTkVSQVRPUigpe3JldHVybiAyfWNvbnN0cnVjdG9yKGwsYSxkKXtRNyh0aGlzLCJob3QiLHZvaWQgMCksUTcodGhpcywibWV0YU1h''@;'; put 'put ''bmFnZXIiLHZvaWQgMCksUTcodGhpcywidGFibGVNZXRhIix2b2lkIDApLFE3KHRoaXMsImRhdGFTb3VyY2UiLHZvaWQgMCksUTcodGhpcywiZHVja1NjaGVtYSIsdm9pZCAwKSxRNyh0aGlzLCJjb2xUb1Byb3BDYWNoZSIsdm9pZCAwKSxRNyh0aGlzLCJwcm9wVG9Db2xDYWNoZSIsdm9pZCAw''@;'; put 'put ''KSx0aGlzLmhvdD1sLHRoaXMubWV0YU1hbmFnZXI9ZCx0aGlzLnRhYmxlTWV0YT1kLmdldFRhYmxlTWV0YSgpLHRoaXMuZGF0YVNvdXJjZT1hLHRoaXMucmVmcmVzaER1Y2tTY2hlbWEoKSx0aGlzLmNyZWF0ZU1hcCgpfWNyZWF0ZU1hcCgpe2NvbnN0IGw9dGhpcy5nZXRTY2hlbWEoKTtpZih0''@;'; put 'put ''eXBlb2YgbD4idSIpdGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gY3JlYXRlIGBjb2x1bW5zYCBkZWZpbml0aW9uIGJ1dCB5b3UgZGlkbid0IHByb3ZpZGUgYHNjaGVtYWAgbm9yIGBkYXRhYCIpO2NvbnN0IGE9dGhpcy50YWJsZU1ldGEuY29sdW1ucztsZXQgZDtpZih0aGlzLmNvbFRvUHJv''@;'; put 'put ''cENhY2hlPVtdLHRoaXMucHJvcFRvQ29sQ2FjaGU9bmV3IE1hcCxhKXtsZXQgaD0wLGY9MCx2PSExO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBhKXtjb25zdCBNPVBPKGwpO2g9TT4wP006dGhpcy5jb3VudEZpcnN0Um93S2V5cygpLHY9ITB9ZWxzZSBoPU1hdGgubWluKHRoaXMudGFibGVNZXRh''@;'; put 'put ''Lm1heENvbHMsYS5sZW5ndGgpO2ZvcihkPTA7ZDxoO2QrKyl7Y29uc3QgTT12P2EoZCk6YVtkXTtpZihLYShNKSl7aWYodHlwZW9mIE0uZGF0YTwidSIpe2NvbnN0IEQ9dj9mOmQ7dGhpcy5jb2xUb1Byb3BDYWNoZVtEXT1NLmRhdGEsdGhpcy5wcm9wVG9Db2xDYWNoZS5zZXQoTS5kYXRhLEQp''@;'; put 'put ''fWYrPTF9fX1lbHNlIHRoaXMucmVjdXJzaXZlRHVja0NvbHVtbnMobCl9Y291bnRGaXJzdFJvd0tleXMoKXtyZXR1cm4gTUsodGhpcy5kYXRhU291cmNlKX1yZWN1cnNpdmVEdWNrQ29sdW1ucyhsLGEsZCl7bGV0IHYsaD1hLGY9ZDtyZXR1cm4gdHlwZW9mIGg+InUiJiYoaD0wLGY9IiIpLCJv''@;'; put 'put ''YmplY3QiPT10eXBlb2YgbCYmIUFycmF5LmlzQXJyYXkobCkmJnFhKGwsKE0sRCk9PntudWxsPT09TT8odj1mK0QsdGhpcy5jb2xUb1Byb3BDYWNoZS5wdXNoKHYpLHRoaXMucHJvcFRvQ29sQ2FjaGUuc2V0KHYsaCksaCs9MSk6aD10aGlzLnJlY3Vyc2l2ZUR1Y2tDb2x1bW5zKE0saCxgJHtE''@;'; put 'put ''fS5gKX0pLGh9Y29sVG9Qcm9wKGwpe2lmKCExPT09TnVtYmVyLmlzSW50ZWdlcihsKSlyZXR1cm4gbDtjb25zdCBhPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCk7cmV0dXJuIG51bGw9PT1hP2w6dGhpcy5jb2xUb1Byb3BDYWNoZSYmRm8odGhpcy5jb2xUb1Byb3BDYWNoZVthXSk/dGhp''@;'; put 'put ''cy5jb2xUb1Byb3BDYWNoZVthXTphfXByb3BUb0NvbChsKXtjb25zdCBhPXRoaXMucHJvcFRvQ29sQ2FjaGUuZ2V0KGwpO2lmKEZvKGEpKXJldHVybiB0aGlzLmhvdC50b1Zpc3VhbENvbHVtbihhKTtjb25zdCBkPXRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGwpO3JldHVybiBudWxsPT09ZD9s''@;'; put 'put ''OmR9Z2V0U2NoZW1hKCl7Y29uc3QgbD10aGlzLnRhYmxlTWV0YS5kYXRhU2NoZW1hO3JldHVybiBsPyJmdW5jdGlvbiI9PXR5cGVvZiBsP2woKTpsOnRoaXMuZHVja1NjaGVtYX1jcmVhdGVEdWNrU2NoZW1hKCl7cmV0dXJuIHRoaXMuZGF0YVNvdXJjZSYmdGhpcy5kYXRhU291cmNlWzBdP3Jf''@;'; put 'put ''KHRoaXMuZGF0YVNvdXJjZVswXSk6e319cmVmcmVzaER1Y2tTY2hlbWEoKXt0aGlzLmR1Y2tTY2hlbWE9dGhpcy5jcmVhdGVEdWNrU2NoZW1hKCl9Y3JlYXRlUm93KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxLHtzb3Vy''@;'; put 'put ''Y2U6ZCxtb2RlOmg9ImFib3ZlIn09YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9O2NvbnN0IGY9dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCk7bGV0IHY9ZixNPTAsRD1sO2lmKCgibnVtYmVyIiE9dHlwZW9mIER8fEQ+PWYpJiYoRD1m''@;'; put 'put ''KSxEPHRoaXMuaG90LmNvdW50Um93cygpJiYodj10aGlzLmhvdC50b1BoeXNpY2FsUm93KEQpKSwhMT09PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVSb3ciLEQsYSxkKXx8bnVsbD09PXYpcmV0dXJue2RlbHRhOjB9O2NvbnN0IG5lPXRoaXMudGFibGVNZXRhLm1heFJvd3MsY2U9''@;'; put 'put ''dGhpcy5nZXRTY2hlbWEoKS5sZW5ndGgsYmU9W107Zm9yKDtNPGEmJmYrTTxuZTspe2xldCBCZT1udWxsOyJhcnJheSI9PT10aGlzLmhvdC5kYXRhVHlwZT90aGlzLnRhYmxlTWV0YS5kYXRhU2NoZW1hP0JlPW0xKHRoaXMuZ2V0U2NoZW1hKCkpOihCZT1bXSwkbyhjZS0xLCgpPT5CZS5wdXNo''@;'; put 'put ''KG51bGwpKSk6ImZ1bmN0aW9uIj09PXRoaXMuaG90LmRhdGFUeXBlP0JlPXRoaXMudGFibGVNZXRhLmRhdGFTY2hlbWEoRCtNKTooQmU9e30sd0UoQmUsdGhpcy5nZXRTY2hlbWEoKSkpLGJlLnB1c2goQmUpLE0rPTF9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuaW5zZXJ0SW5kZXhlcyhELE0p''@;'; put 'put ''LCJiZWxvdyI9PT1oJiYodj1NYXRoLm1pbih2KzEsZikpLHRoaXMuc3BsaWNlRGF0YSh2LDAsYmUpO2NvbnN0IEVlPXRoaXMuaG90LnRvVmlzdWFsUm93KHYpO3JldHVybiB0aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKT09PWJlLmxlbmd0aCYmdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIu''@;'; put 'put ''aW5pdFRvTGVuZ3RoKHRoaXMuaG90LmdldEluaXRpYWxDb2x1bW5Db3VudCgpKSxNPjAmJihudWxsPT1sP3RoaXMubWV0YU1hbmFnZXIuY3JlYXRlUm93KG51bGwsTSk6ImF1dG8iIT09ZCYmdGhpcy5tZXRhTWFuYWdlci5jcmVhdGVSb3codixhKSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVy''@;'; put 'put ''Q3JlYXRlUm93IixFZSxNLGQpLHRoaXMuaG90LmZvcmNlRnVsbFJlbmRlcj0hMCx7ZGVsdGE6TSxzdGFydFBoeXNpY2FsSW5kZXg6dn19Y3JlYXRlQ29sKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxLHtzb3VyY2U6ZCxt''@;'; put 'put ''b2RlOmg9InN0YXJ0In09YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOnt9O2lmKCF0aGlzLmhvdC5pc0NvbHVtbk1vZGlmaWNhdGlvbkFsbG93ZWQoKSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjcmVhdGUgbmV3IGNvbHVtbi4gV2hlbiBk''@;'; put 'put ''YXRhIHNvdXJjZSBpbiBhbiBvYmplY3QsIHlvdSBjYW4gb25seSBoYXZlIGFzIG11Y2ggY29sdW1ucyBhcyBkZWZpbmVkIGluIGZpcnN0IGRhdGEgcm93LCBkYXRhIHNjaGVtYSBvciBpbiB0aGUgJ2NvbHVtbnMnIHNldHRpbmcuSWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byBhZGQgbmV3IGNv''@;'; put 'put ''bHVtbnMsIHlvdSBoYXZlIHRvIHVzZSBhcnJheSBkYXRhc291cmNlLiIpO2NvbnN0IGY9dGhpcy5kYXRhU291cmNlLHY9dGhpcy50YWJsZU1ldGEubWF4Q29scyxNPXRoaXMuaG90LmNvdW50U291cmNlQ29scygpO2xldCBEPWw7aWYoKCJudW1iZXIiIT10eXBlb2YgRHx8RD49TSkmJihEPU0p''@;'; put 'put ''LCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNyZWF0ZUNvbCIsRCxhLGQpKXJldHVybntkZWx0YTowfTtsZXQgbmU9TTtEPHRoaXMuaG90LmNvdW50Q29scygpJiYobmU9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihEKSk7Y29uc3QgY2U9dGhpcy5ob3QuY291bnRTb3VyY2VSb3dz''@;'; put 'put ''KCk7bGV0IGJlPXRoaXMuaG90LmNvdW50Q29scygpLEVlPTAsQmU9bmU7ImVuZCI9PT1oJiYoQmU9TWF0aC5taW4oQmUrMSxNKSk7Y29uc3QgcWU9QmU7Zm9yKDtFZTxhJiZiZTx2Oyl7aWYoIm51bWJlciIhPXR5cGVvZiBEfHxEPj1iZSlpZihjZT4wKWZvcihsZXQgbHQ9MDtsdDxjZTtsdCs9''@;'; put 'put ''MSl0eXBlb2YgZltsdF0+InUiJiYoZltsdF09W10pLGZbbHRdLnB1c2gobnVsbCk7ZWxzZSBmLnB1c2goW251bGxdKTtlbHNlIGZvcihsZXQgbHQ9MDtsdDxjZTtsdCsrKWZbbHRdLnNwbGljZShCZSwwLG51bGwpO0VlKz0xLEJlKz0xLGJlKz0xfXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVy''@;'; put 'put ''Lmluc2VydEluZGV4ZXMoRCxFZSksRWU+MCYmKG51bGw9PWw/dGhpcy5tZXRhTWFuYWdlci5jcmVhdGVDb2x1bW4obnVsbCxFZSk6ImF1dG8iIT09ZCYmdGhpcy5tZXRhTWFuYWdlci5jcmVhdGVDb2x1bW4ocWUsYSkpO2NvbnN0IG50PXRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKHFlKTtyZXR1''@;'; put 'put ''cm4gdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ3JlYXRlQ29sIixudCxFZSxkKSx0aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXI9ITAsdGhpcy5yZWZyZXNoRHVja1NjaGVtYSgpLHtkZWx0YTpFZSxzdGFydFBoeXNpY2FsSW5kZXg6cWV9fXJlbW92ZVJvdyhsKXtsZXQgYT1hcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSxkPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwLGg9TnVtYmVyLmlzSW50ZWdlcihsKT9sOi1hO2NvbnN0IGY9dGhpcy52aXN1YWxSb3dzVG9QaHlzaWNhbChoLGEpLHY9dGhpcy5ob3QuY291''@;'; put 'put ''bnRTb3VyY2VSb3dzKCk7aWYoaD0oditoKSV2LCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlbW92ZVJvdyIsaCxmLmxlbmd0aCxmLGQpKXJldHVybiExO2NvbnN0IEQ9Zi5sZW5ndGg7aWYodGhpcy5maWx0ZXJEYXRhKGgsRCxmKSxoPHRoaXMuaG90LmNvdW50Um93cygpKXt0aGlz''@;'; put 'put ''LmhvdC5yb3dJbmRleE1hcHBlci5yZW1vdmVJbmRleGVzKGYpO2NvbnN0IG5lPUZvKHRoaXMudGFibGVNZXRhLmNvbHVtbnMpfHxGbyh0aGlzLnRhYmxlTWV0YS5kYXRhU2NoZW1hKXx8dGhpcy50YWJsZU1ldGEuY29sSGVhZGVyczswPT09dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0Tm90''@;'; put 'put ''VHJpbW1lZEluZGV4ZXNMZW5ndGgoKSYmIW5lJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UoW10pfXJldHVybiBmLnNsaWNlKDApLnNvcnQoKG5lLGNlKT0+Y2UtbmUpLmZvckVhY2gobmU9Pnt0aGlzLm1ldGFNYW5hZ2VyLnJlbW92ZVJvdyhuZSwxKX0p''@;'; put 'put ''LHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJlbW92ZVJvdyIsaCxELGYsZCksdGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyPSEwLCEwfXJlbW92ZUNvbChsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSxkPWFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2lmKCJvYmplY3QiPT09dGhpcy5ob3QuZGF0YVR5cGV8fHRoaXMudGFibGVNZXRhLmNvbHVtbnMpdGhyb3cgbmV3IEVycm9yKCJjYW5ub3QgcmVtb3ZlIGNvbHVtbiB3aXRoIG9iamVjdCBkYXRhIHNvdXJjZSBvciBjb2x1bW5zIG9wdGlvbiBz''@;'; put 'put ''cGVjaWZpZWQiKTtsZXQgaD0ibnVtYmVyIiE9dHlwZW9mIGw/LWE6bDtoPSh0aGlzLmhvdC5jb3VudENvbHMoKStoKSV0aGlzLmhvdC5jb3VudENvbHMoKTtjb25zdCBmPXRoaXMudmlzdWFsQ29sdW1uc1RvUGh5c2ljYWwoaCxhKSx2PWYuc2xpY2UoMCkuc29ydCgoY2UsYmUpPT5iZS1jZSk7''@;'; put 'put ''aWYoITE9PT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUmVtb3ZlQ29sIixoLGEsZixkKSlyZXR1cm4hMTtsZXQgRD0hMDtjb25zdCBaPXYubGVuZ3RoLG5lPXRoaXMuZGF0YVNvdXJjZTtmb3IobGV0IGNlPTA7Y2U8WjtjZSsrKUQmJmZbMF0hPT1mW2NlXS1jZSYmKEQ9ITEpO2lmKEQpZm9y''@;'; put 'put ''KGxldCBjZT0wLGJlPXRoaXMuaG90LmNvdW50U291cmNlUm93cygpO2NlPGJlO2NlKyspbmVbY2VdLnNwbGljZShmWzBdLGEpLDA9PT1jZSYmdGhpcy5tZXRhTWFuYWdlci5yZW1vdmVDb2x1bW4oZlswXSxhKTtlbHNlIGZvcihsZXQgY2U9MCxiZT10aGlzLmhvdC5jb3VudFNvdXJjZVJvd3Mo''@;'; put 'put ''KTtjZTxiZTtjZSsrKWZvcihsZXQgRWU9MDtFZTxaO0VlKyspbmVbY2VdLnNwbGljZSh2W0VlXSwxKSwwPT09Y2UmJnRoaXMubWV0YU1hbmFnZXIucmVtb3ZlQ29sdW1uKHZbRWVdLDEpO3JldHVybiBoPHRoaXMuaG90LmNvdW50Q29scygpJiYodGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIu''@;'; put 'put ''cmVtb3ZlSW5kZXhlcyhmKSwhdGhpcy50YWJsZU1ldGEucm93SGVhZGVycyYmMD09PXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCkmJnRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZShbXSkpLHRoaXMuaG90LnJ1''@;'; put 'put ''bkhvb2tzKCJhZnRlclJlbW92ZUNvbCIsaCxhLGYsZCksdGhpcy5ob3QuZm9yY2VGdWxsUmVuZGVyPSEwLHRoaXMucmVmcmVzaER1Y2tTY2hlbWEoKSwhMH1zcGxpY2VDb2wobCxhLGQpe2NvbnN0IGg9dGhpcy5ob3QuZ2V0RGF0YUF0Q29sKGwpLGY9aC5zbGljZShhLGErZCksdj1oLnNsaWNl''@;'; put 'put ''KGErZCk7Zm9yKHZhciBNPWFyZ3VtZW50cy5sZW5ndGgsRD1uZXcgQXJyYXkoTT4zP00tMzowKSxaPTM7WjxNO1orKylEW1otM109YXJndW1lbnRzW1pdO0tHKEQsdik7bGV0IG5lPTA7Zm9yKDtuZTxkOylELnB1c2gobnVsbCksbmUrPTE7cmV0dXJuIFhoZShEKSx0aGlzLmhvdC5wb3B1bGF0''@;'; put 'put ''ZUZyb21BcnJheShhLGwsRCxudWxsLG51bGwsInNwbGljZUNvbCIpLGZ9c3BsaWNlUm93KGwsYSxkKXtjb25zdCBoPXRoaXMuaG90LmdldFNvdXJjZURhdGFBdFJvdyhsKSxmPWguc2xpY2UoYSxhK2QpLHY9aC5zbGljZShhK2QpO2Zvcih2YXIgTT1hcmd1bWVudHMubGVuZ3RoLEQ9bmV3IEFy''@;'; put 'put ''cmF5KE0+Mz9NLTM6MCksWj0zO1o8TTtaKyspRFtaLTNdPWFyZ3VtZW50c1taXTtLRyhELHYpO2xldCBuZT0wO2Zvcig7bmU8ZDspRC5wdXNoKG51bGwpLG5lKz0xO3JldHVybiB0aGlzLmhvdC5wb3B1bGF0ZUZyb21BcnJheShsLGEsW0RdLG51bGwsbnVsbCwic3BsaWNlUm93IiksZn1zcGxp''@;'; put 'put ''Y2VEYXRhKGwsYSxkKXtpZighMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVEYXRhU3BsaWNlIixsLGEsZCkpe2NvbnN0IGY9Wy4uLnRoaXMuZGF0YVNvdXJjZS5zbGljZSgwLGwpLC4uLmQsLi4udGhpcy5kYXRhU291cmNlLnNsaWNlKGwpXTt0aGlzLmRhdGFTb3VyY2UubGVuZ3RoPTAs''@;'; put 'put ''Zi5mb3JFYWNoKHY9PnRoaXMuZGF0YVNvdXJjZS5wdXNoKHYpKX19ZmlsdGVyRGF0YShsLGEsZCl7bGV0IGg9dGhpcy5ob3QucnVuSG9va3MoImZpbHRlckRhdGEiLGwsYSxkKTshMT09PUFycmF5LmlzQXJyYXkoaCkmJihoPXRoaXMuZGF0YVNvdXJjZS5maWx0ZXIoKGYsdik9Pi0xPT09ZC5p''@;'; put 'put ''bmRleE9mKHYpKSksdGhpcy5kYXRhU291cmNlLmxlbmd0aD0wLEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHRoaXMuZGF0YVNvdXJjZSxoKX1nZXQobCxhKXtjb25zdCBkPXRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCk7bGV0IGg9dGhpcy5kYXRhU291cmNlW2RdO2NvbnN0IGY9dGhpcy5o''@;'; put 'put ''b3QucnVuSG9va3MoIm1vZGlmeVJvd0RhdGEiLGQpO2g9aXNOYU4oZik/ZjpoO2NvbnN0e2RhdGFEb3ROb3RhdGlvbjp2fT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO2xldCBNPW51bGw7aWYoaCYmaC5oYXNPd25Qcm9wZXJ0eSYmRXUoaCxhKSlNPWhbYV07ZWxzZSBpZih2JiYic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIGEmJmEuaW5kZXhPZigiLiIpPi0xKXtsZXQgRD1oO2lmKCFEKXJldHVybiBudWxsO2NvbnN0IFo9YS5zcGxpdCgiLiIpO2ZvcihsZXQgbmU9MCxjZT1aLmxlbmd0aDtuZTxjZTtuZSsrKWlmKEQ9RFtaW25lXV0sdHlwZW9mIEQ+InUiKXJldHVybiBudWxsO009RH1lbHNlImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIGEmJihNPWEodGhpcy5kYXRhU291cmNlLnNsaWNlKGQsZCsxKVswXSkpO2lmKHRoaXMuaG90Lmhhc0hvb2soIm1vZGlmeURhdGEiKSl7Y29uc3QgRD1QZChNKTt0aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5RGF0YSIsZCx0aGlzLnByb3BUb0NvbChhKSxELCJnZXQiKSxE''@;'; put 'put ''LmlzVG91Y2hlZCgpJiYoTT1ELnZhbHVlKX1yZXR1cm4gTX1nZXRDb3B5YWJsZShsLGEpe3JldHVybiB0aGlzLmhvdC5nZXRDZWxsTWV0YShsLHRoaXMucHJvcFRvQ29sKGEpKS5jb3B5YWJsZT90aGlzLmdldChsLGEpOiIifXNldChsLGEsZCl7Y29uc3QgaD10aGlzLmhvdC50b1BoeXNpY2Fs''@;'; put 'put ''Um93KGwpO2xldCBmPWQsdj10aGlzLmRhdGFTb3VyY2VbaF07Y29uc3QgTT10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5Um93RGF0YSIsaCk7aWYodj1pc05hTihNKT9NOnYsdGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5RGF0YSIpKXtjb25zdCBaPVBkKGYpO3RoaXMuaG90LnJ1bkhvb2tzKCJt''@;'; put 'put ''b2RpZnlEYXRhIixoLHRoaXMucHJvcFRvQ29sKGEpLFosInNldCIpLFouaXNUb3VjaGVkKCkmJihmPVoudmFsdWUpfWNvbnN0e2RhdGFEb3ROb3RhdGlvbjpEfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO2lmKHYmJnYuaGFzT3duUHJvcGVydHkmJkV1KHYsYSkpdlthXT1mO2Vsc2UgaWYoRCYm''@;'; put 'put ''InN0cmluZyI9PXR5cGVvZiBhJiZhLmluZGV4T2YoIi4iKT4tMSl7bGV0IGNlLFo9dixuZT0wO2NvbnN0IGJlPWEuc3BsaXQoIi4iKTtmb3IobmU9MCxjZT1iZS5sZW5ndGgtMTtuZTxjZTtuZSsrKXtpZigiX19wcm90b19fIj09PWJlW25lXXx8ImNvbnN0cnVjdG9yIj09PWJlW25lXXx8InBy''@;'; put 'put ''b3RvdHlwZSI9PT1iZVtuZV0pcmV0dXJuO3R5cGVvZiBaW2JlW25lXV0+InUiJiYoWltiZVtuZV1dPXt9KSxaPVpbYmVbbmVdXX1aW2JlW25lXV09Zn1lbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBhKWEodGhpcy5kYXRhU291cmNlLnNsaWNlKGgsaCsxKVswXSxmKTtlbHNle2lmKCJfX3By''@;'; put 'put ''b3RvX18iPT09YXx8ImNvbnN0cnVjdG9yIj09PWF8fCJwcm90b3R5cGUiPT09YSlyZXR1cm47dlthXT1mfX12aXN1YWxSb3dzVG9QaHlzaWNhbChsLGEpe2NvbnN0IGQ9dGhpcy5ob3QuY291bnRTb3VyY2VSb3dzKCksaD1bXTtsZXQgTSxmPShkK2wpJWQsdj1hO2Zvcig7ZjxkJiZ2OylNPXRo''@;'; put 'put ''aXMuaG90LnRvUGh5c2ljYWxSb3coZiksaC5wdXNoKE0pLHYtPTEsZis9MTtyZXR1cm4gaH12aXN1YWxDb2x1bW5zVG9QaHlzaWNhbChsLGEpe2NvbnN0IGQ9dGhpcy5ob3QuY291bnRDb2xzKCksaD1bXTtsZXQgZj0oZCtsKSVkLHY9YTtmb3IoO2Y8ZCYmdjspe2NvbnN0IE09dGhpcy5ob3Qu''@;'; put 'put ''dG9QaHlzaWNhbENvbHVtbihmKTtoLnB1c2goTSksdi09MSxmKz0xfXJldHVybiBofWNsZWFyKCl7Zm9yKGxldCBsPTA7bDx0aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKTtsKyspZm9yKGxldCBhPTA7YTx0aGlzLmhvdC5jb3VudENvbHMoKTthKyspdGhpcy5zZXQobCx0aGlzLmNvbFRvUHJv''@;'; put 'put ''cChhKSwiIil9Z2V0TGVuZ3RoKCl7Y29uc3QgbD10aGlzLnRhYmxlTWV0YS5tYXhSb3dzO2xldCBhO2E9bDwwfHwwPT09bD8wOmx8fDEvMDtjb25zdCBkPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCk7cmV0dXJuIE1hdGgubWluKGQsYSl9Z2V0''@;'; put 'put ''QWxsKCl7Y29uc3QgbD17cm93OjAsY29sOjB9LGE9e3JvdzpNYXRoLm1heCh0aGlzLmhvdC5jb3VudFJvd3MoKS0xLDApLGNvbDpNYXRoLm1heCh0aGlzLmhvdC5jb3VudENvbHMoKS0xLDApfTtyZXR1cm4gbC5yb3ctYS5yb3chPTB8fHRoaXMuaG90LmNvdW50U291cmNlUm93cygpP3RoaXMu''@;'; put 'put ''Z2V0UmFuZ2UobCxhLFNfLkRFU1RJTkFUSU9OX1JFTkRFUkVSKTpbXX1jb3VudENhY2hlZENvbHVtbnMoKXtyZXR1cm4gdGhpcy5jb2xUb1Byb3BDYWNoZS5sZW5ndGh9Z2V0UmFuZ2UobCxhLGQpe2NvbnN0IGg9W107bGV0IGYsdixNO2NvbnN0IEQ9dGhpcy50YWJsZU1ldGEubWF4Um93cyxa''@;'; put 'put ''PXRoaXMudGFibGVNZXRhLm1heENvbHM7aWYoMD09PUR8fDA9PT1aKXJldHVybltdO2NvbnN0IG5lPWQ9PT1TXy5ERVNUSU5BVElPTl9DTElQQk9BUkRfR0VORVJBVE9SP3RoaXMuZ2V0Q29weWFibGU6dGhpcy5nZXQsY2U9TWF0aC5taW4oTWF0aC5tYXgoRC0xLDApLE1hdGgubWF4KGwucm93''@;'; put 'put ''LGEucm93KSksYmU9TWF0aC5taW4oTWF0aC5tYXgoWi0xLDApLE1hdGgubWF4KGwuY29sLGEuY29sKSk7Zm9yKGY9TWF0aC5taW4obC5yb3csYS5yb3cpO2Y8PWNlO2YrKyl7TT1bXTtjb25zdCBFZT1mPj0wP3RoaXMuaG90LnRvUGh5c2ljYWxSb3coZik6Zjtmb3Iodj1NYXRoLm1pbihsLmNv''@;'; put 'put ''bCxhLmNvbCk7djw9YmUmJm51bGwhPT1FZTt2KyspTS5wdXNoKG5lLmNhbGwodGhpcyxmLHRoaXMuY29sVG9Qcm9wKHYpKSk7bnVsbCE9PUVlJiZoLnB1c2goTSl9cmV0dXJuIGh9Z2V0VGV4dChsLGEpe3JldHVybiBYRSh0aGlzLmdldFJhbmdlKGwsYSxTXy5ERVNUSU5BVElPTl9SRU5ERVJF''@;'; put 'put ''UikpfWdldENvcHlhYmxlVGV4dChsLGEpe3JldHVybiBYRSh0aGlzLmdldFJhbmdlKGwsYSxTXy5ERVNUSU5BVElPTl9DTElQQk9BUkRfR0VORVJBVE9SKSl9ZGVzdHJveSgpe3RoaXMuaG90PW51bGwsdGhpcy5tZXRhTWFuYWdlcj1udWxsLHRoaXMuZGF0YVNvdXJjZT1udWxsLHRoaXMuZHVj''@;'; put 'put ''a1NjaGVtYT1udWxsLHRoaXMuY29sVG9Qcm9wQ2FjaGUubGVuZ3RoPTAsdGhpcy5wcm9wVG9Db2xDYWNoZS5jbGVhcigpLHRoaXMucHJvcFRvQ29sQ2FjaGU9dm9pZCAwfX1jb25zdCBnbnQ9U187ZnVuY3Rpb24gWDNlKGMsbCxhLGQpe2NvbnN0e2hvdEluc3RhbmNlOmgsZGF0YU1hcDpmLGRh''@;'; put 'put ''dGFTb3VyY2U6dixpbnRlcm5hbFNvdXJjZTpNLHNvdXJjZTpELG1ldGFNYW5hZ2VyOlosZmlyc3RSdW46bmV9PWQsY2U9ZzEoTSksYmU9aC5nZXRTZXR0aW5ncygpO2guZGF0YVR5cGU9QXJyYXkuaXNBcnJheShiZS5kYXRhU2NoZW1hKT8iYXJyYXkiOmVjKGJlLmRhdGFTY2hlbWEpPyJmdW5j''@;'; put 'put ''dGlvbiI6Im9iamVjdCIsZiYmZi5kZXN0cm95KCksYz1oLnJ1bkhvb2tzKGBiZWZvcmUke2NlfWAsYyxuZSxEKTtjb25zdCBFZT1uZXcgZ250KGgsYyxaKTtpZihsKEVlKSwib2JqZWN0Ij09dHlwZW9mIGMmJm51bGwhPT1jKWMucHVzaCYmYy5zcGxpY2V8fChjPVtjXSk7ZWxzZXtpZihudWxs''@;'; put 'put ''IT09Yyl0aHJvdyBuZXcgRXJyb3IoYCR7TX0gb25seSBhY2NlcHRzIGFycmF5IG9mIG9iamVjdHMgb3IgYXJyYXkgb2YgYXJyYXlzICgke3R5cGVvZiBjfSBnaXZlbilgKTt7Y29uc3QgQmU9RWUuZ2V0U2NoZW1hKCk7Yz1bXTtsZXQgcWUsbnQ9MCxsdD0wO2ZvcihudD0wLGx0PWJlLnN0YXJ0''@;'; put 'put ''Um93cztudDxsdDtudCsrKWlmKCJvYmplY3QiIT09aC5kYXRhVHlwZSYmImZ1bmN0aW9uIiE9PWguZGF0YVR5cGV8fCFiZS5kYXRhU2NoZW1hKWlmKCJhcnJheSI9PT1oLmRhdGFUeXBlKXFlPW0xKEJlWzBdKSxjLnB1c2gocWUpO2Vsc2V7cWU9W107Zm9yKGxldCBtdD0wLEp0PWJlLnN0YXJ0''@;'; put 'put ''Q29sczttdDxKdDttdCsrKXFlLnB1c2gobnVsbCk7Yy5wdXNoKHFlKX1lbHNlIHFlPW0xKEJlKSxjLnB1c2gocWUpfX1BcnJheS5pc0FycmF5KGNbMF0pJiYoaC5kYXRhVHlwZT0iYXJyYXkiKSxiZS5kYXRhPWMsRWUuZGF0YVNvdXJjZT1jLHYuZGF0YT1jLHYuZGF0YVR5cGU9aC5kYXRhVHlw''@;'; put 'put ''ZSx2LmNvbFRvUHJvcD1FZS5jb2xUb1Byb3AuYmluZChFZSksdi5wcm9wVG9Db2w9RWUucHJvcFRvQ29sLmJpbmQoRWUpLHYuY291bnRDYWNoZWRDb2x1bW5zPUVlLmNvdW50Q2FjaGVkQ29sdW1ucy5iaW5kKEVlKSxhKEVlKSxoLnJ1bkhvb2tzKGBhZnRlciR7Y2V9YCxjLG5lLEQpLG5lfHwo''@;'; put 'put ''aC5ydW5Ib29rcygiYWZ0ZXJDaGFuZ2UiLG51bGwsTSksaC5yZW5kZXIoKSksaC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiZ2YShoLnJvb3RFbGVtZW50LFt1MmUoLTEpLEVPKGguY291bnRDb2xzKCkrKGgudmlldz9oLmNvdW50Um93SGVhZGVycygpOjApKV0pfWNvbnN0IEozZT0iZ3JpZERl''@;'; put 'put ''ZmF1bHQiLFVtPSJlZGl0b3JNYW5hZ2VyLmhhbmRsaW5nRWRpdG9yIjtmdW5jdGlvbiBRM2UoYyl7Y29uc3QgYT1jLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3JldHVybiBhLnR5cGU9InRleHQiLGEubmFtZT0iX19odEZvY3VzQ2F0Y2hlciIsYS5jbGFzc0xpc3QuYWRk''@;'; put 'put ''KCJodEZvY3VzQ2F0Y2hlciIpLGMuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmdmEoYSxbX3AoKSxrbSgpXSksYX1mdW5jdGlvbiBwWChjKXtjb25zdHtyb3dJbmRleE1hcHBlcjpsLGNvbHVtbkluZGV4TWFwcGVyOmF9PWMse25hdmlnYWJsZUhlYWRlcnM6ZH09Yy5nZXRTZXR0aW5ncygpO2xl''@;'; put 'put ''dCBoPWQmJmMuY291bnRDb2xIZWFkZXJzKCk+MD8tYy5jb3VudENvbEhlYWRlcnMoKTowLGY9ZCYmYy5jb3VudFJvd0hlYWRlcnMoKT4wPy1jLmNvdW50Um93SGVhZGVycygpOjA7cmV0dXJuIDA9PT1oJiYoaD1sLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoaCkpLDA9PT1mJiYoZj1h''@;'; put 'put ''LmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZikpLG51bGw9PT1ofHxudWxsPT09Zj9udWxsOmMuX2NyZWF0ZUNlbGxDb29yZHMoaCxmKX1mdW5jdGlvbiBnWChjKXt2YXIgbCxhO2NvbnN0e3Jvd0luZGV4TWFwcGVyOmQsY29sdW1uSW5kZXhNYXBwZXI6aH09Yyx7bmF2aWdhYmxlSGVh''@;'; put 'put ''ZGVyczpmfT1jLmdldFNldHRpbmdzKCk7bGV0IHY9ZC5nZXRSZW5kZXJhYmxlSW5kZXhlc0xlbmd0aCgpLTEsTT1oLmdldFJlbmRlcmFibGVJbmRleGVzTGVuZ3RoKCktMTtpZih2PDApe2lmKCFmfHwwPT09Yy5jb3VudENvbEhlYWRlcnMoKSlyZXR1cm4gbnVsbDt2PS0xfWlmKE08MCl7aWYo''@;'; put 'put ''IWZ8fDA9PT1jLmNvdW50Q29sSGVhZGVycygpKXJldHVybiBudWxsO009LTF9cmV0dXJuIGMuX2NyZWF0ZUNlbGxDb29yZHMobnVsbCE9PShsPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleCh2KSkmJnZvaWQgMCE9PWw/bDp2LG51bGwhPT0oYT1oLmdldFZpc3VhbEZyb21SZW5kZXJh''@;'; put 'put ''YmxlSW5kZXgoTSkpJiZ2b2lkIDAhPT1hP2E6TSl9Y29uc3QgZXBlPW5ldyBNYXAoW1siICIsInNwYWNlIl0sWyJzcGFjZWJhciIsInNwYWNlIl0sWyJzY3JvbGwiLCJzY3JvbGxsb2NrIl0sWyJkZWwiLCJkZWxldGUiXSxbImVzYyIsImVzY2FwZSJdLFsibWVkaWFuZXh0dHJhY2siLCJtZWRp''@;'; put 'put ''YXRyYWNrbmV4dCJdLFsibWVkaWFwcmV2aW91c3RyYWNrIiwibWVkaWF0cmFja3ByZXZpb3VzIl0sWyJ2b2x1bWV1cCIsImF1ZGlvdm9sdW1ldXAiXSxbInZvbHVtZWRvd24iLCJhdWRpb3ZvbHVtZWRvd24iXSxbInZvbHVtZW11dGUiLCJhdWRpb3ZvbHVtZW11dGUiXSxbIm11bHRpcGx5Iiwi''@;'; put 'put ''KiJdLFsiYWRkIiwiKyJdLFsiZGl2aWRlIiwiLyJdLFsic3VidHJhY3QiLCItIl0sWyJsZWZ0IiwiYXJyb3dsZWZ0Il0sWyJyaWdodCIsImFycm93cmlnaHQiXSxbInVwIiwiYXJyb3d1cCJdLFsiZG93biIsImFycm93ZG93biJdXSksSVA9Yz0+Yy5tYXAobD0+e2NvbnN0IGE9bC50b0xvd2Vy''@;'; put 'put ''Q2FzZSgpO3JldHVybiBlcGUuaGFzKGEpP2VwZS5nZXQoYSk6YX0pLnNvcnQoKS5qb2luKCIrIiksdHBlPW5ldyBNYXAoW1s5NiwibnVtcGFkMCJdLFs5NywibnVtcGFkMSJdLFs5OCwibnVtcGFkMiJdLFs5OSwibnVtcGFkMyJdLFsxMDAsIm51bXBhZDQiXSxbMTAxLCJudW1wYWQ1Il0sWzEw''@;'; put 'put ''MiwibnVtcGFkNiJdLFsxMDMsIm51bXBhZDciXSxbMTA0LCJudW1wYWQ4Il0sWzEwNSwibnVtcGFkOSJdLFsxMDYsIm11bHRpcGx5Il0sWzEwNywiYWRkIl0sWzEwOCwiZGVjaW1hbCJdLFsxMDksInN1YnRyYWN0Il0sWzExMCwiZGVjaW1hbCJdLFsxMTEsImRpdmlkZSJdLFsxMTIsImYxIl0s''@;'; put 'put ''WzExMywiZjIiXSxbMTE0LCJmMyJdLFsxMTUsImY0Il0sWzExNiwiZjUiXSxbMTE3LCJmNiJdLFsxMTgsImY3Il0sWzExOSwiZjgiXSxbMTIwLCJmOSJdLFsxMjEsImYxMCJdLFsxMjIsImYxMSJdLFsxMjMsImYxMiJdLFsxODYsInNlbWljb2xvbiJdLFsxODcsImVxdWFsIl0sWzE4OCwiY29t''@;'; put 'put ''bWEiXSxbMTg5LCJtaW51cyJdLFsxOTAsInBlcmlvZCJdLFsxOTEsInNsYXNoIl0sWzE5MiwiYmFja3F1b3RlIl0sWzIxOSwiYnJhY2tldGxlZnQiXSxbMjIwLCJiYWNrc2xhc2giXSxbMjIxLCJicmFja2V0cmlnaHQiXSxbMjIyLCJxdW90ZSJdXSksbVg9Yz0+e2xldHt3aGljaDpsLGtleTph''@;'; put 'put ''fT1jO2lmKHRwZS5oYXMobCkpcmV0dXJuIHRwZS5nZXQobCk7Y29uc3QgZD1TdHJpbmcuZnJvbUNoYXJDb2RlKGwpLnRvTG93ZXJDYXNlKCk7cmV0dXJuL15bYS16MC05XSQvLnRlc3QoZCk/ZDphLnRvTG93ZXJDYXNlKCl9LG5wZT1TeW1ib2woInNob3J0Y3V0LWNvbnRleHQiKTtmdW5jdGlv''@;'; put 'put ''biBycGUoYyl7cmV0dXJuIEthKGMpJiZjLl9fa2luZE9mPT09bnBlfWNvbnN0IERudD1bIm1ldGEiLCJhbHQiLCJzaGlmdCIsImNvbnRyb2wiXSxKRT1mdW5jdGlvbiBrbnQoKXtjb25zdCBjPW5ldyBTZXQ7cmV0dXJue3ByZXNzKGwpe2MuYWRkKGwpfSxyZWxlYXNlKGwpe2MuZGVsZXRlKGwp''@;'; put 'put ''fSxyZWxlYXNlQWxsKCl7Yy5jbGVhcigpfSxpc1ByZXNzZWQ6bD0+Yy5oYXMobCl9fSgpLFFFPVtdO2xldCBSUD0wO2NvbnN0IFJudD1jPT57bGV0e293bmVyV2luZG93OmwsaGFuZGxlRXZlbnQ6YSxiZWZvcmVLZXlEb3duOmQsYWZ0ZXJLZXlEb3duOmh9PWM7Y29uc3QgZj1ZTyh7ZXJyb3JJ''@;'; put 'put ''ZEV4aXN0czpCZT0+YFRoZSAiJHtCZX0iIGNvbnRleHQgbmFtZSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuYH0pO2xldCB2PSJncmlkIjtjb25zdCBEPSgpPT52LFo9QmU9PmYuZ2V0SXRlbShCZSk7bGV0IGNlPSExO2NvbnN0IGJlPWZ1bmN0aW9uKEJlLHFlKXtsZXQgbnQ9YXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOkQoKTtjb25zdCBsdD1ycGUobnQpP250OloobnQpO2xldCBtdD0hMTtpZighbHQuaGFzU2hvcnRjdXQocWUpKXJldHVybiBtdDtjb25zdCBKdD1sdC5nZXRTaG9ydGN1dHMocWUpO2ZvcihsZXQgeW49MDt5bjxKdC5s''@;'; put 'put ''ZW5ndGg7eW4rKyl7Y29uc3R7Y2FsbGJhY2s6Q24scnVuT25seUlmOnRuLHByZXZlbnREZWZhdWx0OnhuLHN0b3BQcm9wYWdhdGlvbjpRbixjYXB0dXJlQ3RybDp5aSxmb3J3YXJkVG9Db250ZXh0OnlyfT1KdFt5bl07aWYoITA9PT10bihCZSkpe2lmKGNlPXlpLG10PSExPT09Q24oQmUscWUp''@;'; put 'put ''LGNlPSExLHhuJiZCZS5wcmV2ZW50RGVmYXVsdCgpLFFuJiYoUjIoQmUpLEJlLnN0b3BQcm9wYWdhdGlvbigpKSxtdClicmVhazt5ciYmYmUoQmUscWUseXIpfX1yZXR1cm4gbXR9LEVlPWZ1bmN0aW9uIEludChjLGwsYSxkLGgpe2NvbnN0IGY9RWU9PkRudC5pbmNsdWRlcyhFZSksdj1mdW5j''@;'; put 'put ''dGlvbihFZSl7bGV0IEJlPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3QgcWU9W107cmV0dXJuIEVlLmFsdEtleSYmcWUucHVzaCgiYWx0IiksQmUmJihFZS5jdHJsS2V5fHxFZS5tZXRhS2V5KT9xZS5wdXNoKCJjb250cm9sL21l''@;'; put 'put ''dGEiKTooRWUuY3RybEtleSYmcWUucHVzaCgiY29udHJvbCIpLEVlLm1ldGFLZXkmJnFlLnB1c2goIm1ldGEiKSksRWUuc2hpZnRLZXkmJnFlLnB1c2goInNoaWZ0IikscWV9LE09RWU9PntpZighMT09PWwoRWUpfHwhMT09PWEoRWUpfHwyMjk9PT1FZS5rZXlDb2RlfHwic3RyaW5nIiE9dHlw''@;'; put 'put ''ZW9mIEVlLmtleXx8T20oRWUpKXJldHVybjtjb25zdCBxZT1tWChFZSk7bGV0IG50PVtdO2YocWUpfHwobnQ9dihFZSkpO2NvbnN0IGx0PVtxZV0uY29uY2F0KG50KTshaChFZSxsdCkmJihITygpJiZudC5pbmNsdWRlcygibWV0YSIpfHwhSE8oKSYmbnQuaW5jbHVkZXMoImNvbnRyb2wiKSkm''@;'; put 'put ''JmgoRWUsW3FlXS5jb25jYXQodihFZSwhMCkpKSxkKEVlKX0sRD1FZT0+e2lmKCJzdHJpbmciPT10eXBlb2YgRWUua2V5KXtjb25zdCBCZT1tWChFZSk7ZihCZSkmJkpFLnByZXNzKEJlKX19LFo9RWU9PntpZigic3RyaW5nIj09dHlwZW9mIEVlLmtleSl7Y29uc3QgQmU9bVgoRWUpO2YoQmUp''@;'; put 'put ''JiZKRS5yZWxlYXNlKEJlKX19LG5lPSgpPT57SkUucmVsZWFzZUFsbCgpfTtyZXR1cm57bW91bnQ6KCk9PntsZXQgRWU9Yztmb3IoUlArPTE7RWU7KTE9PT1SUCYmKEVlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIixEKSxRRS5wdXNoKHtldmVu''@;'; put 'put ''dDoia2V5ZG93biIsbGlzdGVuZXI6RH0pLEVlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJrZXl1cCIsWiksUUUucHVzaCh7ZXZlbnQ6ImtleXVwIixsaXN0ZW5lcjpafSkpLEVlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJr''@;'; put 'put ''ZXlkb3duIixNKSxFZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsbmUpLEVlPUY3KEVlKX0sdW5tb3VudDooKT0+e2xldCBFZT1jO2ZvcihSUC09MTtFZTspe2lmKDA9PT1SUCl7Zm9yKGxldCBCZT0wO0JlPFFFLmxlbmd0aDtCZSsrKXtjb25zdHtl''@;'; put 'put ''dmVudDpxZSxsaXN0ZW5lcjpudH09UUVbQmVdO0VlLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHFlLG50KX1RRS5sZW5ndGg9MH1FZS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsTSksRWUuZG9jdW1l''@;'; put 'put ''bnQuZG9jdW1lbnRFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImJsdXIiLG5lKSxFZT1GNyhFZSl9fSxpc1ByZXNzZWQ6RWU9PkpFLmlzUHJlc3NlZChFZSkscmVsZWFzZVByZXNzZWRLZXlzOigpPT5KRS5yZWxlYXNlQWxsKCl9fShsLGEsZCxoLGJlKTtyZXR1cm4gRWUubW91bnQoKSx7''@;'; put 'put ''YWRkQ29udGV4dDpCZT0+e2NvbnN0IHFlPShjPT57Y29uc3QgbD1ZTyh7ZXJyb3JJZEV4aXN0czpEPT5gVGhlICIke0R9IiBzaG9ydGN1dCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQgaW4gdGhlICIke2N9IiBjb250ZXh0LmB9KSxhPWZ1bmN0aW9uKCl7bGV0e2tleXM6RCxjYWxsYmFjazpaLGdy''@;'; put 'put ''b3VwOm5lLHJ1bk9ubHlJZjpjZT0oKCk9PiEwKSxjYXB0dXJlQ3RybDpiZT0hMSxwcmV2ZW50RGVmYXVsdDpFZT0hMCxzdG9wUHJvcGFnYXRpb246QmU9ITEscmVsYXRpdmVUb0dyb3VwOnFlLHBvc2l0aW9uOm50LGZvcndhcmRUb0NvbnRleHQ6bHR9PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9p''@;'; put 'put ''ZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fTtpZihtYyhuZSkpdGhyb3cgbmV3IEVycm9yKCJZb3UgbmVlZCB0byBkZWZpbmUgdGhlIHNob3J0Y3V0J3MgZ3JvdXAuIik7aWYoITE9PT1lYyhaKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBzaG9ydGN1dCdzIGNhbGxiYWNrIG5lZWRz''@;'; put 'put ''IHRvIGJlIGEgZnVuY3Rpb24uIik7aWYoITE9PT1BcnJheS5pc0FycmF5KEQpKXRocm93IG5ldyBFcnJvcihmbGBQYXNzIHRoZSBzaG9ydGN1dFwncyBrZXlzIGFzIGFuIGFycmF5IG9mIGFycmF5cyxceDIwCiAgICAgIHVzaW5nIHRoZSBLZXlib2FyZEV2ZW50LmtleSBwcm9wZXJ0aWVzOlx4''@;'; put 'put ''MjAKICAgICAgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQva2V5L0tleV9WYWx1ZXMuYCk7Y29uc3QgbXQ9e2NhbGxiYWNrOlosZ3JvdXA6bmUscnVuT25seUlmOmNlLGNhcHR1cmVDdHJsOmJlLHByZXZlbnREZWZhdWx0OkVl''@;'; put 'put ''LHN0b3BQcm9wYWdhdGlvbjpCZX07Rm8ocWUpJiYobXQucmVsYXRpdmVUb0dyb3VwPXFlLG10LnBvc2l0aW9uPW50KSxycGUobHQpJiYobXQuZm9yd2FyZFRvQ29udGV4dD1sdCksRC5mb3JFYWNoKEp0PT57Y29uc3QgeW49SVAoSnQpO2lmKGwuaGFzSXRlbSh5bikpe2NvbnN0IHRuPWwuZ2V0''@;'; put 'put ''SXRlbSh5bik7bGV0IHhuPXRuLmZpbmRJbmRleChRbj0+UW4uZ3JvdXA9PT1xZSk7LTEhPT14bj8iYmVmb3JlIj09PW50P3huLT0xOnhuKz0xOnhuPXRuLmxlbmd0aCx0bi5zcGxpY2UoeG4sMCxtdCl9ZWxzZSBsLmFkZEl0ZW0oeW4sW210XSl9KX0saD1EPT57Y29uc3QgWj1JUChEKTtsLnJl''@;'; put 'put ''bW92ZUl0ZW0oWil9O3JldHVybntfX2tpbmRPZjpucGUsYWRkU2hvcnRjdXQ6YSxhZGRTaG9ydGN1dHM6ZnVuY3Rpb24oRCl7bGV0IFo9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O0QuZm9yRWFjaChuZT0+e3FhKFosKGNlLGJlKT0+''@;'; put 'put ''eyExPT09T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG5lLGJlKSYmKG5lW2JlXT1aW2JlXSl9KSxhKG5lKX0pfSxnZXRTaG9ydGN1dHM6RD0+e2NvbnN0IFo9SVAoRCksbmU9bC5nZXRJdGVtKFopO3JldHVybiBGbyhuZSk/bmUuc2xpY2UoKTpbXX0saGFzU2hvcnRjdXQ6''@;'; put 'put ''RD0+e2NvbnN0IFo9SVAoRCk7cmV0dXJuIGwuaGFzSXRlbShaKX0scmVtb3ZlU2hvcnRjdXRzQnlLZXlzOmgscmVtb3ZlU2hvcnRjdXRzQnlHcm91cDpEPT57bC5nZXRJdGVtcygpLmZvckVhY2gobmU9PntsZXRbY2UsYmVdPW5lO2NvbnN0IEVlPWJlLmZpbHRlcihCZT0+QmUuZ3JvdXAhPT1E''@;'; put 'put ''KTswPT09RWUubGVuZ3RoP2goKGM9PmMuc3BsaXQoIisiKSkoY2UpKTooYmUubGVuZ3RoPTAsYmUucHVzaCguLi5FZSkpfSl9fX0pKEJlKTtyZXR1cm4gZi5hZGRJdGVtKEJlLHFlKSxxZX0sZ2V0QWN0aXZlQ29udGV4dE5hbWU6RCxnZXRDb250ZXh0Olosc2V0QWN0aXZlQ29udGV4dE5hbWU6''@;'; put 'put ''QmU9PntpZighZi5oYXNJdGVtKEJlKSl0aHJvdyBuZXcgRXJyb3IoZmxgWW91J3ZlIHRyaWVkIHRvIGFjdGl2YXRlIHRoZSAiJHtCZX0iIHNob3J0Y3V0IGNvbnRleHRceDIwCiAgICAgICAgdGhhdCBkb2VzIG5vdCBleGlzdC4gQmVmb3JlIGFjdGl2YXRpb24sIHJlZ2lzdGVyIHRoZSBjb250''@;'; put 'put ''ZXh0IHVzaW5nIHRoZSAiYWRkQ29udGV4dCIgbWV0aG9kLmApO3Y9QmV9LGlzQ3RybFByZXNzZWQ6KCk9PiFjZSYmKEVlLmlzUHJlc3NlZCgiY29udHJvbCIpfHxFZS5pc1ByZXNzZWQoIm1ldGEiKSkscmVsZWFzZVByZXNzZWRLZXlzOigpPT5FZS5yZWxlYXNlUHJlc3NlZEtleXMoKSxkZXN0''@;'; put 'put ''cm95OigpPT5FZS51bm1vdW50KCl9fSxMbnQ9e25hbWU6ImVkaXRvckNsb3NlQW5kU2F2ZSIsY2FsbGJhY2soYyl7Yy5fZ2V0RWRpdG9yTWFuYWdlcigpLmNsb3NlRWRpdG9yQW5kU2F2ZUNoYW5nZXMoKX19LGlwZT17X2hvb2tzU3RvcmFnZTpPYmplY3QuY3JlYXRlKG51bGwpLGFkZEhvb2so''@;'; put 'put ''YyxsKXtyZXR1cm4gdGhpcy5faG9va3NTdG9yYWdlW2NdfHwodGhpcy5faG9va3NTdG9yYWdlW2NdPVtdKSx0aGlzLmhvdC5hZGRIb29rKGMsbCksdGhpcy5faG9va3NTdG9yYWdlW2NdLnB1c2gobCksdGhpc30scmVtb3ZlSG9va3NCeUtleShjKXtZbih0aGlzLl9ob29rc1N0b3JhZ2VbY118''@;'; put 'put ''fFtdLGw9Pnt0aGlzLmhvdC5yZW1vdmVIb29rKGMsbCl9KX0sY2xlYXJIb29rcygpe3FhKHRoaXMuX2hvb2tzU3RvcmFnZSwoYyxsKT0+dGhpcy5yZW1vdmVIb29rc0J5S2V5KGwpKSx0aGlzLl9ob29rc1N0b3JhZ2U9e319fTtDcChpcGUsIk1JWElOX05BTUUiLCJob29rc1JlZlJlZ2lzdGVy''@;'; put 'put ''ZXIiLHt3cml0YWJsZTohMSxlbnVtZXJhYmxlOiExfSk7Y29uc3QgUG50PWlwZTtmdW5jdGlvbiBzMyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gRm50KGMpe3ZhciBsPWZ1bmN0aW9uIEhudChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wu''@;'; put 'put ''dG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJz''@;'; put 'put ''dHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1ts''@;'; put 'put ''XT1hLGN9Y29uc3Qgc3U9T2JqZWN0LmZyZWV6ZSh7VklSR0lOOiJTVEFURV9WSVJHSU4iLEVESVRJTkc6IlNUQVRFX0VESVRJTkciLFdBSVRJTkc6IlNUQVRFX1dBSVRJTkciLEZJTklTSEVEOiJTVEFURV9GSU5JU0hFRCJ9KTtjbGFzcyBNX3tzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0''@;'; put 'put ''dXJuImJhc2UifWNvbnN0cnVjdG9yKGwpe3MzKHRoaXMsImhvdCIsdm9pZCAwKSxzMyh0aGlzLCJzdGF0ZSIsc3UuVklSR0lOKSxzMyh0aGlzLCJfb3BlbmVkIiwhMSksczModGhpcywiX2Z1bGxFZGl0TW9kZSIsITEpLHMzKHRoaXMsIl9jbG9zZUNhbGxiYWNrIixudWxsKSxzMyh0aGlzLCJU''@;'; put 'put ''RCIsbnVsbCksczModGhpcywicm93IixudWxsKSxzMyh0aGlzLCJjb2wiLG51bGwpLHMzKHRoaXMsInByb3AiLG51bGwpLHMzKHRoaXMsIm9yaWdpbmFsVmFsdWUiLG51bGwpLHMzKHRoaXMsImNlbGxQcm9wZXJ0aWVzIixudWxsKSx0aGlzLmhvdD1sLHRoaXMuaW5pdCgpfV9maXJlQ2FsbGJh''@;'; put 'put ''Y2tzKGwpe3RoaXMuX2Nsb3NlQ2FsbGJhY2smJih0aGlzLl9jbG9zZUNhbGxiYWNrKGwpLHRoaXMuX2Nsb3NlQ2FsbGJhY2s9bnVsbCl9aW5pdCgpe31nZXRWYWx1ZSgpe3Rocm93IEVycm9yKCJFZGl0b3IgZ2V0VmFsdWUoKSBtZXRob2QgdW5pbXBsZW1lbnRlZCIpfXNldFZhbHVlKCl7dGhy''@;'; put 'put ''b3cgRXJyb3IoIkVkaXRvciBzZXRWYWx1ZSgpIG1ldGhvZCB1bmltcGxlbWVudGVkIil9b3Blbigpe3Rocm93IEVycm9yKCJFZGl0b3Igb3BlbigpIG1ldGhvZCB1bmltcGxlbWVudGVkIil9Y2xvc2UoKXt0aHJvdyBFcnJvcigiRWRpdG9yIGNsb3NlKCkgbWV0aG9kIHVuaW1wbGVtZW50ZWQi''@;'; put 'put ''KX1wcmVwYXJlKGwsYSxkLGgsZix2KXt0aGlzLlREPWgsdGhpcy5yb3c9bCx0aGlzLmNvbD1hLHRoaXMucHJvcD1kLHRoaXMub3JpZ2luYWxWYWx1ZT1mLHRoaXMuY2VsbFByb3BlcnRpZXM9dix0aGlzLnN0YXRlPXRoaXMuaXNPcGVuZWQoKT90aGlzLnN0YXRlOnN1LlZJUkdJTn1leHRlbmQo''@;'; put 'put ''KXtyZXR1cm4gY2xhc3MgZXh0ZW5kcyB0aGlzLmNvbnN0cnVjdG9ye319c2F2ZVZhbHVlKGwsYSl7bGV0IGQsaCxmLHY7aWYoYSl7Y29uc3QgRD10aGlzLmhvdC5nZXRTZWxlY3RlZExhc3QoKTtkPU1hdGgubWF4KE1hdGgubWluKERbMF0sRFsyXSksMCksaD1NYXRoLm1heChNYXRoLm1pbihE''@;'; put 'put ''WzFdLERbM10pLDApLGY9TWF0aC5tYXgoRFswXSxEWzJdKSx2PU1hdGgubWF4KERbMV0sRFszXSl9ZWxzZVtkLGgsZix2XT1bdGhpcy5yb3csdGhpcy5jb2wsbnVsbCxudWxsXTtjb25zdCBNPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlHZXRDZWxsQ29vcmRzIixkLGgsITEsIm1ldGEiKTtB''@;'; put 'put ''cnJheS5pc0FycmF5KE0pJiYoW2QsaF09TSksdGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXkoZCxoLGwsZix2LCJlZGl0Iil9YmVnaW5FZGl0aW5nKGwsYSl7aWYodGhpcy5zdGF0ZSE9PXN1LlZJUkdJTilyZXR1cm47Y29uc3QgZD10aGlzLmhvdCxoPWQucm93SW5kZXhNYXBwZXIuZ2V0UmVu''@;'; put 'put ''ZGVyYWJsZUZyb21WaXN1YWxJbmRleCh0aGlzLnJvdyksZj1kLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGhpcy5jb2wpLHY9KCk9PntpZih0aGlzLnN0YXRlPXN1LkVESVRJTkcsdGhpcy5pc0luRnVsbEVkaXRNb2RlKCkpe2NvbnN0IEQ9InN0cmlu''@;'; put 'put ''ZyI9PXR5cGVvZiBsP2w6emModGhpcy5vcmlnaW5hbFZhbHVlKTt0aGlzLnNldFZhbHVlKEQpfXRoaXMub3BlbihhKSx0aGlzLl9vcGVuZWQ9ITAsdGhpcy5mb2N1cygpLGQudmlldy5yZW5kZXIoKSxkLnJ1bkhvb2tzKCJhZnRlckJlZ2luRWRpdGluZyIsdGhpcy5yb3csdGhpcy5jb2wpfTt0''@;'; put 'put ''aGlzLmhvdC5hZGRIb29rT25jZSgiYWZ0ZXJTY3JvbGwiLHYpLGQudmlldy5zY3JvbGxWaWV3cG9ydChkLl9jcmVhdGVDZWxsQ29vcmRzKGgsZikpfHwodGhpcy5ob3QucmVtb3ZlSG9vaygiYWZ0ZXJTY3JvbGwiLHYpLHYoKSl9ZmluaXNoRWRpdGluZyhsLGEsZCl7bGV0IGg7aWYoZCl7Y29u''@;'; put 'put ''c3QgZj10aGlzLl9jbG9zZUNhbGxiYWNrO3RoaXMuX2Nsb3NlQ2FsbGJhY2s9dj0+e2YmJmYodiksZCh2KSx0aGlzLmhvdC52aWV3LnJlbmRlcigpfX1pZighdGhpcy5pc1dhaXRpbmcoKSl7aWYodGhpcy5zdGF0ZT09PXN1LlZJUkdJTilyZXR1cm4gdm9pZCB0aGlzLmhvdC5fcmVnaXN0ZXJU''@;'; put 'put ''aW1lb3V0KCgpPT57dGhpcy5fZmlyZUNhbGxiYWNrcyghMCl9KTtpZih0aGlzLnN0YXRlPT09c3UuRURJVElORyl7aWYobClyZXR1cm4gdGhpcy5jYW5jZWxDaGFuZ2VzKCksdm9pZCB0aGlzLmhvdC52aWV3LnJlbmRlcigpO2NvbnN0IGY9dGhpcy5nZXRWYWx1ZSgpO2g9dGhpcy5jZWxsUHJv''@;'; put 'put ''cGVydGllcy50cmltV2hpdGVzcGFjZT9bWyJzdHJpbmciPT10eXBlb2YgZj9TdHJpbmcucHJvdG90eXBlLnRyaW0uY2FsbChmfHwiIik6Zl1dOltbZl1dLHRoaXMuc3RhdGU9c3UuV0FJVElORyx0aGlzLnNhdmVWYWx1ZShoLGEpLHRoaXMuaG90LmdldENlbGxWYWxpZGF0b3IodGhpcy5jZWxs''@;'; put 'put ''UHJvcGVydGllcyk/dGhpcy5ob3QuYWRkSG9va09uY2UoInBvc3RBZnRlclZhbGlkYXRlIix2PT57dGhpcy5zdGF0ZT1zdS5GSU5JU0hFRCx0aGlzLmRpc2NhcmRFZGl0b3Iodil9KToodGhpcy5zdGF0ZT1zdS5GSU5JU0hFRCx0aGlzLmRpc2NhcmRFZGl0b3IoITApKX19fWNhbmNlbENoYW5n''@;'; put 'put ''ZXMoKXt0aGlzLnN0YXRlPXN1LkZJTklTSEVELHRoaXMuZGlzY2FyZEVkaXRvcigpfWRpc2NhcmRFZGl0b3IobCl7dGhpcy5zdGF0ZT09PXN1LkZJTklTSEVEJiYoITE9PT1sJiYhMCE9PXRoaXMuY2VsbFByb3BlcnRpZXMuYWxsb3dJbnZhbGlkPyh0aGlzLmhvdC5zZWxlY3RDZWxsKHRoaXMu''@;'; put 'put ''cm93LHRoaXMuY29sKSx0aGlzLmZvY3VzKCksdGhpcy5zdGF0ZT1zdS5FRElUSU5HLHRoaXMuX2ZpcmVDYWxsYmFja3MoITEpKToodGhpcy5jbG9zZSgpLHRoaXMuX29wZW5lZD0hMSx0aGlzLl9mdWxsRWRpdE1vZGU9ITEsdGhpcy5zdGF0ZT1zdS5WSVJHSU4sdGhpcy5fZmlyZUNhbGxiYWNr''@;'; put 'put ''cyghMCksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuc2V0QWN0aXZlQ29udGV4dE5hbWUoImdyaWQiKSkpfWVuYWJsZUZ1bGxFZGl0TW9kZSgpe3RoaXMuX2Z1bGxFZGl0TW9kZT0hMH1pc0luRnVsbEVkaXRNb2RlKCl7cmV0dXJuIHRoaXMuX2Z1bGxFZGl0TW9kZX1pc09wZW5lZCgp''@;'; put 'put ''e3JldHVybiB0aGlzLl9vcGVuZWR9aXNXYWl0aW5nKCl7cmV0dXJuIHRoaXMuc3RhdGU9PT1zdS5XQUlUSU5HfWdldEVkaXRlZENlbGxSZWN0KCl7dmFyIGw7Y29uc3QgYT10aGlzLmdldEVkaXRlZENlbGwoKTtpZighYSlyZXR1cm47Y29uc3R7d3RPdmVybGF5czpkLHd0Vmlld3BvcnQ6aH09''@;'; put 'put ''dGhpcy5ob3Qudmlldy5fd3QsZj10aGlzLmhvdC5yb290V2luZG93LHY9ejAoYSksTT1hdShhKSxEPXowKHRoaXMuaG90LnJvb3RFbGVtZW50KSxaPWF1KHRoaXMuaG90LnJvb3RFbGVtZW50KSxuZT1kLnRvcE92ZXJsYXkuaG9sZGVyLGNlPWQuaW5saW5lU3RhcnRPdmVybGF5LmhvbGRlcixi''@;'; put 'put ''ZT1uZSE9PWY/bmUuc2Nyb2xsVG9wOjAsRWU9Y2UhPT1mP2NlLnNjcm9sbExlZnQ6MCxCZT1mLmlubmVyV2lkdGgtRC5sZWZ0LVose3d0VGFibGU6cWV9PW51bGwhPT0obD1kLmdldFBhcmVudE92ZXJsYXkoYSkpJiZ2b2lkIDAhPT1sP2w6dGhpcy5ob3Qudmlldy5fd3QsbnQ9cWUubmFtZSxs''@;'; put 'put ''dD1bIm1hc3RlciIsImlubGluZV9zdGFydCJdLmluY2x1ZGVzKG50KT9iZTowLG10PVsibWFzdGVyIiwidG9wIiwiYm90dG9tIl0uaW5jbHVkZXMobnQpP0VlOjA7bGV0IHluPXYudG9wLUQudG9wLSh2LnRvcD09PUQudG9wPzA6MSktbHQsQ249MDtDbj10aGlzLmhvdC5pc1J0bCgpP2YuaW5u''@;'; put 'put ''ZXJXaWR0aC12LmxlZnQtTS1CZS0xK210OnYubGVmdC1ELmxlZnQtMS1tdCxbInRvcCIsInRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVkZXMobnQpJiYoeW4rPWQudG9wT3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCkpLFsiaW5saW5lX3N0YXJ0IiwidG9wX2lubGluZV9zdGFydF9j''@;'; put 'put ''b3JuZXIiXS5pbmNsdWRlcyhudCkmJihDbis9TWF0aC5hYnMoZC5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0T3ZlcmxheU9mZnNldCgpKSk7Y29uc3QgdG49dGhpcy5ob3QuaGFzQ29sSGVhZGVycygpLHhuPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5k''@;'; put 'put ''ZXgodGhpcy5yb3cpLFFuPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGhpcy5jb2wpLHlyPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVJbmRleGVzTGVuZ3RoKCktdGhpcy5ob3Qudmlldy5fd3QuZ2V0U2V0dGlu''@;'; put 'put ''ZygiZml4ZWRSb3dzQm90dG9tIik7KHRuJiZ4bjw9MHx8eG49PT15cikmJih5bis9MSksUW48PTAmJihDbis9MSk7Y29uc3QgR249aC5yb3dzUmVuZGVyQ2FsY3VsYXRvci5zdGFydFBvc2l0aW9uLGlpPWguY29sdW1uc1JlbmRlckNhbGN1bGF0b3Iuc3RhcnRQb3NpdGlvbixfaT1NYXRoLmFi''@;'; put 'put ''cyhkLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRTY3JvbGxQb3NpdGlvbigpKSxQbj1kLnRvcE92ZXJsYXkuZ2V0U2Nyb2xsUG9zaXRpb24oKSxqcj1oMCh0aGlzLmhvdC5yb290RG9jdW1lbnQpO2xldCBYbj1hLm9mZnNldFRvcDtpZihbImlubGluZV9zdGFydCIsIm1hc3RlciJdLmluY2x1ZGVz''@;'; put 'put ''KG50KSYmKFhuKz1Hbi1QbiksWyJib3R0b20iLCJib3R0b21faW5saW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKG50KSl7Y29uc3R7d3RWaWV3cG9ydDpZcix3dFRhYmxlOk5pfT1kLmJvdHRvbU92ZXJsYXkuY2xvbmU7WG4rPVlyLmdldFdvcmtzcGFjZUhlaWdodCgpLU5pLmdldEhlaWdo''@;'; put 'put ''dCgpLWpyfWxldCBJcj1hLm9mZnNldExlZnQ7dGhpcy5ob3QuaXNSdGwoKT8oSXI9SXI+PTA/cWUuZ2V0V2lkdGgoKS1hLm9mZnNldExlZnQ6TWF0aC5hYnMoSXIpLElyKz1paS1faS1NKTpbInRvcCIsIm1hc3RlciIsImJvdHRvbSJdLmluY2x1ZGVzKG50KSYmKElyKz1paS1faSk7Y29uc3Qg''@;'; put 'put ''JHI9Zi5nZXRDb21wdXRlZFN0eWxlKHRoaXMuVEQpLHdpPXRoaXMuaG90LmlzUnRsKCk/ImJvcmRlclJpZ2h0V2lkdGgiOiJib3JkZXJMZWZ0V2lkdGgiLFFpPXBhcnNlSW50KCRyW3dpXSwxMCk+MD8wOjEsdnQ9cGFyc2VJbnQoJHIuYm9yZGVyVG9wV2lkdGgsMTApPjA/MDoxLE50PWF1KGEp''@;'; put 'put ''K1FpLFd0PU11KGEpK3Z0LGduPWYkKG5lKT9qcjowLCRuPXAkKGNlKT9qcjowLGhyPXRoaXMuaG90LnZpZXcubWF4aW11bVZpc2libGVFbGVtZW50V2lkdGgoSXIpLWduK1FpO3JldHVybnt0b3A6eW4sc3RhcnQ6Q24saGVpZ2h0Old0LG1heEhlaWdodDpNYXRoLm1heCh0aGlzLmhvdC52aWV3''@;'; put 'put ''Lm1heGltdW1WaXNpYmxlRWxlbWVudEhlaWdodChYbiktJG4rdnQsdGhpcy5ob3Qudmlldy5nZXREZWZhdWx0Um93SGVpZ2h0KCkpLHdpZHRoOk50LG1heFdpZHRoOmhyfX1nZXRFZGl0ZWRDZWxsc0xheWVyQ2xhc3MoKXtzd2l0Y2godGhpcy5jaGVja0VkaXRvclNlY3Rpb24oKSl7Y2FzZSJp''@;'; put 'put ''bmxpbmUtc3RhcnQiOnJldHVybiJodF9jbG9uZV9sZWZ0IGh0X2Nsb25lX2lubGluZV9zdGFydCI7Y2FzZSJib3R0b20iOnJldHVybiJodF9jbG9uZV9ib3R0b20iO2Nhc2UiYm90dG9tLWlubGluZS1zdGFydC1jb3JuZXIiOnJldHVybiJodF9jbG9uZV9ib3R0b21fbGVmdF9jb3JuZXIgaHRf''@;'; put 'put ''Y2xvbmVfYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXIiO2Nhc2UidG9wIjpyZXR1cm4iaHRfY2xvbmVfdG9wIjtjYXNlInRvcC1pbmxpbmUtc3RhcnQtY29ybmVyIjpyZXR1cm4iaHRfY2xvbmVfdG9wX2xlZnRfY29ybmVyIGh0X2Nsb25lX3RvcF9pbmxpbmVfc3RhcnRfY29ybmVyIjtkZWZh''@;'; put 'put ''dWx0OnJldHVybiJodF9jbG9uZV9tYXN0ZXIifX1nZXRFZGl0ZWRDZWxsKCl7cmV0dXJuIHRoaXMuaG90LmdldENlbGwodGhpcy5yb3csdGhpcy5jb2wsITApfWNoZWNrRWRpdG9yU2VjdGlvbigpe2NvbnN0IGw9dGhpcy5ob3QuY291bnRSb3dzKCk7bGV0IGE9IiI7cmV0dXJuIHRoaXMucm93''@;'; put 'put ''PHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzVG9wP2E9dGhpcy5jb2w8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydD8idG9wLWlubGluZS1zdGFydC1jb3JuZXIiOiJ0b3AiOnRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRSb3dzQm90dG9tJiZ0aGlz''@;'; put 'put ''LnJvdz49bC10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkUm93c0JvdHRvbT9hPXRoaXMuY29sPHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQ/ImJvdHRvbS1pbmxpbmUtc3RhcnQtY29ybmVyIjoiYm90dG9tIjp0aGlzLmNvbDx0aGlzLmhvdC5nZXRTZXR0aW5n''@;'; put 'put ''cygpLmZpeGVkQ29sdW1uc1N0YXJ0JiYoYT0iaW5saW5lLXN0YXJ0IiksYX19eGwoTV8sUG50KTtjb25zdCBWbnQ9e25hbWU6ImVkaXRvckNsb3NlQW5kU2F2ZUJ5QXJyb3dLZXlzIixjYWxsYmFjayhjLGwsYSl7Y29uc3QgZD1jLl9nZXRFZGl0b3JNYW5hZ2VyKCksaD1kLmdldEFjdGl2ZUVk''@;'; put 'put ''aXRvcigpO2guaXNJbkZ1bGxFZGl0TW9kZSgpJiZoLnN0YXRlPT09c3UuRURJVElOR3x8KGQuY2xvc2VFZGl0b3JBbmRTYXZlQ2hhbmdlcygpLGMuZ2V0U2VsZWN0ZWQoKSYmKGEuaW5jbHVkZXMoImFycm93ZG93biIpP2Muc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KDEsMCk6YS5pbmNsdWRl''@;'; put 'put ''cygiYXJyb3d1cCIpP2Muc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KC0xLDApOmEuaW5jbHVkZXMoImFycm93bGVmdCIpP2Muc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KDAsLTEqYy5nZXREaXJlY3Rpb25GYWN0b3IoKSk6YS5pbmNsdWRlcygiYXJyb3dyaWdodCIpJiZjLnNlbGVjdGlvbi50''@;'; put 'put ''cmFuc2Zvcm1TdGFydCgwLGMuZ2V0RGlyZWN0aW9uRmFjdG9yKCkpKSxsLnByZXZlbnREZWZhdWx0KCkpfX0sQm50PXtuYW1lOiJlZGl0b3JDbG9zZUFuZFNhdmVCeUVudGVyIixjYWxsYmFjayhjLGwpe2NvbnN0IGE9Yy5fZ2V0RWRpdG9yTWFuYWdlcigpO2EuY2xvc2VFZGl0b3JBbmRTYXZl''@;'; put 'put ''Q2hhbmdlcyhsLmN0cmxLZXl8fGwubWV0YUtleSksYS5tb3ZlU2VsZWN0aW9uQWZ0ZXJFbnRlcihsKX19LGpudD17bmFtZToiZWRpdG9yQ2xvc2VXaXRob3V0U2F2aW5nIixjYWxsYmFjayhjKXtjb25zdCBsPWMuX2dldEVkaXRvck1hbmFnZXIoKTtsLmNsb3NlRWRpdG9yQW5kUmVzdG9yZU9y''@;'; put 'put ''aWdpbmFsVmFsdWUoYy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCkpLGwuYWN0aXZlRWRpdG9yLmZvY3VzKCl9fSx6bnQ9e25hbWU6ImVkaXRvckZhc3RPcGVuIixjYWxsYmFjayhjLGwpe2NvbnN0e2hpZ2hsaWdodDphfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7YS5p''@;'; put 'put ''c0hlYWRlcigpfHxjLl9nZXRFZGl0b3JNYW5hZ2VyKCkub3BlbkVkaXRvcihudWxsLGwsITApfX0sVW50PXtuYW1lOiJlZGl0b3JPcGVuIixjYWxsYmFjayhjLGwsYSl7Y29uc3QgZD1jLl9nZXRFZGl0b3JNYW5hZ2VyKCksaD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkse2hpZ2hsaWdodDpm''@;'; put 'put ''fT1oO2lmKGMuc2VsZWN0aW9uLmlzTXVsdGlwbGUoKSYmIWguaXNIZWFkZXIoKSYmYy5jb3VudFJlbmRlcmVkQ29scygpPjAmJmMuY291bnRSZW5kZXJlZFJvd3MoKT4wKXtjb25zdCB2PWMuZ2V0U2V0dGluZ3MoKSxNPSJmdW5jdGlvbiI9PXR5cGVvZiB2LmVudGVyTW92ZXM/di5lbnRlck1v''@;'; put 'put ''dmVzKGwpOnYuZW50ZXJNb3ZlczthLmluY2x1ZGVzKCJzaGlmdCIpP2Muc2VsZWN0aW9uLnRyYW5zZm9ybUZvY3VzKC1NLnJvdywtTS5jb2wpOmMuc2VsZWN0aW9uLnRyYW5zZm9ybUZvY3VzKE0ucm93LE0uY29sKX1lbHNlIGYuaXNIZWFkZXIoKXx8KGMuZ2V0U2V0dGluZ3MoKS5lbnRlckJl''@;'; put 'put ''Z2luc0VkaXRpbmc/ZC5jZWxsUHJvcGVydGllcy5yZWFkT25seT9kLm1vdmVTZWxlY3Rpb25BZnRlckVudGVyKGwpOmQub3BlbkVkaXRvcihudWxsLGwsITApOmQubW92ZVNlbGVjdGlvbkFmdGVyRW50ZXIobCksUjIobCkpfX0sV250PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvbkRvd24i''@;'; put 'put ''LGNhbGxiYWNrKGMpe2NvbnN0e2hpZ2hsaWdodDpsfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7IWMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpJiYhYy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJihsLmlzQ2VsbCgpfHxsLmlzSGVhZGVyKCkmJmMuc2Vs''@;'; put 'put ''ZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpKSYmYy5zZWxlY3Rpb24udHJhbnNmb3JtRW5kKDEsMCl9fSxZbnQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uRG93bkJ5Vmlld3BvcnRIZWlnaHQiLGNhbGxiYWNrKGMpe2NvbnN0e3RvOmx9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3Qo''@;'; put 'put ''KSxhPU1hdGgubWluKGwucm93K2MuY291bnRWaXNpYmxlUm93cygpLGMuY291bnRSb3dzKCktMSksZD1jLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhLC0xKTtpZihudWxsIT09ZCl7Y29uc3QgaD1jLl9jcmVhdGVDZWxsQ29vcmRzKGQsbC5jb2wpLGY9bC5yb3ct''@;'; put 'put ''Yy5nZXRGaXJzdEZ1bGx5VmlzaWJsZVJvdygpLHY9TWF0aC5taW4oaC5yb3ctZixjLmNvdW50Um93cygpLTEpO2Muc2VsZWN0aW9uLnNldFJhbmdlRW5kKGgpLGMuc2Nyb2xsVmlld3BvcnRUbyh7cm93OnYsdmVydGljYWxTbmFwOiJ0b3AiLGhvcml6b250YWxTbmFwOiJzdGFydCJ9KX19fSxH''@;'; put 'put ''bnQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uTGVmdCIsY2FsbGJhY2soYyl7Y29uc3R7aGlnaGxpZ2h0Omx9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTshYy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkmJiFjLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSYm''@;'; put 'put ''KGwuaXNDZWxsKCl8fGwuaXNIZWFkZXIoKSYmYy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkpJiZjLnNlbGVjdGlvbi50cmFuc2Zvcm1FbmQoMCwtMSpjLmdldERpcmVjdGlvbkZhY3RvcigpKX19LCRudD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25SaWdodCIsY2Fs''@;'; put 'put ''bGJhY2soYyl7Y29uc3R7aGlnaGxpZ2h0Omx9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTshYy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkmJiFjLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSYmKGwuaXNDZWxsKCl8fGwuaXNIZWFkZXIoKSYmYy5zZWxlY3Rpb24u''@;'; put 'put ''aXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkpJiZjLnNlbGVjdGlvbi50cmFuc2Zvcm1FbmQoMCxjLmdldERpcmVjdGlvbkZhY3RvcigpKX19LEtudD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub0NvbHVtbnMiLGNhbGxiYWNrKGMpe2NvbnN0e2hpZ2hsaWdodDpsLGZyb206YSx0bzpk''@;'; put 'put ''fT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7Yy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCk/Yy5zZWxlY3Rpb24uc2VsZWN0QWxsKCEwLCEwKTpjLnNlbGVjdENvbHVtbnMoYS5jb2wsZC5jb2wsbCl9fSxxbnQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0Qm90''@;'; put 'put ''dG9tIixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxyb3dJbmRleE1hcHBlcjphfT1jLHtoaWdobGlnaHQ6ZCxmcm9tOmgsdG86Zn09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLHY9ZC5pc0hlYWRlcigpJiZjLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKTtpZihkLmlz''@;'; put 'put ''Q2VsbCgpfHx2KXtjb25zdCBNPWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGMuY291bnRSb3dzKCktMSwtMSksRD1oLmNsb25lKCk7RC5yb3c9ZC5yb3csbC5zZXRSYW5nZVN0YXJ0KEQsdm9pZCAwLCExLGQuY2xvbmUoKSksdiYmbC5zZWxlY3RlZEJ5Um93SGVhZGVyLmFkZChsLmdldExh''@;'; put 'put ''eWVyTGV2ZWwoKSksbC5zZXRSYW5nZUVuZChjLl9jcmVhdGVDZWxsQ29vcmRzKE0sZi5jb2wpKX19fSxYbnQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0SW5saW5lRW5kIixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxjb2x1bW5JbmRleE1hcHBlcjphfT1jLHtoaWdo''@;'; put 'put ''bGlnaHQ6ZCxmcm9tOmgsdG86Zn09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFjLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmIWMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiZkLmlzQ2VsbCgpKXtjb25zdCB2PWEuZ2V0TmVhcmVzdE5vdEhpZGRlbklu''@;'; put 'put ''ZGV4KGMuY291bnRDb2xzKCktMSwtMSksTT1oLmNsb25lKCk7TS5jb2w9ZC5jb2wsbC5zZXRSYW5nZVN0YXJ0KE0sdm9pZCAwLCExLGQuY2xvbmUoKSksbC5zZXRSYW5nZUVuZChjLl9jcmVhdGVDZWxsQ29vcmRzKGYucm93LHYpKX19fSxKbnQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9u''@;'; put 'put ''VG9Nb3N0SW5saW5lU3RhcnQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLGNvbHVtbkluZGV4TWFwcGVyOmF9PWMse2hpZ2hsaWdodDpkLGZyb206aCx0bzpmfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpJiYh''@;'; put 'put ''Yy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkmJmQuaXNDZWxsKCkpe2NvbnN0IHY9cGFyc2VJbnQoYy5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LDEwKSxNPWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KHYsMSksRD1oLmNsb25lKCk7RC5jb2w9ZC5jb2wsbC5zZXRS''@;'; put 'put ''YW5nZVN0YXJ0KEQsdm9pZCAwLCExLGQuY2xvbmUoKSksbC5zZXRSYW5nZUVuZChjLl9jcmVhdGVDZWxsQ29vcmRzKGYucm93LE0pKX19fSxRbnQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0TGVmdCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwsY29sdW1uSW5kZXhN''@;'; put 'put ''YXBwZXI6YX09Yyx7aGlnaGxpZ2h0OmQsZnJvbTpoLHRvOmZ9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSx2PWQuaXNIZWFkZXIoKSYmYy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCk7aWYoZC5pc0NlbGwoKXx8dil7Y29uc3QgTT1hLmdldE5lYXJlc3ROb3RIaWRkZW5J''@;'; put 'put ''bmRleCguLi5jLmlzUnRsKCk/W2MuY291bnRDb2xzKCktMSwtMV06WzAsMV0pLEQ9aC5jbG9uZSgpO0QuY29sPWQuY29sLGwuc2V0UmFuZ2VTdGFydChELHZvaWQgMCwhMSxkLmNsb25lKCkpLHYmJmwuc2VsZWN0ZWRCeUNvbHVtbkhlYWRlci5hZGQobC5nZXRMYXllckxldmVsKCkpLGwuc2V0''@;'; put 'put ''UmFuZ2VFbmQoYy5fY3JlYXRlQ2VsbENvb3JkcyhmLnJvdyxNKSl9fX0sZXJ0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdFJpZ2h0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxjb2x1bW5JbmRleE1hcHBlcjphfT1jLHtoaWdobGlnaHQ6ZCxmcm9tOmgsdG86Zn09''@;'; put 'put ''Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLHY9ZC5pc0hlYWRlcigpJiZjLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKTtpZihkLmlzQ2VsbCgpfHx2KXtjb25zdCBNPWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KC4uLmMuaXNSdGwoKT9bMCwxXTpbYy5jb3VudENvbHMo''@;'; put 'put ''KS0xLC0xXSksRD1oLmNsb25lKCk7RC5jb2w9ZC5jb2wsbC5zZXRSYW5nZVN0YXJ0KEQsdm9pZCAwLCExLGQuY2xvbmUoKSksdiYmbC5zZWxlY3RlZEJ5Q29sdW1uSGVhZGVyLmFkZChsLmdldExheWVyTGV2ZWwoKSksbC5zZXRSYW5nZUVuZChjLl9jcmVhdGVDZWxsQ29vcmRzKGYucm93LE0p''@;'; put 'put ''KX19fSx0cnQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0VG9wIixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxyb3dJbmRleE1hcHBlcjphfT1jLHtoaWdobGlnaHQ6ZCxmcm9tOmgsdG86Zn09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLHY9ZC5pc0hlYWRlcigpJiZj''@;'; put 'put ''LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKTtpZihkLmlzQ2VsbCgpfHx2KXtjb25zdCBNPWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KDAsMSksRD1oLmNsb25lKCk7RC5yb3c9ZC5yb3csbC5zZXRSYW5nZVN0YXJ0KEQsdm9pZCAwLCExLGQuY2xvbmUoKSksdiYmbC5zZWxl''@;'; put 'put ''Y3RlZEJ5Um93SGVhZGVyLmFkZChsLmdldExheWVyTGV2ZWwoKSksbC5zZXRSYW5nZUVuZChjLl9jcmVhdGVDZWxsQ29vcmRzKE0sZi5jb2wpKX19fSxucnQ9e25hbWU6ImV4dGVuZENlbGxzU2VsZWN0aW9uVG9Sb3dzIixjYWxsYmFjayhjKXtjb25zdHtoaWdobGlnaHQ6bCxmcm9tOmEsdG86''@;'; put 'put ''ZH09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2Muc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpP2Muc2VsZWN0aW9uLnNlbGVjdEFsbCghMCwhMCk6Yy5zZWxlY3RSb3dzKGEucm93LGQucm93LGwpfX0scnJ0PXtuYW1lOiJleHRlbmRDZWxsc1NlbGVjdGlvblVwIixjYWxs''@;'; put 'put ''YmFjayhjKXtjb25zdHtoaWdobGlnaHQ6bH09Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpOyFjLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSYmIWMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiYobC5pc0NlbGwoKXx8bC5pc0hlYWRlcigpJiZjLnNlbGVjdGlv''@;'; put 'put ''bi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSkmJmMuc2VsZWN0aW9uLnRyYW5zZm9ybUVuZCgtMSwwKX19LGlydD17bmFtZToiZXh0ZW5kQ2VsbHNTZWxlY3Rpb25VcEJ5Vmlld3BvcnRIZWlnaHQiLGNhbGxiYWNrKGMpe2NvbnN0e3RvOmx9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPU1h''@;'; put 'put ''dGgubWF4KGwucm93LWMuY291bnRWaXNpYmxlUm93cygpLDApLGQ9Yy5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYSwxKTtpZihudWxsIT09ZCl7Y29uc3QgaD1jLl9jcmVhdGVDZWxsQ29vcmRzKGQsbC5jb2wpLGY9bC5yb3ctYy5nZXRGaXJzdEZ1bGx5VmlzaWJs''@;'; put 'put ''ZVJvdygpLHY9TWF0aC5tYXgoaC5yb3ctZiwwKTtjLnNlbGVjdGlvbi5zZXRSYW5nZUVuZChoKSxjLnNjcm9sbFZpZXdwb3J0VG8oe3Jvdzp2LHZlcnRpY2FsU25hcDoidG9wIixob3Jpem9udGFsU25hcDoic3RhcnQifSl9fX0sYXJ0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvbkRvd24iLGNh''@;'; put 'put ''bGxiYWNrKGMpe2xldHtzZWxlY3Rpb246bH09YztsLnRyYW5zZm9ybVN0YXJ0KDEsMCl9fSxzcnQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uRG93bkJ5Vmlld3BvcnRIZWlnaHQiLGNhbGxiYWNrKGMpe2NvbnN0e25hdmlnYWJsZUhlYWRlcnM6bH09Yy5nZXRTZXR0aW5ncygpLGE9bD9jLmNv''@;'; put 'put ''dW50Q29sSGVhZGVycygpOjAse3JvdzpkfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0O2xldCBoPWMuY291bnRWaXNpYmxlUm93cygpK2E7aD0wPT09aD8xOmgsZD09PWMuY291bnRSb3dzKCktMT9oPTE6ZCtoPmMuY291bnRSb3dzKCkmJihoPWMuY291bnRSb3dzKCktZC0x''@;'; put 'put ''KSxjLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydChoLDApLGMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQucm93PDAmJmMuc2Nyb2xsVmlld3BvcnRUbyh7cm93OjB9KX19LGxydD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25JbmxpbmVFbmQiLGNhbGxiYWNrKGMsbCl7Y29uc3Qg''@;'; put 'put ''YT1jLmdldFNldHRpbmdzKCksZD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksaD0iZnVuY3Rpb24iPT10eXBlb2YgYS50YWJNb3Zlcz9hLnRhYk1vdmVzKGwpOmEudGFiTW92ZXM7Yy5zZWxlY3Rpb24uaXNNdWx0aXBsZSgpJiYhZC5pc0hlYWRlcigpJiZjLmNvdW50UmVuZGVyZWRDb2xzKCk+''@;'; put 'put ''MCYmYy5jb3VudFJlbmRlcmVkUm93cygpPjA/Yy5zZWxlY3Rpb24udHJhbnNmb3JtRm9jdXMoLWgucm93LC1oLmNvbCk6Yy5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoLWgucm93LC1oLmNvbCl9fSxjcnQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uSW5saW5lU3RhcnQiLGNhbGxiYWNrKGMs''@;'; put 'put ''bCl7Y29uc3QgYT1jLmdldFNldHRpbmdzKCksZD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksaD0iZnVuY3Rpb24iPT10eXBlb2YgYS50YWJNb3Zlcz9hLnRhYk1vdmVzKGwpOmEudGFiTW92ZXM7Yy5zZWxlY3Rpb24uaXNNdWx0aXBsZSgpJiYhZC5pc0hlYWRlcigpJiZjLmNvdW50UmVuZGVy''@;'; put 'put ''ZWRDb2xzKCk+MCYmYy5jb3VudFJlbmRlcmVkUm93cygpPjA/Yy5zZWxlY3Rpb24udHJhbnNmb3JtRm9jdXMoaC5yb3csaC5jb2wpOmMuc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KGgucm93LGguY29sKX19LHVydD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25MZWZ0IixjYWxsYmFjayhjKXtj''@;'; put 'put ''LnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgwLC0xKmMuZ2V0RGlyZWN0aW9uRmFjdG9yKCkpfX0sZHJ0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblJpZ2h0IixjYWxsYmFjayhjKXtjLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgwLGMuZ2V0RGlyZWN0aW9uRmFjdG9yKCkpfX0saHJ0PXtu''@;'; put 'put ''YW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdEJvdHRvbSIsY2FsbGJhY2soYyl7Y29uc3R7Y29sOmx9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQ7bGV0IGE9Yy5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYy5jb3VudFJvd3MoKS0xLC0xKTtu''@;'; put 'put ''dWxsPT09YSYmKGE9LTEpLGMuc2VsZWN0aW9uLnNldFJhbmdlU3RhcnQoYy5fY3JlYXRlQ2VsbENvb3JkcyhhLGwpKX19LGZydD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RCb3R0b21JbmxpbmVFbmQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLHJvd0luZGV4TWFwcGVy''@;'; put 'put ''OmEsY29sdW1uSW5kZXhNYXBwZXI6ZH09YyxoPXBhcnNlSW50KGMuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NCb3R0b20sMTApLGY9YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYy5jb3VudFJvd3MoKS1oLTEsLTEpLHY9ZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYy5jb3VudENvbHMo''@;'; put 'put ''KS0xLC0xKTtsLnNldFJhbmdlU3RhcnQoYy5fY3JlYXRlQ2VsbENvb3JkcyhmLHYpKX19LHBydD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RJbmxpbmVFbmQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLGNvbHVtbkluZGV4TWFwcGVyOmF9PWM7bC5zZXRSYW5nZVN0YXJ0''@;'; put 'put ''KGMuX2NyZWF0ZUNlbGxDb29yZHMoYy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodC5yb3csYS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoYy5jb3VudENvbHMoKS0xLC0xKSkpfX0sZ3J0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdElubGluZVN0YXJ0IixjYWxsYmFj''@;'; put 'put ''ayhjKXtjb25zdHtzZWxlY3Rpb246bCxjb2x1bW5JbmRleE1hcHBlcjphfT1jLGQ9cGFyc2VJbnQoYy5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LDEwKSxoPWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQucm93LGY9YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgo''@;'; put 'put ''ZCwxKTtsLnNldFJhbmdlU3RhcnQoYy5fY3JlYXRlQ2VsbENvb3JkcyhoLGYpKX19LG1ydD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RMZWZ0IixjYWxsYmFjayhjKXtjb25zdHtzZWxlY3Rpb246bCxjb2x1bW5JbmRleE1hcHBlcjphfT1jLGQ9Yy5nZXRTZWxlY3RlZFJhbmdlTGFz''@;'; put 'put ''dCgpLmhpZ2hsaWdodC5yb3c7bGV0IGg9YS5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoLi4uYy5pc1J0bCgpP1tjLmNvdW50Q29scygpLTEsLTFdOlswLDFdKTtudWxsPT09aCYmKGg9Yy5pc1J0bCgpPy0xOi1jLmNvdW50Um93SGVhZGVycygpKSxsLnNldFJhbmdlU3RhcnQoYy5fY3JlYXRl''@;'; put 'put ''Q2VsbENvb3JkcyhkLGgpKX19LHZydD17bmFtZToibW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RSaWdodCIsY2FsbGJhY2soYyl7Y29uc3R7c2VsZWN0aW9uOmwsY29sdW1uSW5kZXhNYXBwZXI6YX09Yyx7cm93OmR9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQ7bGV0IGg9YS5n''@;'; put 'put ''ZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoLi4uYy5pc1J0bCgpP1swLDFdOltjLmNvdW50Q29scygpLTEsLTFdKTtudWxsPT09aCYmKGg9Yy5pc1J0bCgpPy1jLmNvdW50Um93SGVhZGVycygpOi0xKSxsLnNldFJhbmdlU3RhcnQoYy5fY3JlYXRlQ2VsbENvb3JkcyhkLGgpKX19LGJydD17bmFt''@;'; put 'put ''ZToibW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RUb3AiLGNhbGxiYWNrKGMpe2NvbnN0e2NvbDpsfT1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuaGlnaGxpZ2h0O2xldCBhPWMucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KDAsMSk7bnVsbD09PWEmJihhPS1jLmNvdW50''@;'; put 'put ''Q29sSGVhZGVycygpKSxjLnNlbGVjdGlvbi5zZXRSYW5nZVN0YXJ0KGMuX2NyZWF0ZUNlbGxDb29yZHMoYSxsKSl9fSx5cnQ9e25hbWU6Im1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0VG9wSW5saW5lU3RhcnQiLGNhbGxiYWNrKGMpe2NvbnN0e3NlbGVjdGlvbjpsLHJvd0luZGV4TWFwcGVyOmEs''@;'; put 'put ''Y29sdW1uSW5kZXhNYXBwZXI6ZH09YyxoPXBhcnNlSW50KGMuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NUb3AsMTApLGY9cGFyc2VJbnQoYy5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LDEwKSx2PWEuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGgsMSksTT1kLmdldE5lYXJlc3RO''@;'; put 'put ''b3RIaWRkZW5JbmRleChmLDEpO2wuc2V0UmFuZ2VTdGFydChjLl9jcmVhdGVDZWxsQ29vcmRzKHYsTSkpfX0sX3J0PXtuYW1lOiJtb3ZlQ2VsbFNlbGVjdGlvblVwIixjYWxsYmFjayhjKXtsZXR7c2VsZWN0aW9uOmx9PWM7bC50cmFuc2Zvcm1TdGFydCgtMSwwKX19LHdydD17bmFtZToibW92''@;'; put 'put ''ZUNlbGxTZWxlY3Rpb25VcEJ5Vmlld3BvcnRIaWdodCIsY2FsbGJhY2soYyl7Y29uc3R7bmF2aWdhYmxlSGVhZGVyczpsfT1jLmdldFNldHRpbmdzKCksYT1sP2MuY291bnRDb2xIZWFkZXJzKCk6MCx7cm93OmR9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQ7bGV0IGg9Yy5j''@;'; put 'put ''b3VudFZpc2libGVSb3dzKCkrYTtoPTA9PT1oPy0xOi1oLGQ9PT0tYT9oPS0xOmQraDxhJiYoaD0tKGQrYSkpLGMuc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KGgsMCksYy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodC5yb3c8MCYmYy5zY3JvbGxWaWV3cG9ydFRvKHtyb3c6MH0p''@;'; put 'put ''fX0sU3J0PXtuYW1lOiJlbXB0eVNlbGVjdGVkQ2VsbHMiLGNhbGxiYWNrKGMpe2MuZW1wdHlTZWxlY3RlZENlbGxzKCksYy5fZ2V0RWRpdG9yTWFuYWdlcigpLnByZXBhcmVFZGl0b3IoKX19LE1ydD17bmFtZToic2Nyb2xsVG9Gb2N1c2VkQ2VsbCIsY2FsbGJhY2soYyl7Y29uc3R7aGlnaGxp''@;'; put 'put ''Z2h0Omx9PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPWMuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3coKS0xLGQ9Yy5nZXRGaXJzdEZ1bGx5VmlzaWJsZUNvbHVtbigpLTEsaD1jLmdldExhc3RGdWxseVZpc2libGVSb3coKSsxLGY9Yy5nZXRMYXN0RnVsbHlWaXNpYmxlQ29sdW1uKCkrMSx2''@;'; put 'put ''PWMuX2NyZWF0ZUNlbGxDb29yZHMoYSxkKSxNPWMuX2NyZWF0ZUNlbGxDb29yZHMoaCxmKTtpZighYy5fY3JlYXRlQ2VsbFJhbmdlKHYsdixNKS5pbmNsdWRlcyhsKSYmKGwucm93Pj0wfHxsLmNvbD49MCkpe2NvbnN0IFo9e307aWYobC5jb2w+PTApe2NvbnN0IG5lPU1hdGguZmxvb3IoYy5j''@;'; put 'put ''b3VudFZpc2libGVDb2xzKCkvMik7Wi5jb2w9TWF0aC5tYXgobC5jb2wtbmUsMCl9aWYobC5yb3c+PTApe2NvbnN0IG5lPU1hdGguZmxvb3IoYy5jb3VudFZpc2libGVSb3dzKCkvMik7Wi5yb3c9TWF0aC5tYXgobC5yb3ctbmUsMCl9Yy5zY3JvbGxWaWV3cG9ydFRvKHsuLi5aLHZlcnRpY2Fs''@;'; put 'put ''U25hcDoidG9wIixob3Jpem9udGFsU25hcDoic3RhcnQifSl9fX0seHJ0PXtuYW1lOiJzZWxlY3RBbGxDZWxscyIsY2FsbGJhY2soYyl7Yy5zZWxlY3Rpb24uc2VsZWN0QWxsKCEwLCEwLHtkaXNhYmxlSGVhZGVyc0hpZ2hsaWdodDohMH0pfX0sRXJ0PXtuYW1lOiJzZWxlY3RBbGxDZWxsc0Fu''@;'; put 'put ''ZEhlYWRlcnMiLGNhbGxiYWNrKGMpe2Muc2VsZWN0aW9uLnNlbGVjdEFsbCghMCwhMCx7ZGlzYWJsZUhlYWRlcnNIaWdobGlnaHQ6ITF9KX19LFRydD17bmFtZToicG9wdWxhdGVTZWxlY3RlZENlbGxzRGF0YSIsY2FsbGJhY2soYyl7Y29uc3QgbD1jLmdldFNlbGVjdGVkUmFuZ2UoKSx7cm93''@;'; put 'put ''OmEsY29sOmR9PWxbbC5sZW5ndGgtMV0uaGlnaGxpZ2h0Lm5vcm1hbGl6ZSgpLGg9Yy5nZXREYXRhQXRDZWxsKGEsZCksZj1uZXcgTWFwO2ZvcihsZXQgdj0wO3Y8bC5sZW5ndGg7disrKWxbdl0uZm9yQWxsKChNLEQpPT57aWYoTT49MCYmRD49MCYmKE0hPT1hfHxEIT09ZCkpe2NvbnN0e3Jl''@;'; put 'put ''YWRPbmx5Olp9PWMuZ2V0Q2VsbE1ldGEoTSxEKTtafHxmLnNldChgJHtNfXgke0R9YCxbTSxELGhdKX19KTtjLnNldERhdGFBdENlbGwoQXJyYXkuZnJvbShmLnZhbHVlcygpKSl9fSxBcnQ9Wy4uLmZ1bmN0aW9uIFpudCgpe3JldHVybltMbnQsVm50LEJudCxqbnQsem50LFVudF19KCksLi4u''@;'; put 'put ''ZnVuY3Rpb24gb3J0KCl7cmV0dXJuW1dudCxZbnQsR250LCRudCxLbnQscW50LFhudCxKbnQsUW50LGVydCx0cnQsbnJ0LHJydCxpcnRdfSgpLC4uLmZ1bmN0aW9uIENydCgpe3JldHVyblthcnQsc3J0LGxydCxjcnQsdXJ0LGRydCxocnQsZnJ0LHBydCxncnQsbXJ0LHZydCxicnQseXJ0LF9y''@;'; put 'put ''dCx3cnRdfSgpLFNydCxNcnQseHJ0LEVydCxUcnRdO2Z1bmN0aW9uIG9wZShjKXtjb25zdCBsPXt9O3JldHVybiBBcnQuZm9yRWFjaChhPT57bGV0e25hbWU6ZCxjYWxsYmFjazpofT1hO2xbZF09ZnVuY3Rpb24oKXtmb3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCx2PW5ldyBBcnJheShmKSxN''@;'; put 'put ''PTA7TTxmO00rKyl2W01dPWFyZ3VtZW50c1tNXTtyZXR1cm4gaChjLC4uLnYpfX0pLGx9ZnVuY3Rpb24ga3J0KGMpe2NvbnN0IGw9Yy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5hZGRDb250ZXh0KCJlZGl0b3IiKSxhPW9wZShjKSxkPXtncm91cDpVbX07bC5hZGRTaG9ydGN1dHMoW3trZXlzOltb''@;'; put 'put ''IkVudGVyIl0sWyJFbnRlciIsIlNoaWZ0Il1dLGNhbGxiYWNrOihoLGYpPT5hLmVkaXRvckNsb3NlQW5kU2F2ZUJ5RW50ZXIoaCxmKX0se2tleXM6W1siRW50ZXIiLCJDb250cm9sL01ldGEiXSxbIkVudGVyIiwiQ29udHJvbC9NZXRhIiwiU2hpZnQiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJh''@;'; put 'put ''Y2s6KGgsZik9PmEuZWRpdG9yQ2xvc2VBbmRTYXZlQnlFbnRlcihoLGYpfSx7a2V5czpbWyJUYWIiXSxbIlRhYiIsIlNoaWZ0Il0sWyJQYWdlRG93biJdLFsiUGFnZVVwIl1dLGZvcndhcmRUb0NvbnRleHQ6Yy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIiksY2FsbGJh''@;'; put 'put ''Y2s6KGgsZik9PmEuZWRpdG9yQ2xvc2VBbmRTYXZlKGgsZil9LHtrZXlzOltbIkFycm93RG93biJdLFsiQXJyb3dVcCJdLFsiQXJyb3dMZWZ0Il0sWyJBcnJvd1JpZ2h0Il1dLHByZXZlbnREZWZhdWx0OiExLGNhbGxiYWNrOihoLGYpPT5hLmVkaXRvckNsb3NlQW5kU2F2ZUJ5QXJyb3dLZXlz''@;'; put 'put ''KGgsZil9LHtrZXlzOltbIkVzY2FwZSJdLFsiRXNjYXBlIiwiQ29udHJvbC9NZXRhIl1dLGNhbGxiYWNrOigpPT5hLmVkaXRvckNsb3NlV2l0aG91dFNhdmluZygpfV0sZCl9ZnVuY3Rpb24gRHJ0KGMpe2NvbnN0IGw9Yy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5hZGRDb250ZXh0KCJncmlkIiks''@;'; put 'put ''YT1vcGUoYyksZD17cnVuT25seUlmOigpPT57Y29uc3R7bmF2aWdhYmxlSGVhZGVyczpofT1jLmdldFNldHRpbmdzKCk7cmV0dXJuIEZvKGMuZ2V0U2VsZWN0ZWQoKSkmJihofHwhaCYmYy5jb3VudFJlbmRlcmVkUm93cygpPjAmJmMuY291bnRSZW5kZXJlZENvbHMoKT4wKX0sZ3JvdXA6SjNl''@;'; put 'put ''fTtsLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siRjIiXV0sY2FsbGJhY2s6aD0+YS5lZGl0b3JGYXN0T3BlbihoKX0se2tleXM6W1siRW50ZXIiXSxbIkVudGVyIiwiU2hpZnQiXV0sY2FsbGJhY2s6KGgsZik9PmEuZWRpdG9yT3BlbihoLGYpfSx7a2V5czpbWyJCYWNrc3BhY2UiXSxbIkRlbGV0''@;'; put 'put ''ZSJdXSxjYWxsYmFjazooKT0+YS5lbXB0eVNlbGVjdGVkQ2VsbHMoKX1dLHtncm91cDpVbSxydW5Pbmx5SWY6KCk9PkZvKGMuZ2V0U2VsZWN0ZWQoKSl9KSxsLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siQ29udHJvbC9NZXRhIiwiQSJdXSxjYWxsYmFjazooKT0+YS5zZWxlY3RBbGxDZWxscygp''@;'; put 'put ''LHJ1bk9ubHlJZjooKT0+e3ZhciBoO3JldHVybiEobnVsbCE9PShoPWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSkmJnZvaWQgMCE9PWgmJmguaGlnaGxpZ2h0LmlzSGVhZGVyKCkpfX0se2tleXM6W1siQ29udHJvbC9NZXRhIiwiQSJdXSxjYWxsYmFjazooKT0+e30scnVuT25seUlmOigpPT57''@;'; put 'put ''dmFyIGg7cmV0dXJuIG51bGw9PT0oaD1jLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmhpZ2hsaWdodC5pc0hlYWRlcigpfSxwcmV2ZW50RGVmYXVsdDohMH0se2tleXM6W1siQ29udHJvbC9NZXRhIiwiU2hpZnQiLCJTcGFjZSJdXSxjYWxsYmFjazooKT0+''@;'; put 'put ''YS5zZWxlY3RBbGxDZWxsc0FuZEhlYWRlcnMoKX0se2tleXM6W1siQ29udHJvbC9NZXRhIiwiRW50ZXIiXV0sY2FsbGJhY2s6KCk9PmEucG9wdWxhdGVTZWxlY3RlZENlbGxzRGF0YSgpLHJ1bk9ubHlJZjooKT0+e3ZhciBoLGY7cmV0dXJuIShudWxsIT09KGg9Yy5nZXRTZWxlY3RlZFJhbmdl''@;'; put 'put ''TGFzdCgpKSYmdm9pZCAwIT09aCYmaC5oaWdobGlnaHQuaXNIZWFkZXIoKSkmJihudWxsPT09KGY9Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09Zj92b2lkIDA6Zi5nZXRDZWxsc0NvdW50KCkpPjF9fSx7a2V5czpbWyJDb250cm9sIiwiU3BhY2UiXV0sY2FwdHVyZUN0cmw6''@;'; put 'put ''ITAsY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub0NvbHVtbnMoKX0se2tleXM6W1siU2hpZnQiLCJTcGFjZSJdXSxzdG9wUHJvcGFnYXRpb246ITAsY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub1Jvd3MoKX0se2tleXM6W1siQXJyb3dVcCJdXSxjYWxs''@;'; put 'put ''YmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvblVwKCl9LHtrZXlzOltbIkFycm93VXAiLCJDb250cm9sL01ldGEiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RUb3AoKX0se2tleXM6W1siQXJyb3dVcCIsIlNoaWZ0Il1dLGNhbGxiYWNr''@;'; put 'put ''OigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uVXAoKX0se2tleXM6W1siQXJyb3dVcCIsIlNoaWZ0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0VG9wKCkscnVuT25seUlmOigpPT4hKGMuc2VsZWN0aW9u''@;'; put 'put ''LmlzU2VsZWN0ZWRCeUNvcm5lcigpfHxjLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSl9LHtrZXlzOltbIkFycm93RG93biJdXSxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvbkRvd24oKX0se2tleXM6W1siQXJyb3dEb3duIiwiQ29udHJvbC9NZXRhIl1dLGNh''@;'; put 'put ''cHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0Qm90dG9tKCl9LHtrZXlzOltbIkFycm93RG93biIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uRG93bigpfSx7a2V5czpbWyJBcnJvd0Rvd24iLCJTaGlmdCIsIkNv''@;'; put 'put ''bnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdEJvdHRvbSgpLHJ1bk9ubHlJZjooKT0+IShjLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8Yy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVy''@;'; put 'put ''KCkpfSx7a2V5czpbWyJBcnJvd0xlZnQiXV0sY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25MZWZ0KCl9LHtrZXlzOltbIkFycm93TGVmdCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdExlZnQoKX0s''@;'; put 'put ''e2tleXM6W1siQXJyb3dMZWZ0IiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25MZWZ0KCl9LHtrZXlzOltbIkFycm93TGVmdCIsIlNoaWZ0IiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0''@;'; put 'put ''aW9uVG9Nb3N0TGVmdCgpLHJ1bk9ubHlJZjooKT0+IShjLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8Yy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCkpfSx7a2V5czpbWyJBcnJvd1JpZ2h0Il1dLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0aW9uUmlnaHQo''@;'; put 'put ''KX0se2tleXM6W1siQXJyb3dSaWdodCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdFJpZ2h0KCl9LHtrZXlzOltbIkFycm93UmlnaHQiLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVj''@;'; put 'put ''dGlvblJpZ2h0KCl9LHtrZXlzOltbIkFycm93UmlnaHQiLCJTaGlmdCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvblRvTW9zdFJpZ2h0KCkscnVuT25seUlmOigpPT4hKGMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNv''@;'; put 'put ''cm5lcigpfHxjLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSl9LHtrZXlzOltbIkhvbWUiXV0sY2FwdHVyZUN0cmw6ITAsY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25Ub01vc3RJbmxpbmVTdGFydCgpLHJ1bk9ubHlJZjooKT0+Yy52aWV3LmlzTWFpblRhYmxlTm90''@;'; put 'put ''RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpfSx7a2V5czpbWyJIb21lIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Ub01vc3RJbmxpbmVTdGFydCgpfSx7a2V5czpbWyJIb21lIiwiQ29udHJvbC9NZXRhIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigp''@;'; put 'put ''PT5hLm1vdmVDZWxsU2VsZWN0aW9uVG9Nb3N0VG9wSW5saW5lU3RhcnQoKSxydW5Pbmx5SWY6KCk9PmMudmlldy5pc01haW5UYWJsZU5vdEZ1bGx5Q292ZXJlZEJ5T3ZlcmxheXMoKX0se2tleXM6W1siRW5kIl1dLGNhcHR1cmVDdHJsOiEwLGNhbGxiYWNrOigpPT5hLm1vdmVDZWxsU2VsZWN0''@;'; put 'put ''aW9uVG9Nb3N0SW5saW5lRW5kKCkscnVuT25seUlmOigpPT5jLnZpZXcuaXNNYWluVGFibGVOb3RGdWxseUNvdmVyZWRCeU92ZXJsYXlzKCl9LHtrZXlzOltbIkVuZCIsIlNoaWZ0Il1dLGNhbGxiYWNrOigpPT5hLmV4dGVuZENlbGxzU2VsZWN0aW9uVG9Nb3N0SW5saW5lRW5kKCl9LHtrZXlz''@;'; put 'put ''OltbIkVuZCIsIkNvbnRyb2wvTWV0YSJdXSxjYXB0dXJlQ3RybDohMCxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvblRvTW9zdEJvdHRvbUlubGluZUVuZCgpLHJ1bk9ubHlJZjooKT0+Yy52aWV3LmlzTWFpblRhYmxlTm90RnVsbHlDb3ZlcmVkQnlPdmVybGF5cygpfSx7a2V5czpb''@;'; put 'put ''WyJQYWdlVXAiXV0sY2FsbGJhY2s6KCk9PmEubW92ZUNlbGxTZWxlY3Rpb25VcEJ5Vmlld3BvcnRIaWdodCgpfSx7a2V5czpbWyJQYWdlVXAiLCJTaGlmdCJdXSxjYWxsYmFjazooKT0+YS5leHRlbmRDZWxsc1NlbGVjdGlvblVwQnlWaWV3cG9ydEhlaWdodCgpfSx7a2V5czpbWyJQYWdlRG93''@;'; put 'put ''biJdXSxjYWxsYmFjazooKT0+YS5tb3ZlQ2VsbFNlbGVjdGlvbkRvd25CeVZpZXdwb3J0SGVpZ2h0KCl9LHtrZXlzOltbIlBhZ2VEb3duIiwiU2hpZnQiXV0sY2FsbGJhY2s6KCk9PmEuZXh0ZW5kQ2VsbHNTZWxlY3Rpb25Eb3duQnlWaWV3cG9ydEhlaWdodCgpfSx7a2V5czpbWyJUYWIiXV0s''@;'; put 'put ''cHJldmVudERlZmF1bHQ6ITEsY2FsbGJhY2s6aD0+YS5tb3ZlQ2VsbFNlbGVjdGlvbklubGluZVN0YXJ0KGgpfSx7a2V5czpbWyJTaGlmdCIsIlRhYiJdXSxwcmV2ZW50RGVmYXVsdDohMSxjYWxsYmFjazpoPT5hLm1vdmVDZWxsU2VsZWN0aW9uSW5saW5lRW5kKGgpfSx7a2V5czpbWyJDb250''@;'; put 'put ''cm9sL01ldGEiLCJCYWNrc3BhY2UiXV0sY2FsbGJhY2s6KCk9PmEuc2Nyb2xsVG9Gb2N1c2VkQ2VsbCgpfV0sZCl9ZnVuY3Rpb24gYXBlKGMpe2NvbnN0e2NsYXNzTmFtZXM6bH09djJlKGMsL2h0LXRoZW1lLVthLXpBLVowLTlfLV0rLyk7cmV0dXJuIGwucG9wKCl9bGV0IHZYPW51bGw7Y29u''@;'; put 'put ''c3QgYlg9bmV3IE1hcDtmdW5jdGlvbiBzcGUoYyxsKXt2YXIgYSxkPXRoaXM7bGV0IGg9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxmPXRoaXM7Y29uc3Qgdj1uZXcgTDIoZik7bGV0IE0sRCxaLG5lLGNlLGJlLEVlPSEwOyhmdW5jdGlv''@;'; put 'put ''biBKUWUoYyl7cmV0dXJuIGM9PT1iS30pKGgpJiZmdW5jdGlvbiBYUWUoYyl7aTNlLnNldChjLCEwKX0odGhpcyksdGhpcy5yb290RWxlbWVudD1jLHRoaXMucm9vdERvY3VtZW50PWMub3duZXJEb2N1bWVudCx0aGlzLnJvb3RXaW5kb3c9dGhpcy5yb290RG9jdW1lbnQuZGVmYXVsdFZpZXcs''@;'; put 'put ''dGhpcy5pc0Rlc3Ryb3llZD0hMSx0aGlzLnJlbmRlclN1c3BlbmRlZENvdW50ZXI9MCx0aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50ZXI9MDtjb25zdCBCZT1udWxsIT09KGE9bD8ubGF5b3V0RGlyZWN0aW9uKSYmdm9pZCAwIT09YT9hOiJpbmhlcml0IixxZT1bInJ0bCIsImx0ciJdLmlu''@;'; put 'put ''Y2x1ZGVzKEJlKT9CZTp0aGlzLnJvb3RXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLnJvb3RFbGVtZW50KS5kaXJlY3Rpb247dGhpcy5yb290RWxlbWVudC5zZXRBdHRyaWJ1dGUoImRpciIscWUpLHRoaXMuaXNSdGw9ZnVuY3Rpb24oKXtyZXR1cm4icnRsIj09PXFlfSx0aGlzLmlzTHRy''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuIWYuaXNSdGwoKX0sdGhpcy5nZXREaXJlY3Rpb25GYWN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gZi5pc0x0cigpPzE6LTF9LGwubGFuZ3VhZ2U9ZnVuY3Rpb24gWGV0KGMpe2xldCBsPXkzZShjKTtyZXR1cm4gclgobCl8fChsPW5YLF8zZShjKSksbH0obC5sYW5n''@;'; put 'put ''dWFnZSk7Y29uc3QgbnQ9bmV3IFkzZShmLGwsW3JudCx1bnRdKSxsdD1udC5nZXRUYWJsZU1ldGEoKSxtdD1udC5nZXRHbG9iYWxNZXRhKCksSnQ9WU8oKTt0aGlzLmNvbnRhaW5lcj10aGlzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLnJlbmRlckNhbGw9ITEsYy5p''@;'; put 'put ''bnNlcnRCZWZvcmUodGhpcy5jb250YWluZXIsYy5maXJzdENoaWxkKSxyUCh0aGlzKSYmKGEyZShsLmxpY2Vuc2VLZXksYyksVGkoYywiaHQtd3JhcHBlciIpKSx0aGlzLmd1aWQ9YGh0XyR7UUcoKX1gLGJYLnNldCh0aGlzLmd1aWQsdGhpcyksdGhpcy5jb2x1bW5JbmRleE1hcHBlcj1uZXcg''@;'; put 'put ''T0ssdGhpcy5yb3dJbmRleE1hcHBlcj1uZXcgT0ssdGhpcy5jb2x1bW5JbmRleE1hcHBlci5hZGRMb2NhbEhvb2soImluZGV4ZXNTZXF1ZW5jZUNoYW5nZSIsdnQ9PntmLnJ1bkhvb2tzKCJhZnRlckNvbHVtblNlcXVlbmNlQ2hhbmdlIix2dCl9KSx0aGlzLnJvd0luZGV4TWFwcGVyLmFkZExv''@;'; put 'put ''Y2FsSG9vaygiaW5kZXhlc1NlcXVlbmNlQ2hhbmdlIix2dD0+e2YucnVuSG9va3MoImFmdGVyUm93U2VxdWVuY2VDaGFuZ2UiLHZ0KX0pLEQ9bmV3IHBldChmKSwoIXRoaXMucm9vdEVsZW1lbnQuaWR8fCJodF8iPT09dGhpcy5yb290RWxlbWVudC5pZC5zdWJzdHJpbmcoMCwzKSkmJih0aGlz''@;'; put 'put ''LnJvb3RFbGVtZW50LmlkPXRoaXMuZ3VpZCk7bGV0IFFuPW5ldyBSdHQobHQse3Jvd0luZGV4TWFwcGVyOmYucm93SW5kZXhNYXBwZXIsY29sdW1uSW5kZXhNYXBwZXI6Zi5jb2x1bW5JbmRleE1hcHBlcixjb3VudENvbHM6KCk9PmYuY291bnRDb2xzKCksY291bnRSb3dzOigpPT5mLmNvdW50''@;'; put 'put ''Um93cygpLHByb3BUb0NvbDp2dD0+TS5wcm9wVG9Db2wodnQpLGlzRWRpdG9yT3BlbmVkOigpPT4hIWYuZ2V0QWN0aXZlRWRpdG9yKCkmJmYuZ2V0QWN0aXZlRWRpdG9yKCkuaXNPcGVuZWQoKSxjb3VudFJlbmRlcmFibGVDb2x1bW5zOigpPT50aGlzLnZpZXcuY291bnRSZW5kZXJhYmxlQ29s''@;'; put 'put ''dW1ucygpLGNvdW50UmVuZGVyYWJsZVJvd3M6KCk9PnRoaXMudmlldy5jb3VudFJlbmRlcmFibGVSb3dzKCksY291bnRSb3dIZWFkZXJzOigpPT50aGlzLmNvdW50Um93SGVhZGVycygpLGNvdW50Q29sSGVhZGVyczooKT0+dGhpcy5jb3VudENvbEhlYWRlcnMoKSxjb3VudFJlbmRlcmFibGVS''@;'; put 'put ''b3dzSW5SYW5nZTpmdW5jdGlvbigpe3JldHVybiBkLnZpZXcuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoLi4uYXJndW1lbnRzKX0sY291bnRSZW5kZXJhYmxlQ29sdW1uc0luUmFuZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gZC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKC4u''@;'; put 'put ''LmFyZ3VtZW50cyl9LGdldFNob3J0Y3V0TWFuYWdlcjooKT0+Zi5nZXRTaG9ydGN1dE1hbmFnZXIoKSxjcmVhdGVDZWxsQ29vcmRzOih2dCxOdCk9PmYuX2NyZWF0ZUNlbGxDb29yZHModnQsTnQpLGNyZWF0ZUNlbGxSYW5nZToodnQsTnQsV3QpPT5mLl9jcmVhdGVDZWxsUmFuZ2UodnQsTnQs''@;'; put 'put ''V3QpLHZpc3VhbFRvUmVuZGVyYWJsZUNvb3Jkczp2dD0+e2NvbnN0e3JvdzpOdCxjb2w6V3R9PXZ0O3JldHVybiBmLl9jcmVhdGVDZWxsQ29vcmRzKE50Pj0wP2Yucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChOdCk6TnQsV3Q+PTA/Zi5jb2x1bW5JbmRleE1h''@;'; put 'put ''cHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KFd0KTpXdCl9LHJlbmRlcmFibGVUb1Zpc3VhbENvb3Jkczp2dD0+e2NvbnN0e3JvdzpOdCxjb2w6V3R9PXZ0O3JldHVybiBmLl9jcmVhdGVDZWxsQ29vcmRzKE50Pj0wP2Yucm93SW5kZXhNYXBwZXIuZ2V0VmlzdWFsRnJvbVJlbmRl''@;'; put 'put ''cmFibGVJbmRleChOdCk6TnQsV3Q+PTA/Zi5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KFd0KTpXdCl9LGZpbmRGaXJzdE5vbkhpZGRlblJlbmRlcmFibGVSb3c6KHZ0LE50KT0+e2NvbnN0IFd0PU50PnZ0PzE6LTEsZ249TWF0aC5taW4odnQsTnQpLCRu''@;'; put 'put ''PU1hdGgubWF4KHZ0LE50KSxocj1mLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh2dCxXdCk7cmV0dXJuIG51bGw9PT1ocnx8MT09PVd0JiZocj4kbnx8LTE9PT1XdCYmaHI8Z24/bnVsbDpocj49MD9mLnJvd0luZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlz''@;'; put 'put ''dWFsSW5kZXgoaHIpOmhyfSxmaW5kRmlyc3ROb25IaWRkZW5SZW5kZXJhYmxlQ29sdW1uOih2dCxOdCk9Pntjb25zdCBXdD1OdD52dD8xOi0xLGduPU1hdGgubWluKHZ0LE50KSwkbj1NYXRoLm1heCh2dCxOdCksaHI9Zi5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5k''@;'; put 'put ''ZXgodnQsV3QpO3JldHVybiBudWxsPT09aHJ8fDE9PT1XdCYmaHI+JG58fC0xPT09V3QmJmhyPGduP251bGw6aHI+PTA/Zi5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGhyKTpocn0saXNEaXNhYmxlZENlbGxTZWxlY3Rpb246KHZ0LE50KT0+dnQ8MHx8''@;'; put 'put ''TnQ8MD9mLmdldFNldHRpbmdzKCkuZGlzYWJsZVZpc3VhbFNlbGVjdGlvbjpmLmdldENlbGxNZXRhKHZ0LE50KS5kaXNhYmxlVmlzdWFsU2VsZWN0aW9ufSk7dGhpcy5zZWxlY3Rpb249UW47Y29uc3QgeWk9dnQ9PntsZXR7aGlkZGVuSW5kZXhlc0NoYW5nZWQ6TnR9PXZ0O050JiZ0aGlzLnNl''@;'; put 'put ''bGVjdGlvbi5jb21taXQoKX07ZnVuY3Rpb24geXIodnQpe2NvbnN0IE50PXkzZSh2dCk7clgoTnQpPyhmLnJ1bkhvb2tzKCJiZWZvcmVMYW5ndWFnZUNoYW5nZSIsTnQpLG10Lmxhbmd1YWdlPU50LGYucnVuSG9va3MoImFmdGVyTGFuZ3VhZ2VDaGFuZ2UiLE50KSk6XzNlKHZ0KX1mdW5jdGlv''@;'; put 'put ''biBHbih2dCxOdCl7Y29uc3QgV3Q9ImNsYXNzTmFtZSI9PT12dD9mLnJvb3RFbGVtZW50OmYudGFibGU7aWYoRWUpVGkoV3QsTnQpO2Vsc2V7bGV0IGduPVtdLCRuPVtdO210W3Z0XSYmKGduPUFycmF5LmlzQXJyYXkobXRbdnRdKT9tdFt2dF06WEcobXRbdnRdKSksTnQmJigkbj1BcnJheS5p''@;'; put 'put ''c0FycmF5KE50KT9OdDpYRyhOdCkpO2NvbnN0IGhyPXFHKGduLCRuKSxVcj1xRygkbixnbik7aHIubGVuZ3RoJiZjYShXdCxociksVXIubGVuZ3RoJiZUaShXdCxVcil9bXRbdnRdPU50fWZ1bmN0aW9uIGlpKCl7bGV0IHZ0PSExO3JldHVybnt2YWxpZGF0b3JzSW5RdWV1ZTowLHZhbGlkOiEw''@;'; put 'put ''LGFkZFZhbGlkYXRvclRvUXVldWUoKXt0aGlzLnZhbGlkYXRvcnNJblF1ZXVlKz0xLHZ0PSExfSxyZW1vdmVWYWxpZGF0b3JGb3JtUXVldWUoKXt0aGlzLnZhbGlkYXRvcnNJblF1ZXVlPXRoaXMudmFsaWRhdG9yc0luUXVldWUtMTwwPzA6dGhpcy52YWxpZGF0b3JzSW5RdWV1ZS0xLHRoaXMu''@;'; put 'put ''Y2hlY2tJZlF1ZXVlSXNFbXB0eSgpfSxvblF1ZXVlRW1wdHkoKXt9LGNoZWNrSWZRdWV1ZUlzRW1wdHkoKXswPT09dGhpcy52YWxpZGF0b3JzSW5RdWV1ZSYmITE9PT12dCYmKHZ0PSEwLHRoaXMub25RdWV1ZUVtcHR5KHRoaXMudmFsaWQpKX19fWZ1bmN0aW9uIF9pKHZ0KXtjb25zdCBOdD12''@;'; put 'put ''dC5yZXBsYWNlKCIsIiwiLiIpO3JldHVybiExPT09aXNOYU4ocGFyc2VGbG9hdChOdCkpP3BhcnNlRmxvYXQoTnQpOnZ0fWZ1bmN0aW9uIFBuKHZ0LE50LFd0KXtpZighdnQubGVuZ3RoKXJldHVybiB2b2lkIFd0KCk7Y29uc3QgZ249Zi5nZXRBY3RpdmVFZGl0b3IoKSwkbj1uZXcgaWk7bGV0''@;'; put 'put ''IGhyPSEwOyRuLm9uUXVldWVFbXB0eT0oKT0+e2duJiZociYmZ24uY2FuY2VsQ2hhbmdlcygpLFd0KCl9O2ZvcihsZXQgVXI9dnQubGVuZ3RoLTE7VXI+PTA7VXItLSl7Y29uc3RbWXIsTmldPXZ0W1VyXSxybj1NLnByb3BUb0NvbChOaSk7bGV0IHVuO3VuPU51bWJlci5pc0ludGVnZXIocm4p''@;'; put 'put ''P2YuZ2V0Q2VsbE1ldGEoWXIscm4pOnsuLi5PYmplY3QuZ2V0UHJvdG90eXBlT2YobHQpLC4uLmx0fSxmLmdldENlbGxWYWxpZGF0b3IodW4pJiYoJG4uYWRkVmFsaWRhdG9yVG9RdWV1ZSgpLGYudmFsaWRhdGVDZWxsKHZ0W1VyXVszXSx1bixmdW5jdGlvbihrbix3cil7cmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uKG5yKXtpZigiYm9vbGVhbiIhPXR5cGVvZiBucil0aHJvdyBuZXcgRXJyb3IoIlZhbGlkYXRpb24gZXJyb3I6IHJlc3VsdCBpcyBub3QgYm9vbGVhbiIpOyExPT09bnImJiExPT09d3IuYWxsb3dJbnZhbGlkJiYoaHI9ITEsdnQuc3BsaWNlKGtuLDEpLHdyLnZhbGlkPSEwKSwkbi5yZW1v''@;'; put 'put ''dmVWYWxpZGF0b3JGb3JtUXVldWUoKX19KFVyLHVuKSxOdCkpfSRuLmNoZWNrSWZRdWV1ZUlzRW1wdHkoKX1mdW5jdGlvbiBqcih2dCxOdCl7Zm9yKGxldCBnbj12dC5sZW5ndGgtMTtnbj49MDtnbi0tKXtsZXQgJG49ITE7aWYobnVsbCE9PXZ0W2duXSl7aWYobnVsbCE9dnRbZ25dWzJdfHxu''@;'; put 'put ''dWxsIT12dFtnbl1bM10pe2lmKGx0LmFsbG93SW5zZXJ0Um93KWZvcig7dnRbZ25dWzBdPmYuY291bnRSb3dzKCktMTspe2NvbnN0e2RlbHRhOmhyfT1NLmNyZWF0ZVJvdyh2b2lkIDAsdm9pZCAwLHtzb3VyY2U6ImF1dG8ifSk7aWYoMD09PWhyKXskbj0hMDticmVha319aWYoImFycmF5Ij09''@;'; put 'put ''PWYuZGF0YVR5cGUmJighbHQuY29sdW1uc3x8MD09PWx0LmNvbHVtbnMubGVuZ3RoKSYmbHQuYWxsb3dJbnNlcnRDb2x1bW4pZm9yKDtNLnByb3BUb0NvbCh2dFtnbl1bMV0pPmYuY291bnRDb2xzKCktMTspe2NvbnN0e2RlbHRhOmhyfT1NLmNyZWF0ZUNvbCh2b2lkIDAsdm9pZCAwLHtzb3Vy''@;'; put 'put ''Y2U6ImF1dG8ifSk7aWYoMD09PWhyKXskbj0hMDticmVha319JG58fE0uc2V0KHZ0W2duXVswXSx2dFtnbl1bMV0sdnRbZ25dWzNdKX19ZWxzZSB2dC5zcGxpY2UoZ24sMSl9Y29uc3QgV3Q9dnQubGVuZ3RoPjA7aWYoZi5mb3JjZUZ1bGxSZW5kZXI9ITAsV3Qpe1ouYWRqdXN0Um93c0FuZENv''@;'; put 'put ''bHMoKSxmLnJ1bkhvb2tzKCJiZWZvcmVDaGFuZ2VSZW5kZXIiLHZ0LE50KSxuZS5jbG9zZUVkaXRvcigpLGYudmlldy5yZW5kZXIoKSxuZS5wcmVwYXJlRWRpdG9yKCksZi52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLGYucnVuSG9va3MoImFmdGVyQ2hhbmdlIix2dCxOdHx8ImVkaXQiKTtj''@;'; put 'put ''b25zdCBnbj1mLmdldEFjdGl2ZUVkaXRvcigpO2duJiZGbyhnbi5yZWZyZXNoVmFsdWUpJiZnbi5yZWZyZXNoVmFsdWUoKX1lbHNlIGYudmlldy5yZW5kZXIoKX1mdW5jdGlvbiBYbih2dCxOdCxXdCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodnQpP3Z0OltbdnQsTnQsV3RdXX1mdW5jdGlvbiBJ''@;'; put 'put ''cih2dCxOdCl7Y29uc3QgV3Q9Zi5ydW5Ib29rcygiYmVmb3JlQ2hhbmdlIix2dCxOdHx8ImVkaXQiKSxnbj12dC5maWx0ZXIoaHI9Pm51bGwhPT1ocik7dmFyICRuO2lmKCExPT09V3R8fDA9PT1nbi5sZW5ndGgpcmV0dXJuIG51bGw9PT0oJG49Zi5nZXRBY3RpdmVFZGl0b3IoKSl8fHZvaWQg''@;'; put 'put ''MD09PSRufHwkbi5jYW5jZWxDaGFuZ2VzKCksW107Zm9yKGxldCBocj1nbi5sZW5ndGgtMTtocj49MDtoci0tKXtjb25zdFtVcixZciwsTmldPWduW2hyXSxybj1NLnByb3BUb0NvbChZcik7bGV0IHVuO3VuPU51bWJlci5pc0ludGVnZXIocm4pP2YuZ2V0Q2VsbE1ldGEoVXIscm4pOnsuLi5P''@;'; put 'put ''YmplY3QuZ2V0UHJvdG90eXBlT2YobHQpLC4uLmx0fSwibnVtZXJpYyI9PT11bi50eXBlJiYic3RyaW5nIj09dHlwZW9mIE5pJiZ0ZmUoTmkpJiYoZ25baHJdWzNdPV9pKE5pKSl9cmV0dXJuIGdufXRoaXMuY29sdW1uSW5kZXhNYXBwZXIuYWRkTG9jYWxIb29rKCJjYWNoZVVwZGF0ZWQiLHlp''@;'; put 'put ''KSx0aGlzLnJvd0luZGV4TWFwcGVyLmFkZExvY2FsSG9vaygiY2FjaGVVcGRhdGVkIix5aSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlclNldFJhbmdlRW5kIiwodnQsTnQpPT57Y29uc3QgV3Q9UGQoITEpLGduPXRoaXMuc2VsZWN0aW9uLmdldFNlbGVjdGVkUmFuZ2UoKSx7''@;'; put 'put ''ZnJvbTokbix0bzpocn09Z24uY3VycmVudCgpLFVyPWduLnNpemUoKS0xO3RoaXMucnVuSG9va3MoImFmdGVyU2VsZWN0aW9uIiwkbi5yb3csJG4uY29sLGhyLnJvdyxoci5jb2wsV3QsVXIpLHRoaXMucnVuSG9va3MoImFmdGVyU2VsZWN0aW9uQnlQcm9wIiwkbi5yb3csZi5jb2xUb1Byb3Ao''@;'; put 'put ''JG4uY29sKSxoci5yb3csZi5jb2xUb1Byb3AoaHIuY29sKSxXdCxVciksTnQmJighV3QuaXNUb3VjaGVkKCl8fFd0LmlzVG91Y2hlZCgpJiYhV3QudmFsdWUpJiZiZS5zY3JvbGxUbyh2dCk7Y29uc3QgWXI9UW4uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCksTmk9UW4uaXNTZWxlY3RlZEJ5Q29s''@;'; put 'put ''dW1uSGVhZGVyKCk7WXImJk5pP1RpKHRoaXMucm9vdEVsZW1lbnQsWyJodF9fc2VsZWN0aW9uLS1yb3dzIiwiaHRfX3NlbGVjdGlvbi0tY29sdW1ucyJdKTpZcj8oY2EodGhpcy5yb290RWxlbWVudCwiaHRfX3NlbGVjdGlvbi0tY29sdW1ucyIpLFRpKHRoaXMucm9vdEVsZW1lbnQsImh0X19z''@;'; put 'put ''ZWxlY3Rpb24tLXJvd3MiKSk6Tmk/KGNhKHRoaXMucm9vdEVsZW1lbnQsImh0X19zZWxlY3Rpb24tLXJvd3MiKSxUaSh0aGlzLnJvb3RFbGVtZW50LCJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIikpOmNhKHRoaXMucm9vdEVsZW1lbnQsWyJodF9fc2VsZWN0aW9uLS1yb3dzIiwiaHRfX3NlbGVj''@;'; put 'put ''dGlvbi0tY29sdW1ucyJdKSwic2hpZnQiIT09UW4uZ2V0U2VsZWN0aW9uU291cmNlKCkmJm5lLmNsb3NlRWRpdG9yKG51bGwpLGYudmlldy5yZW5kZXIoKSxuZS5wcmVwYXJlRWRpdG9yKCl9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImJlZm9yZVNldEZvY3VzIix2dD0+e3RoaXMu''@;'; put 'put ''cnVuSG9va3MoImJlZm9yZVNlbGVjdGlvbkZvY3VzU2V0Iix2dC5yb3csdnQuY29sKX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJTZXRGb2N1cyIsdnQ9Pntjb25zdCBOdD1QZCghMSk7dGhpcy5ydW5Ib29rcygiYWZ0ZXJTZWxlY3Rpb25Gb2N1c1NldCIsdnQucm93LHZ0''@;'; put 'put ''LmNvbCxOdCksKCFOdC5pc1RvdWNoZWQoKXx8TnQuaXNUb3VjaGVkKCkmJiFOdC52YWx1ZSkmJmJlLnNjcm9sbFRvKHZ0KSxuZS5jbG9zZUVkaXRvcigpLGYudmlldy5yZW5kZXIoKSxuZS5wcmVwYXJlRWRpdG9yKCl9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyU2VsZWN0''@;'; put 'put ''aW9uRmluaXNoZWQiLHZ0PT57Y29uc3QgTnQ9dnQubGVuZ3RoLTEse2Zyb206V3QsdG86Z259PXZ0W050XTt0aGlzLnJ1bkhvb2tzKCJhZnRlclNlbGVjdGlvbkVuZCIsV3Qucm93LFd0LmNvbCxnbi5yb3csZ24uY29sLE50KSx0aGlzLnJ1bkhvb2tzKCJhZnRlclNlbGVjdGlvbkVuZEJ5UHJv''@;'; put 'put ''cCIsV3Qucm93LGYuY29sVG9Qcm9wKFd0LmNvbCksZ24ucm93LGYuY29sVG9Qcm9wKGduLmNvbCksTnQpfSksdGhpcy5zZWxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlcklzTXVsdGlwbGVTZWxlY3Rpb24iLHZ0PT57Y29uc3QgTnQ9dGhpcy5ydW5Ib29rcygiYWZ0ZXJJc011bHRpcGxlU2Vs''@;'; put 'put ''ZWN0aW9uIix2dC52YWx1ZSk7dnQudmFsdWUmJih2dC52YWx1ZT1OdCl9KSx0aGlzLnNlbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyRGVzZWxlY3QiLCgpPT57bmUuY2xvc2VFZGl0b3IoKSxmLnZpZXcucmVuZGVyKCksY2EodGhpcy5yb290RWxlbWVudCxbImh0X19zZWxlY3Rpb24tLXJv''@;'; put 'put ''d3MiLCJodF9fc2VsZWN0aW9uLS1jb2x1bW5zIl0pLHRoaXMucnVuSG9va3MoImFmdGVyRGVzZWxlY3QiKX0pLHRoaXMuc2VsZWN0aW9uLmFkZExvY2FsSG9vaygiYmVmb3JlSGlnaGxpZ2h0U2V0IiwoKT0+dGhpcy5ydW5Ib29rcygiYmVmb3JlU2VsZWN0aW9uSGlnaGxpZ2h0U2V0IikpLmFk''@;'; put 'put ''ZExvY2FsSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxXdD0wO1d0PHZ0O1d0KyspTnRbV3RdPWFyZ3VtZW50c1tXdF07cmV0dXJuIGQucnVuSG9va3MoImJlZm9yZVNldFJhbmdlU3RhcnQi''@;'; put 'put ''LC4uLk50KX0pLmFkZExvY2FsSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHkiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCksV3Q9MDtXdDx2dDtXdCsrKU50W1d0XT1hcmd1bWVudHNbV3RdO3JldHVybiBkLnJ1bkhvb2tzKCJiZWZv''@;'; put 'put ''cmVTZXRSYW5nZVN0YXJ0T25seSIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJiZWZvcmVTZXRSYW5nZUVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxXdD0wO1d0PHZ0O1d0KyspTnRbV3RdPWFyZ3VtZW50c1tXdF07cmV0dXJuIGQu''@;'; put 'put ''cnVuSG9va3MoImJlZm9yZVNldFJhbmdlRW5kIiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImJlZm9yZVNlbGVjdENvbHVtbnMiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCksV3Q9MDtXdDx2dDtXdCsrKU50W1d0XT1hcmd1bWVudHNbV3Rd''@;'; put 'put ''O3JldHVybiBkLnJ1bkhvb2tzKCJiZWZvcmVTZWxlY3RDb2x1bW5zIiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImFmdGVyU2VsZWN0Q29sdW1ucyIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxXdD0wO1d0PHZ0O1d0KyspTnRbV3RdPWFy''@;'; put 'put ''Z3VtZW50c1tXdF07cmV0dXJuIGQucnVuSG9va3MoImFmdGVyU2VsZWN0Q29sdW1ucyIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJiZWZvcmVTZWxlY3RSb3dzIixmdW5jdGlvbigpe2Zvcih2YXIgdnQ9YXJndW1lbnRzLmxlbmd0aCxOdD1uZXcgQXJyYXkodnQpLFd0PTA7V3Q8dnQ7V3QrKylO''@;'; put 'put ''dFtXdF09YXJndW1lbnRzW1d0XTtyZXR1cm4gZC5ydW5Ib29rcygiYmVmb3JlU2VsZWN0Um93cyIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJhZnRlclNlbGVjdFJvd3MiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCksV3Q9MDtXdDx2dDtX''@;'; put 'put ''dCsrKU50W1d0XT1hcmd1bWVudHNbV3RdO3JldHVybiBkLnJ1bkhvb2tzKCJhZnRlclNlbGVjdFJvd3MiLC4uLk50KX0pLmFkZExvY2FsSG9vaygiYmVmb3JlTW9kaWZ5VHJhbnNmb3JtU3RhcnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2''@;'; put 'put ''dCksV3Q9MDtXdDx2dDtXdCsrKU50W1d0XT1hcmd1bWVudHNbV3RdO3JldHVybiBkLnJ1bkhvb2tzKCJtb2RpZnlUcmFuc2Zvcm1TdGFydCIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgdnQ9YXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aCxOdD1uZXcgQXJyYXkodnQpLFd0PTA7V3Q8dnQ7V3QrKylOdFtXdF09YXJndW1lbnRzW1d0XTtyZXR1cm4gZC5ydW5Ib29rcygiYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1TdGFydCIsLi4uTnQpfSkuYWRkTG9jYWxIb29rKCJiZWZvcmVNb2RpZnlUcmFuc2Zvcm1Gb2N1cyIsZnVuY3Rpb24o''@;'; put 'put ''KXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxXdD0wO1d0PHZ0O1d0KyspTnRbV3RdPWFyZ3VtZW50c1tXdF07cmV0dXJuIGQucnVuSG9va3MoIm1vZGlmeVRyYW5zZm9ybUZvY3VzIiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImFmdGVyTW9kaWZ5VHJhbnNm''@;'; put 'put ''b3JtRm9jdXMiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCksV3Q9MDtXdDx2dDtXdCsrKU50W1d0XT1hcmd1bWVudHNbV3RdO3JldHVybiBkLnJ1bkhvb2tzKCJhZnRlck1vZGlmeVRyYW5zZm9ybUZvY3VzIiwuLi5OdCl9KS5hZGRMb2Nh''@;'; put 'put ''bEhvb2soImJlZm9yZU1vZGlmeVRyYW5zZm9ybUVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxXdD0wO1d0PHZ0O1d0KyspTnRbV3RdPWFyZ3VtZW50c1tXdF07cmV0dXJuIGQucnVuSG9va3MoIm1vZGlmeVRyYW5zZm9ybUVuZCIs''@;'; put 'put ''Li4uTnQpfSkuYWRkTG9jYWxIb29rKCJhZnRlck1vZGlmeVRyYW5zZm9ybUVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIHZ0PWFyZ3VtZW50cy5sZW5ndGgsTnQ9bmV3IEFycmF5KHZ0KSxXdD0wO1d0PHZ0O1d0KyspTnRbV3RdPWFyZ3VtZW50c1tXdF07cmV0dXJuIGQucnVuSG9va3MoImFmdGVy''@;'; put 'put ''TW9kaWZ5VHJhbnNmb3JtRW5kIiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImJlZm9yZVJvd1dyYXAiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCksV3Q9MDtXdDx2dDtXdCsrKU50W1d0XT1hcmd1bWVudHNbV3RdO3JldHVybiBkLnJ1bkhv''@;'; put 'put ''b2tzKCJiZWZvcmVSb3dXcmFwIiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImJlZm9yZUNvbHVtbldyYXAiLGZ1bmN0aW9uKCl7Zm9yKHZhciB2dD1hcmd1bWVudHMubGVuZ3RoLE50PW5ldyBBcnJheSh2dCksV3Q9MDtXdDx2dDtXdCsrKU50W1d0XT1hcmd1bWVudHNbV3RdO3JldHVybiBkLnJ1''@;'; put 'put ''bkhvb2tzKCJiZWZvcmVDb2x1bW5XcmFwIiwuLi5OdCl9KS5hZGRMb2NhbEhvb2soImluc2VydFJvd1JlcXVpcmUiLHZ0PT50aGlzLmFsdGVyKCJpbnNlcnRfcm93X2Fib3ZlIix2dCwxLCJhdXRvIikpLmFkZExvY2FsSG9vaygiaW5zZXJ0Q29sUmVxdWlyZSIsdnQ9PnRoaXMuYWx0ZXIoImlu''@;'; put 'put ''c2VydF9jb2xfc3RhcnQiLHZ0LDEsImF1dG8iKSksWj17YWx0ZXIodnQsTnQpe2xldCBXdD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MSxnbj1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRzWzNdOnZvaWQgMCwkbj1hcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoPjQ/YXJndW1lbnRzWzRdOnZvaWQgMDtjb25zdCBocj1Vcj0+e2lmKDA9PT1Vci5sZW5ndGgpcmV0dXJuW107Y29uc3QgWXI9Wy4uLlVyXTtyZXR1cm4gWXIuc29ydCgocm4sdW4pPT57bGV0W2tuXT1ybixbd3JdPXVuO3JldHVybiBrbj09PXdyPzA6a24+d3I/MTotMX0pLHF1KFly''@;'; put 'put ''LChybix1bik9PntsZXRba24sd3JdPXVuO2NvbnN0IG5yPXJuW3JuLmxlbmd0aC0xXSxbU3IsWnJdPW5yLFVuPVNyK1pyO2lmKGtuPD1Vbil7Y29uc3QgYnI9TWF0aC5tYXgod3ItKFVuLWtuKSwwKTtuclsxXSs9YnJ9ZWxzZSBybi5wdXNoKFtrbix3cl0pO3JldHVybiBybn0sW1lyWzBdXSl9''@;'; put 'put ''O3N3aXRjaCh2dCl7Y2FzZSJpbnNlcnRfcm93X2JlbG93IjpjYXNlImluc2VydF9yb3dfYWJvdmUiOmNvbnN0IFVyPWYuY291bnRTb3VyY2VSb3dzKCk7aWYobHQubWF4Um93cz09PVVyKXJldHVybjtjb25zdCBZcj0iaW5zZXJ0X3Jvd19iZWxvdyI9PT12dD8iYmVsb3ciOiJhYm92ZSI7TnQ9''@;'; put 'put ''TnQ/PygiYmVsb3ciPT09WXI/VXI6MCk7Y29uc3R7ZGVsdGE6Tmksc3RhcnRQaHlzaWNhbEluZGV4OnJufT1NLmNyZWF0ZVJvdyhOdCxXdCx7c291cmNlOmduLG1vZGU6WXJ9KTtRbi5zaGlmdFJvd3MoZi50b1Zpc3VhbFJvdyhybiksTmkpO2JyZWFrO2Nhc2UiaW5zZXJ0X2NvbF9zdGFydCI6''@;'; put 'put ''Y2FzZSJpbnNlcnRfY29sX2VuZCI6Y29uc3QgdW49Imluc2VydF9jb2xfZW5kIj09PXZ0PyJlbmQiOiJzdGFydCI7TnQ9TnQ/PygiZW5kIj09PXVuP2YuY291bnRTb3VyY2VDb2xzKCk6MCk7Y29uc3R7ZGVsdGE6a24sc3RhcnRQaHlzaWNhbEluZGV4OndyfT1NLmNyZWF0ZUNvbChOdCxXdCx7''@;'; put 'put ''c291cmNlOmduLG1vZGU6dW59KTtpZihrbil7aWYoQXJyYXkuaXNBcnJheShsdC5jb2xIZWFkZXJzKSl7Y29uc3QgWnI9W2YudG9WaXN1YWxDb2x1bW4od3IpLDBdO1pyLmxlbmd0aCs9a24sQXJyYXkucHJvdG90eXBlLnNwbGljZS5hcHBseShsdC5jb2xIZWFkZXJzLFpyKX1Rbi5zaGlmdENv''@;'; put 'put ''bHVtbnMoZi50b1Zpc3VhbENvbHVtbih3ciksa24pfWJyZWFrO2Nhc2UicmVtb3ZlX3JvdyI6Y29uc3QgbnI9WnI9PntsZXQgVW49MDtZbihacixicj0+e2xldFtUcixrcl09YnI7Y29uc3QgR3I9VWMoVHIpP2YuY291bnRSb3dzKCktMTpNYXRoLm1heChUci1VbiwwKTtpZihOdW1iZXIuaXNJ''@;'; put 'put ''bnRlZ2VyKFRyKSYmKFRyPU1hdGgubWF4KFRyLVVuLDApKSwhTS5yZW1vdmVSb3coVHIsa3IsZ24pKXJldHVybjtpZihRbi5pc1NlbGVjdGVkKCkpe2NvbnN0e3Jvdzpwc309Zi5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodDtwcz49VHImJnBzPD1Ucitrci0xJiZuZS5jbG9zZUVk''@;'; put 'put ''aXRvcighMCl9Y29uc3Qgam89Zi5jb3VudFJvd3MoKTswPT09am8/UW4uZGVzZWxlY3QoKToiQ29udGV4dE1lbnUucmVtb3ZlUm93Ij09PWduP1FuLnJlZnJlc2goKTpRbi5zaGlmdFJvd3MoVHIsLWtyKTtjb25zdCBTYT1sdC5maXhlZFJvd3NUb3A7U2E+PUdyKzEmJihsdC5maXhlZFJvd3NU''@;'; put 'put ''b3AtPU1hdGgubWluKGtyLFNhLUdyKSk7Y29uc3QgVWE9bHQuZml4ZWRSb3dzQm90dG9tO1VhJiZHcj49am8tVWEmJihsdC5maXhlZFJvd3NCb3R0b20tPU1hdGgubWluKGtyLFVhKSksVW4rPWtyfSl9O0FycmF5LmlzQXJyYXkoTnQpP25yKGhyKE50KSk6bnIoW1tOdCxXdF1dKTticmVhaztj''@;'; put 'put ''YXNlInJlbW92ZV9jb2wiOmNvbnN0IFNyPVpyPT57bGV0IFVuPTA7WW4oWnIsYnI9PntsZXRbVHIsa3JdPWJyO2NvbnN0IEdyPVVjKFRyKT9mLmNvdW50Q29scygpLTE6TWF0aC5tYXgoVHItVW4sMCk7bGV0IGZvPWYudG9QaHlzaWNhbENvbHVtbihHcik7aWYoTnVtYmVyLmlzSW50ZWdlcihU''@;'; put 'put ''cikmJihUcj1NYXRoLm1heChUci1VbiwwKSksIU0ucmVtb3ZlQ29sKFRyLGtyLGduKSlyZXR1cm47aWYoUW4uaXNTZWxlY3RlZCgpKXtjb25zdHtjb2w6cHN9PWYuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQ7cHM+PVRyJiZwczw9VHIra3ItMSYmbmUuY2xvc2VFZGl0b3IoITAp''@;'; put 'put ''fTA9PT1mLmNvdW50Q29scygpP1FuLmRlc2VsZWN0KCk6IkNvbnRleHRNZW51LnJlbW92ZUNvbHVtbiI9PT1nbj9Rbi5yZWZyZXNoKCk6UW4uc2hpZnRDb2x1bW5zKFRyLC1rcik7Y29uc3QgVWE9bHQuZml4ZWRDb2x1bW5zU3RhcnQ7VWE+PUdyKzEmJihsdC5maXhlZENvbHVtbnNTdGFydC09''@;'; put 'put ''TWF0aC5taW4oa3IsVWEtR3IpKSxBcnJheS5pc0FycmF5KGx0LmNvbEhlYWRlcnMpJiYodHlwZW9mIGZvPiJ1IiYmKGZvPS0xKSxsdC5jb2xIZWFkZXJzLnNwbGljZShmbyxrcikpLFVuKz1rcn0pfTtBcnJheS5pc0FycmF5KE50KT9TcihocihOdCkpOlNyKFtbTnQsV3RdXSk7YnJlYWs7ZGVm''@;'; put 'put ''YXVsdDp0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIGlzIG5vIHN1Y2ggYWN0aW9uICIke3Z0fSJgKX0kbnx8Wi5hZGp1c3RSb3dzQW5kQ29scygpLGYudmlldy5yZW5kZXIoKSxmLnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9LGFkanVzdFJvd3NBbmRDb2xzKCl7Y29uc3QgdnQ9bHQubWluUm93''@;'; put 'put ''cyxOdD1sdC5taW5TcGFyZVJvd3MsV3Q9bHQubWluQ29scyxnbj1sdC5taW5TcGFyZUNvbHM7aWYodnQpe2NvbnN0ICRuPWYuY291bnRSb3dzKCk7JG48dnQmJk0uY3JlYXRlUm93KCRuLHZ0LSRuLHtzb3VyY2U6ImF1dG8ifSl9aWYoTnQpe2NvbnN0ICRuPWYuY291bnRFbXB0eVJvd3MoITAp''@;'; put 'put ''O2lmKCRuPE50KXtjb25zdCBVcj1NYXRoLm1pbihOdC0kbixsdC5tYXhSb3dzLWYuY291bnRTb3VyY2VSb3dzKCkpO00uY3JlYXRlUm93KGYuY291bnRSb3dzKCksVXIse3NvdXJjZToiYXV0byJ9KX19e2xldCAkbjsoV3R8fGduKSYmKCRuPWYuY291bnRFbXB0eUNvbHMoITApKTtsZXQgaHI9''@;'; put 'put ''Zi5jb3VudENvbHMoKTtpZihXdCYmIWx0LmNvbHVtbnMmJmhyPFd0KXtjb25zdCBVcj1XdC1ocjskbis9VXIsTS5jcmVhdGVDb2woaHIsVXIse3NvdXJjZToiYXV0byJ9KX1pZihnbiYmIWx0LmNvbHVtbnMmJiJhcnJheSI9PT1mLmRhdGFUeXBlJiYkbjxnbil7aHI9Zi5jb3VudENvbHMoKTtj''@;'; put 'put ''b25zdCBZcj1NYXRoLm1pbihnbi0kbixsdC5tYXhDb2xzLWhyKTtNLmNyZWF0ZUNvbChocixZcix7c291cmNlOiJhdXRvIn0pfX19LHBvcHVsYXRlRnJvbUFycmF5KHZ0LE50LFd0LGduLCRuKXtsZXQgaHIsVXIsWXIsTmk7Y29uc3Qgcm49W10sdW49e30sa249W10sd3I9dnQucm93LG5yPXZ0''@;'; put 'put ''LmNvbDtpZihVcj1OdC5sZW5ndGgsMD09PVVyKXJldHVybiExO2xldCBTcj0wLFpyPTA7c3dpdGNoKEthKFd0KSYmKFNyPVd0LmNvbC1ucisxLFpyPVd0LnJvdy13cisxKSwkbil7Y2FzZSJzaGlmdF9kb3duIjpjb25zdCBVbj11RShOdCksYnI9VW4ubGVuZ3RoLFRyPU1hdGgubWF4KGJyLFNy''@;'; put 'put ''KSxrcj1mLmdldERhdGEoKS5zbGljZSh3ciksR3I9dUUoa3IpLnNsaWNlKG5yLG5yK1RyKTtmb3IoWXI9MDtZcjxUcjtZcis9MSlpZihZcjxicil7Zm9yKGhyPTAsVXI9VW5bWXJdLmxlbmd0aDtocjxaci1Vcjtocis9MSlVbltZcl0ucHVzaChVbltZcl1baHIlVXJdKTtrbi5wdXNoKFVuW1ly''@;'; put 'put ''XS5jb25jYXQoWXI8R3IubGVuZ3RoP0dyW1lyXTpuZXcgQXJyYXkoa3IubGVuZ3RoKS5maWxsKG51bGwpKSl9ZWxzZSBrbi5wdXNoKFVuW1lyJWJyXS5jb25jYXQoR3JbWXJdKSk7Zi5wb3B1bGF0ZUZyb21BcnJheSh3cixucix1RShrbikpO2JyZWFrO2Nhc2Uic2hpZnRfcmlnaHQiOmNvbnN0''@;'; put 'put ''IGZvPU50Lmxlbmd0aCxqbz1NYXRoLm1heChmbyxaciksU2E9Zi5nZXREYXRhKCkuc2xpY2Uod3IpLm1hcChJdT0+SXUuc2xpY2UobnIpKTtmb3IoaHI9MDtocjxqbztocis9MSlpZihocjxmbyl7Zm9yKFlyPTAsTmk9TnRbaHJdLmxlbmd0aDtZcjxTci1OaTtZcis9MSlOdFtocl0ucHVzaChO''@;'; put 'put ''dFtocl1bWXIlTmldKTtpZihocjxTYS5sZW5ndGgpZm9yKGxldCBJdT0wO0l1PFNhW2hyXS5sZW5ndGg7SXUrPTEpTnRbaHJdLnB1c2goU2FbaHJdW0l1XSk7ZWxzZSBOdFtocl0ucHVzaCguLi5uZXcgQXJyYXkoU2FbMF0ubGVuZ3RoKS5maWxsKG51bGwpKX1lbHNlIE50LnB1c2goTnRbaHIl''@;'; put 'put ''VXJdLnNsaWNlKDAsam8pLmNvbmNhdChTYVtocl0pKTtmLnBvcHVsYXRlRnJvbUFycmF5KHdyLG5yLE50KTticmVhaztkZWZhdWx0OnVuLnJvdz12dC5yb3csdW4uY29sPXZ0LmNvbDtsZXQgaHMsVWE9MCxwcz0wLEZhPSEwO2NvbnN0IEljPWZ1bmN0aW9uKEhsKXtsZXQgQ2M9YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7Y29uc3Qgbmw9TnRbSGwlTnQubGVuZ3RoXTtyZXR1cm4gbnVsbCE9PUNjP25sW0NjJW5sLmxlbmd0aF06bmx9LEphPU50Lmxlbmd0aCxKMj1XdD9XdC5yb3ctdnQucm93KzE6MDtmb3IoVXI9V3Q/SjI6''@;'; put 'put ''TWF0aC5tYXgoSmEsSjIpLGhyPTA7aHI8VXImJiEoV3QmJnVuLnJvdz5XdC5yb3cmJkoyPkphfHwhbHQuYWxsb3dJbnNlcnRSb3cmJnVuLnJvdz5mLmNvdW50Um93cygpLTF8fHVuLnJvdz49bHQubWF4Um93cyk7aHIrKyl7Y29uc3QgSXU9aHItVWEsSGw9SWMoSXUpLmxlbmd0aCxDYz1XdD9X''@;'; put 'put ''dC5jb2wtdnQuY29sKzE6MDtpZihOaT1XdD9DYzpNYXRoLm1heChIbCxDYyksdW4uY29sPXZ0LmNvbCxocz1mLmdldENlbGxNZXRhKHVuLnJvdyx1bi5jb2wpLCJDb3B5UGFzdGUucGFzdGUiIT09Z24mJiJBdXRvZmlsbC5maWxsIiE9PWdufHwhaHMuc2tpcFJvd09uUGFzdGUpe2Zvcihwcz0w''@;'; put 'put ''LFlyPTA7WXI8TmkmJiEoV3QmJnVuLmNvbD5XdC5jb2wmJkNjPkhsfHwhbHQuYWxsb3dJbnNlcnRDb2x1bW4mJnVuLmNvbD5mLmNvdW50Q29scygpLTF8fHVuLmNvbD49bHQubWF4Q29scyk7WXIrKyl7aWYoaHM9Zi5nZXRDZWxsTWV0YSh1bi5yb3csdW4uY29sKSwoIkNvcHlQYXN0ZS5wYXN0''@;'; put 'put ''ZSI9PT1nbnx8IkF1dG9maWxsLmZpbGwiPT09Z24pJiZocy5za2lwQ29sdW1uT25QYXN0ZSl7cHMrPTEsdW4uY29sKz0xLE5pKz0xO2NvbnRpbnVlfWlmKGhzLnJlYWRPbmx5JiYiVW5kb1JlZG8udW5kbyIhPT1nbil7dW4uY29sKz0xO2NvbnRpbnVlfWxldCBqcz1JYyhJdSxZci1wcyksUWE9''@;'; put 'put ''Zi5nZXREYXRhQXRDZWxsKHVuLnJvdyx1bi5jb2wpO2lmKG51bGwhPT1qcyYmIm9iamVjdCI9PXR5cGVvZiBqcylpZihBcnJheS5pc0FycmF5KGpzKSYmbnVsbD09PVFhJiYoUWE9W10pLG51bGw9PT1RYXx8Im9iamVjdCIhPXR5cGVvZiBRYSlGYT0hMTtlbHNle2NvbnN0IEM2PXJfKEFycmF5''@;'; put 'put ''LmlzQXJyYXkoUWEpP1FhOlFhWzBdfHxRYSksXzM9cl8oQXJyYXkuaXNBcnJheShqcyk/anM6anNbMF18fGpzKTtMTyhDNixfMyl8fEFycmF5LmlzQXJyYXkoQzYpJiZBcnJheS5pc0FycmF5KF8zKT9qcz1tMShqcyk6RmE9ITF9ZWxzZSBudWxsIT09UWEmJiJvYmplY3QiPT10eXBlb2YgUWEm''@;'; put 'put ''JihGYT0hMSk7RmEmJnJuLnB1c2goW3VuLnJvdyx1bi5jb2wsanNdKSxGYT0hMCx1bi5jb2wrPTF9dW4ucm93Kz0xfWVsc2UgVWErPTEsdW4ucm93Kz0xLFVyKz0xfWYuc2V0RGF0YUF0Q2VsbChybixudWxsLG51bGwsZ258fCJwb3B1bGF0ZUZyb21BcnJheSIpfX19LHRoaXMuaW5pdD1mdW5j''@;'; put 'put ''dGlvbigpe0Quc2V0RGF0YShsdC5kYXRhKSxmLnJ1bkhvb2tzKCJiZWZvcmVJbml0IiksKFNwKCl8fFMkKCkpJiZUaShmLnJvb3RFbGVtZW50LCJtb2JpbGUiKSx0aGlzLnVwZGF0ZVNldHRpbmdzKGx0LCEwKSx0aGlzLnZpZXc9bmV3IG9ldCh0aGlzKTtjb25zdCB2dD1sdC50aGVtZU5hbWV8''@;'; put 'put ''fGFwZShmLnJvb3RFbGVtZW50KTtmLnVzZVRoZW1lKHZ0KSxmLnZpZXcuYWRkQ2xhc3NOYW1lVG9MaWNlbnNlRWxlbWVudChmLmdldEN1cnJlbnRUaGVtZU5hbWUoKSksbmU9QXFlLmdldEluc3RhbmNlKGYsbHQsUW4pLGJlPWZ1bmN0aW9uIFNudChjKXtjb25zdHtzZWxlY3Rpb246bH09Yzts''@;'; put 'put ''ZXQgYT0hMSxkPSExO3JldHVybntyZXN1bWUoKXtkPSExfSxzdXNwZW5kKCl7ZD0hMH0sc2tpcE5leHRTY3JvbGxDeWNsZSgpe2E9ITB9LHNjcm9sbFRvKGgpe3ZhciBmO2lmKGF8fGQpcmV0dXJuIHZvaWQoYT0hMSk7bGV0IHY7bC5pc0ZvY3VzU2VsZWN0aW9uQ2hhbmdlZCgpP3Y9ZnVuY3Rp''@;'; put 'put ''b24gYm50KGMpe3JldHVybiBsPT57Yy5zY3JvbGxWaWV3cG9ydFRvKGwudG9PYmplY3QoKSl9fShjKTpsLmlzU2VsZWN0ZWRCeUNvcm5lcigpP3Y9KCk9Pnt9OmwuaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCk/dj1mdW5jdGlvbiB3bnQoYyl7cmV0dXJuIGw9PntsZXR7cm93OmF9PWw7Yy5zY3Jv''@;'; put 'put ''bGxWaWV3cG9ydFRvKHtyb3c6YX0pfX0oYyk6bC5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKT92PWZ1bmN0aW9uIG1udChjKXtyZXR1cm4gbD0+e2xldHtjb2w6YX09bDtjLnNjcm9sbFZpZXdwb3J0VG8oe2NvbDphfSl9fShjKToxPT09bC5nZXRTZWxlY3RlZFJhbmdlKCkuc2l6ZSgpJiZs''@;'; put 'put ''LmlzTXVsdGlwbGUoKT92PWZ1bmN0aW9uIHludChjKXtyZXR1cm4gbD0+e2Muc2Nyb2xsVmlld3BvcnRUbyhsLnRvT2JqZWN0KCkpfX0oYyk6MSE9PWwuZ2V0U2VsZWN0ZWRSYW5nZSgpLnNpemUoKXx8bC5pc011bHRpcGxlKCk/bC5nZXRTZWxlY3RlZFJhbmdlKCkuc2l6ZSgpPjEmJih2PWZ1''@;'; put 'put ''bmN0aW9uIF9udChjKXtyZXR1cm4gbD0+e2Muc2Nyb2xsVmlld3BvcnRUbyhsLnRvT2JqZWN0KCkpfX0oYykpOnY9ZnVuY3Rpb24gQ250KGMpe3JldHVybiBsPT57Y29uc3QgYT1jLnNlbGVjdGlvbi5nZXRTZWxlY3Rpb25Tb3VyY2UoKSx7cm93OmQsY29sOmh9PWw7aWYoZDwwJiZoPj0wKWMu''@;'; put 'put ''c2Nyb2xsVmlld3BvcnRUbyh7Y29sOmh9KTtlbHNlIGlmKGg8MCYmZD49MCljLnNjcm9sbFZpZXdwb3J0VG8oe3JvdzpkfSk7ZWxzZXtpZigibW91c2UiPT09YSYmKGg9PT1jLnZpZXcuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKXx8ZD09PWMudmlldy5nZXRMYXN0UGFydGlhbGx5''@;'; put 'put ''VmlzaWJsZVJvdygpKSlyZXR1cm47Yy5zY3JvbGxWaWV3cG9ydFRvKHtyb3c6ZCxjb2w6aH0pfX19KGMpLG51bGw9PT0oZj12KXx8dm9pZCAwPT09Znx8ZihoKX19fShmKSxjZT1uZXcgRHFlKGYpLHJQKHRoaXMpJiZmdW5jdGlvbiB4bnQoYyl7Y29uc3QgbD1mdW5jdGlvbiBFbnQoYyl7cmV0''@;'; put 'put ''dXJuIGw9PntpZighbClyZXR1cm4gbnVsbDtjb25zdCBhPXBYKGMpLGQ9Z1goYyk7cmV0dXJuIGwuY29sPGEuY29sJiYobC5jb2w9YS5jb2wpLGwuY29sPmQuY29sJiYobC5jb2w9ZC5jb2wpLGwucm93PGEucm93JiYobC5yb3c9YS5yb3cpLGwucm93PmQucm93JiYobC5yb3c9ZC5yb3cpLGx9''@;'; put 'put ''fShjKTtsZXQgYTtjb25zdHthY3RpdmF0ZTpkLGRlYWN0aXZhdGU6aH09ZnVuY3Rpb24gTW50KGMpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtjb25zdCBhPWMucm9vdEVsZW1lbnQsZD1RM2UoYyksaD1RM2UoYyk7cmV0''@;'; put 'put ''dXJuIGQuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCgpPT5sPy5vbkZvY3VzRnJvbVRvcCgpKSxoLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwoKT0+bD8ub25Gb2N1c0Zyb21Cb3R0b20oKSksYS5maXJzdENoaWxkLmJlZm9yZShkKSxhLmxhc3RDaGlsZC5hZnRlcihoKSx7YWN0aXZhdGUo''@;'; put 'put ''KXtjLl9yZWdpc3RlclRpbWVvdXQoKCk9PntkLnRhYkluZGV4PTAsaC50YWJJbmRleD0wfSwxMCl9LGRlYWN0aXZhdGUoKXtjLl9yZWdpc3RlclRpbWVvdXQoKCk9PntkLnRhYkluZGV4PS0xLGgudGFiSW5kZXg9LTF9LDEwKX19fShjLHtvbkZvY3VzRnJvbVRvcCgpe3ZhciBjZTtjb25zdCBi''@;'; put 'put ''ZT1udWxsIT09KGNlPWwoYSkpJiZ2b2lkIDAhPT1jZT9jZTpwWChjKTtiZSYmKGMucnVuSG9va3MoIm1vZGlmeUZvY3VzT25UYWJOYXZpZ2F0aW9uIiwiZnJvbV9hYm92ZSIsYmUpLGMuc2VsZWN0Q2VsbChiZS5yb3csYmUuY29sKSksYy5saXN0ZW4oKX0sb25Gb2N1c0Zyb21Cb3R0b20oKXt2''@;'; put 'put ''YXIgY2U7Y29uc3QgYmU9bnVsbCE9PShjZT1sKGEpKSYmdm9pZCAwIT09Y2U/Y2U6Z1goYyk7YmUmJihjLnJ1bkhvb2tzKCJtb2RpZnlGb2N1c09uVGFiTmF2aWdhdGlvbiIsImZyb21fYmVsb3ciLGJlKSxjLnNlbGVjdENlbGwoYmUucm93LGJlLmNvbCkpLGMubGlzdGVuKCl9fSksZj17d3Jh''@;'; put 'put ''cHBlZDohMSxmbGlwcGVkOiExfTtsZXQgdj0hMCxNPSExLEQ9ITE7Yy5hZGRIb29rKCJhZnRlckxpc3RlbiIsKCk9PmgoKSksYy5hZGRIb29rKCJhZnRlclVubGlzdGVuIiwoKT0+ZCgpKSxjLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uIiwoY2UsYmUsRWUsQmUscWUpPT57dmFyIG50O00mJihm''@;'; put 'put ''LndyYXBwZWQmJmYuZmxpcHBlZHx8RCkmJihEPSExLHFlLnZhbHVlPSEwKSx2JiYoYT1udWxsPT09KG50PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PW50P3ZvaWQgMDpudC5oaWdobGlnaHQpfSksYy5hZGRIb29rKCJiZWZvcmVSb3dXcmFwIiwoY2UsYmUsRWUpPT57Zi53''@;'; put 'put ''cmFwcGVkPSEwLGYuZmxpcHBlZD1FZX0pO2NvbnN0IG5lPXtrZXlzOltbIlRhYiJdLFsiU2hpZnQiLCJUYWIiXV0scHJldmVudERlZmF1bHQ6ITEsc3RvcFByb3BhZ2F0aW9uOiExLHJlbGF0aXZlVG9Hcm91cDpKM2UsZ3JvdXA6ImZvY3VzQ2F0Y2hlciJ9O2MuZ2V0U2hvcnRjdXRNYW5hZ2Vy''@;'; put 'put ''KCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0cyhbey4uLm5lLGNhbGxiYWNrOigpPT57Y29uc3R7dGFiTmF2aWdhdGlvbjpjZX09Yy5nZXRTZXR0aW5ncygpO009ITAsYy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpJiYhY2UmJih2PSExKSxjZXx8KEQ9ITApfSxwb3NpdGlvbjoiYmVm''@;'; put 'put ''b3JlIn0sey4uLm5lLGNhbGxiYWNrOmNlPT57Y29uc3R7dGFiTmF2aWdhdGlvbjpiZSxhdXRvV3JhcFJvdzpFZX09Yy5nZXRTZXR0aW5ncygpO2lmKE09ITEsdj0hMCwhYmV8fCFjLnNlbGVjdGlvbi5pc1NlbGVjdGVkKCl8fEVlJiZmLndyYXBwZWQmJmYuZmxpcHBlZHx8IUVlJiZmLndyYXBw''@;'; put 'put ''ZWQpcmV0dXJuIEVlJiZmLndyYXBwZWQmJmYuZmxpcHBlZCYmKGE9Y2Uuc2hpZnRLZXk/cFgoYyk6Z1goYykpLGZ1bmN0aW9uIFooKXtmLndyYXBwZWQ9ITEsZi5mbGlwcGVkPSExLGMuZGVzZWxlY3RDZWxsKCksYy51bmxpc3RlbigpfSgpLCExO2NlLnByZXZlbnREZWZhdWx0KCl9LHBvc2l0''@;'; put 'put ''aW9uOiJhZnRlciJ9XSl9KGYpLGYucnVuSG9va3MoImluaXQiKSx0aGlzLmZvcmNlRnVsbFJlbmRlcj0hMCx0aGlzLnZpZXcucmVuZGVyKCksRWUmJm51bGw9PT1mLnJvb3RFbGVtZW50Lm9mZnNldFBhcmVudCYmeDJlKGYucm9vdEVsZW1lbnQsKCk9PntmLnZpZXcuX3d0Lnd0T3ZlcmxheXMu''@;'; put 'put ''dXBkYXRlTGFzdFNwcmVhZGVyU2l6ZSgpLGYucmVuZGVyKCksZi52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfSksIm9iamVjdCI9PXR5cGVvZiBFZSYmKGYucnVuSG9va3MoImFmdGVyQ2hhbmdlIixFZVswXSxFZVsxXSksRWU9ITEpLGYucnVuSG9va3MoImFmdGVySW5pdCIpfSx0aGlzLl9j''@;'; put 'put ''cmVhdGVDZWxsQ29vcmRzPWZ1bmN0aW9uKHZ0LE50KXtyZXR1cm4gZi52aWV3Ll93dC5jcmVhdGVDZWxsQ29vcmRzKHZ0LE50KX0sdGhpcy5fY3JlYXRlQ2VsbFJhbmdlPWZ1bmN0aW9uKHZ0LE50LFd0KXtyZXR1cm4gZi52aWV3Ll93dC5jcmVhdGVDZWxsUmFuZ2UodnQsTnQsV3QpfSx0aGlz''@;'; put 'put ''LnZhbGlkYXRlQ2VsbD1mdW5jdGlvbih2dCxOdCxXdCxnbil7bGV0ICRuPWYuZ2V0Q2VsbFZhbGlkYXRvcihOdCk7ZnVuY3Rpb24gaHIoVXIpe2lmKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiYhYXJndW1lbnRzWzFdfHwhMD09PU50LmhpZGRlbilyZXR1cm4g''@;'; put 'put ''dm9pZCBXdChVcik7Y29uc3QgTmk9TnQudmlzdWFsQ29sLHJuPU50LnZpc3VhbFJvdyx1bj1mLmdldENlbGwocm4sTmksITApO2lmKHVuJiYiVEgiIT09dW4ubm9kZU5hbWUpe2NvbnN0IGtuPWYucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChybiksd3I9Zi5j''@;'; put 'put ''b2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KE5pKTtmLnZpZXcuX3d0LmdldFNldHRpbmcoImNlbGxSZW5kZXJlciIsa24sd3IsdW4pfVd0KFVyKX10MmUoJG4pJiYoJG49ZnVuY3Rpb24oVXIpe3JldHVybiBmdW5jdGlvbihZcixOaSl7TmkoVXIudGVzdChZ''@;'; put 'put ''cikpfX0oJG4pKSxlYygkbik/KHZ0PWYucnVuSG9va3MoImJlZm9yZVZhbGlkYXRlIix2dCxOdC52aXN1YWxSb3csTnQucHJvcCxnbiksZi5fcmVnaXN0ZXJJbW1lZGlhdGUoKCk9Pnskbi5jYWxsKE50LHZ0LFVyPT57ZiYmKFVyPWYucnVuSG9va3MoImFmdGVyVmFsaWRhdGUiLFVyLHZ0LE50''@;'; put 'put ''LnZpc3VhbFJvdyxOdC5wcm9wLGduKSxOdC52YWxpZD1VcixocihVciksZi5ydW5Ib29rcygicG9zdEFmdGVyVmFsaWRhdGUiLFVyLHZ0LE50LnZpc3VhbFJvdyxOdC5wcm9wLGduKSl9KX0pKTpmLl9yZWdpc3RlckltbWVkaWF0ZSgoKT0+e050LnZhbGlkPSEwLGhyKE50LnZhbGlkLCExKX0p''@;'; put 'put ''fSx0aGlzLnNldERhdGFBdENlbGw9ZnVuY3Rpb24odnQsTnQsV3QsZ24pe2NvbnN0ICRuPVhuKHZ0LE50LFd0KSxocj1bXTtsZXQgWXIsTmkscm4sVXI9Z247Zm9yKFlyPTAsTmk9JG4ubGVuZ3RoO1lyPE5pO1lyKyspe2lmKCJvYmplY3QiIT10eXBlb2YgJG5bWXJdKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigiTWV0aG9kIGBzZXREYXRhQXRDZWxsYCBhY2NlcHRzIHJvdyBudW1iZXIgb3IgY2hhbmdlcyBhcnJheSBvZiBhcnJheXMgYXMgaXRzIGZpcnN0IHBhcmFtZXRlciIpO2lmKCJudW1iZXIiIT10eXBlb2YgJG5bWXJdWzFdKXRocm93IG5ldyBFcnJvcigiTWV0aG9kIGBzZXREYXRhQXRDZWxs''@;'; put 'put ''YCBhY2NlcHRzIHJvdyBhbmQgY29sdW1uIG51bWJlciBhcyBpdHMgcGFyYW1ldGVycy4gSWYgeW91IHdhbnQgdG8gdXNlIG9iamVjdCBwcm9wZXJ0eSBuYW1lLCB1c2UgbWV0aG9kIGBzZXREYXRhQXRSb3dQcm9wYCIpO3JuPSRuW1lyXVsxXT49dGhpcy5jb3VudENvbHMoKT8kbltZcl1bMV06''@;'; put 'put ''TS5jb2xUb1Byb3AoJG5bWXJdWzFdKSxoci5wdXNoKFskbltZcl1bMF0scm4sRC5nZXRBdENlbGwodGhpcy50b1BoeXNpY2FsUm93KCRuW1lyXVswXSksJG5bWXJdWzFdKSwkbltZcl1bMl1dKX0hVXImJiJvYmplY3QiPT10eXBlb2YgdnQmJihVcj1OdCk7Y29uc3QgdW49SXIoaHIsVXIpO2Yu''@;'; put 'put ''cnVuSG9va3MoImFmdGVyU2V0RGF0YUF0Q2VsbCIsdW4sVXIpLFBuKHVuLFVyLCgpPT57anIodW4sVXIpfSl9LHRoaXMuc2V0RGF0YUF0Um93UHJvcD1mdW5jdGlvbih2dCxOdCxXdCxnbil7Y29uc3QgJG49WG4odnQsTnQsV3QpLGhyPVtdO2xldCBZcixOaSxVcj1nbjtmb3IoWXI9MCxOaT0k''@;'; put 'put ''bi5sZW5ndGg7WXI8Tmk7WXIrKyloci5wdXNoKFskbltZcl1bMF0sJG5bWXJdWzFdLEQuZ2V0QXRDZWxsKHRoaXMudG9QaHlzaWNhbFJvdygkbltZcl1bMF0pLCRuW1lyXVsxXSksJG5bWXJdWzJdXSk7IVVyJiYib2JqZWN0Ij09dHlwZW9mIHZ0JiYoVXI9TnQpO2NvbnN0IHJuPUlyKGhyLGdu''@;'; put 'put ''KTtmLnJ1bkhvb2tzKCJhZnRlclNldERhdGFBdFJvd1Byb3AiLHJuLFVyKSxQbihybixVciwoKT0+e2pyKHJuLFVyKX0pfSx0aGlzLmxpc3Rlbj1mdW5jdGlvbigpe2YmJiFmLmlzTGlzdGVuaW5nKCkmJihiWC5mb3JFYWNoKHZ0PT57ZiE9PXZ0JiZ2dC51bmxpc3RlbigpfSksdlg9Zi5ndWlk''@;'; put 'put ''LGYucnVuSG9va3MoImFmdGVyTGlzdGVuIikpfSx0aGlzLnVubGlzdGVuPWZ1bmN0aW9uKCl7dGhpcy5pc0xpc3RlbmluZygpJiYodlg9bnVsbCxmLnJ1bkhvb2tzKCJhZnRlclVubGlzdGVuIikpfSx0aGlzLmlzTGlzdGVuaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHZYPT09Zi5ndWlkfSx0aGlz''@;'; put 'put ''LmRlc3Ryb3lFZGl0b3I9ZnVuY3Rpb24oKXtsZXQgTnQ9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXTtuZS5jbG9zZUVkaXRvcihhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdKSxm''@;'; put 'put ''LnZpZXcucmVuZGVyKCksTnQmJlFuLmlzU2VsZWN0ZWQoKSYmbmUucHJlcGFyZUVkaXRvcigpfSx0aGlzLnBvcHVsYXRlRnJvbUFycmF5PWZ1bmN0aW9uKHZ0LE50LFd0LGduLCRuLGhyLFVyKXtpZigib2JqZWN0IiE9dHlwZW9mIFd0fHwib2JqZWN0IiE9dHlwZW9mIFd0WzBdKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigicG9wdWxhdGVGcm9tQXJyYXkgcGFyYW1ldGVyIGBpbnB1dGAgbXVzdCBiZSBhbiBhcnJheSBvZiBhcnJheXMiKTtjb25zdCBZcj0ibnVtYmVyIj09dHlwZW9mIGduP2YuX2NyZWF0ZUNlbGxDb29yZHMoZ24sJG4pOm51bGw7cmV0dXJuIFoucG9wdWxhdGVGcm9tQXJyYXkoZi5f''@;'; put 'put ''Y3JlYXRlQ2VsbENvb3Jkcyh2dCxOdCksV3QsWXIsaHIsVXIpfSx0aGlzLnNwbGljZUNvbD1mdW5jdGlvbih2dCxOdCxXdCl7Zm9yKHZhciBnbj1hcmd1bWVudHMubGVuZ3RoLCRuPW5ldyBBcnJheShnbj4zP2duLTM6MCksaHI9MztocjxnbjtocisrKSRuW2hyLTNdPWFyZ3VtZW50c1tocl07''@;'; put 'put ''cmV0dXJuIE0uc3BsaWNlQ29sKHZ0LE50LFd0LC4uLiRuKX0sdGhpcy5zcGxpY2VSb3c9ZnVuY3Rpb24odnQsTnQsV3Qpe2Zvcih2YXIgZ249YXJndW1lbnRzLmxlbmd0aCwkbj1uZXcgQXJyYXkoZ24+Mz9nbi0zOjApLGhyPTM7aHI8Z247aHIrKykkbltoci0zXT1hcmd1bWVudHNbaHJdO3Jl''@;'; put 'put ''dHVybiBNLnNwbGljZVJvdyh2dCxOdCxXdCwuLi4kbil9LHRoaXMuZ2V0U2VsZWN0ZWQ9ZnVuY3Rpb24oKXtpZihRbi5pc1NlbGVjdGVkKCkpcmV0dXJuIHlzKFFuLmdldFNlbGVjdGVkUmFuZ2UoKSx2dD0+e2xldHtmcm9tOk50LHRvOld0fT12dDtyZXR1cm5bTnQucm93LE50LmNvbCxXdC5y''@;'; put 'put ''b3csV3QuY29sXX0pfSx0aGlzLmdldFNlbGVjdGVkTGFzdD1mdW5jdGlvbigpe2NvbnN0IHZ0PXRoaXMuZ2V0U2VsZWN0ZWQoKTtsZXQgTnQ7cmV0dXJuIHZ0JiZ2dC5sZW5ndGg+MCYmKE50PXZ0W3Z0Lmxlbmd0aC0xXSksTnR9LHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZT1mdW5jdGlvbigpe2lm''@;'; put 'put ''KFFuLmlzU2VsZWN0ZWQoKSlyZXR1cm4gQXJyYXkuZnJvbShRbi5nZXRTZWxlY3RlZFJhbmdlKCkpfSx0aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0PWZ1bmN0aW9uKCl7Y29uc3QgdnQ9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCk7bGV0IE50O3JldHVybiB2dCYmdnQubGVuZ3RoPjAmJihOdD12''@;'; put 'put ''dFt2dC5sZW5ndGgtMV0pLE50fSx0aGlzLmVtcHR5U2VsZWN0ZWRDZWxscz1mdW5jdGlvbih2dCl7aWYoIVFuLmlzU2VsZWN0ZWQoKXx8MD09PXRoaXMuY291bnRSb3dzKCl8fDA9PT10aGlzLmNvdW50Q29scygpKXJldHVybjtjb25zdCBOdD1bXTtZbihRbi5nZXRTZWxlY3RlZFJhbmdlKCks''@;'; put 'put ''V3Q9PntpZihXdC5pc1NpbmdsZUhlYWRlcigpKXJldHVybjtjb25zdCBnbj1XdC5nZXRUb3BTdGFydENvcm5lcigpLCRuPVd0LmdldEJvdHRvbUVuZENvcm5lcigpOyRvKGduLnJvdywkbi5yb3csaHI9Pnskbyhnbi5jb2wsJG4uY29sLFVyPT57dGhpcy5nZXRDZWxsTWV0YShocixVcikucmVh''@;'; put 'put ''ZE9ubHl8fE50LnB1c2goW2hyLFVyLG51bGxdKX0pfSl9KSxOdC5sZW5ndGg+MCYmdGhpcy5zZXREYXRhQXRDZWxsKE50LHZ0KX0sdGhpcy5pc1JlbmRlclN1c3BlbmRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlbmRlclN1c3BlbmRlZENvdW50ZXI+MH0sdGhpcy5zdXNwZW5kUmVuZGVy''@;'; put 'put ''PWZ1bmN0aW9uKCl7dGhpcy5yZW5kZXJTdXNwZW5kZWRDb3VudGVyKz0xfSx0aGlzLnJlc3VtZVJlbmRlcj1mdW5jdGlvbigpe2NvbnN0IHZ0PXRoaXMucmVuZGVyU3VzcGVuZGVkQ291bnRlci0xO3RoaXMucmVuZGVyU3VzcGVuZGVkQ291bnRlcj1NYXRoLm1heCh2dCwwKSwhdGhpcy5pc1Jl''@;'; put 'put ''bmRlclN1c3BlbmRlZCgpJiZ2dD09PXRoaXMucmVuZGVyU3VzcGVuZGVkQ291bnRlciYmKHRoaXMucmVuZGVyQ2FsbD90aGlzLnJlbmRlcigpOmYudmlldy5yZW5kZXIoKSl9LHRoaXMucmVuZGVyPWZ1bmN0aW9uKCl7dGhpcy52aWV3JiYodGhpcy5yZW5kZXJDYWxsPSEwLHRoaXMuZm9yY2VG''@;'; put 'put ''dWxsUmVuZGVyPSEwLHRoaXMuaXNSZW5kZXJTdXNwZW5kZWQoKXx8Zi52aWV3LnJlbmRlcigpKX0sdGhpcy5iYXRjaFJlbmRlcj1mdW5jdGlvbih2dCl7dGhpcy5zdXNwZW5kUmVuZGVyKCk7Y29uc3QgTnQ9dnQoKTtyZXR1cm4gdGhpcy5yZXN1bWVSZW5kZXIoKSxOdH0sdGhpcy5pc0V4ZWN1''@;'; put 'put ''dGlvblN1c3BlbmRlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmV4ZWN1dGlvblN1c3BlbmRlZENvdW50ZXI+MH0sdGhpcy5zdXNwZW5kRXhlY3V0aW9uPWZ1bmN0aW9uKCl7dGhpcy5leGVjdXRpb25TdXNwZW5kZWRDb3VudGVyKz0xLHRoaXMuY29sdW1uSW5kZXhNYXBwZXIuc3VzcGVuZE9w''@;'; put 'put ''ZXJhdGlvbnMoKSx0aGlzLnJvd0luZGV4TWFwcGVyLnN1c3BlbmRPcGVyYXRpb25zKCl9LHRoaXMucmVzdW1lRXhlY3V0aW9uPWZ1bmN0aW9uKCl7bGV0IHZ0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07Y29uc3QgTnQ9dGhpcy5leGVj''@;'; put 'put ''dXRpb25TdXNwZW5kZWRDb3VudGVyLTE7dGhpcy5leGVjdXRpb25TdXNwZW5kZWRDb3VudGVyPU1hdGgubWF4KE50LDApLCghdGhpcy5pc0V4ZWN1dGlvblN1c3BlbmRlZCgpJiZOdD09PXRoaXMuZXhlY3V0aW9uU3VzcGVuZGVkQ291bnRlcnx8dnQpJiYodGhpcy5jb2x1bW5JbmRleE1hcHBl''@;'; put 'put ''ci5yZXN1bWVPcGVyYXRpb25zKCksdGhpcy5yb3dJbmRleE1hcHBlci5yZXN1bWVPcGVyYXRpb25zKCkpfSx0aGlzLmJhdGNoRXhlY3V0aW9uPWZ1bmN0aW9uKHZ0KXtsZXQgTnQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTt0aGlzLnN1''@;'; put 'put ''c3BlbmRFeGVjdXRpb24oKTtjb25zdCBXdD12dCgpO3JldHVybiB0aGlzLnJlc3VtZUV4ZWN1dGlvbihOdCksV3R9LHRoaXMuYmF0Y2g9ZnVuY3Rpb24odnQpe3RoaXMuc3VzcGVuZFJlbmRlcigpLHRoaXMuc3VzcGVuZEV4ZWN1dGlvbigpO2NvbnN0IE50PXZ0KCk7cmV0dXJuIHRoaXMucmVz''@;'; put 'put ''dW1lRXhlY3V0aW9uKCksdGhpcy5yZXN1bWVSZW5kZXIoKSxOdH0sdGhpcy5yZWZyZXNoRGltZW5zaW9ucz1mdW5jdGlvbigpe2lmKCFmLnZpZXcpcmV0dXJuO2NvbnN0IHZ0PWYudmlldyx7d2lkdGg6TnQsaGVpZ2h0Old0fT12dC5nZXRMYXN0U2l6ZSgpLHt3aWR0aDpnbixoZWlnaHQ6JG59''@;'; put 'put ''PWYucm9vdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksaHI9Z24hPT1OdHx8JG4hPT1XdDshMSE9PWYucnVuSG9va3MoImJlZm9yZVJlZnJlc2hEaW1lbnNpb25zIix7d2lkdGg6TnQsaGVpZ2h0Old0fSx7d2lkdGg6Z24saGVpZ2h0OiRufSxocikmJigoaHJ8fHZ0Ll93dC53dE92''@;'; put 'put ''ZXJsYXlzLnNjcm9sbGFibGVFbGVtZW50PT09Zi5yb290V2luZG93KSYmKHZ0LnNldExhc3RTaXplKGduLCRuKSxmLnJlbmRlcigpLHZ0LmFkanVzdEVsZW1lbnRzU2l6ZSgpKSxmLnJ1bkhvb2tzKCJhZnRlclJlZnJlc2hEaW1lbnNpb25zIix7d2lkdGg6TnQsaGVpZ2h0Old0fSx7d2lkdGg6''@;'; put 'put ''Z24saGVpZ2h0OiRufSxocikpfSx0aGlzLnVwZGF0ZURhdGE9ZnVuY3Rpb24odnQsTnQpe1gzZSh2dCxXdD0+e009V3R9LFd0PT57TT1XdCxmLmNvbHVtbkluZGV4TWFwcGVyLmZpdFRvTGVuZ3RoKHRoaXMuZ2V0SW5pdGlhbENvbHVtbkNvdW50KCkpLGYucm93SW5kZXhNYXBwZXIuZml0VG9M''@;'; put 'put ''ZW5ndGgodGhpcy5jb3VudFNvdXJjZVJvd3MoKSksWi5hZGp1c3RSb3dzQW5kQ29scygpLFFuLnJlZnJlc2goKX0se2hvdEluc3RhbmNlOmYsZGF0YU1hcDpNLGRhdGFTb3VyY2U6RCxpbnRlcm5hbFNvdXJjZToidXBkYXRlRGF0YSIsc291cmNlOk50LG1ldGFNYW5hZ2VyOm50LGZpcnN0UnVu''@;'; put 'put ''OkVlfSl9LHRoaXMubG9hZERhdGE9ZnVuY3Rpb24odnQsTnQpe1gzZSh2dCxXdD0+e009V3R9LCgpPT57bnQuY2xlYXJDZWxsc0NhY2hlKCksZi5pbml0SW5kZXhNYXBwZXJzKCksWi5hZGp1c3RSb3dzQW5kQ29scygpLFFuLnJlZnJlc2goKSxFZSYmKEVlPVtudWxsLCJsb2FkRGF0YSJdKX0s''@;'; put 'put ''e2hvdEluc3RhbmNlOmYsZGF0YU1hcDpNLGRhdGFTb3VyY2U6RCxpbnRlcm5hbFNvdXJjZToibG9hZERhdGEiLHNvdXJjZTpOdCxtZXRhTWFuYWdlcjpudCxmaXJzdFJ1bjpFZX0pfSx0aGlzLmdldEluaXRpYWxDb2x1bW5Db3VudD1mdW5jdGlvbigpe2NvbnN0IHZ0PWx0LmNvbHVtbnM7bGV0''@;'; put 'put ''IE50PTA7aWYoQXJyYXkuaXNBcnJheSh2dCkpTnQ9dnQubGVuZ3RoO2Vsc2UgaWYoZWModnQpKWlmKCJhcnJheSI9PT1mLmRhdGFUeXBlKXtjb25zdCBXdD10aGlzLmNvdW50U291cmNlQ29scygpO2ZvcihsZXQgZ249MDtnbjxXdDtnbis9MSl2dChnbikmJihOdCs9MSl9ZWxzZSgib2JqZWN0''@;'; put 'put ''Ij09PWYuZGF0YVR5cGV8fCJmdW5jdGlvbiI9PT1mLmRhdGFUeXBlKSYmKE50PU0uY29sVG9Qcm9wQ2FjaGUubGVuZ3RoKTtlbHNlIGlmKEZvKGx0LmRhdGFTY2hlbWEpKXtjb25zdCBXdD1NLmdldFNjaGVtYSgpO050PUFycmF5LmlzQXJyYXkoV3QpP1d0Lmxlbmd0aDpQTyhXdCl9ZWxzZSBO''@;'; put 'put ''dD10aGlzLmNvdW50U291cmNlQ29scygpO3JldHVybiBOdH0sdGhpcy5pbml0SW5kZXhNYXBwZXJzPWZ1bmN0aW9uKCl7dGhpcy5jb2x1bW5JbmRleE1hcHBlci5pbml0VG9MZW5ndGgodGhpcy5nZXRJbml0aWFsQ29sdW1uQ291bnQoKSksdGhpcy5yb3dJbmRleE1hcHBlci5pbml0VG9MZW5n''@;'; put 'put ''dGgodGhpcy5jb3VudFNvdXJjZVJvd3MoKSl9LHRoaXMuZ2V0RGF0YT1mdW5jdGlvbih2dCxOdCxXdCxnbil7cmV0dXJuIG1jKHZ0KT9NLmdldEFsbCgpOk0uZ2V0UmFuZ2UoZi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCxOdCksZi5fY3JlYXRlQ2VsbENvb3JkcyhXdCxnbiksTS5ERVNUSU5BVElP''@;'; put 'put ''Tl9SRU5ERVJFUil9LHRoaXMuZ2V0Q29weWFibGVUZXh0PWZ1bmN0aW9uKHZ0LE50LFd0LGduKXtyZXR1cm4gTS5nZXRDb3B5YWJsZVRleHQoZi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCxOdCksZi5fY3JlYXRlQ2VsbENvb3JkcyhXdCxnbikpfSx0aGlzLmdldENvcHlhYmxlRGF0YT1mdW5jdGlv''@;'; put 'put ''bih2dCxOdCl7cmV0dXJuIE0uZ2V0Q29weWFibGUodnQsTS5jb2xUb1Byb3AoTnQpKX0sdGhpcy5nZXRTY2hlbWE9ZnVuY3Rpb24oKXtyZXR1cm4gTS5nZXRTY2hlbWEoKX0sdGhpcy51cGRhdGVTZXR0aW5ncz1mdW5jdGlvbih2dCl7bGV0IE50PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAw''@;'; put 'put ''IT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3QgV3Q9KEVlP2YubG9hZERhdGE6Zi51cGRhdGVEYXRhKS5iaW5kKHRoaXMpO2xldCAkbixocixnbj0hMTtpZihGbyh2dC5yb3dzKSl0aHJvdyBuZXcgRXJyb3IoJ1RoZSAicm93cyIgc2V0dGluZyBpcyBubyBsb25nZXIgc3VwcG9y''@;'; put 'put ''dGVkLiBEbyB5b3UgbWVhbiBzdGFydFJvd3MsIG1pblJvd3Mgb3IgbWF4Um93cz8nKTtpZihGbyh2dC5jb2xzKSl0aHJvdyBuZXcgRXJyb3IoJ1RoZSAiY29scyIgc2V0dGluZyBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiBEbyB5b3UgbWVhbiBzdGFydENvbHMsIG1pbkNvbHMgb3IgbWF4Q29s''@;'; put 'put ''cz8nKTtpZihGbyh2dC5nYW50dENoYXJ0KSl0aHJvdyBuZXcgRXJyb3IoJ1NpbmNlIDguMC4wIHRoZSAiZ2FudHRDaGFydCIgc2V0dGluZyBpcyBubyBsb25nZXIgc3VwcG9ydGVkLicpO2ZvcigkbiBpbiB2dCkiZGF0YSI9PT0kbnx8KCJsYW5ndWFnZSI9PT0kbj95cih2dC5sYW5ndWFnZSk6''@;'; put 'put ''ImNsYXNzTmFtZSI9PT0kbj9HbigiY2xhc3NOYW1lIix2dC5jbGFzc05hbWUpOiJ0YWJsZUNsYXNzTmFtZSI9PT0kbiYmZi50YWJsZT8oR24oInRhYmxlQ2xhc3NOYW1lIix2dC50YWJsZUNsYXNzTmFtZSksZi52aWV3Ll93dC53dE92ZXJsYXlzLnN5bmNPdmVybGF5VGFibGVDbGFzc05hbWVz''@;'; put 'put ''KCkpOkFvLmdldFNpbmdsZXRvbigpLmlzUmVnaXN0ZXJlZCgkbil8fEFvLmdldFNpbmdsZXRvbigpLmlzRGVwcmVjYXRlZCgkbik/ZWModnRbJG5dKT9Bby5nZXRTaW5nbGV0b24oKS5hZGRBc0ZpeGVkKCRuLHZ0WyRuXSxmKTpBcnJheS5pc0FycmF5KHZ0WyRuXSkmJkFvLmdldFNpbmdsZXRv''@;'; put 'put ''bigpLmFkZCgkbix2dFskbl0sZik6IU50JiZFdSh2dCwkbikmJihtdFskbl09dnRbJG5dKSk7dm9pZCAwPT09dnQuZGF0YSYmdm9pZCAwPT09bHQuZGF0YT9XdChudWxsLCJ1cGRhdGVTZXR0aW5ncyIpOnZvaWQgMCE9PXZ0LmRhdGE/V3QodnQuZGF0YSwidXBkYXRlU2V0dGluZ3MiKTp2b2lk''@;'; put 'put ''IDAhPT12dC5jb2x1bW5zJiYoTS5jcmVhdGVNYXAoKSxmLmluaXRJbmRleE1hcHBlcnMoKSk7Y29uc3QgVXI9Zi5jb3VudENvbHMoKSxZcj1sdC5jb2x1bW5zO2lmKFlyJiZlYyhZcikmJihnbj0hMCksKHZvaWQgMCE9PXZ0LmNlbGx8fHZvaWQgMCE9PXZ0LmNlbGxzfHx2b2lkIDAhPT12dC5j''@;'; put 'put ''b2x1bW5zKSYmbnQuY2xlYXJDYWNoZSgpLFVyPjApZm9yKCRuPTAsaHI9MDskbjxVcjskbisrKXtpZihZcil7Y29uc3QgdW49Z24/WXIoJG4pOllyW2hyXTt1biYmbnQudXBkYXRlQ29sdW1uTWV0YShocix1bil9aHIrPTF9Rm8odnQuY2VsbCkmJnFhKHZ0LmNlbGwsdW49PntmLnNldENlbGxN''@;'; put 'put ''ZXRhT2JqZWN0KHVuLnJvdyx1bi5jb2wsdW4pfSksZi5ydW5Ib29rcygiYWZ0ZXJDZWxsTWV0YVJlc2V0Iik7bGV0IE5pPWYucm9vdEVsZW1lbnQuc3R5bGUuaGVpZ2h0OyIiIT09TmkmJihOaT1wYXJzZUludChmLnJvb3RFbGVtZW50LnN0eWxlLmhlaWdodCwxMCkpO2xldCBybj12dC5oZWln''@;'; put 'put ''aHQ7aWYoZWMocm4pJiYocm49cm4oKSksTnQmJmYucm9vdEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJzdHlsZSIpJiZmLnJvb3RFbGVtZW50LnNldEF0dHJpYnV0ZSgiZGF0YS1pbml0aWFsc3R5bGUiLGYucm9vdEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJzdHlsZSIpKSxudWxsPT09cm4pe2NvbnN0''@;'; put 'put ''IHVuPWYucm9vdEVsZW1lbnQuZ2V0QXR0cmlidXRlKCJkYXRhLWluaXRpYWxzdHlsZSIpO3VuJiYodW4uaW5kZXhPZigiaGVpZ2h0Iik+LTF8fHVuLmluZGV4T2YoIm92ZXJmbG93Iik+LTEpP2Yucm9vdEVsZW1lbnQuc2V0QXR0cmlidXRlKCJzdHlsZSIsdW4pOihmLnJvb3RFbGVtZW50LnN0''@;'; put 'put ''eWxlLmhlaWdodD0iIixmLnJvb3RFbGVtZW50LnN0eWxlLm92ZXJmbG93PSIiKX1lbHNlIHZvaWQgMCE9PXJuJiYoZi5yb290RWxlbWVudC5zdHlsZS5oZWlnaHQ9aXNOYU4ocm4pP2Ake3JufWA6YCR7cm59cHhgLGYucm9vdEVsZW1lbnQuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIpO2lmKHR5''@;'; put 'put ''cGVvZiB2dC53aWR0aDwidSIpe2xldCB1bj12dC53aWR0aDtlYyh1bikmJih1bj11bigpKSxmLnJvb3RFbGVtZW50LnN0eWxlLndpZHRoPWlzTmFOKHVuKT9gJHt1bn1gOmAke3VufXB4YH1pZighTnQpe2lmKGYudmlldyl7Zi52aWV3Ll93dC53dFZpZXdwb3J0LnJlc2V0SGFzT3ZlcnNpemVk''@;'; put 'put ''Q29sdW1uSGVhZGVyc01hcmtlZCgpLGYudmlldy5fd3QuZXhwb3J0U2V0dGluZ3NBc0NsYXNzTmFtZXMoKTtjb25zdCB1bj1mLmdldEN1cnJlbnRUaGVtZU5hbWUoKSxrbj1FdSh2dCwidGhlbWVOYW1lIik7dW4mJmtuJiZ1biE9PXZ0LnRoZW1lTmFtZSYmKGYudmlldy5nZXRTdHlsZXNIYW5k''@;'; put 'put ''bGVyKCkucmVtb3ZlQ2xhc3NOYW1lcygpLGYudmlldy5yZW1vdmVDbGFzc05hbWVGcm9tTGljZW5zZUVsZW1lbnQodW4pKTtjb25zdCB3cj1rbiYmdnQudGhlbWVOYW1lfHxhcGUoZi5yb290RWxlbWVudCk7Zi51c2VUaGVtZSh3ciksZi52aWV3LmFkZENsYXNzTmFtZVRvTGljZW5zZUVsZW1l''@;'; put 'put ''bnQoZi5nZXRDdXJyZW50VGhlbWVOYW1lKCkpfWYucnVuSG9va3MoImFmdGVyVXBkYXRlU2V0dGluZ3MiLHZ0KX1aLmFkanVzdFJvd3NBbmRDb2xzKCksZi52aWV3JiYhRWUmJihmLmZvcmNlRnVsbFJlbmRlcj0hMCxmLnZpZXcucmVuZGVyKCksZi52aWV3Ll93dC53dE92ZXJsYXlzLmFkanVz''@;'; put 'put ''dEVsZW1lbnRzU2l6ZSgpKSwhTnQmJmYudmlldyYmKCIiPT09Tml8fCIiPT09cm58fHZvaWQgMD09PXJuKSYmTmkhPT1ybiYmZi52aWV3Ll93dC53dE92ZXJsYXlzLnVwZGF0ZU1haW5TY3JvbGxhYmxlRWxlbWVudHMoKX0sdGhpcy5nZXRWYWx1ZT1mdW5jdGlvbigpe2NvbnN0IHZ0PWYuZ2V0''@;'; put 'put ''U2VsZWN0ZWRMYXN0KCk7aWYobHQuZ2V0VmFsdWUpe2lmKGVjKGx0LmdldFZhbHVlKSlyZXR1cm4gbHQuZ2V0VmFsdWUuY2FsbChmKTtpZih2dClyZXR1cm4gZi5nZXREYXRhKClbdnRbMF1bMF1dW2x0LmdldFZhbHVlXX1lbHNlIGlmKHZ0KXJldHVybiBmLmdldERhdGFBdENlbGwodnRbMF0s''@;'; put 'put ''dnRbMV0pfSx0aGlzLmdldFNldHRpbmdzPWZ1bmN0aW9uKCl7cmV0dXJuIGx0fSx0aGlzLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RBbGwoKSx0aGlzLmVtcHR5U2VsZWN0ZWRDZWxscygpfSx0aGlzLmFsdGVyPWZ1bmN0aW9uKHZ0LE50LFd0LGduLCRuKXtaLmFsdGVyKHZ0LE50LFd0''@;'; put 'put ''LGduLCRuKX0sdGhpcy5nZXRDZWxsPWZ1bmN0aW9uKHZ0LE50KXtsZXQgV3Q9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxnbj1OdCwkbj12dDtpZihOdD49MCl7aWYodGhpcy5jb2x1bW5JbmRleE1hcHBlci5pc0hpZGRlbih0aGlzLnRv''@;'; put 'put ''UGh5c2ljYWxDb2x1bW4oTnQpKSlyZXR1cm4gbnVsbDtnbj10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoTnQpfWlmKHZ0Pj0wKXtpZih0aGlzLnJvd0luZGV4TWFwcGVyLmlzSGlkZGVuKHRoaXMudG9QaHlzaWNhbFJvdyh2dCkpKXJldHVybiBu''@;'; put 'put ''dWxsOyRuPXRoaXMucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh2dCl9cmV0dXJuIG51bGw9PT0kbnx8bnVsbD09PWdufHx2b2lkIDA9PT0kbnx8dm9pZCAwPT09Z24/bnVsbDpmLnZpZXcuZ2V0Q2VsbEF0Q29vcmRzKGYuX2NyZWF0ZUNlbGxDb29yZHMoJG4s''@;'; put 'put ''Z24pLFd0KX0sdGhpcy5nZXRDb29yZHM9ZnVuY3Rpb24odnQpe2NvbnN0IE50PXRoaXMudmlldy5fd3Qud3RUYWJsZS5nZXRDb29yZHModnQpO2lmKG51bGw9PT1OdClyZXR1cm4gbnVsbDtjb25zdHtyb3c6V3QsY29sOmdufT1OdDtsZXQgJG49V3QsaHI9Z247cmV0dXJuIFd0Pj0wJiYoJG49''@;'; put 'put ''dGhpcy5yb3dJbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KFd0KSksZ24+PTAmJihocj10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZ24pKSxmLl9jcmVhdGVDZWxsQ29vcmRzKCRuLGhyKX0sdGhpcy5jb2xUb1Byb3A9''@;'; put 'put ''ZnVuY3Rpb24odnQpe3JldHVybiBNLmNvbFRvUHJvcCh2dCl9LHRoaXMucHJvcFRvQ29sPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gTS5wcm9wVG9Db2wodnQpfSx0aGlzLnRvVmlzdWFsUm93PXZ0PT50aGlzLnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KHZ0KSx0aGlz''@;'; put 'put ''LnRvVmlzdWFsQ29sdW1uPXZ0PT50aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21QaHlzaWNhbEluZGV4KHZ0KSx0aGlzLnRvUGh5c2ljYWxSb3c9dnQ9PnRoaXMucm93SW5kZXhNYXBwZXIuZ2V0UGh5c2ljYWxGcm9tVmlzdWFsSW5kZXgodnQpLHRoaXMudG9QaHlzaWNhbENv''@;'; put 'put ''bHVtbj12dD0+dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXRQaHlzaWNhbEZyb21WaXN1YWxJbmRleCh2dCksdGhpcy5nZXREYXRhQXRDZWxsPWZ1bmN0aW9uKHZ0LE50KXtyZXR1cm4gTS5nZXQodnQsTS5jb2xUb1Byb3AoTnQpKX0sdGhpcy5nZXREYXRhQXRSb3dQcm9wPWZ1bmN0aW9uKHZ0''@;'; put 'put ''LE50KXtyZXR1cm4gTS5nZXQodnQsTnQpfSx0aGlzLmdldERhdGFBdENvbD1mdW5jdGlvbih2dCl7Y29uc3QgTnQ9W10sV3Q9TS5nZXRSYW5nZShmLl9jcmVhdGVDZWxsQ29vcmRzKDAsdnQpLGYuX2NyZWF0ZUNlbGxDb29yZHMobHQuZGF0YS5sZW5ndGgtMSx2dCksTS5ERVNUSU5BVElPTl9S''@;'; put 'put ''RU5ERVJFUik7Zm9yKGxldCBnbj0wO2duPFd0Lmxlbmd0aDtnbis9MSlmb3IobGV0ICRuPTA7JG48V3RbZ25dLmxlbmd0aDskbis9MSlOdC5wdXNoKFd0W2duXVskbl0pO3JldHVybiBOdH0sdGhpcy5nZXREYXRhQXRQcm9wPWZ1bmN0aW9uKHZ0KXtjb25zdCBOdD1bXSxXdD1NLmdldFJhbmdl''@;'; put 'put ''KGYuX2NyZWF0ZUNlbGxDb29yZHMoMCxNLnByb3BUb0NvbCh2dCkpLGYuX2NyZWF0ZUNlbGxDb29yZHMobHQuZGF0YS5sZW5ndGgtMSxNLnByb3BUb0NvbCh2dCkpLE0uREVTVElOQVRJT05fUkVOREVSRVIpO2ZvcihsZXQgZ249MDtnbjxXdC5sZW5ndGg7Z24rPTEpZm9yKGxldCAkbj0wOyRu''@;'; put 'put ''PFd0W2duXS5sZW5ndGg7JG4rPTEpTnQucHVzaChXdFtnbl1bJG5dKTtyZXR1cm4gTnR9LHRoaXMuZ2V0U291cmNlRGF0YT1mdW5jdGlvbih2dCxOdCxXdCxnbil7bGV0ICRuO3JldHVybiAkbj12b2lkIDA9PT12dD9ELmdldERhdGEoKTpELmdldEJ5UmFuZ2UoZi5fY3JlYXRlQ2VsbENvb3Jk''@;'; put 'put ''cyh2dCxOdCksZi5fY3JlYXRlQ2VsbENvb3JkcyhXdCxnbikpLCRufSx0aGlzLmdldFNvdXJjZURhdGFBcnJheT1mdW5jdGlvbih2dCxOdCxXdCxnbil7bGV0ICRuO3JldHVybiAkbj12b2lkIDA9PT12dD9ELmdldERhdGEoITApOkQuZ2V0QnlSYW5nZShmLl9jcmVhdGVDZWxsQ29vcmRzKHZ0''@;'; put 'put ''LE50KSxmLl9jcmVhdGVDZWxsQ29vcmRzKFd0LGduKSwhMCksJG59LHRoaXMuZ2V0U291cmNlRGF0YUF0Q29sPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gRC5nZXRBdENvbHVtbih2dCl9LHRoaXMuc2V0U291cmNlRGF0YUF0Q2VsbD1mdW5jdGlvbih2dCxOdCxXdCxnbil7Y29uc3QgJG49WG4odnQs''@;'; put 'put ''TnQsV3QpLGhyPXRoaXMuaGFzSG9vaygiYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsIiksVXI9W107aHImJlluKCRuLE5pPT57bGV0W3JuLHVuLGtuXT1OaTtVci5wdXNoKFtybix1bixELmdldEF0Q2VsbChybix1biksa25dKX0pLFluKCRuLE5pPT57bGV0W3JuLHVuLGtuXT1OaTtELnNldEF0''@;'; put 'put ''Q2VsbChybix1bixrbil9KSxociYmdGhpcy5ydW5Ib29rcygiYWZ0ZXJTZXRTb3VyY2VEYXRhQXRDZWxsIixVcixnbiksdGhpcy5yZW5kZXIoKTtjb25zdCBZcj1mLmdldEFjdGl2ZUVkaXRvcigpO1lyJiZGbyhZci5yZWZyZXNoVmFsdWUpJiZZci5yZWZyZXNoVmFsdWUoKX0sdGhpcy5nZXRT''@;'; put 'put ''b3VyY2VEYXRhQXRSb3c9ZnVuY3Rpb24odnQpe3JldHVybiBELmdldEF0Um93KHZ0KX0sdGhpcy5nZXRTb3VyY2VEYXRhQXRDZWxsPWZ1bmN0aW9uKHZ0LE50KXtyZXR1cm4gRC5nZXRBdENlbGwodnQsTnQpfSx0aGlzLmdldERhdGFBdFJvdz1mdW5jdGlvbih2dCl7cmV0dXJuIE0uZ2V0UmFu''@;'; put 'put ''Z2UoZi5fY3JlYXRlQ2VsbENvb3Jkcyh2dCwwKSxmLl9jcmVhdGVDZWxsQ29vcmRzKHZ0LHRoaXMuY291bnRDb2xzKCktMSksTS5ERVNUSU5BVElPTl9SRU5ERVJFUilbMF18fFtdfSx0aGlzLmdldERhdGFUeXBlPWZ1bmN0aW9uKHZ0LE50LFd0LGduKXtjb25zdCAkbj12b2lkIDA9PT12dD9b''@;'; put 'put ''MCwwLHRoaXMuY291bnRSb3dzKCksdGhpcy5jb3VudENvbHMoKV06W3Z0LE50LFd0LGduXSxbaHIsVXJdPSRuO2xldFssLFlyLE5pXT0kbixybj1udWxsLHVuPW51bGw7dm9pZCAwPT09WXImJihZcj1ociksdm9pZCAwPT09TmkmJihOaT1Vcik7bGV0IGtuPSJtaXhlZCI7cmV0dXJuICRvKE1h''@;'; put 'put ''dGgubWF4KE1hdGgubWluKGhyLFlyKSwwKSxNYXRoLm1heChocixZciksd3I9PntsZXQgbnI9ITA7cmV0dXJuICRvKE1hdGgubWF4KE1hdGgubWluKFVyLE5pKSwwKSxNYXRoLm1heChVcixOaSksU3I9Pih1bj10aGlzLmdldENlbGxNZXRhKHdyLFNyKS50eXBlLHJuP25yPXJuPT09dW46cm49''@;'; put 'put ''dW4sbnIpKSxrbj1ucj91bjoibWl4ZWQiLG5yfSksa259LHRoaXMucmVtb3ZlQ2VsbE1ldGE9ZnVuY3Rpb24odnQsTnQsV3Qpe2NvbnN0W2duLCRuXT1bdGhpcy50b1BoeXNpY2FsUm93KHZ0KSx0aGlzLnRvUGh5c2ljYWxDb2x1bW4oTnQpXTtsZXQgaHI9bnQuZ2V0Q2VsbE1ldGFLZXlWYWx1''@;'; put 'put ''ZShnbiwkbixXdCk7ITEhPT1mLnJ1bkhvb2tzKCJiZWZvcmVSZW1vdmVDZWxsTWV0YSIsdnQsTnQsV3QsaHIpJiYobnQucmVtb3ZlQ2VsbE1ldGEoZ24sJG4sV3QpLGYucnVuSG9va3MoImFmdGVyUmVtb3ZlQ2VsbE1ldGEiLHZ0LE50LFd0LGhyKSksaHI9bnVsbH0sdGhpcy5zcGxpY2VDZWxs''@;'; put 'put ''c01ldGE9ZnVuY3Rpb24odnQpe2xldCBOdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MDtmb3IodmFyIFd0PWFyZ3VtZW50cy5sZW5ndGgsZ249bmV3IEFycmF5KFd0PjI/V3QtMjowKSwkbj0yOyRuPFd0OyRuKyspZ25bJG4tMl09YXJn''@;'; put 'put ''dW1lbnRzWyRuXTtpZihnbi5sZW5ndGg+MCYmIUFycmF5LmlzQXJyYXkoZ25bMF0pKXRocm93IG5ldyBFcnJvcigiVGhlIDNyZCBhcmd1bWVudCAoY2VsbE1ldGFSb3dzKSBoYXMgdG8gYmUgcGFzc2VkIGFzIGFuIGFycmF5IG9mIGNlbGwgbWV0YSBvYmplY3RzIGFycmF5LiIpO050PjAmJm50''@;'; put 'put ''LnJlbW92ZVJvdyh0aGlzLnRvUGh5c2ljYWxSb3codnQpLE50KSxnbi5sZW5ndGg+MCYmWW4oZ24ucmV2ZXJzZSgpLGhyPT57bnQuY3JlYXRlUm93KHRoaXMudG9QaHlzaWNhbFJvdyh2dCkpLFluKGhyLChVcixZcik9PnRoaXMuc2V0Q2VsbE1ldGFPYmplY3QodnQsWXIsVXIpKX0pLGYucmVu''@;'; put 'put ''ZGVyKCl9LHRoaXMuc2V0Q2VsbE1ldGFPYmplY3Q9ZnVuY3Rpb24odnQsTnQsV3QpeyJvYmplY3QiPT10eXBlb2YgV3QmJnFhKFd0LChnbiwkbik9Pnt0aGlzLnNldENlbGxNZXRhKHZ0LE50LCRuLGduKX0pfSx0aGlzLnNldENlbGxNZXRhPWZ1bmN0aW9uKHZ0LE50LFd0LGduKXtpZighMT09''@;'; put 'put ''PWYucnVuSG9va3MoImJlZm9yZVNldENlbGxNZXRhIix2dCxOdCxXdCxnbikpcmV0dXJuO2xldCBocj12dCxVcj1OdDt2dDx0aGlzLmNvdW50Um93cygpJiYoaHI9dGhpcy50b1BoeXNpY2FsUm93KHZ0KSksTnQ8dGhpcy5jb3VudENvbHMoKSYmKFVyPXRoaXMudG9QaHlzaWNhbENvbHVtbihO''@;'; put 'put ''dCkpLG50LnNldENlbGxNZXRhKGhyLFVyLFd0LGduKSxmLnJ1bkhvb2tzKCJhZnRlclNldENlbGxNZXRhIix2dCxOdCxXdCxnbil9LHRoaXMuZ2V0Q2VsbHNNZXRhPWZ1bmN0aW9uKCl7cmV0dXJuIG50LmdldENlbGxzTWV0YSgpfSx0aGlzLmdldENlbGxNZXRhPWZ1bmN0aW9uKHZ0LE50KXts''@;'; put 'put ''ZXQgV3Q9dGhpcy50b1BoeXNpY2FsUm93KHZ0KSxnbj10aGlzLnRvUGh5c2ljYWxDb2x1bW4oTnQpO3JldHVybiBudWxsPT09V3QmJihXdD12dCksbnVsbD09PWduJiYoZ249TnQpLG50LmdldENlbGxNZXRhKFd0LGduLHt2aXN1YWxSb3c6dnQsdmlzdWFsQ29sdW1uOk50fSl9LHRoaXMuZ2V0''@;'; put 'put ''Q29sdW1uTWV0YT1mdW5jdGlvbih2dCl7cmV0dXJuIG50LmdldENvbHVtbk1ldGEodGhpcy50b1BoeXNpY2FsQ29sdW1uKHZ0KSl9LHRoaXMuZ2V0Q2VsbE1ldGFBdFJvdz1mdW5jdGlvbih2dCl7cmV0dXJuIG50LmdldENlbGxzTWV0YUF0Um93KHZ0KX0sdGhpcy5pc0NvbHVtbk1vZGlmaWNh''@;'; put 'put ''dGlvbkFsbG93ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hKCJvYmplY3QiPT09Zi5kYXRhVHlwZXx8bHQuY29sdW1ucyl9LHRoaXMuZ2V0Q2VsbFJlbmRlcmVyPWZ1bmN0aW9uKHZ0LE50KXtjb25zdCBXdD0ibnVtYmVyIj09dHlwZW9mIHZ0P2YuZ2V0Q2VsbE1ldGEodnQsTnQpLnJlbmRlcmVyOnZ0''@;'; put 'put ''LnJlbmRlcmVyO3JldHVybiJzdHJpbmciPT10eXBlb2YgV3Q/R08oV3QpOm1jKFd0KT9HTygidGV4dCIpOld0fSx0aGlzLmdldENlbGxFZGl0b3I9ZnVuY3Rpb24odnQsTnQpe2NvbnN0IFd0PSJudW1iZXIiPT10eXBlb2YgdnQ/Zi5nZXRDZWxsTWV0YSh2dCxOdCkuZWRpdG9yOnZ0LmVkaXRv''@;'; put 'put ''cjtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIFd0P0JPKFd0KTptYyhXdCk/Qk8oInRleHQiKTpXdH0sdGhpcy5nZXRDZWxsVmFsaWRhdG9yPWZ1bmN0aW9uKHZ0LE50KXtjb25zdCBXdD0ibnVtYmVyIj09dHlwZW9mIHZ0P2YuZ2V0Q2VsbE1ldGEodnQsTnQpLnZhbGlkYXRvcjp2dC52YWxpZGF0''@;'; put 'put ''b3I7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBXdD9XJChXdCk6V3R9LHRoaXMudmFsaWRhdGVDZWxscz1mdW5jdGlvbih2dCl7dGhpcy5fdmFsaWRhdGVDZWxscyh2dCl9LHRoaXMudmFsaWRhdGVSb3dzPWZ1bmN0aW9uKHZ0LE50KXtpZighQXJyYXkuaXNBcnJheSh2dCkpdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJ2YWxpZGF0ZVJvd3MgcGFyYW1ldGVyIGByb3dzYCBtdXN0IGJlIGFuIGFycmF5Iik7dGhpcy5fdmFsaWRhdGVDZWxscyhOdCx2dCl9LHRoaXMudmFsaWRhdGVDb2x1bW5zPWZ1bmN0aW9uKHZ0LE50KXtpZighQXJyYXkuaXNBcnJheSh2dCkpdGhyb3cgbmV3IEVycm9yKCJ2YWxpZGF0''@;'; put 'put ''ZUNvbHVtbnMgcGFyYW1ldGVyIGBjb2x1bW5zYCBtdXN0IGJlIGFuIGFycmF5Iik7dGhpcy5fdmFsaWRhdGVDZWxscyhOdCx2b2lkIDAsdnQpfSx0aGlzLl92YWxpZGF0ZUNlbGxzPWZ1bmN0aW9uKHZ0LE50LFd0KXtjb25zdCBnbj1uZXcgaWk7dnQmJihnbi5vblF1ZXVlRW1wdHk9dnQpO2xl''@;'; put 'put ''dCAkbj1mLmNvdW50Um93cygpLTE7Zm9yKDskbj49MDspe2lmKHZvaWQgMCE9PU50JiYtMT09PU50LmluZGV4T2YoJG4pKXskbi09MTtjb250aW51ZX1sZXQgaHI9Zi5jb3VudENvbHMoKS0xO2Zvcig7aHI+PTA7KXZvaWQgMD09PVd0fHwtMSE9PVd0LmluZGV4T2YoaHIpPyhnbi5hZGRWYWxp''@;'; put 'put ''ZGF0b3JUb1F1ZXVlKCksZi52YWxpZGF0ZUNlbGwoZi5nZXREYXRhQXRDZWxsKCRuLGhyKSxmLmdldENlbGxNZXRhKCRuLGhyKSxVcj0+e2lmKCJib29sZWFuIiE9dHlwZW9mIFVyKXRocm93IG5ldyBFcnJvcigiVmFsaWRhdGlvbiBlcnJvcjogcmVzdWx0IGlzIG5vdCBib29sZWFuIik7ITE9''@;'; put 'put ''PT1VciYmKGduLnZhbGlkPSExKSxnbi5yZW1vdmVWYWxpZGF0b3JGb3JtUXVldWUoKX0sInZhbGlkYXRlQ2VsbHMiKSxoci09MSk6aHItPTE7JG4tPTF9Z24uY2hlY2tJZlF1ZXVlSXNFbXB0eSgpfSx0aGlzLmdldFJvd0hlYWRlcj1mdW5jdGlvbih2dCl7bGV0IE50PWx0LnJvd0hlYWRlcnMs''@;'; put 'put ''V3Q9dnQ7cmV0dXJuIHZvaWQgMCE9PVd0JiYoV3Q9Zi5ydW5Ib29rcygibW9kaWZ5Um93SGVhZGVyIixXdCkpLHZvaWQgMD09PVd0PyhOdD1bXSwkbyhmLmNvdW50Um93cygpLTEsZ249PntOdC5wdXNoKGYuZ2V0Um93SGVhZGVyKGduKSl9KSk6QXJyYXkuaXNBcnJheShOdCkmJnZvaWQgMCE9''@;'; put 'put ''PU50W1d0XT9OdD1OdFtXdF06ZWMoTnQpP050PU50KFd0KTpOdCYmInN0cmluZyIhPXR5cGVvZiBOdCYmIm51bWJlciIhPXR5cGVvZiBOdCYmKE50PVd0KzEpLE50fSx0aGlzLmhhc1Jvd0hlYWRlcnM9ZnVuY3Rpb24oKXtyZXR1cm4hIWx0LnJvd0hlYWRlcnN9LHRoaXMuaGFzQ29sSGVhZGVy''@;'; put 'put ''cz1mdW5jdGlvbigpe2lmKG51bGwhPWx0LmNvbEhlYWRlcnMpcmV0dXJuISFsdC5jb2xIZWFkZXJzO2ZvcihsZXQgdnQ9MCxOdD1mLmNvdW50Q29scygpO3Z0PE50O3Z0KyspaWYoZi5nZXRDb2xIZWFkZXIodnQpKXJldHVybiEwO3JldHVybiExfSx0aGlzLmdldENvbEhlYWRlcj1mdW5jdGlv''@;'; put 'put ''bih2dCl7bGV0IE50PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTotMTtjb25zdCBXdD1mLnJ1bkhvb2tzKCJtb2RpZnlDb2xIZWFkZXIiLHZ0KTtpZih2b2lkIDA9PT1XdCl7Y29uc3QgWXI9W10sTmk9Zi5jb3VudENvbHMoKTtmb3IobGV0''@;'; put 'put ''IHJuPTA7cm48Tmk7cm4rKylZci5wdXNoKGYuZ2V0Q29sSGVhZGVyKHJuKSk7cmV0dXJuIFlyfWxldCBnbj1sdC5jb2xIZWFkZXJzO2NvbnN0IGhyPWYudG9QaHlzaWNhbENvbHVtbihXdCksVXI9ZnVuY3Rpb24oWXIpe2NvbnN0IE5pPVtdLHJuPWYuY291bnRDb2xzKCk7bGV0IHVuPTA7Zm9y''@;'; put 'put ''KDt1bjxybjt1bisrKWVjKGx0LmNvbHVtbnMpJiZsdC5jb2x1bW5zKHVuKSYmTmkucHVzaCh1bik7cmV0dXJuIE5pW1lyXX0oaHIpO3JldHVybiExPT09bHQuY29sSGVhZGVycz9nbj1udWxsOmx0LmNvbHVtbnMmJmVjKGx0LmNvbHVtbnMpJiZsdC5jb2x1bW5zKFVyKSYmbHQuY29sdW1ucyhV''@;'; put 'put ''cikudGl0bGU/Z249bHQuY29sdW1ucyhVcikudGl0bGU6bHQuY29sdW1ucyYmbHQuY29sdW1uc1tocl0mJmx0LmNvbHVtbnNbaHJdLnRpdGxlP2duPWx0LmNvbHVtbnNbaHJdLnRpdGxlOkFycmF5LmlzQXJyYXkobHQuY29sSGVhZGVycykmJnZvaWQgMCE9PWx0LmNvbEhlYWRlcnNbaHJdP2du''@;'; put 'put ''PWx0LmNvbEhlYWRlcnNbaHJdOmVjKGx0LmNvbEhlYWRlcnMpP2duPWx0LmNvbEhlYWRlcnMoaHIpOmx0LmNvbEhlYWRlcnMmJiJzdHJpbmciIT10eXBlb2YgbHQuY29sSGVhZGVycyYmIm51bWJlciIhPXR5cGVvZiBsdC5jb2xIZWFkZXJzJiYoZ249YVAoV3QpKSxnbj1mLnJ1bkhvb2tzKCJt''@;'; put 'put ''b2RpZnlDb2x1bW5IZWFkZXJWYWx1ZSIsZ24sdnQsTnQpLGdufSx0aGlzLl9nZXRDb2xXaWR0aEZyb21TZXR0aW5ncz1mdW5jdGlvbih2dCl7bGV0IE50O2lmKHZ0Pj0wJiYoTnQ9Zi5nZXRDZWxsTWV0YSgwLHZ0KS53aWR0aCksKHZvaWQgMD09PU50fHxOdD09PWx0LndpZHRoKSYmKE50PWx0''@;'; put 'put ''LmNvbFdpZHRocyksbnVsbCE9TnQpe3N3aXRjaCh0eXBlb2YgTnQpe2Nhc2Uib2JqZWN0IjpOdD1OdFt2dF07YnJlYWs7Y2FzZSJmdW5jdGlvbiI6TnQ9TnQodnQpfSJzdHJpbmciPT10eXBlb2YgTnQmJihOdD1wYXJzZUludChOdCwxMCkpfXJldHVybiBOdH0sdGhpcy5nZXRDb2xXaWR0aD1m''@;'; put 'put ''dW5jdGlvbih2dCxOdCl7bGV0IFd0PWYuX2dldENvbFdpZHRoRnJvbVNldHRpbmdzKHZ0KTtyZXR1cm4gV3Q9Zi5ydW5Ib29rcygibW9kaWZ5Q29sV2lkdGgiLFd0LHZ0LE50KSx2b2lkIDA9PT1XdCYmKFd0PW1fKSxXdH0sdGhpcy5fZ2V0Um93SGVpZ2h0RnJvbVNldHRpbmdzPWZ1bmN0aW9u''@;'; put 'put ''KHZ0KXtjb25zdCBOdD10aGlzLnZpZXcuZ2V0RGVmYXVsdFJvd0hlaWdodCgpO2xldCBXdD1sdC5yb3dIZWlnaHRzO2lmKG51bGwhPVd0KXtzd2l0Y2godHlwZW9mIFd0KXtjYXNlIm9iamVjdCI6V3Q9V3RbdnRdO2JyZWFrO2Nhc2UiZnVuY3Rpb24iOld0PVd0KHZ0KX0ic3RyaW5nIj09dHlw''@;'; put 'put ''ZW9mIFd0JiYoV3Q9cGFyc2VJbnQoV3QsMTApKX1yZXR1cm4gbnVsbCE9V3QmJld0PE50P050Old0fSx0aGlzLmdldFJvd0hlaWdodD1mdW5jdGlvbih2dCxOdCl7bGV0IFd0PWYuX2dldFJvd0hlaWdodEZyb21TZXR0aW5ncyh2dCk7cmV0dXJuIFd0PWYucnVuSG9va3MoIm1vZGlmeVJvd0hl''@;'; put 'put ''aWdodCIsV3QsdnQsTnQpLFd0fSx0aGlzLmNvdW50U291cmNlUm93cz1mdW5jdGlvbigpe3JldHVybiBELmNvdW50Um93cygpfSx0aGlzLmNvdW50U291cmNlQ29scz1mdW5jdGlvbigpe3JldHVybiBELmNvdW50Rmlyc3RSb3dLZXlzKCl9LHRoaXMuY291bnRSb3dzPWZ1bmN0aW9uKCl7cmV0''@;'; put 'put ''dXJuIE0uZ2V0TGVuZ3RoKCl9LHRoaXMuY291bnRDb2xzPWZ1bmN0aW9uKCl7Y29uc3QgdnQ9bHQubWF4Q29scyxOdD10aGlzLmNvbHVtbkluZGV4TWFwcGVyLmdldE5vdFRyaW1tZWRJbmRleGVzTGVuZ3RoKCk7cmV0dXJuIE1hdGgubWluKHZ0LE50KX0sdGhpcy5jb3VudFJlbmRlcmVkUm93''@;'; put 'put ''cz1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuX3d0LmRyYXduP2Yudmlldy5fd3Qud3RUYWJsZS5nZXRSZW5kZXJlZFJvd3NDb3VudCgpOi0xfSx0aGlzLmNvdW50VmlzaWJsZVJvd3M9ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3Ll93dC5kcmF3bj9mLnZpZXcuX3d0Lnd0VGFibGUuZ2V0Vmlz''@;'; put 'put ''aWJsZVJvd3NDb3VudCgpOi0xfSx0aGlzLmNvdW50UmVuZGVyZWRDb2xzPWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5fd3QuZHJhd24/Zi52aWV3Ll93dC53dFRhYmxlLmdldFJlbmRlcmVkQ29sdW1uc0NvdW50KCk6LTF9LHRoaXMuY291bnRWaXNpYmxlQ29scz1mdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBmLnZpZXcuX3d0LmRyYXduP2Yudmlldy5fd3Qud3RUYWJsZS5nZXRWaXNpYmxlQ29sdW1uc0NvdW50KCk6LTF9LHRoaXMuY291bnRSb3dIZWFkZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlldy5nZXRSb3dIZWFkZXJzQ291bnQoKX0sdGhpcy5jb3VudENvbEhlYWRlcnM9ZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gdGhpcy52aWV3LmdldENvbHVtbkhlYWRlcnNDb3VudCgpfSx0aGlzLmNvdW50RW1wdHlSb3dzPWZ1bmN0aW9uKCl7bGV0IHZ0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sTnQ9MDtyZXR1cm4gViQoZi5jb3VudFJv''@;'; put 'put ''d3MoKS0xLFd0PT57aWYoZi5pc0VtcHR5Um93KFd0KSlOdCs9MTtlbHNlIGlmKCEwPT09dnQpcmV0dXJuITF9KSxOdH0sdGhpcy5jb3VudEVtcHR5Q29scz1mdW5jdGlvbigpe2xldCB2dD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLE50''@;'; put 'put ''PTA7cmV0dXJuIFYkKGYuY291bnRDb2xzKCktMSxXdD0+e2lmKGYuaXNFbXB0eUNvbChXdCkpTnQrPTE7ZWxzZSBpZighMD09PXZ0KXJldHVybiExfSksTnR9LHRoaXMuaXNFbXB0eVJvdz1mdW5jdGlvbih2dCl7cmV0dXJuIGx0LmlzRW1wdHlSb3cuY2FsbChmLHZ0KX0sdGhpcy5pc0VtcHR5''@;'; put 'put ''Q29sPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gbHQuaXNFbXB0eUNvbC5jYWxsKGYsdnQpfSx0aGlzLnNlbGVjdENlbGw9ZnVuY3Rpb24odnQsTnQsV3QsZ24pe2xldCAkbj0hKGFyZ3VtZW50cy5sZW5ndGg+NCYmdm9pZCAwIT09YXJndW1lbnRzWzRdKXx8YXJndW1lbnRzWzRdLGhyPSEoYXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aD41JiZ2b2lkIDAhPT1hcmd1bWVudHNbNV0pfHxhcmd1bWVudHNbNV07cmV0dXJuIW1jKHZ0KSYmIW1jKE50KSYmdGhpcy5zZWxlY3RDZWxscyhbW3Z0LE50LFd0LGduXV0sJG4saHIpfSx0aGlzLnNlbGVjdENlbGxzPWZ1bmN0aW9uKCl7bGV0IHZ0PWFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbW11dLFd0PSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07ITE9PT0oIShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3Vt''@;'; put 'put ''ZW50c1sxXSkmJmJlLnN1c3BlbmQoKTtjb25zdCBnbj1Rbi5zZWxlY3RDZWxscyh2dCk7cmV0dXJuIGduJiZXdCYmZi5saXN0ZW4oKSxiZS5yZXN1bWUoKSxnbn0sdGhpcy5zZWxlY3RDb2x1bW5zPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gUW4uc2VsZWN0Q29sdW1ucyh2dCxhcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dnQsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSx0aGlzLnNlbGVjdFJvd3M9ZnVuY3Rpb24odnQpe3JldHVybiBRbi5zZWxlY3RSb3dzKHZ0LGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAw''@;'; put 'put ''IT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp2dCxhcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCl9LHRoaXMuZGVzZWxlY3RDZWxsPWZ1bmN0aW9uKCl7UW4uZGVzZWxlY3QoKX0sdGhpcy5zZWxlY3RBbGw9ZnVuY3Rpb24oKXtsZXQgdnQ9IShhcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXSxOdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dnQsV3Q9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7YmUuc2tpcE5leHRTY3JvbGxD''@;'; put 'put ''eWNsZSgpLFFuLnNlbGVjdEFsbCh2dCxOdCxXdCl9O2NvbnN0ICRyPSh2dCxOdCk9PnZ0LmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChOdCwxLCEwKTt0aGlzLnNjcm9sbFZpZXdwb3J0VG89ZnVuY3Rpb24odnQpe3ZhciBOdDsibnVtYmVyIj09dHlwZW9mIHZ0JiYodnQ9e3Jvdzphcmd1bWVu''@;'; put 'put ''dHNbMF0sY29sOmFyZ3VtZW50c1sxXSx2ZXJ0aWNhbFNuYXA6YXJndW1lbnRzWzJdPyJib3R0b20iOiJ0b3AiLGhvcml6b250YWxTbmFwOmFyZ3VtZW50c1szXT8iZW5kIjoic3RhcnQiLGNvbnNpZGVySGlkZGVuSW5kZXhlczpudWxsPT09KE50PWFyZ3VtZW50c1s0XSl8fHZvaWQgMD09PU50''@;'; put 'put ''fHxOdH0pO2NvbnN0e3JvdzpXdCxjb2w6Z24sY29uc2lkZXJIaWRkZW5JbmRleGVzOiRufT12dD8/e307bGV0IGhyPVd0LFVyPWduO2lmKHZvaWQgMD09PSRufHwkbil7Y29uc3Qgcm49TnVtYmVyLmlzSW50ZWdlcihXdCkmJld0Pj0wLHVuPU51bWJlci5pc0ludGVnZXIoZ24pJiZnbj49MCxr''@;'; put 'put ''bj1ybj8kcih0aGlzLnJvd0luZGV4TWFwcGVyLFd0KTp2b2lkIDAsd3I9dW4/JHIodGhpcy5jb2x1bW5JbmRleE1hcHBlcixnbik6dm9pZCAwO2lmKG51bGw9PT1rbnx8bnVsbD09PXdyKXJldHVybiExO2hyPXJuP2Yucm93SW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRl''@;'; put 'put ''eChrbik6V3QsVXI9dW4/Zi5jb2x1bW5JbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KHdyKTpnbn1jb25zdCBZcj1OdW1iZXIuaXNJbnRlZ2VyKGhyKSxOaT1OdW1iZXIuaXNJbnRlZ2VyKFVyKTtyZXR1cm4gWXImJmhyPj0wJiZOaSYmVXI+PTA/Zi52aWV3LnNjcm9s''@;'; put 'put ''bFZpZXdwb3J0KGYuX2NyZWF0ZUNlbGxDb29yZHMoaHIsVXIpLHZ0Lmhvcml6b250YWxTbmFwLHZ0LnZlcnRpY2FsU25hcCk6WXImJmhyPj0wJiYoTmkmJlVyPDB8fCFOaSk/Zi52aWV3LnNjcm9sbFZpZXdwb3J0VmVydGljYWxseShocix2dC52ZXJ0aWNhbFNuYXApOiEhKE5pJiZVcj49MCYm''@;'; put 'put ''KFlyJiZocjwwfHwhWXIpKSYmZi52aWV3LnNjcm9sbFZpZXdwb3J0SG9yaXpvbnRhbGx5KFVyLHZ0Lmhvcml6b250YWxTbmFwKX0sdGhpcy5zY3JvbGxUb0ZvY3VzZWRDZWxsPWZ1bmN0aW9uKCl7bGV0IHZ0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3Vt''@;'; put 'put ''ZW50c1swXTooKT0+e307aWYoIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWQoKSlyZXR1cm47dGhpcy5hZGRIb29rT25jZSgiYWZ0ZXJTY3JvbGwiLHZ0KTtjb25zdHtoaWdobGlnaHQ6TnR9PXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTt0aGlzLnNjcm9sbFZpZXdwb3J0VG8oTnQudG9P''@;'; put 'put ''YmplY3QoKSk/dGhpcy52aWV3LnJlbmRlcigpOih0aGlzLnJlbW92ZUhvb2soImFmdGVyU2Nyb2xsIix2dCksdGhpcy5fcmVnaXN0ZXJJbW1lZGlhdGUoKCk9PnZ0KCkpKX0sdGhpcy5kZXN0cm95PWZ1bmN0aW9uKCl7aWYoZi5fY2xlYXJUaW1lb3V0cygpLGYuX2NsZWFySW1tZWRpYXRlcygp''@;'; put 'put ''LGYudmlldyYmZi52aWV3LmRlc3Ryb3koKSxEJiZELmRlc3Ryb3koKSxEPW51bGwsdGhpcy5nZXRTaG9ydGN1dE1hbmFnZXIoKS5kZXN0cm95KCksbnQuY2xlYXJDYWNoZSgpLGJYLmRlbGV0ZSh0aGlzLmd1aWQpLHJQKGYpKXtjb25zdCB2dD10aGlzLnJvb3REb2N1bWVudC5xdWVyeVNlbGVj''@;'; put 'put ''dG9yKCIuaG90LWRpc3BsYXktbGljZW5zZS1pbmZvIik7dnQmJnZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodnQpfXdwKGYucm9vdEVsZW1lbnQpLHYuZGVzdHJveSgpLG5lJiZuZS5kZXN0cm95KCksZi5iYXRjaEV4ZWN1dGlvbigoKT0+e2Yucm93SW5kZXhNYXBwZXIudW5yZWdpc3RlckFs''@;'; put 'put ''bCgpLGYuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3RlckFsbCgpLEp0LmdldEl0ZW1zKCkuZm9yRWFjaCh2dD0+e2xldFssTnRdPXZ0O050LmRlc3Ryb3koKX0pLEp0LmNsZWFyKCksZi5ydW5Ib29rcygiYWZ0ZXJEZXN0cm95Iil9LCEwKSxBby5nZXRTaW5nbGV0b24oKS5kZXN0cm95KGYp''@;'; put 'put ''LHFhKGYsKHZ0LE50LFd0KT0+e2VjKHZ0KT9XdFtOdF09ZnVuY3Rpb24gd2kodnQpe3JldHVybigpPT57dGhyb3cgbmV3IEVycm9yKGBUaGUgIiR7dnR9IiBtZXRob2QgY2Fubm90IGJlIGNhbGxlZCBiZWNhdXNlIHRoaXMgSGFuZHNvbnRhYmxlIGluc3RhbmNlIGhhcyBiZWVuIGRlc3Ryb3ll''@;'; put 'put ''ZGApfX0oTnQpOiJndWlkIiE9PU50JiYoV3RbTnRdPW51bGwpfSksZi5pc0Rlc3Ryb3llZD0hMCxNJiZNLmRlc3Ryb3koKSxNPW51bGwsWj1udWxsLFFuPW51bGwsbmU9bnVsbCxmPW51bGx9LHRoaXMuZ2V0QWN0aXZlRWRpdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIG5lLmdldEFjdGl2ZUVkaXRv''@;'; put 'put ''cigpfSx0aGlzLmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlUm93PWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZVJvdygpfSx0aGlzLmdldExhc3RSZW5kZXJlZFZpc2libGVSb3c9ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3LmdldExhc3RSZW5kZXJlZFZp''@;'; put 'put ''c2libGVSb3coKX0sdGhpcy5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbj1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVDb2x1bW4oKX0sdGhpcy5nZXRMYXN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uPWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5n''@;'; put 'put ''ZXRMYXN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCl9LHRoaXMuZ2V0Rmlyc3RGdWxseVZpc2libGVSb3c9ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3LmdldEZpcnN0RnVsbHlWaXNpYmxlUm93KCl9LHRoaXMuZ2V0TGFzdEZ1bGx5VmlzaWJsZVJvdz1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcu''@;'; put 'put ''Z2V0TGFzdEZ1bGx5VmlzaWJsZVJvdygpfSx0aGlzLmdldEZpcnN0RnVsbHlWaXNpYmxlQ29sdW1uPWZ1bmN0aW9uKCl7cmV0dXJuIGYudmlldy5nZXRGaXJzdEZ1bGx5VmlzaWJsZUNvbHVtbigpfSx0aGlzLmdldExhc3RGdWxseVZpc2libGVDb2x1bW49ZnVuY3Rpb24oKXtyZXR1cm4gZi52''@;'; put 'put ''aWV3LmdldExhc3RGdWxseVZpc2libGVDb2x1bW4oKX0sdGhpcy5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVSb3c9ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3LmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZVJvdygpfSx0aGlzLmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlUm93PWZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIGYudmlldy5nZXRMYXN0UGFydGlhbGx5VmlzaWJsZVJvdygpfSx0aGlzLmdldEZpcnN0UGFydGlhbGx5VmlzaWJsZUNvbHVtbj1mdW5jdGlvbigpe3JldHVybiBmLnZpZXcuZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl9LHRoaXMuZ2V0TGFzdFBhcnRpYWxseVZpc2li''@;'; put 'put ''bGVDb2x1bW49ZnVuY3Rpb24oKXtyZXR1cm4gZi52aWV3LmdldExhc3RQYXJ0aWFsbHlWaXNpYmxlQ29sdW1uKCl9LHRoaXMuZ2V0UGx1Z2luPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gSnQuZ2V0SXRlbShnMSh2dCkpfSx0aGlzLmdldFBsdWdpbk5hbWU9ZnVuY3Rpb24odnQpe3JldHVybiB2dD09''@;'; put 'put ''PXRoaXMudW5kb1JlZG8/dGhpcy51bmRvUmVkby5jb25zdHJ1Y3Rvci5QTFVHSU5fS0VZOkp0LmdldElkKHZ0KX0sdGhpcy5nZXRJbnN0YW5jZT1mdW5jdGlvbigpe3JldHVybiBmfSx0aGlzLmFkZEhvb2s9ZnVuY3Rpb24odnQsTnQsV3Qpe0FvLmdldFNpbmdsZXRvbigpLmFkZCh2dCxOdCxm''@;'; put 'put ''LFd0KX0sdGhpcy5oYXNIb29rPWZ1bmN0aW9uKHZ0KXtyZXR1cm4gQW8uZ2V0U2luZ2xldG9uKCkuaGFzKHZ0LGYpfHxBby5nZXRTaW5nbGV0b24oKS5oYXModnQpfSx0aGlzLmFkZEhvb2tPbmNlPWZ1bmN0aW9uKHZ0LE50LFd0KXtBby5nZXRTaW5nbGV0b24oKS5vbmNlKHZ0LE50LGYsV3Qp''@;'; put 'put ''fSx0aGlzLnJlbW92ZUhvb2s9ZnVuY3Rpb24odnQsTnQpe0FvLmdldFNpbmdsZXRvbigpLnJlbW92ZSh2dCxOdCxmKX0sdGhpcy5ydW5Ib29rcz1mdW5jdGlvbih2dCxOdCxXdCxnbiwkbixocixVcil7cmV0dXJuIEFvLmdldFNpbmdsZXRvbigpLnJ1bihmLHZ0LE50LFd0LGduLCRuLGhyLFVy''@;'; put 'put ''KX0sdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlPWZ1bmN0aW9uKHZ0LE50KXtyZXR1cm4gRTNlKGx0Lmxhbmd1YWdlLHZ0LE50KX0sdGhpcy50b0hUTUw9KCk9PkgkKHRoaXMpLHRoaXMudG9UYWJsZUVsZW1lbnQ9KCk9Pntjb25zdCB2dD10aGlzLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50''@;'; put 'put ''KCJkaXYiKTtyZXR1cm4gdnQuaW5zZXJ0QWRqYWNlbnRIVE1MKCJhZnRlcmJlZ2luIixIJCh0aGlzKSksdnQuZmlyc3RFbGVtZW50Q2hpbGR9LHRoaXMudGltZW91dHM9W10sdGhpcy51c2VUaGVtZT12dD0+e3RoaXMudmlldy5nZXRTdHlsZXNIYW5kbGVyKCkudXNlVGhlbWUodnQpLHRoaXMu''@;'; put 'put ''cnVuSG9va3MoImFmdGVyU2V0VGhlbWUiLHZ0LCEhRWUpfSx0aGlzLmdldEN1cnJlbnRUaGVtZU5hbWU9KCk9PnRoaXMudmlldy5nZXRTdHlsZXNIYW5kbGVyKCkuZ2V0VGhlbWVOYW1lKCksdGhpcy5fcmVnaXN0ZXJUaW1lb3V0PWZ1bmN0aW9uKHZ0KXtsZXQgV3Q9dnQ7ImZ1bmN0aW9uIj09''@;'; put 'put ''dHlwZW9mIFd0JiYoV3Q9c2V0VGltZW91dChXdCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MCkpLHRoaXMudGltZW91dHMucHVzaChXdCl9LHRoaXMuX2NsZWFyVGltZW91dHM9ZnVuY3Rpb24oKXtZbih0aGlzLnRpbWVvdXRzLHZ0PT57''@;'; put 'put ''Y2xlYXJUaW1lb3V0KHZ0KX0pfSx0aGlzLmltbWVkaWF0ZXM9W10sdGhpcy5fcmVnaXN0ZXJJbW1lZGlhdGU9ZnVuY3Rpb24odnQpe3RoaXMuaW1tZWRpYXRlcy5wdXNoKHNldEltbWVkaWF0ZSh2dCkpfSx0aGlzLl9jbGVhckltbWVkaWF0ZXM9ZnVuY3Rpb24oKXtZbih0aGlzLmltbWVkaWF0''@;'; put 'put ''ZXMsdnQ9PntjbGVhckltbWVkaWF0ZSh2dCl9KX0sdGhpcy5fZ2V0RWRpdG9yTWFuYWdlcj1mdW5jdGlvbigpe3JldHVybiBuZX07Y29uc3QgUWk9Um50KHtoYW5kbGVFdmVudDooKT0+Zi5pc0xpc3RlbmluZygpLGJlZm9yZUtleURvd246dnQ9PnRoaXMucnVuSG9va3MoImJlZm9yZUtleURv''@;'; put 'put ''d24iLHZ0KSxhZnRlcktleURvd246dnQ9Pnt0aGlzLmlzRGVzdHJveWVkfHxmLnJ1bkhvb2tzKCJhZnRlckRvY3VtZW50S2V5RG93biIsdnQpfSxvd25lcldpbmRvdzp0aGlzLnJvb3RXaW5kb3d9KTt0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsdnQ9PnshMT09PXZ0LmN0''@;'; put 'put ''cmxLZXkmJiExPT09dnQubWV0YUtleSYmUWkucmVsZWFzZVByZXNzZWRLZXlzKCl9KSx0aGlzLmdldFNob3J0Y3V0TWFuYWdlcj1mdW5jdGlvbigpe3JldHVybiBRaX0sdGhpcy5nZXRGb2N1c01hbmFnZXI9ZnVuY3Rpb24oKXtyZXR1cm4gY2V9LFokKCkuZm9yRWFjaCh2dD0+e2NvbnN0IE50''@;'; put 'put ''PUVFKHZ0KTtKdC5hZGRJdGVtKHZ0LG5ldyBOdCh0aGlzKSl9KSxmdW5jdGlvbiBJcnQoYyl7W0RydCxrcnRdLmZvckVhY2gobD0+bChjKSl9KGYpLFFpLnNldEFjdGl2ZUNvbnRleHROYW1lKCJncmlkIiksQW8uZ2V0U2luZ2xldG9uKCkucnVuKGYsImNvbnN0cnVjdCIpfWZ1bmN0aW9uIGxw''@;'; put 'put ''ZShjLGwsYSl7Yy5hZGRFdmVudExpc3RlbmVyKGwsYSwhMSl9ZnVuY3Rpb24gY3BlKGMsbCxhKXtjLnJlbW92ZUV2ZW50TGlzdGVuZXIobCxhLCExKX1mdW5jdGlvbiBMUChjKXtyZXR1cm4gYy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUoYyl9ZnVuY3Rpb24g''@;'; put 'put ''dXBlKGMpe2NvbnN0IGE9e21pbkhlaWdodDoyMDAsbWF4SGVpZ2h0OjMwMCxtaW5XaWR0aDoxMDAsbWF4V2lkdGg6MzAwLHRleHRDb250ZW50OmNlPT5jZS52YWx1ZSwuLi5hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e319LGQ9Yy5ib2R5''@;'; put 'put ''LGg9Yy5jcmVhdGVUZXh0Tm9kZSgiIiksZj1jLmNyZWF0ZUVsZW1lbnQoInNwYW4iKTtsZXQgdjtmdW5jdGlvbiBNKCl7dmFyIGNlLGJlO2gudGV4dENvbnRlbnQ9YS50ZXh0Q29udGVudCh2KSxmLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSIsZi5zdHlsZS5mb250U2l6ZT1MUCh2KS5mb250''@;'; put 'put ''U2l6ZSxmLnN0eWxlLmZvbnRGYW1pbHk9TFAodikuZm9udEZhbWlseSxmLnN0eWxlLndoaXRlU3BhY2U9InByZSIsZC5hcHBlbmRDaGlsZChmKTtjb25zdCBFZT1wYXJzZUludCgobnVsbD09PShjZT1MUCh2KSl8fHZvaWQgMD09PWNlP3ZvaWQgMDpjZS5wYWRkaW5nSW5saW5lU3RhcnQpfHww''@;'; put 'put ''LDEwKSxCZT1wYXJzZUludCgobnVsbD09PShiZT1MUCh2KSl8fHZvaWQgMD09PWJlP3ZvaWQgMDpiZS5wYWRkaW5nSW5saW5lRW5kKXx8MCwxMCkscWU9Zi5jbGllbnRXaWR0aCtFZStCZSsxO2QucmVtb3ZlQ2hpbGQoZik7Y29uc3QgbnQ9di5zdHlsZTtudC5oZWlnaHQ9YCR7YS5taW5IZWln''@;'; put 'put ''aHR9cHhgLG50LndpZHRoPWEubWluV2lkdGg+cWU/YCR7YS5taW5XaWR0aH1weGA6cWU+YS5tYXhXaWR0aD9gJHthLm1heFdpZHRofXB4YDpgJHtxZX1weGA7Y29uc3QgbHQ9di5zY3JvbGxIZWlnaHQ/di5zY3JvbGxIZWlnaHQtMTowO2EubWluSGVpZ2h0Pmx0P250LmhlaWdodD1gJHthLm1p''@;'; put 'put ''bkhlaWdodH1weGA6YS5tYXhIZWlnaHQ8bHQ/KG50LmhlaWdodD1gJHthLm1heEhlaWdodH1weGAsbnQub3ZlcmZsb3dZPSJ2aXNpYmxlIik6bnQuaGVpZ2h0PWAke2x0fXB4YH1mdW5jdGlvbiBEKCl7Yy5kZWZhdWx0Vmlldy5zZXRUaW1lb3V0KE0sMCl9cmV0dXJue2luaXQ6ZnVuY3Rpb24g''@;'; put 'put ''bmUoY2UsYmUpe2xldCBFZT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO3Y9Y2UsZnVuY3Rpb24gWihjZSl7aWYoY2UmJmNlLm1pbkhlaWdodClpZigiaW5oZXJpdCI9PT1jZS5taW5IZWlnaHQpYS5taW5IZWlnaHQ9di5jbGllbnRIZWln''@;'; put 'put ''aHQ7ZWxzZXtjb25zdCBiZT1wYXJzZUludChjZS5taW5IZWlnaHQsMTApO2lzTmFOKGJlKXx8KGEubWluSGVpZ2h0PWJlKX1pZihjZSYmY2UubWF4SGVpZ2h0KWlmKCJpbmhlcml0Ij09PWNlLm1heEhlaWdodClhLm1heEhlaWdodD12LmNsaWVudEhlaWdodDtlbHNle2NvbnN0IGJlPXBhcnNl''@;'; put 'put ''SW50KGNlLm1heEhlaWdodCwxMCk7aXNOYU4oYmUpfHwoYS5tYXhIZWlnaHQ9YmUpfWlmKGNlJiZjZS5taW5XaWR0aClpZigiaW5oZXJpdCI9PT1jZS5taW5XaWR0aClhLm1pbldpZHRoPXYuY2xpZW50V2lkdGg7ZWxzZXtjb25zdCBiZT1wYXJzZUludChjZS5taW5XaWR0aCwxMCk7aXNOYU4o''@;'; put 'put ''YmUpfHwoYS5taW5XaWR0aD1iZSl9aWYoY2UmJmNlLm1heFdpZHRoKWlmKCJpbmhlcml0Ij09PWNlLm1heFdpZHRoKWEubWF4V2lkdGg9di5jbGllbnRXaWR0aDtlbHNle2NvbnN0IGJlPXBhcnNlSW50KGNlLm1heFdpZHRoLDEwKTtpc05hTihiZSl8fChhLm1heFdpZHRoPWJlKX1mLmZpcnN0''@;'; put 'put ''Q2hpbGR8fChmLmNsYXNzTmFtZT0iYXV0b1Jlc2l6ZSIsZi5zdHlsZS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siLGYuYXBwZW5kQ2hpbGQoaCkpfShiZSksIlRFWFRBUkVBIj09PXYubm9kZU5hbWUmJih2LnN0eWxlLnJlc2l6ZT0ibm9uZSIsdi5zdHlsZS5oZWlnaHQ9YCR7YS5taW5IZWlnaHR9''@;'; put 'put ''cHhgLHYuc3R5bGUubWluV2lkdGg9YCR7YS5taW5XaWR0aH1weGAsdi5zdHlsZS5tYXhXaWR0aD1gJHthLm1heFdpZHRofXB4YCx2LnN0eWxlLm92ZXJmbG93WT0iaGlkZGVuIiksRWUmJihscGUodiwiaW5wdXQiLE0pLGxwZSh2LCJrZXlkb3duIixEKSksTSgpfSxyZXNpemU6TSx1bk9ic2Vy''@;'; put 'put ''dmUoKXtjcGUodiwiaW5wdXQiLE0pLGNwZSh2LCJrZXlkb3duIixEKX19fWZ1bmN0aW9uIGRwZShjLGwpe2NvbnN0IGE9dSQobCksZD1sLnZhbHVlLnNwbGl0KCJcbiIpO2xldCBoPWEsZj0wO2ZvcihsZXQgdj0wO3Y8ZC5sZW5ndGg7disrKXswIT09diYmKGYrPWRbdi0xXS5sZW5ndGgrMSk7''@;'; put 'put ''Y29uc3QgRD1mK2Rbdl0ubGVuZ3RoO2lmKCJob21lIj09PWM/aD1mOiJlbmQiPT09YyYmKGg9RCksYTw9RClicmVha31iRShsLGgpfWZ1bmN0aW9uIGU5KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBScnQoYyl7dmFyIGw9ZnVuY3Rpb24gTHJ0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBj''@;'; put 'put ''fHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBh''@;'; put 'put ''IHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25m''@;'; put 'put ''aWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBPUD0iaHRfZWRpdG9yX2hpZGRlbiIsaHBlPSJ0ZXh0RWRpdG9yIjtjbGFzcyB0OSBleHRlbmRzIE1fe3N0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4idGV4dCJ9Y29uc3RydWN0b3IobCl7c3VwZXIobCksZTko''@;'; put 'put ''dGhpcywiZXZlbnRNYW5hZ2VyIixuZXcgTDIodGhpcykpLGU5KHRoaXMsImF1dG9SZXNpemUiLHVwZSh0aGlzLmhvdC5yb290RG9jdW1lbnQpKSxlOSh0aGlzLCJURVhUQVJFQSIsdm9pZCAwKSxlOSh0aGlzLCJ0ZXh0YXJlYVN0eWxlIix2b2lkIDApLGU5KHRoaXMsIlRFWFRBUkVBX1BBUkVO''@;'; put 'put ''VCIsdm9pZCAwKSxlOSh0aGlzLCJ0ZXh0YXJlYVBhcmVudFN0eWxlIix2b2lkIDApLGU5KHRoaXMsImxheWVyQ2xhc3MiLHZvaWQgMCksdGhpcy5ldmVudE1hbmFnZXI9bmV3IEwyKHRoaXMpLHRoaXMuY3JlYXRlRWxlbWVudHMoKSx0aGlzLmJpbmRFdmVudHMoKSx0aGlzLmhvdC5hZGRIb29r''@;'; put 'put ''T25jZSgiYWZ0ZXJEZXN0cm95IiwoKT0+dGhpcy5kZXN0cm95KCkpfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMuVEVYVEFSRUEudmFsdWV9c2V0VmFsdWUobCl7dGhpcy5URVhUQVJFQS52YWx1ZT1sfW9wZW4oKXt0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCksdGhpcy5zaG93RWRpdGFibGVFbGVt''@;'; put 'put ''ZW50KCksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuc2V0QWN0aXZlQ29udGV4dE5hbWUoImVkaXRvciIpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKX1jbG9zZSgpe3RoaXMuYXV0b1Jlc2l6ZS51bk9ic2VydmUoKSxwRSh0aGlzLmhvdC5yb290RG9jdW1lbnQuYWN0aXZlRWxlbWVu''@;'; put 'put ''dCx0aGlzLmhvdC5yb290RWxlbWVudCkmJnRoaXMuaG90Lmxpc3RlbigpLHRoaXMuaGlkZUVkaXRhYmxlRWxlbWVudCgpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpfXByZXBhcmUobCxhLGQsaCxmLHYpe2NvbnN0IE09dGhpcy5zdGF0ZTtpZihzdXBlci5wcmVwYXJlKGwsYSxkLGgsZix2''@;'; put 'put ''KSwhdi5yZWFkT25seSl7dGhpcy5yZWZyZXNoRGltZW5zaW9ucyghMCk7Y29uc3R7YWxsb3dJbnZhbGlkOkR9PXY7RCYmIXRoaXMuaXNPcGVuZWQoKSYmKHRoaXMuVEVYVEFSRUEudmFsdWU9IiIpLE0hPT1zdS5GSU5JU0hFRCYmIXRoaXMuaXNPcGVuZWQoKSYmdGhpcy5oaWRlRWRpdGFibGVF''@;'; put 'put ''bGVtZW50KCl9fWJlZ2luRWRpdGluZyhsLGEpe3RoaXMuc3RhdGU9PT1zdS5WSVJHSU4mJih0aGlzLlRFWFRBUkVBLnZhbHVlPSIiLHN1cGVyLmJlZ2luRWRpdGluZyhsLGEpKX1mb2N1cygpe3RoaXMuVEVYVEFSRUEuc2VsZWN0KCksYkUodGhpcy5URVhUQVJFQSx0aGlzLlRFWFRBUkVBLnZh''@;'; put 'put ''bHVlLmxlbmd0aCl9Y3JlYXRlRWxlbWVudHMoKXtjb25zdHtyb290RG9jdW1lbnQ6bH09dGhpcy5ob3Q7dGhpcy5URVhUQVJFQT1sLmNyZWF0ZUVsZW1lbnQoIlRFWFRBUkVBIiksdmEodGhpcy5URVhUQVJFQSxbWyJkYXRhLWhvdC1pbnB1dCIsIiJdLFA3KC0xKV0pLFRpKHRoaXMuVEVYVEFS''@;'; put 'put ''RUEsImhhbmRzb250YWJsZUlucHV0IiksdGhpcy50ZXh0YXJlYVN0eWxlPXRoaXMuVEVYVEFSRUEuc3R5bGUsdGhpcy50ZXh0YXJlYVN0eWxlLndpZHRoPTAsdGhpcy50ZXh0YXJlYVN0eWxlLmhlaWdodD0wLHRoaXMudGV4dGFyZWFTdHlsZS5vdmVyZmxvd1k9InZpc2libGUiLHRoaXMuVEVY''@;'; put 'put ''VEFSRUFfUEFSRU5UPWwuY3JlYXRlRWxlbWVudCgiRElWIiksVGkodGhpcy5URVhUQVJFQV9QQVJFTlQsImhhbmRzb250YWJsZUlucHV0SG9sZGVyIikscGEodGhpcy5URVhUQVJFQV9QQVJFTlQsdGhpcy5sYXllckNsYXNzKSYmY2EodGhpcy5URVhUQVJFQV9QQVJFTlQsdGhpcy5sYXllckNs''@;'; put 'put ''YXNzKSxUaSh0aGlzLlRFWFRBUkVBX1BBUkVOVCxPUCksdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlPXRoaXMuVEVYVEFSRUFfUEFSRU5ULnN0eWxlLHRoaXMuVEVYVEFSRUFfUEFSRU5ULmFwcGVuZENoaWxkKHRoaXMuVEVYVEFSRUEpLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxk''@;'; put 'put ''KHRoaXMuVEVYVEFSRUFfUEFSRU5UKX1oaWRlRWRpdGFibGVFbGVtZW50KCl7SDJlKCkmJih0aGlzLnRleHRhcmVhU3R5bGUudGV4dEluZGVudD0iLTk5OTk5cHgiKSx0aGlzLnRleHRhcmVhU3R5bGUub3ZlcmZsb3dZPSJ2aXNpYmxlIix0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUub3BhY2l0''@;'; put 'put ''eT0iMCIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLmhlaWdodD0iMXB4IixjYSh0aGlzLlRFWFRBUkVBX1BBUkVOVCx0aGlzLmxheWVyQ2xhc3MpLFRpKHRoaXMuVEVYVEFSRUFfUEFSRU5ULE9QKX1zaG93RWRpdGFibGVFbGVtZW50KCl7dGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLmhlaWdo''@;'; put 'put ''dD0iIix0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUub3ZlcmZsb3c9IiIsdGhpcy50ZXh0YXJlYVBhcmVudFN0eWxlLnBvc2l0aW9uPSIiLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZVt0aGlzLmhvdC5pc1J0bCgpPyJsZWZ0IjoicmlnaHQiXT0iYXV0byIsdGhpcy50ZXh0YXJlYVBhcmVudFN0''@;'; put 'put ''eWxlLm9wYWNpdHk9IjEiLHRoaXMudGV4dGFyZWFTdHlsZS50ZXh0SW5kZW50PSIiO2NvbnN0IGw9dGhpcy5URVhUQVJFQV9QQVJFTlQuY2hpbGROb2RlcztsZXQgYT0hMTskbyhsLmxlbmd0aC0xLGQ9PntpZihwYShsW2RdLCJoYW5kc29udGFibGVFZGl0b3IiKSlyZXR1cm4gYT0hMCwhMX0p''@;'; put 'put ''LHBhKHRoaXMuVEVYVEFSRUFfUEFSRU5ULE9QKSYmY2EodGhpcy5URVhUQVJFQV9QQVJFTlQsT1ApLGE/KHRoaXMubGF5ZXJDbGFzcz0iaHRfZWRpdG9yX3Zpc2libGUiLFRpKHRoaXMuVEVYVEFSRUFfUEFSRU5ULHRoaXMubGF5ZXJDbGFzcykpOih0aGlzLmxheWVyQ2xhc3M9dGhpcy5nZXRF''@;'; put 'put ''ZGl0ZWRDZWxsc0xheWVyQ2xhc3MoKSxUaSh0aGlzLlRFWFRBUkVBX1BBUkVOVCx0aGlzLmxheWVyQ2xhc3MpKX1yZWZyZXNoVmFsdWUoKXtjb25zdCBsPXRoaXMuaG90LnRvUGh5c2ljYWxSb3codGhpcy5yb3cpLGE9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0Q2VsbChsLHRoaXMuY29sKTt0''@;'; put 'put ''aGlzLm9yaWdpbmFsVmFsdWU9YSx0aGlzLnNldFZhbHVlKGEpLHRoaXMucmVmcmVzaERpbWVuc2lvbnMoKX1yZWZyZXNoRGltZW5zaW9ucygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07aWYodGhpcy5zdGF0ZSE9PXN1LkVE''@;'; put 'put ''SVRJTkcmJiFsKXJldHVybjtpZih0aGlzLlREPXRoaXMuZ2V0RWRpdGVkQ2VsbCgpLCF0aGlzLlREKXJldHVybiB2b2lkKGx8fHRoaXMuY2xvc2UoKSk7Y29uc3R7dG9wOmEsc3RhcnQ6ZCx3aWR0aDpoLG1heFdpZHRoOmYsaGVpZ2h0OnYsbWF4SGVpZ2h0Ok19PXRoaXMuZ2V0RWRpdGVkQ2Vs''@;'; put 'put ''bFJlY3QoKTt0aGlzLnRleHRhcmVhUGFyZW50U3R5bGUudG9wPWAke2F9cHhgLHRoaXMudGV4dGFyZWFQYXJlbnRTdHlsZVt0aGlzLmhvdC5pc1J0bCgpPyJyaWdodCI6ImxlZnQiXT1gJHtkfXB4YCx0aGlzLnNob3dFZGl0YWJsZUVsZW1lbnQoKTtjb25zdCBEPXRoaXMuaG90LnJvb3RXaW5k''@;'; put 'put ''b3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLlREKTt0aGlzLlRFWFRBUkVBLnN0eWxlLmZvbnRTaXplPUQuZm9udFNpemUsdGhpcy5URVhUQVJFQS5zdHlsZS5mb250RmFtaWx5PUQuZm9udEZhbWlseSx0aGlzLlRFWFRBUkVBLnN0eWxlLmJhY2tncm91bmRDb2xvcj10aGlzLlRELnN0eWxlLmJh''@;'; put 'put ''Y2tncm91bmRDb2xvcix0aGlzLmF1dG9SZXNpemUuaW5pdCh0aGlzLlRFWFRBUkVBLHttaW5XaWR0aDpNYXRoLm1pbihoLGYpLG1pbkhlaWdodDpNYXRoLm1pbih2LE0pLG1heFdpZHRoOmYsbWF4SGVpZ2h0Ok19LCEwKX1iaW5kRXZlbnRzKCl7QyQoKSYmdGhpcy5ldmVudE1hbmFnZXIuYWRk''@;'; put 'put ''RXZlbnRMaXN0ZW5lcih0aGlzLlRFWFRBUkVBLCJmb2N1c291dCIsKCk9PnRoaXMuZmluaXNoRWRpdGluZyghMSkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHkiLCgpPT50aGlzLnJlZnJlc2hEaW1lbnNpb25zKCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJTY3JvbGxWZXJ0''@;'; put 'put ''aWNhbGx5IiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpKSx0aGlzLmFkZEhvb2soImFmdGVyQ29sdW1uUmVzaXplIiwoKT0+e3RoaXMucmVmcmVzaERpbWVuc2lvbnMoKSx0aGlzLnN0YXRlPT09c3UuRURJVElORyYmdGhpcy5mb2N1cygpfSksdGhpcy5hZGRIb29rKCJhZnRlclJvd1Jl''@;'; put 'put ''c2l6ZSIsKCk9Pnt0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCksdGhpcy5zdGF0ZT09PXN1LkVESVRJTkcmJnRoaXMuZm9jdXMoKX0pfWFsbG93S2V5RXZlbnRQcm9wYWdhdGlvbigpe31kZXN0cm95KCl7dGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpLHRoaXMuY2xlYXJIb29rcygpfXJlZ2lz''@;'; put 'put ''dGVyU2hvcnRjdXRzKCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKSxoPSgpPT57dGhpcy5ob3Qucm9vdERvY3VtZW50LmV4ZWNDb21tYW5kKCJpbnNlcnRUZXh0IiwhMSwiXG4iKX07YS5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkNv''@;'; put 'put ''bnRyb2wiLCJFbnRlciJdXSxjYWxsYmFjazooKT0+KGgoKSwhMSkscnVuT25seUlmOmY9PiF0aGlzLmhvdC5zZWxlY3Rpb24uaXNNdWx0aXBsZSgpJiYhZi5hbHRLZXl9LHtrZXlzOltbIk1ldGEiLCJFbnRlciJdXSxjYWxsYmFjazooKT0+KGgoKSwhMSkscnVuT25seUlmOigpPT4hdGhpcy5o''@;'; put 'put ''b3Quc2VsZWN0aW9uLmlzTXVsdGlwbGUoKX0se2tleXM6W1siQWx0IiwiRW50ZXIiXV0sY2FsbGJhY2s6KCk9PihoKCksITEpfSx7a2V5czpbWyJIb21lIl1dLGNhbGxiYWNrOihmLHYpPT57bGV0W01dPXY7ZHBlKE0sdGhpcy5URVhUQVJFQSl9fSx7a2V5czpbWyJFbmQiXV0sY2FsbGJhY2s6''@;'; put 'put ''KGYsdik9PntsZXRbTV09djtkcGUoTSx0aGlzLlRFWFRBUkVBKX19XSx7cnVuT25seUlmOigpPT5Gbyh0aGlzLmhvdC5nZXRTZWxlY3RlZCgpKSxncm91cDpocGV9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9y''@;'; put 'put ''IikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChocGUpfX1mdW5jdGlvbiBlVChjLGwsYSxkLGgsZix2KXtjb25zdCBNPXYuYXJpYVRhZ3MsRD1bXSxaPVtdLG5lPVtdLGNlPVtdO3YuY2xhc3NOYW1lJiZUaShsLHYuY2xhc3NOYW1lKSx2LnJlYWRPbmx5PyhELnB1c2godi5yZWFkT25seUNlbGxD''@;'; put 'put ''bGFzc05hbWUpLE0mJmNlLnB1c2goaDJlKCkpKTpNJiZuZS5wdXNoKGgyZSgpWzBdKSwhMT09PXYudmFsaWQmJnYuaW52YWxpZENlbGxDbGFzc05hbWU/KEQucHVzaCh2LmludmFsaWRDZWxsQ2xhc3NOYW1lKSxNJiZjZS5wdXNoKGYyZSgpKSk6KFoucHVzaCh2LmludmFsaWRDZWxsQ2xhc3NO''@;'; put 'put ''YW1lKSxNJiZuZS5wdXNoKGYyZSgpWzBdKSksITE9PT12LndvcmRXcmFwJiZ2Lm5vV29yZFdyYXBDbGFzc05hbWUmJkQucHVzaCh2Lm5vV29yZFdyYXBDbGFzc05hbWUpLCFmJiZ2LnBsYWNlaG9sZGVyJiZELnB1c2godi5wbGFjZWhvbGRlckNlbGxDbGFzc05hbWUpLGNhKGwsWiksVGkobCxE''@;'; put 'put ''KSxINyhsLG5lKSx2YShsLGNlKX1mdW5jdGlvbiBNZyhjLGwsYSxkLGgsZix2KXtlVC5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZix2XSk7bGV0IE09ZjshTSYmdi5wbGFjZWhvbGRlciYmKE09di5wbGFjZWhvbGRlciksTT16YyhNKSx2LnRyaW1XaGl0ZXNwYWNlJiYoTT1NLnRyaW0oKSksTG0o''@;'; put 'put ''bCxNKX1lVC5SRU5ERVJFUl9UWVBFPSJiYXNlIixNZy5SRU5ERVJFUl9UWVBFPSJ0ZXh0Ijtjb25zdCBmcGU9e0NFTExfVFlQRToidGV4dCIsZWRpdG9yOnQ5LHJlbmRlcmVyOk1nfTtmdW5jdGlvbiBsMyhjLGwpe2NvbnN0IGE9bmV3IHNwZShjLGx8fHt9LGJLKTtyZXR1cm4gYS5pbml0KCks''@;'; put 'put ''YX1WMihmcGUpLGwzLmVkaXRvcnM9e0Jhc2VFZGl0b3I6TV99LGwzLkNvcmU9ZnVuY3Rpb24oYyl7cmV0dXJuIG5ldyBzcGUoYyxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sYkspfSxsMy5EZWZhdWx0U2V0dGluZ3M9ejNlKCksbDMu''@;'; put 'put ''aG9va3M9QW8uZ2V0U2luZ2xldG9uKCksbDMuQ2VsbENvb3Jkcz1KTyxsMy5DZWxsUmFuZ2U9ckssbDMucGFja2FnZU5hbWU9ImhhbmRzb250YWJsZSIsbDMuYnVpbGREYXRlPSIxOS8wMy8yMDI1IDA5OjQxOjUyIixsMy52ZXJzaW9uPSIxNS4yLjAiLGwzLmxhbmd1YWdlcz17ZGljdGlvbmFy''@;'; put 'put ''eUtleXM6WmV0LGdldExhbmd1YWdlRGljdGlvbmFyeTp4M2UsZ2V0TGFuZ3VhZ2VzRGljdGlvbmFyaWVzOmZ1bmN0aW9uIEtldCgpe3JldHVybiBHZXQoKX0scmVnaXN0ZXJMYW5ndWFnZURpY3Rpb25hcnk6TTNlLGdldFRyYW5zbGF0ZWRQaHJhc2U6RTNlfTtjb25zdCBycz1sMyxOcnQ9WyJj''@;'; put 'put ''b250YWluZXIiXSx5WD1uZXcgTWFwLHBwZT0iVGhlIEhhbmRzb250YWJsZSBpbnN0YW5jZSBib3VuZCB0byB0aGlzIGNvbXBvbmVudCB3YXMgZGVzdHJveWVkIGFuZCBjYW5ub3QgYmUgdXNlZCBwcm9wZXJseS4iO2xldCBabT0oKCk9PntjbGFzcyBje2dldEluc3RhbmNlKGEpe2NvbnN0IGQ9''@;'; put 'put ''eVguZ2V0KGEpO3JldHVybiBkLmlzRGVzdHJveWVkPyhjb25zb2xlLndhcm4ocHBlKSxudWxsKTpkfXJlZ2lzdGVySW5zdGFuY2UoYSxkKXtyZXR1cm4geVguc2V0KGEsZCl9cmVtb3ZlSW5zdGFuY2UoYSl7cmV0dXJuIHlYLmRlbGV0ZShhKX1zdGF0aWMgXHUwMjc1ZmFjPWZ1bmN0aW9uKGQp''@;'; put 'put ''e3JldHVybiBuZXcoZHx8Yyl9O3N0YXRpYyBcdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX1yZXR1cm4gY30pKCk7Y29uc3QgVnJ0PU9iamVjdC5rZXlzKHJzLkRlZmF1bHRTZXR0aW5ncyksZ3BlPXJzLmhvb2tzLmdldFJlZ2lzdGVyZWQoKTtsZXQgbXBlPSgo''@;'; put 'put ''KT0+e2NsYXNzIGN7bWVyZ2VTZXR0aW5ncyhhKXtjb25zdCBkPSJzZXR0aW5ncyJpbiBhJiYib2JqZWN0Ij09dHlwZW9mIGEuc2V0dGluZ3MsaD1kP2Euc2V0dGluZ3M6e307cmV0dXJuIGdwZS5jb25jYXQoVnJ0KS5mb3JFYWNoKHY9Pntjb25zdCBNPWdwZS5pbmRleE9mKHYpPi0xO2xldCBE''@;'; put 'put ''O2QmJk0mJihEPWEuc2V0dGluZ3Nbdl0pLHZvaWQgMCE9PWFbdl0mJihEPWFbdl0pLHZvaWQgMCE9PUQmJihoW3ZdPSJuZ1pvbmUiaW4gYSYmImZ1bmN0aW9uIj09dHlwZW9mIEQmJk0/ZnVuY3Rpb24oLi4uWil7cmV0dXJuIGEubmdab25lLnJ1bigoKT0+RC5hcHBseSh0aGlzLFopKX06RCl9''@;'; put 'put ''KSxofXByZXBhcmVDaGFuZ2VzKGEpe2NvbnN0IGQ9e307cmV0dXJuIE9iamVjdC5rZXlzKGEpLmZvckVhY2goZj0+e2EuaGFzT3duUHJvcGVydHkoZikmJihkW2ZdPWFbZl0uY3VycmVudFZhbHVlKX0pLGR9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtz''@;'; put 'put ''dGF0aWMgXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjfSl9cmV0dXJuIGN9KSgpLHhfPSgoKT0+e2NsYXNzIGN7X2hvdFRhYmxlUmVnaXN0ZXJlcjtfaG90U2V0dGluZ3NSZXNvbHZlcjtuZ1pvbmU7Y29udGFpbmVyO19faG90SW5zdGFuY2U9bnVsbDtjb2x1bW5z''@;'; put 'put ''Q29tcG9uZW50cz1bXTtzZXR0aW5ncztob3RJZD0iIjthY3RpdmVIZWFkZXJDbGFzc05hbWU7YWxsb3dFbXB0eTthbGxvd0h0bWw7YWxsb3dJbnNlcnRDb2x1bW47YWxsb3dJbnNlcnRSb3c7YWxsb3dJbnZhbGlkO2FsbG93UmVtb3ZlQ29sdW1uO2FsbG93UmVtb3ZlUm93O2FyaWFUYWdzO2F1''@;'; put 'put ''dG9Db2x1bW5TaXplO2F1dG9Sb3dTaXplO2F1dG9XcmFwQ29sO2F1dG9XcmFwUm93O2JpbmRSb3dzV2l0aEhlYWRlcnM7Y2VsbDtjZWxscztjaGVja2VkVGVtcGxhdGU7Y2xhc3NOYW1lO2NvbEhlYWRlcnM7Y29sbGFwc2libGVDb2x1bW5zO2NvbHVtbkhlYWRlckhlaWdodDtjb2x1bW5zO2Nv''@;'; put 'put ''bHVtblNvcnRpbmc7Y29sdW1uU3VtbWFyeTtjb2xXaWR0aHM7Y29tbWVudGVkQ2VsbENsYXNzTmFtZTtjb21tZW50cztjb250ZXh0TWVudTtjb3B5YWJsZTtjb3B5UGFzdGU7Y29ycmVjdEZvcm1hdDtjdXJyZW50Q29sQ2xhc3NOYW1lO2N1cnJlbnRIZWFkZXJDbGFzc05hbWU7Y3VycmVudFJv''@;'; put 'put ''d0NsYXNzTmFtZTtjdXN0b21Cb3JkZXJzO2RhdGE7ZGF0YURvdE5vdGF0aW9uO2RhdGFTY2hlbWE7ZGF0ZUZvcm1hdDtkYXRlUGlja2VyQ29uZmlnO2RlZmF1bHREYXRlO3RhYk5hdmlnYXRpb247dGhlbWVOYW1lO2Rpc2FibGVWaXN1YWxTZWxlY3Rpb247ZHJhZ1RvU2Nyb2xsO2Ryb3Bkb3du''@;'; put 'put ''TWVudTtlZGl0b3I7ZW50ZXJCZWdpbnNFZGl0aW5nO2VudGVyTW92ZXM7ZmlsbEhhbmRsZTtmaWx0ZXI7ZmlsdGVyaW5nQ2FzZVNlbnNpdGl2ZTtmaWx0ZXJzO2ZpeGVkQ29sdW1uc0xlZnQ7Zml4ZWRDb2x1bW5zU3RhcnQ7Zml4ZWRSb3dzQm90dG9tO2ZpeGVkUm93c1RvcDtmb3JtdWxhcztm''@;'; put 'put ''cmFnbWVudFNlbGVjdGlvbjtoZWFkZXJDbGFzc05hbWU7aGVpZ2h0O2hpZGRlbkNvbHVtbnM7aGlkZGVuUm93cztpbnZhbGlkQ2VsbENsYXNzTmFtZTtpbWVGYXN0RWRpdDtsYWJlbDtsYW5ndWFnZTtsYXlvdXREaXJlY3Rpb247bGljZW5zZUtleTtsb2NhbGU7bWFudWFsQ29sdW1uRnJlZXpl''@;'; put 'put ''O21hbnVhbENvbHVtbk1vdmU7bWFudWFsQ29sdW1uUmVzaXplO21hbnVhbFJvd01vdmU7bWFudWFsUm93UmVzaXplO21heENvbHM7bWF4Um93czttZXJnZUNlbGxzO21pbkNvbHM7bWluUm93czttaW5TcGFyZUNvbHM7bWluU3BhcmVSb3dzO211bHRpQ29sdW1uU29ydGluZztuYXZpZ2FibGVI''@;'; put 'put ''ZWFkZXJzO25lc3RlZEhlYWRlcnM7bmVzdGVkUm93cztub1dvcmRXcmFwQ2xhc3NOYW1lO251bWVyaWNGb3JtYXQ7b2JzZXJ2ZURPTVZpc2liaWxpdHk7b3V0c2lkZUNsaWNrRGVzZWxlY3RzO3BlcnNpc3RlbnRTdGF0ZTtwbGFjZWhvbGRlcjtwbGFjZWhvbGRlckNlbGxDbGFzc05hbWU7cHJl''@;'; put 'put ''dmVudE92ZXJmbG93O3ByZXZlbnRXaGVlbDtyZWFkT25seTtyZWFkT25seUNlbGxDbGFzc05hbWU7cmVuZGVyQWxsQ29sdW1ucztyZW5kZXJBbGxSb3dzO3JlbmRlcmVyO3Jvd0hlYWRlcnM7cm93SGVhZGVyV2lkdGg7cm93SGVpZ2h0cztzZWFyY2g7c2VsZWN0aW9uTW9kZTtzZWxlY3RPcHRp''@;'; put 'put ''b25zO3NraXBDb2x1bW5PblBhc3RlO3NraXBSb3dPblBhc3RlO3NvcnRCeVJlbGV2YW5jZTtzb3VyY2U7c3RhcnRDb2xzO3N0YXJ0Um93cztzdHJldGNoSDtzdHJpY3Q7dGFibGVDbGFzc05hbWU7dGFiTW92ZXM7dGl0bGU7dHJpbURyb3Bkb3duO3RyaW1Sb3dzO3RyaW1XaGl0ZXNwYWNlO3R5''@;'; put 'put ''cGU7dW5jaGVja2VkVGVtcGxhdGU7dW5kbzt2YWxpZGF0b3I7dmlld3BvcnRDb2x1bW5SZW5kZXJpbmdPZmZzZXQ7dmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQ7dmlzaWJsZVJvd3M7d2lkdGg7d29yZFdyYXA7YWZ0ZXJBZGRDaGlsZDthZnRlckF1dG9maWxsO2FmdGVyQmVnaW5FZGl0aW5n''@;'; put 'put ''O2FmdGVyQ2VsbE1ldGFSZXNldDthZnRlckNoYW5nZTthZnRlckNoYW5nZXNPYnNlcnZlZDthZnRlckNvbHVtbkNvbGxhcHNlO2FmdGVyQ29sdW1uRXhwYW5kO2FmdGVyQ29sdW1uRnJlZXplO2FmdGVyQ29sdW1uTW92ZTthZnRlckNvbHVtblJlc2l6ZTthZnRlckNvbHVtblNlcXVlbmNlQ2hh''@;'; put 'put ''bmdlO2FmdGVyQ29sdW1uU29ydDthZnRlckNvbHVtblVuZnJlZXplO2FmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9uczthZnRlckNvbnRleHRNZW51SGlkZTthZnRlckNvbnRleHRNZW51U2hvdzthZnRlckNvcHk7YWZ0ZXJDb3B5TGltaXQ7YWZ0ZXJDcmVhdGVDb2w7YWZ0ZXJDcmVhdGVS''@;'; put 'put ''b3c7YWZ0ZXJDdXQ7YWZ0ZXJEZXNlbGVjdDthZnRlckRlc3Ryb3k7YWZ0ZXJEZXRhY2hDaGlsZDthZnRlckRvY3VtZW50S2V5RG93bjthZnRlckRyYXdTZWxlY3Rpb247YWZ0ZXJEcm9wZG93bk1lbnVEZWZhdWx0T3B0aW9uczthZnRlckRyb3Bkb3duTWVudUhpZGU7YWZ0ZXJEcm9wZG93bk1l''@;'; put 'put ''bnVTaG93O2FmdGVyRmlsdGVyO2FmdGVyRm9ybXVsYXNWYWx1ZXNVcGRhdGU7YWZ0ZXJHZXRDZWxsTWV0YTthZnRlckdldENvbEhlYWRlcjthZnRlckdldENvbHVtbkhlYWRlclJlbmRlcmVyczthZnRlckdldFJvd0hlYWRlcjthZnRlckdldFJvd0hlYWRlclJlbmRlcmVyczthZnRlckhpZGVD''@;'; put 'put ''b2x1bW5zO2FmdGVySGlkZVJvd3M7YWZ0ZXJJbml0O2FmdGVyTGFuZ3VhZ2VDaGFuZ2U7YWZ0ZXJMaXN0ZW47YWZ0ZXJMb2FkRGF0YTthZnRlck1lcmdlQ2VsbHM7YWZ0ZXJNb2RpZnlUcmFuc2Zvcm1FbmQ7YWZ0ZXJNb2RpZnlUcmFuc2Zvcm1Gb2N1czthZnRlck1vZGlmeVRyYW5zZm9ybVN0''@;'; put 'put ''YXJ0O2FmdGVyTW9tZW50dW1TY3JvbGw7YWZ0ZXJOYW1lZEV4cHJlc3Npb25BZGRlZDthZnRlck5hbWVkRXhwcmVzc2lvblJlbW92ZWQ7YWZ0ZXJPbkNlbGxDb250ZXh0TWVudTthZnRlck9uQ2VsbENvcm5lckRibENsaWNrO2FmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duO2FmdGVyT25DZWxs''@;'; put 'put ''TW91c2VEb3duO2FmdGVyT25DZWxsTW91c2VPdXQ7YWZ0ZXJPbkNlbGxNb3VzZU92ZXI7YWZ0ZXJPbkNlbGxNb3VzZVVwO2FmdGVyUGFzdGU7YWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQ7YWZ0ZXJSZWRvO2FmdGVyUmVkb1N0YWNrQ2hhbmdlO2FmdGVyUmVmcmVzaERpbWVuc2lvbnM7YWZ0ZXJS''@;'; put 'put ''ZW1vdmVDZWxsTWV0YTthZnRlclJlbW92ZUNvbDthZnRlclJlbW92ZVJvdzthZnRlclJlbmRlcjthZnRlclJlbmRlcmVyO2FmdGVyUm93TW92ZTthZnRlclJvd1Jlc2l6ZTthZnRlclJvd1NlcXVlbmNlQ2hhbmdlO2FmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5O2FmdGVyU2Nyb2xsVmVydGljYWxs''@;'; put 'put ''eTthZnRlclNjcm9sbDthZnRlclNlbGVjdENvbHVtbnM7YWZ0ZXJTZWxlY3Rpb247YWZ0ZXJTZWxlY3Rpb25CeVByb3A7YWZ0ZXJTZWxlY3Rpb25FbmQ7YWZ0ZXJTZWxlY3Rpb25FbmRCeVByb3A7YWZ0ZXJTZWxlY3Rpb25Gb2N1c1NldDthZnRlclNlbGVjdFJvd3M7YWZ0ZXJTZXRDZWxsTWV0''@;'; put 'put ''YTthZnRlclNldERhdGFBdENlbGw7YWZ0ZXJTZXREYXRhQXRSb3dQcm9wO2FmdGVyU2V0U291cmNlRGF0YUF0Q2VsbDthZnRlclNldFRoZW1lO2FmdGVyU2hlZXRBZGRlZDthZnRlclNoZWV0UmVuYW1lZDthZnRlclNoZWV0UmVtb3ZlZDthZnRlclRyaW1Sb3c7YWZ0ZXJVbmRvO2FmdGVyVW5k''@;'; put 'put ''b1N0YWNrQ2hhbmdlO2FmdGVyVW5oaWRlQ29sdW1uczthZnRlclVuaGlkZVJvd3M7YWZ0ZXJVbmxpc3RlbjthZnRlclVubWVyZ2VDZWxsczthZnRlclVudHJpbVJvdzthZnRlclVwZGF0ZURhdGE7YWZ0ZXJVcGRhdGVTZXR0aW5nczthZnRlclZhbGlkYXRlO2FmdGVyVmlld3BvcnRDb2x1bW5D''@;'; put 'put ''YWxjdWxhdG9yT3ZlcnJpZGU7YWZ0ZXJWaWV3cG9ydFJvd0NhbGN1bGF0b3JPdmVycmlkZTthZnRlclZpZXdSZW5kZXI7YmVmb3JlQWRkQ2hpbGQ7YmVmb3JlQXV0b2ZpbGw7YmVmb3JlQmVnaW5FZGl0aW5nO2JlZm9yZUNlbGxBbGlnbm1lbnQ7YmVmb3JlQ2hhbmdlO2JlZm9yZUNoYW5nZVJl''@;'; put 'put ''bmRlcjtiZWZvcmVDb2x1bW5Db2xsYXBzZTtiZWZvcmVDb2x1bW5FeHBhbmQ7YmVmb3JlQ29sdW1uRnJlZXplO2JlZm9yZUNvbHVtbk1vdmU7YmVmb3JlQ29sdW1uUmVzaXplO2JlZm9yZUNvbHVtblNvcnQ7YmVmb3JlQ29sdW1uV3JhcDtiZWZvcmVDb2x1bW5VbmZyZWV6ZTtiZWZvcmVDb250''@;'; put 'put ''ZXh0TWVudVNldEl0ZW1zO2JlZm9yZUNvbnRleHRNZW51U2hvdztiZWZvcmVDb3B5O2JlZm9yZUNyZWF0ZUNvbDtiZWZvcmVDcmVhdGVSb3c7YmVmb3JlQ3V0O2JlZm9yZURldGFjaENoaWxkO2JlZm9yZURyYXdCb3JkZXJzO2JlZm9yZURyb3Bkb3duTWVudVNldEl0ZW1zO2JlZm9yZURyb3Bk''@;'; put 'put ''b3duTWVudVNob3c7YmVmb3JlRmlsdGVyO2JlZm9yZUdldENlbGxNZXRhO2JlZm9yZUhpZGVDb2x1bW5zO2JlZm9yZUhpZGVSb3dzO2JlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlcjtiZWZvcmVIaWdobGlnaHRpbmdSb3dIZWFkZXI7YmVmb3JlSW5pdDtiZWZvcmVJbml0V2Fsa29udGFi''@;'; put 'put ''bGU7YmVmb3JlS2V5RG93bjtiZWZvcmVMYW5ndWFnZUNoYW5nZTtiZWZvcmVMb2FkRGF0YTtiZWZvcmVNZXJnZUNlbGxzO2JlZm9yZU9uQ2VsbENvbnRleHRNZW51O2JlZm9yZU9uQ2VsbE1vdXNlRG93bjtiZWZvcmVPbkNlbGxNb3VzZU91dDtiZWZvcmVPbkNlbGxNb3VzZU92ZXI7YmVmb3Jl''@;'; put 'put ''T25DZWxsTW91c2VVcDtiZWZvcmVQYXN0ZTtiZWZvcmVSZWRvO2JlZm9yZVJlZG9TdGFja0NoYW5nZTtiZWZvcmVSZWZyZXNoRGltZW5zaW9ucztiZWZvcmVSZW1vdmVDZWxsQ2xhc3NOYW1lcztiZWZvcmVSZW1vdmVDZWxsTWV0YTtiZWZvcmVSZW1vdmVDb2w7YmVmb3JlUmVtb3ZlUm93O2Jl''@;'; put 'put ''Zm9yZVJlbmRlcjtiZWZvcmVSZW5kZXJlcjtiZWZvcmVSb3dNb3ZlO2JlZm9yZVJvd1Jlc2l6ZTtiZWZvcmVSb3dXcmFwO2JlZm9yZVNlbGVjdENvbHVtbnM7YmVmb3JlU2VsZWN0aW9uRm9jdXNTZXQ7YmVmb3JlU2VsZWN0aW9uSGlnaGxpZ2h0U2V0O2JlZm9yZVNlbGVjdFJvd3M7YmVmb3Jl''@;'; put 'put ''U2V0Q2VsbE1ldGE7YmVmb3JlU2V0UmFuZ2VFbmQ7YmVmb3JlU2V0UmFuZ2VTdGFydDtiZWZvcmVTZXRSYW5nZVN0YXJ0T25seTtiZWZvcmVTdHJldGNoaW5nQ29sdW1uV2lkdGg7YmVmb3JlVG91Y2hTY3JvbGw7YmVmb3JlVHJpbVJvdztiZWZvcmVVbmRvO2JlZm9yZVVuZG9TdGFja0NoYW5n''@;'; put 'put ''ZTtiZWZvcmVVbmhpZGVDb2x1bW5zO2JlZm9yZVVuaGlkZVJvd3M7YmVmb3JlVW5tZXJnZUNlbGxzO2JlZm9yZVVudHJpbVJvdztiZWZvcmVVcGRhdGVEYXRhO2JlZm9yZVZhbGlkYXRlO2JlZm9yZVZhbHVlUmVuZGVyO2JlZm9yZVZpZXdwb3J0U2Nyb2xsO2JlZm9yZVZpZXdwb3J0U2Nyb2xs''@;'; put 'put ''SG9yaXpvbnRhbGx5O2JlZm9yZVZpZXdwb3J0U2Nyb2xsVmVydGljYWxseTtiZWZvcmVWaWV3UmVuZGVyO2NvbnN0cnVjdDtpbml0O21vZGlmeUF1dG9Db2x1bW5TaXplU2VlZDttb2RpZnlBdXRvZmlsbFJhbmdlO21vZGlmeUNvbEhlYWRlcjttb2RpZnlDb2x1bW5IZWFkZXJIZWlnaHQ7bW9k''@;'; put 'put ''aWZ5Q29sdW1uSGVhZGVyVmFsdWU7bW9kaWZ5Q29sV2lkdGg7bW9kaWZ5Q29weWFibGVSYW5nZTttb2RpZnlGaWx0ZXJzTXVsdGlTZWxlY3RWYWx1ZTttb2RpZnlGb2N1c2VkRWxlbWVudDttb2RpZnlEYXRhO21vZGlmeUZvY3VzT25UYWJOYXZpZ2F0aW9uO21vZGlmeUdldENlbGxDb29yZHM7''@;'; put 'put ''bW9kaWZ5R2V0Q29vcmRzRWxlbWVudDttb2RpZnlSb3dEYXRhO21vZGlmeVJvd0hlYWRlcjttb2RpZnlSb3dIZWFkZXJXaWR0aDttb2RpZnlSb3dIZWlnaHQ7bW9kaWZ5Um93SGVpZ2h0QnlPdmVybGF5TmFtZTttb2RpZnlTb3VyY2VEYXRhO21vZGlmeVRyYW5zZm9ybUVuZDttb2RpZnlUcmFu''@;'; put 'put ''c2Zvcm1Gb2N1czttb2RpZnlUcmFuc2Zvcm1TdGFydDtwZXJzaXN0ZW50U3RhdGVMb2FkO3BlcnNpc3RlbnRTdGF0ZVJlc2V0O3BlcnNpc3RlbnRTdGF0ZVNhdmU7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX2hvdFRhYmxlUmVnaXN0ZXJlcj1hLHRoaXMuX2hvdFNldHRpbmdzUmVzb2x2ZXI9''@;'; put 'put ''ZCx0aGlzLm5nWm9uZT1ofWdldCBob3RJbnN0YW5jZSgpe3JldHVybiF0aGlzLl9faG90SW5zdGFuY2V8fHRoaXMuX19ob3RJbnN0YW5jZSYmIXRoaXMuX19ob3RJbnN0YW5jZS5pc0Rlc3Ryb3llZD90aGlzLl9faG90SW5zdGFuY2U6KHRoaXMuX2hvdFRhYmxlUmVnaXN0ZXJlci5yZW1vdmVJ''@;'; put 'put ''bnN0YW5jZSh0aGlzLmhvdElkKSxjb25zb2xlLndhcm4ocHBlKSxudWxsKX1zZXQgaG90SW5zdGFuY2UoYSl7dGhpcy5fX2hvdEluc3RhbmNlPWF9bmdBZnRlclZpZXdJbml0KCl7Y29uc3QgYT10aGlzLl9ob3RTZXR0aW5nc1Jlc29sdmVyLm1lcmdlU2V0dGluZ3ModGhpcyk7aWYodGhpcy5j''@;'; put 'put ''b2x1bW5zQ29tcG9uZW50cy5sZW5ndGg+MCl7Y29uc3QgZD1bXTt0aGlzLmNvbHVtbnNDb21wb25lbnRzLmZvckVhY2goaD0+e2QucHVzaCh0aGlzLl9ob3RTZXR0aW5nc1Jlc29sdmVyLm1lcmdlU2V0dGluZ3MoaCkpfSksYS5jb2x1bW5zPWR9dGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3Vs''@;'; put 'put ''YXIoKCk9Pnt0aGlzLmhvdEluc3RhbmNlPW5ldyBycy5Db3JlKHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQsYSksdGhpcy5ob3RJZCYmdGhpcy5faG90VGFibGVSZWdpc3RlcmVyLnJlZ2lzdGVySW5zdGFuY2UodGhpcy5ob3RJZCx0aGlzLmhvdEluc3RhbmNlKSx0aGlzLmhvdEluc3Rh''@;'; put 'put ''bmNlLmluaXQoKX0pfW5nT25DaGFuZ2VzKGEpe2lmKG51bGw9PT10aGlzLmhvdEluc3RhbmNlKXJldHVybjtjb25zdCBkPXRoaXMuX2hvdFNldHRpbmdzUmVzb2x2ZXIucHJlcGFyZUNoYW5nZXMoYSk7dGhpcy51cGRhdGVIb3RUYWJsZShkKX1uZ09uRGVzdHJveSgpe3RoaXMubmdab25lLnJ1''@;'; put 'put ''bk91dHNpZGVBbmd1bGFyKCgpPT57dGhpcy5ob3RJbnN0YW5jZSYmdGhpcy5ob3RJbnN0YW5jZS5kZXN0cm95KCl9KSx0aGlzLmhvdElkJiZ0aGlzLl9ob3RUYWJsZVJlZ2lzdGVyZXIucmVtb3ZlSW5zdGFuY2UodGhpcy5ob3RJZCl9dXBkYXRlSG90VGFibGUoYSl7dGhpcy5ob3RJbnN0YW5j''@;'; put 'put ''ZSYmdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCk9Pnt0aGlzLmhvdEluc3RhbmNlLnVwZGF0ZVNldHRpbmdzKGEsITEpfSl9b25BZnRlckNvbHVtbnNDaGFuZ2UoKXtpZih2b2lkIDAhPT10aGlzLmNvbHVtbnNDb21wb25lbnRzJiZ0aGlzLmNvbHVtbnNDb21wb25lbnRzLmxlbmd0''@;'; put 'put ''aD4wKXtjb25zdCBhPVtdO3RoaXMuY29sdW1uc0NvbXBvbmVudHMuZm9yRWFjaChoPT57YS5wdXNoKHRoaXMuX2hvdFNldHRpbmdzUmVzb2x2ZXIubWVyZ2VTZXR0aW5ncyhoKSl9KSx0aGlzLnVwZGF0ZUhvdFRhYmxlKHtjb2x1bW5zOmF9KX19b25BZnRlckNvbHVtbnNOdW1iZXJDaGFuZ2Uo''@;'; put 'put ''KXtjb25zdCBhPVtdO3RoaXMuY29sdW1uc0NvbXBvbmVudHMubGVuZ3RoPjAmJnRoaXMuY29sdW1uc0NvbXBvbmVudHMuZm9yRWFjaChkPT57YS5wdXNoKHRoaXMuX2hvdFNldHRpbmdzUmVzb2x2ZXIubWVyZ2VTZXR0aW5ncyhkKSl9KSx0aGlzLnVwZGF0ZUhvdFRhYmxlKHtjb2x1bW5zOmF9''@;'; put 'put ''KX1hZGRDb2x1bW4oYSl7dGhpcy5jb2x1bW5zQ29tcG9uZW50cy5wdXNoKGEpLHRoaXMub25BZnRlckNvbHVtbnNOdW1iZXJDaGFuZ2UoKX1yZW1vdmVDb2x1bW4oYSl7Y29uc3QgZD10aGlzLmNvbHVtbnNDb21wb25lbnRzLmluZGV4T2YoYSk7dGhpcy5jb2x1bW5zQ29tcG9uZW50cy5zcGxp''@;'; put 'put ''Y2UoZCwxKSx0aGlzLm9uQWZ0ZXJDb2x1bW5zTnVtYmVyQ2hhbmdlKCl9c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKFptKSxHZShtcGUpLEdlKFlvKSl9O3N0YXRpYyBcdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siaG90LXRhYmxlIl1d''@;'; put 'put ''LHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmbmEoTnJ0LDUpLDImZCl7bGV0IGY7eGkoZj1FaSgpKSYmKGguY29udGFpbmVyPWYuZmlyc3QpfX0saW5wdXRzOntzZXR0aW5nczoic2V0dGluZ3MiLGhvdElkOiJob3RJZCIsYWN0aXZlSGVhZGVyQ2xhc3NOYW1lOiJhY3RpdmVIZWFk''@;'; put 'put ''ZXJDbGFzc05hbWUiLGFsbG93RW1wdHk6ImFsbG93RW1wdHkiLGFsbG93SHRtbDoiYWxsb3dIdG1sIixhbGxvd0luc2VydENvbHVtbjoiYWxsb3dJbnNlcnRDb2x1bW4iLGFsbG93SW5zZXJ0Um93OiJhbGxvd0luc2VydFJvdyIsYWxsb3dJbnZhbGlkOiJhbGxvd0ludmFsaWQiLGFsbG93UmVt''@;'; put 'put ''b3ZlQ29sdW1uOiJhbGxvd1JlbW92ZUNvbHVtbiIsYWxsb3dSZW1vdmVSb3c6ImFsbG93UmVtb3ZlUm93IixhcmlhVGFnczoiYXJpYVRhZ3MiLGF1dG9Db2x1bW5TaXplOiJhdXRvQ29sdW1uU2l6ZSIsYXV0b1Jvd1NpemU6ImF1dG9Sb3dTaXplIixhdXRvV3JhcENvbDoiYXV0b1dyYXBDb2wi''@;'; put 'put ''LGF1dG9XcmFwUm93OiJhdXRvV3JhcFJvdyIsYmluZFJvd3NXaXRoSGVhZGVyczoiYmluZFJvd3NXaXRoSGVhZGVycyIsY2VsbDoiY2VsbCIsY2VsbHM6ImNlbGxzIixjaGVja2VkVGVtcGxhdGU6ImNoZWNrZWRUZW1wbGF0ZSIsY2xhc3NOYW1lOiJjbGFzc05hbWUiLGNvbEhlYWRlcnM6ImNv''@;'; put 'put ''bEhlYWRlcnMiLGNvbGxhcHNpYmxlQ29sdW1uczoiY29sbGFwc2libGVDb2x1bW5zIixjb2x1bW5IZWFkZXJIZWlnaHQ6ImNvbHVtbkhlYWRlckhlaWdodCIsY29sdW1uczoiY29sdW1ucyIsY29sdW1uU29ydGluZzoiY29sdW1uU29ydGluZyIsY29sdW1uU3VtbWFyeToiY29sdW1uU3VtbWFy''@;'; put 'put ''eSIsY29sV2lkdGhzOiJjb2xXaWR0aHMiLGNvbW1lbnRlZENlbGxDbGFzc05hbWU6ImNvbW1lbnRlZENlbGxDbGFzc05hbWUiLGNvbW1lbnRzOiJjb21tZW50cyIsY29udGV4dE1lbnU6ImNvbnRleHRNZW51Iixjb3B5YWJsZToiY29weWFibGUiLGNvcHlQYXN0ZToiY29weVBhc3RlIixjb3Jy''@;'; put 'put ''ZWN0Rm9ybWF0OiJjb3JyZWN0Rm9ybWF0IixjdXJyZW50Q29sQ2xhc3NOYW1lOiJjdXJyZW50Q29sQ2xhc3NOYW1lIixjdXJyZW50SGVhZGVyQ2xhc3NOYW1lOiJjdXJyZW50SGVhZGVyQ2xhc3NOYW1lIixjdXJyZW50Um93Q2xhc3NOYW1lOiJjdXJyZW50Um93Q2xhc3NOYW1lIixjdXN0b21C''@;'; put 'put ''b3JkZXJzOiJjdXN0b21Cb3JkZXJzIixkYXRhOiJkYXRhIixkYXRhRG90Tm90YXRpb246ImRhdGFEb3ROb3RhdGlvbiIsZGF0YVNjaGVtYToiZGF0YVNjaGVtYSIsZGF0ZUZvcm1hdDoiZGF0ZUZvcm1hdCIsZGF0ZVBpY2tlckNvbmZpZzoiZGF0ZVBpY2tlckNvbmZpZyIsZGVmYXVsdERhdGU6''@;'; put 'put ''ImRlZmF1bHREYXRlIix0YWJOYXZpZ2F0aW9uOiJ0YWJOYXZpZ2F0aW9uIix0aGVtZU5hbWU6InRoZW1lTmFtZSIsZGlzYWJsZVZpc3VhbFNlbGVjdGlvbjoiZGlzYWJsZVZpc3VhbFNlbGVjdGlvbiIsZHJhZ1RvU2Nyb2xsOiJkcmFnVG9TY3JvbGwiLGRyb3Bkb3duTWVudToiZHJvcGRvd25N''@;'; put 'put ''ZW51IixlZGl0b3I6ImVkaXRvciIsZW50ZXJCZWdpbnNFZGl0aW5nOiJlbnRlckJlZ2luc0VkaXRpbmciLGVudGVyTW92ZXM6ImVudGVyTW92ZXMiLGZpbGxIYW5kbGU6ImZpbGxIYW5kbGUiLGZpbHRlcjoiZmlsdGVyIixmaWx0ZXJpbmdDYXNlU2Vuc2l0aXZlOiJmaWx0ZXJpbmdDYXNlU2Vu''@;'; put 'put ''c2l0aXZlIixmaWx0ZXJzOiJmaWx0ZXJzIixmaXhlZENvbHVtbnNMZWZ0OiJmaXhlZENvbHVtbnNMZWZ0IixmaXhlZENvbHVtbnNTdGFydDoiZml4ZWRDb2x1bW5zU3RhcnQiLGZpeGVkUm93c0JvdHRvbToiZml4ZWRSb3dzQm90dG9tIixmaXhlZFJvd3NUb3A6ImZpeGVkUm93c1RvcCIsZm9y''@;'; put 'put ''bXVsYXM6ImZvcm11bGFzIixmcmFnbWVudFNlbGVjdGlvbjoiZnJhZ21lbnRTZWxlY3Rpb24iLGhlYWRlckNsYXNzTmFtZToiaGVhZGVyQ2xhc3NOYW1lIixoZWlnaHQ6ImhlaWdodCIsaGlkZGVuQ29sdW1uczoiaGlkZGVuQ29sdW1ucyIsaGlkZGVuUm93czoiaGlkZGVuUm93cyIsaW52YWxp''@;'; put 'put ''ZENlbGxDbGFzc05hbWU6ImludmFsaWRDZWxsQ2xhc3NOYW1lIixpbWVGYXN0RWRpdDoiaW1lRmFzdEVkaXQiLGxhYmVsOiJsYWJlbCIsbGFuZ3VhZ2U6Imxhbmd1YWdlIixsYXlvdXREaXJlY3Rpb246ImxheW91dERpcmVjdGlvbiIsbGljZW5zZUtleToibGljZW5zZUtleSIsbG9jYWxlOiJs''@;'; put 'put ''b2NhbGUiLG1hbnVhbENvbHVtbkZyZWV6ZToibWFudWFsQ29sdW1uRnJlZXplIixtYW51YWxDb2x1bW5Nb3ZlOiJtYW51YWxDb2x1bW5Nb3ZlIixtYW51YWxDb2x1bW5SZXNpemU6Im1hbnVhbENvbHVtblJlc2l6ZSIsbWFudWFsUm93TW92ZToibWFudWFsUm93TW92ZSIsbWFudWFsUm93UmVz''@;'; put 'put ''aXplOiJtYW51YWxSb3dSZXNpemUiLG1heENvbHM6Im1heENvbHMiLG1heFJvd3M6Im1heFJvd3MiLG1lcmdlQ2VsbHM6Im1lcmdlQ2VsbHMiLG1pbkNvbHM6Im1pbkNvbHMiLG1pblJvd3M6Im1pblJvd3MiLG1pblNwYXJlQ29sczoibWluU3BhcmVDb2xzIixtaW5TcGFyZVJvd3M6Im1pblNw''@;'; put 'put ''YXJlUm93cyIsbXVsdGlDb2x1bW5Tb3J0aW5nOiJtdWx0aUNvbHVtblNvcnRpbmciLG5hdmlnYWJsZUhlYWRlcnM6Im5hdmlnYWJsZUhlYWRlcnMiLG5lc3RlZEhlYWRlcnM6Im5lc3RlZEhlYWRlcnMiLG5lc3RlZFJvd3M6Im5lc3RlZFJvd3MiLG5vV29yZFdyYXBDbGFzc05hbWU6Im5vV29y''@;'; put 'put ''ZFdyYXBDbGFzc05hbWUiLG51bWVyaWNGb3JtYXQ6Im51bWVyaWNGb3JtYXQiLG9ic2VydmVET01WaXNpYmlsaXR5OiJvYnNlcnZlRE9NVmlzaWJpbGl0eSIsb3V0c2lkZUNsaWNrRGVzZWxlY3RzOiJvdXRzaWRlQ2xpY2tEZXNlbGVjdHMiLHBlcnNpc3RlbnRTdGF0ZToicGVyc2lzdGVudFN0''@;'; put 'put ''YXRlIixwbGFjZWhvbGRlcjoicGxhY2Vob2xkZXIiLHBsYWNlaG9sZGVyQ2VsbENsYXNzTmFtZToicGxhY2Vob2xkZXJDZWxsQ2xhc3NOYW1lIixwcmV2ZW50T3ZlcmZsb3c6InByZXZlbnRPdmVyZmxvdyIscHJldmVudFdoZWVsOiJwcmV2ZW50V2hlZWwiLHJlYWRPbmx5OiJyZWFkT25seSIs''@;'; put 'put ''cmVhZE9ubHlDZWxsQ2xhc3NOYW1lOiJyZWFkT25seUNlbGxDbGFzc05hbWUiLHJlbmRlckFsbENvbHVtbnM6InJlbmRlckFsbENvbHVtbnMiLHJlbmRlckFsbFJvd3M6InJlbmRlckFsbFJvd3MiLHJlbmRlcmVyOiJyZW5kZXJlciIscm93SGVhZGVyczoicm93SGVhZGVycyIscm93SGVhZGVy''@;'; put 'put ''V2lkdGg6InJvd0hlYWRlcldpZHRoIixyb3dIZWlnaHRzOiJyb3dIZWlnaHRzIixzZWFyY2g6InNlYXJjaCIsc2VsZWN0aW9uTW9kZToic2VsZWN0aW9uTW9kZSIsc2VsZWN0T3B0aW9uczoic2VsZWN0T3B0aW9ucyIsc2tpcENvbHVtbk9uUGFzdGU6InNraXBDb2x1bW5PblBhc3RlIixza2lw''@;'; put 'put ''Um93T25QYXN0ZToic2tpcFJvd09uUGFzdGUiLHNvcnRCeVJlbGV2YW5jZToic29ydEJ5UmVsZXZhbmNlIixzb3VyY2U6InNvdXJjZSIsc3RhcnRDb2xzOiJzdGFydENvbHMiLHN0YXJ0Um93czoic3RhcnRSb3dzIixzdHJldGNoSDoic3RyZXRjaEgiLHN0cmljdDoic3RyaWN0Iix0YWJsZUNs''@;'; put 'put ''YXNzTmFtZToidGFibGVDbGFzc05hbWUiLHRhYk1vdmVzOiJ0YWJNb3ZlcyIsdGl0bGU6InRpdGxlIix0cmltRHJvcGRvd246InRyaW1Ecm9wZG93biIsdHJpbVJvd3M6InRyaW1Sb3dzIix0cmltV2hpdGVzcGFjZToidHJpbVdoaXRlc3BhY2UiLHR5cGU6InR5cGUiLHVuY2hlY2tlZFRlbXBs''@;'; put 'put ''YXRlOiJ1bmNoZWNrZWRUZW1wbGF0ZSIsdW5kbzoidW5kbyIsdmFsaWRhdG9yOiJ2YWxpZGF0b3IiLHZpZXdwb3J0Q29sdW1uUmVuZGVyaW5nT2Zmc2V0OiJ2aWV3cG9ydENvbHVtblJlbmRlcmluZ09mZnNldCIsdmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQ6InZpZXdwb3J0Um93UmVuZGVy''@;'; put 'put ''aW5nT2Zmc2V0Iix2aXNpYmxlUm93czoidmlzaWJsZVJvd3MiLHdpZHRoOiJ3aWR0aCIsd29yZFdyYXA6IndvcmRXcmFwIixhZnRlckFkZENoaWxkOiJhZnRlckFkZENoaWxkIixhZnRlckF1dG9maWxsOiJhZnRlckF1dG9maWxsIixhZnRlckJlZ2luRWRpdGluZzoiYWZ0ZXJCZWdpbkVkaXRp''@;'; put 'put ''bmciLGFmdGVyQ2VsbE1ldGFSZXNldDoiYWZ0ZXJDZWxsTWV0YVJlc2V0IixhZnRlckNoYW5nZToiYWZ0ZXJDaGFuZ2UiLGFmdGVyQ2hhbmdlc09ic2VydmVkOiJhZnRlckNoYW5nZXNPYnNlcnZlZCIsYWZ0ZXJDb2x1bW5Db2xsYXBzZToiYWZ0ZXJDb2x1bW5Db2xsYXBzZSIsYWZ0ZXJDb2x1''@;'; put 'put ''bW5FeHBhbmQ6ImFmdGVyQ29sdW1uRXhwYW5kIixhZnRlckNvbHVtbkZyZWV6ZToiYWZ0ZXJDb2x1bW5GcmVlemUiLGFmdGVyQ29sdW1uTW92ZToiYWZ0ZXJDb2x1bW5Nb3ZlIixhZnRlckNvbHVtblJlc2l6ZToiYWZ0ZXJDb2x1bW5SZXNpemUiLGFmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2U6''@;'; put 'put ''ImFmdGVyQ29sdW1uU2VxdWVuY2VDaGFuZ2UiLGFmdGVyQ29sdW1uU29ydDoiYWZ0ZXJDb2x1bW5Tb3J0IixhZnRlckNvbHVtblVuZnJlZXplOiJhZnRlckNvbHVtblVuZnJlZXplIixhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnM6ImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9u''@;'; put 'put ''cyIsYWZ0ZXJDb250ZXh0TWVudUhpZGU6ImFmdGVyQ29udGV4dE1lbnVIaWRlIixhZnRlckNvbnRleHRNZW51U2hvdzoiYWZ0ZXJDb250ZXh0TWVudVNob3ciLGFmdGVyQ29weToiYWZ0ZXJDb3B5IixhZnRlckNvcHlMaW1pdDoiYWZ0ZXJDb3B5TGltaXQiLGFmdGVyQ3JlYXRlQ29sOiJhZnRl''@;'; put 'put ''ckNyZWF0ZUNvbCIsYWZ0ZXJDcmVhdGVSb3c6ImFmdGVyQ3JlYXRlUm93IixhZnRlckN1dDoiYWZ0ZXJDdXQiLGFmdGVyRGVzZWxlY3Q6ImFmdGVyRGVzZWxlY3QiLGFmdGVyRGVzdHJveToiYWZ0ZXJEZXN0cm95IixhZnRlckRldGFjaENoaWxkOiJhZnRlckRldGFjaENoaWxkIixhZnRlckRv''@;'; put 'put ''Y3VtZW50S2V5RG93bjoiYWZ0ZXJEb2N1bWVudEtleURvd24iLGFmdGVyRHJhd1NlbGVjdGlvbjoiYWZ0ZXJEcmF3U2VsZWN0aW9uIixhZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zOiJhZnRlckRyb3Bkb3duTWVudURlZmF1bHRPcHRpb25zIixhZnRlckRyb3Bkb3duTWVudUhpZGU6''@;'; put 'put ''ImFmdGVyRHJvcGRvd25NZW51SGlkZSIsYWZ0ZXJEcm9wZG93bk1lbnVTaG93OiJhZnRlckRyb3Bkb3duTWVudVNob3ciLGFmdGVyRmlsdGVyOiJhZnRlckZpbHRlciIsYWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZToiYWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZSIsYWZ0ZXJHZXRDZWxsTWV0''@;'; put 'put ''YToiYWZ0ZXJHZXRDZWxsTWV0YSIsYWZ0ZXJHZXRDb2xIZWFkZXI6ImFmdGVyR2V0Q29sSGVhZGVyIixhZnRlckdldENvbHVtbkhlYWRlclJlbmRlcmVyczoiYWZ0ZXJHZXRDb2x1bW5IZWFkZXJSZW5kZXJlcnMiLGFmdGVyR2V0Um93SGVhZGVyOiJhZnRlckdldFJvd0hlYWRlciIsYWZ0ZXJH''@;'; put 'put ''ZXRSb3dIZWFkZXJSZW5kZXJlcnM6ImFmdGVyR2V0Um93SGVhZGVyUmVuZGVyZXJzIixhZnRlckhpZGVDb2x1bW5zOiJhZnRlckhpZGVDb2x1bW5zIixhZnRlckhpZGVSb3dzOiJhZnRlckhpZGVSb3dzIixhZnRlckluaXQ6ImFmdGVySW5pdCIsYWZ0ZXJMYW5ndWFnZUNoYW5nZToiYWZ0ZXJM''@;'; put 'put ''YW5ndWFnZUNoYW5nZSIsYWZ0ZXJMaXN0ZW46ImFmdGVyTGlzdGVuIixhZnRlckxvYWREYXRhOiJhZnRlckxvYWREYXRhIixhZnRlck1lcmdlQ2VsbHM6ImFmdGVyTWVyZ2VDZWxscyIsYWZ0ZXJNb2RpZnlUcmFuc2Zvcm1FbmQ6ImFmdGVyTW9kaWZ5VHJhbnNmb3JtRW5kIixhZnRlck1vZGlm''@;'; put 'put ''eVRyYW5zZm9ybUZvY3VzOiJhZnRlck1vZGlmeVRyYW5zZm9ybUZvY3VzIixhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0OiJhZnRlck1vZGlmeVRyYW5zZm9ybVN0YXJ0IixhZnRlck1vbWVudHVtU2Nyb2xsOiJhZnRlck1vbWVudHVtU2Nyb2xsIixhZnRlck5hbWVkRXhwcmVzc2lvbkFkZGVk''@;'; put 'put ''OiJhZnRlck5hbWVkRXhwcmVzc2lvbkFkZGVkIixhZnRlck5hbWVkRXhwcmVzc2lvblJlbW92ZWQ6ImFmdGVyTmFtZWRFeHByZXNzaW9uUmVtb3ZlZCIsYWZ0ZXJPbkNlbGxDb250ZXh0TWVudToiYWZ0ZXJPbkNlbGxDb250ZXh0TWVudSIsYWZ0ZXJPbkNlbGxDb3JuZXJEYmxDbGljazoiYWZ0''@;'; put 'put ''ZXJPbkNlbGxDb3JuZXJEYmxDbGljayIsYWZ0ZXJPbkNlbGxDb3JuZXJNb3VzZURvd246ImFmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duIixhZnRlck9uQ2VsbE1vdXNlRG93bjoiYWZ0ZXJPbkNlbGxNb3VzZURvd24iLGFmdGVyT25DZWxsTW91c2VPdXQ6ImFmdGVyT25DZWxsTW91c2VPdXQi''@;'; put 'put ''LGFmdGVyT25DZWxsTW91c2VPdmVyOiJhZnRlck9uQ2VsbE1vdXNlT3ZlciIsYWZ0ZXJPbkNlbGxNb3VzZVVwOiJhZnRlck9uQ2VsbE1vdXNlVXAiLGFmdGVyUGFzdGU6ImFmdGVyUGFzdGUiLGFmdGVyUGx1Z2luc0luaXRpYWxpemVkOiJhZnRlclBsdWdpbnNJbml0aWFsaXplZCIsYWZ0ZXJS''@;'; put 'put ''ZWRvOiJhZnRlclJlZG8iLGFmdGVyUmVkb1N0YWNrQ2hhbmdlOiJhZnRlclJlZG9TdGFja0NoYW5nZSIsYWZ0ZXJSZWZyZXNoRGltZW5zaW9uczoiYWZ0ZXJSZWZyZXNoRGltZW5zaW9ucyIsYWZ0ZXJSZW1vdmVDZWxsTWV0YToiYWZ0ZXJSZW1vdmVDZWxsTWV0YSIsYWZ0ZXJSZW1vdmVDb2w6''@;'; put 'put ''ImFmdGVyUmVtb3ZlQ29sIixhZnRlclJlbW92ZVJvdzoiYWZ0ZXJSZW1vdmVSb3ciLGFmdGVyUmVuZGVyOiJhZnRlclJlbmRlciIsYWZ0ZXJSZW5kZXJlcjoiYWZ0ZXJSZW5kZXJlciIsYWZ0ZXJSb3dNb3ZlOiJhZnRlclJvd01vdmUiLGFmdGVyUm93UmVzaXplOiJhZnRlclJvd1Jlc2l6ZSIs''@;'; put 'put ''YWZ0ZXJSb3dTZXF1ZW5jZUNoYW5nZToiYWZ0ZXJSb3dTZXF1ZW5jZUNoYW5nZSIsYWZ0ZXJTY3JvbGxIb3Jpem9udGFsbHk6ImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5IixhZnRlclNjcm9sbFZlcnRpY2FsbHk6ImFmdGVyU2Nyb2xsVmVydGljYWxseSIsYWZ0ZXJTY3JvbGw6ImFmdGVyU2Ny''@;'; put 'put ''b2xsIixhZnRlclNlbGVjdENvbHVtbnM6ImFmdGVyU2VsZWN0Q29sdW1ucyIsYWZ0ZXJTZWxlY3Rpb246ImFmdGVyU2VsZWN0aW9uIixhZnRlclNlbGVjdGlvbkJ5UHJvcDoiYWZ0ZXJTZWxlY3Rpb25CeVByb3AiLGFmdGVyU2VsZWN0aW9uRW5kOiJhZnRlclNlbGVjdGlvbkVuZCIsYWZ0ZXJT''@;'; put 'put ''ZWxlY3Rpb25FbmRCeVByb3A6ImFmdGVyU2VsZWN0aW9uRW5kQnlQcm9wIixhZnRlclNlbGVjdGlvbkZvY3VzU2V0OiJhZnRlclNlbGVjdGlvbkZvY3VzU2V0IixhZnRlclNlbGVjdFJvd3M6ImFmdGVyU2VsZWN0Um93cyIsYWZ0ZXJTZXRDZWxsTWV0YToiYWZ0ZXJTZXRDZWxsTWV0YSIsYWZ0''@;'; put 'put ''ZXJTZXREYXRhQXRDZWxsOiJhZnRlclNldERhdGFBdENlbGwiLGFmdGVyU2V0RGF0YUF0Um93UHJvcDoiYWZ0ZXJTZXREYXRhQXRSb3dQcm9wIixhZnRlclNldFNvdXJjZURhdGFBdENlbGw6ImFmdGVyU2V0U291cmNlRGF0YUF0Q2VsbCIsYWZ0ZXJTZXRUaGVtZToiYWZ0ZXJTZXRUaGVtZSIs''@;'; put 'put ''YWZ0ZXJTaGVldEFkZGVkOiJhZnRlclNoZWV0QWRkZWQiLGFmdGVyU2hlZXRSZW5hbWVkOiJhZnRlclNoZWV0UmVuYW1lZCIsYWZ0ZXJTaGVldFJlbW92ZWQ6ImFmdGVyU2hlZXRSZW1vdmVkIixhZnRlclRyaW1Sb3c6ImFmdGVyVHJpbVJvdyIsYWZ0ZXJVbmRvOiJhZnRlclVuZG8iLGFmdGVy''@;'; put 'put ''VW5kb1N0YWNrQ2hhbmdlOiJhZnRlclVuZG9TdGFja0NoYW5nZSIsYWZ0ZXJVbmhpZGVDb2x1bW5zOiJhZnRlclVuaGlkZUNvbHVtbnMiLGFmdGVyVW5oaWRlUm93czoiYWZ0ZXJVbmhpZGVSb3dzIixhZnRlclVubGlzdGVuOiJhZnRlclVubGlzdGVuIixhZnRlclVubWVyZ2VDZWxsczoiYWZ0''@;'; put 'put ''ZXJVbm1lcmdlQ2VsbHMiLGFmdGVyVW50cmltUm93OiJhZnRlclVudHJpbVJvdyIsYWZ0ZXJVcGRhdGVEYXRhOiJhZnRlclVwZGF0ZURhdGEiLGFmdGVyVXBkYXRlU2V0dGluZ3M6ImFmdGVyVXBkYXRlU2V0dGluZ3MiLGFmdGVyVmFsaWRhdGU6ImFmdGVyVmFsaWRhdGUiLGFmdGVyVmlld3Bv''@;'; put 'put ''cnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGU6ImFmdGVyVmlld3BvcnRDb2x1bW5DYWxjdWxhdG9yT3ZlcnJpZGUiLGFmdGVyVmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGU6ImFmdGVyVmlld3BvcnRSb3dDYWxjdWxhdG9yT3ZlcnJpZGUiLGFmdGVyVmlld1JlbmRlcjoiYWZ0ZXJWaWV3''@;'; put 'put ''UmVuZGVyIixiZWZvcmVBZGRDaGlsZDoiYmVmb3JlQWRkQ2hpbGQiLGJlZm9yZUF1dG9maWxsOiJiZWZvcmVBdXRvZmlsbCIsYmVmb3JlQmVnaW5FZGl0aW5nOiJiZWZvcmVCZWdpbkVkaXRpbmciLGJlZm9yZUNlbGxBbGlnbm1lbnQ6ImJlZm9yZUNlbGxBbGlnbm1lbnQiLGJlZm9yZUNoYW5n''@;'; put 'put ''ZToiYmVmb3JlQ2hhbmdlIixiZWZvcmVDaGFuZ2VSZW5kZXI6ImJlZm9yZUNoYW5nZVJlbmRlciIsYmVmb3JlQ29sdW1uQ29sbGFwc2U6ImJlZm9yZUNvbHVtbkNvbGxhcHNlIixiZWZvcmVDb2x1bW5FeHBhbmQ6ImJlZm9yZUNvbHVtbkV4cGFuZCIsYmVmb3JlQ29sdW1uRnJlZXplOiJiZWZv''@;'; put 'put ''cmVDb2x1bW5GcmVlemUiLGJlZm9yZUNvbHVtbk1vdmU6ImJlZm9yZUNvbHVtbk1vdmUiLGJlZm9yZUNvbHVtblJlc2l6ZToiYmVmb3JlQ29sdW1uUmVzaXplIixiZWZvcmVDb2x1bW5Tb3J0OiJiZWZvcmVDb2x1bW5Tb3J0IixiZWZvcmVDb2x1bW5XcmFwOiJiZWZvcmVDb2x1bW5XcmFwIixi''@;'; put 'put ''ZWZvcmVDb2x1bW5VbmZyZWV6ZToiYmVmb3JlQ29sdW1uVW5mcmVlemUiLGJlZm9yZUNvbnRleHRNZW51U2V0SXRlbXM6ImJlZm9yZUNvbnRleHRNZW51U2V0SXRlbXMiLGJlZm9yZUNvbnRleHRNZW51U2hvdzoiYmVmb3JlQ29udGV4dE1lbnVTaG93IixiZWZvcmVDb3B5OiJiZWZvcmVDb3B5''@;'; put 'put ''IixiZWZvcmVDcmVhdGVDb2w6ImJlZm9yZUNyZWF0ZUNvbCIsYmVmb3JlQ3JlYXRlUm93OiJiZWZvcmVDcmVhdGVSb3ciLGJlZm9yZUN1dDoiYmVmb3JlQ3V0IixiZWZvcmVEZXRhY2hDaGlsZDoiYmVmb3JlRGV0YWNoQ2hpbGQiLGJlZm9yZURyYXdCb3JkZXJzOiJiZWZvcmVEcmF3Qm9yZGVy''@;'; put 'put ''cyIsYmVmb3JlRHJvcGRvd25NZW51U2V0SXRlbXM6ImJlZm9yZURyb3Bkb3duTWVudVNldEl0ZW1zIixiZWZvcmVEcm9wZG93bk1lbnVTaG93OiJiZWZvcmVEcm9wZG93bk1lbnVTaG93IixiZWZvcmVGaWx0ZXI6ImJlZm9yZUZpbHRlciIsYmVmb3JlR2V0Q2VsbE1ldGE6ImJlZm9yZUdldENl''@;'; put 'put ''bGxNZXRhIixiZWZvcmVIaWRlQ29sdW1uczoiYmVmb3JlSGlkZUNvbHVtbnMiLGJlZm9yZUhpZGVSb3dzOiJiZWZvcmVIaWRlUm93cyIsYmVmb3JlSGlnaGxpZ2h0aW5nQ29sdW1uSGVhZGVyOiJiZWZvcmVIaWdobGlnaHRpbmdDb2x1bW5IZWFkZXIiLGJlZm9yZUhpZ2hsaWdodGluZ1Jvd0hl''@;'; put 'put ''YWRlcjoiYmVmb3JlSGlnaGxpZ2h0aW5nUm93SGVhZGVyIixiZWZvcmVJbml0OiJiZWZvcmVJbml0IixiZWZvcmVJbml0V2Fsa29udGFibGU6ImJlZm9yZUluaXRXYWxrb250YWJsZSIsYmVmb3JlS2V5RG93bjoiYmVmb3JlS2V5RG93biIsYmVmb3JlTGFuZ3VhZ2VDaGFuZ2U6ImJlZm9yZUxh''@;'; put 'put ''bmd1YWdlQ2hhbmdlIixiZWZvcmVMb2FkRGF0YToiYmVmb3JlTG9hZERhdGEiLGJlZm9yZU1lcmdlQ2VsbHM6ImJlZm9yZU1lcmdlQ2VsbHMiLGJlZm9yZU9uQ2VsbENvbnRleHRNZW51OiJiZWZvcmVPbkNlbGxDb250ZXh0TWVudSIsYmVmb3JlT25DZWxsTW91c2VEb3duOiJiZWZvcmVPbkNl''@;'; put 'put ''bGxNb3VzZURvd24iLGJlZm9yZU9uQ2VsbE1vdXNlT3V0OiJiZWZvcmVPbkNlbGxNb3VzZU91dCIsYmVmb3JlT25DZWxsTW91c2VPdmVyOiJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLGJlZm9yZU9uQ2VsbE1vdXNlVXA6ImJlZm9yZU9uQ2VsbE1vdXNlVXAiLGJlZm9yZVBhc3RlOiJiZWZvcmVQ''@;'; put 'put ''YXN0ZSIsYmVmb3JlUmVkbzoiYmVmb3JlUmVkbyIsYmVmb3JlUmVkb1N0YWNrQ2hhbmdlOiJiZWZvcmVSZWRvU3RhY2tDaGFuZ2UiLGJlZm9yZVJlZnJlc2hEaW1lbnNpb25zOiJiZWZvcmVSZWZyZXNoRGltZW5zaW9ucyIsYmVmb3JlUmVtb3ZlQ2VsbENsYXNzTmFtZXM6ImJlZm9yZVJlbW92''@;'; put 'put ''ZUNlbGxDbGFzc05hbWVzIixiZWZvcmVSZW1vdmVDZWxsTWV0YToiYmVmb3JlUmVtb3ZlQ2VsbE1ldGEiLGJlZm9yZVJlbW92ZUNvbDoiYmVmb3JlUmVtb3ZlQ29sIixiZWZvcmVSZW1vdmVSb3c6ImJlZm9yZVJlbW92ZVJvdyIsYmVmb3JlUmVuZGVyOiJiZWZvcmVSZW5kZXIiLGJlZm9yZVJl''@;'; put 'put ''bmRlcmVyOiJiZWZvcmVSZW5kZXJlciIsYmVmb3JlUm93TW92ZToiYmVmb3JlUm93TW92ZSIsYmVmb3JlUm93UmVzaXplOiJiZWZvcmVSb3dSZXNpemUiLGJlZm9yZVJvd1dyYXA6ImJlZm9yZVJvd1dyYXAiLGJlZm9yZVNlbGVjdENvbHVtbnM6ImJlZm9yZVNlbGVjdENvbHVtbnMiLGJlZm9y''@;'; put 'put ''ZVNlbGVjdGlvbkZvY3VzU2V0OiJiZWZvcmVTZWxlY3Rpb25Gb2N1c1NldCIsYmVmb3JlU2VsZWN0aW9uSGlnaGxpZ2h0U2V0OiJiZWZvcmVTZWxlY3Rpb25IaWdobGlnaHRTZXQiLGJlZm9yZVNlbGVjdFJvd3M6ImJlZm9yZVNlbGVjdFJvd3MiLGJlZm9yZVNldENlbGxNZXRhOiJiZWZvcmVT''@;'; put 'put ''ZXRDZWxsTWV0YSIsYmVmb3JlU2V0UmFuZ2VFbmQ6ImJlZm9yZVNldFJhbmdlRW5kIixiZWZvcmVTZXRSYW5nZVN0YXJ0OiJiZWZvcmVTZXRSYW5nZVN0YXJ0IixiZWZvcmVTZXRSYW5nZVN0YXJ0T25seToiYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHkiLGJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5X''@;'; put 'put ''aWR0aDoiYmVmb3JlU3RyZXRjaGluZ0NvbHVtbldpZHRoIixiZWZvcmVUb3VjaFNjcm9sbDoiYmVmb3JlVG91Y2hTY3JvbGwiLGJlZm9yZVRyaW1Sb3c6ImJlZm9yZVRyaW1Sb3ciLGJlZm9yZVVuZG86ImJlZm9yZVVuZG8iLGJlZm9yZVVuZG9TdGFja0NoYW5nZToiYmVmb3JlVW5kb1N0YWNr''@;'; put 'put ''Q2hhbmdlIixiZWZvcmVVbmhpZGVDb2x1bW5zOiJiZWZvcmVVbmhpZGVDb2x1bW5zIixiZWZvcmVVbmhpZGVSb3dzOiJiZWZvcmVVbmhpZGVSb3dzIixiZWZvcmVVbm1lcmdlQ2VsbHM6ImJlZm9yZVVubWVyZ2VDZWxscyIsYmVmb3JlVW50cmltUm93OiJiZWZvcmVVbnRyaW1Sb3ciLGJlZm9y''@;'; put 'put ''ZVVwZGF0ZURhdGE6ImJlZm9yZVVwZGF0ZURhdGEiLGJlZm9yZVZhbGlkYXRlOiJiZWZvcmVWYWxpZGF0ZSIsYmVmb3JlVmFsdWVSZW5kZXI6ImJlZm9yZVZhbHVlUmVuZGVyIixiZWZvcmVWaWV3cG9ydFNjcm9sbDoiYmVmb3JlVmlld3BvcnRTY3JvbGwiLGJlZm9yZVZpZXdwb3J0U2Nyb2xs''@;'; put 'put ''SG9yaXpvbnRhbGx5OiJiZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseSIsYmVmb3JlVmlld3BvcnRTY3JvbGxWZXJ0aWNhbGx5OiJiZWZvcmVWaWV3cG9ydFNjcm9sbFZlcnRpY2FsbHkiLGJlZm9yZVZpZXdSZW5kZXI6ImJlZm9yZVZpZXdSZW5kZXIiLGNvbnN0cnVjdDoiY29uc3Ry''@;'; put 'put ''dWN0Iixpbml0OiJpbml0Iixtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQ6Im1vZGlmeUF1dG9Db2x1bW5TaXplU2VlZCIsbW9kaWZ5QXV0b2ZpbGxSYW5nZToibW9kaWZ5QXV0b2ZpbGxSYW5nZSIsbW9kaWZ5Q29sSGVhZGVyOiJtb2RpZnlDb2xIZWFkZXIiLG1vZGlmeUNvbHVtbkhlYWRlckhl''@;'; put 'put ''aWdodDoibW9kaWZ5Q29sdW1uSGVhZGVySGVpZ2h0Iixtb2RpZnlDb2x1bW5IZWFkZXJWYWx1ZToibW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWUiLG1vZGlmeUNvbFdpZHRoOiJtb2RpZnlDb2xXaWR0aCIsbW9kaWZ5Q29weWFibGVSYW5nZToibW9kaWZ5Q29weWFibGVSYW5nZSIsbW9kaWZ5Rmls''@;'; put 'put ''dGVyc011bHRpU2VsZWN0VmFsdWU6Im1vZGlmeUZpbHRlcnNNdWx0aVNlbGVjdFZhbHVlIixtb2RpZnlGb2N1c2VkRWxlbWVudDoibW9kaWZ5Rm9jdXNlZEVsZW1lbnQiLG1vZGlmeURhdGE6Im1vZGlmeURhdGEiLG1vZGlmeUZvY3VzT25UYWJOYXZpZ2F0aW9uOiJtb2RpZnlGb2N1c09uVGFi''@;'; put 'put ''TmF2aWdhdGlvbiIsbW9kaWZ5R2V0Q2VsbENvb3JkczoibW9kaWZ5R2V0Q2VsbENvb3JkcyIsbW9kaWZ5R2V0Q29vcmRzRWxlbWVudDoibW9kaWZ5R2V0Q29vcmRzRWxlbWVudCIsbW9kaWZ5Um93RGF0YToibW9kaWZ5Um93RGF0YSIsbW9kaWZ5Um93SGVhZGVyOiJtb2RpZnlSb3dIZWFkZXIi''@;'; put 'put ''LG1vZGlmeVJvd0hlYWRlcldpZHRoOiJtb2RpZnlSb3dIZWFkZXJXaWR0aCIsbW9kaWZ5Um93SGVpZ2h0OiJtb2RpZnlSb3dIZWlnaHQiLG1vZGlmeVJvd0hlaWdodEJ5T3ZlcmxheU5hbWU6Im1vZGlmeVJvd0hlaWdodEJ5T3ZlcmxheU5hbWUiLG1vZGlmeVNvdXJjZURhdGE6Im1vZGlmeVNv''@;'; put 'put ''dXJjZURhdGEiLG1vZGlmeVRyYW5zZm9ybUVuZDoibW9kaWZ5VHJhbnNmb3JtRW5kIixtb2RpZnlUcmFuc2Zvcm1Gb2N1czoibW9kaWZ5VHJhbnNmb3JtRm9jdXMiLG1vZGlmeVRyYW5zZm9ybVN0YXJ0OiJtb2RpZnlUcmFuc2Zvcm1TdGFydCIscGVyc2lzdGVudFN0YXRlTG9hZDoicGVyc2lz''@;'; put 'put ''dGVudFN0YXRlTG9hZCIscGVyc2lzdGVudFN0YXRlUmVzZXQ6InBlcnNpc3RlbnRTdGF0ZVJlc2V0IixwZXJzaXN0ZW50U3RhdGVTYXZlOiJwZXJzaXN0ZW50U3RhdGVTYXZlIn0sZmVhdHVyZXM6W3BvKFtabSxtcGVdKSx5bF0sZGVjbHM6Mix2YXJzOjEsY29uc3RzOltbImNvbnRhaW5lciIs''@;'; put 'put ''IiJdLFszLCJpZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmR3QoMCwiZGl2IiwxLDApLDImZCYmeGUoImlkIixoLmhvdElkKX0sZW5jYXBzdWxhdGlvbjoyfSl9cmV0dXJuIGN9KSgpLG45PSgoKT0+e2NsYXNzIGN7c3RhdGljIHZlcnNpb249IjE1LjIuMCI7c3RhdGljIGZvclJv''@;'; put 'put ''b3QoKXtyZXR1cm57bmdNb2R1bGU6Yyxwcm92aWRlcnM6W1ptXX19c3RhdGljIFx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfTtzdGF0aWMgXHUwMjc1bW9kPWtpKHt0eXBlOmN9KTtzdGF0aWMgXHUwMjc1aW5qPUFyKHt9KX1yZXR1cm4gY30pKCk7Y29uc3QgdnBlPSJo''@;'; put 'put ''YW5kc29udGFibGVFZGl0b3IiO2NsYXNzIF9YIGV4dGVuZHMgdDl7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJoYW5kc29udGFibGUifW9wZW4oKXtzdXBlci5vcGVuKCk7Y29uc3QgbD10aGlzLmh0Q29udGFpbmVyLnN0eWxlO3RoaXMuaHRFZGl0b3ImJih0aGlzLmh0RWRpdG9y''@;'; put 'put ''LmRlc3Ryb3koKSxsLndpZHRoPSIiLGwuaGVpZ2h0PSIiLGwub3ZlcmZsb3c9IiIpLCJub25lIj09PWwuZGlzcGxheSYmKGwuZGlzcGxheT0iIiksdGhpcy5odEVkaXRvcj1uZXcgdGhpcy5ob3QuY29uc3RydWN0b3IodGhpcy5odENvbnRhaW5lcix0aGlzLmh0T3B0aW9ucyksdGhpcy5odEVk''@;'; put 'put ''aXRvci5pbml0KCksdGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZS5kaXNwbGF5PSIiLHRoaXMuY2VsbFByb3BlcnRpZXMuc3RyaWN0P3RoaXMuaHRFZGl0b3Iuc2VsZWN0Q2VsbCgwLDApOnRoaXMuaHRFZGl0b3IuZGVzZWxlY3RDZWxsKCksYkUodGhpcy5URVhUQVJFQSwwLHRoaXMu''@;'; put 'put ''VEVYVEFSRUEudmFsdWUubGVuZ3RoKSx0aGlzLmh0RWRpdG9yLnVwZGF0ZVNldHRpbmdzKHt3aWR0aDp0aGlzLmdldFdpZHRoKCksaGVpZ2h0OnRoaXMuZ2V0SGVpZ2h0KCl9KSx0aGlzLnJlZnJlc2hEaW1lbnNpb25zKCl9Y2xvc2UoKXt0aGlzLmh0RWRpdG9yJiYodGhpcy5odEVkaXRvci5y''@;'; put 'put ''b290RWxlbWVudC5zdHlsZS5kaXNwbGF5PSJub25lIiksdGhpcy5yZW1vdmVIb29rc0J5S2V5KCJiZWZvcmVLZXlEb3duIiksc3VwZXIuY2xvc2UoKX1wcmVwYXJlKGwsYSxkLGgsZix2KXtzdXBlci5wcmVwYXJlKGwsYSxkLGgsZix2KTtjb25zdCBNPXRoaXMsRD17c3RhcnRSb3dzOjAsc3Rh''@;'; put 'put ''cnRDb2xzOjAsbWluUm93czowLG1pbkNvbHM6MCxjbGFzc05hbWU6Imxpc3Rib3giLGNvcHlQYXN0ZTohMSxhdXRvQ29sdW1uU2l6ZTohMSxhdXRvUm93U2l6ZTohMSxyZWFkT25seTohMCxmaWxsSGFuZGxlOiExLGF1dG9XcmFwQ29sOiExLGF1dG9XcmFwUm93OiExLGFyaWFUYWdzOiExLHRo''@;'; put 'put ''ZW1lTmFtZTp0aGlzLmhvdC5nZXRDdXJyZW50VGhlbWVOYW1lKCksYWZ0ZXJPbkNlbGxNb3VzZURvd24oWixuZSl7Y29uc3QgY2U9dGhpcy5nZXRTb3VyY2VEYXRhKG5lLnJvdyxuZS5jb2wpO3ZvaWQgMCE9PWNlJiZNLnNldFZhbHVlKGNlKSxNLmhvdC5kZXN0cm95RWRpdG9yKCl9LHByZXZl''@;'; put 'put ''bnRXaGVlbDohMCxsYXlvdXREaXJlY3Rpb246dGhpcy5ob3QuaXNSdGwoKT8icnRsIjoibHRyIn07dGhpcy5jZWxsUHJvcGVydGllcy5oYW5kc29udGFibGUmJnh1KEQsdi5oYW5kc29udGFibGUpLHRoaXMuaHRPcHRpb25zPUR9YmVnaW5FZGl0aW5nKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5n''@;'; put 'put ''ZXRTZXR0aW5ncygpLm9uQmVnaW5FZGl0aW5nO2QmJiExPT09ZCgpfHxzdXBlci5iZWdpbkVkaXRpbmcobCxhKX1jcmVhdGVFbGVtZW50cygpe3N1cGVyLmNyZWF0ZUVsZW1lbnRzKCk7Y29uc3QgbD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIik7bC5jbGFzc05h''@;'; put 'put ''bWU9ImhhbmRzb250YWJsZUVkaXRvciIsdGhpcy5URVhUQVJFQV9QQVJFTlQuYXBwZW5kQ2hpbGQobCksdGhpcy5odENvbnRhaW5lcj1sLHRoaXMuYXNzaWduSG9va3MoKX1maW5pc2hFZGl0aW5nKGwsYSxkKXtpZih0aGlzLmh0RWRpdG9yJiZ0aGlzLmh0RWRpdG9yLmlzTGlzdGVuaW5nKCkm''@;'; put 'put ''JnRoaXMuaG90Lmxpc3RlbigpLHRoaXMuaHRFZGl0b3ImJnRoaXMuaHRFZGl0b3IuZ2V0U2VsZWN0ZWRMYXN0KCkpe2NvbnN0IGg9dGhpcy5odEVkaXRvci5nZXRWYWx1ZSgpO3ZvaWQgMCE9PWgmJnRoaXMuc2V0VmFsdWUoaCl9c3VwZXIuZmluaXNoRWRpdGluZyhsLGEsZCl9Z2V0SGVpZ2h0''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuaHRFZGl0b3Iudmlldy5nZXRUYWJsZUhlaWdodCgpKzF9Z2V0V2lkdGgoKXtyZXR1cm4gdGhpcy5odEVkaXRvci52aWV3LmdldFRhYmxlV2lkdGgoKX1hc3NpZ25Ib29rcygpe3RoaXMuaG90LmFkZEhvb2soImFmdGVyRGVzdHJveSIsKCk9Pnt2YXIgbDtudWxsPT09''@;'; put 'put ''KGw9dGhpcy5odEVkaXRvcil8fHZvaWQgMD09PWx8fGwuZGVzdHJveSgpfSksdGhpcy5ob3QuYWRkSG9vaygiYWZ0ZXJTZXRUaGVtZSIsKGwsYSk9Pnt2YXIgZDthfHxudWxsPT09KGQ9dGhpcy5odEVkaXRvcil8fHZvaWQgMD09PWR8fGQudXNlVGhlbWUobCl9KX1yZWdpc3RlclNob3J0Y3V0''@;'; put 'put ''cygpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIik7c3VwZXIucmVnaXN0ZXJTaG9ydGN1dHMoKTtjb25zdCBoPShmLHYpPT57Y29uc3QgTT10aGlzLmh0RWRpdG9yO2lmKHZvaWQgMCE9PWYmJihmPDB8fE0uZmxpcHBlZCYmZj5NLmNv''@;'; put 'put ''dW50Um93cygpLTE/TS5kZXNlbGVjdENlbGwoKTpNLnNlbGVjdENlbGwoZiwwKSxNLmdldERhdGEoKS5sZW5ndGgpKXJldHVybiB2LnByZXZlbnREZWZhdWx0KCksUjIodiksdGhpcy5ob3QubGlzdGVuKCksdGhpcy5URVhUQVJFQS5mb2N1cygpLCExfTthLmFkZFNob3J0Y3V0cyhbe2tleXM6''@;'; put 'put ''W1siQXJyb3dVcCJdXSxjYWxsYmFjazpmPT57Y29uc3Qgdj10aGlzLmh0RWRpdG9yO2xldCBNLEQ7cmV0dXJuIXYuZ2V0U2VsZWN0ZWRMYXN0KCkmJnYuZmxpcHBlZD9NPXYuY291bnRSb3dzKCktMTp2LmdldFNlbGVjdGVkTGFzdCgpJiYodi5mbGlwcGVkPyhEPXYuZ2V0U2VsZWN0ZWRMYXN0''@;'; put 'put ''KClbMF0sTT1NYXRoLm1heCgwLEQtMSkpOihEPXYuZ2V0U2VsZWN0ZWRMYXN0KClbMF0sTT1ELTEpKSxoKE0sZil9LHByZXZlbnREZWZhdWx0OiExfSx7a2V5czpbWyJBcnJvd0Rvd24iXV0sY2FsbGJhY2s6Zj0+e2NvbnN0IHY9dGhpcy5odEVkaXRvcjtsZXQgTSxEO2lmKHYuZ2V0U2VsZWN0''@;'; put 'put ''ZWRMYXN0KCl8fHYuZmxpcHBlZCl7aWYodi5nZXRTZWxlY3RlZExhc3QoKSlpZih2LmZsaXBwZWQpTT12LmdldFNlbGVjdGVkTGFzdCgpWzBdKzE7ZWxzZSBpZighdi5mbGlwcGVkKXtjb25zdCBaPXYuY291bnRSb3dzKCktMTtEPXYuZ2V0U2VsZWN0ZWRMYXN0KClbMF0sTT1NYXRoLm1pbiha''@;'; put 'put ''LEQrMSl9fWVsc2UgTT0wO3JldHVybiBoKE0sZil9LHByZXZlbnREZWZhdWx0OiExfV0se2dyb3VwOnZwZSxyZWxhdGl2ZVRvR3JvdXA6VW0scG9zaXRpb246ImJlZm9yZSJ9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7c3VwZXIudW5yZWdpc3RlclNob3J0Y3V0cygpLHRoaXMuaG90LmdldFNo''@;'; put 'put ''b3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImVkaXRvciIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAodnBlKX19ZnVuY3Rpb24gYnBlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2lj''@;'; put 'put ''ZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBQUChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gVXJ0KGMpe3ZhciBsPWZ1bmN0aW9uIFpydChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3Zh''@;'; put 'put ''ciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0o''@;'; put 'put ''Yywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24geXBlKGMsbCl7cmV0dXJu''@;'; put 'put ''IGMuZ2V0KHdYKGMsbCkpfWZ1bmN0aW9uIHdYKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBv''@;'; put 'put ''YmplY3QiKX12YXIgQ1g9bmV3IFdlYWtNYXAsU1g9bmV3IFdlYWtTZXQ7Y2xhc3MgTVggZXh0ZW5kcyBfWHtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24ganJ0KGMsbCl7YnBlKGMsbCksbC5hZGQoYyl9KHRoaXMsU1gpLFBQKHRoaXMsInF1ZXJ5IixudWxsKSxQ''@;'; put 'put ''UCh0aGlzLCJzdHJpcHBlZENob2ljZXMiLFtdKSxQUCh0aGlzLCJyYXdDaG9pY2VzIixbXSksZnVuY3Rpb24genJ0KGMsbCxhKXticGUoYyxsKSxsLnNldChjLGEpfSh0aGlzLENYLHRoaXMuaG90Lmd1aWQuc2xpY2UoMCw5KSksUFAodGhpcywic29ydEJ5UmVsZXZhbmNlIixmdW5jdGlvbihs''@;'; put 'put ''LGEsZCl7Y29uc3QgaD1bXSxmPVtdLHY9bC5sZW5ndGg7bGV0IEQsWixuZSxjZSxNPWEubGVuZ3RoO2lmKDA9PT12KXtmb3IobmU9MDtuZTxNO25lKyspZi5wdXNoKG5lKTtyZXR1cm4gZn1mb3IobmU9MDtuZTxNO25lKyspe2lmKFo9biQoemMoYVtuZV0pKSxkKWNlPVouaW5kZXhPZihsKTtl''@;'; put 'put ''bHNle2NvbnN0IGJlPXRoaXMuY2VsbFByb3BlcnRpZXMubG9jYWxlO2NlPVoudG9Mb2NhbGVMb3dlckNhc2UoYmUpLmluZGV4T2YobC50b0xvY2FsZUxvd2VyQ2FzZShiZSkpfS0xIT09Y2UmJihEPVoubGVuZ3RoLWNlLXYsaC5wdXNoKHtiYXNlSW5kZXg6bmUsaW5kZXg6Y2UsY2hhcnNMZWZ0''@;'; put 'put ''OkQsdmFsdWU6Wn0pKX1mb3IoaC5zb3J0KChiZSxFZSk9PntpZigtMT09PUVlLmluZGV4KXJldHVybi0xO2lmKC0xPT09YmUuaW5kZXgpcmV0dXJuIDE7aWYoYmUuaW5kZXg8RWUuaW5kZXgpcmV0dXJuLTE7aWYoRWUuaW5kZXg8YmUuaW5kZXgpcmV0dXJuIDE7aWYoYmUuaW5kZXg9PT1FZS5p''@;'; put 'put ''bmRleCl7aWYoYmUuY2hhcnNMZWZ0PEVlLmNoYXJzTGVmdClyZXR1cm4tMTtpZihiZS5jaGFyc0xlZnQ+RWUuY2hhcnNMZWZ0KXJldHVybiAxfXJldHVybiAwfSksbmU9MCxNPWgubGVuZ3RoO25lPE07bmUrKylmLnB1c2goaFtuZV0uYmFzZUluZGV4KTtyZXR1cm4gZn0pfXN0YXRpYyBnZXQg''@;'; put 'put ''RURJVE9SX1RZUEUoKXtyZXR1cm4iYXV0b2NvbXBsZXRlIn1nZXRWYWx1ZSgpe2NvbnN0IGw9dGhpcy5yYXdDaG9pY2VzLmZpbmQoYT0+dGhpcy5zdHJpcFZhbHVlSWZOZWVkZWQoYSk9PT10aGlzLlRFWFRBUkVBLnZhbHVlKTtyZXR1cm4gRm8obCk/bDp0aGlzLlRFWFRBUkVBLnZhbHVlfWNy''@;'; put 'put ''ZWF0ZUVsZW1lbnRzKCl7c3VwZXIuY3JlYXRlRWxlbWVudHMoKSxUaSh0aGlzLmh0Q29udGFpbmVyLCJhdXRvY29tcGxldGVFZGl0b3IiKSxUaSh0aGlzLmh0Q29udGFpbmVyLC0xPT09dGhpcy5ob3Qucm9vdFdpbmRvdy5uYXZpZ2F0b3IucGxhdGZvcm0uaW5kZXhPZigiTWFjIik/IiI6Imh0''@;'; put 'put ''TWFjU2Nyb2xsIiksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmdmEodGhpcy5URVhUQVJFQSxbWyJ0eXBlIiwidGV4dCJdLFsicm9sZSIsImNvbWJvYm94Il0sYzJlKCJsaXN0Ym94IiksWyJhcmlhLWF1dG9jb21wbGV0ZSIsImxpc3QiXV0pfXByZXBhcmUobCxhLGQsaCxmLHYp''@;'; put 'put ''e3N1cGVyLnByZXBhcmUobCxhLGQsaCxmLHYpLHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJnZhKHRoaXMuVEVYVEFSRUEsW0QyKCJmYWxzZSIpLE5LZShgJHt5cGUoQ1gsdGhpcyl9LWxpc3Rib3gtJHtsfS0ke2F9YCldKX1vcGVuKCl7c3VwZXIub3BlbigpO2NvbnN0IGw9dm9p''@;'; put 'put ''ZCAwPT09dGhpcy5jZWxsUHJvcGVydGllcy50cmltRHJvcGRvd258fHRoaXMuY2VsbFByb3BlcnRpZXMudHJpbURyb3Bkb3duLGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyxkPUFycmF5LmlzQXJyYXkodGhpcy5jZWxsUHJvcGVydGllcy5zb3VyY2UpP3RoaXMuY2VsbFByb3Bl''@;'; put 'put ''cnRpZXMuc291cmNlOm51bGwsaD1kPy5sZW5ndGgse3JvdzpmLGNvbDp2fT10aGlzO3RoaXMuc2hvd0VkaXRhYmxlRWxlbWVudCgpLHRoaXMuZm9jdXMoKSx0aGlzLmFkZEhvb2soImJlZm9yZUtleURvd24iLE09PnRoaXMub25CZWZvcmVLZXlEb3duKE0pKSx0aGlzLmh0RWRpdG9yLnVwZGF0''@;'; put 'put ''ZVNldHRpbmdzKHtjb2xXaWR0aHM6bD9bYXUodGhpcy5URVhUQVJFQSktMl06dm9pZCAwLGF1dG9Db2x1bW5TaXplOiEwLGF1dG9Sb3dTaXplOiEwLHJlbmRlcmVyOihNLEQsWixuZSxjZSxiZSxFZSk9PntNZyhNLEQsWixuZSxjZSxiZSxFZSk7Y29uc3R7ZmlsdGVyaW5nQ2FzZVNlbnNpdGl2''@;'; put 'put ''ZTpCZSxhbGxvd0h0bWw6cWUsbG9jYWxlOm50fT10aGlzLmNlbGxQcm9wZXJ0aWVzLGx0PXRoaXMucXVlcnk7bGV0IEp0LHluLG10PXpjKGJlKTttdCYmIXFlJiYoSnQ9ITA9PT1CZT9tdC5pbmRleE9mKGx0KTptdC50b0xvY2FsZUxvd2VyQ2FzZShudCkuaW5kZXhPZihsdC50b0xvY2FsZUxv''@;'; put 'put ''d2VyQ2FzZShudCkpLC0xIT09SnQmJih5bj1tdC5zdWJzdHIoSnQsbHQubGVuZ3RoKSxtdD1tdC5yZXBsYWNlKHluLGA8c3Ryb25nPiR7eW59PC9zdHJvbmc+YCkpKSxhJiZ2YShELFtbInJvbGUiLCJvcHRpb24iXSwuLi5kP1t6S2UoaCldOltdLC4uLmQ/W1VLZShkLmluZGV4T2YoYmUpKzEp''@;'; put 'put ''XTpbXSxbImlkIixgJHt0aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LmlkfV8ke1p9LSR7bmV9YF1dKSxELmlubmVySFRNTD1tdH0sYWZ0ZXJTZWxlY3Rpb25FbmQ6KE0sRCk9PntpZihhKXtjb25zdCBaPXRoaXMuaHRFZGl0b3IuZ2V0Q2VsbChNLEQsITApO3ZhKFosW1siYXJpYS1zZWxlY3Rl''@;'; put 'put ''ZCIsInRydWUiXV0pLHZhKHRoaXMuVEVYVEFSRUEsLi4uKGM9PlsiYXJpYS1hY3RpdmVkZXNjZW5kYW50IixjXSkoWi5pZCkpfX19KSxhJiYodmEodGhpcy5odEVkaXRvci52aWV3Ll93dC53dE92ZXJsYXlzLnd0VGFibGUuVEFCTEUsLi4uX3AoKSksdmEodGhpcy5odEVkaXRvci5yb290RWxl''@;'; put 'put ''bWVudCxbWyJyb2xlIiwibGlzdGJveCJdLEJLZSgicG9saXRlIiksaktlKCJ0ZXh0IiksWyJpZCIsYCR7eXBlKENYLHRoaXMpfS1saXN0Ym94LSR7Zn0tJHt2fWBdXSksdmEodGhpcy5URVhUQVJFQSwuLi5EMigidHJ1ZSIpKSksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e3RoaXMu''@;'; put 'put ''cXVlcnlDaG9pY2VzKHRoaXMuVEVYVEFSRUEudmFsdWUpfSl9Y2xvc2UoKXt0aGlzLnJlbW92ZUhvb2tzQnlLZXkoImJlZm9yZUtleURvd24iKSxzdXBlci5jbG9zZSgpLHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJnZhKHRoaXMuVEVYVEFSRUEsW0QyKCJmYWxzZSIpXSl9ZGlz''@;'; put 'put ''Y2FyZEVkaXRvcihsKXtzdXBlci5kaXNjYXJkRWRpdG9yKGwpLHRoaXMuaG90LnZpZXcucmVuZGVyKCl9cXVlcnlDaG9pY2VzKGwpe2NvbnN0IGE9dGhpcy5jZWxsUHJvcGVydGllcy5zb3VyY2U7dGhpcy5xdWVyeT1sLCJmdW5jdGlvbiI9PXR5cGVvZiBhP2EuY2FsbCh0aGlzLmNlbGxQcm9w''@;'; put 'put ''ZXJ0aWVzLGwsZD0+e3RoaXMucmF3Q2hvaWNlcz1kLHRoaXMudXBkYXRlQ2hvaWNlc0xpc3QodGhpcy5zdHJpcFZhbHVlc0lmTmVlZGVkKGQpKX0pOkFycmF5LmlzQXJyYXkoYSk/KHRoaXMucmF3Q2hvaWNlcz1hLHRoaXMudXBkYXRlQ2hvaWNlc0xpc3QodGhpcy5zdHJpcFZhbHVlc0lmTmVl''@;'; put 'put ''ZGVkKGEpKSk6dGhpcy51cGRhdGVDaG9pY2VzTGlzdChbXSl9dXBkYXRlQ2hvaWNlc0xpc3QobCl7Y29uc3QgYT11JCh0aGlzLlRFWFRBUkVBKSxkPU0yZSh0aGlzLlRFWFRBUkVBKSxoPXRoaXMuY2VsbFByb3BlcnRpZXMuc29ydEJ5UmVsZXZhbmNlLGY9dGhpcy5jZWxsUHJvcGVydGllcy5m''@;'; put 'put ''aWx0ZXI7bGV0IHY9bnVsbCxNPW51bGwsRD1sO2gmJih2PXRoaXMuc29ydEJ5UmVsZXZhbmNlKHRoaXMuc3RyaXBWYWx1ZUlmTmVlZGVkKHRoaXMuZ2V0VmFsdWUoKSksRCx0aGlzLmNlbGxQcm9wZXJ0aWVzLmZpbHRlcmluZ0Nhc2VTZW5zaXRpdmUpKTtjb25zdCBaPUFycmF5LmlzQXJyYXko''@;'; put 'put ''dik/di5sZW5ndGg6MDtpZighMT09PWYpTT1aPjA/dlswXTowO2Vsc2V7Y29uc3QgbmU9W107Zm9yKGxldCBjZT0wLGJlPUQubGVuZ3RoO2NlPGJlJiYhKGgmJlo8PWNlKTtjZSsrKW5lLnB1c2goWj9EW3ZbY2VdXTpEW2NlXSk7TT0wLEQ9bmV9dGhpcy5zdHJpcHBlZENob2ljZXM9RCx0aGlz''@;'; put 'put ''Lmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0eWxlLmRpc3BsYXk9MD09PUQubGVuZ3RoPyJub25lIjoiIix0aGlzLmh0RWRpdG9yLmxvYWREYXRhKHVFKFtEXSkpLEQubGVuZ3RoPjAmJih0aGlzLnVwZGF0ZURyb3Bkb3duRGltZW5zaW9ucygpLHRoaXMuZmxpcERyb3Bkb3duSWZOZWVkZWQoKSwh''@;'; put 'put ''MD09PXRoaXMuY2VsbFByb3BlcnRpZXMuc3RyaWN0JiZ0aGlzLmhpZ2hsaWdodEJlc3RNYXRjaGluZ0Nob2ljZShNKSksdGhpcy5ob3QubGlzdGVuKCksYkUodGhpcy5URVhUQVJFQSxhLGE9PT1kP3ZvaWQgMDpkKX1mbGlwRHJvcGRvd25JZk5lZWRlZCgpe2NvbnN0IGw9dGhpcy5nZXRFZGl0''@;'; put 'put ''ZWRDZWxsUmVjdCgpLGE9bC5oZWlnaHQ7bGV0IGQ9bC50b3A7aWYodGhpcy5ob3Qudmlldy5pc1ZlcnRpY2FsbHlTY3JvbGxhYmxlQnlXaW5kb3coKSl7Y29uc3QgTT10aGlzLmhvdC52aWV3LmdldFRhYmxlT2Zmc2V0KCkudG9wLXRoaXMuaG90LnJvb3RXaW5kb3cuc2Nyb2xsWTtkPU1hdGgu''@;'; put 'put ''bWF4KGQrTSwwKX1jb25zdCBoPXRoaXMuZ2V0SGVpZ2h0KCksZj10aGlzLmhvdC52aWV3LmdldFdvcmtzcGFjZUhlaWdodCgpLWQtYSx2PWg+ZiYmZD5mK2E7cmV0dXJuIHY/dGhpcy5mbGlwRHJvcGRvd24oaCk6dGhpcy51bmZsaXBEcm9wZG93bigpLHRoaXMubGltaXREcm9wZG93bklmTmVl''@;'; put 'put ''ZGVkKHY/ZDpmLGgpLHZ9bGltaXREcm9wZG93bklmTmVlZGVkKGwsYSl7aWYoYT5sKXtsZXQgZD0wLGg9MCxmPTAsdj1udWxsO2Rve2Y9dGhpcy5odEVkaXRvci5nZXRSb3dIZWlnaHQoaCl8fHRoaXMuaHRFZGl0b3Iudmlldy5nZXREZWZhdWx0Um93SGVpZ2h0KCksZCs9ZixoKz0xfXdoaWxl''@;'; put 'put ''KGQ8bCk7dj1kLWYsdGhpcy5odEVkaXRvci5mbGlwcGVkJiYodGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZS50b3A9cGFyc2VJbnQodGhpcy5odEVkaXRvci5yb290RWxlbWVudC5zdHlsZS50b3AsMTApK2EtdisicHgiKSx0aGlzLnNldERyb3Bkb3duSGVpZ2h0KGQtZil9fWZsaXBE''@;'; put 'put ''cm9wZG93bihsKXtjb25zdCBhPXRoaXMuaHRFZGl0b3Iucm9vdEVsZW1lbnQuc3R5bGU7YS5wb3NpdGlvbj0iYWJzb2x1dGUiLGEudG9wPS1sKyJweCIsdGhpcy5odEVkaXRvci5mbGlwcGVkPSEwfXVuZmxpcERyb3Bkb3duKCl7Y29uc3QgbD10aGlzLmh0RWRpdG9yLnJvb3RFbGVtZW50LnN0''@;'; put 'put ''eWxlO2wucG9zaXRpb249ImFic29sdXRlIixsLnRvcD0iIix0aGlzLmh0RWRpdG9yLmZsaXBwZWQ9dm9pZCAwfXVwZGF0ZURyb3Bkb3duRGltZW5zaW9ucygpe3RoaXMuaHRFZGl0b3IudXBkYXRlU2V0dGluZ3Moe3dpZHRoOnRoaXMuZ2V0V2lkdGgoKSxoZWlnaHQ6dGhpcy5nZXRIZWlnaHQo''@;'; put 'put ''KX0pLHdYKFNYLHRoaXMsX3BlKS5jYWxsKHRoaXMpLHRoaXMuaHRFZGl0b3Iudmlldy5fd3Qud3RUYWJsZS5hbGlnbk92ZXJsYXlzV2l0aFRyaW1taW5nQ29udGFpbmVyKCl9c2V0RHJvcGRvd25IZWlnaHQobCl7dGhpcy5odEVkaXRvci51cGRhdGVTZXR0aW5ncyh7aGVpZ2h0Omx9KSx3WChT''@;'; put 'put ''WCx0aGlzLF9wZSkuY2FsbCh0aGlzKSx0aGlzLmh0RWRpdG9yLnZpZXcuX3d0Lnd0VGFibGUuYWxpZ25PdmVybGF5c1dpdGhUcmltbWluZ0NvbnRhaW5lcigpfWhpZ2hsaWdodEJlc3RNYXRjaGluZ0Nob2ljZShsKXsibnVtYmVyIj09dHlwZW9mIGw/dGhpcy5odEVkaXRvci5zZWxlY3RDZWxs''@;'; put 'put ''KGwsMCx2b2lkIDAsdm9pZCAwLHZvaWQgMCwhMSk6dGhpcy5odEVkaXRvci5kZXNlbGVjdENlbGwoKX1nZXRIZWlnaHQoKXtjb25zdCBsPXRoaXMuaG90LnJvb3RXaW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmh0Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIi5odENvcmUiKSksYT1wYXJz''@;'; put 'put ''ZUludChsLmJvcmRlclRvcFdpZHRoLDEwKStwYXJzZUludChsLmJvcmRlckJvdHRvbVdpZHRoLDEwKSxkPU1hdGgubWluKHRoaXMuY2VsbFByb3BlcnRpZXMudmlzaWJsZVJvd3MsdGhpcy5zdHJpcHBlZENob2ljZXMubGVuZ3RoKTtyZXR1cm4gQXJyYXkuZnJvbSh7bGVuZ3RoOmR9LChmLHYp''@;'; put 'put ''PT52KS5yZWR1Y2UoKGYsdik9PmYrdGhpcy5odEVkaXRvci5nZXRSb3dIZWlnaHQodiksMCkrYSsxfWdldFdpZHRoKCl7Y29uc3QgbD10aGlzLmhvdC5yb290V2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy5odENvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIuaHRDb3JlIikpLGE9cGFyc2VJ''@;'; put 'put ''bnQobC5ib3JkZXJJbmxpbmVTdGFydFdpZHRoLDEwKStwYXJzZUludChsLmJvcmRlcklubGluZUVuZFdpZHRoLDEwKTtyZXR1cm4gdGhpcy5odEVkaXRvci5nZXRDb2xXaWR0aCgwKSthfXN0cmlwVmFsdWVJZk5lZWRlZChsKXtyZXR1cm4gdGhpcy5zdHJpcFZhbHVlc0lmTmVlZGVkKFtsXSlb''@;'; put 'put ''MF19c3RyaXBWYWx1ZXNJZk5lZWRlZChsKXtjb25zdHthbGxvd0h0bWw6YX09dGhpcy5jZWxsUHJvcGVydGllcyxkPXlzKGwsZj0+emMoZikpO3JldHVybiB5cyhkLGY9PmE/ZjpuJChmKSl9YWxsb3dLZXlFdmVudFByb3BhZ2F0aW9uKGwpe2NvbnN0IGE9dGhpcy5odEVkaXRvci5nZXRTZWxl''@;'; put 'put ''Y3RlZFJhbmdlTGFzdCgpLGRfcm93PWE/YS5mcm9tLnJvdzotMTtsZXQgaD0hMTtyZXR1cm4gbD09PUdvLkFSUk9XX0RPV04mJmRfcm93PjAmJmRfcm93PHRoaXMuaHRFZGl0b3IuY291bnRSb3dzKCktMSYmKGg9ITApLGw9PT1Hby5BUlJPV19VUCYmZF9yb3c+LTEmJihoPSEwKSxofW9uQmVm''@;'; put 'put ''b3JlS2V5RG93bihsKXtpZihOMmUobC5rZXlDb2RlKXx8bC5rZXlDb2RlPT09R28uQkFDS1NQQUNFfHxsLmtleUNvZGU9PT1Hby5ERUxFVEV8fGwua2V5Q29kZT09PUdvLklOU0VSVCl7bGV0IGE9MTA7aWYobC5rZXlDb2RlPT09R28uQyYmKGwuY3RybEtleXx8bC5tZXRhS2V5KSlyZXR1cm47''@;'; put 'put ''dGhpcy5pc09wZW5lZCgpfHwoYSs9MTApLHRoaXMuaHRFZGl0b3ImJnRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9Pnt0aGlzLnF1ZXJ5Q2hvaWNlcyh0aGlzLlRFWFRBUkVBLnZhbHVlKX0sYSl9fX1mdW5jdGlvbiBfcGUoKXt0aGlzLmh0RWRpdG9yLnZpZXcuaGFzVmVydGljYWxTY3Jv''@;'; put 'put ''bGwoKSYmdGhpcy5odEVkaXRvci51cGRhdGVTZXR0aW5ncyh7d2lkdGg6dGhpcy5odEVkaXRvci5nZXRTZXR0aW5ncygpLndpZHRoK2gwKHRoaXMuaG90LnJvb3REb2N1bWVudCl9KX1jbGFzcyB3cGUgZXh0ZW5kcyBNX3tzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuImNoZWNrYm94''@;'; put 'put ''In1iZWdpbkVkaXRpbmcobCxhKXtpZihhJiYibW91c2V1cCI9PT1hLnR5cGUmJiJURCI9PT1hLnRhcmdldC5ub2RlTmFtZSl7Y29uc3QgZD10aGlzLlRELnF1ZXJ5U2VsZWN0b3IoJ2lucHV0W3R5cGU9ImNoZWNrYm94Il0nKTtwYShkLCJodEJhZFZhbHVlIil8fGQuY2xpY2soKX19ZmluaXNo''@;'; put 'put ''RWRpdGluZygpe31pbml0KCl7fW9wZW4oKXt9Y2xvc2UoKXt9Z2V0VmFsdWUoKXt9c2V0VmFsdWUoKXt9Zm9jdXMoKXt9fWNvbnN0IFdtPSgpPT53aW5kb3csQjI9KCk9PndpbmRvdy5kb2N1bWVudCx4WD0oYyxsKT0+d2luZG93LnNldFRpbWVvdXQoYyxsKSxScD1mdW5jdGlvbihjLGwsYSxk''@;'; put 'put ''KXtjLmFkZEV2ZW50TGlzdGVuZXIobCxhLCEhZCl9LHhnPWZ1bmN0aW9uKGMsbCxhLGQpe2MucmVtb3ZlRXZlbnRMaXN0ZW5lcihsLGEsISFkKX0sQWg9ZnVuY3Rpb24oYyxsKXtyZXR1cm4tMSE9PSgiICIrYy5jbGFzc05hbWUrIiAiKS5pbmRleE9mKCIgIitsKyIgIil9LEVYPWZ1bmN0aW9u''@;'; put 'put ''KGMsbCl7QWgoYyxsKXx8KGMuY2xhc3NOYW1lPSIiPT09Yy5jbGFzc05hbWU/bDpjLmNsYXNzTmFtZSsiICIrbCl9LFRYPWZ1bmN0aW9uKGMsbCl7Yy5jbGFzc05hbWU9ZnVuY3Rpb24oYyl7cmV0dXJuIGMudHJpbT9jLnRyaW0oKTpjLnJlcGxhY2UoL15ccyt8XHMrJC9nLCIiKX0oKCIgIitj''@;'; put 'put ''LmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoIiAiK2wrIiAiLCIgIikpfSxBWD1mdW5jdGlvbihjKXtyZXR1cm4vQXJyYXkvLnRlc3QoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGMpKX0sa2g9ZnVuY3Rpb24oYyl7cmV0dXJuL0RhdGUvLnRlc3QoT2JqZWN0LnByb3RvdHlwZS50b1N0''@;'; put 'put ''cmluZy5jYWxsKGMpKSYmIWlzTmFOKGMuZ2V0VGltZSgpKX0sJHJ0PWZ1bmN0aW9uKGMpe2xldCBsPWMuZ2V0RGF5KCk7cmV0dXJuIDA9PT1sfHw2PT09bH0sS3J0PWZ1bmN0aW9uKGMpe3JldHVybiBjJTQ9PTAmJmMlMTAwIT0wfHxjJTQwMD09MH0sQ3BlPWZ1bmN0aW9uKGMsbCl7cmV0dXJu''@;'; put 'put ''WzMxLEtydChjKT8yOToyOCwzMSwzMCwzMSwzMCwzMSwzMSwzMCwzMSwzMCwzMV1bbF19LEZQPWZ1bmN0aW9uKGMpe2toKGMpJiZjLnNldEhvdXJzKDAsMCwwLDApfSxIUD1mdW5jdGlvbihjLGwpe3JldHVybiBjLmdldFRpbWUoKT09PWwuZ2V0VGltZSgpfSxOUD1mdW5jdGlvbihjLGwsYSl7''@;'; put 'put ''bGV0IGQsaDtmb3IoZCBpbiBsKWg9dm9pZCAwIT09Y1tkXSxoJiYib2JqZWN0Ij09dHlwZW9mIGxbZF0mJm51bGwhPT1sW2RdJiZ2b2lkIDA9PT1sW2RdLm5vZGVOYW1lP2toKGxbZF0pP2EmJihjW2RdPW5ldyBEYXRlKGxbZF0uZ2V0VGltZSgpKSk6QVgobFtkXSk/YSYmKGNbZF09bFtkXS5z''@;'; put 'put ''bGljZSgwKSk6Y1tkXT1OUCh7fSxsW2RdLGEpOihhfHwhaCkmJihjW2RdPWxbZF0pO3JldHVybiBjfSxTcGU9ZnVuY3Rpb24oYyxsLGEpe2xldCBkPUIyKCkuY3JlYXRlRXZlbnQoIkhUTUxFdmVudHMiKTtkLmluaXRFdmVudChsLCEwLCExKSxkPU5QKGQsYSksYy5kaXNwYXRjaEV2ZW50KGQp''@;'; put 'put ''fSxNcGU9ZnVuY3Rpb24oYyl7cmV0dXJuIGMubW9udGg8MCYmKGMueWVhci09TWF0aC5jZWlsKE1hdGguYWJzKGMubW9udGgpLzEyKSxjLm1vbnRoKz0xMiksYy5tb250aD4xMSYmKGMueWVhcis9TWF0aC5mbG9vcihNYXRoLmFicyhjLm1vbnRoKS8xMiksYy5tb250aC09MTIpLGN9LExwPXtm''@;'; put 'put ''aWVsZDpudWxsLGJvdW5kOnZvaWQgMCxhcmlhTGFiZWw6IlVzZSB0aGUgYXJyb3cga2V5cyB0byBwaWNrIGEgZGF0ZSIscG9zaXRpb246ImJvdHRvbSBsZWZ0IixyZXBvc2l0aW9uOiEwLGZvcm1hdDoiWVlZWS1NTS1ERCIsdG9TdHJpbmc6bnVsbCxwYXJzZTpudWxsLGRlZmF1bHREYXRlOm51''@;'; put 'put ''bGwsc2V0RGVmYXVsdERhdGU6ITEsZmlyc3REYXk6MCxmaXJzdFdlZWtPZlllYXJNaW5EYXlzOjQsZm9ybWF0U3RyaWN0OiExLG1pbkRhdGU6bnVsbCxtYXhEYXRlOm51bGwseWVhclJhbmdlOjEwLHNob3dXZWVrTnVtYmVyOiExLHBpY2tXaG9sZVdlZWs6ITEsbWluWWVhcjowLG1heFllYXI6''@;'; put 'put ''OTk5OSxtaW5Nb250aDp2b2lkIDAsbWF4TW9udGg6dm9pZCAwLHN0YXJ0UmFuZ2U6bnVsbCxlbmRSYW5nZTpudWxsLGlzUlRMOiExLHllYXJTdWZmaXg6IiIsc2hvd01vbnRoQWZ0ZXJZZWFyOiExLHNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6ITEsZW5hYmxlU2VsZWN0aW9uRGF5''@;'; put 'put ''c0luTmV4dEFuZFByZXZpb3VzTW9udGhzOiExLG51bWJlck9mTW9udGhzOjEsbWFpbkNhbGVuZGFyOiJsZWZ0Iixjb250YWluZXI6dm9pZCAwLGJsdXJGaWVsZE9uU2VsZWN0OiEwLGkxOG46e3ByZXZpb3VzTW9udGg6IlByZXZpb3VzIE1vbnRoIixuZXh0TW9udGg6Ik5leHQgTW9udGgiLG1v''@;'; put 'put ''bnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sd2Vla2RheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5''@;'; put 'put ''IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHdlZWtkYXlzU2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXX0sdGhlbWU6bnVsbCxldmVudHM6W10sb25TZWxlY3Q6bnVsbCxvbk9wZW46bnVsbCxvbkNsb3NlOm51bGwsb25EcmF3Om51bGws''@;'; put 'put ''a2V5Ym9hcmRJbnB1dDohMH0seHBlPWZ1bmN0aW9uKGMsbCxhKXtmb3IobCs9Yy5maXJzdERheTtsPj03OylsLT03O3JldHVybiBhP2MuaTE4bi53ZWVrZGF5c1Nob3J0W2xdOmMuaTE4bi53ZWVrZGF5c1tsXX0scXJ0PWZ1bmN0aW9uKGMpe2xldCBsPVtdLGE9ImZhbHNlIjtpZihjLmlzRW1w''@;'; put 'put ''dHkpe2lmKCFjLnNob3dEYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHMpcmV0dXJuJzx0ZCBjbGFzcz0iaXMtZW1wdHkiPjwvdGQ+JztsLnB1c2goImlzLW91dHNpZGUtY3VycmVudC1tb250aCIpLGMuZW5hYmxlU2VsZWN0aW9uRGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzfHxsLnB1c2go''@;'; put 'put ''ImlzLXNlbGVjdGlvbi1kaXNhYmxlZCIpfXJldHVybiBjLmlzRGlzYWJsZWQmJmwucHVzaCgiaXMtZGlzYWJsZWQiKSxjLmlzVG9kYXkmJmwucHVzaCgiaXMtdG9kYXkiKSxjLmlzU2VsZWN0ZWQmJihsLnB1c2goImlzLXNlbGVjdGVkIiksYT0idHJ1ZSIpLGMuaGFzRXZlbnQmJmwucHVzaCgi''@;'; put 'put ''aGFzLWV2ZW50IiksYy5pc0luUmFuZ2UmJmwucHVzaCgiaXMtaW5yYW5nZSIpLGMuaXNTdGFydFJhbmdlJiZsLnB1c2goImlzLXN0YXJ0cmFuZ2UiKSxjLmlzRW5kUmFuZ2UmJmwucHVzaCgiaXMtZW5kcmFuZ2UiKSwnPHRkIGRhdGEtZGF5PSInK2MuZGF5KyciIGNsYXNzPSInK2wuam9pbigi''@;'; put 'put ''ICIpKyciIGFyaWEtc2VsZWN0ZWQ9IicrYSsnIj48YnV0dG9uIGNsYXNzPSJwaWthLWJ1dHRvbiBwaWthLWRheSIgdHlwZT0iYnV0dG9uIiBkYXRhLXBpa2EteWVhcj0iJytjLnllYXIrJyIgZGF0YS1waWthLW1vbnRoPSInK2MubW9udGgrJyIgZGF0YS1waWthLWRheT0iJytjLmRheSsnIj4n''@;'; put 'put ''K2MuZGF5KyI8L2J1dHRvbj48L3RkPiJ9LEpydD1mdW5jdGlvbihjLGwsYSxkLGgpe2xldCBmPW5ldyBEYXRlKGQsYSxsKTtyZXR1cm4nPHRkIGNsYXNzPSJwaWthLXdlZWsiPicrKGMuaGFzTW9tZW50P2MubW9tZW50KGYpLmlzb1dlZWsoKTpmdW5jdGlvbihjLGwpe2Muc2V0SG91cnMoMCww''@;'; put 'put ''LDAsMCk7bGV0IGE9Yy5nZXREYXRlKCksZD1jLmdldERheSgpLGg9bCxmPWgtMSxNPWZ1bmN0aW9uKGJlKXtyZXR1cm4oYmUrNy0xKSU3fTtjLnNldERhdGUoYStmLU0oZCkpO2xldCBEPW5ldyBEYXRlKGMuZ2V0RnVsbFllYXIoKSwwLGgpLG5lPShjLmdldFRpbWUoKS1ELmdldFRpbWUoKSkv''@;'; put 'put ''ODY0ZTU7cmV0dXJuIDErTWF0aC5yb3VuZCgobmUtZitNKEQuZ2V0RGF5KCkpKS83KX0oZixoKSkrIjwvdGQ+In0sUXJ0PWZ1bmN0aW9uKGMsbCxhLGQpe3JldHVybic8dHIgY2xhc3M9InBpa2Etcm93JysoYT8iIHBpY2std2hvbGUtd2VlayI6IiIpKyhkPyIgaXMtc2VsZWN0ZWQiOiIiKSsn''@;'; put 'put ''Ij4nKyhsP2MucmV2ZXJzZSgpOmMpLmpvaW4oIiIpKyI8L3RyPiJ9LG5pdD1mdW5jdGlvbihjLGwsYSxkLGgsZil7bGV0IHYsTSxELEVlLEJlLFo9Yy5fbyxuZT1hPT09Wi5taW5ZZWFyLGNlPWE9PT1aLm1heFllYXIsYmU9JzxkaXYgaWQ9IicrZisnIiBjbGFzcz0icGlrYS10aXRsZSIgcm9s''@;'; put 'put ''ZT0iaGVhZGluZyIgYXJpYS1saXZlPSJwb2xpdGUiPicscWU9ITAsbnQ9ITA7Zm9yKEQ9W10sdj0wO3Y8MTI7disrKUQucHVzaCgnPG9wdGlvbiB2YWx1ZT0iJysoYT09PWg/di1sOjEyK3YtbCkrJyInKyh2PT09ZD8nIHNlbGVjdGVkPSJzZWxlY3RlZCInOiIiKSsobmUmJnY8Wi5taW5Nb250''@;'; put 'put ''aHx8Y2UmJnY+Wi5tYXhNb250aD8nIGRpc2FibGVkPSJkaXNhYmxlZCInOiIiKSsiPiIrWi5pMThuLm1vbnRoc1t2XSsiPC9vcHRpb24+Iik7Zm9yKEVlPSc8ZGl2IGNsYXNzPSJwaWthLWxhYmVsIj4nK1ouaTE4bi5tb250aHNbZF0rJzxzZWxlY3QgY2xhc3M9InBpa2Etc2VsZWN0IHBpa2Et''@;'; put 'put ''c2VsZWN0LW1vbnRoIiB0YWJpbmRleD0iLTEiPicrRC5qb2luKCIiKSsiPC9zZWxlY3Q+PC9kaXY+IixBWChaLnllYXJSYW5nZSk/KHY9Wi55ZWFyUmFuZ2VbMF0sTT1aLnllYXJSYW5nZVsxXSsxKToodj1hLVoueWVhclJhbmdlLE09MSthK1oueWVhclJhbmdlKSxEPVtdO3Y8TSYmdjw9Wi5t''@;'; put 'put ''YXhZZWFyO3YrKyl2Pj1aLm1pblllYXImJkQucHVzaCgnPG9wdGlvbiB2YWx1ZT0iJyt2KyciJysodj09PWE/JyBzZWxlY3RlZD0ic2VsZWN0ZWQiJzoiIikrIj4iK3YrIjwvb3B0aW9uPiIpO3JldHVybiBCZT0nPGRpdiBjbGFzcz0icGlrYS1sYWJlbCI+JythK1oueWVhclN1ZmZpeCsnPHNl''@;'; put 'put ''bGVjdCBjbGFzcz0icGlrYS1zZWxlY3QgcGlrYS1zZWxlY3QteWVhciIgdGFiaW5kZXg9Ii0xIj4nK0Quam9pbigiIikrIjwvc2VsZWN0PjwvZGl2PiIsYmUrPVouc2hvd01vbnRoQWZ0ZXJZZWFyP0JlK0VlOkVlK0JlLG5lJiYoMD09PWR8fFoubWluTW9udGg+PWQpJiYocWU9ITEpLGNlJiYo''@;'; put 'put ''MTE9PT1kfHxaLm1heE1vbnRoPD1kKSYmKG50PSExKSwwPT09bCYmKGJlKz0nPGJ1dHRvbiBjbGFzcz0icGlrYS1wcmV2JysocWU/IiI6IiBpcy1kaXNhYmxlZCIpKyciIHR5cGU9ImJ1dHRvbiI+JytaLmkxOG4ucHJldmlvdXNNb250aCsiPC9idXR0b24+IiksbD09PWMuX28ubnVtYmVyT2ZN''@;'; put 'put ''b250aHMtMSYmKGJlKz0nPGJ1dHRvbiBjbGFzcz0icGlrYS1uZXh0JysobnQ/IiI6IiBpcy1kaXNhYmxlZCIpKyciIHR5cGU9ImJ1dHRvbiI+JytaLmkxOG4ubmV4dE1vbnRoKyI8L2J1dHRvbj4iKSxiZSsiPC9kaXY+In07ZnVuY3Rpb24ga1goYyl7bGV0IGw9dGhpcyxhPWwuY29uZmlnKGMp''@;'; put 'put ''O2wuX29uTW91c2VEb3duPWZ1bmN0aW9uKGgpe2lmKCFsLl92KXJldHVybjtsZXQgZj0oaD1ofHxXbSgpLmV2ZW50KS50YXJnZXR8fGguc3JjRWxlbWVudDtpZihmKWlmKEFoKGYsImlzLWRpc2FibGVkIil8fCghQWgoZiwicGlrYS1idXR0b24iKXx8QWgoZiwiaXMtZW1wdHkiKXx8QWgoZi5w''@;'; put 'put ''YXJlbnROb2RlLCJpcy1kaXNhYmxlZCIpP0FoKGYsInBpa2EtcHJldiIpP2wucHJldk1vbnRoKCk6QWgoZiwicGlrYS1uZXh0IikmJmwubmV4dE1vbnRoKCk6KGwuc2V0RGF0ZShuZXcgRGF0ZShmLmdldEF0dHJpYnV0ZSgiZGF0YS1waWthLXllYXIiKSxmLmdldEF0dHJpYnV0ZSgiZGF0YS1w''@;'; put 'put ''aWthLW1vbnRoIiksZi5nZXRBdHRyaWJ1dGUoImRhdGEtcGlrYS1kYXkiKSkpLGEuYm91bmQmJnhYKGZ1bmN0aW9uKCl7bC5oaWRlKCksYS5ibHVyRmllbGRPblNlbGVjdCYmYS5maWVsZCYmYS5maWVsZC5ibHVyKCl9LDEwMCkpKSxBaChmLCJwaWthLXNlbGVjdCIpKWwuX2M9ITA7ZWxzZXtp''@;'; put 'put ''ZighaC5wcmV2ZW50RGVmYXVsdClyZXR1cm4gaC5yZXR1cm5WYWx1ZT0hMSwhMTtoLnByZXZlbnREZWZhdWx0KCl9fSxsLl9vbkNoYW5nZT1mdW5jdGlvbihoKXtsZXQgZj0oaD1ofHxXbSgpLmV2ZW50KS50YXJnZXR8fGguc3JjRWxlbWVudDtmJiYoQWgoZiwicGlrYS1zZWxlY3QtbW9udGgi''@;'; put 'put ''KT9sLmdvdG9Nb250aChmLnZhbHVlKTpBaChmLCJwaWthLXNlbGVjdC15ZWFyIikmJmwuZ290b1llYXIoZi52YWx1ZSkpfSxsLl9vbktleUNoYW5nZT1mdW5jdGlvbihoKXtpZihoPWh8fFdtKCkuZXZlbnQsbC5pc1Zpc2libGUoKSlzd2l0Y2goaC5rZXlDb2RlKXtjYXNlIDEzOmNhc2UgMjc6''@;'; put 'put ''YS5maWVsZCYmYS5maWVsZC5ibHVyKCk7YnJlYWs7Y2FzZSAzNzpsLmFkanVzdERhdGUoInN1YnRyYWN0IiwxKTticmVhaztjYXNlIDM4OmwuYWRqdXN0RGF0ZSgic3VidHJhY3QiLDcpO2JyZWFrO2Nhc2UgMzk6bC5hZGp1c3REYXRlKCJhZGQiLDEpO2JyZWFrO2Nhc2UgNDA6bC5hZGp1c3RE''@;'; put 'put ''YXRlKCJhZGQiLDcpO2JyZWFrO2Nhc2UgODpjYXNlIDQ2Omwuc2V0RGF0ZShudWxsKX19LGwuX3BhcnNlRmllbGRWYWx1ZT1mdW5jdGlvbigpe2lmKGEucGFyc2UpcmV0dXJuIGEucGFyc2UoYS5maWVsZC52YWx1ZSxhLmZvcm1hdCk7aWYodGhpcy5oYXNNb21lbnQpe2xldCBoPXRoaXMubW9t''@;'; put 'put ''ZW50KGEuZmllbGQudmFsdWUsYS5mb3JtYXQsYS5mb3JtYXRTdHJpY3QpO3JldHVybiBoJiZoLmlzVmFsaWQoKT9oLnRvRGF0ZSgpOm51bGx9cmV0dXJuIG5ldyBEYXRlKERhdGUucGFyc2UoYS5maWVsZC52YWx1ZSkpfSxsLl9vbklucHV0Q2hhbmdlPWZ1bmN0aW9uKGgpe2xldCBmO2guZmly''@;'; put 'put ''ZWRCeSE9PWwmJihmPWwuX3BhcnNlRmllbGRWYWx1ZSgpLGtoKGYpJiZsLnNldERhdGUoZiksbC5fdnx8bC5zaG93KCkpfSxsLl9vbklucHV0Rm9jdXM9ZnVuY3Rpb24oKXtsLnNob3coKX0sbC5fb25JbnB1dENsaWNrPWZ1bmN0aW9uKCl7bC5zaG93KCl9LGwuX29uSW5wdXRCbHVyPWZ1bmN0''@;'; put 'put ''aW9uKCl7bGV0IGg9QjIoKS5hY3RpdmVFbGVtZW50O2Rve2lmKEFoKGgsInBpa2Etc2luZ2xlIikpcmV0dXJufXdoaWxlKGg9aC5wYXJlbnROb2RlKTtsLl9jfHwobC5fYj14WChmdW5jdGlvbigpe2wuaGlkZSgpfSw1MCkpLGwuX2M9ITF9LGwuX29uQ2xpY2s9ZnVuY3Rpb24oaCl7bGV0IGY9''@;'; put 'put ''KGg9aHx8V20oKS5ldmVudCkudGFyZ2V0fHxoLnNyY0VsZW1lbnQsdj1mO2lmKGYpeyFoYXNFdmVudExpc3RlbmVycyYmQWgoZiwicGlrYS1zZWxlY3QiKSYmKGYub25jaGFuZ2V8fChmLnNldEF0dHJpYnV0ZSgib25jaGFuZ2UiLCJyZXR1cm47IiksUnAoZiwiY2hhbmdlIixsLl9vbkNoYW5n''@;'; put 'put ''ZSkpKTtkb3tpZihBaCh2LCJwaWthLXNpbmdsZSIpfHx2PT09YS50cmlnZ2VyKXJldHVybn13aGlsZSh2PXYucGFyZW50Tm9kZSk7bC5fdiYmZiE9PWEudHJpZ2dlciYmdiE9PWEudHJpZ2dlciYmbC5oaWRlKCl9fSxsLmVsPUIyKCkuY3JlYXRlRWxlbWVudCgiZGl2IiksbC5lbC5jbGFzc05h''@;'; put 'put ''bWU9InBpa2Etc2luZ2xlIisoYS5pc1JUTD8iIGlzLXJ0bCI6IiIpKyhhLnRoZW1lPyIgIithLnRoZW1lOiIiKSxScChsLmVsLCJtb3VzZWRvd24iLGwuX29uTW91c2VEb3duLCEwKSxScChsLmVsLCJ0b3VjaGVuZCIsbC5fb25Nb3VzZURvd24sITApLFJwKGwuZWwsImNoYW5nZSIsbC5fb25D''@;'; put 'put ''aGFuZ2UpLGEua2V5Ym9hcmRJbnB1dCYmUnAoQjIoKSwia2V5ZG93biIsbC5fb25LZXlDaGFuZ2UpLGEuZmllbGQmJihhLmNvbnRhaW5lcj9hLmNvbnRhaW5lci5hcHBlbmRDaGlsZChsLmVsKTphLmJvdW5kP0IyKCkuYm9keS5hcHBlbmRDaGlsZChsLmVsKTphLmZpZWxkLnBhcmVudE5vZGUu''@;'; put 'put ''aW5zZXJ0QmVmb3JlKGwuZWwsYS5maWVsZC5uZXh0U2libGluZyksUnAoYS5maWVsZCwiY2hhbmdlIixsLl9vbklucHV0Q2hhbmdlKSxhLmRlZmF1bHREYXRlfHwoYS5kZWZhdWx0RGF0ZT1sLl9wYXJzZUZpZWxkVmFsdWUoKSxhLnNldERlZmF1bHREYXRlPSEwKSk7bGV0IGQ9YS5kZWZhdWx0''@;'; put 'put ''RGF0ZTtraChkKT9hLnNldERlZmF1bHREYXRlP2wuc2V0RGF0ZShkLCEwKTpsLmdvdG9EYXRlKGQpOmwuZ290b0RhdGUobmV3IERhdGUpLGEuYm91bmQ/KHRoaXMuaGlkZSgpLGwuZWwuY2xhc3NOYW1lKz0iIGlzLWJvdW5kIixScChhLnRyaWdnZXIsImNsaWNrIixsLl9vbklucHV0Q2xpY2sp''@;'; put 'put ''LFJwKGEudHJpZ2dlciwiZm9jdXMiLGwuX29uSW5wdXRGb2N1cyksUnAoYS50cmlnZ2VyLCJibHVyIixsLl9vbklucHV0Qmx1cikpOnRoaXMuc2hvdygpfWZ1bmN0aW9uIEVwZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gYWl0KGMpe3ZhciBsPWZ1bmN0aW9uIHNpdChjLGwpe2lmKCJvYmpl''@;'; put 'put ''Y3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUg''@;'; put 'put ''bXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1l''@;'; put 'put ''cmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gRFgoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUg''@;'; put 'put ''ZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWtYLnByb3RvdHlwZT17Y29uZmlnOmZ1bmN0aW9uKGMpe3RoaXMuX298fCh0aGlzLl9vPU5QKHt9LExwLCEwKSk7bGV0IGw9TlAodGhpcy5fbyxjLCEwKTtsLmlzUlRMPSEhbC5pc1JUTCxsLmZpZWxkPWwuZmllbGQmJmwu''@;'; put 'put ''ZmllbGQubm9kZU5hbWU/bC5maWVsZDpudWxsLGwudGhlbWU9InN0cmluZyI9PXR5cGVvZiBsLnRoZW1lJiZsLnRoZW1lP2wudGhlbWU6bnVsbCxsLmJvdW5kPSEhKHZvaWQgMCE9PWwuYm91bmQ/bC5maWVsZCYmbC5ib3VuZDpsLmZpZWxkKSxsLnRyaWdnZXI9bC50cmlnZ2VyJiZsLnRyaWdn''@;'; put 'put ''ZXIubm9kZU5hbWU/bC50cmlnZ2VyOmwuZmllbGQsbC5kaXNhYmxlV2Vla2VuZHM9ISFsLmRpc2FibGVXZWVrZW5kcyxsLmRpc2FibGVEYXlGbj0iZnVuY3Rpb24iPT10eXBlb2YgbC5kaXNhYmxlRGF5Rm4/bC5kaXNhYmxlRGF5Rm46bnVsbDtsZXQgYT1wYXJzZUludChsLm51bWJlck9mTW9u''@;'; put 'put ''dGhzLDEwKXx8MTtpZihsLm51bWJlck9mTW9udGhzPWE+ND80OmEsa2gobC5taW5EYXRlKXx8KGwubWluRGF0ZT0hMSksa2gobC5tYXhEYXRlKXx8KGwubWF4RGF0ZT0hMSksbC5taW5EYXRlJiZsLm1heERhdGUmJmwubWF4RGF0ZTxsLm1pbkRhdGUmJihsLm1heERhdGU9bC5taW5EYXRlPSEx''@;'; put 'put ''KSxsLm1pbkRhdGUmJnRoaXMuc2V0TWluRGF0ZShsLm1pbkRhdGUpLGwubWF4RGF0ZSYmdGhpcy5zZXRNYXhEYXRlKGwubWF4RGF0ZSksQVgobC55ZWFyUmFuZ2UpKXtsZXQgZD0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCktMTA7bC55ZWFyUmFuZ2VbMF09cGFyc2VJbnQobC55ZWFyUmFuZ2Vb''@;'; put 'put ''MF0sMTApfHxkLGwueWVhclJhbmdlWzFdPXBhcnNlSW50KGwueWVhclJhbmdlWzFdLDEwKXx8ZH1lbHNlIGwueWVhclJhbmdlPU1hdGguYWJzKHBhcnNlSW50KGwueWVhclJhbmdlLDEwKSl8fExwLnllYXJSYW5nZSxsLnllYXJSYW5nZT4xMDAmJihsLnllYXJSYW5nZT0xMDApO3JldHVybiBs''@;'; put 'put ''fSx0b1N0cmluZzpmdW5jdGlvbihjKXtyZXR1cm4gYz1jfHx0aGlzLl9vLmZvcm1hdCxraCh0aGlzLl9kKT90aGlzLl9vLnRvU3RyaW5nP3RoaXMuX28udG9TdHJpbmcodGhpcy5fZCxjKTp0aGlzLmhhc01vbWVudD90aGlzLm1vbWVudCh0aGlzLl9kKS5mb3JtYXQoYyk6dGhpcy5fZC50b0Rh''@;'; put 'put ''dGVTdHJpbmcoKToiIn0sZ2V0TW9tZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzTW9tZW50P3RoaXMubW9tZW50KHRoaXMuX2QpOm51bGx9LHNldE1vbWVudDpmdW5jdGlvbihjLGwpe3RoaXMuaGFzTW9tZW50JiZ0aGlzLm1vbWVudC5pc01vbWVudChjKSYmdGhpcy5zZXREYXRlKGMu''@;'; put 'put ''dG9EYXRlKCksbCl9LHVzZU1vbWVudDpmdW5jdGlvbihjKXt0aGlzLmhhc01vbWVudD0hMCx0aGlzLm1vbWVudD1jfSxnZXREYXRlOmZ1bmN0aW9uKCl7cmV0dXJuIGtoKHRoaXMuX2QpP25ldyBEYXRlKHRoaXMuX2QuZ2V0VGltZSgpKTpudWxsfSxzZXREYXRlOmZ1bmN0aW9uKGMsbCl7aWYo''@;'; put 'put ''IWMpcmV0dXJuIHRoaXMuX2Q9bnVsbCx0aGlzLl9vLmZpZWxkJiYodGhpcy5fby5maWVsZC52YWx1ZT0iIixTcGUodGhpcy5fby5maWVsZCwiY2hhbmdlIix7ZmlyZWRCeTp0aGlzfSkpLHRoaXMuZHJhdygpO2lmKCJzdHJpbmciPT10eXBlb2YgYyYmKGM9bmV3IERhdGUoRGF0ZS5wYXJzZShj''@;'; put 'put ''KSkpLCFraChjKSlyZXR1cm47bGV0IGE9dGhpcy5fby5taW5EYXRlLGQ9dGhpcy5fby5tYXhEYXRlO2toKGEpJiZjPGE/Yz1hOmtoKGQpJiZjPmQmJihjPWQpLHRoaXMuX2Q9bmV3IERhdGUoYy5nZXRUaW1lKCkpLEZQKHRoaXMuX2QpLHRoaXMuZ290b0RhdGUodGhpcy5fZCksdGhpcy5fby5m''@;'; put 'put ''aWVsZCYmKHRoaXMuX28uZmllbGQudmFsdWU9dGhpcy50b1N0cmluZygpLFNwZSh0aGlzLl9vLmZpZWxkLCJjaGFuZ2UiLHtmaXJlZEJ5OnRoaXN9KSksIWwmJiJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl9vLm9uU2VsZWN0JiZ0aGlzLl9vLm9uU2VsZWN0LmNhbGwodGhpcyx0aGlzLmdldERh''@;'; put 'put ''dGUoKSl9LGNsZWFyOmZ1bmN0aW9uKCl7dGhpcy5zZXREYXRlKG51bGwpfSxnb3RvRGF0ZTpmdW5jdGlvbihjKXtsZXQgbD0hMDtpZihraChjKSl7aWYodGhpcy5jYWxlbmRhcnMpe2xldCBhPW5ldyBEYXRlKHRoaXMuY2FsZW5kYXJzWzBdLnllYXIsdGhpcy5jYWxlbmRhcnNbMF0ubW9udGgs''@;'; put 'put ''MSksZD1uZXcgRGF0ZSh0aGlzLmNhbGVuZGFyc1t0aGlzLmNhbGVuZGFycy5sZW5ndGgtMV0ueWVhcix0aGlzLmNhbGVuZGFyc1t0aGlzLmNhbGVuZGFycy5sZW5ndGgtMV0ubW9udGgsMSksaD1jLmdldFRpbWUoKTtkLnNldE1vbnRoKGQuZ2V0TW9udGgoKSsxKSxkLnNldERhdGUoZC5nZXRE''@;'; put 'put ''YXRlKCktMSksbD1oPGEuZ2V0VGltZSgpfHxkLmdldFRpbWUoKTxofWwmJih0aGlzLmNhbGVuZGFycz1be21vbnRoOmMuZ2V0TW9udGgoKSx5ZWFyOmMuZ2V0RnVsbFllYXIoKX1dLCJyaWdodCI9PT10aGlzLl9vLm1haW5DYWxlbmRhciYmKHRoaXMuY2FsZW5kYXJzWzBdLm1vbnRoKz0xLXRo''@;'; put 'put ''aXMuX28ubnVtYmVyT2ZNb250aHMpKSx0aGlzLmFkanVzdENhbGVuZGFycygpfX0sYWRqdXN0RGF0ZTpmdW5jdGlvbihjLGwpe2xldCBoLGE9dGhpcy5nZXREYXRlKCl8fG5ldyBEYXRlLGQ9MjQqcGFyc2VJbnQobCkqNjAqNjAqMWUzOyJhZGQiPT09Yz9oPW5ldyBEYXRlKGEudmFsdWVPZigp''@;'; put 'put ''K2QpOiJzdWJ0cmFjdCI9PT1jJiYoaD1uZXcgRGF0ZShhLnZhbHVlT2YoKS1kKSksdGhpcy5zZXREYXRlKGgpfSxhZGp1c3RDYWxlbmRhcnM6ZnVuY3Rpb24oKXt0aGlzLmNhbGVuZGFyc1swXT1NcGUodGhpcy5jYWxlbmRhcnNbMF0pO2ZvcihsZXQgYz0xO2M8dGhpcy5fby5udW1iZXJPZk1v''@;'; put 'put ''bnRocztjKyspdGhpcy5jYWxlbmRhcnNbY109TXBlKHttb250aDp0aGlzLmNhbGVuZGFyc1swXS5tb250aCtjLHllYXI6dGhpcy5jYWxlbmRhcnNbMF0ueWVhcn0pO3RoaXMuZHJhdygpfSxnb3RvVG9kYXk6ZnVuY3Rpb24oKXt0aGlzLmdvdG9EYXRlKG5ldyBEYXRlKX0sZ290b01vbnRoOmZ1''@;'; put 'put ''bmN0aW9uKGMpe2lzTmFOKGMpfHwodGhpcy5jYWxlbmRhcnNbMF0ubW9udGg9cGFyc2VJbnQoYywxMCksdGhpcy5hZGp1c3RDYWxlbmRhcnMoKSl9LG5leHRNb250aDpmdW5jdGlvbigpe3RoaXMuY2FsZW5kYXJzWzBdLm1vbnRoKyssdGhpcy5hZGp1c3RDYWxlbmRhcnMoKX0scHJldk1vbnRo''@;'; put 'put ''OmZ1bmN0aW9uKCl7dGhpcy5jYWxlbmRhcnNbMF0ubW9udGgtLSx0aGlzLmFkanVzdENhbGVuZGFycygpfSxnb3RvWWVhcjpmdW5jdGlvbihjKXtpc05hTihjKXx8KHRoaXMuY2FsZW5kYXJzWzBdLnllYXI9cGFyc2VJbnQoYywxMCksdGhpcy5hZGp1c3RDYWxlbmRhcnMoKSl9LHNldE1pbkRh''@;'; put 'put ''dGU6ZnVuY3Rpb24oYyl7YyBpbnN0YW5jZW9mIERhdGU/KEZQKGMpLHRoaXMuX28ubWluRGF0ZT1jLHRoaXMuX28ubWluWWVhcj1jLmdldEZ1bGxZZWFyKCksdGhpcy5fby5taW5Nb250aD1jLmdldE1vbnRoKCkpOih0aGlzLl9vLm1pbkRhdGU9THAubWluRGF0ZSx0aGlzLl9vLm1pblllYXI9''@;'; put 'put ''THAubWluWWVhcix0aGlzLl9vLm1pbk1vbnRoPUxwLm1pbk1vbnRoLHRoaXMuX28uc3RhcnRSYW5nZT1McC5zdGFydFJhbmdlKSx0aGlzLmRyYXcoKX0sc2V0TWF4RGF0ZTpmdW5jdGlvbihjKXtjIGluc3RhbmNlb2YgRGF0ZT8oRlAoYyksdGhpcy5fby5tYXhEYXRlPWMsdGhpcy5fby5tYXhZ''@;'; put 'put ''ZWFyPWMuZ2V0RnVsbFllYXIoKSx0aGlzLl9vLm1heE1vbnRoPWMuZ2V0TW9udGgoKSk6KHRoaXMuX28ubWF4RGF0ZT1McC5tYXhEYXRlLHRoaXMuX28ubWF4WWVhcj1McC5tYXhZZWFyLHRoaXMuX28ubWF4TW9udGg9THAubWF4TW9udGgsdGhpcy5fby5lbmRSYW5nZT1McC5lbmRSYW5nZSks''@;'; put 'put ''dGhpcy5kcmF3KCl9LHNldFN0YXJ0UmFuZ2U6ZnVuY3Rpb24oYyl7dGhpcy5fby5zdGFydFJhbmdlPWN9LHNldEVuZFJhbmdlOmZ1bmN0aW9uKGMpe3RoaXMuX28uZW5kUmFuZ2U9Y30sZHJhdzpmdW5jdGlvbihjKXtpZighdGhpcy5fdiYmIWMpcmV0dXJuO2xldCBNLGw9dGhpcy5fbyxhPWwu''@;'; put 'put ''bWluWWVhcixkPWwubWF4WWVhcixoPWwubWluTW9udGgsZj1sLm1heE1vbnRoLHY9IiI7dGhpcy5feTw9YSYmKHRoaXMuX3k9YSwhaXNOYU4oaCkmJnRoaXMuX208aCYmKHRoaXMuX209aCkpLHRoaXMuX3k+PWQmJih0aGlzLl95PWQsIWlzTmFOKGYpJiZ0aGlzLl9tPmYmJih0aGlzLl9tPWYp''@;'; put 'put ''KTtmb3IobGV0IEQ9MDtEPGwubnVtYmVyT2ZNb250aHM7RCsrKU09InBpa2EtdGl0bGUtIitNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5yZXBsYWNlKC9bXmEtel0rL2csIiIpLnN1YnN0cigwLDIpLHYrPSc8ZGl2IGNsYXNzPSJwaWthLWxlbmRhciI+JytuaXQodGhpcyxELHRoaXMuY2Fs''@;'; put 'put ''ZW5kYXJzW0RdLnllYXIsdGhpcy5jYWxlbmRhcnNbRF0ubW9udGgsdGhpcy5jYWxlbmRhcnNbMF0ueWVhcixNKSt0aGlzLnJlbmRlcih0aGlzLmNhbGVuZGFyc1tEXS55ZWFyLHRoaXMuY2FsZW5kYXJzW0RdLm1vbnRoLE0pKyI8L2Rpdj4iO3RoaXMuZWwuaW5uZXJIVE1MPXYsbC5ib3VuZCYm''@;'; put 'put ''ImhpZGRlbiIhPT1sLmZpZWxkLnR5cGUmJnhYKGZ1bmN0aW9uKCl7bC50cmlnZ2VyLmZvY3VzKCl9LDEpLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLl9vLm9uRHJhdyYmdGhpcy5fby5vbkRyYXcodGhpcyksbC5ib3VuZCYmbC5maWVsZC5zZXRBdHRyaWJ1dGUoImFyaWEtbGFiZWwiLGwuYXJp''@;'; put 'put ''YUxhYmVsKX0sYWRqdXN0UG9zaXRpb246ZnVuY3Rpb24oKXtsZXQgYyxsLGEsZCxoLGYsdixNLEQsWixuZTt0aGlzLl9vLmNvbnRhaW5lcnx8KHRoaXMuZWwuc3R5bGUucG9zaXRpb249ImFic29sdXRlIixjPXRoaXMuX28udHJpZ2dlcixsPXRoaXMuZWwub2Zmc2V0V2lkdGgsYT10aGlzLmVs''@;'; put 'put ''Lm9mZnNldEhlaWdodCxkPVdtKCkuaW5uZXJXaWR0aHx8QjIoKS5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsaD1XbSgpLmlubmVySGVpZ2h0fHxCMigpLmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsZj1CMigpLmJvZHkuc2Nyb2xsVG9wfHxCMigpLmRvY3VtZW50RWxlbWVudC5z''@;'; put 'put ''Y3JvbGxUb3AsWj0hMCxuZT0hMCxEPWMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksdj1ELmxlZnQrV20oKS5wYWdlWE9mZnNldCxNPUQuYm90dG9tK1dtKCkucGFnZVlPZmZzZXQsKHRoaXMuX28ucmVwb3NpdGlvbiYmditsPmR8fHRoaXMuX28ucG9zaXRpb24uaW5kZXhPZigicmlnaHQiKT4t''@;'; put 'put ''MSYmdi1sK2Mub2Zmc2V0V2lkdGg+MCkmJih2PXYtbCtjLm9mZnNldFdpZHRoLFo9ITEpLCh0aGlzLl9vLnJlcG9zaXRpb24mJk0rYT5oK2Z8fHRoaXMuX28ucG9zaXRpb24uaW5kZXhPZigidG9wIik+LTEmJk0tYS1jLm9mZnNldEhlaWdodD4wKSYmKE09TS1hLWMub2Zmc2V0SGVpZ2h0LG5l''@;'; put 'put ''PSExKSx2PDAmJih2PTApLE08MCYmKE09MCksdGhpcy5lbC5zdHlsZS5sZWZ0PXYrInB4Iix0aGlzLmVsLnN0eWxlLnRvcD1NKyJweCIsRVgodGhpcy5lbCxaPyJsZWZ0LWFsaWduZWQiOiJyaWdodC1hbGlnbmVkIiksRVgodGhpcy5lbCxuZT8iYm90dG9tLWFsaWduZWQiOiJ0b3AtYWxpZ25l''@;'; put 'put ''ZCIpLFRYKHRoaXMuZWwsWj8icmlnaHQtYWxpZ25lZCI6ImxlZnQtYWxpZ25lZCIpLFRYKHRoaXMuZWwsbmU/InRvcC1hbGlnbmVkIjoiYm90dG9tLWFsaWduZWQiKSl9LHJlbmRlcjpmdW5jdGlvbihjLGwsYSl7bGV0IGQ9dGhpcy5fbyxoPW5ldyBEYXRlLGY9Q3BlKGMsbCksdj1uZXcgRGF0''@;'; put 'put ''ZShjLGwsMSkuZ2V0RGF5KCksTT1bXSxEPVtdO0ZQKGgpLGQuZmlyc3REYXk+MCYmKHYtPWQuZmlyc3REYXksdjwwJiYodis9NykpO2xldCBaPTA9PT1sPzExOmwtMSxuZT0xMT09PWw/MDpsKzEsY2U9MD09PWw/Yy0xOmMsYmU9MTE9PT1sP2MrMTpjLEVlPUNwZShjZSxaKSxCZT1mK3YscWU9''@;'; put 'put ''QmU7Zm9yKDtxZT43OylxZS09NztCZSs9Ny1xZTtsZXQgbnQ9ITE7Zm9yKGxldCBsdD0wLG10PTA7bHQ8QmU7bHQrKyl7bGV0IEp0PW5ldyBEYXRlKGMsbCxsdC12KzEpLHluPSEha2godGhpcy5fZCkmJkhQKEp0LHRoaXMuX2QpLENuPUhQKEp0LGgpLHRuPS0xIT09ZC5ldmVudHMuaW5kZXhP''@;'; put 'put ''ZihKdC50b0RhdGVTdHJpbmcoKSkseG49bHQ8dnx8bHQ+PWYrdixRbj1sdC12KzEseWk9bCx5cj1jLEduPWQuc3RhcnRSYW5nZSYmSFAoZC5zdGFydFJhbmdlLEp0KSxpaT1kLmVuZFJhbmdlJiZIUChkLmVuZFJhbmdlLEp0KSxfaT1kLnN0YXJ0UmFuZ2UmJmQuZW5kUmFuZ2UmJmQuc3RhcnRS''@;'; put 'put ''YW5nZTxKdCYmSnQ8ZC5lbmRSYW5nZSxQbj1kLm1pbkRhdGUmJkp0PGQubWluRGF0ZXx8ZC5tYXhEYXRlJiZKdD5kLm1heERhdGV8fGQuZGlzYWJsZVdlZWtlbmRzJiYkcnQoSnQpfHxkLmRpc2FibGVEYXlGbiYmZC5kaXNhYmxlRGF5Rm4oSnQpO3huJiYobHQ8dj8oUW49RWUrUW4seWk9Wix5''@;'; put 'put ''cj1jZSk6KFFuLT1mLHlpPW5lLHlyPWJlKSksZC5waWNrV2hvbGVXZWVrJiZ5biYmKG50PSEwKSxELnB1c2gocXJ0KHtkYXk6UW4sbW9udGg6eWkseWVhcjp5cixoYXNFdmVudDp0bixpc1NlbGVjdGVkOnluLGlzVG9kYXk6Q24saXNEaXNhYmxlZDpQbixpc0VtcHR5OnhuLGlzU3RhcnRSYW5n''@;'; put 'put ''ZTpHbixpc0VuZFJhbmdlOmlpLGlzSW5SYW5nZTpfaSxzaG93RGF5c0luTmV4dEFuZFByZXZpb3VzTW9udGhzOmQuc2hvd0RheXNJbk5leHRBbmRQcmV2aW91c01vbnRocyxlbmFibGVTZWxlY3Rpb25EYXlzSW5OZXh0QW5kUHJldmlvdXNNb250aHM6ZC5lbmFibGVTZWxlY3Rpb25EYXlzSW5O''@;'; put 'put ''ZXh0QW5kUHJldmlvdXNNb250aHN9KSksNz09KyttdCYmKGQuc2hvd1dlZWtOdW1iZXImJkQudW5zaGlmdChKcnQodGhpcyxsdC12LGwsYyxkLmZpcnN0V2Vla09mWWVhck1pbkRheXMpKSxNLnB1c2goUXJ0KEQsZC5pc1JUTCxkLnBpY2tXaG9sZVdlZWssbnQpKSxEPVtdLG10PTAsbnQ9ITEp''@;'; put 'put ''fXJldHVybiBmdW5jdGlvbihjLGwsYSl7cmV0dXJuJzx0YWJsZSBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJwaWthLXRhYmxlIiByb2xlPSJncmlkIiBhcmlhLWxhYmVsbGVkYnk9IicrYSsnIj4nK2Z1bmN0aW9uKGMpe2xldCBsLGE9W107Zm9yKGMuc2hvd1dlZWtO''@;'; put 'put ''dW1iZXImJmEucHVzaCgiPHRoPjwvdGg+IiksbD0wO2w8NztsKyspYS5wdXNoKCc8dGggc2NvcGU9ImNvbCI+PGFiYnIgdGl0bGU9IicreHBlKGMsbCkrJyI+Jyt4cGUoYyxsLCEwKSsiPC9hYmJyPjwvdGg+Iik7cmV0dXJuIjx0aGVhZD48dHI+IisoYy5pc1JUTD9hLnJldmVyc2UoKTphKS5q''@;'; put 'put ''b2luKCIiKSsiPC90cj48L3RoZWFkPiJ9KGMpK2Z1bmN0aW9uKGMpe3JldHVybiI8dGJvZHk+IitjLmpvaW4oIiIpKyI8L3Rib2R5PiJ9KGwpKyI8L3RhYmxlPiJ9KGQsTSxhKX0saXNWaXNpYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Z9LHNob3c6ZnVuY3Rpb24oKXt0aGlzLmlzVmlz''@;'; put 'put ''aWJsZSgpfHwodGhpcy5fdj0hMCx0aGlzLmRyYXcoKSxUWCh0aGlzLmVsLCJpcy1oaWRkZW4iKSx0aGlzLl9vLmJvdW5kJiYoUnAoQjIoKSwiY2xpY2siLHRoaXMuX29uQ2xpY2spLHRoaXMuYWRqdXN0UG9zaXRpb24oKSksImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuX28ub25PcGVuJiZ0aGlz''@;'; put 'put ''Ll9vLm9uT3Blbi5jYWxsKHRoaXMpKX0saGlkZTpmdW5jdGlvbigpe2xldCBjPXRoaXMuX3Y7ITEhPT1jJiYodGhpcy5fby5ib3VuZCYmeGcoQjIoKSwiY2xpY2siLHRoaXMuX29uQ2xpY2spLHRoaXMuX28uY29udGFpbmVyfHwodGhpcy5lbC5zdHlsZS5wb3NpdGlvbj0ic3RhdGljIix0aGlz''@;'; put 'put ''LmVsLnN0eWxlLmxlZnQ9ImF1dG8iLHRoaXMuZWwuc3R5bGUudG9wPSJhdXRvIiksRVgodGhpcy5lbCwiaXMtaGlkZGVuIiksdGhpcy5fdj0hMSx2b2lkIDAhPT1jJiYiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5fby5vbkNsb3NlJiZ0aGlzLl9vLm9uQ2xvc2UuY2FsbCh0aGlzKSl9LGRlc3Ry''@;'; put 'put ''b3k6ZnVuY3Rpb24oKXtsZXQgYz10aGlzLl9vO3RoaXMuaGlkZSgpLHhnKHRoaXMuZWwsIm1vdXNlZG93biIsdGhpcy5fb25Nb3VzZURvd24sITApLHhnKHRoaXMuZWwsInRvdWNoZW5kIix0aGlzLl9vbk1vdXNlRG93biwhMCkseGcodGhpcy5lbCwiY2hhbmdlIix0aGlzLl9vbkNoYW5nZSks''@;'; put 'put ''Yy5rZXlib2FyZElucHV0JiZ4ZyhCMigpLCJrZXlkb3duIix0aGlzLl9vbktleUNoYW5nZSksYy5maWVsZCYmKHhnKGMuZmllbGQsImNoYW5nZSIsdGhpcy5fb25JbnB1dENoYW5nZSksYy5ib3VuZCYmKHhnKGMudHJpZ2dlciwiY2xpY2siLHRoaXMuX29uSW5wdXRDbGljaykseGcoYy50cmln''@;'; put 'put ''Z2VyLCJmb2N1cyIsdGhpcy5fb25JbnB1dEZvY3VzKSx4ZyhjLnRyaWdnZXIsImJsdXIiLHRoaXMuX29uSW5wdXRCbHVyKSkpLHRoaXMuZWwucGFyZW50Tm9kZSYmdGhpcy5lbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWwpfX07Y29uc3QgVHBlPSJkYXRlIixBcGU9ImRhdGVFZGl0''@;'; put 'put ''b3IiO3ZhciBWUD1uZXcgV2Vha1NldDtjbGFzcyBrcGUgZXh0ZW5kcyB0OXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gaWl0KGMsbCl7KGZ1bmN0aW9uIG9pdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXpl''@;'; put 'put ''IHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLFZQKSxFcGUodGhpcywicGFyZW50RGVzdHJveWVkIiwhMSksRXBlKHRoaXMsIiRkYXRlUGlja2VyIixudWxsKX1zdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJu''@;'; put 'put ''IFRwZX1pbml0KCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIExhKXRocm93IG5ldyBFcnJvcigiWW91IG5lZWQgdG8gaW5jbHVkZSBtb21lbnQuanMgdG8geW91ciBwcm9qZWN0LiIpO3N1cGVyLmluaXQoKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckRlc3Ryb3kiLCgpPT57dGhpcy5wYXJlbnRE''@;'; put 'put ''ZXN0cm95ZWQ9ITAsdGhpcy5kZXN0cm95RWxlbWVudHMoKX0pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyU2V0VGhlbWUiLChsLGEpPT57YXx8KGNhKHRoaXMuZGF0ZVBpY2tlciwvaHQtdGhlbWUtLiovZyksVGkodGhpcy5kYXRlUGlja2VyLGwpKX0pfWNyZWF0ZUVsZW1lbnRzKCl7c3VwZXIu''@;'; put 'put ''Y3JlYXRlRWxlbWVudHMoKSx0aGlzLmRhdGVQaWNrZXI9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpLHRoaXMuZGF0ZVBpY2tlclN0eWxlPXRoaXMuZGF0ZVBpY2tlci5zdHlsZSx0aGlzLmRhdGVQaWNrZXJTdHlsZS5wb3NpdGlvbj0iYWJzb2x1dGUiLHRoaXMu''@;'; put 'put ''ZGF0ZVBpY2tlclN0eWxlLnRvcD0wLHRoaXMuZGF0ZVBpY2tlclN0eWxlLmxlZnQ9MCx0aGlzLmRhdGVQaWNrZXJTdHlsZS56SW5kZXg9OTk5OSx0aGlzLmRhdGVQaWNrZXIuc2V0QXR0cmlidXRlKCJkaXIiLHRoaXMuaG90LmlzUnRsKCk/InJ0bCI6Imx0ciIpLFRpKHRoaXMuZGF0ZVBpY2tl''@;'; put 'put ''ciwiaHREYXRlcGlja2VySG9sZGVyIik7Y29uc3QgbD10aGlzLmhvdC5nZXRDdXJyZW50VGhlbWVOYW1lKCk7Y2EodGhpcy5kYXRlUGlja2VyLC9odC10aGVtZS0uKi9nKSxUaSh0aGlzLmRhdGVQaWNrZXIsbCksdGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGhpcy5k''@;'; put 'put ''YXRlUGlja2VyKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuZGF0ZVBpY2tlciwibW91c2Vkb3duIixhPT57cGEoYS50YXJnZXQsInBpa2EtZGF5IikmJnRoaXMuaGlkZURhdGVwaWNrZXIoKSxhLnN0b3BQcm9wYWdhdGlvbigpfSl9ZGVzdHJveUVsZW1lbnRzKCl7''@;'; put 'put ''Y29uc3QgbD10aGlzLmRhdGVQaWNrZXIucGFyZW50Tm9kZTt0aGlzLiRkYXRlUGlja2VyJiZ0aGlzLiRkYXRlUGlja2VyLmRlc3Ryb3koKSxsJiZsLnJlbW92ZUNoaWxkKHRoaXMuZGF0ZVBpY2tlcil9cHJlcGFyZShsLGEsZCxoLGYsdil7c3VwZXIucHJlcGFyZShsLGEsZCxoLGYsdil9b3Bl''@;'; put 'put ''bigpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIik7dGhpcy5zaG93RGF0ZXBpY2tlcihsKSxzdXBlci5vcGVuKCks''@;'; put 'put ''ZC5hZGRTaG9ydGN1dHMoW3trZXlzOltbIkFycm93TGVmdCJdXSxjYWxsYmFjazooKT0+e3RoaXMuJGRhdGVQaWNrZXIuYWRqdXN0RGF0ZSgic3VidHJhY3QiLDEpfX0se2tleXM6W1siQXJyb3dSaWdodCJdXSxjYWxsYmFjazooKT0+e3RoaXMuJGRhdGVQaWNrZXIuYWRqdXN0RGF0ZSgiYWRk''@;'; put 'put ''IiwxKX19LHtrZXlzOltbIkFycm93VXAiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLiRkYXRlUGlja2VyLmFkanVzdERhdGUoInN1YnRyYWN0Iiw3KX19LHtrZXlzOltbIkFycm93RG93biJdXSxjYWxsYmFjazooKT0+e3RoaXMuJGRhdGVQaWNrZXIuYWRqdXN0RGF0ZSgiYWRkIiw3KX19XSx7Z3Jv''@;'; put 'put ''dXA6QXBlfSl9Y2xvc2UoKXt2YXIgbDt0aGlzLl9vcGVuZWQ9ITEsbnVsbCE9PShsPXRoaXMuJGRhdGVQaWNrZXIpJiZ2b2lkIDAhPT1sJiZsLmRlc3Ryb3kmJnRoaXMuJGRhdGVQaWNrZXIuZGVzdHJveSgpLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9Pntjb25zdCBoPXRoaXMuaG90''@;'; put 'put ''Ll9nZXRFZGl0b3JNYW5hZ2VyKCk7aC5jbG9zZUVkaXRvcigpLHRoaXMuaG90LnZpZXcucmVuZGVyKCksaC5wcmVwYXJlRWRpdG9yKCl9KSx0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJlZGl0b3IiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKEFwZSksc3VwZXIu''@;'; put 'put ''Y2xvc2UoKX1maW5pc2hFZGl0aW5nKCl7c3VwZXIuZmluaXNoRWRpdGluZyhhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0pfXNob3dEYXRl''@;'; put 'put ''cGlja2VyKGwpe2NvbnN0IGE9RFgoVlAsdGhpcyxJWCkuY2FsbCh0aGlzKSxkPXRoaXMuaG90LnZpZXcuaXNNb3VzZURvd24oKSxoPSEhbCYmeCQobC5rZXlDb2RlKTtsZXQgZjt0aGlzLmRhdGVQaWNrZXIuc3R5bGUuZGlzcGxheT0iYmxvY2siLHRoaXMuJGRhdGVQaWNrZXI9bmV3IGtYKHRo''@;'; put 'put ''aXMuZ2V0RGF0ZVBpY2tlckNvbmZpZygpKSwiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy4kZGF0ZVBpY2tlci51c2VNb21lbnQmJnRoaXMuJGRhdGVQaWNrZXIudXNlTW9tZW50KExhKSx0aGlzLiRkYXRlUGlja2VyLl9vbklucHV0Rm9jdXM9ZnVuY3Rpb24oKXt9LHRoaXMub3JpZ2luYWxWYWx1''@;'; put 'put ''ZT8oZj10aGlzLm9yaWdpbmFsVmFsdWUsTGEoZixhLCEwKS5pc1ZhbGlkKCkmJnRoaXMuJGRhdGVQaWNrZXIuc2V0TW9tZW50KExhKGYsYSksITApLHRoaXMuZ2V0VmFsdWUoKSE9PXRoaXMub3JpZ2luYWxWYWx1ZSYmdGhpcy5zZXRWYWx1ZSh0aGlzLm9yaWdpbmFsVmFsdWUpLCFoJiYhZCYm''@;'; put 'put ''dGhpcy5zZXRWYWx1ZSgiIikpOnRoaXMuY2VsbFByb3BlcnRpZXMuZGVmYXVsdERhdGU/KGY9dGhpcy5jZWxsUHJvcGVydGllcy5kZWZhdWx0RGF0ZSxMYShmLGEsITApLmlzVmFsaWQoKSYmdGhpcy4kZGF0ZVBpY2tlci5zZXRNb21lbnQoTGEoZixhKSwhMCksIWgmJiFkJiZ0aGlzLnNldFZh''@;'; put 'put ''bHVlKCIiKSk6dGhpcy4kZGF0ZVBpY2tlci5nb3RvVG9kYXkoKX1oaWRlRGF0ZXBpY2tlcigpe3RoaXMuZGF0ZVBpY2tlclN0eWxlLmRpc3BsYXk9Im5vbmUiLHRoaXMuJGRhdGVQaWNrZXIuaGlkZSgpfWdldERhdGVQaWNrZXJDb25maWcoKXt2YXIgbDtjb25zdCBhPXRoaXMuVEVYVEFSRUEs''@;'; put 'put ''ZD17fTt0aGlzLmNlbGxQcm9wZXJ0aWVzJiZ0aGlzLmNlbGxQcm9wZXJ0aWVzLmRhdGVQaWNrZXJDb25maWcmJndFKGQsdGhpcy5jZWxsUHJvcGVydGllcy5kYXRlUGlja2VyQ29uZmlnKTtjb25zdCBoPWQub25TZWxlY3QsZj1kLm9uQ2xvc2U7cmV0dXJuIGQuZmllbGQ9YSxkLnRyaWdnZXI9''@;'; put 'put ''YSxkLmNvbnRhaW5lcj10aGlzLmRhdGVQaWNrZXIsZC5ib3VuZD0hMSxkLmtleWJvYXJkSW5wdXQ9ITEsZC5mb3JtYXQ9bnVsbCE9PShsPWQuZm9ybWF0KSYmdm9pZCAwIT09bD9sOkRYKFZQLHRoaXMsSVgpLmNhbGwodGhpcyksZC5yZXBvc2l0aW9uPWQucmVwb3NpdGlvbnx8ITEsZC5pc1JU''@;'; put 'put ''TD0hMSxkLm9uU2VsZWN0PXY9PntsZXQgTT12O2lzTmFOKE0uZ2V0VGltZSgpKXx8KE09TGEoTSkuZm9ybWF0KERYKFZQLHRoaXMsSVgpLmNhbGwodGhpcykpKSx0aGlzLnNldFZhbHVlKE0pLGgmJmgoKSxTcCgpJiZ0aGlzLmhpZGVEYXRlcGlja2VyKCl9LGQub25DbG9zZT0oKT0+e3RoaXMu''@;'; put 'put ''cGFyZW50RGVzdHJveWVkfHx0aGlzLmZpbmlzaEVkaXRpbmcoITEpLGYmJmYoKX0sZH1yZWZyZXNoRGltZW5zaW9ucyhsKXt2YXIgYTtpZihzdXBlci5yZWZyZXNoRGltZW5zaW9ucyhsKSx0aGlzLnN0YXRlIT09c3UuRURJVElORylyZXR1cm47aWYodGhpcy5URD10aGlzLmdldEVkaXRlZENl''@;'; put 'put ''bGwoKSwhdGhpcy5URClyZXR1cm4gdm9pZCB0aGlzLmhpZGVEYXRlcGlja2VyKCk7Y29uc3R7cm93SW5kZXhNYXBwZXI6ZCxjb2x1bW5JbmRleE1hcHBlcjpofT10aGlzLmhvdCx7d3RPdmVybGF5czpmfT10aGlzLmhvdC52aWV3Ll93dCx7d3RUYWJsZTp2fT1udWxsIT09KGE9Zi5nZXRQYXJl''@;'; put 'put ''bnRPdmVybGF5KHRoaXMuVEQpKSYmdm9pZCAwIT09YT9hOnRoaXMuaG90LnZpZXcuX3d0LE09ZC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHYuZ2V0Rmlyc3RQYXJ0aWFsbHlWaXNpYmxlUm93KCkpLEQ9ZC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHYuZ2V0TGFzdFBhcnRp''@;'; put 'put ''YWxseVZpc2libGVSb3coKSksWj1oLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgodi5nZXRGaXJzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKSksbmU9aC5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KHYuZ2V0TGFzdFBhcnRpYWxseVZpc2libGVDb2x1bW4oKSk7aWYodGhpcy5y''@;'; put 'put ''b3c+PU0mJnRoaXMucm93PD1EJiZ0aGlzLmNvbD49WiYmdGhpcy5jb2w8PW5lKXtjb25zdCBjZT10aGlzLlRELmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuZGF0ZVBpY2tlclN0eWxlLnRvcD1gJHt0aGlzLmhvdC5yb290V2luZG93LnBhZ2VZT2Zmc2V0K2NlLnRvcCtNdSh0aGlzLlRE''@;'; put 'put ''KX1weGA7bGV0IGJlPXRoaXMuaG90LnJvb3RXaW5kb3cucGFnZVhPZmZzZXQ7dGhpcy5ob3QuaXNSdGwoKT9iZSs9Y2UucmlnaHQtYXUodGhpcy5kYXRlUGlja2VyKTpiZSs9Y2UubGVmdCx0aGlzLmRhdGVQaWNrZXJTdHlsZS5sZWZ0PWAke2JlfXB4YH1lbHNlIHRoaXMuaGlkZURhdGVwaWNr''@;'; put 'put ''ZXIoKX19ZnVuY3Rpb24gSVgoKXt2YXIgYztyZXR1cm4gbnVsbCE9PShjPXRoaXMuY2VsbFByb3BlcnRpZXMuZGF0ZUZvcm1hdCkmJnZvaWQgMCE9PWM/YzoiREQvTU0vWVlZWSJ9Y2xhc3MgRHBlIGV4dGVuZHMgTVh7c3RhdGljIGdldCBFRElUT1JfVFlQRSgpe3JldHVybiJkcm9wZG93biJ9''@;'; put 'put ''cHJlcGFyZShsLGEsZCxoLGYsdil7di5maWx0ZXI9ITEsdi5zdHJpY3Q9ITAsc3VwZXIucHJlcGFyZShsLGEsZCxoLGYsdil9fWNsYXNzIElwZSBleHRlbmRzIHQ5e3N0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4ibnVtZXJpYyJ9fWNsYXNzIFJwZSBleHRlbmRzIHQ5e2NvbnN0cnVj''@;'; put 'put ''dG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBkaXQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGhpdChjKXt2YXIgbD1mdW5jdGlvbiBmaXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lk''@;'; put 'put ''IDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51''@;'; put 'put ''bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJhdXRvUmVz''@;'; put 'put ''aXplIix1cGUodGhpcy5ob3Qucm9vdERvY3VtZW50LHt0ZXh0Q29udGVudDpsPT4iXHUyMDIyIi5yZXBlYXQobC52YWx1ZS5sZW5ndGgpfSkpfXN0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4icGFzc3dvcmQifWNyZWF0ZUVsZW1lbnRzKCl7c3VwZXIuY3JlYXRlRWxlbWVudHMoKSx0''@;'; put 'put ''aGlzLlRFWFRBUkVBPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLHRoaXMuVEVYVEFSRUEuc2V0QXR0cmlidXRlKCJ0eXBlIiwicGFzc3dvcmQiKSx0aGlzLlRFWFRBUkVBLnNldEF0dHJpYnV0ZSgiZGF0YS1ob3QtaW5wdXQiLCIiKSx0aGlzLlRFWFRBUkVB''@;'; put 'put ''LmNsYXNzTmFtZT0iaGFuZHNvbnRhYmxlSW5wdXQiLHRoaXMudGV4dGFyZWFTdHlsZT10aGlzLlRFWFRBUkVBLnN0eWxlLHRoaXMudGV4dGFyZWFTdHlsZS53aWR0aD0wLHRoaXMudGV4dGFyZWFTdHlsZS5oZWlnaHQ9MCx3cCh0aGlzLlRFWFRBUkVBX1BBUkVOVCksdGhpcy5URVhUQVJFQV9Q''@;'; put 'put ''QVJFTlQuYXBwZW5kQ2hpbGQodGhpcy5URVhUQVJFQSl9fWNvbnN0IFJYPSJodF9lZGl0b3JfdmlzaWJsZSIsTHBlPSJzZWxlY3RFZGl0b3IiO2NsYXNzIE9wZSBleHRlbmRzIE1fe3N0YXRpYyBnZXQgRURJVE9SX1RZUEUoKXtyZXR1cm4ic2VsZWN0In1pbml0KCl7dGhpcy5zZWxlY3RXcmFw''@;'; put 'put ''cGVyPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSx0aGlzLnNlbGVjdD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0IiksdGhpcy5zZWxlY3Quc2V0QXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIsInRydWUiKSx0aGlzLnNlbGVj''@;'; put 'put ''dFdyYXBwZXIuc3R5bGUuZGlzcGxheT0ibm9uZSI7Y29uc3QgbD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRElWIiksYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzO2wuY2xhc3NOYW1lPSJodEF1dG9jb21wbGV0ZUFycm93IixhJiZsLnNldEF0dHJpYnV0''@;'; put 'put ''ZSguLi5rbSgpKSxsLmFwcGVuZENoaWxkKHRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiXHUyNWJjIikpLFRpKHRoaXMuc2VsZWN0V3JhcHBlciwiaHRTZWxlY3RFZGl0b3IiKSx0aGlzLnNlbGVjdFdyYXBwZXIuYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3QpLHRoaXMuc2Vs''@;'; put 'put ''ZWN0V3JhcHBlci5pbnNlcnRCZWZvcmUobCx0aGlzLnNlbGVjdFdyYXBwZXIuZmlyc3RDaGlsZCksdGhpcy5ob3Qucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3RXcmFwcGVyKSx0aGlzLnJlZ2lzdGVySG9va3MoKX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLnNlbGVjdC52YWx1''@;'; put 'put ''ZX1zZXRWYWx1ZShsKXt0aGlzLnNlbGVjdC52YWx1ZT1sfW9wZW4oKXt0aGlzLl9vcGVuZWQ9ITAsdGhpcy5yZWZyZXNoRGltZW5zaW9ucygpLHRoaXMuc2VsZWN0V3JhcHBlci5zdHlsZS5kaXNwbGF5PSIiLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLnNldEFjdGl2ZUNvbnRleHRO''@;'; put 'put ''YW1lKCJlZGl0b3IiKSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCl9Y2xvc2UoKXt0aGlzLl9vcGVuZWQ9ITEsdGhpcy5zZWxlY3RXcmFwcGVyLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHBhKHRoaXMuc2VsZWN0V3JhcHBlcixSWCkmJmNhKHRoaXMuc2VsZWN0V3JhcHBlcixSWCksdGhpcy51bnJl''@;'; put 'put ''Z2lzdGVyU2hvcnRjdXRzKCksdGhpcy5jbGVhckhvb2tzKCl9Zm9jdXMoKXt0aGlzLnNlbGVjdC5mb2N1cygpfXJlZ2lzdGVySG9va3MoKXt0aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsSG9yaXpvbnRhbGx5IiwoKT0+dGhpcy5yZWZyZXNoRGltZW5zaW9ucygpKSx0aGlzLmFkZEhvb2soImFm''@;'; put 'put ''dGVyU2Nyb2xsVmVydGljYWxseSIsKCk9PnRoaXMucmVmcmVzaERpbWVuc2lvbnMoKSksdGhpcy5hZGRIb29rKCJhZnRlckNvbHVtblJlc2l6ZSIsKCk9PnRoaXMucmVmcmVzaERpbWVuc2lvbnMoKSksdGhpcy5hZGRIb29rKCJhZnRlclJvd1Jlc2l6ZSIsKCk9PnRoaXMucmVmcmVzaERpbWVu''@;'; put 'put ''c2lvbnMoKSl9cHJlcGFyZShsLGEsZCxoLGYsdil7c3VwZXIucHJlcGFyZShsLGEsZCxoLGYsdik7Y29uc3QgTT10aGlzLmNlbGxQcm9wZXJ0aWVzLnNlbGVjdE9wdGlvbnM7bGV0IEQ7RD10aGlzLnByZXBhcmVPcHRpb25zKCJmdW5jdGlvbiI9PXR5cGVvZiBNP00odGhpcy5yb3csdGhpcy5j''@;'; put 'put ''b2wsdGhpcy5wcm9wKTpNKSx3cCh0aGlzLnNlbGVjdCkscWEoRCwoWixuZSk9Pntjb25zdCBjZT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiT1BUSU9OIik7Y2UudmFsdWU9bmUsTjcoY2UsWiksdGhpcy5zZWxlY3QuYXBwZW5kQ2hpbGQoY2UpfSl9cHJlcGFyZU9wdGlv''@;'; put 'put ''bnMobCl7bGV0IGE9e307aWYoQXJyYXkuaXNBcnJheShsKSlmb3IobGV0IGQ9MCxoPWwubGVuZ3RoO2Q8aDtkKyspYVtsW2RdXT1sW2RdO2Vsc2Uib2JqZWN0Ij09dHlwZW9mIGwmJihhPWwpO3JldHVybiBhfXJlZnJlc2hWYWx1ZSgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0''@;'; put 'put ''Q2VsbCh0aGlzLnJvdyx0aGlzLnByb3ApO3RoaXMub3JpZ2luYWxWYWx1ZT1sLHRoaXMuc2V0VmFsdWUobCksdGhpcy5yZWZyZXNoRGltZW5zaW9ucygpfXJlZnJlc2hEaW1lbnNpb25zKCl7aWYodGhpcy5zdGF0ZSE9PXN1LkVESVRJTkcpcmV0dXJuO2lmKHRoaXMuVEQ9dGhpcy5nZXRFZGl0''@;'; put 'put ''ZWRDZWxsKCksIXRoaXMuVEQpcmV0dXJuIHZvaWQgdGhpcy5jbG9zZSgpO2NvbnN0e3RvcDpsLHN0YXJ0OmEsd2lkdGg6ZCxoZWlnaHQ6aH09dGhpcy5nZXRFZGl0ZWRDZWxsUmVjdCgpLGY9dGhpcy5zZWxlY3RXcmFwcGVyLnN0eWxlO2YuaGVpZ2h0PWAke2h9cHhgLGYud2lkdGg9YCR7ZH1w''@;'; put 'put ''eGAsZi50b3A9YCR7bH1weGAsZlt0aGlzLmhvdC5pc1J0bCgpPyJyaWdodCI6ImxlZnQiXT1gJHthfXB4YCxmLm1hcmdpbj0iMHB4IixUaSh0aGlzLnNlbGVjdFdyYXBwZXIsUlgpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRD''@;'; put 'put ''b250ZXh0KCJlZGl0b3IiKSxkPXtncm91cDpMcGV9O3RoaXMuaXNJbkZ1bGxFZGl0TW9kZSgpJiZhLmFkZFNob3J0Y3V0cyhbe2tleXM6W1siQXJyb3dVcCJdXSxjYWxsYmFjazooKT0+e2NvbnN0IGg9dGhpcy5zZWxlY3Quc2VsZWN0ZWRJbmRleC0xO2g+PTAmJih0aGlzLnNlbGVjdFtoXS5z''@;'; put 'put ''ZWxlY3RlZD0hMCl9fSx7a2V5czpbWyJBcnJvd0Rvd24iXV0sY2FsbGJhY2s6KCk9Pntjb25zdCBoPXRoaXMuc2VsZWN0LnNlbGVjdGVkSW5kZXgrMTtoPD10aGlzLnNlbGVjdC5sZW5ndGgtMSYmKHRoaXMuc2VsZWN0W2hdLnNlbGVjdGVkPSEwKX19XSxkKX11bnJlZ2lzdGVyU2hvcnRjdXRz''@;'; put 'put ''KCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZWRpdG9yIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChMcGUpfX1jbGFzcyBQcGUgZXh0ZW5kcyB0OXtzdGF0aWMgZ2V0IEVESVRPUl9UWVBFKCl7cmV0dXJuInRpbWUifXByZXBhcmUobCxhLGQsaCxmLHYpe3N1''@;'; put 'put ''cGVyLnByZXBhcmUobCxhLGQsaCxmLHYpLHRoaXMuVEVYVEFSRUEuZGlyPSJsdHIifX1mdW5jdGlvbiBMWChjLGwsYSxkLGgsZix2KXtlVC5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZix2XSksTjcobCxmPz8iIiwhMSl9ZnVuY3Rpb24gRV8oYyxsLGEsZCxoLGYsdil7Y29uc3R7cm9vdERvY3Vt''@;'; put 'put ''ZW50Ok19PWMsRD12LmFsbG93SHRtbD9MWDpNZyxaPU0uY3JlYXRlRWxlbWVudCgiRElWIiksbmU9Yy5nZXRTZXR0aW5ncygpLmFyaWFUYWdzO2lmKFouY2xhc3NOYW1lPSJodEF1dG9jb21wbGV0ZUFycm93IixuZSYmWi5zZXRBdHRyaWJ1dGUoLi4ua20oKSksWi5hcHBlbmRDaGlsZChNLmNy''@;'; put 'put ''ZWF0ZVRleHROb2RlKCJcdTI1YmMiKSksRC5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZix2XSksbC5maXJzdENoaWxkfHxsLmFwcGVuZENoaWxkKE0uY3JlYXRlVGV4dE5vZGUoIlx4YTAiKSksbC5pbnNlcnRCZWZvcmUoWixsLmZpcnN0Q2hpbGQpLFRpKGwsImh0QXV0b2NvbXBsZXRlIiksIWMu''@;'; put 'put ''YWNBcnJvd0xpc3RlbmVyKXtjb25zdCBjZT1uZXcgTDIoYyk7Yy5hY0Fycm93TGlzdGVuZXI9ZnVuY3Rpb24oYmUpe3BhKGJlLnRhcmdldCwiaHRBdXRvY29tcGxldGVBcnJvdyIpJiZjLnZpZXcuX3d0LmdldFNldHRpbmcoIm9uQ2VsbERibENsaWNrIixudWxsLGMuX2NyZWF0ZUNlbGxDb29y''@;'; put 'put ''ZHMoYSxkKSxsKX0sY2UuYWRkRXZlbnRMaXN0ZW5lcihjLnJvb3RFbGVtZW50LCJtb3VzZWRvd24iLGMuYWNBcnJvd0xpc3RlbmVyKSxjLmFkZEhvb2tPbmNlKCJhZnRlckRlc3Ryb3kiLCgpPT57Y2UuZGVzdHJveSgpfSl9fWZ1bmN0aW9uIE9YKGMsbCxhLGQsaCxmLHYpe0VfLmFwcGx5KHRo''@;'; put 'put ''aXMsW2MsbCxhLGQsaCxmLHZdKX1MWC5SRU5ERVJFUl9UWVBFPSJodG1sIixFXy5SRU5ERVJFUl9UWVBFPSJhdXRvY29tcGxldGUiLE9YLlJFTkRFUkVSX1RZUEU9ImRyb3Bkb3duIjtjb25zdCBGcGU9bmV3IFdlYWtNYXAsSHBlPW5ldyBXZWFrTWFwLHdpdD0iaHRCYWRWYWx1ZSIsVF89ImRh''@;'; put 'put ''dGEtcm93IixBXz0iZGF0YS1jb2wiLENpdD0iY2hlY2tib3hSZW5kZXJlciI7ZnVuY3Rpb24gUFgoYyxsLGEsZCxoLGYsdil7Y29uc3R7cm9vdERvY3VtZW50Ok19PWMsRD1jLmdldFNldHRpbmdzKCkuYXJpYVRhZ3M7ZVQuYXBwbHkodGhpcyxbYyxsLGEsZCxoLGYsdl0pLGZ1bmN0aW9uIFNp''@;'; put 'put ''dChjKXtsZXQgbD1IcGUuZ2V0KGMpO2lmKCFsKXtjb25zdHtyb290RWxlbWVudDphfT1jO2w9bmV3IEwyKGMpLGwuYWRkRXZlbnRMaXN0ZW5lcihhLCJjbGljayIsZD0+ZnVuY3Rpb24gVGl0KGMsbCl7Y29uc3R7dGFyZ2V0OmF9PWM7aWYoIUZYKGEpfHwhYS5oYXNBdHRyaWJ1dGUoVF8pfHwh''@;'; put 'put ''YS5oYXNBdHRyaWJ1dGUoQV8pKXJldHVybjtjb25zdCBkPXBhcnNlSW50KGEuZ2V0QXR0cmlidXRlKFRfKSwxMCksaD1wYXJzZUludChhLmdldEF0dHJpYnV0ZShBXyksMTApO2wuZ2V0Q2VsbE1ldGEoZCxoKS5yZWFkT25seSYmYy5wcmV2ZW50RGVmYXVsdCgpfShkLGMpKSxsLmFkZEV2ZW50''@;'; put 'put ''TGlzdGVuZXIoYSwibW91c2V1cCIsZD0+ZnVuY3Rpb24gRWl0KGMsbCl7Y29uc3R7dGFyZ2V0OmF9PWM7RlgoYSkmJighYS5oYXNBdHRyaWJ1dGUoVF8pfHwhYS5oYXNBdHRyaWJ1dGUoQV8pfHxzZXRUaW1lb3V0KGwubGlzdGVuLDEwKSl9KGQsYykpLGwuYWRkRXZlbnRMaXN0ZW5lcihhLCJj''@;'; put 'put ''aGFuZ2UiLGQ9PmZ1bmN0aW9uIEFpdChjLGwpe2NvbnN0e3RhcmdldDphfT1jO2lmKCFGWChhKXx8IWEuaGFzQXR0cmlidXRlKFRfKXx8IWEuaGFzQXR0cmlidXRlKEFfKSlyZXR1cm47Y29uc3QgZD1wYXJzZUludChhLmdldEF0dHJpYnV0ZShUXyksMTApLGg9cGFyc2VJbnQoYS5nZXRBdHRy''@;'; put 'put ''aWJ1dGUoQV8pLDEwKSxmPWwuZ2V0Q2VsbE1ldGEoZCxoKTtpZighZi5yZWFkT25seSl7bGV0IHY9bnVsbDt2PWMudGFyZ2V0LmNoZWNrZWQ/dm9pZCAwPT09Zi51bmNoZWNrZWRUZW1wbGF0ZXx8Zi5jaGVja2VkVGVtcGxhdGU6dm9pZCAwIT09Zi51bmNoZWNrZWRUZW1wbGF0ZSYmZi51bmNo''@;'; put 'put ''ZWNrZWRUZW1wbGF0ZSxsLnNldERhdGFBdENlbGwoZCxoLHYpfX0oZCxjKSksSHBlLnNldChjLGwpfX0oYyk7bGV0IFo9ZnVuY3Rpb24gTWl0KGMpe2NvbnN0IGw9Yy5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3JldHVybiBsLmNsYXNzTmFtZT0iaHRDaGVja2JveFJlbmRlcmVySW5wdXQiLGwu''@;'; put 'put ''dHlwZT0iY2hlY2tib3giLGwuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsIi0xIiksbC5jbG9uZU5vZGUoITEpfShNKTtjb25zdCBuZT12LmxhYmVsO2xldCBjZT0hMTtpZih0eXBlb2Ygdi5jaGVja2VkVGVtcGxhdGU+InUiJiYodi5jaGVja2VkVGVtcGxhdGU9ITApLHR5cGVvZiB2LnVuY2hl''@;'; put 'put ''Y2tlZFRlbXBsYXRlPiJ1IiYmKHYudW5jaGVja2VkVGVtcGxhdGU9ITEpLHdwKGwpLGY9PT12LmNoZWNrZWRUZW1wbGF0ZXx8emMoZikudG9Mb2NhbGVMb3dlckNhc2Uodi5sb2NhbGUpPT09emModi5jaGVja2VkVGVtcGxhdGUpLnRvTG9jYWxlTG93ZXJDYXNlKHYubG9jYWxlKT9aLmNoZWNr''@;'; put 'put ''ZWQ9ITA6Zj09PXYudW5jaGVja2VkVGVtcGxhdGV8fHpjKGYpLnRvTG9jYWxlTG93ZXJDYXNlKHYubG9jYWxlKT09PXpjKHYudW5jaGVja2VkVGVtcGxhdGUpLnRvTG9jYWxlTG93ZXJDYXNlKHYubG9jYWxlKT9aLmNoZWNrZWQ9ITE6VWMoZik/VGkoWiwibm9WYWx1ZSIpOihaLnN0eWxlLmRp''@;'; put 'put ''c3BsYXk9Im5vbmUiLFRpKFosd2l0KSxjZT0hMCksdmEoWixbW1RfLGFdLFtBXyxkXV0pLEQmJnZhKFosW3hPKGMuZ2V0VHJhbnNsYXRlZFBocmFzZShaLmNoZWNrZWQ/ZVg6dFgpKSxwMmUoWi5jaGVja2VkKSxES2UoKV0pLCFjZSYmbmUpe2xldCBxZT0iIjtpZihuZS52YWx1ZSlxZT0iZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2YgbmUudmFsdWU/bmUudmFsdWUuY2FsbCh0aGlzLGEsZCxoLGYpOm5lLnZhbHVlO2Vsc2UgaWYobmUucHJvcGVydHkpe2NvbnN0IGx0PWMuZ2V0RGF0YUF0Um93UHJvcChhLG5lLnByb3BlcnR5KTtxZT1udWxsIT09bHQ/bHQ6IiJ9Y29uc3QgbnQ9ZnVuY3Rpb24geGl0''@;'; put 'put ''KGMsbCxhKXtjb25zdCBkPWMuY3JlYXRlRWxlbWVudCgibGFiZWwiKTtkLmNsYXNzTmFtZT0iaHRDaGVja2JveFJlbmRlcmVyTGFiZWwgIisoYT8iZnVsbFdpZHRoIjoiIik7Y29uc3QgaD1jLmNyZWF0ZVRleHROb2RlKGwpO2lmKGEpe2NvbnN0IGY9Yy5jcmVhdGVFbGVtZW50KCJzcGFuIik7''@;'; put 'put ''Zi5hcHBlbmRDaGlsZChoKSxkLmFwcGVuZENoaWxkKGYpfWVsc2UgZC5hcHBlbmRDaGlsZChoKTtyZXR1cm4gZC5jbG9uZU5vZGUoITApfShNLHFlLCEwIT09bmUuc2VwYXJhdGVkKTsiYmVmb3JlIj09PW5lLnBvc2l0aW9uP25lLnNlcGFyYXRlZD8obC5hcHBlbmRDaGlsZChudCksbC5hcHBl''@;'; put 'put ''bmRDaGlsZChaKSk6KG50LmFwcGVuZENoaWxkKFopLFo9bnQpOighbmUucG9zaXRpb258fCJhZnRlciI9PT1uZS5wb3NpdGlvbikmJihuZS5zZXBhcmF0ZWQ/KGwuYXBwZW5kQ2hpbGQoWiksbC5hcHBlbmRDaGlsZChudCkpOihudC5pbnNlcnRCZWZvcmUoWixudC5maXJzdENoaWxkKSxaPW50''@;'; put 'put ''KSl9ZnVuY3Rpb24gRWUoKXtsZXQgcWU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtjb25zdCBudD1jLmdldFNlbGVjdGVkUmFuZ2UoKSxsdD1bXSxtdD1uZXcgTWFwO2xldCBKdD1bXSx5bj0wO2lmKG50KXtmb3IobGV0IENuPTA7Q248''@;'; put 'put ''bnQubGVuZ3RoO0NuKyspe2NvbnN0e3Jvdzp0bixjb2w6eG59PW50W0NuXS5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6UW4sY29sOnlpfT1udFtDbl0uZ2V0Qm90dG9tRW5kQ29ybmVyKCk7Zm9yKGxldCB5cj10bjt5cjw9UW47eXIrPTEpZm9yKGxldCBHbj14bjtHbjw9eWk7R24rPTEpe2Nv''@;'; put 'put ''bnN0IGlpPWMuZ2V0Q2VsbE1ldGEoeXIsR24pO2lmKGlpLmhpZGRlbiljb250aW51ZTtjb25zdCBfaT17Y2hlY2tlZFRlbXBsYXRlOmlpLmNoZWNrZWRUZW1wbGF0ZSx1bmNoZWNrZWRUZW1wbGF0ZTppaS51bmNoZWNrZWRUZW1wbGF0ZX07aWYoImNoZWNrYm94IiE9PWlpLnR5cGUpeyEwPT09''@;'; put 'put ''cWUmJiFpaS5yZWFkT25seSYmKG10LmhhcyhsdC5sZW5ndGgpP210LnNldChsdC5sZW5ndGgsWy4uLm10LmdldChsdC5sZW5ndGgpLFt5cixHbixudWxsXV0pOm10LnNldChsdC5sZW5ndGgsW1t5cixHbixudWxsXV0pKTtjb250aW51ZX1pZighMD09PWlpLnJlYWRPbmx5KWNvbnRpbnVlO3R5''@;'; put 'put ''cGVvZiBpaS5jaGVja2VkVGVtcGxhdGU+InUiJiYoaWkuY2hlY2tlZFRlbXBsYXRlPSEwKSx0eXBlb2YgaWkudW5jaGVja2VkVGVtcGxhdGU+InUiJiYoaWkudW5jaGVja2VkVGVtcGxhdGU9ITEpO2NvbnN0IFBuPWMuZ2V0RGF0YUF0Q2VsbCh5cixHbik7ITE9PT1xZT9baWkuY2hlY2tlZFRl''@;'; put 'put ''bXBsYXRlLGlpLmNoZWNrZWRUZW1wbGF0ZS50b1N0cmluZygpXS5pbmNsdWRlcyhQbik/SnQucHVzaChbeXIsR24saWkudW5jaGVja2VkVGVtcGxhdGUsX2ldKTpbaWkudW5jaGVja2VkVGVtcGxhdGUsaWkudW5jaGVja2VkVGVtcGxhdGUudG9TdHJpbmcoKSxudWxsLHZvaWQgMF0uaW5jbHVk''@;'; put 'put ''ZXMoUG4pJiZKdC5wdXNoKFt5cixHbixpaS5jaGVja2VkVGVtcGxhdGUsX2ldKTpKdC5wdXNoKFt5cixHbixpaS51bmNoZWNrZWRUZW1wbGF0ZSxfaV0pLHluKz0xfWx0LnB1c2goeW4pLHluPTB9SnQ9SnQuZXZlcnkoQ249PntsZXRbLCx0bl09Q247cmV0dXJuIHRuPT09SnRbMF1bMl19KT9K''@;'; put 'put ''dC5tYXAoQ249PntsZXRbdG4seG4sUW5dPUNuO3JldHVyblt0bix4bixRbl19KTpKdC5tYXAoQ249PntsZXRbdG4seG4sLFFuXT1DbjtyZXR1cm5bdG4seG4sUW4uY2hlY2tlZFRlbXBsYXRlXX0pLEp0Lmxlbmd0aD4wJiZsdC5mb3JFYWNoKChDbix0bik9PntsZXQgeG49SnQuc3BsaWNlKDAs''@;'; put 'put ''Q24pO210LnNpemUmJm10Lmhhcyh0bikmJih4bj1bLi4ueG4sLi4ubXQuZ2V0KHRuKV0pLGMuc2V0RGF0YUF0Q2VsbCh4bil9KX19ZnVuY3Rpb24gQmUoKXtjb25zdCBxZT1jLmdldFNlbGVjdGVkUmFuZ2UoKTtpZihxZSl7Zm9yKGxldCBudD0wO250PHFlLmxlbmd0aDtudCsrKXtjb25zdCBs''@;'; put 'put ''dD1xZVtudF0uZ2V0VG9wU3RhcnRDb3JuZXIoKSxtdD1xZVtudF0uZ2V0Qm90dG9tRW5kQ29ybmVyKCk7Zm9yKGxldCBKdD1sdC5yb3c7SnQ8PW10LnJvdztKdCsrKWZvcihsZXQgeW49bHQuY29sO3luPD1tdC5jb2w7eW4rKyl7aWYoYy5nZXRDZWxsTWV0YShKdCx5bikucmVhZE9ubHkpY29u''@;'; put 'put ''dGludWU7Y29uc3QgdG49Yy5nZXRDZWxsKEp0LHluKTtpZihmZyh0bikmJnRuLnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0W3R5cGU9Y2hlY2tib3hdIikubGVuZ3RoPjApcmV0dXJuITB9fXJldHVybiExfX0oIW5lfHxuZSYmIW5lLnNlcGFyYXRlZCkmJmwuYXBwZW5kQ2hpbGQoWiksY2UmJmwu''@;'; put 'put ''YXBwZW5kQ2hpbGQoTS5jcmVhdGVUZXh0Tm9kZSgiI2JhZC12YWx1ZSMiKSksRnBlLmhhcyhjKXx8KEZwZS5zZXQoYywhMCksZnVuY3Rpb24gYmUoKXtjLmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dHMoW3trZXlzOltbInNwYWNlIl1dLGNhbGxi''@;'; put 'put ''YWNrOigpPT4oRWUoKSwhQmUoKSkscnVuT25seUlmOigpPT57dmFyIG10O3JldHVybiBudWxsPT09KG10PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PW10P3ZvaWQgMDptdC5oaWdobGlnaHQuaXNDZWxsKCl9fSx7a2V5czpbWyJlbnRlciJdXSxjYWxsYmFjazooKT0+KEVl''@;'; put 'put ''KCksIUJlKCkpLHJ1bk9ubHlJZjooKT0+e2NvbnN0IG10PWMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4gYy5nZXRTZXR0aW5ncygpLmVudGVyQmVnaW5zRWRpdGluZyYmbXQ/LmhpZ2hsaWdodC5pc0NlbGwoKSYmIWMuc2VsZWN0aW9uLmlzTXVsdGlwbGUoKX19LHtrZXlzOltbImRl''@;'; put 'put ''bGV0ZSJdLFsiYmFja3NwYWNlIl1dLGNhbGxiYWNrOigpPT4oRWUoITApLCFCZSgpKSxydW5Pbmx5SWY6KCk9Pnt2YXIgbXQ7cmV0dXJuIG51bGw9PT0obXQ9Yy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09bXQ/dm9pZCAwOm10LmhpZ2hsaWdodC5pc0NlbGwoKX19XSx7Z3Jv''@;'; put 'put ''dXA6Q2l0LHJlbGF0aXZlVG9Hcm91cDpVbSxwb3NpdGlvbjoiYmVmb3JlIn0pfSgpKX1mdW5jdGlvbiBGWChjKXtyZXR1cm4iSU5QVVQiPT09Yy50YWdOYW1lJiYiY2hlY2tib3giPT09Yy5nZXRBdHRyaWJ1dGUoInR5cGUiKX1mdW5jdGlvbiBIWChjLGwsYSxkLGgsZix2KXtFXy5hcHBseSh0''@;'; put 'put ''aGlzLFtjLGwsYSxkLGgsZix2XSl9QW8uZ2V0U2luZ2xldG9uKCkuYWRkKCJtb2RpZnlBdXRvQ29sdW1uU2l6ZVNlZWQiLGZ1bmN0aW9uKGMsbCxhKXtjb25zdHtsYWJlbDpkLHR5cGU6aCxyb3c6Zixjb2x1bW46dixwcm9wOk19PWw7aWYoImNoZWNrYm94Ij09PWgpe2lmKGQpe2NvbnN0e3Zh''@;'; put 'put ''bHVlOkQscHJvcGVydHk6Wn09ZDtsZXQgbmU9YTtpZihEKW5lPSJmdW5jdGlvbiI9PXR5cGVvZiBEP0QoZix2LE0sYSk6RDtlbHNlIGlmKFope2NvbnN0IGNlPXRoaXMuZ2V0RGF0YUF0Um93UHJvcChmLFopO25lPW51bGwhPT1jZT9jZTphfWM9bmV9cmV0dXJuIGN9fSksUFguUkVOREVSRVJf''@;'; put 'put ''VFlQRT0iY2hlY2tib3giLEhYLlJFTkRFUkVSX1RZUEU9ImhhbmRzb250YWJsZSI7dmFyIE5YLFZwZSxWWCxCcGUsQlgsenBlLERpdD10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVv''@;'; put 'put ''ZiBzZWxmPCJ1Ij9zZWxmOnt9O2Z1bmN0aW9uIElpdChjKXtyZXR1cm4gYyYmYy5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYywiZGVmYXVsdCIpP2MuZGVmYXVsdDpjfWZ1bmN0aW9uIGpwZSgpe2lmKEJwZSlyZXR1cm4gVlg7QnBlPTE7Y29uc3Qg''@;'; put 'put ''Yz1be2tleToiWmlCIixmYWN0b3I6TWF0aC5wb3coMTAyNCw3KX0se2tleToiWkIiLGZhY3RvcjpNYXRoLnBvdygxZTMsNyl9LHtrZXk6IllpQiIsZmFjdG9yOk1hdGgucG93KDEwMjQsOCl9LHtrZXk6IllCIixmYWN0b3I6TWF0aC5wb3coMWUzLDgpfSx7a2V5OiJUaUIiLGZhY3RvcjpNYXRo''@;'; put 'put ''LnBvdygxMDI0LDQpfSx7a2V5OiJUQiIsZmFjdG9yOk1hdGgucG93KDFlMyw0KX0se2tleToiUGlCIixmYWN0b3I6TWF0aC5wb3coMTAyNCw1KX0se2tleToiUEIiLGZhY3RvcjpNYXRoLnBvdygxZTMsNSl9LHtrZXk6Ik1pQiIsZmFjdG9yOk1hdGgucG93KDEwMjQsMil9LHtrZXk6Ik1CIixm''@;'; put 'put ''YWN0b3I6TWF0aC5wb3coMWUzLDIpfSx7a2V5OiJLaUIiLGZhY3RvcjpNYXRoLnBvdygxMDI0LDEpfSx7a2V5OiJLQiIsZmFjdG9yOk1hdGgucG93KDFlMywxKX0se2tleToiR2lCIixmYWN0b3I6TWF0aC5wb3coMTAyNCwzKX0se2tleToiR0IiLGZhY3RvcjpNYXRoLnBvdygxZTMsMyl9LHtr''@;'; put 'put ''ZXk6IkVpQiIsZmFjdG9yOk1hdGgucG93KDEwMjQsNil9LHtrZXk6IkVCIixmYWN0b3I6TWF0aC5wb3coMWUzLDYpfSx7a2V5OiJCIixmYWN0b3I6MX1dO2Z1bmN0aW9uIGwoRCl7cmV0dXJuIEQucmVwbGFjZSgvWy0vXFxeJCorPy4oKXxbXF17fV0vZywiXFwkJiIpfWZ1bmN0aW9uIGEoRCxa''@;'; put 'put ''LG5lLGNlLGJlLEVlLEJlKXtpZighaXNOYU4oK0QpKXJldHVybitEO2xldCBxZT0iIixudD1ELnJlcGxhY2UoLyheW14oXSopXCgoLiopXCkoW14pXSokKS8sIiQxJDIkMyIpO2lmKG50IT09RClyZXR1cm4tMSphKG50LFosbmUsY2UsYmUsRWUpO2ZvcihsZXQgdG49MDt0bjxjLmxlbmd0aDt0''@;'; put 'put ''bisrKXtsZXQgeG49Y1t0bl07aWYocWU9RC5yZXBsYWNlKFJlZ0V4cChgKFswLTkgXSkoJHt4bi5rZXl9KSRgKSwiJDEiKSxxZSE9PUQpcmV0dXJuIGEocWUsWixuZSxjZSxiZSxFZSkqeG4uZmFjdG9yfWlmKHFlPUQucmVwbGFjZSgiJSIsIiIpLHFlIT09RClyZXR1cm4gYShxZSxaLG5lLGNl''@;'; put 'put ''LGJlLEVlKS8xMDA7bGV0IGx0PXBhcnNlRmxvYXQoRCk7aWYoaXNOYU4obHQpKXJldHVybjtsZXQgbXQ9Y2UobHQpO2lmKG10JiYiLiIhPT1tdCYmKHFlPUQucmVwbGFjZShuZXcgUmVnRXhwKGAke2wobXQpfSRgKSwiIikscWUhPT1EKSlyZXR1cm4gYShxZSxaLG5lLGNlLGJlLEVlKTtsZXQg''@;'; put 'put ''SnQ9e307T2JqZWN0LmtleXMoRWUpLmZvckVhY2godG49PntKdFtFZVt0bl1dPXRufSk7bGV0IHluPU9iamVjdC5rZXlzKEp0KS5zb3J0KCkucmV2ZXJzZSgpLENuPXluLmxlbmd0aDtmb3IobGV0IHRuPTA7dG48Q247dG4rKyl7bGV0IHhuPXluW3RuXSxRbj1KdFt4bl07aWYocWU9RC5yZXBs''@;'; put 'put ''YWNlKHhuLCIiKSxxZSE9PUQpe2xldCB5aTtzd2l0Y2goUW4pe2Nhc2UidGhvdXNhbmQiOnlpPU1hdGgucG93KDEwLDMpO2JyZWFrO2Nhc2UibWlsbGlvbiI6eWk9TWF0aC5wb3coMTAsNik7YnJlYWs7Y2FzZSJiaWxsaW9uIjp5aT1NYXRoLnBvdygxMCw5KTticmVhaztjYXNlInRyaWxsaW9u''@;'; put 'put ''Ijp5aT1NYXRoLnBvdygxMCwxMil9cmV0dXJuIGEocWUsWixuZSxjZSxiZSxFZSkqeWl9fX1mdW5jdGlvbiBoKEQsWixuZT0iIixjZSxiZSxFZSxCZSl7aWYoIiI9PT1EKXJldHVybjtpZihEPT09YmUpcmV0dXJuIDA7bGV0IHFlPWZ1bmN0aW9uIGQoRCxaLG5lKXtsZXQgY2U9RC5yZXBsYWNl''@;'; put 'put ''KG5lLCIiKTtyZXR1cm4gY2U9Y2UucmVwbGFjZShuZXcgUmVnRXhwKGAoWzAtOV0pJHtsKFoudGhvdXNhbmRzKX0oWzAtOV0pYCwiZyIpLCIkMSQyIiksY2U9Y2UucmVwbGFjZShaLmRlY2ltYWwsIi4iKSxjZX0oRCxaLG5lKTtyZXR1cm4gYShxZSxaLG5lLGNlLGJlLEVlKX1yZXR1cm4gVlg9''@;'; put 'put ''e3VuZm9ybWF0OmZ1bmN0aW9uIE0oRCxaKXtjb25zdCBuZT1aWCgpO2xldCBudCxjZT1uZS5jdXJyZW50RGVsaW1pdGVycygpLGJlPW5lLmN1cnJlbnRDdXJyZW5jeSgpLnN5bWJvbCxFZT1uZS5jdXJyZW50T3JkaW5hbCgpLEJlPW5lLmdldFplcm9Gb3JtYXQoKSxxZT1uZS5jdXJyZW50QWJi''@;'; put 'put ''cmV2aWF0aW9ucygpO2lmKCJzdHJpbmciPT10eXBlb2YgRCludD1mdW5jdGlvbiBmKEQsWil7aWYoIUQuaW5kZXhPZigiOiIpfHwiOiI9PT1aLnRob3VzYW5kcylyZXR1cm4hMTtsZXQgY2U9RC5zcGxpdCgiOiIpO2lmKDMhPT1jZS5sZW5ndGgpcmV0dXJuITE7bGV0IEVlPStjZVsxXSxCZT0r''@;'; put 'put ''Y2VbMl07cmV0dXJuIWlzTmFOKCtjZVswXSkmJiFpc05hTihFZSkmJiFpc05hTihCZSl9KEQsY2UpP2Z1bmN0aW9uIHYoRCl7bGV0IFo9RC5zcGxpdCgiOiIpO3JldHVybitaWzJdKzYwKitaWzFdKzM2MDAqK1pbMF19KEQpOmgoRCxjZSxiZSxFZSxCZSxxZSk7ZWxzZXtpZigibnVtYmVyIiE9''@;'; put 'put ''dHlwZW9mIEQpcmV0dXJuO250PUR9aWYodm9pZCAwIT09bnQpcmV0dXJuIG50fX19ZnVuY3Rpb24galgoKXtpZih6cGUpcmV0dXJuIEJYO3pwZT0xO2xldCBjPWpwZSgpO2NvbnN0IGw9L15bYS16XXsyLDN9KC1bYS16QS1aXXs0fSk/KC0oW0EtWl17Mn18WzAtOV17M30pKT8kLyxaPXtvdXRw''@;'; put 'put ''dXQ6e3R5cGU6InN0cmluZyIsdmFsaWRWYWx1ZXM6WyJjdXJyZW5jeSIsInBlcmNlbnQiLCJieXRlIiwidGltZSIsIm9yZGluYWwiLCJudW1iZXIiXX0sYmFzZTp7dHlwZToic3RyaW5nIix2YWxpZFZhbHVlczpbImRlY2ltYWwiLCJiaW5hcnkiLCJnZW5lcmFsIl0scmVzdHJpY3Rpb246KG50''@;'; put 'put ''LGx0KT0+ImJ5dGUiPT09bHQub3V0cHV0LG1lc3NhZ2U6ImBiYXNlYCBtdXN0IGJlIHByb3ZpZGVkIG9ubHkgd2hlbiB0aGUgb3V0cHV0IGlzIGBieXRlYCIsbWFuZGF0b3J5Om50PT4iYnl0ZSI9PT1udC5vdXRwdXR9LGNoYXJhY3RlcmlzdGljOnt0eXBlOiJudW1iZXIiLHJlc3RyaWN0aW9u''@;'; put 'put ''Om50PT5udD49MCxtZXNzYWdlOiJ2YWx1ZSBtdXN0IGJlIHBvc2l0aXZlIn0scHJlZml4OiJzdHJpbmciLHBvc3RmaXg6InN0cmluZyIsZm9yY2VBdmVyYWdlOnt0eXBlOiJzdHJpbmciLHZhbGlkVmFsdWVzOlsidHJpbGxpb24iLCJiaWxsaW9uIiwibWlsbGlvbiIsInRob3VzYW5kIl19LGF2''@;'; put 'put ''ZXJhZ2U6ImJvb2xlYW4iLGxvd1ByZWNpc2lvbjp7dHlwZToiYm9vbGVhbiIscmVzdHJpY3Rpb246KG50LGx0KT0+ITA9PT1sdC5hdmVyYWdlLG1lc3NhZ2U6ImBsb3dQcmVjaXNpb25gIG11c3QgYmUgcHJvdmlkZWQgb25seSB3aGVuIHRoZSBvcHRpb24gYGF2ZXJhZ2VgIGlzIHNldCJ9LGN1''@;'; put 'put ''cnJlbmN5UG9zaXRpb246e3R5cGU6InN0cmluZyIsdmFsaWRWYWx1ZXM6WyJwcmVmaXgiLCJpbmZpeCIsInBvc3RmaXgiXX0sY3VycmVuY3lTeW1ib2w6InN0cmluZyIsdG90YWxMZW5ndGg6e3R5cGU6Im51bWJlciIscmVzdHJpY3Rpb25zOlt7cmVzdHJpY3Rpb246bnQ9Pm50Pj0wLG1lc3Nh''@;'; put 'put ''Z2U6InZhbHVlIG11c3QgYmUgcG9zaXRpdmUifSx7cmVzdHJpY3Rpb246KG50LGx0KT0+IWx0LmV4cG9uZW50aWFsLG1lc3NhZ2U6ImB0b3RhbExlbmd0aGAgaXMgaW5jb21wYXRpYmxlIHdpdGggYGV4cG9uZW50aWFsYCJ9XX0sbWFudGlzc2E6e3R5cGU6Im51bWJlciIscmVzdHJpY3Rpb246''@;'; put 'put ''bnQ9Pm50Pj0wLG1lc3NhZ2U6InZhbHVlIG11c3QgYmUgcG9zaXRpdmUifSxvcHRpb25hbE1hbnRpc3NhOiJib29sZWFuIix0cmltTWFudGlzc2E6ImJvb2xlYW4iLHJvdW5kaW5nRnVuY3Rpb246ImZ1bmN0aW9uIixvcHRpb25hbENoYXJhY3RlcmlzdGljOiJib29sZWFuIix0aG91c2FuZFNl''@;'; put 'put ''cGFyYXRlZDoiYm9vbGVhbiIsc3BhY2VTZXBhcmF0ZWQ6ImJvb2xlYW4iLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ImJvb2xlYW4iLHNwYWNlU2VwYXJhdGVkQWJicmV2aWF0aW9uOiJib29sZWFuIixhYmJyZXZpYXRpb25zOnt0eXBlOiJvYmplY3QiLGNoaWxkcmVuOnt0aG91c2FuZDoic3Ry''@;'; put 'put ''aW5nIixtaWxsaW9uOiJzdHJpbmciLGJpbGxpb246InN0cmluZyIsdHJpbGxpb246InN0cmluZyJ9fSxuZWdhdGl2ZTp7dHlwZToic3RyaW5nIix2YWxpZFZhbHVlczpbInNpZ24iLCJwYXJlbnRoZXNpcyJdfSxmb3JjZVNpZ246ImJvb2xlYW4iLGV4cG9uZW50aWFsOnt0eXBlOiJib29sZWFu''@;'; put 'put ''In0scHJlZml4U3ltYm9sOnt0eXBlOiJib29sZWFuIixyZXN0cmljdGlvbjoobnQsbHQpPT4icGVyY2VudCI9PT1sdC5vdXRwdXQsbWVzc2FnZToiYHByZWZpeFN5bWJvbGAgY2FuIGJlIHByb3ZpZGVkIG9ubHkgd2hlbiB0aGUgb3V0cHV0IGlzIGBwZXJjZW50YCJ9fSxuZT17bGFuZ3VhZ2VU''@;'; put 'put ''YWc6e3R5cGU6InN0cmluZyIsbWFuZGF0b3J5OiEwLHJlc3RyaWN0aW9uOm50PT5udC5tYXRjaChsKSxtZXNzYWdlOiJ0aGUgbGFuZ3VhZ2UgdGFnIG11c3QgZm9sbG93IHRoZSBCQ1AgNDcgc3BlY2lmaWNhdGlvbiAoc2VlIGh0dHBzOi8vdG9vbHMuaWVmdC5vcmcvaHRtbC9iY3A0NykifSxk''@;'; put 'put ''ZWxpbWl0ZXJzOnt0eXBlOiJvYmplY3QiLGNoaWxkcmVuOnt0aG91c2FuZHM6InN0cmluZyIsZGVjaW1hbDoic3RyaW5nIix0aG91c2FuZHNTaXplOiJudW1iZXIifSxtYW5kYXRvcnk6ITB9LGFiYnJldmlhdGlvbnM6e3R5cGU6Im9iamVjdCIsY2hpbGRyZW46e3Rob3VzYW5kOnt0eXBlOiJz''@;'; put 'put ''dHJpbmciLG1hbmRhdG9yeTohMH0sbWlsbGlvbjp7dHlwZToic3RyaW5nIixtYW5kYXRvcnk6ITB9LGJpbGxpb246e3R5cGU6InN0cmluZyIsbWFuZGF0b3J5OiEwfSx0cmlsbGlvbjp7dHlwZToic3RyaW5nIixtYW5kYXRvcnk6ITB9fSxtYW5kYXRvcnk6ITB9LHNwYWNlU2VwYXJhdGVkOiJi''@;'; put 'put ''b29sZWFuIixzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiJib29sZWFuIixvcmRpbmFsOnt0eXBlOiJmdW5jdGlvbiIsbWFuZGF0b3J5OiEwfSxieXRlczp7dHlwZToib2JqZWN0IixjaGlsZHJlbjp7YmluYXJ5U3VmZml4ZXM6Im9iamVjdCIsZGVjaW1hbFN1ZmZpeGVzOiJvYmplY3QifX0sY3Vy''@;'; put 'put ''cmVuY3k6e3R5cGU6Im9iamVjdCIsY2hpbGRyZW46e3N5bWJvbDoic3RyaW5nIixwb3NpdGlvbjoic3RyaW5nIixjb2RlOiJzdHJpbmcifSxtYW5kYXRvcnk6ITB9LGRlZmF1bHRzOiJmb3JtYXQiLG9yZGluYWxGb3JtYXQ6ImZvcm1hdCIsYnl0ZUZvcm1hdDoiZm9ybWF0IixwZXJjZW50YWdl''@;'; put 'put ''Rm9ybWF0OiJmb3JtYXQiLGN1cnJlbmN5Rm9ybWF0OiJmb3JtYXQiLHRpbWVEZWZhdWx0czoiZm9ybWF0Iixmb3JtYXRzOnt0eXBlOiJvYmplY3QiLGNoaWxkcmVuOntmb3VyRGlnaXRzOnt0eXBlOiJmb3JtYXQiLG1hbmRhdG9yeTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7dHlwZToiZm9y''@;'; put 'put ''bWF0IixtYW5kYXRvcnk6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5Ont0eXBlOiJmb3JtYXQiLG1hbmRhdG9yeTohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOnt0eXBlOiJmb3JtYXQiLG1hbmRhdG9yeTohMH19fX07ZnVuY3Rpb24gYmUobnQpe3JldHVybiB2b2lkIDAhPT1jLnVu''@;'; put 'put ''Zm9ybWF0KG50KX1mdW5jdGlvbiBFZShudCxsdCxtdCxKdD0hMSl7bGV0IHluPU9iamVjdC5rZXlzKG50KS5tYXAoQ249PntpZighbHRbQ25dKXJldHVybiBjb25zb2xlLmVycm9yKGAke210fSBJbnZhbGlkIGtleTogJHtDbn1gKSwhMTtsZXQgdG49bnRbQ25dLHhuPWx0W0NuXTtpZigic3Ry''@;'; put 'put ''aW5nIj09dHlwZW9mIHhuJiYoeG49e3R5cGU6eG59KSwiZm9ybWF0Ij09PXhuLnR5cGUpe2lmKCFFZSh0bixaLGBbVmFsaWRhdGUgJHtDbn1dYCwhMCkpcmV0dXJuITF9ZWxzZSBpZih0eXBlb2YgdG4hPT14bi50eXBlKXJldHVybiBjb25zb2xlLmVycm9yKGAke210fSAke0NufSB0eXBlIG1p''@;'; put 'put ''c21hdGNoZWQ6ICIke3huLnR5cGV9IiBleHBlY3RlZCwgIiR7dHlwZW9mIHRufSIgcHJvdmlkZWRgKSwhMTtpZih4bi5yZXN0cmljdGlvbnMmJnhuLnJlc3RyaWN0aW9ucy5sZW5ndGgpe2xldCBRbj14bi5yZXN0cmljdGlvbnMubGVuZ3RoO2ZvcihsZXQgeWk9MDt5aTxRbjt5aSsrKXtsZXR7''@;'; put 'put ''cmVzdHJpY3Rpb246eXIsbWVzc2FnZTpHbn09eG4ucmVzdHJpY3Rpb25zW3lpXTtpZigheXIodG4sbnQpKXJldHVybiBjb25zb2xlLmVycm9yKGAke210fSAke0NufSBpbnZhbGlkIHZhbHVlOiAke0dufWApLCExfX1yZXR1cm4geG4ucmVzdHJpY3Rpb24mJiF4bi5yZXN0cmljdGlvbih0bixu''@;'; put 'put ''dCk/KGNvbnNvbGUuZXJyb3IoYCR7bXR9ICR7Q259IGludmFsaWQgdmFsdWU6ICR7eG4ubWVzc2FnZX1gKSwhMSk6eG4udmFsaWRWYWx1ZXMmJi0xPT09eG4udmFsaWRWYWx1ZXMuaW5kZXhPZih0bik/KGNvbnNvbGUuZXJyb3IoYCR7bXR9ICR7Q259IGludmFsaWQgdmFsdWU6IG11c3QgYmUg''@;'; put 'put ''YW1vbmcgJHtKU09OLnN0cmluZ2lmeSh4bi52YWxpZFZhbHVlcyl9LCAiJHt0bn0iIHByb3ZpZGVkYCksITEpOiEoeG4uY2hpbGRyZW4mJiFFZSh0bix4bi5jaGlsZHJlbixgW1ZhbGlkYXRlICR7Q259XWApKX0pO3JldHVybiBKdHx8eW4ucHVzaCguLi5PYmplY3Qua2V5cyhsdCkubWFwKENu''@;'; put 'put ''PT57bGV0IHRuPWx0W0NuXTtpZigic3RyaW5nIj09dHlwZW9mIHRuJiYodG49e3R5cGU6dG59KSx0bi5tYW5kYXRvcnkpe2xldCB4bj10bi5tYW5kYXRvcnk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHhuJiYoeG49eG4obnQpKSx4biYmdm9pZCAwPT09bnRbQ25dKXJldHVybiBjb25zb2xlLmVy''@;'; put 'put ''cm9yKGAke210fSBNaXNzaW5nIG1hbmRhdG9yeSBrZXkgIiR7Q259ImApLCExfXJldHVybiEwfSkpLHluLnJlZHVjZSgoQ24sdG4pPT5DbiYmdG4sITApfWZ1bmN0aW9uIEJlKG50KXtyZXR1cm4gRWUobnQsWiwiW1ZhbGlkYXRlIGZvcm1hdF0iKX1yZXR1cm4gQlg9e3ZhbGlkYXRlOmZ1bmN0''@;'; put 'put ''aW9uIGNlKG50LGx0KXtsZXQgbXQ9YmUobnQpLEp0PUJlKGx0KTtyZXR1cm4gbXQmJkp0fSx2YWxpZGF0ZUZvcm1hdDpCZSx2YWxpZGF0ZUlucHV0OmJlLHZhbGlkYXRlTGFuZ3VhZ2U6ZnVuY3Rpb24gcWUobnQpe3JldHVybiBFZShudCxuZSwiW1ZhbGlkYXRlIGxhbmd1YWdlXSIpfX19dmFy''@;'; put 'put ''IFVYLFVwZSx6WD17cGFyc2VGb3JtYXQ6ZnVuY3Rpb24gJGl0KGMsbD17fSl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBjP2M6KGM9ZnVuY3Rpb24gTGl0KGMsbCl7bGV0IGE9Yy5tYXRjaCgvXnsoW159XSopfS8pO3JldHVybiBhPyhsLnByZWZpeD1hWzFdLGMuc2xpY2UoYVswXS5sZW5ndGgp''@;'; put 'put ''KTpjfShjLGwpLGM9ZnVuY3Rpb24gT2l0KGMsbCl7bGV0IGE9Yy5tYXRjaCgveyhbXn1dKil9JC8pO3JldHVybiBhPyhsLnBvc3RmaXg9YVsxXSxjLnNsaWNlKDAsLWFbMF0ubGVuZ3RoKSk6Y30oYyxsKSxmdW5jdGlvbiBQaXQoYyxsKXtpZigtMT09PWMuaW5kZXhPZigiJCIpKXtpZigtMT09''@;'; put 'put ''PWMuaW5kZXhPZigiJSIpKXJldHVybi0xIT09Yy5pbmRleE9mKCJiZCIpPyhsLm91dHB1dD0iYnl0ZSIsdm9pZChsLmJhc2U9ImdlbmVyYWwiKSk6LTEhPT1jLmluZGV4T2YoImIiKT8obC5vdXRwdXQ9ImJ5dGUiLHZvaWQobC5iYXNlPSJiaW5hcnkiKSk6LTEhPT1jLmluZGV4T2YoImQiKT8o''@;'; put 'put ''bC5vdXRwdXQ9ImJ5dGUiLHZvaWQobC5iYXNlPSJkZWNpbWFsIikpOnZvaWQoLTE9PT1jLmluZGV4T2YoIjoiKT8tMSE9PWMuaW5kZXhPZigibyIpJiYobC5vdXRwdXQ9Im9yZGluYWwiKTpsLm91dHB1dD0idGltZSIpO2wub3V0cHV0PSJwZXJjZW50In1lbHNlIGwub3V0cHV0PSJjdXJyZW5j''@;'; put 'put ''eSJ9KGMsbCksZnVuY3Rpb24gTml0KGMsbCl7bGV0IGE9Yy5tYXRjaCgvWzEtOV0rWzAtOV0qLyk7YSYmKGwudG90YWxMZW5ndGg9K2FbMF0pfShjLGwpLGZ1bmN0aW9uIFZpdChjLGwpe2xldCBkPWMuc3BsaXQoIi4iKVswXS5tYXRjaCgvMCsvKTtkJiYobC5jaGFyYWN0ZXJpc3RpYz1kWzBd''@;'; put 'put ''Lmxlbmd0aCl9KGMsbCksZnVuY3Rpb24gV2l0KGMsbCl7aWYoLTEhPT1jLmluZGV4T2YoIi4iKSl7bGV0IGE9Yy5zcGxpdCgiLiIpWzBdO2wub3B0aW9uYWxDaGFyYWN0ZXJpc3RpYz0tMT09PWEuaW5kZXhPZigiMCIpfX0oYyxsKSxmdW5jdGlvbiB6aXQoYyxsKXstMSE9PWMuaW5kZXhPZigi''@;'; put 'put ''YSIpJiYobC5hdmVyYWdlPSEwKX0oYyxsKSxmdW5jdGlvbiBVaXQoYyxsKXstMSE9PWMuaW5kZXhPZigiSyIpP2wuZm9yY2VBdmVyYWdlPSJ0aG91c2FuZCI6LTEhPT1jLmluZGV4T2YoIk0iKT9sLmZvcmNlQXZlcmFnZT0ibWlsbGlvbiI6LTEhPT1jLmluZGV4T2YoIkIiKT9sLmZvcmNlQXZl''@;'; put 'put ''cmFnZT0iYmlsbGlvbiI6LTEhPT1jLmluZGV4T2YoIlQiKSYmKGwuZm9yY2VBdmVyYWdlPSJ0cmlsbGlvbiIpfShjLGwpLGZ1bmN0aW9uIEJpdChjLGwpe2xldCBhPWMuc3BsaXQoIi4iKVsxXTtpZihhKXtsZXQgZD1hLm1hdGNoKC8wKy8pO2QmJihsLm1hbnRpc3NhPWRbMF0ubGVuZ3RoKX19''@;'; put 'put ''KGMsbCksZnVuY3Rpb24gWml0KGMsbCl7Yy5tYXRjaCgvXFtcLl0vKT9sLm9wdGlvbmFsTWFudGlzc2E9ITA6Yy5tYXRjaCgvXC4vKSYmKGwub3B0aW9uYWxNYW50aXNzYT0hMSl9KGMsbCksZnVuY3Rpb24gaml0KGMsbCl7Y29uc3QgYT1jLnNwbGl0KCIuIilbMV07YSYmKGwudHJpbU1hbnRp''@;'; put 'put ''c3NhPS0xIT09YS5pbmRleE9mKCJbIikpfShjLGwpLGZ1bmN0aW9uIEZpdChjLGwpey0xIT09Yy5pbmRleE9mKCIsIikmJihsLnRob3VzYW5kU2VwYXJhdGVkPSEwKX0oYyxsKSxmdW5jdGlvbiBIaXQoYyxsKXstMSE9PWMuaW5kZXhPZigiICIpJiYobC5zcGFjZVNlcGFyYXRlZD0hMCxsLnNw''@;'; put 'put ''YWNlU2VwYXJhdGVkQ3VycmVuY3k9ITAsKGwuYXZlcmFnZXx8bC5mb3JjZUF2ZXJhZ2UpJiYobC5zcGFjZVNlcGFyYXRlZEFiYnJldmlhdGlvbj0hMCkpfShjLGwpLGZ1bmN0aW9uIFlpdChjLGwpe2MubWF0Y2goL15cKz9cKFteKV0qXCkkLykmJihsLm5lZ2F0aXZlPSJwYXJlbnRoZXNpcyIp''@;'; put 'put ''LGMubWF0Y2goL15cKz8tLykmJihsLm5lZ2F0aXZlPSJzaWduIil9KGMsbCksZnVuY3Rpb24gR2l0KGMsbCl7Yy5tYXRjaCgvXlwrLykmJihsLmZvcmNlU2lnbj0hMCl9KGMsbCksbCl9fTtmdW5jdGlvbiBaWCgpe2lmKFVwZSlyZXR1cm4gVVg7VXBlPTE7Y29uc3QgYz1mdW5jdGlvbiBSaXQo''@;'; put 'put ''KXtyZXR1cm4gVnBlfHwoVnBlPTEsTlg9e2xhbmd1YWdlVGFnOiJlbi1VUyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sc3BhY2VTZXBhcmF0ZWQ6''@;'; put 'put ''ITEsb3JkaW5hbDpmdW5jdGlvbihjKXtsZXQgbD1jJTEwO3JldHVybiAxPT1+fihjJTEwMC8xMCk/InRoIjoxPT09bD8ic3QiOjI9PT1sPyJuZCI6Mz09PWw/InJkIjoidGgifSxieXRlczp7YmluYXJ5U3VmZml4ZXM6WyJCIiwiS2lCIiwiTWlCIiwiR2lCIiwiVGlCIiwiUGlCIiwiRWlCIiwi''@;'; put 'put ''WmlCIiwiWWlCIl0sZGVjaW1hbFN1ZmZpeGVzOlsiQiIsIktCIiwiTUIiLCJHQiIsIlRCIiwiUEIiLCJFQiIsIlpCIiwiWUIiXX0sY3VycmVuY3k6e3N5bWJvbDoiJCIscG9zaXRpb246InByZWZpeCIsY29kZToiVVNEIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRv''@;'; put 'put ''dGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0''@;'; put 'put ''ZWQ6ITAsbWFudGlzc2E6Mn0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjJ9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSksTlh9KCksbD1q''@;'; put 'put ''WCgpLGE9elg7bGV0IGgsZD17fSxmPXt9LHY9bnVsbCxNPXt9O2Z1bmN0aW9uIEQobmUpe2g9bmV9ZnVuY3Rpb24gWigpe3JldHVybiBmW2hdfXJldHVybiBkLmxhbmd1YWdlcz0oKT0+T2JqZWN0LmFzc2lnbih7fSxmKSxkLmN1cnJlbnRMYW5ndWFnZT0oKT0+aCxkLmN1cnJlbnRCeXRlcz0o''@;'; put 'put ''KT0+WigpLmJ5dGVzfHx7fSxkLmN1cnJlbnRDdXJyZW5jeT0oKT0+WigpLmN1cnJlbmN5LGQuY3VycmVudEFiYnJldmlhdGlvbnM9KCk9PlooKS5hYmJyZXZpYXRpb25zLGQuY3VycmVudERlbGltaXRlcnM9KCk9PlooKS5kZWxpbWl0ZXJzLGQuY3VycmVudE9yZGluYWw9KCk9PlooKS5vcmRp''@;'; put 'put ''bmFsLGQuY3VycmVudERlZmF1bHRzPSgpPT5PYmplY3QuYXNzaWduKHt9LFooKS5kZWZhdWx0cyxNKSxkLmN1cnJlbnRPcmRpbmFsRGVmYXVsdEZvcm1hdD0oKT0+T2JqZWN0LmFzc2lnbih7fSxkLmN1cnJlbnREZWZhdWx0cygpLFooKS5vcmRpbmFsRm9ybWF0KSxkLmN1cnJlbnRCeXRlRGVm''@;'; put 'put ''YXVsdEZvcm1hdD0oKT0+T2JqZWN0LmFzc2lnbih7fSxkLmN1cnJlbnREZWZhdWx0cygpLFooKS5ieXRlRm9ybWF0KSxkLmN1cnJlbnRQZXJjZW50YWdlRGVmYXVsdEZvcm1hdD0oKT0+T2JqZWN0LmFzc2lnbih7fSxkLmN1cnJlbnREZWZhdWx0cygpLFooKS5wZXJjZW50YWdlRm9ybWF0KSxk''@;'; put 'put ''LmN1cnJlbnRDdXJyZW5jeURlZmF1bHRGb3JtYXQ9KCk9Pk9iamVjdC5hc3NpZ24oe30sZC5jdXJyZW50RGVmYXVsdHMoKSxaKCkuY3VycmVuY3lGb3JtYXQpLGQuY3VycmVudFRpbWVEZWZhdWx0Rm9ybWF0PSgpPT5PYmplY3QuYXNzaWduKHt9LGQuY3VycmVudERlZmF1bHRzKCksWigpLnRp''@;'; put 'put ''bWVGb3JtYXQpLGQuc2V0RGVmYXVsdHM9bmU9PntuZT1hLnBhcnNlRm9ybWF0KG5lKSxsLnZhbGlkYXRlRm9ybWF0KG5lKSYmKE09bmUpfSxkLmdldFplcm9Gb3JtYXQ9KCk9PnYsZC5zZXRaZXJvRm9ybWF0PW5lPT52PSJzdHJpbmciPT10eXBlb2YgbmU/bmU6bnVsbCxkLmhhc1plcm9Gb3Jt''@;'; put 'put ''YXQ9KCk9Pm51bGwhPT12LGQubGFuZ3VhZ2VEYXRhPW5lPT57aWYobmUpe2lmKGZbbmVdKXJldHVybiBmW25lXTt0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdGFnICIke25lfSJgKX1yZXR1cm4gWigpfSxkLnJlZ2lzdGVyTGFuZ3VhZ2U9KG5lLGNlPSExKT0+e2lmKCFsLnZhbGlkYXRlTGFu''@;'; put 'put ''Z3VhZ2UobmUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBsYW5ndWFnZSBkYXRhIik7ZltuZS5sYW5ndWFnZVRhZ109bmUsY2UmJkQobmUubGFuZ3VhZ2VUYWcpfSxkLnNldExhbmd1YWdlPShuZSxjZT1jLmxhbmd1YWdlVGFnKT0+e2lmKCFmW25lXSl7bGV0IGJlPW5lLnNwbGl0KCItIilb''@;'; put 'put ''MF0sRWU9T2JqZWN0LmtleXMoZikuZmluZChCZT0+QmUuc3BsaXQoIi0iKVswXT09PWJlKTtyZXR1cm4gZltFZV0/dm9pZCBEKEVlKTp2b2lkIEQoY2UpfUQobmUpfSxkLnJlZ2lzdGVyTGFuZ3VhZ2UoYyksaD1jLmxhbmd1YWdlVGFnLFVYPWR9dmFyIFpwZT17ZXhwb3J0czp7fX07IWZ1bmN0''@;'; put 'put ''aW9uKGMpeyFmdW5jdGlvbihsKXt2YXIgYSxkPS9eLT8oPzpcZCsoPzpcLlxkKik/fFwuXGQrKSg/OmVbKy1dP1xkKyk/JC9pLGg9TWF0aC5jZWlsLGY9TWF0aC5mbG9vcix2PSJbQmlnTnVtYmVyIEVycm9yXSAiLE09disiTnVtYmVyIHByaW1pdGl2ZSBoYXMgbW9yZSB0aGFuIDE1IHNpZ25p''@;'; put 'put ''ZmljYW50IGRpZ2l0czogIixEPTFlMTQsWj0xNCxuZT05MDA3MTk5MjU0NzQwOTkxLGNlPVsxLDEwLDEwMCwxZTMsMWU0LDFlNSwxZTYsMWU3LDFlOCwxZTksMWUxMCwxZTExLDFlMTIsMWUxM10sYmU9MWU3LEVlPTFlOTtmdW5jdGlvbiBxZSh0bil7dmFyIHhuPTB8dG47cmV0dXJuIHRuPjB8''@;'; put 'put ''fHRuPT09eG4/eG46eG4tMX1mdW5jdGlvbiBudCh0bil7Zm9yKHZhciB4bixRbix5aT0xLHlyPXRuLmxlbmd0aCxHbj10blswXSsiIjt5aTx5cjspe2Zvcih4bj10blt5aSsrXSsiIixRbj1aLXhuLmxlbmd0aDtRbi0tO3huPSIwIit4bik7R24rPXhufWZvcih5cj1Hbi5sZW5ndGg7NDg9PT1H''@;'; put 'put ''bi5jaGFyQ29kZUF0KC0teXIpOyk7cmV0dXJuIEduLnNsaWNlKDAseXIrMXx8MSl9ZnVuY3Rpb24gbHQodG4seG4pe3ZhciBRbix5aSx5cj10bi5jLEduPXhuLmMsaWk9dG4ucyxfaT14bi5zLFBuPXRuLmUsanI9eG4uZTtpZighaWl8fCFfaSlyZXR1cm4gbnVsbDtpZih5aT1HbiYmIUduWzBd''@;'; put 'put ''LChRbj15ciYmIXlyWzBdKXx8eWkpcmV0dXJuIFFuP3lpPzA6LV9pOmlpO2lmKGlpIT1faSlyZXR1cm4gaWk7aWYoUW49aWk8MCx5aT1Qbj09anIsIXlyfHwhR24pcmV0dXJuIHlpPzA6IXlyXlFuPzE6LTE7aWYoIXlpKXJldHVybiBQbj5qcl5Rbj8xOi0xO2ZvcihfaT0oUG49eXIubGVuZ3Ro''@;'; put 'put ''KTwoanI9R24ubGVuZ3RoKT9QbjpqcixpaT0wO2lpPF9pO2lpKyspaWYoeXJbaWldIT1HbltpaV0pcmV0dXJuIHlyW2lpXT5HbltpaV1eUW4/MTotMTtyZXR1cm4gUG49PWpyPzA6UG4+anJeUW4/MTotMX1mdW5jdGlvbiBtdCh0bix4bixRbix5aSl7aWYodG48eG58fHRuPlFufHx0biE9PWYo''@;'; put 'put ''dG4pKXRocm93IEVycm9yKHYrKHlpfHwiQXJndW1lbnQiKSsoIm51bWJlciI9PXR5cGVvZiB0bj90bjx4bnx8dG4+UW4/IiBvdXQgb2YgcmFuZ2U6ICI6IiBub3QgYW4gaW50ZWdlcjogIjoiIG5vdCBhIHByaW1pdGl2ZSBudW1iZXI6ICIpK1N0cmluZyh0bikpfWZ1bmN0aW9uIEp0KHRuKXt2''@;'; put 'put ''YXIgeG49dG4uYy5sZW5ndGgtMTtyZXR1cm4gcWUodG4uZS9aKT09eG4mJnRuLmNbeG5dJTIhPTB9ZnVuY3Rpb24geW4odG4seG4pe3JldHVybih0bi5sZW5ndGg+MT90bi5jaGFyQXQoMCkrIi4iK3RuLnNsaWNlKDEpOnRuKSsoeG48MD8iZSI6ImUrIikreG59ZnVuY3Rpb24gQ24odG4seG4s''@;'; put 'put ''UW4pe3ZhciB5aSx5cjtpZih4bjwwKXtmb3IoeXI9UW4rIi4iOysreG47eXIrPVFuKTt0bj15cit0bn1lbHNlIGlmKCsreG4+KHlpPXRuLmxlbmd0aCkpe2Zvcih5cj1Rbix4bi09eWk7LS14bjt5cis9UW4pO3RuKz15cn1lbHNlIHhuPHlpJiYodG49dG4uc2xpY2UoMCx4bikrIi4iK3RuLnNs''@;'; put 'put ''aWNlKHhuKSk7cmV0dXJuIHRufWE9ZnVuY3Rpb24gQmUodG4pe3ZhciB4bixRbix5aSxybix1bix5cj1nbi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmduLHRvU3RyaW5nOm51bGwsdmFsdWVPZjpudWxsfSxHbj1uZXcgZ24oMSksaWk9MjAsX2k9NCxQbj0tNyxqcj0yMSxYbj0tMWU3LElyPTFl''@;'; put 'put ''Nywkcj0hMSx3aT0xLFFpPTAsdnQ9e3ByZWZpeDoiIixncm91cFNpemU6MyxzZWNvbmRhcnlHcm91cFNpemU6MCxncm91cFNlcGFyYXRvcjoiLCIsZGVjaW1hbFNlcGFyYXRvcjoiLiIsZnJhY3Rpb25Hcm91cFNpemU6MCxmcmFjdGlvbkdyb3VwU2VwYXJhdG9yOiJceGEwIixzdWZmaXg6IiJ9''@;'; put 'put ''LE50PSIwMTIzNDU2Nzg5YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLFd0PSEwO2Z1bmN0aW9uIGduKHJuLHVuKXt2YXIga24sd3IsbnIsU3IsWnIsVW4sYnIsVHIsa3I9dGhpcztpZighKGtyIGluc3RhbmNlb2YgZ24pKXJldHVybiBuZXcgZ24ocm4sdW4pO2lmKG51bGw9PXVuKXtpZihy''@;'; put 'put ''biYmITA9PT1ybi5faXNCaWdOdW1iZXIpcmV0dXJuIGtyLnM9cm4ucyx2b2lkKCFybi5jfHxybi5lPklyP2tyLmM9a3IuZT1udWxsOnJuLmU8WG4/a3IuYz1ba3IuZT0wXTooa3IuZT1ybi5lLGtyLmM9cm4uYy5zbGljZSgpKSk7aWYoKFVuPSJudW1iZXIiPT10eXBlb2Ygcm4pJiYwKnJuPT0w''@;'; put 'put ''KXtpZihrci5zPTEvcm48MD8ocm49LXJuLC0xKToxLHJuPT09fn5ybil7Zm9yKFNyPTAsWnI9cm47WnI+PTEwO1pyLz0xMCxTcisrKTtyZXR1cm4gdm9pZChTcj5Jcj9rci5jPWtyLmU9bnVsbDooa3IuZT1Tcixrci5jPVtybl0pKX1Ucj1TdHJpbmcocm4pfWVsc2V7aWYoIWQudGVzdChUcj1T''@;'; put 'put ''dHJpbmcocm4pKSlyZXR1cm4geWkoa3IsVHIsVW4pO2tyLnM9NDU9PVRyLmNoYXJDb2RlQXQoMCk/KFRyPVRyLnNsaWNlKDEpLC0xKToxfShTcj1Uci5pbmRleE9mKCIuIikpPi0xJiYoVHI9VHIucmVwbGFjZSgiLiIsIiIpKSwoWnI9VHIuc2VhcmNoKC9lL2kpKT4wPyhTcjwwJiYoU3I9WnIp''@;'; put 'put ''LFNyKz0rVHIuc2xpY2UoWnIrMSksVHI9VHIuc3Vic3RyaW5nKDAsWnIpKTpTcjwwJiYoU3I9VHIubGVuZ3RoKX1lbHNle2lmKG10KHVuLDIsTnQubGVuZ3RoLCJCYXNlIiksMTA9PXVuJiZXdClyZXR1cm4gWXIoa3I9bmV3IGduKHJuKSxpaStrci5lKzEsX2kpO2lmKFRyPVN0cmluZyhybiks''@;'; put 'put ''VW49Im51bWJlciI9PXR5cGVvZiBybil7aWYoMCpybiE9MClyZXR1cm4geWkoa3IsVHIsVW4sdW4pO2lmKGtyLnM9MS9ybjwwPyhUcj1Uci5zbGljZSgxKSwtMSk6MSxnbi5ERUJVRyYmVHIucmVwbGFjZSgvXjBcLjAqfFwuLywiIikubGVuZ3RoPjE1KXRocm93IEVycm9yKE0rcm4pfWVsc2Ug''@;'; put 'put ''a3Iucz00NT09PVRyLmNoYXJDb2RlQXQoMCk/KFRyPVRyLnNsaWNlKDEpLC0xKToxO2Zvcihrbj1OdC5zbGljZSgwLHVuKSxTcj1acj0wLGJyPVRyLmxlbmd0aDtacjxicjtacisrKWlmKGtuLmluZGV4T2Yod3I9VHIuY2hhckF0KFpyKSk8MCl7aWYoIi4iPT13cil7aWYoWnI+U3Ipe1NyPWJy''@;'; put 'put ''O2NvbnRpbnVlfX1lbHNlIGlmKCFuciYmKFRyPT1Uci50b1VwcGVyQ2FzZSgpJiYoVHI9VHIudG9Mb3dlckNhc2UoKSl8fFRyPT1Uci50b0xvd2VyQ2FzZSgpJiYoVHI9VHIudG9VcHBlckNhc2UoKSkpKXtucj0hMCxacj0tMSxTcj0wO2NvbnRpbnVlfXJldHVybiB5aShrcixTdHJpbmcocm4p''@;'; put 'put ''LFVuLHVuKX1Vbj0hMSwoU3I9KFRyPVFuKFRyLHVuLDEwLGtyLnMpKS5pbmRleE9mKCIuIikpPi0xP1RyPVRyLnJlcGxhY2UoIi4iLCIiKTpTcj1Uci5sZW5ndGh9Zm9yKFpyPTA7NDg9PT1Uci5jaGFyQ29kZUF0KFpyKTtacisrKTtmb3IoYnI9VHIubGVuZ3RoOzQ4PT09VHIuY2hhckNvZGVB''@;'; put 'put ''dCgtLWJyKTspO2lmKFRyPVRyLnNsaWNlKFpyLCsrYnIpKXtpZihici09WnIsVW4mJmduLkRFQlVHJiZicj4xNSYmKHJuPm5lfHxybiE9PWYocm4pKSl0aHJvdyBFcnJvcihNK2tyLnMqcm4pO2lmKChTcj1Tci1aci0xKT5Jcilrci5jPWtyLmU9bnVsbDtlbHNlIGlmKFNyPFhuKWtyLmM9W2ty''@;'; put 'put ''LmU9MF07ZWxzZXtpZihrci5lPVNyLGtyLmM9W10sWnI9KFNyKzEpJVosU3I8MCYmKFpyKz1aKSxacjxicil7Zm9yKFpyJiZrci5jLnB1c2goK1RyLnNsaWNlKDAsWnIpKSxici09Wjtacjxicjspa3IuYy5wdXNoKCtUci5zbGljZShacixacis9WikpO1pyPVotKFRyPVRyLnNsaWNlKFpyKSku''@;'; put 'put ''bGVuZ3RofWVsc2UgWnItPWJyO2Zvcig7WnItLTtUcis9IjAiKTtrci5jLnB1c2goK1RyKX19ZWxzZSBrci5jPVtrci5lPTBdfWZ1bmN0aW9uICRuKHJuLHVuLGtuLHdyKXt2YXIgbnIsU3IsWnIsVW4sYnI7aWYobnVsbD09a24/a249X2k6bXQoa24sMCw4KSwhcm4uYylyZXR1cm4gcm4udG9T''@;'; put 'put ''dHJpbmcoKTtpZihucj1ybi5jWzBdLFpyPXJuLmUsbnVsbD09dW4pYnI9bnQocm4uYyksYnI9MT09d3J8fDI9PXdyJiYoWnI8PVBufHxacj49anIpP3luKGJyLFpyKTpDbihicixaciwiMCIpO2Vsc2UgaWYoU3I9KHJuPVlyKG5ldyBnbihybiksdW4sa24pKS5lLFVuPShicj1udChybi5jKSku''@;'; put 'put ''bGVuZ3RoLDE9PXdyfHwyPT13ciYmKHVuPD1Tcnx8U3I8PVBuKSl7Zm9yKDtVbjx1bjticis9IjAiLFVuKyspO2JyPXluKGJyLFNyKX1lbHNlIGlmKHVuLT1acixicj1DbihicixTciwiMCIpLFNyKzE+VW4pe2lmKC0tdW4+MClmb3IoYnIrPSIuIjt1bi0tO2JyKz0iMCIpO31lbHNlIGlmKCh1''@;'; put 'put ''bis9U3ItVW4pPjApZm9yKFNyKzE9PVVuJiYoYnIrPSIuIik7dW4tLTticis9IjAiKTtyZXR1cm4gcm4uczwwJiZucj8iLSIrYnI6YnJ9ZnVuY3Rpb24gaHIocm4sdW4pe2Zvcih2YXIga24sd3IsbnI9MSxTcj1uZXcgZ24ocm5bMF0pO25yPHJuLmxlbmd0aDtucisrKSghKHdyPW5ldyBnbihy''@;'; put 'put ''bltucl0pKS5zfHwoa249bHQoU3Isd3IpKT09PXVufHwwPT09a24mJlNyLnM9PT11bikmJihTcj13cik7cmV0dXJuIFNyfWZ1bmN0aW9uIFVyKHJuLHVuLGtuKXtmb3IodmFyIHdyPTEsbnI9dW4ubGVuZ3RoOyF1blstLW5yXTt1bi5wb3AoKSk7Zm9yKG5yPXVuWzBdO25yPj0xMDtuci89MTAs''@;'; put 'put ''d3IrKyk7cmV0dXJuKGtuPXdyK2tuKlotMSk+SXI/cm4uYz1ybi5lPW51bGw6a248WG4/cm4uYz1bcm4uZT0wXToocm4uZT1rbixybi5jPXVuKSxybn1mdW5jdGlvbiBZcihybix1bixrbix3cil7dmFyIG5yLFNyLFpyLFVuLGJyLFRyLGtyLEdyPXJuLmMsZm89Y2U7aWYoR3Ipe2U6e2Zvcihu''@;'; put 'put ''cj0xLFVuPUdyWzBdO1VuPj0xMDtVbi89MTAsbnIrKyk7aWYoKFNyPXVuLW5yKTwwKVNyKz1aLGJyPUdyW1RyPTBdLGtyPWYoYnIvZm9bbnItKFpyPXVuKS0xXSUxMCk7ZWxzZSBpZigoVHI9aCgoU3IrMSkvWikpPj1Hci5sZW5ndGgpe2lmKCF3cilicmVhayBlO2Zvcig7R3IubGVuZ3RoPD1U''@;'; put 'put ''cjtHci5wdXNoKDApKTticj1rcj0wLG5yPTEsWnI9KFNyJT1aKS1aKzF9ZWxzZXtmb3IoYnI9VW49R3JbVHJdLG5yPTE7VW4+PTEwO1VuLz0xMCxucisrKTtrcj0oWnI9KFNyJT1aKS1aK25yKTwwPzA6Zihici9mb1tuci1aci0xXSUxMCl9aWYod3I9d3J8fHVuPDB8fG51bGwhPUdyW1RyKzFd''@;'; put 'put ''fHwoWnI8MD9icjpiciVmb1tuci1aci0xXSksd3I9a248ND8oa3J8fHdyKSYmKDA9PWtufHxrbj09KHJuLnM8MD8zOjIpKTprcj41fHw1PT1rciYmKDQ9PWtufHx3cnx8Nj09a24mJihTcj4wP1pyPjA/YnIvZm9bbnItWnJdOjA6R3JbVHItMV0pJTEwJjF8fGtuPT0ocm4uczwwPzg6NykpLHVu''@;'; put 'put ''PDF8fCFHclswXSlyZXR1cm4gR3IubGVuZ3RoPTAsd3I/KEdyWzBdPWZvWyhaLSh1bi09cm4uZSsxKSVaKSVaXSxybi5lPS11bnx8MCk6R3JbMF09cm4uZT0wLHJuO2lmKDA9PVNyPyhHci5sZW5ndGg9VHIsVW49MSxUci0tKTooR3IubGVuZ3RoPVRyKzEsVW49Zm9bWi1Tcl0sR3JbVHJdPVpy''@;'; put 'put ''PjA/Zihici9mb1tuci1acl0lZm9bWnJdKSpVbjowKSx3cilmb3IoOzspe2lmKDA9PVRyKXtmb3IoU3I9MSxacj1HclswXTtacj49MTA7WnIvPTEwLFNyKyspO2Zvcihacj1HclswXSs9VW4sVW49MTtacj49MTA7WnIvPTEwLFVuKyspO1NyIT1VbiYmKHJuLmUrKyxHclswXT09RCYmKEdyWzBd''@;'; put 'put ''PTEpKTticmVha31pZihHcltUcl0rPVVuLEdyW1RyXSE9RClicmVhaztHcltUci0tXT0wLFVuPTF9Zm9yKFNyPUdyLmxlbmd0aDswPT09R3JbLS1Tcl07R3IucG9wKCkpO31ybi5lPklyP3JuLmM9cm4uZT1udWxsOnJuLmU8WG4mJihybi5jPVtybi5lPTBdKX1yZXR1cm4gcm59ZnVuY3Rpb24g''@;'; put 'put ''Tmkocm4pe3ZhciB1bixrbj1ybi5lO3JldHVybiBudWxsPT09a24/cm4udG9TdHJpbmcoKToodW49bnQocm4uYyksdW49a248PVBufHxrbj49anI/eW4odW4sa24pOkNuKHVuLGtuLCIwIikscm4uczwwPyItIit1bjp1bil9cmV0dXJuIGduLmNsb25lPUJlLGduLlJPVU5EX1VQPTAsZ24uUk9V''@;'; put 'put ''TkRfRE9XTj0xLGduLlJPVU5EX0NFSUw9Mixnbi5ST1VORF9GTE9PUj0zLGduLlJPVU5EX0hBTEZfVVA9NCxnbi5ST1VORF9IQUxGX0RPV049NSxnbi5ST1VORF9IQUxGX0VWRU49Nixnbi5ST1VORF9IQUxGX0NFSUw9Nyxnbi5ST1VORF9IQUxGX0ZMT09SPTgsZ24uRVVDTElEPTksZ24uY29u''@;'; put 'put ''ZmlnPWduLnNldD1mdW5jdGlvbihybil7dmFyIHVuLGtuO2lmKG51bGwhPXJuKXtpZigib2JqZWN0IiE9dHlwZW9mIHJuKXRocm93IEVycm9yKHYrIk9iamVjdCBleHBlY3RlZDogIitybik7aWYocm4uaGFzT3duUHJvcGVydHkodW49IkRFQ0lNQUxfUExBQ0VTIikmJihtdChrbj1yblt1bl0s''@;'; put 'put ''MCxFZSx1biksaWk9a24pLHJuLmhhc093blByb3BlcnR5KHVuPSJST1VORElOR19NT0RFIikmJihtdChrbj1yblt1bl0sMCw4LHVuKSxfaT1rbikscm4uaGFzT3duUHJvcGVydHkodW49IkVYUE9ORU5USUFMX0FUIikmJigoa249cm5bdW5dKSYma24ucG9wPyhtdChrblswXSwtRWUsMCx1biks''@;'; put 'put ''bXQoa25bMV0sMCxFZSx1biksUG49a25bMF0sanI9a25bMV0pOihtdChrbiwtRWUsRWUsdW4pLFBuPS0oanI9a248MD8ta246a24pKSkscm4uaGFzT3duUHJvcGVydHkodW49IlJBTkdFIikpaWYoKGtuPXJuW3VuXSkmJmtuLnBvcCltdChrblswXSwtRWUsLTEsdW4pLG10KGtuWzFdLDEsRWUs''@;'; put 'put ''dW4pLFhuPWtuWzBdLElyPWtuWzFdO2Vsc2V7aWYobXQoa24sLUVlLEVlLHVuKSwha24pdGhyb3cgRXJyb3Iodit1bisiIGNhbm5vdCBiZSB6ZXJvOiAiK2tuKTtYbj0tKElyPWtuPDA/LWtuOmtuKX1pZihybi5oYXNPd25Qcm9wZXJ0eSh1bj0iQ1JZUFRPIikpe2lmKChrbj1yblt1bl0pIT09''@;'; put 'put ''ISFrbil0aHJvdyBFcnJvcih2K3VuKyIgbm90IHRydWUgb3IgZmFsc2U6ICIra24pO2lmKGtuKXtpZighKHR5cGVvZiBjcnlwdG88InUiJiZjcnlwdG8mJihjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzfHxjcnlwdG8ucmFuZG9tQnl0ZXMpKSl0aHJvdyAkcj0ha24sRXJyb3IodisiY3J5cHRvIHVu''@;'; put 'put ''YXZhaWxhYmxlIik7JHI9a259ZWxzZSAkcj1rbn1pZihybi5oYXNPd25Qcm9wZXJ0eSh1bj0iTU9EVUxPX01PREUiKSYmKG10KGtuPXJuW3VuXSwwLDksdW4pLHdpPWtuKSxybi5oYXNPd25Qcm9wZXJ0eSh1bj0iUE9XX1BSRUNJU0lPTiIpJiYobXQoa249cm5bdW5dLDAsRWUsdW4pLFFpPWtu''@;'; put 'put ''KSxybi5oYXNPd25Qcm9wZXJ0eSh1bj0iRk9STUFUIikpe2lmKCJvYmplY3QiIT10eXBlb2Yoa249cm5bdW5dKSl0aHJvdyBFcnJvcih2K3VuKyIgbm90IGFuIG9iamVjdDogIitrbik7dnQ9a259aWYocm4uaGFzT3duUHJvcGVydHkodW49IkFMUEhBQkVUIikpe2lmKCJzdHJpbmciIT10eXBl''@;'; put 'put ''b2Yoa249cm5bdW5dKXx8L14uPyR8WytcLS5cc118KC4pLipcMS8udGVzdChrbikpdGhyb3cgRXJyb3Iodit1bisiIGludmFsaWQ6ICIra24pO1d0PSIwMTIzNDU2Nzg5Ij09a24uc2xpY2UoMCwxMCksTnQ9a259fXJldHVybntERUNJTUFMX1BMQUNFUzppaSxST1VORElOR19NT0RFOl9pLEVY''@;'; put 'put ''UE9ORU5USUFMX0FUOltQbixqcl0sUkFOR0U6W1huLElyXSxDUllQVE86JHIsTU9EVUxPX01PREU6d2ksUE9XX1BSRUNJU0lPTjpRaSxGT1JNQVQ6dnQsQUxQSEFCRVQ6TnR9fSxnbi5pc0JpZ051bWJlcj1mdW5jdGlvbihybil7aWYoIXJufHwhMCE9PXJuLl9pc0JpZ051bWJlcilyZXR1cm4h''@;'; put 'put ''MTtpZighZ24uREVCVUcpcmV0dXJuITA7dmFyIHVuLGtuLHdyPXJuLmMsbnI9cm4uZSxTcj1ybi5zO2U6aWYoIltvYmplY3QgQXJyYXldIj09e30udG9TdHJpbmcuY2FsbCh3cikpe2lmKCgxPT09U3J8fC0xPT09U3IpJiZucj49LUVlJiZucjw9RWUmJm5yPT09Zihucikpe2lmKDA9PT13clsw''@;'; put 'put ''XSl7aWYoMD09PW5yJiYxPT09d3IubGVuZ3RoKXJldHVybiEwO2JyZWFrIGV9aWYoKHVuPShucisxKSVaKTwxJiYodW4rPVopLFN0cmluZyh3clswXSkubGVuZ3RoPT11bil7Zm9yKHVuPTA7dW48d3IubGVuZ3RoO3VuKyspaWYoKGtuPXdyW3VuXSk8MHx8a24+PUR8fGtuIT09ZihrbikpYnJl''@;'; put 'put ''YWsgZTtpZigwIT09a24pcmV0dXJuITB9fX1lbHNlIGlmKG51bGw9PT13ciYmbnVsbD09PW5yJiYobnVsbD09PVNyfHwxPT09U3J8fC0xPT09U3IpKXJldHVybiEwO3Rocm93IEVycm9yKHYrIkludmFsaWQgQmlnTnVtYmVyOiAiK3JuKX0sZ24ubWF4aW11bT1nbi5tYXg9ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gaHIoYXJndW1lbnRzLC0xKX0sZ24ubWluaW11bT1nbi5taW49ZnVuY3Rpb24oKXtyZXR1cm4gaHIoYXJndW1lbnRzLDEpfSxnbi5yYW5kb209KHJuPTkwMDcxOTkyNTQ3NDA5OTIsdW49TWF0aC5yYW5kb20oKSpybiYyMDk3MTUxP2Z1bmN0aW9uKCl7cmV0dXJuIGYoTWF0aC5yYW5k''@;'; put 'put ''b20oKSpybil9OmZ1bmN0aW9uKCl7cmV0dXJuIDgzODg2MDgqKDEwNzM3NDE4MjQqTWF0aC5yYW5kb20oKXwwKSsoODM4ODYwOCpNYXRoLnJhbmRvbSgpfDApfSxmdW5jdGlvbihrbil7dmFyIHdyLG5yLFNyLFpyLFVuLGJyPTAsVHI9W10sa3I9bmV3IGduKEduKTtpZihudWxsPT1rbj9rbj1p''@;'; put 'put ''aTptdChrbiwwLEVlKSxacj1oKGtuL1opLCRyKWlmKGNyeXB0by5nZXRSYW5kb21WYWx1ZXMpe2Zvcih3cj1jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50MzJBcnJheShacio9MikpO2JyPFpyOykoVW49MTMxMDcyKndyW2JyXSsod3JbYnIrMV0+Pj4xMSkpPj05ZTE1Pyhucj1jcnlw''@;'; put 'put ''dG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50MzJBcnJheSgyKSksd3JbYnJdPW5yWzBdLHdyW2JyKzFdPW5yWzFdKTooVHIucHVzaChVbiUxZTE0KSxicis9Mik7YnI9WnIvMn1lbHNle2lmKCFjcnlwdG8ucmFuZG9tQnl0ZXMpdGhyb3cgJHI9ITEsRXJyb3IodisiY3J5cHRvIHVuYXZhaWxh''@;'; put 'put ''YmxlIik7Zm9yKHdyPWNyeXB0by5yYW5kb21CeXRlcyhacio9Nyk7YnI8WnI7KShVbj0yODE0NzQ5NzY3MTA2NTYqKDMxJndyW2JyXSkrMTA5OTUxMTYyNzc3Nip3clticisxXSs0Mjk0OTY3Mjk2KndyW2JyKzJdKzE2Nzc3MjE2KndyW2JyKzNdKyh3clticis0XTw8MTYpKyh3clticis1XTw8''@;'; put 'put ''OCkrd3JbYnIrNl0pPj05ZTE1P2NyeXB0by5yYW5kb21CeXRlcyg3KS5jb3B5KHdyLGJyKTooVHIucHVzaChVbiUxZTE0KSxicis9Nyk7YnI9WnIvN31pZighJHIpZm9yKDticjxacjspKFVuPXVuKCkpPDllMTUmJihUclticisrXT1VbiUxZTE0KTtmb3IoWnI9VHJbLS1icl0sa24lPVosWnIm''@;'; put 'put ''JmtuJiYoVHJbYnJdPWYoWnIvKFVuPWNlW1ota25dKSkqVW4pOzA9PT1Uclticl07VHIucG9wKCksYnItLSk7aWYoYnI8MClUcj1bU3I9MF07ZWxzZXtmb3IoU3I9LTE7MD09PVRyWzBdO1RyLnNwbGljZSgwLDEpLFNyLT1aKTtmb3IoYnI9MSxVbj1UclswXTtVbj49MTA7VW4vPTEwLGJyKysp''@;'; put 'put ''O2JyPFomJihTci09Wi1icil9cmV0dXJuIGtyLmU9U3Isa3IuYz1Ucixrcn0pLGduLnN1bT1mdW5jdGlvbigpe2Zvcih2YXIgcm49MSx1bj1hcmd1bWVudHMsa249bmV3IGduKHVuWzBdKTtybjx1bi5sZW5ndGg7KWtuPWtuLnBsdXModW5bcm4rK10pO3JldHVybiBrbn0sUW49ZnVuY3Rpb24o''@;'; put 'put ''KXt2YXIgcm49IjAxMjM0NTY3ODkiO2Z1bmN0aW9uIHVuKGtuLHdyLG5yLFNyKXtmb3IodmFyIFpyLGJyLFVuPVswXSxUcj0wLGtyPWtuLmxlbmd0aDtUcjxrcjspe2Zvcihicj1Vbi5sZW5ndGg7YnItLTtVblticl0qPXdyKTtmb3IoVW5bMF0rPVNyLmluZGV4T2Yoa24uY2hhckF0KFRyKysp''@;'; put 'put ''KSxacj0wO1pyPFVuLmxlbmd0aDtacisrKVVuW1pyXT5uci0xJiYobnVsbD09VW5bWnIrMV0mJihVbltacisxXT0wKSxVbltacisxXSs9VW5bWnJdL25yfDAsVW5bWnJdJT1ucil9cmV0dXJuIFVuLnJldmVyc2UoKX1yZXR1cm4gZnVuY3Rpb24oa24sd3IsbnIsU3IsWnIpe3ZhciBVbixicixU''@;'; put 'put ''cixrcixHcixmbyxqbyxTYSxVYT1rbi5pbmRleE9mKCIuIikscHM9aWksRmE9X2k7Zm9yKFVhPj0wJiYoa3I9UWksUWk9MCxrbj1rbi5yZXBsYWNlKCIuIiwiIiksZm89KFNhPW5ldyBnbih3cikpLnBvdyhrbi5sZW5ndGgtVWEpLFFpPWtyLFNhLmM9dW4oQ24obnQoZm8uYyksZm8uZSwiMCIp''@;'; put 'put ''LDEwLG5yLHJuKSxTYS5lPVNhLmMubGVuZ3RoKSxUcj1rcj0oam89dW4oa24sd3IsbnIsWnI/KFVuPU50LHJuKTooVW49cm4sTnQpKSkubGVuZ3RoOzA9PWpvWy0ta3JdO2pvLnBvcCgpKTtpZigham9bMF0pcmV0dXJuIFVuLmNoYXJBdCgwKTtpZihVYTwwPy0tVHI6KGZvLmM9am8sZm8uZT1U''@;'; put 'put ''cixmby5zPVNyLGpvPShmbz14bihmbyxTYSxwcyxGYSxucikpLmMsR3I9Zm8ucixUcj1mby5lKSxVYT1qb1ticj1UcitwcysxXSxrcj1uci8yLEdyPUdyfHxicjwwfHxudWxsIT1qb1ticisxXSxHcj1GYTw0PyhudWxsIT1VYXx8R3IpJiYoMD09RmF8fEZhPT0oZm8uczwwPzM6MikpOlVhPmty''@;'; put 'put ''fHxVYT09a3ImJig0PT1GYXx8R3J8fDY9PUZhJiYxJmpvW2JyLTFdfHxGYT09KGZvLnM8MD84OjcpKSxicjwxfHwham9bMF0pa249R3I/Q24oVW4uY2hhckF0KDEpLC1wcyxVbi5jaGFyQXQoMCkpOlVuLmNoYXJBdCgwKTtlbHNle2lmKGpvLmxlbmd0aD1icixHcilmb3IoLS1ucjsrK2pvWy0t''@;'; put 'put ''YnJdPm5yOylqb1ticl09MCxicnx8KCsrVHIsam89WzFdLmNvbmNhdChqbykpO2Zvcihrcj1qby5sZW5ndGg7IWpvWy0ta3JdOyk7Zm9yKFVhPTAsa249IiI7VWE8PWtyO2tuKz1Vbi5jaGFyQXQoam9bVWErK10pKTtrbj1DbihrbixUcixVbi5jaGFyQXQoMCkpfXJldHVybiBrbn19KCkseG49''@;'; put 'put ''ZnVuY3Rpb24oKXtmdW5jdGlvbiBybih3cixucixTcil7dmFyIFpyLFVuLGJyLFRyLGtyPTAsR3I9d3IubGVuZ3RoLGZvPW5yJWJlLGpvPW5yL2JlfDA7Zm9yKHdyPXdyLnNsaWNlKCk7R3ItLTspa3I9KChVbj1mbyooYnI9d3JbR3JdJWJlKSsoWnI9am8qYnIrKFRyPXdyW0dyXS9iZXwwKSpm''@;'; put 'put ''byklYmUqYmUra3IpL1NyfDApKyhaci9iZXwwKStqbypUcix3cltHcl09VW4lU3I7cmV0dXJuIGtyJiYod3I9W2tyXS5jb25jYXQod3IpKSx3cn1mdW5jdGlvbiB1bih3cixucixTcixacil7dmFyIFVuLGJyO2lmKFNyIT1acilicj1Tcj5acj8xOi0xO2Vsc2UgZm9yKFVuPWJyPTA7VW48U3I7''@;'; put 'put ''VW4rKylpZih3cltVbl0hPW5yW1VuXSl7YnI9d3JbVW5dPm5yW1VuXT8xOi0xO2JyZWFrfXJldHVybiBicn1mdW5jdGlvbiBrbih3cixucixTcixacil7Zm9yKHZhciBVbj0wO1NyLS07KXdyW1NyXS09VW4sd3JbU3JdPShVbj13cltTcl08bnJbU3JdPzE6MCkqWnIrd3JbU3JdLW5yW1NyXTtm''@;'; put 'put ''b3IoOyF3clswXSYmd3IubGVuZ3RoPjE7d3Iuc3BsaWNlKDAsMSkpO31yZXR1cm4gZnVuY3Rpb24od3IsbnIsU3IsWnIsVW4pe3ZhciBicixUcixrcixHcixmbyxqbyxTYSxVYSxwcyxGYSxocyxJYyxKYSxKMixJdSxIbCxDYyxubD13ci5zPT1uci5zPzE6LTEsanM9d3IuYyxRYT1uci5jO2lm''@;'; put 'put ''KCEoanMmJmpzWzBdJiZRYSYmUWFbMF0pKXJldHVybiBuZXcgZ24od3IucyYmbnIucyYmKGpzPyFRYXx8anNbMF0hPVFhWzBdOlFhKT9qcyYmMD09anNbMF18fCFRYT8wKm5sOm5sLzA6TmFOKTtmb3IocHM9KFVhPW5ldyBnbihubCkpLmM9W10sbmw9U3IrKFRyPXdyLmUtbnIuZSkrMSxVbnx8''@;'; put 'put ''KFVuPUQsVHI9cWUod3IuZS9aKS1xZShuci5lL1opLG5sPW5sL1p8MCksa3I9MDtRYVtrcl09PShqc1trcl18fDApO2tyKyspO2lmKFFhW2tyXT4oanNba3JdfHwwKSYmVHItLSxubDwwKXBzLnB1c2goMSksR3I9ITA7ZWxzZXtmb3IoSjI9anMubGVuZ3RoLEhsPVFhLmxlbmd0aCxrcj0wLG5s''@;'; put 'put ''Kz0yLChmbz1mKFVuLyhRYVswXSsxKSkpPjEmJihRYT1ybihRYSxmbyxVbiksanM9cm4oanMsZm8sVW4pLEhsPVFhLmxlbmd0aCxKMj1qcy5sZW5ndGgpLEphPUhsLGhzPShGYT1qcy5zbGljZSgwLEhsKSkubGVuZ3RoO2hzPEhsO0ZhW2hzKytdPTApO0NjPVFhLnNsaWNlKCksQ2M9WzBdLmNv''@;'; put 'put ''bmNhdChDYyksSXU9UWFbMF0sUWFbMV0+PVVuLzImJkl1Kys7ZG97aWYoZm89MCwoYnI9dW4oUWEsRmEsSGwsaHMpKTwwKXtpZihJYz1GYVswXSxIbCE9aHMmJihJYz1JYypVbisoRmFbMV18fDApKSwoZm89ZihJYy9JdSkpPjEpZm9yKGZvPj1VbiYmKGZvPVVuLTEpLFNhPShqbz1ybihRYSxm''@;'; put 'put ''byxVbikpLmxlbmd0aCxocz1GYS5sZW5ndGg7MT09dW4oam8sRmEsU2EsaHMpOylmby0tLGtuKGpvLEhsPFNhP0NjOlFhLFNhLFVuKSxTYT1qby5sZW5ndGgsYnI9MTtlbHNlIDA9PWZvJiYoYnI9Zm89MSksU2E9KGpvPVFhLnNsaWNlKCkpLmxlbmd0aDtpZihTYTxocyYmKGpvPVswXS5jb25j''@;'; put 'put ''YXQoam8pKSxrbihGYSxqbyxocyxVbiksaHM9RmEubGVuZ3RoLC0xPT1icilmb3IoO3VuKFFhLEZhLEhsLGhzKTwxOylmbysrLGtuKEZhLEhsPGhzP0NjOlFhLGhzLFVuKSxocz1GYS5sZW5ndGh9ZWxzZSAwPT09YnImJihmbysrLEZhPVswXSk7cHNba3IrK109Zm8sRmFbMF0/RmFbaHMrK109''@;'; put 'put ''anNbSmFdfHwwOihGYT1banNbSmFdXSxocz0xKX13aGlsZSgoSmErKzxKMnx8bnVsbCE9RmFbMF0pJiZubC0tKTtHcj1udWxsIT1GYVswXSxwc1swXXx8cHMuc3BsaWNlKDAsMSl9aWYoVW49PUQpe2Zvcihrcj0xLG5sPXBzWzBdO25sPj0xMDtubC89MTAsa3IrKyk7WXIoVWEsU3IrKFVhLmU9''@;'; put 'put ''a3IrVHIqWi0xKSsxLFpyLEdyKX1lbHNlIFVhLmU9VHIsVWEucj0rR3I7cmV0dXJuIFVhfX0oKSx5aT1mdW5jdGlvbigpe3ZhciBybj0vXigtPykwKFt4Ym9dKSg/PVx3W1x3Ll0qJCkvaSx1bj0vXihbXi5dKylcLiQvLGtuPS9eXC4oW14uXSspJC8sd3I9L14tPyhJbmZpbml0eXxOYU4pJC8s''@;'; put 'put ''bnI9L15ccypcKyg/PVtcdy5dKXxeXHMrfFxzKyQvZztyZXR1cm4gZnVuY3Rpb24oU3IsWnIsVW4sYnIpe3ZhciBUcixrcj1Vbj9acjpaci5yZXBsYWNlKG5yLCIiKTtpZih3ci50ZXN0KGtyKSlTci5zPWlzTmFOKGtyKT9udWxsOmtyPDA/LTE6MTtlbHNle2lmKCFVbiYmKGtyPWtyLnJlcGxh''@;'; put 'put ''Y2Uocm4sZnVuY3Rpb24oR3IsZm8sam8pe3JldHVybiBUcj0ieCI9PShqbz1qby50b0xvd2VyQ2FzZSgpKT8xNjoiYiI9PWpvPzI6OCxiciYmYnIhPVRyP0dyOmZvfSksYnImJihUcj1icixrcj1rci5yZXBsYWNlKHVuLCIkMSIpLnJlcGxhY2Uoa24sIjAuJDEiKSksWnIhPWtyKSlyZXR1cm4g''@;'; put 'put ''bmV3IGduKGtyLFRyKTtpZihnbi5ERUJVRyl0aHJvdyBFcnJvcih2KyJOb3QgYSIrKGJyPyIgYmFzZSAiK2JyOiIiKSsiIG51bWJlcjogIitacik7U3Iucz1udWxsfVNyLmM9U3IuZT1udWxsfX0oKSx5ci5hYnNvbHV0ZVZhbHVlPXlyLmFicz1mdW5jdGlvbigpe3ZhciBybj1uZXcgZ24odGhp''@;'; put 'put ''cyk7cmV0dXJuIHJuLnM8MCYmKHJuLnM9MSkscm59LHlyLmNvbXBhcmVkVG89ZnVuY3Rpb24ocm4sdW4pe3JldHVybiBsdCh0aGlzLG5ldyBnbihybix1bikpfSx5ci5kZWNpbWFsUGxhY2VzPXlyLmRwPWZ1bmN0aW9uKHJuLHVuKXt2YXIga24sd3IsbnI7aWYobnVsbCE9cm4pcmV0dXJuIG10''@;'; put 'put ''KHJuLDAsRWUpLG51bGw9PXVuP3VuPV9pOm10KHVuLDAsOCksWXIobmV3IGduKHRoaXMpLHJuK3RoaXMuZSsxLHVuKTtpZighKGtuPXRoaXMuYykpcmV0dXJuIG51bGw7aWYod3I9KChucj1rbi5sZW5ndGgtMSktcWUodGhpcy5lL1opKSpaLG5yPWtuW25yXSlmb3IoO25yJTEwPT0wO25yLz0x''@;'; put 'put ''MCx3ci0tKTtyZXR1cm4gd3I8MCYmKHdyPTApLHdyfSx5ci5kaXZpZGVkQnk9eXIuZGl2PWZ1bmN0aW9uKHJuLHVuKXtyZXR1cm4geG4odGhpcyxuZXcgZ24ocm4sdW4pLGlpLF9pKX0seXIuZGl2aWRlZFRvSW50ZWdlckJ5PXlyLmlkaXY9ZnVuY3Rpb24ocm4sdW4pe3JldHVybiB4bih0aGlz''@;'; put 'put ''LG5ldyBnbihybix1biksMCwxKX0seXIuZXhwb25lbnRpYXRlZEJ5PXlyLnBvdz1mdW5jdGlvbihybix1bil7dmFyIGtuLHdyLG5yLFNyLFVuLGJyLFRyLGtyLEdyPXRoaXM7aWYoKHJuPW5ldyBnbihybikpLmMmJiFybi5pc0ludGVnZXIoKSl0aHJvdyBFcnJvcih2KyJFeHBvbmVudCBub3Qg''@;'; put 'put ''YW4gaW50ZWdlcjogIitOaShybikpO2lmKG51bGwhPXVuJiYodW49bmV3IGduKHVuKSksVW49cm4uZT4xNCwhR3IuY3x8IUdyLmNbMF18fDE9PUdyLmNbMF0mJiFHci5lJiYxPT1Hci5jLmxlbmd0aHx8IXJuLmN8fCFybi5jWzBdKXJldHVybiBrcj1uZXcgZ24oTWF0aC5wb3coK05pKEdyKSxV''@;'; put 'put ''bj9ybi5zKigyLUp0KHJuKSk6K05pKHJuKSkpLHVuP2tyLm1vZCh1bik6a3I7aWYoYnI9cm4uczwwLHVuKXtpZih1bi5jPyF1bi5jWzBdOiF1bi5zKXJldHVybiBuZXcgZ24oTmFOKTsod3I9IWJyJiZHci5pc0ludGVnZXIoKSYmdW4uaXNJbnRlZ2VyKCkpJiYoR3I9R3IubW9kKHVuKSl9ZWxz''@;'; put 'put ''ZXtpZihybi5lPjkmJihHci5lPjB8fEdyLmU8LTF8fCgwPT1Hci5lP0dyLmNbMF0+MXx8VW4mJkdyLmNbMV0+PTI0ZTc6R3IuY1swXTw4ZTEzfHxVbiYmR3IuY1swXTw9OTk5OTk3NWU3KSkpcmV0dXJuIFNyPUdyLnM8MCYmSnQocm4pPy0wOjAsR3IuZT4tMSYmKFNyPTEvU3IpLG5ldyBnbihi''@;'; put 'put ''cj8xL1NyOlNyKTtRaSYmKFNyPWgoUWkvWisyKSl9Zm9yKFVuPyhrbj1uZXcgZ24oLjUpLGJyJiYocm4ucz0xKSxUcj1KdChybikpOlRyPShucj1NYXRoLmFicygrTmkocm4pKSklMixrcj1uZXcgZ24oR24pOzspe2lmKFRyKXtpZighKGtyPWtyLnRpbWVzKEdyKSkuYylicmVhaztTcj9rci5j''@;'; put 'put ''Lmxlbmd0aD5TciYmKGtyLmMubGVuZ3RoPVNyKTp3ciYmKGtyPWtyLm1vZCh1bikpfWlmKG5yKXtpZigwPT09KG5yPWYobnIvMikpKWJyZWFrO1RyPW5yJTJ9ZWxzZSBpZihZcihybj1ybi50aW1lcyhrbikscm4uZSsxLDEpLHJuLmU+MTQpVHI9SnQocm4pO2Vsc2V7aWYoMD09KG5yPStOaShy''@;'; put 'put ''bikpKWJyZWFrO1RyPW5yJTJ9R3I9R3IudGltZXMoR3IpLFNyP0dyLmMmJkdyLmMubGVuZ3RoPlNyJiYoR3IuYy5sZW5ndGg9U3IpOndyJiYoR3I9R3IubW9kKHVuKSl9cmV0dXJuIHdyP2tyOihiciYmKGtyPUduLmRpdihrcikpLHVuP2tyLm1vZCh1bik6U3I/WXIoa3IsUWksX2ksdm9pZCAw''@;'; put 'put ''KTprcil9LHlyLmludGVnZXJWYWx1ZT1mdW5jdGlvbihybil7dmFyIHVuPW5ldyBnbih0aGlzKTtyZXR1cm4gbnVsbD09cm4/cm49X2k6bXQocm4sMCw4KSxZcih1bix1bi5lKzEscm4pfSx5ci5pc0VxdWFsVG89eXIuZXE9ZnVuY3Rpb24ocm4sdW4pe3JldHVybiAwPT09bHQodGhpcyxuZXcg''@;'; put 'put ''Z24ocm4sdW4pKX0seXIuaXNGaW5pdGU9ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuY30seXIuaXNHcmVhdGVyVGhhbj15ci5ndD1mdW5jdGlvbihybix1bil7cmV0dXJuIGx0KHRoaXMsbmV3IGduKHJuLHVuKSk+MH0seXIuaXNHcmVhdGVyVGhhbk9yRXF1YWxUbz15ci5ndGU9ZnVuY3Rpb24o''@;'; put 'put ''cm4sdW4pe3JldHVybiAxPT09KHVuPWx0KHRoaXMsbmV3IGduKHJuLHVuKSkpfHwwPT09dW59LHlyLmlzSW50ZWdlcj1mdW5jdGlvbigpe3JldHVybiEhdGhpcy5jJiZxZSh0aGlzLmUvWik+dGhpcy5jLmxlbmd0aC0yfSx5ci5pc0xlc3NUaGFuPXlyLmx0PWZ1bmN0aW9uKHJuLHVuKXtyZXR1''@;'; put 'put ''cm4gbHQodGhpcyxuZXcgZ24ocm4sdW4pKTwwfSx5ci5pc0xlc3NUaGFuT3JFcXVhbFRvPXlyLmx0ZT1mdW5jdGlvbihybix1bil7cmV0dXJuLTE9PT0odW49bHQodGhpcyxuZXcgZ24ocm4sdW4pKSl8fDA9PT11bn0seXIuaXNOYU49ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5zfSx5ci5pc05l''@;'; put 'put ''Z2F0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuczwwfSx5ci5pc1Bvc2l0aXZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucz4wfSx5ci5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4hIXRoaXMuYyYmMD09dGhpcy5jWzBdfSx5ci5taW51cz1mdW5jdGlvbihybix1bil7dmFyIGtuLHdyLG5y''@;'; put 'put ''LFNyLFpyPXRoaXMsVW49WnIucztpZih1bj0ocm49bmV3IGduKHJuLHVuKSkucywhVW58fCF1bilyZXR1cm4gbmV3IGduKE5hTik7aWYoVW4hPXVuKXJldHVybiBybi5zPS11bixaci5wbHVzKHJuKTt2YXIgYnI9WnIuZS9aLFRyPXJuLmUvWixrcj1aci5jLEdyPXJuLmM7aWYoIWJyfHwhVHIp''@;'; put 'put ''e2lmKCFrcnx8IUdyKXJldHVybiBrcj8ocm4ucz0tdW4scm4pOm5ldyBnbihHcj9acjpOYU4pO2lmKCFrclswXXx8IUdyWzBdKXJldHVybiBHclswXT8ocm4ucz0tdW4scm4pOm5ldyBnbihrclswXT9acjozPT1faT8tMDowKX1pZihicj1xZShiciksVHI9cWUoVHIpLGtyPWtyLnNsaWNlKCks''@;'; put 'put ''VW49YnItVHIpe2ZvcigoU3I9VW48MCk/KFVuPS1Vbixucj1rcik6KFRyPWJyLG5yPUdyKSxuci5yZXZlcnNlKCksdW49VW47dW4tLTtuci5wdXNoKDApKTtuci5yZXZlcnNlKCl9ZWxzZSBmb3Iod3I9KFNyPShVbj1rci5sZW5ndGgpPCh1bj1Hci5sZW5ndGgpKT9Vbjp1bixVbj11bj0wO3Vu''@;'; put 'put ''PHdyO3VuKyspaWYoa3JbdW5dIT1Hclt1bl0pe1NyPWtyW3VuXTxHclt1bl07YnJlYWt9aWYoU3ImJihucj1rcixrcj1HcixHcj1ucixybi5zPS1ybi5zKSwodW49KHdyPUdyLmxlbmd0aCktKGtuPWtyLmxlbmd0aCkpPjApZm9yKDt1bi0tO2tyW2tuKytdPTApO2Zvcih1bj1ELTE7d3I+VW47''@;'; put 'put ''KXtpZihrclstLXdyXTxHclt3cl0pe2Zvcihrbj13cjtrbiYmIWtyWy0ta25dO2tyW2tuXT11bik7LS1rcltrbl0sa3Jbd3JdKz1EfWtyW3dyXS09R3Jbd3JdfWZvcig7MD09a3JbMF07a3Iuc3BsaWNlKDAsMSksLS1Ucik7cmV0dXJuIGtyWzBdP1VyKHJuLGtyLFRyKToocm4ucz0zPT1faT8t''@;'; put 'put ''MToxLHJuLmM9W3JuLmU9MF0scm4pfSx5ci5tb2R1bG89eXIubW9kPWZ1bmN0aW9uKHJuLHVuKXt2YXIga24sd3IsbnI9dGhpcztyZXR1cm4gcm49bmV3IGduKHJuLHVuKSwhbnIuY3x8IXJuLnN8fHJuLmMmJiFybi5jWzBdP25ldyBnbihOYU4pOiFybi5jfHxuci5jJiYhbnIuY1swXT9uZXcg''@;'; put 'put ''Z24obnIpOig5PT13aT8od3I9cm4ucyxybi5zPTEsa249eG4obnIscm4sMCwzKSxybi5zPXdyLGtuLnMqPXdyKTprbj14bihucixybiwwLHdpKSwhKHJuPW5yLm1pbnVzKGtuLnRpbWVzKHJuKSkpLmNbMF0mJjE9PXdpJiYocm4ucz1uci5zKSxybil9LHlyLm11bHRpcGxpZWRCeT15ci50aW1l''@;'; put 'put ''cz1mdW5jdGlvbihybix1bil7dmFyIGtuLHdyLG5yLFNyLFpyLFVuLGJyLFRyLGtyLEdyLGZvLGpvLFNhLFVhLHBzLEZhPXRoaXMsaHM9RmEuYyxJYz0ocm49bmV3IGduKHJuLHVuKSkuYztpZighKGhzJiZJYyYmaHNbMF0mJkljWzBdKSlyZXR1cm4hRmEuc3x8IXJuLnN8fGhzJiYhaHNbMF0m''@;'; put 'put ''JiFJY3x8SWMmJiFJY1swXSYmIWhzP3JuLmM9cm4uZT1ybi5zPW51bGw6KHJuLnMqPUZhLnMsaHMmJkljPyhybi5jPVswXSxybi5lPTApOnJuLmM9cm4uZT1udWxsKSxybjtmb3Iod3I9cWUoRmEuZS9aKStxZShybi5lL1opLHJuLnMqPUZhLnMsKGJyPWhzLmxlbmd0aCk8KEdyPUljLmxlbmd0''@;'; put 'put ''aCkmJihTYT1ocyxocz1JYyxJYz1TYSxucj1icixicj1HcixHcj1uciksbnI9YnIrR3IsU2E9W107bnItLTtTYS5wdXNoKDApKTtmb3IoVWE9RCxwcz1iZSxucj1HcjstLW5yPj0wOyl7Zm9yKGtuPTAsZm89SWNbbnJdJXBzLGpvPUljW25yXS9wc3wwLFNyPW5yKyhacj1icik7U3I+bnI7KWtu''@;'; put 'put ''PSgoVHI9Zm8qKFRyPWhzWy0tWnJdJXBzKSsoVW49am8qVHIrKGtyPWhzW1pyXS9wc3wwKSpmbyklcHMqcHMrU2FbU3JdK2tuKS9VYXwwKSsoVW4vcHN8MCkram8qa3IsU2FbU3ItLV09VHIlVWE7U2FbU3JdPWtufXJldHVybiBrbj8rK3dyOlNhLnNwbGljZSgwLDEpLFVyKHJuLFNhLHdyKX0s''@;'; put 'put ''eXIubmVnYXRlZD1mdW5jdGlvbigpe3ZhciBybj1uZXcgZ24odGhpcyk7cmV0dXJuIHJuLnM9LXJuLnN8fG51bGwscm59LHlyLnBsdXM9ZnVuY3Rpb24ocm4sdW4pe3ZhciBrbix3cj10aGlzLG5yPXdyLnM7aWYodW49KHJuPW5ldyBnbihybix1bikpLnMsIW5yfHwhdW4pcmV0dXJuIG5ldyBn''@;'; put 'put ''bihOYU4pO2lmKG5yIT11bilyZXR1cm4gcm4ucz0tdW4sd3IubWludXMocm4pO3ZhciBTcj13ci5lL1osWnI9cm4uZS9aLFVuPXdyLmMsYnI9cm4uYztpZighU3J8fCFacil7aWYoIVVufHwhYnIpcmV0dXJuIG5ldyBnbihuci8wKTtpZighVW5bMF18fCFiclswXSlyZXR1cm4gYnJbMF0/cm46''@;'; put 'put ''bmV3IGduKFVuWzBdP3dyOjAqbnIpfWlmKFNyPXFlKFNyKSxacj1xZShaciksVW49VW4uc2xpY2UoKSxucj1Tci1acil7Zm9yKG5yPjA/KFpyPVNyLGtuPWJyKToobnI9LW5yLGtuPVVuKSxrbi5yZXZlcnNlKCk7bnItLTtrbi5wdXNoKDApKTtrbi5yZXZlcnNlKCl9Zm9yKChucj1Vbi5sZW5n''@;'; put 'put ''dGgpLSh1bj1ici5sZW5ndGgpPDAmJihrbj1icixicj1VbixVbj1rbix1bj1uciksbnI9MDt1bjspbnI9KFVuWy0tdW5dPVVuW3VuXSticlt1bl0rbnIpL0R8MCxVblt1bl09RD09PVVuW3VuXT8wOlVuW3VuXSVEO3JldHVybiBuciYmKFVuPVtucl0uY29uY2F0KFVuKSwrK1pyKSxVcihybixV''@;'; put 'put ''bixacil9LHlyLnByZWNpc2lvbj15ci5zZD1mdW5jdGlvbihybix1bil7dmFyIGtuLHdyLG5yO2lmKG51bGwhPXJuJiZybiE9PSEhcm4pcmV0dXJuIG10KHJuLDEsRWUpLG51bGw9PXVuP3VuPV9pOm10KHVuLDAsOCksWXIobmV3IGduKHRoaXMpLHJuLHVuKTtpZighKGtuPXRoaXMuYykpcmV0''@;'; put 'put ''dXJuIG51bGw7aWYod3I9KG5yPWtuLmxlbmd0aC0xKSpaKzEsbnI9a25bbnJdKXtmb3IoO25yJTEwPT0wO25yLz0xMCx3ci0tKTtmb3IobnI9a25bMF07bnI+PTEwO25yLz0xMCx3cisrKTt9cmV0dXJuIHJuJiZ0aGlzLmUrMT53ciYmKHdyPXRoaXMuZSsxKSx3cn0seXIuc2hpZnRlZEJ5PWZ1''@;'; put 'put ''bmN0aW9uKHJuKXtyZXR1cm4gbXQocm4sLW5lLG5lKSx0aGlzLnRpbWVzKCIxZSIrcm4pfSx5ci5zcXVhcmVSb290PXlyLnNxcnQ9ZnVuY3Rpb24oKXt2YXIgcm4sdW4sa24sd3IsbnIsU3I9dGhpcyxacj1Tci5jLFVuPVNyLnMsYnI9U3IuZSxUcj1paSs0LGtyPW5ldyBnbigiMC41Iik7aWYo''@;'; put 'put ''MSE9PVVufHwhWnJ8fCFaclswXSlyZXR1cm4gbmV3IGduKCFVbnx8VW48MCYmKCFacnx8WnJbMF0pP05hTjpacj9TcjoxLzApO2lmKDA9PShVbj1NYXRoLnNxcnQoK05pKFNyKSkpfHxVbj09MS8wPygoKHVuPW50KFpyKSkubGVuZ3RoK2JyKSUyPT0wJiYodW4rPSIwIiksVW49TWF0aC5zcXJ0''@;'; put 'put ''KCt1biksYnI9cWUoKGJyKzEpLzIpLShicjwwfHxiciUyKSxrbj1uZXcgZ24odW49VW49PTEvMD8iNWUiK2JyOih1bj1Vbi50b0V4cG9uZW50aWFsKCkpLnNsaWNlKDAsdW4uaW5kZXhPZigiZSIpKzEpK2JyKSk6a249bmV3IGduKFVuKyIiKSxrbi5jWzBdKWZvcigoVW49KGJyPWtuLmUpK1Ry''@;'; put 'put ''KTwzJiYoVW49MCk7OylpZihrbj1rci50aW1lcygobnI9a24pLnBsdXMoeG4oU3IsbnIsVHIsMSkpKSxudChuci5jKS5zbGljZSgwLFVuKT09PSh1bj1udChrbi5jKSkuc2xpY2UoMCxVbikpe2lmKGtuLmU8YnImJi0tVW4sIjk5OTkiIT0odW49dW4uc2xpY2UoVW4tMyxVbisxKSkmJih3cnx8''@;'; put 'put ''IjQ5OTkiIT11bikpeyghK3VufHwhK3VuLnNsaWNlKDEpJiYiNSI9PXVuLmNoYXJBdCgwKSkmJihZcihrbixrbi5lK2lpKzIsMSkscm49IWtuLnRpbWVzKGtuKS5lcShTcikpO2JyZWFrfWlmKCF3ciYmKFlyKG5yLG5yLmUraWkrMiwwKSxuci50aW1lcyhucikuZXEoU3IpKSl7a249bnI7YnJl''@;'; put 'put ''YWt9VHIrPTQsVW4rPTQsd3I9MX1yZXR1cm4gWXIoa24sa24uZStpaSsxLF9pLHJuKX0seXIudG9FeHBvbmVudGlhbD1mdW5jdGlvbihybix1bil7cmV0dXJuIG51bGwhPXJuJiYobXQocm4sMCxFZSkscm4rKyksJG4odGhpcyxybix1biwxKX0seXIudG9GaXhlZD1mdW5jdGlvbihybix1bil7''@;'; put 'put ''cmV0dXJuIG51bGwhPXJuJiYobXQocm4sMCxFZSkscm49cm4rdGhpcy5lKzEpLCRuKHRoaXMscm4sdW4pfSx5ci50b0Zvcm1hdD1mdW5jdGlvbihybix1bixrbil7dmFyIHdyO2lmKG51bGw9PWtuKW51bGwhPXJuJiZ1biYmIm9iamVjdCI9PXR5cGVvZiB1bj8oa249dW4sdW49bnVsbCk6cm4m''@;'; put 'put ''JiJvYmplY3QiPT10eXBlb2Ygcm4/KGtuPXJuLHJuPXVuPW51bGwpOmtuPXZ0O2Vsc2UgaWYoIm9iamVjdCIhPXR5cGVvZiBrbil0aHJvdyBFcnJvcih2KyJBcmd1bWVudCBub3QgYW4gb2JqZWN0OiAiK2tuKTtpZih3cj10aGlzLnRvRml4ZWQocm4sdW4pLHRoaXMuYyl7dmFyIFNyLFpyPXdy''@;'; put 'put ''LnNwbGl0KCIuIiksVW49K2tuLmdyb3VwU2l6ZSxicj0ra24uc2Vjb25kYXJ5R3JvdXBTaXplLFRyPWtuLmdyb3VwU2VwYXJhdG9yfHwiIixrcj1aclswXSxHcj1aclsxXSxmbz10aGlzLnM8MCxqbz1mbz9rci5zbGljZSgxKTprcixTYT1qby5sZW5ndGg7aWYoYnImJihTcj1VbixVbj1icixi''@;'; put 'put ''cj1TcixTYS09U3IpLFVuPjAmJlNhPjApe2Zvcihrcj1qby5zdWJzdHIoMCxTcj1TYSVVbnx8VW4pO1NyPFNhO1NyKz1Vbilrcis9VHIram8uc3Vic3RyKFNyLFVuKTticj4wJiYoa3IrPVRyK2pvLnNsaWNlKFNyKSksZm8mJihrcj0iLSIra3IpfXdyPUdyP2tyKyhrbi5kZWNpbWFsU2VwYXJh''@;'; put 'put ''dG9yfHwiIikrKChicj0ra24uZnJhY3Rpb25Hcm91cFNpemUpP0dyLnJlcGxhY2UobmV3IFJlZ0V4cCgiXFxkeyIrYnIrIn1cXEIiLCJnIiksIiQmIisoa24uZnJhY3Rpb25Hcm91cFNlcGFyYXRvcnx8IiIpKTpHcik6a3J9cmV0dXJuKGtuLnByZWZpeHx8IiIpK3dyKyhrbi5zdWZmaXh8fCIi''@;'; put 'put ''KX0seXIudG9GcmFjdGlvbj1mdW5jdGlvbihybil7dmFyIHVuLGtuLHdyLG5yLFNyLFpyLFVuLGJyLFRyLGtyLEdyLGZvLGpvPXRoaXMsU2E9am8uYztpZihudWxsIT1ybiYmKCEoVW49bmV3IGduKHJuKSkuaXNJbnRlZ2VyKCkmJihVbi5jfHwxIT09VW4ucyl8fFVuLmx0KEduKSkpdGhyb3cg''@;'; put 'put ''RXJyb3IodisiQXJndW1lbnQgIisoVW4uaXNJbnRlZ2VyKCk/Im91dCBvZiByYW5nZTogIjoibm90IGFuIGludGVnZXI6ICIpK05pKFVuKSk7aWYoIVNhKXJldHVybiBuZXcgZ24oam8pO2Zvcih1bj1uZXcgZ24oR24pLFRyPWtuPW5ldyBnbihHbiksd3I9YnI9bmV3IGduKEduKSxmbz1udChT''@;'; put 'put ''YSksU3I9dW4uZT1mby5sZW5ndGgtam8uZS0xLHVuLmNbMF09Y2VbKFpyPVNyJVopPDA/Witacjpacl0scm49IXJufHxVbi5jb21wYXJlZFRvKHVuKT4wP1NyPjA/dW46VHI6VW4sWnI9SXIsSXI9MS8wLFVuPW5ldyBnbihmbyksYnIuY1swXT0wO2tyPXhuKFVuLHVuLDAsMSksMSE9KG5yPWtu''@;'; put 'put ''LnBsdXMoa3IudGltZXMod3IpKSkuY29tcGFyZWRUbyhybik7KWtuPXdyLHdyPW5yLFRyPWJyLnBsdXMoa3IudGltZXMobnI9VHIpKSxicj1ucix1bj1Vbi5taW51cyhrci50aW1lcyhucj11bikpLFVuPW5yO3JldHVybiBucj14bihybi5taW51cyhrbiksd3IsMCwxKSxicj1ici5wbHVzKG5y''@;'; put 'put ''LnRpbWVzKFRyKSksa249a24ucGx1cyhuci50aW1lcyh3cikpLGJyLnM9VHIucz1qby5zLEdyPXhuKFRyLHdyLFNyKj0yLF9pKS5taW51cyhqbykuYWJzKCkuY29tcGFyZWRUbyh4bihicixrbixTcixfaSkubWludXMoam8pLmFicygpKTwxP1tUcix3cl06W2JyLGtuXSxJcj1acixHcn0seXIu''@;'; put 'put ''dG9OdW1iZXI9ZnVuY3Rpb24oKXtyZXR1cm4rTmkodGhpcyl9LHlyLnRvUHJlY2lzaW9uPWZ1bmN0aW9uKHJuLHVuKXtyZXR1cm4gbnVsbCE9cm4mJm10KHJuLDEsRWUpLCRuKHRoaXMscm4sdW4sMil9LHlyLnRvU3RyaW5nPWZ1bmN0aW9uKHJuKXt2YXIgdW4sa249dGhpcyx3cj1rbi5zLG5y''@;'; put 'put ''PWtuLmU7cmV0dXJuIG51bGw9PT1ucj93cj8odW49IkluZmluaXR5Iix3cjwwJiYodW49Ii0iK3VuKSk6dW49Ik5hTiI6KG51bGw9PXJuP3VuPW5yPD1Qbnx8bnI+PWpyP3luKG50KGtuLmMpLG5yKTpDbihudChrbi5jKSxuciwiMCIpOjEwPT09cm4mJld0P3VuPUNuKG50KChrbj1ZcihuZXcg''@;'; put 'put ''Z24oa24pLGlpK25yKzEsX2kpKS5jKSxrbi5lLCIwIik6KG10KHJuLDIsTnQubGVuZ3RoLCJCYXNlIiksdW49UW4oQ24obnQoa24uYyksbnIsIjAiKSwxMCxybix3ciwhMCkpLHdyPDAmJmtuLmNbMF0mJih1bj0iLSIrdW4pKSx1bn0seXIudmFsdWVPZj15ci50b0pTT049ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gTmkodGhpcyl9LHlyLl9pc0JpZ051bWJlcj0hMCxudWxsIT10biYmZ24uc2V0KHRuKSxnbn0oKSxhLmRlZmF1bHQ9YS5CaWdOdW1iZXI9YSxjLmV4cG9ydHM/Yy5leHBvcnRzPWE6KGx8fChsPXR5cGVvZiBzZWxmPCJ1IiYmc2VsZj9zZWxmOndpbmRvdyksbC5CaWdOdW1iZXI9YSl9''@;'; put 'put ''KERpdCl9KFpwZSk7dmFyIFdwZT1acGUuZXhwb3J0cztjb25zdCBjMz1aWCgpLEppdD1qWCgpLFFpdD16WCxlb3Q9V3BlLFowPXt0cmlsbGlvbjpNYXRoLnBvdygxMCwxMiksYmlsbGlvbjpNYXRoLnBvdygxMCw5KSxtaWxsaW9uOk1hdGgucG93KDEwLDYpLHRob3VzYW5kOk1hdGgucG93KDEw''@;'; put 'put ''LDMpfSx0VD17dG90YWxMZW5ndGg6MCxjaGFyYWN0ZXJpc3RpYzowLGZvcmNlQXZlcmFnZTohMSxhdmVyYWdlOiExLG1hbnRpc3NhOi0xLG9wdGlvbmFsTWFudGlzc2E6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITEsc3BhY2VTZXBhcmF0ZWQ6ITEsbmVnYXRpdmU6InNpZ24iLGZvcmNlU2lnbjoh''@;'; put 'put ''MSxyb3VuZGluZ0Z1bmN0aW9uOk1hdGgucm91bmQsc3BhY2VTZXBhcmF0ZWRBYmJyZXZpYXRpb246ITF9LHtiaW5hcnlTdWZmaXhlczpZcGUsZGVjaW1hbFN1ZmZpeGVzOkJQfT1jMy5jdXJyZW50Qnl0ZXMoKSxXWD17Z2VuZXJhbDp7c2NhbGU6MTAyNCxzdWZmaXhlczpCUCxtYXJrZXI6ImJk''@;'; put 'put ''In0sYmluYXJ5OntzY2FsZToxMDI0LHN1ZmZpeGVzOllwZSxtYXJrZXI6ImIifSxkZWNpbWFsOntzY2FsZToxZTMsc3VmZml4ZXM6QlAsbWFya2VyOiJkIn19O2Z1bmN0aW9uIGpQKGMsbCxhKXtsZXQgZD1sWzBdLGg9TWF0aC5hYnMoYyk7aWYoaD49YSl7Zm9yKGxldCBmPTE7ZjxsLmxlbmd0''@;'; put 'put ''aDsrK2Ype2xldCB2PU1hdGgucG93KGEsZiksTT1NYXRoLnBvdyhhLGYrMSk7aWYoaD49diYmaDxNKXtkPWxbZl0sYy89djticmVha319ZD09PWxbMF0mJihjLz1NYXRoLnBvdyhhLGwubGVuZ3RoLTEpLGQ9bFtsLmxlbmd0aC0xXSl9cmV0dXJue3ZhbHVlOmMsc3VmZml4OmR9fWZ1bmN0aW9u''@;'; put 'put ''IHpQKGMpe2xldCBsPSIiO2ZvcihsZXQgYT0wO2E8YzthKyspbCs9IjAiO3JldHVybiBsfWZ1bmN0aW9uIG5UKHtpbnN0YW5jZTpjLHByb3ZpZGVkRm9ybWF0Omwsc3RhdGU6YT1jMyxkZWNpbWFsU2VwYXJhdG9yOmQsZGVmYXVsdHM6aD1hLmN1cnJlbnREZWZhdWx0cygpfSl7bGV0IGY9Yy5f''@;'; put 'put ''dmFsdWU7aWYoMD09PWYmJmEuaGFzWmVyb0Zvcm1hdCgpKXJldHVybiBhLmdldFplcm9Gb3JtYXQoKTtpZighaXNGaW5pdGUoZikpcmV0dXJuIGYudG9TdHJpbmcoKTtsZXQgdj1PYmplY3QuYXNzaWduKHt9LHRULGgsbCksTT12LnRvdGFsTGVuZ3RoLEQ9TT8wOnYuY2hhcmFjdGVyaXN0aWMs''@;'; put 'put ''Wj12Lm9wdGlvbmFsQ2hhcmFjdGVyaXN0aWMsbmU9di5mb3JjZUF2ZXJhZ2UsYmU9ISFNfHwhIW5lfHx2LmF2ZXJhZ2UsRWU9TT8tMTpiZSYmdm9pZCAwPT09bC5tYW50aXNzYT8wOnYubWFudGlzc2EsQmU9IU0mJih2b2lkIDA9PT1sLm9wdGlvbmFsTWFudGlzc2E/LTE9PT1FZTp2Lm9wdGlv''@;'; put 'put ''bmFsTWFudGlzc2EpLHFlPXYudHJpbU1hbnRpc3NhLG50PXYudGhvdXNhbmRTZXBhcmF0ZWQsbHQ9di5zcGFjZVNlcGFyYXRlZCxtdD12Lm5lZ2F0aXZlLEp0PXYuZm9yY2VTaWduLHluPXYuZXhwb25lbnRpYWwsQ249di5yb3VuZGluZ0Z1bmN0aW9uLHRuPSIiO2lmKGJlKXtsZXQgUW49ZnVu''@;'; put 'put ''Y3Rpb24gZG90KHt2YWx1ZTpjLGZvcmNlQXZlcmFnZTpsLGxvd1ByZWNpc2lvbjphPSEwLGFiYnJldmlhdGlvbnM6ZCxzcGFjZVNlcGFyYXRlZDpoPSExLHRvdGFsTGVuZ3RoOmY9MCxyb3VuZGluZ0Z1bmN0aW9uOnY9TWF0aC5yb3VuZH0pe2xldCBNPSIiLEQ9TWF0aC5hYnMoYyksWj0tMTtp''@;'; put 'put ''ZihsJiZkW2xdJiZaMFtsXT8oTT1kW2xdLGMvPVowW2xdKTpEPj1aMC50cmlsbGlvbnx8YSYmMT09PXYoRC9aMC50cmlsbGlvbik/KE09ZC50cmlsbGlvbixjLz1aMC50cmlsbGlvbik6RDxaMC50cmlsbGlvbiYmRD49WjAuYmlsbGlvbnx8YSYmMT09PXYoRC9aMC5iaWxsaW9uKT8oTT1kLmJp''@;'; put 'put ''bGxpb24sYy89WjAuYmlsbGlvbik6RDxaMC5iaWxsaW9uJiZEPj1aMC5taWxsaW9ufHxhJiYxPT09dihEL1owLm1pbGxpb24pPyhNPWQubWlsbGlvbixjLz1aMC5taWxsaW9uKTooRDxaMC5taWxsaW9uJiZEPj1aMC50aG91c2FuZHx8YSYmMT09PXYoRC9aMC50aG91c2FuZCkpJiYoTT1kLnRo''@;'; put 'put ''b3VzYW5kLGMvPVowLnRob3VzYW5kKSxNJiYoTT0oaD8iICI6IiIpK00pLGYpe2xldCBjZT1jPDAsYmU9Yy50b1N0cmluZygpLnNwbGl0KCIuIilbMF07Wj1NYXRoLm1heChmLShjZT9iZS5sZW5ndGgtMTpiZS5sZW5ndGgpLDApfXJldHVybnt2YWx1ZTpjLGFiYnJldmlhdGlvbjpNLG1hbnRp''@;'; put 'put ''c3NhUHJlY2lzaW9uOlp9fSh7dmFsdWU6Zixmb3JjZUF2ZXJhZ2U6bmUsbG93UHJlY2lzaW9uOnYubG93UHJlY2lzaW9uLGFiYnJldmlhdGlvbnM6YS5jdXJyZW50QWJicmV2aWF0aW9ucygpLHNwYWNlU2VwYXJhdGVkOmx0LHJvdW5kaW5nRnVuY3Rpb246Q24sdG90YWxMZW5ndGg6TX0pO2Y9''@;'; put 'put ''UW4udmFsdWUsdG4rPVFuLmFiYnJldmlhdGlvbixNJiYoRWU9UW4ubWFudGlzc2FQcmVjaXNpb24pfWlmKHluKXtsZXQgUW49ZnVuY3Rpb24gaG90KHt2YWx1ZTpjLGNoYXJhY3RlcmlzdGljUHJlY2lzaW9uOmx9KXtsZXRbYSxkXT1jLnRvRXhwb25lbnRpYWwoKS5zcGxpdCgiZSIpLGg9K2E7''@;'; put 'put ''cmV0dXJuIGw/KDE8bCYmKGgqPU1hdGgucG93KDEwLGwtMSksZD0rZC0obC0xKSxkPWQ+PTA/YCske2R9YDpkKSx7dmFsdWU6aCxhYmJyZXZpYXRpb246YGUke2R9YH0pOnt2YWx1ZTpoLGFiYnJldmlhdGlvbjpgZSR7ZH1gfX0oe3ZhbHVlOmYsY2hhcmFjdGVyaXN0aWNQcmVjaXNpb246RH0p''@;'; put 'put ''O2Y9UW4udmFsdWUsdG49UW4uYWJicmV2aWF0aW9uK3RufWxldCB4bj1mdW5jdGlvbiBnb3QoYyxsLGEsZCxoLGYpe2lmKC0xPT09ZClyZXR1cm4gYztsZXQgdj1mdW5jdGlvbiBwb3QoYyxsLGE9TWF0aC5yb3VuZCl7cmV0dXJuLTEhPT1jLnRvU3RyaW5nKCkuaW5kZXhPZigiZSIpP2Z1bmN0''@;'; put 'put ''aW9uIGZvdChjLGwpe2xldCBhPWMudG9TdHJpbmcoKSxbZCxoXT1hLnNwbGl0KCJlIiksW2Ysdj0iIl09ZC5zcGxpdCgiLiIpO2lmKCtoPjApYT1mK3YrelAoaC12Lmxlbmd0aCk7ZWxzZXtsZXQgTT0iLiI7TT0rZjwwP2AtMCR7TX1gOmAwJHtNfWA7bGV0IEQ9KHpQKC1oLTEpK01hdGguYWJz''@;'; put 'put ''KGYpK3YpLnN1YnN0cigwLGwpO0QubGVuZ3RoPGwmJihEKz16UChsLUQubGVuZ3RoKSksYT1NK0R9cmV0dXJuK2g+MCYmbD4wJiYoYSs9YC4ke3pQKGwpfWApLGF9KGMsbCk6bmV3IGVvdChhKCtgJHtjfWUrJHtsfWApL01hdGgucG93KDEwLGwpKS50b0ZpeGVkKGwpfShsLGQsZiksW00sRD0i''@;'; put 'put ''Il09di50b1N0cmluZygpLnNwbGl0KCIuIik7aWYoRC5tYXRjaCgvXjArJC8pJiYoYXx8aCkpcmV0dXJuIE07bGV0IFo9RC5tYXRjaCgvMCskLyk7cmV0dXJuIGgmJlo/YCR7TX0uJHtELnRvU3RyaW5nKCkuc2xpY2UoMCxaLmluZGV4KX1gOnYudG9TdHJpbmcoKX0oZi50b1N0cmluZygpLGYs''@;'; put 'put ''QmUsRWUscWUsQ24pO3JldHVybiB4bj1mdW5jdGlvbiBtb3QoYyxsLGEsZCl7bGV0IGg9YyxbZix2XT1oLnRvU3RyaW5nKCkuc3BsaXQoIi4iKTtpZihmLm1hdGNoKC9eLT8wJC8pJiZhKXJldHVybiB2P2Ake2YucmVwbGFjZSgiMCIsIiIpfS4ke3Z9YDpmLnJlcGxhY2UoIjAiLCIiKTtjb25z''@;'; put 'put ''dCBNPWw8MCYmMD09PWYuaW5kZXhPZigiLSIpO2lmKE0mJihmPWYuc2xpY2UoMSksaD1oLnNsaWNlKDEpKSxmLmxlbmd0aDxkKXtsZXQgRD1kLWYubGVuZ3RoO2ZvcihsZXQgWj0wO1o8RDtaKyspaD1gMCR7aH1gfXJldHVybiBNJiYoaD1gLSR7aH1gKSxoLnRvU3RyaW5nKCl9KHhuLGYsWixE''@;'; put 'put ''KSx4bj1mdW5jdGlvbiBib3QoYyxsLGEsZCxoKXtsZXQgZj1kLmN1cnJlbnREZWxpbWl0ZXJzKCksdj1mLnRob3VzYW5kcztoPWh8fGYuZGVjaW1hbDtsZXQgTT1mLnRob3VzYW5kc1NpemV8fDMsRD1jLnRvU3RyaW5nKCksWj1ELnNwbGl0KCIuIilbMF0sbmU9RC5zcGxpdCgiLiIpWzFdO2Nv''@;'; put 'put ''bnN0IGNlPWw8MCYmMD09PVouaW5kZXhPZigiLSIpO3JldHVybiBhJiYoY2UmJihaPVouc2xpY2UoMSkpLGZ1bmN0aW9uIHZvdChjLGwpe2xldCBhPVtdLGQ9MDtmb3IobGV0IGg9YztoPjA7aC0tKWQ9PT1sJiYoYS51bnNoaWZ0KGgpLGQ9MCksZCsrO3JldHVybiBhfShaLmxlbmd0aCxNKS5m''@;'; put 'put ''b3JFYWNoKChFZSxCZSk9PntaPVouc2xpY2UoMCxFZStCZSkrditaLnNsaWNlKEVlK0JlKX0pLGNlJiYoWj1gLSR7Wn1gKSksRD1uZT9aK2grbmU6WixEfSh4bixmLG50LGEsZCksKGJlfHx5bikmJih4bj1mdW5jdGlvbiB5b3QoYyxsKXtyZXR1cm4gYytsfSh4bix0bikpLChKdHx8ZjwwKSYm''@;'; put 'put ''KHhuPWZ1bmN0aW9uIF9vdChjLGwsYSl7cmV0dXJuIDA9PT1sP2M6MD09K2M/Yy5yZXBsYWNlKCItIiwiIik6bD4wP2ArJHtjfWA6InNpZ24iPT09YT9jOmAoJHtjLnJlcGxhY2UoIi0iLCIiKX0pYH0oeG4sZixtdCkpLHhufWZ1bmN0aW9uIGtfKGMsbCl7aWYoIWMpcmV0dXJuIGw7bGV0IGE9''@;'; put 'put ''T2JqZWN0LmtleXMoYyk7cmV0dXJuIDE9PT1hLmxlbmd0aCYmIm91dHB1dCI9PT1hWzBdP2w6Y31jb25zdCBFZz1XcGU7ZnVuY3Rpb24gR3BlKGMsbCxhKXtsZXQgZD1uZXcgRWcoYy5fdmFsdWUpLGg9bDtyZXR1cm4gYS5pc051bWJybyhsKSYmKGg9bC5fdmFsdWUpLGg9bmV3IEVnKGgpLGMu''@;'; put 'put ''X3ZhbHVlPWQubWludXMoaCkudG9OdW1iZXIoKSxjfWNvbnN0IE9wPVpYKCksSW90PWpYKCksUm90PShjPT4oe2xvYWRMYW5ndWFnZXNJbk5vZGU6bD0+ZnVuY3Rpb24gcWl0KGMsbCl7Yy5mb3JFYWNoKGE9PntsZXQgZDt0cnl7ZD1mdW5jdGlvbiBLaXQoYyl7dGhyb3cgbmV3IEVycm9yKCdD''@;'; put 'put ''b3VsZCBub3QgZHluYW1pY2FsbHkgcmVxdWlyZSAiJytjKyciLiBQbGVhc2UgY29uZmlndXJlIHRoZSBkeW5hbWljUmVxdWlyZVRhcmdldHMgb3IvYW5kIGlnbm9yZUR5bmFtaWNSZXF1aXJlcyBvcHRpb24gb2YgQHJvbGx1cC9wbHVnaW4tY29tbW9uanMgYXBwcm9wcmlhdGVseSBmb3IgdGhp''@;'; put 'put ''cyByZXF1aXJlIGNhbGwgdG8gd29yay4nKX0oYC4uL2xhbmd1YWdlcy8ke2F9YCl9Y2F0Y2h7Y29uc29sZS5lcnJvcihgVW5hYmxlIHRvIGxvYWQgIiR7YX0iLiBObyBtYXRjaGluZyBsYW5ndWFnZSBmaWxlIGZvdW5kLmApfWQmJmwucmVnaXN0ZXJMYW5ndWFnZShkKX0pfShsLGMpfSkpKGx1''@;'; put 'put ''KSxMb3Q9anBlKCk7bGV0IHI5PShjPT4oe2Zvcm1hdDooLi4ubCk9PmZ1bmN0aW9uIHRvdChjLGw9e30sYSl7aWYoInN0cmluZyI9PXR5cGVvZiBsJiYobD1RaXQucGFyc2VGb3JtYXQobCkpLCFKaXQudmFsaWRhdGVGb3JtYXQobCkpcmV0dXJuIkVSUk9SOiBpbnZhbGlkIGZvcm1hdCI7bGV0''@;'; put 'put ''IGg9bC5wcmVmaXh8fCIiLGY9bC5wb3N0Zml4fHwiIix2PWZ1bmN0aW9uIG5vdChjLGwsYSl7c3dpdGNoKGwub3V0cHV0KXtjYXNlImN1cnJlbmN5IjpyZXR1cm4gZnVuY3Rpb24gdW90KGMsbCxhKXtjb25zdCBkPWEuY3VycmVudEN1cnJlbmN5KCk7bGV0IHYsaD1PYmplY3QuYXNzaWduKHt9''@;'; put 'put ''LGwpLGY9T2JqZWN0LmFzc2lnbih7fSx0VCxoKSxNPSIiLEQ9ISFmLnRvdGFsTGVuZ3RofHwhIWYuZm9yY2VBdmVyYWdlfHxmLmF2ZXJhZ2UsWj1oLmN1cnJlbmN5UG9zaXRpb258fGQucG9zaXRpb24sbmU9aC5jdXJyZW5jeVN5bWJvbHx8ZC5zeW1ib2w7Y29uc3QgY2U9dm9pZCAwIT09Zi5z''@;'; put 'put ''cGFjZVNlcGFyYXRlZEN1cnJlbmN5P2Yuc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTpmLnNwYWNlU2VwYXJhdGVkO3ZvaWQgMD09PWgubG93UHJlY2lzaW9uJiYoaC5sb3dQcmVjaXNpb249ITEpLGNlJiYoTT0iICIpLCJpbmZpeCI9PT1aJiYodj1NK25lK00pO2xldCBiZT1uVCh7aW5zdGFuY2U6''@;'; put 'put ''Yyxwcm92aWRlZEZvcm1hdDpoLHN0YXRlOmEsZGVjaW1hbFNlcGFyYXRvcjp2fSk7cmV0dXJuInByZWZpeCI9PT1aJiYoYmU9Yy5fdmFsdWU8MCYmInNpZ24iPT09Zi5uZWdhdGl2ZT9gLSR7TX0ke25lfSR7YmUuc2xpY2UoMSl9YDpjLl92YWx1ZT4wJiZmLmZvcmNlU2lnbj9gKyR7TX0ke25l''@;'; put 'put ''fSR7YmUuc2xpY2UoMSl9YDpuZStNK2JlKSwoIVp8fCJwb3N0Zml4Ij09PVopJiYoTT0hZi5zcGFjZVNlcGFyYXRlZEFiYnJldmlhdGlvbiYmRD8iIjpNLGJlPWJlK00rbmUpLGJlfShjLGw9a18obCxjMy5jdXJyZW50Q3VycmVuY3lEZWZhdWx0Rm9ybWF0KCkpLGMzKTtjYXNlInBlcmNlbnQi''@;'; put 'put ''OnJldHVybiBmdW5jdGlvbiBjb3QoYyxsLGEsZCl7bGV0IGg9bC5wcmVmaXhTeW1ib2wsZj1uVCh7aW5zdGFuY2U6ZCgxMDAqYy5fdmFsdWUpLHByb3ZpZGVkRm9ybWF0Omwsc3RhdGU6YX0pLHY9T2JqZWN0LmFzc2lnbih7fSx0VCxsKTtyZXR1cm4gaD9gJSR7di5zcGFjZVNlcGFyYXRlZD8i''@;'; put 'put ''ICI6IiJ9JHtmfWA6YCR7Zn0ke3Yuc3BhY2VTZXBhcmF0ZWQ/IiAiOiIifSVgfShjLGw9a18obCxjMy5jdXJyZW50UGVyY2VudGFnZURlZmF1bHRGb3JtYXQoKSksYzMsYSk7Y2FzZSJieXRlIjpyZXR1cm4gZnVuY3Rpb24gYW90KGMsbCxhLGQpe2xldCBoPWwuYmFzZXx8ImJpbmFyeSIsZj1P''@;'; put 'put ''YmplY3QuYXNzaWduKHt9LHRULGwpO2NvbnN0e2JpbmFyeVN1ZmZpeGVzOnYsZGVjaW1hbFN1ZmZpeGVzOk19PWEuY3VycmVudEJ5dGVzKCk7bGV0IFo9e2dlbmVyYWw6e3NjYWxlOjEwMjQsc3VmZml4ZXM6TXx8QlAsbWFya2VyOiJiZCJ9LGJpbmFyeTp7c2NhbGU6MTAyNCxzdWZmaXhlczp2''@;'; put 'put ''fHxZcGUsbWFya2VyOiJiIn0sZGVjaW1hbDp7c2NhbGU6MWUzLHN1ZmZpeGVzOk18fEJQLG1hcmtlcjoiZCJ9fVtoXSx7dmFsdWU6bmUsc3VmZml4OmNlfT1qUChjLl92YWx1ZSxaLnN1ZmZpeGVzLFouc2NhbGUpO3JldHVybmAke25UKHtpbnN0YW5jZTpkKG5lKSxwcm92aWRlZEZvcm1hdDps''@;'; put 'put ''LHN0YXRlOmEsZGVmYXVsdHM6YS5jdXJyZW50Qnl0ZURlZmF1bHRGb3JtYXQoKX0pfSR7Zi5zcGFjZVNlcGFyYXRlZD8iICI6IiJ9JHtjZX1gfShjLGw9a18obCxjMy5jdXJyZW50Qnl0ZURlZmF1bHRGb3JtYXQoKSksYzMsYSk7Y2FzZSJ0aW1lIjpyZXR1cm4gbD1rXyhsLGMzLmN1cnJlbnRU''@;'; put 'put ''aW1lRGVmYXVsdEZvcm1hdCgpKSxmdW5jdGlvbiBsb3QoYyl7bGV0IGw9TWF0aC5mbG9vcihjLl92YWx1ZS82MC82MCksYT1NYXRoLmZsb29yKChjLl92YWx1ZS02MCpsKjYwKS82MCksZD1NYXRoLnJvdW5kKGMuX3ZhbHVlLTYwKmwqNjAtNjAqYSk7cmV0dXJuYCR7bH06JHthPDEwPyIwIjoi''@;'; put 'put ''In0ke2F9OiR7ZDwxMD8iMCI6IiJ9JHtkfWB9KGMpO2Nhc2Uib3JkaW5hbCI6cmV0dXJuIGZ1bmN0aW9uIHNvdChjLGwsYSl7bGV0IGQ9YS5jdXJyZW50T3JkaW5hbCgpLGg9T2JqZWN0LmFzc2lnbih7fSx0VCxsKSxmPW5UKHtpbnN0YW5jZTpjLHByb3ZpZGVkRm9ybWF0Omwsc3RhdGU6YX0p''@;'; put 'put ''LHY9ZChjLl92YWx1ZSk7cmV0dXJuYCR7Zn0ke2guc3BhY2VTZXBhcmF0ZWQ/IiAiOiIifSR7dn1gfShjLGw9a18obCxjMy5jdXJyZW50T3JkaW5hbERlZmF1bHRGb3JtYXQoKSksYzMpO2RlZmF1bHQ6cmV0dXJuIG5UKHtpbnN0YW5jZTpjLHByb3ZpZGVkRm9ybWF0OmwsbnVtYnJvOmF9KX19''@;'; put 'put ''KGMsbCxhKTtyZXR1cm4gdj1mdW5jdGlvbiB3b3QoYyxsKXtyZXR1cm4gbCtjfSh2LGgpLHY9ZnVuY3Rpb24gQ290KGMsbCl7cmV0dXJuIGMrbH0odixmKSx2fSguLi5sLGMpLGdldEJ5dGVVbml0OiguLi5sKT0+ZnVuY3Rpb24gb290KGMpe2xldCBsPVdYLmdlbmVyYWw7cmV0dXJuIGpQKGMu''@;'; put 'put ''X3ZhbHVlLGwuc3VmZml4ZXMsbC5zY2FsZSkuc3VmZml4fSguLi5sLGMpLGdldEJpbmFyeUJ5dGVVbml0OiguLi5sKT0+ZnVuY3Rpb24gaW90KGMpe2xldCBsPVdYLmJpbmFyeTtyZXR1cm4galAoYy5fdmFsdWUsbC5zdWZmaXhlcyxsLnNjYWxlKS5zdWZmaXh9KC4uLmwsYyksZ2V0RGVjaW1h''@;'; put 'put ''bEJ5dGVVbml0OiguLi5sKT0+ZnVuY3Rpb24gcm90KGMpe2xldCBsPVdYLmRlY2ltYWw7cmV0dXJuIGpQKGMuX3ZhbHVlLGwuc3VmZml4ZXMsbC5zY2FsZSkuc3VmZml4fSguLi5sLGMpLGZvcm1hdE9yRGVmYXVsdDprX30pKShsdSksaTk9KGM9Pih7YWRkOihsLGEpPT5mdW5jdGlvbiBNb3Qo''@;'; put 'put ''YyxsLGEpe2xldCBkPW5ldyBFZyhjLl92YWx1ZSksaD1sO3JldHVybiBhLmlzTnVtYnJvKGwpJiYoaD1sLl92YWx1ZSksaD1uZXcgRWcoaCksYy5fdmFsdWU9ZC5wbHVzKGgpLnRvTnVtYmVyKCksY30obCxhLGMpLHN1YnRyYWN0OihsLGEpPT5HcGUobCxhLGMpLG11bHRpcGx5OihsLGEpPT5m''@;'; put 'put ''dW5jdGlvbiB4b3QoYyxsLGEpe2xldCBkPW5ldyBFZyhjLl92YWx1ZSksaD1sO3JldHVybiBhLmlzTnVtYnJvKGwpJiYoaD1sLl92YWx1ZSksaD1uZXcgRWcoaCksYy5fdmFsdWU9ZC50aW1lcyhoKS50b051bWJlcigpLGN9KGwsYSxjKSxkaXZpZGU6KGwsYSk9PmZ1bmN0aW9uIEVvdChjLGws''@;'; put 'put ''YSl7bGV0IGQ9bmV3IEVnKGMuX3ZhbHVlKSxoPWw7cmV0dXJuIGEuaXNOdW1icm8obCkmJihoPWwuX3ZhbHVlKSxoPW5ldyBFZyhoKSxjLl92YWx1ZT1kLmRpdmlkZWRCeShoKS50b051bWJlcigpLGN9KGwsYSxjKSxzZXQ6KGwsYSk9PmZ1bmN0aW9uIFRvdChjLGwsYSl7bGV0IGQ9bDtyZXR1''@;'; put 'put ''cm4gYS5pc051bWJybyhsKSYmKGQ9bC5fdmFsdWUpLGMuX3ZhbHVlPWQsY30obCxhLGMpLGRpZmZlcmVuY2U6KGwsYSk9PmZ1bmN0aW9uIEFvdChjLGwsYSl7bGV0IGQ9YShjLl92YWx1ZSk7cmV0dXJuIEdwZShkLGwsYSksTWF0aC5hYnMoZC5fdmFsdWUpfShsLGEsYyksQmlnTnVtYmVyOkVn''@;'; put 'put ''fSkpKGx1KTtjb25zdCBPb3Q9elg7Y2xhc3MgJHBle2NvbnN0cnVjdG9yKGwpe3RoaXMuX3ZhbHVlPWx9Y2xvbmUoKXtyZXR1cm4gbHUodGhpcy5fdmFsdWUpfWZvcm1hdChsPXt9KXtyZXR1cm4gcjkuZm9ybWF0KHRoaXMsbCl9Zm9ybWF0Q3VycmVuY3kobCl7cmV0dXJuInN0cmluZyI9PXR5''@;'; put 'put ''cGVvZiBsJiYobD1Pb3QucGFyc2VGb3JtYXQobCkpLChsPXI5LmZvcm1hdE9yRGVmYXVsdChsLE9wLmN1cnJlbnRDdXJyZW5jeURlZmF1bHRGb3JtYXQoKSkpLm91dHB1dD0iY3VycmVuY3kiLHI5LmZvcm1hdCh0aGlzLGwpfWZvcm1hdFRpbWUobD17fSl7cmV0dXJuIGwub3V0cHV0PSJ0aW1l''@;'; put 'put ''IixyOS5mb3JtYXQodGhpcyxsKX1iaW5hcnlCeXRlVW5pdHMoKXtyZXR1cm4gcjkuZ2V0QmluYXJ5Qnl0ZVVuaXQodGhpcyl9ZGVjaW1hbEJ5dGVVbml0cygpe3JldHVybiByOS5nZXREZWNpbWFsQnl0ZVVuaXQodGhpcyl9Ynl0ZVVuaXRzKCl7cmV0dXJuIHI5LmdldEJ5dGVVbml0KHRoaXMp''@;'; put 'put ''fWRpZmZlcmVuY2UobCl7cmV0dXJuIGk5LmRpZmZlcmVuY2UodGhpcyxsKX1hZGQobCl7cmV0dXJuIGk5LmFkZCh0aGlzLGwpfXN1YnRyYWN0KGwpe3JldHVybiBpOS5zdWJ0cmFjdCh0aGlzLGwpfW11bHRpcGx5KGwpe3JldHVybiBpOS5tdWx0aXBseSh0aGlzLGwpfWRpdmlkZShsKXtyZXR1''@;'; put 'put ''cm4gaTkuZGl2aWRlKHRoaXMsbCl9c2V0KGwpe3JldHVybiBpOS5zZXQodGhpcyxLcGUobCkpfXZhbHVlKCl7cmV0dXJuIHRoaXMuX3ZhbHVlfXZhbHVlT2YoKXtyZXR1cm4gdGhpcy5fdmFsdWV9fWZ1bmN0aW9uIEtwZShjKXtsZXQgbD1jO3JldHVybiBsdS5pc051bWJybyhjKT9sPWMuX3Zh''@;'; put 'put ''bHVlOiJzdHJpbmciPT10eXBlb2YgYz9sPWx1LnVuZm9ybWF0KGMpOmlzTmFOKGMpJiYobD1OYU4pLGx9ZnVuY3Rpb24gbHUoYyl7cmV0dXJuIG5ldyAkcGUoS3BlKGMpKX1sdS52ZXJzaW9uPSIyLjUuMCIsbHUuaXNOdW1icm89ZnVuY3Rpb24oYyl7cmV0dXJuIGMgaW5zdGFuY2VvZiAkcGV9''@;'; put 'put ''LGx1Lmxhbmd1YWdlPU9wLmN1cnJlbnRMYW5ndWFnZSxsdS5yZWdpc3Rlckxhbmd1YWdlPU9wLnJlZ2lzdGVyTGFuZ3VhZ2UsbHUuc2V0TGFuZ3VhZ2U9T3Auc2V0TGFuZ3VhZ2UsbHUubGFuZ3VhZ2VzPU9wLmxhbmd1YWdlcyxsdS5sYW5ndWFnZURhdGE9T3AubGFuZ3VhZ2VEYXRhLGx1Lnpl''@;'; put 'put ''cm9Gb3JtYXQ9T3Auc2V0WmVyb0Zvcm1hdCxsdS5kZWZhdWx0Rm9ybWF0PU9wLmN1cnJlbnREZWZhdWx0cyxsdS5zZXREZWZhdWx0cz1PcC5zZXREZWZhdWx0cyxsdS5kZWZhdWx0Q3VycmVuY3lGb3JtYXQ9T3AuY3VycmVudEN1cnJlbmN5RGVmYXVsdEZvcm1hdCxsdS52YWxpZGF0ZT1Jb3Qu''@;'; put 'put ''dmFsaWRhdGUsbHUubG9hZExhbmd1YWdlc0luTm9kZT1Sb3QubG9hZExhbmd1YWdlc0luTm9kZSxsdS51bmZvcm1hdD1Mb3QudW5mb3JtYXQsbHUuQmlnTnVtYmVyPWk5LkJpZ051bWJlcjt2YXIgWW09SWl0KGx1KTtmdW5jdGlvbiBxcGUoYyxsKXtpZih2MShjKSl7Y29uc3QgYT1sLm51bWVy''@;'; put 'put ''aWNGb3JtYXQsZD1hJiZhLmN1bHR1cmV8fCItIixoPWEmJmEucGF0dGVybjtpZih0eXBlb2YgZDwidSImJiFZbS5sYW5ndWFnZXMoKVtkXSl7Y29uc3QgZj1kLnJlcGxhY2UoIi0iLCIiKSx2PVltLmFsbExhbmd1YWdlcz9ZbS5hbGxMYW5ndWFnZXNbZF06WW1bZl07diYmWW0ucmVnaXN0ZXJM''@;'; put 'put ''YW5ndWFnZSh2KX1ZbS5zZXRMYW5ndWFnZShkKSxjPVltKGMpLmZvcm1hdChofHwiMCIpfXJldHVybiBjfWZ1bmN0aW9uIFlYKGMsbCxhLGQsaCxmLHYpe2xldCBNPWY7aWYodjEoTSkpe2xldCBaPVtdO2lmKEFycmF5LmlzQXJyYXkodi5jbGFzc05hbWUpKVo9di5jbGFzc05hbWU7ZWxzZXt2''@;'; put 'put ''YXIgRDtjb25zdCBuZT1udWxsIT09KEQ9di5jbGFzc05hbWUpJiZ2b2lkIDAhPT1EP0Q6IiI7bmUubGVuZ3RoJiYoWj1uZS5zcGxpdCgiICIpKX1NPXFwZShNLHYpLFouaW5kZXhPZigiaHRMZWZ0Iik8MCYmWi5pbmRleE9mKCJodENlbnRlciIpPDAmJlouaW5kZXhPZigiaHRSaWdodCIpPDAm''@;'; put 'put ''JlouaW5kZXhPZigiaHRKdXN0aWZ5Iik8MCYmWi5wdXNoKCJodFJpZ2h0IiksWi5pbmRleE9mKCJodE51bWVyaWMiKTwwJiZaLnB1c2goImh0TnVtZXJpYyIpLHYuY2xhc3NOYW1lPVouam9pbigiICIpLGwuZGlyPSJsdHIifU1nKGMsbCxhLGQsaCxNLHYpfWZ1bmN0aW9uIEdYKGMsbCxhLGQs''@;'; put 'put ''aCxmLHYpe01nLmFwcGx5KHRoaXMsW2MsbCxhLGQsaCxmLHZdKTtjb25zdCBEPXYuaGFzaFN5bWJvbHx8IioiO2xldCBaPSIiOyRvKCh2Lmhhc2hMZW5ndGh8fGwuaW5uZXJIVE1MLmxlbmd0aCktMSwoKT0+e1orPUR9KSxONyhsLFopfWZ1bmN0aW9uICRYKGMsbCxhLGQsaCxmLHYpe01nLmFw''@;'; put 'put ''cGx5KHRoaXMsW2MsbCxhLGQsaCxmLHZdKX1mdW5jdGlvbiBLWChjLGwsYSxkLGgsZix2KXtNZy5hcHBseSh0aGlzLFtjLGwsYSxkLGgsZix2XSksbC5kaXI9Imx0ciJ9ZnVuY3Rpb24gclQoYyxsKXtsZXQgYT1jO251bGw9PWEmJihhPSIiKSx0aGlzLmFsbG93RW1wdHkmJiIiPT09YT9sKCEw''@;'; put 'put ''KTp0aGlzLnN0cmljdCYmdGhpcy5zb3VyY2U/ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuc291cmNlP3RoaXMuc291cmNlKGEsWHBlKGEsbCkpOlhwZShhLGwpKHRoaXMuc291cmNlKTpsKCEwKX1mdW5jdGlvbiBYcGUoYyxsKXtjb25zdCBhPWM7cmV0dXJuIGZ1bmN0aW9uKGQpe2xldCBoPSEx''@;'; put 'put ''O2ZvcihsZXQgZj0wLHY9ZC5sZW5ndGg7Zjx2O2YrKylpZihhPT09ZFtmXSl7aD0hMDticmVha31sKGgpfX1mdW5jdGlvbiBKcGUoYyl7Y29uc3QgbD1uZXcgRGF0ZShjKTtyZXR1cm4gaXNOYU4obmV3IERhdGUoYCR7Y31UMDA6MDBgKS5nZXREYXRlKCkpP2w6bmV3IERhdGUobC5nZXRUaW1l''@;'; put 'put ''KCkrNmU0KmwuZ2V0VGltZXpvbmVPZmZzZXQoKSl9ZnVuY3Rpb24gVVAoYyxsKXtjb25zdCBhPSQyZShUcGUsdGhpcy5pbnN0YW5jZSk7bGV0IGQ9YyxoPSEwO251bGw9PWQmJihkPSIiKTtsZXQgZj1MYShkLHRoaXMuZGF0ZUZvcm1hdHx8YS5kZWZhdWx0RGF0ZUZvcm1hdCwhMCkuaXNWYWxp''@;'; put 'put ''ZCgpLHY9TGEobmV3IERhdGUoZCkpLmlzVmFsaWQoKXx8ZjtpZih0aGlzLmFsbG93RW1wdHkmJiIiPT09ZCYmKHY9ITAsZj0hMCksdnx8KGg9ITEpLCF2JiZmJiYoaD0hMCksdiYmIWYpaWYoITA9PT10aGlzLmNvcnJlY3RGb3JtYXQpe2NvbnN0IE09ZnVuY3Rpb24gVW90KGMsbCl7Y29uc3Qg''@;'; put 'put ''YT1MYShKcGUoYykpLGQ9TGEoYyxsKSxoPWMuc2VhcmNoKC9bQS1aYS16XS9nKT4tMTtsZXQgZjtyZXR1cm4gZj1hLmlzVmFsaWQoKSYmYS5mb3JtYXQoIngiKT09PWQuZm9ybWF0KCJ4Iil8fCFkLmlzVmFsaWQoKXx8aD9hOmQsZi5mb3JtYXQobCl9KGQsdGhpcy5kYXRlRm9ybWF0KTt0aGlz''@;'; put 'put ''Lmluc3RhbmNlLnNldERhdGFBdENlbGwodGhpcy52aXN1YWxSb3csdGhpcy52aXN1YWxDb2wsTSwiZGF0ZVZhbGlkYXRvciIpLGg9ITB9ZWxzZSBoPSExO2woaCl9ZnVuY3Rpb24gcVgoYyxsKXtyVC5hcHBseSh0aGlzLFtjLGxdKX1mdW5jdGlvbiBYWChjLGwpe2xldCBhPWM7bnVsbD09YSYm''@;'; put 'put ''KGE9IiIpLGwoISghdGhpcy5hbGxvd0VtcHR5fHwiIiE9PWEpfHwiIiE9PWEmJnYxKGMpKX1ZWC5SRU5ERVJFUl9UWVBFPSJudW1lcmljIixHWC5SRU5ERVJFUl9UWVBFPSJwYXNzd29yZCIsJFguUkVOREVSRVJfVFlQRT0ic2VsZWN0IixLWC5SRU5ERVJFUl9UWVBFPSJ0aW1lIixyVC5WQUxJ''@;'; put 'put ''REFUT1JfVFlQRT0iYXV0b2NvbXBsZXRlIixVUC5WQUxJREFUT1JfVFlQRT0iZGF0ZSIscVguVkFMSURBVE9SX1RZUEU9ImRyb3Bkb3duIixYWC5WQUxJREFUT1JfVFlQRT0ibnVtZXJpYyI7Y29uc3QgWW90PVsiWVlZWS1NTS1ERFRISDptbTpzcy5TU1NaIiwiWCIsIngiXTtmdW5jdGlvbiBa''@;'; put 'put ''UChjLGwpe2NvbnN0IGE9dGhpcy50aW1lRm9ybWF0fHwiaDptbTpzcyBhIjtsZXQgZD0hMCxoPWM7bnVsbD09PWgmJihoPSIiKSxoPS9eXGR7Myx9JC8udGVzdChoKT9wYXJzZUludChoLDEwKTpoO2NvbnN0IGY9L15cZHsxLDJ9JC8udGVzdChoKTtmJiYoaCs9IjowMCIpO2NvbnN0IHY9TGEo''@;'; put 'put ''aCxZb3QsITApLmlzVmFsaWQoKT9MYShoKTpMYShoLGEpO2xldCBNPXYuaXNWYWxpZCgpLEQ9TGEoaCxhLCEwKS5pc1ZhbGlkKCkmJiFmO2lmKHRoaXMuYWxsb3dFbXB0eSYmIiI9PT1oJiYoTT0hMCxEPSEwKSxNfHwoZD0hMSksIU0mJkQmJihkPSEwKSxNJiYhRClpZighMD09PXRoaXMuY29y''@;'; put 'put ''cmVjdEZvcm1hdCl7Y29uc3QgWj12LmZvcm1hdChhKTt0aGlzLmluc3RhbmNlLnNldERhdGFBdENlbGwodGhpcy52aXN1YWxSb3csdGhpcy52aXN1YWxDb2wsWiwidGltZVZhbGlkYXRvciIpLGQ9ITB9ZWxzZSBkPSExO2woZCl9WlAuVkFMSURBVE9SX1RZUEU9InRpbWUiO2NvbnN0IEtvdD17''@;'; put 'put ''Q0VMTF9UWVBFOiJhdXRvY29tcGxldGUiLGVkaXRvcjpNWCxyZW5kZXJlcjpFXyx2YWxpZGF0b3I6clR9LHFvdD17Q0VMTF9UWVBFOiJjaGVja2JveCIsZWRpdG9yOndwZSxyZW5kZXJlcjpQWH07ZnVuY3Rpb24gUXBlKGMsbCxhLGQsaCxmLHYpe0VfLmFwcGx5KHRoaXMsW2MsbCxhLGQsaCxm''@;'; put 'put ''LHZdKX1RcGUuUkVOREVSRVJfVFlQRT0iZGF0ZSI7Y29uc3QgSm90PXtDRUxMX1RZUEU6ImRhdGUiLGVkaXRvcjprcGUscmVuZGVyZXI6UXBlLHZhbGlkYXRvcjpVUH0sUW90PXtDRUxMX1RZUEU6ImRyb3Bkb3duIixlZGl0b3I6RHBlLHJlbmRlcmVyOk9YLHZhbGlkYXRvcjpxWCxmaWx0ZXI6''@;'; put 'put ''ITEsc3RyaWN0OiEwfSxlYXQ9e0NFTExfVFlQRToiaGFuZHNvbnRhYmxlIixlZGl0b3I6X1gscmVuZGVyZXI6SFh9LHRhdD17Q0VMTF9UWVBFOiJudW1lcmljIixlZGl0b3I6SXBlLHJlbmRlcmVyOllYLHZhbGlkYXRvcjpYWCxkYXRhVHlwZToibnVtYmVyIn0sbmF0PXtDRUxMX1RZUEU6InBh''@;'; put 'put ''c3N3b3JkIixlZGl0b3I6UnBlLHJlbmRlcmVyOkdYLGNvcHlhYmxlOiExfSxyYXQ9e0NFTExfVFlQRToic2VsZWN0IixlZGl0b3I6T3BlLHJlbmRlcmVyOiRYfSxpYXQ9e0NFTExfVFlQRToidGltZSIsZWRpdG9yOlBwZSxyZW5kZXJlcjpLWCx2YWxpZGF0b3I6WlB9O2Z1bmN0aW9uIGU0ZShj''@;'; put 'put ''LGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gRF8oYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGxhdChjKXt2YXIgbD1mdW5jdGlvbiBjYXQo''@;'; put 'put ''YyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJA''@;'; put 'put ''QHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7''@;'; put 'put ''dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIElfKGMsbCl7cmV0dXJuIGMuZ2V0KHQ0ZShjLGwpKX1mdW5jdGlvbiB0NGUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVy''@;'; put 'put ''biBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IG40ZT1uZXcgTWFwKFtbInBsdWdpbiIsZnVuY3Rpb24genFlKGMpe3JldHVybiEhRUUoYyl9XSxbImNlbGwtdHlw''@;'; put 'put ''ZSIsajNlXSxbImVkaXRvciIsRzJlXSxbInJlbmRlcmVyIixvZmVdLFsidmFsaWRhdG9yIixhZmVdXSkscjRlPVN5bWJvbCgibWFpblNldHRpbmciKSxXUD1bXTtsZXQgbzk9bnVsbDt2YXIgYTk9bmV3IFdlYWtNYXAsaTRlPW5ldyBXZWFrU2V0O2NsYXNzIEZze3N0YXRpYyBnZXQgUExVR0lO''@;'; put 'put ''X0tFWSgpe3JldHVybiJiYXNlIn1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVyblt0aGlzLlBMVUdJTl9LRVldfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybnt9fWNvbnN0cnVjdG9yKGwpeyhmdW5jdGlvbiBhYXQoYyxsKXtlNGUoYyxsKSxsLmFkZChjKX0pKHRo''@;'; put 'put ''aXMsaTRlKSxEXyh0aGlzLCJldmVudE1hbmFnZXIiLG5ldyBMMih0aGlzKSksRF8odGhpcywicGx1Z2luTmFtZSIsbnVsbCksRF8odGhpcywicGx1Z2luc0luaXRpYWxpemVkQ2FsbGJhY2tzIixbXSksRF8odGhpcywiaXNQbHVnaW5zUmVhZHkiLCExKSxEXyh0aGlzLCJlbmFibGVkIiwhMSks''@;'; put 'put ''RF8odGhpcywiaW5pdGlhbGl6ZWQiLCExKSxmdW5jdGlvbiBzYXQoYyxsLGEpe2U0ZShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsYTkse30pLENwKHRoaXMsImhvdCIsbCx7d3JpdGFibGU6ITF9KSxvOT1udWxsLHRoaXMuaG90LmFkZEhvb2soImFmdGVyUGx1Z2luc0luaXRpYWxpemVkIiwoKT0+''@;'; put 'put ''dGhpcy5vbkFmdGVyUGx1Z2luc0luaXRpYWxpemVkKCkpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyVXBkYXRlU2V0dGluZ3MiLGE9PnRoaXMub25VcGRhdGVTZXR0aW5ncyhhKSksdGhpcy5ob3QuYWRkSG9vaygiYmVmb3JlSW5pdCIsKCk9PnRoaXMuaW5pdCgpKX1pbml0KCl7dGhpcy5wbHVn''@;'; put 'put ''aW5OYW1lPXRoaXMuaG90LmdldFBsdWdpbk5hbWUodGhpcyk7Y29uc3QgbD10aGlzLmNvbnN0cnVjdG9yLlBMVUdJTl9ERVBTLGE9QXJyYXkuaXNBcnJheShsKT9sOltdO2lmKGEubGVuZ3RoPjApe2NvbnN0IGg9W107aWYoYS5mb3JFYWNoKGY9Pntjb25zdFt2LE1dPWYuc3BsaXQoIjoiKTtp''@;'; put 'put ''ZighbjRlLmhhcyh2KSl0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gcGx1Z2luIGRlcGVuZGVuY3kgdHlwZSAiJHt2fSIgd2FzIGZvdW5kLmApO240ZS5nZXQodikoTSl8fGgucHVzaChgIC0gJHtNfSAoJHt2fSlgKX0pLGgubGVuZ3RoPjApe2NvbnN0IGY9W2BUaGUgJHt0aGlzLnBsdWdpbk5h''@;'; put 'put ''bWV9IHBsdWdpbiByZXF1aXJlcyB0aGUgZm9sbG93aW5nIG1vZHVsZXM6XG5gLGAke2guam9pbigiXG4iKX1cbmBdLmpvaW4oIiIpO1dQLnB1c2goZil9fWlmKG85fHwobzk9WiQoKSksbzkuaW5kZXhPZih0aGlzLnBsdWdpbk5hbWUpPj0wJiZvOS5zcGxpY2UobzkuaW5kZXhPZih0aGlzLnBs''@;'; put 'put ''dWdpbk5hbWUpLDEpLHRoaXMuaG90LmFkZEhvb2tPbmNlKCJhZnRlclBsdWdpbnNJbml0aWFsaXplZCIsKCk9Pnt0aGlzLmlzRW5hYmxlZCYmdGhpcy5pc0VuYWJsZWQoKSYmdGhpcy5lbmFibGVQbHVnaW4oKX0pLDA9PT1vOS5sZW5ndGgpe2lmKFdQLmxlbmd0aD4wKXtjb25zdCBoPVtgJHtX''@;'; put 'put ''UC5qb2luKCJcbiIpfVxuYCwiWW91IGhhdmUgdG8gaW1wb3J0IGFuZCByZWdpc3RlciB0aGVtIG1hbnVhbGx5LiJdLmpvaW4oIiIpO3Rocm93IFdQLmxlbmd0aD0wLG5ldyBFcnJvcihoKX10aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJQbHVnaW5zSW5pdGlhbGl6ZWQiKX10aGlzLmluaXRpYWxp''@;'; put 'put ''emVkPSEwfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZD0hMH1kaXNhYmxlUGx1Z2luKCl7dmFyIGw7bnVsbD09PShsPXRoaXMuZXZlbnRNYW5hZ2VyKXx8dm9pZCAwPT09bHx8bC5jbGVhcigpLHRoaXMuY2xlYXJIb29rcygpLHRoaXMuZW5hYmxlZD0hMX1nZXRTZXR0aW5nKGwpe2NvbnN0''@;'; put 'put ''IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt0aGlzLmNvbnN0cnVjdG9yLlBMVUdJTl9LRVldO2lmKHZvaWQgMD09PWwpcmV0dXJuIGE7Y29uc3QgZD10aGlzLmNvbnN0cnVjdG9yLkRFRkFVTFRfU0VUVElOR1M7dmFyIGgsZjtyZXR1cm4oQXJyYXkuaXNBcnJheShhKXx8S2EoYSkpJiZkW3I0''@;'; put 'put ''ZV09PT1sP0FycmF5LmlzQXJyYXkoYSk/YTpudWxsIT09KGg9YVtsXSkmJnZvaWQgMCE9PWg/aDpkW2xdOkthKGEpJiZudWxsIT09KGY9YVtsXSkmJnZvaWQgMCE9PWY/ZjpkW2xdfWFkZEhvb2sobCxhLGQpe0lfKGE5LHRoaXMpW2xdPUlfKGE5LHRoaXMpW2xdfHxbXTtjb25zdCBoPUlfKGE5''@;'; put 'put ''LHRoaXMpW2xdO3RoaXMuaG90LmFkZEhvb2sobCxhLGQpLGgucHVzaChhKSxJXyhhOSx0aGlzKVtsXT1ofXJlbW92ZUhvb2tzKGwpe1luKElfKGE5LHRoaXMpW2xdfHxbXSxhPT57dGhpcy5ob3QucmVtb3ZlSG9vayhsLGEpfSl9Y2xlYXJIb29rcygpe2NvbnN0IGw9SV8oYTksdGhpcyk7cWEo''@;'; put 'put ''bCwoYSxkKT0+dGhpcy5yZW1vdmVIb29rcyhkKSksbC5sZW5ndGg9MH1jYWxsT25QbHVnaW5zUmVhZHkobCl7dGhpcy5pc1BsdWdpbnNSZWFkeT9sKCk6dGhpcy5wbHVnaW5zSW5pdGlhbGl6ZWRDYWxsYmFja3MucHVzaChsKX1vbkFmdGVyUGx1Z2luc0luaXRpYWxpemVkKCl7WW4odGhpcy5w''@;'; put 'put ''bHVnaW5zSW5pdGlhbGl6ZWRDYWxsYmFja3MsbD0+bCgpKSx0aGlzLnBsdWdpbnNJbml0aWFsaXplZENhbGxiYWNrcy5sZW5ndGg9MCx0aGlzLmlzUGx1Z2luc1JlYWR5PSEwfW9uVXBkYXRlU2V0dGluZ3MobCl7Y29uc3QgYT10NGUoaTRlLHRoaXMsZGF0KS5jYWxsKHRoaXMsbCk7dGhpcy5p''@;'; put 'put ''c0VuYWJsZWQmJih0aGlzLmVuYWJsZWQmJiF0aGlzLmlzRW5hYmxlZCgpJiZ0aGlzLmRpc2FibGVQbHVnaW4oKSwhdGhpcy5lbmFibGVkJiZ0aGlzLmlzRW5hYmxlZCgpJiZ0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlZCYmdGhpcy5pc0VuYWJsZWQoKSYmYSYmdGhpcy51cGRhdGVQ''@;'; put 'put ''bHVnaW4obCkpfXVwZGF0ZVBsdWdpbigpe31kZXN0cm95KCl7dmFyIGw7bnVsbD09PShsPXRoaXMuZXZlbnRNYW5hZ2VyKXx8dm9pZCAwPT09bHx8bC5kZXN0cm95KCksdGhpcy5jbGVhckhvb2tzKCkscWEodGhpcywoYSxkKT0+eyJob3QiIT09ZCYmKHRoaXNbZF09bnVsbCl9KSxkZWxldGUg''@;'; put 'put ''dGhpcy50LGRlbGV0ZSB0aGlzLmhvdH19ZnVuY3Rpb24gZGF0KGMpe2lmKCFjKXJldHVybiExO2NvbnN0IGw9dGhpcy5jb25zdHJ1Y3Rvci5TRVRUSU5HX0tFWVM7aWYoImJvb2xlYW4iPT10eXBlb2YgbClyZXR1cm4gbDtmb3IobGV0IGE9MDthPGwubGVuZ3RoO2ErKylpZih2b2lkIDAhPT1j''@;'; put 'put ''W2xbYV1dKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHM5KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBoYXQoYyl7dmFyIGw9ZnVuY3Rpb24gZmF0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAw''@;'; put 'put ''IT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1i''@;'; put 'put ''ZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBKWD1jbGFzcyBw''@;'; put 'put ''YXR7Y29uc3RydWN0b3IobCl7czkodGhpcywiaG90IixudWxsKSxzOSh0aGlzLCJjb250YWluZXIiLG51bGwpLHM5KHRoaXMsImluamVjdGVkIiwhMSksczkodGhpcywicm93cyIsW10pLHM5KHRoaXMsImNvbHVtbnMiLFtdKSxzOSh0aGlzLCJzYW1wbGVzIixudWxsKSxzOSh0aGlzLCJzZXR0''@;'; put 'put ''aW5ncyIse3VzZUhlYWRlcnM6ITB9KSx0aGlzLmhvdD1sfWFkZFJvdyhsLGEpe2lmKHRoaXMuY29sdW1ucy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJEb2Vzbid0IHN1cHBvcnQgbXVsdGktZGltZW5zaW9uYWwgdGFibGUiKTt0aGlzLnJvd3MubGVuZ3RofHwodGhpcy5jb250YWluZXI9dGhp''@;'; put 'put ''cy5jcmVhdGVDb250YWluZXIodGhpcy5ob3Qucm9vdEVsZW1lbnQuY2xhc3NOYW1lKSk7Y29uc3QgZD17cm93Omx9O3RoaXMucm93cy5wdXNoKGQpLHRoaXMuc2FtcGxlcz1hLHRoaXMudGFibGU9dGhpcy5jcmVhdGVUYWJsZSh0aGlzLmhvdC50YWJsZS5jbGFzc05hbWUpLHRoaXMudGFibGUu''@;'; put 'put ''Y29sR3JvdXAuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDb2xHcm91cHNDb2wobCkpLHRoaXMudGFibGUudHIuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVSb3cobCkpLHRoaXMuY29udGFpbmVyLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnRhYmxlLmZyYWdtZW50KSxkLnRhYmxlPXRoaXMu''@;'; put 'put ''dGFibGUudGFibGV9YWRkQ29sdW1uSGVhZGVyc1JvdyhsKXtpZihudWxsIT10aGlzLmhvdC5nZXRDb2xIZWFkZXIoMCkpe2NvbnN0IGQ9e3JvdzotMX07dGhpcy5yb3dzLnB1c2goZCksdGhpcy5jb250YWluZXI9dGhpcy5jcmVhdGVDb250YWluZXIodGhpcy5ob3Qucm9vdEVsZW1lbnQuY2xh''@;'; put 'put ''c3NOYW1lKSx0aGlzLnNhbXBsZXM9bCx0aGlzLnRhYmxlPXRoaXMuY3JlYXRlVGFibGUodGhpcy5ob3QudGFibGUuY2xhc3NOYW1lKSx0aGlzLnRhYmxlLmNvbEdyb3VwLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ29sR3JvdXBzQ29sKCkpLHRoaXMuYXBwZW5kQ29sdW1uSGVhZGVyc1Jvdygp''@;'; put 'put ''LHRoaXMuY29udGFpbmVyLmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLnRhYmxlLmZyYWdtZW50KSxkLnRhYmxlPXRoaXMudGFibGUudGFibGV9fWFkZENvbHVtbihsLGEpe2lmKHRoaXMucm93cy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJEb2Vzbid0IHN1cHBvcnQgbXVsdGktZGltZW5z''@;'; put 'put ''aW9uYWwgdGFibGUiKTt0aGlzLmNvbHVtbnMubGVuZ3RofHwodGhpcy5jb250YWluZXI9dGhpcy5jcmVhdGVDb250YWluZXIodGhpcy5ob3Qucm9vdEVsZW1lbnQuY2xhc3NOYW1lKSk7Y29uc3QgZD17Y29sOmx9O3RoaXMuY29sdW1ucy5wdXNoKGQpLHRoaXMuc2FtcGxlcz1hLHRoaXMudGFi''@;'; put 'put ''bGU9dGhpcy5jcmVhdGVUYWJsZSh0aGlzLmhvdC50YWJsZS5jbGFzc05hbWUpLHRoaXMuZ2V0U2V0dGluZygidXNlSGVhZGVycyIpJiZudWxsIT09dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKGwpJiZ0aGlzLmhvdC52aWV3LmFwcGVuZENvbEhlYWRlcihsLHRoaXMudGFibGUudGgsdm9pZCAwLC0x''@;'; put 'put ''KSx0aGlzLnRhYmxlLnRCb2R5LmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ29sKGwpKSx0aGlzLmNvbnRhaW5lci5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy50YWJsZS5mcmFnbWVudCksZC50YWJsZT10aGlzLnRhYmxlLnRhYmxlfWdldEhlaWdodHMobCl7dGhpcy5pbmplY3RlZHx8dGhp''@;'; put 'put ''cy5pbmplY3RUYWJsZSgpLFluKHRoaXMucm93cyxhPT57Y29uc3R7aGVpZ2h0OmR9PWEudGFibGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bChhLnJvdyxNYXRoLmNlaWwoZCkpfSl9Z2V0V2lkdGhzKGwpe3RoaXMuaW5qZWN0ZWR8fHRoaXMuaW5qZWN0VGFibGUoKSxZbih0aGlzLmNvbHVt''@;'; put 'put ''bnMsYT0+e2NvbnN0e3dpZHRoOmR9PWEudGFibGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bChhLmNvbCxNYXRoLmNlaWwoZCkpfSl9c2V0U2V0dGluZ3MobCl7dGhpcy5zZXR0aW5ncz1sfXNldFNldHRpbmcobCxhKXt0aGlzLnNldHRpbmdzfHwodGhpcy5zZXR0aW5ncz17fSksdGhpcy5z''@;'; put 'put ''ZXR0aW5nc1tsXT1hfWdldFNldHRpbmdzKCl7cmV0dXJuIHRoaXMuc2V0dGluZ3N9Z2V0U2V0dGluZyhsKXtyZXR1cm4gdGhpcy5zZXR0aW5ncz90aGlzLnNldHRpbmdzW2xdOm51bGx9Y3JlYXRlQ29sR3JvdXBzQ29sKGwpe2NvbnN0IGE9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZURv''@;'; put 'put ''Y3VtZW50RnJhZ21lbnQoKTtyZXR1cm4gdGhpcy5ob3QuaGFzUm93SGVhZGVycygpJiZhLmFwcGVuZENoaWxkKHRoaXMuY3JlYXRlQ29sRWxlbWVudCgtMSwtMSkpLHRoaXMuc2FtcGxlcy5mb3JFYWNoKGQ9PntZbihkLnN0cmluZ3MsaD0+e2EuYXBwZW5kQ2hpbGQodGhpcy5jcmVhdGVDb2xF''@;'; put 'put ''bGVtZW50KGguY29sLGwpKX0pfSksYX1jcmVhdGVSb3cobCl7Y29uc3R7cm9vdERvY3VtZW50OmF9PXRoaXMuaG90LGQ9YS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaD1hLmNyZWF0ZUVsZW1lbnQoInRoIik7cmV0dXJuIHRoaXMuaG90Lmhhc1Jvd0hlYWRlcnMoKSYmKHRoaXMuaG90LnZp''@;'; put 'put ''ZXcuYXBwZW5kUm93SGVhZGVyKGwsaCksZC5hcHBlbmRDaGlsZChoKSksdGhpcy5zYW1wbGVzLmZvckVhY2goZj0+e1luKGYuc3RyaW5ncyx2PT57Y29uc3QgTT12LmNvbCxEPXRoaXMuaG90LmdldENlbGxNZXRhKGwsTSksWj10aGlzLmhvdC5nZXRDZWxsUmVuZGVyZXIoRCksbmU9YS5jcmVh''@;'; put 'put ''dGVFbGVtZW50KCJ0ZCIpO25lLnNldEF0dHJpYnV0ZSgiZ2hvc3QtdGFibGUiLDEpLFoodGhpcy5ob3QsbmUsbCxNLHRoaXMuaG90LmNvbFRvUHJvcChNKSx2LnZhbHVlLEQpLGQuYXBwZW5kQ2hpbGQobmUpfSl9KSxkfWFwcGVuZENvbHVtbkhlYWRlcnNSb3coKXtjb25zdHtyb290RG9jdW1l''@;'; put 'put ''bnQ6bH09dGhpcy5ob3QsYT1sLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxkPVtdO2lmKHRoaXMuaG90Lmhhc1Jvd0hlYWRlcnMoKSl7Y29uc3QgaD1sLmNyZWF0ZUVsZW1lbnQoInRoIik7ZC5wdXNoKFstMSxoXSksYS5hcHBlbmRDaGlsZChoKX10aGlzLnNhbXBsZXMuZm9yRWFjaChoPT57''@;'; put 'put ''WW4oaC5zdHJpbmdzLGY9Pntjb25zdCB2PWYuY29sLE09bC5jcmVhdGVFbGVtZW50KCJ0aCIpO2QucHVzaChbdixNXSksYS5hcHBlbmRDaGlsZChNKX0pfSksdGhpcy50YWJsZS50SGVhZC5hcHBlbmRDaGlsZChhKSxZbihkLGg9Pntjb25zdFtmLHZdPWg7dGhpcy5ob3Qudmlldy5hcHBlbmRD''@;'; put 'put ''b2xIZWFkZXIoZix2KX0pfWNyZWF0ZUNvbChsKXtjb25zdHtyb290RG9jdW1lbnQ6YX09dGhpcy5ob3QsZD1hLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtyZXR1cm4gdGhpcy5zYW1wbGVzLmZvckVhY2goaD0+e1luKGguc3RyaW5ncyxmPT57Y29uc3Qgdj1mLnJvdyxNPXRoaXMuaG90Lmdl''@;'; put 'put ''dENlbGxNZXRhKHYsbCksRD10aGlzLmhvdC5nZXRDZWxsUmVuZGVyZXIoTSksWj1hLmNyZWF0ZUVsZW1lbnQoInRkIiksbmU9YS5jcmVhdGVFbGVtZW50KCJ0ciIpO1ouc2V0QXR0cmlidXRlKCJnaG9zdC10YWJsZSIsMSksRCh0aGlzLmhvdCxaLHYsbCx0aGlzLmhvdC5jb2xUb1Byb3AobCks''@;'; put 'put ''Zi52YWx1ZSxNKSxuZS5hcHBlbmRDaGlsZChaKSxkLmFwcGVuZENoaWxkKG5lKX0pfSksZH1jbGVhbigpe3RoaXMucm93cy5sZW5ndGg9MCx0aGlzLnJvd3NbLTFdPXZvaWQgMCx0aGlzLmNvbHVtbnMubGVuZ3RoPTAsdGhpcy5zYW1wbGVzJiZ0aGlzLnNhbXBsZXMuY2xlYXIoKSx0aGlzLnNh''@;'; put 'put ''bXBsZXM9bnVsbCx0aGlzLnJlbW92ZVRhYmxlKCl9aW5qZWN0VGFibGUoKXt0aGlzLmluamVjdGVkfHwoKChhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06bnVsbCl8fHRoaXMuaG90LnJvb3RFbGVtZW50KS5hcHBlbmRDaGlsZCh0aGlzLmNv''@;'; put 'put ''bnRhaW5lci5mcmFnbWVudCksdGhpcy5pbmplY3RlZD0hMCl9cmVtb3ZlVGFibGUoKXt0aGlzLmluamVjdGVkJiZ0aGlzLmNvbnRhaW5lci5jb250YWluZXIucGFyZW50Tm9kZSYmKHRoaXMuY29udGFpbmVyLmNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVy''@;'; put 'put ''LmNvbnRhaW5lciksdGhpcy5jb250YWluZXI9bnVsbCx0aGlzLmluamVjdGVkPSExKX1jcmVhdGVDb2xFbGVtZW50KGwsYSl7Y29uc3QgZD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY29sIik7bGV0IGg9MDthPj0wJiZsPj0wJiYoaD10aGlzLmhvdC5nZXRDZWxsTWV0''@;'; put 'put ''YShhLGwpLmNvbHNwYW4pO2xldCBmPXRoaXMuaG90LmdldENvbFdpZHRoKGwpO2lmKGg+MSlmb3IobGV0IHY9bCsxO3Y8bCtoO3YrKylmKz10aGlzLmhvdC5nZXRDb2xXaWR0aCh2KTtyZXR1cm4gZC5zdHlsZS53aWR0aD1gJHtmfXB4YCxkfWNyZWF0ZVRhYmxlKCl7bGV0IGw9YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiIiO2NvbnN0e3Jvb3REb2N1bWVudDphfT10aGlzLmhvdCxkPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGg9YS5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpLGY9YS5jcmVhdGVFbGVtZW50KCJ0aGVhZCIpLHY9''@;'; put 'put ''YS5jcmVhdGVFbGVtZW50KCJ0Ym9keSIpLE09YS5jcmVhdGVFbGVtZW50KCJjb2xncm91cCIpLEQ9YS5jcmVhdGVFbGVtZW50KCJ0ciIpLFo9YS5jcmVhdGVFbGVtZW50KCJ0aCIpO3JldHVybiB0aGlzLmlzVmVydGljYWwoKSYmaC5hcHBlbmRDaGlsZChNKSx0aGlzLmlzSG9yaXpvbnRhbCgp''@;'; put 'put ''JiYoRC5hcHBlbmRDaGlsZChaKSxmLmFwcGVuZENoaWxkKEQpLGguc3R5bGUudGFibGVMYXlvdXQ9ImF1dG8iLGguc3R5bGUud2lkdGg9ImF1dG8iKSxoLmFwcGVuZENoaWxkKGYpLHRoaXMuaXNWZXJ0aWNhbCgpJiZ2LmFwcGVuZENoaWxkKEQpLGguYXBwZW5kQ2hpbGQodiksVGkoaCxsKSxk''@;'; put 'put ''LmFwcGVuZENoaWxkKGgpLHtmcmFnbWVudDpkLHRhYmxlOmgsdEhlYWQ6Zix0Qm9keTp2LGNvbEdyb3VwOk0sdHI6RCx0aDpafX1jcmVhdGVDb250YWluZXIoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06IiI7Y29uc3R7cm9v''@;'; put 'put ''dERvY3VtZW50OmF9PXRoaXMuaG90LGQ9YS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksaD1hLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBUaShoLGBodEdob3N0VGFibGUgaHRBdXRvU2l6ZSAke2wudHJpbSgpfWApLGQuYXBwZW5kQ2hpbGQoaCkse2ZyYWdtZW50OmQsY29udGFpbmVy''@;'; put 'put ''Omh9fWlzVmVydGljYWwoKXtyZXR1cm4hKCF0aGlzLnJvd3MubGVuZ3RofHx0aGlzLmNvbHVtbnMubGVuZ3RoKX1pc0hvcml6b250YWwoKXtyZXR1cm4hKCF0aGlzLmNvbHVtbnMubGVuZ3RofHx0aGlzLnJvd3MubGVuZ3RoKX19O2Z1bmN0aW9uIFlQKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlv''@;'; put 'put ''biBnYXQoYyl7dmFyIGw9ZnVuY3Rpb24gbWF0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0''@;'; put 'put ''dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBj''@;'; put 'put ''P09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBRWHtzdGF0aWMgZ2V0IFNBTVBMRV9DT1VOVCgpe3JldHVybiAzfWNvbnN0cnVjdG9yKGwpe1lQKHRoaXMsInNhbXBsZXMi''@;'; put 'put ''LG51bGwpLFlQKHRoaXMsImRhdGFGYWN0b3J5IixudWxsKSxZUCh0aGlzLCJjdXN0b21TYW1wbGVDb3VudCIsbnVsbCksWVAodGhpcywiYWxsb3dEdXBsaWNhdGVzIiwhMSksdGhpcy5kYXRhRmFjdG9yeT1sfWdldFNhbXBsZUNvdW50KCl7cmV0dXJuIHRoaXMuY3VzdG9tU2FtcGxlQ291bnQ/''@;'; put 'put ''dGhpcy5jdXN0b21TYW1wbGVDb3VudDpRWC5TQU1QTEVfQ09VTlR9c2V0U2FtcGxlQ291bnQobCl7dGhpcy5jdXN0b21TYW1wbGVDb3VudD1sfXNldEFsbG93RHVwbGljYXRlcyhsKXt0aGlzLmFsbG93RHVwbGljYXRlcz1sfWdlbmVyYXRlUm93U2FtcGxlcyhsLGEpe3JldHVybiB0aGlzLmdl''@;'; put 'put ''bmVyYXRlU2FtcGxlcygicm93IixhLGwpfWdlbmVyYXRlQ29sdW1uU2FtcGxlcyhsLGEpe3JldHVybiB0aGlzLmdlbmVyYXRlU2FtcGxlcygiY29sIixhLGwpfWdlbmVyYXRlU2FtcGxlcyhsLGEsZCl7Y29uc3QgaD1uZXcgTWFwLHtmcm9tOmYsdG86dn09Im51bWJlciI9PXR5cGVvZiBkP3tm''@;'; put 'put ''cm9tOmQsdG86ZH06ZDtyZXR1cm4gJG8oZix2LE09Pntjb25zdCBEPXRoaXMuZ2VuZXJhdGVTYW1wbGUobCxhLE0pO2guc2V0KE0sRCl9KSxofWdlbmVyYXRlU2FtcGxlKGwsYSxkKXtpZigicm93IiE9PWwmJiJjb2wiIT09bCl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHNhbXBsZSB0''@;'; put 'put ''eXBlIik7Y29uc3QgaD1uZXcgTWFwLGY9InJvdyI9PT1sPyJjb2wiOiJyb3ciLHY9W107cmV0dXJuICRvKGEuZnJvbSxhLnRvLE09Pntjb25zdCBEPSJyb3ciPT09bD90aGlzLmRhdGFGYWN0b3J5KGQsTSk6dGhpcy5kYXRhRmFjdG9yeShNLGQpO2lmKCExPT09RClyZXR1cm47Y29uc3R7dmFs''@;'; put 'put ''dWU6WixidW5kbGVTZWVkOm5lfT1ELGNlPSJzdHJpbmciPT10eXBlb2YgbmUmJm5lLmxlbmd0aD4wO2xldCBiZTtiZT1jZT9uZTpLYShaKT9gJHtPYmplY3Qua2V5cyhaKS5sZW5ndGh9YDpBcnJheS5pc0FycmF5KFopP2Ake1oubGVuZ3RofWA6YCR7emMoWikubGVuZ3RofWAsaC5oYXMoYmUp''@;'; put 'put ''fHxoLnNldChiZSx7bmVlZGVkOnRoaXMuZ2V0U2FtcGxlQ291bnQoKSxzdHJpbmdzOltdfSk7Y29uc3QgRWU9aC5nZXQoYmUpO0VlLm5lZWRlZCYmKCEodi5pbmRleE9mKFopPi0xKXx8dGhpcy5hbGxvd0R1cGxpY2F0ZXN8fGNlKSYmKEVlLnN0cmluZ3MucHVzaCh7dmFsdWU6WixbZl06TX0p''@;'; put 'put ''LHYucHVzaChaKSxFZS5uZWVkZWQtPTEpfSksaH19Y29uc3QgbzRlPVFYO2Z1bmN0aW9uIGE0ZShjLGwsYSl7czRlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBzNGUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2''@;'; put 'put ''YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIGlUKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBiYXQoYyl7dmFyIGw9ZnVuY3Rpb24geWF0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07''@;'; put 'put ''aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0''@;'; put 'put ''cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlv''@;'; put 'put ''biBsOShjLGwpe3JldHVybiBjLmdldChQcChjLGwpKX1mdW5jdGlvbiBlSihjLGwsYSl7cmV0dXJuIGMuc2V0KFBwKGMsbCksYSksYX1mdW5jdGlvbiBQcChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7''@;'; put 'put ''dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9QW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoIm1vZGlmeUF1dG9Db2x1bW5TaXplU2VlZCIpO2NvbnN0IHRKPSJhdXRvQ29sdW1uU2l6ZSI7dmFyIFJfPW5ldyBXZWFr''@;'; put 'put ''TWFwLExfPW5ldyBXZWFrTWFwLFRnPW5ldyBXZWFrU2V0O2NsYXNzIG9UIGV4dGVuZHMgRnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIHRKfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDEwfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuITB9c3Rh''@;'; put 'put ''dGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue3VzZUhlYWRlcnM6ITAsc2FtcGxpbmdSYXRpbzpudWxsLGFsbG93U2FtcGxlRHVwbGljYXRlczohMX19c3RhdGljIGdldCBDQUxDVUxBVElPTl9TVEVQKCl7cmV0dXJuIDUwfXN0YXRpYyBnZXQgU1lOQ19DQUxDVUxBVElPTl9MSU1J''@;'; put 'put ''VCgpe3JldHVybiA1MH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSxmdW5jdGlvbiB2YXQoYyxsKXtzNGUoYyxsKSxsLmFkZChjKX0odGhpcyxUZyksaVQodGhpcywiZ2hvc3RUYWJsZSIsbmV3IEpYKHRoaXMuaG90KSksaVQodGhpcywic2FtcGxlc0dlbmVyYXRvciIsbmV3IG80ZSgoYSxkKT0+''@;'; put 'put ''e2NvbnN0IGg9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhhKSxmPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oZCk7aWYodGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuaXNIaWRkZW4oaCl8fHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmlzSGlkZGVuKGYpKXJldHVybiExO2NvbnN0IHY9dGhp''@;'; put 'put ''cy5ob3QuZ2V0Q2VsbE1ldGEoYSxkKTtsZXQgTT0iIjt2LnNwYW5uZWR8fChNPXRoaXMuaG90LmdldERhdGFBdENlbGwoYSxkKSk7bGV0IEQ9IiI7cmV0dXJuIHRoaXMuaG90Lmhhc0hvb2soIm1vZGlmeUF1dG9Db2x1bW5TaXplU2VlZCIpJiYoRD10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5''@;'; put 'put ''QXV0b0NvbHVtblNpemVTZWVkIixELHYsTSkpLHt2YWx1ZTpNLGJ1bmRsZVNlZWQ6RH19KSksaVQodGhpcywiaW5Qcm9ncmVzcyIsITEpLGlUKHRoaXMsIm1lYXN1cmVkQ29sdW1ucyIsMCksaVQodGhpcywiY29sdW1uV2lkdGhzTWFwIixuZXcgem0pLGE0ZSh0aGlzLFJfLFtdKSxhNGUodGhp''@;'; put 'put ''cyxMXyxbXSksdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAoImF1dG9Db2x1bW5TaXplIix0aGlzLmNvbHVtbldpZHRoc01hcCksdGhpcy5hZGRIb29rKCJiZWZvcmVDb2x1bW5SZXNpemUiLChhLGQsaCk9PlBwKFRnLHRoaXMsbDRlKS5jYWxsKHRoaXMsYSxkLGgpKX1p''@;'; put 'put ''c0VuYWJsZWQoKXtyZXR1cm4hMSE9PXRoaXMuaG90LmdldFNldHRpbmdzKClbdEpdJiYhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5jb2xXaWR0aHN9ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO3RoaXMuZ2hvc3RUYWJsZS5zZXRTZXR0aW5nKCJ1c2VI''@;'; put 'put ''ZWFkZXJzIix0aGlzLmdldFNldHRpbmcoInVzZUhlYWRlcnMiKSksdGhpcy5zYW1wbGVzR2VuZXJhdG9yLnNldEFsbG93RHVwbGljYXRlcyh0aGlzLmdldFNldHRpbmcoImFsbG93U2FtcGxlRHVwbGljYXRlcyIpKTtjb25zdCBhPXRoaXMuZ2V0U2V0dGluZygic2FtcGxpbmdSYXRpbyIpO2Em''@;'; put 'put ''JiFpc05hTihhKSYmdGhpcy5zYW1wbGVzR2VuZXJhdG9yLnNldFNhbXBsZUNvdW50KHBhcnNlSW50KGEsMTApKSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1h''@;'; put 'put ''cmd1bWVudHNbZl07cmV0dXJuIFBwKFRnLGwsTWF0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNoYW5nZVJlbmRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTty''@;'; put 'put ''ZXR1cm4gUHAoVGcsbCx4YXQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4g''@;'; put 'put ''UHAoVGcsbCxUYXQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVuZGVyIiwoKT0+UHAoVGcsdGhpcyxTYXQpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygibW9kaWZ5Q29sV2lkdGgiLChkLGgpPT50aGlzLmdldENvbHVtbldpZHRoKGgsZCkpLHRoaXMuYWRkSG9vaygi''@;'; put 'put ''aW5pdCIsKCk9PlBwKFRnLHRoaXMsRWF0KS5jYWxsKHRoaXMpKSxzdXBlci5lbmFibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXtlSihMXyx0aGlzLHRoaXMuZmluZENvbHVtbnNXaGVyZUhlYWRlcldhc0NoYW5nZWQoKSksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3N1''@;'; put 'put ''cGVyLmRpc2FibGVQbHVnaW4oKSx0aGlzLmFkZEhvb2soImJlZm9yZUNvbHVtblJlc2l6ZSIsKGwsYSxkKT0+UHAoVGcsdGhpcyxsNGUpLmNhbGwodGhpcyxsLGEsZCkpfWNhbGN1bGF0ZVZpc2libGVDb2x1bW5zV2lkdGgoKXtpZighdGhpcy5ob3QuY291bnRSb3dzKCkpcmV0dXJuO2NvbnN0''@;'; put 'put ''IGw9dGhpcy5nZXRGaXJzdFZpc2libGVDb2x1bW4oKSxhPXRoaXMuZ2V0TGFzdFZpc2libGVDb2x1bW4oKTstMSE9PWwmJi0xIT09YSYmdGhpcy5jYWxjdWxhdGVDb2x1bW5zV2lkdGgoe2Zyb206bCx0bzphfSx2b2lkIDAsdGhpcy5ob3QucmVuZGVyQ2FsbCl9Y2FsY3VsYXRlQ29sdW1uc1dp''@;'; put 'put ''ZHRoKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOntmcm9tOjAsdG86dGhpcy5ob3QuY291bnRDb2xzKCktMX0sYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e2Zyb206''@;'; put 'put ''MCx0bzp0aGlzLmhvdC5jb3VudFJvd3MoKS0xfSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD0ibnVtYmVyIj09dHlwZW9mIGw/e2Zyb206bCx0bzpsfTpsLGY9Im51bWJlciI9PXR5cGVvZiBhP3tmcm9tOmEsdG86YX06''@;'; put 'put ''YTskbyhoLmZyb20saC50byx2PT57bGV0IE09dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbih2KTtudWxsPT09TSYmKE09diksKGR8fG51bGw9PT10aGlzLmNvbHVtbldpZHRoc01hcC5nZXRWYWx1ZUF0SW5kZXgoTSkmJiF0aGlzLmhvdC5fZ2V0Q29sV2lkdGhGcm9tU2V0dGluZ3MoTSkpJiZ0''@;'; put 'put ''aGlzLnNhbXBsZXNHZW5lcmF0b3IuZ2VuZXJhdGVDb2x1bW5TYW1wbGVzKHYsZikuZm9yRWFjaCgoWixuZSk9PnRoaXMuZ2hvc3RUYWJsZS5hZGRDb2x1bW4obmUsWikpfSksdGhpcy5naG9zdFRhYmxlLmNvbHVtbnMubGVuZ3RoJiYodGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pnt0aGlz''@;'; put 'put ''Lmdob3N0VGFibGUuZ2V0V2lkdGhzKCh2LE0pPT57Y29uc3QgRD10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKHYpO3RoaXMuY29sdW1uV2lkdGhzTWFwLnNldFZhbHVlQXRJbmRleChELE0pfSl9LCEwKSx0aGlzLm1lYXN1cmVkQ29sdW1ucz1oLnRvKzEsdGhpcy5naG9zdFRhYmxlLmNsZWFu''@;'; put 'put ''KCkpfWNhbGN1bGF0ZUFsbENvbHVtbnNXaWR0aCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Um93cygpLTF9LGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVu''@;'; put 'put ''dHNbMV0mJmFyZ3VtZW50c1sxXSxkPTA7Y29uc3QgaD10aGlzLmhvdC5jb3VudENvbHMoKS0xO2xldCBmPW51bGw7dGhpcy5pblByb2dyZXNzPSEwO2NvbnN0IHY9KCk9PntpZighdGhpcy5ob3QpcmV0dXJuIFNFKGYpLHZvaWQodGhpcy5pblByb2dyZXNzPSExKTt0aGlzLmNhbGN1bGF0ZUNv''@;'; put 'put ''bHVtbnNXaWR0aCh7ZnJvbTpkLHRvOk1hdGgubWluKGQrb1QuQ0FMQ1VMQVRJT05fU1RFUCxoKX0sbCxhKSxkPWQrb1QuQ0FMQ1VMQVRJT05fU1RFUCsxLGQ8aD9mPUNFKHYpOihTRShmKSx0aGlzLmluUHJvZ3Jlc3M9ITEsdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKSl9LE09''@;'; put 'put ''dGhpcy5nZXRTeW5jQ2FsY3VsYXRpb25MaW1pdCgpO00+PTAmJih0aGlzLmNhbGN1bGF0ZUNvbHVtbnNXaWR0aCh7ZnJvbTowLHRvOk19LGwsYSksZD1NKzEpLGQ8aD92KCk6dGhpcy5pblByb2dyZXNzPSExfXJlY2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoKCl7dGhpcy5ob3Qudmlldy5pc1Zp''@;'; put 'put ''c2libGUoKSYmdGhpcy5jYWxjdWxhdGVBbGxDb2x1bW5zV2lkdGgoe2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudFJvd3MoKS0xfSwhMCl9Z2V0U3luY0NhbGN1bGF0aW9uTGltaXQoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbdEpdO2xldCBhPW9ULlNZTkNfQ0FMQ1VMQVRJT05f''@;'; put 'put ''TElNSVQ7Y29uc3QgZD10aGlzLmhvdC5jb3VudENvbHMoKS0xO3JldHVybiBLYShsKSYmKGE9bC5zeW5jTGltaXQsZSQoYSk/YT1CJChkLGEpOmE+Pj0wKSxNYXRoLm1pbihhLGQpfWdldENvbHVtbldpZHRoKGwsYSl7bGV0IGQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3Vt''@;'; put 'put ''ZW50c1syXSl8fGFyZ3VtZW50c1syXSxoPWE7cmV0dXJuIHZvaWQgMD09PWgmJihoPXRoaXMuY29sdW1uV2lkdGhzTWFwLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpKSxkJiYibnVtYmVyIj09dHlwZW9mIGgmJihoPU1hdGgubWF4KGgsbV8pKSksaH1nZXRG''@;'; put 'put ''aXJzdFZpc2libGVDb2x1bW4oKXt2YXIgbDtyZXR1cm4gbnVsbCE9PShsPXRoaXMuaG90LmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCkpJiZ2b2lkIDAhPT1sP2w6LTF9Z2V0TGFzdFZpc2libGVDb2x1bW4oKXt2YXIgbDtyZXR1cm4gbnVsbCE9PShsPXRoaXMuaG90LmdldExhc3RS''@;'; put 'put ''ZW5kZXJlZFZpc2libGVDb2x1bW4oKSkmJnZvaWQgMCE9PWw/bDotMX1maW5kQ29sdW1uc1doZXJlSGVhZGVyV2FzQ2hhbmdlZCgpe3JldHVybiB0aGlzLmhvdC5nZXRDb2xIZWFkZXIoKS5yZWR1Y2UoKGQsaCxmKT0+e2NvbnN0IHY9bDkoUl8sdGhpcykubGVuZ3RoO3JldHVybih2LTE8Znx8''@;'; put 'put ''bDkoUl8sdGhpcylbZl0hPT1oKSYmZC5wdXNoKHRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGYpKSx2LTE8Zj9sOShSXyx0aGlzKS5wdXNoKGgpOmw5KFJfLHRoaXMpW2ZdPWgsZH0sW10pfWNsZWFyQ2FjaGUobCl7QXJyYXkuaXNBcnJheShsKT90aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+''@;'; put 'put ''e2wuZm9yRWFjaChhPT57dGhpcy5jb2x1bW5XaWR0aHNNYXAuc2V0VmFsdWVBdEluZGV4KGEsbnVsbCl9KX0sITApOnRoaXMuY29sdW1uV2lkdGhzTWFwLmNsZWFyKCl9aXNOZWVkUmVjYWxjdWxhdGUoKXtyZXR1cm4hIXRoaXMuY29sdW1uV2lkdGhzTWFwLmdldFZhbHVlcygpLnNsaWNlKDAs''@;'; put 'put ''dGhpcy5tZWFzdXJlZENvbHVtbnMpLmZpbHRlcihsPT5udWxsPT09bCkubGVuZ3RofWRlc3Ryb3koKXt0aGlzLmdob3N0VGFibGUuY2xlYW4oKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIENhdChjKXtjb25zdCBsPXtmcm9tOjAsdG86dGhpcy5ob3QuY291bnRSb3dzKCktMX07Yy5mb3JF''@;'; put 'put ''YWNoKGE9Pntjb25zdCBkPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oYSk7bnVsbCE9PWQmJih0aGlzLmhvdC5fZ2V0Q29sV2lkdGhGcm9tU2V0dGluZ3MoZCl8fHRoaXMuc2FtcGxlc0dlbmVyYXRvci5nZW5lcmF0ZUNvbHVtblNhbXBsZXMoYSxsKS5mb3JFYWNoKChmLHYpPT50aGlzLmdo''@;'; put 'put ''b3N0VGFibGUuYWRkQ29sdW1uKHYsZikpKX0pLHRoaXMuZ2hvc3RUYWJsZS5jb2x1bW5zLmxlbmd0aCYmKHRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57dGhpcy5naG9zdFRhYmxlLmdldFdpZHRocygoYSxkKT0+e2NvbnN0IGg9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihhKTt0aGlz''@;'; put 'put ''LmNvbHVtbldpZHRoc01hcC5zZXRWYWx1ZUF0SW5kZXgoaCxkKX0pfSwhMCksdGhpcy5naG9zdFRhYmxlLmNsZWFuKCkpfWZ1bmN0aW9uIFNhdCgpe3RoaXMuY2FsY3VsYXRlVmlzaWJsZUNvbHVtbnNXaWR0aCgpLHRoaXMuaW5Qcm9ncmVzc3x8KFBwKFRnLHRoaXMsQ2F0KS5jYWxsKHRoaXMs''@;'; put 'put ''bDkoTF8sdGhpcykpLGVKKExfLHRoaXMsW10pKX1mdW5jdGlvbiBNYXQoYyxsKXtsfHx0aGlzLnJlY2FsY3VsYXRlQWxsQ29sdW1uc1dpZHRoKCl9ZnVuY3Rpb24geGF0KGMpe2NvbnN0IGw9Yy5yZWR1Y2UoKGEsZCk9PntsZXRbLGhdPWQ7Y29uc3QgZj10aGlzLmhvdC5wcm9wVG9Db2woaCk7''@;'; put 'put ''cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZikmJi0xPT09YS5pbmRleE9mKGYpJiZhLnB1c2goZiksYX0sW10pO2w5KExfLHRoaXMpLnB1c2goLi4ubCl9ZnVuY3Rpb24gbDRlKGMsbCxhKXtsZXQgZD1jO3JldHVybiBhJiYodGhpcy5jYWxjdWxhdGVDb2x1bW5zV2lkdGgobCx2b2lkIDAsITAp''@;'; put 'put ''LGQ9dGhpcy5nZXRDb2x1bW5XaWR0aChsLHZvaWQgMCwhMSkpLGR9ZnVuY3Rpb24gRWF0KCl7ZUooUl8sdGhpcyx0aGlzLmhvdC5nZXRDb2xIZWFkZXIoKSksdGhpcy5yZWNhbGN1bGF0ZUFsbENvbHVtbnNXaWR0aCgpfWZ1bmN0aW9uIFRhdChjKXtjb25zdCBsPWMucmVkdWNlKChhLGQpPT57''@;'; put 'put ''dmFyIGg7Y29uc3QgZj1udWxsPT09KGg9ZC5hZGRyZXNzKXx8dm9pZCAwPT09aD92b2lkIDA6aC5jb2w7aWYoTnVtYmVyLmlzSW50ZWdlcihmKSl7Y29uc3Qgdj10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihmKTstMT09PWEuaW5kZXhPZih2KSYmYS5wdXNoKHYpfXJldHVybiBhfSxbXSk7bDko''@;'; put 'put ''TF8sdGhpcykucHVzaCguLi5sKX1jb25zdCBjOT17aG9yaXpvbnRhbDoiaG9yaXpvbnRhbCIsdmVydGljYWw6InZlcnRpY2FsIn07ZnVuY3Rpb24gT18oYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFJhdChjKXt2YXIgbD1mdW5jdGlvbiBMYXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8''@;'; put 'put ''fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEg''@;'; put 'put ''cHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZp''@;'; put 'put ''Z3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIGFUKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90''@;'; put 'put ''IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1Bby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigibW9kaWZ5QXV0b2ZpbGxSYW5nZSIpLEFvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVBdXRvZmlsbCIpLEFvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckF1dG9maWxsIik7''@;'; put 'put ''Y29uc3QgUGF0PVsiZmlsbEhhbmRsZSJdO3ZhciBQXz1uZXcgV2Vha1NldDtjbGFzcyBOYXQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gRGF0KGMsbCl7KGZ1bmN0aW9uIElhdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJy''@;'; put 'put ''b3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLFBfKSxPXyh0aGlzLCJhZGRpbmdTdGFydGVkIiwhMSksT18odGhpcywibW91c2VEb3duT25DZWxsQ29ybmVyIiwhMSksT18odGhp''@;'; put 'put ''cywibW91c2VEcmFnT3V0c2lkZSIsITEpLE9fKHRoaXMsImhhbmRsZURyYWdnZWRDZWxscyIsMCksT18odGhpcywiZGlyZWN0aW9ucyIsW10pLE9fKHRoaXMsImF1dG9JbnNlcnRSb3ciLCExKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4iYXV0b2ZpbGwifXN0YXRpYyBnZXQgUExV''@;'; put 'put ''R0lOX1BSSU9SSVRZKCl7cmV0dXJuIDIwfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuWyJhdXRvZmlsbCIsLi4uUGF0XX1pc0VuYWJsZWQoKXtyZXR1cm4gdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maWxsSGFuZGxlfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMu''@;'; put 'put ''bWFwU2V0dGluZ3MoKSx0aGlzLnJlZ2lzdGVyRXZlbnRzKCksdGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbENvcm5lck1vdXNlRG93biIsbD0+YVQoUF8sdGhpcyxCYXQpLmNhbGwodGhpcyxsKSksdGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbENvcm5lckRibENsaWNrIixsPT5hVChQXyx0aGlz''@;'; put 'put ''LFZhdCkuY2FsbCh0aGlzLGwpKSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlT3ZlciIsKGwsYSk9PmFUKFBfLHRoaXMsamF0KS5jYWxsKHRoaXMsYSkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBs''@;'; put 'put ''dWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmNsZWFyTWFwcGVkU2V0dGluZ3MoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9Z2V0U2VsZWN0aW9uRGF0YSgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSx7cm93OmEsY29sOmR9''@;'; put 'put ''PWwuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7cm93OmgsY29sOmZ9PWwuZ2V0Qm90dG9tRW5kQ29ybmVyKCksdj10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5Q29weWFibGVSYW5nZSIsW3tzdGFydFJvdzphLHN0YXJ0Q29sOmQsZW5kUm93OmgsZW5kQ29sOmZ9XSksTT1bXSxEPVtdLFo9W107cmV0''@;'; put 'put ''dXJuIFluKHYsbmU9Pntmb3IobGV0IGNlPW5lLnN0YXJ0Um93O2NlPD1uZS5lbmRSb3c7Y2UrPTEpLTE9PT1NLmluZGV4T2YoY2UpJiZNLnB1c2goY2UpO2ZvcihsZXQgY2U9bmUuc3RhcnRDb2w7Y2U8PW5lLmVuZENvbDtjZSs9MSktMT09PUQuaW5kZXhPZihjZSkmJkQucHVzaChjZSl9KSxZ''@;'; put 'put ''bihNLG5lPT57Y29uc3QgY2U9W107WW4oRCxiZT0+e2NlLnB1c2godGhpcy5ob3QuZ2V0Q29weWFibGVEYXRhKG5lLGJlKSl9KSxaLnB1c2goY2UpfSksWn1maWxsSW4oKXtpZih0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5pc0VtcHR5KCkpcmV0dXJuITE7Y29uc3Rb''@;'; put 'put ''bCxhLGQsaF09dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuZ2V0VmlzdWFsQ29ybmVycygpLGY9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSx2PWYuZ2V0VG9wU3RhcnRDb3JuZXIoKSxNPWYuZ2V0Qm90dG9tRW5kQ29ybmVyKCk7dGhpcy5yZXNldFNlbGVj''@;'; put 'put ''dGlvbk9mRHJhZ2dlZEFyZWEoKTtjb25zdCBEPVt2LnJvdyx2LmNvbCxNLnJvdyxNLmNvbF0sWj10aGlzLmhvdC5ydW5Ib29rcygibW9kaWZ5QXV0b2ZpbGxSYW5nZSIsW01hdGgubWluKHYucm93LGwpLE1hdGgubWluKHYuY29sLGEpLE1hdGgubWF4KE0ucm93LGQpLE1hdGgubWF4KE0uY29s''@;'; put 'put ''LGgpXSxEKSx7ZGlyZWN0aW9uT2ZEcmFnOm5lLHN0YXJ0T2ZEcmFnQ29vcmRzOmNlLGVuZE9mRHJhZ0Nvb3JkczpiZX09ZnVuY3Rpb24gQWF0KGMsbCxhKXtsZXQgZCxoLGY7cmV0dXJuIGxbMF09PT1jWzBdJiZsWzFdPGNbMV0/KGY9ImxlZnQiLGQ9YShsWzBdLGxbMV0pLGg9YShsWzJdLGNb''@;'; put 'put ''MV0tMSkpOmxbMl09PT1jWzJdJiZsWzBdPT09Y1swXSYmbFszXT5jWzNdPyhmPSJyaWdodCIsZD1hKGxbMF0sY1szXSsxKSxoPWEobFsyXSxsWzNdKSk6bFswXTxjWzBdJiZsWzFdPT09Y1sxXT8oZj0idXAiLGQ9YShsWzBdLGxbMV0pLGg9YShjWzBdLTEsbFszXSkpOmxbMl0+Y1syXSYmbFsx''@;'; put 'put ''XT09PWNbMV0mJihmPSJkb3duIixkPWEoY1syXSsxLGxbMV0pLGg9YShsWzJdLGxbM10pKSxkJiZkLm5vcm1hbGl6ZSgpLGgmJmgubm9ybWFsaXplKCkse2RpcmVjdGlvbk9mRHJhZzpmLHN0YXJ0T2ZEcmFnQ29vcmRzOmQsZW5kT2ZEcmFnQ29vcmRzOmh9fShELFosKEVlLEJlKT0+dGhpcy5o''@;'; put 'put ''b3QuX2NyZWF0ZUNlbGxDb29yZHMoRWUsQmUpKTtpZihjZSYmY2Uucm93Pi0xJiZjZS5jb2w+LTEpe2NvbnN0IEVlPXRoaXMuZ2V0U2VsZWN0aW9uRGF0YSgpLEJlPWYuY2xvbmUoKSxxZT10aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlKGNlLGNlLGJlKSxudD10aGlzLmhvdC5ydW5Ib29rcygi''@;'; put 'put ''YmVmb3JlQXV0b2ZpbGwiLEVlLEJlLHFlLG5lKTtpZighMT09PW50KXJldHVybiB0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5jbGVhcigpLHRoaXMuaG90LnJlbmRlcigpLCExO2xldCBsdD1udDtjb25zdCBtdD1udDtpZihbInVwIiwibGVmdCJdLmluZGV4T2YobmUp''@;'; put 'put ''Pi0xJiYoMSE9PW10Lmxlbmd0aHx8MCE9PW10WzBdLmxlbmd0aCkpaWYobHQ9W10sInVwIj09PW5lKXtjb25zdCBKdD1iZS5yb3ctY2Uucm93KzEseW49SnQlbXQubGVuZ3RoO2ZvcihsZXQgQ249MDtDbjxKdDtDbisrKWx0LnB1c2gobXRbKENuKyhtdC5sZW5ndGgteW4pKSVtdC5sZW5ndGhd''@;'; put 'put ''KX1lbHNle2NvbnN0IEp0PWJlLmNvbC1jZS5jb2wrMSx5bj1KdCVtdFswXS5sZW5ndGg7Zm9yKGxldCBDbj0wO0NuPG10Lmxlbmd0aDtDbisrKXtsdC5wdXNoKFtdKTtmb3IobGV0IHRuPTA7dG48SnQ7dG4rKylsdFtDbl0ucHVzaChtdFtDbl1bKHRuKyhtdFtDbl0ubGVuZ3RoLXluKSklbXRb''@;'; put 'put ''Q25dLmxlbmd0aF0pfX10aGlzLmhvdC5wb3B1bGF0ZUZyb21BcnJheShjZS5yb3csY2UuY29sLGx0LGJlLnJvdyxiZS5jb2wsYCR7dGhpcy5wbHVnaW5OYW1lfS5maWxsYCxudWxsKSx0aGlzLnNldFNlbGVjdGlvbihaKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJBdXRvZmlsbCIsbHQsQmUs''@;'; put 'put ''cWUsbmUpLHRoaXMuaG90LnJlbmRlcigpfWVsc2UgdGhpcy5ob3Qudmlldy5yZW5kZXIoKTtyZXR1cm4hMH1yZWR1Y2VTZWxlY3Rpb25BcmVhSWZOZWVkZWQobCl7cmV0dXJuIGwucm93PDAmJihsLnJvdz0wKSxsLmNvbDwwJiYobC5jb2w9MCksbH1nZXRDb29yZHNPZkRyYWdBbmREcm9wQm9y''@;'; put 'put ''ZGVycyhsKXtjb25zdCBhPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksZD1hLmdldEJvdHRvbUVuZENvcm5lcigpO2xldCBoPWw7aWYodGhpcy5kaXJlY3Rpb25zLmluY2x1ZGVzKGM5LnZlcnRpY2FsKSYmdGhpcy5kaXJlY3Rpb25zLmluY2x1ZGVzKGM5Lmhvcml6b250YWwpKXtj''@;'; put 'put ''b25zdCBmPWEuZ2V0VG9wU3RhcnRDb3JuZXIoKTsoZC5jb2w8PWwuY29sfHxmLmNvbD49bC5jb2wpJiYoaD10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhkLnJvdyxsLmNvbCkpLChkLnJvdzxsLnJvd3x8Zi5yb3c+bC5yb3cpJiYoaD10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLnJv''@;'; put 'put ''dyxkLmNvbCkpfWVsc2UgaWYodGhpcy5kaXJlY3Rpb25zLmluY2x1ZGVzKGM5LnZlcnRpY2FsKSloPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwucm93LGQuY29sKTtlbHNle2lmKCF0aGlzLmRpcmVjdGlvbnMuaW5jbHVkZXMoYzkuaG9yaXpvbnRhbCkpcmV0dXJuO2g9dGhpcy5ob3Qu''@;'; put 'put ''X2NyZWF0ZUNlbGxDb29yZHMoZC5yb3csbC5jb2wpfXJldHVybiB0aGlzLnJlZHVjZVNlbGVjdGlvbkFyZWFJZk5lZWRlZChoKX1zaG93Qm9yZGVyKGwpe2NvbnN0IGE9dGhpcy5nZXRDb29yZHNPZkRyYWdBbmREcm9wQm9yZGVycyhsKTthJiZ0aGlzLnJlZHJhd0JvcmRlcnMoYSl9YWRkUm93''@;'; put 'put ''KCl7dGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e3RoaXMuaG90LmFsdGVyKCJpbnNlcnRfcm93X2JlbG93Iix2b2lkIDAsMSxgJHt0aGlzLnBsdWdpbk5hbWV9LmZpbGxgKSx0aGlzLmFkZGluZ1N0YXJ0ZWQ9ITF9LDIwMCl9YWRkTmV3Um93SWZOZWVkZWQoKXtpZighdGhpcy5ob3Qu''@;'; put 'put ''c2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuaXNFbXB0eSgpJiYhMT09PXRoaXMuYWRkaW5nU3RhcnRlZCYmdGhpcy5hdXRvSW5zZXJ0Um93KXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpLGE9dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuZ2V0''@;'; put 'put ''VmlzdWFsQ29ybmVycygpLGQ9dGhpcy5ob3QuY291bnRSb3dzKCk7bFsyXTxkLTEmJmFbMl09PT1kLTEmJih0aGlzLmFkZGluZ1N0YXJ0ZWQ9ITAsdGhpcy5hZGRSb3coKSl9fWdldEluZGV4T2ZMYXN0QWRqYWNlbnRGaWxsZWRJblJvdyhsKXtjb25zdCBhPXRoaXMuaG90LmdldERhdGEoKSxk''@;'; put 'put ''PXRoaXMuaG90LmNvdW50Um93cygpO2xldCBoO2ZvcihsZXQgZj1sWzJdKzE7ZjxkO2YrKyl7Zm9yKGxldCBEPWxbMV07RDw9bFszXTtEKyspaWYoIVVjKGFbZl1bRF0pKXJldHVybi0xO2NvbnN0IE09YVtmXVtsWzNdKzFdOyghVWMoYVtmXVtsWzFdLTFdKXx8IVVjKE0pKSYmKGg9Zil9cmV0''@;'; put 'put ''dXJuIGh9YWRkU2VsZWN0aW9uRnJvbVN0YXJ0QXJlYVRvU3BlY2lmaWNSb3dJbmRleChsLGEpe3RoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuZ2V0RmlsbCgpLmNsZWFyKCkuYWRkKHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGxbMF0sbFsxXSkpLmFkZCh0aGlzLmhvdC5fY3JlYXRl''@;'; put 'put ''Q2VsbENvb3JkcyhhLGxbM10pKS5jb21taXQoKX1zZXRTZWxlY3Rpb24obCl7dGhpcy5ob3Quc2VsZWN0Q2VsbCguLi55cyhsLGE9Pk1hdGgubWF4KGEsMCkpLCExLCExKX1zZWxlY3RBZGphY2VudCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRMYXN0KCksYT10aGlzLmdldEluZGV4''@;'; put 'put ''T2ZMYXN0QWRqYWNlbnRGaWxsZWRJblJvdyhsKTtyZXR1cm4tMSE9PWEmJnZvaWQgMCE9PWEmJih0aGlzLmFkZFNlbGVjdGlvbkZyb21TdGFydEFyZWFUb1NwZWNpZmljUm93SW5kZXgobCxhKSwhMCl9cmVzZXRTZWxlY3Rpb25PZkRyYWdnZWRBcmVhKCl7dGhpcy5oYW5kbGVEcmFnZ2VkQ2Vs''@;'; put 'put ''bHM9MCx0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZpbGwoKS5jbGVhcigpfXJlZHJhd0JvcmRlcnMobCl7dGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5nZXRGaWxsKCkuY2xlYXIoKS5hZGQodGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5mcm9tKS5hZGQodGhp''@;'; put 'put ''cy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS50bykuYWRkKGwpLmNvbW1pdCgpLHRoaXMuaG90LnZpZXcucmVuZGVyKCl9Z2V0SWZNb3VzZVdhc0RyYWdnZWRPdXRzaWRlKGwpe2NvbnN0e2RvY3VtZW50RWxlbWVudDphfT10aGlzLmhvdC5yb290RG9jdW1lbnQsZD16MCh0aGlzLmhvdC50''@;'; put 'put ''YWJsZSkudG9wLSh0aGlzLmhvdC5yb290V2luZG93LnBhZ2VZT2Zmc2V0fHxhLnNjcm9sbFRvcCkrTXUodGhpcy5ob3QudGFibGUpLGg9ejAodGhpcy5ob3QudGFibGUpLmxlZnQtKHRoaXMuaG90LnJvb3RXaW5kb3cucGFnZVhPZmZzZXR8fGEuc2Nyb2xsTGVmdCkrYXUodGhpcy5ob3QudGFi''@;'; put 'put ''bGUpO3JldHVybiBsLmNsaWVudFk+ZCYmbC5jbGllbnRYPD1ofXJlZ2lzdGVyRXZlbnRzKCl7Y29uc3R7ZG9jdW1lbnRFbGVtZW50Omx9PXRoaXMuaG90LnJvb3REb2N1bWVudDt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNldXAiLCgpPT5hVChQXyx0aGlzLHph''@;'; put 'put ''dCkuY2FsbCh0aGlzKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZW1vdmUiLGE9PmFUKFBfLHRoaXMsVWF0KS5jYWxsKHRoaXMsYSkpfWNsZWFyTWFwcGVkU2V0dGluZ3MoKXt0aGlzLmRpcmVjdGlvbnMubGVuZ3RoPTAsdGhpcy5hdXRvSW5zZXJ0Um93PSEx''@;'; put 'put ''fW1hcFNldHRpbmdzKCl7Y29uc3QgbD1mdW5jdGlvbiBrYXQoYyl7Y29uc3QgbD17fTtyZXR1cm4hMD09PWM/KGwuZGlyZWN0aW9ucz1PYmplY3Qua2V5cyhjOSksbC5hdXRvSW5zZXJ0Um93PSEwKTpLYShjKT8obC5hdXRvSW5zZXJ0Um93PSEhRm8oYy5hdXRvSW5zZXJ0Um93KSYmYy5kaXJl''@;'; put 'put ''Y3Rpb24hPT1jOS5ob3Jpem9udGFsJiZjLmF1dG9JbnNlcnRSb3csbC5kaXJlY3Rpb25zPUZvKGMuZGlyZWN0aW9uKT9bYy5kaXJlY3Rpb25dOk9iamVjdC5rZXlzKGM5KSk6InN0cmluZyI9PXR5cGVvZiBjPyhsLmRpcmVjdGlvbnM9W2NdLGwuYXV0b0luc2VydFJvdz0hMCk6KGwuZGlyZWN0''@;'; put 'put ''aW9ucz1bXSxsLmF1dG9JbnNlcnRSb3c9ITEpLGx9KHRoaXMuaG90LmdldFNldHRpbmdzKCkuZmlsbEhhbmRsZSk7dGhpcy5kaXJlY3Rpb25zPWwuZGlyZWN0aW9ucyx0aGlzLmF1dG9JbnNlcnRSb3c9bC5hdXRvSW5zZXJ0Um93fWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9u''@;'; put 'put ''IFZhdCgpe3RoaXMuc2VsZWN0QWRqYWNlbnQoKSYmdGhpcy5maWxsSW4oKX1mdW5jdGlvbiBCYXQoKXt0aGlzLmhhbmRsZURyYWdnZWRDZWxscz0xLHRoaXMubW91c2VEb3duT25DZWxsQ29ybmVyPSEwfWZ1bmN0aW9uIGphdChjKXt0aGlzLm1vdXNlRG93bk9uQ2VsbENvcm5lciYmIXRoaXMu''@;'; put 'put ''aG90LnZpZXcuaXNNb3VzZURvd24oKSYmdGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHMmJih0aGlzLmhhbmRsZURyYWdnZWRDZWxscys9MSx0aGlzLnNob3dCb3JkZXIoYyksdGhpcy5hZGROZXdSb3dJZk5lZWRlZCgpKX1mdW5jdGlvbiB6YXQoKXt0aGlzLmhhbmRsZURyYWdnZWRDZWxscyYmKHRo''@;'; put 'put ''aXMuaGFuZGxlRHJhZ2dlZENlbGxzPjEmJnRoaXMuZmlsbEluKCksdGhpcy5oYW5kbGVEcmFnZ2VkQ2VsbHM9MCx0aGlzLm1vdXNlRG93bk9uQ2VsbENvcm5lcj0hMSl9ZnVuY3Rpb24gVWF0KGMpe2NvbnN0IGw9dGhpcy5nZXRJZk1vdXNlV2FzRHJhZ2dlZE91dHNpZGUoYyk7ITE9PT10aGlz''@;'; put 'put ''LmFkZGluZ1N0YXJ0ZWQmJnRoaXMuaGFuZGxlRHJhZ2dlZENlbGxzPjAmJmw/KHRoaXMubW91c2VEcmFnT3V0c2lkZT0hMCx0aGlzLmFkZGluZ1N0YXJ0ZWQ9ITApOnRoaXMubW91c2VEcmFnT3V0c2lkZT0hMSx0aGlzLm1vdXNlRHJhZ091dHNpZGUmJnRoaXMuYXV0b0luc2VydFJvdyYmdGhp''@;'; put 'put ''cy5hZGRSb3coKX1mdW5jdGlvbiB1NGUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIEZfKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBZ''@;'; put 'put ''YXQoYyl7dmFyIGw9ZnVuY3Rpb24gR2F0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJu''@;'; put 'put ''IGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBuSihjLGwpe3JldHVybiBjLmdldChGcChjLGwpKX1mdW5jdGlvbiBGcChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9m''@;'; put 'put ''IGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3Qgcko9ImF1dG9Sb3dTaXplIjt2YXIgc1Q9bmV3IFdlYWtNYXAsQWc9bmV3''@;'; put 'put ''IFdlYWtTZXQ7Y2xhc3MgbFQgZXh0ZW5kcyBGc3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gckp9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gNDB9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm4hMH1zdGF0aWMgZ2V0IERFRkFVTFRfU0VUVElOR1Mo''@;'; put 'put ''KXtyZXR1cm57dXNlSGVhZGVyczohMCxzYW1wbGluZ1JhdGlvOm51bGwsYWxsb3dTYW1wbGVEdXBsaWNhdGVzOiExfX1zdGF0aWMgZ2V0IENBTENVTEFUSU9OX1NURVAoKXtyZXR1cm4gNTB9c3RhdGljIGdldCBTWU5DX0NBTENVTEFUSU9OX0xJTUlUKCl7cmV0dXJuIDUwMH1jb25zdHJ1Y3Rv''@;'; put 'put ''cihsKXtzdXBlcihsKSxmdW5jdGlvbiBaYXQoYyxsKXt1NGUoYyxsKSxsLmFkZChjKX0odGhpcyxBZyksRl8odGhpcywiaGVhZGVySGVpZ2h0IixudWxsKSxGXyh0aGlzLCJnaG9zdFRhYmxlIixuZXcgSlgodGhpcy5ob3QpKSxGXyh0aGlzLCJzYW1wbGVzR2VuZXJhdG9yIixuZXcgbzRlKChh''@;'; put 'put ''LGQpPT57Y29uc3QgaD10aGlzLmhvdC50b1BoeXNpY2FsUm93KGEpLGY9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihkKTtpZih0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5pc0hpZGRlbihoKXx8dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuaXNIaWRkZW4oZil8fGE+PTAmJmQ+PTAmJnRo''@;'; put 'put ''aXMuaG90LmdldENlbGxNZXRhKGEsZCkuaGlkZGVuKXJldHVybiExO2xldCB2O3JldHVybiBhPj0wP3Y9dGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbChhLGQpOi0xPT09YSYmKHY9dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKGQpKSx7dmFsdWU6dn19KSksRl8odGhpcywiaW5Qcm9ncmVzcyIsITEpLEZf''@;'; put 'put ''KHRoaXMsIm1lYXN1cmVkUm93cyIsMCksRl8odGhpcywicm93SGVpZ2h0c01hcCIsbmV3IHptKSxmdW5jdGlvbiBXYXQoYyxsLGEpe3U0ZShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsc1QsW10pLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKCJhdXRvUm93U2l6ZSIsdGhpcy5y''@;'; put 'put ''b3dIZWlnaHRzTWFwKSx0aGlzLmFkZEhvb2soImJlZm9yZVJvd1Jlc2l6ZSIsKGEsZCxoKT0+RnAoQWcsdGhpcyxkNGUpLmNhbGwodGhpcyxhLGQsaCkpfWlzRW5hYmxlZCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtySl07cmV0dXJuITA9PT1sfHxLYShsKX1lbmFibGVQbHVn''@;'; put 'put ''aW4oKXt2YXIgbD10aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47dGhpcy5zYW1wbGVzR2VuZXJhdG9yLnNldEFsbG93RHVwbGljYXRlcyh0aGlzLmdldFNldHRpbmcoImFsbG93U2FtcGxlRHVwbGljYXRlcyIpKTtjb25zdCBhPXRoaXMuZ2V0U2V0dGluZygic2FtcGxpbmdSYXRpbyIpO2Em''@;'; put 'put ''JiFpc05hTihhKSYmdGhpcy5zYW1wbGVzR2VuZXJhdG9yLnNldFNhbXBsZUNvdW50KHBhcnNlSW50KGEsMTApKSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1h''@;'; put 'put ''cmd1bWVudHNbZl07cmV0dXJuIEZwKEFnLGwsUWF0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUNoYW5nZVJlbmRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTty''@;'; put 'put ''ZXR1cm4gRnAoQWcsbCxlc3QpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29sdW1uUmVzaXplIiwoKT0+dGhpcy5yZWNhbGN1bGF0ZUFsbFJvd3NIZWlnaHQoKSksdGhpcy5hZGRIb29rKCJhZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlIixmdW5jdGlvbigpe2Zvcih2YXIg''@;'; put 'put ''ZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBGcChBZyxsLG5zdCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW5kZXIiLCgpPT5GcChBZyx0aGlzLEphdCkuY2FsbCh0aGlzKSksdGhpcy5h''@;'; put 'put ''ZGRIb29rKCJtb2RpZnlSb3dIZWlnaHQiLChkLGgpPT50aGlzLmdldFJvd0hlaWdodChoLGQpKSx0aGlzLmFkZEhvb2soImluaXQiLCgpPT5GcChBZyx0aGlzLHRzdCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2x1bW5IZWFkZXJIZWlnaHQiLCgpPT50aGlzLmdldENvbHVt''@;'; put 'put ''bkhlYWRlckhlaWdodCgpKSxzdXBlci5lbmFibGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5oZWFkZXJIZWlnaHQ9bnVsbCxzdXBlci5kaXNhYmxlUGx1Z2luKCksdGhpcy5hZGRIb29rKCJiZWZvcmVSb3dSZXNpemUiLChsLGEsZCk9PkZwKEFnLHRoaXMsZDRlKS5jYWxsKHRoaXMs''@;'; put 'put ''bCxhLGQpKX1jYWxjdWxhdGVWaXNpYmxlUm93c0hlaWdodCgpe2lmKCF0aGlzLmhvdC5jb3VudENvbHMoKSlyZXR1cm47Y29uc3QgbD10aGlzLmdldEZpcnN0VmlzaWJsZVJvdygpLGE9dGhpcy5nZXRMYXN0VmlzaWJsZVJvdygpOy0xIT09bCYmLTEhPT1hJiZ0aGlzLmNhbGN1bGF0ZVJvd3NI''@;'; put 'put ''ZWlnaHQoe2Zyb206bCx0bzphfSx2b2lkIDAsdGhpcy5ob3QucmVuZGVyQ2FsbCl9Y2FsY3VsYXRlUm93c0hlaWdodCgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Um93cygpLTF9''@;'; put 'put ''LGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOntmcm9tOjAsdG86dGhpcy5ob3QuY291bnRDb2xzKCktMX0sZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2NvbnN0IGg9Im51bWJl''@;'; put 'put ''ciI9PXR5cGVvZiBsP3tmcm9tOmwsdG86bH06bCxmPSJudW1iZXIiPT10eXBlb2YgYT97ZnJvbTphLHRvOmF9OmE7aWYobnVsbCE9PXRoaXMuaG90LmdldENvbEhlYWRlcigwKSl7Y29uc3Qgdj10aGlzLnNhbXBsZXNHZW5lcmF0b3IuZ2VuZXJhdGVSb3dTYW1wbGVzKC0xLGYpO3RoaXMuZ2hv''@;'; put 'put ''c3RUYWJsZS5hZGRDb2x1bW5IZWFkZXJzUm93KHYuZ2V0KC0xKSl9JG8oaC5mcm9tLGgudG8sdj0+e2xldCBNPXRoaXMuaG90LnRvUGh5c2ljYWxSb3codik7bnVsbD09PU0mJihNPXYpLChkfHxudWxsPT09dGhpcy5yb3dIZWlnaHRzTWFwLmdldFZhbHVlQXRJbmRleChNKSkmJnRoaXMuc2Ft''@;'; put 'put ''cGxlc0dlbmVyYXRvci5nZW5lcmF0ZVJvd1NhbXBsZXModixmKS5mb3JFYWNoKChaLG5lKT0+dGhpcy5naG9zdFRhYmxlLmFkZFJvdyhuZSxaKSl9KSx0aGlzLmdob3N0VGFibGUucm93cy5sZW5ndGgmJih0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e3RoaXMuZ2hvc3RUYWJsZS5nZXRI''@;'; put 'put ''ZWlnaHRzKCh2LE0pPT57djwwP3RoaXMuaGVhZGVySGVpZ2h0PU06dGhpcy5yb3dIZWlnaHRzTWFwLnNldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsUm93KHYpLE0pfSl9LCEwKSx0aGlzLm1lYXN1cmVkUm93cz1oLnRvKzEsdGhpcy5naG9zdFRhYmxlLmNsZWFuKCkpfWNhbGN1''@;'; put 'put ''bGF0ZUFsbFJvd3NIZWlnaHQoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudENvbHMoKS0xfSxhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1''@;'; put 'put ''bWVudHNbMV0sZD0wO2NvbnN0IGg9dGhpcy5ob3QuY291bnRSb3dzKCktMTtsZXQgZj1udWxsO3RoaXMuaW5Qcm9ncmVzcz0hMDtjb25zdCB2PSgpPT57aWYoIXRoaXMuaG90KXJldHVybiBTRShmKSx2b2lkKHRoaXMuaW5Qcm9ncmVzcz0hMSk7dGhpcy5jYWxjdWxhdGVSb3dzSGVpZ2h0KHtm''@;'; put 'put ''cm9tOmQsdG86TWF0aC5taW4oZCtsVC5DQUxDVUxBVElPTl9TVEVQLGgpfSxsLGEpLGQ9ZCtsVC5DQUxDVUxBVElPTl9TVEVQKzEsZDxoP2Y9Q0Uodik6KFNFKGYpLHRoaXMuaW5Qcm9ncmVzcz0hMSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuaG90LnZpZXcuX3d0''@;'; put 'put ''Lnd0T3ZlcmxheXMuaW5saW5lU3RhcnRPdmVybGF5Lm5lZWRGdWxsUmVuZGVyJiZ0aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5jbG9uZS5kcmF3KCkpfSxNPXRoaXMuZ2V0U3luY0NhbGN1bGF0aW9uTGltaXQoKTtNPj0wJiYodGhpcy5jYWxjdWxhdGVS''@;'; put 'put ''b3dzSGVpZ2h0KHtmcm9tOjAsdG86TX0sbCxhKSxkPU0rMSksZDxoP3YoKToodGhpcy5pblByb2dyZXNzPSExLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCkpfXJlY2FsY3VsYXRlQWxsUm93c0hlaWdodCgpe3RoaXMuaG90LnZpZXcuaXNWaXNpYmxlKCkmJnRoaXMuY2FsY3Vs''@;'; put 'put ''YXRlQWxsUm93c0hlaWdodCh7ZnJvbTowLHRvOnRoaXMuaG90LmNvdW50Q29scygpLTF9LCEwKX1nZXRTeW5jQ2FsY3VsYXRpb25MaW1pdCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtySl07bGV0IGE9bFQuU1lOQ19DQUxDVUxBVElPTl9MSU1JVDtjb25zdCBkPXRoaXMuaG90''@;'; put 'put ''LmNvdW50Um93cygpLTE7cmV0dXJuIEthKGwpJiYoYT1sLnN5bmNMaW1pdCxlJChhKT9hPUIkKGQsYSk6YT4+PTApLE1hdGgubWluKGEsZCl9Z2V0Um93SGVpZ2h0KGwsYSl7Y29uc3QgZD1sPDA/dGhpcy5oZWFkZXJIZWlnaHQ6dGhpcy5yb3dIZWlnaHRzTWFwLmdldFZhbHVlQXRJbmRleCh0''@;'; put 'put ''aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpKTtsZXQgaD1hO3JldHVybiBudWxsIT09ZCYmZD4oYXx8MCkmJihoPWQpLGh9Z2V0Q29sdW1uSGVhZGVySGVpZ2h0KCl7cmV0dXJuIHRoaXMuaGVhZGVySGVpZ2h0fWdldEZpcnN0VmlzaWJsZVJvdygpe3ZhciBsO3JldHVybiBudWxsIT09KGw9dGhp''@;'; put 'put ''cy5ob3QuZ2V0Rmlyc3RSZW5kZXJlZFZpc2libGVSb3coKSkmJnZvaWQgMCE9PWw/bDotMX1nZXRMYXN0VmlzaWJsZVJvdygpe3ZhciBsO3JldHVybiBudWxsIT09KGw9dGhpcy5ob3QuZ2V0TGFzdFJlbmRlcmVkVmlzaWJsZVJvdygpKSYmdm9pZCAwIT09bD9sOi0xfWNsZWFyQ2FjaGUobCl7''@;'; put 'put ''dGhpcy5oZWFkZXJIZWlnaHQ9bnVsbCxBcnJheS5pc0FycmF5KGwpP3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57bC5mb3JFYWNoKGE9Pnt0aGlzLnJvd0hlaWdodHNNYXAuc2V0VmFsdWVBdEluZGV4KGEsbnVsbCl9KX0sITApOnRoaXMucm93SGVpZ2h0c01hcC5jbGVhcigpfWNsZWFy''@;'; put 'put ''Q2FjaGVCeVJhbmdlKGwpe2NvbnN0e2Zyb206YSx0bzpkfT0ibnVtYmVyIj09dHlwZW9mIGw/e2Zyb206bCx0bzpsfTpsO3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57JG8oTWF0aC5taW4oYSxkKSxNYXRoLm1heChhLGQpLGg9Pnt0aGlzLnJvd0hlaWdodHNNYXAuc2V0VmFsdWVBdElu''@;'; put 'put ''ZGV4KGgsbnVsbCl9KX0sITApfWlzTmVlZFJlY2FsY3VsYXRlKCl7cmV0dXJuISF0aGlzLnJvd0hlaWdodHNNYXAuZ2V0VmFsdWVzKCkuc2xpY2UoMCx0aGlzLm1lYXN1cmVkUm93cykuZmlsdGVyKGw9Pm51bGw9PT1sKS5sZW5ndGh9ZGVzdHJveSgpe3RoaXMuZ2hvc3RUYWJsZS5jbGVhbigp''@;'; put 'put ''LHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gWGF0KGMpe2NvbnN0IGw9e2Zyb206MCx0bzp0aGlzLmhvdC5jb3VudENvbHMoKS0xfTtjLmZvckVhY2goYT0+e3RoaXMuc2FtcGxlc0dlbmVyYXRvci5nZW5lcmF0ZVJvd1NhbXBsZXMoYSxsKS5mb3JFYWNoKChoLGYpPT50aGlzLmdob3N0VGFi''@;'; put 'put ''bGUuYWRkUm93KGYsaCkpfSksdGhpcy5naG9zdFRhYmxlLnJvd3MubGVuZ3RoJiYodGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9Pnt0aGlzLmdob3N0VGFibGUuZ2V0SGVpZ2h0cygoYSxkKT0+e2NvbnN0IGg9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhhKTt0aGlzLnJvd0hlaWdodHNNYXAu''@;'; put 'put ''c2V0VmFsdWVBdEluZGV4KGgsZCl9KX0sITApLHRoaXMuZ2hvc3RUYWJsZS5jbGVhbigpKX1mdW5jdGlvbiBKYXQoKXt0aGlzLmNhbGN1bGF0ZVZpc2libGVSb3dzSGVpZ2h0KCksdGhpcy5pblByb2dyZXNzfHwoRnAoQWcsdGhpcyxYYXQpLmNhbGwodGhpcyxuSihzVCx0aGlzKSksZnVuY3Rp''@;'; put 'put ''b24gJGF0KGMsbCxhKXtjLnNldChGcChjLGwpLGEpfShzVCx0aGlzLFtdKSl9ZnVuY3Rpb24gZDRlKGMsbCxhKXtsZXQgZD1jO3JldHVybiBhJiYodGhpcy5jYWxjdWxhdGVSb3dzSGVpZ2h0KGwsdm9pZCAwLCEwKSxkPXRoaXMuZ2V0Um93SGVpZ2h0KGwpKSxkfWZ1bmN0aW9uIFFhdChjLGwp''@;'; put 'put ''e2x8fHRoaXMucmVjYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KCl9ZnVuY3Rpb24gZXN0KGMpe2NvbnN0IGw9Yy5yZWR1Y2UoKGEsZCk9PntsZXRbaF09ZDtyZXR1cm4tMT09PWEuaW5kZXhPZihoKSYmYS5wdXNoKGgpLGF9LFtdKTtuSihzVCx0aGlzKS5wdXNoKC4uLmwpfWZ1bmN0aW9uIHRzdCgp''@;'; put 'put ''e3RoaXMucmVjYWxjdWxhdGVBbGxSb3dzSGVpZ2h0KCl9ZnVuY3Rpb24gbnN0KGMpe2NvbnN0IGw9Yy5yZWR1Y2UoKGEsZCk9Pnt2YXIgaDtjb25zdCBmPW51bGw9PT0oaD1kLmFkZHJlc3MpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLnJvdztpZihOdW1iZXIuaXNJbnRlZ2VyKGYpKXtjb25zdCB2''@;'; put 'put ''PXRoaXMuaG90LnRvVmlzdWFsUm93KGYpOy0xPT09YS5pbmRleE9mKHYpJiZhLnB1c2godil9cmV0dXJuIGF9LFtdKTtuSihzVCx0aGlzKS5wdXNoKC4uLmwpfWNvbnN0IGg0ZT1uZXcgTWFwKFtbImluZGV4ZXNTZXF1ZW5jZSIse2dldExpc3RXaXRoSW5zZXJ0ZWRJdGVtczp4SyxnZXRMaXN0''@;'; put 'put ''V2l0aFJlbW92ZWRJdGVtczpaRX1dLFsicGh5c2ljYWxseUluZGV4ZWQiLHtnZXRMaXN0V2l0aEluc2VydGVkSXRlbXM6QUssZ2V0TGlzdFdpdGhSZW1vdmVkSXRlbXM6a0t9XV0pLGY0ZT1jPT57aWYoITE9PT1oNGUuaGFzKGMpKXRocm93IG5ldyBFcnJvcihgQWx0ZXIgc3RyYXRlZ3kgd2l0''@;'; put 'put ''aCBJRCAnJHtjfScgZG9lcyBub3QgZXhpc3QuYCk7cmV0dXJuIGg0ZS5nZXQoYyl9LHtnZXRMaXN0V2l0aEluc2VydGVkSXRlbXM6cnN0LGdldExpc3RXaXRoUmVtb3ZlZEl0ZW1zOmlzdH09ZjRlKCJwaHlzaWNhbGx5SW5kZXhlZCIpLHtnZXRMaXN0V2l0aEluc2VydGVkSXRlbXM6c3N0LGdl''@;'; put 'put ''dExpc3RXaXRoUmVtb3ZlZEl0ZW1zOmxzdH09ZjRlKCJwaHlzaWNhbGx5SW5kZXhlZCIpO2NvbnN0IHA0ZT0iYmluZFJvd3NXaXRoSGVhZGVycyIsZzRlPW5ldyBNYXAoW1sibG9vc2UiLGNsYXNzIG9zdCBleHRlbmRzIHE3e2NvbnN0cnVjdG9yKCl7c3VwZXIobD0+bCl9aW5zZXJ0KGwsYSl7''@;'; put 'put ''Y29uc3QgZD1USyh0aGlzLmluZGV4ZWRWYWx1ZXMsYSk7dGhpcy5pbmRleGVkVmFsdWVzPXJzdChkLGwsYSx0aGlzLmluaXRWYWx1ZU9yRm4pLHN1cGVyLmluc2VydChsLGEpfXJlbW92ZShsKXtjb25zdCBhPWlzdCh0aGlzLmluZGV4ZWRWYWx1ZXMsbCk7dGhpcy5pbmRleGVkVmFsdWVzPUVL''@;'; put 'put ''KGEsbCksc3VwZXIucmVtb3ZlKGwpfX1dLFsic3RyaWN0IixjbGFzcyBjc3QgZXh0ZW5kcyBxN3tjb25zdHJ1Y3Rvcigpe3N1cGVyKGw9PmwpfWluc2VydChsLGEpe3RoaXMuaW5kZXhlZFZhbHVlcz1zc3QodGhpcy5pbmRleGVkVmFsdWVzLGwsYSwoZCxoKT0+dGhpcy5nZXROZXh0VmFsdWUo''@;'; put 'put ''aCkpLHN1cGVyLmluc2VydChsLGEpfXJlbW92ZShsKXt0aGlzLmluZGV4ZWRWYWx1ZXM9bHN0KHRoaXMuaW5kZXhlZFZhbHVlcyxsKSxzdXBlci5yZW1vdmUobCl9Z2V0TmV4dFZhbHVlKGwpe3JldHVybiBNYXRoLm1heCguLi50aGlzLmdldFZhbHVlcygpKSsxK2x9fV1dKTt2YXIgbTRlPW5l''@;'; put 'put ''dyBXZWFrU2V0O2NsYXNzIHlzdCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBkc3QoYyxsKXsoZnVuY3Rpb24gaHN0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJp''@;'; put 'put ''dmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsbTRlKSxmdW5jdGlvbiBmc3QoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHBzdChjKXt2YXIgbD1mdW5jdGlvbiBnc3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBj''@;'; put 'put ''O3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZh''@;'; put 'put ''bHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3''@;'; put 'put ''cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJoZWFkZXJJbmRleGVzIixudWxsKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gcDRlfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDIxMH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdz''@;'; put 'put ''KClbcDRlXX1lbmFibGVQbHVnaW4oKXt2YXIgbDtpZih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0IGE9bnVsbCE9PShsPWc0ZS5nZXQodGhpcy5nZXRTZXR0aW5nKCkpKSYmdm9pZCAwIT09bD9sOmc0ZS5nZXQoImxvb3NlIik7dGhpcy5oZWFkZXJJbmRleGVzPXRoaXMuaG90LnJvd0luZGV4''@;'; put 'put ''TWFwcGVyLnJlZ2lzdGVyTWFwKCJiaW5kUm93c1dpdGhIZWFkZXJzIixuZXcgYSksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dIZWFkZXIiLGQ9PmZ1bmN0aW9uIG1zdChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8''@;'; put 'put ''Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9KG00ZSx0aGlzLF9zdCkuY2FsbCh0aGlzLGQpKSxzdXBlci5lbmFibGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIu''@;'; put 'put ''dW5yZWdpc3Rlck1hcCgiYmluZFJvd3NXaXRoSGVhZGVycyIpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBfc3QoYyl7cmV0dXJuIHRoaXMuaGVhZGVySW5kZXhlcy5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbFJv''@;'; put 'put ''dyhjKSl9ZnVuY3Rpb24gdjRlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBiNGUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFNzdChj''@;'; put 'put ''KXt2YXIgbD1mdW5jdGlvbiBNc3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIHk0ZShjLGwpe3JldHVybiBjLmdldChIXyhjLGwpKX1mdW5jdGlvbiBpSihjLGwsYSl7cmV0dXJuIGMuc2V0KEhfKGMsbCksYSks''@;'; put 'put ''YX1mdW5jdGlvbiBIXyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3Qg''@;'; put 'put ''R1A9ImNvbGxhcHNpYmxlQ29sdW1ucyIsRXN0PVsibmVzdGVkSGVhZGVycyJdLE5fPSJjb2xsYXBzaWJsZUluZGljYXRvciIsXzRlPUdQLHc0ZT1uZXcgTWFwKFtbImNvbGxhcHNlIix7aGlkZUNvbHVtbjohMCxiZWZvcmVIb29rOiJiZWZvcmVDb2x1bW5Db2xsYXBzZSIsYWZ0ZXJIb29rOiJh''@;'; put 'put ''ZnRlckNvbHVtbkNvbGxhcHNlIn1dLFsiZXhwYW5kIix7aGlkZUNvbHVtbjohMSxiZWZvcmVIb29rOiJiZWZvcmVDb2x1bW5FeHBhbmQiLGFmdGVySG9vazoiYWZ0ZXJDb2x1bW5FeHBhbmQifV1dKTt2YXIgVl89bmV3IFdlYWtNYXAsY1Q9bmV3IFdlYWtTZXQ7Y2xhc3MgVHN0IGV4dGVuZHMg''@;'; put 'put ''RnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIHdzdChjLGwpe3Y0ZShjLGwpLGwuYWRkKGMpfSh0aGlzLGNUKSxiNGUodGhpcywibmVzdGVkSGVhZGVyc1BsdWdpbiIsbnVsbCksYjRlKHRoaXMsImhlYWRlclN0YXRlTWFuYWdlciIsbnVsbCksZnVuY3Rpb24g''@;'; put 'put ''Q3N0KGMsbCxhKXt2NGUoYyxsKSxsLnNldChjLGEpfSh0aGlzLFZfLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBHUH1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyOTB9c3RhdGljIGdldCBQTFVHSU5fREVQUygpe3JldHVyblsicGx1Z2luOk5lc3Rl''@;'; put 'put ''ZEhlYWRlcnMiXX1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVybltHUCwuLi5Fc3RdfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtHUF19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0e25lc3RlZEhl''@;'; put 'put ''YWRlcnM6YX09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTthfHx0bCgiWW91IG5lZWQgdG8gY29uZmlndXJlIHRoZSBOZXN0ZWQgSGVhZGVycyBwbHVnaW4gaW4gb3JkZXIgdG8gdXNlIGNvbGxhcHNpYmxlIGhlYWRlcnMuIiksaUooVl8sdGhpcyx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5j''@;'; put 'put ''cmVhdGVBbmRSZWdpc3RlckluZGV4TWFwKHRoaXMucGx1Z2luTmFtZSwiaGlkaW5nIikpLHRoaXMubmVzdGVkSGVhZGVyc1BsdWdpbj10aGlzLmhvdC5nZXRQbHVnaW4oIm5lc3RlZEhlYWRlcnMiKSx0aGlzLmhlYWRlclN0YXRlTWFuYWdlcj10aGlzLm5lc3RlZEhlYWRlcnNQbHVnaW4uZ2V0''@;'; put 'put ''U3RhdGVNYW5hZ2VyKCksdGhpcy5hZGRIb29rKCJpbml0IiwoKT0+SF8oY1QsdGhpcyxEc3QpLmNhbGwodGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJMb2FkRGF0YSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2Zd''@;'; put 'put ''PWFyZ3VtZW50c1tmXTtyZXR1cm4gSF8oY1QsbCxJc3QpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJHZXRDb2xIZWFkZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07''@;'; put 'put ''cmV0dXJuIEhfKGNULGwsQXN0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsKGQsaCxmKT0+SF8oY1QsdGhpcyxrc3QpLmNhbGwodGhpcyxkLGgsZikpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSx0aGlz''@;'; put 'put ''LnVwZGF0ZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe2lmKHRoaXMuaG90LnZpZXcpe2lmKCF0aGlzLm5lc3RlZEhlYWRlcnNQbHVnaW4uZGV0ZWN0ZWRPdmVybGFwcGVkSGVhZGVycyl7Y29uc3R7Y29sbGFwc2libGVDb2x1bW5zOmx9PXRoaXMuaG90LmdldFNldHRpbmdzKCk7ImJvb2xlYW4i''@;'; put 'put ''PT10eXBlb2YgbD90aGlzLmhlYWRlclN0YXRlTWFuYWdlci5tYXBTdGF0ZShhPT4oe2NvbGxhcHNpYmxlOmEub3JpZ0NvbHNwYW4+MX0pKTpBcnJheS5pc0FycmF5KGwpJiYodGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIubWFwU3RhdGUoKCk9Pih7Y29sbGFwc2libGU6ITF9KSksdGhpcy5oZWFk''@;'; put 'put ''ZXJTdGF0ZU1hbmFnZXIubWVyZ2VTdGF0ZVdpdGgobCkpfXN1cGVyLnVwZGF0ZVBsdWdpbigpfX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpLGlKKFZfLHRoaXMsbnVsbCksdGhpcy5uZXN0ZWRIZWFkZXJz''@;'; put 'put ''UGx1Z2luPW51bGwsdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCksdGhpcy5jbGVhckJ1dHRvbnMoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9cmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXQoe2tl''@;'; put 'put ''eXM6W1siRW50ZXIiXV0sY2FsbGJhY2s6KCk9Pnt2YXIgbDtjb25zdHtyb3c6YSxjb2w6ZH09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5oaWdobGlnaHQse2NvbGxhcHNpYmxlOmgsaXNDb2xsYXBzZWQ6Zixjb2x1bW5JbmRleDp2fT1udWxsIT09KGw9dGhpcy5oZWFkZXJTdGF0''@;'; put 'put ''ZU1hbmFnZXIuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKGEsZCkpJiZ2b2lkIDAhPT1sP2w6e307aWYoaClyZXR1cm4gZj90aGlzLmV4cGFuZFNlY3Rpb24oe3JvdzphLGNvbDp2fSk6dGhpcy5jb2xsYXBzZVNlY3Rpb24oe3JvdzphLGNvbDp2fSksITF9LHJ1bk9ubHlJZjooKT0+e3ZhciBsLGE7''@;'; put 'put ''cmV0dXJuKG51bGw9PT0obD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09bD92b2lkIDA6bC5pc1NpbmdsZSgpKSYmKG51bGw9PT0oYT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5oaWdobGlnaHQuaXNIZWFk''@;'; put 'put ''ZXIoKSl9LGdyb3VwOl80ZSxyZWxhdGl2ZVRvR3JvdXA6VW0scG9zaXRpb246ImJlZm9yZSJ9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoXzRlKX1jbGVhckJ1dHRv''@;'; put 'put ''bnMoKXtpZighdGhpcy5ob3QudmlldylyZXR1cm47Y29uc3QgbD10aGlzLmhvdC52aWV3Ll93dC5nZXRTZXR0aW5nKCJjb2x1bW5IZWFkZXJzIikubGVuZ3RoLGE9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZS5USEVBRCxkPXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMudG9wT3Zlcmxh''@;'; put 'put ''eS5jbG9uZS53dFRhYmxlLlRIRUFELGg9dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXk/dGhpcy5ob3Qudmlldy5fd3Qud3RPdmVybGF5cy50b3BJbmxpbmVTdGFydENvcm5lck92ZXJsYXkuY2xvbmUud3RUYWJsZS5USEVBRDpudWxsLGY9''@;'; put 'put ''ZnVuY3Rpb24odil7diYmdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHYpfTskbygwLGwtMSx2PT57Y29uc3QgTT1hLmNoaWxkTm9kZXNbdl0sRD1kLmNoaWxkTm9kZXNbdl0sWj1oP2guY2hpbGROb2Rlc1t2XTpudWxsOyRvKDAsTS5jaGlsZE5vZGVzLmxlbmd0aC0xLG5lPT57bGV0IGNlPU0u''@;'; put 'put ''Y2hpbGROb2Rlc1tuZV0ucXVlcnlTZWxlY3RvcihgLiR7Tl99YCk7ZihjZSksRCYmRC5jaGlsZE5vZGVzW25lXSYmKGNlPUQuY2hpbGROb2Rlc1tuZV0ucXVlcnlTZWxlY3RvcihgLiR7Tl99YCksZihjZSkpLGgmJlomJlouY2hpbGROb2Rlc1tuZV0mJihjZT1aLmNoaWxkTm9kZXNbbmVdLnF1''@;'; put 'put ''ZXJ5U2VsZWN0b3IoYC4ke05ffWApLGYoY2UpKX0pfSl9ZXhwYW5kU2VjdGlvbihsKXt0aGlzLnRvZ2dsZUNvbGxhcHNpYmxlU2VjdGlvbihbbF0sImV4cGFuZCIpfWNvbGxhcHNlU2VjdGlvbihsKXt0aGlzLnRvZ2dsZUNvbGxhcHNpYmxlU2VjdGlvbihbbF0sImNvbGxhcHNlIil9dG9nZ2xl''@;'; put 'put ''QWxsQ29sbGFwc2libGVTZWN0aW9ucyhsKXtjb25zdCBhPXRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLm1hcE5vZGVzKGQ9Pntjb25zdHtjb2xsYXBzaWJsZTpoLG9yaWdDb2xzcGFuOmYsaGVhZGVyTGV2ZWw6dixjb2x1bW5JbmRleDpNLGlzQ29sbGFwc2VkOkR9PWQ7aWYoITA9PT1oJiZmPjEm''@;'; put 'put ''JihEJiYiZXhwYW5kIj09PWx8fCFEJiYiY29sbGFwc2UiPT09bCkpcmV0dXJue3Jvdzp0aGlzLmhlYWRlclN0YXRlTWFuYWdlci5sZXZlbFRvUm93Q29vcmRzKHYpLGNvbDpNfX0pO3RoaXMudG9nZ2xlQ29sbGFwc2libGVTZWN0aW9uKGEsbCl9Y29sbGFwc2VBbGwoKXt0aGlzLnRvZ2dsZUFs''@;'; put 'put ''bENvbGxhcHNpYmxlU2VjdGlvbnMoImNvbGxhcHNlIil9ZXhwYW5kQWxsKCl7dGhpcy50b2dnbGVBbGxDb2xsYXBzaWJsZVNlY3Rpb25zKCJleHBhbmQiKX10b2dnbGVDb2xsYXBzaWJsZVNlY3Rpb24obCxhKXtpZighdzRlLmhhcyhhKSl0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGFj''@;'; put 'put ''dGlvbiBpcyBwYXNzZWQgKCR7YX0pLmApO2lmKCFBcnJheS5pc0FycmF5KGwpKXJldHVybjtjb25zdCBkPUFtKGwsRWU9PntsZXR7cm93OkJlfT1FZTtyZXR1cm4gQmU8MH0pO2xldCBoPWQubGVuZ3RoPjA7WW4oZCxFZT0+e3ZhciBCZTtsZXR7cm93OnFlLGNvbDpudH09RWU7Y29uc3R7Y29s''@;'; put 'put ''bGFwc2libGU6bHQsaXNDb2xsYXBzZWQ6bXR9PW51bGwhPT0oQmU9dGhpcy5oZWFkZXJTdGF0ZU1hbmFnZXIuZ2V0SGVhZGVyU2V0dGluZ3MocWUsbnQpKSYmdm9pZCAwIT09QmU/QmU6e307aWYoIWx0fHxtdCYmImNvbGxhcHNlIj09PWF8fCFtdCYmImV4cGFuZCI9PT1hKXJldHVybiBoPSEx''@;'; put 'put ''LCExfSk7Y29uc3QgZj1bXSx2PVtdO2gmJlluKGQsRWU9PntsZXR7cm93OkJlLGNvbDpxZX09RWU7Y29uc3R7Y29sc3BhbkNvbXBlbnNhdGlvbjpudCxhZmZlY3RlZENvbHVtbnM6bHQscm9sbGJhY2tNb2RpZmljYXRpb246bXR9PXRoaXMuaGVhZGVyU3RhdGVNYW5hZ2VyLnRyaWdnZXJOb2Rl''@;'; put 'put ''TW9kaWZpY2F0aW9uKGEsQmUscWUpO250PjAmJih2LnB1c2goLi4ubHQpLGYucHVzaChtdCkpfSk7Y29uc3QgTT10aGlzLmdldENvbGxhcHNlZENvbHVtbnMoKTtsZXQgRD1bXTsiY29sbGFwc2UiPT09YT9EPWUyZShbLi4uTSwuLi52XSk6ImV4cGFuZCI9PT1hJiYoRD1BbShNLEVlPT4hdi5p''@;'; put 'put ''bmNsdWRlcyhFZSkpKTtjb25zdCBaPXc0ZS5nZXQoYSk7aWYoITE9PT10aGlzLmhvdC5ydW5Ib29rcyhaLmJlZm9yZUhvb2ssTSxELGgpKXJldHVybiB2b2lkIFluKGYsRWU9PntFZSgpfSk7dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntZbih2LEVlPT57eTRlKFZfLHRoaXMpLnNldFZh''@;'; put 'put ''bHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKEVlKSxaLmhpZGVDb2x1bW4pfSl9LCEwKTtjb25zdCBjZT10aGlzLmdldENvbGxhcHNlZENvbHVtbnMoKS5sZW5ndGghPT1NLmxlbmd0aCxiZT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCJjb2xsYXBzZSI9''@;'; put 'put ''PT1hJiZjZSYmYmUpe2NvbnN0e3JvdzpFZSxjb2w6QmV9PWJlLmhpZ2hsaWdodDtpZigodGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuaXNIaWRkZW4oRWUpfHx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5pc0hpZGRlbihCZSkpJiZ2LmluY2x1ZGVzKEJlKSl7Y29uc3QgbnQ9RWU+PTA/dGhp''@;'; put 'put ''cy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KEVlLDEsITApOkVlLGx0PUJlPj0wP3RoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChCZSwxLCEwKTpCZTtudWxsIT09bnQmJm51bGwhPT1sdCYmdGhpcy5ob3Quc2Vs''@;'; put 'put ''ZWN0Q2VsbChudCxsdCl9fXRoaXMuaG90LnJ1bkhvb2tzKFouYWZ0ZXJIb29rLE0sRCxoLGNlKSx0aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfWdldENvbGxhcHNlZENvbHVtbnMoKXtyZXR1cm4geTRlKFZfLHRoaXMpLmdldEhpZGRlbkluZGV4''@;'; put 'put ''ZXMoKX1kZXN0cm95KCl7aUooVl8sdGhpcyxudWxsKSxzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIEFzdChjLGwsYSl7dmFyIGQ7Y29uc3R7Y29sbGFwc2libGU6aCxvcmlnQ29sc3BhbjpmLGlzQ29sbGFwc2VkOnZ9PW51bGwhPT0oZD10aGlzLmhlYWRlclN0YXRlTWFuYWdlci5nZXRIZWFk''@;'; put 'put ''ZXJTZXR0aW5ncyhhLGMpKSYmdm9pZCAwIT09ZD9kOnt9LE09aCYmZj4xJiZjPj10aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LEQ9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncztsZXQgWj1sLnF1ZXJ5U2VsZWN0b3IoYC4ke05ffWApO3ZhciBuZTtINyhs''@;'; put 'put ''LFtEMigiIilbMF1dKSxNPyhafHwoWj10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksVGkoWixOXyksbC5xdWVyeVNlbGVjdG9yKCJkaXY6Zmlyc3QtY2hpbGQiKS5hcHBlbmRDaGlsZChaKSksY2EoWixbImNvbGxhcHNlZCIsImV4cGFuZGVkIl0pLHY/KFRpKFos''@;'; put 'put ''ImNvbGxhcHNlZCIpLExtKFosIisiKSxEJiZ2YShsLC4uLkQyKCExKSkpOihUaShaLCJleHBhbmRlZCIpLExtKFosIi0iKSxEJiZ2YShsLC4uLkQyKCEwKSkpLEQmJnZhKFosLi4ua20oKSkpOm51bGw9PT0obmU9Wil8fHZvaWQgMD09PW5lfHxuZS5yZW1vdmUoKX1mdW5jdGlvbiBrc3QoYyxs''@;'; put 'put ''KXtwYShjLnRhcmdldCxOXykmJihwYShjLnRhcmdldCwiZXhwYW5kZWQiKT8odGhpcy5ldmVudE1hbmFnZXIuZmlyZUV2ZW50KGMudGFyZ2V0LCJtb3VzZXVwIiksdGhpcy50b2dnbGVDb2xsYXBzaWJsZVNlY3Rpb24oW2xdLCJjb2xsYXBzZSIpKTpwYShjLnRhcmdldCwiY29sbGFwc2VkIikm''@;'; put 'put ''Jih0aGlzLmV2ZW50TWFuYWdlci5maXJlRXZlbnQoYy50YXJnZXQsIm1vdXNldXAiKSx0aGlzLnRvZ2dsZUNvbGxhcHNpYmxlU2VjdGlvbihbbF0sImV4cGFuZCIpKSxSMihjKSl9ZnVuY3Rpb24gRHN0KCl7dGhpcy51cGRhdGVQbHVnaW4oKX1mdW5jdGlvbiBJc3QoYyxsKXtsfHx0aGlzLnVw''@;'; put 'put ''ZGF0ZVBsdWdpbigpfWZ1bmN0aW9uIHU5KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBSc3QoYyl7dmFyIGw9ZnVuY3Rpb24gTHN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9''@;'; put 'put ''YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJz''@;'; put 'put ''dHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBPc3Q9WyJzb3J0RW1wdHlDZWxscyIs''@;'; put 'put ''ImluZGljYXRvciIsImhlYWRlckFjdGlvbiIsImNvbXBhcmVGdW5jdGlvbkZhY3RvcnkiXTtjbGFzcyBOc3R7Y29uc3RydWN0b3IobCxhKXt1OSh0aGlzLCJob3QiLHZvaWQgMCksdTkodGhpcywic29ydGluZ1N0YXRlcyIsbmV3IGxQKSx1OSh0aGlzLCJzb3J0RW1wdHlDZWxscyIsITEpLHU5''@;'; put 'put ''KHRoaXMsImluZGljYXRvciIsITApLHU5KHRoaXMsImhlYWRlckFjdGlvbiIsITApLHU5KHRoaXMsImNvbXBhcmVGdW5jdGlvbkZhY3RvcnkiLHZvaWQgMCksdTkodGhpcywibWFwTmFtZSIsdm9pZCAwKSx0aGlzLmhvdD1sLHRoaXMubWFwTmFtZT1hLHRoaXMuaG90LmNvbHVtbkluZGV4TWFw''@;'; put 'put ''cGVyLnJlZ2lzdGVyTWFwKGEsdGhpcy5zb3J0aW5nU3RhdGVzKX11cGRhdGVBbGxDb2x1bW5zUHJvcGVydGllcyhsKXtLYShsKSYmcWEobCwoYSxkKT0+e09zdC5pbmNsdWRlcyhkKSYmKHRoaXNbZF09YSl9KX1nZXRBbGxDb2x1bW5zUHJvcGVydGllcygpe2NvbnN0IGw9e3NvcnRFbXB0eUNl''@;'; put 'put ''bGxzOnRoaXMuc29ydEVtcHR5Q2VsbHMsaW5kaWNhdG9yOnRoaXMuaW5kaWNhdG9yLGhlYWRlckFjdGlvbjp0aGlzLmhlYWRlckFjdGlvbn07cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeSYmKGwuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeT10aGlz''@;'; put 'put ''LmNvbXBhcmVGdW5jdGlvbkZhY3RvcnkpLGx9Z2V0U29ydE9yZGVyT2ZDb2x1bW4obCl7dmFyIGE7cmV0dXJuIG51bGw9PT0oYT10aGlzLnNvcnRpbmdTdGF0ZXMuZ2V0VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5zb3J0''@;'; put 'put ''T3JkZXJ9Z2V0SW5kZXhPZkNvbHVtbkluU29ydFF1ZXVlKGwpe3JldHVybiBsPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCksdGhpcy5zb3J0aW5nU3RhdGVzLmdldEVudHJpZXMoKS5maW5kSW5kZXgoYT0+e2xldFtkXT1hO3JldHVybiBkPT09bH0pfWdldE51bWJlck9mU29ydGVkQ29s''@;'; put 'put ''dW1ucygpe3JldHVybiB0aGlzLnNvcnRpbmdTdGF0ZXMuZ2V0TGVuZ3RoKCl9aXNMaXN0T2ZTb3J0ZWRDb2x1bW5zRW1wdHkoKXtyZXR1cm4gMD09PXRoaXMuZ2V0TnVtYmVyT2ZTb3J0ZWRDb2x1bW5zKCl9aXNDb2x1bW5Tb3J0ZWQobCl7cmV0dXJuIEthKHRoaXMuc29ydGluZ1N0YXRlcy5n''@;'; put 'put ''ZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSkpfWdldFNvcnRTdGF0ZXMoKXtyZXR1cm4gbnVsbD09PXRoaXMuc29ydGluZ1N0YXRlcz9bXTp0aGlzLnNvcnRpbmdTdGF0ZXMuZ2V0RW50cmllcygpLm1hcChhPT57bGV0W2QsaF09YTtyZXR1cm57Y29sdW1uOnRo''@;'; put 'put ''aXMuaG90LnRvVmlzdWFsQ29sdW1uKGQpLC4uLmh9fSl9Z2V0Q29sdW1uU29ydFN0YXRlKGwpe2NvbnN0IGE9dGhpcy5nZXRTb3J0T3JkZXJPZkNvbHVtbihsKTtpZihGbyhhKSlyZXR1cm57Y29sdW1uOmwsc29ydE9yZGVyOmF9fXNldFNvcnRTdGF0ZXMobCl7dGhpcy5zb3J0aW5nU3RhdGVz''@;'; put 'put ''LmNsZWFyKCk7Zm9yKGxldCBhPTA7YTxsLmxlbmd0aDthKz0xKXRoaXMuc29ydGluZ1N0YXRlcy5zZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsW2FdLmNvbHVtbikse3NvcnRPcmRlcjpsW2FdLnNvcnRPcmRlcn0pfWRlc3Ryb3koKXt0aGlzLmhvdC5jb2x1bW5J''@;'; put 'put ''bmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMubWFwTmFtZSksdGhpcy5zb3J0aW5nU3RhdGVzPW51bGx9fWZ1bmN0aW9uIEM0ZShjLGwsYSl7Y29uc3QgZD1sLmxvY2FsZTtyZXR1cm4gZnVuY3Rpb24oaCxmKXtjb25zdHtzb3J0RW1wdHlDZWxsczp2fT1hO3JldHVybiJzdHJpbmciPT10''@;'; put 'put ''eXBlb2YgaCYmKGg9aC50b0xvY2FsZUxvd2VyQ2FzZShkKSksInN0cmluZyI9PXR5cGVvZiBmJiYoZj1mLnRvTG9jYWxlTG93ZXJDYXNlKGQpKSxoPT09Zj9IcDpVYyhoKT9VYyhmKT9IcDp2JiYiYXNjIj09PWM/WWM6R2M6VWMoZik/diYmImFzYyI9PT1jP0djOlljOmlzTmFOKGgpJiYhaXNO''@;'; put 'put ''YU4oZik/ImFzYyI9PT1jP0djOlljOiFpc05hTihoKSYmaXNOYU4oZil8fChpc05hTihoKXx8aXNOYU4oZil8fChoPXBhcnNlRmxvYXQoaCksZj1wYXJzZUZsb2F0KGYpKSxoPGYpPyJhc2MiPT09Yz9ZYzpHYzpoPmY/ImFzYyI9PT1jP0djOlljOkhwfX1jb25zdHtyZWdpc3Rlcjp1VCxnZXRJ''@;'; put 'put ''dGVtOk00ZSxoYXNJdGVtOkdzdH09UWYoInNvcnRpbmcuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeSIpLHtyZWdpc3Rlcjp4NGUsZ2V0SXRlbTokc3R9PVFmKCJzb3J0aW5nLm1haW5Tb3J0Q29tcGFyYXRvciIpO2Z1bmN0aW9uIEU0ZShjKXtyZXR1cm4gR3N0KGMpP000ZShjKTpNNGUoImRlZmF1''@;'; put 'put ''bHQiKX11VCgiY2hlY2tib3giLGZ1bmN0aW9uIGpzdChjLGwsYSl7Y29uc3QgZD1sLmNoZWNrZWRUZW1wbGF0ZSxoPWwudW5jaGVja2VkVGVtcGxhdGUse3NvcnRFbXB0eUNlbGxzOmZ9PWE7cmV0dXJuIGZ1bmN0aW9uKHYsTSl7Y29uc3QgRD1VYyh2KSxaPVVjKE0pLG5lPUQ/aDp2LGNlPVo/''@;'; put 'put ''aDpNLGJlPW5lPT09aHx8bmU9PT1kLEVlPWNlPT09aHx8Y2U9PT1kO2lmKCExPT09Zil7aWYoRCYmITE9PT1aKXJldHVybiBHYztpZighMT09PUQmJlopcmV0dXJuIFljfXJldHVybiExPT09YmUmJkVlPyJhc2MiPT09Yz9ZYzpHYzpiZSYmITE9PT1FZT8iYXNjIj09PWM/R2M6WWM6ITE9PT1i''@;'; put 'put ''ZSYmITE9PT1FZT9DNGUoYyxsLGEpKHYsTSk6bmU9PT1oJiZjZT09PWQ/ImFzYyI9PT1jP1ljOkdjOm5lPT09ZCYmY2U9PT1oPyJhc2MiPT09Yz9HYzpZYzpIcH19KSx1VCgiZGF0ZSIsZnVuY3Rpb24gVXN0KGMsbCxhKXtyZXR1cm4gSTRlKGMsbC5kYXRlRm9ybWF0LGEpfSksdVQoImRlZmF1''@;'; put 'put ''bHQiLEM0ZSksdVQoIm51bWVyaWMiLGZ1bmN0aW9uIFZzdChjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uKGQsaCl7Y29uc3QgZj1wYXJzZUZsb2F0KGQpLHY9cGFyc2VGbG9hdChoKSx7c29ydEVtcHR5Q2VsbHM6TX09YTtpZihmPT09dnx8aXNOYU4oZikmJmlzTmFOKHYpKXJldHVybiBIcDtpZihN''@;'; put 'put ''KXtpZihVYyhkKSlyZXR1cm4iYXNjIj09PWM/WWM6R2M7aWYoVWMoaCkpcmV0dXJuImFzYyI9PT1jP0djOlljfXJldHVybiBpc05hTihmKT9HYzppc05hTih2KT9ZYzpmPHY/ImFzYyI9PT1jP1ljOkdjOmY+dj8iYXNjIj09PWM/R2M6WWM6SHB9fSksdVQoInRpbWUiLGZ1bmN0aW9uIFdzdChj''@;'; put 'put ''LGwsYSl7cmV0dXJuIEk0ZShjLGwudGltZUZvcm1hdCxhKX0pO2NvbnN0IEhwPTAsWWM9LTEsR2M9MSwkUD0iYXNjIixLUD0iZGVzYyIsVDRlPSJjb2xIZWFkZXIiO2Z1bmN0aW9uIEE0ZShjKXtpZihjIT09S1ApcmV0dXJuIGM9PT0kUD9LUDokUH1mdW5jdGlvbiBrNGUoYyl7cmV0dXJuIGMu''@;'; put 'put ''cXVlcnlTZWxlY3RvcihgLiR7VDRlfWApfWZ1bmN0aW9uIEQ0ZShjLGwpe2lmKGM8MHx8IWwucGFyZW50Tm9kZSlyZXR1cm4hMTtjb25zdCBhPWwucGFyZW50Tm9kZS5wYXJlbnROb2RlLmNoaWxkTm9kZXM7cmV0dXJuIEFycmF5LmZyb20oYSkuaW5kZXhPZihsLnBhcmVudE5vZGUpLWEubGVu''@;'; put 'put ''Z3RoPT0tMX1mdW5jdGlvbiBvSihjLGwsYSl7cmV0dXJuLTE9PT1jJiZsPj0wJiYhMT09PVBtKGEpfWZ1bmN0aW9uIEk0ZShjLGwsYSl7cmV0dXJuIGZ1bmN0aW9uKGQsaCl7Y29uc3R7c29ydEVtcHR5Q2VsbHM6Zn09YTtpZihkPT09aClyZXR1cm4gSHA7aWYoVWMoZCkpcmV0dXJuIFVjKGgp''@;'; put 'put ''P0hwOmYmJiJhc2MiPT09Yz9ZYzpHYztpZihVYyhoKSlyZXR1cm4gZiYmImFzYyI9PT1jP0djOlljO2NvbnN0IHY9TGEoZCxsKSxNPUxhKGgsbCk7cmV0dXJuIHYuaXNWYWxpZCgpP00uaXNWYWxpZCgpP00uaXNBZnRlcih2KT8iYXNjIj09PWM/WWM6R2M6TS5pc0JlZm9yZSh2KT8iYXNjIj09''@;'; put 'put ''PWM/R2M6WWM6SHA6WWM6R2N9fWNvbnN0IFI0ZT0iaW5kaWNhdG9yRGlzYWJsZWQiLEw0ZT0iY29sdW1uU29ydGluZyIsTzRlPSJzb3J0QWN0aW9uIixQNGU9bmV3IE1hcChbWyRQLCJhc2NlbmRpbmciXSxbS1AsImRlc2NlbmRpbmciXV0pO2Z1bmN0aW9uIHFQKGMsbCxhKXtyZXR1cm4obD1m''@;'; put 'put ''dW5jdGlvbiBhbHQoYyl7dmFyIGw9ZnVuY3Rpb24gc2x0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9m''@;'; put 'put ''IGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShs''@;'; put 'put ''KSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBCXyhjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgWFA9ImNvbHVtblNvcnRpbmciLEpQPSJhcHBlbmQiLEY0ZT1YUDt4NGUoWFAsZnVuY3Rpb24gcmx0KGMsbCl7cmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uKGEsZCl7Y29uc3RbLC4uLmhdPWEsWywuLi5mXT1kO3JldHVybiBmdW5jdGlvbihNKXtjb25zdCBEPWNbMF0sWj1sWzBdLG5lPWhbMF0sY2U9ZlswXSxiZT1aLmNvbHVtblNvcnRpbmc7cmV0dXJuKGJlLmNvbXBhcmVGdW5jdGlvbkZhY3Rvcnk/YmUuY29tcGFyZUZ1bmN0aW9uRmFj''@;'; put 'put ''dG9yeTpFNGUoWi50eXBlKSkoRCxaLGJlKShuZSxjZSl9KCl9fSksQW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImJlZm9yZUNvbHVtblNvcnQiKSxBby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb2x1bW5Tb3J0Iik7Y29uc3QgZFQ9bmV3IFdlYWtNYXA7dmFyIGQ5PW5ldyBX''@;'; put 'put ''ZWFrU2V0O2NsYXNzIEg0ZSBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBpbHQoYyxsKXsoZnVuY3Rpb24gb2x0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0''@;'; put 'put ''ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsZDkpLHFQKHRoaXMsImNvbHVtblN0YXRlc01hbmFnZXIiLG51bGwpLHFQKHRoaXMsImNvbHVtbk1ldGFDYWNoZSIsbnVsbCkscVAodGhpcywicGx1Z2luS2V5IixYUCkscVAodGhpcywiaW5kZXhl''@;'; put 'put ''c1NlcXVlbmNlQ2FjaGUiLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBYUH1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiA1MH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbdGhpcy5wbHVnaW5LZXldfWVuYWJsZVBsdWdp''@;'; put 'put ''bigpe3ZhciBsPXRoaXM7aWYoZFQuaGFzKHRoaXMuaG90KSYmZFQuZ2V0KHRoaXMuaG90KSE9PXRoaXMucGx1Z2luS2V5KXJldHVybiB0aGlzLmhvdC51cGRhdGVTZXR0aW5ncyh7W3RoaXMucGx1Z2luS2V5XTohMX0pLHZvaWQgZnVuY3Rpb24gSnN0KGMsbCl7dGwoZmxgUGx1Z2lucyBcYGNv''@;'; put 'put ''bHVtblNvcnRpbmdcYCBhbmQgXGBtdWx0aUNvbHVtblNvcnRpbmdcYCBzaG91bGQgbm90IGJlIGVuYWJsZWQgc2ltdWx0YW5lb3VzbHkuXHgyMAogICAgT25seSBcYCR7Y31cYCB3aWxsIHdvcmsuIFRoZSBcYCR7bH1cYCBwbHVnaW4gd2lsbCByZW1haW4gZGlzYWJsZWQuYCl9KGRULmdldCh0''@;'; put 'put ''aGlzLmhvdCksdGhpcy5wbHVnaW5LZXkpO3RoaXMuZW5hYmxlZHx8KGRULnNldCh0aGlzLmhvdCx0aGlzLnBsdWdpbktleSksdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyPW5ldyBOc3QodGhpcy5ob3QsYCR7dGhpcy5wbHVnaW5LZXl9LnNvcnRpbmdTdGF0ZXNgKSx0aGlzLmNvbHVtbk1ldGFD''@;'; put 'put ''YWNoZT1uZXcgem0oYT0+e2xldCBkPXRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGEpO3JldHVybiBudWxsPT09ZCYmKGQ9YSksdGhpcy5nZXRNZXJnZWRQbHVnaW5TZXR0aW5ncyhkKX0pLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnJlZ2lzdGVyTWFwKGAke3RoaXMucGx1Z2luS2V5fS5j''@;'; put 'put ''b2x1bW5NZXRhYCx0aGlzLmNvbHVtbk1ldGFDYWNoZSksdGhpcy5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsKGEsZCk9PkJfKGQ5LHRoaXMsdWx0KS5jYWxsKHRoaXMsYSxkKSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIEJfKGQ5LGwsaGx0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyT25DZWxsTW91c2VEb3duIiwoYSxkKT0+dGhpcy5vbkFmdGVyT25DZWxsTW91c2VEb3du''@;'; put 'put ''KGEsZCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJJbml0IiwoKT0+Ql8oZDksdGhpcyxhSikuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJn''@;'; put 'put ''dW1lbnRzW2hdO3JldHVybiBCXyhkOSxsLGRsdCkuY2FsbChsLC4uLmQpfSksdGhpcy5ob3QudmlldyYmQl8oZDksdGhpcyxhSikuY2FsbCh0aGlzKSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXtjb25zdCBsPShhLGQpPT57''@;'; put 'put ''Y29uc3QgaD1rNGUoZCk7ITE9PT1ENGUoYSxkKXx8bnVsbD09PWh8fHRoaXMudXBkYXRlSGVhZGVyQ2xhc3NlcyhoKX07ZFQuZGVsZXRlKHRoaXMuaG90KSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsbCksdGhpcy5ob3QuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRl''@;'; put 'put ''ciIsKCk9Pnt0aGlzLmhvdC5yZW1vdmVIb29rKCJhZnRlckdldENvbEhlYWRlciIsbCl9KSx0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e251bGwhPT10aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlJiYodGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMu''@;'; put 'put ''aW5kZXhlc1NlcXVlbmNlQ2FjaGUuZ2V0VmFsdWVzKCkpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5LZXkpLHRoaXMuaW5kZXhlc1NlcXVlbmNlQ2FjaGU9bnVsbCl9LCEwKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFw''@;'; put 'put ''KGAke3RoaXMucGx1Z2luS2V5fS5jb2x1bW5NZXRhYCksdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmRlc3Ryb3koKSx0aGlzLmNvbHVtbk1ldGFDYWNoZT1udWxsLHRoaXMuY29sdW1uU3RhdGVzTWFuYWdlcj1udWxsLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmRpc2FibGVQ''@;'; put 'put ''bHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dCh7a2V5czpbWyJFbnRlciJdXSxjYWxsYmFjazooKT0+e2NvbnN0e2hpZ2hsaWdodDpsfT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdl''@;'; put 'put ''TGFzdCgpO3JldHVybiB0aGlzLnNvcnQodGhpcy5nZXRDb2x1bW5OZXh0Q29uZmlnKGwuY29sKSksITF9LHJ1bk9ubHlJZjooKT0+e3ZhciBsLGE7Y29uc3QgZD1udWxsPT09KGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaGlnaGxpZ2h0''@;'; put 'put ''O3JldHVybiBkJiYobnVsbD09PShhPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmlzU2luZ2xlKCkpJiZ0aGlzLmhvdC5zZWxlY3Rpb24uaXNDZWxsVmlzaWJsZShkKSYmLTE9PT1kLnJvdyYmZC5jb2w+PTB9LHJlbGF0aXZlVG9Hcm91cDpV''@;'; put 'put ''bSxwb3NpdGlvbjoiYmVmb3JlIixncm91cDpGNGV9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoRjRlKX1zb3J0KGwpe2NvbnN0IGE9dGhpcy5nZXRTb3J0Q29uZmln''@;'; put 'put ''KCksZD10aGlzLmdldE5vcm1hbGl6ZWRTb3J0Q29uZmlncyhsKSxoPXRoaXMuYXJlVmFsaWRTb3J0Q29uZmlncyhkKTshMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5Tb3J0IixhLGQsaCkmJigwPT09YS5sZW5ndGgmJm51bGw9PT10aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hl''@;'; put 'put ''JiYodGhpcy5pbmRleGVzU2VxdWVuY2VDYWNoZT10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbktleSxuZXcgaDNlKSx0aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlLnNldFZhbHVlcyh0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRJbmRleGVzU2VxdWVu''@;'; put 'put ''Y2UoKSkpLGgmJih0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuc2V0U29ydFN0YXRlcyhkKSx0aGlzLnNvcnRCeVByZXNldFNvcnRTdGF0ZXMoZCksdGhpcy5zYXZlQWxsU29ydFNldHRpbmdzKGQpKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb2x1bW5Tb3J0IixhLGg/ZDphLGgpLGgmJih0''@;'; put 'put ''aGlzLmhvdC5yZW5kZXIoKSx0aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXI9ITEsdGhpcy5ob3Qudmlldy5yZW5kZXIoKSkpfWNsZWFyU29ydCgpe3RoaXMuc29ydChbXSl9aXNTb3J0ZWQoKXtyZXR1cm4gdGhpcy5lbmFibGVkJiYhdGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmlzTGlzdE9mU29y''@;'; put 'put ''dGVkQ29sdW1uc0VtcHR5KCl9Z2V0U29ydENvbmZpZyhsKXtyZXR1cm4gRm8obCk/dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldENvbHVtblNvcnRTdGF0ZShsKTp0aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0U29ydFN0YXRlcygpfXNldFNvcnRDb25maWcobCl7Y29uc3QgYT10aGlz''@;'; put 'put ''LmdldE5vcm1hbGl6ZWRTb3J0Q29uZmlncyhsKTt0aGlzLmFyZVZhbGlkU29ydENvbmZpZ3MoYSkmJnRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5zZXRTb3J0U3RhdGVzKGEpfWdldE5vcm1hbGl6ZWRTb3J0Q29uZmlncygpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJn''@;'; put 'put ''dW1lbnRzWzBdP2FyZ3VtZW50c1swXTpbXTtyZXR1cm4gQXJyYXkuaXNBcnJheShsKT9sLnNsaWNlKDAsMSk6W2xdfWFyZVZhbGlkU29ydENvbmZpZ3MobCl7Y29uc3QgYT10aGlzLmhvdC5jb3VudENvbHMoKTtyZXR1cm4gZnVuY3Rpb24gWHN0KGMpe2lmKGMuc29tZShhPT4hMT09PWZ1bmN0''@;'; put 'put ''aW9uIHFzdChjKXtpZighMT09PUthKGMpKXJldHVybiExO2NvbnN0e2NvbHVtbjpsLHNvcnRPcmRlcjphfT1jO3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGwpJiZbJFAsS1BdLmluY2x1ZGVzKGEpfShhKSkpcmV0dXJuITE7Y29uc3QgbD1jLm1hcChhPT57bGV0e2NvbHVtbjpkfT1hO3JldHVy''@;'; put 'put ''biBkfSk7cmV0dXJuIG5ldyBTZXQobCkuc2l6ZT09PWwubGVuZ3RofShsKSYmbC5ldmVyeShkPT57bGV0e2NvbHVtbjpofT1kO3JldHVybiBoPD1hJiZoPj0wfSl9c2F2ZUFsbFNvcnRTZXR0aW5ncyhsKXtjb25zdCBhPXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRBbGxDb2x1bW5zUHJv''@;'; put 'put ''cGVydGllcygpO2EuaW5pdGlhbENvbmZpZz15cyhsLGg9PntsZXR7Y29sdW1uOmYsLi4udn09aDtyZXR1cm57Y29sdW1uOnRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oZiksLi4udn19KSx0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlU2F2ZSIsImNvbHVtblNvcnRpbmciLGEp''@;'; put 'put ''fWdldEFsbFNhdmVkU29ydFNldHRpbmdzKCl7Y29uc3QgbD17fTt0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlTG9hZCIsImNvbHVtblNvcnRpbmciLGwpO2NvbnN0IGE9bC52YWx1ZTtyZXR1cm4gRm8oYSkmJkFycmF5LmlzQXJyYXkoYS5pbml0aWFsQ29uZmlnKSYmKGEuaW5p''@;'; put 'put ''dGlhbENvbmZpZz15cyhhLmluaXRpYWxDb25maWcsaD0+e2xldHtjb2x1bW46ZiwuLi52fT1oO3JldHVybntjb2x1bW46dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oZiksLi4udn19KSksYX1nZXRDb2x1bW5OZXh0Q29uZmlnKGwpe2NvbnN0IGE9dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdl''@;'; put 'put ''dFNvcnRPcmRlck9mQ29sdW1uKGwpO2lmKEZvKGEpKXtjb25zdCBoPUE0ZShhKTtyZXR1cm4gRm8oaCk/e2NvbHVtbjpsLHNvcnRPcmRlcjpofTp2b2lkIDB9Y29uc3QgZD10aGlzLmhvdC5jb3VudENvbHMoKTtpZihOdW1iZXIuaXNJbnRlZ2VyKGwpJiZsPj0wJiZsPGQpcmV0dXJue2NvbHVt''@;'; put 'put ''bjpsLHNvcnRPcmRlcjpBNGUoKX19Z2V0TmV4dFNvcnRDb25maWcobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOkpQO2NvbnN0IGQ9dGhpcy5jb2x1bW5TdGF0ZXNNYW5hZ2VyLmdldEluZGV4T2ZDb2x1bW5JblNvcnRRdWV1''@;'; put 'put ''ZShsKSxoPS0xIT09ZCxmPXRoaXMuZ2V0U29ydENvbmZpZygpLHY9dGhpcy5nZXRDb2x1bW5OZXh0Q29uZmlnKGwpO2lmKGgpe2lmKG1jKHYpKXJldHVyblsuLi5mLnNsaWNlKDAsZCksLi4uZi5zbGljZShkKzEpXTtpZihhPT09SlApcmV0dXJuWy4uLmYuc2xpY2UoMCxkKSwuLi5mLnNsaWNl''@;'; put 'put ''KGQrMSksdl07aWYoInJlcGxhY2UiPT09YSlyZXR1cm5bLi4uZi5zbGljZSgwLGQpLHYsLi4uZi5zbGljZShkKzEpXX1yZXR1cm4gRm8odik/Zi5jb25jYXQodik6Zn1nZXRQbHVnaW5Db2x1bW5Db25maWcobCl7aWYoS2EobCkpe2NvbnN0IGE9bFt0aGlzLnBsdWdpbktleV07aWYoS2EoYSkp''@;'; put 'put ''cmV0dXJuIGF9cmV0dXJue319Z2V0TWVyZ2VkUGx1Z2luU2V0dGluZ3MobCl7Y29uc3QgYT10aGlzLmhvdC5nZXRTZXR0aW5ncygpW3RoaXMucGx1Z2luS2V5XSxkPXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlci5nZXRBbGxDb2x1bW5zUHJvcGVydGllcygpLGg9dGhpcy5ob3QuZ2V0Q2VsbE1l''@;'; put 'put ''dGEoMCxsKSxmPU9iamVjdC5nZXRQcm90b3R5cGVPZihoKTtyZXR1cm4gQXJyYXkuaXNBcnJheShmLmNvbHVtbnMpP09iamVjdC5hc3NpZ24oZCxhLHRoaXMuZ2V0UGx1Z2luQ29sdW1uQ29uZmlnKGYuY29sdW1uc1tsXSkpOmVjKGYuY29sdW1ucyk/T2JqZWN0LmFzc2lnbihkLGEsdGhpcy5n''@;'; put 'put ''ZXRQbHVnaW5Db2x1bW5Db25maWcoZi5jb2x1bW5zKGwpKSk6T2JqZWN0LmFzc2lnbihkLGEpfWdldEZpcnN0Q2VsbFNldHRpbmdzKGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoMCxsKSxkPU9iamVjdC5jcmVhdGUoYSk7cmV0dXJuIGRbdGhpcy5wbHVnaW5LZXldPXRoaXMuY29s''@;'; put 'put ''dW1uTWV0YUNhY2hlLmdldFZhbHVlQXRJbmRleCh0aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpKSxkfWdldE51bWJlck9mUm93c1RvU29ydChsKXtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKCk7cmV0dXJuIGEubWF4Um93czw9bD9hLm1heFJvd3M6bC1hLm1pblNwYXJlUm93c31z''@;'; put 'put ''b3J0QnlQcmVzZXRTb3J0U3RhdGVzKGwpe2lmKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZSh0aGlzLmluZGV4ZXNTZXF1ZW5jZUNhY2hlLmdldFZhbHVlcygpKSwwPT09bC5sZW5ndGgpcmV0dXJuO2NvbnN0IGE9W10sZD10aGlzLmhvdC5jb3VudFJvd3MoKSxo''@;'; put 'put ''PVo9PnlzKGwsbmU9PnRoaXMuaG90LmdldERhdGFBdENlbGwoWixuZS5jb2x1bW4pKTtmb3IobGV0IFo9MDtaPHRoaXMuZ2V0TnVtYmVyT2ZSb3dzVG9Tb3J0KGQpO1orPTEpYS5wdXNoKFt0aGlzLmhvdC50b1BoeXNpY2FsUm93KFopXS5jb25jYXQoaChaKSkpO2NvbnN0IGY9eXMoYSxaPT5a''@;'; put 'put ''WzBdKTshZnVuY3Rpb24gS3N0KGMsbCl7Y29uc3QgYT0kc3QobCk7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZD4yP2QtMjowKSxmPTI7ZjxkO2YrKyloW2YtMl09YXJndW1lbnRzW2ZdO2Muc29ydChhKC4uLmgpKX0oYSx0aGlzLnBsdWdpbktleSx5cyhsLFo9Plou''@;'; put 'put ''c29ydE9yZGVyKSx5cyhsLFo9PnRoaXMuZ2V0Rmlyc3RDZWxsU2V0dGluZ3MoWi5jb2x1bW4pKSk7Zm9yKGxldCBaPWEubGVuZ3RoO1o8ZDtaKz0xKWEucHVzaChbWl0uY29uY2F0KGgoWikpKTtjb25zdCB2PXlzKGEsWj0+WlswXSksTT1uZXcgTWFwKHlzKGYsKFosbmUpPT5bWix2W25lXV0p''@;'; put 'put ''KSxEPXlzKHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpLFo9Pk0uaGFzKFopP00uZ2V0KFopOlopO3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLnNldEluZGV4ZXNTZXF1ZW5jZShEKX1zb3J0QnlTZXR0aW5ncyhsKXtpZihLYShsKSl7dGhpcy5jb2x1bW5TdGF0''@;'; put 'put ''ZXNNYW5hZ2VyLnVwZGF0ZUFsbENvbHVtbnNQcm9wZXJ0aWVzKGwpO2NvbnN0IGE9bC5pbml0aWFsQ29uZmlnOyhBcnJheS5pc0FycmF5KGEpfHxLYShhKSkmJnRoaXMuc29ydChhKX1lbHNlIHRoaXMuaG90LnJlbmRlcigpfXVwZGF0ZUhlYWRlckNsYXNzZXMobCl7aWYoY2EobCxmdW5jdGlv''@;'; put 'put ''biBubHQoKXtyZXR1cm4gQXJyYXkuZnJvbShQNGUudmFsdWVzKCkpLmNvbmNhdChPNGUsUjRlLEw0ZSl9KCkpLCExIT09dGhpcy5lbmFibGVkKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhPjE/YS0xOjApLGg9MTtoPGE7aCsrKWRbaC0xXT1hcmd1bWVudHNbaF07''@;'; put 'put ''VGkobCxmdW5jdGlvbiB0bHQoYyxsLGEsZCl7Y29uc3QgaD1bTDRlXTtpZihkJiZoLnB1c2goTzRlKSwhMT09PWEpcmV0dXJuIGgucHVzaChSNGUpLGg7Y29uc3QgZj1jLmdldFNvcnRPcmRlck9mQ29sdW1uKGwpO3JldHVybiBGbyhmKSYmaC5wdXNoKFA0ZS5nZXQoZikpLGh9KC4uLmQpKX19''@;'; put 'put ''b25VcGRhdGVTZXR0aW5ncyhsKXtzdXBlci5vblVwZGF0ZVNldHRpbmdzKGwpLG51bGwhPT10aGlzLmNvbHVtbk1ldGFDYWNoZSYmdGhpcy5jb2x1bW5NZXRhQ2FjaGUuaW5pdCh0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROdW1iZXJPZkluZGV4ZXMoKSksRm8obFt0aGlzLnBsdWdp''@;'; put 'put ''bktleV0pJiZ0aGlzLnNvcnRCeVNldHRpbmdzKGxbdGhpcy5wbHVnaW5LZXldKX13YXNDbGlja2FibGVIZWFkZXJDbGlja2VkKGwsYSl7cmV0dXJuIHRoaXMuZ2V0Rmlyc3RDZWxsU2V0dGluZ3MoYSlbdGhpcy5wbHVnaW5LZXldLmhlYWRlckFjdGlvbiYmcGEobC50YXJnZXQsVDRlKX1vbkFm''@;'; put 'put ''dGVyT25DZWxsTW91c2VEb3duKGwsYSl7aWYoITEhPT1vSihhLnJvdyxhLmNvbCxsKSYmdGhpcy53YXNDbGlja2FibGVIZWFkZXJDbGlja2VkKGwsYS5jb2wpKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCkmJih0aGlzLmhvdC5kZXNlbGVjdENlbGwoKSx0''@;'; put 'put ''aGlzLmhvdC5zZWxlY3RDb2x1bW5zKGEuY29sKSk7Y29uc3QgZD10aGlzLmhvdC5nZXRBY3RpdmVFZGl0b3IoKSxoPXRoaXMuZ2V0Q29sdW1uTmV4dENvbmZpZyhhLmNvbCk7bnVsbCE9ZCYmZC5pc09wZW5lZCgpJiZ0aGlzLmhvdC5nZXRDZWxsVmFsaWRhdG9yKGQucm93LGQuY29sKT90aGlz''@;'; put 'put ''LmhvdC5hZGRIb29rT25jZSgicG9zdEFmdGVyVmFsaWRhdGUiLCgpPT57dGhpcy5zb3J0KGgpfSk6dGhpcy5zb3J0KGgpfX1kZXN0cm95KCl7dmFyIGw7bnVsbD09PShsPXRoaXMuY29sdW1uU3RhdGVzTWFuYWdlcil8fHZvaWQgMD09PWx8fGwuZGVzdHJveSgpLHN1cGVyLmRlc3Ryb3koKX19''@;'; put 'put ''ZnVuY3Rpb24gYUooKXtjb25zdCBjPXRoaXMuZ2V0QWxsU2F2ZWRTb3J0U2V0dGluZ3MoKTtpZihLYShjKSl0aGlzLnNvcnRCeVNldHRpbmdzKGMpO2Vsc2V7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW3RoaXMucGx1Z2luS2V5XTt0aGlzLnNvcnRCeVNldHRpbmdzKGwpfX1mdW5j''@;'; put 'put ''dGlvbiB1bHQoYyxsKXtjb25zdCBhPWs0ZShsKTtpZighMT09PUQ0ZShjLGwpfHxudWxsPT09YSlyZXR1cm47Y29uc3QgZD10aGlzLmdldEZpcnN0Q2VsbFNldHRpbmdzKGMpW3RoaXMucGx1Z2luS2V5XTtpZih0aGlzLnVwZGF0ZUhlYWRlckNsYXNzZXMoYSx0aGlzLmNvbHVtblN0YXRlc01h''@;'; put 'put ''bmFnZXIsYyxkLmluZGljYXRvcixkLmhlYWRlckFjdGlvbiksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyl7Y29uc3Qgdj10aGlzLmNvbHVtblN0YXRlc01hbmFnZXIuZ2V0U29ydE9yZGVyT2ZDb2x1bW4oYyk7dmEobCwuLi4oYz0+WyJhcmlhLXNvcnQiLGNdKSh2P2Ake3Z9ZW5k''@;'; put 'put ''aW5nYDoibm9uZSIpKX19ZnVuY3Rpb24gZGx0KGMpeyEwPT09YyYmdGhpcy5ob3QudmlldyYmQl8oZDksdGhpcyxhSikuY2FsbCh0aGlzKX1mdW5jdGlvbiBobHQoYyxsLGEsZCl7ITEhPT1vSihsLnJvdyxsLmNvbCxjKSYmdGhpcy53YXNDbGlja2FibGVIZWFkZXJDbGlja2VkKGMsbC5jb2wp''@;'; put 'put ''JiZ0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5pc0N0cmxQcmVzc2VkKCkmJihkLmNvbHVtbj0hMCl9ZnVuY3Rpb24gaDkoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGZsdChjKXt2YXIgbD1mdW5jdGlvbiBwbHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBj''@;'; put 'put ''O3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZh''@;'; put 'put ''bHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3''@;'; put 'put ''cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IG1sdD1jbGFzcyBnbHR7Y29uc3RydWN0b3IobCxhKXtoOSh0aGlzLCJwbHVnaW4iLHZvaWQgMCksaDkodGhpcywiaG90Iix2b2lkIDApLGg5KHRoaXMsImVuZHBvaW50cyIsW10pLGg5KHRoaXMsInNldHRpbmdzIix2b2lkIDApLGg5KHRoaXMs''@;'; put 'put ''InNldHRpbmdzVHlwZSIsImFycmF5IiksaDkodGhpcywiY3VycmVudEVuZHBvaW50IixudWxsKSxoOSh0aGlzLCJjZWxsc1RvU2V0Q2FjaGUiLFtdKSx0aGlzLnBsdWdpbj1sLHRoaXMuaG90PXRoaXMucGx1Z2luLmhvdCx0aGlzLnNldHRpbmdzPWF9aW5pdEVuZHBvaW50cygpe3RoaXMuZW5k''@;'; put 'put ''cG9pbnRzPXRoaXMucGFyc2VTZXR0aW5ncygpLHRoaXMucmVmcmVzaEFsbEVuZHBvaW50cygpfWdldEVuZHBvaW50KGwpe3JldHVybiJmdW5jdGlvbiI9PT10aGlzLnNldHRpbmdzVHlwZT90aGlzLmZpbGxNaXNzaW5nRW5kcG9pbnREYXRhKHRoaXMuc2V0dGluZ3MpW2xdOnRoaXMuZW5kcG9p''@;'; put 'put ''bnRzW2xdfWdldEFsbEVuZHBvaW50cygpe3JldHVybiJmdW5jdGlvbiI9PT10aGlzLnNldHRpbmdzVHlwZT90aGlzLmZpbGxNaXNzaW5nRW5kcG9pbnREYXRhKHRoaXMuc2V0dGluZ3MpOnRoaXMuZW5kcG9pbnRzfWZpbGxNaXNzaW5nRW5kcG9pbnREYXRhKGwpe3JldHVybiB0aGlzLnBhcnNl''@;'; put 'put ''U2V0dGluZ3MobC5jYWxsKHRoaXMpKX1wYXJzZVNldHRpbmdzKGwpe2NvbnN0IGE9W107bGV0IGQ9bDtpZihkfHwiZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5zZXR0aW5ncylyZXR1cm4gZHx8KGQ9dGhpcy5zZXR0aW5ncyksWW4oZCxoPT57Y29uc3QgZj17fTt0aGlzLmFzc2lnblNldHRpbmco''@;'; put 'put ''aCxmLCJyYW5nZXMiLFtbMCx0aGlzLmhvdC5jb3VudFJvd3MoKS0xXV0pLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsInJldmVyc2VkUm93Q29vcmRzIiwhMSksdGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwiZGVzdGluYXRpb25Sb3ciLG5ldyBFcnJvcigiXG4gICAgICAgIFlvdSBtdXN0IHByb3Zp''@;'; put 'put ''ZGUgYSBkZXN0aW5hdGlvbiByb3cgZm9yIHRoZSBDb2x1bW4gU3VtbWFyeSBwbHVnaW4gaW4gb3JkZXIgdG8gd29yayBwcm9wZXJseSFcbiAgICAgICIpKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJkZXN0aW5hdGlvbkNvbHVtbiIsbmV3IEVycm9yKCJcbiAgICAgICAgWW91IG11c3QgcHJv''@;'; put 'put ''dmlkZSBhIGRlc3RpbmF0aW9uIGNvbHVtbiBmb3IgdGhlIENvbHVtbiBTdW1tYXJ5IHBsdWdpbiBpbiBvcmRlciB0byB3b3JrIHByb3Blcmx5IVxuICAgICAgIikpLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsInNvdXJjZUNvbHVtbiIsaC5kZXN0aW5hdGlvbkNvbHVtbiksdGhpcy5hc3NpZ25T''@;'; put 'put ''ZXR0aW5nKGgsZiwidHlwZSIsInN1bSIpLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsImZvcmNlTnVtZXJpYyIsITEpLHRoaXMuYXNzaWduU2V0dGluZyhoLGYsInN1cHByZXNzRGF0YVR5cGVFcnJvcnMiLCEwKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJjdXN0b21GdW5jdGlvbiIsbnVsbCks''@;'; put 'put ''dGhpcy5hc3NpZ25TZXR0aW5nKGgsZiwicmVhZE9ubHkiLCEwKSx0aGlzLmFzc2lnblNldHRpbmcoaCxmLCJyb3VuZEZsb2F0IiwhMSksYS5wdXNoKGYpfSksYTt0aGlzLnNldHRpbmdzVHlwZT0iZnVuY3Rpb24ifWFzc2lnblNldHRpbmcobCxhLGQsaCl7aWYoInJhbmdlcyIhPT1kfHx2b2lk''@;'; put 'put ''IDAhPT1sW2RdKXtpZigicmFuZ2VzIiE9PWR8fDAhPT1sW2RdLmxlbmd0aClpZih2b2lkIDA9PT1sW2RdKXtpZihoIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgaDthW2RdPWh9ZWxzZSBhW2RdPSJkZXN0aW5hdGlvblJvdyI9PT1kJiZhLnJldmVyc2VkUm93Q29vcmRzP3RoaXMuaG90LmNvdW50''@;'; put 'put ''Um93cygpLWxbZF0tMTpsW2RdfWVsc2UgYVtkXT1ofXJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKGwsYSxkKXtpZigiZnVuY3Rpb24iIT09dGhpcy5zZXR0aW5nc1R5cGUpcmV0dXJuO2NvbnN0IGg9bC5pbmRleE9mKCJyb3ciKT4tMT8icm93IjoiY29sIixmPXRoaXMuZ2V0''@;'; put 'put ''QWxsRW5kcG9pbnRzKCk7WW4oZix2PT57InJvdyI9PT1oJiZ2LmRlc3RpbmF0aW9uUm93Pj1hJiYoImluc2VydF9yb3ciPT09bD92LmFsdGVyUm93T2Zmc2V0PWQ6InJlbW92ZV9yb3ciPT09bCYmKHYuYWx0ZXJSb3dPZmZzZXQ9LTEqZCkpLCJjb2wiPT09aCYmdi5kZXN0aW5hdGlvbkNvbHVt''@;'; put 'put ''bj49YSYmKCJpbnNlcnRfY29sIj09PWw/di5hbHRlckNvbHVtbk9mZnNldD1kOiJyZW1vdmVfY29sIj09PWwmJih2LmFsdGVyQ29sdW1uT2Zmc2V0PS0xKmQpKX0pLHRoaXMucmVzZXRBbGxFbmRwb2ludHMoZiwhMSl9cmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbihsLGEsZCxo''@;'; put 'put ''LGYpe2xldCB2PSEoYXJndW1lbnRzLmxlbmd0aD41JiZ2b2lkIDAhPT1hcmd1bWVudHNbNV0pfHxhcmd1bWVudHNbNV07aWYoImZ1bmN0aW9uIj09PXRoaXMuc2V0dGluZ3NUeXBlKXtjb25zdCBiZT0oKT0+KHRoaXMuaG90LnJlbW92ZUhvb2soImJlZm9yZVZpZXdSZW5kZXIiLGJlKSx0aGlz''@;'; put 'put ''LnJlZnJlc2hBbGxFbmRwb2ludHMoKSk7cmV0dXJuIHZvaWQgdGhpcy5ob3QuYWRkSG9va09uY2UoImJlZm9yZVZpZXdSZW5kZXIiLGJlKX1jb25zdCBNPWwuaW5kZXhPZigicm93Iik+LTE/InJvdyI6ImNvbCIsRD1sLmluZGV4T2YoInJlbW92ZSIpPi0xPy0xOjEsWj10aGlzLmdldEFsbEVu''@;'; put 'put ''ZHBvaW50cygpLG5lPTA9PT1sLmluZGV4T2YoIm1vdmVfcm93IiksY2U9YTtZbihaLGJlPT57InJvdyI9PT1NJiZiZS5kZXN0aW5hdGlvblJvdz49Y2UmJihiZS5hbHRlclJvd09mZnNldD1EKmQpLCJjb2wiPT09TSYmYmUuZGVzdGluYXRpb25Db2x1bW4+PWNlJiYoYmUuYWx0ZXJDb2x1bW5P''@;'; put 'put ''ZmZzZXQ9RCpkKX0pLHRoaXMucmVzZXRBbGxFbmRwb2ludHMoWiwhbmUpLFluKFosbmU/YmU9Pnt0aGlzLmV4dGVuZEVuZHBvaW50UmFuZ2VzKGJlLGNlLGhbMF0saC5sZW5ndGgpLHRoaXMucmVjcmVhdGVQaHlzaWNhbFJhbmdlcyhiZSksdGhpcy5jbGVhck9mZnNldEluZm9ybWF0aW9uKGJl''@;'; put 'put ''KX06YmU9Pnt0aGlzLnNoaWZ0RW5kcG9pbnRDb29yZGluYXRlcyhiZSxjZSl9KSx2JiZ0aGlzLnJlZnJlc2hBbGxFbmRwb2ludHMoKX1jbGVhck9mZnNldEluZm9ybWF0aW9uKGwpe2wuYWx0ZXJSb3dPZmZzZXQ9dm9pZCAwLGwuYWx0ZXJDb2x1bW5PZmZzZXQ9dm9pZCAwfWV4dGVuZEVuZHBv''@;'; put 'put ''aW50UmFuZ2VzKGwsYSxkLGgpe1luKGwucmFuZ2VzLGY9PntmWzFdJiYoYT49ZlswXSYmYTw9ZlsxXT9kPmZbMV0/ZlsxXSs9aDpkPGZbMF0mJihmWzBdLT1oKTpkPj1mWzBdJiZkPD1mWzFdJiYoZlsxXS09aCxhPD1mWzBdJiYoZlswXSs9MSxmWzFdKz0xKSkpfSl9cmVjcmVhdGVQaHlzaWNh''@;'; put 'put ''bFJhbmdlcyhsKXtjb25zdCBkPVtdLGg9W107WW4obC5yYW5nZXMsZj0+e2NvbnN0IHY9W107aWYoZlsxXSlmb3IobGV0IE09ZlswXTtNPD1mWzFdO00rKyl2LnB1c2godGhpcy5ob3QudG9QaHlzaWNhbFJvdyhNKSk7ZWxzZSB2LnB1c2godGhpcy5ob3QudG9QaHlzaWNhbFJvdyhmWzBdKSk7''@;'; put 'put ''aC5wdXNoKHYpfSksWW4oaCxmPT57bGV0IHY9W107WW4oZiwoTSxEKT0+ezA9PT1EP3YucHVzaChNKTpmW0RdIT09ZltELTFdKzEmJih2LnB1c2goZltELTFdKSxkLnB1c2godiksdj1bXSx2LnB1c2goTSkpLEQ9PT1mLmxlbmd0aC0xJiYodi5wdXNoKE0pLGQucHVzaCh2KSl9KX0pLGwucmFu''@;'; put 'put ''Z2VzPWR9c2hpZnRFbmRwb2ludENvb3JkaW5hdGVzKGwsYSl7bC5hbHRlclJvd09mZnNldCYmMCE9PWwuYWx0ZXJSb3dPZmZzZXQ/KGwuZGVzdGluYXRpb25Sb3crPWwuYWx0ZXJSb3dPZmZzZXR8fDAsWW4obC5yYW5nZXMsZD0+e1luKGQsKGgsZik9PntoPj1hJiYoZFtmXSs9bC5hbHRlclJv''@;'; put 'put ''d09mZnNldHx8MCl9KX0pKTpsLmFsdGVyQ29sdW1uT2Zmc2V0JiYwIT09bC5hbHRlckNvbHVtbk9mZnNldCYmKGwuZGVzdGluYXRpb25Db2x1bW4rPWwuYWx0ZXJDb2x1bW5PZmZzZXR8fDAsbC5zb3VyY2VDb2x1bW4rPWwuYWx0ZXJDb2x1bW5PZmZzZXR8fDApfXJlc2V0QWxsRW5kcG9pbnRz''@;'; put 'put ''KCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuZ2V0QWxsRW5kcG9pbnRzKCksYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdO2wuc29tZShoPT57Y29uc3Qg''@;'; put 'put ''dj1oLmFsdGVyQ29sdW1uT2Zmc2V0fHwwO3JldHVybiBoLmRlc3RpbmF0aW9uUm93KyhoLmFsdGVyUm93T2Zmc2V0fHwwKT49dGhpcy5ob3QuY291bnRSb3dzKCl8fGguZGVzdGluYXRpb25Db2x1bW4rdj49dGhpcy5ob3QuY291bnRDb2xzKCl9KXx8KHRoaXMuY2VsbHNUb1NldENhY2hlPVtd''@;'; put 'put ''LFluKGwsaD0+e3RoaXMucmVzZXRFbmRwb2ludFZhbHVlKGgsYSl9KSx0aGlzLmhvdC5zZXREYXRhQXRDZWxsKHRoaXMuY2VsbHNUb1NldENhY2hlLCJDb2x1bW5TdW1tYXJ5LnJlc2V0IiksdGhpcy5jZWxsc1RvU2V0Q2FjaGU9W10pfXJlZnJlc2hBbGxFbmRwb2ludHMoKXt0aGlzLmNlbGxz''@;'; put 'put ''VG9TZXRDYWNoZT1bXSxZbih0aGlzLmdldEFsbEVuZHBvaW50cygpLGw9Pnt0aGlzLmN1cnJlbnRFbmRwb2ludD1sLHRoaXMucGx1Z2luLmNhbGN1bGF0ZShsKSx0aGlzLnNldEVuZHBvaW50VmFsdWUobCwiaW5pdCIpfSksdGhpcy5jdXJyZW50RW5kcG9pbnQ9bnVsbCx0aGlzLmhvdC5zZXRE''@;'; put 'put ''YXRhQXRDZWxsKHRoaXMuY2VsbHNUb1NldENhY2hlLCJDb2x1bW5TdW1tYXJ5LnJlc2V0IiksdGhpcy5jZWxsc1RvU2V0Q2FjaGU9W119cmVmcmVzaENoYW5nZWRFbmRwb2ludHMobCl7Y29uc3QgYT1bXTt0aGlzLmNlbGxzVG9TZXRDYWNoZT1bXSxZbihsLChkLGgsZik9PntgJHtkWzJdfHwi''@;'; put 'put ''In1gIT1gJHtkWzNdfWAmJlluKHRoaXMuZ2V0QWxsRW5kcG9pbnRzKCksKHYsTSk9Pnt0aGlzLmhvdC5wcm9wVG9Db2woZltoXVsxXSk9PT12LnNvdXJjZUNvbHVtbiYmLTE9PT1hLmluZGV4T2YoTSkmJmEucHVzaChNKX0pfSksWW4oYSxkPT57dGhpcy5yZWZyZXNoRW5kcG9pbnQodGhpcy5n''@;'; put 'put ''ZXRFbmRwb2ludChkKSl9KSx0aGlzLmhvdC5zZXREYXRhQXRDZWxsKHRoaXMuY2VsbHNUb1NldENhY2hlLCJDb2x1bW5TdW1tYXJ5LnJlc2V0IiksdGhpcy5jZWxsc1RvU2V0Q2FjaGU9W119cmVmcmVzaENlbGxNZXRhcygpe3RoaXMuZW5kcG9pbnRzLmZvckVhY2gobD0+e2NvbnN0IGE9dGhp''@;'; put 'put ''cy5ob3QudG9WaXN1YWxSb3cobC5kZXN0aW5hdGlvblJvdyk7aWYobnVsbCE9PWEpe2NvbnN0IGQ9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoYSxsLmRlc3RpbmF0aW9uQ29sdW1uKTtkLnJlYWRPbmx5PWwucmVhZE9ubHksZC5jbGFzc05hbWU9ImNvbHVtblN1bW1hcnlSZXN1bHQifX0pfXJlZnJl''@;'; put 'put ''c2hFbmRwb2ludChsKXt0aGlzLmN1cnJlbnRFbmRwb2ludD1sLHRoaXMucGx1Z2luLmNhbGN1bGF0ZShsKSx0aGlzLnNldEVuZHBvaW50VmFsdWUobCksdGhpcy5jdXJyZW50RW5kcG9pbnQ9bnVsbH1yZXNldEVuZHBvaW50VmFsdWUobCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZv''@;'; put 'put ''aWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXTtjb25zdCBoPWwuYWx0ZXJDb2x1bW5PZmZzZXR8fDA7dGhpcy5jZWxsc1RvU2V0Q2FjaGUucHVzaChbdGhpcy5ob3QudG9WaXN1YWxSb3cobC5kZXN0aW5hdGlvblJvdysoYSYmbC5hbHRlclJvd09mZnNldHx8MCkpLHRoaXMuaG90''@;'; put 'put ''LnRvVmlzdWFsQ29sdW1uKGwuZGVzdGluYXRpb25Db2x1bW4rKGE/aDowKSksIiJdKX1zZXRFbmRwb2ludFZhbHVlKGwsYSl7bGV0IGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTtjb25zdCBoPXRoaXMuaG90LnRvVmlzdWFsUm93KGwu''@;'; put 'put ''ZGVzdGluYXRpb25Sb3cpO2lmKGwuZGVzdGluYXRpb25Sb3c+PXRoaXMuaG90LmNvdW50Um93cygpfHxsLmRlc3RpbmF0aW9uQ29sdW1uPj10aGlzLmhvdC5jb3VudENvbHMoKSlyZXR1cm4gdm9pZCB0aGlzLnRocm93T3V0T2ZCb3VuZHNXYXJuaW5nKCk7Y29uc3QgZj10aGlzLmhvdC50b1Zp''@;'; put 'put ''c3VhbFJvdyhsLmRlc3RpbmF0aW9uUm93KTtpZihudWxsIT09Zil7Y29uc3Qgdj10aGlzLmhvdC5nZXRDZWxsTWV0YShmLGwuZGVzdGluYXRpb25Db2x1bW4pOygiaW5pdCI9PT1hfHx2LnJlYWRPbmx5IT09bC5yZWFkT25seSkmJih2LnJlYWRPbmx5PWwucmVhZE9ubHksdi5jbGFzc05hbWU9''@;'; put 'put ''ImNvbHVtblN1bW1hcnlSZXN1bHQiKX1pZigoITA9PT1sLnJvdW5kRmxvYXR8fE51bWJlci5pc0ludGVnZXIobC5yb3VuZEZsb2F0KSkmJiFpc05hTihsLnJlc3VsdCkpe2NvbnN0IHY9bC5yb3VuZEZsb2F0O2xldCBNPTA7TnVtYmVyLmlzSW50ZWdlcih2KSYmKE09TWF0aC5taW4oTWF0aC5t''@;'; put 'put ''YXgoMCx2KSwxMDApKSxsLnJlc3VsdD1sLnJlc3VsdC50b0ZpeGVkKE0pfWQ/dGhpcy5ob3Quc2V0RGF0YUF0Q2VsbChoLGwuZGVzdGluYXRpb25Db2x1bW4sbC5yZXN1bHQsIkNvbHVtblN1bW1hcnkuc2V0Iik6dGhpcy5jZWxsc1RvU2V0Q2FjaGUucHVzaChbaCxsLmRlc3RpbmF0aW9uQ29s''@;'; put 'put ''dW1uLGwucmVzdWx0XSksbC5hbHRlclJvd09mZnNldD12b2lkIDAsbC5hbHRlckNvbHVtbk9mZnNldD12b2lkIDB9dGhyb3dPdXRPZkJvdW5kc1dhcm5pbmcoKXt0bCgiT25lIG9mIHRoZSBDb2x1bW4gU3VtbWFyeSBwbHVnaW5zJyBkZXN0aW5hdGlvbiBwb2ludHMgeW91IHByb3ZpZGVkIGlz''@;'; put 'put ''IGJleW9uZCB0aGUgdGFibGUgYm91bmRhcmllcyEiKX19O2Z1bmN0aW9uIHNKKGMpe3JldHVybiBudWxsPT1jfHxpc05hTihjKX1mdW5jdGlvbiBRUChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgbEo9ImNvbHVtblN1bW1hcnkiO3ZhciBoVD1uZXcgV2Vha1NldDtjbGFzcyBTbHQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyks''@;'; put 'put ''ZnVuY3Rpb24gdmx0KGMsbCl7KGZ1bmN0aW9uIGJsdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLGhUKSxmdW5j''@;'; put 'put ''dGlvbiB5bHQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIF9sdChjKXt2YXIgbD1mdW5jdGlvbiB3bHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVm''@;'; put 'put ''YXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJz''@;'; put 'put ''eW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJlbmRwb2ludHMiLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tF''@;'; put 'put ''WSgpe3JldHVybiBsSn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAyMjB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW2xKXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMuc2V0dGluZ3M9dGhpcy5ob3Qu''@;'; put 'put ''Z2V0U2V0dGluZ3MoKVtsSl0sdGhpcy5lbmRwb2ludHM9bmV3IG1sdCh0aGlzLHRoaXMuc2V0dGluZ3MpLHRoaXMuYWRkSG9vaygiYWZ0ZXJJbml0IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRz''@;'; put 'put ''W2hdO3JldHVybiBRUChoVCxsLE1sdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckNoYW5nZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gUVAoaFQsbCxF''@;'; put 'put ''bHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJVcGRhdGVTZXR0aW5ncyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gUVAoaFQsbCx4bHQpLmNhbGwobCwu''@;'; put 'put ''Li5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ3JlYXRlUm93IiwoYSxkLGgpPT50aGlzLmVuZHBvaW50cy5yZXNldFNldHVwQmVmb3JlU3RydWN0dXJlQWx0ZXJhdGlvbigiaW5zZXJ0X3JvdyIsYSxkLG51bGwsaCkpLHRoaXMuYWRkSG9vaygiYmVmb3JlQ3JlYXRlQ29sIiwoYSxkLGgpPT50''@;'; put 'put ''aGlzLmVuZHBvaW50cy5yZXNldFNldHVwQmVmb3JlU3RydWN0dXJlQWx0ZXJhdGlvbigiaW5zZXJ0X2NvbCIsYSxkLG51bGwsaCkpLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVtb3ZlUm93IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDto''@;'; put 'put ''PGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBsLmVuZHBvaW50cy5yZXNldFNldHVwQmVmb3JlU3RydWN0dXJlQWx0ZXJhdGlvbigicmVtb3ZlX3JvdyIsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbW92ZUNvbCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbC5lbmRwb2ludHMucmVzZXRTZXR1cEJlZm9yZVN0cnVjdHVyZUFsdGVyYXRpb24oInJlbW92ZV9jb2wiLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZVJvdyIsKGEsZCxoKT0+''@;'; put 'put ''dGhpcy5lbmRwb2ludHMucmVzZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbigiaW5zZXJ0X3JvdyIsYSxkLG51bGwsaCkpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVDb2wiLChhLGQsaCk9PnRoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBBZnRlclN0cnVjdHVyZUFsdGVyYXRpb24o''@;'; put 'put ''Imluc2VydF9jb2wiLGEsZCxudWxsLGgpKSx0aGlzLmFkZEhvb2soImFmdGVyUmVtb3ZlUm93IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBsLmVuZHBvaW50cy5yZXNldFNl''@;'; put 'put ''dHVwQWZ0ZXJTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJyZW1vdmVfcm93IiwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1vdmVDb2wiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0''@;'; put 'put ''dXJuIGwuZW5kcG9pbnRzLnJlc2V0U2V0dXBBZnRlclN0cnVjdHVyZUFsdGVyYXRpb24oInJlbW92ZV9jb2wiLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclJvd01vdmUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKysp''@;'; put 'put ''ZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIFFQKGhULGwsVGx0KS5jYWxsKGwsLi4uZCl9KSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuZW5kcG9pbnRzPW51bGwsdGhpcy5zZXR0aW5ncz1udWxsLHRoaXMuY3VycmVudEVuZHBvaW50PW51bGwsc3VwZXIuZGlz''@;'; put 'put ''YWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5lbmRwb2ludHMuaW5pdEVuZHBvaW50cygpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWNhbGN1bGF0ZShsKXtzd2l0Y2gobC50eXBlLnRvTG93ZXJDYXNlKCkpe2Nh''@;'; put 'put ''c2Uic3VtIjpsLnJlc3VsdD10aGlzLmNhbGN1bGF0ZVN1bShsKTticmVhaztjYXNlIm1pbiI6Y2FzZSJtYXgiOmwucmVzdWx0PXRoaXMuY2FsY3VsYXRlTWluTWF4KGwsbC50eXBlKTticmVhaztjYXNlImNvdW50IjpsLnJlc3VsdD10aGlzLmNvdW50RW50cmllcyhsKTticmVhaztjYXNlImF2''@;'; put 'put ''ZXJhZ2UiOmwucmVzdWx0PXRoaXMuY2FsY3VsYXRlQXZlcmFnZShsKTticmVhaztjYXNlImN1c3RvbSI6bC5yZXN1bHQ9bC5jdXN0b21GdW5jdGlvbi5jYWxsKHRoaXMsbCl9fWNhbGN1bGF0ZVN1bShsKXtsZXQgYT0wO3JldHVybiBxYShsLnJhbmdlcyxkPT57YSs9dGhpcy5nZXRQYXJ0aWFs''@;'; put 'put ''U3VtKGQsbC5zb3VyY2VDb2x1bW4pfSksYX1nZXRQYXJ0aWFsU3VtKGwsYSl7bGV0IGQ9MCxoPWxbMV18fGxbMF0sZj1udWxsLHY9MDtkb3tpZihmPXRoaXMuZ2V0Q2VsbFZhbHVlKGgsYSksZj1zSihmKT9udWxsOmYsbnVsbCE9PWYpe2NvbnN0IE09KGAke2Z9YC5zcGxpdCgiLiIpWzFdfHxb''@;'; put 'put ''XSkubGVuZ3RofHwxO00+diYmKHY9TSl9ZCs9Znx8MCxoLT0xfXdoaWxlKGg+PWxbMF0pO3JldHVybiBNYXRoLnJvdW5kKGQqMTAqKnYpLzEwKip2fWNhbGN1bGF0ZU1pbk1heChsLGEpe2xldCBkPW51bGw7cmV0dXJuIHFhKGwucmFuZ2VzLGg9Pntjb25zdCBmPXRoaXMuZ2V0UGFydGlhbE1p''@;'; put 'put ''bk1heChoLGwuc291cmNlQ29sdW1uLGEpO2lmKG51bGw9PT1kJiZudWxsIT09ZiYmKGQ9ZiksbnVsbCE9PWYpc3dpdGNoKGEpe2Nhc2UibWluIjpkPU1hdGgubWluKGQsZik7YnJlYWs7Y2FzZSJtYXgiOmQ9TWF0aC5tYXgoZCxmKX19KSxudWxsPT09ZD8iTm90IGVub3VnaCBkYXRhIjpkfWdl''@;'; put 'put ''dFBhcnRpYWxNaW5NYXgobCxhLGQpe2xldCB2LGg9bnVsbCxmPWxbMV18fGxbMF07ZG97aWYodj10aGlzLmdldENlbGxWYWx1ZShmLGEpLHY9c0oodik/bnVsbDp2LG51bGw9PT1oKWg9djtlbHNlIGlmKG51bGwhPT12KXN3aXRjaChkKXtjYXNlIm1pbiI6aD1NYXRoLm1pbihoLHYpO2JyZWFr''@;'; put 'put ''O2Nhc2UibWF4IjpoPU1hdGgubWF4KGgsdil9Zi09MX13aGlsZShmPj1sWzBdKTtyZXR1cm4gaH1jb3VudEVtcHR5KGwsYSl7bGV0IGQsaD0wLGY9bFsxXXx8bFswXTtkb3tkPXRoaXMuZ2V0Q2VsbFZhbHVlKGYsYSksZD1zSihkKT9udWxsOmQsbnVsbD09PWQmJihoKz0xKSxmLT0xfXdoaWxl''@;'; put 'put ''KGY+PWxbMF0pO3JldHVybiBofWNvdW50RW50cmllcyhsKXtsZXQgYT0wO3JldHVybiBxYShsLnJhbmdlcyxoPT57Y29uc3QgZj12b2lkIDA9PT1oWzFdPzE6aFsxXS1oWzBdKzEsdj10aGlzLmNvdW50RW1wdHkoaCxsLnNvdXJjZUNvbHVtbik7YSs9ZixhLT12fSksYX1jYWxjdWxhdGVBdmVy''@;'; put 'put ''YWdlKGwpe3JldHVybiB0aGlzLmNhbGN1bGF0ZVN1bShsKS90aGlzLmNvdW50RW50cmllcyhsKX1nZXRDZWxsVmFsdWUobCxhKXtjb25zdCBkPXRoaXMuaG90LnRvVmlzdWFsUm93KGwpLGg9dGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oYSk7bGV0IGY9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUF0''@;'; put 'put ''Q2VsbChsLGEpLHY9IiI7aWYobnVsbCE9PWQmJm51bGwhPT1oJiYodj10aGlzLmhvdC5nZXRDZWxsTWV0YShkLGgpLmNsYXNzTmFtZXx8IiIpLHYuaW5kZXhPZigiY29sdW1uU3VtbWFyeVJlc3VsdCIpPi0xKXJldHVybiBudWxsO2lmKHRoaXMuZW5kcG9pbnRzLmN1cnJlbnRFbmRwb2ludC5m''@;'; put 'put ''b3JjZU51bWVyaWMmJigic3RyaW5nIj09dHlwZW9mIGYmJihmPWYucmVwbGFjZSgvLC8sIi4iKSksZj1wYXJzZUZsb2F0KGYpKSxpc05hTihmKSYmIXRoaXMuZW5kcG9pbnRzLmN1cnJlbnRFbmRwb2ludC5zdXBwcmVzc0RhdGFUeXBlRXJyb3JzKXRocm93IG5ldyBFcnJvcihmbGBDb2x1bW5T''@;'; put 'put ''dW1tYXJ5IHBsdWdpbjogY2VsbCBhdCAoJHtsfSwgJHthfSkgaXMgbm90IGluIGFceDIwCiAgICAgICAgICBudW1lcmljIGZvcm1hdC4gQ2Fubm90IGRvIHRoZSBjYWxjdWxhdGlvbi5gKTtyZXR1cm4gZn19ZnVuY3Rpb24gTWx0KCl7dGhpcy5lbmRwb2ludHMuaW5pdEVuZHBvaW50cygpfWZ1''@;'; put 'put ''bmN0aW9uIHhsdChjKXt2b2lkIDAhPT1jLmNvbHVtbnMmJnRoaXMuZW5kcG9pbnRzLnJlZnJlc2hDZWxsTWV0YXMoKX1mdW5jdGlvbiBFbHQoYyxsKXtjJiYiQ29sdW1uU3VtbWFyeS5yZXNldCIhPT1sJiYiQ29sdW1uU3VtbWFyeS5zZXQiIT09bCYmImxvYWREYXRhIiE9PWwmJnRoaXMuZW5k''@;'; put 'put ''cG9pbnRzLnJlZnJlc2hDaGFuZ2VkRW5kcG9pbnRzKGMpfWZ1bmN0aW9uIFRsdChjLGwpe3RoaXMuZW5kcG9pbnRzLnJlc2V0U2V0dXBCZWZvcmVTdHJ1Y3R1cmVBbHRlcmF0aW9uKCJtb3ZlX3JvdyIsY1swXSxjLmxlbmd0aCxjLHRoaXMucGx1Z2luTmFtZSksdGhpcy5lbmRwb2ludHMucmVz''@;'; put 'put ''ZXRTZXR1cEFmdGVyU3RydWN0dXJlQWx0ZXJhdGlvbigibW92ZV9yb3ciLGwsYy5sZW5ndGgsYyx0aGlzLnBsdWdpbk5hbWUpfWZ1bmN0aW9uIGNKKGMsbCxhKXtONGUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIE40ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNh''@;'; put 'put ''bm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gal8oYyxsKXtyZXR1cm4gYy5nZXQoZEooYyxsKSl9ZnVuY3Rpb24gdUooYyxsLGEpe3JldHVybiBjLnNldChkSihjLGwpLGEpLGF9ZnVuY3Rpb24gZEooYyxsLGEp''@;'; put 'put ''e2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBlRj1uZXcgV2Vha01hcCx0Rj1uZXcg''@;'; put 'put ''V2Vha01hcCxuRj1uZXcgV2Vha01hcCxWNGU9bmV3IFdlYWtTZXQ7Y2xhc3MgQjRle2NvbnN0cnVjdG9yKCl7KGZ1bmN0aW9uIEFsdChjLGwpe040ZShjLGwpLGwuYWRkKGMpfSkodGhpcyxWNGUpLGNKKHRoaXMsZUYsITApLGNKKHRoaXMsdEYsbnVsbCksY0oodGhpcyxuRixuZXcgUmVzaXpl''@;'; put 'put ''T2JzZXJ2ZXIobD0+ZEooVjRlLHRoaXMsa2x0KS5jYWxsKHRoaXMsbCkpKX1zZXRPYnNlcnZlZEVsZW1lbnQobCl7dUoodEYsdGhpcyxsKX11bm9ic2VydmUoKXtqXyhuRix0aGlzKS51bm9ic2VydmUoal8odEYsdGhpcykpfW9ic2VydmUoKXt1SihlRix0aGlzLCEwKSxqXyhuRix0aGlzKS5v''@;'; put 'put ''YnNlcnZlKGpfKHRGLHRoaXMpKX1kZXN0cm95KCl7al8obkYsdGhpcykuZGlzY29ubmVjdCgpfX1mdW5jdGlvbiBrbHQoYyl7IWpfKGVGLHRoaXMpJiZBcnJheS5pc0FycmF5KGMpJiZjLmxlbmd0aD9jLmZvckVhY2gobD0+e2xldHtib3JkZXJCb3hTaXplOmF9PWw7Y29uc3R7aW5saW5lU2l6''@;'; put 'put ''ZTpkLGJsb2NrU2l6ZTpofT1hWzBdO3RoaXMucnVuTG9jYWxIb29rcygicmVzaXplIixkLGgpfSk6dUooZUYsdGhpcywhMSl9ZnVuY3Rpb24gZjkoYyxsLGEpeyhmdW5jdGlvbiBEbHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUg''@;'; put 'put ''c2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIFBsKGMsbCl7cmV0dXJuIGMuZ2V0KGo0ZShjLGwpKX1mdW5jdGlvbiBrZyhjLGwsYSl7cmV0dXJuIGMuc2V0KGo0ZShjLGwpLGEpLGF9ZnVuY3Rpb24gajRlKGMsbCxh''@;'; put 'put ''KXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX14bChCNGUsXzEpO3ZhciBwOT1uZXcgV2Vh''@;'; put 'put ''a01hcCxoSj1uZXcgV2Vha01hcCxEZz1uZXcgV2Vha01hcCxHbT1uZXcgV2Vha01hcCwkbT1uZXcgV2Vha01hcCxyRj1uZXcgV2Vha01hcCx6Xz1uZXcgV2Vha01hcDtjbGFzcyBnOXtzdGF0aWMgZ2V0IENMQVNTX0VESVRPUl9DT05UQUlORVIoKXtyZXR1cm4iaHRDb21tZW50c0NvbnRhaW5l''@;'; put 'put ''ciJ9c3RhdGljIGdldCBDTEFTU19FRElUT1IoKXtyZXR1cm4iaHRDb21tZW50cyJ9c3RhdGljIGdldCBDTEFTU19JTlBVVCgpe3JldHVybiJodENvbW1lbnRUZXh0QXJlYSJ9c3RhdGljIGdldCBDTEFTU19DRUxMKCl7cmV0dXJuImh0Q29tbWVudENlbGwifWNvbnN0cnVjdG9yKGwsYSl7dmFy''@;'; put 'put ''IGQ9dGhpcztmOSh0aGlzLHA5LHZvaWQgMCksZjkodGhpcyxoSiwhMSksZjkodGhpcyxEZyxudWxsKSxmOSh0aGlzLEdtLHZvaWQgMCksZjkodGhpcywkbSx2b2lkIDApLGY5KHRoaXMsckYsITApLGY5KHRoaXMsel8sbmV3IEI0ZSksa2cocDksdGhpcyxsKSxrZyhoSix0aGlzLGEpLGtnKEdt''@;'; put 'put ''LHRoaXMsdGhpcy5jcmVhdGVFZGl0b3IoKSksa2coJG0sdGhpcyxQbChHbSx0aGlzKS5zdHlsZSksUGwoel8sdGhpcykuc2V0T2JzZXJ2ZWRFbGVtZW50KHRoaXMuZ2V0SW5wdXRFbGVtZW50KCkpLFBsKHpfLHRoaXMpLmFkZExvY2FsSG9vaygicmVzaXplIixmdW5jdGlvbigpe2Zvcih2YXIg''@;'; put 'put ''aD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBkLnJ1bkxvY2FsSG9va3MoInJlc2l6ZSIsLi4uZil9KSx0aGlzLmhpZGUoKX1zZXRQb3NpdGlvbihsLGEpe1BsKCRtLHRoaXMpLmxlZnQ9YCR7bH1weGAsUGwoJG0s''@;'; put 'put ''dGhpcykudG9wPWAke2F9cHhgfXNldFNpemUobCxhKXtpZihsJiZhKXtjb25zdCBkPXRoaXMuZ2V0SW5wdXRFbGVtZW50KCk7ZC5zdHlsZS53aWR0aD1gJHtsfXB4YCxkLnN0eWxlLmhlaWdodD1gJHthfXB4YH19Z2V0U2l6ZSgpe3JldHVybnt3aWR0aDphdSh0aGlzLmdldElucHV0RWxlbWVu''@;'; put 'put ''dCgpKSxoZWlnaHQ6TXUodGhpcy5nZXRJbnB1dEVsZW1lbnQoKSl9fW9ic2VydmVTaXplKCl7UGwoel8sdGhpcykub2JzZXJ2ZSgpfXJlc2V0U2l6ZSgpe2NvbnN0IGw9dGhpcy5nZXRJbnB1dEVsZW1lbnQoKTtsLnN0eWxlLndpZHRoPSIiLGwuc3R5bGUuaGVpZ2h0PSIifXNldFJlYWRPbmx5''@;'; put 'put ''U3RhdGUobCl7dGhpcy5nZXRJbnB1dEVsZW1lbnQoKS5yZWFkT25seT1sfXNob3coKXtQbCgkbSx0aGlzKS5kaXNwbGF5PSJibG9jayIsa2cockYsdGhpcywhMSl9aGlkZSgpe1BsKHpfLHRoaXMpLnVub2JzZXJ2ZSgpLFBsKHJGLHRoaXMpfHwoUGwoJG0sdGhpcykuZGlzcGxheT0ibm9uZSIp''@;'; put 'put ''LGtnKHJGLHRoaXMsITApfWlzVmlzaWJsZSgpe3JldHVybiJibG9jayI9PT1QbCgkbSx0aGlzKS5kaXNwbGF5fXNldFZhbHVlKCl7Y29uc3QgYT0oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOiIiKXx8IiI7dGhpcy5nZXRJbnB1dEVsZW1l''@;'; put 'put ''bnQoKS52YWx1ZT1hfWdldFZhbHVlKCl7cmV0dXJuIHRoaXMuZ2V0SW5wdXRFbGVtZW50KCkudmFsdWV9aXNGb2N1c2VkKCl7cmV0dXJuIFBsKHA5LHRoaXMpLmFjdGl2ZUVsZW1lbnQ9PT10aGlzLmdldElucHV0RWxlbWVudCgpfWZvY3VzKCl7dGhpcy5nZXRJbnB1dEVsZW1lbnQoKS5mb2N1''@;'; put 'put ''cygpfWNyZWF0ZUVkaXRvcigpe2NvbnN0IGw9UGwocDksdGhpcykuY3JlYXRlRWxlbWVudCgiZGl2IiksYT1QbChwOSx0aGlzKS5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpO3JldHVybiBsLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGtnKERnLHRoaXMsUGwocDksdGhpcykuY3JlYXRlRWxlbWVu''@;'; put 'put ''dCgiZGl2IikpLFBsKERnLHRoaXMpLnNldEF0dHJpYnV0ZSgiZGlyIixQbChoSix0aGlzKT8icnRsIjoibHRyIiksVGkoUGwoRGcsdGhpcyksZzkuQ0xBU1NfRURJVE9SX0NPTlRBSU5FUiksUGwocDksdGhpcykuYm9keS5hcHBlbmRDaGlsZChQbChEZyx0aGlzKSksVGkobCxnOS5DTEFTU19F''@;'; put 'put ''RElUT1IpLFRpKGEsZzkuQ0xBU1NfSU5QVVQpLGEuc2V0QXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIsITApLGwuYXBwZW5kQ2hpbGQoYSksUGwoRGcsdGhpcykuYXBwZW5kQ2hpbGQobCksbH1nZXRJbnB1dEVsZW1lbnQoKXtyZXR1cm4gUGwoR20sdGhpcykucXVlcnlTZWxlY3RvcihgLiR7''@;'; put 'put ''ZzkuQ0xBU1NfSU5QVVR9YCl9Z2V0RWRpdG9yRWxlbWVudCgpe3JldHVybiBQbChHbSx0aGlzKX1kZXN0cm95KCl7Y29uc3QgbD1QbChEZyx0aGlzKT9QbChEZyx0aGlzKS5wYXJlbnROb2RlOm51bGw7UGwoR20sdGhpcykucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChQbChHbSx0aGlzKSksa2co''@;'; put 'put ''R20sdGhpcyxudWxsKSxrZygkbSx0aGlzLG51bGwpLFBsKHpfLHRoaXMpLmRlc3Ryb3koKSxsJiZsLnJlbW92ZUNoaWxkKFBsKERnLHRoaXMpKX19eGwoZzksXzEpO2NvbnN0IElsdD1nOTtmdW5jdGlvbiBmSihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gUmx0KGMpe3ZhciBsPWZ1bmN0aW9u''@;'; put 'put ''IExsdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJy''@;'; put 'put ''b3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''YyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgejRle2NvbnN0cnVjdG9yKGwpe2ZKKHRoaXMsIndhc0xhc3RBY3Rpb25TaG93IiwhMCksZkoodGhpcywic2hvd0RlYm91bmNlZCIsbnVsbCksZkoodGhpcywiaGlk''@;'; put 'put ''aW5nVGltZXIiLG51bGwpLHRoaXMudXBkYXRlRGVsYXkobCl9aGlkZSgpe3RoaXMud2FzTGFzdEFjdGlvblNob3c9ITEsdGhpcy5oaWRpbmdUaW1lcj1zZXRUaW1lb3V0KCgpPT57ITE9PT10aGlzLndhc0xhc3RBY3Rpb25TaG93JiZ0aGlzLnJ1bkxvY2FsSG9va3MoImhpZGUiKX0sMjUwKX1z''@;'; put 'put ''aG93KGwpe3RoaXMud2FzTGFzdEFjdGlvblNob3c9ITAsdGhpcy5zaG93RGVib3VuY2VkKGwpfWNhbmNlbEhpZGluZygpe3RoaXMud2FzTGFzdEFjdGlvblNob3c9ITAsY2xlYXJUaW1lb3V0KHRoaXMuaGlkaW5nVGltZXIpLHRoaXMuaGlkaW5nVGltZXI9bnVsbH11cGRhdGVEZWxheSgpe3Ro''@;'; put 'put ''aXMuc2hvd0RlYm91bmNlZD1JTyhhPT57dGhpcy53YXNMYXN0QWN0aW9uU2hvdyYmdGhpcy5ydW5Mb2NhbEhvb2tzKCJzaG93IixhLmZyb20ucm93LGEuZnJvbS5jb2wpfSxhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MjUwKX1kZXN0cm95''@;'; put 'put ''KCl7dGhpcy5jbGVhckxvY2FsSG9va3MoKX19eGwoejRlLF8xKTtjb25zdCBGbHQ9ejRlLGlzPSItLS0tLS0tLS0iO2Z1bmN0aW9uIG05KGMsbCl7Y29uc3QgYT17fTtyZXR1cm4gWW4oYyxkPT57ZC5mb3JBbGwoKGgsZik9PntoPj0wJiZmPj0wJiYoYVtoXXx8KGFbaF09W10pLGFbaF1bZl09''@;'; put 'put ''bChoLGYpKX0pfSksYX1mdW5jdGlvbiBLbShjLGwsYSxkLGgpe1luKGMsZj0+e2YuZm9yQWxsKCh2LE0pPT57dj49MCYmTT49MCYmZnVuY3Rpb24gemx0KGMsbCxhLGQsaCxmKXtjb25zdCB2PWgoYyxsKTtsZXQgTT1kO3YuY2xhc3NOYW1lJiYoTT0idmVydGljYWwiPT09YT9mdW5jdGlvbiBC''@;'; put 'put ''bHQoYyxsKXtyZXR1cm4tMSE9PWMuaW5kZXhPZihsKT9jOmAke2MucmVwbGFjZSgiaHRUb3AiLCIiKS5yZXBsYWNlKCJodE1pZGRsZSIsIiIpLnJlcGxhY2UoImh0Qm90dG9tIiwiIikucmVwbGFjZSgiICAiLCIiKX0gJHtsfWB9KHYuY2xhc3NOYW1lLGQpOmZ1bmN0aW9uIGpsdChjLGwpe3Jl''@;'; put 'put ''dHVybi0xIT09Yy5pbmRleE9mKGwpP2M6YCR7Yy5yZXBsYWNlKCJodExlZnQiLCIiKS5yZXBsYWNlKCJodENlbnRlciIsIiIpLnJlcGxhY2UoImh0UmlnaHQiLCIiKS5yZXBsYWNlKCJodEp1c3RpZnkiLCIiKS5yZXBsYWNlKCIgICIsIiIpfSAke2x9YH0odi5jbGFzc05hbWUsZCkpLGYoYyxs''@;'; put 'put ''LCJjbGFzc05hbWUiLE0pfSh2LE0sbCxhLGQsaCl9KX0pfWZ1bmN0aW9uIFU0ZShjKXtyZXR1cm5gPHNwYW4gY2xhc3M9InNlbGVjdGVkIj5cdTI3MTM8L3NwYW4+JHtjfWB9ZnVuY3Rpb24gaUYoYyxsKXtsZXQgYT0hMTtyZXR1cm4gQXJyYXkuaXNBcnJheShjKSYmWW4oYyxkPT4oZC5mb3JB''@;'; put 'put ''bGwoKGgsZik9PntpZihoPj0wJiZmPj0wJiZsKGgsZikpcmV0dXJuIGE9ITAsITF9KSxhKSksYX1mdW5jdGlvbiBvRihjLGwpe2NvbnN0IGE9e3RvcDowLGxlZnQ6MH07aWYobCE9PWMub3duZXJEb2N1bWVudCl7Y29uc3R7ZnJhbWVFbGVtZW50OmR9PWwuZGVmYXVsdFZpZXcse3RvcDpoLGxl''@;'; put 'put ''ZnQ6Zn09ZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTthLnRvcD1oLGEubGVmdD1mfXJldHVybiBhfWZ1bmN0aW9uIFVfKGMsbCxhKXtaNGUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIFo0ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXpl''@;'; put 'put ''IHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gcW0oYyxsLGEpe3JldHVybiBjLnNldChEaChjLGwpLGEpLGF9ZnVuY3Rpb24gWGEoYyxsKXtyZXR1cm4gYy5nZXQoRGgoYyxsKSl9ZnVuY3Rpb24gRGgoYyxsLGEpe2lmKCJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IGFGPSJjb21tZW50cyIsSWc9ImNvbW1lbnQiLGZUPSJ2YWx1''@;'; put 'put ''ZSIsc0Y9InJlYWRPbmx5IixwVD1hRixwSj1gcGx1Z2luOiR7YUZ9YDt2YXIgRWw9bmV3IFdlYWtNYXAsTnA9bmV3IFdlYWtNYXAsbEY9bmV3IFdlYWtNYXAsY0Y9bmV3IFdlYWtNYXAsZ0o9bmV3IFdlYWtNYXAsdUY9bmV3IFdlYWtNYXAsajI9bmV3IFdlYWtTZXQ7Y2xhc3MgS2x0IGV4dGVu''@;'; put 'put ''ZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIFpsdChjLGwpe1o0ZShjLGwpLGwuYWRkKGMpfSh0aGlzLGoyKSxmdW5jdGlvbiBXbHQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFlsdChjKXt2YXIgbD1mdW5jdGlvbiBHbHQoYyxsKXtpZigib2JqZWN0''@;'; put 'put ''IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11''@;'; put 'put ''c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJh''@;'; put 'put ''YmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJyYW5nZSIse30pLFVfKHRoaXMsRWwsbnVsbCksVV8odGhpcyxOcCxudWxsKSxVXyh0aGlzLGxGLCExKSxVXyh0aGlzLGNGLCExKSxVXyh0aGlzLGdKLG51bGwpLFVfKHRoaXMsdUYsIiIpfXN0YXRp''@;'; put 'put ''YyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBhRn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiA2MH1zdGF0aWMgZ2V0IERFRkFVTFRfU0VUVElOR1MoKXtyZXR1cm57ZGlzcGxheURlbGF5OjI1MH19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygp''@;'; put 'put ''W2FGXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KFhhKEVsLHRoaXMpfHwocW0oRWwsdGhpcyxuZXcgSWx0KHRoaXMuaG90LnJvb3REb2N1bWVudCx0aGlzLmhvdC5pc1J0bCgpKSksWGEoRWwsdGhpcykuYWRkTG9jYWxIb29rKCJyZXNpemUiLGZ1bmN0aW9uKCl7''@;'; put 'put ''Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIERoKGoyLGwscmN0KS5jYWxsKGwsLi4uZCl9KSksWGEoTnAsdGhpcyl8fHFtKE5wLHRoaXMsbmV3IEZsdCh0aGlzLmdldFNldHRpbmcoImRpc3BsYXlE''@;'; put 'put ''ZWxheSIpKSksdGhpcy5hZGRIb29rKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGE9PnRoaXMuYWRkVG9Db250ZXh0TWVudShhKSksdGhpcy5hZGRIb29rKCJhZnRlclJlbmRlcmVyIiwoYSxkLGgsZix2LE0pPT5EaChqMix0aGlzLGVjdCkuY2FsbCh0aGlzLGEsTSkpLHRoaXMu''@;'; put 'put ''YWRkSG9vaygiYWZ0ZXJTY3JvbGwiLCgpPT5EaChqMix0aGlzLG9jdCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckJlZ2luRWRpdGluZyIsKCk9PnRoaXMuaGlkZSgpKSx0aGlzLmFkZEhvb2soImFmdGVyRG9jdW1lbnRLZXlEb3duIixhPT5EaChqMix0aGlzLGljdCkuY2FsbCh0''@;'; put 'put ''aGlzLGEpKSx0aGlzLmFkZEhvb2soImFmdGVyU2V0VGhlbWUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIERoKGoyLGwsYWN0KS5jYWxsKGwsLi4uZCl9KSxYYShOcCx0aGlz''@;'; put 'put ''KS5hZGRMb2NhbEhvb2soImhpZGUiLCgpPT50aGlzLmhpZGUoKSksWGEoTnAsdGhpcykuYWRkTG9jYWxIb29rKCJzaG93IiwoYSxkKT0+dGhpcy5zaG93QXRDZWxsKGEsZCkpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSx0aGlzLnJlZ2lzdGVyTGlzdGVuZXJzKCksc3VwZXIuZW5hYmxlUGx1''@;'; put 'put ''Z2luKCkpfXVwZGF0ZVBsdWdpbigpe1hhKE5wLHRoaXMpLnVwZGF0ZURlbGF5KHRoaXMuZ2V0U2V0dGluZygiZGlzcGxheURlbGF5IikpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9''@;'; put 'put ''cmVnaXN0ZXJTaG9ydGN1dHMoKXtjb25zdCBsPXRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLGE9bC5nZXRDb250ZXh0KCJncmlkIiksZD1sLmFkZENvbnRleHQocEopO2EuYWRkU2hvcnRjdXQoe2tleXM6W1siQ29udHJvbCIsIkFsdCIsIk0iXV0sY2FsbGJhY2s6KCk9Pntjb25zdCBo''@;'; put 'put ''PXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7cW0oY0YsdGhpcywhMCksdGhpcy5ob3Quc2Nyb2xsVG9Gb2N1c2VkQ2VsbCgoKT0+e3RoaXMuc2V0UmFuZ2UoaCksdGhpcy5zaG93KCksdGhpcy5mb2N1c0VkaXRvcigpLGwuc2V0QWN0aXZlQ29udGV4dE5hbWUocEopLHRoaXMuaG90''@;'; put 'put ''Ll9yZWdpc3RlclRpbWVvdXQoKCk9PntxbShjRix0aGlzLCExKX0pfSl9LHN0b3BQcm9wYWdhdGlvbjohMCxydW5Pbmx5SWY6KCk9Pnt2YXIgaDtyZXR1cm4gbnVsbD09PShoPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1oP3ZvaWQgMDpoLmhpZ2hsaWdodC5p''@;'; put 'put ''c0NlbGwoKX0sZ3JvdXA6cFR9KSxkLmFkZFNob3J0Y3V0KHtrZXlzOltbIkVzY2FwZSJdXSxjYWxsYmFjazooKT0+e1hhKEVsLHRoaXMpLnNldFZhbHVlKFhhKHVGLHRoaXMpKSx0aGlzLmhpZGUoKSxsLnNldEFjdGl2ZUNvbnRleHROYW1lKCJncmlkIil9LHJ1bk9ubHlJZjooKT0+WGEoRWws''@;'; put 'put ''dGhpcykuaXNWaXNpYmxlKCkmJlhhKEVsLHRoaXMpLmlzRm9jdXNlZCgpLGdyb3VwOnBUfSksZC5hZGRTaG9ydGN1dCh7a2V5czpbWyJDb250cm9sL01ldGEiLCJFbnRlciJdXSxjYWxsYmFjazooKT0+e3RoaXMuaGlkZSgpLGwuc2V0QWN0aXZlQ29udGV4dE5hbWUoImdyaWQiKX0scnVuT25s''@;'; put 'put ''eUlmOigpPT5YYShFbCx0aGlzKS5pc1Zpc2libGUoKSYmWGEoRWwsdGhpcykuaXNGb2N1c2VkKCksZ3JvdXA6cFR9KSxkLmFkZFNob3J0Y3V0KHtrZXlzOltbIlNoaWZ0IiwiVGFiIl0sWyJUYWIiXV0sZm9yd2FyZFRvQ29udGV4dDpsLmdldENvbnRleHQoImdyaWQiKSxjYWxsYmFjazooKT0+''@;'; put 'put ''e1hhKEVsLHRoaXMpLnNldFZhbHVlKFhhKEVsLHRoaXMpLmdldFZhbHVlKCkpLHRoaXMuaGlkZSgpLGwuc2V0QWN0aXZlQ29udGV4dE5hbWUoImdyaWQiKX0sZ3JvdXA6cFR9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgi''@;'; put 'put ''Z3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAocFQpfXJlZ2lzdGVyTGlzdGVuZXJzKCl7Y29uc3R7cm9vdERvY3VtZW50Omx9PXRoaXMuaG90LGE9dGhpcy5nZXRFZGl0b3JJbnB1dEVsZW1lbnQoKTt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlb3ZlciIs''@;'; put 'put ''ZD0+RGgoajIsdGhpcyxKbHQpLmNhbGwodGhpcyxkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZWRvd24iLGQ9PkRoKGoyLHRoaXMscWx0KS5jYWxsKHRoaXMsZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2V1cCIsKCk9''@;'; put 'put ''PkRoKGoyLHRoaXMsUWx0KS5jYWxsKHRoaXMpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsImZvY3VzIiwoKT0+RGgoajIsdGhpcyxuY3QpLmNhbGwodGhpcykpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwiYmx1ciIsKCk9PkRoKGoyLHRoaXMs''@;'; put 'put ''dGN0KS5jYWxsKHRoaXMpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuZ2V0RWRpdG9ySW5wdXRFbGVtZW50KCksIm1vdXNlZG93biIsZD0+RGgoajIsdGhpcyxYbHQpLmNhbGwodGhpcyxkKSl9c2V0UmFuZ2UobCl7dGhpcy5yYW5nZT1sfWNsZWFyUmFuZ2UoKXt0''@;'; put 'put ''aGlzLnJhbmdlPXt9fXRhcmdldElzQ2VsbFdpdGhDb21tZW50KGwpe2NvbnN0IGE9RG0obC50YXJnZXQsIlREIiwiVEJPRFkiKTtyZXR1cm4hIShhJiZwYShhLCJodENvbW1lbnRDZWxsIikmJkRtKGEsW3RoaXMuaG90LnJvb3RFbGVtZW50XSkpfXRhcmdldElzQ29tbWVudFRleHRBcmVhKGwp''@;'; put 'put ''e3JldHVybiB0aGlzLmdldEVkaXRvcklucHV0RWxlbWVudCgpPT09bC50YXJnZXR9c2V0Q29tbWVudChsKXtpZighdGhpcy5yYW5nZS5mcm9tKXRocm93IG5ldyBFcnJvcignQmVmb3JlIHVzaW5nIHRoaXMgbWV0aG9kLCBmaXJzdCBzZXQgY2VsbCByYW5nZSAoaG90LmdldFBsdWdpbigiY29t''@;'; put 'put ''bWVudCIpLnNldFJhbmdlKCkpJyk7Y29uc3QgYT1YYShFbCx0aGlzKS5nZXRWYWx1ZSgpO2xldCBkPSIiO251bGwhPWw/ZD1sOm51bGwhPWEmJihkPWEpLHRoaXMudXBkYXRlQ29tbWVudE1ldGEodGhpcy5yYW5nZS5mcm9tLnJvdyx0aGlzLnJhbmdlLmZyb20uY29sLHtbZlRdOmR9KSx0aGlz''@;'; put 'put ''LmhvdC5yZW5kZXIoKX1zZXRDb21tZW50QXRDZWxsKGwsYSxkKXt0aGlzLnNldFJhbmdlKHtmcm9tOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwsYSl9KSx0aGlzLnNldENvbW1lbnQoZCl9cmVtb3ZlQ29tbWVudCgpe2xldCBsPSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1h''@;'; put 'put ''cmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF07aWYoIXRoaXMucmFuZ2UuZnJvbSl0aHJvdyBuZXcgRXJyb3IoJ0JlZm9yZSB1c2luZyB0aGlzIG1ldGhvZCwgZmlyc3Qgc2V0IGNlbGwgcmFuZ2UgKGhvdC5nZXRQbHVnaW4oImNvbW1lbnQiKS5zZXRSYW5nZSgpKScpO3RoaXMuaG90LnNldENl''@;'; put 'put ''bGxNZXRhKHRoaXMucmFuZ2UuZnJvbS5yb3csdGhpcy5yYW5nZS5mcm9tLmNvbCxJZyksbCYmdGhpcy5ob3QucmVuZGVyKCksdGhpcy5oaWRlKCl9cmVtb3ZlQ29tbWVudEF0Q2VsbChsLGEpe2xldCBkPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1''@;'; put 'put ''bWVudHNbMl07dGhpcy5zZXRSYW5nZSh7ZnJvbTp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLGEpfSksdGhpcy5yZW1vdmVDb21tZW50KGQpfWdldENvbW1lbnQoKXtyZXR1cm4gdGhpcy5nZXRDb21tZW50TWV0YSh0aGlzLnJhbmdlLmZyb20ucm93LHRoaXMucmFuZ2UuZnJvbS5jb2ws''@;'; put 'put ''ZlQpfWdldENvbW1lbnRBdENlbGwobCxhKXtyZXR1cm4gdGhpcy5nZXRDb21tZW50TWV0YShsLGEsZlQpfXNob3coKXt2YXIgbDtpZighdGhpcy5yYW5nZS5mcm9tKXRocm93IG5ldyBFcnJvcignQmVmb3JlIHVzaW5nIHRoaXMgbWV0aG9kLCBmaXJzdCBzZXQgY2VsbCByYW5nZSAoaG90Lmdl''@;'; put 'put ''dFBsdWdpbigiY29tbWVudCIpLnNldFJhbmdlKCkpJyk7Y29uc3R7ZnJvbTp7cm93OmEsY29sOmR9fT10aGlzLnJhbmdlO2lmKGE8MHx8YT50aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKS0xfHxkPDB8fGQ+dGhpcy5ob3QuY291bnRTb3VyY2VDb2xzKCktMSlyZXR1cm4hMTtjb25zdCBoPXRo''@;'; put 'put ''aXMuaG90LmdldENlbGxNZXRhKHRoaXMucmFuZ2UuZnJvbS5yb3csdGhpcy5yYW5nZS5mcm9tLmNvbCk7cmV0dXJuIFhhKE5wLHRoaXMpLmNhbmNlbEhpZGluZygpLFhhKEVsLHRoaXMpLnNldFZhbHVlKG51bGwhPT0obD1oW0lnXT9oW0lnXVtmVF06bnVsbCkmJnZvaWQgMCE9PWw/bDoiIiks''@;'; put 'put ''WGEoRWwsdGhpcykuc2hvdygpLHRoaXMucmVmcmVzaEVkaXRvcighMCksITB9c2hvd0F0Q2VsbChsLGEpe3JldHVybiB0aGlzLnNldFJhbmdlKHtmcm9tOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwsYSl9KSx0aGlzLnNob3coKX1oaWRlKCl7WGEoRWwsdGhpcykuaGlkZSgpfXJlZnJl''@;'; put 'put ''c2hFZGl0b3IoKXtpZighKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF18fHRoaXMucmFuZ2UuZnJvbSYmWGEoRWwsdGhpcykuaXNWaXNpYmxlKCkpKXJldHVybjtjb25zdHtyb3dJbmRleE1hcHBlcjphLGNvbHVtbkluZGV4TWFwcGVyOmR9''@;'; put 'put ''PXRoaXMuaG90LHtyb3c6aCxjb2w6Zn09dGhpcy5yYW5nZS5mcm9tO2xldCB2PWEuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChoKSxNPWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChmKTtjb25zdCBEPW51bGw9PT12O1hhKEVsLHRoaXMpLnNldFBvc2l0aW9uKDAsMCksbnVs''@;'; put 'put ''bD09PXYmJih2PWEuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChhLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChoLC0xKSkpLG51bGw9PT1NJiYoTT1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZiwtMSkpKTtjb25zdCBaPW51''@;'; put 'put ''bGw9PT12LG5lPW51bGw9PT1NO3Y9dj8/MCxNPU0/PzA7Y29uc3R7cm9vdFdpbmRvdzpjZSx2aWV3Ontfd3Q6YmV9fT10aGlzLmhvdCx7d3RUYWJsZTpFZX09YmUsQmU9YmUuZ2V0Q2VsbCh7cm93OnYsY29sOk19LCEwKSxxZT10aGlzLmdldENvbW1lbnRNZXRhKGgsZiwic3R5bGUiKTtxZT9Y''@;'; put 'put ''YShFbCx0aGlzKS5zZXRTaXplKHFlLndpZHRoLHFlLmhlaWdodCk6WGEoRWwsdGhpcykucmVzZXRTaXplKCk7Y29uc3QgbnQ9bmU/MDpFZS5nZXRDb2x1bW5XaWR0aChNKSxsdD1EJiYhWj9NdShCZSk6MCx7bGVmdDptdCx0b3A6SnQsd2lkdGg6eW4saGVpZ2h0OkNufT1CZS5nZXRCb3VuZGlu''@;'; put 'put ''Z0NsaWVudFJlY3QoKSx7d2lkdGg6dG4saGVpZ2h0OnhufT1YYShFbCx0aGlzKS5nZXRTaXplKCkse2lubmVyV2lkdGg6UW4saW5uZXJIZWlnaHQ6eWl9PXRoaXMuaG90LnJvb3RXaW5kb3cseXI9dGhpcy5ob3Qucm9vdERvY3VtZW50LmRvY3VtZW50RWxlbWVudCxHbj1oMCh0aGlzLmhvdC5y''@;'; put 'put ''b290RG9jdW1lbnQpLGlpPWYkKHRoaXMuaG90LnJvb3RXaW5kb3cpP0duOjAsX2k9cCQodGhpcy5ob3Qucm9vdFdpbmRvdyk/R246MDtsZXQgUG49bXQrY2Uuc2Nyb2xsWCtudCxqcj1KdCtjZS5zY3JvbGxZK2x0O3RoaXMuaG90LmlzUnRsKCkmJihQbi09dG4rbnQpLHRoaXMuaG90LmlzTHRy''@;'; put 'put ''KCkmJm10K3luK3RuPlFuLWlpP1BuPW10K2NlLnNjcm9sbFgtdG4tMTp0aGlzLmhvdC5pc1J0bCgpJiZQbjwtKHlyLnNjcm9sbFdpZHRoLXlyLmNsaWVudFdpZHRoKSYmKFBuPW10K2NlLnNjcm9sbFgrbnQrMSksSnQreG4+eWktX2kmJihqci09eG4tQ24rMSksWGEoRWwsdGhpcykuc2V0UG9z''@;'; put 'put ''aXRpb24oUG4sanIpLFhhKEVsLHRoaXMpLnNldFJlYWRPbmx5U3RhdGUodGhpcy5nZXRDb21tZW50TWV0YShoLGYsc0YpKSxYYShFbCx0aGlzKS5vYnNlcnZlU2l6ZSgpfWZvY3VzRWRpdG9yKCl7WGEoRWwsdGhpcykuZm9jdXMoKX11cGRhdGVDb21tZW50TWV0YShsLGEsZCl7Y29uc3QgaD10''@;'; put 'put ''aGlzLmhvdC5nZXRDZWxsTWV0YShsLGEpW0lnXTtsZXQgZjtoPyhmPW0xKGgpLHdFKGYsZCkpOmY9ZCx0aGlzLmhvdC5zZXRDZWxsTWV0YShsLGEsSWcsZil9Z2V0Q29tbWVudE1ldGEobCxhLGQpe2NvbnN0IGg9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEobCxhKTtpZihoW0lnXSlyZXR1cm4gaFtJ''@;'; put 'put ''Z11bZF19YWRkVG9Db250ZXh0TWVudShsKXtsLml0ZW1zLnB1c2goe25hbWU6aXN9LGZ1bmN0aW9uIE5sdChjKXtyZXR1cm57a2V5OiJjb21tZW50c0FkZEVkaXQiLG5hbWUoKXt2YXIgbDtjb25zdCBhPW51bGw9PT0obD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1s''@;'; put 'put ''P3ZvaWQgMDpsLmhpZ2hsaWdodDtyZXR1cm4gbnVsbCE9YSYmYS5pc0NlbGwoKSYmYy5nZXRDb21tZW50QXRDZWxsKGEucm93LGEuY29sKT90aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UodHEpOnRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShlcSl9LGNhbGxiYWNrKCl7Y29uc3QgbD10aGlzLmdl''@;'; put 'put ''dFNlbGVjdGVkUmFuZ2VMYXN0KCk7Yy5zZXRSYW5nZShsKSxjLnNob3coKSxjLmZvY3VzRWRpdG9yKCl9LGRpc2FibGVkKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7cmV0dXJuISEoIWx8fGwuaGlnaGxpZ2h0LmlzSGVhZGVyKCl8fHRoaXMuc2VsZWN0aW9uLmlzRW50''@;'; put 'put ''aXJlUm93U2VsZWN0ZWQoKSYmdGhpcy5zZWxlY3Rpb24uaXNFbnRpcmVDb2x1bW5TZWxlY3RlZCgpfHwwPT09dGhpcy5jb3VudFJlbmRlcmVkUm93cygpfHwwPT09dGhpcy5jb3VudFJlbmRlcmVkQ29scygpKX19fSh0aGlzKSxmdW5jdGlvbiBWbHQoYyl7cmV0dXJue2tleToiY29tbWVudHNS''@;'; put 'put ''ZW1vdmUiLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKG5xKX0sY2FsbGJhY2soKXt0aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkuZm9yQWxsKChhLGQpPT57YT49MCYmZD49MCYmYy5yZW1vdmVDb21tZW50QXRDZWxsKGEsZCwhMSl9KSx0aGlzLnJlbmRlcigpfSxk''@;'; put 'put ''aXNhYmxlZCgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3JldHVybiEhKCFsfHxsLmhpZ2hsaWdodC5pc0hlYWRlcigpfHx0aGlzLnNlbGVjdGlvbi5pc0VudGlyZVJvd1NlbGVjdGVkKCkmJnRoaXMuc2VsZWN0aW9uLmlzRW50aXJlQ29sdW1uU2VsZWN0ZWQoKXx8MD09''@;'; put 'put ''PXRoaXMuY291bnRSZW5kZXJlZFJvd3MoKXx8MD09PXRoaXMuY291bnRSZW5kZXJlZENvbHMoKSl9fX0odGhpcyksZnVuY3Rpb24gVWx0KGMpe3JldHVybntrZXk6ImNvbW1lbnRzUmVhZE9ubHkiLG5hbWUoKXtjb25zdCBsPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShycSk7cmV0dXJuIGlG''@;'; put 'put ''KHRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLChkLGgpPT5jLmdldENvbW1lbnRNZXRhKGQsaCxzRikpP1U0ZShsKTpsfSxjYWxsYmFjaygpe3RoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKS5mb3JBbGwoKGEsZCk9PntpZihhPj0wJiZkPj0wKXtjb25zdCBoPSEhYy5nZXRDb21tZW50TWV0YShh''@;'; put 'put ''LGQsc0YpO2MudXBkYXRlQ29tbWVudE1ldGEoYSxkLHtbc0ZdOiFofSl9fSl9LGRpc2FibGVkKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7cmV0dXJuISEoIWx8fGwuaGlnaGxpZ2h0LmlzSGVhZGVyKCl8fCFjLmdldENvbW1lbnRBdENlbGwobC5oaWdobGlnaHQucm93''@;'; put 'put ''LGwuaGlnaGxpZ2h0LmNvbCl8fHRoaXMuc2VsZWN0aW9uLmlzRW50aXJlUm93U2VsZWN0ZWQoKSYmdGhpcy5zZWxlY3Rpb24uaXNFbnRpcmVDb2x1bW5TZWxlY3RlZCgpfHwwPT09dGhpcy5jb3VudFJlbmRlcmVkUm93cygpfHwwPT09dGhpcy5jb3VudFJlbmRlcmVkQ29scygpKX19fSh0aGlz''@;'; put 'put ''KSl9Z2V0RWRpdG9ySW5wdXRFbGVtZW50KCl7cmV0dXJuIFhhKEVsLHRoaXMpLmdldElucHV0RWxlbWVudCgpfWRlc3Ryb3koKXt2YXIgbCxhO251bGw9PT0obD1YYShFbCx0aGlzKSl8fHZvaWQgMD09PWx8fGwuZGVzdHJveSgpLG51bGw9PT0oYT1YYShOcCx0aGlzKSl8fHZvaWQgMD09PWF8''@;'; put 'put ''fGEuZGVzdHJveSgpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gcWx0KGMpe2lmKHRoaXMuaG90LnZpZXcmJnRoaXMuaG90LnZpZXcuX3d0JiYhWGEobEYsdGhpcykmJiF0aGlzLnRhcmdldElzQ29tbWVudFRleHRBcmVhKGMpKXtjb25zdCBsPURtKGMudGFyZ2V0LCJURCIsIlRCT0RZIik7''@;'; put 'put ''bGV0IGE9bnVsbDtsJiYoYT10aGlzLmhvdC5nZXRDb29yZHMobCkpLCghbHx8dGhpcy5yYW5nZS5mcm9tJiZhJiYodGhpcy5yYW5nZS5mcm9tLnJvdyE9PWEucm93fHx0aGlzLnJhbmdlLmZyb20uY29sIT09YS5jb2wpKSYmdGhpcy5oaWRlKCl9fWZ1bmN0aW9uIFhsdChjKXtjLnN0b3BQcm9w''@;'; put 'put ''YWdhdGlvbigpfWZ1bmN0aW9uIEpsdChjKXtjb25zdHtyb290RG9jdW1lbnQ6bH09dGhpcy5ob3Q7aWYoIShYYShsRix0aGlzKXx8WGEoRWwsdGhpcykuaXNGb2N1c2VkKCl8fHBhKGMudGFyZ2V0LCJ3dEJvcmRlciIpfHxYYShnSix0aGlzKT09PWMudGFyZ2V0KSYmWGEoRWwsdGhpcykpaWYo''@;'; put 'put ''cW0oZ0osdGhpcyxsLmVsZW1lbnRGcm9tUG9pbnQoYy5jbGllbnRYLGMuY2xpZW50WSkpLHRoaXMudGFyZ2V0SXNDZWxsV2l0aENvbW1lbnQoYykpe2NvbnN0IGE9dGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZSh0aGlzLmhvdC5nZXRDb29yZHMoYy50YXJnZXQpKTtYYShOcCx0aGlzKS5zaG93''@;'; put 'put ''KGEpfWVsc2UgSW0oYy50YXJnZXQsbCkmJiF0aGlzLnRhcmdldElzQ29tbWVudFRleHRBcmVhKGMpJiZYYShOcCx0aGlzKS5oaWRlKCl9ZnVuY3Rpb24gUWx0KCl7cW0obEYsdGhpcywhMSl9ZnVuY3Rpb24gZWN0KGMsbCl7bFtJZ10mJmxbSWddW2ZUXSYmVGkoYyxsLmNvbW1lbnRlZENlbGxD''@;'; put 'put ''bGFzc05hbWUpfWZ1bmN0aW9uIHRjdCgpe3FtKHVGLHRoaXMsIiIpLHRoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLnNldEFjdGl2ZUNvbnRleHROYW1lKCJncmlkIiksdGhpcy5zZXRDb21tZW50KCl9ZnVuY3Rpb24gbmN0KCl7cW0odUYsdGhpcyx0aGlzLmdldENvbW1lbnQoKSksdGhp''@;'; put 'put ''cy5ob3QubGlzdGVuKCksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuc2V0QWN0aXZlQ29udGV4dE5hbWUocEopfWZ1bmN0aW9uIHJjdChjLGwpe3RoaXMudXBkYXRlQ29tbWVudE1ldGEodGhpcy5yYW5nZS5mcm9tLnJvdyx0aGlzLnJhbmdlLmZyb20uY29sLHtzdHlsZTp7d2lkdGg6''@;'; put 'put ''YyxoZWlnaHQ6bH19KX1mdW5jdGlvbiBpY3QoYyl7WGEoRWwsdGhpcykuaXNGb2N1c2VkKCkmJlIyKGMpfWZ1bmN0aW9uIG9jdCgpe1hhKGNGLHRoaXMpfHx0aGlzLmhpZGUoKX1mdW5jdGlvbiBhY3QoKXtjb25zdCBjPVhhKEVsLHRoaXMpLmdldEVkaXRvckVsZW1lbnQoKTtjYShjLC9odC10''@;'; put 'put ''aGVtZS0uKi9nKSxUaShjLHRoaXMuaG90LmdldEN1cnJlbnRUaGVtZU5hbWUoKSl9ZnVuY3Rpb24gbUooYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHNjdChjKXt2YXIgbD1mdW5jdGlvbiBsY3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9s''@;'; put 'put ''LnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigi''@;'; put 'put ''c3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNb''@;'; put 'put ''bF09YSxjfWNsYXNzIFk0ZXtjb25zdHJ1Y3RvcihsKXttSih0aGlzLCJob3QiLHZvaWQgMCksbUoodGhpcywiY29tbWFuZHMiLHt9KSxtSih0aGlzLCJjb21tb25DYWxsYmFjayIsbnVsbCksdGhpcy5ob3Q9bH1yZWdpc3RlckNvbW1hbmQobCxhKXt0aGlzLmNvbW1hbmRzW2xdPWF9c2V0Q29t''@;'; put 'put ''bW9uQ2FsbGJhY2sobCl7dGhpcy5jb21tb25DYWxsYmFjaz1sfWV4ZWN1dGUobCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYT4xP2EtMTowKSxoPTE7aDxhO2grKylkW2gtMV09YXJndW1lbnRzW2hdO2NvbnN0IGY9bC5zcGxpdCgiOiIpLHY9ZlswXSxNPTI9PT1m''@;'; put 'put ''Lmxlbmd0aD9mWzFdOm51bGw7bGV0IEQ9dGhpcy5jb21tYW5kc1t2XTtpZighRCl0aHJvdyBuZXcgRXJyb3IoYE1lbnUgY29tbWFuZCAnJHt2fScgbm90IGV4aXN0cy5gKTtpZihNJiZELnN1Ym1lbnUmJihEPWZ1bmN0aW9uIGNjdChjLGwpe2xldCBhO3JldHVybiBZbihsLGQ9Pntjb25zdCBo''@;'; put 'put ''PWQua2V5P2Qua2V5LnNwbGl0KCI6Iik6bnVsbDtpZihBcnJheS5pc0FycmF5KGgpJiZoWzFdPT09YylyZXR1cm4gYT1kLCExfSksYX0oTSxELnN1Ym1lbnUuaXRlbXMpKSwhMD09PUQuZGlzYWJsZWR8fCJmdW5jdGlvbiI9PXR5cGVvZiBELmRpc2FibGVkJiYhMD09PUQuZGlzYWJsZWQuY2Fs''@;'; put 'put ''bCh0aGlzLmhvdCl8fEV1KEQsInN1Ym1lbnUiKSlyZXR1cm47Y29uc3QgWj1bXTsiZnVuY3Rpb24iPT10eXBlb2YgRC5jYWxsYmFjayYmWi5wdXNoKEQuY2FsbGJhY2spLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLmNvbW1vbkNhbGxiYWNrJiZaLnB1c2godGhpcy5jb21tb25DYWxsYmFjayks''@;'; put 'put ''ZC51bnNoaWZ0KGYuam9pbigiOiIpKSxZbihaLG5lPT5uZS5hcHBseSh0aGlzLmhvdCxkKSl9fWNvbnN0IHoyPSJhbGlnbm1lbnQiLGRGPSJjbGVhcl9jb2x1bW4iLGdUPSJjb2xfbGVmdCIsbVQ9ImNvbF9yaWdodCIsdlQ9Im1ha2VfcmVhZF9vbmx5IixoRj0icmVkbyIsYlQ9InJlbW92ZV9j''@;'; put 'put ''b2wiLGZGPSJyZW1vdmVfcm93IixwRj0icm93X2Fib3ZlIixnRj0icm93X2JlbG93Iix5VD0ibm9faXRlbXMiLG1GPSJ1bmRvIixHNGU9W3BGLGdGLGdULG1ULGRGLGZGLGJULG1GLGhGLHZULHoyLGlzLHlUXSwkNGU9e1tpc106ZnVuY3Rpb24gSGx0KCl7cmV0dXJue25hbWU6aXN9fSxbeVRd''@;'; put 'put ''OmZ1bmN0aW9uIF9jdCgpe3JldHVybntrZXk6eVQsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoUEspfSxkaXNhYmxlZDohMCxpc0NvbW1hbmQ6ITF9fSxbcEZdOmZ1bmN0aW9uIGJjdCgpe3JldHVybntrZXk6cEYsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0''@;'; put 'put ''ZWRQaHJhc2UoRkspfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmdldFRvcExlZnRDb3JuZXIoKTt0aGlzLmFsdGVyKCJpbnNlcnRfcm93X2Fib3ZlIixjLnJvdywxLCJDb250ZXh0TWVudS5yb3dBYm92ZSIpfSxkaXNhYmxlZCgpe2NvbnN0IGM9dGhp''@;'; put 'put ''cy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3JldHVybiEhKCFjfHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXx8Yy5pc1NpbmdsZUhlYWRlcigpJiZjLmhpZ2hsaWdodC5yb3c8MHx8dGhpcy5jb3VudFNvdXJjZVJvd3MoKT49dGhpcy5nZXRTZXR0aW5ncygpLm1h''@;'; put 'put ''eFJvd3MpfHwhIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiYwPT09dGhpcy5jb3VudFJvd3MoKX0saGlkZGVuKCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd0luc2VydFJvd319fSxbZ0ZdOmZ1bmN0aW9uIHljdCgpe3JldHVybntrZXk6Z0YsbmFtZSgpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoSEspfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmdldEJvdHRvbVJpZ2h0Q29ybmVyKCk7dGhpcy5hbHRlcigiaW5zZXJ0X3Jvd19iZWxvdyIsYy5yb3csMSwiQ29udGV4dE1lbnUucm93QmVsb3ci''@;'; put 'put ''KX0sZGlzYWJsZWQoKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1cm4hISghY3x8dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCl8fGMuaXNTaW5nbGVIZWFkZXIoKSYmYy5oaWdobGlnaHQucm93PDB8fHRoaXMuY291bnRTb3VyY2VSb3dz''@;'; put 'put ''KCk+PXRoaXMuZ2V0U2V0dGluZ3MoKS5tYXhSb3dzKX0saGlkZGVuKCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd0luc2VydFJvd319fSxbZ1RdOmZ1bmN0aW9uIGhjdCgpe3JldHVybntrZXk6Z1QsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoTkspfSxj''@;'; put 'put ''YWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmdldFRvcExlZnRDb3JuZXIoKSxsPXRoaXMuaXNSdGwoKT8iaW5zZXJ0X2NvbF9lbmQiOiJpbnNlcnRfY29sX3N0YXJ0Ijt0aGlzLmFsdGVyKGwsYy5jb2wsMSwiQ29udGV4dE1lbnUuY29sdW1uTGVmdCIpfSxk''@;'; put 'put ''aXNhYmxlZCgpe2lmKCF0aGlzLmlzQ29sdW1uTW9kaWZpY2F0aW9uQWxsb3dlZCgpKXJldHVybiEwO2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3JldHVybiEhKCFjfHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKXx8Yy5pc1NpbmdsZUhlYWRlcigp''@;'; put 'put ''JiZjLmhpZ2hsaWdodC5jb2w8MHx8dGhpcy5jb3VudFNvdXJjZUNvbHMoKT49dGhpcy5nZXRTZXR0aW5ncygpLm1heENvbHMpfHwhIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiYwPT09dGhpcy5jb3VudENvbHMoKX0saGlkZGVuKCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGlu''@;'; put 'put ''Z3MoKS5hbGxvd0luc2VydENvbHVtbn19fSxbbVRdOmZ1bmN0aW9uIGZjdCgpe3JldHVybntrZXk6bVQsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoVkspfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmdldFRvcFJpZ2h0Q29y''@;'; put 'put ''bmVyKCksbD10aGlzLmlzUnRsKCk/Imluc2VydF9jb2xfc3RhcnQiOiJpbnNlcnRfY29sX2VuZCI7dGhpcy5hbHRlcihsLGMuY29sLDEsIkNvbnRleHRNZW51LmNvbHVtblJpZ2h0Iil9LGRpc2FibGVkKCl7aWYoIXRoaXMuaXNDb2x1bW5Nb2RpZmljYXRpb25BbGxvd2VkKCkpcmV0dXJuITA7''@;'; put 'put ''Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7cmV0dXJuISEoIWN8fHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpfHxjLmlzU2luZ2xlSGVhZGVyKCkmJmMuaGlnaGxpZ2h0LmNvbDwwfHx0aGlzLmNvdW50U291cmNlQ29scygpPj10aGlzLmdldFNldHRp''@;'; put 'put ''bmdzKCkubWF4Q29scyl9LGhpZGRlbigpe3JldHVybiF0aGlzLmdldFNldHRpbmdzKCkuYWxsb3dJbnNlcnRDb2x1bW59fX0sW2RGXTpmdW5jdGlvbiBkY3QoKXtyZXR1cm57a2V5OmRGLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFpLKX0sY2FsbGJhY2soYyxsKXtj''@;'; put 'put ''b25zdCBhPWxbMF0uc3RhcnQuY29sLGQ9bFswXS5lbmQuY29sO3RoaXMuY291bnRSb3dzKCkmJnRoaXMucG9wdWxhdGVGcm9tQXJyYXkoMCxhLFtbbnVsbF1dLE1hdGgubWF4KGxbMF0uc3RhcnQucm93LGxbMF0uZW5kLnJvdyksZCwiQ29udGV4dE1lbnUuY2xlYXJDb2x1bW4iKX0sZGlzYWJs''@;'; put 'put ''ZWQoKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighY3x8Yy5pc1NpbmdsZUhlYWRlcigpJiZjLmhpZ2hsaWdodC5jb2w8MHx8IXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpKXJldHVybiEwO2xldCBsPSExO3JldHVybiBjLmZvckFsbCgo''@;'; put 'put ''YSxkKT0+e2lmKGE8MHx8ZDwwKXJldHVybiEwO2NvbnN0e3JlYWRPbmx5Omh9PXRoaXMuZ2V0Q2VsbE1ldGEoYSxkKTtyZXR1cm4hIWh8fChsPSEwLCExKX0pLCFsfX19LFtmRl06ZnVuY3Rpb24gdmN0KCl7cmV0dXJue2tleTpmRixuYW1lKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkKCk7''@;'; put 'put ''bGV0IGw9MDtpZihjKWlmKGMubGVuZ3RoPjEpbD0xO2Vsc2V7Y29uc3RbYSwsZF09Y1swXTthLWQhPTAmJihsPTEpfXJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoQkssbCl9LGNhbGxiYWNrKCl7dGhpcy5hbHRlcigicmVtb3ZlX3JvdyIsZnVuY3Rpb24gQXR0KGMpe2NvbnN0IGw9''@;'; put 'put ''d18oYy5nZXRTZWxlY3RlZCgpKTtpZigwPT09bHx8MT09PWwpcmV0dXJuW107Y29uc3QgYT0kRShsLHtjcmVhdGVDZWxsQ29vcmRzOmMuX2NyZWF0ZUNlbGxDb29yZHMuYmluZChjKSxjcmVhdGVDZWxsUmFuZ2U6Yy5fY3JlYXRlQ2VsbFJhbmdlLmJpbmQoYyl9KSxkPW5ldyBTZXQ7cmV0dXJu''@;'; put 'put ''IFluKGMuZ2V0U2VsZWN0ZWQoKSx2PT57Y29uc3R7ZnJvbTpNLHRvOkR9PWEodiksWj1NYXRoLm1heChNLnJvdywwKTtZbihBcnJheS5mcm9tKG5ldyBBcnJheShELnJvdy1aKzEpLChjZSxiZSk9PlorYmUpLGNlPT57ZC5oYXMoY2UpfHxkLmFkZChjZSl9KX0pLHF1KEFycmF5LmZyb20oZCku''@;'; put 'put ''c29ydCgodixNKT0+di1NKSwodixNLEQsWik9PigwIT09RCYmTT09PVpbRC0xXSsxP3Zbdi5sZW5ndGgtMV1bMV0rPTE6di5wdXNoKFtNLDFdKSx2KSxbXSl9KHRoaXMpLDEsIkNvbnRleHRNZW51LnJlbW92ZVJvdyIpfSxkaXNhYmxlZCgpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdl''@;'; put 'put ''TGFzdCgpO2lmKCFjfHxjLmlzU2luZ2xlSGVhZGVyKCkmJmMuaGlnaGxpZ2h0LnJvdzwwKXJldHVybiEwO2NvbnN0IGw9dGhpcy5jb3VudFJvd3MoKTtyZXR1cm4gdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCk/MD09PWw6dGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29s''@;'; put 'put ''dW1uSGVhZGVyKCl8fDA9PT1sfSxoaWRkZW4oKXtyZXR1cm4hdGhpcy5nZXRTZXR0aW5ncygpLmFsbG93UmVtb3ZlUm93fX19LFtiVF06ZnVuY3Rpb24gbWN0KCl7cmV0dXJue2tleTpiVCxuYW1lKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkKCk7bGV0IGw9MDtpZihjKWlmKGMubGVuZ3Ro''@;'; put 'put ''PjEpbD0xO2Vsc2V7Y29uc3RbLGEsLGRdPWNbMF07YS1kIT0wJiYobD0xKX1yZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGpLLGwpfSxjYWxsYmFjaygpe3RoaXMuYWx0ZXIoInJlbW92ZV9jb2wiLGZ1bmN0aW9uIFR0dChjKXtjb25zdCBsPXdfKGMuZ2V0U2VsZWN0ZWQoKSk7aWYo''@;'; put 'put ''MD09PWx8fDE9PT1sKXJldHVybltdO2NvbnN0IGE9JEUobCx7Y3JlYXRlQ2VsbENvb3JkczpjLl9jcmVhdGVDZWxsQ29vcmRzLmJpbmQoYyksY3JlYXRlQ2VsbFJhbmdlOmMuX2NyZWF0ZUNlbGxSYW5nZS5iaW5kKGMpfSksZD1uZXcgU2V0O3JldHVybiBZbihjLmdldFNlbGVjdGVkKCksdj0+''@;'; put 'put ''e2NvbnN0e2Zyb206TSx0bzpEfT1hKHYpLFo9TWF0aC5tYXgoTS5jb2wsMCk7WW4oQXJyYXkuZnJvbShuZXcgQXJyYXkoRC5jb2wtWisxKSwoY2UsYmUpPT5aK2JlKSxjZT0+e2QuaGFzKGNlKXx8ZC5hZGQoY2UpfSl9KSxxdShBcnJheS5mcm9tKGQpLnNvcnQoKHYsTSk9PnYtTSksKHYsTSxE''@;'; put 'put ''LFopPT4oMCE9PUQmJk09PT1aW0QtMV0rMT92W3YubGVuZ3RoLTFdWzFdKz0xOnYucHVzaChbTSwxXSksdiksW10pfSh0aGlzKSxudWxsLCJDb250ZXh0TWVudS5yZW1vdmVDb2x1bW4iKX0sZGlzYWJsZWQoKXtpZighdGhpcy5pc0NvbHVtbk1vZGlmaWNhdGlvbkFsbG93ZWQoKSlyZXR1cm4h''@;'; put 'put ''MDtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighY3x8Yy5pc1NpbmdsZUhlYWRlcigpJiZjLmhpZ2hsaWdodC5jb2w8MClyZXR1cm4hMDtjb25zdCBsPXRoaXMuY291bnRDb2xzKCk7cmV0dXJuIHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpPzA9PT1s''@;'; put 'put ''OnRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpfHwwPT09bH0saGlkZGVuKCl7cmV0dXJuIXRoaXMuZ2V0U2V0dGluZ3MoKS5hbGxvd1JlbW92ZUNvbHVtbn19fSxbbUZdOmZ1bmN0aW9uIHdjdCgpe3JldHVybntrZXk6bUYsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5z''@;'; put 'put ''bGF0ZWRQaHJhc2UoekspfSxjYWxsYmFjaygpe3RoaXMudW5kbygpfSxoaWRkZW4oKXtjb25zdCBjPXRoaXMuZ2V0UGx1Z2luKCJ1bmRvUmVkbyIpO3JldHVybiFjfHwhYy5pc0VuYWJsZWQoKX0sZGlzYWJsZWQoKXtyZXR1cm4hdGhpcy5nZXRQbHVnaW4oInVuZG9SZWRvIikuaXNVbmRvQXZh''@;'; put 'put ''aWxhYmxlKCl9fX0sW2hGXTpmdW5jdGlvbiBnY3QoKXtyZXR1cm57a2V5OmhGLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFVLKX0sY2FsbGJhY2soKXt0aGlzLnJlZG8oKX0saGlkZGVuKCl7Y29uc3QgYz10aGlzLmdldFBsdWdpbigidW5kb1JlZG8iKTtyZXR1cm4h''@;'; put 'put ''Y3x8IWMuaXNFbmFibGVkKCl9LGRpc2FibGVkKCl7cmV0dXJuIXRoaXMuZ2V0UGx1Z2luKCJ1bmRvUmVkbyIpLmlzUmVkb0F2YWlsYWJsZSgpfX19LFt2VF06ZnVuY3Rpb24gcGN0KCl7cmV0dXJue2tleTp2VCxjaGVja2FibGU6ITAsYXJpYUNoZWNrZWQoKXtyZXR1cm4gaUYodGhpcy5nZXRT''@;'; put 'put ''ZWxlY3RlZFJhbmdlKCksKGwsYSk9PnRoaXMuZ2V0Q2VsbE1ldGEobCxhKS5yZWFkT25seSl9LGFyaWFMYWJlbCgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UocFApfSxuYW1lKCl7bGV0IGM9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKHBQKTtyZXR1cm4gaUYodGhpcy5nZXRT''@;'; put 'put ''ZWxlY3RlZFJhbmdlKCksKGEsZCk9PnRoaXMuZ2V0Q2VsbE1ldGEoYSxkKS5yZWFkT25seSkmJihjPVU0ZShjKSksY30sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9aUYoYywoYSxkKT0+dGhpcy5nZXRDZWxsTWV0YShhLGQpLnJlYWRPbmx5KTtZbihjLGE9''@;'; put 'put ''PnthLmZvckFsbCgoZCxoKT0+e2Q+PTAmJmg+PTAmJnRoaXMuc2V0Q2VsbE1ldGEoZCxoLCJyZWFkT25seSIsIWwpfSl9KSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZCgpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3JldHVybiEoYyYmIWMuaXNTaW5nbGVIZWFkZXIoKSYm''@;'; put 'put ''IXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpJiYwIT09dGhpcy5jb3VudFJvd3MoKSYmMCE9PXRoaXMuY291bnRDb2xzKCkmJnRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpJiYwIT09dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCkubGVuZ3RoKX19fSxbejJdOmZ1bmN0aW9uIHVjdCgp''@;'; put 'put ''e3JldHVybntrZXk6ejIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoaXEpfSxkaXNhYmxlZCgpe2lmKDA9PT10aGlzLmNvdW50Um93cygpfHwwPT09dGhpcy5jb3VudENvbHMoKSlyZXR1cm4hMDtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtyZXR1''@;'; put 'put ''cm4hKGMmJiFjLmlzU2luZ2xlSGVhZGVyKCkmJnRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpJiYhdGhpcy5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29ybmVyKCkpfSxzdWJtZW51OntpdGVtczpbe2tleTpgJHt6Mn06bGVmdGAsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2Uo''@;'; put 'put ''b3EpfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD1tOShjLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZikuY2xhc3NOYW1lKSxhPSJob3Jpem9udGFsIixkPSJodExlZnQiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQp''@;'; put 'put ''LEttKGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZix2LE0pPT50aGlzLnNldENlbGxNZXRhKGgsZix2LE0pKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se2tleTpgJHt6Mn06Y2VudGVyYCxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShh''@;'; put 'put ''cSl9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPW05KGMsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKS5jbGFzc05hbWUpLGE9Imhvcml6b250YWwiLGQ9Imh0Q2VudGVyIjt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixsLGMsYSxk''@;'; put 'put ''KSxLbShjLGEsZCwoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYsdixNKT0+dGhpcy5zZXRDZWxsTWV0YShoLGYsdixNKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9LHtrZXk6YCR7ejJ9OnJpZ2h0YCxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShz''@;'; put 'put ''cSl9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPW05KGMsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKS5jbGFzc05hbWUpLGE9Imhvcml6b250YWwiLGQ9Imh0UmlnaHQiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxhLGQp''@;'; put 'put ''LEttKGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZix2LE0pPT50aGlzLnNldENlbGxNZXRhKGgsZix2LE0pKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se2tleTpgJHt6Mn06anVzdGlmeWAsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2Uo''@;'; put 'put ''bHEpfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD1tOShjLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZikuY2xhc3NOYW1lKSxhPSJob3Jpem9udGFsIixkPSJodEp1c3RpZnkiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGwsYyxh''@;'; put 'put ''LGQpLEttKGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZix2LE0pPT50aGlzLnNldENlbGxNZXRhKGgsZix2LE0pKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se25hbWU6aXN9LHtrZXk6YCR7ejJ9OnRvcGAsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0''@;'; put 'put ''ZWRQaHJhc2UoY3EpfSxjYWxsYmFjaygpe2NvbnN0IGM9dGhpcy5nZXRTZWxlY3RlZFJhbmdlKCksbD1tOShjLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZikuY2xhc3NOYW1lKSxhPSJ2ZXJ0aWNhbCIsZD0iaHRUb3AiO3RoaXMucnVuSG9va3MoImJlZm9yZUNlbGxBbGlnbm1lbnQiLGws''@;'; put 'put ''YyxhLGQpLEttKGMsYSxkLChoLGYpPT50aGlzLmdldENlbGxNZXRhKGgsZiksKGgsZix2LE0pPT50aGlzLnNldENlbGxNZXRhKGgsZix2LE0pKSx0aGlzLnJlbmRlcigpfSxkaXNhYmxlZDohMX0se2tleTpgJHt6Mn06bWlkZGxlYCxuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBo''@;'; put 'put ''cmFzZSh1cSl9LGNhbGxiYWNrKCl7Y29uc3QgYz10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKSxsPW05KGMsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKS5jbGFzc05hbWUpLGE9InZlcnRpY2FsIixkPSJodE1pZGRsZSI7dGhpcy5ydW5Ib29rcygiYmVmb3JlQ2VsbEFsaWdubWVudCIsbCxj''@;'; put 'put ''LGEsZCksS20oYyxhLGQsKGgsZik9PnRoaXMuZ2V0Q2VsbE1ldGEoaCxmKSwoaCxmLHYsTSk9PnRoaXMuc2V0Q2VsbE1ldGEoaCxmLHYsTSkpLHRoaXMucmVuZGVyKCl9LGRpc2FibGVkOiExfSx7a2V5OmAke3oyfTpib3R0b21gLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhy''@;'; put 'put ''YXNlKGRxKX0sY2FsbGJhY2soKXtjb25zdCBjPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGw9bTkoYywoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLmNsYXNzTmFtZSksYT0idmVydGljYWwiLGQ9Imh0Qm90dG9tIjt0aGlzLnJ1bkhvb2tzKCJiZWZvcmVDZWxsQWxpZ25tZW50IixsLGMs''@;'; put 'put ''YSxkKSxLbShjLGEsZCwoaCxmKT0+dGhpcy5nZXRDZWxsTWV0YShoLGYpLChoLGYsdixNKT0+dGhpcy5zZXRDZWxsTWV0YShoLGYsdixNKSksdGhpcy5yZW5kZXIoKX0sZGlzYWJsZWQ6ITF9XX19fX07ZnVuY3Rpb24gSzRlKCl7Y29uc3QgYz17fTtyZXR1cm4gcWEoJDRlLChsLGEpPT57Y1th''@;'; put 'put ''XT1sKCl9KSxjfWZ1bmN0aW9uIHZKKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBDY3QoYyl7dmFyIGw9ZnVuY3Rpb24gU2N0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5j''@;'; put 'put ''YWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJp''@;'; put 'put ''bmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBxNGV7Y29uc3RydWN0b3IobCl7bGV0IGE9''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGw7dkoodGhpcywiaG90Iix2b2lkIDApLHZKKHRoaXMsInByZWRlZmluZWRJdGVtcyIsSzRlKCkpLHZKKHRoaXMsImRlZmF1bHRPcmRlclBhdHRlcm4iLHZvaWQgMCksdGhpcy5ob3Q9bCx0''@;'; put 'put ''aGlzLmRlZmF1bHRPcmRlclBhdHRlcm49YX1zZXRQcmVkZWZpbmVkSXRlbXMobCl7Y29uc3QgYT17fTt0aGlzLmRlZmF1bHRPcmRlclBhdHRlcm4ubGVuZ3RoPTAscWEobCwoZCxoKT0+e2xldCBmPSIiO2QubmFtZT09PWlzPyhhW2lzXT1kLGY9aXMpOmlzTmFOKHBhcnNlSW50KGgsMTApKT8o''@;'; put 'put ''ZC5rZXk9dm9pZCAwPT09ZC5rZXk/aDpkLmtleSxhW2hdPWQsZj1kLmtleSk6KGFbZC5rZXldPWQsZj1kLmtleSksdGhpcy5kZWZhdWx0T3JkZXJQYXR0ZXJuLnB1c2goZil9KSx0aGlzLnByZWRlZmluZWRJdGVtcz1hfWdldEl0ZW1zKCl7cmV0dXJuIGZ1bmN0aW9uIE1jdCgpe2xldCBsPWFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXSxhPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp7fTtjb25zdCBkPVtdO2xldCBoPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJn''@;'; put 'put ''dW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO3JldHVybiBoJiZoLml0ZW1zP2g9aC5pdGVtczpBcnJheS5pc0FycmF5KGgpfHwoaD1sKSxLYShoKT9xYShoLChmLHYpPT57bGV0IE09YVsic3RyaW5nIj09dHlwZW9mIGY/Zjp2XTtNfHwoTT1mKSxLYShmKT94dShNLGYpOiJzdHJpbmciPT10''@;'; put 'put ''eXBlb2YgTSYmKE09e25hbWU6TX0pLHZvaWQgMD09PU0ua2V5JiYoTS5rZXk9diksZC5wdXNoKE0pfSk6WW4oaCwoZix2KT0+e2xldCBNPWFbZl07IU0mJkc0ZS5pbmRleE9mKGYpPj0wfHwoTXx8KE09e25hbWU6ZixrZXk6YCR7dn1gfSksS2EoZikmJnh1KE0sZiksdm9pZCAwPT09TS5rZXkm''@;'; put 'put ''JihNLmtleT12KSxkLnB1c2goTSkpfSksZH0oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGwsdGhpcy5kZWZhdWx0T3JkZXJQYXR0ZXJuLHRoaXMucHJlZGVmaW5lZEl0ZW1zKX19ZnVuY3Rpb24gWG0oYyxsLGEpe3JldHVybihsPWZ1''@;'; put 'put ''bmN0aW9uIHhjdChjKXt2YXIgbD1mdW5jdGlvbiBFY3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2Yg''@;'; put 'put ''ZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwp''@;'; put 'put ''KWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFRjdHtjb25zdHJ1Y3RvcihsLGEpe1htKHRoaXMsInRvcCIsdm9pZCAwKSxYbSh0aGlzLCJ0b3BSZWxhdGl2ZSIs''@;'; put 'put ''dm9pZCAwKSxYbSh0aGlzLCJsZWZ0Iix2b2lkIDApLFhtKHRoaXMsImxlZnRSZWxhdGl2ZSIsdm9pZCAwKSxYbSh0aGlzLCJzY3JvbGxUb3AiLHZvaWQgMCksWG0odGhpcywic2Nyb2xsTGVmdCIsdm9pZCAwKSxYbSh0aGlzLCJjZWxsSGVpZ2h0Iix2b2lkIDApLFhtKHRoaXMsImNlbGxXaWR0''@;'; put 'put ''aCIsdm9pZCAwKTtjb25zdCBkPWEuc2Nyb2xsWSxoPWEuc2Nyb2xsWDtsZXQgZix2LE0sRCxaLG5lO3RoaXMucm9vdFdpbmRvdz1hLHRoaXMudHlwZT10aGlzLmdldFNvdXJjZVR5cGUobCksImxpdGVyYWwiPT09dGhpcy50eXBlPyhmPXBhcnNlSW50KGwudG9wLDEwKSxNPXBhcnNlSW50KGwu''@;'; put 'put ''bGVmdCwxMCksWj1sLmhlaWdodHx8MCxuZT1sLndpZHRofHwwLHY9ZixEPU0sZis9ZCxNKz1oKToiZXZlbnQiPT09dGhpcy50eXBlJiYoZj1wYXJzZUludChsLnBhZ2VZLDEwKSxNPXBhcnNlSW50KGwucGFnZVgsMTApLFo9bC50YXJnZXQuY2xpZW50SGVpZ2h0LG5lPWwudGFyZ2V0LmNsaWVu''@;'; put 'put ''dFdpZHRoLHY9Zi1kLEQ9TS1oKSx0aGlzLnRvcD1mLHRoaXMudG9wUmVsYXRpdmU9dix0aGlzLmxlZnQ9TSx0aGlzLmxlZnRSZWxhdGl2ZT1ELHRoaXMuc2Nyb2xsVG9wPWQsdGhpcy5zY3JvbGxMZWZ0PWgsdGhpcy5jZWxsSGVpZ2h0PVosdGhpcy5jZWxsV2lkdGg9bmV9Z2V0U291cmNlVHlw''@;'; put 'put ''ZShsKXtsZXQgYT0ibGl0ZXJhbCI7cmV0dXJuIGwgaW5zdGFuY2VvZiBFdmVudCYmKGE9ImV2ZW50IiksYX1maXRzQWJvdmUobCl7cmV0dXJuIHRoaXMudG9wUmVsYXRpdmU+PWwub2Zmc2V0SGVpZ2h0fWZpdHNCZWxvdyhsKXtyZXR1cm4gdGhpcy50b3BSZWxhdGl2ZStsLm9mZnNldEhlaWdo''@;'; put 'put ''dDw9KGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0aGlzLnJvb3RXaW5kb3cuaW5uZXJIZWlnaHQpfWZpdHNPblJpZ2h0KGwpe3JldHVybiB0aGlzLmxlZnRSZWxhdGl2ZSt0aGlzLmNlbGxXaWR0aCtsLm9mZnNldFdpZHRoPD0oYXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnRoaXMucm9vdFdpbmRvdy5pbm5lcldpZHRoKX1maXRzT25MZWZ0KGwpe3JldHVybiB0aGlzLmxlZnRSZWxhdGl2ZT49bC5vZmZzZXRXaWR0aH19ZnVuY3Rpb24gX1QoYyxsLGEpeyhmdW5jdGlvbiBBY3Qo''@;'; put 'put ''YyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIGRzKGMsbCl7cmV0dXJuIGMuZ2V0KFg0ZShjLGwpKX1mdW5j''@;'; put 'put ''dGlvbiB2RihjLGwsYSl7cmV0dXJuIGMuc2V0KFg0ZShjLGwpLGEpLGF9ZnVuY3Rpb24gWDRlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1l''@;'; put 'put ''bnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgSjE9bmV3IFdlYWtNYXAsVnA9bmV3IFdlYWtNYXAsamQ9bmV3IFdlYWtNYXAsYko9bmV3IFdlYWtNYXAsWl89bmV3IFdlYWtNYXA7Y2xhc3Mga2N0e2NvbnN0cnVjdG9yKGwpe19UKHRoaXMsSjEsdm9pZCAwKSxfVCh0aGlz''@;'; put 'put ''LFZwLHZvaWQgMCksX1QodGhpcyxqZCx2b2lkIDApLF9UKHRoaXMsYkosITEpLF9UKHRoaXMsWl8se2Fib3ZlOjAsYmVsb3c6MCxsZWZ0OjAscmlnaHQ6MH0pLHZGKGJKLHRoaXMsbCl9c2V0T2Zmc2V0KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFd''@;'; put 'put ''P2FyZ3VtZW50c1sxXTowO3JldHVybiBkcyhaXyx0aGlzKVtsXT1hLHRoaXN9c2V0RWxlbWVudChsKXtyZXR1cm4gdkYoSjEsdGhpcyxsKSx0aGlzfXNldFBhcmVudEVsZW1lbnQobCl7cmV0dXJuIHZGKFZwLHRoaXMsbCksdGhpc311cGRhdGVQb3NpdGlvbihsKXt2RihqZCx0aGlzLG5ldyBU''@;'; put 'put ''Y3QobCxkcyhKMSx0aGlzKS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSksZHMoYkosdGhpcyk/KGRzKGpkLHRoaXMpLmZpdHNCZWxvdyhkcyhKMSx0aGlzKSk/dGhpcy5zZXRQb3NpdGlvbkJlbG93Q3Vyc29yKCk6ZHMoamQsdGhpcykuZml0c0Fib3ZlKGRzKEoxLHRoaXMpKT90aGlzLnNl''@;'; put 'put ''dFBvc2l0aW9uQWJvdmVDdXJzb3IoKTp0aGlzLnNldFBvc2l0aW9uQmVsb3dDdXJzb3IoKSx0aGlzLnVwZGF0ZUhvcml6b250YWxQb3NpdGlvbigpKToodGhpcy5zZXRQb3NpdGlvbkJlbG93Q3Vyc29yKCksdGhpcy5zZXRQb3NpdGlvbk9uUmlnaHRPZkN1cnNvcigpKX11cGRhdGVIb3Jpem9u''@;'; put 'put ''dGFsUG9zaXRpb24oKXsicnRsIj09PWRzKEoxLHRoaXMpLmRpcj9kcyhqZCx0aGlzKS5maXRzT25MZWZ0KGRzKEoxLHRoaXMpKT90aGlzLnNldFBvc2l0aW9uT25MZWZ0T2ZDdXJzb3IoKTp0aGlzLnNldFBvc2l0aW9uT25SaWdodE9mQ3Vyc29yKCk6ZHMoamQsdGhpcykuZml0c09uUmlnaHQo''@;'; put 'put ''ZHMoSjEsdGhpcykpP3RoaXMuc2V0UG9zaXRpb25PblJpZ2h0T2ZDdXJzb3IoKTp0aGlzLnNldFBvc2l0aW9uT25MZWZ0T2ZDdXJzb3IoKX1zZXRQb3NpdGlvbkFib3ZlQ3Vyc29yKCl7bGV0IGw9ZHMoWl8sdGhpcykuYWJvdmUrZHMoamQsdGhpcykudG9wLWRzKEoxLHRoaXMpLm9mZnNldEhl''@;'; put 'put ''aWdodDtkcyhWcCx0aGlzKSYmKGw9ZHMoamQsdGhpcykudG9wK2RzKGpkLHRoaXMpLmNlbGxIZWlnaHQtZHMoSjEsdGhpcykub2Zmc2V0SGVpZ2h0KzMpLGRzKEoxLHRoaXMpLnN0eWxlLnRvcD1gJHtsfXB4YH1zZXRQb3NpdGlvbkJlbG93Q3Vyc29yKCl7bGV0IGw9ZHMoWl8sdGhpcykuYmVs''@;'; put 'put ''b3crZHMoamQsdGhpcykudG9wKzE7ZHMoVnAsdGhpcykmJihsPWRzKGpkLHRoaXMpLnRvcC0xKSxkcyhKMSx0aGlzKS5zdHlsZS50b3A9YCR7bH1weGB9c2V0UG9zaXRpb25PblJpZ2h0T2ZDdXJzb3IoKXtsZXQgbD1kcyhqZCx0aGlzKS5sZWZ0O2lmKGRzKFZwLHRoaXMpKXtjb25zdCBhPWRz''@;'; put 'put ''KFZwLHRoaXMpLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcsZD1OdW1iZXIucGFyc2VJbnQoYS5nZXRDb21wdXRlZFN0eWxlKGRzKFZwLHRoaXMpLnF1ZXJ5U2VsZWN0b3IoIi5odENvcmUiKSkuYm9yZGVyUmlnaHRXaWR0aCwxMCk7bCs9ZHMoamQsdGhpcykuY2VsbFdpZHRoK2R9ZWxzZSBs''@;'; put 'put ''Kz1kcyhaXyx0aGlzKS5yaWdodDtkcyhKMSx0aGlzKS5zdHlsZS5sZWZ0PWAke2x9cHhgfXNldFBvc2l0aW9uT25MZWZ0T2ZDdXJzb3IoKXtsZXQgbD1kcyhaXyx0aGlzKS5sZWZ0K2RzKGpkLHRoaXMpLmxlZnQtZHMoSjEsdGhpcykub2Zmc2V0V2lkdGg7aWYoZHMoVnAsdGhpcykpe2NvbnN0''@;'; put 'put ''IGE9ZHMoVnAsdGhpcykub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztsLT1OdW1iZXIucGFyc2VJbnQoYS5nZXRDb21wdXRlZFN0eWxlKGRzKFZwLHRoaXMpLnF1ZXJ5U2VsZWN0b3IoIi5odENvcmUiKSkuYm9yZGVyTGVmdFdpZHRoLDEwKX1kcyhKMSx0aGlzKS5zdHlsZS5sZWZ0PWAke2x9''@;'; put 'put ''cHhgfX1mdW5jdGlvbiBKNGUoYyl7bGV0e2luaXRpYWxQYWdlOmw9LTEsc2l6ZTphPSgoKT0+MCksb25JdGVtU2VsZWN0OmQ9KCgpPT57fSksb25DbGVhcjpoPSgoKT0+e30pfT1jO2NvbnN0IGY9bmV3IFNldDtsZXQgdj1BcyhsLC0xLEJlKCktMSk7ZnVuY3Rpb24gTShudCxsdCl7Y29uc3Qg''@;'; put 'put ''bXQ9QmUoKS0xO3JldHVybiBudDwwJiYobnQ9bXQpLG50Pm10JiYobnQ9MCksZi5oYXMobnQpPy0xOihmLmFkZChudCksITE9PT1kKG50LCExKSYmKG50PU0oMT09PWx0PysrbnQ6LS1udCxsdCkpLG50KX1mdW5jdGlvbiBCZSgpe3JldHVybiBNYXRoLm1heChhKCksMCl9cmV0dXJue3NldEN1''@;'; put 'put ''cnJlbnRQYWdlOmZ1bmN0aW9uIEQobnQpe250Pi0xJiZudDxCZSgpJiYhMSE9PWQobnQsITApJiYodj1udCl9LGdldEN1cnJlbnRQYWdlOmZ1bmN0aW9uIFooKXtyZXR1cm4gdn0sdG9GaXJzdEl0ZW06ZnVuY3Rpb24gbmUoKXtCZSgpPjAmJihmLmNsZWFyKCksdj1NKDAsMSkpfSx0b0xhc3RJ''@;'; put 'put ''dGVtOmZ1bmN0aW9uIGNlKCl7QmUoKT4wJiYoZi5jbGVhcigpLHY9TShCZSgpLTEsLTEpKX0sdG9OZXh0SXRlbTpmdW5jdGlvbiBiZSgpe0JlKCk+MCYmKGYuY2xlYXIoKSx2PU0oKyt2LDEpKX0sdG9QcmV2aW91c0l0ZW06ZnVuY3Rpb24gRWUoKXtCZSgpPjAmJihmLmNsZWFyKCksdj1NKC0t''@;'; put 'put ''diwtMSkpfSxnZXRTaXplOkJlLGNsZWFyOmZ1bmN0aW9uIHFlKCl7Zi5jbGVhcigpLHY9bCxoKCl9fX1mdW5jdGlvbiB5SihjKXtyZXR1cm4gRXUoYywic3VibWVudSIpfWZ1bmN0aW9uIF9KKGMpe3JldHVybiBuZXcgUmVnRXhwKGlzLCJpIikudGVzdChjLm5hbWUpfWZ1bmN0aW9uIGJGKGMs''@;'; put 'put ''bCl7cmV0dXJuITA9PT1jLmRpc2FibGVkfHwiZnVuY3Rpb24iPT10eXBlb2YgYy5kaXNhYmxlZCYmITA9PT1jLmRpc2FibGVkLmNhbGwobCl9ZnVuY3Rpb24gUTRlKGMpe3JldHVybiBFdShjLCJkaXNhYmxlU2VsZWN0aW9uIil9ZnVuY3Rpb24gZWdlKGMsbCl7Y29uc3QgYT1jLnNsaWNlKDAp''@;'; put 'put ''O2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGgmJmFbZF0ubmFtZT09PWw7KWEuc2hpZnQoKTtyZXR1cm4gYX1mdW5jdGlvbiBWY3QoYyl7cmV0dXJuITA9PT1jLmNoZWNrYWJsZX1mdW5jdGlvbiBVY3QoYyl7cmV0dXJuKGwsYSxkLGgsZix2KT0+e2NvbnN0IE09bC5nZXRTb3VyY2VEYXRhQXRSb3co''@;'; put 'put ''ZCksRD1jLnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSxaPSJmdW5jdGlvbiI9PXR5cGVvZiB2P3YuY2FsbChjKTp2LG5lPSJmdW5jdGlvbiI9PXR5cGVvZiBNLmFyaWFMYWJlbD9NLmFyaWFMYWJlbC5jYWxsKGMpOk0uYXJpYUxhYmVsLGNlPSJmdW5jdGlvbiI9PXR5cGVvZiBN''@;'; put 'put ''LmFyaWFDaGVja2VkP00uYXJpYUNoZWNrZWQuY2FsbChjKTpNLmFyaWFDaGVja2VkO2lmKHdwKGEpLFRpKEQsImh0SXRlbVdyYXBwZXIiKSxjLmdldFNldHRpbmdzKCkuYXJpYVRhZ3Mpe2NvbnN0IGJlPSFiRihNLGMpJiYhUTRlKE0pJiYhX0ooTSk7dmEoYSxbLi4uVmN0KE0pP1tbInJvbGUi''@;'; put 'put ''LCJtZW51aXRlbWNoZWNrYm94Il0seE8obmUpLHAyZShjZSldOltbInJvbGUiLCJtZW51aXRlbSJdLHhPKFopXSwuLi5iZT9bUDcoLTEpXTpbXSwuLi5iRihNLGMpP1tbImFyaWEtZGlzYWJsZWQiLCJ0cnVlIl1dOltdLC4uLnlKKE0pP1tEMighMSldOltdXSl9YS5jbGFzc05hbWU9IiIsYS5h''@;'; put 'put ''cHBlbmRDaGlsZChEKSxfSihNKT9UaShhLCJodFNlcGFyYXRvciIpOiJmdW5jdGlvbiI9PXR5cGVvZiBNLnJlbmRlcmVyPyhUaShhLCJodEN1c3RvbU1lbnVSZW5kZXJlciIpLGEuYXBwZW5kQ2hpbGQoTS5yZW5kZXJlcihsLEQsZCxoLGYsWikpKTpONyhELFopLGJGKE0sYyk/VGkoYSwiaHRE''@;'; put 'put ''aXNhYmxlZCIpOlE0ZShNKT9UaShhLCJodFNlbGVjdGlvbkRpc2FibGVkIik6eUooTSkmJlRpKGEsImh0U3VibWVudSIpfX1mdW5jdGlvbiB3SihjLGwsYSl7KGZ1bmN0aW9uIFpjdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBz''@;'; put 'put ''YW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gQnAoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFdjdChjKXt2YXIgbD1mdW5jdGlvbiBZY3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3Zh''@;'; put 'put ''ciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVl''@;'; put 'put ''LiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0''@;'; put 'put ''YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIENKKGMsbCxhKXtyZXR1cm4gYy5zZXQocmdlKGMsbCksYSksYX1mdW5jdGlvbiB2OShjLGwpe3JldHVybiBjLmdldChyZ2UoYyxsKSl9ZnVuY3Rpb24gcmdlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSly''@;'; put 'put ''ZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgd1Q9bmV3IFdlYWtNYXAseUY9bmV3IFdlYWtNYXAsX0Y9bmV3IFdlYWtNYXA7Y2xhc3MgV197Z2V0IHRhYmxl''@;'; put 'put ''Qm9yZGVyV2lkdGgoKXtyZXR1cm4gdm9pZCAwPT09djkoX0YsdGhpcykmJnRoaXMuaG90TWVudSYmQ0ooX0YsdGhpcyxwYXJzZUludCh0aGlzLmhvdE1lbnUucm9vdFdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuaG90TWVudS52aWV3Ll93dC53dFRhYmxlLlRBQkxFKS5ib3JkZXJXaWR0''@;'; put 'put ''aCwxMCkpLHY5KF9GLHRoaXMpfWNvbnN0cnVjdG9yKGwsYSl7dmFyIGQ9dGhpcztCcCh0aGlzLCJob3QiLHZvaWQgMCksQnAodGhpcywib3B0aW9ucyIsdm9pZCAwKSxCcCh0aGlzLCJldmVudE1hbmFnZXIiLG5ldyBMMih0aGlzKSksQnAodGhpcywiY29udGFpbmVyIix2b2lkIDApLEJwKHRo''@;'; put 'put ''aXMsInBvc2l0aW9uZXIiLHZvaWQgMCksQnAodGhpcywiaG90TWVudSIsbnVsbCksQnAodGhpcywiaG90U3ViTWVudXMiLHt9KSxCcCh0aGlzLCJwYXJlbnRNZW51Iix2b2lkIDApLEJwKHRoaXMsIm1lbnVJdGVtcyIsbnVsbCksQnAodGhpcywib3JpZ091dHNpZGVDbGlja0Rlc2VsZWN0cyIs''@;'; put 'put ''bnVsbCksd0oodGhpcyx3VCx2b2lkIDApLHdKKHRoaXMseUYsdm9pZCAwKSx3Sih0aGlzLF9GLHZvaWQgMCksdGhpcy5ob3Q9bCx0aGlzLm9wdGlvbnM9YXx8e3BhcmVudDpudWxsLG5hbWU6bnVsbCxjbGFzc05hbWU6IiIsa2VlcEluVmlld3BvcnQ6ITAsc3RhbmRhbG9uZTohMSxtaW5XaWR0''@;'; put 'put ''aDoyMTUsY29udGFpbmVyOnRoaXMuaG90LnJvb3REb2N1bWVudC5kb2N1bWVudEVsZW1lbnR9LHRoaXMuY29udGFpbmVyPXRoaXMuY3JlYXRlQ29udGFpbmVyKHRoaXMub3B0aW9ucy5uYW1lKSx0aGlzLnBvc2l0aW9uZXI9bmV3IGtjdCh0aGlzLm9wdGlvbnMua2VlcEluVmlld3BvcnQpLHRo''@;'; put 'put ''aXMucGFyZW50TWVudT10aGlzLm9wdGlvbnMucGFyZW50fHxudWxsLHRoaXMucmVnaXN0ZXJFdmVudHMoKSx0aGlzLmlzU3ViTWVudSgpJiZ0aGlzLmFkZExvY2FsSG9vaygiYWZ0ZXJTZWxlY3Rpb25DaGFuZ2UiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcg''@;'; put 'put ''QXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIGQucGFyZW50TWVudS5ydW5Mb2NhbEhvb2tzKCJhZnRlclNlbGVjdGlvbkNoYW5nZSIsLi4uZil9KSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclNldFRoZW1lIiwoaCxmKT0+e3ZhciB2O2Z8fG51bGw9PT0odj10''@;'; put 'put ''aGlzLmhvdE1lbnUpfHx2b2lkIDA9PT12fHx2LnVzZVRoZW1lKGgpfSl9cmVnaXN0ZXJFdmVudHMoKXtsZXQgbD10aGlzLmhvdC5yb290V2luZG93O2Zvcig7bDspdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLmRvY3VtZW50LCJtb3VzZWRvd24iLGE9PnRoaXMub25Eb2N1''@;'; put 'put ''bWVudE1vdXNlRG93bihhKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLmRvY3VtZW50LCJ0b3VjaHN0YXJ0IixhPT50aGlzLm9uRG9jdW1lbnRNb3VzZURvd24oYSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobC5kb2N1bWVudCwiY29udGV4dG1l''@;'; put 'put ''bnUiLGE9PnRoaXMub25Eb2N1bWVudENvbnRleHRNZW51KGEpKSxsPUY3KGwpfXNldE1lbnVJdGVtcyhsKXt0aGlzLm1lbnVJdGVtcz1sfWdldE5hdmlnYXRvcigpe3JldHVybiB2OSh3VCx0aGlzKX1nZXRLZXlib2FyZFNob3J0Y3V0c0N0cmwoKXtyZXR1cm4gdjkoeUYsdGhpcyl9Z2V0U2Vs''@;'; put 'put ''ZWN0ZWRJdGVtKCl7cmV0dXJuIHRoaXMuaGFzU2VsZWN0ZWRJdGVtKCk/dGhpcy5ob3RNZW51LmdldFNvdXJjZURhdGFBdFJvdyh0aGlzLmhvdE1lbnUuZ2V0U2VsZWN0ZWRMYXN0KClbMF0pOm51bGx9aGFzU2VsZWN0ZWRJdGVtKCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodGhpcy5ob3RNZW51''@;'; put 'put ''LmdldFNlbGVjdGVkTGFzdCgpKX1pc1N1Yk1lbnUoKXtyZXR1cm4gbnVsbCE9PXRoaXMucGFyZW50TWVudX1vcGVuKCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVPcGVuIiksdGhpcy5jb250YWluZXIucmVtb3ZlQXR0cmlidXRlKCJzdHlsZSIpLHRoaXMuY29udGFpbmVyLnN0eWxlLmRp''@;'; put 'put ''c3BsYXk9ImJsb2NrIjtjb25zdCBsPUlPKE09PnRoaXMub3BlblN1Yk1lbnUoTSksMzAwKSxhPXRoaXMub3B0aW9ucy5taW5XaWR0aHx8MjE1O2xldCBkPSExLGg9QW0odGhpcy5tZW51SXRlbXMsTT0+KE0ua2V5PT09eVQmJihkPSEwKSxmdW5jdGlvbiBQY3QoYyxsKXtyZXR1cm4hYy5oaWRk''@;'; put 'put ''ZW58fCEoImZ1bmN0aW9uIj09dHlwZW9mIGMuaGlkZGVuJiZjLmhpZGRlbi5jYWxsKGwpKX0oTSx0aGlzLmhvdCkpKTtpZihoLmxlbmd0aDwxJiYhZCloLnB1c2goSzRlKClbeVRdKTtlbHNlIGlmKDA9PT1oLmxlbmd0aClyZXR1cm47aD1mdW5jdGlvbiBOY3QoYyl7bGV0IGw9YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmlzLGE9Yy5zbGljZSgwKTtyZXR1cm4gYT1lZ2UoYSxsKSxhPWZ1bmN0aW9uIEZjdChjLGwpe2xldCBhPWMuc2xpY2UoMCk7cmV0dXJuIGEucmV2ZXJzZSgpLGE9ZWdlKGEsbCksYS5yZXZlcnNlKCksYX0oYSxs''@;'; put 'put ''KSxhPWZ1bmN0aW9uIEhjdChjKXtjb25zdCBsPVtdO3JldHVybiBZbihjLChhLGQpPT57ZD4wP2xbbC5sZW5ndGgtMV0ubmFtZSE9PWEubmFtZSYmbC5wdXNoKGEpOmwucHVzaChhKX0pLGx9KGEpLGF9KGgsaXMpO2xldCBmPSExO2NvbnN0IHY9e2RhdGE6aCxjb2xIZWFkZXJzOiExLGF1dG9D''@;'; put 'put ''b2x1bW5TaXplOiEwLGF1dG9XcmFwUm93OiExLG1vZGlmeUNvbFdpZHRoOk09PkZvKE0pJiZNPGE/YTpNLGF1dG9Sb3dTaXplOiExLHJlYWRPbmx5OiEwLGVkaXRvcjohMSxjb3B5UGFzdGU6ITEsaGlkZGVuUm93czohMCxtYXhDb2xzOjEsY29sdW1uczpbe2RhdGE6Im5hbWUiLHJlbmRlcmVy''@;'; put 'put ''OlVjdCh0aGlzLmhvdCl9XSxyZW5kZXJBbGxSb3dzOiEwLGZyYWdtZW50U2VsZWN0aW9uOiExLG91dHNpZGVDbGlja0Rlc2VsZWN0czohMSxkaXNhYmxlVmlzdWFsU2VsZWN0aW9uOiJhcmVhIixsYXlvdXREaXJlY3Rpb246dGhpcy5ob3QuaXNSdGwoKT8icnRsIjoibHRyIixhcmlhVGFnczoh''@;'; put 'put ''MSx0aGVtZU5hbWU6dGhpcy5ob3QuZ2V0Q3VycmVudFRoZW1lTmFtZSgpLGJlZm9yZU9uQ2VsbE1vdXNlT3ZlcjooTSxEKT0+e3Y5KHdULHRoaXMpLnNldEN1cnJlbnRQYWdlKEQucm93KX0sYWZ0ZXJPbkNlbGxNb3VzZU92ZXI6KE0sRCk9Pnt0aGlzLmlzQWxsU3ViTWVudXNDbG9zZWQoKT9s''@;'; put 'put ''KEQucm93KTp0aGlzLm9wZW5TdWJNZW51KEQucm93KX0sYWZ0ZXJPbkNlbGxDb250ZXh0TWVudTpNPT57TS5wcmV2ZW50RGVmYXVsdCgpLE0kKCkmJmYmJnRoaXMuaGFzU2VsZWN0ZWRJdGVtKCkmJnRoaXMuY2xvc2UoITApfSxhZnRlclNlbGVjdGlvbjooTSxELFosbmUsY2UpPT57dGhpcy5o''@;'; put 'put ''b3RNZW51LnZpZXcuaXNNb3VzZURvd24oKSYmKGNlLnZhbHVlPSEwKSx0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyU2VsZWN0aW9uQ2hhbmdlIix0aGlzLmdldFNlbGVjdGVkSXRlbSgpKX0sYmVmb3JlT25DZWxsTW91c2VVcDpNPT57dGhpcy5oYXNTZWxlY3RlZEl0ZW0oKSYmKGY9IXRoaXMu''@;'; put 'put ''aXNDb21tYW5kUGFzc2l2ZSh0aGlzLmdldFNlbGVjdGVkSXRlbSgpKSx0aGlzLmV4ZWN1dGVDb21tYW5kKE0pKX0sYWZ0ZXJPbkNlbGxNb3VzZVVwOk09PnsoIU0kKCl8fCFQbShNKSkmJmYmJnRoaXMuaGFzU2VsZWN0ZWRJdGVtKCkmJihTcCgpfHxTJCgpP3RoaXMuaG90Ll9yZWdpc3RlclRp''@;'; put 'put ''bWVvdXQoKCk9PnRoaXMuY2xvc2UoITApLDMyNSk6dGhpcy5jbG9zZSghMCkpfSxhZnRlclVubGlzdGVuOigpPT57IXRoaXMuaGFzU2VsZWN0ZWRJdGVtKCkmJnRoaXMuaXNPcGVuZWQoKSYmdGhpcy5ob3RNZW51Lmxpc3RlbigpfX07dGhpcy5vcmlnT3V0c2lkZUNsaWNrRGVzZWxlY3RzPXRo''@;'; put 'put ''aXMuaG90LmdldFNldHRpbmdzKCkub3V0c2lkZUNsaWNrRGVzZWxlY3RzLHRoaXMuaG90LmdldFNldHRpbmdzKCkub3V0c2lkZUNsaWNrRGVzZWxlY3RzPSExLHRoaXMuaG90TWVudT1uZXcgdGhpcy5ob3QuY29uc3RydWN0b3IodGhpcy5jb250YWluZXIsdiksdGhpcy5ob3RNZW51LmFkZEhv''@;'; put 'put ''b2soImFmdGVySW5pdCIsKCk9PnRoaXMub25BZnRlckluaXQoKSksdGhpcy5ob3RNZW51LmluaXQoKSxDSih3VCx0aGlzLGZ1bmN0aW9uIEJjdChjKXtyZXR1cm4gSjRlKHtzaXplOigpPT5jLmNvdW50Um93cygpLG9uSXRlbVNlbGVjdChsLGEpe2NvbnN0IGQ9Yy5nZXRDZWxsKGwsMCk7aWYo''@;'; put 'put ''IWR8fGZ1bmN0aW9uIEljdChjKXtyZXR1cm4gcGEoYywiaHRTZXBhcmF0b3IiKX0oZCl8fGZ1bmN0aW9uIExjdChjKXtyZXR1cm4gcGEoYywiaHREaXNhYmxlZCIpfShkKXx8ZnVuY3Rpb24gT2N0KGMpe3JldHVybiBwYShjLCJodFNlbGVjdGlvbkRpc2FibGVkIil9KGQpKXJldHVybiExO2Mu''@;'; put 'put ''c2VsZWN0Q2VsbChsLDAsLi4uYT9bbCwwLCExLCExXTpbXSl9LG9uQ2xlYXIoKXtjLmRlc2VsZWN0Q2VsbCgpfX0pfSh0aGlzLmhvdE1lbnUpKSxDSih5Rix0aGlzLGZ1bmN0aW9uIHpjdChjKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVu''@;'; put 'put ''dHNbMV06W107Y29uc3QgYT1bXTtmdW5jdGlvbiBkKFosbmUpe00obmUpLmFkZFNob3J0Y3V0cyhaLHtncm91cDoibWVudSJ9KX1mdW5jdGlvbiBoKFosbmUpe2NvbnN0IGNlPU0obmUpO1ouZm9yRWFjaChiZT0+e2xldHtrZXlzOkVlfT1iZTtFZS5mb3JFYWNoKEJlPT5jZS5yZW1vdmVTaG9y''@;'; put 'put ''dGN1dHNCeUtleXMoQmUpKX0pLGEucHVzaCh7c2hvcnRjdXRzOlosY29udGV4dE5hbWU6bmV9KSxkKFosbmUpfWZ1bmN0aW9uIHYoWil7cmV0dXJuIFo/YG1lbnU6JHtafWA6Im1lbnUifWZ1bmN0aW9uIE0oWil7dmFyIG5lO2NvbnN0IGNlPWMuaG90TWVudS5nZXRTaG9ydGN1dE1hbmFnZXIo''@;'; put 'put ''KSxiZT12KFopO3JldHVybiBudWxsIT09KG5lPWNlLmdldENvbnRleHQoYmUpKSYmdm9pZCAwIT09bmU/bmU6Y2UuYWRkQ29udGV4dChiZSl9cmV0dXJuIGQoZnVuY3Rpb24gamN0KGMpe2NvbnN0e2hvdDpsLGhvdE1lbnU6YX09YztyZXR1cm5be2tleXM6W1siQ29udHJvbC9NZXRhIiwiQSJd''@;'; put 'put ''XSxmb3J3YXJkVG9Db250ZXh0OmwuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLGNhbGxiYWNrOigpPT5jLmNsb3NlKCEwKX0se2tleXM6W1siVGFiIl0sWyJTaGlmdCIsIlRhYiJdXSxjYWxsYmFjazooZCxoKT0+e2NvbnN0IGY9bC5nZXRTZXR0aW5ncygpLHY9ImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIGYudGFiTW92ZXM/Zi50YWJNb3ZlcyhkKTpmLnRhYk1vdmVzO2guaW5jbHVkZXMoInNoaWZ0Iik/bC5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQoLXYucm93LC12LmNvbCk6bC5zZWxlY3Rpb24udHJhbnNmb3JtU3RhcnQodi5yb3csdi5jb2wpLGMuY2xvc2UoITAp''@;'; put 'put ''fX0se2tleXM6W1siRXNjYXBlIl1dLGNhbGxiYWNrOigpPT5jLmNsb3NlKCl9LHtrZXlzOltbIkFycm93RG93biJdXSxjYWxsYmFjazooKT0+Yy5nZXROYXZpZ2F0b3IoKS50b05leHRJdGVtKCl9LHtrZXlzOltbIkFycm93VXAiXV0sY2FsbGJhY2s6KCk9PmMuZ2V0TmF2aWdhdG9yKCkudG9Q''@;'; put 'put ''cmV2aW91c0l0ZW0oKX0se2tleXM6W1siQXJyb3dSaWdodCJdXSxjYWxsYmFjazooKT0+e2NvbnN0IGQ9YS5nZXRTZWxlY3RlZExhc3QoKTtpZihkKXtjb25zdCBoPWMub3BlblN1Yk1lbnUoZFswXSk7aCYmaC5nZXROYXZpZ2F0b3IoKS50b0ZpcnN0SXRlbSgpfX19LHtrZXlzOltbIkFycm93''@;'; put 'put ''TGVmdCJdXSxjYWxsYmFjazooKT0+e2EuZ2V0U2VsZWN0ZWRMYXN0KCkmJmMuaXNTdWJNZW51KCkmJihjLmNsb3NlKCksYy5pc1N1Yk1lbnUoKSYmYy5wYXJlbnRNZW51LmhvdE1lbnUubGlzdGVuKCkpfX0se2tleXM6W1siQ29udHJvbC9NZXRhIiwiQXJyb3dVcCJdLFsiSG9tZSJdXSxjYWxs''@;'; put 'put ''YmFjazooKT0+Yy5nZXROYXZpZ2F0b3IoKS50b0ZpcnN0SXRlbSgpfSx7a2V5czpbWyJDb250cm9sL01ldGEiLCJBcnJvd0Rvd24iXSxbIkVuZCJdXSxjYWxsYmFjazooKT0+Yy5nZXROYXZpZ2F0b3IoKS50b0xhc3RJdGVtKCl9LHtrZXlzOltbIkVudGVyIl0sWyJTcGFjZSJdXSxjYWxsYmFj''@;'; put 'put ''azpkPT57Y29uc3QgaD1hLmdldFNlbGVjdGVkTGFzdCgpO2gmJihhLmdldFNvdXJjZURhdGFBdFJvdyhoWzBdKS5zdWJtZW51P2Mub3BlblN1Yk1lbnUoaFswXSkuZ2V0TmF2aWdhdG9yKCkudG9GaXJzdEl0ZW0oKTooYy5leGVjdXRlQ29tbWFuZChkKSxjLmNsb3NlKCEwKSkpfX0se2tleXM6''@;'; put 'put ''W1siUGFnZVVwIl1dLGNhbGxiYWNrOigpPT57YS5nZXRTZWxlY3RlZExhc3QoKT9hLnNlbGVjdGlvbi50cmFuc2Zvcm1TdGFydCgtYS5jb3VudFZpc2libGVSb3dzKCksMCk6Yy5nZXROYXZpZ2F0b3IoKS50b0ZpcnN0SXRlbSgpfX0se2tleXM6W1siUGFnZURvd24iXV0sY2FsbGJhY2s6KCk9''@;'; put 'put ''PnthLmdldFNlbGVjdGVkTGFzdCgpP2Euc2VsZWN0aW9uLnRyYW5zZm9ybVN0YXJ0KGEuY291bnRWaXNpYmxlUm93cygpLDApOmMuZ2V0TmF2aWdhdG9yKCkudG9MYXN0SXRlbSgpfX1dfShjKSksbC5mb3JFYWNoKFo9PntsZXR7c2hvcnRjdXRzOm5lLGNvbnRleHROYW1lOmNlfT1aO2gobmUs''@;'; put 'put ''Y2UpfSkse2FkZEN1c3RvbVNob3J0Y3V0czpoLGdldEN1c3RvbVNob3J0Y3V0czpmdW5jdGlvbiBmKCl7cmV0dXJuWy4uLmFdfSxnZXRDb250ZXh0Ok0sbGlzdGVuOmZ1bmN0aW9uIEQoWil7Yy5ob3RNZW51LmdldFNob3J0Y3V0TWFuYWdlcigpLnNldEFjdGl2ZUNvbnRleHROYW1lKHYoWikp''@;'; put 'put ''fX19KHRoaXMpKSx2OSh5Rix0aGlzKS5saXN0ZW4oKSx0aGlzLmZvY3VzKCksdGhpcy5pc1N1Yk1lbnUoKSYmdGhpcy5hZGRMb2NhbEhvb2soImFmdGVyT3BlbiIsKCk9PnRoaXMucGFyZW50TWVudS5ydW5Mb2NhbEhvb2tzKCJhZnRlclN1Ym1lbnVPcGVuIix0aGlzKSksdGhpcy5ydW5Mb2Nh''@;'; put 'put ''bEhvb2tzKCJhZnRlck9wZW4iLHRoaXMpfWNsb3NlKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtpZih0aGlzLmlzT3BlbmVkKCkpaWYobCYmdGhpcy5pc1N1Yk1lbnUoKSl0aGlzLnBhcmVudE1lbnUuY2xvc2UoKTtlbHNl''@;'; put 'put ''IGlmKHY5KHdULHRoaXMpLmNsZWFyKCksdGhpcy5jbG9zZUFsbFN1Yk1lbnVzKCksdGhpcy5jb250YWluZXIuc3R5bGUuZGlzcGxheT0ibm9uZSIsdGhpcy5ob3RNZW51LmRlc3Ryb3koKSx0aGlzLmhvdE1lbnU9bnVsbCx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLm91dHNpZGVDbGlja0Rlc2Vs''@;'; put 'put ''ZWN0cz10aGlzLm9yaWdPdXRzaWRlQ2xpY2tEZXNlbGVjdHMsdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckNsb3NlIiksdGhpcy5pc1N1Yk1lbnUoKSl7aWYodGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyl7Y29uc3QgYT10aGlzLnBhcmVudE1lbnUuaG90TWVudS5nZXRTZWxlY3Rl''@;'; put 'put ''ZExhc3QoKTthJiZ2YSh0aGlzLnBhcmVudE1lbnUuaG90TWVudS5nZXRDZWxsKGFbMF0sMCksW0QyKCExKV0pfXRoaXMucGFyZW50TWVudS5ob3RNZW51Lmxpc3RlbigpfX1vcGVuU3ViTWVudShsKXtpZighdGhpcy5ob3RNZW51KXJldHVybiExO2NvbnN0IGE9dGhpcy5ob3RNZW51LmdldENl''@;'; put 'put ''bGwobCwwKTtpZih0aGlzLmNsb3NlQWxsU3ViTWVudXMoKSwhYXx8IWZ1bmN0aW9uIFJjdChjKXtyZXR1cm4gcGEoYywiaHRTdWJtZW51Iil9KGEpKXJldHVybiExO2NvbnN0IGQ9dGhpcy5ob3RNZW51LmdldFNvdXJjZURhdGFBdFJvdyhsKSxoPW5ldyBXXyh0aGlzLmhvdCx7cGFyZW50OnRo''@;'; put 'put ''aXMsbmFtZTpkLm5hbWUsY2xhc3NOYW1lOnRoaXMub3B0aW9ucy5jbGFzc05hbWUsa2VlcEluVmlld3BvcnQ6ITAsY29udGFpbmVyOnRoaXMub3B0aW9ucy5jb250YWluZXJ9KTtyZXR1cm4gaC5zZXRNZW51SXRlbXMoZC5zdWJtZW51Lml0ZW1zKSxoLm9wZW4oKSxoLnNldFBvc2l0aW9uKGEu''@;'; put 'put ''Z2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLHRoaXMuaG90U3ViTWVudXNbZC5rZXldPWgsdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmdmEoYSxbRDIoITApXSksaH1jbG9zZVN1Yk1lbnUobCl7Y29uc3QgYT10aGlzLmhvdE1lbnUuZ2V0U291cmNlRGF0YUF0Um93KGwpLGQ9dGhp''@;'; put 'put ''cy5ob3RTdWJNZW51c1thLmtleV07aWYoZCl7ZC5kZXN0cm95KCksZGVsZXRlIHRoaXMuaG90U3ViTWVudXNbYS5rZXldO2NvbnN0IGg9dGhpcy5ob3RNZW51LmdldENlbGwobCwwKTt0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmFyaWFUYWdzJiZ2YShoLFtEMighMSldKX19Y2xvc2VBbGxTdWJN''@;'; put 'put ''ZW51cygpe1luKHRoaXMuaG90TWVudS5nZXREYXRhKCksKGwsYSk9PnRoaXMuY2xvc2VTdWJNZW51KGEpKX1pc0FsbFN1Yk1lbnVzQ2xvc2VkKCl7cmV0dXJuIDA9PT1PYmplY3Qua2V5cyh0aGlzLmhvdFN1Yk1lbnVzKS5sZW5ndGh9Zm9jdXMoKXt0aGlzLmlzT3BlbmVkKCkmJih0aGlzLmhv''@;'; put 'put ''dE1lbnUucm9vdEVsZW1lbnQuZm9jdXMoe3ByZXZlbnRTY3JvbGw6ITB9KSx0aGlzLmdldEtleWJvYXJkU2hvcnRjdXRzQ3RybCgpLmxpc3RlbigpLHRoaXMuaG90TWVudS5saXN0ZW4oKSl9ZGVzdHJveSgpe2NvbnN0IGw9dGhpcy5jb250YWluZXIucGFyZW50Tm9kZTt0aGlzLmNsZWFyTG9j''@;'; put 'put ''YWxIb29rcygpLHRoaXMuY2xvc2UoKSx0aGlzLnBhcmVudE1lbnU9bnVsbCx0aGlzLmV2ZW50TWFuYWdlci5kZXN0cm95KCksbCYmbC5yZW1vdmVDaGlsZCh0aGlzLmNvbnRhaW5lcil9aXNPcGVuZWQoKXtyZXR1cm4gbnVsbCE9PXRoaXMuaG90TWVudX1leGVjdXRlQ29tbWFuZChsKXtpZigh''@;'; put 'put ''dGhpcy5pc09wZW5lZCgpfHwhdGhpcy5oYXNTZWxlY3RlZEl0ZW0oKSlyZXR1cm47Y29uc3QgYT10aGlzLmdldFNlbGVjdGVkSXRlbSgpO2lmKHRoaXMucnVuTG9jYWxIb29rcygic2VsZWN0IixhLGwpLHRoaXMuaXNDb21tYW5kUGFzc2l2ZShhKSlyZXR1cm47Y29uc3QgZD10aGlzLmhvdC5n''@;'; put 'put ''ZXRTZWxlY3RlZFJhbmdlKCksaD1kP2Z1bmN0aW9uIERjdChjKXtyZXR1cm4geXMoYyxsPT4oe3N0YXJ0OmwuZ2V0VG9wU3RhcnRDb3JuZXIoKSxlbmQ6bC5nZXRCb3R0b21FbmRDb3JuZXIoKX0pKX0oZCk6W107dGhpcy5ydW5Mb2NhbEhvb2tzKCJleGVjdXRlQ29tbWFuZCIsYS5rZXksaCxs''@;'; put 'put ''KSx0aGlzLmlzU3ViTWVudSgpJiZ0aGlzLnBhcmVudE1lbnUucnVuTG9jYWxIb29rcygiZXhlY3V0ZUNvbW1hbmQiLGEua2V5LGgsbCl9aXNDb21tYW5kUGFzc2l2ZShsKXtyZXR1cm4hMT09PWwuaXNDb21tYW5kfHxfSihsKXx8YkYobCx0aGlzLmhvdCl8fHlKKGwpfXNldE9mZnNldChsKXt0''@;'; put 'put ''aGlzLnBvc2l0aW9uZXIuc2V0T2Zmc2V0KGwsYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjApfXNldFBvc2l0aW9uKGwpe3RoaXMuaXNTdWJNZW51KCkmJnRoaXMucG9zaXRpb25lci5zZXRQYXJlbnRFbGVtZW50KHRoaXMucGFyZW50TWVu''@;'; put 'put ''dS5jb250YWluZXIpLHRoaXMucG9zaXRpb25lci5zZXRFbGVtZW50KHRoaXMuY29udGFpbmVyKS51cGRhdGVQb3NpdGlvbihsKX11cGRhdGVNZW51RGltZW5zaW9ucygpe2NvbnN0IGw9dGhpcy5ob3RNZW51LnZpZXcuZ2V0U3R5bGVzSGFuZGxlcigpLHt3dFRhYmxlOmF9PXRoaXMuaG90TWVu''@;'; put 'put ''dS52aWV3Ll93dCxkPXRoaXMuaG90TWVudS5nZXRTZXR0aW5ncygpLmRhdGEsaD1hLmhpZGVyLnN0eWxlLGY9YS5ob2xkZXIuc3R5bGUsdj1wYXJzZUludChoLndpZHRoLDEwKSxNPXF1KGQsKEQsWixuZSk9Pntjb25zdCBiZT10aGlzLmhvdE1lbnUuZ2V0Q2VsbChuZSwwKT9NdSh0aGlzLmhv''@;'; put 'put ''dE1lbnUuZ2V0Q2VsbChuZSwwKSk6MDtyZXR1cm4gRCsoWi5uYW1lPT09aXM/MTpiZSl9LDApO2wuaXNDbGFzc2ljVGhlbWUoKT8oZi53aWR0aD1gJHt2KzN9cHhgLGYuaGVpZ2h0PWAke00rM31weGApOihmLndpZHRoPWAke3Z9cHhgLGYuaGVpZ2h0PWAke019cHhgKSxoLmhlaWdodD1mLmhl''@;'; put 'put ''aWdodH1jcmVhdGVDb250YWluZXIoKXtjb25zdCBhPXRoaXMub3B0aW9ucy5jb250YWluZXIub3duZXJEb2N1bWVudDtsZXQgaCxkPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpudWxsO3JldHVybiBkJiYoZWMoZCkmJihkPWQuY2FsbCh0''@;'; put 'put ''aGlzLmhvdCksZD1udWxsPT09ZHx8bWMoZCk/IiI6ZC50b1N0cmluZygpKSxkPWQucmVwbGFjZSgvW15BLVphLXowLTldL2csIl8iKSxkPWAke3RoaXMub3B0aW9ucy5jbGFzc05hbWV9U3ViXyR7ZH1gLGg9YS5xdWVyeVNlbGVjdG9yKGAuJHt0aGlzLm9wdGlvbnMuY2xhc3NOYW1lfS4ke2R9''@;'; put 'put ''YCkpLGh8fChoPWEuY3JlYXRlRWxlbWVudCgiZGl2IiksVGkoaCxgaHRNZW51IGhhbmRzb250YWJsZSAke3RoaXMub3B0aW9ucy5jbGFzc05hbWV9YCksZCYmVGkoaCxkKSx0aGlzLm9wdGlvbnMuY29udGFpbmVyLmFwcGVuZENoaWxkKGgpKSxofW9uQWZ0ZXJJbml0KCl7dGhpcy51cGRhdGVN''@;'; put 'put ''ZW51RGltZW5zaW9ucygpLHRoaXMuaG90LmdldFNldHRpbmdzKCkuYXJpYVRhZ3MmJnZhKHRoaXMuaG90TWVudS5yb290RWxlbWVudCxbWyJyb2xlIiwibWVudSJdLFA3KC0xKV0pfW9uRG9jdW1lbnRNb3VzZURvd24obCl7dGhpcy5pc09wZW5lZCgpJiYodGhpcy5vcHRpb25zLnN0YW5kYWxv''@;'; put 'put ''bmUmJnRoaXMuaG90TWVudSYmIUltKGwudGFyZ2V0LHRoaXMuaG90TWVudS5yb290RWxlbWVudCl8fCh0aGlzLmlzQWxsU3ViTWVudXNDbG9zZWQoKXx8dGhpcy5pc1N1Yk1lbnUoKSkmJiFJbShsLnRhcmdldCwiLmh0TWVudSIpKSYmdGhpcy5jbG9zZSghMCl9b25Eb2N1bWVudENvbnRleHRN''@;'; put 'put ''ZW51KGwpe3RoaXMuaXNPcGVuZWQoKSYmcGEobC50YXJnZXQsImh0Q29yZSIpJiZJbShsLnRhcmdldCx0aGlzLmhvdE1lbnUucm9vdEVsZW1lbnQpJiZsLnByZXZlbnREZWZhdWx0KCl9fWZ1bmN0aW9uIFNKKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBLY3QoYyl7dmFyIGw9ZnVuY3Rpb24g''@;'; put 'put ''cWN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShj''@;'; put 'put ''LGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiB3RihjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5''@;'; put 'put ''cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9eGwoV18sXzEpO2NvbnN0IENUPSJjb250ZXh0TWVudSIsb2dlPUNUO0FvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiKSxBby5nZXRT''@;'; put 'put ''aW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ29udGV4dE1lbnVTaG93IiksQW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29udGV4dE1lbnVTaG93IiksQW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29udGV4dE1lbnVIaWRlIiksQW8uZ2V0U2luZ2xldG9uKCku''@;'; put 'put ''cmVnaXN0ZXIoImFmdGVyQ29udGV4dE1lbnVFeGVjdXRlIik7dmFyIFNUPW5ldyBXZWFrU2V0O2NsYXNzIENGIGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIEdjdChjLGwpeyhmdW5jdGlvbiAkY3QoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBu''@;'; put 'put ''ZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxTVCksU0oodGhpcywiY29tbWFuZEV4ZWN1dG9yIixuZXcgWTRlKHRoaXMuaG90KSksU0oodGhpcywiaXRlbXNG''@;'; put 'put ''YWN0b3J5IixudWxsKSxTSih0aGlzLCJtZW51IixudWxsKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gQ1R9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gNzB9c3RhdGljIGdldCBQTFVHSU5fREVQUygpe3JldHVyblsicGx1Z2luOkF1dG9Db2x1bW5TaXplIl19''@;'; put 'put ''c3RhdGljIGdldCBERUZBVUxUX0lURU1TKCl7cmV0dXJuW3BGLGdGLGlzLGdULG1ULGlzLGZGLGJULGlzLG1GLGhGLGlzLHZULGlzLHoyXX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbQ1RdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFi''@;'; put 'put ''bGVkKXJldHVybjtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKClbQ1RdOyJmdW5jdGlvbiI9PXR5cGVvZiBhLmNhbGxiYWNrJiZ0aGlzLmNvbW1hbmRFeGVjdXRvci5zZXRDb21tb25DYWxsYmFjayhhLmNhbGxiYWNrKSx0aGlzLm1lbnU9bmV3IFdfKHRoaXMuaG90LHtjbGFzc05hbWU6''@;'; put 'put ''Imh0Q29udGV4dE1lbnUiLGtlZXBJblZpZXdwb3J0OiEwLGNvbnRhaW5lcjphLnVpQ29udGFpbmVyfHx0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keX0pLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImJlZm9yZU9wZW4iLCgpPT53RihTVCx0aGlzLFFjdCkuY2FsbCh0aGlzKSksdGhpcy5tZW51''@;'; put 'put ''LmFkZExvY2FsSG9vaygiYWZ0ZXJPcGVuIiwoKT0+d0YoU1QsdGhpcyxldXQpLmNhbGwodGhpcykpLHRoaXMubWVudS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLCgpPT53RihTVCx0aGlzLHR1dCkuY2FsbCh0aGlzKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiZXhlY3V0ZUNvbW1hbmQi''@;'; put 'put ''LGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIGwuZXhlY3V0ZUNvbW1hbmQuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlck9uQ2VsbENvbnRleHRNZW51IixkPT53''@;'; put 'put ''RihTVCx0aGlzLEpjdCkuY2FsbCh0aGlzLGQpKSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2lu''@;'; put 'put ''KCl7dGhpcy5jbG9zZSgpLHRoaXMubWVudSYmKHRoaXMubWVudS5kZXN0cm95KCksdGhpcy5tZW51PW51bGwpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdl''@;'; put 'put ''dENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dCh7a2V5czpbWyJDb250cm9sL01ldGEiLCJTaGlmdCIsIkJhY2tzbGFzaCJdLFsiU2hpZnQiLCJGMTAiXV0sY2FsbGJhY2s6KCk9Pntjb25zdHtoaWdobGlnaHQ6bH09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTt0aGlzLmhvdC5z''@;'; put 'put ''Y3JvbGxUb0ZvY3VzZWRDZWxsKCk7Y29uc3QgYT10aGlzLmhvdC5nZXRDZWxsKGwucm93LGwuY29sLCEwKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxkPW9GKHRoaXMubWVudS5jb250YWluZXIsdGhpcy5ob3Qucm9vdERvY3VtZW50KTt0aGlzLm9wZW4oe2xlZnQ6YS5sZWZ0K2QubGVmdCx0''@;'; put 'put ''b3A6YS50b3ArZC50b3AtMSthLmhlaWdodH0se2xlZnQ6YS53aWR0aCxhYm92ZTotYS5oZWlnaHR9KSx0aGlzLm1lbnUuZ2V0TmF2aWdhdG9yKCkudG9GaXJzdEl0ZW0oKX0scnVuT25seUlmOigpPT57dmFyIGw7Y29uc3QgYT1udWxsPT09KGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxh''@;'; put 'put ''c3QoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaGlnaGxpZ2h0O3JldHVybiBhJiZ0aGlzLmhvdC5zZWxlY3Rpb24uaXNDZWxsVmlzaWJsZShhKSYmIXRoaXMubWVudS5pc09wZW5lZCgpfSxncm91cDpvZ2V9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5h''@;'; put 'put ''Z2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAob2dlKX1vcGVuKGwpe3ZhciBhO2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7YWJvdmU6MCxiZWxvdzowLGxlZnQ6MCxyaWdodDowfTtpZihu''@;'; put 'put ''dWxsIT09KGE9dGhpcy5tZW51KSYmdm9pZCAwIT09YSYmYS5pc09wZW5lZCgpKXJldHVybjt0aGlzLnByZXBhcmVNZW51SXRlbXMoKSx0aGlzLm1lbnUub3BlbigpO2NvbnN0IGg9dGhpcy5tZW51LnRhYmxlQm9yZGVyV2lkdGg+MDtxYShkLChmLHYpPT57Y29uc3QgTT1bImJlbG93Iiwicmln''@;'; put 'put ''aHQiXS5pbmNsdWRlcyh2KT9mKzE6Zi0xO3RoaXMubWVudS5zZXRPZmZzZXQodixoP2Y6TSl9KSx0aGlzLm1lbnUuc2V0UG9zaXRpb24obCl9Y2xvc2UoKXt2YXIgbDtudWxsPT09KGw9dGhpcy5tZW51KXx8dm9pZCAwPT09bHx8bC5jbG9zZSgpLHRoaXMuaXRlbXNGYWN0b3J5PW51bGx9ZXhl''@;'; put 'put ''Y3V0ZUNvbW1hbmQobCl7bnVsbD09PXRoaXMuaXRlbXNGYWN0b3J5JiZ0aGlzLnByZXBhcmVNZW51SXRlbXMoKTtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhPjE/YS0xOjApLGg9MTtoPGE7aCsrKWRbaC0xXT1hcmd1bWVudHNbaF07dGhpcy5jb21tYW5kRXhlY3V0''@;'; put 'put ''b3IuZXhlY3V0ZShsLC4uLmQpfXByZXBhcmVNZW51SXRlbXMoKXt0aGlzLml0ZW1zRmFjdG9yeT1uZXcgcTRlKHRoaXMuaG90LENGLkRFRkFVTFRfSVRFTVMpO2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtDVF0sYT17aXRlbXM6dGhpcy5pdGVtc0ZhY3RvcnkuZ2V0SXRlbXMobCl9''@;'; put 'put ''O3RoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbnRleHRNZW51RGVmYXVsdE9wdGlvbnMiLGEpLHRoaXMuaXRlbXNGYWN0b3J5LnNldFByZWRlZmluZWRJdGVtcyhhLml0ZW1zKTtjb25zdCBkPXRoaXMuaXRlbXNGYWN0b3J5LmdldEl0ZW1zKGwpO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVD''@;'; put 'put ''b250ZXh0TWVudVNldEl0ZW1zIixkKSx0aGlzLm1lbnUuc2V0TWVudUl0ZW1zKGQpLFluKGQsaD0+dGhpcy5jb21tYW5kRXhlY3V0b3IucmVnaXN0ZXJDb21tYW5kKGgua2V5LGgpKX1kZXN0cm95KCl7dGhpcy5jbG9zZSgpLHRoaXMubWVudSYmdGhpcy5tZW51LmRlc3Ryb3koKSxzdXBlci5k''@;'; put 'put ''ZXN0cm95KCl9fWZ1bmN0aW9uIEpjdChjKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKCksYT1sLnJvd0hlYWRlcnMsZD1sLmNvbEhlYWRlcnMsZj1jLnRhcmdldDtpZih0aGlzLmNsb3NlKCkscGEoZiwiaGFuZHNvbnRhYmxlSW5wdXQiKXx8KGMucHJldmVudERlZmF1bHQoKSxjLnN0''@;'; put 'put ''b3BQcm9wYWdhdGlvbigpLCEoYXx8ZHx8ZnVuY3Rpb24gaChNKXtyZXR1cm4iVEQiPT09TS5ub2RlTmFtZXx8IlREIj09PU0ucGFyZW50Tm9kZS5ub2RlTmFtZX0oZil8fHBhKGYsImN1cnJlbnQiKSYmcGEoZiwid3RCb3JkZXIiKSkpKXJldHVybjtjb25zdCB2PW9GKHRoaXMubWVudS5jb250''@;'; put 'put ''YWluZXIsdGhpcy5ob3Qucm9vdERvY3VtZW50KTt0aGlzLm9wZW4oe3RvcDpjLmNsaWVudFkrdi50b3AsbGVmdDpjLmNsaWVudFgrdi5sZWZ0fSl9ZnVuY3Rpb24gUWN0KCl7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZUNvbnRleHRNZW51U2hvdyIsdGhpcyl9ZnVuY3Rpb24gZXV0KCl7dGhp''@;'; put 'put ''cy5ob3QucnVuSG9va3MoImFmdGVyQ29udGV4dE1lbnVTaG93Iix0aGlzKX1mdW5jdGlvbiB0dXQoKXt0aGlzLmhvdC5saXN0ZW4oKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDb250ZXh0TWVudUhpZGUiLHRoaXMpfUNGLlNFUEFSQVRPUj17bmFtZTppc307Y2xhc3Mgc3V0e2NvbnN0cnVj''@;'; put 'put ''dG9yKCl7dGhpcy5kYXRhPXt9fXNldERhdGEobCxhKXt0aGlzLmRhdGFbbF09YX1nZXREYXRhKGwpe3JldHVybiB0aGlzLmRhdGFbbF18fHZvaWQgMH19Y2xhc3MgbHV0e2NvbnN0cnVjdG9yKCl7dGhpcy5jbGlwYm9hcmREYXRhPW5ldyBzdXR9cHJldmVudERlZmF1bHQoKXt9fWZ1bmN0aW9u''@;'; put 'put ''IFlfKGMsbCxhKXthZ2UoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIGFnZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gUTEoYyxsKXty''@;'; put 'put ''ZXR1cm4gYy5nZXQoJF8oYyxsKSl9ZnVuY3Rpb24gR18oYyxsLGEpe3JldHVybiBjLnNldCgkXyhjLGwpLGEpLGF9ZnVuY3Rpb24gJF8oYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBU''@;'; put 'put ''eXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBKbT1uZXcgV2Vha01hcCxNSj1uZXcgV2Vha01hcCxNVD1uZXcgV2Vha01hcCx4Sj1uZXcgV2Vha01hcCxFSj1uZXcgV2Vha01hcCx4VD1uZXcgV2Vha01hcCxFVD1uZXcgV2Vha1Nl''@;'; put 'put ''dDtjbGFzcyB1dXR7Y29uc3RydWN0b3IobCl7bGV0e2NvdW50Um93czphLGNvdW50Q29sdW1uczpkLHJvd3NMaW1pdDpoLGNvbHVtbnNMaW1pdDpmLGNvdW50Q29sdW1uSGVhZGVyczp2fT1sOyhmdW5jdGlvbiBjdXQoYyxsKXthZ2UoYyxsKSxsLmFkZChjKX0pKHRoaXMsRVQpLFlfKHRoaXMs''@;'; put 'put ''Sm0sdm9pZCAwKSxZXyh0aGlzLE1KLHZvaWQgMCksWV8odGhpcyxNVCx2b2lkIDApLFlfKHRoaXMseEosdm9pZCAwKSxZXyh0aGlzLEVKLHZvaWQgMCksWV8odGhpcyx4VCx2b2lkIDApLEdfKE1KLHRoaXMsYSksR18oTVQsdGhpcyxkKSxHXyh4Six0aGlzLGgpLEdfKEVKLHRoaXMsZiksR18o''@;'; put 'put ''eFQsdGhpcyx2KX1zZXRTZWxlY3RlZFJhbmdlKGwpe0dfKEptLHRoaXMsbCl9Z2V0Q2VsbHNSYW5nZSgpe2lmKDA9PT1RMShNSix0aGlzKS5jYWxsKHRoaXMpfHwwPT09UTEoTVQsdGhpcykuY2FsbCh0aGlzKSlyZXR1cm4gbnVsbDtjb25zdHtyb3c6bCxjb2w6YX09UTEoSm0sdGhpcykuZ2V0''@;'; put 'put ''VG9wU3RhcnRDb3JuZXIoKSx7cm93OmQsY29sOmh9PVExKEptLHRoaXMpLmdldEJvdHRvbUVuZENvcm5lcigpLGY9JF8oRVQsdGhpcyxkdXQpLmNhbGwodGhpcyxsLGQpLHY9JF8oRVQsdGhpcyxUSikuY2FsbCh0aGlzLGEsaCk7cmV0dXJue2lzUmFuZ2VUcmltbWVkOmQhPT1mfHxoIT09dixz''@;'; put 'put ''dGFydFJvdzpsLHN0YXJ0Q29sOmEsZW5kUm93OmYsZW5kQ29sOnZ9fWdldE1vc3RCb3R0b21Db2x1bW5IZWFkZXJzUmFuZ2UoKXtpZigwPT09UTEoTVQsdGhpcykuY2FsbCh0aGlzKXx8MD09PVExKHhULHRoaXMpLmNhbGwodGhpcykpcmV0dXJuIG51bGw7Y29uc3R7Y29sOmx9PVExKEptLHRo''@;'; put 'put ''aXMpLmdldFRvcFN0YXJ0Q29ybmVyKCkse2NvbDphfT1RMShKbSx0aGlzKS5nZXRCb3R0b21FbmRDb3JuZXIoKSxkPSRfKEVULHRoaXMsVEopLmNhbGwodGhpcyxsLGEpO3JldHVybntpc1JhbmdlVHJpbW1lZDphIT09ZCxzdGFydFJvdzotMSxzdGFydENvbDpsLGVuZFJvdzotMSxlbmRDb2w6''@;'; put 'put ''ZH19Z2V0QWxsQ29sdW1uSGVhZGVyc1JhbmdlKCl7aWYoMD09PVExKE1ULHRoaXMpLmNhbGwodGhpcyl8fDA9PT1RMSh4VCx0aGlzKS5jYWxsKHRoaXMpKXJldHVybiBudWxsO2NvbnN0e2NvbDpsfT1RMShKbSx0aGlzKS5nZXRUb3BTdGFydENvcm5lcigpLHtjb2w6YX09UTEoSm0sdGhpcyku''@;'; put 'put ''Z2V0Qm90dG9tRW5kQ29ybmVyKCksZD0kXyhFVCx0aGlzLFRKKS5jYWxsKHRoaXMsbCxhKTtyZXR1cm57aXNSYW5nZVRyaW1tZWQ6YSE9PWQsc3RhcnRSb3c6LVExKHhULHRoaXMpLmNhbGwodGhpcyksc3RhcnRDb2w6bCxlbmRSb3c6LTEsZW5kQ29sOmR9fX1mdW5jdGlvbiBUSihjLGwpe3Jl''@;'; put 'put ''dHVybiBNYXRoLm1pbihsLE1hdGgubWF4KGMrUTEoRUosdGhpcykuY2FsbCh0aGlzKS0xLGMpKX1mdW5jdGlvbiBkdXQoYyxsKXtyZXR1cm4gTWF0aC5taW4obCxNYXRoLm1heChjK1ExKHhKLHRoaXMpLmNhbGwodGhpcyktMSxjKSl9ZnVuY3Rpb24gc2dlKGMpe2NvbnN0IGw9W10sYT1bXTty''@;'; put 'put ''ZXR1cm4gWW4oYyxkPT57JG8oTWF0aC5taW4oZC5zdGFydFJvdyxkLmVuZFJvdyksTWF0aC5tYXgoZC5zdGFydFJvdyxkLmVuZFJvdyksRD0+ey0xPT09bC5pbmRleE9mKEQpJiZsLnB1c2goRCl9KSwkbyhNYXRoLm1pbihkLnN0YXJ0Q29sLGQuZW5kQ29sKSxNYXRoLm1heChkLnN0YXJ0Q29s''@;'; put 'put ''LGQuZW5kQ29sKSxEPT57LTE9PT1hLmluZGV4T2YoRCkmJmEucHVzaChEKX0pfSkse3Jvd3M6bCxjb2x1bW5zOmF9fWZ1bmN0aW9uIFFtKGMsbCxhKXtsZ2UoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIGxnZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBp''@;'; put 'put ''bml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gVFQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGZ1dChjKXt2YXIgbD1mdW5jdGlvbiBwdXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBh''@;'; put 'put ''PWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIp''@;'; put 'put ''fXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJs''@;'; put 'put ''ZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIHpkKGMsbCl7cmV0dXJuIGMuZ2V0KFVkKGMsbCkpfWZ1bmN0aW9uIHUzKGMsbCxhKXtyZXR1cm4gYy5zZXQoVWQoYyxsKSxhKSxhfWZ1bmN0aW9uIFVkKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4g''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1Bby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb3B5TGltaXQiKSxBby5nZXRTaW5nbGV0b24oKS5yZWdpc3Rlcigi''@;'; put 'put ''bW9kaWZ5Q29weWFibGVSYW5nZSIpLEFvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDdXQiKSxBby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDdXQiKSxBby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlUGFzdGUiKSxBby5nZXRTaW5nbGV0b24oKS5yZWdp''@;'; put 'put ''c3RlcigiYWZ0ZXJQYXN0ZSIpLEFvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb3B5IiksQW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29weSIpO2NvbnN0IEFKPSJjb3B5UGFzdGUiLG11dD1bImZyYWdtZW50U2VsZWN0aW9uIl0sY2dlPVsnPG1ldGEgbmFtZT0i''@;'; put 'put ''Z2VuZXJhdG9yIiBjb250ZW50PSJIYW5kc29udGFibGUiLz4nLCc8c3R5bGUgdHlwZT0idGV4dC9jc3MiPnRke3doaXRlLXNwYWNlOm5vcm1hbH1icnttc28tZGF0YS1wbGFjZW1lbnQ6c2FtZS1jZWxsfTwvc3R5bGU+J10uam9pbigiIik7dmFyIGtKPW5ldyBXZWFrTWFwLERKPW5ldyBXZWFr''@;'; put 'put ''TWFwLElKPW5ldyBXZWFrTWFwLEtfPW5ldyBXZWFrTWFwLFNGPW5ldyBXZWFrTWFwLE1GPW5ldyBXZWFrTWFwLHFfPW5ldyBXZWFrTWFwLHhGPW5ldyBXZWFrTWFwLEloPW5ldyBXZWFrU2V0O2NsYXNzIHZ1dCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxm''@;'; put 'put ''dW5jdGlvbiBodXQoYyxsKXtsZ2UoYyxsKSxsLmFkZChjKX0odGhpcyxJaCksVFQodGhpcywiY29sdW1uc0xpbWl0IiwxLzApLFRUKHRoaXMsInJvd3NMaW1pdCIsMS8wKSxUVCh0aGlzLCJwYXN0ZU1vZGUiLCJvdmVyd3JpdGUiKSxUVCh0aGlzLCJ1aUNvbnRhaW5lciIsdGhpcy5ob3Qucm9v''@;'; put 'put ''dERvY3VtZW50LmJvZHkpLFFtKHRoaXMsa0osITEpLFFtKHRoaXMsREosITEpLFFtKHRoaXMsSUosITEpLFFtKHRoaXMsS18sImNlbGxzLW9ubHkiKSxRbSh0aGlzLFNGLCExKSxRbSh0aGlzLE1GLCExKSxRbSh0aGlzLHFfLG5ldyB1dXQoe2NvdW50Um93czooKT0+dGhpcy5ob3QuY291bnRS''@;'; put 'put ''b3dzKCksY291bnRDb2x1bW5zOigpPT50aGlzLmhvdC5jb3VudENvbHMoKSxyb3dzTGltaXQ6KCk9PnRoaXMucm93c0xpbWl0LGNvbHVtbnNMaW1pdDooKT0+dGhpcy5jb2x1bW5zTGltaXQsY291bnRDb2x1bW5IZWFkZXJzOigpPT50aGlzLmhvdC52aWV3LmdldENvbHVtbkhlYWRlcnNDb3Vu''@;'; put 'put ''dCgpfSkpLFFtKHRoaXMseEYsITEpLFRUKHRoaXMsImNvcHlhYmxlUmFuZ2VzIixbXSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIEFKfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuW0FKLC4uLm11dF19c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4g''@;'; put 'put ''ODB9c3RhdGljIGdldCBERUZBVUxUX1NFVFRJTkdTKCl7cmV0dXJue3Bhc3RlTW9kZToib3ZlcndyaXRlIixyb3dzTGltaXQ6MS8wLGNvbHVtbnNMaW1pdDoxLzAsY29weUNvbHVtbkhlYWRlcnM6ITEsY29weUNvbHVtbkdyb3VwSGVhZGVyczohMSxjb3B5Q29sdW1uSGVhZGVyc09ubHk6ITF9''@;'; put 'put ''fWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtBSl19ZW5hYmxlUGx1Z2luKCl7dmFyIGwsYSxkPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5wYXN0ZU1vZGU9bnVsbCE9PShsPXRoaXMuZ2V0U2V0dGluZygicGFzdGVNb2RlIikpJiZ2b2lkIDAhPT1sP2w6dGhp''@;'; put 'put ''cy5wYXN0ZU1vZGUsdGhpcy5yb3dzTGltaXQ9aXNOYU4odGhpcy5nZXRTZXR0aW5nKCJyb3dzTGltaXQiKSk/dGhpcy5yb3dzTGltaXQ6dGhpcy5nZXRTZXR0aW5nKCJyb3dzTGltaXQiKSx0aGlzLmNvbHVtbnNMaW1pdD1pc05hTih0aGlzLmdldFNldHRpbmcoImNvbHVtbnNMaW1pdCIpKT90''@;'; put 'put ''aGlzLmNvbHVtbnNMaW1pdDp0aGlzLmdldFNldHRpbmcoImNvbHVtbnNMaW1pdCIpLHUzKGtKLHRoaXMsdGhpcy5nZXRTZXR0aW5nKCJjb3B5Q29sdW1uSGVhZGVycyIpKSx1MyhESix0aGlzLHRoaXMuZ2V0U2V0dGluZygiY29weUNvbHVtbkdyb3VwSGVhZGVycyIpKSx1MyhJSix0aGlzLHRo''@;'; put 'put ''aXMuZ2V0U2V0dGluZygiY29weUNvbHVtbkhlYWRlcnNPbmx5IikpLHRoaXMudWlDb250YWluZXI9bnVsbCE9PShhPXRoaXMuZ2V0U2V0dGluZygidWlDb250YWluZXIiKSkmJnZvaWQgMCE9PWE/YTp0aGlzLnVpQ29udGFpbmVyLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1''@;'; put 'put ''bHRPcHRpb25zIixoPT5VZChJaCx0aGlzLF91dCkuY2FsbCh0aGlzLGgpKSx0aGlzLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uIixmdW5jdGlvbigpe2Zvcih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBV''@;'; put 'put ''ZChJaCxkLHd1dCkuY2FsbChkLC4uLmYpfSksdGhpcy5hZGRIb29rKCJhZnRlclNlbGVjdGlvbkVuZCIsKCk9PlVkKEloLHRoaXMsQ3V0KS5jYWxsKHRoaXMpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKHRoaXMuaG90LnJvb3REb2N1bWVudCwiY29weSIsZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gZC5vbkNvcHkoLi4uYXJndW1lbnRzKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ob3Qucm9vdERvY3VtZW50LCJjdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIGQub25DdXQoLi4uYXJndW1lbnRzKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50''@;'; put 'put ''TGlzdGVuZXIodGhpcy5ob3Qucm9vdERvY3VtZW50LCJwYXN0ZSIsZnVuY3Rpb24oKXtyZXR1cm4gZC5vblBhc3RlKC4uLmFyZ3VtZW50cyl9KSx3JCgpJiYodGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcih0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keSwibW91c2VlbnRlciIs''@;'; put 'put ''ZnVuY3Rpb24oKXtmb3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gVWQoSWgsZCxTdXQpLmNhbGwoZCwuLi5mKX0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIodGhpcy5ob3Qucm9v''@;'; put 'put ''dERvY3VtZW50LmJvZHksIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBoPWFyZ3VtZW50cy5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDt2KyspZlt2XT1hcmd1bWVudHNbdl07cmV0dXJuIFVkKEloLGQsTXV0KS5jYWxsKGQsLi4uZil9KSx0aGlzLmFkZEhvb2soImFmdGVy''@;'; put 'put ''U2VsZWN0aW9uIiwoKT0+VWQoSWgsdGhpcyx4dXQpLmNhbGwodGhpcykpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIu''@;'; put 'put ''ZGlzYWJsZVBsdWdpbigpfWNvcHkoKXt1MyhLXyx0aGlzLGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiY2VsbHMtb25seSIpLHUzKFNGLHRoaXMsITApLFVkKEloLHRoaXMsdWdlKS5jYWxsKHRoaXMsImNvcHkiKX1jb3B5Q2VsbHNPbmx5''@;'; put 'put ''KCl7dGhpcy5jb3B5KCJjZWxscy1vbmx5Iil9Y29weUNvbHVtbkhlYWRlcnNPbmx5KCl7dGhpcy5jb3B5KCJjb2x1bW4taGVhZGVycy1vbmx5Iil9Y29weVdpdGhBbGxDb2x1bW5IZWFkZXJzKCl7dGhpcy5jb3B5KCJ3aXRoLWNvbHVtbi1ncm91cC1oZWFkZXJzIil9Y29weVdpdGhDb2x1bW5I''@;'; put 'put ''ZWFkZXJzKCl7dGhpcy5jb3B5KCJ3aXRoLWNvbHVtbi1oZWFkZXJzIil9Y3V0KCl7dTMoTUYsdGhpcywhMCksVWQoSWgsdGhpcyx1Z2UpLmNhbGwodGhpcywiY3V0Iil9Z2V0UmFuZ2VkQ29weWFibGVEYXRhKGwpe3JldHVybiBYRSh0aGlzLmdldFJhbmdlZERhdGEobCkpfWdldFJhbmdlZERh''@;'; put 'put ''dGEobCl7Y29uc3QgYT1bXSx7cm93czpkLGNvbHVtbnM6aH09c2dlKGwpO3JldHVybiBZbihkLGY9Pntjb25zdCB2PVtdO1luKGgsTT0+e3YucHVzaChmPDA/dGhpcy5ob3QuZ2V0Q29sSGVhZGVyKE0sZik6dGhpcy5ob3QuZ2V0Q29weWFibGVEYXRhKGYsTSkpfSksYS5wdXNoKHYpfSksYX1w''@;'; put 'put ''YXN0ZSgpe2xldCBsPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXToiIixhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsO2lmKCFsJiYhYSlyZXR1cm47Y29uc3QgZD1uZXcgbHV0O2wm''@;'; put 'put ''JmQuY2xpcGJvYXJkRGF0YS5zZXREYXRhKCJ0ZXh0L3BsYWluIixsKSxhJiZkLmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9odG1sIixhKSx0aGlzLm9uUGFzdGUoZCl9c2V0Q29weWFibGVUZXh0KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsKXJl''@;'; put 'put ''dHVybjtpZihsLmlzU2luZ2xlSGVhZGVyKCkpcmV0dXJuIHZvaWQodGhpcy5jb3B5YWJsZVJhbmdlcz1bXSk7emQocV8sdGhpcykuc2V0U2VsZWN0ZWRSYW5nZShsKTtjb25zdCBhPW5ldyBNYXAoW1siaGVhZGVycyIsbnVsbF0sWyJjZWxscyIsbnVsbF1dKTsiY29sdW1uLWhlYWRlcnMtb25s''@;'; put 'put ''eSI9PT16ZChLXyx0aGlzKT9hLnNldCgiaGVhZGVycyIsemQocV8sdGhpcykuZ2V0TW9zdEJvdHRvbUNvbHVtbkhlYWRlcnNSYW5nZSgpKTooIndpdGgtY29sdW1uLWhlYWRlcnMiPT09emQoS18sdGhpcyk/YS5zZXQoImhlYWRlcnMiLHpkKHFfLHRoaXMpLmdldE1vc3RCb3R0b21Db2x1bW5I''@;'; put 'put ''ZWFkZXJzUmFuZ2UoKSk6IndpdGgtY29sdW1uLWdyb3VwLWhlYWRlcnMiPT09emQoS18sdGhpcykmJmEuc2V0KCJoZWFkZXJzIix6ZChxXyx0aGlzKS5nZXRBbGxDb2x1bW5IZWFkZXJzUmFuZ2UoKSksYS5zZXQoImNlbGxzIix6ZChxXyx0aGlzKS5nZXRDZWxsc1JhbmdlKCkpKSx0aGlzLmNv''@;'; put 'put ''cHlhYmxlUmFuZ2VzPUFycmF5LmZyb20oYS52YWx1ZXMoKSkuZmlsdGVyKGg9Pm51bGwhPT1oKS5tYXAoaD0+e2xldHtzdGFydFJvdzpmLHN0YXJ0Q29sOnYsZW5kUm93Ok0sZW5kQ29sOkR9PWg7cmV0dXJue3N0YXJ0Um93OmYsc3RhcnRDb2w6dixlbmRSb3c6TSxlbmRDb2w6RH19KSx0aGlz''@;'; put 'put ''LmNvcHlhYmxlUmFuZ2VzPXRoaXMuaG90LnJ1bkhvb2tzKCJtb2RpZnlDb3B5YWJsZVJhbmdlIix0aGlzLmNvcHlhYmxlUmFuZ2VzKTtjb25zdCBkPWEuZ2V0KCJjZWxscyIpO2lmKG51bGwhPT1kJiZkLmlzUmFuZ2VUcmltbWVkKXtjb25zdHtzdGFydFJvdzpoLHN0YXJ0Q29sOmYsZW5kUm93''@;'; put 'put ''OnYsZW5kQ29sOk19PWQ7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29weUxpbWl0Iix2LWgrMSxNLWYrMSx0aGlzLnJvd3NMaW1pdCx0aGlzLmNvbHVtbnNMaW1pdCl9fWlzRWRpdG9yT3BlbmVkKCl7dmFyIGw7cmV0dXJuIG51bGw9PT0obD10aGlzLmhvdC5nZXRBY3RpdmVFZGl0b3IoKSl8''@;'; put 'put ''fHZvaWQgMD09PWw/dm9pZCAwOmwuaXNPcGVuZWQoKX1wb3B1bGF0ZVZhbHVlcyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbC5sZW5ndGgpcmV0dXJuO2Nv''@;'; put 'put ''bnN0IGQ9bC5sZW5ndGgsaD1sWzBdLmxlbmd0aCxmPVtdLHtyb3c6dixjb2w6TX09YS5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6RCxjb2w6Wn09YS5nZXRCb3R0b21FbmRDb3JuZXIoKTtsZXQgbmU9dixjZT1NLGJlPXYsRWU9TTtmb3IoO2YubGVuZ3RoPGR8fG5lPD1EOyl7Y29uc3R7c2tp''@;'; put 'put ''cFJvd09uUGFzdGU6QmUsdmlzdWFsUm93OnFlfT10aGlzLmhvdC5nZXRDZWxsTWV0YShuZSxNKTtpZihuZT1xZSsxLCEwPT09QmUpY29udGludWU7YmU9cWUsY2U9TTtjb25zdCBudD1bXSxsdD1mLmxlbmd0aCVkO2Zvcig7bnQubGVuZ3RoPGh8fGNlPD1aOyl7Y29uc3R7c2tpcENvbHVtbk9u''@;'; put 'put ''UGFzdGU6bXQsdmlzdWFsQ29sOkp0fT10aGlzLmhvdC5nZXRDZWxsTWV0YSh2LGNlKTsoY2U9SnQrMSwhMCE9PW10KSYmKEVlPUp0LG50LnB1c2gobFtsdF1bbnQubGVuZ3RoJWhdKSl9Zi5wdXNoKG50KX1yZXR1cm4gdTMoeEYsdGhpcywhMCksdGhpcy5ob3QucG9wdWxhdGVGcm9tQXJyYXko''@;'; put 'put ''dixNLGYsdm9pZCAwLHZvaWQgMCwiQ29weVBhc3RlLnBhc3RlIix0aGlzLnBhc3RlTW9kZSksW3YsTSxiZSxFZV19b25Db3B5KGwpe3ZhciBhO2NvbnN0IGQ9dGhpcy5ob3QuZ2V0Rm9jdXNNYW5hZ2VyKCkuZ2V0UmVmb2N1c0VsZW1lbnQoKSxoPW51bGw9PT0oYT1sLnRhcmdldCl8fHZvaWQg''@;'; put 'put ''MD09PWE/dm9pZCAwOmEuaGFzQXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIpO2lmKCF0aGlzLmhvdC5pc0xpc3RlbmluZygpJiYhemQoU0YsdGhpcyl8fHRoaXMuaXNFZGl0b3JPcGVuZWQoKXx8ZmcobC50YXJnZXQpJiYoaCYmbC50YXJnZXQhPT1kfHwhaCYmbC50YXJnZXQhPT10aGlzLmhv''@;'; put 'put ''dC5yb290RG9jdW1lbnQuYm9keSYmIXBFKGwudGFyZ2V0LHRoaXMuaG90LnJvb3RFbGVtZW50KSkpcmV0dXJuO2wucHJldmVudERlZmF1bHQoKSx0aGlzLnNldENvcHlhYmxlVGV4dCgpLHUzKFNGLHRoaXMsITEpO2NvbnN0IGY9dGhpcy5nZXRSYW5nZWREYXRhKHRoaXMuY29weWFibGVSYW5n''@;'; put 'put ''ZXMpLHY9VWQoSWgsdGhpcyxidXQpLmNhbGwodGhpcyx0aGlzLmNvcHlhYmxlUmFuZ2VzKTtpZih0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29weSIsZix0aGlzLmNvcHlhYmxlUmFuZ2VzLHYpKXtjb25zdCBEPVhFKGYpO2lmKGwmJmwuY2xpcGJvYXJkRGF0YSl7Y29uc3QgWj1OJChmKTts''@;'; put 'put ''LmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4dC9wbGFpbiIsRCksbC5jbGlwYm9hcmREYXRhLnNldERhdGEoInRleHQvaHRtbCIsW2NnZSxaXS5qb2luKCIiKSl9ZWxzZSB0eXBlb2YgQ2xpcGJvYXJkRXZlbnQ+InUiJiZ0aGlzLmhvdC5yb290V2luZG93LmNsaXBib2FyZERhdGEuc2V0RGF0''@;'; put 'put ''YSgiVGV4dCIsRCk7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29weSIsZix0aGlzLmNvcHlhYmxlUmFuZ2VzLHYpfXUzKEtfLHRoaXMsImNlbGxzLW9ubHkiKX1vbkN1dChsKXt2YXIgYTtjb25zdCBkPXRoaXMuaG90LmdldEZvY3VzTWFuYWdlcigpLmdldFJlZm9jdXNFbGVtZW50KCksaD1u''@;'; put 'put ''dWxsPT09KGE9bC50YXJnZXQpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmhhc0F0dHJpYnV0ZSgiZGF0YS1ob3QtaW5wdXQiKTtpZighdGhpcy5ob3QuaXNMaXN0ZW5pbmcoKSYmIXpkKE1GLHRoaXMpfHx0aGlzLmlzRWRpdG9yT3BlbmVkKCl8fGZnKGwudGFyZ2V0KSYmKGgmJmwudGFyZ2V0IT09''@;'; put 'put ''ZHx8IWgmJmwudGFyZ2V0IT09dGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHkmJiFwRShsLnRhcmdldCx0aGlzLmhvdC5yb290RWxlbWVudCkpKXJldHVybjtsLnByZXZlbnREZWZhdWx0KCksdGhpcy5zZXRDb3B5YWJsZVRleHQoKSx1MyhNRix0aGlzLCExKTtjb25zdCBmPXRoaXMuZ2V0UmFu''@;'; put 'put ''Z2VkRGF0YSh0aGlzLmNvcHlhYmxlUmFuZ2VzKTtpZih0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ3V0IixmLHRoaXMuY29weWFibGVSYW5nZXMpKXtjb25zdCBNPVhFKGYpO2lmKGwmJmwuY2xpcGJvYXJkRGF0YSl7Y29uc3QgRD1OJChmKTtsLmNsaXBib2FyZERhdGEuc2V0RGF0YSgidGV4''@;'; put 'put ''dC9wbGFpbiIsTSksbC5jbGlwYm9hcmREYXRhLnNldERhdGEoInRleHQvaHRtbCIsW2NnZSxEXS5qb2luKCIiKSl9ZWxzZSB0eXBlb2YgQ2xpcGJvYXJkRXZlbnQ+InUiJiZ0aGlzLmhvdC5yb290V2luZG93LmNsaXBib2FyZERhdGEuc2V0RGF0YSgiVGV4dCIsTSk7dGhpcy5ob3QuZW1wdHlT''@;'; put 'put ''ZWxlY3RlZENlbGxzKCJDb3B5UGFzdGUuY3V0IiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ3V0IixmLHRoaXMuY29weWFibGVSYW5nZXMpfX1vblBhc3RlKGwpe3ZhciBhO2NvbnN0IGQ9dGhpcy5ob3QuZ2V0Rm9jdXNNYW5hZ2VyKCkuZ2V0UmVmb2N1c0VsZW1lbnQoKSxoPW51bGw9PT0o''@;'; put 'put ''YT1sLnRhcmdldCl8fHZvaWQgMD09PWE/dm9pZCAwOmEuaGFzQXR0cmlidXRlKCJkYXRhLWhvdC1pbnB1dCIpO2lmKCF0aGlzLmhvdC5pc0xpc3RlbmluZygpfHx0aGlzLmlzRWRpdG9yT3BlbmVkKCl8fCF0aGlzLmhvdC5nZXRTZWxlY3RlZCgpfHxmZyhsLnRhcmdldCkmJihoJiZsLnRhcmdl''@;'; put 'put ''dCE9PWR8fCFoJiZsLnRhcmdldCE9PXRoaXMuaG90LnJvb3REb2N1bWVudC5ib2R5JiYhcEUobC50YXJnZXQsdGhpcy5ob3Qucm9vdEVsZW1lbnQpKSlyZXR1cm47bGV0IGY7aWYobC5wcmV2ZW50RGVmYXVsdCgpLGwmJnR5cGVvZiBsLmNsaXBib2FyZERhdGE8InUiKXtjb25zdCBuZT1NTyhs''@;'; put 'put ''LmNsaXBib2FyZERhdGEuZ2V0RGF0YSgidGV4dC9odG1sIikse0FERF9UQUdTOlsibWV0YSJdLEFERF9BVFRSOlsiY29udGVudCJdLEZPUkNFX0JPRFk6ITB9KTtmPW5lJiYvKDx0YWJsZSl8KDxUQUJMRSkvZy50ZXN0KG5lKT9lZmUobmUsdGhpcy5ob3Qucm9vdERvY3VtZW50KS5kYXRhOmwu''@;'; put 'put ''Y2xpcGJvYXJkRGF0YS5nZXREYXRhKCJ0ZXh0L3BsYWluIil9ZWxzZSB0eXBlb2YgQ2xpcGJvYXJkRXZlbnQ+InUiJiZ0eXBlb2YgdGhpcy5ob3Qucm9vdFdpbmRvdy5jbGlwYm9hcmREYXRhPCJ1IiYmKGY9dGhpcy5ob3Qucm9vdFdpbmRvdy5jbGlwYm9hcmREYXRhLmdldERhdGEoIlRleHQi''@;'; put 'put ''KSk7aWYoInN0cmluZyI9PXR5cGVvZiBmJiYoZj1mdW5jdGlvbiBobnQoYyl7Y29uc3QgbD1bWyIiXV07aWYoMD09PWMubGVuZ3RoKXJldHVybiBsO2xldCBoLGE9MCxkPTA7Zm9yKDtjLmxlbmd0aD4wJiZoIT09Yy5sZW5ndGg7KWlmKGg9Yy5sZW5ndGgsYy5tYXRjaChxM2UpKWM9Yy5yZXBs''@;'; put 'put ''YWNlKHEzZSwiIiksYSs9MSxsW2RdW2FdPSIiO2Vsc2UgaWYoYy5tYXRjaChLM2UpKWM9Yy5yZXBsYWNlKEszZSwiIiksYT0wLGQrPTEsbFtkXT1bIiJdO2Vsc2V7bGV0IGY9IiI7aWYoYy5zdGFydHNXaXRoKCciJykpe2xldCB2PTAsTT0hMDtmb3IoO007KXtjb25zdCBEPWMuc2xpY2UoMCwx''@;'; put 'put ''KTsnIic9PT1EJiYodis9MSksZis9RCwoMD09PShjPWMuc2xpY2UoMSkpLmxlbmd0aHx8Yy5tYXRjaCgvXltcdFxyXG5dLykmJnYlMj09MCkmJihNPSExKX1mPWYucmVwbGFjZSgvXiIvLCIiKS5yZXBsYWNlKC8iJC8sIiIpLnJlcGxhY2UoL1siXSovZyxEPT5uZXcgQXJyYXkoTWF0aC5mbG9v''@;'; put 'put ''cihELmxlbmd0aC8yKSkuZmlsbCgnIicpLmpvaW4oIiIpKX1lbHNle2NvbnN0IHY9Yy5tYXRjaChkbnQpO2Y9dj92WzBdOiIiLGM9Yy5zbGljZShmLmxlbmd0aCl9bFtkXVthXT1mfXJldHVybiBsfShmKSksdm9pZCAwPT09Znx8ZiYmMD09PWYubGVuZ3RofHwhMT09PXRoaXMuaG90LnJ1bkhv''@;'; put 'put ''b2tzKCJiZWZvcmVQYXN0ZSIsZix0aGlzLmNvcHlhYmxlUmFuZ2VzKSlyZXR1cm47Y29uc3RbdixNLEQsWl09dGhpcy5wb3B1bGF0ZVZhbHVlcyhmKTt0aGlzLmhvdC5zZWxlY3RDZWxsKHYsTSxNYXRoLm1pbih0aGlzLmhvdC5jb3VudFJvd3MoKS0xLEQpLE1hdGgubWluKHRoaXMuaG90LmNv''@;'; put 'put ''dW50Q29scygpLTEsWikpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclBhc3RlIixmLHRoaXMuY29weWFibGVSYW5nZXMpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIHVnZShjKXtpZih3JCgpKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYo''@;'; put 'put ''bCl7Y29uc3R7cm93OmEsY29sOmR9PWwuaGlnaGxpZ2h0LGg9dGhpcy5ob3QuZ2V0Q2VsbChhLGQsITApO2gmJkUyZShoLCgpPT57dGhpcy5ob3Qucm9vdERvY3VtZW50LmV4ZWNDb21tYW5kKGMpfSl9fWVsc2UgdGhpcy5ob3Qucm9vdERvY3VtZW50LmV4ZWNDb21tYW5kKGMpfWZ1bmN0aW9u''@;'; put 'put ''IGJ1dChjKXtjb25zdHtyb3dzOmx9PXNnZShjKTtsZXQgYT0wO2ZvcihsZXQgZD0wO2Q8bC5sZW5ndGgmJiEobFtkXT49MCk7ZCsrKWErPTE7cmV0dXJue2NvbHVtbkhlYWRlcnNDb3VudDphfX1mdW5jdGlvbiB5dXQoKXtpZih0aGlzLmhvdC5pc0xpc3RlbmluZygpKXtjb25zdCBjPXRoaXMu''@;'; put 'put ''aG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoYyl7Y29uc3R7cm93OmwsY29sOmF9PWMuaGlnaGxpZ2h0LGQ9dGhpcy5ob3QuZ2V0Q2VsbChsLGEsITApO2QmJm0kKGQpfX19ZnVuY3Rpb24gZGdlKCl7aWYodGhpcy5ob3QuaXNMaXN0ZW5pbmcoKSl7Y29uc3QgYz10aGlzLmhvdC5nZXRT''@;'; put 'put ''ZWxlY3RlZFJhbmdlTGFzdCgpO2lmKGMpe2NvbnN0e3JvdzpsLGNvbDphfT1jLmhpZ2hsaWdodCxkPXRoaXMuaG90LmdldENlbGwobCxhLCEwKTtudWxsIT1kJiZkLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIikmJnYkKGQpfX19ZnVuY3Rpb24gX3V0KGMpe2MuaXRlbXMucHVzaCh7''@;'; put 'put ''bmFtZToiLS0tLS0tLS0tIn0sZnVuY3Rpb24gbnV0KGMpe3JldHVybntrZXk6ImNvcHkiLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFdLKX0sY2FsbGJhY2soKXtjLmNvcHlDZWxsc09ubHkoKX0sZGlzYWJsZWQoKXtpZigwPT09dGhpcy5jb3VudFJvd3MoKXx8MD09''@;'; put 'put ''PXRoaXMuY291bnRDb2xzKCkpcmV0dXJuITA7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWx8fGwuaXNTaW5nbGVIZWFkZXIoKSlyZXR1cm4hMDtjb25zdCBhPXRoaXMuZ2V0U2VsZWN0ZWQoKTtyZXR1cm4hYXx8YS5sZW5ndGg+MX0saGlkZGVuOiExfX0odGhpcykp''@;'; put 'put ''LHpkKGtKLHRoaXMpJiZjLml0ZW1zLnB1c2goZnVuY3Rpb24gb3V0KGMpe3JldHVybntrZXk6ImNvcHlfd2l0aF9jb2x1bW5faGVhZGVycyIsbmFtZSgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGE9bD9BcyhsLmdldFdpZHRoKCktMSwwLDEpOjA7cmV0dXJuIHRoaXMu''@;'; put 'put ''Z2V0VHJhbnNsYXRlZFBocmFzZShZSyxhKX0sY2FsbGJhY2soKXtjLmNvcHlXaXRoQ29sdW1uSGVhZGVycygpfSxkaXNhYmxlZCgpe2lmKCF0aGlzLmhhc0NvbEhlYWRlcnMoKSlyZXR1cm4hMDtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbHx8bC5pc1NpbmdsZUhl''@;'; put 'put ''YWRlcigpKXJldHVybiEwO2NvbnN0IGE9dGhpcy5nZXRTZWxlY3RlZCgpO3JldHVybiFhfHxhLmxlbmd0aD4xfSxoaWRkZW46ITF9fSh0aGlzKSksemQoREosdGhpcykmJmMuaXRlbXMucHVzaChmdW5jdGlvbiBpdXQoYyl7cmV0dXJue2tleToiY29weV93aXRoX2NvbHVtbl9ncm91cF9oZWFk''@;'; put 'put ''ZXJzIixuYW1lKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksYT1sP0FzKGwuZ2V0V2lkdGgoKS0xLDAsMSk6MDtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEdLLGEpfSxjYWxsYmFjaygpe2MuY29weVdpdGhBbGxDb2x1bW5IZWFkZXJzKCl9LGRpc2FibGVk''@;'; put 'put ''KCl7aWYoIXRoaXMuaGFzQ29sSGVhZGVycygpfHwhdGhpcy5nZXRTZXR0aW5ncygpLm5lc3RlZEhlYWRlcnMpcmV0dXJuITA7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWx8fGwuaXNTaW5nbGVIZWFkZXIoKSlyZXR1cm4hMDtjb25zdCBhPXRoaXMuZ2V0U2VsZWN0''@;'; put 'put ''ZWQoKTtyZXR1cm4hYXx8YS5sZW5ndGg+MX0saGlkZGVuOiExfX0odGhpcykpLHpkKElKLHRoaXMpJiZjLml0ZW1zLnB1c2goZnVuY3Rpb24gcnV0KGMpe3JldHVybntrZXk6ImNvcHlfY29sdW1uX2hlYWRlcnNfb25seSIsbmFtZSgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFz''@;'; put 'put ''dCgpLGE9bD9BcyhsLmdldFdpZHRoKCktMSwwLDEpOjA7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSgkSyxhKX0sY2FsbGJhY2soKXtjLmNvcHlDb2x1bW5IZWFkZXJzT25seSgpfSxkaXNhYmxlZCgpe2lmKCF0aGlzLmhhc0NvbEhlYWRlcnMoKSlyZXR1cm4hMDtjb25zdCBsPXRo''@;'; put 'put ''aXMuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbHx8bC5pc1NpbmdsZUhlYWRlcigpKXJldHVybiEwO2NvbnN0IGE9dGhpcy5nZXRTZWxlY3RlZCgpO3JldHVybiFhfHxhLmxlbmd0aD4xfSxoaWRkZW46ITF9fSh0aGlzKSksYy5pdGVtcy5wdXNoKGZ1bmN0aW9uIGF1dChjKXtyZXR1cm57''@;'; put 'put ''a2V5OiJjdXQiLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKEtLKX0sY2FsbGJhY2soKXtjLmN1dCgpfSxkaXNhYmxlZCgpe2lmKDA9PT10aGlzLmNvdW50Um93cygpfHwwPT09dGhpcy5jb3VudENvbHMoKSlyZXR1cm4hMDtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRS''@;'; put 'put ''YW5nZUxhc3QoKTtpZighbHx8bC5pc1NpbmdsZUhlYWRlcigpKXJldHVybiEwO2NvbnN0IGE9dGhpcy5nZXRTZWxlY3RlZCgpO3JldHVybiFhfHxhLmxlbmd0aD4xfSxoaWRkZW46ITF9fSh0aGlzKSl9ZnVuY3Rpb24gd3V0KGMsbCxhLGQsaCl7emQoeEYsdGhpcykmJihoLnZhbHVlPSEwKSx1''@;'; put 'put ''Myh4Rix0aGlzLCExKX1mdW5jdGlvbiBDdXQoKXt0aGlzLmlzRWRpdG9yT3BlbmVkKCl8fHRoaXMuaG90LmdldFNldHRpbmdzKCkuZnJhZ21lbnRTZWxlY3Rpb258fHRoaXMuc2V0Q29weWFibGVUZXh0KCl9ZnVuY3Rpb24gU3V0KCl7VWQoSWgsdGhpcyxkZ2UpLmNhbGwodGhpcyl9ZnVuY3Rp''@;'; put 'put ''b24gTXV0KCl7VWQoSWgsdGhpcyx5dXQpLmNhbGwodGhpcyl9ZnVuY3Rpb24geHV0KCl7VWQoSWgsdGhpcyxkZ2UpLmNhbGwodGhpcyl9ZnVuY3Rpb24gaGdlKGMsbCl7cmV0dXJuYGJvcmRlcl9yb3cke2N9Y29sJHtsfWB9ZnVuY3Rpb24gUkooYyl7dmFyIGwsYTtyZXR1cm4oRm8oYy5zdGFy''@;'; put 'put ''dCl8fEZvKGMubGVmdCkpJiYoYy5zdGFydD1udWxsIT09KGw9Yy5zdGFydCkmJnZvaWQgMCE9PWw/bDpjLmxlZnQpLChGbyhjLmVuZCl8fEZvKGMucmlnaHQpKSYmKGMuZW5kPW51bGwhPT0oYT1jLmVuZCkmJnZvaWQgMCE9PWE/YTpjLnJpZ2h0KSxkZWxldGUgYy5sZWZ0LGRlbGV0ZSBjLnJp''@;'; put 'put ''Z2h0LGN9ZnVuY3Rpb24ga1QoYyl7cmV0dXJuIEZvKGMuc3RhcnQpJiYoYy5sZWZ0PWMuc3RhcnQpLEZvKGMuZW5kKSYmKGMucmlnaHQ9Yy5lbmQpLGN9ZnVuY3Rpb24gTEooYyxsKXtyZXR1cm57aWQ6aGdlKGMsbCksYm9yZGVyOnt3aWR0aDoxLGNvbG9yOiIjMDAwIixjb3JuZXJWaXNpYmxl''@;'; put 'put ''OiExfSxyb3c6Yyxjb2w6bCx0b3A6e2hpZGU6ITB9LGJvdHRvbTp7aGlkZTohMH0sc3RhcnQ6e2hpZGU6ITB9LGVuZDp7aGlkZTohMH19fWZ1bmN0aW9uIExnKGMsbCl7bGV0IGE9ITE7cmV0dXJuIFluKGMuZ2V0U2VsZWN0ZWRSYW5nZSgpLGQ9PntkLmZvckFsbCgoaCxmKT0+e2lmKGg8MHx8''@;'; put 'put ''ZjwwKXJldHVybjtjb25zdCB2PWMuZ2V0Q2VsbE1ldGEoaCxmKS5ib3JkZXJzO2lmKHYpe2lmKCFsKXJldHVybiBhPSEwLCExO2lmKCFFdSh2W2xdLCJoaWRlIil8fCExPT09dltsXS5oaWRlKXJldHVybiBhPSEwLCExfX0pfSksYX1mdW5jdGlvbiBFRihjKXtyZXR1cm5gPHNwYW4gY2xhc3M9''@;'; put 'put ''InNlbGVjdGVkIj5cdTI3MTM8L3NwYW4+JHtjfWB9Y29uc3QgRHV0PW5ldyBNYXAoW1sibGVmdCIsInN0YXJ0Il0sWyJyaWdodCIsImVuZCJdXSk7ZnVuY3Rpb24gUnV0KGMpe3JldHVybntrZXk6ImJvcmRlcnM6dG9wIixuYW1lKCl7bGV0IGw9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGZx''@;'; put 'put ''KTtyZXR1cm4gTGcodGhpcywidG9wIikmJihsPUVGKGwpKSxsfSxjYWxsYmFjayhsLGEpe2NvbnN0IGQ9TGcodGhpcywidG9wIik7Yy5wcmVwYXJlQm9yZGVyKGEsInRvcCIsZCl9fX1mdW5jdGlvbiBMdXQoYyl7Y29uc3QgbD1jLmhvdC5pc1J0bCgpPyJzdGFydCI6ImVuZCI7cmV0dXJue2tl''@;'; put 'put ''eToiYm9yZGVyczpyaWdodCIsbmFtZSgpe2xldCBhPXRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShwcSk7cmV0dXJuIExnKHRoaXMsbCkmJihhPUVGKGEpKSxhfSxjYWxsYmFjayhhLGQpe2NvbnN0IGg9TGcodGhpcyxsKTtjLnByZXBhcmVCb3JkZXIoZCxsLGgpfX19ZnVuY3Rpb24gT3V0KGMp''@;'; put 'put ''e3JldHVybntrZXk6ImJvcmRlcnM6Ym90dG9tIixuYW1lKCl7bGV0IGw9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGdxKTtyZXR1cm4gTGcodGhpcywiYm90dG9tIikmJihsPUVGKGwpKSxsfSxjYWxsYmFjayhsLGEpe2NvbnN0IGQ9TGcodGhpcywiYm90dG9tIik7Yy5wcmVwYXJlQm9yZGVy''@;'; put 'put ''KGEsImJvdHRvbSIsZCl9fX1mdW5jdGlvbiBQdXQoYyl7Y29uc3QgbD1jLmhvdC5pc1J0bCgpPyJlbmQiOiJzdGFydCI7cmV0dXJue2tleToiYm9yZGVyczpsZWZ0IixuYW1lKCl7bGV0IGE9dGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKG1xKTtyZXR1cm4gTGcodGhpcyxsKSYmKGE9RUYoYSkp''@;'; put 'put ''LGF9LGNhbGxiYWNrKGEsZCl7Y29uc3QgaD1MZyh0aGlzLGwpO2MucHJlcGFyZUJvcmRlcihkLGwsaCl9fX1mdW5jdGlvbiBGdXQoYyl7cmV0dXJue2tleToiYm9yZGVyczpub19ib3JkZXJzIixuYW1lKCl7cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZSh2cSl9LGNhbGxiYWNrKGws''@;'; put 'put ''YSl7Yy5wcmVwYXJlQm9yZGVyKGEsIm5vQm9yZGVycyIpfSxkaXNhYmxlZCgpe3JldHVybiFMZyh0aGlzKX19fWZ1bmN0aW9uIGZnZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5''@;'; put 'put ''cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgVEY9ImN1c3RvbUJvcmRlcnMiO3ZhciBPSj1uZXcgV2Vha1NldDtjbGFzcyBVdXQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24g''@;'; put 'put ''SHV0KGMsbCl7KGZ1bmN0aW9uIE51dChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLE9KKSxmdW5jdGlvbiBWdXQo''@;'; put 'put ''YyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIEJ1dChjKXt2YXIgbD1mdW5jdGlvbiBqdXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lm''@;'; put 'put ''KCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10''@;'; put 'put ''eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJzYXZlZEJvcmRlcnMiLFtdKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1''@;'; put 'put ''cm4gVEZ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gOTB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW1RGXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9u''@;'; put 'put ''cyIsbD0+ZmdlKE9KLHRoaXMsWnV0KS5jYWxsKHRoaXMsbCkpLHRoaXMuYWRkSG9vaygiaW5pdCIsKCk9PmZnZShPSix0aGlzLFd1dCkuY2FsbCh0aGlzKSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfWRpc2FibGVQbHVnaW4oKXt0aGlzLmhpZGVCb3JkZXJzKCksc3VwZXIuZGlzYWJsZVBsdWdp''@;'; put 'put ''bigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5jaGFuZ2VCb3JkZXJTZXR0aW5ncygpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfXNldEJvcmRlcnMobCxhKXtsZXQgZD1bInRvcCIsImJvdHRvbSIsInN0YXJ0IiwiZW5kIl0saD1u''@;'; put 'put ''dWxsO2EmJih0aGlzLmNoZWNrU2V0dGluZ3NDb2hlc2lvbihbYV0pLGQ9T2JqZWN0LmtleXMoYSksaD1SSihhKSk7Y29uc3Qgdj0kRSh3XyhsKSx7Y3JlYXRlQ2VsbENvb3Jkczp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcy5iaW5kKHRoaXMuaG90KSxjcmVhdGVDZWxsUmFuZ2U6dGhpcy5o''@;'; put 'put ''b3QuX2NyZWF0ZUNlbGxSYW5nZS5iaW5kKHRoaXMuaG90KX0pO1luKGwsTT0+e3YoTSkuZm9yQWxsKChELFopPT57WW4oZCxuZT0+e3RoaXMucHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZChELFosaCxmdW5jdGlvbiBJdXQoYyl7dmFyIGw7cmV0dXJuIG51bGwhPT0obD1EdXQuZ2V0KGMp''@;'; put 'put ''KSYmdm9pZCAwIT09bD9sOmN9KG5lKSl9KX0pfSksdGhpcy5ob3Qudmlldy5yZW5kZXIoKX1nZXRCb3JkZXJzKGwpe2lmKCFBcnJheS5pc0FycmF5KGwpKXJldHVybiB0aGlzLnNhdmVkQm9yZGVycztjb25zdCBkPSRFKHdfKGwpLHtjcmVhdGVDZWxsQ29vcmRzOnRoaXMuaG90Ll9jcmVhdGVD''@;'; put 'put ''ZWxsQ29vcmRzLmJpbmQodGhpcy5ob3QpLGNyZWF0ZUNlbGxSYW5nZTp0aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdlLmJpbmQodGhpcy5ob3QpfSksaD1bXTtyZXR1cm4gWW4obCxmPT57ZChmKS5mb3JBbGwoKHYsTSk9PntZbih0aGlzLnNhdmVkQm9yZGVycyxEPT57RC5yb3c9PT12JiZELmNv''@;'; put 'put ''bD09PU0mJmgucHVzaChrVChEKSl9KX0pfSksaH1jbGVhckJvcmRlcnMobCl7bD90aGlzLnNldEJvcmRlcnMobCk6KFluKHRoaXMuc2F2ZWRCb3JkZXJzLGE9Pnt0aGlzLmNsZWFyQm9yZGVyc0Zyb21TZWxlY3Rpb25TZXR0aW5ncyhhLmlkKSx0aGlzLmNsZWFyTnVsbENlbGxSYW5nZSgpLHRo''@;'; put 'put ''aXMuaG90LnJlbW92ZUNlbGxNZXRhKGEucm93LGEuY29sLCJib3JkZXJzIil9KSx0aGlzLnNhdmVkQm9yZGVycy5sZW5ndGg9MCl9aW5zZXJ0Qm9yZGVySW50b1NldHRpbmdzKGwsYSl7dGhpcy5jaGVja1NhdmVkQm9yZGVycyhsKXx8dGhpcy5zYXZlZEJvcmRlcnMucHVzaChsKTtjb25zdCBo''@;'; put 'put ''PXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UodGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5yb3csbC5jb2wpKTt0aGlzLmNoZWNrQ3VzdG9tU2VsZWN0aW9ucyhsLGgsYSl8fHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuYWRkQ3VzdG9tU2VsZWN0aW9uKHtib3JkZXI6bCx2aXN1''@;'; put 'put ''YWxDZWxsUmFuZ2U6aH0pfXByZXBhcmVCb3JkZXJGcm9tQ3VzdG9tQWRkZWQobCxhLGQsaCl7Y29uc3QgZj10aGlzLmhvdC5jb3VudFJvd3MoKSx2PXRoaXMuaG90LmNvdW50Q29scygpO2lmKGw+PWZ8fGE+PXYpcmV0dXJuO2xldCBNPUxKKGwsYSk7ZCYmKE09ZnVuY3Rpb24gVHV0KGMsbCl7''@;'; put 'put ''cmV0dXJuIEV1KGwsImJvcmRlciIpJiZsLmJvcmRlciYmKGMuYm9yZGVyPWwuYm9yZGVyKSxFdShsLCJ0b3AiKSYmRm8obC50b3ApJiYobC50b3A/KEthKGwudG9wKXx8KGwudG9wPXt3aWR0aDoxLGNvbG9yOiIjMDAwIn0pLGMudG9wPWwudG9wKToobC50b3A9e2hpZGU6ITB9LGMudG9wPWwu''@;'; put 'put ''dG9wKSksRXUobCwiYm90dG9tIikmJkZvKGwuYm90dG9tKSYmKGwuYm90dG9tPyhLYShsLmJvdHRvbSl8fChsLmJvdHRvbT17d2lkdGg6MSxjb2xvcjoiIzAwMCJ9KSxjLmJvdHRvbT1sLmJvdHRvbSk6KGwuYm90dG9tPXtoaWRlOiEwfSxjLmJvdHRvbT1sLmJvdHRvbSkpLEV1KGwsInN0YXJ0''@;'; put 'put ''IikmJkZvKGwuc3RhcnQpJiYobC5zdGFydD8oS2EobC5zdGFydCl8fChsLnN0YXJ0PXt3aWR0aDoxLGNvbG9yOiIjMDAwIn0pLGMuc3RhcnQ9bC5zdGFydCk6KGwuc3RhcnQ9e2hpZGU6ITB9LGMuc3RhcnQ9bC5zdGFydCkpLEV1KGwsImVuZCIpJiZGbyhsLmVuZCkmJihsLmVuZD8oS2EobC5l''@;'; put 'put ''bmQpfHwobC5lbmQ9e3dpZHRoOjEsY29sb3I6IiMwMDAifSksYy5lbmQ9bC5lbmQpOihsLmVuZD17aGlkZTohMH0sYy5lbmQ9bC5lbmQpKSxjfShNLGQpLFluKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucyxEPT57aWYoTS5pZD09PUQuc2V0dGluZ3MuaWQp''@;'; put 'put ''cmV0dXJuIE9iamVjdC5hc3NpZ24oRC5zZXR0aW5ncyxkKSxNLmlkPUQuc2V0dGluZ3MuaWQsTS50b3A9RC5zZXR0aW5ncy50b3AsTS5ib3R0b209RC5zZXR0aW5ncy5ib3R0b20sTS5zdGFydD1ELnNldHRpbmdzLnN0YXJ0LE0uZW5kPUQuc2V0dGluZ3MuZW5kLCExfSkpLHRoaXMuaG90LnNl''@;'; put 'put ''dENlbGxNZXRhKGwsYSwiYm9yZGVycyIsa1QoTSkpLHRoaXMuaW5zZXJ0Qm9yZGVySW50b1NldHRpbmdzKE0saCl9cHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZFJhbmdlKGwsYSl7Y29uc3QgZD1NYXRoLm1pbihsLnRvLnJvdyx0aGlzLmhvdC5jb3VudFJvd3MoKS0xKSxoPU1hdGgubWlu''@;'; put 'put ''KGwudG8uY29sLHRoaXMuaG90LmNvdW50Q29scygpLTEpOyRvKGwuZnJvbS5yb3csZCxmPT57JG8obC5mcm9tLmNvbCxoLHY9Pntjb25zdCBNPUxKKGYsdik7bGV0IEQ9MDtmPT09bC5mcm9tLnJvdyYmRXUoYSwidG9wIikmJihEKz0xLE0udG9wPWEudG9wKSxmPT09bC50by5yb3cmJkV1KGEs''@;'; put 'put ''ImJvdHRvbSIpJiYoRCs9MSxNLmJvdHRvbT1hLmJvdHRvbSksdj09PWwuZnJvbS5jb2wmJkV1KGEsInN0YXJ0IikmJihEKz0xLE0uc3RhcnQ9YS5zdGFydCksdj09PWwudG8uY29sJiZFdShhLCJlbmQiKSYmKEQrPTEsTS5lbmQ9YS5lbmQpLEQ+MCYmKHRoaXMuaG90LnNldENlbGxNZXRhKGYs''@;'; put 'put ''diwiYm9yZGVycyIsa1QoTSkpLHRoaXMuaW5zZXJ0Qm9yZGVySW50b1NldHRpbmdzKE0pKX0pfSl9cmVtb3ZlQWxsQm9yZGVycyhsLGEpe2NvbnN0IGQ9aGdlKGwsYSk7dGhpcy5zcGxpY2VCb3JkZXIoZCksdGhpcy5jbGVhckJvcmRlcnNGcm9tU2VsZWN0aW9uU2V0dGluZ3MoZCksdGhpcy5j''@;'; put 'put ''bGVhck51bGxDZWxsUmFuZ2UoKSx0aGlzLmhvdC5yZW1vdmVDZWxsTWV0YShsLGEsImJvcmRlcnMiKX1zZXRCb3JkZXIobCxhLGQsaCl7bGV0IGY9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEobCxhKS5ib3JkZXJzO2Y9ZiYmdm9pZCAwIT09Zi5ib3JkZXI/UkooZik6TEoobCxhKSxoPyhmW2RdPXto''@;'; put 'put ''aWRlOiEwfSw0PT09dGhpcy5jb3VudEhpZGUoZik/dGhpcy5yZW1vdmVBbGxCb3JkZXJzKGwsYSk6KHRoaXMuY2hlY2tDdXN0b21TZWxlY3Rpb25zRnJvbUNvbnRleHRNZW51KGYsZCxoKXx8dGhpcy5pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MoZiksdGhpcy5ob3Quc2V0Q2VsbE1ldGEobCxh''@;'; put 'put ''LCJib3JkZXJzIixrVChmKSkpKTooZltkXT17d2lkdGg6MSxjb2xvcjoiIzAwMCJ9LHRoaXMuY2hlY2tDdXN0b21TZWxlY3Rpb25zRnJvbUNvbnRleHRNZW51KGYsZCxoKXx8dGhpcy5pbnNlcnRCb3JkZXJJbnRvU2V0dGluZ3MoZiksdGhpcy5ob3Quc2V0Q2VsbE1ldGEobCxhLCJib3JkZXJz''@;'; put 'put ''IixrVChmKSkpfXByZXBhcmVCb3JkZXIobCxhLGQpe1luKGwsaD0+e2xldHtzdGFydDpmLGVuZDp2fT1oO2lmKGYucm93PT09di5yb3cmJmYuY29sPT09di5jb2wpIm5vQm9yZGVycyI9PT1hP3RoaXMucmVtb3ZlQWxsQm9yZGVycyhmLnJvdyxmLmNvbCk6dGhpcy5zZXRCb3JkZXIoZi5yb3cs''@;'; put 'put ''Zi5jb2wsYSxkKTtlbHNlIHN3aXRjaChhKXtjYXNlIm5vQm9yZGVycyI6JG8oZi5jb2wsdi5jb2wsTT0+eyRvKGYucm93LHYucm93LEQ9Pnt0aGlzLnJlbW92ZUFsbEJvcmRlcnMoRCxNKX0pfSk7YnJlYWs7Y2FzZSJ0b3AiOiRvKGYuY29sLHYuY29sLE09Pnt0aGlzLnNldEJvcmRlcihmLnJv''@;'; put 'put ''dyxNLGEsZCl9KTticmVhaztjYXNlImJvdHRvbSI6JG8oZi5jb2wsdi5jb2wsTT0+e3RoaXMuc2V0Qm9yZGVyKHYucm93LE0sYSxkKX0pO2JyZWFrO2Nhc2Uic3RhcnQiOiRvKGYucm93LHYucm93LE09Pnt0aGlzLnNldEJvcmRlcihNLGYuY29sLGEsZCl9KTticmVhaztjYXNlImVuZCI6JG8o''@;'; put 'put ''Zi5yb3csdi5yb3csTT0+e3RoaXMuc2V0Qm9yZGVyKE0sdi5jb2wsYSxkKX0pfX0pfWNyZWF0ZUN1c3RvbUJvcmRlcnMobCl7WW4obCxhPT57Y29uc3QgZD1SSihhKTthLnJhbmdlP3RoaXMucHJlcGFyZUJvcmRlckZyb21DdXN0b21BZGRlZFJhbmdlKGEucmFuZ2UsZCk6dGhpcy5wcmVwYXJl''@;'; put 'put ''Qm9yZGVyRnJvbUN1c3RvbUFkZGVkKGEucm93LGEuY29sLGQpfSl9Y291bnRIaWRlKGwpe2NvbnN0e3RvcDphLGJvdHRvbTpkLHN0YXJ0OmgsZW5kOmZ9PWw7cmV0dXJuIHF1KFthLGQsaCxmXSwoTSxEKT0+e2xldCBaPU07cmV0dXJuIEQmJkQuaGlkZSYmKForPTEpLFp9LDApfWNsZWFyQm9y''@;'; put 'put ''ZGVyc0Zyb21TZWxlY3Rpb25TZXR0aW5ncyhsKXtjb25zdCBhPXlzKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucyxkPT5kLnNldHRpbmdzLmlkKS5pbmRleE9mKGwpO2E+LTEmJnRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9u''@;'; put 'put ''c1thXS5jbGVhcigpfWNsZWFyTnVsbENlbGxSYW5nZSgpe1luKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucywobCxhKT0+e2lmKG51bGw9PT1sLmNlbGxSYW5nZSlyZXR1cm4gdGhpcy5ob3Quc2VsZWN0aW9uLmhpZ2hsaWdodC5jdXN0b21TZWxlY3Rpb25z''@;'; put 'put ''W2FdLmRlc3Ryb3koKSx0aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmN1c3RvbVNlbGVjdGlvbnMuc3BsaWNlKGEsMSksITF9KX1oaWRlQm9yZGVycygpe1luKHRoaXMuc2F2ZWRCb3JkZXJzLGw9Pnt0aGlzLmNsZWFyQm9yZGVyc0Zyb21TZWxlY3Rpb25TZXR0aW5ncyhsLmlkKSx0aGlz''@;'; put 'put ''LmNsZWFyTnVsbENlbGxSYW5nZSgpfSl9c3BsaWNlQm9yZGVyKGwpe2NvbnN0IGE9eXModGhpcy5zYXZlZEJvcmRlcnMsZD0+ZC5pZCkuaW5kZXhPZihsKTthPi0xJiZ0aGlzLnNhdmVkQm9yZGVycy5zcGxpY2UoYSwxKX1jaGVja1NhdmVkQm9yZGVycyhsKXtsZXQgYT0hMTtyZXR1cm4gND09''@;'; put 'put ''PXRoaXMuY291bnRIaWRlKGwpPyh0aGlzLnNwbGljZUJvcmRlcihsLmlkKSxhPSEwKTpZbih0aGlzLnNhdmVkQm9yZGVycywoaCxmKT0+e2lmKGwuaWQ9PT1oLmlkKXJldHVybiB0aGlzLnNhdmVkQm9yZGVyc1tmXT1sLGE9ITAsITF9KSxhfWNoZWNrQ3VzdG9tU2VsZWN0aW9uc0Zyb21Db250''@;'; put 'put ''ZXh0TWVudShsLGEsZCl7bGV0IGg9ITE7cmV0dXJuIFluKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucyxmPT57aWYobC5pZD09PWYuc2V0dGluZ3MuaWQpcmV0dXJuIFluKHRoaXMuaG90LnZpZXcuX3d0LnNlbGVjdGlvbk1hbmFnZXIuZ2V0Qm9yZGVySW5z''@;'; put 'put ''dGFuY2VzKGYpLE09PntNLnRvZ2dsZUhpZGRlbkNsYXNzKGEsZCl9KSxoPSEwLCExfSksaH1jaGVja0N1c3RvbVNlbGVjdGlvbnMobCxhLGQpe2NvbnN0IGg9dGhpcy5jb3VudEhpZGUobCk7bGV0IGY9ITE7cmV0dXJuIDQ9PT1oPyh0aGlzLnJlbW92ZUFsbEJvcmRlcnMobC5yb3csbC5jb2wp''@;'; put 'put ''LGY9ITApOlluKHRoaXMuaG90LnNlbGVjdGlvbi5oaWdobGlnaHQuY3VzdG9tU2VsZWN0aW9ucyx2PT57aWYobC5pZD09PXYuc2V0dGluZ3MuaWQpcmV0dXJuIHYudmlzdWFsQ2VsbFJhbmdlPWEsdi5jb21taXQoKSxkJiZZbih0aGlzLmhvdC52aWV3Ll93dC5zZWxlY3Rpb25NYW5hZ2VyLmdl''@;'; put 'put ''dEJvcmRlckluc3RhbmNlcyh2KSxEPT57RC5jaGFuZ2VCb3JkZXJTdHlsZShkLGwpfSksZj0hMCwhMX0pLGZ9Y2hhbmdlQm9yZGVyU2V0dGluZ3MoKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbVEZdO2lmKEFycmF5LmlzQXJyYXkobCkpe2NvbnN0IGE9bTEobCk7dGhpcy5jaGVj''@;'; put 'put ''a1NldHRpbmdzQ29oZXNpb24oYSksYS5sZW5ndGh8fCh0aGlzLnNhdmVkQm9yZGVycz1hKSx0aGlzLmNyZWF0ZUN1c3RvbUJvcmRlcnMoYSl9ZWxzZSB2b2lkIDAhPT1sJiZ0aGlzLmNyZWF0ZUN1c3RvbUJvcmRlcnModGhpcy5zYXZlZEJvcmRlcnMpfWNoZWNrU2V0dGluZ3NDb2hlc2lvbihs''@;'; put 'put ''KXtjb25zdCBhPWZ1bmN0aW9uIEF1dChjKXtyZXR1cm4gYy5zb21lKGw9PkZvKGwubGVmdCl8fEZvKGwucmlnaHQpKX0obCksZD1mdW5jdGlvbiBrdXQoYyl7cmV0dXJuIGMuc29tZShsPT5GbyhsLnN0YXJ0KXx8Rm8obC5lbmQpKX0obCk7aWYoYSYmZCl0aHJvdyBuZXcgRXJyb3IoJ1RoZSAi''@;'; put 'put ''bGVmdCIvInJpZ2h0IiBhbmQgInN0YXJ0Ii8iZW5kIiBvcHRpb25zIHNob3VsZCBub3QgYmUgdXNlZCB0b2dldGhlci4gUGxlYXNlIHVzZSBvbmx5IHRoZSBvcHRpb24gInN0YXJ0Ii8iZW5kIi4nKTtpZih0aGlzLmhvdC5pc1J0bCgpJiZhKXRocm93IG5ldyBFcnJvcignVGhlICJsZWZ0Ii8i''@;'; put 'put ''cmlnaHQiIHByb3BlcnRpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIFJUTC4gUGxlYXNlIHVzZSBvcHRpb24gInN0YXJ0Ii8iZW5kIi4nKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBadXQoYyl7dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtURl0mJmMuaXRlbXMucHVzaCh7''@;'; put 'put ''bmFtZToiLS0tLS0tLS0tIn0se2tleToiYm9yZGVycyIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoaHEpfSxkaXNhYmxlZCgpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3JldHVybiEobCYmIWwuaXNTaW5nbGVIZWFkZXIoKSl8fHRoaXMuc2Vs''@;'; put 'put ''ZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfSxzdWJtZW51OntpdGVtczpbUnV0KHRoaXMpLEx1dCh0aGlzKSxPdXQodGhpcyksUHV0KHRoaXMpLEZ1dCh0aGlzKV19fSl9ZnVuY3Rpb24gV3V0KCl7dGhpcy5jaGFuZ2VCb3JkZXJTZXR0aW5ncygpfWZ1bmN0aW9uIFBKKGMsbCxhKXtyZXR1''@;'; put 'put ''cm4obD1mdW5jdGlvbiAkdXQoYyl7dmFyIGw9ZnVuY3Rpb24gS3V0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9''@;'; put 'put ''dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDps''@;'; put 'put ''KyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBwZ2UoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVy''@;'; put 'put ''biBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IGdnZT0iZHJhZ1RvU2Nyb2xsIjt2YXIgRko9bmV3IFdlYWtTZXQ7Y2xhc3MgWHV0IGV4dGVuZHMgRnN7Y29uc3Ry''@;'; put 'put ''dWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIFl1dChjLGwpeyhmdW5jdGlvbiBHdXQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSko''@;'; put 'put ''YyxsKSxsLmFkZChjKX0odGhpcyxGSiksUEoodGhpcywiYm91bmRhcmllcyIsbnVsbCksUEoodGhpcywiY2FsbGJhY2siLG51bGwpLFBKKHRoaXMsImxpc3RlbmluZyIsITEpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBnZ2V9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXty''@;'; put 'put ''ZXR1cm4gMTAwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtnZ2VdfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxNb3VzZURvd24iLGw9PnBnZShGSix0aGlzLG1nZSkuY2FsbCh0aGlzLGwpKSx0aGlzLmFk''@;'; put 'put ''ZEhvb2soImFmdGVyT25DZWxsQ29ybmVyTW91c2VEb3duIixsPT5wZ2UoRkosdGhpcyxtZ2UpLmNhbGwodGhpcyxsKSksdGhpcy5yZWdpc3RlckV2ZW50cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdp''@;'; put 'put ''bigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0aGlzLnVucmVnaXN0ZXJFdmVudHMoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9c2V0Qm91bmRhcmllcygpe3RoaXMuYm91bmRhcmllcz1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1''@;'; put 'put ''bWVudHNbMF06e2xlZnQ6MCxyaWdodDp0aGlzLmhvdC5yb290V2luZG93LmlubmVyV2lkdGgsdG9wOjAsYm90dG9tOnRoaXMuaG90LnJvb3RXaW5kb3cuaW5uZXJIZWlnaHR9fXNldENhbGxiYWNrKGwpe3RoaXMuY2FsbGJhY2s9bH1jaGVjayhsLGEpe2xldCBkPTAsaD0wO2E8dGhpcy5ib3Vu''@;'; put 'put ''ZGFyaWVzLnRvcD9oPWEtdGhpcy5ib3VuZGFyaWVzLnRvcDphPnRoaXMuYm91bmRhcmllcy5ib3R0b20mJihoPWEtdGhpcy5ib3VuZGFyaWVzLmJvdHRvbSksbDx0aGlzLmJvdW5kYXJpZXMubGVmdD9kPWwtdGhpcy5ib3VuZGFyaWVzLmxlZnQ6bD50aGlzLmJvdW5kYXJpZXMucmlnaHQmJihk''@;'; put 'put ''PWwtdGhpcy5ib3VuZGFyaWVzLnJpZ2h0KSx0aGlzLmNhbGxiYWNrKGQsaCl9bGlzdGVuKCl7dGhpcy5saXN0ZW5pbmc9ITB9dW5saXN0ZW4oKXt0aGlzLmxpc3RlbmluZz0hMX1pc0xpc3RlbmluZygpe3JldHVybiB0aGlzLmxpc3RlbmluZ31yZWdpc3RlckV2ZW50cygpe2NvbnN0e3Jvb3RX''@;'; put 'put ''aW5kb3c6bH09dGhpcy5ob3Q7bGV0IGE9bDtmb3IoO2E7KXRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYS5kb2N1bWVudCwiY29udGV4dG1lbnUiLCgpPT50aGlzLnVubGlzdGVuKCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYS5kb2N1bWVudCwibW91''@;'; put 'put ''c2V1cCIsKCk9PnRoaXMudW5saXN0ZW4oKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLmRvY3VtZW50LCJtb3VzZW1vdmUiLGQ9PnRoaXMub25Nb3VzZU1vdmUoZCkpLGE9RjcoYSl9dW5yZWdpc3RlckV2ZW50cygpe3RoaXMuZXZlbnRNYW5hZ2VyLmNsZWFyKCl9b25N''@;'; put 'put ''b3VzZU1vdmUobCl7dGhpcy5pc0xpc3RlbmluZygpJiZ0aGlzLmNoZWNrKGwuY2xpZW50WCxsLmNsaWVudFkpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIG1nZShjKXtpZihQbShjKSlyZXR1cm47Y29uc3QgbD10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnRvcE92''@;'; put 'put ''ZXJsYXkubWFpblRhYmxlU2Nyb2xsYWJsZUVsZW1lbnQ7dGhpcy5zZXRCb3VuZGFyaWVzKGwhPT10aGlzLmhvdC5yb290V2luZG93P2wuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk6dm9pZCAwKSx0aGlzLnNldENhbGxiYWNrKChhLGQpPT57dmFyIGgsZjtjb25zdCB2PW51bGwhPT0oaD1sLnNj''@;'; put 'put ''cm9sbExlZnQpJiZ2b2lkIDAhPT1oP2g6bC5zY3JvbGxYLE09bnVsbCE9PShmPWwuc2Nyb2xsVG9wKSYmdm9pZCAwIT09Zj9mOmwuc2Nyb2xsWTtsLnNjcm9sbCh2KzUwKk1hdGguc2lnbihhKSxNKzIwKk1hdGguc2lnbihkKSl9KSx0aGlzLmxpc3RlbigpfWZ1bmN0aW9uIHZnZShjLGwpe2lm''@;'; put 'put ''KGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gSEooYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGUwdChjKXt2YXIgbD1mdW5jdGlvbiB0MHQoYyxsKXtp''@;'; put 'put ''Zigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJp''@;'; put 'put ''bWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6''@;'; put 'put ''YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIGJnZShjLGwsYSl7cmV0dXJuIGMuc2V0KFUyKGMsbCksYSksYX1mdW5jdGlvbiBVMihjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJu''@;'; put 'put ''IGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9QW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnMiKSxBby5nZXRTaW5n''@;'; put 'put ''bGV0b24oKS5yZWdpc3RlcigiYmVmb3JlRHJvcGRvd25NZW51U2hvdyIpLEFvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckRyb3Bkb3duTWVudVNob3ciKSxBby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJEcm9wZG93bk1lbnVIaWRlIiksQW8uZ2V0U2luZ2xldG9uKCku''@;'; put 'put ''cmVnaXN0ZXIoImFmdGVyRHJvcGRvd25NZW51RXhlY3V0ZSIpO2NvbnN0IEFGPSJkcm9wZG93bk1lbnUiLERUPSJjaGFuZ2VUeXBlIixOSj1BRjt2YXIga0Y9bmV3IFdlYWtNYXAsZDM9bmV3IFdlYWtTZXQ7Y2xhc3MgREYgZXh0ZW5kcyBGc3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1''@;'; put 'put ''cm4gQUZ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjMwfXN0YXRpYyBnZXQgUExVR0lOX0RFUFMoKXtyZXR1cm5bInBsdWdpbjpBdXRvQ29sdW1uU2l6ZSJdfXN0YXRpYyBnZXQgREVGQVVMVF9JVEVNUygpe3JldHVybltnVCxtVCxpcyxiVCxpcyxkRixpcyx2VCxpcyx6''@;'; put 'put ''Ml19Y29uc3RydWN0b3IobCl7c3VwZXIobCksZnVuY3Rpb24gSnV0KGMsbCl7dmdlKGMsbCksbC5hZGQoYyl9KHRoaXMsZDMpLEhKKHRoaXMsImNvbW1hbmRFeGVjdXRvciIsbmV3IFk0ZSh0aGlzLmhvdCkpLEhKKHRoaXMsIml0ZW1zRmFjdG9yeSIsbnVsbCksSEoodGhpcywibWVudSIsbnVs''@;'; put 'put ''bCksZnVuY3Rpb24gUXV0KGMsbCxhKXt2Z2UoYyxsKSxsLnNldChjLGEpfSh0aGlzLGtGLCExKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckdldENvbEhlYWRlciIsKGEsZCk9PlUyKGQzLHRoaXMsbzB0KS5jYWxsKHRoaXMsYSxkKSl9aXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuaG90LmdldFNl''@;'; put 'put ''dHRpbmdzKClbQUZdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVkKXJldHVybjt0aGlzLml0ZW1zRmFjdG9yeT1uZXcgcTRlKHRoaXMuaG90LERGLkRFRkFVTFRfSVRFTVMpLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIixmdW5jdGlvbigpe2Zv''@;'; put 'put ''cih2YXIgaD1hcmd1bWVudHMubGVuZ3RoLGY9bmV3IEFycmF5KGgpLHY9MDt2PGg7disrKWZbdl09YXJndW1lbnRzW3ZdO3JldHVybiBVMihkMyxsLGQwdCkuY2FsbChsLC4uLmYpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVWaWV3cG9ydFNjcm9sbEhvcml6b250YWxseSIsZnVuY3Rpb24oKXtm''@;'; put 'put ''b3IodmFyIGg9YXJndW1lbnRzLmxlbmd0aCxmPW5ldyBBcnJheShoKSx2PTA7djxoO3YrKylmW3ZdPWFyZ3VtZW50c1t2XTtyZXR1cm4gVTIoZDMsbCx1MHQpLmNhbGwobCwuLi5mKX0pO2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtBRl0sZD17aXRlbXM6dGhpcy5pdGVtc0ZhY3Rv''@;'; put 'put ''cnkuZ2V0SXRlbXMoYSl9O3RoaXMucmVnaXN0ZXJFdmVudHMoKSwiZnVuY3Rpb24iPT10eXBlb2YgYS5jYWxsYmFjayYmdGhpcy5jb21tYW5kRXhlY3V0b3Iuc2V0Q29tbW9uQ2FsbGJhY2soYS5jYWxsYmFjayksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmVuYWJsZVBsdWdpbigp''@;'; put 'put ''LHRoaXMuY2FsbE9uUGx1Z2luc1JlYWR5KCgpPT57dGhpcy5ob3QucnVuSG9va3MoImFmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnMiLGQpLHRoaXMuaXRlbXNGYWN0b3J5LnNldFByZWRlZmluZWRJdGVtcyhkLml0ZW1zKTtjb25zdCBoPXRoaXMuaXRlbXNGYWN0b3J5LmdldEl0ZW1z''@;'; put 'put ''KGEpO3RoaXMubWVudSYmdGhpcy5tZW51LmRlc3Ryb3koKSx0aGlzLm1lbnU9bmV3IFdfKHRoaXMuaG90LHtjbGFzc05hbWU6Imh0RHJvcGRvd25NZW51IixrZWVwSW5WaWV3cG9ydDohMCxjb250YWluZXI6YS51aUNvbnRhaW5lcnx8dGhpcy5ob3Qucm9vdERvY3VtZW50LmJvZHl9KSx0aGlz''@;'; put 'put ''LmhvdC5ydW5Ib29rcygiYmVmb3JlRHJvcGRvd25NZW51U2V0SXRlbXMiLGgpLHRoaXMubWVudS5zZXRNZW51SXRlbXMoaCksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYmVmb3JlT3BlbiIsKCk9PlUyKGQzLHRoaXMsYTB0KS5jYWxsKHRoaXMpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJh''@;'; put 'put ''ZnRlck9wZW4iLCgpPT5VMihkMyx0aGlzLHMwdCkuY2FsbCh0aGlzKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYWZ0ZXJTdWJtZW51T3BlbiIsZj0+VTIoZDMsdGhpcyxsMHQpLmNhbGwodGhpcyxmKSksdGhpcy5tZW51LmFkZExvY2FsSG9vaygiYWZ0ZXJDbG9zZSIsKCk9PlUyKGQzLHRo''@;'; put 'put ''aXMsYzB0KS5jYWxsKHRoaXMpKSx0aGlzLm1lbnUuYWRkTG9jYWxIb29rKCJleGVjdXRlQ29tbWFuZCIsZnVuY3Rpb24oKXtmb3IodmFyIGY9YXJndW1lbnRzLmxlbmd0aCx2PW5ldyBBcnJheShmKSxNPTA7TTxmO00rKyl2W01dPWFyZ3VtZW50c1tNXTtyZXR1cm4gbC5leGVjdXRlQ29tbWFu''@;'; put 'put ''ZC5jYWxsKGwsLi4udil9KSxZbihoLGY9PnRoaXMuY29tbWFuZEV4ZWN1dG9yLnJlZ2lzdGVyQ29tbWFuZChmLmtleSxmKSl9KX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4o''@;'; put 'put ''KXt0aGlzLmNsb3NlKCksdGhpcy5tZW51JiZ0aGlzLm1lbnUuZGVzdHJveSgpLHRoaXMudW5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmRpc2FibGVQbHVnaW4oKX1yZWdpc3RlclNob3J0Y3V0cygpe2NvbnN0IGE9KCk9Pntjb25zdHtoaWdobGlnaHQ6ZH09dGhpcy5ob3QuZ2V0U2VsZWN0''@;'; put 'put ''ZWRSYW5nZUxhc3QoKTtpZigoZC5pc0hlYWRlcigpJiYtMT09PWQucm93fHxkLmlzQ2VsbCgpKSYmZC5jb2w+PTApe3RoaXMuaG90LnNlbGVjdENvbHVtbnMoZC5jb2wsZC5jb2wsLTEpO2NvbnN0e2Zyb206aH09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxmPW9GKHRoaXMubWVu''@;'; put 'put ''dS5jb250YWluZXIsdGhpcy5ob3Qucm9vdERvY3VtZW50KSx2PXRoaXMuaG90LmdldENlbGwoLTEsaC5jb2wsITApLnF1ZXJ5U2VsZWN0b3IoYC4ke0RUfWApLE09di5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt0aGlzLm9wZW4oe2xlZnQ6TS5sZWZ0K2YubGVmdCx0b3A6TS50b3Ardi5vZmZz''@;'; put 'put ''ZXRIZWlnaHQrZi50b3B9LHtsZWZ0Ok0ud2lkdGgscmlnaHQ6MCxhYm92ZTowLGJlbG93OjN9KSx0aGlzLm1lbnUuZ2V0TmF2aWdhdG9yKCkudG9GaXJzdEl0ZW0oKX19O3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5hZGRTaG9ydGN1dHMoW3trZXlz''@;'; put 'put ''OltbIlNoaWZ0IiwiQWx0IiwiQXJyb3dEb3duIl0sWyJDb250cm9sL01ldGEiLCJFbnRlciJdXSxjYWxsYmFjazphLHJ1bk9ubHlJZjooKT0+e3ZhciBkO2NvbnN0IGg9bnVsbD09PShkPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLmhpZ2hs''@;'; put 'put ''aWdodDtyZXR1cm4gaCYmdGhpcy5ob3Quc2VsZWN0aW9uLmlzQ2VsbFZpc2libGUoaCkmJmguaXNIZWFkZXIoKSYmIXRoaXMubWVudS5pc09wZW5lZCgpfSxjYXB0dXJlQ3RybDohMCxncm91cDpOSn0se2tleXM6W1siU2hpZnQiLCJBbHQiLCJBcnJvd0Rvd24iXV0sY2FsbGJhY2s6YSxydW5P''@;'; put 'put ''bmx5SWY6KCk9Pnt2YXIgZDtjb25zdCBoPW51bGw9PT0oZD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09ZD92b2lkIDA6ZC5oaWdobGlnaHQ7cmV0dXJuIGgmJnRoaXMuaG90LnNlbGVjdGlvbi5pc0NlbGxWaXNpYmxlKGgpJiZoLmlzQ2VsbCgpJiYhdGhpcy5t''@;'; put 'put ''ZW51LmlzT3BlbmVkKCl9LGdyb3VwOk5KfV0pfXVucmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikucmVtb3ZlU2hvcnRjdXRzQnlHcm91cChOSil9cmVnaXN0ZXJFdmVudHMoKXt0aGlzLmV2ZW50TWFuYWdlci5hZGRF''@;'; put 'put ''dmVudExpc3RlbmVyKHRoaXMuaG90LnJvb3RFbGVtZW50LCJjbGljayIsbD0+VTIoZDMsdGhpcyxpMHQpLmNhbGwodGhpcyxsKSl9b3BlbihsKXt2YXIgYTtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e2Fib3ZlOjAsYmVsb3c6''@;'; put 'put ''MCxsZWZ0OjAscmlnaHQ6MH07bnVsbCE9PShhPXRoaXMubWVudSkmJnZvaWQgMCE9PWEmJmEuaXNPcGVuZWQoKXx8KHRoaXMubWVudS5vcGVuKCkscWEoZCwoaCxmKT0+e3RoaXMubWVudS5zZXRPZmZzZXQoZixoKX0pLHRoaXMubWVudS5zZXRQb3NpdGlvbihsKSl9Y2xvc2UoKXt2YXIgbDtu''@;'; put 'put ''dWxsPT09KGw9dGhpcy5tZW51KXx8dm9pZCAwPT09bHx8bC5jbG9zZSgpfWV4ZWN1dGVDb21tYW5kKGwpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGE+MT9hLTE6MCksaD0xO2g8YTtoKyspZFtoLTFdPWFyZ3VtZW50c1toXTt0aGlzLmNvbW1hbmRFeGVjdXRvci5l''@;'; put 'put ''eGVjdXRlKGwsLi4uZCl9c2V0TGlzdGVuaW5nKCl7bGV0IGw9IShhcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSl8fGFyZ3VtZW50c1swXTt0aGlzLm1lbnUuaXNPcGVuZWQoKSYmKGw/dGhpcy5tZW51LmhvdE1lbnUubGlzdGVuKCk6dGhpcy5tZW51LmhvdE1lbnUu''@;'; put 'put ''dW5saXN0ZW4oKSl9ZGVzdHJveSgpe3RoaXMuY2xvc2UoKSx0aGlzLm1lbnUmJnRoaXMubWVudS5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiB5Z2UoYyl7Yy5nZXRLZXlib2FyZFNob3J0Y3V0c0N0cmwoKS5hZGRDdXN0b21TaG9ydGN1dHMoW3trZXlzOltbIkNvbnRyb2wv''@;'; put 'put ''TWV0YSIsIkEiXV0sY2FsbGJhY2s6KCk9PiExfV0pfWZ1bmN0aW9uIGkwdChjKXtpZihwYShjLnRhcmdldCxEVCkpe2NvbnN0IGw9b0YodGhpcy5tZW51LmNvbnRhaW5lcix0aGlzLmhvdC5yb290RG9jdW1lbnQpLGE9Yy50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Yy5zdG9wUHJv''@;'; put 'put ''cGFnYXRpb24oKSxiZ2Uoa0YsdGhpcywhMSksdGhpcy5vcGVuKHtsZWZ0OmEubGVmdCtsLmxlZnQsdG9wOmEudG9wK2MudGFyZ2V0Lm9mZnNldEhlaWdodCtsLnRvcH0se2xlZnQ6YS53aWR0aCxyaWdodDowLGFib3ZlOjAsYmVsb3c6M30pfX1mdW5jdGlvbiBvMHQoYyxsKXtjb25zdCBhPWwu''@;'; put 'put ''cGFyZW50Tm9kZTtpZighYSlyZXR1cm47Y29uc3QgZD1hLnBhcmVudE5vZGUuY2hpbGROb2RlcyxoPUFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoZCxhKTtpZihjPDB8fGghPT1kLmxlbmd0aC0xKXJldHVybjtjb25zdCBmPWwucXVlcnlTZWxlY3RvcihgLiR7RFR9YCk7aWYodGhpcy5l''@;'; put 'put ''bmFibGVkJiZmKXJldHVybjtpZighdGhpcy5lbmFibGVkKXJldHVybiB2b2lkKGYmJmYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChmKSk7Y29uc3Qgdj10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7di5jbGFzc05hbWU9RFQsdi50eXBlPSJidXR0b24iLHYu''@;'; put 'put ''dGFiSW5kZXg9LTEsdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmKHZhKHYsW2ttKCkseE8oIiAiKV0pLHZhKGwsW2MyZSgibWVudSIpXSkpLHYub25jbGljaz1mdW5jdGlvbigpe3JldHVybiExfSxsLmZpcnN0Q2hpbGQuaW5zZXJ0QmVmb3JlKHYsbC5maXJzdENoaWxkLmZpcnN0''@;'; put 'put ''Q2hpbGQpfWZ1bmN0aW9uIGEwdCgpe3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVEcm9wZG93bk1lbnVTaG93Iix0aGlzKX1mdW5jdGlvbiBzMHQoKXt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJEcm9wZG93bk1lbnVTaG93Iix0aGlzKSxVMihkMyx0aGlzLHlnZSkuY2FsbCh0aGlzLHRoaXMu''@;'; put 'put ''bWVudSl9ZnVuY3Rpb24gbDB0KGMpe1UyKGQzLHRoaXMseWdlKS5jYWxsKHRoaXMsYyl9ZnVuY3Rpb24gYzB0KCl7dGhpcy5ob3QubGlzdGVuKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyRHJvcGRvd25NZW51SGlkZSIsdGhpcyl9ZnVuY3Rpb24gdTB0KGMpe3JldHVybiBmdW5jdGlvbiBu''@;'; put 'put ''MHQoYyxsKXtyZXR1cm4gYy5nZXQoVTIoYyxsKSl9KGtGLHRoaXMpP251bGw6Y31mdW5jdGlvbiBkMHQoYyl7cGEoYy50YXJnZXQsRFQpJiZiZ2Uoa0YsdGhpcywhMCl9ZnVuY3Rpb24gX2dlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBoMHQoYyl7dmFyIGw9ZnVuY3Rpb24gZjB0KGMsbCl7''@;'; put 'put ''aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1By''@;'; put 'put ''aW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVl''@;'; put 'put ''OmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31ERi5TRVBBUkFUT1I9e25hbWU6aXN9O2NvbnN0IGcwdD1jbGFzcyBwMHR7Y29uc3RydWN0b3IobCl7X2dlKHRoaXMsImhvdCIsdm9pZCAwKSxfZ2UodGhpcywib3B0aW9ucyIse30pLHRoaXMu''@;'; put 'put ''aG90PWx9c2V0T3B0aW9ucyhsKXt0aGlzLm9wdGlvbnM9bH1nZXREYXRhKCl7Y29uc3R7c3RhcnRSb3c6bCxzdGFydENvbDphLGVuZFJvdzpkLGVuZENvbDpofT10aGlzLl9nZXREYXRhUmFuZ2UoKSxmPXRoaXMub3B0aW9ucyx2PVtdO3JldHVybiAkbyhsLGQsTT0+e2NvbnN0IEQ9W107IWYu''@;'; put 'put ''ZXhwb3J0SGlkZGVuUm93cyYmdGhpcy5faXNIaWRkZW5Sb3coTSl8fCgkbyhhLGgsWj0+eyFmLmV4cG9ydEhpZGRlbkNvbHVtbnMmJnRoaXMuX2lzSGlkZGVuQ29sdW1uKFopfHxELnB1c2godGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbChNLFopKX0pLHYucHVzaChEKSl9KSx2fWdldFJvd0hlYWRl''@;'; put 'put ''cnMoKXtjb25zdCBsPVtdO2lmKHRoaXMub3B0aW9ucy5yb3dIZWFkZXJzKXtjb25zdHtzdGFydFJvdzphLGVuZFJvdzpkfT10aGlzLl9nZXREYXRhUmFuZ2UoKSxoPXRoaXMuaG90LmdldFJvd0hlYWRlcigpOyRvKGEsZCxmPT57IXRoaXMub3B0aW9ucy5leHBvcnRIaWRkZW5Sb3dzJiZ0aGlz''@;'; put 'put ''Ll9pc0hpZGRlblJvdyhmKXx8bC5wdXNoKGhbZl0pfSl9cmV0dXJuIGx9Z2V0Q29sdW1uSGVhZGVycygpe2NvbnN0IGw9W107aWYodGhpcy5vcHRpb25zLmNvbHVtbkhlYWRlcnMpe2NvbnN0e3N0YXJ0Q29sOmEsZW5kQ29sOmR9PXRoaXMuX2dldERhdGFSYW5nZSgpLGg9dGhpcy5ob3QuZ2V0''@;'; put 'put ''Q29sSGVhZGVyKCk7JG8oYSxkLGY9PnshdGhpcy5vcHRpb25zLmV4cG9ydEhpZGRlbkNvbHVtbnMmJnRoaXMuX2lzSGlkZGVuQ29sdW1uKGYpfHxsLnB1c2goaFtmXSl9KX1yZXR1cm4gbH1fZ2V0RGF0YVJhbmdlKCl7Y29uc3QgbD10aGlzLmhvdC5jb3VudENvbHMoKS0xLGE9dGhpcy5ob3Qu''@;'; put 'put ''Y291bnRSb3dzKCktMTtsZXRbZD0wLGg9MCxmPWEsdj1sXT10aGlzLm9wdGlvbnMucmFuZ2U7cmV0dXJuIGQ9TWF0aC5tYXgoZCwwKSxoPU1hdGgubWF4KGgsMCksZj1NYXRoLm1pbihmLGEpLHY9TWF0aC5taW4odixsKSx7c3RhcnRSb3c6ZCxzdGFydENvbDpoLGVuZFJvdzpmLGVuZENvbDp2''@;'; put 'put ''fX1faXNIaWRkZW5Sb3cobCl7cmV0dXJuIHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmlzSGlkZGVuKHRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCkpfV9pc0hpZGRlbkNvbHVtbihsKXtyZXR1cm4gdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuaXNIaWRkZW4odGhpcy5ob3QudG9QaHlzaWNh''@;'; put 'put ''bENvbHVtbihsKSl9fTtmdW5jdGlvbiB3Z2UoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIG0wdChjKXt2YXIgbD1mdW5jdGlvbiB2MHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIg''@;'; put 'put ''ZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMs''@;'; put 'put ''InN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFZKe3N0YXRpYyBnZXQgREVGQVVM''@;'; put 'put ''VF9PUFRJT05TKCl7cmV0dXJue21pbWVUeXBlOiJ0ZXh0L3BsYWluIixmaWxlRXh0ZW5zaW9uOiJ0eHQiLGZpbGVuYW1lOiJIYW5kc29udGFibGUgW1lZWVldLVtNTV0tW0REXSIsZW5jb2Rpbmc6InV0Zi04Iixib206ITEsY29sdW1uSGVhZGVyczohMSxyb3dIZWFkZXJzOiExLGV4cG9ydEhp''@;'; put 'put ''ZGRlbkNvbHVtbnM6ITEsZXhwb3J0SGlkZGVuUm93czohMSxyYW5nZTpbXX19Y29uc3RydWN0b3IobCxhKXt3Z2UodGhpcywiZGF0YVByb3ZpZGVyIix2b2lkIDApLHdnZSh0aGlzLCJvcHRpb25zIix2b2lkIDApLHRoaXMuZGF0YVByb3ZpZGVyPWwsdGhpcy5vcHRpb25zPXRoaXMuX21lcmdl''@;'; put 'put ''T3B0aW9ucyhhKSx0aGlzLmRhdGFQcm92aWRlci5zZXRPcHRpb25zKHRoaXMub3B0aW9ucyl9X21lcmdlT3B0aW9ucyhsKXtsZXQgYT1KZih0aGlzLmNvbnN0cnVjdG9yLkRFRkFVTFRfT1BUSU9OUyk7Y29uc3QgZD1uZXcgRGF0ZTtyZXR1cm4gYT14dShKZihWSi5ERUZBVUxUX09QVElPTlMp''@;'; put 'put ''LGEpLGE9eHUoYSxsKSxhLmZpbGVuYW1lPXQkKGEuZmlsZW5hbWUse1lZWVk6ZC5nZXRGdWxsWWVhcigpLE1NOmAke2QuZ2V0TW9udGgoKSsxfWAucGFkU3RhcnQoMiwiMCIpLEREOmAke2QuZ2V0RGF0ZSgpfWAucGFkU3RhcnQoMiwiMCIpfSksYX19Y29uc3QgYjB0PVZKLEJKPXtjc3Y6Y2xh''@;'; put 'put ''c3MgQzB0IGV4dGVuZHMgYjB0e3N0YXRpYyBnZXQgREVGQVVMVF9PUFRJT05TKCl7cmV0dXJue21pbWVUeXBlOiJ0ZXh0L2NzdiIsZmlsZUV4dGVuc2lvbjoiY3N2Iixib206ITAsY29sdW1uRGVsaW1pdGVyOiIsIixyb3dEZWxpbWl0ZXI6IlxyXG4ifX1leHBvcnQoKXtjb25zdCBsPXRoaXMu''@;'; put 'put ''b3B0aW9ucyxhPXRoaXMuZGF0YVByb3ZpZGVyLmdldERhdGEoKTtsZXQgZD10aGlzLmRhdGFQcm92aWRlci5nZXRDb2x1bW5IZWFkZXJzKCk7Y29uc3QgaD1kLmxlbmd0aD4wLGY9dGhpcy5kYXRhUHJvdmlkZXIuZ2V0Um93SGVhZGVycygpLHY9Zi5sZW5ndGg+MDtsZXQgTT1sLmJvbT8iXHVm''@;'; put 'put ''ZWZmIjoiIjtyZXR1cm4gaCYmKGQ9eXMoZCxEPT50aGlzLl9lc2NhcGVDZWxsKEQsITApKSx2JiYoTSs9bC5jb2x1bW5EZWxpbWl0ZXIpLE0rPWQuam9pbihsLmNvbHVtbkRlbGltaXRlciksTSs9bC5yb3dEZWxpbWl0ZXIpLFluKGEsKEQsWik9PntaPjAmJihNKz1sLnJvd0RlbGltaXRlciks''@;'; put 'put ''diYmKE0rPXRoaXMuX2VzY2FwZUNlbGwoZltaXSkrbC5jb2x1bW5EZWxpbWl0ZXIpLE0rPUQubWFwKG5lPT50aGlzLl9lc2NhcGVDZWxsKG5lKSkuam9pbihsLmNvbHVtbkRlbGltaXRlcil9KSxNfV9lc2NhcGVDZWxsKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJn''@;'; put 'put ''dW1lbnRzWzFdJiZhcmd1bWVudHNbMV0sZD16YyhsKTtyZXR1cm4iIiE9PWQmJihhfHxkLmluZGV4T2YoIlxyIik+PTB8fGQuaW5kZXhPZignIicpPj0wfHxkLmluZGV4T2YoIlxuIik+PTB8fGQuaW5kZXhPZih0aGlzLm9wdGlvbnMuY29sdW1uRGVsaW1pdGVyKT49MCkmJihkPWQucmVwbGFj''@;'; put 'put ''ZShuZXcgUmVnRXhwKCciJywiZyIpLCciIicpLGQ9YCIke2R9ImApLGR9fX07Y2xhc3MgQTB0IGV4dGVuZHMgRnN7c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuImV4cG9ydEZpbGUifXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDI0MH1pc0VuYWJsZWQoKXtyZXR1''@;'; put 'put ''cm4hMH1leHBvcnRBc1N0cmluZyhsKXtyZXR1cm4gdGhpcy5fY3JlYXRlVHlwZUZvcm1hdHRlcihsLGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSkuZXhwb3J0KCl9ZXhwb3J0QXNCbG9iKGwpe3JldHVybiB0aGlzLl9jcmVhdGVCbG9i''@;'; put 'put ''KHRoaXMuX2NyZWF0ZVR5cGVGb3JtYXR0ZXIobCxhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30pKX1kb3dubG9hZEZpbGUobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFd''@;'; put 'put ''Ont9O2NvbnN0e3Jvb3REb2N1bWVudDpkLHJvb3RXaW5kb3c6aH09dGhpcy5ob3QsZj10aGlzLl9jcmVhdGVUeXBlRm9ybWF0dGVyKGwsYSksdj10aGlzLl9jcmVhdGVCbG9iKGYpLE09aC5VUkx8fGgud2Via2l0VVJMLEQ9ZC5jcmVhdGVFbGVtZW50KCJhIiksWj1gJHtmLm9wdGlvbnMuZmls''@;'; put 'put ''ZW5hbWV9LiR7Zi5vcHRpb25zLmZpbGVFeHRlbnNpb259YDtpZih2b2lkIDAhPT1ELmRvd25sb2FkKXtjb25zdCBuZT1NLmNyZWF0ZU9iamVjdFVSTCh2KTtELnN0eWxlLmRpc3BsYXk9Im5vbmUiLEQuc2V0QXR0cmlidXRlKCJocmVmIixuZSksRC5zZXRBdHRyaWJ1dGUoImRvd25sb2FkIixa''@;'; put 'put ''KSxkLmJvZHkuYXBwZW5kQ2hpbGQoRCksRC5kaXNwYXRjaEV2ZW50KG5ldyBNb3VzZUV2ZW50KCJjbGljayIpKSxkLmJvZHkucmVtb3ZlQ2hpbGQoRCksc2V0VGltZW91dCgoKT0+e00ucmV2b2tlT2JqZWN0VVJMKG5lKX0sMTAwKX1lbHNlIG5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iJiZu''@;'; put 'put ''YXZpZ2F0b3IubXNTYXZlT3JPcGVuQmxvYih2LFopfV9jcmVhdGVUeXBlRm9ybWF0dGVyKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fTtpZighQkpbbF0pdGhyb3cgbmV3IEVycm9yKGBFeHBvcnQgZm9ybWF0IHR5cGUg''@;'; put 'put ''IiR7bH0iIGlzIG5vdCBzdXBwb3J0ZWQuYCk7cmV0dXJuIGZ1bmN0aW9uIHgwdChjLGwsYSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEJKW2NdP25ldyBCSltjXShsLGEpOm51bGx9KGwsbmV3IGcwdCh0aGlzLmhvdCksYSl9X2NyZWF0ZUJsb2IobCl7bGV0IGE9bnVsbDtyZXR1cm4gdHlw''@;'; put 'put ''ZW9mIEJsb2I8InUiJiYoYT1uZXcgQmxvYihbbC5leHBvcnQoKV0se3R5cGU6YCR7bC5vcHRpb25zLm1pbWVUeXBlfTtjaGFyc2V0PSR7bC5vcHRpb25zLmVuY29kaW5nfWB9KSksYX19ZnVuY3Rpb24gWF8oYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGswdChjKXt2YXIgbD1mdW5jdGlvbiBE''@;'; put 'put ''MHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9y''@;'; put 'put ''KCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMs''@;'; put 'put ''bCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIElUe2NvbnN0cnVjdG9yKGwsYSl7bGV0e2lkOmQsc3RhdGVsZXNzOmg9ITB9PWE7WF8odGhpcywiaG90Iix2b2lkIDApLFhfKHRoaXMsImlkIix2b2lkIDApLFhfKHRo''@;'; put 'put ''aXMsImVsZW1lbnRzIixbXSksWF8odGhpcywiaGlkZGVuIiwhMSksWF8odGhpcywic3RhdGVJZCIsIiIpLFhfKHRoaXMsInN0YXRlIix2b2lkIDApLHRoaXMuaG90PWwsdGhpcy5pZD1kLHRoaXMuc3RhdGVJZD1gRmlsdGVycy5jb21wb25lbnQuJHt0aGlzLmlkfWAsdGhpcy5zdGF0ZT1oP251''@;'; put 'put ''bGw6dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhpcy5zdGF0ZUlkLG5ldyBsUCl9Z2V0RWxlbWVudHMoKXtyZXR1cm4gdGhpcy5lbGVtZW50c31yZXNldCgpe1luKHRoaXMuZWxlbWVudHMsbD0+bC5yZXNldCgpKX1oaWRlKCl7dGhpcy5oaWRkZW49ITB9c2hvdygp''@;'; put 'put ''e3RoaXMuaGlkZGVuPSExfWlzSGlkZGVuKCl7cmV0dXJuIG51bGw9PT10aGlzLmhvdHx8dGhpcy5oaWRkZW59cmVzdG9yZVN0YXRlKGwpe3RoaXMuc3RhdGUmJnRoaXMuc2V0U3RhdGUodGhpcy5zdGF0ZS5nZXRWYWx1ZUF0SW5kZXgobCkpfXNldFN0YXRlKCl7dGhyb3cgbmV3IEVycm9yKCJU''@;'; put 'put ''aGUgc3RhdGUgc2V0dGluZyBsb2dpYyBpcyBub3QgaW1wbGVtZW50ZWQiKX1zYXZlU3RhdGUobCl7dGhpcy5zdGF0ZSYmdGhpcy5zdGF0ZS5zZXRWYWx1ZUF0SW5kZXgobCx0aGlzLmdldFN0YXRlKCkpfWdldFN0YXRlKCl7dGhyb3cgbmV3IEVycm9yKCJUaGUgc3RhdGUgZ2F0aGVyaW5nIGxv''@;'; put 'put ''Z2ljIGlzIG5vdCBpbXBsZW1lbnRlZCIpfWRlc3Ryb3koKXt0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMuc3RhdGVJZCksdGhpcy5jbGVhckxvY2FsSG9va3MoKSxZbih0aGlzLmVsZW1lbnRzLGw9PmwuZGVzdHJveSgpKSx0aGlzLnN0YXRlPW51bGwsdGhp''@;'; put 'put ''cy5lbGVtZW50cz1udWxsLHRoaXMuaG90PW51bGx9fXhsKElULF8xKTtjb25zdCBSVD17fTtmdW5jdGlvbiBlNihjLGwpe2lmKCFSVFtjXSl0aHJvdyBFcnJvcihgRmlsdGVyIGNvbmRpdGlvbiAiJHtjfSIgZG9lcyBub3QgZXhpc3QuYCk7Y29uc3R7Y29uZGl0aW9uOmEsZGVzY3JpcHRvcjpk''@;'; put 'put ''fT1SVFtjXTtsZXQgaD1sO3JldHVybiBkLmlucHV0VmFsdWVzRGVjb3JhdG9yJiYoaD1kLmlucHV0VmFsdWVzRGVjb3JhdG9yKGgpKSxmdW5jdGlvbihmKXtyZXR1cm4gYS5hcHBseShmLm1ldGEuaW5zdGFuY2UsW10uY29uY2F0KFtmXSxbaF0pKX19ZnVuY3Rpb24gYjkoYyl7aWYoIVJUW2Nd''@;'; put 'put ''KXRocm93IEVycm9yKGBGaWx0ZXIgY29uZGl0aW9uICIke2N9IiBkb2VzIG5vdCBleGlzdC5gKTtyZXR1cm4gUlRbY10uZGVzY3JpcHRvcn1mdW5jdGlvbiBBdShjLGwsYSl7YS5rZXk9YyxSVFtjXT17Y29uZGl0aW9uOmwsZGVzY3JpcHRvcjphfX1jb25zdCBUMD0ibm9uZSI7QXUoVDAsZnVu''@;'; put 'put ''Y3Rpb24gSTB0KCl7cmV0dXJuITB9LHtuYW1lOmdQLGlucHV0c0NvdW50OjAsc2hvd09wZXJhdG9yczohMX0pO2NvbnN0IExUPSJlbXB0eSI7QXUoTFQsZnVuY3Rpb24gUjB0KGMpe3JldHVybiBVYyhjLnZhbHVlKX0se25hbWU6TXEsaW5wdXRzQ291bnQ6MCxzaG93T3BlcmF0b3JzOiEwfSk7''@;'; put 'put ''Y29uc3QgSUY9Im5vdF9lbXB0eSI7QXUoSUYsZnVuY3Rpb24gTDB0KGMsbCl7cmV0dXJuIWU2KExULGwpKGMpfSx7bmFtZTp4cSxpbnB1dHNDb3VudDowLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBPVD0iZXEiO0F1KE9ULGZ1bmN0aW9uIE8wdChjLGwpe2xldFthXT1sO3JldHVybiB6Yyhj''@;'; put 'put ''LnZhbHVlKS50b0xvY2FsZUxvd2VyQ2FzZShjLm1ldGEubG9jYWxlKT09PXpjKGEpfSx7bmFtZTpFcSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBSRj0ibmVxIjtBdShSRixmdW5jdGlvbiBQMHQoYyxsKXtyZXR1cm4hZTYoT1QsbCkoYyl9LHtuYW1lOlRxLGlucHV0''@;'; put 'put ''c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pLEF1KCJndCIsZnVuY3Rpb24gRjB0KGMsbCl7bGV0W2FdPWwsZD1hO3JldHVybiJudW1lcmljIj09PWMubWV0YS50eXBlJiYoZD1wYXJzZUZsb2F0KGQsMTApKSxjLnZhbHVlPmR9LHtuYW1lOlJxLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9y''@;'; put 'put ''czohMH0pLEF1KCJndGUiLGZ1bmN0aW9uIEgwdChjLGwpe2xldFthXT1sLGQ9YTtyZXR1cm4ibnVtZXJpYyI9PT1jLm1ldGEudHlwZSYmKGQ9cGFyc2VGbG9hdChkLDEwKSksYy52YWx1ZT49ZH0se25hbWU6THEsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSksQXUoImx0IixmdW5j''@;'; put 'put ''dGlvbiBOMHQoYyxsKXtsZXRbYV09bCxkPWE7cmV0dXJuIm51bWVyaWMiPT09Yy5tZXRhLnR5cGUmJihkPXBhcnNlRmxvYXQoZCwxMCkpLGMudmFsdWU8ZH0se25hbWU6T3EsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSksQXUoImx0ZSIsZnVuY3Rpb24gVjB0KGMsbCl7bGV0W2Fd''@;'; put 'put ''PWwsZD1hO3JldHVybiJudW1lcmljIj09PWMubWV0YS50eXBlJiYoZD1wYXJzZUZsb2F0KGQsMTApKSxjLnZhbHVlPD1kfSx7bmFtZTpQcSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBqSj0iZGF0ZV9hZnRlciI7QXUoakosZnVuY3Rpb24gQjB0KGMsbCl7bGV0W2Fd''@;'; put 'put ''PWw7Y29uc3QgZD1MYShjLnZhbHVlLGMubWV0YS5kYXRlRm9ybWF0KSxoPUxhKGEsYy5tZXRhLmRhdGVGb3JtYXQpO3JldHVybiEoIWQuaXNWYWxpZCgpfHwhaC5pc1ZhbGlkKCkpJiZkLmRpZmYoaCk+PTB9LHtuYW1lOk5xLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0''@;'; put 'put ''IHpKPSJkYXRlX2JlZm9yZSI7QXUoekosZnVuY3Rpb24gajB0KGMsbCl7bGV0W2FdPWw7Y29uc3QgZD1MYShjLnZhbHVlLGMubWV0YS5kYXRlRm9ybWF0KSxoPUxhKGEsYy5tZXRhLmRhdGVGb3JtYXQpO3JldHVybiEoIWQuaXNWYWxpZCgpfHwhaC5pc1ZhbGlkKCkpJiZkLmRpZmYoaCk8PTB9''@;'; put 'put ''LHtuYW1lOlZxLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IExGPSJiZXR3ZWVuIjtBdShMRixmdW5jdGlvbiB6MHQoYyxsKXtsZXRbYSxkXT1sLGg9YSxmPWQ7aWYoIm51bWVyaWMiPT09Yy5tZXRhLnR5cGUpe2NvbnN0IHY9cGFyc2VGbG9hdChoLDEwKSxNPXBhcnNl''@;'; put 'put ''RmxvYXQoZiwxMCk7aD1NYXRoLm1pbih2LE0pLGY9TWF0aC5tYXgodixNKX1lbHNlIGlmKCJkYXRlIj09PWMubWV0YS50eXBlKXtjb25zdCB2PWU2KHpKLFtmXSksTT1lNihqSixbaF0pO3JldHVybiB2KGMpJiZNKGMpfXJldHVybiBjLnZhbHVlPj1oJiZjLnZhbHVlPD1mfSx7bmFtZTpGcSxp''@;'; put 'put ''bnB1dHNDb3VudDoyLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBFZ2U9Im5vdF9iZXR3ZWVuIjtBdShFZ2UsZnVuY3Rpb24gVTB0KGMsbCl7cmV0dXJuIWU2KExGLGwpKGMpfSx7bmFtZTpIcSxpbnB1dHNDb3VudDoyLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBUZ2U9ImJlZ2luc193aXRo''@;'; put 'put ''IjtBdShUZ2UsZnVuY3Rpb24gWjB0KGMsbCl7bGV0W2FdPWw7cmV0dXJuIHpjKGMudmFsdWUpLnRvTG9jYWxlTG93ZXJDYXNlKGMubWV0YS5sb2NhbGUpLnN0YXJ0c1dpdGgoemMoYSkpfSx7bmFtZTpBcSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KSxBdSgiZW5kc193aXRoIixm''@;'; put 'put ''dW5jdGlvbiBXMHQoYyxsKXtsZXRbYV09bDtyZXR1cm4gemMoYy52YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UoYy5tZXRhLmxvY2FsZSkuZW5kc1dpdGgoemMoYSkpfSx7bmFtZTprcSxpbnB1dHNDb3VudDoxLHNob3dPcGVyYXRvcnM6ITB9KTtjb25zdCBVSj0iY29udGFpbnMiO0F1KFVKLGZ1''@;'; put 'put ''bmN0aW9uIFkwdChjLGwpe2xldFthXT1sO3JldHVybiB6YyhjLnZhbHVlKS50b0xvY2FsZUxvd2VyQ2FzZShjLm1ldGEubG9jYWxlKS5pbmRleE9mKHpjKGEpKT49MH0se25hbWU6RHEsaW5wdXRzQ291bnQ6MSxzaG93T3BlcmF0b3JzOiEwfSk7Y29uc3Qga2dlPSJub3RfY29udGFpbnMiO0F1''@;'; put 'put ''KGtnZSxmdW5jdGlvbiBHMHQoYyxsKXtyZXR1cm4hZTYoVUosbCkoYyl9LHtuYW1lOklxLGlucHV0c0NvdW50OjEsc2hvd09wZXJhdG9yczohMH0pO2NvbnN0IERnZT0iZGF0ZV90b21vcnJvdyI7QXUoRGdlLGZ1bmN0aW9uICQwdChjKXtjb25zdCBsPUxhKGMudmFsdWUsYy5tZXRhLmRhdGVG''@;'; put 'put ''b3JtYXQpO3JldHVybiEhbC5pc1ZhbGlkKCkmJmwuaXNTYW1lKExhKCkuc3VidHJhY3QoLTEsImRheXMiKS5zdGFydE9mKCJkYXkiKSwiZCIpfSx7bmFtZTpqcSxpbnB1dHNDb3VudDowfSk7Y29uc3QgSWdlPSJkYXRlX3RvZGF5IjtBdShJZ2UsZnVuY3Rpb24gSzB0KGMpe2NvbnN0IGw9TGEo''@;'; put 'put ''Yy52YWx1ZSxjLm1ldGEuZGF0ZUZvcm1hdCk7cmV0dXJuISFsLmlzVmFsaWQoKSYmbC5pc1NhbWUoTGEoKS5zdGFydE9mKCJkYXkiKSwiZCIpfSx7bmFtZTpCcSxpbnB1dHNDb3VudDowfSk7Y29uc3QgUmdlPSJkYXRlX3llc3RlcmRheSI7QXUoUmdlLGZ1bmN0aW9uIHEwdChjKXtjb25zdCBs''@;'; put 'put ''PUxhKGMudmFsdWUsYy5tZXRhLmRhdGVGb3JtYXQpO3JldHVybiEhbC5pc1ZhbGlkKCkmJmwuaXNTYW1lKExhKCkuc3VidHJhY3QoMSwiZGF5cyIpLnN0YXJ0T2YoImRheSIpLCJkIil9LHtuYW1lOnpxLGlucHV0c0NvdW50OjB9KTtjb25zdCBPZ2U9e251bWVyaWM6W1QwLGlzLExULElGLGlz''@;'; put 'put ''LE9ULFJGLGlzLCJndCIsImd0ZSIsImx0IiwibHRlIixMRixFZ2VdLHRleHQ6W1QwLGlzLExULElGLGlzLE9ULFJGLGlzLFRnZSwiZW5kc193aXRoIixpcyxVSixrZ2VdLGRhdGU6W1QwLGlzLExULElGLGlzLE9ULFJGLGlzLHpKLGpKLExGLGlzLERnZSxJZ2UsUmdlXX07ZnVuY3Rpb24gUFQo''@;'; put 'put ''YyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGUxdChjKXt2YXIgbD1mdW5jdGlvbiB0MXQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lm''@;'; put 'put ''KCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10''@;'; put 'put ''eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IFpKPSJidWlsdCIsV0o9ImJ1aWxkaW5nIixQZ2U9WyJjbGljayIsImlucHV0Iiwi''@;'; put 'put ''a2V5ZG93biIsImtleXByZXNzIiwia2V5dXAiLCJmb2N1cyIsImJsdXIiLCJjaGFuZ2UiXTtjbGFzcyBSaHtzdGF0aWMgZ2V0IERFRkFVTFRTKCl7cmV0dXJuIEpmKHtjbGFzc05hbWU6IiIsdmFsdWU6IiIsdGFnTmFtZToiZGl2IixjaGlsZHJlbjpbXSx3cmFwSXQ6ITB9KX1jb25zdHJ1Y3Rv''@;'; put 'put ''cihsLGEpe1BUKHRoaXMsImhvdCIsdm9pZCAwKSxQVCh0aGlzLCJldmVudE1hbmFnZXIiLG5ldyBMMih0aGlzKSksUFQodGhpcywib3B0aW9ucyIsdm9pZCAwKSxQVCh0aGlzLCJfZWxlbWVudCIsdm9pZCAwKSxQVCh0aGlzLCJidWlsZFN0YXRlIix2b2lkIDApLHRoaXMuaG90PWwsdGhpcy5v''@;'; put 'put ''cHRpb25zPXh1KFJoLkRFRkFVTFRTLGEpLHRoaXMuX2VsZW1lbnQ9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGhpcy5vcHRpb25zLndyYXBJdD8iZGl2Ijp0aGlzLm9wdGlvbnMudGFnTmFtZSl9c2V0VmFsdWUobCl7dGhpcy5vcHRpb25zLnZhbHVlPWwsdGhpcy51cGRh''@;'; put 'put ''dGUoKX1nZXRWYWx1ZSgpe3JldHVybiB0aGlzLm9wdGlvbnMudmFsdWV9Z2V0IGVsZW1lbnQoKXtyZXR1cm4gdGhpcy5idWlsZFN0YXRlPT09V0o/dGhpcy5fZWxlbWVudDp0aGlzLmJ1aWxkU3RhdGU9PT1aSj8odGhpcy51cGRhdGUoKSx0aGlzLl9lbGVtZW50KToodGhpcy5idWlsZFN0YXRl''@;'; put 'put ''PVdKLHRoaXMuYnVpbGQoKSx0aGlzLmJ1aWxkU3RhdGU9WkosdGhpcy5fZWxlbWVudCl9aXNCdWlsdCgpe3JldHVybiB0aGlzLmJ1aWxkU3RhdGU9PT1aSn10cmFuc2xhdGVJZlBvc3NpYmxlKGwpe3JldHVybiJzdHJpbmciPT10eXBlb2YgbCYmbC5zdGFydHNXaXRoKFgxKT90aGlzLmhvdC5n''@;'; put 'put ''ZXRUcmFuc2xhdGVkUGhyYXNlKGwpOmx9YnVpbGQoKXtjb25zdCBsPShhLGQpPT57dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLGQsaD0+dGhpcy5ydW5Mb2NhbEhvb2tzKGQsaCx0aGlzKSl9O2lmKHRoaXMuYnVpbGRTdGF0ZXx8KHRoaXMuYnVpbGRTdGF0ZT1XSiksdGhp''@;'; put 'put ''cy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoImRhdGEtaG90LWlucHV0IiwhMCksdm9pZCAwIT09dGhpcy5vcHRpb25zLnRhYkluZGV4JiZ0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLHRoaXMub3B0aW9ucy50YWJJbmRleCksdm9pZCAwIT09dGhpcy5vcHRpb25zLnJvbGUm''@;'; put 'put ''JnRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCJyb2xlIix0aGlzLm9wdGlvbnMucm9sZSksdGhpcy5vcHRpb25zLmNsYXNzTmFtZSYmVGkodGhpcy5fZWxlbWVudCx0aGlzLm9wdGlvbnMuY2xhc3NOYW1lKSx0aGlzLm9wdGlvbnMuY2hpbGRyZW4ubGVuZ3RoKVluKHRoaXMub3B0aW9ucy5j''@;'; put 'put ''aGlsZHJlbixhPT50aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGEuZWxlbWVudCkpO2Vsc2UgaWYodGhpcy5vcHRpb25zLndyYXBJdCl7Y29uc3QgYT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0aGlzLm9wdGlvbnMudGFnTmFtZSk7YS5zZXRBdHRyaWJ1dGUoImRhdGEt''@;'; put 'put ''aG90LWlucHV0IiwhMCkscWEodGhpcy5vcHRpb25zLChkLGgpPT57dm9pZCAwIT09YVtoXSYmImNsYXNzTmFtZSIhPT1oJiYidGFnTmFtZSIhPT1oJiYiY2hpbGRyZW4iIT09aCYmKGFbaF09dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKGQpKX0pLHRoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQo''@;'; put 'put ''YSksWW4oUGdlLGQ9PmwoYSxkKSl9ZWxzZSBZbihQZ2UsYT0+bCh0aGlzLl9lbGVtZW50LGEpKX11cGRhdGUoKXt9cmVzZXQoKXt0aGlzLm9wdGlvbnMudmFsdWU9IiIsdGhpcy51cGRhdGUoKX1zaG93KCl7dGhpcy5lbGVtZW50LnN0eWxlLmRpc3BsYXk9IiJ9aGlkZSgpe3RoaXMuZWxlbWVu''@;'; put 'put ''dC5zdHlsZS5kaXNwbGF5PSJub25lIn1mb2N1cygpe31kZXN0cm95KCl7dGhpcy5ldmVudE1hbmFnZXIuZGVzdHJveSgpLHRoaXMuZXZlbnRNYW5hZ2VyPW51bGwsdGhpcy5ob3Q9bnVsbCx0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUmJnRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVD''@;'; put 'put ''aGlsZCh0aGlzLl9lbGVtZW50KSx0aGlzLl9lbGVtZW50PW51bGx9fWZ1bmN0aW9uIEZnZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24g''@;'; put 'put ''T0YoYyxsKXtyZXR1cm4gYy5nZXQoWUooYyxsKSl9ZnVuY3Rpb24gWUooYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJl''@;'; put 'put ''c2VudCBvbiB0aGlzIG9iamVjdCIpfXhsKFJoLF8xKTt2YXIgSl89bmV3IFdlYWtNYXAsSGdlPW5ldyBXZWFrU2V0O2NsYXNzIHQ2IGV4dGVuZHMgUmh7c3RhdGljIGdldCBERUZBVUxUUygpe3JldHVybiBKZih7cGxhY2Vob2xkZXI6IiIsdHlwZToidGV4dCIsdGFnTmFtZToiaW5wdXQiLHRh''@;'; put 'put ''YkluZGV4Oi0xfSl9Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLHh1KHQ2LkRFRkFVTFRTLGEpKSxmdW5jdGlvbiBuMXQoYyxsKXtGZ2UoYyxsKSxsLmFkZChjKX0odGhpcyxIZ2UpLGZ1bmN0aW9uIHIxdChjLGwsYSl7RmdlKGMsbCksbC5zZXQoYyxhKX0odGhpcyxKXyx2b2lkIDApLHRoaXMu''@;'; put 'put ''cmVnaXN0ZXJIb29rcygpfXJlZ2lzdGVySG9va3MoKXt0aGlzLmFkZExvY2FsSG9vaygia2V5dXAiLGw9PllKKEhnZSx0aGlzLG8xdCkuY2FsbCh0aGlzLGwpKX1idWlsZCgpe3N1cGVyLmJ1aWxkKCk7Y29uc3QgbD10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7''@;'; put 'put ''KGZ1bmN0aW9uIGkxdChjLGwsYSl7Yy5zZXQoWUooYyxsKSxhKX0pKEpfLHRoaXMsdGhpcy5fZWxlbWVudC5maXJzdENoaWxkKSxUaSh0aGlzLl9lbGVtZW50LCJodFVJSW5wdXQiKSxUaShsLCJodFVJSW5wdXRJY29uIiksdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChsKSx0aGlzLnVwZGF0''@;'; put 'put ''ZSgpfXVwZGF0ZSgpe3RoaXMuaXNCdWlsdCgpJiYoT0YoSl8sdGhpcykudHlwZT10aGlzLm9wdGlvbnMudHlwZSxPRihKXyx0aGlzKS5wbGFjZWhvbGRlcj10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyKSxPRihKXyx0aGlzKS52YWx1ZT10aGlzLnRy''@;'; put 'put ''YW5zbGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLnZhbHVlKSl9Zm9jdXMoKXt0aGlzLmlzQnVpbHQoKSYmT0YoSl8sdGhpcykuZm9jdXMoKX19ZnVuY3Rpb24gbzF0KGMpe3RoaXMub3B0aW9ucy52YWx1ZT1jLnRhcmdldC52YWx1ZX1mdW5jdGlvbiBGVChjLGwsYSl7TmdlKGMsbCksbC5z''@;'; put 'put ''ZXQoYyxhKX1mdW5jdGlvbiBOZ2UoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIFFfKGMsbCxhKXtyZXR1cm4gYy5zZXQoSFQoYyxsKSxh''@;'; put 'put ''KSxhfWZ1bmN0aW9uICRjKGMsbCl7cmV0dXJuIGMuZ2V0KEhUKGMsbCkpfWZ1bmN0aW9uIEhUKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1l''@;'; put 'put ''bnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgZzA9bmV3IFdlYWtNYXAsUEY9bmV3IFdlYWtNYXAsRkY9bmV3IFdlYWtNYXAsR0o9bmV3IFdlYWtNYXAsSEY9bmV3IFdlYWtNYXAsTkY9bmV3IFdlYWtTZXQ7Y2xhc3MgTlQgZXh0ZW5kcyBSaHtzdGF0aWMgZ2V0IERFRkFV''@;'; put 'put ''TFRTKCl7cmV0dXJuIEpmKHtjbGFzc05hbWU6Imh0VUlTZWxlY3QiLHdyYXBJdDohMSx0YWJJbmRleDotMX0pfWNvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCx4dShOVC5ERUZBVUxUUyxhKSksZnVuY3Rpb24gYTF0KGMsbCl7TmdlKGMsbCksbC5hZGQoYyl9KHRoaXMsTkYpLEZUKHRoaXMsZzAs''@;'; put 'put ''bnVsbCksRlQodGhpcyxQRixbXSksRlQodGhpcyxGRix2b2lkIDApLEZUKHRoaXMsR0osdm9pZCAwKSxGVCh0aGlzLEhGLHZvaWQgMCksdGhpcy5yZWdpc3Rlckhvb2tzKCl9Z2V0TWVudSgpe3JldHVybiAkYyhnMCx0aGlzKX1yZWdpc3Rlckhvb2tzKCl7dGhpcy5hZGRMb2NhbEhvb2soImNs''@;'; put 'put ''aWNrIiwoKT0+SFQoTkYsdGhpcyxjMXQpLmNhbGwodGhpcykpfXNldEl0ZW1zKGwpe1FfKFBGLHRoaXMsdGhpcy50cmFuc2xhdGVOYW1lcyhsKSksJGMoZzAsdGhpcykmJiRjKGcwLHRoaXMpLnNldE1lbnVJdGVtcygkYyhQRix0aGlzKSl9dHJhbnNsYXRlTmFtZXMobCl7cmV0dXJuIFluKGws''@;'; put 'put ''YT0+e2EubmFtZT10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUoYS5uYW1lKX0pLGx9YnVpbGQoKXtzdXBlci5idWlsZCgpLFFfKGcwLHRoaXMsbmV3IFdfKHRoaXMuaG90LHtjbGFzc05hbWU6Imh0U2VsZWN0VUkgaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUiLGtlZXBJblZpZXdwb3J0OiExLHN0''@;'; put 'put ''YW5kYWxvbmU6ITAsY29udGFpbmVyOnRoaXMub3B0aW9ucy5tZW51Q29udGFpbmVyfSkpLCRjKGcwLHRoaXMpLnNldE1lbnVJdGVtcygkYyhQRix0aGlzKSk7Y29uc3QgbD1uZXcgUmgodGhpcy5ob3Qse2NsYXNzTmFtZToiaHRVSVNlbGVjdENhcHRpb24ifSksYT1uZXcgUmgodGhpcy5ob3Qs''@;'; put 'put ''e2NsYXNzTmFtZToiaHRVSVNlbGVjdERyb3Bkb3duIn0pO1FfKEZGLHRoaXMsbCksUV8oR0osdGhpcyxsLmVsZW1lbnQpLFFfKEhGLHRoaXMsYSksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncyYmKHZhKGEuZWxlbWVudCxba20oKV0pLHZhKHRoaXMuX2VsZW1lbnQsW1sicm9sZSIs''@;'; put 'put ''Imxpc3Rib3giXV0pKSxZbihbbCxhXSxkPT50aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGQuZWxlbWVudCkpLCRjKGcwLHRoaXMpLmFkZExvY2FsSG9vaygic2VsZWN0IixkPT5IVChORix0aGlzLHMxdCkuY2FsbCh0aGlzLGQpKSwkYyhnMCx0aGlzKS5hZGRMb2NhbEhvb2soImFmdGVyQ2xv''@;'; put 'put ''c2UiLCgpPT5IVChORix0aGlzLGwxdCkuY2FsbCh0aGlzKSksdGhpcy51cGRhdGUoKX11cGRhdGUoKXtpZighdGhpcy5pc0J1aWx0KCkpcmV0dXJuO2xldCBsO2w9dGhpcy5vcHRpb25zLnZhbHVlP3RoaXMub3B0aW9ucy52YWx1ZS5uYW1lOiRjKGcwLHRoaXMpLmhvdC5nZXRUcmFuc2xhdGVk''@;'; put 'put ''UGhyYXNlKGdQKSwkYyhHSix0aGlzKS50ZXh0Q29udGVudD1sLHN1cGVyLnVwZGF0ZSgpfW9wZW5PcHRpb25zKCl7Y29uc3QgbD10aGlzLmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7JGMoZzAsdGhpcykmJigkYyhnMCx0aGlzKS5vcGVuKCksJGMoZzAsdGhpcykuc2V0UG9zaXRp''@;'; put 'put ''b24oe2xlZnQ6dGhpcy5ob3QuaXNMdHIoKT9sLmxlZnQtNTpsLmxlZnQtMzEsdG9wOmwudG9wLTEsd2lkdGg6bC53aWR0aCxoZWlnaHQ6bC5oZWlnaHR9KSwkYyhnMCx0aGlzKS5nZXROYXZpZ2F0b3IoKS50b0ZpcnN0SXRlbSgpLCRjKGcwLHRoaXMpLmdldEtleWJvYXJkU2hvcnRjdXRzQ3Ry''@;'; put 'put ''bCgpLmFkZEN1c3RvbVNob3J0Y3V0cyhbe2tleXM6W1siVGFiIl0sWyJTaGlmdCIsIlRhYiJdXSxjYWxsYmFjazphPT57dGhpcy5jbG9zZU9wdGlvbnMoKSx0aGlzLnJ1bkxvY2FsSG9va3MoInRhYktleWRvd24iLGEpfX0se2tleXM6W1siQ29udHJvbC9NZXRhIiwiQSJdXSxjYWxsYmFjazoo''@;'; put 'put ''KT0+ITF9XSkpfWNsb3NlT3B0aW9ucygpeyRjKGcwLHRoaXMpJiYkYyhnMCx0aGlzKS5jbG9zZSgpfWZvY3VzKCl7dGhpcy5pc0J1aWx0KCkmJnRoaXMuZWxlbWVudC5mb2N1cygpfWRlc3Ryb3koKXskYyhnMCx0aGlzKSYmKCRjKGcwLHRoaXMpLmRlc3Ryb3koKSxRXyhnMCx0aGlzLG51bGwp''@;'; put 'put ''KSwkYyhGRix0aGlzKSYmJGMoRkYsdGhpcykuZGVzdHJveSgpLCRjKEhGLHRoaXMpJiYkYyhIRix0aGlzKS5kZXN0cm95KCksc3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBzMXQoYyl7Yy5uYW1lIT09aXMmJih0aGlzLm9wdGlvbnMudmFsdWU9Yyx0aGlzLnVwZGF0ZSgpLHRoaXMucnVuTG9j''@;'; put 'put ''YWxIb29rcygic2VsZWN0Iix0aGlzLm9wdGlvbnMudmFsdWUpKX1mdW5jdGlvbiBsMXQoKXt0aGlzLnJ1bkxvY2FsSG9va3MoImFmdGVyQ2xvc2UiKX1mdW5jdGlvbiBjMXQoKXt0aGlzLm9wZW5PcHRpb25zKCl9ZnVuY3Rpb24gVmdlKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBoMXQoYyl7''@;'; put 'put ''dmFyIGw9ZnVuY3Rpb24gZjF0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBCZ2UoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/''@;'; put 'put ''bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciAkSj1uZXcgV2Vha1NldDtjbGFzcyBLSiBleHRlbmRzIElUe2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCx7aWQ6YS5pZCxzdGF0ZWxlc3M6ITF9KSxmdW5j''@;'; put 'put ''dGlvbiB1MXQoYyxsKXsoZnVuY3Rpb24gZDF0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsJEopLFZnZSh0aGlz''@;'; put 'put ''LCJuYW1lIiwiIiksVmdlKHRoaXMsImFkZFNlcGFyYXRvciIsITEpLHRoaXMubmFtZT1hLm5hbWUsdGhpcy5hZGRTZXBhcmF0b3I9YS5hZGRTZXBhcmF0b3IsdGhpcy5lbGVtZW50cy5wdXNoKG5ldyBOVCh0aGlzLmhvdCx7bWVudUNvbnRhaW5lcjphLm1lbnVDb250YWluZXJ9KSksdGhpcy5l''@;'; put 'put ''bGVtZW50cy5wdXNoKG5ldyB0Nih0aGlzLmhvdCx7cGxhY2Vob2xkZXI6WHF9KSksdGhpcy5lbGVtZW50cy5wdXNoKG5ldyB0Nih0aGlzLmhvdCx7cGxhY2Vob2xkZXI6SnF9KSksdGhpcy5yZWdpc3Rlckhvb2tzKCl9cmVnaXN0ZXJIb29rcygpe3RoaXMuZ2V0U2VsZWN0RWxlbWVudCgpLmFk''@;'; put 'put ''ZExvY2FsSG9vaygic2VsZWN0IixsPT5CZ2UoJEosdGhpcyxwMXQpLmNhbGwodGhpcyxsKSkuYWRkTG9jYWxIb29rKCJhZnRlckNsb3NlIiwoKT0+dGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckNsb3NlIikpLmFkZExvY2FsSG9vaygidGFiS2V5ZG93biIsbD0+dGhpcy5ydW5Mb2NhbEhvb2tz''@;'; put 'put ''KCJzZWxlY3RUYWJLZXlkb3duIixsKSksWW4odGhpcy5nZXRJbnB1dEVsZW1lbnRzKCksbD0+e2wuYWRkTG9jYWxIb29rKCJrZXlkb3duIixhPT5CZ2UoJEosdGhpcyxnMXQpLmNhbGwodGhpcyxhKSl9KX1zZXRTdGF0ZShsKXtpZih0aGlzLnJlc2V0KCksIWwpcmV0dXJuO2NvbnN0IGE9SmYo''@;'; put 'put ''bC5jb21tYW5kKTthLm5hbWUuc3RhcnRzV2l0aChXYykmJihhLm5hbWU9dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZShhLm5hbWUpKSx0aGlzLmdldFNlbGVjdEVsZW1lbnQoKS5zZXRWYWx1ZShhKSxZbihsLmFyZ3MsKGQsaCk9PntpZihoPmEuaW5wdXRzQ291bnQtMSlyZXR1cm4hMTtj''@;'; put 'put ''b25zdCBmPXRoaXMuZ2V0SW5wdXRFbGVtZW50KGgpO2Yuc2V0VmFsdWUoZCksZlthLmlucHV0c0NvdW50Pmg/InNob3ciOiJoaWRlIl0oKSxofHx0aGlzLmhvdC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT5mLmZvY3VzKCksMTApfSl9Z2V0U3RhdGUoKXtjb25zdCBsPXRoaXMuZ2V0U2VsZWN0RWxl''@;'; put 'put ''bWVudCgpLmdldFZhbHVlKCl8fGI5KFQwKSxhPVtdO3JldHVybiBZbih0aGlzLmdldElucHV0RWxlbWVudHMoKSwoZCxoKT0+e2wuaW5wdXRzQ291bnQ+aCYmYS5wdXNoKGQuZ2V0VmFsdWUoKSl9KSx7Y29tbWFuZDpsLGFyZ3M6YX19dXBkYXRlU3RhdGUobCxhKXtjb25zdCBkPWI5KGw/bC5u''@;'; put 'put ''YW1lOlQwKTt0aGlzLnN0YXRlLnNldFZhbHVlQXRJbmRleChhLHtjb21tYW5kOmQsYXJnczpsP2wuYXJnczpbXX0pLGx8fFluKHRoaXMuZ2V0SW5wdXRFbGVtZW50cygpLGg9Pmguc2V0VmFsdWUobnVsbCkpfWdldFNlbGVjdEVsZW1lbnQoKXtyZXR1cm4gdGhpcy5lbGVtZW50cy5maWx0ZXIo''@;'; put 'put ''bD0+bCBpbnN0YW5jZW9mIE5UKVswXX1nZXRJbnB1dEVsZW1lbnQoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06MDtyZXR1cm4gdGhpcy5nZXRJbnB1dEVsZW1lbnRzKClbbF19Z2V0SW5wdXRFbGVtZW50cygpe3JldHVybiB0''@;'; put 'put ''aGlzLmVsZW1lbnRzLmZpbHRlcihsPT5sIGluc3RhbmNlb2YgdDYpfWdldE1lbnVJdGVtRGVzY3JpcHRvcigpe3JldHVybntrZXk6dGhpcy5pZCxuYW1lOnRoaXMubmFtZSxpc0NvbW1hbmQ6ITEsZGlzYWJsZVNlbGVjdGlvbjohMCxoaWRkZW46KCk9PnRoaXMuaXNIaWRkZW4oKSxyZW5kZXJl''@;'; put 'put ''cjoobCxhLGQsaCxmLHYpPT57VGkoYS5wYXJlbnROb2RlLCJodEZpbHRlcnNNZW51Q29uZGl0aW9uIiksdGhpcy5hZGRTZXBhcmF0b3ImJlRpKGEucGFyZW50Tm9kZSwiYm9yZGVyIik7Y29uc3QgTT10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7cmV0dXJuIFRp''@;'; put 'put ''KE0sImh0RmlsdGVyc01lbnVMYWJlbCIpLE0udGV4dENvbnRlbnQ9dixhLmFwcGVuZENoaWxkKE0pLGEucGFyZW50RWxlbWVudC5oYXNBdHRyaWJ1dGUoImdob3N0LXRhYmxlIil8fFluKHRoaXMuZWxlbWVudHMsRD0+YS5hcHBlbmRDaGlsZChELmVsZW1lbnQpKSxhfX19cmVzZXQoKXtjb25z''@;'; put 'put ''dCBsPXRoaXMuaG90LmdldFBsdWdpbigiZmlsdGVycyIpLmdldFNlbGVjdGVkQ29sdW1uKCk7bGV0IGE9W2I5KFQwKV07aWYobnVsbCE9PWwpe2NvbnN0e3Zpc3VhbEluZGV4OmR9PWw7YT1mdW5jdGlvbiBRMHQoYyl7Y29uc3QgbD1bXTtsZXQgYT1jO3JldHVybiBPZ2VbYV18fChhPSJ0ZXh0''@;'; put 'put ''IiksWW4oT2dlW2FdLGQ9PntsZXQgaDtoPWQ9PT1pcz97bmFtZTppc306SmYoYjkoZCkpLGwucHVzaChoKX0pLGx9KHRoaXMuaG90LmdldERhdGFUeXBlKDAsZCx0aGlzLmhvdC5jb3VudFJvd3MoKSxkKSl9WW4odGhpcy5nZXRJbnB1dEVsZW1lbnRzKCksZD0+ZC5oaWRlKCkpLHRoaXMuZ2V0''@;'; put 'put ''U2VsZWN0RWxlbWVudCgpLnNldEl0ZW1zKGEpLHN1cGVyLnJlc2V0KCksdGhpcy5nZXRTZWxlY3RFbGVtZW50KCkuc2V0VmFsdWUoYVswXSl9fWZ1bmN0aW9uIHAxdChjKXtZbih0aGlzLmdldElucHV0RWxlbWVudHMoKSwobCxhKT0+e2xbYy5pbnB1dHNDb3VudD5hPyJzaG93IjoiaGlkZSJd''@;'; put 'put ''KCksMD09PWEmJnRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9PmwuZm9jdXMoKSwxMCl9KSx0aGlzLnJ1bkxvY2FsSG9va3MoImNoYW5nZSIsYyl9ZnVuY3Rpb24gZzF0KGMpe2FfKGMua2V5Q29kZSwiRVNDQVBFIikmJih0aGlzLnJ1bkxvY2FsSG9va3MoImNhbmNlbCIpLFIyKGMpKX1j''@;'; put 'put ''b25zdCBWVD17fTtmdW5jdGlvbiB2MXQoYyl7cmV0dXJuIFZUW2NdLm5hbWV9ZnVuY3Rpb24gcUooYyxsLGEpe1ZUW2NdPXtuYW1lOmwsZnVuYzphfX1jb25zdCBuNj0iY29uanVuY3Rpb24iO3FKKG42LFdxLGZ1bmN0aW9uIHkxdChjLGwpe3JldHVybiBjLmV2ZXJ5KGE9PmEuZnVuYyhsKSl9''@;'; put 'put ''KTtjb25zdCBWRj0iZGlzanVuY3Rpb24iO3FKKFZGLG1QLGZ1bmN0aW9uIHcxdChjLGwpe3JldHVybiBjLnNvbWUoYT0+YS5mdW5jKGwpKX0pO2NvbnN0IFhKPSJkaXNqdW5jdGlvbldpdGhFeHRyYUNvbmRpdGlvbiI7ZnVuY3Rpb24gamdlKGMsbCxhKXsoZnVuY3Rpb24gTTF0KGMsbCl7aWYo''@;'; put 'put ''bC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBCVChjLGwpe3JldHVybiBjLmdldChVZ2UoYyxsKSl9ZnVuY3Rpb24gemdl''@;'; put 'put ''KGMsbCxhKXtyZXR1cm4gYy5zZXQoVWdlKGMsbCksYSksYX1mdW5jdGlvbiBVZ2UoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBu''@;'; put 'put ''b3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXFKKFhKLG1QLGZ1bmN0aW9uIFMxdChjLGwpe2lmKGMubGVuZ3RoPDMpdGhyb3cgRXJyb3IoIk9wZXJhdGlvbiBkb2Vzbid0IHdvcmsgb24gbGVzcyB0aGVuIHRocmVlIGNvbmRpdGlvbnMuIik7cmV0dXJuIGMuc2xpY2UoMCxjLmxlbmd0aC0x''@;'; put 'put ''KS5zb21lKGE9PmEuZnVuYyhsKSkmJmNbYy5sZW5ndGgtMV0uZnVuYyhsKX0pO3ZhciBldz1uZXcgV2Vha01hcCxKSj1uZXcgV2Vha01hcDtjbGFzcyBCRiBleHRlbmRzIFJoe3N0YXRpYyBnZXQgREVGQVVMVFMoKXtyZXR1cm4gSmYoe3R5cGU6InJhZGlvIix0YWdOYW1lOiJpbnB1dCIsY2xh''@;'; put 'put ''c3NOYW1lOiJodFVJUmFkaW8iLGxhYmVsOnt9fSl9Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLHh1KEJGLkRFRkFVTFRTLGEpKSxqZ2UodGhpcyxldyx2b2lkIDApLGpnZSh0aGlzLEpKLHZvaWQgMCl9YnVpbGQoKXtzdXBlci5idWlsZCgpO2NvbnN0IGw9dGhpcy5ob3Qucm9vdERvY3VtZW50''@;'; put 'put ''LmNyZWF0ZUVsZW1lbnQoImxhYmVsIik7bC50ZXh0Q29udGVudD10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLmxhYmVsLnRleHRDb250ZW50KSxsLmh0bWxGb3I9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRoaXMub3B0aW9ucy5sYWJlbC5odG1sRm9yKSx6Z2UoSkos''@;'; put 'put ''dGhpcyxsKSx6Z2UoZXcsdGhpcyx0aGlzLl9lbGVtZW50LmZpcnN0Q2hpbGQpLEJUKGV3LHRoaXMpLmNoZWNrZWQ9dGhpcy5vcHRpb25zLmNoZWNrZWQsdGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChsKSx0aGlzLnVwZGF0ZSgpfXVwZGF0ZSgpe3RoaXMuaXNCdWlsdCgpJiYoQlQoSkosdGhp''@;'; put 'put ''cykudGV4dENvbnRlbnQ9dGhpcy50cmFuc2xhdGVJZlBvc3NpYmxlKHRoaXMub3B0aW9ucy5sYWJlbC50ZXh0Q29udGVudCkpfWlzQ2hlY2tlZCgpe3JldHVybiEhdGhpcy5pc0J1aWx0KCkmJkJUKGV3LHRoaXMpLmNoZWNrZWR9c2V0Q2hlY2tlZCgpe2xldCBsPSEoYXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF07dGhpcy5pc0J1aWx0KCkmJihCVChldyx0aGlzKS5jaGVja2VkPWwpfWZvY3VzKCl7dGhpcy5pc0J1aWx0KCkmJkJUKGV3LHRoaXMpLmZvY3VzKCl9fXZhciBXZ2U9bmV3IFdlYWtTZXQ7Y2xhc3MgSTF0IGV4dGVuZHMg''@;'; put 'put ''SVR7Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLHtpZDphLmlkLHN0YXRlbGVzczohMX0pLGZ1bmN0aW9uIHgxdChjLGwpeyhmdW5jdGlvbiBFMXQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRz''@;'; put 'put ''IHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxXZ2UpLGZ1bmN0aW9uIFQxdChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gQTF0KGMpe3ZhciBsPWZ1bmN0aW9uIGsxdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1i''@;'; put 'put ''b2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJu''@;'; put 'put ''KCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6''@;'; put 'put ''Y1tsXT1hLGN9KHRoaXMsIm5hbWUiLCIiKSx0aGlzLm5hbWU9YS5uYW1lLHRoaXMuYnVpbGRPcGVyYXRvcnNFbGVtZW50KCl9Z2V0TWVudUl0ZW1EZXNjcmlwdG9yKCl7cmV0dXJue2tleTp0aGlzLmlkLG5hbWU6dGhpcy5uYW1lLGlzQ29tbWFuZDohMSxkaXNhYmxlU2VsZWN0aW9uOiEwLGhp''@;'; put 'put ''ZGRlbjooKT0+dGhpcy5pc0hpZGRlbigpLHJlbmRlcmVyOihsLGEpPT4oVGkoYS5wYXJlbnROb2RlLCJodEZpbHRlcnNNZW51T3BlcmF0b3JzIiksWW4odGhpcy5lbGVtZW50cyxkPT5hLmFwcGVuZENoaWxkKGQuZWxlbWVudCkpLGEpfX1idWlsZE9wZXJhdG9yc0VsZW1lbnQoKXtjb25zdCBs''@;'; put 'put ''PVtuNixWRl07WW4obCxhPT57Y29uc3QgZD1uZXcgQkYodGhpcy5ob3Qse25hbWU6Im9wZXJhdG9yIixsYWJlbDp7aHRtbEZvcjphLHRleHRDb250ZW50OnYxdChhKX0sdmFsdWU6YSxjaGVja2VkOmE9PT1sWzBdLGlkOmF9KTtkLmFkZExvY2FsSG9vaygiY2hhbmdlIixoPT5mdW5jdGlvbiBE''@;'; put 'put ''MXQoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfShXZ2UsdGhpcyxSMXQpLmNh''@;'; put 'put ''bGwodGhpcyxoKSksdGhpcy5lbGVtZW50cy5wdXNoKGQpfSl9c2V0Q2hlY2tlZChsKXtpZih0aGlzLmVsZW1lbnRzLmxlbmd0aDxsKXRocm93IEVycm9yKGZsYFJhZGlvIGJ1dHRvbiB3aXRoIGluZGV4ICR7bH0gZG9lc24ndCBleGlzdC5gKTtZbih0aGlzLmVsZW1lbnRzLChhLGQpPT57YS5z''@;'; put 'put ''ZXRDaGVja2VkKGQ9PT1sKX0pfWdldEFjdGl2ZU9wZXJhdGlvbklkKCl7Y29uc3QgbD10aGlzLmVsZW1lbnRzLmZpbmQoYT0+YSBpbnN0YW5jZW9mIEJGJiZhLmlzQ2hlY2tlZCgpKTtyZXR1cm4gbD9sLmdldFZhbHVlKCk6bjZ9Z2V0U3RhdGUoKXtyZXR1cm4gdGhpcy5nZXRBY3RpdmVPcGVy''@;'; put 'put ''YXRpb25JZCgpfXNldFN0YXRlKGwpe3RoaXMucmVzZXQoKSxsJiZ0aGlzLmdldEFjdGl2ZU9wZXJhdGlvbklkKCkhPT1sJiZZbih0aGlzLmVsZW1lbnRzLGE9PnthLnNldENoZWNrZWQoYS5nZXRWYWx1ZSgpPT09bCl9KX11cGRhdGVTdGF0ZSgpe2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MCYm''@;'; put 'put ''dm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTpuNjtkPT09WEomJihkPVZGKSx0aGlzLnN0YXRlLnNldFZhbHVlQXRJbmRleChhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxkKX1yZXNldCgpe3RoaXMuc2V0Q2hlY2tlZCgwKX19ZnVuY3Rpb24gUjF0KGMp''@;'; put 'put ''e3RoaXMuc2V0U3RhdGUoYy50YXJnZXQudmFsdWUpfWZ1bmN0aW9uIE8xdChjLGwpe2xldCBhPWM7cmV0dXJuIiI9PT1hJiYoYT1gKCR7bH0pYCksYX1mdW5jdGlvbiBqVChjKXtjb25zdCBsPW5ldyBTZXQoYyk7cmV0dXJuIGZ1bmN0aW9uKGEpe3JldHVybiBsLmhhcyhhKX19ZnVuY3Rpb24g''@;'; put 'put ''UUooYyl7cmV0dXJuIGM/PyIifWZ1bmN0aW9uIGVRKGMpe3JldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoYykpLm1hcChsPT5RSihsKSkuc29ydCgobCxhKT0+Im51bWJlciI9PXR5cGVvZiBsJiYibnVtYmVyIj09dHlwZW9mIGE/bC1hOmw9PT1hPzA6bD5hPzE6LTEpfWZ1bmN0aW9uIFlnZShj''@;'; put 'put ''LGwsYSxkKXtjb25zdCBoPVtdLGY9Yz09PWw7bGV0IHY7cmV0dXJuIGZ8fCh2PWpUKGwpKSxjLmZvckVhY2goTT0+e2xldCBEPSExOyhmfHx2KE0pKSYmKEQ9ITApO2NvbnN0IFo9e2NoZWNrZWQ6RCx2YWx1ZTpNLHZpc3VhbFZhbHVlOk8xdChNLGEpfTtkJiZkKFopLGgucHVzaChaKX0pLGh9''@;'; put 'put ''ZnVuY3Rpb24gdFEoYyxsKXtyZXR1cm4gYy5nZXQoR2dlKGMsbCkpfWZ1bmN0aW9uIEdnZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50''@;'; put 'put ''IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9UjJlKCk7dmFyIHpUPW5ldyBXZWFrTWFwO2NsYXNzIFVUIGV4dGVuZHMgUmh7c3RhdGljIGdldCBERUZBVUxUUygpe3JldHVybiBKZih7aHJlZjoiIyIsdGFnTmFtZToiYSIsdGFiSW5kZXg6LTEscm9sZToiYnV0dG9uIn0pfWNvbnN0''@;'; put 'put ''cnVjdG9yKGwsYSl7c3VwZXIobCx4dShVVC5ERUZBVUxUUyxhKSksZnVuY3Rpb24gUDF0KGMsbCxhKXsoZnVuY3Rpb24gRjF0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBh''@;'; put 'put ''biBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX0odGhpcyx6VCx2b2lkIDApfWJ1aWxkKCl7c3VwZXIuYnVpbGQoKSxmdW5jdGlvbiBIMXQoYyxsLGEpe2Muc2V0KEdnZShjLGwpLGEpfSh6VCx0aGlzLHRoaXMuX2VsZW1lbnQuZmlyc3RDaGlsZCl9dXBkYXRlKCl7dGhpcy5pc0J1aWx0KCkm''@;'; put 'put ''Jih0USh6VCx0aGlzKS50ZXh0Q29udGVudD10aGlzLnRyYW5zbGF0ZUlmUG9zc2libGUodGhpcy5vcHRpb25zLnRleHRDb250ZW50KSl9Zm9jdXMoKXt0aGlzLmlzQnVpbHQoKSYmdFEoelQsdGhpcykuZm9jdXMoKX1hY3RpdmF0ZSgpe3RRKHpULHRoaXMpLmNsaWNrKCl9fWZ1bmN0aW9uIHR3''@;'; put 'put ''KGMsbCxhKXskZ2UoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uICRnZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gamEoYyxsKXtyZXR1''@;'; put 'put ''cm4gYy5nZXQobncoYyxsKSl9ZnVuY3Rpb24gaDMoYyxsLGEpe3JldHVybiBjLnNldChudyhjLGwpLGEpLGF9ZnVuY3Rpb24gbncoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBl''@;'; put 'put ''RXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IEtnZT0ibXVsdGlwbGVTZWxlY3QuaXRlbUJveCI7dmFyIGYzPW5ldyBXZWFrTWFwLGN1PW5ldyBXZWFrTWFwLG5RPW5ldyBXZWFrTWFwLE9nPW5ldyBXZWFrTWFwLHI2PW5ldyBXZWFr''@;'; put 'put ''TWFwLGk2PW5ldyBXZWFrTWFwLFpUPW5ldyBXZWFrU2V0O2NsYXNzIFdUIGV4dGVuZHMgUmh7c3RhdGljIGdldCBERUZBVUxUUygpe3JldHVybiBKZih7Y2xhc3NOYW1lOiJodFVJTXVsdGlwbGVTZWxlY3QiLHZhbHVlOltdfSl9Y29uc3RydWN0b3IobCxhKXtzdXBlcihsLHh1KFdULkRFRkFV''@;'; put 'put ''TFRTLGEpKSxmdW5jdGlvbiBOMXQoYyxsKXskZ2UoYyxsKSxsLmFkZChjKX0odGhpcyxaVCksdHcodGhpcyxmMyxbXSksdHcodGhpcyxjdSx2b2lkIDApLHR3KHRoaXMsblEsdm9pZCAwKSx0dyh0aGlzLE9nLHZvaWQgMCksdHcodGhpcyxyNix2b2lkIDApLHR3KHRoaXMsaTYsdm9pZCAwKSxo''@;'; put 'put ''MyhPZyx0aGlzLG5ldyB0Nih0aGlzLmhvdCx7cGxhY2Vob2xkZXI6cXEsY2xhc3NOYW1lOiJodFVJTXVsdGlwbGVTZWxlY3RTZWFyY2gifSkpLGgzKHI2LHRoaXMsbmV3IFVUKHRoaXMuaG90LHt0ZXh0Q29udGVudDpZcSxjbGFzc05hbWU6Imh0VUlTZWxlY3RBbGwifSkpLGgzKGk2LHRoaXMs''@;'; put 'put ''bmV3IFVUKHRoaXMuaG90LHt0ZXh0Q29udGVudDpHcSxjbGFzc05hbWU6Imh0VUlDbGVhckFsbCJ9KSksdGhpcy5yZWdpc3Rlckhvb2tzKCl9Z2V0SXRlbXNCb3goKXtyZXR1cm4gamEoY3UsdGhpcyl9cmVnaXN0ZXJIb29rcygpe2phKE9nLHRoaXMpLmFkZExvY2FsSG9vaygia2V5ZG93biIs''@;'; put 'put ''bD0+bncoWlQsdGhpcyxCMXQpLmNhbGwodGhpcyxsKSksamEoT2csdGhpcykuYWRkTG9jYWxIb29rKCJpbnB1dCIsbD0+bncoWlQsdGhpcyxWMXQpLmNhbGwodGhpcyxsKSksamEocjYsdGhpcykuYWRkTG9jYWxIb29rKCJjbGljayIsbD0+bncoWlQsdGhpcyxqMXQpLmNhbGwodGhpcyxsKSks''@;'; put 'put ''amEoaTYsdGhpcykuYWRkTG9jYWxIb29rKCJjbGljayIsbD0+bncoWlQsdGhpcyx6MXQpLmNhbGwodGhpcyxsKSl9c2V0SXRlbXMobCl7dmFyIGE7aDMoZjMsdGhpcyxsKSxudWxsPT09KGE9amEoY3UsdGhpcykpfHx2b2lkIDA9PT1hfHxhLmxvYWREYXRhKGphKGYzLHRoaXMpKX1zZXRMb2Nh''@;'; put 'put ''bGUobCl7aDMoblEsdGhpcyxsKX1nZXRMb2NhbGUoKXtyZXR1cm4gamEoblEsdGhpcyl9Z2V0SXRlbXMoKXtyZXR1cm5bLi4uamEoZjMsdGhpcyldfWdldFZhbHVlKCl7cmV0dXJuIGZ1bmN0aW9uIFoxdChjKXtjb25zdCBsPVtdO3JldHVybiBjLmZvckVhY2goYT0+e2EuY2hlY2tlZCYmbC5w''@;'; put 'put ''dXNoKGEudmFsdWUpfSksbH0oamEoZjMsdGhpcykpfWdldFNlYXJjaElucHV0RWxlbWVudCgpe3JldHVybiBqYShPZyx0aGlzKX1nZXRTZWxlY3RBbGxFbGVtZW50KCl7cmV0dXJuIGphKHI2LHRoaXMpfWdldENsZWFyQWxsRWxlbWVudCgpe3JldHVybiBqYShpNix0aGlzKX1pc1NlbGVjdGVk''@;'; put 'put ''QWxsVmFsdWVzKCl7cmV0dXJuIGphKGYzLHRoaXMpLmxlbmd0aD09PXRoaXMuZ2V0VmFsdWUoKS5sZW5ndGh9YnVpbGQoKXtzdXBlci5idWlsZCgpO2NvbnN0e3Jvb3REb2N1bWVudDpsfT10aGlzLmhvdCxhPWwuY3JlYXRlRWxlbWVudCgiZGl2IiksZD1uZXcgUmgodGhpcy5ob3Qse2NsYXNz''@;'; put 'put ''TmFtZToiaHRVSVNlbGVjdGlvbkNvbnRyb2xzIixjaGlsZHJlbjpbamEocjYsdGhpcyksamEoaTYsdGhpcyldfSk7dGhpcy5fZWxlbWVudC5hcHBlbmRDaGlsZChqYShPZyx0aGlzKS5lbGVtZW50KSx0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGQuZWxlbWVudCksdGhpcy5fZWxlbWVudC5h''@;'; put 'put ''cHBlbmRDaGlsZChhKTtjb25zdCBoPWY9Pnt2YXIgdjtpZighdGhpcy5fZWxlbWVudClyZXR1cm47bnVsbD09PSh2PWphKGN1LHRoaXMpKXx8dm9pZCAwPT09dnx8di5kZXN0cm95KCksVGkoZiwiaHRVSU11bHRpcGxlU2VsZWN0SG90IiksaDMoY3UsdGhpcyxuZXcgdGhpcy5ob3QuY29uc3Ry''@;'; put 'put ''dWN0b3IoZix7ZGF0YTpqYShmMyx0aGlzKSxjb2x1bW5zOlt7ZGF0YToiY2hlY2tlZCIsdHlwZToiY2hlY2tib3giLGxhYmVsOntwcm9wZXJ0eToidmlzdWFsVmFsdWUiLHBvc2l0aW9uOiJhZnRlciJ9fV0sYmVmb3JlUmVuZGVyZXI6KFosbmUsY2UsYmUsRWUsQmUpPT57Wi50aXRsZT1CZS5p''@;'; put 'put ''bnN0YW5jZS5nZXREYXRhQXRSb3dQcm9wKG5lLEJlLmxhYmVsLnByb3BlcnR5KX0sYWZ0ZXJMaXN0ZW46KCk9Pnt0aGlzLnJ1bkxvY2FsSG9va3MoImZvY3VzIix0aGlzKX0sYmVmb3JlT25DZWxsTW91c2VVcDooKT0+e2phKGN1LHRoaXMpLmxpc3RlbigpfSxjb2xXaWR0aHM6KCk9PmphKGN1''@;'; put 'put ''LHRoaXMpLmNvbnRhaW5lci5zY3JvbGxXaWR0aC1oMChsKSxtYXhDb2xzOjEsYXV0b1dyYXBDb2w6ITAsaGVpZ2h0OjExMCxjb3B5UGFzdGU6ITEsZGlzYWJsZVZpc3VhbFNlbGVjdGlvbjoiYXJlYSIsZmlsbEhhbmRsZTohMSxmcmFnbWVudFNlbGVjdGlvbjoiY2VsbCIsdGFiTW92ZXM6e3Jv''@;'; put 'put ''dzoxLGNvbDowfSx0aGVtZU5hbWU6dGhpcy5ob3QuZ2V0Q3VycmVudFRoZW1lTmFtZSgpLGxheW91dERpcmVjdGlvbjp0aGlzLmhvdC5pc1J0bCgpPyJydGwiOiJsdHIifSkpLGphKGN1LHRoaXMpLmluaXQoKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlclNldFRoZW1lIiwoWixuZSk9PntuZXx8''@;'; put 'put ''amEoY3UsdGhpcykudXNlVGhlbWUoWil9KTtjb25zdCBEPWphKGN1LHRoaXMpLmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKTtELnJlbW92ZVNob3J0Y3V0c0J5S2V5cyhbIlRhYiJdKSxELnJlbW92ZVNob3J0Y3V0c0J5S2V5cyhbIlNoaWZ0IiwiVGFiIl0pLEQuYWRk''@;'; put 'put ''U2hvcnRjdXQoe2tleXM6W1siRXNjYXBlIl1dLGNhbGxiYWNrOlo9Pnt0aGlzLnJ1bkxvY2FsSG9va3MoImtleWRvd24iLFosdGhpcyl9LGdyb3VwOktnZX0pLEQuYWRkU2hvcnRjdXQoe2tleXM6W1siVGFiIl0sWyJTaGlmdCIsIlRhYiJdXSxjYWxsYmFjazpaPT57amEoY3UsdGhpcykuZGVz''@;'; put 'put ''ZWxlY3RDZWxsKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJrZXlkb3duIixaLHRoaXMpLHRoaXMucnVuTG9jYWxIb29rcygibGlzdFRhYktleWRvd24iLFosdGhpcyl9LGdyb3VwOktnZX0pfTtoKGEpLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9PmgoYSksMTAwKX1mb2N1cygpe3RoaXMu''@;'; put 'put ''aXNCdWlsdCgpJiZqYShjdSx0aGlzKS5saXN0ZW4oKX1yZXNldCgpe2phKE9nLHRoaXMpLnJlc2V0KCksamEocjYsdGhpcykucmVzZXQoKSxqYShpNix0aGlzKS5yZXNldCgpfXVwZGF0ZSgpe3RoaXMuaXNCdWlsdCgpJiYoamEoY3UsdGhpcykubG9hZERhdGEoZnVuY3Rpb24gVTF0KGMsbCl7''@;'; put 'put ''Y29uc3QgYT1qVChsKTtyZXR1cm4gYy5tYXAoZD0+KGQuY2hlY2tlZD1hKGQudmFsdWUpLGQpKX0oamEoZjMsdGhpcyksdGhpcy5vcHRpb25zLnZhbHVlKSksc3VwZXIudXBkYXRlKCkpfWRlc3Ryb3koKXt2YXIgbDtudWxsPT09KGw9amEoY3UsdGhpcykpfHx2b2lkIDA9PT1sfHxsLmRlc3Ry''@;'; put 'put ''b3koKSxqYShPZyx0aGlzKS5kZXN0cm95KCksamEoaTYsdGhpcykuZGVzdHJveSgpLGphKHI2LHRoaXMpLmRlc3Ryb3koKSxoMyhPZyx0aGlzLG51bGwpLGgzKGk2LHRoaXMsbnVsbCksaDMocjYsdGhpcyxudWxsKSxoMyhjdSx0aGlzLG51bGwpLGgzKGYzLHRoaXMsbnVsbCksc3VwZXIuZGVz''@;'; put 'put ''dHJveSgpfX1mdW5jdGlvbiBWMXQoYyl7Y29uc3QgbD1jLnRhcmdldC52YWx1ZS50b0xvY2FsZUxvd2VyQ2FzZSh0aGlzLmdldExvY2FsZSgpKTtsZXQgYTthPSIiPT09bD9bLi4uamEoZjMsdGhpcyldOmphKGYzLHRoaXMpLmZpbHRlcihkPT5gJHtkLnZhbHVlfWAudG9Mb2NhbGVMb3dlckNh''@;'; put 'put ''c2UodGhpcy5nZXRMb2NhbGUoKSkuaW5kZXhPZihsKT49MCksamEoY3UsdGhpcykubG9hZERhdGEoYSl9ZnVuY3Rpb24gQjF0KGMpe3RoaXMucnVuTG9jYWxIb29rcygia2V5ZG93biIsYyx0aGlzKSxiJChhXyxjLmtleUNvZGUpKCJBUlJPV19ET1dOIikmJihjLnByZXZlbnREZWZhdWx0KCks''@;'; put 'put ''UjIoYyksamEoY3UsdGhpcykubGlzdGVuKCksamEoY3UsdGhpcykuc2VsZWN0Q2VsbCgwLDApKX1mdW5jdGlvbiBqMXQoYyl7Y29uc3QgbD1bXTtjLnByZXZlbnREZWZhdWx0KCksamEoY3UsdGhpcykuZ2V0U291cmNlRGF0YSgpLmZvckVhY2goKGEsZCk9PnthLmNoZWNrZWQ9ITAsbC5wdXNo''@;'; put 'put ''KFNLKGEsZClbMF0pfSksamEoY3UsdGhpcykuc2V0U291cmNlRGF0YUF0Q2VsbChsKX1mdW5jdGlvbiB6MXQoYyl7Y29uc3QgbD1bXTtjLnByZXZlbnREZWZhdWx0KCksamEoY3UsdGhpcykuZ2V0U291cmNlRGF0YSgpLmZvckVhY2goKGEsZCk9PnthLmNoZWNrZWQ9ITEsbC5wdXNoKFNLKGEs''@;'; put 'put ''ZClbMF0pfSksamEoY3UsdGhpcykuc2V0U291cmNlRGF0YUF0Q2VsbChsKX1jb25zdCB5OT0iYnlfdmFsdWUiO2Z1bmN0aW9uIGpGKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlw''@;'; put 'put ''ZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1BdSh5OSxmdW5jdGlvbiBXMXQoYyxsKXtsZXRbYV09bDtyZXR1cm4gYShjLnZhbHVlKX0se25hbWU6IkJ5IHZhbHVlIixpbnB1dHNDb3VudDowLGlucHV0VmFsdWVzRGVjb3JhdG9yKGMpe2xl''@;'; put 'put ''dFtsXT1jO3JldHVybltqVChsKV19LHNob3dPcGVyYXRvcnM6ITF9KTt2YXIgWGdlLFlUPW5ldyBXZWFrU2V0O2NsYXNzIFgxdCBleHRlbmRzIElUe2NvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCx7aWQ6YS5pZCxzdGF0ZWxlc3M6ITF9KSxmdW5jdGlvbiBZMXQoYyxsKXsoZnVuY3Rpb24gRzF0''@;'; put 'put ''KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsWVQpLGZ1bmN0aW9uICQxdChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rp''@;'; put 'put ''b24gSzF0KGMpe3ZhciBsPWZ1bmN0aW9uIHExdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJl''@;'; put 'put ''dHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4g''@;'; put 'put ''Yz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsIm5hbWUiLCIiKSx0aGlzLm5hbWU9YS5uYW1lLHRoaXMuZWxlbWVudHMucHVzaChuZXcgV1QodGhpcy5ob3QpKSx0aGlz''@;'; put 'put ''LnJlZ2lzdGVySG9va3MoKX1yZWdpc3Rlckhvb2tzKCl7dGhpcy5nZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKS5hZGRMb2NhbEhvb2soImtleWRvd24iLGw9PmpGKFlULHRoaXMsSjF0KS5jYWxsKHRoaXMsbCkpLmFkZExvY2FsSG9vaygibGlzdFRhYktleWRvd24iLGw9PnRoaXMucnVuTG9j''@;'; put 'put ''YWxIb29rcygibGlzdFRhYktleWRvd24iLGwpKSx0aGlzLmhvdC5hZGRIb29rKCJtb2RpZnlGaWx0ZXJzTXVsdGlTZWxlY3RWYWx1ZSIsKGwsYSk9PmpGKFlULHRoaXMsUTF0KS5jYWxsKHRoaXMsbCxhKSl9Z2V0RWxlbWVudHMoKXtjb25zdCBsPXRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVt''@;'; put 'put ''ZW50KCk7cmV0dXJuW2wuZ2V0U2VhcmNoSW5wdXRFbGVtZW50KCksbC5nZXRTZWxlY3RBbGxFbGVtZW50KCksbC5nZXRDbGVhckFsbEVsZW1lbnQoKSx0aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpXX1zZXRTdGF0ZShsKXtpZih0aGlzLnJlc2V0KCksbCYmbC5jb21tYW5kLmtleT09''@;'; put 'put ''PXk5KXtjb25zdCBhPXRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCk7YS5zZXRJdGVtcyhsLml0ZW1zU25hcHNob3QpLGEuc2V0VmFsdWUobC5hcmdzWzBdKSxhLnNldExvY2FsZShsLmxvY2FsZSl9fWdldFN0YXRlKCl7Y29uc3QgbD10aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVu''@;'; put 'put ''dCgpLGE9bC5nZXRJdGVtcygpO3JldHVybntjb21tYW5kOntrZXk6bC5pc1NlbGVjdGVkQWxsVmFsdWVzKCl8fCFhLmxlbmd0aD9UMDp5OX0sYXJnczpbbC5nZXRWYWx1ZSgpXSxpdGVtc1NuYXBzaG90OmF9fXVwZGF0ZVN0YXRlKGwpe2NvbnN0IGE9KGQsaCxmLHYsTSk9Pntjb25zdFtEXT1B''@;'; put 'put ''bShoLGNlPT5jZS5uYW1lPT09eTkpLFo9e30sbmU9dGhpcy5ob3QuZ2V0VHJhbnNsYXRlZFBocmFzZSh2UCk7aWYoRCl7Y29uc3QgY2U9dihkLE0pLGJlPXlzKGNlLG10PT5tdC52YWx1ZSksRWU9bmV3IE1hcChjZS5tYXAobXQ9PlttdC52YWx1ZSx0aGlzLmhvdC5nZXRDZWxsTWV0YShtdC5t''@;'; put 'put ''ZXRhLnZpc3VhbFJvdyxtdC5tZXRhLnZpc3VhbENvbCldKSksQmU9ZVEoYmUpO2YmJihELmFyZ3NbMF09Zik7Y29uc3QgcWU9W10sbnQ9WWdlKEJlLEQuYXJnc1swXSxuZSxtdD0+e210LmNoZWNrZWQmJnFlLnB1c2gobXQudmFsdWUpLGpGKFlULHRoaXMscWdlKS5jYWxsKHRoaXMsbXQsRWUp''@;'; put 'put ''fSk7Wi5sb2NhbGU9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoMCxsLmVkaXRlZENvbmRpdGlvblN0YWNrLmNvbHVtbikubG9jYWxlLFouYXJncz1bcWVdLFouY29tbWFuZD1iOSh5OSksWi5pdGVtc1NuYXBzaG90PW50fWVsc2UgWi5hcmdzPVtdLFouY29tbWFuZD1iOShUMCk7dGhpcy5zdGF0ZS5z''@;'; put 'put ''ZXRWYWx1ZUF0SW5kZXgoZCxaKX07YShsLmVkaXRlZENvbmRpdGlvblN0YWNrLmNvbHVtbixsLmVkaXRlZENvbmRpdGlvblN0YWNrLmNvbmRpdGlvbnMsbC5jb25kaXRpb25BcmdzQ2hhbmdlLGwuZmlsdGVyZWRSb3dzRmFjdG9yeSksbC5kZXBlbmRlbnRDb25kaXRpb25TdGFja3MubGVuZ3Ro''@;'; put 'put ''JiZhKGwuZGVwZW5kZW50Q29uZGl0aW9uU3RhY2tzWzBdLmNvbHVtbixsLmRlcGVuZGVudENvbmRpdGlvblN0YWNrc1swXS5jb25kaXRpb25zLGwuY29uZGl0aW9uQXJnc0NoYW5nZSxsLmZpbHRlcmVkUm93c0ZhY3RvcnksbC5lZGl0ZWRDb25kaXRpb25TdGFjayl9Z2V0TXVsdGlwbGVTZWxl''@;'; put 'put ''Y3RFbGVtZW50KCl7cmV0dXJuIHRoaXMuZWxlbWVudHMuZmlsdGVyKGw9PmwgaW5zdGFuY2VvZiBXVClbMF19Z2V0TWVudUl0ZW1EZXNjcmlwdG9yKCl7cmV0dXJue2tleTp0aGlzLmlkLG5hbWU6dGhpcy5uYW1lLGlzQ29tbWFuZDohMSxkaXNhYmxlU2VsZWN0aW9uOiEwLGhpZGRlbjooKT0+''@;'; put 'put ''dGhpcy5pc0hpZGRlbigpLHJlbmRlcmVyOihsLGEsZCxoLGYsdik9PntUaShhLnBhcmVudE5vZGUsImh0RmlsdGVyc01lbnVWYWx1ZSIpO2NvbnN0IE09dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBUaShNLCJodEZpbHRlcnNNZW51TGFiZWwiKSxN''@;'; put 'put ''LnRleHRDb250ZW50PXYsYS5hcHBlbmRDaGlsZChNKSxhLnBhcmVudEVsZW1lbnQuaGFzQXR0cmlidXRlKCJnaG9zdC10YWJsZSIpfHxZbih0aGlzLmVsZW1lbnRzLEQ9PmEuYXBwZW5kQ2hpbGQoRC5lbGVtZW50KSksYX19fXJlc2V0KCl7Y29uc3QgbD10aGlzLmhvdC5nZXRUcmFuc2xhdGVk''@;'; put 'put ''UGhyYXNlKHZQKSxhPXRoaXMuX2dldENvbHVtblZpc2libGVWYWx1ZXMoKSxkPWEubWFwKEQ9PkQudmFsdWUpLGg9bmV3IE1hcChhLm1hcChEPT5bRC52YWx1ZSxELm1ldGFdKSksZj1lUShkKSx2PVlnZShmLGYsbCxEPT57akYoWVQsdGhpcyxxZ2UpLmNhbGwodGhpcyxELGgpfSk7dGhpcy5n''@;'; put 'put ''ZXRNdWx0aXBsZVNlbGVjdEVsZW1lbnQoKS5zZXRJdGVtcyh2KSxzdXBlci5yZXNldCgpLHRoaXMuZ2V0TXVsdGlwbGVTZWxlY3RFbGVtZW50KCkuc2V0VmFsdWUoZik7Y29uc3QgTT10aGlzLmhvdC5nZXRQbHVnaW4oImZpbHRlcnMiKS5nZXRTZWxlY3RlZENvbHVtbigpO251bGwhPT1NJiZ0''@;'; put 'put ''aGlzLmdldE11bHRpcGxlU2VsZWN0RWxlbWVudCgpLnNldExvY2FsZSh0aGlzLmhvdC5nZXRDZWxsTWV0YSgwLE0udmlzdWFsSW5kZXgpLmxvY2FsZSl9X2dldENvbHVtblZpc2libGVWYWx1ZXMoKXtjb25zdCBsPXRoaXMuaG90LmdldFBsdWdpbigiZmlsdGVycyIpLmdldFNlbGVjdGVkQ29s''@;'; put 'put ''dW1uKCk7cmV0dXJuIG51bGw9PT1sP1tdOnlzKHRoaXMuaG90LmdldERhdGFBdENvbChsLnZpc3VhbEluZGV4KSwoYSxkKT0+KHt2YWx1ZTpRSihhKSxtZXRhOnRoaXMuaG90LmdldENlbGxNZXRhKGQsbC52aXN1YWxJbmRleCl9KSl9fWZ1bmN0aW9uIEoxdChjKXthXyhjLmtleUNvZGUsIkVT''@;'; put 'put ''Q0FQRSIpJiYodGhpcy5ydW5Mb2NhbEhvb2tzKCJjYW5jZWwiKSxSMihjKSl9ZnVuY3Rpb24gcWdlKGMsbCl7dGhpcy5ob3QuaGFzSG9vaygibW9kaWZ5RmlsdGVyc011bHRpU2VsZWN0VmFsdWUiKSYmKGMudmlzdWFsVmFsdWU9dGhpcy5ob3QucnVuSG9va3MoIm1vZGlmeUZpbHRlcnNNdWx0''@;'; put 'put ''aVNlbGVjdFZhbHVlIixjLnZpc3VhbFZhbHVlLGwuZ2V0KGMudmFsdWUpKSl9ZnVuY3Rpb24gUTF0KGMsbCl7cmV0dXJuIm51bWVyaWMiPT09bC50eXBlP3FwZShjLGwpOmN9dmFyIEpnZT1uZXcgV2Vha1NldDtjbGFzcyBHVCBleHRlbmRzIElUe3N0YXRpYyBnZXQgQlVUVE9OX09LKCl7cmV0''@;'; put 'put ''dXJuIm9rIn1zdGF0aWMgZ2V0IEJVVFRPTl9DQU5DRUwoKXtyZXR1cm4iY2FuY2VsIn1jb25zdHJ1Y3RvcihsLGEpe3N1cGVyKGwse2lkOmEuaWQsc3RhdGVsZXNzOiEwfSksZnVuY3Rpb24gZWR0KGMsbCl7KGZ1bmN0aW9uIHRkdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJy''@;'; put 'put ''b3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLEpnZSksZnVuY3Rpb24gbmR0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiByZHQoYyl7dmFyIGw9ZnVuY3Rpb24gaWR0KGMsbCl7''@;'; put 'put ''aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1By''@;'; put 'put ''aW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVl''@;'; put 'put ''OmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywibmFtZSIsIiIpLHRoaXMubmFtZT1hLm5hbWUsdGhpcy5lbGVtZW50cy5wdXNoKG5ldyB0Nih0aGlzLmhvdCx7dHlwZToiYnV0dG9uIix2YWx1ZTokcSxjbGFzc05hbWU6Imh0VUlC''@;'; put 'put ''dXR0b24gaHRVSUJ1dHRvbk9LIixpZGVudGlmaWVyOkdULkJVVFRPTl9PS30pKSx0aGlzLmVsZW1lbnRzLnB1c2gobmV3IHQ2KHRoaXMuaG90LHt0eXBlOiJidXR0b24iLHZhbHVlOktxLGNsYXNzTmFtZToiaHRVSUJ1dHRvbiBodFVJQnV0dG9uQ2FuY2VsIixpZGVudGlmaWVyOkdULkJVVFRP''@;'; put 'put ''Tl9DQU5DRUx9KSksdGhpcy5yZWdpc3Rlckhvb2tzKCl9cmVnaXN0ZXJIb29rcygpe1luKHRoaXMuZWxlbWVudHMsbD0+e2wuYWRkTG9jYWxIb29rKCJjbGljayIsKGEsZCk9PmZ1bmN0aW9uIG9kdChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJu''@;'; put 'put ''IGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9KEpnZSx0aGlzLGFkdCkuY2FsbCh0aGlzLGEsZCkpfSl9Z2V0TWVudUl0ZW1EZXNjcmlwdG9yKCl7cmV0dXJue2tleTp0aGlz''@;'; put 'put ''LmlkLG5hbWU6dGhpcy5uYW1lLGlzQ29tbWFuZDohMSxkaXNhYmxlU2VsZWN0aW9uOiEwLGhpZGRlbjooKT0+dGhpcy5pc0hpZGRlbigpLHJlbmRlcmVyOihsLGEpPT4oVGkoYS5wYXJlbnROb2RlLCJodEZpbHRlcnNNZW51QWN0aW9uQmFyIiksWW4odGhpcy5lbGVtZW50cyxkPT5hLmFwcGVu''@;'; put 'put ''ZENoaWxkKGQuZWxlbWVudCkpLGEpfX1hY2NlcHQoKXt0aGlzLnJ1bkxvY2FsSG9va3MoImFjY2VwdCIpfWNhbmNlbCgpe3RoaXMucnVuTG9jYWxIb29rcygiY2FuY2VsIil9fWZ1bmN0aW9uIGFkdChjLGwpe2wub3B0aW9ucy5pZGVudGlmaWVyPT09WGdlLkJVVFRPTl9PSz90aGlzLmFjY2Vw''@;'; put 'put ''dCgpOnRoaXMuY2FuY2VsKCl9ZnVuY3Rpb24gclEoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHNkdChjKXt2YXIgbD1mdW5jdGlvbiBsZHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2''@;'; put 'put ''YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9''@;'; put 'put ''KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfVhnZT1HVDtjb25zdCBRZ2U9IkNvbmRp''@;'; put 'put ''dGlvbkNvbGxlY3Rpb24uZmlsdGVyaW5nU3RhdGVzIjtjbGFzcyBlNWV7Y29uc3RydWN0b3IobCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXTtyUSh0aGlzLCJob3QiLHZvaWQgMCksclEodGhpcywiaXNNYXBSZWdpc3Ry''@;'; put 'put ''YWJsZSIsdm9pZCAwKSxyUSh0aGlzLCJmaWx0ZXJpbmdTdGF0ZXMiLG5ldyBsUCksdGhpcy5ob3Q9bCx0aGlzLmlzTWFwUmVnaXN0cmFibGU9YSwhMD09PXRoaXMuaXNNYXBSZWdpc3RyYWJsZT90aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcChRZ2UsdGhpcy5maWx0ZXJp''@;'; put 'put ''bmdTdGF0ZXMpOnRoaXMuZmlsdGVyaW5nU3RhdGVzLmluaXQodGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TnVtYmVyT2ZJbmRleGVzKCkpfWlzRW1wdHkoKXtyZXR1cm4gMD09PXRoaXMuZ2V0RmlsdGVyZWRDb2x1bW5zKCkubGVuZ3RofWlzTWF0Y2gobCxhKXt2YXIgZDtjb25zdCBo''@;'; put 'put ''PXRoaXMuZmlsdGVyaW5nU3RhdGVzLmdldFZhbHVlQXRJbmRleChhKSxmPW51bGwhPT0oZD1oPy5jb25kaXRpb25zKSYmdm9pZCAwIT09ZD9kOltdLHY9aD8ub3BlcmF0aW9uO3JldHVybiB0aGlzLmlzTWF0Y2hJbkNvbmRpdGlvbnMoZixsLHYpfWlzTWF0Y2hJbkNvbmRpdGlvbnMobCxhKXty''@;'; put 'put ''ZXR1cm4hbC5sZW5ndGh8fGZ1bmN0aW9uIG0xdChjKXtpZighVlRbY10pdGhyb3cgRXJyb3IoYE9wZXJhdGlvbiB3aXRoIGlkICIke2N9IiBkb2VzIG5vdCBleGlzdC5gKTtjb25zdCBsPVZUW2NdLmZ1bmM7cmV0dXJuIGZ1bmN0aW9uKGEsZCl7cmV0dXJuIGwoYSxkKX19KGFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpuNikobCxhKX1hZGRDb25kaXRpb24obCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bjYsaD1hcmd1bWVudHMubGVuZ3RoPjM/YXJndW1lbnRz''@;'; put 'put ''WzNdOnZvaWQgMDtjb25zdCBmPXRoaXMuaG90LmdldENlbGxNZXRhKDAsbCkubG9jYWxlLHY9YS5hcmdzLm1hcChuZT0+InN0cmluZyI9PXR5cGVvZiBuZT9uZS50b0xvY2FsZUxvd2VyQ2FzZShmKTpuZSksTT1hLm5hbWV8fGEuY29tbWFuZC5rZXk7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZv''@;'; put 'put ''cmVBZGQiLGwpO2NvbnN0IEQ9dGhpcy5nZXRPcGVyYXRpb24obCk7aWYoRCl7aWYoRCE9PWQpdGhyb3cgRXJyb3IoZmxgVGhlIGNvbHVtbiBvZiBpbmRleCAke2x9IGhhcyBiZWVuIGFscmVhZHkgYXBwbGllZCB3aXRoIGEgXGAke0R9XGBceDIwCiAgICAgICAgZmlsdGVyIG9wZXJhdGlvbi4g''@;'; put 'put ''VXNlIFxgcmVtb3ZlQ29uZGl0aW9uc1xgIHRvIGNsZWFyIHRoZSBjdXJyZW50IGNvbmRpdGlvbnMgYW5kIHRoZW4gYWRkIG5ldyBvbmVzLlx4MjAKICAgICAgICBNaW5kIHRoYXQgeW91IGNhbm5vdCBtaXggZGlmZmVyZW50IHR5cGVzIG9mIG9wZXJhdGlvbnMgKGZvciBpbnN0YW5jZSwgaWYg''@;'; put 'put ''eW91IHVzZSBcYGNvbmp1bmN0aW9uXGAsXHgyMAogICAgICAgIHVzZSBpdCBjb25zZXF1ZW50bHkgZm9yIGEgcGFydGljdWxhciBjb2x1bW4pLmApfWVsc2UgaWYobWMoVlRbZF0pKXRocm93IG5ldyBFcnJvcihmbGBVbmV4cGVjdGVkIG9wZXJhdGlvbiBuYW1lZCBcYCR7ZH1cYC4gUG9zc2li''@;'; put 'put ''bGUgb25lcyBhcmVceDIwCiAgICAgICAgXGBkaXNqdW5jdGlvblxgIGFuZCBcYGNvbmp1bmN0aW9uXGAuYCk7Y29uc3QgWj10aGlzLmdldENvbmRpdGlvbnMobCk7MD09PVoubGVuZ3RoP3RoaXMuZmlsdGVyaW5nU3RhdGVzLnNldFZhbHVlQXRJbmRleChsLHtvcGVyYXRpb246ZCxjb25kaXRp''@;'; put 'put ''b25zOlt7bmFtZTpNLGFyZ3M6dixmdW5jOmU2KE0sdil9XX0saCk6Wi5wdXNoKHtuYW1lOk0sYXJnczp2LGZ1bmM6ZTYoTSx2KX0pLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJBZGQiLGwpfWdldENvbmRpdGlvbnMobCl7dmFyIGEsZDtyZXR1cm4gbnVsbCE9PShhPW51bGw9PT0oZD10aGlz''@;'; put 'put ''LmZpbHRlcmluZ1N0YXRlcy5nZXRWYWx1ZUF0SW5kZXgobCkpfHx2b2lkIDA9PT1kP3ZvaWQgMDpkLmNvbmRpdGlvbnMpJiZ2b2lkIDAhPT1hP2E6W119Z2V0T3BlcmF0aW9uKGwpe3ZhciBhO3JldHVybiBudWxsPT09KGE9dGhpcy5maWx0ZXJpbmdTdGF0ZXMuZ2V0VmFsdWVBdEluZGV4KGwp''@;'; put 'put ''KXx8dm9pZCAwPT09YT92b2lkIDA6YS5vcGVyYXRpb259Z2V0RmlsdGVyZWRDb2x1bW5zKCl7cmV0dXJuIHRoaXMuZmlsdGVyaW5nU3RhdGVzLmdldEVudHJpZXMoKS5tYXAobD0+e2xldFthXT1sO3JldHVybiBhfSl9Z2V0Q29sdW1uU3RhY2tQb3NpdGlvbihsKXtyZXR1cm4gdGhpcy5nZXRG''@;'; put 'put ''aWx0ZXJlZENvbHVtbnMoKS5pbmRleE9mKGwpfWV4cG9ydEFsbENvbmRpdGlvbnMoKXtyZXR1cm4gdGhpcy5maWx0ZXJpbmdTdGF0ZXMuZ2V0RW50cmllcygpLnJlZHVjZSgobCxhKT0+e2xldFtkLHtvcGVyYXRpb246aCxjb25kaXRpb25zOmZ9XT1hO3JldHVybiBsLnB1c2goe2NvbHVtbjpk''@;'; put 'put ''LG9wZXJhdGlvbjpoLGNvbmRpdGlvbnM6Zi5tYXAodj0+e2xldHtuYW1lOk0sYXJnczpEfT12O3JldHVybntuYW1lOk0sYXJnczpbLi4uRF19fSl9KSxsfSxbXSl9aW1wb3J0QWxsQ29uZGl0aW9ucyhsKXt0aGlzLmNsZWFuKCksbC5mb3JFYWNoKGE9PnthLmNvbmRpdGlvbnMuZm9yRWFjaChk''@;'; put 'put ''PT50aGlzLmFkZENvbmRpdGlvbihhLmNvbHVtbixkKSl9KX1yZW1vdmVDb25kaXRpb25zKGwpe3RoaXMucnVuTG9jYWxIb29rcygiYmVmb3JlUmVtb3ZlIixsKSx0aGlzLmZpbHRlcmluZ1N0YXRlcy5jbGVhclZhbHVlKGwpLHRoaXMucnVuTG9jYWxIb29rcygiYWZ0ZXJSZW1vdmUiLGwpfWNs''@;'; put 'put ''ZWFuKCl7dGhpcy5ydW5Mb2NhbEhvb2tzKCJiZWZvcmVDbGVhbiIpLHRoaXMuZmlsdGVyaW5nU3RhdGVzLmNsZWFyKCksdGhpcy5ydW5Mb2NhbEhvb2tzKCJhZnRlckNsZWFuIil9aGFzQ29uZGl0aW9ucyhsLGEpe2NvbnN0IGQ9dGhpcy5nZXRDb25kaXRpb25zKGwpO3JldHVybiBhP2Quc29t''@;'; put 'put ''ZShoPT5oLm5hbWU9PT1hKTpkLmxlbmd0aD4wfWRlc3Ryb3koKXt0aGlzLmlzTWFwUmVnaXN0cmFibGUmJnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAoUWdlKSx0aGlzLmZpbHRlcmluZ1N0YXRlcz1udWxsLHRoaXMuY2xlYXJMb2NhbEhvb2tzKCl9fXhsKGU1ZSxf''@;'; put 'put ''MSk7Y29uc3QgdDVlPWU1ZTtmdW5jdGlvbiBuNWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGNkdChjKXt2YXIgbD1mdW5jdGlvbiB1ZHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2''@;'; put 'put ''YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9''@;'; put 'put ''KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IHI1ZT1jbGFzcyBkZHR7Y29u''@;'; put 'put ''c3RydWN0b3IobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOigpPT5bXTtuNWUodGhpcywiY29uZGl0aW9uQ29sbGVjdGlvbiIsdm9pZCAwKSxuNWUodGhpcywiY29sdW1uRGF0YUZhY3RvcnkiLHZvaWQgMCksdGhpcy5jb25k''@;'; put 'put ''aXRpb25Db2xsZWN0aW9uPWwsdGhpcy5jb2x1bW5EYXRhRmFjdG9yeT1hfWZpbHRlcigpe2xldCBsPVtdO3JldHVybiBZbih0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0RmlsdGVyZWRDb2x1bW5zKCksKGEsZCk9PntsZXQgaD10aGlzLmNvbHVtbkRhdGFGYWN0b3J5KGEpO2QmJihoPXRo''@;'; put 'put ''aXMuX2dldEludGVyc2VjdERhdGEoaCxsKSksbD10aGlzLmZpbHRlckJ5Q29sdW1uKGEsaCl9KSxsfWZpbHRlckJ5Q29sdW1uKGwpe2NvbnN0IGQ9W107cmV0dXJuIFluKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXSxoPT57dm9pZCAw''@;'; put 'put ''IT09aCYmdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmlzTWF0Y2goaCxsKSYmZC5wdXNoKGgpfSksZH1fZ2V0SW50ZXJzZWN0RGF0YShsLGEpe2NvbnN0IGQ9W107cmV0dXJuIFluKGEsaD0+e2NvbnN0IGY9aC5tZXRhLnZpc3VhbFJvdzt2b2lkIDAhPT1sW2ZdJiYoZFtmXT1sW2ZdKX0pLGR9''@;'; put 'put ''fTtmdW5jdGlvbiBfOShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gcGR0KGMpe3ZhciBsPWZ1bmN0aW9uIGdkdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8''@;'; put 'put ''fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0''@;'; put 'put ''dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gaVEoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciB6Rj1uZXcgV2Vha1NldDtjbGFzcyBpNWV7Y29uc3RydWN0b3IobCxhKXts''@;'; put 'put ''ZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06KCk9PltdOyhmdW5jdGlvbiBoZHQoYyxsKXsoZnVuY3Rpb24gZmR0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUg''@;'; put 'put ''cHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KSh0aGlzLHpGKSxfOSh0aGlzLCJob3QiLHZvaWQgMCksXzkodGhpcywiY29uZGl0aW9uQ29sbGVjdGlvbiIsdm9pZCAwKSxfOSh0aGlzLCJjb2x1bW5EYXRhRmFjdG9yeSIsdm9pZCAwKSxfOSh0''@;'; put 'put ''aGlzLCJjaGFuZ2VzIixbXSksXzkodGhpcywiZ3JvdXBpbmciLCExKSxfOSh0aGlzLCJsYXRlc3RFZGl0ZWRDb2x1bW5Qb3NpdGlvbiIsLTEpLF85KHRoaXMsImxhdGVzdE9yZGVyU3RhY2siLFtdKSx0aGlzLmhvdD1sLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj1hLHRoaXMuY29sdW1uRGF0''@;'; put 'put ''YUZhY3Rvcnk9ZCx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJiZWZvcmVSZW1vdmUiLGg9PmlRKHpGLHRoaXMsbWR0KS5jYWxsKHRoaXMsaCkpLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRMb2NhbEhvb2soImFmdGVyUmVtb3ZlIixoPT50aGlzLnVwZGF0ZVN0''@;'; put 'put ''YXRlc0F0Q29sdW1uKGgpKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkTG9jYWxIb29rKCJhZnRlckFkZCIsaD0+dGhpcy51cGRhdGVTdGF0ZXNBdENvbHVtbihoKSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZExvY2FsSG9vaygiYmVmb3JlQ2xlYW4iLCgpPT5pUSh6Rix0aGlz''@;'; put 'put ''LHZkdCkuY2FsbCh0aGlzKSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZExvY2FsSG9vaygiYWZ0ZXJDbGVhbiIsKCk9PmlRKHpGLHRoaXMsYmR0KS5jYWxsKHRoaXMpKX1ncm91cENoYW5nZXMoKXt0aGlzLmdyb3VwaW5nPSEwfWZsdXNoKCl7dGhpcy5ncm91cGluZz0hMSxZbih0aGlz''@;'; put 'put ''LmNoYW5nZXMsbD0+e3RoaXMudXBkYXRlU3RhdGVzQXRDb2x1bW4obCl9KSx0aGlzLmNoYW5nZXMubGVuZ3RoPTB9dXBkYXRlU3RhdGVzQXRDb2x1bW4obCxhKXt2YXIgZD10aGlzO2lmKHRoaXMuZ3JvdXBpbmcpcmV0dXJuIHZvaWQoLTE9PT10aGlzLmNoYW5nZXMuaW5kZXhPZihsKSYmdGhp''@;'; put 'put ''cy5jaGFuZ2VzLnB1c2gobCkpO2NvbnN0IGg9dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmV4cG9ydEFsbENvbmRpdGlvbnMoKTtsZXQgZj10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0Q29sdW1uU3RhY2tQb3NpdGlvbihsKTstMT09PWYmJihmPXRoaXMubGF0ZXN0RWRpdGVkQ29sdW1u''@;'; put 'put ''UG9zaXRpb24pO2NvbnN0IHY9aC5zbGljZSgwLGYpLE09aC5zbGljZShmKTtNLmxlbmd0aCYmTVswXS5jb2x1bW49PT1sJiZNLnNoaWZ0KCk7Y29uc3QgRD1BMmUoZnVuY3Rpb24obmUsY2Upe2xldCBiZT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVu''@;'; put 'put ''dHNbMl06W107Y29uc3QgRWU9bmV3IHQ1ZShkLmhvdCwhMSksQmU9W10uY29uY2F0KG5lLGJlKTtFZS5pbXBvcnRBbGxDb25kaXRpb25zKEJlKTtjb25zdCBxZT1kLmNvbHVtbkRhdGFGYWN0b3J5KGNlKTtsZXQgbnQ7bnQ9RWUuaXNFbXB0eSgpP3FlOm5ldyByNWUoRWUsbXQ9PmQuY29sdW1u''@;'; put 'put ''RGF0YUZhY3RvcnkobXQpKS5maWx0ZXIoKSxudD15cyhudCxtdD0+bXQubWV0YS52aXN1YWxSb3cpO2NvbnN0IGx0PWpUKG50KTtyZXR1cm4gRWUuZGVzdHJveSgpLEFtKHFlLG10PT5sdChtdC5tZXRhLnZpc3VhbFJvdykpfSkodiksWj1bXS5jb25jYXQodGhpcy5jb25kaXRpb25Db2xsZWN0''@;'; put 'put ''aW9uLmdldENvbmRpdGlvbnMobCkpO3RoaXMucnVuTG9jYWxIb29rcygidXBkYXRlIix7ZWRpdGVkQ29uZGl0aW9uU3RhY2s6e2NvbHVtbjpsLGNvbmRpdGlvbnM6Wn0sZGVwZW5kZW50Q29uZGl0aW9uU3RhY2tzOk0sZmlsdGVyZWRSb3dzRmFjdG9yeTpELGNvbmRpdGlvbkFyZ3NDaGFuZ2U6''@;'; put 'put ''YX0pfWRlc3Ryb3koKXt0aGlzLmNsZWFyTG9jYWxIb29rcygpLHFhKHRoaXMsKGwsYSk9Pnt0aGlzW2FdPW51bGx9KX19ZnVuY3Rpb24gbWR0KGMpe3RoaXMubGF0ZXN0RWRpdGVkQ29sdW1uUG9zaXRpb249dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmdldENvbHVtblN0YWNrUG9zaXRpb24o''@;'; put 'put ''Yyl9ZnVuY3Rpb24gdmR0KCl7dGhpcy5sYXRlc3RPcmRlclN0YWNrPXRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5nZXRGaWx0ZXJlZENvbHVtbnMoKX1mdW5jdGlvbiBiZHQoKXtZbih0aGlzLmxhdGVzdE9yZGVyU3RhY2ssYz0+e3RoaXMudXBkYXRlU3RhdGVzQXRDb2x1bW4oYyl9KX14bChp''@;'; put 'put ''NWUsXzEpO2NvbnN0IHlkdD1pNWUsJFQ9ImZpbHRlcnMiO2Z1bmN0aW9uIG9RKGMsbCxhKXtvNWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIG81ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVu''@;'; put 'put ''dHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gS1QoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFNkdChjKXt2YXIgbD1mdW5jdGlvbiBNZHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAh''@;'; put 'put ''PT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJl''@;'; put 'put ''cikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIGFRKGMsbCxh''@;'; put 'put ''KXtyZXR1cm4gYy5zZXQoWmQoYyxsKSxhKSxhfWZ1bmN0aW9uIFoyKGMsbCl7cmV0dXJuIGMuZ2V0KFpkKGMsbCkpfWZ1bmN0aW9uIFpkKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1jb25zdCBzUT0iZmlsdGVycyIsYTVlPXNRO3ZhciBQZz1uZXcgV2Vha01hcCxsUT1uZXcgV2Vha01hcCxydz1uZXcgV2Vha01hcCxMaD1uZXcgV2Vha1NldDtjbGFzcyBFZHQgZXh0ZW5k''@;'; put 'put ''cyBGc3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gc1F9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjUwfXN0YXRpYyBnZXQgUExVR0lOX0RFUFMoKXtyZXR1cm5bInBsdWdpbjpEcm9wZG93bk1lbnUiLCJwbHVnaW46SGlkZGVuUm93cyIsImNlbGwtdHlwZTpj''@;'; put 'put ''aGVja2JveCJdfWNvbnN0cnVjdG9yKGwpe3ZhciBhO3N1cGVyKGwpLGE9dGhpcyxmdW5jdGlvbiBDZHQoYyxsKXtvNWUoYyxsKSxsLmFkZChjKX0odGhpcyxMaCksS1QodGhpcywiZHJvcGRvd25NZW51UGx1Z2luIixudWxsKSxLVCh0aGlzLCJjb25kaXRpb25Db2xsZWN0aW9uIixudWxsKSxL''@;'; put 'put ''VCh0aGlzLCJjb25kaXRpb25VcGRhdGVPYnNlcnZlciIsbnVsbCksS1QodGhpcywiY29tcG9uZW50cyIsbmV3IE1hcChbWyJmaWx0ZXJfYnlfY29uZGl0aW9uIixudWxsXSxbImZpbHRlcl9vcGVyYXRvcnMiLG51bGxdLFsiZmlsdGVyX2J5X2NvbmRpdGlvbjIiLG51bGxdLFsiZmlsdGVyX2J5''@;'; put 'put ''X3ZhbHVlIixudWxsXSxbImZpbHRlcl9hY3Rpb25fYmFyIixudWxsXV0pKSxLVCh0aGlzLCJmaWx0ZXJzUm93c01hcCIsbnVsbCksb1EodGhpcyxQZyx2b2lkIDApLG9RKHRoaXMsbFEsbmV3IFdlYWtTZXQpLG9RKHRoaXMscncsW10pLHRoaXMuaG90LmFkZEhvb2soImFmdGVyR2V0Q29sSGVh''@;'; put 'put ''ZGVyIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBaZChMaCxhLExkdCkuY2FsbChhLC4uLmgpfSl9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygp''@;'; put 'put ''W3NRXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO2lmKHRoaXMuZW5hYmxlZClyZXR1cm47dGhpcy5maWx0ZXJzUm93c01hcD10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUsbmV3IFdFKSx0aGlzLmRyb3Bkb3duTWVudVBsdWdpbj10aGlzLmhv''@;'; put 'put ''dC5nZXRQbHVnaW4oImRyb3Bkb3duTWVudSIpO2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5kcm9wZG93bk1lbnUsZD1hJiZhLnVpQ29udGFpbmVyfHx0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keSxoPU09PihNLmFkZExvY2FsSG9vaygiYWNjZXB0IiwoKT0+WmQoTGgsdGhpcyxz''@;'; put 'put ''NWUpLmNhbGwodGhpcywiYWNjZXB0IikpLE0uYWRkTG9jYWxIb29rKCJjYW5jZWwiLCgpPT5aZChMaCx0aGlzLHM1ZSkuY2FsbCh0aGlzLCJjYW5jZWwiKSksTS5hZGRMb2NhbEhvb2soImNoYW5nZSIsRD0+WmQoTGgsdGhpcyxSZHQpLmNhbGwodGhpcyxNLEQpKSxNKSxmPSgpPT5gJHt0aGlz''@;'; put 'put ''LmhvdC5nZXRUcmFuc2xhdGVkUGhyYXNlKFVxKX06YDtpZighdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIpKXtjb25zdCBNPW5ldyBLSih0aGlzLmhvdCx7aWQ6ImZpbHRlcl9ieV9jb25kaXRpb24iLG5hbWU6ZixhZGRTZXBhcmF0b3I6ITEsbWVudUNvbnRhaW5l''@;'; put 'put ''cjpkfSk7TS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLCgpPT5aZChMaCx0aGlzLGw1ZSkuY2FsbCh0aGlzKSksdGhpcy5jb21wb25lbnRzLnNldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIsaChNKSl9aWYodGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX29wZXJhdG9ycyIpfHx0aGlzLmNv''@;'; put 'put ''bXBvbmVudHMuc2V0KCJmaWx0ZXJfb3BlcmF0b3JzIixuZXcgSTF0KHRoaXMuaG90LHtpZDoiZmlsdGVyX29wZXJhdG9ycyIsbmFtZToiT3BlcmF0b3JzIn0pKSwhdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbjIiKSl7Y29uc3QgTT1uZXcgS0oodGhpcy5ob3Qse2lk''@;'; put 'put ''OiJmaWx0ZXJfYnlfY29uZGl0aW9uMiIsbmFtZToiIixhZGRTZXBhcmF0b3I6ITAsbWVudUNvbnRhaW5lcjpkfSk7TS5hZGRMb2NhbEhvb2soImFmdGVyQ2xvc2UiLCgpPT5aZChMaCx0aGlzLGw1ZSkuY2FsbCh0aGlzKSksdGhpcy5jb21wb25lbnRzLnNldCgiZmlsdGVyX2J5X2NvbmRpdGlv''@;'; put 'put ''bjIiLGgoTSkpfWlmKHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV92YWx1ZSIpfHx0aGlzLmNvbXBvbmVudHMuc2V0KCJmaWx0ZXJfYnlfdmFsdWUiLGgobmV3IFgxdCh0aGlzLmhvdCx7aWQ6ImZpbHRlcl9ieV92YWx1ZSIsbmFtZTooKT0+YCR7dGhpcy5ob3QuZ2V0VHJhbnNsYXRl''@;'; put 'put ''ZFBocmFzZShacSl9OmB9KSkpLHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9hY3Rpb25fYmFyIil8fHRoaXMuY29tcG9uZW50cy5zZXQoImZpbHRlcl9hY3Rpb25fYmFyIixoKG5ldyBHVCh0aGlzLmhvdCx7aWQ6ImZpbHRlcl9hY3Rpb25fYmFyIixuYW1lOiJBY3Rpb24gYmFyIn0pKSks''@;'; put 'put ''dGhpcy5jb25kaXRpb25Db2xsZWN0aW9ufHwodGhpcy5jb25kaXRpb25Db2xsZWN0aW9uPW5ldyB0NWUodGhpcy5ob3QpKSx0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyfHwodGhpcy5jb25kaXRpb25VcGRhdGVPYnNlcnZlcj1uZXcgeWR0KHRoaXMuaG90LHRoaXMuY29uZGl0aW9uQ29s''@;'; put 'put ''bGVjdGlvbixNPT50aGlzLmdldERhdGFNYXBBdENvbHVtbihNKSksdGhpcy5jb25kaXRpb25VcGRhdGVPYnNlcnZlci5hZGRMb2NhbEhvb2soInVwZGF0ZSIsTT0+WmQoTGgsdGhpcyxPZHQpLmNhbGwodGhpcyxNKSkpLHRoaXMuY29tcG9uZW50cy5mb3JFYWNoKE09Pk0uc2hvdygpKSx0aGlz''@;'; put 'put ''LmFkZEhvb2soImFmdGVyRHJvcGRvd25NZW51RGVmYXVsdE9wdGlvbnMiLGZ1bmN0aW9uKCl7Zm9yKHZhciBNPWFyZ3VtZW50cy5sZW5ndGgsRD1uZXcgQXJyYXkoTSksWj0wO1o8TTtaKyspRFtaXT1hcmd1bWVudHNbWl07cmV0dXJuIFpkKExoLGwsSWR0KS5jYWxsKGwsLi4uRCl9KSx0aGlz''@;'; put 'put ''LmFkZEhvb2soImJlZm9yZURyb3Bkb3duTWVudVNob3ciLCgpPT5aZChMaCx0aGlzLERkdCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckRyb3Bkb3duTWVudVNob3ciLCgpPT5aZChMaCx0aGlzLEFkdCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckRyb3Bkb3duTWVu''@;'; put 'put ''dUhpZGUiLCgpPT5aZChMaCx0aGlzLGtkdCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckNoYW5nZSIsTT0+WmQoTGgsdGhpcyxUZHQpLmNhbGwodGhpcyxNKSksdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5kcm9wZG93bk1lbnUmJnRoaXMuZHJvcGRvd25NZW51UGx1Z2luJiYodGhp''@;'; put 'put ''cy5kcm9wZG93bk1lbnVQbHVnaW4uZGlzYWJsZVBsdWdpbigpLHRoaXMuZHJvcGRvd25NZW51UGx1Z2luLmVuYWJsZVBsdWdpbigpKSwhWjIoUGcsdGhpcykmJnRoaXMuZHJvcGRvd25NZW51UGx1Z2luLmVuYWJsZWQpe2NvbnN0IE09W3tmb2N1czooKT0+e2NvbnN0IFo9WjIoUGcsdGhpcyku''@;'; put 'put ''Z2V0TWVudSgpLG5lPVouZ2V0TmF2aWdhdG9yKCksY2U9WjIoUGcsdGhpcykuZ2V0TGFzdE1lbnVQYWdlKCk7Wi5mb2N1cygpLGNlPjA/bmUuc2V0Q3VycmVudFBhZ2UoY2UpOm5lLnRvRmlyc3RJdGVtKCl9fSwuLi5BcnJheS5mcm9tKHRoaXMuY29tcG9uZW50cykubWFwKFo9PntsZXRbLG5l''@;'; put 'put ''XT1aO3JldHVybiBuZS5nZXRFbGVtZW50cygpfSkuZmxhdCgpXTthUShQZyx0aGlzLGZ1bmN0aW9uIHdkdChjLGwpe2xldCBkLGE9LTE7Y29uc3QgaD1mdW5jdGlvbiBfZHQoYyl7cmV0dXJuIEo0ZSh7aW5pdGlhbFBhZ2U6MCxzaXplOigpPT5jLmxlbmd0aCxvbkl0ZW1TZWxlY3Q6KGEsZCk9''@;'; put 'put ''Pntjb25zdCBoPWNbYV07cmV0dXJuIGggaW5zdGFuY2VvZiBXVD9kOiEoaC5lbGVtZW50JiYhVjcoaC5lbGVtZW50KSkmJnZvaWQgaC5mb2N1cygpfX0pfShsKSxmPWNlPT4oKT0+e2QuaXNPcGVuZWQoKSYmZC5nZXRLZXlib2FyZFNob3J0Y3V0c0N0cmwoKS5saXN0ZW4oJFQpLGguc2V0Q3Vy''@;'; put 'put ''cmVudFBhZ2UobC5pbmRleE9mKGNlKSl9O2Z1bmN0aW9uIHYoY2Upe2NvbnN0IGJlPWQuZ2V0S2V5Ym9hcmRTaG9ydGN1dHNDdHJsKCksRWU9Y2UuZ2V0S2V5Ym9hcmRTaG9ydGN1dHNDdHJsKCk7aC5jbGVhcigpLEVlLmFkZEN1c3RvbVNob3J0Y3V0cyhbe2tleXM6W1siVGFiIl0sWyJTaGlm''@;'; put 'put ''dCIsIlRhYiJdXSxmb3J3YXJkVG9Db250ZXh0OmJlLmdldENvbnRleHQoJFQpLGNhbGxiYWNrOigpPT57Y2UuaXNTdWJNZW51KCkmJmNlLmNsb3NlKCksYmUubGlzdGVuKCRUKX19XSksIWNlLmlzU3ViTWVudSgpJiZiZS5hZGRDdXN0b21TaG9ydGN1dHMoW3trZXlzOltbIlRhYiJdLFsiU2hp''@;'; put 'put ''ZnQiLCJUYWIiXV0sY2FsbGJhY2s6QmU9Pntjb25zdCBxZT1kLmdldE5hdmlnYXRvcigpO3FlLmdldEN1cnJlbnRQYWdlKCk+LTEmJihhPXFlLmdldEN1cnJlbnRQYWdlKCkpLHFlLmNsZWFyKCksQmUuc2hpZnRLZXk/aC50b1ByZXZpb3VzSXRlbSgpOmgudG9OZXh0SXRlbSgpfX0se2tleXM6''@;'; put 'put ''W1siRXNjYXBlIl1dLGNhbGxiYWNrOigpPT57ZC5jbG9zZSgpfX0se2tleXM6W1siRW50ZXIiXSxbIlNwYWNlIl1dLHByZXZlbnREZWZhdWx0OiExLGNhbGxiYWNrOkJlPT57Y29uc3QgcWU9bFtoLmdldEN1cnJlbnRQYWdlKCldO3FlIGluc3RhbmNlb2YgTlQmJihxZS5vcGVuT3B0aW9ucygp''@;'; put 'put ''LEJlLnByZXZlbnREZWZhdWx0KCkpLHFlIGluc3RhbmNlb2YgVVQmJihxZS5hY3RpdmF0ZSgpLEJlLnByZXZlbnREZWZhdWx0KCkpLHFlIGluc3RhbmNlb2YgUmh8fEJlLnByZXZlbnREZWZhdWx0KCl9fV0sJFQpfWZ1bmN0aW9uIEQoY2Upe2NlLmFkZExvY2FsSG9vaygiYWZ0ZXJTZWxlY3Rp''@;'; put 'put ''b25DaGFuZ2UiLGJlPT57YmUua2V5LnN0YXJ0c1dpdGgoImZpbHRlcl8iKXx8aC5jbGVhcigpfSksY2UuYWRkTG9jYWxIb29rKCJhZnRlclN1Ym1lbnVPcGVuIix2KSxjZS5hZGRMb2NhbEhvb2soImFmdGVyT3BlbiIsdiksZD1jZX1yZXR1cm4gbC5mb3JFYWNoKGNlPT57Y2UgaW5zdGFuY2Vv''@;'; put 'put ''ZiBSaCYmKGNlLmFkZExvY2FsSG9vaygiY2xpY2siLGYoY2UpKSxjZS5hZGRMb2NhbEhvb2soImZvY3VzIixmKGNlKSksY2UuYWRkTG9jYWxIb29rKCJhZnRlckNsb3NlIixmKGNlKSkpfSksRChjKSx7Li4uaCxsaXN0ZW46ZnVuY3Rpb24gTSgpe2QuZm9jdXMoKSxkLmdldEtleWJvYXJkU2hv''@;'; put 'put ''cnRjdXRzQ3RybCgpLmxpc3RlbigkVCl9LHNldE1lbnU6RCxnZXRNZW51OmZ1bmN0aW9uIFooKXtyZXR1cm4gZH0sZ2V0TGFzdE1lbnVQYWdlOmZ1bmN0aW9uIG5lKCl7cmV0dXJuIGF9fX0odGhpcy5kcm9wZG93bk1lbnVQbHVnaW4ubWVudSxNKSk7Y29uc3QgRD1aPT57WjIoUGcsdGhpcyku''@;'; put 'put ''bGlzdGVuKCksWi5wcmV2ZW50RGVmYXVsdCgpLGFfKFoua2V5Q29kZSwiVEFCIikmJihaLnNoaWZ0S2V5P1oyKFBnLHRoaXMpLnRvUHJldmlvdXNJdGVtKCk6WjIoUGcsdGhpcykudG9OZXh0SXRlbSgpKX07dGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X3ZhbHVlIikuYWRkTG9jYWxI''@;'; put 'put ''b29rKCJsaXN0VGFiS2V5ZG93biIsRCksdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIpLmFkZExvY2FsSG9vaygic2VsZWN0VGFiS2V5ZG93biIsRCl9dGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt2''@;'; put 'put ''YXIgbDt0aGlzLmVuYWJsZWQmJihudWxsIT09KGw9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4pJiZ2b2lkIDAhPT1sJiZsLmVuYWJsZWQmJnRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnUuY2xlYXJMb2NhbEhvb2tzKCksdGhpcy5jb21wb25lbnRzLmZvckVhY2goKGEsZCk9PnthLmRlc3Ry''@;'; put 'put ''b3koKSx0aGlzLmNvbXBvbmVudHMuc2V0KGQsbnVsbCl9KSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZGVzdHJveSgpLHRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbj1udWxsLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSksdGhpcy51bnJl''@;'; put 'put ''Z2lzdGVyU2hvcnRjdXRzKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0KHtrZXlzOltbIkFsdCIsIkEiXV0sc3RvcFByb3BhZ2F0aW9uOiEwLGNhbGxi''@;'; put 'put ''YWNrOigpPT57Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZCgpO3RoaXMuY2xlYXJDb25kaXRpb25zKCksdGhpcy5maWx0ZXIoKSxsJiZ0aGlzLmhvdC5zZWxlY3RDZWxscyhsKX0sZ3JvdXA6YTVlfSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdl''@;'; put 'put ''cigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKGE1ZSl9YWRkQ29uZGl0aW9uKGwsYSxkKXtsZXQgaD1hcmd1bWVudHMubGVuZ3RoPjMmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106bjY7Y29uc3QgZj10aGlzLmhvdC50b1BoeXNpY2FsQ29s''@;'; put 'put ''dW1uKGwpO3RoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5hZGRDb25kaXRpb24oZix7Y29tbWFuZDp7a2V5OmF9LGFyZ3M6ZH0saCl9cmVtb3ZlQ29uZGl0aW9ucyhsKXtjb25zdCBhPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCk7dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLnJlbW92ZUNv''@;'; put 'put ''bmRpdGlvbnMoYSl9Y2xlYXJDb25kaXRpb25zKGwpe2lmKHZvaWQgMD09PWwpdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmNsZWFuKCk7ZWxzZXtjb25zdCBhPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCk7dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLnJlbW92ZUNvbmRpdGlvbnMoYSl9''@;'; put 'put ''fWltcG9ydENvbmRpdGlvbnMobCl7dGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmltcG9ydEFsbENvbmRpdGlvbnMobCl9ZXhwb3J0Q29uZGl0aW9ucygpe3JldHVybiB0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZXhwb3J0QWxsQ29uZGl0aW9ucygpfWZpbHRlcigpe2NvbnN0e25hdmlnYWJs''@;'; put 'put ''ZUhlYWRlcnM6bH09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSxhPXRoaXMuX2NyZWF0ZURhdGFGaWx0ZXIoKSxkPSF0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uaXNFbXB0eSgpO2xldCBoPVtdO2NvbnN0IGY9dGhpcy5leHBvcnRDb25kaXRpb25zKCk7aWYoITEhPT10aGlzLmhvdC5ydW5Ib29r''@;'; put 'put ''cygiYmVmb3JlRmlsdGVyIixmLFoyKHJ3LHRoaXMpKSl7aWYoZCl7Y29uc3QgTT1bXTt0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigoKT0+e3RoaXMuZmlsdGVyc1Jvd3NNYXAuY2xlYXIoKSxoPXlzKGEuZmlsdGVyKCksWj0+Wi5tZXRhLnZpc3VhbFJvdyk7Y29uc3QgRD1qVChoKTskbyh0aGlz''@;'; put 'put ''LmhvdC5jb3VudFNvdXJjZVJvd3MoKS0xLFo9PntEKFopfHxNLnB1c2goWil9KSxZbihNLFo9Pnt0aGlzLmZpbHRlcnNSb3dzTWFwLnNldFZhbHVlQXRJbmRleChaLCEwKX0pfSwhMCksIWwmJiFoLmxlbmd0aCYmdGhpcy5ob3QuZGVzZWxlY3RDZWxsKCl9ZWxzZSB0aGlzLmZpbHRlcnNSb3dz''@;'; put 'put ''TWFwLmNsZWFyKCk7YVEocncsdGhpcyx0aGlzLmV4cG9ydENvbmRpdGlvbnMoKSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyRmlsdGVyIixmKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuaG90LnJlbmRlcigpfWVsc2UgdGhpcy5pbXBvcnRDb25kaXRpb25zKFoy''@;'; put 'put ''KHJ3LHRoaXMpKTt0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZCgpJiZ0aGlzLmhvdC5zZWxlY3RDZWxsKGw/LTE6MCx0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmhpZ2hsaWdodC5jb2wpfWdldFNlbGVjdGVkQ29sdW1uKCl7dmFyIGw7Y29uc3QgYT1udWxsPT09KGw9dGhp''@;'; put 'put ''cy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSl8fHZvaWQgMD09PWw/dm9pZCAwOmwuaGlnaGxpZ2h0O3JldHVybiBhP3t2aXN1YWxJbmRleDphLmNvbCxwaHlzaWNhbEluZGV4OnRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oYS5jb2wpfTpudWxsfWdldERhdGFNYXBBdENvbHVtbihsKXtj''@;'; put 'put ''b25zdCBhPXRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGwpLGQ9W107cmV0dXJuIFluKHRoaXMuaG90LmdldFNvdXJjZURhdGFBdENvbChhKSwoaCxmKT0+e3ZhciB2O2NvbnN0e3JvdzpNLGNvbDpELHZpc3VhbENvbDpaLHZpc3VhbFJvdzpuZSx0eXBlOmNlLGluc3RhbmNlOmJlLGRhdGVGb3Jt''@;'; put 'put ''YXQ6RWUsbG9jYWxlOkJlfT10aGlzLmhvdC5nZXRDZWxsTWV0YShmLGEpLHFlPW51bGwhPT0odj10aGlzLmhvdC5nZXREYXRhQXRDZWxsKHRoaXMuaG90LnRvVmlzdWFsUm93KGYpLGEpKSYmdm9pZCAwIT09dj92Omg7ZC5wdXNoKHttZXRhOntyb3c6TSxjb2w6RCx2aXN1YWxDb2w6Wix2aXN1''@;'; put 'put ''YWxSb3c6bmUsdHlwZTpjZSxpbnN0YW5jZTpiZSxkYXRlRm9ybWF0OkVlLGxvY2FsZTpCZX0sdmFsdWU6UUoocWUpfSl9KSxkfXVwZGF0ZVZhbHVlQ29tcG9uZW50Q29uZGl0aW9uKGwpe2NvbnN0IGQ9ZVEodGhpcy5ob3QuZ2V0RGF0YUF0Q29sKGwpKTt0aGlzLmNvbmRpdGlvblVwZGF0ZU9i''@;'; put 'put ''c2VydmVyLnVwZGF0ZVN0YXRlc0F0Q29sdW1uKGwsZCl9cmVzdG9yZUNvbXBvbmVudHMobCl7dmFyIGE7Y29uc3QgZD1udWxsPT09KGE9dGhpcy5nZXRTZWxlY3RlZENvbHVtbigpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5waHlzaWNhbEluZGV4O2wuZm9yRWFjaChoPT57aC5pc0hpZGRlbigp''@;'; put 'put ''fHxoLnJlc3RvcmVTdGF0ZShkKX0pLHRoaXMudXBkYXRlRGVwZW5kZW50Q29tcG9uZW50c1Zpc2liaWxpdHkoKX1nZXRPcGVyYXRpb25CYXNlZE9uQXJndW1lbnRzKGwsYSxkLGgpe2xldCBmPWw7cmV0dXJuIGY9PT1WRiYmYS5jb21tYW5kLmtleSE9PVQwJiZkLmNvbW1hbmQua2V5IT09VDAm''@;'; put 'put ''JmguY29tbWFuZC5rZXkhPT1UMD9mPVhKOmguY29tbWFuZC5rZXkhPT1UMCYmKGEuY29tbWFuZC5rZXk9PT1UMHx8ZC5jb21tYW5kLmtleT09PVQwKSYmKGY9bjYpLGZ9c2V0TGlzdGVuaW5nRHJvcGRvd25NZW51KCl7dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4mJnRoaXMuZHJvcGRvd25NZW51''@;'; put 'put ''UGx1Z2luLnNldExpc3RlbmluZygpfXVwZGF0ZURlcGVuZGVudENvbXBvbmVudHNWaXNpYmlsaXR5KCl7Y29uc3QgbD10aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uIikse2NvbW1hbmQ6YX09bC5nZXRTdGF0ZSgpLGQ9W3RoaXMuY29tcG9uZW50cy5nZXQoImZpbHRl''@;'; put 'put ''cl9ieV9jb25kaXRpb24yIiksdGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX29wZXJhdG9ycyIpXTthLnNob3dPcGVyYXRvcnM/dGhpcy5zaG93Q29tcG9uZW50cyguLi5kKTp0aGlzLmhpZGVDb21wb25lbnRzKC4uLmQpfV9jcmVhdGVEYXRhRmlsdGVyKCl7cmV0dXJuIG5ldyByNWUoYXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnRoaXMuY29uZGl0aW9uQ29sbGVjdGlvbixhPT50aGlzLmdldERhdGFNYXBBdENvbHVtbihhKSl9Z2V0SW5kZXhlc09mQ29tcG9uZW50cygpe2NvbnN0IGw9W107aWYoIXRoaXMuZHJvcGRvd25NZW51''@;'; put 'put ''UGx1Z2luKXJldHVybiBsO2NvbnN0IGE9dGhpcy5kcm9wZG93bk1lbnVQbHVnaW4ubWVudTtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gWW4oaCx2PT57WW4oYS5tZW51SXRlbXMsKE0sRCk9PntN''@;'; put 'put ''LmtleT09PXYuZ2V0TWVudUl0ZW1EZXNjcmlwdG9yKCkua2V5JiZsLnB1c2goRCl9KX0pLGx9Y2hhbmdlQ29tcG9uZW50c1Zpc2liaWxpdHkoKXtsZXQgbD0hKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdO2lmKCF0aGlzLmRyb3Bkb3du''@;'; put 'put ''TWVudVBsdWdpbilyZXR1cm47Y29uc3QgZD10aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5tZW51LmhvdE1lbnUsaD1kLmdldFBsdWdpbigiaGlkZGVuUm93cyIpO2Zvcih2YXIgZj1hcmd1bWVudHMubGVuZ3RoLHY9bmV3IEFycmF5KGY+MT9mLTE6MCksTT0xO008ZjtNKyspdltNLTFdPWFyZ3Vt''@;'; put 'put ''ZW50c1tNXTtjb25zdCBEPXRoaXMuZ2V0SW5kZXhlc09mQ29tcG9uZW50cyguLi52KTtsP2guc2hvd1Jvd3MoRCk6aC5oaWRlUm93cyhEKSxkLnJlbmRlcigpfWhpZGVDb21wb25lbnRzKCl7Zm9yKHZhciBsPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobCksZD0wO2Q8bDtkKyspYVtk''@;'; put 'put ''XT1hcmd1bWVudHNbZF07dGhpcy5jaGFuZ2VDb21wb25lbnRzVmlzaWJpbGl0eSghMSwuLi5hKX1zaG93Q29tcG9uZW50cygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMuY2hhbmdlQ29tcG9uZW50''@;'; put 'put ''c1Zpc2liaWxpdHkoITAsLi4uYSl9ZGVzdHJveSgpe3RoaXMuZW5hYmxlZCYmKHRoaXMuY29tcG9uZW50cy5mb3JFYWNoKChsLGEpPT57bnVsbCE9PWwmJihsLmRlc3Ryb3koKSx0aGlzLmNvbXBvbmVudHMuc2V0KGEsbnVsbCkpfSksdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmRlc3Ryb3ko''@;'; put 'put ''KSx0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyLmRlc3Ryb3koKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSkpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gVGR0KGMpe2MmJlluKGMsbD0+e2NvbnN0WyxhXT1sLGQ9dGhpcy5ob3Qu''@;'; put 'put ''cHJvcFRvQ29sKGEpO3RoaXMuY29uZGl0aW9uQ29sbGVjdGlvbi5oYXNDb25kaXRpb25zKGQpJiZ0aGlzLnVwZGF0ZVZhbHVlQ29tcG9uZW50Q29uZGl0aW9uKGQpfSl9ZnVuY3Rpb24gQWR0KCl7Y29uc3QgYz10aGlzLmRyb3Bkb3duTWVudVBsdWdpbi5tZW51O3RoaXMucmVzdG9yZUNvbXBv''@;'; put 'put ''bmVudHMoQXJyYXkuZnJvbSh0aGlzLmNvbXBvbmVudHMudmFsdWVzKCkpKSxjLnVwZGF0ZU1lbnVEaW1lbnNpb25zKCl9ZnVuY3Rpb24ga2R0KCl7dGhpcy5jb21wb25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIpLmdldFNlbGVjdEVsZW1lbnQoKS5jbG9zZU9wdGlvbnMoKSx0aGlz''@;'; put 'put ''LmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uMiIpLmdldFNlbGVjdEVsZW1lbnQoKS5jbG9zZU9wdGlvbnMoKX1mdW5jdGlvbiBEZHQoKXtjb25zdCBjPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luLm1lbnU7WjIobFEsdGhpcykuaGFzKGMpfHxaMihQZyx0aGlzKS5zZXRNZW51''@;'; put 'put ''KGMpLFoyKGxRLHRoaXMpLmFkZChjKX1mdW5jdGlvbiBJZHQoYyl7Yy5pdGVtcy5wdXNoKHtuYW1lOmlzfSksdGhpcy5jb21wb25lbnRzLmZvckVhY2gobD0+e2MuaXRlbXMucHVzaChsLmdldE1lbnVJdGVtRGVzY3JpcHRvcigpKX0pfWZ1bmN0aW9uIHM1ZShjKXt2YXIgbDtpZigiYWNjZXB0''@;'; put 'put ''Ij09PWMpe2NvbnN0IGQ9dGhpcy5nZXRTZWxlY3RlZENvbHVtbigpO3ZhciBhO2lmKG51bGw9PT1kKXJldHVybiB2b2lkKG51bGw9PT0oYT10aGlzLmRyb3Bkb3duTWVudVBsdWdpbil8fHZvaWQgMD09PWF8fGEuY2xvc2UoKSk7Y29uc3R7cGh5c2ljYWxJbmRleDpofT1kLGY9dGhpcy5jb21w''@;'; put 'put ''b25lbnRzLmdldCgiZmlsdGVyX2J5X2NvbmRpdGlvbiIpLmdldFN0YXRlKCksdj10aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfY29uZGl0aW9uMiIpLmdldFN0YXRlKCksTT10aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfdmFsdWUiKS5nZXRTdGF0ZSgpLEQ9dGhpcy5nZXRP''@;'; put 'put ''cGVyYXRpb25CYXNlZE9uQXJndW1lbnRzKHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9vcGVyYXRvcnMiKS5nZXRBY3RpdmVPcGVyYXRpb25JZCgpLGYsdixNKTt0aGlzLmNvbmRpdGlvblVwZGF0ZU9ic2VydmVyLmdyb3VwQ2hhbmdlcygpO2xldCBaPXRoaXMuY29uZGl0aW9uQ29sbGVj''@;'; put 'put ''dGlvbi5nZXRDb2x1bW5TdGFja1Bvc2l0aW9uKGgpOy0xPT09WiYmKFo9dm9pZCAwKSx0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24ucmVtb3ZlQ29uZGl0aW9ucyhoKSxmLmNvbW1hbmQua2V5IT09VDAmJih0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkQ29uZGl0aW9uKGgsZixELFopLHYu''@;'; put 'put ''Y29tbWFuZC5rZXkhPT1UMCYmdGhpcy5jb25kaXRpb25Db2xsZWN0aW9uLmFkZENvbmRpdGlvbihoLHYsRCxaKSksTS5jb21tYW5kLmtleSE9PVQwJiZ0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uYWRkQ29uZGl0aW9uKGgsTSxELFopLHRoaXMuY29uZGl0aW9uVXBkYXRlT2JzZXJ2ZXIuZmx1''@;'; put 'put ''c2goKSx0aGlzLmNvbXBvbmVudHMuZm9yRWFjaChuZT0+bmUuc2F2ZVN0YXRlKGgpKSx0aGlzLmZpbHRlcigpfW51bGw9PT0obD10aGlzLmRyb3Bkb3duTWVudVBsdWdpbil8fHZvaWQgMD09PWx8fGwuY2xvc2UoKX1mdW5jdGlvbiBSZHQoYyxsKXtjb25zdCBhPXRoaXMuZHJvcGRvd25NZW51''@;'; put 'put ''UGx1Z2luLm1lbnU7dGhpcy51cGRhdGVEZXBlbmRlbnRDb21wb25lbnRzVmlzaWJpbGl0eSgpLGMuY29uc3RydWN0b3I9PT1LSiYmIWwuaW5wdXRzQ291bnQmJnRoaXMuc2V0TGlzdGVuaW5nRHJvcGRvd25NZW51KCksYS51cGRhdGVNZW51RGltZW5zaW9ucygpfWZ1bmN0aW9uIGw1ZSgpe3Ro''@;'; put 'put ''aXMuc2V0TGlzdGVuaW5nRHJvcGRvd25NZW51KCl9ZnVuY3Rpb24gTGR0KGMsbCxhKXtjb25zdCBkPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oYyk7dGhpcy5lbmFibGVkJiZ0aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uaGFzQ29uZGl0aW9ucyhkKSYmYT09PXRoaXMuaG90LnZpZXcuZ2V0''@;'; put 'put ''Q29sdW1uSGVhZGVyc0NvdW50KCktMT9UaShsLCJodEZpbHRlcnNBY3RpdmUiKTpjYShsLCJodEZpbHRlcnNBY3RpdmUiKX1mdW5jdGlvbiBPZHQoYyl7dmFyIGw7aWYobnVsbD09PShsPXRoaXMuZHJvcGRvd25NZW51UGx1Z2luKXx8dm9pZCAwPT09bHx8IWwuZW5hYmxlZClyZXR1cm47Y29u''@;'; put 'put ''c3R7ZWRpdGVkQ29uZGl0aW9uU3RhY2s6e2NvbmRpdGlvbnM6YSxjb2x1bW46ZH0sY29uZGl0aW9uQXJnc0NoYW5nZTpofT1jO0FycmF5LmlzQXJyYXkoaCkmJmFRKHJ3LHRoaXMsWjIocncsdGhpcykubWFwKE09PihNLmNvbHVtbj09PWQmJmEubGVuZ3RoPjAmJk0uY29uZGl0aW9ucy5mb3JF''@;'; put 'put ''YWNoKEQ9PnsiYnlfdmFsdWUiPT09RC5uYW1lJiYoRC5hcmdzPVtbLi4uaF1dKX0pLE0pKSk7Y29uc3QgZj1hLmZpbHRlcihNPT5NLm5hbWU9PT15OSksdj1hLmZpbHRlcihNPT5NLm5hbWUhPT15OSk7aWYoZi5sZW5ndGg+PTJ8fHYubGVuZ3RoPj0zKXRsKGZsYFRoZSBmaWx0ZXIgY29uZGl0''@;'; put 'put ''aW9ucyBoYXZlIGJlZW4gYXBwbGllZCBwcm9wZXJseSwgYnV0IGNvdWxkbuKAmXQgYmUgZGlzcGxheWVkIHZpc3VhbGx5Llx4MjAKICAgICAgICBUaGUgb3ZlcmFsbCBhbW91bnQgb2YgY29uZGl0aW9ucyBleGNlZWQgdGhlIGNhcGFiaWxpdHkgb2YgdGhlIGRyb3Bkb3duIG1lbnUuXHgyMAog''@;'; put 'put ''ICAgICAgIEZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBkb2N1bWVudGF0aW9uLmApO2Vsc2V7Y29uc3QgTT10aGlzLmNvbmRpdGlvbkNvbGxlY3Rpb24uZ2V0T3BlcmF0aW9uKGQpO3RoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24iKS51cGRhdGVTdGF0ZSh2WzBdLGQp''@;'; put 'put ''LHRoaXMuY29tcG9uZW50cy5nZXQoImZpbHRlcl9ieV9jb25kaXRpb24yIikudXBkYXRlU3RhdGUodlsxXSxkKSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfb3BlcmF0b3JzIikudXBkYXRlU3RhdGUoTSxkKSx0aGlzLmNvbXBvbmVudHMuZ2V0KCJmaWx0ZXJfYnlfdmFsdWUiKS51cGRh''@;'; put 'put ''dGVTdGF0ZShjKX19Y29uc3QgYzVlPSJpbnRlcm5hbC11c2UtaW4taGFuZHNvbnRhYmxlIixjUT17bGljZW5zZUtleTpjNWUsdXNlQXJyYXlBcml0aG1ldGljOiEwLHVzZUNvbHVtbkluZGV4OiExLHVzZVN0YXRzOiExLGV2YWx1YXRlTnVsbFRvWmVybzohMCxwcmVjaXNpb25FcHNpbG9uOjFl''@;'; put 'put ''LTEzLHByZWNpc2lvblJvdW5kaW5nOjE0LHNtYXJ0Um91bmRpbmc6ITAsbGVhcFllYXIxOTAwOiExLG51bGxEYXRlOnt5ZWFyOjE4OTksbW9udGg6MTIsZGF5OjMwfSxudWxsWWVhcjozMCxkYXRlRm9ybWF0czpbIkREL01NL1lZWVkiLCJERC9NTS9ZWSJdLHRpbWVGb3JtYXRzOlsiaGg6bW0i''@;'; put 'put ''LCJoaDptbTpzcy5zc3MiXSxtYXRjaFdob2xlQ2VsbDohMCx1c2VSZWd1bGFyRXhwcmVzc2lvbnM6ITEsdXNlV2lsZGNhcmRzOiEwLGZ1bmN0aW9uQXJnU2VwYXJhdG9yOiIsIix0aG91c2FuZFNlcGFyYXRvcjoiIixkZWNpbWFsU2VwYXJhdG9yOiIuIixsYW5ndWFnZToiZW5HQiJ9O2Z1bmN0''@;'; put 'put ''aW9uIHU1ZShjKXt2YXIgbDtyZXR1cm57bWF4Q29sdW1uczpjLm1heENvbHVtbnMsbWF4Um93czpjLm1heFJvd3MsbGFuZ3VhZ2U6bnVsbD09PShsPWNbQzFdKXx8dm9pZCAwPT09bHx8bnVsbD09PShsPWwubGFuZ3VhZ2UpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmxhbmdDb2RlfX1mdW5jdGlv''@;'; put 'put ''biBkNWUoYyl7cmV0dXJuIE9iamVjdC5rZXlzKGMpLnJlZHVjZSgobCxhKT0+KCJoeXBlcmZvcm11bGEiIT09YSYmKGxbYV09Y1thXSksbCkse30pfWZ1bmN0aW9uIFVGKCl7Y29uc3QgYz0iZW5naW5lX3JlbGF0aW9uc2hpcCIsbD1RZihDMSk7cmV0dXJuIGwuaGFzSXRlbShjKXx8bC5yZWdp''@;'; put 'put ''c3RlcihjLG5ldyBNYXApLGwuZ2V0SXRlbShjKX1mdW5jdGlvbiB1USgpe2NvbnN0IGM9InNoYXJlZF9lbmdpbmVfdXNhZ2UiLGw9UWYoQzEpO3JldHVybiBsLmhhc0l0ZW0oYyl8fGwucmVnaXN0ZXIoYyxuZXcgTWFwKSxsLmdldEl0ZW0oYyl9ZnVuY3Rpb24gaDVlKGMpe3ZhciBsO2NvbnN0''@;'; put 'put ''IGE9VUYoKSxkPTA9PT1hLnNpemU/W106QXJyYXkuZnJvbShudWxsIT09KGw9YS5nZXQoYykpJiZ2b2lkIDAhPT1sP2w6W10pO3JldHVybiBuZXcgTWFwKGQubWFwKGg9PltoLmdldFBsdWdpbigiZm9ybXVsYXMiKS5zaGVldElkLGhdKSl9ZnVuY3Rpb24gZjVlKGMsbCl7aWYoYyl7Y29uc3Qg''@;'; put 'put ''YT1VRigpLGQ9YS5nZXQoYyksaD11USgpLGY9aC5nZXQoYyk7ZCYmZC5pbmNsdWRlcyhsKSYmKGQuc3BsaWNlKGQuaW5kZXhPZihsKSwxKSwwPT09ZC5sZW5ndGgmJmEuZGVsZXRlKGMpKSxmJiZmLmluY2x1ZGVzKGwuZ3VpZCkmJihmLnNwbGljZShmLmluZGV4T2YobC5ndWlkKSwxKSwwPT09''@;'; put 'put ''Zi5sZW5ndGgmJihoLmRlbGV0ZShjKSxjLmRlc3Ryb3koKSkpfX1jb25zdCBwNWU9IkREL01NL1lZWVkiO2Z1bmN0aW9uIGc1ZShjKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGMmJiInIj09PWMuY2hhckF0KDApJiYiPSI9PT1jLmNoYXJBdCgxKX1mdW5jdGlvbiBkUShjLGwpe3JldHVybiJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgYyYmImRhdGUiPT09bH1mdW5jdGlvbiBtNWUoYyxsKXtyZXR1cm4gTGEoYyxsLCEwKS5pc1ZhbGlkKCl9ZnVuY3Rpb24gdjVlKGMsbCl7cmV0dXJuIExhKGMsbCwhMCkuZm9ybWF0KHA1ZSl9ZnVuY3Rpb24gWWR0KGMsbCl7cmV0dXJuIExhKGMscDVlLCEwKS5mb3Jt''@;'; put 'put ''YXQobCl9ZnVuY3Rpb24gYjVlKGMsbCl7Y29uc3QgZD1uZXcgRGF0ZShEYXRlLlVUQygwLDAsYystMSkpO3JldHVybiBMYShkKS5mb3JtYXQobCl9ZnVuY3Rpb24gaFEoYyxsLGEpe2NvbnN0IGQ9ZnVuY3Rpb24gJGR0KGMsbCl7Y29uc3QgYT1bXTtyZXR1cm4gYy5mb3JFYWNoKGQ9Pntjb25z''@;'; put 'put ''dCBoPXtmcm9tOmQsdG86bH07YS5mb3JFYWNoKGY9PntmLmZyb20+aC5mcm9tJiZmLnRvPD1oLmZyb20mJmYuZnJvbT5mLnRvJiYoaC5mcm9tKz0xKX0pLGguZnJvbT49bCYmKGwrPTEpLGEucHVzaChoKX0pLGF9KGMsZnVuY3Rpb24gR2R0KGMsbCxhKXtjb25zdCBkPUFycmF5LmZyb20oQXJy''@;'; put 'put ''YXkoYSkua2V5cygpKS5maWx0ZXIoZj0+ITE9PT1jLmluY2x1ZGVzKGYpKTt2YXIgaDtyZXR1cm4gMD09PWw/bnVsbCE9PShoPWRbbF0pJiZ2b2lkIDAhPT1oP2g6MDpkW2wtMV0rMX0oYyxsLGEpKTtyZXR1cm4gZnVuY3Rpb24gS2R0KGMpe3JldHVybiBjLmZvckVhY2goKGwsYSk9PntjLnNs''@;'; put 'put ''aWNlKGErMSkuZm9yRWFjaChoPT57aC5mcm9tPmwuZnJvbSYmaC5mcm9tPGgudG8mJihoLmZyb20tPTEpfSl9KSxjfShkKX1mdW5jdGlvbiB3OShjLGwsYSl7KGZ1bmN0aW9uIHFkdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBz''@;'; put 'put ''YW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gX2MoYyxsKXtyZXR1cm4gYy5nZXQoeTVlKGMsbCkpfWZ1bmN0aW9uIG82KGMsbCxhKXtyZXR1cm4gYy5zZXQoeTVlKGMsbCksYSksYX1mdW5jdGlvbiB5NWUoYyxsLGEp''@;'; put 'put ''e2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBxVD1uZXcgV2Vha01hcCxhNj1uZXcg''@;'; put 'put ''V2Vha01hcCxPaD1uZXcgV2Vha01hcCxaRj1uZXcgV2Vha01hcCxmUT1uZXcgV2Vha01hcCxwUT1uZXcgV2Vha01hcCxXRj1uZXcgV2Vha01hcDtjb25zdCBfNWU9Y2xhc3MgWGR0e2NvbnN0cnVjdG9yKGwsYSxkKXt3OSh0aGlzLHFULHZvaWQgMCksdzkodGhpcyxhNix2b2lkIDApLHc5KHRo''@;'; put 'put ''aXMsT2gsdm9pZCAwKSx3OSh0aGlzLFpGLFtdKSx3OSh0aGlzLGZRLFtdKSx3OSh0aGlzLHBRLHZvaWQgMCksdzkodGhpcyxXRixbXSksbzYocVQsdGhpcyxsKSxvNihhNix0aGlzLGEpLG82KE9oLHRoaXMsZCl9c2V0UmVtb3ZlZEhmSW5kZXhlcyhsKXtyZXR1cm4gbzYoV0YsdGhpcyxsLm1h''@;'; put 'put ''cChhPT57Y29uc3QgZD1fYyhhNix0aGlzKS5nZXRWaXN1YWxGcm9tUGh5c2ljYWxJbmRleChhKTtyZXR1cm4gdGhpcy5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGQpfSkpLF9jKFdGLHRoaXMpfWdldFJlbW92ZWRIZkluZGV4ZXMoKXtyZXR1cm4gX2MoV0YsdGhpcyl9Z2V0SGZJbmRleEZy''@;'; put 'put ''b21WaXN1YWxJbmRleChsKXtjb25zdCBhPV9jKGE2LHRoaXMpLmdldEluZGV4ZXNTZXF1ZW5jZSgpLGQ9X2MoYTYsdGhpcykuZ2V0Tm90VHJpbW1lZEluZGV4ZXMoKTtyZXR1cm4gYS5pbmRleE9mKGRbbF0pfXN5bmNNb3ZlcyhsKXtjb25zdCBkPWBtb3ZlJHtnMShfYyhxVCx0aGlzKSl9c2A7''@;'; put 'put ''X2MoT2gsdGhpcykuZ2V0RW5naW5lKCkuYmF0Y2goKCk9PntsLmZvckVhY2goaD0+e2guZnJvbSE9PWgudG8mJmguZnJvbSsxIT09aC50byYmX2MoT2gsdGhpcykuZ2V0RW5naW5lKClbZF0oX2MoT2gsdGhpcykuZ2V0U2hlZXRJZCgpLGguZnJvbSwxLGgudG8pfSl9KX1zdG9yZU1vdmVzSW5m''@;'; put 'put ''b3JtYXRpb24obCxhLGQpeyExIT09ZCYmKG82KGZRLHRoaXMsbC5tYXAoaD0+dGhpcy5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGgpKSksbzYocFEsdGhpcyx0aGlzLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYSkpKX1jYWxjdWxhdGVBbmRTeW5jTW92ZXMobCxhKXtpZihfYyhPaCx0''@;'; put 'put ''aGlzKS5pc1BlcmZvcm1pbmdVbmRvUmVkbygpfHwhMT09PWx8fCExPT09YSlyZXR1cm47Y29uc3QgZD1oUShfYyhmUSx0aGlzKSxfYyhwUSx0aGlzKSxfYyhhNix0aGlzKS5nZXROdW1iZXJPZkluZGV4ZXMoKSk7bnVsbD09PV9jKE9oLHRoaXMpLmdldFNoZWV0SWQoKT9fYyhPaCx0aGlzKS5n''@;'; put 'put ''ZXRQb3N0cG9uZUFjdGlvbigoKT0+dGhpcy5zeW5jTW92ZXMoZCkpOnRoaXMuc3luY01vdmVzKGQpfWdldEluZGV4ZXNDaGFuZ2VTeW5jTWV0aG9kKCl7Y29uc3QgbD1gc2V0JHtnMShfYyhxVCx0aGlzKSl9T3JkZXJgO3JldHVybiBhPT57aWYoX2MoT2gsdGhpcykuaXNQZXJmb3JtaW5nVW5k''@;'; put 'put ''b1JlZG8oKSlyZXR1cm47Y29uc3QgZD1fYyhhNix0aGlzKS5nZXRJbmRleGVzU2VxdWVuY2UoKTtpZigidXBkYXRlIj09PWEmJmQubGVuZ3RoPjApe2NvbnN0IGg9X2MoWkYsdGhpcykubWFwKEQ9PmQuaW5kZXhPZihEKSksZj1fYyhPaCx0aGlzKS5nZXRFbmdpbmUoKS5nZXRTaGVldERpbWVu''@;'; put 'put ''c2lvbnMoX2MoT2gsdGhpcykuZ2V0U2hlZXRJZCgpKTtsZXQgdjt2PSJyb3ciPT09X2MocVQsdGhpcyk/Zi5oZWlnaHQ6Zi53aWR0aDtmb3IobGV0IEQ9aC5sZW5ndGg7RDx2O0QrPTEpaC5wdXNoKEQpO19jKE9oLHRoaXMpLmdldEVuZ2luZSgpW2xdKF9jKE9oLHRoaXMpLmdldFNoZWV0SWQo''@;'; put 'put ''KSxoKX1vNihaRix0aGlzLGQpfX1pbml0KCl7bzYoWkYsdGhpcyxfYyhhNix0aGlzKS5nZXRJbmRleGVzU2VxdWVuY2UoKSl9fTtmdW5jdGlvbiBDOShjLGwsYSl7KGZ1bmN0aW9uIEpkdChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRo''@;'; put 'put ''ZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gRmcoYyxsKXtyZXR1cm4gYy5nZXQodzVlKGMsbCkpfWZ1bmN0aW9uIFM5KGMsbCxhKXtyZXR1cm4gYy5zZXQodzVlKGMsbCksYSksYX1mdW5jdGlvbiB3NWUoYyxs''@;'; put 'put ''LGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBZRj1uZXcgV2Vha01hcCxHRj1u''@;'; put 'put ''ZXcgV2Vha01hcCxnUT1uZXcgV2Vha01hcCxtUT1uZXcgV2Vha01hcCx2UT1uZXcgV2Vha01hcCxiUT1uZXcgV2Vha01hcCx5UT1uZXcgV2Vha01hcDtjb25zdCBlaHQ9Y2xhc3MgUWR0e2NvbnN0cnVjdG9yKGwsYSxkKXtDOSh0aGlzLFlGLHZvaWQgMCksQzkodGhpcyxHRix2b2lkIDApLEM5''@;'; put 'put ''KHRoaXMsZ1Esdm9pZCAwKSxDOSh0aGlzLG1RLCExKSxDOSh0aGlzLHZRLCExKSxDOSh0aGlzLGJRLG51bGwpLEM5KHRoaXMseVEsbnVsbCksUzkoWUYsdGhpcyxuZXcgXzVlKCJyb3ciLGwsdGhpcykpLFM5KEdGLHRoaXMsbmV3IF81ZSgiY29sdW1uIixhLHRoaXMpKSxTOShnUSx0aGlzLGQp''@;'; put 'put ''fWdldEZvckF4aXMobCl7cmV0dXJuIEZnKCJyb3ciPT09bD9ZRjpHRix0aGlzKX1zZXRQZXJmb3JtVW5kbyhsKXtTOShtUSx0aGlzLGwpfXNldFBlcmZvcm1SZWRvKGwpe1M5KHZRLHRoaXMsbCl9aXNQZXJmb3JtaW5nVW5kb1JlZG8oKXtyZXR1cm4gRmcobVEsdGhpcyl8fEZnKHZRLHRoaXMp''@;'; put 'put ''fWdldFNoZWV0SWQoKXtyZXR1cm4gRmcoeVEsdGhpcyl9Z2V0RW5naW5lKCl7cmV0dXJuIEZnKGJRLHRoaXMpfWdldFBvc3Rwb25lQWN0aW9uKCl7cmV0dXJuIEZnKGdRLHRoaXMpfXNldHVwU3luY0VuZHBvaW50KGwsYSl7UzkoYlEsdGhpcyxsKSxTOSh5USx0aGlzLGEpLEZnKFlGLHRoaXMp''@;'; put 'put ''LmluaXQoKSxGZyhHRix0aGlzKS5pbml0KCl9fTtmdW5jdGlvbiBpdyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gbmh0KGMpe3ZhciBsPWZ1bmN0aW9uIHJodChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZv''@;'; put 'put ''aWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6''@;'; put 'put ''TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gX1Eo''@;'; put 'put ''YyxsLGEpe0M1ZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gQzVlKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBzNihjLGwsYSl7cmV0''@;'; put 'put ''dXJuIGMuc2V0KEZsKGMsbCksYSksYX1mdW5jdGlvbiBvdyhjLGwpe3JldHVybiBjLmdldChGbChjLGwpKX1mdW5jdGlvbiBGbChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgQzE9ImZvcm11bGFzIixpaHQ9WyJtYXhSb3dzIiwibWF4Q29sdW1ucyIsImxhbmd1YWdlIl07QW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyTmFtZWRFeHByZXNzaW9uQWRk''@;'; put 'put ''ZWQiKSxBby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJOYW1lZEV4cHJlc3Npb25SZW1vdmVkIiksQW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyU2hlZXRBZGRlZCIpLEFvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclNoZWV0UmVtb3ZlZCIpLEFvLmdldFNp''@;'; put 'put ''bmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclNoZWV0UmVuYW1lZCIpLEFvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlckZvcm11bGFzVmFsdWVzVXBkYXRlIik7Y29uc3QgYXc9Yz0+IlVuZG9SZWRvLnVuZG8iPT09Y3x8IlVuZG9SZWRvLnJlZG8iPT09Y3x8ImF1dG8iPT09Yzt2YXIg''@;'; put 'put ''SGc9bmV3IFdlYWtNYXAsd1E9bmV3IFdlYWtNYXAsWFQ9bmV3IFdlYWtNYXAsR2w9bmV3IFdlYWtTZXQ7Y2xhc3MgYWh0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXt2YXIgbDtzdXBlciguLi5hcmd1bWVudHMpLGw9dGhpcyxmdW5jdGlvbiB0aHQoYyxsKXtDNWUoYyxsKSxsLmFkZChjKX0o''@;'; put 'put ''dGhpcyxHbCksX1EodGhpcyxIZywhMSksX1EodGhpcyx3USwhMSksX1EodGhpcyxYVCxbWyJ2YWx1ZXNVcGRhdGVkIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBGbChHbCxs''@;'; put 'put ''LENodCkuY2FsbChsLC4uLmQpfV0sWyJuYW1lZEV4cHJlc3Npb25BZGRlZCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gRmwoR2wsbCxTaHQpLmNhbGwobCwuLi5kKX1dLFsi''@;'; put 'put ''bmFtZWRFeHByZXNzaW9uUmVtb3ZlZCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gRmwoR2wsbCxNaHQpLmNhbGwobCwuLi5kKX1dLFsic2hlZXRBZGRlZCIsZnVuY3Rpb24o''@;'; put 'put ''KXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gRmwoR2wsbCx4aHQpLmNhbGwobCwuLi5kKX1dLFsic2hlZXRSZW5hbWVkIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9''@;'; put 'put ''bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBGbChHbCxsLEVodCkuY2FsbChsLC4uLmQpfV0sWyJzaGVldFJlbW92ZWQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1h''@;'; put 'put ''cmd1bWVudHNbaF07cmV0dXJuIEZsKEdsLGwsVGh0KS5jYWxsKGwsLi4uZCl9XV0pLGl3KHRoaXMsInN0YXRpY1JlZ2lzdGVyIixRZigiZm9ybXVsYXMiKSksaXcodGhpcywiZW5naW5lIixudWxsKSxpdyh0aGlzLCJzaGVldE5hbWUiLG51bGwpLGl3KHRoaXMsImluZGV4U3luY2VyIixudWxs''@;'; put 'put ''KSxpdyh0aGlzLCJyb3dBeGlzU3luY2VyIixudWxsKSxpdyh0aGlzLCJjb2x1bW5BeGlzU3luY2VyIixudWxsKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gQzF9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjYwfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7''@;'; put 'put ''cmV0dXJuW0MxLC4uLmlodF19Z2V0IHNoZWV0SWQoKXtyZXR1cm4gbnVsbD09PXRoaXMuc2hlZXROYW1lP251bGw6dGhpcy5lbmdpbmUuZ2V0U2hlZXRJZCh0aGlzLnNoZWV0TmFtZSl9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0MxXX1lbmFibGVQbHVnaW4o''@;'; put 'put ''KXt2YXIgbCxhPXRoaXM7aWYoIXRoaXMuZW5hYmxlZCl7aWYodGhpcy5lbmdpbmU9bnVsbCE9PShsPWZ1bmN0aW9uIE5kdChjKXtjb25zdCBsPWMuZ2V0U2V0dGluZ3MoKSxhPWxbQzFdLGQ9YT8uZW5naW5lO2lmKCEwPT09YXx8bWMoZCkpcmV0dXJuIG51bGw7dmFyIGg7aWYoImZ1bmN0aW9u''@;'; put 'put ''Ij09dHlwZW9mIGQuaHlwZXJmb3JtdWxhfHwiZnVuY3Rpb24iPT10eXBlb2YgZClyZXR1cm4gZnVuY3Rpb24gVmR0KGMsbCxhKXtjb25zdCBkPWxbQzFdLGg9ZnVuY3Rpb24gUGR0KGMpe3ZhciBsO2NvbnN0IGE9Y1tDMV0sZD1kNWUobnVsbCE9YSYmbnVsbCE9PShsPWEuZW5naW5lKSYmdm9p''@;'; put 'put ''ZCAwIT09bCYmbC5oeXBlcmZvcm11bGE/YS5lbmdpbmU6e30pLGg9dTVlKGMpO3JldHVybnsuLi5jUSwuLi5kLC4uLmh9fShsKSxmPVVGKCksdj11USgpOyhmdW5jdGlvbiBCZHQoYyxsKXtsJiZsLmZvckVhY2goYT0+e2NvbnN0e25hbWU6ZCxwbHVnaW46aCx0cmFuc2xhdGlvbnM6Zn09YTt0''@;'; put 'put ''cnl7Yy5yZWdpc3RlckZ1bmN0aW9uKGQsaCxmKX1jYXRjaCh2KXt0bCh2Lm1lc3NhZ2UpfX0pfSkoYyxkLmZ1bmN0aW9ucyksZnVuY3Rpb24gamR0KGMsbCl7aWYobCl7Y29uc3R7bGFuZ0NvZGU6YX09bDt0cnl7Yy5yZWdpc3Rlckxhbmd1YWdlKGEsbCl9Y2F0Y2goZCl7dGwoZC5tZXNzYWdl''@;'; put 'put ''KX19fShjLGQubGFuZ3VhZ2UpO2NvbnN0IE09Yy5idWlsZEVtcHR5KGgpO3JldHVybiBmLnNldChNLFthXSksdi5zZXQoTSxbYS5ndWlkXSksZnVuY3Rpb24gemR0KGMsbCl7bCYmKGMuc3VzcGVuZEV2YWx1YXRpb24oKSxsLmZvckVhY2goYT0+e2NvbnN0e25hbWU6ZCxleHByZXNzaW9uOmgs''@;'; put 'put ''c2NvcGU6ZixvcHRpb25zOnZ9PWE7dHJ5e2MuYWRkTmFtZWRFeHByZXNzaW9uKGQsaCxmLHYpfWNhdGNoKE0pe3RsKE0ubWVzc2FnZSl9fSksYy5yZXN1bWVFdmFsdWF0aW9uKCkpfShNLGQubmFtZWRFeHByZXNzaW9ucyksTS5vbigic2hlZXRBZGRlZCIsKCk9PntNLnJlYnVpbGRBbmRSZWNh''@;'; put 'put ''bGN1bGF0ZSgpfSksTS5vbigic2hlZXRSZW1vdmVkIiwoKT0+e00ucmVidWlsZEFuZFJlY2FsY3VsYXRlKCl9KSxNfShudWxsIT09KGg9ZC5oeXBlcmZvcm11bGEpJiZ2b2lkIDAhPT1oP2g6ZCxsLGMpO2lmKCJvYmplY3QiPT10eXBlb2YgZCYmbWMoZC5oeXBlcmZvcm11bGEpKXtjb25zdCBm''@;'; put 'put ''PVVGKCksdj11USgpLmdldChkKTtyZXR1cm4gZi5oYXMoZCl8fGYuc2V0KGQsW10pLGYuZ2V0KGQpLnB1c2goYyksdiYmdi5wdXNoKGMuZ3VpZCksZC5nZXRDb25maWcoKS5saWNlbnNlS2V5fHxkLnVwZGF0ZUNvbmZpZyh7bGljZW5zZUtleTpjNWV9KSwoZC5nZXRDb25maWcoKS5sZWFwWWVh''@;'; put 'put ''cjE5MDAhPT1jUS5sZWFwWWVhcjE5MDB8fCExPT09TE8oZC5nZXRDb25maWcoKS5udWxsRGF0ZSxjUS5udWxsRGF0ZSkpJiZ0bChmbGBJZiB5b3UgdXNlIEh5cGVyRm9ybXVsYSB3aXRoIEhhbmRzb250YWJsZSwga2VlcCB0aGUgZGVmYXVsdCBcYGxlYXBZZWFyMTkwMFxgIGFuZCBcYG51bGxE''@;'; put 'put ''YXRlXGAgCiAgICAgIHNldHRpbmdzLiBPdGhlcndpc2UsIEh5cGVyRm9ybXVsYSdzIGRhdGVzIG1heSBub3Qgc3luYyBjb3JyZWN0bHkgd2l0aCBIYW5kc29udGFibGUncyBkYXRlcy5gKSxkfXJldHVybiBudWxsfSh0aGlzLmhvdCkpJiZ2b2lkIDAhPT1sP2w6dGhpcy5lbmdpbmUsIXRoaXMu''@;'; put 'put ''ZW5naW5lKXJldHVybiB2b2lkIHRsKCJNaXNzaW5nIHRoZSByZXF1aXJlZCBgZW5naW5lYCBrZXkgaW4gdGhlIEZvcm11bGFzIHNldHRpbmdzLiBQbGVhc2UgZmlsbCBpdCB3aXRoIGVpdGhlciBhbiBlbmdpbmUgY2xhc3Mgb3IgYW4gZW5naW5lIGluc3RhbmNlLiIpO2lmKG51bGwhPT10aGlz''@;'; put 'put ''LnNoZWV0TmFtZSYmIXRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KHRoaXMuc2hlZXROYW1lKSl7Y29uc3QgZD10aGlzLmFkZFNoZWV0KHRoaXMuc2hlZXROYW1lLHRoaXMuaG90LmdldFNvdXJjZURhdGFBcnJheSgpKTshMSE9PWQmJih0aGlzLnNoZWV0TmFtZT1kKX10aGlzLmFkZEhvb2so''@;'; put 'put ''ImJlZm9yZUxvYWREYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBGbChHbCxhLFM1ZSkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixm''@;'; put 'put ''dW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBGbChHbCxhLE01ZSkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVVcGRhdGVEYXRhIixmdW5jdGlvbigpe2Zvcih2''@;'; put 'put ''YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBGbChHbCxhLFM1ZSkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlclVwZGF0ZURhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIEZsKEdsLGEsTTVlKS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeURhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCks''@;'; put 'put ''Zj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIEZsKEdsLGEsdWh0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVNvdXJjZURhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtm''@;'; put 'put ''XT1hcmd1bWVudHNbZl07cmV0dXJuIEZsKEdsLGEsZGh0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVZhbGlkYXRlIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3Jl''@;'; put 'put ''dHVybiBGbChHbCxhLHNodCkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJhZnRlclNldFNvdXJjZURhdGFBdENlbGwiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIEZs''@;'; put 'put ''KEdsLGEsaGh0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2V0RGF0YUF0Q2VsbCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gRmwoR2wsYSx4NWUpLmNh''@;'; put 'put ''bGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZXREYXRhQXRSb3dQcm9wIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBGbChHbCxhLHg1ZSkuY2FsbChhLC4uLmgp''@;'; put 'put ''fSksdGhpcy5hZGRIb29rKCJiZWZvcmVDcmVhdGVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIEZsKEdsLGEsZmh0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2so''@;'; put 'put ''ImJlZm9yZUNyZWF0ZUNvbCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gRmwoR2wsYSxwaHQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVSb3ci''@;'; put 'put ''LGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIEZsKEdsLGEsdmh0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ3JlYXRlQ29sIixmdW5jdGlvbigpe2Zvcih2''@;'; put 'put ''YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBGbChHbCxhLGJodCkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIEZsKEdsLGEsZ2h0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbW92ZUNvbCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJh''@;'; put 'put ''eShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gRmwoR2wsYSxtaHQpLmNhbGwoYSwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJSZW1vdmVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKysp''@;'; put 'put ''aFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIEZsKEdsLGEseWh0KS5jYWxsKGEsLi4uaCl9KSx0aGlzLmFkZEhvb2soImFmdGVyUmVtb3ZlQ29sIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2Zd''@;'; put 'put ''O3JldHVybiBGbChHbCxhLF9odCkuY2FsbChhLC4uLmgpfSksdGhpcy5pbmRleFN5bmNlcj1uZXcgZWh0KHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLGQ9Pnt0aGlzLmhvdC5hZGRIb29rT25jZSgiaW5pdCIsKCk9PntkKCl9KX0pLHRoaXMucm93''@;'; put 'put ''QXhpc1N5bmNlcj10aGlzLmluZGV4U3luY2VyLmdldEZvckF4aXMoInJvdyIpLHRoaXMuY29sdW1uQXhpc1N5bmNlcj10aGlzLmluZGV4U3luY2VyLmdldEZvckF4aXMoImNvbHVtbiIpLHRoaXMuaG90LmFkZEhvb2soImFmdGVyUm93U2VxdWVuY2VDaGFuZ2UiLHRoaXMucm93QXhpc1N5bmNl''@;'; put 'put ''ci5nZXRJbmRleGVzQ2hhbmdlU3luY01ldGhvZCgpKSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckNvbHVtblNlcXVlbmNlQ2hhbmdlIix0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SW5kZXhlc0NoYW5nZVN5bmNNZXRob2QoKSksdGhpcy5ob3QuYWRkSG9vaygiYmVmb3JlUm93TW92ZSIsKGQs''@;'; put 'put ''aCxmLHYpPT57dGhpcy5yb3dBeGlzU3luY2VyLnN0b3JlTW92ZXNJbmZvcm1hdGlvbihkLGgsdil9KSx0aGlzLmhvdC5hZGRIb29rKCJiZWZvcmVDb2x1bW5Nb3ZlIiwoZCxoLGYsdik9Pnt0aGlzLmNvbHVtbkF4aXNTeW5jZXIuc3RvcmVNb3Zlc0luZm9ybWF0aW9uKGQsaCx2KX0pLHRoaXMu''@;'; put 'put ''aG90LmFkZEhvb2soImFmdGVyUm93TW92ZSIsKGQsaCxmLHYsTSk9Pnt0aGlzLnJvd0F4aXNTeW5jZXIuY2FsY3VsYXRlQW5kU3luY01vdmVzKHYsTSl9KSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckNvbHVtbk1vdmUiLChkLGgsZix2LE0pPT57dGhpcy5jb2x1bW5BeGlzU3luY2VyLmNhbGN1''@;'; put 'put ''bGF0ZUFuZFN5bmNNb3Zlcyh2LE0pfSksdGhpcy5ob3QuYWRkSG9vaygiYmVmb3JlQ29sdW1uRnJlZXplIiwoZCxoKT0+e3RoaXMuY29sdW1uQXhpc1N5bmNlci5zdG9yZU1vdmVzSW5mb3JtYXRpb24oW2RdLHRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQsaCl9KSx0''@;'; put 'put ''aGlzLmhvdC5hZGRIb29rKCJhZnRlckNvbHVtbkZyZWV6ZSIsKGQsaCk9Pnt0aGlzLmNvbHVtbkF4aXNTeW5jZXIuY2FsY3VsYXRlQW5kU3luY01vdmVzKGgsaCl9KSx0aGlzLmhvdC5hZGRIb29rKCJiZWZvcmVDb2x1bW5VbmZyZWV6ZSIsKGQsaCk9Pnt0aGlzLmNvbHVtbkF4aXNTeW5jZXIu''@;'; put 'put ''c3RvcmVNb3Zlc0luZm9ybWF0aW9uKFtkXSx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0LTEsaCl9KSx0aGlzLmhvdC5hZGRIb29rKCJhZnRlckNvbHVtblVuZnJlZXplIiwoZCxoKT0+e3RoaXMuY29sdW1uQXhpc1N5bmNlci5jYWxjdWxhdGVBbmRTeW5jTW92ZXMo''@;'; put 'put ''aCxoKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDZWxsTWV0YVJlc2V0IixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBGbChHbCxhLGNodCkuY2FsbChhLC4uLmgpfSksdGhpcy5h''@;'; put 'put ''ZGRIb29rKCJiZWZvcmVVbmRvIiwoKT0+e3RoaXMuaW5kZXhTeW5jZXIuc2V0UGVyZm9ybVVuZG8oITApLHRoaXMuZW5naW5lLnVuZG8oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVkbyIsKCk9Pnt0aGlzLmluZGV4U3luY2VyLnNldFBlcmZvcm1SZWRvKCEwKSx0aGlzLmVuZ2luZS5yZWRv''@;'; put 'put ''KCl9KSx0aGlzLmFkZEhvb2soImFmdGVyVW5kbyIsKCk9Pnt0aGlzLmluZGV4U3luY2VyLnNldFBlcmZvcm1VbmRvKCExKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJVbmRvIiwoKT0+e3RoaXMuaW5kZXhTeW5jZXIuc2V0UGVyZm9ybVJlZG8oITEpfSksdGhpcy5hZGRIb29rKCJhZnRlckRldGFj''@;'; put 'put ''aENoaWxkIixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBGbChHbCxhLHdodCkuY2FsbChhLC4uLmgpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVBdXRvZmlsbCIsZnVuY3Rpb24o''@;'; put 'put ''KXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gRmwoR2wsYSxsaHQpLmNhbGwoYSwuLi5oKX0pLG93KFhULHRoaXMpLmZvckVhY2goZD0+e2xldFtoLGZdPWQ7cmV0dXJuIHRoaXMuZW5naW5lLm9u''@;'; put 'put ''KGgsZil9KSxzdXBlci5lbmFibGVQbHVnaW4oKX19ZGlzYWJsZVBsdWdpbigpe293KFhULHRoaXMpLmZvckVhY2gobD0+e2xldFthLGRdPWw7cmV0dXJuIHRoaXMuZW5naW5lLm9mZihhLGQpfSksZjVlKHRoaXMuZW5naW5lLHRoaXMuaG90KSx0aGlzLmVuZ2luZT1udWxsLHN1cGVyLmRpc2Fi''@;'; put 'put ''bGVQbHVnaW4oKX11cGRhdGVQbHVnaW4obCl7Y29uc3QgYT1mdW5jdGlvbiBGZHQoYyl7dmFyIGw7Y29uc3QgYT1jW0MxXTtyZXR1cm57Li4uZDVlKG51bGwhPWEmJm51bGwhPT0obD1hLmVuZ2luZSkmJnZvaWQgMCE9PWwmJmwuaHlwZXJmb3JtdWxhP2EuZW5naW5lOnt9KSwuLi51NWUoYyl9''@;'; put 'put ''fSh0aGlzLmhvdC5nZXRTZXR0aW5ncygpKTsoZnVuY3Rpb24gSGR0KGMsbCl7cmV0dXJuIE9iamVjdC5rZXlzKGwpLnNvbWUoYT0+dm9pZCAwIT09bFthXSYmbFthXSE9PWNbYV0pfSkodGhpcy5lbmdpbmUuZ2V0Q29uZmlnKCksYSkmJnRoaXMuZW5naW5lLnVwZGF0ZUNvbmZpZyhhKTtjb25z''@;'; put 'put ''dCBkPXRoaXMuaG90LmdldFNldHRpbmdzKClbQzFdO2lmKEZvKGQpJiZGbyhkLnNoZWV0TmFtZSkmJmQuc2hlZXROYW1lIT09dGhpcy5zaGVldE5hbWUmJnRoaXMuc3dpdGNoU2hlZXQoZC5zaGVldE5hbWUpLCFsLmRhdGEmJm51bGw9PT10aGlzLnNoZWV0TmFtZSl7Y29uc3QgaD10aGlzLmhv''@;'; put 'put ''dC5nZXRTZXR0aW5ncygpW0MxXS5zaGVldE5hbWU7aCYmdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QoaCk/dGhpcy5zd2l0Y2hTaGVldCh0aGlzLnNoZWV0TmFtZSk6dGhpcy5zaGVldE5hbWU9dGhpcy5hZGRTaGVldChoPz92b2lkIDAsdGhpcy5ob3QuZ2V0U291cmNlRGF0YUFycmF5KCkp''@;'; put 'put ''fXN1cGVyLnVwZGF0ZVBsdWdpbihsKX1kZXN0cm95KCl7b3coWFQsdGhpcykuZm9yRWFjaChsPT57dmFyIGE7bGV0W2QsaF09bDtyZXR1cm4gbnVsbD09PShhPXRoaXMuZW5naW5lKXx8dm9pZCAwPT09YT92b2lkIDA6YS5vZmYoZCxoKX0pLHM2KFhULHRoaXMsbnVsbCksZjVlKHRoaXMuZW5n''@;'; put 'put ''aW5lLHRoaXMuaG90KSx0aGlzLmVuZ2luZT1udWxsLHN1cGVyLmRlc3Ryb3koKX1hZGRTaGVldChsLGEpe2lmKEZvKGEpJiYhbDNlKGEpKXJldHVybiB0bCgiVGhlIHByb3ZpZGVkIGRhdGEgc2hvdWxkIGJlIGFuIGFycmF5IG9mIGFycmF5cy4iKSwhMTtpZihudWxsIT1sJiZ0aGlzLmVuZ2lu''@;'; put 'put ''ZS5kb2VzU2hlZXRFeGlzdChsKSlyZXR1cm4gdGwoIlNoZWV0IHdpdGggdGhlIHByb3ZpZGVkIG5hbWUgYWxyZWFkeSBleGlzdHMuIiksITE7dHJ5e2NvbnN0IGQ9dGhpcy5lbmdpbmUuYWRkU2hlZXQobD8/dm9pZCAwKTtyZXR1cm4gYSYmdGhpcy5lbmdpbmUuc2V0U2hlZXRDb250ZW50KHRo''@;'; put 'put ''aXMuZW5naW5lLmdldFNoZWV0SWQoZCksYSksZH1jYXRjaChkKXtyZXR1cm4gdGwoZC5tZXNzYWdlKSwhMX19c3dpdGNoU2hlZXQobCl7aWYoIXRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KGwpKXJldHVybiB2b2lkIEUkKGBUaGUgc2hlZXQgbmFtZWQgXGAke2x9XGAgZG9lcyBub3QgZXhp''@;'; put 'put ''c3QsIHN3aXRjaCBhYm9ydGVkLmApO3RoaXMuc2hlZXROYW1lPWw7Y29uc3QgYT10aGlzLmVuZ2luZS5nZXRTaGVldFNlcmlhbGl6ZWQodGhpcy5zaGVldElkKTthLmxlbmd0aD4wJiZ0aGlzLmhvdC5sb2FkRGF0YShhLGAke2cxKEMxKX0uc3dpdGNoU2hlZXRgKX1nZXRDZWxsVHlwZShsLGEp''@;'; put 'put ''e2xldCBkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp0aGlzLnNoZWV0SWQ7Y29uc3QgaD10aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpLGY9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihhKTtyZXR1cm4gbnVsbCE9PWgmJm51bGwhPT1m''@;'; put 'put ''P3RoaXMuZW5naW5lLmdldENlbGxUeXBlKHtzaGVldDpkLHJvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChsKSxjb2w6dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYSl9KToiRU1QVFkifWlzRm9ybXVsYUNlbGxU''@;'; put 'put ''eXBlKGwsYSl7cmV0dXJuIHRoaXMuZW5naW5lLmRvZXNDZWxsSGF2ZUZvcm11bGEoe3NoZWV0OmFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp0aGlzLnNoZWV0SWQscm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3Vh''@;'; put 'put ''bEluZGV4KGwpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChhKX0pfXJlbmRlckRlcGVuZGVudFNoZWV0cyhsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdO2NvbnN0IGQ9bmV3''@;'; put 'put ''IFNldDtsLmZvckVhY2goaD0+e3ZhciBmO2NvbnN0IHY9bnVsbD09aHx8bnVsbD09PShmPWguYWRkcmVzcyl8fHZvaWQgMD09PWY/dm9pZCAwOmYuc2hlZXQ7dm9pZCAwIT09diYmKGQuaGFzKHYpfHxkLmFkZCh2KSl9KSxoNWUodGhpcy5lbmdpbmUpLmZvckVhY2goKGgsZik9Pnt2YXIgdjso''@;'; put 'put ''YXx8ZiE9PXRoaXMuc2hlZXRJZCkmJmQuaGFzKGYpJiYoaC5yZW5kZXIoKSxudWxsPT09KHY9aC52aWV3KXx8dm9pZCAwPT09dnx8di5hZGp1c3RFbGVtZW50c1NpemUoKSl9KX12YWxpZGF0ZURlcGVuZGVudENlbGxzKGwpe2NvbnN0IGQ9Zj0+e3ZhciB2O2NvbnN0e3JvdzpNLGNvbDpELHNo''@;'; put 'put ''ZWV0Olp9PW51bGwhPT0odj1mPy5hZGRyZXNzKSYmdm9pZCAwIT09dj92Ont9O3JldHVybiBGbyhaKT9gJHtafToke019eCR7RH1gOiIifSxoPW5ldyBTZXQoKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpbXSkubWFwKGY9PmQoZikpKTts''@;'; put 'put ''LmZvckVhY2goZj0+e3ZhciB2LE07Y29uc3R7cm93OkQsY29sOlp9PW51bGwhPT0odj1mLmFkZHJlc3MpJiZ2b2lkIDAhPT12P3Y6e307aWYoITE9PT1GbyhEKXx8ITE9PT1GbyhaKXx8RD49dGhpcy5ob3QuY291bnRSb3dzKCl8fFo+PXRoaXMuaG90LmNvdW50Q29scygpKXJldHVybjtjb25z''@;'; put 'put ''dCBuZT1udWxsPT1mfHxudWxsPT09KE09Zi5hZGRyZXNzKXx8dm9pZCAwPT09TT92b2lkIDA6TS5zaGVldCxjZT1kKGYpO2lmKHZvaWQgMCE9PW5lJiYhaC5oYXMoY2UpKXtjb25zdCBiZT1oNWUodGhpcy5lbmdpbmUpLmdldChuZSk7aWYoIWJlKXJldHVybjtiZS52YWxpZGF0ZUNlbGwoYmUu''@;'; put 'put ''Z2V0RGF0YUF0Q2VsbChELFopLGJlLmdldENlbGxNZXRhKEQsWiksKCk9Pnt9KX19KX1zeW5jQ2hhbmdlV2l0aEVuZ2luZShsLGEsZCl7Y29uc3QgaD17cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGwpLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIu''@;'; put 'put ''Z2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChhKSxzaGVldDp0aGlzLnNoZWV0SWR9O2lmKCF0aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb1NldENlbGxDb250ZW50cyhoKSlyZXR1cm4gdm9pZCB0bChgTm90IHBvc3NpYmxlIHRvIHNldCBjZWxsIGRhdGEgYXQgJHtKU09OLnN0cmluZ2lmeSho''@;'; put 'put ''KX1gKTtjb25zdCBmPXRoaXMuaG90LmdldENlbGxNZXRhKGwsYSk7cmV0dXJuIGRRKGQsZi50eXBlKSYmKG01ZShkLGYuZGF0ZUZvcm1hdCk/ZD12NWUoZCxmLmRhdGVGb3JtYXQpOiExPT09ZnVuY3Rpb24gV2R0KGMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYyYmYy5zdGFydHNXaXRoKCI9''@;'; put 'put ''Iil9KGQpJiYoZD1gJyR7ZH1gKSksdGhpcy5lbmdpbmUuc2V0Q2VsbENvbnRlbnRzKGgsZCl9fWZ1bmN0aW9uIHNodChjLGwsYSl7Y29uc3QgZD10aGlzLmhvdC5wcm9wVG9Db2woYSk7aWYodGhpcy5pc0Zvcm11bGFDZWxsVHlwZShsLGQpKXtjb25zdCBoPXtyb3c6dGhpcy5yb3dBeGlzU3lu''@;'; put 'put ''Y2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgobCksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGQpLHNoZWV0OnRoaXMuc2hlZXRJZH0sZj10aGlzLmhvdC5nZXRDZWxsTWV0YShsLGQpO2xldCB2PXRoaXMuZW5naW5lLmdldENlbGxWYWx1''@;'; put 'put ''ZShoKTtyZXR1cm4iZGF0ZSI9PT1mLnR5cGUmJnYxKHYpJiYodj1iNWUodixmLmRhdGVGb3JtYXQpKSwib2JqZWN0Ij09dHlwZW9mIHYmJm51bGwhPT12P3YudmFsdWU6dn1yZXR1cm4gY31mdW5jdGlvbiBsaHQoYyxsLGEpe2NvbnN0e3JvdzpkLGNvbDpofT1sLmdldFRvcFN0YXJ0Q29ybmVy''@;'; put 'put ''KCkse3JvdzpmLGNvbDp2fT1sLmdldEJvdHRvbUVuZENvcm5lcigpLHtyb3c6TSxjb2w6RH09YS5nZXRUb3BTdGFydENvcm5lcigpLHtyb3c6Wixjb2w6bmV9PWEuZ2V0Qm90dG9tRW5kQ29ybmVyKCksY2U9e3N0YXJ0Ontyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlz''@;'; put 'put ''dWFsSW5kZXgoZCksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGgpLHNoZWV0OnRoaXMuc2hlZXRJZH0sZW5kOntyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoZiksY29sOnRoaXMuY29sdW1uQXhpc1N5''@;'; put 'put ''bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KHYpLHNoZWV0OnRoaXMuc2hlZXRJZH19LGJlPXtzdGFydDp7cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KE0pLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJ''@;'; put 'put ''bmRleChEKSxzaGVldDp0aGlzLnNoZWV0SWR9LGVuZDp7cm93OnRoaXMucm93QXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KFopLGNvbDp0aGlzLmNvbHVtbkF4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChuZSksc2hlZXQ6dGhpcy5zaGVldElkfX07aWYo''@;'; put 'put ''ITE9PT10aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb1NldENlbGxDb250ZW50cyhiZSkpcmV0dXJuITE7Y29uc3QgRWU9dGhpcy5lbmdpbmUuZ2V0RmlsbFJhbmdlRGF0YShjZSxiZSkse3JvdzpCZSxjb2w6cWV9PWNlLnN0YXJ0LHtyb3c6bnQsY29sOmx0fT1jZS5lbmQsbXQ9bnQtQmUrMSxK''@;'; put 'put ''dD1sdC1xZSsxO2ZvcihsZXQgeW49MDt5bjxFZS5sZW5ndGg7eW4rPTEpZm9yKGxldCBDbj0wO0NuPEVlW3luXS5sZW5ndGg7Q24rPTEpe2NvbnN0IHRuPUVlW3luXVtDbl0seG49QmUreW4lbXQsUW49cWUrQ24lSnQseWk9dGhpcy5ob3QuZ2V0Q2VsbE1ldGEoeG4sUW4pO2RRKHRuLHlpLnR5''@;'; put 'put ''cGUpJiYodG4uc3RhcnRzV2l0aCgiJyIpP0VlW3luXVtDbl09dG4uc2xpY2UoMSk6ITE9PT10aGlzLmlzRm9ybXVsYUNlbGxUeXBlKHhuLFFuLHRoaXMuc2hlZXRJZCkmJihFZVt5bl1bQ25dPVlkdCh0bix5aS5kYXRlRm9ybWF0KSkpfXJldHVybiBFZX1mdW5jdGlvbiBTNWUoYyxsKXsoYXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOiIiKS5pbmNsdWRlcyhnMShDMSkpfHxzNih3USx0aGlzLG1jKHRoaXMuaG90LmdldFNldHRpbmdzKCkuZGF0YSkpfWZ1bmN0aW9uIGNodCgpe2NvbnN0IGM9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUFy''@;'; put 'put ''cmF5KCk7bGV0IGw9ITE7Yy5mb3JFYWNoKChhLGQpPT57YS5mb3JFYWNoKChoLGYpPT57Y29uc3Qgdj10aGlzLmhvdC5nZXRDZWxsTWV0YShkLGYpLE09di5kYXRlRm9ybWF0O2RRKGgsdi50eXBlKSYmKGw9ITAsbTVlKGgsTSk/Y1tkXVtmXT12NWUoaCxNKTohMT09PXRoaXMuaXNGb3JtdWxh''@;'; put 'put ''Q2VsbFR5cGUoZCxmKSYmKGNbZF1bZl09YCcke2h9YCkpfSl9KSwhMD09PWwmJihzNihIZyx0aGlzLCEwKSx0aGlzLmVuZ2luZS5zZXRTaGVldENvbnRlbnQodGhpcy5zaGVldElkLGMpLHM2KEhnLHRoaXMsITEpKX1mdW5jdGlvbiBNNWUoYyxsKXtpZighKGFyZ3VtZW50cy5sZW5ndGg+MiYm''@;'; put 'put ''dm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiIikuaW5jbHVkZXMoZzEoQzEpKSlpZih0aGlzLnNoZWV0TmFtZT1mdW5jdGlvbiBVZHQoYyxsKXtyZXR1cm4obWMobCl8fCFjLmRvZXNTaGVldEV4aXN0KGwpKSYmKGw9Yy5hZGRTaGVldChsKSksbH0odGhpcy5lbmdpbmUsdGhp''@;'; put 'put ''cy5ob3QuZ2V0U2V0dGluZ3MoKVtDMV0uc2hlZXROYW1lKSxvdyh3USx0aGlzKSl0aGlzLnN3aXRjaFNoZWV0KHRoaXMuc2hlZXROYW1lKTtlbHNle2NvbnN0IGQ9dGhpcy5ob3QuZ2V0U291cmNlRGF0YUFycmF5KCk7aWYodGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9SZXBsYWNlU2hlZXRD''@;'; put 'put ''b250ZW50KHRoaXMuc2hlZXRJZCxkKSl7czYoSGcsdGhpcywhMCk7Y29uc3QgaD10aGlzLmVuZ2luZS5zZXRTaGVldENvbnRlbnQodGhpcy5zaGVldElkLGQpO3RoaXMuaW5kZXhTeW5jZXIuc2V0dXBTeW5jRW5kcG9pbnQodGhpcy5lbmdpbmUsdGhpcy5zaGVldElkKSx0aGlzLnJlbmRlckRl''@;'; put 'put ''cGVuZGVudFNoZWV0cyhoKSxzNihIZyx0aGlzLCExKX19fWZ1bmN0aW9uIHVodChjLGwsYSxkKXtpZigiZ2V0IiE9PWR8fG93KEhnLHRoaXMpfHxudWxsPT09dGhpcy5zaGVldE5hbWV8fCF0aGlzLmVuZ2luZS5kb2VzU2hlZXRFeGlzdCh0aGlzLnNoZWV0TmFtZSkpcmV0dXJuO2NvbnN0IGg9''@;'; put 'put ''dGhpcy5ob3QudG9WaXN1YWxSb3coYyk7aWYobnVsbD09PWh8fG51bGw9PT1sKXJldHVybjtpZighdGhpcy5pc0Zvcm11bGFDZWxsVHlwZShoLGwpJiYiQVJSQVkiIT09dGhpcy5nZXRDZWxsVHlwZShoLGwpKXJldHVybiB2b2lkKGc1ZShhLnZhbHVlKSYmKGEudmFsdWU9ZnVuY3Rpb24gWmR0''@;'; put 'put ''KGMpe3JldHVybiBnNWUoYyk/Yy5zdWJzdHIoMSk6Y30oYS52YWx1ZSkpKTtjb25zdCB2PXtyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoaCksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGwpLHNoZWV0''@;'; put 'put ''OnRoaXMuc2hlZXRJZH07bGV0IE09dGhpcy5lbmdpbmUuZ2V0Q2VsbFZhbHVlKHYpLEQ9dGhpcy5ob3QuZ2V0Q2VsbHNNZXRhKCkuZmluZChuZT0+bmUudmlzdWFsUm93PT09aCYmbmUudmlzdWFsQ29sPT09bCk7dm9pZCAwPT09RCYmKEQ9e30pLCJkYXRlIj09PUQudHlwZSYmdjEoTSkmJihN''@;'; put 'put ''PWI1ZShNLEQuZGF0ZUZvcm1hdCkpLGEudmFsdWU9Im9iamVjdCI9PXR5cGVvZiBNJiZudWxsIT09TT9NLnZhbHVlOk19ZnVuY3Rpb24gZGh0KGMsbCxhLGQpe2lmKCJnZXQiIT09ZHx8b3coSGcsdGhpcyl8fG51bGw9PT10aGlzLnNoZWV0TmFtZXx8IXRoaXMuZW5naW5lLmRvZXNTaGVldEV4''@;'; put 'put ''aXN0KHRoaXMuc2hlZXROYW1lKSlyZXR1cm47Y29uc3QgaD10aGlzLmhvdC50b1Zpc3VhbFJvdyhjKSxmPXRoaXMuaG90LnByb3BUb0NvbChsKTtpZihudWxsPT09aHx8bnVsbD09PWZ8fCF0aGlzLmlzRm9ybXVsYUNlbGxUeXBlKGgsZikmJiJBUlJBWSIhPT10aGlzLmdldENlbGxUeXBlKGgs''@;'; put 'put ''ZikpcmV0dXJuO2NvbnN0IE09dGhpcy5lbmdpbmUuZ2V0U2hlZXREaW1lbnNpb25zKHRoaXMuZW5naW5lLmdldFNoZWV0SWQodGhpcy5zaGVldE5hbWUpKTtpZigwPT09TS53aWR0aCYmMD09PU0uaGVpZ2h0KXJldHVybjtjb25zdCBEPXtyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5k''@;'; put 'put ''ZXhGcm9tVmlzdWFsSW5kZXgoaCksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGYpLHNoZWV0OnRoaXMuc2hlZXRJZH07YS52YWx1ZT10aGlzLmVuZ2luZS5nZXRDZWxsU2VyaWFsaXplZChEKX1mdW5jdGlvbiB4NWUoYyxsKXtpZihhdyhsKSly''@;'; put 'put ''ZXR1cm47Y29uc3QgYT1bXSxkPVtdLGg9dGhpcy5lbmdpbmUuYmF0Y2goKCk9PntjLmZvckVhY2goZj0+e2xldFt2LE0sLERdPWY7Y29uc3QgWj10aGlzLmhvdC5wcm9wVG9Db2woTSksbmU9dGhpcy5ob3QudG9QaHlzaWNhbFJvdyh2KSxjZT10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKFop''@;'; put 'put ''LGJlPXtyb3c6dGhpcy5yb3dBeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgodiksY29sOnRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KFopLHNoZWV0OnRoaXMuc2hlZXRJZH07bnVsbCE9PW5lJiZudWxsIT09Y2U/dGhpcy5zeW5jQ2hh''@;'; put 'put ''bmdlV2l0aEVuZ2luZSh2LFosRCk6YS5wdXNoKFt2LFosRF0pLGQucHVzaCh7YWRkcmVzczpiZX0pfSl9KTthLmxlbmd0aCYmdGhpcy5ob3QuYWRkSG9va09uY2UoImFmdGVyQ2hhbmdlIiwoKT0+e2NvbnN0IGY9dGhpcy5lbmdpbmUuYmF0Y2goKCk9PnthLmZvckVhY2godj0+e2xldFtNLEQs''@;'; put 'put ''Wl09djt0aGlzLnN5bmNDaGFuZ2VXaXRoRW5naW5lKE0sRCxaKX0pfSk7dGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoZiwhMCl9KSx0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhoKSx0aGlzLnZhbGlkYXRlRGVwZW5kZW50Q2VsbHMoaCxkKX1mdW5jdGlvbiBoaHQoYyxsKXtpZihhdyhs''@;'; put 'put ''KSlyZXR1cm47Y29uc3QgYT1bXSxkPVtdO2MuZm9yRWFjaChoPT57bGV0W2YsdiwsTV09aDtjb25zdCBEPXRoaXMuaG90LnByb3BUb0NvbCh2KTtpZighdjEoRCkpcmV0dXJuO2NvbnN0IFo9e3Jvdzp0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChmKSxjb2w6''@;'; put 'put ''dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoRCksc2hlZXQ6dGhpcy5zaGVldElkfTt0aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb1NldENlbGxDb250ZW50cyhaKT8oZC5wdXNoKHthZGRyZXNzOlp9KSxhLnB1c2goLi4udGhpcy5lbmdpbmUuc2V0Q2Vs''@;'; put 'put ''bENvbnRlbnRzKFosTSkpKTp0bChgTm90IHBvc3NpYmxlIHRvIHNldCBzb3VyY2UgY2VsbCBkYXRhIGF0ICR7SlNPTi5zdHJpbmdpZnkoWil9YCl9KSx0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhhKSx0aGlzLnZhbGlkYXRlRGVwZW5kZW50Q2VsbHMoYSxkKX1mdW5jdGlvbiBmaHQoYyxs''@;'; put 'put ''KXtsZXQgYT10aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChjKTtpZihjPj10aGlzLmhvdC5jb3VudFJvd3MoKSYmKGE9YyksbnVsbD09PXRoaXMuc2hlZXRJZHx8IXRoaXMuZW5naW5lLmRvZXNTaGVldEV4aXN0KHRoaXMuc2hlZXROYW1lKXx8IXRoaXMuZW5n''@;'; put 'put ''aW5lLmlzSXRQb3NzaWJsZVRvQWRkUm93cyh0aGlzLnNoZWV0SWQsW2EsbF0pKXJldHVybiExfWZ1bmN0aW9uIHBodChjLGwpe2xldCBhPXRoaXMuY29sdW1uQXhpc1N5bmNlci5nZXRIZkluZGV4RnJvbVZpc3VhbEluZGV4KGMpO2lmKGM+PXRoaXMuaG90LmNvdW50Q29scygpJiYoYT1jKSxu''@;'; put 'put ''dWxsPT09dGhpcy5zaGVldElkfHwhdGhpcy5lbmdpbmUuZG9lc1NoZWV0RXhpc3QodGhpcy5zaGVldE5hbWUpfHwhdGhpcy5lbmdpbmUuaXNJdFBvc3NpYmxlVG9BZGRDb2x1bW5zKHRoaXMuc2hlZXRJZCxbYSxsXSkpcmV0dXJuITF9ZnVuY3Rpb24gZ2h0KGMsbCxhKXtyZXR1cm4hMSE9PXRo''@;'; put 'put ''aXMucm93QXhpc1N5bmNlci5zZXRSZW1vdmVkSGZJbmRleGVzKGEpLmV2ZXJ5KGY9PnRoaXMuZW5naW5lLmlzSXRQb3NzaWJsZVRvUmVtb3ZlUm93cyh0aGlzLnNoZWV0SWQsW2YsMV0pKSYmdm9pZCAwfWZ1bmN0aW9uIG1odChjLGwsYSl7cmV0dXJuITEhPT10aGlzLmNvbHVtbkF4aXNTeW5j''@;'; put 'put ''ZXIuc2V0UmVtb3ZlZEhmSW5kZXhlcyhhKS5ldmVyeShmPT50aGlzLmVuZ2luZS5pc0l0UG9zc2libGVUb1JlbW92ZUNvbHVtbnModGhpcy5zaGVldElkLFtmLDFdKSkmJnZvaWQgMH1mdW5jdGlvbiB2aHQoYyxsLGEpe2lmKGF3KGEpKXJldHVybjtjb25zdCBkPXRoaXMuZW5naW5lLmFkZFJv''@;'; put 'put ''d3ModGhpcy5zaGVldElkLFt0aGlzLnJvd0F4aXNTeW5jZXIuZ2V0SGZJbmRleEZyb21WaXN1YWxJbmRleChjKSxsXSk7dGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoZCl9ZnVuY3Rpb24gYmh0KGMsbCxhKXtpZihhdyhhKSlyZXR1cm47Y29uc3QgZD10aGlzLmVuZ2luZS5hZGRDb2x1bW5z''@;'; put 'put ''KHRoaXMuc2hlZXRJZCxbdGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldEhmSW5kZXhGcm9tVmlzdWFsSW5kZXgoYyksbF0pO3RoaXMucmVuZGVyRGVwZW5kZW50U2hlZXRzKGQpfWZ1bmN0aW9uIHlodChjLGwsYSxkKXtpZihhdyhkKSlyZXR1cm47Y29uc3QgaD10aGlzLnJvd0F4aXNTeW5jZXIu''@;'; put 'put ''Z2V0UmVtb3ZlZEhmSW5kZXhlcygpLnNvcnQoKHYsTSk9Pk0tdiksZj10aGlzLmVuZ2luZS5iYXRjaCgoKT0+e2guZm9yRWFjaCh2PT57dGhpcy5lbmdpbmUucmVtb3ZlUm93cyh0aGlzLnNoZWV0SWQsW3YsMV0pfSl9KTt0aGlzLnJlbmRlckRlcGVuZGVudFNoZWV0cyhmKX1mdW5jdGlvbiBf''@;'; put 'put ''aHQoYyxsLGEsZCl7aWYoYXcoZCkpcmV0dXJuO2NvbnN0IGg9dGhpcy5jb2x1bW5BeGlzU3luY2VyLmdldFJlbW92ZWRIZkluZGV4ZXMoKS5zb3J0KCh2LE0pPT5NLXYpLGY9dGhpcy5lbmdpbmUuYmF0Y2goKCk9PntoLmZvckVhY2godj0+e3RoaXMuZW5naW5lLnJlbW92ZUNvbHVtbnModGhp''@;'; put 'put ''cy5zaGVldElkLFt2LDFdKX0pfSk7dGhpcy5yZW5kZXJEZXBlbmRlbnRTaGVldHMoZil9ZnVuY3Rpb24gd2h0KGMsbCxhKXt2YXIgZDtzNihIZyx0aGlzLCEwKTtjb25zdCBoPXRoaXMuaG90LmdldFNvdXJjZURhdGFBcnJheShhLDAsYSsoKG51bGw9PT0oZD1sLl9fY2hpbGRyZW4pfHx2b2lk''@;'; put 'put ''IDA9PT1kP3ZvaWQgMDpkLmxlbmd0aCl8fDApLHRoaXMuaG90LmNvdW50U291cmNlQ29scygpKTtzNihIZyx0aGlzLCExKSxoLmZvckVhY2goKGYsdik9PntmLmZvckVhY2goKE0sRCk9Pnt0aGlzLmVuZ2luZS5zZXRDZWxsQ29udGVudHMoe2NvbDpELHJvdzphK3Ysc2hlZXQ6dGhpcy5zaGVl''@;'; put 'put ''dElkfSxbW01dXSl9KX0pfWZ1bmN0aW9uIENodChjKXt0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJGb3JtdWxhc1ZhbHVlc1VwZGF0ZSIsYyl9ZnVuY3Rpb24gU2h0KGMsbCl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyTmFtZWRFeHByZXNzaW9uQWRkZWQiLGMsbCl9ZnVuY3Rpb24gTWh0KGMs''@;'; put 'put ''bCl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyTmFtZWRFeHByZXNzaW9uUmVtb3ZlZCIsYyxsKX1mdW5jdGlvbiB4aHQoYyl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2hlZXRBZGRlZCIsYyl9ZnVuY3Rpb24gRWh0KGMsbCl7dGhpcy5zaGVldE5hbWU9bCx0aGlzLmhvdC5ydW5Ib29rcygi''@;'; put 'put ''YWZ0ZXJTaGVldFJlbmFtZWQiLGMsbCl9ZnVuY3Rpb24gVGh0KGMsbCl7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyU2hlZXRSZW1vdmVkIixjLGwpfWZ1bmN0aW9uIEU1ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHBy''@;'; put 'put ''aXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gTTkoYyxsKXtyZXR1cm4gYy5nZXQobDYoYyxsKSl9ZnVuY3Rpb24gVDVlKGMsbCxhKXtyZXR1cm4gYy5zZXQobDYoYyxsKSxhKSxhfWZ1bmN0aW9uIGw2KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9j''@;'; put 'put ''PT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1Bby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlSGlkZUNvbHVtbnMiKSxBby5n''@;'; put 'put ''ZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJIaWRlQ29sdW1ucyIpLEFvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVVbmhpZGVDb2x1bW5zIiksQW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyVW5oaWRlQ29sdW1ucyIpO2NvbnN0IEE1ZT0iaGlkZGVuQ29sdW1u''@;'; put 'put ''cyI7dmFyIGpwPW5ldyBXZWFrTWFwLHg5PW5ldyBXZWFrU2V0O2NsYXNzIExodCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBEaHQoYyxsKXtFNWUoYyxsKSxsLmFkZChjKX0odGhpcyx4OSksZnVuY3Rpb24gSWh0KGMsbCxhKXtFNWUoYyxs''@;'; put 'put ''KSxsLnNldChjLGEpfSh0aGlzLGpwLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBBNWV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMzEwfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybntjb3B5UGFzdGVFbmFibGVkOiEwLGluZGlj''@;'; put 'put ''YXRvcnM6ITEsY29sdW1uczpbXX19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0E1ZV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fChUNWUoanAsdGhpcyxuZXcgc1ApLE05KGpwLHRoaXMpLmFkZExvY2FsSG9vaygiaW5pdCIsKCk9''@;'; put 'put ''Pmw2KHg5LHRoaXMsVmh0KS5jYWxsKHRoaXMpKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUsTTkoanAsdGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixmdW5jdGlvbigpe2Zvcih2YXIgYT1h''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBsNih4OSxsLE5odCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckdldENlbGxNZXRhIiwoYSxkLGgpPT5sNih4OSx0aGlzLFBodCkuY2FsbCh0aGlzLGEs''@;'; put 'put ''ZCxoKSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2xXaWR0aCIsKGEsZCk9Pmw2KHg5LHRoaXMsT2h0KS5jYWxsKHRoaXMsYSxkKSwyKSx0aGlzLmFkZEhvb2soImFmdGVyR2V0Q29sSGVhZGVyIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9''@;'; put 'put ''MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBsNih4OSxsLEhodCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb3B5YWJsZVJhbmdlIixhPT5sNih4OSx0aGlzLEZodCkuY2FsbCh0aGlzLGEpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2lu''@;'; put 'put ''KCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIudW5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUpLHN1cGVyLmRpc2FibGVQbHVnaW4oKSx0aGlz''@;'; put 'put ''LnJlc2V0Q2VsbHNNZXRhKCl9c2hvd0NvbHVtbnMobCl7Y29uc3QgYT10aGlzLmdldEhpZGRlbkNvbHVtbnMoKSxkPXRoaXMuaXNWYWxpZENvbmZpZyhsKTtsZXQgaD1hO2NvbnN0IGY9TTkoanAsdGhpcykuZ2V0VmFsdWVzKCkuc2xpY2UoKSx2PWwubGVuZ3RoPjA7ZCYmdiYmKFluKGwubWFw''@;'; put 'put ''KFo9PnRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4oWikpLFo9PntmW1pdPSExfSksaD1xdShmLChaLG5lLGNlKT0+KG5lJiZaLnB1c2godGhpcy5ob3QudG9WaXN1YWxDb2x1bW4oY2UpKSxaKSxbXSkpLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVuaGlkZUNvbHVtbnMiLGEsaCxk''@;'; put 'put ''JiZ2KSYmKGQmJnYmJk05KGpwLHRoaXMpLnNldFZhbHVlcyhmKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclVuaGlkZUNvbHVtbnMiLGEsaCxkJiZ2LGQmJmgubGVuZ3RoPGEubGVuZ3RoKSl9c2hvd0NvbHVtbigpe2Zvcih2YXIg''@;'; put 'put ''bD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMuc2hvd0NvbHVtbnMoYSl9aGlkZUNvbHVtbnMobCl7Y29uc3QgYT10aGlzLmdldEhpZGRlbkNvbHVtbnMoKSxkPXRoaXMuaXNWYWxpZENvbmZpZyhsKTtsZXQgaD1hO2Qm''@;'; put 'put ''JihoPUFycmF5LmZyb20obmV3IFNldChhLmNvbmNhdChsKSkpKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVIaWRlQ29sdW1ucyIsYSxoLGQpJiYoZCYmdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntZbihsLHY9PntNOShqcCx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgodGhpcy5o''@;'; put 'put ''b3QudG9QaHlzaWNhbENvbHVtbih2KSwhMCl9KX0sITApLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckhpZGVDb2x1bW5zIixhLGgsZCxkJiZoLmxlbmd0aD5hLmxlbmd0aCkpfWhpZGVDb2x1bW4oKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2Qr''@;'; put 'put ''KylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLmhpZGVDb2x1bW5zKGEpfWdldEhpZGRlbkNvbHVtbnMoKXtyZXR1cm4geXMoTTkoanAsdGhpcykuZ2V0SGlkZGVuSW5kZXhlcygpLGw9PnRoaXMuaG90LnRvVmlzdWFsQ29sdW1uKGwpKX1pc0hpZGRlbihsKXtyZXR1cm4gTTkoanAsdGhpcykuZ2V0''@;'; put 'put ''VmFsdWVBdEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkpfHwhMX1pc1ZhbGlkQ29uZmlnKGwpe2NvbnN0IGE9dGhpcy5ob3QuY291bnRDb2xzKCk7cmV0dXJuISEoQXJyYXkuaXNBcnJheShsKSYmbC5sZW5ndGg+MCkmJmwuZXZlcnkoZD0+TnVtYmVyLmlzSW50ZWdlcihkKSYm''@;'; put 'put ''ZD49MCYmZDxhKX1yZXNldENlbGxzTWV0YSgpe1luKHRoaXMuaG90LmdldENlbGxzTWV0YSgpLGw9PntsLnNraXBDb2x1bW5PblBhc3RlPSExfSl9ZGVzdHJveSgpe1Q1ZShqcCx0aGlzLG51bGwpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gT2h0KGMsbCl7cmV0dXJuIHRoaXMuaXNIaWRk''@;'; put 'put ''ZW4obCk/MDp0aGlzLmdldFNldHRpbmcoImluZGljYXRvcnMiKSYmKHRoaXMuaXNIaWRkZW4obCsxKXx8dGhpcy5pc0hpZGRlbihsLTEpKSYmIm51bWJlciI9PXR5cGVvZiBjJiZ0aGlzLmhvdC5oYXNDb2xIZWFkZXJzKCk/YysxNTp2b2lkIDB9ZnVuY3Rpb24gUGh0KGMsbCxhKXtpZighMT09''@;'; put 'put ''PXRoaXMuZ2V0U2V0dGluZygiY29weVBhc3RlRW5hYmxlZCIpJiZ0aGlzLmlzSGlkZGVuKGwpJiYoYS5za2lwQ29sdW1uT25QYXN0ZT0hMCksdGhpcy5pc0hpZGRlbihsLTEpKWEuY2xhc3NOYW1lPWEuY2xhc3NOYW1lfHwiIiwtMT09PWEuY2xhc3NOYW1lLmluZGV4T2YoImFmdGVySGlkZGVu''@;'; put 'put ''Q29sdW1uIikmJihhLmNsYXNzTmFtZSs9IiBhZnRlckhpZGRlbkNvbHVtbiIpO2Vsc2UgaWYoYS5jbGFzc05hbWUpe2NvbnN0IGQ9YS5jbGFzc05hbWUuc3BsaXQoIiAiKTtpZihkLmxlbmd0aD4wKXtjb25zdCBoPWQuaW5kZXhPZigiYWZ0ZXJIaWRkZW5Db2x1bW4iKTtoPi0xJiZkLnNwbGlj''@;'; put 'put ''ZShoLDEpLGEuY2xhc3NOYW1lPWQuam9pbigiICIpfX19ZnVuY3Rpb24gRmh0KGMpe2lmKHRoaXMuZ2V0U2V0dGluZygiY29weVBhc3RlRW5hYmxlZCIpKXJldHVybiBjO2NvbnN0IGw9W10sYT0oZCxoLGYsdik9PntsLnB1c2goe3N0YXJ0Um93OmQsZW5kUm93Omgsc3RhcnRDb2w6ZixlbmRD''@;'; put 'put ''b2w6dn0pfTtyZXR1cm4gWW4oYyxkPT57bGV0IGg9ITAsZj0wOyRvKGQuc3RhcnRDb2wsZC5lbmRDb2wsdj0+e3RoaXMuaXNIaWRkZW4odik/KGh8fGEoZC5zdGFydFJvdyxkLmVuZFJvdyxmLHYtMSksaD0hMCk6KGgmJihmPXYpLHY9PT1kLmVuZENvbCYmYShkLnN0YXJ0Um93LGQuZW5kUm93''@;'; put 'put ''LGYsdiksaD0hMSl9KX0pLGx9ZnVuY3Rpb24gSGh0KGMsbCl7aWYoIXRoaXMuZ2V0U2V0dGluZygiaW5kaWNhdG9ycyIpfHxjPDApcmV0dXJuO2NvbnN0IGE9W107Yz49MSYmdGhpcy5pc0hpZGRlbihjLTEpJiZhLnB1c2goImFmdGVySGlkZGVuQ29sdW1uIiksYzx0aGlzLmhvdC5jb3VudENv''@;'; put 'put ''bHMoKS0xJiZ0aGlzLmlzSGlkZGVuKGMrMSkmJmEucHVzaCgiYmVmb3JlSGlkZGVuQ29sdW1uIiksVGkobCxhKX1mdW5jdGlvbiBOaHQoYyl7Yy5pdGVtcy5wdXNoKHtuYW1lOmlzfSxmdW5jdGlvbiBBaHQoYyl7cmV0dXJue2tleToiaGlkZGVuX2NvbHVtbnNfaGlkZSIsbmFtZSgpe2NvbnN0''@;'; put 'put ''IGw9dGhpcy5nZXRTZWxlY3RlZExhc3QoKTtsZXQgYT0wO2lmKEFycmF5LmlzQXJyYXkobCkpe2NvbnN0WyxkLCxoXT1sO2QtaCE9MCYmKGE9MSl9cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShfcSxhKX0sY2FsbGJhY2soKXtjb25zdHtmcm9tOmwsdG86YX09dGhpcy5nZXRTZWxl''@;'; put 'put ''Y3RlZFJhbmdlTGFzdCgpLGQ9TWF0aC5tYXgoTWF0aC5taW4obC5jb2wsYS5jb2wpLDApLGg9TWF0aC5tYXgobC5jb2wsYS5jb2wpLGY9W107Zm9yKGxldCBEPWQ7RDw9aDtEKz0xKWYucHVzaChEKTtjLmhpZGVDb2x1bW5zKGYpO2NvbnN0IE09dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXRO''@;'; put 'put ''ZWFyZXN0Tm90SGlkZGVuSW5kZXgoZltmLmxlbmd0aC0xXSwxLCEwKTtOdW1iZXIuaXNJbnRlZ2VyKE0pJiZNPj0wP3RoaXMuc2VsZWN0Q29sdW1ucyhNKTp0aGlzLmRlc2VsZWN0Q2VsbCgpLHRoaXMucmVuZGVyKCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfSxkaXNhYmxlZDoh''@;'; put 'put ''MSxoaWRkZW4oKXtyZXR1cm4hKHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpfHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSl9fX0odGhpcyksZnVuY3Rpb24ga2h0KGMpe2NvbnN0IGw9W107cmV0dXJue2tleToiaGlkZGVuX2NvbHVtbnNfc2hv''@;'; put 'put ''dyIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2Uod3EsbC5sZW5ndGg+MT8xOjApfSxjYWxsYmFjaygpe3ZhciBhLGQ7aWYoMD09PWwubGVuZ3RoKXJldHVybjtsZXQgaD1sWzBdLGY9bFtsLmxlbmd0aC0xXTtoPW51bGwhPT0oYT10aGlzLmNvbHVtbkluZGV4TWFwcGVy''@;'; put 'put ''LmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChoLTEsLTEpKSYmdm9pZCAwIT09YT9hOjAsZj1udWxsIT09KGQ9dGhpcy5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZisxLDEpKSYmdm9pZCAwIT09ZD9kOnRoaXMuY291bnRDb2xzKCktMSxjLnNob3dDb2x1bW5z''@;'; put 'put ''KGwpLHRoaXMucmVuZGVyKCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLGYtaCsxPT09dGhpcy5jb3VudENvbHMoKXx8dGhpcy5zZWxlY3RDb2x1bW5zKGgsZil9LGRpc2FibGVkOiExLGhpZGRlbigpe2NvbnN0IGE9eXMoYy5nZXRIaWRkZW5Db2x1bW5zKCksY2U9PnRoaXMudG9Q''@;'; put 'put ''aHlzaWNhbENvbHVtbihjZSkpO2lmKCF0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSYmIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfHxhLmxlbmd0aDwxKXJldHVybiEwO2wubGVuZ3RoPTA7Y29uc3QgZD10aGlzLmdldFNlbGVjdGVkUmFuZ2VM''@;'; put 'put ''YXN0KCksaD1kLmdldFRvcFN0YXJ0Q29ybmVyKCkuY29sLGY9ZC5nZXRCb3R0b21FbmRDb3JuZXIoKS5jb2wsdj10aGlzLmNvbHVtbkluZGV4TWFwcGVyLE09di5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGgpLEQ9di5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGYpLFo9di5n''@;'; put 'put ''ZXROb3RUcmltbWVkSW5kZXhlcygpLG5lPVtdO2lmKGghPT1mKXtpZihmLWgrMT5ELU0rMSl7Y29uc3QgRWU9Wi5zbGljZShoLGYrMSk7bmUucHVzaCguLi5FZS5maWx0ZXIoQmU9PmEuaW5jbHVkZXMoQmUpKSl9fWVsc2UgaWYoMD09PU0mJk08aCluZS5wdXNoKC4uLlouc2xpY2UoMCxoKSk7''@;'; put 'put ''ZWxzZSBpZihudWxsPT09TSluZS5wdXNoKC4uLlouc2xpY2UoMCx0aGlzLmNvdW50Q29scygpKSk7ZWxzZXtjb25zdCBjZT10aGlzLmNvdW50Q29scygpLTE7RD09PXYuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh2LmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChjZSwtMSkpJiZjZT5m''@;'; put 'put ''JiZuZS5wdXNoKC4uLlouc2xpY2UoZisxKSl9cmV0dXJuIFluKG5lLGNlPT57bC5wdXNoKHRoaXMudG9WaXN1YWxDb2x1bW4oY2UpKX0pLDA9PT1sLmxlbmd0aH19fSh0aGlzKSl9ZnVuY3Rpb24gVmh0KCl7Y29uc3QgYz10aGlzLmdldFNldHRpbmcoImNvbHVtbnMiKTtBcnJheS5pc0FycmF5''@;'; put 'put ''KGMpJiZ0aGlzLmhpZGVDb2x1bW5zKGMpfWZ1bmN0aW9uIGs1ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gRTkoYyxsKXtyZXR1cm4g''@;'; put 'put ''Yy5nZXQoYzYoYyxsKSl9ZnVuY3Rpb24gRDVlKGMsbCxhKXtyZXR1cm4gYy5zZXQoYzYoYyxsKSxhKSxhfWZ1bmN0aW9uIGM2KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVy''@;'; put 'put ''cm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1Bby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlSGlkZVJvd3MiKSxBby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJIaWRlUm93cyIpLEFvLmdldFNpbmdsZXRvbigpLnJlZ2lz''@;'; put 'put ''dGVyKCJiZWZvcmVVbmhpZGVSb3dzIiksQW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyVW5oaWRlUm93cyIpO2NvbnN0IEk1ZT0iaGlkZGVuUm93cyI7dmFyIHpwPW5ldyBXZWFrTWFwLFQ5PW5ldyBXZWFrU2V0O2NsYXNzIFdodCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3Vw''@;'; put 'put ''ZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiB6aHQoYyxsKXtrNWUoYyxsKSxsLmFkZChjKX0odGhpcyxUOSksZnVuY3Rpb24gVWh0KGMsbCxhKXtrNWUoYyxsKSxsLnNldChjLGEpfSh0aGlzLHpwLG51bGwpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBJNWV9c3RhdGljIGdldCBQ''@;'; put 'put ''TFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMzIwfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygpe3JldHVybntjb3B5UGFzdGVFbmFibGVkOiEwLGluZGljYXRvcnM6ITEscm93czpbXX19aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0k1ZV19ZW5hYmxlUGx1''@;'; put 'put ''Z2luKCl7dmFyIGw9dGhpczt0aGlzLmVuYWJsZWR8fChENWUoenAsdGhpcyxuZXcgc1ApLEU5KHpwLHRoaXMpLmFkZExvY2FsSG9vaygiaW5pdCIsKCk9PmM2KFQ5LHRoaXMsWGh0KS5jYWxsKHRoaXMpKSx0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5h''@;'; put 'put ''bWUsRTkoenAsdGhpcykpLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBjNihUOSxsLHFodCku''@;'; put 'put ''Y2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckdldENlbGxNZXRhIiwoYSxkLGgpPT5jNihUOSx0aGlzLEdodCkuY2FsbCh0aGlzLGEsZCxoKSksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dIZWlnaHQiLChhLGQpPT5jNihUOSx0aGlzLFlodCkuY2FsbCh0aGlzLGEsZCkpLHRoaXMu''@;'; put 'put ''YWRkSG9vaygiYWZ0ZXJHZXRSb3dIZWFkZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGM2KFQ5LGwsS2h0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlm''@;'; put 'put ''eUNvcHlhYmxlUmFuZ2UiLGE9PmM2KFQ5LHRoaXMsJGh0KS5jYWxsKHRoaXMsYSkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt0''@;'; put 'put ''aGlzLmhvdC5yb3dJbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1Z2luTmFtZSksc3VwZXIuZGlzYWJsZVBsdWdpbigpLHRoaXMucmVzZXRDZWxsc01ldGEoKX1zaG93Um93cyhsKXtjb25zdCBhPXRoaXMuZ2V0SGlkZGVuUm93cygpLGQ9dGhpcy5pc1ZhbGlkQ29uZmlnKGwpO2xl''@;'; put 'put ''dCBoPWE7Y29uc3QgZj1FOSh6cCx0aGlzKS5nZXRWYWx1ZXMoKS5zbGljZSgpLHY9bC5sZW5ndGg+MDtkJiZ2JiYoWW4obC5tYXAoWj0+dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhaKSksWj0+e2ZbWl09ITF9KSxoPXF1KGYsKFosbmUsY2UpPT4obmUmJloucHVzaCh0aGlzLmhvdC50b1Zpc3Vh''@;'; put 'put ''bFJvdyhjZSkpLFopLFtdKSksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW5oaWRlUm93cyIsYSxoLGQmJnYpJiYoZCYmdiYmRTkoenAsdGhpcykuc2V0VmFsdWVzKGYpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclVuaGlkZVJvd3MiLGEsaCxkJiZ2LGQmJmgubGVuZ3RoPGEubGVu''@;'; put 'put ''Z3RoKSl9c2hvd1Jvdygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1lbnRzW2RdO3RoaXMuc2hvd1Jvd3MoYSl9aGlkZVJvd3MobCl7Y29uc3QgYT10aGlzLmdldEhpZGRlblJvd3MoKSxkPXRoaXMuaXNWYWxpZENvbmZp''@;'; put 'put ''ZyhsKTtsZXQgaD1hO2QmJihoPUFycmF5LmZyb20obmV3IFNldChhLmNvbmNhdChsKSkpKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVIaWRlUm93cyIsYSxoLGQpJiYoZCYmdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntZbihsLHY9PntFOSh6cCx0aGlzKS5zZXRWYWx1ZUF0''@;'; put 'put ''SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbFJvdyh2KSwhMCl9KX0sITApLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckhpZGVSb3dzIixhLGgsZCxkJiZoLmxlbmd0aD5hLmxlbmd0aCkpfWhpZGVSb3coKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxs''@;'; put 'put ''O2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLmhpZGVSb3dzKGEpfWdldEhpZGRlblJvd3MoKXtyZXR1cm4geXMoRTkoenAsdGhpcykuZ2V0SGlkZGVuSW5kZXhlcygpLGw9PnRoaXMuaG90LnRvVmlzdWFsUm93KGwpKX1pc0hpZGRlbihsKXtyZXR1cm4gRTkoenAsdGhpcykuZ2V0VmFsdWVB''@;'; put 'put ''dEluZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCkpfHwhMX1pc1ZhbGlkQ29uZmlnKGwpe2NvbnN0IGE9dGhpcy5ob3QuY291bnRSb3dzKCk7cmV0dXJuISEoQXJyYXkuaXNBcnJheShsKSYmbC5sZW5ndGg+MCkmJmwuZXZlcnkoZD0+TnVtYmVyLmlzSW50ZWdlcihkKSYmZD49MCYmZDxh''@;'; put 'put ''KX1yZXNldENlbGxzTWV0YSgpe1luKHRoaXMuaG90LmdldENlbGxzTWV0YSgpLGw9PntsLnNraXBSb3dPblBhc3RlPSExfSl9ZGVzdHJveSgpe0Q1ZSh6cCx0aGlzLG51bGwpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gWWh0KGMsbCl7cmV0dXJuIHRoaXMuaXNIaWRkZW4obCk/MDpjfWZ1''@;'; put 'put ''bmN0aW9uIEdodChjLGwsYSl7aWYoITE9PT10aGlzLmdldFNldHRpbmcoImNvcHlQYXN0ZUVuYWJsZWQiKSYmdGhpcy5pc0hpZGRlbihjKSYmKGEuc2tpcFJvd09uUGFzdGU9ITApLHRoaXMuaXNIaWRkZW4oYy0xKSlhLmNsYXNzTmFtZT1hLmNsYXNzTmFtZXx8IiIsLTE9PT1hLmNsYXNzTmFt''@;'; put 'put ''ZS5pbmRleE9mKCJhZnRlckhpZGRlblJvdyIpJiYoYS5jbGFzc05hbWUrPSIgYWZ0ZXJIaWRkZW5Sb3ciKTtlbHNlIGlmKGEuY2xhc3NOYW1lKXtjb25zdCBkPWEuY2xhc3NOYW1lLnNwbGl0KCIgIik7aWYoZC5sZW5ndGg+MCl7Y29uc3QgaD1kLmluZGV4T2YoImFmdGVySGlkZGVuUm93Iik7''@;'; put 'put ''aD4tMSYmZC5zcGxpY2UoaCwxKSxhLmNsYXNzTmFtZT1kLmpvaW4oIiAiKX19fWZ1bmN0aW9uICRodChjKXtpZih0aGlzLmdldFNldHRpbmcoImNvcHlQYXN0ZUVuYWJsZWQiKSlyZXR1cm4gYztjb25zdCBsPVtdLGE9KGQsaCxmLHYpPT57bC5wdXNoKHtzdGFydFJvdzpkLGVuZFJvdzpoLHN0''@;'; put 'put ''YXJ0Q29sOmYsZW5kQ29sOnZ9KX07cmV0dXJuIFluKGMsZD0+e2xldCBoPSEwLGY9MDskbyhkLnN0YXJ0Um93LGQuZW5kUm93LHY9Pnt0aGlzLmlzSGlkZGVuKHYpPyhofHxhKGYsdi0xLGQuc3RhcnRDb2wsZC5lbmRDb2wpLGg9ITApOihoJiYoZj12KSx2PT09ZC5lbmRSb3cmJmEoZix2LGQu''@;'; put 'put ''c3RhcnRDb2wsZC5lbmRDb2wpLGg9ITEpfSl9KSxsfWZ1bmN0aW9uIEtodChjLGwpe2lmKCF0aGlzLmdldFNldHRpbmcoImluZGljYXRvcnMiKXx8YzwwKXJldHVybjtjb25zdCBhPVtdO2M+PTEmJnRoaXMuaXNIaWRkZW4oYy0xKSYmYS5wdXNoKCJhZnRlckhpZGRlblJvdyIpLGM8dGhpcy5o''@;'; put 'put ''b3QuY291bnRSb3dzKCktMSYmdGhpcy5pc0hpZGRlbihjKzEpJiZhLnB1c2goImJlZm9yZUhpZGRlblJvdyIpLFRpKGwsYSl9ZnVuY3Rpb24gcWh0KGMpe2MuaXRlbXMucHVzaCh7bmFtZTppc30sZnVuY3Rpb24gQmh0KGMpe3JldHVybntrZXk6ImhpZGRlbl9yb3dzX2hpZGUiLG5hbWUoKXtj''@;'; put 'put ''b25zdCBsPXRoaXMuZ2V0U2VsZWN0ZWRMYXN0KCk7bGV0IGE9MDtpZihBcnJheS5pc0FycmF5KGwpKXtjb25zdFtkLCxoXT1sO2QtaCE9MCYmKGE9MSl9cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFBocmFzZShDcSxhKX0sY2FsbGJhY2soKXtjb25zdHtmcm9tOmwsdG86YX09dGhpcy5nZXRT''@;'; put 'put ''ZWxlY3RlZFJhbmdlTGFzdCgpLGQ9TWF0aC5tYXgoTWF0aC5taW4obC5yb3csYS5yb3cpLDApLGg9TWF0aC5tYXgobC5yb3csYS5yb3cpLGY9W107Zm9yKGxldCBEPWQ7RDw9aDtEKz0xKWYucHVzaChEKTtjLmhpZGVSb3dzKGYpO2NvbnN0IE09dGhpcy5yb3dJbmRleE1hcHBlci5nZXROZWFy''@;'; put 'put ''ZXN0Tm90SGlkZGVuSW5kZXgoZltmLmxlbmd0aC0xXSwxLCEwKTtOdW1iZXIuaXNJbnRlZ2VyKE0pJiZNPj0wP3RoaXMuc2VsZWN0Um93cyhNKTp0aGlzLmRlc2VsZWN0Q2VsbCgpLHRoaXMucmVuZGVyKCksdGhpcy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfSxkaXNhYmxlZDohMSxoaWRk''@;'; put 'put ''ZW4oKXtyZXR1cm4hKHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpfHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKSl9fX0odGhpcyksZnVuY3Rpb24gamh0KGMpe2NvbnN0IGw9W107cmV0dXJue2tleToiaGlkZGVuX3Jvd3Nfc2hvdyIsbmFtZSgpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoU3EsbC5sZW5ndGg+MT8xOjApfSxjYWxsYmFjaygpe3ZhciBhLGQ7aWYoMD09PWwubGVuZ3RoKXJldHVybjtsZXQgaD1sWzBdLGY9bFtsLmxlbmd0aC0xXTtoPW51bGwhPT0oYT10aGlzLnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RI''@;'; put 'put ''aWRkZW5JbmRleChoLTEsLTEpKSYmdm9pZCAwIT09YT9hOjAsZj1udWxsIT09KGQ9dGhpcy5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZisxLDEpKSYmdm9pZCAwIT09ZD9kOnRoaXMuY291bnRSb3dzKCktMSxjLnNob3dSb3dzKGwpLHRoaXMucmVuZGVyKCksdGhp''@;'; put 'put ''cy52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpLGYtaCsxPT09dGhpcy5jb3VudFJvd3MoKXx8dGhpcy5zZWxlY3RSb3dzKGgsZil9LGRpc2FibGVkOiExLGhpZGRlbigpe2NvbnN0IGE9eXMoYy5nZXRIaWRkZW5Sb3dzKCksY2U9PnRoaXMudG9QaHlzaWNhbFJvdyhjZSkpO2lmKCF0aGlzLnNl''@;'; put 'put ''bGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmIXRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfHxhLmxlbmd0aDwxKXJldHVybiEwO2wubGVuZ3RoPTA7Y29uc3QgZD10aGlzLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksaD1kLmdldFRvcFN0YXJ0Q29ybmVyKCkucm93''@;'; put 'put ''LGY9ZC5nZXRCb3R0b21FbmRDb3JuZXIoKS5yb3csdj10aGlzLnJvd0luZGV4TWFwcGVyLE09di5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGgpLEQ9di5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGYpLFo9di5nZXROb3RUcmltbWVkSW5kZXhlcygpLG5lPVtdO2lmKGghPT1m''@;'; put 'put ''KXtpZihmLWgrMT5ELU0rMSl7Y29uc3QgRWU9Wi5zbGljZShoLGYrMSk7bmUucHVzaCguLi5FZS5maWx0ZXIoQmU9PmEuaW5jbHVkZXMoQmUpKSl9fWVsc2UgaWYoMD09PU0mJk08aCluZS5wdXNoKC4uLlouc2xpY2UoMCxoKSk7ZWxzZSBpZihudWxsPT09TSluZS5wdXNoKC4uLlouc2xpY2Uo''@;'; put 'put ''MCx0aGlzLmNvdW50Um93cygpKSk7ZWxzZXtjb25zdCBjZT10aGlzLmNvdW50Um93cygpLTE7RD09PXYuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh2LmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChjZSwtMSkpJiZjZT5mJiZuZS5wdXNoKC4uLlouc2xpY2UoZisxKSl9cmV0dXJuIFlu''@;'; put 'put ''KG5lLGNlPT57bC5wdXNoKHRoaXMudG9WaXN1YWxSb3coY2UpKX0pLDA9PT1sLmxlbmd0aH19fSh0aGlzKSl9ZnVuY3Rpb24gWGh0KCl7Y29uc3QgYz10aGlzLmdldFNldHRpbmcoInJvd3MiKTtBcnJheS5pc0FycmF5KGMpJiZ0aGlzLmhpZGVSb3dzKGMpfWZ1bmN0aW9uIFI1ZShjLGwpe2lm''@;'; put 'put ''KGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gQ1EoYyxsKXtyZXR1cm4gYy5nZXQoJEYoYyxsKSl9ZnVuY3Rpb24gU1EoYyxsLGEpe3JldHVybiBjLnNl''@;'; put 'put ''dCgkRihjLGwpLGEpLGF9ZnVuY3Rpb24gJEYoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9i''@;'; put 'put ''amVjdCIpfUFvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb2x1bW5GcmVlemUiKSxBby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb2x1bW5GcmVlemUiKSxBby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlQ29sdW1uVW5mcmVlemUiKSxBby5nZXRTaW5n''@;'; put 'put ''bGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJDb2x1bW5VbmZyZWV6ZSIpO2NvbnN0IEw1ZT0ibWFudWFsQ29sdW1uRnJlZXplIjt2YXIgQTk9bmV3IFdlYWtNYXAsTVE9bmV3IFdlYWtTZXQ7Y2xhc3MgcjJ0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0''@;'; put 'put ''aW9uIGUydChjLGwpe1I1ZShjLGwpLGwuYWRkKGMpfSh0aGlzLE1RKSxmdW5jdGlvbiB0MnQoYyxsLGEpe1I1ZShjLGwpLGwuc2V0KGMsYSl9KHRoaXMsQTksITEpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBMNWV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4g''@;'; put 'put ''MTEwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtMNWVdfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixsPT4kRihNUSx0aGlzLGkydCkuY2FsbCh0aGlzLGwpKSx0aGlz''@;'; put 'put ''LmFkZEhvb2soImJlZm9yZUNvbHVtbk1vdmUiLChsLGEpPT4kRihNUSx0aGlzLG8ydCkuY2FsbCh0aGlzLGwsYSkpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7U1EoQTksdGhpcywhMSksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlz''@;'; put 'put ''YWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZnJlZXplQ29sdW1uKGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKSxkPWEuZml4ZWRDb2x1bW5zU3RhcnQ8dGhpcy5ob3QuY291bnRDb2xzKCkmJmw+YS5maXhlZENvbHVtbnNTdGFy''@;'; put 'put ''dC0xO0NRKEE5LHRoaXMpfHxTUShBOSx0aGlzLCEwKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5GcmVlemUiLGwsZCkmJihkJiYodGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIubW92ZUluZGV4ZXMobCxhLmZpeGVkQ29sdW1uc1N0YXJ0KSxhLl9maXhlZENvbHVtbnNT''@;'; put 'put ''dGFydCs9MSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29sdW1uRnJlZXplIixsLGQpKX11bmZyZWV6ZUNvbHVtbihsKXtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKCksZD1hLmZpeGVkQ29sdW1uc1N0YXJ0PjAmJmw8PWEuZml4ZWRDb2x1bW5zU3RhcnQtMTtDUShBOSx0aGlzKXx8''@;'; put 'put ''U1EoQTksdGhpcywhMCksITEhPT10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29sdW1uVW5mcmVlemUiLGwsZCkmJihkJiYoYS5fZml4ZWRDb2x1bW5zU3RhcnQtPTEsdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIubW92ZUluZGV4ZXMobCxhLmZpeGVkQ29sdW1uc1N0YXJ0KSksdGhpcy5o''@;'; put 'put ''b3QucnVuSG9va3MoImFmdGVyQ29sdW1uVW5mcmVlemUiLGwsZCkpfX1mdW5jdGlvbiBpMnQoYyl7Yy5pdGVtcy5wdXNoKHtuYW1lOiItLS0tLS0tLS0ifSxmdW5jdGlvbiBKaHQoYyl7cmV0dXJue2tleToiZnJlZXplX2NvbHVtbiIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQ''@;'; put 'put ''aHJhc2UocUspfSxjYWxsYmFjayhsLGEpe2NvbnN0W3tzdGFydDp7Y29sOmR9fV09YTtjLmZyZWV6ZUNvbHVtbihkKSx0aGlzLnJlbmRlcigpLHRoaXMudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKX0saGlkZGVuKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTtsZXQgYT0hMTty''@;'; put 'put ''ZXR1cm4odm9pZCAwPT09bHx8bC5sZW5ndGg+MXx8bFswXS5mcm9tLmNvbCE9PWxbMF0udG8uY29sfHxsWzBdLmZyb20uY29sPD10aGlzLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQtMSkmJihhPSEwKSxhfX19KHRoaXMpLGZ1bmN0aW9uIFFodChjKXtyZXR1cm57a2V5OiJ1bmZy''@;'; put 'put ''ZWV6ZV9jb2x1bW4iLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKFhLKX0sY2FsbGJhY2sobCxhKXtjb25zdFt7c3RhcnQ6e2NvbDpkfX1dPWE7Yy51bmZyZWV6ZUNvbHVtbihkKSx0aGlzLnJlbmRlcigpLHRoaXMudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKX0saGlk''@;'; put 'put ''ZGVuKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTtsZXQgYT0hMTtyZXR1cm4odm9pZCAwPT09bHx8bC5sZW5ndGg+MXx8bFswXS5mcm9tLmNvbCE9PWxbMF0udG8uY29sfHxsWzBdLmZyb20uY29sPj10aGlzLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQpJiYoYT0h''@;'; put 'put ''MCksYX19fSh0aGlzKSl9ZnVuY3Rpb24gbzJ0KGMsbCl7aWYoQ1EoQTksdGhpcykpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydDtpZihsPGF8fGMuc29tZShkPT5kPGEpKXJldHVybiExfX1mdW5jdGlvbiBLRihjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rp''@;'; put 'put ''b24gYTJ0KGMpe3ZhciBsPWZ1bmN0aW9uIHMydChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJl''@;'; put 'put ''dHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4g''@;'; put 'put ''Yz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3Qgc3c9InB4IixGNWU9Y2xhc3MgbDJ0e2NvbnN0cnVjdG9yKGwpe0tGKHRoaXMsImhvdCIsdm9pZCAwKSxLRih0aGlzLCJf''@;'; put 'put ''ZWxlbWVudCIsbnVsbCksS0YodGhpcywic3RhdGUiLDApLEtGKHRoaXMsImlubGluZVByb3BlcnR5Iix2b2lkIDApLHRoaXMuaG90PWwsdGhpcy5pbmxpbmVQcm9wZXJ0eT1sLmlzUnRsKCk/InJpZ2h0IjoibGVmdCJ9YXBwZW5kVG8obCl7bC5hcHBlbmRDaGlsZCh0aGlzLl9lbGVtZW50KSx0''@;'; put 'put ''aGlzLnN0YXRlPTJ9YnVpbGQoKXswPT09dGhpcy5zdGF0ZSYmKHRoaXMuX2VsZW1lbnQ9dGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuc3RhdGU9MSl9ZGVzdHJveSgpe3RoaXMuaXNBcHBlbmRlZCgpJiZ0aGlzLl9lbGVtZW50LnBhcmVudEVsZW1lbnQu''@;'; put 'put ''cmVtb3ZlQ2hpbGQodGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudD1udWxsLHRoaXMuc3RhdGU9MH1pc0FwcGVuZGVkKCl7cmV0dXJuIDI9PT10aGlzLnN0YXRlfWlzQnVpbHQoKXtyZXR1cm4gdGhpcy5zdGF0ZT49MX1zZXRQb3NpdGlvbihsLGEpe3YxKGwpJiYodGhpcy5fZWxlbWVudC5z''@;'; put 'put ''dHlsZS50b3A9bCtzdyksdjEoYSkmJih0aGlzLl9lbGVtZW50LnN0eWxlW3RoaXMuaW5saW5lUHJvcGVydHldPWErc3cpfWdldFBvc2l0aW9uKCl7Y29uc3QgbD10aGlzLl9lbGVtZW50LnN0eWxlO3JldHVybnt0b3A6bC50b3A/cGFyc2VJbnQobC50b3AsMTApOjAsc3RhcnQ6bFt0aGlzLmlu''@;'; put 'put ''bGluZVByb3BlcnR5XT9wYXJzZUludChsW3RoaXMuaW5saW5lUHJvcGVydHldLDEwKTowfX1zZXRTaXplKGwsYSl7djEobCkmJih0aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoPWwrc3cpLHYxKGEpJiYodGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQ9YStzdyl9Z2V0U2l6ZSgpe3JldHVybnt3''@;'; put 'put ''aWR0aDp0aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoP3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGgsMTApOjAsaGVpZ2h0OnRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0P3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0LDEwKTowfX1zZXRPZmZzZXQobCxhKXt2''@;'; put 'put ''MShsKSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luVG9wPWwrc3cpLHYxKGEpJiYodGhpcy5fZWxlbWVudC5zdHlsZVtgbWFyZ2luJHtnMSh0aGlzLmlubGluZVByb3BlcnR5KX1gXT1hK3N3KX1nZXRPZmZzZXQoKXtjb25zdCBsPXRoaXMuX2VsZW1lbnQuc3R5bGUsYT1gbWFyZ2luJHtn''@;'; put 'put ''MSh0aGlzLmlubGluZVByb3BlcnR5KX1gO3JldHVybnt0b3A6bC5tYXJnaW5Ub3A/cGFyc2VJbnQobC5tYXJnaW5Ub3AsMTApOjAsc3RhcnQ6bFthXT9wYXJzZUludChsW2FdLDEwKTowfX19LGQydD1jbGFzcyB1MnQgZXh0ZW5kcyBGNWV7YnVpbGQoKXtzdXBlci5idWlsZCgpLFRpKHRoaXMu''@;'; put 'put ''X2VsZW1lbnQsImh0X19tYW51YWxDb2x1bW5Nb3ZlLS1iYWNrbGlnaHQiKX19LHAydD1jbGFzcyBmMnQgZXh0ZW5kcyBGNWV7YnVpbGQoKXtzdXBlci5idWlsZCgpLFRpKHRoaXMuX2VsZW1lbnQsImh0X19tYW51YWxDb2x1bW5Nb3ZlLS1ndWlkZWxpbmUiKX19O2Z1bmN0aW9uIHAzKGMsbCxh''@;'; put 'put ''KXtINWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIEg1ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gV2QoYyxsLGEpe3JldHVybiBj''@;'; put 'put ''LnNldCh1NihjLGwpLGEpLGF9ZnVuY3Rpb24gVW8oYyxsKXtyZXR1cm4gYy5nZXQodTYoYyxsKSl9ZnVuY3Rpb24gdTYoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3Io''@;'; put 'put ''IlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfUFvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVDb2x1bW5Nb3ZlIiksQW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoImFmdGVyQ29sdW1uTW92ZSIpO2NvbnN0IEVRPSJtYW51YWxDb2x1bW5N''@;'; put 'put ''b3ZlIixONWU9Imh0X19tYW51YWxDb2x1bW5Nb3ZlIixxRj0ic2hvdy11aSIsVFE9Im9uLW1vdmluZy0tY29sdW1ucyIsQVE9ImFmdGVyLXNlbGVjdGlvbi0tY29sdW1ucyI7dmFyIGVkPW5ldyBXZWFrTWFwLGQ2PW5ldyBXZWFrTWFwLE5nPW5ldyBXZWFrTWFwLFhGPW5ldyBXZWFrTWFwLGg2''@;'; put 'put ''PW5ldyBXZWFrTWFwLHRkPW5ldyBXZWFrTWFwLEpGPW5ldyBXZWFrTWFwLFcyPW5ldyBXZWFrTWFwLGx3PW5ldyBXZWFrTWFwLFFGPW5ldyBXZWFrTWFwLEpUPW5ldyBXZWFrTWFwLGs5PW5ldyBXZWFrU2V0O2NsYXNzIHYydCBleHRlbmRzIEZze2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJn''@;'; put 'put ''dW1lbnRzKSxmdW5jdGlvbiBnMnQoYyxsKXtINWUoYyxsKSxsLmFkZChjKX0odGhpcyxrOSkscDModGhpcyxlZCxuZXcgZDJ0KHRoaXMuaG90KSkscDModGhpcyxkNixuZXcgcDJ0KHRoaXMuaG90KSkscDModGhpcyxOZyxbXSkscDModGhpcyxYRiwwKSxwMyh0aGlzLGg2LCExKSxwMyh0aGlz''@;'; put 'put ''LHRkLHt9KSxwMyh0aGlzLEpGLHZvaWQgMCkscDModGhpcyxXMix2b2lkIDApLHAzKHRoaXMsbHcsdm9pZCAwKSxwMyh0aGlzLFFGLHZvaWQgMCkscDModGhpcyxKVCx2b2lkIDApfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBFUX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgp''@;'; put 'put ''e3JldHVybiAxMjB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0VRXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlzO3RoaXMuZW5hYmxlZHx8KHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VEb3duIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiB1NihrOSxsLGIydCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZU92ZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgs''@;'; put 'put ''ZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIHU2KGs5LGwsXzJ0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyU2Nyb2xsVmVydGljYWxseSIsKCk9PnU2KGs5LHRoaXMsQzJ0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFm''@;'; put 'put ''dGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIHU2KGs5LGwsUzJ0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmJ1aWxkUGx1Z2luVUkoKSx0aGlzLnJlZ2lzdGVy''@;'; put 'put ''RXZlbnRzKCksVGkodGhpcy5ob3Qucm9vdEVsZW1lbnQsTjVlKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCksdGhpcy5lbmFibGVQbHVnaW4oKSx0aGlzLm1vdmVCeVNldHRpbmdzT3JMb2FkKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9''@;'; put 'put ''ZGlzYWJsZVBsdWdpbigpe2NhKHRoaXMuaG90LnJvb3RFbGVtZW50LE41ZSksdGhpcy51bnJlZ2lzdGVyRXZlbnRzKCksVW8oZWQsdGhpcykuZGVzdHJveSgpLFVvKGQ2LHRoaXMpLmRlc3Ryb3koKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9bW92ZUNvbHVtbihsLGEpe3JldHVybiB0aGlzLm1v''@;'; put 'put ''dmVDb2x1bW5zKFtsXSxhKX1tb3ZlQ29sdW1ucyhsLGEpe2NvbnN0IGQ9VW8oSkYsdGhpcyksaD10aGlzLmlzTW92ZVBvc3NpYmxlKGwsYSksZj10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29sdW1uTW92ZSIsbCxhLGQsaCk7aWYoV2QoSkYsdGhpcyx2b2lkIDApLCExPT09ZilyZXR1cm47''@;'; put 'put ''aCYmdGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIubW92ZUluZGV4ZXMobCxhKTtjb25zdCB2PWgmJnRoaXMuaXNDb2x1bW5PcmRlckNoYW5nZWQobCxhKTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ29sdW1uTW92ZSIsbCxhLGQsaCx2KSx2fWRyYWdDb2x1bW4obCxhKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5kcmFnQ29sdW1ucyhbbF0sYSl9ZHJhZ0NvbHVtbnMobCxhKXtjb25zdCBkPXRoaXMuY291bnRGaW5hbEluZGV4KGwsYSk7cmV0dXJuIFdkKEpGLHRoaXMsYSksdGhpcy5tb3ZlQ29sdW1ucyhsLGQpfWlzTW92ZVBvc3NpYmxlKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5jb2x1bW5J''@;'; put 'put ''bmRleE1hcHBlci5nZXROb3RUcmltbWVkSW5kZXhlc0xlbmd0aCgpLGg9bC5sZW5ndGgrYT5kLGY9YTwwLHY9bC5zb21lKEQ9PkQ8MCksTT1sLnNvbWUoRD0+RD49ZCk7cmV0dXJuIShofHxmfHx2fHxNKX1pc0NvbHVtbk9yZGVyQ2hhbmdlZChsLGEpe3JldHVybiBsLnNvbWUoKGQsaCk9PmQt''@;'; put 'put ''aCE9PWEpfWNvdW50RmluYWxJbmRleChsLGEpe2NvbnN0IGQ9cXUobCwoaCxmKT0+KGY8YSYmKGgrPTEpLGgpLDApO3JldHVybiBhLWR9Z2V0Q29sdW1uc1dpZHRoKGwsYSl7Y29uc3QgZD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcjtsZXQgaD0wO2ZvcihsZXQgZj1sO2Y8PWE7Zis9MSl7''@;'; put 'put ''Y29uc3Qgdj1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZik7ZjwwP2grPXRoaXMuaG90LnZpZXcuX3d0Lnd0Vmlld3BvcnQuZ2V0Um93SGVhZGVyV2lkdGgoKXx8MDpudWxsIT09diYmKGgrPXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUuZ2V0Q29sdW1uV2lkdGgodil8fDApfXJl''@;'; put 'put ''dHVybiBofW1vdmVCeVNldHRpbmdzT3JMb2FkKCl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZXR0aW5ncygpW0VRXTtpZihBcnJheS5pc0FycmF5KGwpKXRoaXMubW92ZUNvbHVtbnMobCwwKTtlbHNlIGlmKHZvaWQgMCE9PWwpe2NvbnN0IGE9dGhpcy5wZXJzaXN0ZW50U3RhdGVMb2FkKCk7YS5s''@;'; put 'put ''ZW5ndGgmJnRoaXMubW92ZUNvbHVtbnMoYSwwKX19aXNGaXhlZENvbHVtbnNTdGFydChsKXtyZXR1cm4gbDx0aGlzLmhvdC5nZXRTZXR0aW5ncygpLmZpeGVkQ29sdW1uc1N0YXJ0fXBlcnNpc3RlbnRTdGF0ZVNhdmUoKXt0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlU2F2ZSIs''@;'; put 'put ''Im1hbnVhbENvbHVtbk1vdmUiLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpKX1wZXJzaXN0ZW50U3RhdGVMb2FkKCl7Y29uc3QgbD17fTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZUxvYWQiLCJtYW51YWxDb2x1bW5Nb3Zl''@;'; put 'put ''IixsKSxsLnZhbHVlP2wudmFsdWU6W119cHJlcGFyZUNvbHVtbnNUb01vdmluZyhsLGEpe2NvbnN0IGQ9W107cmV0dXJuICRvKGwsYSxoPT57ZC5wdXNoKGgpfSksZH1yZWZyZXNoUG9zaXRpb25zKCl7Y29uc3QgbD10aGlzLmhvdC52aWV3LmdldEZpcnN0RnVsbHlWaXNpYmxlQ29sdW1uKCk7''@;'; put 'put ''dGhpcy5pc0ZpeGVkQ29sdW1uc1N0YXJ0KFVvKFcyLHRoaXMpKSYmbD4wJiZ0aGlzLmhvdC5zY3JvbGxWaWV3cG9ydFRvKHtjb2w6dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwtMSwtMSl9KTtjb25zdCBhPXRoaXMuaG90LnZpZXcuX3d0Lnd0''@;'; put 'put ''VGFibGUsZD10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLnNjcm9sbGFibGVFbGVtZW50LGg9Im51bWJlciI9PXR5cGVvZiBkLnNjcm9sbFg/ZC5zY3JvbGxYOmQuc2Nyb2xsTGVmdDtsZXQgZj10aGlzLmhvdC52aWV3LlRIRUFELm9mZnNldExlZnQrdGhpcy5nZXRDb2x1bW5zV2lkdGgo''@;'; put 'put ''MCxVbyhXMix0aGlzKS0xKTtjb25zdCB2PWEuaGlkZXIub2Zmc2V0V2lkdGgsTT1hLlRCT0RZLm9mZnNldExlZnQsRD1VbyhlZCx0aGlzKS5nZXRPZmZzZXQoKS5zdGFydCxaPVVvKGVkLHRoaXMpLmdldFNpemUoKS53aWR0aDtsZXQgbmU9MCxjZT0wO2lmKHRoaXMuaG90LmlzUnRsKCkpe2Nv''@;'; put 'put ''bnN0IEJlPXRoaXMuaG90LnJvb3RXaW5kb3cscWU9YXUodGhpcy5ob3Qucm9vdEVsZW1lbnQpLG50PUJlLmlubmVyV2lkdGgtVW8obHcsdGhpcyktcWU7Y2U9QmUuaW5uZXJXaWR0aC1Vbyh0ZCx0aGlzKS5ldmVudFBhZ2VYLW50LSh2b2lkIDA9PT1kLnNjcm9sbFg/aDowKX1lbHNlIGNlPVVv''@;'; put 'put ''KHRkLHRoaXMpLmV2ZW50UGFnZVgtKFVvKGx3LHRoaXMpLSh2b2lkIDA9PT1kLnNjcm9sbFg/aDowKSk7aWYoVW8oUUYsdGhpcykmJihuZT10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5jbG9uZS53dFRhYmxlLmdldENvbHVtbkhlYWRlcigtMSkub2Zm''@;'; put 'put ''c2V0V2lkdGgpLHRoaXMuaXNGaXhlZENvbHVtbnNTdGFydChVbyhXMix0aGlzKSkmJihmKz1oKSxmKz1uZSxVbyhXMix0aGlzKTwwKVVvKEpULHRoaXMpPjA/VW8odGQsdGhpcykuY29sPTA6VW8odGQsdGhpcykuY29sPWw+MD9sLTE6bDtlbHNlIGlmKFVvKHRkLHRoaXMpLlRELm9mZnNldFdp''@;'; put 'put ''ZHRoLzIrZjw9Y2Upe2NvbnN0IEJlPVVvKFcyLHRoaXMpPj1VbyhYRix0aGlzKT9VbyhYRix0aGlzKS0xOlVvKFcyLHRoaXMpO1VvKHRkLHRoaXMpLmNvbD1CZSsxLGYrPVVvKHRkLHRoaXMpLlRELm9mZnNldFdpZHRofWVsc2UgVW8odGQsdGhpcykuY29sPVVvKFcyLHRoaXMpO2xldCBiZT1j''@;'; put 'put ''ZSxFZT1mO2NlK1orRD49dj9iZT12LVotRDpjZStEPE0rbmUmJihiZT1NK25lK01hdGguYWJzKEQpKSxmPj12LTE/RWU9di0xOjA9PT1FZT9FZT0xOnZvaWQgMCE9PWQuc2Nyb2xsWCYmVW8oVzIsdGhpcyk8VW8oSlQsdGhpcykmJihFZS09VW8obHcsdGhpcyk8PWQuc2Nyb2xsWD9Vbyhsdyx0''@;'; put 'put ''aGlzKTowKSxVbyhlZCx0aGlzKS5zZXRQb3NpdGlvbihudWxsLGJlKSxVbyhkNix0aGlzKS5zZXRQb3NpdGlvbihudWxsLEVlKX1yZWdpc3RlckV2ZW50cygpe2NvbnN0e2RvY3VtZW50RWxlbWVudDpsfT10aGlzLmhvdC5yb290RG9jdW1lbnQ7dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRM''@;'; put 'put ''aXN0ZW5lcihsLCJtb3VzZW1vdmUiLGE9PnU2KGs5LHRoaXMseTJ0KS5jYWxsKHRoaXMsYSkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIobCwibW91c2V1cCIsKCk9PnU2KGs5LHRoaXMsdzJ0KS5jYWxsKHRoaXMpKX11bnJlZ2lzdGVyRXZlbnRzKCl7dGhpcy5ldmVudE1h''@;'; put 'put ''bmFnZXIuY2xlYXIoKX1idWlsZFBsdWdpblVJKCl7VW8oZWQsdGhpcykuYnVpbGQoKSxVbyhkNix0aGlzKS5idWlsZCgpfWRlc3Ryb3koKXtVbyhlZCx0aGlzKS5kZXN0cm95KCksVW8oZDYsdGhpcykuZGVzdHJveSgpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gYjJ0KGMsbCxhLGQpe2Nv''@;'; put 'put ''bnN0IGg9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZSxmPXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKSx2PXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksTT1wYShjLnRhcmdldCwic29ydEFjdGlvbiIpO2lmKCF2fHwhZnx8VW8oaDYsdGhpcyl8''@;'; put 'put ''fDAhPT1jLmJ1dHRvbnx8TSlyZXR1cm4gV2QoaDYsdGhpcywhMSksVW8oTmcsdGhpcykubGVuZ3RoPTAsdm9pZCBjYSh0aGlzLmhvdC5yb290RWxlbWVudCxbVFEscUZdKTtjb25zdCBEPVVvKGQ2LHRoaXMpLmlzQnVpbHQoKSYmIVVvKGQ2LHRoaXMpLmlzQXBwZW5kZWQoKSxaPVVvKGVkLHRo''@;'; put 'put ''aXMpLmlzQnVpbHQoKSYmIVVvKGVkLHRoaXMpLmlzQXBwZW5kZWQoKTtEJiZaJiYoVW8oZDYsdGhpcykuYXBwZW5kVG8oaC5oaWRlciksVW8oZWQsdGhpcykuYXBwZW5kVG8oaC5oaWRlcikpO2NvbnN0e2Zyb206bmUsdG86Y2V9PXYsYmU9TWF0aC5taW4obmUuY29sLGNlLmNvbCksRWU9TWF0''@;'; put 'put ''aC5tYXgobmUuY29sLGNlLmNvbCk7aWYobC5yb3c8MCYmbC5jb2w+PWJlJiZsLmNvbDw9RWUpe2QuY29sdW1uPSEwLFdkKGg2LHRoaXMsITApO2NvbnN0IEJlPWEuZmlyc3RDaGlsZD9qMmUoYyxhLmZpcnN0Q2hpbGQpLng6Yy5vZmZzZXRYO1VvKHRkLHRoaXMpLmV2ZW50UGFnZVg9Yy5wYWdl''@;'; put 'put ''WCxXZChXMix0aGlzLGwuY29sKSxVbyh0ZCx0aGlzKS5URD1hLFVvKHRkLHRoaXMpLmNvbD1sLmNvbCxXZChOZyx0aGlzLHRoaXMucHJlcGFyZUNvbHVtbnNUb01vdmluZyhiZSxFZSkpLFdkKFFGLHRoaXMsISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpLnJvd0hlYWRlcnMpLFdkKFhGLHRoaXMs''@;'; put 'put ''dGhpcy5ob3QuY291bnRDb2xzKCkpLFdkKEpULHRoaXMsdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZENvbHVtbnNTdGFydCksV2QobHcsdGhpcyx6MCh0aGlzLmhvdC5yb290RWxlbWVudCkubGVmdCk7Y29uc3QgcWU9VW8oUUYsdGhpcyk/LTE6MCxudD1oLmhvbGRlci5zY3JvbGxUb3Ar''@;'; put 'put ''aC5nZXRDb2x1bW5IZWFkZXJIZWlnaHQoMCkrMSxsdD1sLmNvbDxVbyhKVCx0aGlzKSxtdD10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzLmlubGluZVN0YXJ0T3ZlcmxheS5nZXRPdmVybGF5T2Zmc2V0KCksSnQ9TWF0aC5hYnMoQmUtKHRoaXMuaG90LmlzUnRsKCk/YS5vZmZzZXRXaWR0''@;'; put 'put ''aDowKSkseW49dGhpcy5nZXRDb2x1bW5zV2lkdGgoYmUsbC5jb2wtMSkrSnQsQ249dGhpcy5nZXRDb2x1bW5zV2lkdGgocWUsYmUtMSkrKGx0P210OjApK3luO1VvKGVkLHRoaXMpLnNldFBvc2l0aW9uKG50LENuKSxVbyhlZCx0aGlzKS5zZXRTaXplKHRoaXMuZ2V0Q29sdW1uc1dpZHRoKGJl''@;'; put 'put ''LEVlKSxoLmhpZGVyLm9mZnNldEhlaWdodC1udCksVW8oZWQsdGhpcykuc2V0T2Zmc2V0KG51bGwsLXluKSxUaSh0aGlzLmhvdC5yb290RWxlbWVudCxUUSl9ZWxzZSBjYSh0aGlzLmhvdC5yb290RWxlbWVudCxBUSksV2QoaDYsdGhpcywhMSksVW8oTmcsdGhpcykubGVuZ3RoPTB9ZnVuY3Rp''@;'; put 'put ''b24geTJ0KGMpe1VvKGg2LHRoaXMpJiYoVW8odGQsdGhpcykuZXZlbnRQYWdlWD1jLnBhZ2VYLHRoaXMucmVmcmVzaFBvc2l0aW9ucygpKX1mdW5jdGlvbiBfMnQoYyxsLGEsZCl7IXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCl8fCFVbyhoNix0aGlzKXx8KFVvKE5nLHRoaXMpLmlu''@;'; put 'put ''ZGV4T2YobC5jb2wpPi0xP2NhKHRoaXMuaG90LnJvb3RFbGVtZW50LHFGKTpUaSh0aGlzLmhvdC5yb290RWxlbWVudCxxRiksZC5yb3c9ITAsZC5jb2x1bW49ITAsZC5jZWxsPSEwLFdkKFcyLHRoaXMsbC5jb2wpLFVvKHRkLHRoaXMpLlREPWEpfWZ1bmN0aW9uIHcydCgpe2NvbnN0IGM9VW8o''@;'; put 'put ''dGQsdGhpcykuY29sLGw9VW8oTmcsdGhpcykubGVuZ3RoO2lmKFdkKFcyLHRoaXMsdm9pZCAwKSxXZChoNix0aGlzLCExKSxjYSh0aGlzLmhvdC5yb290RWxlbWVudCxbVFEscUYsQVFdKSx0aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCkmJlRpKHRoaXMuaG90''@;'; put 'put ''LnJvb3RFbGVtZW50LEFRKSxsPDF8fHZvaWQgMD09PWMpcmV0dXJuO2NvbnN0IGE9VW8oTmcsdGhpcylbMF0sZD10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGEpLGg9dGhpcy5kcmFnQ29sdW1ucyhVbyhOZyx0aGlzKSxjKTtpZihVbyhOZyx0aGlzKS5sZW5ndGg9MCwhMD09PWgpe3RoaXMu''@;'; put 'put ''cGVyc2lzdGVudFN0YXRlU2F2ZSgpLHRoaXMuaG90LnJlbmRlcigpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCk7Y29uc3QgZj10aGlzLmhvdC50b1Zpc3VhbENvbHVtbihkKTt0aGlzLmhvdC5zZWxlY3RDb2x1bW5zKGYsZitsLTEpfX1mdW5jdGlvbiBDMnQoKXtjb25zdCBj''@;'; put 'put ''PXRoaXMuaG90LnZpZXcuX3d0Lnd0VGFibGUsZD1jLmdldENvbHVtbkhlYWRlckhlaWdodCgwKSsxK2MuaG9sZGVyLnNjcm9sbFRvcDtVbyhlZCx0aGlzKS5zZXRQb3NpdGlvbihkKSxVbyhlZCx0aGlzKS5zZXRTaXplKG51bGwsYy5oaWRlci5vZmZzZXRIZWlnaHQtZCl9ZnVuY3Rpb24gUzJ0''@;'; put 'put ''KCl7dGhpcy5tb3ZlQnlTZXR0aW5nc09yTG9hZCgpfWZ1bmN0aW9uIFMxKGMsbCxhKXtWNWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIFY1ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMg''@;'; put 'put ''dHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gdXUoYyxsLGEpe3JldHVybiBjLnNldChnMyhjLGwpLGEpLGF9ZnVuY3Rpb24gRW8oYyxsKXtyZXR1cm4gYy5nZXQoZzMoYyxsKSl9ZnVuY3Rpb24gZzMoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJl''@;'; put 'put ''dHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfWNvbnN0IGVIPSJtYW51YWxDb2x1bW5SZXNpemUiLEI1ZT0ibWFudWFsQ29sdW1uV2lkdGhzIjt2YXIgVmc9bmV3IFdl''@;'; put 'put ''YWtNYXAsdEg9bmV3IFdlYWtNYXAsUGg9bmV3IFdlYWtNYXAsbkg9bmV3IFdlYWtNYXAsVXA9bmV3IFdlYWtNYXAsRTJ0PW5ldyBXZWFrTWFwLGN3PW5ldyBXZWFrTWFwLHJIPW5ldyBXZWFrTWFwLFlkPW5ldyBXZWFrTWFwLEJnPW5ldyBXZWFrTWFwLEQ5PW5ldyBXZWFrTWFwLGlIPW5ldyBX''@;'; put 'put ''ZWFrTWFwLFFUPW5ldyBXZWFrTWFwLGVBPW5ldyBXZWFrTWFwLEZoPW5ldyBXZWFrTWFwLHRBPW5ldyBXZWFrTWFwLFpwPW5ldyBXZWFrU2V0O2NsYXNzIFQydCBleHRlbmRzIEZze3N0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBlSH1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgp''@;'; put 'put ''e3JldHVybiAxMzB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksZnVuY3Rpb24gTTJ0KGMsbCl7VjVlKGMsbCksbC5hZGQoYyl9KHRoaXMsWnApLFMxKHRoaXMsVmcsbnVsbCksUzEodGhpcyx0SCxudWxsKSxTMSh0aGlzLFBoLFtdKSxTMSh0aGlzLG5ILG51bGwpLFMxKHRoaXMsVXAsbnVsbCks''@;'; put 'put ''UzEodGhpcyxFMnQsbnVsbCksUzEodGhpcyxjdyxudWxsKSxTMSh0aGlzLHJILG51bGwpLFMxKHRoaXMsWWQsdGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpKSxTMSh0aGlzLEJnLHRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKSksUzEo''@;'; put 'put ''dGhpcyxEOSxudWxsKSxTMSh0aGlzLGlILCExKSxTMSh0aGlzLFFULDApLFMxKHRoaXMsZUEsbnVsbCksUzEodGhpcyxGaCx2b2lkIDApLFMxKHRoaXMsdEEsdm9pZCAwKSxUaShFbyhZZCx0aGlzKSwibWFudWFsQ29sdW1uUmVzaXplciIpLFRpKEVvKEJnLHRoaXMpLCJtYW51YWxDb2x1bW5S''@;'; put 'put ''ZXNpemVyR3VpZGUiKX1nZXQgaW5saW5lRGlyKCl7cmV0dXJuIHRoaXMuaG90LmlzUnRsKCk/InJpZ2h0IjoibGVmdCJ9aXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuaG90LmdldFNldHRpbmdzKClbZUhdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodXUoRmgsdGhp''@;'; put 'put ''cyxuZXcgem0pLEVvKEZoLHRoaXMpLmFkZExvY2FsSG9vaygiaW5pdCIsKCk9PmczKFpwLHRoaXMsQTJ0KS5jYWxsKHRoaXMpKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5yZWdpc3Rlck1hcCh0aGlzLnBsdWdpbk5hbWUsRW8oRmgsdGhpcykpLHRoaXMuYWRkSG9vaygibW9kaWZ5Q29s''@;'; put 'put ''V2lkdGgiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGczKFpwLGwsTzJ0KS5jYWxsKGwsLi4uZCl9LDEpLHRoaXMuYWRkSG9vaygiYmVmb3JlU3RyZXRjaGluZ0NvbHVtbldp''@;'; put 'put ''ZHRoIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBnMyhacCxsLFAydCkuY2FsbChsLC4uLmQpfSwxKSx0aGlzLmFkZEhvb2soImJlZm9yZUNvbHVtblJlc2l6ZSIsZnVuY3Rp''@;'; put 'put ''b24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gZzMoWnAsbCxGMnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYmluZEV2ZW50cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4o''@;'; put 'put ''KXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXt1dSh0QSx0aGlzLEVvKEZoLHRoaXMpLmdldFZhbHVlcygpKSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci51bnJlZ2lzdGVyTWFwKHRoaXMucGx1''@;'; put 'put ''Z2luTmFtZSksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXNhdmVNYW51YWxDb2x1bW5XaWR0aHMoKXt0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlU2F2ZSIsQjVlLEVvKEZoLHRoaXMpLmdldFZhbHVlcygpKX1sb2FkTWFudWFsQ29sdW1uV2lkdGhzKCl7Y29uc3QgbD17fTtyZXR1''@;'; put 'put ''cm4gdGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZUxvYWQiLEI1ZSxsKSxsLnZhbHVlfXNldE1hbnVhbFNpemUobCxhKXtjb25zdCBkPU1hdGgubWF4KGEsMjApLGg9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKTtyZXR1cm4gRW8oRmgsdGhpcykuc2V0VmFsdWVBdEluZGV4''@;'; put 'put ''KGgsZCksZH1jbGVhck1hbnVhbFNpemUobCl7Y29uc3QgYT10aGlzLmhvdC50b1BoeXNpY2FsQ29sdW1uKGwpO0VvKEZoLHRoaXMpLnNldFZhbHVlQXRJbmRleChhLG51bGwpfXNldHVwSGFuZGxlUG9zaXRpb24obCl7aWYoIWwucGFyZW50Tm9kZSlyZXR1cm47dXUoVmcsdGhpcyxsKTtjb25z''@;'; put 'put ''dHtfd3Q6YX09dGhpcy5ob3QudmlldyxkPWEud3RUYWJsZS5nZXRDb29yZHMoRW8oVmcsdGhpcykpLGg9ZC5jb2w7aWYoaDwwKXJldHVybjtjb25zdCBmPU11KEVvKFZnLHRoaXMpKSx2PUVvKFZnLHRoaXMpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2xldCBEO2g8YS5nZXRTZXR0aW5nKCJm''@;'; put 'put ''aXhlZENvbHVtbnNTdGFydCIpJiYoRD1hLnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmdldFJlbGF0aXZlQ2VsbFBvc2l0aW9uKEVvKFZnLHRoaXMpLGQucm93LGQuY29sKSksRHx8KEQ9YS53dE92ZXJsYXlzLnRvcE92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRp''@;'; put 'put ''b24oRW8oVmcsdGhpcyksZC5yb3csZC5jb2wpKSx1dSh0SCx0aGlzLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoaCkpLHV1KFBoLHRoaXMsW10pO2NvbnN0IFo9dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvcm5lcigpfHx0''@;'; put 'put ''aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Q29sdW1uSGVhZGVyKCk7dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWQoKSYmWiYmWW4odGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZSgpLGNlPT57JG8oY2UuZ2V0VG9wU3RhcnRDb3JuZXIoKS5jb2wsY2UuZ2V0Qm90dG9tRW5kQ29y''@;'; put 'put ''bmVyKCkuY29sLEJlPT57RW8oUGgsdGhpcykuaW5jbHVkZXMoQmUpfHxFbyhQaCx0aGlzKS5wdXNoKEJlKX0pfSksRW8oUGgsdGhpcykuaW5jbHVkZXMoRW8odEgsdGhpcykpfHx1dShQaCx0aGlzLFtFbyh0SCx0aGlzKV0pLHV1KHJILHRoaXMsRC5zdGFydC02KSx1dShjdyx0aGlzLHBhcnNl''@;'; put 'put ''SW50KHYud2lkdGgsMTApKSxFbyhZZCx0aGlzKS5zdHlsZS50b3A9YCR7RC50b3B9cHhgLEVvKFlkLHRoaXMpLnN0eWxlW3RoaXMuaW5saW5lRGlyXT1gJHtFbyhySCx0aGlzKStFbyhjdyx0aGlzKX1weGAsRW8oWWQsdGhpcykuc3R5bGUuaGVpZ2h0PWAke2Z9cHhgLHRoaXMuaG90LnJvb3RF''@;'; put 'put ''bGVtZW50LmFwcGVuZENoaWxkKEVvKFlkLHRoaXMpKX1yZWZyZXNoSGFuZGxlUG9zaXRpb24oKXtFbyhZZCx0aGlzKS5zdHlsZVt0aGlzLmlubGluZURpcl09YCR7RW8ockgsdGhpcykrRW8obkgsdGhpcyl9cHhgfXNldHVwR3VpZGVQb3NpdGlvbigpe2NvbnN0IGw9cGFyc2VJbnQoTXUoRW8o''@;'; put 'put ''WWQsdGhpcykpLDEwKSxhPXBhcnNlSW50KEVvKFlkLHRoaXMpLnN0eWxlLnRvcCwxMCkrbCxkPXBhcnNlSW50KHRoaXMuaG90LnZpZXcubWF4aW11bVZpc2libGVFbGVtZW50SGVpZ2h0KDApLDEwKTtUaShFbyhZZCx0aGlzKSwiYWN0aXZlIiksVGkoRW8oQmcsdGhpcyksImFjdGl2ZSIpLEVv''@;'; put 'put ''KEJnLHRoaXMpLnN0eWxlLnRvcD1gJHthfXB4YCx0aGlzLnJlZnJlc2hHdWlkZVBvc2l0aW9uKCksRW8oQmcsdGhpcykuc3R5bGUuaGVpZ2h0PWQtbCsicHgiLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKEVvKEJnLHRoaXMpKX1yZWZyZXNoR3VpZGVQb3NpdGlvbigpe0VvKEJn''@;'; put 'put ''LHRoaXMpLnN0eWxlW3RoaXMuaW5saW5lRGlyXT1FbyhZZCx0aGlzKS5zdHlsZVt0aGlzLmlubGluZURpcl19aGlkZUhhbmRsZUFuZEd1aWRlKCl7Y2EoRW8oWWQsdGhpcyksImFjdGl2ZSIpLGNhKEVvKEJnLHRoaXMpLCJhY3RpdmUiKX1jaGVja0lmQ29sdW1uSGVhZGVyKGwpe2NvbnN0IGE9''@;'; put 'put ''RG0obCxbIlRIRUFEIl0sdGhpcy5ob3Qucm9vdEVsZW1lbnQpLHt0b3BPdmVybGF5OmQsdG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5Omh9PXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXM7cmV0dXJuW2QuY2xvbmUud3RUYWJsZS5USEVBRCxoLmNsb25lLnd0VGFibGUuVEhFQURdLmlu''@;'; put 'put ''Y2x1ZGVzKGEpfWdldENsb3Nlc3RUSFBhcmVudChsKXtyZXR1cm4iVEFCTEUiIT09bC50YWdOYW1lPyJUSCI9PT1sLnRhZ05hbWU/bDp0aGlzLmdldENsb3Nlc3RUSFBhcmVudChsLnBhcmVudE5vZGUpOm51bGx9YWZ0ZXJNb3VzZURvd25UaW1lb3V0KCl7Y29uc3QgbD0oKT0+e3RoaXMuaG90''@;'; put 'put ''LmZvcmNlRnVsbFJlbmRlcj0hMCx0aGlzLmhvdC52aWV3LnJlbmRlcigpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9LGE9KGQsaCk9Pntjb25zdCBmPXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDb2x1bW5SZXNpemUiLEVvKFVwLHRoaXMpLGQsITApO3ZvaWQgMCE9PWYm''@;'; put 'put ''JnV1KFVwLHRoaXMsZiksdGhpcy5zZXRNYW51YWxTaXplKGQsRW8oVXAsdGhpcykpLHRoaXMuc2F2ZU1hbnVhbENvbHVtbldpZHRocygpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlckNvbHVtblJlc2l6ZSIsRW8oVXAsdGhpcyksZCwhMCksaCYmbCgpfTtFbyhRVCx0aGlzKT49MiYmKEVvKFBo''@;'; put 'put ''LHRoaXMpLmxlbmd0aD4xPyhZbihFbyhQaCx0aGlzKSxoPT57YShoKX0pLGwoKSk6WW4oRW8oUGgsdGhpcyksaD0+e2EoaCwhMCl9KSksdXUoUVQsdGhpcywwKSx1dShlQSx0aGlzLG51bGwpfWJpbmRFdmVudHMoKXtjb25zdHtyb290V2luZG93Omwscm9vdEVsZW1lbnQ6YX09dGhpcy5ob3Q7''@;'; put 'put ''dGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihhLCJtb3VzZW92ZXIiLGQ9PmczKFpwLHRoaXMsazJ0KS5jYWxsKHRoaXMsZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwibW91c2Vkb3duIixkPT5nMyhacCx0aGlzLEQydCkuY2FsbCh0aGlzLGQpKSx0''@;'; put 'put ''aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlbW92ZSIsZD0+ZzMoWnAsdGhpcyxJMnQpLmNhbGwodGhpcyxkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZXVwIiwoKT0+ZzMoWnAsdGhpcyxSMnQpLmNhbGwodGhpcykpLHRoaXMu''@;'; put 'put ''ZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoRW8oWWQsdGhpcyksImNvbnRleHRtZW51IiwoKT0+ZzMoWnAsdGhpcyxMMnQpLmNhbGwodGhpcykpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIEEydCgpe2NvbnN0IGM9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtlSF0s''@;'; put 'put ''bD10aGlzLmxvYWRNYW51YWxDb2x1bW5XaWR0aHMoKTt0eXBlb2YgbDwidSI/dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntsLmZvckVhY2goKGEsZCk9PntFbyhGaCx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgoZCxhKX0pfSwhMCk6QXJyYXkuaXNBcnJheShjKT8odGhpcy5ob3QuYmF0Y2hF''@;'; put 'put ''eGVjdXRpb24oKCk9PntjLmZvckVhY2goKGEsZCk9PntFbyhGaCx0aGlzKS5zZXRWYWx1ZUF0SW5kZXgoZCxhKX0pfSwhMCksdXUodEEsdGhpcyxjKSk6ITA9PT1jJiZBcnJheS5pc0FycmF5KEVvKHRBLHRoaXMpKSYmdGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntFbyh0QSx0aGlzKS5m''@;'; put 'put ''b3JFYWNoKChhLGQpPT57RW8oRmgsdGhpcykuc2V0VmFsdWVBdEluZGV4KGQsYSl9KX0sITApfWZ1bmN0aW9uIGsydChjKXtpZighZyQoYy50YXJnZXQpJiYhMCE9PUVvKGlILHRoaXMpJiZ0aGlzLmNoZWNrSWZDb2x1bW5IZWFkZXIoYy50YXJnZXQpKXtjb25zdCBsPXRoaXMuZ2V0Q2xvc2Vz''@;'; put 'put ''dFRIUGFyZW50KGMudGFyZ2V0KTtpZighbClyZXR1cm47Y29uc3QgYT1sLmdldEF0dHJpYnV0ZSgiY29sc3BhbiIpO2wmJihudWxsPT09YXx8IjEiPT09YSkmJihFbyhEOSx0aGlzKXx8dGhpcy5zZXR1cEhhbmRsZVBvc2l0aW9uKGwpKX19ZnVuY3Rpb24gRDJ0KGMpe2MudGFyZ2V0LnBhcmVu''@;'; put 'put ''dE5vZGU9PT10aGlzLmhvdC5yb290RWxlbWVudCYmcGEoYy50YXJnZXQsIm1hbnVhbENvbHVtblJlc2l6ZXIiKSYmKHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbihFbyhWZyx0aGlzKSksdGhpcy5zZXR1cEd1aWRlUG9zaXRpb24oKSx1dShEOSx0aGlzLCEwKSxudWxsPT09RW8oZUEsdGhpcykm''@;'; put 'put ''Jih1dShlQSx0aGlzLHNldFRpbWVvdXQoKCk9PnRoaXMuYWZ0ZXJNb3VzZURvd25UaW1lb3V0KCksNTAwKSksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dChFbyhlQSx0aGlzKSkpLHV1KFFULHRoaXMsRW8oUVQsdGhpcykrMSksdGhpcy5zdGFydFg9Yy5wYWdlWCx1dShVcCx0aGlzLEVvKGN3''@;'; put 'put ''LHRoaXMpKSl9ZnVuY3Rpb24gSTJ0KGMpe2lmKEVvKEQ5LHRoaXMpKXtjb25zdCBsPShjLnBhZ2VYLXRoaXMuc3RhcnRYKSp0aGlzLmhvdC5nZXREaXJlY3Rpb25GYWN0b3IoKTt1dShuSCx0aGlzLEVvKGN3LHRoaXMpK2wpLFluKEVvKFBoLHRoaXMpLGE9Pnt1dShVcCx0aGlzLHRoaXMuc2V0''@;'; put 'put ''TWFudWFsU2l6ZShhLEVvKG5ILHRoaXMpKSl9KSx0aGlzLnJlZnJlc2hIYW5kbGVQb3NpdGlvbigpLHRoaXMucmVmcmVzaEd1aWRlUG9zaXRpb24oKX19ZnVuY3Rpb24gUjJ0KCl7Y29uc3QgYz0oKT0+e3RoaXMuaG90LmZvcmNlRnVsbFJlbmRlcj0hMCx0aGlzLmhvdC52aWV3LnJlbmRlcigp''@;'; put 'put ''LHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9LGw9KGEsZCk9Pnt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlQ29sdW1uUmVzaXplIixFbyhVcCx0aGlzKSxhLCExKSxkJiZjKCksdGhpcy5zYXZlTWFudWFsQ29sdW1uV2lkdGhzKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVy''@;'; put 'put ''Q29sdW1uUmVzaXplIixFbyhVcCx0aGlzKSxhLCExKX07RW8oRDksdGhpcykmJih0aGlzLmhpZGVIYW5kbGVBbmRHdWlkZSgpLHV1KEQ5LHRoaXMsITEpLEVvKFVwLHRoaXMpIT09RW8oY3csdGhpcykmJihFbyhQaCx0aGlzKS5sZW5ndGg+MT8oWW4oRW8oUGgsdGhpcyksZD0+e2woZCl9KSxj''@;'; put 'put ''KCkpOlluKEVvKFBoLHRoaXMpLGQ9PntsKGQsITApfSkpLHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbihFbyhWZyx0aGlzKSkpfWZ1bmN0aW9uIEwydCgpe3RoaXMuaGlkZUhhbmRsZUFuZEd1aWRlKCksdGhpcy5ob3Qucm9vdEVsZW1lbnQucmVtb3ZlQ2hpbGQoRW8oWWQsdGhpcykpLHRoaXMu''@;'; put 'put ''aG90LnJvb3RFbGVtZW50LnJlbW92ZUNoaWxkKEVvKEJnLHRoaXMpKSx1dShEOSx0aGlzLCExKSx1dShpSCx0aGlzLCEwKSx0aGlzLmhvdC5fcmVnaXN0ZXJJbW1lZGlhdGUoKCk9Pnt1dShpSCx0aGlzLCExKX0pfWZ1bmN0aW9uIE8ydChjLGwpe2xldCBhPWM7aWYodGhpcy5lbmFibGVkKXtj''@;'; put 'put ''b25zdCBkPXRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCksaD1FbyhGaCx0aGlzKS5nZXRWYWx1ZUF0SW5kZXgoZCk7dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtlSF0mJmgmJihhPWgpfXJldHVybiBhfWZ1bmN0aW9uIFAydChjLGwpe2NvbnN0IGE9RW8oRmgsdGhpcykuZ2V0VmFsdWVBdElu''@;'; put 'put ''ZGV4KHRoaXMuaG90LnRvUGh5c2ljYWxDb2x1bW4obCkpO3JldHVybiJudW1iZXIiPT10eXBlb2YgYT9hOmN9ZnVuY3Rpb24gRjJ0KCl7dGhpcy5ob3Qudmlldy5fd3Qud3RWaWV3cG9ydC5yZXNldEhhc092ZXJzaXplZENvbHVtbkhlYWRlcnNNYXJrZWQoKX1mdW5jdGlvbiBrUShjLGwsYSl7''@;'; put 'put ''cmV0dXJuKGw9ZnVuY3Rpb24gSDJ0KGMpe3ZhciBsPWZ1bmN0aW9uIE4ydChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVj''@;'; put 'put ''dCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBs''@;'; put 'put ''P2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgdXc9InB4IixVNWU9Y2xhc3MgVjJ0e2NvbnN0cnVjdG9yKGwpe2tRKHRoaXMsImhvdCIsdm9p''@;'; put 'put ''ZCAwKSxrUSh0aGlzLCJfZWxlbWVudCIsbnVsbCksa1EodGhpcywic3RhdGUiLDApLHRoaXMuaG90PWx9YXBwZW5kVG8obCl7bC5hcHBlbmRDaGlsZCh0aGlzLl9lbGVtZW50KSx0aGlzLnN0YXRlPTJ9YnVpbGQoKXswPT09dGhpcy5zdGF0ZSYmKHRoaXMuX2VsZW1lbnQ9dGhpcy5ob3Qucm9v''@;'; put 'put ''dERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHRoaXMuc3RhdGU9MSl9ZGVzdHJveSgpe3RoaXMuaXNBcHBlbmRlZCgpJiZ0aGlzLl9lbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5fZWxlbWVudCksdGhpcy5fZWxlbWVudD1udWxsLHRoaXMuc3RhdGU9MH1pc0Fw''@;'; put 'put ''cGVuZGVkKCl7cmV0dXJuIDI9PT10aGlzLnN0YXRlfWlzQnVpbHQoKXtyZXR1cm4gdGhpcy5zdGF0ZT49MX1zZXRQb3NpdGlvbihsLGEpe3ZvaWQgMCE9PWwmJih0aGlzLl9lbGVtZW50LnN0eWxlLnRvcD1sK3V3KSx2b2lkIDAhPT1hJiYodGhpcy5fZWxlbWVudC5zdHlsZS5sZWZ0PWErdXcp''@;'; put 'put ''fWdldFBvc2l0aW9uKCl7cmV0dXJue3RvcDp0aGlzLl9lbGVtZW50LnN0eWxlLnRvcD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLnRvcCwxMCk6MCxsZWZ0OnRoaXMuX2VsZW1lbnQuc3R5bGUubGVmdD9wYXJzZUludCh0aGlzLl9lbGVtZW50LnN0eWxlLmxlZnQsMTApOjB9fXNldFNp''@;'; put 'put ''emUobCxhKXtsJiYodGhpcy5fZWxlbWVudC5zdHlsZS53aWR0aD1sK3V3KSxhJiYodGhpcy5fZWxlbWVudC5zdHlsZS5oZWlnaHQ9YSt1dyl9Z2V0U2l6ZSgpe3JldHVybnt3aWR0aDp0aGlzLl9lbGVtZW50LnN0eWxlLndpZHRoP3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUud2lkdGgs''@;'; put 'put ''MTApOjAsaGVpZ2h0OnRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0P3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUuaGVpZ2h0LDEwKTowfX1zZXRPZmZzZXQobCxhKXtsJiYodGhpcy5fZWxlbWVudC5zdHlsZS5tYXJnaW5Ub3A9bCt1dyksYSYmKHRoaXMuX2VsZW1lbnQuc3R5bGUubWFy''@;'; put 'put ''Z2luTGVmdD1hK3V3KX1nZXRPZmZzZXQoKXtyZXR1cm57dG9wOnRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luVG9wP3BhcnNlSW50KHRoaXMuX2VsZW1lbnQuc3R5bGUubWFyZ2luVG9wLDEwKTowLGxlZnQ6dGhpcy5fZWxlbWVudC5zdHlsZS5tYXJnaW5MZWZ0P3BhcnNlSW50KHRoaXMuX2Vs''@;'; put 'put ''ZW1lbnQuc3R5bGUubWFyZ2luTGVmdCwxMCk6MH19fSx6MnQ9Y2xhc3MgajJ0IGV4dGVuZHMgVTVle2J1aWxkKCl7c3VwZXIuYnVpbGQoKSxUaSh0aGlzLl9lbGVtZW50LCJodF9fbWFudWFsUm93TW92ZS0tYmFja2xpZ2h0Iil9fSxXMnQ9Y2xhc3MgWjJ0IGV4dGVuZHMgVTVle2J1aWxkKCl7''@;'; put 'put ''c3VwZXIuYnVpbGQoKSxUaSh0aGlzLl9lbGVtZW50LCJodF9fbWFudWFsUm93TW92ZS0tZ3VpZGVsaW5lIil9fTtmdW5jdGlvbiBkdyhjLGwsYSl7WjVlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBaNWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5p''@;'; put 'put ''dGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIEk5KGMsbCxhKXtyZXR1cm4gYy5zZXQoZjYoYyxsKSxhKSxhfWZ1bmN0aW9uIFBhKGMsbCl7cmV0dXJuIGMuZ2V0KGY2KGMsbCkpfWZ1bmN0aW9uIGY2KGMsbCxhKXtpZigiZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1Bby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3Jl''@;'; put 'put ''Um93TW92ZSIpLEFvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclJvd01vdmUiKTtjb25zdCBJUT0ibWFudWFsUm93TW92ZSIsVzVlPSJodF9fbWFudWFsUm93TW92ZSIsb0g9InNob3ctdWkiLFJRPSJvbi1tb3ZpbmctLXJvd3MiLExRPSJhZnRlci1zZWxlY3Rpb24tLXJvd3MiO3Zh''@;'; put 'put ''ciBuZD1uZXcgV2Vha01hcCxwNj1uZXcgV2Vha01hcCxqZz1uZXcgV2Vha01hcCxnNj1uZXcgV2Vha01hcCxHZD1uZXcgV2Vha01hcCxhSD1uZXcgV2Vha01hcCxSOT1uZXcgV2Vha1NldDtjbGFzcyAkMnQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVu''@;'; put 'put ''Y3Rpb24gWTJ0KGMsbCl7WjVlKGMsbCksbC5hZGQoYyl9KHRoaXMsUjkpLGR3KHRoaXMsbmQsbmV3IHoydCh0aGlzLmhvdCkpLGR3KHRoaXMscDYsbmV3IFcydCh0aGlzLmhvdCkpLGR3KHRoaXMsamcsW10pLGR3KHRoaXMsZzYsdm9pZCAwKSxkdyh0aGlzLEdkLHt9KSxkdyh0aGlzLGFILHZv''@;'; put 'put ''aWQgMCl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIElRfXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7cmV0dXJuIDE0MH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbSVFdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVk''@;'; put 'put ''fHwodGhpcy5hZGRIb29rKCJiZWZvcmVPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGY2KFI5LGwsSzJ0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFk''@;'; put 'put ''ZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlT3ZlciIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gZjYoUjksbCxYMnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0''@;'; put 'put ''ZXJTY3JvbGxIb3Jpem9udGFsbHkiLCgpPT5mNihSOSx0aGlzLFEydCkuY2FsbCh0aGlzKSksdGhpcy5hZGRIb29rKCJhZnRlckxvYWREYXRhIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hd''@;'; put 'put ''O3JldHVybiBmNihSOSxsLGVmdCkuY2FsbChsLC4uLmQpfSksdGhpcy5idWlsZFBsdWdpblVJKCksdGhpcy5yZWdpc3RlckV2ZW50cygpLFRpKHRoaXMuaG90LnJvb3RFbGVtZW50LFc1ZSksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigp''@;'; put 'put ''LHRoaXMuZW5hYmxlUGx1Z2luKCksdGhpcy5tb3ZlQnlTZXR0aW5nc09yTG9hZCgpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtjYSh0aGlzLmhvdC5yb290RWxlbWVudCxXNWUpLHRoaXMudW5yZWdpc3RlckV2ZW50cygpLFBhKG5kLHRoaXMpLmRlc3Ryb3koKSxQYShw''@;'; put 'put ''Nix0aGlzKS5kZXN0cm95KCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfW1vdmVSb3cobCxhKXtyZXR1cm4gdGhpcy5tb3ZlUm93cyhbbF0sYSl9bW92ZVJvd3MobCxhKXtjb25zdCBkPVBhKGFILHRoaXMpLGg9dGhpcy5pc01vdmVQb3NzaWJsZShsLGEpLGY9dGhpcy5ob3QucnVuSG9va3MoImJl''@;'; put 'put ''Zm9yZVJvd01vdmUiLGwsYSxkLGgpO2lmKEk5KGFILHRoaXMsdm9pZCAwKSwhMT09PWYpcmV0dXJuO2gmJnRoaXMuaG90LnJvd0luZGV4TWFwcGVyLm1vdmVJbmRleGVzKGwsYSk7Y29uc3Qgdj1oJiZ0aGlzLmlzUm93T3JkZXJDaGFuZ2VkKGwsYSk7cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tz''@;'; put 'put ''KCJhZnRlclJvd01vdmUiLGwsYSxkLGgsdiksdn1kcmFnUm93KGwsYSl7cmV0dXJuIHRoaXMuZHJhZ1Jvd3MoW2xdLGEpfWRyYWdSb3dzKGwsYSl7Y29uc3QgZD10aGlzLmNvdW50RmluYWxJbmRleChsLGEpO3JldHVybiBJOShhSCx0aGlzLGEpLHRoaXMubW92ZVJvd3MobCxkKX1pc01vdmVQ''@;'; put 'put ''b3NzaWJsZShsLGEpe2NvbnN0IGQ9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0Tm90VHJpbW1lZEluZGV4ZXNMZW5ndGgoKSxoPWwubGVuZ3RoK2E+ZCxmPWE8MCx2PWwuc29tZShEPT5EPDApLE09bC5zb21lKEQ9PkQ+PWQpO3JldHVybiEoaHx8Znx8dnx8TSl9aXNSb3dPcmRlckNoYW5n''@;'; put 'put ''ZWQobCxhKXtyZXR1cm4gbC5zb21lKChkLGgpPT5kLWghPT1hKX1jb3VudEZpbmFsSW5kZXgobCxhKXtjb25zdCBkPXF1KGwsKGgsZik9PihmPGEmJihoKz0xKSxoKSwwKTtyZXR1cm4gYS1kfWdldFJvd3NIZWlnaHQobCxhKXtjb25zdCBkPXRoaXMuaG90LnJvd0luZGV4TWFwcGVyO2xldCBo''@;'; put 'put ''PTA7Zm9yKGxldCBmPWw7Zjw9YTtmKyspe2NvbnN0IHY9ZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGYpO251bGwhPT12JiYoaCs9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZS5nZXRSb3dIZWlnaHQodil8fHRoaXMuaG90LnZpZXcuZ2V0RGVmYXVsdFJvd0hlaWdodCgpKX1yZXR1''@;'; put 'put ''cm4gaH1tb3ZlQnlTZXR0aW5nc09yTG9hZCgpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVtJUV07aWYoQXJyYXkuaXNBcnJheShsKSl0aGlzLm1vdmVSb3dzKGwsMCk7ZWxzZSBpZih2b2lkIDAhPT1sKXtjb25zdCBhPXRoaXMucGVyc2lzdGVudFN0YXRlTG9hZCgpO2EubGVuZ3Ro''@;'; put 'put ''JiZ0aGlzLm1vdmVSb3dzKGEsMCl9fWlzRml4ZWRSb3dUb3AobCl7cmV0dXJuIGw8dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NUb3B9aXNGaXhlZFJvd0JvdHRvbShsKXtyZXR1cm4gbD50aGlzLmhvdC5jb3VudFJvd3MoKS0xLXRoaXMuaG90LmdldFNldHRpbmdzKCkuZml4ZWRS''@;'; put 'put ''b3dzQm90dG9tfXBlcnNpc3RlbnRTdGF0ZVNhdmUoKXt0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlU2F2ZSIsIm1hbnVhbFJvd01vdmUiLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpKX1wZXJzaXN0ZW50U3RhdGVMb2FkKCl7Y29uc3QgbD17''@;'; put 'put ''fTtyZXR1cm4gdGhpcy5ob3QucnVuSG9va3MoInBlcnNpc3RlbnRTdGF0ZUxvYWQiLCJtYW51YWxSb3dNb3ZlIixsKSxsLnZhbHVlP2wudmFsdWU6W119cHJlcGFyZVJvd3NUb01vdmluZygpe2NvbnN0IGw9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPVtdO2lmKCFsKXJldHVy''@;'; put 'put ''biBhO2NvbnN0e2Zyb206ZCx0bzpofT1sO3JldHVybiAkbyhNYXRoLm1pbihkLnJvdyxoLnJvdyksTWF0aC5tYXgoZC5yb3csaC5yb3cpLE09PnthLnB1c2goTSl9KSxhfXJlZnJlc2hQb3NpdGlvbnMoKXtjb25zdCBsPVBhKEdkLHRoaXMpLmNvb3JkcyxhPXRoaXMuaG90LmdldEZpcnN0RnVs''@;'; put 'put ''bHlWaXNpYmxlUm93KCksZD10aGlzLmhvdC5nZXRMYXN0RnVsbHlWaXNpYmxlUm93KCksaD10aGlzLmhvdC5jb3VudFJvd3MoKTt0aGlzLmlzRml4ZWRSb3dUb3AobC5yb3cpJiZhPjAmJnRoaXMuaG90LnNjcm9sbFZpZXdwb3J0VG8odGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVz''@;'; put 'put ''dE5vdEhpZGRlbkluZGV4KGEtMSwtMSkpLHRoaXMuaXNGaXhlZFJvd0JvdHRvbShsLnJvdykmJmQ8aCYmdGhpcy5ob3Quc2Nyb2xsVmlld3BvcnRUbyh0aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZCsxLDEpLHZvaWQgMCwhMCk7Y29uc3QgZj10aGlz''@;'; put 'put ''LmhvdC52aWV3Ll93dC53dFRhYmxlLHY9UGEoR2QsdGhpcykuVEQsTT10aGlzLmhvdC5yb290RWxlbWVudCxEPXowKE0pLFo9dF8oTSksbmU9Zi5ob2xkZXIuc2Nyb2xsVG9wLGJlPUQudG9wLSh0aGlzLmhvdC5yb290V2luZG93IT09Wj9aLnNjcm9sbFRvcDowKSxFZT1QYShHZCx0aGlzKS5l''@;'; put 'put ''dmVudFBhZ2VZLWJlK25lLEJlPWYuaGlkZXIub2Zmc2V0SGVpZ2h0LHFlPWYuVEJPRFkub2Zmc2V0VG9wLG50PVBhKG5kLHRoaXMpLmdldE9mZnNldCgpLnRvcCxsdD1QYShuZCx0aGlzKS5nZXRTaXplKCkuaGVpZ2h0LG10PXYub2Zmc2V0SGVpZ2h0LzIsSnQ9di5vZmZzZXRIZWlnaHQ7bGV0''@;'; put 'put ''IHluPXRoaXMuaG90LnZpZXcuVEhFQUQub2Zmc2V0SGVpZ2h0K3RoaXMuZ2V0Um93c0hlaWdodCgwLGwucm93LTEpO2NvbnN0IENuPUVlPj15bittdDt0aGlzLmlzRml4ZWRSb3dUb3AobC5yb3cpJiYoeW4rPXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMudG9wT3ZlcmxheS5nZXRPdmVy''@;'; put 'put ''bGF5T2Zmc2V0KCkpLGwucm93PDA/UGEoR2QsdGhpcykucm93PWE+MD9hLTE6YTpDbj8oUGEoR2QsdGhpcykucm93PWwucm93KzEseW4rPTA9PT1sLnJvdz9KdC0xOkp0KTpQYShHZCx0aGlzKS5yb3c9bC5yb3c7bGV0IHRuPUVlLHhuPXluO0VlK2x0K250Pj1CZT90bj1CZS1sdC1udDpFZStu''@;'; put 'put ''dDxxZSYmKHRuPXFlK01hdGguYWJzKG50KSkseW4+PUJlLTEmJih4bj1CZS0xKSxQYShuZCx0aGlzKS5zZXRQb3NpdGlvbih0biksUGEocDYsdGhpcykuc2V0UG9zaXRpb24oeG4pfXJlZ2lzdGVyRXZlbnRzKCl7Y29uc3R7ZG9jdW1lbnRFbGVtZW50Omx9PXRoaXMuaG90LnJvb3REb2N1bWVu''@;'; put 'put ''dDt0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlbW92ZSIsYT0+ZjYoUjksdGhpcyxxMnQpLmNhbGwodGhpcyxhKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihsLCJtb3VzZXVwIiwoKT0+ZjYoUjksdGhpcyxKMnQpLmNhbGwodGhpcykpfXVu''@;'; put 'put ''cmVnaXN0ZXJFdmVudHMoKXt0aGlzLmV2ZW50TWFuYWdlci5jbGVhcigpfWJ1aWxkUGx1Z2luVUkoKXtQYShuZCx0aGlzKS5idWlsZCgpLFBhKHA2LHRoaXMpLmJ1aWxkKCl9ZGVzdHJveSgpe1BhKG5kLHRoaXMpLmRlc3Ryb3koKSxQYShwNix0aGlzKS5kZXN0cm95KCksc3VwZXIuZGVzdHJv''@;'; put 'put ''eSgpfX1mdW5jdGlvbiBLMnQoYyxsLGEsZCl7Y29uc3R7d3RUYWJsZTpoLHd0Vmlld3BvcnQ6Zn09dGhpcy5ob3Qudmlldy5fd3Qsdj10aGlzLmhvdC5zZWxlY3Rpb24uaXNTZWxlY3RlZEJ5Um93SGVhZGVyKCksTT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFNfHwhdnx8''@;'; put 'put ''UGEoZzYsdGhpcyl8fDAhPT1jLmJ1dHRvbilyZXR1cm4gSTkoZzYsdGhpcywhMSksUGEoamcsdGhpcykubGVuZ3RoPTAsdm9pZCBjYSh0aGlzLmhvdC5yb290RWxlbWVudCxbUlEsb0hdKTtjb25zdCBEPVBhKHA2LHRoaXMpLmlzQnVpbHQoKSYmIVBhKHA2LHRoaXMpLmlzQXBwZW5kZWQoKSxa''@;'; put 'put ''PVBhKG5kLHRoaXMpLmlzQnVpbHQoKSYmIVBhKG5kLHRoaXMpLmlzQXBwZW5kZWQoKTtEJiZaJiYoUGEocDYsdGhpcykuYXBwZW5kVG8oaC5oaWRlciksUGEobmQsdGhpcykuYXBwZW5kVG8oaC5oaWRlcikpO2NvbnN0e2Zyb206bmUsdG86Y2V9PU0sYmU9TWF0aC5taW4obmUucm93LGNlLnJv''@;'; put 'put ''dyksRWU9TWF0aC5tYXgobmUucm93LGNlLnJvdyk7aWYobC5jb2w8MCYmbC5yb3c+PWJlJiZsLnJvdzw9RWUpe2Qucm93PSEwLEk5KGc2LHRoaXMsITApLFBhKEdkLHRoaXMpLmV2ZW50UGFnZVk9Yy5wYWdlWSxQYShHZCx0aGlzKS5jb29yZHM9bCxQYShHZCx0aGlzKS5URD1hLEk5KGpnLHRo''@;'; put 'put ''aXMsdGhpcy5wcmVwYXJlUm93c1RvTW92aW5nKCkpO2NvbnN0IEJlPWguaG9sZGVyLnNjcm9sbExlZnQrZi5nZXRSb3dIZWFkZXJXaWR0aCgpLHFlPXRoaXMuZ2V0Um93c0hlaWdodChiZSxsLnJvdy0xKSsoYy5jbGllbnRZLWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wKTtQYShuZCx0''@;'; put 'put ''aGlzKS5zZXRQb3NpdGlvbihudWxsLEJlKSxQYShuZCx0aGlzKS5zZXRTaXplKGguaGlkZXIub2Zmc2V0V2lkdGgtQmUsdGhpcy5nZXRSb3dzSGVpZ2h0KGJlLEVlKSksUGEobmQsdGhpcykuc2V0T2Zmc2V0KC1xZSxudWxsKSxUaSh0aGlzLmhvdC5yb290RWxlbWVudCxSUSksdGhpcy5yZWZy''@;'; put 'put ''ZXNoUG9zaXRpb25zKCl9ZWxzZSBjYSh0aGlzLmhvdC5yb290RWxlbWVudCxMUSksSTkoZzYsdGhpcywhMSksUGEoamcsdGhpcykubGVuZ3RoPTB9ZnVuY3Rpb24gcTJ0KGMpe1BhKGc2LHRoaXMpJiYoUGEoR2QsdGhpcykuZXZlbnRQYWdlWT1jLnBhZ2VZLHRoaXMucmVmcmVzaFBvc2l0aW9u''@;'; put 'put ''cygpKX1mdW5jdGlvbiBYMnQoYyxsLGEsZCl7IXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCl8fCFQYShnNix0aGlzKXx8KFBhKGpnLHRoaXMpLmluZGV4T2YobC5yb3cpPi0xP2NhKHRoaXMuaG90LnJvb3RFbGVtZW50LG9IKTpUaSh0aGlzLmhvdC5yb290RWxlbWVudCxvSCksZC5y''@;'; put 'put ''b3c9ITAsZC5jb2x1bW49ITAsZC5jZWxsPSEwLFBhKEdkLHRoaXMpLmNvb3Jkcz1sLFBhKEdkLHRoaXMpLlREPWEpfWZ1bmN0aW9uIEoydCgpe2NvbnN0IGM9UGEoR2QsdGhpcykucm93LGw9UGEoamcsdGhpcykubGVuZ3RoO2lmKEk5KGc2LHRoaXMsITEpLGNhKHRoaXMuaG90LnJvb3RFbGVt''@;'; put 'put ''ZW50LFtSUSxvSCxMUV0pLHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlSb3dIZWFkZXIoKSYmVGkodGhpcy5ob3Qucm9vdEVsZW1lbnQsTFEpLGw8MXx8dm9pZCAwPT09YylyZXR1cm47Y29uc3QgYT1QYShqZyx0aGlzKVswXSxkPXRoaXMuaG90LnRvUGh5c2ljYWxSb3coYSksaD10''@;'; put 'put ''aGlzLmRyYWdSb3dzKFBhKGpnLHRoaXMpLGMpO2lmKFBhKGpnLHRoaXMpLmxlbmd0aD0wLCEwPT09aCl7dGhpcy5wZXJzaXN0ZW50U3RhdGVTYXZlKCksdGhpcy5ob3QucmVuZGVyKCksdGhpcy5ob3Qudmlldy5hZGp1c3RFbGVtZW50c1NpemUoKTtjb25zdCBmPXRoaXMuaG90LnRvVmlzdWFs''@;'; put 'put ''Um93KGQpO3RoaXMuaG90LnNlbGVjdFJvd3MoZixmK2wtMSl9fWZ1bmN0aW9uIFEydCgpe2NvbnN0IGM9dGhpcy5ob3Qudmlldy5fd3Qud3RUYWJsZSxkPXRoaXMuaG90LnZpZXcuX3d0Lnd0Vmlld3BvcnQuZ2V0Um93SGVhZGVyV2lkdGgoKStjLmhvbGRlci5zY3JvbGxMZWZ0O1BhKG5kLHRo''@;'; put 'put ''aXMpLnNldFBvc2l0aW9uKG51bGwsZCksUGEobmQsdGhpcykuc2V0U2l6ZShjLmhpZGVyLm9mZnNldFdpZHRoLWQpfWZ1bmN0aW9uIGVmdCgpe3RoaXMubW92ZUJ5U2V0dGluZ3NPckxvYWQoKX1mdW5jdGlvbiBNMShjLGwsYSl7WTVlKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBZNWUoYyxs''@;'; put 'put ''KXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIEtjKGMsbCxhKXtyZXR1cm4gYy5zZXQoemcoYyxsKSxhKSxhfWZ1bmN0aW9uIE1vKGMsbCl7cmV0''@;'; put 'put ''dXJuIGMuZ2V0KHpnKGMsbCkpfWZ1bmN0aW9uIHpnKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhp''@;'; put 'put ''cyBvYmplY3QiKX1jb25zdCBzSD0ibWFudWFsUm93UmVzaXplIixHNWU9Im1hbnVhbFJvd0hlaWdodHMiO3ZhciBXcD1uZXcgV2Vha01hcCxsSD1uZXcgV2Vha01hcCxIaD1uZXcgV2Vha01hcCxuQT1uZXcgV2Vha01hcCxtNj1uZXcgV2Vha01hcCxPUT1uZXcgV2Vha01hcCxodz1uZXcgV2Vh''@;'; put 'put ''a01hcCxjSD1uZXcgV2Vha01hcCxyZD1uZXcgV2Vha01hcCxZcD1uZXcgV2Vha01hcCxMOT1uZXcgV2Vha01hcCx1SD1uZXcgV2Vha01hcCxyQT1uZXcgV2Vha01hcCxpQT1uZXcgV2Vha01hcCxtMz1uZXcgV2Vha01hcCxvQT1uZXcgV2Vha01hcCx2Nj1uZXcgV2Vha1NldDtjbGFzcyByZnQg''@;'; put 'put ''ZXh0ZW5kcyBGc3tzdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gc0h9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMzB9Y29uc3RydWN0b3IobCl7c3VwZXIobCksZnVuY3Rpb24gdGZ0KGMsbCl7WTVlKGMsbCksbC5hZGQoYyl9KHRoaXMsdjYpLE0xKHRoaXMsV3As''@;'; put 'put ''bnVsbCksTTEodGhpcyxsSCxudWxsKSxNMSh0aGlzLEhoLFtdKSxNMSh0aGlzLG5BLG51bGwpLE0xKHRoaXMsbTYsbnVsbCksTTEodGhpcyxPUSxudWxsKSxNMSh0aGlzLGh3LG51bGwpLE0xKHRoaXMsY0gsbnVsbCksTTEodGhpcyxyZCx0aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxl''@;'; put 'put ''bWVudCgiRElWIikpLE0xKHRoaXMsWXAsdGhpcy5ob3Qucm9vdERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkRJViIpKSxNMSh0aGlzLEw5LCExKSxNMSh0aGlzLHVILCExKSxNMSh0aGlzLHJBLDApLE0xKHRoaXMsaUEsbnVsbCksTTEodGhpcyxtMyx2b2lkIDApLE0xKHRoaXMsb0Esdm9pZCAw''@;'; put 'put ''KSxUaShNbyhyZCx0aGlzKSwibWFudWFsUm93UmVzaXplciIpLFRpKE1vKFlwLHRoaXMpLCJtYW51YWxSb3dSZXNpemVyR3VpZGUiKX1nZXQgaW5saW5lRGlyKCl7cmV0dXJuIHRoaXMuaG90LmlzUnRsKCk/InJpZ2h0IjoibGVmdCJ9aXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuaG90LmdldFNl''@;'; put 'put ''dHRpbmdzKClbc0hdfWVuYWJsZVBsdWdpbigpe3RoaXMuZW5hYmxlZHx8KEtjKG0zLHRoaXMsbmV3IHptKSxNbyhtMyx0aGlzKS5hZGRMb2NhbEhvb2soImluaXQiLCgpPT56Zyh2Nix0aGlzLHVmdCkuY2FsbCh0aGlzKSksdGhpcy5ob3Qucm93SW5kZXhNYXBwZXIucmVnaXN0ZXJNYXAodGhp''@;'; put 'put ''cy5wbHVnaW5OYW1lLE1vKG0zLHRoaXMpKSx0aGlzLmFkZEhvb2soIm1vZGlmeVJvd0hlaWdodCIsKGwsYSk9PnpnKHY2LHRoaXMsY2Z0KS5jYWxsKHRoaXMsbCxhKSksdGhpcy5iaW5kRXZlbnRzKCksc3VwZXIuZW5hYmxlUGx1Z2luKCkpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBs''@;'; put 'put ''dWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe0tjKG9BLHRoaXMsTW8obTMsdGhpcykuZ2V0VmFsdWVzKCkpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAodGhpcy5wbHVnaW5OYW1lKSxzdXBlci5kaXNh''@;'; put 'put ''YmxlUGx1Z2luKCl9c2F2ZU1hbnVhbFJvd0hlaWdodHMoKXt0aGlzLmhvdC5ydW5Ib29rcygicGVyc2lzdGVudFN0YXRlU2F2ZSIsRzVlLE1vKG0zLHRoaXMpLmdldFZhbHVlcygpKX1sb2FkTWFudWFsUm93SGVpZ2h0cygpe2NvbnN0IGw9e307cmV0dXJuIHRoaXMuaG90LnJ1bkhvb2tzKCJw''@;'; put 'put ''ZXJzaXN0ZW50U3RhdGVMb2FkIixHNWUsbCksbC52YWx1ZX1zZXRNYW51YWxTaXplKGwsYSl7Y29uc3QgZD10aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpLGg9TWF0aC5tYXgoYSx0aGlzLmhvdC52aWV3LmdldERlZmF1bHRSb3dIZWlnaHQoKSk7cmV0dXJuIE1vKG0zLHRoaXMpLnNldFZhbHVl''@;'; put 'put ''QXRJbmRleChkLGgpLGh9Z2V0TGFzdERlc2lyZWRSb3dIZWlnaHQoKXtyZXR1cm4gTW8obkEsdGhpcyl9c2V0dXBIYW5kbGVQb3NpdGlvbihsKXtLYyhXcCx0aGlzLGwpO2NvbnN0e3ZpZXc6YX09dGhpcy5ob3Qse193dDpkfT1hLGg9ZC53dFRhYmxlLmdldENvb3JkcyhNbyhXcCx0aGlzKSks''@;'; put 'put ''Zj1oLnJvdztpZihmPDApcmV0dXJuO2NvbnN0IHY9YXUoTW8oV3AsdGhpcykpLE09TW8oV3AsdGhpcykuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksRD1mPGQuZ2V0U2V0dGluZygiZml4ZWRSb3dzVG9wIiksWj1mPj1hLmNvdW50Tm90SGlkZGVuUm93SW5kZXhlcygwLDEpLWQuZ2V0U2V0dGlu''@;'; put 'put ''ZygiZml4ZWRSb3dzQm90dG9tIik7bGV0IG5lO0Q/bmU9ZC53dE92ZXJsYXlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheS5nZXRSZWxhdGl2ZUNlbGxQb3NpdGlvbihNbyhXcCx0aGlzKSxoLnJvdyxoLmNvbCk6WiYmKG5lPWQud3RPdmVybGF5cy5ib3R0b21JbmxpbmVTdGFydENvcm5l''@;'; put 'put ''ck92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24oTW8oV3AsdGhpcyksaC5yb3csaC5jb2wpKSxuZXx8KG5lPWQud3RPdmVybGF5cy5pbmxpbmVTdGFydE92ZXJsYXkuZ2V0UmVsYXRpdmVDZWxsUG9zaXRpb24oTW8oV3AsdGhpcyksaC5yb3csaC5jb2wpKSxLYyhsSCx0aGlzLHRoaXMu''@;'; put 'put ''aG90LnJvd0luZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoZikpLEtjKEhoLHRoaXMsW10pO2NvbnN0IGNlPXRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKXx8dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeVJvd0hlYWRlcigpO3RoaXMu''@;'; put 'put ''aG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkKCkmJmNlJiZZbih0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlKCksRWU9PnskbyhFZS5nZXRUb3BTdGFydENvcm5lcigpLnJvdyxFZS5nZXRCb3R0b21TdGFydENvcm5lcigpLnJvdyxudD0+e01vKEhoLHRoaXMpLmluY2x1ZGVzKG50KXx8TW8oSGgs''@;'; put 'put ''dGhpcykucHVzaChudCl9KX0pLE1vKEhoLHRoaXMpLmluY2x1ZGVzKE1vKGxILHRoaXMpKXx8S2MoSGgsdGhpcyxbTW8obEgsdGhpcyldKSxLYyhjSCx0aGlzLG5lLnRvcC02KSxLYyhodyx0aGlzLHBhcnNlSW50KE0uaGVpZ2h0LDEwKSksTW8ocmQsdGhpcykuc3R5bGUudG9wPWAke01vKGNI''@;'; put 'put ''LHRoaXMpK01vKGh3LHRoaXMpfXB4YCxNbyhyZCx0aGlzKS5zdHlsZVt0aGlzLmlubGluZURpcl09YCR7bmUuc3RhcnR9cHhgLE1vKHJkLHRoaXMpLnN0eWxlLndpZHRoPWAke3Z9cHhgLHRoaXMuaG90LnJvb3RFbGVtZW50LmFwcGVuZENoaWxkKE1vKHJkLHRoaXMpKX1yZWZyZXNoSGFuZGxl''@;'; put 'put ''UG9zaXRpb24oKXtNbyhyZCx0aGlzKS5zdHlsZS50b3A9YCR7TW8oY0gsdGhpcykrTW8obkEsdGhpcyl9cHhgfXNldHVwR3VpZGVQb3NpdGlvbigpe2NvbnN0IGw9cGFyc2VJbnQoYXUoTW8ocmQsdGhpcykpLDEwKSxhPXBhcnNlSW50KE1vKHJkLHRoaXMpLnN0eWxlW3RoaXMuaW5saW5lRGly''@;'; put 'put ''XSwxMCkrbCxkPXBhcnNlSW50KHRoaXMuaG90LnZpZXcubWF4aW11bVZpc2libGVFbGVtZW50V2lkdGgoMCksMTApO1RpKE1vKHJkLHRoaXMpLCJhY3RpdmUiKSxUaShNbyhZcCx0aGlzKSwiYWN0aXZlIiksTW8oWXAsdGhpcykuc3R5bGUudG9wPU1vKHJkLHRoaXMpLnN0eWxlLnRvcCxNbyhZ''@;'; put 'put ''cCx0aGlzKS5zdHlsZVt0aGlzLmlubGluZURpcl09YCR7YX1weGAsTW8oWXAsdGhpcykuc3R5bGUud2lkdGg9ZC1sKyJweCIsdGhpcy5ob3Qucm9vdEVsZW1lbnQuYXBwZW5kQ2hpbGQoTW8oWXAsdGhpcykpfXJlZnJlc2hHdWlkZVBvc2l0aW9uKCl7TW8oWXAsdGhpcykuc3R5bGUudG9wPU1v''@;'; put 'put ''KHJkLHRoaXMpLnN0eWxlLnRvcH1oaWRlSGFuZGxlQW5kR3VpZGUoKXtjYShNbyhyZCx0aGlzKSwiYWN0aXZlIiksY2EoTW8oWXAsdGhpcyksImFjdGl2ZSIpfWNoZWNrSWZSb3dIZWFkZXIobCl7Y29uc3QgYT1EbShsLFsiVEJPRFkiXSx0aGlzLmhvdC5yb290RWxlbWVudCkse2lubGluZVN0''@;'; put 'put ''YXJ0T3ZlcmxheTpkLHRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheTpoLGJvdHRvbUlubGluZVN0YXJ0Q29ybmVyT3ZlcmxheTpmfT10aGlzLmhvdC52aWV3Ll93dC53dE92ZXJsYXlzO3JldHVybltkLmNsb25lLnd0VGFibGUuVEJPRFksaC5jbG9uZS53dFRhYmxlLlRCT0RZLGYuY2xvbmUu''@;'; put 'put ''d3RUYWJsZS5UQk9EWV0uaW5jbHVkZXMoYSl9Z2V0Q2xvc2VzdFRIUGFyZW50KGwpe3JldHVybiJUQUJMRSIhPT1sLnRhZ05hbWU/IlRIIj09PWwudGFnTmFtZT9sOnRoaXMuZ2V0Q2xvc2VzdFRIUGFyZW50KGwucGFyZW50Tm9kZSk6bnVsbH1nZXRBY3R1YWxSb3dIZWlnaHQobCl7Y29uc3Qg''@;'; put 'put ''YT10aGlzLmhvdC52aWV3Ll93dC53dFRhYmxlLmdldFJvd0hlaWdodChsKTtyZXR1cm4gdm9pZCAwIT09YSYmTW8obTYsdGhpcyk8YT9hOk1vKG02LHRoaXMpfWFmdGVyTW91c2VEb3duVGltZW91dCgpe2NvbnN0IGw9KCk9Pnt0aGlzLmhvdC5mb3JjZUZ1bGxSZW5kZXI9ITAsdGhpcy5ob3Qu''@;'; put 'put ''dmlldy5yZW5kZXIoKSx0aGlzLmhvdC52aWV3LmFkanVzdEVsZW1lbnRzU2l6ZSgpfSxhPShkLGgpPT57Y29uc3QgZj10aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUm93UmVzaXplIix0aGlzLmdldEFjdHVhbFJvd0hlaWdodChkKSxkLCEwKTt2b2lkIDAhPT1mJiZLYyhtNix0aGlzLGYpLHRo''@;'; put 'put ''aXMuc2V0TWFudWFsU2l6ZShkLE1vKG02LHRoaXMpKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJSb3dSZXNpemUiLHRoaXMuZ2V0QWN0dWFsUm93SGVpZ2h0KGQpLGQsITApLGgmJmwoKX07TW8ockEsdGhpcyk+PTImJihNbyhIaCx0aGlzKS5sZW5ndGg+MT8oWW4oTW8oSGgsdGhpcyksaD0+''@;'; put 'put ''e2EoaCl9KSxsKCkpOlluKE1vKEhoLHRoaXMpLGg9PnthKGgsITApfSkpLEtjKHJBLHRoaXMsMCksS2MoaUEsdGhpcyxudWxsKX1iaW5kRXZlbnRzKCl7Y29uc3R7cm9vdEVsZW1lbnQ6bCxyb290V2luZG93OmF9PXRoaXMuaG90O3RoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIo''@;'; put 'put ''bCwibW91c2VvdmVyIixkPT56Zyh2Nix0aGlzLGlmdCkuY2FsbCh0aGlzLGQpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGwsIm1vdXNlZG93biIsZD0+emcodjYsdGhpcyxvZnQpLmNhbGwodGhpcyxkKSksdGhpcy5ldmVudE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihh''@;'; put 'put ''LCJtb3VzZW1vdmUiLGQ9PnpnKHY2LHRoaXMsYWZ0KS5jYWxsKHRoaXMsZCkpLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwibW91c2V1cCIsKCk9PnpnKHY2LHRoaXMsc2Z0KS5jYWxsKHRoaXMpKSx0aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKE1vKHJk''@;'; put 'put ''LHRoaXMpLCJjb250ZXh0bWVudSIsKCk9PnpnKHY2LHRoaXMsbGZ0KS5jYWxsKHRoaXMpKX1kZXN0cm95KCl7c3VwZXIuZGVzdHJveSgpfX1mdW5jdGlvbiBpZnQoYyl7aWYoIWckKGMudGFyZ2V0KSYmITAhPT1Nbyh1SCx0aGlzKSYmdGhpcy5jaGVja0lmUm93SGVhZGVyKGMudGFyZ2V0KSl7''@;'; put 'put ''Y29uc3QgbD10aGlzLmdldENsb3Nlc3RUSFBhcmVudChjLnRhcmdldCk7bCYmKE1vKEw5LHRoaXMpfHx0aGlzLnNldHVwSGFuZGxlUG9zaXRpb24obCkpfX1mdW5jdGlvbiBvZnQoYyl7cGEoYy50YXJnZXQsIm1hbnVhbFJvd1Jlc2l6ZXIiKSYmKHRoaXMuc2V0dXBIYW5kbGVQb3NpdGlvbihN''@;'; put 'put ''byhXcCx0aGlzKSksdGhpcy5zZXR1cEd1aWRlUG9zaXRpb24oKSxLYyhMOSx0aGlzLCEwKSxudWxsPT09TW8oaUEsdGhpcykmJihLYyhpQSx0aGlzLHNldFRpbWVvdXQoKCk9PnRoaXMuYWZ0ZXJNb3VzZURvd25UaW1lb3V0KCksNTAwKSksdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dChNbyhp''@;'; put 'put ''QSx0aGlzKSkpLEtjKHJBLHRoaXMsTW8ockEsdGhpcykrMSksS2MoT1EsdGhpcyxjLnBhZ2VZKSxLYyhtNix0aGlzLE1vKGh3LHRoaXMpKSl9ZnVuY3Rpb24gYWZ0KGMpe01vKEw5LHRoaXMpJiYoS2MobkEsdGhpcyxNbyhodyx0aGlzKSsoYy5wYWdlWS1NbyhPUSx0aGlzKSkpLFluKE1vKEho''@;'; put 'put ''LHRoaXMpLGw9PntLYyhtNix0aGlzLHRoaXMuc2V0TWFudWFsU2l6ZShsLE1vKG5BLHRoaXMpKSl9KSx0aGlzLnJlZnJlc2hIYW5kbGVQb3NpdGlvbigpLHRoaXMucmVmcmVzaEd1aWRlUG9zaXRpb24oKSl9ZnVuY3Rpb24gc2Z0KCl7Y29uc3QgYz0oKT0+e3RoaXMuaG90LmZvcmNlRnVsbFJl''@;'; put 'put ''bmRlcj0hMCx0aGlzLmhvdC52aWV3LnJlbmRlcigpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9LGw9KGEsZCk9Pnt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlUm93UmVzaXplIix0aGlzLmdldEFjdHVhbFJvd0hlaWdodChhKSxhLCExKSxkJiZjKCksdGhpcy5zYXZlTWFu''@;'; put 'put ''dWFsUm93SGVpZ2h0cygpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJvd1Jlc2l6ZSIsdGhpcy5nZXRBY3R1YWxSb3dIZWlnaHQoYSksYSwhMSl9O01vKEw5LHRoaXMpJiYodGhpcy5oaWRlSGFuZGxlQW5kR3VpZGUoKSxLYyhMOSx0aGlzLCExKSxNbyhtNix0aGlzKSE9PU1vKGh3LHRoaXMp''@;'; put 'put ''JiYoTW8oSGgsdGhpcykubGVuZ3RoPjE/KFluKE1vKEhoLHRoaXMpLGQ9PntsKGQpfSksYygpKTpZbihNbyhIaCx0aGlzKSxkPT57bChkLCEwKX0pKSx0aGlzLnNldHVwSGFuZGxlUG9zaXRpb24oTW8oV3AsdGhpcykpKX1mdW5jdGlvbiBsZnQoKXt0aGlzLmhpZGVIYW5kbGVBbmRHdWlkZSgp''@;'; put 'put ''LHRoaXMuaG90LnJvb3RFbGVtZW50LnJlbW92ZUNoaWxkKE1vKHJkLHRoaXMpKSx0aGlzLmhvdC5yb290RWxlbWVudC5yZW1vdmVDaGlsZChNbyhZcCx0aGlzKSksS2MoTDksdGhpcywhMSksS2ModUgsdGhpcywhMCksdGhpcy5ob3QuX3JlZ2lzdGVySW1tZWRpYXRlKCgpPT57S2ModUgsdGhp''@;'; put 'put ''cywhMSl9KX1mdW5jdGlvbiBjZnQoYyxsKXtsZXQgYT1jO2lmKHRoaXMuZW5hYmxlZCl7Y29uc3QgZD10aGlzLmhvdC50b1BoeXNpY2FsUm93KGwpLGg9TW8obTMsdGhpcykuZ2V0VmFsdWVBdEluZGV4KGQpO3RoaXMuaG90LmdldFNldHRpbmdzKClbc0hdJiZoJiYoYT1oKX1yZXR1cm4gYX1m''@;'; put 'put ''dW5jdGlvbiB1ZnQoKXtjb25zdCBjPXRoaXMuaG90LmdldFNldHRpbmdzKClbc0hdLGw9dGhpcy5sb2FkTWFudWFsUm93SGVpZ2h0cygpO3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57dHlwZW9mIGw8InUiP2wuZm9yRWFjaCgoYSxkKT0+e01vKG0zLHRoaXMpLnNldFZhbHVlQXRJbmRl''@;'; put 'put ''eChkLGEpfSk6QXJyYXkuaXNBcnJheShjKT8oYy5mb3JFYWNoKChhLGQpPT57TW8obTMsdGhpcykuc2V0VmFsdWVBdEluZGV4KGQsYSl9KSxLYyhvQSx0aGlzLGMpKTohMD09PWMmJkFycmF5LmlzQXJyYXkoTW8ob0EsdGhpcykpJiZNbyhvQSx0aGlzKS5mb3JFYWNoKChhLGQpPT57TW8obTMs''@;'; put 'put ''dGhpcykuc2V0VmFsdWVBdEluZGV4KGQsYSl9KX0sITApfWZ1bmN0aW9uIE85KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBmZnQoYyl7dmFyIGw9ZnVuY3Rpb24gcGZ0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07''@;'; put 'put ''aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0''@;'; put 'put ''cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlv''@;'; put 'put ''biAkNWUoYyxsKXtyZXR1cm4gYy5nZXQoSzVlKGMsbCkpfWZ1bmN0aW9uIGRIKGMsbCxhKXtyZXR1cm4gYy5zZXQoSzVlKGMsbCksYSksYX1mdW5jdGlvbiBLNWUoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/''@;'; put 'put ''bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfV8oNjgxNDYpLF8oNzQ5OSk7dmFyIFA5PW5ldyBXZWFrTWFwO2NvbnN0IEdwPWNsYXNzIGdmdHtjb25zdHJ1Y3RvcihsLGEsZCxoLGYsdil7TzkodGhpcywicm93''@;'; put 'put ''Iix2b2lkIDApLE85KHRoaXMsImNvbCIsdm9pZCAwKSxPOSh0aGlzLCJyb3dzcGFuIix2b2lkIDApLE85KHRoaXMsImNvbHNwYW4iLHZvaWQgMCksTzkodGhpcywicmVtb3ZlZCIsITEpLE85KHRoaXMsImNlbGxDb29yZHNGYWN0b3J5Iix2b2lkIDApLE85KHRoaXMsImNlbGxSYW5nZUZhY3Rv''@;'; put 'put ''cnkiLHZvaWQgMCksZnVuY3Rpb24gZGZ0KGMsbCxhKXsoZnVuY3Rpb24gaGZ0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxh''@;'; put 'put ''KX0odGhpcyxQOSxudWxsKSx0aGlzLnJvdz1sLHRoaXMuY29sPWEsdGhpcy5yb3dzcGFuPWQsdGhpcy5jb2xzcGFuPWgsdGhpcy5jZWxsQ29vcmRzRmFjdG9yeT1mLHRoaXMuY2VsbFJhbmdlRmFjdG9yeT12fXN0YXRpYyBORUdBVElWRV9WQUxVRVNfV0FSTklORyhsKXtsZXR7cm93OmEsY29s''@;'; put 'put ''OmQscm93c3BhbjpoLGNvbHNwYW46Zn09bDtyZXR1cm4gZmxgVGhlIG1lcmdlZCBjZWxsIGRlY2xhcmVkIHdpdGgge3JvdzogJHthfSwgY29sOiAke2R9LFx4MjAKICAgICAgcm93c3BhbjogJHtofSwgY29sc3BhbjogJHtmfX0gY29udGFpbnMgbmVnYXRpdmUgdmFsdWVzLCB3aGljaCBpc1x4''@;'; put 'put ''MjAKICAgICAgbm90IHN1cHBvcnRlZC4gSXQgd2lsbCBub3QgYmUgYWRkZWQgdG8gdGhlIGNvbGxlY3Rpb24uYH1zdGF0aWMgSVNfT1VUX09GX0JPVU5EU19XQVJOSU5HKGwpe2xldHtyb3c6YSxjb2w6ZH09bDtyZXR1cm4gZmxgVGhlIG1lcmdlZCBjZWxsIGRlY2xhcmVkIGF0IFske2F9LCAk''@;'; put 'put ''e2R9XSBpcyBwb3NpdGlvbmVkXHgyMAogICAgICAob3IgcG9zaXRpb25lZCBwYXJ0aWFsbHkpIG91dHNpZGUgb2YgdGhlIHRhYmxlIHJhbmdlLiBJdCB3YXMgbm90IGFkZGVkIHRvIHRoZSB0YWJsZSwgcGxlYXNlIGZpeCB5b3VyIHNldHVwLmB9c3RhdGljIElTX1NJTkdMRV9DRUxMKGwpe2xl''@;'; put 'put ''dHtyb3c6YSxjb2w6ZH09bDtyZXR1cm4gZmxgVGhlIG1lcmdlZCBjZWxsIGRlY2xhcmVkIGF0IFske2F9LCAke2R9XSBoYXMgYm90aCAicm93c3BhbiJceDIwCiAgICAgIGFuZCAiY29sc3BhbiIgZGVjbGFyZWQgYXMgIjEiLCB3aGljaCBtYWtlcyBpdCBhIHNpbmdsZSBjZWxsLiBJdCBjYW5u''@;'; put 'put ''b3QgYmUgYWRkZWQgdG8gdGhlIGNvbGxlY3Rpb24uYH1zdGF0aWMgWkVST19TUEFOX1dBUk5JTkcobCl7bGV0e3JvdzphLGNvbDpkfT1sO3JldHVybiBmbGBUaGUgbWVyZ2VkIGNlbGwgZGVjbGFyZWQgYXQgWyR7YX0sICR7ZH1dIGhhcyAicm93c3BhbiJceDIwCiAgICAgIG9yICJjb2xzcGFu''@;'; put 'put ''IiBkZWNsYXJlZCBhcyAiMCIsIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQuIEl0IGNhbm5vdCBiZSBhZGRlZCB0byB0aGUgY29sbGVjdGlvbi5gfXN0YXRpYyBjb250YWluc05lZ2F0aXZlVmFsdWVzKGwpe2xldHtyb3c6YSxjb2w6ZCxyb3dzcGFuOmgsY29sc3BhbjpmfT1sO3JldHVybiBhPDB8''@;'; put 'put ''fGQ8MHx8aDwwfHxmPDB9c3RhdGljIGlzU2luZ2xlQ2VsbChsKXtsZXR7cm93c3BhbjphLGNvbHNwYW46ZH09bDtyZXR1cm4gMT09PWQmJjE9PT1hfXN0YXRpYyBjb250YWluc1plcm9TcGFuKGwpe2xldHtyb3dzcGFuOmEsY29sc3BhbjpkfT1sO3JldHVybiAwPT09ZHx8MD09PWF9c3RhdGlj''@;'; put 'put ''IGlzT3V0T2ZCb3VuZHMobCxhLGQpe3JldHVybiBsLnJvdzwwfHxsLmNvbDwwfHxsLnJvdz49YXx8bC5yb3crbC5yb3dzcGFuLTE+PWF8fGwuY29sPj1kfHxsLmNvbCtsLmNvbHNwYW4tMT49ZH1ub3JtYWxpemUobCl7Y29uc3QgYT1sLmNvdW50Um93cygpLGQ9bC5jb3VudENvbHMoKTt0aGlz''@;'; put 'put ''LnJvdzwwP3RoaXMucm93PTA6dGhpcy5yb3c+YS0xJiYodGhpcy5yb3c9YS0xKSx0aGlzLmNvbDwwP3RoaXMuY29sPTA6dGhpcy5jb2w+ZC0xJiYodGhpcy5jb2w9ZC0xKSx0aGlzLnJvdyt0aGlzLnJvd3NwYW4+YS0xJiYodGhpcy5yb3dzcGFuPWEtdGhpcy5yb3cpLHRoaXMuY29sK3RoaXMu''@;'; put 'put ''Y29sc3Bhbj5kLTEmJih0aGlzLmNvbHNwYW49ZC10aGlzLmNvbCksZEgoUDksdGhpcyxudWxsKX1pbmNsdWRlcyhsLGEpe3JldHVybiB0aGlzLnJvdzw9bCYmdGhpcy5jb2w8PWEmJnRoaXMucm93K3RoaXMucm93c3Bhbi0xPj1sJiZ0aGlzLmNvbCt0aGlzLmNvbHNwYW4tMT49YX1pbmNsdWRl''@;'; put 'put ''c0hvcml6b250YWxseShsKXtyZXR1cm4gdGhpcy5jb2w8PWwmJnRoaXMuY29sK3RoaXMuY29sc3Bhbi0xPj1sfWluY2x1ZGVzVmVydGljYWxseShsKXtyZXR1cm4gdGhpcy5yb3c8PWwmJnRoaXMucm93K3RoaXMucm93c3Bhbi0xPj1sfXNoaWZ0KGwsYSl7Y29uc3QgZD1sWzBdfHxsWzFdLGg9''@;'; put 'put ''YStNYXRoLmFicyhsWzBdfHxsWzFdKS0xLGY9bFswXT8iY29sc3BhbiI6InJvd3NwYW4iLHY9bFswXT8iY29sIjoicm93IixNPU1hdGgubWluKGEsaCksRD1NYXRoLm1heChhLGgpLFo9dGhpc1t2XSxuZT10aGlzW3ZdK3RoaXNbZl0tMTtpZihaPj1hJiYodGhpc1t2XSs9ZCksZD4wKWE8PW5l''@;'; put 'put ''JiZhPlomJih0aGlzW2ZdKz1kKTtlbHNlIGlmKGQ8MCl7aWYoTTw9WiYmRD49bmUpcmV0dXJuIHRoaXMucmVtb3ZlZD0hMCxkSChQOSx0aGlzLG51bGwpLCExO2lmKFo+PU0mJlo8PUQpe2NvbnN0IGNlPUQtWisxLGJlPU1hdGguYWJzKGQpLWNlO3RoaXNbdl0tPWJlK2QsdGhpc1tmXS09Y2V9''@;'; put 'put ''ZWxzZSBaPD1NJiZuZT49RD90aGlzW2ZdKz1kOlo8PU0mJm5lPj1NJiZuZTxEJiYodGhpc1tmXS09bmUtTSsxKX1yZXR1cm4gZEgoUDksdGhpcyxudWxsKSwhMH1pc0ZhcnRoZXIobCxhKXtyZXR1cm4hbHx8KCJkb3duIj09PWE/bC5yb3crbC5yb3dzcGFuLTE8dGhpcy5yb3crdGhpcy5yb3dz''@;'; put 'put ''cGFuLTE6InVwIj09PWE/bC5yb3c+dGhpcy5yb3c6InJpZ2h0Ij09PWE/bC5jb2wrbC5jb2xzcGFuLTE8dGhpcy5jb2wrdGhpcy5jb2xzcGFuLTE6ImxlZnQiPT09YT9sLmNvbD50aGlzLmNvbDpudWxsKX1nZXRMYXN0Um93KCl7cmV0dXJuIHRoaXMucm93K3RoaXMucm93c3Bhbi0xfWdldExh''@;'; put 'put ''c3RDb2x1bW4oKXtyZXR1cm4gdGhpcy5jb2wrdGhpcy5jb2xzcGFuLTF9Z2V0UmFuZ2UoKXtyZXR1cm4gJDVlKFA5LHRoaXMpfHxkSChQOSx0aGlzLHRoaXMuY2VsbFJhbmdlRmFjdG9yeSh0aGlzLmNlbGxDb29yZHNGYWN0b3J5KHRoaXMucm93LHRoaXMuY29sKSx0aGlzLmNlbGxDb29yZHNG''@;'; put 'put ''YWN0b3J5KHRoaXMucm93LHRoaXMuY29sKSx0aGlzLmNlbGxDb29yZHNGYWN0b3J5KHRoaXMuZ2V0TGFzdFJvdygpLHRoaXMuZ2V0TGFzdENvbHVtbigpKSkpLCQ1ZShQOSx0aGlzKX19O2Z1bmN0aW9uIGhIKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBiZnQoYyl7dmFyIGw9ZnVuY3Rpb24g''@;'; put 'put ''eWZ0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShj''@;'; put 'put ''LGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBGOShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5''@;'; put 'put ''cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIGI2PW5ldyBXZWFrU2V0O2NsYXNzIGZIe2NvbnN0cnVjdG9yKGwpeyhmdW5jdGlvbiBtZnQoYyxsKXsoZnVuY3Rpb24gdmZ0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KSh0aGlzLGI2KSxoSCh0aGlzLCJwbHVnaW4iLHZvaWQgMCksaEgodGhpcywibWVyZ2VkQ2VsbHMiLFtdKSxoSCh0aGlzLCJtZXJnZWRD''@;'; put 'put ''ZWxsc01hdHJpeCIsbmV3IE1hcCksaEgodGhpcywiaG90Iix2b2lkIDApLHRoaXMucGx1Z2luPWwsdGhpcy5ob3Q9bC5ob3R9c3RhdGljIElTX09WRVJMQVBQSU5HX1dBUk5JTkcobCl7bGV0e3JvdzphLGNvbDpkfT1sO3JldHVybiBmbGBUaGUgbWVyZ2VkIGNlbGwgZGVjbGFyZWQgYXQgWyR7''@;'; put 'put ''YX0sICR7ZH1dLCBvdmVybGFwc1x4MjAKICAgICAgd2l0aCB0aGUgb3RoZXIgZGVjbGFyZWQgbWVyZ2VkIGNlbGwuIFRoZSBvdmVybGFwcGluZyBtZXJnZWQgY2VsbCB3YXMgbm90IGFkZGVkIHRvIHRoZSB0YWJsZSwgcGxlYXNlXHgyMAogICAgICBmaXggeW91ciBzZXR1cC5gfWdldChsLGEp''@;'; put 'put ''e3ZhciBkO3JldHVybiEoIXRoaXMubWVyZ2VkQ2VsbHNNYXRyaXguaGFzKGwpfHxudWxsPT09KGQ9dGhpcy5tZXJnZWRDZWxsc01hdHJpeC5nZXQobCkuZ2V0KGEpKXx8dm9pZCAwPT09ZCkmJmR9Z2V0QnlSYW5nZShsKXtjb25zdHtyb3c6YSxjb2w6ZH09bC5nZXRUb3BTdGFydENvcm5lcigp''@;'; put 'put ''LHtyb3c6aCxjb2w6Zn09bC5nZXRCb3R0b21FbmRDb3JuZXIoKSx2PXRoaXMubWVyZ2VkQ2VsbHMubGVuZ3RoO2xldCBNPSExO2ZvcihsZXQgRD0wO0Q8djtEKyspe2NvbnN0IFo9dGhpcy5tZXJnZWRDZWxsc1tEXSx7cm93Om5lLGNvbDpjZSxyb3dzcGFuOmJlLGNvbHNwYW46RWV9PVo7aWYo''@;'; put 'put ''bmU+PWEmJm5lK2JlLTE8PWgmJmNlPj1kJiZjZStFZS0xPD1mKXtNPVo7YnJlYWt9fXJldHVybiBNfWZpbHRlck92ZXJsYXBwaW5nTWVyZ2VDZWxscyhsKXtjb25zdCBhPW5ldyBTZXQ7cmV0dXJuIHRoaXMubWVyZ2VkQ2VsbHMuZm9yRWFjaChoPT57Y29uc3R7cm93OmYsY29sOnYsY29sc3Bh''@;'; put 'put ''bjpNLHJvd3NwYW46RH09aDtmb3IobGV0IFo9ZjtaPGYrRDtaKyspZm9yKGxldCBuZT12O25lPHYrTTtuZSsrKWEuYWRkKGByJHtafSxjJHtuZX1gKX0pLGwuZmlsdGVyKGg9Pntjb25zdHtyb3c6Zixjb2w6dixjb2xzcGFuOk0scm93c3BhbjpEfT1oLFo9bmV3IFNldDtsZXQgbmU9ITE7Zm9y''@;'; put 'put ''KGxldCBjZT1mO2NlPGYrRDtjZSsrKXtmb3IobGV0IGJlPXY7YmU8ditNO2JlKyspe2NvbnN0IEVlPWByJHtjZX0sYyR7YmV9YDtpZihhLmhhcyhFZSkpe3RsKGZILklTX09WRVJMQVBQSU5HX1dBUk5JTkcoaCkpLG5lPSEwO2JyZWFrfVouYWRkKEVlKX1pZihuZSlicmVha31yZXR1cm4gbmV8''@;'; put 'put ''fGEuYWRkKC4uLlopLCFuZX0pfWdldFdpdGhpblJhbmdlKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07Y29uc3R7cm93OmQsY29sOmh9PWwuZ2V0VG9wU3RhcnRDb3JuZXIoKSx7cm93OmYsY29sOnZ9PWwuZ2V0Qm90dG9t''@;'; put 'put ''RW5kQ29ybmVyKCksTT1bXTtmb3IobGV0IEQ9ZDtEPD1mO0QrKylmb3IobGV0IFo9aDtaPD12O1orKyl7Y29uc3QgbmU9dGhpcy5nZXQoRCxaKTtuZSYmKGF8fCFhJiZuZS5yb3c9PT1EJiZuZS5jb2w9PT1aKSYmTS5wdXNoKG5lKX1yZXR1cm4gTX1hZGQobCl7bGV0IGE9YXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdCBkPWwucm93LGg9bC5jb2wsTT1uZXcgR3AoZCxoLGwucm93c3BhbixsLmNvbHNwYW4sdGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMsdGhpcy5ob3QuX2NyZWF0ZUNlbGxSYW5nZSksRD10aGlzLmdldChk''@;'; put 'put ''LGgpLFo9IWEmJnRoaXMuaXNPdmVybGFwcGluZyhNKTtyZXR1cm4gRHx8Wj8oWiYmdGwoZkguSVNfT1ZFUkxBUFBJTkdfV0FSTklORyhNKSksITEpOih0aGlzLmhvdCYmTS5ub3JtYWxpemUodGhpcy5ob3QpLHRoaXMubWVyZ2VkQ2VsbHMucHVzaChNKSxGOShiNix0aGlzLHE1ZSkuY2FsbCh0''@;'; put 'put ''aGlzLE0pLE0pfXJlbW92ZShsLGEpe2NvbnN0IGQ9dGhpcy5nZXQobCxhKSxoPWQ/dGhpcy5tZXJnZWRDZWxscy5pbmRleE9mKGQpOi0xO3JldHVybiEoIWR8fC0xPT09aCkmJih0aGlzLm1lcmdlZENlbGxzLnNwbGljZShoLDEpLEY5KGI2LHRoaXMsX2Z0KS5jYWxsKHRoaXMsZCksZCl9Y2xl''@;'; put 'put ''YXIoKXtZbih0aGlzLm1lcmdlZENlbGxzLGw9PntsZXR7cm93OmEsY29sOmQscm93c3BhbjpoLGNvbHNwYW46Zn09bDskbyhhLGEraCx2PT57JG8oZCxkK2YsTT0+e2NvbnN0IEQ9dGhpcy5ob3QuZ2V0Q2VsbCh2LE0pO0QmJihELnJlbW92ZUF0dHJpYnV0ZSgicm93c3BhbiIpLEQucmVtb3Zl''@;'; put 'put ''QXR0cmlidXRlKCJjb2xzcGFuIiksRC5zdHlsZS5kaXNwbGF5PSIiKX0pfSl9KSx0aGlzLm1lcmdlZENlbGxzLmxlbmd0aD0wLHRoaXMubWVyZ2VkQ2VsbHNNYXRyaXg9bmV3IE1hcH1pc092ZXJsYXBwaW5nKGwpe2NvbnN0IGE9bC5nZXRSYW5nZSgpO2ZvcihsZXQgZD0wO2Q8dGhpcy5tZXJn''@;'; put 'put ''ZWRDZWxscy5sZW5ndGg7ZCsrKWlmKHRoaXMubWVyZ2VkQ2VsbHNbZF0uZ2V0UmFuZ2UoKS5vdmVybGFwcyhhKSlyZXR1cm4hMDtyZXR1cm4hMX1pc0ZpcnN0UmVuZGVyYWJsZU1lcmdlZENlbGwobCxhKXtjb25zdCBkPXRoaXMuZ2V0KGwsYSk7aWYoIWQpcmV0dXJuITE7Y29uc3R7cm93Omgs''@;'; put 'put ''Y29sOmYscm93c3Bhbjp2LGNvbHNwYW46TX09ZCxEPXRoaXMuaG90LnZpZXcuZ2V0QWN0aXZlT3ZlcmxheU5hbWUoKSxaPVsidG9wIiwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiXS5pbmNsdWRlcyhEKT8wOnRoaXMuaG90LmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlUm93KCksbmU9WyJpbmxp''@;'; put 'put ''bmVfc3RhcnQiLCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciIsImJvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVkZXMoRCk/MDp0aGlzLmhvdC5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpLGNlPUFzKFosaCxoK3YtMSksYmU9QXMobmUsZixmK00tMSk7cmV0dXJuIHRo''@;'; put 'put ''aXMuaG90LnJvd0luZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChjZSwxKT09PWwmJnRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChiZSwxKT09PWF9Z2V0Rmlyc3RSZW5kZXJhYmxlQ29vcmRzKGwsYSl7Y29uc3QgZD10aGlzLmdl''@;'; put 'put ''dChsLGEpO2lmKCFkfHx0aGlzLmlzRmlyc3RSZW5kZXJhYmxlTWVyZ2VkQ2VsbChsLGEpKXJldHVybiB0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLGEpO2NvbnN0IGg9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGQucm93LDEpLGY9dGhpcy5o''@;'; put 'put ''b3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGQuY29sLDEpO3JldHVybiB0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhoLGYpfWdldFN0YXJ0TW9zdENvbHVtbkluZGV4KGwsYSl7Y29uc3QgZD1GOShiNix0aGlzLHBIKS5jYWxsKHRoaXMsbCwiY29sIiwt''@;'; put 'put ''MSk7bGV0IGg9YTtmb3IobGV0IGY9MDtmPGQubGVuZ3RoO2YrKylpZihkW2ZdPD1hKXtoPWRbZl07YnJlYWt9cmV0dXJuIGh9Z2V0RW5kTW9zdENvbHVtbkluZGV4KGwsYSl7Y29uc3QgZD1GOShiNix0aGlzLHBIKS5jYWxsKHRoaXMsbCwiY29sIiwxKTtsZXQgaD1hO2ZvcihsZXQgZj0wO2Y8''@;'; put 'put ''ZC5sZW5ndGg7ZisrKWlmKGRbZl0+PWEpe2g9ZFtmXTticmVha31yZXR1cm4gaH1nZXRUb3BNb3N0Um93SW5kZXgobCxhKXtjb25zdCBkPUY5KGI2LHRoaXMscEgpLmNhbGwodGhpcyxsLCJyb3ciLC0xKTtsZXQgaD1hO2ZvcihsZXQgZj0wO2Y8ZC5sZW5ndGg7ZisrKWlmKGRbZl08PWEpe2g9''@;'; put 'put ''ZFtmXTticmVha31yZXR1cm4gaH1nZXRCb3R0b21Nb3N0Um93SW5kZXgobCxhKXtjb25zdCBkPUY5KGI2LHRoaXMscEgpLmNhbGwodGhpcyxsLCJyb3ciLDEpO2xldCBoPWE7Zm9yKGxldCBmPTA7ZjxkLmxlbmd0aDtmKyspaWYoZFtmXT49YSl7aD1kW2ZdO2JyZWFrfXJldHVybiBofXNoaWZ0''@;'; put 'put ''Q29sbGVjdGlvbnMobCxhLGQpe2NvbnN0IGg9WzAsMF07c3dpdGNoKGwpe2Nhc2UicmlnaHQiOmhbMF0rPWQ7YnJlYWs7Y2FzZSJsZWZ0IjpoWzBdLT1kO2JyZWFrO2Nhc2UiZG93biI6aFsxXSs9ZDticmVhaztjYXNlInVwIjpoWzFdLT1kfWNvbnN0IGY9W107dGhpcy5tZXJnZWRDZWxscy5m''@;'; put 'put ''b3JFYWNoKHY9Pnt2LnNoaWZ0KGgsYSksdi5yZW1vdmVkJiZmLnB1c2godil9KSxmLmZvckVhY2godj0+e3RoaXMubWVyZ2VkQ2VsbHMuc3BsaWNlKHRoaXMubWVyZ2VkQ2VsbHMuaW5kZXhPZih2KSwxKX0pLHRoaXMubWVyZ2VkQ2VsbHNNYXRyaXguY2xlYXIoKSx0aGlzLm1lcmdlZENlbGxz''@;'; put 'put ''LmZvckVhY2godj0+e0Y5KGI2LHRoaXMscTVlKS5jYWxsKHRoaXMsdil9KX19ZnVuY3Rpb24gcEgoYyxsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MTtjb25zdCBkPW5ldyBNYXAsaD0xPT09YT9jLmdldFRvcFN0YXJ0Q29y''@;'; put 'put ''bmVyKCk6Yy5nZXRCb3R0b21FbmRDb3JuZXIoKSxmPTE9PT1hP2MuZ2V0Qm90dG9tRW5kQ29ybmVyKCk6Yy5nZXRUb3BTdGFydENvcm5lcigpO2ZvcihsZXQgdj1oLnJvdzsxPT09YT92PD1mLnJvdzp2Pj1mLnJvdzt2Kz1hKWZvcihsZXQgTT1oLmNvbDsxPT09YT9NPD1mLmNvbDpNPj1mLmNv''@;'; put 'put ''bDtNKz1hKXtjb25zdCBEPSJyb3ciPT09bD92Ok0sWj10aGlzLmdldCh2LE0pO2xldCBuZT1EO1omJihuZT0xPT09YT9aW2xdK1pbYCR7bH1zcGFuYF0tMTpaW2xdKSxkLmhhcyhEKXx8ZC5zZXQoRCxuZXcgU2V0KSxkLmdldChEKS5hZGQobmUpfXJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQo''@;'; put 'put ''QXJyYXkuZnJvbShkLmVudHJpZXMoKSkuZmlsdGVyKHY9PntsZXRbLE1dPXY7cmV0dXJuIDE9PT1NLnNpemV9KS5mbGF0TWFwKHY9PntsZXRbLE1dPXY7cmV0dXJuIEFycmF5LmZyb20oTSl9KSkpfWZ1bmN0aW9uIHE1ZShjKXtmb3IobGV0IGw9Yy5yb3c7bDxjLnJvdytjLnJvd3NwYW47bCsr''@;'; put 'put ''KWZvcihsZXQgYT1jLmNvbDthPGMuY29sK2MuY29sc3BhbjthKyspdGhpcy5tZXJnZWRDZWxsc01hdHJpeC5oYXMobCl8fHRoaXMubWVyZ2VkQ2VsbHNNYXRyaXguc2V0KGwsbmV3IE1hcCksdGhpcy5tZXJnZWRDZWxsc01hdHJpeC5nZXQobCkuc2V0KGEsYyl9ZnVuY3Rpb24gX2Z0KGMpe2Zv''@;'; put 'put ''cihsZXQgbD1jLnJvdztsPGMucm93K2Mucm93c3BhbjtsKyspZm9yKGxldCBhPWMuY29sO2E8Yy5jb2wrYy5jb2xzcGFuO2ErKyl0aGlzLm1lcmdlZENlbGxzTWF0cml4LmdldChsKS5kZWxldGUoYSl9Y29uc3Qgd2Z0PWZIO2Z1bmN0aW9uIFBRKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBD''@;'; put 'put ''ZnQoYyl7dmFyIGw9ZnVuY3Rpb24gU2Z0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJu''@;'; put 'put ''IGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCB4ZnQ9Y2xhc3MgTWZ0e2NvbnN0cnVjdG9yKGwpe1BRKHRoaXMsInBsdWdpbiIsdm9pZCAwKSxQUSh0aGlzLCJtZXJnZWRDZWxs''@;'; put 'put ''c0NvbGxlY3Rpb24iLHZvaWQgMCksUFEodGhpcywiY3VycmVudEZpbGxEYXRhIixudWxsKSx0aGlzLnBsdWdpbj1sLHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uPXRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbn1nZXREaXJlY3Rpb24obCxhKXtsZXQgZD1udWxsO3JldHVybiBk''@;'; put 'put ''PWFbMF09PT1sWzBdJiZhWzFdPT09bFsxXSYmYVszXT09PWxbM10/ImRvd24iOmFbMl09PT1sWzJdJiZhWzFdPT09bFsxXSYmYVszXT09PWxbM10/InVwIjphWzFdPT09bFsxXSYmYVsyXT09PWxbMl0/InJpZ2h0IjoibGVmdCIsZH1zbmFwRHJhZ0FyZWEobCxhLGQsaCl7Y29uc3QgZj1hLnNs''@;'; put 'put ''aWNlKDApLHY9dGhpcy5nZXRBdXRvZmlsbFNpemUobCxhLGQpLFtNLEQsWixuZV09bCxiZT1bInVwIiwiZG93biJdLmluZGV4T2YoZCk+LTE/Wi1NKzE6bmUtRCsxLEJlPXYtTWF0aC5mbG9vcih2L2JlKSpiZSxxZT10aGlzLmdldEZhcnRoZXN0Q29sbGVjdGlvbihsLGEsZCxoKTtpZihxZSlp''@;'; put 'put ''ZigiZG93biI9PT1kKXtjb25zdCBudD1xZS5yb3crcWUucm93c3Bhbi1NLUJlO2ZbMl0rbnQ+PXRoaXMucGx1Z2luLmhvdC5jb3VudFJvd3MoKT9mWzJdLT1CZTpmWzJdKz1CZT9udDowfWVsc2UgaWYoInJpZ2h0Ij09PWQpe2NvbnN0IG50PXFlLmNvbCtxZS5jb2xzcGFuLUQtQmU7ZlszXStu''@;'; put 'put ''dD49dGhpcy5wbHVnaW4uaG90LmNvdW50Q29scygpP2ZbM10tPUJlOmZbM10rPUJlP250OjB9ZWxzZSBpZigidXAiPT09ZCl7Y29uc3QgbnQ9Wi1CZS1xZS5yb3crMTtmWzBdK250PDA/ZlswXSs9QmU6ZlswXS09QmU/bnQ6MH1lbHNlIGlmKCJsZWZ0Ij09PWQpe2NvbnN0IG50PW5lLUJlLXFl''@;'; put 'put ''LmNvbCsxO2ZbMV0rbnQ8MD9mWzFdKz1CZTpmWzFdLT1CZT9udDowfXJldHVybiB0aGlzLnVwZGF0ZUN1cnJlbnRGaWxsQ2FjaGUoe2Jhc2VBcmVhOmwsZHJhZ0RpcmVjdGlvbjpkLGZvdW5kTWVyZ2VkQ2VsbHM6aCxmaWxsU2l6ZTp2LGRyYWdBcmVhOmYsY3ljbGVMZW5ndGg6YmV9KSxmfXVw''@;'; put 'put ''ZGF0ZUN1cnJlbnRGaWxsQ2FjaGUobCl7dGhpcy5jdXJyZW50RmlsbERhdGF8fCh0aGlzLmN1cnJlbnRGaWxsRGF0YT17fSkseHUodGhpcy5jdXJyZW50RmlsbERhdGEsbCl9Z2V0QXV0b2ZpbGxTaXplKGwsYSxkKXtjb25zdFtoLGYsdixNXT1sLFtELFosbmUsY2VdPWE7c3dpdGNoKGQpe2Nh''@;'; put 'put ''c2UidXAiOnJldHVybiBoLUQ7Y2FzZSJkb3duIjpyZXR1cm4gbmUtdjtjYXNlImxlZnQiOnJldHVybiBmLVo7Y2FzZSJyaWdodCI6cmV0dXJuIGNlLU07ZGVmYXVsdDpyZXR1cm4gbnVsbH19Z2V0RHJhZ0FyZWEobCxhLGQpe2NvbnN0W2gsZix2LE1dPWwsW0QsWixuZSxjZV09YTtzd2l0Y2go''@;'; put 'put ''ZCl7Y2FzZSJ1cCI6cmV0dXJuW0QsWixoLTEsTV07Y2FzZSJkb3duIjp7Y29uc3QgYmU9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KG5lLE0pO3JldHVyblt2KzEsZixuZSsoYmU/YmUucm93c3Bhbi0xOjApLE1dfWNhc2UibGVmdCI6cmV0dXJuW0QsWix2LGYtMV07Y2FzZSJyaWdo''@;'; put 'put ''dCI6e2NvbnN0IGJlPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChuZSxNKTtyZXR1cm5baCxNKyhiZT9iZS5jb2xzcGFuLTE6MCksbmUsY2VdfWRlZmF1bHQ6cmV0dXJuIG51bGx9fWdldEZhcnRoZXN0Q29sbGVjdGlvbihsLGEsZCxoKXtjb25zdFtmLHYsTSxEXT1sLFo9WyJ1cCIs''@;'; put 'put ''ImRvd24iXS5pbmRleE9mKGQpPi0xLG5lPVo/TTpELGNlPVo/Zjp2LGJlPXRoaXMuZ2V0QXV0b2ZpbGxTaXplKGwsYSxkKSxFZT1aP00tZisxOkQtdisxLHFlPWJlLU1hdGguZmxvb3IoYmUvRWUpKkVlO2xldCBudD1udWxsLGx0PW51bGwsbXQ9bnVsbDtzd2l0Y2goZCl7Y2FzZSJ1cCI6bnQ9''@;'; put 'put ''ImluY2x1ZGVzVmVydGljYWxseSIsbXQ9bmUtcWUrMTticmVhaztjYXNlImxlZnQiOm50PSJpbmNsdWRlc0hvcml6b250YWxseSIsbXQ9bmUtcWUrMTticmVhaztjYXNlImRvd24iOm50PSJpbmNsdWRlc1ZlcnRpY2FsbHkiLG10PWNlK3FlLTE7YnJlYWs7Y2FzZSJyaWdodCI6bnQ9ImluY2x1''@;'; put 'put ''ZGVzSG9yaXpvbnRhbGx5IixtdD1jZStxZS0xfXJldHVybiBZbihoLEp0PT57SnRbbnRdKG10KSYmSnQuaXNGYXJ0aGVyKGx0LGQpJiYobHQ9SnQpfSksbHR9cmVjcmVhdGVBZnRlckRhdGFQb3B1bGF0aW9uKGwpe2lmKCF0aGlzLmN1cnJlbnRGaWxsRGF0YSlyZXR1cm47Y29uc3QgYT10aGlz''@;'; put 'put ''LmdldFJhbmdlRnJvbUNoYW5nZXMobCksZD10aGlzLmN1cnJlbnRGaWxsRGF0YS5mb3VuZE1lcmdlZENlbGxzLGg9dGhpcy5jdXJyZW50RmlsbERhdGEuZHJhZ0RpcmVjdGlvbixmPShaLG5lKT0+e3N3aXRjaChoKXtjYXNlInVwIjpyZXR1cm4gWi5yb3ctbmU+PWEuZnJvbS5yb3c7Y2FzZSJk''@;'; put 'put ''b3duIjpyZXR1cm4gWi5yb3crWi5yb3dzcGFuLTErbmU8PWEudG8ucm93O2Nhc2UibGVmdCI6cmV0dXJuIFouY29sLW5lPj1hLmZyb20uY29sdW1uO2Nhc2UicmlnaHQiOnJldHVybiBaLmNvbCtaLmNvbHNwYW4tMStuZTw9YS50by5jb2x1bW47ZGVmYXVsdDpyZXR1cm4gbnVsbH19O2xldCB2''@;'; put 'put ''PTAsTT1udWxsLEQ9MTtkb3tmb3IobGV0IFo9MDtaPGQubGVuZ3RoO1orPTEpe2lmKE09ZFtaXSx2PUQqdGhpcy5jdXJyZW50RmlsbERhdGEuY3ljbGVMZW5ndGgsZihNLHYpKXN3aXRjaChoKXtjYXNlInVwIjp0aGlzLnBsdWdpbi5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uYWRkKHtyb3c6TS5y''@;'; put 'put ''b3ctdixyb3dzcGFuOk0ucm93c3Bhbixjb2w6TS5jb2wsY29sc3BhbjpNLmNvbHNwYW59LCEwKTticmVhaztjYXNlImRvd24iOnRoaXMucGx1Z2luLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5hZGQoe3JvdzpNLnJvdyt2LHJvd3NwYW46TS5yb3dzcGFuLGNvbDpNLmNvbCxjb2xzcGFuOk0uY29s''@;'; put 'put ''c3Bhbn0sITApO2JyZWFrO2Nhc2UibGVmdCI6dGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZCh7cm93Ok0ucm93LHJvd3NwYW46TS5yb3dzcGFuLGNvbDpNLmNvbC12LGNvbHNwYW46TS5jb2xzcGFufSwhMCk7YnJlYWs7Y2FzZSJyaWdodCI6dGhpcy5wbHVnaW4ubWVyZ2Vk''@;'; put 'put ''Q2VsbHNDb2xsZWN0aW9uLmFkZCh7cm93Ok0ucm93LHJvd3NwYW46TS5yb3dzcGFuLGNvbDpNLmNvbCt2LGNvbHNwYW46TS5jb2xzcGFufSwhMCl9Wj09PWQubGVuZ3RoLTEmJihEKz0xKX19d2hpbGUoZihNLHYpKTt0aGlzLmN1cnJlbnRGaWxsRGF0YT1udWxsLHRoaXMucGx1Z2luLmhvdC5y''@;'; put 'put ''ZW5kZXIoKSxkLmxlbmd0aD4wJiZ0aGlzLnBsdWdpbi5pZkNocm9tZUZvcmNlUmVwYWludCgpfWdldFJhbmdlRnJvbUNoYW5nZXMobCl7Y29uc3QgYT17bWluOm51bGwsbWF4Om51bGx9LGQ9e21pbjpudWxsLG1heDpudWxsfTtyZXR1cm4gWW4obCxoPT57Y29uc3QgZj1oWzBdLHY9dGhpcy5w''@;'; put 'put ''bHVnaW4uaG90LnByb3BUb0NvbChoWzFdKTsobnVsbD09PWEubWlufHxmPGEubWluKSYmKGEubWluPWYpLChudWxsPT09YS5tYXh8fGY+YS5tYXgpJiYoYS5tYXg9ZiksKG51bGw9PT1kLm1pbnx8djxkLm1pbikmJihkLm1pbj12KSwobnVsbD09PWQubWF4fHx2PmQubWF4KSYmKGQubWF4PXYp''@;'; put 'put ''fSkse2Zyb206e3JvdzphLm1pbixjb2x1bW46ZC5taW59LHRvOntyb3c6YS5tYXgsY29sdW1uOmQubWF4fX19ZHJhZ0FyZWFPdmVybGFwc0NvbGxlY3Rpb25zKGwsYSxkKXtjb25zdCBoPXRoaXMuZ2V0RHJhZ0FyZWEobCxhLGQpLFtmLHYsTSxEXT1oLFo9dGhpcy5wbHVnaW4uaG90Ll9jcmVh''@;'; put 'put ''dGVDZWxsQ29vcmRzKGYsdiksbmU9dGhpcy5wbHVnaW4uaG90Ll9jcmVhdGVDZWxsQ29vcmRzKE0sRCksY2U9dGhpcy5wbHVnaW4uaG90Ll9jcmVhdGVDZWxsUmFuZ2UoWixaLG5lKTtpZigwPT09dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0V2l0aGluUmFuZ2UoY2UsITApLmxlbmd0''@;'; put 'put ''aClyZXR1cm4hMTtjb25zdCBFZT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRXaXRoaW5SYW5nZShjZSwhMSk7cmV0dXJuIDA9PT1FZS5sZW5ndGh8fCgidXAiPT09ZHx8ImRvd24iPT09ZD8hRWUuZXZlcnkoQmU9PntsZXR7Y29sc3BhbjpxZX09QmU7cmV0dXJuIHFlPT09Y2UuZ2V0''@;'; put 'put ''V2lkdGgoKX0pOiFFZS5ldmVyeShCZT0+e2xldHtyb3dzcGFuOnFlfT1CZTtyZXR1cm4gcWU9PT1jZS5nZXRIZWlnaHQoKX0pKX19O2Z1bmN0aW9uIEZRKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBFZnQoYyl7dmFyIGw9ZnVuY3Rpb24gVGZ0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBj''@;'; put 'put ''fHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBh''@;'; put 'put ''IHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25m''@;'; put 'put ''aWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jb25zdCBrZnQ9Y2xhc3MgQWZ0e2NvbnN0cnVjdG9yKGwpe0ZRKHRoaXMsInBsdWdpbiIsdm9pZCAwKSxGUSh0aGlzLCJob3QiLHZvaWQgMCksRlEodGhpcywiZnVsbHlTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWUiLCJmdWxs''@;'; put 'put ''eVNlbGVjdGVkTWVyZ2VkQ2VsbCIpLHRoaXMucGx1Z2luPWwsdGhpcy5ob3Q9bC5ob3R9Z2V0U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lKGwsYSxkLGgpe2NvbnN0IGY9TWF0aC5taW4oZFswXSxkWzJdKSx2PU1hdGgubWluKGRbMV0sZFszXSksTT1NYXRoLm1heChkWzBdLGRbMl0pLEQ9''@;'; put 'put ''TWF0aC5tYXgoZFsxXSxkWzNdKTtpZih2b2lkIDA9PT1ofHwhdGhpcy5wbHVnaW4ubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmlzRmlyc3RSZW5kZXJhYmxlTWVyZ2VkQ2VsbChsLGEpKXJldHVybjtjb25zdCBuZT10aGlzLnBsdWdpbi5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGwsYSk7aWYo''@;'; put 'put ''IW5lKXJldHVybjtjb25zdCBjZT1uZS5nZXRMYXN0Um93KCksYmU9bmUuZ2V0TGFzdENvbHVtbigpO3JldHVybiBmPD1uZS5yb3cmJnY8PW5lLmNvbCYmTT49Y2UmJkQ+PWJlP2Ake3RoaXMuZnVsbHlTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWV9LSR7aH1gOnRoaXMuaXNNZXJnZUNlbGxG''@;'; put 'put ''dWxseVNlbGVjdGVkKG5lLHRoaXMucGx1Z2luLmhvdC5nZXRTZWxlY3RlZFJhbmdlKCkpP2Ake3RoaXMuZnVsbHlTZWxlY3RlZE1lcmdlZENlbGxDbGFzc05hbWV9LW11bHRpcGxlYDp2b2lkIDB9aXNNZXJnZUNlbGxGdWxseVNlbGVjdGVkKGwsYSl7Y29uc3QgZD1bXTtpZighYXx8IWwpcmV0''@;'; put 'put ''dXJuITE7Zm9yKGxldCBoPTA7aDxsLnJvd3NwYW47aCs9MSlmb3IobGV0IGY9MDtmPGwuY29sc3BhbjtmKz0xKWQucHVzaCh0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsLnJvdytoLGwuY29sK2YpKTtmb3IobGV0IGg9MDtoPGQubGVuZ3RoO2grPTEpe2NvbnN0IGY9W107Zm9yKGxldCB2''@;'; put 'put ''PTA7djxhLmxlbmd0aDt2Kz0xKWZbdl09YVt2XS5pbmNsdWRlcyhkW2hdKTtpZighZi5pbmNsdWRlcyghMCkpcmV0dXJuITF9cmV0dXJuITB9Z2V0U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lVG9SZW1vdmUoKXtjb25zdCBsPVtdO2ZvcihsZXQgYT0wO2E8PTc7YSs9MSlsLnB1c2goYCR7''@;'; put 'put ''dGhpcy5mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZX0tJHthfWApO3JldHVybiBsLnB1c2goYCR7dGhpcy5mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZX0tbXVsdGlwbGVgKSxsfX07ZnVuY3Rpb24gYUEoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIElmdChjKXt2YXIg''@;'; put 'put ''bD1mdW5jdGlvbiBSZnQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBu''@;'; put 'put ''ZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIFg1ZXtjb25zdHJ1Y3RvcihsKXthQSh0aGlzLCJkYXRhIix2b2lkIDApLGFBKHRoaXMsIm5leHQiLG51bGwpLGFBKHRoaXMsInByZXYiLG51bGwp''@;'; put 'put ''LHRoaXMuZGF0YT1sfX1jb25zdCBnSD1jbGFzcyBMZnR7Y29uc3RydWN0b3IoKXthQSh0aGlzLCJmaXJzdCIsbnVsbCksYUEodGhpcywibGFzdCIsbnVsbCl9cHVzaChsKXtjb25zdCBhPW5ldyBYNWUobCk7aWYobnVsbD09PXRoaXMuZmlyc3QpdGhpcy5maXJzdD1hLHRoaXMubGFzdD1hO2Vs''@;'; put 'put ''c2V7Y29uc3QgZD10aGlzLmxhc3Q7dGhpcy5sYXN0PWEsYS5wcmV2PWQsZC5uZXh0PWF9cmV0dXJuIGF9dW5zaGlmdChsKXtjb25zdCBhPW5ldyBYNWUobCk7aWYobnVsbD09PXRoaXMuZmlyc3QpdGhpcy5maXJzdD1hLHRoaXMubGFzdD1hO2Vsc2V7Y29uc3QgZD10aGlzLmZpcnN0O3RoaXMu''@;'; put 'put ''Zmlyc3Q9YSxhLm5leHQ9ZCxkLnByZXY9YX19aW5vcmRlcihsKXtsZXQgYT10aGlzLmZpcnN0O2Zvcig7YTspe2NvbnN0IGQ9bChhKTtpZihhPT09dGhpcy5sYXN0fHwhMD09PWQpYnJlYWs7YT1hLm5leHR9fXJlbW92ZShsKXtpZihudWxsPT09dGhpcy5maXJzdClyZXR1cm4hMTtsZXQgZCxo''@;'; put 'put ''LGE9dGhpcy5maXJzdDtmb3IoO2E7KXtpZihhLmRhdGE9PT1sKXJldHVybiBkPWEubmV4dCxoPWEucHJldixkJiYoZC5wcmV2PWgpLGgmJihoLm5leHQ9ZCksYT09PXRoaXMuZmlyc3QmJih0aGlzLmZpcnN0PWQpLGE9PT10aGlzLmxhc3QmJih0aGlzLmxhc3Q9aCksITA7YT1hLm5leHR9cmV0''@;'; put 'put ''dXJuITF9aGFzQ3ljbGUoKXtsZXQgbD10aGlzLmZpcnN0LGE9dGhpcy5maXJzdDtmb3IoOzspe2lmKG51bGw9PT1sfHwobD1sLm5leHQsbnVsbD09PWwpKXJldHVybiExO2lmKGw9bC5uZXh0LGE9YS5uZXh0LGw9PT1hKXJldHVybiEwfX1wb3AoKXtpZihudWxsPT09dGhpcy5sYXN0KXJldHVy''@;'; put 'put ''biBudWxsO2NvbnN0IGw9dGhpcy5sYXN0O3JldHVybiB0aGlzLmxhc3Q9dGhpcy5sYXN0LnByZXYsbH1zaGlmdCgpe2lmKG51bGw9PT10aGlzLmZpcnN0KXJldHVybiBudWxsO2NvbnN0IGw9dGhpcy5maXJzdDtyZXR1cm4gdGhpcy5maXJzdD10aGlzLmZpcnN0Lm5leHQsbH1yZWN1cnNpdmVS''@;'; put 'put ''ZXZlcnNlKCl7aWYoIXRoaXMuZmlyc3QpcmV0dXJuOyhmdW5jdGlvbiBsKGQsaCl7aCYmKGwoaCxoLm5leHQpLGgubmV4dD1kKX0pKHRoaXMuZmlyc3QsdGhpcy5maXJzdC5uZXh0KSx0aGlzLmZpcnN0Lm5leHQ9bnVsbDtjb25zdCBhPXRoaXMuZmlyc3Q7dGhpcy5maXJzdD10aGlzLmxhc3Qs''@;'; put 'put ''dGhpcy5sYXN0PWF9cmV2ZXJzZSgpe2lmKCF0aGlzLmZpcnN0fHwhdGhpcy5maXJzdC5uZXh0KXJldHVybjtsZXQgZCxsPXRoaXMuZmlyc3QubmV4dCxhPXRoaXMuZmlyc3Q7Zm9yKDtsOylkPWwubmV4dCxsLm5leHQ9YSxhLnByZXY9bCxhPWwsbD1kO3RoaXMuZmlyc3QubmV4dD1udWxsLHRo''@;'; put 'put ''aXMubGFzdC5wcmV2PW51bGwsZD10aGlzLmZpcnN0LHRoaXMuZmlyc3Q9YSx0aGlzLmxhc3Q9ZH19O2Z1bmN0aW9uIEg5KGMsbCxhKXtKNWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIEo1ZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXpl''@;'; put 'put ''IHRoZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gcGwoYyxsKXtyZXR1cm4gYy5nZXQobUgoYyxsKSl9ZnVuY3Rpb24gTmgoYyxsLGEpe3JldHVybiBjLnNldChtSChjLGwpLGEpLGF9ZnVuY3Rpb24gbUgoYyxsLGEpe2lmKCJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciAkcD1uZXcgV2Vha01hcCxLcD1uZXcgV2Vha01hcCxxcD1uZXcg''@;'; put 'put ''V2Vha01hcCxYcD1uZXcgV2Vha01hcCxIUT1uZXcgV2Vha01hcCx2SD1uZXcgV2Vha01hcCxiSD1uZXcgV2Vha01hcCxOUT1uZXcgV2Vha1NldDtjbGFzcyBQZnR7Y29uc3RydWN0b3IobCl7bGV0e21lcmdlZENlbGxzR2V0dGVyOmEscm93SW5kZXhNYXBwZXI6ZCxjb2x1bW5JbmRleE1hcHBl''@;'; put 'put ''cjpofT1sOyhmdW5jdGlvbiBPZnQoYyxsKXtKNWUoYyxsKSxsLmFkZChjKX0pKHRoaXMsTlEpLEg5KHRoaXMsJHAsbmV3IGdIKSxIOSh0aGlzLEtwLG5ldyBnSCksSDkodGhpcyxxcCxudWxsKSxIOSh0aGlzLFhwLG51bGwpLEg5KHRoaXMsSFEsbnVsbCksSDkodGhpcyx2SCxudWxsKSxIOSh0''@;'; put 'put ''aGlzLGJILG51bGwpLE5oKEhRLHRoaXMsYSksTmgodkgsdGhpcyxkKSxOaChiSCx0aGlzLGgpfWdldEN1cnJlbnRWZXJ0aWNhbE5vZGUoKXtyZXR1cm4gcGwoWHAsdGhpcykuZGF0YX1nZXRGaXJzdFZlcnRpY2FsTm9kZSgpe3JldHVybiBwbChLcCx0aGlzKS5maXJzdC5kYXRhfWdldE5leHRW''@;'; put 'put ''ZXJ0aWNhbE5vZGUoKXtyZXR1cm4gcGwoWHAsdGhpcykubmV4dC5kYXRhfWdldFByZXZWZXJ0aWNhbE5vZGUoKXtyZXR1cm4gcGwoWHAsdGhpcykucHJldi5kYXRhfWdldEN1cnJlbnRIb3Jpem9udGFsTm9kZSgpe3JldHVybiBwbChxcCx0aGlzKS5kYXRhfWdldEZpcnN0SG9yaXpvbnRhbE5v''@;'; put 'put ''ZGUoKXtyZXR1cm4gcGwoJHAsdGhpcykuZmlyc3QuZGF0YX1nZXROZXh0SG9yaXpvbnRhbE5vZGUoKXtyZXR1cm4gcGwocXAsdGhpcykubmV4dC5kYXRhfWdldFByZXZIb3Jpem9udGFsTm9kZSgpe3JldHVybiBwbChxcCx0aGlzKS5wcmV2LmRhdGF9c2V0UHJldk5vZGVBc0FjdGl2ZSgpe05o''@;'; put 'put ''KFhwLHRoaXMscGwoWHAsdGhpcykucHJldiksTmgocXAsdGhpcyxwbChxcCx0aGlzKS5wcmV2KX1zZXROZXh0Tm9kZUFzQWN0aXZlKCl7TmgoWHAsdGhpcyxwbChYcCx0aGlzKS5uZXh0KSxOaChxcCx0aGlzLHBsKHFwLHRoaXMpLm5leHQpfWJ1aWxkRm9jdXNPcmRlcihsKXtjb25zdCBhPWwu''@;'; put 'put ''Z2V0VG9wU3RhcnRDb3JuZXIoKSxkPWwuZ2V0Qm90dG9tRW5kQ29ybmVyKCksaD1uZXcgV2Vha1NldDtOaCgkcCx0aGlzLG5ldyBnSCk7Zm9yKGxldCB2PWEucm93O3Y8PWQucm93O3YrKylpZighcGwodkgsdGhpcykuaXNIaWRkZW4odikpZm9yKGxldCBNPWEuY29sO008PWQuY29sO00rKyl7''@;'; put 'put ''aWYocGwoYkgsdGhpcykuaXNIaWRkZW4oTSkpY29udGludWU7Y29uc3QgRD1tSChOUSx0aGlzLFE1ZSkuY2FsbCh0aGlzLGwscGwoJHAsdGhpcyksaCx2LE0pO0QmJk5oKHFwLHRoaXMsRCl9cGwoJHAsdGhpcykuZmlyc3QmJihwbCgkcCx0aGlzKS5maXJzdC5wcmV2PXBsKCRwLHRoaXMpLmxh''@;'; put 'put ''c3QscGwoJHAsdGhpcykubGFzdC5uZXh0PXBsKCRwLHRoaXMpLmZpcnN0KTtjb25zdCBmPW5ldyBXZWFrU2V0O05oKEtwLHRoaXMsbmV3IGdIKTtmb3IobGV0IHY9YS5jb2w7djw9ZC5jb2w7disrKWlmKCFwbChiSCx0aGlzKS5pc0hpZGRlbih2KSlmb3IobGV0IE09YS5yb3c7TTw9ZC5yb3c7''@;'; put 'put ''TSsrKXtpZihwbCh2SCx0aGlzKS5pc0hpZGRlbihNKSljb250aW51ZTtjb25zdCBEPW1IKE5RLHRoaXMsUTVlKS5jYWxsKHRoaXMsbCxwbChLcCx0aGlzKSxmLE0sdik7RCYmTmgoWHAsdGhpcyxEKX1wbChLcCx0aGlzKS5maXJzdCYmKHBsKEtwLHRoaXMpLmZpcnN0LnByZXY9cGwoS3AsdGhp''@;'; put 'put ''cykubGFzdCxwbChLcCx0aGlzKS5sYXN0Lm5leHQ9cGwoS3AsdGhpcykuZmlyc3QpfXNldEFjdGl2ZU5vZGUobCxhKXtyZXR1cm4gcGwoJHAsdGhpcykuaW5vcmRlcihkPT57Y29uc3R7cm93U3RhcnQ6aCxyb3dFbmQ6Zixjb2xTdGFydDp2LGNvbEVuZDpNfT1kLmRhdGE7aWYobD49aCYmbDw9''@;'; put 'put ''ZiYmYT49diYmYTw9TSlyZXR1cm4gTmgocXAsdGhpcyxkKSwhMX0pLHBsKEtwLHRoaXMpLmlub3JkZXIoZD0+e2NvbnN0e3Jvd1N0YXJ0Omgscm93RW5kOmYsY29sU3RhcnQ6dixjb2xFbmQ6TX09ZC5kYXRhO2lmKGw+PWgmJmw8PWYmJmE+PXYmJmE8PU0pcmV0dXJuIE5oKFhwLHRoaXMsZCks''@;'; put 'put ''ITF9KSx0aGlzfX1mdW5jdGlvbiBRNWUoYyxsLGEsZCxoKXtjb25zdCBmPWMuZ2V0VG9wU3RhcnRDb3JuZXIoKSx2PWMuZ2V0Qm90dG9tRW5kQ29ybmVyKCksTT1jLmhpZ2hsaWdodC5jbG9uZSgpLm5vcm1hbGl6ZSgpLEQ9cGwoSFEsdGhpcykuY2FsbCh0aGlzLGQsaCk7aWYoRCYmYS5oYXMo''@;'; put 'put ''RCkpcmV0dXJuIG51bGw7Y29uc3QgWj17Y29sU3RhcnQ6aCxjb2xFbmQ6aCxyb3dTdGFydDpkLHJvd0VuZDpkfTtpZihEKXtpZihhLmFkZChEKSxELnJvdzxmLnJvd3x8RC5yb3crRC5yb3dzcGFuLTE+di5yb3d8fEQuY29sPGYuY29sfHxELmNvbCtELmNvbHNwYW4tMT52LmNvbClyZXR1cm4g''@;'; put 'put ''bnVsbDtaLmNvbFN0YXJ0PUQuY29sLFouY29sRW5kPUQuY29sK0QuY29sc3Bhbi0xLFoucm93U3RhcnQ9RC5yb3csWi5yb3dFbmQ9RC5yb3crRC5yb3dzcGFuLTF9Y29uc3QgbmU9bC5wdXNoKFopO3JldHVybiBkPT09TS5yb3cmJmg9PT1NLmNvbHx8RCYmTS5yb3c+PUQucm93JiZNLnJvdzw9''@;'; put 'put ''RC5yb3crRC5yb3dzcGFuLTEmJk0uY29sPj1ELmNvbCYmTS5jb2w8PUQuY29sK0QuY29sc3Bhbi0xP25lOm51bGx9ZnVuY3Rpb24geUgoYyxsLGEpe2VtZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gZW1lKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGlu''@;'; put 'put ''aXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBWUShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gTmZ0KGMpe3ZhciBsPWZ1bmN0aW9uIFZmdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9''@;'; put 'put ''Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9''@;'; put 'put ''cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxl''@;'; put 'put ''OiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gc0EoYyxsLGEpe3JldHVybiBjLnNldChnbChjLGwpLGEpLGF9ZnVuY3Rpb24gdGMoYyxsKXtyZXR1cm4gYy5nZXQoZ2woYyxsKSl9ZnVuY3Rpb24gZ2woYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBh''@;'; put 'put ''cmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfUFvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVNZXJnZUNlbGxzIiksQW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIo''@;'; put 'put ''ImFmdGVyTWVyZ2VDZWxscyIpLEFvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJiZWZvcmVVbm1lcmdlQ2VsbHMiKSxBby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYWZ0ZXJVbm1lcmdlQ2VsbHMiKTtjb25zdCBCUT0ibWVyZ2VDZWxscyIsdG1lPUJRO3ZhciBZMj1uZXcgV2Vha01hcCxH''@;'; put 'put ''Mj1uZXcgV2Vha01hcCxKcD1uZXcgV2Vha01hcCxubWU9bmV3IFdlYWtNYXAsVGw9bmV3IFdlYWtTZXQ7Y2xhc3MgamZ0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIEhmdChjLGwpe2VtZShjLGwpLGwuYWRkKGMpfSh0aGlzLFRsKSxWUSh0''@;'; put 'put ''aGlzLCJtZXJnZWRDZWxsc0NvbGxlY3Rpb24iLG51bGwpLFZRKHRoaXMsImF1dG9maWxsQ2FsY3VsYXRpb25zIixudWxsKSxWUSh0aGlzLCJzZWxlY3Rpb25DYWxjdWxhdGlvbnMiLG51bGwpLHlIKHRoaXMsWTIsbnVsbCkseUgodGhpcyxHMix7cm93OjAsY29sOjB9KSx5SCh0aGlzLEpwLG5l''@;'; put 'put ''dyBQZnQoe21lcmdlZENlbGxzR2V0dGVyOihsLGEpPT50aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQobCxhKSxyb3dJbmRleE1hcHBlcjp0aGlzLmhvdC5yb3dJbmRleE1hcHBlcixjb2x1bW5JbmRleE1hcHBlcjp0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcn0pKSx5SCh0aGlzLG5t''@;'; put 'put ''ZSxmdW5jdGlvbiBGZnQoYyl7Y29uc3R7aG90Omx9PWMse3Jvd0luZGV4TWFwcGVyOmEsY29sdW1uSW5kZXhNYXBwZXI6ZH09bDtyZXR1cm57YmVmb3JlOmZ1bmN0aW9uIGgoKXt9LGFmdGVyOmZ1bmN0aW9uIGYodixNLEQpe2NvbnN0IFo9Yy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KE0s''@;'; put 'put ''RCk7aWYoIUthKFopKXJldHVybiB2LnJlbW92ZUF0dHJpYnV0ZSgicm93c3BhbiIpLHYucmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIiksdm9pZCh2LnN0eWxlLmRpc3BsYXk9IiIpO2NvbnN0e3JvdzpuZSxjb2w6Y2UsY29sc3BhbjpiZSxyb3dzcGFuOkVlfT1aLFtCZSxxZV09Yy50cmFuc2xh''@;'; put 'put ''dGVNZXJnZWRDZWxsVG9SZW5kZXJhYmxlKG5lLEVlLGNlLGJlKSxudD1jLmdldFNldHRpbmcoInZpcnR1YWxpemVkIiksSnQ9QmUtYS5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KE0pKzEseW49cWUtZC5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KEQpKzE7bGV0IENuPWEuZ2V0''@;'; put 'put ''TmVhcmVzdE5vdEhpZGRlbkluZGV4KG5lLDEpLHRuPWQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGNlLDEpO2lmKG50KXtjb25zdCB5aT1sLnZpZXcuZ2V0QWN0aXZlT3ZlcmxheU5hbWUoKTtbInRvcCIsInRvcF9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVkZXMoeWkpfHwoQ249TWF0''@;'; put 'put ''aC5tYXgoQ24sbC5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZVJvdygpKSksWyJpbmxpbmVfc3RhcnQiLCJ0b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciIsImJvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVyIl0uaW5jbHVkZXMoeWkpfHwodG49TWF0aC5tYXgodG4sbC5nZXRGaXJzdFJlbmRlcmVkVmlz''@;'; put 'put ''aWJsZUNvbHVtbigpKSl9Y29uc3QgeG49TWF0aC5taW4oRWUsSnQpLFFuPU1hdGgubWluKGJlLHluKTtDbj09PU0mJnRuPT09RD8odi5zZXRBdHRyaWJ1dGUoInJvd3NwYW4iLHhuKSx2LnNldEF0dHJpYnV0ZSgiY29sc3BhbiIsUW4pKToodi5yZW1vdmVBdHRyaWJ1dGUoInJvd3NwYW4iKSx2''@;'; put 'put ''LnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLHYuc3R5bGUuZGlzcGxheT0ibm9uZSIpfX19KHRoaXMpKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gQlF9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMTUwfXN0YXRpYyBnZXQgREVGQVVMVF9TRVRUSU5HUygp''@;'; put 'put ''e3JldHVybntbcjRlXToiY2VsbHMiLHZpcnR1YWxpemVkOiExLGNlbGxzOltdfX1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbQlFdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb249bmV3''@;'; put 'put ''IHdmdCh0aGlzKSx0aGlzLmF1dG9maWxsQ2FsY3VsYXRpb25zPW5ldyB4ZnQodGhpcyksdGhpcy5zZWxlY3Rpb25DYWxjdWxhdGlvbnM9bmV3IGtmdCh0aGlzKSx0aGlzLmFkZEhvb2soImFmdGVySW5pdCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJh''@;'; put 'put ''eShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gZ2woVGwsbCx6ZnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5VHJhbnNmb3JtRm9jdXMiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8''@;'; put 'put ''YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGdsKFRsLGwsWmZ0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVRyYW5zZm9ybVN0YXJ0IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09''@;'; put 'put ''YXJndW1lbnRzW2hdO3JldHVybiBnbChUbCxsLFdmdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlUcmFuc2Zvcm1FbmQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07''@;'; put 'put ''cmV0dXJuIGdsKFRsLGwsWWZ0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVNlbGVjdGlvbkhpZ2hsaWdodFNldCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1''@;'; put 'put ''cm4gZ2woVGwsbCxHZnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gZ2woVGwsbCxp''@;'; put 'put ''bWUpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlU2V0UmFuZ2VTdGFydE9ubHkiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGdsKFRsLGwsaW1lKS5jYWxs''@;'; put 'put ''KGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVNlbGVjdGlvbkZvY3VzU2V0IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBnbChUbCxsLEtmdCkuY2FsbChsLC4uLmQp''@;'; put 'put ''fSksdGhpcy5hZGRIb29rKCJhZnRlclNlbGVjdGlvbkZvY3VzU2V0IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBnbChUbCxsLHFmdCkuY2FsbChsLC4uLmQpfSksdGhpcy5h''@;'; put 'put ''ZGRIb29rKCJhZnRlclNlbGVjdGlvbkVuZCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gZ2woVGwsbCxYZnQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5''@;'; put 'put ''R2V0Q2VsbENvb3JkcyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gZ2woVGwsbCxybWUpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5R2V0Q29vcmRzRWxl''@;'; put 'put ''bWVudCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gZ2woVGwsbCxybWUpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJJc011bHRpcGxlU2VsZWN0aW9uIixm''@;'; put 'put ''dW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBnbChUbCxsLFVmdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbmRlcmVyIixmdW5jdGlvbigpe3JldHVybiB0''@;'; put 'put ''YyhubWUsbCkuYWZ0ZXIoLi4uYXJndW1lbnRzKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDb250ZXh0TWVudURlZmF1bHRPcHRpb25zIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVy''@;'; put 'put ''biBnbChUbCxsLCRmdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckdldENlbGxNZXRhIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBnbChUbCxsLEpmdCku''@;'; put 'put ''Y2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclZpZXdwb3J0Um93Q2FsY3VsYXRvck92ZXJyaWRlIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBnbChUbCxsLFFm''@;'; put 'put ''dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclZpZXdwb3J0Q29sdW1uQ2FsY3VsYXRvck92ZXJyaWRlIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBnbChU''@;'; put 'put ''bCxsLGUzdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlBdXRvZmlsbFJhbmdlIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBnbChUbCxsLHQzdCkuY2Fs''@;'; put 'put ''bChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckNyZWF0ZUNvbCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gZ2woVGwsbCxuM3QpLmNhbGwobCwuLi5kKX0pLHRoaXMu''@;'; put 'put ''YWRkSG9vaygiYWZ0ZXJSZW1vdmVDb2wiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGdsKFRsLGwscjN0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQ3Jl''@;'; put 'put ''YXRlUm93IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBnbChUbCxsLGkzdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsZnVuY3Rpb24o''@;'; put 'put ''KXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gZ2woVGwsbCxvM3QpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDaGFuZ2UiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGdsKFRsLGwsYTN0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZURyYXdCb3JkZXJzIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3''@;'; put 'put ''IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBnbChUbCxsLHMzdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckRyYXdTZWxlY3Rpb24iLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0w''@;'; put 'put ''O2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIGdsKFRsLGwsbDN0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJlbW92ZUNlbGxDbGFzc05hbWVzIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7''@;'; put 'put ''aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBnbChUbCxsLGMzdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJiZWZvcmVCZWdpbkVkaXRpbmciLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1''@;'; put 'put ''bWVudHNbaF07cmV0dXJuIGdsKFRsLGwsdTN0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soIm1vZGlmeVJvd0hlaWdodEJ5T3ZlcmxheU5hbWUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVu''@;'; put 'put ''dHNbaF07cmV0dXJuIGdsKFRsLGwsZDN0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVVuZG9TdGFja0NoYW5nZSIsKGEsZCk9PntpZigiTWVyZ2VDZWxscyI9PT1kKXJldHVybiExfSksdGhpcy5yZWdpc3RlclNob3J0Y3V0cygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1k''@;'; put 'put ''aXNhYmxlUGx1Z2luKCl7dGhpcy5jbGVhckNvbGxlY3Rpb25zKCksdGhpcy51bnJlZ2lzdGVyU2hvcnRjdXRzKCksdGhpcy5ob3QucmVuZGVyKCksc3VwZXIuZGlzYWJsZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksdGhp''@;'; put 'put ''cy5nZW5lcmF0ZUZyb21TZXR0aW5ncygpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWlmQ2hyb21lRm9yY2VSZXBhaW50KCl7aWYoIV8kKCkpcmV0dXJuO2NvbnN0IGw9W107bGV0IGE9W107dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHMuZm9yRWFjaChkPT57Y29uc3R7cm93''@;'; put 'put ''Omgscm93c3BhbjpmfT1kO2ZvcihsZXQgdj1oKzE7djxoK2Y7disrKWEucHVzaCh2KX0pLGE9Wy4uLm5ldyBTZXQoYSldLGEuZm9yRWFjaChkPT57Y29uc3QgaD10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KGQpO3RoaXMuaG90LnZpZXcuX3d0''@;'; put 'put ''Lnd0T3ZlcmxheXMuZ2V0T3ZlcmxheXMoITApLm1hcChmPT4ibWFzdGVyIj09PWY/Lm5hbWU/ZjpmLmNsb25lLnd0VGFibGUpLmZvckVhY2goZj0+e2NvbnN0IHY9Zi5nZXRSb3coaCk7diYmKHYuc3R5bGUuYmFja2dyb3VuZD12RSh2LCJiYWNrZ3JvdW5kQ29sb3IiKS5yZXBsYWNlKCIpIiwi''@;'; put 'put ''LCAwLjk5KSIpLGwucHVzaCh2KSl9KX0pLHRoaXMuaG90Ll9yZWdpc3RlclRpbWVvdXQoKCk9PntsLmZvckVhY2goZD0+e2Quc3R5bGUuYmFja2dyb3VuZD12RShkLCJiYWNrZ3JvdW5kQ29sb3IiKS5yZXBsYWNlKCIsIDAuOTkpIiwiKSIpfSl9LDEpfXZhbGlkYXRlU2V0dGluZyhsKXtyZXR1''@;'; put 'put ''cm4hKCFsfHwoR3AuY29udGFpbnNOZWdhdGl2ZVZhbHVlcyhsKT8odGwoR3AuTkVHQVRJVkVfVkFMVUVTX1dBUk5JTkcobCkpLDEpOkdwLmlzT3V0T2ZCb3VuZHMobCx0aGlzLmhvdC5jb3VudFJvd3MoKSx0aGlzLmhvdC5jb3VudENvbHMoKSk/KHRsKEdwLklTX09VVF9PRl9CT1VORFNfV0FS''@;'; put 'put ''TklORyhsKSksMSk6R3AuaXNTaW5nbGVDZWxsKGwpPyh0bChHcC5JU19TSU5HTEVfQ0VMTChsKSksMSk6R3AuY29udGFpbnNaZXJvU3BhbihsKSYmKHRsKEdwLlpFUk9fU1BBTl9XQVJOSU5HKGwpKSwxKSkpfWdlbmVyYXRlRnJvbVNldHRpbmdzKCl7Y29uc3QgbD10aGlzLmdldFNldHRpbmco''@;'; put 'put ''ImNlbGxzIikuZmlsdGVyKGg9PnRoaXMudmFsaWRhdGVTZXR0aW5nKGgpKSxhPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmZpbHRlck92ZXJsYXBwaW5nTWVyZ2VDZWxscyhsKSxkPVtdO2EuZm9yRWFjaChoPT57Y29uc3R7cm93OmYsY29sOnYscm93c3BhbjpNLGNvbHNwYW46RH09aCxa''@;'; put 'put ''PXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGYsdiksbmU9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZitNLTEsditELTEpLGNlPXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UoWixaLG5lKTt0aGlzLm1lcmdlUmFuZ2UoY2UsITAsITApO2ZvcihsZXQgYmU9ZjtiZTxmK007YmUrKylm''@;'; put 'put ''b3IobGV0IEVlPXY7RWU8ditEO0VlKyspKGJlIT09Znx8RWUhPT12KSYmZC5wdXNoKFtiZSxFZSxudWxsXSl9KSwwIT09ZC5sZW5ndGgmJnRoaXMuaG90LnNldERhdGFBdENlbGwoZCx2b2lkIDAsdm9pZCAwLHRoaXMucGx1Z2luTmFtZSl9Y2xlYXJDb2xsZWN0aW9ucygpe3RoaXMubWVyZ2Vk''@;'; put 'put ''Q2VsbHNDb2xsZWN0aW9uLmNsZWFyKCl9Y2FuTWVyZ2VSYW5nZShsKXtyZXR1cm4hIShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdKXx8dGhpcy52YWxpZGF0ZVNldHRpbmcobCl9bWVyZ2VTZWxlY3Rpb24oKXtsZXQgbD1hcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighbClyZXR1cm47bC5zZXREaXJlY3Rpb24odGhpcy5ob3QuaXNSdGwoKT8iTkUtU1ciOiJOVy1TRSIpO2NvbnN0e2Zyb206YSx0bzpkfT1sO3RoaXMu''@;'; put 'put ''dW5tZXJnZVJhbmdlKGwsITApLHRoaXMubWVyZ2VSYW5nZShsKSx0aGlzLmhvdC5zZWxlY3RDZWxsKGEucm93LGEuY29sLGQucm93LGQuY29sLCExKX11bm1lcmdlU2VsZWN0aW9uKCl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBd''@;'; put 'put ''OnRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWwpcmV0dXJuO2NvbnN0e2Zyb206YSx0bzpkfT1sO3RoaXMudW5tZXJnZVJhbmdlKGwsITApLHRoaXMuaG90LnNlbGVjdENlbGwoYS5yb3csYS5jb2wsZC5yb3csZC5jb2wsITEpfW1lcmdlUmFuZ2UobCl7bGV0IGE9YXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3QgaD1sLmdldFRvcFN0YXJ0Q29ybmVyKCksZj1sLmdldEJvdHRvbUVuZENvcm5lcigpLHY9''@;'; put 'put ''e3JvdzpoLnJvdyxjb2w6aC5jb2wscm93c3BhbjpmLnJvdy1oLnJvdysxLGNvbHNwYW46Zi5jb2wtaC5jb2wrMX0sTT1bXTtsZXQgRD1udWxsO3JldHVybiEhdGhpcy5jYW5NZXJnZVJhbmdlKHYsYSkmJih0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlTWVyZ2VDZWxscyIsbCxhKSwkbygwLHYu''@;'; put 'put ''cm93c3Bhbi0xLG5lPT57JG8oMCx2LmNvbHNwYW4tMSxjZT0+e2xldCBiZT1udWxsO01bbmVdfHwoTVtuZV09W10pLDA9PT1uZSYmMD09PWNlP2JlPXRoaXMuaG90LmdldFNvdXJjZURhdGFBdENlbGwodGhpcy5ob3QudG9QaHlzaWNhbFJvdyh2LnJvdyksdGhpcy5ob3QudG9QaHlzaWNhbENv''@;'; put 'put ''bHVtbih2LmNvbCkpOnRoaXMuaG90LnNldENlbGxNZXRhKHYucm93K25lLHYuY29sK2NlLCJoaWRkZW4iLCEwKSxNW25lXVtjZV09YmV9KX0pLHRoaXMuaG90LnNldENlbGxNZXRhKHYucm93LHYuY29sLCJzcGFubmVkIiwhMCksIXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmFkZCh2LGEp''@;'; put 'put ''fHwoZD9EPVt2LnJvdyx2LmNvbCxNXTp0aGlzLmhvdC5wb3B1bGF0ZUZyb21BcnJheSh2LnJvdyx2LmNvbCxNLHZvaWQgMCx2b2lkIDAsdGhpcy5wbHVnaW5OYW1lKSxhfHx0aGlzLmlmQ2hyb21lRm9yY2VSZXBhaW50KCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyTWVyZ2VDZWxscyIsbCx2''@;'; put 'put ''LGEpLEQpKX11bm1lcmdlUmFuZ2UobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtjb25zdCBkPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldFdpdGhpblJhbmdlKGwpOzAhPT1kLmxlbmd0aCYmKHRoaXMuaG90LnJ1''@;'; put 'put ''bkhvb2tzKCJiZWZvcmVVbm1lcmdlQ2VsbHMiLGwsYSksWW4oZCxoPT57dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ucmVtb3ZlKGgucm93LGguY29sKSwkbygwLGgucm93c3Bhbi0xLGY9PnskbygwLGguY29sc3Bhbi0xLHY9Pnt0aGlzLmhvdC5yZW1vdmVDZWxsTWV0YShoLnJvdytmLGgu''@;'; put 'put ''Y29sK3YsImhpZGRlbiIpLHRoaXMuaG90LnJlbW92ZUNlbGxNZXRhKGgucm93K2YsaC5jb2wrdiwiY29weWFibGUiKX0pfSksdGhpcy5ob3QucmVtb3ZlQ2VsbE1ldGEoaC5yb3csaC5jb2wsInNwYW5uZWQiKX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclVubWVyZ2VDZWxscyIsbCxhKSx0''@;'; put 'put ''aGlzLmhvdC5yZW5kZXIoKSl9dG9nZ2xlTWVyZ2UobCl7Y29uc3QgYT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQobC5mcm9tLnJvdyxsLmZyb20uY29sKTthLnJvdz09PWwuZnJvbS5yb3cmJmEuY29sPT09bC5mcm9tLmNvbCYmYS5yb3crYS5yb3dzcGFuLTE9PT1sLnRvLnJvdyYm''@;'; put 'put ''YS5jb2wrYS5jb2xzcGFuLTE9PT1sLnRvLmNvbD90aGlzLnVubWVyZ2VSYW5nZShsKTp0aGlzLm1lcmdlU2VsZWN0aW9uKGwpfW1lcmdlKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxhKSx2PXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGQsaCk7dGhp''@;'; put 'put ''cy5tZXJnZVJhbmdlKHRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UoZixmLHYpKX11bm1lcmdlKGwsYSxkLGgpe2NvbnN0IGY9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxhKSx2PXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGQsaCk7dGhpcy51bm1lcmdlUmFuZ2UodGhpcy5ob3Qu''@;'; put 'put ''X2NyZWF0ZUNlbGxSYW5nZShmLGYsdikpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLmFkZFNob3J0Y3V0KHtrZXlzOltbIkNvbnRyb2wiLCJtIl1dLGNhbGxiYWNrOigpPT57Y29uc3QgZD10aGlzLmhvdC5nZXRT''@;'; put 'put ''ZWxlY3RlZFJhbmdlTGFzdCgpO2QmJiFkLmlzU2luZ2xlSGVhZGVyKCkmJih0aGlzLnRvZ2dsZU1lcmdlKGQpLHRoaXMuaG90LnJlbmRlcigpKX0scnVuT25seUlmOmQ9PiFkLmFsdEtleSxncm91cDp0bWV9KX11bnJlZ2lzdGVyU2hvcnRjdXRzKCl7dGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5h''@;'; put 'put ''Z2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAodG1lKX1tb2RpZnlWaWV3cG9ydFJvd1N0YXJ0KGwsYSl7Y29uc3QgZD10aGlzLmhvdC5yb3dJbmRleE1hcHBlcixoPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChsLnN0YXJ0Um93KTtmb3IobGV0''@;'; put 'put ''IGY9MDtmPGE7Zis9MSl7Y29uc3Qgdj10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoaCxmKTtpZihLYSh2KSl7Y29uc3QgTT1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodi5yb3csMSkpO2lmKE08bC5zdGFydFJvdylyZXR1''@;'; put 'put ''cm4gbC5zdGFydFJvdz1NLHZvaWQgdGhpcy5tb2RpZnlWaWV3cG9ydFJvd1N0YXJ0KGwsYSl9fX1tb2RpZnlWaWV3cG9ydFJvd0VuZChsLGEpe2NvbnN0IGQ9dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIsaD1kLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgobC5lbmRSb3cpO2ZvcihsZXQg''@;'; put 'put ''Zj0wO2Y8YTtmKz0xKXtjb25zdCB2PXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChoLGYpO2lmKEthKHYpKXtjb25zdCBEPWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChkLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleCh2LnJvdyt2LnJvd3NwYW4tMSwtMSkpO2lmKEQ+bC5l''@;'; put 'put ''bmRSb3cpcmV0dXJuIGwuZW5kUm93PUQsdm9pZCB0aGlzLm1vZGlmeVZpZXdwb3J0Um93RW5kKGwsYSl9fX1tb2RpZnlWaWV3cG9ydENvbHVtblN0YXJ0KGwsYSl7Y29uc3QgZD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlcixoPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChsLnN0''@;'; put 'put ''YXJ0Q29sdW1uKTtmb3IobGV0IGY9MDtmPGE7Zis9MSl7Y29uc3Qgdj10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXQoZixoKTtpZihLYSh2KSl7Y29uc3QgTT1kLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgoZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgodi5jb2wsMSkpO2lm''@;'; put 'put ''KE08bC5zdGFydENvbHVtbilyZXR1cm4gbC5zdGFydENvbHVtbj1NLHZvaWQgdGhpcy5tb2RpZnlWaWV3cG9ydENvbHVtblN0YXJ0KGwsYSl9fX1tb2RpZnlWaWV3cG9ydENvbHVtbkVuZChsLGEpe2NvbnN0IGQ9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIsaD1kLmdldFZpc3VhbEZyb21S''@;'; put 'put ''ZW5kZXJhYmxlSW5kZXgobC5lbmRDb2x1bW4pO2ZvcihsZXQgZj0wO2Y8YTtmKz0xKXtjb25zdCB2PXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChmLGgpO2lmKEthKHYpKXtjb25zdCBEPWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChkLmdldE5lYXJlc3ROb3RIaWRkZW5J''@;'; put 'put ''bmRleCh2LmNvbCt2LmNvbHNwYW4tMSwtMSkpO2lmKEQ+bC5lbmRDb2x1bW4pcmV0dXJuIGwuZW5kQ29sdW1uPUQsdm9pZCB0aGlzLm1vZGlmeVZpZXdwb3J0Q29sdW1uRW5kKGwsYSl9fX10cmFuc2xhdGVNZXJnZWRDZWxsVG9SZW5kZXJhYmxlKGwsYSxkLGgpe2NvbnN0e3Jvd0luZGV4TWFw''@;'; put 'put ''cGVyOmYsY29sdW1uSW5kZXhNYXBwZXI6dn09dGhpcy5ob3Q7bGV0IE0sRDtyZXR1cm4gTT0wPT09YT9mLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsLDEpOmYuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGwrYS0xLC0xKSxEPTA9PT1oP3YuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGQs''@;'; put 'put ''MSk6di5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoZCtoLTEsLTEpLFtsPj0wP2YuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChNKTpsLGQ+PTA/di5nZXRSZW5kZXJhYmxlRnJvbVZpc3VhbEluZGV4KEQpOmRdfX1mdW5jdGlvbiB6ZnQoKXt0aGlzLmdlbmVyYXRlRnJvbVNldHRpbmdz''@;'; put 'put ''KCksdGhpcy5ob3QucmVuZGVyKCl9ZnVuY3Rpb24gVWZ0KGMpe2lmKGMpe2NvbnN0IGw9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHMsYT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGQ9YS5nZXRUb3BTdGFydENvcm5lcigpLGg9YS5nZXRCb3R0b21FbmRD''@;'; put 'put ''b3JuZXIoKTtmb3IobGV0IGY9MDtmPGwubGVuZ3RoO2YrPTEpaWYoZC5yb3c9PT1sW2ZdLnJvdyYmZC5jb2w9PT1sW2ZdLmNvbCYmaC5yb3c9PT1sW2ZdLnJvdytsW2ZdLnJvd3NwYW4tMSYmaC5jb2w9PT1sW2ZdLmNvbCtsW2ZdLmNvbHNwYW4tMSlyZXR1cm4hMX1yZXR1cm4gY31mdW5jdGlv''@;'; put 'put ''biBaZnQoYyl7dGMoRzIsdGhpcykucm93PWMucm93LHRjKEcyLHRoaXMpLmNvbD1jLmNvbH1mdW5jdGlvbiBXZnQoYyl7Y29uc3QgbD10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLHtoaWdobGlnaHQ6YX09bCx7Y29sdW1uSW5kZXhNYXBwZXI6ZCxyb3dJbmRleE1hcHBlcjpofT10''@;'; put 'put ''aGlzLmhvdDt0YyhZMix0aGlzKSYmKG51bGwhPT1oLmdldFJlbmRlcmFibGVGcm9tVmlzdWFsSW5kZXgodGMoWTIsdGhpcykucm93KSYmKGEucm93PXRjKFkyLHRoaXMpLnJvdyksbnVsbCE9PWQuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleCh0YyhZMix0aGlzKS5jb2wpJiYoYS5jb2w9''@;'; put 'put ''dGMoWTIsdGhpcykuY29sKSxzQShZMix0aGlzLG51bGwpKTtjb25zdCBmPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChhLnJvdyxhLmNvbCk7aWYoIWYpcmV0dXJuO2NvbnN0IHY9Zi5jb2wsTT1mLmNvbCtmLmNvbHNwYW4tMTtpZihjLmNvbDwwKXtjb25zdCBjZT1kLmdldE5lYXJl''@;'; put 'put ''c3ROb3RIaWRkZW5JbmRleChhLmNvbD49diYmYS5jb2w8PU0/di0xOk0sLTEpO2MuY29sPW51bGw9PT1jZT8tdGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZSgwLGEuY29sKTotTWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5S''@;'; put 'put ''YW5nZShjZSxhLmNvbCktMSwxKX1lbHNlIGlmKGMuY29sPjApe2NvbnN0IGNlPWQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KGEuY29sPj12JiZhLmNvbDw9TT9NKzE6diwxKTtjLmNvbD1udWxsPT09Y2U/dGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShhLmNv''@;'; put 'put ''bCx0aGlzLmhvdC5jb3VudENvbHMoKSk6TWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShhLmNvbCxjZSktMSwxKX1jb25zdCBEPWYucm93LFo9Zi5yb3crZi5yb3dzcGFuLTE7aWYoYy5yb3c8MCl7Y29uc3QgY2U9aC5nZXROZWFyZXN0Tm90SGlk''@;'; put 'put ''ZGVuSW5kZXgoYS5yb3c+PUQmJmEucm93PD1aP0QtMTpaLC0xKTtjLnJvdz1udWxsPT09Y2U/LXRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoMCxhLnJvdyk6LU1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoY2UsYS5yb3cp''@;'; put 'put ''LTEsMSl9ZWxzZSBpZihjLnJvdz4wKXtjb25zdCBjZT1oLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChhLnJvdz49RCYmYS5yb3c8PVo/WisxOkQsMSk7Yy5yb3c9bnVsbD09PWNlP3RoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoYS5yb3csdGhpcy5ob3QuY291bnRS''@;'; put 'put ''b3dzKCkpOk1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxlUm93c0luUmFuZ2UoYS5yb3csY2UpLTEsMSl9fWZ1bmN0aW9uIFlmdChjKXtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCksYT1sLmNsb25lKCkse3RvOmR9PWwse2NvbHVtbkluZGV4TWFw''@;'; put 'put ''cGVyOmgscm93SW5kZXhNYXBwZXI6Zn09dGhpcy5ob3Qsdj0oTSxEKT0+e2EuZXhwYW5kKHRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKE0sRCkpO2ZvcihsZXQgWj0wO1o8dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24ubWVyZ2VkQ2VsbHMubGVuZ3RoO1orPTEpYS5leHBhbmRCeVJhbmdl''@;'; put 'put ''KHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzW1pdLmdldFJhbmdlKCkpfTtpZihjLmNvbDwwKXtsZXQgTT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRTdGFydE1vc3RDb2x1bW5JbmRleChsLGQuY29sKStjLmNvbDt2KGQucm93LE0pLCJFLVciPT09bC5nZXRI''@;'; put 'put ''b3Jpem9udGFsRGlyZWN0aW9uKCkmJiJFLVciPT09YS5nZXRIb3Jpem9udGFsRGlyZWN0aW9uKCkmJihNPWEuZ2V0VG9wU3RhcnRDb3JuZXIoKS5jb2wpO2NvbnN0IEQ9aC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoTSwxKTtudWxsIT09RCYmKGMuY29sPS1NYXRoLm1heCh0aGlzLmhvdC52''@;'; put 'put ''aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKEQsZC5jb2wpLTEsMSkpfWVsc2UgaWYoYy5jb2w+MCl7bGV0IE09dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0RW5kTW9zdENvbHVtbkluZGV4KGwsZC5jb2wpK2MuY29sO3YoZC5yb3csTSksIlctRSI9PT1sLmdldEhvcml6''@;'; put 'put ''b250YWxEaXJlY3Rpb24oKSYmIlctRSI9PT1hLmdldEhvcml6b250YWxEaXJlY3Rpb24oKSYmKE09YS5nZXRCb3R0b21FbmRDb3JuZXIoKS5jb2wpO2NvbnN0IEQ9aC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoTSwtMSk7bnVsbCE9PUQmJihjLmNvbD1NYXRoLm1heCh0aGlzLmhvdC52aWV3''@;'; put 'put ''LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKGQuY29sLEQpLTEsMSkpfWlmKGMucm93PDApe2xldCBNPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldFRvcE1vc3RSb3dJbmRleChsLGQucm93KStjLnJvdzt2KE0sZC5jb2wpLCJTLU4iPT09bC5nZXRWZXJ0aWNhbERpcmVjdGlv''@;'; put 'put ''bigpJiYiUy1OIj09PWEuZ2V0VmVydGljYWxEaXJlY3Rpb24oKSYmKE09YS5nZXRUb3BTdGFydENvcm5lcigpLnJvdyk7Y29uc3QgRD1mLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChNLDEpO251bGwhPT1EJiYoYy5yb3c9LU1hdGgubWF4KHRoaXMuaG90LnZpZXcuY291bnRSZW5kZXJhYmxl''@;'; put 'put ''Um93c0luUmFuZ2UoRCxkLnJvdyktMSwxKSl9ZWxzZSBpZihjLnJvdz4wKXtsZXQgTT10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5nZXRCb3R0b21Nb3N0Um93SW5kZXgobCxkLnJvdykrYy5yb3c7dihNLGQuY29sKSwiTi1TIj09PWwuZ2V0VmVydGljYWxEaXJlY3Rpb24oKSYmIk4tUyI9''@;'; put 'put ''PT1hLmdldFZlcnRpY2FsRGlyZWN0aW9uKCkmJihNPWEuZ2V0Qm90dG9tU3RhcnRDb3JuZXIoKS5yb3cpO2NvbnN0IEQ9Zi5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoTSwtMSk7bnVsbCE9PUQmJihjLnJvdz1NYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZVJvd3NJblJh''@;'; put 'put ''bmdlKGQucm93LEQpLTEsMSkpfX1mdW5jdGlvbiBHZnQoKXtjb25zdCBjPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkse2hpZ2hsaWdodDpsfT1jO2lmKHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXx8dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2Vs''@;'; put 'put ''ZWN0ZWRCeVJvd0hlYWRlcigpKXJldHVybiB2b2lkIHNBKFkyLHRoaXMsbC5jbG9uZSgpKTtmb3IobGV0IGQ9MDtkPHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzLmxlbmd0aDtkKz0xKWMuZXhwYW5kQnlSYW5nZSh0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJn''@;'; put 'put ''ZWRDZWxsc1tkXS5nZXRSYW5nZSgpLCExKTtmb3IobGV0IGQ9MDtkPHRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLm1lcmdlZENlbGxzLmxlbmd0aDtkKz0xKWMuZXhwYW5kQnlSYW5nZSh0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5tZXJnZWRDZWxsc1tkXS5nZXRSYW5nZSgpLCExKTtj''@;'; put 'put ''b25zdCBhPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChsLnJvdyxsLmNvbCk7c0EoWTIsdGhpcyxsLmNsb25lKCkpLGEmJmwuYXNzaWduKGEpfWZ1bmN0aW9uIHJtZShjLGwsYSxkKXtpZihjPDB8fGw8MClyZXR1cm47Y29uc3QgaD10aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5n''@;'; put 'put ''ZXQoYyxsKTtpZighaClyZXR1cm47Y29uc3R7cm93OmYsY29sOnYsY29sc3BhbjpNLHJvd3NwYW46RH09aCxaPWYsbmU9dixjZT1mK0QtMSxiZT12K00tMTtpZigicmVuZGVyIj09PWQmJnRoaXMuZ2V0U2V0dGluZygidmlydHVhbGl6ZWQiKSl7Y29uc3QgRWU9dGhpcy5ob3Qudmlldy5nZXRB''@;'; put 'put ''Y3RpdmVPdmVybGF5TmFtZSgpLEJlPVsidG9wIiwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiXS5pbmNsdWRlcyhFZSk/MDp0aGlzLmhvdC5nZXRGaXJzdFJlbmRlcmVkVmlzaWJsZVJvdygpLHFlPVsiaW5saW5lX3N0YXJ0IiwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiLCJib3R0b21faW5s''@;'; put 'put ''aW5lX3N0YXJ0X2Nvcm5lciJdLmluY2x1ZGVzKEVlKT8wOnRoaXMuaG90LmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCk7cmV0dXJuW0FzKEJlLFosY2UpLEFzKHFlLG5lLGJlKSxBcyh0aGlzLmhvdC5nZXRMYXN0UmVuZGVyZWRWaXNpYmxlUm93KCksWixjZSksQXModGhpcy5ob3Qu''@;'; put 'put ''Z2V0TGFzdFJlbmRlcmVkVmlzaWJsZUNvbHVtbigpLG5lLGJlKV19cmV0dXJuW1osbmUsY2UsYmVdfWZ1bmN0aW9uICRmdChjKXtjLml0ZW1zLnB1c2goe25hbWU6Ii0tLS0tLS0tLSJ9LGZ1bmN0aW9uIERmdChjKXtyZXR1cm57a2V5OiJtZXJnZUNlbGxzIixuYW1lKCl7Y29uc3QgbD10aGlz''@;'; put 'put ''LmdldFNlbGVjdGVkTGFzdCgpO2lmKGwpe2NvbnN0IGE9Yy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGxbMF0sbFsxXSk7aWYoYS5yb3c9PT1sWzBdJiZhLmNvbD09PWxbMV0mJmEucm93K2Eucm93c3Bhbi0xPT09bFsyXSYmYS5jb2wrYS5jb2xzcGFuLTE9PT1sWzNdKXJldHVybiB0aGlz''@;'; put 'put ''LmdldFRyYW5zbGF0ZWRQaHJhc2UoUUspfXJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoSkspfSxjYWxsYmFjaygpe2NvbnN0IGw9dGhpcy5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO2lmKCFsKXJldHVybjtsLnNldERpcmVjdGlvbih0aGlzLmlzUnRsKCk/Ik5FLVNXIjoiTlctU0Ui''@;'; put 'put ''KTtjb25zdHtmcm9tOmEsdG86ZH09bDtjLnRvZ2dsZU1lcmdlKGwpLHRoaXMuc2VsZWN0Q2VsbChhLnJvdyxhLmNvbCxkLnJvdyxkLmNvbCwhMSl9LGRpc2FibGVkKCl7Y29uc3QgbD10aGlzLmdldFNlbGVjdGVkTGFzdCgpO3JldHVybiFsfHxHcC5pc1NpbmdsZUNlbGwoe3JvdzpsWzBdLGNv''@;'; put 'put ''bDpsWzFdLHJvd3NwYW46bFsyXS1sWzBdKzEsY29sc3BhbjpsWzNdLWxbMV0rMX0pfHx0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb3JuZXIoKX0saGlkZGVuOiExfX0odGhpcykpfWZ1bmN0aW9uIGltZSgpe3NBKFkyLHRoaXMsbnVsbCl9ZnVuY3Rpb24gS2Z0KCl7aWYodGMoWTIsdGhp''@;'; put 'put ''cykuaXNDZWxsKCkpcmV0dXJuO2NvbnN0IGM9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxsPWMuZ2V0VmVydGljYWxEaXJlY3Rpb24oKSxhPWMuZ2V0SG9yaXpvbnRhbERpcmVjdGlvbigpLGQ9dGMoWTIsdGhpcykuY2xvbmUoKS5ub3JtYWxpemUoKTt0YyhKcCx0aGlzKS5zZXRB''@;'; put 'put ''Y3RpdmVOb2RlKGQucm93LGQuY29sKSx0YyhHMix0aGlzKS5yb3c+MHx8dGMoRzIsdGhpcykuY29sPjA/dGMoSnAsdGhpcykuc2V0UHJldk5vZGVBc0FjdGl2ZSgpOigiRS1XIj09PWEmJnRjKEcyLHRoaXMpLmNvbDwwfHwiUy1OIj09PWwmJnRjKEcyLHRoaXMpLnJvdzwwKSYmdGMoSnAsdGhp''@;'; put 'put ''cykuc2V0TmV4dE5vZGVBc0FjdGl2ZSgpfWZ1bmN0aW9uIHFmdChjLGwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSx7Y29sdW1uSW5kZXhNYXBwZXI6ZCxyb3dJbmRleE1hcHBlcjpofT10aGlzLmhvdDtsZXQgZj1udWxsLHY9bnVsbDtpZih0YyhHMix0aGlzKS5j''@;'; put 'put ''b2w8MCl7Y29uc3R7cm93RW5kOk0sY29sRW5kOkR9PXRjKEpwLHRoaXMpLmdldFByZXZIb3Jpem9udGFsTm9kZSgpO3Y9ZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoRCwtMSksZj1oLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChNLC0xKX1lbHNlIGlmKHRjKEcyLHRoaXMpLmNvbD4wKXtj''@;'; put 'put ''b25zdHtyb3dTdGFydDpNLGNvbFN0YXJ0OkR9PXRjKEpwLHRoaXMpLmdldE5leHRIb3Jpem9udGFsTm9kZSgpO3Y9ZC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoRCwxKSxmPWguZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KE0sMSl9ZWxzZSBpZih0YyhHMix0aGlzKS5yb3c8MCl7Y29uc3R7''@;'; put 'put ''cm93RW5kOk0sY29sRW5kOkR9PXRjKEpwLHRoaXMpLmdldFByZXZWZXJ0aWNhbE5vZGUoKTt2PWQuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KEQsLTEpLGY9aC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoTSwtMSl9ZWxzZSBpZih0YyhHMix0aGlzKS5yb3c+MCl7Y29uc3R7cm93U3RhcnQ6''@;'; put 'put ''TSxjb2xTdGFydDpEfT10YyhKcCx0aGlzKS5nZXROZXh0VmVydGljYWxOb2RlKCk7dj1kLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChELDEpLGY9aC5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoTSwxKX1pZihudWxsIT09Znx8bnVsbCE9PXYpe2NvbnN0IE09dGhpcy5ob3QuX2NyZWF0ZUNl''@;'; put 'put ''bGxDb29yZHMoZix2KSxEPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChNLnJvdyxNLmNvbCksWj10aGlzLmhvdC5zZWxlY3Rpb24uaGlnaGxpZ2h0LmdldEZvY3VzKCk7Yz1NLnJvdyxsPU0uY29sLGEuaGlnaGxpZ2h0LmFzc2lnbihEP3tyb3c6dGhpcy5ob3Qucm93SW5kZXhNYXBw''@;'; put 'put ''ZXIuZ2V0TmVhcmVzdE5vdEhpZGRlbkluZGV4KEQucm93LDEpLGNvbDp0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXROZWFyZXN0Tm90SGlkZGVuSW5kZXgoRC5jb2wsMSl9Ok0pLFouY2xlYXIoKSxaLmFkZChNKS5jb21taXQoKX10YyhKcCx0aGlzKS5zZXRBY3RpdmVOb2RlKGMsbCks''@;'; put 'put ''c0EoRzIsdGhpcyx7cm93OjAsY29sOjB9KX1mdW5jdGlvbiBYZnQoKXt0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLmlzSGVhZGVyKCl8fHRjKEpwLHRoaXMpLmJ1aWxkRm9jdXNPcmRlcih0aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKX1mdW5jdGlvbiBKZnQoYyxsLGEp''@;'; put 'put ''e2NvbnN0IGQ9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0KGMsbCk7ZCYmKGQucm93IT09Y3x8ZC5jb2whPT1sP2EuY29weWFibGU9ITE6KGEucm93c3Bhbj1kLnJvd3NwYW4sYS5jb2xzcGFuPWQuY29sc3BhbikpfWZ1bmN0aW9uIFFmdChjKXtpZih0aGlzLmdldFNldHRpbmcoInZp''@;'; put 'put ''cnR1YWxpemVkIikpcmV0dXJuO2NvbnN0IGw9dGhpcy5ob3QuY291bnRDb2xzKCk7dGhpcy5tb2RpZnlWaWV3cG9ydFJvd1N0YXJ0KGMsbCksdGhpcy5tb2RpZnlWaWV3cG9ydFJvd0VuZChjLGwpfWZ1bmN0aW9uIGUzdChjKXtpZih0aGlzLmdldFNldHRpbmcoInZpcnR1YWxpemVkIikpcmV0''@;'; put 'put ''dXJuO2NvbnN0IGw9dGhpcy5ob3QuY291bnRSb3dzKCk7dGhpcy5tb2RpZnlWaWV3cG9ydENvbHVtblN0YXJ0KGMsbCksdGhpcy5tb2RpZnlWaWV3cG9ydENvbHVtbkVuZChjLGwpfWZ1bmN0aW9uIHQzdChjLGwpe2NvbnN0IGE9dGhpcy5hdXRvZmlsbENhbGN1bGF0aW9ucy5nZXREaXJlY3Rp''@;'; put 'put ''b24obCxjKTtpZih0aGlzLmF1dG9maWxsQ2FsY3VsYXRpb25zLmRyYWdBcmVhT3ZlcmxhcHNDb2xsZWN0aW9ucyhsLGMsYSkpcmV0dXJuIGw7Y29uc3QgZD10aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhsWzBdLGxbMV0pLGg9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobFsyXSxsWzNd''@;'; put 'put ''KSxmPXRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2UoZCxkLGgpLHY9dGhpcy5tZXJnZWRDZWxsc0NvbGxlY3Rpb24uZ2V0V2l0aGluUmFuZ2UoZik7cmV0dXJuIDA9PT12Lmxlbmd0aD9jOnRoaXMuYXV0b2ZpbGxDYWxjdWxhdGlvbnMuc25hcERyYWdBcmVhKGwsYyxhLHYpfWZ1bmN0aW9uIG4z''@;'; put 'put ''dChjLGwpe3RoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLnNoaWZ0Q29sbGVjdGlvbnMoInJpZ2h0IixjLGwpfWZ1bmN0aW9uIHIzdChjLGwpe3RoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLnNoaWZ0Q29sbGVjdGlvbnMoImxlZnQiLGMsbCl9ZnVuY3Rpb24gaTN0KGMsbCxhKXsiYXV0byIh''@;'; put 'put ''PT1hJiZ0aGlzLm1lcmdlZENlbGxzQ29sbGVjdGlvbi5zaGlmdENvbGxlY3Rpb25zKCJkb3duIixjLGwpfWZ1bmN0aW9uIG8zdChjLGwpe3RoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLnNoaWZ0Q29sbGVjdGlvbnMoInVwIixjLGwpfWZ1bmN0aW9uIGEzdChjLGwpeyJBdXRvZmlsbC5maWxs''@;'; put 'put ''Ij09PWwmJnRoaXMuYXV0b2ZpbGxDYWxjdWxhdGlvbnMucmVjcmVhdGVBZnRlckRhdGFQb3B1bGF0aW9uKGMpfWZ1bmN0aW9uIHMzdChjLGwpe2lmKGwmJiJhcmVhIj09PWwpe2NvbnN0IGE9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtZbih0aGlzLm1lcmdlZENlbGxzQ29sbGVj''@;'; put 'put ''dGlvbi5nZXRXaXRoaW5SYW5nZShhKSxoPT57YS5nZXRCb3R0b21FbmRDb3JuZXIoKS5yb3c9PT1oLmdldExhc3RSb3coKSYmYS5nZXRCb3R0b21FbmRDb3JuZXIoKS5jb2w9PT1oLmdldExhc3RDb2x1bW4oKSYmKGNbMl09aC5yb3csY1szXT1oLmNvbCl9KX19ZnVuY3Rpb24gbDN0KGMsbCxh''@;'; put 'put ''LGQpe2lmKGEpcmV0dXJuIHRoaXMuc2VsZWN0aW9uQ2FsY3VsYXRpb25zLmdldFNlbGVjdGVkTWVyZ2VkQ2VsbENsYXNzTmFtZShjLGwsYSxkKX1mdW5jdGlvbiBjM3QoKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25DYWxjdWxhdGlvbnMuZ2V0U2VsZWN0ZWRNZXJnZWRDZWxsQ2xhc3NOYW1lVG9S''@;'; put 'put ''ZW1vdmUoKX1mdW5jdGlvbiB1M3QoYyxsLGEsZCl7aWYoIShkIGluc3RhbmNlb2YgTW91c2VFdmVudCkpcmV0dXJuO2NvbnN0IGg9dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxmPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldEJ5UmFuZ2UoaCk7aWYoIWYpcmV0dXJuO2Nv''@;'; put 'put ''bnN0IHY9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZi5yb3csZi5jb2wpLE09dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoZi5yb3crZi5yb3dzcGFuLTEsZi5jb2wrZi5jb2xzcGFuLTEpO3JldHVybiAwPT09dGhpcy5ob3Quc2VsZWN0aW9uLmdldExheWVyTGV2ZWwoKSYmaC5pc0Vx''@;'; put 'put ''dWFsKHRoaXMuaG90Ll9jcmVhdGVDZWxsUmFuZ2Uodix2LE0pKX1mdW5jdGlvbiBkM3QoYyxsLGEpe2lmKHRoaXMuaG90LmdldFNldHRpbmdzKCkucm93SGVhZGVyc3x8ImJvdHRvbSI9PT1hfHwiYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXIiPT09YSlyZXR1cm4gYztsZXQgZCxoO2lmKCJt''@;'; put 'put ''YXN0ZXIiPT09YSlkPXRoaXMuaG90LmdldEZpcnN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCksaD10aGlzLmhvdC5nZXRMYXN0UmVuZGVyZWRWaXNpYmxlQ29sdW1uKCk7ZWxzZXtjb25zdCBiZT10aGlzLmhvdC52aWV3LmdldE92ZXJsYXlCeU5hbWUoYSk7ZD10aGlzLmhvdC5jb2x1bW5JbmRl''@;'; put 'put ''eE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGJlLmNsb25lLnd0VGFibGUuZ2V0Rmlyc3RSZW5kZXJlZENvbHVtbigpKSxoPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoYmUuY2xvbmUud3RUYWJsZS5nZXRMYXN0UmVu''@;'; put 'put ''ZGVyZWRDb2x1bW4oKSl9aWYoIXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldChsLGQpKXJldHVybiBjO2NvbnN0IHY9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobCxkKSxNPXRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGwsaCksRD10aGlzLmhvdC5fY3JlYXRlQ2VsbFJhbmdl''@;'; put 'put ''KHYsdixNKSxaPXRoaXMubWVyZ2VkQ2VsbHNDb2xsZWN0aW9uLmdldFdpdGhpblJhbmdlKEQsITApLG5lPVoucmVkdWNlKChiZSxFZSk9PntsZXR7cm93c3BhbjpCZX09RWU7cmV0dXJuIE1hdGgubWF4KGJlLEJlKX0sMSk7bGV0IGNlPTA7cmV0dXJuIFoubGVuZ3RoPjEmJlpbMF0ucm93c3Bh''@;'; put 'put ''bjxuZSYmKGNlPW5lLVpbMF0ucm93c3BhbiksWi5mb3JFYWNoKGJlPT57bGV0e3Jvd3NwYW46RWV9PWJlLEJlPTA7QmU9InRvcCI9PT1hfHwidG9wX2lubGluZV9zdGFydF9jb3JuZXIiPT09YT9NYXRoLm1pbihuZSx0aGlzLmhvdC52aWV3LmNvdW50Tm90SGlkZGVuRml4ZWRSb3dzVG9wKCkt''@;'; put 'put ''bCk6RWUtY2UsYz1NYXRoLm1heChjPz8wLGdsKFRsLHRoaXMsaDN0KS5jYWxsKHRoaXMsbCxCZSkpfSksY31mdW5jdGlvbiBoM3QoYyxsKXtjb25zdHt2aWV3OmEscm93SW5kZXhNYXBwZXI6ZH09dGhpcy5ob3QsaD1hLmdldFN0eWxlc0hhbmRsZXIoKSxmPWEuZ2V0RGVmYXVsdFJvd0hlaWdo''@;'; put 'put ''dCgpO2xldCB2PTA7Zm9yKGxldCBEPWM7RDxjK2w7RCsrKWlmKCFkLmlzSGlkZGVuKEQpKXt2YXIgTTt2Kz1udWxsIT09KE09dGhpcy5ob3QuZ2V0Um93SGVpZ2h0KEQpKSYmdm9pZCAwIT09TT9NOmYsMD09PUQmJiFoLmlzQ2xhc3NpY1RoZW1lKCkmJih2Kz0xKX1yZXR1cm4gdn1jb25zdCBf''@;'; put 'put ''SD0ibXVsdGlDb2x1bW5Tb3J0aW5nIixhbWU9X0g7eDRlKF9ILGZ1bmN0aW9uIGYzdChjLGwpe3JldHVybiBmdW5jdGlvbihhLGQpe2NvbnN0WywuLi5oXT1hLFssLi4uZl09ZDtyZXR1cm4gZnVuY3Rpb24gdihNKXtjb25zdCBEPWNbTV0sWj1sW01dLG5lPWhbTV0sY2U9ZltNXSxiZT1aLm11''@;'; put 'put ''bHRpQ29sdW1uU29ydGluZyxCZT0oYmUuY29tcGFyZUZ1bmN0aW9uRmFjdG9yeT9iZS5jb21wYXJlRnVuY3Rpb25GYWN0b3J5OkU0ZShaLnR5cGUpKShELFosYmUpKG5lLGNlKTtpZihCZT09PUhwKXtjb25zdCBxZT1NKzE7aWYodHlwZW9mIGxbcWVdPCJ1IilyZXR1cm4gdihxZSl9cmV0dXJu''@;'; put 'put ''IEJlfSgwKX19KTtjbGFzcyBfM3QgZXh0ZW5kcyBINGV7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIG0zdChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gdjN0KGMpe3ZhciBsPWZ1bmN0aW9uIGIzdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0''@;'; put 'put ''dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRp''@;'; put 'put ''dmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxl''@;'; put 'put ''OiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsInBsdWdpbktleSIsX0gpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBfSH1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxNzB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygp''@;'; put 'put ''W3RoaXMucGx1Z2luS2V5XX1lbmFibGVQbHVnaW4oKXtzdXBlci5lbmFibGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIuZGlzYWJsZVBsdWdpbigpfXJlZ2lzdGVyU2hvcnRjdXRzKCl7c3VwZXIucmVnaXN0ZXJTaG9ydGN1dHMoKSx0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIo''@;'; put 'put ''KS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXQoe2tleXM6W1siU2hpZnQiLCJFbnRlciJdXSxjYWxsYmFjazooKT0+e2NvbnN0e2hpZ2hsaWdodDpsfT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpO3JldHVybi0xPT09bC5yb3cmJmwuY29sPj0wJiZ0aGlzLnNvcnQodGhp''@;'; put 'put ''cy5nZXROZXh0U29ydENvbmZpZyhsLmNvbCxKUCkpLCExfSxydW5Pbmx5SWY6KCk9Pnt2YXIgbCxhO2NvbnN0IGQ9bnVsbD09PShsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmhpZ2hsaWdodDtyZXR1cm4gZCYmKG51bGw9PT0oYT10aGlz''@;'; put 'put ''LmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5pc1NpbmdsZSgpKSYmdGhpcy5ob3Quc2VsZWN0aW9uLmlzQ2VsbFZpc2libGUoZCkmJmQuaXNIZWFkZXIoKX0scmVsYXRpdmVUb0dyb3VwOlVtLHBvc2l0aW9uOiJiZWZvcmUiLGdyb3VwOmFtZX0pfXVu''@;'; put 'put ''cmVnaXN0ZXJTaG9ydGN1dHMoKXtzdXBlci51bnJlZ2lzdGVyU2hvcnRjdXRzKCksdGhpcy5ob3QuZ2V0U2hvcnRjdXRNYW5hZ2VyKCkuZ2V0Q29udGV4dCgiZ3JpZCIpLnJlbW92ZVNob3J0Y3V0c0J5R3JvdXAoYW1lKX1zb3J0KGwpe3N1cGVyLnNvcnQobCl9Y2xlYXJTb3J0KCl7c3VwZXIu''@;'; put 'put ''Y2xlYXJTb3J0KCl9aXNTb3J0ZWQoKXtyZXR1cm4gc3VwZXIuaXNTb3J0ZWQoKX1nZXRTb3J0Q29uZmlnKGwpe3JldHVybiBzdXBlci5nZXRTb3J0Q29uZmlnKGwpfXNldFNvcnRDb25maWcobCl7c3VwZXIuc2V0U29ydENvbmZpZyhsKX1nZXROb3JtYWxpemVkU29ydENvbmZpZ3MoKXtsZXQg''@;'; put 'put ''bD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06W107cmV0dXJuIEFycmF5LmlzQXJyYXkobCk/bDpbbF19dXBkYXRlSGVhZGVyQ2xhc3NlcyhsKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhPjE/YS0xOjApLGg9''@;'; put 'put ''MTtoPGE7aCsrKWRbaC0xXT1hcmd1bWVudHNbaF07c3VwZXIudXBkYXRlSGVhZGVyQ2xhc3NlcyhsLC4uLmQpLGNhKGwsZnVuY3Rpb24gZzN0KGMpe2NvbnN0IGw9Yy5jbGFzc05hbWUuc3BsaXQoIiAiKSxhPW5ldyBSZWdFeHAoIl5zb3J0LVswLTldezEsMn0kIik7cmV0dXJuIGwuZmlsdGVy''@;'; put 'put ''KGQ9PmEudGVzdChkKSl9KGwpKSwhMSE9PXRoaXMuZW5hYmxlZCYmVGkobCxmdW5jdGlvbiBwM3QoYyxsLGEpe2NvbnN0IGQ9W107cmV0dXJuITE9PT1hfHxjLmlzQ29sdW1uU29ydGVkKGwpJiZjLmdldE51bWJlck9mU29ydGVkQ29sdW1ucygpPjEmJmQucHVzaChgc29ydC0ke2MuZ2V0SW5k''@;'; put 'put ''ZXhPZkNvbHVtbkluU29ydFF1ZXVlKGwpKzF9YCksZH0oLi4uZCkpfW9uQWZ0ZXJPbkNlbGxNb3VzZURvd24obCxhKXshMSE9PW9KKGEucm93LGEuY29sLGwpJiZ0aGlzLndhc0NsaWNrYWJsZUhlYWRlckNsaWNrZWQobCxhLmNvbCkmJih0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5p''@;'; put 'put ''c0N0cmxQcmVzc2VkKCk/KHRoaXMuaG90LmRlc2VsZWN0Q2VsbCgpLHRoaXMuaG90LnNlbGVjdENvbHVtbnMoYS5jb2wpLHRoaXMuc29ydCh0aGlzLmdldE5leHRTb3J0Q29uZmlnKGEuY29sLEpQKSkpOnRoaXMuc29ydCh0aGlzLmdldENvbHVtbk5leHRDb25maWcoYS5jb2wpKSl9fWZ1bmN0''@;'; put 'put ''aW9uIHNtZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gdzN0KGMpe3ZhciBsPWZ1bmN0aW9uIEMzdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZh''@;'; put 'put ''dWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5''@;'; put 'put ''bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgeDN0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5h''@;'; put 'put ''cmd1bWVudHMpLHNtZSh0aGlzLCJkcmFnZ2VkIixbXSksc21lKHRoaXMsImxhc3RTZXRDZWxsIixudWxsKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4ibXVsdGlwbGVTZWxlY3Rpb25IYW5kbGVzIn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxNjB9aXNFbmFi''@;'; put 'put ''bGVkKCl7cmV0dXJuIFNwKCl9ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5yZWdpc3Rlckxpc3RlbmVycygpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1yZWdpc3Rlckxpc3RlbmVycygpe2NvbnN0IGw9dGhpcyx7cm9vdEVsZW1lbnQ6YX09dGhpcy5ob3Q7ZnVuY3Rpb24gZCho''@;'; put 'put ''KXtpZigxPT09bC5kcmFnZ2VkLmxlbmd0aClyZXR1cm4gbC5kcmFnZ2VkLnNwbGljZSgwLGwuZHJhZ2dlZC5sZW5ndGgpLCEwO2NvbnN0IGY9bC5kcmFnZ2VkLmluZGV4T2YoaCk7aWYoLTE9PT1mKXJldHVybiExOzA9PT1mP2wuZHJhZ2dlZD1sLmRyYWdnZWQuc2xpY2UoMCwxKToxPT09ZiYm''@;'; put 'put ''KGwuZHJhZ2dlZD1sLmRyYWdnZWQuc2xpY2UoLTEpKX10aGlzLmV2ZW50TWFuYWdlci5hZGRFdmVudExpc3RlbmVyKGEsInRvdWNoc3RhcnQiLGg9PntsZXQgZjtyZXR1cm4gcGEoaC50YXJnZXQsInRvcFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIik/KGY9bC5ob3QuZ2V0U2VsZWN0ZWRSYW5n''@;'; put 'put ''ZUxhc3QoKSxsLmRyYWdnZWQucHVzaCgidG9wIiksbC50b3VjaFN0YXJ0UmFuZ2U9e3dpZHRoOmYuZ2V0V2lkdGgoKSxoZWlnaHQ6Zi5nZXRIZWlnaHQoKSxkaXJlY3Rpb246Zi5nZXREaXJlY3Rpb24oKX0saC5wcmV2ZW50RGVmYXVsdCgpLCExKTpwYShoLnRhcmdldCwiYm90dG9tU2VsZWN0''@;'; put 'put ''aW9uSGFuZGxlLUhpdEFyZWEiKT8oZj1sLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGwuZHJhZ2dlZC5wdXNoKCJib3R0b20iKSxsLnRvdWNoU3RhcnRSYW5nZT17d2lkdGg6Zi5nZXRXaWR0aCgpLGhlaWdodDpmLmdldEhlaWdodCgpLGRpcmVjdGlvbjpmLmdldERpcmVjdGlvbigpfSxo''@;'; put 'put ''LnByZXZlbnREZWZhdWx0KCksITEpOnZvaWQgMH0pLHRoaXMuZXZlbnRNYW5hZ2VyLmFkZEV2ZW50TGlzdGVuZXIoYSwidG91Y2hlbmQiLGg9PnBhKGgudGFyZ2V0LCJ0b3BTZWxlY3Rpb25IYW5kbGUtSGl0QXJlYSIpPyhkLmNhbGwobCwidG9wIiksbC50b3VjaFN0YXJ0UmFuZ2U9dm9pZCAw''@;'; put 'put ''LGgucHJldmVudERlZmF1bHQoKSwhMSk6cGEoaC50YXJnZXQsImJvdHRvbVNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhIik/KGQuY2FsbChsLCJib3R0b20iKSxsLnRvdWNoU3RhcnRSYW5nZT12b2lkIDAsaC5wcmV2ZW50RGVmYXVsdCgpLCExKTp2b2lkIDApLHRoaXMuZXZlbnRNYW5hZ2VyLmFk''@;'; put 'put ''ZEV2ZW50TGlzdGVuZXIoYSwidG91Y2htb3ZlIixoPT57Y29uc3R7cm9vdERvY3VtZW50OmZ9PXRoaXMuaG90O2xldCB2LE0sRCxaLG5lLGNlO2lmKDA9PT1sLmRyYWdnZWQubGVuZ3RoKXJldHVybjtjb25zdCBiZT1mLmVsZW1lbnRGcm9tUG9pbnQoaC50b3VjaGVzWzBdLmNsaWVudFgsaC50''@;'; put 'put ''b3VjaGVzWzBdLmNsaWVudFkpOyFiZXx8YmU9PT1sLmxhc3RTZXRDZWxsfHwoKCJURCI9PT1iZS5ub2RlTmFtZXx8IlRIIj09PWJlLm5vZGVOYW1lKSYmKHY9bC5ob3QuZ2V0Q29vcmRzKGJlKSwtMT09PXYuY29sJiYodi5jb2w9MCksTT1sLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLEQ9''@;'; put 'put ''TS5nZXRXaWR0aCgpLFo9TS5nZXRIZWlnaHQoKSxuZT1NLmdldERpcmVjdGlvbigpLDE9PT1EJiYxPT09WiYmbC5ob3Quc2VsZWN0aW9uLnNldFJhbmdlRW5kKHYpLGNlPWwuZ2V0Q3VycmVudFJhbmdlQ29vcmRzKE0sdixsLnRvdWNoU3RhcnRSYW5nZS5kaXJlY3Rpb24sbmUsbC5kcmFnZ2Vk''@;'; put 'put ''WzBdKSxudWxsIT09Y2Uuc3RhcnQmJmwuaG90LnNlbGVjdGlvbi5zZXRSYW5nZVN0YXJ0KGNlLnN0YXJ0KSxsLmhvdC5zZWxlY3Rpb24uc2V0UmFuZ2VFbmQoY2UuZW5kKSxsLmxhc3RTZXRDZWxsPWJlKSxoLnByZXZlbnREZWZhdWx0KCkpfSl9Z2V0Q3VycmVudFJhbmdlQ29vcmRzKGwsYSxk''@;'; put 'put ''LGgsZil7Y29uc3Qgdj1sLmdldFRvcFN0YXJ0Q29ybmVyKCksTT1sLmdldEJvdHRvbUVuZENvcm5lcigpLEQ9bC5nZXRCb3R0b21TdGFydENvcm5lcigpLFo9bC5nZXRUb3BFbmRDb3JuZXIoKTtsZXQgbmU9e3N0YXJ0Om51bGwsZW5kOm51bGx9O3N3aXRjaChkKXtjYXNlIk5FLVNXIjpzd2l0''@;'; put 'put ''Y2goaCl7Y2FzZSJORS1TVyI6Y2FzZSJOVy1TRSI6bmU9InRvcCI9PT1mP3tzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyxsLmhpZ2hsaWdodC5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhELnJvdyxhLmNvbCl9OntzdGFydDp0aGlzLmhvdC5fY3Jl''@;'; put 'put ''YXRlQ2VsbENvb3JkcyhsLmhpZ2hsaWdodC5yb3csYS5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyx2LmNvbCl9O2JyZWFrO2Nhc2UiU0UtTlciOiJib3R0b20iPT09ZiYmKG5lPXtzdGFydDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhNLnJvdyxhLmNvbCks''@;'; put 'put ''ZW5kOnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LHYuY29sKX0pfWJyZWFrO2Nhc2UiTlctU0UiOnN3aXRjaChoKXtjYXNlIk5FLVNXIjoidG9wIj09PWY/bmU9e3N0YXJ0OmEsZW5kOkR9Om5lLmVuZD1hO2JyZWFrO2Nhc2UiTlctU0UiOiJ0b3AiPT09Zj9uZT17c3RhcnQ6YSxl''@;'; put 'put ''bmQ6TX06bmUuZW5kPWE7YnJlYWs7Y2FzZSJTRS1OVyI6InRvcCI9PT1mP25lPXtzdGFydDphLGVuZDp2fTpuZS5lbmQ9YTticmVhaztjYXNlIlNXLU5FIjoidG9wIj09PWY/bmU9e3N0YXJ0OmEsZW5kOlp9Om5lLmVuZD1hfWJyZWFrO2Nhc2UiU1ctTkUiOnN3aXRjaChoKXtjYXNlIk5XLVNF''@;'; put 'put ''IjpuZT0iYm90dG9tIj09PWY/e3N0YXJ0OnRoaXMuaG90Ll9jcmVhdGVDZWxsQ29vcmRzKGEucm93LHYuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoRC5yb3csYS5jb2wpfTp7c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHModi5yb3csYS5jb2wpLGVuZDp0aGlz''@;'; put 'put ''LmhvdC5fY3JlYXRlQ2VsbENvb3JkcyhhLnJvdyxNLmNvbCl9O2JyZWFrO2Nhc2UiU1ctTkUiOm5lPSJ0b3AiPT09Zj97c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5oaWdobGlnaHQucm93LGEuY29sKSxlbmQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3csTS5j''@;'; put 'put ''b2wpfTp7c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMoYS5yb3csdi5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyh2LnJvdyxhLmNvbCl9O2JyZWFrO2Nhc2UiU0UtTlciOiJib3R0b20iPT09Zj9uZT17c3RhcnQ6dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMo''@;'; put 'put ''YS5yb3csWi5jb2wpLGVuZDp0aGlzLmhvdC5fY3JlYXRlQ2VsbENvb3Jkcyh2LnJvdyxhLmNvbCl9OiJ0b3AiPT09ZiYmKG5lPXtzdGFydDpELGVuZDphfSl9YnJlYWs7Y2FzZSJTRS1OVyI6c3dpdGNoKGgpe2Nhc2UiTlctU0UiOmNhc2UiTkUtU1ciOmNhc2UiU1ctTkUiOiJ0b3AiPT09ZiYm''@;'; put 'put ''KG5lLmVuZD1hKTticmVhaztjYXNlIlNFLU5XIjoidG9wIj09PWY/bmUuZW5kPWE6bmU9e3N0YXJ0OmEsZW5kOnZ9fX1yZXR1cm4gbmV9aXNEcmFnZ2VkKCl7cmV0dXJuIHRoaXMuZHJhZ2dlZC5sZW5ndGg+MH19ZnVuY3Rpb24galEoKXtsZXR7bGFiZWw6Yz0iIixjb2xzcGFuOmw9MSxvcmln''@;'; put 'put ''Q29sc3BhbjphPTEsY29sbGFwc2libGU6ZD0hMSxjcm9zc0hpZGRlbkNvbHVtbnM6aD1bXSxpc0NvbGxhcHNlZDpmPSExLGlzSGlkZGVuOnY9ITEsaXNSb290Ok09ITEsaXNQbGFjZWhvbGRlcjpEPSExLGhlYWRlckNsYXNzTmFtZXM6Wj1bXX09YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAh''@;'; put 'put ''PT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O3JldHVybntsYWJlbDpjLGNvbHNwYW46bCxvcmlnQ29sc3BhbjphLGNvbGxhcHNpYmxlOmQsaXNDb2xsYXBzZWQ6Zixjcm9zc0hpZGRlbkNvbHVtbnM6aCxpc0hpZGRlbjp2LGlzUm9vdDpNLGlzUGxhY2Vob2xkZXI6RCxoZWFkZXJDbGFz''@;'; put 'put ''c05hbWVzOlp9fWZ1bmN0aW9uIHpRKGMsbCxhKXsoZnVuY3Rpb24gVDN0KGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5zZXQoYyxhKX1m''@;'; put 'put ''dW5jdGlvbiB2MyhjLGwpe3JldHVybiBjLmdldChjbWUoYyxsKSl9ZnVuY3Rpb24gbEEoYyxsLGEpe3JldHVybiBjLnNldChjbWUoYyxsKSxhKSxhfWZ1bmN0aW9uIGNtZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5n''@;'; put 'put ''dGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgdW1lPVsibGFiZWwiLCJjb2xsYXBzaWJsZSJdO3ZhciBVZz1uZXcgV2Vha01hcCxOOT1uZXcgV2Vha01hcCxVUT1uZXcgV2Vha01hcDtjbGFz''@;'; put 'put ''cyBBM3R7Y29uc3RydWN0b3IoKXt6USh0aGlzLFVnLFtdKSx6USh0aGlzLE45LDApLHpRKHRoaXMsVVEsMS8wKX1zZXRDb2x1bW5zTGltaXQobCl7bEEoVVEsdGhpcyxsKX1zZXREYXRhKCl7bEEoVWcsdGhpcyxmdW5jdGlvbiBFM3QoYyl7bGV0IGw9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lk''@;'; put 'put ''IDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOjEvMDtjb25zdCBhPVtdO2lmKDA9PT1sKXJldHVybiBhO1luKGMsaD0+e2NvbnN0IGY9W107bGV0IHY9MDthLnB1c2goZiksWW4oaCxNPT57Y29uc3QgRD1qUSgpO2lmKEthKE0pKXtjb25zdHtsYWJlbDpuZSxjb2xzcGFuOmNlLGhlYWRl''@;'; put 'put ''ckNsYXNzTmFtZTpiZX09TTtELmxhYmVsPXpjKG5lKSwibnVtYmVyIj09dHlwZW9mIGNlJiZjZT4xJiYoRC5jb2xzcGFuPWNlLEQub3JpZ0NvbHNwYW49Y2UpLCJzdHJpbmciPT10eXBlb2YgYmUmJihELmhlYWRlckNsYXNzTmFtZXM9Wy4uLmJlLnNwbGl0KCIgIildKX1lbHNlIEQubGFiZWw9''@;'; put 'put ''emMoTSk7dis9RC5vcmlnQ29sc3BhbjtsZXQgWj0hMTtpZih2Pj1sJiYoRC5jb2xzcGFuPUQub3JpZ0NvbHNwYW4tKHYtbCksRC5vcmlnQ29sc3Bhbj1ELmNvbHNwYW4sWj0hMCksZi5wdXNoKEQpLEQuY29sc3Bhbj4xKWZvcihsZXQgbmU9MDtuZTxELmNvbHNwYW4tMTtuZSsrKWYucHVzaCh7''@;'; put 'put ''bGFiZWw6IiIsaXNQbGFjZWhvbGRlcjohMH0pO3JldHVybiFafSl9KTtjb25zdCBkPU1hdGgubWF4KC4uLnlzKGEsaD0+aC5sZW5ndGgpKTtyZXR1cm4gWW4oYSxoPT57aWYoaC5sZW5ndGg8ZCl7Y29uc3QgZj15cyhuZXcgQXJyYXkoZC1oLmxlbmd0aCksKCk9PmpRKCkpO2guc3BsaWNlKGgu''@;'; put 'put ''bGVuZ3RoLDAsLi4uZil9fSksYX0oYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltdLHYzKFVRLHRoaXMpKSksbEEoTjksdGhpcyx2MyhVZyx0aGlzKS5sZW5ndGgpfWdldERhdGEoKXtyZXR1cm4gdjMoVWcsdGhpcyl9bWVyZ2VXaXRoKGwp''@;'; put 'put ''e1luKGwsYT0+e2xldHtyb3c6ZCxjb2w6aCwuLi5mfT1hO2NvbnN0IHY9dGhpcy5nZXRIZWFkZXJTZXR0aW5ncyhkLGgpO251bGwhPT12JiZ4dSh2LGYsdW1lKX0pfW1hcChsKXtZbih2MyhVZyx0aGlzKSxhPT57WW4oYSxkPT57Y29uc3QgaD1sKHsuLi5kfSk7S2EoaCkmJnh1KGQsaCx1bWUp''@;'; put 'put ''fSl9KX1nZXRIZWFkZXJTZXR0aW5ncyhsLGEpe3ZhciBkO2lmKGw+PXYzKE45LHRoaXMpfHxsPDApcmV0dXJuIG51bGw7Y29uc3QgaD12MyhVZyx0aGlzKVtsXTtyZXR1cm4hMT09PUFycmF5LmlzQXJyYXkoaCl8fGE+PWgubGVuZ3RoP251bGw6bnVsbCE9PShkPWhbYV0pJiZ2b2lkIDAhPT1k''@;'; put 'put ''P2Q6bnVsbH1nZXRIZWFkZXJzU2V0dGluZ3MobCxhKXtsZXQgZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06MTtjb25zdCBoPVtdO2lmKGw+PXYzKE45LHRoaXMpfHxsPDApcmV0dXJuIGg7Y29uc3QgZj12MyhVZyx0aGlzKVtsXTtsZXQg''@;'; put 'put ''dj0wO2ZvcihsZXQgTT1hO008Zi5sZW5ndGg7TSsrKXtjb25zdCBEPWZbTV07aWYoRC5pc1BsYWNlaG9sZGVyKXRocm93IG5ldyBFcnJvcigiVGhlIGZpcnN0IGNvbHVtbiBzZXR0aW5ncyBjYW5ub3Qgb3ZlcmxhcCB0aGUgb3RoZXIgaGVhZGVyIGxheWVycyIpO2lmKHYrPUQuY29sc3Bhbixo''@;'; put 'put ''LnB1c2goRCksRC5jb2xzcGFuPjEmJihNKz1ELmNvbHNwYW4tMSksdj09PWQpYnJlYWs7aWYodj5kKXRocm93IG5ldyBFcnJvcigiVGhlIGxhc3QgY29sdW1uIHNldHRpbmdzIGNhbm5vdCBvdmVybGFwIHRoZSBvdGhlciBoZWFkZXIgbGF5ZXJzIil9cmV0dXJuIGh9Z2V0TGF5ZXJzQ291bnQo''@;'; put 'put ''KXtyZXR1cm4gdjMoTjksdGhpcyl9Z2V0Q29sdW1uc0NvdW50KCl7cmV0dXJuIHYzKE45LHRoaXMpPjA/djMoVWcsdGhpcylbMF0ubGVuZ3RoOjB9Y2xlYXIoKXtsQShVZyx0aGlzLFtdKSxsQShOOSx0aGlzLDApfX1mdW5jdGlvbiBaUShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gazN0KGMp''@;'; put 'put ''e3ZhciBsPWZ1bmN0aW9uIEQzdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Ro''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgZG1lPSJERi1wcmUtb3JkZXIiLGdtZT1uZXcgTWFwKFtbZG1lLGZ1bmN0aW9uIGhtZShjLGwpe2xldCBhPWMuY2FsbChsLHRoaXMpO2Zv''@;'; put 'put ''cihsZXQgZD0wO2Q8dGhpcy5jaGlsZHMubGVuZ3RoO2QrKyl7aWYoITE9PT1hKXJldHVybiExO2E9aG1lLmNhbGwodGhpcy5jaGlsZHNbZF0sYyxsKX1yZXR1cm4gYX1dLFsiREYtcG9zdC1vcmRlciIsZnVuY3Rpb24gZm1lKGMsbCl7Zm9yKGxldCBhPTA7YTx0aGlzLmNoaWxkcy5sZW5ndGg7''@;'; put 'put ''YSsrKWlmKCExPT09Zm1lLmNhbGwodGhpcy5jaGlsZHNbYV0sYyxsKSlyZXR1cm4hMTtyZXR1cm4gYy5jYWxsKGwsdGhpcyl9XSxbIkJGIixmdW5jdGlvbiBSM3QoYyxsKXtjb25zdCBhPVt0aGlzXTshZnVuY3Rpb24gZCgpe2lmKDA9PT1hLmxlbmd0aClyZXR1cm47Y29uc3QgaD1hLnNoaWZ0''@;'; put 'put ''KCk7YS5wdXNoKC4uLmguY2hpbGRzKSwhMSE9PWMuY2FsbChsLGgpJiZkKCl9KCl9XV0pO2NsYXNzIHdIe2NvbnN0cnVjdG9yKGwpe1pRKHRoaXMsImRhdGEiLHt9KSxaUSh0aGlzLCJwYXJlbnQiLG51bGwpLFpRKHRoaXMsImNoaWxkcyIsW10pLHRoaXMuZGF0YT1sfWFkZENoaWxkKGwpe2wu''@;'; put 'put ''cGFyZW50PXRoaXMsdGhpcy5jaGlsZHMucHVzaChsKX1jbG9uZVRyZWUoKXtsZXQgbD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcztjb25zdCBhPW5ldyB3SCh7Li4ubC5kYXRhfSk7Zm9yKGxldCBkPTA7ZDxsLmNoaWxkcy5sZW5n''@;'; put 'put ''dGg7ZCsrKWEuYWRkQ2hpbGQodGhpcy5jbG9uZVRyZWUobC5jaGlsZHNbZF0pKTtyZXR1cm4gYX1yZXBsYWNlVHJlZVdpdGgobCl7dGhpcy5kYXRhPXsuLi5sLmRhdGF9LHRoaXMuY2hpbGRzPVtdO2ZvcihsZXQgYT0wO2E8bC5jaGlsZHMubGVuZ3RoO2ErKyl0aGlzLmFkZENoaWxkKGwuY2hp''@;'; put 'put ''bGRzW2FdKX13YWxrRG93bihsKXtsZXQgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06IkJGIjtpZighZ21lLmhhcyhhKSl0aHJvdyBuZXcgRXJyb3IoYFRyYXZlcnNhbCBzdHJhdGVneSAiJHthfSIgZG9lcyBub3QgZXhpc3RgKTtnbWUu''@;'; put 'put ''Z2V0KGEpLmNhbGwodGhpcyxsLHRoaXMpfXdhbGtVcChsKXtjb25zdCBhPXRoaXMsZD1oPT57ITEhPT1sLmNhbGwoYSxoKSYmbnVsbCE9PWgucGFyZW50JiZkKGgucGFyZW50KX07ZCh0aGlzKX19ZnVuY3Rpb24gV1EoYyxsLGEpeyhmdW5jdGlvbiBPM3QoYyxsKXtpZihsLmhhcyhjKSl0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIGlkKGMsbCl7cmV0dXJuIGMuZ2V0KG1tZShjLGwpKX1mdW5jdGlvbiBtbWUoYyxsLGEpe2lmKCJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBmdz1uZXcgV2Vha01hcCxWOT1uZXcgV2Vha01h''@;'; put 'put ''cCxwdz1uZXcgV2Vha01hcDtjbGFzcyBGM3R7Y29uc3RydWN0b3IobCl7V1EodGhpcyxmdyxuZXcgTWFwKSxXUSh0aGlzLFY5LG5ldyBNYXApLFdRKHRoaXMscHcsbnVsbCksZnVuY3Rpb24gUDN0KGMsbCxhKXtjLnNldChtbWUoYyxsKSxhKX0ocHcsdGhpcyxsKX1nZXRSb290cygpe3JldHVy''@;'; put 'put ''biBBcnJheS5mcm9tKGlkKGZ3LHRoaXMpLnZhbHVlcygpKX1nZXRSb290QnlDb2x1bW4obCl7bGV0IGE7cmV0dXJuIGlkKFY5LHRoaXMpLmhhcyhsKSYmKGE9aWQoZncsdGhpcykuZ2V0KGlkKFY5LHRoaXMpLmdldChsKSkpLGF9Z2V0Tm9kZShsLGEpe2NvbnN0IGQ9dGhpcy5nZXRSb290QnlD''@;'; put 'put ''b2x1bW4oYSk7aWYoIWQpcmV0dXJuO2NvbnN0IGg9YS1pZChWOSx0aGlzKS5nZXQoYSk7bGV0IHYsZj0wO3JldHVybiBkLndhbGtEb3duKE09Pntjb25zdHtkYXRhOntvcmlnQ29sc3BhbjpELGhlYWRlckxldmVsOlp9fT1NO2lmKGw9PT1aKXtpZihoPj1mJiZoPD1mK0QtMSlyZXR1cm4gdj1N''@;'; put 'put ''LHYuZGF0YS5pc1Jvb3Q9YT09PXYuZGF0YS5jb2x1bW5JbmRleCwhMTtmKz1EfX0pLHZ9cmVidWlsZFRyZWVJbmRleCgpe2xldCBsPTA7aWQoVjksdGhpcykuY2xlYXIoKSxZbihpZChmdyx0aGlzKSxhPT57bGV0Wyx7ZGF0YTp7Y29sc3BhbjpkfX1dPWE7Zm9yKGxldCBoPWw7aDxsK2Q7aCsr''@;'; put 'put ''KWlkKFY5LHRoaXMpLnNldChoLGwpO2wrPWR9KX1idWlsZFRyZWUoKXt0aGlzLmNsZWFyKCk7Y29uc3QgbD1pZChwdyx0aGlzKS5nZXRDb2x1bW5zQ291bnQoKTtsZXQgYT0wO2Zvcig7YTxsOyl7Y29uc3QgZD1pZChwdyx0aGlzKS5nZXRIZWFkZXJTZXR0aW5ncygwLGEpLGg9bmV3IHdIO2lk''@;'; put 'put ''KGZ3LHRoaXMpLnNldChhLGgpLHRoaXMuYnVpbGRMZWF2ZXMoaCxhLDAsZC5vcmlnQ29sc3BhbiksYSs9ZC5vcmlnQ29sc3Bhbn10aGlzLnJlYnVpbGRUcmVlSW5kZXgoKX1idWlsZExlYXZlcyhsLGEsZCl7bGV0IGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/''@;'; put 'put ''YXJndW1lbnRzWzNdOjE7Y29uc3QgZj1pZChwdyx0aGlzKS5nZXRIZWFkZXJzU2V0dGluZ3MoZCxhLGgpO2QrPTEsWW4oZix2PT57Y29uc3QgTT17Li4udixoZWFkZXJMZXZlbDpkLTEsY29sdW1uSW5kZXg6YX07bGV0IEQ7MT09PWQ/KGwuZGF0YT1NLEQ9bCk6KEQ9bmV3IHdIKE0pLGwuYWRk''@;'; put 'put ''Q2hpbGQoRCkpLGQ8aWQocHcsdGhpcykuZ2V0TGF5ZXJzQ291bnQoKSYmdGhpcy5idWlsZExlYXZlcyhELGEsZCx2Lm9yaWdDb2xzcGFuKSxhKz12Lm9yaWdDb2xzcGFufSl9Y2xlYXIoKXtpZChmdyx0aGlzKS5jbGVhcigpLGlkKFY5LHRoaXMpLmNsZWFyKCl9fWZ1bmN0aW9uIHZtZShjLGwp''@;'; put 'put ''e2Mud2Fsa0Rvd24oYT0+e2xldHtkYXRhOmQsY2hpbGRzOmh9PWE7aWYoIWQuaXNIaWRkZW4mJihsKGQuY29sdW1uSW5kZXgpLDA9PT1oLmxlbmd0aCkpZm9yKGxldCBmPTE7ZjxkLmNvbHNwYW47ZisrKWwoZC5jb2x1bW5JbmRleCtmKX0pfWZ1bmN0aW9uIENIKGMsbCl7bGV0e2NoaWxkczph''@;'; put 'put ''fT1jO2lmKDAhPT1hLmxlbmd0aClyZXR1cm4gYVswXS5kYXRhW2xdfWZ1bmN0aW9uIFNIKGMpe3JldHVybiBDSChjLCJvcmlnQ29sc3BhbiIpPT09Yy5kYXRhLm9yaWdDb2xzcGFufWZ1bmN0aW9uIFlRKGMpe2NvbnN0e2RhdGE6bCxjaGlsZHM6YX09YztpZighbC5pc0NvbGxhcHNlZHx8bC5p''@;'; put 'put ''c0hpZGRlbnx8bC5vcmlnQ29sc3Bhbjw9MSlyZXR1cm57cm9sbGJhY2tNb2RpZmljYXRpb246KCk9Pnt9LGFmZmVjdGVkQ29sdW1uczpbXSxjb2xzcGFuQ29tcGVuc2F0aW9uOjB9O2lmKFNIKGMpKXJldHVybiBZUShhWzBdKTtsLmlzQ29sbGFwc2VkPSExO2NvbnN0IGg9YS5zbGljZSgxKSxm''@;'; put 'put ''PW5ldyBTZXQ7bGV0IHY9MDtpZihoLmxlbmd0aD4wKVluKGgsTT0+e00ucmVwbGFjZVRyZWVXaXRoKE0uZGF0YS5jbG9uZWRUcmVlKSxNLmRhdGEuY2xvbmVkVHJlZT1udWxsLHYrPU0uZGF0YS5jb2xzcGFuLHZtZShNLFo9PntmLmFkZChaKX0pfSk7ZWxzZXtjb25zdHtjb2xzcGFuOk0sb3Jp''@;'; put 'put ''Z0NvbHNwYW46RCxjb2x1bW5JbmRleDpafT1sO3Y9RC1NO2ZvcihsZXQgbmU9MTtuZTxEO25lKyspZi5hZGQoWituZSl9cmV0dXJuIGMud2Fsa1VwKE09Pntjb25zdHtkYXRhOkR9PU07RC5jb2xzcGFuKz12LEQuY29sc3Bhbj49RC5vcmlnQ29sc3Bhbj8oRC5jb2xzcGFuPUQub3JpZ0NvbHNw''@;'; put 'put ''YW4sRC5pc0NvbGxhcHNlZD0hMSk6U0goTSkmJihELmlzQ29sbGFwc2VkPUNIKE0sImlzQ29sbGFwc2VkIikpfSkse3JvbGxiYWNrTW9kaWZpY2F0aW9uOigpPT5HUShjKSxhZmZlY3RlZENvbHVtbnM6QXJyYXkuZnJvbShmKSxjb2xzcGFuQ29tcGVuc2F0aW9uOnZ9fWZ1bmN0aW9uIEdRKGMp''@;'; put 'put ''e3ZhciBsO2NvbnN0e2RhdGE6YSxjaGlsZHM6ZH09YztpZihhLmlzQ29sbGFwc2VkfHxhLmlzSGlkZGVufHxhLm9yaWdDb2xzcGFuPD0xKXJldHVybntyb2xsYmFja01vZGlmaWNhdGlvbjooKT0+e30sYWZmZWN0ZWRDb2x1bW5zOltdLGNvbHNwYW5Db21wZW5zYXRpb246MH07aWYoU0goYykp''@;'; put 'put ''cmV0dXJuIEdRKGRbMF0pO2EuaXNDb2xsYXBzZWQ9ITA7Y29uc3QgZj1kLnNsaWNlKDEpLHY9bmV3IFNldDtpZihmLmxlbmd0aD4wKVluKGYsRD0+e3ZtZShELFo9Pnt2LmFkZChaKX0pLEQuZGF0YS5jbG9uZWRUcmVlPUQuY2xvbmVUcmVlKCksRC53YWxrRG93bihaPT57bGV0e2RhdGE6bmV9''@;'; put 'put ''PVo7bmUuaXNIaWRkZW49ITB9KX0pO2Vsc2V7Y29uc3R7b3JpZ0NvbHNwYW46RCxjb2x1bW5JbmRleDpafT1hO2ZvcihsZXQgbmU9MTtuZTxEO25lKyspdi5hZGQoWituZSl9Y29uc3QgTT1hLmNvbHNwYW4tKG51bGwhPT0obD1DSChjLCJjb2xzcGFuIikpJiZ2b2lkIDAhPT1sP2w6MSk7cmV0''@;'; put 'put ''dXJuIGMud2Fsa1VwKEQ9Pntjb25zdHtkYXRhOlp9PUQ7Wi5jb2xzcGFuLT1NLFouY29sc3Bhbjw9MT8oWi5jb2xzcGFuPTEsWi5pc0NvbGxhcHNlZD0hMCk6U0goRCkmJihaLmlzQ29sbGFwc2VkPUNIKEQsImlzQ29sbGFwc2VkIikpfSkse3JvbGxiYWNrTW9kaWZpY2F0aW9uOigpPT5ZUShj''@;'; put 'put ''KSxhZmZlY3RlZENvbHVtbnM6QXJyYXkuZnJvbSh2KSxjb2xzcGFuQ29tcGVuc2F0aW9uOk19fWNvbnN0IGJtZT1uZXcgTWFwKFtbImNvbGxhcHNlIixHUV0sWyJleHBhbmQiLFlRXSxbImhpZGUtY29sdW1uIixmdW5jdGlvbiBIM3QoYyxsKXtpZighTnVtYmVyLmlzSW50ZWdlcihsKSl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIlRoZSBwYXNzZWQgZ3JpZENvbHVtbkluZGV4IGFyZ3VtZW50IGhhcyBpbnZhbGlkIHR5cGUuIik7aWYoYy5jaGlsZHMubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKGZsYFRoZSBwYXNzZWQgbm9kZSBpcyBub3QgdGhlIGxhc3Qgbm9kZSBvbiB0aGUgdHJlZS4gT25seSBm''@;'; put 'put ''b3JceDIwCnRoZSBsYXN0IG5vZGUsIHRoZSBoaWRlIGNvbHVtbiBtb2RpZmljYXRpb24gY2FuIGJlIGFwcGxpZWQuYCk7Y29uc3R7Y3Jvc3NIaWRkZW5Db2x1bW5zOmF9PWMuZGF0YTtpZihhLmluY2x1ZGVzKGwpKXJldHVybjtsZXQgZD0hMTtjLndhbGtVcChoPT57Y29uc3R7ZGF0YTp7Y29s''@;'; put 'put ''bGFwc2libGU6Zn19PWg7aWYoZilyZXR1cm4gZD0hMCwhMX0pLCFkJiZjLndhbGtVcChoPT57Y29uc3R7ZGF0YTpmfT1oO2YuY3Jvc3NIaWRkZW5Db2x1bW5zLnB1c2gobCksZi5jb2xzcGFuPjE/Zi5jb2xzcGFuLT0xOmYuaXNIaWRkZW49ITB9KX1dLFsic2hvdy1jb2x1bW4iLGZ1bmN0aW9u''@;'; put 'put ''IE4zdChjLGwpe2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGwpKXRocm93IG5ldyBFcnJvcigiVGhlIHBhc3NlZCBncmlkQ29sdW1uSW5kZXggYXJndW1lbnQgaGFzIGludmFsaWQgdHlwZS4iKTtpZihjLmNoaWxkcy5sZW5ndGg+MCl0aHJvdyBuZXcgRXJyb3IoZmxgVGhlIHBhc3NlZCBub2RlIGlz''@;'; put 'put ''IG5vdCB0aGUgbGFzdCBub2RlIG9uIHRoZSB0cmVlLiBPbmx5IGZvclx4MjAKdGhlIGxhc3Qgbm9kZSwgdGhlIHNob3cgY29sdW1uIG1vZGlmaWNhdGlvbiBjYW4gYmUgYXBwbGllZC5gKTtjb25zdHtjcm9zc0hpZGRlbkNvbHVtbnM6YX09Yy5kYXRhO2lmKCFhLmluY2x1ZGVzKGwpKXJldHVy''@;'; put 'put ''bjtsZXQgZD0hMTtjLndhbGtVcChoPT57Y29uc3R7ZGF0YTp7Y29sbGFwc2libGU6Zn19PWg7aWYoZilyZXR1cm4gZD0hMCwhMX0pLCFkJiZjLndhbGtVcChoPT57Y29uc3R7ZGF0YTpmfT1oO2YuY3Jvc3NIaWRkZW5Db2x1bW5zLnNwbGljZShmLmNyb3NzSGlkZGVuQ29sdW1ucy5pbmRleE9m''@;'; put 'put ''KGwpLDEpLCFmLmlzSGlkZGVuJiZmLmNvbHNwYW48Zi5vcmlnQ29sc3BhbiYmKGYuY29sc3Bhbis9MSksZi5pc0hpZGRlbj0hMX0pfV1dKTtmdW5jdGlvbiBNSChjKXtjb25zdCBsPVtdO3JldHVybiBZbihjLGE9PnthLndhbGtEb3duKGQ9Pntjb25zdCBoPWQuZGF0YSx7b3JpZ0NvbHNwYW46''@;'; put 'put ''Zixjb2x1bW5JbmRleDp2LGhlYWRlckxldmVsOk0sY3Jvc3NIaWRkZW5Db2x1bW5zOkR9PWgsWj1mdW5jdGlvbiBqM3QoYyxsKXtsZXQgYTtyZXR1cm4gQXJyYXkuaXNBcnJheShjW2xdKT9hPWNbbF06KGE9W10sY1tsXT1hKSxhfShsLE0pO2xldCBuZT0hMTtmb3IobGV0IGNlPXY7Y2U8ditm''@;'; put 'put ''O2NlKyspaWYoRC5pbmNsdWRlcyhjZSl8fG5lKVoucHVzaCh7bGFiZWw6IiIsaXNQbGFjZWhvbGRlcjohMH0pO2Vsc2V7Y29uc3QgRWU9QjN0KGgpO0VlLmlzUm9vdD0hMCxaLnB1c2goRWUpLG5lPSEwfX0pfSksbH1mdW5jdGlvbiBCM3QoYyl7Y29uc3R7Y3Jvc3NIaWRkZW5Db2x1bW5zOmws''@;'; put 'put ''Li4uYX09alEoYyk7cmV0dXJuIGF9ZnVuY3Rpb24gJFEoYyxsLGEpeyhmdW5jdGlvbiB6M3QoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxs''@;'; put 'put ''LnNldChjLGEpfWZ1bmN0aW9uIGNBKGMsbCxhKXtyZXR1cm4gYy5zZXQoeW1lKGMsbCksYSksYX1mdW5jdGlvbiBxYyhjLGwpe3JldHVybiBjLmdldCh5bWUoYyxsKSl9ZnVuY3Rpb24geW1lKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJn''@;'; put 'put ''dW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgUXA9bmV3IFdlYWtNYXAsJGQ9bmV3IFdlYWtNYXAsQjk9bmV3IFdlYWtNYXA7Y2xhc3MgVTN0e2NvbnN0cnVjdG9yKCl7JFEo''@;'; put 'put ''dGhpcyxRcCxuZXcgQTN0KSwkUSh0aGlzLCRkLG5ldyBGM3QocWMoUXAsdGhpcykpKSwkUSh0aGlzLEI5LFtbXV0pfXNldFN0YXRlKGwpe3FjKFFwLHRoaXMpLnNldERhdGEobCk7bGV0IGE9ITE7dHJ5e3FjKCRkLHRoaXMpLmJ1aWxkVHJlZSgpfWNhdGNoe3FjKCRkLHRoaXMpLmNsZWFyKCks''@;'; put 'put ''cWMoUXAsdGhpcykuY2xlYXIoKSxhPSEwfXJldHVybiBjQShCOSx0aGlzLE1IKHFjKCRkLHRoaXMpLmdldFJvb3RzKCkpKSxhfXNldENvbHVtbnNMaW1pdChsKXtxYyhRcCx0aGlzKS5zZXRDb2x1bW5zTGltaXQobCl9bWVyZ2VTdGF0ZVdpdGgobCl7Y29uc3QgYT15cyhsLGQ9PntsZXR7cm93''@;'; put 'put ''OmgsLi4uZn09ZDtyZXR1cm57cm93Omg8MD90aGlzLnJvd0Nvb3Jkc1RvTGV2ZWwoaCk6aCwuLi5mfX0pO3FjKFFwLHRoaXMpLm1lcmdlV2l0aChhKSxxYygkZCx0aGlzKS5idWlsZFRyZWUoKSxjQShCOSx0aGlzLE1IKHFjKCRkLHRoaXMpLmdldFJvb3RzKCkpKX1tYXBTdGF0ZShsKXtxYyhR''@;'; put 'put ''cCx0aGlzKS5tYXAobCkscWMoJGQsdGhpcykuYnVpbGRUcmVlKCksY0EoQjksdGhpcyxNSChxYygkZCx0aGlzKS5nZXRSb290cygpKSl9bWFwTm9kZXMobCl7cmV0dXJuIHF1KHFjKCRkLHRoaXMpLmdldFJvb3RzKCksKGEsZCk9PihkLndhbGtEb3duKGg9Pntjb25zdCBmPWwoaC5kYXRhKTt2''@;'; put 'put ''b2lkIDAhPT1mJiZhLnB1c2goZil9KSxhKSxbXSl9dHJpZ2dlck5vZGVNb2RpZmljYXRpb24obCxhLGQpe2E8MCYmKGE9dGhpcy5yb3dDb29yZHNUb0xldmVsKGEpKTtjb25zdCBoPXFjKCRkLHRoaXMpLmdldE5vZGUoYSxkKTtsZXQgZjtyZXR1cm4gaCYmKGY9ZnVuY3Rpb24gVjN0KGMsbCxh''@;'; put 'put ''KXtpZighYm1lLmhhcyhjKSl0aHJvdyBuZXcgRXJyb3IoYFRoZSBub2RlIG1vZGlmaWVyIGFjdGlvbiAoIiR7Y30iKSBkb2VzIG5vdCBleGlzdC5gKTtyZXR1cm4gYm1lLmdldChjKShsLGEpfShsLGgsZCksY0EoQjksdGhpcyxNSChxYygkZCx0aGlzKS5nZXRSb290cygpKSkpLGZ9dHJpZ2dl''@;'; put 'put ''ckNvbHVtbk1vZGlmaWNhdGlvbihsLGEpe3JldHVybiB0aGlzLnRyaWdnZXJOb2RlTW9kaWZpY2F0aW9uKGwsLTEsYSl9cm93Q29vcmRzVG9MZXZlbChsKXtpZihsPj0wKXJldHVybiBudWxsO2NvbnN0IGE9bCtNYXRoLm1heCh0aGlzLmdldExheWVyc0NvdW50KCksMSk7cmV0dXJuIGE8MD9u''@;'; put 'put ''dWxsOmF9bGV2ZWxUb1Jvd0Nvb3JkcyhsKXtpZihsPDApcmV0dXJuIG51bGw7Y29uc3QgYT1sLU1hdGgubWF4KHRoaXMuZ2V0TGF5ZXJzQ291bnQoKSwxKTtyZXR1cm4gYT49MD9udWxsOmF9Z2V0SGVhZGVyU2V0dGluZ3MobCxhKXt2YXIgZCxoO3JldHVybiBsPDAmJihsPXRoaXMucm93Q29v''@;'; put 'put ''cmRzVG9MZXZlbChsKSksbnVsbD09PWx8fGw+PXRoaXMuZ2V0TGF5ZXJzQ291bnQoKT9udWxsOm51bGwhPT0oZD1udWxsPT09KGg9cWMoQjksdGhpcylbbF0pfHx2b2lkIDA9PT1oP3ZvaWQgMDpoW2FdKSYmdm9pZCAwIT09ZD9kOm51bGx9Z2V0SGVhZGVyVHJlZU5vZGVEYXRhKGwsYSl7Y29u''@;'; put 'put ''c3QgZD10aGlzLmdldEhlYWRlclRyZWVOb2RlKGwsYSk7cmV0dXJuIGQ/ey4uLmQuZGF0YX06bnVsbH1nZXRIZWFkZXJUcmVlTm9kZShsLGEpe3JldHVybiBsPDAmJihsPXRoaXMucm93Q29vcmRzVG9MZXZlbChsKSksbnVsbD09PWx8fGw+PXRoaXMuZ2V0TGF5ZXJzQ291bnQoKT9udWxsOnFj''@;'; put 'put ''KCRkLHRoaXMpLmdldE5vZGUobCxhKXx8bnVsbH1maW5kVG9wTW9zdEVudGlyZUhlYWRlckxldmVsKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpsO2NvbnN0IGQ9YS1sKzE7bGV0IGg9ITEsZj1udWxsO2ZvcihsZXQgdj1s''@;'; put 'put ''O3Y8PWE7disrKXtjb25zdCBNPXFjKCRkLHRoaXMpLmdldFJvb3RCeUNvbHVtbih2KTtpZighTSlicmVhaztoPSEwLE0ud2Fsa0Rvd24oRD0+e2NvbnN0e2NvbHVtbkluZGV4OlosaGVhZGVyTGV2ZWw6bmUsb3JpZ0NvbHNwYW46Y2UsaXNIaWRkZW46YmV9PUQuZGF0YTtiZXx8Y2U8PWQmJlo+''@;'; put 'put ''PWwmJlorY2UtMTw9YSYmKG51bGw9PT1mfHxuZTxmKSYmKGY9bmUpfSxkbWUpfXJldHVybiBoJiZudWxsPT09Zj8tMTp0aGlzLmxldmVsVG9Sb3dDb29yZHMoZj8/MCl9ZmluZExlZnRNb3N0Q29sdW1uSW5kZXgobCxhKXt2YXIgZDtjb25zdHtpc1Jvb3Q6aH09bnVsbCE9PShkPXRoaXMuZ2V0''@;'; put 'put ''SGVhZGVyU2V0dGluZ3MobCxhKSkmJnZvaWQgMCE9PWQ/ZDp7aXNSb290OiEwfTtpZihoKXJldHVybiBhO2xldCBmPWEtMTtmb3IoO2Y+PTA7KXt2YXIgdjtjb25zdHtpc1Jvb3Q6TX09bnVsbCE9PSh2PXRoaXMuZ2V0SGVhZGVyU2V0dGluZ3MobCxmKSkmJnZvaWQgMCE9PXY/djp7aXNSb290''@;'; put 'put ''OiEwfTtpZihNKWJyZWFrO2YtPTF9cmV0dXJuIGZ9ZmluZFJpZ2h0TW9zdENvbHVtbkluZGV4KGwsYSl7dmFyIGQ7Y29uc3R7aXNSb290Omgsb3JpZ0NvbHNwYW46Zn09bnVsbCE9PShkPXRoaXMuZ2V0SGVhZGVyU2V0dGluZ3MobCxhKSkmJnZvaWQgMCE9PWQ/ZDp7aXNSb290OiEwLG9yaWdD''@;'; put 'put ''b2xzcGFuOjF9O2lmKGgpcmV0dXJuIGErZi0xO2xldCB2PWErMTtmb3IoO3Y8dGhpcy5nZXRDb2x1bW5zQ291bnQoKTspe3ZhciBNO2NvbnN0e2lzUm9vdDpEfT1udWxsIT09KE09dGhpcy5nZXRIZWFkZXJTZXR0aW5ncyhsLHYpKSYmdm9pZCAwIT09TT9NOntpc1Jvb3Q6ITB9O2lmKEQpYnJl''@;'; put 'put ''YWs7dis9MX1yZXR1cm4gdi0xfWdldExheWVyc0NvdW50KCl7cmV0dXJuIHFjKFFwLHRoaXMpLmdldExheWVyc0NvdW50KCl9Z2V0Q29sdW1uc0NvdW50KCl7cmV0dXJuIHFjKFFwLHRoaXMpLmdldENvbHVtbnNDb3VudCgpfWNsZWFyKCl7Y0EoQjksdGhpcyxbXSkscWMoUXAsdGhpcykuY2xl''@;'; put 'put ''YXIoKSxxYygkZCx0aGlzKS5jbGVhcigpfX1mdW5jdGlvbiB1QShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gWjN0KGMpe3ZhciBsPWZ1bmN0aW9uIFczdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQg''@;'; put 'put ''MCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVt''@;'; put 'put ''YmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgRzN0PWNsYXNz''@;'; put 'put ''IFkzdHtjb25zdHJ1Y3RvcihsLGEpe3VBKHRoaXMsImhvdCIsdm9pZCAwKSx1QSh0aGlzLCJuZXN0ZWRIZWFkZXJTZXR0aW5nc0dldHRlciIsdm9pZCAwKSx1QSh0aGlzLCJsYXllcnNDb3VudCIsMCksdUEodGhpcywiY29udGFpbmVyIix2b2lkIDApLHVBKHRoaXMsIndpZHRoc01hcCIsdm9p''@;'; put 'put ''ZCAwKSx0aGlzLmhvdD1sLHRoaXMubmVzdGVkSGVhZGVyU2V0dGluZ3NHZXR0ZXI9YSx0aGlzLndpZHRoc01hcD10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5jcmVhdGVBbmRSZWdpc3RlckluZGV4TWFwKCJuZXN0ZWRIZWFkZXJzLndpZHRoc01hcCIsInBoeXNpY2FsSW5kZXhUb1ZhbHVl''@;'; put 'put ''Iil9c2V0TGF5ZXJzQ291bnQobCl7cmV0dXJuIHRoaXMubGF5ZXJzQ291bnQ9bCx0aGlzfWdldFdpZHRoKGwpe3JldHVybiB0aGlzLndpZHRoc01hcC5nZXRWYWx1ZUF0SW5kZXgodGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihsKSl9YnVpbGRXaWR0aHNNYXAoKXtjb25zdCBsPXRoaXMuaG90''@;'; put 'put ''LmdldEN1cnJlbnRUaGVtZU5hbWUoKTt0aGlzLmNvbnRhaW5lcj10aGlzLmhvdC5yb290RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdGhpcy5jb250YWluZXIuY2xhc3NMaXN0LmFkZCgiaGFuZHNvbnRhYmxlIiwiaHRHaG9zdFRhYmxlIiwiaHRBdXRvU2l6ZSIpLGwmJnRoaXMuY29u''@;'; put 'put ''dGFpbmVyLmNsYXNzTGlzdC5hZGQobCksdGhpcy5fYnVpbGRHaG9zdFRhYmxlKHRoaXMuY29udGFpbmVyKSx0aGlzLmhvdC5yb290RG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmNvbnRhaW5lcik7Y29uc3QgYT10aGlzLmNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCJ0cjpsYXN0''@;'; put 'put ''LW9mLXR5cGUgdGgiKSxkPWEubGVuZ3RoO3RoaXMud2lkdGhzTWFwLmNsZWFyKCk7Zm9yKGxldCBoPTA7aDxkO2grKyl7Y29uc3QgZj10aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5nZXRWaXN1YWxGcm9tUmVuZGVyYWJsZUluZGV4KGgpLHY9dGhpcy5ob3QudG9QaHlzaWNhbENvbHVtbihm''@;'; put 'put ''KTt0aGlzLndpZHRoc01hcC5zZXRWYWx1ZUF0SW5kZXgodixhW2hdLm9mZnNldFdpZHRoKX10aGlzLmNvbnRhaW5lci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuY29udGFpbmVyKSx0aGlzLmNvbnRhaW5lcj1udWxsfV9idWlsZEdob3N0VGFibGUobCl7Y29uc3R7cm9vdERvY3VtZW50''@;'; put 'put ''OmEsY29sdW1uSW5kZXhNYXBwZXI6ZH09dGhpcy5ob3QsaD1hLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxmPWEuY3JlYXRlRWxlbWVudCgidGFibGUiKSx2PSEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5kcm9wZG93bk1lbnUsTT1kLmdldFJlbmRlcmFibGVJbmRleGVzTGVuZ3RoKCk7Zm9y''@;'; put 'put ''KGxldCBEPTA7RDx0aGlzLmxheWVyc0NvdW50O0QrKyl7Y29uc3QgWj1hLmNyZWF0ZUVsZW1lbnQoInRyIik7Zm9yKGxldCBuZT0wO25lPE07bmUrKyl7bGV0IGNlPWQuZ2V0VmlzdWFsRnJvbVJlbmRlcmFibGVJbmRleChuZSk7bnVsbD09PWNlJiYoY2U9bmUpO2NvbnN0IGJlPWEuY3JlYXRl''@;'; put 'put ''RWxlbWVudCgidGgiKSxFZT10aGlzLm5lc3RlZEhlYWRlclNldHRpbmdzR2V0dGVyKEQsY2UpO2lmKEVlJiYoIUVlLmlzUGxhY2Vob2xkZXJ8fEVlLmlzSGlkZGVuKSl7bGV0IEJlPUVlLmxhYmVsO3YmJihCZSs9JzxidXR0b24gY2xhc3M9ImNoYW5nZVR5cGUiPjwvYnV0dG9uPicpLE43KGJl''@;'; put 'put ''LEJlKSxiZS5jb2xTcGFuPUVlLmNvbHNwYW4sWi5hcHBlbmRDaGlsZChiZSl9fWYuYXBwZW5kQ2hpbGQoWil9aC5hcHBlbmRDaGlsZChmKSxsLmFwcGVuZENoaWxkKGgpfWNsZWFyKCl7dGhpcy53aWR0aHNNYXAuY2xlYXIoKSx0aGlzLmNvbnRhaW5lcj1udWxsfX07ZnVuY3Rpb24gX21lKGMs''@;'; put 'put ''bCxhKXtyZXR1cm4obD1mdW5jdGlvbiBLM3QoYyl7dmFyIGw9ZnVuY3Rpb24gcTN0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigi''@;'; put 'put ''b2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlw''@;'; put 'put ''ZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBkQShjLGwsYSl7d21lKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiB3bWUoYyxs''@;'; put 'put ''KXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIFpnKGMsbCxhKXtyZXR1cm4gYy5zZXQoWGMoYyxsKSxhKSxhfWZ1bmN0aW9uIF9zKGMsbCl7cmV0''@;'; put 'put ''dXJuIGMuZ2V0KFhjKGMsbCkpfWZ1bmN0aW9uIFhjKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhp''@;'; put 'put ''cyBvYmplY3QiKX1jb25zdCBDbWU9Im5lc3RlZEhlYWRlcnMiO3ZhciBBbD1uZXcgV2Vha01hcCx5Nj1uZXcgV2Vha01hcCxoQT1uZXcgV2Vha01hcCx4SD1uZXcgV2Vha01hcCxFSD1uZXcgV2Vha01hcCxkdT1uZXcgV2Vha1NldDtjbGFzcyBKM3QgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigp''@;'; put 'put ''e3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gJDN0KGMsbCl7d21lKGMsbCksbC5hZGQoYyl9KHRoaXMsZHUpLGRBKHRoaXMsQWwsbmV3IFUzdCksZEEodGhpcyx5NixudWxsKSxkQSh0aGlzLGhBLG51bGwpLGRBKHRoaXMseEgsITEpLGRBKHRoaXMsRUgsbnVsbCksX21lKHRoaXMsImdo''@;'; put 'put ''b3N0VGFibGUiLG5ldyBHM3QodGhpcy5ob3QsKGwsYSk9PnRoaXMuZ2V0SGVhZGVyU2V0dGluZ3MobCxhKSkpLF9tZSh0aGlzLCJkZXRlY3RlZE92ZXJsYXBwZWRIZWFkZXJzIiwhMSl9c3RhdGljIGdldCBQTFVHSU5fS0VZKCl7cmV0dXJuIENtZX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklU''@;'; put 'put ''WSgpe3JldHVybiAyODB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0NtZV19ZW5hYmxlUGx1Z2luKCl7dmFyIGw9dGhpcztpZih0aGlzLmVuYWJsZWQpcmV0dXJuO2NvbnN0e25lc3RlZEhlYWRlcnM6YX09dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTsoIUFycmF5''@;'; put 'put ''LmlzQXJyYXkoYSl8fCFBcnJheS5pc0FycmF5KGFbMF0pKSYmdGwoZmxgWW91ciBOZXN0ZWQgSGVhZGVycyBwbHVnaW4gY29uZmlndXJhdGlvbiBpcyBpbnZhbGlkLiBUaGUgc2V0dGluZ3MgaGFzIHRvIGJlXHgyMAogICAgICAgICAgICAgICAgICAgICAgICBwYXNzZWQgYXMgYW4gYXJyYXkg''@;'; put 'put ''b2YgYXJyYXlzIGUucS4gW1snQTEnLCB7IGxhYmVsOiAnQTInLCBjb2xzcGFuOiAyIH1dXWApLHRoaXMuYWRkSG9vaygiaW5pdCIsKCk9PlhjKGR1LHRoaXMscHB0KS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyTG9hZERhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIFhjKGR1LGwsZ3B0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlRG93biIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxo''@;'; put 'put ''PW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gWGMoZHUsbCxucHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJPbkNlbGxNb3VzZURvd24iLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXko''@;'; put 'put ''ZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIFhjKGR1LGwscnB0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZU9uQ2VsbE1vdXNlT3ZlciIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7Zjxk''@;'; put 'put ''O2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gWGMoZHUsbCxpcHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlT25DZWxsTW91c2VVcCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFy''@;'; put 'put ''Z3VtZW50c1tmXTtyZXR1cm4gWGMoZHUsbCxvcHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlU2VsZWN0aW9uSGlnaGxpZ2h0U2V0IixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1l''@;'; put 'put ''bnRzW2ZdO3JldHVybiBYYyhkdSxsLGFwdCkuY2FsbChsLC4uLmgpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlUcmFuc2Zvcm1TdGFydCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1''@;'; put 'put ''cm4gWGMoZHUsbCxzcHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJTZWxlY3Rpb24iLCgpPT5YYyhkdSx0aGlzLFRIKS5jYWxsKHRoaXMpKSx0aGlzLmFkZEhvb2soImFmdGVyU2VsZWN0aW9uRm9jdXNTZXQiLCgpPT5YYyhkdSx0aGlzLFRIKS5jYWxsKHRoaXMpKSx0aGlz''@;'; put 'put ''LmFkZEhvb2soImJlZm9yZVZpZXdwb3J0U2Nyb2xsSG9yaXpvbnRhbGx5IixmdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQpLGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBYYyhkdSxsLFEzdCkuY2FsbChsLC4uLmgpfSksdGhp''@;'; put 'put ''cy5hZGRIb29rKCJhZnRlckdldENvbHVtbkhlYWRlclJlbmRlcmVycyIsZD0+WGMoZHUsdGhpcyxjcHQpLmNhbGwodGhpcyxkKSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2xXaWR0aCIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7Zjxk''@;'; put 'put ''O2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gWGMoZHUsbCxkcHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5Q29sdW1uSGVhZGVyVmFsdWUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtm''@;'; put 'put ''XT1hcmd1bWVudHNbZl07cmV0dXJuIFhjKGR1LGwsaHB0KS5jYWxsKGwsLi4uaCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZUhpZ2hsaWdodGluZ0NvbHVtbkhlYWRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2Zd''@;'; put 'put ''PWFyZ3VtZW50c1tmXTtyZXR1cm4gWGMoZHUsbCxlcHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQ29weSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4g''@;'; put 'put ''WGMoZHUsbCx0cHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlU2VsZWN0Q29sdW1ucyIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gWGMoZHUsbCxscHQp''@;'; put 'put ''LmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJWaWV3cG9ydENvbHVtbkNhbGN1bGF0b3JPdmVycmlkZSIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2YrKyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gWGMoZHUs''@;'; put 'put ''bCx1cHQpLmNhbGwobCwuLi5oKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5Rm9jdXNlZEVsZW1lbnQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBkPWFyZ3VtZW50cy5sZW5ndGgsaD1uZXcgQXJyYXkoZCksZj0wO2Y8ZDtmKyspaFtmXT1hcmd1bWVudHNbZl07cmV0dXJuIFhjKGR1LGwsZnB0KS5jYWxs''@;'; put 'put ''KGwsLi4uaCl9KSx0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5hZGRMb2NhbEhvb2soImNhY2hlVXBkYXRlZCIsKCk9PlhjKGR1LHRoaXMsVEgpLmNhbGwodGhpcykpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmFkZExvY2FsSG9vaygiY2FjaGVVcGRhdGVkIiwoKT0+WGMoZHUsdGhpcyxU''@;'; put 'put ''SCkuY2FsbCh0aGlzKSksc3VwZXIuZW5hYmxlUGx1Z2luKCksdGhpcy51cGRhdGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXtpZighdGhpcy5ob3QudmlldylyZXR1cm47Y29uc3R7bmVzdGVkSGVhZGVyczpsfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpO19zKEFsLHRoaXMpLnNldENvbHVtbnNM''@;'; put 'put ''aW1pdCh0aGlzLmhvdC5jb3VudENvbHMoKSksQXJyYXkuaXNBcnJheShsKSYmKHRoaXMuZGV0ZWN0ZWRPdmVybGFwcGVkSGVhZGVycz1fcyhBbCx0aGlzKS5zZXRTdGF0ZShsKSksdGhpcy5kZXRlY3RlZE92ZXJsYXBwZWRIZWFkZXJzJiZ0bChmbGBZb3VyIE5lc3RlZCBIZWFkZXJzIHBsdWdp''@;'; put 'put ''biBzZXR1cCBjb250YWlucyBvdmVybGFwcGluZyBoZWFkZXJzLiBUaGlzIGtpbmQgb2YgY29uZmlndXJhdGlvblx4MjAKICAgICAgICAgICAgICAgICAgICAgICAgaXMgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQuYCksdGhpcy5lbmFibGVkJiZ0aGlzLmhvdC5jb2x1bW5JbmRleE1hcHBlci5o''@;'; put 'put ''aWRpbmdNYXBzQ29sbGVjdGlvbi5nZXRNZXJnZWRWYWx1ZXMoKS5mb3JFYWNoKChhLGQpPT57Y29uc3QgaD0hMD09PWE/ImhpZGUtY29sdW1uIjoic2hvdy1jb2x1bW4iO19zKEFsLHRoaXMpLnRyaWdnZXJDb2x1bW5Nb2RpZmljYXRpb24oaCxkKX0pLCFfcyh5Nix0aGlzKSYmdGhpcy5lbmFi''@;'; put 'put ''bGVkJiZaZyh5Nix0aGlzLHRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmNyZWF0ZUNoYW5nZXNPYnNlcnZlcigiaGlkaW5nIikuc3Vic2NyaWJlKGE9PnthLmZvckVhY2goZD0+e2xldHtvcDpoLGluZGV4OmYsbmV3VmFsdWU6dn09ZDtpZigicmVwbGFjZSI9PT1oKXtjb25zdCBNPSEwPT09''@;'; put 'put ''dj8iaGlkZS1jb2x1bW4iOiJzaG93LWNvbHVtbiI7X3MoQWwsdGhpcykudHJpZ2dlckNvbHVtbk1vZGlmaWNhdGlvbihNLGYpfX0pLHRoaXMuZ2hvc3RUYWJsZS5idWlsZFdpZHRoc01hcCgpfSkpLHRoaXMuZ2hvc3RUYWJsZS5zZXRMYXllcnNDb3VudCh0aGlzLmdldExheWVyc0NvdW50KCkp''@;'; put 'put ''LmJ1aWxkV2lkdGhzTWFwKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuY2xlYXJDb2xzcGFucygpLF9zKEFsLHRoaXMpLmNsZWFyKCksX3MoeTYsdGhpcykudW5zdWJzY3JpYmUoKSxaZyh5Nix0aGlzLG51bGwpLHRoaXMuZ2hvc3RUYWJsZS5jbGVhcigpLHN1''@;'; put 'put ''cGVyLmRpc2FibGVQbHVnaW4oKX1nZXRTdGF0ZU1hbmFnZXIoKXtyZXR1cm4gX3MoQWwsdGhpcyl9Z2V0TGF5ZXJzQ291bnQoKXtyZXR1cm4gX3MoQWwsdGhpcykuZ2V0TGF5ZXJzQ291bnQoKX1nZXRIZWFkZXJTZXR0aW5ncyhsLGEpe3JldHVybiBfcyhBbCx0aGlzKS5nZXRIZWFkZXJTZXR0''@;'; put 'put ''aW5ncyhsLGEpfWNsZWFyQ29sc3BhbnMoKXtpZighdGhpcy5ob3QudmlldylyZXR1cm47Y29uc3R7X3d0Omx9PXRoaXMuaG90LnZpZXcsYT1sLmdldFNldHRpbmcoImNvbHVtbkhlYWRlcnMiKS5sZW5ndGgsZD1sLnd0VGFibGUuVEhFQUQsaD1sLnd0T3ZlcmxheXMudG9wT3ZlcmxheS5jbG9u''@;'; put 'put ''ZS53dFRhYmxlLlRIRUFELGY9bC53dE92ZXJsYXlzLnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheT9sLnd0T3ZlcmxheXMudG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5LmNsb25lLnd0VGFibGUuVEhFQUQ6bnVsbDtmb3IobGV0IHY9MDt2PGE7disrKXtjb25zdCBNPWQuY2hpbGROb2Rl''@;'; put 'put ''c1t2XTtpZighTSlicmVhaztjb25zdCBEPWguY2hpbGROb2Rlc1t2XSxaPWY/Zi5jaGlsZE5vZGVzW3ZdOm51bGw7Zm9yKGxldCBuZT0wLGNlPU0uY2hpbGROb2Rlcy5sZW5ndGg7bmU8Y2U7bmUrKylNLmNoaWxkTm9kZXNbbmVdLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLGNhKE0uY2hp''@;'; put 'put ''bGROb2Rlc1tuZV0sImhpZGRlbkhlYWRlciIpLEQmJkQuY2hpbGROb2Rlc1tuZV0mJihELmNoaWxkTm9kZXNbbmVdLnJlbW92ZUF0dHJpYnV0ZSgiY29sc3BhbiIpLGNhKEQuY2hpbGROb2Rlc1tuZV0sImhpZGRlbkhlYWRlciIpKSxmJiZaJiZaLmNoaWxkTm9kZXNbbmVdJiYoWi5jaGlsZE5v''@;'; put 'put ''ZGVzW25lXS5yZW1vdmVBdHRyaWJ1dGUoImNvbHNwYW4iKSxjYShaLmNoaWxkTm9kZXNbbmVdLCJoaWRkZW5IZWFkZXIiKSl9fWhlYWRlclJlbmRlcmVyRmFjdG9yeShsKXt2YXIgYT10aGlzO2NvbnN0IGQ9dGhpcy5ob3Qudmlldy5fd3QuZ2V0U2V0dGluZygiZml4ZWRDb2x1bW5zU3RhcnQi''@;'; put 'put ''KTtyZXR1cm4oaCxmKT0+e3ZhciB2O2NvbnN0e2NvbHVtbkluZGV4TWFwcGVyOk0sdmlldzpEfT10aGlzLmhvdDtsZXQgWj1NLmdldFZpc3VhbEZyb21SZW5kZXJhYmxlSW5kZXgoaCk7bnVsbD09PVomJihaPWgpLGYucmVtb3ZlQXR0cmlidXRlKCJjb2xzcGFuIiksY2EoZiwiaGlkZGVuSGVh''@;'; put 'put ''ZGVyIiksY2EoZiwiaGlkZGVuSGVhZGVyVGV4dCIpO2NvbnN0e2NvbHNwYW46bmUsaXNIaWRkZW46Y2UsaXNQbGFjZWhvbGRlcjpiZSxoZWFkZXJDbGFzc05hbWVzOkVlfT1udWxsIT09KHY9X3MoQWwsdGhpcykuZ2V0SGVhZGVyU2V0dGluZ3MobCxaKSkmJnZvaWQgMCE9PXY/djp7bGFiZWw6''@;'; put 'put ''IiJ9O2lmKGJlfHxjZSlUaShmLCJoaWRkZW5IZWFkZXIiKTtlbHNlIGlmKG5lPjEpe3ZhciBCZSxxZSxudDtjb25zdHt3dE92ZXJsYXlzOmx0fT1ELl93dCxtdD1udWxsPT09KEJlPWx0LnRvcElubGluZVN0YXJ0Q29ybmVyT3ZlcmxheSl8fHZvaWQgMD09PUJlP3ZvaWQgMDpCZS5jbG9uZS53''@;'; put 'put ''dFRhYmxlLlRIRUFELmNvbnRhaW5zKGYpLEp0PW51bGw9PT0ocWU9bHQuaW5saW5lU3RhcnRPdmVybGF5KXx8dm9pZCAwPT09cWU/dm9pZCAwOnFlLmNsb25lLnd0VGFibGUuVEhFQUQuY29udGFpbnMoZik7KG51bGw9PT0obnQ9bHQudG9wT3ZlcmxheSl8fHZvaWQgMD09PW50P3ZvaWQgMDpu''@;'; put 'put ''dC5jbG9uZS53dFRhYmxlLlRIRUFELmNvbnRhaW5zKGYpKSYmWjxkJiZUaShmLCJoaWRkZW5IZWFkZXJUZXh0Iik7Y29uc3QgQ249bXR8fEp0P01hdGgubWluKG5lLGQtaCk6bmU7Q24+MSYmZi5zZXRBdHRyaWJ1dGUoImNvbHNwYW4iLENuKX1pZih0aGlzLmhvdC52aWV3LmFwcGVuZENvbEhl''@;'; put 'put ''YWRlcihaLGYsZnVuY3Rpb24oKXtyZXR1cm4gYS5nZXRDb2x1bW5IZWFkZXJWYWx1ZSguLi5hcmd1bWVudHMpfSxsKSwhYmUmJiFjZSl7Y29uc3QgbHQ9Zi5xdWVyeVNlbGVjdG9yKCJkaXYucmVsYXRpdmUiKTtsdCYmRWUmJkVlLmxlbmd0aD4wJiYoY2EobHQsdGhpcy5ob3QuZ2V0Q29sdW1u''@;'; put 'put ''TWV0YShaKS5oZWFkZXJDbGFzc05hbWUpLFRpKGx0LEVlKSl9fX1nZXRDb2x1bW5IZWFkZXJWYWx1ZShsLGEpe3ZhciBkO2NvbnN0e2lzSGlkZGVuOmgsaXNQbGFjZWhvbGRlcjpmfT1udWxsIT09KGQ9X3MoQWwsdGhpcykuZ2V0SGVhZGVyU2V0dGluZ3MoYSxsKSkmJnZvaWQgMCE9PWQ/ZDp7''@;'; put 'put ''fTtyZXR1cm4gZnx8aD8iIjp0aGlzLmhvdC5nZXRDb2xIZWFkZXIobCxhKX1kZXN0cm95KCl7WmcoQWwsdGhpcyxudWxsKSxudWxsIT09X3MoeTYsdGhpcykmJihfcyh5Nix0aGlzKS51bnN1YnNjcmliZSgpLFpnKHk2LHRoaXMsbnVsbCkpLHN1cGVyLmRlc3Ryb3koKX1fZ2V0SGVhZGVyVHJl''@;'; put 'put ''ZU5vZGVEYXRhQnlDb29yZHMobCl7aWYoIShsLnJvdz49MHx8bC5jb2w8MCkpcmV0dXJuIF9zKEFsLHRoaXMpLmdldEhlYWRlclRyZWVOb2RlRGF0YShsLnJvdyxsLmNvbCl9fWZ1bmN0aW9uIFRIKCl7dmFyIGM7Y29uc3QgbD1udWxsPT09KGM9dGhpcy5ob3QpfHx2b2lkIDA9PT1jP3ZvaWQg''@;'; put 'put ''MDpjLmdldFNlbGVjdGVkUmFuZ2VMYXN0KCk7aWYoIWwpcmV0dXJuO2NvbnN0e2hpZ2hsaWdodDphfT1sO2lmKGEuaXNIZWFkZXIoKSYmYS5jb2w+PTApe2NvbnN0IGg9X3MoQWwsdGhpcykuZmluZExlZnRNb3N0Q29sdW1uSW5kZXgoYS5yb3csYS5jb2wpLGY9dGhpcy5ob3Quc2VsZWN0aW9u''@;'; put 'put ''LmhpZ2hsaWdodC5nZXRGb2N1cygpO2YudmlzdWFsQ2VsbFJhbmdlLmhpZ2hsaWdodC5jb2w9aCxmLnZpc3VhbENlbGxSYW5nZS5mcm9tLmNvbD1oLGYudmlzdWFsQ2VsbFJhbmdlLnRvLmNvbD1oLGYuY29tbWl0KCl9fWZ1bmN0aW9uIFEzdChjLGwpe3ZhciBhO2NvbnN0IGQ9dGhpcy5ob3Qu''@;'; put 'put ''Z2V0U2VsZWN0ZWRSYW5nZUxhc3QoKTtpZighZClyZXR1cm4gYztjb25zdHtoaWdobGlnaHQ6aH09ZCx7bmF2aWdhYmxlSGVhZGVyczpmfT10aGlzLmhvdC5nZXRTZXR0aW5ncygpLHY9dGhpcy5ob3Quc2VsZWN0aW9uLmlzU2VsZWN0ZWRCeUNvbHVtbkhlYWRlcigpLE09Zj9oLnJvdzpudWxs''@;'; put 'put ''PT09KGE9X3MoRUgsdGhpcykpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnJvdyxEPXY/YzpoLmNvbCxaPU08MCYmRD49MDtpZihaZyhFSCx0aGlzLG51bGwpLCFaKXJldHVybiBjO2NvbnN0IG5lPXRoaXMuaG90LmdldEZpcnN0RnVsbHlWaXNpYmxlQ29sdW1uKCksY2U9dGhpcy5ob3QuZ2V0TGFz''@;'; put 'put ''dEZ1bGx5VmlzaWJsZUNvbHVtbigpLGJlPWNlLW5lKzEsRWU9X3MoQWwsdGhpcykuZmluZExlZnRNb3N0Q29sdW1uSW5kZXgoTSxEKSxCZT1fcyhBbCx0aGlzKS5maW5kUmlnaHRNb3N0Q29sdW1uSW5kZXgoTSxEKSxxZT1CZS1FZSsxO2lmKEVlPG5lJiZCZT5jZSlyZXR1cm4gRWU7aWYodil7''@;'; put 'put ''bGV0IG50PW51bGw7cmV0dXJuIEVlPj1uZSYmQmU+Y2U/cWU+YmU/KGwudmFsdWU9InN0YXJ0IixudD1FZSk6KGwudmFsdWU9ImVuZCIsbnQ9QmUpOkVlPG5lJiZCZTw9Y2UmJihxZT5iZT8obC52YWx1ZT0iZW5kIixudD1CZSk6KGwudmFsdWU9InN0YXJ0IixudD1FZSkpLG50fXJldHVybiBF''@;'; put 'put ''ZTw9bmU/RWU6QmV9ZnVuY3Rpb24gZXB0KGMsbCxhKXtjb25zdCBkPV9zKEFsLHRoaXMpLmdldEhlYWRlclRyZWVOb2RlRGF0YShsLGMpO2lmKCFkKXJldHVybiBjO2NvbnN0e2NvbHVtbkN1cnNvcjpoLHNlbGVjdGlvblR5cGU6ZixzZWxlY3Rpb25XaWR0aDp2fT1hLHtpc1Jvb3Q6TSxjb2xz''@;'; put 'put ''cGFuOkR9PV9zKEFsLHRoaXMpLmdldEhlYWRlclNldHRpbmdzKGwsYyk7aWYoZj09PWlYKXtpZighTSlyZXR1cm4gZC5jb2x1bW5JbmRleH1lbHNlIGlmKGY9PT1UM2UmJihEPnYtaHx8IU0pKXJldHVybiBudWxsO3JldHVybiBjfWZ1bmN0aW9uIHRwdChjLGwsYSl7bGV0e2NvbHVtbkhlYWRl''@;'; put 'put ''cnNDb3VudDpkfT1hO2lmKDAhPT1kKWZvcihsZXQgZj0wO2Y8bC5sZW5ndGg7ZisrKXtjb25zdHtzdGFydFJvdzp2LHN0YXJ0Q29sOk0sZW5kUm93OkQsZW5kQ29sOlp9PWxbZl0sbmU9RC12KzE7aWYodj49MHx8MT09TS1aKzEpYnJlYWs7Zm9yKGxldCBiZT1NO2JlPD1aO2JlKyspZm9yKGxl''@;'; put 'put ''dCBFZT12O0VlPD1EO0VlKyspe3ZhciBoO2NvbnN0IEJlPW5lK0VlLHFlPWJlLU07MCE9PXFlJiYhMT09PShudWxsPT09KGg9X3MoQWwsdGhpcykuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKEVlLGJlKSl8fHZvaWQgMD09PWg/dm9pZCAwOmguaXNSb290KSYmKGNbQmVdW3FlXT0iIil9fX1mdW5j''@;'; put 'put ''dGlvbiBucHQoYyxsLGEsZCl7dGhpcy5fZ2V0SGVhZGVyVHJlZU5vZGVEYXRhQnlDb29yZHMobCkmJihkLmNvbHVtbj0hMCl9ZnVuY3Rpb24gcnB0KGMsbCl7Y29uc3QgYT10aGlzLl9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3JkcyhsKTtpZighYSlyZXR1cm47WmcoaEEsdGhpcyxsLmNs''@;'; put 'put ''b25lKCkpLFpnKHhILHRoaXMsITApO2NvbnN0e3NlbGVjdGlvbjpkfT10aGlzLmhvdCxoPWQuaXNTZWxlY3RlZCgpP2QuZ2V0U2VsZWN0ZWRSYW5nZSgpLmN1cnJlbnQoKTpudWxsLGY9W10se2NvbHVtbkluZGV4OnYsb3JpZ0NvbHNwYW46TX09YSxEPSFkLmluSW5TZWxlY3Rpb24obCk7Yy5z''@;'; put 'put ''aGlmdEtleSYmaD9sLmNvbDxoLmZyb20uY29sP2YucHVzaChoLmdldFRvcEVuZENvcm5lcigpLmNvbCx2LGwucm93KTpmLnB1c2gobC5jb2w+aC5mcm9tLmNvbD9oLmdldFRvcFN0YXJ0Q29ybmVyKCkuY29sOnYsditNLTEsbC5yb3cpOihOTyhjKXx8UG0oYykmJkR8fEIyZShjKSkmJmYucHVz''@;'; put 'put ''aCh2LHYrTS0xLGwucm93KSxkLnNlbGVjdENvbHVtbnMoLi4uZil9ZnVuY3Rpb24gaXB0KGMsbCxhLGQpe2lmKCF0aGlzLmhvdC52aWV3LmlzTW91c2VEb3duKCl8fGQuY29sdW1uKXJldHVybjtjb25zdCBoPXRoaXMuX2dldEhlYWRlclRyZWVOb2RlRGF0YUJ5Q29vcmRzKGwpO2lmKCFoKXJl''@;'; put 'put ''dHVybjtjb25zdHtjb2x1bW5JbmRleDpmLG9yaWdDb2xzcGFuOnZ9PWgsTT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLEQ9TS5nZXRUb3BTdGFydENvcm5lcigpLFo9TS5nZXRCb3R0b21FbmRDb3JuZXIoKSx7ZnJvbTpuZX09TTtkLmNvbHVtbj0hMCxkLmNlbGw9ITA7Y29uc3Qg''@;'; put 'put ''Y2U9W10sYmU9QXMobC5yb3csLTEvMCwtMSk7bC5jb2w8bmUuY29sP2NlLnB1c2goWi5jb2wsZixiZSk6Y2UucHVzaChsLmNvbD5uZS5jb2w/RC5jb2w6ZixmK3YtMSxiZSksdGhpcy5ob3Quc2VsZWN0aW9uLnNlbGVjdENvbHVtbnMoLi4uY2UpfWZ1bmN0aW9uIG9wdCgpe1pnKHhILHRoaXMs''@;'; put 'put ''ITEpfWZ1bmN0aW9uIGFwdCgpe2NvbnN0e25hdmlnYWJsZUhlYWRlcnM6Y309dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKTtpZighdGhpcy5ob3Qudmlldy5pc01vdXNlRG93bigpfHwhX3MoeEgsdGhpcyl8fCFjKXJldHVybjtjb25zdCBsPXRoaXMuaG90LmdldFNlbGVjdGVkUmFuZ2VMYXN0KCks''@;'; put 'put ''YT1sLmdldFRvcFN0YXJ0Q29ybmVyKCkuY29sLGQ9bC5nZXRCb3R0b21FbmRDb3JuZXIoKS5jb2wse2NvbHVtbkluZGV4Omgsb3JpZ0NvbHNwYW46Zn09X3MoQWwsdGhpcykuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKF9zKGhBLHRoaXMpLnJvdyxfcyhoQSx0aGlzKS5jb2wpO2lmKGwuc2V0SGln''@;'; put 'put ''aGxpZ2h0KF9zKGhBLHRoaXMpKSxmPmwuZ2V0V2lkdGgoKXx8aDxhfHxoK2YtMT5kKXtjb25zdCB2PV9zKEFsLHRoaXMpLmZpbmRUb3BNb3N0RW50aXJlSGVhZGVyTGV2ZWwoQXMoYSxoLGgrZi0xKSxBcyhkLGgsaCtmLTEpKTtsLmhpZ2hsaWdodC5yb3c9dixsLmhpZ2hsaWdodC5jb2w9bC5m''@;'; put 'put ''cm9tLmNvbH19ZnVuY3Rpb24gc3B0KGMpe2NvbnN0e2hpZ2hsaWdodDpsfT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpLGE9dGhpcy5ob3QuX2NyZWF0ZUNlbGxDb29yZHMobC5yb3crYy5yb3csbC5jb2wrYy5jb2wpO2lmKCEoYS5pc0hlYWRlcigpJiZhLmNvbD49MCkpcmV0dXJu''@;'; put 'put ''O2NvbnN0IGg9X3MoQWwsdGhpcykuZmluZExlZnRNb3N0Q29sdW1uSW5kZXgoYS5yb3csYS5jb2wpLGY9X3MoQWwsdGhpcykuZmluZFJpZ2h0TW9zdENvbHVtbkluZGV4KGEucm93LGEuY29sKTtpZihjLmNvbDwwKXtjb25zdCBNPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJl''@;'; put 'put ''c3ROb3RIaWRkZW5JbmRleChsLmNvbD49aCYmbC5jb2w8PWY/aC0xOmYsLTEpO2MuY29sPW51bGw9PT1NPy10aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJhbmdlKDAsbC5jb2wpOi1NYXRoLm1heCh0aGlzLmhvdC52aWV3LmNvdW50UmVuZGVyYWJsZUNvbHVtbnNJblJh''@;'; put 'put ''bmdlKE0sbC5jb2wpLTEsMSl9ZWxzZSBpZihjLmNvbD4wKXtjb25zdCBNPXRoaXMuaG90LmNvbHVtbkluZGV4TWFwcGVyLmdldE5lYXJlc3ROb3RIaWRkZW5JbmRleChsLmNvbD49aCYmbC5jb2w8PWY/ZisxOmgsMSk7Yy5jb2w9bnVsbD09PU0/dGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFi''@;'; put 'put ''bGVDb2x1bW5zSW5SYW5nZShsLmNvbCx0aGlzLmhvdC5jb3VudENvbHMoKSk6TWF0aC5tYXgodGhpcy5ob3Qudmlldy5jb3VudFJlbmRlcmFibGVDb2x1bW5zSW5SYW5nZShsLmNvbCxNKS0xLDEpfX1mdW5jdGlvbiBscHQoYyxsLGEpe2NvbnN0IGQ9Yy5yb3csaD10aGlzLl9nZXRIZWFkZXJU''@;'; put 'put ''cmVlTm9kZURhdGFCeUNvb3Jkcyh7cm93OmQsY29sOmMuY29sfSksZj10aGlzLl9nZXRIZWFkZXJUcmVlTm9kZURhdGFCeUNvb3Jkcyh7cm93OmQsY29sOmwuY29sfSk7WmcoRUgsdGhpcyxhLmNsb25lKCkpLGwuY29sPGMuY29sPyhoJiYoYy5jb2w9aC5jb2x1bW5JbmRleCtoLm9yaWdDb2xz''@;'; put 'put ''cGFuLTEpLGYmJihsLmNvbD1mLmNvbHVtbkluZGV4KSk6bC5jb2w+PWMuY29sJiYoaCYmKGMuY29sPWguY29sdW1uSW5kZXgpLGYmJihsLmNvbD1mLmNvbHVtbkluZGV4K2Yub3JpZ0NvbHNwYW4tMSkpfWZ1bmN0aW9uIGNwdChjKXtpZihfcyhBbCx0aGlzKS5nZXRMYXllcnNDb3VudCgpPjAp''@;'; put 'put ''e2MubGVuZ3RoPTA7Zm9yKGxldCBsPTA7bDxfcyhBbCx0aGlzKS5nZXRMYXllcnNDb3VudCgpO2wrKyljLnB1c2godGhpcy5oZWFkZXJSZW5kZXJlckZhY3RvcnkobCkpfX1mdW5jdGlvbiB1cHQoYyl7Y29uc3QgbD1fcyhBbCx0aGlzKS5nZXRMYXllcnNDb3VudCgpO2xldCBhPWMuc3RhcnRD''@;'; put 'put ''b2x1bW4sZD0hIWw7Zm9yKGxldCBoPTA7aDxsO2grKyl7Y29uc3QgZj1fcyhBbCx0aGlzKS5maW5kTGVmdE1vc3RDb2x1bW5JbmRleChoLGMuc3RhcnRDb2x1bW4pLHY9dGhpcy5ob3QuY29sdW1uSW5kZXhNYXBwZXIuZ2V0UmVuZGVyYWJsZUZyb21WaXN1YWxJbmRleChmKTtpZihmPj0wJiYo''@;'; put 'put ''ZD0hMSksdjEodikmJnY8Yy5zdGFydENvbHVtbil7YT12O2JyZWFrfX1jLnN0YXJ0Q29sdW1uPWQ/X3MoQWwsdGhpcykuZ2V0SGVhZGVyVHJlZU5vZGVEYXRhKDAsYSkuY29sdW1uSW5kZXg6YX1mdW5jdGlvbiBkcHQoYyxsKXtjb25zdCBhPXRoaXMuZ2hvc3RUYWJsZS5nZXRXaWR0aChsKTty''@;'; put 'put ''ZXR1cm4gYz5hP2M6YX1mdW5jdGlvbiBocHQoYyxsLGEpe3ZhciBkO2NvbnN0e2xhYmVsOmh9PW51bGwhPT0oZD1fcyhBbCx0aGlzKS5nZXRIZWFkZXJUcmVlTm9kZURhdGEoYSxsKSkmJnZvaWQgMCE9PWQ/ZDp7bGFiZWw6IiJ9O3JldHVybiBofWZ1bmN0aW9uIGZwdChjLGwpe2lmKGM8MCly''@;'; put 'put ''ZXR1cm4gdGhpcy5ob3QuZ2V0Q2VsbChjLF9zKEFsLHRoaXMpLmZpbmRMZWZ0TW9zdENvbHVtbkluZGV4KGMsbCksITApfWZ1bmN0aW9uIHBwdCgpe3RoaXMudXBkYXRlUGx1Z2luKCl9ZnVuY3Rpb24gZ3B0KGMsbCl7bHx8dGhpcy51cGRhdGVQbHVnaW4oKX1mdW5jdGlvbiBmQShjLGwsYSl7''@;'; put 'put ''cmV0dXJuKGw9ZnVuY3Rpb24gbXB0KGMpe3ZhciBsPWZ1bmN0aW9uIHZwdChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVj''@;'; put 'put ''dCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBs''@;'; put 'put ''P2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y29uc3QgeXB0PWNsYXNzIGJwdHtjb25zdHJ1Y3RvcihsLGEpe2ZBKHRoaXMsImhvdCIsdm9pZCAwKSxm''@;'; put 'put ''QSh0aGlzLCJkYXRhIixudWxsKSxmQSh0aGlzLCJwbHVnaW4iLHZvaWQgMCksZkEodGhpcywicGFyZW50UmVmZXJlbmNlIixuZXcgV2Vha01hcCksZkEodGhpcywiY2FjaGUiLHtsZXZlbHM6W10sbGV2ZWxDb3VudDowLHJvd3M6W10sbm9kZUluZm86bmV3IFdlYWtNYXB9KSx0aGlzLmhvdD1h''@;'; put 'put ''LHRoaXMucGx1Z2luPWx9c2V0RGF0YShsKXt0aGlzLmRhdGE9bH1nZXREYXRhKCl7cmV0dXJuIHRoaXMuZGF0YX1nZXRSYXdTb3VyY2VEYXRhKCl7bGV0IGw9bnVsbDtyZXR1cm4gdGhpcy5wbHVnaW4uZGlzYWJsZUNvcmVBUElNb2RpZmllcnMoKSxsPXRoaXMuaG90LmdldFNvdXJjZURhdGEo''@;'; put 'put ''KSx0aGlzLnBsdWdpbi5lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCksbH11cGRhdGVXaXRoRGF0YShsKXt0aGlzLnNldERhdGEobCksdGhpcy5yZXdyaXRlQ2FjaGUoKX1yZXdyaXRlQ2FjaGUoKXt0aGlzLmNhY2hlPXtsZXZlbHM6W10sbGV2ZWxDb3VudDowLHJvd3M6W10sbm9kZUluZm86bmV3''@;'; put 'put ''IFdlYWtNYXB9LCRvKDAsdGhpcy5kYXRhLmxlbmd0aC0xLGw9Pnt0aGlzLmNhY2hlTm9kZSh0aGlzLmRhdGFbbF0sMCxudWxsKX0pfWNhY2hlTm9kZShsLGEsZCl7dGhpcy5jYWNoZS5sZXZlbHNbYV18fCh0aGlzLmNhY2hlLmxldmVsc1thXT1bXSx0aGlzLmNhY2hlLmxldmVsQ291bnQrPTEp''@;'; put 'put ''LHRoaXMuY2FjaGUubGV2ZWxzW2FdLnB1c2gobCksdGhpcy5jYWNoZS5yb3dzLnB1c2gobCksdGhpcy5jYWNoZS5ub2RlSW5mby5zZXQobCx7cGFyZW50OmQscm93OnRoaXMuY2FjaGUucm93cy5sZW5ndGgtMSxsZXZlbDphfSksdGhpcy5oYXNDaGlsZHJlbihsKSYmWW4obC5fX2NoaWxkcmVu''@;'; put 'put ''LGg9Pnt0aGlzLmNhY2hlTm9kZShoLGErMSxsKX0pfWdldERhdGFPYmplY3QobCl7cmV0dXJuIG51bGw9PWw/bnVsbDp0aGlzLmNhY2hlLnJvd3NbbF19cmVhZFRyZWVOb2RlcyhsLGEsZCxoKXtsZXQgZj0hMSx2PWE7aWYoaXNOYU4odikmJnYuZW5kKXJldHVybiB2O2xldCBNPWw7cmV0dXJu''@;'; put 'put ''IE18fChNPXtfX2NoaWxkcmVuOnRoaXMuZGF0YX0sZj0hMCx2LT0xKSxudWxsIT1kJiZ2PT09ZD97cmVzdWx0Ok0sZW5kOiEwfTpudWxsIT1oJiZNPT09aD97cmVzdWx0OnYsZW5kOiEwfToodis9MSxNLl9fY2hpbGRyZW4mJlluKE0uX19jaGlsZHJlbixEPT57aWYodGhpcy5wYXJlbnRSZWZl''@;'; put 'put ''cmVuY2Uuc2V0KEQsZj9udWxsOk0pLHY9dGhpcy5yZWFkVHJlZU5vZGVzKEQsdixkLGgpLGlzTmFOKHYpJiZ2LmVuZClyZXR1cm4hMX0pLHYpfW1vY2tQYXJlbnQoKXtjb25zdCBsPXRoaXMubW9ja05vZGUoKTtyZXR1cm4gbC5fX2NoaWxkcmVuPXRoaXMuZGF0YSxsfW1vY2tOb2RlKCl7Y29u''@;'; put 'put ''c3QgbD17fTtyZXR1cm4gcWEodGhpcy5kYXRhWzBdLChhLGQpPT57bFtkXT1udWxsfSksbH1nZXRSb3dJbmRleChsKXtyZXR1cm4gbnVsbD09bD9udWxsOnRoaXMuY2FjaGUubm9kZUluZm8uZ2V0KGwpLnJvd31nZXRSb3dJbmRleFdpdGhpblBhcmVudChsKXtsZXQgYT1udWxsO2E9aXNOYU4o''@;'; put 'put ''bCk/bDp0aGlzLmdldERhdGFPYmplY3QobCk7Y29uc3QgZD10aGlzLmdldFJvd1BhcmVudChsKTtyZXR1cm4gbnVsbD09ZD90aGlzLmRhdGEuaW5kZXhPZihhKTpkLl9fY2hpbGRyZW4uaW5kZXhPZihhKX1jb3VudEFsbFJvd3MoKXtyZXR1cm4gdGhpcy5jb3VudENoaWxkcmVuKHtfX2NoaWxk''@;'; put 'put ''cmVuOnRoaXMuZGF0YX0pfWNvdW50Q2hpbGRyZW4obCl7bGV0IGE9MCxkPWw7cmV0dXJuIGlzTmFOKGQpfHwoZD10aGlzLmdldERhdGFPYmplY3QoZCkpLGQmJmQuX19jaGlsZHJlbj8oWW4oZC5fX2NoaWxkcmVuLGg9PnthKz0xLGguX19jaGlsZHJlbiYmKGErPXRoaXMuY291bnRDaGlsZHJl''@;'; put 'put ''bihoKSl9KSxhKTowfWdldFJvd1BhcmVudChsKXtsZXQgYTtyZXR1cm4gYT1pc05hTihsKT9sOnRoaXMuZ2V0RGF0YU9iamVjdChsKSx0aGlzLmdldFJvd09iamVjdFBhcmVudChhKX1nZXRSb3dPYmplY3RQYXJlbnQobCl7cmV0dXJuIGwmJiJvYmplY3QiPT10eXBlb2YgbD90aGlzLmNhY2hl''@;'; put 'put ''Lm5vZGVJbmZvLmdldChsKS5wYXJlbnQ6bnVsbH1nZXRSb3dMZXZlbChsKXtsZXQgYT1udWxsO3JldHVybiBhPWlzTmFOKGwpP2w6dGhpcy5nZXREYXRhT2JqZWN0KGwpLGE/dGhpcy5nZXRSb3dPYmplY3RMZXZlbChhKTpudWxsfWdldFJvd09iamVjdExldmVsKGwpe3JldHVybiBudWxsPT1s''@;'; put 'put ''P251bGw6dGhpcy5jYWNoZS5ub2RlSW5mby5nZXQobCkubGV2ZWx9aGFzQ2hpbGRyZW4obCl7bGV0IGE9bDtyZXR1cm4gaXNOYU4oYSl8fChhPXRoaXMuZ2V0RGF0YU9iamVjdChhKSksISghYS5fX2NoaWxkcmVufHwhYS5fX2NoaWxkcmVuLmxlbmd0aCl9aXNDaGlsZChsKXtyZXR1cm4gbnVs''@;'; put 'put ''bCE9PXRoaXMuZ2V0Um93UGFyZW50KGwpfWdldENoaWxkKGwsYSl7dmFyIGQ7cmV0dXJuKG51bGw9PT0oZD1sLl9fY2hpbGRyZW4pfHx2b2lkIDA9PT1kP3ZvaWQgMDpkW2FdKXx8bnVsbH1pc1Jvd0hpZ2hlc3RMZXZlbChsKXtyZXR1cm4hdGhpcy5pc0NoaWxkKGwpfWlzUGFyZW50KGwpe3Zh''@;'; put 'put ''ciBhO2xldCBkPWw7cmV0dXJuIGlzTmFOKGQpfHwoZD10aGlzLmdldERhdGFPYmplY3QoZCkpLGQmJiEhZC5fX2NoaWxkcmVuJiYwIT09KG51bGw9PT0oYT1kLl9fY2hpbGRyZW4pfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmxlbmd0aCl9YWRkQ2hpbGQobCxhKXtsZXQgZD1hO3RoaXMuaG90LnJ1''@;'; put 'put ''bkhvb2tzKCJiZWZvcmVBZGRDaGlsZCIsbCxkKTtsZXQgaD1udWxsO2wmJihoPXRoaXMuZ2V0Um93SW5kZXgobCkpLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVSb3ciLGgrdGhpcy5jb3VudENoaWxkcmVuKGwpKzEsMSk7bGV0IGY9bDtsfHwoZj10aGlzLm1vY2tQYXJlbnQoKSks''@;'; put 'put ''Zi5fX2NoaWxkcmVufHwoZi5fX2NoaWxkcmVuPVtdKSxkfHwoZD10aGlzLm1vY2tOb2RlKCkpLGYuX19jaGlsZHJlbi5wdXNoKGQpLHRoaXMucmV3cml0ZUNhY2hlKCk7Y29uc3Qgdj10aGlzLmdldFJvd0luZGV4KGQpO3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLmluc2VydEluZGV4ZXModiwx''@;'; put 'put ''KSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJDcmVhdGVSb3ciLHYsMSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQWRkQ2hpbGQiLGwsZCl9YWRkQ2hpbGRBdEluZGV4KGwsYSxkKXtsZXQgZixoPWQ7aWYoaHx8KGg9dGhpcy5tb2NrTm9kZSgpKSx0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3Jl''@;'; put 'put ''QWRkQ2hpbGQiLGwsaCxhKSxsKXtjb25zdCBNPXRoaXMuZ2V0Um93SW5kZXgobCkrYSsxO3RoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVSb3ciLE0sMSksbC5fX2NoaWxkcmVuLnNwbGljZShhLG51bGwsaCksdGhpcy5yZXdyaXRlQ2FjaGUoKSx0aGlzLnBsdWdpbi5kaXNhYmxlQ29y''@;'; put 'put ''ZUFQSU1vZGlmaWVycygpLHRoaXMuaG90LnNldFNvdXJjZURhdGFBdENlbGwodGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudChsKSwiX19jaGlsZHJlbiIsbC5fX2NoaWxkcmVuLCJOZXN0ZWRSb3dzLmFkZENoaWxkQXRJbmRleCIpLHRoaXMuaG90LnJvd0luZGV4TWFwcGVyLmluc2VydElu''@;'; put 'put ''ZGV4ZXMoTSwxKSx0aGlzLnBsdWdpbi5lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ3JlYXRlUm93IixNLDEpLGY9TX1lbHNlIHRoaXMucGx1Z2luLmRpc2FibGVDb3JlQVBJTW9kaWZpZXJzKCksdGhpcy5ob3QuYWx0ZXIoImluc2VydF9yb3dfYWJv''@;'; put 'put ''dmUiLGEsMSwiTmVzdGVkUm93cy5hZGRDaGlsZEF0SW5kZXgiKSx0aGlzLnBsdWdpbi5lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCksZj10aGlzLmdldFJvd0luZGV4KHRoaXMuZGF0YVthXSk7aD10aGlzLmdldERhdGFPYmplY3QoZiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQWRkQ2hpbGQi''@;'; put 'put ''LGwsaCxhKX1hZGRTaWJsaW5nKGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiYmVsb3ciO2NvbnN0IGQ9dGhpcy50cmFuc2xhdGVUcmltbWVkUm93KGwpLGg9dGhpcy5nZXRSb3dQYXJlbnQoZCksZj10aGlzLmdldFJvd0lu''@;'; put 'put ''ZGV4V2l0aGluUGFyZW50KGQpO3N3aXRjaChhKXtjYXNlImJlbG93Ijp0aGlzLmFkZENoaWxkQXRJbmRleChoLGYrMSxudWxsKTticmVhaztjYXNlImFib3ZlIjp0aGlzLmFkZENoaWxkQXRJbmRleChoLGYsbnVsbCl9fWRldGFjaEZyb21QYXJlbnQobCl7bGV0IGE9IShhcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPW51bGw7Y29uc3QgaD1bXTtBcnJheS5pc0FycmF5KGwpPygkbyhsWzBdLGxbMl0sYmU9Pntjb25zdCBFZT10aGlzLnRyYW5zbGF0ZVRyaW1tZWRSb3coYmUpO2gucHVzaCh0aGlzLmdldERhdGFPYmplY3QoRWUp''@;'; put 'put ''KX0pLCRvKDAsaC5sZW5ndGgtMixiZT0+e3RoaXMuZGV0YWNoRnJvbVBhcmVudChoW2JlXSwhMSl9KSxkPWhbaC5sZW5ndGgtMV0pOmQ9bDtjb25zdCBmPXRoaXMuZ2V0Um93SW5kZXgoZCksdj10aGlzLmNvdW50Q2hpbGRyZW4oZCksTT10aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGQp''@;'; put 'put ''LEQ9dGhpcy5nZXRSb3dQYXJlbnQoZCksWj10aGlzLmdldFJvd1BhcmVudChEKSxuZT10aGlzLmdldFJvd0luZGV4KFopO2xldCBjZT1udWxsO2lmKHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVEZXRhY2hDaGlsZCIsRCxkKSxudWxsIT1NKXtjb25zdCBiZT1BcnJheS5mcm9tKG5ldyBBcnJh''@;'; put 'put ''eShmK3YrMSkua2V5cygpKS5zcGxpY2UoLTEqKHYrMSkpO2lmKHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVSZW1vdmVSb3ciLGYsdisxLGJlLHRoaXMucGx1Z2luLnBsdWdpbk5hbWUpLEQuX19jaGlsZHJlbi5zcGxpY2UoTSwxKSx0aGlzLnJld3JpdGVDYWNoZSgpLHRoaXMuaG90LnJ1bkhv''@;'; put 'put ''b2tzKCJhZnRlclJlbW92ZVJvdyIsZix2KzEsYmUsdGhpcy5wbHVnaW4ucGx1Z2luTmFtZSksWil7Y2U9bmUrdGhpcy5jb3VudENoaWxkcmVuKFopO2NvbnN0IEVlPXRoaXMuZ2V0Q2hpbGQoWix0aGlzLmNvdW50Q2hpbGRyZW4oWiktMSksQmU9dGhpcy5nZXRSb3dJbmRleChFZSk7dGhpcy5o''@;'; put 'put ''b3QucnVuSG9va3MoImJlZm9yZUNyZWF0ZVJvdyIsQmUrMSx2KzEsdGhpcy5wbHVnaW4ucGx1Z2luTmFtZSksWi5fX2NoaWxkcmVuLnB1c2goZCl9ZWxzZSBjZT10aGlzLmhvdC5jb3VudFJvd3MoKSsxLHRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVDcmVhdGVSb3ciLGNlLTIsdisxLHRoaXMu''@;'; put 'put ''cGx1Z2luLnBsdWdpbk5hbWUpLHRoaXMuZGF0YS5wdXNoKGQpfXRoaXMucmV3cml0ZUNhY2hlKCksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyQ3JlYXRlUm93IixjZS0yLHYrMSx0aGlzLnBsdWdpbi5wbHVnaW5OYW1lKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJEZXRhY2hDaGlsZCIsRCxk''@;'; put 'put ''LHRoaXMuZ2V0Um93SW5kZXgoZCkpLGEmJnRoaXMuaG90LnJlbmRlcigpfWZpbHRlckRhdGEobCxhLGQpe2NvbnN0IGg9W107WW4oZCxmPT57aC5wdXNoKHRoaXMuZ2V0RGF0YU9iamVjdChmKSl9KSxZbihoLGY9Pntjb25zdCB2PXRoaXMuZ2V0Um93SW5kZXhXaXRoaW5QYXJlbnQoZiksTT10''@;'; put 'put ''aGlzLmdldFJvd1BhcmVudChmKTtudWxsPT09TT90aGlzLmRhdGEuc3BsaWNlKHYsMSk6TS5fX2NoaWxkcmVuLnNwbGljZSh2LDEpfSksdGhpcy5yZXdyaXRlQ2FjaGUoKX1zcGxpY2VEYXRhKGwsYSxkKXtjb25zdCBoPXRoaXMuZ2V0RGF0YU9iamVjdChsLTEpO2xldCBmPW51bGwsdj1sO2gm''@;'; put 'put ''JmguX19jaGlsZHJlbiYmMD09PWguX19jaGlsZHJlbi5sZW5ndGg/KGY9aCx2PTApOmw8dGhpcy5jb3VudEFsbFJvd3MoKSYmKGY9dGhpcy5nZXRSb3dQYXJlbnQobCksdj10aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGwpKSxmP2Q/Zi5fX2NoaWxkcmVuLnNwbGljZSh2LGEsLi4uZCk6''@;'; put 'put ''Zi5fX2NoaWxkcmVuLnNwbGljZSh2LGEpOmQ/dGhpcy5kYXRhLnNwbGljZSh2LGEsLi4uZCk6dGhpcy5kYXRhLnNwbGljZSh2LGEpLHRoaXMucmV3cml0ZUNhY2hlKCl9c3luY1Jvd1dpdGhSYXdTb3VyY2UobCl7bGV0IGE9bCxkPW51bGw7ZG97ZD10aGlzLmdldFJvd1BhcmVudChkKSxudWxs''@;'; put 'put ''IT09ZCYmKGE9ZCl9d2hpbGUobnVsbCE9PWQpO3RoaXMucGx1Z2luLmRpc2FibGVDb3JlQVBJTW9kaWZpZXJzKCksdGhpcy5ob3Quc2V0U291cmNlRGF0YUF0Q2VsbCh0aGlzLmdldFJvd0luZGV4KGEpLCJfX2NoaWxkcmVuIixhLl9fY2hpbGRyZW4sIk5lc3RlZFJvd3Muc3luY1Jvd1dpdGhS''@;'; put 'put ''YXdTb3VyY2UiKSx0aGlzLnBsdWdpbi5lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCl9bW92ZVJvdyhsLGEsZCxoKXtjb25zdCBmPWE9PT10aGlzLmhvdC5jb3VudFJvd3MoKSx2PXRoaXMuZ2V0Um93UGFyZW50KGwpLE09dGhpcy5nZXRSb3dJbmRleFdpdGhpblBhcmVudChsKSxEPXYuX19jaGls''@;'; put 'put ''ZHJlbi5zbGljZShNLE0rMSksWj1sPmE7bGV0IG5lPXRoaXMuZ2V0Um93UGFyZW50KGY/YS0xOmEpO251bGw9PW5lJiYobmU9dGhpcy5nZXRSb3dQYXJlbnQoYS0xKSksbnVsbD09bmUmJihuZT10aGlzLmdldERhdGFPYmplY3QoYS0xKSksbmU/bmUuX19jaGlsZHJlbnx8KG5lLl9fY2hpbGRy''@;'; put 'put ''ZW49W10pOihuZT10aGlzLmdldERhdGFPYmplY3QoYSksbmUuX19jaGlsZHJlbj1bXSk7Y29uc3QgY2U9Znx8ZHx8aD9uZS5fX2NoaWxkcmVuLmxlbmd0aDp0aGlzLmdldFJvd0luZGV4V2l0aGluUGFyZW50KGEpLGJlPXY9PT1uZTtuZS5fX2NoaWxkcmVuLnNwbGljZShjZSwwLERbMF0pLHYu''@;'; put 'put ''X19jaGlsZHJlbi5zcGxpY2UoTSsoWiYmYmU/MTowKSwxKSx0aGlzLnN5bmNSb3dXaXRoUmF3U291cmNlKHYpLGJlfHx0aGlzLnN5bmNSb3dXaXRoUmF3U291cmNlKG5lKX10cmFuc2xhdGVUcmltbWVkUm93KGwpe3JldHVybiB0aGlzLnBsdWdpbi5jb2xsYXBzaW5nVUk/dGhpcy5wbHVnaW4u''@;'; put 'put ''Y29sbGFwc2luZ1VJLnRyYW5zbGF0ZVRyaW1tZWRSb3cobCk6bH11bnRyYW5zbGF0ZVRyaW1tZWRSb3cobCl7cmV0dXJuIHRoaXMucGx1Z2luLmNvbGxhcHNpbmdVST90aGlzLnBsdWdpbi5jb2xsYXBzaW5nVUkudW50cmFuc2xhdGVUcmltbWVkUm93KGwpOmx9fTtmdW5jdGlvbiBTbWUoYyxs''@;'; put 'put ''LGEpe3JldHVybihsPWZ1bmN0aW9uIF9wdChjKXt2YXIgbD1mdW5jdGlvbiB3cHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJv''@;'; put 'put ''YmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBl''@;'; put 'put ''b2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNvbnN0IEtRPWNsYXNzIENwdHtjb25zdHJ1Y3RvcihsLGEpe1NtZSh0aGlzLCJob3QiLHZvaWQg''@;'; put 'put ''MCksU21lKHRoaXMsInBsdWdpbiIsdm9pZCAwKSx0aGlzLmhvdD1hLHRoaXMucGx1Z2luPWx9fTtjbGFzcyBXZyBleHRlbmRzIEtRe3N0YXRpYyBnZXQgQ1NTX0NMQVNTRVMoKXtyZXR1cm57aW5kaWNhdG9yQ29udGFpbmVyOiJodF9uZXN0aW5nTGV2ZWxzIixwYXJlbnQ6Imh0X25lc3RpbmdQ''@;'; put 'put ''YXJlbnQiLGluZGljYXRvcjoiaHRfbmVzdGluZ0xldmVsIixlbXB0eUluZGljYXRvcjoiaHRfbmVzdGluZ0xldmVsX2VtcHR5IixidXR0b246Imh0X25lc3RpbmdCdXR0b24iLGV4cGFuZEJ1dHRvbjoiaHRfbmVzdGluZ0V4cGFuZCIsY29sbGFwc2VCdXR0b246Imh0X25lc3RpbmdDb2xsYXBz''@;'; put 'put ''ZSJ9fWNvbnN0cnVjdG9yKGwsYSl7c3VwZXIobCxhKSx0aGlzLmRhdGFNYW5hZ2VyPXRoaXMucGx1Z2luLmRhdGFNYW5hZ2VyLHRoaXMuY29sbGFwc2luZ1VJPXRoaXMucGx1Z2luLmNvbGxhcHNpbmdVSSx0aGlzLnJvd0hlYWRlcldpZHRoQ2FjaGU9bnVsbH1hcHBlbmRMZXZlbEluZGljYXRv''@;'; put 'put ''cnMobCxhKXtjb25zdCBkPXRoaXMuaG90LnRvUGh5c2ljYWxSb3cobCksaD10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0xldmVsKGQpLGY9dGhpcy5kYXRhTWFuYWdlci5nZXREYXRhT2JqZWN0KGQpLHY9YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiRElWIilbMF0sTT12LnF1ZXJ5U2VsZWN0b3Io''@;'; put 'put ''InNwYW4ucm93SGVhZGVyIiksRD12LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tjbGFzc149Imh0X25lc3RpbmciXScpLFo9dGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5hcmlhVGFncztpZihZbihELG5lPT57bmUmJnYucmVtb3ZlQ2hpbGQobmUpfSksVGkoYSxXZy5DU1NfQ0xBU1NFUy5pbmRpY2F0b3JD''@;'; put 'put ''b250YWluZXIpLGgpe2NvbnN0e3Jvb3REb2N1bWVudDpuZX09dGhpcy5ob3QsY2U9TS5jbG9uZU5vZGUoITApO3YuaW5uZXJIVE1MPSIiLCRvKDAsaC0xLCgpPT57Y29uc3QgYmU9bmUuY3JlYXRlRWxlbWVudCgiU1BBTiIpO1RpKGJlLFdnLkNTU19DTEFTU0VTLmVtcHR5SW5kaWNhdG9yKSx2''@;'; put 'put ''LmFwcGVuZENoaWxkKGJlKX0pLHYuYXBwZW5kQ2hpbGQoY2UpfWlmKHRoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oZikpe2NvbnN0IG5lPXRoaXMuaG90LnJvb3REb2N1bWVudC5jcmVhdGVFbGVtZW50KCJESVYiKTtaJiZ2YShuZSxba20oKV0pLFRpKGEsV2cuQ1NTX0NMQVNTRVMucGFy''@;'; put 'put ''ZW50KSx0aGlzLmNvbGxhcHNpbmdVSS5hcmVDaGlsZHJlbkNvbGxhcHNlZChkKT8oVGkobmUsYCR7V2cuQ1NTX0NMQVNTRVMuYnV0dG9ufSAke1dnLkNTU19DTEFTU0VTLmV4cGFuZEJ1dHRvbn1gKSxaJiZ2YShhLFtEMighMSldKSk6KFRpKG5lLGAke1dnLkNTU19DTEFTU0VTLmJ1dHRvbn0g''@;'; put 'put ''JHtXZy5DU1NfQ0xBU1NFUy5jb2xsYXBzZUJ1dHRvbn1gKSxaJiZ2YShhLFtEMighMCldKSksdi5hcHBlbmRDaGlsZChuZSl9fXVwZGF0ZVJvd0hlYWRlcldpZHRoKGwpe2xldCBhPWw7YXx8KGE9dGhpcy5kYXRhTWFuYWdlci5jYWNoZS5sZXZlbENvdW50KTtjb25zdCBkPXRoaXMuaG90LnZp''@;'; put 'put ''ZXcuZ2V0U3R5bGVzSGFuZGxlcigpO2xldCBoPTExO2QuaXNDbGFzc2ljVGhlbWUoKXx8KGg9MipkLmdldENTU1ZhcmlhYmxlVmFsdWUoImNlbGwtaG9yaXpvbnRhbC1wYWRkaW5nIikpLHRoaXMucm93SGVhZGVyV2lkdGhDYWNoZT1NYXRoLm1heCg1MCxoKzEwKmErMjUpLHRoaXMuaG90LnJl''@;'; put 'put ''bmRlcigpfX1jb25zdCBNbWU9V2csTXB0PWNsYXNzIFNwdCBleHRlbmRzIEtRe2NvbnN0cnVjdG9yKGwsYSl7dmFyIGQ7c3VwZXIobCxhKSxkPXRoaXMsdGhpcy5kYXRhTWFuYWdlcj10aGlzLnBsdWdpbi5kYXRhTWFuYWdlcix0aGlzLmNvbGxhcHNlZFJvd3M9W10sdGhpcy5jb2xsYXBzZWRS''@;'; put 'put ''b3dzU3Rhc2g9e3N0YXNoOmZ1bmN0aW9uKCl7bGV0IGg9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtkLmxhc3RDb2xsYXBzZWRSb3dzPWQuY29sbGFwc2VkUm93cy5zbGljZSgwKSxkLmV4cGFuZE11bHRpcGxlQ2hpbGRyZW4oZC5sYXN0''@;'; put 'put ''Q29sbGFwc2VkUm93cyxoKX0sc2hpZnRTdGFzaDpmdW5jdGlvbihoLGYpe2xldCB2PWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToxO251bGw9PWYmJihmPTEvMCksWW4oZC5sYXN0Q29sbGFwc2VkUm93cywoTSxEKT0+e00+PWgmJk08ZiYm''@;'; put 'put ''KGQubGFzdENvbGxhcHNlZFJvd3NbRF09TSt2KX0pfSxhcHBseVN0YXNoOmZ1bmN0aW9uKCl7ZC5jb2xsYXBzZU11bHRpcGxlQ2hpbGRyZW4oZC5sYXN0Q29sbGFwc2VkUm93cywhKGFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdKXx8YXJndW1lbnRzWzBdKSxkLmxh''@;'; put 'put ''c3RDb2xsYXBzZWRSb3dzPXZvaWQgMH0sdHJpbVN0YXNoOihoLGYpPT57JG8oaCxoK2YtMSx2PT57Y29uc3QgTT10aGlzLmxhc3RDb2xsYXBzZWRSb3dzLmluZGV4T2Yodik7TT4tMSYmdGhpcy5sYXN0Q29sbGFwc2VkUm93cy5zcGxpY2UoTSwxKX0pfX19Y29sbGFwc2VDaGlsZHJlbihsKXts''@;'; put 'put ''ZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLGQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtjb25zdCBoPVtdO2xldCBmPW51bGwsdj1udWxsLE09bnVsbDtyZXR1''@;'; put 'put ''cm4gaXNOYU4obCk/KGY9bCx2PXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoZikpOihmPXRoaXMuZGF0YU1hbmFnZXIuZ2V0RGF0YU9iamVjdChsKSx2PWwpLHRoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oZikmJlluKGYuX19jaGlsZHJlbixEPT57aC5wdXNoKHRoaXMuZGF0YU1h''@;'; put 'put ''bmFnZXIuZ2V0Um93SW5kZXgoRCkpfSksTT10aGlzLmNvbGxhcHNlUm93cyhoLCEwLCExKSxkJiZ0aGlzLnRyaW1Sb3dzKE0pLGEmJnRoaXMucmVuZGVyQW5kQWRqdXN0KCksLTE9PT10aGlzLmNvbGxhcHNlZFJvd3MuaW5kZXhPZih2KSYmdGhpcy5jb2xsYXBzZWRSb3dzLnB1c2godiksTX1j''@;'; put 'put ''b2xsYXBzZU11bHRpcGxlQ2hpbGRyZW4obCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07Y29uc3QgaD1bXTtZ''@;'; put 'put ''bihsLGY9PntoLnB1c2goLi4udGhpcy5jb2xsYXBzZUNoaWxkcmVuKGYsITEsITEpKX0pLGQmJnRoaXMudHJpbVJvd3MoaCksYSYmdGhpcy5yZW5kZXJBbmRBZGp1c3QoKX1jb2xsYXBzZVJvdyhsKXt0aGlzLmNvbGxhcHNlUm93cyhbbF0sIShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9''@;'; put 'put ''PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSl9Y29sbGFwc2VSb3dzKGwpe2xldCBhPSEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0pfHxhcmd1bWVudHNbMV0sZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRz''@;'; put 'put ''WzJdO2NvbnN0IGg9W107cmV0dXJuIFluKGwsZj0+e2gucHVzaChmKSxhJiZ0aGlzLmNvbGxhcHNlQ2hpbGRSb3dzKGYsaCl9KSxkJiZ0aGlzLnRyaW1Sb3dzKGgpLGh9Y29sbGFwc2VDaGlsZFJvd3MobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/''@;'; put 'put ''YXJndW1lbnRzWzFdOltdLGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTt0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGwpJiZZbih0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QobCkuX19jaGlsZHJlbix2PT57Y29uc3Qg''@;'; put 'put ''TT10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KHYpO2EucHVzaChNKSx0aGlzLmNvbGxhcHNlQ2hpbGRSb3dzKE0sYSl9KSxoJiZ0aGlzLnRyaW1Sb3dzKGEpfWV4cGFuZFJvdyhsKXt0aGlzLmV4cGFuZFJvd3MoW2xdLCEoYXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVu''@;'; put 'put ''dHNbMV0pfHxhcmd1bWVudHNbMV0pfWV4cGFuZFJvd3MobCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07Y29uc3Qg''@;'; put 'put ''aD1bXTtyZXR1cm4gWW4obCxmPT57aC5wdXNoKGYpLGEmJnRoaXMuZXhwYW5kQ2hpbGRSb3dzKGYsaCl9KSxkJiZ0aGlzLnVudHJpbVJvd3MoaCksaH1leHBhbmRDaGlsZFJvd3MobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFd''@;'; put 'put ''OltdLGg9YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTt0aGlzLmRhdGFNYW5hZ2VyLmhhc0NoaWxkcmVuKGwpJiZZbih0aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QobCkuX19jaGlsZHJlbix2PT57aWYoIXRoaXMuaXNBbnlQYXJl''@;'; put 'put ''bnRDb2xsYXBzZWQodikpe2NvbnN0IE09dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dJbmRleCh2KTthLnB1c2goTSksdGhpcy5leHBhbmRDaGlsZFJvd3MoTSxhKX19KSxoJiZ0aGlzLnVudHJpbVJvd3MoYSl9ZXhwYW5kQ2hpbGRyZW4obCl7bGV0IGE9IShhcmd1bWVudHMubGVuZ3RoPjEmJnZv''@;'; put 'put ''aWQgMCE9PWFyZ3VtZW50c1sxXSl8fGFyZ3VtZW50c1sxXSxkPSEoYXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0pfHxhcmd1bWVudHNbMl07Y29uc3QgaD1bXTtsZXQgZj1udWxsLHY9bnVsbCxNPW51bGw7cmV0dXJuIGlzTmFOKGwpPyhmPWwsdj10aGlzLmRhdGFN''@;'; put 'put ''YW5hZ2VyLmdldFJvd0luZGV4KGwpKTooZj10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QobCksdj1sKSx0aGlzLmNvbGxhcHNlZFJvd3Muc3BsaWNlKHRoaXMuY29sbGFwc2VkUm93cy5pbmRleE9mKHYpLDEpLHRoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oZikmJlluKGYuX19j''@;'; put 'put ''aGlsZHJlbixEPT57Y29uc3QgWj10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KEQpO2gucHVzaChaKX0pLE09dGhpcy5leHBhbmRSb3dzKGgsITAsITEpLGQmJnRoaXMudW50cmltUm93cyhNKSxhJiZ0aGlzLnJlbmRlckFuZEFkanVzdCgpLE19ZXhwYW5kTXVsdGlwbGVDaGlsZHJlbihs''@;'; put 'put ''KXtsZXQgYT0hKGFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdKXx8YXJndW1lbnRzWzFdLGQ9IShhcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSl8fGFyZ3VtZW50c1syXTtjb25zdCBoPVtdO1luKGwsZj0+e2gucHVzaCguLi50aGlzLmV4''@;'; put 'put ''cGFuZENoaWxkcmVuKGYsITEsITEpKX0pLGQmJnRoaXMudW50cmltUm93cyhoKSxhJiZ0aGlzLnJlbmRlckFuZEFkanVzdCgpfWNvbGxhcHNlQWxsKCl7Y29uc3QgbD10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGEoKSxhPVtdO1luKGwsZD0+e3RoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4o''@;'; put 'put ''ZCkmJmEucHVzaChkKX0pLHRoaXMuY29sbGFwc2VNdWx0aXBsZUNoaWxkcmVuKGEpLHRoaXMucmVuZGVyQW5kQWRqdXN0KCl9ZXhwYW5kQWxsKCl7Y29uc3QgbD10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGEoKSxhPVtdO1luKGwsZD0+e3RoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oZCkm''@;'; put 'put ''JmEucHVzaChkKX0pLHRoaXMuZXhwYW5kTXVsdGlwbGVDaGlsZHJlbihhKSx0aGlzLnJlbmRlckFuZEFkanVzdCgpfXRyaW1Sb3dzKGwpe3RoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57WW4obCxhPT57dGhpcy5wbHVnaW4uY29sbGFwc2VkUm93c01hcC5zZXRWYWx1ZUF0SW5kZXgoYSwh''@;'; put 'put ''MCl9KX0sITApfXVudHJpbVJvd3MobCl7dGhpcy5ob3QuYmF0Y2hFeGVjdXRpb24oKCk9PntZbihsLGE9Pnt0aGlzLnBsdWdpbi5jb2xsYXBzZWRSb3dzTWFwLnNldFZhbHVlQXRJbmRleChhLCExKX0pfSwhMCl9YXJlQ2hpbGRyZW5Db2xsYXBzZWQobCl7bGV0IGE9aXNOYU4obCk/bDp0aGlz''@;'; put 'put ''LmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QobCksZD0hMDtyZXR1cm4gbnVsbD09PWEmJihhPXtfX2NoaWxkcmVuOnRoaXMuZGF0YU1hbmFnZXIuZGF0YX0pLHRoaXMuZGF0YU1hbmFnZXIuaGFzQ2hpbGRyZW4oYSkmJlluKGEuX19jaGlsZHJlbixoPT57Y29uc3QgZj10aGlzLmRhdGFNYW5h''@;'; put 'put ''Z2VyLmdldFJvd0luZGV4KGgpO2lmKCF0aGlzLnBsdWdpbi5jb2xsYXBzZWRSb3dzTWFwLmdldFZhbHVlQXRJbmRleChmKSlyZXR1cm4gZD0hMSwhMX0pLGR9aXNBbnlQYXJlbnRDb2xsYXBzZWQobCl7bGV0IGE9bDtmb3IoO251bGwhPT1hOyl7YT10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd1Bh''@;'; put 'put ''cmVudChhKTtjb25zdCBkPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoYSk7aWYodGhpcy5jb2xsYXBzZWRSb3dzLmluZGV4T2YoZCk+LTEpcmV0dXJuITB9cmV0dXJuITF9dG9nZ2xlU3RhdGUobCxhKXtpZihhLmNvbD49MClyZXR1cm47Y29uc3QgZD10aGlzLnRyYW5zbGF0ZVRyaW1t''@;'; put 'put ''ZWRSb3coYS5yb3cpO3BhKGwudGFyZ2V0LE1tZS5DU1NfQ0xBU1NFUy5idXR0b24pJiYodGhpcy5hcmVDaGlsZHJlbkNvbGxhcHNlZChkKT90aGlzLmV4cGFuZENoaWxkcmVuKGQpOnRoaXMuY29sbGFwc2VDaGlsZHJlbihkKSxSMihsKSl9dHJhbnNsYXRlVHJpbW1lZFJvdyhsKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5ob3QudG9QaHlzaWNhbFJvdyhsKX11bnRyYW5zbGF0ZVRyaW1tZWRSb3cobCl7cmV0dXJuIHRoaXMuaG90LnRvVmlzdWFsUm93KGwpfXJlbmRlckFuZEFkanVzdCgpe3RoaXMuaG90LnJlbmRlcigpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCl9fTt2YXIgeG1lPW5l''@;'; put 'put ''dyBXZWFrTWFwO2NvbnN0IExwdD1jbGFzcyBScHQgZXh0ZW5kcyBLUXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gVHB0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBBcHQoYyl7dmFyIGw9ZnVuY3Rpb24ga3B0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBj''@;'; put 'put ''fHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBh''@;'; put 'put ''IHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25m''@;'; put 'put ''aWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiZGF0YU1hbmFnZXIiLHRoaXMucGx1Z2luLmRhdGFNYW5hZ2VyKSxmdW5jdGlvbiB4cHQoYyxsLGEpeyhmdW5jdGlvbiBFcHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlh''@;'; put 'put ''bGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEpfSh0aGlzLHhtZSx7cm93X2Fib3ZlOihsLGEpPT57dGhpcy5kYXRhTWFuYWdlci5hZGRTaWJsaW5nKGFbYS5sZW5ndGgtMV0uc3RhcnQucm93LCJhYm92ZSIpfSxyb3df''@;'; put 'put ''YmVsb3c6KGwsYSk9Pnt0aGlzLmRhdGFNYW5hZ2VyLmFkZFNpYmxpbmcoYVthLmxlbmd0aC0xXS5zdGFydC5yb3csImJlbG93Iil9fSl9YXBwZW5kT3B0aW9ucyhsKXtjb25zdCBhPVt7a2V5OiJhZGRfY2hpbGQiLG5hbWUoKXtyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkUGhyYXNlKGJxKX0s''@;'; put 'put ''Y2FsbGJhY2s6KCk9Pntjb25zdCBkPXRoaXMuZGF0YU1hbmFnZXIudHJhbnNsYXRlVHJpbW1lZFJvdyh0aGlzLmhvdC5nZXRTZWxlY3RlZExhc3QoKVswXSksaD10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QoZCk7dGhpcy5kYXRhTWFuYWdlci5hZGRDaGlsZChoKX0sZGlzYWJsZWQ6''@;'; put 'put ''KCk9Pntjb25zdCBkPXRoaXMuaG90LmdldFNlbGVjdGVkTGFzdCgpO3JldHVybiFkfHxkWzBdPDB8fHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFkZXIoKXx8dGhpcy5ob3QuY291bnRSb3dzKCk+PXRoaXMuaG90LmdldFNldHRpbmdzKCkubWF4Um93c319LHtrZXk6''@;'; put 'put ''ImRldGFjaF9mcm9tX3BhcmVudCIsbmFtZSgpe3JldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRQaHJhc2UoeXEpfSxjYWxsYmFjazooKT0+e3RoaXMuZGF0YU1hbmFnZXIuZGV0YWNoRnJvbVBhcmVudCh0aGlzLmhvdC5nZXRTZWxlY3RlZExhc3QoKSl9LGRpc2FibGVkOigpPT57Y29uc3QgZD10''@;'; put 'put ''aGlzLmhvdC5nZXRTZWxlY3RlZExhc3QoKSxoPXRoaXMuZGF0YU1hbmFnZXIudHJhbnNsYXRlVHJpbW1lZFJvdyhkWzBdKTtyZXR1cm4hdGhpcy5kYXRhTWFuYWdlci5nZXRSb3dQYXJlbnQoaCl8fCFkfHxkWzBdPDB8fHRoaXMuaG90LnNlbGVjdGlvbi5pc1NlbGVjdGVkQnlDb2x1bW5IZWFk''@;'; put 'put ''ZXIoKXx8dGhpcy5ob3QuY291bnRSb3dzKCk+PXRoaXMuaG90LmdldFNldHRpbmdzKCkubWF4Um93c319LHtuYW1lOiItLS0tLS0tLS0ifV07cmV0dXJuICRvKDAsbC5pdGVtcy5sZW5ndGgtMSxkPT57aWYoMD09PWQpcmV0dXJuIFluKGEsKGgsZik9PntsLml0ZW1zLnNwbGljZShkK2YsMCxo''@;'; put 'put ''KX0pLCExfSksdGhpcy5tb2RpZnlSb3dJbnNlcnRpbmdPcHRpb25zKGwpfW1vZGlmeVJvd0luc2VydGluZ09wdGlvbnMobCl7cmV0dXJuICRvKDAsbC5pdGVtcy5sZW5ndGgtMSxhPT57Y29uc3QgZD1mdW5jdGlvbiBEcHQoYyxsKXtyZXR1cm4gYy5nZXQoZnVuY3Rpb24gSXB0KGMsbCxhKXtp''@;'; put 'put ''ZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX0oYyxsKSl9KHhtZSx0aGlzKVtsLml0ZW1zW2Fd''@;'; put 'put ''LmtleV07bnVsbCE9ZCYmKGwuaXRlbXNbYV0uY2FsbGJhY2s9ZCl9KSxsfX07ZnVuY3Rpb24gQUgoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIE9wdChjKXt2YXIgbD1mdW5jdGlvbiBQcHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRv''@;'; put 'put ''UHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3Ry''@;'; put 'put ''aW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09''@;'; put 'put ''YSxjfWNsYXNzIEZwdHtjb25zdHJ1Y3RvcihsKXtBSCh0aGlzLCJwbHVnaW4iLHZvaWQgMCksQUgodGhpcywiaG90Iix2b2lkIDApLEFIKHRoaXMsImRhdGFNYW5hZ2VyIix2b2lkIDApLEFIKHRoaXMsImNvbGxhcHNpbmdVSSIsdm9pZCAwKSx0aGlzLnBsdWdpbj1sLHRoaXMuaG90PWwuaG90''@;'; put 'put ''LHRoaXMuZGF0YU1hbmFnZXI9bC5kYXRhTWFuYWdlcix0aGlzLmNvbGxhcHNpbmdVST1sLmNvbGxhcHNpbmdVSX1vbkJlZm9yZVJvd01vdmUobCxhLGQsaCl7aWYodGhpcy5kaXNwbGF5QVBJQ29tcGF0aWJpbGl0eVdhcm5pbmcoe3Jvd3M6bCxmaW5hbEluZGV4OmEsZHJvcEluZGV4OmQsbW92''@;'; put 'put ''ZVBvc3NpYmxlOmh9KSlyZXR1cm4hMTt0aGlzLm1vdmVkVG9Db2xsYXBzZWQ9ITE7Y29uc3Qgdj1kPT09dGhpcy5ob3QuY291bnRSb3dzKCksTT12P3RoaXMuaG90LmNvdW50U291cmNlUm93cygpOnRoaXMuZGF0YU1hbmFnZXIudHJhbnNsYXRlVHJpbW1lZFJvdyhkKTtsZXQgRD0hMDtjb25z''@;'; put 'put ''dCBaPWwubWFwKEJlPT57aWYoIUQpcmV0dXJuITE7Y29uc3QgcWU9dGhpcy5kYXRhTWFuYWdlci50cmFuc2xhdGVUcmltbWVkUm93KEJlKTtyZXR1cm4gRD10aGlzLnNob3VsZEFsbG93TW92aW5nKHFlLE0pLHFlfSksbmU9LTE9PT1aLmluZGV4T2YoTSk7aWYoIUR8fCFuZSlyZXR1cm4hMTtj''@;'; put 'put ''b25zdCBjZT10aGlzLmdldEJhc2VQYXJlbnQoWiksYmU9dGhpcy5nZXRUYXJnZXRQYXJlbnQodixNKSxFZT1jZT09PWJlO3JldHVybiB0aGlzLm1vdmVkVG9Db2xsYXBzZWQ9dGhpcy5jb2xsYXBzaW5nVUkuYXJlQ2hpbGRyZW5Db2xsYXBzZWQoYmUpLHRoaXMuY29sbGFwc2luZ1VJLmNvbGxh''@;'; put 'put ''cHNlZFJvd3NTdGFzaC5zdGFzaCgpLHRoaXMuc2hpZnRDb2xsYXBzaWJsZVBhcmVudHNMb2NhdGlvbnMoWixNLEVlKSx0aGlzLm1vdmVSb3dzKFosTSxiZSksdGhpcy5kYXRhTWFuYWdlci5yZXdyaXRlQ2FjaGUoKSx0aGlzLm1vdmVDZWxsc01ldGEoWixNKSx0aGlzLmNvbGxhcHNpbmdVSS5j''@;'; put 'put ''b2xsYXBzZWRSb3dzU3Rhc2guYXBwbHlTdGFzaCghMSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUm93TW92ZSIsbCxhLGQsaCxoJiZ0aGlzLmlzUm93T3JkZXJDaGFuZ2VkKGwsYSkpLHRoaXMuaG90LnJlbmRlcigpLHRoaXMuc2VsZWN0Q2VsbHMobCxkKSwhMX1kaXNwbGF5QVBJQ29tcGF0''@;'; put 'put ''aWJpbGl0eVdhcm5pbmcobCl7Y29uc3R7cm93czphLGZpbmFsSW5kZXg6ZCxkcm9wSW5kZXg6aCxtb3ZlUG9zc2libGU6Zn09bDtsZXQgdj0hMTtyZXR1cm4gbWMoaCkmJih0bChmbGBTaW5jZSB2ZXJzaW9uIDguMC4wIG9mIHRoZSBIYW5kc29udGFibGUgdGhlICdtb3ZlUm93cycgbWV0aG9k''@;'; put 'put ''IGlzbid0IHVzZWQgZm9yIG1vdmluZyByb3dzXHgyMAogICAgICB3aGVuIHRoZSBOZXN0ZWRSb3dzIHBsdWdpbiBpcyBlbmFibGVkLiBQbGVhc2UgdXNlIHRoZSAnZHJhZ1Jvd3MnIG1ldGhvZCBpbnN0ZWFkLmApLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJvd01vdmUiLGEsZCxoLGYsITEp''@;'; put 'put ''LHY9ITApLHZ9c2hvdWxkQWxsb3dNb3ZpbmcobCxhKXtyZXR1cm4hKHRoaXMuZGF0YU1hbmFnZXIuaXNQYXJlbnQobCl8fHRoaXMuZGF0YU1hbmFnZXIuaXNSb3dIaWdoZXN0TGV2ZWwobCl8fGw9PT1hfHwwPT09YSl9Z2V0QmFzZVBhcmVudChsKXtyZXR1cm4gdGhpcy5kYXRhTWFuYWdlci5n''@;'; put 'put ''ZXRSb3dQYXJlbnQobFswXSl9Z2V0VGFyZ2V0UGFyZW50KGwsYSl7bGV0IGQ9dGhpcy5kYXRhTWFuYWdlci5nZXRSb3dQYXJlbnQobD9hLTE6YSk7cmV0dXJuIG51bGw9PWQmJihkPXRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93UGFyZW50KGEtMSkpLGR9c2hpZnRDb2xsYXBzaWJsZVBhcmVudHNM''@;'; put 'put ''b2NhdGlvbnMobCxhLGQpe2R8fChNYXRoLm1heCguLi5sKTw9YT90aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc2hpZnRTdGFzaChsWzBdLGEsLTEqbC5sZW5ndGgpOnRoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zaGlmdFN0YXNoKGEsbFswXSxsLmxl''@;'; put 'put ''bmd0aCkpfW1vdmVSb3dzKGwsYSxkKXtjb25zdCBoPWE9PT10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KGQpK3RoaXMuZGF0YU1hbmFnZXIuY291bnRDaGlsZHJlbihkKSsxO3RoaXMuaG90LmJhdGNoUmVuZGVyKCgpPT57bC5mb3JFYWNoKGY9Pnt0aGlzLmRhdGFNYW5hZ2VyLm1vdmVS''@;'; put 'put ''b3coZixhLHRoaXMubW92ZWRUb0NvbGxhcHNlZCxoKX0pfSl9bW92ZUNlbGxzTWV0YShsLGEpe2NvbnN0IGQ9W10saD1NYXRoLm1heCguLi5sKTxhO2wuZm9yRWFjaChmPT57ZC5wdXNoKHRoaXMuaG90LmdldENlbGxNZXRhQXRSb3coZikpfSksdGhpcy5ob3Quc3BsaWNlQ2VsbHNNZXRhKGxb''@;'; put 'put ''MF0sbC5sZW5ndGgpLHRoaXMuaG90LnNwbGljZUNlbGxzTWV0YShhLShoP2QubGVuZ3RoOjApLDAsLi4uZCl9c2VsZWN0Q2VsbHMobCxhKXtjb25zdCBkPWwubGVuZ3RoO2xldCBoPTAsZj0wO2lmKHRoaXMubW92ZWRUb0NvbGxhcHNlZCl7bGV0IHY9bnVsbDt2PXRoaXMuZGF0YU1hbmFnZXIu''@;'; put 'put ''dHJhbnNsYXRlVHJpbW1lZFJvdyhsW2QtMV08YT9hLWQ6YSk7Y29uc3QgTT10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd1BhcmVudChudWxsPT09dj90aGlzLmhvdC5jb3VudFNvdXJjZVJvd3MoKS0xOnYtMSksRD10aGlzLmRhdGFNYW5hZ2VyLmdldFJvd0luZGV4KE0pO2g9dGhpcy5kYXRhTWFu''@;'; put 'put ''YWdlci51bnRyYW5zbGF0ZVRyaW1tZWRSb3coRCksZj1ofWVsc2UgbFtkLTFdPGE/KGY9YS0xLGg9Zi1kKzEpOihoPWEsZj1oK2QtMSk7dGhpcy5ob3Quc2VsZWN0Q2VsbHMoW1toLDAsZix0aGlzLmhvdC5jb3VudENvbHMoKS0xXV0sITEpfWlzUm93T3JkZXJDaGFuZ2VkKGwsYSl7cmV0dXJu''@;'; put 'put ''IGwuc29tZSgoZCxoKT0+ZC1oIT09YSl9fWZ1bmN0aW9uIEVtZShjLGwsYSl7VG1lKGMsbCksbC5zZXQoYyxhKX1mdW5jdGlvbiBUbWUoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNl''@;'; put 'put ''IG9uIGFuIG9iamVjdCIpfWZ1bmN0aW9uIHFRKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBOcHQoYyl7dmFyIGw9ZnVuY3Rpb24gVnB0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFy''@;'; put 'put ''IGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShj''@;'; put 'put ''LCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31mdW5jdGlvbiBrSChjLGwpe3JldHVybiBj''@;'; put 'put ''LmdldChtMChjLGwpKX1mdW5jdGlvbiBESChjLGwsYSl7cmV0dXJuIGMuc2V0KG0wKGMsbCksYSksYX1mdW5jdGlvbiBtMChjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgSUg9Im5lc3RlZFJvd3MiLEFtZT1JSDt2YXIgUkg9bmV3IFdlYWtNYXAsZ3c9bmV3IFdlYWtNYXAsQTA9bmV3IFdlYWtTZXQ7Y2xhc3MgenB0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtz''@;'; put 'put ''dXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIEhwdChjLGwpe1RtZShjLGwpLGwuYWRkKGMpfSh0aGlzLEEwKSxxUSh0aGlzLCJkYXRhTWFuYWdlciIsbnVsbCkscVEodGhpcywiaGVhZGVyc1VJIixudWxsKSxxUSh0aGlzLCJjb2xsYXBzZWRSb3dzTWFwIixudWxsKSxFbWUodGhpcyxSSCwh''@;'; put 'put ''MSksRW1lKHRoaXMsZ3csITEpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBJSH1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAzMDB9aXNFbmFibGVkKCl7cmV0dXJuISF0aGlzLmhvdC5nZXRTZXR0aW5ncygpW0lIXX1lbmFibGVQbHVnaW4oKXt2YXIgbD10aGlz''@;'; put 'put ''O3RoaXMuZW5hYmxlZHx8KHRoaXMuY29sbGFwc2VkUm93c01hcD10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCgibmVzdGVkUm93cyIsbmV3IFdFKSx0aGlzLmRhdGFNYW5hZ2VyPW5ldyB5cHQodGhpcyx0aGlzLmhvdCksdGhpcy5jb2xsYXBzaW5nVUk9bmV3IE1wdCh0aGlz''@;'; put 'put ''LHRoaXMuaG90KSx0aGlzLmhlYWRlcnNVST1uZXcgTW1lKHRoaXMsdGhpcy5ob3QpLHRoaXMuY29udGV4dE1lbnVVST1uZXcgTHB0KHRoaXMsdGhpcy5ob3QpLHRoaXMucm93TW92ZUNvbnRyb2xsZXI9bmV3IEZwdCh0aGlzKSx0aGlzLmFkZEhvb2soImFmdGVySW5pdCIsZnVuY3Rpb24oKXtm''@;'; put 'put ''b3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbTAoQTAsbCxuNHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlVmlld1JlbmRlciIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1l''@;'; put 'put ''bnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbTAoQTAsbCxyNHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5Um93RGF0YSIsZnVuY3Rpb24oKXtyZXR1cm4gbC5vbk1vZGlmeVJvd0RhdGEoLi4uYXJndW1l''@;'; put 'put ''bnRzKX0pLHRoaXMuYWRkSG9vaygibW9kaWZ5U291cmNlTGVuZ3RoIixmdW5jdGlvbigpe3JldHVybiBsLm9uTW9kaWZ5U291cmNlTGVuZ3RoKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImJlZm9yZURhdGFTcGxpY2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGwub25CZWZvcmVEYXRhU3Bs''@;'; put 'put ''aWNlKC4uLmFyZ3VtZW50cyl9KSx0aGlzLmFkZEhvb2soImZpbHRlckRhdGEiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIG0wKEEwLGwsV3B0KS5jYWxsKGwsLi4uZCl9KSx0''@;'; put 'put ''aGlzLmFkZEhvb2soImFmdGVyQ29udGV4dE1lbnVEZWZhdWx0T3B0aW9ucyIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbTAoQTAsbCxZcHQpLmNhbGwobCwuLi5kKX0pLHRo''@;'; put 'put ''aXMuYWRkSG9vaygiYWZ0ZXJHZXRSb3dIZWFkZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIG0wKEEwLGwsR3B0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJl''@;'; put 'put ''Zm9yZU9uQ2VsbE1vdXNlRG93biIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbTAoQTAsbCxacHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlUmVtb3Zl''@;'; put 'put ''Um93IixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBtMChBMCxsLHFwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsZnVuY3Rpb24oKXtm''@;'; put 'put ''b3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gbTAoQTAsbCxLcHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYmVmb3JlQWRkQ2hpbGQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIG0wKEEwLGwsWHB0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImFmdGVyQWRkQ2hpbGQiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJy''@;'; put 'put ''YXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIG0wKEEwLGwsSnB0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZURldGFjaENoaWxkIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7''@;'; put 'put ''aCsrKWRbaF09YXJndW1lbnRzW2hdO3JldHVybiBtMChBMCxsLFFwdCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJhZnRlckRldGFjaENoaWxkIixmdW5jdGlvbigpe2Zvcih2YXIgYT1hcmd1bWVudHMubGVuZ3RoLGQ9bmV3IEFycmF5KGEpLGg9MDtoPGE7aCsrKWRbaF09YXJndW1l''@;'; put 'put ''bnRzW2hdO3JldHVybiBtMChBMCxsLGU0dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlSb3dIZWFkZXJXaWR0aCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1''@;'; put 'put ''cm4gbTAoQTAsbCwkcHQpLmNhbGwobCwuLi5kKX0pLHRoaXMuYWRkSG9vaygiYWZ0ZXJDcmVhdGVSb3ciLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIG0wKEEwLGwsdDR0KS5j''@;'; put 'put ''YWxsKGwsLi4uZCl9KSx0aGlzLmFkZEhvb2soImJlZm9yZVJvd01vdmUiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIG0wKEEwLGwsVXB0KS5jYWxsKGwsLi4uZCl9KSx0aGlz''@;'; put 'put ''LmFkZEhvb2soImJlZm9yZUxvYWREYXRhIixhPT5tMChBMCx0aGlzLGttZSkuY2FsbCh0aGlzLGEpKSx0aGlzLmFkZEhvb2soImJlZm9yZVVwZGF0ZURhdGEiLGE9Pm0wKEEwLHRoaXMsa21lKS5jYWxsKHRoaXMsYSkpLHRoaXMucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5lbmFibGVQbHVn''@;'; put 'put ''aW4oKSl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuaG90LnJvd0luZGV4TWFwcGVyLnVucmVnaXN0ZXJNYXAoIm5lc3RlZFJvd3MiKSx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9dXBkYXRlUGx1Z2luKCl7dGhpcy5kaXNhYmxlUGx1Z2luKCk7Y29uc3Qg''@;'; put 'put ''bD10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGEoKTt0aGlzLmVuYWJsZVBsdWdpbigpLHRoaXMuZGF0YU1hbmFnZXIudXBkYXRlV2l0aERhdGEobCksc3VwZXIudXBkYXRlUGx1Z2luKCl9cmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0''@;'; put 'put ''KCJncmlkIikuYWRkU2hvcnRjdXQoe2tleXM6W1siRW50ZXIiXV0sY2FsbGJhY2s6KCk9Pntjb25zdHtoaWdobGlnaHQ6bH09dGhpcy5ob3QuZ2V0U2VsZWN0ZWRSYW5nZUxhc3QoKSxhPXRoaXMuY29sbGFwc2luZ1VJLnRyYW5zbGF0ZVRyaW1tZWRSb3cobC5yb3cpO3JldHVybiB0aGlzLmNv''@;'; put 'put ''bGxhcHNpbmdVSS5hcmVDaGlsZHJlbkNvbGxhcHNlZChhKT90aGlzLmNvbGxhcHNpbmdVSS5leHBhbmRDaGlsZHJlbihhKTp0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZUNoaWxkcmVuKGEpLCExfSxydW5Pbmx5SWY6KCk9Pnt2YXIgbCxhO2NvbnN0IGQ9bnVsbD09PShsPXRoaXMuaG90Lmdl''@;'; put 'put ''dFNlbGVjdGVkUmFuZ2VMYXN0KCkpfHx2b2lkIDA9PT1sP3ZvaWQgMDpsLmhpZ2hsaWdodDtyZXR1cm4gZCYmKG51bGw9PT0oYT10aGlzLmhvdC5nZXRTZWxlY3RlZFJhbmdlTGFzdCgpKXx8dm9pZCAwPT09YT92b2lkIDA6YS5pc1NpbmdsZSgpKSYmdGhpcy5ob3Quc2VsZWN0aW9uLmlzQ2Vs''@;'; put 'put ''bFZpc2libGUoZCkmJi0xPT09ZC5jb2wmJmQucm93Pj0wfSxncm91cDpBbWUscmVsYXRpdmVUb0dyb3VwOlVtLHBvc2l0aW9uOiJiZWZvcmUifSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9y''@;'; put 'put ''dGN1dHNCeUdyb3VwKEFtZSl9ZGlzYWJsZUNvcmVBUElNb2RpZmllcnMoKXtESChndyx0aGlzLCEwKX1lbmFibGVDb3JlQVBJTW9kaWZpZXJzKCl7REgoZ3csdGhpcywhMSl9b25Nb2RpZnlSb3dEYXRhKGwpe2lmKCFrSChndyx0aGlzKSlyZXR1cm4gdGhpcy5kYXRhTWFuYWdlci5nZXREYXRh''@;'; put 'put ''T2JqZWN0KGwpfW9uTW9kaWZ5U291cmNlTGVuZ3RoKCl7aWYoIWtIKGd3LHRoaXMpKXJldHVybiB0aGlzLmRhdGFNYW5hZ2VyLmNvdW50QWxsUm93cygpfW9uQmVmb3JlRGF0YVNwbGljZShsLGEsZCl7cmV0dXJuISgha0goZ3csdGhpcykmJiF0aGlzLmRhdGFNYW5hZ2VyLmlzUm93SGlnaGVz''@;'; put 'put ''dExldmVsKGwpJiYodGhpcy5kYXRhTWFuYWdlci5zcGxpY2VEYXRhKGwsYSxkKSwxKSl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gVXB0KGMsbCxhLGQpe3JldHVybiB0aGlzLnJvd01vdmVDb250cm9sbGVyLm9uQmVmb3JlUm93TW92ZShjLGwsYSxkKX1mdW5jdGlvbiBa''@;'; put 'put ''cHQoYyxsLGEpe3RoaXMuY29sbGFwc2luZ1VJLnRvZ2dsZVN0YXRlKGMsbCxhKX1mdW5jdGlvbiBXcHQoYyxsLGEpe3JldHVybiB0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc3Rhc2goKSx0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2gudHJpbVN0YXNo''@;'; put 'put ''KGFbMF0sbCksdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLnNoaWZ0U3Rhc2goYVswXSxudWxsLC0xKmwpLHRoaXMuZGF0YU1hbmFnZXIuZmlsdGVyRGF0YShjLGwsYSksREgoUkgsdGhpcywhMCksdGhpcy5kYXRhTWFuYWdlci5nZXREYXRhKCkuc2xpY2UoKX1mdW5jdGlv''@;'; put 'put ''biBZcHQoYyl7cmV0dXJuIHRoaXMuY29udGV4dE1lbnVVSS5hcHBlbmRPcHRpb25zKGMpfWZ1bmN0aW9uIEdwdChjLGwpe3RoaXMuaGVhZGVyc1VJLmFwcGVuZExldmVsSW5kaWNhdG9ycyhjLGwpfWZ1bmN0aW9uICRwdChjKXtyZXR1cm4gTWF0aC5tYXgodGhpcy5oZWFkZXJzVUkucm93SGVh''@;'; put 'put ''ZGVyV2lkdGhDYWNoZSxjKX1mdW5jdGlvbiBLcHQoYyxsLGEsZCl7ZCE9PXRoaXMucGx1Z2luTmFtZSYmdGhpcy5ob3QuX3JlZ2lzdGVyVGltZW91dCgoKT0+e0RIKFJILHRoaXMsITEpLHRoaXMuaGVhZGVyc1VJLnVwZGF0ZVJvd0hlYWRlcldpZHRoKCksdGhpcy5jb2xsYXBzaW5nVUkuY29s''@;'; put 'put ''bGFwc2VkUm93c1N0YXNoLmFwcGx5U3Rhc2goKX0pfWZ1bmN0aW9uIHFwdChjLGwsYSl7Y29uc3QgZD1BcnJheS5mcm9tKGEucmVkdWNlKChoLGYpPT57aWYodGhpcy5kYXRhTWFuYWdlci5pc1BhcmVudChmKSl7Y29uc3Qgdj10aGlzLmRhdGFNYW5hZ2VyLmdldERhdGFPYmplY3QoZikuX19j''@;'; put 'put ''aGlsZHJlbjtyZXR1cm4gaC5hZGQoZiksQXJyYXkuaXNBcnJheSh2KSYmdi5mb3JFYWNoKE09PmguYWRkKHRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgoTSkpKSxofXJldHVybiBoLmFkZChmKX0sbmV3IFNldCkpO2EubGVuZ3RoPTAsYS5wdXNoKC4uLmQpfWZ1bmN0aW9uIFhwdCgpe3Ro''@;'; put 'put ''aXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zdGFzaCgpfWZ1bmN0aW9uIEpwdChjLGwpe3RoaXMuY29sbGFwc2luZ1VJLmNvbGxhcHNlZFJvd3NTdGFzaC5zaGlmdFN0YXNoKHRoaXMuZGF0YU1hbmFnZXIuZ2V0Um93SW5kZXgobCkpLHRoaXMuY29sbGFwc2luZ1VJLmNvbGxh''@;'; put 'put ''cHNlZFJvd3NTdGFzaC5hcHBseVN0YXNoKCksdGhpcy5oZWFkZXJzVUkudXBkYXRlUm93SGVhZGVyV2lkdGgoKX1mdW5jdGlvbiBRcHQoKXt0aGlzLmNvbGxhcHNpbmdVSS5jb2xsYXBzZWRSb3dzU3Rhc2guc3Rhc2goKX1mdW5jdGlvbiBlNHQoYyxsLGEpe3RoaXMuY29sbGFwc2luZ1VJLmNv''@;'; put 'put ''bGxhcHNlZFJvd3NTdGFzaC5zaGlmdFN0YXNoKGEsbnVsbCwtMSksdGhpcy5jb2xsYXBzaW5nVUkuY29sbGFwc2VkUm93c1N0YXNoLmFwcGx5U3Rhc2goKSx0aGlzLmhlYWRlcnNVSS51cGRhdGVSb3dIZWFkZXJXaWR0aCgpfWZ1bmN0aW9uIHQ0dCgpe3RoaXMuZGF0YU1hbmFnZXIucmV3cml0''@;'; put 'put ''ZUNhY2hlKCl9ZnVuY3Rpb24gbjR0KCl7dGhpcy5oZWFkZXJzVUkudXBkYXRlUm93SGVhZGVyV2lkdGgoKX1mdW5jdGlvbiByNHQoYyxsKXtrSChSSCx0aGlzKSYmKGwuc2tpcFJlbmRlcj0hMCl9ZnVuY3Rpb24ga21lKGMpe2lmKCFjM2UoYykpcmV0dXJuIEUkKCJUaGUgTmVzdGVkIFJvd3Mg''@;'; put 'put ''cGx1Z2luIHJlcXVpcmVzIGFuIEFycmF5IG9mIE9iamVjdHMgYXMgYSBkYXRhc2V0IHRvIGJlIHByb3ZpZGVkLiBUaGUgcGx1Z2luIGhhcyBiZWVuIGRpc2FibGVkLiIpLHRoaXMuaG90LmdldFNldHRpbmdzKClbSUhdPSExLHZvaWQgdGhpcy5kaXNhYmxlUGx1Z2luKCk7dGhpcy5kYXRhTWFu''@;'; put 'put ''YWdlci5zZXREYXRhKGMpLHRoaXMuZGF0YU1hbmFnZXIucmV3cml0ZUNhY2hlKCl9ZnVuY3Rpb24gWFEoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGk0dChjKXt2YXIgbD1mdW5jdGlvbiBvNHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9s''@;'; put 'put ''LnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigi''@;'; put 'put ''c3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNb''@;'; put 'put ''bF09YSxjfWNvbnN0IHM0dD1jbGFzcyBhNHR7Y29uc3RydWN0b3IobCl7bGV0IGE9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOndpbmRvdztYUSh0aGlzLCJyb290V2luZG93Iix2b2lkIDApLFhRKHRoaXMsInByZWZpeCIsdm9pZCAwKSxY''@;'; put 'put ''USh0aGlzLCJzYXZlZEtleXMiLFtdKSx0aGlzLnJvb3RXaW5kb3c9YSx0aGlzLnByZWZpeD1sLHRoaXMubG9hZFNhdmVkS2V5cygpfXNhdmVWYWx1ZShsLGEpe3RoaXMucm9vdFdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShgJHt0aGlzLnByZWZpeH1fJHtsfWAsSlNPTi5zdHJpbmdpZnko''@;'; put 'put ''YSkpLC0xPT09dGhpcy5zYXZlZEtleXMuaW5kZXhPZihsKSYmKHRoaXMuc2F2ZWRLZXlzLnB1c2gobCksdGhpcy5zYXZlU2F2ZWRLZXlzKCkpfWxvYWRWYWx1ZShsLGEpe2NvbnN0IGg9dGhpcy5yb290V2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGAke3RoaXMucHJlZml4fV8ke3R5cGVv''@;'; put 'put ''ZiBsPiJ1Ij9hOmx9YCk7cmV0dXJuIG51bGw9PT1oP3ZvaWQgMDpKU09OLnBhcnNlKGgpfXJlc2V0KGwpe3RoaXMucm9vdFdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShgJHt0aGlzLnByZWZpeH1fJHtsfWApfXJlc2V0QWxsKCl7WW4odGhpcy5zYXZlZEtleXMsKGwsYSk9Pnt0aGlz''@;'; put 'put ''LnJvb3RXaW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oYCR7dGhpcy5wcmVmaXh9XyR7dGhpcy5zYXZlZEtleXNbYV19YCl9KSx0aGlzLmNsZWFyU2F2ZWRLZXlzKCl9bG9hZFNhdmVkS2V5cygpe2NvbnN0IGw9dGhpcy5yb290V2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGAke3Ro''@;'; put 'put ''aXMucHJlZml4fV9fcGVyc2lzdGVudFN0YXRlS2V5c2ApLGE9InN0cmluZyI9PXR5cGVvZiBsP0pTT04ucGFyc2UobCk6dm9pZCAwO3RoaXMuc2F2ZWRLZXlzPWF8fFtdfXNhdmVTYXZlZEtleXMoKXt0aGlzLnJvb3RXaW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oYCR7dGhpcy5wcmVmaXh9''@;'; put 'put ''X19wZXJzaXN0ZW50U3RhdGVLZXlzYCxKU09OLnN0cmluZ2lmeSh0aGlzLnNhdmVkS2V5cykpfWNsZWFyU2F2ZWRLZXlzKCl7dGhpcy5zYXZlZEtleXMubGVuZ3RoPTAsdGhpcy5zYXZlU2F2ZWRLZXlzKCl9fTtBby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigicGVyc2lzdGVudFN0YXRlU2F2''@;'; put 'put ''ZSIpLEFvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJwZXJzaXN0ZW50U3RhdGVMb2FkIiksQW8uZ2V0U2luZ2xldG9uKCkucmVnaXN0ZXIoInBlcnNpc3RlbnRTdGF0ZVJlc2V0Iik7Y29uc3QgRG1lPSJwZXJzaXN0ZW50U3RhdGUiO2NsYXNzIGg0dCBleHRlbmRzIEZze2NvbnN0cnVjdG9y''@;'; put 'put ''KCl7c3VwZXIoLi4uYXJndW1lbnRzKSxmdW5jdGlvbiBsNHQoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGM0dChjKXt2YXIgbD1mdW5jdGlvbiB1NHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAh''@;'; put 'put ''PT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJl''@;'; put 'put ''cikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfSh0aGlzLCJzdG9yYWdlIix2''@;'; put 'put ''b2lkIDApfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBEbWV9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMH1pc0VuYWJsZWQoKXtyZXR1cm4hIXRoaXMuaG90LmdldFNldHRpbmdzKClbRG1lXX1lbmFibGVQbHVnaW4oKXt0aGlzLmVuYWJsZWR8fCh0aGlzLnN0''@;'; put 'put ''b3JhZ2V8fCh0aGlzLnN0b3JhZ2U9bmV3IHM0dCh0aGlzLmhvdC5yb290RWxlbWVudC5pZCx0aGlzLmhvdC5yb290V2luZG93KSksdGhpcy5hZGRIb29rKCJwZXJzaXN0ZW50U3RhdGVTYXZlIiwobCxhKT0+dGhpcy5zYXZlVmFsdWUobCxhKSksdGhpcy5hZGRIb29rKCJwZXJzaXN0ZW50U3Rh''@;'; put 'put ''dGVMb2FkIiwobCxhKT0+dGhpcy5sb2FkVmFsdWUobCxhKSksdGhpcy5hZGRIb29rKCJwZXJzaXN0ZW50U3RhdGVSZXNldCIsKCk9PnRoaXMucmVzZXRWYWx1ZSgpKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9ZGlzYWJsZVBsdWdpbigpe3RoaXMuc3RvcmFnZT12b2lkIDAsc3VwZXIuZGlzYWJs''@;'; put 'put ''ZVBsdWdpbigpfXVwZGF0ZVBsdWdpbigpe3RoaXMuZGlzYWJsZVBsdWdpbigpLHRoaXMuZW5hYmxlUGx1Z2luKCksc3VwZXIudXBkYXRlUGx1Z2luKCl9bG9hZFZhbHVlKGwsYSl7YS52YWx1ZT10aGlzLnN0b3JhZ2UubG9hZFZhbHVlKGwpfXNhdmVWYWx1ZShsLGEpe3RoaXMuc3RvcmFnZS5z''@;'; put 'put ''YXZlVmFsdWUobCxhKX1yZXNldFZhbHVlKGwpe3R5cGVvZiBsPiJ1Ij90aGlzLnN0b3JhZ2UucmVzZXRBbGwoKTp0aGlzLnN0b3JhZ2UucmVzZXQobCl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gSlEoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGc0dChjKXt2YXIgbD1m''@;'; put 'put ''dW5jdGlvbiBtNHQoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWZ1bmN0aW9uIEltZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mz9sOmE7dGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9Y29uc3QgUVE9InNlYXJjaCIseTR0PWZ1bmN0aW9uKGMsbCxhLGQsaCl7Yy5nZXRDZWxsTWV0YShsLGEpLmlzU2VhcmNoUmVzdWx0PWh9LF80dD1mdW5jdGlvbihjLGwsYSl7''@;'; put 'put ''cmV0dXJuIShtYyhjKXx8bnVsbD09PWN8fCFjLnRvTG9jYWxlTG93ZXJDYXNlfHwwPT09Yy5sZW5ndGh8fG1jKGwpfHxudWxsPT09bCkmJi0xIT09bC50b1N0cmluZygpLnRvTG9jYWxlTG93ZXJDYXNlKGEubG9jYWxlKS5pbmRleE9mKGMudG9Mb2NhbGVMb3dlckNhc2UoYS5sb2NhbGUpKX07''@;'; put 'put ''dmFyIGVlZT1uZXcgV2Vha1NldDtjbGFzcyB3NHQgZXh0ZW5kcyBGc3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksZnVuY3Rpb24gZjR0KGMsbCl7KGZ1bmN0aW9uIHA0dChjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRo''@;'; put 'put ''ZSBzYW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9KShjLGwpLGwuYWRkKGMpfSh0aGlzLGVlZSksSlEodGhpcywiY2FsbGJhY2siLHk0dCksSlEodGhpcywicXVlcnlNZXRob2QiLF80dCksSlEodGhpcywic2VhcmNoUmVzdWx0Q2xhc3MiLCJodFNlYXJjaFJlc3Vs''@;'; put 'put ''dCIpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiBRUX1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxOTB9aXNFbmFibGVkKCl7cmV0dXJuIHRoaXMuaG90LmdldFNldHRpbmdzKClbUVFdfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7aWYodGhpcy5lbmFibGVk''@;'; put 'put ''KXJldHVybjtjb25zdCBhPXRoaXMuaG90LmdldFNldHRpbmdzKClbUVFdO3RoaXMudXBkYXRlUGx1Z2luU2V0dGluZ3MoYSksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW5kZXJlciIsZnVuY3Rpb24oKXtmb3IodmFyIGQ9YXJndW1lbnRzLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkO2Yr''@;'; put 'put ''KyloW2ZdPWFyZ3VtZW50c1tmXTtyZXR1cm4gSW1lKGVlZSxsLFJtZSkuY2FsbChsLC4uLmgpfSksc3VwZXIuZW5hYmxlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7Y29uc3QgYT1mdW5jdGlvbigpe2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGg9bmV3IEFycmF5KGQp''@;'; put 'put ''LGY9MDtmPGQ7ZisrKWhbZl09YXJndW1lbnRzW2ZdO3JldHVybiBJbWUoZWVlLGwsUm1lKS5jYWxsKGwsLi4uaCl9O3RoaXMuaG90LmFkZEhvb2soImJlZm9yZVJlbmRlcmVyIixhKSx0aGlzLmhvdC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIiwoKT0+e3RoaXMuaG90LnJlbW92ZUhv''@;'; put 'put ''b2soImJlZm9yZVJlbmRlcmVyIixhKX0pLHN1cGVyLmRpc2FibGVQbHVnaW4oKX11cGRhdGVQbHVnaW4oKXt0aGlzLmRpc2FibGVQbHVnaW4oKSx0aGlzLmVuYWJsZVBsdWdpbigpLHN1cGVyLnVwZGF0ZVBsdWdpbigpfXF1ZXJ5KGwpe2xldCBhPWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAw''@;'; put 'put ''IT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0aGlzLmdldENhbGxiYWNrKCksZD1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06dGhpcy5nZXRRdWVyeU1ldGhvZCgpO2NvbnN0IGg9dGhpcy5ob3QuY291bnRSb3dzKCksZj10aGlzLmhv''@;'; put 'put ''dC5jb3VudENvbHMoKSx2PVtdLE09dGhpcy5ob3Q7cmV0dXJuICRvKDAsaC0xLEQ9PnskbygwLGYtMSxaPT57Y29uc3QgbmU9dGhpcy5ob3QuZ2V0RGF0YUF0Q2VsbChELFopLGNlPXRoaXMuaG90LmdldENlbGxNZXRhKEQsWiksYmU9Y2Uuc2VhcmNoLmNhbGxiYWNrfHxhLEJlPShjZS5zZWFy''@;'; put 'put ''Y2gucXVlcnlNZXRob2R8fGQpKGwsbmUsY2UpO0JlJiZ2LnB1c2goe3JvdzpELGNvbDpaLGRhdGE6bmV9KSxiZSYmYmUoTSxELFosbmUsQmUpfSl9KSx2fWdldENhbGxiYWNrKCl7cmV0dXJuIHRoaXMuY2FsbGJhY2t9c2V0Q2FsbGJhY2sobCl7dGhpcy5jYWxsYmFjaz1sfWdldFF1ZXJ5TWV0''@;'; put 'put ''aG9kKCl7cmV0dXJuIHRoaXMucXVlcnlNZXRob2R9c2V0UXVlcnlNZXRob2QobCl7dGhpcy5xdWVyeU1ldGhvZD1sfWdldFNlYXJjaFJlc3VsdENsYXNzKCl7cmV0dXJuIHRoaXMuc2VhcmNoUmVzdWx0Q2xhc3N9c2V0U2VhcmNoUmVzdWx0Q2xhc3MobCl7dGhpcy5zZWFyY2hSZXN1bHRDbGFz''@;'; put 'put ''cz1sfXVwZGF0ZVBsdWdpblNldHRpbmdzKGwpe0thKGwpJiYobC5zZWFyY2hSZXN1bHRDbGFzcyYmdGhpcy5zZXRTZWFyY2hSZXN1bHRDbGFzcyhsLnNlYXJjaFJlc3VsdENsYXNzKSxsLnF1ZXJ5TWV0aG9kJiZ0aGlzLnNldFF1ZXJ5TWV0aG9kKGwucXVlcnlNZXRob2QpLGwuY2FsbGJhY2sm''@;'; put 'put ''JnRoaXMuc2V0Q2FsbGJhY2sobC5jYWxsYmFjaykpfWRlc3Ryb3koKXtzdXBlci5kZXN0cm95KCl9fWZ1bmN0aW9uIFJtZShjLGwsYSxkLGgsZil7Y29uc3Qgdj1mLmNsYXNzTmFtZXx8W107bGV0IE09W107InN0cmluZyI9PXR5cGVvZiB2P009di5zcGxpdCgiICIpOk0ucHVzaCguLi52KSx0''@;'; put 'put ''aGlzLmlzRW5hYmxlZCgpJiZmLmlzU2VhcmNoUmVzdWx0P00uaW5jbHVkZXModGhpcy5zZWFyY2hSZXN1bHRDbGFzcyl8fE0ucHVzaChgJHt0aGlzLnNlYXJjaFJlc3VsdENsYXNzfWApOk0uaW5jbHVkZXModGhpcy5zZWFyY2hSZXN1bHRDbGFzcykmJk0uc3BsaWNlKE0uaW5kZXhPZih0aGlz''@;'; put 'put ''LnNlYXJjaFJlc3VsdENsYXNzKSwxKSxmLmNsYXNzTmFtZT1NLmpvaW4oIiAiKX1mdW5jdGlvbiBMSChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gQzR0KGMpe3ZhciBsPWZ1bmN0aW9uIFM0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wu''@;'; put 'put ''dG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJz''@;'; put 'put ''dHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1ts''@;'; put 'put ''XT1hLGN9Y2xhc3MgTG1le2NvbnN0cnVjdG9yKGwpe0xIKHRoaXMsInZpZXdwb3J0V2lkdGgiLHZvaWQgMCksTEgodGhpcywib3ZlcndyaXRlQ29sdW1uV2lkdGhGbiIsdm9pZCAwKSxMSCh0aGlzLCJiYXNlV2lkdGhzIixuZXcgTWFwKSxMSCh0aGlzLCJzdHJldGNoZWRXaWR0aHMiLG5ldyBN''@;'; put 'put ''YXApLHRoaXMub3ZlcndyaXRlQ29sdW1uV2lkdGhGbj1sfXByZXBhcmUobCl7bGV0e3ZpZXdwb3J0V2lkdGg6YX09bDt0aGlzLnZpZXdwb3J0V2lkdGg9YSx0aGlzLmJhc2VXaWR0aHMuY2xlYXIoKSx0aGlzLnN0cmV0Y2hlZFdpZHRocy5jbGVhcigpfXNldENvbHVtbkJhc2VXaWR0aChsLGEp''@;'; put 'put ''e3RoaXMuYmFzZVdpZHRocy5zZXQobCxhKX1jYWxjdWxhdGUoKXt9Z2V0V2lkdGhzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5zdHJldGNoZWRXaWR0aHMpfX1jbGFzcyBNNHQgZXh0ZW5kcyBMbWV7Y2FsY3VsYXRlKCl7Y29uc3QgbD1BcnJheS5mcm9tKHRoaXMuYmFzZVdpZHRocykucmVk''@;'; put 'put ''dWNlKChjZSxiZSk9PntsZXRbLEVlXT1iZTtyZXR1cm4gY2UrRWV9LDApO2lmKHRoaXMudmlld3BvcnRXaWR0aC1sPDApcmV0dXJuIHZvaWQgdGhpcy5zdHJldGNoZWRXaWR0aHMuY2xlYXIoKTtjb25zdCBkPXRoaXMudmlld3BvcnRXaWR0aC9sLGg9W10sZj1bXTtsZXQgdj10aGlzLnZpZXdw''@;'; put 'put ''b3J0V2lkdGgsTT0wO2lmKHRoaXMuYmFzZVdpZHRocy5mb3JFYWNoKChjZSxiZSk9Pntjb25zdCBFZT1NYXRoLnJvdW5kKGNlKmQpLEJlPXRoaXMub3ZlcndyaXRlQ29sdW1uV2lkdGhGbihFZSxiZSk7RWU9PT1CZSYmRWU+PW1fPyhoLnB1c2goW2JlLEJlXSksTSs9QmUpOkVlIT09QmUmJiho''@;'; put 'put ''LnB1c2goW2JlLEJlXSksZi5wdXNoKGJlKSx2LT1CZSl9KSx2PD1tXylyZXR1cm4gdm9pZCB0aGlzLnN0cmV0Y2hlZFdpZHRocy5jbGVhcigpO2NvbnN0IEQ9di9NO2xldCBaPS0xLG5lPTA7aC5mb3JFYWNoKChjZSxiZSk9PntsZXRbRWUsQmVdPWNlLHFlPUJlO2YuaW5jbHVkZXMoRWUpfHwo''@;'; put 'put ''cWU9TWF0aC5yb3VuZChCZSpEKSksdGhpcy5zdHJldGNoZWRXaWR0aHMuc2V0KEVlLHFlKSxaPUVlLGJlPGgubGVuZ3RoLTEmJihuZSs9cWUpfSksdGhpcy5zdHJldGNoZWRXaWR0aHMuc2l6ZT4xJiZ0aGlzLnN0cmV0Y2hlZFdpZHRocy5zZXQoWixNYXRoLnJvdW5kKHRoaXMudmlld3BvcnRX''@;'; put 'put ''aWR0aC1uZSkpfX1mdW5jdGlvbiBPbWUoYyxsLGEpeyhmdW5jdGlvbiB4NHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLnNldChjLGEp''@;'; put 'put ''fWZ1bmN0aW9uIHRlZShjLGwpe3JldHVybiBjLmdldChQbWUoYyxsKSl9ZnVuY3Rpb24gT0goYyxsLGEpe3JldHVybiBjLnNldChQbWUoYyxsKSxhKSxhfWZ1bmN0aW9uIFBtZShjLGwsYSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGM/Yz09PWw6Yy5oYXMobCkpcmV0dXJuIGFyZ3VtZW50cy5s''@;'; put 'put ''ZW5ndGg8Mz9sOmE7dGhyb3cgbmV3IFR5cGVFcnJvcigiUHJpdmF0ZSBlbGVtZW50IGlzIG5vdCBwcmVzZW50IG9uIHRoaXMgb2JqZWN0Iil9dmFyIFBIPW5ldyBXZWFrTWFwLHBBPW5ldyBXZWFrTWFwO2NsYXNzIEU0dCBleHRlbmRzIExtZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3Vt''@;'; put 'put ''ZW50cyksT21lKHRoaXMsUEgsMCksT21lKHRoaXMscEEsLTEpfXByZXBhcmUobCl7c3VwZXIucHJlcGFyZShsKSxPSChQSCx0aGlzLDApLE9IKHBBLHRoaXMsLTEpfXNldENvbHVtbkJhc2VXaWR0aChsLGEpe3N1cGVyLnNldENvbHVtbkJhc2VXaWR0aChsLGEpLE9IKHBBLHRoaXMsbCksT0go''@;'; put 'put ''UEgsdGhpcyxhKX1jYWxjdWxhdGUoKXtpZigtMT09PXRlZShwQSx0aGlzKSlyZXR1cm47Y29uc3QgbD1BcnJheS5mcm9tKHRoaXMuYmFzZVdpZHRocykucmVkdWNlKChkLGgpPT57bGV0WyxmXT1oO3JldHVybiBkK2Z9LDApLGE9TWF0aC5tYXgodGhpcy52aWV3cG9ydFdpZHRoLWwrdGVlKFBI''@;'; put 'put ''LHRoaXMpLDApO3RoaXMuc3RyZXRjaGVkV2lkdGhzLnNldCh0ZWUocEEsdGhpcyksYSl9fWZ1bmN0aW9uIEZIKGMsbCxhKXtGbWUoYyxsKSxsLnNldChjLGEpfWZ1bmN0aW9uIEZtZShjLGwpe2lmKGwuaGFzKGMpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBpbml0aWFsaXplIHRoZSBz''@;'; put 'put ''YW1lIHByaXZhdGUgZWxlbWVudHMgdHdpY2Ugb24gYW4gb2JqZWN0Iil9ZnVuY3Rpb24gaHUoYyxsKXtyZXR1cm4gYy5nZXQobXcoYyxsKSl9ZnVuY3Rpb24gbmVlKGMsbCxhKXtyZXR1cm4gYy5zZXQobXcoYyxsKSxhKSxhfWZ1bmN0aW9uIG13KGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBl''@;'; put 'put ''b2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgeDE9bmV3IFdlYWtNYXAsdnc9bmV3IFdlYWtNYXAscmVlPW5ldyBXZWFr''@;'; put 'put ''TWFwLEhIPW5ldyBXZWFrTWFwLGdBPW5ldyBXZWFrU2V0O2NsYXNzIGs0dHtjb25zdHJ1Y3RvcihsKXsoZnVuY3Rpb24gVDR0KGMsbCl7Rm1lKGMsbCksbC5hZGQoYyl9KSh0aGlzLGdBKSxGSCh0aGlzLHgxLHZvaWQgMCksRkgodGhpcyx2dyx2b2lkIDApLEZIKHRoaXMscmVlLG5ldyBNYXAo''@;'; put 'put ''W1siYWxsIixuZXcgTTR0KG13KGdBLHRoaXMsSG1lKS5iaW5kKHRoaXMpKV0sWyJsYXN0IixuZXcgRTR0KG13KGdBLHRoaXMsSG1lKS5iaW5kKHRoaXMpKV1dKSksRkgodGhpcyxISCwibm9uZSIpLG5lZSh4MSx0aGlzLGwpLG5lZSh2dyx0aGlzLGh1KHgxLHRoaXMpLmNvbHVtbkluZGV4TWFw''@;'; put 'put ''cGVyLmNyZWF0ZUFuZFJlZ2lzdGVySW5kZXhNYXAoInN0cmV0Y2hDb2x1bW5zIiwicGh5c2ljYWxJbmRleFRvVmFsdWUiKSl9dXNlU3RyYXRlZ3kobCl7bmVlKEhILHRoaXMsaHUocmVlLHRoaXMpLmhhcyhsKT9sOiJub25lIil9cmVmcmVzaFN0cmV0Y2hpbmcoKXsibm9uZSIhPT1odShISCx0''@;'; put 'put ''aGlzKT9odSh4MSx0aGlzKS5iYXRjaEV4ZWN1dGlvbigoKT0+e2h1KHZ3LHRoaXMpLmNsZWFyKCk7Y29uc3QgbD1odShyZWUsdGhpcykuZ2V0KGh1KEhILHRoaXMpKTtsZXQgZD1odSh4MSx0aGlzKS52aWV3LmdldFZpZXdwb3J0V2lkdGgoKTttdyhnQSx0aGlzLEQ0dCkuY2FsbCh0aGlzKSYm''@;'; put 'put ''KGQtPWgwKGh1KHgxLHRoaXMpLnJvb3REb2N1bWVudCkpLGwucHJlcGFyZSh7dmlld3BvcnRXaWR0aDpkfSk7Zm9yKGxldCBoPTA7aDxodSh4MSx0aGlzKS5jb3VudENvbHMoKTtoKyspaHUoeDEsdGhpcykuY29sdW1uSW5kZXhNYXBwZXIuaXNIaWRkZW4oaHUoeDEsdGhpcykudG9QaHlzaWNh''@;'; put 'put ''bENvbHVtbihoKSl8fGwuc2V0Q29sdW1uQmFzZVdpZHRoKGgsbXcoZ0EsdGhpcyxJNHQpLmNhbGwodGhpcyxoKSk7bC5jYWxjdWxhdGUoKSxsLmdldFdpZHRocygpLmZvckVhY2goaD0+e2xldFtmLHZdPWg7aHUodncsdGhpcykuc2V0VmFsdWVBdEluZGV4KGh1KHgxLHRoaXMpLnRvUGh5c2lj''@;'; put 'put ''YWxDb2x1bW4oZiksdil9KX0sITApOmh1KHZ3LHRoaXMpLmNsZWFyKCl9Z2V0U3RyZXRjaGVkV2lkdGgobCl7cmV0dXJuIGh1KHZ3LHRoaXMpLmdldFZhbHVlQXRJbmRleChodSh4MSx0aGlzKS50b1BoeXNpY2FsQ29sdW1uKGwpKX19ZnVuY3Rpb24gRDR0KCl7Y29uc3R7dmlldzpjfT1odSh4''@;'; put 'put ''MSx0aGlzKTtpZihjLmlzVmVydGljYWxseVNjcm9sbGFibGVCeVdpbmRvdygpKXJldHVybiExO2NvbnN0IGw9Yy5nZXRWaWV3cG9ydEhlaWdodCgpLGE9aHUoeDEsdGhpcykuY291bnRSb3dzKCksZD1jLmdldFN0eWxlc0hhbmRsZXIoKS5nZXREZWZhdWx0Um93SGVpZ2h0KCk7bGV0IGg9MCxm''@;'; put 'put ''PSExO2ZvcihsZXQgTT0wO008YTtNKyspe3ZhciB2O2lmKGgrPShudWxsIT09KHY9aHUoeDEsdGhpcykuZ2V0Um93SGVpZ2h0KE0pKSYmdm9pZCAwIT09dj92OmQpKygwPT09TT8xOjApLGg+bCl7Zj0hMDticmVha319cmV0dXJuIGZ9ZnVuY3Rpb24gSTR0KGMpe3ZhciBsO3JldHVybiBudWxs''@;'; put 'put ''IT09KGw9aHUoeDEsdGhpcykuZ2V0Q29sV2lkdGgoYywiU3RyZXRjaENvbHVtbnMiKSkmJnZvaWQgMCE9PWw/bDptX31mdW5jdGlvbiBIbWUoYyxsKXtyZXR1cm4gaHUoeDEsdGhpcykucnVuSG9va3MoImJlZm9yZVN0cmV0Y2hpbmdDb2x1bW5XaWR0aCIsYyxsKX1mdW5jdGlvbiBpZWUoYyxs''@;'; put 'put ''LGEpe05tZShjLGwpLGwuc2V0KGMsYSl9ZnVuY3Rpb24gTm1lKGMsbCl7aWYobC5oYXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX1mdW5jdGlvbiBvZWUoYyxsLGEpe3JldHVy''@;'; put 'put ''biBjLnNldChOSChjLGwpLGEpLGF9ZnVuY3Rpb24gWWcoYyxsKXtyZXR1cm4gYy5nZXQoTkgoYyxsKSl9ZnVuY3Rpb24gTkgoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJy''@;'; put 'put ''b3IoIlByaXZhdGUgZWxlbWVudCBpcyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfXZhciBidz1uZXcgV2Vha01hcCxWSD1uZXcgV2Vha01hcCxtQT1uZXcgV2Vha01hcCxhZWU9bmV3IFdlYWtTZXQ7Y2xhc3MgUDR0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1''@;'; put 'put ''bWVudHMpLGZ1bmN0aW9uIFI0dChjLGwpe05tZShjLGwpLGwuYWRkKGMpfSh0aGlzLGFlZSksaWVlKHRoaXMsYncsbmV3IGs0dCh0aGlzLmhvdCkpLGllZSh0aGlzLFZILG51bGwpLGllZSh0aGlzLG1BLG5ldyBSZXNpemVPYnNlcnZlcihsPT57cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57''@;'; put 'put ''dmFyIGE7bnVsbCE9PShhPXRoaXMuaG90KSYmdm9pZCAwIT09YSYmYS52aWV3LmlzSG9yaXpvbnRhbGx5U2Nyb2xsYWJsZUJ5V2luZG93KCkmJmwuZm9yRWFjaChkPT57bGV0e2NvbnRlbnRSZWN0Omh9PWQ7bnVsbCE9PVlnKFZILHRoaXMpJiZZZyhWSCx0aGlzKSE9PWgud2lkdGgmJih0aGlz''@;'; put 'put ''LmhvdC5yZWZyZXNoRGltZW5zaW9ucygpLHRoaXMuaG90LnZpZXcuYWRqdXN0RWxlbWVudHNTaXplKCkpLG9lZShWSCx0aGlzLGgud2lkdGgpfSl9KX0pKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4ic3RyZXRjaENvbHVtbnMifXN0YXRpYyBnZXQgUExVR0lOX1BSSU9SSVRZKCl7''@;'; put 'put ''cmV0dXJuIDE1NX1zdGF0aWMgZ2V0IFNFVFRJTkdfS0VZUygpe3JldHVybiEwfWlzRW5hYmxlZCgpe3JldHVyblsiYWxsIiwibGFzdCJdLmluY2x1ZGVzKHRoaXMuaG90LmdldFNldHRpbmdzKCkuc3RyZXRjaEgpfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwoWWco''@;'; put 'put ''YncsdGhpcykudXNlU3RyYXRlZ3kodGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5zdHJldGNoSCksWWcobUEsdGhpcykub2JzZXJ2ZSh0aGlzLmhvdC5yb290RWxlbWVudCksdGhpcy5hZGRIb29rKCJiZWZvcmVSZW5kZXIiLGZ1bmN0aW9uKCl7Zm9yKHZhciBhPWFyZ3VtZW50cy5sZW5ndGgsZD1u''@;'; put 'put ''ZXcgQXJyYXkoYSksaD0wO2g8YTtoKyspZFtoXT1hcmd1bWVudHNbaF07cmV0dXJuIE5IKGFlZSxsLEg0dCkuY2FsbChsLC4uLmQpfSksdGhpcy5hZGRIb29rKCJtb2RpZnlDb2xXaWR0aCIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7''@;'; put 'put ''aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gTkgoYWVlLGwsRjR0KS5jYWxsKGwsLi4uZCl9LDEwKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2luKCl7WWcoYncsdGhpcykudXNlU3RyYXRlZ3kodGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS5zdHJldGNoSCksc3VwZXIu''@;'; put 'put ''dXBkYXRlUGx1Z2luKCl9ZGlzYWJsZVBsdWdpbigpe3N1cGVyLmRpc2FibGVQbHVnaW4oKSxZZyhtQSx0aGlzKS51bm9ic2VydmUodGhpcy5ob3Qucm9vdEVsZW1lbnQpfWdldENvbHVtbldpZHRoKGwpe3JldHVybiBZZyhidyx0aGlzKS5nZXRTdHJldGNoZWRXaWR0aChsKX1kZXN0cm95KCl7''@;'; put 'put ''WWcobUEsdGhpcykuZGlzY29ubmVjdCgpLG9lZShtQSx0aGlzLG51bGwpLG9lZShidyx0aGlzLG51bGwpLHN1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gRjR0KGMsbCxhKXtpZihhPT09dGhpcy5wbHVnaW5OYW1lKXJldHVybjtjb25zdCBkPXRoaXMuZ2V0Q29sdW1uV2lkdGgobCk7cmV0dXJu''@;'; put 'put ''Im51bWJlciI9PXR5cGVvZiBkP2Q6Y31mdW5jdGlvbiBINHQoYyl7YyYmWWcoYncsdGhpcykucmVmcmVzaFN0cmV0Y2hpbmcoKX1mdW5jdGlvbiBCSChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gQjR0KGMpe3ZhciBsPWZ1bmN0aW9uIGo0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8''@;'; put 'put ''IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBw''@;'; put 'put ''cmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmln''@;'; put 'put ''dXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gc2VlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90''@;'; put 'put ''IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX12YXIgakg9bmV3IFdlYWtTZXQ7Y2xhc3MgWjR0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uIE40dChjLGwpeyhmdW5jdGlvbiBWNHQoYyxsKXtpZihsLmhhcyhjKSl0aHJvdyBuZXcgVHlwZUVy''@;'; put 'put ''cm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxqSCksQkgodGhpcywic2Nyb2xsYmFycyIsW10pLEJIKHRoaXMsImNsb25lcyIsW10pLEJIKHRoaXMsImxvY2tlZENvbGxlY3Rp''@;'; put 'put ''b24iLCExKSxCSCh0aGlzLCJmcmVlemVPdmVybGF5cyIsITEpfXN0YXRpYyBnZXQgUExVR0lOX0tFWSgpe3JldHVybiJ0b3VjaFNjcm9sbCJ9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1cm4gMjAwfXN0YXRpYyBnZXQgU0VUVElOR19LRVlTKCl7cmV0dXJuITB9aXNFbmFibGVk''@;'; put 'put ''KCl7cmV0dXJuIHkkKCl9ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJhZnRlclZpZXdSZW5kZXIiLCgpPT5zZWUoakgsdGhpcyxXNHQpLmNhbGwodGhpcykpLHRoaXMucmVnaXN0ZXJFdmVudHMoKSxzdXBlci5lbmFibGVQbHVnaW4oKSl9dXBkYXRlUGx1Z2lu''@;'; put 'put ''KCl7dGhpcy5sb2NrZWRDb2xsZWN0aW9uPSExLHN1cGVyLnVwZGF0ZVBsdWdpbigpfWRpc2FibGVQbHVnaW4oKXtzdXBlci5kaXNhYmxlUGx1Z2luKCl9cmVnaXN0ZXJFdmVudHMoKXt0aGlzLmFkZEhvb2soImJlZm9yZVRvdWNoU2Nyb2xsIiwoKT0+c2VlKGpILHRoaXMsWTR0KS5jYWxsKHRo''@;'; put 'put ''aXMpKSx0aGlzLmFkZEhvb2soImFmdGVyTW9tZW50dW1TY3JvbGwiLCgpPT5zZWUoakgsdGhpcyxHNHQpLmNhbGwodGhpcykpfX1mdW5jdGlvbiBXNHQoKXtpZih0aGlzLmxvY2tlZENvbGxlY3Rpb24pcmV0dXJuO2NvbnN0e3RvcE92ZXJsYXk6Yyxib3R0b21PdmVybGF5OmwsaW5saW5lU3Rh''@;'; put 'put ''cnRPdmVybGF5OmEsdG9wSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5OmQsYm90dG9tSW5saW5lU3RhcnRDb3JuZXJPdmVybGF5Omh9PXRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXM7dGhpcy5sb2NrZWRDb2xsZWN0aW9uPSEwLHRoaXMuc2Nyb2xsYmFycy5sZW5ndGg9MCx0aGlzLnNjcm9s''@;'; put 'put ''bGJhcnMucHVzaChjKSxsLmNsb25lJiZ0aGlzLnNjcm9sbGJhcnMucHVzaChsKSx0aGlzLnNjcm9sbGJhcnMucHVzaChhKSxkJiZ0aGlzLnNjcm9sbGJhcnMucHVzaChkKSxoJiZoLmNsb25lJiZ0aGlzLnNjcm9sbGJhcnMucHVzaChoKSx0aGlzLmNsb25lcz1bXSxjLm5lZWRGdWxsUmVuZGVy''@;'; put 'put ''JiZ0aGlzLmNsb25lcy5wdXNoKGMuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSksbC5uZWVkRnVsbFJlbmRlciYmdGhpcy5jbG9uZXMucHVzaChsLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpLGEubmVlZEZ1bGxSZW5kZXImJnRoaXMuY2xvbmVzLnB1c2goYS5jbG9u''@;'; put 'put ''ZS53dFRhYmxlLmhvbGRlci5wYXJlbnROb2RlKSxkJiZ0aGlzLmNsb25lcy5wdXNoKGQuY2xvbmUud3RUYWJsZS5ob2xkZXIucGFyZW50Tm9kZSksaCYmaC5jbG9uZSYmdGhpcy5jbG9uZXMucHVzaChoLmNsb25lLnd0VGFibGUuaG9sZGVyLnBhcmVudE5vZGUpfWZ1bmN0aW9uIFk0dCgpe3Ro''@;'; put 'put ''aXMuZnJlZXplT3ZlcmxheXM9ITAsWW4odGhpcy5jbG9uZXMsYz0+e1RpKGMsImhpZGUtdHdlZW4iKX0pfWZ1bmN0aW9uIEc0dCgpe3RoaXMuZnJlZXplT3ZlcmxheXM9ITEsWW4odGhpcy5jbG9uZXMsYz0+e2NhKGMsImhpZGUtdHdlZW4iKSxUaShjLCJzaG93LXR3ZWVuIil9KSx0aGlzLmhv''@;'; put 'put ''dC5fcmVnaXN0ZXJUaW1lb3V0KCgpPT57WW4odGhpcy5jbG9uZXMsYz0+e2NhKGMsInNob3ctdHdlZW4iKX0pfSw0MDApLFluKHRoaXMuc2Nyb2xsYmFycyxjPT57Yy5yZWZyZXNoKCksYy5yZXNldEZpeGVkUG9zaXRpb24oKX0pLHRoaXMuaG90LnZpZXcuX3d0Lnd0T3ZlcmxheXMuc3luY1Nj''@;'; put 'put ''cm9sbFdpdGhNYXN0ZXIoKX1jb25zdCB6SD0idHJpbVJvd3MiO3ZhciBWbWU9bmV3IFdlYWtTZXQ7Y2xhc3MgdGd0IGV4dGVuZHMgRnN7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLGZ1bmN0aW9uICQ0dChjLGwpeyhmdW5jdGlvbiBLNHQoYyxsKXtpZihsLmhhcyhjKSl0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgaW5pdGlhbGl6ZSB0aGUgc2FtZSBwcml2YXRlIGVsZW1lbnRzIHR3aWNlIG9uIGFuIG9iamVjdCIpfSkoYyxsKSxsLmFkZChjKX0odGhpcyxWbWUpLGZ1bmN0aW9uIHE0dChjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gWDR0KGMpe3ZhciBsPWZ1bmN0''@;'; put 'put ''aW9uIEo0dChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBl''@;'; put 'put ''RXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVy''@;'; put 'put ''dHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9KHRoaXMsInRyaW1tZWRSb3dzTWFwIixudWxsKX1zdGF0aWMgZ2V0IFBMVUdJTl9LRVkoKXtyZXR1cm4gekh9c3RhdGljIGdldCBQTFVHSU5fUFJJT1JJVFkoKXtyZXR1''@;'; put 'put ''cm4gMzMwfWlzRW5hYmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKVt6SF19ZW5hYmxlUGx1Z2luKCl7dGhpcy5lbmFibGVkfHwodGhpcy50cmltbWVkUm93c01hcD10aGlzLmhvdC5yb3dJbmRleE1hcHBlci5yZWdpc3Rlck1hcCgidHJpbVJvd3MiLG5ldyBXRSksdGhpcy50''@;'; put 'put ''cmltbWVkUm93c01hcC5hZGRMb2NhbEhvb2soImluaXQiLCgpPT5mdW5jdGlvbiBRNHQoYyxsLGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M9PT1sOmMuaGFzKGwpKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDM/bDphO3Rocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgZWxlbWVudCBp''@;'; put 'put ''cyBub3QgcHJlc2VudCBvbiB0aGlzIG9iamVjdCIpfShWbWUsdGhpcyxuZ3QpLmNhbGwodGhpcykpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX11cGRhdGVQbHVnaW4oKXtjb25zdCBsPXRoaXMuaG90LmdldFNldHRpbmdzKClbekhdO0FycmF5LmlzQXJyYXkobCkmJnRoaXMuaG90LmJhdGNoRXhl''@;'; put 'put ''Y3V0aW9uKCgpPT57dGhpcy50cmltbWVkUm93c01hcC5jbGVhcigpLFluKGwsYT0+e3RoaXMudHJpbW1lZFJvd3NNYXAuc2V0VmFsdWVBdEluZGV4KGEsITApfSl9LCEwKSxzdXBlci51cGRhdGVQbHVnaW4oKX1kaXNhYmxlUGx1Z2luKCl7dGhpcy5ob3Qucm93SW5kZXhNYXBwZXIudW5yZWdp''@;'; put 'put ''c3Rlck1hcCgidHJpbVJvd3MiKSxzdXBlci5kaXNhYmxlUGx1Z2luKCl9Z2V0VHJpbW1lZFJvd3MoKXtyZXR1cm4gdGhpcy50cmltbWVkUm93c01hcC5nZXRUcmltbWVkSW5kZXhlcygpfXRyaW1Sb3dzKGwpe2NvbnN0IGE9dGhpcy5nZXRUcmltbWVkUm93cygpLGQ9dGhpcy5pc1ZhbGlkQ29u''@;'; put 'put ''ZmlnKGwpO2xldCBoPWE7ZCYmKGg9QXJyYXkuZnJvbShuZXcgU2V0KGEuY29uY2F0KGwpKSkpLCExIT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVRyaW1Sb3ciLGEsaCxkKSYmKGQmJnRoaXMuaG90LmJhdGNoRXhlY3V0aW9uKCgpPT57WW4obCx2PT57dGhpcy50cmltbWVkUm93c01hcC5z''@;'; put 'put ''ZXRWYWx1ZUF0SW5kZXgodiwhMCl9KX0sITApLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclRyaW1Sb3ciLGEsaCxkLGQmJmgubGVuZ3RoPmEubGVuZ3RoKSl9dHJpbVJvdygpe2Zvcih2YXIgbD1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KGwpLGQ9MDtkPGw7ZCsrKWFbZF09YXJndW1l''@;'; put 'put ''bnRzW2RdO3RoaXMudHJpbVJvd3MoYSl9dW50cmltUm93cyhsKXtjb25zdCBhPXRoaXMuZ2V0VHJpbW1lZFJvd3MoKSxkPXRoaXMuaXNWYWxpZENvbmZpZyhsKTtsZXQgaD1hO2NvbnN0IGY9dGhpcy50cmltbWVkUm93c01hcC5nZXRWYWx1ZXMoKS5zbGljZSgpLHY9bC5sZW5ndGg+MDtkJiZ2''@;'; put 'put ''JiYoWW4obCxEPT57ZltEXT0hMX0pLGg9cXUoZiwoRCxaLG5lKT0+KFomJkQucHVzaChuZSksRCksW10pKSwhMSE9PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVVbnRyaW1Sb3ciLGEsaCxkJiZ2KSYmKGQmJnYmJnRoaXMudHJpbW1lZFJvd3NNYXAuc2V0VmFsdWVzKGYpLHRoaXMuaG90LnJ1''@;'; put 'put ''bkhvb2tzKCJhZnRlclVudHJpbVJvdyIsYSxoLGQmJnYsZCYmaC5sZW5ndGg8YS5sZW5ndGgpKX11bnRyaW1Sb3coKXtmb3IodmFyIGw9YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShsKSxkPTA7ZDxsO2QrKylhW2RdPWFyZ3VtZW50c1tkXTt0aGlzLnVudHJpbVJvd3MoYSl9aXNUcmlt''@;'; put 'put ''bWVkKGwpe3JldHVybiB0aGlzLnRyaW1tZWRSb3dzTWFwLmdldFZhbHVlQXRJbmRleChsKXx8ITF9dW50cmltQWxsKCl7dGhpcy51bnRyaW1Sb3dzKHRoaXMuZ2V0VHJpbW1lZFJvd3MoKSl9aXNWYWxpZENvbmZpZyhsKXtjb25zdCBhPXRoaXMuaG90LmNvdW50U291cmNlUm93cygpO3JldHVy''@;'; put 'put ''biBsLmV2ZXJ5KGQ9Pk51bWJlci5pc0ludGVnZXIoZCkmJmQ+PTAmJmQ8YSl9ZGVzdHJveSgpe3N1cGVyLmRlc3Ryb3koKX19ZnVuY3Rpb24gbmd0KCl7Y29uc3QgYz10aGlzLmhvdC5nZXRTZXR0aW5ncygpW3pIXTtBcnJheS5pc0FycmF5KGMpJiZ0aGlzLmhvdC5iYXRjaEV4ZWN1dGlvbigo''@;'; put 'put ''KT0+e1luKGMsbD0+e3RoaXMudHJpbW1lZFJvd3NNYXAuc2V0VmFsdWVBdEluZGV4KGwsITApfSl9LCEwKX1jbGFzcyAkMntjb25zdHJ1Y3RvcihsKXsoZnVuY3Rpb24gcmd0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBpZ3QoYyl7dmFyIGw9ZnVuY3Rpb24gb2d0KGMsbCl7aWYoIm9iamVj''@;'; put 'put ''dCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBt''@;'; put 'put ''dXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVy''@;'; put 'put ''YWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30pKHRoaXMsImFjdGlvblR5cGUiLCIiKSx0aGlzLmFjdGlvblR5cGU9bH11bmRvKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX1yZWRvKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVt''@;'; put 'put ''ZW50ZWQiKX19ZnVuY3Rpb24gVUgoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGFndChjKXt2YXIgbD1mdW5jdGlvbiBzZ3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNh''@;'; put 'put ''bGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmlu''@;'; put 'put ''ZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGxlZSBleHRlbmRzICQye2NvbnN0cnVjdG9y''@;'; put 'put ''KGwpe2xldHtzdGF0ZUJlZm9yZTphLHJhbmdlOmQsdHlwZTpoLGFsaWdubWVudDpmfT1sO3N1cGVyKCJjZWxsX2FsaWdubWVudCIpLFVIKHRoaXMsInN0YXRlQmVmb3JlIix2b2lkIDApLFVIKHRoaXMsInJhbmdlIix2b2lkIDApLFVIKHRoaXMsInR5cGUiLHZvaWQgMCksVUgodGhpcywiYWxp''@;'; put 'put ''Z25tZW50Iix2b2lkIDApLHRoaXMuc3RhdGVCZWZvcmU9YSx0aGlzLnJhbmdlPWQsdGhpcy50eXBlPWgsdGhpcy5hbGlnbm1lbnQ9Zn1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYmVmb3JlQ2VsbEFsaWdubWVudCIsKGQsaCxmLHYpPT57YS5kb25lKCgp''@;'; put 'put ''PT5uZXcgbGVlKHtzdGF0ZUJlZm9yZTpkLHJhbmdlOmgsdHlwZTpmLGFsaWdubWVudDp2fSkpfSl9dW5kbyhsLGEpe1luKHRoaXMucmFuZ2UsZD0+e2QuZm9yQWxsKChoLGYpPT57aD49MCYmZj49MCYmbC5zZXRDZWxsTWV0YShoLGYsImNsYXNzTmFtZSIsdGhpcy5zdGF0ZUJlZm9yZVtoXVtm''@;'; put 'put ''XXx8IiBodExlZnQiKX0pfSksbC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxsLnJlbmRlcigpfXJlZG8obCxhKXtLbSh0aGlzLnJhbmdlLHRoaXMudHlwZSx0aGlzLmFsaWdubWVudCwoZCxoKT0+bC5nZXRDZWxsTWV0YShkLGgpLChkLGgsZix2KT0+bC5zZXRDZWxsTWV0YShk''@;'; put 'put ''LGgsZix2KSksbC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxsLnJlbmRlcigpfX1mdW5jdGlvbiBCbWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIGxndChjKXt2YXIgbD1mdW5jdGlvbiBjZ3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBh''@;'; put 'put ''PWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIp''@;'; put 'put ''fXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJs''@;'; put 'put ''ZTohMH0pOmNbbF09YSxjfWNsYXNzIGNlZSBleHRlbmRzICQye2NvbnN0cnVjdG9yKGwpe2xldHtjb2x1bW5zOmEsZmluYWxJbmRleDpkfT1sO3N1cGVyKCJjb2xfbW92ZSIpLEJtZSh0aGlzLCJjb2x1bW5zIix2b2lkIDApLEJtZSh0aGlzLCJmaW5hbENvbHVtbkluZGV4Iix2b2lkIDApLHRo''@;'; put 'put ''aXMuY29sdW1ucz1hLnNsaWNlKCksdGhpcy5maW5hbENvbHVtbkluZGV4PWR9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImJlZm9yZUNvbHVtbk1vdmUiLChkLGgpPT57ITEhPT1kJiZhLmRvbmUoKCk9Pm5ldyBjZWUoe2NvbHVtbnM6ZCxmaW5hbEluZGV4''@;'; put 'put ''Omh9KSl9KX11bmRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigibWFudWFsQ29sdW1uTW92ZSIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksaFEodGhpcy5jb2x1bW5zLHRoaXMuZmluYWxDb2x1bW5JbmRleCxsLmNvbHVtbkluZGV4TWFwcGVyLmdldE51bWJlck9mSW5k''@;'; put 'put ''ZXhlcygpKS5yZXZlcnNlKCkuZm9yRWFjaChmPT57bGV0e2Zyb206dix0bzpNfT1mO3Y8TSYmKE0tPTEpLGQubW92ZUNvbHVtbihNLHYpfSksbC5yZW5kZXIoKSxsLmRlc2VsZWN0Q2VsbCgpLGwuc2VsZWN0Q29sdW1ucyh0aGlzLmNvbHVtbnNbMF0sdGhpcy5jb2x1bW5zWzBdK3RoaXMuY29s''@;'; put 'put ''dW1ucy5sZW5ndGgtMSl9cmVkbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oIm1hbnVhbENvbHVtbk1vdmUiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGQubW92ZUNvbHVtbnModGhpcy5jb2x1bW5zLnNsaWNlKCksdGhpcy5maW5hbENvbHVtbkluZGV4KSxsLnJlbmRl''@;'; put 'put ''cigpLGwuZGVzZWxlY3RDZWxsKCksbC5zZWxlY3RDb2x1bW5zKHRoaXMuZmluYWxDb2x1bW5JbmRleCx0aGlzLmZpbmFsQ29sdW1uSW5kZXgrdGhpcy5jb2x1bW5zLmxlbmd0aC0xKX19ZnVuY3Rpb24gam1lKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB1Z3QoYyl7dmFyIGw9ZnVuY3Rpb24g''@;'; put 'put ''ZGd0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJv''@;'; put 'put ''cigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShj''@;'; put 'put ''LGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyB1ZWUgZXh0ZW5kcyAkMntjb25zdHJ1Y3RvcihsKXtsZXR7Y3VycmVudFNvcnRTdGF0ZTphLG5ld1NvcnRTdGF0ZTpkfT1sO3N1cGVyKCJjb2xfc29ydCIpLGptZSh0''@;'; put 'put ''aGlzLCJwcmV2aW91c1NvcnRTdGF0ZSIsdm9pZCAwKSxqbWUodGhpcywibmV4dFNvcnRTdGF0ZSIsdm9pZCAwKSx0aGlzLnByZXZpb3VzU29ydFN0YXRlPWEsdGhpcy5uZXh0U29ydFN0YXRlPWR9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImJlZm9yZUNv''@;'; put 'put ''bHVtblNvcnQiLChkLGgsZik9PntmJiZhLmRvbmUoKCk9Pm5ldyB1ZWUoe2N1cnJlbnRTb3J0U3RhdGU6ZCxuZXdTb3J0U3RhdGU6aH0pKX0pfXVuZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJjb2x1bW5Tb3J0aW5nIiksaD1sLmdldFBsdWdpbigibXVsdGlDb2x1bW5Tb3J0aW5nIiks''@;'; put 'put ''Zj1oLmlzRW5hYmxlZCgpP2g6ZDt0aGlzLnByZXZpb3VzU29ydFN0YXRlLmxlbmd0aD9mLnNvcnQodGhpcy5wcmV2aW91c1NvcnRTdGF0ZSk6Zi5jbGVhclNvcnQoKSxhKCl9cmVkbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oImNvbHVtblNvcnRpbmciKSxoPWwuZ2V0UGx1Z2luKCJtdWx0''@;'; put 'put ''aUNvbHVtblNvcnRpbmciKTsoaC5pc0VuYWJsZWQoKT9oOmQpLnNvcnQodGhpcy5uZXh0U29ydFN0YXRlKSxhKCl9fWZ1bmN0aW9uIHptZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gaGd0KGMpe3ZhciBsPWZ1bmN0aW9uIGZndChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0''@;'; put 'put ''dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRp''@;'; put 'put ''dmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxl''@;'; put 'put ''OiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgZGVlIGV4dGVuZHMgJDJ7Y29uc3RydWN0b3IobCl7bGV0e2luZGV4OmEsYW1vdW50OmR9PWw7c3VwZXIoImluc2VydF9jb2wiKSx6bWUodGhpcywiaW5kZXgiLHZvaWQgMCksem1lKHRoaXMsImFtb3VudCIsdm9pZCAwKSx0aGlzLmlu''@;'; put 'put ''ZGV4PWEsdGhpcy5hbW91bnQ9ZH1zdGF0aWMgc3RhcnRSZWdpc3RlcmluZ0V2ZW50cyhsLGEpe2wuYWRkSG9vaygiYWZ0ZXJDcmVhdGVDb2wiLChkLGgsZik9PnthLmRvbmUoKCk9Pm5ldyBkZWUoe2luZGV4OmQsYW1vdW50Omh9KSxmKX0pfXVuZG8obCxhKXtsLmFkZEhvb2tPbmNlKCJhZnRl''@;'; put 'put ''clJlbW92ZUNvbCIsYSksbC5hbHRlcigicmVtb3ZlX2NvbCIsdGhpcy5pbmRleCx0aGlzLmFtb3VudCwiVW5kb1JlZG8udW5kbyIpfXJlZG8obCxhKXtsLmFkZEhvb2tPbmNlKCJhZnRlckNyZWF0ZUNvbCIsYSksbC5hbHRlcigiaW5zZXJ0X2NvbF9zdGFydCIsdGhpcy5pbmRleCx0aGlzLmFt''@;'; put 'put ''b3VudCwiVW5kb1JlZG8ucmVkbyIpfX1mdW5jdGlvbiBVbWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIHBndChjKXt2YXIgbD1mdW5jdGlvbiBnZ3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBjO3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAh''@;'; put 'put ''PT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJl''@;'; put 'put ''cikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGhlZSBleHRlbmRz''@;'; put 'put ''ICQye2NvbnN0cnVjdG9yKGwpe2xldHtpbmRleDphLGFtb3VudDpkfT1sO3N1cGVyKCJpbnNlcnRfcm93IiksVW1lKHRoaXMsImluZGV4Iix2b2lkIDApLFVtZSh0aGlzLCJhbW91bnQiLHZvaWQgMCksdGhpcy5pbmRleD1hLHRoaXMuYW1vdW50PWR9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdF''@;'; put 'put ''dmVudHMobCxhKXtsLmFkZEhvb2soImFmdGVyQ3JlYXRlUm93IiwoZCxoLGYpPT57YS5kb25lKCgpPT5uZXcgaGVlKHtpbmRleDpkLGFtb3VudDpofSksZil9KX11bmRvKGwsYSl7Y29uc3QgZD1sLmNvdW50Um93cygpLGg9bC5nZXRTZXR0aW5ncygpLm1pblNwYXJlUm93czt0aGlzLmluZGV4''@;'; put 'put ''Pj1kJiZ0aGlzLmluZGV4LWg8ZCYmKHRoaXMuaW5kZXgtPWgpLGwuYWRkSG9va09uY2UoImFmdGVyUmVtb3ZlUm93IixhKSxsLmFsdGVyKCJyZW1vdmVfcm93Iix0aGlzLmluZGV4LHRoaXMuYW1vdW50LCJVbmRvUmVkby51bmRvIil9cmVkbyhsLGEpe2wuYWRkSG9va09uY2UoImFmdGVyQ3Jl''@;'; put 'put ''YXRlUm93IixhKSxsLmFsdGVyKCJpbnNlcnRfcm93X2Fib3ZlIix0aGlzLmluZGV4LHRoaXMuYW1vdW50LCJVbmRvUmVkby5yZWRvIil9fWZ1bmN0aW9uIFpIKGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBtZ3QoYyl7dmFyIGw9ZnVuY3Rpb24gdmd0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVv''@;'; put 'put ''ZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVy''@;'; put 'put ''biBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxj''@;'; put 'put ''b25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY31jbGFzcyBmZWUgZXh0ZW5kcyAkMntjb25zdHJ1Y3RvcihsKXtsZXR7Y2hhbmdlczphLHNlbGVjdGVkOmQsY291bnRDb2xzOmgsY291bnRSb3dzOmZ9PWw7c3VwZXIoImNoYW5nZSIpLFpIKHRoaXMsImNoYW5nZXMiLHZvaWQg''@;'; put 'put ''MCksWkgodGhpcywic2VsZWN0ZWQiLHZvaWQgMCksWkgodGhpcywiY291bnRDb2xzIix2b2lkIDApLFpIKHRoaXMsImNvdW50Um93cyIsdm9pZCAwKSx0aGlzLmNoYW5nZXM9YSx0aGlzLnNlbGVjdGVkPWQsdGhpcy5jb3VudENvbHM9aCx0aGlzLmNvdW50Um93cz1mfXN0YXRpYyBzdGFydFJl''@;'; put 'put ''Z2lzdGVyaW5nRXZlbnRzKGwsYSl7bC5hZGRIb29rKCJiZWZvcmVDaGFuZ2UiLGZ1bmN0aW9uKGQsaCl7Y29uc3QgZj1kJiZkLmxlbmd0aDtmJiZkLmZpbmQoRD0+e2NvbnN0WywsWixuZV09RDtyZXR1cm4gWiE9PW5lfSkmJmEuZG9uZSgoKT0+e2NvbnN0IEQ9ZC5yZWR1Y2UoKG5lLGNlKT0+''@;'; put 'put ''KG5lLnB1c2goWy4uLmNlXSksbmUpLFtdKTtELmZvckVhY2gobmU9PntuZVsxXT1sLnByb3BUb0NvbChuZVsxXSl9KTtjb25zdCBaPWY+MT90aGlzLmdldFNlbGVjdGVkKCk6W1tEWzBdWzBdLERbMF1bMV1dXTtyZXR1cm4gbmV3IGZlZSh7Y2hhbmdlczpELHNlbGVjdGVkOlosY291bnRDb2xz''@;'; put 'put ''OmwuY291bnRDb2xzKCksY291bnRSb3dzOmwuY291bnRSb3dzKCl9KX0saCl9KX11bmRvKGwsYSl7Y29uc3QgZD1tMSh0aGlzLmNoYW5nZXMpO2ZvcihsZXQgdj0wLE09ZC5sZW5ndGg7djxNO3YrKylkW3ZdLnNwbGljZSgzLDEpO2wuYWRkSG9va09uY2UoImFmdGVyQ2hhbmdlIixhKSxsLnNl''@;'; put 'put ''dERhdGFBdENlbGwoZCxudWxsLG51bGwsIlVuZG9SZWRvLnVuZG8iKTtjb25zdCBoPWwuY291bnRSb3dzKCktdGhpcy5jb3VudFJvd3M7aD4wJiZsLmFsdGVyKCJyZW1vdmVfcm93IixudWxsLGgsIlVuZG9SZWRvLnVuZG8iKTtjb25zdCBmPWwuY291bnRDb2xzKCktdGhpcy5jb3VudENvbHM7''@;'; put 'put ''Zj4wJiZsLmlzQ29sdW1uTW9kaWZpY2F0aW9uQWxsb3dlZCgpJiZsLmFsdGVyKCJyZW1vdmVfY29sIixudWxsLGYsIlVuZG9SZWRvLnVuZG8iKSxsLnNjcm9sbFRvRm9jdXNlZENlbGwoKSxsLnNlbGVjdENlbGxzKHRoaXMuc2VsZWN0ZWQsITEsITEpfXJlZG8obCxhKXtjb25zdCBkPW0xKHRo''@;'; put 'put ''aXMuY2hhbmdlcyk7Zm9yKGxldCBoPTAsZj1kLmxlbmd0aDtoPGY7aCsrKWRbaF0uc3BsaWNlKDIsMSk7bC5hZGRIb29rT25jZSgiYWZ0ZXJDaGFuZ2UiLGEpLGwuc2V0RGF0YUF0Q2VsbChkLG51bGwsbnVsbCwiVW5kb1JlZG8ucmVkbyIpLHRoaXMuc2VsZWN0ZWQmJmwuc2VsZWN0Q2VsbHMo''@;'; put 'put ''dGhpcy5zZWxlY3RlZCwhMSwhMSl9fWZ1bmN0aW9uIFptZShjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gYmd0KGMpe3ZhciBsPWZ1bmN0aW9uIHlndChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9''@;'; put 'put ''PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVy''@;'; put 'put ''KShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgcGVlIGV4dGVuZHMg''@;'; put 'put ''JDJ7Y29uc3RydWN0b3IobCl7bGV0e2NvbmRpdGlvbnNTdGFjazphLHByZXZpb3VzQ29uZGl0aW9uc1N0YWNrOmR9PWw7c3VwZXIoImZpbHRlciIpLFptZSh0aGlzLCJjb25kaXRpb25zU3RhY2siLHZvaWQgMCksWm1lKHRoaXMsInByZXZpb3VzQ29uZGl0aW9uc1N0YWNrIix2b2lkIDApLHRo''@;'; put 'put ''aXMuY29uZGl0aW9uc1N0YWNrPWEsdGhpcy5wcmV2aW91c0NvbmRpdGlvbnNTdGFjaz1kfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGwsYSl7bC5hZGRIb29rKCJiZWZvcmVGaWx0ZXIiLChkLGgpPT57YS5kb25lKCgpPT5uZXcgcGVlKHtjb25kaXRpb25zU3RhY2s6ZCxwcmV2aW91''@;'; put 'put ''c0NvbmRpdGlvbnNTdGFjazpofSkpfSl9dW5kbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVnaW4oImZpbHRlcnMiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGQuaW1wb3J0Q29uZGl0aW9ucyh0aGlzLnByZXZpb3VzQ29uZGl0aW9uc1N0YWNrKSxkLmZpbHRlcigpfXJlZG8o''@;'; put 'put ''bCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJmaWx0ZXJzIik7bC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxkLmltcG9ydENvbmRpdGlvbnModGhpcy5jb25kaXRpb25zU3RhY2spLGQuZmlsdGVyKCl9fWNsYXNzIGdlZSBleHRlbmRzICQye2NvbnN0cnVjdG9yKGwpe2xldHtk''@;'; put 'put ''YXRhOmEsY2VsbFJhbmdlOmR9PWw7c3VwZXIoIm1lcmdlX2NlbGxzIiksZnVuY3Rpb24gX2d0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiB3Z3QoYyl7dmFyIGw9ZnVuY3Rpb24gQ2d0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1By''@;'; put 'put ''aW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmlu''@;'; put 'put ''ZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZpbmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEs''@;'; put 'put ''Y30odGhpcywiY2VsbFJhbmdlIix2b2lkIDApLHRoaXMuY2VsbFJhbmdlPWQsdGhpcy5kYXRhPWF9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImJlZm9yZU1lcmdlQ2VsbHMiLChkLGgpPT57aWYoaClyZXR1cm47Y29uc3QgZj1kLmdldFRvcFN0YXJ0Q29y''@;'; put 'put ''bmVyKCksdj1kLmdldEJvdHRvbUVuZENvcm5lcigpLE09bC5nZXREYXRhKGYucm93LGYuY29sLHYucm93LHYuY29sKTthLmRvbmUoKCk9Pm5ldyBnZWUoe2RhdGE6TSxjZWxsUmFuZ2U6ZH0pKX0pfXVuZG8obCxhKXtjb25zdCBkPWwuZ2V0UGx1Z2luKCJtZXJnZUNlbGxzIik7bC5hZGRIb29r''@;'; put 'put ''T25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxkLnVubWVyZ2VSYW5nZSh0aGlzLmNlbGxSYW5nZSwhMCk7Y29uc3QgaD10aGlzLmNlbGxSYW5nZS5nZXRUb3BTdGFydENvcm5lcigpO2wucG9wdWxhdGVGcm9tQXJyYXkoaC5yb3csaC5jb2wsdGhpcy5kYXRhLHZvaWQgMCx2b2lkIDAsIk1lcmdl''@;'; put 'put ''Q2VsbHMiKX1yZWRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigibWVyZ2VDZWxscyIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksZC5tZXJnZVJhbmdlKHRoaXMuY2VsbFJhbmdlKX19ZnVuY3Rpb24gV21lKGMsbCxhLGQsaCl7Y29uc3QgZj1bInZpc3VhbFJvdyIsInZp''@;'; put 'put ''c3VhbENvbCIsInJvdyIsImNvbCIsInByb3AiXSx2PWYubGVuZ3RoLE09W107cmV0dXJuICRvKGQsaCxEPT57JG8obCxhLFo9Pntjb25zdCBuZT1jLmdldENlbGxNZXRhKFosRCk7aWYoT2JqZWN0LmtleXMobmUpLmxlbmd0aCE9PXYpe2NvbnN0IGNlPU9iamVjdC5mcm9tRW50cmllcyhPYmpl''@;'; put 'put ''Y3QuZW50cmllcyhuZSkuZmlsdGVyKGJlPT57bGV0W0VlXT1iZTtyZXR1cm4hMT09PWYuaW5jbHVkZXMoRWUpfSkpO00ucHVzaChbbmUudmlzdWFsUm93LG5lLnZpc3VhbENvbCxjZV0pfX0pfSksTX1mdW5jdGlvbiBHZyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24gU2d0KGMpe3ZhciBsPWZ1''@;'; put 'put ''bmN0aW9uIE1ndChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBU''@;'; put 'put ''eXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Xyg1NzcyKTtjbGFzcyBtZWUgZXh0ZW5kcyAkMntjb25zdHJ1Y3RvcihsKXtsZXR7aW5kZXg6YSxpbmRleGVzOmQsZGF0YTpoLGFtb3VudDpmLGhlYWRlcnM6dixj''@;'; put 'put ''b2x1bW5Qb3NpdGlvbnM6TSxyb3dQb3NpdGlvbnM6RCxmaXhlZENvbHVtbnNTdGFydDpaLHJlbW92ZWRDZWxsTWV0YXM6bmV9PWw7c3VwZXIoInJlbW92ZV9jb2wiKSxHZyh0aGlzLCJpbmRleCIsdm9pZCAwKSxHZyh0aGlzLCJpbmRleGVzIix2b2lkIDApLEdnKHRoaXMsImRhdGEiLHZvaWQg''@;'; put 'put ''MCksR2codGhpcywiYW1vdW50Iix2b2lkIDApLEdnKHRoaXMsImhlYWRlcnMiLHZvaWQgMCksR2codGhpcywiY29sdW1uUG9zaXRpb25zIix2b2lkIDApLEdnKHRoaXMsInJvd1Bvc2l0aW9ucyIsdm9pZCAwKSxHZyh0aGlzLCJmaXhlZENvbHVtbnNTdGFydCIsdm9pZCAwKSxHZyh0aGlzLCJy''@;'; put 'put ''ZW1vdmVkQ2VsbE1ldGFzIix2b2lkIDApLHRoaXMuaW5kZXg9YSx0aGlzLmluZGV4ZXM9ZCx0aGlzLmRhdGE9aCx0aGlzLmFtb3VudD1mLHRoaXMuaGVhZGVycz12LHRoaXMuY29sdW1uUG9zaXRpb25zPU0uc2xpY2UoMCksdGhpcy5yb3dQb3NpdGlvbnM9RC5zbGljZSgwKSx0aGlzLmZpeGVk''@;'; put 'put ''Q29sdW1uc1N0YXJ0PVosdGhpcy5yZW1vdmVkQ2VsbE1ldGFzPW5lfXN0YXRpYyBzdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGwsYSl7bC5hZGRIb29rKCJiZWZvcmVSZW1vdmVDb2wiLChkLGgsZix2KT0+e2EuZG9uZSgoKT0+e2NvbnN0IEQ9bC5nZXRTb3VyY2VEYXRhQXJyYXkoKSxaPShsLmNv''@;'; put 'put ''dW50Q29scygpK2QpJWwuY291bnRDb2xzKCksbmU9WitoLTEsY2U9W10sYmU9W10sRWU9W107JG8oRC5sZW5ndGgtMSxudD0+e2NvbnN0IGx0PVtdLG10PURbbnRdOyRvKFosbmUsSnQ9PntsdC5wdXNoKG10W2wudG9QaHlzaWNhbENvbHVtbihKdCldKX0pLGNlLnB1c2gobHQpfSksJG8oaC0x''@;'; put 'put ''LG50PT57RWUucHVzaChsLnRvUGh5c2ljYWxDb2x1bW4oWitudCkpfSksQXJyYXkuaXNBcnJheShsLmdldFNldHRpbmdzKCkuY29sSGVhZGVycykmJiRvKGgtMSxudD0+e2JlLnB1c2gobC5nZXRTZXR0aW5ncygpLmNvbEhlYWRlcnNbbC50b1BoeXNpY2FsQ29sdW1uKForbnQpXXx8bnVsbCl9''@;'; put 'put ''KTtjb25zdCBCZT1sLmNvbHVtbkluZGV4TWFwcGVyLmdldEluZGV4ZXNTZXF1ZW5jZSgpLHFlPWwucm93SW5kZXhNYXBwZXIuZ2V0SW5kZXhlc1NlcXVlbmNlKCk7cmV0dXJuIG5ldyBtZWUoe2luZGV4OlosaW5kZXhlczpFZSxkYXRhOmNlLGFtb3VudDpoLGhlYWRlcnM6YmUsY29sdW1uUG9z''@;'; put 'put ''aXRpb25zOkJlLHJvd1Bvc2l0aW9uczpxZSxmaXhlZENvbHVtbnNTdGFydDpsLmdldFNldHRpbmdzKCkuZml4ZWRDb2x1bW5zU3RhcnQscmVtb3ZlZENlbGxNZXRhczpXbWUobCwwLGwuY291bnRSb3dzKCksWixuZSl9KX0sdil9KX11bmRvKGwsYSl7bC5nZXRTZXR0aW5ncygpLmZpeGVkQ29s''@;'; put 'put ''dW1uc1N0YXJ0PXRoaXMuZml4ZWRDb2x1bW5zU3RhcnQ7Y29uc3QgaD10aGlzLmluZGV4ZXMuc2xpY2UoMCkuc29ydCgpLGY9KG5lLGNlLGJlKT0+YmVbdGhpcy5pbmRleGVzLmluZGV4T2YoaFtjZV0pXSx2PXRoaXMuZGF0YS5sZW5ndGgsTT1bXTtmb3IobGV0IG5lPTA7bmU8djtuZSsrKU0u''@;'; put 'put ''cHVzaCh5cyh0aGlzLmRhdGFbbmVdLGYpKTtjb25zdCBEPXlzKHRoaXMuaGVhZGVycyxmKSxaPVtdO2wuYWx0ZXIoImluc2VydF9jb2xfc3RhcnQiLHRoaXMuaW5kZXhlc1swXSx0aGlzLmluZGV4ZXMubGVuZ3RoLCJVbmRvUmVkby51bmRvIiksWW4obC5nZXRTb3VyY2VEYXRhQXJyYXkoKSwo''@;'; put 'put ''bmUsY2UpPT57WW4oaCwoYmUsRWUpPT57bmVbYmVdPU1bY2VdW0VlXSxaLnB1c2goW2NlLGJlLG5lW2JlXV0pfSl9KSxsLnNldFNvdXJjZURhdGFBdENlbGwoWix2b2lkIDAsdm9pZCAwLCJVbmRvUmVkby51bmRvIiksdHlwZW9mIHRoaXMuaGVhZGVyczwidSImJlluKEQsKG5lLGNlKT0+e2wu''@;'; put 'put ''Z2V0U2V0dGluZ3MoKS5jb2xIZWFkZXJzW2hbY2VdXT1uZX0pLHRoaXMucmVtb3ZlZENlbGxNZXRhcy5mb3JFYWNoKG5lPT57bGV0W2NlLGJlLEVlXT1uZTtsLnNldENlbGxNZXRhT2JqZWN0KGNlLGJlLEVlKX0pLGwuYmF0Y2hFeGVjdXRpb24oKCk9PntsLnJvd0luZGV4TWFwcGVyLnNldElu''@;'; put 'put ''ZGV4ZXNTZXF1ZW5jZSh0aGlzLnJvd1Bvc2l0aW9ucyksbC5jb2x1bW5JbmRleE1hcHBlci5zZXRJbmRleGVzU2VxdWVuY2UodGhpcy5jb2x1bW5Qb3NpdGlvbnMpfSwhMCksbC5hZGRIb29rT25jZSgiYWZ0ZXJWaWV3UmVuZGVyIixhKSxsLnJlbmRlcigpfXJlZG8obCxhKXtsLmFkZEhvb2tP''@;'; put 'put ''bmNlKCJhZnRlclJlbW92ZUNvbCIsYSksbC5hbHRlcigicmVtb3ZlX2NvbCIsdGhpcy5pbmRleCx0aGlzLmFtb3VudCwiVW5kb1JlZG8ucmVkbyIpfX1mdW5jdGlvbiB5dyhjLGwsYSl7cmV0dXJuKGw9ZnVuY3Rpb24geGd0KGMpe3ZhciBsPWZ1bmN0aW9uIEVndChjLGwpe2lmKCJvYmplY3Qi''@;'; put 'put ''IT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVz''@;'; put 'put ''dCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsiIn0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFi''@;'; put 'put ''bGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9Y2xhc3MgdmVlIGV4dGVuZHMgJDJ7Y29uc3RydWN0b3IobCl7bGV0e2luZGV4OmEsZGF0YTpkLGZpeGVkUm93c0JvdHRvbTpoLGZpeGVkUm93c1RvcDpmLHJvd0luZGV4ZXNTZXF1ZW5jZTp2LHJlbW92ZWRDZWxs''@;'; put 'put ''TWV0YXM6TX09bDtzdXBlcigicmVtb3ZlX3JvdyIpLHl3KHRoaXMsImluZGV4Iix2b2lkIDApLHl3KHRoaXMsImRhdGEiLHZvaWQgMCkseXcodGhpcywiZml4ZWRSb3dzQm90dG9tIix2b2lkIDApLHl3KHRoaXMsImZpeGVkUm93c1RvcCIsdm9pZCAwKSx5dyh0aGlzLCJyb3dJbmRleGVzU2Vx''@;'; put 'put ''dWVuY2UiLHZvaWQgMCkseXcodGhpcywicmVtb3ZlZENlbGxNZXRhcyIsdm9pZCAwKSx0aGlzLmluZGV4PWEsdGhpcy5kYXRhPWQsdGhpcy5maXhlZFJvd3NCb3R0b209aCx0aGlzLmZpeGVkUm93c1RvcD1mLHRoaXMucm93SW5kZXhlc1NlcXVlbmNlPXYsdGhpcy5yZW1vdmVkQ2VsbE1ldGFz''@;'; put 'put ''PU19c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImJlZm9yZVJlbW92ZVJvdyIsKGQsaCxmLHYpPT57YS5kb25lKCgpPT57Y29uc3QgRD1sLnRvUGh5c2ljYWxSb3coZCksWj1EK2gtMSxuZT1tMShsLmdldFNvdXJjZURhdGEoRCwwLEQraC0xLGwuY291bnRT''@;'; put 'put ''b3VyY2VDb2xzKCktMSkpO3JldHVybiBuZXcgdmVlKHtpbmRleDpELGRhdGE6bmUsZml4ZWRSb3dzQm90dG9tOmwuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NCb3R0b20sZml4ZWRSb3dzVG9wOmwuZ2V0U2V0dGluZ3MoKS5maXhlZFJvd3NUb3Ascm93SW5kZXhlc1NlcXVlbmNlOmwucm93SW5k''@;'; put 'put ''ZXhNYXBwZXIuZ2V0SW5kZXhlc1NlcXVlbmNlKCkscmVtb3ZlZENlbGxNZXRhczpXbWUobCxELFosMCxsLmNvdW50Q29scygpLTEpfSl9LHYpfSl9dW5kbyhsLGEpe2NvbnN0IGQ9bC5nZXRTZXR0aW5ncygpLGg9W107ZC5maXhlZFJvd3NCb3R0b209dGhpcy5maXhlZFJvd3NCb3R0b20sZC5m''@;'; put 'put ''aXhlZFJvd3NUb3A9dGhpcy5maXhlZFJvd3NUb3AsdGhpcy5kYXRhLmZvckVhY2goKGYsdik9PntPYmplY3Qua2V5cyhmKS5mb3JFYWNoKE09Pntjb25zdCBEPXBhcnNlSW50KE0sMTApO2gucHVzaChbdGhpcy5pbmRleCt2LGlzTmFOKEQpP006RCxmW01dXSl9KX0pLGwuYWx0ZXIoImluc2Vy''@;'; put 'put ''dF9yb3dfYWJvdmUiLHRoaXMuaW5kZXgsdGhpcy5kYXRhLmxlbmd0aCwiVW5kb1JlZG8udW5kbyIpLHRoaXMucmVtb3ZlZENlbGxNZXRhcy5mb3JFYWNoKGY9PntsZXRbdixNLERdPWY7bC5zZXRDZWxsTWV0YU9iamVjdCh2LE0sRCl9KSxsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIi''@;'; put 'put ''LGEpLGwuc2V0U291cmNlRGF0YUF0Q2VsbChoLG51bGwsbnVsbCwiVW5kb1JlZG8udW5kbyIpLGwucm93SW5kZXhNYXBwZXIuc2V0SW5kZXhlc1NlcXVlbmNlKHRoaXMucm93SW5kZXhlc1NlcXVlbmNlKX1yZWRvKGwsYSl7bC5hZGRIb29rT25jZSgiYWZ0ZXJSZW1vdmVSb3ciLGEpLGwuYWx0''@;'; put 'put ''ZXIoInJlbW92ZV9yb3ciLHRoaXMuaW5kZXgsdGhpcy5kYXRhLmxlbmd0aCwiVW5kb1JlZG8ucmVkbyIpfX1mdW5jdGlvbiBZbWUoYyxsLGEpe3JldHVybihsPWZ1bmN0aW9uIFRndChjKXt2YXIgbD1mdW5jdGlvbiBBZ3QoYyxsKXtpZigib2JqZWN0IiE9dHlwZW9mIGN8fCFjKXJldHVybiBj''@;'; put 'put ''O3ZhciBhPWNbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1hKXt2YXIgZD1hLmNhbGwoYyxsfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT10eXBlb2YgZClyZXR1cm4gZDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZh''@;'; put 'put ''bHVlLiIpfXJldHVybigic3RyaW5nIj09PWw/U3RyaW5nOk51bWJlcikoYyl9KGMsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbD9sOmwrIiJ9KGwpKWluIGM/T2JqZWN0LmRlZmluZVByb3BlcnR5KGMsbCx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3''@;'; put 'put ''cml0YWJsZTohMH0pOmNbbF09YSxjfWNsYXNzIGJlZSBleHRlbmRzICQye2NvbnN0cnVjdG9yKGwpe2xldHtyb3dzOmEsZmluYWxJbmRleDpkfT1sO3N1cGVyKCJyb3dfbW92ZSIpLFltZSh0aGlzLCJyb3dzIix2b2lkIDApLFltZSh0aGlzLCJmaW5hbFJvd0luZGV4Iix2b2lkIDApLHRoaXMu''@;'; put 'put ''cm93cz1hLnNsaWNlKCksdGhpcy5maW5hbFJvd0luZGV4PWR9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2soImJlZm9yZVJvd01vdmUiLChkLGgpPT57ITEhPT1kJiZhLmRvbmUoKCk9Pm5ldyBiZWUoe3Jvd3M6ZCxmaW5hbEluZGV4Omh9KSl9KX11bmRvKGws''@;'; put 'put ''YSl7Y29uc3QgZD1sLmdldFBsdWdpbigibWFudWFsUm93TW92ZSIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksaFEodGhpcy5yb3dzLHRoaXMuZmluYWxSb3dJbmRleCxsLnJvd0luZGV4TWFwcGVyLmdldE51bWJlck9mSW5kZXhlcygpKS5yZXZlcnNlKCkuZm9yRWFjaChm''@;'; put 'put ''PT57bGV0e2Zyb206dix0bzpNfT1mO3Y8TSYmKE0tPTEpLGQubW92ZVJvdyhNLHYpfSksbC5yZW5kZXIoKSxsLmRlc2VsZWN0Q2VsbCgpLGwuc2VsZWN0Um93cyh0aGlzLnJvd3NbMF0sdGhpcy5yb3dzWzBdK3RoaXMucm93cy5sZW5ndGgtMSl9cmVkbyhsLGEpe2NvbnN0IGQ9bC5nZXRQbHVn''@;'; put 'put ''aW4oIm1hbnVhbFJvd01vdmUiKTtsLmFkZEhvb2tPbmNlKCJhZnRlclZpZXdSZW5kZXIiLGEpLGQubW92ZVJvd3ModGhpcy5yb3dzLnNsaWNlKCksdGhpcy5maW5hbFJvd0luZGV4KSxsLnJlbmRlcigpLGwuZGVzZWxlY3RDZWxsKCksbC5zZWxlY3RSb3dzKHRoaXMuZmluYWxSb3dJbmRleCx0''@;'; put 'put ''aGlzLmZpbmFsUm93SW5kZXgrdGhpcy5yb3dzLmxlbmd0aC0xKX19Y2xhc3MgeWVlIGV4dGVuZHMgJDJ7Y29uc3RydWN0b3IobCl7bGV0e2NlbGxSYW5nZTphfT1sO3N1cGVyKCJ1bm1lcmdlX2NlbGxzIiksZnVuY3Rpb24ga2d0KGMsbCxhKXtyZXR1cm4obD1mdW5jdGlvbiBEZ3QoYyl7dmFy''@;'; put 'put ''IGw9ZnVuY3Rpb24gSWd0KGMsbCl7aWYoIm9iamVjdCIhPXR5cGVvZiBjfHwhYylyZXR1cm4gYzt2YXIgYT1jW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09YSl7dmFyIGQ9YS5jYWxsKGMsbHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGQpcmV0dXJuIGQ7dGhyb3cg''@;'; put 'put ''bmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1sP1N0cmluZzpOdW1iZXIpKGMpfShjLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIGw/bDpsKyIifShsKSlpbiBjP09iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eShjLGwse3ZhbHVlOmEsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpjW2xdPWEsY30odGhpcywiY2VsbFJhbmdlIix2b2lkIDApLHRoaXMuY2VsbFJhbmdlPWF9c3RhdGljIHN0YXJ0UmVnaXN0ZXJpbmdFdmVudHMobCxhKXtsLmFkZEhvb2so''@;'; put 'put ''ImFmdGVyVW5tZXJnZUNlbGxzIiwoZCxoKT0+e2h8fGEuZG9uZSgoKT0+bmV3IHllZSh7Y2VsbFJhbmdlOmR9KSl9KX11bmRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigibWVyZ2VDZWxscyIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksZC5tZXJnZVJhbmdlKHRoaXMu''@;'; put 'put ''Y2VsbFJhbmdlLCEwKX1yZWRvKGwsYSl7Y29uc3QgZD1sLmdldFBsdWdpbigibWVyZ2VDZWxscyIpO2wuYWRkSG9va09uY2UoImFmdGVyVmlld1JlbmRlciIsYSksZC51bm1lcmdlUmFuZ2UodGhpcy5jZWxsUmFuZ2UsITApLGwucmVuZGVyKCl9fWZ1bmN0aW9uIF9lZShjLGwsYSl7cmV0dXJu''@;'; put 'put ''KGw9ZnVuY3Rpb24gUGd0KGMpe3ZhciBsPWZ1bmN0aW9uIEZndChjLGwpe2lmKCJvYmplY3QiIT10eXBlb2YgY3x8IWMpcmV0dXJuIGM7dmFyIGE9Y1tTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWEpe3ZhciBkPWEuY2FsbChjLGx8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5''@;'; put 'put ''cGVvZiBkKXJldHVybiBkO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09bD9TdHJpbmc6TnVtYmVyKShjKX0oYywic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBsP2w6bCsi''@;'; put 'put ''In0obCkpaW4gYz9PYmplY3QuZGVmaW5lUHJvcGVydHkoYyxsLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6Y1tsXT1hLGN9ZnVuY3Rpb24gd2VlKGMsbCxhKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgYz9jPT09bDpjLmhhcyhsKSlyZXR1cm4g''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aDwzP2w6YTt0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGVsZW1lbnQgaXMgbm90IHByZXNlbnQgb24gdGhpcyBvYmplY3QiKX1Bby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlVW5kbyIpLEFvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRl''@;'; put 'put ''clVuZG8iKSxBby5nZXRTaW5nbGV0b24oKS5yZWdpc3RlcigiYmVmb3JlUmVkbyIpLEFvLmdldFNpbmdsZXRvbigpLnJlZ2lzdGVyKCJhZnRlclJlZG8iKTtjb25zdCAkbWU9bmV3IFNldDt2YXIgV0g9bmV3IFdlYWtTZXQ7Y2xhc3MgVmd0IGV4dGVuZHMgRnN7c3RhdGljIGdldCBQTFVHSU5f''@;'; put 'put ''S0VZKCl7cmV0dXJuInVuZG9SZWRvIn1zdGF0aWMgZ2V0IFBMVUdJTl9QUklPUklUWSgpe3JldHVybiAxZTN9c3RhdGljIGdldCBTRVRUSU5HX0tFWVMoKXtyZXR1cm4hMH1jb25zdHJ1Y3RvcihsKXtzdXBlcihsKSxmdW5jdGlvbiBMZ3QoYyxsKXsoZnVuY3Rpb24gT2d0KGMsbCl7aWYobC5o''@;'; put 'put ''YXMoYykpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGluaXRpYWxpemUgdGhlIHNhbWUgcHJpdmF0ZSBlbGVtZW50cyB0d2ljZSBvbiBhbiBvYmplY3QiKX0pKGMsbCksbC5hZGQoYyl9KHRoaXMsV0gpLF9lZSh0aGlzLCJkb25lQWN0aW9ucyIsW10pLF9lZSh0aGlzLCJ1bmRvbmVBY3Rp''@;'; put 'put ''b25zIixbXSksX2VlKHRoaXMsImlnbm9yZU5ld0FjdGlvbnMiLCExKSxmdW5jdGlvbiBSZ3QoYyxsKXtbbGVlLGNlZSx1ZWUsZGVlLGhlZSxmZWUscGVlLGdlZSxtZWUsdmVlLGJlZSx5ZWVdLmZvckVhY2goYT0+YS5zdGFydFJlZ2lzdGVyaW5nRXZlbnRzKGMsbCkpfShsLHRoaXMpfWlzRW5h''@;'; put 'put ''YmxlZCgpe3JldHVybiEhdGhpcy5ob3QuZ2V0U2V0dGluZ3MoKS51bmRvfWVuYWJsZVBsdWdpbigpe3ZhciBsPXRoaXM7dGhpcy5lbmFibGVkfHwodGhpcy5hZGRIb29rKCJhZnRlckNoYW5nZSIsZnVuY3Rpb24oKXtmb3IodmFyIGE9YXJndW1lbnRzLmxlbmd0aCxkPW5ldyBBcnJheShhKSxo''@;'; put 'put ''PTA7aDxhO2grKylkW2hdPWFyZ3VtZW50c1toXTtyZXR1cm4gd2VlKFdILGwsQmd0KS5jYWxsKGwsLi4uZCl9KSx0aGlzLnJlZ2lzdGVyU2hvcnRjdXRzKCksd2VlKFdILHRoaXMsamd0KS5jYWxsKHRoaXMpLHN1cGVyLmVuYWJsZVBsdWdpbigpKX1kaXNhYmxlUGx1Z2luKCl7c3VwZXIuZGlz''@;'; put 'put ''YWJsZVBsdWdpbigpLHRoaXMuY2xlYXIoKSx0aGlzLnVucmVnaXN0ZXJTaG9ydGN1dHMoKSx3ZWUoV0gsdGhpcyx6Z3QpLmNhbGwodGhpcyl9cmVnaXN0ZXJTaG9ydGN1dHMoKXt0aGlzLmhvdC5nZXRTaG9ydGN1dE1hbmFnZXIoKS5nZXRDb250ZXh0KCJncmlkIikuYWRkU2hvcnRjdXRzKFt7''@;'; put 'put ''a2V5czpbWyJDb250cm9sL01ldGEiLCJ6Il1dLGNhbGxiYWNrOigpPT57dGhpcy51bmRvKCl9fSx7a2V5czpbWyJDb250cm9sL01ldGEiLCJ5Il0sWyJDb250cm9sL01ldGEiLCJTaGlmdCIsInoiXV0sY2FsbGJhY2s6KCk9Pnt0aGlzLnJlZG8oKX19XSx7cnVuT25seUlmOmY9PiFmLmFsdEtl''@;'; put 'put ''eSxncm91cDoidW5kb1JlZG8ifSl9dW5yZWdpc3RlclNob3J0Y3V0cygpe3RoaXMuaG90LmdldFNob3J0Y3V0TWFuYWdlcigpLmdldENvbnRleHQoImdyaWQiKS5yZW1vdmVTaG9ydGN1dHNCeUdyb3VwKCJ1bmRvUmVkbyIpfWRvbmUobCxhKXtpZih0aGlzLmlnbm9yZU5ld0FjdGlvbnN8fCJV''@;'; put 'put ''bmRvUmVkby51bmRvIj09PWF8fCJVbmRvUmVkby5yZWRvIj09PWF8fCJhdXRvIj09PWEpcmV0dXJuO2NvbnN0IGg9dGhpcy5kb25lQWN0aW9ucy5zbGljZSgpO2lmKCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVuZG9TdGFja0NoYW5nZSIsaCxhKSlyZXR1cm47Y29uc3Qgdj1sKCks''@;'; put 'put ''TT10aGlzLnVuZG9uZUFjdGlvbnMuc2xpY2UoKTt0aGlzLmRvbmVBY3Rpb25zLnB1c2godiksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5kb1N0YWNrQ2hhbmdlIixoLHRoaXMuZG9uZUFjdGlvbnMuc2xpY2UoKSksdGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlZG9TdGFja0NoYW5nZSIs''@;'; put 'put ''TSksdGhpcy51bmRvbmVBY3Rpb25zLmxlbmd0aD0wLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJlZG9TdGFja0NoYW5nZSIsTSx0aGlzLnVuZG9uZUFjdGlvbnMuc2xpY2UoKSl9dW5kbygpe2lmKCF0aGlzLmlzVW5kb0F2YWlsYWJsZSgpKXJldHVybjtjb25zdCBsPXRoaXMuZG9uZUFjdGlv''@;'; put 'put ''bnMuc2xpY2UoKTt0aGlzLmhvdC5ydW5Ib29rcygiYmVmb3JlVW5kb1N0YWNrQ2hhbmdlIixsKTtjb25zdCBhPXRoaXMuZG9uZUFjdGlvbnMucG9wKCk7dGhpcy5ob3QucnVuSG9va3MoImFmdGVyVW5kb1N0YWNrQ2hhbmdlIixsLHRoaXMuZG9uZUFjdGlvbnMuc2xpY2UoKSk7Y29uc3QgZD1t''@;'; put 'put ''MShhKTtpZighMT09PXRoaXMuaG90LnJ1bkhvb2tzKCJiZWZvcmVVbmRvIixkKSlyZXR1cm47dGhpcy5pZ25vcmVOZXdBY3Rpb25zPSEwO2NvbnN0IGY9dGhpcy51bmRvbmVBY3Rpb25zLnNsaWNlKCk7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlZG9TdGFja0NoYW5nZSIsZiksYS51bmRv''@;'; put 'put ''KHRoaXMuaG90LCgpPT57dGhpcy5pZ25vcmVOZXdBY3Rpb25zPSExLHRoaXMudW5kb25lQWN0aW9ucy5wdXNoKGEpfSksdGhpcy5ob3QucnVuSG9va3MoImFmdGVyUmVkb1N0YWNrQ2hhbmdlIixmLHRoaXMudW5kb25lQWN0aW9ucy5zbGljZSgpKSx0aGlzLmhvdC5ydW5Ib29rcygiYWZ0ZXJV''@;'; put 'put ''bmRvIixkKX1yZWRvKCl7aWYoIXRoaXMuaXNSZWRvQXZhaWxhYmxlKCkpcmV0dXJuO2NvbnN0IGw9dGhpcy51bmRvbmVBY3Rpb25zLnNsaWNlKCk7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlZG9TdGFja0NoYW5nZSIsbCk7Y29uc3QgYT10aGlzLnVuZG9uZUFjdGlvbnMucG9wKCk7dGhp''@;'; put 'put ''cy5ob3QucnVuSG9va3MoImFmdGVyUmVkb1N0YWNrQ2hhbmdlIixsLHRoaXMudW5kb25lQWN0aW9ucy5zbGljZSgpKTtjb25zdCBkPW0xKGEpO2lmKCExPT09dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVJlZG8iLGQpKXJldHVybjt0aGlzLmlnbm9yZU5ld0FjdGlvbnM9ITA7Y29uc3QgZj10''@;'; put 'put ''aGlzLmRvbmVBY3Rpb25zLnNsaWNlKCk7dGhpcy5ob3QucnVuSG9va3MoImJlZm9yZVVuZG9TdGFja0NoYW5nZSIsZiksYS5yZWRvKHRoaXMuaG90LCgpPT57dGhpcy5pZ25vcmVOZXdBY3Rpb25zPSExLHRoaXMuZG9uZUFjdGlvbnMucHVzaChhKX0pLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRl''@;'; put 'put ''clVuZG9TdGFja0NoYW5nZSIsZix0aGlzLmRvbmVBY3Rpb25zLnNsaWNlKCkpLHRoaXMuaG90LnJ1bkhvb2tzKCJhZnRlclJlZG8iLGQpfWlzVW5kb0F2YWlsYWJsZSgpe3JldHVybiB0aGlzLmRvbmVBY3Rpb25zLmxlbmd0aD4wfWlzUmVkb0F2YWlsYWJsZSgpe3JldHVybiB0aGlzLnVuZG9u''@;'; put 'put ''ZUFjdGlvbnMubGVuZ3RoPjB9Y2xlYXIoKXt0aGlzLmRvbmVBY3Rpb25zLmxlbmd0aD0wLHRoaXMudW5kb25lQWN0aW9ucy5sZW5ndGg9MH1kZXN0cm95KCl7dGhpcy5jbGVhcigpLHRoaXMuZG9uZUFjdGlvbnM9bnVsbCx0aGlzLnVuZG9uZUFjdGlvbnM9bnVsbCxzdXBlci5kZXN0cm95KCl9''@;'; put 'put ''fWZ1bmN0aW9uIEJndChjLGwpeyJsb2FkRGF0YSI9PT1sJiZ0aGlzLmNsZWFyKCl9ZnVuY3Rpb24gamd0KCl7Y29uc3QgYz1sPT57JG1lLmhhcyhsKXx8KHRsKGZsYFRoZSAiJHtsfSIgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgYW5kIGl0IHdpbGwgYmUgcmVtb3ZlZFx4MjAKICAgICAgICAgIGZy''@;'; put 'put ''b20gdGhlIENvcmUgQVBJIGluIHRoZSBmdXR1cmUuIFBsZWFzZSB1c2UgdGhlIG1ldGhvZCBmcm9tIHRoZSBVbmRvUmVkbyBwbHVnaW5ceDIwCiAgICAgICAgICAoZS5nLiBcYGhvdEluc3RhbmNlLmdldFBsdWdpbigidW5kb1JlZG8iKS4ke2x9KClcYCkuYCksJG1lLmFkZChsKSl9O3RoaXMu''@;'; put 'put ''aG90LnVuZG89KCk9PntjKCJ1bmRvIiksdGhpcy51bmRvKCl9LHRoaXMuaG90LnJlZG89KCk9PntjKCJyZWRvIiksdGhpcy5yZWRvKCl9LHRoaXMuaG90LmlzVW5kb0F2YWlsYWJsZT0oKT0+KGMoImlzVW5kb0F2YWlsYWJsZSIpLHRoaXMuaXNVbmRvQXZhaWxhYmxlKCkpLHRoaXMuaG90Lmlz''@;'; put 'put ''UmVkb0F2YWlsYWJsZT0oKT0+KGMoImlzUmVkb0F2YWlsYWJsZSIpLHRoaXMuaXNSZWRvQXZhaWxhYmxlKCkpLHRoaXMuaG90LmNsZWFyVW5kbz0oKT0+e2MoImNsZWFyIiksdGhpcy5jbGVhcigpfSx0aGlzLmhvdC51bmRvUmVkbz10aGlzfWZ1bmN0aW9uIHpndCgpe2RlbGV0ZSB0aGlzLmhv''@;'; put 'put ''dC51bmRvLGRlbGV0ZSB0aGlzLmhvdC5yZWRvLGRlbGV0ZSB0aGlzLmhvdC5pc1VuZG9BdmFpbGFibGUsZGVsZXRlIHRoaXMuaG90LmlzUmVkb0F2YWlsYWJsZSxkZWxldGUgdGhpcy5ob3QuY2xlYXJVbmRvLGRlbGV0ZSB0aGlzLmhvdC51bmRvUmVkb31mdW5jdGlvbiBZSCgpeyhmdW5jdGlv''@;'; put 'put ''biB2aXQoKXtGZChNXyksRmQoTVgpLEZkKHdwZSksRmQoa3BlKSxGZChEcGUpLEZkKF9YKSxGZChJcGUpLEZkKFJwZSksRmQoT3BlKSxGZCh0OSksRmQoUHBlKX0pKCksZnVuY3Rpb24gQm90KCl7VGgoRV8pLFRoKGVUKSxUaChQWCksVGgoT1gpLFRoKEhYKSxUaChMWCksVGgoWVgpLFRoKEdY''@;'; put 'put ''KSxUaCgkWCksVGgoTWcpLFRoKEtYKX0oKSxmdW5jdGlvbiAkb3QoKXt6NyhyVCksejcocVgpLHo3KFVQKSx6NyhYWCksejcoWlApfSgpLGZ1bmN0aW9uIG9hdCgpe1YyKEtvdCksVjIocW90KSxWMihKb3QpLFYyKFFvdCksVjIoZWF0KSxWMih0YXQpLFYyKG5hdCksVjIocmF0KSxWMihmcGUp''@;'; put 'put ''LFYyKGlhdCl9KCksZnVuY3Rpb24gVWd0KCl7UHMob1QpLFBzKE5hdCksUHMobFQpLFBzKHlzdCksUHMoVHN0KSxQcyhINGUpLFBzKFNsdCksUHMoS2x0KSxQcyhDRiksUHModnV0KSxQcyhVdXQpLFBzKFh1dCksUHMoREYpLFBzKEEwdCksUHMoRWR0KSxQcyhhaHQpLFBzKExodCksUHMoV2h0''@;'; put 'put ''KSxQcyhyMnQpLFBzKHYydCksUHMoVDJ0KSxQcygkMnQpLFBzKHJmdCksUHMoamZ0KSxQcyhfM3QpLFBzKHgzdCksUHMoSjN0KSxQcyh6cHQpLFBzKGg0dCksUHModzR0KSxQcyhQNHQpLFBzKFo0dCksUHModGd0KSxQcyhWZ3QpfSgpfWxldCBLMj0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlz''@;'; put 'put ''Llx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTG9dfSl9fXJldHVybiBjfSkoKSxfdz0oKCk9PntjbGFzcyBje25nT25Jbml0KCl7fXN0YXRp''@;'; put 'put ''Y3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7cHJvdmlkZXJzOlt1VyxYZGVdLGltcG9ydHM6W0xvLERjLGpjLGowLEsyXX0pfX1yZXR1cm4gY30p''@;'; put 'put ''KCksdkE9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xvXX0pfX1yZXR1cm4gY30pKCksS21l''@;'; put 'put ''PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMbyxqMCxMbyxEY119KX19cmV0dXJuIGN9KSgp''@;'; put 'put ''LGo5PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMbyxEYyxqMCxqYyxfdyx2QSxLMixLbWVd''@;'; put 'put ''fSl9fXJldHVybiBjfSkoKTt2YXIgU2VlLE1lZSx4ZWUsRWVlLFRlZSwkZz1fKDU5NDgpO2NsYXNzIENlZXtjb25zdHJ1Y3Rvcigpe3RoaXMucXVldWU9W119YWRkVG9RdWV1ZShsKXt0aGlzLnF1ZXVlLnB1c2goLi4ubCl9fVlIKCksZnVuY3Rpb24gWmd0KGMpe2NvbnN0IGw9ISh0eXBlb2Yg''@;'; put 'put ''d2luZG93PiJ1IikmJndpbmRvdy5qUXVlcnk7bCYmKGwuZm4uaGFuZHNvbnRhYmxlPWZ1bmN0aW9uKGEpe2NvbnN0IGQ9dGhpcy5maXJzdCgpO2xldCBmLGg9ZC5kYXRhKCJoYW5kc29udGFibGUiKTtpZigic3RyaW5nIiE9dHlwZW9mIGEpe2NvbnN0IFo9YXx8e307cmV0dXJuIGg/aC51cGRh''@;'; put 'put ''dGVTZXR0aW5ncyhaKTooaD1uZXcgYy5Db3JlKGRbMF0sWiksZC5kYXRhKCJoYW5kc29udGFibGUiLGgpLGguaW5pdCgpKSxkfWlmKGgpe2lmKCEodHlwZW9mIGhbYV08InUiKSl0aHJvdyBuZXcgRXJyb3IoYEhhbmRzb250YWJsZSBkbyBub3QgcHJvdmlkZSBhY3Rpb246ICR7YX1gKTtmb3Io''@;'; put 'put ''dmFyIHY9YXJndW1lbnRzLmxlbmd0aCxNPW5ldyBBcnJheSh2PjE/di0xOjApLEQ9MTtEPHY7RCsrKU1bRC0xXT1hcmd1bWVudHNbRF07Zj1oW2FdLmNhbGwoaCwuLi5NKSwiZGVzdHJveSI9PT1hJiZkLnJlbW92ZURhdGEoKX1yZXR1cm4gZn0pfShycykscnMuX19HaG9zdFRhYmxlPUpYLHJz''@;'; put 'put ''Ll9nZXRMaXN0ZW5lcnNDb3VudGVyPWZ1bmN0aW9uIHdxZSgpe3JldHVybiBqT30scnMuX2dldFJlZ2lzdGVyZWRNYXBzQ291bnRlcj1mdW5jdGlvbiBFZXQoKXtyZXR1cm4gREt9LHJzLkV2ZW50TWFuYWdlcj1MMjtjb25zdCBXZ3Q9W0ksTyxVLFksRix3LHksSyxQLGcseixMXSxZZ3Q9W0Is''@;'; put 'put ''Tl07cnMuaGVscGVyPXt9LHJzLmRvbT17fSxZbihXZ3QsYz0+e1luKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGMpLGw9PnsiXyIhPT1sLmNoYXJBdCgwKSYmKHJzLmhlbHBlcltsXT1jW2xdKX0pfSksWW4oWWd0LGM9PntZbihPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjKSxsPT57''@;'; put 'put ''Il8iIT09bC5jaGFyQXQoMCkmJihycy5kb21bbF09Y1tsXSl9KX0pLHJzLmNlbGxUeXBlcz1udWxsIT09KFNlZT1ycy5jZWxsVHlwZXMpJiZ2b2lkIDAhPT1TZWU/U2VlOnt9LFluKFB0dCgpLGM9Pntycy5jZWxsVHlwZXNbY109aFgoYyl9KSxycy5jZWxsVHlwZXMucmVnaXN0ZXJDZWxsVHlw''@;'; put 'put ''ZT1WMixycy5jZWxsVHlwZXMuZ2V0Q2VsbFR5cGU9aFgscnMuZWRpdG9ycz1udWxsIT09KE1lZT1ycy5lZGl0b3JzKSYmdm9pZCAwIT09TWVlP01lZTp7fSxZbihwcWUoKSxjPT57cnMuZWRpdG9yc1tgJHtnMShjKX1FZGl0b3JgXT1CTyhjKX0pLHJzLmVkaXRvcnMucmVnaXN0ZXJFZGl0b3I9''@;'; put 'put ''RmQscnMuZWRpdG9ycy5nZXRFZGl0b3I9Qk8scnMucmVuZGVyZXJzPW51bGwhPT0oeGVlPXJzLnJlbmRlcmVycykmJnZvaWQgMCE9PXhlZT94ZWU6e30sWW4oR3FlKCksYz0+e2NvbnN0IGw9R08oYyk7ImJhc2UiPT09YyYmKHJzLnJlbmRlcmVycy5jZWxsRGVjb3JhdG9yPWwpLHJzLnJlbmRl''@;'; put 'put ''cmVyc1tgJHtnMShjKX1SZW5kZXJlcmBdPWx9KSxycy5yZW5kZXJlcnMucmVnaXN0ZXJSZW5kZXJlcj1UaCxycy5yZW5kZXJlcnMuZ2V0UmVuZGVyZXI9R08scnMudmFsaWRhdG9ycz1udWxsIT09KEVlZT1ycy52YWxpZGF0b3JzKSYmdm9pZCAwIT09RWVlP0VlZTp7fSxZbihxcWUoKSxjPT57''@;'; put 'put ''cnMudmFsaWRhdG9yc1tgJHtnMShjKX1WYWxpZGF0b3JgXT1XJChjKX0pLHJzLnZhbGlkYXRvcnMucmVnaXN0ZXJWYWxpZGF0b3I9ejcscnMudmFsaWRhdG9ycy5nZXRWYWxpZGF0b3I9VyQscnMucGx1Z2lucz1udWxsIT09KFRlZT1ycy5wbHVnaW5zKSYmdm9pZCAwIT09VGVlP1RlZTp7fSxZ''@;'; put 'put ''bihaJCgpLGM9Pntycy5wbHVnaW5zW2NdPUVFKGMpfSkscnMucGx1Z2luc1tgJHtnMShGcy5QTFVHSU5fS0VZKX1QbHVnaW5gXT1Gcyxycy5wbHVnaW5zLnJlZ2lzdGVyUGx1Z2luPVBzLHJzLnBsdWdpbnMuZ2V0UGx1Z2luPUVFO2NvbnN0IEFlZT1ycyxrZWU9KGMsbCxhKT0+e2ZvcihsZXQg''@;'; put 'put ''ZCBvZiBjKXtjb25zdCBoPWwuZmluZCh2PT52LmRhdGE9PT1kLk5BTUUpLGY9YS52YXJzW2QuTkFNRV07ZiYmKGQuVFlQRT1bIkRBVEUiLCJEQVRFVElNRSIsIlRJTUUiXS5pbmNsdWRlcyhkLkREVFlQRSk/Im51bSI6Zi50eXBlKSxoJiZkLkRFU0MmJihoLmRlc2M9ZC5ERVNDKSxoJiZmLmxl''@;'; put 'put ''bmd0aCYmKGgubGVuZ3RoPXBhcnNlSW50KGYubGVuZ3RoKSksaCYmZC5DTFNfUlVMRSYmKGguY2xzUnVsZT1kLkNMU19SVUxFKX1yZXR1cm4gbH07ZnVuY3Rpb24gRGVlKGMsbCl7aWYobnVsbD09Y3x8IWlzTmFOKGMpJiZpc0Zpbml0ZShjKSlyZXR1cm4gbCYmbCghMCksITA7Y29uc3QgYT0o''@;'; put 'put ''MCwkZy5pc1NwZWNpYWxNaXNzaW5nKShjKTtyZXR1cm4gbCYmbChhKSxhfWNvbnN0IHFtZT17Q0FTRTooYyxsKT0+e3N3aXRjaChsKXtjYXNlIlVQQ0FTRSI6cmV0dXJuISFbdm9pZCAwLG51bGxdLmluY2x1ZGVzKGMpfHwic3RyaW5nIj09dHlwZW9mIGMmJmMudG9TdHJpbmcoKT09PWMudG9T''@;'; put 'put ''dHJpbmcoKS50b1VwcGVyQ2FzZSgpO2Nhc2UiTE9XQ0FTRSI6cmV0dXJuISFbdm9pZCAwLG51bGxdLmluY2x1ZGVzKGMpfHwic3RyaW5nIj09dHlwZW9mIGMmJmMudG9TdHJpbmcoKT09PWMudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpfXJldHVybiEwfSxNSU5WQUw6KGMsbCk9Pntjb25zdCBh''@;'; put 'put ''PURlZShjKSxkPXBhcnNlRmxvYXQoYyk7cmV0dXJuKCFhfHwhaXNOYU4oZCkpJiZkPj1OdW1iZXIobC50b1N0cmluZygpKX0sTUFYVkFMOihjLGwpPT57Y29uc3QgYT1EZWUoYyksZD1wYXJzZUZsb2F0KGMpO3JldHVybiEoIWF8fCFpc05hTihkKSl8fGQ8PU51bWJlcihsLnRvU3RyaW5nKCkp''@;'; put 'put ''fSxOT1ROVUxMOihjLGwpPT5udWxsIT1jJiZjLnRvU3RyaW5nKCkubGVuZ3RoPjB9O3ZhciBJZWU9Xyg3ODM3NSk7Y2xhc3MgWGd0IGV4dGVuZHMgQWVlLmVkaXRvcnMuQXV0b2NvbXBsZXRlRWRpdG9ye2NvbnN0cnVjdG9yKGwpe3N1cGVyKGwpfWNyZWF0ZUVsZW1lbnRzKCl7c3VwZXIuY3Jl''@;'; put 'put ''YXRlRWxlbWVudHMoKX1vcGVuKGwpe3N1cGVyLm9wZW4obCksdGhpcy5pc0NlbGxOdW1lcmljKCk/dGhpcy5odENvbnRhaW5lci5jbGFzc0xpc3QuYWRkKCJudW1lcmljTGlzdGJveCIpOnRoaXMuaHRDb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgibnVtZXJpY0xpc3Rib3giKX1pc0NlbGxO''@;'; put 'put ''dW1lcmljKCl7cmV0dXJuIHRoaXMuY2VsbFByb3BlcnRpZXM/LmNsYXNzTmFtZT8uaW5jbHVkZXMoImh0TnVtZXJpYyIpfX1jbGFzcyBYbWV7Y29uc3RydWN0b3IobCxhLGQsaCxmLHYpe3RoaXMucnVsZXM9W10sdGhpcy5kcXJ1bGVzPVtdLHRoaXMuZHFkYXRhPVtdLHRoaXMuaGlkZGVuQ29s''@;'; put 'put ''dW1ucz1bXSx0aGlzLnByaW1hcnlLZXlzPVtdLHRoaXMuZXhlY3V0ZUhvdFZhbGlkYXRvcj0oTSxELFopPT57Y29uc3QgbmU9ey4uLk0sdmFsaWRhdG9yOnZvaWQgMCxjb3JyZWN0Rm9ybWF0OiExLHJvdzowLGNvbDowLGluc3RhbmNlOm5ldyBBZWUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgi''@;'; put 'put ''ZGl2Iikse30pLHZpc3VhbFJvdzowLHZpc3VhbENvbDowLHByb3A6MH07bnVsbD09RCYmKEQ9IiIpLE0mJk0udmFsaWRhdG9yJiYiZnVuY3Rpb24iPT10eXBlb2YgTS52YWxpZGF0b3I/TS52YWxpZGF0b3IuY2FsbChuZSxELGNlPT57WiYmWihjZSl9KTpaJiZaKCExKX0sdGhpcy5yZWdpc3Rl''@;'; put 'put ''ckN1c3RvbUVkaXRvcnMoKSx0aGlzLnNhc3BhcmFtcz1sLHRoaXMuaG90SW5zdGFuY2U9dix0aGlzLnJ1bGVzPShjPT57dHJ5e3JldHVybiBKU09OLnBhcnNlKGBbJHtjfV1gKX1jYXRjaHtyZXR1cm5bXX19KShsLkNPTFRZUEUpLHRoaXMucnVsZXM9a2VlKGQsdGhpcy5ydWxlcyxhKSx0aGlz''@;'; put 'put ''LnJ1bGVzPShjPT57aWYoIUllZVt3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlXSlyZXR1cm4gYztmb3IobGV0IGEgb2YgYykibnVtZXJpYyI9PT1hLnR5cGUmJihhLm51bWVyaWNGb3JtYXQ9e3BhdHRlcm46IjAsMCIsY3VsdHVyZTp3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlfSk7cmV0dXJu''@;'; put 'put ''IGN9KSh0aGlzLnJ1bGVzKSx0aGlzLmRxcnVsZXM9aCx0aGlzLmRxZGF0YT1mLHRoaXMucHJpbWFyeUtleXM9bC5QSy5zcGxpdCgiICIpLHRoaXMudXBkYXRlRHFEYXRhKCksdGhpcy5zZXR1cFZhbGlkYXRpb25zKCl9cmVnaXN0ZXJDdXN0b21FZGl0b3JzKCl7QWVlLmVkaXRvcnMucmVnaXN0''@;'; put 'put ''ZXJFZGl0b3IoImF1dG9jb21wbGV0ZS5jdXN0b20iLFhndCl9Z2V0UnVsZXMoKXtyZXR1cm4gdGhpcy5ydWxlc31nZXRSdWxlKGwpe2NvbnN0IGE9dGhpcy5nZXRSdWxlSW5kZXgobCk7cmV0dXJuIHRoaXMucnVsZXNbYV19Z2V0SGlkZGVuQ29sdW1ucygpe3JldHVybiB0aGlzLmhpZGRlbkNv''@;'; put 'put ''bHVtbnN9dXBkYXRlUnVsZShsLGEpe2xldCBkPXRoaXMuZ2V0UnVsZUluZGV4KGwpO3RoaXMucnVsZXNbZF09ey4uLnRoaXMucnVsZXNbZF0sLi4uYX19cmVtb3ZlUnVsZShsKXtjb25zdCBhPXRoaXMuZ2V0UnVsZUluZGV4KGwpO3RoaXMucnVsZXMuc3BsaWNlKGEsMSl9Z2V0RHFEZXRhaWxz''@;'; put 'put ''KGwpe3JldHVybiBsP3RoaXMuZHFydWxlcy5maWx0ZXIoYT0+YS5CQVNFX0NPTD09PWwpOnRoaXMuZHFydWxlc31pc0RxQ29sKGwpe3JldHVybiEhdGhpcy5kcXJ1bGVzLmZpbmQoYT0+YS5CQVNFX0NPTD09PWwpfWhhc0RxUnVsZXMobCxhLGQ9ITEpe3JldHVybiBkP3RoaXMuZHFydWxlcy5m''@;'; put 'put ''aWx0ZXIoaD0+aC5CQVNFX0NPTD09PWwmJmEuaW5jbHVkZXMoaC5SVUxFX1RZUEUpKS5sZW5ndGg9PT1hLmxlbmd0aDohIXRoaXMuZHFydWxlcy5maW5kKGg9PmguQkFTRV9DT0w9PT1sJiZhLmluY2x1ZGVzKGguUlVMRV9UWVBFKSl9Z2V0RHFEcm9wZG93blNvdXJjZShsKXtsZXQgYT1bXTty''@;'; put 'put ''ZXR1cm4gdGhpcy5kcXJ1bGVzLmZvckVhY2goZD0+e2QuQkFTRV9DT0wudG9TdHJpbmcoKT09PWwuZGF0YSYmbC5kYXRhLnRvU3RyaW5nKCkmJlsiSEFSRFNFTEVDVCIsIlNPRlRTRUxFQ1QiLCJIQVJEU0VMRUNUX0hPT0siLCJTT0ZUU0VMRUNUX0hPT0siXS5pbmNsdWRlcyhkLlJVTEVfVFlQ''@;'; put 'put ''RS50b1N0cmluZygpKSYmdGhpcy5kcWRhdGEuZmlsdGVyKGg9PmguQkFTRV9DT0w9PT1kLkJBU0VfQ09MKS5mb3JFYWNoKGg9PnthLnB1c2gobC50eXBlJiYibnVtZXJpYyI9PT1sLnR5cGU/TnVtYmVyKGguUlVMRV9EQVRBKTpoLlJVTEVfREFUQSl9KX0pLGF9dXBkYXRlRHFEYXRhKCl7dGhp''@;'; put 'put ''cy5kcWRhdGEubGVuZ3RoPjAmJihjPT57Y29uc3QgbD1bXTtyZXR1cm4gdGhpcy5kcWRhdGEuZm9yRWFjaChhPT57bC5pbmNsdWRlcyhhLkJBU0VfQ09MKXx8bC5wdXNoKGEuQkFTRV9DT0wpfSksbH0pKCkuZm9yRWFjaChhPT57bGV0IGQ9ITE7dGhpcy5kcXJ1bGVzLmxlbmd0aD4wJiZ0aGlz''@;'; put 'put ''LmRxcnVsZXMuZm9yRWFjaChoPT57aC5CQVNFX0NPTD09PWEmJigiU09GVFNFTEVDVCI9PT1oLlJVTEVfVFlQRXx8IkhBUkRTRUxFQ1QiPT09aC5SVUxFX1RZUEUpJiYoZD0hMCl9KSxkfHx0aGlzLmRxcnVsZXMucHVzaCh7QkFTRV9DT0w6YSxSVUxFX1RZUEU6IlNPRlRTRUxFQ1QiLFJVTEVf''@;'; put 'put ''VkFMVUU6YSxYOjF9KX0pfXNldHVwVmFsaWRhdGlvbnMoKXtmb3IobGV0IGw9MDtsPHRoaXMucnVsZXMubGVuZ3RoO2wrKyl7Y29uc3QgYT10aGlzLnJ1bGVzW2xdLmRhdGF8fCIiO2lmKCJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iIT09YSl7aWYodGhpcy5pc0RxQ29sKGEpKXts''@;'; put 'put ''ZXQgaD10aGlzLmdldERxRHJvcGRvd25Tb3VyY2UodGhpcy5ydWxlc1tsXSk7aC5sZW5ndGg+MCYmKHRoaXMucnVsZXNbbF0uc291cmNlPWgsdGhpcy5ydWxlc1tsXS50eXBlPSJhdXRvY29tcGxldGUiLHRoaXMucnVsZXNbbF0uZWRpdG9yPSJhdXRvY29tcGxldGUuY3VzdG9tIix0aGlzLnJ1''@;'; put 'put ''bGVzW2xdLmZpbHRlcj0hMSksdGhpcy5oYXNEcVJ1bGVzKGEsWyJTT0ZUU0VMRUNUIl0pJiYodGhpcy5ydWxlc1tsXS5zdHJpY3Q9ITEpLHRoaXMuaGFzRHFSdWxlcyhhLFsiSEFSRFNFTEVDVCJdKSYmKHRoaXMucnVsZXNbbF0uc3RyaWN0PSEwKSx0aGlzLmhhc0RxUnVsZXMoYSxbIlNPRlRT''@;'; put 'put ''RUxFQ1RfSE9PSyJdKSYmKHRoaXMucnVsZXNbbF0uc3RyaWN0PSExKSx0aGlzLmhhc0RxUnVsZXMoYSxbIkhBUkRTRUxFQ1RfSE9PSyJdKSYmKHRoaXMucnVsZXNbbF0uc3RyaWN0PSEwKSx0aGlzLmhhc0RxUnVsZXMoYSxbIk5PVE5VTEwiXSkmJih0aGlzLnJ1bGVzW2xdLmFsbG93RW1wdHk9''@;'; put 'put ''ITEpfSJ0cnVlIj09PXRoaXMucnVsZXNbbF0uY29ycmVjdEZvcm1hdCYmKHRoaXMucnVsZXNbbF0uY29ycmVjdEZvcm1hdD0hMCksdGhpcy5zZXREZWZhdWx0VmFsaWRhdG9yKHRoaXMsbCksdGhpcy5zZXRDb2x1bW5MZXZlbFNlY3VyaXR5KGwpfX10aGlzLnNhc3BhcmFtcz8uQ0xTX0ZMQUcm''@;'; put 'put ''JnRoaXMuaGlkZGVuQ29sdW1ucy5wdXNoKDApfXNldERlZmF1bHRWYWxpZGF0b3IobCxhKXt0aGlzLnJ1bGVzW2FdLnZhbGlkYXRvcj1mdW5jdGlvbihkLGgpe2NvbnN0IGY9bC5ydWxlc1thXS5kYXRhPy50b1N0cmluZygpLHY9bC5ydWxlc1thXS50eXBlfHwiIjtsZXQgTT1udWxsO3JldHVy''@;'; put 'put ''biJhdXRvY29tcGxldGUiIT09dGhpcy5lZGl0b3ImJiJhdXRvY29tcGxldGUuY3VzdG9tIiE9PXRoaXMuZWRpdG9yfHwobC5nZXRIYW5kc29udGFibGVWYWxpZGF0b3IoImF1dG9jb21wbGV0ZSIpLmNhbGwodGhpcyxkLEQ9PntNPUR9KSxNKT8obC5nZXRIYW5kc29udGFibGVWYWxpZGF0b3Io''@;'; put 'put ''dikuY2FsbCh0aGlzLGQsRD0+e009RH0pLE0/bC5sZW5ndGhDaGVjayhkLGwucnVsZXNbYV0ubGVuZ3RoLHYpP2wuaXNEcUNvbChmfHwiIikmJiEoKGMsbCk9Pntmb3IobGV0IGEgb2YgYylpZihxbWVbYS5SVUxFX1RZUEVdJiYhcW1lW2EuUlVMRV9UWVBFXShsLGEuUlVMRV9WQUxVRSkpcmV0''@;'; put 'put ''dXJuIGNvbnNvbGUud2FybihgRFEgSW52YWxpZCBSZWFzb246ICR7YS5SVUxFX1RZUEV9XG5WYWx1ZTogJHtsfSlcblJ1bGUgVmFsdWU6ICR7YS5SVUxFX1ZBTFVFLmxlbmd0aD4wJiYiICIhPT1hLlJVTEVfVkFMVUU/YS5SVUxFX1ZBTFVFOiJOb3QgZGVmaW5lZCJ9YCksITE7cmV0dXJuITB9''@;'; put 'put ''KShsLmdldERxRGV0YWlscyhmfHwiIiksZCk/KGNvbnNvbGUud2FybihgRFEgVmFsaWRhdGlvbiAtIGludmFsaWQgKFZhbHVlOiAke2R9KWApLHZvaWQgaCghMSkpOnZvaWQgaCghMCk6KGNvbnNvbGUud2FybihgTGVuZ3RoIFZhbGlkYXRpb24gLSBpbnZhbGlkIChWYWx1ZTogJHtkfSlgKSx2''@;'; put 'put ''b2lkIGgoITEpKTooY29uc29sZS53YXJuKGBIT1QgTmF0aXZlIFZhbGlkYXRpb24gLSBpbnZhbGlkIChWYWx1ZTogJHtkfSlgKSx2b2lkIGgoITEpKSk6KGNvbnNvbGUud2FybihgSE9UIE5hdGl2ZSBWYWxpZGF0aW9uIChhdXRvY29tcGxldGUpIC0gaW52YWxpZCAoVmFsdWU6ICR7ZH0pYCks''@;'; put 'put ''dm9pZCBoKCExKSl9fWxlbmd0aENoZWNrKGwsYSxkKXtpZigoMCwkZy5pc1NwZWNpYWxNaXNzaW5nKShsKXx8bnVsbD09bHx8bnVsbD09YSlyZXR1cm4hMDtpZigibnVtZXJpYyI9PT1kKXtpZig4PT09YSlyZXR1cm4hMDtpZihhPDN8fGE+OHx8IU51bWJlci5pc0ludGVnZXIoYSkpcmV0dXJu''@;'; put 'put ''IGNvbnNvbGUud2FybigiaW52YWxpZCBsZW5ndGggZnJvbSBTQVMsIHJ1bGUgbGVuZ3RoIGNhbiBvbmx5IGJlIGFuIGludGVnZXIgYmV0d2VlbiAzLTgiKSwhMTtjb25zdCBoPU51bWJlcihsKT09PWwmJmwlMSE9MDtpZihhPDgmJmgpcmV0dXJuIGNvbnNvbGUud2FybigicmVkdWNlZCBsZW5n''@;'; put 'put ''dGggbnVtZXJpY3MgY2Fubm90IGNvbnRhaW4gZGVjaW1hbHMgZWxzZSBwcmVjaXNpb24gd2lsbCBiZSBhZmZlY3RlZCIpLCExO3N3aXRjaChhKXtjYXNlIDM6cmV0dXJuIGw8PTgxOTI7Y2FzZSA0OnJldHVybiBsPD0yMDk3MTUyO2Nhc2UgNTpyZXR1cm4gbDw9NTM2ODcwOTEyO2Nhc2UgNjpy''@;'; put 'put ''ZXR1cm4gbDw9MTM3NDM4OTUzNDcyO2Nhc2UgNzpyZXR1cm4gbDw9MzUxODQzNzIwODg4MzJ9fXJldHVybiBsLnRvU3RyaW5nKCkubGVuZ3RoPD1hfWdldEhhbmRzb250YWJsZVZhbGlkYXRvcihsKXtzd2l0Y2gobCl7Y2FzZSJhdXRvY29tcGxldGUiOnJldHVybiByVDtjYXNlIm51bWVyaWMi''@;'; put 'put ''OnJldHVybiBEZWU7Y2FzZSJkYXRlIjpyZXR1cm4gVVA7Y2FzZSJ0aW1lIjpyZXR1cm4gWlA7ZGVmYXVsdDpyZXR1cm4oYSxkKT0+ZD9kKCEwKTpudWxsfX1nZXRSdWxlSW5kZXgobCl7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBsP2w6dGhpcy5ydWxlcy5maW5kSW5kZXgoYT0+YS5kYXRhPT09''@;'; put 'put ''bCl9c2V0Q29sdW1uTGV2ZWxTZWN1cml0eShsKXtpZighdGhpcy5zYXNwYXJhbXM/LkNMU19GTEFHKXJldHVybjtjb25zdCBhPXRoaXMucnVsZXNbbF07aWYodGhpcy5wcmltYXJ5S2V5cy5pbmNsdWRlcyhhLmRhdGEpJiYoYS5jbHNSdWxlPSJSRUFEIiksIkhJREUiPT09YS5jbHNSdWxlJiZ0''@;'; put 'put ''aGlzLmhpZGRlbkNvbHVtbnMucHVzaChsKSwiUkVBRCI9PT1hLmNsc1J1bGUmJihhLnJlYWRPbmx5PSEwKSwiRURJVCI9PT1hLmNsc1J1bGUpe2EucmVhZE9ubHk9ITE7Y29uc3QgZD10aGlzLmhpZGRlbkNvbHVtbnMuaW5kZXhPZihsKTt0aGlzLmhpZGRlbkNvbHVtbnMuc3BsaWNlKGQsMSl9''@;'; put 'put ''fX1jb25zdCBHSD17bnVtZXJpYzoiIixkZWZhdWx0OiIifSxKZ3Q9KGMsbCk9PmM/ImF1dG9jb21wbGV0ZSI9PT1jP2wmJmwuc291cmNlP2wuc291cmNlWzBdOltdOkdILmhhc093blByb3BlcnR5KGMpP0dIW2NdOkdILmRlZmF1bHQ6R0guZGVmYXVsdCxSZWU9Yz0+bmV3IERhdGUoTWF0aC5y''@;'; put 'put ''b3VuZCg4NjQwMCooYy0yNTU2OSkqMWUzKSksZTV0PShjLGwsYSxkLGgsZix2KT0+KE9lZShsKSxsLmlubmVySFRNTD1gJHtmP2YudG9TdHJpbmcoKToiIn0gPGNkcy1pY29uIHNoYXBlPSJleGNsYW1hdGlvbi10cmlhbmdsZSIgc3RhdHVzPSJ3YXJuaW5nIj48L2Nkcy1pY29uPmAsbCksTGVl''@;'; put 'put ''PShjLGwsYSxkLGgsZix2KT0+KE9lZShsKSxsLmlubmVySFRNTD1mfHwiIixsKSx0NXQ9KGMsbCxhLGQsaCxmLHYpPT4oT2VlKGwpLGwuaW5uZXJIVE1MPWAke2Y/Zi50b1N0cmluZygpOiIifSA8c3BhbiBjbGFzcz0ic3Bpbm5lciBzcGlubmVyLXNtIHZlcnRpY2FsLWFsaWduLW1pZGRsZSI+''@;'; put 'put ''PC9zcGFuPmAsbCksT2VlPWM9PntjLmNsYXNzTGlzdC5jb250YWlucygiaHREYXJrIil8fGMuY2xhc3NMaXN0LmFkZCgiaHREYXJrIil9LFBlZT1mdW5jdGlvbiByNXQoYyl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBjfHx2eShjKSYmIltvYmplY3QgU3ltYm9sXSI9PWZ5KGMpfTt2YXIgaTV0''@;'; put 'put ''PS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLG81dD0vXlx3KiQvO2Z1bmN0aW9uIEZlZShjLGwpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBjfHxudWxsIT1sJiYiZnVuY3Rpb24iIT10eXBlb2YgbCl0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3Rl''@;'; put 'put ''ZCBhIGZ1bmN0aW9uIik7dmFyIGE9ZnVuY3Rpb24oKXt2YXIgZD1hcmd1bWVudHMsaD1sP2wuYXBwbHkodGhpcyxkKTpkWzBdLGY9YS5jYWNoZTtpZihmLmhhcyhoKSlyZXR1cm4gZi5nZXQoaCk7dmFyIHY9Yy5hcHBseSh0aGlzLGQpO3JldHVybiBhLmNhY2hlPWYuc2V0KGgsdil8fGYsdn07''@;'; put 'put ''cmV0dXJuIGEuY2FjaGU9bmV3KEZlZS5DYWNoZXx8YlcpLGF9RmVlLkNhY2hlPWJXO2NvbnN0IGM1dD1GZWU7dmFyIGY1dD0vW14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwk''@;'; put 'put ''KSkvZyxwNXQ9L1xcKFxcKT8vZyxnNXQ9ZnVuY3Rpb24gZDV0KGMpe3ZhciBsPWM1dChjLGZ1bmN0aW9uKGQpe3JldHVybiA1MDA9PT1hLnNpemUmJmEuY2xlYXIoKSxkfSksYT1sLmNhY2hlO3JldHVybiBsfShmdW5jdGlvbihjKXt2YXIgbD1bXTtyZXR1cm4gNDY9PT1jLmNoYXJDb2RlQXQo''@;'; put 'put ''MCkmJmwucHVzaCgiIiksYy5yZXBsYWNlKGY1dCxmdW5jdGlvbihhLGQsaCxmKXtsLnB1c2goaD9mLnJlcGxhY2UocDV0LCIkMSIpOmR8fGEpfSksbH0pO2NvbnN0IG01dD1nNXQ7dmFyIEptZT1zbT9zbS5wcm90b3R5cGU6dm9pZCAwLFFtZT1KbWU/Sm1lLnRvU3RyaW5nOnZvaWQgMDtjb25z''@;'; put 'put ''dCBfNXQ9ZnVuY3Rpb24gZTZlKGMpe2lmKCJzdHJpbmciPT10eXBlb2YgYylyZXR1cm4gYztpZihieShjKSlyZXR1cm4gZnVuY3Rpb24gdjV0KGMsbCl7Zm9yKHZhciBhPS0xLGQ9bnVsbD09Yz8wOmMubGVuZ3RoLGg9QXJyYXkoZCk7KythPGQ7KWhbYV09bChjW2FdLGEsYyk7cmV0dXJuIGh9''@;'; put 'put ''KGMsZTZlKSsiIjtpZihQZWUoYykpcmV0dXJuIFFtZT9RbWUuY2FsbChjKToiIjt2YXIgbD1jKyIiO3JldHVybiIwIj09bCYmMS9jPT0tMS8wPyItMCI6bH0sTTV0PWZ1bmN0aW9uIFM1dChjLGwpe3JldHVybiBieShjKT9jOmZ1bmN0aW9uIGE1dChjLGwpe2lmKGJ5KGMpKXJldHVybiExO3Zh''@;'; put 'put ''ciBhPXR5cGVvZiBjO3JldHVybiEoIm51bWJlciIhPWEmJiJzeW1ib2wiIT1hJiYiYm9vbGVhbiIhPWEmJm51bGwhPWMmJiFQZWUoYykpfHxvNXQudGVzdChjKXx8IWk1dC50ZXN0KGMpfHxudWxsIT1sJiZjIGluIE9iamVjdChsKX0oYyxsKT9bY106bTV0KGZ1bmN0aW9uIHc1dChjKXtyZXR1''@;'; put 'put ''cm4gbnVsbD09Yz8iIjpfNXQoYyl9KGMpKX0sVDV0PWZ1bmN0aW9uIEU1dChjKXtpZigic3RyaW5nIj09dHlwZW9mIGN8fFBlZShjKSlyZXR1cm4gYzt2YXIgbD1jKyIiO3JldHVybiIwIj09bCYmMS9jPT0tMS8wPyItMCI6bH0sd2M9ZnVuY3Rpb24gRDV0KGMsbCxhKXt2YXIgZD1udWxsPT1j''@;'; put 'put ''P3ZvaWQgMDpmdW5jdGlvbiBBNXQoYyxsKXtmb3IodmFyIGE9MCxkPShsPU01dChsLGMpKS5sZW5ndGg7bnVsbCE9YyYmYTxkOyljPWNbVDV0KGxbYSsrXSldO3JldHVybiBhJiZhPT1kP2M6dm9pZCAwfShjLGwpO3JldHVybiB2b2lkIDA9PT1kP2E6ZH07bGV0IFZoPSgoKT0+e2NsYXNzIGN7''@;'; put 'put ''Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuaGVscGVyU2VydmljZT1kLHRoaXMubG9nZ2VyU2VydmljZT1oLHRoaXMucmVzcG9uc2U9bmV3IFduLHRoaXMuY2hhbmdlZFRhYmxlPW5ldyBXbix0aGlzLmRldGFpbHM9bmV3IFduLHRoaXMuZGlmZnM9bmV3IFduLHRo''@;'; put 'put ''aXMuY29sdW1ucz1uZXcgV24sdGhpcy52YWx1ZXM9bmV3IFduLHRoaXMuZmlsdGVyPW5ldyBXbix0aGlzLnF1ZXJ5PW5ldyBXbix0aGlzLnN1Ym1pdHREZXRhaWw9bmV3IFduLHRoaXMucmVtb3ZlUXVlcnk9bmV3IFduLHRoaXMuc2V0U3VibWl0PW5ldyBXbix0aGlzLnNldFN1Ym1pdExpc3Q9''@;'; put 'put ''bmV3IFdufWNhbGxTZXJ2aWNlKGEsZCxoLGYpe3ZhciB2PXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2NvbnN0IE09e307cmV0dXJuIE1bZF09W2FdLHtkYXRhOih5aWVsZCB2LnNhc1NlcnZpY2UucmVxdWVzdChoLE0pKS5hZGFwdGVyUmVzcG9uc2UsbGliZHM6Zn19KSgpfXVwZGF0ZVRh''@;'; put 'put ''YmxlKGEsZCxoLGYsdixNLEQpe3ZhciBaPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCBuZT17anNkYXRhOmR9O2lmKHYpe2xldCBiZT1aLnBhcnNlRm9ybWF0cyh2KTtuZS4kanNkYXRhPXtmb3JtYXRzOmJlfX1yZXR1cm4gbmVbaF09W2FdLHlpZWxkIFouc2FzU2VydmljZS5yZXF1''@;'; put 'put ''ZXN0KGYsbmUsRCx7c3VwcHJlc3NFcnJvckFib3J0TW9kYWw6TSxzdXBwcmVzc1N1Y2Nlc3NBYm9ydE1vZGFsOk19KX0pKCl9Z2V0QXBwcm92YWxzKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgdj17fTtyZXR1cm4gdltkXT1bYV0sKHlpZWxkIGYuc2FzU2Vy''@;'; put 'put ''dmljZS5yZXF1ZXN0KGgsdikpLmFkYXB0ZXJSZXNwb25zZX0pKCl9c2VuZERldGFpbHMoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCB2PU9iamVjdC5hc3NpZ24oe3N1YjohMH0sYSk7Zi5zdWJtaXR0RGV0YWlsLm5leHQoe2RhdGE6aFtkXSx2aWV3RGF0YTp2''@;'; put 'put ''fSl9KSgpfWdldFN1Ym1pdHRzKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIGEuc2FzU2VydmljZS5yZXF1ZXN0KCJlZGl0b3JzL2dldHN1Ym1pdHMiLG51bGwpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXZpZXdMaWJzKCl7dmFyIGE9dGhpcztyZXR1cm4g''@;'; put 'put ''ZWUoZnVuY3Rpb24qKCl7cmV0dXJuKHlpZWxkIGEuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvdmlld2xpYnMiLG51bGwpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXJlZnJlc2hMaWJJbmZvKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2NvbnN0IGg9e2xpYjJyZWZyZXNo''@;'; put 'put ''Olt7bGlicmVmOmF9XX07cmV0dXJuKHlpZWxkIGQuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvcmVmcmVzaGxpYmluZm8iLGgpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXZpZXdUYWJsZXMoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IGg9e1NBU0NvbnRyb2xUYWJs''@;'; put 'put ''ZTpbe01QTElCOmF9XX07cmV0dXJuKHlpZWxkIGQuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvdmlld3RhYmxlcyIsaCkpLmFkYXB0ZXJSZXNwb25zZX0pKCl9dmlld0RhdGEoYSxkKXt2YXIgaD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgZj17U0FTQ29udHJvbFRhYmxlOlt7''@;'; put 'put ''TElCRFM6YSxGSUxURVJfUks6ZH1dfTtyZXR1cm4oeWllbGQgaC5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy92aWV3ZGF0YSIsZikpLmFkYXB0ZXJSZXNwb25zZX0pKCl9dmlld0RhdGFTZWFyY2goYSxkPSExLGgsZil7dmFyIHY9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IEQ9''@;'; put 'put ''e1NBU0NvbnRyb2xUYWJsZTpbe1NFQVJDSFRZUEU6YS5sZW5ndGg+MD9kPyJOVU0iOiJDSEFSIjoiTk9ORSIsU0VBUkNIVkFMOmEsTElCRFM6aCxGSUxURVJfUks6Zn1dfTtyZXR1cm4oeWllbGQgdi5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy92aWV3ZGF0YSIsRCkpLmFkYXB0ZXJSZXNw''@;'; put 'put ''b25zZX0pKCl9Z2V0WExNYXBSdWxlcyhhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtjb25zdCBoPXtnZXR4bG1hcHNfaW46W3tYTE1BUF9JRDphfV19O3JldHVybih5aWVsZCBkLnNhc1NlcnZpY2UucmVxdWVzdCgiZWRpdG9ycy9nZXR4bG1hcHMiLGgpKS5hZGFwdGVyUmVz''@;'; put 'put ''cG9uc2V9KSgpfXNob3dEaWZmcyhhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IHY9e307cmV0dXJuIHZbZF09W2FdLCh5aWVsZCBmLnNhc1NlcnZpY2UucmVxdWVzdChoLHYse3VzZUNvbXB1dGVBcGk6ITF9KSkuYWRhcHRlclJlc3BvbnNlfSkoKX1yZWplY3Rp''@;'; put 'put ''bmcoYSxkLGgpe3ZhciBmPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCB2PXt9O3JldHVybiB2W2RdPVthXSwoeWllbGQgZi5zYXNTZXJ2aWNlLnJlcXVlc3QoaCx2LHt1c2VDb21wdXRlQXBpOiExfSkpLmFkYXB0ZXJSZXNwb25zZX0pKCl9YXBwcm92ZVRhYmxlKGEsZCxoKXt2YXIg''@;'; put 'put ''Zj10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgdj17fTtyZXR1cm4gdltkXT1bYV0sKHlpZWxkIGYuc2FzU2VydmljZS5yZXF1ZXN0KGgsdikpLmFkYXB0ZXJSZXNwb25zZX0pKCl9Z2V0SGlzdG9yeShhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IHY9''@;'; put 'put ''e307cmV0dXJuIHZbZF09W2FdLCh5aWVsZCBmLnNhc1NlcnZpY2UucmVxdWVzdChoLHYpKS5hZGFwdGVyUmVzcG9uc2V9KSgpfXNldFF1ZXJ5VmFyaWFibGVzKGEsZCl7dGhpcy5jb2x1bW5zLm5leHQoe2RhdGE6e2NvbHM6ZH0sbGliZHM6YX0pfWdldENoYW5nZUluZm8oYSl7dmFyIGQ9dGhp''@;'; put 'put ''cztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IGY9e1NBU0NvbnRyb2xUYWJsZTpbe1RBQkxFOmF9XX07cmV0dXJuKHlpZWxkIGQuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvZ2V0Y2hhbmdlaW5mbyIsZikpLmFkYXB0ZXJSZXNwb25zZX0pKCl9Z2V0UXVlcnlWYWx1ZXMoYSxkLGgsZix2''@;'; put 'put ''KXt2YXIgTT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgRD17aXdhbnQ6W3tsaWJkczpkLGNvbDphLC4uLmYmJntTVEFSVFJPVzpmfSwuLi52JiZ7Uk9XUzp2fX1dfTtyZXR1cm4gaC5sZW5ndGg+MCYmKEQuRklMVEVSUVVFUlk9aCksKHlpZWxkIE0uc2FzU2VydmljZS5yZXF1ZXN0''@;'; put 'put ''KCJwdWJsaWMvZ2V0Y29sdmFscyIsRCkuY2F0Y2goWj0+e3Rocm93IFp9KSkuYWRhcHRlclJlc3BvbnNlfSkoKX1zYXZlUXVlcnkoYSxkKXt2YXIgaD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgZj17aXdhbnQ6W3tmaWx0ZXJfdGFibGU6YX1dLGZpbHRlcnF1ZXJ5OmR9O2NvbnN0''@;'; put 'put ''IHY9eWllbGQgaC5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy92YWxpZGF0ZWZpbHRlciIsZik7cmV0dXJuIGguZmlsdGVyLm5leHQodiksdi5hZGFwdGVyUmVzcG9uc2V9KSgpfW9wZW5UYWJsZShhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgaD17aXdhbnQ6W3t0''@;'; put 'put ''YWJsZV9pZDphfV19O3JldHVybih5aWVsZCBkLnNhc1NlcnZpY2UucmVxdWVzdCgiYXVkaXRvcnMvZ2V0c3RhZ2V0YWJsZSIsaCkpLmFkYXB0ZXJSZXNwb25zZX0pKCl9Y2hlY2tPcGVyYXRvcihhLGQsaCl7bGV0IGY7c3dpdGNoKGEpe2Nhc2UiQkVUV0VFTiI6ZCBpbnN0YW5jZW9mIEFycmF5''@;'; put 'put ''JiYoIiIhPT1kWzBdJiYiIiE9PWRbMV0/Zj1kWzBdKyIgQU5EICIrZFsxXToiIiE9PWRbMF0mJiIiPT09ZFsxXT8oZFsxXT0iLiIsZj1kWzBdKyIgQU5EICIrZFsxXSk6IiI9PT1kWzBdJiYiIiE9PWRbMV0/KGRbMF09Ii4iLGY9ZFswXSsiIEFORCAiK2RbMV0pOihkWzBdPSIuIixkWzFdPSIu''@;'; put 'put ''IixmPWRbMF0rIiBBTkQgIitkWzFdKSk7YnJlYWs7Y2FzZSJJTiI6Y2FzZSJOT1QgSU4iOmxldCBNPVtdO2lmKHR5cGVvZiBkPCJ1Iilmb3IobGV0IEQ9MDtEPGQubGVuZ3RoO0QrKykhMD09PWRbRF0uY2hlY2tlZCYmKCJjaGFyIj09PWg/KCJzdHJpbmciPT10eXBlb2YgZFtEXS52YWwmJihk''@;'; put 'put ''W0RdLnZhbD1kW0RdLnZhbC5yZXBsYWNlKCInIiwiJyciKSksTS5wdXNoKCInIitkW0RdLnZhbCsiJyIpKToobnVsbD09PWRbRF0udmFsJiYoZFtEXS52YWw9Ii4iKSxNLnB1c2goZFtEXS52YWwpKSk7ZD0iKCIrTSsiKSI7YnJlYWs7Y2FzZSJDT05UQUlOUyI6YT0iPyI7YnJlYWs7Y2FzZSJO''@;'; put 'put ''T1QgRVFVQUwiOmE9Im5lIn1yZXR1cm4ibnVtIj09PWgmJm51bGw9PT1kJiYoZD0iLiIpLCJQbGVhc2Ugc2VsZWN0IHZhbHVlIj09PWQmJihkPSIiKSwtMSE9PVsiPSIsIj4iLCI8IiwiPD0iLCI+PSIsIm5lIl0uaW5kZXhPZihhKSYmIm51bSI9PT1oJiYiIj09PWQmJihkPSIuIiksIkJFVFdF''@;'; put 'put ''RU4iPT09YT97dmFsdWU6ZixvcGVyYXRvcjphfTp7dmFsdWU6ZCxvcGVyYXRvcjphfX13aGVyZUNsYXVzZUNyZWF0b3IoYSxkLGgpe2xldCBELGNlLGY9IiIsWj0iIixuZT1bXTtmb3IobGV0IEVlPTA7RWU8YS5xdWVyeU9iai5sZW5ndGg7RWUrKyl7bGV0IEJlPSIiLHFlPWEucXVlcnlPYmpb''@;'; put 'put ''RWVdO2ZvcihsZXQgbnQ9MDtudDxxZS5lbGVtZW50cy5sZW5ndGg7bnQrKyl7bGV0IG10LGx0PXFlLmVsZW1lbnRzW250XTtEPW50PHFlLmVsZW1lbnRzLmxlbmd0aC0xP3FlLmNsYXVzZUxvZ2ljOiIiO2ZvcihsZXQgUW49MDtRbjxsdC52YWx1ZXMubGVuZ3RoO1FuKyspe2lmKCJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgbHQudmFsdWUmJiJudW1iZXIiPT10eXBlb2YgbHQudmFsdWVzW1FuXS5mb3JtYXR0ZWQpbHQudmFsdWU9PT1KU09OLnN0cmluZ2lmeShsdC52YWx1ZXNbUW5dLmZvcm1hdHRlZCkmJihtdD1sdC52YWx1ZXNbUW5dLnVuZm9ybWF0dGVkKTtlbHNle2xldCB5cj0ibnVtYmVyIiE9''@;'; put 'put ''dHlwZW9mIGx0LnZhbHVlc1tRbl0uZm9ybWF0dGVkJiZudWxsIT09bHQudmFsdWVzW1FuXS5mb3JtYXR0ZWQ/bHQudmFsdWVzW1FuXS5mb3JtYXR0ZWQudHJpbSgpOmx0LnZhbHVlc1tRbl0uZm9ybWF0dGVkO2x0LnZhbHVlPT09eXImJihtdD1sdC52YWx1ZXNbUW5dLnVuZm9ybWF0dGVkKX0i''@;'; put 'put ''UGxlYXNlIHNlbGVjdCB2YWx1ZSI9PT1sdC52YWx1ZSYmLTEhPT1bIj0iLCI+IiwiPCIsIjw9IiwiPj0iLCJuZSJdLmluZGV4T2YobHQub3BlcmF0b3IpJiYobXQ9IiIpLCgiQ09OVEFJTlMiPT09bHQub3BlcmF0b3J8fCJMSUtFIj09PWx0Lm9wZXJhdG9yfHwiQkVHSU5TX1dJVEgiPT09bHQu''@;'; put 'put ''b3BlcmF0b3IpJiYobXQ9bHQudmFsdWUpfWlmKG10fHwobXQ9bHQudmFsdWUpLGx0LnZhbHVlIGluc3RhbmNlb2YgQXJyYXkmJiJCRVRXRUVOIj09PWx0Lm9wZXJhdG9yKXttdD1bXSxtdC5wdXNoKGx0LnZhbHVlWzBdKSxtdC5wdXNoKGx0LnZhbHVlWzFdKTtmb3IobGV0IFFuPTA7UW48bHQu''@;'; put 'put ''dmFsdWVzLmxlbmd0aDtRbisrKW10WzBdPT09bHQudmFsdWVzW1FuXS5mb3JtYXR0ZWQmJihtdFswXT1sdC52YWx1ZXNbUW5dLnVuZm9ybWF0dGVkKSxtdFsxXT09PWx0LnZhbHVlc1tRbl0uZm9ybWF0dGVkJiYobXRbMV09bHQudmFsdWVzW1FuXS51bmZvcm1hdHRlZCl9aWYobHQudmFsdWUg''@;'; put 'put ''aW5zdGFuY2VvZiBBcnJheSYmKCJJTiI9PT1sdC5vcGVyYXRvcnx8Ik5PVCBJTiI9PT1sdC5vcGVyYXRvcikpe210PVtdLG10PWx0LnZhbHVlO2ZvcihsZXQgUW49MDtRbjxsdC52YWx1ZXMubGVuZ3RoO1FuKyspbXRbUW5dJiZtdFtRbl0udmFsPT09bHQudmFsdWVzW1FuXS5mb3JtYXR0ZWQm''@;'; put 'put ''JihtdFtRbl0udmFsPWx0LnZhbHVlc1tRbl0udW5mb3JtYXR0ZWQpfWxldCBKdD1sdC50eXBlO2NvbnN0IHluPWx0LnZhbHVlVmFyaWFibGU7bGV0IHhuLENuPW51bGw9PT1sdC52YXJpYWJsZT8iIjpsdC52YXJpYWJsZSx0bj1udWxsPT09bHQub3BlcmF0b3I/IiI6bHQub3BlcmF0b3I7eG49''@;'; put 'put ''dGhpcy5jaGVja09wZXJhdG9yKHRuLG10LEp0KS52YWx1ZSwic3RyaW5nIj09dHlwZW9mIHhuJiYiKCIhPT14blswXSYmKHhuPXhuLnJlcGxhY2UoIiciLCInJyIpKSx0bj10aGlzLmNoZWNrT3BlcmF0b3IodG4seG4sSnQpLm9wZXJhdG9yLCJjaGFyIj09PUp0JiYiSU4iIT09dG4mJiJOT1Qg''@;'; put 'put ''SU4iIT09dG4/KHR5cGVvZiB4bj4idSImJih4bj0iIikseG49eW4/IiAiK3huKyIgIjoiICciK3huKyInICIsQmU9QmUrIiAiK0NuKyIgIit0bit4bitEKTooIm51bSI9PT1KdCYmdHlwZW9mIHhuPiJ1IiYmKHhuPSIuIikseG49dHlwZW9mIHhuPiJ1Ij8iIjoiICIreG4rIiAiLEJlPUJlKyIg''@;'; put 'put ''IitDbisiICIrdG4reG4rRCl9bmUucHVzaChCZSl9Wj0iIjtmb3IobGV0IEVlPTA7RWU8bmUubGVuZ3RoO0VlKyspY2U9RWU8bmUubGVuZ3RoLTE/ZDoiIixaPTE9PT1uZS5sZW5ndGg/bmVbMF06WisiICgiK25lW0VlXSsiKSAiK2NlO3JldHVybiBmPVouc3Vic3RyKDEpLnNsaWNlKDAsLTEp''@;'; put 'put ''LFo9IldIRVJFIitaKyI7Iix0aGlzLnF1ZXJ5Lm5leHQoe3doZXJlQ2xhdXNlOlosc3RyaW5nOmYsb2JqOmEsbGliZHM6aH0pLHt3aGVyZUNsYXVzZTpaLHN0cmluZzpmfX1jcmVhdGVGaWx0ZXJRdWVyeVRhYmxlKGEpe2NvbnN0IGQ9W107cmV0dXJuIGEuZmlsdGVyR3JvdXBzLmZvckVhY2go''@;'; put 'put ''KGgsZik9PntoLmZpbHRlckNsYXVzZXMuZm9yRWFjaCh2PT57bGV0IE09IiI7IkJFVFdFRU4iPT09di5vcGVyYXRvcj9NPWAke3YudmFsdWVbMF19IEFORCAke3YudmFsdWVbMV19YDoiSU4iPT09di5vcGVyYXRvcnx8Ik5PVCBJTiI9PT12Lm9wZXJhdG9yPyh2LnZhbHVlLmZvckVhY2goRD0+''@;'; put 'put ''e2lmKEQuY2hlY2tlZCl7Y29uc3QgWj1ELnZhbDsic3RyaW5nIiE9dHlwZW9mIFp8fCgwLCRnLmlzU3BlY2lhbE1pc3NpbmcpKFopJiYiY2hhciIhPT12LnR5cGU/TS5sZW5ndGg+MD9NKz1gLCR7Wn1gOk09YCgke1p9YDpNLmxlbmd0aD4wP00rPWAsJyR7Wi5yZXBsYWNlKC8nL2csIicnIil9''@;'; put 'put ''J2A6TT1gKCcke1oucmVwbGFjZSgvJy9nLCInJyIpfSdgfX0pLE0ubGVuZ3RoPjAmJihNKz0iKSIpKToiIj09PXYudmFsdWU/TT0iY2hhciI9PT12LnR5cGU/IicgJyI6Ii4iOiJjaGFyIj09PXYudHlwZSYmIXYudmFsdWVWYXJpYWJsZSYmKE09YCcke3YudmFsdWUucmVwbGFjZSgvJy9nLCIn''@;'; put 'put ''JyIpfSdgKSxkLnB1c2goe0dST1VQX0xPR0lDOmEuZ3JvdXBMb2dpYyxTVUJHUk9VUF9MT0dJQzpoLmNsYXVzZUxvZ2ljfHwiQU5EIixTVUJHUk9VUF9JRDpmLFZBUklBQkxFX05NOnYudmFyaWFibGUsT1BFUkFUT1JfTk06di5vcGVyYXRvcixSQVdfVkFMVUU6TXx8di52YWx1ZX0pfSl9KSxk''@;'; put 'put ''fWluaXRpYWxpemVHbG9iYWxGaWx0ZXJDbGF1c2UoYSxkKXtjb25zdCBoPXtxdWVyeU9iajpbXSxjbGF1c2VMb2dpYzpbXSxncm91cExvZ2ljOndjKEtuLGEpLmZpbHRlci5xdWVyeVswXS5HUk9VUF9MT0dJQ307d2MoS24sYSkuZmlsdGVyLmNsYXVzZXM9dGhpcy5oZWxwZXJTZXJ2aWNlLmRl''@;'; put 'put ''ZXBDbG9uZShoKSx3YyhLbixhKS5maWx0ZXIuZ3JvdXBMb2dpYz13YyhLbixhKS5maWx0ZXIucXVlcnlbMF0uR1JPVVBfTE9HSUM7bGV0IGY9IiIsdj17ZWxlbWVudHM6W119LE09MDt3YyhLbixhKS5maWx0ZXIucXVlcnkuZm9yRWFjaChEPT57Y29uc3QgWj17fTtmb3IobGV0IG5lPTA7bmU8''@;'; put 'put ''ZC5sZW5ndGg7bmUrKylpZihkW25lXS5OQU1FPT09RC5WQVJJQUJMRV9OTSl7aWYoZj1ELlNVQkdST1VQX0xPR0lDLFouZGR0eXBlPWRbbmVdLkREVFlQRSxaLnR5cGU9ZFtuZV0uVFlQRSxaLm9wZXJhdG9ycz0ibnVtIj09PWRbbmVdLlRZUEU/S24ub3BlcmF0b3JzLm51bU9wZXJhdG9yczpL''@;'; put 'put ''bi5vcGVyYXRvcnMuY2hhck9wZXJhdG9ycyxaLmxvZ2ljPW51bGwsWi5vcGVyYXRvcj1ELk9QRVJBVE9SX05NLFoudmFyaWFibGU9RC5WQVJJQUJMRV9OTSwiY2hhciI9PT1kW25lXS5UWVBFKWlmKCJJTiI9PT1ELk9QRVJBVE9SX05NfHwiTk9UIElOIj09PUQuT1BFUkFUT1JfTk0pe2NvbnN0''@;'; put 'put ''IGNlPVtdLEVlPUQuUkFXX1ZBTFVFLnNsaWNlKDEsLTEpLnNwbGl0KCInLCciKTsxPT09RWUubGVuZ3RoP2NlLnB1c2goe2NoZWNrZWQ6ITAsdmFsOkVlWzBdLnNsaWNlKDEsLTEpLnJlcGxhY2UoLycnL2csIiciKX0pOkVlLmZvckVhY2goKEJlLHFlKT0+e2NlLnB1c2goMD09PXFlP3tjaGVj''@;'; put 'put ''a2VkOiEwLHZhbDpCZS5zbGljZSgxKS5yZXBsYWNlKC8nJy9nLCInIil9OnFlPT09RWUubGVuZ3RoLTE/e2NoZWNrZWQ6ITAsdmFsOkJlLnNsaWNlKDAsLTEpLnJlcGxhY2UoLycnL2csIiciKX06e2NoZWNrZWQ6ITAsdmFsOkJlLnJlcGxhY2UoLycnL2csIiciKX0pfSksWi52YWx1ZT10aGlz''@;'; put 'put ''LmhlbHBlclNlcnZpY2UuZGVlcENsb25lKGNlKX1lbHNlIFoudmFsdWU9RC5SQVdfVkFMVUUuc2xpY2UoMSwtMSkucmVwbGFjZSgvJycvZywiJyIpO2Vsc2UgaWYoIklOIj09PUQuT1BFUkFUT1JfTk18fCJOT1QgSU4iPT09RC5PUEVSQVRPUl9OTSl7Y29uc3QgY2U9W107RC5SQVdfVkFMVUUu''@;'; put 'put ''c2xpY2UoMSwtMSkuc3BsaXQoIiwiKS5mb3JFYWNoKChCZSxxZSk9PntjZS5wdXNoKHtjaGVja2VkOiEwLHZhbDpCZX0pfSksWi52YWx1ZT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKGNlKX1lbHNlIGlmKCJCRVRXRUVOIj09PUQuT1BFUkFUT1JfTk0pe2NvbnN0IGNlPUQuUkFXX1ZB''@;'; put 'put ''TFVFLnNwbGl0KCIgQU5EICIpO1oudmFsdWU9Y2V9ZWxzZSBaLnZhbHVlPUQuUkFXX1ZBTFVFO1oudmFsdWVzPVtdLE09PT1ELlNVQkdST1VQX0lEfHwod2MoS24sYSkuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmoucHVzaCh0aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHYpKSx3YyhLbixh''@;'; put 'put ''KS5maWx0ZXIuY2xhdXNlcy5xdWVyeU9ialtNXS5jbGF1c2VMb2dpYz1mLHdjKEtuLGEpLmZpbHRlci5jbGF1c2VzLnF1ZXJ5T2JqW01dLmludmFsaWRDbGF1c2U9ITEsTSsrLHYuZWxlbWVudHM9W10pLHYuZWxlbWVudHMucHVzaCh0aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKFopKTti''@;'; put 'put ''cmVha319KSx2LmVsZW1lbnRzLmxlbmd0aD4wJiYod2MoS24sYSkuZmlsdGVyLmNsYXVzZXMucXVlcnlPYmoucHVzaCh0aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHYpKSx3YyhLbixhKS5maWx0ZXIuY2xhdXNlcy5xdWVyeU9ialtNXS5jbGF1c2VMb2dpYz1mLHdjKEtuLGEpLmZpbHRl''@;'; put 'put ''ci5jbGF1c2VzLnF1ZXJ5T2JqW01dLmludmFsaWRDbGF1c2U9ITEpLHdjKEtuLGEpLmZpbHRlci5xdWVyeT1bXX1yZW1vdmVDbGF1c2UoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtyZXR1cm4gYS5yZW1vdmVRdWVyeS5uZXh0KCEwKSwhMH0pKCl9c3BlY0NvbnZlcnNpb24o''@;'; put 'put ''YSl7bGV0IGQ9e30saD1bXTtpZihoPWEubWFwKGZ1bmN0aW9uKGYpe3JldHVybiBmLk5BTUUudG9VcHBlckNhc2UoKX0pLGEgaW5zdGFuY2VvZiBBcnJheSlmb3IobGV0IGY9MDtmPGgubGVuZ3RoO2YrKylkW2hbZl1dPTE9PT1hW2ZdLlRZUEU/e2NvbFR5cGU6Im51bSIsY29sTGVuZ3RoOmFb''@;'; put 'put ''Zl0uTEVOR1RIfTp7Y29sVHlwZToic3RyaW5nIixjb2xMZW5ndGg6YVtmXS5MRU5HVEh9O3JldHVybiBkfXNldFN1Ym1pdFJlYWR5KCl7dGhpcy5zZXRTdWJtaXQubmV4dCghMCl9cGFyc2VGb3JtYXRzKGEpe2NvbnN0IGQ9e30saD1hLnZhcnM7Zm9yKGxldCBmIG9mIE9iamVjdC5rZXlzKGgp''@;'; put 'put ''KXtjb25zdCB2PWhbZl0udHlwZSxNPWhbZl0ubGVuZ3RoOyJudW0iPT09dj9kW2ZdPSJiZXN0LiI6ImNoYXIiPT09diYmKGRbZl09YCRjaGFyJHtNfS5gKX1yZXR1cm4gZH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShNcihKcyksTXIoR3UpLE1y''@;'; put 'put ''KFNkKSl9fXN0YXRpY3t0aGlzLlx1MDI3NXByb3Y9YW4oe3Rva2VuOmMsZmFjdG9yeTpjLlx1MDI3NWZhY30pfX1yZXR1cm4gY30pKCk7Y29uc3QgdDZlPWM9PntsZXQgbD0oIjAiK2MuZ2V0VVRDSG91cnMoKSkuc2xpY2UoLTIpKyI6IjtyZXR1cm4gbD1sKygiMCIrYy5nZXRVVENNaW51dGVz''@;'; put 'put ''KCkpLnNsaWNlKC0yKSsiOiIsbCs9KCIwIitjLmdldFVUQ1NlY29uZHMoKSkuc2xpY2UoLTIpLGx9LEhlZT1jPT5jLmdldEZ1bGxZZWFyKCkrIi0iKygiMCIrKGMuZ2V0TW9udGgoKSsxKSkuc2xpY2UoLTIpKyItIisoIjAiK2MuZ2V0RGF0ZSgpKS5zbGljZSgtMiksTmVlPWM9PiEhL14tezAs''@;'; put 'put ''MX1cZCskLy50ZXN0KGMpLG42ZT1jPT4hIS9eXGQrXC5cZCskLy50ZXN0KGMpLFZlZT0oYyxsKT0+bmV3IEZpbGUoW2NdLGwse2xhc3RNb2RpZmllZDoobmV3IERhdGUpLmdldFRpbWUoKX0pO3ZhciBrdT1fKDYzNTc4KSxyNmU9Xyg5NDI0OCksaTZlPV8oODM4MzgpO2NsYXNzIG82ZXtjb25z''@;'; put 'put ''dHJ1Y3RvcihsKXt0aGlzLmxpY2VuY2VTdGF0ZT1sLmxpY2VuY2VTdGF0ZX1wYXJzZVNwcmVhZHNoZWV0RmlsZShsLGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBuZXcgUHJvbWlzZSgodixNKT0+e2NvbnN0IEQ9bC51cGxvYWRlcnx8bmV3IENlZTtpZihsLndvcmtib29rKXRoaXMucGFyc2VF''@;'; put 'put ''eGNlbEZpbGUobCxsLndvcmtib29rLEQsaCkudGhlbihaPT57dihaKX0pLmNhdGNoKFo9PntNKFopfSk7ZWxzZXtjb25zdCBuZT1sLmZpbGU7bC5lbmNvZGluZ3x8KGwuZW5jb2Rpbmc9IlVURi04IiksZCYmZChgTG9hZGluZyAke25lLm5hbWV9IGludG8gdGhlIGJyb3dzZXJgKTtsZXQgY2U9''@;'; put 'put ''bmUubmFtZS5zbGljZShuZS5uYW1lLmxhc3RJbmRleE9mKCIuIikrMSxuZS5uYW1lLmxhc3RJbmRleE9mKCIuIikrNCk7aWYoInhscyIhPT1jZS50b0xvd2VyQ2FzZSgpKXtpZigiY3N2Ij09PWNlLnRvTG93ZXJDYXNlKCkpcmV0dXJuIHRoaXMucGFyc2VDc3ZGaWxlKGwsRCxjZSkudGhlbihi''@;'; put 'put ''ZT0+dihiZSkpLmNhdGNoKGJlPT5NKGJlKSk7e2xldCBiZT0nSW52YWxpZCBmaWxlIHR5cGUgIjxiPicrbC5maWxlLm5hbWUrJzwvYj4iLiBQbGVhc2UgdXBsb2FkIGNzdiBvciBleGNlbCBmaWxlLic7cmV0dXJuIEQucXVldWUucG9wKCksTShiZSl9fXtsZXQgYmU9bmV3IEZpbGVSZWFkZXI7''@;'; put 'put ''YmUub25sb2FkPWZ1bmN0aW9uKCl7dmFyIEJlPWVlKGZ1bmN0aW9uKihxZSl7Y29uc3QgbnQ9eWllbGQgZi54c2x4U3RhcnRSZWFkaW5nKHFlLGEsbC5wYXNzd29yZCk7aWYoIW50KXJldHVybiBNKCJObyB3b3JrYm9vayBmb3VuZC4iKTtmLnBhcnNlRXhjZWxGaWxlKGwsbnQsRCxoKS50aGVu''@;'; put 'put ''KGx0PT57dihsdCl9KS5jYXRjaChsdD0+e00obHQpfSl9KTtyZXR1cm4gZnVuY3Rpb24ocWUpe3JldHVybiBCZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLGJlLnJlYWRBc0FycmF5QnVmZmVyKG5lKX19fSl9cGFyc2VFeGNlbEZpbGUobCxhLGQsaCl7cmV0dXJuIG5ldyBQcm9taXNlKChm''@;'; put 'put ''LHYpPT57bGV0IE09ITEsRD1bXTtjb25zdCBaPVsiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIiwuLi5sLmhlYWRlckFycmF5XSxuZT10aGlzLnNlYXJjaERhdGFJbkV4Y2VsKGEsbCk7bGV0IGNlPVtdO2lmKG5lLmZvdW5kPyhNPSEwLGNlPW5lLmZvdW5kLmFycmF5RGF0YSxuZS5m''@;'; put 'put ''b3VuZC5oZWFkZXJzLmluY2x1ZGVzKCJfX19fX2RlbGV0ZV9fdGhpc19fcmVjb3JkX19fX18iKXx8KGNlPWNlLm1hcChCZT0+KEJlLnVuc2hpZnQoe3Y6IiJ9KSxCZSkpKSxoJiZoKGBTaGVldDogJHtuZS5mb3VuZC5zaGVldE5hbWV9XG5SYW5nZTogJHtuZS5mb3VuZC5zdGFydEFkZHJlc3N9''@;'; put 'put ''OiR7bmUuZm91bmQuZW5kQWRkcmVzc31gKSk6RD1uZS5taXNzaW5nfHxbXSxELmxlbmd0aD4wKXtsZXQgQmU9RC5tYXAocWU9PmBTaGVldDogJHtxZS5zaGVldE5hbWV9LlxuTWlzc2luZyBjb2x1bW5zOiAke3FlLm1pc3NpbmdIZWFkZXJzLmpvaW4oIiwiKX1gKS5qb2luKCJcblxuIik7cmV0''@;'; put 'put ''dXJuIGQucXVldWUucG9wKCksdihCZSl9aWYoMD09PWNlLmxlbmd0aHx8MD09PWNlWzBdLmxlbmd0aCl7bGV0IEJlPSJObyByZWxldmFudCBkYXRhIGZvdW5kIGluIEZpbGUgISI7cmV0dXJuIGQucXVldWUucG9wKCksdihCZSl9aWYoKGwuZGF0ZVRpbWVIZWFkZXJzLmxlbmd0aD4wfHxsLmRh''@;'; put 'put ''dGVIZWFkZXJzLmxlbmd0aD4wfHxsLnRpbWVIZWFkZXJzLmxlbmd0aD4wKSYmKGNlPXRoaXMudXBkYXRlRGF0ZVRpbWVDb2xzKFosY2UsbCkpLGwueGxSdWxlcy5sZW5ndGg+MCYmKGNlPXRoaXMudXBkYXRlWExSdWxlQ29scyhaLGNlLGwpKSwhTSl7bGV0IEJlPSIiO3JldHVybiBCZT0wPT09''@;'; put 'put ''RC5sZW5ndGg/Ik5vIHJlbGV2YW50IGRhdGEgZm91bmQgaW4gRmlsZSAhIjpELm1hcChxZT0+YFNoZWV0OiAke3FlLnNoZWV0TmFtZX0uXG5NaXNzaW5nIGNvbHVtbnM6ICR7cWUubWlzc2luZ0hlYWRlcnMuam9pbigiLCIpfWApLmpvaW4oIlxuXG4iKSxkLnF1ZXVlLnBvcCgpLHYoQmUpfXts''@;'; put 'put ''LmhlYWRlclNob3c9WixjZT1jZS5tYXAoSnQ9Pkp0Lm1hcCh5bj0+Im4iPT09eW4udHx8eW4udz95bi52OiJzdHJpbmciPT10eXBlb2YgeW4udj95bi52LnRyaW0oKTp5bi52KSksY2U9Y2UubWFwKEp0PT5KdC5tYXAoKHluLENuKT0+eyF5biYmMCE9PXluJiYoeW49IiIpO2NvbnN0IHRuPWwu''@;'; put 'put ''aGVhZGVyU2hvd1tDbl07cmV0dXJuIm51bWVyaWMiPT09bC5kY1ZhbGlkYXRvcj8uZ2V0UnVsZSh0bik/LnR5cGUmJigwLCRnLmlzU3BlY2lhbE1pc3NpbmcpKHluKSYmIXluLmluY2x1ZGVzKCIuIikmJih5bj0iLiIreW4pLHlufSkpO2NvbnN0IEJlPWNlLnNsaWNlKDAsdGhpcy5saWNlbmNl''@;'; put 'put ''U3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQpO2xldCBsdCxxZT1rdS51dGlscy5qc29uX3RvX3NoZWV0KEJlLHtza2lwSGVhZGVyOiEwfSksbnQ9a3UudXRpbHMuc2hlZXRfdG9fY3N2KHFlKTtpZihudD1aLmpvaW4oIiwiKSsiXG4iK250LCJXTEFUSU4xIj09PWwuZW5jb2Rpbmcpe2xl''@;'; put 'put ''dCBKdD1yNmUuZGVjb2RlKGk2ZS5CdWZmZXIuZnJvbShudCksIkNQLTEyNTIiKTtsdD1uZXcgQmxvYihbSnRdLHt0eXBlOiJhcHBsaWNhdGlvbi9jc3YifSl9ZWxzZSBsdD1uZXcgQmxvYihbbnRdLHt0eXBlOiJhcHBsaWNhdGlvbi9jc3YifSk7bGV0IG10PVZlZShsdCxsLmZpbGUubmFtZSsi''@;'; put 'put ''LmNzdiIpO2QuYWRkVG9RdWV1ZShbbXRdKX1pZigwPT09Y2UubGVuZ3RoKXJldHVybiB2KGBUYWJsZSBpbiB0aGUgZmlsZSBpcyBlbXB0eS4gRGF0YSBmb3VuZCBvbiBzaGVldDogJHtuZS5mb3VuZD8uc2hlZXROYW1lfHwiIn1gKTtpZighbmUuZm91bmQpcmV0dXJuIHYoIk5vIHJlbGV2YW50''@;'; put 'put ''IGRhdGEgZm91bmQuICdmb3VuZCcgb2JqZWN0IGlzIGVtcHR5LCB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkLiIpO2NvbnN0IGJlPW5lLmZvdW5kLnN0YXJ0QWRkcmVzc3x8IiIsRWU9bmUuZm91bmQuZW5kQWRkcmVzc3x8IiI7cmV0dXJuIGYoe3VwbG9hZGVyOmQsZGF0YTpjZSxyYW5nZVNo''@;'; put 'put ''ZWV0UmVzOntmb3VuZDohIW5lLmZvdW5kLHNoZWV0TmFtZTpuZS5mb3VuZC5zaGVldE5hbWUscmFuZ2VTdGFydEFkZHJlc3M6YmUscmFuZ2VFbmRBZGRyZXNzOkVlLHJhbmdlQWRkcmVzczpgJHtiZX06JHtFZX1gLG1pc3NpbmdIZWFkZXJzOkR9LGhlYWRlclNob3c6bC5oZWFkZXJTaG93fSl9''@;'; put 'put ''KX1wYXJzZUNzdkZpbGUobCxhLGQpe3JldHVybiBuZXcgUHJvbWlzZSgoaCxmKT0+e2lmKHRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0IT09MS8wKXJldHVybiBhLnF1ZXVlLnBvcCgpLGYoIkV4Y2VsIGZpbGVzIG9ubHkuIFRvIHVubG9jayBDU1YgdXBsb2Fkcywg''@;'; put 'put ''cGxlYXNlIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpO2lmKCJXTEFUSU4xIiE9PWwuZW5jb2RpbmcpcmV0dXJuIGgoe3VwbG9hZGVyOmF9KTt7bGV0IHY9bmV3IEZpbGVSZWFkZXI7di5vbmxvYWQ9RD0+e2xldCBaPXI2ZS5kZWNvZGUoaTZlLkJ1ZmZlci5mcm9tKEQudGFy''@;'; put 'put ''Z2V0LnJlc3VsdCksIkNQLTEyNTIiKSxuZT1uZXcgQmxvYihbWl0se3R5cGU6ZH0pLGNlPVZlZShuZSxsLmZpbGUubmFtZSk7cmV0dXJuIGEucXVldWUucG9wKCksYS5hZGRUb1F1ZXVlKFtjZV0pLGgoe3VwbG9hZGVyOmF9KX0sdi5yZWFkQXNBcnJheUJ1ZmZlcihsLmZpbGUpfX0pfWJ5dGVz''@;'; put 'put ''VG9NQihsKXtyZXR1cm4gcGFyc2VGbG9hdCgobC8xMDQ4NTc2KS50b0ZpeGVkKDIpKX14c2x4U3RhcnRSZWFkaW5nKGwsYSxkKXt2YXIgaD10aGlzO3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbigpe3ZhciBmPWVlKGZ1bmN0aW9uKih2LE0pe2NvbnN0IEQ9aC50b0JzdHIobC50YXJnZXQu''@;'; put 'put ''cmVzdWx0KTtsZXQgWixuZT0hMTtjb25zdCBjZT17dHlwZToiYmluYXJ5IixjZWxsRGF0ZXM6ITEsY2VsbEZvcm11bGE6ITAsY2VsbFN0eWxlczohMCxjZWxsTkY6ITEsY2VsbFRleHQ6ITEscGFzc3dvcmQ6ZH07dHJ5e1o9eWllbGQgaC54bHN4UmVhZChELHsuLi5jZX0pfWNhdGNoKGJlKXtp''@;'; put 'put ''ZighYmUubWVzc2FnZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCJwYXNzd29yZCIpKXJldHVybiBNKCJFcnJvciByZWFkaW5nIHRoZSBmaWxlIik7e25lPSEwO2xldCBFZT0hMTtmb3IoO25lOyl7Y29uc3QgQmU9eWllbGQgYSh7ZXJyb3I6RWV9KTtpZihCZSl0cnl7Wj15aWVsZCBoLnhsc3hS''@;'; put 'put ''ZWFkKEQsey4uLmNlLHBhc3N3b3JkOkJlfSksbmU9ITEsRWU9ITF9Y2F0Y2gocWUpe0VlPSEwLHFlLm1lc3NhZ2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygicGFzc3dvcmQiKXx8KG5lPSExKX1lbHNlIG5lPSExfX19cmV0dXJuIFo/dihaKTpNKCJGYWlsZWQgdG8gcGFyc2UgYSB3b3JrYm9v''@;'; put 'put ''ayIpfSk7cmV0dXJuIGZ1bmN0aW9uKHYsTSl7cmV0dXJuIGYuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSl9eGxzeFJlYWQobCxhKXtyZXR1cm4gbmV3IFByb21pc2UoKGQsaCk9PntpZihhJiZhLnBhc3N3b3JkKXJldHVybiBjb25zb2xlLmluZm8oIk5vdCB1c2luZyB3b3JrZXIgdG8gcGFy''@;'; put 'put ''c2UgdGhlIFhMU1ggLSBoYXMgcGFzc3dvcmQiKSxkKGt1LnJlYWQobCxhKSk7aWYodHlwZW9mIFdvcmtlcj4idSIpcmV0dXJuIGNvbnNvbGUuaW5mbygiTm90IHVzaW5nIHdvcmtlciB0byBwYXJzZSB0aGUgWExTWCAtIG5vIFdvcmtlciBhdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudCIp''@;'; put 'put ''LGQoa3UucmVhZChsLGEpKTtjb25zb2xlLmluZm8oIlVzaW5nIHdvcmtlciB0byBwYXJzZSB0aGUgWExTWCIpO2NvbnN0IGY9bmV3IFdvcmtlcihfLnR1KG5ldyBVUkwoXy5wK18udSg0MTEpLF8uYikpKTtmLm9ubWVzc2FnZT0oe2RhdGE6dn0pPT57InJlYWRpbmdfZW5kIj09PXYuZXZlbnQ/''@;'; put 'put ''ZCh2Lndvcmtib29rKTp2LmVycm9yP2godi5lcnJvcik6KGNvbnNvbGUuaW5mbygiV29ya2VyIGZhaWxlZCB0byBwYXJzZSB0aGUgWExTWCAtIGZhbGxiYWNrIHRvIG5vbiB3b3JrZXIgcGFyc2luZyIpLGQoa3UucmVhZCh2LGEpKSl9LGYucG9zdE1lc3NhZ2Uoe2RhdGE6bCxvcHRzOmF9KSxz''@;'; put 'put ''ZXRUaW1lb3V0KCgpPT5kKGt1LnJlYWQobCxhKSksNmU1KX0pfXNlYXJjaERhdGFJbkV4Y2VsKGwsYSl7bGV0IGQsaCxmLHYsTT0iIixEPVtdLG5lPVsiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIiwuLi5hLmhlYWRlckFycmF5XS5tYXAoYmU9PmJlLnRvTG93ZXJDYXNlKCkpLGNl''@;'; put 'put ''PW5lLnJlZHVjZSgoYmUsRWUpPT4oYmVbRWVdPS0xLGJlKSx7fSk7Zm9yKGxldCBiZSBvZiBsLlNoZWV0TmFtZXMpe2Q9dm9pZCAwLGg9dm9pZCAwLGNlPW5lLnJlZHVjZSgodG4seG4pPT4odG5beG5dPS0xLHRuKSx7fSk7bGV0IEVlPVtdO009YmU7Y29uc3QgQmU9bC5TaGVldHNbTV07aWYo''@;'; put 'put ''T2JqZWN0LmtleXMoQmUpLmZvckVhY2godG49Pntjb25zdCB4bj1CZVt0bl0udjtpZih4biYmInN0cmluZyI9PXR5cGVvZiB4bil7Y29uc3QgUW49eG4udG9Mb3dlckNhc2UoKTtuZS5pbmRleE9mKFFuKT4tMSYmKGNlW1FuXT10bixkfHwoZD10biksaD10bil9fSksLTE9PT1jZS5fX19fX2Rl''@;'; put 'put ''bGV0ZV9fdGhpc19fcmVjb3JkX19fX18mJmRlbGV0ZSBjZS5fX19fX2RlbGV0ZV9fdGhpc19fcmVjb3JkX19fX18sRWU9T2JqZWN0LmtleXMoY2UpLmZpbHRlcih0bj0+LTE9PT1jZVt0bl0pLEVlLmxlbmd0aD4wKXtELnB1c2goe3NoZWV0TmFtZTpNLG1pc3NpbmdIZWFkZXJzOkVlLm1hcCh0''@;'; put 'put ''bj0+dG4udG9VcHBlckNhc2UoKSl9KTtjb250aW51ZX1jb25zdCBxZT1PYmplY3Qua2V5cyhjZSk7bGV0IG10LG50PVtdLGx0PVtdO3FlLnNvcnQoKHRuLHhuKT0+e2NvbnN0IFFuPWEuaGVhZGVyUGtzLmluY2x1ZGVzKHRuKT8xOjA7cmV0dXJuKGEuaGVhZGVyUGtzLmluY2x1ZGVzKHhuKT8x''@;'; put 'put ''OjApLVFufSkuZm9yRWFjaCh0bj0+e2NvbnN0IHhuPWNlW3RuXSxRbj14bi5tYXRjaCgvXEQrLykseWk9eG4ubWF0Y2goL1xkKy8pLHlyPShRbj9RblswXTotMSl8fC0xLGlpPXBhcnNlSW50KCh5aT95aVswXTotMSl8fC0xKSsxO2xldCBfaT0wO2lmKG10KWZvcihsZXQgUG49aWk7UG48PW10''@;'; put 'put ''O1BuKyspe2NvbnN0IFhuPUJlW2Ake3lyfSR7UG59YF07aWYoYS5oZWFkZXJQa3MuaW5jbHVkZXModG4pJiYodm9pZCAwPT09WG58fHZvaWQgMD09PVhuLnYpKXttdD1QbjticmVha31udFtfaV18fG50LnB1c2goe30pLFhuJiYobnRbX2ldW3RuXT0ic3RyaW5nIj09dHlwZW9mIFhuLnY/WG4u''@;'; put 'put ''di50cmltKCk6WG4udiksbHRbX2ldfHxsdC5wdXNoKFtdKSxsdFtfaV0ucHVzaChYbj8/e3Y6IiJ9KSxfaSsrfWVsc2V7bGV0IFBuPWlpO2Zvcig7dm9pZCAwPT09bXQ7KXtjb25zdCBqcj1gJHt5cn0ke1BufWAsWG49QmVbanJdO2lmKCFYbnx8dm9pZCAwPT09WG4udil7bXQ9UG4tMTticmVh''@;'; put 'put ''a31udFtfaV18fG50LnB1c2goe30pLG50W19pXVt0bl09Im4iPT09QmVbanJdLnQ/QmVbanJdLnY6QmVbanJdLnc/QmVbanJdLnc6InN0cmluZyI9PXR5cGVvZiBCZVtqcl0udj9CZVtqcl0udi50cmltKCk6QmVbanJdLnYsbHRbX2ldfHxsdC5wdXNoKFtdKSxsdFtfaV0ucHVzaChYbj8/e3Y6''@;'; put 'put ''IiJ9KSxQbisrLF9pKyt9fWlmKGQmJmgpe2NvbnN0IFBuPWgubWF0Y2goL1xEKy8pO2Y9ZCx2PWAke1BufSR7bXR9YH19KTtjb25zdCB5bj1bXTtsZXQgQ247cmV0dXJuIG50LmZvckVhY2goKHRuLHhuKT0+e2xldCBRbj0hMTthLmhlYWRlclBrcy5mb3JFYWNoKHlpPT57dm9pZCAwPT09dG5b''@;'; put 'put ''eWkudG9Mb3dlckNhc2UoKV0mJihRbj0hMCl9KSxRbiYmKHluLnB1c2goeG4pLENufHwoQ249eG4pKX0pLENuPyhudC5zcGxpY2UoQ24sMS8wKSxsdC5zcGxpY2UoQ24sMS8wKSk6eW4uc29ydCgodG4seG4pPT54bi10bikuZm9yRWFjaCh0bj0+e250LnNwbGljZSh0biwxKSxsdC5zcGxpY2Uo''@;'; put 'put ''dG4sMSl9KSxsdC5sZW5ndGg/e2ZvdW5kOntkYXRhOm50LGFycmF5RGF0YTpsdCxzaGVldE5hbWU6TSxzdGFydEFkZHJlc3M6ZixlbmRBZGRyZXNzOnYsaGVhZGVyczpxZX19Ont9fXJldHVybnttaXNzaW5nOkR9fXVwZGF0ZURhdGVUaW1lQ29scyhsLGEsZCl7aWYoZC5kYXRlSGVhZGVycy5s''@;'; put 'put ''ZW5ndGg+MCl7Y29uc3QgaD1bXTtkLmRhdGVIZWFkZXJzLmZvckVhY2goZj0+ey0xIT09bC5pbmRleE9mKGYpJiZoLnB1c2gobC5pbmRleE9mKGYpKX0pLGEuZm9yRWFjaChmPT57aC5mb3JFYWNoKHY9Pntjb25zdCBNPWZbdl07aWYoTmVlKE0udikpe2NvbnN0IEQ9UmVlKE51bWJlcihNLnYp''@;'; put 'put ''KTtNLnY9RC5nZXRGdWxsWWVhcigpKyItIisoIjAiKyhELmdldE1vbnRoKCkrMSkpLnNsaWNlKC0yKSsiLSIrKCIwIitELmdldERhdGUoKSkuc2xpY2UoLTIpfWVsc2UgaWYoTSYmTS52JiYtMT09PU0udi50b1N0cmluZygpLmluZGV4T2YoIjoiKSl7Y29uc3QgRD1uZXcgRGF0ZShNLnYpOyJJ''@;'; put 'put ''bnZhbGlkIERhdGUiIT09RC50b1VUQ1N0cmluZygpJiYoTS52PUhlZShEKSl9Zlt2XT1NfSl9KX1pZihkLnRpbWVIZWFkZXJzLmxlbmd0aD4wKXtsZXQgaD1bXTtkLnRpbWVIZWFkZXJzLmZvckVhY2goZj0+ey0xIT09bC5pbmRleE9mKGYpJiZoLnB1c2gobC5pbmRleE9mKGYpKX0pLGEuZm9y''@;'; put 'put ''RWFjaChmPT57aC5mb3JFYWNoKHY9Pntjb25zdCBNPWZbdl07aWYoTmVlKE0udil8fG42ZShNLnYpfHxNLnYuaW5jbHVkZXMoIkUtIikpe2NvbnN0IEQ9UmVlKE51bWJlcihNLnYpKTtNLnY9dDZlKEQpfWZbdl09TX0pfSl9aWYoZC5kYXRlVGltZUhlYWRlcnMubGVuZ3RoPjApe2xldCBoPVtd''@;'; put 'put ''O2QuZGF0ZVRpbWVIZWFkZXJzLmZvckVhY2goZj0+ey0xIT09bC5pbmRleE9mKGYpJiZoLnB1c2gobC5pbmRleE9mKGYpKX0pLGEuZm9yRWFjaChmPT57aC5mb3JFYWNoKHY9Pntjb25zdCBNPWZbdl07aWYoTmVlKE0udil8fG42ZShNLnYpKXtjb25zdCBEPVJlZShOdW1iZXIoTS52KSk7TS52''@;'; put 'put ''PUhlZShEKSsiICIrdDZlKEQpfWVsc2V7aWYoLTE9PT1NLnYuaW5kZXhPZigiICIpJiYtMSE9PU0udi5pbmRleE9mKCI6Iikpe2xldCBaPU0udi5zdWJzdHJpbmcoMCxNLnYuaW5kZXhPZigiOiIpKTtaPVorIiAiK00udi5zdWJzdHJpbmcoTS52LmluZGV4T2YoIjoiKSsxKSxNLnY9Wn1jb25z''@;'; put 'put ''dCBEPW5ldyBEYXRlKE0udik7IkludmFsaWQgRGF0ZSIhPT1ELnRvVVRDU3RyaW5nKCkmJihNLnY9SGVlKEQpKyIgIisoYz0+e2xldCBsPSgiMCIrYy5nZXRIb3VycygpKS5zbGljZSgtMikrIjoiO3JldHVybiBsPWwrKCIwIitjLmdldE1pbnV0ZXMoKSkuc2xpY2UoLTIpKyI6IixsKz0oIjAi''@;'; put 'put ''K2MuZ2V0U2Vjb25kcygpKS5zbGljZSgtMiksbH0pKEQpKX1mW3ZdPU19KX0pfXJldHVybiBhfXVwZGF0ZVhMUnVsZUNvbHMobCxhLGQpe2lmKGQueGxSdWxlcy5sZW5ndGg+MCl7Y29uc3QgaD1bXTtkLnhsUnVsZXMuZm9yRWFjaChmPT57LTEhPT1sLmluZGV4T2YoZi5YTF9DT0xVTU4pJiYo''@;'; put 'put ''Zi5pbmRleD1sLmluZGV4T2YoZi5YTF9DT0xVTU4pLGgucHVzaChmKSl9KSxhLmZvckVhY2goZj0+e2guZm9yRWFjaCh2PT57Y29uc3QgTT1mW3YuaW5kZXhdOyJGT1JNVUxBIj09PXYuWExfUlVMRSYmImYiaW4gTSYmKCJuIj09PU0udD9NLnY9Ij0iK00uZjpNLnc9Ij0iK00uZiksZlt2XT1N''@;'; put 'put ''fSl9KX1yZXR1cm4gYX10b0JzdHIobCl7bGV0IGE9bmV3IFVpbnQ4QXJyYXkobCksZD0iIixoPWEuYnl0ZUxlbmd0aDtmb3IobGV0IGY9MDtmPGg7ZisrKWQrPVN0cmluZy5mcm9tQ2hhckNvZGUoYVtmXSk7cmV0dXJuIGR9fWxldCBhNmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQs''@;'; put 'put ''aCl7dGhpcy5leGNlbFBhc3N3b3JkTW9kYWxTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLmxpY2VuY2VTZXJ2aWNlPWgsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5wcm9tcHRFeGNlbFBhc3N3b3JkPWY9Pm5ldyBQcm9t''@;'; put 'put ''aXNlKCh2LE0pPT57dGhpcy5leGNlbFBhc3N3b3JkTW9kYWxTZXJ2aWNlLm9wZW4oZikuc3Vic2NyaWJlKEQ9Pnt2KEQucGFzc3dvcmQpfSl9KX1wYXJzZUV4Y2VsRmlsZShhLGQsaCl7cmV0dXJuIG5ldyBvNmUoe2xpY2VuY2VTdGF0ZTp0aGlzLmxpY2VuY2VTdGF0ZX0pLnBhcnNlU3ByZWFk''@;'; put 'put ''c2hlZXRGaWxlKGEsdGhpcy5wcm9tcHRFeGNlbFBhc3N3b3JkLGQsaCl9eGxzeFJlYWRGaWxlKGEpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2NvbnN0IGY9bmV3IG82ZSh7bGljZW5jZVN0YXRlOnRoaXMubGljZW5jZVN0YXRlfSk7bGV0IHY9bmV3IEZpbGVSZWFkZXI7di5vbmxvYWQ9''@;'; put 'put ''TT0+e2YueHNseFN0YXJ0UmVhZGluZyhNLHRoaXMucHJvbXB0RXhjZWxQYXNzd29yZCkudGhlbihEPT57ZChEKX0pLmNhdGNoKEQ9PntoKEQpfSl9LHYucmVhZEFzQXJyYXlCdWZmZXIoYSl9KX1wYXJzZUV4Y2VsU2hlZXROYW1lcyhhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbioo''@;'; put 'put ''KXtyZXR1cm4gbmV3IFByb21pc2UoKGgsZik9Pntjb25zdCB2PW5ldyBGaWxlUmVhZGVyO2lmKCFhKXJldHVybiBjb25zb2xlLndhcm4oImZpbGUgaXMgbWlzc2luZyIpLGgoe3NoZWV0TmFtZXM6W119KTt2Lm9ubG9hZD1mdW5jdGlvbigpe3ZhciBNPWVlKGZ1bmN0aW9uKihEKXtpZighRD8u''@;'; put 'put ''dGFyZ2V0KXJldHVybiB2b2lkIGNvbnNvbGUud2FybigiRmlsZSByZWFkZXIgZXZlbnQudGFyZ2V0IGlzIG1pc3NpbmciKTtsZXQgWixjZSxuZT0hMTtjb25zdCBiZT1ELnRhcmdldC5yZXN1bHQ7dHJ5e1o9a3UucmVhZChiZSx7Ym9va1NoZWV0czohMCx0eXBlOiJiaW5hcnkifSl9Y2F0Y2go''@;'; put 'put ''RWUpe2lmKCFFZS5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoInBhc3N3b3JkIikpcmV0dXJuIGYoIkVycm9yIHJlYWRpbmcgdGhlIGZpbGUiKTt7bmU9ITA7bGV0IEJlPSExO2Zvcig7bmU7KXtpZihjZT15aWVsZCBkLnByb21wdEV4Y2VsUGFzc3dvcmQoe2Vycm9yOkJlfSksIWNl''@;'; put 'put ''KXJldHVybiBuZT0hMSxmKCJObyBwYXNzd29yZCBwcm92aWRlZCIpO3RyeXtaPWt1LnJlYWQoYmUse2Jvb2tTaGVldHM6ITAsdHlwZToiYmluYXJ5IixwYXNzd29yZDpjZX0pLG5lPSExLEJlPSExfWNhdGNoKHFlKXtCZT0hMCxxZS5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoInBh''@;'; put 'put ''c3N3b3JkIil8fChuZT0hMSl9aWYoIWNlKXJldHVybiBmKCJJbnZhbGlkIHBhc3N3b3JkLCBmYWlsZWQgdG8gZGVjcnlwdCB0aGUgZmlsZSIpfX19aWYoIVopcmV0dXJuIGYoIkVycm9yIHBhcnNpbmcgdGhlIHdvcmtib29rIik7dHJ5e3JldHVybiBoKHtzaGVldE5hbWVzOlouU2hlZXROYW1l''@;'; put 'put ''cyxwYXNzd29yZDpjZX0pfWNhdGNoKEVlKXtjb25zb2xlLmVycm9yKEVlKX19KTtyZXR1cm4gZnVuY3Rpb24oRCl7cmV0dXJuIE0uYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSx2Lm9uZXJyb3I9ZnVuY3Rpb24oTSl7Y29uc29sZS5sb2coTSl9LHYucmVhZEFzQmluYXJ5U3RyaW5nKGEpfSl9''@;'; put 'put ''KSgpfWJ5dGVzVG9NQihhKXtyZXR1cm4gcGFyc2VGbG9hdCgoYS8xMDQ4NTc2KS50b0ZpeGVkKDIpKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShNcihKZGUpLE1yKHBjKSxNcihkMSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tl''@;'; put 'put ''bjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2NvbnN0IHo5PXZvaWQgMCxPNXQ9WyJlbi1HQiIsW1siYSIsInAiXSxbImFtIiwicG0iXSx6OV0sW1siYW0iLCJwbSJdLHo5LHo5XSxbWyJTIiwiTSIsIlQiLCJXIiwiVCIsIkYiLCJTIl0s''@;'; put 'put ''WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sWyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdXSx6OSxbWyJKIiwi''@;'; put 'put ''RiIsIk0iLCJBIiwiTSIsIkoiLCJKIiwiQSIsIlMiLCJPIiwiTiIsIkQiXSxbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcHQiLCJPY3QiLCJOb3YiLCJEZWMiXSxbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJK''@;'; put 'put ''dW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl1dLHo5LFtbIkIiLCJBIl0sWyJCQyIsIkFEIl0sWyJCZWZvcmUgQ2hyaXN0IiwiQW5ubyBEb21pbmkiXV0sMSxbNiwwXSxbImRkL01NL3kiLCJkIE1NTSB5IiwiZCBNTU1NIHki''@;'; put 'put ''LCJFRUVFLCBkIE1NTU0geSJdLFsiSEg6bW0iLCJISDptbTpzcyIsIkhIOm1tOnNzIHoiLCJISDptbTpzcyB6enp6Il0sWyJ7MX0sIHswfSIsejksInsxfSAnYXQnIHswfSIsejldLFsiLiIsIiwiLCI7IiwiJSIsIisiLCItIiwiRSIsIlx4ZDciLCJcdTIwMzAiLCJcdTIyMWUiLCJOYU4iLCI6''@;'; put 'put ''Il0sWyIjLCMjMC4jIyMiLCIjLCMjMCUiLCJceGE0IywjIzAuMDAiLCIjRTAiXSwiR0JQIiwiXHhhMyIsIkJyaXRpc2ggUG91bmQiLHtKUFk6WyJKUFx4YTUiLCJceGE1Il0sVVNEOlsiVVMkIiwiJCJdfSwibHRyIixmdW5jdGlvbiBMNXQoYyl7Y29uc3QgYT1NYXRoLmZsb29yKE1hdGguYWJz''@;'; put 'put ''KGMpKSxkPWMudG9TdHJpbmcoKS5yZXBsYWNlKC9eW14uXSpcLj8vLCIiKS5sZW5ndGg7cmV0dXJuIDE9PT1hJiYwPT09ZD8xOjV9XSxQNXQ9WyJpbnB1dCJdLEY1dD1bIioiXSxINXQ9KGMsbCk9Pih7IndpZHRoLnB4IjpjLCJtYXgtaGVpZ2h0LnB4IjpsfSk7ZnVuY3Rpb24gTjV0KGMsbCl7''@;'; put 'put ''aWYoMSZjJiYoZGUoMCwib3B0aW9uIiw3KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLFJyKCIgIixhLmxvYWRpbmdNb3JlPyJMb2FkaW5nLi4uIjoiTE9BRCBNT1JFIiwiICIpfX1sZXQgczZlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5jZHI9YSx0aGlz''@;'; put 'put ''LmlucHV0SWQ9IiIsdGhpcy5wbGFjZWhvbGRlcj0iIix0aGlzLnZhbHVlPSIiLHRoaXMuZGlzYWJsZWQ9ITEsdGhpcy50eXBlPSJ0ZXh0Iix0aGlzLmF1dG9jb21wbGV0ZT0ib2ZmIix0aGlzLnRhYmluZGV4PSIiLHRoaXMuZW1pdE9ubHlTZWxlY3RlZD0hMSx0aGlzLmVuYWJsZUxvYWRNb3Jl''@;'; put 'put ''PSExLHRoaXMub25JbnB1dEtleWRvd249bmV3IHFyLHRoaXMub25JbnB1dENoYW5nZT1uZXcgcXIsdGhpcy52YWx1ZUNoYW5nZT1uZXcgcXIsdGhpcy5vbkxvYWRpbmdNb3JlPW5ldyBxcix0aGlzLmRhdGFsaXN0T3Blbj0hMSx0aGlzLmFmdGVyT3BlbkxvY2tEZWxheT0xNTAsdGhpcy5hZnRl''@;'; put 'put ''ck9wZW5Mb2NrPSExLHRoaXMuaW5wdXRGb2N1c2VkPSExLHRoaXMuaW5wdXRDbGllbnRSZWN0PXt9LHRoaXMucHJldmVudERhdGFsaXN0Q2xvc2U9ITEsdGhpcy5sb2FkaW5nTW9yZT0hMX1uZ09uSW5pdCgpe31uZ0FmdGVyVmlld0luaXQoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5jYWxjdWxh''@;'; put 'put ''dGVJbnB1dFBvc2l0aW9uKCl9LDUwMCl9b25JbnB1dEZpcmVkKGEsZCxoKXt0aGlzLm9wZW5EYXRhbGlzdCgiY2xpY2siIT09aCksdGhpcy51bnNlbGVjdEFsbE9wdGlvbnMoKSx0aGlzLmZpbHRlck9wdGlvbnNMaXN0KCksKCF0aGlzLmVtaXRPbmx5U2VsZWN0ZWR8fGQpJiYodGhpcy5vbklu''@;'; put 'put ''cHV0Q2hhbmdlLmVtaXQoe3RhcmdldDp7dmFsdWU6dGhpcy52YWx1ZX19KSx0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodGhpcy52YWx1ZSkpfW9uSW5wdXRDbGljayhhKXt0aGlzLm9wZW5EYXRhbGlzdCgpfW9wZW5EYXRhbGlzdChhPSEwKXt0aGlzLmRhdGFsaXN0T3Blbj0hMCxhJiYodGhpcy5h''@;'; put 'put ''ZnRlck9wZW5Mb2NrPSEwLHRoaXMuYWZ0ZXJPcGVuTG9ja0RlbGF5VGltZW91dD1zZXRUaW1lb3V0KCgpPT57dGhpcy5hZnRlck9wZW5Mb2NrPSExfSx0aGlzLmFmdGVyT3BlbkxvY2tEZWxheSkpfWNsb3NlRGF0YWxpc3QoKXtjbGVhclRpbWVvdXQodGhpcy5hZnRlck9wZW5Mb2NrRGVsYXlU''@;'; put 'put ''aW1lb3V0KSx0aGlzLmFmdGVyT3BlbkxvY2s9ITEsdGhpcy5kYXRhbGlzdE9wZW49ITF9cmVzZXREYXRhbGlzdEZpbHRlcigpe3RoaXMuZmlsdGVyT3B0aW9uc0xpc3QoITApfW9uSW5wdXRGb2N1c2luKGEpe3RoaXMuaW5wdXRGb2N1c2VkPSEwfW9uSW5wdXRGb2N1c291dChhKXt0aGlzLmlu''@;'; put 'put ''cHV0Rm9jdXNlZD0hMSx0aGlzLnNldFRvQ2xvc2VEYXRhbGlzdCgpfW9uSW5wdXRNb3VzZWVudGVyKGEpe3RoaXMuaW5wdXRDbGllbnRSZWN0LndpZHRofHx0aGlzLmNhbGN1bGF0ZUlucHV0UG9zaXRpb24oKX1maWx0ZXJPcHRpb25zTGlzdChhKXtjb25zdCBkPWRvY3VtZW50LnF1ZXJ5U2Vs''@;'; put 'put ''ZWN0b3JBbGwoYCNkYXRhbGlzdF8ke3RoaXMuaW5wdXRJZH0gb3B0aW9uYCk7Zm9yKGxldCBoPTA7aDxkLmxlbmd0aDtoKyspe2NvbnN0IGY9ZFtoXTtpZigwPT09dGhpcy52YWx1ZS5sZW5ndGgpe2YuY2xhc3NMaXN0LnJlbW92ZSgiaGlkZGVuIik7Y29udGludWV9aWYoYSl7Zi5jbGFzc0xp''@;'; put 'put ''c3QucmVtb3ZlKCJoaWRkZW4iKTtjb250aW51ZX1jb25zdCB2PWYuaW5uZXJUZXh0fHwiIixNPWYudmFsdWV8fCIiOyh2K00pPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRoaXMudmFsdWUudG9Mb3dlckNhc2UoKSk/Zi5jbGFzc0xpc3QucmVtb3ZlKCJoaWRkZW4iKTpmLmNsYXNzTGlzdC5h''@;'; put 'put ''ZGQoImhpZGRlbiIpfX1zZXRUb0Nsb3NlRGF0YWxpc3QoKXt0aGlzLmRhdGFsaXN0Q2xvc2VUaW1lb3V0PXNldFRpbWVvdXQoKCk9Pnt0aGlzLnByZXZlbnREYXRhbGlzdENsb3NlfHx0aGlzLmFmdGVyT3BlbkxvY2t8fCh0aGlzLmNsb3NlRGF0YWxpc3QoKSx0aGlzLnVuc2VsZWN0QWxsT3B0''@;'; put 'put ''aW9ucygpLHRoaXMucmVzZXREYXRhbGlzdEZpbHRlcigpKX0sMTAwKX1jYWxjdWxhdGVJbnB1dFBvc2l0aW9uKCl7Y29uc3QgZD10aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtkLndpZHRoPjAmJmQuaGVpZ2h0PjAmJih0aGlzLmlucHV0''@;'; put 'put ''Q2xpZW50UmVjdD17d2lkdGg6ZC53aWR0aCxib3R0b206ZC5ib3R0b219KSx0aGlzLmlubmVySGVpZ2h0PXdpbmRvdy5pbm5lckhlaWdodH1vbkRhdGFMaXN0TW91c2VFbnRlcihhKXt0aGlzLnByZXZlbnREYXRhbGlzdENsb3NlPSEwfW9uRGF0YUxpc3RNb3VzZUxlYXZlKGEpe3RoaXMucHJl''@;'; put 'put ''dmVudERhdGFsaXN0Q2xvc2U9ITEsdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpfW9uRGF0YUxpc3RTY3JvbGwoYSl7dGhpcy5zZXRUb0Nsb3NlRGF0YWxpc3QoKX1vbkRhdGFMaXN0Q2xpY2soYSl7Y29uc3QgZD1hLnRhcmdldDsibG9hZC1tb3JlIiE9PWQuZGF0YXNl''@;'; put 'put ''dD8udHlwZT8iT1BUSU9OIiE9PWQudGFnTmFtZXx8dGhpcy5zZXRPcHRpb25WYWx1ZShkLmlubmVyVGV4dCxkLnZhbHVlKTp0aGlzLmxvYWRNb3JlKCl9bG9hZE1vcmUoKXt0aGlzLm9uTG9hZGluZ01vcmUuZW1pdCh7bG9hZE1vcmVGaW5pc2hlZDphPT57dGhpcy5sb2FkaW5nTW9yZT0hMSx0''@;'; put 'put ''aGlzLmVuYWJsZUxvYWRNb3JlPWF9fSksdGhpcy5sb2FkaW5nTW9yZT0hMH1zZXRPcHRpb25WYWx1ZShhLGQpeyhhfHxkKSYmKGR8fChkPWEpKSxkJiYodGhpcy5wcmV2ZW50RGF0YWxpc3RDbG9zZT0hMSx0aGlzLnZhbHVlPWQsdGhpcy5vbklucHV0RmlyZWQobnVsbCwhMCwiY2xpY2siKSx0''@;'; put 'put ''aGlzLnNldFRvQ2xvc2VEYXRhbGlzdCgpKX1vbk1haW5LZXlkb3duKGEpe3N3aXRjaChhLmtleSl7Y2FzZSJBcnJvd1VwIjp0aGlzLmdldE9wdGlvbnNNb3ZlRm9jdXMoInVwIik7YnJlYWs7Y2FzZSJBcnJvd0Rvd24iOnRoaXMuZ2V0T3B0aW9uc01vdmVGb2N1cygiZG93biIpO2JyZWFrO2Nh''@;'; put 'put ''c2UiRW50ZXIiOnRoaXMuc2VsZWN0Rm9jdXNlZE9wdGlvbigpfX1vbklucHV0S2V5dXAoYSl7cmV0dXJuIXRoaXMuZGF0YWxpc3RPcGVufHwoIkVzY2FwZSI9PT1hLmtleT8oYS5zdG9wUHJvcGFnYXRpb24oKSxhLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpLHRoaXMuc2V0VG9DbG9zZURh''@;'; put 'put ''dGFsaXN0KCksITEpOnZvaWQgMCl9dW5zZWxlY3RBbGxPcHRpb25zKCl7Y29uc3QgYT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAjZGF0YWxpc3RfJHt0aGlzLmlucHV0SWR9IG9wdGlvbmApO2ZvcihsZXQgZD0wO2Q8YS5sZW5ndGg7ZCsrKWFbZF0uY2xhc3NMaXN0LnJlbW92ZSgiZm9j''@;'; put 'put ''dXNlZCIpfXNlbGVjdEZvY3VzZWRPcHRpb24oKXtjb25zdCBhPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCNkYXRhbGlzdF8ke3RoaXMuaW5wdXRJZH0gb3B0aW9uLmZvY3VzZWRgKTthJiZ0aGlzLm9uRGF0YUxpc3RDbGljayh7dGFyZ2V0OmF9KSx0aGlzLnNldFRvQ2xvc2VEYXRhbGlzdCgp''@;'; put 'put ''fWdldE9wdGlvbnNNb3ZlRm9jdXMoYSl7Y29uc3QgZD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAjZGF0YWxpc3RfJHt0aGlzLmlucHV0SWR9IG9wdGlvbjpub3QoLmhpZGRlbilgKTtsZXQgaD0wO2ZvcihsZXQgZj0wO2Y8ZC5sZW5ndGg7ZisrKXtjb25zdCB2PWRbZl07aWYodi5jbGFz''@;'; put 'put ''c0xpc3QuY29udGFpbnMoImZvY3VzZWQiKSl7aD0iZG93biI9PT1hP2YrMTpmLTEsaDwwJiYoaD1kLmxlbmd0aC0xKSxoPmQubGVuZ3RoLTEmJihoPTApLHYuY2xhc3NMaXN0LnJlbW92ZSgiZm9jdXNlZCIpO2JyZWFrfX1kW2hdLmNsYXNzTGlzdC5hZGQoImZvY3VzZWQiKX1vblJlc2l6ZShh''@;'; put 'put ''KXt0aGlzLmNhbGN1bGF0ZUlucHV0UG9zaXRpb24oKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZSh4cykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWF1dG9jb21wbGV0ZSJdXSx2aWV3UXVl''@;'; put 'put ''cnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJm5hKFA1dCw1KSwyJmQpe2xldCBmO3hpKGY9RWkoKSkmJihoLmlucHV0RWxlbWVudD1mLmZpcnN0KX19LGhvc3RCaW5kaW5nczpmdW5jdGlvbihkLGgpezEmZCYmRnQoInJlc2l6ZSIsZnVuY3Rpb24odil7cmV0dXJuIGgub25SZXNpemUodil9LDAs''@;'; put 'put ''S0MpfSxpbnB1dHM6e2lucHV0SWQ6ImlucHV0SWQiLHBsYWNlaG9sZGVyOiJwbGFjZWhvbGRlciIsdmFsdWU6InZhbHVlIixkaXNhYmxlZDoiZGlzYWJsZWQiLHR5cGU6InR5cGUiLGF1dG9jb21wbGV0ZToiYXV0b2NvbXBsZXRlIix0YWJpbmRleDoidGFiaW5kZXgiLGVtaXRPbmx5U2VsZWN0''@;'; put 'put ''ZWQ6ImVtaXRPbmx5U2VsZWN0ZWQiLGVuYWJsZUxvYWRNb3JlOiJlbmFibGVMb2FkTW9yZSJ9LG91dHB1dHM6e29uSW5wdXRLZXlkb3duOiJvbklucHV0S2V5ZG93biIsb25JbnB1dENoYW5nZToib25JbnB1dENoYW5nZSIsdmFsdWVDaGFuZ2U6InZhbHVlQ2hhbmdlIixvbkxvYWRpbmdNb3Jl''@;'; put 'put ''OiJvbkxvYWRpbmdNb3JlIn0sbmdDb250ZW50U2VsZWN0b3JzOkY1dCxkZWNsczo5LHZhcnM6MTUsY29uc3RzOltbImlucHV0IiwiIl0sWyJvcHRpb25zIiwiIl0sWzEsImF1dG9jb21wbGV0ZS13cmFwcGVyIiwzLCJrZXlkb3duIl0sWyJ0eXBlIiwidGV4dCIsImF1dG9jb21wbGV0ZSIsIm9m''@;'; put 'put ''ZiIsImF1dG9mb2N1cyIsIiIsInRhYmluZGV4IiwiMCIsMSwiaW5wdXQtdmFsIiwzLCJuZ01vZGVsQ2hhbmdlIiwiY2xpY2siLCJtb3VzZWVudGVyIiwiZm9jdXMiLCJmb2N1c291dCIsImtleXVwIiwiaWQiLCJwbGFjZWhvbGRlciIsIm5nTW9kZWwiLCJkaXNhYmxlZCJdLFsxLCJvdmVybGF5''@;'; put 'put ''Il0sWzEsImRhdGFsaXN0IiwzLCJjbGljayIsIm1vdXNlZW50ZXIiLCJtb3VzZWxlYXZlIiwic2Nyb2xsIiwibmdTdHlsZSIsImlkIl0sWyJkYXRhLXR5cGUiLCJsb2FkLW1vcmUiLCJjbGFzcyIsImxvYWQtbW9yZSIsNCwibmdJZiJdLFsiZGF0YS10eXBlIiwibG9hZC1tb3JlIiwxLCJsb2Fk''@;'; put 'put ''LW1vcmUiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0IGY9T24oKTtsbygpLGRlKDAsImRpdiIsMiksRnQoImtleWRvd24iLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uTWFpbktleWRvd24oTSkpfSksZGUoMSwiaW5wdXQiLDMsMCkscGkoIm5nTW9kZWxD''@;'; put 'put ''aGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSx2aShoLnZhbHVlLE0pfHwoaC52YWx1ZT1NKSxDdChNKX0pLEZ0KCJjbGljayIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgub25JbnB1dENsaWNrKE0pKX0pKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3Qo''@;'; put 'put ''ZiksQ3QoaC5vbklucHV0RmlyZWQoTSkpfSkoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uSW5wdXRNb3VzZWVudGVyKE0pKX0pKCJmb2N1cyIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgub25JbnB1dEZvY3VzaW4oTSkpfSkoImZvY3Vzb3V0Iixm''@;'; put 'put ''dW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbklucHV0Rm9jdXNvdXQoTSkpfSkoImtleXVwIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbklucHV0S2V5dXAoTSkpfSksaGUoKSxHdCgzLCJkaXYiLDQpLGRlKDQsImRpdiIsNSksRnQoImNsaWNrIixmdW5jdGlvbihNKXty''@;'; put 'put ''ZXR1cm4gd3QoZiksQ3QoaC5vbkRhdGFMaXN0Q2xpY2soTSkpfSkoIm1vdXNlZW50ZXIiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uRGF0YUxpc3RNb3VzZUVudGVyKE0pKX0pKCJtb3VzZWxlYXZlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbkRhdGFMaXN0TW91''@;'; put 'put ''c2VMZWF2ZShNKSl9KSgic2Nyb2xsIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5vbkRhdGFMaXN0U2Nyb2xsKE0pKX0pLGRlKDUsImRpdiIsbnVsbCwxKSxXcig3KSxoZSgpLGd0KDgsTjV0LDIsMSwib3B0aW9uIiw2KSxoZSgpKCl9aWYoMiZkKXtjb25zdCBmPXZvKDYpO2ZlKCks''@;'; put 'put ''eGUoImlkIixoLmlucHV0SWQpKCJwbGFjZWhvbGRlciIsaC5wbGFjZWhvbGRlciksZmkoIm5nTW9kZWwiLGgudmFsdWUpLHhlKCJkaXNhYmxlZCIsaC5kaXNhYmxlZCksZHIoImxpc3QiLCJkYXRhbGlzdF8iK2guaW5wdXRJZCksZmUoMikseHIoImhpZGRlbiIsIWguZGF0YWxpc3RPcGVuKSxm''@;'; put 'put ''ZSgpLHhyKCJoaWRkZW4iLCFoLmRhdGFsaXN0T3BlbikseGUoIm5nU3R5bGUiLHJwKDEyLEg1dCxoLmlucHV0Q2xpZW50UmVjdC53aWR0aCxoLmlubmVySGVpZ2h0JiZoLmlucHV0Q2xpZW50UmVjdC5ib3R0b20/aC5pbm5lckhlaWdodC1oLmlucHV0Q2xpZW50UmVjdC5ib3R0b206dm9pZCAw''@;'; put 'put ''KSkoImlkIiwiZGF0YWxpc3RfIitoLmlucHV0SWQpLGZlKDQpLHhlKCJuZ0lmIixmLmNoaWxkcmVuLmxlbmd0aD4wJiZoLmVuYWJsZUxvYWRNb3JlKX19LGRlcGVuZGVuY2llczpbeW8sV29lLFVmLFpmLFFsLFFzLFlzXSxzdHlsZXM6WyIuaW5wdXQtdmFsW19uZ2NvbnRlbnQtJUNPTVAlXXti''@;'; put 'put ''b3JkZXI6MHB4O2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzk5OTk5OX1pbnB1dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTtvdXRsaW5lOm5vbmV9aW5wdXRbX25nY29udGVudC0lQ09NUCVdOjotd2Via2l0LWNhbGVuZGFyLXBpY2tlci1p''@;'; put 'put ''bmRpY2F0b3J7bWFyZ2luLXRvcDotNXB4fSAgYm9keVtjZHMtdGhlbWU9ZGFya10gLmRhdGFsaXN0e2JhY2tncm91bmQ6IzIxMzMzYjtib3JkZXI6MXB4IHNvbGlkICM1NzU3NTd9ICBib2R5W2Nkcy10aGVtZT1kYXJrXSBpbnB1dHtjb2xvcjojZmZmfSAgYm9keVtjZHMtdGhlbWU9ZGFya10g''@;'; put 'put ''LmRhdGFsaXN0IG9wdGlvbntjb2xvcjojZmZmfSAgYm9keVtjZHMtdGhlbWU9bGlnaHRdIC5kYXRhbGlzdHtiYWNrZ3JvdW5kOiNmZmZ9LmF1dG9jb21wbGV0ZS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5vdmVybGF5W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDtp''@;'; put 'put ''bnNldDowO3otaW5kZXg6MTUwMH0uYXV0b2NvbXBsZXRlLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGFsaXN0W19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDtib3gtc2hhZG93OjAgM3B4IDEwcHggLTFweCAjMDAwMDAwMmI7b3ZlcmZsb3c6YXV0bzt6LWluZGV4''@;'; put 'put ''OjIwMDB9LmF1dG9jb21wbGV0ZS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kYXRhbGlzdFtfbmdjb250ZW50LSVDT01QJV0gICAgIG9wdGlvbntwYWRkaW5nOjVweCAxMHB4O2N1cnNvcjpwb2ludGVyfS5hdXRvY29tcGxldGUtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAu''@;'; put 'put ''ZGF0YWxpc3RbX25nY29udGVudC0lQ09NUCVdICAgICBvcHRpb246aG92ZXJ7YmFja2dyb3VuZDojMDAwMDAwMGZ9LmF1dG9jb21wbGV0ZS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kYXRhbGlzdFtfbmdjb250ZW50LSVDT01QJV0gICAgIG9wdGlvbi5mb2N1c2Vke2JhY2tncm91''@;'; put 'put ''bmQ6IzAwMDAwMDBmfS5hdXRvY29tcGxldGUtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICAubG9hZC1tb3JlW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmNlbnRlcjtib3JkZXItdG9wOjFweCBzb2xpZCAjZTZlNmU2fSJdfSl9fXJldHVybiBjfSkoKSxWNXQ9KCgpPT57Y2xh''@;'; put 'put ''c3MgY3t0cmFuc2Zvcm0oYSxkKXtpZigic3RyaW5nIj09dHlwZW9mIGEmJmEubGVuZ3RoPDEpcmV0dXJuIGE7c3dpdGNoKGQpe2Nhc2UiZGF0ZSI6cmV0dXJuIExhKGEsIkRETU1NWVlZWTpoaDptbTpzcyIpLmZvcm1hdCgiREQvTU0vWVlZWSIpO2Nhc2UidGltZSI6e2lmKCJzdHJpbmciIT10''@;'; put 'put ''eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3IoIkVycm9yIHBhcnNpbmcgdGltZS4gVmFsdWUgaXMgbm90IHN0cmluZy4iKTtjb25zdCBoPXBhcnNlSW50KGEuc3BsaXQoIjoiKVswXSksZj1wYXJzZUludChhLnNwbGl0KCI6IilbMV0pLHY9cGFyc2VJbnQoYS5zcGxpdCgiOiIpWzJdKTtyZXR1cm5g''@;'; put 'put ''JHtoPDEwPyIwIitoOmh9OiR7ZjwxMD8iMCIrZjpmfToke3Y8MTA/IjAiK3Y6dn1gfX1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIGE/YTphLnRvU3RyaW5nKCl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXBpcGU9''@;'; put 'put ''YWwoe25hbWU6ImRhdGVUaW1lRm9ybWF0dGVyIix0eXBlOmMscHVyZTohMH0pfX1yZXR1cm4gY30pKCk7Y29uc3QgQjV0PVsiaW5wdXQiXSxqNXQ9WyIqIl07ZnVuY3Rpb24gejV0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7bGkoMCksTGUoMSwiIC8gIiksZGUoMiwic3BhbiIsNSksRnQo''@;'; put 'put ''ImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5vbkNoYW5nZUxhYmVsKCJzZWNvbmQiKSl9KSxMZSgzKSxoZSgpLGNpKCl9aWYoMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDIpLHhyKCJ2YWx1ZS10eXBlLXNlbGVjdGVkIiwic2Vjb25kIj09PWEubGFiZWxTZWxlY3RlZCks''@;'; put 'put ''ZmUoKSxfcihhLnNlY29uZExhYmVsKX19ZnVuY3Rpb24gVTV0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwibGFiZWwiLDQpKDEsInNwYW4iLDUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5vbkNoYW5nZUxhYmVsKCJmaXJzdCIpKX0pLExlKDIp''@;'; put 'put ''LGhlKCksZ3QoMyx6NXQsNCwzLCJuZy1jb250YWluZXIiLDYpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKCk7eHIoInNlY29uZExhYmVsQWN0aXZlIixhLnNlY29uZExhYmVsJiZhLnNlY29uZExhYmVsLmxlbmd0aD4wKSxmZSgpLHhyKCJ2YWx1ZS10eXBlLXNlbGVjdGVkIiwiZmlyc3QiPT09''@;'; put 'put ''YS5sYWJlbFNlbGVjdGVkKSxmZSgpLF9yKGEubGFiZWwpLGZlKCkseGUoIm5nSWYiLGEuc2Vjb25kTGFiZWwpfX1mdW5jdGlvbiBaNXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtsaSgwKSxkZSgxLCJjbHItZGF0ZS1jb250YWluZXIiKSgyLCJpbnB1dCIsNykscXMoMywiZGF0ZVRpbWVG''@;'; put 'put ''b3JtYXR0ZXIiKSxGdCgiY2xyRGF0ZUNoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkub25EYXRlSW5wdXRGaXJlZChoKSl9KSgiZm9jdXMiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuaW5wdXRGb2N1c2VkPSEwKX0pKCJmb2N1c291dCIsZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5pbnB1dEZvY3VzZWQ9ITEpfSkoImZvY3VzaW4iLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgpLm9uRm9jdXNpbklucHV0KGgpKX0pKCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkub25JbnB1dE1vdXNlT3Zl''@;'; put 'put ''cigpKX0pKCJtb3VzZW91dCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5vbklucHV0TW91c2VPdXQoKSl9KSxoZSgpKCksY2koKX1pZigyJmMpe2NvbnN0IGE9T2UoKTtmZSgyKSx4ZSgiaWQiLGEuaW5wdXRJZCkoInBsYWNlaG9sZGVyIixCOCgzLDUsYS50ZW1wLCJkYXRlIikp''@;'; put 'put ''KCJjbHJEYXRlIixhLnZhbHVlKSgiZGlzYWJsZWQiLGEuZGlzYWJsZWQpLGRyKCJsaXN0IiwiZGF0YWxpc3RfIithLmlucHV0SWQpfX1mdW5jdGlvbiBXNXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtsaSgwKSxkZSgxLCJpbnB1dCIsOCksRnQoImlucHV0IixmdW5jdGlvbihoKXtyZXR1''@;'; put 'put ''cm4gd3QoYSksQ3QoT2UoKS5vbklucHV0RmlyZWQoaCkpfSkoImZvY3VzIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLmlucHV0Rm9jdXNlZD0hMCl9KSgiZm9jdXNvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuaW5wdXRGb2N1c2VkPSExKX0pKCJmb2N1c2lu''@;'; put 'put ''IixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5vbkZvY3VzaW5JbnB1dChoKSl9KSgibW91c2VvdmVyIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLm9uSW5wdXRNb3VzZU92ZXIoKSl9KSgibW91c2VvdXQiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCku''@;'; put 'put ''b25JbnB1dE1vdXNlT3V0KCkpfSksaGUoKSxjaSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpO2ZlKCkseGUoInZhbHVlIixhLnZhbHVlKSgiaWQiLGEuaW5wdXRJZCkoImRpc2FibGVkIixhLmRpc2FibGVkKSxkcigibGlzdCIsImRhdGFsaXN0XyIrYS5pbnB1dElkKX19ZnVuY3Rpb24gWTV0KGMs''@;'; put 'put ''bCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7bGkoMCksZGUoMSwiYXBwLWF1dG9jb21wbGV0ZSIsOSwwKSxGdCgib25JbnB1dENoYW5nZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkub25JbnB1dEZpcmVkKGgpKX0pKCJvbkxvYWRpbmdNb3JlIixmdW5jdGlvbihoKXtyZXR1cm4g''@;'; put 'put ''d3QoYSksQ3QoT2UoKS5hdXRvY29tcGxldGVMb2FkaW5nTW9yZShoKSl9KSxXcigzKSxoZSgpLGNpKCl9aWYoMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSx4ZSgiaW5wdXRJZCIsYS5pbnB1dElkKSgidmFsdWUiLChudWxsPT1hLnZhbHVlP251bGw6YS52YWx1ZS50b1N0cmluZygpKXx8IiIpKCJl''@;'; put 'put ''bmFibGVMb2FkTW9yZSIsYS5lbmFibGVMb2FkTW9yZSkoImVtaXRPbmx5U2VsZWN0ZWQiLGEuZW1pdE9ubHlTZWxlY3RlZCkoImRpc2FibGVkIixhLmRpc2FibGVkKX19bGV0IGw2ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5pbnB1dElkPSIiLHRoaXMudmFsdWU9IiIsdGhp''@;'; put 'put ''cy5kaXNhYmxlZD0hMSx0aGlzLnR5cGU9InRleHQiLHRoaXMuZGlzYWJsZVNvZnRzZWxlY3Q9ITEsdGhpcy5lbWl0T25seVNlbGVjdGVkPSExLHRoaXMuZW5hYmxlTG9hZE1vcmU9ITEsdGhpcy52YWx1ZUNoYW5nZT1uZXcgcXIsdGhpcy5vbklucHV0RXZlbnQ9bmV3IHFyLHRoaXMuZm9jdXNp''@;'; put 'put ''bklucHV0PW5ldyBxcix0aGlzLm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmU9bmV3IHFyLHRoaXMuc2VsZWN0ZWRMYWJlbENoYW5nZT1uZXcgcXIsdGhpcy50ZW1wPSIiLHRoaXMuaW5wdXRGb2N1c2VkPSExLHRoaXMubGFiZWxTZWxlY3RlZD0iZmlyc3QifW5nT25DaGFuZ2VzKGEpe2EudmFs''@;'; put 'put ''dWUmJmEudmFsdWUuY3VycmVudFZhbHVlIT09YS52YWx1ZS5wcmV2aW91c1ZhbHVlJiZ0aGlzLnZhbHVlQ2hhbmdlLmVtaXQoYS52YWx1ZS5jdXJyZW50VmFsdWUpfW5nT25Jbml0KCl7fWF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlKGEpe3RoaXMub25BdXRvY29tcGxldGVMb2FkaW5nTW9yZS5l''@;'; put 'put ''bWl0KGEpfW9uSW5wdXRGaXJlZChhKXtjb25zdCBkPWEudGFyZ2V0LnZhbHVlO3RoaXMudGVtcD1kLHRoaXMudmFsdWVDaGFuZ2UuZW1pdChkKSx0aGlzLm9uSW5wdXRFdmVudC5lbWl0KGEpfW9uRGF0ZUlucHV0RmlyZWQoYSl7dGhpcy50ZW1wPWEsdGhpcy52YWx1ZUNoYW5nZS5lbWl0KGEp''@;'; put 'put ''LHRoaXMub25JbnB1dEV2ZW50LmVtaXQoYSl9b25JbnB1dE1vdXNlT3V0KCl7dGhpcy5kaXNhYmxlU29mdHNlbGVjdHx8KHRoaXMudmFsdWU9dGhpcy50ZW1wLHRoaXMudGVtcD0iIil9b25JbnB1dE1vdXNlT3Zlcigpe3RoaXMuZGlzYWJsZVNvZnRzZWxlY3R8fCh0aGlzLnRlbXA9dGhpcy52''@;'; put 'put ''YWx1ZT90aGlzLnZhbHVlOiIiLHRoaXMudmFsdWU9IiIpfW9uRm9jdXNpbklucHV0KGEpe3RoaXMuZm9jdXNpbklucHV0LmVtaXQoYSl9b25DaGFuZ2VMYWJlbChhKXt0aGlzLmxhYmVsU2VsZWN0ZWQ9YSx0aGlzLnNlbGVjdGVkTGFiZWxDaGFuZ2UuZW1pdCgiZmlyc3QiPT09YT90aGlzLmxh''@;'; put 'put ''YmVsOnRoaXMuc2Vjb25kTGFiZWwpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXNvZnQtc2VsZWN0Il1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lm''@;'; put 'put ''KDEmZCYmbmEoQjV0LDUpLDImZCl7bGV0IGY7eGkoZj1FaSgpKSYmKGguaW5wdXRFbGVtZW50PWYuZmlyc3QpfX0saW5wdXRzOntpbnB1dElkOiJpbnB1dElkIixsYWJlbDoibGFiZWwiLHNlY29uZExhYmVsOiJzZWNvbmRMYWJlbCIsdmFsdWU6InZhbHVlIixkaXNhYmxlZDoiZGlzYWJsZWQi''@;'; put 'put ''LHR5cGU6InR5cGUiLGRpc2FibGVTb2Z0c2VsZWN0OiJkaXNhYmxlU29mdHNlbGVjdCIsZW1pdE9ubHlTZWxlY3RlZDoiZW1pdE9ubHlTZWxlY3RlZCIsZW5hYmxlTG9hZE1vcmU6ImVuYWJsZUxvYWRNb3JlIn0sb3V0cHV0czp7dmFsdWVDaGFuZ2U6InZhbHVlQ2hhbmdlIixvbklucHV0RXZl''@;'; put 'put ''bnQ6Im9uSW5wdXRFdmVudCIsZm9jdXNpbklucHV0OiJmb2N1c2luSW5wdXQiLG9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmU6Im9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUiLHNlbGVjdGVkTGFiZWxDaGFuZ2U6InNlbGVjdGVkTGFiZWxDaGFuZ2UifSxmZWF0dXJlczpbeWxdLG5nQ29udGVu''@;'; put 'put ''dFNlbGVjdG9yczpqNXQsZGVjbHM6NSx2YXJzOjUsY29uc3RzOltbImlucHV0IiwiIl0sWyJjbGFzcyIsImNsci1jb250cm9sLWxhYmVsIiwzLCJzZWNvbmRMYWJlbEFjdGl2ZSIsNCwibmdJZiJdLFszLCJuZ1N3aXRjaCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbMSwiY2xyLWNvbnRyb2wtbGFi''@;'; put 'put ''ZWwiXSxbMywiY2xpY2siXSxbNCwibmdJZiJdLFsidHlwZSIsImRhdGUiLCJjbHJEYXRlIiwiIiwzLCJjbHJEYXRlQ2hhbmdlIiwiZm9jdXMiLCJmb2N1c291dCIsImZvY3VzaW4iLCJtb3VzZW92ZXIiLCJtb3VzZW91dCIsImlkIiwicGxhY2Vob2xkZXIiLCJjbHJEYXRlIiwiZGlzYWJsZWQi''@;'; put 'put ''XSxbInR5cGUiLCJ0aW1lIiwic3RlcCIsIjEiLDEsImlucHV0LXZhbCIsMywiaW5wdXQiLCJmb2N1cyIsImZvY3Vzb3V0IiwiZm9jdXNpbiIsIm1vdXNlb3ZlciIsIm1vdXNlb3V0IiwidmFsdWUiLCJpZCIsImRpc2FibGVkIl0sWyJ0eXBlIiwidGV4dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIs''@;'; put 'put ''ImF1dG9mb2N1cyIsIiIsMSwiaW5wdXQtdmFsIiwzLCJvbklucHV0Q2hhbmdlIiwib25Mb2FkaW5nTW9yZSIsImlucHV0SWQiLCJ2YWx1ZSIsImVuYWJsZUxvYWRNb3JlIiwiZW1pdE9ubHlTZWxlY3RlZCIsImRpc2FibGVkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYobG8oKSxn''@;'; put 'put ''dCgwLFU1dCw0LDYsImxhYmVsIiwxKSxsaSgxLDIpLGd0KDIsWjV0LDQsOCwibmctY29udGFpbmVyIiwzKSgzLFc1dCwyLDQsIm5nLWNvbnRhaW5lciIsMykoNCxZNXQsNCw1LCJuZy1jb250YWluZXIiLDMpLGNpKCkpLDImZCYmKHhlKCJuZ0lmIixoLmxhYmVsKSxmZSgpLHhlKCJuZ1N3aXRj''@;'; put 'put ''aCIsaC50eXBlKSxmZSgpLHhlKCJuZ1N3aXRjaENhc2UiLCJkYXRlIiksZmUoKSx4ZSgibmdTd2l0Y2hDYXNlIiwidGltZSIpLGZlKCkseGUoIm5nU3dpdGNoQ2FzZSIsInRleHQiKSl9LGRlcGVuZGVuY2llczpbeW8sYjIsaXAsdXMsWngsV0wscVksczZlLFY1dF0sc3R5bGVzOlsiLmlucHV0''@;'; put 'put ''LXZhbFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjBweDtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlci1ib3R0b206MXB4IHNvbGlkICM5OTk5OTl9aW5wdXRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7b3V0bGluZTpub25lfWlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXTo6''@;'; put 'put ''LXdlYmtpdC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9ye21hcmdpbi10b3A6LTVweH1jbHItZGF0ZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbi10b3A6MnB4IWltcG9ydGFudH1jbHItZGF0ZS1jb250YWluZXJbX25nY29udGVudC0lQ09N''@;'; put 'put ''UCVdICAgICAuY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9ue3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0Oi01cHh9Y2xyLWRhdGUtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgaW5wdXQ6Oi13ZWJraXQtY2FsZW5kYXItcGlja2VyLWluZGljYXRvcnttYXJnaW4tcmlnaHQ6MjBw''@;'; put 'put ''eDttYXJnaW4tdG9wOi01cHh9bGFiZWwuc2Vjb25kTGFiZWxBY3RpdmVbX25nY29udGVudC0lQ09NUCVdICAgc3Bhbltfbmdjb250ZW50LSVDT01QJV06bm90KC52YWx1ZS10eXBlLXNlbGVjdGVkKXt0ZXh0LWRlY29yYXRpb246bGluZS10aHJvdWdoO2N1cnNvcjpwb2ludGVyO29wYWNpdHk6''@;'; put 'put ''LjZ9Il19KX19cmV0dXJuIGN9KSgpLHd3PSgoKT0+e2NsYXNzIGN7c2V0IG5nVmFyKGEpe3RoaXMuY29udGV4dC4kaW1wbGljaXQ9dGhpcy5jb250ZXh0Lm5nVmFyPWEsdGhpcy5oYXNWaWV3fHwodGhpcy52Y1JlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZVJlZix0aGlzLmNv''@;'; put 'put ''bnRleHQpLHRoaXMuaGFzVmlldz0hMCl9Y29uc3RydWN0b3IoYSxkKXt0aGlzLnRlbXBsYXRlUmVmPWEsdGhpcy52Y1JlZj1kLHRoaXMuY29udGV4dD17JGltcGxpY2l0Om51bGwsbmdWYXI6bnVsbH0sdGhpcy5oYXNWaWV3PSExfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXty''@;'; put 'put ''ZXR1cm4gbmV3KGR8fGMpKEdlKHdsKSxHZShEYSkpfX1zdGF0aWN7dGhpcy5cdTAyNzVkaXI9RXIoe3R5cGU6YyxzZWxlY3RvcnM6W1siIiwibmdWYXIiLCIiXV0saW5wdXRzOntuZ1ZhcjoibmdWYXIifX0pfX1yZXR1cm4gY30pKCksRzV0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7''@;'; put 'put ''dGhpcy5oZWxwZXJTZXJ2aWNlPWF9dHJhbnNmb3JtKGEsZD0iZGF5cyIsaD0hMSl7aWYodm9pZCAwPT09YSYmKGE9IiIpLCJzdHJpbmciIT10eXBlb2YgYSYmKGE9YS50b1N0cmluZygpKSwwPT09YS5sZW5ndGgpe2lmKCJkYXlzIj09PWQpcmV0dXJuIG51bGw7aWYoInNlY29uZHMiPT09ZCly''@;'; put 'put ''ZXR1cm4gaD8iMTE6MDA6MDAiOm51bGx9bGV0IGY9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRTYXNEYXlzVG9Kc0RhdGUoYSxkKTtpZig0PT09YS5zcGxpdCgiOiIpLmxlbmd0aCl7Y29uc3QgTT1hLnNwbGl0KCI6Iik7Zj1uZXcgRGF0ZShNWzBdKSxmLnNldEhvdXJzKHBhcnNlSW50KE1b''@;'; put 'put ''MV0pKSxmLnNldE1pbnV0ZXMocGFyc2VJbnQoTVsyXSkpLGYuc2V0U2Vjb25kcyhwYXJzZUludChNWzNdKSl9ZWxzZSBpc05hTihOdW1iZXIoYSkpJiYoZj1uZXcgRGF0ZShhKSk7bGV0IHY9YCR7dGhpcy5oZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGYuZ2V0SG91cnMoKS50b1N0cmlu''@;'; put 'put ''ZygpKX06JHt0aGlzLmhlbHBlclNlcnZpY2UuYWRkTGVhZGluZ1plcm8oZi5nZXRNaW51dGVzKCkudG9TdHJpbmcoKSl9OiR7dGhpcy5oZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGYuZ2V0U2Vjb25kcygpLnRvU3RyaW5nKCkpfWA7cmV0dXJuIGg/djpmfXN0YXRpY3t0aGlzLlx1MDI3''@;'; put 'put ''NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEd1LDE2KSl9fXN0YXRpY3t0aGlzLlx1MDI3NXBpcGU9YWwoe25hbWU6InNhc1RvSnNEYXRlIix0eXBlOmMscHVyZTohMH0pfX1yZXR1cm4gY30pKCksJDV0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSl7dGhpcy5oZWxw''@;'; put 'put ''ZXJTZXJ2aWNlPWF9dHJhbnNmb3JtKGEpe2lmKG51bGw9PWF8fCIiPT09YSlyZXR1cm4iIjtsZXQgZCxoLGY7aWYoInN0cmluZyI9PXR5cGVvZiBhJiYzPT09YS5zcGxpdCgiOiIpLmxlbmd0aCl7Y29uc3Qgdj1hLnNwbGl0KCI6Iik7ZD12WzBdLGg9dlsxXSxmPXZbMl19ZWxzZSJudW1iZXIi''@;'; put 'put ''IT10eXBlb2YgYSYmKGE9cGFyc2VJbnQoYSkpLGQ9TWF0aC5mbG9vcihhLzM2MDApLGg9TWF0aC5mbG9vcihhJTM2MDAvNjApLGY9TWF0aC5mbG9vcihhJTM2MDAlNjApO3JldHVybmAke3RoaXMuaGVscGVyU2VydmljZS5hZGRMZWFkaW5nWmVybyhkKX06JHt0aGlzLmhlbHBlclNlcnZpY2Uu''@;'; put 'put ''YWRkTGVhZGluZ1plcm8oaCl9OiR7dGhpcy5oZWxwZXJTZXJ2aWNlLmFkZExlYWRpbmdaZXJvKGYpfWB9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoR3UsMTYpKX19c3RhdGlje3RoaXMuXHUwMjc1cGlwZT1hbCh7bmFtZToic2Vjb25kc1Bh''@;'; put 'put ''cnNlciIsdHlwZTpjLHB1cmU6ITB9KX19cmV0dXJuIGN9KSgpO2NvbnN0IEs1dD0oYyxsLGEpPT4oe3F1ZXJ5OmMscXVlcnlJbmRleDpsLGNsYXVzZUluZGV4OmF9KSxxNXQ9KGMsbCxhLGQpPT4oe3F1ZXJ5OmMscXVlcnlJbmRleDpsLGNsYXVzZUluZGV4OmEsaXNEYXRlVGltZTpkfSksWDV0''@;'; put 'put ''PShjLGwsYSxkKT0+KHtyYW5nZToic3RhcnQiLHF1ZXJ5OmMscXVlcnlWYWx1ZUluZGV4OjAscXVlcnlJbmRleDpsLGNsYXVzZUluZGV4OmEsaXNEYXRlVGltZTpkfSksSjV0PShjLGwsYSxkKT0+KHtyYW5nZToiZW5kIixxdWVyeTpjLHF1ZXJ5VmFsdWVJbmRleDoxLHF1ZXJ5SW5kZXg6bCxj''@;'; put 'put ''bGF1c2VJbmRleDphLGlzRGF0ZVRpbWU6ZH0pO2Z1bmN0aW9uIFE1dChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsMjIpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDt4ZSgic2VsZWN0ZWQiLE9lKCkubG9naWNPcGVyYXRvcnNbMF0pLGZlKCksUnIoIiAiLGEsIiAi''@;'; put 'put ''KX19ZnVuY3Rpb24gZW10KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwyMyksTGUoMSwiXG4gICAgICAgICIpLEd0KDIsInByb2dyZXNzIiksTGUoMywiXG4gICAgICAiKSxoZSgpKX1mdW5jdGlvbiB0bXQoYyxsKXsxJmMmJkd0KDAsImRpdiIpfWZ1bmN0aW9uIG5tdChjLGwpe2lmKDEmYyYmKGRl''@;'; put 'put ''KDAsIm9wdGlvbiIsMjIpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDt4ZSgic2VsZWN0ZWQiLE9lKDIpLmxvZ2ljT3BlcmF0b3JzWzBdKSxmZSgpLFJyKCIgIixhLCIgIil9fWZ1bmN0aW9uIHJtdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImJ1dHRvbiIs''@;'; put 'put ''MzIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikuYWRkR3JvdXBDbGF1c2UoKSl9KSxHdCgxLCJjbHItaWNvbiIsMzMpLGRlKDIsInNwYW4iKSxMZSgzLCJHcm91cCIpLGhlKCkoKX19ZnVuY3Rpb24gaW10KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUo''@;'; put 'put ''MCwiY2xyLWljb24iLDM0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpLmluZGV4O3JldHVybiBDdChPZSgpLnJlbW92ZUdyb3VwQ2xhdXNlKGgpKX0pLGhlKCl9fWZ1bmN0aW9uIG9tdChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIpLExlKDEpLGhlKCkpLDIm''@;'; put 'put ''Yyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLFJyKCIgIixhLk5BTUUsIiAiKX19ZnVuY3Rpb24gYW10KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksX3IoYSl9fWZ1bmN0aW9uIHNtdChjLGwpezEmYyYmWGwo''@;'; put 'put ''MCl9ZnVuY3Rpb24gbG10KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2Iiw1MSkoMSwiYnV0dG9uIiw1MiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMikuaW5kZXgsZj1PZSgpLmluZGV4LHY9T2UoKTtyZXR1cm4gdi5jdXJyZW50UXVlcnlJbmRl''@;'; put 'put ''eD1oLEN0KHYuY3VycmVudENsYXVzZUluZGV4PWYpfSksTGUoMiwiIENob29zZSB2YWx1ZXMgIiksaGUoKSxndCgzLHNtdCwxLDAsIm5nLWNvbnRhaW5lciIsNTMpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKDIpLGQ9YS4kaW1wbGljaXQsaD1hLmluZGV4LGY9T2UoKS5pbmRleDtPZSgpO2Nv''@;'; put 'put ''bnN0IHY9dm8oMzcpO2ZlKDMpLHhlKCJuZ1RlbXBsYXRlT3V0bGV0Iix2KSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLGZNKDIsSzV0LGQsaCxmKSl9fWZ1bmN0aW9uIGNtdChjLGwpezEmYyYmWGwoMCl9ZnVuY3Rpb24gdW10KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw1NCksZ3QoMSxj''@;'; put 'put ''bXQsMSwwLCJuZy1jb250YWluZXIiLDUzKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKS5uZ1ZhcixkPU9lKCksaD1kLiRpbXBsaWNpdCxmPWQuaW5kZXgsdj1PZSgpLmluZGV4LE09T2UoKSxEPXZvKDMxKSxaPXZvKDMzKTtmZSgpLHhlKCJuZ1RlbXBsYXRlT3V0bGV0IixhJiZNLnVzZVBpY2tl''@;'; put 'put ''cnM/RDpaKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLFpJKDIscTV0LGgsZix2LGEpKX19ZnVuY3Rpb24gZG10KGMsbCl7MSZjJiZYbCgwKX1mdW5jdGlvbiBobXQoYyxsKXsxJmMmJlhsKDApfWZ1bmN0aW9uIGZtdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNTUpKDEsImRpdiIsNTYp''@;'; put 'put ''LGd0KDIsZG10LDEsMCwibmctY29udGFpbmVyIiw1MyksaGUoKSxkZSgzLCJkaXYiLDU3KSxndCg0LGhtdCwxLDAsIm5nLWNvbnRhaW5lciIsNTMpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKCkubmdWYXIsZD1PZSgpLGg9ZC4kaW1wbGljaXQsZj1kLmluZGV4LHY9T2UoKS5pbmRleCxNPU9l''@;'; put 'put ''KCksRD12bygzMSksWj12bygzNSk7ZmUoMikseGUoIm5nVGVtcGxhdGVPdXRsZXQiLGEmJk0udXNlUGlja2Vycz9EOlopKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIsWkkoNCxYNXQsaCxmLHYsYSkpLGZlKDIpLHhlKCJuZ1RlbXBsYXRlT3V0bGV0IixhJiZNLnVzZVBpY2tlcnM/RDpaKSgi''@;'; put 'put ''bmdUZW1wbGF0ZU91dGxldENvbnRleHQiLFpJKDksSjV0LGgsZix2LGEpKX19ZnVuY3Rpb24gcG10KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2Iiw1OCkoMSwibGFiZWwiLDcpLExlKDIsIlZhbHVlIiksaGUoKSxkZSgzLCJpbnB1dCIsNTkpLHBpKCJuZ01vZGVsQ2hhbmdl''@;'; put 'put ''IixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDIpLiRpbXBsaWNpdDtyZXR1cm4gdmkoZi52YWx1ZSxoKXx8KGYudmFsdWU9aCksQ3QoaCl9KSxGdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgyKS5pbmRleCx2PU9lKCkuaW5kZXg7cmV0dXJuIEN0''@;'; put 'put ''KE9lKCkuc2V0VmFyaWFibGVWYWx1ZXMoaCxmLHYpKX0pLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9T2UoMikuJGltcGxpY2l0O2ZlKDMpLGZpKCJuZ01vZGVsIixhLnZhbHVlKX19ZnVuY3Rpb24gZ210KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw0NiksZ3QoMSxsbXQsNCw2LCJkaXYiLDQ3''@;'; put 'put ''KSgyLHVtdCwyLDcsImRpdiIsNDgpKDMsZm10LDUsMTQsImRpdiIsNDkpKDQscG10LDQsMSwiZGl2Iiw1MCksaGUoKSksMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0O2ZlKCkseGUoIm5nSWYiLCJJTiI9PT1hLm9wZXJhdG9yfHwiTk9UIElOIj09PWEub3BlcmF0b3IpLGZlKCkseGUoIm5n''@;'; put 'put ''SWYiLCJCRVRXRUVOIiE9PWEub3BlcmF0b3ImJiJJTiIhPT1hLm9wZXJhdG9yJiYiTk9UIElOIiE9PWEub3BlcmF0b3ImJiJMSUtFIiE9PWEub3BlcmF0b3ImJiJDT05UQUlOUyIhPT1hLm9wZXJhdG9yJiYiQkVHSU5TX1dJVEgiIT09YS5vcGVyYXRvciksZmUoKSx4ZSgibmdJZiIsIkJFVFdF''@;'; put 'put ''RU4iPT09YS5vcGVyYXRvciksZmUoKSx4ZSgibmdJZiIsIkxJS0UiPT09YS5vcGVyYXRvcnx8IkJFR0lOU19XSVRIIj09PWEub3BlcmF0b3J8fCJDT05UQUlOUyI9PT1hLm9wZXJhdG9yKX19ZnVuY3Rpb24gbW10KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2IiwxMCkoMSwi''@;'; put 'put ''ZGl2IiwzNSkoMiwiZGl2IiwzNikoMywiYXBwLXNvZnQtc2VsZWN0IiwzNykscGkoInZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gdmkoZi52YXJpYWJsZSxoKXx8KGYudmFyaWFibGU9aCksQ3QoaCl9KSxGdCgib25JbnB1dEV2ZW50Iixm''@;'; put 'put ''dW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLHY9Zi4kaW1wbGljaXQsTT1mLmluZGV4LEQ9T2UoKS5pbmRleDtyZXR1cm4gQ3QoT2UoKS52YXJpYWJsZUlucHV0Q2hhbmdlKHYudmFyaWFibGUsTSxELGgpKX0pLGd0KDQsb210LDIsMSwib3B0aW9uIiwzOCksaGUoKSgpKCksZGUoNSwiZGl2Iiwz''@;'; put 'put ''OSkoNiwiY2xyLXNlbGVjdC1jb250YWluZXIiKSg3LCJsYWJlbCIpLExlKDgsIk9wZXJhdG9yIiksaGUoKSxkZSg5LCJzZWxlY3QiLDQwKSxwaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIHZpKGYub3BlcmF0b3IsaCl8fChmLm9w''@;'; put 'put ''ZXJhdG9yPWgpLEN0KGgpfSksRnQoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKSxmPWguJGltcGxpY2l0LHY9aC5pbmRleCxNPU9lKCkuaW5kZXg7cmV0dXJuIEN0KE9lKCkuc2V0VmFyaWFibGVPcGVyYXRvcih2LGYub3BlcmF0b3IsTSkpfSksZ3QoMTAsYW10LDIs''@;'; put 'put ''MSwib3B0aW9uIiwzOCksaGUoKSgpKCksZ3QoMTEsZ210LDUsNCwiZGl2Iiw0MSksZGUoMTIsImRpdiIsNDIpKDEzLCJidXR0b24iLDQzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS5pbmRleCxmPU9lKCkuaW5kZXg7cmV0dXJuIEN0KE9lKCkucmVtb3ZlQ2xhdXNlKGgs''@;'; put 'put ''ZikpfSksR3QoMTQsImNsci1pY29uIiw0NCkoMTUsInNwYW4iKSxoZSgpLGRlKDE2LCJidXR0b24iLDQ1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpLmluZGV4O3JldHVybiBDdChPZSgpLmFkZENsYXVzZShoKSl9KSxHdCgxNywiY2xyLWljb24iLDMzKSgxOCwi''@;'; put 'put ''c3BhbiIpLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXgsaD1PZSgpLmluZGV4LGY9T2UoKTt4cigiaW52YWxpZC1jbGF1c2UiLGEuaW52YWxpZENsYXVzZSksZmUoMykseGUoImlkIiwic2VsZWN0X3ZhbHNfdmFyX2lkIitkKyJfIitoKSgiaW5wdXRJZCIs''@;'; put 'put ''InZhbHNfdmFyX2lkIitkKyJfIitoKSgiZW1pdE9ubHlTZWxlY3RlZCIsITApLGZpKCJ2YWx1ZSIsYS52YXJpYWJsZSksZmUoKSx4ZSgibmdGb3JPZiIsZi5jb2xzKSxmZSg1KSxmaSgibmdNb2RlbCIsYS5vcGVyYXRvciksZmUoKSx4ZSgibmdGb3JPZiIsYS5vcGVyYXRvcnMpLGZlKCkseGUo''@;'; put 'put ''Im5nVmFyIiwiREFURSI9PT1hLmRkdHlwZXx8IkRBVEVUSU1FIj09PWEuZGR0eXBlfHwiVElNRSI9PT1hLmRkdHlwZSksZmUoMikseGUoImRpc2FibGVkIiwxPT09Zi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzLmxlbmd0aCl9fWZ1bmN0aW9uIHZtdChjLGwpe2lmKDEmYyl7Y29uc3Qg''@;'; put 'put ''YT1PbigpO2RlKDAsImRpdiIsMjQpKDEsImRpdiIsMTApKDIsImRpdiIsMjUpKDMsImRpdiIsMjYpKDQsImNsci1zZWxlY3QtY29udGFpbmVyIikoNSwibGFiZWwiKSxMZSg2LCJMb2dpYyIpLGhlKCksZGUoNywic2VsZWN0IiwyNykscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe2Nv''@;'; put 'put ''bnN0IGY9d3QoYSkuJGltcGxpY2l0O3JldHVybiB2aShmLmNsYXVzZUxvZ2ljLGgpfHwoZi5jbGF1c2VMb2dpYz1oKSxDdChoKX0pLEZ0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLnNldExvZ2ljKCkpfSksZ3QoOCxubXQsMiwyLCJvcHRpb24iLDEz''@;'; put 'put ''KSxoZSgpKCkoKSxHdCg5LCJiciIpLGd0KDEwLHJtdCw0LDAsImJ1dHRvbiIsMjgpLGhlKCksZGUoMTEsImRpdiIsMjkpLGd0KDEyLGltdCwxLDAsImNsci1pY29uIiwzMCkoMTMsbW10LDE5LDExLCJkaXYiLDMxKSxoZSgpKCksR3QoMTQsImJyIiksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC4k''@;'; put 'put ''aW1wbGljaXQsZD1PZSgpO2ZlKCkseHIoImludmFsaWQtY2xhdXNlIixhLmludmFsaWRDbGF1c2UpLGZlKDYpLGZpKCJuZ01vZGVsIixhLmNsYXVzZUxvZ2ljKSx4ZSgiZGlzYWJsZWQiLGEuZWxlbWVudHMubGVuZ3RoPDIpLGZlKCkseGUoIm5nRm9yT2YiLGQubG9naWNPcGVyYXRvcnMpLGZl''@;'; put 'put ''KDIpLHhlKCJuZ0lmIixkLmlubmVyV2lkdGg+NzY4KSxmZSgyKSx4ZSgibmdJZiIsZC5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aD4xKSxmZSgpLHhlKCJuZ0Zvck9mIixhLmVsZW1lbnRzKX19ZnVuY3Rpb24gYm10KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7bGkoMCksZGUoMSwiYXBwLXNv''@;'; put 'put ''ZnQtc2VsZWN0Iiw2MikscXMoMiwic2FzVG9Kc0RhdGUiKSxxcygzLCJzYXNUb0pzRGF0ZSIpLEZ0KCJ2YWx1ZUNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpLHY9Zi5xdWVyeSxNPWYucXVlcnlWYWx1ZUluZGV4LEQ9Zi5xdWVyeUluZGV4LFo9Zi5jbGF1c2VJbmRleDty''@;'; put 'put ''ZXR1cm4gQ3QoT2UoKS5kYXRlQ2hhbmdlKGgsdixELFosTSkpfSksaGUoKSxjaSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpLGQ9YS5xdWVyeSxoPWEucXVlcnlWYWx1ZUluZGV4LGY9YS5xdWVyeUluZGV4LHY9YS5jbGF1c2VJbmRleDtmZSgpLHhlKCJkaXNhYmxlU29mdHNlbGVjdCIsITApKCJp''@;'; put 'put ''bnB1dElkIiwidmFsc19kYXRlIitmKyJfIit2KSgidmFsdWUiLHZvaWQgMCE9PWg/a2MoMiwzLGQudmFsdWVbaF0pOmtjKDMsNSxkLnZhbHVlKSl9fWZ1bmN0aW9uIHltdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2xpKDApLGRlKDEsImFwcC1zb2Z0LXNlbGVjdCIsNjMpLHFzKDIsInNh''@;'; put 'put ''c1RvSnNEYXRlIikscXMoMywic2FzVG9Kc0RhdGUiKSxGdCgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKSx2PWYucXVlcnlJbmRleCxNPWYuY2xhdXNlSW5kZXg7cmV0dXJuIEN0KE9lKCkuZ2V0UXVlcnlEYXRlVGltZShNLHYpLmRhdGU9aCl9KSgib25JbnB1''@;'; put 'put ''dEV2ZW50IixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKSxmPWgucXVlcnksdj1oLnF1ZXJ5VmFsdWVJbmRleCxNPWgucXVlcnlJbmRleCxEPWguY2xhdXNlSW5kZXg7cmV0dXJuIEN0KE9lKCkuZGF0ZVRpbWVDaGFuZ2UoZixNLEQsdikpfSksaGUoKSxkZSg0LCJhcHAtc29mdC1zZWxl''@;'; put 'put ''Y3QiLDY0KSxxcyg1LCJzYXNUb0pzRGF0ZSIpLHFzKDYsInNhc1RvSnNEYXRlIiksRnQoInZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCksdj1mLnF1ZXJ5SW5kZXgsTT1mLmNsYXVzZUluZGV4O3JldHVybiBDdChPZSgpLmdldFF1ZXJ5RGF0ZVRpbWUoTSx2KS50''@;'; put 'put ''aW1lPWgpfSkoIm9uSW5wdXRFdmVudCIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCksZj1oLnF1ZXJ5LHY9aC5xdWVyeVZhbHVlSW5kZXgsTT1oLnF1ZXJ5SW5kZXgsRD1oLmNsYXVzZUluZGV4O3JldHVybiBDdChPZSgpLmRhdGVUaW1lQ2hhbmdlKGYsTSxELHYpKX0pLGhlKCksY2ko''@;'; put 'put ''KX1pZigyJmMpe2NvbnN0IGE9T2UoKSxkPWEucXVlcnksaD1hLnF1ZXJ5VmFsdWVJbmRleCxmPWEucXVlcnlJbmRleCx2PWEuY2xhdXNlSW5kZXg7ZmUoKSx4ZSgiZGlzYWJsZVNvZnRzZWxlY3QiLCEwKSgiaW5wdXRJZCIsInZhbHNfZGF0ZSIrZisiXyIrdikoInZhbHVlIix2b2lkIDAhPT1o''@;'; put 'put ''P0I4KDIsNixkLnZhbHVlW2hdLCJzZWNvbmRzIik6QjgoMyw5LGQudmFsdWUsInNlY29uZHMiKSksZmUoMykseGUoImRpc2FibGVTb2Z0c2VsZWN0IiwhMCkoImlucHV0SWQiLCJ2YWxzX3RpbWUiK2YrIl8iK3YpKCJ2YWx1ZSIsdm9pZCAwIT09aD9sVSg1LDEyLGQudmFsdWVbaF0sInNlY29u''@;'; put 'put ''ZHMiLCEwKTpsVSg2LDE2LGQudmFsdWUsInNlY29uZHMiLCEwKSl9fWZ1bmN0aW9uIF9tdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2xpKDApLGRlKDEsImFwcC1zb2Z0LXNlbGVjdCIsNjUpLHFzKDIsInNlY29uZHNQYXJzZXIiKSxxcygzLCJzZWNvbmRzUGFyc2VyIiksRnQoIm9uSW5w''@;'; put 'put ''dXRFdmVudCIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpLHY9Zi5xdWVyeSxNPWYucXVlcnlWYWx1ZUluZGV4LEQ9Zi5xdWVyeUluZGV4LFo9Zi5jbGF1c2VJbmRleDtyZXR1cm4gQ3QoT2UoKS50aW1lQ2hhbmdlKGgsdixELFosTSkpfSksaGUoKSxjaSgpfWlmKDImYyl7Y29uc3Qg''@;'; put 'put ''YT1PZSgpLGQ9YS5xdWVyeSxoPWEucXVlcnlWYWx1ZUluZGV4LGY9YS5xdWVyeUluZGV4LHY9YS5jbGF1c2VJbmRleDtmZSgpLHhlKCJkaXNhYmxlU29mdHNlbGVjdCIsITApKCJpbnB1dElkIiwidmFsc18iK2YrIl8iK3YpKCJ2YWx1ZSIsdm9pZCAwIT09aD9rYygyLDMsZC52YWx1ZVtoXSk6''@;'; put 'put ''a2MoMyw1LGQudmFsdWUpKX19ZnVuY3Rpb24gd210KGMsbCl7MSZjJiYobGkoMCw2MCksZ3QoMSxibXQsNCw3LCJuZy1jb250YWluZXIiLDYxKSgyLHltdCw3LDIwLCJuZy1jb250YWluZXIiLDYxKSgzLF9tdCw0LDcsIm5nLWNvbnRhaW5lciIsNjEpLGNpKCkpLDImYyYmKHhlKCJuZ1N3aXRj''@;'; put 'put ''aCIsbC5xdWVyeS5kZHR5cGUpLGZlKCkseGUoIm5nU3dpdGNoQ2FzZSIsIkRBVEUiKSxmZSgpLHhlKCJuZ1N3aXRjaENhc2UiLCJEQVRFVElNRSIpLGZlKCkseGUoIm5nU3dpdGNoQ2FzZSIsIlRJTUUiKSl9ZnVuY3Rpb24gQ210KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiw2OCksTGUo''@;'; put 'put ''MSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O3hlKCJ2YWx1ZSIsYS51bmZvcm1hdHRlZCksZmUoKSxScigiICIsYS5mb3JtYXR0ZWQudHJpbSgpLCIgIil9fWZ1bmN0aW9uIFNtdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpLGd0KDEsQ210LDIsMiwib3B0aW9uIiw2NyksaGUo''@;'; put 'put ''KSksMiZjKXtjb25zdCBhPU9lKCkucXVlcnk7ZmUoKSx4ZSgibmdGb3JPZiIsYS52YWx1ZXMpfX1mdW5jdGlvbiBNbXQoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDY4KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQ7eGUoInZhbHVlIixhLk5BTUUpLGZlKCks''@;'; put 'put ''UnIoIiAiLGEuTkFNRSwiICIpfX1mdW5jdGlvbiB4bXQoYyxsKXtpZigxJmMmJihsaSgwKSxndCgxLE1tdCwyLDIsIm9wdGlvbiIsNjkpLGNpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPU9lKDIpLnF1ZXJ5O2ZlKCkseGUoIm5nSWYiLGEuVFlQRT09PWQudHlwZSl9fWZ1bmN0aW9u''@;'; put 'put ''IEVtdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpLGd0KDEseG10LDIsMSwibmctY29udGFpbmVyIiwzOCksaGUoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKCkseGUoIm5nRm9yT2YiLGEuY29scyl9fWZ1bmN0aW9uIFRtdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImFwcC1z''@;'; put 'put ''b2Z0LXNlbGVjdCIsNjYpLEZ0KCJzZWxlY3RlZExhYmVsQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLnF1ZXJ5O3JldHVybiBDdChPZSgpLnNlbGVjdGVkTGFiZWxDaGFuZ2UoaCxmKSl9KSxwaSgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkucXVlcnk7''@;'; put 'put ''cmV0dXJuIHZpKGYudmFsdWUsaCl8fChmLnZhbHVlPWgpLEN0KGgpfSksRnQoIm9uSW5wdXRFdmVudCIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKSx2PWYucXVlcnlJbmRleCxNPWYuY2xhdXNlSW5kZXg7cmV0dXJuIEN0KE9lKCkuc2V0VmFyaWFibGVWYWx1ZXMoaC50YXJnZXQudmFsdWUs''@;'; put 'put ''dixNKSl9KSgib25BdXRvY29tcGxldGVMb2FkaW5nTW9yZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKSx2PWYucXVlcnksTT1mLnF1ZXJ5SW5kZXgsRD1mLmNsYXVzZUluZGV4O3JldHVybiBDdChPZSgpLm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUoaCx2LnZhcmlhYmxlLE0sRCkpfSks''@;'; put 'put ''Z3QoMSxTbXQsMiwxLCJkaXYiLDIwKSgyLEVtdCwyLDEsImRpdiIsMjApLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwucXVlcnksZD1sLnF1ZXJ5SW5kZXgsaD1sLmNsYXVzZUluZGV4O3hlKCJzZWNvbmRMYWJlbCIsIlZhcmlhYmxlIikoImVtaXRPbmx5U2VsZWN0ZWQiLGEudmFsdWVWYXJpYWJs''@;'; put 'put ''ZSkoImlucHV0SWQiLCJ2YWxzXyIrZCsiXyIraCksZmkoInZhbHVlIixhLnZhbHVlKSx4ZSgiZW5hYmxlTG9hZE1vcmUiLGEubm9icz5hLnZhbHVlcy5sZW5ndGgpLGZlKCkseGUoIm5nSWYiLCFhLnZhbHVlVmFyaWFibGUpLGZlKCkseGUoIm5nSWYiLGEudmFsdWVWYXJpYWJsZSl9fWZ1bmN0''@;'; put 'put ''aW9uIEFtdChjLGwpe2lmKDEmYyYmKGRlKDAsIm9wdGlvbiIsNjgpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDt4ZSgidmFsdWUiLGEuZm9ybWF0dGVkKSxmZSgpLFJyKCIgIixhLmZvcm1hdHRlZCwiICIpfX1mdW5jdGlvbiBrbXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9''@;'; put 'put ''T24oKTtkZSgwLCJhcHAtc29mdC1zZWxlY3QiLDcwKSxwaSgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSksdj1mLnF1ZXJ5LE09Zi5xdWVyeVZhbHVlSW5kZXg7cmV0dXJuIHZpKHYudmFsdWVbTV0saCl8fCh2LnZhbHVlW01dPWgpLEN0KGgpfSksRnQoIm9uSW5wdXRF''@;'; put 'put ''dmVudCIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLGY9aC5xdWVyeSx2PWgucXVlcnlJbmRleCxNPWguY2xhdXNlSW5kZXg7cmV0dXJuIEN0KE9lKCkuc2V0VmFyaWFibGVWYWx1ZXMoZi52YWx1ZSx2LE0pKX0pKCJvbkF1dG9jb21wbGV0ZUxvYWRpbmdNb3JlIixmdW5jdGlvbihoKXtjb25z''@;'; put 'put ''dCBmPXd0KGEpLHY9Zi5xdWVyeSxNPWYucXVlcnlJbmRleCxEPWYuY2xhdXNlSW5kZXg7cmV0dXJuIEN0KE9lKCkub25BdXRvY29tcGxldGVMb2FkaW5nTW9yZShoLHYudmFyaWFibGUsTSxEKSl9KSxndCgxLEFtdCwyLDIsIm9wdGlvbiIsNjcpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwucmFu''@;'; put 'put ''Z2UsZD1sLnF1ZXJ5LGg9bC5xdWVyeVZhbHVlSW5kZXg7eGUoImlucHV0SWQiLCJ2YWxzLSIrYSsiXyIrbC5xdWVyeUluZGV4KyJfIitsLmNsYXVzZUluZGV4KSxmaSgidmFsdWUiLGQudmFsdWVbaF0pLHhlKCJlbmFibGVMb2FkTW9yZSIsZC5ub2JzPmQudmFsdWVzLmxlbmd0aCkoImRpc2Fi''@;'; put 'put ''bGVkIix2b2lkIDAhPT1oJiYic3RhcnQiIT09YSYmIWQudmFsdWVbMF0pLGZlKCkseGUoIm5nRm9yT2YiLGQudmFsdWVzKX19ZnVuY3Rpb24gRG10KGMsbCl7MSZjJiYoZGUoMCwiaDUiLDc4KSxMZSgxLCIgTm8gdmFsdWVzIGF2YWlsYWJsZS4gIiksaGUoKSl9ZnVuY3Rpb24gSW10KGMsbCl7''@;'; put 'put ''aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgxLCJpbnB1dCIsODApLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLmluZGV4LHY9T2UoMikucXVlcnk7cmV0dXJuIHZpKHYudmFsdWVbZl0uY2hlY2tlZCxoKXx8KHYu''@;'; put 'put ''dmFsdWVbZl0uY2hlY2tlZD1oKSxDdChoKX0pLEZ0KCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDIpLHY9Zi5xdWVyeUluZGV4LE09Zi5jbGF1c2VJbmRleDtyZXR1cm4gQ3QoT2UoKS5zZXRWYXJpYWJsZVZhbHVlcyhoLHYsTSkpfSksaGUoKSxkZSgyLCJs''@;'; put 'put ''YWJlbCIpLExlKDMpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9T2UoMikucXVlcnk7ZmUoKSxmaSgibmdNb2RlbCIsaC52YWx1ZVtkXS5jaGVja2VkKSxmZSgyKSxScigiICIsYS5mb3JtYXR0ZWQsIiAiKX19ZnVuY3Rpb24gUm10KGMsbCl7aWYoMSZj''@;'; put 'put ''JiYoZGUoMCwic2VjdGlvbiIsNzkpKDEsImNsci1jaGVja2JveC1jb250YWluZXIiKSxndCgyLEltdCw0LDIsImNsci1jaGVja2JveC13cmFwcGVyIiwzOCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKS5xdWVyeTtmZSgyKSx4ZSgibmdGb3JPZiIsYS52YWx1ZXMpfX1mdW5jdGlvbiBMbXQo''@;'; put 'put ''YyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItbW9kYWwiLDcxKSgxLCJoMyIsNzIpLExlKDIsIlNlbGVjdCB2YWx1ZXMiKSxoZSgpLGRlKDMsImRpdiIsNzMpLGd0KDQsRG10LDIsMCwiaDUiLDc0KSg1LFJtdCwzLDEsInNlY3Rpb24iLDc1KSxoZSgpLGRlKDYsImRpdiIsNzYp''@;'; put 'put ''KDcsImJ1dHRvbiIsNzcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCk7cmV0dXJuIGguY3VycmVudFF1ZXJ5SW5kZXg9LTEsQ3QoaC5jdXJyZW50Q2xhdXNlSW5kZXg9LTEpfSksTGUoOCwiIEFwcGx5ICIpLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLnF1ZXJ5''@;'; put 'put ''LGQ9bC5xdWVyeUluZGV4LGg9bC5jbGF1c2VJbmRleCxmPU9lKCk7eGUoImNsck1vZGFsT3BlbiIsZi5jdXJyZW50UXVlcnlJbmRleD09PWQmJmYuY3VycmVudENsYXVzZUluZGV4PT09aCkoImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSg0KSx4ZSgibmdJZiIsIWYuaXNBcnIoYS52YWx1ZSkp''@;'; put 'put ''LGZlKCkseGUoIm5nSWYiLGYuaXNBcnIoYS52YWx1ZSkpfX0hZnVuY3Rpb24gUF9lKGMsbCxhKXsoZnVuY3Rpb24gdTllKGMsbCxhKXsic3RyaW5nIiE9dHlwZW9mIGwmJihhPWwsbD1jW0psLkxvY2FsZUlkXSksbD1sLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXy9nLCItIiksSGJbbF09Yyxh''@;'; put 'put ''JiYoSGJbbF1bSmwuRXh0cmFEYXRhXT1hKX0pKGMsbCxhKX0oTzV0KTtsZXQgQmVlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5zYXNTdG9yZVNlcnZpY2U9YSx0aGlzLmV2ZW50U2VydmljZT1kLHRoaXMuaGVscGVyU2VydmljZT1oLHRoaXMuY2RmPWYsdGhpcy5j''@;'; put 'put ''YWNoaW5nPSEwLHRoaXMucm93c19pbmNyZW1lbnQ9MTAwLHRoaXMuaW5pdGlhbF9yb3dzPTFlMyx0aGlzLmNsYXVzZUFtdD1bIiJdLHRoaXMubnVtT3BlcmF0b3JzPVsiPSIsIjwiLCI+IiwiPD0iLCI+PSIsIkJFVFdFRU4iLCJJTiIsIk5PVCBJTiIsIk5FIl0sdGhpcy5jaGFyT3BlcmF0b3Jz''@;'; put 'put ''PVsiPSIsIjwiLCI+IiwiPD0iLCI+PSIsIkNPTlRBSU5TIiwiSU4iLCJOT1QgSU4iLCJORSJdLHRoaXMubm90SW49ITEsdGhpcy5ub3RBcnI9ITAsdGhpcy53YXNCZXR3ZWVuPSExLHRoaXMud2hlcmVDbGF1c2VMb2FkaW5nPSExLHRoaXMuZHluYW1pY1doZXJlQ2xhdXNlPSEwLHRoaXMudXNl''@;'; put 'put ''UGlja2Vycz0hMSx0aGlzLnF1ZXJ5T2JqPXtlbGVtZW50czpbe2xvZ2ljOm51bGwsdHlwZTpudWxsLGRkdHlwZTpudWxsLHZhcmlhYmxlOm51bGwsb3BlcmF0b3I6bnVsbCx2YWx1ZTpudWxsLHZhbHVlVmFyaWFibGU6ITEsc3RhcnRyb3c6MCxyb3dzOjAsbm9iczowLHZhbHVlczpbXSxvcGVy''@;'; put 'put ''YXRvcnM6W119XSxjbGF1c2VMb2dpYzoiIixpbnZhbGlkQ2xhdXNlOiExfSx0aGlzLnNlbFZhcj17aW5kZXg6bnVsbCxmb3JtYXQ6bnVsbCx0eXBlOm51bGx9LHRoaXMuaW5PYmo9W3tjaGVja2VkOiExLHZhbHVlOm51bGx9XSx0aGlzLmdyb3VwTG9naWM9IkFORCIsdGhpcy5jbGF1c2VzPXtx''@;'; put 'put ''dWVyeU9iajpbdGhpcy5xdWVyeU9ial0sY2xhdXNlTG9naWM6W10sZ3JvdXBMb2dpYzp0aGlzLmdyb3VwTG9naWN9LHRoaXMubG9naWNPcGVyYXRvcnM9WyJBTkQiLCJPUiJdLHRoaXMucXVlcnlEYXRlVGltZT1bXSx0aGlzLmN1cnJlbnRDbGF1c2VJbmRleD0tMSx0aGlzLmN1cnJlbnRRdWVy''@;'; put 'put ''eUluZGV4PS0xLHRoaXMucGVuZGluZ0lOVmFsdWVzU2V0PW51bGwsdGhpcy5pbm5lcldpZHRoPXdpbmRvdy5zY3JlZW4ud2lkdGgsdGhpcy5pbm5lcldpZHRoPjc2OCYmKHRoaXMubm9Cb3JkZXI9ImJvcmRlci1sZWZ0OiAycHggc29saWQgZ3JheTsiKX1nZXRRdWVyeURhdGVUaW1lKGEsZCl7''@;'; put 'put ''bGV0IGg9dGhpcy5xdWVyeURhdGVUaW1lLmZpbmQoZj0+Zi5jbGF1c2VJbmRleD09PWEmJmYucXVlcnlJbmRleD09PWQpO2lmKCFoKXtjb25zdCBmPXRoaXMucXVlcnlEYXRlVGltZS5wdXNoKHtjbGF1c2VJbmRleDphLHF1ZXJ5SW5kZXg6ZCxkYXRlOiIiLHRpbWU6IiJ9KS0xO2g9dGhpcy5x''@;'; put 'put ''dWVyeURhdGVUaW1lW2ZdfXJldHVybiBofXVzZVBpY2tlcnNDaGFuZ2UoKXt0aGlzLnF1ZXJ5RGF0ZVRpbWU9W10sdGhpcy51c2VQaWNrZXJzJiZ0aGlzLmNsYXVzZXMucXVlcnlPYmouZm9yRWFjaChhPT57YS5lbGVtZW50cy5mb3JFYWNoKGQ9PntbIkRBVEVUSU1FIiwiVElNRSIsIkRBVEUi''@;'; put 'put ''XS5pbmNsdWRlcyhkLmRkdHlwZSkmJmQudmFsdWVWYXJpYWJsZSYmKGQudmFsdWU9IiIsZC52YWx1ZVZhcmlhYmxlPSExKX0pfSl9cmVzZXRGaWx0ZXIoKXt0aGlzLndoZXJlU3RyaW5nPXZvaWQgMCx0aGlzLndoZXJlQ2xhdXNlPXZvaWQgMCx0aGlzLnF1ZXJ5T2JqPXtlbGVtZW50czpbe2xv''@;'; put 'put ''Z2ljOm51bGwsdHlwZTpudWxsLGRkdHlwZTpudWxsLHZhcmlhYmxlOm51bGwsb3BlcmF0b3I6bnVsbCx2YWx1ZTpudWxsLHZhbHVlczpbXSxvcGVyYXRvcnM6W119XX0sdGhpcy5jbGF1c2VzPXtxdWVyeU9iajpbdGhpcy5xdWVyeU9ial0sY2xhdXNlTG9naWM6W10sZ3JvdXBMb2dpYzp0aGlz''@;'; put 'put ''Lmdyb3VwTG9naWN9LHRoaXMud2hlcmVDbGF1c2VGbighMCl9c2V0VG9HbG9iYWxzKCl7aWYoIXRoaXMuY2FjaGluZylyZXR1cm47bGV0IGE9IiI7ImhvbWUiPT09S24ucm9vdFBhcmFtfHwiZWRpdG9yIj09PUtuLnJvb3RQYXJhbT9hPXRoaXMudmlld2JveElkP2B2aWV3Ym94ZXMuJHt0aGlz''@;'; put 'put ''LnZpZXdib3hJZH1gOiJlZGl0b3IiOiJ2aWV3Ij09PUtuLnJvb3RQYXJhbSYmKGE9InZpZXdlciIpLHdjKEtuLGEpLmZpbHRlci5ncm91cExvZ2ljPXRoaXMuZ3JvdXBMb2dpYywic3RyaW5nIj09dHlwZW9mIHRoaXMud2hlcmVDbGF1c2UmJih3YyhLbixhKS5maWx0ZXIud2hlcmVDbGF1c2U9''@;'; put 'put ''dGhpcy53aGVyZUNsYXVzZSksInN0cmluZyI9PXR5cGVvZiB0aGlzLmxpYmRzJiYod2MoS24sYSkuZmlsdGVyLmxpYmRzPXRoaXMubGliZHMpLHdjKEtuLGEpLmZpbHRlci5jbGF1c2VzPXRoaXMuY2xhdXNlc31nZXRGcm9tR2xvYmFscygpe2lmKCF0aGlzLmNhY2hpbmcpcmV0dXJuO2xldCBh''@;'; put 'put ''PSIiOyJob21lIj09PUtuLnJvb3RQYXJhbXx8ImVkaXRvciI9PT1Lbi5yb290UGFyYW0/YT10aGlzLnZpZXdib3hJZD9gdmlld2JveGVzLiR7dGhpcy52aWV3Ym94SWR9YDoiZWRpdG9yIjoidmlldyI9PT1Lbi5yb290UGFyYW0mJihhPSJ2aWV3ZXIiKSx3YyhLbixhKS5maWx0ZXIuY29scy5s''@;'; put 'put ''ZW5ndGg+MCYmKHRoaXMuY29scz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHdjKEtuLGEpLmZpbHRlci5jb2xzKSkpLHdjKEtuLGEpLmZpbHRlci52YWxzLmxlbmd0aD4wJiYodGhpcy52YWxzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkod2MoS24sYSkuZmlsdGVyLnZhbHMpKSksIiIh''@;'; put 'put ''PT13YyhLbixhKS5maWx0ZXIuZ3JvdXBMb2dpYyYmKHRoaXMuZ3JvdXBMb2dpYz13YyhLbixhKS5maWx0ZXIuZ3JvdXBMb2dpYyx0aGlzLndoZXJlQ2xhdXNlPXdjKEtuLGEpLmZpbHRlci53aGVyZUNsYXVzZSx0aGlzLmxpYmRzPXdjKEtuLGEpLmZpbHRlci5saWJkcyx0aGlzLmNsYXVzZXM9''@;'; put 'put ''d2MoS24sYSkuZmlsdGVyLmNsYXVzZXMsdGhpcy53aGVyZUNsYXVzZUZuKCkpfXNldEdyb3VwTG9naWMoYSl7dGhpcy5ncm91cExvZ2ljPWEsdGhpcy5jbGF1c2VzLmdyb3VwTG9naWM9YSx0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRvR2xvYmFscygpfWRhdGVDaGFuZ2UoYSxkLGgs''@;'; put 'put ''Zix2KXtsZXQgTT10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEpzRGF0ZVRvU2FzRGF0ZShhKTsiQkVUV0VFTiI9PT1kLm9wZXJhdG9yJiZ2b2lkIDAhPT12JiYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLnZhbHVlW3ZdPU0pLHRoaXMuc2V0VmFyaWFibGVWYWx1ZXMo''@;'; put 'put ''TSxoLGYpfWRhdGVUaW1lQ2hhbmdlKGEsZCxoLGYpe2NvbnN0IHY9dGhpcy5nZXRRdWVyeURhdGVUaW1lKGgsZCk7aWYoIiI9PT12LmRhdGUpe2lmKCIiPT09YS52YWx1ZSlyZXR1cm47di5kYXRlPWEudmFsdWUuc3BsaXQoIjoiKVswXX1jb25zdCBNPXBhcnNlSW50KHYudGltZS5zcGxpdCgi''@;'; put 'put ''OiIpWzBdKSxEPXBhcnNlSW50KHYudGltZS5zcGxpdCgiOiIpWzFdKSxaPXBhcnNlSW50KHYudGltZS5zcGxpdCgiOiIpWzJdKXx8MDtsZXQgbmU9bmV3IERhdGUodi5kYXRlKSxjZT1uZXcgRGF0ZShuZS5nZXRGdWxsWWVhcigpLG5lLmdldE1vbnRoKCksbmUuZ2V0RGF0ZSgpLE0sRCxaKSxi''@;'; put 'put ''ZT10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEpzRGF0ZVRvU2FzRGF0ZShjZSwic2Vjb25kcyIpOyJCRVRXRUVOIj09PWEub3BlcmF0b3ImJnZvaWQgMCE9PWYmJih0aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udmFsdWVbZl09YmUpLHRoaXMuc2V0VmFyaWFibGVWYWx1''@;'; put 'put ''ZXMoYmUsZCxoKX10aW1lQ2hhbmdlKGEsZCxoLGYsdil7YT1hLnRhcmdldC52YWx1ZTtsZXQgYmU9NjAqcGFyc2VJbnQoYS5zcGxpdCgiOiIpWzBdKSo2MCs2MCpwYXJzZUludChhLnNwbGl0KCI6IilbMV0pKyhwYXJzZUludChhLnNwbGl0KCI6IilbMl0pfHwwKTsiQkVUV0VFTiI9PT1kLm9w''@;'; put 'put ''ZXJhdG9yJiZ2b2lkIDAhPT12JiYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLnZhbHVlW3ZdPWJlKSx0aGlzLnNldFZhcmlhYmxlVmFsdWVzKGJlLGgsZil9ZHluYW1pY1doZXJlQ2xhdXNlQ3JlYXRvcihhLGQpe2xldCBoPVtdO2lmKHRoaXMuY2xhdXNlcy5xdWVyeU9i''@;'; put 'put ''ai5sZW5ndGg+MXx8dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzLmxlbmd0aD4xKWZvcihsZXQgZj0wO2Y8dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aDtmKyspZm9yKGxldCB2PTA7djx0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHMubGVuZ3RoO3YrKyl7aWYo''@;'; put 'put ''Zj09PWEmJnY9PT1kfHxbbnVsbCx2b2lkIDBdLmluY2x1ZGVzKHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1t2XS52YXJpYWJsZSl8fFtudWxsLHZvaWQgMF0uaW5jbHVkZXModGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLm9wZXJhdG9yKXx8W251bGwsdm9p''@;'; put 'put ''ZCAwXS5pbmNsdWRlcyh0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0udmFsdWUpKWNvbnRpbnVlO2xldCBNPSIiO2NvbnN0IEQ9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLm9wZXJhdG9yLFo9dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRz''@;'; put 'put ''W3ZdLnZhcmlhYmxlOyJCRVRXRUVOIj09PUQ/TT1gJHt0aGlzLmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbdl0udmFsdWVbMF19IEFORCAke3RoaXMuY2xhdXNlcy5xdWVyeU9ialtmXVt2XS52YWx1ZVsxXX1gOiJJTiI9PT1EfHwiTk9UIElOIj09PUQ/KHRoaXMuY2xhdXNlcy5xdWVy''@;'; put 'put ''eU9ialtmXVt2XS52YWx1ZS5mb3JFYWNoKG5lPT57aWYobmUuY2hlY2tlZCl7bGV0IGNlPW5lLnZhbDsic3RyaW5nIiE9dHlwZW9mIGNlfHwoMCwkZy5pc1NwZWNpYWxNaXNzaW5nKShjZSk/TS5sZW5ndGg+MD9NKz1gLCR7Y2V9YDpNPWAoJHtjZX1gOk0ubGVuZ3RoPjA/TSs9YCwnJHtjZX0n''@;'; put 'put ''YDpNPWAoJyR7Y2V9J2B9fSksTS5sZW5ndGg+MCYmKE0rPSIpIikpOiIiPT09dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLnZhbHVlP009ImNoYXIiPT09dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLnR5cGU/IicgJyI6Ii4iOiJjaGFyIj09PXRoaXMu''@;'; put 'put ''Y2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1t2XS50eXBlJiYoTT1gJyR7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW3ZdLnZhbHVlfSdgKSxoLnB1c2goe0dST1VQX0xPR0lDOnRoaXMuY2xhdXNlcy5ncm91cExvZ2ljLFNVQkdST1VQX0xPR0lDOnRoaXMuY2xhdXNlcy5x''@;'; put 'put ''dWVyeU9ialtmXS5jbGF1c2VMb2dpY3x8IkFORCIsU1VCR1JPVVBfSUQ6ZixWQVJJQUJMRV9OTTpaLE9QRVJBVE9SX05NOkQsUkFXX1ZBTFVFOk18fHRoaXMuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1t2XS52YWx1ZX0pfXJldHVybiBofWdldFZhbHVlc0xvYWRNb3JlKGEsZCxoLGYp''@;'; put 'put ''e3ZhciB2PXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2NvbnN0IE09di5saWJkc3x8IiI7dHJ5e2lmKHZvaWQgMCE9PXYuY29scyl7Zm9yKGxldCBxZT0wO3FlPHYuY29scy5sZW5ndGg7cWUrKyl2LmNvbHNbcWVdLk5BTUU9PT1kJiYodi5zZWxWYXIuaW5kZXg9cWUpO2NvbnN0IEQ9di5j''@;'; put 'put ''b2xzW3Yuc2VsVmFyLmluZGV4XS5ERFRZUEUse3N0YXJ0cm93Oloscm93czpuZX09di5jbGF1c2VzLnF1ZXJ5T2JqW2ZdLmVsZW1lbnRzW2hdLGNlPXYucm93c19pbmNyZW1lbnQsYmU9WituZTtsZXQgRWU9W107di5keW5hbWljV2hlcmVDbGF1c2UmJihFZT12LmR5bmFtaWNXaGVyZUNsYXVz''@;'; put 'put ''ZUNyZWF0b3IoZixoKSk7Y29uc3QgQmU9WyJEQVRFVElNRSIsIlRJTUUiLCJEQVRFIl0uaW5jbHVkZXMoRCk7di5zYXNTdG9yZVNlcnZpY2UuZ2V0UXVlcnlWYWx1ZXMoZCxNLEVlLGJlLGNlKS50aGVuKHFlPT57Y29uc3QgbnQ9cWUudmFscyx7U1RBUlRST1c6bHQsUk9XUzptdCxOT0JTOkp0''@;'; put 'put ''fT1xZS5tZXRhWzBdO2lmKHYuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXS5zdGFydHJvdz1sdCx2LmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbaF0ucm93cz1tdCx2LmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbaF0ubm9icz1KdCwxPT09bnQubGVuZ3RoJiYiIj09''@;'; put 'put ''PW50WzBdLkZPUk1BVFRFRCYmIiI9PT1udFswXS5VTkZPUk1BVFRFRD9hLmxvYWRNb3JlRmluaXNoZWQoITEpOih2LmNsYXVzZXMucXVlcnlPYmpbZl0uZWxlbWVudHNbaF0udmFsdWVzLnB1c2goLi4ubnQubWFwKHRuPT57Y29uc3QgeG49Im51bSI9PT1xZS4kdmFscy52YXJzLlVORk9STUFU''@;'; put 'put ''VEVELnR5cGU7bGV0IHlpPXhuJiYoMCwkZy5pc1NwZWNpYWxNaXNzaW5nKSh0bi5VTkZPUk1BVFRFRCk/Ii4iK3RuLlVORk9STUFUVEVEOnRuLlVORk9STUFUVEVEO3JldHVybiB4biYmbnVsbD09PXlpJiYoeWk9Ii4iKSx7Zm9ybWF0dGVkOkJlP3RuLkZPUk1BVFRFRC5zcGxpdCgiLiIpWzBd''@;'; put 'put ''OnRuLkZPUk1BVFRFRCx1bmZvcm1hdHRlZDp5aX19KSksYS5sb2FkTW9yZUZpbmlzaGVkKEp0LXYuY2xhdXNlcy5xdWVyeU9ialtmXS5lbGVtZW50c1toXS52YWx1ZXMubGVuZ3RoPjApKSx2LndoZXJlQ2xhdXNlRm4oKSx2LnNldFRvR2xvYmFscygpLHYud2hlcmVDbGF1c2VMb2FkaW5nPSEx''@;'; put 'put ''LG51bGwhPT12LnBlbmRpbmdJTlZhbHVlc1NldCl7Y29uc3R7Y2xhdXNlSW5kZXg6eW4scXVlcnlJbmRleDpDbn09di5wZW5kaW5nSU5WYWx1ZXNTZXQ7di5zZXRJTlZhbHVlcyh5bixDbiksdi5wZW5kaW5nSU5WYWx1ZXNTZXQ9bnVsbH12LmNkZi5kZXRlY3RDaGFuZ2VzKCl9KS5jYXRjaChx''@;'; put 'put ''ZT0+e3Yud2hlcmVDbGF1c2VMb2FkaW5nPSExfSl9fWNhdGNoKEQpe3YuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigicHVibGljL2dldGNvbHZhbHMiLEQpfX0pKCl9Z2V0VmFsdWVzKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtmLndoZXJlQ2xhdXNl''@;'; put 'put ''TG9hZGluZz0hMDtsZXQgdj0iIjt2b2lkIDAhPT1mLmxpYmRzJiYodj1mLmxpYmRzKSxmLmNsZWFyVmFsdWVzKGQsaCksZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnZhbHVlcz1bXSxmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udmFsdWU9IiIsZi5jbGF1c2Vz''@;'; put 'put ''LnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLm9wZXJhdG9yPSI9IixmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udmFyaWFibGU9YTt0cnl7aWYodm9pZCAwIT09Zi5jb2xzKXtmb3IobGV0IG5lPTA7bmU8Zi5jb2xzLmxlbmd0aDtuZSsrKWYuY29sc1tuZV0uTkFNRT09PWEmJihm''@;'; put 'put ''LnNlbFZhci5pbmRleD1uZSk7Y29uc3QgTT1mLmNvbHNbZi5zZWxWYXIuaW5kZXhdLkREVFlQRTtmLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0uZGR0eXBlPU0sZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnR5cGU9Zi5jb2xzW2Yuc2VsVmFyLmluZGV4XS5UWVBF''@;'; put 'put ''LGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS5vcGVyYXRvcnM9Im51bSI9PT1mLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbZF0udHlwZT9mLm51bU9wZXJhdG9yczpmLmNoYXJPcGVyYXRvcnM7bGV0IEQ9W107Zi5keW5hbWljV2hlcmVDbGF1c2UmJihEPWYuZHluYW1p''@;'; put 'put ''Y1doZXJlQ2xhdXNlQ3JlYXRvcihoLGQpKTtjb25zdCBaPVsiREFURVRJTUUiLCJUSU1FIiwiREFURSJdLmluY2x1ZGVzKE0pO2Yuc2FzU3RvcmVTZXJ2aWNlLmdldFF1ZXJ5VmFsdWVzKGEsdixELDEsZi5pbml0aWFsX3Jvd3MpLnRoZW4obmU9Pntjb25zdCBjZT1uZS52YWxzLHtTVEFSVFJP''@;'; put 'put ''VzpiZSxST1dTOkVlLE5PQlM6QmV9PW5lLm1ldGFbMF07aWYoZi5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnN0YXJ0cm93PWJlLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS5yb3dzPUVlLGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS5ub2JzPUJl''@;'; put 'put ''LGYuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1tkXS52YWx1ZXM9Y2UubWFwKHFlPT57Y29uc3QgbnQ9Im51bSI9PT1uZS4kdmFscy52YXJzLlVORk9STUFUVEVELnR5cGU7bGV0IG10PW50JiYoMCwkZy5pc1NwZWNpYWxNaXNzaW5nKShxZS5VTkZPUk1BVFRFRCk/Ii4iK3FlLlVORk9S''@;'; put 'put ''TUFUVEVEOnFlLlVORk9STUFUVEVEO3JldHVybiBudCYmbnVsbD09PW10JiYobXQ9Ii4iKSx7Zm9ybWF0dGVkOlo/cWUuRk9STUFUVEVELnNwbGl0KCIuIilbMF06cWUuRk9STUFUVEVELHVuZm9ybWF0dGVkOm10fX0pLnNsaWNlKDAsMmUzKSxmLndoZXJlQ2xhdXNlRm4oKSxmLnNldFRvR2xv''@;'; put 'put ''YmFscygpLGYud2hlcmVDbGF1c2VMb2FkaW5nPSExLG51bGwhPT1mLnBlbmRpbmdJTlZhbHVlc1NldCl7Y29uc3R7Y2xhdXNlSW5kZXg6cWUscXVlcnlJbmRleDpudH09Zi5wZW5kaW5nSU5WYWx1ZXNTZXQ7Zi5zZXRJTlZhbHVlcyhxZSxudCksZi5wZW5kaW5nSU5WYWx1ZXNTZXQ9bnVsbH1m''@;'; put 'put ''LmNkZi5kZXRlY3RDaGFuZ2VzKCl9KS5jYXRjaChuZT0+e2Yud2hlcmVDbGF1c2VMb2FkaW5nPSExfSl9fWNhdGNoKE0pe2YuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigicHVibGljL2dldGNvbHZhbHMiLE0pfX0pKCl9Z2V0bG9naWMoYSl7dGhpcy5sb2dpYz1hLHRoaXMud2hl''@;'; put 'put ''cmVDbGF1c2VGbigpfXNldExvZ2ljKCl7dGhpcy53aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX1pc0FycihhKXtyZXR1cm4gYSBpbnN0YW5jZW9mIEFycmF5JiZhLmxlbmd0aD4wJiZ0eXBlb2YgYVswXS5jaGVja2VkPCJ1In1zZWxlY3RlZExhYmVsQ2hhbmdlKGEsZCl7ZC52''@;'; put 'put ''YWx1ZVZhcmlhYmxlPSJWYXJpYWJsZSI9PT1hLGQudmFsdWU9IiIsdGhpcy53aGVyZUNsYXVzZUZuKCl9dmFyaWFibGVJbnB1dENoYW5nZShhLGQsaCxmKXt0aGlzLmdldFZhbHVlcyhhLGQsaCl9c2V0VmFyaWFibGVWYWx1ZXMoYSxkLGgpe2xldCBmPXRoaXMuY2xhdXNlcy5xdWVyeU9ialto''@;'; put 'put ''XS5lbGVtZW50c1tkXS5vcGVyYXRvcjsiQkVUV0VFTiIhPT1mJiYiSU4iIT09ZiYmIk5PVCBJTiIhPT1mJiYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2RdLnZhbHVlPWEudG9TdHJpbmcoKSksdGhpcy53aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX1zZXRW''@;'; put 'put ''YXJpYWJsZU9wZXJhdG9yKGEsZCxoKXtsZXQgZj10aGlzLmNsYXVzZXMucXVlcnlPYmpbaF0uZWxlbWVudHNbYV0udmFsdWU7ZiBpbnN0YW5jZW9mIEFycmF5JiYiSU4iIT09ZCYmIk5PVCBJTiIhPT1kJiYoZj1mIGluc3RhbmNlb2YgQXJyYXkmJjI9PT1mLmxlbmd0aCYmInN0cmluZyI9PXR5''@;'; put 'put ''cGVvZiBmWzBdP2ZbMF06IiIpLHRoaXMuY2xlYXJWYWx1ZXNPcGVyYXRvcihhLGgpLHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1thXS5vcGVyYXRvcj1kLCgiPSI9PT1kfHwiPiI9PT1kfHwiPCI9PT1kfHwiPD0iPT09ZHx8Ij49Ij09PWR8fCJORSI9PT1kKSYmKHRoaXMuY2xh''@;'; put 'put ''dXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1thXS52YWx1ZT1mKSwiQkVUV0VFTiI9PT1kJiYodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2hdLmVsZW1lbnRzW2FdLnZhbHVlPVtdLHRoaXMuY2xhdXNlcy5xdWVyeU9ialtoXS5lbGVtZW50c1thXS52YWx1ZS5wdXNoKGYpLHRoaXMuY2xhdXNlcy5x''@;'; put 'put ''dWVyeU9ialtoXS5lbGVtZW50c1thXS52YWx1ZS5wdXNoKCIiKSksKCJJTiI9PT1kfHwiTk9UIElOIj09PWQpJiZ0aGlzLnNldElOVmFsdWVzKGgsYSksdGhpcy53aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX1zZXRJTlZhbHVlcyhhLGQpe2NvbnN0IGg9W10sZj10aGlzLmNs''@;'; put 'put ''YXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHNbZF0udmFsdWVzO2YubGVuZ3RoPDEmJih0aGlzLnBlbmRpbmdJTlZhbHVlc1NldD17Y2xhdXNlSW5kZXg6YSxxdWVyeUluZGV4OmR9KTtmb3IobGV0IHY9MDt2PGYubGVuZ3RoO3YrKyloLnB1c2goe2NoZWNrZWQ6ITEsdmFsOmZbdl0uZm9ybWF0''@;'; put 'put ''dGVkfSk7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqW2FdLmVsZW1lbnRzW2RdLnZhbHVlPWh9Y2xlYXJWYWx1ZXMoYSxkKXt0aGlzLmNsYXVzZXMucXVlcnlPYmpbZF0uZWxlbWVudHNbYV0udmFsdWU9IiJ9Y2xlYXJWYWx1ZXNPcGVyYXRvcihhLGQpe2xldCBoPXRoaXMuY2xhdXNlcy5xdWVyeU9i''@;'; put 'put ''altkXS5lbGVtZW50c1thXS5vcGVyYXRvcjsoIkJFVFdFRU4iPT09aHx8IklOIj09PWh8fCJOT1QgSU4iPT09aHx8IkNPTlRBSU5TIj09PWgpJiZ0aGlzLmNsZWFyVmFsdWVzKGEsZCl9aGFzSW52YWxpZENsdWFzZShhKXtmb3IobGV0IGQgb2YgYSlpZihkLmludmFsaWRDbGF1c2U9ITEsIiI9''@;'; put 'put ''PT1kLnZhbHVlJiYiTkUiIT09ZC5vcGVyYXRvciYmIkNPTlRBSU5TIiE9PWQub3BlcmF0b3J8fG51bGw9PT1kLnZhcmlhYmxlfHxudWxsPT09ZC5vcGVyYXRvcnx8bnVsbD09PWQudmFsdWUpcmV0dXJuIGQuaW52YWxpZENsYXVzZT0hMCwhMDtyZXR1cm4gYS5pbnZhbGlkQ2xhdXNlPSExLCEx''@;'; put 'put ''fWhhc0ludmFsaWRHcm91cENsdWFzZSgpe2ZvcihsZXQgYT0wO2E8dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aDthKyspe2lmKHRoaXMuaGFzSW52YWxpZENsdWFzZSh0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHMpKXJldHVybiB0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0u''@;'; put 'put ''aW52YWxpZENsYXVzZT0hMCwhMDt0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uaW52YWxpZENsYXVzZT0hMX1yZXR1cm4hMX1hZGRDbGF1c2UoYSl7aWYodGhpcy5oYXNJbnZhbGlkQ2x1YXNlKHRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5lbGVtZW50cykpcmV0dXJuIHZvaWQgdGhpcy5ldmVu''@;'; put 'put ''dFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRXJyb3IiLCJDYW5ub3QgYWRkIG5ldyBjbGF1c2UsIHdoZW4gb25lIG9yIG1vcmUgY2xhdXNlcyBhcmUgaW52YWxpZCBvciBlbXB0eS4iKTt0aGlzLmNsYXVzZUFtdC5wdXNoKCIiKSx0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uZWxlbWVudHMucHVz''@;'; put 'put ''aCh7bG9naWM6bnVsbCx0eXBlOm51bGwsdmFyaWFibGU6bnVsbCxvcGVyYXRvcjpudWxsLHZhbHVlOm51bGwsdmFsdWVzOltdLG9wZXJhdG9yczpbXX0pO2xldCBkPXRoaXMuY2xhdXNlcy5xdWVyeU9ialthXS5jbGF1c2VMb2dpYzt0aGlzLmNsYXVzZXMucXVlcnlPYmpbYV0uY2xhdXNlTG9n''@;'; put 'put ''aWM9dHlwZW9mIGQ+InUiPyJBTkQiOiJPUiI9PT1kPyJPUiI6IkFORCIsdGhpcy53aGVyZUNsYXVzZUZuKCksdGhpcy5zZXRUb0dsb2JhbHMoKX1hZGRHcm91cENsYXVzZSgpe3RoaXMuaGFzSW52YWxpZEdyb3VwQ2x1YXNlKCk/dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiRXJy''@;'; put 'put ''b3IiLCJDYW5ub3QgYWRkIG5ldyBjbGF1c2UsIHdoZW4gb25lIG9yIG1vcmUgY2xhdXNlcyBhcmUgaW52YWxpZCBvciBlbXB0eS4iKToodGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLnB1c2goe2VsZW1lbnRzOlt7bG9naWM6bnVsbCx0eXBlOm51bGwsdmFyaWFibGU6bnVsbCxvcGVyYXRvcjpudWxs''@;'; put 'put ''LHZhbHVlOm51bGwsdmFsdWVzOltdLG9wZXJhdG9yczpbXX1dfSksdGhpcy5zZXRUb0dsb2JhbHMoKSl9aXNJbkh0bWxDb2xsZWN0aW9uKGEsZCl7Zm9yKGxldCBoPTA7aDxkLmxlbmd0aDtoKyspaWYoZFtoXS52YWx1ZT09PWEpcmV0dXJuITA7cmV0dXJuITF9cmVtb3ZlR3JvdXBDbGF1c2Uo''@;'; put 'put ''YSl7dGhpcy5jbGF1c2VzLnF1ZXJ5T2JqLnNwbGljZShhLDEpLHRoaXMud2hlcmVDbGF1c2VGbigpfXJlbW92ZUNsYXVzZShhLGQpe3RoaXMuY2xhdXNlcy5xdWVyeU9ialtkXS5lbGVtZW50cy5zcGxpY2UoYSwxKSx0aGlzLndoZXJlQ2xhdXNlRm4oKSx0aGlzLnNldFRvR2xvYmFscygpfXdo''@;'; put 'put ''ZXJlQ2xhdXNlRm4oYT0hMSl7Y29uc3QgZD10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuY2xhdXNlcyk7aWYoYSYmKGQucXVlcnlPYmpbMF0uZWxlbWVudHM9W10pLHZvaWQgMCE9PXRoaXMubGliZHMpe2xldCBoPXRoaXMuc2FzU3RvcmVTZXJ2aWNlLndoZXJlQ2xhdXNlQ3Jl''@;'; put 'put ''YXRvcihkLHRoaXMuZ3JvdXBMb2dpYyx0aGlzLmxpYmRzKTthfHwodGhpcy53aGVyZUNsYXVzZT1oLndoZXJlQ2xhdXNlLHRoaXMud2hlcmVTdHJpbmc9aC5zdHJpbmcpfX1uZ0FmdGVyVmlld0luaXQoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLl9yZW1vdmVRcnk9YS5z''@;'; put 'put ''YXNTdG9yZVNlcnZpY2UucmVtb3ZlUXVlcnkuc3Vic2NyaWJlKGQ9PnthLmNsYXVzZXMucXVlcnlPYmoubGVuZ3RoPj0xJiYoYS5jbGF1c2VzLnF1ZXJ5T2JqLmxlbmd0aD0xLGEuY2xhdXNlcy5xdWVyeU9ialswXS5lbGVtZW50cy5sZW5ndGg+PTEmJihhLmNsYXVzZXMucXVlcnlPYmpbMF0u''@;'; put 'put ''ZWxlbWVudHMubGVuZ3RoPTEsYS5jbGF1c2VzLnF1ZXJ5T2JqWzBdLmVsZW1lbnRzPVtdLGEuY2xhdXNlcy5xdWVyeU9ialswXS5lbGVtZW50cy5wdXNoKHtsb2dpYzpudWxsLHR5cGU6bnVsbCx2YXJpYWJsZTpudWxsLG9wZXJhdG9yOm51bGwsdmFsdWU6bnVsbCx2YWx1ZXM6W10sb3BlcmF0''@;'; put 'put ''b3JzOltdfSksYS53aGVyZUNsYXVzZUZuKCkpKX0pLGEuY29sdW1uc1N1Yj1hLnNhc1N0b3JlU2VydmljZS5jb2x1bW5zLnN1YnNjcmliZShkPT57bGV0IGg9ZC5kYXRhLmNvbHM7ImhvbWUiIT09S24ucm9vdFBhcmFtJiYiZWRpdG9yIiE9PUtuLnJvb3RQYXJhbXx8KGEuY29scz1oLGEubGli''@;'; put 'put ''ZHM9ZC5saWJkcyxLbi5lZGl0b3IuZmlsdGVyLmNvbHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShoKSkpLCJ2aWV3Ij09PUtuLnJvb3RQYXJhbSYmS24udmlld2VyLmZpbHRlci5jb2xzLmxlbmd0aDwxJiYoYS5jb2xzPWgsYS5saWJkcz1kLmxpYmRzLEtuLnZpZXdlci5maWx0ZXIuY29s''@;'; put 'put ''cz1KU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGgpKSksYS5saWJkc3x8KGEubGliZHM9ZC5saWJkcyl9KSxhLnZhbHVlc1N1Yj1hLnNhc1N0b3JlU2VydmljZS52YWx1ZXMuc3Vic2NyaWJlKGQ9PnsoImhvbWUiPT09S24ucm9vdFBhcmFtfHwiZWRpdG9yIj09PUtuLnJvb3RQYXJhbSkmJktu''@;'; put 'put ''LmVkaXRvci5maWx0ZXIudmFscy5sZW5ndGg8MSYmKGEudmFscz1kLnZhbHMsS24uZWRpdG9yLmZpbHRlci52YWxzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZC52YWxzKSkpLCJ2aWV3Ij09PUtuLnJvb3RQYXJhbSYmS24udmlld2VyLmZpbHRlci52YWxzLmxlbmd0aDwxJiYoYS52YWxz''@;'; put 'put ''PWQudmFscyxLbi52aWV3ZXIuZmlsdGVyLnZhbHM9SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkLnZhbHMpKSl9KX0pKCl9b25BdXRvY29tcGxldGVMb2FkaW5nTW9yZShhLGQsaCxmKXt0aGlzLmdldFZhbHVlc0xvYWRNb3JlKGEsZCxoLGYpfW5nQWZ0ZXJDb250ZW50SW5pdCgpe3RoaXMu''@;'; put 'put ''Z2V0RnJvbUdsb2JhbHMoKSxzZXRUaW1lb3V0KCgpPT57bGV0IGE9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3ZhbHNfdmFyX2lkMF8wIik7YSYmYS5mb2N1cygpfSw1MDApfW5nT25EZXN0cm95KCl7dGhpcy5jb2x1bW5zU3ViJiZ0aGlzLmNvbHVtbnNTdWIudW5zdWJzY3JpYmUoKSx0aGlz''@;'; put 'put ''LnZhbHVlc1N1YiYmdGhpcy52YWx1ZXNTdWIudW5zdWJzY3JpYmUoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShWaCksR2UocGMpLEdlKEd1KSxHZSh4cykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6''@;'; put 'put ''W1siYXBwLXF1ZXJ5Il1dLGlucHV0czp7Y2FjaGluZzoiY2FjaGluZyIsdmlld2JveElkOiJ2aWV3Ym94SWQifSxmZWF0dXJlczpbcG8oW3twcm92aWRlOk9mLHVzZVZhbHVlOiJlbi1HQiJ9XSldLGRlY2xzOjM4LHZhcnM6MTEsY29uc3RzOltbInBpY2tlciIsIiJdLFsibm90UGlja2VyIiwi''@;'; put 'put ''Il0sWyJub3RQaWNrZXJSYW5nZSIsIiJdLFsiY2hlY2tib3hWYWx1ZXMiLCIiXSxbMSwiY2xyLWZsZXgtcm93IiwiY2xyLWZvcm0tY29udHJvbCIsIm0tMCJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiXSxbImNsckNoZWNrYm94IiwiIiwidHlwZSIsImNoZWNrYm94IiwzLCJuZ01vZGVs''@;'; put 'put ''Q2hhbmdlIiwibmdNb2RlbCJdLFsxLCJjbHItY29udHJvbC1sYWJlbCJdLFsxLCJjbHItY29udHJvbC1jb250YWluZXIiLCJtbC0xNSJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLCJpZCIsInVzZVBpY2tlcnMiLDMsIm5nTW9kZWxDaGFuZ2UiLCJjaGFuZ2UiLCJuZ01v''@;'; put 'put ''ZGVsIl0sWzEsImNsci1yb3ciXSxbMSwic2VsZWN0IiwiY2xyLWNvbC1tZC0yIiwibWItMzAiXSxbImNsclNlbGVjdCIsIiIsMywibmdNb2RlbENoYW5nZSIsImRpc2FibGVkIiwibmdNb2RlbCJdLFszLCJzZWxlY3RlZCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNsci1jb2wtbWQtMTAi''@;'; put 'put ''LCJtYi0zMCJdLFsxLCJsaW5lLW51bWJlcnMiLCJsYW5ndWFnZS1tYXJrdXAiXSxbImNsYXNzIiwicHJvZ3Jlc1N0YXRpYyBwcm9ncmVzcyBsb29wIiw0LCJuZ0lmIl0sWzEsImxhbmd1YWdlLXNxbCJdLFsxLCJjb250ZW50Il0sWzEsImNsYXVzZXMtY29udGFpbmVyIiwiY2xyLWNvbC1tZC0x''@;'; put 'put ''MiJdLFs0LCJuZ0lmIl0sWyJjbGFzcyIsImNsYXVzZS1yb3ciLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJzZWxlY3RlZCJdLFsxLCJwcm9ncmVzU3RhdGljIiwicHJvZ3Jlc3MiLCJsb29wIl0sWzEsImNsYXVzZS1yb3ciXSxbMSwiY2xhdXNlLWxvZ2ljIiwiY2xyLWNvbC1tZC0yIl0sWzEs''@;'; put 'put ''InNlbGVjdCJdLFsiY2xyU2VsZWN0IiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCIsImRpc2FibGVkIl0sWyJjbGFzcyIsImJ0biBidG4tcHJpbWFyeSBidG4tYmxvY2sgbXQtMTAiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImNsYXVzZS1xdWVyeSIsImNsci1jb2wtbWQtMTAiXSxb''@;'; put 'put ''InNoYXBlIiwidGltZXMiLCJzaXplIiwiMzYiLCJjbGFzcyIsInJlbW92ZS1ncm91cC1jbGF1c2UtYnV0dG9uIiwzLCJjbGljayIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItcm93IiwzLCJpbnZhbGlkLWNsYXVzZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImJ0biIsImJ0bi1wcmltYXJ5''@;'; put 'put ''IiwiYnRuLWJsb2NrIiwibXQtMTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsInBsdXMiXSxbInNoYXBlIiwidGltZXMiLCJzaXplIiwiMzYiLDEsInJlbW92ZS1ncm91cC1jbGF1c2UtYnV0dG9uIiwzLCJjbGljayJdLFsxLCJ2YXJpYWJsZS1jb2wiLCJmb3JtLWdyb3VwIiwiY2xyLWNvbC1tZC0z''@;'; put 'put ''Il0sWzEsImRhdGFsaXN0LXdyYXBwZXIiXSxbImxhYmVsIiwiVmFyaWFibGUiLDMsInZhbHVlQ2hhbmdlIiwib25JbnB1dEV2ZW50IiwiaWQiLCJpbnB1dElkIiwiZW1pdE9ubHlTZWxlY3RlZCIsInZhbHVlIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJvcGVyYXRvci1jb2wiLCJmb3Jt''@;'; put 'put ''LWdyb3VwIiwiY2xyLWNvbC1tZC0zIl0sWyJjbHJTZWxlY3QiLCIiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWyJjbGFzcyIsInZhbHVlLWNvbCBmb3JtLWdyb3VwIGNsci1jb2wtbWQtMyIsNCwibmdWYXIiXSxbMSwiY2xhdXNlLWJ1dHRvbnMiLCJjbHItY29sLW1kLTIiLCJidG4t''@;'; put 'put ''Z3JvdXAiXSxbMSwiYnRuIiwiYnRuLXdhcm5pbmciLCJidG4tYmxvY2siLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwibWludXMiXSxbMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLCJidG4tYmxvY2siLDMsImNsaWNrIl0sWzEsInZhbHVlLWNvbCIsImZvcm0tZ3JvdXAiLCJjbHItY29s''@;'; put 'put ''LW1kLTMiXSxbImNsYXNzIiwiY2hlY2tib3gtdmFscyIsNCwibmdJZiJdLFsiY2xhc3MiLCJzaW5nbGUtZmllbGQtdmFscyIsNCwibmdJZiJdLFsiY2xhc3MiLCJyYW5nZS12YWxzIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNvbnRhaW5zLXZhbHMiLDQsIm5nSWYiXSxbMSwiY2hlY2tib3gtdmFs''@;'; put 'put ''cyJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLWxpbmsiLDMsImNsaWNrIl0sWzQsIm5nVGVtcGxhdGVPdXRsZXQiLCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCJdLFsxLCJzaW5nbGUtZmllbGQtdmFscyJdLFsxLCJyYW5nZS12YWxzIl0sWzEsImZyb20iXSxbMSwidG8iXSxbMSwi''@;'; put 'put ''Y29udGFpbnMtdmFscyJdLFsidHlwZSIsInRleHQiLDEsImlucHV0LXZhbCIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMywibmdTd2l0Y2giXSxbNCwibmdTd2l0Y2hDYXNlIl0sWyJsYWJlbCIsIlZhbHVlIiwidHlwZSIsImRhdGUiLDMsInZhbHVlQ2hhbmdlIiwiZGlzYWJsZVNv''@;'; put 'put ''ZnRzZWxlY3QiLCJpbnB1dElkIiwidmFsdWUiXSxbImxhYmVsIiwiVmFsdWUiLCJ0eXBlIiwiZGF0ZSIsMywidmFsdWVDaGFuZ2UiLCJvbklucHV0RXZlbnQiLCJkaXNhYmxlU29mdHNlbGVjdCIsImlucHV0SWQiLCJ2YWx1ZSJdLFsidHlwZSIsInRpbWUiLDMsInZhbHVlQ2hhbmdlIiwib25J''@;'; put 'put ''bnB1dEV2ZW50IiwiZGlzYWJsZVNvZnRzZWxlY3QiLCJpbnB1dElkIiwidmFsdWUiXSxbImxhYmVsIiwiVmFsdWUiLCJ0eXBlIiwidGltZSIsMywib25JbnB1dEV2ZW50IiwiZGlzYWJsZVNvZnRzZWxlY3QiLCJpbnB1dElkIiwidmFsdWUiXSxbImxhYmVsIiwiVmFsdWUiLDMsInNlbGVjdGVk''@;'; put 'put ''TGFiZWxDaGFuZ2UiLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCIsIm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUiLCJzZWNvbmRMYWJlbCIsImVtaXRPbmx5U2VsZWN0ZWQiLCJpbnB1dElkIiwidmFsdWUiLCJlbmFibGVMb2FkTW9yZSJdLFszLCJ2YWx1ZSIsNCwibmdGb3IiLCJuZ0Zv''@;'; put 'put ''ck9mIl0sWzMsInZhbHVlIl0sWzMsInZhbHVlIiw0LCJuZ0lmIl0sWyJsYWJlbCIsIlZhbHVlIiwzLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCIsIm9uQXV0b2NvbXBsZXRlTG9hZGluZ01vcmUiLCJpbnB1dElkIiwidmFsdWUiLCJlbmFibGVMb2FkTW9yZSIsImRpc2FibGVkIl0sWzEs''@;'; put 'put ''ImluLXZhbHVlcy1tb2RhbCIsMywiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWyJjbGFzcyIsIm5vLXZhbHVlcyIsNCwibmdJZiJdLFsiY2xhc3MiLCJmb3JtLWJsb2NrIiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWZv''@;'; put 'put ''b3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWzEsIm5vLXZhbHVlcyJdLFsxLCJmb3JtLWJsb2NrIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJDaGVja2JveCIsIiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXV0sdGVtcGxhdGU6''@;'; put 'put ''ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0IGY9T24oKTtkZSgwLCJkaXYiLDQpKDEsImRpdiIsNSkoMiwiY2xyLWNoZWNrYm94LXdyYXBwZXIiKSgzLCJpbnB1dCIsNikscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSx2aShoLmR5bmFtaWNXaGVyZUNsYXVz''@;'; put 'put ''ZSxNKXx8KGguZHluYW1pY1doZXJlQ2xhdXNlPU0pLEN0KE0pfSksaGUoKSxkZSg0LCJsYWJlbCIsNyksTGUoNSwiRHluYW1pYyB3aGVyZSBjbGF1c2UiKSxoZSgpKCkoKSxkZSg2LCJkaXYiLDgpKDcsImNsci1jaGVja2JveC13cmFwcGVyIikoOCwiaW5wdXQiLDkpLHBpKCJuZ01vZGVsQ2hh''@;'; put 'put ''bmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksdmkoaC51c2VQaWNrZXJzLE0pfHwoaC51c2VQaWNrZXJzPU0pLEN0KE0pfSksRnQoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC51c2VQaWNrZXJzQ2hhbmdlKCkpfSksaGUoKSxkZSg5LCJsYWJlbCIsNyksTGUoMTAs''@;'; put 'put ''IiBVc2UgcGlja2VycyAiKSxoZSgpKCkoKSgpLGRlKDExLCJkaXYiLDEwKSgxMiwiZGl2IiwxMSkoMTMsImNsci1zZWxlY3QtY29udGFpbmVyIikoMTQsImxhYmVsIiksTGUoMTUsIkdyb3VwIGxvZ2ljIiksaGUoKSxkZSgxNiwic2VsZWN0IiwxMikscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0''@;'; put 'put ''aW9uKE0pe3JldHVybiB3dChmKSx2aShoLmdyb3VwTG9naWMsTSl8fChoLmdyb3VwTG9naWM9TSksQ3QoTSl9KSxGdCgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5zZXRHcm91cExvZ2ljKGguZ3JvdXBMb2dpYykpfSksZ3QoMTcsUTV0LDIsMiwib3B0aW9u''@;'; put 'put ''IiwxMyksaGUoKSgpKCksZGUoMTgsImRpdiIsMTQpKDE5LCJwcmUiLDE1KSxMZSgyMCwiICAgICAgIiksZ3QoMjEsZW10LDQsMCwiZGl2IiwxNiksTGUoMjIsIlxuXG4gICAgICAiKSxkZSgyMywiY29kZSIsMTcpLExlKDI0KSxoZSgpLExlKDI1LCJcbiAgICAiKSxoZSgpKCkoKSxkZSgyNiwi''@;'; put 'put ''ZGl2IiwxOCkoMjcsImRpdiIsMTkpLGd0KDI4LHRtdCwxLDAsImRpdiIsMjApKDI5LHZtdCwxNSw4LCJkaXYiLDIxKSxoZSgpKCksZ3QoMzAsd210LDQsNCwibmctdGVtcGxhdGUiLG51bGwsMCxfdSkoMzIsVG10LDMsNywibmctdGVtcGxhdGUiLG51bGwsMSxfdSkoMzQsa210LDIsNSwibmct''@;'; put 'put ''dGVtcGxhdGUiLG51bGwsMixfdSkoMzYsTG10LDksNCwibmctdGVtcGxhdGUiLG51bGwsMyxfdSl9MiZkJiYoZmUoMyksZmkoIm5nTW9kZWwiLGguZHluYW1pY1doZXJlQ2xhdXNlKSxmZSg1KSxmaSgibmdNb2RlbCIsaC51c2VQaWNrZXJzKSxmZSg4KSx4ZSgiZGlzYWJsZWQiLChudWxsPT1o''@;'; put 'put ''LmNsYXVzZXN8fG51bGw9PWguY2xhdXNlcy5xdWVyeU9iaj9udWxsOmguY2xhdXNlcy5xdWVyeU9iai5sZW5ndGgpPDEpLGZpKCJuZ01vZGVsIixoLmdyb3VwTG9naWMpLGZlKCkseGUoIm5nRm9yT2YiLGgubG9naWNPcGVyYXRvcnMpLGZlKDQpLHhlKCJuZ0lmIixoLndoZXJlQ2xhdXNlTG9h''@;'; put 'put ''ZGluZyksZmUoMyksX3IoaC53aGVyZUNsYXVzZSksZmUoMykseHIoImNsci1jb2wtbWQtMTAiLChudWxsPT1oLmNsYXVzZXN8fG51bGw9PWguY2xhdXNlcy5xdWVyeU9iaj9udWxsOmguY2xhdXNlcy5xdWVyeU9iai5sZW5ndGgpPjEpLGZlKCkseGUoIm5nSWYiLChudWxsPT1oLmNsYXVzZXN8''@;'; put 'put ''fG51bGw9PWguY2xhdXNlcy5xdWVyeU9iaj9udWxsOmguY2xhdXNlcy5xdWVyeU9iai5sZW5ndGgpPjEpLGZlKCkseGUoIm5nRm9yT2YiLGguY2xhdXNlcy5xdWVyeU9iaikpfSxkZXBlbmRlbmNpZXM6W3NzLHlvLE4xLGIyLGlwLE9sLG91LEt1LHVzLFcxLFB5LERkLFp5LFV5LFVmLFpmLFFs''@;'; put 'put ''LEIxLHpmLFFzLFlzLGw2ZSx3dyxHNXQsJDV0XSxzdHlsZXM6WydAY2hhcnNldCAiVVRGLTgiOyAgYm9keVtjZHMtdGhlbWU9ZGFya10gLmNsYXVzZS1sb2dpY3tiYWNrZ3JvdW5kOiMxOTJhMzB9ICBib2R5W2Nkcy10aGVtZT1kYXJrXSAuY2xhdXNlLXF1ZXJ5e2JhY2tncm91bmQ6IzI2M2U0''@;'; put 'put ''OH0gIGJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAuY2xhdXNlLWxvZ2lje2JhY2tncm91bmQ6I2U5ZTllOX0gIGJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAuY2xhdXNlLXF1ZXJ5e2JhY2tncm91bmQ6I2ZiZjhmOH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4fS5jb250ZW50''@;'; put 'put ''W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAg''@;'; put 'put ''LmNsYXVzZS1sb2dpY1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3BhZGRpbmc6MTVweH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0l''@;'; put 'put ''Q09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzozMHB4IDAgMjBweCAyMHB4O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwb3NpdGlvbjpyZWxhdGl2ZX0uY29udGVudFtfbmdjb250ZW50LSVD''@;'; put 'put ''T01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gPiAuY2xyLXJvd1tfbmdjb250ZW50LSVDT01QJV17anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LmNvbnRlbnRbX25nY29udGVudC0lQ09N''@;'; put 'put ''UCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdID4gLmNsci1yb3dbX25nY29udGVudC0lQ09NUCVdOm5vdCg6bGFzdC1jaGlsZCl7cGFkZGluZy1ib3R0b206MTVweDttYXJnaW4tYm90dG9tOjE1cHg7''@;'; put 'put ''Ym9yZGVyLWJvdHRvbToxcHggc29saWQgcmdiYSgwLDAsMCwuMTYpfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yZW1vdmUtZ3JvdXAtY2xhdXNl''@;'; put 'put ''LWJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MTBweDtjb2xvcjpncmF5fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRl''@;'; put 'put ''bnQtJUNPTVAlXSAgIC52YXJpYWJsZS1jb2xbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O3BhZGRpbmctYm90dG9tOjFweH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09N''@;'; put 'put ''UCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFyaWFibGUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kYXRhbGlzdC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSwgLmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19u''@;'; put 'put ''Z2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhcmlhYmxlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuZGF0YWxpc3Qtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0u''@;'; put 'put ''Y29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAub3BlcmF0b3ItY29sW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Zmxl''@;'; put 'put ''eC1zdGFydH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAub3BlcmF0b3ItY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1zZWxlY3QtY29udGFp''@;'; put 'put ''bmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6NDVweDttYXJnaW4tdG9wOjA7d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAu''@;'; put 'put ''dmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtwYWRkaW5nLWJvdHRvbToxcHh9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVl''@;'; put 'put ''cnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuY2hlY2tib3gtdmFsc1tfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTtwYWRkaW5nOjAgNXB4O2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHJnYmEoMCwwLDAsLjMpfS5jb250ZW50W19u''@;'; put 'put ''Z2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLmNoZWNrYm94LXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgY2xy''@;'; put 'put ''LWNoZWNrYm94LWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDowfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1j''@;'; put 'put ''b2xbX25nY29udGVudC0lQ09NUCVdICAgLmNoZWNrYm94LXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgc2VjdGlvbltfbmdjb250ZW50LSVDT01QJV17bWF4LWhlaWdodDoxMjBweDtvdmVyZmxvdy15OnNjcm9sbH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250''@;'; put 'put ''YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zaW5nbGUtZmllbGQtdmFsc1tfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVD''@;'; put 'put ''T01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zaW5nbGUtZmllbGQtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29u''@;'; put 'put ''dHJvbC1jb250YWluZXJ7d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5z''@;'; put 'put ''aW5nbGUtZmllbGQtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVye21heC13aWR0aDpub25lfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0g''@;'; put 'put ''ICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnNpbmdsZS1maWVsZC12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXIgLmNsci1pbnB1dC1n''@;'; put 'put ''cm91cHt3aWR0aDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnNpbmdsZS1maWVs''@;'; put 'put ''ZC12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSA+IGlucHV0W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAl''@;'; put 'put ''XSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnNpbmdsZS1maWVsZC12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W3R5cGU9dGltZV1bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDoxN3B4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNP''@;'; put 'put ''TVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnJhbmdlLXZhbHNbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LmNvbnRlbnRb''@;'; put 'put ''X25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5j''@;'; put 'put ''bHItY29udHJvbC1jb250YWluZXJ7d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAl''@;'; put 'put ''XSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXJ7bWF4LXdpZHRoOm5vbmV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAg''@;'; put 'put ''IC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVyIC5jbHItaW5wdXQtZ3JvdXB7d2lk''@;'; put 'put ''dGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRl''@;'; put 'put ''bnQtJUNPTVAlXSAgIC5mcm9tW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tYm90dG9tOjEwcHh9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZh''@;'; put 'put ''bHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAucmFuZ2UtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAuZnJvbVtfbmdjb250ZW50LSVDT01QJV0gPiBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1j''@;'; put 'put ''b250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5mcm9tW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W3R5''@;'; put 'put ''cGU9dGltZV1bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDoxN3B4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52''@;'; put 'put ''YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnJhbmdlLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgLmZyb21bX25nY29udGVudC0lQ09NUCVdLCAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVz''@;'; put 'put ''ZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b1tfbmdjb250ZW50LSVDT01QJV17bWluLXdpZHRoOjEwMHB4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5j''@;'; put 'put ''bGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLnJhbmdlLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgLmZyb21bX25nY29udGVudC0lQ09NUCVdID4g''@;'; put 'put ''aW5wdXRbX25nY29udGVudC0lQ09NUCVdLCAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5y''@;'; put 'put ''YW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b1tfbmdjb250ZW50LSVDT01QJV0gPiBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNs''@;'; put 'put ''YXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5mcm9tW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W3R5cGU9dGltZV1bX25nY29udGVudC0lQ09NUCVdLCAuY29u''@;'; put 'put ''dGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yYW5nZS12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXSAg''@;'; put 'put ''IC50b1tfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFt0eXBlPXRpbWVdW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlO3BhZGRpbmctcmlnaHQ6MTdweH0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNs''@;'; put 'put ''YXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250YWlucy12YWxzW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250''@;'; put 'put ''ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRhaW5zLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVye3dpZHRoOjEwMCV9LmNvbnRlbnRbX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVdICAgLmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGFpbnMtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gICAgIC5j''@;'; put 'put ''bHItY29udHJvbC1jb250YWluZXIgLmNsci1pbnB1dC13cmFwcGVye21heC13aWR0aDpub25lfS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC52YWx1''@;'; put 'put ''ZS1jb2xbX25nY29udGVudC0lQ09NUCVdICAgLmNvbnRhaW5zLXZhbHNbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQtd3JhcHBlciAuY2xyLWlucHV0LWdyb3Vwe3dpZHRoOjEwMCV9LmNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdICAg''@;'; put 'put ''LmNsYXVzZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLnZhbHVlLWNvbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGFpbnMtdmFsc1tfbmdjb250ZW50LSVDT01QJV0gPiBpbnB1dFtfbmdjb250ZW50LSVDT01Q''@;'; put 'put ''JV17d2lkdGg6MTAwJX0uY29udGVudFtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAudmFsdWUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb250YWlucy12YWxz''@;'; put 'put ''W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W3R5cGU9dGltZV1bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDoxN3B4fS5jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2VzLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNl''@;'; put 'put ''LXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGF1c2UtYnV0dG9uc1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQ7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcn0uY29udGVudFtfbmdjb250ZW50LSVD''@;'; put 'put ''T01QJV0gICAuY2xhdXNlcy1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgLmNsYXVzZS1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0gICAuY2xhdXNlLWJ1dHRvbnNbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4td2lkdGg6YXV0b30uaW52''@;'; put 'put ''YWxpZC1jbGF1c2VbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1sZWZ0OjJweCBzb2xpZCAjZDk0YjMxfS5jbGF1c2Utcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MH0uY2xhdXNlLXJvd1tfbmdjb250ZW50LSVDT01QJV06YWZ0''@;'; put 'put ''ZXJ7cG9zaXRpb246cmVsYXRpdmU7Y29udGVudDoiIjtoZWlnaHQ6LjQxNjY3cmVtO3dpZHRoOi40MTY2N3JlbTt0b3A6LjI5MTY3cmVtO3JpZ2h0Oi4yNXJlbTtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUyMHhtbG5zJTNEJTIy''@;'; put 'put ''aHR0cCUzQSUyRiUyRnd3dy53My5vcmdcXDIwMjYlMkM5Ljg0JTJDMy4yNGEwLjY4JTJDMC42OCUyQzAlMkMxJTJDMSUyQzElMkMxWiUyMiUyRiUzRSUwQSUzQyUyRnN2ZyUzRSUwQSk7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTpjb250YWluO3ZlcnRpY2Fs''@;'; put 'put ''LWFsaWduOm1pZGRsZTttYXJnaW46MH0gIGJvZHlbY2RzLXRoZW1lPWRhcmtdIC5saW5lLW51bWJlcnN7Ym9yZGVyLWNvbG9yOiM5ODk3OTchaW1wb3J0YW50fXByZVtjbGFzcyo9bGFuZ3VhZ2UtXVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzo4cHg7bWFyZ2luOjA7Ym9yZGVyLXJhZGl1''@;'; put 'put ''czoxcHg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO21pbi1oZWlnaHQ6NjZweDtwb3NpdGlvbjpyZWxhdGl2ZX1wcmVbY2xhc3MqPWxhbmd1YWdlLV1bX25nY29udGVudC0lQ09NUCVdICAgc3Bhbi5zcGlubmVyW19uZ2NvbnRlbnQtJUNP''@;'; put 'put ''TVAlXXtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjEwcHg7dG9wOjEwcHh9cHJlW2NsYXNzKj1sYW5ndWFnZS1dW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNvZGVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOnByZS13cmFwO3dvcmQtYnJlYWs6YnJlYWstd29yZH0uaW5wdXQtdmFsW19u''@;'; put 'put ''Z2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MHB4O2JhY2tncm91bmQ6I2ZiZjhmODtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjOTk5OTk5fWNsci1kYXRlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDoycHghaW1wb3J0YW50fWlucHV0W3R5cGU9dGltZV1bX25nY29u''@;'; put 'put ''dGVudC0lQ09NUCVde2JvcmRlcjowO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2IzYjNiM31pbnB1dFt0eXBlPXRpbWVdW19uZ2NvbnRlbnQtJUNPTVAlXTpmb2N1c3tvdXRsaW5lOm5vbmV9LmluLXZhbHVlcy1tb2RhbFtfbmdjb250ZW50LSVDT01Q''@;'; put 'put ''JV0gICAubW9kYWwtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9wOjFweCBzb2xpZCAjZDhkOGQ4O21hcmdpbi10b3A6MTBweH0ucHJvZ3Jlc3NbX25nY29udGVudC0lQ09NUCVdLCAucHJvZ3Jlc3Mtc3RhdGljW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OnRyYW5zcGFyZW50O3dpZHRoOjEwMCU7aGVpZ2h0OjRweDt0b3A6M3B4fSddfSl9fXJldHVybiBjfSkoKSxlND0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW9uQ2xpY2soYSl7YS50YXJnZXQuZm9jdXMoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5l''@;'; put 'put ''dyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1ZGlyPUVyKHt0eXBlOmMsc2VsZWN0b3JzOltbIiIsImFwcFN0ZWFsRm9jdXMiLCIiXV0saG9zdEJpbmRpbmdzOmZ1bmN0aW9uKGQsaCl7MSZkJiZGdCgiY2xpY2siLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uQ2xpY2sodil9KX19KX19cmV0dXJu''@;'; put 'put ''IGN9KSgpO2NvbnN0IE9tdD1bInNlYXJjaExpYlRyZWVJbnB1dCJdO2Z1bmN0aW9uIFBtdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDExKX1mdW5jdGlvbiBGbXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItaWNvbiIsMTIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3''@;'; put 'put ''dChhKTtjb25zdCBoPU9lKDIpO3JldHVybiBoLmxpYnJhcmllc1NlYXJjaD0iIixDdChoLmxpYnJhcnlPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIEhtdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDYpKDEsImRpdiIsNykoMiwiaW5wdXQiLDgs''@;'; put 'put ''MCkscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKTtyZXR1cm4gdmkoZi5saWJyYXJpZXNTZWFyY2gsaCl8fChmLmxpYnJhcmllc1NlYXJjaD1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5saWJyYXJ5''@;'; put 'put ''T25GaWx0ZXIoKSl9KSxoZSgpLGd0KDQsUG10LDEsMCwiY2xyLWljb24iLDkpKDUsRm10LDEsMCwiY2xyLWljb24iLDEwKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPXZvKDMpLGQ9T2UoKTtmZSgyKSxmaSgibmdNb2RlbCIsZC5saWJyYXJpZXNTZWFyY2gpLGZlKDIpLHhlKCJuZ0lmIixhLnZh''@;'; put 'put ''bHVlLmxlbmd0aDwxKSxmZSgpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gTm10KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMTEpfWZ1bmN0aW9uIFZtdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci1pY29uIiwxMiksRnQoImNsaWNrIixmdW5j''@;'; put 'put ''dGlvbigpe3d0KGEpLE9lKCk7Y29uc3QgaD12bygzKSxmPU9lKDIpLiRpbXBsaWNpdCx2PU9lKCk7cmV0dXJuIGgudmFsdWU9IiIsZi5zZWFyY2hTdHJpbmc9IiIsQ3Qodi50cmVlT25GaWx0ZXIoZiwidGFibGVzLlRBQkxFTkFNRSIpKX0pLGhlKCl9fWZ1bmN0aW9uIEJtdChjLGwpe2lmKDEm''@;'; put 'put ''Yyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDYpKDEsImRpdiIsNykoMiwiaW5wdXQiLDE4LDIpLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDIpLiRpbXBsaWNpdDtyZXR1cm4gdmkoZi5zZWFyY2hTdHJpbmcsaCl8fChmLnNlYXJj''@;'; put 'put ''aFN0cmluZz1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoKS50cmVlT25GaWx0ZXIoaCwidGFibGVzIikpfSksaGUoKSxndCg0LE5tdCwxLDAsImNsci1pY29uIiw5KSg1LFZtdCwxLDAsImNsci1pY29u''@;'; put 'put ''IiwxMCksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT12bygzKSxkPU9lKDIpLiRpbXBsaWNpdDtmZSgyKSxmaSgibmdNb2RlbCIsZC5zZWFyY2hTdHJpbmcpLGZlKDIpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24g''@;'; put 'put ''am10KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMjYpfWZ1bmN0aW9uIHptdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDI3KX1mdW5jdGlvbiBVbXQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiksTGUoMSwiIFRvIHVubG9jayBhbGwgdGFibGVzLCBjb250YWN0IHN1cHBvcnRAZGF0YWNv''@;'; put 'put ''bnRyb2xsZXIuaW8gIiksaGUoKSl9ZnVuY3Rpb24gWm10KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRvb2x0aXAtY29udGVudCIsMjgpLGd0KDEsVW10LDIsMCwic3BhbiIsMjUpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpLm5nVmFyO2ZlKCkseGUoIm5nSWYiLGEpfX1mdW5jdGlvbiBXbXQo''@;'; put 'put ''YyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwxMSl9ZnVuY3Rpb24gWW10KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLWljb24iLDEyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSksT2UoKTtjb25zdCBoPXZvKDMpLGY9T2UoMykuJGltcGxpY2l0LHY9T2UoMyk7cmV0''@;'; put 'put ''dXJuIGgudmFsdWU9IiIsZi5zZWFyY2hTdHJpbmc9IiIsQ3Qodi50cmVlT25GaWx0ZXIoZiwiY29sdW1ucy5DT0xOQU1FIikpfSksaGUoKX19ZnVuY3Rpb24gR210KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsNikoMSwiZGl2Iiw3KSgyLCJpbnB1dCIs''@;'; put 'put ''MjksMikscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoMykuJGltcGxpY2l0O3JldHVybiB2aShmLnNlYXJjaFN0cmluZyxoKXx8KGYuc2VhcmNoU3RyaW5nPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMyku''@;'; put 'put ''JGltcGxpY2l0O3JldHVybiBDdChPZSgzKS50cmVlT25GaWx0ZXIoaCwiY29sdW1ucy5DT0xOQU1FIikpfSksaGUoKSxndCg0LFdtdCwxLDAsImNsci1pY29uIiw5KSg1LFltdCwxLDAsImNsci1pY29uIiwxMCksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT12bygzKSxkPU9lKDMpLiRpbXBsaWNp''@;'; put 'put ''dDtmZSgyKSxmaSgibmdNb2RlbCIsZC5zZWFyY2hTdHJpbmcpLGZlKDIpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gJG10KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIp''@;'; put 'put ''KDEsImJ1dHRvbiIsMzApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdCxmPU9lKDMpLiRpbXBsaWNpdCx2PU9lKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoKS5jb2x1bW5PbkNsaWNrKGgsdixmKSl9KSxHdCgyLCJjbHItaWNvbiIsMzEpLExlKDMpLGhl''@;'; put 'put ''KCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1PZSg2KTtmZSgpLHhyKCJjb2x1bW4tYWN0aXZlIixkLmxpYkNvbHVtbkFjdGl2ZShhLkNPTFVSSSkpLGZlKDIpLFJyKCIgIixhLkNPTE5BTUUsIiAiKX19ZnVuY3Rpb24gS210KGMsbCl7aWYoMSZjJiYobGkoMCksZ3QoMSxHbXQs''@;'; put 'put ''NiwzLCJjbHItdHJlZS1ub2RlIiwzKSgyLCRtdCw0LDMsImNsci10cmVlLW5vZGUiLDQpLGNpKCkpLDImYyl7Y29uc3QgYT1PZSgyKS4kaW1wbGljaXQ7ZmUoKSx4ZSgibmdJZiIsYS5jb2x1bW5zKSxmZSgpLHhlKCJuZ0Zvck9mIixhLmNvbHVtbnMpfX1mdW5jdGlvbiBxbXQoYyxsKXtpZigx''@;'; put 'put ''JmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItdG9vbHRpcCIpKDEsImJ1dHRvbiIsMjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLm5nVmFyLGY9T2UoKS4kaW1wbGljaXQsdj1PZSgyKS4kaW1wbGljaXQsTT1PZSgpO3JldHVybiBDdChoPyIiOk0udGFibGVPbkNsaWNr''@;'; put 'put ''KGYuVEFCTEVVUkksZix2KSl9KSxsaSgyLDIxKSxndCgzLGptdCwxLDAsImNsci1pY29uIiwyMikoNCx6bXQsMSwwLCJjbHItaWNvbiIsMjMpLGNpKCksTGUoNSksaGUoKSxndCg2LFptdCwyLDEsImNsci10b29sdGlwLWNvbnRlbnQiLDI0KSg3LEttdCwzLDIsIm5nLWNvbnRhaW5lciIsMjUp''@;'; put 'put ''LGhlKCl9aWYoMiZjKXtjb25zdCBhPWwubmdWYXIsZD1PZSgpLiRpbXBsaWNpdCxoPU9lKDIpLiRpbXBsaWNpdCxmPU9lKCk7ZmUoKSx4cigiZGMtbG9ja2VkLWNvbnRyb2wiLGEpKCJhY3RpdmUiLGYubGliVGFiQWN0aXZlKGguTElCUkFSWVJFRixkKSksZmUoKSx4ZSgibmdTd2l0Y2giLGQu''@;'; put 'put ''aW5jbHVkZXMoIi1GQyIpKSxmZSgpLHhlKCJuZ1N3aXRjaENhc2UiLCEwKSxmZSgpLHhlKCJuZ1N3aXRjaENhc2UiLCExKSxmZSgpLFJyKCIgIixkLnJlcGxhY2UoIi1GQyIsIiIpLCIgIiksZmUoMikseGUoIm5nSWYiLGYuaGFzQ29sdW1ucyl9fWZ1bmN0aW9uIFhtdChjLGwpe2lmKDEmYyl7''@;'; put 'put ''Y29uc3QgYT1PbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDE0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0LHY9T2UoMikuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLnRyZWVOb2RlQ2xpY2tlZChoLGYsdi50YWJsZXMpKX0pLHBpKCJjbHJFeHBhbmRl''@;'; put 'put ''ZENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIHZpKGYuZXhwYW5kZWQsaCl8fChmLmV4cGFuZGVkPWgpLEN0KGgpfSksZ3QoMSxxbXQsOCw5LCJjbHItdG9vbHRpcCIsMTkpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRl''@;'; put 'put ''eCxoPU9lKDMpO3hyKCJjbHItZXhwYW5kZWQiLGEuZXhwYW5kZWQpLGZpKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCkseGUoImNsckxvYWRpbmciLGEubG9hZGluZ0NvbHVtbnMmJiFhLmNvbHVtbnMpLGZlKCkseGUoIm5nVmFyIixkKzE+aC5saWNlbmNlU3RhdGUudmFsdWUudGFibGVzX2lu''@;'; put 'put ''X2xpYnJhcnlfbGltaXQpfX1mdW5jdGlvbiBKbXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwxNCwxKSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKS4kaW1wbGljaXQsdj1PZSgpO3JldHVybiBDdCh2LnRyZWVOb2RlQ2xp''@;'; put 'put ''Y2tlZChoLGYsdi5saWJyYXJ5TGlzdCkpfSkscGkoImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCkuJGltcGxpY2l0O3JldHVybiB2aShmLmV4cGFuZGVkLGgpfHwoZi5leHBhbmRlZD1oKSxDdChoKX0pLGRlKDIsInAiLDE1KSxGdCgiY2xpY2siLGZ1''@;'; put 'put ''bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD12bygxKSxmPU9lKCkuJGltcGxpY2l0LHY9T2UoKTtyZXR1cm4gdi5saWI9Zi5MSUJSQVJZSUQsQ3Qodi5saWJyYXJ5T25DbGljayh2LmxpYnx8IiIsZixoKSl9KSxHdCgzLCJjbHItaWNvbiIsMTYpLExlKDQpLGhlKCksZ3QoNSxCbXQsNiwzLCJjbHIt''@;'; put 'put ''dHJlZS1ub2RlIiwzKSg2LFhtdCwyLDUsImNsci10cmVlLW5vZGUiLDE3KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpLiRpbXBsaWNpdDt4cigiY2xyLWV4cGFuZGVkIixhLmV4cGFuZGVkKSxmaSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpLHhlKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdU''@;'; put 'put ''YWJsZXMmJiFhLnRhYmxlcyksZmUoNCksUnIoIiAiLGEuTElCUkFSWU5BTUUsIiAiKSxmZSgpLHhlKCJuZ0lmIixhLnRhYmxlcyksZmUoKSx4ZSgibmdGb3JPZiIsYS50YWJsZXMpfX1mdW5jdGlvbiBRbXQoYyxsKXtpZigxJmMmJihsaSgwKSxndCgxLEptdCw3LDcsImNsci10cmVlLW5vZGUi''@;'; put 'put ''LDEzKSxjaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSx4ZSgibmdJZiIsIWEuaGlkZGVuJiZhLmluRm9yZWdyb3VuZCl9fWZ1bmN0aW9uIGU2dChjLGwpezEmYyYmKGRlKDAsImRpdiIsMzIpKDEsInNwYW4iLDMzKSxMZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpKCkpfWxldCB0''@;'; put 'put ''NnQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQpe3RoaXMuaGVscGVyU2VydmljZT1hLHRoaXMubGljZW5jZVNlcnZpY2U9ZCx0aGlzLnNlYXJjaExpYklucHV0TGlzdD1uZXcgZmQsdGhpcy50YWJsZU9uQ2xpY2tFbWl0dGVyPW5ldyBxcix0aGlzLmxpYnJhcnlPbkNsaWNrRW1pdHRl''@;'; put 'put ''cj1uZXcgcXIsdGhpcy5oYXNDb2x1bW5zPSExLHRoaXMucGFnaW5nPSEwLHRoaXMubGlicmFyaWVzU2VhcmNoPSIiLHRoaXMubGliPSIiLHRoaXMudGFibGU9IiIsdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3Rh''@;'; put 'put ''dGV9bmdPbkluaXQoKXt9bmdBZnRlclZpZXdJbml0KCl7c2V0VGltZW91dCgoKT0+e3RoaXMuc2VhcmNoTGliSW5wdXRMaXN0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKX0pfW5nT25DaGFuZ2VzKGEpe2EubGlicmFyeUxpc3Q/LmN1cnJlbnRWYWx1ZSYmdGhpcy5saWJyYXJ5TGlzdCYm''@;'; put 'put ''dGhpcy5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXModGhpcy5saWJyYXJ5TGlzdCl9dHJlZU9uRmlsdGVyKGEsZCl7dGhpcy5oZWxwZXJTZXJ2aWNlLnRyZWVPbkZpbHRlcihhLGQpfWxpYnJhcnlPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhp''@;'; put 'put ''cy5saWJyYXJ5TGlzdCx0aGlzLmxpYnJhcmllc1NlYXJjaCwiTElCUkFSWU5BTUUiKSxLbi5saW5lYWdlLmxpYnJhcmllc1NlYXJjaD10aGlzLmxpYnJhcmllc1NlYXJjaH10cmVlTm9kZUNsaWNrZWQoYSxkLGgpeyJDb2xsYXBzZSI9PT1hLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZVRy''@;'; put 'put ''ZWVJdGVtcyhoLGQpfWxpYnJhcnlPbkNsaWNrKGEsZCxoKXtkLmluRm9yZWdyb3VuZD0hMDtjb25zdCBmPSgpPT5zZXRUaW1lb3V0KCgpPT5oLmNvbnRlbnRDb250YWluZXIubmF0aXZlRWxlbWVudC5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoImlucHV0IikuZm9jdXMoKSk7aWYoZC50''@;'; put 'put ''YWJsZXMpZC5leHBhbmRlZD0hZC5leHBhbmRlZCx0aGlzLmxpYnJhcnlPbkNsaWNrRW1pdHRlci5lbWl0KHtsaWJpZDphLGxpYnJhcnk6ZCx0YWJsZXNMb2FkZWQ6ITB9KTtlbHNle2QubG9hZGluZ1RhYmxlcz0hMCx0aGlzLmxpYnJhcnlPbkNsaWNrRW1pdHRlci5lbWl0KHtsaWJpZDphLGxp''@;'; put 'put ''YnJhcnk6ZCx0YWJsZXNMb2FkZWQ6ITF9KTtjb25zdCB2PXNldEludGVydmFsKCgpPT57ZC5sb2FkaW5nVGFibGVzfHwoZigpLGNsZWFySW50ZXJ2YWwodikpfSw1MDApfWQuZXhwYW5kZWQmJmYoKSx0aGlzLmNvbGxhcHNlVHJlZUl0ZW1zKHRoaXMubGlicmFyeUxpc3QsZCl9dGFibGVPbkNs''@;'; put 'put ''aWNrKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtmLmhlbHBlclNlcnZpY2UuZGVib3VuY2VDYWxsKDUwLCgpPT57Zi5oYXNDb2x1bW5zPyhkLmNvbHVtbnM/KGQuZXhwYW5kZWQ9IWQuZXhwYW5kZWQsITA9PT1kLmV4cGFuZGVkJiYoZi50YWJsZT1hLGYudGFibGVP''@;'; put 'put ''bkNsaWNrRW1pdHRlci5lbWl0KHt0YWJsZXVyaTphLGxpYlRhYmxlOmQsbGlicmFyeTpoLGNvbHVtbnNMb2FkZWQ6ITB9KSkpOihkLmV4cGFuZGVkPSFkLmV4cGFuZGVkLGQubG9hZGluZ0NvbHVtbnM9ITAsZi50YWJsZT1hLGYudGFibGVPbkNsaWNrRW1pdHRlci5lbWl0KHt0YWJsZXVyaTph''@;'; put 'put ''LGxpYlRhYmxlOmQsbGlicmFyeTpoLGNvbHVtbnNMb2FkZWQ6ITF9KSksZi5jb2xsYXBzZVRyZWVJdGVtcyhoLnRhYmxlcyxkKSk6Zi50YWJsZU9uQ2xpY2tFbWl0dGVyLmVtaXQoe3RhYmxldXJpOmEsbGliVGFibGU6ZCxsaWJyYXJ5OmgsY29sdW1uc0xvYWRlZDohMX0pfSl9KSgpfWNvbHVt''@;'; put 'put ''bk9uQ2xpY2soYSxkLGgpe3RoaXMubGliPWQuTElCUkFSWUlELHRoaXMudGFibGU9aC5UQUJMRVVSSSx0aGlzLmNvbHVtbj1hLkNPTFVSSX1saWJUYWJBY3RpdmUoYSxkKXtyZXR1cm4hKCF0aGlzLmxpYnx8IXRoaXMudGFibGUpJiZhPT09dGhpcy5saWImJmQ9PT10aGlzLnRhYmxlfWxpYkNv''@;'; put 'put ''bHVtbkFjdGl2ZShhKXtpZighdGhpcy5jb2x1bW4pcmV0dXJuITE7bGV0IGQ9YS5zcGxpdCgiXFwiKSxoPXRoaXMuY29sdW1uLnNwbGl0KCJcXCIpO3JldHVybiBkW2QubGVuZ3RoLTFdPT1oW2gubGVuZ3RoLTFdfWNvbGxhcHNlVHJlZUl0ZW1zKGEsZCl7YS5mb3JFYWNoKGg9PntKU09OLnN0''@;'; put 'put ''cmluZ2lmeShoKSE9PUpTT04uc3RyaW5naWZ5KGQpJiYoaC5leHBhbmRlZD0hMSl9KX1sb2FkTW9yZUxpYnJhcmllcygpe3RoaXMubGlicmFyaWVzUGFnaW5nfHwodGhpcy5saWJyYXJpZXNQYWdpbmc9ITAsdGhpcy5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJyYXJpZXModGhpcy5saWJyYXJ5''@;'; put 'put ''TGlzdCwhMCksdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEpfWhhbmRsZVNjcm9sbChhKXtsZXQgZD1hLnRhcmdldDtkJiZkLnNjcm9sbFRvcD49ZC5zY3JvbGxIZWlnaHQtZC5vZmZzZXRIZWlnaHQtMTAmJnRoaXMubG9hZE1vcmVMaWJyYXJpZXMoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVu''@;'; put 'put ''Y3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShHdSksR2UoZDEpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImRjLXRyZWUiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQsaCl7aWYoMSZkJiZuYShPbXQsNSksMiZkKXtsZXQgZjt4aShmPUVpKCkpJiYo''@;'; put 'put ''aC5zZWFyY2hMaWJJbnB1dExpc3Q9Zil9fSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0KCJzY3JvbGwiLGZ1bmN0aW9uKHYpe3JldHVybiBoLmhhbmRsZVNjcm9sbCh2KX0pfSxpbnB1dHM6e2hhc0NvbHVtbnM6Imhhc0NvbHVtbnMiLHBhZ2luZzoicGFnaW5nIixsaWJyYXJ5''@;'; put 'put ''TGlzdDoibGlicmFyeUxpc3QifSxvdXRwdXRzOnt0YWJsZU9uQ2xpY2tFbWl0dGVyOiJ0YWJsZU9uQ2xpY2tFbWl0dGVyIixsaWJyYXJ5T25DbGlja0VtaXR0ZXI6ImxpYnJhcnlPbkNsaWNrRW1pdHRlciJ9LGZlYXR1cmVzOlt5bF0sZGVjbHM6NCx2YXJzOjMsY29uc3RzOltbInNlYXJjaExp''@;'; put 'put ''YlRyZWVJbnB1dCIsIiJdLFsibGliVHJlZU5vZGUiLCIiXSxbInNlYXJjaFRyZWVJbnB1dCIsIiJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwidy0xMDAgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwic2VhcmNoLW5v''@;'; put 'put ''ZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJMaWJyYXJpZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxb''@;'; put 'put ''InNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsci1leHBhbmRlZCIsImNsaWNrIiwi''@;'; put 'put ''Y2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiXSxbMywiY2xyRXhwYW5kZWQi''@;'; put 'put ''LCJjbHJMb2FkaW5nIiwiY2xyLWV4cGFuZGVkIiwiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlRhYmxlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIs''@;'; put 'put ''Im9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFs0LCJuZ1ZhciJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLDEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFszLCJuZ1N3aXRjaCJdLFsic2hhcGUiLCJib2x0Iiw0LCJuZ1N3aXRjaENhc2UiXSxbInNo''@;'; put 'put ''YXBlIiwidGFibGUiLDQsIm5nU3dpdGNoQ2FzZSJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tcmlnaHQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFs0LCJuZ0lmIl0sWyJzaGFwZSIsImJvbHQiXSxbInNoYXBlIiwidGFibGUiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0''@;'; put 'put ''IiwiY2xyU2l6ZSIsImxnIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkNvbHVtbnMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbMSwiY2xyLXRyZWVub2Rl''@;'; put 'put ''LWxpbmsiLDMsImNsaWNrIl0sWyJzaGFwZSIsIm9iamVjdHMiXSxbMSwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1zbSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImNsci10cmVlIiksZ3QoMSxIbXQsNiwzLCJjbHItdHJlZS1ub2Rl''@;'; put 'put ''IiwzKSgyLFFtdCwyLDEsIm5nLWNvbnRhaW5lciIsNCksaGUoKSxndCgzLGU2dCwzLDAsImRpdiIsNSkpLDImZCYmKGZlKCkseGUoIm5nSWYiLGgubGlicmFyeUxpc3QpLGZlKCkseGUoIm5nRm9yT2YiLGgubGlicmFyeUxpc3QpLGZlKCkseGUoIm5nSWYiLGgubGlicmFyaWVzUGFnaW5nKSl9''@;'; put 'put ''LGRlcGVuZGVuY2llczpbc3MseW8sYjIsaXAsU2gsT2QsZGcsT2wsQjAseDIsSWQscDcsbTcsZzcsUWwsUXMsWXMsd3csZTRdLHN0eWxlczpbImNsci10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9Y2xy''@;'; put 'put ''LXRyZWVbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lcjpmb2N1cyAuY2xyLXRyZWVub2RlLWxpbmt7YmFja2dyb3VuZDojZThlOGU4O2JhY2tncm91bmQ6dmFyKC0tY2xyLXRyZWUtbGluay1ob3Zlci1jb2xvciwgI2U4ZThlOCk7dGV4dC1k''@;'; put 'put ''ZWNvcmF0aW9uOm5vbmV9Il19KX19cmV0dXJuIGN9KSgpO2NvbnN0IG42dD1bInJlc2l6ZUJveCJdLHI2dD1bImRyYWdIYW5kbGVDb3JuZXIiXSxpNnQ9KGMsbCxhKT0+KHtjb2xIZWFkZXJzSGlkZGVuOmMsY29sSGVhZGVyc1Zpc2libGU6bCxoZWFkZXJQa3M6YX0pLG82dD0oYyxsKT0+KHt4''@;'; put 'put ''OmMseTpsfSk7ZnVuY3Rpb24gYTZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIsMzcpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKCksenUoIlRvIHVubG9jayBtb3JlIHRoZW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0LCIgIiwxPT09YS5saWNlbmNl''@;'; put 'put ''U3RhdGUudmFsdWUudmlld2JveF9saW1pdD8idmlld2JveCI6InZpZXdib3hlcyIsIiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIil9fWZ1bmN0aW9uIHM2dChjLGwpezEmYyYmKGRlKDAsImRpdiIsMzgpLEd0KDEsImNsci1zcGlubmVyIiwzOSksaGUoKSl9ZnVuY3Rpb24g''@;'; put 'put ''bDZ0KGMsbCl7MSZjJiYoZGUoMCwicCIsNDApLExlKDEsIiBWaWV3Ym94IG9wZW4gbGltaXQgcmVhY2hlZCAiKSxoZSgpKX1mdW5jdGlvbiBjNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkYy10cmVlIiw0MSksRnQoImxpYnJhcnlPbkNsaWNrRW1pdHRlciIsZnVuY3Rpb24o''@;'; put 'put ''aCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkubGlicmFyeU9uQ2xpY2soaCkpfSkoInRhYmxlT25DbGlja0VtaXR0ZXIiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgpLnRhYmxlT25DbGljayhoKSl9KSxoZSgpfTImYyYmeGUoImxpYnJhcnlMaXN0IixPZSgpLmxpYnJhcmllcyl9ZnVu''@;'; put 'put ''Y3Rpb24gdTZ0KGMsbCl7MSZjJiYoZGUoMCwicCIsNDIpLExlKDEsIiBQaWNrIHRhYmxlIGZyb20gdGhlIGxpc3Qgb24gdGhlIGxlZnQgIiksaGUoKSl9ZnVuY3Rpb24gZDZ0KGMsbCl7MSZjJiZHdCgwLCJjbHItc3Bpbm5lciIsNTApfWZ1bmN0aW9uIGg2dChjLGwpe2lmKDEmYyl7Y29uc3Qg''@;'; put 'put ''YT1PbigpO2RlKDAsImEiLDE3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKS4kaW1wbGljaXQsdj1PZSgpO3JldHVybiB2Lm1pbmltaXplKGYpLEN0KHYuc3RvcFByb3BhZ2F0aW9uKGgpKX0pLEd0KDEsImNsci1pY29uIiwyMCksZGUoMiwic3BhbiIsMTkpLExl''@;'; put 'put ''KDMsIk1pbmltaXplIHZpZXdib3giKSxoZSgpKCl9fWZ1bmN0aW9uIGY2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImEiLDE3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKS4kaW1wbGljaXQsdj1PZSgpO3JldHVybiB2LnJlc3RvcmUoZiksQ3Qo''@;'; put 'put ''di5zdG9wUHJvcGFnYXRpb24oaCkpfSksR3QoMSwiY2xyLWljb24iLDIxKSxkZSgyLCJzcGFuIiwxOSksTGUoMywiUmVzdG9yZSB2aWV3Ym94IiksaGUoKSgpfX1mdW5jdGlvbiBwNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDQzKSxGdCgiY2xpY2siLGZ1bmN0aW9u''@;'; put 'put ''KCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKCkuc2VsZWN0Vmlld2JveChoKSl9KSxkZSgxLCJkaXYiLDQ0KSxMZSgyKSxndCgzLGQ2dCwxLDAsImNsci1zcGlubmVyIiw0NSksaGUoKSxkZSg0LCJkaXYiKSg1LCJhIiw0NiksRnQoImNsaWNrIixmdW5jdGlvbihoKXtj''@;'; put 'put ''b25zdCBmPXd0KGEpLiRpbXBsaWNpdCx2PU9lKCk7cmV0dXJuIHYucmVzZXRQb3NTaXplKGYpLEN0KHYuc3RvcFByb3BhZ2F0aW9uKGgpKX0pLEd0KDYsImNsci1pY29uIiw0NyksZGUoNywic3BhbiIsMTkpLExlKDgsIlJlc2V0IHBvc2l0aW9uIGFuZCBzaXplIiksaGUoKSgpLGd0KDksaDZ0''@;'; put 'put ''LDQsMCwiYSIsNDgpKDEwLGY2dCw0LDAsImEiLDQ4KSxkZSgxMSwiYSIsMTcpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQsdj1PZSgpO3JldHVybiB2LmNsb3NlKGYpLEN0KHYuc3RvcFByb3BhZ2F0aW9uKGgpKX0pLEd0KDEyLCJjbHItaWNvbiIsNDkp''@;'; put 'put ''LGRlKDEzLCJzcGFuIiwxOSksTGUoMTQsIkNsb3NlIHZpZXdib3giKSxoZSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPU9lKCk7eHIoInNlbGVjdGVkIiwobnVsbD09ZC5zZWxlY3RlZFZpZXdib3g/bnVsbDpkLnNlbGVjdGVkVmlld2JveC5pZCk9PT1hLmlkKSxmZSgy''@;'; put 'put ''KSxMZigiICMiLGEuaWQsIiAiLGEubGlicmFyeSwiLiIsYS50YWJsZSwiICIpLGZlKCkseGUoIm5nSWYiLGEubG9hZGluZ0RhdGEpLGZlKDIpLHhyKCJkaXNhYmxlZCIsMD09PWEueCYmMD09PWEueSksZmUoNCkseGUoIm5nSWYiLCFhLm1pbmltaXplZCksZmUoKSx4ZSgibmdJZiIsYS5taW5p''@;'; put 'put ''bWl6ZWQpfX1mdW5jdGlvbiBnNnQoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iKSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxScigiICIsYSwiICIpfX1mdW5jdGlvbiBtNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtsaSgwKSxkZSgxLCJkaXYiLDUz''@;'; put 'put ''KSgyLCJhcHAtYXV0b2NvbXBsZXRlIiw1NCwwKSxGdCgidmFsdWVDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9dm8oMyksdj1PZSgpLm5nVmFyO3JldHVybiBDdChPZSgpLm9uQ29sc2VhcmNoQ2hhbmdlKGYsaCx2LmNvbEhlYWRlcnNIaWRkZW4pKX0pLGd0KDQsZzZ0LDIsMSwi''@;'; put 'put ''b3B0aW9uIiw1NSksaGUoKSgpLGNpKCl9aWYoMiZjKXtjb25zdCBhPU9lKCkubmdWYXI7ZmUoMikseGUoImlucHV0SWQiLCJ2aWV3Ym94LWNvbHVtbi1zZWFyY2giKSgiZW1pdE9ubHlTZWxlY3RlZCIsITApLGZlKDIpLHhlKCJuZ0Zvck9mIixhLmNvbEhlYWRlcnNIaWRkZW4pfX1mdW5jdGlv''@;'; put 'put ''biB2NnQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiw2MSl9ZnVuY3Rpb24gYjZ0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLWljb24iLDYyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoMykub25D''@;'; put 'put ''b2xSZW1vdmUoaCkpfSksaGUoKX19ZnVuY3Rpb24geTZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw1OCkoMSwic3BhbiIpLExlKDIpLGd0KDMsdjZ0LDEsMCwiY2xyLWljb24iLDU5KSxoZSgpLGd0KDQsYjZ0LDEsMCwiY2xyLWljb24iLDYwKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1w''@;'; put 'put ''bGljaXQsZD1PZSgyKS5uZ1ZhcixoPU9lKCk7ZXJlKCJjb2wtYm94IGNvbHVtbi0iLGEsIiIpLHhyKCJjdXJzb3ItZGVmYXVsdC1pIixkLmhlYWRlclBrcy5pbmNsdWRlcyhhKSkoInByaW1hcnlLZXlIZWFkZXJTdHlsZSIsZC5oZWFkZXJQa3MuaW5jbHVkZXMoYSkpLHhlKCJjZGtEcmFnRGF0''@;'; put 'put ''YSIsYSkoImNka0RyYWdEaXNhYmxlZCIsZC5oZWFkZXJQa3MuaW5jbHVkZXMoYSkpLGZlKDIpLHp1KCIgIixhLCIgIiwibnVtIj09PShudWxsPT1oLnNlbGVjdGVkVmlld2JveFRhYmxlfHxudWxsPT1oLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlP251bGw6aC5zZWxlY3RlZFZpZXdi''@;'; put 'put ''b3hUYWJsZS5ob3RUYWJsZS4kZGF0YWZvcm1hdHMudmFyc1thXS50eXBlKT8iKG51bWVyaWMpIjoiIiwiICIpLGZlKCkseGUoIm5nSWYiLGQuaGVhZGVyUGtzLmluY2x1ZGVzKGEpKSxmZSgpLHhlKCJuZ0lmIiwhZC5oZWFkZXJQa3MuaW5jbHVkZXMoYSkpfX1mdW5jdGlvbiBfNnQoYyxsKXtp''@;'; put 'put ''ZigxJmMpe2NvbnN0IGE9T24oKTtsaSgwKSxkZSgxLCJwIiwxMCksTGUoMiwiQ29sdW1ucyBUbyBEaXNwbGF5IChkcmFnIGFuZCByZS1vcmRlcikiKSxoZSgpLGRlKDMsImRpdiIsNTYpLEZ0KCJjZGtEcm9wTGlzdERyb3BwZWQiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgyKS5j''@;'; put 'put ''b2x1bW5zRHJvcChoKSl9KSxndCg0LHk2dCw1LDEzLCJkaXYiLDU3KSxoZSgpLGNpKCl9aWYoMiZjKXtjb25zdCBhPU9lKCkubmdWYXI7ZmUoMykseGUoImNka0Ryb3BMaXN0RGF0YSIsYS5jb2xIZWFkZXJzVmlzaWJsZSksZmUoKSx4ZSgibmdGb3JPZiIsYS5jb2xIZWFkZXJzVmlzaWJsZSl9''@;'; put 'put ''fWZ1bmN0aW9uIHc2dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNTEpLGd0KDEsbTZ0LDUsMywibmctY29udGFpbmVyIiw1MikoMixfNnQsNSwyLCJuZy1jb250YWluZXIiLDUyKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC5uZ1ZhcjtmZSgpLHhlKCJuZ0lmIixhLmNvbEhlYWRlcnNIaWRkZW4p''@;'; put 'put ''LGZlKCkseGUoIm5nSWYiLGEuY29sSGVhZGVyc1Zpc2libGUpfX1mdW5jdGlvbiBDNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItaWNvbiIsODYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCkuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLmNv''@;'; put 'put ''bGxhcHNlKGgpKX0pLGhlKCl9fWZ1bmN0aW9uIFM2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci1pY29uIiw4NyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKCkuZXhwYW5kKGgpKX0pLGhlKCl9fWZ1''@;'; put 'put ''bmN0aW9uIE02dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci1pY29uIiw4OCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKS4kaW1wbGljaXQsZj12bygxNik7cmV0dXJuIEN0KE9lKCkuc2VhcmNoVGFibGUoZixoKSl9KSxoZSgpfX1mdW5jdGlv''@;'; put 'put ''biB4NnQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw4OSksTGUoMSwiIExvYWRpbmcuLi4gIiksaGUoKSl9ZnVuY3Rpb24gRTZ0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsOTApLExlKDEsIkxvYWRpbmcuLi4iKSxoZSgpKX1mdW5jdGlvbiBUNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtk''@;'; put 'put ''ZSgwLCJjbHItaWNvbiIsOTEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCkuJGltcGxpY2l0LGY9dm8oMTYpO3JldHVybiBPZSgpLnJlbG9hZFRhYmxlRGF0YShoKSxDdChmLnZhbHVlPSIiKX0pLGhlKCl9fWZ1bmN0aW9uIEE2dChjLGwpezEmYyYmKGRlKDAsImRp''@;'; put 'put ''diIsOTUpLEd0KDEsImNsci1zcGlubmVyIiwzOSksaGUoKSl9ZnVuY3Rpb24gazZ0KGMsbCl7aWYoMSZjJiZHdCgwLCJob3QtdGFibGUiLDk2KSwyJmMpe2NvbnN0IGE9T2UoKS5uZ1ZhcixkPU9lKCkuJGltcGxpY2l0LGg9T2UoKTt4ZSgiaG90SWQiLCJob3RJbnN0YW5jZV92aWV3Ym94XyIr''@;'; put 'put ''ZC5pZCkoInJlYWRPbmx5IiwhMCkoIm1vZGlmeUNvbFdpZHRoIixoLm1heFdpZHRoQ2hla2VyKSgiY29weVBhc3RlIixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUuY29weVBhc3RlKSgiY29udGV4dE1lbnUiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5jb250ZXh0TWVudSkoIm11''@;'; put 'put ''bHRpQ29sdW1uU29ydGluZyIsITApKCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsNTApKCJkYXRhIixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUuZGF0YSkoImNvbEhlYWRlcnMiLGgudmlld2JveFRhYmxlc1thXS5ob3RUYWJsZS5jb2xIZWFkZXJzKSgiY29sdW1ucyIsaC52aWV3''@;'; put 'put ''Ym94VGFibGVzW2FdLmhvdFRhYmxlLmNvbHVtbnMpKCJmaWx0ZXJzIiwhMCkoImRyb3Bkb3duTWVudSIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmRyb3Bkb3duTWVudSkoImhlaWdodCIsaC52aWV3Ym94VGFibGVzW2FdLmhvdFRhYmxlLmhlaWdodCkoImNlbGxzIixoLnZpZXdib3hU''@;'; put 'put ''YWJsZXNbYV0uaG90VGFibGUuY2VsbHMpKCJtYXhSb3dzIixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUubWF4Um93cykoIm1hbnVhbENvbHVtblJlc2l6ZSIsITApKCJsaWNlbnNlS2V5IixoLnZpZXdib3hUYWJsZXNbYV0uaG90VGFibGUubGljZW5zZUtleSl9fWZ1bmN0aW9uIEQ2dChj''@;'; put 'put ''LGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsOTIpLGd0KDEsQTZ0LDIsMCwiZGl2Iiw5MykoMixrNnQsMSwxNywiaG90LXRhYmxlIiw5NCksaGUoKSksMiZjKXtjb25zdCBhPWwubmdWYXIsZD1PZSgpLiRpbXBsaWNpdDtfZCgiZGlzcGxheSIsZC5jb2xsYXBzZWQ/Im5vbmUiOiIiKSxmZSgpLHhl''@;'; put 'put ''KCJuZ0lmIixkLmxvYWRpbmdEYXRhJiZhPDApLGZlKCkseGUoIm5nSWYiLGE+LTEpfX1mdW5jdGlvbiBJNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDYzLDEpLEZ0KCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0''@;'; put 'put ''KE9lKCkuZm9jdXNWaWV3Ym94KGgpKX0pKCJjZGtEcmFnRW5kZWQiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLnZpZXdib3hEcmFnRW5kZWQoaCxmKSl9KSxkZSgyLCJkaXYiLDY0KSgzLCJzcGFuIiw2NSksTGUoNCksaGUoKSxkZSg1LCJkaXYi''@;'; put 'put ''LDY2KSxndCg2LEM2dCwxLDAsImNsci1pY29uIiw2NykoNyxTNnQsMSwwLCJjbHItaWNvbiIsNjgpLGRlKDgsImNsci1pY29uIiw2OSksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLm1pbmltaXplKGgpKX0pLGhlKCksZGUoOSwi''@;'; put 'put ''Y2xyLWljb24iLDcwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKCkuY2xvc2UoaCkpfSksaGUoKSgpKCksZGUoMTAsInNwYW4iLDcxLDIpLEZ0KCJjZGtEcmFnTW92ZWQiLGZ1bmN0aW9uKGgpe2NvbnN0IGY9d3QoYSkuJGltcGxp''@;'; put 'put ''Y2l0LHY9dm8oMSksTT12bygxMSk7cmV0dXJuIEN0KE9lKCkuZHJhZ01vdmUoTSx2LGYsaCkpfSksaGUoKSxkZSgxMiwiZm9ybSIsNzIpKDEzLCJkaXYiLDczKSgxNCwiZGl2Iiw3NCkoMTUsImlucHV0Iiw3NSwzKSxGdCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4k''@;'; put 'put ''aW1wbGljaXQsZj12bygxNik7cmV0dXJuIEN0KE9lKCkuc2VhcmNoVGFibGUoZixoKSl9KSxoZSgpLGd0KDE3LE02dCwxLDAsImNsci1pY29uIiw3NikoMTgseDZ0LDIsMCwic3BhbiIsNzcpLGhlKCksZGUoMTksImNsci1jaGVja2JveC1jb250YWluZXIiKSgyMCwiY2xyLWNoZWNrYm94LXdy''@;'; put 'put ''YXBwZXIiKSgyMSwiaW5wdXQiLDc4KSxwaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIHZpKGYuc2VhcmNoTnVtZXJpYyxoKXx8KGYuc2VhcmNoTnVtZXJpYz1oKSxDdChoKX0pLGhlKCksZGUoMjIsImxhYmVsIiksTGUoMjMsIk51''@;'; put 'put ''bWVyaWMiKSxoZSgpKCkoKSgpLGRlKDI0LCJkaXYiLDQ0KSxndCgyNSxFNnQsMiwwLCJzcGFuIiw3OSkoMjYsVDZ0LDEsMCwiY2xyLWljb24iLDgwKSxkZSgyNywiYSIsODEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdCxmPXZvKDE2KTtyZXR1cm4gT2Uo''@;'; put 'put ''KS5vcGVuRmlsdGVyKGgpLEN0KGYudmFsdWU9IiIpfSksR3QoMjgsImNsci1pY29uIiw4MiksZGUoMjksInNwYW4iLDgzKSxMZSgzMCksaGUoKSgpLGRlKDMxLCJjbHItaWNvbiIsODQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2Uo''@;'; put 'put ''KS5vcGVuVGFibGVFZGl0KGgpKX0pLGhlKCkoKSgpLGd0KDMyLEQ2dCwzLDQsImRpdiIsODUpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9T2UoKTtfZCgiZGlzcGxheSIsYS5taW5pbWl6ZWQ/Im5vbmUiOiIiKSgid2lkdGgiLGEud2lkdGgsInB4IikoImhlaWdodCIsYS5o''@;'; put 'put ''ZWlnaHQsInB4IikoInBvaW50ZXItZXZlbnRzIixhLmNvbGxhcHNlZD8ibm9uZSI6IiIpKCJib3gtc2hhZG93IixhLmNvbGxhcHNlZD8ibm9uZSI6IiIpLHhyKCJmb2N1c2VkIixhLmZvY3VzZWQpLHhlKCJjZGtEcmFnRnJlZURyYWdQb3NpdGlvbiIscnAoMzQsbzZ0LGEueCxhLnkpKSgiaWQi''@;'; put 'put ''LCJ2aWV3Ym94XyIrYS5pZCksZmUoNCksTGYoIiAjIixhLmlkLCIgIixhLmxpYnJhcnksIi4iLGEudGFibGUsIiAiKSxmZSgyKSx4ZSgibmdJZiIsIWEuY29sbGFwc2VkKSxmZSgpLHhlKCJuZ0lmIixhLmNvbGxhcHNlZCksZmUoMykseGUoImlkIiwiaGFuZGxlX3ZpZXdib3hfIithLmlkKSxm''@;'; put 'put ''ZSgyKSxfZCgiZGlzcGxheSIsYS5jb2xsYXBzZWQ/Im5vbmUiOiIiKSxmZSgzKSx4ZSgidHlwZSIsYS5zZWFyY2hOdW1lcmljPyJudW1iZXIiOiJ0ZXh0IiksZmUoMikseGUoIm5nSWYiLCFhLnNlYXJjaExvYWRpbmcpLGZlKCkseGUoIm5nSWYiLGEuc2VhcmNoTG9hZGluZyksZmUoMyksZmko''@;'; put 'put ''Im5nTW9kZWwiLGEuc2VhcmNoTnVtZXJpYyksZmUoNCkseGUoIm5nSWYiLGEubG9hZGluZ0RhdGEpLGZlKCkseGUoIm5nSWYiLCFhLmxvYWRpbmdEYXRhKSxmZSgyKSx4cigiZmlsdGVyLWFjdGl2ZSIsIjAiIT09YS5maWx0ZXJfcGspLGZlKDIpLF9yKGEuZmlsdGVyVGV4dCksZmUoKSx4cigi''@;'; put 'put ''ZGlzYWJsZWQiLCFkLnRhYmxlRWRpdEV4aXN0cyhhKSksZmUoKSx4ZSgibmdWYXIiLGQuZ2V0Vmlld2JveFRhYmxlSW5kZXgoYSkpfX1mdW5jdGlvbiBSNnQoYyxsKXtpZigxJmMmJkd0KDAsImFwcC1xdWVyeSIsOTcsNCksMiZjKXtjb25zdCBhPU9lKCk7eGUoInZpZXdib3hJZCIsbnVsbD09''@;'; put 'put ''YS5maWx0ZXJpbmdWaWV3Ym94P251bGw6YS5maWx0ZXJpbmdWaWV3Ym94LmlkKX19bGV0IGM2ZT0oKCk9PntjbGFzcyBje2dldCB2aWV3Ym94TW9kYWwoKXtyZXR1cm4gdGhpcy5fdmlld2JveE1vZGFsfXNldCB2aWV3Ym94TW9kYWwoYSl7aWYoITE9PT10aGlzLmxpY2VuY2VTdGF0ZS52YWx1''@;'; put 'put ''ZS52aWV3Ym94JiZhKXJldHVybiB0aGlzLmV2ZW50U2VydmljZS5zaG93RGVtb0xpbWl0TW9kYWwoIlZpZXdib3hlcyIpLHZvaWQgdGhpcy52aWV3Ym94TW9kYWxDaGFuZ2UuZW1pdCghMSk7dGhpcy5fdmlld2JveE1vZGFsPWEsYSYmdGhpcy51bnNldFNlbGVjdGVkVmlld2JveCgpfWNvbnN0''@;'; put 'put ''cnVjdG9yKGEsZCxoLGYsdixNLEQsWixuZSxjZSl7dGhpcy5uZ1pvbmU9YSx0aGlzLmxpY2VuY2VTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5ldmVudFNlcnZpY2U9Zix0aGlzLnNhc1N0b3JlU2VydmljZT12LHRoaXMubG9nZ2VyU2VydmljZT1NLHRoaXMuaGVscGVyU2Vydmlj''@;'; put 'put ''ZT1ELHRoaXMucm91dGVyPVosdGhpcy5hY3RpdmF0ZWRSb3V0ZT1uZSx0aGlzLmNkZj1jZSx0aGlzLl92aWV3Ym94TW9kYWw9ITEsdGhpcy52aWV3Ym94TW9kYWxDaGFuZ2U9bmV3IHFyLHRoaXMubGliaW5mbz1udWxsLHRoaXMubGlicmFyaWVzTG9hZGluZz0hMCx0aGlzLnZpZXdib3hlcz1b''@;'; put 'put ''XSx0aGlzLmRlZmF1bHRDb25maWc9e2lkOi0xLGxpYnJhcnk6IiIsdGFibGU6IiIsd2lkdGg6NTAwLGhlaWdodDozMDAseDowLHk6MTUwLGNvbHVtbnM6W119LHRoaXMuc2FzanNDb25maWc9bmV3IGZoLlNBU2pzQ29uZmlnLHRoaXMuaG90VGFibGVEZWZhdWx0PXtkYXRhOltdLGhlYWRlclBr''@;'; put 'put ''czpbXSwkZGF0YWZvcm1hdHM6e30sYWxsQ29sSGVhZGVyczpbXSxjb2xIZWFkZXJzSGlkZGVuOltdLGNvbEhlYWRlcnNWaXNpYmxlOltdLGNvbEhlYWRlcnM6W10sY29udGV4dE1lbnU6WyJjb3B5X3dpdGhfY29sdW1uX2hlYWRlcnMiLCJjb3B5X2NvbHVtbl9oZWFkZXJzX29ubHkiXSxjb3B5''@;'; put 'put ''UGFzdGU6e2NvcHlDb2x1bW5IZWFkZXJzOiEwLGNvcHlDb2x1bW5IZWFkZXJzT25seTohMH0sY29sdW1uczpbXSxjb2xzOltdLGhlaWdodDoiMTAwJSIsc2V0dGluZ3M6e30saGlkZGVuQ29sdW1uczohMCxtYW51YWxDb2x1bW5Nb3ZlOiExLGFmdGVyR2V0Q29sSGVhZGVyOnZvaWQgMCxsaWNl''@;'; put 'put ''bnNlS2V5OnZvaWQgMCxkcm9wZG93bk1lbnU6dm9pZCAwfSx0aGlzLnZpZXdib3hUYWJsZXM9W10sdGhpcy5maWx0ZXI9ITEsdGhpcy5maWx0ZXJMb2FkaW5nPSExLHRoaXMubnVsbFZhcmlhYmxlcz0hMSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0''@;'; put 'put ''ZSx0aGlzLkluZmluaXR5PTEvMCx0aGlzLm1heFZpZXdib3hlcz10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0PT09MS8wPzY6dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdHx8Nix0aGlzLmhvdFRhYmxlUmVnaXN0ZXJlcj1uZXcgWm19bmdPbkluaXQo''@;'; put 'put ''KXt0aGlzLnNhc1N0b3JlU2VydmljZS52aWV3TGlicygpLnRoZW4oZD0+e3RoaXMubGlicmFyaWVzPWQuc2FzbGlic30pLmNhdGNoKGQ9Pnt0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoZCl9KS5maW5hbGx5KCgpPT57dGhpcy5saWJyYXJpZXNMb2FkaW5nPSExfSksdGhpcy5fcXVlcnk9dGhp''@;'; put 'put ''cy5zYXNTdG9yZVNlcnZpY2UucXVlcnkuc3Vic2NyaWJlKGQ9Pnt0aGlzLmNsYXVzZXM9ZC5vYmosdGhpcy5maWx0ZXJMaWJkcz1kLmxpYmRzfSksdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNl''@;'; put 'put ''X2tleS5zdWJzY3JpYmUoZD0+e3RoaXMuaG90VGFibGVEZWZhdWx0LmxpY2Vuc2VLZXk9ZH0pO2NvbnN0IGE9dGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy52aWV3Ym94ZXM7YSYmKCExPT09dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveD8oc2V0VGltZW91''@;'; put 'put ''dCgoKT0+dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0RlbW9MaW1pdE1vZGFsKCJMaW5raW5nIFZpZXdib3hlcyIpKSx0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSx7cmVsYXRpdmVUbzp0aGlzLmFjdGl2YXRlZFJvdXRlLHF1ZXJ5UGFyYW1zOnt9fSkpOih0aGlzLnZpZXdib3hlcz10aGlzLmRlY29k''@;'; put 'put ''ZVVybERhdGEoYSksc2V0VGltZW91dCgoKT0+e3RoaXMuc2V0QWxsSGFuZGxlVHJhbnNmb3JtKCl9KSkpLHRoaXMucmVMb2FkVmlld2JveHRhYmxlcyh0aGlzLnZpZXdib3hlcyl9bmdBZnRlclZpZXdJbml0KCl7fWdldCB2aWV3Ym94TGltaXRSZWFjaGVkKCl7cmV0dXJuIHRoaXMudmlld2Jv''@;'; put 'put ''eGVzLmxlbmd0aD49dGhpcy5tYXhWaWV3Ym94ZXN9Y2xyTW9kYWxPcGVuQ2hhbmdlKGEpe3RoaXMudmlld2JveE1vZGFsQ2hhbmdlLmVtaXQoYSl9bGlicmFyeU9uQ2xpY2soYSl7YS50YWJsZXNMb2FkZWR8fHRoaXMubG9hZFRhYmxlcyhhLmxpYnJhcnkuTElCUkFSWVJFRixhLmxpYnJhcnkp''@;'; put 'put ''fXRhYmxlT25DbGljayhhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtpZihkLnZpZXdib3hMaW1pdFJlYWNoZWQpcmV0dXJuO2NvbnN0IGg9ey4uLmQuZGVmYXVsdENvbmZpZyx0YWJsZTphLmxpYlRhYmxlLGxpYnJhcnk6YS5saWJyYXJ5LkxJQlJBUllOQU1FLGxvYWRpbmdE''@;'; put 'put ''YXRhOiEwLGZpbHRlcl9wazoiMCIsaWQ6ZC52aWV3Ym94ZXMubGVuZ3RoKzEseDp3aW5kb3cuaW5uZXJXaWR0aC1kLmRlZmF1bHRDb25maWcud2lkdGgseToxNTB9O2Qudmlld2JveGVzLnB1c2goaCksc2V0VGltZW91dCgoKT0+e2Quc2V0QWxsSGFuZGxlVHJhbnNmb3JtKCl9KTtjb25zdCBm''@;'; put 'put ''PWAke2EubGlicmFyeS5MSUJSQVJZUkVGfS4ke2EubGliVGFibGV9YDt5aWVsZCBkLmxvYWREYXRhKGYsaCksaC5sb2FkaW5nRGF0YT0hMSxkLmV2ZW50U2VydmljZS5kaXNwYXRjaEV2ZW50KCJyZXNpemUiKSxkLnNuYXBUb0dyaWQoKX0pKCl9bG9hZFRhYmxlcyhhLGQpe3RoaXMuc2FzU3Rv''@;'; put 'put ''cmVTZXJ2aWNlLnZpZXdUYWJsZXMoYSkudGhlbihoPT57bGV0IGY9aC5tcHRhYmxlcy5tYXAoZnVuY3Rpb24odil7cmV0dXJuIHYuTUVNTkFNRX0pO3RoaXMubGliaW5mbz1oLmxpYmluZm98fFtdLHRoaXMudGFibGVzPWYsZCYmKGQudGFibGVzPWYsZC5saWJpbmZvPXRoaXMubGliaW5mbyxk''@;'; put 'put ''LmxvYWRpbmdUYWJsZXM9ITEsZi5sZW5ndGg+MCYmKGQuZXhwYW5kZWQ9ITApKX0pLmNhdGNoKGg9Pnt0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoaCl9KX1yZWxvYWREYXRhKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChmLHYpPT57''@;'; put 'put ''bGV0IE09aC52aWV3Ym94VGFibGVzLmZpbmQoRD0+RC52aWV3Ym94SWQ9PT1kLmlkKTtoLnNhc1N0b3JlU2VydmljZS52aWV3RGF0YShhLHBhcnNlSW50KGQuZmlsdGVyX3BrfHwiMCIpKS50aGVuKEQ9PntNJiYoTS5ob3RUYWJsZS5kYXRhPUQudmlld2RhdGEpLGYobnVsbCl9KS5jYXRjaCgo''@;'; put 'put ''KT0+e3YoKX0pfSl9KSgpfWxvYWREYXRhKGEsZCl7dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChmLHYpPT57bGV0IE09ITEsRD1oLnZpZXdib3hUYWJsZXMuZmluZChaPT5aLnZpZXdib3hJZD09PWQuaWQpO0QmJigiMCI9PT1kLmZpbHRlcl9w''@;'; put 'put ''a3x8IWQuZmlsdGVyX3BrKSYmZigpLGguc2FzU3RvcmVTZXJ2aWNlLnZpZXdEYXRhKGEscGFyc2VJbnQoZC5maWx0ZXJfcGt8fCIwIikpLnRoZW4oWj0+e0Q/TT0hMDpEPXt2aWV3Ym94SWQ6ZC5pZCx2aWV3Ym94TGliRGF0YXNldDphLGhvdFRhYmxlOkpSKGguaG90VGFibGVEZWZhdWx0KX0s''@;'; put 'put ''RC5ob3RUYWJsZS5kYXRhPVoudmlld2RhdGEsRC5ob3RUYWJsZS4kZGF0YWZvcm1hdHM9Wi4kdmlld2RhdGEsRC5ob3RUYWJsZS5jb2xzPVouY29scyxrZWUoRC5ob3RUYWJsZS5jb2xzLFtdLFouJHZpZXdkYXRhKTtsZXQgbmU9W10sY2U9W107Zm9yKGxldCBiZSBpbiBaLnZpZXdkYXRhWzBd''@;'; put 'put ''KWJlJiZjZS5wdXNoKGJlKTtmb3IobGV0IGJlPTA7YmU8Y2UubGVuZ3RoO2JlKyspbmUucHVzaCh7ZGF0YTpjZVtiZV19KTtELmhvdFRhYmxlLmhlYWRlclBrcz1KUihaLnNhc3BhcmFtc1swXS5QS19GSUVMRFMuc3BsaXQoIiAiKSksRC5ob3RUYWJsZS5hbGxDb2xIZWFkZXJzPWNlLmZpbHRl''@;'; put 'put ''cihiZT0+IUQuaG90VGFibGUuaGVhZGVyUGtzLmluY2x1ZGVzKGJlKSksRC5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuPUpSKEQuaG90VGFibGUuYWxsQ29sSGVhZGVycyksRC5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZT1jZS5maWx0ZXIoYmU9PkQuaG90VGFibGUuaGVhZGVyUGtzLmlu''@;'; put 'put ''Y2x1ZGVzKGJlKSksRC5ob3RUYWJsZS5jb2xIZWFkZXJzPWNlLEQuaG90VGFibGUuY29sdW1ucz1uZSxkLmNvbHVtbnMmJmQuY29sdW1ucy5sZW5ndGg+MD8oRC5ob3RUYWJsZS5tYW51YWxDb2x1bW5Nb3ZlPWQuY29sdW1ucyxkLmNvbHVtbnM/Lm1hcCgoYmUsRWUpPT57Y29uc3QgQmU9Y2Vb''@;'; put 'put ''YmVdLHFlPUQuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbi5pbmRleE9mKEJlKTtxZT4tMSYmKEQuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbi5zcGxpY2UocWUsMSksRC5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZVtFZV09QmUpfSkpOkQuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUu''@;'; put 'put ''cHVzaCguLi5ELmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4uc3BsaWNlKDAsMTApKSxELmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlPUQuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUuZmlsdGVyKGJlPT5iZSksTXx8aC52aWV3Ym94VGFibGVzLnB1c2goRCksZC5xdWVyeT1oLmhlbHBl''@;'; put 'put ''clNlcnZpY2UuZGVlcENsb25lKFoucXVlcnkpLGQuZmlsdGVyVGV4dD1aLnNhc3BhcmFtc1swXS5GSUxURVJfVEVYVCxzZXRUaW1lb3V0KCgpPT57aC51cGRhdGVIb3RDb2x1bW5zKEQuaG90VGFibGUuY29sSGVhZGVyc0hpZGRlbnx8W10sZC5pZCk7Y29uc3QgYmU9aC5nZXRWaWV3Ym94SG90''@;'; put 'put ''SW5zdGFuY2UoZC5pZCk7YmU/LnVwZGF0ZVNldHRpbmdzKHttYW51YWxDb2x1bW5Nb3ZlOkQuaG90VGFibGUubWFudWFsQ29sdW1uTW92ZSxhZnRlckdldENvbEhlYWRlcjooRWUsQmUpPT57Y29uc3QgcWU9YmU/LmNvbFRvUHJvcChFZSk7cWUmJkQuaG90VGFibGUuaGVhZGVyUGtzLmluZGV4''@;'; put 'put ''T2YocWUpPi0xJiZCZS5jbGFzc0xpc3QuYWRkKCJwcmltYXJ5S2V5SGVhZGVyU3R5bGUiKSxCZS5jbGFzc0xpc3QuYWRkKEtuLmhhbmRzb250YWJsZS5kYXJrVGFibGVIZWFkZXJDbGFzcyl9fSksYmU/LnJlbmRlcigpLGguc2VsZWN0ZWRWaWV3Ym94JiZoLnJlc2V0U2VsZWN0ZWRWaWV3Ym94''@;'; put 'put ''KGQpfSksZigpfSkuY2F0Y2goWj0+e2gubG9nZ2VyU2VydmljZS5lcnJvcihaKSx2KCl9KX0pfSkoKX1yZUxvYWRWaWV3Ym94dGFibGVzKGEpe2EubWFwKGQ9Pntjb25zdCBoPWAke2QubGlicmFyeX0uJHtkLnRhYmxlfWA7ZC5sb2FkaW5nRGF0YT0hMCx0aGlzLmxvYWREYXRhKGgsZCkudGhl''@;'; put 'put ''bigoKT0+e2QubG9hZGluZ0RhdGE9ITF9KX0pfW1heFdpZHRoQ2hla2VyKGEsZCl7cmV0dXJuIGE+MjAwPzIwMDphfWdldFZpZXdib3hUYWJsZUluZGV4KGEpe3JldHVybiB0aGlzLnZpZXdib3hUYWJsZXMuZmluZEluZGV4KGg9Pmgudmlld2JveElkPT09YS5pZCl9cmVzaXplKGEsZCl7Y29u''@;'; put 'put ''c3QgaD1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGY9ZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx2PWgubGVmdC1mLmxlZnQraC53aWR0aCxNPWgudG9wLWYudG9wK2guaGVpZ2h0O3JldHVybiBkLnN0eWxlLndpZHRoPXYrInB4IixkLnN0eWxlLmhlaWdodD1NKyJweCIsdGhpcy5zZXRB''@;'; put 'put ''bGxIYW5kbGVUcmFuc2Zvcm0oKSx0aGlzLmhlbHBlclNlcnZpY2UuZGVib3VuY2VDYWxsKDFlMywoKT0+e3RoaXMudmlld2JveENoYW5nZWQoKSx0aGlzLmV2ZW50U2VydmljZS5kaXNwYXRjaEV2ZW50KCJyZXNpemUiKX0pLHt3aWR0aDp2LGhlaWdodDpNfX1kcmFnTW92ZShhLGQsaCxmKXt0''@;'; put 'put ''aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKT0+e2NvbnN0IHY9dGhpcy5yZXNpemUoYSxkKTtoLndpZHRoPXYud2lkdGgsaC5oZWlnaHQ9di5oZWlnaHR9KX1zZXRBbGxIYW5kbGVUcmFuc2Zvcm0oKXt0aGlzLnJlc2l6ZUJveFF1ZXJ5LmZvckVhY2goYT0+e2NvbnN0IGQ9YS5uYXRp''@;'; put 'put ''dmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGg9YGhhbmRsZV8ke2EubmF0aXZlRWxlbWVudC5pZH1gLGY9dGhpcy5kcmFnSGFuZGxlQ29ybmVyUXVlcnkuZmluZCgodixNKT0+di5uYXRpdmVFbGVtZW50LmlkPT09aCk7dGhpcy5zZXRIYW5kbGVUcmFuc2Zvcm0oZj8ubmF0aXZl''@;'; put 'put ''RWxlbWVudCxkLCJib3RoIil9KX1zZXRIYW5kbGVUcmFuc2Zvcm0oYSxkLGgpe2NvbnN0IGY9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgdj1kLndpZHRoLWYud2lkdGgsTT1kLmhlaWdodC1mLmhlaWdodDt2Kz01LE0rPTUsIngiPT09aCYmKGEuc3R5bGUudHJhbnNmb3JtPWB0cmFu''@;'; put 'put ''c2xhdGUoJHt2fXB4LCAwKWApLCJ5Ij09PWgmJihhLnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlKDAsICR7TX1weClgKSwiYm90aCI9PT1oJiYoYS5zdHlsZS50cmFuc2Zvcm09YHRyYW5zbGF0ZSgke3Z9cHgsICR7TX1weClgKX1mb2N1c1ZpZXdib3goYSl7dGhpcy52aWV3Ym94ZXMubWFw''@;'; put 'put ''KGQ9PntkLmZvY3VzZWQ9ITF9KSxhLmZvY3VzZWQ9ITB9dmlld2JveERyYWdFbmRlZChhLGQpe2xldCBmPWEuc291cmNlLmdldFJvb3RFbGVtZW50KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7ZC54PWYubGVmdCxkLnk9Zi50b3AsdGhpcy52aWV3Ym94Q2hhbmdlZCgpfXNuYXBUb0dyaWQo''@;'; put 'put ''KXtjb25zdCBhPXdpbmRvdy5pbm5lcldpZHRoLGQ9d2luZG93LmlubmVySGVpZ2h0LE09TWF0aC5jZWlsKHRoaXMudmlld2JveGVzLmxlbmd0aC8yKSxEPU1hdGguZmxvb3IodGhpcy52aWV3Ym94ZXMubGVuZ3RoLzIpLGNlPShhLTUqKE0rMSkpL00sYmU9KGEtNSooRCsxKSkvRDtsZXQgQmU9''@;'; put 'put ''MCxudD0oZC0yNTAtNjApLzIsbHQ9MCxtdD0wO2ZvcihsZXQgSnQ9MDtKdDx0aGlzLnZpZXdib3hlcy5sZW5ndGg7SnQrKyl7bGV0IHluPXRoaXMudmlld2JveGVzW0p0XSxDbj0hKEp0Pk0tMSk7Y29uc3QgdG49Q24/Y2U6YmU7IUNuJiYwPT09bXQmJihsdD0wLG10KyssQmU9MCkseW4ueD01''@;'; put 'put ''K0JlK2x0Kih0bis1KSx5bi55PTI1MCttdCoobnQrNSkseW4ud2lkdGg9dG4seW4uaGVpZ2h0PW50LGx0Kyt9dGhpcy52aWV3Ym94Q2hhbmdlZCgpLHNldFRpbWVvdXQoKCk9Pnt0aGlzLnNldEFsbEhhbmRsZVRyYW5zZm9ybSgpfSl9bWluaW1pemVBbGwoKXt0aGlzLnZpZXdib3hlcy5mb3JF''@;'; put 'put ''YWNoKGE9PnthLm1pbmltaXplZD0hMH0pLHRoaXMudmlld2JveENoYW5nZWQoKX1yZXN0b3JlQWxsKCl7dGhpcy52aWV3Ym94ZXMuZm9yRWFjaChhPT57YS5taW5pbWl6ZWQ9ITF9KSx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9cmVzZXRQb3NTaXplKGEpe2EueD13aW5kb3cuaW5uZXJXaWR0aC10''@;'; put 'put ''aGlzLmRlZmF1bHRDb25maWcud2lkdGgsYS55PXRoaXMuZGVmYXVsdENvbmZpZy55LGEud2lkdGg9dGhpcy5kZWZhdWx0Q29uZmlnLndpZHRoLGEuaGVpZ2h0PXRoaXMuZGVmYXVsdENvbmZpZy5oZWlnaHQsdGhpcy52aWV3Ym94Q2hhbmdlZCgpfW1pbmltaXplKGEpe2EubWluaW1pemVkPSEw''@;'; put 'put ''LHRoaXMudmlld2JveENoYW5nZWQoKX1yZXN0b3JlKGEpe2EubWluaW1pemVkPSExLHRoaXMudmlld2JveENoYW5nZWQoKX1jb2xsYXBzZShhKXthLmNvbGxhcHNlZD0hMCx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9ZXhwYW5kKGEpe2EuY29sbGFwc2VkPSExLHRoaXMudmlld2JveENoYW5nZWQo''@;'; put 'put ''KX1jbG9zZShhKXtjb25zdCBkPXRoaXMudmlld2JveGVzLmZpbmRJbmRleChmPT5mLmlkPT09YS5pZCksaD10aGlzLnZpZXdib3hUYWJsZXMuZmluZEluZGV4KGY9PmYudmlld2JveElkPT09YS5pZCk7ZD4tMSYmdGhpcy52aWV3Ym94ZXMuc3BsaWNlKGQsMSksaD4tMSYmdGhpcy52aWV3Ym94''@;'; put 'put ''VGFibGVzLnNwbGljZShoLDEpLHRoaXMuc2VsZWN0ZWRWaWV3Ym94Py5pZD09PWEuaWQmJnRoaXMudW5zZXRTZWxlY3RlZFZpZXdib3goKSxLbi52aWV3Ym94ZXNbYS5pZF09dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShuWiksdGhpcy52aWV3Ym94Q2hhbmdlZCgpfXNlbGVjdFZpZXdi''@;'; put 'put ''b3goYSl7dm9pZCAwPT09dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZSYmdm9pZCAwPT09dGhpcy5zZWxlY3RlZFZpZXdib3g/dGhpcy5yZXNldFNlbGVjdGVkVmlld2JveChhKTphLmlkPT09dGhpcy5zZWxlY3RlZFZpZXdib3g/LmlkP3RoaXMudW5zZXRTZWxlY3RlZFZpZXdib3goKTp0aGlz''@;'; put 'put ''LnJlc2V0U2VsZWN0ZWRWaWV3Ym94KGEpfWNvbHVtbnNEcm9wKGEpe3RoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4mJihhLnByZXZpb3VzQ29udGFpbmVyPT09YS5jb250YWluZXI/ZTFlKGEuY29udGFpbmVyLmRhdGEsYS5wcmV2aW91c0luZGV4''@;'; put 'put ''LGEuY3VycmVudEluZGV4KTpmdW5jdGlvbiBnRmUoYyxsLGEsZCl7Y29uc3QgaD1FeChhLGMubGVuZ3RoLTEpLGY9RXgoZCxsLmxlbmd0aCk7Yy5sZW5ndGgmJmwuc3BsaWNlKGYsMCxjLnNwbGljZShoLDEpWzBdKX0oYS5wcmV2aW91c0NvbnRhaW5lci5kYXRhLGEuY29udGFpbmVyLmRhdGEs''@;'; put 'put ''YS5wcmV2aW91c0luZGV4LGEuY3VycmVudEluZGV4KSx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlJiYib2JqZWN0Ij09dHlwZW9mIHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVycykmJnRoaXMudXBkYXRlQ29sdW1uT3JkZXJIb3QoYS5pdGVt''@;'; put 'put ''LmRhdGEsYS5jdXJyZW50SW5kZXgsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94SWQpfW9uQ29sc2VhcmNoQ2hhbmdlKGEsZCxoKXtjb25zdCBmPWguaW5kZXhPZihkKTtoLnNwbGljZShmLDEpLGEudmFsdWU9IiIsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUm''@;'; put 'put ''Jih0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLnB1c2goZCksdGhpcy51cGRhdGVIb3RDb2x1bW5zKHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4sdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS52''@;'; put 'put ''aWV3Ym94SWQpLHRoaXMudXBkYXRlQ29sdW1uT3JkZXJIb3QoZCx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLmxlbmd0aC0xLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUudmlld2JveElkKSl9b25Db2xSZW1vdmUoYSl7aWYodGhpcy5zZWxl''@;'; put 'put ''Y3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUpe2NvbnN0IGQ9dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzVmlzaWJsZS5pbmRleE9mKGEpO3RoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUuc3BsaWNlKGQsMSks''@;'; put 'put ''dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZS5jb2xIZWFkZXJzSGlkZGVuLnB1c2goYSksdGhpcy51cGRhdGVIb3RDb2x1bW5zKHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4sdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3''@;'; put 'put ''Ym94SWQpLHRoaXMudXBkYXRlQ29sdW1uT3JkZXJIb3QoYSx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNWaXNpYmxlLmxlbmd0aCx0aGlzLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCl9fXJlc2V0U2VsZWN0ZWRWaWV3Ym94KGEpe3RoaXMuc2Vs''@;'; put 'put ''ZWN0ZWRWaWV3Ym94PWEsdGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT10aGlzLnZpZXdib3hUYWJsZXMuZmluZChkPT5kLnZpZXdib3hJZD09PWEuaWQpfXVuc2V0U2VsZWN0ZWRWaWV3Ym94KCl7dGhpcy5zZWxlY3RlZFZpZXdib3g9dm9pZCAwLHRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU9''@;'; put 'put ''dm9pZCAwfXN0b3BQcm9wYWdhdGlvbihhKXthLnN0b3BQcm9wYWdhdGlvbigpfW9wZW5GaWx0ZXIoYSl7dGhpcy5zZWxlY3RWaWV3Ym94KGEpO2NvbnN0IGQ9dGhpcy52aWV3Ym94VGFibGVzW3RoaXMuZ2V0Vmlld2JveFRhYmxlSW5kZXgoYSldO3RoaXMuZmlsdGVyTGliZHM9YCR7YS5saWJy''@;'; put 'put ''YXJ5fS4ke2EudGFibGV9YCx0aGlzLmZpbHRlcmluZ1ZpZXdib3g9YSx0aGlzLmZpbHRlcj0hMCx0aGlzLmNkZi5kZXRlY3RDaGFuZ2VzKCksdGhpcy5zYXNTdG9yZVNlcnZpY2Uuc2V0UXVlcnlWYXJpYWJsZXModGhpcy5maWx0ZXJMaWJkcyxkLmhvdFRhYmxlLmNvbHMpfW9wZW5UYWJsZUVk''@;'; put 'put ''aXQoYSl7Y29uc3QgZD1hLmxpYnJhcnkrIi4iK2EudGFibGU7bGV0IGg9bG9jYXRpb24uaHJlZi5zbGljZSgwLGxvY2F0aW9uLmhyZWYuaW5kZXhPZigiIyIpKTtoPWAke2h9Iy9lZGl0b3IvJHtkfWAsd2luZG93Lm9wZW4oaCwiX2JsYW5rIil9cmVzZXRGaWx0ZXIoKXt0aGlzLmZpbHRlcmlu''@;'; put 'put ''Z1ZpZXdib3gmJih0aGlzLmZpbHRlcmluZ1ZpZXdib3guZmlsdGVyX3BrPSIwIix0aGlzLnJlbG9hZFRhYmxlRGF0YSh0aGlzLmZpbHRlcmluZ1ZpZXdib3gpLHRoaXMuZmlsdGVyPSExLHRoaXMudmlld2JveENoYW5nZWQoKSxLbi52aWV3Ym94ZXNbdGhpcy5maWx0ZXJpbmdWaWV3Ym94Lmlk''@;'; put 'put ''XT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKG5aKSl9c2VuZENsYXVzZSgpe3RoaXMuZmlsdGVyTG9hZGluZz0hMDtsZXQgYT1bXSxkPVtdO2lmKHR5cGVvZiB0aGlzLmNsYXVzZXM+InUiKXJldHVybiB0aGlzLm51bGxWYXJpYWJsZXM9ITAsdm9pZCh0aGlzLmZpbHRlckxvYWRpbmc9''@;'; put 'put ''ITEpO3tsZXQgaD10aGlzLmNsYXVzZXMucXVlcnlPYmo7Zm9yKGxldCBmPTA7ZjxoLmxlbmd0aDtmKyspe2NvbnN0IHY9aFtmXS5lbGVtZW50czthPXYuZmlsdGVyKGZ1bmN0aW9uKE0pe3JldHVybiBudWxsPT09TS52YXJpYWJsZX0pLGEubGVuZ3RoJiZkLnB1c2godil9fWlmKGQubGVuZ3Ro''@;'; put 'put ''KXJldHVybiB0aGlzLm51bGxWYXJpYWJsZXM9ITAsdm9pZCh0aGlzLmZpbHRlckxvYWRpbmc9ITEpO3RyeXtpZih2b2lkIDAhPT10aGlzLmNsYXVzZXMmJnRoaXMuZmlsdGVyTGliZHMpe2NvbnN0IGg9e2dyb3VwTG9naWM6dGhpcy5jbGF1c2VzLmdyb3VwTG9naWMsZmlsdGVyR3JvdXBzOltd''@;'; put 'put ''fTt0aGlzLmNsYXVzZXMucXVlcnlPYmouZm9yRWFjaCh2PT57Y29uc3QgTT17ZmlsdGVyQ2xhdXNlczpbXX07di5lbGVtZW50cy5mb3JFYWNoKEQ9PntNLmZpbHRlckNsYXVzZXMucHVzaCh0aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKEQpKX0pLE0uY2xhdXNlTG9naWM9di5jbGF1c2VM''@;'; put 'put ''b2dpYyxoLmZpbHRlckdyb3Vwcy5wdXNoKHRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoTSkpfSk7Y29uc3QgZj10aGlzLnNhc1N0b3JlU2VydmljZS5jcmVhdGVGaWx0ZXJRdWVyeVRhYmxlKGgpO3RoaXMuc2FzU3RvcmVTZXJ2aWNlLnNhdmVRdWVyeSh0aGlzLmZpbHRlckxpYmRzLGYp''@;'; put 'put ''LnRoZW4odj0+e3RoaXMuZmlsdGVyaW5nVmlld2JveC5maWx0ZXJfcGs9di5yZXN1bHRbMF0uRklMVEVSX1JLLHRoaXMubG9hZERhdGEodGhpcy5maWx0ZXJMaWJkcyx0aGlzLmZpbHRlcmluZ1ZpZXdib3gpLnRoZW4oKCk9Pnt0aGlzLmZpbHRlcj0hMSx0aGlzLmZpbHRlckxvYWRpbmc9ITF9''@;'; put 'put ''KSx0aGlzLnZpZXdib3hDaGFuZ2VkKCl9KS5jYXRjaCh2PT57dGhpcy5maWx0ZXJMb2FkaW5nPSExfSl9fWNhdGNoe3RoaXMuZmlsdGVyTG9hZGluZz0hMX19c2VhcmNoVGFibGUoYSxkKXt2YXIgaD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtkLnNlYXJjaExvYWRpbmc9ITA7bGV0IGY9''@;'; put 'put ''YS52YWx1ZSx2PWQubGlicmFyeSsiLiIrZC50YWJsZSxNPXBhcnNlSW50KGQuZmlsdGVyX3BrfHwiMCIpO2NvbnN0IEQ9aC52aWV3Ym94VGFibGVzLmZpbmQoWj0+Wi52aWV3Ym94SWQ9PT1kLmlkKTtEJiYoeWllbGQgaC5zYXNTdG9yZVNlcnZpY2Uudmlld0RhdGFTZWFyY2goZixkLnNlYXJj''@;'; put 'put ''aE51bWVyaWMsdixNKS50aGVuKFo9PntaLnNhc3BhcmFtc3x8Wi52aWV3RGF0YT9ELmhvdFRhYmxlLmRhdGE9Wi52aWV3ZGF0YTpkLnNlYXJjaExvYWRpbmc9ITB9KS5jYXRjaChaPT57aC5sb2dnZXJTZXJ2aWNlLmVycm9yKFopfSksZC5zZWFyY2hMb2FkaW5nPSExKX0pKCl9cmVsb2FkVGFi''@;'; put 'put ''bGVEYXRhKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2NvbnN0IGg9YCR7YS5saWJyYXJ5fS4ke2EudGFibGV9YDthLmxvYWRpbmdEYXRhPSEwLHlpZWxkIGQucmVsb2FkRGF0YShoLGEpLGEubG9hZGluZ0RhdGE9ITEsZC5ldmVudFNlcnZpY2UuZGlzcGF0Y2hFdmVudCgi''@;'; put 'put ''cmVzaXplIil9KSgpfXVwZGF0ZUhvdENvbHVtbnMoYSxkKXt0aGlzLnVwZGF0ZUhpZGRlbkNvbHVtbnNIb3QoYSxkKSx0aGlzLnNldENvbHVtbk9yZGVyKGQpfXVwZGF0ZUNvbHVtbk9yZGVySG90KGEsZCxoKXtjb25zdCBmPXRoaXMuZ2V0Vmlld2JveEhvdEluc3RhbmNlKGgpO2lmKGYpe2Nv''@;'; put 'put ''bnN0IHY9Zi5wcm9wVG9Db2woYSk7Zi5nZXRQbHVnaW4oIm1hbnVhbENvbHVtbk1vdmUiKS5tb3ZlQ29sdW1uKHYsZCksZi5yZW5kZXIoKSx0aGlzLnNldENvbHVtbk9yZGVyKGgpfX10YWJsZUVkaXRFeGlzdHMoYSl7Y29uc3QgZD1Lbi5lZGl0b3IubGlic0FuZFRhYmxlcyxoPWEubGlicmFy''@;'; put 'put ''eTtyZXR1cm4hIWRbaF0mJmRbaF0uaW5jbHVkZXMoYS50YWJsZSl9c2V0Q29sdW1uT3JkZXIoYSl7Y29uc3QgZD10aGlzLnZpZXdib3hlcy5maW5kKGg9PmguaWQ9PT1hKTtpZihkKXtjb25zdCBoPXRoaXMuY3JlYXRlQ29sdW1uT3JkZXIoYSk7ZC5jb2x1bW5zPWgubGVuZ3RoPjA/aDpkLmNv''@;'; put 'put ''bHVtbnN9dGhpcy52aWV3Ym94Q2hhbmdlZCgpfWNyZWF0ZUNvbHVtbk9yZGVyKGEpe2NvbnN0IGQ9dGhpcy5nZXRWaWV3Ym94SG90SW5zdGFuY2UoYSk7aWYoIWQpcmV0dXJuW107Y29uc3QgaD1kLmdldENvbEhlYWRlcigpLGY9dGhpcy5zZWxlY3RlZFZpZXdib3hUYWJsZT8uaG90VGFibGUu''@;'; put 'put ''Y29sSGVhZGVycztpZighZilyZXR1cm5bXTtjb25zdCB2PXRoaXMuc2VsZWN0ZWRWaWV3Ym94VGFibGU/LmhvdFRhYmxlPy5jb2xIZWFkZXJzVmlzaWJsZS5sZW5ndGh8fDUsTT1bXTtyZXR1cm4gaC5tYXAoKEQsWik9PntpZihaPHYpe2NvbnN0IG5lPWYuaW5kZXhPZihEKTtuZT4tMSYmTS5w''@;'; put 'put ''dXNoKG5lKX19KSxNfXVwZGF0ZUhpZGRlbkNvbHVtbnNIb3QoYSxkKXtjb25zdCBoPXRoaXMuZ2V0Vmlld2JveEhvdEluc3RhbmNlKGQpO2lmKGgpe2NvbnN0IGY9YS5tYXAodj0+aC5wcm9wVG9Db2wodikpO2gudXBkYXRlU2V0dGluZ3Moe2hpZGRlbkNvbHVtbnM6e2NvbHVtbnM6Zn19KSxo''@;'; put 'put ''LnJlbmRlcigpfX1nZXRWaWV3Ym94SG90SW5zdGFuY2UoYSl7cmV0dXJuIGE/dGhpcy5ob3RUYWJsZVJlZ2lzdGVyZXIuZ2V0SW5zdGFuY2UoYGhvdEluc3RhbmNlX3ZpZXdib3hfJHthfWApOnZvaWQgMH12aWV3Ym94Q2hhbmdlZCgpe2xldCBhO2NvbnN0IGQ9dGhpcy5lbmNvZGVVcmxEYXRh''@;'; put 'put ''KHRoaXMudmlld2JveGVzKTtkLmxlbmd0aD4wJiYoYT17dmlld2JveGVzOmR9KSx0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSx7cmVsYXRpdmVUbzp0aGlzLmFjdGl2YXRlZFJvdXRlLHF1ZXJ5UGFyYW1zOmF9KSx0aGlzLnByZXBhcmVGaWx0ZXJDYWNoZSgpfXByZXBhcmVGaWx0ZXJDYWNoZSgp''@;'; put 'put ''e2ZvcihsZXQgYSBvZiB0aGlzLnZpZXdib3hlcylpZihLbi52aWV3Ym94ZXNbYS5pZF18fChLbi52aWV3Ym94ZXNbYS5pZF09dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShuWikpLGEucXVlcnkmJmEucXVlcnkubGVuZ3RoPjApe2NvbnN0IGQ9dGhpcy52aWV3Ym94VGFibGVzLmZpbmQo''@;'; put 'put ''Zj0+Zi52aWV3Ym94SWQ9PT1hLmlkKSxoPWB2aWV3Ym94ZXMuJHthLmlkfWA7S24udmlld2JveGVzW2EuaWRdLmZpbHRlci5xdWVyeT1hLnF1ZXJ5LEtuLnZpZXdib3hlc1thLmlkXS5maWx0ZXIubGliZHM9YS5saWJyYXJ5KyIuIithLnRhYmxlLHRoaXMuc2FzU3RvcmVTZXJ2aWNlLmluaXRp''@;'; put 'put ''YWxpemVHbG9iYWxGaWx0ZXJDbGF1c2UoaCxkPy5ob3RUYWJsZS5jb2xzKX19ZW5jb2RlVXJsRGF0YShhKXtsZXQgZD0iIjtyZXR1cm4gYS5tYXAoKGgsZik9PntkKz1gJHtoLmlkfS0ke2gubGlicmFyeX0tJHtoLnRhYmxlfS0ke2gud2lkdGh9LSR7aC5oZWlnaHR9LSR7aC54fS0ke2gueX0t''@;'; put 'put ''JHtoLmNvbGxhcHNlZD8xOjB9LSR7aC5taW5pbWl6ZWQ/MTowfS0ke2guZmlsdGVyX3BrfHwwfSR7aC5jb2x1bW5zJiZoLmNvbHVtbnMubGVuZ3RoPjA/Ii0iK2guY29sdW1ucz8uam9pbigiLCIpOiIifWAsZiE9PWEubGVuZ3RoLTEmJihkKz0iOyIpfSksZH1kZWNvZGVVcmxEYXRhKGEpe2xl''@;'; put 'put ''dCBoPVtdO3JldHVybiBhLnNwbGl0KCI7IikubWFwKHY9Pntjb25zdCBNPXYuc3BsaXQoIi0iKTtoLnB1c2goe2lkOnBhcnNlSW50KE1bMF0pLGxpYnJhcnk6TVsxXSx0YWJsZTpNWzJdLHdpZHRoOnBhcnNlSW50KE1bM10pLGhlaWdodDpwYXJzZUludChNWzRdKSx4OnBhcnNlSW50KE1bNV0p''@;'; put 'put ''LHk6cGFyc2VJbnQoTVs2XSksY29sbGFwc2VkOiEhcGFyc2VJbnQoTVs3XSksbWluaW1pemVkOiEhcGFyc2VJbnQoTVs4XSksY29sdW1uczpNWzEwXT8uc3BsaXQoIiwiKS5tYXAoRD0+cGFyc2VJbnQoRCkpfHxbXSxmaWx0ZXJfcGs6TVs5XX0pfSksaH1uZ09uRGVzdHJveSgpe3RoaXMuX3F1''@;'; put 'put ''ZXJ5Py51bnN1YnNjcmliZSgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKFlvKSxHZShkMSksR2UoSnMpLEdlKHBjKSxHZShWaCksR2UoU2QpLEdlKEd1KSxHZShMcyksR2UoQ3UpLEdlKHhzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1O''@;'; put 'put ''cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdmlld2JveGVzIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmKG5hKG42dCw1KSxuYShyNnQsNSkpLDImZCl7bGV0IGY7eGkoZj1FaSgpKSYmKGgucmVzaXplQm94UXVlcnk9ZikseGkoZj1FaSgpKSYmKGguZHJhZ0hhbmRsZUNv''@;'; put 'put ''cm5lclF1ZXJ5PWYpfX0saW5wdXRzOnt2aWV3Ym94TW9kYWw6InZpZXdib3hNb2RhbCJ9LG91dHB1dHM6e3ZpZXdib3hNb2RhbENoYW5nZToidmlld2JveE1vZGFsQ2hhbmdlIn0sZGVjbHM6NTYsdmFyczoyMyxjb25zdHM6W1siaW5wdXQiLCIiXSxbInJlc2l6ZUJveCIsIiJdLFsiZHJhZ0hh''@;'; put 'put ''bmRsZUNvcm5lciIsIiJdLFsic2VhcmNoRWwiLCIiXSxbInF1ZXJ5RmlsdGVyIiwiIl0sWyJhcHBEcmFnTmRyb3AiLCIiLDEsInJvb3QtbW9kYWwiLCJwb3NpdGlvbi1yZWxhdGl2ZSIsMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSIsImNs''@;'; put 'put ''ck1vZGFsU2l6ZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsiY2xhc3MiLCJsaWNlbmNlLW5vdGljZSIsNCwibmdJZiJdLFsxLCJtb2RhbC1ib2R5IiwiZC1mbGV4Il0sWzEsImFkZC1uZXciLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxbMSwibXQtMC1pIl0sWzEsInctMTAwIl0sWyJjbGFz''@;'; put 'put ''cyIsIm15LTEwLW14LWF1dG8gdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwibS0wIHZpZXdib3gtbGltaXQtbm90aWNlIiw0LCJuZ0lmIl0sWzMsImxpYnJhcnlMaXN0IiwibGlicmFyeU9uQ2xpY2tFbWl0dGVyIiwidGFibGVPbkNsaWNrRW1pdHRlciIsNCwibmdJZiJdLFsxLCJj''@;'; put 'put ''dXJyZW50bHktb3BlbiJdLFsxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iXSxbInJvbGUiLCJ0b29sdGlwIiwiYXJpYS1oYXNwb3B1cCIsInRydWUiLDEsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC1ib3R0b20tbGVmdCIsIm1sLTMiLDMsImNsaWNrIl0s''@;'; put 'put ''WyJzaGFwZSIsImdyaWQtdmlldyIsInNpemUiLCIxOSJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbInNoYXBlIiwibWludXMiLCJzaXplIiwiMTkiXSxbInNoYXBlIiwid2luZG93LXJlc3RvcmUiLCJzaXplIiwiMTkiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgdy0xMDAgbS0wIiw0LCJuZ0lm''@;'; put 'put ''Il0sWyJjbGFzcyIsIm9wZW4tdmlld2JveCBkLWZsZXggY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIGNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLDMsInNlbGVjdGVkIiwiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdl''@;'; put 'put ''ZW4iLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwibXQtMTAiXSxbMSwibS0wIl0sWyJjbGFzcyIsImNvbmZpZ3VyYXRpb24td3JhcHBlciIsImNka0Ryb3BMaXN0R3JvdXAiLCIiLDQsIm5nVmFyIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNt''@;'; put 'put ''IiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWzEsInZpZXdib3hlcy1jb250YWluZXIiXSxbImNsYXNzIiwidmlld2JveCIsImNka0RyYWdCb3VuZGFyeSIsIi52aWV3Ym94ZXMtY29udGFpbmVyIiwiY2RrRHJhZyIsIiIsInRhYmluZGV4IiwiMCIsMywiZm9jdXNlZCIsImRpc3BsYXkiLCJ3''@;'; put 'put ''aWR0aCIsImhlaWdodCIsInBvaW50ZXItZXZlbnRzIiwiYm94LXNoYWRvdyIsImNka0RyYWdGcmVlRHJhZ1Bvc2l0aW9uIiwiaWQiLCJtb3VzZWRvd24iLCJjZGtEcmFnRW5kZWQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJmaWx0ZXItbW9kYWwiLDMsImNsck1vZGFsT3BlbkNoYW5nZSIs''@;'; put 'put ''ImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiLCJjZW50ZXIiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWRhcmtlci1ncmF5Il0sWzEsIm1vZGFsLWJvZHkiXSxbMywidmlld2JveElkIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0''@;'; put 'put ''dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsxLCJsaWNlbmNlLW5vdGljZSJdLFsxLCJteS0xMC1teC1hdXRvIiwi''@;'; put 'put ''dGV4dC1jZW50ZXIiXSxbImNsck1lZGl1bSIsIiJdLFsxLCJtLTAiLCJ2aWV3Ym94LWxpbWl0LW5vdGljZSJdLFszLCJsaWJyYXJ5T25DbGlja0VtaXR0ZXIiLCJ0YWJsZU9uQ2xpY2tFbWl0dGVyIiwibGlicmFyeUxpc3QiXSxbMSwidGV4dC1jZW50ZXIiLCJ3LTEwMCIsIm0tMCJdLFsxLCJv''@;'; put 'put ''cGVuLXZpZXdib3giLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwzLCJjbGljayJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbHJTbWFsbCIsIiIsImNsYXNzIiwibWwtMyIsNCwibmdJZiJd''@;'; put 'put ''LFsicm9sZSIsInRvb2x0aXAiLCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIsMSwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwzLCJjbGljayJdLFsic2hhcGUiLCJjdXJzb3ItbW92ZSIsInNpemUiLCIxMyJdLFsicm9sZSIsInRvb2x0aXAiLCJhcmlhLWhhc3Bv''@;'; put 'put ''cHVwIiwidHJ1ZSIsImNsYXNzIiwidG9vbHRpcCB0b29sdGlwLW1kIHRvb2x0aXAtYm90dG9tLWxlZnQgbWwtMyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLCJzaXplIiwiMTkiXSxbImNsclNtYWxsIiwiIiwxLCJtbC0zIl0sWyJjZGtEcm9wTGlzdEdyb3VwIiwiIiwx''@;'; put 'put ''LCJjb25maWd1cmF0aW9uLXdyYXBwZXIiXSxbNCwibmdJZiJdLFsxLCJjb2xzLXNlYXJjaCJdLFsidHlwZSIsInRleHQiLCJhdXRvY29tcGxldGUiLCJvZmYiLCJhdXRvZm9jdXMiLCIiLCJwbGFjZWhvbGRlciIsIlNlYXJjaCBjb2x1bW5zIiwidGFiaW5kZXgiLCIwIiwzLCJ2YWx1ZUNoYW5n''@;'; put 'put ''ZSIsImlucHV0SWQiLCJlbWl0T25seVNlbGVjdGVkIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2RrRHJvcExpc3QiLCIiLDEsImNvbHMtbGlzdCIsMywiY2RrRHJvcExpc3REcm9wcGVkIiwiY2RrRHJvcExpc3REYXRhIl0sWyJjZGtEcmFnIiwiIiwzLCJjbGFzcyIsImN1cnNvci1kZWZh''@;'; put 'put ''dWx0LWkiLCJwcmltYXJ5S2V5SGVhZGVyU3R5bGUiLCJjZGtEcmFnRGF0YSIsImNka0RyYWdEaXNhYmxlZCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjZGtEcmFnIiwiIiwzLCJjZGtEcmFnRGF0YSIsImNka0RyYWdEaXNhYmxlZCJdLFsic2hhcGUiLCJrZXkiLDQsIm5nSWYiXSxbInNoYXBl''@;'; put 'put ''IiwidHJhc2giLCJjbGFzcyIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJrZXkiXSxbInNoYXBlIiwidHJhc2giLDEsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsiY2RrRHJhZ0JvdW5kYXJ5IiwiLnZpZXdib3hlcy1jb250YWluZXIiLCJjZGtE''@;'; put 'put ''cmFnIiwiIiwidGFiaW5kZXgiLCIwIiwxLCJ2aWV3Ym94IiwzLCJtb3VzZWRvd24iLCJjZGtEcmFnRW5kZWQiLCJjZGtEcmFnRnJlZURyYWdQb3NpdGlvbiIsImlkIl0sWyJjZGtEcmFnSGFuZGxlIiwiIiwxLCJkcmFnLWhhbmRsZSIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0''@;'; put 'put ''d2VlbiIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwidGFibGUtdGl0bGUiXSxbMSwiYWN0aW9ucyJdLFsic2hhcGUiLCJhbmdsZSB0b3AiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImFuZ2xlIGRvd24iLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsIm1pbnVzIiwz''@;'; put 'put ''LCJjbGljayJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbImNka0RyYWciLCIiLDEsImRyYWdIYW5kbGUiLCJjb3JuZXIiLDMsImNka0RyYWdNb3ZlZCIsImlkIl0sWyJjbHJGb3JtIiwiIiwxLCJkLWZsZXgiLCJhbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItanVzdGlmeS1jb250ZW50''@;'; put 'put ''LWJldHdlZW4iLCJjbHItZmxleC13cmFwIiwidGFibGUtc2VhcmNoLXdyYXBwZXIiXSxbMSwiZC1mbGV4IiwiYWxpZ24taXRlbXMtY2VudGVyIiwiY2xyLWZsZXgtd3JhcCJdLFsxLCJpbnB1dC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiU2VhcmNoIiwibmFtZSIs''@;'; put 'put ''InNlYXJjaC1pbnB1dCIsMywia2V5dXAuZW50ZXIiLCJ0eXBlIl0sWyJzaGFwZSIsInNlYXJjaCIsMywiY2xpY2siLDQsIm5nSWYiXSxbImNsYXNzIiwic3Bpbm5lciBzcGlubmVyLWlubGluZSIsNCwibmdJZiJdLFsidHlwZSIsImNoZWNrYm94IiwiY2xyQ2hlY2tib3giLCIiLCJuYW1lIiwi''@;'; put 'put ''bnVtZXJpY19jaGVjayIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbImNsYXNzIiwic3Bpbm5lciBzcGlubmVyLXNtIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInJlZnJlc2giLCJjbGFzcyIsImNsaWNrLWljb24iLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJyb2xlIiwidG9vbHRpcCIsImFy''@;'; put 'put ''aWEtaGFzcG9wdXAiLCJ0cnVlIiwxLCJ0b29sdGlwIiwidG9vbHRpcC1sZyIsInRvb2x0aXAtYm90dG9tLWxlZnQiLCJtbC01IiwzLCJjbGljayJdLFsic2hhcGUiLCJmaWx0ZXIiLDEsImNsaWNrLWljb24iXSxbMSwidG9vbHRpcC1jb250ZW50IiwidG9vbHRpcC1sb25nIl0sWyJzaGFwZSIs''@;'; put 'put ''InBlbmNpbCIsMSwiY2xpY2staWNvbiIsIm1sLTUiLDMsImNsaWNrIl0sWyJjbGFzcyIsImNvbnRlbnQiLDMsImRpc3BsYXkiLDQsIm5nVmFyIl0sWyJzaGFwZSIsImFuZ2xlIHRvcCIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUgZG93biIsMywiY2xpY2siXSxbInNoYXBlIiwic2VhcmNo''@;'; put 'put ''IiwzLCJjbGljayJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1pbmxpbmUiXSxbMSwic3Bpbm5lciIsInNwaW5uZXItc20iXSxbInNoYXBlIiwicmVmcmVzaCIsMSwiY2xpY2staWNvbiIsMywiY2xpY2siXSxbMSwiY29udGVudCJdLFsiY2xhc3MiLCJob3Qtc3Bpbm5lciBteS0xMC1teC1hdXRv''@;'; put 'put ''IHRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJpZCIsImhvdFRhYmxlIiwiY2xhc3NOYW1lIiwiaHREYXJrIiwic3RyZXRjaEgiLCJhbGwiLDMsImhvdElkIiwicmVhZE9ubHkiLCJtb2RpZnlDb2xXaWR0aCIsImNvcHlQYXN0ZSIsImNvbnRleHRNZW51IiwibXVsdGlDb2x1bW5Tb3J0aW5nIiwi''@;'; put 'put ''dmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLCJkYXRhIiwiY29sSGVhZGVycyIsImNvbHVtbnMiLCJmaWx0ZXJzIiwiZHJvcGRvd25NZW51IiwiaGVpZ2h0IiwiY2VsbHMiLCJtYXhSb3dzIiwibWFudWFsQ29sdW1uUmVzaXplIiwibGljZW5zZUtleSIsNCwibmdJZiJdLFsxLCJob3Qtc3Bp''@;'; put 'put ''bm5lciIsIm15LTEwLW14LWF1dG8iLCJ0ZXh0LWNlbnRlciJdLFsiaWQiLCJob3RUYWJsZSIsImNsYXNzTmFtZSIsImh0RGFyayIsInN0cmV0Y2hIIiwiYWxsIiwzLCJob3RJZCIsInJlYWRPbmx5IiwibW9kaWZ5Q29sV2lkdGgiLCJjb3B5UGFzdGUiLCJjb250ZXh0TWVudSIsIm11bHRpQ29s''@;'; put 'put ''dW1uU29ydGluZyIsInZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0IiwiZGF0YSIsImNvbEhlYWRlcnMiLCJjb2x1bW5zIiwiZmlsdGVycyIsImRyb3Bkb3duTWVudSIsImhlaWdodCIsImNlbGxzIiwibWF4Um93cyIsIm1hbnVhbENvbHVtblJlc2l6ZSIsImxpY2Vuc2VLZXkiXSxbMywidmll''@;'; put 'put ''d2JveElkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiY2xyLW1vZGFsIiw1KSxGdCgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gaC5jbHJNb2RhbE9wZW5DaGFuZ2Uodil9KSxkZSgxLCJoMyIsNiksTGUoMiwiIFZpZXdib3hlcyAiKSxndCgz''@;'; put 'put ''LGE2dCwyLDIsInNwYW4iLDcpLGhlKCksZGUoNCwiZGl2Iiw4KSg1LCJkaXYiLDkpKDYsInAiLDEwKSxMZSg3LCJBZGQgbmV3IiksaGUoKSxHdCg4LCJociIsMTEpLGd0KDksczZ0LDIsMCwiZGl2IiwxMikoMTAsbDZ0LDIsMCwicCIsMTMpKDExLGM2dCwxLDEsImRjLXRyZWUiLDE0KSxoZSgp''@;'; put 'put ''LGRlKDEyLCJkaXYiLDE1KSgxMywiZGl2IiwxNikoMTQsInAiLDEwKSxMZSgxNSwiQ3VycmVudGx5IG9wZW4iKSxoZSgpLGRlKDE2LCJkaXYiKSgxNywiYSIsMTcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5zbmFwVG9HcmlkKCl9KSxHdCgxOCwiY2xyLWljb24iLDE4KSxkZSgx''@;'; put 'put ''OSwic3BhbiIsMTkpLExlKDIwLCJTbmFwIHZpZXdib3hlcyB0byBncmlkIiksaGUoKSgpLGRlKDIxLCJhIiwxNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLm1pbmltaXplQWxsKCl9KSxHdCgyMiwiY2xyLWljb24iLDIwKSxkZSgyMywic3BhbiIsMTkpLExlKDI0LCJNaW5pbWl6''@;'; put 'put ''ZSBhbGwgdmlld2JveGVzIiksaGUoKSgpLGRlKDI1LCJhIiwxNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnJlc3RvcmVBbGwoKX0pLEd0KDI2LCJjbHItaWNvbiIsMjEpLGRlKDI3LCJzcGFuIiwxOSksTGUoMjgsIlJlc3RvcmUgYWxsIHZpZXdib3hlcyIpLGhlKCkoKSgpKCks''@;'; put 'put ''R3QoMjksImhyIiksZ3QoMzAsdTZ0LDIsMCwicCIsMjIpKDMxLHA2dCwxNSwxMCwiZGl2IiwyMyksZGUoMzIsImRpdiIsMjQpKDMzLCJwIiwyNSksTGUoMzQpLGhlKCkoKSxHdCgzNSwiaHIiKSxndCgzNix3NnQsMywyLCJkaXYiLDI2KSxoZSgpKCksZGUoMzcsImRpdiIsMjcpKDM4LCJidXR0''@;'; put 'put ''b24iLDI4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgudmlld2JveE1vZGFsPSExfSksTGUoMzksIiBPayAiKSxoZSgpKCkoKSxkZSg0MCwiZGl2IiwyOSksZ3QoNDEsSTZ0LDMzLDM3LCJkaXYiLDMwKSxoZSgpLGRlKDQyLCJjbHItbW9kYWwiLDMxKSxwaSgiY2xyTW9kYWxPcGVu''@;'; put 'put ''Q2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gdmkoaC5maWx0ZXIsdil8fChoLmZpbHRlcj12KSx2fSksZGUoNDMsImgzIiwzMiksTGUoNDQsIiBGaWx0ZXIgZm9yIHZpZXdib3ggdGFibGU6ICIpLGRlKDQ1LCJzcGFuIiksTGUoNDYpLGhlKCkoKSxkZSg0NywiZGl2IiwzMyksZ3QoNDgsUjZ0''@;'; put 'put ''LDIsMSwiYXBwLXF1ZXJ5IiwzNCksaGUoKSxkZSg0OSwiZGl2IiwyNykoNTAsImJ1dHRvbiIsMzUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5yZXNldEZpbHRlcigpfSksTGUoNTEsIiByZXNldCBmaWx0ZXIgIiksaGUoKSxkZSg1MiwiYnV0dG9uIiwyOCksRnQoImNsaWNrIixm''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiBoLmZpbHRlcj0hMX0pLExlKDUzLCIgQ2FuY2VsICIpLGhlKCksZGUoNTQsImJ1dHRvbiIsMzYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5zZW5kQ2xhdXNlKCl9KSxMZSg1NSwiIE9rICIpLGhlKCkoKSgpKSwyJmQmJih4ZSgiY2xyTW9kYWxPcGVu''@;'; put 'put ''IixoLnZpZXdib3hNb2RhbCkoImNsck1vZGFsQ2xvc2FibGUiLCEwKSgiY2xyTW9kYWxTaXplIiwibGciKSxmZSgzKSx4ZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUudmlld2JveF9saW1pdCE9PWguSW5maW5pdHkpLGZlKDYpLHhlKCJuZ0lmIixoLmxpYnJhcmllc0xvYWRpbmcpLGZl''@;'; put 'put ''KCkseGUoIm5nSWYiLGgudmlld2JveExpbWl0UmVhY2hlZCksZmUoKSx4ZSgibmdJZiIsaC52aWV3Ym94TW9kYWwpLGZlKDE5KSx4ZSgibmdJZiIsaC52aWV3Ym94ZXMubGVuZ3RoPDEpLGZlKCkseGUoIm5nRm9yT2YiLGgudmlld2JveGVzKSxmZSgzKSxScigiIENvbmZpZ3VyYXRpb24gKCIs''@;'; put 'put ''bnVsbCE9aC5zZWxlY3RlZFZpZXdib3hUYWJsZSYmaC5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94TGliRGF0YXNldD8iIyIrKG51bGw9PWguc2VsZWN0ZWRWaWV3Ym94VGFibGU/bnVsbDpoLnNlbGVjdGVkVmlld2JveFRhYmxlLnZpZXdib3hJZCkrIiAiKyhudWxsPT1oLnNlbGVjdGVk''@;'; put 'put ''Vmlld2JveFRhYmxlP251bGw6aC5zZWxlY3RlZFZpZXdib3hUYWJsZS52aWV3Ym94TGliRGF0YXNldCk6InNlbGVjdCB2aWV3Ym94IGZyb20gYWJvdmUiLCIpICIpLGZlKDIpLHhlKCJuZ1ZhciIsZk0oMTksaTZ0LG51bGw9PWguc2VsZWN0ZWRWaWV3Ym94VGFibGV8fG51bGw9PWguc2VsZWN0''@;'; put 'put ''ZWRWaWV3Ym94VGFibGUuaG90VGFibGU/bnVsbDpoLnNlbGVjdGVkVmlld2JveFRhYmxlLmhvdFRhYmxlLmNvbEhlYWRlcnNIaWRkZW4sbnVsbD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZXx8bnVsbD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZT9udWxsOmguc2VsZWN0ZWRWaWV3''@;'; put 'put ''Ym94VGFibGUuaG90VGFibGUuY29sSGVhZGVyc1Zpc2libGUsbnVsbD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZXx8bnVsbD09aC5zZWxlY3RlZFZpZXdib3hUYWJsZS5ob3RUYWJsZT9udWxsOmguc2VsZWN0ZWRWaWV3Ym94VGFibGUuaG90VGFibGUuaGVhZGVyUGtzKSksZmUoNSkseGUoIm5n''@;'; put 'put ''Rm9yT2YiLGgudmlld2JveGVzKSxmZSgpLGZpKCJjbHJNb2RhbE9wZW4iLGguZmlsdGVyKSx4ZSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDQpLHp1KCIgIyIsbnVsbD09aC5maWx0ZXJpbmdWaWV3Ym94P251bGw6aC5maWx0ZXJpbmdWaWV3Ym94Lmlk''@;'; put 'put ''LCIgIixoLmZpbHRlckxpYmRzLCIgIiksZmUoMikseGUoIm5nSWYiLGguZmlsdGVyKSxmZSg2KSx4ZSgiY2xyTG9hZGluZyIsaC5maWx0ZXJMb2FkaW5nKSl9LGRlcGVuZGVuY2llczpbc3MseW8sT2wsb3UsS3UsQjAsVDIsdXMsajFlLFcxLFB5LERkLElkLF9oLG83LFVmLFpmLEIxLFFzLHI3''@;'; put 'put ''LFlzLHBwLEJlZSx4XyxsMWUsczFlLG1ZLGExZSxzNmUsdDZ0LHd3LFF4XSxzdHlsZXM6WyIubGljZW5jZS1ub3RpY2VbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZToxNHB4O2Rpc3BsYXk6YmxvY2s7b3BhY2l0eTouNn1jbHItbW9kYWwucm9vdC1tb2RhbFtfbmdjb250ZW50LSVDT01Q''@;'; put 'put ''JV17ei1pbmRleDoxMzAwfWNsci1tb2RhbC5yb290LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1vZGFsLWJvZHktd3JhcHBlcntoZWlnaHQ6Y2FsYygxMDAlIC0gNjBweCl9Y2xyLW1vZGFsLnJvb3QtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAubW9kYWwtY29udGVudHto''@;'; put 'put ''ZWlnaHQ6ODB2aH1jbHItbW9kYWwucm9vdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAubW9kYWwtZm9vdGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjB9Y2xyLW1vZGFsLnJvb3QtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLm1vZGFsLWJvZHlbX25nY29udGVudC0lQ09N''@;'; put 'put ''UCVde21heC1oZWlnaHQ6MTAwJTtoZWlnaHQ6MTAwJX1kYy10cmVlW19uZ2NvbnRlbnQtJUNPTVAlXXtvdmVyZmxvdzphdXRvO2ZsZXg6MX0udG9vbHRpcC1sb25nW19uZ2NvbnRlbnQtJUNPTVAlXXt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9LmFkZC1uZXdbX25nY29udGVudC0lQ09NUCVde3dp''@;'; put 'put ''ZHRoOjUwJTtwYWRkaW5nLXJpZ2h0OjVweH0uYWRkLW5ld1tfbmdjb250ZW50LSVDT01QJV0gPiBwW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tYm90dG9tOjFweH0udmlld2JveC1saW1pdC1ub3RpY2VbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6Ljc7Y29sb3I6I2U3NGMzY30gIGJv''@;'; put 'put ''ZHlbY2RzLXRoZW1lPWRhcmtdIC5jdXJyZW50bHktb3BlbiAub3Blbi12aWV3Ym94OmhvdmVye2JhY2tncm91bmQ6IzMxNGI1N30gIGJvZHlbY2RzLXRoZW1lPWRhcmtdIC5jb2xzLWxpc3R7YmFja2dyb3VuZDojMzE0YjU3O2NvbG9yOiNmZmY7Ym9yZGVyLWNvbG9yOiM4NTg1ODV9ICBib2R5''@;'; put 'put ''W2Nkcy10aGVtZT1kYXJrXSAuY29sLWJveHtiYWNrZ3JvdW5kOiMzMTRiNTc7Ym9yZGVyLWNvbG9yOiM4NTg1ODU7Y29sb3I6aW5oZXJpdH0gIGJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAuY3VycmVudGx5LW9wZW4gLm9wZW4tdmlld2JveDpob3ZlcntiYWNrZ3JvdW5kOiNlOGU4ZTh9ICBib2R5''@;'; put 'put ''W2Nkcy10aGVtZT1saWdodF0gLmNvbHMtbGlzdHtiYWNrZ3JvdW5kOiNmZmZ9ICBib2R5W2Nkcy10aGVtZT1saWdodF0gLmNvbC1ib3h7YmFja2dyb3VuZDojZmZmfS5jdXJyZW50bHktb3Blbltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6NTAlfS5jdXJyZW50bHktb3Blbltfbmdjb250ZW50''@;'; put 'put ''LSVDT01QJV0gICAub3Blbi12aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXXtjdXJzb3I6cG9pbnRlcjtwYWRkaW5nOjNweCA1cHh9LmN1cnJlbnRseS1vcGVuW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5vcGVuLXZpZXdib3guc2VsZWN0ZWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6''@;'; put 'put ''IzNjODUwMDJlfS52aWV3Ym94ZXMtY29udGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDtpbnNldDowO3BvaW50ZXItZXZlbnRzOm5vbmU7ei1pbmRleDo5OTl9LnZpZXdib3hbX25nY29udGVudC0lQ09NUCVde21pbi13aWR0aDoyMDBweDttaW4taGVpZ2h0OjIwMHB4''@;'; put 'put ''O3Bvc2l0aW9uOmZpeGVkO2xlZnQ6MDt0b3A6MDtwb2ludGVyLWV2ZW50czphbGw7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjNweDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czozcHg7Ym94LXNoYWRvdzowIDAgMTBweCAtM3B4ICMw''@;'; put 'put ''MDB9LnZpZXdib3guZm9jdXNlZFtfbmdjb250ZW50LSVDT01QJV17ei1pbmRleDoxMTAwO291dGxpbmU6bm9uZX0udmlld2JveFtfbmdjb250ZW50LSVDT01QJV0gICAuY29udGVudFtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDAsMCwwLC4zMDE5NjA3ODQzKTti''@;'; put 'put ''YWNrZ3JvdW5kOiNmZmY7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJTtmbGV4OjE7b3ZlcmZsb3cteDphdXRvfS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcmFnLWhhbmRsZVtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTAwJTttaW4taGVpZ2h0OjIwcHg7YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjojM2M4NTAwO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6M3B4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjNweDtjb2xvcjojZmZmO3BhZGRpbmc6MCA1cHg7cG9pbnRlci1ldmVudHM6YWxsfS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcmFnLWhhbmRsZVtfbmdjb250ZW50LSVD''@;'; put 'put ''T01QJV0gICAudGFibGUtdGl0bGVbX25nY29udGVudC0lQ09NUCVde3doaXRlLXNwYWNlOnByZS13cmFwO3dvcmQtYnJlYWs6YnJlYWstYWxsfS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcmFnLWhhbmRsZVtfbmdjb250ZW50LSVDT01QJV0gICAuYWN0aW9uc1tfbmdjb250ZW50''@;'; put 'put ''LSVDT01QJV17ZGlzcGxheTpmbGV4O21pbi13aWR0aDozNXB4fS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcmFnLWhhbmRsZVtfbmdjb250ZW50LSVDT01QJV0gICAuYWN0aW9uc1tfbmdjb250ZW50LSVDT01QJV0gICBjbHItaWNvbltfbmdjb250ZW50LSVDT01QJV17Y3Vyc29y''@;'; put 'put ''OnBvaW50ZXI7bWFyZ2luLWxlZnQ6NXB4fS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kcmFnLWhhbmRsZVtfbmdjb250ZW50LSVDT01QJV0gICAuYWN0aW9uc1tfbmdjb250ZW50LSVDT01QJV0gICBjbHItaWNvbltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7dHJhbnNmb3JtOnNj''@;'; put 'put ''YWxlKDEuMyl9LnZpZXdib3hbX25nY29udGVudC0lQ09NUCVdICAgLmNsaWNrLWljb25bX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyfS52aWV3Ym94W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbGljay1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXTpob3Zlcnt0cmFuc2Zvcm06c2Nh''@;'; put 'put ''bGUoMS4zKX0udmlld2JveFtfbmdjb250ZW50LSVDT01QJV0gICAuZHJhZ0hhbmRsZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGV9LnZpZXdib3hbX25nY29udGVudC0lQ09NUCVdICAgLmRyYWdIYW5kbGUuY29ybmVyW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxNXB4''@;'; put 'put ''O2hlaWdodDoxNXB4O2N1cnNvcjpud3NlLXJlc2l6ZX0udmlld2JveFtfbmdjb250ZW50LSVDT01QJV0gICAuZHJhZ0hhbmRsZS5yaWdodFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MnB4O2hlaWdodDoxMDAlO2N1cnNvcjpldy1yZXNpemV9LnZpZXdib3hbX25nY29udGVudC0lQ09NUCVd''@;'; put 'put ''ICAgLmRyYWdIYW5kbGUuYm90dG9tW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MnB4O3dpZHRoOjEwMCU7Y3Vyc29yOm5zLXJlc2l6ZX0uY29scy1zZWFyY2hbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7bWFyZ2luLXRvcDo1cHg7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDAsMCww''@;'; put 'put ''LC4yNzg0MzEzNzI1KTtib3JkZXItcmFkaXVzOjNweH0uY29scy1saXN0W19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6c29saWQgMXB4ICNjY2M7bWluLWhlaWdodDo2MHB4O2JvcmRlci1yYWRpdXM6NHB4O292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmJsb2NrO3dpZHRoOjQwMHB4O21heC13''@;'; put 'put ''aWR0aDoxMDAlO21hcmdpbi10b3A6NXB4fS5jb2wtYm94W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAxMHB4O2JvcmRlci1ib3R0b206c29saWQgMXB4ICNjY2M7Y29sb3I6IzAwMDAwMGRlO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7YWxpZ24taXRlbXM6Y2VudGVy''@;'; put 'put ''O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjdXJzb3I6bW92ZTtmb250LXNpemU6MTRweH0uY29sLWJveC5zZWFyY2hbX25nY29udGVudC0lQ09NUCVdOmZvY3Vze2JhY2tncm91bmQ6IzAwMDAwMDFhfS5jb2wtYm94LnByaW1hcnlLZXlIZWFk''@;'; put 'put ''ZXJTdHlsZVtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojMzA2YjAwMjR9LmNkay1kcmFnLXByZXZpZXdbX25nY29udGVudC0lQ09NUCVde2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXItcmFkaXVzOjRweDtib3gtc2hhZG93OjAgNXB4IDVweCAtM3B4ICMwMDAzLDAgOHB4IDEw''@;'; put 'put ''cHggMXB4ICMwMDAwMDAyNCwwIDNweCAxNHB4IDJweCAjMDAwMDAwMWY7ei1pbmRleDoxMzAwIWltcG9ydGFudH0uY2RrLWRyYWctcGxhY2Vob2xkZXJbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MH0uY2RrLWRyYWctYW5pbWF0aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2l0aW9u''@;'; put 'put ''OnRyYW5zZm9ybSAuMjVzIGN1YmljLWJlemllcigwLDAsLjIsMSl9LmNvbC1ib3hbX25nY29udGVudC0lQ09NUCVdOmxhc3QtY2hpbGR7Ym9yZGVyOm5vbmV9LmNvbHMtbGlzdC5jZGstZHJvcC1saXN0LWRyYWdnaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2wtYm94W19uZ2NvbnRlbnQt''@;'; put 'put ''JUNPTVAlXTpub3QoLmNkay1kcmFnLXBsYWNlaG9sZGVyKXt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMjVzIGN1YmljLWJlemllcigwLDAsLjIsMSl9LmRpc2FibGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtvcGFjaXR5Oi41O3RyYW5zZm9ybTpub25lIWltcG9ydGFudDtwb2ludGVyLWV2ZW50czpu''@;'; put 'put ''b25lfS5maWx0ZXItYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojMDA3MmEzfWhvdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5maXJzdENvbHVtbkhlYWRlclN0eWxlIGJ1dHRvbi5jaGFuZ2VUeXBle2Rpc3BsYXk6bm9uZX1ob3QtdGFibGVbX25nY29udGVudC0lQ09N''@;'; put 'put ''UCVdICAgICAuaGFuZHNvbnRhYmxlIHRib2R5IHRoLmh0X19oaWdobGlnaHQucHJpbWFyeUtleUhlYWRlclN0eWxlLCBob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICAuaGFuZHNvbnRhYmxlIHRoZWFkIHRoLmh0X19oaWdobGlnaHQucHJpbWFyeUtleUhlYWRlclN0eWxle2JhY2tn''@;'; put 'put ''cm91bmQ6IzMwNmIwMGIwfWhvdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAgIC5wcmltYXJ5S2V5SGVhZGVyU3R5bGV7YmFja2dyb3VuZDojMzA2YjAwNmV9aG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgdGgucmVhZG9ubHlDZWxsIGRpdntvcGFjaXR5Oi40fWhvdC10YWJs''@;'; put 'put ''ZVtfbmdjb250ZW50LSVDT01QJV0gICAgIHRkLnJlYWRvbmx5Q2VsbHtvcGFjaXR5Oi41fSJdfSl9fXJldHVybiBjfSkoKSx1NmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLmZpbGVPdmVyPW5ldyBxcix0aGlzLmZpbGVEcm9wPW5ldyBxcix0aGlzLmVsZW1lbnQ9YX1vbkRy''@;'; put 'put ''b3AoYSl7dGhpcy5fcHJldmVudEFuZFN0b3AoYSk7Y29uc3QgZD1hLmRhdGFUcmFuc2Zlcj8uZmlsZXMsaD1bXTtpZihkKWZvcihsZXQgZj0wO2Y8ZC5sZW5ndGg7ZisrKWgucHVzaChkW2ZdKTt0aGlzLnVwbG9hZGVyPy5hZGRUb1F1ZXVlKGgpLHRoaXMuZmlsZU92ZXIuZW1pdCghMSksdGhp''@;'; put 'put ''cy5maWxlRHJvcC5lbWl0KGgpfW9uRHJhZ092ZXIoYSl7dGhpcy5fcHJldmVudEFuZFN0b3AoYSk7Y29uc3QgZD1hLmRhdGFUcmFuc2ZlcjtpZihkKXtpZigtMT09PWQudHlwZXMuaW5kZXhPZigiRmlsZXMiKSlyZXR1cm47ZC5kcm9wRWZmZWN0PSJjb3B5In10aGlzLmZpbGVPdmVyLmVtaXQo''@;'; put 'put ''ITApfW9uRHJhZ0xlYXZlKGEpe3RoaXMuX3ByZXZlbnRBbmRTdG9wKGEpLHRoaXMuZmlsZU92ZXIuZW1pdCghMSl9X3ByZXZlbnRBbmRTdG9wKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnN0b3BQcm9wYWdhdGlvbigpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4g''@;'; put 'put ''bmV3KGR8fGMpKEdlKGVvKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJhcHBGaWxlRHJvcCIsIiJdXSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0KCJkcm9wIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkRyb3Aodil9KSgiZHJh''@;'; put 'put ''Z292ZXIiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uRHJhZ092ZXIodil9KSgiZHJhZ2xlYXZlIixmdW5jdGlvbih2KXtyZXR1cm4gaC5vbkRyYWdMZWF2ZSh2KX0pfSxpbnB1dHM6e3VwbG9hZGVyOiJ1cGxvYWRlciJ9LG91dHB1dHM6e2ZpbGVPdmVyOiJmaWxlT3ZlciIsZmlsZURyb3A6ImZp''@;'; put 'put ''bGVEcm9wIn19KX19cmV0dXJuIGN9KSgpLGQ2ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEpe3RoaXMuZmlsZVNlbGVjdGVkPW5ldyBxcix0aGlzLmVsZW1lbnQ9YX1pc0VtcHR5QWZ0ZXJTZWxlY3Rpb24oKXtyZXR1cm4hIXRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmF0dHJpYnV0''@;'; put 'put ''ZXMubXVsdGlwbGV9b25DaGFuZ2UoKXtjb25zdCBhPXRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmZpbGVzO3RoaXMudXBsb2FkZXI/LmFkZFRvUXVldWUoYSksdGhpcy5maWxlU2VsZWN0ZWQuZW1pdChhKSx0aGlzLmlzRW1wdHlBZnRlclNlbGVjdGlvbigpJiYodGhpcy5lbGVtZW50Lm5h''@;'; put 'put ''dGl2ZUVsZW1lbnQudmFsdWU9IiIpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKGVvKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJhcHBGaWxlU2VsZWN0IiwiIl1dLGhvc3RCaW5kaW5nczpm''@;'; put 'put ''dW5jdGlvbihkLGgpezEmZCYmRnQoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gaC5vbkNoYW5nZSgpfSl9LGlucHV0czp7dXBsb2FkZXI6InVwbG9hZGVyIn0sb3V0cHV0czp7ZmlsZVNlbGVjdGVkOiJmaWxlU2VsZWN0ZWQifX0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gTDZ0KGMsbCl7''@;'; put 'put ''MSZjJiYoZGUoMCwicCIsOCksTGUoMSwiIE5vIGRhdGFzZXQgbWV0YSB0byBzaG93LiAiKSxoZSgpKX1mdW5jdGlvbiBPNnQoYyxsKXtpZigxJmMmJihsaSgwKSxkZSgxLCJjbHItZGctY29sdW1uIiksTGUoMiksaGUoKSxjaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoMiksX3Io''@;'; put 'put ''YS5jb2xOYW1lfHxhLmNvbEtleSl9fWZ1bmN0aW9uIFA2dChjLGwpe2lmKDEmYyYmKGxpKDApLGRlKDEsImNsci1kZy1jZWxsIiksTGUoMiksaGUoKSxjaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1PZSgpLiRpbXBsaWNpdDtmZSgyKSxfcihkW2EuY29sS2V5XSl9fWZ1bmN0aW9u''@;'; put 'put ''IEY2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci1kZy1yb3ciLDEzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQsZj1PZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KGYub25Sb3dDbGljaz9mLm9uUm93Q2xpY2soaCk6IiIpfSksZ3Qo''@;'; put 'put ''MSxQNnQsMywxLCJuZy1jb250YWluZXIiLDUpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKDIpLiRpbXBsaWNpdDtmZSgpLHhlKCJuZ0Zvck9mIixhLmNvbHNUb0Rpc3BsYXkpfX1mdW5jdGlvbiBINnQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFiLWNvbnRlbnQiLDExKSgxLCJjbHItZGF0''@;'; put 'put ''YWdyaWQiKSxndCgyLE82dCwzLDEsIm5nLWNvbnRhaW5lciIsNSkoMyxGNnQsMiwxLCJjbHItZGctcm93IiwxMiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQ7ZmUoMikseGUoIm5nRm9yT2YiLGEuY29sc1RvRGlzcGxheSksZmUoKSx4ZSgibmdGb3JPZiIsYS5tZXRhKX19''@;'; put 'put ''ZnVuY3Rpb24gTjZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRhYiIpKDEsImJ1dHRvbiIsOSksTGUoMiksaGUoKSxndCgzLEg2dCw0LDIsImNsci10YWItY29udGVudCIsMTApLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPWwuaW5kZXg7ZmUoMiksX3IoYS5uYW1lKSxmZSgp''@;'; put 'put ''LHhlKCJjbHJJZkFjdGl2ZSIsMD09PWQpfX1sZXQgaDZlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt0aGlzLm9wZW49ITEsdGhpcy5kc21ldGE9W10sdGhpcy52ZXJzaW9ucz1bXSx0aGlzLm9wZW5DaGFuZ2U9bmV3IHFyLHRoaXMucm93Q2xpY2tlZD1uZXcgcXIsdGhpcy5kc21ldGFU''@;'; put 'put ''YWJzPVtdLHRoaXMudmVyc2lvbnNUYWJzPVtdLHRoaXMudGFicz1bXX1uZ09uSW5pdCgpe31uZ09uQ2hhbmdlcyhhKXthLmRzbWV0YT8uY3VycmVudFZhbHVlPy5sZW5ndGg+MCYmKHRoaXMucGFyc2VEU01ldGEoKSx0aGlzLnBhcnNlVmVyc2lvbnMoKSx0aGlzLnRhYnM9Wy4uLnRoaXMuZHNt''@;'; put 'put ''ZXRhVGFicywuLi50aGlzLnZlcnNpb25zVGFic10pfXBhcnNlRFNNZXRhKCl7dGhpcy5kc21ldGFUYWJzPVtdO2ZvcihsZXQgYSBvZiB0aGlzLmRzbWV0YSl7bGV0IGQ9dGhpcy5kc21ldGFUYWJzLmZpbmRJbmRleChoPT5oLm5hbWU9PT1hLk9EU19UQUJMRSk7ZDwwJiYoZD10aGlzLmRzbWV0''@;'; put 'put ''YVRhYnMucHVzaCh7bmFtZTphLk9EU19UQUJMRSx0aXRsZToiRGF0YXNldCBNZXRhIixjb2xzVG9EaXNwbGF5Olt7Y29sS2V5OiJOQU1FIn0se2NvbEtleToiVkFMVUUifV0sbWV0YTpbXSxvblJvd0NsaWNrOmg9Pnt0aGlzLnJvd0NsaWNrZWQuZW1pdChoKX19KS0xKSx0aGlzLmRzbWV0YVRh''@;'; put 'put ''YnNbZF0ubWV0YS5wdXNoKGEpfX1wYXJzZVZlcnNpb25zKCl7dGhpcy52ZXJzaW9uc1RhYnM9W3tuYW1lOiJWRVJTSU9OUyIsdGl0bGU6IkRhdGFzZXQgTWV0YSIsY29sc1RvRGlzcGxheTpbe2NvbEtleToiTE9BRF9SRUYifSx7Y29sS2V5OiJVU0VSX05NIn0se2NvbEtleToiVkVSU0lPTl9E''@;'; put 'put ''VFRNIn0se2NvbEtleToiTkVXX1JFQ09SRFMiLGNvbE5hbWU6IkFERCJ9LHtjb2xLZXk6IkNIQU5HRURfUkVDT1JEUyIsY29sTmFtZToiTU9EIn0se2NvbEtleToiREVMRVRFRF9SRUNPUkRTIixjb2xOYW1lOiJERUwifSx7Y29sS2V5OiJWRVJTSU9OX0RFU0MifV0sbWV0YTp0aGlzLnZlcnNp''@;'; put 'put ''b25zLG9uUm93Q2xpY2s6YT0+e3RoaXMucm93Q2xpY2tlZC5lbWl0KGEpfX1dfW9uT3BlbkNoYW5nZShhKXt0aGlzLm9wZW49YSx0aGlzLm9wZW5DaGFuZ2UuZW1pdChhKX1vbkNsb3NlQ2xpY2soKXt0aGlzLm9uT3BlbkNoYW5nZSghMSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9u''@;'; put 'put ''KGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtZGF0YXNldC1pbmZvIl1dLGlucHV0czp7b3Blbjoib3BlbiIsZHNtZXRhOiJkc21ldGEiLHZlcnNpb25zOiJ2ZXJzaW9ucyJ9LG91dHB1dHM6e29wZW5DaGFuZ2U6''@;'; put 'put ''Im9wZW5DaGFuZ2UiLHJvd0NsaWNrZWQ6InJvd0NsaWNrZWQifSxmZWF0dXJlczpbeWxdLGRlY2xzOjEwLHZhcnM6NSxjb25zdHM6W1szLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxl''@;'; put 'put ''IiwiY2VudGVyIiwidGV4dC1jZW50ZXIiLCJjb2xvci1kYXJrZXItZ3JheSJdLFsxLCJtb2RhbC1ib2R5Il0sWyJjbGFzcyIsInRleHQtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbHJMYXlvdXQiLCJ2ZXJ0aWNhbCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0''@;'; put 'put ''eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4taW5mby1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJ0ZXh0LWNlbnRlciJdLFsiY2xyVGFiTGluayIsIiIsImlkIiwibGluazEiXSxbImlkIiwiY29udGVudDEiLCJjbGFzcyIsImQtZmxleCBjbHItanVzdGlmeS1jb250ZW50LWNl''@;'; put 'put ''bnRlciB3LTEwMCIsNCwiY2xySWZBY3RpdmUiXSxbImlkIiwiY29udGVudDEiLDEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwidy0xMDAiXSxbImNsYXNzIiwiY2xpY2thYmxlLXJvdyIsMywiY2xpY2siLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjbGlja2FibGUt''@;'; put 'put ''cm93IiwzLCJjbGljayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImNsci1tb2RhbCIsMCksRnQoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIGgub25PcGVuQ2hhbmdlKHYpfSksZGUoMSwiaDMiLDEpLExlKDIsIkRhdGFzZXQgTWV0YSIpLGhl''@;'; put 'put ''KCksZGUoMywiZGl2IiwyKSxndCg0LEw2dCwyLDAsInAiLDMpLGRlKDUsImNsci10YWJzIiw0KSxndCg2LE42dCw0LDIsImNsci10YWIiLDUpLGhlKCkoKSxkZSg3LCJkaXYiLDYpKDgsImJ1dHRvbiIsNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLm9uQ2xvc2VDbGljaygpfSks''@;'; put 'put ''TGUoOSwiIENsb3NlICIpLGhlKCkoKSgpKSwyJmQmJih4ZSgiY2xyTW9kYWxPcGVuIixoLm9wZW4pKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMCksZmUoNCkseGUoIm5nSWYiLGguZHNtZXRhVGFicy5sZW5ndGg8MSksZmUoMikseGUoIm5nRm9yT2YiLGgudGFi''@;'; put 'put ''cykpfSxkZXBlbmRlbmNpZXM6W3NzLHlvLHhtLGJwLEE3LFNtLHVnLGs3LFh5LE1tLHg3LENtLEU3LG91LEt1LFJ5LHZtLHltLEM3LGJtLG1tLF83XSxzdHlsZXM6WyIubW9kYWwtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICBjbHItdGFic1tfbmdjb250ZW50LSVDT01QJV17bWF4LWhlaWdo''@;'; put 'put ''dDo3MHZofS5tb2RhbC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLnRhYi1jb250ZW50e3dpZHRoOjEwMCU7b3ZlcmZsb3c6YXV0b30ubW9kYWwtYm9keVtfbmdjb250ZW50LSVDT01QJV0gICAgIC50YWItY29udGVudCAuZGF0YWdyaWQtb3V0ZXItd3JhcHBlcnt3aWR0aDoxMDAlfWNs''@;'; put 'put ''ci1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5tb2RhbC1kaWFsb2d7aGVpZ2h0OjEwMCV9LmNsaWNrYWJsZS1yb3dbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyfSAgLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsOmZvY3Vze291dGxpbmU6bm9uZTtvdXRsaW5l''@;'; put 'put ''LW9mZnNldDowfSJdfSl9fXJldHVybiBjfSkoKTtjb25zdCBWNnQ9KCk9PlsibnVtZXJpYyIsdm9pZCAwXSxmNmU9KCk9PlsiYXV0b2NvbXBsZXRlIiwiYXV0b2NvbXBsZXRlLmN1c3RvbSJdLGplZT0oYyxsKT0+KHtjb2w6Yyxjb2xJbmRleDpsfSksQjZ0PSgpPT5bdm9pZCAwXSxqNnQ9KCk9''@;'; put 'put ''PlsiU09GVFNFTEVDVCIsIlNPRlRTRUxFQ1RfSE9PSyJdO2Z1bmN0aW9uIHo2dChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDE1KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoKSxfcihhLmdlbmVyYXRlZFJlY29yZFVybCl9fWZ1bmN0aW9uIFU2dChjLGwpe2lmKDEmYyl7''@;'; put 'put ''Y29uc3QgYT1PbigpO2RlKDAsImJ1dHRvbiIsMTYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsKCkpfSksTGUoMSksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoMik7eGUoImRpc2FibGVkIixhLmdlbmVyYXRlRWRpdFJl''@;'; put 'put ''Y29yZFVybExvYWRpbmcpLGZlKCksUnIoIiAiLGEuZ2VuZXJhdGVkUmVjb3JkVXJsPyJjb3B5IHRvIGNsaXBib2FyZCI6YS5nZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5nPyJHZW5lcmF0aW5nIHVybC4uLiI6IkxpbmsgdG8gdGhpcyByZWNvcmQiLCIgIil9fWZ1bmN0aW9uIFo2dChjLGwp''@;'; put 'put ''e2lmKDEmYyYmKGxpKDApLGd0KDEsejZ0LDIsMSwic3BhbiIsMTMpKDIsVTZ0LDIsMiwiYnV0dG9uIiwxNCksY2koKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSx4ZSgibmdJZiIsIShudWxsIT1hLmN1cnJlbnRSZWNvcmQmJmEuY3VycmVudFJlY29yZC5ub0xpbmtPcHRpb24pKSxmZSgpLHhl''@;'; put 'put ''KCJuZ0lmIiwhKG51bGwhPWEuY3VycmVudFJlY29yZCYmYS5jdXJyZW50UmVjb3JkLm5vTGlua09wdGlvbikpfX1mdW5jdGlvbiBXNnQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDE3KSgxLCJzcGFuIiwxOCksTGUoMiwiIExvYWRpbmcuLi4gIiksaGUoKSgpKX1mdW5jdGlvbiBZNnQoYyxsKXsx''@;'; put 'put ''JmMmJkd0KDAsImNsci1pY29uIiwzMSl9ZnVuY3Rpb24gRzZ0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsMzIpLExlKDEsIiBMb2FkaW5nLi4uICIpLGhlKCkpfWZ1bmN0aW9uICQ2dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDMzKX1mdW5jdGlvbiBLNnQoYyxsKXtpZigxJmMpe2NvbnN0''@;'; put 'put ''IGE9T24oKTtkZSgwLCJjbHItaW5wdXQtY29udGFpbmVyIiwzNSkoMSwiaW5wdXQiLDM2KSxGdCgiZm9jdXNpbiIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgzKS5pbmRleDtyZXR1cm4gQ3QoT2UoMikub25SZWNvcmRJbnB1dEZvY3VzKGgsZikpfSkoInBhc3RlIixmdW5jdGlvbiho''@;'; put 'put ''KXtyZXR1cm4gd3QoYSksQ3QoT2UoNSkucmVjb3JkSW5wdXRQYXN0ZShoKSl9KSgiaW5wdXQiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoMykuJGltcGxpY2l0LHY9T2UoMik7cmV0dXJuIHYucmVjb3JkSW5wdXRDaGFuZ2UoaCxmLmtleSksQ3Qodi5jdXJyZW50UmVjb3JkLm5vTGlu''@;'; put 'put ''a09wdGlvbj0hMCl9KSxwaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgzKS4kaW1wbGljaXQsdj1PZSgyKTtyZXR1cm4gdmkodi5jdXJyZW50UmVjb3JkW2Yua2V5XSxoKXx8KHYuY3VycmVudFJlY29yZFtmLmtleV09aCksQ3QoaCl9KSxoZSgpKCl9aWYo''@;'; put 'put ''MiZjKXtjb25zdCBhPU9lKDMpLiRpbXBsaWNpdCxkPU9lKDIpO3hyKCJpbnZhbGlkLWRhdGEiLGQuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmluY2x1ZGVzKGEua2V5KSksZmUoKSxmaSgibmdNb2RlbCIsZC5jdXJyZW50UmVjb3JkW2Eua2V5XSl9fWZ1bmN0aW9uIHE2dChjLGwpezEmYyYm''@;'; put 'put ''WGwoMCl9ZnVuY3Rpb24gWDZ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiksZ3QoMSxxNnQsMSwwLCJuZy1jb250YWluZXIiLDM3KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMyksZD1hLiRpbXBsaWNpdCxoPWEuaW5kZXg7T2UoMik7Y29uc3QgZj12bygxNik7ZmUoKSx4ZSgibmdUZW1wbGF0''@;'; put 'put ''ZU91dGxldCIsZikoIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0IixycCgyLGplZSxkLGgpKX19ZnVuY3Rpb24gSjZ0KGMsbCl7aWYoMSZjJiYobGkoMCksZ3QoMSxLNnQsMiwzLCJjbHItaW5wdXQtY29udGFpbmVyIiwzNCkoMixYNnQsMiw1LCJkaXYiLDUpLGNpKCkpLDImYyl7bGV0IGEsZDtj''@;'; put 'put ''b25zdCBoPU9lKDIpLiRpbXBsaWNpdCxmPU9lKDIpO2ZlKCkseGUoIm5nSWYiLFdzKDIsVjZ0KS5pbmNsdWRlcyhudWxsPT1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShhPWYuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGgua2V5KSk/bnVsbDphLmVkaXRvcikpLGZl''@;'; put 'put ''KCkseGUoIm5nSWYiLFdzKDMsZjZlKS5pbmNsdWRlcyhudWxsPT1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShkPWYuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGgua2V5KSk/bnVsbDpkLmVkaXRvcikpfX1mdW5jdGlvbiBRNnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9''@;'; put 'put ''T24oKTtkZSgwLCJjbHItdGV4dGFyZWEtY29udGFpbmVyIikoMSwidGV4dGFyZWEiLDM4LDEpLEZ0KCJmb2N1c2luIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDMpLmluZGV4O3JldHVybiBDdChPZSgyKS5vblJlY29yZElucHV0Rm9jdXMoaCxmKSl9KSgicGFzdGUiLGZ1bmN0aW9u''@;'; put 'put ''KGgpe3JldHVybiB3dChhKSxDdChPZSg1KS5yZWNvcmRJbnB1dFBhc3RlKGgpKX0pKCJpbnB1dCIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgzKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKDIpLnJlY29yZElucHV0Q2hhbmdlKGgsZi5rZXkpKX0pLHBpKCJuZ01vZGVsQ2hhbmdlIixm''@;'; put 'put ''dW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDMpLiRpbXBsaWNpdCx2PU9lKDIpO3JldHVybiB2aSh2LmN1cnJlbnRSZWNvcmRbZi5rZXldLGgpfHwodi5jdXJyZW50UmVjb3JkW2Yua2V5XT1oKSxDdChoKX0pLExlKDMsIiAgICAgICAgICAgICAgICAgICIpLGhlKCksZGUoNCwiY2xyLWNv''@;'; put 'put ''bnRyb2wtaGVscGVyIiksTGUoNSksaGUoKSgpfWlmKDImYyl7bGV0IGEsZCxoO2NvbnN0IGY9dm8oMiksdj1PZSgzKS4kaW1wbGljaXQsTT1PZSgyKTtmZSgpLHhyKCJpbnZhbGlkLWRhdGEiLE0uY3VycmVudFJlY29yZEludmFsaWRDb2xzLmluY2x1ZGVzKHYua2V5KSkoIm5vdC1jaGFyIixu''@;'; put 'put ''dWxsPT1NLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShhPU0uY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKHYua2V5KSk/bnVsbDphLnR5cGUpLHhlKCJyb3dzIix2LnZhbHVlLmxlbmd0aD44MD82OjEpLGZpKCJuZ01vZGVsIixNLmN1cnJlbnRSZWNvcmRbdi5rZXldKSx4''@;'; put 'put ''ZSgibWF4TGVuZ3RoIixudWxsPT1NLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShkPU0uY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKHYua2V5KSk/bnVsbDpkLmxlbmd0aCksZmUoNCksenUoIiIsZi52YWx1ZS5sZW5ndGgsIiAvICIsbnVsbD09TS5jdXJyZW50UmVjb3Jk''@;'; put 'put ''VmFsaWRhdG9yfHxudWxsPT0oaD1NLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZSh2LmtleSkpP251bGw6aC5sZW5ndGgsIiIpfX1mdW5jdGlvbiBlOHQoYyxsKXsxJmMmJlhsKDApfWZ1bmN0aW9uIHQ4dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpLGd0KDEsZTh0LDEsMCwibmct''@;'; put 'put ''Y29udGFpbmVyIiwzNyksaGUoKSksMiZjKXtjb25zdCBhPU9lKDMpLGQ9YS4kaW1wbGljaXQsaD1hLmluZGV4O09lKDIpO2NvbnN0IGY9dm8oMTYpO2ZlKCkseGUoIm5nVGVtcGxhdGVPdXRsZXQiLGYpKCJuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dCIscnAoMixqZWUsZCxoKSl9fWZ1bmN0aW9u''@;'; put 'put ''IG44dChjLGwpe2lmKDEmYyYmKGxpKDApLGd0KDEsUTZ0LDYsOSwiY2xyLXRleHRhcmVhLWNvbnRhaW5lciIsNSkoMix0OHQsMiw1LCJkaXYiLDUpLGNpKCkpLDImYyl7bGV0IGEsZDtjb25zdCBoPU9lKDIpLiRpbXBsaWNpdCxmPU9lKDIpO2ZlKCkseGUoIm5nSWYiLFdzKDIsQjZ0KS5pbmNs''@;'; put 'put ''dWRlcyhudWxsPT1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShhPWYuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGgua2V5KSk/bnVsbDphLmVkaXRvcikpLGZlKCkseGUoIm5nSWYiLFdzKDMsZjZlKS5pbmNsdWRlcyhudWxsPT1mLmN1cnJlbnRSZWNvcmRWYWxpZGF0''@;'; put 'put ''b3J8fG51bGw9PShkPWYuY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGgua2V5KSk/bnVsbDpkLmVkaXRvcikpfX1mdW5jdGlvbiByOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItdGV4dGFyZWEtY29udGFpbmVyIiwzOSkoMSwidGV4dGFyZWEiLDQwKSxGdCgi''@;'; put 'put ''cGFzdGUiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSg0KS5yZWNvcmRJbnB1dFBhc3RlKGgpKX0pKCJpbnB1dCIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKDIpLnJlY29yZElucHV0Q2hhbmdlKGgsZi5rZXkpKX0pLHBpKCJu''@;'; put 'put ''Z01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDIpLiRpbXBsaWNpdCx2PU9lKDIpO3JldHVybiB2aSh2LmN1cnJlbnRSZWNvcmRbZi5rZXldLGgpfHwodi5jdXJyZW50UmVjb3JkW2Yua2V5XT1oKSxDdChoKX0pLGhlKCksZGUoMiwiY2xyLWNvbnRyb2wtaGVscGVy''@;'; put 'put ''IiksTGUoMywiSEg6bW06c3MiKSxoZSgpKCl9aWYoMiZjKXtsZXQgYTtjb25zdCBkPU9lKDIpLiRpbXBsaWNpdCxoPU9lKDIpO2ZlKCkseHIoImludmFsaWQtZGF0YSIsaC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuaW5jbHVkZXMoZC5rZXkpKSgibm90LWNoYXIiLG51bGw9PWguY3VycmVu''@;'; put 'put ''dFJlY29yZFZhbGlkYXRvcnx8bnVsbD09KGE9aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmdldFJ1bGUoZC5rZXkpKT9udWxsOmEudHlwZSkseGUoInJvd3MiLGQudmFsdWUubGVuZ3RoPjgwPzY6MSksZmkoIm5nTW9kZWwiLGguY3VycmVudFJlY29yZFtkLmtleV0pfX1mdW5jdGlvbiBpOHQo''@;'; put 'put ''YyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDM5KSgxLCJ0ZXh0YXJlYSIsNDEpLEZ0KCJwYXN0ZSIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KE9lKDQpLnJlY29yZElucHV0UGFzdGUoaCkpfSkoImlucHV0IixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDIp''@;'; put 'put ''LiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoMikucmVjb3JkSW5wdXRDaGFuZ2UoaCxmLmtleSkpfSkscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoMikuJGltcGxpY2l0LHY9T2UoMik7cmV0dXJuIHZpKHYuY3VycmVudFJlY29yZFtmLmtleV0saCl8fCh2''@;'; put 'put ''LmN1cnJlbnRSZWNvcmRbZi5rZXldPWgpLEN0KGgpfSksaGUoKSxkZSgyLCJjbHItZGF0ZS1jb250YWluZXIiLDQyKSgzLCJpbnB1dCIsNDMpLEZ0KCJjbHJEYXRlQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoMikucmVjb3Jk''@;'; put 'put ''RGF0ZUNoYW5nZShoLGYua2V5KSl9KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9T2UoMikuJGltcGxpY2l0LGQ9T2UoMik7ZmUoKSx4cigiaW52YWxpZC1kYXRhIixkLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5pbmNsdWRlcyhhLmtleSkpLGZpKCJuZ01vZGVsIixkLmN1cnJlbnRSZWNv''@;'; put 'put ''cmRbYS5rZXldKX19ZnVuY3Rpb24gbzh0KGMsbCl7MSZjJiZYbCgwKX1mdW5jdGlvbiBhOHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSxndCgxLG84dCwxLDAsIm5nLWNvbnRhaW5lciIsMzcpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKSxkPWEuJGltcGxpY2l0LGg9YS5pbmRleDtPZSgy''@;'; put 'put ''KTtjb25zdCBmPXZvKDE2KTtmZSgpLHhlKCJuZ1RlbXBsYXRlT3V0bGV0IixmKSgibmdUZW1wbGF0ZU91dGxldENvbnRleHQiLHJwKDIsamVlLGQsaCkpfX1mdW5jdGlvbiBzOHQoYyxsKXtpZigxJmMmJihsaSgwKSxkZSgxLCJkaXYiLDIwKSgyLCJkaXYiLDIxKSgzLCJwIiwyMiksTGUoNCks''@;'; put 'put ''Z3QoNSxZNnQsMSwwLCJjbHItaWNvbiIsMjMpLGhlKCksZGUoNiwicCIsMjQpLExlKDcpLGhlKCkoKSxkZSg4LCJkaXYiLDI1KSxndCg5LEc2dCwyLDAsInNwYW4iLDI2KSgxMCwkNnQsMSwwLCJjbHItaWNvbiIsMjcpKDExLEo2dCwzLDQsIm5nLWNvbnRhaW5lciIsMjgpKDEyLG44dCwzLDQs''@;'; put 'put ''Im5nLWNvbnRhaW5lciIsMjgpKDEzLHI4dCw0LDYsImNsci10ZXh0YXJlYS1jb250YWluZXIiLDI5KSgxNCxpOHQsNCwzLCJkaXYiLDI5KSgxNSxhOHQsMiw1LCJkaXYiLDI4KSxoZSgpKCksR3QoMTYsImhyIiwzMCksY2koKSksMiZjKXtsZXQgYSxkO2NvbnN0IGg9T2UoKSxmPWguJGltcGxp''@;'; put 'put ''Y2l0LHY9aC5pbmRleCxNPU9lKDIpO2ZlKDQpLFJyKCIgIixmLmtleSwiICIpLGZlKCkseGUoIm5nSWYiLE0uaXNDb2xQayhmLmtleSkpLGZlKDIpLFJyKCIgIixudWxsPT1NLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShhPU0uY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxl''@;'; put 'put ''KGYua2V5KSk/bnVsbDphLmRlc2MsIiAiKSxmZSgpLHhlKCJuZ1N3aXRjaCIsbnVsbD09TS5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oZD1NLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShmLmtleSkpP251bGw6ZC50eXBlKSxmZSgpLHhlKCJuZ0lmIixNLmN1cnJlbnRS''@;'; put 'put ''ZWNvcmRMb2FkaW5ncy5pbmNsdWRlcyh2KSksZmUoKSx4ZSgibmdJZiIsTS5jdXJyZW50UmVjb3JkRXJyb3JzLmluY2x1ZGVzKHYpKSxmZSgpLHhlKCJuZ1N3aXRjaENhc2UiLCJudW1lcmljIiksZmUoKSx4ZSgibmdTd2l0Y2hDYXNlIix2b2lkIDApLGZlKCkseGUoIm5nU3dpdGNoQ2FzZSIs''@;'; put 'put ''InRpbWUiKSxmZSgpLHhlKCJuZ1N3aXRjaENhc2UiLCJkYXRlIiksZmUoKSx4ZSgibmdTd2l0Y2hDYXNlIiwiYXV0b2NvbXBsZXRlIil9fWZ1bmN0aW9uIGw4dChjLGwpe2lmKDEmYyYmKGxpKDApLGd0KDEsczh0LDE3LDExLCJuZy1jb250YWluZXIiLDUpLGNpKCkpLDImYyl7Y29uc3QgYT1s''@;'; put 'put ''LiRpbXBsaWNpdDtmZSgpLHhlKCJuZ0lmIiwiQWN0aW9uIiE9PWEua2V5JiYiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIiE9PWEua2V5JiYibm9MaW5rT3B0aW9uIiE9PWEua2V5KX19ZnVuY3Rpb24gYzh0KGMsbCl7aWYoMSZjJiYobGkoMCksZ3QoMSxsOHQsMiwxLCJuZy1jb250''@;'; put 'put ''YWluZXIiLDE5KSxxcygyLCJrZXl2YWx1ZSIpLGNpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKCkseGUoIm5nRm9yT2YiLEI4KDIsMixhLmN1cnJlbnRSZWNvcmQsYS5vcmlnaW5hbE9yZGVyKSkoIm5nRm9yVHJhY2tCeSIsYS50cmFja0J5Rm4pfX1mdW5jdGlvbiB1OHQoYyxsKXsxJmMmJihk''@;'; put 'put ''ZSgwLCJjbHItYWxlcnQiLDQ0KSgxLCJjbHItYWxlcnQtaXRlbSIpKDIsInNwYW4iLDQ1KSxMZSgzLCIgRGF0YSBWYWxpZGF0aW9uIEVycm9ycyAtIFBsZWFzZSBSZXZpZXcgIiksaGUoKSgpKCkpLDImYyYmKF9kKCJ2aXNpYmlsaXR5IixPZSgpLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5s''@;'; put 'put ''ZW5ndGg+MD8idmlzaWJsZSI6ImhpZGRlbiIpLHhlKCJjbHJBbGVydENsb3NhYmxlIiwhMSkoImNsckFsZXJ0VHlwZSIsImRhbmdlciIpKX1mdW5jdGlvbiBkOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDQ2KSgxLCJidXR0b24iLDQ3KSxGdCgiY2xpY2siLGZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkub25QcmV2aW91c1JlY29yZENsaWNrKCkpfSksR3QoMiwiY2xyLWljb24iLDQ4KSxoZSgpLGRlKDMsInAiKSxMZSg0LCIgQ3VycmVudCByb3c6ICIpLGRlKDUsInN0cm9uZyIpLExlKDYpLGhlKCkoKSxkZSg3LCJidXR0b24iLDQ3KSxGdCgiY2xp''@;'; put 'put ''Y2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkub25OZXh0UmVjb3JkQ2xpY2soKSl9KSxHdCg4LCJjbHItaWNvbiIsNDkpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLHhlKCJkaXNhYmxlZCIsYS5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPjApLGZl''@;'; put 'put ''KDUpLFJyKCIgIixhLmN1cnJlbnRSZWNvcmRJbmRleCsxLCIgIiksZmUoKSx4ZSgiZGlzYWJsZWQiLGEuY3VycmVudFJlY29yZEludmFsaWRDb2xzLmxlbmd0aD4wKX19ZnVuY3Rpb24gaDh0KGMsbCl7aWYoMSZjJiYoZGUoMCwib3B0aW9uIiw1MyksTGUoMSksaGUoKSksMiZjKXtjb25zdCBh''@;'; put 'put ''PWwuJGltcGxpY2l0O3hlKCJuZ1ZhbHVlIixhKSxmZSgpLFJyKCIgIixhLCIgIil9fWZ1bmN0aW9uIGY4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIpKDEsImFwcC1zb2Z0LXNlbGVjdCIsNTEpLEZ0KCJmb2N1c2luIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9l''@;'; put 'put ''KCkuY29sSW5kZXg7cmV0dXJuIEN0KE9lKCkub25SZWNvcmRJbnB1dEZvY3VzKGgsZikpfSkscGkoInZhbHVlQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCkuY29sLHY9T2UoKTtyZXR1cm4gdmkodi5jdXJyZW50UmVjb3JkW2Yua2V5XSxoKXx8KHYuY3VycmVudFJlY29y''@;'; put 'put ''ZFtmLmtleV09aCksQ3QoaCl9KSxGdCgib25JbnB1dEV2ZW50IixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKSxmPWguY29sLHY9aC5jb2xJbmRleDtyZXR1cm4gQ3QoT2UoKS5vblJlY29yZERyb3Bkb3duQ2hhbmdlKGYua2V5LHYpKX0pLGd0KDIsaDh0LDIsMiwib3B0aW9uIiw1Miks''@;'; put 'put ''aGUoKSgpfWlmKDImYyl7bGV0IGE7Y29uc3QgZD1PZSgpLmNvbCxoPU9lKCk7ZmUoKSxmaSgidmFsdWUiLGguY3VycmVudFJlY29yZFtkLmtleV0pLHhlKCJpbnB1dElkIixkLmtleSksZmUoKSx4ZSgibmdGb3JPZiIsbnVsbD09aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yfHxudWxsPT0oYT1o''@;'; put 'put ''LmN1cnJlbnRSZWNvcmRWYWxpZGF0b3IuZ2V0UnVsZShkLmtleSkpP251bGw6YS5zb3VyY2UpfX1mdW5jdGlvbiBwOHQoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDU2KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7eGUoInZhbHVlIixhKSxmZSgpLFJyKCIgIixh''@;'; put 'put ''LCIgIil9fWZ1bmN0aW9uIGc4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsInNlbGVjdCIsNTQpLEZ0KCJmb2N1c2luIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCkuY29sSW5kZXg7cmV0dXJuIEN0KE9lKCkub25SZWNvcmRJbnB1dEZvY3VzKGgsZikpfSkscGkoIm5n''@;'; put 'put ''TW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKS5jb2wsdj1PZSgpO3JldHVybiB2aSh2LmN1cnJlbnRSZWNvcmRbZi5rZXldLGgpfHwodi5jdXJyZW50UmVjb3JkW2Yua2V5XT1oKSxDdChoKX0pLGd0KDEscDh0LDIsMiwib3B0aW9uIiw1NSksaGUoKX1pZigyJmMp''@;'; put 'put ''e2xldCBhO2NvbnN0IGQ9T2UoKS5jb2wsaD1PZSgpO2ZpKCJuZ01vZGVsIixoLmN1cnJlbnRSZWNvcmRbZC5rZXldKSxmZSgpLHhlKCJuZ0Zvck9mIixudWxsPT1oLmN1cnJlbnRSZWNvcmRWYWxpZGF0b3J8fG51bGw9PShhPWguY3VycmVudFJlY29yZFZhbGlkYXRvci5nZXRSdWxlKGQua2V5''@;'; put 'put ''KSk/bnVsbDphLnNvdXJjZSl9fWZ1bmN0aW9uIG04dChjLGwpe2lmKDEmYyYmZ3QoMCxmOHQsMywzLCJkaXYiLDUwKSgxLGc4dCwyLDIsIm5nLXRlbXBsYXRlIixudWxsLDIsX3UpLDImYyl7Y29uc3QgYT1sLmNvbCxkPXZvKDIpLGg9T2UoKTt4ZSgibmdJZiIsbnVsbD09aC5jdXJyZW50UmVj''@;'; put 'put ''b3JkVmFsaWRhdG9yP251bGw6aC5jdXJyZW50UmVjb3JkVmFsaWRhdG9yLmhhc0RxUnVsZXMoYS5rZXksV3MoMixqNnQpKSkoIm5nSWZFbHNlIixkKX19bGV0IHY4dD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCl7dGhpcy5zYXNTdG9yZVNlcnZpY2U9YSx0aGlzLmhlbHBlclNlcnZp''@;'; put 'put ''Y2U9ZCx0aGlzLnJlY29yZEFjdGlvbj1udWxsLHRoaXMuZmlsdGVyPSExLHRoaXMuc3VibWl0TG9hZGluZz0hMSx0aGlzLmhlYWRlclBrcz1bXSx0aGlzLmNlbGxWYWxpZGF0aW9uPVtdLHRoaXMuY3VycmVudFJlY29yZEluZGV4PS0xLHRoaXMuY3VycmVudFJlY29yZExvYWRpbmdzPVtdLHRo''@;'; put 'put ''aXMuY3VycmVudFJlY29yZEVycm9ycz1bXSx0aGlzLm9uUmVjb3JkQ2hhbmdlPW5ldyBxcix0aGlzLm9uUmVjb3JkSW5wdXRGb2N1c2VkPW5ldyBxcix0aGlzLm9uUmVjb3JkRHJvcGRvd25DaGFuZ2VkPW5ldyBxcix0aGlzLm9uUmVjb3JkRWRpdENsb3NlPW5ldyBxcix0aGlzLm9uUmVjb3Jk''@;'; put 'put ''RWRpdENvbmZpcm09bmV3IHFyLHRoaXMub25OZXh0UmVjb3JkPW5ldyBxcix0aGlzLm9uUHJldmlvdXNSZWNvcmQ9bmV3IHFyLHRoaXMuY3VycmVudFJlY29yZEludmFsaWRDb2xzPVtdLHRoaXMuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsTG9hZGluZz0hMSx0aGlzLmdlbmVyYXRlZFJlY29yZFVy''@;'; put 'put ''bD1udWxsLHRoaXMuYWRkUmVjb3JkVXJsPW51bGwsdGhpcy5yZWNvcmROZXdPclBrTW9kaWZpZWQ9ITEsdGhpcy5hZGRSZWNvcmRMb2FkaW5nPSExLHRoaXMub3JpZ2luYWxPcmRlcj0oaCxmKT0+MH1uZ09uSW5pdCgpe312YWxpZGF0ZVJlY29yZENvbChhLGQpe3ZhciBoPXRoaXM7cmV0dXJu''@;'; put 'put ''IGVlKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoZix2KT0+e2guY3VycmVudFJlY29yZFZhbGlkYXRvcj8uZXhlY3V0ZUhvdFZhbGlkYXRvcihhLGQsTT0+e2YoTSl9KX0pfSkoKX1yZWNvcmREYXRlQ2hhbmdlKGEsZCl7bGV0IGg9dGhpcy5jdXJyZW50UmVjb3JkVmFsaWRhdG9y''@;'; put 'put ''Py5nZXRSdWxlKGQpLGY9aD9oLmRhdGVGb3JtYXQ6IiI7dGhpcy5jdXJyZW50UmVjb3JkJiYodGhpcy5jdXJyZW50UmVjb3JkW2RdPV9hZSgpKGEpLmZvcm1hdChmKSl9Y29uZmlybVJlY29yZEVkaXQoKXt0aGlzLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg8MSYmdGhpcy5vblJl''@;'; put 'put ''Y29yZENoYW5nZS5lbWl0KHRoaXMuY3VycmVudFJlY29yZCl9Y2xvc2VSZWNvcmRFZGl0KCl7dGhpcy5vblJlY29yZEVkaXRDbG9zZS5lbWl0KCl9b25SZWNvcmREcm9wZG93bkNoYW5nZShhLGQpe3RoaXMub25SZWNvcmREcm9wZG93bkNoYW5nZWQuZW1pdCh7Y29sTmFtZTphLGNvbDpkfSl9''@;'; put 'put ''b25SZWNvcmRJbnB1dEZvY3VzKGEsZCl7dGhpcy5vblJlY29yZElucHV0Rm9jdXNlZC5lbWl0KHtldmVudDphLGNvbE5hbWU6ZH0pfXJlY29yZElucHV0UGFzdGUoYSl7c2V0VGltZW91dCgoKT0+e2EudGFyZ2V0LnZhbHVlPWEudGFyZ2V0LnZhbHVlLnJlcGxhY2UoL1xzKyQvLCIiKX0sMCl9''@;'; put 'put ''cmVjb3JkSW5wdXRDaGFuZ2UoYSxkKXt2YXIgaD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtjb25zdCBmPWguY3VycmVudFJlY29yZFZhbGlkYXRvcj8uZ2V0UnVsZShkKSx2PWEudGFyZ2V0LnZhbHVlO2guaGVscGVyU2VydmljZS5kZWJvdW5jZUNhbGwoMzAwLCgpPT57aC52YWxpZGF0''@;'; put 'put ''ZVJlY29yZENvbChmLHYpLnRoZW4oTT0+e2NvbnN0IEQ9aC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMuaW5kZXhPZihkKTtNP0Q+LTEmJmguY3VycmVudFJlY29yZEludmFsaWRDb2xzLnNwbGljZShELDEpOkQ8MCYmaC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMucHVzaChkKX0pfSl9KSgp''@;'; put 'put ''fW9uTmV4dFJlY29yZENsaWNrKCl7dGhpcy5vbk5leHRSZWNvcmQuZW1pdCgpfW9uUHJldmlvdXNSZWNvcmRDbGljaygpe3RoaXMub25QcmV2aW91c1JlY29yZC5lbWl0KCl9Y29weVRvQ2xpcChhKXtjb25zdCBkPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNyZWNvcmRNb2RhbFJlZiAubW9k''@;'; put 'put ''YWwtdGl0bGUiKTtpZihkKXtjb25zdCBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIik7aC5zdHlsZS5wb3NpdGlvbj0iZml4ZWQiLGguc3R5bGUubGVmdD0iMCIsaC5zdHlsZS50b3A9IjAiLGguc3R5bGUub3BhY2l0eT0iMCIsaC5zdHlsZS56SW5kZXg9IjUwMDAiLGgudmFs''@;'; put 'put ''dWU9YSxkLmFwcGVuZENoaWxkKGgpLGguZm9jdXMoKSxoLnNlbGVjdCgpLGRvY3VtZW50LmV4ZWNDb21tYW5kKCJjb3B5IiksZC5yZW1vdmVDaGlsZChoKSx0aGlzLmdlbmVyYXRlZFJlY29yZFVybD1hfX1nZW5lcmF0ZUVkaXRSZWNvcmRVcmwoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5j''@;'; put 'put ''dGlvbiooKXtpZihhLmdlbmVyYXRlZFJlY29yZFVybClhLmNvcHlUb0NsaXAoYS5nZW5lcmF0ZWRSZWNvcmRVcmwpO2Vsc2V7YS5nZW5lcmF0ZUVkaXRSZWNvcmRVcmxMb2FkaW5nPSEwO2NvbnN0IGQ9W107YS5oZWFkZXJQa3MuZm9yRWFjaChoPT57bGV0IGY9IkMiLHY9IiI7Zm9yKGxldCBN''@;'; put 'put ''PTA7TTxhLmNlbGxWYWxpZGF0aW9uLmxlbmd0aDtNKyspe2NvbnN0IEQ9YS5jZWxsVmFsaWRhdGlvbltNXTtpZihELmRhdGE9PT1oKXsoIm51bWVyaWMiPT09RC50eXBlfHwiZGF0ZSI9PT1ELnR5cGV8fCJ0aW1lIj09PUQudHlwZSkmJihmPSJOIik7YnJlYWt9fXY9IkMiPT09Zj9gJyR7YS5j''@;'; put 'put ''dXJyZW50UmVjb3JkW2hdfSdgOmEuY3VycmVudFJlY29yZFtoXS50b1N0cmluZygpLGQucHVzaCh7R1JPVVBfTE9HSUM6IkFORCIsU1VCR1JPVVBfTE9HSUM6IkFORCIsU1VCR1JPVVBfSUQ6MCxWQVJJQUJMRV9OTTpoLE9QRVJBVE9SX05NOiI9IixSQVdfVkFMVUU6dn0pfSksZC5sZW5ndGg+''@;'; put 'put ''MCYmYS5saWJkcyYmKHlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLnNhdmVRdWVyeShhLmxpYmRzLGQpLnRoZW4oaD0+e2EucXVlcnlGaWx0ZXI9e2lkOmgucmVzdWx0WzBdLkZJTFRFUl9SSyx0YWJsZTpoLnJlc3VsdFswXS5GSUxURVJfVEFCTEV9O2NvbnN0IE09bG9jYXRpb24uaHJlZi5zcGxp''@;'; put 'put ''dCgiIyIpWzBdKyIjL2VkaXRvci9lZGl0LXJlY29yZC8iK2EucXVlcnlGaWx0ZXIudGFibGUrIi8iK2EucXVlcnlGaWx0ZXIuaWQ7YS5jb3B5VG9DbGlwKE0pLGEuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsTG9hZGluZz0hMSxhLmZpbHRlcj0hMX0pLmNhdGNoKGg9PnthLnN1Ym1pdExvYWRpbmc9''@;'; put 'put ''ITF9KSl9fSkoKX1pc0NvbFBrKGEpe3JldHVybiB0aGlzLmhlYWRlclBrcy5pbmRleE9mKGEpPi0xfXRyYWNrQnlGbihhLGQpe3JldHVybiBhfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKFZoKSxHZShHdSkpfX1zdGF0aWN7dGhpcy5cdTAy''@;'; put 'put ''NzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWVkaXQtcmVjb3JkIl1dLGlucHV0czp7Y3VycmVudFJlY29yZDoiY3VycmVudFJlY29yZCIscmVjb3JkQWN0aW9uOiJyZWNvcmRBY3Rpb24iLGxpYmRzOiJsaWJkcyIscXVlcnlGaWx0ZXI6InF1ZXJ5RmlsdGVyIixmaWx0ZXI6ImZp''@;'; put 'put ''bHRlciIsc3VibWl0TG9hZGluZzoic3VibWl0TG9hZGluZyIsaGVhZGVyUGtzOiJoZWFkZXJQa3MiLGNlbGxWYWxpZGF0aW9uOiJjZWxsVmFsaWRhdGlvbiIsY3VycmVudFJlY29yZEluZGV4OiJjdXJyZW50UmVjb3JkSW5kZXgiLGN1cnJlbnRSZWNvcmRMb2FkaW5nczoiY3VycmVudFJlY29y''@;'; put 'put ''ZExvYWRpbmdzIixjdXJyZW50UmVjb3JkRXJyb3JzOiJjdXJyZW50UmVjb3JkRXJyb3JzIixjdXJyZW50UmVjb3JkVmFsaWRhdG9yOiJjdXJyZW50UmVjb3JkVmFsaWRhdG9yIn0sb3V0cHV0czp7b25SZWNvcmRDaGFuZ2U6Im9uUmVjb3JkQ2hhbmdlIixvblJlY29yZElucHV0Rm9jdXNlZDoi''@;'; put 'put ''b25SZWNvcmRJbnB1dEZvY3VzZWQiLG9uUmVjb3JkRHJvcGRvd25DaGFuZ2VkOiJvblJlY29yZERyb3Bkb3duQ2hhbmdlZCIsb25SZWNvcmRFZGl0Q2xvc2U6Im9uUmVjb3JkRWRpdENsb3NlIixvblJlY29yZEVkaXRDb25maXJtOiJvblJlY29yZEVkaXRDb25maXJtIixvbk5leHRSZWNvcmQ6''@;'; put 'put ''Im9uTmV4dFJlY29yZCIsb25QcmV2aW91c1JlY29yZDoib25QcmV2aW91c1JlY29yZCJ9LGRlY2xzOjE3LHZhcnM6MTEsY29uc3RzOltbImF1dG9jb21wbGV0ZSIsIiJdLFsiY2hhclRleHRhcmVhIiwiIl0sWyJvdGhlcl90aGFuX3NvZnRfc2VsZWN0IiwiIl0sWyJpZCIsInJlY29yZE1vZGFs''@;'; put 'put ''UmVmIiwxLCJyZWNvcmQtZWRpdC1tb2RhbCIsInBvc2l0aW9uLXJlbGF0aXZlIiwzLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbENsb3NhYmxlIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzQsIm5nSWYiXSxbMSwibW9kYWwtYm9keSJdLFsiY2xhc3MiLCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNl''@;'; put 'put ''bnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgdy0xMDAgcHktMTAiLDQsIm5nSWYiXSxbMSwibW9kYWwtZm9vdGVyIiwicC0wIiwiY2xyLWdhcC01IiwiY2xyLWdhcC1tZC0wIiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWZsZXgtbWQtcm93Il0sWyJjbGFzcyIsInZhbGlkYXRpb24taW5mby1hbGVy''@;'; put 'put ''dCIsMywidmlzaWJpbGl0eSIsImNsckFsZXJ0Q2xvc2FibGUiLCJjbHJBbGVydFR5cGUiLDQsIm5nSWYiXSxbImNsYXNzIiwicHJldi1uZXh0Iiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsImZvY3VzYWJsZSIsIm1yLTVpIiwzLCJjbGljayJdLFsi''@;'; put 'put ''dHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJmb2N1c2FibGUiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbImNsYXNzIiwicG9zaXRpb24tYWJzb2x1dGUgZ2VuZXJhdGUtcmVjb3JkLXVybCIsNCwibmdJZiJdLFsiY2xhc3MiLCJidG4gYnRuLWxpbmsgZ2VuZXJhdGUtcmVj''@;'; put 'put ''b3JkLXVybC1idXR0b24gcG9zaXRpb24tYWJzb2x1dGUiLDMsImRpc2FibGVkIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwicG9zaXRpb24tYWJzb2x1dGUiLCJnZW5lcmF0ZS1yZWNvcmQtdXJsIl0sWzEsImJ0biIsImJ0bi1saW5rIiwiZ2VuZXJhdGUtcmVjb3JkLXVybC1idXR0b24iLCJwb3Np''@;'; put 'put ''dGlvbi1hYnNvbHV0ZSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiYWxpZ24taXRlbXMtY2VudGVyIiwidy0xMDAiLCJweS0xMCJdLFsxLCJzcGlubmVyIl0sWzQsIm5nRm9yIiwibmdGb3JPZiIsIm5nRm9yVHJhY2tCeSJdLFsx''@;'; put 'put ''LCJjb2x1bW4tZW50cnkiLCJjbHItZmxleC1jb2x1bW4iLCJjbHItZmxleC1tZC1yb3ciXSxbMSwibmFtZS1pbnB1dC1yb3ciXSxbMSwiZm9udC13ZWlnaHQtYm9sZCJdLFsic2hhcGUiLCJrZXkiLDQsIm5nSWYiXSxbMSwiY2VsbC1kZXNjIl0sWzEsImlucHV0cy13cmFwcGVyIiwicG9zaXRp''@;'; put 'put ''b24tcmVsYXRpdmUiLDMsIm5nU3dpdGNoIl0sWyJjbGFzcyIsInNwaW5uZXIgc3Bpbm5lci1pbmxpbmUgZmxleC11bnNldCBwb3NpdGlvbi1hYnNvbHV0ZSBlbnRyeS1pbnB1dC1sZWZ0LW9mZnNldCIsNCwibmdJZiJdLFsiY2xhc3MiLCJmbGV4LXVuc2V0IHBvc2l0aW9uLWFic29sdXRlIGVu''@;'; put 'put ''dHJ5LWlucHV0LWxlZnQtb2Zmc2V0Iiwic2hhcGUiLCJlcnJvci1zdGFuZGFyZCIsInN0YXR1cyIsIndhcm5pbmciLDQsIm5nSWYiXSxbNCwibmdTd2l0Y2hDYXNlIl0sWyJjbGFzcyIsImRhdGUtZmllbGQiLDQsIm5nU3dpdGNoQ2FzZSJdLFsxLCJtdC0xMCJdLFsic2hhcGUiLCJrZXkiXSxb''@;'; put 'put ''MSwic3Bpbm5lciIsInNwaW5uZXItaW5saW5lIiwiZmxleC11bnNldCIsInBvc2l0aW9uLWFic29sdXRlIiwiZW50cnktaW5wdXQtbGVmdC1vZmZzZXQiXSxbInNoYXBlIiwiZXJyb3Itc3RhbmRhcmQiLCJzdGF0dXMiLCJ3YXJuaW5nIiwxLCJmbGV4LXVuc2V0IiwicG9zaXRpb24tYWJzb2x1''@;'; put 'put ''dGUiLCJlbnRyeS1pbnB1dC1sZWZ0LW9mZnNldCJdLFsiY2xhc3MiLCJudW1lcmljLWlucHV0IiwzLCJpbnZhbGlkLWRhdGEiLDQsIm5nSWYiXSxbMSwibnVtZXJpYy1pbnB1dCJdLFsiY2xySW5wdXQiLCIiLCJ0eXBlIiwidGV4dCIsMSwibm90LWNoYXIiLDMsImZvY3VzaW4iLCJwYXN0ZSIs''@;'; put 'put ''ImlucHV0IiwibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbNCwibmdUZW1wbGF0ZU91dGxldCIsIm5nVGVtcGxhdGVPdXRsZXRDb250ZXh0Il0sWyJjbHJUZXh0YXJlYSIsIiIsMywiZm9jdXNpbiIsInBhc3RlIiwiaW5wdXQiLCJuZ01vZGVsQ2hhbmdlIiwicm93cyIsIm5nTW9kZWwiLCJt''@;'; put 'put ''YXhMZW5ndGgiXSxbMSwiZGF0ZS1maWVsZCJdLFsiY2xyVGV4dGFyZWEiLCIiLDMsInBhc3RlIiwiaW5wdXQiLCJuZ01vZGVsQ2hhbmdlIiwicm93cyIsIm5nTW9kZWwiXSxbImNsclRleHRhcmVhIiwiIiwicm93cyIsIjEiLCJjb2xzIiwiYXV0byIsMSwibm90LWNoYXIiLDMsInBhc3RlIiwi''@;'; put 'put ''aW5wdXQiLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsxLCJkYXRlLXBpY2tlciJdLFsidHlwZSIsImRhdGUiLCJuYW1lIiwiZGF0ZSIsImNsckRhdGUiLCIiLDEsImQtbm9uZSIsMywiY2xyRGF0ZUNoYW5nZSJdLFsxLCJ2YWxpZGF0aW9uLWluZm8tYWxlcnQiLDMsImNsckFsZXJ0Q2xv''@;'; put 'put ''c2FibGUiLCJjbHJBbGVydFR5cGUiXSxbMSwiYWxlcnQtdGV4dCJdLFsxLCJwcmV2LW5leHQiXSxbInR5cGUiLCJidXR0b24iLCJ0YWJpbmRleCIsIjAiLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwiZm9jdXNhYmxlIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJzaGFwZSIsImFuZ2xlIGxlZnQi''@;'; put 'put ''LCJzaXplIiwiMjMiXSxbInNoYXBlIiwiYW5nbGUgcmlnaHQiLCJzaXplIiwiMjMiXSxbNCwibmdJZiIsIm5nSWZFbHNlIl0sWzMsImZvY3VzaW4iLCJ2YWx1ZUNoYW5nZSIsIm9uSW5wdXRFdmVudCIsInZhbHVlIiwiaW5wdXRJZCJdLFszLCJuZ1ZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2Yi''@;'; put 'put ''XSxbMywibmdWYWx1ZSJdLFsiY2xyU2VsZWN0IiwiIiwzLCJmb2N1c2luIiwibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJ2YWx1ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpe2lmKDEmZCl7Y29uc3QgZj1PbigpO2RlKDAs''@;'; put 'put ''ImNsci1tb2RhbCIsMykoMSwiaDMiLDQpLExlKDIpLGd0KDMsWjZ0LDMsMiwibmctY29udGFpbmVyIiw1KSxoZSgpLGRlKDQsImRpdiIsNiksZ3QoNSxXNnQsMywwLCJkaXYiLDcpKDYsYzh0LDMsNSwibmctY29udGFpbmVyIiw1KSxoZSgpLGRlKDcsImRpdiIsOCksZ3QoOCx1OHQsNCw0LCJj''@;'; put 'put ''bHItYWxlcnQiLDkpKDksZDh0LDksMywiZGl2IiwxMCksZGUoMTAsImRpdiIpKDExLCJidXR0b24iLDExKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGguY3VycmVudFJlY29yZC5ub0xpbmtPcHRpb249ITEsQ3QoaC5jbG9zZVJlY29yZEVkaXQoKSl9KSxMZSgxMiwiIENh''@;'; put 'put ''bmNlbCAiKSxoZSgpLGRlKDEzLCJidXR0b24iLDEyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguY29uZmlybVJlY29yZEVkaXQoKSl9KSxMZSgxNCwiIENvbmZpcm0gIiksaGUoKSgpKCksZ3QoMTUsbTh0LDMsMywibmctdGVtcGxhdGUiLG51bGwsMCxfdSksaGUo''@;'; put 'put ''KX0yJmQmJih4ZSgiY2xyTW9kYWxPcGVuIiwhMCkoImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSgyKSxMZigiICIsIkFERCI9PT1oLnJlY29yZEFjdGlvbj8iQWRkIjoiRWRpdCIsIiByZWNvcmQgaW4gIixudWxsPT1oLmxpYmRzP251bGw6aC5saWJkcy5zcGxpdCgiLiIpWzBdLCIuIixudWxs''@;'; put 'put ''PT1oLmxpYmRzP251bGw6aC5saWJkcy5zcGxpdCgiLiIpWzFdLCIgIiksZmUoKSx4ZSgibmdJZiIsIkVESVQiPT09aC5yZWNvcmRBY3Rpb24pLGZlKDIpLHhlKCJuZ0lmIixoLmFkZFJlY29yZExvYWRpbmcpLGZlKCkseGUoIm5nSWYiLCFoLmFkZFJlY29yZExvYWRpbmcpLGZlKDIpLHhlKCJu''@;'; put 'put ''Z0lmIixoLmN1cnJlbnRSZWNvcmRJbnZhbGlkQ29scy5sZW5ndGg+MCksZmUoKSx4ZSgibmdJZiIsaC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPDEpLGZlKDQpLHhlKCJkaXNhYmxlZCIsaC5jdXJyZW50UmVjb3JkSW52YWxpZENvbHMubGVuZ3RoPjApKX0sZGVwZW5kZW5jaWVz''@;'; put 'put ''Oltzcyx5byxOMSxiMixpcCxVZixaZixRbCx6ZixRcyxZcyxxeCxSZGUsWHgsT2wsb3UsS3UsT0wsWngsV0wscVksSWQsQkwsWnksWUwsY2RlLGw2ZSxmUl0sc3R5bGVzOlsiLnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29udGVudC0l''@;'; put 'put ''Q09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAubmFtZS1pbnB1dC1yb3dbX25nY29udGVudC0lQ09NUCVde3dpZHRo''@;'; put 'put ''OjEwMCU7bWF4LXdpZHRoOjI2MHB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWVudHJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYW1lLWlucHV0LXJvd1tfbmdjb250ZW50LSVDT01QJV0gICAuY2VsbC1kZXNjW19uZ2NvbnRlbnQtJUNPTVAlXXtt''@;'; put 'put ''YXJnaW4tcmlnaHQ6MzBweDttYXJnaW4tdG9wOjEwcHh9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29udGVudC0lQ09NUCVdICAgLmlucHV0cy13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjE7ZGlzcGxheTpmbGV4O2Fs''@;'; put 'put ''aWduLWl0ZW1zOmNlbnRlcn0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAuaW5wdXRzLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgID4qOm5vdCguZGF0ZS1maWVsZCk6bm90KGNsci1zZWxlY3Qt''@;'; put 'put ''Y29udGFpbmVyKXtmbGV4OjF9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDowfS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0g''@;'; put 'put ''ICAuY29sdW1uLWVudHJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci10ZXh0YXJlYS13cmFwcGVye21hcmdpbi10b3A6MCFpbXBvcnRhbnR9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4tZW50cnlbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xy''@;'; put 'put ''LWZvcm0tY29udHJvbHttYXJnaW4tdG9wOjAhaW1wb3J0YW50fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWVudHJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgYXBwLXNvZnQtc2VsZWN0e2Rpc3BsYXk6YmxvY2s7d2lkdGg6MjI0cHg7Ym9yZGVyOjFw''@;'; put 'put ''eCBzb2xpZCAjOTk5O2NvbG9yOiMwMDA7cGFkZGluZzpjYWxjKC4yNXJlbSArIDJweCkgLjVyZW07Ym9yZGVyLXJhZGl1czouMTI1cmVtO2ZvbnQtc2l6ZTouNTQxNjY3cmVtO21hcmdpbi1yaWdodDo2cHh9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jb2x1bW4t''@;'; put 'put ''ZW50cnlbX25nY29udGVudC0lQ09NUCVdICAgICBhcHAtc29mdC1zZWxlY3QgaW5wdXR7d2lkdGg6MTAwJTtib3JkZXI6MH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAgIGFwcC1zb2Z0LXNlbGVjdCBp''@;'; put 'put ''bnB1dDpmb2N1c3tiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOjAhaW1wb3J0YW50fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuY29sdW1uLWVudHJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgYXBwLXNvZnQtc2VsZWN0IGlucHV0Ojotd2Via2l0LW91dGVyLXNwaW4t''@;'; put 'put ''YnV0dG9uLCAucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV0gICAgIGFwcC1zb2Z0LXNlbGVjdCBpbnB1dDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTttYXJnaW46''@;'; put 'put ''MH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmNvbHVtbi1lbnRyeVtfbmdjb250ZW50LSVDT01QJV06Zmlyc3QtY2hpbGQgICBwW19uZ2NvbnRlbnQtJUNPTVAlXTpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQt''@;'; put 'put ''JUNPTVAlXSAgIC5kYXRlLWZpZWxkW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1ibG9ja30ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGUtZmllbGRbX25nY29udGVudC0lQ09NUCVdICAgdGV4dGFyZWFbX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVde3dpZHRoOjIzMHB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAuZGF0ZS1maWVsZFtfbmdjb250ZW50LSVDT01QJV0gICAuZGF0ZS1waWNrZXJbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjRw''@;'; put 'put ''eH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGUtZmllbGRbX25nY29udGVudC0lQ09NUCVdICAgLmRhdGUtcGlja2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1pbnB1dC1ncm91cHtib3JkZXI6MCFpbXBvcnRhbnR9LnJlY29yZC1lZGl0LW1vZGFs''@;'; put 'put ''W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tb2RhbC1ib2R5W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nLWJvdHRvbToxMHB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1zZWxlY3QtY29udGFpbmVye2JvcmRlcjoxcHggc29saWQgIzk5OTtjb2xvcjoj''@;'; put 'put ''MDAwO2JvcmRlci1yYWRpdXM6LjEyNXJlbTttYXJnaW4tcmlnaHQ6NXB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1zZWxlY3QtY29udGFpbmVyIC5jbHItc2VsZWN0LXdyYXBwZXJ7bWF4LWhlaWdodDp1bnNldH0ucmVjb3JkLWVkaXQtbW9kYWxbX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVdICAgICBjbHItc2VsZWN0LWNvbnRhaW5lciAuY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVye3RvcDoxNXB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1zZWxlY3QtY29udGFpbmVyIHNlbGVjdHtoZWlnaHQ6YXV0bztwYWRkaW5n''@;'; put 'put ''OjEwcHggMjBweCAxMHB4IDEwcHg7Ym9yZGVyOjAhaW1wb3J0YW50fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1zZWxlY3QtY29udGFpbmVyIHNlbGVjdDpmb2N1c3tiYWNrZ3JvdW5kOjAgMCFpbXBvcnRhbnR9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2Nv''@;'; put 'put ''bnRlbnQtJUNPTVAlXSAgICAgY2xyLXNlbGVjdC1jb250YWluZXIgc2VsZWN0OmhvdmVye2JhY2tncm91bmQ6dHJhbnNwYXJlbnR9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgY2xyLWlucHV0LWNvbnRhaW5lcnt3aWR0aDoyMjRweDtib3JkZXI6MXB4IHNvbGlk''@;'; put 'put ''ICM5OTk7Y29sb3I6IzAwMDtwYWRkaW5nOmNhbGMoLjI1cmVtICsgMnB4KSAuNXJlbTtib3JkZXItcmFkaXVzOi4xMjVyZW07Zm9udC1zaXplOi41NDE2NjdyZW07bWFyZ2luLXJpZ2h0OjZweH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICBjbHItaW5wdXQtY29u''@;'; put 'put ''dGFpbmVyIC5jbHItaW5wdXQtZ3JvdXB7d2lkdGg6MTAwJTtib3JkZXI6MH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICBjbHItaW5wdXQtY29udGFpbmVyIGlucHV0e3dpZHRoOjEwMCU7Ym9yZGVyOjB9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNP''@;'; put 'put ''TVAlXSAgICAgY2xyLWlucHV0LWNvbnRhaW5lciBpbnB1dDpmb2N1c3tiYWNrZ3JvdW5kOm5vbmU7Ym9yZGVyOjAhaW1wb3J0YW50fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1pbnB1dC1jb250YWluZXIgaW5wdXQ6Oi13ZWJraXQtb3V0ZXItc3Bpbi1i''@;'; put 'put ''dXR0b24sIC5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1pbnB1dC1jb250YWluZXIgaW5wdXQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjB9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQt''@;'; put 'put ''JUNPTVAlXSAgICAgY2xyLWlucHV0LWNvbnRhaW5lci5pbnZhbGlkLWRhdGF7Ym9yZGVyLWNvbG9yOnJlZH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAubW9kYWwtZGlhbG9ne3dpZHRoOjgwdnd9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAl''@;'; put 'put ''XSAgICAgLmNsci1jb250cm9sLWNvbnRhaW5lcnt3aWR0aDoxMDAlfS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItY29udHJvbC1jb250YWluZXIgdGV4dGFyZWF7d2lkdGg6MTAwJTtyZXNpemU6bm9uZTtib3JkZXItY29sb3I6Izk5OX0ucmVjb3JkLWVk''@;'; put 'put ''aXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVyIHRleHRhcmVhLmludmFsaWQtZGF0YXtib3JkZXItY29sb3I6cmVkO291dGxpbmU6MH0ucmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFp''@;'; put 'put ''bmVyIHRleHRhcmVhLm5vdC1jaGFye2ZvbnQtZmFtaWx5Okx1Y2lkYSBDb25zb2xlLE1vbmFjbyxtb25vc3BhY2V9LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmdlbmVyYXRlLXJlY29yZC11cmx7cmlnaHQ6NDBweDt0b3A6NDBweDtmb250LXNpemU6MTJweH0u''@;'; put 'put ''cmVjb3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAuZ2VuZXJhdGUtcmVjb3JkLXVybC1idXR0b257cmlnaHQ6MjVweDt0b3A6NXB4fS5yZWNvcmQtZWRpdC1tb2RhbFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5tb2RhbC1oZWFkZXJ7cGFkZGluZzowIDAgMXJlbX0ucmVj''@;'; put 'put ''b3JkLWVkaXQtbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAubW9kYWwtZm9vdGVye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59LnJlY29yZC1lZGl0LW1vZGFsW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLm1vZGFsLWZv''@;'; put 'put ''b3RlciAuYWxlcnR7bWFyZ2luOjB9LnByZXYtbmV4dFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0ucHJldi1uZXh0W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHBbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowfS5wcmV2LW5leHRbX25nY29udGVu''@;'; put 'put ''dC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MCAxMHB4fS5mb2N1c2FibGVbX25nY29udGVudC0lQ09NUCVdOmZvY3Vze2JveC1zaGFkb3c6MCAwIDNweCAjNWFhMjIwfS5lbnRyeS1pbnB1dC1sZWZ0LW9mZnNldFtfbmdjb250ZW50LSVDT01QJV17bGVmdDot''@;'; put 'put ''MzBweH0udmFsaWRhdGlvbi1pbmZvLWFsZXJ0W19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDozMTBweH0iXX0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gYjh0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsMyksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCksUnIoIiAi''@;'; put 'put ''LGEsIiAiKX19bGV0IHk4dD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5zdGF0ZXNMaXN0PVtdLHRoaXMucHJvY2Vzc2VkU3RhdGVzPVtdLHRoaXMuc3RhdGVySW5Qcm9ncmVzcz0hMSx0aGlzLm1pbkRlbGF5PTFlM31uZ09uSW5pdCgpe31hcHBlbmRTdGF0ZShhKXtpZigie2Zp''@;'; put 'put ''bmlzaH0iPT09YSlyZXR1cm4gdGhpcy5zdGF0ZXJJblByb2dyZXNzPSExLHZvaWQgY2xlYXJJbnRlcnZhbCh0aGlzLnN0YXRlSW50ZXJ2YWwpO3RoaXMuc3RhdGVzTGlzdC5wdXNoKGEpLHRoaXMucHJvY2Vzc2VkU3RhdGVzLnB1c2goYSl9cmVwbGFjZUxhc3RTdGF0ZShhKXt0aGlzLnN0YXRl''@;'; put 'put ''c0xpc3QubGVuZ3RoPjA/KHRoaXMuc3RhdGVzTGlzdC5wb3AoKSx0aGlzLnN0YXRlc0xpc3QucHVzaChhKSk6dGhpcy5wcm9jZXNzZWRTdGF0ZXNbdGhpcy5wcm9jZXNzZWRTdGF0ZXMubGVuZ3RoLTFdPWF9Y2xlYXJTdGF0ZXMoKXt0aGlzLnByb2Nlc3NlZFN0YXRlcz1bXX1zdGFydFN0YXRl''@;'; put 'put ''cigpe3RoaXMuc3RhdGVySW5Qcm9ncmVzcz0hMCx0aGlzLnN0YXRlc0xpc3QubGVuZ3RoPjAmJnRoaXMucHJvY2Vzc2VkU3RhdGVzLnB1c2godGhpcy5zdGF0ZXNMaXN0LnNoaWZ0KCl8fCIiKSx0aGlzLnN0YXRlSW50ZXJ2YWw9c2V0SW50ZXJ2YWwoKCk9Pnt0aGlzLnN0YXRlc0xpc3QubGVu''@;'; put 'put ''Z3RoPjAmJnRoaXMucHJvY2Vzc2VkU3RhdGVzLnB1c2godGhpcy5zdGF0ZXNMaXN0LnNoaWZ0KCl8fCIiKX0sdGhpcy5taW5EZWxheSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNl''@;'; put 'put ''bGVjdG9yczpbWyJhcHAtdXBsb2FkLXN0YXRlciJdXSxkZWNsczo1LHZhcnM6MSxjb25zdHM6W1siY2xhc3MiLCJtLTAiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJ0ZXh0LWNlbnRlciJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1zbSIsInZlcnRpY2FsLWFsaWduLW1pZGRsZSJdLFsxLCJt''@;'; put 'put ''LTAiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgwLCJkaXYiKSxndCgxLGI4dCwyLDEsInAiLDApLGhlKCksZGUoMiwiZGl2IiwxKSgzLCJzcGFuIiwyKSxMZSg0LCJMb2FkaW5nLi4uIiksaGUoKSgpKSwyJmQmJihmZSgpLHhlKCJuZ0Zvck9mIixoLnByb2Nlc3NlZFN0YXRl''@;'; put 'put ''cykpfSxkZXBlbmRlbmNpZXM6W3NzXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2Rpc3BsYXk6YmxvY2t9cFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjA7dGV4dC1hbGlnbjpjZW50ZXJ9Il19KX19cmV0dXJuIGN9KSgpLF84dD0oKCk9PntjbGFzcyBje3RyYW5zZm9ybShhKXtyZXR1''@;'; put 'put ''cm4gYS5yZXBsYWNlKC9cfC9nLCIgfCAiKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1cGlwZT1hbCh7bmFtZToicGtTcGFjZVNlcGFyYXRlIix0eXBlOmMscHVyZTohMH0pfX1yZXR1cm4gY30pKCkscDZlPSgo''@;'; put 'put ''KT0+e2NsYXNzIGN7dHJhbnNmb3JtKGEsZCl7cmV0dXJuIHRoaXMuYWRkU2VwYXJhdG9ycyhhLnRvU3RyaW5nKCksZCl9YWRkU2VwYXJhdG9ycyhhLGQ9IiAiKXtjb25zdCBoPShhKz0iIikuc3BsaXQoIi4iKTtsZXQgZj1oWzBdO2NvbnN0IHY9aC5sZW5ndGg+MT8iLiIraFsxXToiIixNPS8o''@;'; put 'put ''XGQrKShcZHszfSkvO2Zvcig7TS50ZXN0KGYpOylmPWYucmVwbGFjZShNLCIkMSIrZCsiJDIiKTtyZXR1cm4gZit2fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPWFsKHtuYW1lOiJ0aG91c2FuZFNlcGFy''@;'; put 'put ''YXRvciIsdHlwZTpjLHB1cmU6ITB9KX19cmV0dXJuIGN9KSgpO2NvbnN0IHc4dD1bImh0Il0sQzh0PVsidXBsb2FkU3RhdGVyIl0sUzh0PVsicXVlcnlGaWx0ZXIiXSxNOHQ9WyJob3RJbnN0YW5jZSJdLHg4dD1bImZpbGVVcGxvYWRJbnB1dCJdLEU4dD0oYyxsKT0+KHtsaWJOYW1lOmMsdGFi''@;'; put 'put ''bGVOYW1lOmx9KSxnNmU9KCk9PlsiIiwiICJdLFQ4dD1jPT4oe2hlYWRlckJhckZpbHRlcjpjfSksQTh0PSgpPT5bIi9ob21lIl07ZnVuY3Rpb24gazh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2Iiw2NCkoMSwic3BhbiIsNjUpKDIsImxhYmVsIiw2NiksTGUoMywiIEJy''@;'; put 'put ''b3dzZSAiKSxoZSgpKCksZGUoNCwiaW5wdXQiLDY3LDMpLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgpLmF0dGFjaEZpbGUoaCkpfSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpO2ZlKDQpLHhlKCJ1cGxvYWRlciIsYS51cGxvYWRlcil9fWZ1bmN0aW9u''@;'; put 'put ''IEQ4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsNjgpKDEsImJ1dHRvbiIsNjkpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS51cGxvYWRQYXJzZWRGaWxlcygpKX0pLExlKDIsIiBVcGxvYWQgIiksaGUoKSgpfTImYyYmKGZlKCkseGUo''@;'; put 'put ''ImRpc2FibGVkIiwhMCkpfWZ1bmN0aW9uIEk4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImJ1dHRvbiIsNzApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5zaG93VXBsb2FkTW9kYWw9ITEpfSksTGUoMSwiIENsb3NlICIpLGhlKCl9aWYoMiZj''@;'; put 'put ''KXtjb25zdCBhPU9lKCk7eGUoImRpc2FibGVkIixhLmV4Y2VsRmlsZVBhcnNpbmd8fGEudXBsb2FkTG9hZGluZyl9fWZ1bmN0aW9uIFI4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImJ1dHRvbiIsNzEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2Uo''@;'; put 'put ''KS5zaG93VXBsb2FkTW9kYWw9ITEpfSksTGUoMSwiIFNraXAgIiksaGUoKX19ZnVuY3Rpb24gTDh0KGMsbCl7MSZjJiYoZGUoMCwiZGl2Iiw3MiksR3QoMSwiYXBwLXVwbG9hZC1zdGF0ZXIiLG51bGwsNCksaGUoKSl9ZnVuY3Rpb24gTzh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUo''@;'; put 'put ''MCwiYXBwLWVkaXQtcmVjb3JkIiw3MyksRnQoIm9uUmVjb3JkQ2hhbmdlIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLmNvbmZpcm1SZWNvcmRFZGl0KCkpfSkoIm9uUmVjb3JkSW5wdXRGb2N1c2VkIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5vblJlY29yZElu''@;'; put 'put ''cHV0Rm9jdXMoaCkpfSkoIm9uUmVjb3JkRWRpdENsb3NlIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLmNsb3NlUmVjb3JkRWRpdCgpKX0pKCJvbk5leHRSZWNvcmQiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkub25OZXh0UmVjb3JkKCkpfSkoIm9uUHJldmlvdXNS''@;'; put 'put ''ZWNvcmQiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkub25QcmV2aW91c1JlY29yZCgpKX0pLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKCk7eGUoImN1cnJlbnRSZWNvcmQiLGEuY3VycmVudEVkaXRSZWNvcmQpKCJyZWNvcmRBY3Rpb24iLGEucmVjb3JkQWN0aW9uKSgibGliZHMi''@;'; put 'put ''LGEubGliZHMpKCJxdWVyeUZpbHRlciIsYS5xdWVyeUZpbHRlcikoImZpbHRlciIsYS5maWx0ZXIpKCJzdWJtaXRMb2FkaW5nIixhLnN1Ym1pdExvYWRpbmcpKCJoZWFkZXJQa3MiLGEuaGVhZGVyUGtzKSgiY2VsbFZhbGlkYXRpb24iLGEuY2VsbFZhbGlkYXRpb24pKCJjdXJyZW50UmVjb3Jk''@;'; put 'put ''SW5kZXgiLGEuY3VycmVudEVkaXRSZWNvcmRJbmRleCkoImN1cnJlbnRSZWNvcmRMb2FkaW5ncyIsYS5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzKSgiY3VycmVudFJlY29yZEVycm9ycyIsYS5jdXJyZW50RWRpdFJlY29yZEVycm9ycykoImN1cnJlbnRSZWNvcmRWYWxpZGF0b3IiLGEuY3Vy''@;'; put 'put ''cmVudEVkaXRSZWNvcmRWYWxpZGF0b3IpfX1mdW5jdGlvbiBQOHQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDc0KSxHdCgxLCJwcm9ncmVzcyIpLGhlKCkpfWZ1bmN0aW9uIEY4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsNzUpKDEsInNwYW4iLDc2KSxHdCgyLCJjbHIt''@;'; put 'put ''aWNvbiIsNzcpLGRlKDMsInNwYW4iLDc4KSxMZSg0LCJCYWNrIHRvIHRhYmxlIHNlbGVjdGlvbiIpLGhlKCkoKSxkZSg1LCJzcGFuIiw3OSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLnZpZXdib3hNYW5hZ2VyKCkpfSksR3QoNiwiY2xyLWljb24iLDgwKSxk''@;'; put 'put ''ZSg3LCJzcGFuIiw3OCksTGUoOCwiVmlld2JveGVzIiksaGUoKSgpKCl9MiZjJiYoZmUoKSx4ZSgicm91dGVyTGluayIsV3MoMSxBOHQpKSl9ZnVuY3Rpb24gSDh0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsODYpfWZ1bmN0aW9uIE44dChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10b29s''@;'; put 'put ''dGlwLWNvbnRlbnQiLDg4KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoKSxScigiICIsYS5kc05vdGUsIiAiKX19ZnVuY3Rpb24gVjh0KGMsbCl7MSZjJiYobGkoMCksZ3QoMSxOOHQsMiwxLCJjbHItdG9vbHRpcC1jb250ZW50Iiw4NyksY2koKSl9ZnVuY3Rpb24gQjh0KGMs''@;'; put 'put ''bCl7aWYoMSZjJiYobGkoMCksTGUoMSkscXMoMiwidGhvdXNhbmRTZXBhcmF0b3IiKSxjaSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoKSxqSSgiICgiLEI4KDIsNCxhLmRhdGFTb3VyY2UubGVuZ3RoLCIsIiksIiAiLDE9PT1hLmRhdGFTb3VyY2UubGVuZ3RoPyJyb3ciOiJyb3dzIiwiLCAi''@;'; put 'put ''LGEuY29scy5sZW5ndGgsIiIsMT09PWEuY29scy5sZW5ndGg/IiBjb2wiOiIgY29scyIsIikgIil9fWZ1bmN0aW9uIGo4dChjLGwpezEmYyYmKGxpKDApLExlKDEsIiAoMCByb3dzKSAiKSxjaSgpKX1mdW5jdGlvbiB6OHQoYyxsKXtpZigxJmMmJihsaSgwKSxndCgxLEI4dCwzLDcsIm5nLWNv''@;'; put 'put ''bnRhaW5lciIsMzkpKDIsajh0LDIsMCwibmctY29udGFpbmVyIiwzOSksY2koKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKCkseGUoIm5nSWYiLCFhLnplcm9GaWx0ZXJSb3dzKSxmZSgpLHhlKCJuZ0lmIixhLnplcm9GaWx0ZXJSb3dzKX19ZnVuY3Rpb24gVTh0KGMsbCl7aWYoMSZjKXtjb25z''@;'; put 'put ''dCBhPU9uKCk7ZGUoMCwiaDQiLDgxKSgxLCJjbHItdG9vbHRpcCIpKDIsImNsci1pY29uIiw4MiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLmRhdGFzZXRJbmZvPSEwKX0pLGhlKCksZ3QoMyxIOHQsMSwwLCJjbHItaWNvbiIsODMpLGRlKDQsInNwYW4iLDg0''@;'; put 'put ''KSxMZSg1KSxkZSg2LCJhIiw4NSksTGUoNyksaGUoKSgpLGd0KDgsVjh0LDIsMCwibmctY29udGFpbmVyIiwzOSksaGUoKSxndCg5LHo4dCwzLDIsIm5nLWNvbnRhaW5lciIsMzkpLGhlKCl9aWYoMiZjKXtjb25zdCBhPWwubmdWYXIsZD1PZSgpO2ZlKDMpLHhlKCJuZ0lmIixhLnRhYmxlTmFt''@;'; put 'put ''ZS5pbmNsdWRlcygiLUZDIikpLGZlKDIpLFJyKCIgIixhLmxpYk5hbWUsIi4iKSxmZSgpLHhlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvZGF0YS8iK2QubGliZHMpLGZlKCksX3IoYS50YWJsZU5hbWUucmVwbGFjZSgiLUZDIiwiIikpLGZlKCkseGUoIm5nSWYiLGQuZHNOb3RlJiZkLmRzTm90ZS5s''@;'; put 'put ''ZW5ndGg+MCksZmUoKSx4ZSgibmdJZiIsZC5kYXRhU291cmNlKX19ZnVuY3Rpb24gWjh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiYnV0dG9uIiw5NSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgzKS5vblNob3dVcGxvYWRNb2RhbCgpKX0pLEd0''@;'; put 'put ''KDEsImNsci1pY29uIiw5NiksZGUoMiwic3BhbiIsNzgpLExlKDMsIlVwbG9hZCIpLGhlKCkoKX19ZnVuY3Rpb24gVzh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7bGkoMCksZGUoMSwiYnV0dG9uIiw5MCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5v''@;'; put 'put ''cGVuUWIoKSl9KSxHdCgyLCJjbHItaWNvbiIsOTEpLGRlKDMsInNwYW4iLDc4KSxMZSg0LCJGaWx0ZXIiKSxoZSgpKCksZGUoNSwiYnV0dG9uIiw5MiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5lZGl0VGFibGUoKSl9KSxHdCg2LCJjbHItaWNvbiIsOTMp''@;'; put 'put ''LGRlKDcsInNwYW4iLDc4KSxMZSg4LCJFZGl0IiksaGUoKSgpLGd0KDksWjh0LDQsMCwiYnV0dG9uIiw5NCksY2koKX1pZigyJmMpe2NvbnN0IGE9T2UoMik7ZmUoOSkseGUoIm5nSWYiLCFhLmNvbHVtbkxldmVsU2VjdXJpdHlGbGFnKX19ZnVuY3Rpb24gWTh0KGMsbCl7aWYoMSZjJiYoZGUo''@;'; put 'put ''MCwic3BhbiIpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSg0KTtmZSgpLHp1KCJUbyB1bmxvY2sgbW9yZSB0aGFuICIsYS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCwiICIsMT09PWEubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQ/InJv''@;'; put 'put ''dyI6InJvd3MiLCIsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpfX1mdW5jdGlvbiBHOHQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdG9vbHRpcC1jb250ZW50Iiw4OCksZ3QoMSxZOHQsMiwyLCJzcGFuIiwzOSksaGUoKSksMiZjKXtjb25zdCBhPU9lKDMpO2ZlKCkseGUo''@;'; put 'put ''Im5nSWYiLGEucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93KX19ZnVuY3Rpb24gJDh0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7bGkoMCksZGUoMSwiYnV0dG9uIiw5NyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5jYW5jZWxFZGl0KCkpfSksR3Qo''@;'; put 'put ''MiwiY2xyLWljb24iLDk4KSxkZSgzLCJzcGFuIiksTGUoNCwiQ2FuY2VsIiksaGUoKSgpLGRlKDUsImNsci10b29sdGlwIikoNiwiYnV0dG9uIiw5OSksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMik7cmV0dXJuIEN0KGgucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRk''@;'; put 'put ''Um93PyIiOmguYWRkUm93KCkpfSksR3QoNywiY2xyLWljb24iLDEwMCksTGUoOCwiQWRkIFJvdyAiKSxoZSgpLGd0KDksRzh0LDIsMSwiY2xyLXRvb2x0aXAtY29udGVudCIsODcpLGhlKCksZGUoMTAsImJ1dHRvbiIsNDQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3Qo''@;'; put 'put ''T2UoMikuY2hlY2tTYXZlKCkpfSksR3QoMTEsImNsci1pY29uIiwxMDEpLExlKDEyLCJTdWJtaXQgIiksaGUoKSxjaSgpfWlmKDImYyl7Y29uc3QgYT1PZSgyKTtmZSg2KSx4cigiZGMtbG9ja2VkLWNvbnRyb2wiLGEucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93KSx4ZSgiY2xyTG9hZGlu''@;'; put 'put ''ZyIsYS5hZGRpbmdOZXdSb3cpfX1mdW5jdGlvbiBLOHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJidXR0b24iLDEwNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgzKS5tYW51YWxGaWxlRWRpdE1vZGFsPSEwKX0pLEd0KDEsImNsci1pY29uIiw5''@;'; put 'put ''MyksZGUoMiwic3BhbiIpLExlKDMsIkVkaXQiKSxoZSgpKCl9fWZ1bmN0aW9uIHE4dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2xpKDApLGRlKDEsImJ1dHRvbiIsMTAyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDIpLmRpc2NhcmRTb3VyY2VGaWxlPSEw''@;'; put 'put ''KX0pLEd0KDIsImNsci1pY29uIiw5OCksZGUoMywic3BhbiIpLExlKDQsIkRpc2NhcmQgZmlsZSIpLGhlKCkoKSxndCg1LEs4dCw0LDAsImJ1dHRvbiIsMTAzKSxkZSg2LCJidXR0b24iLDEwNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5zdWJtaXRFeGNl''@;'; put 'put ''bCgpKX0pLEd0KDcsImNsci1pY29uIiwxMDEpLExlKDgsIiBTdWJtaXQgIiksaGUoKSxjaSgpfWlmKDImYyl7Y29uc3QgYT1PZSgyKTtmZSg1KSx4ZSgibmdJZiIsYS5ob3RUYWJsZS5yZWFkT25seSksZmUoKSx4ZSgiY2xyTG9hZGluZyIsYS51cGxvYWRMb2FkaW5nKX19ZnVuY3Rpb24gWDh0''@;'; put 'put ''KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw4OSksZ3QoMSxXOHQsMTAsMSwibmctY29udGFpbmVyIiwzOSkoMiwkOHQsMTMsMywibmctY29udGFpbmVyIiwzOSkoMyxxOHQsOSwyLCJuZy1jb250YWluZXIiLDM5KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLHhlKCJuZ0lmIixhLmhv''@;'; put 'put ''dFRhYmxlLnJlYWRPbmx5JiYhYS51cGxvYWRQcmV2aWV3KSxmZSgpLHhlKCJuZ0lmIiwhYS5ob3RUYWJsZS5yZWFkT25seSYmIWEudXBsb2FkUHJldmlldyksZmUoKSx4ZSgibmdJZiIsYS51cGxvYWRQcmV2aWV3KX19ZnVuY3Rpb24gSjh0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxMDYp''@;'; put 'put ''KDEsInNwYW4iKSxMZSgyLCJGSUxURVIgOiAiKSxkZSgzLCJiIiksTGUoNCksaGUoKSgpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDQpLF9yKGEucXVlcnlUZXh0KX19ZnVuY3Rpb24gUTh0KGMsbCl7MSZjJiYobGkoMCksZGUoMSwic3BhbiIsMTA5KSxMZSgyLCIgTG9hZGluZy4uLiAiKSxo''@;'; put 'put ''ZSgpLGRlKDMsImRpdiIsMTEwKSg0LCJwIiwxMTEpLExlKDUsIkxvYWRpbmcgdGFibGUiKSxoZSgpKCksY2koKSl9ZnVuY3Rpb24gZTd0KGMsbCl7MSZjJiYobGkoMCksZGUoMSwic3BhbiIpLEd0KDIsImNsci1pY29uIiwxMTIpLGhlKCksZGUoMywiZGl2IiwxMTApKDQsInAiLDExMSksTGUo''@;'; put 'put ''NSwiTG9hZGluZyB0YWJsZSBlcnJvciIpLGhlKCkoKSxjaSgpKX1mdW5jdGlvbiB0N3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDEwNykoMSwiZGl2IiwxMDgpLGd0KDIsUTh0LDYsMCwibmctY29udGFpbmVyIiwzOSkoMyxlN3QsNiwwLCJuZy1jb250YWluZXIiLDM5KSxoZSgpKCkpLDIm''@;'; put 'put ''Yyl7Y29uc3QgYT1PZSgpO2ZlKDIpLHhlKCJuZ0lmIiwhYS5nZXRkYXRhRXJyb3IpLGZlKCkseGUoIm5nSWYiLGEuZ2V0ZGF0YUVycm9yKX19ZnVuY3Rpb24gbjd0KGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgzKTtmZSgpLHp1KCJUbyB1''@;'; put 'put ''bmxvY2sgbW9yZSB0aGFuICIsYS5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCwiICIsMT09PWEubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQ/InJvdyI6InJvd3MiLCIsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyIpfX1mdW5j''@;'; put 'put ''dGlvbiByN3QoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdG9vbHRpcC1jb250ZW50IiwxMTUpLGd0KDEsbjd0LDIsMiwic3BhbiIsMzkpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLHhlKCJuZ0lmIixhLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJvdyl9fWZ1bmN0aW9uIGk3dChj''@;'; put 'put ''LGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci10b29sdGlwIikoMSwiYnV0dG9uIiwxMTMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCk7cmV0dXJuIEN0KGgucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93PyIiOmguYWRkUmVjb3JkQnV0dG9uQ2xp''@;'; put 'put ''Y2soKSl9KSxHdCgyLCJjbHItaWNvbiIsMTAwKSxMZSgzLCIgQWRkIFJlY29yZCAiKSxoZSgpLGd0KDQscjd0LDIsMSwiY2xyLXRvb2x0aXAtY29udGVudCIsMTE0KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpO2ZlKCkseHIoImRjLWxvY2tlZC1jb250cm9sIixhLnJlc3RyaWN0aW9ucy5y''@;'; put 'put ''ZXN0cmljdEFkZFJvdyl9fWZ1bmN0aW9uIG83dChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDExNiksTGUoMSksR3QoMiwiY29udGFjdC1saW5rIiksaGUoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSxScigiIFRvIGRpc3BsYXkgbW9yZSB0aGFuICIsYS5saWNlbmNlU3RhdGUudmFsdWUuZWRp''@;'; put 'put ''dG9yX3Jvd3NfYWxsb3dlZCwiIHJvd3MsIGNvbnRhY3QgIil9fWZ1bmN0aW9uIGE3dChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iLDEyOCksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKCksenUoIk9ubHkgIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1p''@;'; put 'put ''dCwiICIsMT09PWEubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0PyJyb3ciOiJyb3dzIiwiIHdpbGwgYmUgc3VibWl0dGVkLiBUbyByZW1vdmUgdGhlIHJlc3RyaWN0aW9uLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKX19ZnVuY3Rpb24gczd0KGMsbCl7''@;'; put 'put ''aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2IiwxMjkpKDEsImRpdiIsMTMwKSgyLCJsYWJlbCIsMTMxKSxMZSgzLCJNZXNzYWdlIiksaGUoKSxkZSg0LCJ0ZXh0YXJlYSIsMTMyKSxwaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgyKTtyZXR1cm4g''@;'; put 'put ''dmkoZi5tZXNzYWdlLGgpfHwoZi5tZXNzYWdlPWgpLEN0KGgpfSksaGUoKSgpKCl9aWYoMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDQpLGZpKCJuZ01vZGVsIixhLm1lc3NhZ2UpLHhlKCJkaXNhYmxlZCIsIWEudmFsaWRhdGlvbkRvbmUpKCJ2YWx1ZSIsYS52YWxpZGF0aW9uRG9uZT8iIjoiUGxl''@;'; put 'put ''YXNlIHdhaXQgd2hpbGUgd2UgdmFsaWRhdGUgIithLmNvbHMubGVuZ3RoKmEubW9kaWZlZFJvd3NJbmRleGVzLmxlbmd0aCsiIGNlbGxzLiIpfX1mdW5jdGlvbiBsN3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDExNykoMSwiZGl2IiwxMTgpKDIsImRpdiIsMTE5KSgz''@;'; put 'put ''LCJkaXYiLDEyMCkoNCwiYnV0dG9uIiwxMjEpLEd0KDUsImNsci1pY29uIiwxMjIpLGhlKCksZGUoNiwiaDMiLDgpLExlKDcpLGhlKCkoKSxkZSg4LCJkaXYiLDkpLGd0KDksYTd0LDIsMiwic3BhbiIsMTIzKSgxMCxzN3QsNSwzLCJkaXYiLDEyNCksaGUoKSxkZSgxMSwiZGl2IiwxMjUpKDEy''@;'; put 'put ''LCJidXR0b24iLDEyNiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKTtyZXR1cm4gQ3QoaC5zYXZlVGFibGUoaC5ob3RUYWJsZS5kYXRhKSl9KSxMZSgxMywiIFN1Ym1pdCAiKSxoZSgpLGRlKDE0LCJidXR0b24iLDEyNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0''@;'; put 'put ''KGEpO2NvbnN0IGg9T2UoKTtyZXR1cm4gaC5jYW5jZWxTdWJtaXQoKSxoLnN1Ym1pdD0hMSxDdChoLnZhbGlkYXRpb25Eb25lPTApfSksTGUoMTUsIiBDYW5jZWwgIiksaGUoKSgpKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpO2ZlKDcpLExmKCIgU3VibWl0IGZvciBBcHByb3ZhbCAoIixh''@;'; put 'put ''LnJvd3NDaGFuZ2VkLnJvd3NBZGRlZCwiIGFkZGVkLCAiLGEucm93c0NoYW5nZWQucm93c1VwZGF0ZWQsIiB1cGRhdGVkLCAiLGEucm93c0NoYW5nZWQucm93c0RlbGV0ZWQsIiBkZWxldGVkKSAiKSxmZSgyKSx4ZSgibmdJZiIsYS50b3RhbFJvd3NDaGFuZ2VkPmEubGljZW5jZVN0YXRlLnZh''@;'; put 'put ''bHVlLnN1Ym1pdF9yb3dzX2xpbWl0JiZhLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCE9PWEuSW5maW5pdHkpLGZlKCkseGUoIm5nSWYiLGEudGFibGVUcnVlKSxmZSgyKSx4ZSgiZGlzYWJsZWQiLCFhLnZhbGlkYXRpb25Eb25lKX19ZnVuY3Rpb24gYzd0KGMsbCl7aWYo''@;'; put 'put ''MSZjJiYoZGUoMCwic3BhbiIsMTMzKSxMZSgxKSxxcygyLCJwa1NwYWNlU2VwYXJhdGUiKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1PZSgpO2ZlKCksenUoIiBPbiByb3cgIixhKzEsIjogIixrYygyLDIsZC5wa0ZpZWxkc1thXS5yZXBsYWNlKCJ8IiwiIikpLCIgIil9fWZ1''@;'; put 'put ''bmN0aW9uIHU3dChjLGwpe2lmKDEmYyYmKGRlKDAsInAiKSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxMZigiICIsYS5jb2wsIigiLGEubGVuLCIpLCAiLGEudmFsLCIgIil9fWZ1bmN0aW9uIGQ3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRp''@;'; put 'put ''diIsMTM0KSgxLCJkaXYiLDEzNSkoMiwiZGl2IiwxMTkpKDMsImRpdiIsMTIwKSg0LCJidXR0b24iLDEyMSksR3QoNSwiY2xyLWljb24iLDEyMiksaGUoKSxkZSg2LCJoMyIsOCksTGUoNywiRXJyb3IiKSxoZSgpKCksZGUoOCwiZGl2Iiw5KSg5LCJwIiksTGUoMTAsIllvdSBjYW5ub3Qgc3Vi''@;'; put 'put ''bWl0IGVtcHR5IGNsYXVzZXMiKSxoZSgpKCksZGUoMTEsImRpdiIsMjMpKDEyLCJidXR0b24iLDQ0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkubnVsbFZhcmlhYmxlcz0hMSl9KSxMZSgxMywiIE9rICIpLGhlKCkoKSgpKCkoKX19ZnVuY3Rpb24gaDd0KGMs''@;'; put 'put ''bCl7MSZjJiZHdCgwLCJhcHAtcXVlcnkiLG51bGwsNSl9ZnVuY3Rpb24gZjd0KGMsbCl7MSZjJiYoZGUoMCwicCIsMTM2KSxMZSgxLCIgU29ycnkgdGhhdCBkaWRuJ3Qgd29yaywgdHJ5IGFnYWluLiAiKSxoZSgpKX1sZXQgJEg9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5jbnQ9MH1zdGF0''@;'; put 'put ''aWN7dGhpcy5ub25Qa0NudD0wfXN0YXRpY3t0aGlzLmxhc3RDZWxsPTB9Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaLG5lLGNlLGJlKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLmxvZ2dlclNlcnZpY2U9aCx0aGlzLnNhc1N0b3JlU2VydmljZT1m''@;'; put 'put ''LHRoaXMuaGVscGVyU2VydmljZT12LHRoaXMucm91dGVyPU0sdGhpcy5yb3V0ZT1ELHRoaXMuc2FzU2VydmljZT1aLHRoaXMuY2RmPW5lLHRoaXMuaG90UmVnaXN0ZXJlcj1jZSx0aGlzLnNwcmVhZHNoZWV0U2VydmljZT1iZSx0aGlzLnVwbG9hZFN0YXRlckNvbXBMaXN0PW5ldyBmZCx0aGlz''@;'; put 'put ''LnF1ZXJ5RmlsdGVyQ29tcExpc3Q9bmV3IGZkLHRoaXMuaG90SW5zdGFuY2VDb21wTGlzdD1uZXcgZmQsdGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdD1uZXcgZmQsdGhpcy5tZXNzYWdlPSIiLHRoaXMuJGRhdGFGb3JtYXRzPW51bGwsdGhpcy5jb2xzPVtdLHRoaXMucmVzdHJpY3Rpb25z''@;'; put 'put ''PXt9LHRoaXMuZGF0YXNldEluZm89ITEsdGhpcy5kc21ldGE9W10sdGhpcy52ZXJzaW9ucz1bXSx0aGlzLmRzTm90ZT0iIix0aGlzLnZpZXdib3hlcz0hMSx0aGlzLkluZmluaXR5PTEvMCx0aGlzLmhvdFRhYmxlPXtkYXRhOltdLGNvbEhlYWRlcnM6W10saGlkZGVuOiEwLGNvbHVtbnM6W10s''@;'; put 'put ''aGVpZ2h0OiIxMDAlIixtaW5TcGFyZVJvd3M6MSxsaWNlbnNlS2V5OnZvaWQgMCxyZWFkT25seTohMCxjb3B5UGFzdGU6e2NvcHlDb2x1bW5IZWFkZXJzOiEwLGNvcHlDb2x1bW5IZWFkZXJzT25seTohMH0sc2V0dGluZ3M6e2NvbnRleHRNZW51OntpdGVtczp7ZWRpdF9yb3c6e25hbWU6IkVk''@;'; put 'put ''aXQgcm93IixoaWRkZW4oKXtjb25zdCBxZT10aGlzLmdldFNlbGVjdGVkUmFuZ2UoKTtpZighcWUpcmV0dXJuITE7Y29uc3QgbnQ9cWVbMF07cmV0dXJuIG50LmZyb20ucm93IT09bnQudG8ucm93fSxjYWxsYmFjazooQmUscWUsbnQpPT57Y29uc3QgbHQ9cWVbMF07bHQuc3RhcnQucm93PT09''@;'; put 'put ''bHQuZW5kLnJvdyYmdGhpcy5lZGl0UmVjb3JkKG51bGwsbHQuc3RhcnQucm93KX19LHJvd19hYm92ZTp7bmFtZToiSW5zZXJ0IFJvdyBhYm92ZSJ9LHJvd19iZWxvdzp7bmFtZToiSW5zZXJ0IFJvdyBiZWxvdyJ9LHJlbW92ZV9yb3c6e25hbWU6Iklnbm9yZSByb3cifSxjb3B5OntuYW1lOiJD''@;'; put 'put ''b3B5IHdpdGhvdXQgaGVhZGVycyJ9LGNvcHlfd2l0aF9jb2x1bW5faGVhZGVyczp7bmFtZToiQ29weSB3aXRoIGhlYWRlcnMifSxjb3B5X2NvbHVtbl9oZWFkZXJzX29ubHk6e25hbWU6IkNvcHkgaGVhZGVycyBvbmx5In0sc3AxOntuYW1lOiItLS0tLS0tLS0ifSx1bmRvOntuYW1lOiJVbmRv''@;'; put 'put ''In0scmVkbzp7bmFtZToiUmVkbyJ9fX19fSx0aGlzLmhvdENlbGxzUHJvcFJvdz1udWxsLHRoaXMuZmlsdGVyPSExLHRoaXMuc3VibWl0TG9hZGluZz0hMSx0aGlzLnVwbG9hZExvYWRpbmc9ITEsdGhpcy5yb3dzQ2hhbmdlZD17cm93c1VwZGF0ZWQ6MCxyb3dzRGVsZXRlZDowLHJvd3NBZGRl''@;'; put 'put ''ZDowfSx0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcz1bXSx0aGlzLnF1ZXJ5RXJyPSExLHRoaXMuc3VjY2Vzc0VuYWJsZT0hMSx0aGlzLm51bGxWYXJpYWJsZXM9ITEsdGhpcy5wa0ZpZWxkcz1bXSx0aGlzLmZpbGVuYW1lPSIiLHRoaXMuc3VibWl0TGltaXROb3RpY2U9ITEsdGhpcy5iYWRFZGl0''@;'; put 'put ''PSExLHRoaXMuc2F2ZUxvYWRpbmc9ITEsdGhpcy5hcHByb3ZlcnM9W10sdGhpcy5lcnJWYWxpZGF0aW9uPSExLHRoaXMucGtOdWxsPSExLHRoaXMubm9Qa051bGw9ITEsdGhpcy50YWJsZURhdGE9W10sdGhpcy5xdWVyeVRleHQ9IiIsdGhpcy5xdWVyeVRleHRTYXZlZD0iIix0aGlzLnNob3dB''@;'; put 'put ''cHByb3ZlcnM9ITEsdGhpcy5wa0R1cHM9ITEsdGhpcy52YWxpZGF0aW9uRG9uZT0wLHRoaXMuZHVwbGljYXRlUGtJbmRleGVzPVtdLHRoaXMuY29sdW1uSGVhZGVyPVtdLHRoaXMuc3BlY0luZm89W10sdGhpcy50b29Mb25nPSExLHRoaXMuZXhjZWVkQ2VsbHM9W10sdGhpcy51cGxvYWRlcj1u''@;'; put 'put ''ZXcgQ2VlLHRoaXMudXBsb2FkVXJsPSIiLHRoaXMuZXhjZWxGaWxlUmVhZHk9ITEsdGhpcy51cGxvYWRQcmV2aWV3PSExLHRoaXMuZXhjZWxGaWxlUGFyc2luZz0hMSx0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9bnVsbCx0aGlzLmRhdGE9W10sdGhpcy5oZWFkZXJBcnJheT1bXSx0aGlzLmhvdERh''@;'; put 'put ''dGFTY2hlbWE9e30sdGhpcy5oZWFkZXJTaG93PVtdLHRoaXMuaGVhZGVyVmlzaWJsZT0hMSx0aGlzLmhhc0Jhc2VEcm9wWm9uZU92ZXI9ITEsdGhpcy5oYXNBbm90aGVyRHJvcFpvbmVPdmVyPSExLHRoaXMuaGVhZGVyUGtzPVtdLHRoaXMuY29sdW1uTGV2ZWxTZWN1cml0eUZsYWc9ITEsdGhp''@;'; put 'put ''cy5kYXRlVGltZUhlYWRlcnM9W10sdGhpcy50aW1lSGVhZGVycz1bXSx0aGlzLmRhdGVIZWFkZXJzPVtdLHRoaXMueGxSdWxlcz1bXSx0aGlzLmVuY29kaW5nPSJVVEYtOCIsdGhpcy5oZWFkZXJDb2x1bW5zPVtdLHRoaXMuY2VsbFZhbGlkYXRpb249W10sdGhpcy5maWxlUGFzc3dvcmRTdWJq''@;'; put 'put ''ZWN0PW5ldyBXbix0aGlzLmZpbGVVbmxvY2tFcnJvcj0hMSx0aGlzLmZpbGVQYXNzd29yZE1vZGFsPSExLHRoaXMuc2hvd1VwbG9hZE1vZGFsPSExLHRoaXMuZGlzY2FyZFNvdXJjZUZpbGU9ITEsdGhpcy5tYW51YWxGaWxlRWRpdE1vZGFsPSExLHRoaXMucmVjb3JkQWN0aW9uPW51bGwsdGhp''@;'; put 'put ''cy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzPVtdLHRoaXMuY3VycmVudEVkaXRSZWNvcmRFcnJvcnM9W10sdGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PS0xLHRoaXMuZ2VuZXJhdGVFZGl0UmVjb3JkVXJsTG9hZGluZz0hMSx0aGlzLmdlbmVyYXRlZFJlY29yZFVybD1udWxsLHRoaXMu''@;'; put 'put ''YWRkUmVjb3JkVXJsPW51bGwsdGhpcy5yZWNvcmROZXdPclBrTW9kaWZpZWQ9ITEsdGhpcy5hZGRSZWNvcmRMb2FkaW5nPSExLHRoaXMuc2luZ2xlUm93U2VsZWN0ZWQ9ITEsdGhpcy5hZGRpbmdOZXdSb3c9ITEsdGhpcy5nZXRkYXRhRXJyb3I9ITEsdGhpcy56ZXJvRmlsdGVyUm93cz0hMSx0''@;'; put 'put ''aGlzLnRhYmxlRmlsZURyYWdPdmVyPSExLHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2U9W10sdGhpcy52YWxpZGF0aW9uVGFibGVMaW1pdD0yMCx0aGlzLmV4dGVuZGVkQ2VsbFZhbGlkYXRpb25GaWVsZHM9e0RJU1BMQVlfSU5ERVg6MCxFWFRSQV9DT0xfTkFNRToxLERJU1BMQVlfVkFMVUU6''@;'; put 'put ''MixESVNQTEFZX1RZUEU6MyxSQVdfVkFMVUVfTlVNOjQsUkFXX1ZBTFVFX0NIQVI6NSxGT1JDRV9GTEFHOjZ9LHRoaXMuY2VsbFZhbGlkYXRpb25GaWVsZHM9e0RJU1BMQVlfSU5ERVg6MCxESVNQTEFZX1ZBTFVFOjEsUkFXX1ZBTFVFOjJ9LHRoaXMuZGlzYWJsZWRCYXNpY0R5bmFtaWNDZWxs''@;'; put 'put ''VmFsaWRhdGlvbk1hcD1bXSx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLnRpbWVzQ2xpY2tlZD0wLEllZVt3aW5kb3cubmF2aWdhdG9yLmxhbmd1YWdlXSYmWW0ucmVnaXN0ZXJMYW5ndWFnZShJZWVbd2luZG93Lm5hdmlnYXRvci5sYW5n''@;'; put 'put ''dWFnZV0pLHRoaXMuaG90UmVnaXN0ZXJlcj1uZXcgWm0sdGhpcy5wYXJzZVJlc3RyaWN0aW9ucygpLHRoaXMuc2V0UmVzdHJpY3Rpb25zKCl9cGFyc2VSZXN0cmljdGlvbnMoKXt0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJlY29yZD0hMT09PXRoaXMubGljZW5jZVN0YXRlLnZhbHVl''@;'; put 'put ''LmFkZFJlY29yZCx0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEVkaXRSZWNvcmQ9ITE9PT10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0UmVjb3JkLHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0RmlsZVVwbG9hZD0hMT09PXRoaXMubGljZW5jZVN0YXRlLnZhbHVlLmZpbGVVcGxvYWR9''@;'; put 'put ''c2V0UmVzdHJpY3Rpb25zKGEpe2EmJih0aGlzLnJlc3RyaWN0aW9ucz17Li4udGhpcy5yZXN0cmljdGlvbnMsLi4uYX0pLHRoaXMucmVzdHJpY3Rpb25zLnJlbW92ZUVkaXRSZWNvcmRCdXR0b24mJmRlbGV0ZSh0aGlzLmhvdFRhYmxlPy5zZXR0aW5ncz8uY29udGV4dE1lbnUpLml0ZW1zLmVk''@;'; put 'put ''aXRfcm93LHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93JiYoZGVsZXRlKHRoaXMuaG90VGFibGU/LnNldHRpbmdzPy5jb250ZXh0TWVudSkuaXRlbXMucm93X2Fib3ZlLGRlbGV0ZSh0aGlzLmhvdFRhYmxlPy5zZXR0aW5ncz8uY29udGV4dE1lbnUpLml0ZW1zLnJvd19iZWxvdyxk''@;'; put 'put ''ZWxldGUodGhpcy5ob3RUYWJsZT8uc2V0dGluZ3M/LmNvbnRleHRNZW51KS5pdGVtcy5yZW1vdmVfcm93KX1jaGVja1Jvd0xpbWl0KCl7dGhpcy5jb2x1bW5MZXZlbFNlY3VyaXR5RmxhZ3x8dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuZWRpdG9yX3Jvd3NfYWxsb3dlZCE9PTEvMCYmKHRoaXMu''@;'; put 'put ''cmVzdHJpY3Rpb25zLnJlc3RyaWN0QWRkUm93PXRoaXMuZGF0YVNvdXJjZT8ubGVuZ3RoPj10aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkKX1yZXNldEZpbHRlcigpe3RoaXMucXVlcnlGaWx0ZXJDb21wTGlzdC5maXJzdCYmdGhpcy5xdWVyeUZpbHRlckNvbXBM''@;'; put 'put ''aXN0LmZpcnN0LnJlc2V0RmlsdGVyKCl9b25TaG93VXBsb2FkTW9kYWwoKXt0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEZpbGVVcGxvYWQ/dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0RlbW9MaW1pdE1vZGFsKCJGaWxlIFVwbG9hZCIpOnRoaXMuY29sdW1uTGV2ZWxTZWN1cml0eUZsYWc/dGhp''@;'; put 'put ''cy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiSW5mb3JtYXRpb24iLCJVcGxvYWQgZmVhdHVyZSBpcyBkaXNhYmxlZCB3aGlsZSBDb2x1bW4gTGV2ZWwgU2VjdXJpdHkgcnVsZXMgYXJlIGFjdGl2ZSIpOnRoaXMudXBsb2FkUHJldmlld3x8KHRoaXMuc2hvd1VwbG9hZE1vZGFsPSEwKX1m''@;'; put 'put ''aWxlT3ZlckJhc2UoYSl7dGhpcy5oYXNCYXNlRHJvcFpvbmVPdmVyPWF9YXR0YWNoRmlsZShhLGQ9ITEpe3ZhciBoPXRoaXM7Y29uc3QgZj1kP2FbMF06YS50YXJnZXQuZmlsZXNbMF07dGhpcy5leGNlbFVwbG9hZFN0YXRlPSJMb2FkaW5nIix0aGlzLmV4Y2VsRmlsZVBhcnNpbmc9ITAsdGhp''@;'; put 'put ''cy5leGNlbEZpbGVSZWFkeT0hMSx0aGlzLmZpbGVuYW1lPWYubmFtZSx0aGlzLnNwcmVhZHNoZWV0U2VydmljZS5wYXJzZUV4Y2VsRmlsZSh7ZmlsZTpmLHVwbG9hZGVyOnRoaXMudXBsb2FkZXIsZGNWYWxpZGF0b3I6dGhpcy5kY1ZhbGlkYXRvcixoZWFkZXJQa3M6dGhpcy5oZWFkZXJQa3Ms''@;'; put 'put ''aGVhZGVyQXJyYXk6dGhpcy5oZWFkZXJBcnJheSxoZWFkZXJTaG93OnRoaXMuaGVhZGVyU2hvdyx0aW1lSGVhZGVyczp0aGlzLnRpbWVIZWFkZXJzLGRhdGVIZWFkZXJzOnRoaXMuZGF0ZUhlYWRlcnMsZGF0ZVRpbWVIZWFkZXJzOnRoaXMuZGF0ZVRpbWVIZWFkZXJzLHhsUnVsZXM6dGhpcy54''@;'; put 'put ''bFJ1bGVzLGVuY29kaW5nOnRoaXMuZW5jb2Rpbmd9LHY9Pnt0aGlzLmFwcGVuZFVwbG9hZFN0YXRlKHYpfSx2PT57dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiVGFibGUgRm91bmQiLHYpfSkudGhlbihmdW5jdGlvbigpe3ZhciB2PWVlKGZ1bmN0aW9uKihNKXtNJiYoaC5leGNl''@;'; put 'put ''bEZpbGVSZWFkeT0hMCxoLnVwbG9hZGVyPU0udXBsb2FkZXIsTS5kYXRhJiZNLmhlYWRlclNob3c/KGguZGF0YT1NLmRhdGEsaC5oZWFkZXJTaG93PU0uaGVhZGVyU2hvdyxoLmdldFBlbmRpbmdFeGNlbFByZXZpZXcoKSk6eWllbGQgaC51cGxvYWRQYXJzZWRGaWxlcygpKX0pO3JldHVybiBm''@;'; put 'put ''dW5jdGlvbihNKXtyZXR1cm4gdi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKS5jYXRjaCh2PT57dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCx2LG51bGwpLHRoaXMuc2hvd1VwbG9hZE1vZGFsPSExLHRoaXMudXBsb2FkUHJldmlldz0hMSxzZXRUaW1lb3V0KCgpPT57''@;'; put 'put ''dGhpcy5maWxlbmFtZT0iIn0pfSkuZmluYWxseSgoKT0+e3RoaXMuZXhjZWxGaWxlUGFyc2luZz0hMX0pfXN1Ym1pdEV4Y2VsKCl7dGhpcy5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQ9PT0xLzA/dGhpcy51cGxvYWRQYXJzZWRGaWxlcygpOnRoaXMuc3VibWl0TGltaXRO''@;'; put 'put ''b3RpY2U9ITB9dXBsb2FkUGFyc2VkRmlsZXMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtpZihhLmNoZWNrSW52YWxpZCgpKXJldHVybiB2b2lkIGEuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsIkludmFsaWQgdmFsdWVzIGFyZSBwcmVzZW50LiIpO2lmKGEu''@;'; put 'put ''dmFsaWRhdGVQcmltYXJ5S2V5cygpLDAhPT1hLmR1cGxpY2F0ZVBrSW5kZXhlcy5sZW5ndGgpcmV0dXJuIGEucGtEdXBzPSEwLHZvaWQoYS5zdWJtaXQ9ITEpO2EucGtEdXBzPSExLGEudXBsb2FkTG9hZGluZz0hMDtjb25zdCBkPVtdO2Zvcihjb25zdCBoIG9mIGEudXBsb2FkZXIucXVldWUp''@;'; put 'put ''ZC5wdXNoKHtmaWxlOmgsZmlsZU5hbWU6aC5uYW1lfSk7eWllbGQgYS5zYXNTZXJ2aWNlLnVwbG9hZEZpbGUoYS51cGxvYWRVcmwsZCx7dGFibGU6YS5saWJkc30pLnRoZW4oaD0+e2lmKHR5cGVvZiBoLmFkYXB0ZXJSZXNwb25zZS5zYXNqc0Fib3J0PiJ1Iil7aWYodHlwZW9mIGguYWRhcHRl''@;'; put 'put ''clJlc3BvbnNlLnNhc3BhcmFtcz4idSIpcmV0dXJuO3thLnVwbG9hZExvYWRpbmc9ITE7Y29uc3QgZj1oLmFkYXB0ZXJSZXNwb25zZS5zYXNwYXJhbXNbMF07YS5zdWNjZXNzRW5hYmxlPSEwLGEudGFibGVJZD1mLkRTSUQsYS5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrYS50YWJs''@;'; put 'put ''ZUlkKX19ZWxzZXtjb25zdCBmPWguYWRhcHRlclJlc3BvbnNlLHY9Zi5zYXNqc0Fib3J0WzBdLk1TRyxNPWYuc2FzanNBYm9ydFswXS5NQUM7YS51cGxvYWRMb2FkaW5nPSExLGEuZmlsZW5hbWU9IiIsYS5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdCYmKGEuZmlsZVVwbG9hZElucHV0''@;'; put 'put ''Q29tcExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC52YWx1ZT0iIiksYS51cGxvYWRlci5xdWV1ZT1bXSxhLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgiIix2LHtTWVNXQVJOSU5HVEVYVDpmLlNZU1dBUk5JTkdURVhULFNZU0VSUk9SVEVYVDpmLlNZU0VSUk9SVEVYVCxNQUM6TX0pfX0s''@;'; put 'put ''aD0+e2EudXBsb2FkTG9hZGluZz0hMSxhLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0JiYoYS5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdC5uYXRpdmVFbGVtZW50LnZhbHVlPSIiKSxhLnVwbG9hZGVyLnF1ZXVlPVtdLGEuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJv''@;'; put 'put ''cigiZmlsZSB1cGxvYWQiLGguYWRhcHRlclJlc3BvbnNlKX0pfSkoKX1nZXRQZW5kaW5nRXhjZWxQcmV2aWV3KCl7dGhpcy5xdWVyeVRleHRTYXZlZD10aGlzLnF1ZXJ5VGV4dCx0aGlzLnF1ZXJ5VGV4dD0iIix0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9IlBhcnNpbmciLHRoaXMudG9nZ2xlSG90''@;'; put 'put ''UGx1Z2luKCJjb250ZXh0TWVudSIsITEpO2NvbnN0IGE9W107dGhpcy5kYXRhLm1hcChoPT57Y29uc3QgZj17fTt0aGlzLmhlYWRlclNob3cubWFwKCh2LE0pPT57Zlt2XT1oW01dfSksZi5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX198fChmLl9fX19fREVMRVRFX19USElTX19SRUNP''@;'; put 'put ''UkRfX19fXz0iTm8iKSxhLnB1c2goZil9KSx0aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2UpLHRoaXMuZGF0YVNvdXJjZT1hLHRoaXMuaG90VGFibGUuZGF0YT1hO2NvbnN0IGQ9dGhpcy5ob3RJbnN0YW5jZTt0aGlz''@;'; put 'put ''LmV4Y2VsVXBsb2FkU3RhdGU9IlZhbGlkYXRpbmctSE9UIixkLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZSxtYXhSb3dzOjEvMH0sITEpLGQucmVuZGVyKCksdGhpcy5hcHBlbmRVcGxvYWRTdGF0ZSgiVmFsaWRhdGluZyByb3dzIiksZC52YWxpZGF0ZUNlbGxzKCgpPT57''@;'; put 'put ''dGhpcy5zaG93VXBsb2FkTW9kYWw9ITEsdGhpcy51cGxvYWRQcmV2aWV3PSEwLHRoaXMuZXhjZWxGaWxlUGFyc2luZz0hMSx0aGlzLmV4Y2VsVXBsb2FkU3RhdGU9bnVsbH0pfWRpc2NhcmRQZW5kaW5nRXhjZWwoYSl7dGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyh7bWF4Um93czp0''@;'; put 'put ''aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkfSksYSYmdGhpcy5jYW5jZWxFZGl0KCksdGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdCYmKHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC52YWx1ZT0iIiksdGhp''@;'; put 'put ''cy51cGxvYWRQcmV2aWV3PSExLHRoaXMuZXhjZWxGaWxlUmVhZHk9ITEsdGhpcy51cGxvYWRlci5xdWV1ZT1bXSxpc05hTihwYXJzZUludCh0aGlzLnJvdXRlci51cmwuc3BsaXQoIi8iKS5wb3AoKXx8IiIpKXx8dGhpcy5xdWVyeVRleHRTYXZlZC5sZW5ndGg+MCYmKHRoaXMucXVlcnlUZXh0''@;'; put 'put ''PXRoaXMucXVlcnlUZXh0U2F2ZWQsdGhpcy5xdWVyeVRleHRTYXZlZD0iIil9cHJldmlld1RhYmxlRWRpdENvbmZpcm0oKXt0aGlzLmRpc2NhcmRQZW5kaW5nRXhjZWwoKSx0aGlzLmNvbnZlcnRUb0NvcnJlY3RUeXBlcyh0aGlzLmRhdGFTb3VyY2UpLHRoaXMuZWRpdFRhYmxlKCEwKX1hcHBl''@;'; put 'put ''bmRVcGxvYWRTdGF0ZShhLGQ9ITEpe3RoaXMuY2RmLmRldGVjdENoYW5nZXMoKSx0aGlzLnVwbG9hZFN0YXRlckNvbXBMaXN0LmZpcnN0JiYoZD90aGlzLnVwbG9hZFN0YXRlckNvbXBMaXN0LmZpcnN0LnJlcGxhY2VMYXN0U3RhdGUoYSk6dGhpcy51cGxvYWRTdGF0ZXJDb21wTGlzdC5maXJz''@;'; put 'put ''dC5hcHBlbmRTdGF0ZShhKSl9aXNDb2xQayhhKXtyZXR1cm4gdGhpcy5oZWFkZXJQa3MuaW5kZXhPZihhKT4tMX1pc1JlYWRvbmx5Q29sKGEpe3JldHVybiB0aGlzLmRjVmFsaWRhdG9yPy5nZXRSdWxlKGEpPy5yZWFkT25seX1pc0NvbEhlYWRlcihhKXtyZXR1cm4gdGhpcy5oZWFkZXJBcnJh''@;'; put 'put ''eS5pbmRleE9mKGEudG9VcHBlckNhc2UoKSk+LTF9cmVtb3ZlUXVlcnkoKXt0aGlzLnNhc1N0b3JlU2VydmljZS5yZW1vdmVDbGF1c2UoKX1zZW5kQ2xhdXNlKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5zdWJtaXRMb2FkaW5nPSEwO2xldCBkPVtdO2NvbnN0IGg9W107''@;'; put 'put ''aWYodHlwZW9mIGEuY2xhdXNlcz4idSIpcmV0dXJuIGEubnVsbFZhcmlhYmxlcz0hMCx2b2lkKGEuc3VibWl0TG9hZGluZz0hMSk7e2NvbnN0IGY9YS5jbGF1c2VzLnF1ZXJ5T2JqO2lmKGZbMF0uZWxlbWVudHMubGVuZ3RoPDEpcmV0dXJuKCJob21lIj09PUtuLnJvb3RQYXJhbXx8ImVkaXRv''@;'; put 'put ''ciI9PT1Lbi5yb290UGFyYW0pJiYoS24uZWRpdG9yLmZpbHRlci5jbGF1c2VzPVtdLEtuLmVkaXRvci5maWx0ZXIucXVlcnk9W10sS24uZWRpdG9yLmZpbHRlci5ncm91cExvZ2ljPSIiKSx2b2lkIGEucm91dGVyLm5hdmlnYXRlKFsiL2VkaXRvci8iK2EubGliZHNdLHtxdWVyeVBhcmFtc0hh''@;'; put 'put ''bmRsaW5nOiJwcmVzZXJ2ZSJ9KTtmb3IobGV0IHY9MDt2PGYubGVuZ3RoO3YrKyl7Y29uc3QgTT1mW3ZdLmVsZW1lbnRzO2Q9TS5maWx0ZXIoZnVuY3Rpb24oRCl7cmV0dXJuIG51bGw9PT1ELnZhcmlhYmxlfSksZC5sZW5ndGgmJmgucHVzaChNKX19aWYoaC5sZW5ndGgpcmV0dXJuIGEubnVs''@;'; put 'put ''bFZhcmlhYmxlcz0hMCx2b2lkKGEuc3VibWl0TG9hZGluZz0hMSk7dHJ5e2lmKHZvaWQgMCE9PWEuY2xhdXNlcyYmYS5saWJkcyl7Y29uc3QgZj17Z3JvdXBMb2dpYzphLmNsYXVzZXMuZ3JvdXBMb2dpYyxmaWx0ZXJHcm91cHM6W119O2EuY2xhdXNlcy5xdWVyeU9iai5mb3JFYWNoKE09Pntj''@;'; put 'put ''b25zdCBEPXtmaWx0ZXJDbGF1c2VzOltdfTtNLmVsZW1lbnRzLmZvckVhY2goWj0+e0QuZmlsdGVyQ2xhdXNlcy5wdXNoKGEuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUoWikpfSksRC5jbGF1c2VMb2dpYz1NLmNsYXVzZUxvZ2ljLGYuZmlsdGVyR3JvdXBzLnB1c2goYS5oZWxwZXJTZXJ2aWNl''@;'; put 'put ''LmRlZXBDbG9uZShEKSl9KTtjb25zdCB2PWEuc2FzU3RvcmVTZXJ2aWNlLmNyZWF0ZUZpbHRlclF1ZXJ5VGFibGUoZik7eWllbGQgYS5zYXNTdG9yZVNlcnZpY2Uuc2F2ZVF1ZXJ5KGEubGliZHMsdikudGhlbihNPT57YS5xdWVyeUZpbHRlcj17aWQ6TS5yZXN1bHRbMF0uRklMVEVSX1JLLHRh''@;'; put 'put ''YmxlOk0ucmVzdWx0WzBdLkZJTFRFUl9UQUJMRX0sYS5yb3V0ZXIubmF2aWdhdGUoWyIvIl0se3NraXBMb2NhdGlvbkNoYW5nZTohMCxxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KS50aGVuKCgpPT5hLnJvdXRlci5uYXZpZ2F0ZShbIi9lZGl0b3IvIithLnF1ZXJ5RmlsdGVyLnRh''@;'; put 'put ''YmxlKyIvIithLnF1ZXJ5RmlsdGVyLmlkXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSkpLGEuZmlsdGVyPSExfSkuY2F0Y2goTT0+e2Euc3VibWl0TG9hZGluZz0hMX0pfX1jYXRjaChmKXthLnF1ZXJ5RXJyPSEwLGEuc3VibWl0TG9hZGluZz0hMSxhLnF1ZXJ5RXJyTWVzc2Fn''@;'; put 'put ''ZT1mfX0pKCl9b3BlblFiKCl7dGhpcy5saWJkcyYmKHRoaXMuZmlsdGVyPSEwLHRoaXMuY2RmLmRldGVjdENoYW5nZXMoKSx0aGlzLnN1Ym1pdExvYWRpbmc9ITEsdGhpcy5zYXNTdG9yZVNlcnZpY2Uuc2V0UXVlcnlWYXJpYWJsZXModGhpcy5saWJkcyx0aGlzLmNvbHMpKX1lZGl0VGFibGUo''@;'; put 'put ''YSxkKXt0aGlzLnRvZ2dsZUhvdFBsdWdpbigiY29udGV4dE1lbnUiLCEwKTtjb25zdCBoPXRoaXMuaG90SW5zdGFuY2UsZj1oLmdldFBsdWdpbigibXVsdGlDb2x1bW5Tb3J0aW5nIiksdj1mLmdldFNvcnRDb25maWcoKSxNPUFycmF5LmlzQXJyYXkodik/djpbdl07c2V0VGltZW91dCgoKT0+''@;'; put 'put ''e2F8fCh0aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2UpLGQmJnRoaXMuZGF0YVNvdXJjZVVuY2hhbmdlZC5wb3AoKSksdGhpcy5ob3RUYWJsZS5yZWFkT25seT0hMSx0aGlzLmhvdFRhYmxlLmRhdGE9dGhpcy5kYXRh''@;'; put 'put ''U291cmNlLGgudXBkYXRlU2V0dGluZ3Moe3JlYWRPbmx5OnRoaXMuaG90VGFibGUucmVhZE9ubHl9LCExKSxoLnJlbmRlcigpO2Zvcihjb25zdCBEIG9mIE0pZi5zb3J0KEQpO3RoaXMucmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcygpfSwwKX1jb252ZXJ0VG9Db3JyZWN0VHlwZXMoYSl7Zm9y''@;'; put 'put ''KGNvbnN0IGQgb2YgYSlmb3IoY29uc3QgaCBpbiBkKXtjb25zdCBmPXRoaXMuY29scy5maW5kKHY9PnYuTkFNRT09PWgpO2YmJiIiIT09ZFtoXSYmIm51bSI9PT1mLlRZUEUmJiFmLkREVFlQRS5pbmNsdWRlcygiVElNRSIpJiYhZi5ERFRZUEUuaW5jbHVkZXMoIkRBVEUiKSYmKGRbaF09cGFy''@;'; put 'put ''c2VJbnQoZFtoXSkpfX1jYW5jZWxFZGl0KCl7dGhpcy50b2dnbGVIb3RQbHVnaW4oImNvbnRleHRNZW51IiwhMSksdGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZT1bXTtjb25zdCBhPXRoaXMuaG90SW5zdGFuY2UsZD1hLmdldFBsdWdpbigibXVsdGlDb2x1bW5Tb3J0aW5nIiksaD1kLmdldFNv''@;'; put 'put ''cnRDb25maWcoKSxmPUFycmF5LmlzQXJyYXkoaCk/aDpbaF07dGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkJiYodGhpcy5kYXRhU291cmNlPXRoaXMuaGVscGVyU2VydmljZS5kZWVwQ2xvbmUodGhpcy5kYXRhU291cmNlVW5jaGFuZ2VkKSksdGhpcy5ob3RUYWJsZS5kYXRhPXRoaXMuZGF0YVNv''@;'; put 'put ''dXJjZSx0aGlzLmhvdFRhYmxlLnJlYWRPbmx5PSEwLGEudXBkYXRlU2V0dGluZ3Moe3JlYWRPbmx5OnRoaXMuaG90VGFibGUucmVhZE9ubHksZGF0YTp0aGlzLmRhdGFTb3VyY2V9LCExKSxhLnZhbGlkYXRlUm93cyh0aGlzLm1vZGlmZWRSb3dzSW5kZXhlcyk7Zm9yKGNvbnN0IHYgb2YgZilk''@;'; put 'put ''LnNvcnQodik7dGhpcy5jaGVja1Jvd0xpbWl0KCl9aG90Q2xpY2tlZCgpezE9PT10aGlzLnRpbWVzQ2xpY2tlZCYmdGhpcy5ob3RUYWJsZS5yZWFkT25seSYmdGhpcy5lZGl0VGFibGUoKSwwPT09dGhpcy50aW1lc0NsaWNrZWQmJih0aGlzLnRpbWVzQ2xpY2tlZCsrLHNldFRpbWVvdXQoKCk9''@;'; put 'put ''Pnt0aGlzLnRpbWVzQ2xpY2tlZD0wfSwyMDApKX1jbGVhbkV4Y2VlZCgpe3RoaXMuZXhjZWVkQ2VsbHM9W119YXBwcm92ZXJzVG9nZ2xlKCl7dGhpcy5zaG93QXBwcm92ZXJzPSF0aGlzLnNob3dBcHByb3ZlcnN9YWRkUm93KCl7dGhpcy5hZGRpbmdOZXdSb3c9ITAsc2V0VGltZW91dCgoKT0+''@;'; put 'put ''e2NvbnN0IGE9dGhpcy5ob3RJbnN0YW5jZSxkPXRoaXMuZGF0YVNvdXJjZS5sZW5ndGg7YS5hbHRlcigiaW5zZXJ0X3Jvd19iZWxvdyIsZCwxKSxhLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZX0sITEpLGEuc2VsZWN0Q2VsbCh0aGlzLmRhdGFTb3VyY2UubGVuZ3RoLTEs''@;'; put 'put ''MCksYS5yZW5kZXIoKSx0aGlzLmRhdGFTb3VyY2VbZF0mJih0aGlzLmRhdGFTb3VyY2VbZF0ubm9MaW5rT3B0aW9uPSEwKSx0aGlzLmFkZGluZ05ld1Jvdz0hMSx0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoKX0pfWNhbmNlbFN1Ym1pdCgpe3RoaXMuZGF0YVNvdXJjZT10aGlzLmhl''@;'; put 'put ''bHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZUJlZm9yZVN1Ym1pdCksdGhpcy5kYXRhU291cmNlQmVmb3JlU3VibWl0PVtdLHRoaXMuaG90VGFibGUuZGF0YT10aGlzLmRhdGFTb3VyY2U7Y29uc3QgYT10aGlzLmhvdEluc3RhbmNlO2EudXBkYXRlU2V0dGluZ3Moe2RhdGE6''@;'; put 'put ''dGhpcy5kYXRhU291cmNlLGNvbEhlYWRlcnM6dGhpcy5oZWFkZXJDb2x1bW5zLGNvbHVtbnM6dGhpcy5jZWxsVmFsaWRhdGlvbixtb2RpZnlDb2xXaWR0aDpmdW5jdGlvbihkLGgpe3JldHVybiAwPT09aD82MDpkPjUwMD81MDA6ZH19LCExKSxhLnNlbGVjdENlbGwoMCwwKSxhLnJlbmRlcigp''@;'; put 'put ''LGEudmFsaWRhdGVSb3dzKHRoaXMubW9kaWZlZFJvd3NJbmRleGVzKSx0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoKX1nZXRSb3dzU3VibWl0dGluZ0NvdW50KCl7dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCkuZGVidWcmJih0aGlzLmxvZ2dlclNlcnZpY2UubG9nKHRo''@;'; put 'put ''aXMuZGF0YVNvdXJjZSksdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyh0aGlzLmRhdGFTb3VyY2VVbmNoYW5nZWQpKTtsZXQgYT0wLGQ9MCxoPTA7dGhpcy5tb2RpZmVkUm93c0luZGV4ZXM9W10sdGhpcy5kYXRhTW9kaWZpZWQ9W107Zm9yKGxldCBmPTA7Zjx0aGlzLmRhdGFTb3VyY2UubGVuZ3Ro''@;'; put 'put ''O2YrKyl7Y29uc3Qgdj10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZVtmXSk7aWYoIlllcyI9PT12Ll9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXyl0aGlzLmRhdGFNb2RpZmllZC5wdXNoKHYpLGQrKztlbHNle2NvbnN0IE09dGhpcy5kYXRhU291cmNl''@;'; put 'put ''VW5jaGFuZ2VkLmZpbmQoRD0+e2Zvcihjb25zdCBaIG9mIHRoaXMuaGVhZGVyUGtzKWlmKERbWl0hPT12W1pdKXJldHVybiExO3JldHVybiEwfSk7TT9KU09OLnN0cmluZ2lmeSh2KSE9PUpTT04uc3RyaW5naWZ5KE0pJiYodGhpcy5kYXRhTW9kaWZpZWQucHVzaCh2KSx0aGlzLm1vZGlmZWRS''@;'; put 'put ''b3dzSW5kZXhlcy5wdXNoKGYpLGErKyk6KHRoaXMuZGF0YU1vZGlmaWVkLnB1c2godiksdGhpcy5tb2RpZmVkUm93c0luZGV4ZXMucHVzaChmKSxoKyspfX10aGlzLnJvd3NDaGFuZ2VkPXtyb3dzVXBkYXRlZDphLHJvd3NEZWxldGVkOmQscm93c0FkZGVkOmh9fXZhbGlkYXRlUHJpbWFyeUtl''@;'; put 'put ''eXMoKXtjb25zdCBhPXRoaXMuaG90SW5zdGFuY2UsZD1hLmdldERhdGEoKTt0aGlzLnBrRmllbGRzPVtdO2ZvcihsZXQgTT0wO008ZC5sZW5ndGg7TSsrKXtsZXQgRD0iIjtmb3IobGV0IFo9MTtaPHRoaXMucmVhZE9ubHlGaWVsZHMrMTtaKyspRD1EKyJ8IitkW01dW1pdO3RoaXMucGtGaWVs''@;'; put 'put ''ZHMucHVzaChEKX1jb25zdCBoPVtdLGY9dGhpcy5kYXRhU291cmNlLmxlbmd0aDtmb3IobGV0IE09MDtNPHRoaXMucGtGaWVsZHMubGVuZ3RoO00rKylmb3IobGV0IEQ9MDtEPHRoaXMucGtGaWVsZHMubGVuZ3RoO0QrKyl0aGlzLnBrRmllbGRzW01dPT09dGhpcy5wa0ZpZWxkc1tEXSYmRCE9''@;'; put 'put ''PU0mJmgucHVzaChEKTtpZih0aGlzLnBrRmllbGRzLmxlbmd0aD5mKWZvcihsZXQgTT1mO008dGhpcy5wa0ZpZWxkcy5sZW5ndGg7TSsrKWZvcihsZXQgRD1mO0Q8dGhpcy5wa0ZpZWxkcy5sZW5ndGg7RCsrKU08RCYmdGhpcy5wa0ZpZWxkc1tNXT09PXRoaXMucGtGaWVsZHNbRF0mJmgucHVz''@;'; put 'put ''aChEKTtsZXQgdjtmb3IobGV0IE09MDtNPGgubGVuZ3RoO00rKylmb3IobGV0IEQ9MTtEPHRoaXMucmVhZE9ubHlGaWVsZHMrMTtEKyspdj1hLmdldENlbGxNZXRhKGhbTV0sRCksdi52YWxpZD0hMSx2LmR1cEtleT0hMCxhLnJlbmRlcigpO3RoaXMuZHVwbGljYXRlUGtJbmRleGVzPVsuLi5u''@;'; put 'put ''ZXcgU2V0KGguc29ydCgpKV19cmVTZXRDZWxsVmFsaWRhdGlvblZhbHVlcyhhPSExLGQpe2NvbnN0IGg9dGhpcy5ob3RJbnN0YW5jZTtmb3IoY29uc3QgZiBvZiB0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlKXtjb25zdCB2PWYudmFsdWVzLm1hcChNPT5NW3RoaXMuY2VsbFZhbGlkYXRpb25G''@;'; put 'put ''aWVsZHMuUkFXX1ZBTFVFXSk7aC5iYXRjaCgoKT0+e2NvbnN0IE09aC5nZXRDZWxsTWV0YShmLnJvdyxmLmNvbCksRD10aGlzLmRjVmFsaWRhdG9yPy5nZXRSdWxlKE0uZGF0YXx8IiIpO2xldCBaO0QmJihaPXRoaXMuZGNWYWxpZGF0b3I/LmdldERxRHJvcGRvd25Tb3VyY2UoRCkpLFp8fCha''@;'; put 'put ''PVtdKTtjb25zdCBuZT1bLi4ubmV3IFNldChbLi4uWiwuLi52XSldO3RoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUoZi5jb2wse3NvdXJjZTpuZX0pLGguc2V0Q2VsbE1ldGEoZi5yb3csZi5jb2wsInNvdXJjZSIsbmUpLGYudmFsdWVzLmxlbmd0aD4wJiYoaC5z''@;'; put 'put ''ZXRDZWxsTWV0YShmLnJvdyxmLmNvbCwicmVuZGVyZXIiLCJhdXRvY29tcGxldGUiKSxoLnNldENlbGxNZXRhKGYucm93LGYuY29sLCJlZGl0b3IiLCJhdXRvY29tcGxldGUuY3VzdG9tIiksaC5zZXRDZWxsTWV0YShmLnJvdyxmLmNvbCwic3RyaWN0IixmLnN0cmljdCksaC5zZXRDZWxsTWV0''@;'; put 'put ''YShmLnJvdyxmLmNvbCwiZmlsdGVyIiwhMSksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZShmLmNvbCx7cmVuZGVyZXI6ImF1dG9jb21wbGV0ZSIsZWRpdG9yOiJhdXRvY29tcGxldGUuY3VzdG9tIixzdHJpY3Q6Zi5zdHJpY3QsZmlsdGVyOiExfSkpLHRoaXMu''@;'; put 'put ''cmVTZXRFeHRlbmRlZENlbGxWYWxpZGF0aW9uVmFsdWVzKGYsdm9pZCAwLGEsZCksaC5yZW5kZXIoKX0pfX1yZVNldEV4dGVuZGVkQ2VsbFZhbGlkYXRpb25WYWx1ZXMoYSxkLGg9ITEsZil7aWYoYSl7ZHx8KGQ9YS5yb3cpO2NvbnN0IE09dGhpcy5nZXRFeHRlbmRlZFZhbHVlc0J5Q2VsbFZh''@;'; put 'put ''bHVlKGEpO3RoaXMuc2V0RXh0ZW5kZWRWYWx1ZXNUb0NlbGxzKGEsZCxNLGgsZil9ZWxzZSBmb3IoY29uc3QgTSBvZiB0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlKXtjb25zdCBEPXRoaXMuZ2V0RXh0ZW5kZWRWYWx1ZXNCeUNlbGxWYWx1ZShNKTt0aGlzLnNldEV4dGVuZGVkVmFsdWVzVG9D''@;'; put 'put ''ZWxscyhNLE0ucm93LEQsaCxmKX19c2V0RXh0ZW5kZWRWYWx1ZXNUb0NlbGxzKGEsZCxoLGY9ITEsdil7Y29uc3QgTT10aGlzLmhvdEluc3RhbmNlLEQ9W107Zm9yKGNvbnN0IFogb2YgaClELmluZGV4T2YoWi5FWFRSQV9DT0xfTkFNRSk8MCYmRC5wdXNoKFouRVhUUkFfQ09MX05BTUUpO2Zv''@;'; put 'put ''cihjb25zdCBaIG9mIEQpe2NvbnN0IG5lPWguZmlsdGVyKG10PT5tdC5FWFRSQV9DT0xfTkFNRT09PVopO2xldCBjZT1uZS5tYXAobXQ9PiJDIj09PW10LkRJU1BMQVlfVFlQRT9tdC5SQVdfVkFMVUVfQ0hBUjptdC5SQVdfVkFMVUVfTlVNKTtjb25zdCBiZT1NLnByb3BUb0NvbChaKTt0aGlz''@;'; put 'put ''LmRpc2FibGVkQmFzaWNEeW5hbWljQ2VsbFZhbGlkYXRpb25NYXAuZmluZChtdD0+bXQucm93PT09ZCYmbXQuY29sPT09YmUpfHx0aGlzLmRpc2FibGVkQmFzaWNEeW5hbWljQ2VsbFZhbGlkYXRpb25NYXAucHVzaCh7cm93OmQsY29sOmJlLGFjdGl2ZTohMX0pLE0uc2V0Q2VsbE1ldGEoZCxi''@;'; put 'put ''ZSwicmVuZGVyZXIiLCJhdXRvY29tcGxldGUiKSxNLnNldENlbGxNZXRhKGQsYmUsImVkaXRvciIsImF1dG9jb21wbGV0ZS5jdXN0b20iKSxNLnNldENlbGxNZXRhKGQsYmUsInN0cmljdCIsYS5zdHJpY3QpLE0uc2V0Q2VsbE1ldGEoZCxiZSwiZmlsdGVyIiwhMSksdGhpcy5jdXJyZW50RWRp''@;'; put 'put ''dFJlY29yZFZhbGlkYXRvcj8udXBkYXRlUnVsZShiZSx7cmVuZGVyZXI6ImF1dG9jb21wbGV0ZSIsZWRpdG9yOiJhdXRvY29tcGxldGUuY3VzdG9tIixzdHJpY3Q6YS5zdHJpY3QsZmlsdGVyOiExfSk7Y29uc3QgQmU9TS5nZXRDZWxsTWV0YShkLGJlKSxxZT10aGlzLmRjVmFsaWRhdG9yPy5n''@;'; put 'put ''ZXRSdWxlKEJlLmRhdGF8fCIiKTtsZXQgbnQ7cWUmJihudD10aGlzLmRjVmFsaWRhdG9yPy5nZXREcURyb3Bkb3duU291cmNlKHFlKSksbnR8fChudD1bXSksIm51bWVyaWMiPT09cWU/LnR5cGU/KG50PXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMobnQsIm51bWJlciIp''@;'; put 'put ''LGNlPXRoaXMuaGVscGVyU2VydmljZS5jb252ZXJ0QXJyYXlWYWx1ZXMoY2UsIm51bWJlciIpKToobnQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyhudCwic3RyaW5nIiksY2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyhjZSwic3RyaW5nIikp''@;'; put 'put ''O2NvbnN0IGx0PVsuLi5uZXcgU2V0KFsuLi5udCwuLi5jZV0pXTtpZihNLnNldENlbGxNZXRhKGQsYmUsInNvdXJjZSIsbHQpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUoYmUse3NvdXJjZTpsdH0pLGYpe2lmKHYmJnYhPT1kKXJldHVybjtjb25zdCBtdD1u''@;'; put 'put ''ZS5maW5kKEp0PT4xPT09SnQuRk9SQ0VfRkxBRyk7bXQmJnNldFRpbWVvdXQoKCk9PntNLnNldERhdGFBdENlbGwoZCxiZSwiQyI9PT1tdC5ESVNQTEFZX1RZUEU/bXQuUkFXX1ZBTFVFX0NIQVI6bXQuUkFXX1ZBTFVFX05VTSwiZm9yY2VfY2VsbF92YWxpZGF0aW9uX3ZhbHVlIiksdGhpcy5j''@;'; put 'put ''dXJyZW50RWRpdFJlY29yZEluZGV4PT09ZCYmKHRoaXMuZGF0YVNvdXJjZVt0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXhdW1pdPSJDIj09PW10LkRJU1BMQVlfVFlQRT9tdC5SQVdfVkFMVUVfQ0hBUjptdC5SQVdfVkFMVUVfTlVNKX0pfX19Z2V0RXh0ZW5kZWRWYWx1ZXNCeUNlbGxWYWx1''@;'; put 'put ''ZShhLGQpe2NvbnN0IGY9dGhpcy5ob3RJbnN0YW5jZS5nZXREYXRhQXRDZWxsKGR8fGEucm93LGEuY29sKSx2PShhLnZhbHVlcy5maW5kKG5lPT5uZVt0aGlzLmNlbGxWYWxpZGF0aW9uRmllbGRzLlJBV19WQUxVRV09PT1mKXx8W10pW3RoaXMuY2VsbFZhbGlkYXRpb25GaWVsZHMuRElTUExB''@;'; put 'put ''WV9JTkRFWF0sTT1hLmV4dGVuZGVkX3ZhbHVlcz8uZmlsdGVyKG5lPT5uZVswXT09PXYpLEQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmV4dGVuZGVkQ2VsbFZhbGlkYXRpb25GaWVsZHMpLFo9W107Zm9yKGNvbnN0IG5lIG9mIE18fFtdKXtjb25zdCBjZT17fTtmb3IoY29u''@;'; put 'put ''c3QgYmUgb2YgT2JqZWN0LmtleXMoRCkpY2VbYmVdPW5lW0RbYmVdXTtaLnB1c2goY2UpfXJldHVybiBafWNoZWNrU2F2ZSgpe2lmKHRoaXMuZ2V0Um93c1N1Ym1pdHRpbmdDb3VudCgpLDA9PT10aGlzLnJvd3NDaGFuZ2VkLnJvd3NBZGRlZCYmMD09PXRoaXMucm93c0NoYW5nZWQucm93c1Vw''@;'; put 'put ''ZGF0ZWQmJjA9PT10aGlzLnJvd3NDaGFuZ2VkLnJvd3NEZWxldGVkKXJldHVybiB0aGlzLmJhZEVkaXRUaXRsZT0iTm8gY2hhbmdlcyB0byBzdWJtaXQiLHRoaXMuYmFkRWRpdENhdXNlPSJQbGVhc2UgbW9kaWZ5IHNvbWUgdmFsdWVzIGFuZCB0cnkgYWdhaW4uIix2b2lkKHRoaXMuYmFkRWRp''@;'; put 'put ''dD0hMCk7Y29uc3QgYT10aGlzLmhvdEluc3RhbmNlO3RoaXMuZGF0YVNvdXJjZUJlZm9yZVN1Ym1pdD10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZSk7Zm9yKGxldCBoPTA7aDx0aGlzLmRhdGFTb3VyY2UubGVuZ3RoO2grKylkZWxldGUgdGhpcy5kYXRhU291''@;'; put 'put ''cmNlW2hdLm5vTGlua09wdGlvbjthLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZSxjb2xIZWFkZXJzOnRoaXMuaGVhZGVyQ29sdW1ucyxjb2x1bW5zOnRoaXMuY2VsbFZhbGlkYXRpb24sbW9kaWZ5Q29sV2lkdGg6ZnVuY3Rpb24oaCxmKXtyZXR1cm4gaD41MDA/NTAwOmh9''@;'; put 'put ''fSwhMSksdGhpcy5yZVNldENlbGxWYWxpZGF0aW9uVmFsdWVzKCksYy5jbnQ9MCxjLm5vblBrQ250PTA7Y29uc3QgZD1hLmdldERhdGEoKTtpZihkLmxlbmd0aD4xJiZhLmlzRW1wdHlSb3coZC5sZW5ndGgtMSkmJmEuYWx0ZXIoInJlbW92ZV9yb3ciLGQubGVuZ3RoLTEpLHRoaXMudmFsaWRh''@;'; put 'put ''dGVQcmltYXJ5S2V5cygpLDAhPT10aGlzLmR1cGxpY2F0ZVBrSW5kZXhlcy5sZW5ndGgpcmV0dXJuIHRoaXMucGtEdXBzPSEwLHRoaXMuc3VibWl0PSExLHZvaWQgdGhpcy5jYW5jZWxTdWJtaXQoKTt0aGlzLnBrRHVwcz0hMSxhLnZhbGlkYXRlUm93cyh0aGlzLm1vZGlmZWRSb3dzSW5kZXhl''@;'; put 'put ''cywoKT0+e3RoaXMuY2hlY2tJbnZhbGlkKCk/dGhpcy5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiVmFsaWRhdGlvbiBlcnJvciIsIkludmFsaWQgVmFsdWVzIGFyZSBQcmVzZW50Iik6KHRoaXMuc3VibWl0PSEwLHRoaXMudmFsaWRhdGlvbkRvbmU9MSxzZXRUaW1lb3V0KCgpPT57Y29u''@;'; put 'put ''c3QgaD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZm9ybUZpZWxkc184Iik7aCYmaC5mb2N1cygpfSwyMDApKX0pfXNhdmVUYWJsZShhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtpZihkLmhvdEluc3RhbmNlLmdldERhdGEoKSxhPShhPWEuZmlsdGVyKHY9PiEhZC5kYXRh''@;'; put 'put ''TW9kaWZpZWQuZmluZChEPT57Zm9yKGNvbnN0IFogb2YgZC5oZWFkZXJQa3MpaWYoRFtaXSE9PXZbWl0pcmV0dXJuITE7cmV0dXJuITB9KSkpLm1hcCh2PT57Y29uc3QgTT12Ll9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXztyZXR1cm4gZGVsZXRlIHYuX19fX19ERUxFVEVfX1RISVNf''@;'; put 'put ''X1JFQ09SRF9fX19fLHYuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fPU0sT2JqZWN0LmtleXModikubWFwKEQ9PnsibnVtZXJpYyI9PT1kLmRjVmFsaWRhdG9yPy5nZXRSdWxlKEQpPy50eXBlJiYiLiI9PT12W0RdJiYodltEXT1udWxsKX0pLHZ9KSxkLmxvZ2dlclNlcnZpY2UubG9n''@;'; put 'put ''KCJEYXRhIHN1Ym1pdHRlZCIsYSksZC5jaGVja0ludmFsaWQoKSlyZXR1cm4gZC5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiVmFsaWRhdGlvbiBlcnJvciIsIkludmFsaWQgVmFsdWVzIGFyZSBQcmVzZW50IiksZC5jYW5jZWxTdWJtaXQoKSx2b2lkKGQuc3VibWl0PSExKTtpZihkLnZh''@;'; put 'put ''bGlkYXRpb25Eb25lPTAsZC5zYXZlTG9hZGluZz0hMCxjLmNudDwxJiYwPT09ZC5kdXBsaWNhdGVQa0luZGV4ZXMubGVuZ3RoJiZjLm5vblBrQ250PDEpe2Quc2F2ZUxvYWRpbmc9ITAsZC5kaXNhYmxlU3VibWl0PSExLGQuc3VibWl0PSEwO2NvbnN0IHY9e0FDVElPTjoiTE9BRCJ9O2lmKGQu''@;'; put 'put ''bWVzc2FnZT1kLm1lc3NhZ2UucmVwbGFjZSgvXG4vZywiLiAiKSx2Lk1FU1NBR0U9ZC5tZXNzYWdlLHYuTElCRFM9ZC5saWJkcyxkLmNvbHMpe2NvbnN0IE09YS5zbGljZSgwLGQubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0KTtpZih5aWVsZCBkLnNhc1N0b3JlU2Vydmlj''@;'; put 'put ''ZS51cGRhdGVUYWJsZSh2LE0sIlNBU0NvbnRyb2xUYWJsZSIsImVkaXRvcnMvc3RhZ2VkYXRhIixkLiRkYXRhRm9ybWF0cykudGhlbihaPT57aWYodHlwZW9mIFouYWRhcHRlclJlc3BvbnNlLnNhc3BhcmFtczwidSIpcmV0dXJuIGQucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK1ou''@;'; put 'put ''YWRhcHRlclJlc3BvbnNlLnNhc3BhcmFtc1swXS5EU0lEKSwhMDtsZXQgbmU9IlN1Ym1pdCByZXF1ZXN0IGZhaWxlZCI7WiYmKG5lKz1gXG4keyJzdHJpbmciPT10eXBlb2YgWj9aOkpTT04uc3RyaW5naWZ5KFopfWApLGQuZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKCJlZGl0b3JzL3N0''@;'; put 'put ''YWdlZGF0YSIsbmUsbnVsbCwiU3VibWl0IGVycm9yIil9KS5jYXRjaChaPT57Y29uc29sZS5sb2coImVyciIsWiksYy5jbnQ9MCxjLm5vblBrQ250PTAsZC5kaXNhYmxlU3VibWl0PSEwLGQuc3VibWl0PSExO2NvbnN0IG5lPSJzdHJpbmciPT10eXBlb2YgWi5hZGFwdGVyUmVzcG5zZT9aLmFk''@;'; put 'put ''YXB0ZXJSZXNwbnNlOkpTT04uc3RyaW5naWZ5KFouYWRhcHRlclJlc3Buc2UpO3JldHVybiBkLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbCgiZWRpdG9ycy9zdGFnZWRhdGEiLGBTdWJtaXQgcmVxdWVzdCBmYWlsZWRcbiR7bmV9YCxudWxsLCJTdWJtaXQgZXJyb3IiKSwhMX0pKXJldHVy''@;'; put 'put ''bn19Yy5jbnQ+PTE/KGQucGtOdWxsPSEwLGQuc3VibWl0PSEwKTpkLnN1Ym1pdD0hMSxjLm5vblBrQ250Pj0xPyhkLm5vUGtOdWxsPSEwLGQuc3VibWl0PSEwKTpkLnN1Ym1pdD0hMSxkLmNhbmNlbFN1Ym1pdCgpLGMuY250PTAsYy5ub25Qa0NudD0wLGQuZGlzYWJsZVN1Ym1pdD0hMH0pKCl9''@;'; put 'put ''dmFsaWRhdG9yUnVsZVNvdXJjZShhKXtyZXR1cm4gdGhpcy5kY1ZhbGlkYXRvcj8uZ2V0UnVsZShhKX1jaGVja0ludmFsaWQoKXtyZXR1cm4gdGhpcy5ob3RJbnN0YW5jZUNvbXBMaXN0LmZpcnN0LmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIi5odEludmFsaWQi''@;'; put 'put ''KS5sZW5ndGg+MH1nb1RvRWRpdG9yKCl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiLyIpfWNsb3NlUmVjb3JkRWRpdChhKXt0aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg9LTEsdGhpcy5jdXJyZW50RWRpdFJlY29yZD12b2lkIDAsdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRv''@;'; put 'put ''cj12b2lkIDAsIkFERCI9PT10aGlzLnJlY29yZEFjdGlvbiYmIWEmJih0aGlzLmRhdGFTb3VyY2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLnByZXZEYXRhU291cmNlKSx0aGlzLmhvdEluc3RhbmNlLnVwZGF0ZVNldHRpbmdzKHtkYXRhOnRoaXMuZGF0YVNvdXJjZX0sITEp''@;'; put 'put ''KX1jb25maXJtUmVjb3JkRWRpdChhPSEwKXtjb25zdCBkPXRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleDthJiYodGhpcy5jdXJyZW50RWRpdFJlY29yZEluZGV4PS0xKSx0aGlzLmNvbHVtbkhlYWRlci5tYXAoZj0+e2NvbnN0IHY9dGhpcy5jdXJyZW50RWRpdFJlY29yZFtmXSxNPSJudW0i''@;'; put 'put ''PT09dGhpcy4kZGF0YUZvcm1hdHM/LnZhcnNbZl0/LnR5cGUsRD0oMCwkZy5pc1NwZWNpYWxNaXNzaW5nKSh2KTtNJiYhaXNOYU4odikmJiFEJiYodGhpcy5jdXJyZW50RWRpdFJlY29yZFtmXT0xKnYpfSksdGhpcy5kYXRhU291cmNlW2RdPXRoaXMuY3VycmVudEVkaXRSZWNvcmQsdGhpcy5o''@;'; put 'put ''b3RUYWJsZS5kYXRhW2RdPXRoaXMuY3VycmVudEVkaXRSZWNvcmQsdGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmRhdGFTb3VyY2V9LCExKSxhJiYodGhpcy5jdXJyZW50RWRpdFJlY29yZD12b2lkIDApfW9uTmV4dFJlY29yZCgpe3RoaXMuY29uZmlybVJlY29y''@;'; put 'put ''ZEVkaXQoITEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD10aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg+PXRoaXMuZGF0YVNvdXJjZS5sZW5ndGgtMT8wOnRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleCsxLHRoaXMuZWRpdFJlY29yZChudWxsLHRoaXMuY3VycmVudEVkaXRSZWNv''@;'; put 'put ''cmRJbmRleCl9b25QcmV2aW91c1JlY29yZCgpe3RoaXMuY29uZmlybVJlY29yZEVkaXQoITEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleD10aGlzLmN1cnJlbnRFZGl0UmVjb3JkSW5kZXg8PTA/dGhpcy5kYXRhU291cmNlLmxlbmd0aC0xOnRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRl''@;'; put 'put ''eC0xLHRoaXMuZWRpdFJlY29yZChudWxsLHRoaXMuY3VycmVudEVkaXRSZWNvcmRJbmRleCl9YWRkUmVjb3JkQnV0dG9uQ2xpY2soKXt0aGlzLnJlc3RyaWN0aW9ucy5yZXN0cmljdEFkZFJlY29yZD90aGlzLmV2ZW50U2VydmljZS5zaG93RGVtb0xpbWl0TW9kYWwoIkFkZCBSZWNvcmQiKTp0''@;'; put 'put ''aGlzLmFkZEVkaXROZXdSZWNvcmQoKX1hZGRFZGl0TmV3UmVjb3JkKCl7dGhpcy5hZGRSZWNvcmQoKSxzZXRUaW1lb3V0KCgpPT57dGhpcy5lZGl0UmVjb3JkKG51bGwsdGhpcy5kYXRhU291cmNlLmxlbmd0aC0xLCEwKX0sMWUzKX1hZGRSZWNvcmQoKXt0aGlzLmFkZFJvdygpfWVkaXRSZWNv''@;'; put 'put ''cmQoYSxkLGgpe2lmKHRoaXMucmVzdHJpY3Rpb25zLnJlc3RyaWN0RWRpdFJlY29yZCl0aGlzLmV2ZW50U2VydmljZS5zaG93RGVtb0xpbWl0TW9kYWwoIkVkaXQgUmVjb3JkIik7ZWxzZSBpZighKHZvaWQgMD09PWR8fGQ8MHx8dGhpcy5yZXN0cmljdGlvbnMucmVzdHJpY3RFZGl0UmVjb3Jk''@;'; put 'put ''KSl7aWYodGhpcy5yZWNvcmRBY3Rpb249aD8iQUREIjoiRURJVCIsdGhpcy5ob3RUYWJsZS5yZWFkT25seSYmdGhpcy5lZGl0VGFibGUoITEsaCksdGhpcy5jdXJyZW50RWRpdFJlY29yZFZhbGlkYXRvcj10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGNWYWxpZGF0b3IpLGgp''@;'; put 'put ''dGhpcy5wcmV2RGF0YVNvdXJjZT10aGlzLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKHRoaXMuZGF0YVNvdXJjZSksdGhpcy5wcmV2RGF0YVNvdXJjZS5wb3AoKTtlbHNle2NvbnN0IGY9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmhvdEluc3RhbmNlLmdldENlbGxNZXRhQXRS''@;'; put 'put ''b3coZCkpO2Zvcihjb25zdCB2IG9mIGYpaWYodil7Y29uc3QgTT12LnByb3A/LnRvU3RyaW5nKCk7ZGVsZXRlIHYucHJvcCxkZWxldGUgdi5kYXRhLHRoaXMuY3VycmVudEVkaXRSZWNvcmRWYWxpZGF0b3I/LnVwZGF0ZVJ1bGUodi5jb2wsey4uLnYsZGF0YTpNfSl9fXRoaXMuY3VycmVudEVk''@;'; put 'put ''aXRSZWNvcmRJbmRleD1kLHRoaXMuY3VycmVudEVkaXRSZWNvcmQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0aGlzLmRhdGFTb3VyY2VbZF0pfX10b2dnbGVIb3RQbHVnaW4oYSxkKXtjb25zdCBoPXRoaXMuaG90SW5zdGFuY2U7aC5iYXRjaCgoKT0+e2NvbnN0IGY9aC5nZXRQbHVn''@;'; put 'put ''aW4oYSk7Zj8oc2V0VGltZW91dCgoKT0+e2Q/Zi5lbmFibGVQbHVnaW4oKTpmLmRpc2FibGVQbHVnaW4oKX0sMTAwKSxoLnJlbmRlcigpKTpjb25zb2xlLndhcm4oIlRvZ2dsZSBIb3QgUGx1Z2luIGZhaWxlZCAtIFBsdWdpbiBuYW1lZDogIithKyIgLSBjb3VsZCBub3QgYmUgZm91bmQuIil9''@;'; put 'put ''KX1keW5hbWljQ2VsbFZhbGlkYXRpb25EaXNhYmxlZChhLGQpe3JldHVybiEhdGhpcy5kaXNhYmxlZEJhc2ljRHluYW1pY0NlbGxWYWxpZGF0aW9uTWFwLmZpbmQoZj0+Zi5yb3c9PT1hJiZmLmNvbD09PWQmJiFmLmFjdGl2ZSl9ZHluYW1pY0NlbGxWYWxpZGF0aW9uKGEsZCl7aWYodGhpcy5k''@;'; put 'put ''eW5hbWljQ2VsbFZhbGlkYXRpb25EaXNhYmxlZChhLGQpKXJldHVybjtjb25zdCBoPXRoaXMuaG90SW5zdGFuY2U7aWYoaC5nZXRDZWxsTWV0YShhLGQpLnJlYWRPbmx5KXJldHVybjtjb25zdCB2PWguZ2V0RGF0YUF0Q2VsbChhLGQpLE09dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZSh0''@;'; put 'put ''aGlzLmRhdGFTb3VyY2VbYV0pLEQ9T2JqZWN0LmtleXMoTSlbZF0sWj10aGlzLmhlbHBlclNlcnZpY2UuZGVsZXRlS2V5c0FuZEhhc2goTSxbRCwibm9MaW5rT3B0aW9uIl0sITEpLG5lPXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UuZmluZEluZGV4KGNlPT5jZS5oYXNoPT09Wik7aWYobmU+''@;'; put 'put ''LTEpe2xldCBjZT10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlW25lXS52YWx1ZXMubWFwKEJlPT5CZVt0aGlzLmNlbGxWYWxpZGF0aW9uRmllbGRzLlJBV19WQUxVRV0pO2NvbnN0IGJlPShoLmdldENlbGxNZXRhKGEsZCkuc291cmNlfHxbXSkubGVuZ3RoPDEsRWU9IiAiIT09djtoLmJhdGNo''@;'; put 'put ''KCgpPT57Y29uc3QgQmU9aC5nZXRDZWxsTWV0YShhLGQpLHFlPXRoaXMuZGNWYWxpZGF0b3I/LmdldFJ1bGUoQmUuZGF0YXx8IiIpO2xldCBudDtxZSYmKG50PXRoaXMuZGNWYWxpZGF0b3I/LmdldERxRHJvcGRvd25Tb3VyY2UocWUpKSxudHx8KG50PVtdKSwibnVtZXJpYyI9PT1xZT8udHlw''@;'; put 'put ''ZT8obnQ9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyhudCwibnVtYmVyIiksY2U9dGhpcy5oZWxwZXJTZXJ2aWNlLmNvbnZlcnRBcnJheVZhbHVlcyhjZSwibnVtYmVyIikpOihudD10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKG50LCJzdHJpbmci''@;'; put 'put ''KSxjZT10aGlzLmhlbHBlclNlcnZpY2UuY29udmVydEFycmF5VmFsdWVzKGNlLCJzdHJpbmciKSk7Y29uc3QgbHQ9Wy4uLm5ldyBTZXQoWy4uLm50LC4uLmNlXSldO2lmKGguc2V0Q2VsbE1ldGEoYSxkLCJzb3VyY2UiLGx0KSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRh''@;'; put 'put ''dGVSdWxlKGQse3NvdXJjZTpsdH0pLHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2VbbmVdLnZhbHVlcy5sZW5ndGg+MCl7Y29uc3QgbXQ9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZVtuZV0uc3RyaWN0O2guc2V0Q2VsbE1ldGEoYSxkLCJyZW5kZXJlciIsImF1dG9jb21wbGV0ZSIpLGguc2V0''@;'; put 'put ''Q2VsbE1ldGEoYSxkLCJlZGl0b3IiLCJhdXRvY29tcGxldGUuY3VzdG9tIiksaC5zZXRDZWxsTWV0YShhLGQsInN0cmljdCIsbXQpLGguc2V0Q2VsbE1ldGEoYSxkLCJmaWx0ZXIiLCExKSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkVmFsaWRhdG9yPy51cGRhdGVSdWxlKGQse3JlbmRlcmVyOiJh''@;'; put 'put ''dXRvY29tcGxldGUiLGVkaXRvcjoiYXV0b2NvbXBsZXRlLmN1c3RvbSIsc3RyaWN0Om10LGZpbHRlcjohMX0pfXRoaXMucmVTZXRFeHRlbmRlZENlbGxWYWxpZGF0aW9uVmFsdWVzKHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2VbbmVdLGEsYmUmJkVlKSxoLnJlbmRlcigpfSl9aWYobmU8MCl7''@;'; put 'put ''Y29uc3QgY2U9e1NBU0NvbnRyb2xUYWJsZTpbe2xpYmRzOnRoaXMubGliZHMsdmFyaWFibGVfbm06RH1dLHNvdXJjZV9yb3c6W01dfSxiZT10aGlzLmRjVmFsaWRhdG9yPy5nZXREcURldGFpbHMoRCkuZmluZChFZT0+IlNPRlRTRUxFQ1RfSE9PSyI9PT1FZS5SVUxFX1RZUEV8fCJIQVJEU0VM''@;'; put 'put ''RUNUX0hPT0siPT09RWUuUlVMRV9UWVBFKTtiZSYmKHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UucHVzaCh7cm93OmEsY29sOmQsc3RyaWN0OiJIQVJEU0VMRUNUX0hPT0siPT09YmUuUlVMRV9UWVBFLHZhbHVlczpbXSxoYXNoOlosY291bnQ6dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5s''@;'; put 'put ''ZW5ndGgrMX0pLGguc2V0Q2VsbE1ldGEoYSxkLCJyZW5kZXJlciIsdDV0KSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3MucHVzaChkKSxoLnJlbmRlcigpLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJlZGl0b3JzL2dldGR5bmFtaWNjb2x2YWxzIixjZSx2b2lkIDAse3N1cHByZXNz''@;'; put 'put ''U3VjY2Vzc0Fib3J0TW9kYWw6ITAsc3VwcHJlc3NFcnJvckFib3J0TW9kYWw6ITB9KS50aGVuKEVlPT57aWYoRWUuYWRhcHRlclJlc3BvbnNlLmR5bmFtaWNfdmFsdWVzLm1hcChxZT0+cWVbdGhpcy5jZWxsVmFsaWRhdGlvbkZpZWxkcy5SQVdfVkFMVUVdKS5sZW5ndGg+MCl7Y29uc3QgcWU9''@;'; put 'put ''dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5maW5kSW5kZXgobnQ9Pm50Lmhhc2g9PT1aKTtxZT4tMSYmKHRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2VbcWVdPXsuLi50aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlW3FlXSxyb3c6YSxjb2w6ZCx2YWx1ZXM6RWUuYWRhcHRlclJlc3BvbnNlLmR5''@;'; put 'put ''bmFtaWNfdmFsdWVzLGV4dGVuZGVkX3ZhbHVlczpFZS5hZGFwdGVyUmVzcG9uc2UuZHluYW1pY19leHRlbmRlZF92YWx1ZXN9KSxoLnNldENlbGxNZXRhKGEsZCwicmVuZGVyZXIiLExlZSksdGhpcy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzLnNwbGljZSh0aGlzLmN1cnJlbnRFZGl0UmVj''@;'; put 'put ''b3JkTG9hZGluZ3MuaW5kZXhPZihkKSwxKSxoLmRlc2VsZWN0Q2VsbCgpLGgucmVuZGVyKCksaC5iYXRjaCgoKT0+e3NldFRpbWVvdXQoKCk9Pnt0aGlzLnJlU2V0Q2VsbFZhbGlkYXRpb25WYWx1ZXMoITAsYSksaC5yZW5kZXIoKSxoLnZhbGlkYXRlUm93cyhbYV0pfSwxMDApfSl9aWYoaC5z''@;'; put 'put ''ZXRDZWxsTWV0YShhLGQsInJlbmRlcmVyIixMZWUpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5zcGxpY2UodGhpcy5jdXJyZW50RWRpdFJlY29yZExvYWRpbmdzLmluZGV4T2YoZCksMSksaC5kZXNlbGVjdENlbGwoKSxoLnJlbmRlcigpLHRoaXMuY2VsbFZhbGlkYXRpb25Tb3Vy''@;'; put 'put ''Y2UubGVuZ3RoPnRoaXMudmFsaWRhdGlvblRhYmxlTGltaXQpe2NvbnN0IHFlPXRoaXMuY2VsbFZhbGlkYXRpb25Tb3VyY2UucmVkdWNlKChsdCxtdCk9Pmx0LmNvdW50PG10LmNvdW50P2x0Om10KSxudD10aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLmluZGV4T2YocWUpO3RoaXMuY2VsbFZh''@;'; put 'put ''bGlkYXRpb25Tb3VyY2Uuc3BsaWNlKG50LDEpfX0pLmNhdGNoKEVlPT57Y29uc3QgQmU9dGhpcy5jZWxsVmFsaWRhdGlvblNvdXJjZS5maW5kSW5kZXgocWU9PnFlLmhhc2g9PT1aKTt0aGlzLmNlbGxWYWxpZGF0aW9uU291cmNlLnNwbGljZShCZSwxKSxoLmJhdGNoKCgpPT57aC5zZXRDZWxs''@;'; put 'put ''TWV0YShhLGQsInJlbmRlcmVyIixlNXQpLGgucmVuZGVyKCl9KSx0aGlzLmN1cnJlbnRFZGl0UmVjb3JkTG9hZGluZ3Muc3BsaWNlKHRoaXMuY3VycmVudEVkaXRSZWNvcmRMb2FkaW5ncy5pbmRleE9mKGQpLDEpLHRoaXMuY3VycmVudEVkaXRSZWNvcmRFcnJvcnMucHVzaChkKSxzZXRUaW1l''@;'; put 'put ''b3V0KCgpPT57aC5zZXRDZWxsTWV0YShhLGQsInJlbmRlcmVyIixMZWUpLGgucmVuZGVyKCksdGhpcy5jdXJyZW50RWRpdFJlY29yZEVycm9ycy5zcGxpY2UodGhpcy5jdXJyZW50RWRpdFJlY29yZEVycm9ycy5pbmRleE9mKGQpLDEpfSwzZTMpLHRoaXMucmVTZXRDZWxsVmFsaWRhdGlvblZh''@;'; put 'put ''bHVlcygpLHRoaXMubG9nZ2VyU2VydmljZS5sb2coImdldGR5bmFtaWNjb2x2YWxzIGVycm9yOiIsRWUpfSkpfX1jaGVja0VtcHR5Um93V2hlbkZpbHRlcigpe3RoaXMuemVyb0ZpbHRlclJvd3M9ITEsdHlwZW9mIHRoaXMuZmlsdGVyX3BrPCJ1IiYmMT09PXRoaXMuaG90VGFibGUuZGF0YS5s''@;'; put 'put ''ZW5ndGgmJltudWxsLCIiXS5pbmNsdWRlcyh0aGlzLmhvdFRhYmxlLmRhdGFbMF1bdGhpcy5oZWFkZXJQa3NbMF1dKSYmKHRoaXMuemVyb0ZpbHRlclJvd3M9ITApfW9uUmVjb3JkSW5wdXRGb2N1cyhhKXt0aGlzLmR5bmFtaWNDZWxsVmFsaWRhdGlvbih0aGlzLmN1cnJlbnRFZGl0UmVjb3Jk''@;'; put 'put ''SW5kZXgsYS5jb2xOYW1lKX1leGVjdXRlRHluYW1pY0NlbGxWYWxpZGF0aW9uSWZBcHBsaWNhYmxlKGEsZCxoKXtjb25zdCBmPXRoaXMuaGVscGVyU2VydmljZS5kZWxldGVLZXlzQW5kSGFzaCh0aGlzLmRhdGFTb3VyY2VbaF0sW2EsIm5vTGlua09wdGlvbiJdKSx2PXRoaXMuY2VsbFZhbGlk''@;'; put 'put ''YXRpb25Tb3VyY2UuZmluZChNPT5NLmhhc2g9PT1mJiZkPT09TS5jb2wpO2lmKHYmJnYuZXh0ZW5kZWRfdmFsdWVzJiZ2LmV4dGVuZGVkX3ZhbHVlcy5sZW5ndGg+MCl7Y29uc3QgTT10aGlzLmdldEV4dGVuZGVkVmFsdWVzQnlDZWxsVmFsdWUodixoKTt0aGlzLnNldEV4dGVuZGVkVmFsdWVz''@;'; put 'put ''VG9DZWxscyh2LGgsTSwhMCl9fWRhdGFzZXRJbmZvTW9kYWxSb3dDbGlja2VkKGEpe3ZvaWQgMCE9PWEuTE9BRF9SRUYmJnRoaXMucm91dGVyLm5hdmlnYXRlKFtgL3N0YWdlLyR7YS5MT0FEX1JFRn1gXSl9dmlld2JveE1hbmFnZXIoKXt0aGlzLnZpZXdib3hlcz0hMH1nZXQgdG90YWxSb3dz''@;'; put 'put ''Q2hhbmdlZCgpe3JldHVybiB0aGlzLnJvd3NDaGFuZ2VkLnJvd3NVcGRhdGVkK3RoaXMucm93c0NoYW5nZWQucm93c0RlbGV0ZWQrdGhpcy5yb3dzQ2hhbmdlZC5yb3dzQWRkZWR9c2V0Q2VsbEZpbHRlcihhKXtjb25zdCBkPXRoaXMuaG90SW5zdGFuY2UuZ2V0U2VsZWN0ZWQoKSxoPWQmJmRb''@;'; put 'put ''MF07aWYoaCl7Y29uc3QgZj1oWzBdLE09aFsxXTtpZihmPT09aFsyXSYmTT09PWhbM10pe2NvbnN0IFo9dGhpcy5ob3RJbnN0YW5jZS5nZXRDZWxsTWV0YShmLE0pO1omJlouZmlsdGVyPT09IWEmJnRoaXMuaG90SW5zdGFuY2Uuc2V0Q2VsbE1ldGEoZixNLCJmaWx0ZXIiLGEpfX19bmdPbklu''@;'; put 'put ''aXQoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLmxpY2VuY2VTZXJ2aWNlLmhvdF9saWNlbnNlX2tleS5zdWJzY3JpYmUoaD0+e2EuaG90VGFibGUubGljZW5zZUtleT1ofSksYS5fcXVlcnk9YS5zYXNTdG9yZVNlcnZpY2UucXVlcnkuc3Vic2NyaWJlKGg9PntoLmxpYmRz''@;'; put 'put ''PT09YS5saWJkcyYmKGEud2hlcmVTdHJpbmc9aC5zdHJpbmcsYS5jbGF1c2VzPWgub2JqKX0pO2NvbnN0IGQ9e307dHlwZW9mIGEucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbTwidSImJihhLmxpYmRzPWEucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbSxhLmZpbHRlcl9waz1hLnJv''@;'; put 'put ''dXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZCwiZWRpdC1yZWNvcmQiPT09YS5yb3V0ZS5zbmFwc2hvdC51cmxbMF0ucGF0aCYmKGEucmVjb3JkQWN0aW9uPXR5cGVvZiBhLmZpbHRlcl9wazwidSI/IkVESVQiOiJBREQiKSxkLkxJQkRTPWEubGliZHMsdHlwZW9mIGEuZmlsdGVyX3BrPCJ1''@;'; put 'put ''IiYmKGQuRklMVEVSX1JLPXBhcnNlSW50KGEuZmlsdGVyX3BrKSksZC5PVVRERVNUPSJXRUIiLGEubGliZHMmJihLbi5lZGl0b3IubGlicmFyeT1hLmxpYmRzLnNwbGl0KCIuIilbMF0sS24uZWRpdG9yLnRhYmxlPWEubGliZHMuc3BsaXQoIi4iKVsxXSkpLGEubGliZHMmJihhLmdldGRhdGFF''@;'; put 'put ''cnJvcj0hMSx5aWVsZCBhLnNhc1N0b3JlU2VydmljZS5jYWxsU2VydmljZShkLCJTQVNDb250cm9sVGFibGUiLCJlZGl0b3JzL2dldGRhdGEiLGEubGliZHMpLnRoZW4oaD0+e2EuaW5pdFNldHVwKGgpfSkuY2F0Y2goaD0+e2EuZ2V0ZGF0YUVycm9yPSEwLGEudGFibGVUcnVlPSEwfSkpfSko''@;'; put 'put ''KX1uZ0FmdGVyVmlld0luaXQoKXt9aW5pdFNldHVwKGEpe2lmKHRoaXMuaG90SW5zdGFuY2U9dGhpcy5ob3RSZWdpc3RlcmVyLmdldEluc3RhbmNlKCJob3RJbnN0YW5jZSIpLHRoaXMuZ2V0ZGF0YUVycm9yfHwhYXx8IWEuZGF0YSlyZXR1cm47dGhpcy5jb2xzPWEuZGF0YS5jb2xzLHRoaXMu''@;'; put 'put ''ZHNtZXRhPWEuZGF0YS5kc21ldGEsdGhpcy52ZXJzaW9ucz1hLmRhdGEudmVyc2lvbnN8fFtdO2NvbnN0IGQ9dGhpcy5kc21ldGEuZmluZChaPT4iTk9URVMiPT09Wi5OQU1FKSxoPXRoaXMuZHNtZXRhLmZpbmQoWj0+IkREX0xPTkdERVNDIj09PVouTkFNRSksZj10aGlzLmRzbWV0YS5maW5k''@;'; put 'put ''KFo9PiJERF9TSE9SVERFU0MiPT09Wi5OQU1FKTt0aGlzLmRzTm90ZT1kJiZkLlZBTFVFP2QuVkFMVUU6aCYmaC5WQUxVRT9oLlZBTFVFOmYmJmYuVkFMVUU/Zi5WQUxVRToiIjtjb25zdCB2PXRoaXMuaG90SW5zdGFuY2UsTT1hLmRhdGEuYXBwcm92ZXJzO3RoaXMuY29scyYmKHRoaXMuaGVh''@;'; put 'put ''ZGVyQXJyYXk9KGM9Pntjb25zdCBsPVtdO2ZvcihsZXQgYSBvZiBjKSJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iIT09YS5OQU1FJiZsLnB1c2goYS5OQU1FKTtyZXR1cm4gbH0pKHRoaXMuY29scykpLE0uZm9yRWFjaChaPT57dGhpcy5hcHByb3ZlcnMucHVzaChaLlBFUlNPTk5B''@;'; put 'put ''TUUpfSksdGhpcy50YWJsZVRydWU9ITAsdGhpcy5saWJkcz1hLmxpYmRzLHRoaXMuaG90VGFibGUuZGF0YT1hLmRhdGEuc2FzZGF0YSx0aGlzLmhlYWRlckNvbHVtbnM9YS5kYXRhLnNhc3BhcmFtc1swXS5DT0xIRUFERVJTLnNwbGl0KCIsIiksdGhpcy5oZWFkZXJQa3M9YS5kYXRhLnNhc3Bh''@;'; put 'put ''cmFtc1swXS5QSy5zcGxpdCgiICIpLHRoaXMuY29sdW1uTGV2ZWxTZWN1cml0eUZsYWc9ISFhLmRhdGEuc2FzcGFyYW1zWzBdLkNMU19GTEFHLHRoaXMuY29sdW1uTGV2ZWxTZWN1cml0eUZsYWcmJnRoaXMuc2V0UmVzdHJpY3Rpb25zKHtyZXN0cmljdEFkZFJvdzohMCxyZW1vdmVFZGl0UmVj''@;'; put 'put ''b3JkQnV0dG9uOiEwLHJlbW92ZUFkZFJlY29yZEJ1dHRvbjohMH0pLHRoaXMuY2hlY2tFbXB0eVJvd1doZW5GaWx0ZXIoKSwtMSE9PXRoaXMuaGVhZGVyQ29sdW1ucy5pbmRleE9mKCJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iKSYmKHRoaXMuaGVhZGVyQ29sdW1uc1t0aGlzLmhl''@;'; put 'put ''YWRlckNvbHVtbnMuaW5kZXhPZigiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIildPSJEZWxldGU/IiksdGhpcy5oZWFkZXJBcnJheT10aGlzLmhlYWRlckNvbHVtbnMuc2xpY2UoMSksIiIhPT1hLmRhdGEuc2FzcGFyYW1zWzBdLkRUVkFSUyYmKHRoaXMuZGF0ZUhlYWRlcnM9YS5k''@;'; put 'put ''YXRhLnNhc3BhcmFtc1swXS5EVFZBUlMuc3BsaXQoIiAiKSksIiIhPT1hLmRhdGEuc2FzcGFyYW1zWzBdLlRNVkFSUyYmKHRoaXMudGltZUhlYWRlcnM9YS5kYXRhLnNhc3BhcmFtc1swXS5UTVZBUlMuc3BsaXQoIiAiKSksIiIhPT1hLmRhdGEuc2FzcGFyYW1zWzBdLkRUVE1WQVJTJiYodGhp''@;'; put 'put ''cy5kYXRlVGltZUhlYWRlcnM9YS5kYXRhLnNhc3BhcmFtc1swXS5EVFRNVkFSUy5zcGxpdCgiICIpKSxhLmRhdGEueGxfcnVsZXMubGVuZ3RoPjAmJih0aGlzLnhsUnVsZXM9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShhLmRhdGEueGxfcnVsZXMpKSx0aGlzLmRjVmFsaWRhdG9yPW5l''@;'; put 'put ''dyBYbWUoYS5kYXRhLnNhc3BhcmFtc1swXSxhLmRhdGEuJHNhc2RhdGEsdGhpcy5jb2xzLGEuZGF0YS5kcXJ1bGVzLGEuZGF0YS5kcWRhdGEpLHRoaXMuY2VsbFZhbGlkYXRpb249dGhpcy5kY1ZhbGlkYXRvci5nZXRSdWxlcygpLHRoaXMuZGF0YVNvdXJjZT1hLmRhdGEuc2FzZGF0YSx0aGlz''@;'; put 'put ''LiRkYXRhRm9ybWF0cz1hLmRhdGEuJHNhc2RhdGE7Zm9yKGxldCBaPTA7Wjx0aGlzLmhlYWRlckNvbHVtbnMubGVuZ3RoO1orKyl0aGlzLmhvdERhdGFTY2hlbWFbdGhpcy5jZWxsVmFsaWRhdGlvbltaXS5kYXRhXT1KZ3QodGhpcy5jZWxsVmFsaWRhdGlvbltaXS50eXBlLHRoaXMuY2VsbFZh''@;'; put 'put ''bGlkYXRpb25bWl0pO3RoaXMuY2hlY2tSb3dMaW1pdCgpLHYudXBkYXRlU2V0dGluZ3Moe2RhdGE6dGhpcy5kYXRhU291cmNlLGNvbEhlYWRlcnM6dGhpcy5oZWFkZXJDb2x1bW5zLGNvbHVtbnM6dGhpcy5jZWxsVmFsaWRhdGlvbixoZWlnaHQ6dGhpcy5ob3RUYWJsZS5oZWlnaHQsZm9ybXVs''@;'; put 'put ''YXM6dGhpcy5ob3RUYWJsZS5mb3JtdWxhcyxzdHJldGNoSDoiYWxsIixyZWFkT25seTp0aGlzLmhvdFRhYmxlLnJlYWRPbmx5LGhpZGRlbkNvbHVtbnM6e2luZGljYXRvcnM6ITAsY29sdW1uczp0aGlzLmRjVmFsaWRhdG9yLmdldEhpZGRlbkNvbHVtbnMoKX0sbW9kaWZ5Q29sV2lkdGg6ZnVu''@;'; put 'put ''Y3Rpb24oWixuZSl7cmV0dXJuIDA9PT1uZT82MDpaPjUwMD81MDA6Wn0sY29weVBhc3RlOnRoaXMuaG90VGFibGUuY29weVBhc3RlLG1hbnVhbENvbHVtbkZyZWV6ZTohMSxtdWx0aUNvbHVtblNvcnRpbmc6ITAsbWFudWFsQ29sdW1uUmVzaXplOiEwLGZpbHRlcnM6ITEsbWFudWFsUm93UmVz''@;'; put 'put ''aXplOiEwLHZpZXdwb3J0Um93UmVuZGVyaW5nT2Zmc2V0OjUwLHJvd0hlYWRlcnM6Wj0+IiAiLHJvd0hlYWRlcldpZHRoOjE1LHJvd0hlaWdodHM6MjQsbWF4Um93czp0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkfHwxLzAsaW52YWxpZENlbGxDbGFzc05hbWU6''@;'; put 'put ''Imh0SW52YWxpZCIsZHJvcGRvd25NZW51OntpdGVtczp7bWFrZV9yZWFkX29ubHk6e25hbWU6Im1ha2VfcmVhZF9vbmx5In0sYWxpZ25tZW50OntuYW1lOiJhbGlnbm1lbnQifSxzcDE6e25hbWU6Ii0tLS0tLS0tLSJ9LGluZm86e25hbWU6InRlc3QgaW5mbyIscmVuZGVyZXI6KFosbmUsY2Us''@;'; put 'put ''YmUsRWUsQmUpPT57Y29uc3QgcWU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpO2xldCBudCxsdD0iTm8gaW5mbyBmb3VuZCI7aWYodGhpcy5ob3RJbnN0YW5jZSl7Y29uc3QgbXQ9dGhpcy5ob3RJbnN0YW5jZS5nZXRTZWxlY3RlZCgpfHxbXSxKdD1tdD9tdFswXVsxXTotMSx5bj10''@;'; put 'put ''aGlzLmhvdEluc3RhbmNlPy5jb2xUb1Byb3AoSnQpO250PXRoaXMuJGRhdGFGb3JtYXRzPy52YXJzW3luXSxudCYmKGx0PWBMQUJFTDogJHtudD8ubGFiZWx9PGJyPlRZUEU6ICR7bnQ/LnR5cGV9PGJyPkxFTkdUSDogJHtudD8ubGVuZ3RofTxicj5GT1JNQVQ6ICR7bnQ/LmZvcm1hdH1gKX1y''@;'; put 'put ''ZXR1cm4gcWUuaW5uZXJIVE1MPWx0LHFlfX19fSxkYXRhU2NoZW1hOnRoaXMuaG90RGF0YVNjaGVtYSxjb250ZXh0TWVudTp0aGlzLmhvdFRhYmxlLnNldHRpbmdzLmNvbnRleHRNZW51LGN1cnJlbnRIZWFkZXJDbGFzc05hbWU6ImN1c3RvbUgiLGFmdGVyR2V0Q29sSGVhZGVyOihaLG5lKT0+''@;'; put 'put ''e2NvbnN0IGNlPXRoaXMuY29sdW1uSGVhZGVyW1pdLGJlPWNlJiZ0aGlzLmlzQ29sUGsoY2UpLEVlPWNlJiZ0aGlzLmlzUmVhZG9ubHlDb2woY2UpO2JlJiZuZS5jbGFzc0xpc3QuYWRkKCJwcmltYXJ5S2V5SGVhZGVyU3R5bGUiKSxFZSYmIWJlJiZuZS5jbGFzc0xpc3QuYWRkKCJyZWFkb25s''@;'; put 'put ''eUNlbGwiKSwwPT09WiYmbmUuY2xhc3NMaXN0LmFkZCgiZmlyc3RDb2x1bW5IZWFkZXJTdHlsZSIpLG5lLmNsYXNzTGlzdC5hZGQoS24uaGFuZHNvbnRhYmxlLmRhcmtUYWJsZUhlYWRlckNsYXNzKX0sYWZ0ZXJHZXRDZWxsTWV0YTooWixuZSxjZSk9PntuZSYmdGhpcy5pc1JlYWRvbmx5Q29s''@;'; put 'put ''KG5lKSYmKGNlLmNsYXNzTmFtZT0icmVhZG9ubHlDZWxsIil9fSwhMSksdGhpcy5ob3RUYWJsZS5oaWRkZW49ITEsdGhpcy50b2dnbGVIb3RQbHVnaW4oImNvbnRleHRNZW51IiwhMSksdGhpcy5xdWVyeVRleHQ9YS5kYXRhLnNhc3BhcmFtc1swXS5GSUxURVJfVEVYVCx0aGlzLmNvbHVtbkhl''@;'; put 'put ''YWRlcj1hLmRhdGEuc2FzcGFyYW1zWzBdLkNPTEhFQURFUlMuc3BsaXQoIiwiKSx0aGlzLmNvbHVtbkhlYWRlclswXT0iRGVsZXRlPyIsdGhpcy5yZWFkT25seUZpZWxkcz1hLmRhdGEuc2FzcGFyYW1zWzBdLlBLQ05UO2NvbnN0IEQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImhvdEluc3Rh''@;'; put 'put ''bmNlIik7RCYmRC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLFo9Pnt0aGlzLnVwbG9hZFByZXZpZXd8fHRoaXMuaG90Q2xpY2tlZCgpLHNldFRpbWVvdXQoKCk9Pntjb25zdCBuZT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIuZGVidWctc3dpdGNoLWl0ZW0iKXx8dm9pZCAwO25lJiZu''@;'; put 'put ''ZS5jbGljaygpfSwxMDApfSksdi5hZGRIb29rKCJhZnRlclNlbGVjdGlvbiIsKFosbmUsY2UsYmUsRWUsQmUpPT57Wj09PWNlJiZuZT09PWJlJiYhMT09PXRoaXMuaG90VGFibGUucmVhZE9ubHkmJnRoaXMuZHluYW1pY0NlbGxWYWxpZGF0aW9uKFosbmUpfSksdi5hZGRIb29rKCJhZnRlckJl''@;'; put 'put ''Z2luRWRpdGluZyIsKCk9Pnt0aGlzLnNldENlbGxGaWx0ZXIoITEpfSksdi5hZGRIb29rKCJiZWZvcmVLZXlEb3duIiwoKT0+e3RoaXMuc2V0Q2VsbEZpbHRlcighMCl9KSx2LmFkZEhvb2soImFmdGVyQ2hhbmdlIiwoWixuZSk9PntpZigiZWRpdCI9PT1uZSl7Y29uc3QgY2U9dGhpcy5ob3RJ''@;'; put 'put ''bnN0YW5jZSxiZT1aWzBdWzBdLEVlPVpbMF1bMV0sQmU9Y2UucHJvcFRvQ29sKEVlKSxxZT1jZS5nZXRDZWxsTWV0YShiZSxCZSk7cWUmJiExPT09cWUuZmlsdGVyJiZjZS5zZXRDZWxsTWV0YShiZSxCZSwiZmlsdGVyIiwhMCksdGhpcy5leGVjdXRlRHluYW1pY0NlbGxWYWxpZGF0aW9uSWZB''@;'; put 'put ''cHBsaWNhYmxlKEVlLEJlLGJlKX19KSx2LmFkZEhvb2soImFmdGVyUmVuZGVyIixaPT57dGhpcy5ldmVudFNlcnZpY2UuZGlzcGF0Y2hFdmVudCgicmVzaXplIil9KSx2LmFkZEhvb2soImFmdGVyQ3JlYXRlUm93IiwoWixuZSk9PntpZihaPnRoaXMuZGF0YVNvdXJjZS5sZW5ndGgpe2NvbnN0''@;'; put 'put ''IGNlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi53dEhvbGRlciIpO3NldFRpbWVvdXQoKCk9PntjZSYmKGNlLnNjcm9sbFRvcD1jZS5zY3JvbGxIZWlnaHQpfSl9fSksdi5hZGRIb29rKCJiZWZvcmVQYXN0ZSIsKFosbmUpPT57Y29uc3QgY2U9bmVbMF0uc3RhcnRDb2w7WlswXT1aWzBdLm1h''@;'; put 'put ''cCgoYmUsRWUpPT57Y29uc3QgQmU9dGhpcy5jb2x1bW5IZWFkZXJbY2UrRWVdLHFlPSJudW0iPT09dGhpcy4kZGF0YUZvcm1hdHM/LnZhcnNbQmVdPy50eXBlLG50PSgwLCRnLmlzU3BlY2lhbE1pc3NpbmcpKGJlKTtyZXR1cm4gcWUmJiFpc05hTihiZSkmJiFudCYmKGJlKj0xKSxiZX0pfSks''@;'; put 'put ''di5hZGRIb29rKCJhZnRlclJlbW92ZVJvdyIsKCk9Pnt0aGlzLmNoZWNrUm93TGltaXQoKX0pLHYuYWRkSG9vaygiYWZ0ZXJDcmVhdGVSb3ciLCgpPT57dGhpcy5jaGVja1Jvd0xpbWl0KCl9KSx0aGlzLnVwbG9hZFVybD0ic2VydmljZXMvZWRpdG9ycy9sb2FkZmlsZSIsbnVsbCE9PXRoaXMu''@;'; put 'put ''cmVjb3JkQWN0aW9uJiYoIkFERCI9PT10aGlzLnJlY29yZEFjdGlvbj8odGhpcy5hZGRSZWNvcmQoKSx0aGlzLmVkaXRSZWNvcmQobnVsbCx0aGlzLmRhdGFTb3VyY2UubGVuZ3RoLTEsITApKToxPT09dGhpcy5kYXRhU291cmNlLmxlbmd0aCYmdGhpcy5lZGl0UmVjb3JkKG51bGwsMCkpLGEu''@;'; put 'put ''ZGF0YS5xdWVyeS5sZW5ndGg+MCYmKCJob21lIj09PUtuLnJvb3RQYXJhbXx8ImVkaXRvciI9PT1Lbi5yb290UGFyYW0pJiYwPT09S24uZWRpdG9yLmZpbHRlci5jbGF1c2VzLmxlbmd0aCYmKEtuLmVkaXRvci5maWx0ZXIucXVlcnk9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShhLmRh''@;'; put 'put ''dGEucXVlcnkpLEtuLmVkaXRvci5maWx0ZXIubGliZHM9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMubGliTWVtLHRoaXMuc2FzU3RvcmVTZXJ2aWNlLmluaXRpYWxpemVHbG9iYWxGaWx0ZXJDbGF1c2UoImVkaXRvciIsdGhpcy5jb2xzKSksdi5yZW5kZXIoKX1zdGF0aWN7dGhpcy5cdTAy''@;'; put 'put ''NzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShkMSksR2UocGMpLEdlKFNkKSxHZShWaCksR2UoR3UpLEdlKExzKSxHZShDdSksR2UoSnMpLEdlKHhzKSxHZShabSksR2UoYTZlKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAt''@;'; put 'put ''ZWRpdG9yIl1dLHZpZXdRdWVyeTpmdW5jdGlvbihkLGgpe2lmKDEmZCYmKG5hKHc4dCw3KSxuYShDOHQsNSksbmEoUzh0LDUpLG5hKE04dCw1KSxuYSh4OHQsNSkpLDImZCl7bGV0IGY7eGkoZj1FaSgpKSYmKGguaHQ9Zi5maXJzdCkseGkoZj1FaSgpKSYmKGgudXBsb2FkU3RhdGVyQ29tcExp''@;'; put 'put ''c3Q9ZikseGkoZj1FaSgpKSYmKGgucXVlcnlGaWx0ZXJDb21wTGlzdD1mKSx4aShmPUVpKCkpJiYoaC5ob3RJbnN0YW5jZUNvbXBMaXN0PWYpLHhpKGY9RWkoKSkmJihoLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0PWYpfX0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xz''@;'; put 'put ''OjE3Nyx2YXJzOjc0LGNvbnN0czpbWyJodCIsIiJdLFsiaG90SW5zdGFuY2UiLCIiXSxbImZpbGVQYXNzd29yZElucHV0IiwiIl0sWyJmaWxlVXBsb2FkSW5wdXQiLCIiXSxbInVwbG9hZFN0YXRlciIsIiJdLFsicXVlcnlGaWx0ZXIiLCIiXSxbMSwiY29udGVudC1hcmVhIiwiZC1mbGV4Iiwi''@;'; put 'put ''Y2xyLWZsZXgtY29sdW1uIl0sWyJhcHBGaWxlRHJvcCIsIiIsMSwicmVsYXRpdmUiLDMsImZpbGVPdmVyIiwiZmlsZURyb3AiLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJ1cGxvYWRlciIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsU3RhdGljQmFja2Ryb3AiLCJjbHJNb2RhbENsb3NhYmxlIiwi''@;'; put 'put ''Y2xyTW9kYWxPcGVuIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwiZHJvcC1hcmVhIl0sWzEsImNsci1jb2wtbWQtMTIiXSxbMSwiY2xyLXJvdyIsImNhcmQtYmxvY2siLCJtdC0xNSIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1iZXR3ZWVuIl0sWzEsImNsci1j''@;'; put 'put ''b2wtbWQtYXV0byJdLFsxLCJlbmNvZGluZy1ibG9jayJdLFsiY2xySW5saW5lIiwiIiwxLCJtdC0wLWkiXSxbInR5cGUiLCJyYWRpbyIsImNsclJhZGlvIiwiIiwidmFsdWUiLCJVVEYtOCIsIm5hbWUiLCJlbmNvZGluZyIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJkaXNhYmxlZCJd''@;'; put 'put ''LFsidHlwZSIsInJhZGlvIiwiY2xyUmFkaW8iLCIiLCJ2YWx1ZSIsIldMQVRJTjEiLCJuYW1lIiwiZW5jb2RpbmciLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwiZGlzYWJsZWQiXSxbImNsYXNzIiwiY2xyLWNvbC1tZC0zIGZpbHRlckJ0biIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHIt''@;'; put 'put ''Y29sLW1kLTMgZWRpdEJ0biIsNCwibmdJZiJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRuIGJ0bi1wcmltYXJ5IG1yLTAiLDMsImRpc2FibGVkIiwiY2xpY2siLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLCJjbGFzcyIsImJ0biBidG4tcHJpbWFyeSBtci0wIiwzLCJjbGljayIs''@;'; put 'put ''NCwibmdJZiJdLFsiY2xhc3MiLCJleGNlbC1wYXJzaW5nIGNsci1jb2wtbWQtMTIiLDQsIm5nSWYiXSxbMSwibW9kYWwtZm9vdGVyIl0sWzMsImN1cnJlbnRSZWNvcmQiLCJyZWNvcmRBY3Rpb24iLCJsaWJkcyIsInF1ZXJ5RmlsdGVyIiwiZmlsdGVyIiwic3VibWl0TG9hZGluZyIsImhlYWRl''@;'; put 'put ''clBrcyIsImNlbGxWYWxpZGF0aW9uIiwiY3VycmVudFJlY29yZEluZGV4IiwiY3VycmVudFJlY29yZExvYWRpbmdzIiwiY3VycmVudFJlY29yZEVycm9ycyIsImN1cnJlbnRSZWNvcmRWYWxpZGF0b3IiLCJvblJlY29yZENoYW5nZSIsIm9uUmVjb3JkSW5wdXRGb2N1c2VkIiwib25SZWNvcmRF''@;'; put 'put ''ZGl0Q2xvc2UiLCJvbk5leHRSZWNvcmQiLCJvblByZXZpb3VzUmVjb3JkIiw0LCJuZ0lmIl0sWzEsImNsci1mbGV4LTEiXSxbImNsYXNzIiwicHJvZ3Jlc1N0YXRpYyBwcm9ncmVzcyBsb29wIiw0LCJuZ0lmIl0sWyJhcHBEcmFnTmRyb3AiLCIiLDEsImNhcmQiLCJib3JkZXItMCIsImJveC1z''@;'; put 'put ''aGFkb3ctbm9uZS1pIiwicG9zaXRpb24tcmVsYXRpdmUiLCJoLTEwMCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiIsImJhY2tncm91bmQtdHJhbnNwYXJlbnQiLDMsImZpbGVEcmFnZ2VkT3ZlciJdLFsxLCJjYXJkLWhlYWRlciIsImNsci1yb3ciLCJidXR0b25CYXIiLCJoZWFkZXJCYXIi''@;'; put 'put ''LCJjbHItZmxleC1tZC1yb3ciLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtbGctZW5kIl0sWyJjbGFzcyIsImNsci1jb2wtMTIgY2xyLWNvbC1tZC0zIGNsci1jb2wtbGctNCBiYWNrQnRuIiw0LCJuZ0lmIl0sWzEsImNsci1jb2wtMTIiLCJjbHIt''@;'; put 'put ''Y29sLW1kLTUiLCJjbHItY29sLWxnLTQiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsiY2xhc3MiLCJlZGl0b3ItdGl0bGUgdGV4dC1jZW50ZXIgbXQtMC1pIiw0LCJuZ1ZhciJdLFsiY2xhc3MiLCJjbHItY29sLTEyIGNsci1jb2wtbWQtNCBjbHItY29s''@;'; put 'put ''LWxnLTQgYnRuQ3RybCIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHItY29sLW1kLTEyIGluZm9CYXIiLDQsIm5nSWYiXSxbMSwiY2FyZC1ibG9jayIsInAtMCIsImNsci1mbGV4LTEiLCJiYWNrZ3JvdW5kLXRyYW5zcGFyZW50IiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImNhcmQtdGV4dCIsNCwi''@;'; put 'put ''bmdJZiJdLFsxLCJjYXJkLXRleHQiLCJob3RFZGl0b3IiLCJoLTEwMCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiIsImJhY2tncm91bmQtdHJhbnNwYXJlbnQiXSxbMSwiaG90LXdyYXBwZXIiLCJjbHItZmxleC0xIl0sWyJob3RJZCIsImhvdEluc3RhbmNlIiwiaWQiLCJob3RUYWJsZSIs''@;'; put 'put ''ImNsYXNzTmFtZSIsImh0RGFyayIsMSwiZWRpdC1ob3QiLDMsImxpY2Vuc2VLZXkiXSxbNCwibmdJZiJdLFsiY2xhc3MiLCJtdC0yLWkgdy0xMDAgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwibW9kYWwiLDQsIm5nSWYiXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9k''@;'; put 'put ''YWxPcGVuIl0sWzEsIm0tMCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbMSwiZHVwbGljYXRlLWtleXMtbW9kYWwiLDMsImNsck1vZGFs''@;'; put 'put ''T3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiJdLFsiY2xhc3MiLCJkLWJsb2NrIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsIm1vZGFsIHotaW5kZXgtaGlnaGVzdCIsNCwibmdJZiJdLFsxLCJmaWx0ZXItbW9kYWwiLDMsImNsck1vZGFsT3Bl''@;'; put 'put ''bkNoYW5nZSIsImNsck1vZGFsT3BlbiIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiLCJjZW50ZXIiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWRhcmtlci1ncmF5Il0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIs''@;'; put 'put ''MywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWyJ0eXBlIiwiYnV0dG9u''@;'; put 'put ''IiwxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxTaXplIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIs''@;'; put 'put ''MywiY2xpY2siXSxbMSwibW9kYWwtYm9keSIsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJkYXRhLWxwaWdub3JlIiwidHJ1ZSIsImF1dG9jb21wbGV0ZSIsIm9mZiIsImlkIiwiZmlsZVBhc3N3b3JkSW5wdXQiLCJ0eXBlIiwidGV4dCIsMSwiY2xyLWlucHV0Iiwi''@;'; put 'put ''ZGlzYWJsZS1wYXNzd29yZC1tYW5hZ2VyIl0sWyJjbGFzcyIsIm0tMCBjb2xvci1yZWQiLDQsIm5nSWYiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzLW91dGxpbmUiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbMywib3BlbkNoYW5nZSIsInJvd0NsaWNr''@;'; put 'put ''ZWQiLCJvcGVuIiwiZHNtZXRhIiwidmVyc2lvbnMiXSxbMywidmlld2JveE1vZGFsQ2hhbmdlIiwidmlld2JveE1vZGFsIl0sWzEsImNsci1jb2wtbWQtMyIsImZpbHRlckJ0biJdLFsxLCJmaWx0ZXJCdG4iLCJ3LTEwMCJdLFsiZm9yIiwiZmlsZS11cGxvYWQiLDEsImJ0biIsImJ0bi1zbSIs''@;'; put 'put ''ImJ0bi1vdXRsaW5lIiwicHJvZmlsZS1idXR0b25zIiwidy0xMDAiXSxbImhpZGRlbiIsIiIsImlkIiwiZmlsZS11cGxvYWQiLCJ0eXBlIiwiZmlsZSIsImFwcEZpbGVTZWxlY3QiLCIiLDMsImNoYW5nZSIsInVwbG9hZGVyIl0sWzEsImNsci1jb2wtbWQtMyIsImVkaXRCdG4iXSxbMSwiYnRu''@;'; put 'put ''VmlldyIsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwicHJvZmlsZS1idXR0b25zIiwidy0xMDAiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwibXItMCIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsidHlwZSIsImJ1dHRv''@;'; put 'put ''biIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLCJtci0wIiwzLCJjbGljayJdLFsxLCJleGNlbC1wYXJzaW5nIiwiY2xyLWNvbC1tZC0xMiJdLFszLCJvblJlY29yZENoYW5nZSIsIm9uUmVjb3JkSW5wdXRGb2N1c2VkIiwib25SZWNvcmRFZGl0Q2xvc2UiLCJvbk5leHRSZWNvcmQiLCJvblByZXZp''@;'; put 'put ''b3VzUmVjb3JkIiwiY3VycmVudFJlY29yZCIsInJlY29yZEFjdGlvbiIsImxpYmRzIiwicXVlcnlGaWx0ZXIiLCJmaWx0ZXIiLCJzdWJtaXRMb2FkaW5nIiwiaGVhZGVyUGtzIiwiY2VsbFZhbGlkYXRpb24iLCJjdXJyZW50UmVjb3JkSW5kZXgiLCJjdXJyZW50UmVjb3JkTG9hZGluZ3MiLCJj''@;'; put 'put ''dXJyZW50UmVjb3JkRXJyb3JzIiwiY3VycmVudFJlY29yZFZhbGlkYXRvciJdLFsxLCJwcm9ncmVzU3RhdGljIiwicHJvZ3Jlc3MiLCJsb29wIl0sWzEsImNsci1jb2wtMTIiLCJjbHItY29sLW1kLTMiLCJjbHItY29sLWxnLTQiLCJiYWNrQnRuIl0sWzEsImJ0biIsImljb24tY29sbGFwc2Ui''@;'; put 'put ''LCJidG4tc20iLCJidG4taWNvbiIsImJ0bi1kaW1tZWQiLDMsInJvdXRlckxpbmsiXSxbInNoYXBlIiwiY2FyZXQiLCJkaXIiLCJsZWZ0Iiwic2l6ZSIsIjIwIl0sWzEsInRleHQiXSxbMSwiYnRuIiwiaWNvbi1jb2xsYXBzZSIsImJ0bi1zbSIsImJ0bi1pY29uIiwiYnRuLWRpbW1lZCIsInZp''@;'; put 'put ''ZXdib3gtb3BlbiIsMywiY2xpY2siXSxbInNoYXBlIiwidmlldy1jYXJkcyIsInNpemUiLCIyMCJdLFsxLCJlZGl0b3ItdGl0bGUiLCJ0ZXh0LWNlbnRlciIsIm10LTAtaSJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJzaGFwZSIsImluZm8tY2lyY2xlIiwiYXJpYS1sYWJlbCIsIlZpZXcg''@;'; put 'put ''ZGF0YXNldCBtZXRhIGluZm8iLCJzaXplIiwiMjQiLDEsImlzLWhpZ2hsaWdodCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJib2x0IiwiY2xhc3MiLCJjb2xvci15ZWxsb3ciLDQsIm5nSWYiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIl0sWzEsIm1yLTEwIiwidmll''@;'; put 'put ''dy10YWJsZSIsMywicm91dGVyTGluayJdLFsic2hhcGUiLCJib2x0IiwxLCJjb2xvci15ZWxsb3ciXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLCJjbHJTaXplIiwibGciLDQsImNscklmT3BlbiJdLFsiY2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsImNsclNpemUiLCJsZyJdLFsx''@;'; put 'put ''LCJjbHItY29sLTEyIiwiY2xyLWNvbC1tZC00IiwiY2xyLWNvbC1sZy00IiwiYnRuQ3RybCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuVmlldyIsImJ0biIsImljb24tY29sbGFwc2UiLCJidG4tc20iLCJidG4taWNvbiIsImJ0bi1ibG9jayIsImJ0bi1kaW1tZWQiLDMsImNsaWNrIl0sWyJz''@;'; put 'put ''aGFwZSIsImZpbHRlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiaWNvbi1jb2xsYXBzZSIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwiYnRuLWJsb2NrIiwzLCJjbGljayJdLFsic2hhcGUiLCJub3RlIl0sWyJ0eXBlIiwiYnV0dG9uIiwiY2xhc3MiLCJidG4gaWNvbi1jb2xsYXBzZSBi''@;'; put 'put ''dG4tc20gYnRuLXN1Y2Nlc3MgYnRuLWJsb2NrIG1yLTAiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJpY29uLWNvbGxhcHNlIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLCJidG4tYmxvY2siLCJtci0wIiwzLCJjbGljayJdLFsic2hhcGUiLCJ1cGxvYWQi''@;'; put 'put ''XSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1pY29uIiwiYnRuLW91dGxpbmUtZGFuZ2VyIiwzLCJjbGljayJdLFsic2hhcGUiLCJ0aW1lcyJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vz''@;'; put 'put ''cyIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWyJzaGFwZSIsInBsdXMiLCJzaXplIiwiMTYiXSxbInNoYXBlIiwiY2hlY2siLCJzaXplIiwiMjAiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1pY29uIiwiYnRuLW91dGxpbmUtZGFuZ2VyIiwiYnRuLXVwbG9hZC1w''@;'; put 'put ''cmV2aWV3IiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4tcHJpbWFyeSBidG4tdXBsb2FkLXByZXZpZXciLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsInByZXZpZXct''@;'; put 'put ''c3VibWl0IiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwiYnRuLXVwbG9hZC1wcmV2aWV3IiwzLCJjbGljayJdLFsxLCJjbHItY29sLW1kLTEyIiwiaW5mb0JhciJdLFsxLCJjYXJkLXRleHQiXSxbMSwiaC03''@;'; put 'put ''MHZoIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsInNwaW5uZXIiXSxbMSwibXQtMTAiXSxbImNkcy10ZXh0Iiwic2VjdGlvbiJdLFsic2hhcGUiLCJlcnJvci1zdGFuZGFyZCIsMSwiZXJyb3ItaWNvbiJd''@;'; put 'put ''LFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLCJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2VzcyIsIm10LTUtaSIsMywiY2xpY2siXSxbImNsclBvc2l0aW9uIiwidG9wLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbImNsclBvc2l0aW9uIiwi''@;'; put 'put ''dG9wLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIl0sWzEsIm10LTItaSIsInctMTAwIiwidGV4dC1jZW50ZXIiXSxbMSwibW9kYWwiXSxbInJvbGUiLCJkaWFsb2ciLCJhcmlhLWhpZGRlbiIsInRydWUiLDEsIm1vZGFsLWRpYWxvZyIsIm1vZGFsLWxnIl0sWzEsIm1vZGFsLWNvbnRlbnQiXSxbMSwi''@;'; put 'put ''bW9kYWwtaGVhZGVyIl0sWyJhcmlhLWxhYmVsIiwiQ2xvc2UiLCJ0eXBlIiwiYnV0dG9uIiwxLCJjbG9zZSJdLFsiYXJpYS1oaWRkZW4iLCJ0cnVlIiwic2hhcGUiLCJjbG9zZSJdLFsiY2xhc3MiLCJkLWJsb2NrIHctMTAwIHRleHQtY2VudGVyIGNvbG9yLXJlZCIsNCwibmdJZiJdLFsiY2xh''@;'; put 'put ''c3MiLCJjbHItb2Zmc2V0LW1kLTIgY2xyLWNvbC1tZC04Iiw0LCJuZ0lmIl0sWzEsIm1vZGFsLWZvb3RlciIsImp1c3RpZnktY29udGVudC1jZW50ZXItaSJdLFsiaWQiLCJzdWJtaXRCdG4iLCJ0eXBlIiwic3VibWl0IiwidGFiaW5kZXgiLCIwIiwxLCJidG4iLCJidG4tc20iLCJidG4tc3Vj''@;'; put 'put ''Y2Vzcy1vdXRsaW5lIiwibS0wIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJpZCIsImNhbmNlbFN1Ym1pdEJ0biIsInR5cGUiLCJidXR0b24iLCJ0YWJpbmRleCIsIjAiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsxLCJkLWJsb2NrIiwidy0xMDAiLCJ0ZXh0''@;'; put 'put ''LWNlbnRlciIsImNvbG9yLXJlZCJdLFsxLCJjbHItb2Zmc2V0LW1kLTIiLCJjbHItY29sLW1kLTgiXSxbMSwidGV4dC1hcmVhLWZ1bGwtd2lkdGgiXSxbImZvciIsImZvcm1GaWVsZHNfOCIsMSwibWItNSIsImQtYmxvY2siXSxbImNsclRleHRhcmVhIiwiIiwidGFiaW5kZXgiLCIwIiwidHlw''@;'; put 'put ''ZSIsInRleHQiLCJpZCIsImZvcm1GaWVsZHNfOCIsMSwic3VibWl0LXJlYXNvbiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJkaXNhYmxlZCIsInZhbHVlIl0sWzEsImQtYmxvY2siXSxbMSwibW9kYWwiLCJ6LWluZGV4LWhpZ2hlc3QiXSxbInJvbGUiLCJkaWFsb2ciLCJhcmlhLWhp''@;'; put 'put ''ZGRlbiIsInRydWUiLDEsIm1vZGFsLWRpYWxvZyJdLFsxLCJtLTAiLCJjb2xvci1yZWQiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXtpZigxJmQpe2NvbnN0IGY9T24oKTtkZSgwLCJkaXYiLDYpKDEsImNsci1tb2RhbCIsNyksRnQoImZpbGVPdmVyIixmdW5jdGlvbihNKXtyZXR1cm4gd3Qo''@;'; put 'put ''ZiksQ3QoaC5maWxlT3ZlckJhc2UoTSkpfSkoImZpbGVEcm9wIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5hdHRhY2hGaWxlKE0sITApKX0pLHBpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSx2aShoLnNob3dVcGxvYWRNb2RhbCxNKXx8KGgu''@;'; put 'put ''c2hvd1VwbG9hZE1vZGFsPU0pLEN0KE0pfSksZGUoMiwiaDMiLDgpLExlKDMsIlVwbG9hZCBGaWxlIiksaGUoKSxkZSg0LCJkaXYiLDkpKDUsImRpdiIsMTApKDYsInNwYW4iKSxMZSg3LCJEcm9wIGZpbGUgYW55d2hlcmUgdG8gdXBsb2FkISIpLGhlKCkoKSxkZSg4LCJkaXYiLDExKSg5LCJk''@;'; put 'put ''aXYiLDEyKSgxMCwiZGl2IiwxMykoMTEsImRpdiIsMTQpKDEyLCJjbHItcmFkaW8tY29udGFpbmVyIiwxNSkoMTMsImNsci1yYWRpby13cmFwcGVyIikoMTQsImlucHV0IiwxNikscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSx2aShoLmVuY29kaW5nLE0pfHwo''@;'; put 'put ''aC5lbmNvZGluZz1NKSxDdChNKX0pLGhlKCksZGUoMTUsImxhYmVsIiksTGUoMTYsIlVURi04IiksaGUoKSgpLGRlKDE3LCJjbHItcmFkaW8td3JhcHBlciIpKDE4LCJpbnB1dCIsMTcpLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksdmkoaC5lbmNvZGluZyxN''@;'; put 'put ''KXx8KGguZW5jb2Rpbmc9TSksQ3QoTSl9KSxoZSgpLGRlKDE5LCJsYWJlbCIpLExlKDIwLCJXTEFUSU4xIiksaGUoKSgpKCkoKSgpLGd0KDIxLGs4dCw2LDEsImRpdiIsMTgpKDIyLEQ4dCwzLDEsImRpdiIsMTkpLGRlKDIzLCJkaXYiLDEzKSxndCgyNCxJOHQsMiwxLCJidXR0b24iLDIwKSgy''@;'; put 'put ''NSxSOHQsMiwwLCJidXR0b24iLDIxKSxoZSgpLGd0KDI2LEw4dCwzLDAsImRpdiIsMjIpLGhlKCkoKSgpLEd0KDI3LCJkaXYiLDIzKSxoZSgpLGd0KDI4LE84dCwxLDEyLCJhcHAtZWRpdC1yZWNvcmQiLDI0KSxkZSgyOSwiZGl2IiwyNSwwKSxndCgzMSxQOHQsMiwwLCJkaXYiLDI2KSxkZSgz''@;'; put 'put ''MiwiZGl2IiwyNyksRnQoImZpbGVEcmFnZ2VkT3ZlciIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5vblNob3dVcGxvYWRNb2RhbCgpKX0pLGRlKDMzLCJkaXYiLDI4KSxndCgzNCxGOHQsOSwyLCJkaXYiLDI5KSxkZSgzNSwiZGl2IiwzMCksZ3QoMzYsVTh0LDEwLDYsImg0IiwzMSks''@;'; put 'put ''aGUoKSxndCgzNyxYOHQsNCwzLCJkaXYiLDMyKSgzOCxKOHQsNSwxLCJkaXYiLDMzKSxoZSgpLGRlKDM5LCJkaXYiLDM0KSxndCg0MCx0N3QsNCwyLCJkaXYiLDM1KSxkZSg0MSwiZGl2IiwzNikoNDIsImRpdiIsMzcpLEd0KDQzLCJob3QtdGFibGUiLDM4LDEpLGhlKCksZGUoNDUsImRpdiIp''@;'; put 'put ''LGd0KDQ2LGk3dCw1LDIsImNsci10b29sdGlwIiwzOSkoNDcsbzd0LDMsMSwicCIsNDApLGhlKCksZ3QoNDgsbDd0LDE2LDYsImRpdiIsNDEpLGRlKDQ5LCJjbHItbW9kYWwiLDQyKSxwaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksdmkoaC5zdWJtaXRM''@;'; put 'put ''aW1pdE5vdGljZSxNKXx8KGguc3VibWl0TGltaXROb3RpY2U9TSksQ3QoTSl9KSxkZSg1MCwiaDMiLDgpLExlKDUxLCJOb3RpY2UiKSxoZSgpLGRlKDUyLCJkaXYiLDkpKDUzLCJwIiw0MyksTGUoNTQpLGhlKCkoKSxkZSg1NSwiZGl2IiwyMykoNTYsImJ1dHRvbiIsNDQpLEZ0KCJjbGljayIs''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5zdWJtaXRMaW1pdE5vdGljZT0hMSl9KSxMZSg1NywiIENhbmNlbCAiKSxoZSgpLGRlKDU4LCJidXR0b24iLDQ0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGgudXBsb2FkUGFyc2VkRmlsZXMoKSxDdChoLnN1Ym1pdExp''@;'; put 'put ''bWl0Tm90aWNlPSExKX0pLExlKDU5LCIgU3VibWl0ICIpLGhlKCkoKSgpLGRlKDYwLCJjbHItbW9kYWwiLDQyKSxwaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksdmkoaC5iYWRFZGl0LE0pfHwoaC5iYWRFZGl0PU0pLEN0KE0pfSksZGUoNjEsImgzIiw4''@;'; put 'put ''KSxMZSg2MiksaGUoKSxkZSg2MywiZGl2Iiw5KSg2NCwicCIpLExlKDY1KSxoZSgpKCksZGUoNjYsImRpdiIsMjMpKDY3LCJidXR0b24iLDQ0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguYmFkRWRpdD0hMSl9KSxMZSg2OCwiIE9rICIpLGhlKCkoKSgpLGRlKDY5''@;'; put 'put ''LCJjbHItbW9kYWwiLDQyKSxwaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksdmkoaC5wa051bGwsTSl8fChoLnBrTnVsbD1NKSxDdChNKX0pLGRlKDcwLCJoMyIsOCksTGUoNzEsIkVycm9yIiksaGUoKSxkZSg3MiwiZGl2Iiw5KSg3MywicCIpLExlKDc0''@;'; put 'put ''LCIgTnVsbCB2YWx1ZXMgb3IgaW5jb3JyZWN0IGRhdGEgdHlwZXMgY2Fubm90IGJlIHN1Ym1pdHRlZCBmb3IgUHJpbWFyeSBLZXkgY29sdW1ucyAiKSxoZSgpKCksZGUoNzUsImRpdiIsMjMpKDc2LCJidXR0b24iLDQ1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGgucGtO''@;'; put 'put ''dWxsPSExLEN0KGguYmFkRWRpdD0hMSl9KSxMZSg3NywiIE9rICIpLGhlKCkoKSgpLGRlKDc4LCJjbHItbW9kYWwiLDQyKSxwaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksdmkoaC5ub1BrTnVsbCxNKXx8KGgubm9Qa051bGw9TSksQ3QoTSl9KSxkZSg3''@;'; put 'put ''OSwiaDMiLDgpLExlKDgwLCJFcnJvciIpLGhlKCksZGUoODEsImRpdiIsOSkoODIsInAiKSxMZSg4MywiSW5jb3JyZWN0IGRhdGEgdHlwZXMgaW4gbm9uLVByaW1hcnkgS2V5IGNvbHVtbnMiKSxoZSgpKCksZGUoODQsImRpdiIsMjMpKDg1LCJidXR0b24iLDQ1KSxGdCgiY2xpY2siLGZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIHd0KGYpLGgubm9Qa051bGw9ITEsQ3QoaC5iYWRFZGl0PSExKX0pLExlKDg2LCIgT2sgIiksaGUoKSgpKCksZGUoODcsImNsci1tb2RhbCIsNDYpLHBpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSx2aShoLnBrRHVwcyxNKXx8KGgu''@;'; put 'put ''cGtEdXBzPU0pLEN0KE0pfSksZGUoODgsImgzIiw4KSxMZSg4OSwiRXJyb3IiKSxoZSgpLGRlKDkwLCJkaXYiLDkpKDkxLCJwIiksTGUoOTIsIiBEdXBsaWNhdGUgdmFsdWVzIGNhbm5vdCBiZSBzdWJtaXR0ZWQgZm9yIFByaW1hcnkgS2V5IGNvbHVtbnMgIiksaGUoKSxkZSg5MywicCIpLExl''@;'; put 'put ''KDk0LCJEdXBsaWNhdGVzIGZvdW5kOiIpLGhlKCksZ3QoOTUsYzd0LDMsNCwic3BhbiIsNDcpLGhlKCksZGUoOTYsImRpdiIsMjMpKDk3LCJidXR0b24iLDQ1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgucGtEdXBzPSExKX0pLExlKDk4LCIgT2sgIiksaGUoKSgp''@;'; put 'put ''KCksZGUoOTksImNsci1tb2RhbCIsNDIpLHBpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSx2aShoLnRvb0xvbmcsTSl8fChoLnRvb0xvbmc9TSksQ3QoTSl9KSxkZSgxMDAsImgzIiw4KSxMZSgxMDEsIkVycm9yIiksaGUoKSxkZSgxMDIsImRpdiIsOSko''@;'; put 'put ''MTAzLCJwIiksTGUoMTA0LCIgVGhlIGZvbGxvd2luZyBjb2x1bW5zIGhhdmUgdmFsdWVzIHRoYXQgZXhjZWVkIGxlbmd0aCBsaW1pdHM6ICIpLGhlKCksZ3QoMTA1LHU3dCwyLDMsInAiLDQ4KSxoZSgpLGRlKDEwNiwiZGl2IiwyMykoMTA3LCJidXR0b24iLDQ1KSxGdCgiY2xpY2siLGZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIHd0KGYpLGgudG9vTG9uZz0hMSxDdChoLmNsZWFuRXhjZWVkKCkpfSksTGUoMTA4LCIgT2sgIiksaGUoKSgpKCkoKSgpKCkoKSgpLGd0KDEwOSxkN3QsMTQsMCwiZGl2Iiw0OSksZGUoMTEwLCJjbHItbW9kYWwiLDUwKSxwaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5j''@;'; put 'put ''dGlvbihNKXtyZXR1cm4gd3QoZiksdmkoaC5maWx0ZXIsTSl8fChoLmZpbHRlcj1NKSxDdChNKX0pLGRlKDExMSwiaDMiLDUxKSxMZSgxMTIsIiBGaWx0ZXIgZm9yIHRhYmxlOiAiKSxkZSgxMTMsInNwYW4iKSxMZSgxMTQpLGhlKCkoKSxkZSgxMTUsImRpdiIsOSksZ3QoMTE2LGg3dCwyLDAs''@;'; put 'put ''ImFwcC1xdWVyeSIsMzkpLGhlKCksZGUoMTE3LCJkaXYiLDIzKSgxMTgsImJ1dHRvbiIsNTIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5yZXNldEZpbHRlcigpKX0pLExlKDExOSwiIHJlc2V0IGZpbHRlciAiKSxoZSgpLGRlKDEyMCwiYnV0dG9uIiw1MyksRnQo''@;'; put 'put ''ImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLmZpbHRlcj0hMSl9KSxMZSgxMjEsIiBDYW5jZWwgIiksaGUoKSxkZSgxMjIsImJ1dHRvbiIsNTQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5zZW5kQ2xhdXNlKCkpfSksTGUoMTIzLCIgT2sgIiks''@;'; put 'put ''aGUoKSgpKCksZGUoMTI0LCJjbHItbW9kYWwiLDQyKSxwaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksdmkoaC5xdWVyeUVycixNKXx8KGgucXVlcnlFcnI9TSksQ3QoTSl9KSxkZSgxMjUsImgzIiw4KSxMZSgxMjYsIkVycm9yIiksaGUoKSxkZSgxMjcs''@;'; put 'put ''ImRpdiIsOSkoMTI4LCJwIiksTGUoMTI5KSxoZSgpKCksZGUoMTMwLCJkaXYiLDIzKSgxMzEsImJ1dHRvbiIsNTUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5xdWVyeUVycj0hMSl9KSxMZSgxMzIsIiBDYW5jZWwgIiksaGUoKSxkZSgxMzMsImJ1dHRvbiIsNDUp''@;'; put 'put ''LEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5xdWVyeUVycj0hMSl9KSxMZSgxMzQsIiBPayAiKSxoZSgpKCkoKSxkZSgxMzUsImNsci1tb2RhbCIsNTYpLHBpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSx2aShoLmRpc2NhcmRT''@;'; put 'put ''b3VyY2VGaWxlLE0pfHwoaC5kaXNjYXJkU291cmNlRmlsZT1NKSxDdChNKX0pLGRlKDEzNiwiaDMiLDUxKSxMZSgxMzcsIldhcm5pbmciKSxoZSgpLGRlKDEzOCwiZGl2Iiw5KSxMZSgxMzksIiBUaGlzIGFjdGlvbiB3aWxsIGRpc2NhcmQgdGhlIHNvdXJjZSBmaWxlIGFuZCBpdCdzIGxvYWRl''@;'; put 'put ''ZCBkYXRhICIpLGRlKDE0MCwiYiIpLExlKDE0MSksaGUoKSxMZSgxNDIsIiBEbyB5b3Ugd2lzaCB0byBwcm9jZWVkPyAiKSxoZSgpLGRlKDE0MywiZGl2IiwyMykoMTQ0LCJidXR0b24iLDUzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguZGlzY2FyZFNvdXJjZUZp''@;'; put 'put ''bGU9ITEpfSksTGUoMTQ1LCIgQ2FuY2VsICIpLGhlKCksZGUoMTQ2LCJidXR0b24iLDU3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGguZGlzY2FyZFNvdXJjZUZpbGU9ITEsQ3QoaC5kaXNjYXJkUGVuZGluZ0V4Y2VsKCEwKSl9KSxMZSgxNDcsIiBPayAiKSxoZSgpKCko''@;'; put 'put ''KSxkZSgxNDgsImNsci1tb2RhbCIsNTYpLHBpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSx2aShoLmZpbGVQYXNzd29yZE1vZGFsLE0pfHwoaC5maWxlUGFzc3dvcmRNb2RhbD1NKSxDdChNKX0pLGRlKDE0OSwiaDMiLDUxKSxMZSgxNTAsIiBQYXNzd29y''@;'; put 'put ''ZCBQcm90ZWN0ZWQgRmlsZSAiKSxoZSgpLGRlKDE1MSwiZGl2Iiw1OCkoMTUyLCJwIiw0MyksTGUoMTUzLCJQbGVhc2UgZW50ZXIgcGFzc3dvcmQ6IiksaGUoKSxHdCgxNTQsImlucHV0Iiw1OSwyKSxoZSgpLGRlKDE1NiwiZGl2IiwyMyksZ3QoMTU3LGY3dCwyLDAsInAiLDYwKSxkZSgxNTgs''@;'; put 'put ''ImJ1dHRvbiIsNTMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksaC5maWxlUGFzc3dvcmRNb2RhbD0hMSxDdChoLmZpbGVQYXNzd29yZFN1YmplY3QubmV4dCh2b2lkIDApKX0pLExlKDE1OSwiIENhbmNlbCB1cGxvYWQgIiksaGUoKSxkZSgxNjAsImJ1dHRvbiIsNjEpLEZ0''@;'; put 'put ''KCJjbGljayIsZnVuY3Rpb24oKXt3dChmKTtjb25zdCBNPXZvKDE1NSk7cmV0dXJuIGguZmlsZVBhc3N3b3JkTW9kYWw9ITEsQ3QoaC5maWxlUGFzc3dvcmRTdWJqZWN0Lm5leHQoTS52YWx1ZSkpfSksTGUoMTYxLCIgVW5sb2NrICIpLGhlKCkoKSgpLGRlKDE2MiwiY2xyLW1vZGFsIiw1Niks''@;'; put 'put ''cGkoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLHZpKGgubWFudWFsRmlsZUVkaXRNb2RhbCxNKXx8KGgubWFudWFsRmlsZUVkaXRNb2RhbD1NKSxDdChNKX0pLGRlKDE2MywiaDMiLDUxKSxMZSgxNjQsIldhcm5pbmciKSxoZSgpLGRlKDE2NSwiZGl2Iiw5''@;'; put 'put ''KSxMZSgxNjYsIiBNYW51YWxseSBlZGl0aW5nIHRoaXMgZGF0YSB3aWxsIG1lYW4gdGhlIHNvdXJjZSBmaWxlICIpLGRlKDE2NywiYiIpLExlKDE2OCksaGUoKSxMZSgxNjksIiB3aWxsIGJlIGRpc2NhcmRlZC4gRG8geW91IHdpc2ggdG8gcHJvY2VlZD8gIiksaGUoKSxkZSgxNzAsImRpdiIs''@;'; put 'put ''MjMpKDE3MSwiYnV0dG9uIiw1MyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLm1hbnVhbEZpbGVFZGl0TW9kYWw9ITEpfSksTGUoMTcyLCIgQ2FuY2VsICIpLGhlKCksZGUoMTczLCJidXR0b24iLDU3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYp''@;'; put 'put ''LGgubWFudWFsRmlsZUVkaXRNb2RhbD0hMSxDdChoLnByZXZpZXdUYWJsZUVkaXRDb25maXJtKCkpfSksTGUoMTc0LCIgT2sgIiksaGUoKSgpKCksZGUoMTc1LCJhcHAtZGF0YXNldC1pbmZvIiw2MikscGkoIm9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSx2aShoLmRhdGFz''@;'; put 'put ''ZXRJbmZvLE0pfHwoaC5kYXRhc2V0SW5mbz1NKSxDdChNKX0pLEZ0KCJyb3dDbGlja2VkIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5kYXRhc2V0SW5mb01vZGFsUm93Q2xpY2tlZChNKSl9KSxoZSgpLGRlKDE3NiwiYXBwLXZpZXdib3hlcyIsNjMpLHBpKCJ2aWV3Ym94TW9kYWxD''@;'; put 'put ''aGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSx2aShoLnZpZXdib3hlcyxNKXx8KGgudmlld2JveGVzPU0pLEN0KE0pfSksaGUoKX1pZigyJmQpe2NvbnN0IGY9dm8oMTU1KTtmZSgpLHhlKCJ1cGxvYWRlciIsaC51cGxvYWRlcikoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFs''@;'; put 'put ''U3RhdGljQmFja2Ryb3AiLCExKSgiY2xyTW9kYWxDbG9zYWJsZSIsIlZhbGlkYXRpbmctRFEiPT09aC5leGNlbFVwbG9hZFN0YXRlKSxmaSgiY2xyTW9kYWxPcGVuIixoLnNob3dVcGxvYWRNb2RhbCksZmUoMTMpLGZpKCJuZ01vZGVsIixoLmVuY29kaW5nKSx4ZSgiZGlzYWJsZWQiLCIiIT1o''@;'; put 'put ''LmZpbGVuYW1lKSxmZSg0KSxmaSgibmdNb2RlbCIsaC5lbmNvZGluZykseGUoImRpc2FibGVkIiwiIiE9aC5maWxlbmFtZSksZmUoMykseGUoIm5nSWYiLCFoLmV4Y2VsRmlsZVBhcnNpbmcmJiFoLnVwbG9hZExvYWRpbmcpLGZlKCkseGUoIm5nSWYiLCFoLmV4Y2VsRmlsZVBhcnNpbmcmJiFo''@;'; put 'put ''LnVwbG9hZExvYWRpbmcpLGZlKDIpLHhlKCJuZ0lmIiwiVmFsaWRhdGluZyIhPT1oLmV4Y2VsVXBsb2FkU3RhdGUpLGZlKCkseGUoIm5nSWYiLCJWYWxpZGF0aW5nLURRIj09PWguZXhjZWxVcGxvYWRTdGF0ZSksZmUoKSx4ZSgibmdJZiIsaC5leGNlbEZpbGVQYXJzaW5nKSxmZSgyKSx4ZSgi''@;'; put 'put ''bmdJZiIsaC5jdXJyZW50RWRpdFJlY29yZEluZGV4Pi0xKSxmZSgzKSx4ZSgibmdJZiIsIWgudmFsaWRhdGlvbkRvbmUmJmguc3VibWl0KSxmZSgzKSx4ZSgibmdJZiIsaC50YWJsZVRydWUpLGZlKCkseHIoImNsci1jb2wtbGctMTIiLCFoLnRhYmxlVHJ1ZSksZmUoKSx4ZSgibmdWYXIiLHJw''@;'; put 'put ''KDY3LEU4dCxudWxsPT1oLmxpYmRzP251bGw6aC5saWJkcy5zcGxpdCgiLiIpWzBdLG51bGw9PWgubGliZHM/bnVsbDpoLmxpYmRzLnNwbGl0KCIuIilbMV0pKSxmZSgpLHhlKCJuZ0lmIixoLnRhYmxlVHJ1ZSksZmUoKSx4ZSgibmdJZiIsIVdzKDcwLGc2ZSkuaW5jbHVkZXMoaC5xdWVyeVRl''@;'; put 'put ''eHQpKSxmZSgpLHhlKCJuZ0NsYXNzIixucCg3MixUOHQsIVdzKDcxLGc2ZSkuaW5jbHVkZXMoaC5xdWVyeVRleHQpKSksZmUoKSx4ZSgibmdJZiIsIWgudGFibGVUcnVlKSxmZSgzKSx4cigiaGlkZGVuIixoLmhvdFRhYmxlLmhpZGRlbikseGUoImxpY2Vuc2VLZXkiLGguaG90VGFibGUubGlj''@;'; put 'put ''ZW5zZUtleSksZmUoMykseGUoIm5nSWYiLGgudGFibGVUcnVlJiYhaC5yZXN0cmljdGlvbnMucmVtb3ZlQWRkUmVjb3JkQnV0dG9uKSxmZSgpLHhlKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkIT09aC5JbmZpbml0eSYmaC5kYXRhU291cmNlJiZoLmRh''@;'; put 'put ''dGFTb3VyY2UubGVuZ3RoPmgubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQpLGZlKCkseGUoIm5nSWYiLGguc3VibWl0KSxmZSgpLGZpKCJjbHJNb2RhbE9wZW4iLGguc3VibWl0TGltaXROb3RpY2UpLGZlKDUpLFJyKCIgRHVlIHRvIGN1cnJlbnQgbGljZW5jZSwgb25s''@;'; put 'put ''eSAiLGgubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0LCIgcm93cyBpbiBhIGZpbGUgd2lsbCBiZSBzdWJtaXR0ZWQuIFRvIHJlbW92ZSB0aGUgcmVzdHJpY3Rpb24sIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyAiKSxmZSg2KSxmaSgiY2xyTW9kYWxPcGVu''@;'; put 'put ''IixoLmJhZEVkaXQpLGZlKDIpLF9yKGguYmFkRWRpdFRpdGxlfHwiRXJyb3IiKSxmZSgzKSxfcihoLmJhZEVkaXRDYXVzZSksZmUoNCksZmkoImNsck1vZGFsT3BlbiIsaC5wa051bGwpLGZlKDkpLGZpKCJjbHJNb2RhbE9wZW4iLGgubm9Qa051bGwpLGZlKDkpLGZpKCJjbHJNb2RhbE9wZW4i''@;'; put 'put ''LGgucGtEdXBzKSxmZSg4KSx4ZSgibmdGb3JPZiIsaC5kdXBsaWNhdGVQa0luZGV4ZXMpLGZlKDQpLGZpKCJjbHJNb2RhbE9wZW4iLGgudG9vTG9uZyksZmUoNikseGUoIm5nRm9yT2YiLGguZXhjZWVkQ2VsbHMpLGZlKDQpLHhlKCJuZ0lmIixoLm51bGxWYXJpYWJsZXMpLGZlKCksZmkoImNs''@;'; put 'put ''ck1vZGFsT3BlbiIsaC5maWx0ZXIpLHhlKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoNCksUnIoIiAiLGgubGliZHMsIiAiKSxmZSgyKSx4ZSgibmdJZiIsaC5maWx0ZXIpLGZlKDYpLHhlKCJjbHJMb2FkaW5nIixoLnN1Ym1pdExvYWRpbmcpLGZlKDIp''@;'; put 'put ''LGZpKCJjbHJNb2RhbE9wZW4iLGgucXVlcnlFcnIpLGZlKDUpLF9yKGgucXVlcnlFcnJNZXNzYWdlKSxmZSg2KSxmaSgiY2xyTW9kYWxPcGVuIixoLmRpc2NhcmRTb3VyY2VGaWxlKSx4ZSgiY2xyTW9kYWxTaXplIiwieGwiKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDYpLF9yKGguZmls''@;'; put 'put ''ZW5hbWUpLGZlKDcpLGZpKCJjbHJNb2RhbE9wZW4iLGguZmlsZVBhc3N3b3JkTW9kYWwpLHhlKCJjbHJNb2RhbFNpemUiLCJtZCIpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoOSkseGUoIm5nSWYiLGguZmlsZVVubG9ja0Vycm9yKSxmZSgzKSx4ZSgiZGlzYWJsZWQiLGYudmFsdWUubGVu''@;'; put 'put ''Z3RoPDEpLGZlKDIpLGZpKCJjbHJNb2RhbE9wZW4iLGgubWFudWFsRmlsZUVkaXRNb2RhbCkseGUoImNsck1vZGFsU2l6ZSIsInhsIikoImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSg2KSxfcihoLmZpbGVuYW1lKSxmZSg3KSxmaSgib3BlbiIsaC5kYXRhc2V0SW5mbykseGUoImRzbWV0YSIs''@;'; put 'put ''aC5kc21ldGEpKCJ2ZXJzaW9ucyIsaC52ZXJzaW9ucyksZmUoKSxmaSgidmlld2JveE1vZGFsIixoLnZpZXdib3hlcyl9fSxkZXBlbmRlbmNpZXM6W2M2ZSx3dSxzcyx5byxRbCxkTCxRcyxZcyx1MSxPbCxvdSxLdSxCMCx4MixUMix1cyxKWSwkVWUsWFksWUwscDcsbTcsZzcseF8sd3csUXgs''@;'; put 'put ''dTZlLGQ2ZSxoNmUsc08sQmVlLHY4dCx5OHQsXzh0LHA2ZV0sc3R5bGVzOlsiLmNhcmRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MDtib3JkZXI6MH0uYnV0dG9uQmFyW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjJweCAxMHB4O2FsaWduLWl0ZW1zOmNlbnRlcn0udGVzdFJl''@;'; put 'put ''ZFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kOiNmMDBjIWltcG9ydGFudH1ob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICAuZmlyc3RDb2x1bW5IZWFkZXJTdHlsZSBidXR0b24uY2hhbmdlVHlwZXtkaXNwbGF5Om5vbmV9aG90LXRhYmxlW19uZ2NvbnRl''@;'; put 'put ''bnQtJUNPTVAlXSAgICAgLmhhbmRzb250YWJsZSB0Ym9keSB0aC5odF9faGlnaGxpZ2h0LnByaW1hcnlLZXlIZWFkZXJTdHlsZSwgaG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmhhbmRzb250YWJsZSB0aGVhZCB0aC5odF9faGlnaGxpZ2h0LnByaW1hcnlLZXlIZWFkZXJTdHls''@;'; put 'put ''ZXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDZiMDBiMCFpbXBvcnRhbnR9aG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLnByaW1hcnlLZXlIZWFkZXJTdHlsZXtiYWNrZ3JvdW5kLWNvbG9yOiMzMDZiMDA2ZSFpbXBvcnRhbnR9aG90LXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAg''@;'; put 'put ''dGgucmVhZG9ubHlDZWxsIGRpdntvcGFjaXR5Oi40fWhvdC10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICAgIHRkLnJlYWRvbmx5Q2VsbHtvcGFjaXR5Oi41fS5zdWJtaXQtcmVhc29uW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OjEyMHB4O21heC1oZWlnaHQ6MTIwcHg7aGVpZ2h0''@;'; put 'put ''OjEyMHB4fS5pbmZvQmFyW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjE0cHg7YmFja2dyb3VuZDojNDk1OTY3O2NvbG9yOiNmZmY7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzozcHg7Zm9udC1zaXplOjE2cHg7aGVpZ2h0OjMwcHg7dGV4dC1vdmVyZmxvdzplbGxpcHNpcztvdmVy''@;'; put 'put ''ZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwfS5pbmZvQmFyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHNwYW5bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjgwJX0uaW5mb0Jhcltfbmdjb250ZW50LSVDT01QJV06aG92ZXJ7aGVpZ2h0OnVuc2V0O3doaXRlLXNwYWNlOm5vcm1hbH0uaW5m''@;'; put 'put ''b0Jhcltfbmdjb250ZW50LSVDT01QJV06aG92ZXIgICBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDp1bnNldH0ucGtIZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6IzY4NzY4Mjtjb2xvcjojZmZmO21hcmdpbjotMXB4fS5oZWFkZXJCYXJbX25nY29udGVudC0lQ09N''@;'; put 'put ''UCVde2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtYmctY29sb3IpfS5lcnJvci1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDozMHB4O2hlaWdodDozMHB4O2NvbG9yOnJlZH0uYnRuQ3RybFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxh''@;'; put 'put ''eTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uY2FyZC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHRyYW5zcGFyZW50fS5oaWRkZW5bX25nY29udGVudC0lQ09NUCVde3Zpc2liaWxpdHk6aGlkZGVufS5teS1kcm9wLXpvbmVbX25nY29u''@;'; put 'put ''dGVudC0lQ09NUCVde2JvcmRlcjpzb2xpZCAxcHggbGlnaHRncmF5O2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOiNmNWY1ZjU7Ym94LXNoYWRvdzppbnNldCAwIDAgNHB4IDJweCAjYTdhNWE1MmI7aGVpZ2h0OjUwdmh9Lm52LWZpbGUtb3Zlcltfbmdjb250ZW50LSVDT01QJV17Ym9y''@;'; put 'put ''ZGVyOnNvbGlkIDJweCBncmVlbn0uZmlsZS1kcm9wLXRleHRbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246Y2VudGVyfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2OHB4KXsucHJvZ3Jlc1N0YXRpY1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDo5cHghaW1wb3J0''@;'; put 'put ''YW50fS5wcm9ncmVzc1tfbmdjb250ZW50LSVDT01QJV0sIC5wcm9ncmVzcy1zdGF0aWNbX25nY29udGVudC0lQ09NUCVde3dpZHRoOmNhbGMoMTAwJSAtIDE0cHgpfX0uaG90RWRpdG9yW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0uZXhjZWwtcGFyc2luZ1tfbmdjb250''@;'; put 'put ''ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmV9LmV4Y2VsLXBhcnNpbmdbX25nY29udGVudC0lQ09NUCVdICAgLmRldGFpbHNbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowO3Bvc2l0aW9u''@;'; put 'put ''OmFic29sdXRlO3RvcDotNDVweH0uZWRpdC1yZWNvcmQtc3Bpbm5lcltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2JhY2tncm91bmQ6I2ZmZjk7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7''@;'; put 'put ''d2lkdGg6MTAwJTt6LWluZGV4OjUwMH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0ODBweCl7LnByb2dyZXNTdGF0aWNbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MzJweCFpbXBvcnRhbnR9LmNhcmQtYmxvY2tbX25nY29udGVudC0lQ09NUCVdLCAuY2FyZC1mb290ZXJb''@;'; put 'put ''X25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MTBweCAwIDB9fS5jb250ZW50LWFyZWFbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MCAuOHJlbSAuOHJlbSFpbXBvcnRhbnQ7cGFkZGluZy10b3A6MH0uZHJvcC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpmaXhlZDtpbnNl''@;'; put 'put ''dDowO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7bWFyZ2luOjFweDtib3JkZXI6MnB4IGRhc2hlZCAjZmZmO3otaW5kZXg6LTF9LmRyb3AtYXJlYVtfbmdjb250ZW50LSVDT01QJV0gICBzcGFuW19uZ2NvbnRlbnQtJUNPTVAlXXtm''@;'; put 'put ''b250LXNpemU6MjBweDttYXJnaW4tdG9wOjIwcHg7cGFkZGluZzoxMHB4O2JhY2tncm91bmQ6I2RiZGJkYjtib3JkZXItcmFkaXVzOjVweDtjb2xvcjojMDAwfSNzdWJtaXRCdG5bX25nY29udGVudC0lQ09NUCVdLCAjY2FuY2VsU3VibWl0QnRuW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDox''@;'; put 'put ''NTBweH0udmlldy10YWJsZVtfbmdjb250ZW50LSVDT01QJV17Zm9udC1zaXplOmluaGVyaXQhaW1wb3J0YW50O2NvbG9yOiMxYTU3YmIhaW1wb3J0YW50fUBtZWRpYSAobWF4LXdpZHRoOiA5OTJweCl7Lmljb24tY29sbGFwc2VbX25nY29udGVudC0lQ09NUCVdICAgLnRleHRbX25nY29udGVu''@;'; put 'put ''dC0lQ09NUCVde2Rpc3BsYXk6bm9uZX19Il19KX19cmV0dXJuIGN9KSgpO2NvbnN0IHA3dD1be3BhdGg6IjpsaWJNZW0iLGNvbXBvbmVudDokSH0se3BhdGg6IjpsaWJNZW0vOmZpbHRlcklkIixjb21wb25lbnQ6JEh9LHtwYXRoOiJlZGl0LXJlY29yZC86bGliTWVtIixjb21wb25lbnQ6JEh9''@;'; put 'put ''LHtwYXRoOiJlZGl0LXJlY29yZC86bGliTWVtLzpmaWx0ZXJJZCIsY29tcG9uZW50OiRIfV07bGV0IGc3dD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0''@;'; put 'put ''YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTG8samMuZm9yQ2hpbGQocDd0KSxqY119KX19cmV0dXJuIGN9KSgpLGJBPSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1r''@;'; put 'put ''aSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMbyxqMCxMbyxEYyxLMl19KX19cmV0dXJuIGN9KSgpLHplZT0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAy''@;'; put 'put ''NzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTG8sajAsTG8sRGMsajksdkEsSzJdfSl9fXJldHVybiBjfSkoKSxtNmU9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3Rh''@;'; put 'put ''dGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xvLGowLExvLERjLHplZSxuOSxjMWUsS21lLGJBLEsyXX0pfX1yZXR1cm4gY30pKCk7WUgoKTtsZXQgbTd0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOlttNmUsTG8sRGMsZzd0LGowLG45LmZvclJvb3QoKSxqOSxLMixfdyx2QSxiQSxjMWUsemVlXX0pfX1yZXR1cm4g''@;'; put 'put ''Y30pKCksdjd0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9bmdPbkRlc3Ryb3koKXt9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJh''@;'; put 'put ''cHAtaG9tZS1yb3V0ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJkd0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltlZ119KX19cmV0dXJuIGN9KSgpO2NvbnN0IGI3dD1bInNp''@;'; put 'put ''ZGViYXJOYXYiXSx5N3Q9WyIqIl0sXzd0PSgpPT5bIi92aWV3L3VzZXJuYXYvdXNlcnMiXSx3N3Q9KCk9PlsiL3ZpZXcvdXNlcm5hdi9ncm91cHMiXSxDN3Q9KCk9PlsiL3ZpZXcvdXNlcm5hdi9yb2xlcyJdO2Z1bmN0aW9uIFM3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImEi''@;'; put 'put ''LDE4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDMpLm5hdmlnYXRlVG9WaWV3ZXIoKSl9KSxMZSgxLCJEYXRhIiksaGUoKX19ZnVuY3Rpb24gTTd0KGMsbCl7MSZjJiYoZGUoMCwiYSIsMTkpLExlKDEsIkFQSSBFeHBsb3JlciIpLGhlKCkpfWZ1bmN0aW9uIHg3''@;'; put 'put ''dChjLGwpezEmYyYmKGRlKDAsImEiLDIwKSxMZSgxLCJMaW5lYWdlIiksaGUoKSl9ZnVuY3Rpb24gRTd0KGMsbCl7MSZjJiYoZGUoMCwiYSIsMjEpLExlKDEsIk1ldGFkYXRhIiksaGUoKSl9ZnVuY3Rpb24gVDd0KGMsbCl7MSZjJiYoZGUoMCwiYSIsMjIpLExlKDEsIiBVc2VycyIpLGhlKCkp''@;'; put 'put ''fWZ1bmN0aW9uIEE3dChjLGwpezEmYyYmKGRlKDAsImEiLDIzKSxMZSgxLCJTdWJtaXR0ZWQiKSxoZSgpKX1mdW5jdGlvbiBrN3QoYyxsKXsxJmMmJihkZSgwLCJhIiwyNCksTGUoMSwiVG8gQXBwcm92ZSIpLGhlKCkpfWZ1bmN0aW9uIEQ3dChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1kcm9w''@;'; put 'put ''ZG93bi1tZW51IiksZ3QoMSxTN3QsMiwwLCJhIiwxMSkoMixNN3QsMiwwLCJhIiwxMikoMyx4N3QsMiwwLCJhIiwxMykoNCxFN3QsMiwwLCJhIiwxNCkoNSxUN3QsMiwwLCJhIiwxNSkoNixBN3QsMiwwLCJhIiwxNikoNyxrN3QsMiwwLCJhIiwxNyksaGUoKSksMiZjKXtjb25zdCBhPU9lKDIp''@;'; put 'put ''O2ZlKCkseGUoIm5nSWYiLGEuaXNNYWluUm91dGUoInZpZXciKSksZmUoKSx4ZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgidmlldyIpJiYiU0FTVklZQSI9PT1hLnNlcnZlclR5cGUpLGZlKCkseGUoIm5nSWYiLGEuaXNNYWluUm91dGUoInZpZXciKSYmIlNBUzkiPT09YS5zZXJ2ZXJUeXBlKSxm''@;'; put 'put ''ZSgpLHhlKCJuZ0lmIixhLmlzTWFpblJvdXRlKCJ2aWV3IikmJiJTQVM5Ij09PWEuc2VydmVyVHlwZSksZmUoKSx4ZSgibmdJZiIsYS5pc01haW5Sb3V0ZSgidmlldyIpKSxmZSgpLHhlKCJuZ0lmIixhLmlzTWFpblJvdXRlKCJhcHByb3ZlIikpLGZlKCkseGUoIm5nSWYiLGEuaXNNYWluUm91''@;'; put 'put ''dGUoImFwcHJvdmUiKSl9fWZ1bmN0aW9uIEk3dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNykoMSwiY2xyLWRyb3Bkb3duIikoMiwiYnV0dG9uIiw4KSxMZSgzKSxHdCg0LCJjbHItaWNvbiIsOSksaGUoKSxndCg1LEQ3dCw4LDcsImNsci1kcm9wZG93bi1tZW51IiwxMCksaGUoKSgpKSwy''@;'; put 'put ''JmMpe2NvbnN0IGE9T2UoKTtmZSgzKSxScigiICIsYS5nZXRTdWJQYWdlKCksIiAiKX19ZnVuY3Rpb24gUjd0KGMsbCl7MSZjJiZHdCgwLCJjbHItdGFiLWNvbnRlbnQiKX1mdW5jdGlvbiBMN3QoYyxsKXsxJmMmJkd0KDAsImNsci10YWItY29udGVudCIpfWZ1bmN0aW9uIE83dChjLGwpe2lm''@;'; put 'put ''KDEmYyYmKGRlKDAsImNsci10YWIiKSgxLCJidXR0b24iLDI2KSgyLCJwIiwyNyksR3QoMywiY2xyLWljb24iLDMyKSxMZSg0LCIgUm9sZXMgIiksaGUoKSgpLGd0KDUsTDd0LDEsMCwiY2xyLXRhYi1jb250ZW50IiwzMCksaGUoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKCkseGUoInJvdXRl''@;'; put 'put ''ckxpbmsiLFdzKDIsQzd0KSksZmUoNCkseGUoImNscklmQWN0aXZlIixhLmlzTWFpblJvdXRlKCIvdmlldy91c2VybmF2L3JvbGVzIikpfX1mdW5jdGlvbiBQN3QoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdGFicyIsMjUpKDEsImNsci10YWIiKSgyLCJidXR0b24iLDI2KSgzLCJwIiwyNyks''@;'; put 'put ''R3QoNCwiY2xyLWljb24iLDI4KSxMZSg1LCIgVXNlcnMiKSxoZSgpKCksR3QoNiwiY2xyLXRhYi1jb250ZW50IiksaGUoKSxkZSg3LCJjbHItdGFiIikoOCwiYnV0dG9uIiwyNikoOSwicCIsMjcpLEd0KDEwLCJjbHItaWNvbiIsMjkpLExlKDExLCIgR3JvdXBzIiksaGUoKSgpLGd0KDEyLFI3''@;'; put 'put ''dCwxLDAsImNsci10YWItY29udGVudCIsMzApLGhlKCksZ3QoMTMsTzd0LDYsMywiY2xyLXRhYiIsMzEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDIpLHhlKCJyb3V0ZXJMaW5rIixXcyg0LF83dCkpLGZlKDYpLHhlKCJyb3V0ZXJMaW5rIixXcyg1LHc3dCkpLGZlKDQpLHhlKCJjbHJJ''@;'; put 'put ''ZkFjdGl2ZSIsYS5pc01haW5Sb3V0ZSgiL3ZpZXcvdXNlcm5hdi9ncm91cHMiKSksZmUoKSx4ZSgibmdJZiIsIlNBUzkiPT09YS5zZXJ2ZXJUeXBlKX19ZnVuY3Rpb24gRjd0KGMsbCl7MSZjJiYoZGUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiKSgxLCJhIiwzMyksTGUoMiwiVGFibGVzIiksaGUo''@;'; put 'put ''KSxkZSgzLCJhIiwzNCksTGUoNCwiRXhjZWwgTWFwcyIpLGhlKCksZGUoNSwiYSIsMzUpLExlKDYsIk11bHRpIExvYWQiKSxoZSgpKCkpfWZ1bmN0aW9uIEg3dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNykoMSwiY2xyLWRyb3Bkb3duIikoMiwiYnV0dG9uIiw4KSxMZSgzKSxHdCg0LCJj''@;'; put 'put ''bHItaWNvbiIsOSksaGUoKSxndCg1LEY3dCw3LDAsImNsci1kcm9wZG93bi1tZW51IiwxMCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgzKSxScigiICIsYS5nZXRTdWJQYWdlKCksIiAiKX19bGV0IHQ0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgpe3RoaXMuX3JvdXRl''@;'; put 'put ''cj1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5fc2FzU2VydmljZT1oLHRoaXMuc2Nyb2xsZWRUb0JvdHRvbT1uZXcgcXIsdGhpcy5zaWRlYmFyT3Blbj0hMCx0aGlzLnNpZGViYXJXaWR0aD1udWxsLHRoaXMuc2lkZWJhck1heFdpZHRoPW51bGwsdGhpcy5yZXNpemluZz0hMSx0aGlzLnNh''@;'; put 'put ''c2pzQ29uZmlnPW5ldyBmaC5TQVNqc0NvbmZpZyx0aGlzLnNhc2pzQ29uZmlnPXRoaXMuX3Nhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLnNlcnZlclR5cGU9dGhpcy5fc2FzU2VydmljZS5nZXRTZXJ2ZXJUeXBlKCl9bmdPbkluaXQoKXt0aGlzLmV2ZW50U2VydmljZS5vblNpZGVi''@;'; put 'put ''YXJUb2dnbGUuc3Vic2NyaWJlKGE9Pnt0aGlzLnNpZGViYXJPcGVuPWE/YS5vcGVuOiF0aGlzLnNpZGViYXJPcGVuLHRoaXMuZXZlbnRTZXJ2aWNlLmRpc3BhdGNoRXZlbnQoInJlc2l6ZSIpfSl9b25UcmVlU2Nyb2xsKGEpe2xldCBkPWEudGFyZ2V0O2Quc2Nyb2xsVG9wPj1kLnNjcm9sbEhl''@;'; put 'put ''aWdodC1kLm9mZnNldEhlaWdodC0xMCYmdGhpcy5zY3JvbGxlZFRvQm90dG9tLmVtaXQoKX1pc01haW5Sb3V0ZShhKXtyZXR1cm4gdGhpcy5fcm91dGVyLnVybC5pbmNsdWRlcyhhKX1nZXRTdWJQYWdlKCl7cmV0dXJuIHRoaXMuX3JvdXRlci51cmwuc3BsaXQoIi8iKVsyXX1uYXZpZ2F0ZVRv''@;'; put 'put ''Vmlld2VyKCl7S24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249IiIsdGhpcy5fcm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEiKX1yZXNpemVTdGFydCgpe3RoaXMucmVzaXppbmc9ITAsZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXS5zdHlsZS5jc3NUZXh0''@;'; put 'put ''PSJ1c2VyLXNlbGVjdDogbm9uZSJ9cmVzaXplRW5kKCl7dGhpcy5yZXNpemluZz0hMSxkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLnN0eWxlLmNzc1RleHQ9IiJ9b25Nb3VzZU1vdmUoYSl7aWYodGhpcy5yZXNpemluZyl7dGhpcy5zaWRlYmFyV2lkdGg9YS5jbGll''@;'; put 'put ''bnRYO2xldCBkPWRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIm5hdi10cmVlIilbMF07dGhpcy5zaWRlYmFyV2lkdGgmJnRoaXMuaXNPdmVyZmxvd24oZCkmJih0aGlzLnNpZGViYXJNYXhXaWR0aD10aGlzLnNpZGViYXJXaWR0aD49Mzc1P3RoaXMuc2lkZWJhcldpZHRoKzEwOnRo''@;'; put 'put ''aXMuc2lkZWJhck1heFdpZHRoKX19b25Nb3VzZVVwKGEpe3RoaXMucmVzaXppbmcmJnRoaXMucmVzaXplRW5kKCl9aXNPdmVyZmxvd24oYSl7cmV0dXJuIGEuc2Nyb2xsV2lkdGg+YS5jbGllbnRXaWR0aH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxj''@;'; put 'put ''KShHZShMcyksR2UocGMpLEdlKEpzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtc2lkZWJhciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJm5hKGI3dCw1KSwyJmQpe2xldCBmO3hpKGY9RWkoKSkmJihoLnNpZGViYXJOYXY9''@;'; put 'put ''Zi5maXJzdCl9fSxob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsxJmQmJkZ0KCJtb3VzZW1vdmUiLGZ1bmN0aW9uKHYpe3JldHVybiBoLm9uTW91c2VNb3ZlKHYpfSwwLFUzKSgibW91c2V1cCIsZnVuY3Rpb24odil7cmV0dXJuIGgub25Nb3VzZVVwKHYpfSwhMSxVMyl9LG91dHB1dHM6e3Nj''@;'; put 'put ''cm9sbGVkVG9Cb3R0b206InNjcm9sbGVkVG9Cb3R0b20ifSxuZ0NvbnRlbnRTZWxlY3RvcnM6eTd0LGRlY2xzOjksdmFyczoxMyxjb25zdHM6W1sic2lkZWJhck5hdiIsIiJdLFsiaWQiLCJzaWRlYmFyTmF2Il0sWyJjbGFzcyIsImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHN1Yi1k''@;'; put 'put ''cm9wZG93biIsNCwibmdJZiJdLFsiY2xhc3MiLCJwLTEwIiw0LCJuZ0lmIl0sWzEsIm5hdi1kaXZpZGVyIl0sWzEsIm5hdi10cmVlIiwzLCJzY3JvbGwiXSxbMSwicmVzaXplLWhhbmRsZSIsMywibW91c2Vkb3duIl0sWzEsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJzdWIt''@;'; put 'put ''ZHJvcGRvd24iXSxbImNsckRyb3Bkb3duVHJpZ2dlciIsIiIsMSwiZHJvcGRvd24tdG9nZ2xlIiwiYnRuIiwiYnRuLXByaW1hcnkiXSxbInNoYXBlIiwiY2FyZXQgZG93biJdLFs0LCJjbHJJZk9wZW4iXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3Rp''@;'; put 'put ''dmUiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdml5YS1hcGktZXhwbG9yZXIiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIiw0LCJuZ0lmIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwi''@;'; put 'put ''L3ZpZXcvbGluZWFnZSIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy9tZXRhZGF0YSIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGlu''@;'; put 'put ''ayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2Iiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsNCwibmdJZiJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9yZXZpZXcvYXBwcm92ZS9zdWJtaXR0ZWQiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZl''@;'; put 'put ''Iiw0LCJuZ0lmIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3Jldmlldy9hcHByb3ZlL3RvYXBwcm92ZSIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiLDQsIm5nSWYiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3Rp''@;'; put 'put ''dmUiLDMsImNsaWNrIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdml5YS1hcGktZXhwbG9yZXIiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3ZpZXcvbGluZWFnZSIsInJv''@;'; put 'put ''dXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy9tZXRhZGF0YSIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvdmlldy91c2VybmF2Iiwi''@;'; put 'put ''cm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdLFsiY2xyVmVydGljYWxOYXZMaW5rIiwiIiwicm91dGVyTGluayIsIi9yZXZpZXcvYXBwcm92ZS9zdWJtaXR0ZWQiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJyb3V0ZXJMaW5rIiwiL3Jl''@;'; put 'put ''dmlldy9hcHByb3ZlL3RvYXBwcm92ZSIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbMSwicC0xMCJdLFsiY2xyVGFiTGluayIsIiIsMSwidXNlci1uYXYtYnRuIiwzLCJyb3V0ZXJMaW5rIl0sWzEsInplcm8tbWFyZ2luIl0sWyJzaGFwZSIsInVzZXIiXSxbInNoYXBlIiwidXNlcnMi''@;'; put 'put ''XSxbNCwiY2xySWZBY3RpdmUiXSxbNCwibmdJZiJdLFsic2hhcGUiLCJibG9ja3MtZ3JvdXAiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvaG9tZS90YWJsZXMiLCJyb3V0ZXJMaW5rQWN0aXZlIiwiYWN0aXZlIl0sWyJjbHJWZXJ0aWNhbE5hdkxpbmsiLCIiLCJy''@;'; put 'put ''b3V0ZXJMaW5rIiwiL2hvbWUvZXhjZWwtbWFwcyIsInJvdXRlckxpbmtBY3RpdmUiLCJhY3RpdmUiXSxbImNsclZlcnRpY2FsTmF2TGluayIsIiIsInJvdXRlckxpbmsiLCIvaG9tZS9tdWx0aS1sb2FkIiwicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihk''@;'; put 'put ''LGgpe2lmKDEmZCl7Y29uc3QgZj1PbigpO2xvKCksZGUoMCwiY2xyLXZlcnRpY2FsLW5hdiIsMSwwKSxndCgyLEk3dCw2LDEsImRpdiIsMikoMyxQN3QsMTQsNiwiY2xyLXRhYnMiLDMpKDQsSDd0LDYsMSwiZGl2IiwyKSxHdCg1LCJkaXYiLDQpLGRlKDYsImRpdiIsNSksRnQoInNjcm9sbCIs''@;'; put 'put ''ZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGgub25UcmVlU2Nyb2xsKE0pKX0pLFdyKDcpLGhlKCksZGUoOCwic3BhbiIsNiksRnQoIm1vdXNlZG93biIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5yZXNpemVTdGFydCgpKX0pLGhlKCkoKX0yJmQmJihfZCgid2lkdGgiLGguc2lk''@;'; put 'put ''ZWJhcldpZHRoLCJweCIpKCJtYXgtd2lkdGgiLGguc2lkZWJhck1heFdpZHRoLCJweCIpLHhyKCJjbG9zZWQiLCFoLnNpZGViYXJPcGVuKSgicmVzaXppbmciLGgucmVzaXppbmcpLGZlKDIpLHhlKCJuZ0lmIixoLmlzTWFpblJvdXRlKCJ2aWV3IikpLGZlKCkseGUoIm5nSWYiLGguaXNNYWlu''@;'; put 'put ''Um91dGUoInZpZXcvdXNlcm5hdiIpKSxmZSgpLHhlKCJuZ0lmIixoLmlzTWFpblJvdXRlKCJob21lIikpLGZlKDQpLHhyKCJyZXNpemluZyIsaC5yZXNpemluZykpfSxkZXBlbmRlbmNpZXM6W3lvLE9sLFJ5LHgyLHZtLHltLEM3LGJtLG1tLF83LHpZLFpZLGlnLGg3LGY3LHUxLGN5XSxzdHls''@;'; put 'put ''ZXM6WyIuY2xyLXZlcnRpY2FsLW5hdltfbmdjb250ZW50LSVDT01QJV0gICAubmF2LWxpbmsuYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fWNsci12ZXJ0aWNhbC1uYXZbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjI3MnB4O21pbi13aWR0''@;'; put 'put ''aDoyNzJweDtoZWlnaHQ6MTAwJTttYXgtd2lkdGg6Mzc1cHg7cG9zaXRpb246cmVsYXRpdmU7Ym94LXNoYWRvdzowIDAgNXB4ICMwMDAwMDAxZn1jbHItdmVydGljYWwtbmF2W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zdW4tZHJvcGRvd25bX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6''@;'; put 'put ''MzZweH1jbHItdmVydGljYWwtbmF2W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5uYXYtdHJlZVtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7b3ZlcmZsb3cteTphdXRvfWNsci12ZXJ0aWNhbC1uYXYuY2xvc2VkW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tbGVmdDotMjcycHh9Y2xy''@;'; put 'put ''LXZlcnRpY2FsLW5hdltfbmdjb250ZW50LSVDT01QJV0gICAucmVzaXplLWhhbmRsZVtfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7cmlnaHQ6LTNweDtib3JkZXItcmlnaHQ6NHB4IHNvbGlkICM4MGI0NDE7Y3Vyc29yOmNvbC1yZXNpemU7b3Bh''@;'; put 'put ''Y2l0eTowO3RyYW5zaXRpb246YWxsIC4xcyBlYXNlLWluLW91dH1jbHItdmVydGljYWwtbmF2W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5yZXNpemUtaGFuZGxlW19uZ2NvbnRlbnQtJUNPTVAlXTpob3ZlcntvcGFjaXR5Oi41fWNsci12ZXJ0aWNhbC1uYXZbX25nY29udGVudC0lQ09NUCVdICAg''@;'; put 'put ''LnJlc2l6ZS1oYW5kbGUucmVzaXppbmdbX25nY29udGVudC0lQ09NUCVde29wYWNpdHk6MX1jbHItdmVydGljYWwtbmF2LnJlc2l6aW5nW19uZ2NvbnRlbnQtJUNPTVAlXXt0cmFuc2l0aW9uOm5vbmUhaW1wb3J0YW50fS5uYXYtZGl2aWRlcltfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjA7''@;'; put 'put ''Ym9yZGVyLXRvcDoxcHggc29saWQgI2QzZDNkMzttYXJnaW4tYm90dG9tOjB9LnBhZ2UtdGl0bGVbX25nY29udGVudC0lQ09NUCVde21hcmdpbjowO2ZvbnQtc2l6ZToxOHB4O3RleHQtYWxpZ246Y2VudGVyfS56ZXJvLW1hcmdpbltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjB9LnVzZXIt''@;'; put 'put ''bmF2LWJ0bltfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzowIDJweH0jc2lkZWJhck5hdltfbmdjb250ZW50LSVDT01QJV17ei1pbmRleDoyMDB9QG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KXsjc2lkZWJhck5hdltfbmdjb250ZW50LSVDT01QJV17cG9zaXRpb246YWJzb2x1dGU7Ym90dG9t''@;'; put 'put ''OjA7dG9wOjB9fSJdfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBON3QoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwxMyl9ZnVuY3Rpb24gVjd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLWljb24iLDE0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3Qg''@;'; put 'put ''aD1PZSgyKTtyZXR1cm4gaC5saWJyYXJpZXNTZWFyY2g9IiIsQ3QoaC5saWJyYXJ5T25GaWx0ZXIoKSl9KSxoZSgpfX1mdW5jdGlvbiBCN3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiw4KSgxLCJkaXYiLDkpKDIsImlucHV0IiwxMCwwKSxwaSgibmdN''@;'; put 'put ''b2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpO3JldHVybiB2aShmLmxpYnJhcmllc1NlYXJjaCxoKXx8KGYubGlicmFyaWVzU2VhcmNoPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLmxpYnJhcnlPbkZpbHRlcigp''@;'; put 'put ''KX0pLGhlKCksZ3QoNCxON3QsMSwwLCJjbHItaWNvbiIsMTEpKDUsVjd0LDEsMCwiY2xyLWljb24iLDEyKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPXZvKDMpLGQ9T2UoKTtmZSgyKSxmaSgibmdNb2RlbCIsZC5saWJyYXJpZXNTZWFyY2gpLGZlKDIpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0''@;'; put 'put ''aDwxKSxmZSgpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gajd0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMTMpfWZ1bmN0aW9uIHo3dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci1pY29uIiwxNCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0''@;'; put 'put ''KGEpLE9lKCk7Y29uc3QgaD12bygzKSxmPU9lKDIpLiRpbXBsaWNpdCx2PU9lKCk7cmV0dXJuIGgudmFsdWU9IiIsZi5zZWFyY2hTdHJpbmc9IiIsQ3Qodi50cmVlT25GaWx0ZXIoZiwidGFibGVzIikpfSksaGUoKX19ZnVuY3Rpb24gVTd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUo''@;'; put 'put ''MCwiY2xyLXRyZWUtbm9kZSIsOCkoMSwiZGl2Iiw5KSgyLCJpbnB1dCIsMTksMSkscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoMikuJGltcGxpY2l0O3JldHVybiB2aShmLnNlYXJjaFN0cmluZyxoKXx8KGYuc2VhcmNoU3RyaW5nPWgpLEN0KGgpfSks''@;'; put 'put ''RnQoImtleXVwIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMikuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLnRyZWVPbkZpbHRlcihoLCJ0YWJsZXMiKSl9KSxoZSgpLGd0KDQsajd0LDEsMCwiY2xyLWljb24iLDExKSg1LHo3dCwxLDAsImNsci1pY29uIiwxMiksaGUoKSgpfWlmKDIm''@;'; put 'put ''Yyl7Y29uc3QgYT12bygzKSxkPU9lKDIpLiRpbXBsaWNpdDtmZSgyKSxmaSgibmdNb2RlbCIsZC5zZWFyY2hTdHJpbmcpLGZlKDIpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gWjd0KGMsbCl7MSZjJiZHdCgw''@;'; put 'put ''LCJjbHItaWNvbiIsMjYpfWZ1bmN0aW9uIFc3dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDI3KX1mdW5jdGlvbiBZN3QoYyxsKXsxJmMmJihkZSgwLCJjbHItdG9vbHRpcC1jb250ZW50IiwyOSkoMSwic3BhbiIpLExlKDIsIiBUbyB1bmxvY2sgYWxsIHRhYmxlcywgY29udGFjdCBzdXBw''@;'; put 'put ''b3J0QGRhdGFjb250cm9sbGVyLmlvICIpLGhlKCkoKSl9ZnVuY3Rpb24gRzd0KGMsbCl7MSZjJiYobGkoMCksZ3QoMSxZN3QsMywwLCJjbHItdG9vbHRpcC1jb250ZW50IiwyOCksY2koKSl9ZnVuY3Rpb24gJDd0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXRvb2x0aXAi''@;'; put 'put ''KSgxLCJidXR0b24iLDIxKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS5uZ1ZhcixmPU9lKCkuJGltcGxpY2l0LHY9T2UoMikuJGltcGxpY2l0LE09T2UoKTtyZXR1cm4gQ3QoaD8iIjpNLm9uVGFibGVDbGljayhmLHYpKX0pLGxpKDIsMjIpLGd0KDMsWjd0LDEsMCwiY2xy''@;'; put 'put ''LWljb24iLDIzKSg0LFc3dCwxLDAsImNsci1pY29uIiwyNCksY2koKSxMZSg1KSxoZSgpLGd0KDYsRzd0LDIsMCwibmctY29udGFpbmVyIiwyNSksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC5uZ1ZhcixkPU9lKCkuJGltcGxpY2l0LGg9T2UoMikuJGltcGxpY2l0LGY9T2UoKTtmZSgpLHhyKCJk''@;'; put 'put ''Yy1sb2NrZWQtY29udHJvbCIsYSkoImFjdGl2ZSIsZi5saWJUYWJBY3RpdmUoaC5MSUJSQVJZUkVGLGQpKSxmZSgpLHhlKCJuZ1N3aXRjaCIsZC5pbmNsdWRlcygiLUZDIikpLGZlKCkseGUoIm5nU3dpdGNoQ2FzZSIsITApLGZlKCkseGUoIm5nU3dpdGNoQ2FzZSIsITEpLGZlKCksUnIoIiAi''@;'; put 'put ''LGQucmVwbGFjZSgiLUZDIiwiIiksIiAiKSxmZSgpLHhlKCJuZ0lmIixhKX19ZnVuY3Rpb24gSzd0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRyZWUtbm9kZSIpLGd0KDEsJDd0LDcsOSwiY2xyLXRvb2x0aXAiLDIwKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC5pbmRleCxkPU9lKDMpO2ZlKCks''@;'; put 'put ''eGUoIm5nVmFyIixhKzE+ZC5saWNlbmNlU3RhdGUudmFsdWUudGFibGVzX2luX2xpYnJhcnlfbGltaXQpfX1mdW5jdGlvbiBxN3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwxNiksRnQoImNsaWNrIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9l''@;'; put 'put ''KCkuJGltcGxpY2l0LHY9T2UoKTtyZXR1cm4gdi50cmVlTm9kZUNsaWNrZWQoaCxmKSxDdCh2LmxpYj1mLkxJQlJBUllSRUYpfSkscGkoImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCkuJGltcGxpY2l0O3JldHVybiB2aShmLmV4cGFuZGVkLGgpfHwo''@;'; put 'put ''Zi5leHBhbmRlZD1oKSxDdChoKX0pLGRlKDEsInAiLDE3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpLiRpbXBsaWNpdCxmPU9lKCk7cmV0dXJuIGYubGliPWguTElCUkFSWVJFRixDdChmLmxpYnJhcnlPbkNsaWNrKGguTElCUkFSWVJFRixoKSl9KSxHdCgyLCJj''@;'; put 'put ''bHItaWNvbiIsMTgpLExlKDMpLGhlKCksZ3QoNCxVN3QsNiwzLCJjbHItdHJlZS1ub2RlIiwyKSg1LEs3dCwyLDEsImNsci10cmVlLW5vZGUiLDMpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0O3hyKCJjbHItZXhwYW5kZWQiLGEuZXhwYW5kZWQpLGZpKCJjbHJFeHBhbmRl''@;'; put 'put ''ZCIsYS5leHBhbmRlZCkseGUoImNsckxvYWRpbmciLGEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSxmZSgzKSxScigiICIsYS5MSUJSQVJZUkVGLCIgIiksZmUoKSx4ZSgibmdJZiIsYS50YWJsZXMpLGZlKCkseGUoIm5nRm9yT2YiLGEudGFibGVzKX19ZnVuY3Rpb24gWDd0KGMsbCl7aWYo''@;'; put 'put ''MSZjJiYobGkoMCksZ3QoMSxxN3QsNiw3LCJjbHItdHJlZS1ub2RlIiwxNSksY2koKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCkseGUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIEo3dChjLGwpezEmYyYmKGRlKDAsImRpdiIsMzApKDEsImRpdiIsMzEpKDIsInNwYW4iLDMy''@;'; put 'put ''KSxMZSgzLCIgTG9hZGluZy4uLiAiKSxoZSgpKCkoKSl9ZnVuY3Rpb24gUTd0KGMsbCl7MSZjJiYoZGUoMCwicCIsMzYpLExlKDEsIiBQbGVhc2Ugc2VsZWN0IGEgdGFibGUgIiksaGUoKSl9ZnVuY3Rpb24gZTl0KGMsbCl7MSZjJiYoZGUoMCwicCIsMzYpLExlKDEsIiBObyBFZGl0YWJsZSBU''@;'; put 'put ''YWJsZXMgQ29uZmlndXJlZCAiKSxoZSgpKX1mdW5jdGlvbiB0OXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDMzKSxHdCgxLCJpbWciLDM0KSxndCgyLFE3dCwyLDAsInAiLDM1KSgzLGU5dCwyLDAsInAiLDM1KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgyKSx4ZSgibmdJZiIsKG51''@;'; put 'put ''bGw9PWEudHJlZU5vZGVMaWJyYXJpZXM/bnVsbDphLnRyZWVOb2RlTGlicmFyaWVzLmxlbmd0aCk+MCksZmUoKSx4ZSgibmdJZiIsKG51bGw9PWEudHJlZU5vZGVMaWJyYXJpZXM/bnVsbDphLnRyZWVOb2RlTGlicmFyaWVzLmxlbmd0aCk8MSl9fWxldCBuOXQ9KCgpPT57Y2xhc3MgY3tjb25z''@;'; put 'put ''dHJ1Y3RvcihhLGQsaCxmLHYsTSl7dGhpcy5yb3V0ZT1hLHRoaXMucm91dGVyPWQsdGhpcy5saWNlbmNlU2VydmljZT1oLHRoaXMuaGVscGVyU2VydmljZT1mLHRoaXMuZXZlbnRTZXJ2aWNlPXYsdGhpcy5zYXNTZXJ2aWNlPU0sdGhpcy50cmVlTm9kZUxpYnJhcmllcz1udWxsLHRoaXMubGli''@;'; put 'put ''cmFyaWVzU2VhcmNoPSIiLHRoaXMubGliPSIiLHRoaXMudGFibGU9IiIsdGhpcy5lbmNvZGluZz0iVVRGLTgiLHRoaXMubG9hZGluZz0hMCx0aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZX1jb2xsYXBzZUxpYnJhcnlJdGVtcyhhLGQpe2EuZm9yRWFj''@;'; put 'put ''aChoPT57aC5MSUJSQVJZSUQhPT1kLkxJQlJBUllJRCYmKGguZXhwYW5kZWQ9ITEpfSl9dHJlZU5vZGVDbGlja2VkKGEsZCl7IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlTGlicmFyeUl0ZW1zKHRoaXMubGlicmFyaWVzLGQpfWxpYnJhcnlPbkNsaWNrKGEsZCl7''@;'; put 'put ''ZC5leHBhbmRlZD0hZC5leHBhbmRlZCxkLmV4cGFuZGVkJiYhdGhpcy50YWJsZSYmdGhpcy5zZWxlY3RMaWJyYXJ5KGEsITEsZCksdGhpcy5jb2xsYXBzZUxpYnJhcnlJdGVtcyh0aGlzLmxpYnJhcmllcyxkKX1zZWxlY3RMaWJyYXJ5KGEsZCxoKXtoLmxvYWRpbmdUYWJsZXM9ITA7bGV0IGYs''@;'; put 'put ''dj1bXTtpZih0aGlzLmxpYnNBbmRUYWJsZXMmJihmPXRoaXMubGlic0FuZFRhYmxlc1thXSx0aGlzLnRhYmxlPXZvaWQgMCwiUGxlYXNlIHNlbGVjdCBsaWJyYXJ5IiE9PWEpKXtsZXQgTT1mLmZpbHRlcihmdW5jdGlvbihEKXtyZXR1cm4tMT09PXYuaW5kZXhPZihEKSYmKHYucHVzaChEKSwh''@;'; put 'put ''MCl9KTt0aGlzLnRhYmxlcz1NLEtuLmVkaXRvci5saWJyYXJpZXM9dGhpcy5saWJyYXJpZXN9S24uZWRpdG9yLmxpYnJhcnk9YSxkfHx0aGlzLmNsZWFyR2xvYmFsc0ZpbHRlcigpLGgubG9hZGluZ1RhYmxlcz0hMSxoLmV4cGFuZGVkPSEwfXNlbGVjdFRhYmxlKGEsZCl7dmFyIGg9dGhpczty''@;'; put 'put ''ZXR1cm4gZWUoZnVuY3Rpb24qKCl7aC5saWJUYWI9aC5saWIrIi4iK2gudGFibGUsaC5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksS24uZWRpdG9yLnRhYmxlPWEsZHx8aC5jbGVhckdsb2JhbHNGaWx0ZXIoKX0pKCl9Y2xlYXJHbG9iYWxzRmlsdGVyKCl7S24uZWRpdG9yLmZpbHRlci5s''@;'; put 'put ''aWJkcz0iIixLbi5lZGl0b3IuZmlsdGVyLndoZXJlQ2xhdXNlPSIiLEtuLmVkaXRvci5maWx0ZXIuZ3JvdXBMb2dpYz0iIixLbi5lZGl0b3IuZmlsdGVyLmNsYXVzZXM9W10sS24uZWRpdG9yLmZpbHRlci52YWxzPVtdLEtuLmVkaXRvci5maWx0ZXIuY29scz1bXX1saWJUYWJBY3RpdmUoYSxk''@;'; put 'put ''KXtyZXR1cm4hKCF0aGlzLmxpYnx8IXRoaXMudGFibGUpJiZhPT09dGhpcy5saWImJmQ9PT10aGlzLnRhYmxlfXRyZWVPbkZpbHRlcihhLGQpe3RoaXMuaGVscGVyU2VydmljZS50cmVlT25GaWx0ZXIoYSxkKX1saWJyYXJ5T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9u''@;'; put 'put ''RmlsdGVyKHRoaXMudHJlZU5vZGVMaWJyYXJpZXMsdGhpcy5saWJyYXJpZXNTZWFyY2gsIkxJQlJBUllSRUYiKSxLbi5saW5lYWdlLmxpYnJhcmllc1NlYXJjaD10aGlzLmxpYnJhcmllc1NlYXJjaH1vblRhYmxlQ2xpY2soYSxkKXt0aGlzLnRhYmxlPWEsdGhpcy5saWI9ZC5MSUJSQVJZUkVG''@;'; put 'put ''LHRoaXMuc2VsZWN0VGFibGUoYSksdGhpcy5lZGl0VGFibGUoKX1lZGl0VGFibGUoKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9lZGl0b3IvIit0aGlzLmxpYisiLiIrdGhpcy50YWJsZSl9Z2V0TGlicmFyeVRhYmxlU3RhdGUoKXtpZihudWxsIT09S24uZWRpdG9yLnRyZWVOb2RlTGli''@;'; put 'put ''cmFyaWVzJiYodGhpcy50cmVlTm9kZUxpYnJhcmllcz1Lbi5lZGl0b3IudHJlZU5vZGVMaWJyYXJpZXMpLCIiIT09S24uZWRpdG9yLmxpYnJhcnkpe3RoaXMubGliPUtuLmVkaXRvci5saWJyYXJ5O2xldCBhPW51bGw7dGhpcy50cmVlTm9kZUxpYnJhcmllcyYmKGE9dGhpcy50cmVlTm9kZUxp''@;'; put 'put ''YnJhcmllcy5maW5kKGQ9PmQuTElCUkFSWVJFRj09PXRoaXMubGliKSksdGhpcy5zZWxlY3RMaWJyYXJ5KEtuLmVkaXRvci5saWJyYXJ5LCEwLGEpfX1nZXRGcm9tR2xvYmFscygpe3RoaXMubGlic0FuZFRhYmxlcz1Lbi5lZGl0b3IubGlic0FuZFRhYmxlcyx0aGlzLmxpYnJhcmllcz1Lbi5l''@;'; put 'put ''ZGl0b3IubGlicmFyaWVzLHRoaXMuZ2V0TGlicmFyeVRhYmxlU3RhdGUoKSx0aGlzLmxvYWRpbmc9ITF9bmdBZnRlckNvbnRlbnRJbml0KCl7S24uZWRpdG9yLnN0YXJ0dXBTZXQ/dGhpcy5nZXRGcm9tR2xvYmFscygpOnRoaXMuZXZlbnRTZXJ2aWNlLm9uU3RhcnR1cERhdGFMb2FkZWQuc3Vi''@;'; put 'put ''c2NyaWJlKCgpPT57dGhpcy5nZXRGcm9tR2xvYmFscygpfSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoTHMpLEdlKEN1KSxHZShkMSksR2UoR3UpLEdlKHBjKSxHZShKcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9TnIoe3R5cGU6Yyxz''@;'; put 'put ''ZWxlY3RvcnM6W1siaG9tZS1jb21wb25lbnQiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjgsdmFyczo0LGNvbnN0czpbWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbInNlYXJjaFRyZWVJbnB1dCIsIiJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJ''@;'; put 'put ''ZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQtYmxvY2siXSxbImNsYXNzIiwic3Bpbm5lci13cmFwcGVyLWZ1bGxwYWdlIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm5vLXRhYmxlLXNlbGVjdGVkIiw0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0s''@;'; put 'put ''WzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImNscklucHV0IiwiIiwiYXBwU3RlYWxGb2N1cyIsIiIsInBsYWNlaG9sZGVyIiwiTGlicmFyaWVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFw''@;'; put 'put ''ZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4''@;'; put 'put ''cGFuZGVkQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsInJhY2stc2VydmVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwi''@;'; put 'put ''Y2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIlRhYmxlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFs0LCJuZ1ZhciJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLDEsImNsci10cmVlbm9kZS1saW5r''@;'; put 'put ''IiwzLCJjbGljayJdLFszLCJuZ1N3aXRjaCJdLFsic2hhcGUiLCJib2x0Iiw0LCJuZ1N3aXRjaENhc2UiXSxbInNoYXBlIiwidGFibGUiLDQsIm5nU3dpdGNoQ2FzZSJdLFs0LCJuZ0lmIl0sWyJzaGFwZSIsImJvbHQiXSxbInNoYXBlIiwidGFibGUiXSxbImNsclBvc2l0aW9uIiwiYm90dG9t''@;'; put 'put ''LXJpZ2h0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4iXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0IiwiY2xyU2l6ZSIsImxnIl0sWzEsInNwaW5uZXItd3JhcHBlci1mdWxscGFnZSJdLFsxLCJsb2FkaW5nU3Bpbm5lciJdLFsxLCJzcGlubmVyIl0sWzEsIm5vLXRhYmxlLXNl''@;'; put 'put ''bGVjdGVkIl0sWyJzcmMiLCIvU0FTU3RvcmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2VzL3NlbGVjdC10YWJsZS1wbmciLCJhbHQiLCJzZWxlY3QgdGFibGUgaWNvbiIsMSwic2VsZWN0LXRhYmxlLWljb24iXSxbImNsYXNzIiwidGV4dC1j''@;'; put 'put ''ZW50ZXIgY29sb3ItZ3JheSBtdC0xMCIsImNkcy10ZXh0Iiwic2VjdGlvbiIsNCwibmdJZiJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIiwxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiLCJtdC0xMCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImFwcC1zaWRlYmFyIiko''@;'; put 'put ''MSwiY2xyLXRyZWUiKSxndCgyLEI3dCw2LDMsImNsci10cmVlLW5vZGUiLDIpKDMsWDd0LDIsMSwibmctY29udGFpbmVyIiwzKSxoZSgpKCksZGUoNCwiZGl2Iiw0KSg1LCJkaXYiLDUpLGd0KDYsSjd0LDQsMCwiZGl2Iiw2KSg3LHQ5dCw0LDIsImRpdiIsNyksaGUoKSgpKSwyJmQmJihmZSgy''@;'; put 'put ''KSx4ZSgibmdJZiIsKG51bGw9PWgudHJlZU5vZGVMaWJyYXJpZXM/bnVsbDpoLnRyZWVOb2RlTGlicmFyaWVzLmxlbmd0aCk+MCksZmUoKSx4ZSgibmdGb3JPZiIsaC50cmVlTm9kZUxpYnJhcmllcyksZmUoMykseGUoIm5nSWYiLGgubG9hZGluZyksZmUoKSx4ZSgibmdJZiIsIWgubG9hZGlu''@;'; put 'put ''ZykpfSxkZXBlbmRlbmNpZXM6W1FsLFFzLFlzLFNoLE9kLGRnLE9sLEIwLHgyLElkLHA3LG03LGc3LHQ0LHNzLHlvLGIyLGlwLHd3LGU0XSxzdHlsZXM6WyJjbHItdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93''@;'; put 'put ''cmFwfS5jYXJkLWJsb2NrW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJTtwYWRkaW5nOjB9Lm5vLXRhYmxlLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6MTAwJX0gIGNsci1pY29uLmlzLWJsdWUsICAgY2xyLWljb24uaXMtaW5mb3tm''@;'; put 'put ''aWxsOiM2YTkyMzV9LnNwaW5uZXItd3JhcHBlci1mdWxscGFnZVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9Il19KX19cmV0dXJuIGN9KSgpO2NvbnN0IHI5dD1j''@;'; put 'put ''PT57Zm9yKGNvbnN0IGwgaW4gYylpZigiX19yb3dOdW1fXyIhPT1sKXJldHVybiExO3JldHVybiEwfSxVZWU9Yz0+e2NvbnN0IGE9Yy5tYXRjaCgvUlxbKFxkKylcXUNcWyhcZCspXF0vKTtyZXR1cm4gYT97cm93OnBhcnNlSW50KGFbMV0sMTApLGNvbHVtbjpwYXJzZUludChhWzJdLDEwKX06''@;'; put 'put ''bnVsbH0sdjZlPShjLGwpPT57aWYoYy5zdGFydHNXaXRoKCJBQlNPTFVURSAiKSYmKGM9Yy5yZXBsYWNlKCJBQlNPTFVURSAiLCIiKSksYy5zdGFydHNXaXRoKCJSRUxBVElWRSAiKSl7Y29uc3QgYT1VZWUoYyk7aWYoYSl7Y29uc3R7cm93OmQsY29sdW1uOmh9PWE7Yz1rdS51dGlscy5lbmNv''@;'; put 'put ''ZGVfY2VsbCh7cjpkLTEsYzpoLTF9KX19aWYoYy5zdGFydHNXaXRoKCJNQVRDSCAiKSl7bGV0IGE9IiI7Y29uc3QgZD1jLm1hdGNoKC9DXFtcZCtcXTooLispLyk7ZCYmKGE9ZFsxXSk7Y29uc3QgZj1jLnNwbGl0KCIgIilbMV07bGV0IHY9IiIsTT0tMSxEPSIiO2lmKGlzTmFOKE51bWJlcihm''@;'; put 'put ''KSk/dj1mOk09cGFyc2VJbnQoZiksLTEhPT1NKXtjb25zdCBjZT1sW00tMV07Zm9yKGNvbnN0IGJlIGluIGNlKWlmKCJfX3Jvd051bV9fIiE9PWJlJiZjZVtiZV09PT1hKXtEPWJlK007YnJlYWt9fWVsc2UgZm9yKGxldCBjZT0wO2NlPGwubGVuZ3RoO2NlKyspaWYobFtjZV1bdl09PT1hKXtE''@;'; put 'put ''PXYrKGNlKzEpO2JyZWFrfWNvbnN0IFo9a3UudXRpbHMuZGVjb2RlX2NlbGwoRCksbmU9VWVlKGMpO2lmKG5lKXtjb25zdHtyb3c6Y2UsY29sdW1uOmJlfT1uZTtjPWt1LnV0aWxzLmVuY29kZV9jZWxsKHtyOloucitjZSxjOlouYytiZX0pfX1yZXR1cm4gY30sbzl0PVsiZmlsZVVwbG9hZElu''@;'; put 'put ''cHV0Il07ZnVuY3Rpb24gYTl0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwyOCksR3QoMSwiY2xyLXNwaW5uZXIiLDI5KSxoZSgpKX1mdW5jdGlvbiBzOXQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwzMCl9ZnVuY3Rpb24gbDl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xy''@;'; put 'put ''LWljb24iLDMxKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpO3JldHVybiBoLnNlYXJjaFN0cmluZz0iIixDdChoLnhsbWFwTGlzdE9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rpb24gYzl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7bGkoMCksZGUoMSwiY2xy''@;'; put 'put ''LXRyZWUtbm9kZSIpKDIsImJ1dHRvbiIsMzIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoKS54bG1hcE9uQ2xpY2soaCkpfSksR3QoMywiY2xyLWljb24iLDMzKSxMZSg0KSxoZSgpKCksY2koKX1pZigyJmMpe2NvbnN0IGE9bC4k''@;'; put 'put ''aW1wbGljaXQsZD1PZSgpO2ZlKDIpLHhyKCJhY3RpdmUiLGQuaXNBY3RpdmVYTE1hcChhLmlkKSksZmUoMiksUnIoIiAiLGEuaWQsIiAiKX19ZnVuY3Rpb24gdTl0KGMsbCl7MSZjJiYoZGUoMCwicCIsMzcpLExlKDEsIiBQbGVhc2Ugc2VsZWN0IGEgbWFwICIpLGhlKCkpfWZ1bmN0aW9uIGQ5''@;'; put 'put ''dChjLGwpezEmYyYmKGRlKDAsInAiLDM3KSxMZSgxLCIgTm8gZXhjZWwgbWFwIGlzIGZvdW5kICIpLGhlKCkpfWZ1bmN0aW9uIGg5dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMzQpLEd0KDEsImltZyIsMzUpLGd0KDIsdTl0LDIsMCwicCIsMzYpKDMsZDl0LDIsMCwicCIsMzYpLGhlKCkp''@;'; put 'put ''LDImYyl7Y29uc3QgYT1PZSgpO2ZlKDIpLHhlKCJuZ0lmIixhLnhsbWFwcy5sZW5ndGg+MCksZmUoKSx4ZSgibmdJZiIsYS54bG1hcHMubGVuZ3RoPDEpfX1mdW5jdGlvbiBmOXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDM4KSgxLCJzcGFuIiwzOSksTGUoMiwiIExvYWRpbmcuLi4gIiks''@;'; put 'put ''aGUoKSxkZSgzLCJkaXYiKSg0LCJoNCIpLExlKDUpLGhlKCkoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSg1KSxfcihhLmlzTG9hZGluZ0Rlc2MpfX1mdW5jdGlvbiBwOXQoYyxsKXsxJmMmJkd0KDAsImNsci10YWItY29udGVudCIpfWZ1bmN0aW9uIGc5dChjLGwpezEmYyYmR3QoMCwiY2xy''@;'; put 'put ''LXRhYi1jb250ZW50Iil9ZnVuY3Rpb24gbTl0KGMsbCl7MSZjJiZYbCgwKX1mdW5jdGlvbiB2OXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDQwKSxGdCgiZmlsZURyYWdnZWRPdmVyIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLm9uU2hvd1VwbG9hZE1v''@;'; put 'put ''ZGFsKCkpfSksZGUoMSwiY2xyLXRhYnMiKSgyLCJjbHItdGFiIikoMywiYnV0dG9uIiw0MSksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKTtyZXR1cm4gQ3QoaC5zZWxlY3RlZFRhYj1oLlRhYnNFbnVtLlJ1bGVzKX0pLExlKDQsIlJ1bGVzIiksaGUoKSxndCg1LHA5''@;'; put 'put ''dCwxLDAsImNsci10YWItY29udGVudCIsNDIpLGhlKCksZGUoNiwiY2xyLXRhYiIpKDcsImJ1dHRvbiIsNDEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCk7cmV0dXJuIEN0KGguc2VsZWN0ZWRUYWI9aC5UYWJzRW51bS5EYXRhKX0pLExlKDgsIkRhdGEiKSxoZSgp''@;'; put 'put ''LGd0KDksZzl0LDEsMCwiY2xyLXRhYi1jb250ZW50Iiw0MiksaGUoKSgpLGd0KDEwLG05dCwxLDAsIm5nLWNvbnRhaW5lciIsNDMpLGRlKDExLCJkaXYiLDQ0KSgxMiwiaDMiLDQ1KSxMZSgxMyksaGUoKSxkZSgxNCwiaSIsNDUpLExlKDE1KSxoZSgpLGRlKDE2LCJwIiw0NSksTGUoMTcsIiBS''@;'; put 'put ''dWxlcyBTb3VyY2U6ICIpLGRlKDE4LCJhIiw0NiksTGUoMTkpLGhlKCkoKSxkZSgyMCwicCIsNDUpLExlKDIxLCIgVGFyZ2V0IGRhdGFzZXQ6ICIpLGRlKDIyLCJhIiw0NiksTGUoMjMpLGhlKCkoKSgpLGRlKDI0LCJkaXYiLDQ3KSxHdCgyNSwiaG90LXRhYmxlIiw0OCksaGUoKSgpfWlmKDIm''@;'; put 'put ''Yyl7Y29uc3QgYT1PZSgpLGQ9dm8oNDEpO2ZlKDUpLHhlKCJjbHJJZkFjdGl2ZSIsYS5zZWxlY3RlZFRhYj09PWEuVGFic0VudW0uUnVsZXMpLGZlKDQpLHhlKCJjbHJJZkFjdGl2ZSIsYS5zZWxlY3RlZFRhYj09PWEuVGFic0VudW0uRGF0YSksZmUoKSx4ZSgibmdUZW1wbGF0ZU91dGxldCIs''@;'; put 'put ''ZCksZmUoMyksUnIoIiAiLGEuc2VsZWN0ZWRYTE1hcC5pZCwiICIpLGZlKDIpLF9yKGEuc2VsZWN0ZWRYTE1hcC5kZXNjcmlwdGlvbiksZmUoMykseGUoInJvdXRlckxpbmsiLCIvdmlldy9kYXRhLyIrYS5ydWxlc1NvdXJjZSksZmUoKSxScigiICIsYS5ydWxlc1NvdXJjZSwiICIpLGZlKDMp''@;'; put 'put ''LHhlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvZGF0YS8iK2Euc2VsZWN0ZWRYTE1hcC50YXJnZXREUyksZmUoKSxScigiICIsYS5zZWxlY3RlZFhMTWFwLnRhcmdldERTLCIgIiksZmUoMikseGUoIm11bHRpQ29sdW1uU29ydGluZyIsITApKCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsNTAp''@;'; put 'put ''KCJkYXRhIixhLnNlbGVjdGVkVGFiPT09YS5UYWJzRW51bS5SdWxlcz9hLnhsbWFwUnVsZXM6YS54bERhdGEpKCJjb2xIZWFkZXJzIixhLnNlbGVjdGVkVGFiPT09YS5UYWJzRW51bS5SdWxlcz9hLnhsbWFwUnVsZXNIZWFkZXJzOmEueGxVcGxvYWRIZWFkZXIpKCJjb2x1bW5zIixhLnNlbGVj''@;'; put 'put ''dGVkVGFiPT09YS5UYWJzRW51bS5SdWxlcz9hLnhsbWFwUnVsZXNDb2x1bW5zOmEueGxVcGxvYWRDb2x1bW5zKSgiZmlsdGVycyIsITApKCJoZWlnaHQiLCIxMDAlIikoImFmdGVyR2V0Q29sSGVhZGVyIixhLmFmdGVyR2V0Q29sSGVhZGVyKSgibW9kaWZ5Q29sV2lkdGgiLGEubWF4V2lkdGhD''@;'; put 'put ''aGVja2VyKSgiY2VsbHMiLGEuZ2V0Q2VsbENvbmZpZ3VyYXRpb24pKCJtYXhSb3dzIixhLmhvdFRhYmxlTWF4Um93cykoIm1hbnVhbENvbHVtblJlc2l6ZSIsITApKCJyb3dIZWFkZXJzIixhLnJvd0hlYWRlcnMpKCJyb3dIZWFkZXJXaWR0aCIsMTUpKCJyb3dIZWlnaHRzIiwyMCkoImxpY2Vu''@;'; put 'put ''c2VLZXkiLGEuaG90VGFibGVMaWNlbnNlS2V5KX19ZnVuY3Rpb24gYjl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2Iiw1MSkoMSwiYnV0dG9uIiw1MiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5vblNob3dVcGxvYWRNb2RhbCgpKX0p''@;'; put 'put ''LEd0KDIsImNsci1pY29uIiw1MyksZGUoMywic3BhbiIpLExlKDQsIlVwbG9hZCIpLGhlKCkoKSgpfX1mdW5jdGlvbiB5OXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDUxKSgxLCJidXR0b24iLDUyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0''@;'; put 'put ''KE9lKDIpLnN1Ym1pdEV4Y2VsKCkpfSksR3QoMiwiY2xyLWljb24iLDUzKSxkZSgzLCJzcGFuIiksTGUoNCwiU3VibWl0IiksaGUoKSgpKCl9fWZ1bmN0aW9uIF85dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsNTEpKDEsImJ1dHRvbiIsNTQpLEZ0KCJjbGljayIsZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikuZGlzY2FyZEV4dHJhY3RlZERhdGEoKSl9KSxHdCgyLCJjbHItaWNvbiIsNTUpLGRlKDMsInNwYW4iKSxMZSg0LCJEaXNjYXJkIiksaGUoKSgpKCl9fWZ1bmN0aW9uIHc5dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNDkpLGd0KDEsYjl0''@;'; put 'put ''LDUsMCwiZGl2Iiw1MCkoMix5OXQsNSwwLCJkaXYiLDUwKSgzLF85dCw1LDAsImRpdiIsNTApLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKCkseGUoIm5nSWYiLGEuc3RhdHVzPT09YS5TdGF0dXNFbnVtLlJlYWR5VG9VcGxvYWQpLGZlKCkseGUoIm5nSWYiLGEuc3RhdHVzPT09YS5TdGF0''@;'; put 'put ''dXNFbnVtLlJlYWR5VG9TdWJtaXQpLGZlKCkseGUoIm5nSWYiLGEuc3RhdHVzPT09YS5TdGF0dXNFbnVtLlJlYWR5VG9TdWJtaXQpfX12YXIgcTI9ZnVuY3Rpb24oYyl7cmV0dXJuIGNbYy5Ob01hcFNlbGVjdGVkPTBdPSJOb01hcFNlbGVjdGVkIixjW2MuRmV0Y2hpbmdSdWxlcz0xXT0iRmV0''@;'; put 'put ''Y2hpbmdSdWxlcyIsY1tjLlJlYWR5VG9VcGxvYWQ9Ml09IlJlYWR5VG9VcGxvYWQiLGNbYy5FeHRyYWN0aW5nRGF0YT0zXT0iRXh0cmFjdGluZ0RhdGEiLGNbYy5SZWFkeVRvU3VibWl0PTRdPSJSZWFkeVRvU3VibWl0IixjW2MuU3VibWl0dGluZ0V4dHJhY3RlZERhdGE9NV09IlN1Ym1pdHRp''@;'; put 'put ''bmdFeHRyYWN0ZWREYXRhIixjW2MuU3VibWl0dGluZz02XT0iU3VibWl0dGluZyIsY30ocTJ8fHt9KSxDdz1mdW5jdGlvbihjKXtyZXR1cm4gY1tjLlJ1bGVzPTBdPSJSdWxlcyIsY1tjLkRhdGE9MV09IkRhdGEiLGN9KEN3fHx7fSk7bGV0IGI2ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9y''@;'; put 'put ''KGEsZCxoLGYsdixNLEQpe3RoaXMuZXZlbnRTZXJ2aWNlPWEsdGhpcy5saWNlbmNlU2VydmljZT1kLHRoaXMubG9nZ2VyU2VydmljZT1oLHRoaXMucm91dGU9Zix0aGlzLnJvdXRlcj12LHRoaXMuc2FzU3RvcmVTZXJ2aWNlPU0sdGhpcy5zYXNTZXJ2aWNlPUQsdGhpcy5jb250ZW50Q29udGFp''@;'; put 'put ''bmVyQ2xhc3M9ITAsdGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdD1uZXcgZmQsdGhpcy5TdGF0dXNFbnVtPXEyLHRoaXMuVGFic0VudW09Q3csdGhpcy5zZWxlY3RlZFRhYj1Ddy5SdWxlcyx0aGlzLnJ1bGVzU291cmNlPUtuLmRjTGliKyIuTVBFX1hMTUFQX1JVTEVTIix0aGlzLnhsbWFw''@;'; put 'put ''cz1bXSx0aGlzLnNlbGVjdGVkWExNYXA9dm9pZCAwLHRoaXMuc2VhcmNoU3RyaW5nPSIiLHRoaXMueGxtYXBzTG9hZGluZz0hMCx0aGlzLmlzTG9hZGluZz0hMSx0aGlzLmlzTG9hZGluZ0Rlc2M9IiIsdGhpcy5zdGF0dXM9cTIuTm9NYXBTZWxlY3RlZCx0aGlzLnhsbWFwUnVsZXNIZWFkZXJz''@;'; put 'put ''PVsiWExNQVBfU0hFRVQiLCJYTE1BUF9SQU5HRV9JRCIsIlhMTUFQX1NUQVJUIiwiWExNQVBfRklOSVNIIl0sdGhpcy54bG1hcFJ1bGVzQ29sdW1ucz1be2RhdGE6IlhMTUFQX1NIRUVUIn0se2RhdGE6IlhMTUFQX1JBTkdFX0lEIn0se2RhdGE6IlhMTUFQX1NUQVJUIn0se2RhdGE6IlhMTUFQ''@;'; put 'put ''X0ZJTklTSCJ9XSx0aGlzLnhsbWFwUnVsZXM9W10sdGhpcy54bFVwbG9hZEhlYWRlcj1bIlhMTUFQX1JBTkdFX0lEIiwiUk9XX05PIiwiQ09MX05PIiwiVkFMVUVfVFhUIl0sdGhpcy54bFVwbG9hZENvbHVtbnM9W3tkYXRhOiJYTE1BUF9SQU5HRV9JRCJ9LHtkYXRhOiJST1dfTk8ifSx7ZGF0''@;'; put 'put ''YToiQ09MX05PIn0se2RhdGE6IlZBTFVFX1RYVCJ9XSx0aGlzLnhsRGF0YT1bXSx0aGlzLnNob3dVcGxvYWRNb2RhbD0hMSx0aGlzLmhhc0Jhc2VEcm9wWm9uZU92ZXI9ITEsdGhpcy5maWxlbmFtZT0iIix0aGlzLnN1Ym1pdExpbWl0Tm90aWNlPSExLHRoaXMudXBsb2FkZXI9bmV3IENlZSx0''@;'; put 'put ''aGlzLmxpY2VuY2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLmhvdFRhYmxlTGljZW5zZUtleT12b2lkIDAsdGhpcy5ob3RUYWJsZU1heFJvd3M9dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZHx8MS8wfWFmdGVyR2V0Q29sSGVh''@;'; put 'put ''ZGVyKGEsZCl7ZC5jbGFzc0xpc3QuYWRkKEtuLmhhbmRzb250YWJsZS5kYXJrVGFibGVIZWFkZXJDbGFzcyl9eGxtYXBPbkNsaWNrKGEpe2EuaWQhPT10aGlzLnNlbGVjdGVkWExNYXA/LmlkJiYodGhpcy5zZWxlY3RlZFhMTWFwPWEsdGhpcy54bERhdGE9W10sdGhpcy5maWxlbmFtZT0iIix0''@;'; put 'put ''aGlzLnVwbG9hZGVyLnF1ZXVlPVtdLHRoaXMuZmlsZVVwbG9hZElucHV0Q29tcExpc3QuZmlyc3QmJih0aGlzLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQudmFsdWU9IiIpLHRoaXMuc2VsZWN0ZWRUYWI9Q3cuUnVsZXMsdGhpcy52aWV3WExNYXBSdWxlcygp''@;'; put 'put ''LHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi9ob21lL2V4Y2VsLW1hcHMvIithLmlkKSl9eGxtYXBMaXN0T25GaWx0ZXIoKXt0aGlzLnhsbWFwcz10aGlzLnNlYXJjaFN0cmluZy5sZW5ndGg+MD9Lbi54bG1hcHMuZmlsdGVyKGQ9PmQuaWQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlz''@;'; put 'put ''LnNlYXJjaFN0cmluZy50b0xvd2VyQ2FzZSgpKSk6S24ueGxtYXBzfWlzQWN0aXZlWExNYXAoYSl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRYTE1hcD8uaWQ9PT1hfW1heFdpZHRoQ2hlY2tlcihhLGQpe3JldHVybiBhPjIwMD8yMDA6YX1nZXRDZWxsQ29uZmlndXJhdGlvbigpe3JldHVybntyZWFk''@;'; put 'put ''T25seTohMH19cm93SGVhZGVycygpe3JldHVybiIgIn1vblNob3dVcGxvYWRNb2RhbCgpe3RoaXMuc2hvd1VwbG9hZE1vZGFsPSEwfWZpbGVPdmVyQmFzZShhKXt0aGlzLmhhc0Jhc2VEcm9wWm9uZU92ZXI9YX1nZXRGaWxlRGVzYyhhLGQ9ITEpe3ZhciBoPXRoaXM7Y29uc3QgZj1kP2FbMF06''@;'; put 'put ''YS50YXJnZXQuZmlsZXNbMF07aWYoIWYpcmV0dXJuO2NvbnN0IHY9Zi5uYW1lO2lmKHRoaXMuZmlsZW5hbWU9diwieGxzIj09PXYuc2xpY2Uodi5sYXN0SW5kZXhPZigiLiIpKzEsdi5sYXN0SW5kZXhPZigiLiIpKzQpLnRvTG93ZXJDYXNlKCkpe3RoaXMuc2hvd1VwbG9hZE1vZGFsPSExLHRo''@;'; put 'put ''aXMuaXNMb2FkaW5nPSEwLHRoaXMuaXNMb2FkaW5nRGVzYz0iRXh0cmFjdGluZyBEYXRhIix0aGlzLnN0YXR1cz1xMi5FeHRyYWN0aW5nRGF0YTtjb25zdCBEPW5ldyBGaWxlUmVhZGVyO0Qub25sb2FkPWZ1bmN0aW9uKCl7dmFyIFo9ZWUoZnVuY3Rpb24qKG5lKXtjb25zdCBjZT0oYz0+e2Nv''@;'; put 'put ''bnN0IGw9bmV3IFVpbnQ4QXJyYXkoYyk7bGV0IGE9IiI7Y29uc3QgZD1sLmJ5dGVMZW5ndGg7Zm9yKGxldCBoPTA7aDxkO2grKylhKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGxbaF0pO3JldHVybiBhfSkobmUudGFyZ2V0LnJlc3VsdCk7bGV0IGJlO2NvbnN0IEVlPXt0eXBlOiJiaW5hcnkiLGNl''@;'; put 'put ''bGxEYXRlczohMSxjZWxsRm9ybXVsYTohMCxjZWxsU3R5bGVzOiEwLGNlbGxORjohMSxjZWxsVGV4dDohMX07dHJ5e2JlPWt1LnJlYWQoY2Usey4uLkVlfSl9Y2F0Y2goQmUpe2guZXZlbnRTZXJ2aWNlLnNob3dBYm9ydE1vZGFsKG51bGwsQmUsdm9pZCAwLCJFcnJvciByZWFkaW5nIGZpbGUi''@;'; put 'put ''KX1pZighYmUpcmV0dXJuIGguaXNMb2FkaW5nPSExLGguaXNMb2FkaW5nRGVzYz0iIixoLnN0YXR1cz1xMi5SZWFkeVRvVXBsb2FkLHZvaWQgaC51cGxvYWRlci5xdWV1ZS5wb3AoKTtoLmV4dHJhY3REYXRhKGJlKX0pO3JldHVybiBmdW5jdGlvbihuZSl7cmV0dXJuIFouYXBwbHkodGhpcyxh''@;'; put 'put ''cmd1bWVudHMpfX0oKSxELnJlYWRBc0FycmF5QnVmZmVyKGYpfWVsc2UgdGhpcy5pc0xvYWRpbmc9ITEsdGhpcy5pc0xvYWRpbmdEZXNjPSIiLHRoaXMuc3RhdHVzPXEyLlJlYWR5VG9VcGxvYWQsdGhpcy5zaG93VXBsb2FkTW9kYWw9ITAsdGhpcy51cGxvYWRlci5xdWV1ZS5wb3AoKSx0aGlz''@;'; put 'put ''LmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLCdJbnZhbGlkIGZpbGUgdHlwZSAiPGI+Jyt0aGlzLmZpbGVuYW1lKyc8L2I+Ii4gUGxlYXNlIHVwbG9hZCBleGNlbCBmaWxlLicpfWRpc2NhcmRFeHRyYWN0ZWREYXRhKCl7dGhpcy5pc0xvYWRpbmc9ITEsdGhpcy5pc0xvYWRpbmdE''@;'; put 'put ''ZXNjPSIiLHRoaXMuc3RhdHVzPXEyLlJlYWR5VG9VcGxvYWQsdGhpcy54bERhdGE9W10sdGhpcy5zZWxlY3RlZFRhYj1Ddy5SdWxlcyx0aGlzLmZpbGVuYW1lPSIiLHRoaXMudXBsb2FkZXIucXVldWU9W10sdGhpcy5maWxlVXBsb2FkSW5wdXRDb21wTGlzdC5maXJzdCYmKHRoaXMuZmlsZVVw''@;'; put 'put ''bG9hZElucHV0Q29tcExpc3QuZmlyc3QubmF0aXZlRWxlbWVudC52YWx1ZT0iIil9c3VibWl0RXhjZWwoKXt0aGlzLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdD09PTEvMD90aGlzLnN1Ym1pdCgpOnRoaXMuc3VibWl0TGltaXROb3RpY2U9ITB9c3VibWl0KCl7aWYoIXRo''@;'; put 'put ''aXMuc2VsZWN0ZWRYTE1hcHx8IXRoaXMueGxEYXRhLmxlbmd0aClyZXR1cm47dGhpcy5zdGF0dXM9cTIuU3VibWl0dGluZyx0aGlzLmlzTG9hZGluZz0hMCx0aGlzLmlzTG9hZGluZ0Rlc2M9IlN1Ym1pdHRpbmcgZXh0cmFjdGVkIGRhdGEiO2NvbnN0IGE9W107Zm9yKGNvbnN0IE0gb2YgdGhp''@;'; put 'put ''cy51cGxvYWRlci5xdWV1ZSlhLnB1c2goe2ZpbGU6TSxmaWxlTmFtZTpNLm5hbWV9KTtjb25zdCBkPU9iamVjdC5rZXlzKHRoaXMueGxEYXRhWzBdKS5qb2luKCIsIikrIlxuIit0aGlzLnhsRGF0YS5zbGljZSgwLHRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0KS5t''@;'; put 'put ''YXAoTT0+T2JqZWN0LnZhbHVlcyhNKS5qb2luKCIsIikpLmpvaW4oIlxuIiksaD1uZXcgQmxvYihbZF0se3R5cGU6ImFwcGxpY2F0aW9uL2NzdiJ9KSxmPVZlZShoLHRoaXMuZmlsZW5hbWUrIi5jc3YiKTthLnB1c2goe2ZpbGU6ZixmaWxlTmFtZTpmLm5hbWV9KSx0aGlzLnNhc1NlcnZpY2Uu''@;'; put 'put ''dXBsb2FkRmlsZSgic2VydmljZXMvZWRpdG9ycy9sb2FkZmlsZSIsYSx7dGFibGU6dGhpcy5zZWxlY3RlZFhMTWFwLnRhcmdldERTfSkudGhlbihNPT57aWYoTS5hZGFwdGVyUmVzcG9uc2Uuc2FzanNBYm9ydCl7Y29uc3QgRD1NLmFkYXB0ZXJSZXNwb25zZTt0aGlzLmV2ZW50U2VydmljZS5z''@;'; put 'put ''aG93QWJvcnRNb2RhbCgiIixELnNhc2pzQWJvcnRbMF0uTVNHLHtTWVNXQVJOSU5HVEVYVDpELlNZU1dBUk5JTkdURVhULFNZU0VSUk9SVEVYVDpELlNZU0VSUk9SVEVYVCxNQUM6RC5zYXNqc0Fib3J0WzBdLk1BQ30pfWVsc2UgTS5hZGFwdGVyUmVzcG9uc2Uuc2FzcGFyYW1zJiZ0aGlzLnJv''@;'; put 'put ''dXRlci5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIitNLmFkYXB0ZXJSZXNwb25zZS5zYXNwYXJhbXNbMF0uRFNJRCl9KS5jYXRjaChNPT57dGhpcy5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJmaWxlIHVwbG9hZCIsTS5yZXNwb25zZSl9KS5maW5hbGx5KCgpPT57dGhpcy5zdGF0''@;'; put 'put ''dXM9cTIuUmVhZHlUb1N1Ym1pdCx0aGlzLmlzTG9hZGluZz0hMSx0aGlzLmlzTG9hZGluZ0Rlc2M9IiJ9KX1leHRyYWN0RGF0YShhKXtjb25zdCBkPVtdO3RoaXMueGxtYXBSdWxlcy5mb3JFYWNoKGg9PntsZXQgZj1oLlhMTUFQX1NIRUVUO2lmKGYuc3RhcnRzV2l0aCgiLyIpKXtjb25zdCBF''@;'; put 'put ''ZT1mLnNwbGl0KCIvIilbMV0sQmU9cGFyc2VJbnQoRWUpLTE7Zj1hLlNoZWV0TmFtZXNbQmVdfWNvbnN0IHY9YS5TaGVldHNbZl0sTT1rdS51dGlscy5zaGVldF90b19qc29uKHYse3JhdzohMCxoZWFkZXI6IkEiLGJsYW5rcm93czohMH0pLEQ9djZlKGguWExNQVBfU1RBUlQsTSksWj0oKGMs''@;'; put 'put ''bCxhKT0+e2lmKCIiPT09bClyZXR1cm4gYztpZihsLnN0YXJ0c1dpdGgoIkFCU09MVVRFICIpJiYobD1sLnJlcGxhY2UoIkFCU09MVVRFICIsIiIpKSxsLnN0YXJ0c1dpdGgoIlJFTEFUSVZFICIpKXtjb25zdCBkPVVlZShsKTtpZihkKXtjb25zdHtyb3c6aCxjb2x1bW46Zn09ZCx7cjp2LGM6''@;'; put 'put ''TX09a3UudXRpbHMuZGVjb2RlX2NlbGwoYyk7bD1rdS51dGlscy5lbmNvZGVfY2VsbCh7cjp2K2gsYzpNK2Z9KX19aWYobC5zdGFydHNXaXRoKCJNQVRDSCAiKSYmKGw9djZlKGwsYSkpLCJMQVNURE9XTiI9PT1sKXtjb25zdHtyOmQsYzpofT1rdS51dGlscy5kZWNvZGVfY2VsbChjKSxmPWt1''@;'; put 'put ''LnV0aWxzLmVuY29kZV9jb2woaCk7bGV0IHY9ZDtmb3IobGV0IE09ZCsxO008YS5sZW5ndGgmJmFbTV1bZl07TSsrKXY9TTtsPWYrKHYrMSl9aWYoIkJMQU5LUk9XIj09PWwpe2NvbnN0e3I6ZH09a3UudXRpbHMuZGVjb2RlX2NlbGwoYyk7bGV0IGg9ZDtmb3IobGV0IEQ9ZCsxO0Q8YS5sZW5n''@;'; put 'put ''dGgmJiFyOXQoYVtEXSk7RCsrKWg9RDtsPU9iamVjdC5rZXlzKGFbaF0pLmZpbHRlcihEPT4iX19yb3dOdW1fXyIhPT1EKS5yZWR1Y2UoKEQsWik9Plo+RD9aOkQsIiIpKyhoKzEpfXJldHVybiBsfSkoRCxoLlhMTUFQX0ZJTklTSCxNKSxuZT1gJHtEfToke1p9YCxjZT1rdS51dGlscy5kZWNv''@;'; put 'put ''ZGVfcmFuZ2UobmUpLGJlPWt1LnV0aWxzLnNoZWV0X3RvX2pzb24odix7cmF3OiEwLHJhbmdlOm5lLGhlYWRlcjoiQSIsYmxhbmtyb3dzOiEwfSk7Zm9yKGxldCBFZT0wO0VlPGJlLmxlbmd0aDtFZSsrKXtjb25zdCBCZT1iZVtFZV07Zm9yKGxldCBxZT1jZS5zLmMsbnQ9MDtxZTw9Y2UuZS5j''@;'; put 'put ''O3FlKyssbnQrKyl7Y29uc3QgbHQ9a3UudXRpbHMuZW5jb2RlX2NvbChxZSk7bHQgaW4gQmUmJmQucHVzaCh7TE9BRF9SRUY6IjAiLFhMTUFQX0lEOmguWExNQVBfSUQsWExNQVBfUkFOR0VfSUQ6aC5YTE1BUF9SQU5HRV9JRCxST1dfTk86RWUrMSxDT0xfTk86bnQrMSxWQUxVRV9UWFQ6QmVb''@;'; put 'put ''bHRdfSl9fX0pLHRoaXMuc3RhdHVzPXEyLlJlYWR5VG9TdWJtaXQsdGhpcy5pc0xvYWRpbmc9ITEsdGhpcy5pc0xvYWRpbmdEZXNjPSIiLHRoaXMueGxEYXRhPWQsdGhpcy5zZWxlY3RlZFRhYj1Ddy5EYXRhfXZpZXdYTE1hcFJ1bGVzKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24q''@;'; put 'put ''KCl7YS5zZWxlY3RlZFhMTWFwJiYoYS5pc0xvYWRpbmc9ITAsYS5pc0xvYWRpbmdEZXNjPSJMb2FkaW5nIGV4Y2VsIHJ1bGVzIixhLnN0YXR1cz1xMi5GZXRjaGluZ1J1bGVzLHlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmdldFhMTWFwUnVsZXMoYS5zZWxlY3RlZFhMTWFwLmlkKS50aGVuKGQ9''@;'; put 'put ''PnthLnhsbWFwUnVsZXM9ZC54bG1hcHJ1bGVzLGEuc3RhdHVzPXEyLlJlYWR5VG9VcGxvYWR9KS5jYXRjaChkPT57YS5sb2dnZXJTZXJ2aWNlLmVycm9yKGQpfSksYS5pc0xvYWRpbmc9ITEsYS5pc0xvYWRpbmdEZXNjPSIiKX0pKCl9bG9hZCgpe3RoaXMueGxtYXBzPUtuLnhsbWFwcyx0aGlz''@;'; put 'put ''LnhsbWFwc0xvYWRpbmc9ITE7Y29uc3QgYT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5pZDtpZihhKXtjb25zdCBkPXRoaXMueGxtYXBzLmZpbmQoaD0+aC5pZD09PWEpO2QmJih0aGlzLnNlbGVjdGVkWExNYXA9ZCx0aGlzLnZpZXdYTE1hcFJ1bGVzKCkpfX1uZ09uSW5pdCgpe3RoaXMu''@;'; put 'put ''bGljZW5jZVNlcnZpY2UuaG90X2xpY2Vuc2Vfa2V5LnN1YnNjcmliZShhPT57dGhpcy5ob3RUYWJsZUxpY2Vuc2VLZXk9YX0pfW5nQWZ0ZXJWaWV3SW5pdCgpe31uZ0FmdGVyQ29udGVudEluaXQoKXtLbi5lZGl0b3Iuc3RhcnR1cFNldD90aGlzLmxvYWQoKTp0aGlzLmV2ZW50U2VydmljZS5v''@;'; put 'put ''blN0YXJ0dXBEYXRhTG9hZGVkLnN1YnNjcmliZSgoKT0+e3RoaXMubG9hZCgpfSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UocGMpLEdlKGQxKSxHZShTZCksR2UoQ3UpLEdlKExzKSxHZShWaCksR2UoSnMpKX19c3RhdGlje3RoaXMuXHUw''@;'; put 'put ''Mjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC14bG1hcCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJm5hKG85dCw1KSwyJmQpe2xldCBmO3hpKGY9RWkoKSkmJihoLmZpbGVVcGxvYWRJbnB1dENvbXBMaXN0PWYpfX0saG9zdFZhcnM6Mixob3N0QmluZGluZ3M6''@;'; put 'put ''ZnVuY3Rpb24oZCxoKXsyJmQmJnhyKCJjb250ZW50LWNvbnRhaW5lciIsaC5jb250ZW50Q29udGFpbmVyQ2xhc3MpfSxkZWNsczo0Mix2YXJzOjE2LGNvbnN0czpbWyJzZWFyY2hYTE1hcFRyZWVJbnB1dCIsIiJdLFsiZmlsZVVwbG9hZElucHV0IiwiIl0sWyJhY3Rpb25CdXR0b25zIiwiIl0s''@;'; put 'put ''WyJjbGFzcyIsIm15LTEwLW14LWF1dG8gdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJGaWx0ZXIgYnkgSWQiLCJuYW1lIiwiaW5w''@;'; put 'put ''dXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbMSwiY29udGVudC1hcmVh''@;'; put 'put ''Il0sWyJjbGFzcyIsIm5vLXRhYmxlLXNlbGVjdGVkIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImxvYWRpbmdTcGlubmVyIiw0LCJuZ0lmIl0sWyJhcHBEcmFnTmRyb3AiLCIiLCJjbGFzcyIsImNhcmQgaC0xMDAgZC1mbGV4IGNsci1mbGV4LWNvbHVtbiIsMywiZmlsZURyYWdnZWRPdmVyIiw0LCJu''@;'; put 'put ''Z0lmIl0sWyJhcHBGaWxlRHJvcCIsIiIsMSwicmVsYXRpdmUiLDMsImZpbGVPdmVyIiwiZmlsZURyb3AiLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJ1cGxvYWRlciIsImNsck1vZGFsU2l6ZSIsImNsck1vZGFsU3RhdGljQmFja2Ryb3AiLCJjbHJNb2RhbENsb3NhYmxlIiwiY2xyTW9kYWxPcGVu''@;'; put 'put ''Il0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwiZHJvcC1hcmVhIl0sWzEsImNsci1jb2wtbWQtMTIiXSxbMSwiY2xyLXJvdyIsImNhcmQtYmxvY2siLCJtdC0xNSIsImQtZmxleCIsImp1c3RpZnktY29udGVudC1iZXR3ZWVuIl0sWzEsImNsci1jb2wtbWQtMyIsImZp''@;'; put 'put ''bHRlckJ0biJdLFsxLCJmaWx0ZXJCdG4iLCJ3LTEwMCJdLFsiZm9yIiwiZmlsZS11cGxvYWQiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwicHJvZmlsZS1idXR0b25zIiwidy0xMDAiXSxbImhpZGRlbiIsIiIsImlkIiwiZmlsZS11cGxvYWQiLCJ0eXBlIiwiZmlsZSIsImFwcEZp''@;'; put 'put ''bGVTZWxlY3QiLCIiLDMsImNoYW5nZSIsInVwbG9hZGVyIl0sWzMsImNsck1vZGFsT3BlbkNoYW5nZSIsImNsck1vZGFsT3BlbiJdLFsxLCJtLTAiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxb''@;'; put 'put ''MSwibXktMTAtbXgtYXV0byIsInRleHQtY2VudGVyIl0sWyJjbHJNZWRpdW0iLCIiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFsxLCJjbHItdHJlZW5vZGUtbGluayIsMywiY2xpY2siXSxbInNoYXBlIiwiZmlsZSJdLFsxLCJuby10YWJsZS1zZWxl''@;'; put 'put ''Y3RlZCJdLFsic3JjIiwiL1NBU1N0b3JlZFByb2Nlc3MvP19QUk9HUkFNPXBaS2Q2Rjk1akVDdlJRbE4wTENmZEE9PS93ZWI5L2ltYWdlcy9zZWxlY3QtdGFibGUtcG5nIiwiYWx0Iiwic2VsZWN0IHRhYmxlIGljb24iLDEsInNlbGVjdC10YWJsZS1pY29uIl0sWyJjbGFzcyIsInRleHQtY2Vu''@;'; put 'put ''dGVyIGNvbG9yLWdyYXkgbXQtMTAiLCJjZHMtdGV4dCIsInNlY3Rpb24iLDQsIm5nSWYiXSxbImNkcy10ZXh0Iiwic2VjdGlvbiIsMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5IiwibXQtMTAiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFsiYXBwRHJhZ05kcm9wIiwi''@;'; put 'put ''IiwxLCJjYXJkIiwiaC0xMDAiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iLDMsImZpbGVEcmFnZ2VkT3ZlciJdLFsiY2xyVGFiTGluayIsIiIsMywiY2xpY2siXSxbNCwiY2xySWZBY3RpdmUiXSxbNCwibmdUZW1wbGF0ZU91dGxldCJdLFsxLCJjbHItcm93IiwibS0wIiwibWItMTAtaSIs''@;'; put 'put ''InZpZXdlclRpdGxlIl0sWzEsImQtZmxleCIsImNsci1jb2wtMTIiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsIm10LTUtaSJdLFsiY2RzLXRleHQiLCJsYWJlbExpbmsiLDEsIm1sLTEwIiwzLCJyb3V0ZXJMaW5rIl0sWzEsImNsci1mbGV4LTEiXSxbImhvdElkIiwiaG90SW5zdGFu''@;'; put 'put ''Y2UiLCJpZCIsImhvdC10YWJsZSIsImNsYXNzTmFtZSIsImh0RGFyayIsInN0cmV0Y2hIIiwiYWxsIiwzLCJtdWx0aUNvbHVtblNvcnRpbmciLCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsImRhdGEiLCJjb2xIZWFkZXJzIiwiY29sdW1ucyIsImZpbHRlcnMiLCJoZWlnaHQiLCJhZnRl''@;'; put 'put ''ckdldENvbEhlYWRlciIsIm1vZGlmeUNvbFdpZHRoIiwiY2VsbHMiLCJtYXhSb3dzIiwibWFudWFsQ29sdW1uUmVzaXplIiwicm93SGVhZGVycyIsInJvd0hlYWRlcldpZHRoIiwicm93SGVpZ2h0cyIsImxpY2Vuc2VLZXkiXSxbMSwiY2xyLXJvdyIsIm0tMCIsImNsci1qdXN0aWZ5LWNvbnRl''@;'; put 'put ''bnQtY2VudGVyIl0sWyJjbGFzcyIsImQtZmxleCBjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciBjbHItY29sLTEyIGNsci1jb2wtbGctNCIsNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsImNsci1jb2wtMTIiLCJjbHItY29sLWxnLTQiXSxbInR5''@;'; put 'put ''cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwiYnRuLWJsb2NrIiwibXItMCIsMywiY2xpY2siXSxbInNoYXBlIiwidXBsb2FkIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tb3V0bGluZS1kYW5nZXIiLCJidG4tYmxvY2siLCJtci0w''@;'; put 'put ''IiwzLCJjbGljayJdLFsic2hhcGUiLCJ0aW1lcyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpe2lmKDEmZCl7Y29uc3QgZj1PbigpO2RlKDAsImFwcC1zaWRlYmFyIiksZ3QoMSxhOXQsMiwwLCJkaXYiLDMpLGRlKDIsImNsci10cmVlIikoMywiY2xyLXRyZWUtbm9kZSIsNCkoNCwiZGl2Iiw1''@;'; put 'put ''KSg1LCJpbnB1dCIsNiwwKSxwaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLHZpKGguc2VhcmNoU3RyaW5nLE0pfHwoaC5zZWFyY2hTdHJpbmc9TSksQ3QoTSl9KSxGdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgueGxtYXBMaXN0T25GaWx0''@;'; put 'put ''ZXIoKSl9KSxoZSgpLGd0KDcsczl0LDEsMCwiY2xyLWljb24iLDcpKDgsbDl0LDEsMCwiY2xyLWljb24iLDgpLGhlKCkoKSxndCg5LGM5dCw1LDMsIm5nLWNvbnRhaW5lciIsOSksaGUoKSgpLGRlKDEwLCJkaXYiLDEwKSxndCgxMSxoOXQsNCwyLCJkaXYiLDExKSgxMixmOXQsNiwxLCJkaXYi''@;'; put 'put ''LDEyKSgxMyx2OXQsMjYsMjUsImRpdiIsMTMpLGRlKDE0LCJjbHItbW9kYWwiLDE0KSxGdCgiZmlsZU92ZXIiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLmZpbGVPdmVyQmFzZShNKSl9KSgiZmlsZURyb3AiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLmdldEZpbGVEZXNj''@;'; put 'put ''KE0sITApKX0pLHBpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSx2aShoLnNob3dVcGxvYWRNb2RhbCxNKXx8KGguc2hvd1VwbG9hZE1vZGFsPU0pLEN0KE0pfSksZGUoMTUsImgzIiwxNSksTGUoMTYsIlVwbG9hZCBGaWxlIiksaGUoKSxkZSgxNywiZGl2''@;'; put 'put ''IiwxNikoMTgsImRpdiIsMTcpKDE5LCJzcGFuIiksTGUoMjAsIkRyb3AgZmlsZSBhbnl3aGVyZSB0byB1cGxvYWQhIiksaGUoKSgpLGRlKDIxLCJkaXYiLDE4KSgyMiwiZGl2IiwxOSkoMjMsImRpdiIsMjApKDI0LCJzcGFuIiwyMSkoMjUsImxhYmVsIiwyMiksTGUoMjYsIiBCcm93c2UgIiks''@;'; put 'put ''aGUoKSgpLGRlKDI3LCJpbnB1dCIsMjMsMSksRnQoImNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLEN0KGguZ2V0RmlsZURlc2MoTSkpfSksaGUoKSgpKCkoKSgpKCksZGUoMjksImNsci1tb2RhbCIsMjQpLHBpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVy''@;'; put 'put ''biB3dChmKSx2aShoLnN1Ym1pdExpbWl0Tm90aWNlLE0pfHwoaC5zdWJtaXRMaW1pdE5vdGljZT1NKSxDdChNKX0pLGRlKDMwLCJoMyIsMTUpLExlKDMxLCJOb3RpY2UiKSxoZSgpLGRlKDMyLCJkaXYiLDE2KSgzMywicCIsMjUpLExlKDM0KSxoZSgpKCksZGUoMzUsImRpdiIsMjYpKDM2LCJi''@;'; put 'put ''dXR0b24iLDI3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguc3VibWl0TGltaXROb3RpY2U9ITEpfSksTGUoMzcsIiBDYW5jZWwgIiksaGUoKSxkZSgzOCwiYnV0dG9uIiwyNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxoLnN1Ym1pdCgpLEN0''@;'; put 'put ''KGguc3VibWl0TGltaXROb3RpY2U9ITEpfSksTGUoMzksIiBTdWJtaXQgIiksaGUoKSgpKCkoKSxndCg0MCx3OXQsNCwzLCJuZy10ZW1wbGF0ZSIsbnVsbCwyLF91KX1pZigyJmQpe2NvbnN0IGY9dm8oNik7ZmUoKSx4ZSgibmdJZiIsaC54bG1hcHNMb2FkaW5nKSxmZSg0KSxmaSgibmdNb2Rl''@;'; put 'put ''bCIsaC5zZWFyY2hTdHJpbmcpLGZlKDIpLHhlKCJuZ0lmIixmLnZhbHVlLmxlbmd0aDwxKSxmZSgpLHhlKCJuZ0lmIixmLnZhbHVlLmxlbmd0aD4wKSxmZSgpLHhlKCJuZ0Zvck9mIixoLnhsbWFwcyksZmUoMikseGUoIm5nSWYiLCFoLnNlbGVjdGVkWExNYXApLGZlKCkseGUoIm5nSWYiLGgu''@;'; put 'put ''aXNMb2FkaW5nKSxmZSgpLHhlKCJuZ0lmIiwhaC5pc0xvYWRpbmcmJmguc2VsZWN0ZWRYTE1hcCksZmUoKSx4ZSgidXBsb2FkZXIiLGgudXBsb2FkZXIpKCJjbHJNb2RhbFNpemUiLCJ4bCIpKCJjbHJNb2RhbFN0YXRpY0JhY2tkcm9wIiwhMSkoImNsck1vZGFsQ2xvc2FibGUiLCEwKSxmaSgi''@;'; put 'put ''Y2xyTW9kYWxPcGVuIixoLnNob3dVcGxvYWRNb2RhbCksZmUoMTMpLHhlKCJ1cGxvYWRlciIsaC51cGxvYWRlciksZmUoMiksZmkoImNsck1vZGFsT3BlbiIsaC5zdWJtaXRMaW1pdE5vdGljZSksZmUoNSksUnIoIiBEdWUgdG8gY3VycmVudCBsaWNlbmNlLCBvbmx5ICIsaC5saWNlbmNlU3Rh''@;'; put 'put ''dGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQsIiByb3dzIGluIGEgZmlsZSB3aWxsIGJlIHN1Ym1pdHRlZC4gVG8gcmVtb3ZlIHRoZSByZXN0cmljdGlvbiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvICIpfX0sZGVwZW5kZW5jaWVzOlt4Xyx1MSxRbCxRcyxZcyxTaCxPZCxk''@;'; put 'put ''ZyxPbCxvdSxLdSxSeSx1cyxJZCx2bSx5bSxDNyxibSxtbSxfNyxfaCx0NCxzcyx5byxOMSxReCx1NmUsZDZlLGU0XSxzdHlsZXM6WyIuY2FyZFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDowO2ZsZXg6MTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufWNsci10cmVl''@;'; put 'put ''LW5vZGVbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpub3dyYXB9Lm5vLXRhYmxlLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjpyZWxhdGl2ZX0uaGVhZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICAudGl0''@;'; put 'put ''bGUtY29sW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5oZWFkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5vcHRpb25zLWNvbFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uc3db''@;'; put 'put ''X25nY29udGVudC0lQ09NUCVde21hcmdpbjoxcmVtIDByZW0gLjVyZW0gMXJlbX0udmlld2VyVGl0bGVbX25nY29udGVudC0lQ09NUCVde3RleHQtYWxpZ246Y2VudGVyfS5jYXJkRmxleFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmNv''@;'; put 'put ''bnRlbnQtYXJlYVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn1ob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICAucHJpbWFyeUtleUhlYWRlclN0eWxle2JhY2tncm91bmQ6IzMwNmIwMDZlfS5kcm9wLWFyZWFbX25nY29udGVudC0l''@;'; put 'put ''Q09NUCVde3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luOjFweDtib3JkZXI6MnB4IGRhc2hlZCAjZmZmO3otaW5kZXg6LTF9LmRyb3AtYXJlYVtfbmdjb250ZW50LSVDT01QJV0gICBzcGFuW19uZ2NvbnRlbnQtJUNPTVAl''@;'; put 'put ''XXtmb250LXNpemU6MjBweDttYXJnaW4tdG9wOjIwcHg7Y29sb3I6I2ZmZn0iXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgQzl0PVt7cGF0aDoiIixjb21wb25lbnQ6KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe31uZ09uRGVzdHJveSgpe31zdGF0aWN7dGhpcy5cdTAy''@;'; put 'put ''NzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC14bG1hcC1yb3V0ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rp''@;'; put 'put ''b24oZCxoKXsxJmQmJkd0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltlZ119KX19cmV0dXJuIGN9KSgpLGNoaWxkcmVuOlt7cGF0aDoiIixjb21wb25lbnQ6YjZlfSx7cGF0aDoiOmlkIixjb21wb25lbnQ6YjZlfV19XTtsZXQgUzl0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3Ro''@;'; put 'put ''aXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltqYy5mb3JDaGlsZChDOXQpLGpjXX0pfX1yZXR1cm4gY30pKCk7WUgoKTtsZXQgTTl0PSgo''@;'; put 'put ''KT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltuOSxTOXQsRGMsajAsajksTG8sYkEsSzJdfSl9fXJl''@;'; put 'put ''dHVybiBjfSkoKSx4OXQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcigpe31uZ09uSW5pdCgpe31uZ09uRGVzdHJveSgpe31zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3Jz''@;'; put 'put ''OltbImFwcC1tdWx0aS1kYXRhc2V0LXJvdXRlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczoxLHZhcnM6MCx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmR3QoMCwicm91dGVyLW91dGxldCIpfSxkZXBlbmRlbmNpZXM6W2VnXSxlbmNhcHN1bGF0aW9uOjJ9''@;'; put 'put ''KX19cmV0dXJuIGN9KSgpO2NvbnN0IEU5dD0oYyxsLGEpPT57bC5jbGFzc0xpc3QuYWRkKEtuLmhhbmRzb250YWJsZS5kYXJrVGFibGVIZWFkZXJDbGFzcyl9LFQ5dD1bImNvbnRlbnRBcmVhIl0sQTl0PSgpPT5bImh0RGFyayIsImh0Q3VzdG9tSGlkZGVuIl07ZnVuY3Rpb24gazl0KGMsbCl7''@;'; put 'put ''MSZjJiYoZGUoMCwiZGl2IiwyNCksR3QoMSwiY2xyLXNwaW5uZXIiLDIyKSxoZSgpKX1mdW5jdGlvbiBEOXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDI1KSgxLCJidXR0b24iLDI2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KHZvKDQpLmNs''@;'; put 'put ''aWNrKCkpfSksTGUoMiwiIEJyb3dzZSBmaWxlICIpLGhlKCksZGUoMywiaW5wdXQiLDI3LDEpLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgpLm9uRmlsZUNoYW5nZShoKSl9KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSx4ZSgiZGlzYWJsZWQi''@;'; put 'put ''LG51bGwhPT1hLnNlbGVjdGVkRmlsZXx8YS5zdWJtaXR0aW5nQ3N2KX19ZnVuY3Rpb24gSTl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2IiwyNSkoMSwiYnV0dG9uIiwzMCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5vbkRpc2NhcmQo''@;'; put 'put ''KSl9KSxMZSgyLCIgRGlzY2FyZCAiKSxoZSgpLGRlKDMsImJ1dHRvbiIsMzEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikub25TdWJtaXRBbGwoKSl9KSxMZSg0LCIgU3VibWl0IEFsbCAiKSxoZSgpKCl9fWZ1bmN0aW9uIFI5dChjLGwpezEmYyYmR3QoMCwi''@;'; put 'put ''Y2RzLWljb24iLDM2KX1mdW5jdGlvbiBMOXQoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiwzNyl9ZnVuY3Rpb24gTzl0KGMsbCl7aWYoMSZjJiYobGkoMCksZ3QoMSxSOXQsMSwwLCJjZHMtaWNvbiIsMzQpKDIsTDl0LDEsMCwiY2RzLWljb24iLDM1KSxjaSgpKSwyJmMpe2NvbnN0IGE9T2Uo''@;'; put 'put ''KS4kaW1wbGljaXQ7ZmUoKSx4ZSgibmdJZiIsYS5zdWJtaXRSZXN1bHQuZXJyb3IpLGZlKCkseGUoIm5nSWYiLGEuc3VibWl0UmVzdWx0LnN1Y2Nlc3MpfX1mdW5jdGlvbiBQOXQoYyxsKXsxJmMmJkd0KDAsImNkcy1pY29uIiwzNil9ZnVuY3Rpb24gRjl0KGMsbCl7MSZjJiZHdCgwLCJjZHMt''@;'; put 'put ''aWNvbiIsMzkpfWZ1bmN0aW9uIEg5dChjLGwpe2lmKDEmYyYmKGxpKDApLGd0KDEsUDl0LDEsMCwiY2RzLWljb24iLDM0KSgyLEY5dCwxLDAsImNkcy1pY29uIiwzOCksY2koKSksMiZjKXtjb25zdCBhPU9lKDIpLiRpbXBsaWNpdDtmZSgpLHhlKCJuZ0lmIiwhKGEuZGF0YXNvdXJjZS5sZW5n''@;'; put 'put ''dGgmJmEucGFyc2VSZXN1bHQpKSxmZSgpLHhlKCJuZ0lmIixhLmRhdGFzb3VyY2UubGVuZ3RoJiZhLnBhcnNlUmVzdWx0KX19ZnVuY3Rpb24gTjl0KGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsMzkpfWZ1bmN0aW9uIFY5dChjLGwpezEmYyYmR3QoMCwiY2xyLXNwaW5uZXIiLDQxKX1mdW5j''@;'; put 'put ''dGlvbiBCOXQoYyxsKXtpZigxJmMmJihsaSgwKSxndCgxLE45dCwxLDAsImNkcy1pY29uIiwzOCkoMixWOXQsMSwwLCJjbHItc3Bpbm5lciIsNDApLGNpKCkpLDImYyl7Y29uc3QgYT1PZSgyKS4kaW1wbGljaXQ7ZmUoKSx4ZSgibmdJZiIsIWEucGFyc2luZ1RhYmxlKSxmZSgpLHhlKCJuZ0lm''@;'; put 'put ''IixhLnBhcnNpbmdUYWJsZSl9fWZ1bmN0aW9uIGo5dChjLGwpe2lmKDEmYyYmKGxpKDApLGd0KDEsSDl0LDMsMiwibmctY29udGFpbmVyIiw0KSgyLEI5dCwzLDIsIm5nLWNvbnRhaW5lciIsNCksY2koKSksMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0O2ZlKCkseGUoIm5nSWYiLGEuZGF0''@;'; put 'put ''YXNvdXJjZSksZmUoKSx4ZSgibmdJZiIsIWEuZGF0YXNvdXJjZSl9fWZ1bmN0aW9uIHo5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci10cmVlLW5vZGUiKSgxLCJidXR0b24iLDMyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQ7cmV0''@;'; put 'put ''dXJuIEN0KE9lKDIpLm9uUGFyc2VkRGF0YXNldENsaWNrKGgpKX0pLGd0KDIsTzl0LDMsMiwibmctY29udGFpbmVyIiw0KSgzLGo5dCwzLDIsIm5nLWNvbnRhaW5lciIsNCksZGUoNCwic3BhbiIsMzMpLExlKDUpLGhlKCkoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLHhy''@;'; put 'put ''KCJhY3RpdmUiLGEuYWN0aXZlKSxmZSgpLHhlKCJuZ0lmIixhLnN1Ym1pdFJlc3VsdCksZmUoKSx4ZSgibmdJZiIsIWEuc3VibWl0UmVzdWx0KSxmZSgyKSxScigiICIsYS5saWJkcywiICIpfX1mdW5jdGlvbiBVOXQoYyxsKXtpZigxJmMmJihsaSgwKSxndCgxLEk5dCw1LDAsImRpdiIsMyks''@;'; put 'put ''ZGUoMiwicCIsMjgpLExlKDMsIkZvdW5kIHRhYmxlczoiKSxoZSgpLGRlKDQsImNsci10cmVlIiksZ3QoNSx6OXQsNiw1LCJjbHItdHJlZS1ub2RlIiwyOSksaGUoKSxjaSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLHhlKCJuZ0lmIiwhYS5leGNlbHNTdWJtaXR0ZWQpLGZlKDQpLHhlKCJu''@;'; put 'put ''Z0Zvck9mIixhLnBhcnNlZERhdGFzZXRzKX19ZnVuY3Rpb24gWjl0KGMsbCl7MSZjJiZHdCgwLCJjZHMtaWNvbiIsMzYpfWZ1bmN0aW9uIFc5dChjLGwpezEmYyYmR3QoMCwiY2RzLWljb24iLDM3KX1mdW5jdGlvbiBZOXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItdHJl''@;'; put 'put ''ZS1ub2RlIikoMSwiYnV0dG9uIiw0MyksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChPZSgyKS5vblN1Ym1pdHRlZENzdkRhdGFzZXRDbGljayhoKSl9KSxndCgyLFo5dCwxLDAsImNkcy1pY29uIiwzNCkoMyxXOXQsMSwwLCJjZHMtaWNv''@;'; put 'put ''biIsMzUpLEd0KDQsImNkcy1pY29uIiwzOSksTGUoNSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLHhyKCJhY3RpdmUiLGEuYWN0aXZlKSxmZSgpLHhlKCJuZ0lmIixhLmVycm9yKSxmZSgpLHhlKCJuZ0lmIixhLnN1Y2Nlc3MpLGZlKDIpLFJyKCIgIixhLmxpYmRz''@;'; put 'put ''LCIgIil9fWZ1bmN0aW9uIEc5dChjLGwpe2lmKDEmYyYmKGxpKDApLGRlKDEsInAiLDQyKSxMZSgyLCJTdWJtaXR0ZWQgdGFibGVzOiIpLGhlKCksZGUoMywiY2xyLXRyZWUiKSxndCg0LFk5dCw2LDUsImNsci10cmVlLW5vZGUiLDI5KSxoZSgpLGNpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2Zl''@;'; put 'put ''KDQpLHhlKCJuZ0Zvck9mIixhLnN1Ym1pdHRlZENzdkRhdGFzZXRzKX19ZnVuY3Rpb24gJDl0KGMsbCl7MSZjJiYoZGUoMCwiZGl2Iiw0NCksR3QoMSwiY2xyLWljb24iLDQ1KSxkZSgyLCJwIiw0NiksTGUoMywiIFBsZWFzZSB1cGxvYWQgYSBmaWxlICIpLGhlKCkoKSl9ZnVuY3Rpb24gSzl0''@;'; put 'put ''KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7bGkoMCksZGUoMSwiZGl2Iiw0NykoMiwiZGl2Iiw0OCkoMywicCIsNDkpLExlKDQsIiBTZWxlY3RlZCBmaWxlOiAiKSxkZSg1LCJzdHJvbmciKSxMZSg2KSxoZSgpLGRlKDcsImNsci10b29sdGlwIikoOCwiY2RzLWljb24iLDUwKSxGdCgiY2xp''@;'; put 'put ''Y2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDIpLm9uRGlzY2FyZEZpbGUoKSl9KSxoZSgpLGRlKDksImNsci10b29sdGlwLWNvbnRlbnQiKSxMZSgxMCwiIERpc2NhcmQgdGhlIGZpbGUgIiksaGUoKSgpKCksZGUoMTEsInAiLDUxKSxMZSgxMiwiIEZpbGUgc2l6ZTogIiksZGUo''@;'; put 'put ''MTMsInN0cm9uZyIpLExlKDE0KSxoZSgpKCksZGUoMTUsInAiLDUyKSxMZSgxNiwiIFBhc3RlIG9yIHR5cGUgdGhlIGxpc3Qgb2YgZGF0YXNldHMgdG8gdXBsb2FkOiAiKSxoZSgpLGRlKDE3LCJjbHItY29udHJvbC1oZWxwZXIiLDUzKSxMZSgxOCwiRWFjaCByb3cgaXMgb25lIGRhdGFzZXQu''@;'; put 'put ''IFdlIHdpbGwgYXV0b21hdGljYWxseSBkZXRlY3QgdGFibGVzIGJ5IHRoZSBzaGVldG5hbWUgYW5kIHBvcHVsYXRlIGlmIGFueS4iKSxoZSgpLEd0KDE5LCJob3QtdGFibGUiLDU0KSxkZSgyMCwiZGl2Iiw1NSkoMjEsImJ1dHRvbiIsNTYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''d3QoYSksQ3QoT2UoMikub25TdGFydFBhcnNpbmdGaWxlKCkpfSksTGUoMjIsIiBDb250aW51ZSAiKSxoZSgpKCkoKSgpLGNpKCl9aWYoMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDYpLF9yKGEuc2VsZWN0ZWRGaWxlLm5hbWUpLGZlKDgpLFJyKCIiLGEuc2VsZWN0ZWRGaWxlLnNpemVNQiwiIE1C''@;'; put 'put ''IiksZmUoNSkseGUoImFmdGVyR2V0Q29sSGVhZGVyIixhLmFmdGVyR2V0Q29sSGVhZGVyKSgic2V0dGluZ3MiLGEuaG90VXNlckRhdGFzZXRzKSgibGljZW5zZUtleSIsYS5ob3RUYWJsZUxpY2Vuc2VLZXkpLGZlKDIpLHhlKCJkaXNhYmxlZCIsIWEubWF0Y2hlZERhdGFzZXRzLmxlbmd0aCko''@;'; put 'put ''ImNsckxvYWRpbmciLGEudXBsb2FkTG9hZGluZyl9fWZ1bmN0aW9uIHE5dChjLGwpe2lmKDEmYyYmKGxpKDApLEd0KDEsImNsci1pY29uIiw1NyksZGUoMiwicCIsNDYpLExlKDMpLGhlKCksY2koKSksMiZjKXtjb25zdCBhPU9lKDQpO2ZlKDMpLFJyKCIgIixhLmZpbGVMb2FkaW5nU3RhdGUs''@;'; put 'put ''Ii4uLiAiKX19ZnVuY3Rpb24gWDl0KGMsbCl7MSZjJiYobGkoMCksR3QoMSwiY2xyLWljb24iLDU4KSxkZSgyLCJwIiw0NiksTGUoMywiIFBsZWFzZSBzZWxlY3QgYSBkYXRhc2V0IG9uIHRoZSBsZWZ0IHRvIHJldmlldyB0aGUgZGF0YSAiKSxoZSgpLGNpKCkpfWZ1bmN0aW9uIEo5dChjLGwp''@;'; put 'put ''e2lmKDEmYyYmKGRlKDAsImRpdiIsNDQpLGd0KDEscTl0LDQsMSwibmctY29udGFpbmVyIiw0KSgyLFg5dCw0LDAsIm5nLWNvbnRhaW5lciIsNCksaGUoKSksMiZjKXtjb25zdCBhPU9lKDMpO2ZlKCkseGUoIm5nSWYiLGEuZmlsZUxvYWRpbmdTdGF0ZSE9PWEuRmlsZUxvYWRpbmdTdGF0ZS5w''@;'; put 'put ''YXJzZWQpLGZlKCkseGUoIm5nSWYiLGEuZmlsZUxvYWRpbmdTdGF0ZT09PWEuRmlsZUxvYWRpbmdTdGF0ZS5wYXJzZWQpfX1mdW5jdGlvbiBROXQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw3NSkoMSwic3Ryb25nIiksTGUoMiwiU1VDQ0VTUyIpLGhlKCkoKSl9ZnVuY3Rpb24gZXZ0KGMsbCl7''@;'; put 'put ''MSZjJiYoZGUoMCwic3BhbiIsNzYpKDEsInN0cm9uZyIpLExlKDIsIkVSUk9SIiksaGUoKSgpKX1mdW5jdGlvbiB0dnQoYyxsKXsxJmMmJihkZSgwLCJwIiw2MyksTGUoMSwiIEVycm9yIGRldGFpbHM6ICIpLGhlKCkpfWZ1bmN0aW9uIG52dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2Rl''@;'; put 'put ''KDAsImJ1dHRvbiIsNzcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDUpO3JldHVybiBDdChoLnJlU3VibWl0VGFibGUoaC5hY3RpdmVQYXJzZWREYXRhc2V0KSl9KSxMZSgxLCIgUmVzdWJtaXQgIiksaGUoKX0yJmMmJnhlKCJjbHJMb2FkaW5nIixPZSg1KS5zdWJt''@;'; put 'put ''aXRMb2FkaW5nKX1mdW5jdGlvbiBydnQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDY5KSgxLCJkaXYiKSgyLCJwIiw2MiksTGUoMywiIFN1Ym1pdCBTdGF0dXM6ICIpLGd0KDQsUTl0LDMsMCwic3BhbiIsNzApKDUsZXZ0LDMsMCwic3BhbiIsNzEpLGhlKCksZ3QoNix0''@;'; put 'put ''dnQsMiwwLCJwIiw3MiksaGUoKSxkZSg3LCJkaXYiKSxndCg4LG52dCwyLDEsImJ1dHRvbiIsNzMpLGRlKDksImJ1dHRvbiIsNzQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDQpO3JldHVybiBDdChoLmRvd25sb2FkRmlsZShoLmFjdGl2ZVBhcnNlZERhdGFzZXQu''@;'; put 'put ''c3VibWl0UmVzdWx0LmxvZ3x8aC5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5zdWNjZXNzfHxoLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0LmVycm9yKSl9KSxMZSgxMCwiIERvd25sb2FkIGxvZyAiKSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9T2UoNCk7ZmUo''@;'; put 'put ''NCkseGUoIm5nSWYiLG51bGw9PWEuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQ/bnVsbDphLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0LnN1Y2Nlc3MpLGZlKCkseGUoIm5nSWYiLG51bGw9PWEuYWN0aXZlUGFyc2VkRGF0YXNldC5zdWJtaXRSZXN1bHQ/bnVsbDph''@;'; put 'put ''LmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0LmVycm9yKSxmZSgpLHhlKCJuZ0lmIixudWxsPT1hLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0P251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5lcnJvciksZmUoMikseGUoIm5nSWYiLCFhLnN1''@;'; put 'put ''Ym1pdHRpbmdDc3YmJihudWxsPT1hLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0P251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5lcnJvcikpfX1mdW5jdGlvbiBpdnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDc4KSgxLCJkaXYiLDc5KSxMZSgyKSxx''@;'; put 'put ''cygzLCJqc29uIiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoNCk7ZmUoMiksUnIoIiAiLGtjKDMsMSxudWxsPT1hLmFjdGl2ZVBhcnNlZERhdGFzZXQuc3VibWl0UmVzdWx0P251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdC5lcnJvciksIiAiKX19ZnVuY3Rpb24gb3Z0''@;'; put 'put ''KGMsbCl7aWYoMSZjJiYobGkoMCksZGUoMSwic3Ryb25nIiksTGUoMiksaGUoKSxjaSgpKSwyJmMpe2NvbnN0IGE9T2UoNCk7ZmUoMiksenUoJyInLG51bGw9PWEuYWN0aXZlUGFyc2VkRGF0YXNldC5wYXJzZVJlc3VsdC5yYW5nZVNoZWV0UmVzP251bGw6YS5hY3RpdmVQYXJzZWREYXRhc2V0''@;'; put 'put ''LnBhcnNlUmVzdWx0LnJhbmdlU2hlZXRSZXMuc2hlZXROYW1lLCciIScsbnVsbD09YS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNlUmVzdWx0LnJhbmdlU2hlZXRSZXM/bnVsbDphLmFjdGl2ZVBhcnNlZERhdGFzZXQucGFyc2VSZXN1bHQucmFuZ2VTaGVldFJlcy5yYW5nZUFkZHJlc3MsIiIp''@;'; put 'put ''fX1mdW5jdGlvbiBhdnQoYyxsKXsxJmMmJihkZSgwLCJzdHJvbmciKSxMZSgxLCJObyBkYXRhIGZvdW5kIiksaGUoKSl9ZnVuY3Rpb24gc3Z0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsODEpKDEsInN0cm9uZyIpLExlKDIsIlNlYXJjaGluZyBmb3IgdGhlIGRhdGEuLi4iKSxoZSgpLEd0KDMs''@;'; put 'put ''ImNsci1zcGlubmVyIiw4MiksaGUoKSl9ZnVuY3Rpb24gbHZ0KGMsbCl7aWYoMSZjJiYobGkoMCksZ3QoMSxhdnQsMiwwLCJzdHJvbmciLDQpKDIsc3Z0LDQsMCwic3BhbiIsODApLGNpKCkpLDImYyl7Y29uc3QgYT1PZSg0KTtmZSgpLHhlKCJuZ0lmIiwhYS5hY3RpdmVQYXJzZWREYXRhc2V0''@;'; put 'put ''LnBhcnNpbmdUYWJsZSksZmUoKSx4ZSgibmdJZiIsYS5hY3RpdmVQYXJzZWREYXRhc2V0LnBhcnNpbmdUYWJsZSl9fWZ1bmN0aW9uIGN2dChjLGwpezEmYyYmKGRlKDAsImRpdiIsODMpLEd0KDEsImNsci1zcGlubmVyIiw4NCksaGUoKSl9ZnVuY3Rpb24gdXZ0KGMsbCl7aWYoMSZjKXtjb25z''@;'; put 'put ''dCBhPU9uKCk7bGkoMCksZ3QoMSxydnQsMTEsNCwiZGl2Iiw1OSkoMixpdnQsNCwzLCJkaXYiLDYwKSxkZSgzLCJkaXYiLDYxKSg0LCJkaXYiKSg1LCJwIiw2MiksTGUoNiwiIEZvdW5kIGluIHJhbmdlOiAiKSxndCg3LG92dCwzLDIsIm5nLWNvbnRhaW5lciIsNCkoOCxsdnQsMywyLCJuZy1j''@;'; put 'put ''b250YWluZXIiLDQpLGhlKCksZGUoOSwicCIsNjMpLExlKDEwLCIgRGF0YXNldDogIiksZGUoMTEsInN0cm9uZyIpKDEyLCJjbHItdG9vbHRpcCIpKDEzLCJhIiw2NCksTGUoMTQpLGhlKCksZGUoMTUsImNsci10b29sdGlwLWNvbnRlbnQiLDY1KSxMZSgxNiwiIENsaWNrIHRvIGVkaXQgdGhl''@;'; put 'put ''IHRhYmxlICIpLGhlKCkoKSgpKCkoKSxkZSgxNywiZGl2IikoMTgsImNsci10b2dnbGUtd3JhcHBlciIpKDE5LCJpbnB1dCIsNjYpLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKDMpO3JldHVybiB2aShmLmFjdGl2ZVBhcnNlZERhdGFzZXQuaW5jbHVk''@;'; put 'put ''ZUluU3VibWlzc2lvbixoKXx8KGYuYWN0aXZlUGFyc2VkRGF0YXNldC5pbmNsdWRlSW5TdWJtaXNzaW9uPWgpLEN0KGgpfSksaGUoKSxkZSgyMCwibGFiZWwiKSxMZSgyMSwiSW5jbHVkZSBpbiBzdWJtaXNzaW9uIiksaGUoKSgpKCkoKSxndCgyMixjdnQsMiwwLCJkaXYiLDY3KSxHdCgyMywi''@;'; put 'put ''aG90LXRhYmxlIiw2OCksY2koKX1pZigyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoKSx4ZSgibmdJZiIsYS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdCksZmUoKSx4ZSgibmdJZiIsbnVsbD09YS5hY3RpdmVQYXJzZWREYXRhc2V0LnN1Ym1pdFJlc3VsdD9udWxsOmEuYWN0aXZlUGFy''@;'; put 'put ''c2VkRGF0YXNldC5zdWJtaXRSZXN1bHQuZXJyb3IpLGZlKDUpLHhlKCJuZ0lmIixhLmFjdGl2ZVBhcnNlZERhdGFzZXQucGFyc2VSZXN1bHQpLGZlKCkseGUoIm5nSWYiLCFhLmFjdGl2ZVBhcnNlZERhdGFzZXQucGFyc2VSZXN1bHQpLGZlKDUpLHhlKCJyb3V0ZXJMaW5rIiwiL2VkaXRvci8i''@;'; put 'put ''K2EuYWN0aXZlUGFyc2VkRGF0YXNldC5saWJkcyksZmUoKSxfcihhLmFjdGl2ZVBhcnNlZERhdGFzZXQubGliZHMpLGZlKCkseGUoImNsclBvc2l0aW9uIiwidG9wLXJpZ2h0IikoImNsclNpemUiLCJzbSIpLGZlKDQpLGZpKCJuZ01vZGVsIixhLmFjdGl2ZVBhcnNlZERhdGFzZXQuaW5jbHVk''@;'; put 'put ''ZUluU3VibWlzc2lvbikseGUoImRpc2FibGVkIiwhKGEuYWN0aXZlUGFyc2VkRGF0YXNldC5kYXRhc291cmNlJiZhLmFjdGl2ZVBhcnNlZERhdGFzZXQucGFyc2VSZXN1bHQpKSxmZSgzKSx4ZSgibmdJZiIsYS5pc0hvdEhpZGRlbiksZmUoKSx4ZSgiYWZ0ZXJHZXRDb2xIZWFkZXIiLGEuYWZ0''@;'; put 'put ''ZXJHZXRDb2xIZWFkZXIpKCJjbGFzc05hbWUiLFdzKDE4LEE5dCkpKCJsaWNlbnNlS2V5IixhLmhvdFRhYmxlTGljZW5zZUtleSkoIm11bHRpQ29sdW1uU29ydGluZyIsITApKCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsNTApKCJtYW51YWxDb2x1bW5SZXNpemUiLCEwKSgiZmlsdGVy''@;'; put 'put ''cyIsITApfX1mdW5jdGlvbiBkdnQoYyxsKXtpZigxJmMmJihsaSgwKSxndCgxLEo5dCwzLDIsImRpdiIsOSkoMix1dnQsMjQsMTksIm5nLWNvbnRhaW5lciIsNCksY2koKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKCkseGUoIm5nSWYiLCFhLmFjdGl2ZVBhcnNlZERhdGFzZXQpLGZlKCkseGUo''@;'; put 'put ''Im5nSWYiLGEuYWN0aXZlUGFyc2VkRGF0YXNldCl9fWZ1bmN0aW9uIGh2dChjLGwpezEmYyYmKGRlKDAsImRpdiIsNDQpLEd0KDEsImNsci1pY29uIiw1OCksZGUoMiwicCIsNDYpLExlKDMsIiBQbGVhc2Ugc2VsZWN0IGEgZGF0YXNldCBvbiB0aGUgbGVmdCB0byByZXZpZXcgdGhlIHN1Ym1p''@;'; put 'put ''dCByZXN1bHRzICIpLGhlKCkoKSl9ZnVuY3Rpb24gZnZ0KGMsbCl7aWYoMSZjJiYobGkoMCksZ3QoMSxodnQsNCwwLCJkaXYiLDkpLGNpKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLHhlKCJuZ0lmIiwhYS5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0KX19ZnVuY3Rpb24gcHZ0KGMsbCl7''@;'; put 'put ''MSZjJiYoZGUoMCwic3BhbiIsNzUpKDEsInN0cm9uZyIpLExlKDIsIlNVQ0NFU1MiKSxoZSgpKCkpfWZ1bmN0aW9uIGd2dChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDc2KSgxLCJzdHJvbmciKSxMZSgyLCJFUlJPUiIpLGhlKCkoKSl9ZnVuY3Rpb24gbXZ0KGMsbCl7MSZjJiYoZGUoMCwicCIs''@;'; put 'put ''NjMpLExlKDEsIiBFcnJvciBkZXRhaWxzOiAiKSxoZSgpKX1mdW5jdGlvbiB2dnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDc4KSgxLCJkaXYiLDc5KSxMZSgyKSxxcygzLCJqc29uIiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoMiksUnIoIiAiLGtjKDMsMSxhLmFjdGl2ZVN1''@;'; put 'put ''Ym1pdHRlZENzdkRhdGFzZXQuZXJyb3IpLCIgIil9fWZ1bmN0aW9uIGJ2dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2xpKDApLGRlKDEsImRpdiIsODUpKDIsImRpdiIpKDMsInAiLDYyKSxMZSg0LCIgTWF0Y2hlZCB3aXRoIGRhdGFzZXQ6ICIpLGRlKDUsInN0cm9uZyIpKDYsImNsci10''@;'; put 'put ''b29sdGlwIikoNywiYSIsNjQpLExlKDgpLGhlKCksZGUoOSwiY2xyLXRvb2x0aXAtY29udGVudCIsNjUpLExlKDEwLCIgQ2xpY2sgdG8gZWRpdCB0aGUgdGFibGUgIiksaGUoKSgpKCkoKSxkZSgxMSwicCIsNjIpLExlKDEyLCIgU3RhdHVzOiAiKSxndCgxMyxwdnQsMywwLCJzcGFuIiw3MCko''@;'; put 'put ''MTQsZ3Z0LDMsMCwic3BhbiIsNzEpLGhlKCksZ3QoMTUsbXZ0LDIsMCwicCIsNzIpLGhlKCksZGUoMTYsImRpdiIpKDE3LCJidXR0b24iLDc0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgyKTtyZXR1cm4gQ3QoaC5kb3dubG9hZEZpbGUoaC5hY3RpdmVTdWJtaXR0''@;'; put 'put ''ZWRDc3ZEYXRhc2V0LnN1Y2Nlc3N8fGguYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldC5lcnJvcikpfSksTGUoMTgsIiBEb3dubG9hZCBsb2cgIiksaGUoKSgpKCksZ3QoMTksdnZ0LDQsMywiZGl2Iiw2MCksY2koKX1pZigyJmMpe2NvbnN0IGE9T2UoMik7ZmUoNykseGUoInJvdXRlckxpbmsi''@;'; put 'put ''LCIvZWRpdG9yLyIrYS5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0LmxpYmRzKSxmZSgpLF9yKGEuYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldC5saWJkcyksZmUoKSx4ZSgiY2xyUG9zaXRpb24iLCJ0b3AtcmlnaHQiKSgiY2xyU2l6ZSIsInNtIiksZmUoNCkseGUoIm5nSWYiLGEuYWN0aXZl''@;'; put 'put ''U3VibWl0dGVkQ3N2RGF0YXNldC5zdWNjZXNzKSxmZSgpLHhlKCJuZ0lmIixhLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQuZXJyb3IpLGZlKCkseGUoIm5nSWYiLGEuYWN0aXZlU3VibWl0dGVkQ3N2RGF0YXNldC5lcnJvciksZmUoNCkseGUoIm5nSWYiLGEuYWN0aXZlU3VibWl0dGVkQ3N2''@;'; put 'put ''RGF0YXNldC5lcnJvcil9fWZ1bmN0aW9uIHl2dChjLGwpe2lmKDEmYyYmKGxpKDApLGd0KDEsSzl0LDIzLDcsIm5nLWNvbnRhaW5lciIsNCkoMixkdnQsMywyLCJuZy1jb250YWluZXIiLDQpKDMsZnZ0LDIsMSwibmctY29udGFpbmVyIiw0KSg0LGJ2dCwyMCw4LCJuZy1jb250YWluZXIiLDQp''@;'; put 'put ''LGNpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKCkseGUoIm5nSWYiLCFhLnBhcnNlZERhdGFzZXRzLmxlbmd0aCYmbnVsbCE9PWEuc2VsZWN0ZWRGaWxlKSxmZSgpLHhlKCJuZ0lmIixhLnBhcnNlZERhdGFzZXRzLmxlbmd0aCYmIWEuc3VibWl0dGVkQ3N2RGF0YXNldHMubGVuZ3RoKSxmZSgp''@;'; put 'put ''LHhlKCJuZ0lmIixhLnN1Ym1pdHRlZENzdkRhdGFzZXRzLmxlbmd0aCksZmUoKSx4ZSgibmdJZiIsYS5hY3RpdmVTdWJtaXR0ZWRDc3ZEYXRhc2V0KX19ZnVuY3Rpb24gX3Z0KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIsODYpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKCksUnIo''@;'; put 'put ''IiBEdWUgdG8gY3VycmVudCBsaWNlbmNlLCBvbmx5ICIsYS5saWNlbmNlU3RhdGUudmFsdWUuc3VibWl0X3Jvd3NfbGltaXQsIiByb3dzIGluIGVhY2ggZmlsZSB3aWxsIGJlIHN1Ym1pdHRlZC4gVG8gcmVtb3ZlIHRoZSByZXN0cmljdGlvbiwgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9s''@;'; put 'put ''bGVyLmlvLiAiKX19dmFyIFN3PWZ1bmN0aW9uKGMpe3JldHVybiBjLnJlYWRpbmc9IlJlYWRpbmcgdGhlIGZpbGUiLGMucGFyc2luZz0iU2VhcmNoaW5nIGZvciB0aGUgZGF0YSBpbiB0aGUgZmlsZSIsYy5wYXJzZWQ9IlNlYXJjaGluZyBmb3IgdGhlIGRhdGEgZmluaXNoZWQiLGMubm90U2Vs''@;'; put 'put ''ZWN0ZWQ9IkZpbGUgbm90IHNlbGVjdGVkIixjfShTd3x8e30pO2NvbnN0IHd2dD1be3BhdGg6IiIsY29tcG9uZW50Ong5dCxjaGlsZHJlbjpbe3BhdGg6IiIsY29tcG9uZW50OigoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCl7dGhpcy5ldmVudFNlcnZpY2U9YSx0aGlz''@;'; put 'put ''LmxpY2VuY2VTZXJ2aWNlPWQsdGhpcy5oZWxwZXJTZXJ2aWNlPWgsdGhpcy5zYXNTdG9yZVNlcnZpY2U9Zix0aGlzLnNwcmVhZHNoZWV0U2VydmljZT12LHRoaXMuc2FzU2VydmljZT1NLHRoaXMuY2RyPUQsdGhpcy5jb250ZW50Q29udGFpbmVyQ2xhc3M9ITAsdGhpcy5saWNlbmNlU3RhdGU9''@;'; put 'put ''dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5JbmZpbml0eT0xLzAsdGhpcy5maWxlTG9hZGluZ1N0YXRlPVN3Lm5vdFNlbGVjdGVkLHRoaXMuRmlsZUxvYWRpbmdTdGF0ZT1Tdyx0aGlzLmhvdFRhYmxlTGljZW5zZUtleT12b2lkIDAsdGhpcy5ob3RUYWJsZU1heFJvd3M9''@;'; put 'put ''dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZHx8MS8wLHRoaXMuY3N2RmlsZXM9W10sdGhpcy5jc3ZTdWJtaXR0aW5nPSExLHRoaXMuYXV0b0RldGVjdGluZ0NvbHVtbnM9ITEsdGhpcy5zZWxlY3RlZEZpbGU9bnVsbCx0aGlzLnBhcnNlZERhdGFzZXRzPVtdLHRo''@;'; put 'put ''aXMuc3VibWl0dGVkQ3N2RGF0YXNldHM9W10sdGhpcy5kYXRhc2V0c0xvYWRpbmc9ITEsdGhpcy51cGxvYWRMb2FkaW5nPSExLHRoaXMuc3VibWl0TG9hZGluZz0hMSx0aGlzLm1hdGNoZWREYXRhc2V0cz1bXSx0aGlzLnNoZWV0TmFtZXM9W10sdGhpcy51c2VySW5wdXREYXRhc2V0cz0iIix0''@;'; put 'put ''aGlzLmxpYnNBbmRUYWJsZXM9e30sdGhpcy5zaG93U3VibWl0UmVhc29uTW9kYWw9ITEsdGhpcy5zdWJtaXRSZWFzb25NZXNzYWdlPSIiLHRoaXMuaG90VXNlckRhdGFzZXRzPXtjb2xIZWFkZXJzOlsiTGlicmFyeSIsIlRhYmxlIl0sZGF0YTpbWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl0sWyIi''@;'; put 'put ''LCIiXSxbIiIsIiJdLFsiIiwiIl0sWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl0sWyIiLCIiXSxbIiIsIiJdLFsiIiwiIl1dLGNvbHVtbnM6W3t0eXBlOiJhdXRvY29tcGxldGUiLGZpbHRlcjohMSxzb3VyY2U6W119LHt0eXBlOiJhdXRvY29tcGxldGUiLGZpbHRlcjohMSxzb3VyY2U6W119XSx3''@;'; put 'put ''aWR0aDoiMTAwJSIsaGVpZ2h0OiIzMDVweCIsY2xhc3NOYW1lOlsiaHREYXJrIl0sY29udGV4dE1lbnU6e2l0ZW1zOntyb3dfYWJvdmU6e25hbWU6Ikluc2VydCBSb3cgYWJvdmUifSxyb3dfYmVsb3c6e25hbWU6Ikluc2VydCBSb3cgYmVsb3cifX19LG1hbnVhbFJvd01vdmU6ITAsY29sdW1u''@;'; put 'put ''U29ydGluZzohMH0sdGhpcy5hZnRlckdldENvbEhlYWRlcj1FOXQsdGhpcy5ob3RSZWdpc3RlcmVyPW5ldyBabX1uZ09uSW5pdCgpe3RoaXMubGljZW5jZVNlcnZpY2UuaG90X2xpY2Vuc2Vfa2V5LnN1YnNjcmliZShhPT57dGhpcy5ob3RUYWJsZUxpY2Vuc2VLZXk9YX0pfW5nQWZ0ZXJDb250''@;'; put 'put ''ZW50SW5pdCgpe0tuLmVkaXRvci5zdGFydHVwU2V0P3RoaXMuZ2V0RnJvbUdsb2JhbHMoKTp0aGlzLmV2ZW50U2VydmljZS5vblN0YXJ0dXBEYXRhTG9hZGVkLnN1YnNjcmliZSgoKT0+e3RoaXMuZ2V0RnJvbUdsb2JhbHMoKX0pfWdldEZyb21HbG9iYWxzKCl7dGhpcy5saWJzQW5kVGFibGVz''@;'; put 'put ''PUtuLmVkaXRvci5saWJzQW5kVGFibGVzO2NvbnN0IGE9T2JqZWN0LmtleXModGhpcy5saWJzQW5kVGFibGVzKTt0aGlzLmhvdFVzZXJEYXRhc2V0cz8uY29sdW1ucyYmKHRoaXMuaG90VXNlckRhdGFzZXRzLmNvbHVtbnNbMF0uc291cmNlPWEpfW9uRmlsZUNoYW5nZShhKXt2YXIgZD10aGlz''@;'; put 'put ''O3JldHVybiBlZShmdW5jdGlvbiooKXtjb25zdCBoPWE/LnRhcmdldD8uZmlsZXN8fFtdO2lmKGgubGVuZ3RoPDEpcmV0dXJuIHZvaWQgZC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCwiTm8gZmlsZSBmb3VuZC4iLG51bGwsIkZpbGUgVXBsb2FkIik7bGV0IGY9IiI7Zm9yKGxl''@;'; put 'put ''dCB2IG9mIGgpe2NvbnN0IE09di5uYW1lLnNwbGl0KCIuIikucG9wKCk7aWYoZnx8KGY9TSksZiE9PU0pcmV0dXJuIHZvaWQgZC5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiTWl4ZWQgZXh0ZW5zaW9ucyBlcnJvciIsIlBsZWFzZSBzZWxlY3QgZmlsZXMgd2l0aCBzYW1lIGV4dGVuc2lv''@;'; put 'put ''bi4iKTtmPU19aWYoWyJ4bHN4IiwieGxzbSIsInhsbSJdLmluY2x1ZGVzKGYpKWQuc2VsZWN0ZWRGaWxlPWEudGFyZ2V0LmZpbGVzWzBdLGQuc2VsZWN0ZWRGaWxlJiYoZC5maWxlTG9hZGluZ1N0YXRlPVN3LnJlYWRpbmcsZC5zZWxlY3RlZEZpbGUuc2l6ZU1CPWQuc3ByZWFkc2hlZXRTZXJ2''@;'; put 'put ''aWNlLmJ5dGVzVG9NQihkLnNlbGVjdGVkRmlsZS5zaXplKSxkLnNwcmVhZHNoZWV0U2VydmljZS54bHN4UmVhZEZpbGUoZC5zZWxlY3RlZEZpbGUpLnRoZW4odj0+e2QuZmlsZUxvYWRpbmdTdGF0ZT1Tdy5wYXJzaW5nLGQuc2VsZWN0ZWRGaWxlLndvcmtib29rPXZ9KSksZC5pbml0VXNlcklu''@;'; put 'put ''cHV0SG90KCksZC5vbkF1dG9EZXRlY3RDb2x1bW5zKCk7ZWxzZXtpZigiY3N2IiE9PWYpcmV0dXJuIHZvaWQgZC5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwobnVsbCwiT25seSBleGNlbCBleHRlbnNpb25zIGFyZSBhbGxvd2VkLiAoeGxzeCkiLG51bGwsIkV4dGVuc2lvbiBFcnJvciIp''@;'; put 'put ''O2Qub25NdWx0aUNzdkZpbGVzKGEudGFyZ2V0LmZpbGVzKX1hLnRhcmdldC52YWx1ZT0iIn0pKCl9b25NdWx0aUNzdkZpbGVzKGEpe3ZhciBkPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2ZvcihsZXQgaCBvZiBhKXtjb25zdCBmPWQucGFyc2VEYXRhc2V0RnJvbUNzdk5hbWUoaC5uYW1l''@;'; put 'put ''KTtkLmlzVmFsaWREYXRhc2V0Rm9ybWF0KGYpJiZkLmlzVmFsaWREYXRhc2V0UmVmZXJlbmNlKGYpJiZkLmNzdkZpbGVzLnB1c2goe2ZpbGU6aCxmaWxlTmFtZTpoLm5hbWV9KX1kLmNzdkZpbGVzLmxlbmd0aD8oZC5jc3ZTdWJtaXR0aW5nPSEwLHlpZWxkIGQuc3VibWl0Q3N2RmlsZXMoKSxk''@;'; put 'put ''LmNzdlN1Ym1pdHRpbmc9ITEpOmQuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkNTViBVcGxvYWQiLCJOb25lIG9mIHRoZSBhdHRhY2hlZCBDU1YgZmlsZSBuYW1lcyBtYXRjaGVkIGFuIGFjdHVhbCBkYXRhc2V0LiIpfSkoKX1vbkRpc2NhcmRGaWxlKCl7dGhpcy5zZWxlY3RlZEZpbGU9''@;'; put 'put ''bnVsbCx0aGlzLnVzZXJJbnB1dERhdGFzZXRzPSIifW9uU3RhcnRQYXJzaW5nRmlsZSgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2EudXBsb2FkTG9hZGluZz0hMDtjb25zdCBkPVtdO2xldCBoPVtdO2ZvcihsZXQgZiBvZiBhLm1hdGNoZWREYXRhc2V0cyl7Y29uc3Qgdj1h''@;'; put 'put ''LmZldGNoRGF0YXNldChmKTtkLnB1c2godil9UHJvbWlzZS5hbGxTZXR0bGVkKGQpLnRoZW4oZj0+e2YuZm9yRWFjaChNPT57ImZ1bGZpbGxlZCI9PT1NLnN0YXR1cyYmTS52YWx1ZSYmaC5wdXNoKE0udmFsdWUpfSksYS51cGxvYWRMb2FkaW5nPSExLGEuYnVpbGREYXRhc2V0c09iamVjdHMo''@;'; put 'put ''aCkuZm9yRWFjaChNPT57YS5wYXJzZWREYXRhc2V0cy5wdXNoKHtsaWJkczpNLmxpYmRzLGluY2x1ZGVJblN1Ym1pc3Npb246ITAsZGF0YXNldEluZm86TSxwYXJzaW5nVGFibGU6ITB9KX0pLGEud29ya2Jvb2tMb2FkZWQoKS50aGVuKE09Pntmb3IobGV0IEQgb2YgYS5wYXJzZWREYXRhc2V0''@;'; put 'put ''cylhLnNwcmVhZHNoZWV0U2VydmljZS5wYXJzZUV4Y2VsRmlsZSh7ZmlsZTphLnNlbGVjdGVkRmlsZSx3b3JrYm9vazpNLHBhc3N3b3JkOmEuc2VsZWN0ZWRGaWxlLnBhc3N3b3JkfHx2b2lkIDAsZGNWYWxpZGF0b3I6RC5kYXRhc2V0SW5mby5kY1ZhbGlkYXRvcixoZWFkZXJQa3M6RC5kYXRh''@;'; put 'put ''c2V0SW5mby5oZWFkZXJQa3MsaGVhZGVyQXJyYXk6RC5kYXRhc2V0SW5mby5oZWFkZXJBcnJheSxoZWFkZXJTaG93OltdLHRpbWVIZWFkZXJzOkQuZGF0YXNldEluZm8udGltZUhlYWRlcnMsZGF0ZUhlYWRlcnM6RC5kYXRhc2V0SW5mby5kYXRlSGVhZGVycyxkYXRlVGltZUhlYWRlcnM6RC5k''@;'; put 'put ''YXRhc2V0SW5mby5kYXRlVGltZUhlYWRlcnMseGxSdWxlczpELmRhdGFzZXRJbmZvLnhsUnVsZXN9KS50aGVuKFo9PntpZihhLmZpbGVMb2FkaW5nU3RhdGU9U3cucGFyc2VkLFomJlouZGF0YSl7bGV0IG5lPVtdO1ouZGF0YS5tYXAoY2U9PntsZXQgYmU9e307Wi5oZWFkZXJTaG93Lm1hcCgo''@;'; put 'put ''RWUsQmUpPT57YmVbRWVdPWNlW0JlXX0pLGJlLl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fX3x8KGJlLl9fX19fREVMRVRFX19USElTX19SRUNPUkRfX19fXz0iTm8iKSxuZS5wdXNoKGJlKX0pLEQuZGF0YXNvdXJjZT1uZSxELnBhcnNlUmVzdWx0PVosRC5wYXJzaW5nVGFibGU9ITF9''@;'; put 'put ''fSkuY2F0Y2goWj0+e2NvbnNvbGUud2FybigiUGFyc2luZyBleGNlbCBmaWxlIGVycm9yLiIsWiksRC5kYXRhc291cmNlPVtdLEQuaW5jbHVkZUluU3VibWlzc2lvbj0hMSxELnBhcnNpbmdUYWJsZT0hMX0pfSl9KX0pKCl9b25TdWJtaXRBbGwoKXt0aGlzLnRhYmxlc1RvU3VibWl0Lmxlbmd0''@;'; put 'put ''aD90aGlzLnNob3dTdWJtaXRSZWFzb25Nb2RhbD0hMDp0aGlzLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJObyB0YWJsZXMgdG8gc3VibWl0IiwiUGxlYXNlIGluY2x1ZGUgYXQgbGVhc3Qgb25lIHRhYmxlIHRvIHByb2NlZWQuIil9b25EaXNjYXJkKCl7dGhpcy5wYXJzZWREYXRhc2V0''@;'; put 'put ''cz1bXSx0aGlzLm1hdGNoZWREYXRhc2V0cz1bXSx0aGlzLnNlbGVjdGVkRmlsZT1udWxsLHRoaXMudXNlcklucHV0RGF0YXNldHM9IiIsdGhpcy5zdWJtaXRSZWFzb25NZXNzYWdlPSIifWluaXRIb3QoKXtzZXRUaW1lb3V0KCgpPT57dGhpcy5ob3RJbnN0YW5jZT10aGlzLmhvdFJlZ2lzdGVy''@;'; put 'put ''ZXIuZ2V0SW5zdGFuY2UoImhvdEluc3RhbmNlIik7Y29uc3QgZD10aGlzLmNvbnRlbnRBcmVhUmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0LTE2MCsicHgiO3RoaXMuYWN0aXZlUGFyc2VkRGF0YXNldCYmdGhpcy5ob3RJbnN0YW5jZS51cGRhdGVTZXR0aW5ncyh7ZGF0YTp0aGlzLmFj''@;'; put 'put ''dGl2ZVBhcnNlZERhdGFzZXQuZGF0YXNvdXJjZXx8W10sY29sSGVhZGVyczp0aGlzLmFjdGl2ZVBhcnNlZERhdGFzZXQuZGF0YXNldEluZm8uaGVhZGVyQ29sdW1ucyxjb2x1bW5zOnRoaXMuYWN0aXZlUGFyc2VkRGF0YXNldC5kYXRhc2V0SW5mby5kY1ZhbGlkYXRvcj8uZ2V0UnVsZXMoKSxy''@;'; put 'put ''ZWFkT25seTohMCxoZWlnaHQ6ZHx8IjMwMHB4IixjbGFzc05hbWU6Imh0RGFyayJ9KX0pfWluaXRVc2VySW5wdXRIb3QoKXt2YXIgYT10aGlzO3NldFRpbWVvdXQoKCk9Pnt0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQ9dGhpcy5ob3RSZWdpc3RlcmVyLmdldEluc3RhbmNlKCJob3RJbnN0''@;'; put 'put ''YW5jZVVzZXJEYXRhc2V0IiksdGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LmFkZEhvb2soImJlZm9yZUNoYW5nZSIsKGQsaCk9PntpZihkKWZvcihsZXQgZiBvZiBkKWYmJmZbM10mJihmWzNdPWZbM10udG9VcHBlckNhc2UoKSl9KSx0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuYWRk''@;'; put 'put ''SG9vaygiYWZ0ZXJDaGFuZ2UiLGZ1bmN0aW9uKCl7dmFyIGQ9ZWUoZnVuY3Rpb24qKGgsZil7aWYoaCl7ImVkaXQiPT09ZiYmKHlpZWxkIGEub25Vc2VySW5wdXREYXRhc2V0c0NoYW5nZSgpKTtmb3IobGV0IHYgb2YgaClhLm1hcmtVbm1hdGNoZWRSb3dzKHZbMF0pO2EuZHluYW1pY0NlbGxW''@;'; put 'put ''YWxpZGF0aW9ucygpLGEuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5yZW5kZXIoKX19KTtyZXR1cm4gZnVuY3Rpb24oaCxmKXtyZXR1cm4gZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSx0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuYWRkSG9vaygiYWZ0ZXJSZW1vdmVSb3ciLGZ1bmN0''@;'; put 'put ''aW9uKCl7dmFyIGQ9ZWUoZnVuY3Rpb24qKGgsZix2LE0pe3lpZWxkIGEub25Vc2VySW5wdXREYXRhc2V0c0NoYW5nZSgpO2ZvcihsZXQgRCBvZiB2KWEubWFya1VubWF0Y2hlZFJvd3MoRCl9KTtyZXR1cm4gZnVuY3Rpb24oaCxmLHYsTSl7cmV0dXJuIGQuYXBwbHkodGhpcyxhcmd1bWVudHMp''@;'; put 'put ''fX0oKSl9KX1keW5hbWljQ2VsbFZhbGlkYXRpb25zKCl7dGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LmdldERhdGEoKS5mb3JFYWNoKChkLGgpPT57Y29uc3QgZj1kWzBdO2YmJmYubGVuZ3RoJiZ0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuc2V0Q2VsbE1ldGEoaCwxLCJzb3VyY2Ui''@;'; put 'put ''LHRoaXMubGlic0FuZFRhYmxlc1tmXSl9KX1tYXJrVW5tYXRjaGVkUm93cyhhKXtjb25zdCBkPXRoaXMuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5nZXREYXRhQXRSb3coYSksaD1gJHtkWzBdfS4ke2RbMV19YCxmPXRoaXMuaG90SW5zdGFuY2VVc2VyRGF0YXNldC5nZXRDZWxsTWV0YUF0Um93''@;'; put 'put ''KGEpO2QmJmRbMF0mJmRbMV0/dGhpcy5tYXRjaGVkRGF0YXNldHMuaW5jbHVkZXMoaCk/Zi5mb3JFYWNoKHY9Pnt0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuc2V0Q2VsbE1ldGEoYSx2LmNvbCwiY2xhc3NOYW1lIiwiIil9KTpmLmZvckVhY2godj0+e3RoaXMuaG90SW5zdGFuY2VVc2Vy''@;'; put 'put ''RGF0YXNldC5zZXRDZWxsTWV0YShhLHYuY29sLCJjbGFzc05hbWUiLCJub3QtbWF0Y2hlZCIpfSk6Zi5mb3JFYWNoKHY9Pnt0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQuc2V0Q2VsbE1ldGEoYSx2LmNvbCwiY2xhc3NOYW1lIiwiIil9KX1vblVzZXJJbnB1dERhdGFzZXRzQ2hhbmdlKCl7''@;'; put 'put ''cmV0dXJuIG5ldyBQcm9taXNlKChhLGQpPT57dGhpcy5oZWxwZXJTZXJ2aWNlLmRlYm91bmNlQ2FsbCgxMDAsKCk9Pntjb25zdCBoPXRoaXMuZ2V0RGF0YXNldHNGcm9tSG90KCk7dGhpcy5tYXRjaGVkRGF0YXNldHM9W10saC5mb3JFYWNoKGY9Pntjb25zdCB2PWYudHJpbSgpO3RoaXMuaXNW''@;'; put 'put ''YWxpZERhdGFzZXRGb3JtYXQodikmJnRoaXMuaXNWYWxpZERhdGFzZXRSZWZlcmVuY2UodikmJiF0aGlzLm1hdGNoZWREYXRhc2V0cy5pbmNsdWRlcyh2KT90aGlzLm1hdGNoZWREYXRhc2V0cy5wdXNoKHYpOmNvbnNvbGUud2FybihgU2hlZXQgbmFtZTogJHt2fSBpcyBub3QgYW4gYWN0dWFs''@;'; put 'put ''IGRhdGFzZXQgcmVmZXJlbmNlLmApfSksdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpLGEodm9pZCAwKX0pfSl9b25BdXRvRGV0ZWN0Q29sdW1ucygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCBkPSExO2lmKHlpZWxkIGEucGFyc2VFeGNlbFNoZWV0TmFtZXMoKS50aGVu''@;'; put 'put ''KHY9PnthLnNoZWV0TmFtZXM9dn0pLmNhdGNoKHY9Pnt2LmluY2x1ZGVzKCJwYXNzd29yZCIpJiYoZD0hMCl9KSxkKXJldHVybiBhLm9uRGlzY2FyZEZpbGUoKSx2b2lkIGEuZXZlbnRTZXJ2aWNlLnNob3dJbmZvTW9kYWwoIkxvY2tlZCBmaWxlIiwiV2UgZmFpbGVkIHRvIHVubG9jayB0aGUg''@;'; put 'put ''ZmlsZS4iKTthLnNoZWV0TmFtZXMmJihhLm1hdGNoZWREYXRhc2V0cz1bXSxhLnVzZXJJbnB1dERhdGFzZXRzPSIiLGEuc2hlZXROYW1lcy5mb3JFYWNoKCh2LE0pPT57Y29uc3QgRD12LnRyaW0oKTthLmlzVmFsaWREYXRhc2V0Rm9ybWF0KEQpJiZhLmlzVmFsaWREYXRhc2V0UmVmZXJlbmNl''@;'; put 'put ''KEQpP2EubWF0Y2hlZERhdGFzZXRzLnB1c2goRCk6Y29uc29sZS53YXJuKGBTaGVldCBuYW1lOiAke0R9IGlzIG5vdCBhbiBhY3R1YWwgZGF0YXNldCByZWZlcmVuY2UuYCl9KSksYS51c2VySW5wdXREYXRhc2V0cz1hLm1hdGNoZWREYXRhc2V0cy5qb2luKCJcbiIpO2NvbnN0IGg9YS5tYXRj''@;'; put 'put ''aGVkRGF0YXNldHMubWFwKHY9Plt2LnNwbGl0KCIuIilbMF0sdi5zcGxpdCgiLiIpWzFdXSksZj1hLmhvdFVzZXJEYXRhc2V0cy5kYXRhLmxlbmd0aDtpZihoLmxlbmd0aDxmKXtjb25zdCB2PWYtaC5sZW5ndGg7Zm9yKGxldCBNPTA7TTx2O00rKyloLnB1c2goWyIiLCIiXSl9YS5ob3RJbnN0''@;'; put 'put ''YW5jZVVzZXJEYXRhc2V0LnVwZGF0ZURhdGEoaCksYS5keW5hbWljQ2VsbFZhbGlkYXRpb25zKCl9KSgpfW9uUGFyc2VkRGF0YXNldENsaWNrKGEpe3RoaXMuZGVzZWxlY3RBbGxQYXJzZWREYXRhc2V0cygpLGEuYWN0aXZlPSEwLHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKSx0aGlzLmluaXRI''@;'; put 'put ''b3QoKX1vblN1Ym1pdHRlZENzdkRhdGFzZXRDbGljayhhKXt0aGlzLmRlc2VsZWN0QWxsU3VibWl0dGVkQ3N2RGF0YXNldHMoKSxhLmFjdGl2ZT0hMH1nZXQgYWN0aXZlUGFyc2VkRGF0YXNldCgpe3JldHVybiB0aGlzLnBhcnNlZERhdGFzZXRzLmZpbmQoYT0+YS5hY3RpdmUpfWdldCBhY3Rp''@;'; put 'put ''dmVTdWJtaXR0ZWRDc3ZEYXRhc2V0KCl7cmV0dXJuIHRoaXMuc3VibWl0dGVkQ3N2RGF0YXNldHMuZmluZChhPT5hLmFjdGl2ZSl9Z2V0IG5vdEZvdW5kRGF0YXNldHMoKXtyZXR1cm4gdGhpcy5nZXREYXRhc2V0c0Zyb21Ib3QoKS5maWx0ZXIoZD0+IXRoaXMubWF0Y2hlZERhdGFzZXRzLmlu''@;'; put 'put ''Y2x1ZGVzKGQudHJpbSgpKSkuZmlsdGVyKGQ9PmQubGVuZ3RoKX1nZXQgaXNIb3RIaWRkZW4oKXtpZighdGhpcy5ob3RJbnN0YW5jZSlyZXR1cm4hMDt0cnl7Y29uc3QgYT10aGlzLmhvdEluc3RhbmNlLmdldFNldHRpbmdzKCkuY2xhc3NOYW1lO3JldHVybiEhYSYmYS5pbmNsdWRlcygiaHRD''@;'; put 'put ''dXN0b21IaWRkZW4iKX1jYXRjaHtyZXR1cm4hMH19Z2V0IHRhYmxlc1RvU3VibWl0KCl7cmV0dXJuIHRoaXMucGFyc2VkRGF0YXNldHMuZmlsdGVyKGE9PmEuZGF0YXNvdXJjZSYmYS5wYXJzZVJlc3VsdCYmYS5pbmNsdWRlSW5TdWJtaXNzaW9uKX1nZXQgc3VibWl0dGluZ0Nzdigpe3JldHVy''@;'; put 'put ''biB0aGlzLmNzdkZpbGVzLmxlbmd0aD4wfWdldCBleGNlbHNTdWJtaXR0ZWQoKXtyZXR1cm4hIXRoaXMucGFyc2VkRGF0YXNldHMuZmlsdGVyKGE9PmEuc3VibWl0UmVzdWx0KS5sZW5ndGh9ZG93bmxvYWRGaWxlKGEpe3RoaXMuaGVscGVyU2VydmljZS5kb3dubG9hZFRleHRGaWxlKGBzdGFn''@;'; put 'put ''ZWRhdGEtJHt0aGlzLmFjdGl2ZVN1Ym1pdHRlZENzdkRhdGFzZXQ/LmxpYmRzfS1sb2dgLEpTT04uc3RyaW5naWZ5KGEpKX1zdWJtaXRDc3ZGaWxlcygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2xldCBkPVtdO2ZvcihsZXQgaCBvZiBhLmNzdkZpbGVzKXtjb25zdCBmPWEu''@;'; put 'put ''cGFyc2VEYXRhc2V0RnJvbUNzdk5hbWUoaC5maWxlTmFtZSk7bGV0IHYsTTt5aWVsZCBhLnNhc1NlcnZpY2UudXBsb2FkRmlsZSgic2VydmljZXMvZWRpdG9ycy9sb2FkZmlsZSIsW2hdLHt0YWJsZTpmfSkudGhlbihEPT57dHlwZW9mIEQuYWRhcHRlclJlc3BvbnNlLnNhc2pzQWJvcnQ8InUi''@;'; put 'put ''P3Y9RC5hZGFwdGVyUmVzcG9uc2Uuc2FzanNBYm9ydDpNPUQuYWRhcHRlclJlc3BvbnNlfSxEPT57Y29uc29sZS5lcnJvcigiZXJyIixEKSx2PUQuYWRhcHRlclJlc3BvbnNlfSksZC5wdXNoKHtzdWNjZXNzOk0sZXJyb3I6dixsaWJkczpmfSl9YS5zdWJtaXR0ZWRDc3ZEYXRhc2V0cz1kfSko''@;'; put 'put ''KX1mZXRjaERhdGFzZXQoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aWYoYSlyZXR1cm4gZC5zYXNTdG9yZVNlcnZpY2UuY2FsbFNlcnZpY2Uoe0xJQkRTOmEsT1VUREVTVDoiV0VCIn0sIlNBU0NvbnRyb2xUYWJsZSIsImVkaXRvcnMvZ2V0ZGF0YSIsYSkudGhlbihmPT5m''@;'; put 'put ''KS5jYXRjaChmPT57Y29uc29sZS53YXJuKGBFcnJvciBmZXRjaGluZyAke2F9YCxmKX0pfSkoKX1zdWJtaXRUYWJsZXMoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7Y29uc29sZS5pbmZvKCJTdWJtaXR0aW5nIG11bHRpcGxlIHRhYmxlcyIsZC5wYXJzZWREYXRhc2V0cyks''@;'; put 'put ''ZC5zdWJtaXRMb2FkaW5nPSEwO2ZvcihsZXQgaCBvZiBkLnBhcnNlZERhdGFzZXRzKXtpZighaC5wYXJzZVJlc3VsdHx8IWguZGF0YXNvdXJjZXx8IWguaW5jbHVkZUluU3VibWlzc2lvbnx8YSYmIWEuaW5jbHVkZXMoaC5saWJkcykpY29udGludWU7bGV0IGY9e307ZC5zdWJtaXRSZWFzb25N''@;'; put 'put ''ZXNzYWdlPWQuc3VibWl0UmVhc29uTWVzc2FnZS5yZXBsYWNlKC9cbi9nLCIuICIpLGYuQUNUSU9OPSJMT0FEIixmLk1FU1NBR0U9ZC5zdWJtaXRSZWFzb25NZXNzYWdlLGYuTElCRFM9aC5saWJkcztsZXQgdj1oLmRhdGFzb3VyY2U7aWYodil7dj12Lm1hcChiZT0+e2xldCBFZT1iZS5fX19f''@;'; put 'put ''X0RFTEVURV9fVEhJU19fUkVDT1JEX19fX187cmV0dXJuIGRlbGV0ZSBiZS5fX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18sYmUuX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fPUVlLE9iamVjdC5rZXlzKGJlKS5tYXAoQmU9PnsibnVtZXJpYyI9PT1oLmRhdGFzZXRJbmZvLmRj''@;'; put 'put ''VmFsaWRhdG9yPy5nZXRSdWxlKEJlKT8udHlwZSYmIi4iPT09YmVbQmVdJiYoYmVbQmVdPW51bGwpfSksYmV9KTtjb25zdCBNPXYuc2xpY2UoMCxkLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCk7bGV0IEQsWixuZTt5aWVsZCBkLnNhc1N0b3JlU2VydmljZS51cGRhdGVU''@;'; put 'put ''YWJsZShmLE0sIlNBU0NvbnRyb2xUYWJsZSIsImVkaXRvcnMvc3RhZ2VkYXRhIixoLmRhdGFzZXRJbmZvLmRhdGEuJHNhc2RhdGEsITAse2RlYnVnOiEwfSkudGhlbihiZT0+e1o9YmUuYWRhcHRlclJlc3BvbnNlLG5lPWJlLmxvZ30pLmNhdGNoKGJlPT57Y29uc29sZS5lcnJvcigiZXJyIixi''@;'; put 'put ''ZSksRD1iZS5hZGFwdGVyUmVzcG9uc2UsbmU9YmUubG9nfSksaC5zdWJtaXRSZXN1bHQ9e3N1Y2Nlc3M6WixlcnJvcjpELGxvZzpuZSxwYXJzZVJlc3VsdDpoLnBhcnNlUmVzdWx0LGxpYmRzOmgubGliZHN9fX1kLnNob3dTdWJtaXRSZWFzb25Nb2RhbD0hMSxkLnN1Ym1pdExvYWRpbmc9ITEs''@;'; put 'put ''ZC5kZXNlbGVjdEFsbFBhcnNlZERhdGFzZXRzKCl9KSgpfXJlU3VibWl0VGFibGUoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7eWllbGQgZC5zdWJtaXRUYWJsZXMoW2EubGliZHNdKTtjb25zdCBoPWQucGFyc2VkRGF0YXNldHMuZmluZChmPT5mLmxpYmRzPT09YS5saWJk''@;'; put 'put ''cyk7aCYmKGguYWN0aXZlPSEwKX0pKCl9d29ya2Jvb2tMb2FkZWQoKXtyZXR1cm4gbmV3IFByb21pc2UoKGEsZCk9Pnt0aGlzLnNlbGVjdGVkRmlsZXx8ZCgiTm8gZmlsZSBzZWxlY3RlZCIpLHRoaXMud29ya2Jvb2tJbnRlcnZhbD1zZXRJbnRlcnZhbCgoKT0+e3RoaXMuc2VsZWN0ZWRGaWxl''@;'; put 'put ''Lndvcmtib29rJiYoY2xlYXJJbnRlcnZhbCh0aGlzLndvcmtib29rSW50ZXJ2YWwpLGEodGhpcy5zZWxlY3RlZEZpbGUud29ya2Jvb2spKX0sNTAwKX0pfXBhcnNlRGF0YXNldEZyb21Dc3ZOYW1lKGEpe2NvbnN0IGQ9YS5zcGxpdCgiLiIpO3JldHVybiBkLnBvcCgpLGQuam9pbigiLiIpfWdl''@;'; put 'put ''dERhdGFzZXRzRnJvbUhvdCgpe3JldHVybiB0aGlzLmhvdEluc3RhbmNlVXNlckRhdGFzZXQ/dGhpcy5ob3RJbnN0YW5jZVVzZXJEYXRhc2V0LmdldERhdGEoKS5maWx0ZXIoZD0+ZFswXT8ubGVuZ3RoJiZkWzFdPy5sZW5ndGgpLm1hcChkPT5kP2Ake2RbMF19LiR7ZFsxXX1gOiIiKTpbXX1w''@;'; put 'put ''YXJzZUV4Y2VsU2hlZXROYW1lcygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZSgoZCxoKT0+e2lmKCFhLnNlbGVjdGVkRmlsZSlyZXR1cm4gZChbXSk7YS5zcHJlYWRzaGVldFNlcnZpY2UucGFyc2VFeGNlbFNoZWV0TmFtZXMoYS5zZWxlY3Rl''@;'; put 'put ''ZEZpbGUpLnRoZW4oZj0+KGYucGFzc3dvcmQmJihhLnNlbGVjdGVkRmlsZS5wYXNzd29yZD1mLnBhc3N3b3JkKSxkKGYuc2hlZXROYW1lcykpKS5jYXRjaChmPT5oKGYpKX0pfSkoKX1pc1ZhbGlkRGF0YXNldEZvcm1hdChhKXtyZXR1cm4vXlx3ezEsOH1cLlx3ezEsMzJ9JC9naW0udGVzdChh''@;'; put 'put ''KX1pc1ZhbGlkRGF0YXNldFJlZmVyZW5jZShhKXtjb25zdCBkPWEuc3BsaXQoIi4iKVswXSxoPWEuc3BsaXQoIi4iKVsxXTtyZXR1cm4hIXRoaXMubGlic0FuZFRhYmxlc1tkXT8uaW5jbHVkZXMoaCl9YnVpbGREYXRhc2V0c09iamVjdHMoYSl7aWYoIWEpcmV0dXJuW107Y29uc3QgZD1bXTtm''@;'; put 'put ''b3IobGV0IGggb2YgYSlpZihoLmRhdGEpe2NvbnN0IGY9ey4uLmgsaG90VGFibGU6e2RhdGE6aC5kYXRhLnNhc2RhdGEsc2V0dGluZ3M6e319LGNvbHM6W10saGVhZGVyQ29sdW1uczpbXSxoZWFkZXJQa3M6W10saGVhZGVyQXJyYXk6W10sZGF0ZUhlYWRlcnM6W10sdGltZUhlYWRlcnM6W10s''@;'; put 'put ''ZGF0ZVRpbWVIZWFkZXJzOltdLHhsUnVsZXM6W10sY29sdW1uSGVhZGVyOltdfTtmLmNvbHM9aC5kYXRhLmNvbHMsZi5oZWFkZXJDb2x1bW5zPWguZGF0YS5zYXNwYXJhbXNbMF0uQ09MSEVBREVSUy5zcGxpdCgiLCIpLGYuaGVhZGVyUGtzPWguZGF0YS5zYXNwYXJhbXNbMF0uUEsuc3BsaXQo''@;'; put 'put ''IiAiKSwtMSE9PWYuaGVhZGVyQ29sdW1ucy5pbmRleE9mKCJfX19fX0RFTEVURV9fVEhJU19fUkVDT1JEX19fX18iKSYmKGYuaGVhZGVyQ29sdW1uc1tmLmhlYWRlckNvbHVtbnMuaW5kZXhPZigiX19fX19ERUxFVEVfX1RISVNfX1JFQ09SRF9fX19fIildPSJEZWxldGU/IiksZi5oZWFkZXJB''@;'; put 'put ''cnJheT1mLmhlYWRlckNvbHVtbnMuc2xpY2UoMSksIiIhPT1oLmRhdGEuc2FzcGFyYW1zWzBdLkRUVkFSUyYmKGYuZGF0ZUhlYWRlcnM9aC5kYXRhLnNhc3BhcmFtc1swXS5EVFZBUlMuc3BsaXQoIiAiKSksIiIhPT1oLmRhdGEuc2FzcGFyYW1zWzBdLlRNVkFSUyYmKGYudGltZUhlYWRlcnM9''@;'; put 'put ''aC5kYXRhLnNhc3BhcmFtc1swXS5UTVZBUlMuc3BsaXQoIiAiKSksIiIhPT1oLmRhdGEuc2FzcGFyYW1zWzBdLkRUVE1WQVJTJiYoZi5kYXRlVGltZUhlYWRlcnM9aC5kYXRhLnNhc3BhcmFtc1swXS5EVFRNVkFSUy5zcGxpdCgiICIpKSxoLmRhdGEueGxfcnVsZXMubGVuZ3RoPjAmJihmLnhs''@;'; put 'put ''UnVsZXM9dGhpcy5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShoLmRhdGEueGxfcnVsZXMpKSxmLmRjVmFsaWRhdG9yPW5ldyBYbWUoaC5kYXRhLnNhc3BhcmFtc1swXSxoLmRhdGEuJHNhc2RhdGEsaC5kYXRhLmNvbHMsaC5kYXRhLmRxcnVsZXMsaC5kYXRhLmRxZGF0YSksZi5jb2x1bW5IZWFk''@;'; put 'put ''ZXI9aC5kYXRhLnNhc3BhcmFtc1swXS5DT0xIRUFERVJTLnNwbGl0KCIsIiksZC5wdXNoKGYpfXJldHVybiBkfWRlc2VsZWN0QWxsUGFyc2VkRGF0YXNldHMoKXtmb3IobGV0IGEgb2YgdGhpcy5wYXJzZWREYXRhc2V0cylhLmFjdGl2ZT0hMX1kZXNlbGVjdEFsbFN1Ym1pdHRlZENzdkRhdGFz''@;'; put 'put ''ZXRzKCl7Zm9yKGxldCBhIG9mIHRoaXMuc3VibWl0dGVkQ3N2RGF0YXNldHMpYS5hY3RpdmU9ITF9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UocGMpLEdlKGQxKSxHZShHdSksR2UoVmgpLEdlKGE2ZSksR2UoSnMpLEdlKHhzKSl9fXN0YXRp''@;'; put 'put ''Y3t0aGlzLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbXVsdGktZGF0YXNldCJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJm5hKFQ5dCw3KSwyJmQpe2xldCBmO3hpKGY9RWkoKSkmJihoLmNvbnRlbnRBcmVhUmVmPWYuZmlyc3QpfX0saG9zdFZhcnM6''@;'; put 'put ''Mixob3N0QmluZGluZ3M6ZnVuY3Rpb24oZCxoKXsyJmQmJnhyKCJjb250ZW50LWNvbnRhaW5lciIsaC5jb250ZW50Q29udGFpbmVyQ2xhc3MpfSxkZWNsczozNyx2YXJzOjE4LGNvbnN0czpbWyJjb250ZW50QXJlYSIsIiJdLFsiZmlsZVVwbG9hZElucHV0IiwiIl0sWyJjbGFzcyIsIm15LTEw''@;'; put 'put ''LW14LWF1dG8gdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgbWItMTAiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbMSwiY2FyZCIsIm5vLWJvcmRlcnMiLCJoLTEwMCIsImQtZmxleCIsImNsci1mbGV4LWNvbHVtbiJdLFsxLCJo''@;'; put 'put ''ZWFkZXItcm93IiwiY2xyLXJvdyIsImp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJ3LTEwMCIsIm0tMCJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIl0sWyJjbGFzcyIsIm5vLXRhYmxlLXNlbGVjdGVkIHBvaW50ZXItZXZlbnRzLW5vbmUiLDQs''@;'; put 'put ''Im5nSWYiXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIiwiY2xyTW9kYWxDbG9zYWJsZSJdLFsxLCJtb2RhbC10aXRsZSJdLFsxLCJtb2RhbC1ib2R5Il0sWyJjZHMtdGV4dCIsImJvZHkiLCJjbGFzcyIsImxpY2VuY2UtbGltaXQtbm90aWNlIG10LTAgbWItMTUiLDQs''@;'; put 'put ''Im5nSWYiXSxbMSwidGV4dC1hcmVhLWZ1bGwtd2lkdGgiXSxbImZvciIsImZvcm1GaWVsZHNfOCIsMSwibWItNSIsImQtYmxvY2siXSxbImNsclRleHRhcmVhIiwiIiwidGFiaW5kZXgiLCIwIiwidHlwZSIsInRleHQiLCJpZCIsImZvcm1GaWVsZHNfOCIsMSwic3VibWl0LXJlYXNvbiIsMywi''@;'; put 'put ''bmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbImNkcy10ZXh0IiwiY2FwdGlvbl9jbGVhbiIsMSwibXQtMTAiXSxbMSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siLCJkaXNhYmxlZCJdLFsidHlwZSIsImJ1dHRvbiIsImlk''@;'; put 'put ''Iiwic3VibWl0LXRhYmxlcyIsMSwiYnRuIiwiYnRuLXByaW1hcnkiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsxLCJ0ZXh0LWNlbnRlciJdLFsiY2xyTWVkaXVtIiwiIl0sWyJjZHMtdGV4dCIsImNhcHRpb25fY2xlYW4iLDEsIm10LTEwIiwidGV4dC1jZW50ZXIiXSxbMSwibXktMTAtbXgt''@;'; put 'put ''YXV0byIsInRleHQtY2VudGVyIl0sWzEsInRleHQtY2VudGVyIiwibWItMTAiXSxbImlkIiwiYnJvd3NlLWZpbGUiLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwiYnRuLXNtIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJoaWRkZW4iLCIiLCJpZCIsImZpbGUtdXBsb2FkIiwidHlwZSIsImZpbGUi''@;'; put 'put ''LCJtdWx0aXBsZSIsIiIsMywiY2hhbmdlIl0sWyJjZHMtdGV4dCIsImNhcHRpb24iLDEsIm1sLTEwIiwibWItMTAiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImJ0biIsImJ0bi1kYW5nZXIiLCJidG4tc20iLCJtci0xMCIsMywiY2xpY2siXSxbImlkIiwic3VibWl0LWFsbCIsMSwiYnRu''@;'; put 'put ''IiwiYnRuLXByaW1hcnkiLCJidG4tc20iLDMsImNsaWNrIl0sWzEsImNsci10cmVlbm9kZS1saW5rIiwid2hpdGVzcGFjZS1ub3dyYXAiLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIiwzLCJjbGljayJdLFsxLCJtbC01Il0sWyJzdGF0dXMiLCJkYW5nZXIiLCJzaGFwZSIsImV4''@;'; put 'put ''Y2xhbWF0aW9uLWNpcmNsZSIsNCwibmdJZiJdLFsic3RhdHVzIiwic3VjY2VzcyIsInNoYXBlIiwiY2hlY2stY2lyY2xlIiw0LCJuZ0lmIl0sWyJzdGF0dXMiLCJkYW5nZXIiLCJzaGFwZSIsImV4Y2xhbWF0aW9uLWNpcmNsZSJdLFsic3RhdHVzIiwic3VjY2VzcyIsInNoYXBlIiwiY2hlY2st''@;'; put 'put ''Y2lyY2xlIl0sWyJzaGFwZSIsInRhYmxlIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRhYmxlIl0sWyJjbHJTbWFsbCIsIiIsNCwibmdJZiJdLFsiY2xyU21hbGwiLCIiXSxbImNkcy10ZXh0IiwiY2FwdGlvbiIsMSwibWwtMTAiLCJtYi0xMCIsIm10LTEwIl0sWzEsImNsci10cmVlbm9kZS1saW5r''@;'; put 'put ''Iiwid2hpdGVzcGFjZS1ub3dyYXAiLDMsImNsaWNrIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIiwicG9pbnRlci1ldmVudHMtbm9uZSJdLFsic2hhcGUiLCJ1cGxvYWQtY2xvdWQiLCJzaXplIiwiNDAiLDEsImlzLWluZm8iLCJpY29uLWRjLWZpbGwiXSxbImNkcy10ZXh0Iiwic2VjdGlvbiIs''@;'; put 'put ''MSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5IiwibXQtMTAiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJtdC0xNSJdLFsxLCJkYXRhc2V0LWlucHV0LXdyYXBwZXIiXSxbImNkcy10ZXh0Iiwic2Vjb25kYXJ5IHJlZ3VsYXIiLDEsIm1iLTUiXSxbImNsclRv''@;'; put 'put ''b2x0aXBUcmlnZ2VyIiwiIiwic2hhcGUiLCJ0cmFzaCIsInN0YXR1cyIsImRhbmdlciIsMSwibWwtNSIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsiY2RzLXRleHQiLCJzZWNvbmRhcnkgcmVndWxhciIsMSwibWItMjAiXSxbImNkcy10ZXh0Iiwic2Vjb25kYXJ5IHJlZ3VsYXIiLDEs''@;'; put 'put ''Im1iLTE1Il0sWzEsIm1iLTUiXSxbImhvdElkIiwiaG90SW5zdGFuY2VVc2VyRGF0YXNldCIsImlkIiwiaG90VGFibGVVc2VyRGF0YXNldCIsInN0cmV0Y2hIIiwiYWxsIiwxLCJtdC0xNSIsMywiYWZ0ZXJHZXRDb2xIZWFkZXIiLCJzZXR0aW5ncyIsImxpY2Vuc2VLZXkiXSxbMSwiZGF0YXNl''@;'; put 'put ''dC1zZWxlY3Rpb24tYWN0aW9ucyIsInRleHQtcmlnaHQiLCJtdC0xMCJdLFsiaWQiLCJjb250aW51ZS1idG4iLDEsImJ0biIsImJ0bi1wcmltYXJ5IiwiYnRuLXNtIiwzLCJjbGljayIsImRpc2FibGVkIiwiY2xyTG9hZGluZyJdLFsic2hhcGUiLCJwcm9jZXNzLW9uLXZtIiwic2l6ZSIsIjQw''@;'; put 'put ''IiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNDAiLDEsImlzLWluZm8iLCJpY29uLWRjLWZpbGwiXSxbImNsYXNzIiwiZC1mbGV4IGNsci1qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBwLTEwIG10LTE1IHN1Ym1pc3Npb24t''@;'; put 'put ''cmVzdWx0cyIsNCwibmdJZiJdLFsiY2xhc3MiLCJlcnJvci1maWVsZCBtdC0xNSIsNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWJldHdlZW4iLCJwLTEwIiwibXQtMTUiXSxbImNkcy10ZXh0Iiwic2Vjb25kYXJ5IHJlZ3VsYXIiLDEsIm1iLTEwIl0sWyJjZHMt''@;'; put 'put ''dGV4dCIsInNlY29uZGFyeSByZWd1bGFyIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsMywicm91dGVyTGluayJdLFszLCJjbHJQb3NpdGlvbiIsImNsclNpemUiXSxbInR5cGUiLCJjaGVja2JveCIsImNsclRvZ2dsZSIsIiIsIm5hbWUiLCJvcHRpb25zIiwicmVxdWlyZWQiLCIiLCJ2YWx1''@;'; put 'put ''ZSIsIm9wdGlvbjEiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwiZGlzYWJsZWQiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgdy0xMDAiLDQsIm5nSWYiXSxbImhvdElkIiwiaG90SW5zdGFuY2UiLCJpZCIsImhvdFRhYmxlIiwic3RyZXRjaEgiLCJhbGwiLDEsIm10LTE1IiwzLCJhZnRl''@;'; put 'put ''ckdldENvbEhlYWRlciIsImNsYXNzTmFtZSIsImxpY2Vuc2VLZXkiLCJtdWx0aUNvbHVtblNvcnRpbmciLCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsIm1hbnVhbENvbHVtblJlc2l6ZSIsImZpbHRlcnMiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwi''@;'; put 'put ''cC0xMCIsIm10LTE1Iiwic3VibWlzc2lvbi1yZXN1bHRzIl0sWyJjbGFzcyIsImNvbG9yLWdyZWVuIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNvbG9yLXJlZCIsNCwibmdJZiJdLFsiY2RzLXRleHQiLCJzZWNvbmRhcnkgcmVndWxhciIsNCwibmdJZiJdLFsiY2xhc3MiLCJidG4gYnRuLXByaW1h''@;'; put 'put ''cnkgbXQtMTAiLDMsImNsckxvYWRpbmciLCJjbGljayIsNCwibmdJZiJdLFsxLCJidG4iLCJidG4tcHJpbWFyeS1vdXRsaW5lIiwibXQtMTAiLDMsImNsaWNrIl0sWzEsImNvbG9yLWdyZWVuIl0sWzEsImNvbG9yLXJlZCJdLFsxLCJidG4iLCJidG4tcHJpbWFyeSIsIm10LTEwIiwzLCJjbGlj''@;'; put 'put ''ayIsImNsckxvYWRpbmciXSxbMSwiZXJyb3ItZmllbGQiLCJtdC0xNSJdLFsxLCJsb2ctd3JhcHBlciJdLFsiY2xhc3MiLCJkLWZsZXggY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbHJTbWFsbCIsIiIs''@;'; put 'put ''MSwibWwtNSJdLFsxLCJ0ZXh0LWNlbnRlciIsInctMTAwIl0sWzEsInNwaW5uZXItbWQiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwicC0xMCJdLFsiY2RzLXRleHQiLCJib2R5IiwxLCJsaWNlbmNlLWxpbWl0LW5vdGljZSIsIm10LTAiLCJtYi0xNSJdXSx0''@;'; put 'put ''ZW1wbGF0ZTpmdW5jdGlvbihkLGgpe2lmKDEmZCl7Y29uc3QgZj1PbigpO2RlKDAsImFwcC1zaWRlYmFyIiksZ3QoMSxrOXQsMiwwLCJkaXYiLDIpKDIsRDl0LDUsMSwiZGl2IiwzKSgzLFU5dCw2LDIsIm5nLWNvbnRhaW5lciIsNCkoNCxHOXQsNSwxLCJuZy1jb250YWluZXIiLDQpLGhlKCks''@;'; put 'put ''ZGUoNSwiZGl2Iiw1LDApKDcsImRpdiIsNikoOCwiZGl2Iiw3KSg5LCJwIiw4KSxMZSgxMCwiTXVsdGkgRGF0YXNldCBMb2FkIiksaGUoKSgpLGd0KDExLCQ5dCw0LDAsImRpdiIsOSkoMTIseXZ0LDUsNCwibmctY29udGFpbmVyIiw0KSxoZSgpKCksZGUoMTMsImNsci1tb2RhbCIsMTApLHBp''@;'; put 'put ''KCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSx2aShoLnNob3dTdWJtaXRSZWFzb25Nb2RhbCxNKXx8KGguc2hvd1N1Ym1pdFJlYXNvbk1vZGFsPU0pLEN0KE0pfSksZGUoMTQsImgzIiwxMSksTGUoMTUpLGhlKCksZGUoMTYsImRpdiIsMTIpLGd0KDE3LF92''@;'; put 'put ''dCwyLDEsInAiLDEzKSxkZSgxOCwiZGl2IiwxNCkoMTksImxhYmVsIiwxNSksTGUoMjAsIk1lc3NhZ2UiKSxoZSgpLGRlKDIxLCJ0ZXh0YXJlYSIsMTYpLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksdmkoaC5zdWJtaXRSZWFzb25NZXNzYWdlLE0pfHwoaC5z''@;'; put 'put ''dWJtaXRSZWFzb25NZXNzYWdlPU0pLEN0KE0pfSksaGUoKSgpLGRlKDIyLCJwIiwxNyksTGUoMjMsIiBUYWJsZXMgd2lsbCBiZSBzZW50IHNlcXVlbnRpYWxseSwgbG9ncyB3aWxsIGJlIGF2YWlsYWJsZSBhZnRlciBhbGwgdGFibGVzIGFyZSBzdWJtaXR0ZWQuICIpLGhlKCkoKSxkZSgyNCwi''@;'; put 'put ''ZGl2IiwxOCkoMjUsImJ1dHRvbiIsMTkpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5zaG93U3VibWl0UmVhc29uTW9kYWw9ITEpfSksTGUoMjYsIiBDYW5jZWwgIiksaGUoKSxkZSgyNywiYnV0dG9uIiwyMCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3''@;'; put 'put ''dChmKSxDdChoLnN1Ym1pdFRhYmxlcygpKX0pLExlKDI4LCIgU3VibWl0ICIpLGhlKCkoKSgpLGRlKDI5LCJjbHItbW9kYWwiLDEwKSxwaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksdmkoaC5jc3ZTdWJtaXR0aW5nLE0pfHwoaC5jc3ZTdWJtaXR0aW5n''@;'; put 'put ''PU0pLEN0KE0pfSksZGUoMzAsImgzIiwxMSksTGUoMzEpLGhlKCksZGUoMzIsImRpdiIsMTIpKDMzLCJkaXYiLDIxKSxHdCgzNCwiY2xyLXNwaW5uZXIiLDIyKSxoZSgpLGRlKDM1LCJwIiwyMyksTGUoMzYsIiBUaGlzIHdpbGwgdGFrZSBmZXcgbW9tZW50cyAiKSxoZSgpKCkoKX0yJmQmJihm''@;'; put 'put ''ZSgpLHhlKCJuZ0lmIixoLmRhdGFzZXRzTG9hZGluZyksZmUoKSx4ZSgibmdJZiIsIWgucGFyc2VkRGF0YXNldHMubGVuZ3RoKSxmZSgpLHhlKCJuZ0lmIixoLnBhcnNlZERhdGFzZXRzLmxlbmd0aCYmIWguc3VibWl0dGVkQ3N2RGF0YXNldHMubGVuZ3RoKSxmZSgpLHhlKCJuZ0lmIixoLnN1''@;'; put 'put ''Ym1pdHRlZENzdkRhdGFzZXRzLmxlbmd0aCksZmUoNykseGUoIm5nSWYiLG51bGw9PT1oLnNlbGVjdGVkRmlsZSYmIWguc3VibWl0dGluZ0NzdiksZmUoKSx4ZSgibmdJZiIsbnVsbCE9PWguc2VsZWN0ZWRGaWxlfHxoLnN1Ym1pdHRpbmdDc3YpLGZlKCksZmkoImNsck1vZGFsT3BlbiIsaC5z''@;'; put 'put ''aG93U3VibWl0UmVhc29uTW9kYWwpLHhlKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoMiksenUoIiBTdWJtaXQgIixoLnRhYmxlc1RvU3VibWl0Lmxlbmd0aCwiICIsMT09PWgudGFibGVzVG9TdWJtaXQubGVuZ3RoPyJ0YWJsZSI6InRhYmxlcyIsIiBmb3IgYXBwcm92YWwgIiksZmUoMiks''@;'; put 'put ''eGUoIm5nSWYiLGgubGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0IT09aC5JbmZpbml0eSksZmUoNCksZmkoIm5nTW9kZWwiLGguc3VibWl0UmVhc29uTWVzc2FnZSksZmUoNCkseGUoImRpc2FibGVkIixoLnN1Ym1pdExvYWRpbmcpLGZlKDIpLHhlKCJjbHJMb2FkaW5nIixo''@;'; put 'put ''LnN1Ym1pdExvYWRpbmcpLGZlKDIpLGZpKCJjbHJNb2RhbE9wZW4iLGguY3N2U3VibWl0dGluZykseGUoImNsck1vZGFsQ2xvc2FibGUiLCExKSxmZSgyKSx6dSgiIFN1Ym1pdHRpbmcgIixoLmNzdkZpbGVzLmxlbmd0aCwiIENTViAiLDE9PT1oLmNzdkZpbGVzLmxlbmd0aD8iZmlsZSI6ImZp''@;'; put 'put ''bGVzIiwiICIpKX0sZGVwZW5kZW5jaWVzOlt4Xyx1MSxRbCxCMSxRcyxLVyxZcyxTaCxPZCxkZyxPbCxjcyxvdSxLdSxCMCxUMix1cyxPTCxXMSxEZCxZTCxwNyxtNyxnNyxfaCx0NCxzcyx5byxaVV0sc3R5bGVzOlsiLm5vLXRhYmxlLXNlbGVjdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNw''@;'; put 'put ''bGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1iZy1jb2xvcik7ei1pbmRleDoxMDt3aWR0aDoxMDAlO2hlaWdodDox''@;'; put 'put ''MDAlO3RvcDowfS5oZWFkZXItcm93W19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjE1cHggMDtib3JkZXItYm90dG9tOjFweCBzb2xpZCAjZDNkM2QzfS5kYXRhc2V0LWlucHV0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde21heC13aWR0aDo1MDBweDt3aWR0aDoxMDAlfS5kYXRhc2V0''@;'; put 'put ''LWlucHV0LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgdGV4dGFyZWFbX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6MjAwcHg7aGVpZ2h0OjIwMHB4fS5zdWJtaXQtcmVhc29uW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OjcwcHg7bWF4LWhlaWdodDo3MHB4O2hlaWdo''@;'; put 'put ''dDo3MHB4fS5sb2ctd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMTBweDtoZWlnaHQ6YXV0b30gIHRkLm5vdC1tYXRjaGVke2JhY2tncm91bmQtY29sb3I6I2ZmMDAwMDU0fS5kYXRhc2V0LXNlbGVjdGlvbi1hY3Rpb25zW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXItdG9w''@;'; put 'put ''OjFweCBzb2xpZCAjZDNkM2QzfS5saWNlbmNlLWxpbWl0LW5vdGljZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLWRhcmspfS5zdWJtaXNzaW9uLXJlc3VsdHNbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlk''@;'; put 'put ''ICNkM2QzZDN9Il19KX19cmV0dXJuIGN9KSgpfV19XTtsZXQgQ3Z0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFy''@;'; put 'put ''KHtpbXBvcnRzOltqYy5mb3JDaGlsZCh3dnQpLGpjXX0pfX1yZXR1cm4gY30pKCk7WUgoKTtsZXQgU3Z0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3Rh''@;'; put 'put ''dGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltuOSxDdnQsRGMsajAsajksTG8sYkEsSzJdfSl9fXJldHVybiBjfSkoKTtjb25zdCBNdnQ9W3twYXRoOiIiLGNvbXBvbmVudDp2N3QsY2hpbGRyZW46W3twYXRoOiIiLHBhdGhNYXRjaDoiZnVsbCIscmVkaXJlY3RUbzoidGFibGVzIn0s''@;'; put 'put ''e3BhdGg6InRhYmxlcyIsY29tcG9uZW50Om45dH0se3BhdGg6ImV4Y2VsLW1hcHMiLGxvYWRDaGlsZHJlbjooKT0+TTl0fSx7cGF0aDoibXVsdGktbG9hZCIsbG9hZENoaWxkcmVuOigpPT5TdnR9XX1dO2xldCB4dnQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rp''@;'; put 'put ''b24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W2pjLmZvckNoaWxkKE12dCksamNdfSl9fXJldHVybiBjfSkoKSxFdnQ9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAy''@;'; put 'put ''NzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W3h2dCxEYyxqMCxqOSxMbyxiQSxLMl19KX19cmV0dXJuIGN9KSgpLFplZT0oKCk9PntjbGFzcyBje2Nv''@;'; put 'put ''bnN0cnVjdG9yKGEsZCl7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMucm91dGVyPWR9Y2FuQWN0aXZhdGUoYSxkKXtyZXR1cm4hISh2b2lkIDAhPT1kPy5yb290LnF1ZXJ5UGFyYW1zLmZvcmNlfHxkPy51cmwuaW5jbHVkZXMoImxpY2Vuc2luZy91cGRhdGUiKSYmdGhpcy5saWNlbmNlU2Vy''@;'; put 'put ''dmljZS5pc0FwcEFjdGl2YXRlZHx8bnVsbCE9PXRoaXMubGljZW5jZVNlcnZpY2UuaXNBcHBBY3RpdmF0ZWQudmFsdWUmJiExPT09dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEFjdGl2YXRlZC52YWx1ZSl8fCh0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvaG9tZSIpLCExKX1jYW5EZWFj''@;'; put 'put ''dGl2YXRlKGEsZCxoLGYpe3JldHVybiEoaD8udXJsLmluY2x1ZGVzKCJsaWNlbnNpbmcvcmVnaXN0ZXIiKXx8dGhpcy5saWNlbmNlU2VydmljZS5hcHBMb2NrZWQudmFsdWUpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKE1yKGQxKSxNcihMcykp''@;'; put 'put ''fX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWN9KX19cmV0dXJuIGN9KSgpO2xldCBfNj17YXN5bmM6ITEsYmFzZVVybDpudWxsLGJyZWFrczohMSxleHRlbnNpb25zOm51bGwsZ2ZtOiEwLGhlYWRlcklkczohMCxoZWFkZXJQcmVmaXg6IiIs''@;'; put 'put ''aGlnaGxpZ2h0Om51bGwsaG9va3M6bnVsbCxsYW5nUHJlZml4OiJsYW5ndWFnZS0iLG1hbmdsZTohMCxwZWRhbnRpYzohMSxyZW5kZXJlcjpudWxsLHNhbml0aXplOiExLHNhbml0aXplcjpudWxsLHNpbGVudDohMSxzbWFydHlwYW50czohMSx0b2tlbml6ZXI6bnVsbCx3YWxrVG9rZW5zOm51''@;'; put 'put ''bGwseGh0bWw6ITF9O2Z1bmN0aW9uIHk2ZShjKXtfNj1jfWNvbnN0IF82ZT0vWyY8PiInXS8sVHZ0PW5ldyBSZWdFeHAoXzZlLnNvdXJjZSwiZyIpLHc2ZT0vWzw+IiddfCYoPyEoI1xkezEsN318I1tYeF1bYS1mQS1GMC05XXsxLDZ9fFx3Kyk7KS8sQXZ0PW5ldyBSZWdFeHAodzZlLnNvdXJj''@;'; put 'put ''ZSwiZyIpLGt2dD17IiYiOiImYW1wOyIsIjwiOiImbHQ7IiwiPiI6IiZndDsiLCciJzoiJnF1b3Q7IiwiJyI6IiYjMzk7In0sQzZlPWM9Pmt2dFtjXTtmdW5jdGlvbiBFMShjLGwpe2lmKGwpe2lmKF82ZS50ZXN0KGMpKXJldHVybiBjLnJlcGxhY2UoVHZ0LEM2ZSl9ZWxzZSBpZih3NmUudGVz''@;'; put 'put ''dChjKSlyZXR1cm4gYy5yZXBsYWNlKEF2dCxDNmUpO3JldHVybiBjfWNvbnN0IER2dD0vJigjKD86XGQrKXwoPzojeFswLTlBLUZhLWZdKyl8KD86XHcrKSk7Py9naTtmdW5jdGlvbiBTNmUoYyl7cmV0dXJuIGMucmVwbGFjZShEdnQsKGwsYSk9PiJjb2xvbiI9PT0oYT1hLnRvTG93ZXJDYXNl''@;'; put 'put ''KCkpPyI6IjoiIyI9PT1hLmNoYXJBdCgwKT8ieCI9PT1hLmNoYXJBdCgxKT9TdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGEuc3Vic3RyaW5nKDIpLDE2KSk6U3RyaW5nLmZyb21DaGFyQ29kZSgrYS5zdWJzdHJpbmcoMSkpOiIiKX1jb25zdCBJdnQ9LyhefFteXFtdKVxeL2c7ZnVuY3Rp''@;'; put 'put ''b24ga2woYyxsKXtjPSJzdHJpbmciPT10eXBlb2YgYz9jOmMuc291cmNlLGw9bHx8IiI7Y29uc3QgYT17cmVwbGFjZTooZCxoKT0+KGg9KGg9aC5zb3VyY2V8fGgpLnJlcGxhY2UoSXZ0LCIkMSIpLGM9Yy5yZXBsYWNlKGQsaCksYSksZ2V0UmVnZXg6KCk9Pm5ldyBSZWdFeHAoYyxsKX07cmV0''@;'; put 'put ''dXJuIGF9Y29uc3QgUnZ0PS9bXlx3Ol0vZyxMdnQ9L14kfF5bYS16XVthLXowLTkrLi1dKjp8Xls/I10vaTtmdW5jdGlvbiBNNmUoYyxsLGEpe2lmKGMpe2xldCBkO3RyeXtkPWRlY29kZVVSSUNvbXBvbmVudChTNmUoYSkpLnJlcGxhY2UoUnZ0LCIiKS50b0xvd2VyQ2FzZSgpfWNhdGNoe3Jl''@;'; put 'put ''dHVybiBudWxsfWlmKDA9PT1kLmluZGV4T2YoImphdmFzY3JpcHQ6Iil8fDA9PT1kLmluZGV4T2YoInZic2NyaXB0OiIpfHwwPT09ZC5pbmRleE9mKCJkYXRhOiIpKXJldHVybiBudWxsfWwmJiFMdnQudGVzdChhKSYmKGE9ZnVuY3Rpb24gSHZ0KGMsbCl7S0hbIiAiK2NdfHwoS0hbIiAiK2Nd''@;'; put 'put ''PU92dC50ZXN0KGMpP2MrIi8iOlhIKGMsIi8iLCEwKSk7Y29uc3QgYT0tMT09PShjPUtIWyIgIitjXSkuaW5kZXhPZigiOiIpO3JldHVybiIvLyI9PT1sLnN1YnN0cmluZygwLDIpP2E/bDpjLnJlcGxhY2UoUHZ0LCIkMSIpK2w6Ii8iPT09bC5jaGFyQXQoMCk/YT9sOmMucmVwbGFjZShGdnQs''@;'; put 'put ''IiQxIikrbDpjK2x9KGwsYSkpO3RyeXthPWVuY29kZVVSSShhKS5yZXBsYWNlKC8lMjUvZywiJSIpfWNhdGNoe3JldHVybiBudWxsfXJldHVybiBhfWNvbnN0IEtIPXt9LE92dD0vXlteOl0rOlwvKlteL10qJC8sUHZ0PS9eKFteOl0rOilbXHNcU10qJC8sRnZ0PS9eKFteOl0rOlwvKlteL10q''@;'; put 'put ''KVtcc1xTXSokLyxxSD17ZXhlYzpmdW5jdGlvbigpe319O2Z1bmN0aW9uIHg2ZShjLGwpe2NvbnN0IGQ9Yy5yZXBsYWNlKC9cfC9nLChmLHYsTSk9PntsZXQgRD0hMSxaPXY7Zm9yKDstLVo+PTAmJiJcXCI9PT1NW1pdOylEPSFEO3JldHVybiBEPyJ8IjoiIHwifSkuc3BsaXQoLyBcfC8pO2xl''@;'; put 'put ''dCBoPTA7aWYoZFswXS50cmltKCl8fGQuc2hpZnQoKSxkLmxlbmd0aD4wJiYhZFtkLmxlbmd0aC0xXS50cmltKCkmJmQucG9wKCksZC5sZW5ndGg+bClkLnNwbGljZShsKTtlbHNlIGZvcig7ZC5sZW5ndGg8bDspZC5wdXNoKCIiKTtmb3IoO2g8ZC5sZW5ndGg7aCsrKWRbaF09ZFtoXS50cmlt''@;'; put 'put ''KCkucmVwbGFjZSgvXFxcfC9nLCJ8Iik7cmV0dXJuIGR9ZnVuY3Rpb24gWEgoYyxsLGEpe2NvbnN0IGQ9Yy5sZW5ndGg7aWYoMD09PWQpcmV0dXJuIiI7bGV0IGg9MDtmb3IoO2g8ZDspe2NvbnN0IGY9Yy5jaGFyQXQoZC1oLTEpO2lmKGYhPT1sfHxhKXtpZihmPT09bHx8IWEpYnJlYWs7aCsr''@;'; put 'put ''fWVsc2UgaCsrfXJldHVybiBjLnNsaWNlKDAsZC1oKX1mdW5jdGlvbiBFNmUoYyxsLGEsZCl7Y29uc3QgaD1sLmhyZWYsZj1sLnRpdGxlP0UxKGwudGl0bGUpOm51bGwsdj1jWzFdLnJlcGxhY2UoL1xcKFtcW1xdXSkvZywiJDEiKTtpZigiISIhPT1jWzBdLmNoYXJBdCgwKSl7ZC5zdGF0ZS5p''@;'; put 'put ''bkxpbms9ITA7Y29uc3QgTT17dHlwZToibGluayIscmF3OmEsaHJlZjpoLHRpdGxlOmYsdGV4dDp2LHRva2VuczpkLmlubGluZVRva2Vucyh2KX07cmV0dXJuIGQuc3RhdGUuaW5MaW5rPSExLE19cmV0dXJue3R5cGU6ImltYWdlIixyYXc6YSxocmVmOmgsdGl0bGU6Zix0ZXh0OkUxKHYpfX1j''@;'; put 'put ''bGFzcyBKSHtjb25zdHJ1Y3RvcihsKXt0aGlzLm9wdGlvbnM9bHx8XzZ9c3BhY2UobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLm5ld2xpbmUuZXhlYyhsKTtpZihhJiZhWzBdLmxlbmd0aD4wKXJldHVybnt0eXBlOiJzcGFjZSIscmF3OmFbMF19fWNvZGUobCl7Y29uc3QgYT10aGlzLnJ1''@;'; put 'put ''bGVzLmJsb2NrLmNvZGUuZXhlYyhsKTtpZihhKXtjb25zdCBkPWFbMF0ucmVwbGFjZSgvXiB7MSw0fS9nbSwiIik7cmV0dXJue3R5cGU6ImNvZGUiLHJhdzphWzBdLGNvZGVCbG9ja1N0eWxlOiJpbmRlbnRlZCIsdGV4dDp0aGlzLm9wdGlvbnMucGVkYW50aWM/ZDpYSChkLCJcbiIpfX19ZmVu''@;'; put 'put ''Y2VzKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5mZW5jZXMuZXhlYyhsKTtpZihhKXtjb25zdCBkPWFbMF0saD1mdW5jdGlvbiBCdnQoYyxsKXtjb25zdCBhPWMubWF0Y2goL14oXHMrKSg/OmBgYCkvKTtpZihudWxsPT09YSlyZXR1cm4gbDtjb25zdCBkPWFbMV07cmV0dXJuIGwuc3Bs''@;'; put 'put ''aXQoIlxuIikubWFwKGg9Pntjb25zdCBmPWgubWF0Y2goL15ccysvKTtpZihudWxsPT09ZilyZXR1cm4gaDtjb25zdFt2XT1mO3JldHVybiB2Lmxlbmd0aD49ZC5sZW5ndGg/aC5zbGljZShkLmxlbmd0aCk6aH0pLmpvaW4oIlxuIil9KGQsYVszXXx8IiIpO3JldHVybnt0eXBlOiJjb2RlIixy''@;'; put 'put ''YXc6ZCxsYW5nOmFbMl0/YVsyXS50cmltKCkucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKTphWzJdLHRleHQ6aH19fWhlYWRpbmcobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmhlYWRpbmcuZXhlYyhsKTtpZihhKXtsZXQgZD1hWzJdLnRyaW0oKTtpZigvIyQv''@;'; put 'put ''LnRlc3QoZCkpe2NvbnN0IGg9WEgoZCwiIyIpOyh0aGlzLm9wdGlvbnMucGVkYW50aWN8fCFofHwvICQvLnRlc3QoaCkpJiYoZD1oLnRyaW0oKSl9cmV0dXJue3R5cGU6ImhlYWRpbmciLHJhdzphWzBdLGRlcHRoOmFbMV0ubGVuZ3RoLHRleHQ6ZCx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUo''@;'; put 'put ''ZCl9fX1ocihsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2suaHIuZXhlYyhsKTtpZihhKXJldHVybnt0eXBlOiJociIscmF3OmFbMF19fWJsb2NrcXVvdGUobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmJsb2NrcXVvdGUuZXhlYyhsKTtpZihhKXtjb25zdCBkPWFbMF0ucmVwbGFjZSgv''@;'; put 'put ''XiAqPlsgXHRdPy9nbSwiIiksaD10aGlzLmxleGVyLnN0YXRlLnRvcDt0aGlzLmxleGVyLnN0YXRlLnRvcD0hMDtjb25zdCBmPXRoaXMubGV4ZXIuYmxvY2tUb2tlbnMoZCk7cmV0dXJuIHRoaXMubGV4ZXIuc3RhdGUudG9wPWgse3R5cGU6ImJsb2NrcXVvdGUiLHJhdzphWzBdLHRva2Vuczpm''@;'; put 'put ''LHRleHQ6ZH19fWxpc3QobCl7bGV0IGE9dGhpcy5ydWxlcy5ibG9jay5saXN0LmV4ZWMobCk7aWYoYSl7bGV0IGQsaCxmLHYsTSxELFosbmUsY2UsYmUsRWUsQmUscWU9YVsxXS50cmltKCk7Y29uc3QgbnQ9cWUubGVuZ3RoPjEsbHQ9e3R5cGU6Imxpc3QiLHJhdzoiIixvcmRlcmVkOm50LHN0''@;'; put 'put ''YXJ0Om50PytxZS5zbGljZSgwLC0xKToiIixsb29zZTohMSxpdGVtczpbXX07cWU9bnQ/YFxcZHsxLDl9XFwke3FlLnNsaWNlKC0xKX1gOmBcXCR7cWV9YCx0aGlzLm9wdGlvbnMucGVkYW50aWMmJihxZT1udD9xZToiWyorLV0iKTtjb25zdCBtdD1uZXcgUmVnRXhwKGBeKCB7MCwzfSR7cWV9''@;'; put 'put ''KSgoPzpbXHQgXVteXFxuXSopPyg/OlxcbnwkKSlgKTtmb3IoO2wmJihCZT0hMSwoYT1tdC5leGVjKGwpKSYmIXRoaXMucnVsZXMuYmxvY2suaHIudGVzdChsKSk7KXtpZihkPWFbMF0sbD1sLnN1YnN0cmluZyhkLmxlbmd0aCksbmU9YVsyXS5zcGxpdCgiXG4iLDEpWzBdLnJlcGxhY2UoL15c''@;'; put 'put ''dCsvLHluPT4iICIucmVwZWF0KDMqeW4ubGVuZ3RoKSksY2U9bC5zcGxpdCgiXG4iLDEpWzBdLHRoaXMub3B0aW9ucy5wZWRhbnRpYz8odj0yLEVlPW5lLnRyaW1MZWZ0KCkpOih2PWFbMl0uc2VhcmNoKC9bXiBdLyksdj12PjQ/MTp2LEVlPW5lLnNsaWNlKHYpLHYrPWFbMV0ubGVuZ3RoKSxE''@;'; put 'put ''PSExLCFuZSYmL14gKiQvLnRlc3QoY2UpJiYoZCs9Y2UrIlxuIixsPWwuc3Vic3RyaW5nKGNlLmxlbmd0aCsxKSxCZT0hMCksIUJlKXtjb25zdCB5bj1uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyx2LTEpfX0oPzpbKistXXxcXGR7MSw5fVsuKV0pKCg/OlsgXHRdW15cXG5dKik/KD86''@;'; put 'put ''XFxufCQpKWApLENuPW5ldyBSZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLHYtMSl9fSgoPzotICopezMsfXwoPzpfICopezMsfXwoPzpcXCogKil7Myx9KSg/Olxcbit8JClgKSx0bj1uZXcgUmVnRXhwKGBeIHswLCR7TWF0aC5taW4oMyx2LTEpfX0oPzpcYFxgXGB8fn5+KWApLHhuPW5ldyBS''@;'; put 'put ''ZWdFeHAoYF4gezAsJHtNYXRoLm1pbigzLHYtMSl9fSNgKTtmb3IoO2wmJihiZT1sLnNwbGl0KCJcbiIsMSlbMF0sY2U9YmUsdGhpcy5vcHRpb25zLnBlZGFudGljJiYoY2U9Y2UucmVwbGFjZSgvXiB7MSw0fSg/PSggezR9KSpbXiBdKS9nLCIgICIpKSwhKHRuLnRlc3QoY2UpfHx4bi50ZXN0''@;'; put 'put ''KGNlKXx8eW4udGVzdChjZSl8fENuLnRlc3QobCkpKTspe2lmKGNlLnNlYXJjaCgvW14gXS8pPj12fHwhY2UudHJpbSgpKUVlKz0iXG4iK2NlLnNsaWNlKHYpO2Vsc2V7aWYoRHx8bmUuc2VhcmNoKC9bXiBdLyk+PTR8fHRuLnRlc3QobmUpfHx4bi50ZXN0KG5lKXx8Q24udGVzdChuZSkpYnJl''@;'; put 'put ''YWs7RWUrPSJcbiIrY2V9IUQmJiFjZS50cmltKCkmJihEPSEwKSxkKz1iZSsiXG4iLGw9bC5zdWJzdHJpbmcoYmUubGVuZ3RoKzEpLG5lPWNlLnNsaWNlKHYpfX1sdC5sb29zZXx8KFo/bHQubG9vc2U9ITA6L1xuICpcbiAqJC8udGVzdChkKSYmKFo9ITApKSx0aGlzLm9wdGlvbnMuZ2ZtJiYo''@;'; put 'put ''aD0vXlxbWyB4WF1cXSAvLmV4ZWMoRWUpLGgmJihmPSJbIF0gIiE9PWhbMF0sRWU9RWUucmVwbGFjZSgvXlxbWyB4WF1cXSArLywiIikpKSxsdC5pdGVtcy5wdXNoKHt0eXBlOiJsaXN0X2l0ZW0iLHJhdzpkLHRhc2s6ISFoLGNoZWNrZWQ6Zixsb29zZTohMSx0ZXh0OkVlfSksbHQucmF3Kz1k''@;'; put 'put ''fWx0Lml0ZW1zW2x0Lml0ZW1zLmxlbmd0aC0xXS5yYXc9ZC50cmltUmlnaHQoKSxsdC5pdGVtc1tsdC5pdGVtcy5sZW5ndGgtMV0udGV4dD1FZS50cmltUmlnaHQoKSxsdC5yYXc9bHQucmF3LnRyaW1SaWdodCgpO2NvbnN0IEp0PWx0Lml0ZW1zLmxlbmd0aDtmb3IoTT0wO008SnQ7TSsrKWlm''@;'; put 'put ''KHRoaXMubGV4ZXIuc3RhdGUudG9wPSExLGx0Lml0ZW1zW01dLnRva2Vucz10aGlzLmxleGVyLmJsb2NrVG9rZW5zKGx0Lml0ZW1zW01dLnRleHQsW10pLCFsdC5sb29zZSl7Y29uc3QgeW49bHQuaXRlbXNbTV0udG9rZW5zLmZpbHRlcih0bj0+InNwYWNlIj09PXRuLnR5cGUpLENuPXluLmxl''@;'; put 'put ''bmd0aD4wJiZ5bi5zb21lKHRuPT4vXG4uKlxuLy50ZXN0KHRuLnJhdykpO2x0Lmxvb3NlPUNufWlmKGx0Lmxvb3NlKWZvcihNPTA7TTxKdDtNKyspbHQuaXRlbXNbTV0ubG9vc2U9ITA7cmV0dXJuIGx0fX1odG1sKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay5odG1sLmV4ZWMobCk7aWYo''@;'; put 'put ''YSl7Y29uc3QgZD17dHlwZToiaHRtbCIsYmxvY2s6ITAscmF3OmFbMF0scHJlOiF0aGlzLm9wdGlvbnMuc2FuaXRpemVyJiYoInByZSI9PT1hWzFdfHwic2NyaXB0Ij09PWFbMV18fCJzdHlsZSI9PT1hWzFdKSx0ZXh0OmFbMF19O2lmKHRoaXMub3B0aW9ucy5zYW5pdGl6ZSl7Y29uc3QgaD10''@;'; put 'put ''aGlzLm9wdGlvbnMuc2FuaXRpemVyP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXIoYVswXSk6RTEoYVswXSk7ZC50eXBlPSJwYXJhZ3JhcGgiLGQudGV4dD1oLGQudG9rZW5zPXRoaXMubGV4ZXIuaW5saW5lKGgpfXJldHVybiBkfX1kZWYobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmRlZi5l''@;'; put 'put ''eGVjKGwpO2lmKGEpe2NvbnN0IGQ9YVsxXS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xzKy9nLCIgIiksaD1hWzJdP2FbMl0ucmVwbGFjZSgvXjwoLiopPiQvLCIkMSIpLnJlcGxhY2UodGhpcy5ydWxlcy5pbmxpbmUuX2VzY2FwZXMsIiQxIik6IiIsZj1hWzNdP2FbM10uc3Vic3RyaW5nKDEs''@;'; put 'put ''YVszXS5sZW5ndGgtMSkucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywiJDEiKTphWzNdO3JldHVybnt0eXBlOiJkZWYiLHRhZzpkLHJhdzphWzBdLGhyZWY6aCx0aXRsZTpmfX19dGFibGUobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLnRhYmxlLmV4ZWMobCk7aWYoYSl7''@;'; put 'put ''Y29uc3QgZD17dHlwZToidGFibGUiLGhlYWRlcjp4NmUoYVsxXSkubWFwKGg9Pih7dGV4dDpofSkpLGFsaWduOmFbMl0ucmVwbGFjZSgvXiAqfFx8ICokL2csIiIpLnNwbGl0KC8gKlx8ICovKSxyb3dzOmFbM10mJmFbM10udHJpbSgpP2FbM10ucmVwbGFjZSgvXG5bIFx0XSokLywiIikuc3Bs''@;'; put 'put ''aXQoIlxuIik6W119O2lmKGQuaGVhZGVyLmxlbmd0aD09PWQuYWxpZ24ubGVuZ3RoKXtkLnJhdz1hWzBdO2xldCBmLHYsTSxELGg9ZC5hbGlnbi5sZW5ndGg7Zm9yKGY9MDtmPGg7ZisrKWQuYWxpZ25bZl09L14gKi0rOiAqJC8udGVzdChkLmFsaWduW2ZdKT8icmlnaHQiOi9eICo6LSs6ICok''@;'; put 'put ''Ly50ZXN0KGQuYWxpZ25bZl0pPyJjZW50ZXIiOi9eICo6LSsgKiQvLnRlc3QoZC5hbGlnbltmXSk/ImxlZnQiOm51bGw7Zm9yKGg9ZC5yb3dzLmxlbmd0aCxmPTA7ZjxoO2YrKylkLnJvd3NbZl09eDZlKGQucm93c1tmXSxkLmhlYWRlci5sZW5ndGgpLm1hcChaPT4oe3RleHQ6Wn0pKTtmb3Io''@;'; put 'put ''aD1kLmhlYWRlci5sZW5ndGgsdj0wO3Y8aDt2KyspZC5oZWFkZXJbdl0udG9rZW5zPXRoaXMubGV4ZXIuaW5saW5lKGQuaGVhZGVyW3ZdLnRleHQpO2ZvcihoPWQucm93cy5sZW5ndGgsdj0wO3Y8aDt2KyspZm9yKEQ9ZC5yb3dzW3ZdLE09MDtNPEQubGVuZ3RoO00rKylEW01dLnRva2Vucz10''@;'; put 'put ''aGlzLmxleGVyLmlubGluZShEW01dLnRleHQpO3JldHVybiBkfX19bGhlYWRpbmcobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmJsb2NrLmxoZWFkaW5nLmV4ZWMobCk7aWYoYSlyZXR1cm57dHlwZToiaGVhZGluZyIscmF3OmFbMF0sZGVwdGg6Ij0iPT09YVsyXS5jaGFyQXQoMCk/MToyLHRleHQ6''@;'; put 'put ''YVsxXSx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUoYVsxXSl9fXBhcmFncmFwaChsKXtjb25zdCBhPXRoaXMucnVsZXMuYmxvY2sucGFyYWdyYXBoLmV4ZWMobCk7aWYoYSl7Y29uc3QgZD0iXG4iPT09YVsxXS5jaGFyQXQoYVsxXS5sZW5ndGgtMSk/YVsxXS5zbGljZSgwLC0xKTphWzFdO3Jl''@;'; put 'put ''dHVybnt0eXBlOiJwYXJhZ3JhcGgiLHJhdzphWzBdLHRleHQ6ZCx0b2tlbnM6dGhpcy5sZXhlci5pbmxpbmUoZCl9fX10ZXh0KGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5ibG9jay50ZXh0LmV4ZWMobCk7aWYoYSlyZXR1cm57dHlwZToidGV4dCIscmF3OmFbMF0sdGV4dDphWzBdLHRva2Vuczp0''@;'; put 'put ''aGlzLmxleGVyLmlubGluZShhWzBdKX19ZXNjYXBlKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5pbmxpbmUuZXNjYXBlLmV4ZWMobCk7aWYoYSlyZXR1cm57dHlwZToiZXNjYXBlIixyYXc6YVswXSx0ZXh0OkUxKGFbMV0pfX10YWcobCl7Y29uc3QgYT10aGlzLnJ1bGVzLmlubGluZS50YWcuZXhl''@;'; put 'put ''YyhsKTtpZihhKXJldHVybiF0aGlzLmxleGVyLnN0YXRlLmluTGluayYmL148YSAvaS50ZXN0KGFbMF0pP3RoaXMubGV4ZXIuc3RhdGUuaW5MaW5rPSEwOnRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rJiYvXjxcL2E+L2kudGVzdChhWzBdKSYmKHRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rPSExKSwh''@;'; put 'put ''dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Jsb2NrJiYvXjwocHJlfGNvZGV8a2JkfHNjcmlwdCkoXHN8PikvaS50ZXN0KGFbMF0pP3RoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz0hMDp0aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2smJi9ePFwvKHByZXxjb2RlfGtiZHxzY3JpcHQpKFxzfD4p''@;'; put 'put ''L2kudGVzdChhWzBdKSYmKHRoaXMubGV4ZXIuc3RhdGUuaW5SYXdCbG9jaz0hMSkse3R5cGU6dGhpcy5vcHRpb25zLnNhbml0aXplPyJ0ZXh0IjoiaHRtbCIscmF3OmFbMF0saW5MaW5rOnRoaXMubGV4ZXIuc3RhdGUuaW5MaW5rLGluUmF3QmxvY2s6dGhpcy5sZXhlci5zdGF0ZS5pblJhd0Js''@;'; put 'put ''b2NrLGJsb2NrOiExLHRleHQ6dGhpcy5vcHRpb25zLnNhbml0aXplP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXI/dGhpcy5vcHRpb25zLnNhbml0aXplcihhWzBdKTpFMShhWzBdKTphWzBdfX1saW5rKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5pbmxpbmUubGluay5leGVjKGwpO2lmKGEpe2NvbnN0''@;'; put 'put ''IGQ9YVsyXS50cmltKCk7aWYoIXRoaXMub3B0aW9ucy5wZWRhbnRpYyYmL148Ly50ZXN0KGQpKXtpZighLz4kLy50ZXN0KGQpKXJldHVybjtjb25zdCB2PVhIKGQuc2xpY2UoMCwtMSksIlxcIik7aWYoKGQubGVuZ3RoLXYubGVuZ3RoKSUyPT0wKXJldHVybn1lbHNle2NvbnN0IHY9ZnVuY3Rp''@;'; put 'put ''b24gTnZ0KGMsbCl7aWYoLTE9PT1jLmluZGV4T2YobFsxXSkpcmV0dXJuLTE7Y29uc3QgYT1jLmxlbmd0aDtsZXQgZD0wLGg9MDtmb3IoO2g8YTtoKyspaWYoIlxcIj09PWNbaF0paCsrO2Vsc2UgaWYoY1toXT09PWxbMF0pZCsrO2Vsc2UgaWYoY1toXT09PWxbMV0mJihkLS0sZDwwKSlyZXR1''@;'; put 'put ''cm4gaDtyZXR1cm4tMX0oYVsyXSwiKCkiKTtpZih2Pi0xKXtjb25zdCBEPSgwPT09YVswXS5pbmRleE9mKCIhIik/NTo0KSthWzFdLmxlbmd0aCt2O2FbMl09YVsyXS5zdWJzdHJpbmcoMCx2KSxhWzBdPWFbMF0uc3Vic3RyaW5nKDAsRCkudHJpbSgpLGFbM109IiJ9fWxldCBoPWFbMl0sZj0i''@;'; put 'put ''IjtpZih0aGlzLm9wdGlvbnMucGVkYW50aWMpe2NvbnN0IHY9L14oW14nIl0qW15cc10pXHMrKFsnIl0pKC4qKVwyLy5leGVjKGgpO3YmJihoPXZbMV0sZj12WzNdKX1lbHNlIGY9YVszXT9hWzNdLnNsaWNlKDEsLTEpOiIiO3JldHVybiBoPWgudHJpbSgpLC9ePC8udGVzdChoKSYmKGg9dGhp''@;'; put 'put ''cy5vcHRpb25zLnBlZGFudGljJiYhLz4kLy50ZXN0KGQpP2guc2xpY2UoMSk6aC5zbGljZSgxLC0xKSksRTZlKGEse2hyZWY6aCYmaC5yZXBsYWNlKHRoaXMucnVsZXMuaW5saW5lLl9lc2NhcGVzLCIkMSIpLHRpdGxlOmYmJmYucmVwbGFjZSh0aGlzLnJ1bGVzLmlubGluZS5fZXNjYXBlcywi''@;'; put 'put ''JDEiKX0sYVswXSx0aGlzLmxleGVyKX19cmVmbGluayhsLGEpe2xldCBkO2lmKChkPXRoaXMucnVsZXMuaW5saW5lLnJlZmxpbmsuZXhlYyhsKSl8fChkPXRoaXMucnVsZXMuaW5saW5lLm5vbGluay5leGVjKGwpKSl7bGV0IGg9KGRbMl18fGRbMV0pLnJlcGxhY2UoL1xzKy9nLCIgIik7aWYo''@;'; put 'put ''aD1hW2gudG9Mb3dlckNhc2UoKV0sIWgpe2NvbnN0IGY9ZFswXS5jaGFyQXQoMCk7cmV0dXJue3R5cGU6InRleHQiLHJhdzpmLHRleHQ6Zn19cmV0dXJuIEU2ZShkLGgsZFswXSx0aGlzLmxleGVyKX19ZW1TdHJvbmcobCxhLGQ9IiIpe2xldCBoPXRoaXMucnVsZXMuaW5saW5lLmVtU3Ryb25n''@;'; put 'put ''LmxEZWxpbS5leGVjKGwpO2lmKCEoIWh8fGhbM10mJmQubWF0Y2goL1tccHtMfVxwe059XS91KSkmJighaFsxXSYmIWhbMl18fCFkfHx0aGlzLnJ1bGVzLmlubGluZS5wdW5jdHVhdGlvbi5leGVjKGQpKSl7Y29uc3Qgdj1oWzBdLmxlbmd0aC0xO2xldCBNLEQsWj12LG5lPTA7Y29uc3QgY2U9''@;'; put 'put ''IioiPT09aFswXVswXT90aGlzLnJ1bGVzLmlubGluZS5lbVN0cm9uZy5yRGVsaW1Bc3Q6dGhpcy5ydWxlcy5pbmxpbmUuZW1TdHJvbmcuckRlbGltVW5kO2ZvcihjZS5sYXN0SW5kZXg9MCxhPWEuc2xpY2UoLTEqbC5sZW5ndGgrdik7bnVsbCE9KGg9Y2UuZXhlYyhhKSk7KXtpZihNPWhbMV18''@;'; put 'put ''fGhbMl18fGhbM118fGhbNF18fGhbNV18fGhbNl0sIU0pY29udGludWU7aWYoRD1NLmxlbmd0aCxoWzNdfHxoWzRdKXtaKz1EO2NvbnRpbnVlfWlmKChoWzVdfHxoWzZdKSYmdiUzJiYhKCh2K0QpJTMpKXtuZSs9RDtjb250aW51ZX1pZihaLT1ELFo+MCljb250aW51ZTtEPU1hdGgubWluKEQs''@;'; put 'put ''RCtaK25lKTtjb25zdCBiZT1sLnNsaWNlKDAsditoLmluZGV4K0QrMSk7aWYoTWF0aC5taW4odixEKSUyKXtjb25zdCBCZT1iZS5zbGljZSgxLC0xKTtyZXR1cm57dHlwZToiZW0iLHJhdzpiZSx0ZXh0OkJlLHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2VucyhCZSl9fWNvbnN0IEVlPWJl''@;'; put 'put ''LnNsaWNlKDIsLTIpO3JldHVybnt0eXBlOiJzdHJvbmciLHJhdzpiZSx0ZXh0OkVlLHRva2Vuczp0aGlzLmxleGVyLmlubGluZVRva2VucyhFZSl9fX19Y29kZXNwYW4obCl7Y29uc3QgYT10aGlzLnJ1bGVzLmlubGluZS5jb2RlLmV4ZWMobCk7aWYoYSl7bGV0IGQ9YVsyXS5yZXBsYWNlKC9c''@;'; put 'put ''bi9nLCIgIik7Y29uc3QgaD0vW14gXS8udGVzdChkKSxmPS9eIC8udGVzdChkKSYmLyAkLy50ZXN0KGQpO3JldHVybiBoJiZmJiYoZD1kLnN1YnN0cmluZygxLGQubGVuZ3RoLTEpKSxkPUUxKGQsITApLHt0eXBlOiJjb2Rlc3BhbiIscmF3OmFbMF0sdGV4dDpkfX19YnIobCl7Y29uc3QgYT10''@;'; put 'put ''aGlzLnJ1bGVzLmlubGluZS5ici5leGVjKGwpO2lmKGEpcmV0dXJue3R5cGU6ImJyIixyYXc6YVswXX19ZGVsKGwpe2NvbnN0IGE9dGhpcy5ydWxlcy5pbmxpbmUuZGVsLmV4ZWMobCk7aWYoYSlyZXR1cm57dHlwZToiZGVsIixyYXc6YVswXSx0ZXh0OmFbMl0sdG9rZW5zOnRoaXMubGV4ZXIu''@;'; put 'put ''aW5saW5lVG9rZW5zKGFbMl0pfX1hdXRvbGluayhsLGEpe2NvbnN0IGQ9dGhpcy5ydWxlcy5pbmxpbmUuYXV0b2xpbmsuZXhlYyhsKTtpZihkKXtsZXQgaCxmO3JldHVybiJAIj09PWRbMl0/KGg9RTEodGhpcy5vcHRpb25zLm1hbmdsZT9hKGRbMV0pOmRbMV0pLGY9Im1haWx0bzoiK2gpOiho''@;'; put 'put ''PUUxKGRbMV0pLGY9aCkse3R5cGU6ImxpbmsiLHJhdzpkWzBdLHRleHQ6aCxocmVmOmYsdG9rZW5zOlt7dHlwZToidGV4dCIscmF3OmgsdGV4dDpofV19fX11cmwobCxhKXtsZXQgZDtpZihkPXRoaXMucnVsZXMuaW5saW5lLnVybC5leGVjKGwpKXtsZXQgaCxmO2lmKCJAIj09PWRbMl0paD1F''@;'; put 'put ''MSh0aGlzLm9wdGlvbnMubWFuZ2xlP2EoZFswXSk6ZFswXSksZj0ibWFpbHRvOiIraDtlbHNle2xldCB2O2Rve3Y9ZFswXSxkWzBdPXRoaXMucnVsZXMuaW5saW5lLl9iYWNrcGVkYWwuZXhlYyhkWzBdKVswXX13aGlsZSh2IT09ZFswXSk7aD1FMShkWzBdKSxmPSJ3d3cuIj09PWRbMV0/Imh0''@;'; put 'put ''dHA6Ly8iK2RbMF06ZFswXX1yZXR1cm57dHlwZToibGluayIscmF3OmRbMF0sdGV4dDpoLGhyZWY6Zix0b2tlbnM6W3t0eXBlOiJ0ZXh0IixyYXc6aCx0ZXh0Omh9XX19fWlubGluZVRleHQobCxhKXtjb25zdCBkPXRoaXMucnVsZXMuaW5saW5lLnRleHQuZXhlYyhsKTtpZihkKXtsZXQgaDty''@;'; put 'put ''ZXR1cm4gaD10aGlzLmxleGVyLnN0YXRlLmluUmF3QmxvY2s/dGhpcy5vcHRpb25zLnNhbml0aXplP3RoaXMub3B0aW9ucy5zYW5pdGl6ZXI/dGhpcy5vcHRpb25zLnNhbml0aXplcihkWzBdKTpFMShkWzBdKTpkWzBdOkUxKHRoaXMub3B0aW9ucy5zbWFydHlwYW50cz9hKGRbMF0pOmRbMF0p''@;'; put 'put ''LHt0eXBlOiJ0ZXh0IixyYXc6ZFswXSx0ZXh0Omh9fX19Y29uc3QgbWE9e25ld2xpbmU6L14oPzogKig/OlxufCQpKSsvLGNvZGU6L14oIHs0fVteXG5dKyg/OlxuKD86ICooPzpcbnwkKSkqKT8pKy8sZmVuY2VzOi9eIHswLDN9KGB7Myx9KD89W15gXG5dKig/OlxufCQpKXx+ezMsfSkoW15c''@;'; put 'put ''bl0qKSg/OlxufCQpKD86fChbXHNcU10qPykoPzpcbnwkKSkoPzogezAsM31cMVt+YF0qICooPz1cbnwkKXwkKS8saHI6L14gezAsM30oKD86LVtcdCBdKil7Myx9fCg/Ol9bIFx0XSopezMsfXwoPzpcKlsgXHRdKil7Myx9KSg/OlxuK3wkKS8saGVhZGluZzovXiB7MCwzfSgjezEsNn0pKD89''@;'; put 'put ''XHN8JCkoLiopKD86XG4rfCQpLyxibG9ja3F1b3RlOi9eKCB7MCwzfT4gPyhwYXJhZ3JhcGh8W15cbl0qKSg/OlxufCQpKSsvLGxpc3Q6L14oIHswLDN9YnVsbCkoWyBcdF1bXlxuXSs/KT8oPzpcbnwkKS8saHRtbDoiXiB7MCwzfSg/Ojwoc2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYSlbXFxz''@;'; put 'put ''Pl1bXFxzXFxTXSo/KD86PC9cXDE+W15cXG5dKlxcbit8JCl8Y29tbWVudFteXFxuXSooXFxuK3wkKXw8XFw/W1xcc1xcU10qPyg/OlxcPz5cXG4qfCQpfDwhW0EtWl1bXFxzXFxTXSo/KD86Plxcbip8JCl8PCFcXFtDREFUQVxcW1tcXHNcXFNdKj8oPzpcXF1cXF0+XFxuKnwkKXw8Lz8odGFn''@;'; put 'put ''KSg/OiArfFxcbnwvPz4pW1xcc1xcU10qPyg/Oig/OlxcbiAqKStcXG58JCl8PCg/IXNjcmlwdHxwcmV8c3R5bGV8dGV4dGFyZWEpKFthLXpdW1xcdy1dKikoPzphdHRyaWJ1dGUpKj8gKi8/Pig/PVsgXFx0XSooPzpcXG58JCkpW1xcc1xcU10qPyg/Oig/OlxcbiAqKStcXG58JCl8PC8oPyFz''@;'; put 'put ''Y3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhKVthLXpdW1xcdy1dKlxccyo+KD89WyBcXHRdKig/OlxcbnwkKSlbXFxzXFxTXSo/KD86KD86XFxuICopK1xcbnwkKSkiLGRlZjovXiB7MCwzfVxbKGxhYmVsKVxdOiAqKD86XG4gKik/KFtePFxzXVteXHNdKnw8Lio/PikoPzooPzogKyg/OlxuICop''@;'; put 'put ''P3wgKlxuICopKHRpdGxlKSk/ICooPzpcbit8JCkvLHRhYmxlOnFILGxoZWFkaW5nOi9eKCg/Oig/IV5idWxsICkufFxuKD8hXG58YnVsbCApKSs/KVxuIHswLDN9KD0rfC0rKSAqKD86XG4rfCQpLyxfcGFyYWdyYXBoOi9eKFteXG5dKyg/OlxuKD8haHJ8aGVhZGluZ3xsaGVhZGluZ3xibG9j''@;'; put 'put ''a3F1b3RlfGZlbmNlc3xsaXN0fGh0bWx8dGFibGV8ICtcbilbXlxuXSspKikvLHRleHQ6L15bXlxuXSsvLF9sYWJlbDovKD8hXHMqXF0pKD86XFwufFteXFtcXVxcXSkrLyxfdGl0bGU6Lyg/OiIoPzpcXCI/fFteIlxcXSkqInwnW14nXG5dKig/OlxuW14nXG5dKykqXG4/J3xcKFteKCldKlwp''@;'; put 'put ''KS99O21hLmRlZj1rbChtYS5kZWYpLnJlcGxhY2UoImxhYmVsIixtYS5fbGFiZWwpLnJlcGxhY2UoInRpdGxlIixtYS5fdGl0bGUpLmdldFJlZ2V4KCksbWEuYnVsbGV0PS8oPzpbKistXXxcZHsxLDl9Wy4pXSkvLG1hLmxpc3RJdGVtU3RhcnQ9a2woL14oICopKGJ1bGwpICovKS5yZXBsYWNl''@;'; put 'put ''KCJidWxsIixtYS5idWxsZXQpLmdldFJlZ2V4KCksbWEubGlzdD1rbChtYS5saXN0KS5yZXBsYWNlKC9idWxsL2csbWEuYnVsbGV0KS5yZXBsYWNlKCJociIsIlxcbisoPz1cXDE/KD86KD86LSAqKXszLH18KD86XyAqKXszLH18KD86XFwqICopezMsfSkoPzpcXG4rfCQpKSIpLnJlcGxhY2Uo''@;'; put 'put ''ImRlZiIsIlxcbisoPz0iK21hLmRlZi5zb3VyY2UrIikiKS5nZXRSZWdleCgpLG1hLl90YWc9ImFkZHJlc3N8YXJ0aWNsZXxhc2lkZXxiYXNlfGJhc2Vmb250fGJsb2NrcXVvdGV8Ym9keXxjYXB0aW9ufGNlbnRlcnxjb2x8Y29sZ3JvdXB8ZGR8ZGV0YWlsc3xkaWFsb2d8ZGlyfGRpdnxkbHxk''@;'; put 'put ''dHxmaWVsZHNldHxmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8Zm9ybXxmcmFtZXxmcmFtZXNldHxoWzEtNl18aGVhZHxoZWFkZXJ8aHJ8aHRtbHxpZnJhbWV8bGVnZW5kfGxpfGxpbmt8bWFpbnxtZW51fG1lbnVpdGVtfG1ldGF8bmF2fG5vZnJhbWVzfG9sfG9wdGdyb3VwfG9wdGlvbnxwfHBh''@;'; put 'put ''cmFtfHNlY3Rpb258c291cmNlfHN1bW1hcnl8dGFibGV8dGJvZHl8dGR8dGZvb3R8dGh8dGhlYWR8dGl0bGV8dHJ8dHJhY2t8dWwiLG1hLl9jb21tZW50PS88IS0tKD8hLT8+KVtcc1xTXSo/KD86LS0+fCQpLyxtYS5odG1sPWtsKG1hLmh0bWwsImkiKS5yZXBsYWNlKCJjb21tZW50IixtYS5f''@;'; put 'put ''Y29tbWVudCkucmVwbGFjZSgidGFnIixtYS5fdGFnKS5yZXBsYWNlKCJhdHRyaWJ1dGUiLC8gK1thLXpBLVo6X11bXHcuOi1dKig/OiAqPSAqIlteIlxuXSoifCAqPSAqJ1teJ1xuXSonfCAqPSAqW15ccyInPTw+YF0rKT8vKS5nZXRSZWdleCgpLG1hLmxoZWFkaW5nPWtsKG1hLmxoZWFkaW5n''@;'; put 'put ''KS5yZXBsYWNlKC9idWxsL2csbWEuYnVsbGV0KS5nZXRSZWdleCgpLG1hLnBhcmFncmFwaD1rbChtYS5fcGFyYWdyYXBoKS5yZXBsYWNlKCJociIsbWEuaHIpLnJlcGxhY2UoImhlYWRpbmciLCIgezAsM30jezEsNn0gIikucmVwbGFjZSgifGxoZWFkaW5nIiwiIikucmVwbGFjZSgifHRhYmxl''@;'; put 'put ''IiwiIikucmVwbGFjZSgiYmxvY2txdW90ZSIsIiB7MCwzfT4iKS5yZXBsYWNlKCJmZW5jZXMiLCIgezAsM30oPzpgezMsfSg/PVteYFxcbl0qXFxuKXx+ezMsfSlbXlxcbl0qXFxuIikucmVwbGFjZSgibGlzdCIsIiB7MCwzfSg/OlsqKy1dfDFbLildKSAiKS5yZXBsYWNlKCJodG1sIiwiPC8/''@;'; put 'put ''KD86dGFnKSg/OiArfFxcbnwvPz4pfDwoPzpzY3JpcHR8cHJlfHN0eWxlfHRleHRhcmVhfCEtLSkiKS5yZXBsYWNlKCJ0YWciLG1hLl90YWcpLmdldFJlZ2V4KCksbWEuYmxvY2txdW90ZT1rbChtYS5ibG9ja3F1b3RlKS5yZXBsYWNlKCJwYXJhZ3JhcGgiLG1hLnBhcmFncmFwaCkuZ2V0UmVn''@;'; put 'put ''ZXgoKSxtYS5ub3JtYWw9ey4uLm1hfSxtYS5nZm09ey4uLm1hLm5vcm1hbCx0YWJsZToiXiAqKFteXFxuIF0uKlxcfC4qKVxcbiB7MCwzfSg/OlxcfCAqKT8oOj8tKzo/ICooPzpcXHwgKjo/LSs6PyAqKSopKD86XFx8ICopPyg/OlxcbigoPzooPyEgKlxcbnxocnxoZWFkaW5nfGJsb2NrcXVv''@;'; put 'put ''dGV8Y29kZXxmZW5jZXN8bGlzdHxodG1sKS4qKD86XFxufCQpKSopXFxuKnwkKSJ9LG1hLmdmbS50YWJsZT1rbChtYS5nZm0udGFibGUpLnJlcGxhY2UoImhyIixtYS5ocikucmVwbGFjZSgiaGVhZGluZyIsIiB7MCwzfSN7MSw2fSAiKS5yZXBsYWNlKCJibG9ja3F1b3RlIiwiIHswLDN9PiIp''@;'; put 'put ''LnJlcGxhY2UoImNvZGUiLCIgezR9W15cXG5dIikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxcbiIpLnJlcGxhY2UoImxpc3QiLCIgezAsM30oPzpbKistXXwxWy4pXSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/OnRhZyko''@;'; put 'put ''PzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIixtYS5fdGFnKS5nZXRSZWdleCgpLG1hLmdmbS5wYXJhZ3JhcGg9a2wobWEuX3BhcmFncmFwaCkucmVwbGFjZSgiaHIiLG1hLmhyKS5yZXBsYWNlKCJoZWFkaW5nIiwiIHswLDN9''@;'; put 'put ''I3sxLDZ9ICIpLnJlcGxhY2UoInxsaGVhZGluZyIsIiIpLnJlcGxhY2UoInRhYmxlIixtYS5nZm0udGFibGUpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgiZmVuY2VzIiwiIHswLDN9KD86YHszLH0oPz1bXmBcXG5dKlxcbil8fnszLH0pW15cXG5dKlxcbiIpLnJl''@;'; put 'put ''cGxhY2UoImxpc3QiLCIgezAsM30oPzpbKistXXwxWy4pXSkgIikucmVwbGFjZSgiaHRtbCIsIjwvPyg/OnRhZykoPzogK3xcXG58Lz8+KXw8KD86c2NyaXB0fHByZXxzdHlsZXx0ZXh0YXJlYXwhLS0pIikucmVwbGFjZSgidGFnIixtYS5fdGFnKS5nZXRSZWdleCgpLG1hLnBlZGFudGljPXsu''@;'; put 'put ''Li5tYS5ub3JtYWwsaHRtbDprbCgiXiAqKD86Y29tbWVudCAqKD86XFxufFxccyokKXw8KHRhZylbXFxzXFxTXSs/PC9cXDE+ICooPzpcXG57Mix9fFxccyokKXw8dGFnKD86XCJbXlwiXSpcInwnW14nXSonfFxcc1teJ1wiLz5cXHNdKikqPy8/PiAqKD86XFxuezIsfXxcXHMqJCkpIikucmVw''@;'; put 'put ''bGFjZSgiY29tbWVudCIsbWEuX2NvbW1lbnQpLnJlcGxhY2UoL3RhZy9nLCIoPyEoPzphfGVtfHN0cm9uZ3xzbWFsbHxzfGNpdGV8cXxkZm58YWJicnxkYXRhfHRpbWV8Y29kZXx2YXJ8c2FtcHxrYmR8c3VifHN1cHxpfGJ8dXxtYXJrfHJ1Ynl8cnR8cnB8YmRpfGJkb3xzcGFufGJyfHdicnxp''@;'; put 'put ''bnN8ZGVsfGltZylcXGIpXFx3Kyg/ITp8W15cXHdcXHNAXSpAKVxcYiIpLmdldFJlZ2V4KCksZGVmOi9eICpcWyhbXlxdXSspXF06ICo8PyhbXlxzPl0rKT4/KD86ICsoWyIoXVteXG5dK1siKV0pKT8gKig/OlxuK3wkKS8saGVhZGluZzovXigjezEsNn0pKC4qKSg/OlxuK3wkKS8sZmVuY2Vz''@;'; put 'put ''OnFILGxoZWFkaW5nOi9eKC4rPylcbiB7MCwzfSg9K3wtKykgKig/OlxuK3wkKS8scGFyYWdyYXBoOmtsKG1hLm5vcm1hbC5fcGFyYWdyYXBoKS5yZXBsYWNlKCJociIsbWEuaHIpLnJlcGxhY2UoImhlYWRpbmciLCIgKiN7MSw2fSAqW15cbl0iKS5yZXBsYWNlKCJsaGVhZGluZyIsbWEubGhl''@;'; put 'put ''YWRpbmcpLnJlcGxhY2UoImJsb2NrcXVvdGUiLCIgezAsM30+IikucmVwbGFjZSgifGZlbmNlcyIsIiIpLnJlcGxhY2UoInxsaXN0IiwiIikucmVwbGFjZSgifGh0bWwiLCIiKS5nZXRSZWdleCgpfTtjb25zdCBrbz17ZXNjYXBlOi9eXFwoWyEiIyQlJicoKSorLFwtLi86Ozw9Pj9AXFtcXVxc''@;'; put 'put ''Xl9ge3x9fl0pLyxhdXRvbGluazovXjwoc2NoZW1lOlteXHNceDAwLVx4MWY8Pl0qfGVtYWlsKT4vLHVybDpxSCx0YWc6Il5jb21tZW50fF48L1thLXpBLVpdW1xcdzotXSpcXHMqPnxePFthLXpBLVpdW1xcdy1dKig/OmF0dHJpYnV0ZSkqP1xccyovPz58XjxcXD9bXFxzXFxTXSo/XFw/Pnxe''@;'; put 'put ''PCFbYS16QS1aXStcXHNbXFxzXFxTXSo/PnxePCFcXFtDREFUQVxcW1tcXHNcXFNdKj9cXF1cXF0+IixsaW5rOi9eIT9cWyhsYWJlbClcXVwoXHMqKGhyZWYpKD86XHMrKHRpdGxlKSk/XHMqXCkvLHJlZmxpbms6L14hP1xbKGxhYmVsKVxdXFsocmVmKVxdLyxub2xpbms6L14hP1xbKHJlZilc''@;'; put 'put ''XSg/OlxbXF0pPy8scmVmbGlua1NlYXJjaDoicmVmbGlua3xub2xpbmsoPyFcXCgpIixlbVN0cm9uZzp7bERlbGltOi9eKD86XCorKD86KCg/IVwqKVtwdW5jdF0pfFteXHMqXSkpfF5fKyg/OigoPyFfKVtwdW5jdF0pfChbXlxzX10pKS8sckRlbGltQXN0Oi9eW15fKl0qP19fW15fKl0qP1wq''@;'; put 'put ''W15fKl0qPyg/PV9fKXxbXipdKyg/PVteKl0pfCg/IVwqKVtwdW5jdF0oXCorKSg/PVtcc118JCl8W15wdW5jdFxzXShcKispKD8hXCopKD89W3B1bmN0XHNdfCQpfCg/IVwqKVtwdW5jdFxzXShcKispKD89W15wdW5jdFxzXSl8W1xzXShcKispKD8hXCopKD89W3B1bmN0XSl8KD8hXCopW3B1''@;'; put 'put ''bmN0XShcKispKD8hXCopKD89W3B1bmN0XSl8W15wdW5jdFxzXShcKispKD89W15wdW5jdFxzXSkvLHJEZWxpbVVuZDovXlteXypdKj9cKlwqW15fKl0qP19bXl8qXSo/KD89XCpcKil8W15fXSsoPz1bXl9dKXwoPyFfKVtwdW5jdF0oXyspKD89W1xzXXwkKXxbXnB1bmN0XHNdKF8rKSg/IV8p''@;'; put 'put ''KD89W3B1bmN0XHNdfCQpfCg/IV8pW3B1bmN0XHNdKF8rKSg/PVtecHVuY3Rcc10pfFtcc10oXyspKD8hXykoPz1bcHVuY3RdKXwoPyFfKVtwdW5jdF0oXyspKD8hXykoPz1bcHVuY3RdKS99LGNvZGU6L14oYCspKFteYF18W15gXVtcc1xTXSo/W15gXSlcMSg/IWApLyxicjovXiggezIsfXxc''@;'; put 'put ''XClcbig/IVxzKiQpLyxkZWw6cUgsdGV4dDovXihgK3xbXmBdKSg/Oig/PSB7Mix9XG4pfFtcc1xTXSo/KD86KD89W1xcPCFcW2AqX118XGJffCQpfFteIF0oPz0gezIsfVxuKSkpLyxwdW5jdHVhdGlvbjovXigoPyFbKl9dKVtcc3B1bmN0dWF0aW9uXSkvfTtmdW5jdGlvbiBqdnQoYyl7cmV0''@;'; put 'put ''dXJuIGMucmVwbGFjZSgvLS0tL2csIlx1MjAxNCIpLnJlcGxhY2UoLy0tL2csIlx1MjAxMyIpLnJlcGxhY2UoLyhefFstXHUyMDE0LyhcW3siXHNdKScvZywiJDFcdTIwMTgiKS5yZXBsYWNlKC8nL2csIlx1MjAxOSIpLnJlcGxhY2UoLyhefFstXHUyMDE0LyhcW3tcdTIwMThcc10pIi9nLCIk''@;'; put 'put ''MVx1MjAxYyIpLnJlcGxhY2UoLyIvZywiXHUyMDFkIikucmVwbGFjZSgvXC57M30vZywiXHUyMDI2Iil9ZnVuY3Rpb24gVDZlKGMpe2xldCBhLGQsbD0iIjtjb25zdCBoPWMubGVuZ3RoO2ZvcihhPTA7YTxoO2ErKylkPWMuY2hhckNvZGVBdChhKSxNYXRoLnJhbmRvbSgpPi41JiYoZD0ieCIr''@;'; put 'put ''ZC50b1N0cmluZygxNikpLGwrPSImIyIrZCsiOyI7cmV0dXJuIGx9a28uX3B1bmN0dWF0aW9uPSJcXHB7UH0kKzw9PmBefH4iLGtvLnB1bmN0dWF0aW9uPWtsKGtvLnB1bmN0dWF0aW9uLCJ1IikucmVwbGFjZSgvcHVuY3R1YXRpb24vZyxrby5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksa28u''@;'; put 'put ''YmxvY2tTa2lwPS9cW1teW1xdXSo/XF1cKFteXChcKV0qP1wpfGBbXmBdKj9gfDxbXjw+XSo/Pi9nLGtvLmFueVB1bmN0dWF0aW9uPS9cXFtwdW5jdF0vZyxrby5fZXNjYXBlcz0vXFwoW3B1bmN0XSkvZyxrby5fY29tbWVudD1rbChtYS5fY29tbWVudCkucmVwbGFjZSgiKD86LS1ceDNlfCQp''@;'; put 'put ''IiwiLS1ceDNlIikuZ2V0UmVnZXgoKSxrby5lbVN0cm9uZy5sRGVsaW09a2woa28uZW1TdHJvbmcubERlbGltLCJ1IikucmVwbGFjZSgvcHVuY3QvZyxrby5fcHVuY3R1YXRpb24pLmdldFJlZ2V4KCksa28uZW1TdHJvbmcuckRlbGltQXN0PWtsKGtvLmVtU3Ryb25nLnJEZWxpbUFzdCwiZ3Ui''@;'; put 'put ''KS5yZXBsYWNlKC9wdW5jdC9nLGtvLl9wdW5jdHVhdGlvbikuZ2V0UmVnZXgoKSxrby5lbVN0cm9uZy5yRGVsaW1VbmQ9a2woa28uZW1TdHJvbmcuckRlbGltVW5kLCJndSIpLnJlcGxhY2UoL3B1bmN0L2csa28uX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLGtvLmFueVB1bmN0dWF0aW9uPWts''@;'; put 'put ''KGtvLmFueVB1bmN0dWF0aW9uLCJndSIpLnJlcGxhY2UoL3B1bmN0L2csa28uX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLGtvLl9lc2NhcGVzPWtsKGtvLl9lc2NhcGVzLCJndSIpLnJlcGxhY2UoL3B1bmN0L2csa28uX3B1bmN0dWF0aW9uKS5nZXRSZWdleCgpLGtvLl9zY2hlbWU9L1thLXpB''@;'; put 'put ''LVpdW2EtekEtWjAtOSsuLV17MSwzMX0vLGtvLl9lbWFpbD0vW2EtekEtWjAtOS4hIyQlJicqKy89P15fYHt8fX4tXSsoQClbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcLlthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjF9W2EtekEtWjAtOV0p''@;'; put 'put ''PykrKD8hWy1fXSkvLGtvLmF1dG9saW5rPWtsKGtvLmF1dG9saW5rKS5yZXBsYWNlKCJzY2hlbWUiLGtvLl9zY2hlbWUpLnJlcGxhY2UoImVtYWlsIixrby5fZW1haWwpLmdldFJlZ2V4KCksa28uX2F0dHJpYnV0ZT0vXHMrW2EtekEtWjpfXVtcdy46LV0qKD86XHMqPVxzKiJbXiJdKiJ8XHMq''@;'; put 'put ''PVxzKidbXiddKid8XHMqPVxzKlteXHMiJz08PmBdKyk/Lyxrby50YWc9a2woa28udGFnKS5yZXBsYWNlKCJjb21tZW50Iixrby5fY29tbWVudCkucmVwbGFjZSgiYXR0cmlidXRlIixrby5fYXR0cmlidXRlKS5nZXRSZWdleCgpLGtvLl9sYWJlbD0vKD86XFsoPzpcXC58W15cW1xdXFxdKSpc''@;'; put 'put ''XXxcXC58YFteYF0qYHxbXlxbXF1cXGBdKSo/Lyxrby5faHJlZj0vPCg/OlxcLnxbXlxuPD5cXF0pKz58W15cc1x4MDAtXHgxZl0qLyxrby5fdGl0bGU9LyIoPzpcXCI/fFteIlxcXSkqInwnKD86XFwnP3xbXidcXF0pKid8XCgoPzpcXFwpP3xbXilcXF0pKlwpLyxrby5saW5rPWtsKGtvLmxp''@;'; put 'put ''bmspLnJlcGxhY2UoImxhYmVsIixrby5fbGFiZWwpLnJlcGxhY2UoImhyZWYiLGtvLl9ocmVmKS5yZXBsYWNlKCJ0aXRsZSIsa28uX3RpdGxlKS5nZXRSZWdleCgpLGtvLnJlZmxpbms9a2woa28ucmVmbGluaykucmVwbGFjZSgibGFiZWwiLGtvLl9sYWJlbCkucmVwbGFjZSgicmVmIixtYS5f''@;'; put 'put ''bGFiZWwpLmdldFJlZ2V4KCksa28ubm9saW5rPWtsKGtvLm5vbGluaykucmVwbGFjZSgicmVmIixtYS5fbGFiZWwpLmdldFJlZ2V4KCksa28ucmVmbGlua1NlYXJjaD1rbChrby5yZWZsaW5rU2VhcmNoLCJnIikucmVwbGFjZSgicmVmbGluayIsa28ucmVmbGluaykucmVwbGFjZSgibm9saW5r''@;'; put 'put ''Iixrby5ub2xpbmspLmdldFJlZ2V4KCksa28ubm9ybWFsPXsuLi5rb30sa28ucGVkYW50aWM9ey4uLmtvLm5vcm1hbCxzdHJvbmc6e3N0YXJ0Oi9eX198XCpcKi8sbWlkZGxlOi9eX18oPz1cUykoW1xzXFNdKj9cUylfXyg/IV8pfF5cKlwqKD89XFMpKFtcc1xTXSo/XFMpXCpcKig/IVwqKS8s''@;'; put 'put ''ZW5kQXN0Oi9cKlwqKD8hXCopL2csZW5kVW5kOi9fXyg/IV8pL2d9LGVtOntzdGFydDovXl98XCovLG1pZGRsZTovXigpXCooPz1cUykoW1xzXFNdKj9cUylcKig/IVwqKXxeXyg/PVxTKShbXHNcU10qP1xTKV8oPyFfKS8sZW5kQXN0Oi9cKig/IVwqKS9nLGVuZFVuZDovXyg/IV8pL2d9LGxp''@;'; put 'put ''bms6a2woL14hP1xbKGxhYmVsKVxdXCgoLio/KVwpLykucmVwbGFjZSgibGFiZWwiLGtvLl9sYWJlbCkuZ2V0UmVnZXgoKSxyZWZsaW5rOmtsKC9eIT9cWyhsYWJlbClcXVxzKlxbKFteXF1dKilcXS8pLnJlcGxhY2UoImxhYmVsIixrby5fbGFiZWwpLmdldFJlZ2V4KCl9LGtvLmdmbT17Li4u''@;'; put 'put ''a28ubm9ybWFsLGVzY2FwZTprbChrby5lc2NhcGUpLnJlcGxhY2UoIl0pIiwifnxdKSIpLmdldFJlZ2V4KCksX2V4dGVuZGVkX2VtYWlsOi9bQS1aYS16MC05Ll8rLV0rKEApW2EtekEtWjAtOS1fXSsoPzpcLlthLXpBLVowLTktX10qW2EtekEtWjAtOV0pKyg/IVstX10pLyx1cmw6L14oKD86''@;'; put 'put ''ZnRwfGh0dHBzPyk6XC9cL3x3d3dcLikoPzpbYS16QS1aMC05XC1dK1wuPykrW15cczxdKnxeZW1haWwvLF9iYWNrcGVkYWw6Lyg/OltePyEuLDo7Kl8nIn4oKSZdK3xcKFteKV0qXCl8Jig/IVthLXpBLVowLTldKzskKXxbPyEuLDo7Kl8nIn4pXSsoPyEkKSkrLyxkZWw6L14ofn4/KSg/PVte''@;'; put 'put ''XHN+XSkoW1xzXFNdKj9bXlxzfl0pXDEoPz1bXn5dfCQpLyx0ZXh0Oi9eKFtgfl0rfFteYH5dKSg/Oig/PSB7Mix9XG4pfCg/PVthLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dK0ApfFtcc1xTXSo/KD86KD89W1xcPCFcW2Aqfl9dfFxiX3xodHRwcz86XC9cL3xmdHA6XC9cL3x3d3dc''@;'; put 'put ''LnwkKXxbXiBdKD89IHsyLH1cbil8W15hLXpBLVowLTkuISMkJSYnKitcLz0/X2B7XHx9fi1dKD89W2EtekEtWjAtOS4hIyQlJicqK1wvPT9fYHtcfH1+LV0rQCkpKS99LGtvLmdmbS51cmw9a2woa28uZ2ZtLnVybCwiaSIpLnJlcGxhY2UoImVtYWlsIixrby5nZm0uX2V4dGVuZGVkX2VtYWls''@;'; put 'put ''KS5nZXRSZWdleCgpLGtvLmJyZWFrcz17Li4ua28uZ2ZtLGJyOmtsKGtvLmJyKS5yZXBsYWNlKCJ7Mix9IiwiKiIpLmdldFJlZ2V4KCksdGV4dDprbChrby5nZm0udGV4dCkucmVwbGFjZSgiXFxiXyIsIlxcYl98IHsyLH1cXG4iKS5yZXBsYWNlKC9cezIsXH0vZywiKiIpLmdldFJlZ2V4KCl9''@;'; put 'put ''O2NsYXNzIG40e2NvbnN0cnVjdG9yKGwpe3RoaXMudG9rZW5zPVtdLHRoaXMudG9rZW5zLmxpbmtzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5vcHRpb25zPWx8fF82LHRoaXMub3B0aW9ucy50b2tlbml6ZXI9dGhpcy5vcHRpb25zLnRva2VuaXplcnx8bmV3IEpILHRoaXMudG9rZW5pemVy''@;'; put 'put ''PXRoaXMub3B0aW9ucy50b2tlbml6ZXIsdGhpcy50b2tlbml6ZXIub3B0aW9ucz10aGlzLm9wdGlvbnMsdGhpcy50b2tlbml6ZXIubGV4ZXI9dGhpcyx0aGlzLmlubGluZVF1ZXVlPVtdLHRoaXMuc3RhdGU9e2luTGluazohMSxpblJhd0Jsb2NrOiExLHRvcDohMH07Y29uc3QgYT17YmxvY2s6''@;'; put 'put ''bWEubm9ybWFsLGlubGluZTprby5ub3JtYWx9O3RoaXMub3B0aW9ucy5wZWRhbnRpYz8oYS5ibG9jaz1tYS5wZWRhbnRpYyxhLmlubGluZT1rby5wZWRhbnRpYyk6dGhpcy5vcHRpb25zLmdmbSYmKGEuYmxvY2s9bWEuZ2ZtLGEuaW5saW5lPXRoaXMub3B0aW9ucy5icmVha3M/a28uYnJlYWtz''@;'; put 'put ''OmtvLmdmbSksdGhpcy50b2tlbml6ZXIucnVsZXM9YX1zdGF0aWMgZ2V0IHJ1bGVzKCl7cmV0dXJue2Jsb2NrOm1hLGlubGluZTprb319c3RhdGljIGxleChsLGEpe3JldHVybiBuZXcgbjQoYSkubGV4KGwpfXN0YXRpYyBsZXhJbmxpbmUobCxhKXtyZXR1cm4gbmV3IG40KGEpLmlubGluZVRv''@;'; put 'put ''a2VucyhsKX1sZXgobCl7bGV0IGE7Zm9yKGw9bC5yZXBsYWNlKC9cclxufFxyL2csIlxuIiksdGhpcy5ibG9ja1Rva2VucyhsLHRoaXMudG9rZW5zKTthPXRoaXMuaW5saW5lUXVldWUuc2hpZnQoKTspdGhpcy5pbmxpbmVUb2tlbnMoYS5zcmMsYS50b2tlbnMpO3JldHVybiB0aGlzLnRva2Vu''@;'; put 'put ''c31ibG9ja1Rva2VucyhsLGE9W10pe2xldCBkLGgsZix2O2ZvcihsPXRoaXMub3B0aW9ucy5wZWRhbnRpYz9sLnJlcGxhY2UoL1x0L2csIiAgICAiKS5yZXBsYWNlKC9eICskL2dtLCIiKTpsLnJlcGxhY2UoL14oICopKFx0KykvZ20sKE0sRCxaKT0+RCsiICAgICIucmVwZWF0KFoubGVuZ3Ro''@;'; put 'put ''KSk7bDspaWYoISh0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuYmxvY2smJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLmJsb2NrLnNvbWUoTT0+ISEoZD1NLmNhbGwoe2xleGVyOnRoaXN9LGwsYSkpJiYobD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgp''@;'; put 'put ''LGEucHVzaChkKSwhMCkpKSl7aWYoZD10aGlzLnRva2VuaXplci5zcGFjZShsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLDE9PT1kLnJhdy5sZW5ndGgmJmEubGVuZ3RoPjA/YVthLmxlbmd0aC0xXS5yYXcrPSJcbiI6YS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6''@;'; put 'put ''ZXIuY29kZShsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGg9YVthLmxlbmd0aC0xXSwhaHx8InBhcmFncmFwaCIhPT1oLnR5cGUmJiJ0ZXh0IiE9PWgudHlwZT9hLnB1c2goZCk6KGgucmF3Kz0iXG4iK2QucmF3LGgudGV4dCs9IlxuIitkLnRleHQsdGhpcy5pbmxpbmVRdWV1ZVt0''@;'; put 'put ''aGlzLmlubGluZVF1ZXVlLmxlbmd0aC0xXS5zcmM9aC50ZXh0KTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmZlbmNlcyhsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmhlYWRpbmcobCkpe2w9bC5zdWJz''@;'; put 'put ''dHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5ocihsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmJsb2NrcXVvdGUobCkpe2w9bC5zdWJzdHJpbmcoZC5y''@;'; put 'put ''YXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5saXN0KGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuaHRtbChsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEu''@;'; put 'put ''cHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmRlZihsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGg9YVthLmxlbmd0aC0xXSwhaHx8InBhcmFncmFwaCIhPT1oLnR5cGUmJiJ0ZXh0IiE9PWgudHlwZT90aGlzLnRva2Vucy5saW5rc1tkLnRhZ118fCh0aGlzLnRv''@;'; put 'put ''a2Vucy5saW5rc1tkLnRhZ109e2hyZWY6ZC5ocmVmLHRpdGxlOmQudGl0bGV9KTooaC5yYXcrPSJcbiIrZC5yYXcsaC50ZXh0Kz0iXG4iK2QucmF3LHRoaXMuaW5saW5lUXVldWVbdGhpcy5pbmxpbmVRdWV1ZS5sZW5ndGgtMV0uc3JjPWgudGV4dCk7Y29udGludWV9aWYoZD10aGlzLnRva2Vu''@;'; put 'put ''aXplci50YWJsZShsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmxoZWFkaW5nKGwpKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGY9bCx0aGlzLm9wdGlvbnMuZXh0''@;'; put 'put ''ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRCbG9jayl7bGV0IE09MS8wO2NvbnN0IEQ9bC5zbGljZSgxKTtsZXQgWjt0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5zdGFydEJsb2NrLmZvckVhY2goZnVuY3Rpb24obmUpe1o9bmUuY2FsbCh7bGV4ZXI6dGhpc30sRCksIm51''@;'; put 'put ''bWJlciI9PXR5cGVvZiBaJiZaPj0wJiYoTT1NYXRoLm1pbihNLFopKX0pLE08MS8wJiZNPj0wJiYoZj1sLnN1YnN0cmluZygwLE0rMSkpfWlmKHRoaXMuc3RhdGUudG9wJiYoZD10aGlzLnRva2VuaXplci5wYXJhZ3JhcGgoZikpKXtoPWFbYS5sZW5ndGgtMV0sdiYmInBhcmFncmFwaCI9PT1o''@;'; put 'put ''LnR5cGU/KGgucmF3Kz0iXG4iK2QucmF3LGgudGV4dCs9IlxuIitkLnRleHQsdGhpcy5pbmxpbmVRdWV1ZS5wb3AoKSx0aGlzLmlubGluZVF1ZXVlW3RoaXMuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1oLnRleHQpOmEucHVzaChkKSx2PWYubGVuZ3RoIT09bC5sZW5ndGgsbD1sLnN1YnN0''@;'; put 'put ''cmluZyhkLnJhdy5sZW5ndGgpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIudGV4dChsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGg9YVthLmxlbmd0aC0xXSxoJiYidGV4dCI9PT1oLnR5cGU/KGgucmF3Kz0iXG4iK2QucmF3LGgudGV4dCs9IlxuIitkLnRleHQsdGhpcy5p''@;'; put 'put ''bmxpbmVRdWV1ZS5wb3AoKSx0aGlzLmlubGluZVF1ZXVlW3RoaXMuaW5saW5lUXVldWUubGVuZ3RoLTFdLnNyYz1oLnRleHQpOmEucHVzaChkKTtjb250aW51ZX1pZihsKXtjb25zdCBNPSJJbmZpbml0ZSBsb29wIG9uIGJ5dGU6ICIrbC5jaGFyQ29kZUF0KDApO2lmKHRoaXMub3B0aW9ucy5z''@;'; put 'put ''aWxlbnQpe2NvbnNvbGUuZXJyb3IoTSk7YnJlYWt9dGhyb3cgbmV3IEVycm9yKE0pfX1yZXR1cm4gdGhpcy5zdGF0ZS50b3A9ITAsYX1pbmxpbmUobCxhPVtdKXtyZXR1cm4gdGhpcy5pbmxpbmVRdWV1ZS5wdXNoKHtzcmM6bCx0b2tlbnM6YX0pLGF9aW5saW5lVG9rZW5zKGwsYT1bXSl7bGV0''@;'; put 'put ''IGQsaCxmLE0sRCxaLHY9bDtpZih0aGlzLnRva2Vucy5saW5rcyl7Y29uc3QgbmU9T2JqZWN0LmtleXModGhpcy50b2tlbnMubGlua3MpO2lmKG5lLmxlbmd0aD4wKWZvcig7bnVsbCE9KE09dGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLnJlZmxpbmtTZWFyY2guZXhlYyh2KSk7KW5lLmlu''@;'; put 'put ''Y2x1ZGVzKE1bMF0uc2xpY2UoTVswXS5sYXN0SW5kZXhPZigiWyIpKzEsLTEpKSYmKHY9di5zbGljZSgwLE0uaW5kZXgpKyJbIisiYSIucmVwZWF0KE1bMF0ubGVuZ3RoLTIpKyJdIit2LnNsaWNlKHRoaXMudG9rZW5pemVyLnJ1bGVzLmlubGluZS5yZWZsaW5rU2VhcmNoLmxhc3RJbmRleCkp''@;'; put 'put ''fWZvcig7bnVsbCE9KE09dGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmJsb2NrU2tpcC5leGVjKHYpKTspdj12LnNsaWNlKDAsTS5pbmRleCkrIlsiKyJhIi5yZXBlYXQoTVswXS5sZW5ndGgtMikrIl0iK3Yuc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmJsb2NrU2tpcC5s''@;'; put 'put ''YXN0SW5kZXgpO2Zvcig7bnVsbCE9KE09dGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLmV4ZWModikpOyl2PXYuc2xpY2UoMCxNLmluZGV4KSsiKysiK3Yuc2xpY2UodGhpcy50b2tlbml6ZXIucnVsZXMuaW5saW5lLmFueVB1bmN0dWF0aW9uLmxhc3RJbmRleCk7''@;'; put 'put ''Zm9yKDtsOylpZihEfHwoWj0iIiksRD0hMSwhKHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5pbmxpbmUmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLmlubGluZS5zb21lKG5lPT4hIShkPW5lLmNhbGwoe2xleGVyOnRoaXN9LGwsYSkpJiYobD1sLnN1''@;'; put 'put ''YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKSwhMCkpKSl7aWYoZD10aGlzLnRva2VuaXplci5lc2NhcGUobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci50YWcobCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcu''@;'; put 'put ''bGVuZ3RoKSxoPWFbYS5sZW5ndGgtMV0saCYmInRleHQiPT09ZC50eXBlJiYidGV4dCI9PT1oLnR5cGU/KGgucmF3Kz1kLnJhdyxoLnRleHQrPWQudGV4dCk6YS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIubGluayhsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgp''@;'; put 'put ''LGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLnJlZmxpbmsobCx0aGlzLnRva2Vucy5saW5rcykpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSxoPWFbYS5sZW5ndGgtMV0saCYmInRleHQiPT09ZC50eXBlJiYidGV4dCI9PT1oLnR5cGU/KGgucmF3Kz1kLnJhdyxo''@;'; put 'put ''LnRleHQrPWQudGV4dCk6YS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuZW1TdHJvbmcobCx2LFopKXtsPWwuc3Vic3RyaW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGQ9dGhpcy50b2tlbml6ZXIuY29kZXNwYW4obCkpe2w9bC5zdWJzdHJpbmco''@;'; put 'put ''ZC5yYXcubGVuZ3RoKSxhLnB1c2goZCk7Y29udGludWV9aWYoZD10aGlzLnRva2VuaXplci5icihsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmRlbChsKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEu''@;'; put 'put ''cHVzaChkKTtjb250aW51ZX1pZihkPXRoaXMudG9rZW5pemVyLmF1dG9saW5rKGwsVDZlKSl7bD1sLnN1YnN0cmluZyhkLnJhdy5sZW5ndGgpLGEucHVzaChkKTtjb250aW51ZX1pZighdGhpcy5zdGF0ZS5pbkxpbmsmJihkPXRoaXMudG9rZW5pemVyLnVybChsLFQ2ZSkpKXtsPWwuc3Vic3Ry''@;'; put 'put ''aW5nKGQucmF3Lmxlbmd0aCksYS5wdXNoKGQpO2NvbnRpbnVlfWlmKGY9bCx0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMuc3RhcnRJbmxpbmUpe2xldCBuZT0xLzA7Y29uc3QgY2U9bC5zbGljZSgxKTtsZXQgYmU7dGhpcy5vcHRpb25zLmV4dGVuc2lv''@;'; put 'put ''bnMuc3RhcnRJbmxpbmUuZm9yRWFjaChmdW5jdGlvbihFZSl7YmU9RWUuY2FsbCh7bGV4ZXI6dGhpc30sY2UpLCJudW1iZXIiPT10eXBlb2YgYmUmJmJlPj0wJiYobmU9TWF0aC5taW4obmUsYmUpKX0pLG5lPDEvMCYmbmU+PTAmJihmPWwuc3Vic3RyaW5nKDAsbmUrMSkpfWlmKGQ9dGhpcy50''@;'; put 'put ''b2tlbml6ZXIuaW5saW5lVGV4dChmLGp2dCkpe2w9bC5zdWJzdHJpbmcoZC5yYXcubGVuZ3RoKSwiXyIhPT1kLnJhdy5zbGljZSgtMSkmJihaPWQucmF3LnNsaWNlKC0xKSksRD0hMCxoPWFbYS5sZW5ndGgtMV0saCYmInRleHQiPT09aC50eXBlPyhoLnJhdys9ZC5yYXcsaC50ZXh0Kz1kLnRl''@;'; put 'put ''eHQpOmEucHVzaChkKTtjb250aW51ZX1pZihsKXtjb25zdCBuZT0iSW5maW5pdGUgbG9vcCBvbiBieXRlOiAiK2wuY2hhckNvZGVBdCgwKTtpZih0aGlzLm9wdGlvbnMuc2lsZW50KXtjb25zb2xlLmVycm9yKG5lKTticmVha310aHJvdyBuZXcgRXJyb3IobmUpfX1yZXR1cm4gYX19Y2xhc3Mg''@;'; put 'put ''UUh7Y29uc3RydWN0b3IobCl7dGhpcy5vcHRpb25zPWx8fF82fWNvZGUobCxhLGQpe2NvbnN0IGg9KGF8fCIiKS5tYXRjaCgvXFMqLylbMF07aWYodGhpcy5vcHRpb25zLmhpZ2hsaWdodCl7Y29uc3QgZj10aGlzLm9wdGlvbnMuaGlnaGxpZ2h0KGwsaCk7bnVsbCE9ZiYmZiE9PWwmJihkPSEw''@;'; put 'put ''LGw9Zil9cmV0dXJuIGw9bC5yZXBsYWNlKC9cbiQvLCIiKSsiXG4iLGg/JzxwcmU+PGNvZGUgY2xhc3M9IicrdGhpcy5vcHRpb25zLmxhbmdQcmVmaXgrRTEoaCkrJyI+JysoZD9sOkUxKGwsITApKSsiPC9jb2RlPjwvcHJlPlxuIjoiPHByZT48Y29kZT4iKyhkP2w6RTEobCwhMCkpKyI8L2Nv''@;'; put 'put ''ZGU+PC9wcmU+XG4ifWJsb2NrcXVvdGUobCl7cmV0dXJuYDxibG9ja3F1b3RlPlxuJHtsfTwvYmxvY2txdW90ZT5cbmB9aHRtbChsLGEpe3JldHVybiBsfWhlYWRpbmcobCxhLGQsaCl7cmV0dXJuIHRoaXMub3B0aW9ucy5oZWFkZXJJZHM/YDxoJHthfSBpZD0iJHt0aGlzLm9wdGlvbnMuaGVh''@;'; put 'put ''ZGVyUHJlZml4K2guc2x1ZyhkKX0iPiR7bH08L2gke2F9PlxuYDpgPGgke2F9PiR7bH08L2gke2F9PlxuYH1ocigpe3JldHVybiB0aGlzLm9wdGlvbnMueGh0bWw/Ijxoci8+XG4iOiI8aHI+XG4ifWxpc3QobCxhLGQpe2NvbnN0IGg9YT8ib2wiOiJ1bCI7cmV0dXJuIjwiK2grKGEmJjEhPT1k''@;'; put 'put ''Pycgc3RhcnQ9IicrZCsnIic6IiIpKyI+XG4iK2wrIjwvIitoKyI+XG4ifWxpc3RpdGVtKGwpe3JldHVybmA8bGk+JHtsfTwvbGk+XG5gfWNoZWNrYm94KGwpe3JldHVybiI8aW5wdXQgIisobD8nY2hlY2tlZD0iIiAnOiIiKSsnZGlzYWJsZWQ9IiIgdHlwZT0iY2hlY2tib3giJysodGhpcy5v''@;'; put 'put ''cHRpb25zLnhodG1sPyIgLyI6IiIpKyI+ICJ9cGFyYWdyYXBoKGwpe3JldHVybmA8cD4ke2x9PC9wPlxuYH10YWJsZShsLGEpe3JldHVybiBhJiYoYT1gPHRib2R5PiR7YX08L3Rib2R5PmApLCI8dGFibGU+XG48dGhlYWQ+XG4iK2wrIjwvdGhlYWQ+XG4iK2ErIjwvdGFibGU+XG4ifXRhYmxl''@;'; put 'put ''cm93KGwpe3JldHVybmA8dHI+XG4ke2x9PC90cj5cbmB9dGFibGVjZWxsKGwsYSl7Y29uc3QgZD1hLmhlYWRlcj8idGgiOiJ0ZCI7cmV0dXJuKGEuYWxpZ24/YDwke2R9IGFsaWduPSIke2EuYWxpZ259Ij5gOmA8JHtkfT5gKStsK2A8LyR7ZH0+XG5gfXN0cm9uZyhsKXtyZXR1cm5gPHN0cm9u''@;'; put 'put ''Zz4ke2x9PC9zdHJvbmc+YH1lbShsKXtyZXR1cm5gPGVtPiR7bH08L2VtPmB9Y29kZXNwYW4obCl7cmV0dXJuYDxjb2RlPiR7bH08L2NvZGU+YH1icigpe3JldHVybiB0aGlzLm9wdGlvbnMueGh0bWw/Ijxici8+IjoiPGJyPiJ9ZGVsKGwpe3JldHVybmA8ZGVsPiR7bH08L2RlbD5gfWxpbmso''@;'; put 'put ''bCxhLGQpe2lmKG51bGw9PT0obD1NNmUodGhpcy5vcHRpb25zLnNhbml0aXplLHRoaXMub3B0aW9ucy5iYXNlVXJsLGwpKSlyZXR1cm4gZDtsZXQgaD0nPGEgaHJlZj0iJytsKyciJztyZXR1cm4gYSYmKGgrPScgdGl0bGU9IicrYSsnIicpLGgrPSI+IitkKyI8L2E+IixofWltYWdlKGwsYSxk''@;'; put 'put ''KXtpZihudWxsPT09KGw9TTZlKHRoaXMub3B0aW9ucy5zYW5pdGl6ZSx0aGlzLm9wdGlvbnMuYmFzZVVybCxsKSkpcmV0dXJuIGQ7bGV0IGg9YDxpbWcgc3JjPSIke2x9IiBhbHQ9IiR7ZH0iYDtyZXR1cm4gYSYmKGgrPWAgdGl0bGU9IiR7YX0iYCksaCs9dGhpcy5vcHRpb25zLnhodG1sPyIv''@;'; put 'put ''PiI6Ij4iLGh9dGV4dChsKXtyZXR1cm4gbH19Y2xhc3MgWWVle3N0cm9uZyhsKXtyZXR1cm4gbH1lbShsKXtyZXR1cm4gbH1jb2Rlc3BhbihsKXtyZXR1cm4gbH1kZWwobCl7cmV0dXJuIGx9aHRtbChsKXtyZXR1cm4gbH10ZXh0KGwpe3JldHVybiBsfWxpbmsobCxhLGQpe3JldHVybiIiK2R9''@;'; put 'put ''aW1hZ2UobCxhLGQpe3JldHVybiIiK2R9YnIoKXtyZXR1cm4iIn19Y2xhc3MgR2Vle2NvbnN0cnVjdG9yKCl7dGhpcy5zZWVuPXt9fXNlcmlhbGl6ZShsKXtyZXR1cm4gbC50b0xvd2VyQ2FzZSgpLnRyaW0oKS5yZXBsYWNlKC88WyFcL2Etel0uKj8+L2dpLCIiKS5yZXBsYWNlKC9bXHUyMDAw''@;'; put 'put ''LVx1MjA2Rlx1MkUwMC1cdTJFN0ZcXCchIiMkJSYoKSorLC4vOjs8PT4/QFtcXV5ge3x9fl0vZywiIikucmVwbGFjZSgvXHMvZywiLSIpfWdldE5leHRTYWZlU2x1ZyhsLGEpe2xldCBkPWwsaD0wO2lmKHRoaXMuc2Vlbi5oYXNPd25Qcm9wZXJ0eShkKSl7aD10aGlzLnNlZW5bbF07ZG97aCsr''@;'; put 'put ''LGQ9bCsiLSIraH13aGlsZSh0aGlzLnNlZW4uaGFzT3duUHJvcGVydHkoZCkpfXJldHVybiBhfHwodGhpcy5zZWVuW2xdPWgsdGhpcy5zZWVuW2RdPTApLGR9c2x1ZyhsLGE9e30pe2NvbnN0IGQ9dGhpcy5zZXJpYWxpemUobCk7cmV0dXJuIHRoaXMuZ2V0TmV4dFNhZmVTbHVnKGQsYS5kcnly''@;'; put 'put ''dW4pfX1jbGFzcyByNHtjb25zdHJ1Y3RvcihsKXt0aGlzLm9wdGlvbnM9bHx8XzYsdGhpcy5vcHRpb25zLnJlbmRlcmVyPXRoaXMub3B0aW9ucy5yZW5kZXJlcnx8bmV3IFFILHRoaXMucmVuZGVyZXI9dGhpcy5vcHRpb25zLnJlbmRlcmVyLHRoaXMucmVuZGVyZXIub3B0aW9ucz10aGlzLm9w''@;'; put 'put ''dGlvbnMsdGhpcy50ZXh0UmVuZGVyZXI9bmV3IFllZSx0aGlzLnNsdWdnZXI9bmV3IEdlZX1zdGF0aWMgcGFyc2UobCxhKXtyZXR1cm4gbmV3IHI0KGEpLnBhcnNlKGwpfXN0YXRpYyBwYXJzZUlubGluZShsLGEpe3JldHVybiBuZXcgcjQoYSkucGFyc2VJbmxpbmUobCl9cGFyc2UobCxhPSEw''@;'; put 'put ''KXtsZXQgaCxmLHYsTSxELFosbmUsY2UsYmUsRWUsQmUscWUsbnQsbHQsbXQsSnQseW4sQ24sdG4sZD0iIjtjb25zdCB4bj1sLmxlbmd0aDtmb3IoaD0wO2g8eG47aCsrKWlmKEVlPWxbaF0sdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMmJnRoaXMub3B0aW9ucy5leHRlbnNpb25zLnJlbmRlcmVy''@;'; put 'put ''cyYmdGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW0VlLnR5cGVdJiYodG49dGhpcy5vcHRpb25zLmV4dGVuc2lvbnMucmVuZGVyZXJzW0VlLnR5cGVdLmNhbGwoe3BhcnNlcjp0aGlzfSxFZSksITEhPT10bnx8IVsic3BhY2UiLCJociIsImhlYWRpbmciLCJjb2RlIiwidGFibGUi''@;'; put 'put ''LCJibG9ja3F1b3RlIiwibGlzdCIsImh0bWwiLCJwYXJhZ3JhcGgiLCJ0ZXh0Il0uaW5jbHVkZXMoRWUudHlwZSkpKWQrPXRufHwiIjtlbHNlIHN3aXRjaChFZS50eXBlKXtjYXNlInNwYWNlIjpjb250aW51ZTtjYXNlImhyIjpkKz10aGlzLnJlbmRlcmVyLmhyKCk7Y29udGludWU7Y2FzZSJo''@;'; put 'put ''ZWFkaW5nIjpkKz10aGlzLnJlbmRlcmVyLmhlYWRpbmcodGhpcy5wYXJzZUlubGluZShFZS50b2tlbnMpLEVlLmRlcHRoLFM2ZSh0aGlzLnBhcnNlSW5saW5lKEVlLnRva2Vucyx0aGlzLnRleHRSZW5kZXJlcikpLHRoaXMuc2x1Z2dlcik7Y29udGludWU7Y2FzZSJjb2RlIjpkKz10aGlzLnJl''@;'; put 'put ''bmRlcmVyLmNvZGUoRWUudGV4dCxFZS5sYW5nLEVlLmVzY2FwZWQpO2NvbnRpbnVlO2Nhc2UidGFibGUiOmZvcihjZT0iIixuZT0iIixNPUVlLmhlYWRlci5sZW5ndGgsZj0wO2Y8TTtmKyspbmUrPXRoaXMucmVuZGVyZXIudGFibGVjZWxsKHRoaXMucGFyc2VJbmxpbmUoRWUuaGVhZGVyW2Zd''@;'; put 'put ''LnRva2Vucykse2hlYWRlcjohMCxhbGlnbjpFZS5hbGlnbltmXX0pO2ZvcihjZSs9dGhpcy5yZW5kZXJlci50YWJsZXJvdyhuZSksYmU9IiIsTT1FZS5yb3dzLmxlbmd0aCxmPTA7ZjxNO2YrKyl7Zm9yKFo9RWUucm93c1tmXSxuZT0iIixEPVoubGVuZ3RoLHY9MDt2PEQ7disrKW5lKz10aGlz''@;'; put 'put ''LnJlbmRlcmVyLnRhYmxlY2VsbCh0aGlzLnBhcnNlSW5saW5lKFpbdl0udG9rZW5zKSx7aGVhZGVyOiExLGFsaWduOkVlLmFsaWduW3ZdfSk7YmUrPXRoaXMucmVuZGVyZXIudGFibGVyb3cobmUpfWQrPXRoaXMucmVuZGVyZXIudGFibGUoY2UsYmUpO2NvbnRpbnVlO2Nhc2UiYmxvY2txdW90''@;'; put 'put ''ZSI6YmU9dGhpcy5wYXJzZShFZS50b2tlbnMpLGQrPXRoaXMucmVuZGVyZXIuYmxvY2txdW90ZShiZSk7Y29udGludWU7Y2FzZSJsaXN0Ijpmb3IoQmU9RWUub3JkZXJlZCxxZT1FZS5zdGFydCxudD1FZS5sb29zZSxNPUVlLml0ZW1zLmxlbmd0aCxiZT0iIixmPTA7ZjxNO2YrKyltdD1FZS5p''@;'; put 'put ''dGVtc1tmXSxKdD1tdC5jaGVja2VkLHluPW10LnRhc2ssbHQ9IiIsbXQudGFzayYmKENuPXRoaXMucmVuZGVyZXIuY2hlY2tib3goSnQpLG50P210LnRva2Vucy5sZW5ndGg+MCYmInBhcmFncmFwaCI9PT1tdC50b2tlbnNbMF0udHlwZT8obXQudG9rZW5zWzBdLnRleHQ9Q24rIiAiK210LnRv''@;'; put 'put ''a2Vuc1swXS50ZXh0LG10LnRva2Vuc1swXS50b2tlbnMmJm10LnRva2Vuc1swXS50b2tlbnMubGVuZ3RoPjAmJiJ0ZXh0Ij09PW10LnRva2Vuc1swXS50b2tlbnNbMF0udHlwZSYmKG10LnRva2Vuc1swXS50b2tlbnNbMF0udGV4dD1DbisiICIrbXQudG9rZW5zWzBdLnRva2Vuc1swXS50ZXh0''@;'; put 'put ''KSk6bXQudG9rZW5zLnVuc2hpZnQoe3R5cGU6InRleHQiLHRleHQ6Q259KTpsdCs9Q24pLGx0Kz10aGlzLnBhcnNlKG10LnRva2VucyxudCksYmUrPXRoaXMucmVuZGVyZXIubGlzdGl0ZW0obHQseW4sSnQpO2QrPXRoaXMucmVuZGVyZXIubGlzdChiZSxCZSxxZSk7Y29udGludWU7Y2FzZSJo''@;'; put 'put ''dG1sIjpkKz10aGlzLnJlbmRlcmVyLmh0bWwoRWUudGV4dCxFZS5ibG9jayk7Y29udGludWU7Y2FzZSJwYXJhZ3JhcGgiOmQrPXRoaXMucmVuZGVyZXIucGFyYWdyYXBoKHRoaXMucGFyc2VJbmxpbmUoRWUudG9rZW5zKSk7Y29udGludWU7Y2FzZSJ0ZXh0Ijpmb3IoYmU9RWUudG9rZW5zP3Ro''@;'; put 'put ''aXMucGFyc2VJbmxpbmUoRWUudG9rZW5zKTpFZS50ZXh0O2grMTx4biYmInRleHQiPT09bFtoKzFdLnR5cGU7KUVlPWxbKytoXSxiZSs9IlxuIisoRWUudG9rZW5zP3RoaXMucGFyc2VJbmxpbmUoRWUudG9rZW5zKTpFZS50ZXh0KTtkKz1hP3RoaXMucmVuZGVyZXIucGFyYWdyYXBoKGJlKTpi''@;'; put 'put ''ZTtjb250aW51ZTtkZWZhdWx0Ontjb25zdCBRbj0nVG9rZW4gd2l0aCAiJytFZS50eXBlKyciIHR5cGUgd2FzIG5vdCBmb3VuZC4nO2lmKHRoaXMub3B0aW9ucy5zaWxlbnQpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcihRbik7dGhyb3cgbmV3IEVycm9yKFFuKX19cmV0dXJuIGR9cGFyc2VJ''@;'; put 'put ''bmxpbmUobCxhKXthPWF8fHRoaXMucmVuZGVyZXI7bGV0IGgsZix2LGQ9IiI7Y29uc3QgTT1sLmxlbmd0aDtmb3IoaD0wO2g8TTtoKyspaWYoZj1sW2hdLHRoaXMub3B0aW9ucy5leHRlbnNpb25zJiZ0aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnMmJnRoaXMub3B0aW9ucy5leHRl''@;'; put 'put ''bnNpb25zLnJlbmRlcmVyc1tmLnR5cGVdJiYodj10aGlzLm9wdGlvbnMuZXh0ZW5zaW9ucy5yZW5kZXJlcnNbZi50eXBlXS5jYWxsKHtwYXJzZXI6dGhpc30sZiksITEhPT12fHwhWyJlc2NhcGUiLCJodG1sIiwibGluayIsImltYWdlIiwic3Ryb25nIiwiZW0iLCJjb2Rlc3BhbiIsImJyIiwi''@;'; put 'put ''ZGVsIiwidGV4dCJdLmluY2x1ZGVzKGYudHlwZSkpKWQrPXZ8fCIiO2Vsc2Ugc3dpdGNoKGYudHlwZSl7Y2FzZSJlc2NhcGUiOmNhc2UidGV4dCI6ZCs9YS50ZXh0KGYudGV4dCk7YnJlYWs7Y2FzZSJodG1sIjpkKz1hLmh0bWwoZi50ZXh0KTticmVhaztjYXNlImxpbmsiOmQrPWEubGluayhm''@;'; put 'put ''LmhyZWYsZi50aXRsZSx0aGlzLnBhcnNlSW5saW5lKGYudG9rZW5zLGEpKTticmVhaztjYXNlImltYWdlIjpkKz1hLmltYWdlKGYuaHJlZixmLnRpdGxlLGYudGV4dCk7YnJlYWs7Y2FzZSJzdHJvbmciOmQrPWEuc3Ryb25nKHRoaXMucGFyc2VJbmxpbmUoZi50b2tlbnMsYSkpO2JyZWFrO2Nh''@;'; put 'put ''c2UiZW0iOmQrPWEuZW0odGhpcy5wYXJzZUlubGluZShmLnRva2VucyxhKSk7YnJlYWs7Y2FzZSJjb2Rlc3BhbiI6ZCs9YS5jb2Rlc3BhbihmLnRleHQpO2JyZWFrO2Nhc2UiYnIiOmQrPWEuYnIoKTticmVhaztjYXNlImRlbCI6ZCs9YS5kZWwodGhpcy5wYXJzZUlubGluZShmLnRva2Vucyxh''@;'; put 'put ''KSk7YnJlYWs7ZGVmYXVsdDp7Y29uc3QgRD0nVG9rZW4gd2l0aCAiJytmLnR5cGUrJyIgdHlwZSB3YXMgbm90IGZvdW5kLic7aWYodGhpcy5vcHRpb25zLnNpbGVudClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKEQpO3Rocm93IG5ldyBFcnJvcihEKX19cmV0dXJuIGR9fWNsYXNzIGVOe2Nv''@;'; put 'put ''bnN0cnVjdG9yKGwpe3RoaXMub3B0aW9ucz1sfHxfNn1zdGF0aWMgcGFzc1Rocm91Z2hIb29rcz1uZXcgU2V0KFsicHJlcHJvY2VzcyIsInBvc3Rwcm9jZXNzIl0pO3ByZXByb2Nlc3MobCl7cmV0dXJuIGx9cG9zdHByb2Nlc3MobCl7cmV0dXJuIGx9fWNvbnN0IFU5PW5ldyBjbGFzcyB6dnR7''@;'; put 'put ''ZGVmYXVsdHM9e2FzeW5jOiExLGJhc2VVcmw6bnVsbCxicmVha3M6ITEsZXh0ZW5zaW9uczpudWxsLGdmbTohMCxoZWFkZXJJZHM6ITAsaGVhZGVyUHJlZml4OiIiLGhpZ2hsaWdodDpudWxsLGhvb2tzOm51bGwsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixtYW5nbGU6ITAscGVkYW50aWM6ITEs''@;'; put 'put ''cmVuZGVyZXI6bnVsbCxzYW5pdGl6ZTohMSxzYW5pdGl6ZXI6bnVsbCxzaWxlbnQ6ITEsc21hcnR5cGFudHM6ITEsdG9rZW5pemVyOm51bGwsd2Fsa1Rva2VuczpudWxsLHhodG1sOiExfTtvcHRpb25zPXRoaXMuc2V0T3B0aW9ucztwYXJzZT10aGlzLiNlKG40LmxleCxyNC5wYXJzZSk7cGFy''@;'; put 'put ''c2VJbmxpbmU9dGhpcy4jZShuNC5sZXhJbmxpbmUscjQucGFyc2VJbmxpbmUpO1BhcnNlcj1yNDtwYXJzZXI9cjQucGFyc2U7UmVuZGVyZXI9UUg7VGV4dFJlbmRlcmVyPVllZTtMZXhlcj1uNDtsZXhlcj1uNC5sZXg7VG9rZW5pemVyPUpIO1NsdWdnZXI9R2VlO0hvb2tzPWVOO2NvbnN0cnVj''@;'; put 'put ''dG9yKC4uLmwpe3RoaXMudXNlKC4uLmwpfXdhbGtUb2tlbnMobCxhKXtsZXQgZD1bXTtmb3IoY29uc3QgaCBvZiBsKXN3aXRjaChkPWQuY29uY2F0KGEuY2FsbCh0aGlzLGgpKSxoLnR5cGUpe2Nhc2UidGFibGUiOmZvcihjb25zdCBmIG9mIGguaGVhZGVyKWQ9ZC5jb25jYXQodGhpcy53YWxr''@;'; put 'put ''VG9rZW5zKGYudG9rZW5zLGEpKTtmb3IoY29uc3QgZiBvZiBoLnJvd3MpZm9yKGNvbnN0IHYgb2YgZilkPWQuY29uY2F0KHRoaXMud2Fsa1Rva2Vucyh2LnRva2VucyxhKSk7YnJlYWs7Y2FzZSJsaXN0IjpkPWQuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhoLml0ZW1zLGEpKTticmVhaztkZWZh''@;'; put 'put ''dWx0OnRoaXMuZGVmYXVsdHMuZXh0ZW5zaW9ucyYmdGhpcy5kZWZhdWx0cy5leHRlbnNpb25zLmNoaWxkVG9rZW5zJiZ0aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnMuY2hpbGRUb2tlbnNbaC50eXBlXT90aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnMuY2hpbGRUb2tlbnNbaC50eXBlXS5mb3JFYWNo''@;'; put 'put ''KGY9PntkPWQuY29uY2F0KHRoaXMud2Fsa1Rva2VucyhoW2ZdLGEpKX0pOmgudG9rZW5zJiYoZD1kLmNvbmNhdCh0aGlzLndhbGtUb2tlbnMoaC50b2tlbnMsYSkpKX1yZXR1cm4gZH11c2UoLi4ubCl7Y29uc3QgYT10aGlzLmRlZmF1bHRzLmV4dGVuc2lvbnN8fHtyZW5kZXJlcnM6e30sY2hp''@;'; put 'put ''bGRUb2tlbnM6e319O3JldHVybiBsLmZvckVhY2goZD0+e2NvbnN0IGg9ey4uLmR9O2lmKGguYXN5bmM9dGhpcy5kZWZhdWx0cy5hc3luY3x8aC5hc3luY3x8ITEsZC5leHRlbnNpb25zJiYoZC5leHRlbnNpb25zLmZvckVhY2goZj0+e2lmKCFmLm5hbWUpdGhyb3cgbmV3IEVycm9yKCJleHRl''@;'; put 'put ''bnNpb24gbmFtZSByZXF1aXJlZCIpO2lmKGYucmVuZGVyZXIpe2NvbnN0IHY9YS5yZW5kZXJlcnNbZi5uYW1lXTthLnJlbmRlcmVyc1tmLm5hbWVdPXY/ZnVuY3Rpb24oLi4uTSl7bGV0IEQ9Zi5yZW5kZXJlci5hcHBseSh0aGlzLE0pO3JldHVybiExPT09RCYmKEQ9di5hcHBseSh0aGlzLE0p''@;'; put 'put ''KSxEfTpmLnJlbmRlcmVyfWlmKGYudG9rZW5pemVyKXtpZighZi5sZXZlbHx8ImJsb2NrIiE9PWYubGV2ZWwmJiJpbmxpbmUiIT09Zi5sZXZlbCl0aHJvdyBuZXcgRXJyb3IoImV4dGVuc2lvbiBsZXZlbCBtdXN0IGJlICdibG9jaycgb3IgJ2lubGluZSciKTthW2YubGV2ZWxdP2FbZi5sZXZl''@;'; put 'put ''bF0udW5zaGlmdChmLnRva2VuaXplcik6YVtmLmxldmVsXT1bZi50b2tlbml6ZXJdLGYuc3RhcnQmJigiYmxvY2siPT09Zi5sZXZlbD9hLnN0YXJ0QmxvY2s/YS5zdGFydEJsb2NrLnB1c2goZi5zdGFydCk6YS5zdGFydEJsb2NrPVtmLnN0YXJ0XToiaW5saW5lIj09PWYubGV2ZWwmJihhLnN0''@;'; put 'put ''YXJ0SW5saW5lP2Euc3RhcnRJbmxpbmUucHVzaChmLnN0YXJ0KTphLnN0YXJ0SW5saW5lPVtmLnN0YXJ0XSkpfWYuY2hpbGRUb2tlbnMmJihhLmNoaWxkVG9rZW5zW2YubmFtZV09Zi5jaGlsZFRva2Vucyl9KSxoLmV4dGVuc2lvbnM9YSksZC5yZW5kZXJlcil7Y29uc3QgZj10aGlzLmRlZmF1''@;'; put 'put ''bHRzLnJlbmRlcmVyfHxuZXcgUUgodGhpcy5kZWZhdWx0cyk7Zm9yKGNvbnN0IHYgaW4gZC5yZW5kZXJlcil7Y29uc3QgTT1mW3ZdO2Zbdl09KC4uLkQpPT57bGV0IFo9ZC5yZW5kZXJlclt2XS5hcHBseShmLEQpO3JldHVybiExPT09WiYmKFo9TS5hcHBseShmLEQpKSxafX1oLnJlbmRlcmVy''@;'; put 'put ''PWZ9aWYoZC50b2tlbml6ZXIpe2NvbnN0IGY9dGhpcy5kZWZhdWx0cy50b2tlbml6ZXJ8fG5ldyBKSCh0aGlzLmRlZmF1bHRzKTtmb3IoY29uc3QgdiBpbiBkLnRva2VuaXplcil7Y29uc3QgTT1mW3ZdO2Zbdl09KC4uLkQpPT57bGV0IFo9ZC50b2tlbml6ZXJbdl0uYXBwbHkoZixEKTtyZXR1''@;'; put 'put ''cm4hMT09PVomJihaPU0uYXBwbHkoZixEKSksWn19aC50b2tlbml6ZXI9Zn1pZihkLmhvb2tzKXtjb25zdCBmPXRoaXMuZGVmYXVsdHMuaG9va3N8fG5ldyBlTjtmb3IoY29uc3QgdiBpbiBkLmhvb2tzKXtjb25zdCBNPWZbdl07Zlt2XT1lTi5wYXNzVGhyb3VnaEhvb2tzLmhhcyh2KT9EPT57''@;'; put 'put ''aWYodGhpcy5kZWZhdWx0cy5hc3luYylyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGQuaG9va3Nbdl0uY2FsbChmLEQpKS50aGVuKG5lPT5NLmNhbGwoZixuZSkpO2NvbnN0IFo9ZC5ob29rc1t2XS5jYWxsKGYsRCk7cmV0dXJuIE0uY2FsbChmLFopfTooLi4uRCk9PntsZXQgWj1kLmhvb2tzW3Zd''@;'; put 'put ''LmFwcGx5KGYsRCk7cmV0dXJuITE9PT1aJiYoWj1NLmFwcGx5KGYsRCkpLFp9fWguaG9va3M9Zn1pZihkLndhbGtUb2tlbnMpe2NvbnN0IGY9dGhpcy5kZWZhdWx0cy53YWxrVG9rZW5zO2gud2Fsa1Rva2Vucz1mdW5jdGlvbih2KXtsZXQgTT1bXTtyZXR1cm4gTS5wdXNoKGQud2Fsa1Rva2Vu''@;'; put 'put ''cy5jYWxsKHRoaXMsdikpLGYmJihNPU0uY29uY2F0KGYuY2FsbCh0aGlzLHYpKSksTX19dGhpcy5kZWZhdWx0cz17Li4udGhpcy5kZWZhdWx0cywuLi5ofX0pLHRoaXN9c2V0T3B0aW9ucyhsKXtyZXR1cm4gdGhpcy5kZWZhdWx0cz17Li4udGhpcy5kZWZhdWx0cywuLi5sfSx0aGlzfSNlKGws''@;'; put 'put ''YSl7cmV0dXJuKGQsaCxmKT0+eyJmdW5jdGlvbiI9PXR5cGVvZiBoJiYoZj1oLGg9bnVsbCk7Y29uc3Qgdj17Li4uaH07aD17Li4udGhpcy5kZWZhdWx0cywuLi52fTtjb25zdCBNPXRoaXMuI3QoaC5zaWxlbnQsaC5hc3luYyxmKTtpZih0eXBlb2YgZD4idSJ8fG51bGw9PT1kKXJldHVybiBN''@;'; put 'put ''KG5ldyBFcnJvcigibWFya2VkKCk6IGlucHV0IHBhcmFtZXRlciBpcyB1bmRlZmluZWQgb3IgbnVsbCIpKTtpZigic3RyaW5nIiE9dHlwZW9mIGQpcmV0dXJuIE0obmV3IEVycm9yKCJtYXJrZWQoKTogaW5wdXQgcGFyYW1ldGVyIGlzIG9mIHR5cGUgIitPYmplY3QucHJvdG90eXBlLnRvU3Ry''@;'; put 'put ''aW5nLmNhbGwoZCkrIiwgc3RyaW5nIGV4cGVjdGVkIikpO2lmKGZ1bmN0aW9uIFZ2dChjLGwpeyFjfHxjLnNpbGVudHx8KGwmJmNvbnNvbGUud2FybigibWFya2VkKCk6IGNhbGxiYWNrIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3''@;'; put 'put ''aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gUmVhZCBtb3JlIGhlcmU6IGh0dHBzOi8vbWFya2VkLmpzLm9yZy91c2luZ19wcm8jYXN5bmMiKSwoYy5zYW5pdGl6ZXx8Yy5zYW5pdGl6ZXIpJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiBzYW5pdGl6ZSBhbmQgc2FuaXRpemVyIHBhcmFt''@;'; put 'put ''ZXRlcnMgYXJlIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAwLjcuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gUmVhZCBtb3JlIGhlcmU6IGh0dHBzOi8vbWFya2VkLmpzLm9yZy8jL1VTSU5HX0FEVkFOQ0VELm1kI29wdGlvbnMiKSwo''@;'; put 'put ''Yy5oaWdobGlnaHR8fCJsYW5ndWFnZS0iIT09Yy5sYW5nUHJlZml4KSYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogaGlnaGxpZ2h0IGFuZCBsYW5nUHJlZml4IHBhcmFtZXRlcnMgYXJlIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxs''@;'; put 'put ''IGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gSW5zdGVhZCB1c2UgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLWhpZ2hsaWdodC4iKSxjLm1hbmdsZSYmY29uc29sZS53YXJuKCJtYXJrZWQoKTogbWFuZ2xlIHBhcmFtZXRlciBpcyBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1''@;'; put 'put ''dCBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4gVG8gY2xlYXIgdGhpcyB3YXJuaW5nLCBpbnN0YWxsIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC1tYW5nbGUsIG9yIGRpc2FibGUgYnkgc2V0''@;'; put 'put ''dGluZyBge21hbmdsZTogZmFsc2V9YC4iKSxjLmJhc2VVcmwmJmNvbnNvbGUud2FybigibWFya2VkKCk6IGJhc2VVcmwgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgc2hvdWxkIG5vdCBiZSB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVy''@;'; put 'put ''ZS4gSW5zdGVhZCB1c2UgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvbWFya2VkLWJhc2UtdXJsLiIpLGMuc21hcnR5cGFudHMmJmNvbnNvbGUud2FybigibWFya2VkKCk6IHNtYXJ0eXBhbnRzIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNS4wLjAsIHNob3Vs''@;'; put 'put ''ZCBub3QgYmUgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuIEluc3RlYWQgdXNlIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC1zbWFydHlwYW50cy4iKSxjLnhodG1sJiZjb25zb2xlLndhcm4oIm1hcmtlZCgpOiB4aHRtbCBwYXJhbWV0ZXIgaXMg''@;'; put 'put ''ZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDUuMC4wLCBzaG91bGQgbm90IGJlIHVzZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLiBJbnN0ZWFkIHVzZSBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9tYXJrZWQteGh0bWwuIiksKGMuaGVhZGVySWRzfHxjLmhlYWRl''@;'; put 'put ''clByZWZpeCkmJmNvbnNvbGUud2FybigibWFya2VkKCk6IGhlYWRlcklkcyBhbmQgaGVhZGVyUHJlZml4IHBhcmFtZXRlcnMgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgYXJlIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA1LjAuMCwgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJl''@;'; put 'put ''LiBUbyBjbGVhciB0aGlzIHdhcm5pbmcsIGluc3RhbGwgIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL21hcmtlZC1nZm0taGVhZGluZy1pZCwgb3IgZGlzYWJsZSBieSBzZXR0aW5nIGB7aGVhZGVySWRzOiBmYWxzZX1gLiIpKX0oaCxmKSxoLmhvb2tzJiYoaC5ob29rcy5vcHRpb25z''@;'; put 'put ''PWgpLGYpe2NvbnN0IEQ9aC5oaWdobGlnaHQ7bGV0IFo7dHJ5e2guaG9va3MmJihkPWguaG9va3MucHJlcHJvY2VzcyhkKSksWj1sKGQsaCl9Y2F0Y2goYmUpe3JldHVybiBNKGJlKX1jb25zdCBuZT1iZT0+e2xldCBFZTtpZighYmUpdHJ5e2gud2Fsa1Rva2VucyYmdGhpcy53YWxrVG9rZW5z''@;'; put 'put ''KFosaC53YWxrVG9rZW5zKSxFZT1hKFosaCksaC5ob29rcyYmKEVlPWguaG9va3MucG9zdHByb2Nlc3MoRWUpKX1jYXRjaChCZSl7YmU9QmV9cmV0dXJuIGguaGlnaGxpZ2h0PUQsYmU/TShiZSk6ZihudWxsLEVlKX07aWYoIUR8fEQubGVuZ3RoPDN8fChkZWxldGUgaC5oaWdobGlnaHQsIVou''@;'; put 'put ''bGVuZ3RoKSlyZXR1cm4gbmUoKTtsZXQgY2U9MDtyZXR1cm4gdGhpcy53YWxrVG9rZW5zKFosYmU9PnsiY29kZSI9PT1iZS50eXBlJiYoY2UrKyxzZXRUaW1lb3V0KCgpPT57RChiZS50ZXh0LGJlLmxhbmcsKEVlLEJlKT0+e2lmKEVlKXJldHVybiBuZShFZSk7bnVsbCE9QmUmJkJlIT09YmUu''@;'; put 'put ''dGV4dCYmKGJlLnRleHQ9QmUsYmUuZXNjYXBlZD0hMCksY2UtLSwwPT09Y2UmJm5lKCl9KX0sMCkpfSksdm9pZCgwPT09Y2UmJm5lKCkpfWlmKGguYXN5bmMpcmV0dXJuIFByb21pc2UucmVzb2x2ZShoLmhvb2tzP2guaG9va3MucHJlcHJvY2VzcyhkKTpkKS50aGVuKEQ9PmwoRCxoKSkudGhl''@;'; put 'put ''bihEPT5oLndhbGtUb2tlbnM/UHJvbWlzZS5hbGwodGhpcy53YWxrVG9rZW5zKEQsaC53YWxrVG9rZW5zKSkudGhlbigoKT0+RCk6RCkudGhlbihEPT5hKEQsaCkpLnRoZW4oRD0+aC5ob29rcz9oLmhvb2tzLnBvc3Rwcm9jZXNzKEQpOkQpLmNhdGNoKE0pO3RyeXtoLmhvb2tzJiYoZD1oLmhv''@;'; put 'put ''b2tzLnByZXByb2Nlc3MoZCkpO2NvbnN0IEQ9bChkLGgpO2gud2Fsa1Rva2VucyYmdGhpcy53YWxrVG9rZW5zKEQsaC53YWxrVG9rZW5zKTtsZXQgWj1hKEQsaCk7cmV0dXJuIGguaG9va3MmJihaPWguaG9va3MucG9zdHByb2Nlc3MoWikpLFp9Y2F0Y2goRCl7cmV0dXJuIE0oRCl9fX0jdChs''@;'; put 'put ''LGEsZCl7cmV0dXJuIGg9PntpZihoLm1lc3NhZ2UrPSJcblBsZWFzZSByZXBvcnQgdGhpcyB0byBodHRwczovL2dpdGh1Yi5jb20vbWFya2VkanMvbWFya2VkLiIsbCl7Y29uc3QgZj0iPHA+QW4gZXJyb3Igb2NjdXJyZWQ6PC9wPjxwcmU+IitFMShoLm1lc3NhZ2UrIiIsITApKyI8L3ByZT4i''@;'; put 'put ''O3JldHVybiBhP1Byb21pc2UucmVzb2x2ZShmKTpkP3ZvaWQgZChudWxsLGYpOmZ9aWYoYSlyZXR1cm4gUHJvbWlzZS5yZWplY3QoaCk7aWYoIWQpdGhyb3cgaDtkKGgpfX19KF82KTtmdW5jdGlvbiBEbChjLGwsYSl7cmV0dXJuIFU5LnBhcnNlKGMsbCxhKX1EbC5vcHRpb25zPURsLnNldE9w''@;'; put 'put ''dGlvbnM9ZnVuY3Rpb24oYyl7cmV0dXJuIFU5LnNldE9wdGlvbnMoYykseTZlKERsLmRlZmF1bHRzPVU5LmRlZmF1bHRzKSxEbH0sRGwuZ2V0RGVmYXVsdHM9ZnVuY3Rpb24gV2VlKCl7cmV0dXJue2FzeW5jOiExLGJhc2VVcmw6bnVsbCxicmVha3M6ITEsZXh0ZW5zaW9uczpudWxsLGdmbToh''@;'; put 'put ''MCxoZWFkZXJJZHM6ITAsaGVhZGVyUHJlZml4OiIiLGhpZ2hsaWdodDpudWxsLGhvb2tzOm51bGwsbGFuZ1ByZWZpeDoibGFuZ3VhZ2UtIixtYW5nbGU6ITAscGVkYW50aWM6ITEscmVuZGVyZXI6bnVsbCxzYW5pdGl6ZTohMSxzYW5pdGl6ZXI6bnVsbCxzaWxlbnQ6ITEsc21hcnR5cGFudHM6''@;'; put 'put ''ITEsdG9rZW5pemVyOm51bGwsd2Fsa1Rva2VuczpudWxsLHhodG1sOiExfX0sRGwuZGVmYXVsdHM9XzYsRGwudXNlPWZ1bmN0aW9uKC4uLmMpe3JldHVybiBVOS51c2UoLi4uYykseTZlKERsLmRlZmF1bHRzPVU5LmRlZmF1bHRzKSxEbH0sRGwud2Fsa1Rva2Vucz1mdW5jdGlvbihjLGwpe3Jl''@;'; put 'put ''dHVybiBVOS53YWxrVG9rZW5zKGMsbCl9LERsLnBhcnNlSW5saW5lPVU5LnBhcnNlSW5saW5lLERsLlBhcnNlcj1yNCxEbC5wYXJzZXI9cjQucGFyc2UsRGwuUmVuZGVyZXI9UUgsRGwuVGV4dFJlbmRlcmVyPVllZSxEbC5MZXhlcj1uNCxEbC5sZXhlcj1uNC5sZXgsRGwuVG9rZW5pemVyPUpI''@;'; put 'put ''LERsLlNsdWdnZXI9R2VlLERsLkhvb2tzPWVOLERsLnBhcnNlPURsO2NvbnN0IFp2dD1bIm1hcmtkb3duQ2FyZCJdO2Z1bmN0aW9uIFd2dChjLGwpezEmYyYmR3QoMCwiY2xyLXNwaW5uZXIiLDgpfWxldCBZdnQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhKXt0aGlzLnNhc1NlcnZpY2U9''@;'; put 'put ''YSx0aGlzLmFncmVlQ2hlY2tlZD0hMSx0aGlzLmFncmVlQm94TG9ja2VkPSEwLHRoaXMuYWdyZWVDbGlja2VkPSExLHRoaXMuZXVsYV9tYXJrZG93bj0nXG5MaWNlbmNlIEFncmVlbWVudCBmb3IgRGF0YSBDb250cm9sbGVyIGZvciBTQVNceGFlXG49PT09PT09PT09PT09PT09PT09PVxuXG5D''@;'; put 'put ''b3B5cmlnaHQgKGMpIEJvd2UgSU8gTHRkXG5cbkRhdGEgQ29udHJvbGxlciBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBieSA0R0wgQXBwcywgYSBicmFuZCBvd25lZCBieSBCb3dlIElPIEx0ZCwgYSBVSyBMaW1pdGVkIENvbXBhbnkgaGVhZHF1YXJ0ZWQgaW4gMjkgT2xkZmllbGQgUmQsIEN1''@;'; put 'put ''bWJyaWEsIHJlZ2lzdGVyZWQgYXQgQ29tcGFuaWVzIEhvdXNlIHdpdGggY29tcGFueSBudW1iZXIgMDg3NzcxNzEsIFZBVCBudW1iZXI6IDIwMzkxNDI0MFxuXG5UaGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXdzLCBpbmNsdWRpbmcgaW50ZXJu''@;'; put 'put ''YXRpb25hbCB0cmVhdGllcywgYW5kIGR1YWwtbGljZW5zZWQgXHUyMDEzIGRlcGVuZGluZyBvbiB3aGV0aGVyIHlvdXIgdXNlIGZvciBjb21tZXJjaWFsIHB1cnBvc2VzLCBtZWFuaW5nIGludGVuZGVkIGZvciBvciByZXN1bHRpbmcgaW4gY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgbW9uZXRh''@;'; put 'put ''cnkgY29tcGVuc2F0aW9uLCBvciBub3QuXG5cbklmIHlvdXIgdXNlIGlzIHN0cmljdGx5IHBlcnNvbmFsIG9yIHNvbGVseSBmb3IgZXZhbHVhdGlvbiBwdXJwb3NlcywgbWVhbmluZyBmb3IgdGhlIHB1cnBvc2VzIG9mIHRlc3RpbmcgdGhlIHN1aXRhYmlsaXR5LCBwZXJmb3JtYW5jZSwgYW5k''@;'; put 'put ''IHVzZWZ1bG5lc3Mgb2YgdGhpcyBzb2Z0d2FyZSBvdXRzaWRlIHRoZSBwcm9kdWN0aW9uIGVudmlyb25tZW50LCB5b3UgYWdyZWUgdG8gYmUgYm91bmQgYnkgdGhlIHRlcm1zIGluY2x1ZGVkIGluIHRoZSAibGljZW5jZS1ub24tY29tbWVyY2lhbC1kYXRhY29udHJvbGxlci5tZCIgZmlsZSBh''@;'; put 'put ''dmFpbGFibGUgaGVyZTogIGh0dHBzOi8vZ2l0LmRhdGFjb250cm9sbGVyLmlvL2RjL2RjL3NyYy9icmFuY2gvbWFpbi9saWNlbmNlLW5vbi1jb21tZXJjaWFsLWRhdGFjb250cm9sbGVyLm1kXG5cbllvdXIgdXNlIG9mIHRoaXMgc29mdHdhcmUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMgaXMg''@;'; put 'put ''c3ViamVjdCB0byB0aGUgdGVybXMgaW5jbHVkZWQgaW4gYW4gYXBwbGljYWJsZSBsaWNlbnNlIGFncmVlbWVudC5cblxuSW4gYW55IGNhc2UsIHlvdSBtdXN0IG5vdCBtYWtlIGFueSBzdWNoIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGFzIHRvIGRldmVsb3Agc29mdHdhcmUgd2hpY2ggbWF5IGJl''@;'; put 'put ''IGNvbnNpZGVyZWQgY29tcGV0aXRpdmUgd2l0aCB0aGlzIHNvZnR3YXJlLlxuXG5VTkxFU1MgRVhQUkVTU0xZIEFHUkVFRCBPVEhFUldJU0UsIDRHTCBBUFBTIFBST1ZJREVTIFRISVMgU09GVFdBUkUgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElP''@;'; put 'put ''TlMgT0YgQU5ZIEtJTkQsIEFORCBJTiBOTyBFVkVOVCBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBTSEFMTCA0R0wgQVBQUyBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNF''@;'; put 'put ''UVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIEFSSVNJTkcgRlJPTSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSElTIFNPRlRXQVJFLlxuXG5cbid9bmdPbkluaXQoKXtjb25zdCBhPURsLnNldE9wdGlvbnMoe30pO3RoaXMuZXVsYV9tYXJrZG93bj1hLnBhcnNlKHRoaXMuZXVs''@;'; put 'put ''YV9tYXJrZG93bil9bmdBZnRlclZpZXdJbml0KCl7c2V0VGltZW91dCgoKT0+e3RoaXMubWFya2Rvd25DYXJkJiZ0aGlzLm1hcmtkb3duQ2FyZC5uYXRpdmVFbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzY3JvbGwiKSl9KX10ZXJtc0FncmVlQ2hhbmdlKCl7dGhpcy5h''@;'; put 'put ''Z3JlZUNoZWNrZWQmJih0aGlzLmFncmVlQm94TG9ja2VkPSEwLHRoaXMuYWdyZWVDbGlja2VkPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJwdWJsaWMvcmVnaXN0ZXJ1c2VyIix7U0FTQ29udHJvbFRhYmxlOlt7QUNDRVBURUQ6InllcyJ9XX0pLnRoZW4oZD0+e2QuYWRhcHRlclJlc3Bv''@;'; put 'put ''bnNlLnJldHVybiYmZC5hZGFwdGVyUmVzcG9uc2UucmV0dXJuWzBdJiYiU1VDQ0VTUyI9PT1kLmFkYXB0ZXJSZXNwb25zZS5yZXR1cm5bMF0uTVNHJiZsb2NhdGlvbi5yZWxvYWQoKX0pLmNhdGNoKGQ9PmQpLmZpbmFsbHkoKCk9PntzZXRUaW1lb3V0KCgpPT57dGhpcy5hZ3JlZUJveExvY2tl''@;'; put 'put ''ZD0hMSx0aGlzLmFncmVlQ2xpY2tlZD0hMSx0aGlzLmFncmVlQ2hlY2tlZD0hMX0sMWUzKX0pKX1vbkNhcmRCbG9ja1Njcm9sbChhKXtpZighdGhpcy5hZ3JlZUNsaWNrZWQpe2xldCBkPWEudGFyZ2V0O2QmJih0aGlzLmFncmVlQm94TG9ja2VkPSEoZC5zY3JvbGxUb3ArZC5vZmZzZXRIZWln''@;'; put 'put ''aHQ+PWQuc2Nyb2xsSGVpZ2h0LTIwKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEpzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdGVybXMiXV0sdmlld1F1ZXJ5OmZ1bmN0aW9uKGQs''@;'; put 'put ''aCl7aWYoMSZkJiZuYShadnQsNSksMiZkKXtsZXQgZjt4aShmPUVpKCkpJiYoaC5tYXJrZG93bkNhcmQ9Zi5maXJzdCl9fSxkZWNsczoxMyx2YXJzOjYsY29uc3RzOltbIm1hcmtkb3duQ2FyZCIsIiJdLFsxLCJjYXJkIl0sWzEsImNhcmQtaGVhZGVyIl0sWzEsImNhcmQtYmxvY2siLDMsInNj''@;'; put 'put ''cm9sbCIsImlubmVySFRNTCJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsImFjY2VwdC1jaGVja2JveCJdLFsiY2xyQ2hlY2tib3giLCIiLCJ0eXBlIiwiY2hlY2tib3giLDMsIm5nTW9kZWxDaGFuZ2UiLCJjaGFuZ2UiLCJuZ01vZGVsIiwiZGlzYWJsZWQiXSxb''@;'; put 'put ''ImNscklubGluZSIsInNtYWxsIiw0LCJuZ0lmIl0sWyJjbHJJbmxpbmUiLCJzbWFsbCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpe2lmKDEmZCl7Y29uc3QgZj1PbigpO2RlKDAsImRpdiIsMSkoMSwiZGl2IiwyKSxMZSgyLCIgRW5kIFVzZXIgTGljZW5zZSBBZ3JlZW1lbnQgIiksZGUoMywi''@;'; put 'put ''cCIpLExlKDQsIiBXZWxjb21lIHRvIERhdGEgQ29udHJvbGxlciBmb3IgU0FTISBQbGVhc2UgcmV2aWV3IGFuZCBhY2NlcHQgYWdyZWVtZW50IGJlbG93IGluIG9yZGVyIHRvIHByb2NlZWQuICIpLGhlKCkoKSxkZSg1LCJkaXYiLDMsMCksRnQoInNjcm9sbCIsZnVuY3Rpb24oTSl7cmV0dXJu''@;'; put 'put ''IHd0KGYpLEN0KGgub25DYXJkQmxvY2tTY3JvbGwoTSkpfSksaGUoKSxkZSg3LCJkaXYiLDQpKDgsImNsci1jaGVja2JveC13cmFwcGVyIiw1KSg5LCJpbnB1dCIsNikscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSx2aShoLmFncmVlQ2hlY2tlZCxNKXx8KGgu''@;'; put 'put ''YWdyZWVDaGVja2VkPU0pLEN0KE0pfSksRnQoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC50ZXJtc0FncmVlQ2hhbmdlKCkpfSksaGUoKSxkZSgxMCwibGFiZWwiKSxMZSgxMSwiSSBoYXZlIHJlYWQgYW5kIGFncmVlIHRvIHRoZSB0ZXJtcyBvZiBhYm92ZS4iKSxoZSgp''@;'; put 'put ''KCksZ3QoMTIsV3Z0LDEsMCwiY2xyLXNwaW5uZXIiLDcpLGhlKCkoKX0yJmQmJihmZSg1KSx4ZSgiaW5uZXJIVE1MIixoLmV1bGFfbWFya2Rvd24sRjQpLGZlKDMpLHhyKCJkaXNhYmxlZCIsaC5hZ3JlZUJveExvY2tlZCksZmUoKSxmaSgibmdNb2RlbCIsaC5hZ3JlZUNoZWNrZWQpLHhlKCJk''@;'; put 'put ''aXNhYmxlZCIsaC5hZ3JlZUJveExvY2tlZCksZmUoMykseGUoIm5nSWYiLGguYWdyZWVCb3hMb2NrZWQmJmguYWdyZWVDbGlja2VkKSl9LGRlcGVuZGVuY2llczpbeW8sQjEsUXMsWXMsdXMsVzEsRGQsX2hdLHN0eWxlczpbIltfbmdob3N0LSVDT01QJV17aGVpZ2h0OjEwMCU7YmFja2dyb3Vu''@;'; put 'put ''ZDojZjVmNmZmfS5jbHItY2hlY2tib3gtd3JhcHBlci5kaXNhYmxlZFtfbmdjb250ZW50LSVDT01QJV17b3BhY2l0eTouNX0uY2FyZFtfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjEwMCU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttYXJnaW4tdG9wOjB9LmNhcmRbX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVdICAgLmNhcmQtYmxvY2tbX25nY29udGVudC0lQ09NUCVde2ZsZXg6MTtvdmVyZmxvdzphdXRvfS5hY2NlcHQtY2hlY2tib3hbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MTBweCAxNXB4fSJdfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBHdnQoYyxsKXsxJmMm''@;'; put 'put ''JihkZSgwLCJwIiwyOSksTGUoMSwiIExpY2VuY2Uga2V5IGlzIGludmFsaWQuIFdlIGNhbid0IHByb3ZpZGUgeW91IG1vcmUgZGV0YWlscyBhdCB0aGUgbW9tZW50ICIpLGhlKCkpfWZ1bmN0aW9uICR2dChjLGwpe2lmKDEmYyYmR3QoMCwicCIsMzApLDImYyl7Y29uc3QgYT1PZSgzKTt4ZSgi''@;'; put 'put ''aW5uZXJIVE1MIixhLmxpY2Vuc2VFcnJvcnNbYS5rZXlFcnJvcl0sRjQpfX1mdW5jdGlvbiBLdnQoYyxsKXtpZigxJmMmJihkZSgwLCJwIikoMSwic3Ryb25nIiksTGUoMiwiRGV0YWlsczoiKSxoZSgpLExlKDMpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgzKTtmZSgzKSxScigiICIsYS5lcnJv''@;'; put 'put ''ckRldGFpbHMsIiIpfX1mdW5jdGlvbiBxdnQoYyxsKXtpZigxJmMmJihsaSgwKSxndCgxLEd2dCwyLDAsInAiLDI3KSgyLCR2dCwxLDEsInAiLDI4KSgzLEt2dCw0LDEsInAiLDQpLGNpKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLHhlKCJuZ0lmIiwhYS5rZXlFcnJvciksZmUoKSx4ZSgi''@;'; put 'put ''bmdJZiIsYS5rZXlFcnJvciksZmUoKSx4ZSgibmdJZiIsYS5lcnJvckRldGFpbHMpfX1mdW5jdGlvbiBYdnQoYyxsKXsxJmMmJihsaSgwKSxkZSgxLCJwIiwyOSksTGUoMiwiIFRoZSByZWdpc3RlcmVkIG51bWJlciBvZiB1c2VycyByZWFjaGVkIHRoZSBsaW1pdCBzcGVjaWZpZWQgZm9yIHlv''@;'; put 'put ''dXIgbGljZW5jZS4gUGxlYXNlIGNvbnRhY3QgIiksR3QoMywiY29udGFjdC1saW5rIiwzMSksTGUoNCwiIG9yIHlvdXIgcmVzZWxsZXIgdG8gYXJyYW5nZSBhZGRpdGlvbmFsIGxpY2VuY2VzIGZvciB0aGlzIHByb2R1Y3QuICIpLGhlKCksY2koKSl9ZnVuY3Rpb24gSnZ0KGMsbCl7MSZjJiYo''@;'; put 'put ''bGkoMCksZGUoMSwicCIsMjkpLExlKDIsIiBVcGRhdGUgdGhlIGxpY2Vuc2Uga2V5IGJ5IHVwbG9hZGluZyB0aGUgbGljZW5jZSBmaWxlIG9yIGJ5IHBhc3RpbmcgYSBsaWNlbnNlIGtleSBhbmQgYWN0aXZhdGlvbiBrZXkgaW4gdGhlIGlucHV0cyBiZWxvdy4gIiksaGUoKSxjaSgpKX1mdW5j''@;'; put 'put ''dGlvbiBRdnQoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleCxoPU9lKDIpO3hyKCJtaXNza2V5IixoLm1pc3NtYXRjaGVkS2V5JiZoLm1pc3NtYXRjaGVkS2V5PT09YSksZmUoKSx6dSgiICIsYSwiIixkPT09''@;'; put 'put ''KG51bGw9PWguc3lzc2l0ZS52YWx1ZT9udWxsOmguc3lzc2l0ZS52YWx1ZS5sZW5ndGgpLTE/IiI6IiwiLCIgIil9fWZ1bmN0aW9uIGVidChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDMyKSgxLCJzdHJvbmciKSxMZSgyLCJBbGxvd2VkIHVzZXJzOiIpLGhlKCksTGUoMyksaGUoKSksMiZjKXtj''@;'; put 'put ''b25zdCBhPU9lKDIpO2ZlKDMpLFJyKCIgIixhLmxpY2Vuc2VLZXlEYXRhLnVzZXJzX2FsbG93ZWQsIiAiKX19ZnVuY3Rpb24gdGJ0KGMsbCl7MSZjJiZHdCgwLCJjbHItc3Bpbm5lciIsMzMpfWZ1bmN0aW9uIG5idChjLGwpezEmYyYmKGRlKDAsImRpdiIpLExlKDEsIiBEcm9wIC8gQnJvd3Nl''@;'; put 'put ''IGxpY2VuY2UgZmlsZSAiKSxoZSgpKX1mdW5jdGlvbiByYnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSxMZSgxLCIgU2VsZWN0ZWQgZmlsZTogIiksZGUoMiwic3Ryb25nIiksTGUoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoMyksX3IoYS5saWNlbmNlZmlsZS5maWxlbmFt''@;'; put 'put ''ZSl9fWZ1bmN0aW9uIGlidChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpKDEsInN0cm9uZyIpLExlKDIpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDMpO2ZlKDIpLF9yKGEubGljZW5jZUZpbGVFcnJvcil9fWZ1bmN0aW9uIG9idChjLGwpe2lmKDEmYyYmKGxpKDApLGd0KDEsbmJ0LDIsMCwi''@;'; put 'put ''ZGl2Iiw0KSgyLHJidCw0LDEsImRpdiIsNCkoMyxpYnQsMywxLCJkaXYiLDQpLGNpKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLHhlKCJuZ0lmIiwiIj09PWEubGljZW5jZWZpbGUuZmlsZW5hbWUpLGZlKCkseGUoIm5nSWYiLCIiIT09YS5saWNlbmNlZmlsZS5maWxlbmFtZSksZmUoKSx4''@;'; put 'put ''ZSgibmdJZiIsYS5saWNlbmNlRmlsZUVycm9yKX19ZnVuY3Rpb24gYWJ0KGMsbCl7MSZjJiYoZGUoMCwiYnV0dG9uIiwzNCksTGUoMSwiIENvbnRpbnVlIHdpdGggZnJlZSB0aWVyICIpLGhlKCkpfWZ1bmN0aW9uIHNidChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsNSko''@;'; put 'put ''MSwiZGl2Iiw2KSxMZSgyLCJMaWNlbmNpbmciKSxoZSgpLGRlKDMsImRpdiIsNykoNCwiZGl2Iiw4KSxndCg1LHF2dCw0LDMsIm5nLWNvbnRhaW5lciIsOSkoNixYdnQsNSwwLCJuZy1jb250YWluZXIiLDkpKDcsSnZ0LDMsMCwibmctY29udGFpbmVyIiw5KSxkZSg4LCJwIikoOSwic3Ryb25n''@;'; put 'put ''IiksTGUoMTAsIlNZU1NJVEU6IiksaGUoKSxndCgxMSxRdnQsMiw0LCJzcGFuIiwxMCksZGUoMTIsImEiLDExKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD12bygxNCksZj12bygxNiksdj1PZSgpO3JldHVybiBDdCh2LmNvcHlTeXNzaXRlKGgsZix2LnN5c3NpdGUudmFs''@;'; put 'put ''dWV8fFtdKSl9KSxHdCgxMywiY2xyLWljb24iLDEyLDApLGRlKDE1LCJzcGFuIiwxMywxKSxMZSgxNywiQ29weSB0byBjbGlwYm9hcmQiKSxoZSgpKCkoKSxndCgxOCxlYnQsNCwxLCJwIiwxNCksZGUoMTksImNsci10YWJzIikoMjAsImNsci10YWIiKSgyMSwiYnV0dG9uIiwxNSksTGUoMjIs''@;'; put 'put ''IlVwbG9hZCBsaWNlbmNlIiksaGUoKSxkZSgyMywiY2xyLXRhYi1jb250ZW50IikoMjQsImlucHV0IiwxNiwyKSxGdCgiY2hhbmdlIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5vbkZpbGVDYXB0dXJlKGgpKX0pLGhlKCksZGUoMjYsImRpdiIsMTcpLEZ0KCJjbGljayIsZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gd3QoYSksQ3Qodm8oMjUpLmNsaWNrKCkpfSkoImZpbGVEcm9wIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5vbkZpbGVDYXB0dXJlKGgsITApKX0pLGd0KDI3LHRidCwxLDAsImNsci1zcGlubmVyIiwxOCkoMjgsb2J0LDQsMywibmctY29udGFpbmVy''@;'; put 'put ''Iiw0KSxoZSgpKCkoKSxkZSgyOSwiY2xyLXRhYiIpKDMwLCJidXR0b24iLDE1KSxMZSgzMSwiUGFzdGUgbGljZW5jZSIpLGhlKCksZGUoMzIsImNsci10YWItY29udGVudCIpKDMzLCJmb3JtIiwxOSkoMzQsInAiKSxMZSgzNSwiTGljZW5jZSBrZXk6IiksaGUoKSxkZSgzNiwiZGl2IiwyMCko''@;'; put 'put ''MzcsInRleHRhcmVhIiwyMSkscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKTtyZXR1cm4gdmkoZi5saWNlbmNlS2V5VmFsdWUsaCl8fChmLmxpY2VuY2VLZXlWYWx1ZT1oKSxDdChoKX0pLEZ0KCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe3JldHVybiB3''@;'; put 'put ''dChhKSxDdChPZSgpLnRyaW1LZXlzKCkpfSksaGUoKSgpKCksZGUoMzgsImZvcm0iLDIyKSgzOSwicCIpLExlKDQwLCJBY3RpdmF0aW9uIGtleToiKSxoZSgpLGRlKDQxLCJkaXYiLDIwKSg0MiwidGV4dGFyZWEiLDIzKSxwaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29u''@;'; put 'put ''c3QgZj1PZSgpO3JldHVybiB2aShmLmFjdGl2YXRpb25LZXlWYWx1ZSxoKXx8KGYuYWN0aXZhdGlvbktleVZhbHVlPWgpLEN0KGgpfSksRnQoIm1vdXNlbGVhdmUiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkudHJpbUtleXMoKSl9KSxoZSgpKCkoKSgpKCkoKSgpLGRlKDQzLCJk''@;'; put 'put ''aXYiLDI0KSg0NCwiYnV0dG9uIiwyNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLmFwcGx5S2V5cygpKX0pLExlKDQ1LCIgQXBwbHkgbGljZW5jZSBrZXlzICIpLGhlKCksZ3QoNDYsYWJ0LDIsMCwiYnV0dG9uIiwyNiksaGUoKSgpKCl9aWYoMiZjKXtjb25z''@;'; put 'put ''dCBhPU9lKCk7ZmUoMykseGUoIm5nU3dpdGNoIixhLmFjdGlvbiksZmUoMikseGUoIm5nU3dpdGNoQ2FzZSIsImtleSIpLGZlKCkseGUoIm5nU3dpdGNoQ2FzZSIsImxpbWl0IiksZmUoKSx4ZSgibmdTd2l0Y2hDYXNlIiwidXBkYXRlIiksZmUoNCkseGUoIm5nRm9yT2YiLGEuc3lzc2l0ZS52''@;'; put 'put ''YWx1ZSksZmUoNykseGUoIm5nSWYiLGEubGljZW5zZUtleURhdGEmJmEudXNlckNvdW50TGltaXRhdGlvbiksZmUoOSkseGUoIm5nSWYiLGEubGljZW5jZUZpbGVMb2FkaW5nKSxmZSgpLHhlKCJuZ0lmIiwhYS5saWNlbmNlRmlsZUxvYWRpbmcpLGZlKDkpLGZpKCJuZ01vZGVsIixhLmxpY2Vu''@;'; put 'put ''Y2VLZXlWYWx1ZSksZmUoNSksZmkoIm5nTW9kZWwiLGEuYWN0aXZhdGlvbktleVZhbHVlKSxmZSgyKSx4ZSgiY2xyTG9hZGluZyIsYS5hcHBseWluZ0tleXMpKCJkaXNhYmxlZCIsYS5kaXNhYmxlQXBwbHlCdXR0b24pLGZlKDIpLHhlKCJuZ0lmIixhLmlzQXBwRnJlZVRpZXIudmFsdWUpfX1m''@;'; put 'put ''dW5jdGlvbiBsYnQoYyxsKXsxJmMmJkd0KDAsImFwcC10ZXJtcyIpfXZhciBBNmU9ZnVuY3Rpb24oYyl7cmV0dXJuIGMua2V5PSJrZXkiLGMucmVnaXN0ZXI9InJlZ2lzdGVyIixjLmxpbWl0PSJsaW1pdCIsYy51cGRhdGU9InVwZGF0ZSIsY30oQTZlfHx7fSk7Y29uc3QgY2J0PVt7cGF0aDoi''@;'; put 'put ''OmFjdGlvbiIsY29tcG9uZW50OigoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5yb3V0ZT1hLHRoaXMubGljZW5jZVNlcnZpY2U9ZCx0aGlzLnNhc1NlcnZpY2U9aCx0aGlzLmFwcFNlcnZpY2U9Zix0aGlzLmFjdGlvbj1udWxsLHRoaXMubGljZW5zZUVycm9ycz17bWlz''@;'; put 'put ''c2luZzonTGljZW5jZSBrZXkgaXMgbWlzc2luZyAtIHBsZWFzZSBjb250YWN0IDxhIGNsYXNzPSJjb2xvci1ncmVlbiIgaHJlZj0ibWFpbHRvOiBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIj5zdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvPC9hPiBhbmQgZW50ZXIgdmFsaWQga2V5cyBiZWxv''@;'; put 'put ''dy4nLGV4cGlyZWQ6J0xpY2VuY2Uga2V5IGlzIGV4cGlyZWQgLSBwbGVhc2UgY29udGFjdCA8YSBjbGFzcz0iY29sb3ItZ3JlZW4iIGhyZWY9Im1haWx0bzogc3VwcG9ydEBkYXRhY29udHJvbGxlci5pbyI+c3VwcG9ydEBkYXRhY29udHJvbGxlci5pbzwvYT4gYW5kIGVudGVyIHZhbGlkIGtl''@;'; put 'put ''eXMgYmVsb3cuJyxpbnZhbGlkOidMaWNlbmNlIGtleSBpcyBpbnZhbGlkIC0gcGxlYXNlIGNvbnRhY3QgPGEgY2xhc3M9ImNvbG9yLWdyZWVuIiBocmVmPSJtYWlsdG86IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iPnN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW88L2E+IGFuZCBlbnRlciB2''@;'; put 'put ''YWxpZCBrZXlzIGJlbG93LicsbWlzc21hdGNoOidZb3VyIFNZU1NJVEUgKGJlbG93KSBpcyBub3QgZm91bmQgaW4gdGhlIGxpY2VuY2Uga2V5IC0gcGxlYXNlIGNvbnRhY3QgPGEgY2xhc3M9ImNvbG9yLWdyZWVuIiBocmVmPSJtYWlsdG86IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iPnN1''@;'; put 'put ''cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW88L2E+IGFuZCBlbnRlciB2YWxpZCBrZXlzIGJlbG93Lid9LHRoaXMubGljZW5jZUtleVZhbHVlPSIiLHRoaXMuYWN0aXZhdGlvbktleVZhbHVlPSIiLHRoaXMuYXBwbHlpbmdLZXlzPSExLHRoaXMuc3lzc2l0ZT10aGlzLmFwcFNlcnZpY2Uuc3lzc2l0''@;'; put 'put ''ZSx0aGlzLmN1cnJlbnRMaWNlbmNlS2V5PXRoaXMubGljZW5jZVNlcnZpY2UubGljZW5jZUtleSx0aGlzLmN1cnJlbnRBY3RpdmF0aW9uS2V5PXRoaXMubGljZW5jZVNlcnZpY2UuYWN0aXZhdGlvbktleSx0aGlzLmlzQXBwRnJlZVRpZXI9dGhpcy5saWNlbmNlU2VydmljZS5pc0FwcEZyZWVU''@;'; put 'put ''aWVyLHRoaXMudXNlckNvdW50TGltaXRhdGlvbj10aGlzLmxpY2VuY2VTZXJ2aWNlLnVzZXJDb3VudExpbWl0YXRpb24sdGhpcy5saWNlbnNlS2V5RGF0YT1udWxsLHRoaXMuaW5wdXRUeXBlPSJmaWxlIix0aGlzLmxpY2VuY2VGaWxlTG9hZGluZz0hMSx0aGlzLmxpY2VuY2VmaWxlPXtmaWxl''@;'; put 'put ''bmFtZToiIn19bmdPbkluaXQoKXt0aGlzLmxpY2VuY2VLZXlWYWx1ZT10aGlzLmN1cnJlbnRMaWNlbmNlS2V5fHwiIix0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZT10aGlzLmN1cnJlbnRBY3RpdmF0aW9uS2V5fHwiIix0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZShhPT57dGhpcy5r''@;'; put 'put ''ZXlFcnJvcj1hLmVycm9yLHRoaXMubWlzc21hdGNoZWRLZXk9YS5taXNzbWF0Y2hJZCxhLmRldGFpbHMmJih0aGlzLmVycm9yRGV0YWlscz1hdG9iKGEuZGV0YWlscykpfSksdGhpcy5yb3V0ZS5wYXJhbXMuc3Vic2NyaWJlKGE9PntsZXQgZD1hLmFjdGlvbjtkJiZPYmplY3QudmFsdWVzKEE2''@;'; put 'put ''ZSkuaW5jbHVkZXMoZCkmJih0aGlzLmFjdGlvbj1kKX0pLHRoaXMubGljZW5zZUtleURhdGE9dGhpcy5saWNlbmNlU2VydmljZS5nZXRMaWNlbnNlS2V5RGF0YSgpfXRyaW1LZXlzKCl7dGhpcy5saWNlbmNlS2V5VmFsdWU9dGhpcy5saWNlbmNlS2V5VmFsdWUudHJpbSgpLHRoaXMuYWN0aXZh''@;'; put 'put ''dGlvbktleVZhbHVlPXRoaXMuYWN0aXZhdGlvbktleVZhbHVlLnRyaW0oKX1jb3B5U3lzc2l0ZShhLGQsaCl7Y29uc3QgZj1oLmpvaW4oIlxuIik7bmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoZikudGhlbigoKT0+e2Euc2V0QXR0cmlidXRlKCJzaGFwZSIsImNoZWNrIiksYS5zZXRB''@;'; put 'put ''dHRyaWJ1dGUoImNsYXNzIiwiaXMtc3VjY2VzcyIpLGQuaW5uZXJUZXh0PSJDb3BpZWQhIixzZXRUaW1lb3V0KCgpPT57YS5zZXRBdHRyaWJ1dGUoInNoYXBlIiwiY29weSIpLGEucmVtb3ZlQXR0cmlidXRlKCJjbGFzcyIpLGQuaW5uZXJUZXh0PSJDb3B5IHRvIGNsaXBib2FyZCJ9LDFlMyl9''@;'; put 'put ''KX1hcHBseUtleXMoKXt0aGlzLmFwcGx5aW5nS2V5cz0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgiYWRtaW4vcmVnaXN0ZXJrZXkiLHtrZXl1cGxvYWQ6W3tBQ1RJVkFUSU9OX0tFWTp0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZSxMSUNFTkNFX0tFWTp0aGlzLmxpY2VuY2VLZXlWYWx1ZX1d''@;'; put 'put ''fSkudGhlbihkPT57ZC5hZGFwdGVyUmVzcG9uc2UucmV0dXJuJiZkLmFkYXB0ZXJSZXNwb25zZS5yZXR1cm5bMF0mJiJTVUNDRVNTIj09PWQuYWRhcHRlclJlc3BvbnNlLnJldHVyblswXS5NU0cmJmxvY2F0aW9uLnJlcGxhY2UobG9jYXRpb24uaHJlZi5zcGxpdCgiIyIpWzBdKX0pLmZpbmFs''@;'; put 'put ''bHkoKCk9Pnt0aGlzLmFwcGx5aW5nS2V5cz0hMX0pfW9uRmlsZUNhcHR1cmUoYSxkPSExKXtsZXQgaD1kP2FbMF06YS50YXJnZXQuZmlsZXNbMF07aWYodGhpcy5saWNlbmNlZmlsZS5maWxlbmFtZT1oLm5hbWUsIWgpcmV0dXJuO3RoaXMubGljZW5jZUZpbGVMb2FkaW5nPSEwO2NvbnN0IGY9''@;'; put 'put ''bmV3IEZpbGVSZWFkZXI7Zi5vbmxvYWQ9dj0+e2lmKHRoaXMubGljZW5jZUZpbGVFcnJvcj0iRXJyb3IgcmVhZGluZyBmaWxlLiIsIXZ8fCF2LnRhcmdldHx8MiE9di50YXJnZXQucmVhZHlTdGF0ZXx8di50YXJnZXQuZXJyb3J8fCF2LnRhcmdldC5yZXN1bHQpcmV0dXJuO3RoaXMubGljZW5j''@;'; put 'put ''ZUZpbGVMb2FkaW5nPSExLHRoaXMubGljZW5jZUZpbGVFcnJvcj12b2lkIDA7Y29uc3QgTT12LnRhcmdldC5yZXN1bHQudG9TdHJpbmcoKS5zcGxpdCgiXG4iKTt0aGlzLmFjdGl2YXRpb25LZXlWYWx1ZT1NWzFdLHRoaXMubGljZW5jZUtleVZhbHVlPU1bMF19LGYucmVhZEFzVGV4dChoKX1z''@;'; put 'put ''d2l0Y2hUeXBlKGEpe3RoaXMuaW5wdXRUeXBlPWF9Z2V0IGRpc2FibGVBcHBseUJ1dHRvbigpe3JldHVybiB0aGlzLmxpY2VuY2VLZXlWYWx1ZS5sZW5ndGg8MXx8dGhpcy5hY3RpdmF0aW9uS2V5VmFsdWUubGVuZ3RoPDF8fHRoaXMubGljZW5jZUtleVZhbHVlPT09dGhpcy5jdXJyZW50TGlj''@;'; put 'put ''ZW5jZUtleSYmdGhpcy5hY3RpdmF0aW9uS2V5VmFsdWU9PT10aGlzLmN1cnJlbnRBY3RpdmF0aW9uS2V5fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEN1KSxHZShkMSksR2UoSnMpLEdlKFFSKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1O''@;'; put 'put ''cih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbGljZW5zaW5nIl1dLGRlY2xzOjIsdmFyczoyLGNvbnN0czpbWyJjb3B5SWNvbiIsIiJdLFsiY29weVRvb2x0aXAiLCIiXSxbImxpY2VuY2VGaWxlIiwiIl0sWyJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJjYXJkIl0s''@;'; put 'put ''WzEsImNhcmQtaGVhZGVyIl0sWzEsImNhcmQtYmxvY2siLDMsIm5nU3dpdGNoIl0sWzEsImNhcmQtdGV4dCJdLFs0LCJuZ1N3aXRjaENhc2UiXSxbMywibWlzc2tleSIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC10b3AtcmlnaHQiLDMs''@;'; put 'put ''ImNsaWNrIl0sWyJzaGFwZSIsImNvcHkiLCJzaXplIiwiMTUiLDEsImN1cnNvci1wb2ludGVyIl0sWzEsInRvb2x0aXAtY29udGVudCJdLFsiY2xhc3MiLCJtLTAiLDQsIm5nSWYiXSxbImNsclRhYkxpbmsiLCIiXSxbInR5cGUiLCJmaWxlIiwiaGlkZGVuIiwiIiwzLCJjaGFuZ2UiXSxbImFw''@;'; put 'put ''cEZpbGVEcm9wIiwiIiwxLCJkcm9wLWFyZWEiLDMsImNsaWNrIiwiZmlsZURyb3AiXSxbImNsYXNzIiwic3Bpbm5lci1zbSIsNCwibmdJZiJdLFsxLCJjbHItZm9ybSIsImxpY2Vuc2Uta2V5LWZvcm0iXSxbMSwiY2xyLWNvbnRyb2wtY29udGFpbmVyIl0sWyJuYW1lIiwibGljZW5zZS1rZXkt''@;'; put 'put ''YXJlYSIsInBsYWNlaG9sZGVyIiwiUGFzdGUgbGljZW5jZSBrZXkgaGVyZSIsMSwiY2xyLXRleHRhcmVhIiwzLCJuZ01vZGVsQ2hhbmdlIiwibW91c2VsZWF2ZSIsIm5nTW9kZWwiXSxbMSwiY2xyLWZvcm0iLCJhY3RpdmF0aW9uLWtleS1mb3JtIl0sWyJuYW1lIiwiYWN0aXZhdGlvbi1rZXkt''@;'; put 'put ''YXJlYSIsInBsYWNlaG9sZGVyIiwiUGFzdGUgYWN0aXZhdGlvbiBrZXkgaGVyZSIsMSwiY2xyLXRleHRhcmVhIiwzLCJuZ01vZGVsQ2hhbmdlIiwibW91c2VsZWF2ZSIsIm5nTW9kZWwiXSxbMSwiY2FyZC1mb290ZXIiLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsImJ0''@;'; put 'put ''biIsImJ0bi1wcmltYXJ5IiwiYXBwbHkta2V5cyIsMywiY2xpY2siLCJjbHJMb2FkaW5nIiwiZGlzYWJsZWQiXSxbInJvdXRlckxpbmsiLCIvIiwiY2xhc3MiLCJidG4gYnRuLXNtIGJ0bi1saW5rIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImtleS1lcnJvciIsNCwibmdJZiJdLFsiY2xhc3MiLCJr''@;'; put 'put ''ZXktZXJyb3IiLDMsImlubmVySFRNTCIsNCwibmdJZiJdLFsxLCJrZXktZXJyb3IiXSxbMSwia2V5LWVycm9yIiwzLCJpbm5lckhUTUwiXSxbImNsYXNzZXMiLCJjb2xvci1ncmVlbiJdLFsxLCJtLTAiXSxbMSwic3Bpbm5lci1zbSJdLFsicm91dGVyTGluayIsIi8iLDEsImJ0biIsImJ0bi1z''@;'; put 'put ''bSIsImJ0bi1saW5rIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiZndCgwLHNidCw0NywxMywiZGl2IiwzKSgxLGxidCwxLDAsImFwcC10ZXJtcyIsNCksMiZkJiYoeGUoIm5nSWYiLCJyZWdpc3RlciIhPT1oLmFjdGlvbiksZmUoKSx4ZSgibmdJZiIsInJlZ2lzdGVyIj09PWguYWN0''@;'; put 'put ''aW9uKSl9LGRlcGVuZGVuY2llczpbc3MseW8sYjIsaXAsbzcsUWwsUXMscjcsWXMscHAsT2wsQjAsVDIsdm0seW0sQzcsYm0sbW0sXzcsX2gsdTEsWXZ0LHNPXSxzdHlsZXM6WyJbX25naG9zdC0lQ09NUCVde2hlaWdodDpjYWxjKDEwMCUgLSA5NnB4KTtwYWRkaW5nOjIwcHh9LmNhcmRbX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MH0ua2V5LWVycm9yW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXNpemU6MTZweH0ubWlzc2tleVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2U3NGMzY30ubGljZW5zZS1rZXktZm9ybVtfbmdjb250ZW50LSVDT01QJV0sIC5hY3RpdmF0aW9u''@;'; put 'put ''LWtleS1mb3JtW19uZ2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOjB9LmxpY2Vuc2Uta2V5LWZvcm1bX25nY29udGVudC0lQ09NUCVdICAgLmNsci1jb250cm9sLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0sIC5hY3RpdmF0aW9uLWtleS1mb3JtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5j''@;'; put 'put ''bHItY29udHJvbC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9LmxpY2Vuc2Uta2V5LWZvcm1bX25nY29udGVudC0lQ09NUCVdICAgLmNsci1jb250cm9sLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV0gICB0ZXh0YXJlYVtfbmdjb250ZW50LSVDT01QJV0sIC5h''@;'; put 'put ''Y3RpdmF0aW9uLWtleS1mb3JtW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jbHItY29udHJvbC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVdICAgdGV4dGFyZWFbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7aGVpZ2h0OjE3MHB4O21heC1oZWlnaHQ6MTcwcHg7bWluLWhlaWdodDox''@;'; put 'put ''NzBweDtyZXNpemU6bm9uZX0uYXBwbHkta2V5c1tfbmdjb250ZW50LSVDT01QJV17aGVpZ2h0OjQwcHh9LmRyb3AtYXJlYVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6MTVweDtib3JkZXI6''@;'; put 'put ''MnB4IGRhc2hlZCAjYjJiMmIyO2JvcmRlci1yYWRpdXM6NHB4O2N1cnNvcjpwb2ludGVyO21hcmdpbjoxMHB4IDB9Y2xyLXRhYnNbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXtib3gtc2hhZG93Om5vbmUhaW1wb3J0YW50fSJdfSl9fXJldHVybiBjfSko''@;'; put 'put ''KSxjYW5BY3RpdmF0ZTpbWmVlXSxjYW5EZWFjdGl2YXRlOltaZWVdfV07bGV0IHVidD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1''@;'; put 'put ''MDI3NWluaj1Bcih7aW1wb3J0czpbamMuZm9yQ2hpbGQoY2J0KSxqY119KX19cmV0dXJuIGN9KSgpLGRidD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0''@;'; put 'put ''YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTG8sRGMsajAsdWJ0LF93XX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgaGJ0PSgpPT4oe3N0YW5kYWxvbmU6ITB9KSxrNmU9KGMsbCxhKT0+KHthZGRlZFJvdzpjLGRlbGV0ZWRSb3c6bCx1cGRhdGVkUm93OmF9KSxENmU9Yz0+KHsiY2gg''@;'; put 'put ''dG9vbHRpcCB0b29sdGlwLW1kIHRvb2x0aXAtdG9wLXJpZ2h0IjpjfSk7ZnVuY3Rpb24gZmJ0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGQiLDE5KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQsZD1PZSgpO3hlKCJyb3V0ZXJMaW5rIiwiL3N0YWdlLyIrZC5qc1BhcmFt''@;'; put 'put ''c1thXSksZmUoKSxScigiICIsZC5qc1BhcmFtc1thXSwiICIpfX1mdW5jdGlvbiBwYnQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ZCIsNCksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0LGQ9T2UoKTtmZSgpLFJyKCIgIixkLmpzUGFyYW1zW2FdLCIgIil9fWZ1bmN0aW9u''@;'; put 'put ''IGdidChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDQpLExlKDIpLGhlKCksZ3QoMyxmYnQsMiwyLCJ0ZCIsMTcpKDQscGJ0LDIsMSwidGQiLDE4KSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoMiksX3IoYSksZmUoKSx4ZSgibmdJZiIsYS5pbmNsdWRlcygiVEFC''@;'; put 'put ''TEVfSUQiKSksZmUoKSx4ZSgibmdJZiIsIWEuaW5jbHVkZXMoIlRBQkxFX0lEIikpfX1mdW5jdGlvbiBtYnQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiw0KSxMZSgyKSxoZSgpLGRlKDMsInRkIiw0KSxMZSg0KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPU9l''@;'; put 'put ''KDMpO2ZlKDIpLF9yKGEpLGZlKDIpLF9yKGQuc3VibWl0RGV0YWlsc1thXSl9fWZ1bmN0aW9uIHZidChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci10YWItY29udGVudCIpKDEsImRpdiIsMjIpKDIsInRhYmxlIiwzKSgzLCJ0aGVhZCIpKDQsInRyIikoNSwidGgiLDQpLExlKDYsIk5hbWUiKSxo''@;'; put 'put ''ZSgpLGRlKDcsInRoIiw0KSxMZSg4LCJWYWx1ZSIpLGhlKCkoKSgpLGRlKDksInRib2R5IiksZ3QoMTAsbWJ0LDUsMiwidHIiLDUpLGhlKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgxMCkseGUoIm5nRm9yT2YiLGEuc3VibWl0QXJyKX19ZnVuY3Rpb24gYmJ0KGMsbCl7aWYoMSZj''@;'; put 'put ''JiYoZGUoMCwidHIiKSgxLCJ0ZCIsNCksTGUoMiksaGUoKSxkZSgzLCJ0ZCIsNCksTGUoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1PZSgyKTtmZSgyKSxfcihhKSxmZSgyKSxfcihkLmpzUGFyYW1zW2FdKX19ZnVuY3Rpb24geWJ0KGMsbCl7aWYoMSZjJiYoZGUoMCwi''@;'; put 'put ''Y2xyLXRhYnMiKSgxLCJjbHItdGFiIikoMiwiYnV0dG9uIiwyMCksTGUoMywiU3VibWl0dGVkIFRhYmxlIERldGFpbHMiKSxoZSgpLGd0KDQsdmJ0LDExLDEsImNsci10YWItY29udGVudCIsMjEpLGhlKCksZGUoNSwiY2xyLXRhYiIpKDYsImJ1dHRvbiIsMjApLExlKDcsIkJhc2UgVGFibGUg''@;'; put 'put ''RGV0YWlscyIpLGhlKCksZGUoOCwiY2xyLXRhYi1jb250ZW50IikoOSwiZGl2IiwyMikoMTAsInRhYmxlIiwzKSgxMSwidGhlYWQiKSgxMiwidHIiKSgxMywidGgiLDQpLExlKDE0LCJOYW1lIiksaGUoKSxkZSgxNSwidGgiLDQpLExlKDE2LCJWYWx1ZSIpLGhlKCkoKSgpLGRlKDE3LCJ0Ym9k''@;'; put 'put ''eSIpLGd0KDE4LGJidCw1LDIsInRyIiw1KSxoZSgpKCkoKSgpKCkoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoNCkseGUoImNscklmQWN0aXZlIiwhMCksZmUoMTQpLHhlKCJuZ0Zvck9mIixhLmtleXNBcnJheSl9fWZ1bmN0aW9uIF9idChjLGwpezEmYyYmKGRlKDAsInAiLDcyKSxMZSgxLCIg''@;'; put 'put ''VGhlcmUgYXJlIG5vIGRldGFpbHMgdG8gc2hvdyAiKSxoZSgpKX1mdW5jdGlvbiB3YnQoYyxsKXtpZigxJmMmJihsaSgwKSxkZSgxLCJkaXYiLDczKSgyLCJzcGFuIiksTGUoMywiVGFibGUgSWQ6IiksaGUoKSxkZSg0LCJzdHJvbmciLDc0KSxMZSg1KSxoZSgpKCksZGUoNiwiZGl2IikoNywi''@;'; put 'put ''c3BhbiIpLExlKDgsIlN1Ym1pdHRlcjoiKSxoZSgpLGRlKDksInNwYW4iLDc1KSxMZSgxMCksaGUoKSgpLGRlKDExLCJkaXYiKSgxMiwic3BhbiIpLExlKDEzLCJTdWJtaXR0ZWQgb246IiksaGUoKSxkZSgxNCwic3BhbiIsNzUpLExlKDE1KSxoZSgpKCksZGUoMTYsImRpdiIpKDE3LCJzcGFu''@;'; put 'put ''IiksTGUoMTgsIlN1Ym1pdHRlZCBSZWFzb246IiksaGUoKSxkZSgxOSwic3BhbiIsNzUpLExlKDIwKSxoZSgpKCksY2koKSksMiZjKXtjb25zdCBhPU9lKDUpO2ZlKDQpLHhlKCJyb3V0ZXJMaW5rIiwiL3N0YWdlLyIrKG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMu''@;'; put 'put ''VEFCTEVfSUQpKSxmZSgpLFJyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlRBQkxFX0lELCIgIiksZmUoNSksUnIoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuU1VCTUlUVEVEX0JZX05NLCIgIiksZmUoNSksUnIoIiAi''@;'; put 'put ''LG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuU1VCTUlUVEVEX09OX0RUVE0sIiAiKSxmZSg1KSxScigiICIsbnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5TVUJNSVRURURfUkVBU09OX1RYVCwiICIpfX1mdW5jdGlvbiBDYnQoYyxsKXsx''@;'; put 'put ''JmMmJihkZSgwLCJzcGFuIiw3NiksR3QoMSwiY2xyLWljb24iLDc3KSxMZSgyLCIgT25seSB0aGUgZmlyc3QgMTAwIGluc2VydHMsIHVwZGF0ZXMgb3IgZGVsZXRlcyBhcmUgZGlzcGxheWVkICIpLGhlKCkpfWZ1bmN0aW9uIFNidChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRp''@;'; put 'put ''diIsNDkpKDEsImRpdiIsNTApKDIsImRpdiIsNTEpLGd0KDMsX2J0LDIsMCwicCIsNDUpKDQsd2J0LDIxLDUsIm5nLWNvbnRhaW5lciIsOCksaGUoKSxkZSg1LCJkaXYiLDUyKSg2LCJkaXYiLDUzKSg3LCJkaXYiLDU0KSg4LCJkaXYiLDU1KSg5LCJidXR0b24iLDU2KSxGdCgiY2xpY2siLGZ1''@;'; put 'put ''bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSg0KTtyZXR1cm4gQ3QoaC5nb1RvQmFzZShudWxsPT1oLmpzUGFyYW1zP251bGw6aC5qc1BhcmFtcy5UQUJMRV9OTSkpfSksTGUoMTAsIiBWaWV3IGJhc2UgdGFibGUgIiksaGUoKSxkZSgxMSwiYnV0dG9uIiw1NyksRnQoImNsaWNrIixmdW5jdGlv''@;'; put 'put ''bigpe3d0KGEpO2NvbnN0IGg9T2UoNCk7cmV0dXJuIEN0KGguZ2V0VGFibGUoaC50YWJsZUlkKSl9KSxMZSgxMiwiIFZpZXcgc3RhZ2VkIGRhdGEgIiksaGUoKSxkZSgxMywiYnV0dG9uIiw1OCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoNCk7cmV0dXJuIEN0KGgu''@;'; put 'put ''Z29CYWNrKG51bGw9PWguanNQYXJhbXM/bnVsbDpoLmpzUGFyYW1zLlRBQkxFX05NKSl9KSxMZSgxNCwiIEVkaXQgYmFzZSB0YWJsZSAiKSxoZSgpKCkoKSgpLGRlKDE1LCJkaXYiLDU5KSgxNiwiYnV0dG9uIiw2MCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSg0''@;'; put 'put ''KS5hcHByb3ZlVGFibGUoKSl9KSxMZSgxNywiIEFDQ0VQVCAiKSxoZSgpLGRlKDE4LCJidXR0b24iLDYxKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDQpLnJlamVjdE9wZW49ITApfSksTGUoMTksIiBSRUpFQ1QgIiksaGUoKSxkZSgyMCwiY2xyLXRvZ2dsZS1j''@;'; put 'put ''b250YWluZXIiLDYyKSgyMSwiY2xyLXRvZ2dsZS13cmFwcGVyIikoMjIsImlucHV0Iiw2MykscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoNCk7cmV0dXJuIHZpKGYuZm9ybWF0dGVkVmFsdWVzLGgpfHwoZi5mb3JtYXR0ZWRWYWx1ZXM9aCksQ3QoaCl9''@;'; put 'put ''KSxGdCgiY2hhbmdlIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSg0KS5mb3JtYXR0aW5nQ2hhbmdlZCgpKX0pLGhlKCksZGUoMjMsImxhYmVsIiw2NCksTGUoMjQpLGhlKCkoKSgpKCksZGUoMjUsImRpdiIsNjUpLGd0KDI2LENidCwzLDAsInNwYW4iLDY2KSxkZSgyNywiZGl2Iiwz''@;'; put 'put ''MSkoMjgsImRpdiIsNjcpKDI5LCJzcGFuIiw2OCksTGUoMzAsIiBDaGFuZ2VkIFJvd3MgIiksZGUoMzEsInNwYW4iLDY5KSxMZSgzMiksaGUoKSgpLGRlKDMzLCJzcGFuIiw3MCksTGUoMzQsIiBBZGRlZCBSb3dzICIpLGRlKDM1LCJzcGFuIiw2OSksTGUoMzYpLGhlKCkoKSxkZSgzNywic3Bh''@;'; put 'put ''biIsNzEpLExlKDM4LCIgRGVsZXRlZCBSb3dzICIpLGRlKDM5LCJzcGFuIiw2OSksTGUoNDApLGhlKCkoKSgpKCkoKSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9T2UoNCk7ZmUoMykseGUoIm5nSWYiLCFhLnRhYmxlRGV0YWlscyksZmUoKSx4ZSgibmdJZiIsYS50YWJsZURldGFpbHMpLGZlKDEy''@;'; put 'put ''KSx4ZSgiY2xyTG9hZGluZyIsYS5hY2NlcHRMb2FkaW5nKSgiZGlzYWJsZWQiLCFhLmxvYWRpbmdUYWJsZXx8Ik5PIj09PShudWxsPT1hLnBhcmFtcz9udWxsOmEucGFyYW1zLklTQVBQUk9WRVIpfHxhLm5vQ2hhbmdlcyksZmUoMikseGUoImRpc2FibGVkIiwhYS5sb2FkaW5nVGFibGV8fCJO''@;'; put 'put ''TyI9PT0obnVsbD09YS5wYXJhbXM/bnVsbDphLnBhcmFtcy5JU0FQUFJPVkVSKXx8YS5ub0NoYW5nZXMpLGZlKDQpLGZpKCJuZ01vZGVsIixhLmZvcm1hdHRlZFZhbHVlcyksZmUoMiksX3IoYS5mb3JtYXR0ZWRWYWx1ZXM/IkZvcm1hdHRlZCI6IlVuZm9ybWF0dGVkIiksZmUoMikseGUoIm5n''@;'; put 'put ''SWYiLGEuZGlmZnNMaW1pdCksZmUoNiksX3IoYS5sZW5zLnVwZGF0ZWQpLGZlKDQpLF9yKGEubGVucy5uZXcpLGZlKDQpLF9yKGEubGVucy5kZWxldGVkKX19ZnVuY3Rpb24gTWJ0KGMsbCl7MSZjJiYoZGUoMCwiZGl2Iiw3NSkoMSwicCIsODEpLExlKDIsIkxvYWRpbmcgdGFibGUiKSxoZSgp''@;'; put 'put ''KCkpfWZ1bmN0aW9uIHhidChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNzgpKDEsInNwYW4iLDc5KSxMZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpLGd0KDMsTWJ0LDMsMCwiZGl2Iiw4MCksaGUoKSksMiZjKXtjb25zdCBhPU9lKDQpO2ZlKDMpLHhlKCJuZ0lmIiwhYS5sb2FkaW5nVGFibGUp''@;'; put 'put ''fX1mdW5jdGlvbiBFYnQoYyxsKXsxJmMmJihkZSgwLCJwIiw3MiksTGUoMSwiIFRoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIHNob3cgIiksaGUoKSl9ZnVuY3Rpb24gVGJ0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGgiLDQpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgp''@;'; put 'put ''LF9yKGEpfX1mdW5jdGlvbiBBYnQoYyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiw4NiksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPU9lKCkuaW5kZXgsZD1PZSgyKS5pbmRleCxoPU9lKDQpO2ZlKCksUnIoIk9yaWdpbmFsIHZhbHVlIGlzOiAiLGguYXJyT2ZDaGFuZ2VzW2RdW2FdLCIiKX19''@;'; put 'put ''ZnVuY3Rpb24ga2J0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGQiLDg0KSxMZSgxKSxndCgyLEFidCwyLDEsInNwYW4iLDg1KSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4LGg9T2UoMikuaW5kZXgsZj1PZSg0KTt4ZSgibmdDbGFzcyIsbnAoMyxENmUsMT09Zi5hcnJD''@;'; put 'put ''aGFuZ2VkW2hdW2RdJiYidXBkYXRlZCI9PWYuY2hBcnJbaF0pKSxmZSgpLFJyKCIgIixmLmRpZmZUYWJsZS5kYXRhW2hdW2FdLCIgIiksZmUoKSx4ZSgibmdJZiIsMT09Zi5hcnJDaGFuZ2VkW2hdW2RdJiYidXBkYXRlZCI9PWYuY2hBcnJbaF0pfX1mdW5jdGlvbiBEYnQoYyxsKXtpZigxJmMm''@;'; put 'put ''JihsaSgwKSxndCgxLGtidCwzLDUsInRkIiw4MyksY2koKSksMiZjKXtjb25zdCBhPU9lKCkuaW5kZXgsZD1PZSg0KTtmZSgpLHhlKCJuZ0Zvck9mIixkLnJvd0tleXNbYV0pfX1mdW5jdGlvbiBJYnQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ZCIsNCksTGUoMSksaGUoKSksMiZjKXtjb25zdCBh''@;'; put 'put ''PWwuJGltcGxpY2l0LGQ9T2UoMikuaW5kZXgsaD1PZSg0KTtmZSgpLFJyKCIgIixoLmRpZmZUYWJsZS5kYXRhW2RdW2FdLCIgIil9fWZ1bmN0aW9uIFJidChjLGwpe2lmKDEmYyYmKGxpKDApLGd0KDEsSWJ0LDIsMSwidGQiLDQ3KSxjaSgpKSwyJmMpe2NvbnN0IGE9T2UoKS5pbmRleCxkPU9l''@;'; put 'put ''KDQpO2ZlKCkseGUoIm5nRm9yT2YiLGQucm93S2V5c1thXSl9fWZ1bmN0aW9uIExidChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIiw4MiksZ3QoMSxEYnQsMiwxLCJuZy1jb250YWluZXIiLDgpKDIsUmJ0LDIsMSwibmctY29udGFpbmVyIiw4KSxoZSgpKSwyJmMpe2NvbnN0IGE9bC5pbmRleCxk''@;'; put 'put ''PU9lKDQpO3hlKCJuZ0NsYXNzIixmTSgzLGs2ZSwiYWRkZWQiPT1kLmNoQXJyW2FdLCJkZWxldGVkIj09ZC5jaEFyclthXSwidXBkYXRlZCI9PWQuY2hBcnJbYV0pKSxmZSgpLHhlKCJuZ0lmIiwidXBkYXRlZCI9PT1kLmNoQXJyW2FdKSxmZSgpLHhlKCJuZ0lmIiwidXBkYXRlZCIhPT1kLmNo''@;'; put 'put ''QXJyW2FdKX19ZnVuY3Rpb24gT2J0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2IiwyOSkoMSwiZGl2IiwzMCkoMiwiZGl2IiwzMSkoMywiZGl2IiwzMikoNCwic3BhbiIsMzMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMykuZ29Ub0FwcHJv''@;'; put 'put ''dmFsc0xpc3QoKSl9KSxHdCg1LCJjbHItaWNvbiIsMzQpLExlKDYsIkJhY2sgdG8gYXBwcm92YWxzIGxpc3QgIiksaGUoKSgpLGRlKDcsImRpdiIsMzUpKDgsImgzIiwzNiksTGUoOSksaGUoKSgpLGRlKDEwLCJkaXYiLDM3KSgxMSwiYSIsMzgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gd3QoYSksQ3QoT2UoMykuZ2V0RGV0YWlscygpKX0pLEd0KDEyLCJjbHItaWNvbiIsMzkpLGhlKCkoKSgpLGRlKDEzLCJwIiw0MCksTGUoMTQpLGhlKCkoKSxkZSgxNSwiZGl2Iiw0MSksZ3QoMTYsU2J0LDQxLDExLCJkaXYiLDQyKSxoZSgpLGd0KDE3LHhidCw0LDEsImRpdiIsNDMpLGRl''@;'; put 'put ''KDE4LCJkaXYiLDQ0KSxndCgxOSxFYnQsMiwwLCJwIiw0NSksZGUoMjAsInRhYmxlIiwzKSgyMSwidGhlYWQiKSgyMiwidHIiLDQ2KSxndCgyMyxUYnQsMiwxLCJ0aCIsNDcpLGhlKCkoKSxkZSgyNCwidGJvZHkiKSxndCgyNSxMYnQsMyw3LCJ0ciIsNDgpLGhlKCkoKSgpKCl9aWYoMiZjKXtj''@;'; put 'put ''b25zdCBhPU9lKDMpO2ZlKDkpLFJyKCIgIixudWxsPT1hLmpzUGFyYW1zP251bGw6YS5qc1BhcmFtcy5UQUJMRV9OTSwiICIpLGZlKDUpLFJyKCIgIixudWxsPT1hLmpzUGFyYW1zP251bGw6YS5qc1BhcmFtcy5UQUJMRV9ERVNDLCIgIiksZmUoMikseGUoIm5nSWYiLGEubG9hZGVkKSxmZSgp''@;'; put 'put ''LHhlKCJuZ0lmIiwhYS5sb2FkaW5nVGFibGUpLGZlKDIpLHhlKCJuZ0lmIixhLmxvYWRpbmdUYWJsZSYmYS5ub0NoYW5nZXMpLGZlKDQpLHhlKCJuZ0Zvck9mIixhLnJvd0hlYWRlciksZmUoMikseGUoIm5nRm9yT2YiLGEucm93S2V5cyl9fWZ1bmN0aW9uIFBidChjLGwpe2lmKDEmYyYmKGRl''@;'; put 'put ''KDAsImRpdiIsMjcpLGd0KDEsT2J0LDI2LDcsImRpdiIsMjgpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLHhlKCJuZ0lmIixhLmxvYWRlZCl9fWZ1bmN0aW9uIEZidChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDc5KSxMZSgxLCIgTG9hZGluZy4uLiAiKSxoZSgpKX1mdW5jdGlvbiBI''@;'; put 'put ''YnQoYyxsKXsxJmMmJihkZSgwLCJkaXYiKSgxLCJoMyIpLExlKDIsIkxvYWRpbmcgcHJldmlldyIpLGhlKCkoKSl9ZnVuY3Rpb24gTmJ0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw4NyksZ3QoMSxGYnQsMiwwLCJzcGFuIiw4OCkoMixIYnQsMywwLCJkaXYiLDgpLGhlKCkpLDImYyl7Y29u''@;'; put 'put ''c3QgYT1PZSgyKTtmZSgpLHhlKCJuZ0lmIiwhYS5sb2FkZWQpLGZlKCkseGUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIFZidChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMjMpLGd0KDEsUGJ0LDIsMSwiZGl2IiwyNCksZGUoMiwiZGl2IiwyNSksZ3QoMyxOYnQsMywyLCJkaXYiLDI2''@;'; put 'put ''KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKCkseGUoIm5nSWYiLGEubG9hZGVkKSxmZSgyKSx4ZSgibmdJZiIsIWEubG9hZGVkKX19ZnVuY3Rpb24gQmJ0KGMsbCl7MSZjJiYoZGUoMCwic3BhbiIsNzYpLEd0KDEsImNsci1pY29uIiw3NyksTGUoMiwiIE9ubHkgdGhlIGZpcnN0IDEw''@;'; put 'put ''MCBpbnNlcnRzLCB1cGRhdGVzIG9yIGRlbGV0ZXMgYXJlIGRpc3BsYXllZCAiKSxoZSgpKX1mdW5jdGlvbiBqYnQoYyxsKXsxJmMmJkd0KDAsImRpdiIsNDkpfWZ1bmN0aW9uIHpidChjLGwpezEmYyYmKGRlKDAsImRpdiIsNzUpKDEsInAiLDgxKSxMZSgyLCJMb2FkaW5nIHRhYmxlIiksaGUo''@;'; put 'put ''KSgpKX1mdW5jdGlvbiBVYnQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDEwNCkoMSwic3BhbiIsNzkpLExlKDIsIiBMb2FkaW5nLi4uICIpLGhlKCksZ3QoMyx6YnQsMywwLCJkaXYiLDgwKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoNCk7ZmUoMykseGUoIm5nSWYiLCFhLmxvYWRpbmdUYWJs''@;'; put 'put ''ZSl9fWZ1bmN0aW9uIFpidChjLGwpe2lmKDEmYyYmKGRlKDAsInRoIiw0KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSxfcihhKX19ZnVuY3Rpb24gV2J0KGMsbCl7aWYoMSZjJiYoZGUoMCwic3BhbiIsODYpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgp''@;'; put 'put ''LmluZGV4LGQ9T2UoMikuaW5kZXgsaD1PZSg0KTtmZSgpLFJyKCJPcmlnaW5hbCB2YWx1ZSBpczogIixoLmFyck9mQ2hhbmdlc1tkXVthXSwiIil9fWZ1bmN0aW9uIFlidChjLGwpe2lmKDEmYyYmKGRlKDAsInRkIiw4NCksTGUoMSksZ3QoMixXYnQsMiwxLCJzcGFuIiw4NSksaGUoKSksMiZj''@;'; put 'put ''KXtjb25zdCBhPWwuJGltcGxpY2l0LGQ9bC5pbmRleCxoPU9lKDIpLmluZGV4LGY9T2UoNCk7eGUoIm5nQ2xhc3MiLG5wKDMsRDZlLDE9PWYuYXJyQ2hhbmdlZFtoXVtkXSYmInVwZGF0ZWQiPT1mLmNoQXJyW2hdKSksZmUoKSxScigiICIsZi5kaWZmVGFibGUuZGF0YVtoXVthXSwiICIpLGZl''@;'; put 'put ''KCkseGUoIm5nSWYiLDE9PWYuYXJyQ2hhbmdlZFtoXVtkXSYmInVwZGF0ZWQiPT1mLmNoQXJyW2hdKX19ZnVuY3Rpb24gR2J0KGMsbCl7aWYoMSZjJiYobGkoMCksZ3QoMSxZYnQsMyw1LCJ0ZCIsODMpLGNpKCkpLDImYyl7Y29uc3QgYT1PZSgpLmluZGV4LGQ9T2UoNCk7ZmUoKSx4ZSgibmdG''@;'; put 'put ''b3JPZiIsZC5yb3dLZXlzW2FdKX19ZnVuY3Rpb24gJGJ0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGQiLDQpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdCxkPU9lKDIpLmluZGV4LGg9T2UoNCk7ZmUoKSxScigiICIsaC5kaWZmVGFibGUuZGF0YVtkXVthXSwiICIpfX1mdW5j''@;'; put 'put ''dGlvbiBLYnQoYyxsKXtpZigxJmMmJihsaSgwKSxndCgxLCRidCwyLDEsInRkIiw0NyksY2koKSksMiZjKXtjb25zdCBhPU9lKCkuaW5kZXgsZD1PZSg0KTtmZSgpLHhlKCJuZ0Zvck9mIixkLnJvd0tleXNbYV0pfX1mdW5jdGlvbiBxYnQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIsODIpLGd0''@;'; put 'put ''KDEsR2J0LDIsMSwibmctY29udGFpbmVyIiw4KSgyLEtidCwyLDEsIm5nLWNvbnRhaW5lciIsOCksaGUoKSksMiZjKXtjb25zdCBhPWwuaW5kZXgsZD1PZSg0KTt4ZSgibmdDbGFzcyIsZk0oMyxrNmUsImFkZGVkIj09ZC5jaEFyclthXSwiZGVsZXRlZCI9PWQuY2hBcnJbYV0sInVwZGF0ZWQi''@;'; put 'put ''PT1kLmNoQXJyW2FdKSksZmUoKSx4ZSgibmdJZiIsInVwZGF0ZWQiPT09ZC5jaEFyclthXSksZmUoKSx4ZSgibmdJZiIsInVwZGF0ZWQiIT09ZC5jaEFyclthXSl9fWZ1bmN0aW9uIFhidChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsOTMpKDEsImRpdiIsOTQpKDIsImRp''@;'; put 'put ''diIsMzEpKDMsImRpdiIsMzIpKDQsInNwYW4iLDk1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDMpLmdvVG9TdWJtaXRMaXN0KCkpfSksR3QoNSwiY2RzLWljb24iLDk2KSxMZSg2LCJCYWNrIHRvIHN1Ym1pdHRlZCBsaXN0ICIpLGhlKCkoKSxkZSg3LCJkaXYi''@;'; put 'put ''LDk3KSg4LCJoMyIsOTgpLExlKDkpLGhlKCkoKSxkZSgxMCwiZGl2IiwzNykoMTEsImEiLDM4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDMpLnRhYmxlRmxhZz0hMCl9KSxHdCgxMiwiY2xyLWljb24iLDM5KSxoZSgpKCkoKSxkZSgxMywicCIsOTkpLExlKDE0''@;'; put 'put ''KSxoZSgpKCksZGUoMTUsImRpdiIsNTApKDE2LCJkaXYiLDUxKSgxNywiZGl2Iiw3MykoMTgsInNwYW4iKSxMZSgxOSwiVGFibGUgSWQ6IiksaGUoKSxkZSgyMCwic3Ryb25nIiw3NCkoMjEsInNwYW4iKSxMZSgyMiksaGUoKSgpKCksZGUoMjMsImRpdiIpKDI0LCJzcGFuIiksTGUoMjUsIlN1''@;'; put 'put ''Ym1pdHRlZCBvbjoiKSxoZSgpLGRlKDI2LCJzcGFuIiw3NSksTGUoMjcpLGhlKCkoKSxkZSgyOCwiZGl2IikoMjksInNwYW4iKSxMZSgzMCwiU3VibWl0IE1lc3NhZ2U6IiksaGUoKSxkZSgzMSwic3BhbiIpLExlKDMyKSxoZSgpKCkoKSxkZSgzMywiZGl2Iiw1MikoMzQsImRpdiIsNTMpKDM1''@;'; put 'put ''LCJkaXYiLDU0KSgzNiwiZGl2Iiw1NSkoMzcsImJ1dHRvbiIsNTYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDMpO3JldHVybiBDdChoLmdvVG9CYXNlKGguc3ViT2JqLmJhc2UpKX0pLExlKDM4LCIgVmlldyBiYXNlIHRhYmxlICIpLGhlKCksZGUoMzksImJ1dHRv''@;'; put 'put ''biIsNTcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDMpO3JldHVybiBDdChoLmdldFRhYmxlKGguc3ViT2JqLnRhYmxlSWQpKX0pLExlKDQwLCIgVmlldyBzdGFnZWQgZGF0YSAiKSxoZSgpLGRlKDQxLCJidXR0b24iLDU4KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7''@;'; put 'put ''d3QoYSk7Y29uc3QgaD1PZSgzKTtyZXR1cm4gQ3QoaC5nb0JhY2soaC5zdWJPYmouYmFzZSkpfSksTGUoNDIsIiBFZGl0IGJhc2UgdGFibGUgIiksaGUoKSgpKCkoKSxkZSg0MywiZGl2Iiw2NSksZ3QoNDQsQmJ0LDMsMCwic3BhbiIsNjYpLGRlKDQ1LCJkaXYiLDMxKSg0NiwiZGl2Iiw2Nyko''@;'; put 'put ''NDcsInNwYW4iLDY4KSxMZSg0OCwiIENoYW5nZWQgUm93cyAiKSxkZSg0OSwic3BhbiIsNjkpLExlKDUwKSxoZSgpKCksZGUoNTEsInNwYW4iLDcwKSxMZSg1MiwiIEFkZGVkIFJvd3MgIiksZGUoNTMsInNwYW4iLDY5KSxMZSg1NCksaGUoKSgpLGRlKDU1LCJzcGFuIiw3MSksTGUoNTYsIiBE''@;'; put 'put ''ZWxldGVkIFJvd3MgIiksZGUoNTcsInNwYW4iLDY5KSxMZSg1OCksaGUoKSgpKCkoKSgpLGRlKDU5LCJkaXYiLDUzKSg2MCwiY2xyLXRvZ2dsZS1jb250YWluZXIiLDEwMCkoNjEsImNsci10b2dnbGUtd3JhcHBlciIpKDYyLCJpbnB1dCIsNjMpLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlv''@;'; put 'put ''bihoKXt3dChhKTtjb25zdCBmPU9lKDMpO3JldHVybiB2aShmLmZvcm1hdHRlZFZhbHVlcyxoKXx8KGYuZm9ybWF0dGVkVmFsdWVzPWgpLEN0KGgpfSksRnQoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMykuZm9ybWF0dGluZ0NoYW5nZWQoKSl9KSxoZSgpLGRlKDYz''@;'; put 'put ''LCJsYWJlbCIpLExlKDY0KSxoZSgpKCkoKSgpKCkoKSxkZSg2NSwiZGl2IiwxMDEpLGd0KDY2LGpidCwxLDAsImRpdiIsNDIpLGhlKCksZ3QoNjcsVWJ0LDQsMSwiZGl2IiwxMDIpLGRlKDY4LCJkaXYiLDEwMykoNjksInRhYmxlIiwzKSg3MCwidGhlYWQiKSg3MSwidHIiLDQ2KSxndCg3Mixa''@;'; put 'put ''YnQsMiwxLCJ0aCIsNDcpLGhlKCkoKSxkZSg3MywidGJvZHkiKSxndCg3NCxxYnQsMyw3LCJ0ciIsNDgpLGhlKCkoKSgpKCl9aWYoMiZjKXtjb25zdCBhPU9lKDMpO2ZlKDkpLFJyKCIgIixhLnN1Yk9iai5iYXNlLCIgIiksZmUoNSksUnIoIiAiLGEudGFibGVEZXNjcmlwdGlvbiwiICIpLGZl''@;'; put 'put ''KDYpLHhlKCJyb3V0ZXJMaW5rIiwiL3N0YWdlLyIrYS5zdWJPYmoudGFibGVJZCksZmUoMiksUnIoIiAiLGEuc3ViT2JqLnRhYmxlSWQsIiIpLGZlKDUpLFJyKCIgIixhLnN1Yk9iai5zdWJtaXR0ZWQsIiAiKSxmZSg1KSxScigiICIsYS5zdWJPYmouc3VibWl0UmVhc29uLCIgIiksZmUoMTIp''@;'; put 'put ''LHhlKCJuZ0lmIixhLmRpZmZzTGltaXQpLGZlKDYpLF9yKGEubGVucy51cGRhdGVkKSxmZSg0KSxfcihhLmxlbnMubmV3KSxmZSg0KSxfcihhLmxlbnMuZGVsZXRlZCksZmUoNCksZmkoIm5nTW9kZWwiLGEuZm9ybWF0dGVkVmFsdWVzKSxmZSgyKSxfcihhLmZvcm1hdHRlZFZhbHVlcz8iRm9y''@;'; put 'put ''bWF0dGVkIjoiVW5mb3JtYXR0ZWQiKSxmZSgyKSx4ZSgibmdJZiIsYS5sb2FkZWQpLGZlKCkseGUoIm5nSWYiLCFhLmxvYWRpbmdUYWJsZSksZmUoNSkseGUoIm5nRm9yT2YiLGEucm93SGVhZGVyKSxmZSgyKSx4ZSgibmdGb3JPZiIsYS5yb3dLZXlzKX19ZnVuY3Rpb24gSmJ0KGMsbCl7aWYo''@;'; put 'put ''MSZjJiYoZGUoMCwiZGl2Iiw5MSksZ3QoMSxYYnQsNzUsMTYsImRpdiIsOTIpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgpLHhlKCJuZ0lmIixhLmxvYWRlZCl9fWZ1bmN0aW9uIFFidChjLGwpezEmYyYmKGRlKDAsImRpdiIpKDEsImgzIiksTGUoMiwiTG9hZGluZyBzdWJtaXR0ZWQg''@;'; put 'put ''dGFibGUiKSxoZSgpKCkpfWZ1bmN0aW9uIGV5dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTA1KSgxLCJkaXYiLDEwNikoMiwic3BhbiIsNzkpLExlKDMsIiBMb2FkaW5nLi4uICIpLGhlKCksZ3QoNCxRYnQsMywwLCJkaXYiLDgpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDQp''@;'; put 'put ''LHhlKCJuZ0lmIiwhYS5sb2FkZWQpfX1mdW5jdGlvbiB0eXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSxndCgxLEpidCwyLDEsImRpdiIsODkpKDIsZXl0LDUsMSwiZGl2Iiw5MCksaGUoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSx4ZSgibmdJZiIsYS5sb2FkZWQpLGZlKCkseGUoIm5n''@;'; put 'put ''SWYiLCFhLmxvYWRlZCl9fWxldCBJNmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLnNhc1N0b3JlU2VydmljZT1hLHRoaXMuZXZlbnRTZXJ2aWNlPWQsdGhpcy5yb3V0ZXI9aCx0aGlzLnJvdXRlPWYsdGhpcy5kZXRhaWxzT3Blbj0hMSx0aGlzLnJlamVjdE9wZW49''@;'; put 'put ''ITEsdGhpcy5sZW5zPXtuZXc6MCx1cGRhdGVkOjAsZGVsZXRlZDowfSx0aGlzLmxvYWRlZD0hMSx0aGlzLmxvYWRpbmdUYWJsZT0hMSx0aGlzLnN1Ym1pdFJlYXNvbj0iIix0aGlzLmluc3RhbmNlPSJob3RJbnN0YW5jZSIsdGhpcy5hY2NlcHRMb2FkaW5nPSExLHRoaXMucmVqZWN0TG9hZGlu''@;'; put 'put ''Zz0hMSx0aGlzLnN1Ym1pdHRlZD0hMSx0aGlzLnRhYmxlRmxhZz0hMSx0aGlzLnJvd0tleXM9W10sdGhpcy5jaEFycj1bXSx0aGlzLnNlY29uZE9wZW49ITEsdGhpcy5mb3JtYXR0ZWRWYWx1ZXM9ITAsdGhpcy5jaGFuZ2VzQXJyPVtdLHRoaXMuZGlmZlRhYmxlPXtkYXRhOltdfSx0aGlzLmRp''@;'; put 'put ''ZmZzTGltaXQ9ITEsdGhpcy5yZWNvcmRzTGltaXQ9MTAwfWdldCBub0NoYW5nZXMoKXtyZXR1cm4gMD09PXRoaXMubGVucy5uZXcmJjA9PT10aGlzLmxlbnMudXBkYXRlZCYmMD09PXRoaXMubGVucy5kZWxldGVkfWdvVG9CYXNlKGEpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3ZpZXcv''@;'; put 'put ''ZGF0YS8iK2EpfWdvVG9BcHByb3ZhbHNMaXN0KCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L2FwcHJvdmUiKX1nZXRUYWJsZShhKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9zdGFnZS8iK2EpfWdvQmFjayhhKXt0aGlzLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9lZGl0''@;'; put 'put ''b3IvIithKX1nb1RvVmlld2VyKCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9kYXRhIil9c2hvd0RldGFpbHNTZWxlY3QoYSl7YS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMudGFibGVGbGFnPSF0aGlzLnRhYmxlRmxhZ31nZXREZXRhaWxzKCl7dGhpcy5kZXRhaWxzT3Blbj0hMH1v''@;'; put 'put ''bkhvdFNlbGVjdGlvbihhKXt0aGlzLmhvdFNlbGVjdGlvbj1hLnNsaWNlKDAsNCl9b25Ib3REZXNlbGVjdCgpe3NldFRpbWVvdXQoKCk9Pnt0aGlzLmhvdFNlbGVjdGlvbj1udWxsfSwxMDApfXJlamVjdGluZygpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2EucmVqZWN0TG9h''@;'; put 'put ''ZGluZz0hMCxhLnN1Ym1pdFJlYXNvbj1hLnN1Ym1pdFJlYXNvbi5yZXBsYWNlKC9cbi9nLCIuICIpO2xldCBkPXtTVFBfQUNUSU9OOiJSRUpFQ1RfVEFCTEUiLFRBQkxFOmEudGFibGVJZCxTVFBfUkVBU09OOmEuc3VibWl0UmVhc29ufTt5aWVsZCBhLnNhc1N0b3JlU2VydmljZS5yZWplY3Rp''@;'; put 'put ''bmcoZCwiQnJvd3NlclBhcmFtcyIsImFwcHJvdmVycy9yZWplY3Rpb24iKS50aGVuKGg9PnthLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9yZXZpZXcvaGlzdG9yeSIpfSkuY2F0Y2goaD0+e2EuYWNjZXB0TG9hZGluZz0hMSxhLnJlamVjdExvYWRpbmc9ITF9KX0pKCl9YXBwcm92ZVRhYmxlKCl7''@;'; put 'put ''dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5hY2NlcHRMb2FkaW5nPSEwO2xldCBkPXtBQ1RJT046IkFQUFJPVkVfVEFCTEUiLFRBQkxFOmEudGFibGVJZCxESUZGVElNRTphLnBhcmFtcz8uRElGRlRJTUUsTElCRFM6YS5wYXJhbXM/LkxJQkRTfTt5aWVsZCBhLnNhc1N0b3Jl''@;'; put 'put ''U2VydmljZS5hcHByb3ZlVGFibGUoZCwiU0FTQ29udHJvbFRhYmxlIiwiYXVkaXRvcnMvcG9zdGRhdGEiKS50aGVuKGg9PnthLnJvdXRlLm5hdmlnYXRlQnlVcmwoIi9yZXZpZXcvaGlzdG9yeSIpfSkuY2F0Y2goaD0+e2EuYWNjZXB0TG9hZGluZz0hMX0pfSkoKX1nb1RvU3VibWl0TGlzdCgp''@;'; put 'put ''e3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3Jldmlldy9zdWJtaXR0ZWQiKX1jYWxsQ2hhbmdlc0luZm8oYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7eWllbGQgZC5zYXNTdG9yZVNlcnZpY2UuZ2V0Q2hhbmdlSW5mbyhhKS50aGVuKGg9PntkLnRhYmxlRGV0YWlscz1o''@;'; put 'put ''LmpzcGFyYW1zWzBdLGQuanNQYXJhbXM9aC5qc3BhcmFtc1swXTtsZXQgZj1bXTtmb3IoY29uc3QgdiBpbiBkLmpzUGFyYW1zKWQuanNQYXJhbXMuaGFzT3duUHJvcGVydHkodikmJmYucHVzaCh2KTtkLmtleXNBcnJheT1mfSkuY2F0Y2goaD0+e2QuYWNjZXB0TG9hZGluZz0hMX0pLmZpbmFs''@;'; put 'put ''bHkoKCk9PntkLmxvYWRlZD0hMH0pfSkoKX1mb3JtYXR0aW5nQ2hhbmdlZCgpe3RoaXMuY2FsY0RpZmYoKX1jYWxjRGlmZigpe2lmKCF0aGlzLnJlc3BvbnNlKXJldHVybjtsZXQgYT10aGlzLnJlc3BvbnNlLm5ldyxkPXRoaXMucmVzcG9uc2UudXBkYXRlcyxoPXRoaXMucmVzcG9uc2UuZGVs''@;'; put 'put ''ZXRlZCxmPXRoaXMucmVzcG9uc2Uub3JpZ2luYWxzO3RoaXMuZm9ybWF0dGVkVmFsdWVzJiYoYT10aGlzLnJlc3BvbnNlLmZtdF9uZXcsZD10aGlzLnJlc3BvbnNlLmZtdF91cGRhdGVzLGg9dGhpcy5yZXNwb25zZS5mbXRfZGVsZXRlZCxmPXRoaXMucmVzcG9uc2UuZm10X29yaWdpbmFscyks''@;'; put 'put ''dGhpcy5vcmlnaW5hbHM9Zix0aGlzLnJvd0tleXM9W107Zm9yKGxldCBtdD0wO210PGQubGVuZ3RoO210Kyspe2xldCBKdD1PYmplY3Qua2V5cyhkW210XSk7Zm9yKGxldCB5bj0wO3luPEp0Lmxlbmd0aDt5bisrKWRbbXRdW0p0W3luXV0hPT1mW210XVtKdFt5bl1dJiZ0aGlzLmNoYW5nZXNB''@;'; put 'put ''cnIucHVzaCh7aW5kOm10LGZpZWxkOkp0W3luXSxwcm9wOmRbbXRdW0p0W3luXV0sb3JpZ2luYWw6ZlttdF1bSnRbeW5dXX0pfXRoaXMubGVucz17bmV3OnRoaXMucGFyYW1zPy5OVU1fQURERUR8fDAsdXBkYXRlZDp0aGlzLnBhcmFtcz8uTlVNX1VQREFURUR8fDAsZGVsZXRlZDp0aGlzLnBh''@;'; put 'put ''cmFtcz8uTlVNX0RFTEVURUR8fDB9O2xldCBaPVtdLG5lPWQuY29uY2F0KGEsaCk7Zm9yKGxldCBtdD0wO210PHRoaXMucmVzcG9uc2UuY29scy5sZW5ndGg7bXQrKylaLnB1c2godGhpcy5yZXNwb25zZS5jb2xzW210XS5OQU1FKTtsZXQgY2U9dGhpcy5sZW5zLm5ldz50aGlzLnJlY29yZHNM''@;'; put 'put ''aW1pdD90aGlzLnJlY29yZHNMaW1pdDp0aGlzLmxlbnMubmV3LGJlPXRoaXMubGVucy51cGRhdGVkPnRoaXMucmVjb3Jkc0xpbWl0P3RoaXMucmVjb3Jkc0xpbWl0OnRoaXMubGVucy51cGRhdGVkO3RoaXMuZGlmZnNMaW1pdD10aGlzLmxlbnMubmV3PnRoaXMucmVjb3Jkc0xpbWl0fHx0aGlz''@;'; put 'put ''LmxlbnMudXBkYXRlZD50aGlzLnJlY29yZHNMaW1pdHx8dGhpcy5sZW5zLmRlbGV0ZWQ+dGhpcy5yZWNvcmRzTGltaXQsdGhpcy5hZGRDb3VudD1jZTtsZXQgQmU9W10scWU9W107Zm9yKGxldCBtdD0wO210PFoubGVuZ3RoO210KyspcWUucHVzaCh7ZGF0YTpaW210XSxyZWFkT25seTohMH0p''@;'; put 'put ''O3RoaXMuZGlmZlRhYmxlLmRhdGE9bmU7Zm9yKGxldCBtdD0wO210PG5lLmxlbmd0aDttdCsrKXtsZXQgeW49T2JqZWN0LmtleXMobmVbbXRdKTt0aGlzLnJvd0tleXMucHVzaCh5bil9bGV0IG50PVtdLGx0PVtdO2ZvcihsZXQgbXQ9MDttdDx0aGlzLmRpZmZUYWJsZS5kYXRhLmxlbmd0aDtt''@;'; put 'put ''dCsrKXtpZihtdDxiZSYmMCE9PWJlKXtudC5wdXNoKFtdKSxsdC5wdXNoKFtdKSxCZS5wdXNoKCJ1cGRhdGVkIik7bGV0IEp0PU9iamVjdC5rZXlzKHRoaXMuZGlmZlRhYmxlLmRhdGFbbXRdKTtmb3IobGV0IHluPTA7eW48SnQubGVuZ3RoO3luKyspe2xldCBDbj1KdFt5bl07ZlttdF1bQ25d''@;'; put 'put ''IT09ZFttdF1bQ25dPyhudFttdF0ucHVzaCghMCksbHRbbXRdLnB1c2goZlttdF1bQ25dKSk6KG50W210XS5wdXNoKCExKSxsdFttdF0ucHVzaChudWxsKSl9dGhpcy5hcnJDaGFuZ2VkPW50LHRoaXMuYXJyT2ZDaGFuZ2VzPWx0fW10Pj1iZSYmbXQ8YmUrY2UmJkJlLnB1c2goImFkZGVkIiks''@;'; put 'put ''bXQ+Y2UrYmUtMSYmQmUucHVzaCgiZGVsZXRlZCIpfXRoaXMuY2hBcnI9QmUsdGhpcy5yb3dIZWFkZXI9dGhpcy5yb3dLZXlzWzBdLHRoaXMuZGlmZlRhYmxlLmRhdGE9bmV9bmdBZnRlclZpZXdJbml0KCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aWYoYS5fZGV0YWlsc1N1''@;'; put 'put ''Yj1hLnNhc1N0b3JlU2VydmljZS5zdWJtaXR0RGV0YWlsLnN1YnNjcmliZShmdW5jdGlvbigpe3ZhciBoPWVlKGZ1bmN0aW9uKihmKXthLnN1Yk9iaj1mLnZpZXdEYXRhLGEudGFibGVJZD1mLnZpZXdEYXRhLnRhYmxlSWQsYS5zdWJtaXR0ZWQ9Zi52aWV3RGF0YS5zdWIsYS5zdWJtaXREZXRh''@;'; put 'put ''aWxzPWYuZGF0YSxhLnN1Ym1pdEFycj1bXTtmb3IobGV0IE0gaW4gYS5zdWJtaXREZXRhaWxzKSJzdWIiIT09TSYmYS5zdWJtaXRBcnIucHVzaChNKTtsZXQgdj17QUNUSU9OOiJTSE9XX0RJRkZTIixUQUJMRTphLnRhYmxlSWQsRElGRlRJTUU6KG5ldyBEYXRlKS50b1VUQ1N0cmluZygpfTth''@;'; put 'put ''LnNhc1N0b3JlU2VydmljZS5zaG93RGlmZnModiwiU0FTQ29udHJvbFRhYmxlIiwiYXVkaXRvcnMvcG9zdGRhdGEiKS50aGVuKE09PnthLnBhcmFtcz1NLnBhcmFtc1swXSxhLnJlc3BvbnNlPU0sYS5jYWxjRGlmZigpfSkuY2F0Y2goTT0+TSkuZmluYWxseSgoKT0+e2EubG9hZGluZ1RhYmxl''@;'; put 'put ''PSEwfSksYS5jYWxsQ2hhbmdlc0luZm8oYS50YWJsZUlkKX0pO3JldHVybiBmdW5jdGlvbihmKXtyZXR1cm4gaC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSx0eXBlb2YgYS5yb3V0ZXIuc25hcHNob3QucGFyYW1zLnRhYmxlSWQ+InUiKXJldHVybjthLnRhYmxlSWQ9YS5yb3V0ZXIuc25h''@;'; put 'put ''cHNob3QucGFyYW1zLnRhYmxlSWQ7bGV0IGQ9e0FDVElPTjoiU0hPV19ESUZGUyIsVEFCTEU6YS50YWJsZUlkLERJRkZUSU1FOihuZXcgRGF0ZSkudG9VVENTdHJpbmcoKX07YS5zYXNTdG9yZVNlcnZpY2Uuc2hvd0RpZmZzKGQsIlNBU0NvbnRyb2xUYWJsZSIsImF1ZGl0b3JzL3Bvc3RkYXRh''@;'; put 'put ''IikudGhlbihoPT57YS5wYXJhbXM9aC5wYXJhbXNbMF0sYS5yZXNwb25zZT1oLGEuY2FsY0RpZmYoKX0pLmNhdGNoKGg9PnthLmFjY2VwdExvYWRpbmc9ITF9KS5maW5hbGx5KCgpPT57YS5sb2FkaW5nVGFibGU9ITAsYS5zZXRGb2N1cygpfSksYS5jYWxsQ2hhbmdlc0luZm8oYS50YWJsZUlk''@;'; put 'put ''KX0pKCl9bmdPbkRlc3Ryb3koKXt0aGlzLl9kZXRhaWxzU3ViJiZ0aGlzLl9kZXRhaWxzU3ViLnVuc3Vic2NyaWJlKCl9c2V0Rm9jdXMoKXtzZXRUaW1lb3V0KCgpPT57bGV0IGE9d2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJhY2NlcHRCdG4iKTthJiZhLmZvY3VzKCl9LDIwMCl9''@;'; put 'put ''c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoVmgpLEdlKHBjKSxHZShDdSksR2UoTHMpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1hcHByb3ZlLWRldGFpbHMiXV0saG9zdEF0dHJzOlsxLCJj''@;'; put 'put ''b250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjQyLHZhcnM6MTIsY29uc3RzOltbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxbMSwidGFibGUiXSxbMSwibGVmdCJdLFs0LCJuZ0ZvciIsIm5nRm9yT2YiXSxb''@;'; put 'put ''MSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbNCwibmdJZiJdLFsxLCJmb3JtLWJsb2NrIl0sWzEsImZvcm0tZ3JvdXAiXSxbImZvciIsImZvcm1GaWVsZHNfOCJdLFsiaWQiLCJmb3JtRmllbGRzXzgi''@;'; put 'put ''LCJyb3dzIiwiNSIsMSwidy0xMDAiLDMsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIiwibmdNb2RlbE9wdGlvbnMiLCJpbm5lckhUTUwiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsidHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwiYnRuLXN1Y2Nl''@;'; put 'put ''c3Mtb3V0bGluZSIsMywiY2xpY2siLCJjbHJMb2FkaW5nIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJjYXJkIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImxlZnQgbGluay1pdCIsMywicm91dGVyTGluayIsNCwibmdJZiJdLFsiY2xhc3MiLCJsZWZ0Iiw0LCJuZ0lmIl0sWzEsImxlZnQi''@;'; put 'put ''LCJsaW5rLWl0IiwzLCJyb3V0ZXJMaW5rIl0sWyJjbHJUYWJMaW5rIiwiIl0sWzQsImNscklmQWN0aXZlIl0sWzEsIm92ZXJmbG93LWF1dG8iXSxbMSwiY2FyZCJdLFsiY2xhc3MiLCJjYXJkLWhlYWRlciBkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciIsNCwibmdJ''@;'; put 'put ''ZiJdLFsxLCJvdmVyZmxvdy1hdXRvIiwibXItMTIiXSxbImNsYXNzIiwiaC03MHZoIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFsxLCJjYXJkLWhlYWRlciIsImQtZmxleCIsImZsZXgtY29sdW1uIiwianVz''@;'; put 'put ''dGlmeS1jb250ZW50LWNlbnRlciJdLFsiY2xhc3MiLCJtdC0wIiw0LCJuZ0lmIl0sWzEsIm10LTAiXSxbMSwiY2FyZC1oZWFkZXIiLCJwLTAiXSxbMSwiY2xyLXJvdyJdLFsxLCJjbHItY29sLW1kLTQiLCJhcHByb3ZhbEJhY2siXSxbMSwiYnRuIiwiYnRuLW91dGxpbmUiLCJtLTAiLDMsImNs''@;'; put 'put ''aWNrIl0sWyJzaGFwZSIsImNhcmV0IiwiZGlyIiwibGVmdCIsInNpemUiLCIyMCJdLFsxLCJjbHItY29sLW1kLTQiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsIm10LTAiLCJmb250LXdlaWdodC0zMDAiXSxbMSwiY2xyLWNvbC1tZC00IiwiYXBwcm92YWxJbmZvIl0s''@;'; put 'put ''WzEsInRvb2x0aXAiLCJ0b29sdGlwLXNtIiwidG9vbHRpcC10b3AtbGVmdCIsMywiY2xpY2siXSxbInNoYXBlIiwiaW5mby1zdGFuZGFyZCIsInNpemUiLCIyOCJdLFsxLCJ0ZXh0LWNlbnRlciIsIm10LTEwIl0sWzEsImNhcmQtYmxvY2siLCJwLTAiXSxbImNsYXNzIiwiY2FyZC10ZXh0Iiw0''@;'; put 'put ''LCJuZ0lmIl0sWyJjbGFzcyIsImgtMjR2aCBkLWZsZXggZmxleC1jb2x1bW4ganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbMSwidGFibGVDb250IiwibXQtMCJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBmb250LXNpemUtMTgiLDQsIm5nSWYi''@;'; put 'put ''XSxbMSwiZC1mbGV4Il0sWyJjbGFzcyIsImxlZnQiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJkLWZsZXgiLDMsIm5nQ2xhc3MiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjYXJkLXRleHQiXSxbMSwiY2xyLXJvdyIsImZvbnQtc2l6ZS0xNSJdLFsxLCJjbHItY29sLW1kLTUi''@;'; put 'put ''XSxbMSwiY2xyLWNvbC1tZC03Il0sWzEsImNhcmQtYmxvY2siLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiLCJtdC0wIl0sWzEsImNsci1yb3ciLCJjbHItZ2FwLTUiLCJjbHItZ2FwLXNtLTAiXSxbMSwiYnRu''@;'; put 'put ''IiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm10LTUiLCJtci01aSIsMywiY2xpY2siXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3Mtb3V0bGluZSIsInRleHQtY2VudGVyIiwibXQtNSIsIm1yLTVpIiwzLCJjbGljayJdLFsxLCJidG4iLCJidG4tc20iLCJi''@;'; put 'put ''dG4taW5mby1vdXRsaW5lIiwidGV4dC1jZW50ZXIiLCJtdC01IiwzLCJjbGljayJdLFsxLCJjYXJkLWJsb2NrIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImNsci1mbGV4LWNvbHVtbiIsImNsci1nYXAtNSIsImNsci1mbGV4LXNtLXJvdyIsImNsci1nYXAtc20tMCIsImNs''@;'; put 'put ''ci1hbGlnbi1pdGVtcy1jZW50ZXIiXSxbImlkIiwiYWNjZXB0QnRuIiwidHlwZSIsInN1Ym1pdCIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLXN1Y2Nlc3MiLCJtci01aSIsMywiY2xpY2siLCJjbHJMb2FkaW5nIiwiZGlzYWJsZWQiXSxbImlkIiwicmVqZWN0QnRuIiwxLCJidG4iLCJidG4tc20i''@;'; put 'put ''LCJidG4iLCJidG4tZGFuZ2VyIiwibXItNWkiLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbMSwibS0wIiwibWwtMjBpIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJUb2dnbGUiLCIiLCJjaGVja2VkIiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwiY2hhbmdlIiwibmdNb2RlbCJdLFsxLCJmb3JtYXR0''@;'; put 'put ''ZWQtdmFsdWVzLXRvZ2dsZSJdLFsxLCJjYXJkLWJsb2NrIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1mbGV4LWNvbHVtbiJdLFsiY2xhc3MiLCJyb3dzLW5vdGljZSIsNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iLCJjbHItZ2FwLTUiLCJj''@;'; put 'put ''bHItZmxleC1zbS1yb3ciLCJjbHItZ2FwLXNtLTAiXSxbMSwibGFiZWwiLCJsYWJlbC13YXJuaW5nIl0sWzEsImJhZGdlIl0sWzEsImxhYmVsIiwibGFiZWwtc3VjY2VzcyJdLFsxLCJsYWJlbCIsImxhYmVsLWRhbmdlciJdLFsxLCJ0ZXh0LWNlbnRlciIsImZvbnQtc2l6ZS0xOCJdLFsxLCJt''@;'; put 'put ''dC0xNSJdLFsxLCJsaW5rLWl0IiwzLCJyb3V0ZXJMaW5rIl0sWzEsIm10LTEwIl0sWzEsInJvd3Mtbm90aWNlIl0sWyJzaGFwZSIsImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIiwxLCJtYi01IiwiY29sb3Itb3JhbmdlIl0sWzEsImgtMjR2aCIsImQtZmxleCIsImZsZXgtY29sdW1uIiwianVzdGlm''@;'; put 'put ''eS1jb250ZW50LWNlbnRlciIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJzcGlubmVyIl0sWyJjbGFzcyIsIm10LTEwIiw0LCJuZ0lmIl0sWyJjZHMtdGV4dCIsInNlY3Rpb24iXSxbMSwiZC1mbGV4IiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIsImxlZnQiLDMsIm5nQ2xhc3MiLDQsIm5nRm9y''@;'; put 'put ''IiwibmdGb3JPZiJdLFsxLCJsZWZ0IiwzLCJuZ0NsYXNzIl0sWyJjbGFzcyIsInRvb2x0aXAtY29udGVudCIsNCwibmdJZiJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbMSwiaC03MHZoIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRl''@;'; put 'put ''bXMtY2VudGVyIl0sWyJjbGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiZC1mbGV4IGZsZXgtY29sdW1uIGp1c3RpZnktY29udGVudC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2FyZC1ibG9jayIsNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiIsImp1''@;'; put 'put ''c3RpZnktY29udGVudC1jZW50ZXIiXSxbImNsYXNzIiwiY2FyZCBtLTAiLDQsIm5nSWYiXSxbMSwiY2FyZCIsIm0tMCJdLFsxLCJjYXJkLWhlYWRlciJdLFsxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbInNoYXBlIiwiYW5nbGUiLCJkaXJlY3Rpb24iLCJsZWZ0Iiwic2l6ZSIs''@;'; put 'put ''IjIwIl0sWzEsImNsci1jb2wtbWQtNCJdLFsxLCJtdC0wIiwiZm9udC13ZWlnaHQtMzAwIiwidGV4dC1jZW50ZXIiXSxbMSwibS0wIiwidGV4dC1jZW50ZXIiLCJjb2xvci1kYXJrZXItZ3JheSJdLFsxLCJtLTAiLCJtbC0yMC1pIl0sWzEsImNhcmQtYmxvY2siLCJwLTAiLCJvdmVyZmxvdy1h''@;'; put 'put ''dXRvIiwibXItMTIiXSxbImNsYXNzIiwiaC0yNXZoIGQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFsxLCJ0YWJsZUNvbnQiXSxbMSwiaC0yNXZoIiwiZC1mbGV4IiwiZmxleC1jb2x1bW4iLCJqdXN0aWZ5LWNv''@;'; put 'put ''bnRlbnQtY2VudGVyIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWzEsImNhcmQtYmxvY2siXSxbMSwibG9hZGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiY2xyLW1vZGFsIiwwKSxwaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gdmkoaC5k''@;'; put 'put ''ZXRhaWxzT3Blbix2KXx8KGguZGV0YWlsc09wZW49diksdn0pLGRlKDEsImgzIiwxKSxMZSgyLCJBcHByb3ZhbCBEZXRhaWxzIiksaGUoKSxkZSgzLCJkaXYiLDIpKDQsInRhYmxlIiwzKSg1LCJ0aGVhZCIpKDYsInRyIikoNywidGgiLDQpLExlKDgsIk5hbWUiKSxoZSgpLGRlKDksInRoIiw0''@;'; put 'put ''KSxMZSgxMCwiVmFsdWUiKSxoZSgpKCkoKSxkZSgxMSwidGJvZHkiKSxndCgxMixnYnQsNSwzLCJ0ciIsNSksaGUoKSgpKCksZGUoMTMsImRpdiIsNikoMTQsImJ1dHRvbiIsNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLmRldGFpbHNPcGVuPSExfSksTGUoMTUsIiBPayAiKSxo''@;'; put 'put ''ZSgpKCkoKSxkZSgxNiwiY2xyLW1vZGFsIiwwKSxwaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gdmkoaC50YWJsZUZsYWcsdil8fChoLnRhYmxlRmxhZz12KSx2fSksZGUoMTcsImgzIiwxKSxMZSgxOCwiQWxsIERldGFpbHMiKSxoZSgpLGRlKDE5LCJkaXYiLDIp''@;'; put 'put ''LGd0KDIwLHlidCwxOSwyLCJjbHItdGFicyIsOCksaGUoKSxkZSgyMSwiZGl2Iiw2KSgyMiwiYnV0dG9uIiw3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgudGFibGVGbGFnPSExfSksTGUoMjMsIiBPayAiKSxoZSgpKCkoKSxkZSgyNCwiY2xyLW1vZGFsIiwwKSxwaSgiY2xyTW9k''@;'; put 'put ''YWxPcGVuQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gdmkoaC5yZWplY3RPcGVuLHYpfHwoaC5yZWplY3RPcGVuPXYpLHZ9KSxkZSgyNSwiaDMiLDEpLExlKDI2LCJSZWFzb24gTWVzc2FnZSIpLGhlKCksZGUoMjcsImRpdiIsMikoMjgsImZvcm0iKSgyOSwic2VjdGlvbiIsOSkoMzAsImRp''@;'; put 'put ''diIsMTApKDMxLCJsYWJlbCIsMTEpLExlKDMyLCJSZWFzb24gZm9yIHJlamVjdGluZz8iKSxoZSgpLGRlKDMzLCJ0ZXh0YXJlYSIsMTIpLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbih2KXtyZXR1cm4gdmkoaC5zdWJtaXRSZWFzb24sdil8fChoLnN1Ym1pdFJlYXNvbj12KSx2fSksaGUo''@;'; put 'put ''KSgpKCkoKSgpLGRlKDM0LCJkaXYiLDYpKDM1LCJidXR0b24iLDEzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgucmVqZWN0T3Blbj0hMX0pLExlKDM2LCIgQ2FuY2VsICIpLGhlKCksZGUoMzcsImJ1dHRvbiIsMTQpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gaC5yZWpl''@;'; put 'put ''Y3RpbmcoKX0pLExlKDM4LCIgT0sgIiksaGUoKSgpKCksZGUoMzksImRpdiIsMTUpLGd0KDQwLFZidCw0LDIsImRpdiIsMTYpKDQxLHR5dCwzLDIsImRpdiIsOCksaGUoKSksMiZkJiYoZmkoImNsck1vZGFsT3BlbiIsaC5kZXRhaWxzT3BlbiksZmUoMTIpLHhlKCJuZ0Zvck9mIixoLmtleXNB''@;'; put 'put ''cnJheSksZmUoNCksZmkoImNsck1vZGFsT3BlbiIsaC50YWJsZUZsYWcpLGZlKDQpLHhlKCJuZ0lmIixoLnRhYmxlRmxhZyksZmUoNCksZmkoImNsck1vZGFsT3BlbiIsaC5yZWplY3RPcGVuKSxmZSg5KSxmaSgibmdNb2RlbCIsaC5zdWJtaXRSZWFzb24pLHhlKCJuZ01vZGVsT3B0aW9ucyIs''@;'; put 'put ''V3MoMTEsaGJ0KSkoImlubmVySFRNTCIsaC5zdWJtaXRSZWFzb24sRjQpLGZlKDQpLHhlKCJjbHJMb2FkaW5nIixoLnJlamVjdExvYWRpbmcpLGZlKDMpLHhlKCJuZ0lmIiwhaC5zdWJtaXR0ZWQpLGZlKCkseGUoIm5nSWYiLGguc3VibWl0dGVkKSl9LGRlcGVuZGVuY2llczpbd3Usc3MseW8s''@;'; put 'put ''bzcsUWwsQjEsUXMscjcsWXMscHAsdTEsT2wsY3Msb3UsS3UsQjAsUnksVDIsdXMsVzEsUHksRGQsdm0seW0sQzcsYm0sbW0sXzddLHN0eWxlczpbJy5sb2FkZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2hlaWdodDo3NXZoO2FsaWdu''@;'; put 'put ''LWl0ZW1zOmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Lm1vZGFsTGFyZ2VbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjUwcmVtIWltcG9ydGFudH0uYWRkZWRSb3dbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgcmdiYSg5LDc3LDExNywuMik7Ym9yZGVyLXJhZGl1''@;'; put 'put ''czo1cHh9LmRlbGV0ZWRSb3dbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgcmdiYSg3MCw3MSw3MCwuMik7Ym9yZGVyLXJhZGl1czo1cHh9ICBib2R5W2Nkcy10aGVtZT1kYXJrXSB0YWJsZSAudXBkYXRlZFJvd3tiYWNrZ3JvdW5kOiM5Mzk3MWV9ICBib2R5W2Nkcy10aGVt''@;'; put 'put ''ZT1kYXJrXSB0YWJsZSAuYWRkZWRSb3d7YmFja2dyb3VuZDojNTY5OTVmfSAgYm9keVtjZHMtdGhlbWU9ZGFya10gdGFibGUgLmRlbGV0ZWRSb3d7YmFja2dyb3VuZDojOGE1YTVhfSAgYm9keVtjZHMtdGhlbWU9bGlnaHRdIHRhYmxlIC51cGRhdGVkUm93e2JhY2tncm91bmQ6I2ZhZmRhOH0g''@;'; put 'put ''IGJvZHlbY2RzLXRoZW1lPWxpZ2h0XSB0YWJsZSAuYWRkZWRSb3d7YmFja2dyb3VuZDojOTJkMDlhfSAgYm9keVtjZHMtdGhlbWU9bGlnaHRdIHRhYmxlIC5kZWxldGVkUm93e2JhY2tncm91bmQ6I2U2YjNiM30udXBkYXRlZFJvd1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xp''@;'; put 'put ''ZCByZ2JhKDksMTE3LDksLjIpO2JvcmRlci1yYWRpdXM6NXB4fS5jaFtfbmdjb250ZW50LSVDT01QJV17YmFja2dyb3VuZDojMDAwMDAwMWE7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDEwNCwxMDAsMCwuNCk7Ym9yZGVyLXJhZGl1czo1cHh9LmNoW19uZ2NvbnRlbnQtJUNPTVAlXTpob3Zlcnti''@;'; put 'put ''YWNrZ3JvdW5kOiNmYzg3Nzg2Nn0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtdG9wLXJpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnRvb2x0aXAudG9vbHRpcC10b3AtcmlnaHRbX25nY29udGVudC0lQ09NUCVdID4gLnRvb2x0aXAtY29u''@;'; put 'put ''dGVudFtfbmdjb250ZW50LSVDT01QJV0sIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC50b29sdGlwLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVde2ZvbnQtc2l6ZTouNTQxNjdyZW07Zm9udC13ZWlnaHQ6NDAwO2xldHRlci1zcGFjaW5nOm5vcm1hbDtiYWNrZ3JvdW5kOiMzMTQz''@;'; put 'put ''NTE7Ym9yZGVyLXJhZGl1czouMTI1cmVtO2NvbG9yOiNmMGYxZWM7bGluZS1oZWlnaHQ6Ljc1cmVtO21hcmdpbjowO3BhZGRpbmc6LjM3NXJlbSAuNXJlbTt3aWR0aDoyMzVweDtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDphdXRvIGF1dG8gMTAwJSAxMnB4O2JvcmRlci1ib3R0b20tbGVmdC1y''@;'; put 'put ''YWRpdXM6MDttYXJnaW4tYm90dG9tOi42NjY2N3JlbX0udG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtdG9wLXJpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXTpiZWZvcmUsIC50b29sdGlwLnRvb2x0aXAtdG9wLXJpZ2h0W19uZ2NvbnRlbnQtJUNP''@;'; put 'put ''TVAlXSA+IC50b29sdGlwLWNvbnRlbnRbX25nY29udGVudC0lQ09NUCVdOmJlZm9yZSwgLnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdID4gLnRvb2x0aXAtY29udGVudFtfbmdjb250ZW50LSVDT01QJV06YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTotLjM3NXJlbTtsZWZ0OjA7''@;'; put 'put ''dG9wOmF1dG87cmlnaHQ6YXV0bztjb250ZW50OiIiO2JvcmRlci1sZWZ0Oi4yNXJlbSBzb2xpZCAjMzE0MzUxO2JvcmRlci10b3A6LjIwODMzcmVtIHNvbGlkICMzMTQzNTE7Ym9yZGVyLXJpZ2h0Oi4yNXJlbSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItYm90dG9tOi4yMDgzM3JlbSBzb2xp''@;'; put 'put ''ZCB0cmFuc3BhcmVudH0udGFibGVbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjowcHggc29saWR9LnRvZ2dsZS1zd2l0Y2hbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbdHlwZT1jaGVja2JveF1bX25nY29udGVudC0lQ09NUCVdOmNoZWNrZWQgKyBsYWJlbFtfbmdjb250ZW50LSVDT01Q''@;'; put 'put ''JV06YmVmb3Jle2JvcmRlci1jb2xvcjojMzE0MzUxO2JhY2tncm91bmQtY29sb3I6IzMxNDM1MSFpbXBvcnRhbnQ7dHJhbnNpdGlvbjouMTVzIGVhc2UtaW47dHJhbnNpdGlvbi1wcm9wZXJ0eTpib3JkZXItY29sb3IsYmFja2dyb3VuZC1jb2xvcn0udGFibGVDb250W19uZ2NvbnRlbnQtJUNP''@;'; put 'put ''TVAlXXtvdmVyZmxvdzphdXRvO21hcmdpbjoxNXB4IDEwcHggMTBweH0udGFibGVDb250W19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRkW19uZ2NvbnRlbnQtJUNPTVAlXXt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9LmFwcHJvdmFsSW5mb1tfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1''@;'; put 'put ''c3RpZnktY29udGVudDpmbGV4LWVuZH0uYXBwcm92YWxCYWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpey5hcHByb3ZhbEluZm9bX25nY29udGVudC0lQ09NUCVd''@;'; put 'put ''e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbi10b3A6MTVweH0uYXBwcm92YWxCYWNrW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjttYXJnaW4tYm90dG9tOjE1cHh9LmNhcmRbX25nY29udGVudC0lQ09NUCVd''@;'; put 'put ''e21hcmdpbi10b3A6MHJlbSFpbXBvcnRhbnQ7bWluLWhlaWdodDpjYWxjKDEwMHZoICsgLTBweCkhaW1wb3J0YW50fS50YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0ZC5sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXSwgLnRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRoLmxlZnRbX25nY29u''@;'; put 'put ''dGVudC0lQ09NUCVde3RleHQtYWxpZ246bGVmdDt3aWR0aDoxNTBweCFpbXBvcnRhbnQ7ZmxleDowfX0udGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGQubGVmdFtfbmdjb250ZW50LSVDT01QJV0sIC50YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0aC5sZWZ0W19uZ2NvbnRlbnQtJUNP''@;'; put 'put ''TVAlXXt0ZXh0LWFsaWduOmxlZnQ7ZmxleDoxO3dpZHRoOjMwMHB4IWltcG9ydGFudH0udG9vbGxbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6I2U2YjNiMztjb2xvcjojMzE0MzUxO3RvcDowO2hlaWdodDozNnB4O3dpZHRoOjEwMCU7bGVmdDowO2p1''@;'; put 'put ''c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleH0jYWNjZXB0QnRuW19uZ2NvbnRlbnQtJUNPTVAlXSwgI3JlamVjdEJ0bltfbmdjb250ZW50LSVDT01QJV17d2lkdGg6MTc1cHh9LmZvcm1hdHRlZC12YWx1ZXMtdG9nZ2xlW19uZ2NvbnRlbnQtJUNP''@;'; put 'put ''TVAlXXttaW4td2lkdGg6NzVweH1jbHItbW9kYWxbX25nY29udGVudC0lQ09NUCVdICAgICAubW9kYWwtYm9keS13cmFwcGVye292ZXJmbG93OmF1dG99LnJvd3Mtbm90aWNlW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO21hcmdpbi1yaWdodDox''@;'; put 'put ''MHB4O2NvbG9yOiM2YTZhNmE7Zm9udC1zaXplOjE1cHh9LnJvd3Mtbm90aWNlW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MH0nXX0pfX1yZXR1cm4gY30pKCk7Y29uc3Qgbnl0PWM9Pih7bm9Cb3JkZXI6Y30pLHJ5dD0oKT0+WzMsNSwx''@;'; put 'put ''MCwxNV07ZnVuY3Rpb24gaXl0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwxMCkoMSwiZGl2IiwxMSksR3QoMiwiY2xyLWljb24iLDEyKSxkZSgzLCJoMyIsMTMpLExlKDQsIlRoZXJlIGFyZSBubyBhcHByb3ZhbHMgcmVtYWluaW5nIiksaGUoKSgpKCkpfWZ1bmN0aW9uIG95dChjLGwpezEmYyYm''@;'; put 'put ''KGRlKDAsImgzIiwxNCksTGUoMSwiIFJFVklFVyAiKSxoZSgpKX1mdW5jdGlvbiBheXQoYyxsKXtpZigxJmMmJihkZSgwLCJwIiwxNSksTGUoMSwiIFlvdSBoYXZlICIpLGRlKDIsInNwYW4iKSxMZSgzKSxoZSgpLExlKDQsImFwcHJvdmFscyByZW1haW5pbmcgIiksaGUoKSksMiZjKXtjb25z''@;'; put 'put ''dCBhPU9lKCk7ZmUoMyksUnIoIiIsYS5yZW1haW5lZCwiICIpfX1mdW5jdGlvbiBzeXQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiwxOCksTGUoMSwiIExvYWRpbmcuLi4gIiksaGUoKSl9ZnVuY3Rpb24gbHl0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IikoMSwiaDMiKSxMZSgyLCJMb2FkaW5nIGFw''@;'; put 'put ''cHJvdmFscyBsaXN0IiksaGUoKSgpKX1mdW5jdGlvbiBjeXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDE2KSxndCgxLHN5dCwyLDAsInNwYW4iLDE3KSgyLGx5dCwzLDAsImRpdiIsOSksaGUoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSx4ZSgibmdJZiIsIWEubG9hZGVkKSxmZSgpLHhl''@;'; put 'put ''KCJuZ0lmIiwhYS5sb2FkZWQpfX1mdW5jdGlvbiB1eXQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwzNil9ZnVuY3Rpb24gZHl0KGMsbCl7MSZjJiZHdCgwLCJjbHItc3Bpbm5lciIsMzcpLDImYyYmeGUoImNsclNtYWxsIiwhMCl9ZnVuY3Rpb24gaHl0KGMsbCl7aWYoMSZjKXtjb25zdCBh''@;'; put 'put ''PU9uKCk7ZGUoMCwiY2xyLWRnLXJvdyIpKDEsImNsci1kZy1jZWxsIiksTGUoMiksaGUoKSxkZSgzLCJjbHItZGctY2VsbCIpLExlKDQpLGhlKCksZGUoNSwiY2xyLWRnLWNlbGwiKSxMZSg2KSxoZSgpLGRlKDcsImNsci1kZy1jZWxsIiksTGUoOCksaGUoKSxkZSg5LCJjbHItZGctY2VsbCIp''@;'; put 'put ''KDEwLCJkaXYiLDI0KSgxMSwiYSIsMjUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLmluZGV4O3JldHVybiBDdChPZSgyKS5nZXRDbGlja2VkKGgpKX0pLEd0KDEyLCJjbHItaWNvbiIsMjYpLGRlKDEzLCJzcGFuIiwyNyksTGUoMTQsIkdvIHRvIHJldmlldyBwYWdlIHNj''@;'; put 'put ''cmVlbiIpLGhlKCkoKSxkZSgxNSwiYSIsMjgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLGY9aC4kaW1wbGljaXQsdj1oLmluZGV4LE09T2UoMik7cmV0dXJuIEN0KGYucmVqZWN0TG9hZGluZz8iIjpNLnJlamVjdGluZyh2KSl9KSxndCgxNix1eXQsMSwwLCJjbHItaWNv''@;'; put 'put ''biIsMjkpKDE3LGR5dCwxLDEsImNsci1zcGlubmVyIiwzMCksZGUoMTgsInNwYW4iLDI3KSxMZSgxOSwiUmVqZWN0IiksaGUoKSgpLGRlKDIwLCJhIiwzMSksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChPZSgyKS5nZXRUYWJsZShoLnRh''@;'; put 'put ''YmxlSWQpKX0pLEd0KDIxLCJjbHItaWNvbiIsMzIpLGRlKDIyLCJzcGFuIiwyNyksTGUoMjMsIkdvIHRvIHN0YWdlZCBkYXRhIHNjcmVlbiIpLGhlKCkoKSgpKCksZGUoMjQsImNsci1kZy1jZWxsIiwzMykoMjUsImJ1dHRvbiIsMzQpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgZj13''@;'; put 'put ''dChhKS4kaW1wbGljaXQ7cmV0dXJuIE9lKDIpLmRvd25sb2FkKGYudGFibGVJZCksQ3QoaC5zdG9wUHJvcGFnYXRpb24oKSl9KSxHdCgyNiwiY2xyLWljb24iLDM1KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoMiksX3IoYS5zdWJtaXR0ZXIpLGZlKDIpLF9yKGEu''@;'; put 'put ''YmFzZVRhYmxlKSxmZSgyKSxfcihhLnN1Ym1pdHRlZCksZmUoMiksX3IoYS5zdWJtaXRSZWFzb24pLGZlKDgpLHhlKCJuZ0lmIiwhYS5yZWplY3RMb2FkaW5nKSxmZSgpLHhlKCJuZ0lmIixhLnJlamVjdExvYWRpbmcpLGZlKDgpLHhlKCJpZCIsYS50YWJsZUlkKX19ZnVuY3Rpb24gZnl0KGMs''@;'; put 'put ''bCl7aWYoMSZjJiYoZGUoMCwiZGl2IikoMSwiY2xyLWRhdGFncmlkIiwxOSkoMiwiY2xyLWRnLWNvbHVtbiIsMjApLExlKDMsIlNVQk1JVFRFUiIpLGhlKCksZGUoNCwiY2xyLWRnLWNvbHVtbiIsMjApLExlKDUsIkJBU0UgVEFCTEUiKSxoZSgpLGRlKDYsImNsci1kZy1jb2x1bW4iLDIwKSxM''@;'; put 'put ''ZSg3LCJTVUJNSVRURUQiKSxoZSgpLGRlKDgsImNsci1kZy1jb2x1bW4iLDIwKSxMZSg5LCJTVUJNSVQgUkVBU09OIiksaGUoKSxkZSgxMCwiY2xyLWRnLWNvbHVtbiIpLExlKDExLCJBQ1RJT04iKSxoZSgpLGRlKDEyLCJjbHItZGctY29sdW1uIiksTGUoMTMsIkRPV05MT0FEIiksaGUoKSxn''@;'; put 'put ''dCgxNCxoeXQsMjcsNywiY2xyLWRnLXJvdyIsMjEpLGRlKDE1LCJjbHItZGctZm9vdGVyIikoMTYsImNsci1kZy1wYWdpbmF0aW9uIiwyMiwwKSgxOCwiY2xyLWRnLXBhZ2Utc2l6ZSIsMjMpLExlKDE5LCJJdGVtcyBwZXIgcGFnZSIpLGhlKCksTGUoMjApLGhlKCkoKSgpKCkpLDImYyl7Y29u''@;'; put 'put ''c3QgYT12bygxNyksZD1PZSgpO2ZlKDIpLHhlKCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVyIiksZmUoMikseGUoImNsckRnRmllbGQiLCJiYXNlVGFibGUiKSxmZSgyKSx4ZSgiY2xyRGdGaWVsZCIsInN1Ym1pdHRlZCIpLGZlKDIpLHhlKCJjbHJEZ0ZpZWxkIiwic3VibWl0UmVhc29uIiksZmUo''@;'; put 'put ''NikseGUoImNsckRnSXRlbXNPZiIsZC5hcHByb3ZlTGlzdCksZmUoMikseGUoImNsckRnUGFnZVNpemUiLDEwKSxmZSgyKSx4ZSgiY2xyUGFnZVNpemVPcHRpb25zIixXcygxMCxyeXQpKSxmZSgyKSxMZigiICIsYS5maXJzdEl0ZW0rMSwiIC0gIixhLmxhc3RJdGVtKzEsIiBvZiAiLGEudG90''@;'; put 'put ''YWxJdGVtcywiIGFwcHJvdmFscyAiKX19bGV0IHB5dD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5zYXNTdG9yZVNlcnZpY2U9YSx0aGlzLmV2ZW50U2VydmljZT1kLHRoaXMucm91dGU9aCx0aGlzLnNhc1NlcnZpY2U9Zix0aGlzLmNkcj12LHRoaXMubG9hZGVk''@;'; put 'put ''PSExLHRoaXMuaXRlbXNOdW09MTB9Z2V0VGFibGUoYSl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIithKX1nZXRDbGlja2VkKGEpe3ZvaWQgMCE9PXRoaXMuYXBwcm92ZUxpc3QmJih0aGlzLnRhYmxlSWQ9dGhpcy5hcHByb3ZlTGlzdFthXS50YWJsZUlkLHRoaXMucm91dGUu''@;'; put 'put ''bmF2aWdhdGVCeVVybCgicmV2aWV3L2FwcHJvdmVEZXQvIit0aGlzLmFwcHJvdmVMaXN0W2FdLnRhYmxlSWQpKX1yZWplY3RpbmcoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7dm9pZCAwIT09ZC5hcHByb3ZlTGlzdCYmKGQudGFibGVJZD1kLmFwcHJvdmVMaXN0W2FdLnRh''@;'; put 'put ''YmxlSWQpO2xldCBoPXtTVFBfQUNUSU9OOiJSRUpFQ1RfVEFCTEUiLFRBQkxFOmQudGFibGVJZCxTVFBfUkVBU09OOiJxdWljayByZWplY3Rpb24ifTt0cnl7KGQuYXBwcm92ZUxpc3R8fFtdKVthXS5yZWplY3RMb2FkaW5nPSEwLCh5aWVsZCBkLnNhc1N0b3JlU2VydmljZS5yZWplY3Rpbmco''@;'; put 'put ''aCwiQnJvd3NlclBhcmFtcyIsImFwcHJvdmVycy9yZWplY3Rpb24iKSkuZnJvbXNhc1swXS5SRVNQT05TRS5pbmNsdWRlcygiU1VDQ0VTUyIpJiYoKGQuYXBwcm92ZUxpc3R8fFtdKVthXS5yZWplY3RMb2FkaW5nPSExLGQuYXBwcm92ZUxpc3Q/LnNwbGljZShhLDEpLGQucmVtYWluZWQtLSxk''@;'; put 'put ''LmNkci5kZXRlY3RDaGFuZ2VzKCkpfWNhdGNoKGYpe2QuZXZlbnRTZXJ2aWNlLmNhdGNoUmVzcG9uc2VFcnJvcigiYXBwcm92ZXJzL3JlamVjdGlvbiIsZil9fSkoKX1uZ09uSW5pdCgpe3ZhciBhPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2EuZmV0Y2hBcHByb3ZhbHMoKX0pKCl9ZmV0''@;'; put 'put ''Y2hBcHByb3ZhbHMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLml0ZW1zTnVtPTEwO2xldCBkPXtTVFBfQUNUSU9OOiJPUEVOX0FQUFJPVkFMUyJ9O3RyeXtsZXQgaD15aWVsZCBhLnNhc1N0b3JlU2VydmljZS5nZXRBcHByb3ZhbHMoZCwiQnJvd3NlclBhcmFtcyIsImFw''@;'; put 'put ''cHJvdmVycy9nZXRhcHByb3ZhbHMiKTthLnJlbWFpbmVkPWguZnJvbXNhcy5sZW5ndGg7bGV0IGY9aC5mcm9tc2FzLm1hcChmdW5jdGlvbih2KXtyZXR1cm57dGFibGVJZDp2LlRBQkxFX0lELHN1Ym1pdHRlcjp2LlNVQk1JVFRFRF9CWV9OTSxzdWJtaXR0ZWQ6di5TVUJNSVRURURfT05fRFRU''@;'; put 'put ''TSxiYXNlVGFibGU6di5CQVNFX1RBQkxFLHN1Ym1pdFJlYXNvbjp2LlNVQk1JVFRFRF9SRUFTT05fVFhUfX0pO2EuYXBwcm92ZUxpc3Q9ZixhLmxvYWRlZD0hMH1jYXRjaChoKXthLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImFwcHJvdmVycy9nZXRhcHByb3ZhbHMiLGgpfX0p''@;'; put 'put ''KCl9ZG93bmxvYWQoYSl7bGV0IGQ9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksaD1kLnNlcnZlclVybCxmPWQuYXBwTG9jLHY9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihoK3YrIi8/X3Byb2dyYW09IitmKyIvc2VydmljZXMvYXVkaXRv''@;'; put 'put ''cnMvZ2V0YXVkaXRmaWxlJnRhYmxlPSIrYSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoVmgpLEdlKHBjKSxHZShMcyksR2UoSnMpLEdlKHhzKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAt''@;'; put 'put ''YXBwcm92ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6OSx2YXJzOjgsY29uc3RzOltbInBhZ2luYXRpb24iLCIiXSxbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiXSxbImNsYXNzIiwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIiLDQsIm5nSWYi''@;'; put 'put ''XSxbMSwiY2FyZC1oZWFkZXIiLDMsIm5nQ2xhc3MiXSxbImNsYXNzIiwiY2VudGVyIGNsci1jb2wtbWQtMTIgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgZm9udC13ZWlnaHQtNzAwIGNvbG9yLWRhcmstZ3JheSIsNCwibmdJZiJdLFsiY2xhc3MiLCJhcHBy''@;'; put 'put ''b3ZhbHMtbGlzdC13cmFwcGVyIiw0LCJuZ0lmIl0sWyJuZy1pZiIsImxvYWRlZCIsMSwiY2xyLWNvbC1tZC0xMiJdLFs0LCJuZ0lmIl0sWzEsImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbMSwiY2FyZC1ibG9jayIsIm5vYXBwcm92YWxzLWluZm8td3JhcHBlciJdLFsic2hh''@;'; put 'put ''cGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWzEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSJdLFsxLCJjZW50ZXIiLCJjbHItY29sLW1kLTEyIiwidGV4dC1jZW50ZXIiXSxbMSwidGV4dC1jZW50ZXIiLCJmb250LXdlaWdo''@;'; put 'put ''dC03MDAiLCJjb2xvci1kYXJrLWdyYXkiXSxbMSwiYXBwcm92YWxzLWxpc3Qtd3JhcHBlciJdLFsiY2xhc3MiLCJzcGlubmVyIiw0LCJuZ0lmIl0sWzEsInNwaW5uZXIiXSxbMSwiZGF0YWdyaWQtY29tcGFjdCIsImRhdGFncmlkLWN1c3RvbS1mb290ZXIiXSxbMywiY2xyRGdGaWVsZCJdLFs0''@;'; put 'put ''LCJjbHJEZ0l0ZW1zIiwiY2xyRGdJdGVtc09mIl0sWzMsImNsckRnUGFnZVNpemUiXSxbMywiY2xyUGFnZVNpemVPcHRpb25zIl0sWyJyb2xlIiwidG9vbHRpcCIsMSwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWFyb3VuZCJdLFsxLCJjb2x1bW4tY2VudGVyIiwibGlua3MiLCJ0b29sdGlw''@;'; put 'put ''IiwidG9vbHRpcC1tZCIsInRvb2x0aXAtYm90dG9tLWxlZnQiLCJjb2xvci1ncmVlbiIsMywiY2xpY2siXSxbInNoYXBlIiwiY2hlY2siLCJzaXplIiwiMjQiXSxbMSwidG9vbHRpcC1jb250ZW50Il0sWzEsImNvbHVtbi1jZW50ZXIiLCJsaW5rcyIsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwi''@;'; put 'put ''dG9vbHRpcC1ib3R0b20tbGVmdCIsImNvbG9yLXJlZCIsMywiY2xpY2siXSxbInNoYXBlIiwiYmFuIiwic2l6ZSIsIjIyIiw0LCJuZ0lmIl0sWzMsImNsclNtYWxsIiw0LCJuZ0lmIl0sWzEsImNvbHVtbi1jZW50ZXIiLCJsaW5rcyIsInRvb2x0aXAiLCJ0b29sdGlwLW1kIiwidG9vbHRpcC1i''@;'; put 'put ''b3R0b20tbGVmdCIsImNvbG9yLWJsdWUiLDMsImNsaWNrIl0sWyJzaGFwZSIsImNvZGUiLCJzaXplIiwiMjgiXSxbMSwicC0wIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiYXJpYS1sYWJlbCIsIkRvd25sb2FkIGF1ZGl0IGZpbGUiLDEsImJ0biIsImJ0bi1zdWNjZXNz''@;'; put 'put ''IiwzLCJjbGljayIsImlkIl0sWyJzaGFwZSIsImRvd25sb2FkIl0sWyJzaGFwZSIsImJhbiIsInNpemUiLCIyMiJdLFszLCJjbHJTbWFsbCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImRpdiIsMSkoMSwiZGl2IiwyKSxndCgyLGl5dCw1LDAsImRpdiIsMyksZGUoMywi''@;'; put 'put ''ZGl2Iiw0KSxndCg0LG95dCwyLDAsImgzIiw1KSg1LGF5dCw1LDEsInAiLDYpLGhlKCksZ3QoNixjeXQsMywyLCJkaXYiLDcpLGRlKDcsImRpdiIsOCksZ3QoOCxmeXQsMjEsMTEsImRpdiIsOSksaGUoKSgpKCkpLDImZCYmKGZlKDIpLHhlKCJuZ0lmIiwwPT09aC5yZW1haW5lZCksZmUoKSx4''@;'; put 'put ''ZSgibmdDbGFzcyIsbnAoNixueXQsIWgubG9hZGVkKSksZmUoKSx4ZSgibmdJZiIsaC5sb2FkZWQmJjAhPT1oLnJlbWFpbmVkKSxmZSgpLHhlKCJuZ0lmIixoLmxvYWRlZCYmMCE9PWgucmVtYWluZWQpLGZlKCkseGUoIm5nSWYiLCFoLmxvYWRlZCksZmUoMikseGUoIm5nSWYiLGguYXBwcm92''@;'; put 'put ''ZUxpc3QmJjAhPT1oLnJlbWFpbmVkKSl9LGRlcGVuZGVuY2llczpbd3UseW8seG0sYnAsQTcsbk8sJHksS3gsck8sU20sdWcsazcsWHksTW0seDcsQ20sRTcsT2wsX2hdLHN0eWxlczpbIi5jb2x1bW4tY2VudGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rp''@;'; put 'put ''b246Y29sdW1uO2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyfS5kYXRhZ3JpZFtfbmdjb250ZW50LSVDT01QJV0gICAuZGF0YWdyaWQtY29sdW1uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5kYXRhZ3JpZC1jb2x1bW4tdGl0bGVbX25nY29udGVudC0lQ09NUCVde291''@;'; put 'put ''dGxpbmU6bm9uZSFpbXBvcnRhbnR9LmxpbmtzW19uZ2NvbnRlbnQtJUNPTVAlXXtmb250LXdlaWdodDo3MDA7Y3Vyc29yOnBvaW50ZXJ9LnRvb2x0aXAudG9vbHRpcC1ib3R0b20tbGVmdFtfbmdjb250ZW50LSVDT01QJV0gPiAudG9vbHRpcC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXSwg''@;'; put 'put ''LnRvb2x0aXBbX25nY29udGVudC0lQ09NUCVdICAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWJvdHRvbS1sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiMzMTQzNTEhaW1wb3J0YW50fS50b29sdGlwLnRvb2x0aXAtYm90dG9tLWxlZnRbX25nY29udGVudC0lQ09NUCVdID4g''@;'; put 'put ''LnRvb2x0aXAtY29udGVudFtfbmdjb250ZW50LSVDT01QJV06YmVmb3JlLCAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtYm90dG9tLWxlZnRbX25nY29udGVudC0lQ09NUCVdOmJlZm9yZXtib3JkZXItcmlnaHQ6LjI1cmVtIHNvbGlkICMz''@;'; put 'put ''MTQzNTE7Ym9yZGVyLWJvdHRvbTouMjA4MzNyZW0gc29saWQgIzMxNDM1MX0ubm9Cb3JkZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHRyYW5zcGFyZW50IWltcG9ydGFudH0uYXBwcm92YWxzLWxpc3Qtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17aGVp''@;'; put 'put ''Z2h0Ojcwdmg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmNlbnRlcn0ubm9hcHByb3ZhbHMtaW5mby13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRl''@;'; put 'put ''cjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDpjYWxjKDEwMHZoIC0gMjAwcHgpfSJdfSl9fXJldHVybiBjfSkoKTtjb25zdCBneXQ9Yz0+KHtub0JvcmRlcjpjfSksbXl0PSgpPT5bMyw1LDEwLDE1XTtmdW5jdGlvbiB2eXQoYyxsKXsxJmMmJihkZSgw''@;'; put 'put ''LCJkaXYiLDEzKSgxLCJkaXYiLDE0KSxHdCgyLCJjbHItaWNvbiIsMTUpLGRlKDMsImgzIiwxNiksTGUoNCwiIFlvdSBoYXZlIG5vdCBzdWJtaXR0ZWQgYW55IHRhYmxlcyAiKSxoZSgpKCkoKSl9ZnVuY3Rpb24gYnl0KGMsbCl7MSZjJiYoZGUoMCwiaDMiLDE3KSxMZSgxLCIgU1VCTUlUIFFV''@;'; put 'put ''RVVFICIpLGhlKCkpfWZ1bmN0aW9uIHl5dChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDE4KSxMZSgxLCIgWW91IGhhdmUgIiksZGUoMiwic3BhbiIpLExlKDMpLGhlKCksTGUoNCwic3VibWlzc2lvbnMgd2FpdGluZyB0byBiZSBhcHByb3ZlZCAiKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7''@;'; put 'put ''ZmUoMyksUnIoIiIsYS5yZW1haW5lZCwiICIpfX1mdW5jdGlvbiBfeXQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiwyMSksTGUoMSwiIExvYWRpbmcuLi4gIiksaGUoKSl9ZnVuY3Rpb24gd3l0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IikoMSwiaDMiKSxMZSgyLCJMb2FkaW5nIHN1Ym1pdHRlZCBs''@;'; put 'put ''aXN0IiksaGUoKSgpKX1mdW5jdGlvbiBDeXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDE5KSxndCgxLF95dCwyLDAsInNwYW4iLDIwKSgyLHd5dCwzLDAsImRpdiIsMyksaGUoKSksMiZjKXtjb25zdCBhPU9lKDMpO2ZlKCkseGUoIm5nSWYiLCFhLmxvYWRlZCksZmUoKSx4ZSgibmdJZiIs''@;'; put 'put ''IWEubG9hZGVkKX19ZnVuY3Rpb24gU3l0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLWRnLXJvdyIsMjgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoNSkuZ29Ub0RldGFpbHMoaC50YWJsZUlkKSl9KSxkZSgx''@;'; put 'put ''LCJjbHItZGctY2VsbCIpLExlKDIpLGhlKCksZGUoMywiY2xyLWRnLWNlbGwiKSxMZSg0KSxoZSgpLGRlKDUsImNsci1kZy1jZWxsIiksTGUoNiksaGUoKSxkZSg3LCJjbHItZGctY2VsbCIpKDgsImRpdiIsMjkpKDksImEiLDMwKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7Y29uc3QgaD13dChh''@;'; put 'put ''KS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKDUpLmdvVG9TdGFnZShoLnRhYmxlSWQpKX0pLEd0KDEwLCJjbHItaWNvbiIsMzEpLGRlKDExLCJzcGFuIiwzMiksTGUoMTIsIkdvIHRvIHN0YWdlZCBkYXRhIHNjcmVlbiIpLGhlKCkoKSgpKCksZGUoMTMsImNsci1kZy1jZWxsIiwzMykoMTQsImJ1''@;'; put 'put ''dHRvbiIsMzQpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIE9lKDUpLmRvd25sb2FkKGYudGFibGVJZCksQ3QoaC5zdG9wUHJvcGFnYXRpb24oKSl9KSxHdCgxNSwiY2xyLWljb24iLDM1KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4k''@;'; put 'put ''aW1wbGljaXQ7ZmUoMiksX3IoYS5iYXNlKSxmZSgyKSxfcihhLnN1Ym1pdHRlZCksZmUoMiksX3IoYS5zdWJtaXRSZWFzb24pfX1mdW5jdGlvbiBNeXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSgxLCJjbHItZGF0YWdyaWQiLDIzKSgyLCJjbHItZGctY29sdW1uIiksTGUoMywiQkFTRSBU''@;'; put 'put ''QUJMRSIpLGhlKCksZGUoNCwiY2xyLWRnLWNvbHVtbiIsMjQpLExlKDUsIlNVQk1JVFRFRCIpLGhlKCksZGUoNiwiY2xyLWRnLWNvbHVtbiIsMjQpLExlKDcsIlNVQk1JVCBSRUFTT04iKSxoZSgpLGRlKDgsImNsci1kZy1jb2x1bW4iLDEzKSxMZSg5LCJBQ1RJT04iKSxoZSgpLGRlKDEwLCJj''@;'; put 'put ''bHItZGctY29sdW1uIiwxMyksTGUoMTEsIkRPV05MT0FEIiksaGUoKSxndCgxMixTeXQsMTYsMywiY2xyLWRnLXJvdyIsMjUpLGRlKDEzLCJjbHItZGctZm9vdGVyIikoMTQsImNsci1kZy1wYWdpbmF0aW9uIiwyNiwwKSgxNiwiY2xyLWRnLXBhZ2Utc2l6ZSIsMjcpLExlKDE3LCJJdGVtcyBw''@;'; put 'put ''ZXIgcGFnZSIpLGhlKCksTGUoMTgpLGhlKCkoKSgpKCkpLDImYyl7Y29uc3QgYT12bygxNSksZD1PZSg0KTtmZSg0KSx4ZSgiY2xyRGdGaWVsZCIsInN1Ym1pdHRlZCIpLGZlKDIpLHhlKCJjbHJEZ0ZpZWxkIiwic3VibWl0UmVhc29uIiksZmUoNikseGUoImNsckRnSXRlbXNPZiIsZC5zdWJt''@;'; put 'put ''aXR0ZXJMaXN0KSxmZSgyKSx4ZSgiY2xyRGdQYWdlU2l6ZSIsMTApLGZlKDIpLHhlKCJjbHJQYWdlU2l6ZU9wdGlvbnMiLFdzKDgsbXl0KSksZmUoMiksTGYoIiAiLGEuZmlyc3RJdGVtKzEsIiAtICIsYS5sYXN0SXRlbSsxLCIgb2YgIixhLnRvdGFsSXRlbXMsIiBzdWJtaXNzaW9ucyAiKX19''@;'; put 'put ''ZnVuY3Rpb24geHl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwyMiksZ3QoMSxNeXQsMTksOSwiZGl2IiwzKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoKSx4ZSgibmdJZiIsYS5zdWJtaXR0ZXJMaXN0JiYwIT09YS5yZW1haW5lZCl9fWZ1bmN0aW9uIEV5dChjLGwpe2lmKDEmYyYm''@;'; put 'put ''KGRlKDAsImRpdiIsNiksZ3QoMSx2eXQsNSwwLCJkaXYiLDcpLGRlKDIsImRpdiIsOCksZ3QoMyxieXQsMiwwLCJoMyIsOSkoNCx5eXQsNSwxLCJwIiwxMCksaGUoKSxndCg1LEN5dCwzLDIsImRpdiIsMTEpKDYseHl0LDIsMSwiZGl2IiwxMiksaGUoKSksMiZjKXtjb25zdCBhPU9lKDIpO2Zl''@;'; put 'put ''KCkseGUoIm5nSWYiLDA9PT1hLnJlbWFpbmVkJiZhLmxvYWRlZCksZmUoKSx4ZSgibmdDbGFzcyIsbnAoNixneXQsIWEubG9hZGVkKSksZmUoKSx4ZSgibmdJZiIsMCE9PWEucmVtYWluZWQpLGZlKCkseGUoIm5nSWYiLGEubG9hZGVkJiYwIT09YS5yZW1haW5lZCksZmUoKSx4ZSgibmdJZiIs''@;'; put 'put ''IWEubG9hZGVkKSxmZSgpLHhlKCJuZ0lmIixhLmxvYWRlZCl9fWZ1bmN0aW9uIFR5dChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsNCksZ3QoMSxFeXQsNyw4LCJkaXYiLDUpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKCkseGUoIm5nSWYiLCFhLnN1YlJlYWR5KX19ZnVuY3Rpb24gQXl0''@;'; put 'put ''KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiksR3QoMSwiYXBwLWFwcHJvdmUtZGV0YWlscyIpLGhlKCkpfWxldCBSNmU9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuc2FzU3RvcmVTZXJ2aWNlPWEsdGhpcy5ldmVudFNlcnZpY2U9ZCx0aGlzLnJvdXRlcj1oLHRoaXMu''@;'; put 'put ''cm91dGU9Zix0aGlzLnNhc1NlcnZpY2U9dix0aGlzLnJlbWFpbmVkPTAsdGhpcy5sb2FkZWQ9ITEsdGhpcy5zdWJSZWFkeT0hMSx0aGlzLmRldGFpbHNPcGVuPSExfWdvVG9TdGFnZShhKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvc3RhZ2UvIithKX1nb1RvRGV0YWlscyhhKXt0aGlz''@;'; put 'put ''LnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L3N1Ym1pdHRlZC8iK2EpfWdldERldGFpbHMoYSxkKXt0aGlzLnN1YlJlYWR5PSEwLHNldFRpbWVvdXQoKCk9Pnt0aGlzLnNhc1N0b3JlU2VydmljZS5zZW5kRGV0YWlscyhhLGQsdGhpcy5zdWJtaXREYXRhKX0sMCl9bmdPbkluaXQoKXt2''@;'; put 'put ''YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtjb25zdCBkPWEucm91dGUuc25hcHNob3QucGFyYW1zLnRhYmxlSWQ7YS5pdGVtc051bT0xMDt0cnl7bGV0IGg9eWllbGQgYS5zYXNTdG9yZVNlcnZpY2UuZ2V0U3VibWl0dHMoKTtpZihhLnJlbWFpbmVkPWguZnJvbXNhcy5sZW5ndGgs''@;'; put 'put ''YS5yZW1haW5lZD4wKXthLnN1Ym1pdHRlcj1oLmZyb21zYXNbMF0uU1VCTUlUVEVEX0JZX05NO2xldCBmPWguZnJvbXNhcy5tYXAoZnVuY3Rpb24odil7cmV0dXJue3RhYmxlSWQ6di5UQUJMRV9JRCxiYXNlOnYuQkFTRV9UQUJMRSxzdWJtaXR0ZWQ6di5TVUJNSVRURURfT05fRFRUTSxzdWJt''@;'; put 'put ''aXR0ZXI6di5TVUJNSVRURURfQllfTk0sc3VibWl0UmVhc29uOnYuU1VCTUlUVEVEX1JFQVNPTl9UWFR9fSk7aWYoYS5zdWJtaXR0ZXJMaXN0PWYsYS5zdWJtaXREYXRhPWguZnJvbXNhcyx0eXBlb2YgZDwidSIpe2NvbnN0IHY9YS5zdWJtaXR0ZXJMaXN0LmZpbmRJbmRleChNPT5NLnRhYmxl''@;'; put 'put ''SWQ9PT1kKTt2Pi0xJiZhLmdldERldGFpbHMoYS5zdWJtaXR0ZXJMaXN0W3ZdLHYpfX1hLmxvYWRlZD0hMH1jYXRjaChoKXthLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImVkaXRvcnMvZ2V0c3VibWl0cyIsaCl9fSkoKX1uZ0FmdGVyVmlld0luaXQoKXt0aGlzLl9yZWFkeVN1''@;'; put 'put ''Yj10aGlzLnNhc1N0b3JlU2VydmljZS5zZXRTdWJtaXQuc3Vic2NyaWJlKGE9Pnt0aGlzLnN1YlJlYWR5PWF9KSx0aGlzLl9iYWNrVG9TdWI9dGhpcy5zYXNTdG9yZVNlcnZpY2Uuc2V0U3VibWl0TGlzdC5zdWJzY3JpYmUoYT0+e3RoaXMuc3ViUmVhZHk9IXRoaXMuc3ViUmVhZHksdGhpcy5k''@;'; put 'put ''ZXRhaWxzT3Blbj0hMX0pfWRvd25sb2FkKGEpe2xldCBkPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLGg9ZC5zZXJ2ZXJVcmwsZj1kLmFwcExvYyx2PXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oaCt2KyIvP19wcm9ncmFtPSIrZisiL3Nl''@;'; put 'put ''cnZpY2VzL2F1ZGl0b3JzL2dldGF1ZGl0ZmlsZSZ0YWJsZT0iK2EpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKFZoKSxHZShwYyksR2UoTHMpLEdlKEN1KSxHZShKcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxl''@;'; put 'put ''Y3RvcnM6W1siYXBwLXN1Ym1pdHRlciJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6Myx2YXJzOjIsY29uc3RzOltbInBhZ2luYXRpb24iLCIiXSxbMSwidy0xMDAiXSxbImNsYXNzIiwiY29udGVudC1hcmVhIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwiY29u''@;'; put 'put ''dGVudC1hcmVhIl0sWyJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbMSwiY2FyZCJdLFsiY2xhc3MiLCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciIsNCwibmdJZiJdLFsxLCJjYXJkLWhlYWRlciIsMywibmdDbGFzcyJdLFsiY2xhc3MiLCJjZW50ZXIgY2xyLWNvbC1tZC0xMiB0ZXh0''@;'; put 'put ''LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBmb250LXdlaWdodC03MDAgY29sb3ItZGFyay1ncmF5Iiw0LCJuZ0lmIl0sWyJjbGFzcyIsImgtNzB2aCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIiLDQs''@;'; put 'put ''Im5nSWYiXSxbImNsYXNzIiwiY2xyLWNvbC1tZC0xMiIsNCwibmdJZiJdLFsxLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsIm5vLXN1Ym1pdHRlZC10YWJsZXMiLCJjYXJkLWJsb2NrIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1u''@;'; put 'put ''IiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJzaGFwZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iXSxbMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5Il0sWzEsImNlbnRlciIsImNsci1jb2wtbWQtMTIiLCJ0ZXh0LWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRl''@;'; put 'put ''ciIsImZvbnQtd2VpZ2h0LTcwMCIsImNvbG9yLWRhcmstZ3JheSJdLFsxLCJoLTcwdmgiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJdLFsxLCJzcGlubmVyIl0s''@;'; put 'put ''WzEsImNsci1jb2wtbWQtMTIiXSxbMSwiZGF0YWdyaWQtY29tcGFjdCIsImRhdGFncmlkLWN1c3RvbS1mb290ZXIiXSxbMywiY2xyRGdGaWVsZCJdLFsiY2xhc3MiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siLDQsImNsckRnSXRlbXMiLCJjbHJEZ0l0ZW1zT2YiXSxbMywiY2xyRGdQYWdl''@;'; put 'put ''U2l6ZSJdLFszLCJjbHJQYWdlU2l6ZU9wdGlvbnMiXSxbMSwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJyb2xlIiwidG9vbHRpcCIsImFyaWEtbGFiZWwiLCJHbyB0byBzdGFnZWQgZGF0YSBzY3JlZW4iLDEsInJvdyIsImp1c3RpZnktY29udGVudC1hcm91bmQiXSxbMSwiY29sdW1u''@;'; put 'put ''LWNlbnRlciIsImxpbmtzIiwidG9vbHRpcCIsInRvb2x0aXAtbWQiLCJ0b29sdGlwLWJvdHRvbS1sZWZ0IiwiY29sb3ItYmx1ZSIsMywiY2xpY2siXSxbInNoYXBlIiwiY29kZSIsInNpemUiLCIyOCJdLFsxLCJ0b29sdGlwLWNvbnRlbnQiXSxbMSwicC0wIiwiZC1mbGV4IiwianVzdGlmeS1j''@;'; put 'put ''b250ZW50LWNlbnRlciJdLFsiYXJpYS1sYWJlbCIsIkRvd25sb2FkIGF1ZGl0IGZpbGUgZm9yIHRhYmxlIHJlY29yZCIsMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLDMsImNsaWNrIl0sWyJzaGFwZSIsImRvd25sb2FkIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2Iiwx''@;'; put 'put ''KSxndCgxLFR5dCwyLDEsImRpdiIsMikoMixBeXQsMiwwLCJkaXYiLDMpLGhlKCkpLDImZCYmKGZlKCkseGUoIm5nSWYiLCFoLnN1YlJlYWR5KSxmZSgpLHhlKCJuZ0lmIixoLnN1YlJlYWR5KSl9LGRlcGVuZGVuY2llczpbd3UseW8seG0sYnAsQTcsbk8sJHksS3gsck8sU20sdWcsazcsWHks''@;'; put 'put ''TW0seDcsQ20sRTcsT2wsSTZlXSxzdHlsZXM6WyIubm9Cb3JkZXJbX25nY29udGVudC0lQ09NUCVde2JvcmRlci1ib3R0b206MXB4IHNvbGlkIHRyYW5zcGFyZW50IWltcG9ydGFudH0udG9vbHRpcC50b29sdGlwLWJvdHRvbS1sZWZ0W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC50b29sdGlwLWNv''@;'; put 'put ''bnRlbnRbX25nY29udGVudC0lQ09NUCVdLCAudG9vbHRpcFtfbmdjb250ZW50LSVDT01QJV0gICAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtYm90dG9tLWxlZnRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQ6IzMxNDM1MSFpbXBvcnRhbnR9LnRvb2x0aXAudG9vbHRpcC1ib3R0b20t''@;'; put 'put ''bGVmdFtfbmdjb250ZW50LSVDT01QJV0gPiAudG9vbHRpcC1jb250ZW50W19uZ2NvbnRlbnQtJUNPTVAlXTpiZWZvcmUsIC50b29sdGlwW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1ib3R0b20tbGVmdFtfbmdjb250ZW50LSVDT01QJV06YmVmb3Jle2Jv''@;'; put 'put ''cmRlci1yaWdodDouMjVyZW0gc29saWQgIzMxNDM1MTtib3JkZXItYm90dG9tOi4yMDgzM3JlbSBzb2xpZCAjMzE0MzUxfS5uby1zdWJtaXR0ZWQtdGFibGVzW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6Y2FsYygxMDB2aCAtIDIwMHB4KX0iXX0pfX1yZXR1cm4gY30pKCk7Y29uc3Qga3l0''@;'; put 'put ''PShjLGwpPT4oe3JlamVjdGVkOmMsYWNjZXB0ZWQ6bH0pO2Z1bmN0aW9uIER5dChjLGwpezEmYyYmKGRlKDAsImRpdiIsMTIpLEd0KDEsImNsci1pY29uIiwxMyksZGUoMiwiaDMiLDE0KSxMZSgzLCJUaGVyZSBpcyBubyBoaXN0b3J5IHRvIHNob3ciKSxoZSgpKCkpfWZ1bmN0aW9uIEl5dChj''@;'; put 'put ''LGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImEiLDE3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpLiRpbXBsaWNpdCxmPU9lKCk7cmV0dXJuIEN0KGYuZ2V0VGFibGUoZi5hcHByb3ZlRGF0YVtoXSkpfSksTGUoMSksaGUoKX1pZigyJmMpe2NvbnN0IGE9''@;'; put 'put ''T2UoKS4kaW1wbGljaXQsZD1PZSgpO2ZlKCksX3IoZC5hcHByb3ZlRGF0YVthXSl9fWZ1bmN0aW9uIFJ5dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIpKDEsImEiLDE3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpLiRpbXBsaWNpdCxmPU9l''@;'; put 'put ''KCk7cmV0dXJuIEN0KGYuZ2V0QmFzZVRhYmxlKGYuYXBwcm92ZURhdGFbaF0pKX0pLExlKDIsIlZJRVciKSxoZSgpLGRlKDMsInNwYW4iKSxMZSg0LCIgLyAiKSxoZSgpLGRlKDUsImEiLDE3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpLiRpbXBsaWNpdCxmPU9l''@;'; put 'put ''KCk7cmV0dXJuIEN0KGYuZ2V0RWRpdFRhYmxlKGYuYXBwcm92ZURhdGFbaF0pKX0pLExlKDYsIkVESVQiKSxoZSgpKCl9fWZ1bmN0aW9uIEx5dChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iKSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQsZD1PZSgpO2ZlKCksX3Io''@;'; put 'put ''ZC5hcHByb3ZlRGF0YVthXSl9fWZ1bmN0aW9uIE95dChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDYpLExlKDIpLGhlKCksZGUoMywidGQiLDYpLGd0KDQsSXl0LDIsMSwiYSIsMTUpKDUsUnl0LDcsMCwiZGl2IiwxNikoNixMeXQsMiwxLCJzcGFuIiwxNiksaGUoKSgpKSwyJmMp''@;'; put 'put ''e2NvbnN0IGE9bC4kaW1wbGljaXQsZD1sLmluZGV4O2ZlKDIpLF9yKGEpLGZlKDIpLHhlKCJuZ0lmIixkPDEpLGZlKCkseGUoIm5nSWYiLGQ8MiYmZD49MSksZmUoKSx4ZSgibmdJZiIsZD49Mil9fWZ1bmN0aW9uIFB5dChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDIwKSxMZSgxLCIgTG9hZGlu''@;'; put 'put ''Zy4uLiAiKSxoZSgpKX1mdW5jdGlvbiBGeXQoYyxsKXsxJmMmJihkZSgwLCJkaXYiKSgxLCJoMyIpLExlKDIsIkxvYWRpbmcgaGlzdG9yeSIpLGhlKCkoKSl9ZnVuY3Rpb24gSHl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiwxOCksZ3QoMSxQeXQsMiwwLCJzcGFuIiwxOSkoMixGeXQsMyww''@;'; put 'put ''LCJkaXYiLDE2KSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLHhlKCJuZ0lmIiwhYS5sb2FkZWQpLGZlKCkseGUoIm5nSWYiLCFhLmxvYWRlZCl9fWZ1bmN0aW9uIE55dChjLGwpezEmYyYmKGRlKDAsImgzIiwyOCksTGUoMSwiSElTVE9SWSIpLGhlKCkpfWZ1bmN0aW9uIFZ5dChjLGwp''@;'; put 'put ''e2lmKDEmYyYmKGRlKDAsInAiLDI5KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoKSxScigiIFRvIHVubG9jayBtb3JlIHRoYW4gIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCwiIHJlY29yZHMsIGNvbnRhY3Qgc3VwcG9ydEBkYXRhY29udHJv''@;'; put 'put ''bGxlci5pbyAiKX19ZnVuY3Rpb24gQnl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLWRnLXJvdyIsMzMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoMykuZ2V0QXBwckluZGV4KGgpKX0pLGRlKDEsImNsci1k''@;'; put 'put ''Zy1jZWxsIiwzNCkoMiwiYSIsMzUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtjb25zdCBoPXd0KGEpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoMykuZ2V0QmFzZVRhYmxlKGguYmFzZXRhYmxlKSl9KSxMZSgzKSxoZSgpKCksZGUoNCwiY2xyLWRnLWNlbGwiLDM2KSxMZSg1KSxoZSgpLGRlKDYs''@;'; put 'put ''ImNsci1kZy1jZWxsIiwzNCksTGUoNyksaGUoKSxkZSg4LCJjbHItZGctY2VsbCIsMzQpLExlKDkpLGhlKCksZGUoMTAsImNsci1kZy1jZWxsIiwzNCksTGUoMTEpLGhlKCksZGUoMTIsImNsci1kZy1jZWxsIiwzNCksTGUoMTMpLGhlKCksZGUoMTQsImNsci1kZy1jZWxsIiwzNykoMTUsImJ1''@;'; put 'put ''dHRvbiIsMzgpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQ7cmV0dXJuIE9lKDMpLmRvd25sb2FkKGYudGFibGVJZCksQ3QoaC5zdG9wUHJvcGFnYXRpb24oKSl9KSxHdCgxNiwiY2xyLWljb24iLDM5KSxoZSgpKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4k''@;'; put 'put ''aW1wbGljaXQ7ZmUoMyksX3IoYS5iYXNldGFibGUpLGZlKCkseGUoIm5nQ2xhc3MiLHJwKDcsa3l0LCJSRUpFQ1RFRCI9PT1hLnN0YXR1cywiQVBQUk9WRUQiPT09YS5zdGF0dXMpKSxmZSgpLF9yKGEuc3RhdHVzKSxmZSgyKSxfcihhLnN1Ym1pdHRlciksZmUoMiksX3IoYS5zdWJtaXR0ZWRS''@;'; put 'put ''ZWFzb24pLGZlKDIpLF9yKGEuc3VibWl0dGVkKSxmZSgyKSxfcihhLnJldmlld2VkKX19ZnVuY3Rpb24ganl0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLWRhdGFncmlkIiwzMCkoMSwiY2xyLWRnLWNvbHVtbiIsMzEpLExlKDIsIkJBU0VfVEFCTEUiKSxoZSgpLGRlKDMsImNsci1kZy1jb2x1''@;'; put 'put ''bW4iLDMxKSxMZSg0LCJTVEFUVVMiKSxoZSgpLGRlKDUsImNsci1kZy1jb2x1bW4iLDMxKSxMZSg2LCJTVUJNSVRURVIiKSxoZSgpLGRlKDcsImNsci1kZy1jb2x1bW4iLDMxKSxMZSg4LCJTVUJNSVQgUkVBU09OIiksaGUoKSxkZSg5LCJjbHItZGctY29sdW1uIiwzMSksTGUoMTAsIlNVQk1J''@;'; put 'put ''VFRFRCIpLGhlKCksZGUoMTEsImNsci1kZy1jb2x1bW4iLDMxKSxMZSgxMiwiQVBQUk9WRUQgLyBSRUpFQ1RFRCIpLGhlKCksZGUoMTMsImNsci1kZy1jb2x1bW4iKSxMZSgxNCwiRE9XTkxPQUQiKSxoZSgpLGd0KDE1LEJ5dCwxNywxMCwiY2xyLWRnLXJvdyIsMzIpLGhlKCkpLDImYyl7Y29u''@;'; put 'put ''c3QgYT1PZSgyKTtmZSgpLHhlKCJjbHJEZ0ZpZWxkIiwiYmFzZXRhYmxlIiksZmUoMikseGUoImNsckRnRmllbGQiLCJzdGF0dXMiKSxmZSgyKSx4ZSgiY2xyRGdGaWVsZCIsInN1Ym1pdHRlciIpLGZlKDIpLHhlKCJjbHJEZ0ZpZWxkIiwic3VibWl0dGVkUmVhc29uIiksZmUoMikseGUoImNs''@;'; put 'put ''ckRnRmllbGQiLCJzdWJtaXR0ZWQiKSxmZSgyKSx4ZSgiY2xyRGdGaWVsZCIsInJldmlld2VkIiksZmUoNCkseGUoImNsckRnSXRlbXNPZiIsYS5oaXN0b3J5KX19ZnVuY3Rpb24genl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiYnV0dG9uIiw0MCksRnQoImNsaWNrIixmdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5sb2FkRGF0YSgpKX0pLExlKDEpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKDIpO3hlKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdNb3JlKSxmZSgpLFJyKCIgTG9hZCAiLGEucm93c0xlZnRUb0xvYWQsIiBtb3JlICIpfX1mdW5jdGlvbiBVeXQo''@;'; put 'put ''YyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDIxKSgxLCJkaXYiLDIyKSxndCgyLE55dCwyLDAsImgzIiwyMykoMyxWeXQsMiwxLCJwIiwyNCksaGUoKSxndCg0LGp5dCwxNiw3LCJjbHItZGF0YWdyaWQiLDI1KSxkZSg1LCJkaXYiLDI2KSxndCg2LHp5dCwyLDIsImJ1dHRvbiIsMjcpLGhlKCko''@;'; put 'put ''KSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoMikseGUoIm5nSWYiLGEubG9hZGVkKSxmZSgpLHhlKCJuZ0lmIixhLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCE9PWEuSW5maW5pdHkpLGZlKCkseGUoIm5nSWYiLGEubG9hZGVkKSxmZSgyKSx4ZSgibmdJZiIsYS5saWNl''@;'; put 'put ''bmNlU3RhdGUudmFsdWUuaGlzdG9yeV9yb3dzX2FsbG93ZWQ9PT1hLkluZmluaXR5JiZhLnJvd3NMZWZ0VG9Mb2FkPjApfX1jb25zdCBaeXQ9W3twYXRoOiJhcHByb3ZlIixjb21wb25lbnQ6cHl0fSx7cGF0aDoiYXBwcm92ZURldC86dGFibGVJZCIsY29tcG9uZW50Okk2ZX0se3BhdGg6InN1''@;'; put 'put ''Ym1pdHRlZCIsY29tcG9uZW50OlI2ZX0se3BhdGg6InN1Ym1pdHRlZC86dGFibGVJZCIsY29tcG9uZW50OlI2ZX0se3BhdGg6Imhpc3RvcnkiLGNvbXBvbmVudDooKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuc2FzU3RvcmVT''@;'; put 'put ''ZXJ2aWNlPWQsdGhpcy5ldmVudFNlcnZpY2U9aCx0aGlzLnJvdXRlcj1mLHRoaXMuc2FzU2VydmljZT12LHRoaXMuaGlzdG9yeT1bXSx0aGlzLnRhYmxlVGl0bGVzPVtdLHRoaXMuaGlzdG9yeUFycj1bXSx0aGlzLmxvYWRlZD0hMSx0aGlzLml0ZW1zTnVtPTEwLHRoaXMub3Blbk1vZGFsPSEx''@;'; put 'put ''LHRoaXMubm9EYXRhPSExLHRoaXMuYXBwcm92ZURhdGE9e30sdGhpcy5zYXNqc0NvbmZpZz1uZXcgZmguU0FTanNDb25maWcsdGhpcy5oaXN0UGFyYW1zPXtISVNUOjAsU1RBUlRST1c6MSxOT0JTOi0xfSx0aGlzLmxvYWRpbmdNb3JlPSExLHRoaXMubGljZW5jZVN0YXRlPXRoaXMubGljZW5j''@;'; put 'put ''ZVNlcnZpY2UubGljZW5jZVN0YXRlLHRoaXMuSW5maW5pdHk9MS8wLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCl9Z2V0VGFibGUoYSl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrYSl9Z2V0QmFzZVRhYmxlKGEpe3RoaXMucm91''@;'; put 'put ''dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2RhdGEvIithKX1nZXRFZGl0VGFibGUoYSl7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL2VkaXRvci8iK2EpfWdldEFwcHJJbmRleChhKXtjb25zdCBkPXRoaXMuaGlzdG9yeUFyci5maW5kSW5kZXgoaD0+aC5UQUJMRV9JRD09PWEudGFibGVJ''@;'; put 'put ''ZCk7ZD4tMSYmKHRoaXMuYXBwcm92ZURhdGE9dGhpcy5oaXN0b3J5QXJyW2RdLHRoaXMub3Blbk1vZGFsPSEwKX1nZXQgcm93c0xlZnRUb0xvYWQoKXtjb25zdCBhPXRoaXMuaGlzdFBhcmFtcy5OT0JTLXRoaXMuaGlzdG9yeS5sZW5ndGgsZD10aGlzLmhpc3RQYXJhbXMuSElTVDtyZXR1cm4g''@;'; put 'put ''YTw9MD8wOmE+ZD9kOmF9ZG93bmxvYWQoYSl7bGV0IGQ9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksaD1kLnNlcnZlclVybCxmPWQuYXBwTG9jLHY9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihoK3YrIi8/X3Byb2dyYW09IitmKyIvc2Vy''@;'; put 'put ''dmljZXMvYXVkaXRvcnMvZ2V0YXVkaXRmaWxlJnRhYmxlPSIrYSsiJl9jb250ZXh0bmFtZT0iK3RoaXMuc2FzanNDb25maWcuY29udGV4dE5hbWUpfWxvYWREYXRhKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IGQ9e1NUQVJUUk9XOmEuaGlzdFBhcmFtcy5ISVNUK2Eu''@;'; put 'put ''aGlzdFBhcmFtcy5TVEFSVFJPV307YS5sb2FkaW5nTW9yZT0hMDt0cnl7bGV0IGYsaD15aWVsZCBhLnNhc1N0b3JlU2VydmljZS5nZXRIaXN0b3J5KGQsIkJyb3dzZXJQYXJhbXMiLCJhcHByb3ZlcnMvZ2V0aGlzdG9yeSIpO2EubG9hZGluZ01vcmU9ITEsYS5oaXN0UGFyYW1zPWguaGlzdHBh''@;'; put 'put ''cmFtc1swXTtjb25zdCB2PWguZnJvbXNhcy5zbGljZSgwLGEubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19hbGxvd2VkKTtpZih2Lmxlbmd0aD4wKXtjb25zdCBNPXY7YS5oaXN0b3J5QXJyPXYsZj1PYmplY3Qua2V5cyhNWzBdKSxhLnRhYmxlVGl0bGVzPWY7bGV0IEQ9di5tYXAo''@;'; put 'put ''ZnVuY3Rpb24oWil7cmV0dXJue3RhYmxlSWQ6Wi5UQUJMRV9JRCxzdWJtaXR0ZXI6Wi5TVUJNSVRURVIsc3VibWl0dGVkUmVhc29uOlouU1VCTUlUVEVEX1JFQVNPTl9UWFQsc3VibWl0dGVkOlouU1VCTUlUVEVELHN0YXR1czpaLlNUQVRVUyxyZXZpZXdSZWFzb246Wi5SRVZJRVdfUkVBU09O''@;'; put 'put ''X1RYVCxyZXZpZXdlcjpaLlJFVklFV0VSLHJldmlld2VkOlouUkVWSUVXRUQsbnVtT2ZBcHByb3ZhbHM6Wi5OVU1fT0ZfQVBQUk9WQUxTX1JFUVVJUkVELGJhc2V0YWJsZTpaLkJBU0VfVEFCTEV9fSk7YS5oaXN0b3J5LnB1c2goLi4uRCksYS5sb2FkZWQ9ITB9ZWxzZSBhLmxvYWRlZD0hMCww''@;'; put 'put ''PT09YS5oaXN0b3J5Lmxlbmd0aCYmKGEubm9EYXRhPSEwKX1jYXRjaChoKXthLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoImFwcHJvdmVycy9nZXRoaXN0b3J5IixoKSxhLmxvYWRpbmdNb3JlPSExfX0pKCl9bmdPbkluaXQoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlv''@;'; put 'put ''biooKXthLmxvYWREYXRhKCl9KSgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKGQxKSxHZShWaCksR2UocGMpLEdlKExzKSxHZShKcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLWhpc3Rv''@;'; put 'put ''cnkiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjIwLHZhcnM6Nixjb25zdHM6W1sxLCJjb250ZW50LWFyZWEiXSxbImlkIiwibm9EYXRhQ29udGFpbmVyIiwiY2xhc3MiLCJjYXJkLWJsb2NrIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGZsZXgtY29s''@;'; put 'put ''dW1uIGFsaWduLWl0ZW1zLWNlbnRlciIsNCwibmdJZiJdLFszLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJ0YWJsZSJdLFsxLCJsZWZ0Il0sWzQsIm5nRm9yIiwibmdGb3JP''@;'; put 'put ''ZiJdLFsxLCJtb2RhbC1mb290ZXIiXSxbInR5cGUiLCJidXR0b24iLCJhcmlhLWxhYmVsIiwiQ2xvc2UgbW9kYWwiLDEsImJ0biIsImJ0bi1vdXRsaW5lIiwzLCJjbGljayJdLFsiY2xhc3MiLCJoLTcwdmggZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgZmxleC1jb2x1bW4gYWxpZ24t''@;'; put 'put ''aXRlbXMtY2VudGVyIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImNhcmQiLDQsIm5nSWYiXSxbImlkIiwibm9EYXRhQ29udGFpbmVyIiwxLCJjYXJkLWJsb2NrIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciIsImZsZXgtY29sdW1uIiwiYWxpZ24taXRlbXMtY2VudGVyIl0sWyJzaGFw''@;'; put 'put ''ZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iXSxbMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5Il0sWyJjbGFzcyIsImN1cnNvci1wb2ludGVyIHRhYmxlLWxpbmsiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMSwiY3Vyc29yLXBvaW50ZXIi''@;'; put 'put ''LCJ0YWJsZS1saW5rIiwzLCJjbGljayJdLFsxLCJoLTcwdmgiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJdLFsxLCJzcGlubmVyIl0sWzEsImNhcmQiXSxbMSwi''@;'; put 'put ''Y2FyZC1oZWFkZXIiXSxbImNsYXNzIiwiY2VudGVyIGNsci1jb2wtbWQtMTIgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwidGV4dC1jZW50ZXIgZm9udC13ZWlnaHQtNzAwIGNvbG9yLWRhcmstZ3JheSIsNCwibmdJZiJdLFsiY2xhc3MiLCJkYXRhZ3JpZC1oaXN0b3J5IGRhdGFn''@;'; put 'put ''cmlkLWN1c3RvbS1mb290ZXIiLDQsIm5nSWYiXSxbMSwibG9hZC1tb3JlIiwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbGFzcyIsImJ0biBidG4tc3VjY2VzcyIsMywiY2xyTG9hZGluZyIsImNsaWNrIiw0LCJuZ0lm''@;'; put 'put ''Il0sWzEsImNlbnRlciIsImNsci1jb2wtbWQtMTIiLCJ0ZXh0LWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsImZvbnQtd2VpZ2h0LTcwMCIsImNvbG9yLWRhcmstZ3JheSJdLFsxLCJkYXRhZ3JpZC1oaXN0b3J5IiwiZGF0YWdyaWQtY3VzdG9tLWZvb3RlciJdLFszLCJjbHJEZ0ZpZWxkIl0s''@;'; put 'put ''WzMsImNsaWNrIiw0LCJjbHJEZ0l0ZW1zIiwiY2xyRGdJdGVtc09mIl0sWzMsImNsaWNrIl0sWzEsInZlckNlbnRlciJdLFsxLCJidG4iLCJidG4tc20iLCJidG4tbGluayIsIm0tMCIsMywiY2xpY2siXSxbMSwidmVyQ2VudGVyIiwzLCJuZ0NsYXNzIl0sWzEsInZlckNlbnRlciIsInAtMCIs''@;'; put 'put ''ImQtZmxleCIsImp1c3RpZnktY29udGVudC1jZW50ZXIiXSxbImFyaWEtbGFiZWwiLCJEb3dubG9hZCBhdWRpdCBmaWxlIiwxLCJidG4iLCJidG4tc3VjY2VzcyIsMywiY2xpY2siXSxbInNoYXBlIiwiZG93bmxvYWQiXSxbMSwiYnRuIiwiYnRuLXN1Y2Nlc3MiLDMsImNsaWNrIiwiY2xyTG9h''@;'; put 'put ''ZGluZyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImRpdiIsMCksZ3QoMSxEeXQsNCwwLCJkaXYiLDEpLGRlKDIsImNsci1tb2RhbCIsMikscGkoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIHZpKGgub3Blbk1vZGFsLHYpfHwoaC5vcGVuTW9k''@;'; put 'put ''YWw9diksdn0pLGRlKDMsImg0IiwzKSxMZSg0LCJBcHByb3ZhbCBkZXRhaWxzIiksaGUoKSxkZSg1LCJkaXYiLDQpKDYsInRhYmxlIiw1KSg3LCJ0aGVhZCIpKDgsInRyIikoOSwidGgiLDYpLExlKDEwLCJOYW1lIiksaGUoKSxkZSgxMSwidGgiLDYpLExlKDEyLCJWYWx1ZSIpLGhlKCkoKSgp''@;'; put 'put ''LGRlKDEzLCJ0Ym9keSIpLGd0KDE0LE95dCw3LDQsInRyIiw3KSxoZSgpKCkoKSxkZSgxNSwiZGl2Iiw4KSgxNiwiYnV0dG9uIiw5KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIGgub3Blbk1vZGFsPSExfSksTGUoMTcsIiBPSyAiKSxoZSgpKCkoKSxndCgxOCxIeXQsMywyLCJkaXYi''@;'; put 'put ''LDEwKSgxOSxVeXQsNyw0LCJkaXYiLDExKSxoZSgpKSwyJmQmJihmZSgpLHhlKCJuZ0lmIixoLm5vRGF0YSksZmUoKSxmaSgiY2xyTW9kYWxPcGVuIixoLm9wZW5Nb2RhbCkseGUoImNsck1vZGFsU2l6ZSIsInhsIiksZmUoMTIpLHhlKCJuZ0Zvck9mIixoLnRhYmxlVGl0bGVzKSxmZSg0KSx4''@;'; put 'put ''ZSgibmdJZiIsIWgubG9hZGVkKSxmZSgpLHhlKCJuZ0lmIiwhaC5ub0RhdGEmJmgubG9hZGVkKSl9LGRlcGVuZGVuY2llczpbd3Usc3MseW8seG0sYnAsQTcsJHksU20sdWcsazcsWHksTW0seDcsQ20sRTcsT2wsb3UsS3UsQjAsVDJdLHN0eWxlczpbIi5yZWplY3RlZFtfbmdjb250ZW50LSVD''@;'; put 'put ''T01QJV17Y29sb3I6I2Y4MzEyNjtmb250LXdlaWdodDo3MDB9LmFjY2VwdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojM2ZjNDI0O2ZvbnQtd2VpZ2h0OjcwMH0uaHNDZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXghaW1wb3J0YW50O2ZsZXgtZGlyZWN0aW9uOmNvbHVt''@;'; put 'put ''biFpbXBvcnRhbnQ7anVzdGlmeS1jb250ZW50OmNlbnRlciFpbXBvcnRhbnQ7YWxpZ24taXRlbXM6Y2VudGVyIWltcG9ydGFudDtwYWRkaW5nOjdweH0uYnRDZWxsW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXghaW1wb3J0YW50O2p1c3RpZnktY29udGVudDpjZW50ZXIhaW1wb3J0''@;'; put 'put ''YW50fS52ZXJDZW50ZXJbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7d29yZC1icmVhazpicmVhay1hbGx9LmxvYWQtbW9yZVtfbmdjb250ZW50LSVDT01QJV0gICBpbnB1dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6OTBweH0jbm9EYXRhQ29u''@;'; put 'put ''dGFpbmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6Y2FsYygxMDB2aCAtIDIwMHB4KX0udGFibGUtbGlua1tfbmdjb250ZW50LSVDT01QJV17dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtmb250LXdlaWdodDo3MDB9Il19KX19cmV0dXJuIGN9KSgpfV07bGV0IFd5dD0oKCk9PntjbGFz''@;'; put 'put ''cyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTG8samMuZm9yQ2hpbGQoWnl0KSxqY119KX19cmV0dXJuIGN9KSgp''@;'; put 'put ''LFl5dD0oKCk9PntjbGFzcyBje3N0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVtb2Q9a2koe3R5cGU6Y30pfXN0YXRpY3t0aGlzLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTG8sRGMsV3l0LGowLG45LmZvclJvb3Qo''@;'; put 'put ''KSxLMixfd119KX19cmV0dXJuIGN9KSgpLEd5dD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0KCl7fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6''@;'; put 'put ''W1siYXBwLXJldmlldy1yb3V0ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MSx2YXJzOjAsdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJkd0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltlZ119KX19cmV0dXJuIGN9KSgpO2NvbnN0ICR5''@;'; put 'put ''dD0oYyxsKT0+KHtyZWplY3RlZDpjLGFjY2VwdGVkOmx9KTtmdW5jdGlvbiBLeXQoYyxsKXsxJmMmJihkZSgwLCJzcGFuIiw2KSxMZSgxLCIgTG9hZGluZy4uLiAiKSxoZSgpKX1mdW5jdGlvbiBxeXQoYyxsKXsxJmMmJihkZSgwLCJkaXYiKSgxLCJoMyIpLExlKDIsIkxvYWRpbmcgc3VibWl0''@;'; put 'put ''dGVkIHRhYmxlIiksaGUoKSgpKX1mdW5jdGlvbiBYeXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDQpLGd0KDEsS3l0LDIsMCwic3BhbiIsNSkoMixxeXQsMywwLCJkaXYiLDMpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKCkseGUoIm5nSWYiLCFhLmxvYWRlZCksZmUoKSx4ZSgibmdJ''@;'; put 'put ''ZiIsIWEubG9hZGVkKX19ZnVuY3Rpb24gSnl0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiYnV0dG9uIiwyOCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5hcHByb3ZlVGFibGVTY3JlZW4oKSl9KSxMZSgxLCIgQXBwcm92ZSAiKSxoZSgpfWlm''@;'; put 'put ''KDImYyl7Y29uc3QgYT1PZSgyKTt4ZSgiZGlzYWJsZWQiLCJBUFBST1ZFRCI9PT0obnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5SRVZJRVdfU1RBVFVTX0lEKXx8IlJFSkVDVEVEIj09PShudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlJF''@;'; put 'put ''VklFV19TVEFUVVNfSUQpKSgiZGlzYWJsZWQiLGEucmV2ZXJ0aW5nQ2hhbmdlcyl9fWZ1bmN0aW9uIFF5dChjLGwpezEmYyYmKGRlKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDMxKSgxLCJzcGFuIiksTGUoMiwiIFJldmVydCB0aGlzIGFuZCBhbGwgc3Vic2VxdWVudCBjaGFuZ2VzICIpLGhl''@;'; put 'put ''KCkoKSl9ZnVuY3Rpb24gZV90KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiYnV0dG9uIiwyOSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5yZXZlcnRDaGFuZ2VzKCkpfSksTGUoMSwiIFJFVkVSVCAiKSxndCgyLFF5dCwzLDAsImNsci10b29s''@;'; put 'put ''dGlwLWNvbnRlbnQiLDMwKSxoZSgpfTImYyYmeGUoImNsckxvYWRpbmciLE9lKDIpLnJldmVydGluZ0NoYW5nZXMpfWZ1bmN0aW9uIHRfdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIpKDEsImRpdiIsNykoMiwiZGl2Iiw4KSgzLCJoNCIsOSksTGUoNCwiU3RhZ2VkIERh''@;'; put 'put ''dGEiKSxoZSgpKCkoKSxkZSg1LCJkaXYiLDEwKSg2LCJkaXYiLDExKSg3LCJkaXYiLDEyKSg4LCJkaXYiLDgpLExlKDksIkJhc2ljIFN1Ym1pdHRlZCBEZXRhaWxzIiksaGUoKSgpLGRlKDEwLCJkaXYiKSgxMSwic3BhbiIpLExlKDEyLCJUYWJsZSBJZDoiKSxoZSgpLGRlKDEzLCJzdHJvbmci''@;'; put 'put ''KSgxNCwic3BhbiIpLExlKDE1KSxoZSgpKCkoKSxkZSgxNiwiZGl2IikoMTcsInNwYW4iKSxMZSgxOCwiQmFzZSBUYWJsZToiKSxoZSgpLGRlKDE5LCJhIiwxMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLnZpZXdlclRhYmxlU2NyZWVuKCkpfSksTGUoMjAp''@;'; put 'put ''LGhlKCkoKSxkZSgyMSwiZGl2IikoMjIsInNwYW4iKSxMZSgyMywiU3VibWl0IERhdGU6IiksaGUoKSxkZSgyNCwic3BhbiIsMTQpLExlKDI1KSxoZSgpKCksZGUoMjYsImRpdiIpKDI3LCJzcGFuIiksTGUoMjgsIlJldmlldyBTdGF0dXM6IiksaGUoKSxkZSgyOSwic3BhbiIsMTUpLExlKDMw''@;'; put 'put ''KSxoZSgpKCkoKSxkZSgzMSwiZGl2IiwxNikoMzIsImRpdiIsMTIpKDMzLCJkaXYiLDgpLExlKDM0LCJBY3Rpb25zIiksaGUoKSgpLGRlKDM1LCJkaXYiLDE3KSgzNiwiZGl2IiwxOCkoMzcsImJ1dHRvbiIsMTkpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS52''@;'; put 'put ''aWV3ZXJUYWJsZVNjcmVlbigpKX0pLExlKDM4LCIgVmlldyBiYXNlIHRhYmxlICIpLGhlKCksZ3QoMzksSnl0LDIsMiwiYnV0dG9uIiwyMCksZGUoNDAsImJ1dHRvbiIsMjEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5nb0JhY2soKSl9KSxMZSg0MSwiIEVk''@;'; put 'put ''aXQgYmFzZSB0YWJsZSAiKSxoZSgpLGRlKDQyLCJidXR0b24iLDIyKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpO3JldHVybiBDdChoLmRvd25sb2FkKG51bGw9PWgudGFibGVEZXRhaWxzP251bGw6aC50YWJsZURldGFpbHMuVEFCTEVfSUQpKX0pLEd0KDQzLCJj''@;'; put 'put ''bHItaWNvbiIsMjMpLGhlKCksZGUoNDQsImNsci10b29sdGlwIiksZ3QoNDUsZV90LDMsMSwiYnV0dG9uIiwyNCksaGUoKSgpKCkoKSgpLGRlKDQ2LCJkaXYiLDI1KSxHdCg0NywiaG90LXRhYmxlIiwyNiksaGUoKSxHdCg0OCwiZGl2IiwyNyksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoKTtm''@;'; put 'put ''ZSgxNSksUnIoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuVEFCTEVfSUQsIiIpLGZlKDUpLFJyKCIgIixudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLkJBU0VfVEFCTEUsIiAiKSxmZSg1KSxScigiICIsbnVsbD09YS50YWJsZURl''@;'; put 'put ''dGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5TVUJNSVRURURfT05fRFRUTSwiICIpLGZlKDQpLHhlKCJuZ0NsYXNzIixycCgxNywkeXQsIlJFSkVDVEVEIj09PShudWxsPT1hLnRhYmxlRGV0YWlscz9udWxsOmEudGFibGVEZXRhaWxzLlJFVklFV19TVEFUVVNfSUQpLCJBUFBST1ZFRCI9PT0o''@;'; put 'put ''bnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5SRVZJRVdfU1RBVFVTX0lEKSkpLGZlKCksUnIoIiAiLG51bGw9PWEudGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuUkVWSUVXX1NUQVRVU19JRCwiICIpLGZlKDcpLHhlKCJkaXNhYmxlZCIsYS5yZXZlcnRp''@;'; put 'put ''bmdDaGFuZ2VzKSxmZSgyKSx4ZSgibmdJZiIsIllFUyIhPT0obnVsbD09YS50YWJsZURldGFpbHM/bnVsbDphLnRhYmxlRGV0YWlscy5BTExPV19SRVNUT1JFKSksZmUoKSx4ZSgiZGlzYWJsZWQiLGEucmV2ZXJ0aW5nQ2hhbmdlcyksZmUoNSkseGUoIm5nSWYiLCJZRVMiPT09KG51bGw9PWEu''@;'; put 'put ''dGFibGVEZXRhaWxzP251bGw6YS50YWJsZURldGFpbHMuQUxMT1dfUkVTVE9SRSkpLGZlKDIpLHhlKCJkYXRhIixhLmhvdFRhYmxlLmRhdGEpKCJjb2xIZWFkZXJzIixhLmhvdFRhYmxlLmNvbEhlYWRlcnMpKCJjb2x1bW5zIixhLmhvdFRhYmxlLmNvbHVtbnMpKCJtYXhSb3dzIixhLmhvdFRh''@;'; put 'put ''YmxlLm1heFJvd3MpKCJoZWlnaHQiLGEuaG90VGFibGUuaGVpZ2h0KSgibGljZW5zZUtleSIsYS5ob3RUYWJsZS5saWNlbnNlS2V5KSgiYWZ0ZXJHZXRDb2xIZWFkZXIiLGEuaG90VGFibGUuYWZ0ZXJHZXRDb2xIZWFkZXIpKCJjZWxscyIsYS5ob3RUYWJsZS5jZWxscyl9fWNvbnN0IG5fdD1b''@;'; put 'put ''e3BhdGg6Ijp0YWJsZUlkIixjb21wb25lbnQ6KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYsTSl7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuc2FzU3RvcmVTZXJ2aWNlPWQsdGhpcy5ldmVudFNlcnZpY2U9aCx0aGlzLnJvdXRlPWYsdGhpcy5yb3V0ZXI9dix0aGlzLnNh''@;'; put 'put ''c1NlcnZpY2U9TSx0aGlzLmxvYWRlZD0hMSx0aGlzLnJldmVydGluZ0NoYW5nZXM9ITEsdGhpcy5saWNlbmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5ob3RUYWJsZT17ZGF0YTpbXSxjb2xIZWFkZXJzOltdLGNvbHVtbnM6W10saGVpZ2h0OjUwMCxzZXR0''@;'; put 'put ''aW5nczp7fSxsaWNlbnNlS2V5OnZvaWQgMCxtYXhSb3dzOnRoaXMubGljZW5jZVN0YXRlLnZhbHVlLnN0YWdlX3Jvd3NfYWxsb3dlZHx8MS8wLGFmdGVyR2V0Q29sSGVhZGVyOihELFosbmUpPT57Wi5jbGFzc0xpc3QuYWRkKEtuLmhhbmRzb250YWJsZS5kYXJrVGFibGVIZWFkZXJDbGFzcyl9''@;'; put 'put ''fX1zdWJtaXR0ZWRUYWJsZVNjcmVlbigpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3N0YWdlLyIrdGhpcy50YWJsZV9pZCl9YXBwcm92ZVRhYmxlU2NyZWVuKCl7dGhpcy5yb3V0ZS5uYXZpZ2F0ZUJ5VXJsKCIvcmV2aWV3L2FwcHJvdmVEZXQvIit0aGlzLnRhYmxlX2lkKX12aWV3ZXJU''@;'; put 'put ''YWJsZVNjcmVlbigpe3RoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL3ZpZXcvZGF0YS8iK3RoaXMudGFibGVEZXRhaWxzLkJBU0VfVEFCTEUpfWdvQmFjaygpe0tuLnhsbWFwcy5maW5kKGQ9PmQudGFyZ2V0RFM9PT10aGlzLnRhYmxlRGV0YWlscy5CQVNFX1RBQkxFKT90aGlzLnJvdXRlLm5h''@;'; put 'put ''dmlnYXRlQnlVcmwoIi9ob21lL2V4Y2VsLW1hcHMvIit0aGlzLmhvdFRhYmxlLmRhdGFbMF0uWExNQVBfSUQpOnRoaXMucm91dGUubmF2aWdhdGVCeVVybCgiL2VkaXRvci8iK3RoaXMudGFibGVEZXRhaWxzLkJBU0VfVEFCTEUpfWRvd25sb2FkKGEpe2xldCBkPXRoaXMuc2FzU2VydmljZS5n''@;'; put 'put ''ZXRTYXNqc0NvbmZpZygpLGg9ZC5zZXJ2ZXJVcmwsZj1kLmFwcExvYyx2PXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7d2luZG93Lm9wZW4oaCt2KyIvP19wcm9ncmFtPSIrZisiL3NlcnZpY2VzL2F1ZGl0b3JzL2dldGF1ZGl0ZmlsZSZ0YWJsZT0iK2EpfW5nT25Jbml0KCl7''@;'; put 'put ''dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aWYoYS5saWNlbmNlU2VydmljZS5ob3RfbGljZW5zZV9rZXkuc3Vic2NyaWJlKGQ9PnthLmhvdFRhYmxlLmxpY2Vuc2VLZXk9ZH0pLHR5cGVvZiBhLnJvdXRlci5zbmFwc2hvdC5wYXJhbXMudGFibGVJZDwidSIpe2EudGFibGVfaWQ9''@;'; put 'put ''YS5yb3V0ZXIuc25hcHNob3QucGFyYW1zLnRhYmxlSWQ7dHJ5e2xldCBkPXlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLmdldENoYW5nZUluZm8oYS50YWJsZV9pZCk7aWYoIWR8fCFkLmpzcGFyYW1zKXRocm93IG5ldyBFcnJvcigianNwYXJhbXMgcHJvcGVydHkgaXMgbWlzc2luZyBmcm9tIHJl''@;'; put 'put ''c3BvbnNlLiIpO2EudGFibGVEZXRhaWxzPWQuanNwYXJhbXNbMF19Y2F0Y2goZCl7bGV0IGg9e307ZC5NRVNTQUdFP2g9ZDpoLk1FU1NBR0U9ZCxhLmV2ZW50U2VydmljZS5jYXRjaFJlc3BvbnNlRXJyb3IoInB1YmxpYy9nZXRjaGFuZ2VpbmZvIixoKX10cnl7bGV0IGQ9eWllbGQgYS5zYXNT''@;'; put 'put ''dG9yZVNlcnZpY2Uub3BlblRhYmxlKGEudGFibGVfaWQpO2lmKCFkfHwhZC5zdGFnZXRhYmxlKXRocm93IG5ldyBFcnJvcigiU3RhZ2V0YWJsZSBwcm9wZXJ0eSBpcyBtaXNzaW5nIGZyb20gcmVzcG9uc2UuIik7bGV0IGg9ZC5zdGFnZXRhYmxlWzBdLGY9W10sdj1bXTtmb3IobGV0IEQgaW4g''@;'; put 'put ''aCloJiZmLnB1c2goRCk7Zm9yKGxldCBEPTA7RDxmLmxlbmd0aDtEKyspdi5wdXNoKHtkYXRhOmZbRF19KTtsZXQgTT1mdW5jdGlvbigpe3JldHVybntyZWFkT25seTohMH19O2EuaG90VGFibGUuZGF0YT1kLnN0YWdldGFibGUsYS5ob3RUYWJsZS5jb2xIZWFkZXJzPWYsYS5ob3RUYWJsZS5j''@;'; put 'put ''b2x1bW5zPXYsYS5ob3RUYWJsZS5jZWxscz1NLGEubG9hZGVkPSEwLGEuc2V0Rm9jdXMoKX1jYXRjaChkKXtsZXQgaD17fTtkLk1FU1NBR0V8fChoLk1FU1NBR0U9ZCksYS5ldmVudFNlcnZpY2UuY2F0Y2hSZXNwb25zZUVycm9yKCJhdWRpdG9ycy9nZXRzdGFnZXRhYmxlIixoKSxhLmxvYWRl''@;'; put 'put ''ZD0hMX19fSkoKX1yZXZlcnRDaGFuZ2VzKCl7dGhpcy5yZXZlcnRpbmdDaGFuZ2VzPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJlZGl0b3JzL3Jlc3RvcmUiLHtyZXN0b3JlX2luOlt7bG9hZF9yZWY6dGhpcy50YWJsZV9pZH1dfSkudGhlbihkPT57ZC5hZGFwdGVyUmVzcG9uc2UucmVz''@;'; put 'put ''dG9yZV9vdXQmJnRoaXMucm91dGUubmF2aWdhdGUoWyIvc3RhZ2UiXSkudGhlbigoKT0+e3RoaXMucm91dGUubmF2aWdhdGUoW2Avc3RhZ2UvJHtkLmFkYXB0ZXJSZXNwb25zZS5yZXN0b3JlX291dFswXS5MT0FEUkVGfWBdKX0pfSkuZmluYWxseSgoKT0+e3RoaXMucmV2ZXJ0aW5nQ2hhbmdl''@;'; put 'put ''cz0hMX0pfXNldEZvY3VzKCl7c2V0VGltZW91dCgoKT0+e2xldCBhPXdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYXBwcm92YWwtYnRuIik7YSYmYS5mb2N1cygpfSwyMDApfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKGQxKSxH''@;'; put 'put ''ZShWaCksR2UocGMpLEdlKExzKSxHZShDdSksR2UoSnMpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1zdGFnZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6NCx2YXJzOjIsY29uc3RzOltbMSwiY29udGVudC1h''@;'; put 'put ''cmVhIl0sWzEsImNsci1jb2wtbWQtMTIiLCJjYXJkIl0sWyJjbGFzcyIsImgtODB2aCBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJoLTgwdmgiLCJkLWZsZXgiLCJqdXN0aWZ5LWNv''@;'; put 'put ''bnRlbnQtY2VudGVyIiwiZmxleC1jb2x1bW4iLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbImNsYXNzIiwic3Bpbm5lciIsNCwibmdJZiJdLFsxLCJzcGlubmVyIl0sWyJuZy1pZiIsImxvYWRlZCIsMSwiY2FyZC1oZWFkZXIiXSxbMSwiY2FyZC10aXRsZSIsInRleHQtY2VudGVyIl0sWzEsIm10''@;'; put 'put ''LTAiXSxbIm5nLWlmIiwibG9hZGVkIiwxLCJjbHItcm93Il0sWzEsImNhcmQtYmxvY2siLCJjbHItY29sLW1kLTYiLCJuby1ib3JkZXJzIl0sWzEsImNhcmQtaGVhZGVyIiwicHktNSJdLFsxLCJiYXNlVGFibGVMaW5rIiwzLCJjbGljayJdLFsxLCJtdC0xMCJdLFsxLCJtdC0xMCIsMywibmdD''@;'; put 'put ''bGFzcyJdLFsxLCJjbHItY29sLW1kLTYiLCJjYXJkLWJsb2NrIiwibm8tYm9yZGVycyJdLFsxLCJtdC0yMCJdLFsxLCJyb3ciXSxbMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm1yLTVpIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJpZCIsImFwcHJvdmFs''@;'; put 'put ''LWJ0biIsImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4tc3VjY2Vzcy1vdXRsaW5lIHRleHQtY2VudGVyIG1yLTVpIiwzLCJkaXNhYmxlZCIsImNsaWNrIiw0LCJuZ0lmIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1pbmZvLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm1yLTVpIiwzLCJjbGljayIs''@;'; put 'put ''ImRpc2FibGVkIl0sWzEsImJ0biIsImJ0bi1zbSIsImJ0bi1zdWNjZXNzIiwidGV4dC1jZW50ZXIiLCJtci01aSIsIm1pbi13LTAiLDMsImNsaWNrIl0sWyJzaGFwZSIsImRvd25sb2FkIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsImNsYXNzIiwiYnRuIGJ0bi1zbSBidG4tZGFuZ2VyIHRl''@;'; put 'put ''eHQtY2VudGVyIG10LTIwIiwzLCJjbHJMb2FkaW5nIiwiY2xpY2siLDQsIm5nSWYiXSxbMSwiY2FyZC1ibG9jayJdLFsiaG90SWQiLCJob3RJbnN0YW5jZSIsImlkIiwiaG90VGFibGUiLCJjbGFzc05hbWUiLCJodERhcmsiLCJzdHJldGNoSCIsImFsbCIsMywiZGF0YSIsImNvbEhlYWRlcnMi''@;'; put 'put ''LCJjb2x1bW5zIiwibWF4Um93cyIsImhlaWdodCIsImxpY2Vuc2VLZXkiLCJhZnRlckdldENvbEhlYWRlciIsImNlbGxzIl0sWzEsImNhcmQtZm9vdGVyIiwiZC1mbGV4IiwianVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsiaWQiLCJhcHByb3ZhbC1idG4iLDEsImJ0biIsImJ0bi1zbSIsImJ0''@;'; put 'put ''bi1zdWNjZXNzLW91dGxpbmUiLCJ0ZXh0LWNlbnRlciIsIm1yLTVpIiwzLCJjbGljayIsImRpc2FibGVkIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLWRhbmdlciIsInRleHQtY2VudGVyIiwibXQtMjAiLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsi''@;'; put 'put ''Y2xyUG9zaXRpb24iLCJib3R0b20tbGVmdCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVuIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0IiwiY2xyU2l6ZSIsImxnIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiZGl2IiwwKSgxLCJkaXYiLDEpLGd0KDIsWHl0''@;'; put 'put ''LDMsMiwiZGl2IiwyKSgzLHRfdCw0OSwyMCwiZGl2IiwzKSxoZSgpKCkpLDImZCYmKGZlKDIpLHhlKCJuZ0lmIiwhaC5sb2FkZWQpLGZlKCkseGUoIm5nSWYiLGgubG9hZGVkKSl9LGRlcGVuZGVuY2llczpbd3UseW8sT2wsQjAseDIsVDIscDcsbTcsZzcseF9dLHN0eWxlczpbIi5yZWplY3Rl''@;'; put 'put ''ZFtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6I2Y4MzEyNjtmb250LXdlaWdodDo3MDB9LmFjY2VwdGVkW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjojM2ZjNDI0O2ZvbnQtd2VpZ2h0OjcwMH0uYmFzZVRhYmxlTGlua1tfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOnBvaW50ZXI7bWFyZ2lu''@;'; put 'put ''LXRvcDoxMHB4O2NvbG9yOiMwMDdjYmJ9ICBib2R5W2Nkcy10aGVtZT1kYXJrXSAuYmFzZVRhYmxlTGlua3tjb2xvcjojNGVjMGZmfSJdfSl9fXJldHVybiBjfSkoKX1dO2xldCByX3Q9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhk''@;'; put 'put ''fHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KX1zdGF0aWN7dGhpcy5cdTAyNzVpbmo9QXIoe2ltcG9ydHM6W0xvLGowLGpjLmZvckNoaWxkKG5fdCksbjkuZm9yUm9vdCgpXX0pfX1yZXR1cm4gY30pKCk7ZnVuY3Rpb24gaV90KGMsbCl7aWYoMSZjJiYoZGUoMCwicCIs''@;'; put 'put ''MTcpLExlKDEsIiBWaWV3ZXIgcm93cyBsaW1pdDogIiksZGUoMiwic3BhbiIsNyksTGUoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgzKSxfcihhLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3ZXJfcm93c19hbGxvd2VkKX19ZnVuY3Rpb24gb190KGMsbCl7aWYoMSZjJiYoZGUoMCwi''@;'; put 'put ''cCIsMTcpLExlKDEsIiBFZGl0b3Igcm93cyBsaW1pdDogIiksZGUoMiwic3BhbiIsNyksTGUoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgzKSxfcihhLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0b3Jfcm93c19hbGxvd2VkKX19ZnVuY3Rpb24gYV90KGMsbCl7aWYoMSZjJiYoZGUo''@;'; put 'put ''MCwicCIsMTcpLExlKDEsIiBTdGFnZSByb3dzIGxpbWl0OiAiKSxkZSgyLCJzcGFuIiw3KSxMZSgzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDMpLF9yKGEubGljZW5jZVN0YXRlLnZhbHVlLnN0YWdlX3Jvd3NfYWxsb3dlZCl9fWZ1bmN0aW9uIHNfdChjLGwpe2lmKDEmYyYmKGRl''@;'; put 'put ''KDAsInAiLDE3KSxMZSgxLCIgSGlzdG9yeSByb3dzIGxpbWl0OiAiKSxkZSgyLCJzcGFuIiw3KSxMZSgzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDMpLF9yKGEubGljZW5jZVN0YXRlLnZhbHVlLmhpc3Rvcnlfcm93c19hbGxvd2VkKX19ZnVuY3Rpb24gbF90KGMsbCl7aWYoMSZj''@;'; put 'put ''JiYoZGUoMCwicCIsMTcpLExlKDEsIiBTdWJtaXQgcm93cyBsaW1pdDogIiksZGUoMiwic3BhbiIsNyksTGUoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgzKSxfcihhLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdWJtaXRfcm93c19saW1pdCl9fWZ1bmN0aW9uIGNfdChjLGwpe2lmKDEm''@;'; put 'put ''YyYmKGRlKDAsInAiLDE3KSxMZSgxLCIgVGFibGVzIGluIGxpYnJhcnkgbGltaXQ6ICIpLGRlKDIsInNwYW4iLDcpLExlKDMpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoMyksX3IoYS5saWNlbmNlU3RhdGUudmFsdWUudGFibGVzX2luX2xpYnJhcnlfbGltaXQpfX1mdW5jdGlvbiB1''@;'; put 'put ''X3QoYyxsKXtpZigxJmMmJihkZSgwLCJwIiwxNyksTGUoMSwiIFZpZXdib3hlcyBsaW1pdDogIiksZGUoMiwic3BhbiIsNyksTGUoMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgzKSxfcihhLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3Ym94X2xpbWl0KX19ZnVuY3Rpb24gZF90KGMs''@;'; put 'put ''bCl7aWYoMSZjJiYoZGUoMCwicCIsMTcpLExlKDEsIiBMaW5lYWdlIGRhaWx5IGxpbWl0OiAiKSxkZSgyLCJzcGFuIiw3KSxMZSgzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgpO2ZlKDMpLF9yKGEubGljZW5jZVN0YXRlLnZhbHVlLmxpbmVhZ2VfZGFpbHlfbGltaXQpfX1mdW5jdGlvbiBo''@;'; put 'put ''X3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDE5KSxMZSgxLCIgUmVmcmVzaCBEYXRhIExpbmVhZ2UgIiksZGUoMiwiYnV0dG9uIiwyMCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5yZWZyZXNoRGF0YUxpbmVhZ2UoKSl9KSxMZSgz''@;'; put 'put ''LCIgUkVGUkVTSCAiKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDIpLHhlKCJjbHJMb2FkaW5nIixhLnJlZnJlc2hpbmdEYXRhTGluZWFnZSl9fWZ1bmN0aW9uIGZfdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2xpKDApLGd0KDEsaF90LDQsMSwiZGl2IiwxOCksZGUoMiwi''@;'; put 'put ''ZGl2IiwxOSksTGUoMywiIFJlZnJlc2ggRGF0YSBDYXRhbG9nICIpLGRlKDQsImJ1dHRvbiIsMjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5yZWZyZXNoRGF0YUNhdGFsb2coKSl9KSxMZSg1LCIgUkVGUkVTSCAiKSxoZSgpKCksZGUoNiwiZGl2IiwxOSks''@;'; put 'put ''TGUoNywiIERvd25sb2FkIENvbmZpZ3VyYXRpb24gIiksZGUoOCwiYnV0dG9uIiwyMSksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLmRvd25sb2FkQ29uZmlndXJhdGlvbigpKX0pLExlKDksIiBET1dOTE9BRCAiKSxoZSgpKCksZGUoMTAsImRpdiIsMTkpLExl''@;'; put 'put ''KDExLCIgVXBkYXRlIExpY2VuY2UgS2V5ICIpLGRlKDEyLCJidXR0b24iLDIyKSxMZSgxMywiIFVQREFURSAiKSxoZSgpKCksY2koKX1pZigyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLHhlKCJuZ0lmIiwiU0FTOSI9PT1hLnNlcnZlclR5cGUpLGZlKDMpLHhlKCJjbHJMb2FkaW5nIixhLnJlZnJl''@;'; put 'put ''c2hpbmdEYXRhQ2F0YWxvZyl9fWNvbnN0IHBfdD1be3BhdGg6IiIsY29tcG9uZW50OigoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZil7dGhpcy5hcHBTZXJ2aWNlPWEsdGhpcy5zYXNTZXJ2aWNlPWQsdGhpcy5saWNlbmNlU2VydmljZT1oLHRoaXMuYXBwU2V0dGluZ3NTZXJ2aWNl''@;'; put 'put ''PWYsdGhpcy5hcHBJbmZvPXthZGFwdGVyVmVyc2lvbjoiNC4xMS4zIixhcHBWZXJzaW9uOiJ2Ni4xNC42Ii5yZXBsYWNlKCJ2IiwiIiksYnVpbGRUaW1lc3RhbXA6X2FlKCkocGFyc2VJbnQoIjE3NDM2NjkxNTkxNzMiKSkuZm9ybWF0KCJERC1NTU0tWVlZWSBISDpNTSIpfSx0aGlzLmh0dHA9''@;'; put 'put ''Imh0dHA6Ij09PWxvY2F0aW9uLnByb3RvY29sLHRoaXMucmVmcmVzaGluZ0RhdGFDYXRhbG9nPSExLHRoaXMucmVmcmVzaGluZ0RhdGFMaW5lYWdlPSExLHRoaXMucmVzcG9uc2U9Ik5vIHJlc3BvbnNlIix0aGlzLnJlc3BvbnNlTW9kYWw9ITEsdGhpcy5JbmZpbml0eT0xLzAsdGhpcy5saWNl''@;'; put 'put ''bmNlU3RhdGU9dGhpcy5saWNlbmNlU2VydmljZS5saWNlbmNlU3RhdGUsdGhpcy5zZXJ2ZXJUeXBlPXRoaXMuc2FzU2VydmljZS5nZXRTZXJ2ZXJUeXBlKCksdGhpcy5saWNlbmNlSW5mbz10aGlzLmxpY2VuY2VTZXJ2aWNlLmdldExpY2Vuc2VLZXlEYXRhKCksdGhpcy5lbnZpcm9ubWVudElu''@;'; put 'put ''Zm89dGhpcy5hcHBTZXJ2aWNlLmdldEVudmlyb25tZW50SW5mbygpLHRoaXMuc2V0dGluZ3M9dGhpcy5hcHBTZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MudmFsdWUsdGhpcy5lbnZpcm9ubWVudEluZm8uQVVUT0VYRUMmJih0aGlzLmVudmlyb25tZW50SW5mby5BVVRPRVhFQz1kZWNvZGVVUklD''@;'; put 'put ''b21wb25lbnQodGhpcy5lbnZpcm9ubWVudEluZm8uQVVUT0VYRUMpKSx0aGlzLmFwcFNldHRpbmdzU2VydmljZS5zZXR0aW5ncy5zdWJzY3JpYmUodj0+e3RoaXMuc2V0dGluZ3M9dn0pfW5nT25Jbml0KCl7fXNldHRpbmdDaGFuZ2UoYSl7dGhpcy5hcHBTZXR0aW5nc1NlcnZpY2Uuc2V0QXBw''@;'; put 'put ''U2V0dGluZ3ModGhpcy5zZXR0aW5ncyl9ZG93bmxvYWRDb25maWd1cmF0aW9uKCl7bGV0IGE9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksZD1hLnNlcnZlclVybCxoPWEuYXBwTG9jLGY9dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgoKTt3aW5kb3cub3BlbihkK2Yr''@;'; put 'put ''Ii8/X3Byb2dyYW09IitoKyIvc2VydmljZXMvYWRtaW4vZXhwb3J0Y29uZmlnIil9cmVmcmVzaERhdGFDYXRhbG9nKCl7dGhpcy5yZWZyZXNoaW5nRGF0YUNhdGFsb2c9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoImFkbWluL3JlZnJlc2hjYXRhbG9nIixudWxsKS50aGVuKGE9Pnt0aGlz''@;'; put 'put ''LnJlc3BvbnNlPXRoaXMucGFyc2VSZXNwb25zZShhLmFkYXB0ZXJSZXNwb25zZSksdGhpcy5yZXNwb25zZU1vZGFsPSEwfSkuY2F0Y2goYT0+e3RoaXMucmVzcG9uc2U9dGhpcy5wYXJzZVJlc3BvbnNlKGEuYWRhcHRlclJlc3BvbnNlKSx0aGlzLnJlc3BvbnNlTW9kYWw9ITB9KS5maW5hbGx5''@;'; put 'put ''KCgpPT57dGhpcy5yZWZyZXNoaW5nRGF0YUNhdGFsb2c9ITF9KX1yZWZyZXNoRGF0YUxpbmVhZ2UoKXt0aGlzLnJlZnJlc2hpbmdEYXRhTGluZWFnZT0hMCx0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgiYWRtaW4vcmVmcmVzaHRhYmxlbGluZWFnZSIsbnVsbCkudGhlbihhPT57dGhpcy5yZXNw''@;'; put 'put ''b25zZT10aGlzLnBhcnNlUmVzcG9uc2UoYS5hZGFwdGVyUmVzcG9uc2UpLHRoaXMucmVzcG9uc2VNb2RhbD0hMH0pLmNhdGNoKGE9Pnt0aGlzLnJlc3BvbnNlPXRoaXMucGFyc2VSZXNwb25zZShhLmFkYXB0ZXJSZXNwb25zZSksdGhpcy5yZXNwb25zZU1vZGFsPSEwfSkuZmluYWxseSgoKT0+''@;'; put 'put ''e3RoaXMucmVmcmVzaGluZ0RhdGFMaW5lYWdlPSExfSl9cGFyc2VSZXNwb25zZShhKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGE/SlNPTi5zdHJpbmdpZnkoYSk6YX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShRUiksR2UoSnMpLEdlKGQx''@;'; put 'put ''KSxHZShqUikpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXN5c3RlbSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MTM4LHZhcnM6MzYsY29uc3RzOltbMSwiY29udGVudC1hcmVhIl0sWzEsImNhcmQiLCJwLTEw''@;'; put 'put ''IiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWzEsInRleHQtY2VudGVyIiwibS0wIl0sWzEsInctMTAwIiwibGlnaHQiXSxbMSwiY29udGVudC1ib3giLCJkLWZsZXgiLCJjbHItZmxleC1j''@;'; put 'put ''b2x1bW4iXSxbMSwic3lzLWluZm8iLCJkLWZsZXgiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciIsImNsci1mbGV4LWNvbHVtbiIsImNsci1mbGV4LWxnLXJvdyJdLFsiY2RzLXRleHQiLCJzdWJzZWN0aW9uIiwxLCJtYi0xMCJdLFsxLCJkYXJrIl0sWyJjZHMtdGV4dCIsImxhYmVsIiwx''@;'; put 'put ''LCJtLTAiXSxbMSwiZC1mbGV4IiwiY2xyLWp1c3RpZnktY29udGVudC1sZy1jZW50ZXIiXSxbImNsYXNzIiwibS0wIiw0LCJuZ0lmIl0sWzQsIm5nSWYiXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIl0sWzEsIm1vZGFsLXRpdGxlIl0sWzEsIm1vZGFsLWJvZHkiXSxb''@;'; put 'put ''MSwibW9kYWwtZm9vdGVyIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbMSwibS0wIl0sWyJjbGFzcyIsImFkbWluLWFjdGlvbiIsNCwibmdJZiJdLFsxLCJhZG1pbi1hY3Rpb24iXSxbMSwiYnRuIiwiYnRuLWluZm8iLCJidG4t''@;'; put 'put ''c20iLDMsImNsaWNrIiwiY2xyTG9hZGluZyJdLFsxLCJidG4iLCJidG4taW5mbyIsImJ0bi1zbSIsMywiY2xpY2siXSxbInJvdXRlckxpbmsiLCIvbGljZW5zaW5nL3VwZGF0ZSIsMSwiYnRuIiwiYnRuLWluZm8iLCJidG4tc20iXV0sdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJihkZSgw''@;'; put 'put ''LCJkaXYiLDApKDEsImRpdiIsMSkoMiwiaDQiLDIpLExlKDMsIlN5c3RlbSBpbmZvcm1hdGlvbiIpLGhlKCksR3QoNCwiaHIiLDMpLGRlKDUsImRpdiIsNCkoNiwiZGl2Iiw1KSg3LCJkaXYiKSg4LCJoNiIsNiksTGUoOSwiIEVudmlyb25tZW50IERldGFpbHMgIiksR3QoMTAsInNwYW4iLDcp''@;'; put 'put ''LGhlKCksZGUoMTEsInAiLDgpLExlKDEyLCIgU1lTU0lURTogIiksZGUoMTMsInNwYW4iLDcpLExlKDE0KSxoZSgpKCksZGUoMTUsInAiLDgpLExlKDE2LCIgU1lTU0NQTDogIiksZGUoMTcsInNwYW4iLDcpLExlKDE4KSxoZSgpKCksZGUoMTksInAiLDgpLExlKDIwLCIgU1lTVENQSVBIT1NU''@;'; put 'put ''TkFNRTogIiksZGUoMjEsInNwYW4iLDcpLExlKDIyKSxoZSgpKCksZGUoMjMsInAiLDgpLExlKDI0LCIgU1lTVkxPTkc6ICIpLGRlKDI1LCJzcGFuIiw3KSxMZSgyNiksaGUoKSgpLGRlKDI3LCJwIiw4KSxMZSgyOCwiIE1FTVNJWkU6ICIpLGRlKDI5LCJzcGFuIiw3KSxMZSgzMCksaGUoKSgp''@;'; put 'put ''LGRlKDMxLCJwIiw4KSxMZSgzMiwiIFNZU1BST0NFU1NNT0RFOiAiKSxkZSgzMywic3BhbiIsNyksTGUoMzQpLGhlKCkoKSxkZSgzNSwicCIsOCksTGUoMzYsIiBTWVNIT1NUTkFNRTogIiksZGUoMzcsInNwYW4iLDcpLExlKDM4KSxoZSgpKCksZGUoMzksInAiLDgpLExlKDQwLCIgU1lTVVNF''@;'; put 'put ''UklEOiAiKSxkZSg0MSwic3BhbiIsNyksTGUoNDIpLGhlKCkoKSxkZSg0MywicCIsOCksTGUoNDQsIiBTWVNIT1NUSU5GT0xPTkc6ICIpLGRlKDQ1LCJzcGFuIiw3KSxMZSg0NiksaGUoKSgpLGRlKDQ3LCJwIiw4KSxMZSg0OCwiIFNZU0VOQ09ESU5HOiAiKSxkZSg0OSwic3BhbiIsNyksTGUo''@;'; put 'put ''NTApLGhlKCkoKSxkZSg1MSwicCIsOCksTGUoNTIsIiBBVVRPRVhFQzogIiksZGUoNTMsInNwYW4iLDcpLExlKDU0KSxoZSgpKCkoKSxkZSg1NSwiZGl2Iiw5KSg1NiwiZGl2IikoNTcsImg2Iiw2KSxMZSg1OCwiIERhdGEgQ29udHJvbGxlciBEZXRhaWxzICIpLEd0KDU5LCJzcGFuIiw3KSxo''@;'; put 'put ''ZSgpLGRlKDYwLCJwIiw4KSxMZSg2MSwiIEFwcGxpY2F0aW9uIHZlcnNpb246ICIpLGRlKDYyLCJzcGFuIiw3KSxMZSg2MyksaGUoKSgpLGRlKDY0LCJwIiw4KSxMZSg2NSwiIEJ1aWxkIHRpbWVzdGFtcDogIiksZGUoNjYsInNwYW4iLDcpLExlKDY3KSxoZSgpKCksZGUoNjgsInAiLDgpLExl''@;'; put 'put ''KDY5LCIgQWRhcHRlciB2ZXJzaW9uOiAiKSxkZSg3MCwic3BhbiIsNyksTGUoNzEpLGhlKCkoKSxkZSg3MiwicCIsOCksTGUoNzMsIiBIVFRQOiAiKSxkZSg3NCwic3BhbiIsNyksTGUoNzUpLGhlKCkoKSxkZSg3NiwicCIsOCksTGUoNzcsIiBEQyBBZG1pbiBHcm91cDogIiksZGUoNzgsInNw''@;'; put 'put ''YW4iLDcpLExlKDc5KSxoZSgpKCksZGUoODAsInAiLDgpLExlKDgxLCIgQXBwIExvY2F0aW9uOiAiKSxkZSg4Miwic3BhbiIsNyksTGUoODMpLGhlKCkoKSgpKCksZGUoODQsImRpdiIpKDg1LCJoNiIsNiksTGUoODYsIiBMaWNlbmNlIGRldGFpbHMgIiksR3QoODcsInNwYW4iLDcpLGhlKCks''@;'; put 'put ''ZGUoODgsInAiLDgpLExlKDg5LCIgVmFsaWQgdW50aWw6ICIpLGRlKDkwLCJzcGFuIiw3KSxMZSg5MSksaGUoKSgpLGRlKDkyLCJwIiw4KSxMZSg5MywiIFVzZXJzIGFsbG93ZWQ6ICIpLGRlKDk0LCJzcGFuIiw3KSxMZSg5NSksaGUoKSgpLGRlKDk2LCJwIiw4KSxMZSg5NywiIFNpdGUgSURz''@;'; put 'put ''OiAiKSxkZSg5OCwic3BhbiIsNyksTGUoOTkpLGhlKCkoKSxkZSgxMDAsInAiLDgpLExlKDEwMSwiIEZyZWUgVGllcjogIiksZGUoMTAyLCJzcGFuIiw3KSxMZSgxMDMpLGhlKCkoKSxndCgxMDQsaV90LDQsMSwicCIsMTApKDEwNSxvX3QsNCwxLCJwIiwxMCkoMTA2LGFfdCw0LDEsInAiLDEw''@;'; put 'put ''KSgxMDcsc190LDQsMSwicCIsMTApKDEwOCxsX3QsNCwxLCJwIiwxMCkoMTA5LGNfdCw0LDEsInAiLDEwKSgxMTAsdV90LDQsMSwicCIsMTApKDExMSxkX3QsNCwxLCJwIiwxMCksZGUoMTEyLCJwIiw4KSxMZSgxMTMsIiBWaWV3Ym94ZXM6ICIpLGRlKDExNCwic3BhbiIsNyksTGUoMTE1KSxo''@;'; put 'put ''ZSgpKCksZGUoMTE2LCJwIiw4KSxMZSgxMTcsIiBGaWxlIFVwbG9hZDogIiksZGUoMTE4LCJzcGFuIiw3KSxMZSgxMTkpLGhlKCkoKSxkZSgxMjAsInAiLDgpLExlKDEyMSwiIEVkaXQgcmVjb3JkOiAiKSxkZSgxMjIsInNwYW4iLDcpLExlKDEyMyksaGUoKSgpLGRlKDEyNCwicCIsOCksTGUo''@;'; put 'put ''MTI1LCIgQWRkIHJlY29yZDogIiksZGUoMTI2LCJzcGFuIiw3KSxMZSgxMjcpLGhlKCkoKSgpKCksR3QoMTI4LCJociIsMyksZ3QoMTI5LGZfdCwxNCwyLCJuZy1jb250YWluZXIiLDExKSxoZSgpKCkoKSxkZSgxMzAsImNsci1tb2RhbCIsMTIpLHBpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1''@;'; put 'put ''bmN0aW9uKHYpe3JldHVybiB2aShoLnJlc3BvbnNlTW9kYWwsdil8fChoLnJlc3BvbnNlTW9kYWw9diksdn0pLGRlKDEzMSwiaDMiLDEzKSxMZSgxMzIsIlJlc3BvbnNlIiksaGUoKSxkZSgxMzMsImRpdiIsMTQpLExlKDEzNCksaGUoKSxkZSgxMzUsImRpdiIsMTUpKDEzNiwiYnV0dG9uIiwx''@;'; put 'put ''NiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiBoLnJlc3BvbnNlTW9kYWw9ITF9KSxMZSgxMzcsIiBPayAiKSxoZSgpKCkoKSksMiZkJiYoZmUoMTQpLF9yKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uU1lTU0lURSksZmUoNCksX3IobnVsbD09''@;'; put 'put ''aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNTQ1BMKSxmZSg0KSxfcihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLlNZU1RDUElQSE9TVE5BTUUpLGZlKDQpLF9yKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5l''@;'; put 'put ''bnZpcm9ubWVudEluZm8uU1lTVkxPTkcpLGZlKDQpLF9yKG51bGw9PWguZW52aXJvbm1lbnRJbmZvP251bGw6aC5lbnZpcm9ubWVudEluZm8uTUVNU0laRSksZmUoNCksX3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNQUk9DRVNTTU9ERSksZmUo''@;'; put 'put ''NCksX3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNIT1NUTkFNRSksZmUoNCksX3IobnVsbD09aC5lbnZpcm9ubWVudEluZm8/bnVsbDpoLmVudmlyb25tZW50SW5mby5TWVNVU0VSSUQpLGZlKDQpLF9yKG51bGw9PWguZW52aXJvbm1lbnRJbmZv''@;'; put 'put ''P251bGw6aC5lbnZpcm9ubWVudEluZm8uU1lTSE9TVElORk9MT05HKSxmZSg0KSxfcihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLlNZU0VOQ09ESU5HKSxmZSg0KSxfcihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZv''@;'; put 'put ''LkFVVE9FWEVDKSxmZSg5KSxfcihoLmFwcEluZm8uYXBwVmVyc2lvbiksZmUoNCksX3IoaC5hcHBJbmZvLmJ1aWxkVGltZXN0YW1wKSxmZSg0KSxfcihoLmFwcEluZm8uYWRhcHRlclZlcnNpb24pLGZlKDQpLF9yKGguaHR0cD8iWUVTIjoiTk8iKSxmZSg0KSxfcihudWxsPT1oLmVudmlyb25t''@;'; put 'put ''ZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLkRDX0FETUlOX0dST1VQKSxmZSg0KSxfcihudWxsPT1oLmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLkFQUF9MT0MpLGZlKDgpLF9yKG51bGw9PWgubGljZW5jZUluZm8/bnVsbDpoLmxpY2VuY2VJbmZvLnZhbGlk''@;'; put 'put ''X3VudGlsKSxmZSg0KSxfcihudWxsPT1oLmxpY2VuY2VJbmZvP251bGw6aC5saWNlbmNlSW5mby51c2Vyc19hbGxvd2VkKSxmZSg0KSxfcihudWxsPT1oLmxpY2VuY2VJbmZvP251bGw6aC5saWNlbmNlSW5mby5zaXRlX2lkX211bHRpcGxlKSxmZSg0KSxfcihudWxsIT1oLmxpY2VuY2VJbmZv''@;'; put 'put ''JiZoLmxpY2VuY2VJbmZvLmRlbW8/IllFUyI6Ik5PIiksZmUoKSx4ZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZCE9PWguSW5maW5pdHkpLGZlKCkseGUoIm5nSWYiLGgubGljZW5jZVN0YXRlLnZhbHVlLmVkaXRvcl9yb3dzX2FsbG93ZWQhPT1oLklu''@;'; put 'put ''ZmluaXR5KSxmZSgpLHhlKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5zdGFnZV9yb3dzX2FsbG93ZWQhPT1oLkluZmluaXR5KSxmZSgpLHhlKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS5oaXN0b3J5X3Jvd3NfYWxsb3dlZCE9PWguSW5maW5pdHkpLGZlKCkseGUoIm5nSWYiLGgu''@;'; put 'put ''bGljZW5jZVN0YXRlLnZhbHVlLnN1Ym1pdF9yb3dzX2xpbWl0IT09aC5JbmZpbml0eSksZmUoKSx4ZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUudGFibGVzX2luX2xpYnJhcnlfbGltaXQhPT1oLkluZmluaXR5KSxmZSgpLHhlKCJuZ0lmIixoLmxpY2VuY2VTdGF0ZS52YWx1ZS52aWV3''@;'; put 'put ''Ym94X2xpbWl0IT09aC5JbmZpbml0eSksZmUoKSx4ZSgibmdJZiIsaC5saWNlbmNlU3RhdGUudmFsdWUubGluZWFnZV9kYWlseV9saW1pdCE9PWguSW5maW5pdHkpLGZlKDQpLF9yKGgubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdib3g/IllFUyI6Ik5PIiksZmUoNCksX3IoaC5saWNlbmNlU3Rh''@;'; put 'put ''dGUudmFsdWUuZmlsZVVwbG9hZD8iWUVTIjoiTk8iKSxmZSg0KSxfcihoLmxpY2VuY2VTdGF0ZS52YWx1ZS5lZGl0UmVjb3JkPyJZRVMiOiJOTyIpLGZlKDQpLF9yKGgubGljZW5jZVN0YXRlLnZhbHVlLmFkZFJlY29yZD8iWUVTIjoiTk8iKSxmZSgyKSx4ZSgibmdJZiIsMT09PShudWxsPT1o''@;'; put 'put ''LmVudmlyb25tZW50SW5mbz9udWxsOmguZW52aXJvbm1lbnRJbmZvLklTQURNSU4pKSxmZSgpLGZpKCJjbHJNb2RhbE9wZW4iLGgucmVzcG9uc2VNb2RhbCksZmUoNCksUnIoIiAiLGgucmVzcG9uc2UsIiAiKSl9LGRlcGVuZGVuY2llczpbeW8sdTEsb3UsS3UsQjAsVDJdLHN0eWxlczpbIi5j''@;'; put 'put ''b250ZW50LWJveFtfbmdjb250ZW50LSVDT01QJV17bWF4LXdpZHRoOjEyODlweH0uc3lzLWluZm9bX25nY29udGVudC0lQ09NUCVdID4gZGl2W19uZ2NvbnRlbnQtJUNPTVAlXXtmbGV4OjF9LnN5cy1pbmZvW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGRpdltfbmdjb250ZW50LSVDT01QJV06bnRo''@;'; put 'put ''LWNoaWxkKDIpe21hcmdpbjowIDMwcHh9LmFkbWluLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV0sIC51c2VyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjVweCAx''@;'; put 'put ''MHB4O2JvcmRlci1yYWRpdXM6NnB4O2JvcmRlcjoxcHggc29saWQgI2RlZGVkZTttYXJnaW4tYm90dG9tOjVweH0uYWRtaW4tYWN0aW9uW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV0sIC51c2VyLWFjdGlvbltfbmdjb250ZW50LSVDT01QJV0gICBidXR0''@;'; put 'put ''b25bX25nY29udGVudC0lQ09NUCVde21pbi13aWR0aDoxMDJweH0uZGFya1tfbmdjb250ZW50LSVDT01QJV17Zm9udC13ZWlnaHQ6NzAwO21hcmdpbi1sZWZ0OjVweH1AbWVkaWEgKG1heC13aWR0aDogOTkzcHgpey5zeXMtaW5mb1tfbmdjb250ZW50LSVDT01QJV0gICBkaXZbX25nY29udGVu''@;'; put 'put ''dC0lQ09NUCVdOm50aC1jaGlsZCgyKXttYXJnaW46MH0uc3lzLWluZm9bX25nY29udGVudC0lQ09NUCVdICAgZGl2W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MjBweCAwfX0iXX0pfX1yZXR1cm4gY30pKCl9XTtsZXQgZ190PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltqYy5mb3JDaGlsZChwX3QpLGpjXX0pfX1yZXR1cm4gY30pKCksbV90PSgoKT0+e2NsYXNzIGN7c3RhdGlje3Ro''@;'; put 'put ''aXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltMbyxnX3QsajAsRGNdfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiB2X3QoYyxsKXsxJmMm''@;'; put 'put ''Jkd0KDAsImNsci1pY29uIiwxMil9ZnVuY3Rpb24gYl90KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLWljb24iLDEzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgyKTtyZXR1cm4gaC5ncm91cFNlYXJjaD0iIixDdChoLmdyb3VwTGlzdE9uRmls''@;'; put 'put ''dGVyKCkpfSksaGUoKX19ZnVuY3Rpb24geV90KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsNykoMSwiZGl2Iiw4KSgyLCJpbnB1dCIsOSwwKSxwaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpO3JldHVybiB2aShm''@;'; put 'put ''Lmdyb3VwU2VhcmNoLGgpfHwoZi5ncm91cFNlYXJjaD1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5ncm91cExpc3RPbkZpbHRlcigpKX0pLGhlKCksZ3QoNCx2X3QsMSwwLCJjbHItaWNvbiIsMTApKDUsYl90LDEsMCwiY2xyLWljb24iLDEx''@;'; put 'put ''KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPXZvKDMpLGQ9T2UoKTtmZSgyKSxmaSgibmdNb2RlbCIsZC5ncm91cFNlYXJjaCksZmUoMikseGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCkseGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBfX3QoYyxsKXtpZigxJmMp''@;'; put 'put ''e2NvbnN0IGE9T24oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwxNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKCkuZ3JvdXBPbkNsaWNrKGgpKX0pLGRlKDEsInAiLDE2KSxHdCgyLCJjbHItaWNvbiIsMTcpLExlKDMpLGhl''@;'; put 'put ''KCkoKX1pZigyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQsZD1PZSgpO3hyKCJhY3RpdmUiLGEuR1JPVVBVUkk9PT1kLmdyb3VwVXJpKSxmZSgzKSxScigiICIsYS5HUk9VUE5BTUUsIiAiKX19ZnVuY3Rpb24gd190KGMsbCl7aWYoMSZjJiYobGkoMCksZ3QoMSxfX3QsNCwzLCJjbHItdHJl''@;'; put 'put ''ZS1ub2RlIiwxNCksY2koKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCkseGUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIENfdChjLGwpezEmYyYmKGRlKDAsImRpdiIsMTgpKDEsInNwYW4iLDE5KSxMZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpKCkpfWZ1bmN0aW9uIFNfdChj''@;'; put 'put ''LGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMjEpKDEsImRpdiIsMjIpKDIsInRhYmxlIiwyNCkoMywidGJvZHkiKSg0LCJ0ciIpKDUsInRkIiwyNSkoNiwicCIsMjYpKDcsImIiKSxMZSg4KSxoZSgpKCkoKSgpLGRlKDksInRyIikoMTAsInRkIiwyNSkoMTEsImkiKSxMZSgxMiksaGUoKSgpKCko''@;'; put 'put ''KSgpKCkoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDgpLF9yKGEuZ3JvdXBOYW1lKSxmZSg0KSxfcihhLmdyb3VwRGVzY3x8Im5vIGRlc2NyaXB0aW9uIil9fWZ1bmN0aW9uIE1fdChjLGwpezEmYyYmKGRlKDAsImg1IiksTGUoMSwiTm8gTWVtYmVycyBQcmVzZW50IiksaGUoKSl9ZnVuY3Rp''@;'; put 'put ''b24geF90KGMsbCl7MSZjJiYobGkoMCksZGUoMSwidGQiLDMxKSgyLCJiIiksTGUoMywiTkFNRSIpLGhlKCkoKSxkZSg0LCJ0ZCIsMzEpKDUsImIiKSxMZSg2LCJFTUFJTCIpLGhlKCkoKSxkZSg3LCJ0ZCIsMzEpKDgsImIiKSxMZSg5LCJDUkVBVEVEIiksaGUoKSgpLGRlKDEwLCJ0ZCIsMzIp''@;'; put 'put ''KDExLCJiIiksTGUoMTIsIlVQREFURUQiKSxoZSgpKCksY2koKSl9ZnVuY3Rpb24gRV90KGMsbCl7MSZjJiYobGkoMCksZGUoMSwidGQiLDMxKSgyLCJiIiksTGUoMywiSUQiKSxoZSgpKCksZGUoNCwidGQiLDMxKSg1LCJiIiksTGUoNiwiRElTUExBWSBOQU1FIiksaGUoKSgpLGRlKDcsInRk''@;'; put 'put ''IiwzMSkoOCwiYiIpLExlKDksIlVTRVIgTkFNRSIpLGhlKCkoKSxjaSgpKX1mdW5jdGlvbiBUX3QoYyxsKXtpZigxJmMmJihsaSgwKSxkZSgxLCJ0ZCIsMzIpLExlKDIpLGhlKCksZGUoMywidGQiLDMyKSxMZSg0KSxoZSgpLGRlKDUsInRkIiwzMiksTGUoNiksaGUoKSxkZSg3LCJ0ZCIsMzIp''@;'; put 'put ''LExlKDgpLGhlKCksY2koKSksMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0O2ZlKDIpLF9yKGEuTUVNQkVSTkFNRSksZmUoMiksX3IoYS5FTUFJTCksZmUoMiksX3IoYS5NRU1CRVJDUkVBVEVEKSxmZSgyKSxfcihhLk1FTUJFUlVQREFURUQpfX1mdW5jdGlvbiBBX3QoYyxsKXtpZigxJmMm''@;'; put 'put ''JihsaSgwKSxkZSgxLCJ0ZCIsMzIpLExlKDIpLGhlKCksZGUoMywidGQiLDMyKSxMZSg0KSxoZSgpLGRlKDUsInRkIiwzMiksTGUoNiksaGUoKSxjaSgpKSwyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQ7ZmUoMiksX3IoYS5JRCksZmUoMiksX3IoYS5ESVNQTEFZTkFNRSksZmUoMiksX3Io''@;'; put 'put ''YS5VU0VSTkFNRSl9fWZ1bmN0aW9uIGtfdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIiwzMyksZ3QoMSxUX3QsOSw0LCJuZy1jb250YWluZXIiLDYpKDIsQV90LDcsMywibmctY29udGFpbmVyIiw2KSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1PZSg0KTt4ZSgicm91dGVyTGlu''@;'; put 'put ''ayIsIi92aWV3L3VzZXJuYXYvdXNlcnMvIisoYS5VUklNRU18fGEuSUQpKSxmZSgpLHhlKCJuZ0lmIixkLnNlcnZlclR5cGU9PT1kLlNlcnZlclR5cGUuU2FzOSksZmUoKSx4ZSgibmdJZiIsZC5zZXJ2ZXJUeXBlPT09ZC5TZXJ2ZXJUeXBlLlNhc2pzKX19ZnVuY3Rpb24gRF90KGMsbCl7aWYo''@;'; put 'put ''MSZjJiYoZGUoMCwidGFibGUiLDI5KSgxLCJ0aGVhZCIpKDIsInRyIiksZ3QoMyx4X3QsMTMsMCwibmctY29udGFpbmVyIiw2KSg0LEVfdCwxMCwwLCJuZy1jb250YWluZXIiLDYpLGhlKCkoKSxkZSg1LCJ0Ym9keSIpLGd0KDYsa190LDMsMywidHIiLDMwKSxoZSgpKCkpLDImYyl7Y29uc3Qg''@;'; put 'put ''YT1PZSgzKTtmZSgzKSx4ZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpLGZlKCkseGUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXNqcyksZmUoMikseGUoIm5nRm9yT2YiLGEuZ3JvdXBNZW1iZXJzKX19ZnVuY3Rpb24gSV90KGMsbCl7aWYo''@;'; put 'put ''MSZjJiYoZGUoMCwiZGl2IikoMSwiaDMiKSxMZSgyKSxoZSgpLGd0KDMsTV90LDIsMCwiaDUiLDYpLGRlKDQsImRpdiIsMjcpLGd0KDUsRF90LDcsMywidGFibGUiLDI4KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgyKSxScigiTUVNQkVSUyAoIixhLmdyb3VwTWVtYmVyQ291bnQs''@;'; put 'put ''IikiKSxmZSgpLHhlKCJuZ0lmIiwwPT1hLmdyb3VwTWVtYmVyQ291bnQpLGZlKDIpLHhlKCJuZ0lmIiwwIT1hLmdyb3VwTWVtYmVyQ291bnQpfX1mdW5jdGlvbiBSX3QoYyxsKXsxJmMmJihkZSgwLCJoNSIpLExlKDEsIk5vIE1lbWJlcnMgUHJlc2VudCIpLGhlKCkpfWZ1bmN0aW9uIExfdChj''@;'; put 'put ''LGwpe2lmKDEmYyYmKGRlKDAsInRyIiwzMykoMSwidGQiLDMyKSxMZSgyKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDt4ZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvdXNlcnMvIithLk1FTUJFUklEKSxmZSgyKSxfcihhLk1FTUJFUk5BTUUpfX1mdW5jdGlvbiBPX3Qo''@;'; put 'put ''YyxsKXtpZigxJmMmJihkZSgwLCJ0YWJsZSIsMjkpKDEsInRoZWFkIikoMiwidHIiKSgzLCJ0ZCIpKDQsImIiKSxMZSg1KSxoZSgpKCkoKSgpLGRlKDYsInRib2R5IiksZ3QoNyxMX3QsMywyLCJ0ciIsMzApLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDMpO2ZlKDUpLFJyKCJNRU1CRVJTICgi''@;'; put 'put ''LGEuZ3JvdXBNZW1iZXJDb3VudCwiKSIpLGZlKDIpLHhlKCJuZ0Zvck9mIixhLmdyb3VwTWVtYmVycyl9fWZ1bmN0aW9uIFBfdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpKDEsImgzIiksTGUoMiksaGUoKSxndCgzLFJfdCwyLDAsImg1Iiw2KSxkZSg0LCJkaXYiLDI3KSxndCg1LE9fdCw4''@;'; put 'put ''LDIsInRhYmxlIiwyOCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoMiksX3IoYS5ncm91cE5hbWUpLGZlKCkseGUoIm5nSWYiLDA9PWEuZ3JvdXBNZW1iZXJDb3VudCksZmUoMikseGUoIm5nSWYiLDAhPWEuZ3JvdXBNZW1iZXJDb3VudCl9fWZ1bmN0aW9uIEZfdChjLGwpe2lmKDEm''@;'; put 'put ''YyYmKGRlKDAsImRpdiIpLGd0KDEsU190LDEzLDIsImRpdiIsMjApLGRlKDIsImRpdiIsMjEpKDMsImRpdiIsMjIpKDQsImRpdiIsMjMpLGd0KDUsSV90LDYsMywiZGl2Iiw2KSg2LFBfdCw2LDMsImRpdiIsNiksR3QoNywiYnIiKSxoZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgp''@;'; put 'put ''LHhlKCJuZ0lmIixhLnNlcnZlclR5cGUhPT1hLlNlcnZlclR5cGUuU2FzVml5YSksZmUoNCkseGUoIm5nSWYiLGEuc2VydmVyVHlwZSE9PWEuU2VydmVyVHlwZS5TYXNWaXlhKSxmZSgpLHhlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzVml5YSl9fWxldCBMNmU9KCgp''@;'; put 'put ''PT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuaGVscGVyU2VydmljZT1kLHRoaXMucm91dGVyPWgsdGhpcy5sb2NhdGlvbj1mLHRoaXMucm91dGU9dix0aGlzLmdyb3VwU2VhcmNoPSIiLHRoaXMucGFyYW1QcmVzZW50PSExLHRoaXMucGFy''@;'; put 'put ''YW1VUkk9IiIsdGhpcy5ncm91cFVyaT0iIix0aGlzLmdyb3VwTmFtZT0iIix0aGlzLmdyb3VwRGVzYz0iIix0aGlzLnNhc2pzQ29uZmlnPW5ldyBmaC5TQVNqc0NvbmZpZyx0aGlzLmlzVml5YT0hMSx0aGlzLmxvYWRpbmc9ITEsdGhpcy5TZXJ2ZXJUeXBlPU0wLlksdGhpcy5zYXNqc0NvbmZp''@;'; put 'put ''Zz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKSx0aGlzLnNlcnZlclR5cGU9dGhpcy5zYXNTZXJ2aWNlLmdldFNlcnZlclR5cGUoKSwiU0FTVklZQSI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUmJih0aGlzLmlzVml5YT0hMCl9bmdPbkluaXQoKXtLbi52aWV3ZXIuY3Vy''@;'; put 'put ''cmVudFNlbGVjdGlvbj0idmlldy91c2VybmF2L2dyb3VwcyIsdm9pZCAwIT09dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpJiYodGhpcy5wYXJhbVByZXNlbnQ9ITAsdGhpcy5wYXJhbVVSST10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy51cmkpLEtuLnVzZXJuYXYuZ3JvdXBMaXN0''@;'; put 'put ''JiYhdGhpcy5wYXJhbVByZXNlbnQ/KHRoaXMuZ3JvdXBzPUtuLnVzZXJuYXYuZ3JvdXBMaXN0LHRoaXMuZ3JvdXBTZWFyY2g9S24udXNlcm5hdi5ncm91cFNlYXJjaCk6KHZvaWQgMD09PUtuLnVzZXJuYXYuZ3JvdXBMaXN0Pyh0aGlzLmxvYWRpbmc9ITAsdGhpcy5pc1ZpeWE/ZmV0Y2godGhp''@;'; put 'put ''cy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL2dyb3Vwcz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGE9PmEudGV4dCgpKS50aGVuKGE9PntsZXQgaD1KU09OLnBhcnNlKGEpLml0ZW1zLm1hcChmPT4oe0dST1VQVVJJ''@;'; put 'put ''OmYuaWQsR1JPVVBOQU1FOmYubmFtZSxHUk9VUERFU0M6Zi5kZXNjcmlwdGlvbn0pKTt0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91cHM9aCxLbi51c2VybmF2Lmdyb3VwTGlzdD1ofSk6dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy9nZXRncm91cHMiLG51bGwpLnRoZW4oYT0+e3Ro''@;'; put 'put ''aXMubG9hZGluZz0hMSx0aGlzLmdyb3Vwcz1hLmFkYXB0ZXJSZXNwb25zZS5ncm91cHMsS24udXNlcm5hdi5ncm91cExpc3Q9YS5hZGFwdGVyUmVzcG9uc2UuZ3JvdXBzfSkpOih0aGlzLmdyb3Vwcz1Lbi51c2VybmF2Lmdyb3VwTGlzdCx0aGlzLmdyb3VwU2VhcmNoPUtuLnVzZXJuYXYuZ3Jv''@;'; put 'put ''dXBTZWFyY2gpLHRoaXMucGFyYW1QcmVzZW50JiYodGhpcy5sb2FkaW5nPSEwLHRoaXMuaXNWaXlhP2ZldGNoKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKyIvaWRlbnRpdGllcy9ncm91cHMvIit0aGlzLnBhcmFtVVJJKyIvbWVtYmVycz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0''@;'; put 'put ''OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGE9PmEudGV4dCgpKS50aGVuKGE9PntsZXQgZD1KU09OLnBhcnNlKGEpO3RoaXMubG9hZGluZz0hMTtsZXQgaD1kLml0ZW1zLm1hcChmPT4oe01FTUJFUk5BTUU6Zi5uYW1lLE1FTUJFUklEOmYuaWR9KSk7dGhpcy5ncm91cE1lbWJlcnM9aCx0''@;'; put 'put ''aGlzLmdyb3VwTWVtYmVyQ291bnQ9aC5sZW5ndGgsdGhpcy5ncm91cFVyaT10aGlzLnBhcmFtVVJJLHRoaXMuZ3JvdXBOYW1lPXRoaXMucGFyYW1VUkl9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VybWVtYmVyc2J5Z3JvdXAiLHtpd2FudDpbe2dyb3VwaWQ6dGhpcy5w''@;'; put 'put ''YXJhbVVSSX1dfSkudGhlbihkPT57dGhpcy5ncm91cE1lbWJlcnM9ZC5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycyx0aGlzLmdyb3VwTWVtYmVyQ291bnQ9ZC5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycy5sZW5ndGgsdm9pZCAwIT09ZC5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVyc1sw''@;'; put 'put ''XSYmKHRoaXMubG9hZGluZz0hMSx0aGlzLmdyb3VwVXJpPWQuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnNbMF0uVVJJTUVNfHx0aGlzLnBhcmFtVVJJLHRoaXMuZ3JvdXBOYW1lPWQuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnNbMF0uR1JPVVBOQU1FLHRoaXMuZ3JvdXBEZXNjPWQuYWRh''@;'; put 'put ''cHRlclJlc3BvbnNlLnNhc21lbWJlcnNbMF0uR1JPVVBERVNDLHRoaXMuZ3JvdXBOYW1lfHwodGhpcy5ncm91cE5hbWU9dGhpcy5wYXJhbVVSSSkpfSkpKX1ncm91cExpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5ncm91cHMsdGhpcy5ncm91''@;'; put 'put ''cFNlYXJjaCwiR1JPVVBOQU1FIiksS24udXNlcm5hdi5ncm91cFNlYXJjaD10aGlzLmdyb3VwU2VhcmNofWdyb3VwT25DbGljayhhKXt0aGlzLmxvYWRpbmc9ITA7bGV0IGQ9dGhpcy5yb3V0ZXIudXJsO3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMucGFyYW1QcmVzZW50P2Quc2xp''@;'; put 'put ''Y2UoMCxkLmxhc3RJbmRleE9mKCIvIikpKyIvIitlbmNvZGVVUkkoYS5HUk9VUFVSSSk6ZCsiLyIrZW5jb2RlVVJJKGEuR1JPVVBVUkkpKSx0aGlzLmlzVml5YT9mZXRjaCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvZ3JvdXBzLyIrYS5HUk9VUFVSSSsiL21lbWJl''@;'; put 'put ''cnM/bGltaXQ9MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihoPT5oLnRleHQoKSkudGhlbihoPT57bGV0IGY9SlNPTi5wYXJzZShoKTt0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91cFVyaT1hLkdST1VQVVJJLHRoaXMuZ3JvdXBOYW1lPWEuR1JPVVBO''@;'; put 'put ''QU1FLHRoaXMuZ3JvdXBEZXNjPWEuR1JPVVBERVNDO2xldCB2PWYuaXRlbXMubWFwKE09Pih7TUVNQkVSTkFNRTpNLm5hbWUsTUVNQkVSSUQ6TS5pZH0pKTt0aGlzLmdyb3VwTWVtYmVycz12LHRoaXMuZ3JvdXBNZW1iZXJDb3VudD12Lmxlbmd0aH0pOnRoaXMuc2FzU2VydmljZS5yZXF1ZXN0''@;'; put 'put ''KCJ1c2VybmF2L3VzZXJtZW1iZXJzYnlncm91cCIse2l3YW50Olt7Z3JvdXBpZDphLkdST1VQVVJJfV19KS50aGVuKGY9Pnt0aGlzLmxvYWRpbmc9ITEsdGhpcy5ncm91cFVyaT1hLkdST1VQVVJJLHRoaXMuZ3JvdXBOYW1lPWEuR1JPVVBOQU1FLHRoaXMuZ3JvdXBEZXNjPWEuR1JPVVBERVND''@;'; put 'put ''LHRoaXMuZ3JvdXBNZW1iZXJzPWYuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnMsdGhpcy5ncm91cE1lbWJlckNvdW50PWYuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnMubGVuZ3RofSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoSnMp''@;'; put 'put ''LEdlKEd1KSxHZShMcyksR2UodWgpLEdlKEN1KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtZ3JvdXAiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjcsdmFyczo0LGNvbnN0czpbWyJzZWFyY2hMaWJUcmVlSW5w''@;'; put 'put ''dXQiLCIiXSxbMSwic2lkZWJhci1oZWlnaHQiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2Rl''@;'; put 'put ''Il0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiRmlsdGVyIGJ5IEdyb3VwcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2Rl''@;'; put 'put ''bCJdLFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywiYWN0aXZlIiwiY2xpY2siLDQsIm5nSWYiXSxbMywiY2xpY2siXSxbMSwibS0w''@;'; put 'put ''IiwiY3Vyc29yLXBvaW50ZXIiLCJsaXN0LXBhZGRpbmciXSxbInNoYXBlIiwidXNlcnMiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFsiY2xhc3MiLCJjbHItcm93Iiw0LCJuZ0lmIl0sWzEsImNsci1yb3ciXSxbMSwiY2xyLWNvbC04Il0sWzEsImNhcmQiLCJncm91cC1k''@;'; put 'put ''YXRhIl0sWzEsInRhYmxlIiwiZ3JvdXAtaW5mbyJdLFsxLCJsZWZ0Il0sWzEsImdyb3VwLWluZm8tdGV4dCJdLFsxLCJ0YWJsZS1jb250YWluZXIiXSxbImNsYXNzIiwidGFibGUgbWVtYmVyLXRhYmxlIiw0LCJuZ0lmIl0sWzEsInRhYmxlIiwibWVtYmVyLXRhYmxlIl0sWzMsInJvdXRlckxp''@;'; put 'put ''bmsiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJ3aWR0aC0yNSJdLFsxLCIiXSxbMywicm91dGVyTGluayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImFwcC1zaWRlYmFyIiwxKSgxLCJjbHItdHJlZSIpLGd0KDIseV90LDYsMywiY2xyLXRyZWUtbm9kZSIsMikoMyx3''@;'; put 'put ''X3QsMiwxLCJuZy1jb250YWluZXIiLDMpLGhlKCkoKSxkZSg0LCJkaXYiLDQpLGd0KDUsQ190LDMsMCwiZGl2Iiw1KSg2LEZfdCw4LDMsImRpdiIsNiksaGUoKSksMiZkJiYoZmUoMikseGUoIm5nSWYiLGguZ3JvdXBzKSxmZSgpLHhlKCJuZ0Zvck9mIixoLmdyb3VwcyksZmUoMikseGUoIm5n''@;'; put 'put ''SWYiLGgubG9hZGluZyksZmUoKSx4ZSgibmdJZiIsaC5ncm91cE1lbWJlcnMmJiFoLmxvYWRpbmcpKX0sZGVwZW5kZW5jaWVzOltzcyx5byx1MSxRbCxRcyxZcyxTaCxPZCxPbCxJZCx0NCxlNF0sc3R5bGVzOlsiYm9keVtjZHMtdGhlbWU9ZGFya10gLmdyb3VwLWluZm97YmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjojMzE0MzUxO2JvcmRlci1jb2xvcjojMzE0MzUxfSAgYm9keVtjZHMtdGhlbWU9ZGFya10gLmdyb3VwLWRhdGF7YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxO2JvcmRlci1jb2xvcjojMzE0MzUxfSAgYm9keVtjZHMtdGhlbWU9ZGFya10gLm1lbWJlci10YWJsZSB0Ym9keSB0cjpob3Zl''@;'; put 'put ''cntiYWNrZ3JvdW5kLWNvbG9yOiMyOTQwNGJ9ICBib2R5W2Nkcy10aGVtZT1saWdodF0gLmdyb3VwLWluZm97YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5O2JvcmRlci1jb2xvcjojYTdhN2E3O2JveC1zaGFkb3c6MCAycHggNXB4ICNkYWQ3ZDd9ICBib2R5W2Nkcy10aGVtZT1saWdodF0gLmdy''@;'; put 'put ''b3VwLWRhdGF7YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5O2JvcmRlci1jb2xvcjojYTdhN2E3O2JveC1zaGFkb3c6MCAycHggNXB4ICNkYWQ3ZDd9ICBib2R5W2Nkcy10aGVtZT1saWdodF0gLm1lbWJlci10YWJsZSB0Ym9keSB0cjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlNmU2ZTZ9LnNp''@;'; put 'put ''ZGViYXItaGVpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6MTAwJX0uZ3JvdXAtaW5mby10ZXh0W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmlubGluZTtmb250LXNpemU6MjBweH0uZ3JvdXAtaW5mb1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZDtib3JkZXIt''@;'; put 'put ''cmFkaXVzOjNweH0uZ3JvdXAtaW5mb1tfbmdjb250ZW50LSVDT01QJV0gICB0ZFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpjZW50ZXJ9Lmdyb3VwLWRhdGFbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQ7Ym9yZGVyLXJhZGl1czozcHh9Lmdyb3VwLWRhdGFbX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6YXV0b30uZ3JvdXAtZGF0YVtfbmdjb250ZW50LSVDT01QJV0gICBoM1tfbmdjb250ZW50LSVDT01QJV0sIC5ncm91cC1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmNlbnRlcn0uZ3Jv''@;'; put 'put ''dXAtZGF0YVtfbmdjb250ZW50LSVDT01QJV0gICAubWVtYmVyLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5ncm91cC1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5tZW1iZXItdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGJvZHlbX25nY29udGVudC0lQ09NUCVd''@;'; put 'put ''ICAgdHJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2N1cnNvcjpwb2ludGVyfS50YWJsZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93OmF1dG99QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpey5ncm91cC1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXtt''@;'; put 'put ''aW4taGVpZ2h0OnVuc2V0IWltcG9ydGFudH19Il19KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIEhfdCgpe31mdW5jdGlvbiAkZWUoYyl7cmV0dXJuIG51bGw9PWM/SF90OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvcihjKX19ZnVuY3Rpb24gTzZlKGMpe3JldHVybiBudWxs''@;'; put 'put ''PT1jP1tdOkFycmF5LmlzQXJyYXkoYyk/YzpBcnJheS5mcm9tKGMpfWZ1bmN0aW9uIFZfdCgpe3JldHVybltdfWZ1bmN0aW9uIFA2ZShjKXtyZXR1cm4gbnVsbD09Yz9WX3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKGMpfX1mdW5jdGlvbiBGNmUoYyl7cmV0dXJu''@;'; put 'put ''IGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWF0Y2hlcyhjKX19ZnVuY3Rpb24gSDZlKGMpe3JldHVybiBmdW5jdGlvbihsKXtyZXR1cm4gbC5tYXRjaGVzKGMpfX12YXIgel90PUFycmF5LnByb3RvdHlwZS5maW5kO2Z1bmN0aW9uIFpfdCgpe3JldHVybiB0aGlzLmZpcnN0RWxlbWVudENoaWxk''@;'; put 'put ''fXZhciBZX3Q9QXJyYXkucHJvdG90eXBlLmZpbHRlcjtmdW5jdGlvbiBHX3QoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKX1mdW5jdGlvbiBONmUoYyl7cmV0dXJuIG5ldyBBcnJheShjLmxlbmd0aCl9ZnVuY3Rpb24gdE4oYyxsKXt0aGlzLm93bmVyRG9jdW1lbnQ9Yy5vd25l''@;'; put 'put ''ckRvY3VtZW50LHRoaXMubmFtZXNwYWNlVVJJPWMubmFtZXNwYWNlVVJJLHRoaXMuX25leHQ9bnVsbCx0aGlzLl9wYXJlbnQ9Yyx0aGlzLl9fZGF0YV9fPWx9ZnVuY3Rpb24gUV90KGMsbCxhLGQsaCxmKXtmb3IodmFyIE0sdj0wLEQ9bC5sZW5ndGgsWj1mLmxlbmd0aDt2PFo7Kyt2KShNPWxb''@;'; put 'put ''dl0pPyhNLl9fZGF0YV9fPWZbdl0sZFt2XT1NKTphW3ZdPW5ldyB0TihjLGZbdl0pO2Zvcig7djxEOysrdikoTT1sW3ZdKSYmKGhbdl09TSl9ZnVuY3Rpb24gZXd0KGMsbCxhLGQsaCxmLHYpe3ZhciBNLEQsRWUsWj1uZXcgTWFwLG5lPWwubGVuZ3RoLGNlPWYubGVuZ3RoLGJlPW5ldyBBcnJh''@;'; put 'put ''eShuZSk7Zm9yKE09MDtNPG5lOysrTSkoRD1sW01dKSYmKGJlW01dPUVlPXYuY2FsbChELEQuX19kYXRhX18sTSxsKSsiIixaLmhhcyhFZSk/aFtNXT1EOlouc2V0KEVlLEQpKTtmb3IoTT0wO008Y2U7KytNKUVlPXYuY2FsbChjLGZbTV0sTSxmKSsiIiwoRD1aLmdldChFZSkpPyhkW01dPUQs''@;'; put 'put ''RC5fX2RhdGFfXz1mW01dLFouZGVsZXRlKEVlKSk6YVtNXT1uZXcgdE4oYyxmW01dKTtmb3IoTT0wO008bmU7KytNKShEPWxbTV0pJiZaLmdldChiZVtNXSk9PT1EJiYoaFtNXT1EKX1mdW5jdGlvbiB0d3QoYyl7cmV0dXJuIGMuX19kYXRhX199ZnVuY3Rpb24gcnd0KGMpe3JldHVybiJvYmpl''@;'; put 'put ''Y3QiPT10eXBlb2YgYyYmImxlbmd0aCJpbiBjP2M6QXJyYXkuZnJvbShjKX1mdW5jdGlvbiBjd3QoYyxsKXtyZXR1cm4gYzxsPy0xOmM+bD8xOmM+PWw/MDpOYU59dE4ucHJvdG90eXBlPXtjb25zdHJ1Y3Rvcjp0TixhcHBlbmRDaGlsZDpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5fcGFyZW50''@;'; put 'put ''Lmluc2VydEJlZm9yZShjLHRoaXMuX25leHQpfSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24oYyxsKXtyZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShjLGwpfSxxdWVyeVNlbGVjdG9yOmZ1bmN0aW9uKGMpe3JldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihjKX0scXVlcnlT''@;'; put 'put ''ZWxlY3RvckFsbDpmdW5jdGlvbihjKXtyZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYyl9fTt2YXIgS2VlPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjtjb25zdCBWNmU9e3N2ZzoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhodG1sOktlZSx4bGluazoi''@;'; put 'put ''aHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIseG1sOiJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLHhtbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zLyJ9O2Z1bmN0aW9uIG5OKGMpe3ZhciBsPWMrPSIiLGE9bC5pbmRleE9mKCI6Iik7cmV0dXJuIGE+''@;'; put 'put ''PTAmJiJ4bWxucyIhPT0obD1jLnNsaWNlKDAsYSkpJiYoYz1jLnNsaWNlKGErMSkpLFY2ZS5oYXNPd25Qcm9wZXJ0eShsKT97c3BhY2U6VjZlW2xdLGxvY2FsOmN9OmN9ZnVuY3Rpb24gbXd0KGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGMpfX1mdW5jdGlvbiB2''@;'; put 'put ''d3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwpfX1mdW5jdGlvbiBid3QoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnNldEF0dHJpYnV0ZShjLGwpfX1mdW5jdGlvbiB5d3QoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlz''@;'; put 'put ''LnNldEF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCxsKX19ZnVuY3Rpb24gX3d0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGE9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09YT90aGlzLnJlbW92ZUF0dHJpYnV0ZShjKTp0aGlzLnNldEF0dHJpYnV0ZShjLGEpfX1mdW5jdGlv''@;'; put 'put ''biB3d3QoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1hP3RoaXMucmVtb3ZlQXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsKTp0aGlzLnNldEF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCxhKX19ZnVuY3Rpb24gQjZlKGMpe3Jl''@;'; put 'put ''dHVybiBjLm93bmVyRG9jdW1lbnQmJmMub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8Yy5kb2N1bWVudCYmY3x8Yy5kZWZhdWx0Vmlld31mdW5jdGlvbiBTd3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShjKX19ZnVuY3Rpb24gTXd0KGMsbCxhKXty''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KGMsbCxhKX19ZnVuY3Rpb24geHd0KGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZD1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1kP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkoYyk6dGhpcy5zdHlsZS5z''@;'; put 'put ''ZXRQcm9wZXJ0eShjLGQsYSl9fWZ1bmN0aW9uIE13KGMsbCl7cmV0dXJuIGMuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShsKXx8QjZlKGMpLmdldENvbXB1dGVkU3R5bGUoYyxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKGwpfWZ1bmN0aW9uIFR3dChjKXtyZXR1cm4gZnVuY3Rpb24oKXtkZWxldGUg''@;'; put 'put ''dGhpc1tjXX19ZnVuY3Rpb24gQXd0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpc1tjXT1sfX1mdW5jdGlvbiBrd3QoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1hP2RlbGV0ZSB0aGlzW2NdOnRoaXNbY109YX19ZnVuY3Rpb24g''@;'; put 'put ''ajZlKGMpe3JldHVybiBjLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBxZWUoYyl7cmV0dXJuIGMuY2xhc3NMaXN0fHxuZXcgejZlKGMpfWZ1bmN0aW9uIHo2ZShjKXt0aGlzLl9ub2RlPWMsdGhpcy5fbmFtZXM9ajZlKGMuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIil9ZnVuY3Rp''@;'; put 'put ''b24gVTZlKGMsbCl7Zm9yKHZhciBhPXFlZShjKSxkPS0xLGg9bC5sZW5ndGg7KytkPGg7KWEuYWRkKGxbZF0pfWZ1bmN0aW9uIFo2ZShjLGwpe2Zvcih2YXIgYT1xZWUoYyksZD0tMSxoPWwubGVuZ3RoOysrZDxoOylhLnJlbW92ZShsW2RdKX1mdW5jdGlvbiBJd3QoYyl7cmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uKCl7VTZlKHRoaXMsYyl9fWZ1bmN0aW9uIFJ3dChjKXtyZXR1cm4gZnVuY3Rpb24oKXtaNmUodGhpcyxjKX19ZnVuY3Rpb24gTHd0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7KGwuYXBwbHkodGhpcyxhcmd1bWVudHMpP1U2ZTpaNmUpKHRoaXMsYyl9fWZ1bmN0aW9uIFB3dCgpe3RoaXMu''@;'; put 'put ''dGV4dENvbnRlbnQ9IiJ9ZnVuY3Rpb24gRnd0KGMpe3JldHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9Y319ZnVuY3Rpb24gSHd0KGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPWMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bD8/IiJ9fWZ1bmN0aW9u''@;'; put 'put ''IFZ3dCgpe3RoaXMuaW5uZXJIVE1MPSIifWZ1bmN0aW9uIEJ3dChjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD1jfX1mdW5jdGlvbiBqd3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGw9Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5pbm5lckhUTUw9bD8/IiJ9fWZ1''@;'; put 'put ''bmN0aW9uIFV3dCgpe3RoaXMubmV4dFNpYmxpbmcmJnRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKX1mdW5jdGlvbiBXd3QoKXt0aGlzLnByZXZpb3VzU2libGluZyYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLHRoaXMucGFyZW50Tm9kZS5maXJzdENoaWxkKX1m''@;'; put 'put ''dW5jdGlvbiBHd3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGw9dGhpcy5vd25lckRvY3VtZW50LGE9dGhpcy5uYW1lc3BhY2VVUkk7cmV0dXJuIGE9PT1LZWUmJmwuZG9jdW1lbnRFbGVtZW50Lm5hbWVzcGFjZVVSST09PUtlZT9sLmNyZWF0ZUVsZW1lbnQoYyk6bC5jcmVhdGVFbGVtZW50''@;'; put 'put ''TlMoYSxjKX19ZnVuY3Rpb24gJHd0KGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGMuc3BhY2UsYy5sb2NhbCl9fWZ1bmN0aW9uIFc2ZShjKXt2YXIgbD1uTihjKTtyZXR1cm4obC5sb2NhbD8kd3Q6R3d0KShsKX1mdW5jdGlv''@;'; put 'put ''biBxd3QoKXtyZXR1cm4gbnVsbH1mdW5jdGlvbiBKd3QoKXt2YXIgYz10aGlzLnBhcmVudE5vZGU7YyYmYy5yZW1vdmVDaGlsZCh0aGlzKX1mdW5jdGlvbiBlQ3QoKXt2YXIgYz10aGlzLmNsb25lTm9kZSghMSksbD10aGlzLnBhcmVudE5vZGU7cmV0dXJuIGw/bC5pbnNlcnRCZWZvcmUoYyx0''@;'; put 'put ''aGlzLm5leHRTaWJsaW5nKTpjfWZ1bmN0aW9uIHRDdCgpe3ZhciBjPXRoaXMuY2xvbmVOb2RlKCEwKSxsPXRoaXMucGFyZW50Tm9kZTtyZXR1cm4gbD9sLmluc2VydEJlZm9yZShjLHRoaXMubmV4dFNpYmxpbmcpOmN9ZnVuY3Rpb24gYUN0KGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPXRo''@;'; put 'put ''aXMuX19vbjtpZihsKXtmb3IodmFyIGYsYT0wLGQ9LTEsaD1sLmxlbmd0aDthPGg7KythKWY9bFthXSxjLnR5cGUmJmYudHlwZSE9PWMudHlwZXx8Zi5uYW1lIT09Yy5uYW1lP2xbKytkXT1mOnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihmLnR5cGUsZi5saXN0ZW5lcixmLm9wdGlvbnMpOysr''@;'; put 'put ''ZD9sLmxlbmd0aD1kOmRlbGV0ZSB0aGlzLl9fb259fX1mdW5jdGlvbiBzQ3QoYyxsLGEpe3JldHVybiBmdW5jdGlvbigpe3ZhciBoLGQ9dGhpcy5fX29uLGY9ZnVuY3Rpb24gaUN0KGMpe3JldHVybiBmdW5jdGlvbihsKXtjLmNhbGwodGhpcyxsLHRoaXMuX19kYXRhX18pfX0obCk7aWYoZClm''@;'; put 'put ''b3IodmFyIHY9MCxNPWQubGVuZ3RoO3Y8TTsrK3YpaWYoKGg9ZFt2XSkudHlwZT09PWMudHlwZSYmaC5uYW1lPT09Yy5uYW1lKXJldHVybiB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoaC50eXBlLGgubGlzdGVuZXIsaC5vcHRpb25zKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIoaC50eXBlLGgu''@;'; put 'put ''bGlzdGVuZXI9ZixoLm9wdGlvbnM9YSksdm9pZChoLnZhbHVlPWwpO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcihjLnR5cGUsZixhKSxoPXt0eXBlOmMudHlwZSxuYW1lOmMubmFtZSx2YWx1ZTpsLGxpc3RlbmVyOmYsb3B0aW9uczphfSxkP2QucHVzaChoKTp0aGlzLl9fb249W2hdfX1mdW5jdGlv''@;'; put 'put ''biBZNmUoYyxsLGEpe3ZhciBkPUI2ZShjKSxoPWQuQ3VzdG9tRXZlbnQ7ImZ1bmN0aW9uIj09dHlwZW9mIGg/aD1uZXcgaChsLGEpOihoPWQuZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50IiksYT8oaC5pbml0RXZlbnQobCxhLmJ1YmJsZXMsYS5jYW5jZWxhYmxlKSxoLmRldGFpbD1hLmRl''@;'; put 'put ''dGFpbCk6aC5pbml0RXZlbnQobCwhMSwhMSkpLGMuZGlzcGF0Y2hFdmVudChoKX1mdW5jdGlvbiBjQ3QoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gWTZlKHRoaXMsYyxsKX19ZnVuY3Rpb24gdUN0KGMsbCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIFk2ZSh0aGlzLGMsbC5hcHBs''@;'; put 'put ''eSh0aGlzLGFyZ3VtZW50cykpfX16NmUucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oYyl7dGhpcy5fbmFtZXMuaW5kZXhPZihjKTwwJiYodGhpcy5fbmFtZXMucHVzaChjKSx0aGlzLl9ub2RlLnNldEF0dHJpYnV0ZSgiY2xhc3MiLHRoaXMuX25hbWVzLmpvaW4oIiAiKSkpfSxyZW1vdmU6ZnVu''@;'; put 'put ''Y3Rpb24oYyl7dmFyIGw9dGhpcy5fbmFtZXMuaW5kZXhPZihjKTtsPj0wJiYodGhpcy5fbmFtZXMuc3BsaWNlKGwsMSksdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix0aGlzLl9uYW1lcy5qb2luKCIgIikpKX0sY29udGFpbnM6ZnVuY3Rpb24oYyl7cmV0dXJuIHRoaXMuX25hbWVz''@;'; put 'put ''LmluZGV4T2YoYyk+PTB9fTt2YXIgWGVlPVtudWxsXTtmdW5jdGlvbiBvZChjLGwpe3RoaXMuX2dyb3Vwcz1jLHRoaXMuX3BhcmVudHM9bH1mdW5jdGlvbiBHNmUoKXtyZXR1cm4gbmV3IG9kKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sWGVlKX1vZC5wcm90b3R5cGU9RzZlLnByb3Rv''@;'; put 'put ''dHlwZT17Y29uc3RydWN0b3I6b2Qsc2VsZWN0OmZ1bmN0aW9uIE5fdChjKXsiZnVuY3Rpb24iIT10eXBlb2YgYyYmKGM9JGVlKGMpKTtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9bC5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTsrK2gpZm9yKHZhciBELFosZj1sW2hdLHY9Zi5sZW5n''@;'; put 'put ''dGgsTT1kW2hdPW5ldyBBcnJheSh2KSxuZT0wO25lPHY7KytuZSkoRD1mW25lXSkmJihaPWMuY2FsbChELEQuX19kYXRhX18sbmUsZikpJiYoIl9fZGF0YV9fImluIEQmJihaLl9fZGF0YV9fPUQuX19kYXRhX18pLE1bbmVdPVopO3JldHVybiBuZXcgb2QoZCx0aGlzLl9wYXJlbnRzKX0sc2Vs''@;'; put 'put ''ZWN0QWxsOmZ1bmN0aW9uIGpfdChjKXtjPSJmdW5jdGlvbiI9PXR5cGVvZiBjP2Z1bmN0aW9uIEJfdChjKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gTzZlKGMuYXBwbHkodGhpcyxhcmd1bWVudHMpKX19KGMpOlA2ZShjKTtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9bC5sZW5ndGgsZD1b''@;'; put 'put ''XSxoPVtdLGY9MDtmPGE7KytmKWZvcih2YXIgRCx2PWxbZl0sTT12Lmxlbmd0aCxaPTA7WjxNOysrWikoRD12W1pdKSYmKGQucHVzaChjLmNhbGwoRCxELl9fZGF0YV9fLFosdikpLGgucHVzaChEKSk7cmV0dXJuIG5ldyBvZChkLGgpfSxzZWxlY3RDaGlsZDpmdW5jdGlvbiBXX3QoYyl7cmV0''@;'; put 'put ''dXJuIHRoaXMuc2VsZWN0KG51bGw9PWM/Wl90OmZ1bmN0aW9uIFVfdChjKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gel90LmNhbGwodGhpcy5jaGlsZHJlbixjKX19KCJmdW5jdGlvbiI9PXR5cGVvZiBjP2M6SDZlKGMpKSl9LHNlbGVjdENoaWxkcmVuOmZ1bmN0aW9uIEtfdChjKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5zZWxlY3RBbGwobnVsbD09Yz9HX3Q6ZnVuY3Rpb24gJF90KGMpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBZX3QuY2FsbCh0aGlzLmNoaWxkcmVuLGMpfX0oImZ1bmN0aW9uIj09dHlwZW9mIGM/YzpINmUoYykpKX0sZmlsdGVyOmZ1bmN0aW9uIHFfdChjKXsiZnVuY3Rpb24i''@;'; put 'put ''IT10eXBlb2YgYyYmKGM9RjZlKGMpKTtmb3IodmFyIGw9dGhpcy5fZ3JvdXBzLGE9bC5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD0wO2g8YTsrK2gpZm9yKHZhciBELGY9bFtoXSx2PWYubGVuZ3RoLE09ZFtoXT1bXSxaPTA7Wjx2OysrWikoRD1mW1pdKSYmYy5jYWxsKEQsRC5fX2RhdGFfXyxa''@;'; put 'put ''LGYpJiZNLnB1c2goRCk7cmV0dXJuIG5ldyBvZChkLHRoaXMuX3BhcmVudHMpfSxkYXRhOmZ1bmN0aW9uIG53dChjLGwpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBBcnJheS5mcm9tKHRoaXMsdHd0KTt2YXIgYT1sP2V3dDpRX3QsZD10aGlzLl9wYXJlbnRzLGg9dGhpcy5fZ3JvdXBz''@;'; put 'put ''OyJmdW5jdGlvbiIhPXR5cGVvZiBjJiYoYz1mdW5jdGlvbiBKX3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGN9fShjKSk7Zm9yKHZhciBmPWgubGVuZ3RoLHY9bmV3IEFycmF5KGYpLE09bmV3IEFycmF5KGYpLEQ9bmV3IEFycmF5KGYpLFo9MDtaPGY7KytaKXt2YXIgbmU9ZFtaXSxj''@;'; put 'put ''ZT1oW1pdLGJlPWNlLmxlbmd0aCxFZT1yd3QoYy5jYWxsKG5lLG5lJiZuZS5fX2RhdGFfXyxaLGQpKSxCZT1FZS5sZW5ndGgscWU9TVtaXT1uZXcgQXJyYXkoQmUpLG50PXZbWl09bmV3IEFycmF5KEJlKTthKG5lLGNlLHFlLG50LERbWl09bmV3IEFycmF5KGJlKSxFZSxsKTtmb3IodmFyIHlu''@;'; put 'put ''LENuLG10PTAsSnQ9MDttdDxCZTsrK210KWlmKHluPXFlW210XSl7Zm9yKG10Pj1KdCYmKEp0PW10KzEpOyEoQ249bnRbSnRdKSYmKytKdDxCZTspO3luLl9uZXh0PUNufHxudWxsfX1yZXR1cm4odj1uZXcgb2QodixkKSkuX2VudGVyPU0sdi5fZXhpdD1ELHZ9LGVudGVyOmZ1bmN0aW9uIFhf''@;'; put 'put ''dCgpe3JldHVybiBuZXcgb2QodGhpcy5fZW50ZXJ8fHRoaXMuX2dyb3Vwcy5tYXAoTjZlKSx0aGlzLl9wYXJlbnRzKX0sZXhpdDpmdW5jdGlvbiBpd3QoKXtyZXR1cm4gbmV3IG9kKHRoaXMuX2V4aXR8fHRoaXMuX2dyb3Vwcy5tYXAoTjZlKSx0aGlzLl9wYXJlbnRzKX0sam9pbjpmdW5jdGlv''@;'; put 'put ''biBvd3QoYyxsLGEpe3ZhciBkPXRoaXMuZW50ZXIoKSxoPXRoaXMsZj10aGlzLmV4aXQoKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYz8oZD1jKGQpKSYmKGQ9ZC5zZWxlY3Rpb24oKSk6ZD1kLmFwcGVuZChjKyIiKSxudWxsIT1sJiYoaD1sKGgpKSYmKGg9aC5zZWxlY3Rpb24oKSksbnVs''@;'; put 'put ''bD09YT9mLnJlbW92ZSgpOmEoZiksZCYmaD9kLm1lcmdlKGgpLm9yZGVyKCk6aH0sbWVyZ2U6ZnVuY3Rpb24gYXd0KGMpe2Zvcih2YXIgbD1jLnNlbGVjdGlvbj9jLnNlbGVjdGlvbigpOmMsYT10aGlzLl9ncm91cHMsZD1sLl9ncm91cHMsaD1hLmxlbmd0aCx2PU1hdGgubWluKGgsZC5sZW5n''@;'; put 'put ''dGgpLE09bmV3IEFycmF5KGgpLEQ9MDtEPHY7KytEKWZvcih2YXIgRWUsWj1hW0RdLG5lPWRbRF0sY2U9Wi5sZW5ndGgsYmU9TVtEXT1uZXcgQXJyYXkoY2UpLEJlPTA7QmU8Y2U7KytCZSkoRWU9WltCZV18fG5lW0JlXSkmJihiZVtCZV09RWUpO2Zvcig7RDxoOysrRClNW0RdPWFbRF07cmV0''@;'; put 'put ''dXJuIG5ldyBvZChNLHRoaXMuX3BhcmVudHMpfSxzZWxlY3Rpb246ZnVuY3Rpb24gZkN0KCl7cmV0dXJuIHRoaXN9LG9yZGVyOmZ1bmN0aW9uIHN3dCgpe2Zvcih2YXIgYz10aGlzLl9ncm91cHMsbD0tMSxhPWMubGVuZ3RoOysrbDxhOylmb3IodmFyIHYsZD1jW2xdLGg9ZC5sZW5ndGgtMSxm''@;'; put 'put ''PWRbaF07LS1oPj0wOykodj1kW2hdKSYmKGYmJjRedi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihmKSYmZi5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh2LGYpLGY9dik7cmV0dXJuIHRoaXN9LHNvcnQ6ZnVuY3Rpb24gbHd0KGMpe2Z1bmN0aW9uIGwoY2UsYmUpe3JldHVybiBjZSYmYmU/Yyhj''@;'; put 'put ''ZS5fX2RhdGFfXyxiZS5fX2RhdGFfXyk6IWNlLSFiZX1jfHwoYz1jd3QpO2Zvcih2YXIgYT10aGlzLl9ncm91cHMsZD1hLmxlbmd0aCxoPW5ldyBBcnJheShkKSxmPTA7ZjxkOysrZil7Zm9yKHZhciBaLHY9YVtmXSxNPXYubGVuZ3RoLEQ9aFtmXT1uZXcgQXJyYXkoTSksbmU9MDtuZTxNOysr''@;'; put 'put ''bmUpKFo9dltuZV0pJiYoRFtuZV09Wik7RC5zb3J0KGwpfXJldHVybiBuZXcgb2QoaCx0aGlzLl9wYXJlbnRzKS5vcmRlcigpfSxjYWxsOmZ1bmN0aW9uIHV3dCgpe3ZhciBjPWFyZ3VtZW50c1swXTtyZXR1cm4gYXJndW1lbnRzWzBdPXRoaXMsYy5hcHBseShudWxsLGFyZ3VtZW50cyksdGhp''@;'; put 'put ''c30sbm9kZXM6ZnVuY3Rpb24gZHd0KCl7cmV0dXJuIEFycmF5LmZyb20odGhpcyl9LG5vZGU6ZnVuY3Rpb24gaHd0KCl7Zm9yKHZhciBjPXRoaXMuX2dyb3VwcyxsPTAsYT1jLmxlbmd0aDtsPGE7KytsKWZvcih2YXIgZD1jW2xdLGg9MCxmPWQubGVuZ3RoO2g8ZjsrK2gpe3ZhciB2PWRbaF07''@;'; put 'put ''aWYodilyZXR1cm4gdn1yZXR1cm4gbnVsbH0sc2l6ZTpmdW5jdGlvbiBmd3QoKXtsZXQgYz0wO2Zvcihjb25zdCBsIG9mIHRoaXMpKytjO3JldHVybiBjfSxlbXB0eTpmdW5jdGlvbiBwd3QoKXtyZXR1cm4hdGhpcy5ub2RlKCl9LGVhY2g6ZnVuY3Rpb24gZ3d0KGMpe2Zvcih2YXIgbD10aGlz''@;'; put 'put ''Ll9ncm91cHMsYT0wLGQ9bC5sZW5ndGg7YTxkOysrYSlmb3IodmFyIE0saD1sW2FdLGY9MCx2PWgubGVuZ3RoO2Y8djsrK2YpKE09aFtmXSkmJmMuY2FsbChNLE0uX19kYXRhX18sZixoKTtyZXR1cm4gdGhpc30sYXR0cjpmdW5jdGlvbiBDd3QoYyxsKXt2YXIgYT1uTihjKTtpZihhcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoPDIpe3ZhciBkPXRoaXMubm9kZSgpO3JldHVybiBhLmxvY2FsP2QuZ2V0QXR0cmlidXRlTlMoYS5zcGFjZSxhLmxvY2FsKTpkLmdldEF0dHJpYnV0ZShhKX1yZXR1cm4gdGhpcy5lYWNoKChudWxsPT1sP2EubG9jYWw/dnd0Om13dDoiZnVuY3Rpb24iPT10eXBlb2YgbD9hLmxv''@;'; put 'put ''Y2FsP3d3dDpfd3Q6YS5sb2NhbD95d3Q6Ynd0KShhLGwpKX0sc3R5bGU6ZnVuY3Rpb24gRXd0KGMsbCxhKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaCgobnVsbD09bD9Td3Q6ImZ1bmN0aW9uIj09dHlwZW9mIGw/eHd0Ok13dCkoYyxsLGE/PyIiKSk6TXcodGhpcy5ub2Rl''@;'; put 'put ''KCksYyl9LHByb3BlcnR5OmZ1bmN0aW9uIER3dChjLGwpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjE/dGhpcy5lYWNoKChudWxsPT1sP1R3dDoiZnVuY3Rpb24iPT10eXBlb2YgbD9rd3Q6QXd0KShjLGwpKTp0aGlzLm5vZGUoKVtjXX0sY2xhc3NlZDpmdW5jdGlvbiBPd3QoYyxsKXt2YXIg''@;'; put 'put ''YT1qNmUoYysiIik7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtmb3IodmFyIGQ9cWVlKHRoaXMubm9kZSgpKSxoPS0xLGY9YS5sZW5ndGg7KytoPGY7KWlmKCFkLmNvbnRhaW5zKGFbaF0pKXJldHVybiExO3JldHVybiEwfXJldHVybiB0aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBsP0x3''@;'; put 'put ''dDpsP0l3dDpSd3QpKGEsbCkpfSx0ZXh0OmZ1bmN0aW9uIE53dChjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2gobnVsbD09Yz9Qd3Q6KCJmdW5jdGlvbiI9PXR5cGVvZiBjP0h3dDpGd3QpKGMpKTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0saHRtbDpmdW5jdGlvbiB6d3Qo''@;'; put 'put ''Yyl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKG51bGw9PWM/Vnd0OigiZnVuY3Rpb24iPT10eXBlb2YgYz9qd3Q6Qnd0KShjKSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxyYWlzZTpmdW5jdGlvbiBad3QoKXtyZXR1cm4gdGhpcy5lYWNoKFV3dCl9LGxvd2VyOmZ1bmN0aW9u''@;'; put 'put ''IFl3dCgpe3JldHVybiB0aGlzLmVhY2goV3d0KX0sYXBwZW5kOmZ1bmN0aW9uIEt3dChjKXt2YXIgbD0iZnVuY3Rpb24iPT10eXBlb2YgYz9jOlc2ZShjKTtyZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hcHBlbmRDaGlsZChsLmFwcGx5KHRoaXMsYXJndW1lbnRz''@;'; put 'put ''KSl9KX0saW5zZXJ0OmZ1bmN0aW9uIFh3dChjLGwpe3ZhciBhPSJmdW5jdGlvbiI9PXR5cGVvZiBjP2M6VzZlKGMpLGQ9bnVsbD09bD9xd3Q6ImZ1bmN0aW9uIj09dHlwZW9mIGw/bDokZWUobCk7cmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3Jl''@;'; put 'put ''KGEuYXBwbHkodGhpcyxhcmd1bWVudHMpLGQuYXBwbHkodGhpcyxhcmd1bWVudHMpfHxudWxsKX0pfSxyZW1vdmU6ZnVuY3Rpb24gUXd0KCl7cmV0dXJuIHRoaXMuZWFjaChKd3QpfSxjbG9uZTpmdW5jdGlvbiBuQ3QoYyl7cmV0dXJuIHRoaXMuc2VsZWN0KGM/dEN0OmVDdCl9LGRhdHVtOmZ1''@;'; put 'put ''bmN0aW9uIHJDdChjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIsYyk6dGhpcy5ub2RlKCkuX19kYXRhX199LG9uOmZ1bmN0aW9uIGxDdChjLGwsYSl7dmFyIGgsdixkPWZ1bmN0aW9uIG9DdChjKXtyZXR1cm4gYy50cmltKCkuc3BsaXQoL158XHMr''@;'; put 'put ''LykubWFwKGZ1bmN0aW9uKGwpe3ZhciBhPSIiLGQ9bC5pbmRleE9mKCIuIik7cmV0dXJuIGQ+PTAmJihhPWwuc2xpY2UoZCsxKSxsPWwuc2xpY2UoMCxkKSkse3R5cGU6bCxuYW1lOmF9fSl9KGMrIiIpLGY9ZC5sZW5ndGg7aWYoIShhcmd1bWVudHMubGVuZ3RoPDIpKXtmb3IoTT1sP3NDdDph''@;'; put 'put ''Q3QsaD0wO2g8ZjsrK2gpdGhpcy5lYWNoKE0oZFtoXSxsLGEpKTtyZXR1cm4gdGhpc312YXIgTT10aGlzLm5vZGUoKS5fX29uO2lmKE0pZm9yKHZhciBuZSxEPTAsWj1NLmxlbmd0aDtEPFo7KytEKWZvcihoPTAsbmU9TVtEXTtoPGY7KytoKWlmKCh2PWRbaF0pLnR5cGU9PT1uZS50eXBlJiZ2''@;'; put 'put ''Lm5hbWU9PT1uZS5uYW1lKXJldHVybiBuZS52YWx1ZX0sZGlzcGF0Y2g6ZnVuY3Rpb24gZEN0KGMsbCl7cmV0dXJuIHRoaXMuZWFjaCgoImZ1bmN0aW9uIj09dHlwZW9mIGw/dUN0OmNDdCkoYyxsKSl9LFtTeW1ib2wuaXRlcmF0b3JdOmZ1bmN0aW9uKmhDdCgpe2Zvcih2YXIgYz10aGlzLl9n''@;'; put 'put ''cm91cHMsbD0wLGE9Yy5sZW5ndGg7bDxhOysrbClmb3IodmFyIHYsZD1jW2xdLGg9MCxmPWQubGVuZ3RoO2g8ZjsrK2gpKHY9ZFtoXSkmJih5aWVsZCB2KX19O2NvbnN0IFo5PUc2ZTtmdW5jdGlvbiBKZWUoYyl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBjP25ldyBvZChbZG9jdW1lbnQucXVl''@;'; put 'put ''cnlTZWxlY3RvckFsbChjKV0sW2RvY3VtZW50LmRvY3VtZW50RWxlbWVudF0pOm5ldyBvZChbTzZlKGMpXSxYZWUpfWZ1bmN0aW9uIHdzKGMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYz9uZXcgb2QoW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGMpXV0sW2RvY3VtZW50LmRvY3VtZW50RWxl''@;'; put 'put ''bWVudF0pOm5ldyBvZChbW2NdXSxYZWUpfXZhciBwQ3Q9e3ZhbHVlOigpPT57fX07ZnVuY3Rpb24gJDZlKCl7Zm9yKHZhciBkLGM9MCxsPWFyZ3VtZW50cy5sZW5ndGgsYT17fTtjPGw7KytjKXtpZighKGQ9YXJndW1lbnRzW2NdKyIiKXx8ZCBpbiBhfHwvW1xzLl0vLnRlc3QoZCkpdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJpbGxlZ2FsIHR5cGU6ICIrZCk7YVtkXT1bXX1yZXR1cm4gbmV3IHJOKGEpfWZ1bmN0aW9uIHJOKGMpe3RoaXMuXz1jfWZ1bmN0aW9uIG1DdChjLGwpe2Zvcih2YXIgaCxhPTAsZD1jLmxlbmd0aDthPGQ7KythKWlmKChoPWNbYV0pLm5hbWU9PT1sKXJldHVybiBoLnZhbHVl''@;'; put 'put ''fWZ1bmN0aW9uIEs2ZShjLGwsYSl7Zm9yKHZhciBkPTAsaD1jLmxlbmd0aDtkPGg7KytkKWlmKGNbZF0ubmFtZT09PWwpe2NbZF09cEN0LGM9Yy5zbGljZSgwLGQpLmNvbmNhdChjLnNsaWNlKGQrMSkpO2JyZWFrfXJldHVybiBudWxsIT1hJiZjLnB1c2goe25hbWU6bCx2YWx1ZTphfSksY31y''@;'; put 'put ''Ti5wcm90b3R5cGU9JDZlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6ck4sb246ZnVuY3Rpb24oYyxsKXt2YXIgaCxhPXRoaXMuXyxkPWZ1bmN0aW9uIGdDdChjLGwpe3JldHVybiBjLnRyaW0oKS5zcGxpdCgvXnxccysvKS5tYXAoZnVuY3Rpb24oYSl7dmFyIGQ9IiIsaD1hLmluZGV4T2YoIi4i''@;'; put 'put ''KTtpZihoPj0wJiYoZD1hLnNsaWNlKGgrMSksYT1hLnNsaWNlKDAsaCkpLGEmJiFsLmhhc093blByb3BlcnR5KGEpKXRocm93IG5ldyBFcnJvcigidW5rbm93biB0eXBlOiAiK2EpO3JldHVybnt0eXBlOmEsbmFtZTpkfX0pfShjKyIiLGEpLGY9LTEsdj1kLmxlbmd0aDtpZighKGFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGg8Mikpe2lmKG51bGwhPWwmJiJmdW5jdGlvbiIhPXR5cGVvZiBsKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBjYWxsYmFjazogIitsKTtmb3IoOysrZjx2OylpZihoPShjPWRbZl0pLnR5cGUpYVtoXT1LNmUoYVtoXSxjLm5hbWUsbCk7ZWxzZSBpZihudWxsPT1sKWZvcihoIGlu''@;'; put 'put ''IGEpYVtoXT1LNmUoYVtoXSxjLm5hbWUsbnVsbCk7cmV0dXJuIHRoaXN9Zm9yKDsrK2Y8djspaWYoKGg9KGM9ZFtmXSkudHlwZSkmJihoPW1DdChhW2hdLGMubmFtZSkpKXJldHVybiBofSxjb3B5OmZ1bmN0aW9uKCl7dmFyIGM9e30sbD10aGlzLl87Zm9yKHZhciBhIGluIGwpY1thXT1sW2Fd''@;'; put 'put ''LnNsaWNlKCk7cmV0dXJuIG5ldyByTihjKX0sY2FsbDpmdW5jdGlvbihjLGwpe2lmKChoPWFyZ3VtZW50cy5sZW5ndGgtMik+MClmb3IodmFyIGgsZixhPW5ldyBBcnJheShoKSxkPTA7ZDxoOysrZClhW2RdPWFyZ3VtZW50c1tkKzJdO2lmKCF0aGlzLl8uaGFzT3duUHJvcGVydHkoYykpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJ1bmtub3duIHR5cGU6ICIrYyk7Zm9yKGQ9MCxoPShmPXRoaXMuX1tjXSkubGVuZ3RoO2Q8aDsrK2QpZltkXS52YWx1ZS5hcHBseShsLGEpfSxhcHBseTpmdW5jdGlvbihjLGwsYSl7aWYoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eShjKSl0aHJvdyBuZXcgRXJyb3IoInVu''@;'; put 'put ''a25vd24gdHlwZTogIitjKTtmb3IodmFyIGQ9dGhpcy5fW2NdLGg9MCxmPWQubGVuZ3RoO2g8ZjsrK2gpZFtoXS52YWx1ZS5hcHBseShsLGEpfX07Y29uc3QgUWVlPSQ2ZTt2YXIgaU4sd0EseHc9MCx5QT0wLF9BPTAscTZlPTFlMyxvTj0wLFc5PTAsYU49MCxDQT0ib2JqZWN0Ij09dHlwZW9m''@;'; put 'put ''IHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/cGVyZm9ybWFuY2U6RGF0ZSxYNmU9Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU/d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdyk6ZnVuY3Rpb24oYyl7c2V0VGlt''@;'; put 'put ''ZW91dChjLDE3KX07ZnVuY3Rpb24gZXRlKCl7cmV0dXJuIFc5fHwoWDZlKHZDdCksVzk9Q0Eubm93KCkrYU4pfWZ1bmN0aW9uIHZDdCgpe1c5PTB9ZnVuY3Rpb24gc04oKXt0aGlzLl9jYWxsPXRoaXMuX3RpbWU9dGhpcy5fbmV4dD1udWxsfWZ1bmN0aW9uIEo2ZShjLGwsYSl7dmFyIGQ9bmV3''@;'; put 'put ''IHNOO3JldHVybiBkLnJlc3RhcnQoYyxsLGEpLGR9ZnVuY3Rpb24gUTZlKCl7Vzk9KG9OPUNBLm5vdygpKSthTix4dz15QT0wO3RyeXshZnVuY3Rpb24gYkN0KCl7ZXRlKCksKyt4dztmb3IodmFyIGwsYz1pTjtjOykobD1XOS1jLl90aW1lKT49MCYmYy5fY2FsbC5jYWxsKHZvaWQgMCxsKSxj''@;'; put 'put ''PWMuX25leHQ7LS14d30oKX1maW5hbGx5e3h3PTAsZnVuY3Rpb24gX0N0KCl7Zm9yKHZhciBjLGEsbD1pTixkPTEvMDtsOylsLl9jYWxsPyhkPmwuX3RpbWUmJihkPWwuX3RpbWUpLGM9bCxsPWwuX25leHQpOihhPWwuX25leHQsbC5fbmV4dD1udWxsLGw9Yz9jLl9uZXh0PWE6aU49YSk7d0E9''@;'; put 'put ''Yyx0dGUoZCl9KCksVzk9MH19ZnVuY3Rpb24geUN0KCl7dmFyIGM9Q0Eubm93KCksbD1jLW9OO2w+cTZlJiYoYU4tPWwsb049Yyl9ZnVuY3Rpb24gdHRlKGMpe3h3fHwoeUEmJih5QT1jbGVhclRpbWVvdXQoeUEpKSxjLVc5PjI0PyhjPDEvMCYmKHlBPXNldFRpbWVvdXQoUTZlLGMtQ0Eubm93''@;'; put 'put ''KCktYU4pKSxfQSYmKF9BPWNsZWFySW50ZXJ2YWwoX0EpKSk6KF9BfHwob049Q0Eubm93KCksX0E9c2V0SW50ZXJ2YWwoeUN0LHE2ZSkpLHh3PTEsWDZlKFE2ZSkpKX1mdW5jdGlvbiBsTihjLGwsYSl7dmFyIGQ9bmV3IHNOO3JldHVybiBkLnJlc3RhcnQoaD0+e2Quc3RvcCgpLGMoaCtsKX0s''@;'; put 'put ''bD1udWxsPT1sPzA6K2wsYSksZH1zTi5wcm90b3R5cGU9SjZlLnByb3RvdHlwZT17Y29uc3RydWN0b3I6c04scmVzdGFydDpmdW5jdGlvbihjLGwsYSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGMpdGhyb3cgbmV3IFR5cGVFcnJvcigiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb24iKTthPShu''@;'; put 'put ''dWxsPT1hP2V0ZSgpOithKSsobnVsbD09bD8wOitsKSwhdGhpcy5fbmV4dCYmd0EhPT10aGlzJiYod0E/d0EuX25leHQ9dGhpczppTj10aGlzLHdBPXRoaXMpLHRoaXMuX2NhbGw9Yyx0aGlzLl90aW1lPWEsdHRlKCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLl9jYWxsJiYodGhpcy5fY2FsbD1u''@;'; put 'put ''dWxsLHRoaXMuX3RpbWU9MS8wLHR0ZSgpKX19O3ZhciB3Q3Q9UWVlKCJzdGFydCIsImVuZCIsImNhbmNlbCIsImludGVycnVwdCIpLENDdD1bXSxlOGU9MCxydGU9MixjTj0zLGl0ZT01LHVOPTY7ZnVuY3Rpb24gZE4oYyxsLGEsZCxoLGYpe3ZhciB2PWMuX190cmFuc2l0aW9uO2lmKHYpe2lm''@;'; put 'put ''KGEgaW4gdilyZXR1cm59ZWxzZSBjLl9fdHJhbnNpdGlvbj17fTshZnVuY3Rpb24gU0N0KGMsbCxhKXt2YXIgaCxkPWMuX190cmFuc2l0aW9uO2Z1bmN0aW9uIHYoWil7dmFyIG5lLGNlLGJlLEVlO2lmKDEhPT1hLnN0YXRlKXJldHVybiBEKCk7Zm9yKG5lIGluIGQpaWYoKEVlPWRbbmVdKS5u''@;'; put 'put ''YW1lPT09YS5uYW1lKXtpZihFZS5zdGF0ZT09PWNOKXJldHVybiBsTih2KTs0PT09RWUuc3RhdGU/KEVlLnN0YXRlPXVOLEVlLnRpbWVyLnN0b3AoKSxFZS5vbi5jYWxsKCJpbnRlcnJ1cHQiLGMsYy5fX2RhdGFfXyxFZS5pbmRleCxFZS5ncm91cCksZGVsZXRlIGRbbmVdKTorbmU8bCYmKEVl''@;'; put 'put ''LnN0YXRlPXVOLEVlLnRpbWVyLnN0b3AoKSxFZS5vbi5jYWxsKCJjYW5jZWwiLGMsYy5fX2RhdGFfXyxFZS5pbmRleCxFZS5ncm91cCksZGVsZXRlIGRbbmVdKX1pZihsTihmdW5jdGlvbigpe2Euc3RhdGU9PT1jTiYmKGEuc3RhdGU9NCxhLnRpbWVyLnJlc3RhcnQoTSxhLmRlbGF5LGEudGlt''@;'; put 'put ''ZSksTShaKSl9KSxhLnN0YXRlPXJ0ZSxhLm9uLmNhbGwoInN0YXJ0IixjLGMuX19kYXRhX18sYS5pbmRleCxhLmdyb3VwKSxhLnN0YXRlPT09cnRlKXtmb3IoYS5zdGF0ZT1jTixoPW5ldyBBcnJheShiZT1hLnR3ZWVuLmxlbmd0aCksbmU9MCxjZT0tMTtuZTxiZTsrK25lKShFZT1hLnR3ZWVu''@;'; put 'put ''W25lXS52YWx1ZS5jYWxsKGMsYy5fX2RhdGFfXyxhLmluZGV4LGEuZ3JvdXApKSYmKGhbKytjZV09RWUpO2gubGVuZ3RoPWNlKzF9fWZ1bmN0aW9uIE0oWil7Zm9yKHZhciBuZT1aPGEuZHVyYXRpb24/YS5lYXNlLmNhbGwobnVsbCxaL2EuZHVyYXRpb24pOihhLnRpbWVyLnJlc3RhcnQoRCks''@;'; put 'put ''YS5zdGF0ZT1pdGUsMSksY2U9LTEsYmU9aC5sZW5ndGg7KytjZTxiZTspaFtjZV0uY2FsbChjLG5lKTthLnN0YXRlPT09aXRlJiYoYS5vbi5jYWxsKCJlbmQiLGMsYy5fX2RhdGFfXyxhLmluZGV4LGEuZ3JvdXApLEQoKSl9ZnVuY3Rpb24gRCgpe2Zvcih2YXIgWiBpbiBhLnN0YXRlPXVOLGEu''@;'; put 'put ''dGltZXIuc3RvcCgpLGRlbGV0ZSBkW2xdLGQpcmV0dXJuO2RlbGV0ZSBjLl9fdHJhbnNpdGlvbn1kW2xdPWEsYS50aW1lcj1KNmUoZnVuY3Rpb24gZihaKXthLnN0YXRlPTEsYS50aW1lci5yZXN0YXJ0KHYsYS5kZWxheSxhLnRpbWUpLGEuZGVsYXk8PVomJnYoWi1hLmRlbGF5KX0sMCxhLnRp''@;'; put 'put ''bWUpfShjLGEse25hbWU6bCxpbmRleDpkLGdyb3VwOmgsb246d0N0LHR3ZWVuOkNDdCx0aW1lOmYudGltZSxkZWxheTpmLmRlbGF5LGR1cmF0aW9uOmYuZHVyYXRpb24sZWFzZTpmLmVhc2UsdGltZXI6bnVsbCxzdGF0ZTplOGV9KX1mdW5jdGlvbiBvdGUoYyxsKXt2YXIgYT1iMyhjLGwpO2lm''@;'; put 'put ''KGEuc3RhdGU+ZThlKXRocm93IG5ldyBFcnJvcigidG9vIGxhdGU7IGFscmVhZHkgc2NoZWR1bGVkIik7cmV0dXJuIGF9ZnVuY3Rpb24gaTQoYyxsKXt2YXIgYT1iMyhjLGwpO2lmKGEuc3RhdGU+Y04pdGhyb3cgbmV3IEVycm9yKCJ0b28gbGF0ZTsgYWxyZWFkeSBydW5uaW5nIik7cmV0dXJu''@;'; put 'put ''IGF9ZnVuY3Rpb24gYjMoYyxsKXt2YXIgYT1jLl9fdHJhbnNpdGlvbjtpZighYXx8IShhPWFbbF0pKXRocm93IG5ldyBFcnJvcigidHJhbnNpdGlvbiBub3QgZm91bmQiKTtyZXR1cm4gYX1mdW5jdGlvbiBoTihjLGwpe3ZhciBkLGgsdixhPWMuX190cmFuc2l0aW9uLGY9ITA7aWYoYSl7Zm9y''@;'; put 'put ''KHYgaW4gbD1udWxsPT1sP251bGw6bCsiIixhKShkPWFbdl0pLm5hbWU9PT1sPyhoPWQuc3RhdGU+cnRlJiZkLnN0YXRlPGl0ZSxkLnN0YXRlPXVOLGQudGltZXIuc3RvcCgpLGQub24uY2FsbChoPyJpbnRlcnJ1cHQiOiJjYW5jZWwiLGMsYy5fX2RhdGFfXyxkLmluZGV4LGQuZ3JvdXApLGRl''@;'; put 'put ''bGV0ZSBhW3ZdKTpmPSExO2YmJmRlbGV0ZSBjLl9fdHJhbnNpdGlvbn19ZnVuY3Rpb24gbzQoYyxsKXtyZXR1cm4gYz0rYyxsPStsLGZ1bmN0aW9uKGEpe3JldHVybiBjKigxLWEpK2wqYX19dmFyIGZOLG44ZT0xODAvTWF0aC5QSSxhdGU9e3RyYW5zbGF0ZVg6MCx0cmFuc2xhdGVZOjAscm90''@;'; put 'put ''YXRlOjAsc2tld1g6MCxzY2FsZVg6MSxzY2FsZVk6MX07ZnVuY3Rpb24gcjhlKGMsbCxhLGQsaCxmKXt2YXIgdixNLEQ7cmV0dXJuKHY9TWF0aC5zcXJ0KGMqYytsKmwpKSYmKGMvPXYsbC89diksKEQ9YyphK2wqZCkmJihhLT1jKkQsZC09bCpEKSwoTT1NYXRoLnNxcnQoYSphK2QqZCkpJiYo''@;'; put 'put ''YS89TSxkLz1NLEQvPU0pLGMqZDxsKmEmJihjPS1jLGw9LWwsRD0tRCx2PS12KSx7dHJhbnNsYXRlWDpoLHRyYW5zbGF0ZVk6Zixyb3RhdGU6TWF0aC5hdGFuMihsLGMpKm44ZSxza2V3WDpNYXRoLmF0YW4oRCkqbjhlLHNjYWxlWDp2LHNjYWxlWTpNfX1mdW5jdGlvbiBpOGUoYyxsLGEsZCl7''@;'; put 'put ''ZnVuY3Rpb24gaChaKXtyZXR1cm4gWi5sZW5ndGg/Wi5wb3AoKSsiICI6IiJ9cmV0dXJuIGZ1bmN0aW9uKFosbmUpe3ZhciBjZT1bXSxiZT1bXTtyZXR1cm4gWj1jKFopLG5lPWMobmUpLGZ1bmN0aW9uIGYoWixuZSxjZSxiZSxFZSxCZSl7aWYoWiE9PWNlfHxuZSE9PWJlKXt2YXIgcWU9RWUu''@;'; put 'put ''cHVzaCgidHJhbnNsYXRlKCIsbnVsbCxsLG51bGwsYSk7QmUucHVzaCh7aTpxZS00LHg6bzQoWixjZSl9LHtpOnFlLTIseDpvNChuZSxiZSl9KX1lbHNlKGNlfHxiZSkmJkVlLnB1c2goInRyYW5zbGF0ZSgiK2NlK2wrYmUrYSl9KFoudHJhbnNsYXRlWCxaLnRyYW5zbGF0ZVksbmUudHJhbnNs''@;'; put 'put ''YXRlWCxuZS50cmFuc2xhdGVZLGNlLGJlKSxmdW5jdGlvbiB2KFosbmUsY2UsYmUpe1ohPT1uZT8oWi1uZT4xODA/bmUrPTM2MDpuZS1aPjE4MCYmKForPTM2MCksYmUucHVzaCh7aTpjZS5wdXNoKGgoY2UpKyJyb3RhdGUoIixudWxsLGQpLTIseDpvNChaLG5lKX0pKTpuZSYmY2UucHVzaCho''@;'; put 'put ''KGNlKSsicm90YXRlKCIrbmUrZCl9KFoucm90YXRlLG5lLnJvdGF0ZSxjZSxiZSksZnVuY3Rpb24gTShaLG5lLGNlLGJlKXtaIT09bmU/YmUucHVzaCh7aTpjZS5wdXNoKGgoY2UpKyJza2V3WCgiLG51bGwsZCktMix4Om80KFosbmUpfSk6bmUmJmNlLnB1c2goaChjZSkrInNrZXdYKCIrbmUr''@;'; put 'put ''ZCl9KFouc2tld1gsbmUuc2tld1gsY2UsYmUpLGZ1bmN0aW9uIEQoWixuZSxjZSxiZSxFZSxCZSl7aWYoWiE9PWNlfHxuZSE9PWJlKXt2YXIgcWU9RWUucHVzaChoKEVlKSsic2NhbGUoIixudWxsLCIsIixudWxsLCIpIik7QmUucHVzaCh7aTpxZS00LHg6bzQoWixjZSl9LHtpOnFlLTIseDpv''@;'; put 'put ''NChuZSxiZSl9KX1lbHNlKDEhPT1jZXx8MSE9PWJlKSYmRWUucHVzaChoKEVlKSsic2NhbGUoIitjZSsiLCIrYmUrIikiKX0oWi5zY2FsZVgsWi5zY2FsZVksbmUuc2NhbGVYLG5lLnNjYWxlWSxjZSxiZSksWj1uZT1udWxsLGZ1bmN0aW9uKEVlKXtmb3IodmFyIG50LEJlPS0xLHFlPWJlLmxl''@;'; put 'put ''bmd0aDsrK0JlPHFlOyljZVsobnQ9YmVbQmVdKS5pXT1udC54KEVlKTtyZXR1cm4gY2Uuam9pbigiIil9fX12YXIgVEN0PWk4ZShmdW5jdGlvbiB4Q3QoYyl7Y29uc3QgbD1uZXcoImZ1bmN0aW9uIj09dHlwZW9mIERPTU1hdHJpeD9ET01NYXRyaXg6V2ViS2l0Q1NTTWF0cml4KShjKyIiKTty''@;'; put 'put ''ZXR1cm4gbC5pc0lkZW50aXR5P2F0ZTpyOGUobC5hLGwuYixsLmMsbC5kLGwuZSxsLmYpfSwicHgsICIsInB4KSIsImRlZykiKSxvOGU9aThlKGZ1bmN0aW9uIEVDdChjKXtyZXR1cm4gbnVsbCE9YyYmKGZOfHwoZk49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9y''@;'; put 'put ''Zy8yMDAwL3N2ZyIsImciKSksZk4uc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLGMpLGM9Zk4udHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSk/cjhlKChjPWMubWF0cml4KS5hLGMuYixjLmMsYy5kLGMuZSxjLmYpOmF0ZX0sIiwgIiwiKSIsIikiKTtmdW5jdGlvbiBBQ3QoYyxsKXt2''@;'; put 'put ''YXIgYSxkO3JldHVybiBmdW5jdGlvbigpe3ZhciBoPWk0KHRoaXMsYyksZj1oLnR3ZWVuO2lmKGYhPT1hKWZvcih2YXIgdj0wLE09KGQ9YT1mKS5sZW5ndGg7djxNOysrdilpZihkW3ZdLm5hbWU9PT1sKXsoZD1kLnNsaWNlKCkpLnNwbGljZSh2LDEpO2JyZWFrfWgudHdlZW49ZH19ZnVuY3Rp''@;'; put 'put ''b24ga0N0KGMsbCxhKXt2YXIgZCxoO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBhKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZj1pNCh0aGlzLGMpLHY9Zi50d2VlbjtpZih2IT09ZCl7aD0oZD12KS5zbGljZSgpO2Zvcih2YXIgTT17bmFtZTpsLHZhbHVlOmF9LEQ9MCxa''@;'; put 'put ''PWgubGVuZ3RoO0Q8WjsrK0QpaWYoaFtEXS5uYW1lPT09bCl7aFtEXT1NO2JyZWFrfUQ9PT1aJiZoLnB1c2goTSl9Zi50d2Vlbj1ofX1mdW5jdGlvbiBzdGUoYyxsLGEpe3ZhciBkPWMuX2lkO3JldHVybiBjLmVhY2goZnVuY3Rpb24oKXt2YXIgaD1pNCh0aGlzLGQpOyhoLnZhbHVlfHwoaC52''@;'; put 'put ''YWx1ZT17fSkpW2xdPWEuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksZnVuY3Rpb24oaCl7cmV0dXJuIGIzKGgsZCkudmFsdWVbbF19fWZ1bmN0aW9uIGx0ZShjLGwsYSl7Yy5wcm90b3R5cGU9bC5wcm90b3R5cGU9YSxhLmNvbnN0cnVjdG9yPWN9ZnVuY3Rpb24gYThlKGMsbCl7dmFyIGE9T2Jq''@;'; put 'put ''ZWN0LmNyZWF0ZShjLnByb3RvdHlwZSk7Zm9yKHZhciBkIGluIGwpYVtkXT1sW2RdO3JldHVybiBhfWZ1bmN0aW9uIFNBKCl7fXZhciBwTj0xLy43LEV3PSJcXHMqKFsrLV0/XFxkKylcXHMqIix4QT0iXFxzKihbKy1dPyg/OlxcZCpcXC4pP1xcZCsoPzpbZUVdWystXT9cXGQrKT8pXFxzKiIs''@;'; put 'put ''YTQ9IlxccyooWystXT8oPzpcXGQqXFwuKT9cXGQrKD86W2VFXVsrLV0/XFxkKyk/KSVcXHMqIixJQ3Q9L14jKFswLTlhLWZdezMsOH0pJC8sUkN0PW5ldyBSZWdFeHAoYF5yZ2JcXCgke0V3fSwke0V3fSwke0V3fVxcKSRgKSxMQ3Q9bmV3IFJlZ0V4cChgXnJnYlxcKCR7YTR9LCR7YTR9LCR7''@;'; put 'put ''YTR9XFwpJGApLE9DdD1uZXcgUmVnRXhwKGBecmdiYVxcKCR7RXd9LCR7RXd9LCR7RXd9LCR7eEF9XFwpJGApLFBDdD1uZXcgUmVnRXhwKGBecmdiYVxcKCR7YTR9LCR7YTR9LCR7YTR9LCR7eEF9XFwpJGApLEZDdD1uZXcgUmVnRXhwKGBeaHNsXFwoJHt4QX0sJHthNH0sJHthNH1cXCkkYCks''@;'; put 'put ''SEN0PW5ldyBSZWdFeHAoYF5oc2xhXFwoJHt4QX0sJHthNH0sJHthNH0sJHt4QX1cXCkkYCksczhlPXthbGljZWJsdWU6MTU3OTIzODMsYW50aXF1ZXdoaXRlOjE2NDQ0Mzc1LGFxdWE6NjU1MzUsYXF1YW1hcmluZTo4Mzg4NTY0LGF6dXJlOjE1Nzk0MTc1LGJlaWdlOjE2MTE5MjYwLGJpc3F1''@;'; put 'put ''ZToxNjc3MDI0NCxibGFjazowLGJsYW5jaGVkYWxtb25kOjE2NzcyMDQ1LGJsdWU6MjU1LGJsdWV2aW9sZXQ6OTA1NTIwMixicm93bjoxMDgyNDIzNCxidXJseXdvb2Q6MTQ1OTYyMzEsY2FkZXRibHVlOjYyNjY1MjgsY2hhcnRyZXVzZTo4Mzg4MzUyLGNob2NvbGF0ZToxMzc4OTQ3MCxjb3Jh''@;'; put 'put ''bDoxNjc0NDI3Mixjb3JuZmxvd2VyYmx1ZTo2NTkxOTgxLGNvcm5zaWxrOjE2Nzc1Mzg4LGNyaW1zb246MTQ0MjMxMDAsY3lhbjo2NTUzNSxkYXJrYmx1ZToxMzksZGFya2N5YW46MzU3MjMsZGFya2dvbGRlbnJvZDoxMjA5MjkzOSxkYXJrZ3JheToxMTExOTAxNyxkYXJrZ3JlZW46MjU2MDAs''@;'; put 'put ''ZGFya2dyZXk6MTExMTkwMTcsZGFya2toYWtpOjEyNDMzMjU5LGRhcmttYWdlbnRhOjkxMDk2NDMsZGFya29saXZlZ3JlZW46NTU5Nzk5OSxkYXJrb3JhbmdlOjE2NzQ3NTIwLGRhcmtvcmNoaWQ6MTAwNDAwMTIsZGFya3JlZDo5MTA5NTA0LGRhcmtzYWxtb246MTUzMDg0MTAsZGFya3NlYWdy''@;'; put 'put ''ZWVuOjk0MTk5MTksZGFya3NsYXRlYmx1ZTo0NzM0MzQ3LGRhcmtzbGF0ZWdyYXk6MzEwMDQ5NSxkYXJrc2xhdGVncmV5OjMxMDA0OTUsZGFya3R1cnF1b2lzZTo1Mjk0NSxkYXJrdmlvbGV0Ojk2OTk1MzksZGVlcHBpbms6MTY3MTY5NDcsZGVlcHNreWJsdWU6NDkxNTEsZGltZ3JheTo2OTA4''@;'; put 'put ''MjY1LGRpbWdyZXk6NjkwODI2NSxkb2RnZXJibHVlOjIwMDMxOTksZmlyZWJyaWNrOjExNjc0MTQ2LGZsb3JhbHdoaXRlOjE2Nzc1OTIwLGZvcmVzdGdyZWVuOjIyNjM4NDIsZnVjaHNpYToxNjcxMTkzNSxnYWluc2Jvcm86MTQ0NzQ0NjAsZ2hvc3R3aGl0ZToxNjMxNjY3MSxnb2xkOjE2NzY2''@;'; put 'put ''NzIwLGdvbGRlbnJvZDoxNDMyOTEyMCxncmF5Ojg0MjE1MDQsZ3JlZW46MzI3NjgsZ3JlZW55ZWxsb3c6MTE0MDMwNTUsZ3JleTo4NDIxNTA0LGhvbmV5ZGV3OjE1Nzk0MTYwLGhvdHBpbms6MTY3Mzg3NDAsaW5kaWFucmVkOjEzNDU4NTI0LGluZGlnbzo0OTE1MzMwLGl2b3J5OjE2Nzc3MjAw''@;'; put 'put ''LGtoYWtpOjE1Nzg3NjYwLGxhdmVuZGVyOjE1MTMyNDEwLGxhdmVuZGVyYmx1c2g6MTY3NzMzNjUsbGF3bmdyZWVuOjgxOTA5NzYsbGVtb25jaGlmZm9uOjE2Nzc1ODg1LGxpZ2h0Ymx1ZToxMTM5MzI1NCxsaWdodGNvcmFsOjE1NzYxNTM2LGxpZ2h0Y3lhbjoxNDc0NTU5OSxsaWdodGdvbGRl''@;'; put 'put ''bnJvZHllbGxvdzoxNjQ0ODIxMCxsaWdodGdyYXk6MTM4ODIzMjMsbGlnaHRncmVlbjo5NDk4MjU2LGxpZ2h0Z3JleToxMzg4MjMyMyxsaWdodHBpbms6MTY3NTg0NjUsbGlnaHRzYWxtb246MTY3NTI3NjIsbGlnaHRzZWFncmVlbjoyMTQyODkwLGxpZ2h0c2t5Ymx1ZTo4OTAwMzQ2LGxpZ2h0''@;'; put 'put ''c2xhdGVncmF5Ojc4MzM3NTMsbGlnaHRzbGF0ZWdyZXk6NzgzMzc1MyxsaWdodHN0ZWVsYmx1ZToxMTU4NDczNCxsaWdodHllbGxvdzoxNjc3NzE4NCxsaW1lOjY1MjgwLGxpbWVncmVlbjozMzI5MzMwLGxpbmVuOjE2NDQ1NjcwLG1hZ2VudGE6MTY3MTE5MzUsbWFyb29uOjgzODg2MDgsbWVk''@;'; put 'put ''aXVtYXF1YW1hcmluZTo2NzM3MzIyLG1lZGl1bWJsdWU6MjA1LG1lZGl1bW9yY2hpZDoxMjIxMTY2NyxtZWRpdW1wdXJwbGU6OTY2MjY4MyxtZWRpdW1zZWFncmVlbjozOTc4MDk3LG1lZGl1bXNsYXRlYmx1ZTo4MDg3NzkwLG1lZGl1bXNwcmluZ2dyZWVuOjY0MTU0LG1lZGl1bXR1cnF1b2lz''@;'; put 'put ''ZTo0NzcyMzAwLG1lZGl1bXZpb2xldHJlZDoxMzA0NzE3MyxtaWRuaWdodGJsdWU6MTY0NDkxMixtaW50Y3JlYW06MTYxMjE4NTAsbWlzdHlyb3NlOjE2NzcwMjczLG1vY2Nhc2luOjE2NzcwMjI5LG5hdmFqb3doaXRlOjE2NzY4Njg1LG5hdnk6MTI4LG9sZGxhY2U6MTY2NDM1NTgsb2xpdmU6''@;'; put 'put ''ODQyMTM3NixvbGl2ZWRyYWI6NzA0ODczOSxvcmFuZ2U6MTY3NTM5MjAsb3JhbmdlcmVkOjE2NzI5MzQ0LG9yY2hpZDoxNDMxNTczNCxwYWxlZ29sZGVucm9kOjE1NjU3MTMwLHBhbGVncmVlbjoxMDAyNTg4MCxwYWxldHVycXVvaXNlOjExNTI5OTY2LHBhbGV2aW9sZXRyZWQ6MTQzODEyMDMs''@;'; put 'put ''cGFwYXlhd2hpcDoxNjc3MzA3NyxwZWFjaHB1ZmY6MTY3Njc2NzMscGVydToxMzQ2ODk5MSxwaW5rOjE2NzYxMDM1LHBsdW06MTQ1MjQ2MzcscG93ZGVyYmx1ZToxMTU5MTkxMCxwdXJwbGU6ODM4ODczNixyZWJlY2NhcHVycGxlOjY2OTc4ODEscmVkOjE2NzExNjgwLHJvc3licm93bjoxMjM1''@;'; put 'put ''NzUxOSxyb3lhbGJsdWU6NDI4Njk0NSxzYWRkbGVicm93bjo5MTI3MTg3LHNhbG1vbjoxNjQxNjg4MixzYW5keWJyb3duOjE2MDMyODY0LHNlYWdyZWVuOjMwNTAzMjcsc2Vhc2hlbGw6MTY3NzQ2Mzgsc2llbm5hOjEwNTA2Nzk3LHNpbHZlcjoxMjYzMjI1Nixza3libHVlOjg5MDAzMzEsc2xh''@;'; put 'put ''dGVibHVlOjY5NzAwNjEsc2xhdGVncmF5OjczNzI5NDQsc2xhdGVncmV5OjczNzI5NDQsc25vdzoxNjc3NTkzMCxzcHJpbmdncmVlbjo2NTQwNyxzdGVlbGJsdWU6NDYyMDk4MCx0YW46MTM4MDg3ODAsdGVhbDozMjg5Nix0aGlzdGxlOjE0MjA0ODg4LHRvbWF0bzoxNjczNzA5NSx0dXJxdW9p''@;'; put 'put ''c2U6NDI1MTg1Nix2aW9sZXQ6MTU2MzEwODYsd2hlYXQ6MTYxMTMzMzEsd2hpdGU6MTY3NzcyMTUsd2hpdGVzbW9rZToxNjExOTI4NSx5ZWxsb3c6MTY3NzY5NjAseWVsbG93Z3JlZW46MTAxNDUwNzR9O2Z1bmN0aW9uIGw4ZSgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpfWZ1bmN0''@;'; put 'put ''aW9uIGM4ZSgpe3JldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpfWZ1bmN0aW9uIFk5KGMpe3ZhciBsLGE7cmV0dXJuIGM9KGMrIiIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLChsPUlDdC5leGVjKGMpKT8oYT1sWzFdLmxlbmd0aCxsPXBhcnNlSW50KGxbMV0sMTYpLDY9PT1hP3U4ZShsKToz''@;'; put 'put ''PT09YT9uZXcgS2QobD4+OCYxNXxsPj40JjI0MCxsPj40JjE1fDI0MCZsLCgxNSZsKTw8NHwxNSZsLDEpOjg9PT1hP2dOKGw+PjI0JjI1NSxsPj4xNiYyNTUsbD4+OCYyNTUsKDI1NSZsKS8yNTUpOjQ9PT1hP2dOKGw+PjEyJjE1fGw+PjgmMjQwLGw+PjgmMTV8bD4+NCYyNDAsbD4+NCYxNXwy''@;'; put 'put ''NDAmbCwoKDE1JmwpPDw0fDE1JmwpLzI1NSk6bnVsbCk6KGw9UkN0LmV4ZWMoYykpP25ldyBLZChsWzFdLGxbMl0sbFszXSwxKToobD1MQ3QuZXhlYyhjKSk/bmV3IEtkKDI1NSpsWzFdLzEwMCwyNTUqbFsyXS8xMDAsMjU1KmxbM10vMTAwLDEpOihsPU9DdC5leGVjKGMpKT9nTihsWzFdLGxb''@;'; put 'put ''Ml0sbFszXSxsWzRdKToobD1QQ3QuZXhlYyhjKSk/Z04oMjU1KmxbMV0vMTAwLDI1NSpsWzJdLzEwMCwyNTUqbFszXS8xMDAsbFs0XSk6KGw9RkN0LmV4ZWMoYykpP2Y4ZShsWzFdLGxbMl0vMTAwLGxbM10vMTAwLDEpOihsPUhDdC5leGVjKGMpKT9mOGUobFsxXSxsWzJdLzEwMCxsWzNdLzEw''@;'; put 'put ''MCxsWzRdKTpzOGUuaGFzT3duUHJvcGVydHkoYyk/dThlKHM4ZVtjXSk6InRyYW5zcGFyZW50Ij09PWM/bmV3IEtkKE5hTixOYU4sTmFOLDApOm51bGx9ZnVuY3Rpb24gdThlKGMpe3JldHVybiBuZXcgS2QoYz4+MTYmMjU1LGM+PjgmMjU1LDI1NSZjLDEpfWZ1bmN0aW9uIGdOKGMsbCxhLGQp''@;'; put 'put ''e3JldHVybiBkPD0wJiYoYz1sPWE9TmFOKSxuZXcgS2QoYyxsLGEsZCl9ZnVuY3Rpb24gbU4oYyxsLGEsZCl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP2Z1bmN0aW9uIEJDdChjKXtyZXR1cm4gYyBpbnN0YW5jZW9mIFNBfHwoYz1ZOShjKSksYz9uZXcgS2QoKGM9Yy5yZ2IoKSkucixj''@;'; put 'put ''LmcsYy5iLGMub3BhY2l0eSk6bmV3IEtkfShjKTpuZXcgS2QoYyxsLGEsZD8/MSl9ZnVuY3Rpb24gS2QoYyxsLGEsZCl7dGhpcy5yPStjLHRoaXMuZz0rbCx0aGlzLmI9K2EsdGhpcy5vcGFjaXR5PStkfWZ1bmN0aW9uIGQ4ZSgpe3JldHVybmAjJHskOSh0aGlzLnIpfSR7JDkodGhpcy5nKX0k''@;'; put 'put ''eyQ5KHRoaXMuYil9YH1mdW5jdGlvbiBoOGUoKXtjb25zdCBjPXZOKHRoaXMub3BhY2l0eSk7cmV0dXJuYCR7MT09PWM/InJnYigiOiJyZ2JhKCJ9JHtHOSh0aGlzLnIpfSwgJHtHOSh0aGlzLmcpfSwgJHtHOSh0aGlzLmIpfSR7MT09PWM/IikiOmAsICR7Y30pYH1gfWZ1bmN0aW9uIHZOKGMp''@;'; put 'put ''e3JldHVybiBpc05hTihjKT8xOk1hdGgubWF4KDAsTWF0aC5taW4oMSxjKSl9ZnVuY3Rpb24gRzkoYyl7cmV0dXJuIE1hdGgubWF4KDAsTWF0aC5taW4oMjU1LE1hdGgucm91bmQoYyl8fDApKX1mdW5jdGlvbiAkOShjKXtyZXR1cm4oKGM9RzkoYykpPDE2PyIwIjoiIikrYy50b1N0cmluZygx''@;'; put 'put ''Nil9ZnVuY3Rpb24gZjhlKGMsbCxhLGQpe3JldHVybiBkPD0wP2M9bD1hPU5hTjphPD0wfHxhPj0xP2M9bD1OYU46bDw9MCYmKGM9TmFOKSxuZXcgeTMoYyxsLGEsZCl9ZnVuY3Rpb24gcDhlKGMpe2lmKGMgaW5zdGFuY2VvZiB5MylyZXR1cm4gbmV3IHkzKGMuaCxjLnMsYy5sLGMub3BhY2l0''@;'; put 'put ''eSk7aWYoYyBpbnN0YW5jZW9mIFNBfHwoYz1ZOShjKSksIWMpcmV0dXJuIG5ldyB5MztpZihjIGluc3RhbmNlb2YgeTMpcmV0dXJuIGM7dmFyIGw9KGM9Yy5yZ2IoKSkuci8yNTUsYT1jLmcvMjU1LGQ9Yy5iLzI1NSxoPU1hdGgubWluKGwsYSxkKSxmPU1hdGgubWF4KGwsYSxkKSx2PU5hTixN''@;'; put 'put ''PWYtaCxEPShmK2gpLzI7cmV0dXJuIE0/KHY9bD09PWY/KGEtZCkvTSs2KihhPGQpOmE9PT1mPyhkLWwpL00rMjoobC1hKS9NKzQsTS89RDwuNT9mK2g6Mi1mLWgsdio9NjApOk09RD4wJiZEPDE/MDp2LG5ldyB5Myh2LE0sRCxjLm9wYWNpdHkpfWZ1bmN0aW9uIHkzKGMsbCxhLGQpe3RoaXMu''@;'; put 'put ''aD0rYyx0aGlzLnM9K2wsdGhpcy5sPSthLHRoaXMub3BhY2l0eT0rZH1mdW5jdGlvbiBnOGUoYyl7cmV0dXJuKGM9KGN8fDApJTM2MCk8MD9jKzM2MDpjfWZ1bmN0aW9uIGJOKGMpe3JldHVybiBNYXRoLm1heCgwLE1hdGgubWluKDEsY3x8MCkpfWZ1bmN0aW9uIGN0ZShjLGwsYSl7cmV0dXJu''@;'; put 'put ''IDI1NSooYzw2MD9sKyhhLWwpKmMvNjA6YzwxODA/YTpjPDI0MD9sKyhhLWwpKigyNDAtYykvNjA6bCl9ZnVuY3Rpb24gbThlKGMsbCxhLGQsaCl7dmFyIGY9YypjLHY9ZipjO3JldHVybigoMS0zKmMrMypmLXYpKmwrKDQtNipmKzMqdikqYSsoMSszKmMrMypmLTMqdikqZCt2KmgpLzZ9bHRl''@;'; put 'put ''KFNBLFk5LHtjb3B5KGMpe3JldHVybiBPYmplY3QuYXNzaWduKG5ldyB0aGlzLmNvbnN0cnVjdG9yLHRoaXMsYyl9LGRpc3BsYXlhYmxlKCl7cmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKX0saGV4Omw4ZSxmb3JtYXRIZXg6bDhlLGZvcm1hdEhleDg6ZnVuY3Rpb24gTkN0KCl7cmV0''@;'; put 'put ''dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4OCgpfSxmb3JtYXRIc2w6ZnVuY3Rpb24gVkN0KCl7cmV0dXJuIHA4ZSh0aGlzKS5mb3JtYXRIc2woKX0sZm9ybWF0UmdiOmM4ZSx0b1N0cmluZzpjOGV9KSxsdGUoS2QsbU4sYThlKFNBLHticmlnaHRlcihjKXtyZXR1cm4gYz1udWxsPT1jP3BOOk1h''@;'; put 'put ''dGgucG93KHBOLGMpLG5ldyBLZCh0aGlzLnIqYyx0aGlzLmcqYyx0aGlzLmIqYyx0aGlzLm9wYWNpdHkpfSxkYXJrZXIoYyl7cmV0dXJuIGM9bnVsbD09Yz8uNzpNYXRoLnBvdyguNyxjKSxuZXcgS2QodGhpcy5yKmMsdGhpcy5nKmMsdGhpcy5iKmMsdGhpcy5vcGFjaXR5KX0scmdiKCl7cmV0''@;'; put 'put ''dXJuIHRoaXN9LGNsYW1wKCl7cmV0dXJuIG5ldyBLZChHOSh0aGlzLnIpLEc5KHRoaXMuZyksRzkodGhpcy5iKSx2Tih0aGlzLm9wYWNpdHkpKX0sZGlzcGxheWFibGUoKXtyZXR1cm4tLjU8PXRoaXMuciYmdGhpcy5yPDI1NS41JiYtLjU8PXRoaXMuZyYmdGhpcy5nPDI1NS41JiYtLjU8PXRo''@;'; put 'put ''aXMuYiYmdGhpcy5iPDI1NS41JiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0saGV4OmQ4ZSxmb3JtYXRIZXg6ZDhlLGZvcm1hdEhleDg6ZnVuY3Rpb24gakN0KCl7cmV0dXJuYCMkeyQ5KHRoaXMucil9JHskOSh0aGlzLmcpfSR7JDkodGhpcy5iKX0keyQ5KDI1NSooaXNOYU4o''@;'; put 'put ''dGhpcy5vcGFjaXR5KT8xOnRoaXMub3BhY2l0eSkpfWB9LGZvcm1hdFJnYjpoOGUsdG9TdHJpbmc6aDhlfSkpLGx0ZSh5MyxmdW5jdGlvbiB6Q3QoYyxsLGEsZCl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3A4ZShjKTpuZXcgeTMoYyxsLGEsZD8/MSl9LGE4ZShTQSx7YnJpZ2h0ZXIo''@;'; put 'put ''Yyl7cmV0dXJuIGM9bnVsbD09Yz9wTjpNYXRoLnBvdyhwTixjKSxuZXcgeTModGhpcy5oLHRoaXMucyx0aGlzLmwqYyx0aGlzLm9wYWNpdHkpfSxkYXJrZXIoYyl7cmV0dXJuIGM9bnVsbD09Yz8uNzpNYXRoLnBvdyguNyxjKSxuZXcgeTModGhpcy5oLHRoaXMucyx0aGlzLmwqYyx0aGlzLm9w''@;'; put 'put ''YWNpdHkpfSxyZ2IoKXt2YXIgYz10aGlzLmglMzYwKzM2MCoodGhpcy5oPDApLGw9aXNOYU4oYyl8fGlzTmFOKHRoaXMucyk/MDp0aGlzLnMsYT10aGlzLmwsZD1hKyhhPC41P2E6MS1hKSpsLGg9MiphLWQ7cmV0dXJuIG5ldyBLZChjdGUoYz49MjQwP2MtMjQwOmMrMTIwLGgsZCksY3RlKGMs''@;'; put 'put ''aCxkKSxjdGUoYzwxMjA/YysyNDA6Yy0xMjAsaCxkKSx0aGlzLm9wYWNpdHkpfSxjbGFtcCgpe3JldHVybiBuZXcgeTMoZzhlKHRoaXMuaCksYk4odGhpcy5zKSxiTih0aGlzLmwpLHZOKHRoaXMub3BhY2l0eSkpfSxkaXNwbGF5YWJsZSgpe3JldHVybigwPD10aGlzLnMmJnRoaXMuczw9MXx8''@;'; put 'put ''aXNOYU4odGhpcy5zKSkmJjA8PXRoaXMubCYmdGhpcy5sPD0xJiYwPD10aGlzLm9wYWNpdHkmJnRoaXMub3BhY2l0eTw9MX0sZm9ybWF0SHNsKCl7Y29uc3QgYz12Tih0aGlzLm9wYWNpdHkpO3JldHVybmAkezE9PT1jPyJoc2woIjoiaHNsYSgifSR7ZzhlKHRoaXMuaCl9LCAkezEwMCpiTih0''@;'; put 'put ''aGlzLnMpfSUsICR7MTAwKmJOKHRoaXMubCl9JSR7MT09PWM/IikiOmAsICR7Y30pYH1gfX0pKTtjb25zdCB1dGU9Yz0+KCk9PmM7ZnVuY3Rpb24gYjhlKGMsbCl7dmFyIGE9bC1jO3JldHVybiBhP2Z1bmN0aW9uIHY4ZShjLGwpe3JldHVybiBmdW5jdGlvbihhKXtyZXR1cm4gYythKmx9fShj''@;'; put 'put ''LGEpOnV0ZShpc05hTihjKT9sOmMpfWNvbnN0IHlOPWZ1bmN0aW9uIGMobCl7dmFyIGE9ZnVuY3Rpb24gWUN0KGMpe3JldHVybiAxPT0oYz0rYyk/YjhlOmZ1bmN0aW9uKGwsYSl7cmV0dXJuIGEtbD9mdW5jdGlvbiBXQ3QoYyxsLGEpe3JldHVybiBjPU1hdGgucG93KGMsYSksbD1NYXRoLnBv''@;'; put 'put ''dyhsLGEpLWMsYT0xL2EsZnVuY3Rpb24oZCl7cmV0dXJuIE1hdGgucG93KGMrZCpsLGEpfX0obCxhLGMpOnV0ZShpc05hTihsKT9hOmwpfX0obCk7ZnVuY3Rpb24gZChoLGYpe3ZhciB2PWEoKGg9bU4oaCkpLnIsKGY9bU4oZikpLnIpLE09YShoLmcsZi5nKSxEPWEoaC5iLGYuYiksWj1iOGUo''@;'; put 'put ''aC5vcGFjaXR5LGYub3BhY2l0eSk7cmV0dXJuIGZ1bmN0aW9uKG5lKXtyZXR1cm4gaC5yPXYobmUpLGguZz1NKG5lKSxoLmI9RChuZSksaC5vcGFjaXR5PVoobmUpLGgrIiJ9fXJldHVybiBkLmdhbW1hPWMsZH0oMSk7ZnVuY3Rpb24geThlKGMpe3JldHVybiBmdW5jdGlvbihsKXt2YXIgdixN''@;'; put 'put ''LGE9bC5sZW5ndGgsZD1uZXcgQXJyYXkoYSksaD1uZXcgQXJyYXkoYSksZj1uZXcgQXJyYXkoYSk7Zm9yKHY9MDt2PGE7Kyt2KU09bU4obFt2XSksZFt2XT1NLnJ8fDAsaFt2XT1NLmd8fDAsZlt2XT1NLmJ8fDA7cmV0dXJuIGQ9YyhkKSxoPWMoaCksZj1jKGYpLE0ub3BhY2l0eT0xLGZ1bmN0''@;'; put 'put ''aW9uKEQpe3JldHVybiBNLnI9ZChEKSxNLmc9aChEKSxNLmI9ZihEKSxNKyIifX19eThlKGZ1bmN0aW9uIFVDdChjKXt2YXIgbD1jLmxlbmd0aC0xO3JldHVybiBmdW5jdGlvbihhKXt2YXIgZD1hPD0wP2E9MDphPj0xPyhhPTEsbC0xKTpNYXRoLmZsb29yKGEqbCksaD1jW2RdLGY9Y1tkKzFd''@;'; put 'put ''O3JldHVybiBtOGUoKGEtZC9sKSpsLGQ+MD9jW2QtMV06MipoLWYsaCxmLGQ8bC0xP2NbZCsyXToyKmYtaCl9fSkseThlKGZ1bmN0aW9uIFpDdChjKXt2YXIgbD1jLmxlbmd0aDtyZXR1cm4gZnVuY3Rpb24oYSl7dmFyIGQ9TWF0aC5mbG9vcigoKGElPTEpPDA/KythOmEpKmwpO3JldHVybiBt''@;'; put 'put ''OGUoKGEtZC9sKSpsLGNbKGQrbC0xKSVsXSxjW2QlbF0sY1soZCsxKSVsXSxjWyhkKzIpJWxdKX19KTt2YXIgZHRlPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZyxodGU9bmV3IFJlZ0V4cChkdGUuc291cmNlLCJnIik7ZnVuY3Rpb24gXzhlKGMsbCl7dmFy''@;'; put 'put ''IGQsaCxmLGE9ZHRlLmxhc3RJbmRleD1odGUubGFzdEluZGV4PTAsdj0tMSxNPVtdLEQ9W107Zm9yKGMrPSIiLGwrPSIiOyhkPWR0ZS5leGVjKGMpKSYmKGg9aHRlLmV4ZWMobCkpOykoZj1oLmluZGV4KT5hJiYoZj1sLnNsaWNlKGEsZiksTVt2XT9NW3ZdKz1mOk1bKyt2XT1mKSwoZD1kWzBd''@;'; put 'put ''KT09PShoPWhbMF0pP01bdl0/TVt2XSs9aDpNWysrdl09aDooTVsrK3ZdPW51bGwsRC5wdXNoKHtpOnYseDpvNChkLGgpfSkpLGE9aHRlLmxhc3RJbmRleDtyZXR1cm4gYTxsLmxlbmd0aCYmKGY9bC5zbGljZShhKSxNW3ZdP01bdl0rPWY6TVsrK3ZdPWYpLE0ubGVuZ3RoPDI/RFswXT9mdW5j''@;'; put 'put ''dGlvbiAkQ3QoYyl7cmV0dXJuIGZ1bmN0aW9uKGwpe3JldHVybiBjKGwpKyIifX0oRFswXS54KTpmdW5jdGlvbiBHQ3QoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGN9fShsKToobD1ELmxlbmd0aCxmdW5jdGlvbihaKXtmb3IodmFyIGNlLG5lPTA7bmU8bDsrK25lKU1bKGNlPURbbmVd''@;'; put 'put ''KS5pXT1jZS54KFopO3JldHVybiBNLmpvaW4oIiIpfSl9ZnVuY3Rpb24gdzhlKGMsbCl7dmFyIGE7cmV0dXJuKCJudW1iZXIiPT10eXBlb2YgbD9vNDpsIGluc3RhbmNlb2YgWTk/eU46KGE9WTkobCkpPyhsPWEseU4pOl84ZSkoYyxsKX1mdW5jdGlvbiBLQ3QoYyl7cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''KCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUoYyl9fWZ1bmN0aW9uIHFDdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCl9fWZ1bmN0aW9uIFhDdChjLGwsYSl7dmFyIGQsZixoPWErIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHY9dGhp''@;'; put 'put ''cy5nZXRBdHRyaWJ1dGUoYyk7cmV0dXJuIHY9PT1oP251bGw6dj09PWQ/ZjpmPWwoZD12LGEpfX1mdW5jdGlvbiBKQ3QoYyxsLGEpe3ZhciBkLGYsaD1hKyIiO3JldHVybiBmdW5jdGlvbigpe3ZhciB2PXRoaXMuZ2V0QXR0cmlidXRlTlMoYy5zcGFjZSxjLmxvY2FsKTtyZXR1cm4gdj09PWg/''@;'; put 'put ''bnVsbDp2PT09ZD9mOmY9bChkPXYsYSl9fWZ1bmN0aW9uIFFDdChjLGwsYSl7dmFyIGQsaCxmO3JldHVybiBmdW5jdGlvbigpe3ZhciB2LEQsTT1hKHRoaXMpO3JldHVybiBudWxsPT1NP3ZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUoYyk6KHY9dGhpcy5nZXRBdHRyaWJ1dGUoYykpPT09KEQ9''@;'; put 'put ''TSsiIik/bnVsbDp2PT09ZCYmRD09PWg/ZjooaD1ELGY9bChkPXYsTSkpfX1mdW5jdGlvbiBlU3QoYyxsLGEpe3ZhciBkLGgsZjtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdixELE09YSh0aGlzKTtyZXR1cm4gbnVsbD09TT92b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoYy5zcGFjZSxjLmxv''@;'; put 'put ''Y2FsKToodj10aGlzLmdldEF0dHJpYnV0ZU5TKGMuc3BhY2UsYy5sb2NhbCkpPT09KEQ9TSsiIik/bnVsbDp2PT09ZCYmRD09PWg/ZjooaD1ELGY9bChkPXYsTSkpfX1mdW5jdGlvbiBpU3QoYyxsKXt2YXIgYSxkO2Z1bmN0aW9uIGgoKXt2YXIgZj1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTty''@;'; put 'put ''ZXR1cm4gZiE9PWQmJihhPShkPWYpJiZmdW5jdGlvbiByU3QoYyxsKXtyZXR1cm4gZnVuY3Rpb24oYSl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhjLnNwYWNlLGMubG9jYWwsbC5jYWxsKHRoaXMsYSkpfX0oYyxmKSksYX1yZXR1cm4gaC5fdmFsdWU9bCxofWZ1bmN0aW9uIG9TdChjLGwpe3ZhciBh''@;'; put 'put ''LGQ7ZnVuY3Rpb24gaCgpe3ZhciBmPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmIT09ZCYmKGE9KGQ9ZikmJmZ1bmN0aW9uIG5TdChjLGwpe3JldHVybiBmdW5jdGlvbihhKXt0aGlzLnNldEF0dHJpYnV0ZShjLGwuY2FsbCh0aGlzLGEpKX19KGMsZikpLGF9cmV0dXJuIGguX3Zh''@;'; put 'put ''bHVlPWwsaH1mdW5jdGlvbiBzU3QoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXtvdGUodGhpcyxjKS5kZWxheT0rbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGxTdChjLGwpe3JldHVybiBsPStsLGZ1bmN0aW9uKCl7b3RlKHRoaXMsYykuZGVsYXk9bH19ZnVuY3Rpb24gdVN0KGMs''@;'; put 'put ''bCl7cmV0dXJuIGZ1bmN0aW9uKCl7aTQodGhpcyxjKS5kdXJhdGlvbj0rbC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIGRTdChjLGwpe3JldHVybiBsPStsLGZ1bmN0aW9uKCl7aTQodGhpcyxjKS5kdXJhdGlvbj1sfX12YXIgRVN0PVo5LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcjtm''@;'; put 'put ''dW5jdGlvbiBDOGUoYyl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShjKX19dmFyIFpTdD0wO2Z1bmN0aW9uIHM0KGMsbCxhLGQpe3RoaXMuX2dyb3Vwcz1jLHRoaXMuX3BhcmVudHM9bCx0aGlzLl9uYW1lPWEsdGhpcy5faWQ9ZH1mdW5jdGlvbiBmdGUoYyl7''@;'; put 'put ''cmV0dXJuIFo5KCkudHJhbnNpdGlvbihjKX1mdW5jdGlvbiBTOGUoKXtyZXR1cm4rK1pTdH12YXIgS2c9WjkucHJvdG90eXBlO3M0LnByb3RvdHlwZT1mdGUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpzNCxzZWxlY3Q6ZnVuY3Rpb24gTVN0KGMpe3ZhciBsPXRoaXMuX25hbWUsYT10aGlzLl9p''@;'; put 'put ''ZDsiZnVuY3Rpb24iIT10eXBlb2YgYyYmKGM9JGVlKGMpKTtmb3IodmFyIGQ9dGhpcy5fZ3JvdXBzLGg9ZC5sZW5ndGgsZj1uZXcgQXJyYXkoaCksdj0wO3Y8aDsrK3YpZm9yKHZhciBuZSxjZSxNPWRbdl0sRD1NLmxlbmd0aCxaPWZbdl09bmV3IEFycmF5KEQpLGJlPTA7YmU8RDsrK2JlKShu''@;'; put 'put ''ZT1NW2JlXSkmJihjZT1jLmNhbGwobmUsbmUuX19kYXRhX18sYmUsTSkpJiYoIl9fZGF0YV9fImluIG5lJiYoY2UuX19kYXRhX189bmUuX19kYXRhX18pLFpbYmVdPWNlLGROKFpbYmVdLGwsYSxiZSxaLGIzKG5lLGEpKSk7cmV0dXJuIG5ldyBzNChmLHRoaXMuX3BhcmVudHMsbCxhKX0sc2Vs''@;'; put 'put ''ZWN0QWxsOmZ1bmN0aW9uIHhTdChjKXt2YXIgbD10aGlzLl9uYW1lLGE9dGhpcy5faWQ7ImZ1bmN0aW9uIiE9dHlwZW9mIGMmJihjPVA2ZShjKSk7Zm9yKHZhciBkPXRoaXMuX2dyb3VwcyxoPWQubGVuZ3RoLGY9W10sdj1bXSxNPTA7TTxoOysrTSlmb3IodmFyIG5lLEQ9ZFtNXSxaPUQubGVu''@;'; put 'put ''Z3RoLGNlPTA7Y2U8WjsrK2NlKWlmKG5lPURbY2VdKXtmb3IodmFyIEVlLGJlPWMuY2FsbChuZSxuZS5fX2RhdGFfXyxjZSxEKSxCZT1iMyhuZSxhKSxxZT0wLG50PWJlLmxlbmd0aDtxZTxudDsrK3FlKShFZT1iZVtxZV0pJiZkTihFZSxsLGEscWUsYmUsQmUpO2YucHVzaChiZSksdi5wdXNo''@;'; put 'put ''KG5lKX1yZXR1cm4gbmV3IHM0KGYsdixsLGEpfSxzZWxlY3RDaGlsZDpLZy5zZWxlY3RDaGlsZCxzZWxlY3RDaGlsZHJlbjpLZy5zZWxlY3RDaGlsZHJlbixmaWx0ZXI6ZnVuY3Rpb24gdlN0KGMpeyJmdW5jdGlvbiIhPXR5cGVvZiBjJiYoYz1GNmUoYykpO2Zvcih2YXIgbD10aGlzLl9ncm91''@;'; put 'put ''cHMsYT1sLmxlbmd0aCxkPW5ldyBBcnJheShhKSxoPTA7aDxhOysraClmb3IodmFyIEQsZj1sW2hdLHY9Zi5sZW5ndGgsTT1kW2hdPVtdLFo9MDtaPHY7KytaKShEPWZbWl0pJiZjLmNhbGwoRCxELl9fZGF0YV9fLFosZikmJk0ucHVzaChEKTtyZXR1cm4gbmV3IHM0KGQsdGhpcy5fcGFyZW50''@;'; put 'put ''cyx0aGlzLl9uYW1lLHRoaXMuX2lkKX0sbWVyZ2U6ZnVuY3Rpb24gYlN0KGMpe2lmKGMuX2lkIT09dGhpcy5faWQpdGhyb3cgbmV3IEVycm9yO2Zvcih2YXIgbD10aGlzLl9ncm91cHMsYT1jLl9ncm91cHMsZD1sLmxlbmd0aCxmPU1hdGgubWluKGQsYS5sZW5ndGgpLHY9bmV3IEFycmF5KGQp''@;'; put 'put ''LE09MDtNPGY7KytNKWZvcih2YXIgYmUsRD1sW01dLFo9YVtNXSxuZT1ELmxlbmd0aCxjZT12W01dPW5ldyBBcnJheShuZSksRWU9MDtFZTxuZTsrK0VlKShiZT1EW0VlXXx8WltFZV0pJiYoY2VbRWVdPWJlKTtmb3IoO008ZDsrK00pdltNXT1sW01dO3JldHVybiBuZXcgczQodix0aGlzLl9w''@;'; put 'put ''YXJlbnRzLHRoaXMuX25hbWUsdGhpcy5faWQpfSxzZWxlY3Rpb246ZnVuY3Rpb24gVFN0KCl7cmV0dXJuIG5ldyBFU3QodGhpcy5fZ3JvdXBzLHRoaXMuX3BhcmVudHMpfSx0cmFuc2l0aW9uOmZ1bmN0aW9uIHpTdCgpe2Zvcih2YXIgYz10aGlzLl9uYW1lLGw9dGhpcy5faWQsYT1TOGUoKSxk''@;'; put 'put ''PXRoaXMuX2dyb3VwcyxoPWQubGVuZ3RoLGY9MDtmPGg7KytmKWZvcih2YXIgRCx2PWRbZl0sTT12Lmxlbmd0aCxaPTA7WjxNOysrWilpZihEPXZbWl0pe3ZhciBuZT1iMyhELGwpO2ROKEQsYyxhLFosdix7dGltZTpuZS50aW1lK25lLmRlbGF5K25lLmR1cmF0aW9uLGRlbGF5OjAsZHVyYXRp''@;'; put 'put ''b246bmUuZHVyYXRpb24sZWFzZTpuZS5lYXNlfSl9cmV0dXJuIG5ldyBzNChkLHRoaXMuX3BhcmVudHMsYyxhKX0sY2FsbDpLZy5jYWxsLG5vZGVzOktnLm5vZGVzLG5vZGU6S2cubm9kZSxzaXplOktnLnNpemUsZW1wdHk6S2cuZW1wdHksZWFjaDpLZy5lYWNoLG9uOmZ1bmN0aW9uIHdTdChj''@;'; put 'put ''LGwpe3ZhciBhPXRoaXMuX2lkO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/YjModGhpcy5ub2RlKCksYSkub24ub24oYyk6dGhpcy5lYWNoKGZ1bmN0aW9uIF9TdChjLGwsYSl7dmFyIGQsaCxmPWZ1bmN0aW9uIHlTdChjKXtyZXR1cm4oYysiIikudHJpbSgpLnNwbGl0KC9efFxzKy8pLmV2''@;'; put 'put ''ZXJ5KGZ1bmN0aW9uKGwpe3ZhciBhPWwuaW5kZXhPZigiLiIpO3JldHVybiBhPj0wJiYobD1sLnNsaWNlKDAsYSkpLCFsfHwic3RhcnQiPT09bH0pfShsKT9vdGU6aTQ7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHY9Zih0aGlzLGMpLE09di5vbjtNIT09ZCYmKGg9KGQ9TSkuY29weSgpKS5vbihs''@;'; put 'put ''LGEpLHYub249aH19KGEsYyxsKSl9LGF0dHI6ZnVuY3Rpb24gdFN0KGMsbCl7dmFyIGE9bk4oYyksZD0idHJhbnNmb3JtIj09PWE/bzhlOnc4ZTtyZXR1cm4gdGhpcy5hdHRyVHdlZW4oYywiZnVuY3Rpb24iPT10eXBlb2YgbD8oYS5sb2NhbD9lU3Q6UUN0KShhLGQsc3RlKHRoaXMsImF0dHIu''@;'; put 'put ''IitjLGwpKTpudWxsPT1sPyhhLmxvY2FsP3FDdDpLQ3QpKGEpOihhLmxvY2FsP0pDdDpYQ3QpKGEsZCxsKSl9LGF0dHJUd2VlbjpmdW5jdGlvbiBhU3QoYyxsKXt2YXIgYT0iYXR0ci4iK2M7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXJldHVybihhPXRoaXMudHdlZW4oYSkpJiZhLl92YWx1ZTtp''@;'; put 'put ''ZihudWxsPT1sKXJldHVybiB0aGlzLnR3ZWVuKGEsbnVsbCk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGwpdGhyb3cgbmV3IEVycm9yO3ZhciBkPW5OKGMpO3JldHVybiB0aGlzLnR3ZWVuKGEsKGQubG9jYWw/aVN0Om9TdCkoZCxsKSl9LHN0eWxlOmZ1bmN0aW9uIFJTdChjLGwsYSl7dmFyIGQ9''@;'; put 'put ''InRyYW5zZm9ybSI9PShjKz0iIik/VEN0Onc4ZTtyZXR1cm4gbnVsbD09bD90aGlzLnN0eWxlVHdlZW4oYyxmdW5jdGlvbiBBU3QoYyxsKXt2YXIgYSxkLGg7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGY9TXcodGhpcyxjKSx2PSh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KGMpLE13KHRoaXMs''@;'; put 'put ''YykpO3JldHVybiBmPT09dj9udWxsOmY9PT1hJiZ2PT09ZD9oOmg9bChhPWYsZD12KX19KGMsZCkpLm9uKCJlbmQuc3R5bGUuIitjLEM4ZShjKSk6ImZ1bmN0aW9uIj09dHlwZW9mIGw/dGhpcy5zdHlsZVR3ZWVuKGMsZnVuY3Rpb24gRFN0KGMsbCxhKXt2YXIgZCxoLGY7cmV0dXJuIGZ1bmN0''@;'; put 'put ''aW9uKCl7dmFyIHY9TXcodGhpcyxjKSxNPWEodGhpcyksRD1NKyIiO3JldHVybiBudWxsPT1NJiYodGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShjKSxEPU09TXcodGhpcyxjKSksdj09PUQ/bnVsbDp2PT09ZCYmRD09PWg/ZjooaD1ELGY9bChkPXYsTSkpfX0oYyxkLHN0ZSh0aGlzLCJzdHls''@;'; put 'put ''ZS4iK2MsbCkpKS5lYWNoKGZ1bmN0aW9uIElTdChjLGwpe3ZhciBhLGQsaCxNLGY9InN0eWxlLiIrbCx2PSJlbmQuIitmO3JldHVybiBmdW5jdGlvbigpe3ZhciBEPWk0KHRoaXMsYyksWj1ELm9uLG5lPW51bGw9PUQudmFsdWVbZl0/TXx8KE09QzhlKGwpKTp2b2lkIDA7KFohPT1hfHxoIT09''@;'; put 'put ''bmUpJiYoZD0oYT1aKS5jb3B5KCkpLm9uKHYsaD1uZSksRC5vbj1kfX0odGhpcy5faWQsYykpOnRoaXMuc3R5bGVUd2VlbihjLGZ1bmN0aW9uIGtTdChjLGwsYSl7dmFyIGQsZixoPWErIiI7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHY9TXcodGhpcyxjKTtyZXR1cm4gdj09PWg/bnVsbDp2PT09''@;'; put 'put ''ZD9mOmY9bChkPXYsYSl9fShjLGQsbCksYSkub24oImVuZC5zdHlsZS4iK2MsbnVsbCl9LHN0eWxlVHdlZW46ZnVuY3Rpb24gUFN0KGMsbCxhKXt2YXIgZD0ic3R5bGUuIisoYys9IiIpO2lmKGFyZ3VtZW50cy5sZW5ndGg8MilyZXR1cm4oZD10aGlzLnR3ZWVuKGQpKSYmZC5fdmFsdWU7aWYo''@;'; put 'put ''bnVsbD09bClyZXR1cm4gdGhpcy50d2VlbihkLG51bGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBsKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gdGhpcy50d2VlbihkLGZ1bmN0aW9uIE9TdChjLGwsYSl7dmFyIGQsaDtmdW5jdGlvbiBmKCl7dmFyIHY9bC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7''@;'; put 'put ''cmV0dXJuIHYhPT1oJiYoZD0oaD12KSYmZnVuY3Rpb24gTFN0KGMsbCxhKXtyZXR1cm4gZnVuY3Rpb24oZCl7dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShjLGwuY2FsbCh0aGlzLGQpLGEpfX0oYyx2LGEpKSxkfXJldHVybiBmLl92YWx1ZT1sLGZ9KGMsbCxhPz8iIikpfSx0ZXh0OmZ1bmN0aW9u''@;'; put 'put ''IE5TdChjKXtyZXR1cm4gdGhpcy50d2VlbigidGV4dCIsImZ1bmN0aW9uIj09dHlwZW9mIGM/ZnVuY3Rpb24gSFN0KGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBsPWModGhpcyk7dGhpcy50ZXh0Q29udGVudD1sPz8iIn19KHN0ZSh0aGlzLCJ0ZXh0IixjKSk6ZnVuY3Rpb24gRlN0KGMpe3Jl''@;'; put 'put ''dHVybiBmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9Y319KG51bGw9PWM/IiI6YysiIikpfSx0ZXh0VHdlZW46ZnVuY3Rpb24galN0KGMpe3ZhciBsPSJ0ZXh0IjtpZihhcmd1bWVudHMubGVuZ3RoPDEpcmV0dXJuKGw9dGhpcy50d2VlbihsKSkmJmwuX3ZhbHVlO2lmKG51bGw9PWMpcmV0''@;'; put 'put ''dXJuIHRoaXMudHdlZW4obCxudWxsKTtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMudHdlZW4obCxmdW5jdGlvbiBCU3QoYyl7dmFyIGwsYTtmdW5jdGlvbiBkKCl7dmFyIGg9Yy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIGghPT1hJiYo''@;'; put 'put ''bD0oYT1oKSYmZnVuY3Rpb24gVlN0KGMpe3JldHVybiBmdW5jdGlvbihsKXt0aGlzLnRleHRDb250ZW50PWMuY2FsbCh0aGlzLGwpfX0oaCkpLGx9cmV0dXJuIGQuX3ZhbHVlPWMsZH0oYykpfSxyZW1vdmU6ZnVuY3Rpb24gU1N0KCl7cmV0dXJuIHRoaXMub24oImVuZC5yZW1vdmUiLGZ1bmN0''@;'; put 'put ''aW9uIENTdChjKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbD10aGlzLnBhcmVudE5vZGU7Zm9yKHZhciBhIGluIHRoaXMuX190cmFuc2l0aW9uKWlmKCthIT09YylyZXR1cm47bCYmbC5yZW1vdmVDaGlsZCh0aGlzKX19KHRoaXMuX2lkKSl9LHR3ZWVuOmZ1bmN0aW9uIERDdChjLGwpe3ZhciBh''@;'; put 'put ''PXRoaXMuX2lkO2lmKGMrPSIiLGFyZ3VtZW50cy5sZW5ndGg8Mil7Zm9yKHZhciB2LGQ9YjModGhpcy5ub2RlKCksYSkudHdlZW4saD0wLGY9ZC5sZW5ndGg7aDxmOysraClpZigodj1kW2hdKS5uYW1lPT09YylyZXR1cm4gdi52YWx1ZTtyZXR1cm4gbnVsbH1yZXR1cm4gdGhpcy5lYWNoKChu''@;'; put 'put ''dWxsPT1sP0FDdDprQ3QpKGEsYyxsKSl9LGRlbGF5OmZ1bmN0aW9uIGNTdChjKXt2YXIgbD10aGlzLl9pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goKCJmdW5jdGlvbiI9PXR5cGVvZiBjP3NTdDpsU3QpKGwsYykpOmIzKHRoaXMubm9kZSgpLGwpLmRlbGF5fSxkdXJhdGlv''@;'; put 'put ''bjpmdW5jdGlvbiBoU3QoYyl7dmFyIGw9dGhpcy5faWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKCgiZnVuY3Rpb24iPT10eXBlb2YgYz91U3Q6ZFN0KShsLGMpKTpiMyh0aGlzLm5vZGUoKSxsKS5kdXJhdGlvbn0sZWFzZTpmdW5jdGlvbiBwU3QoYyl7dmFyIGw9dGhpcy5f''@;'; put 'put ''aWQ7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dGhpcy5lYWNoKGZ1bmN0aW9uIGZTdChjLGwpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBsKXRocm93IG5ldyBFcnJvcjtyZXR1cm4gZnVuY3Rpb24oKXtpNCh0aGlzLGMpLmVhc2U9bH19KGwsYykpOmIzKHRoaXMubm9kZSgpLGwpLmVhc2V9LGVh''@;'; put 'put ''c2VWYXJ5aW5nOmZ1bmN0aW9uIG1TdChjKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgYyl0aHJvdyBuZXcgRXJyb3I7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiBnU3QoYyxsKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYT1sLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZigiZnVuY3Rpb24iIT10''@;'; put 'put ''eXBlb2YgYSl0aHJvdyBuZXcgRXJyb3I7aTQodGhpcyxjKS5lYXNlPWF9fSh0aGlzLl9pZCxjKSl9LGVuZDpmdW5jdGlvbiBVU3QoKXt2YXIgYyxsLGE9dGhpcyxkPWEuX2lkLGg9YS5zaXplKCk7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGYsdil7dmFyIE09e3ZhbHVlOnZ9LEQ9e3Zh''@;'; put 'put ''bHVlOmZ1bmN0aW9uKCl7MD09LS1oJiZmKCl9fTthLmVhY2goZnVuY3Rpb24oKXt2YXIgWj1pNCh0aGlzLGQpLG5lPVoub247bmUhPT1jJiYoKGw9KGM9bmUpLmNvcHkoKSkuXy5jYW5jZWwucHVzaChNKSxsLl8uaW50ZXJydXB0LnB1c2goTSksbC5fLmVuZC5wdXNoKEQpKSxaLm9uPWx9KSww''@;'; put 'put ''PT09aCYmZigpfSl9LFtTeW1ib2wuaXRlcmF0b3JdOktnW1N5bWJvbC5pdGVyYXRvcl19O3ZhciBZU3Q9e3RpbWU6bnVsbCxkZWxheTowLGR1cmF0aW9uOjI1MCxlYXNlOmZ1bmN0aW9uIFdTdChjKXtyZXR1cm4oKGMqPTIpPD0xP2MqYypjOihjLT0yKSpjKmMrMikvMn19O2Z1bmN0aW9uIEdT''@;'; put 'put ''dChjLGwpe2Zvcih2YXIgYTshKGE9Yy5fX3RyYW5zaXRpb24pfHwhKGE9YVtsXSk7KWlmKCEoYz1jLnBhcmVudE5vZGUpKXRocm93IG5ldyBFcnJvcihgdHJhbnNpdGlvbiAke2x9IG5vdCBmb3VuZGApO3JldHVybiBhfVo5LnByb3RvdHlwZS5pbnRlcnJ1cHQ9ZnVuY3Rpb24gTUN0KGMpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtoTih0aGlzLGMpfSl9LFo5LnByb3RvdHlwZS50cmFuc2l0aW9uPWZ1bmN0aW9uICRTdChjKXt2YXIgbCxhO2MgaW5zdGFuY2VvZiBzND8obD1jLl9pZCxjPWMuX25hbWUpOihsPVM4ZSgpLChhPVlTdCkudGltZT1ldGUoKSxjPW51bGw9PWM/bnVs''@;'; put 'put ''bDpjKyIiKTtmb3IodmFyIGQ9dGhpcy5fZ3JvdXBzLGg9ZC5sZW5ndGgsZj0wO2Y8aDsrK2YpZm9yKHZhciBELHY9ZFtmXSxNPXYubGVuZ3RoLFo9MDtaPE07KytaKShEPXZbWl0pJiZkTihELGMsbCxaLHYsYXx8R1N0KEQsbCkpO3JldHVybiBuZXcgczQoZCx0aGlzLl9wYXJlbnRzLGMsbCl9''@;'; put 'put ''O3ZhciBLU3Q9W251bGxdO2NvbnN0IHB0ZT17Y2FwdHVyZTohMCxwYXNzaXZlOiExfTtmdW5jdGlvbiBndGUoYyl7Yy5wcmV2ZW50RGVmYXVsdCgpLGMuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCl9ZnVuY3Rpb24gTThlKGMpe3JldHVybigoYz1NYXRoLmV4cChjKSkrMS9jKS8yfWNvbnN0''@;'; put 'put ''IG5NdD1mdW5jdGlvbiBjKGwsYSxkKXtmdW5jdGlvbiBoKGYsdil7dmFyIG50LGx0LE09ZlswXSxEPWZbMV0sWj1mWzJdLGJlPXZbMl0sRWU9dlswXS1NLEJlPXZbMV0tRCxxZT1FZSpFZStCZSpCZTtpZihxZTwxZS0xMilsdD1NYXRoLmxvZyhiZS9aKS9sLG50PWZ1bmN0aW9uKHhuKXtyZXR1''@;'; put 'put ''cm5bTSt4bipFZSxEK3huKkJlLFoqTWF0aC5leHAobCp4bipsdCldfTtlbHNle3ZhciBtdD1NYXRoLnNxcnQocWUpLEp0PShiZSpiZS1aKlorZCpxZSkvKDIqWiphKm10KSx5bj0oYmUqYmUtWipaLWQqcWUpLygyKmJlKmEqbXQpLENuPU1hdGgubG9nKE1hdGguc3FydChKdCpKdCsxKS1KdCks''@;'; put 'put ''dG49TWF0aC5sb2coTWF0aC5zcXJ0KHluKnluKzEpLXluKTtsdD0odG4tQ24pL2wsbnQ9ZnVuY3Rpb24oeG4pe3ZhciBRbj14bipsdCx5aT1NOGUoQ24pLHlyPVovKGEqbXQpKih5aSpmdW5jdGlvbiB0TXQoYyl7cmV0dXJuKChjPU1hdGguZXhwKDIqYykpLTEpLyhjKzEpfShsKlFuK0NuKS1m''@;'; put 'put ''dW5jdGlvbiBlTXQoYyl7cmV0dXJuKChjPU1hdGguZXhwKGMpKS0xL2MpLzJ9KENuKSk7cmV0dXJuW00reXIqRWUsRCt5cipCZSxaKnlpL004ZShsKlFuK0NuKV19fXJldHVybiBudC5kdXJhdGlvbj0xZTMqbHQqbC9NYXRoLlNRUlQyLG50fXJldHVybiBoLnJobz1mdW5jdGlvbihmKXt2YXIg''@;'; put 'put ''dj1NYXRoLm1heCguMDAxLCtmKSxNPXYqdjtyZXR1cm4gYyh2LE0sTSpNKX0saH0oTWF0aC5TUVJUMiwyLDQpO2Z1bmN0aW9uIEs5KGMsbCl7aWYoYz1mdW5jdGlvbiByTXQoYyl7bGV0IGw7Zm9yKDtsPWMuc291cmNlRXZlbnQ7KWM9bDtyZXR1cm4gY30oYyksdm9pZCAwPT09bCYmKGw9Yy5j''@;'; put 'put ''dXJyZW50VGFyZ2V0KSxsKXt2YXIgYT1sLm93bmVyU1ZHRWxlbWVudHx8bDtpZihhLmNyZWF0ZVNWR1BvaW50KXt2YXIgZD1hLmNyZWF0ZVNWR1BvaW50KCk7cmV0dXJuIGQueD1jLmNsaWVudFgsZC55PWMuY2xpZW50WSxbKGQ9ZC5tYXRyaXhUcmFuc2Zvcm0obC5nZXRTY3JlZW5DVE0oKS5p''@;'; put 'put ''bnZlcnNlKCkpKS54LGQueV19aWYobC5nZXRCb3VuZGluZ0NsaWVudFJlY3Qpe3ZhciBoPWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW2MuY2xpZW50WC1oLmxlZnQtbC5jbGllbnRMZWZ0LGMuY2xpZW50WS1oLnRvcC1sLmNsaWVudFRvcF19fXJldHVybltjLnBhZ2VYLGMucGFn''@;'; put 'put ''ZVldfWNvbnN0IF9OPWM9PigpPT5jO2Z1bmN0aW9uIGlNdChjLHtzb3VyY2VFdmVudDpsLHRhcmdldDphLHRyYW5zZm9ybTpkLGRpc3BhdGNoOmh9KXtPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLHt0eXBlOnt2YWx1ZTpjLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSxzb3Vy''@;'; put 'put ''Y2VFdmVudDp7dmFsdWU6bCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0sdGFyZ2V0Ont2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSx0cmFuc2Zvcm06e3ZhbHVlOmQsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9LF86e3ZhbHVlOmh9fSl9ZnVuY3Rp''@;'; put 'put ''b24gcWcoYyxsLGEpe3RoaXMuaz1jLHRoaXMueD1sLHRoaXMueT1hfXFnLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cWcsc2NhbGU6ZnVuY3Rpb24oYyl7cmV0dXJuIDE9PT1jP3RoaXM6bmV3IHFnKHRoaXMuaypjLHRoaXMueCx0aGlzLnkpfSx0cmFuc2xhdGU6ZnVuY3Rpb24oYyxsKXtyZXR1''@;'; put 'put ''cm4gMD09PWMmMD09PWw/dGhpczpuZXcgcWcodGhpcy5rLHRoaXMueCt0aGlzLmsqYyx0aGlzLnkrdGhpcy5rKmwpfSxhcHBseTpmdW5jdGlvbihjKXtyZXR1cm5bY1swXSp0aGlzLmsrdGhpcy54LGNbMV0qdGhpcy5rK3RoaXMueV19LGFwcGx5WDpmdW5jdGlvbihjKXtyZXR1cm4gYyp0aGlz''@;'; put 'put ''LmsrdGhpcy54fSxhcHBseVk6ZnVuY3Rpb24oYyl7cmV0dXJuIGMqdGhpcy5rK3RoaXMueX0saW52ZXJ0OmZ1bmN0aW9uKGMpe3JldHVyblsoY1swXS10aGlzLngpL3RoaXMuaywoY1sxXS10aGlzLnkpL3RoaXMua119LGludmVydFg6ZnVuY3Rpb24oYyl7cmV0dXJuKGMtdGhpcy54KS90aGlz''@;'; put 'put ''Lmt9LGludmVydFk6ZnVuY3Rpb24oYyl7cmV0dXJuKGMtdGhpcy55KS90aGlzLmt9LHJlc2NhbGVYOmZ1bmN0aW9uKGMpe3JldHVybiBjLmNvcHkoKS5kb21haW4oYy5yYW5nZSgpLm1hcCh0aGlzLmludmVydFgsdGhpcykubWFwKGMuaW52ZXJ0LGMpKX0scmVzY2FsZVk6ZnVuY3Rpb24oYyl7''@;'; put 'put ''cmV0dXJuIGMuY29weSgpLmRvbWFpbihjLnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WSx0aGlzKS5tYXAoYy5pbnZlcnQsYykpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIit0aGlzLngrIiwiK3RoaXMueSsiKSBzY2FsZSgiK3RoaXMuaysiKSJ9fTt2YXIgd049bmV3''@;'; put 'put ''IHFnKDEsMCwwKTtmdW5jdGlvbiBDTihjKXtmb3IoOyFjLl9fem9vbTspaWYoIShjPWMucGFyZW50Tm9kZSkpcmV0dXJuIHdOO3JldHVybiBjLl9fem9vbX1mdW5jdGlvbiBtdGUoYyl7Yy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBFQShjKXtjLnByZXZlbnREZWZhdWx0''@;'; put 'put ''KCksYy5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX1mdW5jdGlvbiBvTXQoYyl7cmV0dXJuIShjLmN0cmxLZXkmJiJ3aGVlbCIhPT1jLnR5cGV8fGMuYnV0dG9uKX1mdW5jdGlvbiBhTXQoKXt2YXIgYz10aGlzO3JldHVybiBjIGluc3RhbmNlb2YgU1ZHRWxlbWVudD8oYz1jLm93bmVyU1ZH''@;'; put 'put ''RWxlbWVudHx8YykuaGFzQXR0cmlidXRlKCJ2aWV3Qm94Iik/W1soYz1jLnZpZXdCb3guYmFzZVZhbCkueCxjLnldLFtjLngrYy53aWR0aCxjLnkrYy5oZWlnaHRdXTpbWzAsMF0sW2Mud2lkdGguYmFzZVZhbC52YWx1ZSxjLmhlaWdodC5iYXNlVmFsLnZhbHVlXV06W1swLDBdLFtjLmNsaWVu''@;'; put 'put ''dFdpZHRoLGMuY2xpZW50SGVpZ2h0XV19ZnVuY3Rpb24geDhlKCl7cmV0dXJuIHRoaXMuX196b29tfHx3Tn1mdW5jdGlvbiBzTXQoYyl7cmV0dXJuLWMuZGVsdGFZKigxPT09Yy5kZWx0YU1vZGU/LjA1OmMuZGVsdGFNb2RlPzE6LjAwMikqKGMuY3RybEtleT8xMDoxKX1mdW5jdGlvbiBsTXQo''@;'; put 'put ''KXtyZXR1cm4gbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzfHwib250b3VjaHN0YXJ0ImluIHRoaXN9ZnVuY3Rpb24gY010KGMsbCxhKXt2YXIgZD1jLmludmVydFgobFswXVswXSktYVswXVswXSxoPWMuaW52ZXJ0WChsWzFdWzBdKS1hWzFdWzBdLGY9Yy5pbnZlcnRZKGxbMF1bMV0pLWFbMF1b''@;'; put 'put ''MV0sdj1jLmludmVydFkobFsxXVsxXSktYVsxXVsxXTtyZXR1cm4gYy50cmFuc2xhdGUoaD5kPyhkK2gpLzI6TWF0aC5taW4oMCxkKXx8TWF0aC5tYXgoMCxoKSx2PmY/KGYrdikvMjpNYXRoLm1pbigwLGYpfHxNYXRoLm1heCgwLHYpKX1mdW5jdGlvbiBFOGUoYyl7dmFyIGw9e30sYT1jLm5v''@;'; put 'put ''ZGUoKS5ub2RlTmFtZTtsLnRhZz1hLCIjdGV4dCI9PWE/bC50ZXh0PWMudGV4dCgpOiIjY29tbWVudCI9PWEmJihsLmNvbW1lbnQ9Yy50ZXh0KCkpLGwuYXR0cmlidXRlcz17fTt2YXIgZD1jLm5vZGUoKS5hdHRyaWJ1dGVzO2lmKGQpZm9yKHZhciBoPTA7aDxkLmxlbmd0aDtoKyspe3ZhciBm''@;'; put 'put ''PWRbaF07bC5hdHRyaWJ1dGVzW2YubmFtZV09Zi52YWx1ZX12YXIgbmUsRD1jLm5vZGUoKS50cmFuc2Zvcm07aWYoRCYmMCE9RC5iYXNlVmFsLm51bWJlck9mSXRlbXMpe3ZhciBaPUQuYmFzZVZhbC5jb25zb2xpZGF0ZSgpLm1hdHJpeDtsLnRyYW5zbGF0aW9uPXt4OlouZSx5OlouZn0sbC5z''@;'; put 'put ''Y2FsZT1aLmF9aWYoImVsbGlwc2UiPT1hJiYobC5jZW50ZXI9e3g6bC5hdHRyaWJ1dGVzLmN4LHk6bC5hdHRyaWJ1dGVzLmN5fSksInBvbHlnb24iPT1hKXt2YXIgY2U9KG5lPWMuYXR0cigicG9pbnRzIikuc3BsaXQoIiAiKSkubWFwKGZ1bmN0aW9uKEp0KXtyZXR1cm4gSnQuc3BsaXQoIiwi''@;'; put 'put ''KVswXX0pLGJlPW5lLm1hcChmdW5jdGlvbihKdCl7cmV0dXJuIEp0LnNwbGl0KCIsIilbMV19KSxFZT1NYXRoLm1pbi5hcHBseShudWxsLGNlKSxCZT1NYXRoLm1heC5hcHBseShudWxsLGNlKSxxZT1NYXRoLm1pbi5hcHBseShudWxsLGJlKSxudD1NYXRoLm1heC5hcHBseShudWxsLGJlKTts''@;'; put 'put ''LmJib3g9e3g6RWUseTpxZSx3aWR0aDpCZS1FZSxoZWlnaHQ6bnQtcWV9LGwuY2VudGVyPXt4OihFZStCZSkvMix5OihxZStudCkvMn19InBhdGgiPT1hJiYoKG5lPWMuYXR0cigiZCIpLnNwbGl0KC9bQS1aIF0vKSkuc2hpZnQoKSxjZT1uZS5tYXAoZnVuY3Rpb24oR24pe3JldHVybitHbi5z''@;'; put 'put ''cGxpdCgiLCIpWzBdfSksYmU9bmUubWFwKGZ1bmN0aW9uKEduKXtyZXR1cm4rR24uc3BsaXQoIiwiKVsxXX0pLEVlPU1hdGgubWluLmFwcGx5KG51bGwsY2UpLEJlPU1hdGgubWF4LmFwcGx5KG51bGwsY2UpLHFlPU1hdGgubWluLmFwcGx5KG51bGwsYmUpLG50PU1hdGgubWF4LmFwcGx5KG51''@;'; put 'put ''bGwsYmUpLGwuYmJveD17eDpFZSx5OnFlLHdpZHRoOkJlLUVlLGhlaWdodDpudC1xZX0sbC5jZW50ZXI9e3g6KEVlK0JlKS8yLHk6KHFlK250KS8yfSxsLnRvdGFsTGVuZ3RoPWMubm9kZSgpLmdldFRvdGFsTGVuZ3RoKCkpO3JldHVybiJ0ZXh0Ij09YSYmKGwuY2VudGVyPXt4OmMuYXR0cigi''@;'; put 'put ''eCIpLHk6Yy5hdHRyKCJ5Iil9KSwiI3RleHQiPT1hP2wudGV4dD1jLnRleHQoKToiI2NvbW1lbnQiPT1hJiYobC5jb21tZW50PWMudGV4dCgpKSxsfWZ1bmN0aW9uIHE5KGMpe3ZhciBsPUU4ZShjKTtyZXR1cm4gbC5jaGlsZHJlbj1bXSxKZWUoYy5ub2RlKCkuY2hpbGROb2RlcykuZWFjaChm''@;'; put 'put ''dW5jdGlvbigpe3ZhciBkPXE5KHdzKHRoaXMpKTtkLnBhcmVudD1sLGwuY2hpbGRyZW4ucHVzaChkKX0pLGx9ZnVuY3Rpb24gdnRlKGMpe3JldHVybiIjdGV4dCI9PWMudGFnP2RvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKToiI2NvbW1lbnQiPT1jLnRhZz9kb2N1bWVudC5jcmVhdGVDb21t''@;'; put 'put ''ZW50KGMuY29tbWVudCk6ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsYy50YWcpfWZ1bmN0aW9uIGJ0ZShjKXt2YXIgbD12dGUoYyksYT13cyhsKSxkPWMuYXR0cmlidXRlcztmb3IodmFyIGggb2YgT2JqZWN0LmtleXMoZCkpYS5hdHRyKGgs''@;'; put 'put ''ZFtoXSk7cmV0dXJuIGx9ZnVuY3Rpb24gVDhlKGMsbCl7dmFyIGE9d3MoYy5ub2RlKCkucGFyZW50Tm9kZSksZD1idGUobCksaD1hLmluc2VydChmdW5jdGlvbigpe3JldHVybiBkfSxmdW5jdGlvbigpe3JldHVybiBjLm5vZGUoKX0pO3JldHVybiBjLnJlbW92ZSgpLGh9ZnVuY3Rpb24geXRl''@;'; put 'put ''KGMsbCl7IWZ1bmN0aW9uIGRNdChjLGwpe2MuZGF0dW0obCksYy5kYXRhKFtsXSxmdW5jdGlvbihhKXtyZXR1cm4gYS5rZXl9KX0oYyxsKSxKZWUoYy5ub2RlKCkuY2hpbGROb2RlcykuZWFjaChmdW5jdGlvbihkLGgpe3l0ZSh3cyh0aGlzKSxsLmNoaWxkcmVuW2hdKX0pfWZ1bmN0aW9uIFRB''@;'; put 'put ''KGMsbD0wKXt2YXIgYT13cyh0aGlzKSxoPWMuYXR0cmlidXRlcyxmPWEubm9kZSgpLmF0dHJpYnV0ZXM7aWYoZilmb3IodmFyIHY9MDt2PGYubGVuZ3RoO3YrKyl7dmFyIE09Zlt2XSxEPU0ubmFtZTtpZigieG1sbnMiIT1ELnNwbGl0KCI6IilbMF0mJk0ubmFtZXNwYWNlVVJJKXt2YXIgWj1N''@;'; put 'put ''Lm5hbWVzcGFjZVVSSS5zcGxpdCgiLyIpO0Q9WltaLmxlbmd0aC0xXSsiOiIrRH1EIGluIGh8fChoW0RdPW51bGwpfWZvcih2YXIgY2Ugb2YgT2JqZWN0LmtleXMoaCkpYS5hdHRyKGNlLGhbY2VdKTtjLnRleHQmJmEudGV4dChjLnRleHQpLGZ1bmN0aW9uIGhNdChjLGwpe3ZhciBhPWMuc2Vs''@;'; put 'put ''ZWN0QWxsKGZ1bmN0aW9uKCl7cmV0dXJuIGMubm9kZSgpLmNoaWxkTm9kZXN9KSxkPShhPWEuZGF0YShmdW5jdGlvbih2KXtyZXR1cm4gdi5jaGlsZHJlbn0sZnVuY3Rpb24odil7cmV0dXJuIHYudGFnKyItIitsfSkpLmVudGVyKCkuYXBwZW5kKGZ1bmN0aW9uKHYpe3JldHVybiB2dGUodil9''@;'; put 'put ''KSxoPWEuZXhpdCgpO2g9aC5yZW1vdmUoKSxhPWQubWVyZ2UoYSk7dmFyIGY9e307YS5lYWNoKGZ1bmN0aW9uKHYpe3ZhciBNPXYudGFnO251bGw9PWZbTV0mJihmW01dPTApO3ZhciBEPWZbTV0rKztUQS5jYWxsKHRoaXMsdixEKX0pfShhLGwpfWZ1bmN0aW9uIEE4ZShjLGwpe3ZhciB2LGE9''@;'; put 'put ''bD9sLmxlbmd0aDowLGQ9Yz9NYXRoLm1pbihhLGMubGVuZ3RoKTowLGg9bmV3IEFycmF5KGQpLGY9bmV3IEFycmF5KGEpO2Zvcih2PTA7djxkOysrdiloW3ZdPVNOKGNbdl0sbFt2XSk7Zm9yKDt2PGE7Kyt2KWZbdl09bFt2XTtyZXR1cm4gZnVuY3Rpb24oTSl7Zm9yKHY9MDt2PGQ7Kyt2KWZb''@;'; put 'put ''dl09aFt2XShNKTtyZXR1cm4gZn19ZnVuY3Rpb24gZk10KGMsbCl7dmFyIGE9bmV3IERhdGU7cmV0dXJuIGM9K2MsbD0rbCxmdW5jdGlvbihkKXtyZXR1cm4gYS5zZXRUaW1lKGMqKDEtZCkrbCpkKSxhfX1mdW5jdGlvbiBwTXQoYyxsKXt2YXIgaCxhPXt9LGQ9e307Zm9yKGggaW4obnVsbD09''@;'; put 'put ''PWN8fCJvYmplY3QiIT10eXBlb2YgYykmJihjPXt9KSwobnVsbD09PWx8fCJvYmplY3QiIT10eXBlb2YgbCkmJihsPXt9KSxsKWggaW4gYz9hW2hdPVNOKGNbaF0sbFtoXSk6ZFtoXT1sW2hdO3JldHVybiBmdW5jdGlvbihmKXtmb3IoaCBpbiBhKWRbaF09YVtoXShmKTtyZXR1cm4gZH19ZnVu''@;'; put 'put ''Y3Rpb24gZ010KGMsbCl7bHx8KGw9W10pO3ZhciBoLGE9Yz9NYXRoLm1pbihsLmxlbmd0aCxjLmxlbmd0aCk6MCxkPWwuc2xpY2UoKTtyZXR1cm4gZnVuY3Rpb24oZil7Zm9yKGg9MDtoPGE7KytoKWRbaF09Y1toXSooMS1mKStsW2hdKmY7cmV0dXJuIGR9fWZ1bmN0aW9uIFNOKGMsbCl7dmFy''@;'; put 'put ''IGQsYT10eXBlb2YgbDtyZXR1cm4gbnVsbD09bHx8ImJvb2xlYW4iPT09YT91dGUobCk6KCJudW1iZXIiPT09YT9vNDoic3RyaW5nIj09PWE/KGQ9WTkobCkpPyhsPWQseU4pOl84ZTpsIGluc3RhbmNlb2YgWTk/eU46bCBpbnN0YW5jZW9mIERhdGU/Zk10OmZ1bmN0aW9uIG1NdChjKXtyZXR1''@;'; put 'put ''cm4gQXJyYXlCdWZmZXIuaXNWaWV3KGMpJiYhKGMgaW5zdGFuY2VvZiBEYXRhVmlldyl9KGwpP2dNdDpBcnJheS5pc0FycmF5KGwpP0E4ZToiZnVuY3Rpb24iIT10eXBlb2YgbC52YWx1ZU9mJiYiZnVuY3Rpb24iIT10eXBlb2YgbC50b1N0cmluZ3x8aXNOYU4obCk/cE10Om80KShjLGwpfWZ1''@;'; put 'put ''bmN0aW9uIGs4ZSgpe3ZhciBjPXRoaXMsZD13cyh0aGlzLl9zZWxlY3Rpb24ubm9kZSgpLnF1ZXJ5U2VsZWN0b3IoInN2ZyIpKTtpZigwPT1kLnNpemUoKSlyZXR1cm4gdGhpczt0aGlzLl96b29tU2VsZWN0aW9uPWQ7dmFyIGg9ZnVuY3Rpb24gdU10KCl7dmFyIG5lLGNlLGJlLGM9b010LGw9''@;'; put 'put ''YU10LGE9Y010LGQ9c010LGg9bE10LGY9WzAsMS8wXSx2PVtbLTEvMCwtMS8wXSxbMS8wLDEvMF1dLE09MjUwLEQ9bk10LFo9UWVlKCJzdGFydCIsInpvb20iLCJlbmQiKSxFZT01MDAsQmU9MTUwLHFlPTAsbnQ9MTA7ZnVuY3Rpb24gbHQoUG4pe1BuLnByb3BlcnR5KCJfX3pvb20iLHg4ZSku''@;'; put 'put ''b24oIndoZWVsLnpvb20iLFFuLHtwYXNzaXZlOiExfSkub24oIm1vdXNlZG93bi56b29tIix5aSkub24oImRibGNsaWNrLnpvb20iLHlyKS5maWx0ZXIoaCkub24oInRvdWNoc3RhcnQuem9vbSIsR24pLm9uKCJ0b3VjaG1vdmUuem9vbSIsaWkpLm9uKCJ0b3VjaGVuZC56b29tIHRvdWNoY2Fu''@;'; put 'put ''Y2VsLnpvb20iLF9pKS5zdHlsZSgiLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIiwicmdiYSgwLDAsMCwwKSIpfWZ1bmN0aW9uIG10KFBuLGpyKXtyZXR1cm4oanI9TWF0aC5tYXgoZlswXSxNYXRoLm1pbihmWzFdLGpyKSkpPT09UG4uaz9QbjpuZXcgcWcoanIsUG4ueCxQbi55KX1mdW5j''@;'; put 'put ''dGlvbiBKdChQbixqcixYbil7dmFyIElyPWpyWzBdLVhuWzBdKlBuLmssJHI9anJbMV0tWG5bMV0qUG4uaztyZXR1cm4gSXI9PT1Qbi54JiYkcj09PVBuLnk/UG46bmV3IHFnKFBuLmssSXIsJHIpfWZ1bmN0aW9uIHluKFBuKXtyZXR1cm5bKCtQblswXVswXSsgK1BuWzFdWzBdKS8yLCgrUG5b''@;'; put 'put ''MF1bMV0rICtQblsxXVsxXSkvMl19ZnVuY3Rpb24gQ24oUG4sanIsWG4sSXIpe1BuLm9uKCJzdGFydC56b29tIixmdW5jdGlvbigpe3RuKHRoaXMsYXJndW1lbnRzKS5ldmVudChJcikuc3RhcnQoKX0pLm9uKCJpbnRlcnJ1cHQuem9vbSBlbmQuem9vbSIsZnVuY3Rpb24oKXt0bih0aGlzLGFy''@;'; put 'put ''Z3VtZW50cykuZXZlbnQoSXIpLmVuZCgpfSkudHdlZW4oInpvb20iLGZ1bmN0aW9uKCl7dmFyICRyPXRoaXMsd2k9YXJndW1lbnRzLFFpPXRuKCRyLHdpKS5ldmVudChJciksdnQ9bC5hcHBseSgkcix3aSksTnQ9bnVsbD09WG4/eW4odnQpOiJmdW5jdGlvbiI9PXR5cGVvZiBYbj9Ybi5hcHBs''@;'; put 'put ''eSgkcix3aSk6WG4sV3Q9TWF0aC5tYXgodnRbMV1bMF0tdnRbMF1bMF0sdnRbMV1bMV0tdnRbMF1bMV0pLGduPSRyLl9fem9vbSwkbj0iZnVuY3Rpb24iPT10eXBlb2YganI/anIuYXBwbHkoJHIsd2kpOmpyLGhyPUQoZ24uaW52ZXJ0KE50KS5jb25jYXQoV3QvZ24uayksJG4uaW52ZXJ0KE50''@;'; put 'put ''KS5jb25jYXQoV3QvJG4uaykpO3JldHVybiBmdW5jdGlvbihVcil7aWYoMT09PVVyKVVyPSRuO2Vsc2V7dmFyIFlyPWhyKFVyKSxOaT1XdC9ZclsyXTtVcj1uZXcgcWcoTmksTnRbMF0tWXJbMF0qTmksTnRbMV0tWXJbMV0qTmkpfVFpLnpvb20obnVsbCxVcil9fSl9ZnVuY3Rpb24gdG4oUG4s''@;'; put 'put ''anIsWG4pe3JldHVybiFYbiYmUG4uX196b29taW5nfHxuZXcgeG4oUG4sanIpfWZ1bmN0aW9uIHhuKFBuLGpyKXt0aGlzLnRoYXQ9UG4sdGhpcy5hcmdzPWpyLHRoaXMuYWN0aXZlPTAsdGhpcy5zb3VyY2VFdmVudD1udWxsLHRoaXMuZXh0ZW50PWwuYXBwbHkoUG4sanIpLHRoaXMudGFwcz0w''@;'; put 'put ''fWZ1bmN0aW9uIFFuKFBuLC4uLmpyKXtpZihjLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIFhuPXRuKHRoaXMsanIpLmV2ZW50KFBuKSxJcj10aGlzLl9fem9vbSwkcj1NYXRoLm1heChmWzBdLE1hdGgubWluKGZbMV0sSXIuaypNYXRoLnBvdygyLGQuYXBwbHkodGhpcyxhcmd1bWVudHMp''@;'; put 'put ''KSkpLHdpPUs5KFBuKTtpZihYbi53aGVlbCkoWG4ubW91c2VbMF1bMF0hPT13aVswXXx8WG4ubW91c2VbMF1bMV0hPT13aVsxXSkmJihYbi5tb3VzZVsxXT1Jci5pbnZlcnQoWG4ubW91c2VbMF09d2kpKSxjbGVhclRpbWVvdXQoWG4ud2hlZWwpO2Vsc2V7aWYoSXIuaz09PSRyKXJldHVybjtY''@;'; put 'put ''bi5tb3VzZT1bd2ksSXIuaW52ZXJ0KHdpKV0saE4odGhpcyksWG4uc3RhcnQoKX1FQShQbiksWG4ud2hlZWw9c2V0VGltZW91dChmdW5jdGlvbiBRaSgpe1huLndoZWVsPW51bGwsWG4uZW5kKCl9LEJlKSxYbi56b29tKCJtb3VzZSIsYShKdChtdChJciwkciksWG4ubW91c2VbMF0sWG4ubW91''@;'; put 'put ''c2VbMV0pLFhuLmV4dGVudCx2KSl9fWZ1bmN0aW9uIHlpKFBuLC4uLmpyKXtpZighYmUmJmMuYXBwbHkodGhpcyxhcmd1bWVudHMpKXt2YXIgWG49UG4uY3VycmVudFRhcmdldCxJcj10bih0aGlzLGpyLCEwKS5ldmVudChQbiksJHI9d3MoUG4udmlldykub24oIm1vdXNlbW92ZS56b29tIixm''@;'; put 'put ''dW5jdGlvbiBOdChnbil7aWYoRUEoZ24pLCFJci5tb3ZlZCl7dmFyICRuPWduLmNsaWVudFgtUWksaHI9Z24uY2xpZW50WS12dDtJci5tb3ZlZD0kbiokbitocipocj5xZX1Jci5ldmVudChnbikuem9vbSgibW91c2UiLGEoSnQoSXIudGhhdC5fX3pvb20sSXIubW91c2VbMF09SzkoZ24sWG4p''@;'; put 'put ''LElyLm1vdXNlWzFdKSxJci5leHRlbnQsdikpfSwhMCkub24oIm1vdXNldXAuem9vbSIsZnVuY3Rpb24gV3QoZ24peyRyLm9uKCJtb3VzZW1vdmUuem9vbSBtb3VzZXVwLnpvb20iLG51bGwpLGZ1bmN0aW9uIEpTdChjLGwpe3ZhciBhPWMuZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGQ9d3Mo''@;'; put 'put ''Yykub24oImRyYWdzdGFydC5kcmFnIixudWxsKTtsJiYoZC5vbigiY2xpY2suZHJhZyIsZ3RlLHB0ZSksc2V0VGltZW91dChmdW5jdGlvbigpe2Qub24oImNsaWNrLmRyYWciLG51bGwpfSwwKSksIm9uc2VsZWN0c3RhcnQiaW4gYT9kLm9uKCJzZWxlY3RzdGFydC5kcmFnIixudWxsKTooYS5z''@;'; put 'put ''dHlsZS5Nb3pVc2VyU2VsZWN0PWEuX19ub3NlbGVjdCxkZWxldGUgYS5fX25vc2VsZWN0KX0oZ24udmlldyxJci5tb3ZlZCksRUEoZ24pLElyLmV2ZW50KGduKS5lbmQoKX0sITApLHdpPUs5KFBuLFhuKSxRaT1Qbi5jbGllbnRYLHZ0PVBuLmNsaWVudFk7KGZ1bmN0aW9uIFhTdChjKXt2YXIg''@;'; put 'put ''bD1jLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxhPXdzKGMpLm9uKCJkcmFnc3RhcnQuZHJhZyIsZ3RlLHB0ZSk7Im9uc2VsZWN0c3RhcnQiaW4gbD9hLm9uKCJzZWxlY3RzdGFydC5kcmFnIixndGUscHRlKToobC5fX25vc2VsZWN0PWwuc3R5bGUuTW96VXNlclNlbGVjdCxsLnN0eWxlLk1v''@;'; put 'put ''elVzZXJTZWxlY3Q9Im5vbmUiKX0pKFBuLnZpZXcpLG10ZShQbiksSXIubW91c2U9W3dpLHRoaXMuX196b29tLmludmVydCh3aSldLGhOKHRoaXMpLElyLnN0YXJ0KCl9fWZ1bmN0aW9uIHlyKFBuLC4uLmpyKXtpZihjLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIFhuPXRoaXMuX196b29t''@;'; put 'put ''LElyPUs5KFBuLmNoYW5nZWRUb3VjaGVzP1BuLmNoYW5nZWRUb3VjaGVzWzBdOlBuLHRoaXMpLCRyPVhuLmludmVydChJciksUWk9YShKdChtdChYbixYbi5rKihQbi5zaGlmdEtleT8uNToyKSksSXIsJHIpLGwuYXBwbHkodGhpcyxqciksdik7RUEoUG4pLE0+MD93cyh0aGlzKS50cmFuc2l0''@;'; put 'put ''aW9uKCkuZHVyYXRpb24oTSkuY2FsbChDbixRaSxJcixQbik6d3ModGhpcykuY2FsbChsdC50cmFuc2Zvcm0sUWksSXIsUG4pfX1mdW5jdGlvbiBHbihQbiwuLi5qcil7aWYoYy5hcHBseSh0aGlzLGFyZ3VtZW50cykpe3ZhciB3aSxRaSx2dCxOdCxYbj1Qbi50b3VjaGVzLElyPVhuLmxlbmd0''@;'; put 'put ''aCwkcj10bih0aGlzLGpyLFBuLmNoYW5nZWRUb3VjaGVzLmxlbmd0aD09PUlyKS5ldmVudChQbik7Zm9yKG10ZShQbiksUWk9MDtRaTxJcjsrK1FpKU50PVtOdD1LOSh2dD1YbltRaV0sdGhpcyksdGhpcy5fX3pvb20uaW52ZXJ0KE50KSx2dC5pZGVudGlmaWVyXSwkci50b3VjaDA/ISRyLnRv''@;'; put 'put ''dWNoMSYmJHIudG91Y2gwWzJdIT09TnRbMl0mJigkci50b3VjaDE9TnQsJHIudGFwcz0wKTooJHIudG91Y2gwPU50LHdpPSEwLCRyLnRhcHM9MSshIW5lKTtuZSYmKG5lPWNsZWFyVGltZW91dChuZSkpLHdpJiYoJHIudGFwczwyJiYoY2U9TnRbMF0sbmU9c2V0VGltZW91dChmdW5jdGlvbigp''@;'; put 'put ''e25lPW51bGx9LEVlKSksaE4odGhpcyksJHIuc3RhcnQoKSl9fWZ1bmN0aW9uIGlpKFBuLC4uLmpyKXtpZih0aGlzLl9fem9vbWluZyl7dmFyIHdpLFFpLHZ0LE50LFhuPXRuKHRoaXMsanIpLmV2ZW50KFBuKSxJcj1Qbi5jaGFuZ2VkVG91Y2hlcywkcj1Jci5sZW5ndGg7Zm9yKEVBKFBuKSx3''@;'; put 'put ''aT0wO3dpPCRyOysrd2kpdnQ9SzkoUWk9SXJbd2ldLHRoaXMpLFhuLnRvdWNoMCYmWG4udG91Y2gwWzJdPT09UWkuaWRlbnRpZmllcj9Ybi50b3VjaDBbMF09dnQ6WG4udG91Y2gxJiZYbi50b3VjaDFbMl09PT1RaS5pZGVudGlmaWVyJiYoWG4udG91Y2gxWzBdPXZ0KTtpZihRaT1Ybi50aGF0''@;'; put 'put ''Ll9fem9vbSxYbi50b3VjaDEpe3ZhciBXdD1Ybi50b3VjaDBbMF0sZ249WG4udG91Y2gwWzFdLCRuPVhuLnRvdWNoMVswXSxocj1Ybi50b3VjaDFbMV0sVXI9KFVyPSRuWzBdLVd0WzBdKSpVcisoVXI9JG5bMV0tV3RbMV0pKlVyLFlyPShZcj1oclswXS1nblswXSkqWXIrKFlyPWhyWzFdLWdu''@;'; put 'put ''WzFdKSpZcjtRaT1tdChRaSxNYXRoLnNxcnQoVXIvWXIpKSx2dD1bKFd0WzBdKyRuWzBdKS8yLChXdFsxXSskblsxXSkvMl0sTnQ9WyhnblswXStoclswXSkvMiwoZ25bMV0raHJbMV0pLzJdfWVsc2V7aWYoIVhuLnRvdWNoMClyZXR1cm47dnQ9WG4udG91Y2gwWzBdLE50PVhuLnRvdWNoMFsx''@;'; put 'put ''XX1Ybi56b29tKCJ0b3VjaCIsYShKdChRaSx2dCxOdCksWG4uZXh0ZW50LHYpKX19ZnVuY3Rpb24gX2koUG4sLi4uanIpe2lmKHRoaXMuX196b29taW5nKXt2YXIgd2ksUWksWG49dG4odGhpcyxqcikuZXZlbnQoUG4pLElyPVBuLmNoYW5nZWRUb3VjaGVzLCRyPUlyLmxlbmd0aDtmb3IobXRl''@;'; put 'put ''KFBuKSxiZSYmY2xlYXJUaW1lb3V0KGJlKSxiZT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YmU9bnVsbH0sRWUpLHdpPTA7d2k8JHI7Kyt3aSlRaT1Jclt3aV0sWG4udG91Y2gwJiZYbi50b3VjaDBbMl09PT1RaS5pZGVudGlmaWVyP2RlbGV0ZSBYbi50b3VjaDA6WG4udG91Y2gxJiZYbi50b3Vj''@;'; put 'put ''aDFbMl09PT1RaS5pZGVudGlmaWVyJiZkZWxldGUgWG4udG91Y2gxO2lmKFhuLnRvdWNoMSYmIVhuLnRvdWNoMCYmKFhuLnRvdWNoMD1Ybi50b3VjaDEsZGVsZXRlIFhuLnRvdWNoMSksWG4udG91Y2gwKVhuLnRvdWNoMFsxXT10aGlzLl9fem9vbS5pbnZlcnQoWG4udG91Y2gwWzBdKTtlbHNl''@;'; put 'put ''IGlmKFhuLmVuZCgpLDI9PT1Ybi50YXBzJiYoUWk9SzkoUWksdGhpcyksTWF0aC5oeXBvdChjZVswXS1RaVswXSxjZVsxXS1RaVsxXSk8bnQpKXt2YXIgdnQ9d3ModGhpcykub24oImRibGNsaWNrLnpvb20iKTt2dCYmdnQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX19cmV0dXJuIGx0LnRyYW5z''@;'; put 'put ''Zm9ybT1mdW5jdGlvbihQbixqcixYbixJcil7dmFyICRyPVBuLnNlbGVjdGlvbj9Qbi5zZWxlY3Rpb24oKTpQbjskci5wcm9wZXJ0eSgiX196b29tIix4OGUpLFBuIT09JHI/Q24oUG4sanIsWG4sSXIpOiRyLmludGVycnVwdCgpLmVhY2goZnVuY3Rpb24oKXt0bih0aGlzLGFyZ3VtZW50cyku''@;'; put 'put ''ZXZlbnQoSXIpLnN0YXJ0KCkuem9vbShudWxsLCJmdW5jdGlvbiI9PXR5cGVvZiBqcj9qci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6anIpLmVuZCgpfSl9LGx0LnNjYWxlQnk9ZnVuY3Rpb24oUG4sanIsWG4sSXIpe2x0LnNjYWxlVG8oUG4sZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX3pvb20u''@;'; put 'put ''ayooImZ1bmN0aW9uIj09dHlwZW9mIGpyP2pyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpqcil9LFhuLElyKX0sbHQuc2NhbGVUbz1mdW5jdGlvbihQbixqcixYbixJcil7bHQudHJhbnNmb3JtKFBuLGZ1bmN0aW9uKCl7dmFyICRyPWwuYXBwbHkodGhpcyxhcmd1bWVudHMpLHdpPXRoaXMuX196''@;'; put 'put ''b29tLFFpPW51bGw9PVhuP3luKCRyKToiZnVuY3Rpb24iPT10eXBlb2YgWG4/WG4uYXBwbHkodGhpcyxhcmd1bWVudHMpOlhuLHZ0PXdpLmludmVydChRaSksTnQ9ImZ1bmN0aW9uIj09dHlwZW9mIGpyP2pyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpqcjtyZXR1cm4gYShKdChtdCh3aSxOdCks''@;'; put 'put ''UWksdnQpLCRyLHYpfSxYbixJcil9LGx0LnRyYW5zbGF0ZUJ5PWZ1bmN0aW9uKFBuLGpyLFhuLElyKXtsdC50cmFuc2Zvcm0oUG4sZnVuY3Rpb24oKXtyZXR1cm4gYSh0aGlzLl9fem9vbS50cmFuc2xhdGUoImZ1bmN0aW9uIj09dHlwZW9mIGpyP2pyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpq''@;'; put 'put ''ciwiZnVuY3Rpb24iPT10eXBlb2YgWG4/WG4uYXBwbHkodGhpcyxhcmd1bWVudHMpOlhuKSxsLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx2KX0sbnVsbCxJcil9LGx0LnRyYW5zbGF0ZVRvPWZ1bmN0aW9uKFBuLGpyLFhuLElyLCRyKXtsdC50cmFuc2Zvcm0oUG4sZnVuY3Rpb24oKXt2YXIgd2k9''@;'; put 'put ''bC5hcHBseSh0aGlzLGFyZ3VtZW50cyksUWk9dGhpcy5fX3pvb20sdnQ9bnVsbD09SXI/eW4od2kpOiJmdW5jdGlvbiI9PXR5cGVvZiBJcj9Jci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6SXI7cmV0dXJuIGEod04udHJhbnNsYXRlKHZ0WzBdLHZ0WzFdKS5zY2FsZShRaS5rKS50cmFuc2xhdGUo''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIGpyPy1qci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6LWpyLCJmdW5jdGlvbiI9PXR5cGVvZiBYbj8tWG4uYXBwbHkodGhpcyxhcmd1bWVudHMpOi1Ybiksd2ksdil9LElyLCRyKX0seG4ucHJvdG90eXBlPXtldmVudDpmdW5jdGlvbihQbil7cmV0dXJuIFBuJiYo''@;'; put 'put ''dGhpcy5zb3VyY2VFdmVudD1QbiksdGhpc30sc3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4gMT09Kyt0aGlzLmFjdGl2ZSYmKHRoaXMudGhhdC5fX3pvb21pbmc9dGhpcyx0aGlzLmVtaXQoInN0YXJ0IikpLHRoaXN9LHpvb206ZnVuY3Rpb24oUG4sanIpe3JldHVybiB0aGlzLm1vdXNlJiYibW91''@;'; put 'put ''c2UiIT09UG4mJih0aGlzLm1vdXNlWzFdPWpyLmludmVydCh0aGlzLm1vdXNlWzBdKSksdGhpcy50b3VjaDAmJiJ0b3VjaCIhPT1QbiYmKHRoaXMudG91Y2gwWzFdPWpyLmludmVydCh0aGlzLnRvdWNoMFswXSkpLHRoaXMudG91Y2gxJiYidG91Y2giIT09UG4mJih0aGlzLnRvdWNoMVsxXT1q''@;'; put 'put ''ci5pbnZlcnQodGhpcy50b3VjaDFbMF0pKSx0aGlzLnRoYXQuX196b29tPWpyLHRoaXMuZW1pdCgiem9vbSIpLHRoaXN9LGVuZDpmdW5jdGlvbigpe3JldHVybiAwPT0tLXRoaXMuYWN0aXZlJiYoZGVsZXRlIHRoaXMudGhhdC5fX3pvb21pbmcsdGhpcy5lbWl0KCJlbmQiKSksdGhpc30sZW1p''@;'; put 'put ''dDpmdW5jdGlvbihQbil7dmFyIGpyPXdzKHRoaXMudGhhdCkuZGF0dW0oKTtaLmNhbGwoUG4sdGhpcy50aGF0LG5ldyBpTXQoUG4se3NvdXJjZUV2ZW50OnRoaXMuc291cmNlRXZlbnQsdGFyZ2V0Omx0LHR5cGU6UG4sdHJhbnNmb3JtOnRoaXMudGhhdC5fX3pvb20sZGlzcGF0Y2g6Wn0pLGpy''@;'; put 'put ''KX19LGx0LndoZWVsRGVsdGE9ZnVuY3Rpb24oUG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhkPSJmdW5jdGlvbiI9PXR5cGVvZiBQbj9QbjpfTigrUG4pLGx0KTpkfSxsdC5maWx0ZXI9ZnVuY3Rpb24oUG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBQbj9QbjpfTighIVBuKSxsdCk6Y30sbHQudG91Y2hhYmxlPWZ1bmN0aW9uKFBuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0iZnVuY3Rpb24iPT10eXBlb2YgUG4/UG46X04oISFQbiksbHQpOmh9LGx0LmV4dGVudD1mdW5jdGlvbihQbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/''@;'; put 'put ''KGw9ImZ1bmN0aW9uIj09dHlwZW9mIFBuP1BuOl9OKFtbK1BuWzBdWzBdLCtQblswXVsxXV0sWytQblsxXVswXSwrUG5bMV1bMV1dXSksbHQpOmx9LGx0LnNjYWxlRXh0ZW50PWZ1bmN0aW9uKFBuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZlswXT0rUG5bMF0sZlsxXT0rUG5bMV0sbHQp''@;'; put 'put ''OltmWzBdLGZbMV1dfSxsdC50cmFuc2xhdGVFeHRlbnQ9ZnVuY3Rpb24oUG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2WzBdWzBdPStQblswXVswXSx2WzFdWzBdPStQblsxXVswXSx2WzBdWzFdPStQblswXVsxXSx2WzFdWzFdPStQblsxXVsxXSxsdCk6W1t2WzBdWzBdLHZbMF1bMV1d''@;'; put 'put ''LFt2WzFdWzBdLHZbMV1bMV1dXX0sbHQuY29uc3RyYWluPWZ1bmN0aW9uKFBuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1QbixsdCk6YX0sbHQuZHVyYXRpb249ZnVuY3Rpb24oUG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhNPStQbixsdCk6TX0sbHQuaW50ZXJwb2xhdGU9ZnVu''@;'; put 'put ''Y3Rpb24oUG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhEPVBuLGx0KTpEfSxsdC5vbj1mdW5jdGlvbigpe3ZhciBQbj1aLm9uLmFwcGx5KFosYXJndW1lbnRzKTtyZXR1cm4gUG49PT1aP2x0OlBufSxsdC5jbGlja0Rpc3RhbmNlPWZ1bmN0aW9uKFBuKXtyZXR1cm4gYXJndW1lbnRzLmxl''@;'; put 'put ''bmd0aD8ocWU9KFBuPStQbikqUG4sbHQpOk1hdGguc3FydChxZSl9LGx0LnRhcERpc3RhbmNlPWZ1bmN0aW9uKFBuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obnQ9K1BuLGx0KTpudH0sbHR9KCkuc2NhbGVFeHRlbnQodGhpcy5fb3B0aW9ucy56b29tU2NhbGVFeHRlbnQpLnRyYW5zbGF0''@;'; put 'put ''ZUV4dGVudCh0aGlzLl9vcHRpb25zLnpvb21UcmFuc2xhdGVFeHRlbnQpLmludGVycG9sYXRlKFNOKS5vbigiem9vbSIsZnVuY3Rpb24gbCh2KXt3cyhkLm5vZGUoKS5xdWVyeVNlbGVjdG9yKCJnIikpLmF0dHIoInRyYW5zZm9ybSIsdi50cmFuc2Zvcm0pLGMuX2Rpc3BhdGNoLmNhbGwoInpv''@;'; put 'put ''b20iLGMpfSk7dGhpcy5fem9vbUJlaGF2aW9yPWg7dmFyIGY9d3MoZC5ub2RlKCkucXVlcnlTZWxlY3RvcigiZyIpKTtyZXR1cm4gZC5jYWxsKGgpLHRoaXMuX2FjdGl2ZXx8d3RlLmNhbGwodGhpcyxmKSx0aGlzLl9vcmlnaW5hbFRyYW5zZm9ybT1DTihkLm5vZGUoKSksdGhpc31mdW5jdGlv''@;'; put 'put ''biBfdGUoYyl7dmFyIGw9dGhpcy5fdHJhbnNsYXRpb24sYT10aGlzLl9zY2FsZSxkPWMuZGF0dW0oKS50cmFuc2xhdGlvbixoPWMuZGF0dW0oKS5zY2FsZSxmPUNOKHRoaXMuX3pvb21TZWxlY3Rpb24ubm9kZSgpKTtyZXR1cm4gbCYmKGY9KGY9Zi5zY2FsZSgxL2EpKS50cmFuc2xhdGUoLWwu''@;'; put 'put ''eCwtbC55KSksKGY9Zi50cmFuc2xhdGUoZC54LGQueSkpLnNjYWxlKGgpfWZ1bmN0aW9uIHd0ZShjKXt0aGlzLl96b29tQmVoYXZpb3IudHJhbnNmb3JtKHRoaXMuX3pvb21TZWxlY3Rpb24sX3RlLmNhbGwodGhpcyxjKSksdGhpcy5fdHJhbnNsYXRpb249Yy5kYXR1bSgpLnRyYW5zbGF0aW9u''@;'; put 'put ''LHRoaXMuX3NjYWxlPWMuZGF0dW0oKS5zY2FsZSx0aGlzLl9vcmlnaW5hbFRyYW5zZm9ybT13Ti50cmFuc2xhdGUoYy5kYXR1bSgpLnRyYW5zbGF0aW9uLngsYy5kYXR1bSgpLnRyYW5zbGF0aW9uLnkpLnNjYWxlKGMuZGF0dW0oKS5zY2FsZSl9ZnVuY3Rpb24gU010KGMsbCl7cmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uKCl7Y29uc3QgYT1jLm1hcChmdW5jdGlvbihkKXtyZXR1cm4gU04oW2RbMF1bMF0sZFswXVsxXV0sW2RbMV1bMF0sZFsxXVsxXV0pfSk7cmV0dXJuIGZ1bmN0aW9uKGQpe3JldHVybiBkPDE/Ik0iK2EubWFwKGZ1bmN0aW9uKGgpe3JldHVybiBoKGQpfSkuam9pbigiTCIpOmx9fX1m''@;'; put 'put ''dW5jdGlvbiBEOGUoYyl7cmV0dXJuImVkZ2UiPT1jLmF0dHJpYnV0ZXMuY2xhc3N8fCJhIj09Yy50YWcmJiJnIj09Yy5wYXJlbnQudGFnJiYiZWRnZSI9PWMucGFyZW50LnBhcmVudC5hdHRyaWJ1dGVzLmNsYXNzfWZ1bmN0aW9uIEk4ZShjKXtyZXR1cm4gYy5wYXJlbnQmJkQ4ZShjLnBhcmVu''@;'; put 'put ''dCl9ZnVuY3Rpb24gUjhlKGMpe3ZhciBsPXRoaXMuX3RyYW5zaXRpb24sYT10aGlzLl9vcHRpb25zLmZhZGUmJm51bGwhPWwsZD10aGlzLl9vcHRpb25zLnR3ZWVuUGF0aHMsaD10aGlzLl9vcHRpb25zLnR3ZWVuU2hhcGVzLGY9dGhpcy5fb3B0aW9ucy5jb252ZXJ0RXF1YWxTaWRlZFBvbHln''@;'; put 'put ''b25zLHY9dGhpcy5fb3B0aW9ucy5ncm93RW50ZXJpbmdFZGdlcyYmbnVsbCE9bCxNPXRoaXMuX2F0dHJpYnV0ZXIsRD10aGlzO3ZhciBjZT10aGlzLl9zZWxlY3Rpb247aWYobnVsbCE9bCl7dmFyIGJlPXRoaXMuX2pvYnM7aWYoRC5fYWN0aXZlKXJldHVybiBiZS5wdXNoKG51bGwpLHRoaXM7''@;'; put 'put ''Y2UudHJhbnNpdGlvbihsKS50cmFuc2l0aW9uKCkuZHVyYXRpb24oMCkub24oImVuZCIsZnVuY3Rpb24oKXtELl9hY3RpdmU9ITEsMCE9YmUubGVuZ3RoJiYoYmUuc2hpZnQoKSxELnJlbmRlcigpKX0pLHRoaXMuX2FjdGl2ZT0hMH1udWxsIT1sJiZjZS50cmFuc2l0aW9uKGwpLm9uKCJzdGFy''@;'; put 'put ''dCIsZnVuY3Rpb24oKXtELl9kaXNwYXRjaC5jYWxsKCJ0cmFuc2l0aW9uU3RhcnQiLEQpfSkub24oImVuZCIsZnVuY3Rpb24oKXtELl9kaXNwYXRjaC5jYWxsKCJ0cmFuc2l0aW9uRW5kIixEKX0pLnRyYW5zaXRpb24oKS5kdXJhdGlvbigwKS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7RC5fZGlz''@;'; put 'put ''cGF0Y2guY2FsbCgicmVzdG9yZUVuZCIsRCksRC5fZGlzcGF0Y2guY2FsbCgiZW5kIixEKSxjJiZjLmNhbGwoRCl9KTt2YXIgRWU9dGhpcy5fZGF0YSxCZT1jZS5zZWxlY3RBbGwoInN2ZyIpLmRhdGEoW0VlXSxmdW5jdGlvbihxZSl7cmV0dXJuIHFlLmtleX0pO3JldHVybiBCZT1CZS5lbnRl''@;'; put 'put ''cigpLmFwcGVuZCgic3ZnIikubWVyZ2UoQmUpLGZ1bmN0aW9uIG5lKHFlKXt2YXIgbnQ9d3ModGhpcyk7aWYoInN2ZyI9PXFlLnRhZyl7dmFyIGx0PUQuX29wdGlvbnM7aWYobnVsbCE9bHQud2lkdGh8fG51bGwhPWx0LmhlaWdodCl7dmFyIG10PWx0LndpZHRoLEp0PWx0LmhlaWdodDtudWxs''@;'; put 'put ''PT1tdD9tdD00KnFlLmF0dHJpYnV0ZXMud2lkdGgucmVwbGFjZSgicHQiLCIiKS8zOihudC5hdHRyKCJ3aWR0aCIsbXQpLHFlLmF0dHJpYnV0ZXMud2lkdGg9bXQpLG51bGw9PUp0P0p0PTQqcWUuYXR0cmlidXRlcy5oZWlnaHQucmVwbGFjZSgicHQiLCIiKS8zOihudC5hdHRyKCJoZWlnaHQi''@;'; put 'put ''LEp0KSxxZS5hdHRyaWJ1dGVzLmhlaWdodD1KdCksbHQuZml0fHwobnQuYXR0cigidmlld0JveCIsYDAgMCAkezMqbXQvNC9sdC5zY2FsZX0gJHszKkp0LzQvbHQuc2NhbGV9YCkscWUuYXR0cmlidXRlcy52aWV3Qm94PWAwIDAgJHszKm10LzQvbHQuc2NhbGV9ICR7MypKdC80L2x0LnNjYWxl''@;'; put 'put ''fWApfTEhPWx0LnNjYWxlJiYobHQuZml0fHxudWxsPT1sdC53aWR0aCYmbnVsbD09bHQuaGVpZ2h0KSYmKG10PXFlLmF0dHJpYnV0ZXMudmlld0JveC5zcGxpdCgiICIpWzJdLEp0PXFlLmF0dHJpYnV0ZXMudmlld0JveC5zcGxpdCgiICIpWzNdLG50LmF0dHIoInZpZXdCb3giLGAwIDAgJHtt''@;'; put 'put ''dC9sdC5zY2FsZX0gJHtKdC9sdC5zY2FsZX1gKSxxZS5hdHRyaWJ1dGVzLnZpZXdCb3g9YDAgMCAke210L2x0LnNjYWxlfSAke0p0L2x0LnNjYWxlfWApfU0mJm50LmVhY2goTSk7dmFyIHluPXFlLnRhZyxDbj1xZS5hdHRyaWJ1dGVzLHRuPW50Lm5vZGUoKS5hdHRyaWJ1dGVzO2lmKHRuKWZv''@;'; put 'put ''cih2YXIgeG49MDt4bjx0bi5sZW5ndGg7eG4rKyl7dmFyIFFuPXRuW3huXSx5aT1Rbi5uYW1lO2lmKCJ4bWxucyIhPXlpLnNwbGl0KCI6IilbMF0mJlFuLm5hbWVzcGFjZVVSSSl7dmFyIHlyPVFuLm5hbWVzcGFjZVVSSS5zcGxpdCgiLyIpO3lpPXlyW3lyLmxlbmd0aC0xXSsiOiIreWl9eWkg''@;'; put 'put ''aW4gQ258fChDblt5aV09bnVsbCl9dmFyIGlpPSExLF9pPSExO2lmKGgmJmwpe2lmKCgicG9seWdvbiI9PXRoaXMubm9kZU5hbWV8fCJlbGxpcHNlIj09dGhpcy5ub2RlTmFtZSkmJnFlLmFsdGVybmF0aXZlT2xkJiYoX2k9ITApLCgicG9seWdvbiI9PXlufHwiZWxsaXBzZSI9PXluKSYmcWUu''@;'; put 'put ''YWx0ZXJuYXRpdmVOZXcmJihpaT0hMCksInBvbHlnb24iPT10aGlzLm5vZGVOYW1lJiYicG9seWdvbiI9PXluJiZxZS5hbHRlcm5hdGl2ZU9sZCl7dmFyIFBuPUU4ZShudCk7aWYoIWYpe3ZhciBYbj1Qbi5hdHRyaWJ1dGVzLnBvaW50cy5zcGxpdCgiICIpLmxlbmd0aDsoSXI9cWUuYXR0cmli''@;'; put 'put ''dXRlcy5wb2ludHMpLnNwbGl0KCIgIikubGVuZ3RoPT1YbiYmKGlpPSExLF9pPSExKX19aWYoX2kpe3ZhciBRaT1UOGUobnQscWUuYWx0ZXJuYXRpdmVPbGQpO1FpLmRhdGEoW3FlXSxmdW5jdGlvbigpe3JldHVybiBxZS5rZXl9KSxudD1RaX1paSYmKHluPSJwYXRoIixDbj1xZS5hbHRlcm5h''@;'; put 'put ''dGl2ZU5ldy5hdHRyaWJ1dGVzKX12YXIgTnQ9bnQ7aWYobCYmKE50PU50LnRyYW5zaXRpb24obCksYSYmTnQuZmlsdGVyKGZ1bmN0aW9uKFVuKXtyZXR1cm4iIyI9PVVuLnRhZ1swXT9udWxsOnRoaXN9KS5zdHlsZSgib3BhY2l0eSIsMSksTnQuZmlsdGVyKGZ1bmN0aW9uKFVuKXtyZXR1cm4i''@;'; put 'put ''IyI9PVVuLnRhZ1swXT9udWxsOnRoaXN9KS5vbigiZW5kIixmdW5jdGlvbihVbil7d3ModGhpcykuYXR0cigic3R5bGUiLFVuJiZVbi5hdHRyaWJ1dGVzJiZVbi5hdHRyaWJ1dGVzLnN0eWxlfHxudWxsKX0pKSx2JiYicGF0aCI9PXluJiZxZS5vZmZzZXQpe3ZhciBnbj1xZS50b3RhbExlbmd0''@;'; put 'put ''aDtudC5hdHRyKCJzdHJva2UtZGFzaGFycmF5IixnbisiICIrZ24pLmF0dHIoInN0cm9rZS1kYXNob2Zmc2V0IixnbikuYXR0cigidHJhbnNmb3JtIiwidHJhbnNsYXRlKCIrcWUub2Zmc2V0LngrIiwiK3FlLm9mZnNldC55KyIpIiksQ25bInN0cm9rZS1kYXNob2Zmc2V0Il09MCxDbi50cmFu''@;'; put 'put ''c2Zvcm09InRyYW5zbGF0ZSgwLDApIixOdC5hdHRyKCJzdHJva2UtZGFzaG9mZnNldCIsQ25bInN0cm9rZS1kYXNob2Zmc2V0Il0pLmF0dHIoInRyYW5zZm9ybSIsQ24udHJhbnNmb3JtKS5vbigic3RhcnQiLGZ1bmN0aW9uKCl7d3ModGhpcykuc3R5bGUoIm9wYWNpdHkiLG51bGwpfSkub24o''@;'; put 'put ''ImVuZCIsZnVuY3Rpb24oKXt3cyh0aGlzKS5hdHRyKCJzdHJva2UtZGFzaG9mZnNldCIsbnVsbCkuYXR0cigic3Ryb2tlLWRhc2hhcnJheSIsbnVsbCkuYXR0cigidHJhbnNmb3JtIixudWxsKX0pfWlmKHYmJiJwb2x5Z29uIj09eW4mJkk4ZShxZSkmJnFlLm9mZnNldCYmInBhdGgiPT1xZS5w''@;'; put 'put ''YXJlbnQuY2hpbGRyZW5bM10udGFnKXt2YXIgaHI9d3MobnQubm9kZSgpLnBhcmVudE5vZGUucXVlcnlTZWxlY3RvcigicGF0aCIpKSxVcj1oci5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aCgwKSxZcj1oci5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aChxZS50b3RhbExlbmd0aCksTmk9aHIubm9k''@;'; put 'put ''ZSgpLmdldFBvaW50QXRMZW5ndGgocWUudG90YWxMZW5ndGgtMSkscm49MTgwKk1hdGguYXRhbjIoWXIueS1OaS55LFlyLngtTmkueCkvTWF0aC5QSSx1bj1Vci54LVlyLngrcWUub2Zmc2V0Lngsa249VXIueS1Zci55K3FlLm9mZnNldC55O250LmF0dHIoInRyYW5zZm9ybSIsInRyYW5zbGF0''@;'; put 'put ''ZSgiK3VuKyIsIitrbisiKSIpLE50LmF0dHJUd2VlbigidHJhbnNmb3JtIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihVbil7dmFyIGJyPWhyLm5vZGUoKS5nZXRQb2ludEF0TGVuZ3RoKHFlLnRvdGFsTGVuZ3RoKlVuKSxUcj1oci5ub2RlKCkuZ2V0UG9pbnRBdExlbmd0aChxZS50b3Rh''@;'; put 'put ''bExlbmd0aCpVbisxKSxrcj0xODAqTWF0aC5hdGFuMihUci55LWJyLnksVHIueC1ici54KS9NYXRoLlBJLXJuO3JldHVybiJ0cmFuc2xhdGUoIisodW49YnIueC1Zci54K3FlLm9mZnNldC54KigxLVVuKSkrIiwiKyhrbj1ici55LVlyLnkrcWUub2Zmc2V0LnkqKDEtVW4pKSsiKSByb3RhdGUo''@;'; put 'put ''IitrcisiICIrWXIueCsiICIrWXIueSsiKSJ9fSkub24oInN0YXJ0IixmdW5jdGlvbigpe3dzKHRoaXMpLnN0eWxlKCJvcGFjaXR5IixudWxsKX0pLm9uKCJlbmQiLGZ1bmN0aW9uKCl7d3ModGhpcykuYXR0cigidHJhbnNmb3JtIixudWxsKX0pfXZhciB3cj1kJiZsJiYicGF0aCI9PXluJiZu''@;'; put 'put ''dWxsIT1udC5hdHRyKCJkIik7Zm9yKHZhciBuciBvZiBPYmplY3Qua2V5cyhDbikpe3ZhciBTcj1Dbltucl07aWYod3ImJiJkIj09bnIpe3ZhciBJcjsoSXI9KHFlLmFsdGVybmF0aXZlT2xkfHxxZSkucG9pbnRzKSYmTnQuYXR0clR3ZWVuKCJkIixTTXQoSXIsU3IpKX1lbHNle2lmKCJ0cmFu''@;'; put 'put ''c2Zvcm0iPT1uciYmcWUudHJhbnNsYXRpb24paWYobCl7dmFyIFpyPU50Lm9uKCJlbmQiKTtOdC5vbigic3RhcnQiLGZ1bmN0aW9uKCl7RC5fem9vbUJlaGF2aW9yJiZOdC50d2VlbigiYXR0ci50cmFuc2Zvcm0iLGZ1bmN0aW9uKCl7dmFyIFVuPXRoaXM7cmV0dXJuIGZ1bmN0aW9uKGJyKXtV''@;'; put 'put ''bi5zZXRBdHRyaWJ1dGUoInRyYW5zZm9ybSIsbzhlKENOKEQuX3pvb21TZWxlY3Rpb24ubm9kZSgpKS50b1N0cmluZygpLF90ZS5jYWxsKEQsbnQpLnRvU3RyaW5nKCkpKGJyKSl9fSl9KS5vbigiZW5kIixmdW5jdGlvbigpe1pyLmNhbGwodGhpcyksRC5fem9vbUJlaGF2aW9yJiZ3dGUuY2Fs''@;'; put 'put ''bChELG50KX0pfWVsc2UgRC5fem9vbUJlaGF2aW9yJiYod3RlLmNhbGwoRCxudCksU3I9X3RlLmNhbGwoRCxudCkudG9TdHJpbmcoKSk7TnQuYXR0cihucixTcil9fWlpJiZOdC5vbigiZW5kIixmdW5jdGlvbihVbixicixUcil7VDhlKFFpPXdzKHRoaXMpLFVuKS5kYXRhKFtVbl0sZnVuY3Rp''@;'; put 'put ''b24oKXtyZXR1cm4gVW4ua2V5fSl9KSxxZS50ZXh0JiZOdC50ZXh0KHFlLnRleHQpLGZ1bmN0aW9uIFoocWUpe3ZhciBudD1xZS5zZWxlY3RBbGwoZnVuY3Rpb24oKXtyZXR1cm4gcWUubm9kZSgpLmNoaWxkTm9kZXN9KSxsdD0obnQ9bnQuZGF0YShmdW5jdGlvbih5bil7cmV0dXJuIHluLmNo''@;'; put 'put ''aWxkcmVufSxmdW5jdGlvbih5bil7cmV0dXJuIHluLmtleX0pKS5lbnRlcigpLmFwcGVuZChmdW5jdGlvbih5bil7dmFyIENuPXZ0ZSh5bik7cmV0dXJuIiN0ZXh0Ij09eW4udGFnJiZhJiYoQ24ubm9kZVZhbHVlPXluLnRleHQpLENufSk7KGF8fHYmJkQ4ZShxZS5kYXR1bSgpKSkmJmx0LmZp''@;'; put 'put ''bHRlcihmdW5jdGlvbih5bil7cmV0dXJuIiMiPT15bi50YWdbMF0/bnVsbDp0aGlzfSkuZWFjaChmdW5jdGlvbih5bil7dmFyIENuPXdzKHRoaXMpO2Zvcih2YXIgdG4gb2YgT2JqZWN0LmtleXMoeW4uYXR0cmlidXRlcykpQ24uYXR0cih0bix5bi5hdHRyaWJ1dGVzW3RuXSl9KS5maWx0ZXIo''@;'; put 'put ''ZnVuY3Rpb24oeW4pe3JldHVybiJzdmciPT15bi50YWd8fCJnIj09eW4udGFnP251bGw6dGhpc30pLnN0eWxlKCJvcGFjaXR5IiwwKTt2YXIgSnQ9bnQuZXhpdCgpO00mJkp0LmVhY2goTSksbCYmKEp0PUp0LnRyYW5zaXRpb24obCksYSYmSnQuZmlsdGVyKGZ1bmN0aW9uKHluKXtyZXR1cm4i''@;'; put 'put ''IyI9PXluLnRhZ1swXT9udWxsOnRoaXN9KS5zdHlsZSgib3BhY2l0eSIsMCkpLEp0PUp0LnJlbW92ZSgpLChudD1sdC5tZXJnZShudCkub3JkZXIoKSkuZWFjaChuZSl9KG50KX0uY2FsbChCZS5ub2RlKCksRWUpLHRoaXMuX29wdGlvbnMuem9vbSYmIXRoaXMuX3pvb21CZWhhdmlvciYmazhl''@;'; put 'put ''LmNhbGwodGhpcyksRC5fZGlzcGF0Y2guY2FsbCgicmVuZGVyRW5kIixEKSxudWxsPT1sJiYodGhpcy5fZGlzcGF0Y2guY2FsbCgiZW5kIix0aGlzKSxjJiZjLmNhbGwodGhpcykpLHRoaXN9Q04ucHJvdG90eXBlPXFnLnByb3RvdHlwZTt2YXIgSUEseHRlLERNdD1BcnJheUJ1ZmZlcixEdT1V''@;'; put 'put ''aW50OEFycmF5LE1OPVVpbnQxNkFycmF5LElNdD1JbnQxNkFycmF5LHhOPUludDMyQXJyYXksQ3RlPWZ1bmN0aW9uKGMsbCxhKXtpZihEdS5wcm90b3R5cGUuc2xpY2UpcmV0dXJuIER1LnByb3RvdHlwZS5zbGljZS5jYWxsKGMsbCxhKTsobnVsbD09bHx8bDwwKSYmKGw9MCksKG51bGw9PWF8''@;'; put 'put ''fGE+Yy5sZW5ndGgpJiYoYT1jLmxlbmd0aCk7dmFyIGQ9bmV3IER1KGEtbCk7cmV0dXJuIGQuc2V0KGMuc3ViYXJyYXkobCxhKSksZH0sQUE9ZnVuY3Rpb24oYyxsLGEsZCl7aWYoRHUucHJvdG90eXBlLmZpbGwpcmV0dXJuIER1LnByb3RvdHlwZS5maWxsLmNhbGwoYyxsLGEsZCk7Zm9yKChu''@;'; put 'put ''dWxsPT1hfHxhPDApJiYoYT0wKSwobnVsbD09ZHx8ZD5jLmxlbmd0aCkmJihkPWMubGVuZ3RoKTthPGQ7KythKWNbYV09bDtyZXR1cm4gY30sUk10PWZ1bmN0aW9uKGMsbCxhLGQpe2lmKER1LnByb3RvdHlwZS5jb3B5V2l0aGluKXJldHVybiBEdS5wcm90b3R5cGUuY29weVdpdGhpbi5jYWxs''@;'; put 'put ''KGMsbCxhLGQpO2ZvcigobnVsbD09YXx8YTwwKSYmKGE9MCksKG51bGw9PWR8fGQ+Yy5sZW5ndGgpJiYoZD1jLmxlbmd0aCk7YTxkOyljW2wrK109Y1thKytdfSxMTXQ9WyJpbnZhbGlkIHpzdGQgZGF0YSIsIndpbmRvdyBzaXplIHRvbyBsYXJnZSAoPjIwNDZNQikiLCJpbnZhbGlkIGJsb2Nr''@;'; put 'put ''IHR5cGUiLCJGU0UgYWNjdXJhY3kgdG9vIGhpZ2giLCJtYXRjaCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLCJ1bmV4cGVjdGVkIEVPRiJdLFF1PWZ1bmN0aW9uKGMsbCxhKXt2YXIgZD1uZXcgRXJyb3IobHx8TE10W2NdKTtpZihkLmNvZGU9YyxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYmRXJy''@;'; put 'put ''b3IuY2FwdHVyZVN0YWNrVHJhY2UoZCxRdSksIWEpdGhyb3cgZDtyZXR1cm4gZH0sTDhlPWZ1bmN0aW9uKGMsbCxhKXtmb3IodmFyIGQ9MCxoPTA7ZDxhOysrZClofD1jW2wrK108PChkPDwzKTtyZXR1cm4gaH0sUE10PWZ1bmN0aW9uKGMsbCl7dmFyIGE9Y1swXXxjWzFdPDw4fGNbMl08PDE2''@;'; put 'put ''O2lmKDMxMjY1Njg9PWEmJjI1Mz09Y1szXSl7dmFyIGQ9Y1s0XSxoPWQ+PjUmMSxmPWQ+PjImMSx2PTMmZCxNPWQ+PjY7OCZkJiZRdSgwKTt2YXIgRD02LWgsWj0zPT12PzQ6dixuZT1MOGUoYyxELFopLGNlPU0/MTw8TTpoLGJlPUw4ZShjLEQrPVosY2UpKygxPT1NJiYyNTYpLEVlPWJlO2lm''@;'; put 'put ''KCFoKXt2YXIgQmU9MTw8MTArKGNbNV0+PjMpO0VlPUJlKyhCZT4+MykqKDcmY1s1XSl9RWU+MjE0NTM4NjQ5NiYmUXUoMSk7dmFyIHFlPW5ldyBEdSgoMT09bD9iZXx8RWU6bD8wOkVlKSsxMik7cmV0dXJuIHFlWzBdPTEscWVbNF09NCxxZVs4XT04LHtiOkQrY2UseTowLGw6MCxkOm5lLHc6''@;'; put 'put ''bCYmMSE9bD9sOnFlLnN1YmFycmF5KDEyKSxlOkVlLG86bmV3IHhOKHFlLmJ1ZmZlciwwLDMpLHU6YmUsYzpmLG06TWF0aC5taW4oMTMxMDcyLEVlKX19aWYoMjU0ODE4OTM9PShhPj40fGNbM108PDIwKSlyZXR1cm4gZnVuY3Rpb24oYyxsKXtyZXR1cm4oY1s0XXxjWzVdPDw4fGNbNl08PDE2''@;'; put 'put ''fGNbN108PDI0KT4+PjB9KGMpKzg7UXUoMCl9LFg5PWZ1bmN0aW9uKGMpe2Zvcih2YXIgbD0wOzE8PGw8PWM7KytsKTtyZXR1cm4gbC0xfSxrQT1mdW5jdGlvbihjLGwsYSl7dmFyIGQ9NCsobDw8MyksaD01KygxNSZjW2xdKTtoPmEmJlF1KDMpO2Zvcih2YXIgZj0xPDxoLHY9ZixNPS0xLEQ9''@;'; put 'put ''LTEsWj0tMSxuZT1mLGNlPW5ldyBETXQoNTEyKyhmPDwyKSksYmU9bmV3IElNdChjZSwwLDI1NiksRWU9bmV3IE1OKGNlLDAsMjU2KSxCZT1uZXcgTU4oY2UsNTEyLGYpLHFlPTUxMisoZjw8MSksbnQ9bmV3IER1KGNlLHFlLGYpLGx0PW5ldyBEdShjZSxxZStmKTtNPDI1NSYmdj4wOyl7dmFy''@;'; put 'put ''IG10PVg5KHYrMSksSnQ9ZD4+Myx5bj0oMTw8bXQrMSktMSxDbj0oY1tKdF18Y1tKdCsxXTw8OHxjW0p0KzJdPDwxNik+Pig3JmQpJnluLHRuPSgxPDxtdCktMSx4bj15bi12LTEsUW49Q24mdG47aWYoUW48eG4/KGQrPW10LENuPVFuKTooZCs9bXQrMSxDbj50biYmKENuLT14bikpLGJlWysr''@;'; put 'put ''TV09LS1DbiwtMT09Q24/KHYrPUNuLG50Wy0tbmVdPU0pOnYtPUNuLCFDbilkb3t2YXIgeWk9ZD4+MztEPShjW3lpXXxjW3lpKzFdPDw4KT4+KDcmZCkmMyxkKz0yLE0rPUR9d2hpbGUoMz09RCl9KE0+MjU1fHx2KSYmUXUoMCk7Zm9yKHZhciB5cj0wLEduPShmPj4xKSsoZj4+MykrMyxpaT1m''@;'; put 'put ''LTEsX2k9MDtfaTw9TTsrK19pKXt2YXIgUG49YmVbX2ldO2lmKFBuPDEpRWVbX2ldPS1QbjtlbHNlIGZvcihaPTA7WjxQbjsrK1ope250W3lyXT1faTtkb3t5cj15citHbiZpaX13aGlsZSh5cj49bmUpfX1mb3IoeXImJlF1KDApLFo9MDtaPGY7KytaKXt2YXIganI9RWVbbnRbWl1dKyssWG49''@;'; put 'put ''bHRbWl09aC1YOShqcik7QmVbWl09KGpyPDxYbiktZn1yZXR1cm5bZCs3Pj4zLHtiOmgsczpudCxuOmx0LHQ6QmV9XX0sSE10PWtBKG5ldyBEdShbODEsMTYsOTksMTQwLDQ5LDE5OCwyNCw5OSwxMiwzMywxOTYsMjQsOTksMTAyLDEwMiwxMzQsNzAsMTQ2LDRdKSwwLDYpWzFdLE5NdD1rQShu''@;'; put 'put ''ZXcgRHUoWzMzLDIwLDE5NiwyNCw5OSwxNDAsMzMsMTMyLDE2LDY2LDgsMzMsMTMyLDE2LDY2LDgsMzMsNjgsNjgsNjgsNjgsNjgsNjgsNjgsNjgsMzYsOV0pLDAsNilbMV0sVk10PWtBKG5ldyBEdShbMzIsMTMyLDE2LDY2LDEwMiw3MCw2OCw2OCw2OCw2OCwzNiw3MywyXSksMCw1KVsxXSxP''@;'; put 'put ''OGU9ZnVuY3Rpb24oYyxsKXtmb3IodmFyIGE9Yy5sZW5ndGgsZD1uZXcgeE4oYSksaD0wO2g8YTsrK2gpZFtoXT1sLGwrPTE8PGNbaF07cmV0dXJuIGR9LFN0ZT1uZXcgRHUobmV3IHhOKFswLDAsMCwwLDE2ODQzMDA5LDUwNTI4NzcwLDEzNDY3ODAyMCwyMDIwNTAwNTcsMjY5NDIyMDkzXSku''@;'; put 'put ''YnVmZmVyLDAsMzYpLEJNdD1POGUoU3RlLDApLE10ZT1uZXcgRHUobmV3IHhOKFswLDAsMCwwLDAsMCwwLDAsMTY4NDMwMDksNTA1Mjg3NzAsMTE3NzY5MjIwLDE4NTIwNzA0OCwyNTI1NzkwODQsMTZdKS5idWZmZXIsMCw1Myksak10PU84ZShNdGUsMyksREE9ZnVuY3Rpb24oYyxsLGEpe3Zh''@;'; put 'put ''ciBkPWMubGVuZ3RoLGg9bC5sZW5ndGgsZj1jW2QtMV0sdj0oMTw8YS5iKS0xLE09LWEuYjtmfHxRdSgwKTtmb3IodmFyIEQ9MCxaPWEuYixuZT0oZDw8MyktOCtYOShmKS1aLGNlPS0xO25lPk0mJmNlPGg7KXt2YXIgYmU9bmU+PjM7bFsrK2NlXT1hLnNbRD0oRDw8WnwoY1tiZV18Y1tiZSsx''@;'; put 'put ''XTw8OHxjW2JlKzJdPDwxNik+Pig3Jm5lKSkmdl0sbmUtPVo9YS5uW0RdfShuZSE9TXx8Y2UrMSE9aCkmJlF1KDApfSx6TXQ9ZnVuY3Rpb24oYyxsLGEpe3ZhciBkPTYsZj1sLmxlbmd0aCszPj4yLHY9Zjw8MSxNPWYrdjtEQShjLnN1YmFycmF5KGQsZCs9Y1swXXxjWzFdPDw4KSxsLnN1YmFy''@;'; put 'put ''cmF5KDAsZiksYSksREEoYy5zdWJhcnJheShkLGQrPWNbMl18Y1szXTw8OCksbC5zdWJhcnJheShmLHYpLGEpLERBKGMuc3ViYXJyYXkoZCxkKz1jWzRdfGNbNV08PDgpLGwuc3ViYXJyYXkodixNKSxhKSxEQShjLnN1YmFycmF5KGQpLGwuc3ViYXJyYXkoTSksYSl9LFVNdD1mdW5jdGlvbihj''@;'; put 'put ''LGwsYSl7dmFyIGQsaD1sLmIsZj1jW2hdLHY9Zj4+MSYzO2wubD0xJmY7dmFyIE09Zj4+M3xjW2grMV08PDV8Y1toKzJdPDwxMyxEPShoKz0zKStNO2lmKDE9PXYpcmV0dXJuIGg+PWMubGVuZ3RoP3ZvaWQgMDoobC5iPWgrMSxhPyhBQShhLGNbaF0sbC55LGwueSs9TSksYSk6QUEobmV3IER1''@;'; put 'put ''KE0pLGNbaF0pKTtpZighKEQ+Yy5sZW5ndGgpKXtpZigwPT12KXJldHVybiBsLmI9RCxhPyhhLnNldChjLnN1YmFycmF5KGgsRCksbC55KSxsLnkrPU0sYSk6Q3RlKGMsaCxEKTtpZigyPT12KXt2YXIgWj1jW2hdLG5lPTMmWixjZT1aPj4yJjMsYmU9Wj4+NCxFZT0wLEJlPTA7bmU8Mj8xJmNl''@;'; put 'put ''P2JlfD1jWysraF08PDR8KDImY2UmJmNbKytoXTw8MTIpOmJlPVo+PjM6KEJlPWNlLGNlPDI/KGJlfD0oNjMmY1srK2hdKTw8NCxFZT1jW2hdPj42fGNbKytoXTw8Mik6Mj09Y2U/KGJlfD1jWysraF08PDR8KDMmY1srK2hdKTw8MTIsRWU9Y1toXT4+MnxjWysraF08PDYpOihiZXw9Y1srK2hd''@;'; put 'put ''PDw0fCg2MyZjWysraF0pPDwxMixFZT1jW2hdPj42fGNbKytoXTw8MnxjWysraF08PDEwKSksKytoO3ZhciBxZT1hP2Euc3ViYXJyYXkobC55LGwueStsLm0pOm5ldyBEdShsLm0pLG50PXFlLmxlbmd0aC1iZTtpZigwPT1uZSlxZS5zZXQoYy5zdWJhcnJheShoLGgrPWJlKSxudCk7ZWxzZSBp''@;'; put 'put ''ZigxPT1uZSlBQShxZSxjW2grK10sbnQpO2Vsc2V7dmFyIGx0PWwuaDtpZigyPT1uZSl7dmFyIG10PWZ1bmN0aW9uKGMsbCl7dmFyIGE9MCxkPS0xLGg9bmV3IER1KDI5MiksZj1jW2xdLHY9aC5zdWJhcnJheSgwLDI1NiksTT1oLnN1YmFycmF5KDI1NiwyNjgpLEQ9bmV3IE1OKGguYnVmZmVy''@;'; put 'put ''LDI2OCk7aWYoZjwxMjgpe3ZhciBaPWtBKGMsbCsxLDYpLGNlPVpbMV0sYmU9WlswXTw8MyxFZT1jW2wrPWZdO0VlfHxRdSgwKTtmb3IodmFyIEJlPTAscWU9MCxudD1jZS5iLGx0PW50LG10PSgrK2w8PDMpLTgrWDkoRWUpOyEoKG10LT1udCk8YmUpOyl7dmFyIEp0PW10Pj4zO2lmKHZbKytk''@;'; put 'put ''XT1jZS5zW0JlKz0oY1tKdF18Y1tKdCsxXTw8OCk+Pig3Jm10KSYoMTw8bnQpLTFdLChtdC09bHQpPGJlKWJyZWFrO3ZbKytkXT1jZS5zW3FlKz0oY1tKdD1tdD4+M118Y1tKdCsxXTw8OCk+Pig3Jm10KSYoMTw8bHQpLTFdLG50PWNlLm5bQmVdLEJlPWNlLnRbQmVdLGx0PWNlLm5bcWVdLHFl''@;'; put 'put ''PWNlLnRbcWVdfSsrZD4yNTUmJlF1KDApfWVsc2V7Zm9yKGQ9Zi0xMjc7YTxkO2ErPTIpe3ZhciB5bj1jWysrbF07dlthXT15bj4+NCx2W2ErMV09MTUmeW59KytsfXZhciBDbj0wO2ZvcihhPTA7YTxkOysrYSkodG49dlthXSk+MTEmJlF1KDApLENuKz10biYmMTw8dG4tMTt2YXIgeG49WDko''@;'; put 'put ''Q24pKzEsUW49MTw8eG4seWk9UW4tQ247Zm9yKHlpJnlpLTEmJlF1KDApLHZbZCsrXT1YOSh5aSkrMSxhPTA7YTxkOysrYSl7dmFyIHRuOysrTVt2W2FdPSh0bj12W2FdKSYmeG4rMS10bl19dmFyIHlyPW5ldyBEdShRbjw8MSksR249eXIuc3ViYXJyYXkoMCxRbiksaWk9eXIuc3ViYXJyYXko''@;'; put 'put ''UW4pO2ZvcihEW3huXT0wLGE9eG47YT4wOy0tYSl7dmFyIF9pPURbYV07QUEoaWksYSxfaSxEW2EtMV09X2krTVthXSooMTw8eG4tYSkpfWZvcihEWzBdIT1RbiYmUXUoMCksYT0wO2E8ZDsrK2Epe3ZhciBQbj12W2FdO2lmKFBuKXt2YXIganI9RFtQbl07QUEoR24sYSxqcixEW1BuXT1qciso''@;'; put 'put ''MTw8eG4tUG4pKX19cmV0dXJuW2wse246aWksYjp4bixzOkdufV19KGMsaCk7RWUrPWgtKGg9bXRbMF0pLGwuaD1sdD1tdFsxXX1lbHNlIGx0fHxRdSgwKTsoQmU/ek10OkRBKShjLnN1YmFycmF5KGgsaCs9RWUpLHFlLnN1YmFycmF5KG50KSxsdCl9dmFyIEp0PWNbaCsrXTtpZihKdCl7MjU1''@;'; put 'put ''PT1KdD9KdD0zMjUxMisoY1toKytdfGNbaCsrXTw8OCk6SnQ+MTI3JiYoSnQ9SnQtMTI4PDw4fGNbaCsrXSk7dmFyIHluPWNbaCsrXTszJnluJiZRdSgwKTtmb3IodmFyIENuPVtOTXQsVk10LEhNdF0sdG49Mjt0bj4tMTstLXRuKXt2YXIgeG49eW4+PjIrKHRuPDwxKSYzO2lmKDE9PXhuKXt2''@;'; put 'put ''YXIgUW49bmV3IER1KFswLDAsY1toKytdXSk7Q25bdG5dPXtzOlFuLnN1YmFycmF5KDIsMyksbjpRbi5zdWJhcnJheSgwLDEpLHQ6bmV3IE1OKFFuLmJ1ZmZlciwwLDEpLGI6MH19ZWxzZSAyPT14bj8oaD0oZD1rQShjLGgsOS0oMSZ0bikpKVswXSxDblt0bl09ZFsxXSk6Mz09eG4mJihsLnR8''@;'; put 'put ''fFF1KDApLENuW3RuXT1sLnRbdG5dKX12YXIgeWk9bC50PUNuLHlyPXlpWzBdLEduPXlpWzFdLGlpPXlpWzJdLF9pPWNbRC0xXTtfaXx8UXUoMCk7dmFyIFBuPShEPDwzKS04K1g5KF9pKS1paS5iLGpyPVBuPj4zLFhuPTAsSXI9KGNbanJdfGNbanIrMV08PDgpPj4oNyZQbikmKDE8PGlpLmIp''@;'; put 'put ''LTEsJHI9KGNbanI9KFBuLT1Hbi5iKT4+M118Y1tqcisxXTw8OCk+Pig3JlBuKSYoMTw8R24uYiktMSx3aT0oY1tqcj0oUG4tPXlyLmIpPj4zXXxjW2pyKzFdPDw4KT4+KDcmUG4pJigxPDx5ci5iKS0xO2ZvcigrK0p0Oy0tSnQ7KXt2YXIgUWk9aWkuc1tJcl0sdnQ9aWkubltJcl0sTnQ9eXIu''@;'; put 'put ''c1t3aV0sV3Q9eXIublt3aV0sZ249R24uc1skcl0sJG49R24ublskcl0saHI9MTw8Z24sVXI9aHIrKChjW2pyPShQbi09Z24pPj4zXXxjW2pyKzFdPDw4fGNbanIrMl08PDE2fGNbanIrM108PDI0KT4+Pig3JlBuKSZoci0xKTtqcj0oUG4tPU10ZVtOdF0pPj4zO3ZhciBZcj1qTXRbTnRdKygo''@;'; put 'put ''Y1tqcl18Y1tqcisxXTw8OHxjW2pyKzJdPDwxNik+Pig3JlBuKSYoMTw8TXRlW050XSktMSk7anI9KFBuLT1TdGVbUWldKT4+Mzt2YXIgTmk9Qk10W1FpXSsoKGNbanJdfGNbanIrMV08PDh8Y1tqcisyXTw8MTYpPj4oNyZQbikmKDE8PFN0ZVtRaV0pLTEpO2lmKGpyPShQbi09dnQpPj4zLEly''@;'; put 'put ''PWlpLnRbSXJdKygoY1tqcl18Y1tqcisxXTw8OCk+Pig3JlBuKSYoMTw8dnQpLTEpLGpyPShQbi09V3QpPj4zLHdpPXlyLnRbd2ldKygoY1tqcl18Y1tqcisxXTw8OCk+Pig3JlBuKSYoMTw8V3QpLTEpLGpyPShQbi09JG4pPj4zLCRyPUduLnRbJHJdKygoY1tqcl18Y1tqcisxXTw8OCk+Pig3''@;'; put 'put ''JlBuKSYoMTw8JG4pLTEpLFVyPjMpbC5vWzJdPWwub1sxXSxsLm9bMV09bC5vWzBdLGwub1swXT1Vci09MztlbHNle3ZhciBybj1Vci0oMCE9TmkpO3JuPyhVcj0zPT1ybj9sLm9bMF0tMTpsLm9bcm5dLHJuPjEmJihsLm9bMl09bC5vWzFdKSxsLm9bMV09bC5vWzBdLGwub1swXT1Vcik6VXI9''@;'; put 'put ''bC5vWzBdfWZvcih0bj0wO3RuPE5pOysrdG4pcWVbWG4rdG5dPXFlW250K3RuXTtudCs9Tmk7dmFyIHVuPShYbis9TmkpLVVyO2lmKHVuPDApe3ZhciBrbj0tdW4sd3I9bC5lK3VuO2Zvcihrbj5ZciYmKGtuPVlyKSx0bj0wO3RuPGtuOysrdG4pcWVbWG4rdG5dPWwud1t3cit0bl07WG4rPWtu''@;'; put 'put ''LFlyLT1rbix1bj0wfWZvcih0bj0wO3RuPFlyOysrdG4pcWVbWG4rdG5dPXFlW3VuK3RuXTtYbis9WXJ9aWYoWG4hPW50KWZvcig7bnQ8cWUubGVuZ3RoOylxZVtYbisrXT1xZVtudCsrXTtlbHNlIFhuPXFlLmxlbmd0aDthP2wueSs9WG46cWU9Q3RlKHFlLDAsWG4pfWVsc2UgaWYoYSl7aWYo''@;'; put 'put ''bC55Kz1iZSxudClmb3IodG49MDt0bjxiZTsrK3RuKXFlW3RuXT1xZVtudCt0bl19ZWxzZSBudCYmKHFlPUN0ZShxZSxudCkpO3JldHVybiBsLmI9RCxxZX1RdSgyKX19LEdNdD0odHlwZW9mIGRvY3VtZW50PCJ1IiYmZG9jdW1lbnQsZnVuY3Rpb24obD17fSl7dmFyIGgsZixCZSxkPWwsdj1u''@;'; put 'put ''ZXcgUHJvbWlzZSgoWmUsY3QpPT57aD1aZSxmPWN0fSksRD1PYmplY3QuYXNzaWduKHt9LGQpLHFlPWNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksbnQ9Y29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUpO09iamVjdC5hc3NpZ24oZCxEKSxEPW51bGw7dmFyIG10LHRuLHhuLFFuLHlyLEduLF9p''@;'; put 'put ''LGx0PWQud2FzbUJpbmFyeSxKdD0hMTtmdW5jdGlvbiBDbihaZSxjdCl7WmV8fE5pKGN0KX1mdW5jdGlvbiBQbigpe3ZhciBaZT1tdC5idWZmZXI7ZC5IRUFQOD10bj1uZXcgSW50OEFycmF5KFplKSxkLkhFQVAxNj1Rbj1uZXcgSW50MTZBcnJheShaZSksZC5IRUFQVTg9eG49bmV3IFVpbnQ4''@;'; put 'put ''QXJyYXkoWmUpLGQuSEVBUFUxNj1uZXcgVWludDE2QXJyYXkoWmUpLGQuSEVBUDMyPXlyPW5ldyBJbnQzMkFycmF5KFplKSxkLkhFQVBVMzI9R249bmV3IFVpbnQzMkFycmF5KFplKSxkLkhFQVBGMzI9bmV3IEZsb2F0MzJBcnJheShaZSksZC5IRUFQRjY0PV9pPW5ldyBGbG9hdDY0QXJyYXko''@;'; put 'put ''WmUpfXZhciBqcj1bXSxYbj1bXSxJcj1bXSxXdD0wLGduPW51bGwsJG49bnVsbDtmdW5jdGlvbiBVcihaZSl7V3QrK31mdW5jdGlvbiBZcihaZSl7aWYoMD09LS1XdCYmKG51bGwhPT1nbiYmKGNsZWFySW50ZXJ2YWwoZ24pLGduPW51bGwpLCRuKSl7dmFyIGN0PSRuOyRuPW51bGwsY3QoKX19''@;'; put 'put ''ZnVuY3Rpb24gTmkoWmUpe250KFplPSJBYm9ydGVkKCIrWmUrIikiKSxKdD0hMCxaZSs9Ii4gQnVpbGQgd2l0aCAtc0FTU0VSVElPTlMgZm9yIG1vcmUgaW5mby4iO3ZhciBjdD1uZXcgV2ViQXNzZW1ibHkuUnVudGltZUVycm9yKFplKTt0aHJvdyBmKGN0KSxjdH12YXIgbnIsdW49WmU9Plpl''@;'; put 'put ''LnN0YXJ0c1dpdGgoImRhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCwiKTtmdW5jdGlvbiBTcihaZSl7aWYoWmU9PW5yJiZsdClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkobHQpO2lmKEJlKXJldHVybiBCZShaZSk7dGhyb3ciYm90aCBhc3luYyBhbmQgc3luYyBmZXRjaGluZyBv''@;'; put 'put ''ZiB0aGUgd2FzbSBmYWlsZWQifWZ1bmN0aW9uIFVuKFplLGN0LEx0KXtyZXR1cm4gZnVuY3Rpb24gWnIoWmUpe3JldHVybiBsdD9Qcm9taXNlLnJlc29sdmUoKS50aGVuKCgpPT5TcihaZSkpOih2b2lkIDApKFplKS50aGVuKGN0PT5uZXcgVWludDhBcnJheShjdCksKCk9PlNyKFplKSl9KFpl''@;'; put 'put ''KS50aGVuKCR0PT5XZWJBc3NlbWJseS5pbnN0YW50aWF0ZSgkdCxjdCkpLnRoZW4oTHQsJHQ9PntudChgZmFpbGVkIHRvIGFzeW5jaHJvbm91c2x5IHByZXBhcmUgd2FzbTogJHskdH1gKSxOaSgkdCl9KX12YXIgR3IsZm8sam89ezE3MzA2NDooWmUsY3QpPT57dmFyIEx0PVcwKFplKSwkdD1X''@;'; put 'put ''MChjdCk7WXQuY3JlYXRlUGF0aCgiLyIsSmEuZGlybmFtZShMdCkpLFl0LndyaXRlRmlsZShKYS5qb2luKCIvIixMdCksJHQpfX07Y2xhc3MgU2F7bmFtZT0iRXhpdFN0YXR1cyI7Y29uc3RydWN0b3IoY3Qpe3RoaXMubWVzc2FnZT1gUHJvZ3JhbSB0ZXJtaW5hdGVkIHdpdGggZXhpdCgke2N0''@;'; put 'put ''fSlgLHRoaXMuc3RhdHVzPWN0fX12YXIgVWE9WmU9Pntmb3IoO1plLmxlbmd0aD4wOylaZS5zaGlmdCgpKGQpfTtjbGFzcyBwc3tjb25zdHJ1Y3RvcihjdCl7dGhpcy5leGNQdHI9Y3QsdGhpcy5wdHI9Y3QtMjR9c2V0X3R5cGUoY3Qpe0duW3RoaXMucHRyKzQ+PjJdPWN0fWdldF90eXBlKCl7''@;'; put 'put ''cmV0dXJuIEduW3RoaXMucHRyKzQ+PjJdfXNldF9kZXN0cnVjdG9yKGN0KXtHblt0aGlzLnB0cis4Pj4yXT1jdH1nZXRfZGVzdHJ1Y3Rvcigpe3JldHVybiBHblt0aGlzLnB0cis4Pj4yXX1zZXRfY2F1Z2h0KGN0KXt0blt0aGlzLnB0cisxMl09Y3Q9Y3Q/MTowfWdldF9jYXVnaHQoKXtyZXR1''@;'; put 'put ''cm4gMCE9dG5bdGhpcy5wdHIrMTJdfXNldF9yZXRocm93bihjdCl7dG5bdGhpcy5wdHIrMTNdPWN0PWN0PzE6MH1nZXRfcmV0aHJvd24oKXtyZXR1cm4gMCE9dG5bdGhpcy5wdHIrMTNdfWluaXQoY3QsTHQpe3RoaXMuc2V0X2FkanVzdGVkX3B0cigwKSx0aGlzLnNldF90eXBlKGN0KSx0aGlz''@;'; put 'put ''LnNldF9kZXN0cnVjdG9yKEx0KX1zZXRfYWRqdXN0ZWRfcHRyKGN0KXtHblt0aGlzLnB0cisxNj4+Ml09Y3R9Z2V0X2FkanVzdGVkX3B0cigpe3JldHVybiBHblt0aGlzLnB0cisxNj4+Ml19fXZhciBKYT17aXNBYnM6WmU9PiIvIj09PVplLmNoYXJBdCgwKSxzcGxpdFBhdGg6WmU9Pi9eKFwv''@;'; put 'put ''P3wpKFtcc1xTXSo/KSgoPzpcLnsxLDJ9fFteXC9dKz98KShcLlteLlwvXSp8KSkoPzpbXC9dKikkLy5leGVjKFplKS5zbGljZSgxKSxub3JtYWxpemVBcnJheTooWmUsY3QpPT57Zm9yKHZhciBMdD0wLCR0PVplLmxlbmd0aC0xOyR0Pj0wOyR0LS0pe3ZhciBJbj1aZVskdF07Ii4iPT09SW4/''@;'; put 'put ''WmUuc3BsaWNlKCR0LDEpOiIuLiI9PT1Jbj8oWmUuc3BsaWNlKCR0LDEpLEx0KyspOkx0JiYoWmUuc3BsaWNlKCR0LDEpLEx0LS0pfWlmKGN0KWZvcig7THQ7THQtLSlaZS51bnNoaWZ0KCIuLiIpO3JldHVybiBaZX0sbm9ybWFsaXplOlplPT57dmFyIGN0PUphLmlzQWJzKFplKSxMdD0iLyI9''@;'; put 'put ''PT1aZS5zdWJzdHIoLTEpO3JldHVybiEoWmU9SmEubm9ybWFsaXplQXJyYXkoWmUuc3BsaXQoIi8iKS5maWx0ZXIoJHQ9PiEhJHQpLCFjdCkuam9pbigiLyIpKSYmIWN0JiYoWmU9Ii4iKSxaZSYmTHQmJihaZSs9Ii8iKSwoY3Q/Ii8iOiIiKStaZX0sZGlybmFtZTpaZT0+e3ZhciBjdD1KYS5z''@;'; put 'put ''cGxpdFBhdGgoWmUpLEx0PWN0WzBdLCR0PWN0WzFdO3JldHVybiBMdHx8JHQ/KCR0JiYoJHQ9JHQuc3Vic3RyKDAsJHQubGVuZ3RoLTEpKSxMdCskdCk6Ii4ifSxiYXNlbmFtZTpaZT0+e2lmKCIvIj09PVplKXJldHVybiIvIjt2YXIgY3Q9KFplPShaZT1KYS5ub3JtYWxpemUoWmUpKS5yZXBs''@;'; put 'put ''YWNlKC9cLyQvLCIiKSkubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4tMT09PWN0P1plOlplLnN1YnN0cihjdCsxKX0sam9pbjooLi4uWmUpPT5KYS5ub3JtYWxpemUoWmUuam9pbigiLyIpKSxqb2luMjooWmUsY3QpPT5KYS5ub3JtYWxpemUoWmUrIi8iK2N0KX0sSXU9WmU9PihJdT0oKCk9Pntp''@;'; put 'put ''Zigib2JqZWN0Ij09dHlwZW9mIGNyeXB0byYmImZ1bmN0aW9uIj09dHlwZW9mIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMpcmV0dXJuIFplPT5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKFplKTtOaSgiaW5pdFJhbmRvbURldmljZSIpfSkoKSkoWmUpLEhsPXtyZXNvbHZlOiguLi5aZSk9Pntmb3Io''@;'; put 'put ''dmFyIGN0PSIiLEx0PSExLCR0PVplLmxlbmd0aC0xOyR0Pj0tMSYmIUx0OyR0LS0pe3ZhciBJbj0kdD49MD9aZVskdF06WXQuY3dkKCk7aWYoInN0cmluZyIhPXR5cGVvZiBJbil0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5ncyIp''@;'; put 'put ''O2lmKCFJbilyZXR1cm4iIjtjdD1JbisiLyIrY3QsTHQ9SmEuaXNBYnMoSW4pfXJldHVybihMdD8iLyI6IiIpKyhjdD1KYS5ub3JtYWxpemVBcnJheShjdC5zcGxpdCgiLyIpLmZpbHRlcihscj0+ISFsciksIUx0KS5qb2luKCIvIikpfHwiLiJ9LHJlbGF0aXZlOihaZSxjdCk9PntmdW5jdGlv''@;'; put 'put ''biBMdChZYSl7Zm9yKHZhciBIcz0wO0hzPFlhLmxlbmd0aCYmIiI9PT1ZYVtIc107SHMrKyk7Zm9yKHZhciBybD1ZYS5sZW5ndGgtMTtybD49MCYmIiI9PT1ZYVtybF07cmwtLSk7cmV0dXJuIEhzPnJsP1tdOllhLnNsaWNlKEhzLHJsLUhzKzEpfVplPUhsLnJlc29sdmUoWmUpLnN1YnN0cigx''@;'; put 'put ''KSxjdD1IbC5yZXNvbHZlKGN0KS5zdWJzdHIoMSk7Zm9yKHZhciAkdD1MdChaZS5zcGxpdCgiLyIpKSxJbj1MdChjdC5zcGxpdCgiLyIpKSxscj1NYXRoLm1pbigkdC5sZW5ndGgsSW4ubGVuZ3RoKSxMcj1scixLcj0wO0tyPGxyO0tyKyspaWYoJHRbS3JdIT09SW5bS3JdKXtMcj1LcjticmVh''@;'; put 'put ''a312YXIgRG89W107Zm9yKEtyPUxyO0tyPCR0Lmxlbmd0aDtLcisrKURvLnB1c2goIi4uIik7cmV0dXJuKERvPURvLmNvbmNhdChJbi5zbGljZShMcikpKS5qb2luKCIvIil9fSxDYz10eXBlb2YgVGV4dERlY29kZXI8InUiP25ldyBUZXh0RGVjb2Rlcjp2b2lkIDAsbmw9KFplLGN0PTAsTHQ9''@;'; put 'put ''TmFOKT0+e2Zvcih2YXIgJHQ9Y3QrTHQsSW49Y3Q7WmVbSW5dJiYhKEluPj0kdCk7KSsrSW47aWYoSW4tY3Q+MTYmJlplLmJ1ZmZlciYmQ2MpcmV0dXJuIENjLmRlY29kZShaZS5zdWJhcnJheShjdCxJbikpO2Zvcih2YXIgbHI9IiI7Y3Q8SW47KXt2YXIgTHI9WmVbY3QrK107aWYoMTI4Jkxy''@;'; put 'put ''KXt2YXIgS3I9NjMmWmVbY3QrK107aWYoMTkyIT0oMjI0JkxyKSl7dmFyIERvPTYzJlplW2N0KytdO2lmKChMcj0yMjQ9PSgyNDAmTHIpPygxNSZMcik8PDEyfEtyPDw2fERvOig3JkxyKTw8MTh8S3I8PDEyfERvPDw2fDYzJlplW2N0KytdKTw2NTUzNilscis9U3RyaW5nLmZyb21DaGFyQ29k''@;'; put 'put ''ZShMcik7ZWxzZXt2YXIgWWE9THItNjU1MzY7bHIrPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8WWE+PjEwLDU2MzIwfDEwMjMmWWEpfX1lbHNlIGxyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKCgzMSZMcik8PDZ8S3IpfWVsc2UgbHIrPVN0cmluZy5mcm9tQ2hhckNvZGUoTHIpfXJldHVybiBs''@;'; put 'put ''cn0sanM9W10sUWE9WmU9Pntmb3IodmFyIGN0PTAsTHQ9MDtMdDxaZS5sZW5ndGg7KytMdCl7dmFyICR0PVplLmNoYXJDb2RlQXQoTHQpOyR0PD0xMjc/Y3QrKzokdDw9MjA0Nz9jdCs9MjokdD49NTUyOTYmJiR0PD01NzM0Mz8oY3QrPTQsKytMdCk6Y3QrPTN9cmV0dXJuIGN0fSxDNj0oWmUs''@;'; put 'put ''Y3QsTHQsJHQpPT57aWYoISgkdD4wKSlyZXR1cm4gMDtmb3IodmFyIEluPUx0LGxyPUx0KyR0LTEsTHI9MDtMcjxaZS5sZW5ndGg7KytMcil7dmFyIEtyPVplLmNoYXJDb2RlQXQoTHIpO2lmKEtyPj01NTI5NiYmS3I8PTU3MzQzJiYoS3I9NjU1MzYrKCgxMDIzJktyKTw8MTApfDEwMjMmWmUu''@;'; put 'put ''Y2hhckNvZGVBdCgrK0xyKSksS3I8PTEyNyl7aWYoTHQ+PWxyKWJyZWFrO2N0W0x0KytdPUtyfWVsc2UgaWYoS3I8PTIwNDcpe2lmKEx0KzE+PWxyKWJyZWFrO2N0W0x0KytdPTE5MnxLcj4+NixjdFtMdCsrXT0xMjh8NjMmS3J9ZWxzZSBpZihLcjw9NjU1MzUpe2lmKEx0KzI+PWxyKWJyZWFr''@;'; put 'put ''O2N0W0x0KytdPTIyNHxLcj4+MTIsY3RbTHQrK109MTI4fEtyPj42JjYzLGN0W0x0KytdPTEyOHw2MyZLcn1lbHNle2lmKEx0KzM+PWxyKWJyZWFrO2N0W0x0KytdPTI0MHxLcj4+MTgsY3RbTHQrK109MTI4fEtyPj4xMiY2MyxjdFtMdCsrXT0xMjh8S3I+PjYmNjMsY3RbTHQrK109MTI4fDYz''@;'; put 'put ''JktyfX1yZXR1cm4gY3RbTHRdPTAsTHQtSW59LGw0PXt0dHlzOltdLGluaXQoKXt9LHNodXRkb3duKCl7fSxyZWdpc3RlcihaZSxjdCl7bDQudHR5c1taZV09e2lucHV0OltdLG91dHB1dDpbXSxvcHM6Y3R9LFl0LnJlZ2lzdGVyRGV2aWNlKFplLGw0LnN0cmVhbV9vcHMpfSxzdHJlYW1fb3Bz''@;'; put 'put ''OntvcGVuKFplKXt2YXIgY3Q9bDQudHR5c1taZS5ub2RlLnJkZXZdO2lmKCFjdCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0Myk7WmUudHR5PWN0LFplLnNlZWthYmxlPSExfSxjbG9zZShaZSl7WmUudHR5Lm9wcy5mc3luYyhaZS50dHkpfSxmc3luYyhaZSl7WmUudHR5Lm9wcy5mc3luYyha''@;'; put 'put ''ZS50dHkpfSxyZWFkKFplLGN0LEx0LCR0LEluKXtpZighWmUudHR5fHwhWmUudHR5Lm9wcy5nZXRfY2hhcil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig2MCk7Zm9yKHZhciBscj0wLExyPTA7THI8JHQ7THIrKyl7dmFyIEtyO3RyeXtLcj1aZS50dHkub3BzLmdldF9jaGFyKFplLnR0eSl9Y2F0''@;'; put 'put ''Y2h7dGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjkpfWlmKHZvaWQgMD09PUtyJiYwPT09bHIpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNik7aWYobnVsbD09S3IpYnJlYWs7bHIrKyxjdFtMdCtMcl09S3J9cmV0dXJuIGxyJiYoWmUubm9kZS50aW1lc3RhbXA9RGF0ZS5ub3coKSksbHJ9LHdy''@;'; put 'put ''aXRlKFplLGN0LEx0LCR0LEluKXtpZighWmUudHR5fHwhWmUudHR5Lm9wcy5wdXRfY2hhcil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig2MCk7dHJ5e2Zvcih2YXIgbHI9MDtscjwkdDtscisrKVplLnR0eS5vcHMucHV0X2NoYXIoWmUudHR5LGN0W0x0K2xyXSl9Y2F0Y2h7dGhyb3cgbmV3IFl0''@;'; put 'put ''LkVycm5vRXJyb3IoMjkpfXJldHVybiAkdCYmKFplLm5vZGUudGltZXN0YW1wPURhdGUubm93KCkpLGxyfX0sZGVmYXVsdF90dHlfb3BzOntnZXRfY2hhcjpaZT0+anMubGVuZ3RoP2pzLnNoaWZ0KCk6bnVsbCxwdXRfY2hhcihaZSxjdCl7bnVsbD09PWN0fHwxMD09PWN0PyhxZShubChaZS5v''@;'; put 'put ''dXRwdXQpKSxaZS5vdXRwdXQ9W10pOjAhPWN0JiZaZS5vdXRwdXQucHVzaChjdCl9LGZzeW5jKFplKXtaZS5vdXRwdXQmJlplLm91dHB1dC5sZW5ndGg+MCYmKHFlKG5sKFplLm91dHB1dCkpLFplLm91dHB1dD1bXSl9LGlvY3RsX3RjZ2V0czpaZT0+KHtjX2lmbGFnOjI1ODU2LGNfb2ZsYWc6''@;'; put 'put ''NSxjX2NmbGFnOjE5MSxjX2xmbGFnOjM1Mzg3LGNfY2M6WzMsMjgsMTI3LDIxLDQsMCwxLDAsMTcsMTksMjYsMCwxOCwxNSwyMywyMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXX0pLGlvY3RsX3Rjc2V0czooWmUsY3QsTHQpPT4wLGlvY3RsX3Rpb2Nnd2luc3o6WmU9PlsyNCw4''@;'; put 'put ''MF19LGRlZmF1bHRfdHR5MV9vcHM6e3B1dF9jaGFyKFplLGN0KXtudWxsPT09Y3R8fDEwPT09Y3Q/KG50KG5sKFplLm91dHB1dCkpLFplLm91dHB1dD1bXSk6MCE9Y3QmJlplLm91dHB1dC5wdXNoKGN0KX0sZnN5bmMoWmUpe1plLm91dHB1dCYmWmUub3V0cHV0Lmxlbmd0aD4wJiYobnQobmwo''@;'; put 'put ''WmUub3V0cHV0KSksWmUub3V0cHV0PVtdKX19fSxSQT0oWmUsY3QpPT5NYXRoLmNlaWwoWmUvY3QpKmN0LExOPVplPT57WmU9UkEoWmUsNjU1MzYpO3ZhciBjdD1TN2UoNjU1MzYsWmUpO3JldHVybiBjdCYmKChaZSxjdCk9Pnt4bi5maWxsKDAsWmUsWmUrY3QpfSkoY3QsWmUpLGN0fSxLbz17''@;'; put 'put ''b3BzX3RhYmxlOm51bGwsbW91bnQ6WmU9PktvLmNyZWF0ZU5vZGUobnVsbCwiLyIsMTY4OTUsMCksY3JlYXRlTm9kZShaZSxjdCxMdCwkdCl7aWYoWXQuaXNCbGtkZXYoTHQpfHxZdC5pc0ZJRk8oTHQpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDYzKTtLby5vcHNfdGFibGV8fD17ZGlyOntu''@;'; put 'put ''b2RlOntnZXRhdHRyOktvLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjpLby5ub2RlX29wcy5zZXRhdHRyLGxvb2t1cDpLby5ub2RlX29wcy5sb29rdXAsbWtub2Q6S28ubm9kZV9vcHMubWtub2QscmVuYW1lOktvLm5vZGVfb3BzLnJlbmFtZSx1bmxpbms6S28ubm9kZV9vcHMudW5saW5rLHJt''@;'; put 'put ''ZGlyOktvLm5vZGVfb3BzLnJtZGlyLHJlYWRkaXI6S28ubm9kZV9vcHMucmVhZGRpcixzeW1saW5rOktvLm5vZGVfb3BzLnN5bWxpbmt9LHN0cmVhbTp7bGxzZWVrOktvLnN0cmVhbV9vcHMubGxzZWVrfX0sZmlsZTp7bm9kZTp7Z2V0YXR0cjpLby5ub2RlX29wcy5nZXRhdHRyLHNldGF0dHI6''@;'; put 'put ''S28ubm9kZV9vcHMuc2V0YXR0cn0sc3RyZWFtOntsbHNlZWs6S28uc3RyZWFtX29wcy5sbHNlZWsscmVhZDpLby5zdHJlYW1fb3BzLnJlYWQsd3JpdGU6S28uc3RyZWFtX29wcy53cml0ZSxhbGxvY2F0ZTpLby5zdHJlYW1fb3BzLmFsbG9jYXRlLG1tYXA6S28uc3RyZWFtX29wcy5tbWFwLG1z''@;'; put 'put ''eW5jOktvLnN0cmVhbV9vcHMubXN5bmN9fSxsaW5rOntub2RlOntnZXRhdHRyOktvLm5vZGVfb3BzLmdldGF0dHIsc2V0YXR0cjpLby5ub2RlX29wcy5zZXRhdHRyLHJlYWRsaW5rOktvLm5vZGVfb3BzLnJlYWRsaW5rfSxzdHJlYW06e319LGNocmRldjp7bm9kZTp7Z2V0YXR0cjpLby5ub2Rl''@;'; put 'put ''X29wcy5nZXRhdHRyLHNldGF0dHI6S28ubm9kZV9vcHMuc2V0YXR0cn0sc3RyZWFtOll0LmNocmRldl9zdHJlYW1fb3BzfX07dmFyIEluPVl0LmNyZWF0ZU5vZGUoWmUsY3QsTHQsJHQpO3JldHVybiBZdC5pc0RpcihJbi5tb2RlKT8oSW4ubm9kZV9vcHM9S28ub3BzX3RhYmxlLmRpci5ub2Rl''@;'; put 'put ''LEluLnN0cmVhbV9vcHM9S28ub3BzX3RhYmxlLmRpci5zdHJlYW0sSW4uY29udGVudHM9e30pOll0LmlzRmlsZShJbi5tb2RlKT8oSW4ubm9kZV9vcHM9S28ub3BzX3RhYmxlLmZpbGUubm9kZSxJbi5zdHJlYW1fb3BzPUtvLm9wc190YWJsZS5maWxlLnN0cmVhbSxJbi51c2VkQnl0ZXM9MCxJ''@;'; put 'put ''bi5jb250ZW50cz1udWxsKTpZdC5pc0xpbmsoSW4ubW9kZSk/KEluLm5vZGVfb3BzPUtvLm9wc190YWJsZS5saW5rLm5vZGUsSW4uc3RyZWFtX29wcz1Lby5vcHNfdGFibGUubGluay5zdHJlYW0pOll0LmlzQ2hyZGV2KEluLm1vZGUpJiYoSW4ubm9kZV9vcHM9S28ub3BzX3RhYmxlLmNocmRl''@;'; put 'put ''di5ub2RlLEluLnN0cmVhbV9vcHM9S28ub3BzX3RhYmxlLmNocmRldi5zdHJlYW0pLEluLnRpbWVzdGFtcD1EYXRlLm5vdygpLFplJiYoWmUuY29udGVudHNbY3RdPUluLFplLnRpbWVzdGFtcD1Jbi50aW1lc3RhbXApLElufSxnZXRGaWxlRGF0YUFzVHlwZWRBcnJheTpaZT0+WmUuY29udGVu''@;'; put 'put ''dHM/WmUuY29udGVudHMuc3ViYXJyYXk/WmUuY29udGVudHMuc3ViYXJyYXkoMCxaZS51c2VkQnl0ZXMpOm5ldyBVaW50OEFycmF5KFplLmNvbnRlbnRzKTpuZXcgVWludDhBcnJheSgwKSxleHBhbmRGaWxlU3RvcmFnZShaZSxjdCl7dmFyIEx0PVplLmNvbnRlbnRzP1plLmNvbnRlbnRzLmxl''@;'; put 'put ''bmd0aDowO2lmKCEoTHQ+PWN0KSl7Y3Q9TWF0aC5tYXgoY3QsTHQqKEx0PDEwNDg1NzY/MjoxLjEyNSk+Pj4wKSwwIT1MdCYmKGN0PU1hdGgubWF4KGN0LDI1NikpO3ZhciBJbj1aZS5jb250ZW50cztaZS5jb250ZW50cz1uZXcgVWludDhBcnJheShjdCksWmUudXNlZEJ5dGVzPjAmJlplLmNv''@;'; put 'put ''bnRlbnRzLnNldChJbi5zdWJhcnJheSgwLFplLnVzZWRCeXRlcyksMCl9fSxyZXNpemVGaWxlU3RvcmFnZShaZSxjdCl7aWYoWmUudXNlZEJ5dGVzIT1jdClpZigwPT1jdClaZS5jb250ZW50cz1udWxsLFplLnVzZWRCeXRlcz0wO2Vsc2V7dmFyIEx0PVplLmNvbnRlbnRzO1plLmNvbnRlbnRz''@;'; put 'put ''PW5ldyBVaW50OEFycmF5KGN0KSxMdCYmWmUuY29udGVudHMuc2V0KEx0LnN1YmFycmF5KDAsTWF0aC5taW4oY3QsWmUudXNlZEJ5dGVzKSkpLFplLnVzZWRCeXRlcz1jdH19LG5vZGVfb3BzOntnZXRhdHRyKFplKXt2YXIgY3Q9e307cmV0dXJuIGN0LmRldj1ZdC5pc0NocmRldihaZS5tb2Rl''@;'; put 'put ''KT9aZS5pZDoxLGN0Lmlubz1aZS5pZCxjdC5tb2RlPVplLm1vZGUsY3Qubmxpbms9MSxjdC51aWQ9MCxjdC5naWQ9MCxjdC5yZGV2PVplLnJkZXYsY3Quc2l6ZT1ZdC5pc0RpcihaZS5tb2RlKT80MDk2Oll0LmlzRmlsZShaZS5tb2RlKT9aZS51c2VkQnl0ZXM6WXQuaXNMaW5rKFplLm1vZGUp''@;'; put 'put ''P1plLmxpbmsubGVuZ3RoOjAsY3QuYXRpbWU9bmV3IERhdGUoWmUudGltZXN0YW1wKSxjdC5tdGltZT1uZXcgRGF0ZShaZS50aW1lc3RhbXApLGN0LmN0aW1lPW5ldyBEYXRlKFplLnRpbWVzdGFtcCksY3QuYmxrc2l6ZT00MDk2LGN0LmJsb2Nrcz1NYXRoLmNlaWwoY3Quc2l6ZS9jdC5ibGtz''@;'; put 'put ''aXplKSxjdH0sc2V0YXR0cihaZSxjdCl7dm9pZCAwIT09Y3QubW9kZSYmKFplLm1vZGU9Y3QubW9kZSksdm9pZCAwIT09Y3QudGltZXN0YW1wJiYoWmUudGltZXN0YW1wPWN0LnRpbWVzdGFtcCksdm9pZCAwIT09Y3Quc2l6ZSYmS28ucmVzaXplRmlsZVN0b3JhZ2UoWmUsY3Quc2l6ZSl9LGxv''@;'; put 'put ''b2t1cChaZSxjdCl7dGhyb3cgS28uZG9lc05vdEV4aXN0RXJyb3J9LG1rbm9kOihaZSxjdCxMdCwkdCk9PktvLmNyZWF0ZU5vZGUoWmUsY3QsTHQsJHQpLHJlbmFtZShaZSxjdCxMdCl7aWYoWXQuaXNEaXIoWmUubW9kZSkpe3ZhciAkdDt0cnl7JHQ9WXQubG9va3VwTm9kZShjdCxMdCl9Y2F0''@;'; put 'put ''Y2h7fWlmKCR0KWZvcih2YXIgSW4gaW4gJHQuY29udGVudHMpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNTUpfWRlbGV0ZSBaZS5wYXJlbnQuY29udGVudHNbWmUubmFtZV0sWmUucGFyZW50LnRpbWVzdGFtcD1EYXRlLm5vdygpLFplLm5hbWU9THQsY3QuY29udGVudHNbTHRdPVplLGN0LnRp''@;'; put 'put ''bWVzdGFtcD1aZS5wYXJlbnQudGltZXN0YW1wfSx1bmxpbmsoWmUsY3Qpe2RlbGV0ZSBaZS5jb250ZW50c1tjdF0sWmUudGltZXN0YW1wPURhdGUubm93KCl9LHJtZGlyKFplLGN0KXt2YXIgTHQ9WXQubG9va3VwTm9kZShaZSxjdCk7Zm9yKHZhciAkdCBpbiBMdC5jb250ZW50cyl0aHJvdyBu''@;'; put 'put ''ZXcgWXQuRXJybm9FcnJvcig1NSk7ZGVsZXRlIFplLmNvbnRlbnRzW2N0XSxaZS50aW1lc3RhbXA9RGF0ZS5ub3coKX0scmVhZGRpcihaZSl7dmFyIGN0PVsiLiIsIi4uIl07Zm9yKHZhciBMdCBvZiBPYmplY3Qua2V5cyhaZS5jb250ZW50cykpY3QucHVzaChMdCk7cmV0dXJuIGN0fSxzeW1s''@;'; put 'put ''aW5rKFplLGN0LEx0KXt2YXIgJHQ9S28uY3JlYXRlTm9kZShaZSxjdCw0MTQ3MSwwKTtyZXR1cm4gJHQubGluaz1MdCwkdH0scmVhZGxpbmsoWmUpe2lmKCFZdC5pc0xpbmsoWmUubW9kZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO3JldHVybiBaZS5saW5rfX0sc3RyZWFtX29wczp7''@;'; put 'put ''cmVhZChaZSxjdCxMdCwkdCxJbil7dmFyIGxyPVplLm5vZGUuY29udGVudHM7aWYoSW4+PVplLm5vZGUudXNlZEJ5dGVzKXJldHVybiAwO3ZhciBMcj1NYXRoLm1pbihaZS5ub2RlLnVzZWRCeXRlcy1JbiwkdCk7aWYoTHI+OCYmbHIuc3ViYXJyYXkpY3Quc2V0KGxyLnN1YmFycmF5KEluLElu''@;'; put 'put ''K0xyKSxMdCk7ZWxzZSBmb3IodmFyIEtyPTA7S3I8THI7S3IrKyljdFtMdCtLcl09bHJbSW4rS3JdO3JldHVybiBMcn0sd3JpdGUoWmUsY3QsTHQsJHQsSW4sbHIpe2lmKGN0LmJ1ZmZlcj09PXRuLmJ1ZmZlciYmKGxyPSExKSwhJHQpcmV0dXJuIDA7dmFyIExyPVplLm5vZGU7aWYoTHIudGlt''@;'; put 'put ''ZXN0YW1wPURhdGUubm93KCksY3Quc3ViYXJyYXkmJighTHIuY29udGVudHN8fExyLmNvbnRlbnRzLnN1YmFycmF5KSl7aWYobHIpcmV0dXJuIExyLmNvbnRlbnRzPWN0LnN1YmFycmF5KEx0LEx0KyR0KSxMci51c2VkQnl0ZXM9JHQsJHQ7aWYoMD09PUxyLnVzZWRCeXRlcyYmMD09PUluKXJl''@;'; put 'put ''dHVybiBMci5jb250ZW50cz1jdC5zbGljZShMdCxMdCskdCksTHIudXNlZEJ5dGVzPSR0LCR0O2lmKEluKyR0PD1Mci51c2VkQnl0ZXMpcmV0dXJuIExyLmNvbnRlbnRzLnNldChjdC5zdWJhcnJheShMdCxMdCskdCksSW4pLCR0fWlmKEtvLmV4cGFuZEZpbGVTdG9yYWdlKExyLEluKyR0KSxM''@;'; put 'put ''ci5jb250ZW50cy5zdWJhcnJheSYmY3Quc3ViYXJyYXkpTHIuY29udGVudHMuc2V0KGN0LnN1YmFycmF5KEx0LEx0KyR0KSxJbik7ZWxzZSBmb3IodmFyIEtyPTA7S3I8JHQ7S3IrKylMci5jb250ZW50c1tJbitLcl09Y3RbTHQrS3JdO3JldHVybiBMci51c2VkQnl0ZXM9TWF0aC5tYXgoTHIu''@;'; put 'put ''dXNlZEJ5dGVzLEluKyR0KSwkdH0sbGxzZWVrKFplLGN0LEx0KXt2YXIgJHQ9Y3Q7aWYoMT09PUx0PyR0Kz1aZS5wb3NpdGlvbjoyPT09THQmJll0LmlzRmlsZShaZS5ub2RlLm1vZGUpJiYoJHQrPVplLm5vZGUudXNlZEJ5dGVzKSwkdDwwKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTty''@;'; put 'put ''ZXR1cm4gJHR9LGFsbG9jYXRlKFplLGN0LEx0KXtLby5leHBhbmRGaWxlU3RvcmFnZShaZS5ub2RlLGN0K0x0KSxaZS5ub2RlLnVzZWRCeXRlcz1NYXRoLm1heChaZS5ub2RlLnVzZWRCeXRlcyxjdCtMdCl9LG1tYXAoWmUsY3QsTHQsJHQsSW4pe2lmKCFZdC5pc0ZpbGUoWmUubm9kZS5tb2Rl''@;'; put 'put ''KSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0Myk7dmFyIGxyLExyLEtyPVplLm5vZGUuY29udGVudHM7aWYoMiZJbnx8IUtyfHxLci5idWZmZXIhPT10bi5idWZmZXIpe2lmKExyPSEwLCEobHI9TE4oY3QpKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0OCk7S3ImJigoTHQ+MHx8THQrY3Q8''@;'; put 'put ''S3IubGVuZ3RoKSYmKEtyPUtyLnN1YmFycmF5P0tyLnN1YmFycmF5KEx0LEx0K2N0KTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChLcixMdCxMdCtjdCkpLHRuLnNldChLcixscikpfWVsc2UgTHI9ITEsbHI9S3IuYnl0ZU9mZnNldDtyZXR1cm57cHRyOmxyLGFsbG9jYXRlZDpMcn19LG1z''@;'; put 'put ''eW5jOihaZSxjdCxMdCwkdCxJbik9PihLby5zdHJlYW1fb3BzLndyaXRlKFplLGN0LDAsJHQsTHQsITEpLDApfX0sT049W10sT0E9KFplLGN0KT0+e3ZhciBMdD0wO3JldHVybiBaZSYmKEx0fD0zNjUpLGN0JiYoTHR8PTE0NiksTHR9LFl0PXtyb290Om51bGwsbW91bnRzOltdLGRldmljZXM6''@;'; put 'put ''e30sc3RyZWFtczpbXSxuZXh0SW5vZGU6MSxuYW1lVGFibGU6bnVsbCxjdXJyZW50UGF0aDoiLyIsaW5pdGlhbGl6ZWQ6ITEsaWdub3JlUGVybWlzc2lvbnM6ITAsRXJybm9FcnJvcjpjbGFzc3tuYW1lPSJFcnJub0Vycm9yIjtjb25zdHJ1Y3RvcihaZSl7dGhpcy5lcnJubz1aZX19LGZpbGVz''@;'; put 'put ''eXN0ZW1zOm51bGwsc3luY0ZTUmVxdWVzdHM6MCxGU1N0cmVhbTpjbGFzc3tzaGFyZWQ9e307Z2V0IG9iamVjdCgpe3JldHVybiB0aGlzLm5vZGV9c2V0IG9iamVjdChaZSl7dGhpcy5ub2RlPVplfWdldCBpc1JlYWQoKXtyZXR1cm4gMSE9KDIwOTcxNTUmdGhpcy5mbGFncyl9Z2V0IGlzV3Jp''@;'; put 'put ''dGUoKXtyZXR1cm4hISgyMDk3MTU1JnRoaXMuZmxhZ3MpfWdldCBpc0FwcGVuZCgpe3JldHVybiAxMDI0JnRoaXMuZmxhZ3N9Z2V0IGZsYWdzKCl7cmV0dXJuIHRoaXMuc2hhcmVkLmZsYWdzfXNldCBmbGFncyhaZSl7dGhpcy5zaGFyZWQuZmxhZ3M9WmV9Z2V0IHBvc2l0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuc2hhcmVkLnBvc2l0aW9ufXNldCBwb3NpdGlvbihaZSl7dGhpcy5zaGFyZWQucG9zaXRpb249WmV9fSxGU05vZGU6Y2xhc3N7bm9kZV9vcHM9e307c3RyZWFtX29wcz17fTtyZWFkTW9kZT0zNjU7d3JpdGVNb2RlPTE0Njttb3VudGVkPW51bGw7Y29uc3RydWN0b3IoWmUsY3QsTHQs''@;'; put 'put ''JHQpe1plfHwoWmU9dGhpcyksdGhpcy5wYXJlbnQ9WmUsdGhpcy5tb3VudD1aZS5tb3VudCx0aGlzLmlkPVl0Lm5leHRJbm9kZSsrLHRoaXMubmFtZT1jdCx0aGlzLm1vZGU9THQsdGhpcy5yZGV2PSR0fWdldCByZWFkKCl7cmV0dXJuKHRoaXMubW9kZSZ0aGlzLnJlYWRNb2RlKT09PXRoaXMu''@;'; put 'put ''cmVhZE1vZGV9c2V0IHJlYWQoWmUpe1plP3RoaXMubW9kZXw9dGhpcy5yZWFkTW9kZTp0aGlzLm1vZGUmPX50aGlzLnJlYWRNb2RlfWdldCB3cml0ZSgpe3JldHVybih0aGlzLm1vZGUmdGhpcy53cml0ZU1vZGUpPT09dGhpcy53cml0ZU1vZGV9c2V0IHdyaXRlKFplKXtaZT90aGlzLm1vZGV8''@;'; put 'put ''PXRoaXMud3JpdGVNb2RlOnRoaXMubW9kZSY9fnRoaXMud3JpdGVNb2RlfWdldCBpc0ZvbGRlcigpe3JldHVybiBZdC5pc0Rpcih0aGlzLm1vZGUpfWdldCBpc0RldmljZSgpe3JldHVybiBZdC5pc0NocmRldih0aGlzLm1vZGUpfX0sbG9va3VwUGF0aChaZSxjdD17fSl7aWYoIShaZT1IbC5y''@;'; put 'put ''ZXNvbHZlKFplKSkpcmV0dXJue3BhdGg6IiIsbm9kZTpudWxsfTtpZigoY3Q9T2JqZWN0LmFzc2lnbih7Zm9sbG93X21vdW50OiEwLHJlY3Vyc2VfY291bnQ6MH0sY3QpKS5yZWN1cnNlX2NvdW50PjgpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMzIpO2Zvcih2YXIgJHQ9WmUuc3BsaXQoIi8i''@;'; put 'put ''KS5maWx0ZXIocmw9PiEhcmwpLEluPVl0LnJvb3QsbHI9Ii8iLExyPTA7THI8JHQubGVuZ3RoO0xyKyspe3ZhciBLcj1Mcj09PSR0Lmxlbmd0aC0xO2lmKEtyJiZjdC5wYXJlbnQpYnJlYWs7aWYoSW49WXQubG9va3VwTm9kZShJbiwkdFtMcl0pLGxyPUphLmpvaW4yKGxyLCR0W0xyXSksWXQu''@;'; put 'put ''aXNNb3VudHBvaW50KEluKSYmKCFLcnx8S3ImJmN0LmZvbGxvd19tb3VudCkmJihJbj1Jbi5tb3VudGVkLnJvb3QpLCFLcnx8Y3QuZm9sbG93KWZvcih2YXIgRG89MDtZdC5pc0xpbmsoSW4ubW9kZSk7KXt2YXIgWWE9WXQucmVhZGxpbmsobHIpO2lmKGxyPUhsLnJlc29sdmUoSmEuZGlybmFt''@;'; put 'put ''ZShsciksWWEpLEluPVl0Lmxvb2t1cFBhdGgobHIse3JlY3Vyc2VfY291bnQ6Y3QucmVjdXJzZV9jb3VudCsxfSkubm9kZSxEbysrPjQwKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDMyKX19cmV0dXJue3BhdGg6bHIsbm9kZTpJbn19LGdldFBhdGgoWmUpe2Zvcih2YXIgY3Q7Oyl7aWYoWXQu''@;'; put 'put ''aXNSb290KFplKSl7dmFyIEx0PVplLm1vdW50Lm1vdW50cG9pbnQ7cmV0dXJuIGN0PyIvIiE9PUx0W0x0Lmxlbmd0aC0xXT9gJHtMdH0vJHtjdH1gOkx0K2N0Okx0fWN0PWN0P2Ake1plLm5hbWV9LyR7Y3R9YDpaZS5uYW1lLFplPVplLnBhcmVudH19LGhhc2hOYW1lKFplLGN0KXtmb3IodmFy''@;'; put 'put ''IEx0PTAsJHQ9MDskdDxjdC5sZW5ndGg7JHQrKylMdD0oTHQ8PDUpLUx0K2N0LmNoYXJDb2RlQXQoJHQpfDA7cmV0dXJuKFplK0x0Pj4+MCklWXQubmFtZVRhYmxlLmxlbmd0aH0saGFzaEFkZE5vZGUoWmUpe3ZhciBjdD1ZdC5oYXNoTmFtZShaZS5wYXJlbnQuaWQsWmUubmFtZSk7WmUubmFt''@;'; put 'put ''ZV9uZXh0PVl0Lm5hbWVUYWJsZVtjdF0sWXQubmFtZVRhYmxlW2N0XT1aZX0saGFzaFJlbW92ZU5vZGUoWmUpe3ZhciBjdD1ZdC5oYXNoTmFtZShaZS5wYXJlbnQuaWQsWmUubmFtZSk7aWYoWXQubmFtZVRhYmxlW2N0XT09PVplKVl0Lm5hbWVUYWJsZVtjdF09WmUubmFtZV9uZXh0O2Vsc2Ug''@;'; put 'put ''Zm9yKHZhciBMdD1ZdC5uYW1lVGFibGVbY3RdO0x0Oyl7aWYoTHQubmFtZV9uZXh0PT09WmUpe0x0Lm5hbWVfbmV4dD1aZS5uYW1lX25leHQ7YnJlYWt9THQ9THQubmFtZV9uZXh0fX0sbG9va3VwTm9kZShaZSxjdCl7dmFyIEx0PVl0Lm1heUxvb2t1cChaZSk7aWYoTHQpdGhyb3cgbmV3IFl0''@;'; put 'put ''LkVycm5vRXJyb3IoTHQpO2Zvcih2YXIgJHQ9WXQuaGFzaE5hbWUoWmUuaWQsY3QpLEluPVl0Lm5hbWVUYWJsZVskdF07SW47SW49SW4ubmFtZV9uZXh0KWlmKEluLnBhcmVudC5pZD09PVplLmlkJiZJbi5uYW1lPT09Y3QpcmV0dXJuIEluO3JldHVybiBZdC5sb29rdXAoWmUsY3QpfSxjcmVh''@;'; put 'put ''dGVOb2RlKFplLGN0LEx0LCR0KXt2YXIgSW49bmV3IFl0LkZTTm9kZShaZSxjdCxMdCwkdCk7cmV0dXJuIFl0Lmhhc2hBZGROb2RlKEluKSxJbn0sZGVzdHJveU5vZGUoWmUpe1l0Lmhhc2hSZW1vdmVOb2RlKFplKX0saXNSb290OlplPT5aZT09PVplLnBhcmVudCxpc01vdW50cG9pbnQ6WmU9''@;'; put 'put ''PiEhWmUubW91bnRlZCxpc0ZpbGU6WmU9PjMyNzY4PT0oNjE0NDAmWmUpLGlzRGlyOlplPT4xNjM4ND09KDYxNDQwJlplKSxpc0xpbms6WmU9PjQwOTYwPT0oNjE0NDAmWmUpLGlzQ2hyZGV2OlplPT44MTkyPT0oNjE0NDAmWmUpLGlzQmxrZGV2OlplPT4yNDU3Nj09KDYxNDQwJlplKSxpc0ZJ''@;'; put 'put ''Rk86WmU9PjQwOTY9PSg2MTQ0MCZaZSksaXNTb2NrZXQ6WmU9PiEoNDkxNTImflplKSxmbGFnc1RvUGVybWlzc2lvblN0cmluZyhaZSl7dmFyIGN0PVsiciIsInciLCJydyJdWzMmWmVdO3JldHVybiA1MTImWmUmJihjdCs9InciKSxjdH0sbm9kZVBlcm1pc3Npb25zOihaZSxjdCk9Pll0Lmln''@;'; put 'put ''bm9yZVBlcm1pc3Npb25zPzA6Y3QuaW5jbHVkZXMoInIiKSYmISgyOTImWmUubW9kZSl8fGN0LmluY2x1ZGVzKCJ3IikmJiEoMTQ2JlplLm1vZGUpfHxjdC5pbmNsdWRlcygieCIpJiYhKDczJlplLm1vZGUpPzI6MCxtYXlMb29rdXA6WmU9Pll0LmlzRGlyKFplLm1vZGUpP1l0Lm5vZGVQZXJt''@;'; put 'put ''aXNzaW9ucyhaZSwieCIpfHwoWmUubm9kZV9vcHMubG9va3VwPzA6Mik6NTQsbWF5Q3JlYXRlKFplLGN0KXt0cnl7cmV0dXJuIFl0Lmxvb2t1cE5vZGUoWmUsY3QpLDIwfWNhdGNoe31yZXR1cm4gWXQubm9kZVBlcm1pc3Npb25zKFplLCJ3eCIpfSxtYXlEZWxldGUoWmUsY3QsTHQpe3ZhciAk''@;'; put 'put ''dDt0cnl7JHQ9WXQubG9va3VwTm9kZShaZSxjdCl9Y2F0Y2gobHIpe3JldHVybiBsci5lcnJub312YXIgSW49WXQubm9kZVBlcm1pc3Npb25zKFplLCJ3eCIpO2lmKEluKXJldHVybiBJbjtpZihMdCl7aWYoIVl0LmlzRGlyKCR0Lm1vZGUpKXJldHVybiA1NDtpZihZdC5pc1Jvb3QoJHQpfHxZ''@;'; put 'put ''dC5nZXRQYXRoKCR0KT09PVl0LmN3ZCgpKXJldHVybiAxMH1lbHNlIGlmKFl0LmlzRGlyKCR0Lm1vZGUpKXJldHVybiAzMTtyZXR1cm4gMH0sbWF5T3BlbjooWmUsY3QpPT5aZT9ZdC5pc0xpbmsoWmUubW9kZSk/MzI6WXQuaXNEaXIoWmUubW9kZSkmJigiciIhPT1ZdC5mbGFnc1RvUGVybWlz''@;'; put 'put ''c2lvblN0cmluZyhjdCl8fDUxMiZjdCk/MzE6WXQubm9kZVBlcm1pc3Npb25zKFplLFl0LmZsYWdzVG9QZXJtaXNzaW9uU3RyaW5nKGN0KSk6NDQsTUFYX09QRU5fRkRTOjQwOTYsbmV4dGZkKCl7Zm9yKHZhciBaZT0wO1plPD1ZdC5NQVhfT1BFTl9GRFM7WmUrKylpZighWXQuc3RyZWFtc1ta''@;'; put 'put ''ZV0pcmV0dXJuIFplO3Rocm93IG5ldyBZdC5FcnJub0Vycm9yKDMzKX0sZ2V0U3RyZWFtQ2hlY2tlZChaZSl7dmFyIGN0PVl0LmdldFN0cmVhbShaZSk7aWYoIWN0KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDgpO3JldHVybiBjdH0sZ2V0U3RyZWFtOlplPT5ZdC5zdHJlYW1zW1plXSxjcmVh''@;'; put 'put ''dGVTdHJlYW06KFplLGN0PS0xKT0+KFplPU9iamVjdC5hc3NpZ24obmV3IFl0LkZTU3RyZWFtLFplKSwtMT09Y3QmJihjdD1ZdC5uZXh0ZmQoKSksWmUuZmQ9Y3QsWXQuc3RyZWFtc1tjdF09WmUsWmUpLGNsb3NlU3RyZWFtKFplKXtZdC5zdHJlYW1zW1plXT1udWxsfSxkdXBTdHJlYW0oWmUs''@;'; put 'put ''Y3Q9LTEpe3ZhciBMdD1ZdC5jcmVhdGVTdHJlYW0oWmUsY3QpO3JldHVybiBMdC5zdHJlYW1fb3BzPy5kdXA/LihMdCksTHR9LGNocmRldl9zdHJlYW1fb3BzOntvcGVuKFplKXt2YXIgY3Q9WXQuZ2V0RGV2aWNlKFplLm5vZGUucmRldik7WmUuc3RyZWFtX29wcz1jdC5zdHJlYW1fb3BzLFpl''@;'; put 'put ''LnN0cmVhbV9vcHMub3Blbj8uKFplKX0sbGxzZWVrKCl7dGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNzApfX0sbWFqb3I6WmU9PlplPj44LG1pbm9yOlplPT4yNTUmWmUsbWFrZWRldjooWmUsY3QpPT5aZTw8OHxjdCxyZWdpc3RlckRldmljZShaZSxjdCl7WXQuZGV2aWNlc1taZV09e3N0cmVh''@;'; put 'put ''bV9vcHM6Y3R9fSxnZXREZXZpY2U6WmU9Pll0LmRldmljZXNbWmVdLGdldE1vdW50cyhaZSl7Zm9yKHZhciBjdD1bXSxMdD1bWmVdO0x0Lmxlbmd0aDspe3ZhciAkdD1MdC5wb3AoKTtjdC5wdXNoKCR0KSxMdC5wdXNoKC4uLiR0Lm1vdW50cyl9cmV0dXJuIGN0fSxzeW5jZnMoWmUsY3QpeyJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiBaZSYmKGN0PVplLFplPSExKSxZdC5zeW5jRlNSZXF1ZXN0cysrLFl0LnN5bmNGU1JlcXVlc3RzPjEmJm50KGB3YXJuaW5nOiAke1l0LnN5bmNGU1JlcXVlc3RzfSBGUy5zeW5jZnMgb3BlcmF0aW9ucyBpbiBmbGlnaHQgYXQgb25jZSwgcHJvYmFibHkganVzdCBk''@;'; put 'put ''b2luZyBleHRyYSB3b3JrYCk7dmFyIEx0PVl0LmdldE1vdW50cyhZdC5yb290Lm1vdW50KSwkdD0wO2Z1bmN0aW9uIEluKExyKXtyZXR1cm4gWXQuc3luY0ZTUmVxdWVzdHMtLSxjdChMcil9ZnVuY3Rpb24gbHIoTHIpe2lmKExyKXJldHVybiBsci5lcnJvcmVkP3ZvaWQgMDoobHIuZXJyb3Jl''@;'; put 'put ''ZD0hMCxJbihMcikpOysrJHQ+PUx0Lmxlbmd0aCYmSW4obnVsbCl9THQuZm9yRWFjaChMcj0+e2lmKCFMci50eXBlLnN5bmNmcylyZXR1cm4gbHIobnVsbCk7THIudHlwZS5zeW5jZnMoTHIsWmUsbHIpfSl9LG1vdW50KFplLGN0LEx0KXt2YXIgbHIsJHQ9Ii8iPT09THQsSW49IUx0O2lmKCR0''@;'; put 'put ''JiZZdC5yb290KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDEwKTtpZighJHQmJiFJbil7dmFyIExyPVl0Lmxvb2t1cFBhdGgoTHQse2ZvbGxvd19tb3VudDohMX0pO2lmKEx0PUxyLnBhdGgsWXQuaXNNb3VudHBvaW50KGxyPUxyLm5vZGUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDEwKTtp''@;'; put 'put ''ZighWXQuaXNEaXIobHIubW9kZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNTQpfXZhciBLcj17dHlwZTpaZSxvcHRzOmN0LG1vdW50cG9pbnQ6THQsbW91bnRzOltdfSxEbz1aZS5tb3VudChLcik7cmV0dXJuIERvLm1vdW50PUtyLEtyLnJvb3Q9RG8sJHQ/WXQucm9vdD1EbzpsciYmKGxy''@;'; put 'put ''Lm1vdW50ZWQ9S3IsbHIubW91bnQmJmxyLm1vdW50Lm1vdW50cy5wdXNoKEtyKSksRG99LHVubW91bnQoWmUpe3ZhciBjdD1ZdC5sb29rdXBQYXRoKFplLHtmb2xsb3dfbW91bnQ6ITF9KTtpZighWXQuaXNNb3VudHBvaW50KGN0Lm5vZGUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTt2''@;'; put 'put ''YXIgTHQ9Y3Qubm9kZSwkdD1MdC5tb3VudGVkLEluPVl0LmdldE1vdW50cygkdCk7T2JqZWN0LmtleXMoWXQubmFtZVRhYmxlKS5mb3JFYWNoKExyPT57Zm9yKHZhciBLcj1ZdC5uYW1lVGFibGVbTHJdO0tyOyl7dmFyIERvPUtyLm5hbWVfbmV4dDtJbi5pbmNsdWRlcyhLci5tb3VudCkmJll0''@;'; put 'put ''LmRlc3Ryb3lOb2RlKEtyKSxLcj1Eb319KSxMdC5tb3VudGVkPW51bGw7dmFyIGxyPUx0Lm1vdW50Lm1vdW50cy5pbmRleE9mKCR0KTtMdC5tb3VudC5tb3VudHMuc3BsaWNlKGxyLDEpfSxsb29rdXA6KFplLGN0KT0+WmUubm9kZV9vcHMubG9va3VwKFplLGN0KSxta25vZChaZSxjdCxMdCl7''@;'; put 'put ''dmFyIEluPVl0Lmxvb2t1cFBhdGgoWmUse3BhcmVudDohMH0pLm5vZGUsbHI9SmEuYmFzZW5hbWUoWmUpO2lmKCFscnx8Ii4iPT09bHJ8fCIuLiI9PT1scil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7dmFyIExyPVl0Lm1heUNyZWF0ZShJbixscik7aWYoTHIpdGhyb3cgbmV3IFl0LkVy''@;'; put 'put ''cm5vRXJyb3IoTHIpO2lmKCFJbi5ub2RlX29wcy5ta25vZCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig2Myk7cmV0dXJuIEluLm5vZGVfb3BzLm1rbm9kKEluLGxyLGN0LEx0KX0sc3RhdGZzKFplKXt2YXIgY3Q9e2JzaXplOjQwOTYsZnJzaXplOjQwOTYsYmxvY2tzOjFlNixiZnJlZTo1ZTUs''@;'; put 'put ''YmF2YWlsOjVlNSxmaWxlczpZdC5uZXh0SW5vZGUsZmZyZWU6WXQubmV4dElub2RlLTEsZnNpZDo0MixmbGFnczoyLG5hbWVsZW46MjU1fSxMdD1ZdC5sb29rdXBQYXRoKFplLHtmb2xsb3c6ITB9KS5ub2RlO3JldHVybiBMdD8ubm9kZV9vcHMuc3RhdGZzJiZPYmplY3QuYXNzaWduKGN0LEx0''@;'; put 'put ''Lm5vZGVfb3BzLnN0YXRmcyhMdC5tb3VudC5vcHRzLnJvb3QpKSxjdH0sY3JlYXRlOihaZSxjdD00MzgpPT4oY3QmPTQwOTUsWXQubWtub2QoWmUsY3R8PTMyNzY4LDApKSxta2RpcjooWmUsY3Q9NTExKT0+KGN0Jj0xMDIzLFl0Lm1rbm9kKFplLGN0fD0xNjM4NCwwKSksbWtkaXJUcmVlKFpl''@;'; put 'put ''LGN0KXtmb3IodmFyIEx0PVplLnNwbGl0KCIvIiksJHQ9IiIsSW49MDtJbjxMdC5sZW5ndGg7KytJbilpZihMdFtJbl0peyR0Kz0iLyIrTHRbSW5dO3RyeXtZdC5ta2RpcigkdCxjdCl9Y2F0Y2gobHIpe2lmKDIwIT1sci5lcnJubyl0aHJvdyBscn19fSxta2RldjooWmUsY3QsTHQpPT4odHlw''@;'; put 'put ''ZW9mIEx0PiJ1IiYmKEx0PWN0LGN0PTQzOCksWXQubWtub2QoWmUsY3R8PTgxOTIsTHQpKSxzeW1saW5rKFplLGN0KXtpZighSGwucmVzb2x2ZShaZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDQpO3ZhciAkdD1ZdC5sb29rdXBQYXRoKGN0LHtwYXJlbnQ6ITB9KS5ub2RlO2lmKCEkdCl0''@;'; put 'put ''aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0NCk7dmFyIEluPUphLmJhc2VuYW1lKGN0KSxscj1ZdC5tYXlDcmVhdGUoJHQsSW4pO2lmKGxyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKGxyKTtpZighJHQubm9kZV9vcHMuc3ltbGluayl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig2Myk7cmV0dXJu''@;'; put 'put ''ICR0Lm5vZGVfb3BzLnN5bWxpbmsoJHQsSW4sWmUpfSxyZW5hbWUoWmUsY3Qpe3ZhciBLcixEbyxMdD1KYS5kaXJuYW1lKFplKSwkdD1KYS5kaXJuYW1lKGN0KSxJbj1KYS5iYXNlbmFtZShaZSksbHI9SmEuYmFzZW5hbWUoY3QpO2lmKEtyPVl0Lmxvb2t1cFBhdGgoWmUse3BhcmVudDohMH0p''@;'; put 'put ''Lm5vZGUsRG89WXQubG9va3VwUGF0aChjdCx7cGFyZW50OiEwfSkubm9kZSwhS3J8fCFEbyl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0NCk7aWYoS3IubW91bnQhPT1Eby5tb3VudCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig3NSk7dmFyIHJsLFlhPVl0Lmxvb2t1cE5vZGUoS3IsSW4pLEhz''@;'; put 'put ''PUhsLnJlbGF0aXZlKFplLCR0KTtpZigiLiIhPT1Icy5jaGFyQXQoMCkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO2lmKCIuIiE9PShIcz1IbC5yZWxhdGl2ZShjdCxMdCkpLmNoYXJBdCgwKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig1NSk7dHJ5e3JsPVl0Lmxvb2t1cE5vZGUoRG8s''@;'; put 'put ''bHIpfWNhdGNoe31pZihZYSE9PXJsKXt2YXIgZ3M9WXQuaXNEaXIoWWEubW9kZSkseGE9WXQubWF5RGVsZXRlKEtyLEluLGdzKTtpZih4YSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcih4YSk7aWYoeGE9cmw/WXQubWF5RGVsZXRlKERvLGxyLGdzKTpZdC5tYXlDcmVhdGUoRG8sbHIpKXRocm93''@;'; put 'put ''IG5ldyBZdC5FcnJub0Vycm9yKHhhKTtpZighS3Iubm9kZV9vcHMucmVuYW1lKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDYzKTtpZihZdC5pc01vdW50cG9pbnQoWWEpfHxybCYmWXQuaXNNb3VudHBvaW50KHJsKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigxMCk7aWYoRG8hPT1LciYmKHhh''@;'; put 'put ''PVl0Lm5vZGVQZXJtaXNzaW9ucyhLciwidyIpKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcih4YSk7WXQuaGFzaFJlbW92ZU5vZGUoWWEpO3RyeXtLci5ub2RlX29wcy5yZW5hbWUoWWEsRG8sbHIpLFlhLnBhcmVudD1Eb31jYXRjaChHcyl7dGhyb3cgR3N9ZmluYWxseXtZdC5oYXNoQWRkTm9k''@;'; put 'put ''ZShZYSl9fX0scm1kaXIoWmUpe3ZhciBMdD1ZdC5sb29rdXBQYXRoKFplLHtwYXJlbnQ6ITB9KS5ub2RlLCR0PUphLmJhc2VuYW1lKFplKSxJbj1ZdC5sb29rdXBOb2RlKEx0LCR0KSxscj1ZdC5tYXlEZWxldGUoTHQsJHQsITApO2lmKGxyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKGxyKTtp''@;'; put 'put ''ZighTHQubm9kZV9vcHMucm1kaXIpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNjMpO2lmKFl0LmlzTW91bnRwb2ludChJbikpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMTApO0x0Lm5vZGVfb3BzLnJtZGlyKEx0LCR0KSxZdC5kZXN0cm95Tm9kZShJbil9LHJlYWRkaXIoWmUpe3ZhciBMdD1Z''@;'; put 'put ''dC5sb29rdXBQYXRoKFplLHtmb2xsb3c6ITB9KS5ub2RlO2lmKCFMdC5ub2RlX29wcy5yZWFkZGlyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDU0KTtyZXR1cm4gTHQubm9kZV9vcHMucmVhZGRpcihMdCl9LHVubGluayhaZSl7dmFyIEx0PVl0Lmxvb2t1cFBhdGgoWmUse3BhcmVudDohMH0p''@;'; put 'put ''Lm5vZGU7aWYoIUx0KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDQ0KTt2YXIgJHQ9SmEuYmFzZW5hbWUoWmUpLEluPVl0Lmxvb2t1cE5vZGUoTHQsJHQpLGxyPVl0Lm1heURlbGV0ZShMdCwkdCwhMSk7aWYobHIpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IobHIpO2lmKCFMdC5ub2RlX29wcy51''@;'; put 'put ''bmxpbmspdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNjMpO2lmKFl0LmlzTW91bnRwb2ludChJbikpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMTApO0x0Lm5vZGVfb3BzLnVubGluayhMdCwkdCksWXQuZGVzdHJveU5vZGUoSW4pfSxyZWFkbGluayhaZSl7dmFyIEx0PVl0Lmxvb2t1cFBhdGgo''@;'; put 'put ''WmUpLm5vZGU7aWYoIUx0KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDQ0KTtpZighTHQubm9kZV9vcHMucmVhZGxpbmspdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO3JldHVybiBMdC5ub2RlX29wcy5yZWFkbGluayhMdCl9LHN0YXQoWmUsY3Qpe3ZhciAkdD1ZdC5sb29rdXBQYXRoKFpl''@;'; put 'put ''LHtmb2xsb3c6IWN0fSkubm9kZTtpZighJHQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDQpO2lmKCEkdC5ub2RlX29wcy5nZXRhdHRyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDYzKTtyZXR1cm4gJHQubm9kZV9vcHMuZ2V0YXR0cigkdCl9LGxzdGF0OlplPT5ZdC5zdGF0KFplLCEwKSxj''@;'; put 'put ''aG1vZChaZSxjdCxMdCl7dmFyICR0O2lmKCEoJHQ9InN0cmluZyI9PXR5cGVvZiBaZT9ZdC5sb29rdXBQYXRoKFplLHtmb2xsb3c6IUx0fSkubm9kZTpaZSkubm9kZV9vcHMuc2V0YXR0cil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig2Myk7JHQubm9kZV9vcHMuc2V0YXR0cigkdCx7bW9kZTo0''@;'; put 'put ''MDk1JmN0fC00MDk2JiR0Lm1vZGUsdGltZXN0YW1wOkRhdGUubm93KCl9KX0sbGNobW9kKFplLGN0KXtZdC5jaG1vZChaZSxjdCwhMCl9LGZjaG1vZChaZSxjdCl7dmFyIEx0PVl0LmdldFN0cmVhbUNoZWNrZWQoWmUpO1l0LmNobW9kKEx0Lm5vZGUsY3QpfSxjaG93bihaZSxjdCxMdCwkdCl7''@;'; put 'put ''dmFyIEluO2lmKCEoSW49InN0cmluZyI9PXR5cGVvZiBaZT9ZdC5sb29rdXBQYXRoKFplLHtmb2xsb3c6ISR0fSkubm9kZTpaZSkubm9kZV9vcHMuc2V0YXR0cil0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig2Myk7SW4ubm9kZV9vcHMuc2V0YXR0cihJbix7dGltZXN0YW1wOkRhdGUubm93KCl9''@;'; put 'put ''KX0sbGNob3duKFplLGN0LEx0KXtZdC5jaG93bihaZSxjdCxMdCwhMCl9LGZjaG93bihaZSxjdCxMdCl7dmFyICR0PVl0LmdldFN0cmVhbUNoZWNrZWQoWmUpO1l0LmNob3duKCR0Lm5vZGUsY3QsTHQpfSx0cnVuY2F0ZShaZSxjdCl7aWYoY3Q8MCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigy''@;'; put 'put ''OCk7dmFyIEx0O2lmKCEoTHQ9InN0cmluZyI9PXR5cGVvZiBaZT9ZdC5sb29rdXBQYXRoKFplLHtmb2xsb3c6ITB9KS5ub2RlOlplKS5ub2RlX29wcy5zZXRhdHRyKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDYzKTtpZihZdC5pc0RpcihMdC5tb2RlKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJv''@;'; put 'put ''cigzMSk7aWYoIVl0LmlzRmlsZShMdC5tb2RlKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7dmFyIEluPVl0Lm5vZGVQZXJtaXNzaW9ucyhMdCwidyIpO2lmKEluKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKEluKTtMdC5ub2RlX29wcy5zZXRhdHRyKEx0LHtzaXplOmN0LHRpbWVzdGFt''@;'; put 'put ''cDpEYXRlLm5vdygpfSl9LGZ0cnVuY2F0ZShaZSxjdCl7dmFyIEx0PVl0LmdldFN0cmVhbUNoZWNrZWQoWmUpO2lmKCEoMjA5NzE1NSZMdC5mbGFncykpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO1l0LnRydW5jYXRlKEx0Lm5vZGUsY3QpfSx1dGltZShaZSxjdCxMdCl7dmFyIEluPVl0''@;'; put 'put ''Lmxvb2t1cFBhdGgoWmUse2ZvbGxvdzohMH0pLm5vZGU7SW4ubm9kZV9vcHMuc2V0YXR0cihJbix7dGltZXN0YW1wOk1hdGgubWF4KGN0LEx0KX0pfSxvcGVuKFplLGN0LEx0PTQzOCl7aWYoIiI9PT1aZSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0NCk7dmFyICR0O2lmKGN0PSJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgY3Q/KFplPT57dmFyIEx0PXtyOjAsInIrIjoyLHc6NTc3LCJ3KyI6NTc4LGE6MTA4OSwiYSsiOjEwOTB9W1plXTtpZih0eXBlb2YgTHQ+InUiKXRocm93IG5ldyBFcnJvcihgVW5rbm93biBmaWxlIG9wZW4gbW9kZTogJHtaZX1gKTtyZXR1cm4gTHR9KShjdCk6Y3QsTHQ9NjQm''@;'; put 'put ''Y3Q/NDA5NSZMdHwzMjc2ODowLCJvYmplY3QiPT10eXBlb2YgWmUpJHQ9WmU7ZWxzZXtaZT1KYS5ub3JtYWxpemUoWmUpO3RyeXskdD1ZdC5sb29rdXBQYXRoKFplLHtmb2xsb3c6ISgxMzEwNzImY3QpfSkubm9kZX1jYXRjaHt9fXZhciBscj0hMTtpZig2NCZjdClpZigkdCl7aWYoMTI4JmN0''@;'; put 'put ''KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDIwKX1lbHNlICR0PVl0Lm1rbm9kKFplLEx0LDApLGxyPSEwO2lmKCEkdCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig0NCk7aWYoWXQuaXNDaHJkZXYoJHQubW9kZSkmJihjdCY9LTUxMyksNjU1MzYmY3QmJiFZdC5pc0RpcigkdC5tb2RlKSl0aHJv''@;'; put 'put ''dyBuZXcgWXQuRXJybm9FcnJvcig1NCk7aWYoIWxyKXt2YXIgTHI9WXQubWF5T3BlbigkdCxjdCk7aWYoTHIpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoTHIpfTUxMiZjdCYmIWxyJiZZdC50cnVuY2F0ZSgkdCwwKSxjdCY9LTEzMTcxMzt2YXIgS3I9WXQuY3JlYXRlU3RyZWFtKHtub2RlOiR0''@;'; put 'put ''LHBhdGg6WXQuZ2V0UGF0aCgkdCksZmxhZ3M6Y3Qsc2Vla2FibGU6ITAscG9zaXRpb246MCxzdHJlYW1fb3BzOiR0LnN0cmVhbV9vcHMsdW5nb3R0ZW46W10sZXJyb3I6ITF9KTtyZXR1cm4gS3Iuc3RyZWFtX29wcy5vcGVuJiZLci5zdHJlYW1fb3BzLm9wZW4oS3IpLEtyfSxjbG9zZShaZSl7''@;'; put 'put ''aWYoWXQuaXNDbG9zZWQoWmUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDgpO1plLmdldGRlbnRzJiYoWmUuZ2V0ZGVudHM9bnVsbCk7dHJ5e1plLnN0cmVhbV9vcHMuY2xvc2UmJlplLnN0cmVhbV9vcHMuY2xvc2UoWmUpfWNhdGNoKGN0KXt0aHJvdyBjdH1maW5hbGx5e1l0LmNsb3NlU3Ry''@;'; put 'put ''ZWFtKFplLmZkKX1aZS5mZD1udWxsfSxpc0Nsb3NlZDpaZT0+bnVsbD09PVplLmZkLGxsc2VlayhaZSxjdCxMdCl7aWYoWXQuaXNDbG9zZWQoWmUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDgpO2lmKCFaZS5zZWVrYWJsZXx8IVplLnN0cmVhbV9vcHMubGxzZWVrKXRocm93IG5ldyBZdC5F''@;'; put 'put ''cnJub0Vycm9yKDcwKTtpZigwIT1MdCYmMSE9THQmJjIhPUx0KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTtyZXR1cm4gWmUucG9zaXRpb249WmUuc3RyZWFtX29wcy5sbHNlZWsoWmUsY3QsTHQpLFplLnVuZ290dGVuPVtdLFplLnBvc2l0aW9ufSxyZWFkKFplLGN0LEx0LCR0LEluKXtp''@;'; put 'put ''ZigkdDwwfHxJbjwwKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDI4KTtpZihZdC5pc0Nsb3NlZChaZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoOCk7aWYoMT09KDIwOTcxNTUmWmUuZmxhZ3MpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDgpO2lmKFl0LmlzRGlyKFplLm5vZGUubW9kZSkp''@;'; put 'put ''dGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMzEpO2lmKCFaZS5zdHJlYW1fb3BzLnJlYWQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO3ZhciBscj10eXBlb2YgSW48InUiO2lmKGxyKXtpZighWmUuc2Vla2FibGUpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNzApfWVsc2UgSW49WmUucG9z''@;'; put 'put ''aXRpb247dmFyIExyPVplLnN0cmVhbV9vcHMucmVhZChaZSxjdCxMdCwkdCxJbik7cmV0dXJuIGxyfHwoWmUucG9zaXRpb24rPUxyKSxMcn0sd3JpdGUoWmUsY3QsTHQsJHQsSW4sbHIpe2lmKCR0PDB8fEluPDApdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjgpO2lmKFl0LmlzQ2xvc2VkKFpl''@;'; put 'put ''KSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig4KTtpZighKDIwOTcxNTUmWmUuZmxhZ3MpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDgpO2lmKFl0LmlzRGlyKFplLm5vZGUubW9kZSkpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMzEpO2lmKCFaZS5zdHJlYW1fb3BzLndyaXRlKXRocm93IG5l''@;'; put 'put ''dyBZdC5FcnJub0Vycm9yKDI4KTtaZS5zZWVrYWJsZSYmMTAyNCZaZS5mbGFncyYmWXQubGxzZWVrKFplLDAsMik7dmFyIExyPXR5cGVvZiBJbjwidSI7aWYoTHIpe2lmKCFaZS5zZWVrYWJsZSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig3MCl9ZWxzZSBJbj1aZS5wb3NpdGlvbjt2YXIgS3I9''@;'; put 'put ''WmUuc3RyZWFtX29wcy53cml0ZShaZSxjdCxMdCwkdCxJbixscik7cmV0dXJuIExyfHwoWmUucG9zaXRpb24rPUtyKSxLcn0sYWxsb2NhdGUoWmUsY3QsTHQpe2lmKFl0LmlzQ2xvc2VkKFplKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig4KTtpZihjdDwwfHxMdDw9MCl0aHJvdyBuZXcgWXQu''@;'; put 'put ''RXJybm9FcnJvcigyOCk7aWYoISgyMDk3MTU1JlplLmZsYWdzKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig4KTtpZighWXQuaXNGaWxlKFplLm5vZGUubW9kZSkmJiFZdC5pc0RpcihaZS5ub2RlLm1vZGUpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDQzKTtpZighWmUuc3RyZWFtX29wcy5h''@;'; put 'put ''bGxvY2F0ZSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigxMzgpO1plLnN0cmVhbV9vcHMuYWxsb2NhdGUoWmUsY3QsTHQpfSxtbWFwKFplLGN0LEx0LCR0LEluKXtpZigyJiR0JiYhKDImSW4pJiYyIT0oMjA5NzE1NSZaZS5mbGFncykpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMik7aWYoMT09''@;'; put 'put ''KDIwOTcxNTUmWmUuZmxhZ3MpKXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDIpO2lmKCFaZS5zdHJlYW1fb3BzLm1tYXApdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDMpO2lmKCFjdCl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOCk7cmV0dXJuIFplLnN0cmVhbV9vcHMubW1hcChaZSxjdCxM''@;'; put 'put ''dCwkdCxJbil9LG1zeW5jOihaZSxjdCxMdCwkdCxJbik9PlplLnN0cmVhbV9vcHMubXN5bmM/WmUuc3RyZWFtX29wcy5tc3luYyhaZSxjdCxMdCwkdCxJbik6MCxpb2N0bChaZSxjdCxMdCl7aWYoIVplLnN0cmVhbV9vcHMuaW9jdGwpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNTkpO3JldHVy''@;'; put 'put ''biBaZS5zdHJlYW1fb3BzLmlvY3RsKFplLGN0LEx0KX0scmVhZEZpbGUoWmUsY3Q9e30pe2lmKGN0LmZsYWdzPWN0LmZsYWdzfHwwLGN0LmVuY29kaW5nPWN0LmVuY29kaW5nfHwiYmluYXJ5IiwidXRmOCIhPT1jdC5lbmNvZGluZyYmImJpbmFyeSIhPT1jdC5lbmNvZGluZyl0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoYEludmFsaWQgZW5jb2RpbmcgdHlwZSAiJHtjdC5lbmNvZGluZ30iYCk7dmFyIEx0LCR0PVl0Lm9wZW4oWmUsY3QuZmxhZ3MpLGxyPVl0LnN0YXQoWmUpLnNpemUsTHI9bmV3IFVpbnQ4QXJyYXkobHIpO3JldHVybiBZdC5yZWFkKCR0LExyLDAsbHIsMCksInV0ZjgiPT09Y3QuZW5j''@;'; put 'put ''b2Rpbmc/THQ9bmwoTHIpOiJiaW5hcnkiPT09Y3QuZW5jb2RpbmcmJihMdD1MciksWXQuY2xvc2UoJHQpLEx0fSx3cml0ZUZpbGUoWmUsY3QsTHQ9e30pe0x0LmZsYWdzPUx0LmZsYWdzfHw1Nzc7dmFyICR0PVl0Lm9wZW4oWmUsTHQuZmxhZ3MsTHQubW9kZSk7aWYoInN0cmluZyI9PXR5cGVv''@;'; put 'put ''ZiBjdCl7dmFyIEluPW5ldyBVaW50OEFycmF5KFFhKGN0KSsxKSxscj1DNihjdCxJbiwwLEluLmxlbmd0aCk7WXQud3JpdGUoJHQsSW4sMCxscix2b2lkIDAsTHQuY2FuT3duKX1lbHNle2lmKCFBcnJheUJ1ZmZlci5pc1ZpZXcoY3QpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgZGF0''@;'; put 'put ''YSB0eXBlIik7WXQud3JpdGUoJHQsY3QsMCxjdC5ieXRlTGVuZ3RoLHZvaWQgMCxMdC5jYW5Pd24pfVl0LmNsb3NlKCR0KX0sY3dkOigpPT5ZdC5jdXJyZW50UGF0aCxjaGRpcihaZSl7dmFyIGN0PVl0Lmxvb2t1cFBhdGgoWmUse2ZvbGxvdzohMH0pO2lmKG51bGw9PT1jdC5ub2RlKXRocm93''@;'; put 'put ''IG5ldyBZdC5FcnJub0Vycm9yKDQ0KTtpZighWXQuaXNEaXIoY3Qubm9kZS5tb2RlKSl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig1NCk7dmFyIEx0PVl0Lm5vZGVQZXJtaXNzaW9ucyhjdC5ub2RlLCJ4Iik7aWYoTHQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoTHQpO1l0LmN1cnJlbnRQYXRo''@;'; put 'put ''PWN0LnBhdGh9LGNyZWF0ZURlZmF1bHREaXJlY3Rvcmllcygpe1l0Lm1rZGlyKCIvdG1wIiksWXQubWtkaXIoIi9ob21lIiksWXQubWtkaXIoIi9ob21lL3dlYl91c2VyIil9LGNyZWF0ZURlZmF1bHREZXZpY2VzKCl7WXQubWtkaXIoIi9kZXYiKSxZdC5yZWdpc3RlckRldmljZShZdC5tYWtl''@;'; put 'put ''ZGV2KDEsMykse3JlYWQ6KCk9PjAsd3JpdGU6KCR0LEluLGxyLExyLEtyKT0+THIsbGxzZWVrOigpPT4wfSksWXQubWtkZXYoIi9kZXYvbnVsbCIsWXQubWFrZWRldigxLDMpKSxsNC5yZWdpc3RlcihZdC5tYWtlZGV2KDUsMCksbDQuZGVmYXVsdF90dHlfb3BzKSxsNC5yZWdpc3RlcihZdC5t''@;'; put 'put ''YWtlZGV2KDYsMCksbDQuZGVmYXVsdF90dHkxX29wcyksWXQubWtkZXYoIi9kZXYvdHR5IixZdC5tYWtlZGV2KDUsMCkpLFl0Lm1rZGV2KCIvZGV2L3R0eTEiLFl0Lm1ha2VkZXYoNiwwKSk7dmFyIFplPW5ldyBVaW50OEFycmF5KDEwMjQpLGN0PTAsTHQ9KCk9PigwPT09Y3QmJihjdD1JdSha''@;'; put 'put ''ZSkuYnl0ZUxlbmd0aCksWmVbLS1jdF0pO1l0LmNyZWF0ZURldmljZSgiL2RldiIsInJhbmRvbSIsTHQpLFl0LmNyZWF0ZURldmljZSgiL2RldiIsInVyYW5kb20iLEx0KSxZdC5ta2RpcigiL2Rldi9zaG0iKSxZdC5ta2RpcigiL2Rldi9zaG0vdG1wIil9LGNyZWF0ZVNwZWNpYWxEaXJlY3Rv''@;'; put 'put ''cmllcygpe1l0Lm1rZGlyKCIvcHJvYyIpO3ZhciBaZT1ZdC5ta2RpcigiL3Byb2Mvc2VsZiIpO1l0Lm1rZGlyKCIvcHJvYy9zZWxmL2ZkIiksWXQubW91bnQoe21vdW50KCl7dmFyIGN0PVl0LmNyZWF0ZU5vZGUoWmUsImZkIiwxNjg5NSw3Myk7cmV0dXJuIGN0Lm5vZGVfb3BzPXtsb29rdXAo''@;'; put 'put ''THQsJHQpe3ZhciBscj1ZdC5nZXRTdHJlYW1DaGVja2VkKCskdCksTHI9e3BhcmVudDpudWxsLG1vdW50Onttb3VudHBvaW50OiJmYWtlIn0sbm9kZV9vcHM6e3JlYWRsaW5rOigpPT5sci5wYXRofX07cmV0dXJuIExyLnBhcmVudD1McixMcn19LGN0fX0se30sIi9wcm9jL3NlbGYvZmQiKX0s''@;'; put 'put ''Y3JlYXRlU3RhbmRhcmRTdHJlYW1zKFplLGN0LEx0KXtaZT9ZdC5jcmVhdGVEZXZpY2UoIi9kZXYiLCJzdGRpbiIsWmUpOll0LnN5bWxpbmsoIi9kZXYvdHR5IiwiL2Rldi9zdGRpbiIpLGN0P1l0LmNyZWF0ZURldmljZSgiL2RldiIsInN0ZG91dCIsbnVsbCxjdCk6WXQuc3ltbGluaygiL2Rl''@;'; put 'put ''di90dHkiLCIvZGV2L3N0ZG91dCIpLEx0P1l0LmNyZWF0ZURldmljZSgiL2RldiIsInN0ZGVyciIsbnVsbCxMdCk6WXQuc3ltbGluaygiL2Rldi90dHkxIiwiL2Rldi9zdGRlcnIiKSxZdC5vcGVuKCIvZGV2L3N0ZGluIiwwKSxZdC5vcGVuKCIvZGV2L3N0ZG91dCIsMSksWXQub3BlbigiL2Rl''@;'; put 'put ''di9zdGRlcnIiLDEpfSxzdGF0aWNJbml0KCl7WXQubmFtZVRhYmxlPW5ldyBBcnJheSg0MDk2KSxZdC5tb3VudChLbyx7fSwiLyIpLFl0LmNyZWF0ZURlZmF1bHREaXJlY3RvcmllcygpLFl0LmNyZWF0ZURlZmF1bHREZXZpY2VzKCksWXQuY3JlYXRlU3BlY2lhbERpcmVjdG9yaWVzKCksWXQu''@;'; put 'put ''ZmlsZXN5c3RlbXM9e01FTUZTOktvfX0saW5pdChaZSxjdCxMdCl7WXQuaW5pdGlhbGl6ZWQ9ITAsWXQuY3JlYXRlU3RhbmRhcmRTdHJlYW1zKFplLGN0LEx0KX0scXVpdCgpe1l0LmluaXRpYWxpemVkPSExO2Zvcih2YXIgWmU9MDtaZTxZdC5zdHJlYW1zLmxlbmd0aDtaZSsrKXt2YXIgY3Q9''@;'; put 'put ''WXQuc3RyZWFtc1taZV07Y3QmJll0LmNsb3NlKGN0KX19LGZpbmRPYmplY3QoWmUsY3Qpe3ZhciBMdD1ZdC5hbmFseXplUGF0aChaZSxjdCk7cmV0dXJuIEx0LmV4aXN0cz9MdC5vYmplY3Q6bnVsbH0sYW5hbHl6ZVBhdGgoWmUsY3Qpe3RyeXtaZT0oTHQ9WXQubG9va3VwUGF0aChaZSx7Zm9s''@;'; put 'put ''bG93OiFjdH0pKS5wYXRofWNhdGNoe312YXIgJHQ9e2lzUm9vdDohMSxleGlzdHM6ITEsZXJyb3I6MCxuYW1lOm51bGwscGF0aDpudWxsLG9iamVjdDpudWxsLHBhcmVudEV4aXN0czohMSxwYXJlbnRQYXRoOm51bGwscGFyZW50T2JqZWN0Om51bGx9O3RyeXt2YXIgTHQ9WXQubG9va3VwUGF0''@;'; put 'put ''aChaZSx7cGFyZW50OiEwfSk7JHQucGFyZW50RXhpc3RzPSEwLCR0LnBhcmVudFBhdGg9THQucGF0aCwkdC5wYXJlbnRPYmplY3Q9THQubm9kZSwkdC5uYW1lPUphLmJhc2VuYW1lKFplKSxMdD1ZdC5sb29rdXBQYXRoKFplLHtmb2xsb3c6IWN0fSksJHQuZXhpc3RzPSEwLCR0LnBhdGg9THQu''@;'; put 'put ''cGF0aCwkdC5vYmplY3Q9THQubm9kZSwkdC5uYW1lPUx0Lm5vZGUubmFtZSwkdC5pc1Jvb3Q9Ii8iPT09THQucGF0aH1jYXRjaChJbil7JHQuZXJyb3I9SW4uZXJybm99cmV0dXJuICR0fSxjcmVhdGVQYXRoKFplLGN0LEx0LCR0KXtaZT0ic3RyaW5nIj09dHlwZW9mIFplP1plOll0LmdldFBh''@;'; put 'put ''dGgoWmUpO2Zvcih2YXIgSW49Y3Quc3BsaXQoIi8iKS5yZXZlcnNlKCk7SW4ubGVuZ3RoOyl7dmFyIGxyPUluLnBvcCgpO2lmKGxyKXt2YXIgTHI9SmEuam9pbjIoWmUsbHIpO3RyeXtZdC5ta2RpcihMcil9Y2F0Y2h7fVplPUxyfX1yZXR1cm4gTHJ9LGNyZWF0ZUZpbGUoWmUsY3QsTHQsJHQs''@;'; put 'put ''SW4pe3ZhciBscj1KYS5qb2luMigic3RyaW5nIj09dHlwZW9mIFplP1plOll0LmdldFBhdGgoWmUpLGN0KSxMcj1PQSgkdCxJbik7cmV0dXJuIFl0LmNyZWF0ZShscixMcil9LGNyZWF0ZURhdGFGaWxlKFplLGN0LEx0LCR0LEluLGxyKXt2YXIgTHI9Y3Q7WmUmJihaZT0ic3RyaW5nIj09dHlw''@;'; put 'put ''ZW9mIFplP1plOll0LmdldFBhdGgoWmUpLExyPWN0P0phLmpvaW4yKFplLGN0KTpaZSk7dmFyIEtyPU9BKCR0LEluKSxEbz1ZdC5jcmVhdGUoTHIsS3IpO2lmKEx0KXtpZigic3RyaW5nIj09dHlwZW9mIEx0KXtmb3IodmFyIFlhPW5ldyBBcnJheShMdC5sZW5ndGgpLEhzPTAscmw9THQubGVu''@;'; put 'put ''Z3RoO0hzPHJsOysrSHMpWWFbSHNdPUx0LmNoYXJDb2RlQXQoSHMpO0x0PVlhfVl0LmNobW9kKERvLDE0NnxLcik7dmFyIGdzPVl0Lm9wZW4oRG8sNTc3KTtZdC53cml0ZShncyxMdCwwLEx0Lmxlbmd0aCwwLGxyKSxZdC5jbG9zZShncyksWXQuY2htb2QoRG8sS3IpfX0sY3JlYXRlRGV2aWNl''@;'; put 'put ''KFplLGN0LEx0LCR0KXt2YXIgSW49SmEuam9pbjIoInN0cmluZyI9PXR5cGVvZiBaZT9aZTpZdC5nZXRQYXRoKFplKSxjdCksbHI9T0EoISFMdCwhISR0KTtZdC5jcmVhdGVEZXZpY2UubWFqb3I/Pz02NDt2YXIgTHI9WXQubWFrZWRldihZdC5jcmVhdGVEZXZpY2UubWFqb3IrKywwKTtyZXR1''@;'; put 'put ''cm4gWXQucmVnaXN0ZXJEZXZpY2UoTHIse29wZW4oS3Ipe0tyLnNlZWthYmxlPSExfSxjbG9zZShLcil7JHQ/LmJ1ZmZlcj8ubGVuZ3RoJiYkdCgxMCl9LHJlYWQoS3IsRG8sWWEsSHMscmwpe2Zvcih2YXIgZ3M9MCx4YT0wO3hhPEhzO3hhKyspe3ZhciBHczt0cnl7R3M9THQoKX1jYXRjaHt0''@;'; put 'put ''aHJvdyBuZXcgWXQuRXJybm9FcnJvcigyOSl9aWYodm9pZCAwPT09R3MmJjA9PT1ncyl0aHJvdyBuZXcgWXQuRXJybm9FcnJvcig2KTtpZihudWxsPT1HcylicmVhaztncysrLERvW1lhK3hhXT1Hc31yZXR1cm4gZ3MmJihLci5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpKSxnc30sd3JpdGUo''@;'; put 'put ''S3IsRG8sWWEsSHMscmwpe2Zvcih2YXIgZ3M9MDtnczxIcztncysrKXRyeXskdChEb1tZYStnc10pfWNhdGNoe3Rocm93IG5ldyBZdC5FcnJub0Vycm9yKDI5KX1yZXR1cm4gSHMmJihLci5ub2RlLnRpbWVzdGFtcD1EYXRlLm5vdygpKSxnc319KSxZdC5ta2RldihJbixscixMcil9LGZvcmNl''@;'; put 'put ''TG9hZEZpbGUoWmUpe2lmKFplLmlzRGV2aWNlfHxaZS5pc0ZvbGRlcnx8WmUubGlua3x8WmUuY29udGVudHMpcmV0dXJuITA7aWYodHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1Iil0aHJvdyBuZXcgRXJyb3IoIkxhenkgbG9hZGluZyBzaG91bGQgaGF2ZSBiZWVuIHBlcmZvcm1lZCAoY29udGVu''@;'; put 'put ''dHMgc2V0KSBpbiBjcmVhdGVMYXp5RmlsZSwgYnV0IGl0IHdhcyBub3QuIExhenkgbG9hZGluZyBvbmx5IHdvcmtzIGluIHdlYiB3b3JrZXJzLiBVc2UgLS1lbWJlZC1maWxlIG9yIC0tcHJlbG9hZC1maWxlIGluIGVtY2Mgb24gdGhlIG1haW4gdGhyZWFkLiIpO3RyeXtaZS5jb250ZW50cz1C''@;'; put 'put ''ZShaZS51cmwpLFplLnVzZWRCeXRlcz1aZS5jb250ZW50cy5sZW5ndGh9Y2F0Y2h7dGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoMjkpfX0sY3JlYXRlTGF6eUZpbGUoWmUsY3QsTHQsJHQsSW4pe2lmKHR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIpdGhyb3ciQ2Fubm90IGRvIHN5bmNocm9ub3Vz''@;'; put 'put ''IGJpbmFyeSBYSFJzIG91dHNpZGUgd2Vid29ya2VycyBpbiBtb2Rlcm4gYnJvd3NlcnMuIFVzZSAtLWVtYmVkLWZpbGUgb3IgLS1wcmVsb2FkLWZpbGUgaW4gZW1jYyI7dmFyIEtyLERvPVl0LmNyZWF0ZUZpbGUoWmUsY3QsS3I9e2lzRGV2aWNlOiExLHVybDpMdH0sJHQsSW4pO0tyLmNvbnRl''@;'; put 'put ''bnRzP0RvLmNvbnRlbnRzPUtyLmNvbnRlbnRzOktyLnVybCYmKERvLmNvbnRlbnRzPW51bGwsRG8udXJsPUtyLnVybCksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRG8se3VzZWRCeXRlczp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGVudHMubGVuZ3RofX19KTt2YXIgWWE9e307''@;'; put 'put ''ZnVuY3Rpb24gcmwoZ3MseGEsR3MsQTEsQzMpe3ZhciBCaD1ncy5ub2RlLmNvbnRlbnRzO2lmKEMzPj1CaC5sZW5ndGgpcmV0dXJuIDA7dmFyIFMzPU1hdGgubWluKEJoLmxlbmd0aC1DMyxBMSk7aWYoQmguc2xpY2UpZm9yKHZhciBNMz0wO00zPFMzO00zKyspeGFbR3MrTTNdPUJoW0MzK00z''@;'; put 'put ''XTtlbHNlIGZvcihNMz0wO00zPFMzO00zKyspeGFbR3MrTTNdPUJoLmdldChDMytNMyk7cmV0dXJuIFMzfXJldHVybiBPYmplY3Qua2V5cyhEby5zdHJlYW1fb3BzKS5mb3JFYWNoKGdzPT57dmFyIHhhPURvLnN0cmVhbV9vcHNbZ3NdO1lhW2dzXT0oLi4uR3MpPT4oWXQuZm9yY2VMb2FkRmls''@;'; put 'put ''ZShEbykseGEoLi4uR3MpKX0pLFlhLnJlYWQ9KGdzLHhhLEdzLEExLEMzKT0+KFl0LmZvcmNlTG9hZEZpbGUoRG8pLHJsKGdzLHhhLEdzLEExLEMzKSksWWEubW1hcD0oZ3MseGEsR3MsQTEsQzMpPT57WXQuZm9yY2VMb2FkRmlsZShEbyk7dmFyIEJoPUxOKHhhKTtpZighQmgpdGhyb3cgbmV3''@;'; put 'put ''IFl0LkVycm5vRXJyb3IoNDgpO3JldHVybiBybChncyx0bixCaCx4YSxHcykse3B0cjpCaCxhbGxvY2F0ZWQ6ITB9fSxEby5zdHJlYW1fb3BzPVlhLERvfX0sVzA9KFplLGN0KT0+WmU/bmwoeG4sWmUsY3QpOiIiLHpzPXtERUZBVUxUX1BPTExNQVNLOjUsY2FsY3VsYXRlQXQoWmUsY3QsTHQp''@;'; put 'put ''e2lmKEphLmlzQWJzKGN0KSlyZXR1cm4gY3Q7dmFyICR0O2lmKCR0PS0xMDA9PT1aZT9ZdC5jd2QoKTp6cy5nZXRTdHJlYW1Gcm9tRkQoWmUpLnBhdGgsMD09Y3QubGVuZ3RoKXtpZighTHQpdGhyb3cgbmV3IFl0LkVycm5vRXJyb3IoNDQpO3JldHVybiAkdH1yZXR1cm4gSmEuam9pbjIoJHQs''@;'; put 'put ''Y3QpfSxkb1N0YXQoWmUsY3QsTHQpe3ZhciAkdD1aZShjdCk7eXJbTHQ+PjJdPSR0LmRldix5cltMdCs0Pj4yXT0kdC5tb2RlLEduW0x0Kzg+PjJdPSR0Lm5saW5rLHlyW0x0KzEyPj4yXT0kdC51aWQseXJbTHQrMTY+PjJdPSR0LmdpZCx5cltMdCsyMD4+Ml09JHQucmRldixmbz1bJHQuc2l6''@;'; put 'put ''ZT4+PjAsKEdyPSR0LnNpemUsK01hdGguYWJzKEdyKT49MT9Hcj4wPytNYXRoLmZsb29yKEdyLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKEdyLSsofn5Hcj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLHlyW0x0KzI0Pj4yXT1mb1swXSx5cltMdCsyOD4+Ml09Zm9bMV0seXJbTHQr''@;'; put 'put ''MzI+PjJdPTQwOTYseXJbTHQrMzY+PjJdPSR0LmJsb2Nrczt2YXIgSW49JHQuYXRpbWUuZ2V0VGltZSgpLGxyPSR0Lm10aW1lLmdldFRpbWUoKSxMcj0kdC5jdGltZS5nZXRUaW1lKCk7cmV0dXJuIGZvPVtNYXRoLmZsb29yKEluLzFlMyk+Pj4wLChHcj1NYXRoLmZsb29yKEluLzFlMyksK01h''@;'; put 'put ''dGguYWJzKEdyKT49MT9Hcj4wPytNYXRoLmZsb29yKEdyLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKEdyLSsofn5Hcj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLHlyW0x0KzQwPj4yXT1mb1swXSx5cltMdCs0ND4+Ml09Zm9bMV0sR25bTHQrNDg+PjJdPUluJTFlMyoxZTMqMWUz''@;'; put 'put ''LGZvPVtNYXRoLmZsb29yKGxyLzFlMyk+Pj4wLChHcj1NYXRoLmZsb29yKGxyLzFlMyksK01hdGguYWJzKEdyKT49MT9Hcj4wPytNYXRoLmZsb29yKEdyLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKEdyLSsofn5Hcj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLHlyW0x0KzU2Pj4y''@;'; put 'put ''XT1mb1swXSx5cltMdCs2MD4+Ml09Zm9bMV0sR25bTHQrNjQ+PjJdPWxyJTFlMyoxZTMqMWUzLGZvPVtNYXRoLmZsb29yKExyLzFlMyk+Pj4wLChHcj1NYXRoLmZsb29yKExyLzFlMyksK01hdGguYWJzKEdyKT49MT9Hcj4wPytNYXRoLmZsb29yKEdyLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRo''@;'; put 'put ''LmNlaWwoKEdyLSsofn5Hcj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLHlyW0x0KzcyPj4yXT1mb1swXSx5cltMdCs3Nj4+Ml09Zm9bMV0sR25bTHQrODA+PjJdPUxyJTFlMyoxZTMqMWUzLGZvPVskdC5pbm8+Pj4wLChHcj0kdC5pbm8sK01hdGguYWJzKEdyKT49MT9Hcj4wPytNYXRoLmZs''@;'; put 'put ''b29yKEdyLzQyOTQ5NjcyOTYpPj4+MDp+fitNYXRoLmNlaWwoKEdyLSsofn5Hcj4+PjApKS80Mjk0OTY3Mjk2KT4+PjA6MCldLHlyW0x0Kzg4Pj4yXT1mb1swXSx5cltMdCs5Mj4+Ml09Zm9bMV0sMH0sZG9Nc3luYyhaZSxjdCxMdCwkdCxJbil7aWYoIVl0LmlzRmlsZShjdC5ub2RlLm1vZGUp''@;'; put 'put ''KXRocm93IG5ldyBZdC5FcnJub0Vycm9yKDQzKTtpZigyJiR0KXJldHVybiAwO3ZhciBscj14bi5zbGljZShaZSxaZStMdCk7WXQubXN5bmMoY3QsbHIsSW4sTHQsJHQpfSxnZXRTdHJlYW1Gcm9tRkQ6WmU9Pll0LmdldFN0cmVhbUNoZWNrZWQoWmUpLHZhcmFyZ3M6dm9pZCAwLGdldFN0cjpa''@;'; put 'put ''ZT0+VzAoWmUpfSxNNj0oKT0+e3ZhciBaZT15clsrenMudmFyYXJncz4+Ml07cmV0dXJuIHpzLnZhcmFyZ3MrPTQsWmV9LFhnPU02LGV2PShaZSxjdCxMdCk9PkM2KFplLHhuLGN0LEx0KSxxZD0oWmUsY3QpPT5jdCsyMDk3MTUyPj4+MDw0MTk0MzA1LSEhWmU/KFplPj4+MCkrNDI5NDk2NzI5''@;'; put 'put ''NipjdDpOYU4sQXc9W10sdER0PVplPT57dmFyIEx0PShaZS1tdC5idWZmZXIuYnl0ZUxlbmd0aCs2NTUzNSkvNjU1MzZ8MDt0cnl7cmV0dXJuIG10Lmdyb3coTHQpLFBuKCksMX1jYXRjaHt9fSxQdGU9e30sUEE9KCk9PntpZighUEEuc3RyaW5ncyl7dmFyIGN0PXtVU0VSOiJ3ZWJfdXNlciIs''@;'; put 'put ''TE9HTkFNRToid2ViX3VzZXIiLFBBVEg6Ii8iLFBXRDoiLyIsSE9NRToiL2hvbWUvd2ViX3VzZXIiLExBTkc6KCJvYmplY3QiPT10eXBlb2YgbmF2aWdhdG9yJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdfHwiQyIpLnJlcGxhY2UoIi0iLCJfIikrIi5VVEYt''@;'; put 'put ''OCIsXzoiLi90aGlzLnByb2dyYW0ifTtmb3IodmFyIEx0IGluIFB0ZSl2b2lkIDA9PT1QdGVbTHRdP2RlbGV0ZSBjdFtMdF06Y3RbTHRdPVB0ZVtMdF07dmFyICR0PVtdO2Zvcih2YXIgTHQgaW4gY3QpJHQucHVzaChgJHtMdH09JHtjdFtMdF19YCk7UEEuc3RyaW5ncz0kdH1yZXR1cm4gUEEu''@;'; put 'put ''c3RyaW5nc307WXQuY3JlYXRlUHJlbG9hZGVkRmlsZT0oWmUsY3QsTHQsJHQsSW4sbHIsTHIsS3IsRG8sWWEpPT57dmFyIEhzPWN0P0hsLnJlc29sdmUoSmEuam9pbjIoWmUsY3QpKTpaZTtmdW5jdGlvbiBncyh4YSl7ZnVuY3Rpb24gR3MoQTEpe1lhPy4oKSxLcnx8KChaZSxjdCxMdCwkdCxJ''@;'; put 'put ''bixscik9PntZdC5jcmVhdGVEYXRhRmlsZShaZSxjdCxMdCwkdCxJbixscil9KShaZSxjdCxBMSwkdCxJbixEbyksbHI/LigpLFlyKCl9KChaZSxjdCxMdCwkdCk9Pnt0eXBlb2YgQnJvd3NlcjwidSImJkJyb3dzZXIuaW5pdCgpO3ZhciBJbj0hMTtyZXR1cm4gT04uZm9yRWFjaChscj0+e0lu''@;'; put 'put ''fHxsci5jYW5IYW5kbGUoY3QpJiYobHIuaGFuZGxlKFplLGN0LEx0LCR0KSxJbj0hMCl9KSxJbn0pKHhhLEhzLEdzLCgpPT57THI/LigpLFlyKCl9KXx8R3MoeGEpfVVyKCksInN0cmluZyI9PXR5cGVvZiBMdD8oKFplLGN0LEx0LCR0KT0+e3ZhciBJbj1gYWwgJHtaZX1gOyh2b2lkIDApKFpl''@;'; put 'put ''KS50aGVuKGxyPT57Y3QobmV3IFVpbnQ4QXJyYXkobHIpKSxJbiYmWXIoKX0sbHI9PntpZighTHQpdGhyb3dgTG9hZGluZyBkYXRhIGZpbGUgIiR7WmV9IiBmYWlsZWQuYDtMdCgpfSksSW4mJlVyKCl9KShMdCxncyxMcik6Z3MoTHQpfSxZdC5zdGF0aWNJbml0KCksS28uZG9lc05vdEV4aXN0''@;'; put 'put ''RXJyb3I9bmV3IFl0LkVycm5vRXJyb3IoNDQpLEtvLmRvZXNOb3RFeGlzdEVycm9yLnN0YWNrPSI8Z2VuZXJpYyBlcnJvciwgbm8gc3RhY2s+Ijt2YXIgVU4sdkR0PXthOihaZSxjdCxMdCk9Pnt0aHJvdyBuZXcgcHMoWmUpLmluaXQoY3QsTHQpLFplfSxpOmZ1bmN0aW9uIEhOKFplLGN0LEx0''@;'; put 'put ''LCR0KXt0cnl7aWYoY3Q9enMuZ2V0U3RyKGN0KSxjdD16cy5jYWxjdWxhdGVBdChaZSxjdCksLTgmTHQpcmV0dXJuLTI4O3ZhciBscj1ZdC5sb29rdXBQYXRoKGN0LHtmb2xsb3c6ITB9KS5ub2RlO2lmKCFscilyZXR1cm4tNDQ7dmFyIExyPSIiO3JldHVybiA0Jkx0JiYoTHIrPSJyIiksMiZM''@;'; put 'put ''dCYmKExyKz0idyIpLDEmTHQmJihMcis9IngiKSxMciYmWXQubm9kZVBlcm1pc3Npb25zKGxyLExyKT8tMjowfWNhdGNoKEtyKXtpZih0eXBlb2YgWXQ+InUifHwiRXJybm9FcnJvciIhPT1Lci5uYW1lKXRocm93IEtyO3JldHVybi1Lci5lcnJub319LGY6ZnVuY3Rpb24gdzMoWmUsY3QsTHQp''@;'; put 'put ''e3pzLnZhcmFyZ3M9THQ7dHJ5e3ZhciAkdD16cy5nZXRTdHJlYW1Gcm9tRkQoWmUpO3N3aXRjaChjdCl7Y2FzZSAwOmlmKChJbj1NNigpKTwwKXJldHVybi0yODtmb3IoO1l0LnN0cmVhbXNbSW5dOylJbisrO3JldHVybiBZdC5kdXBTdHJlYW0oJHQsSW4pLmZkO2Nhc2UgMTpjYXNlIDI6Y2Fz''@;'; put 'put ''ZSAxMzpjYXNlIDE0OnJldHVybiAwO2Nhc2UgMzpyZXR1cm4gJHQuZmxhZ3M7Y2FzZSA0OnZhciBJbj1NNigpO3JldHVybiAkdC5mbGFnc3w9SW4sMDtjYXNlIDEyOnJldHVybiBJbj1YZygpLFFuW0luKzA+PjFdPTIsMH1yZXR1cm4tMjh9Y2F0Y2goS3Ipe2lmKHR5cGVvZiBZdD4idSJ8fCJF''@;'; put 'put ''cnJub0Vycm9yIiE9PUtyLm5hbWUpdGhyb3cgS3I7cmV0dXJuLUtyLmVycm5vfX0seDpmdW5jdGlvbiBOTihaZSxjdCl7dHJ5e3ZhciBMdD16cy5nZXRTdHJlYW1Gcm9tRkQoWmUpO3JldHVybiB6cy5kb1N0YXQoWXQuc3RhdCxMdC5wYXRoLGN0KX1jYXRjaCgkdCl7aWYodHlwZW9mIFl0PiJ1''@;'; put 'put ''Inx8IkVycm5vRXJyb3IiIT09JHQubmFtZSl0aHJvdyAkdDtyZXR1cm4tJHQuZXJybm99fSxrOmZ1bmN0aW9uIFZOKFplLGN0LEx0KXt6cy52YXJhcmdzPUx0O3RyeXt2YXIgJHQ9enMuZ2V0U3RyZWFtRnJvbUZEKFplKTtzd2l0Y2goY3Qpe2Nhc2UgMjE1MDk6Y2FzZSAyMTUxMDpjYXNlIDIx''@;'; put 'put ''NTExOmNhc2UgMjE1MTI6Y2FzZSAyMTUyNDpjYXNlIDIxNTE1OnJldHVybiAkdC50dHk/MDotNTk7Y2FzZSAyMTUwNTppZighJHQudHR5KXJldHVybi01OTtpZigkdC50dHkub3BzLmlvY3RsX3RjZ2V0cyl7dmFyIEluPSR0LnR0eS5vcHMuaW9jdGxfdGNnZXRzKCR0KSxscj1YZygpO3lyW2xy''@;'; put 'put ''Pj4yXT1Jbi5jX2lmbGFnfHwwLHlyW2xyKzQ+PjJdPUluLmNfb2ZsYWd8fDAseXJbbHIrOD4+Ml09SW4uY19jZmxhZ3x8MCx5cltscisxMj4+Ml09SW4uY19sZmxhZ3x8MDtmb3IodmFyIExyPTA7THI8MzI7THIrKyl0bltscitMcisxN109SW4uY19jY1tMcl18fDA7cmV0dXJuIDB9cmV0dXJu''@;'; put 'put ''IDA7Y2FzZSAyMTUwNjpjYXNlIDIxNTA3OmNhc2UgMjE1MDg6aWYoISR0LnR0eSlyZXR1cm4tNTk7aWYoJHQudHR5Lm9wcy5pb2N0bF90Y3NldHMpe2xyPVhnKCk7dmFyIEtyPXlyW2xyPj4yXSxEbz15cltscis0Pj4yXSxZYT15cltscis4Pj4yXSxIcz15cltscisxMj4+Ml0scmw9W107Zm9y''@;'; put 'put ''KExyPTA7THI8MzI7THIrKylybC5wdXNoKHRuW2xyK0xyKzE3XSk7cmV0dXJuICR0LnR0eS5vcHMuaW9jdGxfdGNzZXRzKCR0LnR0eSxjdCx7Y19pZmxhZzpLcixjX29mbGFnOkRvLGNfY2ZsYWc6WWEsY19sZmxhZzpIcyxjX2NjOnJsfSl9cmV0dXJuIDA7Y2FzZSAyMTUxOTpyZXR1cm4gJHQu''@;'; put 'put ''dHR5Pyhscj1YZygpLHlyW2xyPj4yXT0wLDApOi01OTtjYXNlIDIxNTIwOnJldHVybiAkdC50dHk/LTI4Oi01OTtjYXNlIDIxNTMxOnJldHVybiBscj1YZygpLFl0LmlvY3RsKCR0LGN0LGxyKTtjYXNlIDIxNTIzOmlmKCEkdC50dHkpcmV0dXJuLTU5O2lmKCR0LnR0eS5vcHMuaW9jdGxfdGlv''@;'; put 'put ''Y2d3aW5zeil7dmFyIGdzPSR0LnR0eS5vcHMuaW9jdGxfdGlvY2d3aW5zeigkdC50dHkpO2xyPVhnKCksUW5bbHI+PjFdPWdzWzBdLFFuW2xyKzI+PjFdPWdzWzFdfXJldHVybiAwO2RlZmF1bHQ6cmV0dXJuLTI4fX1jYXRjaCh4YSl7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09''@;'; put 'put ''eGEubmFtZSl0aHJvdyB4YTtyZXR1cm4teGEuZXJybm99fSx2OmZ1bmN0aW9uIEJOKFplLGN0LEx0LCR0KXt0cnl7Y3Q9enMuZ2V0U3RyKGN0KTt2YXIgSW49MjU2JiR0LGxyPTQwOTYmJHQ7cmV0dXJuICR0Jj0tNjQwMSxjdD16cy5jYWxjdWxhdGVBdChaZSxjdCxsciksenMuZG9TdGF0KElu''@;'; put 'put ''P1l0LmxzdGF0Oll0LnN0YXQsY3QsTHQpfWNhdGNoKExyKXtpZih0eXBlb2YgWXQ+InUifHwiRXJybm9FcnJvciIhPT1Mci5uYW1lKXRocm93IExyO3JldHVybi1Mci5lcnJub319LGg6ZnVuY3Rpb24gak4oWmUsY3QsTHQsJHQpe3pzLnZhcmFyZ3M9JHQ7dHJ5e2N0PXpzLmdldFN0cihjdCks''@;'; put 'put ''Y3Q9enMuY2FsY3VsYXRlQXQoWmUsY3QpO3ZhciBJbj0kdD9NNigpOjA7cmV0dXJuIFl0Lm9wZW4oY3QsTHQsSW4pLmZkfWNhdGNoKGxyKXtpZih0eXBlb2YgWXQ+InUifHwiRXJybm9FcnJvciIhPT1sci5uYW1lKXRocm93IGxyO3JldHVybi1sci5lcnJub319LHE6ZnVuY3Rpb24gdWEoWmUs''@;'; put 'put ''Y3QsTHQsJHQpe3RyeXtpZihjdD16cy5nZXRTdHIoY3QpLGN0PXpzLmNhbGN1bGF0ZUF0KFplLGN0KSwkdDw9MClyZXR1cm4tMjg7dmFyIEluPVl0LnJlYWRsaW5rKGN0KSxscj1NYXRoLm1pbigkdCxRYShJbikpLExyPXRuW0x0K2xyXTtyZXR1cm4gZXYoSW4sTHQsJHQrMSksdG5bTHQrbHJd''@;'; put 'put ''PUxyLGxyfWNhdGNoKEtyKXtpZih0eXBlb2YgWXQ+InUifHwiRXJybm9FcnJvciIhPT1Lci5uYW1lKXRocm93IEtyO3JldHVybi1Lci5lcnJub319LHI6ZnVuY3Rpb24gZnIoWmUpe3RyeXtyZXR1cm4gWmU9enMuZ2V0U3RyKFplKSxZdC5ybWRpcihaZSksMH1jYXRjaChjdCl7aWYodHlwZW9m''@;'; put 'put ''IFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09Y3QubmFtZSl0aHJvdyBjdDtyZXR1cm4tY3QuZXJybm99fSx3OmZ1bmN0aW9uIG5vKFplLGN0KXt0cnl7cmV0dXJuIFplPXpzLmdldFN0cihaZSksenMuZG9TdGF0KFl0LnN0YXQsWmUsY3QpfWNhdGNoKEx0KXtpZih0eXBlb2YgWXQ+InUifHwiRXJy''@;'; put 'put ''bm9FcnJvciIhPT1MdC5uYW1lKXRocm93IEx0O3JldHVybi1MdC5lcnJub319LHM6ZnVuY3Rpb24gWG8oWmUsY3QsTHQpe3RyeXtyZXR1cm4gY3Q9enMuZ2V0U3RyKGN0KSxjdD16cy5jYWxjdWxhdGVBdChaZSxjdCksMD09PUx0P1l0LnVubGluayhjdCk6NTEyPT09THQ/WXQucm1kaXIoY3Qp''@;'; put 'put ''Ok5pKCJJbnZhbGlkIGZsYWdzIHBhc3NlZCB0byB1bmxpbmthdCIpLDB9Y2F0Y2goJHQpe2lmKHR5cGVvZiBZdD4idSJ8fCJFcnJub0Vycm9yIiE9PSR0Lm5hbWUpdGhyb3cgJHQ7cmV0dXJuLSR0LmVycm5vfX0sajooKT0+TmkoIiIpLHk6KCk9PjEsejooWmUsY3QsTHQpPT54bi5jb3B5V2l0''@;'; put 'put ''aGluKFplLGN0LGN0K0x0KSxsOmZ1bmN0aW9uIHR2KFplLGN0LEx0LCR0LEluLGxyLExyLEtyKXt2YXIgRG89cWQoSW4sbHIpO3RyeXtpZihpc05hTihEbykpcmV0dXJuIDYxO3ZhciBZYT16cy5nZXRTdHJlYW1Gcm9tRkQoJHQpLEhzPVl0Lm1tYXAoWWEsWmUsRG8sY3QsTHQpLHJsPUhzLnB0''@;'; put 'put ''cjtyZXR1cm4geXJbTHI+PjJdPUhzLmFsbG9jYXRlZCxHbltLcj4+Ml09cmwsMH1jYXRjaChncyl7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09Z3MubmFtZSl0aHJvdyBncztyZXR1cm4tZ3MuZXJybm99fSxtOmZ1bmN0aW9uIFkwKFplLGN0LEx0LCR0LEluLGxyLExyKXt2YXIg''@;'; put 'put ''S3I9cWQobHIsTHIpO3RyeXt2YXIgRG89enMuZ2V0U3RyZWFtRnJvbUZEKEluKTsyJkx0JiZ6cy5kb01zeW5jKFplLERvLGN0LCR0LEtyKX1jYXRjaChZYSl7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09WWEubmFtZSl0aHJvdyBZYTtyZXR1cm4tWWEuZXJybm99fSxvOihaZSxj''@;'; put 'put ''dCxMdCwkdCk9Pnt2YXIgSW49KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLGxyPW5ldyBEYXRlKEluLDAsMSksTHI9bmV3IERhdGUoSW4sNiwxKSxLcj1sci5nZXRUaW1lem9uZU9mZnNldCgpLERvPUxyLmdldFRpbWV6b25lT2Zmc2V0KCksWWE9TWF0aC5tYXgoS3IsRG8pO0duW1plPj4yXT02''@;'; put 'put ''MCpZYSx5cltjdD4+Ml09KyhLciE9RG8pO3ZhciBIcz14YT0+e3ZhciBHcz14YT49MD8iLSI6IisiLEExPU1hdGguYWJzKHhhKTtyZXR1cm5gVVRDJHtHc30ke1N0cmluZyhNYXRoLmZsb29yKEExLzYwKSkucGFkU3RhcnQoMiwiMCIpfSR7U3RyaW5nKEExJTYwKS5wYWRTdGFydCgyLCIwIil9''@;'; put 'put ''YH0scmw9SHMoS3IpLGdzPUhzKERvKTtEbzxLcj8oZXYocmwsTHQsMTcpLGV2KGdzLCR0LDE3KSk6KGV2KHJsLCR0LDE3KSxldihncyxMdCwxNykpfSxBOihaZSxjdCxMdCk9PigoWmUsY3QsTHQpPT57dmFyICR0PSgoWmUsY3QpPT57QXcubGVuZ3RoPTA7Zm9yKHZhciBMdDtMdD14bltaZSsr''@;'; put 'put ''XTspe3ZhciAkdD0xMDUhPUx0O2N0Kz0oJHQmPTExMiE9THQpJiZjdCU4PzQ6MCxBdy5wdXNoKDExMj09THQ/R25bY3Q+PjJdOjEwNT09THQ/eXJbY3Q+PjJdOl9pW2N0Pj4zXSksY3QrPSR0Pzg6NH1yZXR1cm4gQXd9KShjdCxMdCk7cmV0dXJuIGpvW1plXSguLi4kdCl9KShaZSxjdCxMdCks''@;'; put 'put ''YzooKT0+RGF0ZS5ub3coKSxwOlplPT57dmFyIGN0PXhuLmxlbmd0aCxMdD0yMTQ3NDgzNjQ4O2lmKChaZT4+Pj0wKT5MdClyZXR1cm4hMTtmb3IodmFyICR0PTE7JHQ8PTQ7JHQqPTIpe3ZhciBJbj1jdCooMSsuMi8kdCk7SW49TWF0aC5taW4oSW4sWmUrMTAwNjYzMjk2KTt2YXIgbHI9TWF0''@;'; put 'put ''aC5taW4oTHQsUkEoTWF0aC5tYXgoWmUsSW4pLDY1NTM2KSk7aWYodER0KGxyKSlyZXR1cm4hMH1yZXR1cm4hMX0sdDooWmUsY3QpPT57dmFyIEx0PTA7cmV0dXJuIFBBKCkuZm9yRWFjaCgoJHQsSW4pPT57dmFyIGxyPWN0K0x0O0duW1plKzQqSW4+PjJdPWxyLCgoWmUsY3QpPT57Zm9yKHZh''@;'; put 'put ''ciBMdD0wO0x0PFplLmxlbmd0aDsrK0x0KXRuW2N0KytdPVplLmNoYXJDb2RlQXQoTHQpO3RuW2N0XT0wfSkoJHQsbHIpLEx0Kz0kdC5sZW5ndGgrMX0pLDB9LHU6KFplLGN0KT0+e3ZhciBMdD1QQSgpO0duW1plPj4yXT1MdC5sZW5ndGg7dmFyICR0PTA7cmV0dXJuIEx0LmZvckVhY2goSW49''@;'; put 'put ''PiR0Kz1Jbi5sZW5ndGgrMSksR25bY3Q+PjJdPSR0LDB9LGc6KFplLGN0KT0+eyhaZT0+eygoWmUsY3QpPT57dGhyb3cgY3R9KSgwLG5ldyBTYShaZSkpfSkoWmUpfSxiOmZ1bmN0aW9uIGREdChaZSl7dHJ5e3ZhciBjdD16cy5nZXRTdHJlYW1Gcm9tRkQoWmUpO3JldHVybiBZdC5jbG9zZShj''@;'; put 'put ''dCksMH1jYXRjaChMdCl7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09THQubmFtZSl0aHJvdyBMdDtyZXR1cm4gTHQuZXJybm99fSxlOmZ1bmN0aW9uIGZEdChaZSxjdCxMdCwkdCl7dHJ5e3ZhciBscj0oKFplLGN0LEx0LCR0KT0+e2Zvcih2YXIgSW49MCxscj0wO2xyPEx0O2xy''@;'; put 'put ''Kyspe3ZhciBMcj1HbltjdD4+Ml0sS3I9R25bY3QrND4+Ml07Y3QrPTg7dmFyIERvPVl0LnJlYWQoWmUsdG4sTHIsS3IsJHQpO2lmKERvPDApcmV0dXJuLTE7aWYoSW4rPURvLERvPEtyKWJyZWFrO3R5cGVvZiAkdDwidSImJigkdCs9RG8pfXJldHVybiBJbn0pKHpzLmdldFN0cmVhbUZyb21G''@;'; put 'put ''RChaZSksY3QsTHQpO3JldHVybiBHblskdD4+Ml09bHIsMH1jYXRjaChMcil7aWYodHlwZW9mIFl0PiJ1Inx8IkVycm5vRXJyb3IiIT09THIubmFtZSl0aHJvdyBMcjtyZXR1cm4gTHIuZXJybm99fSxuOmZ1bmN0aW9uIHBEdChaZSxjdCxMdCwkdCxJbil7dmFyIGxyPXFkKGN0LEx0KTt0cnl7''@;'; put 'put ''aWYoaXNOYU4obHIpKXJldHVybiA2MTt2YXIgTHI9enMuZ2V0U3RyZWFtRnJvbUZEKFplKTtyZXR1cm4gWXQubGxzZWVrKExyLGxyLCR0KSxmbz1bTHIucG9zaXRpb24+Pj4wLChHcj1Mci5wb3NpdGlvbiwrTWF0aC5hYnMoR3IpPj0xP0dyPjA/K01hdGguZmxvb3IoR3IvNDI5NDk2NzI5Nik+''@;'; put 'put ''Pj4wOn5+K01hdGguY2VpbCgoR3ItKyh+fkdyPj4+MCkpLzQyOTQ5NjcyOTYpPj4+MDowKV0seXJbSW4+PjJdPWZvWzBdLHlyW0luKzQ+PjJdPWZvWzFdLExyLmdldGRlbnRzJiYwPT09bHImJjA9PT0kdCYmKExyLmdldGRlbnRzPW51bGwpLDB9Y2F0Y2goS3Ipe2lmKHR5cGVvZiBZdD4idSJ8''@;'; put 'put ''fCJFcnJub0Vycm9yIiE9PUtyLm5hbWUpdGhyb3cgS3I7cmV0dXJuIEtyLmVycm5vfX0sZDpmdW5jdGlvbiBtRHQoWmUsY3QsTHQsJHQpe3RyeXt2YXIgbHI9KChaZSxjdCxMdCwkdCk9Pntmb3IodmFyIEluPTAsbHI9MDtscjxMdDtscisrKXt2YXIgTHI9R25bY3Q+PjJdLEtyPUduW2N0KzQ+''@;'; put 'put ''PjJdO2N0Kz04O3ZhciBEbz1ZdC53cml0ZShaZSx0bixMcixLciwkdCk7aWYoRG88MClyZXR1cm4tMTtpZihJbis9RG8sRG88S3IpYnJlYWs7dHlwZW9mICR0PCJ1IiYmKCR0Kz1Ebyl9cmV0dXJuIElufSkoenMuZ2V0U3RyZWFtRnJvbUZEKFplKSxjdCxMdCk7cmV0dXJuIEduWyR0Pj4yXT1s''@;'; put 'put ''ciwwfWNhdGNoKExyKXtpZih0eXBlb2YgWXQ+InUifHwiRXJybm9FcnJvciIhPT1Mci5uYW1lKXRocm93IExyO3JldHVybiBMci5lcnJub319fSxJbD1mdW5jdGlvbiBrcigpe1VyKCk7dmFyIEx0PWZ1bmN0aW9uIFRyKCl7cmV0dXJue2E6dkR0fX0oKTtyZXR1cm4gbnI/Pz1mdW5jdGlvbiB3''@;'; put 'put ''cigpe3ZhciBaZT0iZ3JhcGh2aXpsaWIud2FzbSI7cmV0dXJuIHVuKFplKT9aZTpmdW5jdGlvbiBiZShaZSl7cmV0dXJuIiIrWmV9KFplKX0oKSxmdW5jdGlvbiBicihaZSxjdCxMdCwkdCl7cmV0dXJuIFplfHwiZnVuY3Rpb24iIT10eXBlb2YgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGVTdHJl''@;'; put 'put ''YW1pbmd8fHVuKGN0KXx8KFplPT5aZS5zdGFydHNXaXRoKCJmaWxlOi8vIikpKGN0KXx8ImZ1bmN0aW9uIiE9dHlwZW9mIGZldGNoP1VuKGN0LEx0LCR0KTpmZXRjaChjdCx7Y3JlZGVudGlhbHM6InNhbWUtb3JpZ2luIn0pLnRoZW4oSW49PldlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFt''@;'; put 'put ''aW5nKEluLEx0KS50aGVuKCR0LGZ1bmN0aW9uKExyKXtyZXR1cm4gbnQoYHdhc20gc3RyZWFtaW5nIGNvbXBpbGUgZmFpbGVkOiAke0xyfWApLG50KCJmYWxsaW5nIGJhY2sgdG8gQXJyYXlCdWZmZXIgaW5zdGFudGlhdGlvbiIpLFVuKGN0LEx0LCR0KX0pKX0obHQsbnIsTHQsZnVuY3Rpb24g''@;'; put 'put ''Y3QoJHQpeyFmdW5jdGlvbiBaZSgkdCxJbil7cmV0dXJuIG10PShJbD0kdC5leHBvcnRzKS5CLFBuKCksZnVuY3Rpb24gTnQoWmUpe1huLnVuc2hpZnQoWmUpfShJbC5DKSxZcigpLElsfSgkdC5pbnN0YW5jZSl9KS5jYXRjaChmKSx7fX0oKSxyN2U9KGQuX3dlYmlkbF9mcmVlPVplPT4oZC5f''@;'; put 'put ''d2ViaWRsX2ZyZWU9SWwuRCkoWmUpLGQuX2ZyZWU9WmU9PihkLl9mcmVlPUlsLkUpKFplKSxkLl93ZWJpZGxfbWFsbG9jPVplPT4oZC5fd2ViaWRsX21hbGxvYz1JbC5GKShaZSksZC5fbWFsbG9jPVplPT4oZC5fbWFsbG9jPUlsLkcpKFplKSxkLl9lbXNjcmlwdGVuX2JpbmRfVm9pZFB0cl9f''@;'; put 'put ''X2Rlc3Ryb3lfX18wPVplPT4ocjdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9Wb2lkUHRyX19fZGVzdHJveV9fXzA9SWwuSCkoWmUpKSxpN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X0dyYXBodml6XzI9KFplLGN0KT0+KGk3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfR3JhcGh2''@;'; put 'put ''aXpfMj1JbC5JKShaZSxjdCksbzdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel92ZXJzaW9uXzA9KCk9PihvN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3ZlcnNpb25fMD1JbC5KKSgpLGE3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfbGFzdEVycm9yXzA9KCk9Pihh''@;'; put 'put ''N2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2xhc3RFcnJvcl8wPUlsLkspKCksczdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9jcmVhdGVGaWxlXzI9KFplLGN0LEx0KT0+KHM3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfY3JlYXRlRmlsZV8yPUlsLkwpKFplLGN0''@;'; put 'put ''LEx0KSxsN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2xheW91dF8zPShaZSxjdCxMdCwkdCk9PihsN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2xheW91dF8zPUlsLk0pKFplLGN0LEx0LCR0KSxjN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2FjeWNsaWNfMz0o''@;'; put 'put ''WmUsY3QsTHQsJHQpPT4oYzdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9hY3ljbGljXzM9SWwuTikoWmUsY3QsTHQsJHQpLHU3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfdHJlZF8zPShaZSxjdCxMdCwkdCk9Pih1N2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3Ry''@;'; put 'put ''ZWRfMz1JbC5PKShaZSxjdCxMdCwkdCksZDdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel91bmZsYXR0ZW5fND0oWmUsY3QsTHQsJHQsSW4pPT4oZDdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel91bmZsYXR0ZW5fND1JbC5QKShaZSxjdCxMdCwkdCxJbiksaDdlPWQuX2Vtc2Ny''@;'; put 'put ''aXB0ZW5fYmluZF9HcmFwaHZpel9nZXRfbGF5b3V0X3Jlc3VsdF8wPVplPT4oaDdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9nZXRfbGF5b3V0X3Jlc3VsdF8wPUlsLlEpKFplKSxmN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3NldF9sYXlvdXRfcmVzdWx0XzE9KFplLGN0''@;'; put 'put ''KT0+KGY3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfc2V0X2xheW91dF9yZXN1bHRfMT1JbC5SKShaZSxjdCkscDdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9nZXRfYWN5Y2xpY19vdXRGaWxlXzA9WmU9PihwN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2dldF9h''@;'; put 'put ''Y3ljbGljX291dEZpbGVfMD1JbC5TKShaZSksZzdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9zZXRfYWN5Y2xpY19vdXRGaWxlXzE9KFplLGN0KT0+KGc3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfc2V0X2FjeWNsaWNfb3V0RmlsZV8xPUlsLlQpKFplLGN0KSxtN2U9ZC5f''@;'; put 'put ''ZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X2dldF9hY3ljbGljX251bV9yZXZfMD1aZT0+KG03ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfZ2V0X2FjeWNsaWNfbnVtX3Jldl8wPUlsLlUpKFplKSx2N2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3NldF9hY3ljbGljX251bV9y''@;'; put 'put ''ZXZfMT0oWmUsY3QpPT4odjdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9zZXRfYWN5Y2xpY19udW1fcmV2XzE9SWwuVikoWmUsY3QpLGI3ZT1kLl9lbXNjcmlwdGVuX2JpbmRfR3JhcGh2aXpfZ2V0X3RyZWRfb3V0XzA9WmU9PihiN2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6''@;'; put 'put ''X2dldF90cmVkX291dF8wPUlsLlcpKFplKSx5N2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3NldF90cmVkX291dF8xPShaZSxjdCk9Pih5N2U9ZC5fZW1zY3JpcHRlbl9iaW5kX0dyYXBodml6X3NldF90cmVkX291dF8xPUlsLlgpKFplLGN0KSxfN2U9ZC5fZW1zY3JpcHRlbl9iaW5k''@;'; put 'put ''X0dyYXBodml6X2dldF90cmVkX2Vycl8wPVplPT4oXzdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9nZXRfdHJlZF9lcnJfMD1JbC5ZKShaZSksdzdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9zZXRfdHJlZF9lcnJfMT0oWmUsY3QpPT4odzdlPWQuX2Vtc2NyaXB0ZW5fYmlu''@;'; put 'put ''ZF9HcmFwaHZpel9zZXRfdHJlZF9lcnJfMT1JbC5aKShaZSxjdCksQzdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9fX2Rlc3Ryb3lfX18wPVplPT4oQzdlPWQuX2Vtc2NyaXB0ZW5fYmluZF9HcmFwaHZpel9fX2Rlc3Ryb3lfX18wPUlsLl8pKFplKSxTN2U9KFplLGN0KT0+KFM3ZT1J''@;'; put 'put ''bC5hYSkoWmUsY3QpO2Z1bmN0aW9uIE03ZSgpe1d0PjB8fChmdW5jdGlvbiB3aSgpe1VhKGpyKX0oKSxXdD4wKXx8ZnVuY3Rpb24gWmUoKXtVTnx8KFVOPSEwLGQuY2FsbGVkUnVuPSEwLCFKdCYmKGZ1bmN0aW9uIFFpKCl7IWQubm9GU0luaXQmJiFZdC5pbml0aWFsaXplZCYmWXQuaW5pdCgp''@;'; put 'put ''LFl0Lmlnbm9yZVBlcm1pc3Npb25zPSExLGw0LmluaXQoKSxVYShYbil9KCksaChkKSxmdW5jdGlvbiB2dCgpe1VhKElyKX0oKSkpfSgpfWZ1bmN0aW9uIFEyKCl7fWZ1bmN0aW9uIFpOKFplKXtyZXR1cm4oWmV8fFEyKS5fX2NhY2hlX199ZnVuY3Rpb24gRnRlKFplLGN0KXt2YXIgTHQ9Wk4o''@;'; put 'put ''Y3QpLCR0PUx0W1plXTtyZXR1cm4gJHR8fCgoJHQ9T2JqZWN0LmNyZWF0ZSgoY3R8fFEyKS5wcm90b3R5cGUpKS5wdHI9WmUsTHRbWmVdPSR0KX1kLlVURjhUb1N0cmluZz1XMCwkbj1mdW5jdGlvbiBaZSgpe1VOfHxNN2UoKSxVTnx8KCRuPVplKX0sTTdlKCksKFEyLnByb3RvdHlwZT1PYmpl''@;'; put 'put ''Y3QuY3JlYXRlKFEyLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPVEyLFEyLnByb3RvdHlwZS5fX2NsYXNzX189UTIsUTIuX19jYWNoZV9fPXt9LGQuV3JhcHBlck9iamVjdD1RMixkLmdldENhY2hlPVpOLGQud3JhcFBvaW50ZXI9RnRlLGQuY2FzdE9iamVjdD1mdW5jdGlvbiBTRHQoWmUsY3Qp''@;'; put 'put ''e3JldHVybiBGdGUoWmUucHRyLGN0KX0sZC5OVUxMPUZ0ZSgwKSxkLmRlc3Ryb3k9ZnVuY3Rpb24gTUR0KFplKXtpZighWmUuX19kZXN0cm95X18pdGhyb3ciRXJyb3I6IENhbm5vdCBkZXN0cm95IG9iamVjdC4gKERpZCB5b3UgY3JlYXRlIGl0IHlvdXJzZWxmPykiO1plLl9fZGVzdHJveV9f''@;'; put 'put ''KCksZGVsZXRlIFpOKFplLl9fY2xhc3NfXylbWmUucHRyXX0sZC5jb21wYXJlPWZ1bmN0aW9uIHhEdChaZSxjdCl7cmV0dXJuIFplLnB0cj09PWN0LnB0cn0sZC5nZXRQb2ludGVyPWZ1bmN0aW9uIEVEdChaZSl7cmV0dXJuIFplLnB0cn0sZC5nZXRDbGFzcz1mdW5jdGlvbiBURHQoWmUpe3Jl''@;'; put 'put ''dHVybiBaZS5fX2NsYXNzX199O3ZhciBVcz17YnVmZmVyOjAsc2l6ZTowLHBvczowLHRlbXBzOltdLG5lZWRlZDowLHByZXBhcmUoKXtpZihVcy5uZWVkZWQpe2Zvcih2YXIgWmU9MDtaZTxVcy50ZW1wcy5sZW5ndGg7WmUrKylkLl93ZWJpZGxfZnJlZShVcy50ZW1wc1taZV0pO1VzLnRlbXBz''@;'; put 'put ''Lmxlbmd0aD0wLGQuX3dlYmlkbF9mcmVlKFVzLmJ1ZmZlciksVXMuYnVmZmVyPTAsVXMuc2l6ZSs9VXMubmVlZGVkLFVzLm5lZWRlZD0wfVVzLmJ1ZmZlcnx8KFVzLnNpemUrPTEyOCxVcy5idWZmZXI9ZC5fd2ViaWRsX21hbGxvYyhVcy5zaXplKSxDbihVcy5idWZmZXIpKSxVcy5wb3M9MH0s''@;'; put 'put ''YWxsb2MoWmUsY3Qpe0NuKFVzLmJ1ZmZlcik7dmFyIEluLCR0PVplLmxlbmd0aCpjdC5CWVRFU19QRVJfRUxFTUVOVDtyZXR1cm4gJHQ9UkEoJHQsOCksVXMucG9zKyR0Pj1Vcy5zaXplPyhDbigkdD4wKSxVcy5uZWVkZWQrPSR0LEluPWQuX3dlYmlkbF9tYWxsb2MoJHQpLFVzLnRlbXBzLnB1''@;'; put 'put ''c2goSW4pKTooSW49VXMuYnVmZmVyK1VzLnBvcyxVcy5wb3MrPSR0KSxJbn0sY29weShaZSxjdCxMdCl7THQvPWN0LkJZVEVTX1BFUl9FTEVNRU5UO2Zvcih2YXIgJHQ9MDskdDxaZS5sZW5ndGg7JHQrKyljdFtMdCskdF09WmVbJHRdfX07ZnVuY3Rpb24gZWYoWmUpe2lmKCJzdHJpbmciPT10''@;'; put 'put ''eXBlb2YgWmUpe3ZhciBjdD1mdW5jdGlvbiBfMyhaZSxjdCxMdCl7dmFyICR0PUx0PjA/THQ6UWEoWmUpKzEsSW49bmV3IEFycmF5KCR0KSxscj1DNihaZSxJbiwwLEluLmxlbmd0aCk7cmV0dXJuIGN0JiYoSW4ubGVuZ3RoPWxyKSxJbn0oWmUpLEx0PVVzLmFsbG9jKGN0LHRuKTtyZXR1cm4g''@;'; put 'put ''VXMuY29weShjdCx0bixMdCksTHR9cmV0dXJuIFplfWZ1bmN0aW9uIEpnKCl7dGhyb3ciY2Fubm90IGNvbnN0cnVjdCBhIFZvaWRQdHIsIG5vIGNvbnN0cnVjdG9yIGluIElETCJ9ZnVuY3Rpb24gaWEoWmUsY3Qpe1plJiYib2JqZWN0Ij09dHlwZW9mIFplJiYoWmU9WmUucHRyKSxjdCYmIm9i''@;'; put 'put ''amVjdCI9PXR5cGVvZiBjdCYmKGN0PWN0LnB0ciksdGhpcy5wdHI9aTdlKFplLGN0KSxaTihpYSlbdGhpcy5wdHJdPXRoaXN9cmV0dXJuKEpnLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFEyLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPUpnLEpnLnByb3RvdHlwZS5fX2NsYXNzX189SmcsSmcu''@;'; put 'put ''X19jYWNoZV9fPXt9LGQuVm9pZFB0cj1KZyxKZy5wcm90b3R5cGUuX19kZXN0cm95X189SmcucHJvdG90eXBlLl9fZGVzdHJveV9fPWZ1bmN0aW9uKCl7cjdlKHRoaXMucHRyKX0sKGlhLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFEyLnByb3RvdHlwZSkpLmNvbnN0cnVjdG9yPWlhLGlhLnBy''@;'; put 'put ''b3RvdHlwZS5fX2NsYXNzX189aWEsaWEuX19jYWNoZV9fPXt9LGQuR3JhcGh2aXo9aWEsaWEucHJvdG90eXBlLnZlcnNpb249aWEucHJvdG90eXBlLnZlcnNpb249ZnVuY3Rpb24oKXtyZXR1cm4gVzAobzdlKCkpfSxpYS5wcm90b3R5cGUubGFzdEVycm9yPWlhLnByb3RvdHlwZS5sYXN0RXJy''@;'; put 'put ''b3I9ZnVuY3Rpb24oKXtyZXR1cm4gVzAoYTdlKCkpfSxpYS5wcm90b3R5cGUuY3JlYXRlRmlsZT1pYS5wcm90b3R5cGUuY3JlYXRlRmlsZT1mdW5jdGlvbihaZSxjdCl7dmFyIEx0PXRoaXMucHRyO1VzLnByZXBhcmUoKSxaZT1aZSYmIm9iamVjdCI9PXR5cGVvZiBaZT9aZS5wdHI6ZWYoWmUp''@;'; put 'put ''LGN0PWN0JiYib2JqZWN0Ij09dHlwZW9mIGN0P2N0LnB0cjplZihjdCksczdlKEx0LFplLGN0KX0saWEucHJvdG90eXBlLmxheW91dD1pYS5wcm90b3R5cGUubGF5b3V0PWZ1bmN0aW9uKFplLGN0LEx0KXt2YXIgJHQ9dGhpcy5wdHI7cmV0dXJuIFVzLnByZXBhcmUoKSxaZT1aZSYmIm9iamVj''@;'; put 'put ''dCI9PXR5cGVvZiBaZT9aZS5wdHI6ZWYoWmUpLGN0PWN0JiYib2JqZWN0Ij09dHlwZW9mIGN0P2N0LnB0cjplZihjdCksTHQ9THQmJiJvYmplY3QiPT10eXBlb2YgTHQ/THQucHRyOmVmKEx0KSxXMChsN2UoJHQsWmUsY3QsTHQpKX0saWEucHJvdG90eXBlLmFjeWNsaWM9aWEucHJvdG90eXBl''@;'; put 'put ''LmFjeWNsaWM9ZnVuY3Rpb24oWmUsY3QsTHQpe3ZhciAkdD10aGlzLnB0cjtyZXR1cm4gVXMucHJlcGFyZSgpLFplPVplJiYib2JqZWN0Ij09dHlwZW9mIFplP1plLnB0cjplZihaZSksY3QmJiJvYmplY3QiPT10eXBlb2YgY3QmJihjdD1jdC5wdHIpLEx0JiYib2JqZWN0Ij09dHlwZW9mIEx0''@;'; put 'put ''JiYoTHQ9THQucHRyKSwhIWM3ZSgkdCxaZSxjdCxMdCl9LGlhLnByb3RvdHlwZS50cmVkPWlhLnByb3RvdHlwZS50cmVkPWZ1bmN0aW9uKFplLGN0LEx0KXt2YXIgJHQ9dGhpcy5wdHI7VXMucHJlcGFyZSgpLFplPVplJiYib2JqZWN0Ij09dHlwZW9mIFplP1plLnB0cjplZihaZSksY3QmJiJv''@;'; put 'put ''YmplY3QiPT10eXBlb2YgY3QmJihjdD1jdC5wdHIpLEx0JiYib2JqZWN0Ij09dHlwZW9mIEx0JiYoTHQ9THQucHRyKSx1N2UoJHQsWmUsY3QsTHQpfSxpYS5wcm90b3R5cGUudW5mbGF0dGVuPWlhLnByb3RvdHlwZS51bmZsYXR0ZW49ZnVuY3Rpb24oWmUsY3QsTHQsJHQpe3ZhciBJbj10aGlz''@;'; put 'put ''LnB0cjtyZXR1cm4gVXMucHJlcGFyZSgpLFplPVplJiYib2JqZWN0Ij09dHlwZW9mIFplP1plLnB0cjplZihaZSksY3QmJiJvYmplY3QiPT10eXBlb2YgY3QmJihjdD1jdC5wdHIpLEx0JiYib2JqZWN0Ij09dHlwZW9mIEx0JiYoTHQ9THQucHRyKSwkdCYmIm9iamVjdCI9PXR5cGVvZiAkdCYm''@;'; put 'put ''KCR0PSR0LnB0ciksVzAoZDdlKEluLFplLGN0LEx0LCR0KSl9LGlhLnByb3RvdHlwZS5nZXRfbGF5b3V0X3Jlc3VsdD1pYS5wcm90b3R5cGUuZ2V0X2xheW91dF9yZXN1bHQ9ZnVuY3Rpb24oKXtyZXR1cm4gVzAoaDdlKHRoaXMucHRyKSl9LGlhLnByb3RvdHlwZS5zZXRfbGF5b3V0X3Jlc3Vs''@;'; put 'put ''dD1pYS5wcm90b3R5cGUuc2V0X2xheW91dF9yZXN1bHQ9ZnVuY3Rpb24oWmUpe3ZhciBjdD10aGlzLnB0cjtVcy5wcmVwYXJlKCksWmU9WmUmJiJvYmplY3QiPT10eXBlb2YgWmU/WmUucHRyOmVmKFplKSxmN2UoY3QsWmUpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaWEucHJvdG90eXBlLCJs''@;'; put 'put ''YXlvdXRfcmVzdWx0Iix7Z2V0OmlhLnByb3RvdHlwZS5nZXRfbGF5b3V0X3Jlc3VsdCxzZXQ6aWEucHJvdG90eXBlLnNldF9sYXlvdXRfcmVzdWx0fSksaWEucHJvdG90eXBlLmdldF9hY3ljbGljX291dEZpbGU9aWEucHJvdG90eXBlLmdldF9hY3ljbGljX291dEZpbGU9ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gVzAocDdlKHRoaXMucHRyKSl9LGlhLnByb3RvdHlwZS5zZXRfYWN5Y2xpY19vdXRGaWxlPWlhLnByb3RvdHlwZS5zZXRfYWN5Y2xpY19vdXRGaWxlPWZ1bmN0aW9uKFplKXt2YXIgY3Q9dGhpcy5wdHI7VXMucHJlcGFyZSgpLFplPVplJiYib2JqZWN0Ij09dHlwZW9mIFplP1plLnB0''@;'; put 'put ''cjplZihaZSksZzdlKGN0LFplKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGlhLnByb3RvdHlwZSwiYWN5Y2xpY19vdXRGaWxlIix7Z2V0OmlhLnByb3RvdHlwZS5nZXRfYWN5Y2xpY19vdXRGaWxlLHNldDppYS5wcm90b3R5cGUuc2V0X2FjeWNsaWNfb3V0RmlsZX0pLGlhLnByb3RvdHlwZS5n''@;'; put 'put ''ZXRfYWN5Y2xpY19udW1fcmV2PWlhLnByb3RvdHlwZS5nZXRfYWN5Y2xpY19udW1fcmV2PWZ1bmN0aW9uKCl7cmV0dXJuIG03ZSh0aGlzLnB0cil9LGlhLnByb3RvdHlwZS5zZXRfYWN5Y2xpY19udW1fcmV2PWlhLnByb3RvdHlwZS5zZXRfYWN5Y2xpY19udW1fcmV2PWZ1bmN0aW9uKFplKXta''@;'; put 'put ''ZSYmIm9iamVjdCI9PXR5cGVvZiBaZSYmKFplPVplLnB0ciksdjdlKHRoaXMucHRyLFplKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGlhLnByb3RvdHlwZSwiYWN5Y2xpY19udW1fcmV2Iix7Z2V0OmlhLnByb3RvdHlwZS5nZXRfYWN5Y2xpY19udW1fcmV2LHNldDppYS5wcm90b3R5cGUuc2V0''@;'; put 'put ''X2FjeWNsaWNfbnVtX3Jldn0pLGlhLnByb3RvdHlwZS5nZXRfdHJlZF9vdXQ9aWEucHJvdG90eXBlLmdldF90cmVkX291dD1mdW5jdGlvbigpe3JldHVybiBXMChiN2UodGhpcy5wdHIpKX0saWEucHJvdG90eXBlLnNldF90cmVkX291dD1pYS5wcm90b3R5cGUuc2V0X3RyZWRfb3V0PWZ1bmN0''@;'; put 'put ''aW9uKFplKXt2YXIgY3Q9dGhpcy5wdHI7VXMucHJlcGFyZSgpLFplPVplJiYib2JqZWN0Ij09dHlwZW9mIFplP1plLnB0cjplZihaZSkseTdlKGN0LFplKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGlhLnByb3RvdHlwZSwidHJlZF9vdXQiLHtnZXQ6aWEucHJvdG90eXBlLmdldF90cmVkX291''@;'; put 'put ''dCxzZXQ6aWEucHJvdG90eXBlLnNldF90cmVkX291dH0pLGlhLnByb3RvdHlwZS5nZXRfdHJlZF9lcnI9aWEucHJvdG90eXBlLmdldF90cmVkX2Vycj1mdW5jdGlvbigpe3JldHVybiBXMChfN2UodGhpcy5wdHIpKX0saWEucHJvdG90eXBlLnNldF90cmVkX2Vycj1pYS5wcm90b3R5cGUuc2V0''@;'; put 'put ''X3RyZWRfZXJyPWZ1bmN0aW9uKFplKXt2YXIgY3Q9dGhpcy5wdHI7VXMucHJlcGFyZSgpLFplPVplJiYib2JqZWN0Ij09dHlwZW9mIFplP1plLnB0cjplZihaZSksdzdlKGN0LFplKX0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGlhLnByb3RvdHlwZSwidHJlZF9lcnIiLHtnZXQ6aWEucHJvdG90''@;'; put 'put ''eXBlLmdldF90cmVkX2VycixzZXQ6aWEucHJvdG90eXBlLnNldF90cmVkX2Vycn0pLGlhLnByb3RvdHlwZS5fX2Rlc3Ryb3lfXz1pYS5wcm90b3R5cGUuX19kZXN0cm95X189ZnVuY3Rpb24oKXtDN2UodGhpcy5wdHIpfSx2fSk7ZnVuY3Rpb24gWE10KCl7cmV0dXJuIHh0ZXx8KHh0ZT1mdW5j''@;'; put 'put ''dGlvbiBXTXQoYyxsKXtmb3IodmFyIGE9W10sZD0rIWwsaD0wLGY9MDtjLmxlbmd0aDspe3ZhciB2PVBNdChjLGR8fGwpO2lmKCJvYmplY3QiPT10eXBlb2Ygdil7Zm9yKGQ/KGw9bnVsbCx2LncubGVuZ3RoPT12LnUmJihhLnB1c2gobD12LncpLGYrPXYudSkpOihhLnB1c2gobCksdi5lPTAp''@;'; put 'put ''OyF2Lmw7KXt2YXIgTT1VTXQoYyx2LGwpO018fFF1KDUpLGw/di5lPXYueTooYS5wdXNoKE0pLGYrPU0ubGVuZ3RoLFJNdCh2LncsMCxNLmxlbmd0aCksdi53LnNldChNLHYudy5sZW5ndGgtTS5sZW5ndGgpKX1oPXYuYis0KnYuY31lbHNlIGg9djtjPWMuc3ViYXJyYXkoaCl9cmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uKGMsbCl7aWYoMT09Yy5sZW5ndGgpcmV0dXJuIGNbMF07Zm9yKHZhciBhPW5ldyBEdShsKSxkPTAsaD0wO2Q8Yy5sZW5ndGg7KytkKXt2YXIgZj1jW2RdO2Euc2V0KGYsaCksaCs9Zi5sZW5ndGh9cmV0dXJuIGF9KGEsZil9KGZ1bmN0aW9uIEtNdChjKXtsZXQgbD1jLmxlbmd0aCxh''@;'; put 'put ''PVtdLGQ9MCxoPTAsZj0tMTtmb3IobGV0IHY9MDt2PGw7disrKXtsZXQgTT0nQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkhIyQlJigpKissLi86Ozw9Pj9AW11eX2B7fH1+IicuaW5kZXhPZihjW3ZdKTtpZigtMSE9PU0paWYo''@;'; put 'put ''ZjwwKWY9TTtlbHNle2YrPTkxKk0sZHw9Zjw8aCxoKz0oODE5MSZmKT44OD8xMzoxNDtkb3thLnB1c2goMjU1JmQpLGQ+Pj04LGgtPTh9d2hpbGUoaD43KTtmPS0xfX1yZXR1cm4gZj4tMSYmYS5wdXNoKDI1NSYoZHxmPDxoKSksbmV3IFVpbnQ4QXJyYXkoYSl9KCd2NyNhU1hVbmBEQFE8LHoz''@;'; put 'put ''Xlgma1UyaHR6OHsvcFlEbW4/eyRKanoycl8/SmxeKzZuRm89eEk8JkI5RkJWK3diO1hhfHFvUnpnYmVLc0JTXn5deHp2Pj18LnE/KE08OEdENUdMI0t7c1tTNCFeQzRMeXJOYUxLb1JrRUprTExse2YwVjkwPDteUXB1Z3k1QSUpJilaOnNnOmgufWA4dXVUW1dCQSh5KXV5fEJVSCU4IUUqYGYx''@;'; put 'put ''d0JfeFsmQDVxRzUlYiZ+amUmN0RiSiRMbHpVQz5XXi87Zmh7PHxHQnkiKX5sJXNfMWE4bT5kMFhQQXNUOUxiVyhpakJlTldXW0BebSQoOnZ9b3tRay50aH49OygxYTheMW19TX57PDU/U1AoXilbMkxzYE1gdTkpeVp9Yi9KRH42Rkx0WnNtXkZsfGtIWCw0RlV6cSpPYXo9Ql82czcpU2Q0TF1M''@;'; put 'put ''Y3xseHp2aGg/NnREOCVOXUAmPzhpTzxVUHNbNUpxI1pSZ1p9azNEcUg9JTJRRHtEdGZ9b3dFSjZJZHJZRz5WdUUkTVZ3XSwmfk8scUxpQiY1bT8hWUdnaSppVysiUVB5JD9VWmtjYT4wZ0RvITdHfH5nNWRLfFszL3s1fm8kMHYlSmwxODJBcX49emU4fkV6SGVfW1FEY1kxfShlLEtIdTFVOylY''@;'; put 'put ''WFdAfTEmZ3QsfmAycC86fVhkWW4hTkhmXWk3Nl5YI1FxeW9ncD8lNyRYc3ksWiZ6XyMyZzslLCVuOV55ck5fdnkoKzFTcWBkaH1dJmxha2hMfXImeDM1KmJzeltbd113fjd8UTVscitydmt5aTVUfD1aIUs5fUg8PXI2U19GOGpOUyl9PVJfU18vT2d+Oi9qPGY4RD9CX219IjQzdGgqZyFVJkpX''@;'; put 'put ''MyRRZEA9dVsqbVhOY3B7O3VjJkpdT1BRITAkZlc4KWNKUTZlOms1QCIjJDRzNjxQNk5iMDBBcSRvY1tNJkNqSENfYjdzYWBbaEYvJHc1V3ZHM3RIKC5iKEtlSFJ3WHcvKnU+PV1yI3BMVzw3X2xRVG4oMT5ob0FlemJ5dT58ej92MkpyPUUlYyJmQDguXU0qWVUiT0d+MWNiMEA4MypbMDE5dyU7''@;'; put 'put ''XW1vdGk+dURzP3A9RSZjSFF3TzI/eSZxWSNkI2N+cW5EUndPQGE7XnlTdUIvX2o1SUhaeGEkaUVzKDBqbTxZc0VIbTBdaVd7YzJyQS4oeSlzQE5fYzpnTmpdSmszJlopI19bI05eRVpiTyMiYEJ8N3hLZj5eNlR4THc3RC9eeWpyWVU3YmlnMnNUQExAQVttYUVzO00sYj9tNnZVMVJ3eG96Llp8''@;'; put 'put ''QWErYH5xVF1ALztuXnkqZDIjcENLOTFnWE5HUG0ibllBViFqe0p5NWF8fHB2b19EajdRcDQwfCtOZlFWWjdEeH4/d2xRcCFDVU5rbHBFO2FaOm9jQE0hJDsvP2FTKGgyb25ARTRjSFFKRDhzUVErQ3E1LE44OklmcntPbj42XiVKbjtVMzwvLjxtNCZYT1c9N09TWyxKVTU3UigvJmIwN11bMkFG''@;'; put 'put ''WnhhSHAzNWF4O0llc1RARjJzU2lbaEcmOn57SXBzTFlFLno2VHxFNXhhP0Z7T1dRKjheRCUlMmRdaFhCNkUmbVU1fWlrTV8rdmZqei52MHdXN35gcFdfbSRJUyJ8PVQjPi9aVn5COEZMPDZATlB9LmdXMStMPDYqY1hnU2JzY0VKVjd4b2xTRTYkYyN4KHA/JEhMTilCfG42YWg5UF9qKyolKiRv''@;'; put 'put ''XTNYIXZFTF1dJFhfdzZkNklsIWRAUzYzSCZ7L2RGMzNlPzkqZHhJVzdoZFVEOF5eel10JjNKP2MwNiJiP21DKEMoNXNZVW4idn1ROjpufGEhdGxWPDNATlN7XSNCNHk+eTVeW34uXnlIajkqYHtDOEpMKyNybit2S30vZj9TPkAmPDRAMU9CV0hXbmcudH1PN3dwMFQ5TDU8UDE4d1sybTo9OF1f''@;'; put 'put ''ITsvK2wvdEVaaWg4IVZUMypAQzNIUFB+SGlaL3Fde3A0ZTtLbz9AdVo9M3kjZXpzPXBaTVNDNVtCfihgN14kakBuVGdlajM5M2g+Q3ljJVYvUXklbkRKUWFCM3spMHZDMzsjS2tpLkE2bjhHP1cjKGwkfCI8YX5YfkpYbU82OXlMO3RfWXQ/V3dZWnhhOT1Ldzg5ImA0eUF7Oz1jJmcubUBUZXNH''@;'; put 'put ''U25tImdkOlk1eDl8QjVCTWFZWDU1TGBIQUQuZlMyYGtjdiVscyNfa110TVF7c3NZJSJ+d1M6dHxbOFNOfkhOOFg1Nzl8cX44ZWxsIlY9V3s7K2gsRC40YlZnQHtpVXIuWDlDaDtJbns6eztJXi5hWkdMU1o5cFRnU3wqVVN+RUtROSlfX0xeeStbQS9oOlJVUTVOTEV5cV4xY21kUlM6fVYvQzhG''@;'; put 'put ''ajEhdD5WS3t5fF5OXl1fTkcpd0l2SUNPbzs7bDlYKVsmZH5ucERGZj1PeS5DZjliKSI9PGc7bW45X2tDbk99WjlhWUlyNjl1aDR1X1NUOmg3ZDduPk5tNTZAZi5CZCE+WVo8fWtLQDE8X2E8NUg4Yms3ZCNvSjNicCo5TGUvU10jbiQoVm5nMyZMW01xY1hWVHM3RFFHcFNQOEkkJTJSTD1QU1pS''@;'; put 'put ''JEh6ZSV3PyxgRXx7fGwjOk8lfXtDc016QXBfeiNuansqc2JrSE1kS35rbThBTDg3SzkjaE1ecFoiK2B5VWFJezsvaEdFKFU7ZVt1YURWbjp+cXsrZDhFVyRlWFVRNW8yNVhwRyF8SDJQcDM4IyxMZC50anBYTTw6fGMpMCwvcEdfZDZNQ1M6fShLOHtkWWN7eyk5VEhUO2RWKzhfakw2fmFJRChk''@;'; put 'put ''O1dlaHJkO1dlcSQqQV06JEgibzxibDtzfWpnSC9kOF1leGlTVWNkeiN7QFZlaV9iZG9EZj55WmxaMWxjfjNWPjhhfmgpeyYmVmZRbl1bdilLR3w0SSRHKWB6d0EkSGchby9PI1ZLWDZyZnRMRTA4XUV3bVQ2VnJdMiM1dDtHWU09YVg9LyRIYDclMlIhczlZfmYyKU1WZ15fPyYlQ2cqPG5SWmVK''@;'; put 'put ''MiEvXUhVWnZJW3lvblFyLlVDPnxMQENUVUB8YEwqN0BidT9eKmN+ZzNSVVdqVFFyV0Y3KDMlc14+eCVjRmc+JkNnNzloNmVsJWNpVEJlYUZxKlswQn5WK0RbM3JoLF92eWU1fnw/blpbR194JD5NJW5HV1RCMHs4Qy8sOnNJUks2KVJZfCFJQV1URmc/L21aWDRJbVo6dVNWLm9XMzA8Rkw9JGRC''@;'; put 'put ''TF9MZXBXbUI6OnhleDVUTmVGOTk2dUQjKzhVNDV8THdbSXJJWj5UeSVVO11gdSUoSitlPGRbI2t5NWBEPlRIU3twdkxyeHJIcHxJVjc7VEFuW0xLZnJFYTleZXlQZF1NOT5qOnEzLEhsNG03MjlJcWFCMFcuZDhfbXohW0sxPmQhKD1zZXY6YCp2eUd9K203PXpsYTh4NyUwNVQ9a10mSks2MjMi''@;'; put 'put ''SnMvUmcyL1t2d3FZbjJqZn4+eWVseUpmLylEOFszW2VdZWI+U20rRnFVSTxkImI7RzhEOHh+WXdUdlFaRFlvNStJVnFLc1FWfkhSfTpqbFNoX0xbYkw2SE05d2x5TkYlUnMscyYsNCtGKEFGRyV0fWpaT3AjdlFaX1hrNmRQYiVybSJ6aDMzakF4I1lKfXAsbDgqS3lmcWtWPXI5OUxXNyEjYSV9''@;'; put 'put ''UFA9JWNubTM3VFQvZH44bCl3bzJdZV1Se2w1X0ptPCpQPldtKWEqJjdUfVl3JWx+b25ReTtqaF8yMkRPYj5HJTUiSTg1UzB5PWVrcFUvPTZXXSZGRnlpPjl4cip5NnYvU1tdTV1jcEt6X11ITHRZJmhmJCtHeClnfipnOSY0clNtdVpIUHw8NDVmd1FAcSl9YHVNOXFZZHxDPnhVeyJnMz1sMFtQ''@;'; put 'put ''I34yTUp1T2ZKdTJIKlRGZ3lyPl1LXyt2WnUwOitsQldLNXVYYlgzU3xhfXtsXUNRJm8hTXd+UjNaYToqWyp6Zl9hODVBOVpzIUNVQDJOfnh5LjVgZHppN1VbOk89aTtDcHJGU1pEQlJ6I104NixGTF0kRStEVzErPnR6O0ZZNzkubCRFcGQrNSU8KHBrRE1kTHNEUWQkUmZuX11tVH55Jkpvd3pS''@;'; put 'put ''ZnBUMldLMS8jLH0oblNqPlgkMlVEfU5QMTZWYCk0K2c2JTx5LjR1c2Q3b1chYSklSjglOFJOWSVeNGpNS2BiZEBAL1FvSF1RREtxIWFAdEhaPFprXVl2YzRzNnFpXT86YyU6bXh8Q3twKUpkRlc9VUtJb3w8ck9pYXR9P2JKJDpjU2JmN1hLc2c3eyh+cz9KRHNjZjA7O0BxbHIlcy5afSQvKGhX''@;'; put 'put ''Q0AuVFpZaWs7VX4oKyo4c0RRXWx5emw3JihKW1NlbShndG9eMStEMXd0cUZ4bEQ4cyh7OFZheHI1T2I3eGpSY2FsQUs7e3dvSFBofS4jSzh0S205Zjl0Mz9ZUCpVVHBnXVt6fkkmYSllKHRLR15GX2AqajcyPj9PXTYqXi95Z1tlPFEhfHBXaiF4RiVWdXAlMXMjLD81bTdlK3lxe2lgU0Q5dXxg''@;'; put 'put ''Zj4zW1BVOkt+TWpEdFJfb3kzb1Z2QHB9UHY1VlhFPjF9YGsoS3sqVz15ckJ9XllCZDY1TmxsfWBrLmZNPUt4WVpKeXl3VyRybVFkJTosUDQ5WCU8KT9HS3tNIygidj1QWCYrYX59JF55JiZ5M0Eley4kSmdgR0pjMkVxZHJgK0lKYlo4MntaW1RBPjlfWitiOiouQzI8dn1aPF0md1orImEyfkUr''@;'; put 'put ''X15adlJaak0xU3JCKDU3VFNfLmR+IUMxN14+NnBEM307Qn14RixEP2t4TWppY1pOZmQobnB1UUdjfWdfdm0/VHB6PT1zY3FvSioybWtYazFUMUwqPmxaaH1pIzpDeHkmM29INHZ4fDxKZSliL2QhOm1WM11yQH1OXjdCeChiRm84Vm08Z09LUTQ5eDNdM2opU345T0d0JntJSmMmPypWPWc+KWBj''@;'; put 'put ''WC9BOSNROSVaUzkxfTElZWpDZV9iaFZmW25vdGlONUI6OWVbUFNaT2RuLj1qTGsiP1ZMNWNEXzZWOU9rMGBOZixJRlphZkckcDxjQThQRTIlX1tRRHpWWF06PX1OWDdwNGBQamBYeXRZMD53bHk9Iz5VZj9TNk0+P1BnKk4xPilOcGFYWTokKFZGV0xkb1s1LF1oUi5jSCIlMEJSRTRMPG8maT0m''@;'; put 'put ''NEw3cnNWfltyLmx9RGJVLDg9dGU2UWhpWmsqdCtZPUB5ODdiNHoqL3ZhZ11rVCRZZCQsXjoiKDAsL0VGSyNtIiYsNikpLEZnUHZ+d3cmOSs4bjB5Znc+YXVZSmNfW1J3KmxdXjpjSCRmNzQ9NElJM2soc1YycVY9NlIveEFPZyxpVy4yVmtKaj1tTV5LfCVGJWhiQGtnSnF9bFpvQzZyRjltI3s0''@;'; put 'put ''PTAwVDFWd1QuZDhFfW5KNTVEJDYvSGRUMD0jbi5He1s4XX5tJC86MkBoMkdMKCZ+JGZlQiY7VF1PcDJtP2YxfXspS0MobWlAZmdzYWY5Olo6SH4sR104JlZzaURJLDYheVQ5ckYjUyE6L21aeCYuaUBuZVYuYX4oS30+P2QxcjdsPF50JixuTUp5NWw3aF0hPSE+TyNoPChwPUUjY2pPLl5qWztU''@;'; put 'put ''VF1ufnAsM2ViWjxUSFExLmI3eCUmeDplSnFbNVhwbi5MI203STVVPHVfP0dMKm1MWDkwSnBSbVNXZS5oIkFESTY2dTJbUWQiW3dqZSJoQkI/RWI/e2U5KEZCaklxcXM4MihLQ31LRkJdUXl0aXhdUE9HfGVTdElEJC5Mdnw5MXRjRDo6Z1kvaH1BV0hpQ0JQMCkmd2FxIkF7SHVtcElZdEpFaSYi''@;'; put 'put ''XTYoS0NXaWV1XTkydHdEZjdWeDcob0M7Ukd1IjtEaUVEOjpdNmBRNCJDRi9IM1A7I3ExY3RbRXojVmxWRTkodUMwb3UyXzkhIm1GK3A1N2M8KXkqd2llPmkzISsrRk4iRDgmYzx6K0d1aFJwTlNqeXpYQz1ra0VhanQpakYmQGJmMStXdXdVJSpveCJRIihyQiJXaE5UamJNY0ZpS3xlLihXQyZN''@;'; put 'put ''aWFdUW4ia0QlMX5sTnQjdCRQczxZOzp5I0MuKDtIN1IyTDBGMCJdYWJqZk08RnRmSVRUalhYU01+UjQhNkxeSUIuVkIzUl4oO0M0enFDVGo7dDhGbDNyQ1RqZVh3U11nJipUamdYLE5WZGY8PXl3RHc7cE5Val90c0w/ai9JP3kreENlfGpVanFYeFBuLDNSKUxESWBuY2ZbeU5FYDwye1VqMFhi''@;'; put 'put ''UnNvZjxdeWxFPyFicmVmXnl0RUU/VHZWajhYYFQ1N2Q8X3kqRXBAZjtWaiVYMVRLdTUhP0xGS2EuUG1FIXN1WnBJJD4xfHlXRjlfN1BRdHZYdlZJb2Q8ZyJ2WC8zOHA6YzpWIig0ZERQO1YkP09Qb2k6VmJgfURHbzpWRCk5ZWhCNnJIQihKeXxeMzh8U0NILl1LRj91UEIsX0tHPz5QKjc6VnYp''@;'; put 'put ''dXgwJXRbWnxxQ3ZAXUtJP2xLQClzRjxyNkB6UVt8X0tKPypLaEJfMmBUfF95RmNHezNjPyoqYFdWWmJ8Yiw2WG9ZOHJ1dSN3cXkxX1hHKU8rSDVffkkyTF8zUD9FTilvP1ZeP1VOQTA/VmgpZ2x0ZDhyXXUmM3BGNF9NSGolckYzX21KOFpfM1U/L09AKT9WcilDZlMpSjdCPyFQNTU4ckJ2fiZw''@;'; put 'put ''RjhfNUlZXTNSTXpDeGNVUzp2OGkhcHY6Uj1SdVBpaXhFai9MUEQhdHYjUyZpdVBqaS9FMz02XUQhdCo/SmwqKjBHaUdGXm9HZUNmKmlTRmBeP0RGIThDQ3I7I0NmaSV7IkFKdGVGeHFnWm97Ql81MWxSUUM/VFF1OldRQ2lvZ1IpS1JpPFJkeW4sQy8hOjoqYUspRVEoeHdeN0Z7Zzxpan0zO0gh''@;'; put 'put ''SVBMSX4kc3VXMX4kd3VoZXtnYylCTTtEVDlPaW9wfXF8YFk8SVd7ITM7Zi9TKW9KeGo9Wkc8MTs/VCl6SyFdL1chQzxZIWojQiRJUUglQUlWdWBKPEUiKC5EfVBgZm0heVNwbigoXiIuQmlQfWdCZ05GRUcvLmB2SzJ1dVNQK2lMSTJnaSk/U1tuNDs2bmhFJmRPOHtxa3x2aS5GNipRUE86VDlT''@;'; put 'put ''P2RIJHEzZTdubmEwSSJWJH1+NEl3Zk1AQyE/djtSWDQwP0xpR1ghXnZnTUpET1ppU0RnaUclemlxQ01Ld2VYWkosZXcyQVEjeH5OWFhXUmB2YGkjSkwldGNgdm5YeEpIZUFJYHV6UE1mNjp0P0xSR0ZJW3UrfVgrTDt4TlJCeDFYJUpBanY7Ulg8SX0hPiZDOWlCTz94MSgqSlJ0RS9IM1BoaGZE''@;'; put 'put ''eTE0dTBiYzlOKX53e0hmSWZYJUdXPGN7KF47N1JkS3dRTUlhdkhuZTYhc2MwaSlGRHVOZypDZD4sam1nN1h9MCxUfGZsNk4/XUlDKWNQPSRBKyNTK2lrTmBuL0U0PTUqNTshbnMsX1Q3elU5dVImeF5vT2VuZzopdVM/PUpJJW5lRkZ7L2w0MTh1alBNaT1adGdoKSNTQlhLMTNuJEREODpdOiR7''@;'; put 'put ''dUxnUDtsZ30/cUlUJUd4MTFRNkVaSnlRS2hVSy4rZX5YO0w2RXRsa2t+WFhHb3YzVDs3QXp9diMpQEpab3sySDBwcU9CTUxiO3o6LkZZTlRGRHE6aTYqQUcidjxYK0sxO0AkUVY0Ij5CdWVWeD9oXXQpRC9IXk9YcltRWiI0RH5IWHJeOXEiOEQpOCJdNSh8QnFtIUdeUTR0X0RBU3pYXzkyIn5F''@;'; put 'put ''KmwoSDxofiJMQyZpJmExKHxCbVFLXXw7UHQ3Q21IQ2UmcXNQW2gjQTtJcDlvb11ROCJPRlkkKiVeUVEpdEgxVmc3fUBSaklYeko/P2U8LHkzQ0Y4XkQzUlJ6Mng0Y1R2PUldeXhFMCNoNTxWYWBKSSp1cUYwXy9JRFVeS2E/SVJNQHk4SilNS3ReSThMMWAkRXVjZGJwMCxyZ1MpOExOZFQ5fG5n''@;'; put 'put ''LGZTalIzZTNuX0QjLkVFPiRYTklDbkBkeHM/dm5QQ21qeixedkFANkl9ITY6WSFFKnpMNENhVnRCIjQvRihZeUc7MSpbfSkkTC9Ec2ZIXnQ/QEZNdmJxb2dyaSxXIkJsa2R4WiFsNHNZXmJ+SnIvaixCIWVDUlAuKzM7NG5NQmlFZWpFODNSd3R7QkouXnZpbE1vXVIkU3MpUiNLNV1gWXUkUUlp''@;'; put 'put ''ekFSOmthbF9uSz1OOiZTdShHIWFDZkt0QD10SmtuV0s/RmxoK2k4QmM1T3NUfENJTU5nSW07LD5HZmAxJTlpITp0THN2bVR8e0V6WiU5bTxdKGZvOlM1cmZDVkMkUW0hZik7a0dlMTM2Tm1oSClSRGkjaj9OZ3NJe0VGQ3ckKClUKXYidkJZLF9PUSozNisueVV6MX0oQGJHe25ufmg3OVRkOm1F''@;'; put 'put ''eVEzJWUiK2pLTTl9cEorfkt3fEM6fi5yVUEuOXc9ezxMYXUueUFlQjgiZz1jQW4hRXYyJGVBbilGZThYL3pdKWVqSj5jQVB5Q044QSE9OnUkXmwzRDRpPWJxPyNBY1ImfGBJRTJMaVklbTdwNjNMQjxsbFpnKHFlUnROImEoN2VIOWk6VTxhYTFjSDF3Y0h+U0ImYmdmMncmJWsxYzRMIW1+YTtl''@;'; put 'put ''SDdhX0VMflMuSGwlSXtzOiwzfGQmN2ZoMTYkO3dNMTZiOjJTfileYWpRKDtQXW5waywxajZOOmhjNmdnOWk+OldsMWNtcUNWPTxSLlFoYzpjMiZJUGwuMiQ2ZCghO2dkdHtdYjE2NSNUJEFlPk4/MDlJZypLfHJkNGhoMm0+eXIsNDlOY1tJODVROFRiMjw6e0tpdXpfKSxKRkEyOm4lMnlGZn4p''@;'; put 'put ''VVJ3QUQ7Knh3OUFOWHhyckByXy4lJXRNJS5jQTgpX2dnZWw5MDtBM1csY1E9JkVYfUVeJT0qfHo4YF11JGh1Ny9gVUoxKF1Nd0lAdUBQalVjJD8kNUdHTi9KO183UCE/RU5VIzt0JDsuUXJKOElQY1tBPiZbTTh5aGM3YG1zYS47cGpXQkg4R2owcFtOMkQvLGlbKko6XURtNENTOjFhUTVNRSlC''@;'; put 'put ''OG9zNEs7PU5LaWI+djA8bDN3fHBoS0Ffd1YxdGAodz17JUFbXVV8JGlKQyRyWSwmLl5RR0FHeXs7JkYrOE5DVzVqRkIye3BeIixnRVZaNSs0Pkl8RCV5fExTS3wwNC5CRSUiKHVfJlY9YlB8aT5MQDY5eiYoeWw8MSVrPEJCRzg9QHdtV15neCRpM0haPG9EWHV8Ll92RGckOWhsYyRobHV9JSVS''@;'; put 'put ''S1FdMSlRaTY2Pjt5bm4+Qm1zW2poIiMsPnhGNkEkdyklPVdJUCNVXSMrTzZ5WnU6eXxXMHMyLjNte2p5fFVYV09TLndncFlFP0pFK3dkRXpXM0NYKXFBT3VOQWJyW0t+JSpTRjRebVgkQ2UmKDI2Yj1JeU5FMjtYaTVtKmkoJVlKYEBXLy5MaURHQHkoYztNbSU1flhVcVh2QktsX0gsJkBpT1le''@;'; put 'put ''R2AqP2VZZDhkRUtWRUo3NXkmS3xLR19mNiFfO0czaHNaWno+VlN6M1RAIlEhQE5mREZ6UmVQe145bytLcV1GIzZ1dj1USE1BJjpwdWVhTUgqQixiVTBDXjNgWEVwS1NPQGk8RGFvUkhZLDJbPGEubzBSbkckOWtuW25TaClNTVUrXnpNekx4e1hreHheIVtufC5ye3lyQnRoe3xma0tsRi96aypR''@;'; put 'put ''fGVfJWo9ZzBsMHBOcG5vZzl6dWhzSzNIRWQqO15ERjo0PTpzUy8vNVBaPjM0fmRfdFoqKmhEWFZ+NGFsYEYxJD16fUV8Kyx9LiZWa3AqbC50IU9CQEk5VSFCblIiXk08fXwobHouQ3FVcSxVeUAqaSp0OXh8KXxGd0ZBUzNae0QlJm9UXyM2UksrO0tgTnJ5LCM5bnAxKUgxViN2UnN7IUNYfDQ3''@;'; put 'put ''LEcidiJRdyZJUy9wXjt6TDVqXiRHNCEod1hge1Izcm9oK11FdTUxTH09I1V6Qz9SMFIuViV5O29ZJnsjLmdsdzpIWStZQkdgSnJZVn04Z0JfS0YlZT1LfGUkLHA9Q0crYURndFAod3lnMUdAbnluYCwxIT00NW5eKG9uTGlWb1ReUzEhbHlfenpIaXVuXS9jIUt1R3pSSDQuJTVLU19hMXhxW3Q6''@;'; put 'put ''amlxU0xTP19OM14vM2g9WHwhbClhdkczRFR0JEJHfCVZJU5wd2o9KSQ6d2g9V3Fsdmg9KFRCdWg9c0l1WGZHbUQ2a1RzeUtmVCReM0NmYkNxNnRPdCRCPzx7KD50UWomQm1EZWdPdCRCJW1+PmAoWCE8WzA3V0toMENdOjZHcWxAe01MT3FsSjs7OlE4VktoMDI0YDd6LzRiMUNjcVRvPyJOdkRk''@;'; put 'put ''YCs7Qk1iJE96YXxXOUVSY3MyWnBedDMlYGNMdklPZzNVYU1iXSJ3RzNuIzh7b1kyI0I6JE9DR1pDZiVXTHlRYWgyWyVMYU41VFFEYUtOVTxvVU5kdFUiWy9CZkgvQiFONUcmV0RdXVpkRVI4Sk9rXjJOayleVzddXVNad3k1RWQ2OTxIaTR2RFBmSzVhOzRiX1pUJighLC8sK2x3PiRXS11be1N6''@;'; put 'put ''XWRwZmJYPUVnTXlWN3NPemF7ZCghLm5MNlFiLDl5Rzt6ZHcyP2k8VWEhTjVHKjJOKnAwU289QWo2enRCJipGeEIzaXU/ZERFdl9uZW4sXjQqNkZ5Z35xL3QuVSV+cV4yTG0qVnQ5YnRndWhlSm41UjZ3OT5TJi8+M2ZQLngmL3NxRCF6NkxUNnFvIyR9KE1BNkNMQjB0Xil4dDt4JT9deWooL1pU''@;'; put 'put ''PDo5JG9MK0ZZRnl8NXx1X3lycztjXzxqb3dXcHtMc0wpYnE7aDF8TCQ1PF01WFtqdmBMY1U9JTpWK3cxRkQ7JUswcyRGJllgfigoSC8mVixLUi5TZjdofG1nLHFRODN3Yjl5ak1yfWgzPzUjdWIody5SZUwmMD15aF06OComeVlgPDtUfjBJUGwyPk8odXFLVGx8VmdASWx7PFN0PHJfSldZIjcr''@;'; put 'put ''I1JRMX5SUldNKFdBMispMztqUExyNElVP0lvdV5TVyVeMEtYLC4wQ0ZQWWBpOm9rI0JQVHYxQDQ0bFpGaVY3RElbPk5mPjg+WnUsMVJWUl1tYiJ7dzFRUlozdXY+KFRrYjF1NTZ2X0tAWnhkSFRpWVhdVWluIlZBVnBFRDx4dSpGL1hXZDEjUmB7XlpmKnRJRVc9XXdnNFZaPGEwNyU6L1JseTpS''@;'; put 'put ''bWZVXl9IWE4iYVIxRHZLQm5NdXwsVzxBZ0BQfUp8Q3hKX1NSbW5KXWNEQjZ7Pk8oYkxYQ1FTNEM6UmxFL2F9WE5yIVNPNWlPTkgxd3xXTkgxJGhKfUske1E3JHFCK2ZTUiZYKXYuN0lCTElSSklOZVp2NT13KW1jaVZNRWA/ckAxKzciIWRLOjQ1Ii9nPlohfVZ5fTtmPDg6Ly9HNnlfbikrYF5Z''@;'; put 'put ''Q3V5PFdNWW8yRUE9ZiJEUndoe0t8TmJ5dCF4fC43PUNTJGZHM0J0MlNJOTZsVm9FIlgkTCVqQltyNyImI3BqO1dXNzZOeENCWEkzIzM2NHMyZUtRRSw6cT4jVGIzS1U8aFFwfCk2QmthWiJUe3B3P00mTjQ7eVI+bkBHOGV2Wj13SiNVT0pETVVKWGhQR2J5VmU1ek1scFFkOGxfYnlfe1tafFRw''@;'; put 'put ''VDkmcE9vRWpUQEY5TW1nQEw5R3NZWkBMRnN3aHBMMDN0RyFORDQ0Si8lbS5KbyM4Lm4zUzkwXzFQPXVhR3NvbGgoSXJHYjk+IV0lZXlvaH0zTkd+SnNFSGcsZ3ZWdT0uX3Y3JHFMJT40XVteTXRJJD8vZngoe3QmTmpjUS91K209IzN1WDlGWX52JTt6V3k1cWorbEpvb3cxcUBHW3hUREhoW3Rb''@;'; put 'put ''KFhxVDZTYzhNIy41JW5pVjdvTFVdM05TWihKVD1OXmxKT3BuKDxFYU5BalNTMnV3YEVVUS5UMVA9JEQ5bU81Y1ZMeU1LRmY2XiIyckRrMlBjVHtxN2RVPjxJSjVxNTd3QzVkXS5ZekE+X3soTVB9aHxyRStec0tzYmprZUtjeGw2dnw3OU9pMDdrPzA3cHlOa2MpS2QsKUxkRF9faUUyMXc3ciNT''@;'; put 'put ''YDJUe0NobF06enFUXXo7aDg5MFVFISk0OklXOCF8Nn1qaDp2c1pePG5eNE5bNDw8O1U5cVRYOiUjKzl0ZGMxeXxJcEw2U289ODF8L2hEO2UrKTQpO1RqUipfYGsjdW48QGVWd306NHZ1YV96Knt2TjVkUl12RSZGMFU7MnZdanMuXTxWVERKfS89UC5BM2plUDwwLkQ3UCk6VmMrcVRZJVd+az1n''@;'; put 'put ''a29iLChQUUl7bndhWSpjPz1mOVp3KyZjW3Y7fUJUaWckcCUkKlYvPypea1g+QmV7dHQ0WnU0Lm5wRjg4c3NZdnpDOG0+JT55cnEjd0dMRjtWdFssMVNALkdGKj5qNXR8LDBJTD0lOlc0Y1lJRDF2ZllPNVA5YU89LGFPKTJPSzlJKU56L3R8K3hIU35bKWxIeXNXelZfcGNbTCg5Lm0lS3w/M0N6''@;'; put 'put ''TFs0cz8jOk5wOytRQDZnO2tmP00iOEE0byl+UUdfZD9ONStQRHQlWWVaIUwqS24uaGp9MkJiSFo8Wl9TMWlWZShiPGJzNkFFKXVxbFNwS1AqYHYwdzc4YllYVTAwXWxNZDRUZEsrVzAwXVZicWQxKD9EWUA5OyFiMDJgUUk2VDVZYHlvOzVXRVtJaFQ7a3RuTW86U2AiY0ZoN3xCeE5uQiJCXihY''@;'; put 'put ''XWA4Ik0+SzA3az9GRit7KnQzL0pvOztjNGdrTzcsbnEjcWVuP2FGVzdra1VwS1B1ZHB9VWVUI3w5L3gxTF03N3Y6bnFlYDBYflh0azNjNlU4fS5YWWVCVjhPKyE6bGY/STBWODAoVnBlMXNjWmsqejYsTyxCVmY5Mzw0TWIhYi9IRiEjU2QjMUM2K1JmX1tnRFMwaSFASmJLaXUpNC5IU0pbZUs7''@;'; put 'put ''ekwmdmlRZXBOJTNRdWlseyRIfG1NWFJyeDVSaj93SytdVng9NT5dJGVyIjJMdj8sT2c/TVU7QWUsZlMrV0BCbnIrRVhsclFmNTJDc3wpQjgjOUIlKXloPilRPz9EcyFaZT0mZ1kqaCtzVTdDKTp+cSFScHI2L19Ua0JdOEV2Zkd9OjN5NiR0SC5tNTIrU2x+KCF5NGsrdTt2VlozbzZYV2x4UG1O''@;'; put 'put ''Z0AjIkgyRi97Qn5qdmBkTjhnQ2habVdXK0g7OVo+PXo7LkcsKmR9MVJuUn1OWEB5OGFzWntrZ0kxNHdUaTlSfk0mTX1GPG1ZaE9fbnZKayVTVWxRb3JMIUxmR2ZQNjlhJTxMUjQqWjA+MEpLSn5ZO3FnQE96QTQ5QytwU0B5OFdzWmVgX2BOUmBLWCNqSThAaHgzITEvO2p0Nz0pYEp8IldWKjc+''@;'; put 'put ''U199Nnh6N0hoSihJJWxlU2NYcWJBMntjRlc0bXUlLFZ5ZmduT29vbDM0VXpUPDR6eTZdNEFoPC98JjxJUHBSU05LVndHSlVPfXt5PVsyaklGVVJFLCQxJShVI194JiwlKEwkQ0tkPWUwMFh+JnpscDlIMHYjTWllI00jRXhsc0hBeG91Q05SdlQoRndzTkRiciMxdlZ2NmUwRyg3Y316Tm0kKG5T''@;'; put 'put ''alBreiZiflI7cTJISmxhQi80VWB0aDo8fkRWWzddU1BTdjEzN2h8RH4ofT5oKCkrejloI2MzVjJ3dDRoLiUxX086TXMheGI+PihvKHV6M2s1d28pIkMzdkddcCkiLEkwaT1HZFkmdXozdGJOaHlEVzA+cSV5LlsxXmMzcXM3VDw6X2JkWVgySCo5YkwwZUBXaHkoWF11eE5QM1RhK1VQM1RVblA5''@;'; put 'put ''fVlWMEkldj51X1Q+MUArbV9LVjx1eSVuIXVKXmhjeXhBRFFzMDRreC9fWXVCbmQzZSFSKC99fktsYVMrXXxJdy5vbGBlTms+cyh9PVhzMkRCPEtwIVlvX3wlTGpiREQlXm8qQnp9SEpCRzE1N3RSXk1qYkRAfSpVU08+eSNWKTc5NmA2KnJxXS53fFlPN200Qz5eIW01eno0PkcrQyxAS2djOS82''@;'; put 'put ''cTM8aC5MX3tYXkdbYztKPm1oc29SOHVQWFRFT0Y0X2E1M0RrbkBwMTR7QT5FQSZxXUQsK31tViQ0biw3flRmU1E8NTd0QVd2UXFlN1RzYztXU2RxQWcoMGRtc2xxNERmeU4sKClnZHFBcGtGIWE0d3gmdXlLPGRaYjF6R3NtOHBUVVhiT31oMHBfL3MwfDIhV1I/cEJ3On1rL2pKX2Z6UWNWWU12''@;'; put 'put ''LCp8eldwaGJkL0gsZmYjYEhRTFJbJGglbndrcVMwX2JnOTteZTk0XkBicngsMTB3SjJHYUE/WX4oMmE5Zk90K1V8TzxNe2VhemplTXZqPU9FMC84azAoXkBidFlmVWEybCZaUzFAYCtnfUxrITEjP08+eWZwVDJXSTdBPEo6OmFEOVVJbGwxa2BKODBHPFpBPF17UTBYTHZ8LCtQT0ZwQ0skenVx''@;'; put 'put ''Vil3dEEsJDVWaHgsOD15OGR3SWRJPkY8T0pSb1pwWmQobVhxNEViQS98bjpMMWtaOmB7ZF9IZVR0OHFFeCh5I2k8K0c5NmsyJV0sO3UvdDdmK25pWyUlXT8ob0N4KHlmXyJKP0Zpaj9VJHlwMkVnKy9xMWgsXkNlP2pbcSlxMyxKeH1yYURTamVoWENZRFozdVVbL3NpQGZhc0VsZ19dXko9TVVa''@;'; put 'put ''UTFvRFU+akAyJS86d0U5KmZqUW83TTpRUHImUTw/QS5eO0o8JHEmbHZTP0h6KzF9OEVrdjhAVGp8SWlAM0FROyJhXXA2akNuZFB2PCR5V1BwWiEkYF11az4uKEo9QEVvJkxBMVIzQ0t+PGl6LmwrQyQ7UG5jMCVGSXpXJDhiUmBoXUtLIVo8Rk4kcVJWbzkvQVlBd29PcDtHeyVGIkZuL3BaIjJD''@;'; put 'put ''S3A7MllMbW1zUWo8TDVwZC8lanxDZUw6OUFZPj84TTNZQXd2Ly57ayl7ZEAsO1Q/eyQkd0gxfDpUZEJbJl84VXopTDJ0fUQkO3Rse1syWlRmbntHJC5nTDlve0ckOXhZNVZyWmV8cHp1ODl0IXtALHI3IlVwIV4sSkFCPCVZJXwqaDdnJWZvJCNlPzM3YylDVy5MITokYCJHSzdIen4rOipiVTNY''@;'; put 'put ''PHM3InIwallTN19sdWdfMzBvdXlhOG1NSj1xUU0pM1ViPUYuKVQyWUdsQHtfRnp5WXM5UnZGaXp1VjtoaCE/Kn5sVz16c3dSX3l7byYlWGcjeHE5ZXxtUFZneHk1KytwPyF+X3o3N0I9RX0pI25ZSGNwT2c8Kl45Y00zO1N0MUgvcmdlLF48UnIlU2kxSDc2TEI1V256ZHhbbXp8SnNBVk9EI0pa''@;'; put 'put ''LD17c0lxTEgiPzNtRWo3O3leQSxeU1t7SF17aFVORV1WKEY/S0BsKF4uXzhoW0xlQVcmM1creVpkXWEhcld8VWNXcDokP1tjRWx8bUZ6RGwyQG13eT98KDV9O0haaj5GJVNBc11jRWcycyszbjQhSVYzMS8vVD9UajtjRmFuQCs4filbVlV3dGE+cX4wS0tyPWM8aFZ0fW1UOVJkN3BKNFUuUV9I''@;'; put 'put ''fGk0YylKNUNWYF9rQFQ5OjN5fXdbN3ZVM3FrXUYoOnk5fj4vanxXZk83MT55Mz0pRUlUdmZqfUZ5KDJYJik8NlUoW0MyTGl1bHFgdjliOi89SDp9PWUuU1B7NFRRP35aQV5SZH1YKCVofE9JOUBVQGdIKVRSa31IeSUkaFhiTUZTYn4xUDNmOEw/Yyp2aT5hRUZQfkN5d2pqKyw9VW1EKEpvWWQm''@;'; put 'put ''WkFLIURrNTNoXzkxZ0VTZEMmZGpMOT5LaX1GPWlAXVZ8LmQrIyNWRGp6Knd3Wm0qPDttQVp7KSElaSRHd0t5JD55OzxQYmRAU0Y3YjpIfExSPF5GdiNoaDhNVWNbeEZ8eC4yRCtsLjNXN0p6fFZYbls/M3dwQi8zNVlaPEdDcEp5emhiKnlub2dUb18ze3k8TkJ+MlRRbyJ2e3s/Omt+fFU5e3BX''@;'; put 'put ''eHJLI2Zob152JFpVbXNeMiM5fW5eRU9AN3BoUVhmYFtEVilgZ0RfYUc9ImNrJGdhZ3BhNjNgPUZMVUpvMXkxUGVzcHVTR0lFLGYucGJHNkEuQzJfMkNIaWVeYzxbZypGRiU7ITwmTnYuYXZAe3RPL3k5aHdiOX4zOVc0VToycUR7JXNWd1dqVFtPZ2A/eWErO0l3ZX5bNT5Za0lsOThhWGFxXUNR''@;'; put 'put ''KD5GPCZxLGQjbT5ReCEvfEJfRn4/MCs/XUQufDJydiFEQEJjfCNhaHhfSDF3U1k5d1tTN3VuI1RiNDZyLDJNYmY0RVBXcXk9Nkx8N34yNW9WaTs2eyxUMl5GPzt7djEoVltpcSRrPi8ybmxZe0I0byRSXVtXV3A2JHlVLFU4N1VAYllLNXcmS3woJShVNXtJTj1HXTgpTCRKUThhYkU/UjpKYnZZ''@;'; put 'put ''TzVHc0B1VTtCZVN2VGVZbkRlUzVaMD01TmIzNk5ITEdXTUlsazt4dWUwK1ZxKVZbcSlRXzhuKylPRmxNQltCdFdpekhAQl98K0FRWU8keVdVMGNla34jaDJJbDJyczFZP3o6KiJRSjJjXmQsS1svTyh1ZH4pOldNYSgrLiJpMVU9V1dzWndXU1BVRyVMJVNlans7LD89cFpCdEE+fVQxbTUlJUEq''@;'; put 'put ''Z0o7YDR+KUooS2pEITM6djZYfH06USVTWWtIa14zdkltR3JdQSU2aF5MJEUrcVQxJkI9bVQiZm9aa1c+KUQmYihHSnkxKDE2TDRWbWgme3xnOSZZKElTRGJwNSQ6Zzo6KmxKaWFtPUg7LF9Cdj1bPUJORTB1MiVWPUN6cHI1cE9kPjk/ejg9QmsuMD1sRnFEfkUzRU47XVFdNjZgYywuP21jZiE7''@;'; put 'put ''YnA9Mk41KkhRWGRjMW07c3JsS1FRPn4kW29SU0gmMn5pOy5bKWw/MzRaWyl6by5mISllW0QleiklOn1vQjZQazE8eTdsIXI9L0Q3aDksWGVZRmNaJSZOfDFtUl9uZVRfUXBGPj82Oy9MPVBSNTFVZV47IilQeT14ck1deylsSzdzdXlXPHJSWENvSktRRV1dME1zVStJe1srcVU7IjJxOnt5QExp''@;'; put 'put ''R0NidFYwUTI0VmVPXnxGTmJRXX4xbmh2aWJFelolNmlGLDNsYEBiL0xzXlJAZHZ9fUd8TVhFTU4yVTFfenVbQVBAMTlXO3NAVk9fYzAoUlBGTUtvP0B3RWI4KjF0KyIqIitXdkxsRTRyPUx1I0trZX5VTGNVQDg6Vll4b3h1MX4rcyk5VExpfnEwfC9ASXBFenR3JGowTlBFOk4vQXY6NXVYOClO''@;'; put 'put ''a1psYEdaajlsUWxvYHNxT2IlQndST3YrJTp8clMrfmx4a0kkaXRKOFZpTnsxYGoySDRAKHp2aXUrUkFnfms5PUtldUhhd1c6cFpHI01Za1c0bjUzXTh0KWReVX1xMFFvSDZpfmNeVWpGamR7SCtCIzNtRTtVW0NNcztXW1UyOnd2WkcjRCMlSUI5cmN+OC93Qjg/Kl5fKil2VSNfaj88P1JCK1g1''@;'; put 'put ''Xj5oUUgyPjdWMUw0LnVxTmpNIiJHLnc6Sip+ZD0mKDNaZCkqWlArZ3F0fkByfWVSV2FnQ1FBV215ZDBbIltNM3YyO19iTFAjRm5daEZlTCVMfDNXZTtYdm5GO2FLS0p0TVhdQGImNXdqITtTP1ltRzRuZSZ4fEArfUEjK15+IXZfaWk7JTcsV3laK2xGd3FkIlhjfm96dFRFJVUsVz5FTkgvZ2tP''@;'; put 'put ''JU5ZSXR2W25zdUJOQzU4W3NqSXNPN0hIYFM3OWJ9eSZuTUAiRF8zP31bcHw4OGZ9YTxgbF0ldjw0IVIxKzJfS3p4V0UoX0RlUHleY1U/NzlALyorXWQ3Y2tKPVdpUGJyd3wrbWhLQE0kNzMsNipST1NAW0ohIVI8cSU/ejpJOWc+XiYyW2FQXkdMYi4zQi4zbjwkYn5VVV4mUHg9aEVIZ0tJP29p''@;'; put 'put ''TnlDX144Uj1YVDlzaG5EO1h5NVs0czorMz9kLExVKE9KYF16VHQlLyk7bTJrM0w0a3B1JGM4clp4VC4qZUtiZjgxRXRnOXdPOmZDdGI+Pno8MlgpOjEmXW9jPSxHRWpnVm8kOS9mOkxxbldWe3hnenJaWkZAMipVNSQlT304PW97YjJBXUlRX29SeyQ7W3c4Mi8/SXh4W1p1QHE4bk1VdTBzPUZG''@;'; put 'put ''V2MpYjVla05aJVBSP0d8JWdPOVU0TCFkKmc5d3VLWDlQYC5TOS8xbGJKa0psWTFsXj9VQGk1O3FfXiJWbzs+Z15ZT3JdSSZnT0wrSlU9X3J5Ll8jPV1gYjMlK1pKY1dsXkY2Z2RFUUBbVyNVcE82ISJnc0wyM1Q7cTh8cCRpUGgsTVg4a3khWiVga3cyb098TFBAMS5+NDxGczgvUl9pdU5eP1RO''@;'; put 'put ''XioxMm99PEVXP20lVUFuLl19e1Izc1U8ZFJJYnowWzBzJTBhYjVfZjNUNzhka2UoUi9bVFp2QDVVRlNUYz8lN2hBRnk2RElAMXJXV25DIzkzZFYsOHhUc2Jkcm4jcypUQyV5PXYkOFBxXU0rV3pqd1hRKmNbWTVdWjEvNz1CWVhLM3pndnlHaiRaTXw8b2FEZFspIU1ILml3P1ckfXNeSWBLRlte''@;'; put 'put ''MT53L01LL1s0aHxSTCo1TSpDdjVgMkR1Tzo8VEN5aS5EcDdSJE1scC5WQTFCYnY/Oy9WRW5SJEgsXllOKH4jcjFGRyV3Zmc3d0V8MnJ9YUtSLkpwXV55cl9jaF9LPDg9Mis0ek19InI4bjJjLlRUOjEjVyQiPjU1azFjPCZ4W0ZpQG5yWz9mdlFZOVRJJD1tVV5KVmI/NUBXOmh5Xnoqc3NqYm4o''@;'; put 'put ''bFlRbGxJYGZTZmYjKzBpeGY5RlsvS11FNUV6UXo3alosI2tUI1BoQ1MzNSkwWi9zXVVdWyp8en05fGUhNDNCTjdYRT5IWUhIJWhZOio8Mj8rPnlUNERBcVtKSFlISCVSWWJDZXZbWyRXbl9eP3x5R0VWTE5JVE96VU9kb3AvRngmY2IrUms6THtqM1JTY302Vkl0VEcjWCttOzI5PDl4NFAoZkY5''@;'; put 'put ''ZkFuTUMoPXskTzlbfDxgPVRRaEBNOmhHYVp+OEVyWkMmbHNsZlFUdFQxUSJGLlIvNCtafGBwVi9ZQzwyeXJFSy5MfjhQQTpZU3BWWixUTz9KfCNhMWFPaSZNO0QhVG57P3pbcEJMZU5+WUA3QXFobGsyVW4sVil5JEJebWNMWUY5NTIlVmdnbEBMZnAmLiE5MTZ0MlQuU2syTTBoQ0g1YSRZIypX''@;'; put 'put ''TXFoV01TUFAlTUtqeSxkSFI+OVQub0NLb01eU1hYNWpKQ2VsOWg7KyMqcU41e3Q1RFRnSSVRU207RFtbPGlWNGdqZCokXlV5VFZvVD4mdj8/enxRNk84XjQzOjdxKTBybHx2R3ZkPWo4K04rbXRRKWcwciJEKFhSazA8Ri5VbTFVWVc6V21NWEJhS1s5ITR3bmNdVWU8Qz1FNSEuZ1tTTEZSb1Jm''@;'; put 'put ''dmcwSkRMWjw3WCJMNWNXRDkuakN0RllLejBNYlgqUXRhfio3YWlmPigzaSFwKix2YyRzKW1hcXtKRFJ0XXhHQmB9XmlOUjptL008Q0hXOSxyQ0BdOk93SHZxOj18b0pAd1BVVyVaYDold313e2dWcE5tSTwyYS4pYi87cilvTVhQPE4qeHxOYmVeWWRvZWwwJjQxfHcvQW1ZYW5kMCx2SHg3I1pM''@;'; put 'put ''NkxeT35LTGAweXg5aTtVMzwheExeMig7L1tHd2ZXZykkNFl1P2B4cWFxeHBgMlVuUkdTcFd2PFAySFdiPXRwMDV7b0cheH1Dc0tzRChXa1ZLPSFfMighMnR0Ln1LP25MbHIudUkrRkBMUFpXNjxUfiRFYGh8QSEzblReWThNOTxNOW9nQ1A7RHp4ZV03NyRwWi9PVmd6Z2JZdHF0UDlpJltlYSFT''@;'; put 'put ''MGYzTDdUW0h5Ln1lU1JWYyk1UzguXiF4aHgjQj1ZWnZsPSNNW2R5XS9baWtgW1g5dyRpTX42ZD99d35udSpMOjc9Ni9mW2hpOjUsSkVzZ3BpO01QbXN3cCpeSE1tcFhrV3BKXVZ3Nz8uN0FVbzI+WFVILyQlUzsvSEpwI197ZzJ1RSMrJjpvY35dVC45QD5uWlVAeyhLVjcuIX1FbDJdeEghLFo3''@;'; put 'put ''NywzM1hONXRLT3NAKXJgQC9XRjcoVDlZOzw8VDU3KitNZzdhbVZSaWVKelpJbG5gTzNuWF01QCQvN04rXXw/fXxJM0QhLFFibTgmM0kxMnZxSWBbK1N6UTw0VH14bXxtZWc3PHZfQW1WJStnVjAyWURDVV95KSVsVl9PUzNqTSFXOXtXbXdDMEU0LkdIY2pyMHwkNDx8NHhYdWJPYHE5PCp5JjFw''@;'; put 'put ''MTQvUk1vKjVCaGIvUHNlP3N3RExIcSxmJmx7Lk11U0NWMDQpX2o+U2R1eSYxWmkrfFJzazNeQi82UlR2T1JYa3NZKSFEMDglO3JsemZiV3A2LFhjc1tUaTUvdWNBVkV4ZDdwekNQQlo9bHcrQCx0XTE3NTphWmhSWDVMbVBpc1k6W25Ob2hzWS9bRlRNVkxHKj1zaz9mfnclVlJgTnw7Wy4yWDZV''@;'; put 'put ''dV1TMSkyN0dKQUZyRmxdSHNORWl3S1lWS01OYlE5W1dSbkZgcXV7RH5IJks6NzNmPD0vaDE5diYzPDQ8YjVaTFJwMD9xJUIvUGFTMGc5OU55W2RCSUk7OjdvcH15Z1kxZFYyUGNgT115fkxRbGtTK1EvNGRwU3kzWSMzeUw3MFJ1cUFpJG1UQnY6QCtoInp+ZUM0L2xsWlYlLmdRd3B5bVQwfUxX''@;'; put 'put ''N3JoaUIyOD1xV2hdZCQ4Zy8pL3pWOS9bKWRuOnNJdTR9JVprZFVIUUBNdlMrZGclfkZIYDVjLk40W3c7QT4zbHtvcSRfMFZ+RFdqeUM2SFpZOGMqbkpwZWRYY1c5LDQ7RnpXJHU2U3RjZ0VWXmF2b1JzJTpjJXokZzIsblZZQjZYcH1oQDxLRyZhMWBnUk4uOEBxdSFeJXlsRjY3LnBAb3FNa3BV''@;'; put 'put ''PVlwW249U1JTMyM8PWUwOmUkaFA/OVh2LlVsOThmc0skIjo2YHYjYC9XJWQkZzJrP19da3ksZDRYKnZ9YCZhIShZRU9EWmVoclpgMSpZY05Fd0g4cTtxdHhpSUBuI1Mid3k3dCZrUyRNa218ZiM6VGxeW1pWP3xtIytHRW1TWWMsUWZ+SXFYJUVOSGxEKmksPDZ+eX55fnl+eX55fnl+Yj5EYiV3''@;'; put 'put ''NjVeTU9JQEIrNkldfD84cl9zIzdAVi4xJXFbYUNVXWFnIjxARmBQK1JSNEZjVnE/JD85WW5xUlJ3RmNWLjRkb05WKDcuT0hvRCVaJlI3NkN3SC9lbDB4fCx9PW8ien5LUjtwNm15eTEwaj44Sn0hIzdmUXAoX0V0O15IVmRdc1ZiXi85ZkBTVWUlZDh9MGo/I05SakNEQG19MmJqbT4qdDlGV0xA''@;'; put 'put ''cH5YMHJKS3ZFJVVBJnU6U09DNztASVNCL0JfOXY1WGI3Q0Q9USlbLDQ5YG9pPm8xVV5LbjErdkt2TXtHfH5JJlkodSx9XntnKCgzLGAxUnt8MFVZTCYsUkAsNEo2ZFBNMUI6VlBMST5FSl4wdzFVa0MwS0Y5dVY8VWh8b0lwVGFSN2IlcitDaGtgc2ZeOHY0cV8pZnViOUV9ZWBoKEJkIz5lI2Qs''@;'; put 'put ''c31OW3AlX2d9W2VyfjJdPmApVj1AejRycF0pOHlZLkVBK2htO1A8O1BzaG03UGVWQGltTDVfSGpCS1t2bEZyL094cH0sMX1Mb2AieUhgeHxDci5dUFtaSS4xPE5sS0glKFJhXkZgMUoveFRsd0NrXUdkdmdtNywpPDshYDlqLnhbOHZ7TkZ6ITk8JlNMb2BpYEVhZlY/LnBySHt1Q3YpM3w+ZiUs''@;'; put 'put ''bnMoYSkkUHg9TDs5VF0wNThvSFIzVzlxX0FVekY6OFc5cEhFeCR4cWVeOGclbCZZVSZ7PVtDOGF9OD1CO2dsNXJ0Xjh9VXphcE5bYF4wLmI3aX0wPSkhZmJIKzxQTlRJbHFiUT51WCZgOXZsN1opWkZAT0ZgNC5keXUpa10yPCZDcDA0PVFWInd5N2Zrckk5M2svRV1pZHFGeHlaKyEjfUlyIW9O''@;'; put 'put ''ekV8JX1Bc1ZneSZDQ3V1blJRd1lkT1khd14ud2w8TUg7MzJVQFBGSEVMeHZSYF9ASG8mbiwxIkxlQmkobFZGTEdYMnFLQEhveHFDUylNLFkoUnd+UEp4cj9IezVAekh7LjEiMU4zdTZ+S29hcD9qNV5AXWpdVlEybz9zZixKQ1lZa3Y6bndwKWh6MCw0a2R0K25geF95fEhXNX4pZEpiVj44em1B''@;'; put 'put ''UTxMSShTIWc5RTQsRn5dTl4zd1F7XmtbJF50R3g9cTxRM31dOHh6TlRhaDE8ZjNhMlV1dzJTcDYkRChMVCVQLjo+PVZmVWlBeDJBXTdPM011fW1yLkxoLzUkPD96KUgxMl0weEVDPjJTJCNwWUZyLkVZNikmVU56SyUiTEFeOjNDajVPeUspaWNIUUh4MkFrbD5pUnpDcUgpaTdESStWaFJ7TEpz''@;'; put 'put ''eCwkdWhvTUxrRmZlc1pzMmtlQyRHdE1eTzgpTDJeaDc5Ymg3fDJTaC5dPFcua303U3JSeCxOOV14UiZgaChDOnsrRFBsM2Vwd3FpVk1TQEc5fXZiNF9iWS94RiUxRy9uSjVmXSldail9dEY2RyN4PFdmRTNQS34hKX1bX085KDtoS3VpIUlaVUh7c2p2W3UwbkVfJUN5ZHBkPzlUInxhIWojK0c6''@;'; put 'put ''cDA7Z2xpOSQlKXVaVyZXU1dNOzlGOHxwWTttYG98On4mTlR5KWd4NUJePDpIY2ZrRWN0dFkrO3QkaSlSakB3QFdebzt5aispRVFpJlJvWTt5ezlNR3FZbkVhOUohKCMsVlNadV9LNV1dUjsoTSojZV5veSVKQCpsMj9rVzhzJSRFJnlRRHA7R3NNMFpkeSR3XSY/NTUkOT8xczJgZlRZejxyN3tQ''@;'; put 'put ''JileJUQlQktCIyZZJXFBa3F4OEdBLy84YkhsU040ZGUmaVtYUWUyUnZEO2Qufi8vJHpOR0M4TWVDZVYpfFdIcjUxSTMlZDNzcWVKbHdILl43Li95R3d7NnRZOTZwezZhMjEvOntdRmUxRCxSSCpNaEkrZTY/ZHZoKVElcT04Uno2SWorK2Z1XXIoVmA0Z3Z9Ojpyamk+c2AoUlJuckVxSF01MzF4''@;'; put 'put ''SUAxJUsqcUAxZzloa0BxS0QpOkwpd3NORGp6KFpJQVo/OFsvN2NMc1N9SGRZUDR+RiZOazQ9RSxYLExvN0VaOD82W2l6U2JUOV1zK20kM2NxeVB9dUV+RkF3Z0ZbVl5zREI+Nk89aHZnOyxfO1olOS5AdmJRa2luRlNROmE2NklUR2QvRUssJmlBT0VdVVlTZ2RhOX1YRWt1NjBESk5UeSFob1Qq''@;'; put 'put ''KmssR0ZgfUA5PCUpVENkemBfP3JEJjxUbCZwL29EMCg0WDkqNExGdjRjKSRNRXxpQHpuR0s5UjZlc1l2IihvZT5QeDtxNTBLL3pmVU9DTmslTSpaN1VmdHwvc3YxZDRJZ0csdDhLUiNtM1VTPzs2fVlMUSsyWDdWYTw8YGVGM3tpeSptZUk0bTlRL0ZZZWJPQWUpRFcpdEhxdVRfVHtxSCVLbCtw''@;'; put 'put ''MnZnZFZlKFldRElYK0BYdStvZENXY3p3e25XPiEyYkBYbClQZHx3VjByMDBEbDZDUzYkVC9oXUVKfUd3fjNGRmo8M0grTypEKz9ONyghYUsva2xAMEkscklsI1RkJlc4W1R7QC48aE1GNHl7OEtVcl0rSyVJREpARzxzK3hZcm1fNmRmWTZqU2wsJV9bbHd3eUpTJUIlLk45ZmlSa0cyVThTYUlE''@;'; put 'put ''WnchM3F4NEltT2BPaE1GTnghelE2TDBXQnlaPGJ1N3k4cC5ubldgR1BpX0NRZEorPWNrSzF7SCNZe0t9czFsI0JUWTMocnt5aDMocmU2dkY5fGIxO0taeTNtV1ZnS0plez97JXsmPypNMU9mez9yeVZyQmRldWV5WmlBZTQ8UWwudUkoSWRSK0xfbSU6bCEoPm07RFdudTF4Yj5JbTt+QH0zOVRU''@;'; put 'put ''YUAxZ1YiXkR4VnhgYXd5WzN9b0ArbS48TSk9K3VdPEIrfCpwYFdfcWh1PkZQdUw4QTs2WigzdilhVHtVYyg3M3dwaDcoa2dVcFooYWJuZE1bI1g1PCRVUyozZT0qYTlLW2hmL29NVSFifTpQMkUoTlRGZDJ8YDxTYWYxSE9PV3Y8JXgiRzhVVTtWLnN6QT5Qb2g/dVtUMyEwMDxbTlFwRlt9K1F9''@;'; put 'put ''QDBOc3hmdjFPdzMmQ10kMCUjbjBWfmZHbkZOOC5JVmpLQFI+PXZvOChzPk9KOjBFcH1Taj8sdCtYJmxLIjA8Xz9QO2xBK21hc1l6ME5vZFcjZTx1USw2KVh7RikxTlQ/fSZTTCN5W0ldeTQ+RCw3bkRqcEZXfEZ8OXxwZmtxdCZ+c102Ly9qLCt0c2dbSFFHTDsoNUM1fFZUPkVsPDQwJkFlOWl7''@;'; put 'put ''a3o2NGg/UHl9e3dbVnd6NF0uKXRZaiRqTkpgdSUzJWJZRyxkXT5YZVhoMDo+WFo6dEomPzA6T29HZlAoeXcrcG1HTX13PlM4bUwoOixFUl45RWoxJS5Ke18mZD95QCI6UkNMQXhOO2UzLElAMm5PdmU5cHA9SU5iPE0/Ons7PVh5VlV+UWV2NUJMKkBNUDlJaHc5I2t7PCFgaklWdzVdKmV6Qjx5''@;'; put 'put ''OnMyLCV8LjtoXXZOazpdW3k4TX1peSgse0NPaDAvTz0zWik4RWJScEx1NHNuOGtRcThYUlJ+KmJoLE9Nalk9VWZVNGk7Iz07OVhnNlpVY1JMLExbMS9Jb3VUalRjSDhZOylnPE1LcTg3MXtYdDlCIVckdy9aRUg4Tm8vTCpuRnQqbzJCVzkyLDpUa0d4PTFPcTNJbEt+YGsyVmRGUURoQ287ezxH''@;'; put 'put ''RSpGOlNUOUFINjFbSXk6Pj1QZDBGbCxkNyw4OzZWdXJiOzRaOTd2cjhGX0FjSz5XdmkrfG83e3FfZW59bz5pS0p9bWY4eD1tc3Z9aFBoUyhedlBnTWd9YkgyITh+aDM4d35NPS9RN1ZmOWFXe3s2SGc0MmB2VChDK1BNSWEwSj5ycE0vJmFrQS9ffnJyajpqUTs0Uz98WzQpSlIoUntdYSYsTmw2''@;'; put 'put ''cTQvVE5rPyN5NSVSezxwcihMSG9lalJBei9GZ3JWJVZYeilNJHNIYHVXcFZ+Lj5DQHNAcUg0Ims8XjNnbGB8eVlGPWJ7bW1Wa3BVKFU0NCo9LmReWF9tVzw0IzQkflU0M2c+UXp6V0BVQDhWKGc/SVQxN2s/YHhwMDQ1Q2F4bkVidVU4MEN2MnxkYmMwfTZjaGxlK3t9Yno4Vn4ufjQ0PH5JQEck''@;'; put 'put ''cUEmSkpwMGdWO0BxK3RfLkBTZGksLFlFKlV2RkBxOTsudjcyQ3gwJStDUWBOSUouRFcsXXZlQDQpOShadkZAIkl9R1NVeUMvQHZSTG8rVWdLWUZAT0koNjswLG0vfj4wLDlDPS5aMnsrfS5dMmZ8dC9dSVlEP0lbeVYiTC98NCIrVThMRF1UOV9kdVosS2Fjb2BucHgkZlVkS3kualosKEtyNCZ6''@;'; put 'put ''S21vNVtAVSl2L1AwPi9DVTRAODN9R3lPbkc8SGk7RXNNO3QqZ1pWK2I5UFYjSm1dMXk+ISE4QFQiZEhZbFN5Ul17XWIjYnk1SlNYfGtsWnhSaXFIVGhtTWh4I05oTHwlPE9JZGQ4Ump1Pi93VGldJVtNeyZNOWY+LjRtZSwuVlg0T2gvOXwyLm5DSUlvTVU3eCUzPnZyel95UmlPMl9oUlg1ZmQp''@;'; put 'put ''dTV0IzZiXVR7T1MsRnR1UnhdUWE+NzZScX1QeHImZ1V2TXtwWzNwd0JKcCxUVVgiJDNgVlJ2bDYxNj0kOTEmbSg3NXxVPGBYNVs4bkolK046eiFUR191SCQsdEJ+VEdAVVd8SFBAVVFaMSYlOnY7NktlPXNpVCsuR15AUDl4YXA6YjJEaE1LSEZmfVdIPHxUO1BzWTVhV09JT0hJK1hnJFlxaXRP''@;'; put 'put ''WV8jNzxWWVokOno7ZiIwT3wzTTFFaFlVeX5OJSx5OXtYPk55RTNhJWxRP015Pk9VMD9zcXk2L1tHOGUwQ1dBTkZiQU4/OU1TY1J3V2A/eUJYN1Ywfj93TzsjWDkuNmFQL05PNWs/OCsmZjZiXVNYUWFILG5lPTlfRkBzVmJeaj9SLjFvNjsydmQmOzR3S2QmWSUzMVZrayRZJXY3SFdecjkrKzl9''@;'; put 'put ''UihNIiZONDpqNndrU2h5TCpzTDBdSzQsbVNqalUjI1NkaTg6azxwOXwubFc6Z2E6JT5NOzx+THVUTEpyK1hBNUxWWzA0O29JU3E2U0cwdm5+Qm48RTMpKkZgSFlCa2MhaE5YUTdkKURWclF3V1c/Ulc9Mmo6cHBgQ054bC91eGRwMGI5aUkydysjVVQrT1NLe1Z9R1ZeU2twYTk7Tn1ecmJqamgh''@;'; put 'put ''JStlRXR6VTlsIj02LmBVejBvZ1JJPEklW3p5djttO0ROWD8oaDJYYFMuRWd2YEVxIiwiaj0+aEcsU1E7aClWYTFIQEpeK1B5eHZYOC8rZ317cmR6dmsuITRjdzlKWU0lcU1EO1YrYU54XUVOejZ3SzswQmNUZ2k/THIxbl1YQmJzcno7Ul03O2w6fmwwcnR6OitxXVIzRXptMGdNWl9mKXlkUlRU''@;'; put 'put ''N3wrYV0lPiQwUm5CcSomOnAvVngvQT5sYzVTbnt3dmUzJitlRVB5R304RWBrMGIuXk1bOnJxLkZwdn5zU0RTUnNkJUxHN2ZVUDYsRVV9MHI/O2dEVDxjUWhkSit2fE1bVn5bWSJAI0JHUlMyOGJuIVl3NmxwW0I7bVFDRnNZeWFjayo+dzxGeVBUVDNDJD53eFBHNk9KQVF7U2NjNlgxbz51TEFo''@;'; put 'put ''NXV6SmdgYHpdJlBsSzxrXVtHUXplcndxMDNAfEZkZH0lc0tQflB4PTN5fERocSRvPTdeIyZhZHVbOHVNaG8jZmVBUlY6IXIwPW51dHcwREcwdFAhbEt0NDVecVZYXVdwRXU0V0liWHJ3fj0lQW9oenJJM3k5ekJWXnZSekFxLCJNN0RJaVtJbW4vVDhabClFekVxfT13a25heVQuaCxiRnh6O0Nz''@;'; put 'put ''M11qLz1iS2l7QEB0NEU8PVBlOG1WT0NhKzBYQ3c0Nng/UTYrSFVpNm54PzRAQyQxJVhuKXkuUHBoTHtuVDE8VCtobzlsZ0MrXVFwVnVRX11PLFJmW018bUlUQXtLcismeV5bKWxmYTM1MjJxWlk+OXNEVyhmIlZWYj9KaVB3enQ7TyIhfEs8a3dAcHc2KWcyNWhDdEZ9XkB2Q05laDZGSCUhO0Z2''@;'; put 'put ''XUZVaXBhXisrPiM6e2RFdChjRCI3O2cyPlJZQDlCSW9sejlIbX5JWWI/YUNGOEhaNl95TGkzZm09KlV6YW1reGBaTyRyMFJLKmJ1PVpBQCQ/SCxeOEleJG89OiRkOGxMdVtjaFVYOkw+NyFdLEJ7cFVlbyhxJCV5L1dTfip9P2loQC9DOn12MCVLSUQhc0RvV2pdM2BVOH1YaDJfL1kyQ0leSyNP''@;'; put 'put ''aU0pRWRCNiZMYHlvdlkuYD14RTNRN1Q3dURqT0BFWi41Pk8pRitjLjNEZzw8blpgdWlXS2xBS04uV0srIlF3czQjeDttRjRhSkBmfSE5Rjo/YjFKK1pnWmg3RSlybGBwMkIsSHNybUFGNVR3cX1sTFdsVk5eM04uZiZyXlpxOzQmInd4NWt+ImRAIzFWV01nVm44elpIVks4Tm81JDVxcztffEF4''@;'; put 'put ''NS91OzsvWHV3S3BAX3w+JFt0STZPZyVaa3BBdjE6KFBXdWNLPVtBcHlbI3RscilyZWpiRTt7X11zZiNIP2dtN01qUSs5Tns/cyo/XyEwS2guO25xS2gmP1o6YVprTmcyO35WW1ZjMDUmZGxoV0ZpXzpSVTtuOj16fWR5Yz1uVTByPUY2NGVDZG9yJmwhL3R3P3dLR0lTViwlOE4hfm9SJk4hRTNj''@;'; put 'put ''K05jdDAwdnlIbSg9NlFiP2R1NW5YQUhvSGwjdEhLYTM6IWI5O2xPaGM+XSZHc3BvIWVLS2p5PE48IndLJHpaS1hOTTxyYihCKGxUMGMjI2t4SnZEeCJ0JVNgREA6eWdPU1BTV0dsV3R4VGwiZ3NMQ1RsXS5FTmZYOGBdfmhoITRlRU5nKTB3ZWVdMGI7KXZbY0NyYyljeFNiIiUzWmU5UDFJO1t3''@;'; put 'put ''Y29dTTRVM3tkN3gzN2ohL1khLCg4ZjkqbSVjTWg9WHFCdHhCKSlaRjZ5fC9GWzB3NnckOjdpenUhfDxBanoqWTdlMSNaOSxWUVYmbXlCVTtoayMhLFBZOXF3KEZLWGt7PiR9b1ZHWlJbeXczeUk1T3RpYk53M317KmJ5NUolUHduPEZzVF9USFElMSNucWh5Z3pPfEBPMWUvL2M/TVd+NjlJRT0i''@;'; put 'put ''OnBjQS4sbnppW0hzUmdnVU59Xn1vXzkpN1NMWWJGbjpYJWI2eTZUVEdxfW53NyFWWT5oInhYTE9MVGFbUndMUyM4eS4zTm9aZVEoVGVDQ3l7W3FfLkU4Z2VuRmNsLCUqZHZbYUZXN0pgVCw+YzRTcitJXk93XjUsTys8VHl7TmVleH1SQGZbcHd3LyJZM2NQS2Awd09aOF8uTmwvQkRNaTVvTlI1''@;'; put 'put ''Ji5oRjtfMzY2OEEuYG8hWVdnKFVkPCkrUVRnIUBOaHFUI2pAKTBmeHdDP1BjTz9bPzpKekdVZVlNbTIleUg4SyZfLCNkYDZqW09FZFEoN3F5U0BhI1guOkBIWV5yKyRrOm1URyt4SjBtW2ojYkRYTk9pRitGVVRGQllQLFEufk9fNChOQS86OT9wcnQkPy5ZKDBiLm0ufk9uP2AwRlBNZG9kallr''@;'; put 'put ''XVVlU1NwMEo8UHBrKm5lUyoxS0RsOTNFPmo+KDcxMyZmZyM4SyJKdH0kYDd2fEpmeU98UzBkZV9pRz8yNWVgX09DN3JdUSx0UzZAYWA9KmNwTTZ4ZDh3PmQ/Ln0rWThpQyNjfVsmKE4zX2J0SSxSJEo4OWZwNTdodno3JDpKYnt4QkZRKVF0fTNAL0hYOVlVXXhsO0JYVjh0JlgsbHpaakF8NltE''@;'; put 'put ''LCJmPGlRc2skY1VYT2NyZHxLVC4xYFtvUU00O215WFVPezxZXlBaOThMKGZkV35gIn13L2hEUG4/bldOaFpQX014YlpvRnVlMnhpYWpyKUB9O1dmRi59O11rTUhxZVRuR3NCWUd4L0ReeEhxd0M2K0V7YUdqIWtZU31wLG5HN2lNN2x0cmRHbmM0ezZ7Y343OTRvdVpve3kxbDN4TzlqU3l5RktY''@;'; put 'put ''QDtKfDNWY0pwTCVPbmNVYHsrKn5XaHgyNVd8SkVeJC5TN2loczxWUHwxZ2BvMEBoaWNLNlpjbn41N1RUSEc8JVViYEElMUNyPSt2OEMuLF1XWEh0bCkuLjB6cUlRc3IwcFQ6WW9JdUFPTiZLfHhYOyJScTdkUnwiUCM1WzZJPCtDeXZyM1BCJExwZHRlejtTeDRwenlXJFUxe3tAX2Z6UU41Y0Fk''@;'; put 'put ''PFNFS2dLQ1ltI2dkS0tfSGohY29dW3N2aVZoVX0kVCpMRDdhP2FXcF9pa107eTFdRlpybVpdUilUKToxZFRyZ1pHWCE4eUFxQyJddk9waCtsSW5kWSptW1I3bFtZY2lGcXVsX1tEe09hfTIleDlCT3ZSZ3pkcVtAdWFlX2s5RzMuXzleRG91PEI9PDBBT3kwakZrVytVWXNkNDk4U1Zjd1hSczFB''@;'; put 'put ''R3ZxVDQwbiVCWWM4NSVCcFpZem5jLmthV0dbZzhufHt4KHlzZERYfk0yRCg1N1RhT0Y/LnQ8KSpHZVhHdDNDRF43YnUkXSlkNkclXiEpaipHbDIoR1orcVNaKTAuTCorOVFdbnFHNUR4JD5RazA/TFY7b1BiLFRde2Beb11sLjEseWYrcjd1TSM8diYjRzxuVT4kdXZLM3A0SiskOEFQa0opOCR4''@;'; put 'put ''L3hLPDN2L01eN1AjSE8/YEpod0txSG8obFY+c1NkYiY5S1g8RUZxQH5vbVVHQFRsR0prQ2RGL2pAVGomS3YwQzZ4eyxBaEE0c1V+cHk8dUpEJT5sLlNlV0JwKkVIVC5MeyhAcDtxRUBFbzMvNmBwYEcrSEAreC9ASGIzL1ZfVloyYksrVFdebExWWDE9Nnk5fVIuRUcrbSVBSyNmQ1p1Q0ZpQm0p''@;'; put 'put ''RSZjSUhqSzd2TzckW2FjM1pSOz5aT1ZIYDErO28rMSM/I3NXWjJiPEAkZy49cm9OT1lWcyEsMV80MHF3cS4pSmomd3c9cj4/KzFxeHxNX3RffWc7Ly9HVFVSMTpMMXIkVUZMOkwyQHRwbFZXX3phSFpWQD58TlgyKiI6Yi9ldDNROFtSTTxaaSphW0V8RnBvKSl6dW98d2FTKyN+Pm15R3w8Zixn''@;'; put 'put ''PlVMOnRdPyNnOytZXVAycyQ+fFs/IyhLTUBRcH1xd1tFcWlTK21rVkk0dW5LaUtHP0k+ZShSXTZAem51aj96Ym9Bc3RjXXlLNzRPdHh3LGIrTnRdYEEwTEBPPE4od0BtcjVqTTBjQyZeUyttMVllOG1dO3dBZSUwbkUqd0IsckB3PiZnR1duZyNNYG1pM2FLQG14SF1nSzo+KkV0ZDhNSGhYQ3M8''@;'; put 'put ''cTFEMEpydEB6JHJAVDlfLj1tbj40K3EuZUFyRXhHc1RsQ1l5MWd3Uj8vMHs4aXN8PDYpNSRTN0E1aXM9KiI0IjhrIT0qWlMxYzg0eSYqdi89KzQ0S1p2bGhgfUZTaFpaQXkseCNAXUovbztuN09Lc14hczplaGtDVU9ISjJ5eTFMZ0h9UDE7MWRTamxEY2wobERleGY/OiwjdlM0LCY3eUxEakNw''@;'; put 'put ''aXB+QlZfeyVYc2AmbV9tWT8jMGosJl9wfWdNZW9Ebkd+a2x9ZmomTV1STUlIRl9eXkldNkFhJmppYk8hYFE9MWVMUDI1RG1+fnFFLkk3MGNDKFU7IjlxXmo1LDdLI35bQ1AxWDA+MXsoeih2NGVaTU44NE9qUz19V0ZIVzRtXz0oTTs6I251PVUuZlosPXx5eGdEeVBlbTZYTzkhYmVDPmIoJUI0''@;'; put 'put ''d2suSDFXZmJdQEdtT24udERKZDtXTjA/OmUhUihGRVQxUiJrVGtZXiEraD54M2NTJWszUU9AMDlmPDY9TzNURDdvUmsiYDolSXg/cCluWitYe3R0c18kNCVfJGwmbmt4Wnsldj4rTWZUSTNdYXtifFQ6MWZOMDMxbWBPJj5gV3IzLzJFWkhhMzx2ezNUO3U0YDJJeGM6dWg6NkhQb0Zxfih0IW0u''@;'; put 'put ''IXU3ZC4vU1ZPamJET25kM3IkOVRJWE8wdzhifiwmYkd0NX0oMVpVfFZfY0gmaVlPUk17fT1uMDtVW3wqIyJsLjJIdFQvS2s1N14qKjBjKE5XOlBvM1IzU2hYWjN8d25EUyo4dFV3PHFyME5XbTVVXSFZMFVScDNUNEh0VDV2dXMjY0ZOJSRtcFc/fWltVnpAMXdATWZUdSQlXkZ6LlQ6MXRUI3V7''@;'; put 'put ''TTIlTzYvPT5DTzVnKShzW0xyY2w3X040bjs0MXY/TTcsXmxtdz15cCR2ViVOOUYjTl1DLFIkal87MW0uOkgrbmxeL3w3cGk8NCU7VDcyRTciciRORCUlKlFXW01xYGFiKnNLbnFvKWB9dzZ5e3ljPT0saVlPUk0mMkVKIzVxR3tkKXc+XzdCXVQpPncrS29DYTM8dUIrPFR5TzwiVEwlZk4rPCRi''@;'; put 'put ''QSFYXThIblojdVc7RTpMZ3BYRWNzWXV8TTU/UyZsWyg0Kz9WVCtFQSJOQl5UNzAvZ097aDZYMTRqRj5TT187QlFARihdQnQ8JWwrS2xXMns3cCE2UCxjRm40UWZHcDdlU2kqMD4wRUYzKllMUHNLQFBdRWVrRTI3O1lPIWw8Uko1SkVnLEhTUHJtWEpKMntwTSkrKD5KPDU4d1dIaVBJNmNiY153''@;'; put 'put ''a1RnU0ZFKkFoJk4ubjNwaHpOUTxYJVBMPEwxNF4+U0dsaGs/IzZkJC54JTZSSSRDaT84eFU9bTwhLjBJb11iTW4pM0hbel10Yzw2bShdaSZsLyEiSytnQTMqMXd6XVNwV0lSaXouc2xFU3BTK35sTCIySmwzQFBXOngmRnIsTW02MFVRWClpcSFzWWAqJV5OKCtyQmBMUE07RkZ+NlhGS2RYWWld''@;'; put 'put ''U1J7ZExKIls9LjpjYXJ5ekE2d2hML1ohI09XTXo2QUJlTkJiWDVpOFRbQC4sVCpjWzxOdnBzMUJhOU4hZCF4P2tnKUJRdjZscDtCYj8jT1FuOyNoPjg4N1JjTUxQWXUjPF8sS1JZXm9VO0FwezsyVmFzRSU2Y1FpUXI4JE5MODVTKGdzVVFvO0h+cGo+OF0vITQpV0p4N3B9OkBYXkpqYyJ5Mjd8''@;'; put 'put ''Zjd7Nis+K1RHIjhmejcvaktEKSZvc1l+L1BSPTMhZi89KWlwQiNDbX5MVn5VZD8lSnghZkBYUksrLz06a2Y6Z0JeQF5RMFN9RjtJI3VOamNFWUwkdFhMQnRvd3UrQDhRYiJDZU0rQUBRLFEyWT1GNT07a3o2X2JRZTxvNDxsYHBkaVF7Y28xQVt1IzsuP11ZSUpFQkdtQW5mWSxyQzpbOmtTcC4y''@;'; put 'put ''VTY+U2NSNTtvZ0hVPjNWUFdQJj98P0hGVjF1VX1UY1AoUmdNbUU+bjg3KVk0I0toYzNvJF1TPDZjQlVFbkZiVmw3cG8zPDJ4SXFSXU1PLDUyd3c+bT5OOmIqMCVQMCQudGlNIlJbZHlJTlc1UnBZc2ZYTk17PW4zQSpPYTBjbzAhXUUoLDowRHp1MnVhWVc4MyR5dV9Eb09hQ2M1VDU/V0lRbVY/''@;'; put 'put ''Izc6MERXPSZsemc8a2Y6MD9pLm1bWz48OC88Vy5hJSx0YVc5YjcucFFERiFNRyY6PT9GV0UldWN6RmBWSlFfJnlGYEBJfEZ9OHtkb0VPYl9YQzg7RFZXQzNdRnZXaiN1V0lBbkwmdEhGXnk+dlVSM1hBU2FMZEdmeDNJcUkuMUIufmBheVdeSkYwWn5WUCE3LGlZYjJ0RToydXgwYHxgbzc3QFF6''@;'; put 'put ''LmluZ3QwITtmQDJnIXh0T1NFVHtZJVU7Pl5damxaKHZpKFJYbiNRXVhZdVViLEg/KFM9UDE6LD1fa0FfT216bl5Idy9kNTQ+VEc9P3ZldXA4cVo/b2AyK0VYbVlqeyRXPkA3Yz5ZQ0JnKFQ7RUZsTnMjTGZ9RnN5dl9EKEREcHJQRlB2QU8vTUZ0Z09uSGwoJnkodmpHRDw3JjpAZWZsLDNhXnZi''@;'; put 'put ''RzJRXTpJIWFySWxaY0hGSWJ4dTA7KzVGUz9QYjtCKWoxdDtxeTIodi8uU2ZGQFlXZD5lOnRVVnBOISVnenRaN3hsIT1Ue1tQU01gTmklYGQ0OTMxX1M2cDY5UiRabFFmbD5pYGRHNXk6aCY+U3c7dSJkcEQ+WWFzWjZLRSpRaW8yRG16ZGApLCpbTHQ7Y30hS1hEZElBRlZuTjdBUGdGS1JgPnVw''@;'; put 'put ''cjRoaiNpbTd+KT9dTXFGWTY6KTtsTTN1dmdNVz5na2UlRW4zbns9Zj90VzhHdzFEZ2orQWwuPE01ZFdAL1p0QkE7MiNNOXVXdm5BcW1nPWdPb2lyKVs4Uy9qOVIwTj9dTjFzdk5tfj9uR24pSTIuJXNaQjU/L3N6WnJXOU5bWXA2N3czKjhVMFJTRFdiZEhYP3lVei8jVCNYWjxaQVksUyh7cHEu''@;'; put 'put ''N0chMDlZWjFwZDtwYXk1OCtyMnFqRkk5WUtwODlKWFE6OiJMMUpTcU8/Q2xRMyx0aTE6bDNBT3BKMkI2OkYvfltebWZtYj5wWklDZUczRW1CY3BmOEdgNkU4TUZOK1Y2VCtEOmhtRm1jXzlxKWRWNDt4fC9ERWRHSl85fHRZY0xAdCZdVzU7MlZSfHk+VXpza0JkVGtyJWMsckZTW1E2RnJbYXJK''@;'; put 'put ''ZVZtJCIwVV03aSpaYkBqdjxmKzYzZFtTZGAhekF3VUpyUTFPcDtre1VEKDcxbGxFOn0rKldNJWZLT3JPW3ZDPWJLNmg8a2hAYHNWNXxxNCI7VSY3cHl6YzxtY2ptI3QscTlMYDs9QWVyIiQjTXZJXypoT3lkbl5jZio3bSg2YXgoLHJDWnFyZ0gzO1NvTz0pQiUsUnAqQVEpRX5fcSU5WW94NCMj''@;'; put 'put ''cm9pNzU8N1dXZVNbLytfaWlYTzYvOltIR09WeE49dE4wSlpqUmVqK217KkxYJXNzYGRge2Y3IzkqRUFkJSpVeXsvSHFKXSohNXNZLGNjbjUjNTlePU0hfDkleEcyTVBmb15Kai9gSCUpeGBHaXlXM3AlamNqZmB+PDIyQlFSVVg1fHlXUjJZTGtVI3s5RV89bDNUWSMwZ3RNWDUlO1pqUU1lWX5o''@;'; put 'put ''SmI4RzNYa018ITghKzk2LjNfcDE9bDFUV1MpXVBiI2ZGOSViUW54bDtAV2RuSl1eSEVwMzNwRjo4U3l4UV9jbzY1ZGA/aURKNjhdbTA3WUY2TCVuWUVPcG0rfXA/IVcsd00kLis6KyI6KksieD57THIyXXhESWtlPDYwJTdJTEchRH4kaklNenxFNllFKm46PD0+PGY1eiUySEJTWSFdbVMiOEdC''@;'; put 'put ''P0UpSmVRQm1WZDQzVVIra3ZKanEwPyM+NzYqKmY5Vl1EIWU3bDxJYzJZYTBHbk07RGVVcWJiSkdxXzJbOHo9bTdfW345U3pVYkFGPEMyYTBKZHUzMX4kKFdfey4vZ111Z3A2KFtLeXUwKFsrdSZsRGAmeHZSQCNZS05Yd0pOeUtORjtgS1lLSmVfMkt+VyVSeTZKa15KMTs/JiIpRllULn1AVHpW''@;'; put 'put ''W05ZWWZMfTV+X1kwOSR3RDJAVT9xPSxpJngrTlNfcSNBeUBeZSVFWlo4dz5fM3d4Ik99OElyMmJ8NTVEbXlhWTN1Sy5hKik3cEZ5VUNsJVNFWlkhMCtyaUxHfWxXOmtwMzR9e2UyI1oqS1krNCtDODo0SXAhY1lIdF0oVEZzZ2swTStzdXgwazlXLCU1OmNYXW1RXTE2YFE1bClydGMwLz46dGcl''@;'; put 'put ''d0U4TyVEOGU/dXtObCVyVTxRO2g4TjAjcFIjQE0rU0pMdjwlQV0qJC5kVSlwdG1VO1l+WTxKNElCT1pRP3h+Xl4oNWpBR29FeVt1PXdJbHp5RSVdRTtsYGJXLDI6VCEpeUcmZDJ5YyVQWS9AMm5sWkRwdyxCfSgsbTclWyFFXllYa0ZeWUBROks8ZTJoRDJ+KjQjWEohSjBRYzJOTnQlYyUreSYo''@;'; put 'put ''U2sodTJ1JD94Ki5XVDc7UzwwbU1VNjsvOnkoI0x9KXVbdTJ7cV4pd09wb0JAQ2NOcT4/MDYkfkVlNUd9RC9fVGxbfEo4WVgmdHY3Y1VkZSspO1FMfC94elt8bltBcHlbIzxBYyEwUn5ZXyglPnV9b0wyN1hTW0d+b3N8T2ZscGVBL24jK3dNMm87az4zK0cuQyZgfCtZUnV5SHZDSm9uSUVeOm0l''@;'; put 'put ''WjtJUWorKzZLTCNSSX59a2JhbXlZcH52TmFtMilzLiE0aE8zZSI6YW0kRyQ+VWxhbSI0fC5zZz5bYXg/ckI3OSJFa2RGZlhgXSxYb1JwIUV5biwuMVswazkpYHxYN0Brc0AxfDpBTGVITEs4JTI2JTJxNlpRVVtxLioxQWJLNUVzWXdrc0RoaiFzaWRKNDNzWUJ0eFtpKF9OWExdfDoyIytoSnlw''@;'; put 'put ''Kl53eCE6JSpyXj1OVFYyT190NDNaRn4mREhaKSg4LEQ4bjo5ZyxjNzpsT3NHe2tCK0hvPHIxaG98ISxlbGo+Sk5UKGlkXklgZHlgKnpmOVBbRlklXzEvfnNmOGpaYjhbSSVbSVhfaFpBaTRAdXZ4NGNFWC9vKWlYe0JiNCRbKWx7cjhFOVomWjpIbiszZGMrNXBJTEMzXmZeZiRvIStXRSFWellA''@;'; put 'put ''KVEySWBdMFdLMTpjV29pIjFJYEVrMC4hJVA3KzFWTV5JInNHeTtScXc8fD5dc28jdDRnQDFFa0FrTV9YUjF1cyl5QVY3VF9CbGt8amxBa0h3cEljS2c3Kkk0VVFPQWluXktIaUQ+IyFbN1RNI0gyMDwpd2Z8SWIpOGZ8Jk9vSjF3Qi5ma2cvMmA3NFY8ZyNpIT88elNbPXpQQUNoZj42PmcvTVM8''@;'; put 'put ''ZkooSS81b3hVSU4zIjJGck95M2hXWlFDckkxLlBWP1IoTGdsPmlnd3h9TjNmcSI0ZG9mZk9AcT9+fSV9QzY2SVs3JEQufU5UOEFEJl4pPC5pUzFSVFN0M3U2ai4jbik7X0UkLndVXiwjeT4lRjplRn1qMXo0OjVIIy9oXmZ6dnFNTDtzc3QiJG9lZzUvdmsyNi45THhJMTJEM3hGKVskdFtqQD98''@;'; put 'put ''RnAwKF8vQyIlYWtnL1RBV0I2dF06O1I0Q0YsS0x2Nz9eVkwpZCFLeDJXT3s3NVoqKHFXOTtaNC95RWI7QEkzX1RFbH5vZ19kamQlPm5VNSNzK3IkaTNwZ180UFdNd0gha35VelY1diEhdDM5KDNkNzlfZWQpcEouZk95XkNZQyUuMHdqNyNaOllNO2AhQUksOl5jV2tLTDRdZylTMmRCTjUxd1RV''@;'; put 'put ''Li4kTnx+OiwvOD8vUCtvQWpdfGY2JTQjMVU4YT1QWXt2SXdFWUhRSE16WSZTNHNZRWBDND1QVXlhYjU5XTBXazgxN1Ujd2IuWiY8cTpUPGQ1eTUkWDlwQm1UPzdMcCI9NntyRUtIQ2NgLixPciFRe3JJO2VreSFaM2JlRllHMFZrK0pERyhaVTEyKF9qJCJLYzFVREcocyEqcS5XK2F0SVlBYnZA''@;'; put 'put ''elh1c0g5XSpLUC5jUi91dSZ9VXdnYEc6bmx8XWBwZzJhOkM9Li4xKiI1dE9hUHRMdCpCOWZNdktBaWlyanUyYjRaTGxMakUiMjNpXj9mSzssaDt+QmA1JWNCIn1ST11JYFVSUjJWTHIvJGtQcDY0fEBxVlAxTlQzQGFWTGpiVDtkM0pheTl0NnlJaFJ2dSRnKzlGV28vWW87Lz1AR1F0eERyTlVM''@;'; put 'put ''RHRwK3VgQHIjVGtuLz4wUmBxPFg6Sy9yPF8lZ3QrPVhqUVY5Q0Iodj9YMlN2QShrP2BgfFhYPVtDRCNaWFlBd0FjUmhBY0VJQUhyPyhxJGsrR15HcT9KYC5gcz9LYFdPLzh1TXFYJjMmSzZBKTh1TWlgWVs8LCVHT0NvQSZ0WTQvLmNBdT9BSjEzeGIpbW51eEIrT3xMUko7RShdNEM3NnpGclly''@;'; put 'put ''anhWcDFIVWxjQEZWYXJqRXNlP3k2JWMkWFg1NENBSGBZVmFTUk5UP3wsT31yc2pWRndOSjVTVldPYHxnRClOW3siYSRPc2ppPjZnTjI9VC9JNGwlWFB+P3ImIyxJUm8rclIuOG5DZV1edTkzL1U4ST1mJW9mT3RRUCVmOmt1bGN6ZzYydHh8KUhLTCZRazE4UmVJd3FTWktLQXEkVn1dOi88VkNh''@;'; put 'put ''VVJOZUtSUGZpclZzKipneSQ5OktSJj9Ve1IzI2VWcFBkbyIpZStWK155TCp0S29aQn1Ma2NFcXkpJUVSL1ZASUVFRzNBOVp9d2Y/U215T2YjKSkraHY/bTc/b0hUUjAxSzlwXkV8d0A1b15KMjQ0Q0s5UiFqMVNyOGxSJD5AeUxPejVfb047SHU5MWkweFBTeC9lcDNlWCt3bGk5bnNBPjsse2h6''@;'; put 'put ''QlB5THlFVWt0O2VnRjI0LG5meXQyKFJtX2s4LiVjVjNlbVNuZzt1SztbQ1ZGOm8oKzA7fnE6cTdhYWpJSHMmVHF7RyF2VkxKbH03KF80WzgoMjMmbkVVanw4dlBkfS84NS5OW2JXQnFBT0pJfjo6T0I8UCpAUjJwaTcqcjYuMVFMNWNHcjUsPmpYeiZXcGgvUTtZcV1AYjl7QzpOeSh2P053T3lf''@;'; put 'put ''NiE3UlhqOUVNeW9CdyE6a0FGL2pPSHEqLHZ1SEt1JldoTGIxKmQjRkcvLGRnSzZoWDVldV54fC5qdiFjazZYNiMqPj87VCllSFptTGhMZ1dQJU0ySn1gO2Q7VkpQRnlncHV6O3ZPSC5pUChScHlAciMpfkByV34zOG4pcTRGc0Z+MkMhXiMmTjE5V1F+MmEmIiRBb1ZAYmhSe2phMHIoRV59YEou''@;'; put 'put ''U3RtX3dULiwwM3RXOUtfKzx9dzYkeUYzfW9KTlRuIV92SmokZmFoY3BWfWNnRDdmc11TWWVCOEI7Qjh5WUJZJlksbFMlOSNBdlMjNGRxM2kwNTRoYm14UltwZERfTkIuNERgbCVwPFM9S31SfCt1e2EhWj8qX2JWSlVhSmJLcFNddiYrbC9CYzN7PH5HSiJsfiEkbGdHRmwlaFhJQDlYZiNAR2l3''@;'; put 'put ''KW01MlE4VlRgMGVfJEtdU3c+SmtILjdIIUxTbjxUenFLZiZ1JEUhcTYpS1theGlQLlNsZVdpS2BOfGdoZjdUXztUNG5BZU05MEckeV5aNTI0UTJgL3lVejlvM3Rgc2ErYClzL21MXSxudThDYEp9QF4pdE9zfnt+aTowPDJTMSM6RWEmZXpiLkFzLixMN35PKk5RQEhvenxZVkJKQEdyP1RLUlZT''@;'; put 'put ''K19AM0A3eX1WKH57UmBOQSJJNDhDJH00RiNAUkJLTytkWXp5T1FXY2NeMUAzS2VdY0JUXjhSejcxIjg8V2lNai9LfXs4biU0PF4pJkdRMl9UY1c9P2tLYXpeImhsNVUrLjR1dyhCPFZKWHA7dnFlRWp3W0coO29aK1dFamRLW2drTFA7MUwlWn5aLyhHKkYlWXxYU1lFRyxHYD5rI3p+XU0wbC9V''@;'; put 'put ''SlI5NS9mKyxBN2RyWWtwNXlZdV1RMm0zQjQ7dUl0JSNIQjkwUkB3Q3ArMiVuTT1rL2ZNKjlmInFXNTgxfGhbUiVOJm06eU9vOSlLW3l9Ji9RcFE2bFQkazlTTiNwQTRkZFUrdVQoTFsxQjljaVROJjg9R2U7KWw8TjNiLmRMJXU9YnFfQW5bJHBMayRKI21DLHVqaj02TTUiWW9IbXp0NWxGJkpL''@;'; put 'put ''MjMoJEwmUVtvcWU2dmZtJntoTUMlc00sM05yP3Q5XWo6KW59ZzNEM3UiWFVLNEgqLnZXTnZ8ZTs9S2VXQDNqSF1iXWsrKT03UkJHPzlYcz1PdX1TNTRZUnhKWWN9KkklKkgmQ2UyNngxNDZPQyVkSGgoUHRoWFgkZVMhZ11oRjwlWj8hPyZJIUwzJjZvWHtBZUk6QFdsdDA1W2MuYnFKQTNEIUty''@;'; put 'put ''QFRVKkx9XlBmQj86UypPW0IyWjw8fUJTMjRJXkIyJlZ3MnImOUtMQCVbMVVRXn4uV1kiVXpxeT56YmQ1KGR9K1pKNiomKnY6RlYiS0Bfc1YsXzE7JT1wWX5Wdk1AMU5fSVpea0FLMEl4Qnw/REZNViQkQUZFZGhdQWU+U00oXTBhW1o1V085LmRVIWNoXUFWaCZARyVUbG98MUN1VVFIWV93dzBm''@;'; put 'put ''RFpPIllIa1JEZ2tdS0BOMWRuUyFMYjdAL3FTfUdTQHp9eU1iU1FAWV9RM0l4JCttKCtXNDEjfiV8Q1VvZGlrSThid2NTRERDdWw0WllRSSJuSks5VVdVcVlIJj5jMD0ydGZdNWZPVW5mZHhlfE5iOmpWKGpzXSxBaEZqdVE4N0Zuajg6M2A7cyZOKCIscSgzMk9uRTwsb1dVMXxAU19tfCZAeT85''@;'; put 'put ''RF0zWDBiTyNYWjxqU1IzblcvWGEiNCFQdDhmZnNyRHoqVix3aWNOZW1kI2JjamRkI2JmOmJVTjFkQSNyUD9wNkpAN3J+SFtUNT93NmMpVEwrbUEjQHlhK0lBRHk3MXRdN0lWNnZYKktYWEBhZE0/TkpYLiZXfjhfaExQVzZweUw0VGdHNWJRdU5WQE5EY3YkMyE9fHNOUTJlR25ROSVUSTJxWWQz''@;'; put 'put ''fFQ+LEduUCxefUN8RWY+e1s2KSMrXUw7VFtwKTVfdkxTaFR+OVFsO2xSOVFqUm9MSWZFVkM6fTtaIi5rUU9vKC9wRzVINzttOHM5elV+SGlSOEIiZGxrNjIzIV9TQmVEODA2eHYpYCl1czZIU10mSzl4RVE3bXJWQVUkd0xJOV83VzgoKVZQUz9TREJjS3gkTTI7SkJnendOW156TDB6dFo6b35r''@;'; put 'put ''e2ZVUmA9fiQqMzQ1LiVCXyhWYCtQWFN7Zk5XTUJMIVpnRX5DW15EVysqfjgqej9iTEc2L1F5ezxwR25NO3N4NSl7czpLMVFvUk1xMD8jUl0zNkFMM2FIa088aiZbJklvKXc1ZWpoTT0wQzdbMFgrbWg4VDlLNmskUm5eKHtPL3JrWm9kW0M5YClYKCsiM1hGVHZGKiIzWV1AfmgpaHVzWSM/Tld5''@;'; put 'put ''MnZDMD9vKldyY1lCVXlzMnxQQj80c1NHczdFcyNFPGtofFgmNjl5RFd2S1diQXovW2hGKk1vdkFIRW02WXclTzJDTmk5LGNNPU4qSmsvdXxqeCRQOUxTYHYoalc1U3BMVHBHcTd1MyE1VH0vaz1GYGN8WTV4fTAjamZKPjhRYns9Nmo7bUtbQWhBVEhOKWdBZkdoPi9iRyxySlMubi9jTChnLjE2''@;'; put 'put ''YjpsajZoe0ZmTWhpcEt1Wi45OVM4TWtJVixHJWJSUjhuaFNfRUN6cUJZTjwxfEIzdFFER2pFWkxOV0QyeH1gTGRzRnRATTVGX15TX312fVpAXThXPkN2dU0jYUYrOT1kJW9mSGF4b3hQI2Z7cDAvbmBuTntETyZJNiEpU1BVdVp7ZGg3Lzl0N2ZEP0lVV0p6cHkxcWx6Rig4bmVZMVkoaWdrejtr''@;'; put 'put ''djN4Ikx6Jk9vJTdtcDU3bEV0dzZLRVBtelAmWzg0MzZJSjI9NjRxRFYoUm5Rc2o/PX1qZDFuZWN6e159Jl84Nyt9TyZPJHg0Nlo+ZDJoJSQrXTJ0PTYvKjNUaHghV1I9aiYsPmMpbG87VlNBJndzckNzdlszUHs/NCRTJWN6P2tPUigqVUJjSiFIbWc2T2xmZDV1OWY1MixsUnIxJFZhJEgsYVJ1''@;'; put 'put ''MFtTMG9sIkFrYkUvc09eQll2UzReeVVsYXdEKD5qbzdAI1tvIyV+cHEkVmhVaVY/dyViSHU0SWJoNjg+b1B7PWdgd0hzM19IfmdhLn13YTAhajxUJjA7W3hFXzFDeUd3Ijk8azRldk1OOklkbXBYTTFtPEk5KmdARktrJEF2TWliVEcwPDY3KU9wdCV3RERjRjlBTUA5JXN2VE1JRGUreVU4c11k''@;'; put 'put ''ciZseUxybSNzPyMmaG8yM184bkNLVnFtTSlSekxJOWMsPFNjSzU+RHxlIWNTIm5xSCJpSVlIJjdlZGBsTFZHazAyRWNEU0ZVRTVxM0NLQ1B8Q3NBXThSfjZtVHx0cD1ZX1RwV2chb1t7OU9KX0R+KTNVIiZva05TMEx0Jm9wT01vVnFDXTByJUQpeTJFNnFNVHU/aEY6blZpUl55WlohanRUKG5Z''@;'; put 'put ''fDdXc0w3ITBYfjlEKzkvRUFETU8uTE5lIVYlMFNiYCRLOFhwaGVGak9sZHNPZn5PIkE0PVByezokaiRIUHkkZiRmSjFVKlNyRWpkN0tNd0hBWCkySGpse24jN2Q0VUIpVnVyXVEkSlZmZG5lX0hPPjUlPDchZileJTVVeHlvIjR0XWVZJnVbfkwodFN+OC5WdU57TU4odVNybVVOPnBiWj56TDoz''@;'; put 'put ''NjFQaU90aXRKM3RSUll4Zm1nLkl8KmV+TyFvIkN6KVgiLE8/RF90I249XSpYSUR8KVlJZ1lLUi4sZ1RSVSwqdUxzJUVVXkRCYCltQjd+d19rM1kxbF9tRH1qbmR1PzhNWDpkPDpZaXV1P0lQUEVVZWZlWmcxNWoucnVGWGt5Tn1ZODElVF5CcHdFcVNZO0ZMcUQ5d0VGR3FnPX1fWnhySGYkeUZT''@;'; put 'put ''dmJIZ0pvPVAuXj1lOz00bExUL0c9RTxkbF0wMkFEKDVBd28sJWovdyMrdj5hUTVOfkQmTnR+bDh0JTU8NC93blhaKjt3W3RRYU9dQ3pAW3EzLFtCPForIS9+eTJ9RyJVIToza1JfKT9zPyltQEZ0aWc0TXFILyRsb19hUEkiW0JAQUZ4Smc9SnxIPiRqSCJEXihgSG52cjkmUkd5MnNkKlYkOm9i''@;'; put 'put ''Pmw5NS9oQitqdzs4azsyITUmRF9LYmYhKkwlO0JAOihLMl9eXlR3fGIiIShmeTtYXkBKXXtWVT44eHc9W21DZVtbdmRzOUUuLE1dbXoxQj9gJmZIMFdzU09bVyIueFhRNzd2JkYuOTNFSndgNHh+Inl3N1hvPDBvK15AMUxmQjVjbUMwe3VWQDFfKVF3QypuN0FMPGwhS2skdSoiYWZ1ZWFkTW5i''@;'; put 'put ''dWtVPytoIV5dSUxxLFFkeDRtaTl9e3VuWUl0XT9iQVskd3oxLk9na1g2Tzdpa2o/UDdqW24qM3ZpP2VGJVgiJUhaeGFLR2FTUnM+N3diPjR0RFdSJE0kaFpQYG1IWTdaRnNqOWwib2Q5Pkk/bWZBTyYlK1NYNTlvVV9JO0NTYzNCb30sU3UlNGleWUEzW3lMTktgT01AYEwrcDxtUFVMcShCMzpz''@;'; put 'put ''QHM2KFgyRiozT35tWVIycDdMJihkI2lBZUI4QWVCOClpYmBqI0psYVs5Tjs8Lnp6QH5QNV80P2JkZUI2YzdETkhOXSxWR1Y+STIoQiReSGohT1ZXTUU1IzE/Y19HL3IpaSZmIzp1Y2A/IXc8PF4xVGFWKnI2YVZ1NDBEblJydSRTMkVDQTBXQkEzbkVNTENdRF5KOmtwYC5CTkplOHo3Q1dkMnVD''@;'; put 'put ''NE8+aWNFVkVBQUFBQUFBQUMiZUc8IXlHLipeP0ZnUWVaVTZpcjcjbkFVPG9uR1l1TSMhJSxeYjk2T3pgXmtEKUg4WHV2NjNIYDlIbnkqcU9SP2khZkl7bEN3Njl3alVKbnZ3V2xXdU9OTjRyYnAzfmY0bHZaTkZWYjxILnxATVtPfixxb3NYViRdbHRtNnxGWXwrQXVObzZxUklARn5lSHlSYnxK''@;'; put 'put ''N286bEMzWlhnNytzYHFuNDxWPUphRnVUKTJzWEptajZbW0oiMTRTJCtEP2VWUCpacixqb01PNWtTX2taV3kyIzhVRzs3czlwZGJfZ2JCWmdIWXhPWWFFOkVpWUIyWDh5c0BpOypmViwjWVY7WkpWckxVTTluc0hwaGgzYG9ZPE9tZ3tDWU5XIyYuYEVOME9qYEFDKCN5Z3UjeS9KIiMhfl1YJGZ3''@;'; put 'put ''VTtbQEw3RF1RdzlLL0lOLE9CPCxoSlFTPlhvRVtDUEppPSZGSSpJYH4vK0UzR0lbVUIsY21IWEY/IVF6Q0csbEljPio6eEZTKH5DSzR5e1JOW0QhbXg5LF9Od1tJW1FIPjMpb2wseFNzX2FtaHVmNHNgRmJaM2UzYSUmWlM+UDt5fiQ0WldPT0lOekR1Qj9QbDhGZkYhYHh8aUd1dyMhJHltb081''@;'; put 'put ''MFg8MSx4a04lPFI5Vm1RZjA9IzRQVVVpZUYzU1E0Wys2cWcuL2JZcCVfT1N3akVbSWIpODBJJjRZJU5Hbj5ORnloZVZSfDA8IioqSTxrOyRuNW0kbH5vak9ab1tPMXpVVkVANVhvelpxUC5rVVtGanh2MUFIaW0rTn1bNUR3VSJFSjRWdT0ocEJvTFNBfnRnRnVRNU4/LzN4ZiV7eClqdXpKMD1s''@;'; put 'put ''UmsrYUZhRXAkWD07M358PmBaaVJ2VnNrUTBVYDg6eFlwJV9QOkluIlFmY3JFMC9LeCxZciZKLzdNNFVeeSY/eF1kaS50blpoeyp7T3NqXUpJfCVYczBfIU15eHJWR1dhOzhGWn0jX0ZNNmhleDU4R0tYSUhNOmIkWXdpNmtZZCooNVpOUy9GW015LCU5fUl4Ik1AW1BHOTV6bj8qPHs6OWR7eUpb''@;'; put 'put ''JFAoW0JGMUZFVEV4R0wxaiY5SCJvUCFydyFFSl1bY3dVNV0rJTdgR0Q2WEhMMHpUI111bTQlYV0pRUh2Qis+V1RgeEkjJE49KUA6czVxTGtSaFRSdjZTSTVQWCg8LE0zQDUwXXNTJX5eeFpoWEJMeV8ia1hFYVUwY0ZWeWFxQCM/JURXVFtPVGpMUkJFaEdkSk9NbU5Qbl1He3M/Y0x9cn0+PmA4''@;'; put 'put ''MXxdbyplb257Q3JxeTxyenptLmtfPSNQdmJUfmYhVmQ6eGtDLjt3YmkxNlFqc1UlOWtnQFZ1T3k4SVsrKn4rPksuO2Z1bipMJUBKd2AwcV9qeXRINFhhOU1aS1dwVF14YGhjVXR6UXsvRWc4XiV3MkU3c0BifC83VzoyI25mYSphTDhiQn4+d10mT1RFTHlfX1ZeXSpKXmV4WkV5VlhnVSJIOVdU''@;'; put 'put ''akhLSU1IXl05L31pI1thbEMmMCglTjxNPEl7M0wzT3Z8UU0mSCtdMyM7bUlbe3ZJVnZjb25JamY/YE1Cc2J1MHJnRWdgKjdqSzViJHdTLk96OmA0ZyQ0MCl8YnNiMHRWKE9Ya3oxOCwlTm9+LEIwaTshOipxMjs5eUUhOn1tLnZ5dTQ6Mk1LblFDMFNFQXQraEp2dT45PUMmVGJudSN9VyQ+eH5q''@;'; put 'put ''QXc1LnRsfnBvUHRAdmdKbl9FcGBHQkA2JE5NP0QvKSlydDV4c0tbKSU6TSpue2hOblJ2d2VQQmxyZnczWnJKIWB5bnEiPnJsezI0NS9wd28iR0E8InNTMXwreWZgNSl1I0duaWMzTT1qZnE5Lyx1O3dHLFA3L2U+W31HWz1Xe10pUG98MT5aQS9VVUB3JU99LkYlYnpYYTNMJW13cG88RVIjakUx''@;'; put 'put ''RHwhRV5Fb2smd0hqVWBfUnRLb0l5cFMxS3w9KkV4VFVZSnNSaD9maWd0WU45Uj1rTSJWfV9yTUtWe217Q24uZkZIbHZ7PW92dEMhe3EheXVNcDNOUD9ldm8rU1dCM1RyfHkvcVN4RmBtY1RbW014ejZROTpyQ3lUKD1eOE1rbUB+VH1JL1BjOnd+YXJpXW9WXjlhImMiTFJOL1RkfUEiVVk1cD0/''@;'; put 'put ''O3hUU0pdflBsNiJYIigiPllnPF8pSEo4dCosT2w+d0hEJjpAcXtGdj5LZF9qJCZUWUE7RFdXP2M/RGFQYjszRVZveEZeT1ZPQ0ozTCg/RGZjZUR8bVNmQnEpJXROMENwWCheQEVRR1A9WWg9cEgxQVh5USwzeks9OF0/dlE+eSxlLGRvLyMyWkdkY1ZOQixNYHlpYiMpP01MTFdyI1V1LEo6eChd''@;'; put 'put ''QEpKUHRjRClqPiMrblZVeDw+STchM2lhe10weytkbDMvYXdrWCVqJVQiOy8rN3xsYi9KYHhua2ZgL3x7NFc2cz9BYCV7OVI1Kl1SJn5PMTQ6LDtid0dKR3NKWmdZPGEjPE1OPSg3XSI1aW1xTklebGt+JU9Pa3ZNXy55TE8uVnkoRXdAQThnR2EjPUtoczQ1LHcjQXBGdE5nKE91ZTcoZnZ5UmNt''@;'; put 'put ''Q3l5L2J6algyRlA5UGooWFBoVD83JVhOMVVqdmBuTj1oMDRZP08rKkxsYyJSbkZySEdqQihERVhEMj0xZG86dF9PKlBAZilaN1lhbj1Ee1YhYU8vYXdkNSRlPDBXSCh0Xj50dVZhOG9NNkdiMjEiYHNqIjRlfnIwJjIhS1B2cGFUOmpgLy5xRS9HUUc+TF1JZGoqOChULz1SR2ZITTRCOHAqVE8z''@;'; put 'put ''USx9aXk6WitUZy86QCJ4cHN6U2B7fU9JW1l9VylMQk57UH5OIzI0NztxU0k8aFFjenpWKEFqNWUsT2VRI1N1fjlTY3JsP1ZTd0x2I1slYUNjUnhpYFUsU0tvJCYlJGs6YDtgL2Q9PDU8MS5AWGMsajcrM0JLIWw6Oz9aR3krKkgmSk1fL2ZycntAcl87KkslajlOL3JgeG00fDZPcVAhJU0oc196''@;'; put 'put ''MkcyI0dle0M3OENsciZnUSVnXWpVRlVYZ0I7YiJXJSVnODwsQCQqeHd3U3I4aC4sJjQ7KTpVLl06UGopTmMzbyJnZl9GI3clNCslfkEwbjVqMWtQbEdiVyprUWd4SjI+dkVmMkNKTjVZM3kzeFVrSTM4I0dQUTxvZUtzaURhNlshYV9lOjlzPTNIckRIM2NOanBINndyKmx0b19nRGZUeWx1LFYm''@;'; put 'put ''IkFAKm1iNVtoOEgsazl2aWIlZ3lDVmlPcTg2Klh6K0FPWz9La2IwYkskVXhaY2xsQ2UheXx5MlF9VjQ2a3BQclc0OHhFO0pjYnZiTz5vMVVUI1l3RzlCTCsucF9sPX5TcT5aOTVQX0BbdSs5NCM3NkI8YlJBWVgodTRlS3lAXXRDS0YlV25GS2BHRnpqMy5YR2U1fnopMEJHfFUlV1ZBLDlEQEh0''@;'; put 'put ''KVBDPnleL0NIYz5jLmVIfDBPdHkxVHxYOFFUY0hZWFEsd3dUM3cxU1pVYjdHQ2VibldebHBqTWQhPSNTTE17di5ySGJ3bENETCl8VSNPT1Q6Oi9aQlVGdylUYDhRJDQ+bGp2KTtOZ11PVWN9cmYvNW1jW0xBcnxvYT1eNm56ZkQmbzlleDFrSV5wVjk3R11EdiNBKjVXKDQ7Yk5XWm1Hd0Ihd3FP''@;'; put 'put ''Z0x9KmR2MlFgfUNkcSlaKjptWklOfEFDdzx1QzMoYWZCLkZEdWZobVhAYTdGK3NOL0xUY1NwZCs2YXBBUkNwaVdBPzlxTlpVOmNHMnt7eEo0TTpjKEAuKV58a2hCK3h4M306YHg4XSpPUkM7S04oW1cxezRRRUkwR0MvOC5ATiJFK0dBNTh3KGtrV0VZUjZkZE9WOjFJIltmY3pkN1o0SmxFdE5T''@;'; put 'put ''LyRTJGF6bU95fH1HdStKUHN+eWU+Vzt9O3NrbyVsKGBwbi4xTCw3T2U/YXJlWVU0LHFMNSUhcixIa2JnazxXI05we2A+Z2A8dl9EIUp4ZyRsWEYzcyZbaCNAUUNiaFc+NkA1S1ZxeVVba3A3aXI7fkcjWG0mMmRvVWJTW0wzXU9XSS5WMHVdOV1kQSZ5KypQI1hHIShoOGIsZ2xIPjJjREJ9OUpd''@;'; put 'put ''WUQ3I2xgRFEyV3dZPFY1Z3FLRFtrJTVKY3BHTWF6bjZOJElqIXtAZ1NiKTMwbCEjI0ZfNkc3bnUoV1A3ZEdsWD9dKW8xNmxjZEI5PXg6dkdXLH1pUiZxLnVzVTxMMF53VyEsPTZ1JHd9KiNjLitqWUE2SzR2NFk4JSpaMThSYG8jLEhqNG4mKnRBUlVzWXk6RjdTWzdtbHtvWXhIL3c3bDduXW9q''@;'; put 'put ''ezZxeX5uSF1rK0ZsVzNHKltMd0NlclNUSGNPcHZnfjhTbGhnSUsjbW1UWHdjaiVGW21hb3E6Zl9JM1JFSUZ9VFBqcSpOI3chd1tUbUt+OCleSHZoO1JhOWxkQUNEPy9Jb3pOVyRIUj9uUVFkOl55WX1QcUlPKGI1XWY3bXB3ITMmPUM9Wy8lfGZ5NWphWE0lfGJ9RUxocFs3Ik01OVEjQWBiN20+''@;'; put 'put ''R19EZnU3aGEmWExUYzZRPFc8Ui8hZzpfWzhtVWo6LFVIbllAVypieW5tYltNUTlkUEcxTjp9PkZtZ0FDZk95L1IzSXo5cERkaUxpYFFAZnBYMzhNViFaNFRJcnNgP2NEcSxQUnBUPik7IUV5MTEzPy9eNF0mSHtwU2FudzFCP0ZGK14/R1dIW2pMeTJWPFhjQWRxSHNLITBEO0l1M3xxbV13MUNU''@;'; put 'put ''LlNdOmVYdWl2NC90c3JvaV4zdkBxa1E5IWViOSZxNXZJW0c0TmJ6MUNPVF8pV1hkfU0iQENgU1QpTVJXU2QlXzk2d15HJFVFaHk/VUtkPWYpdEFLbUleRl11XnIkST42TitARDxlcy8jKHZsKlNlfko/VkRocnUpS2dxPyxkciVtaztYd31nNzMwUk14SjM0biZHTFF9RXEmbU4oa0VJVyJVK1B0''@;'; put 'put ''KnxWYWVDKzluJWFnOnZtPXtZKHw6M1FkZCF0R0UueT5PTjVXOFNLLm0yS3VwUEBkSTBObiNWIWxWZGlxXjkyWilhODo7cF5GKH1SYH5HJiFtV1dYejpIVDJ8NUJgZ3ZKUWZ8KEgzRVMzajN7KVF1KGR9QTxxZ1dAcUFMKmxMbGlFayVsZT82TkhEayZxeE5QPXkxQm99cWZVX3VCY2VHNEJPSXV2''@;'; put 'put ''fFgoO31sQnVlaU9YP0U1aiFQO2VKUSVqMlBAKWN+P2hCUF99O3FGNX1Ydm9VPS53IWtfPTk7MEt6TzJsKEhEMk5GfUtoan1oQWcyaXY7OCM+M1R7RWBDSW1hMGxAN107ZXFlV3hrfSpzPEEqPldhI1FvMC8ua0AhZmV3Ji9gODlZanJifjh7ajw7TmB2fXU1fXlhWz8xJnhUM3tDUU9yUm48Vjp9''@;'; put 'put ''fUJpaTtbS0UmMVtvRlI4UWtxSHc3fithOSx3Z2w4VUc7LkJnR1YvWm57OEZMR15yMjcxZUNfOEN0Yyp9Y20xVmV3RSEjZGp5YDxJN25lLlNNKzFRPjA3QGs7ZV94XXtqTEU5a2Z2JEFefDAuTkczVGMqM2gpZ34iQHguJCZyam57Kl0kOXluOjguXkNLY0h0VmkxW1RFQGd5b1lYRyhaI24oVEpW''@;'; put 'put ''fiRDdk5eSXlWe19RJCUzdD1OOUh8amkrLEdddz4rREx8P2ZFfFUmKi5IfGgvTTc1QGhwNm4sXUpoNCp2LD1dLC9HaUR6fmche0lQKTJSezJjSXFnS3R9WU4xKmw8MGI2TEdWIVBgJDRncmpMM2Z2VzVObF5AQ2dbNnlmc3tMMXtaRGhPWy9maEJucS9QIlJYcEs4P0dvey9GdDs5aiRKSXRiRig/''@;'; put 'put ''PyRwZk1iVGF4YXhtZCtjRGFmNU1iL088RE5yLGNBaWFGWVFfY2puOFgkXj5GXjVCVXVAPz83K2R7T0hPcjp0KCk5cD4iP3RhZl5kTWM0QjJwTV9NKnh7fkhzKj4kZDBxc1VTfmxlOzIzKEYlbFR3bExodEZ7VF4keH00JT4mO30/TVM7TSRLWlJzJERtOHVYdG0zRj9pfkRXRSM0WV54ZDppJndX''@;'; put 'put ''bmx1XiNYblQ4bCE/NzM2WmIhSkZ3ZytrQHRzbERJOzR3ZzpsITREPE9neCwyR2hKN0lNcmY+PFlnYjg4fSxBMVJka2h8aDEiSTBgWmF1WCYscHt7Jmw9bllSbklraEBnLl54blQ/I2ZuYmN1ZCR8MlgocGM8I3thLm0ocWQoXSEuQihwOlddVDFdSW18fW5uIVt0KStBS2BwQl80QXxifSteTSIo''@;'; put 'put ''YUgkVDh8NyYyaDZsK2M0MSQsMW1YLCRuY09zV3kqSjJjbT5uNi5hdWUmKzteTFA+WHhUfTUxWlZjRWdJdGp9dS9hbDA4QjNDPGVoM2cpfiwwcmBJWFMoJnZLJEtbbDBHRmV+YF5aWDI8LHNqMHNDJlRNLFFxb15eT3xrdSRLZUB9fiR3K1Z7JDg2X2hrcSY0OHBQO097YFBfdnBqWUh1XWF7JCNk''@;'; put 'put ''UWdBLCRZLEtpTXp3I3FdRkRzdSRheXlJWlo8fS9MVTFpLDBALiNaVjpATj9EYEV1ZDR1TWZRTzZ2JD9ScyN7TF9rL0BHNn1jISZMK3l7KDxRSyNqNzFHIiJzIzBpQ1lUbjxoS05nTXFJTUUkRk4jJjJwcW9RdTpgYFNxdS9wPGpHdlNDJn1WIi9eeFZyb2okKmVLbTt2KWI3dSl6Zj9jNHZ+P0Ui''@;'; put 'put ''Ny90bEdtNHRbaz86fldlWG1ZbzUpSzFgZ2QqM0VaMX5ORHdbPHlqVTNaW1hYOVo0KlIjM1p9LFYqa0hqIiM0L2JFUD49MDchcWBmYDpNK0l9JW5NVGI+Wls1flpPb1A2eTlVVmghYjBWTk9sfUZ1M30xYUkqJVssalEyRlVteG4zbG80RlVxYEJUflc8O3wjKEguUzNaRjE3UysmaHNUdWZQK3ta''@;'; put 'put ''RTRHJU03dWYmNHxAaHZ6MjVNVHxMTHdGQk8vbi5GMWRDc10pJUxZVzpzYV1vdmc5LjR4TGBhX34lU0k0biwlISRkK25HcFg4O1RLZjliTWp7QFs5Qjs3LzxkYVJWbSFVPDpVQzIkWzRAMkxRInwyMypXQ3hqbypgeGQ5REdSL1VLNzVnXjdUQDhec31UR1gyNkNhRH5BLkl0eEI1VWNSaH1PN0I0''@;'; put 'put ''cEA7NGEoeiRIWyRHMF0jPkh9P2JRJUIwKDkrWllPREJRZUxnVWdKSDJ7aWwzKzV2S09OXyhOLjZHcmJ2OHYxcHYrL2ZxKTF9aFdQXUx0WzcmY20xP19TL1I4I35SP0VTRn0rLiQ6eDIwcGsodV8sdUFrUGVhfGs2UXdkeClpJkJVXUBjQ1BVeHE+TEAmUVZrQzlFTDUoP0hZV0BQQHhAOCFxcDxN''@;'; put 'put ''ZVNve1lCeEU2V1pDYGtHS3sjO1tdWS9ifigvZW9pPTAqKmNre2pWdDJma09OUl4oa25JWVVnWTRiaHphdjtmUi9UUXM3JVA3eV01WG16WFhHLnlpKl9POEh7ZmkxKVlLZjpmO2ImViYwL1lLRVlmeiRjZiFVZERfZHBXcXh0JXV+M3ZKZ141R3V1UGg2aXNKKHcuP2FrRzJobSsuflFkLzV3MkdA''@;'; put 'put ''byhyXnY+MCNUeDg2dEVuM2poV1Vyc15OJTtaXWB6cVJaPW5weGMhPSFUSmllMk1waXYhJmspNzJeJkJSJT5+S0xAO1FlWTF6QHhbcko6bF84bWVvdmZGRFouUjo9VX0sNH4hJlJDKDdzQU5RUH4oJjZAVGl+UmErSz1eaj1aZT5FPjhwO3ohNG0ifEdmRUt1YkdeT31RZy5CRlsmQkFkYXhMTXQm''@;'; put 'put ''UDt5PmJ4NlVoKlhNQjFBc2Q7dlJ8dHA7WTQ/THZdSzA6U31iKGM1dDMmbH4kdm45Oj45MCRKWEIkYDdpTDMsKnVDSTAlRjc2VVpaU1h+eGEpKnxncyEsW2VgfXA8TStqZTlbNyZWfnpnTGEhXyk7RkdbXUVJRXxPcTBPajN7R1d2Q2l3e1Q+XXsxM3U1S3ZINSZzOn5CQEhPSkYhP18xRDFQczpm''@;'; put 'put ''ejZlWSo1WWhjfipUKVtaSmQjSGhkOjQhQTptNjhVTT1TXkpyUS48MnlrLnRZKz1sS0VleGFudXZqPWd8QHUmNWIpOS8rZGNqUVZwQ05FME1YKTFXOzR8Lzd0UjZ1ImYqITA7ZGVMSWByO3svaEFpQzdlTlZ5Z0MpUzd5TE49L08kflNTd29DS1pRfDQ4dCRWbU9fNWZXNTFfNUtMVlteQHdLNmgk''@;'; put 'put ''TVhfJn5dZ1NPQEMhb31aPEd5VyExdl1kWERtZkZvKFUpSyM5NCwlbnkwInVOOlYmYispRjElO2pGVk9bYmFxPzliOkpWTDh+L11dVDYwIiM0ZT4yLjBrTlpjcVg8S2lCZ2UpQlkvYiE4PitYc3E7KFN7PiUzbkIua2c5NCJMY3JxMWMmTSouUW5hSHRRZWZnUXo4VjNsc1VUKSV2JTMrMEdkJUli''@;'; put 'put ''bWw8aXEyITgodld1dldtQlJHN3YvdHFFWnIuOmFrVHAvZTd5Yn4/X3NNZ0VUL05VRlBZYTMzTDJWVksyVVJ6WzBiS0g8PipPPW9wKEduJVlfTno/L3k5NVRvKkh0YV4xVlhGNHhwPjJpSzBYUnE5I018eXsme0hgaXF0PEZkaD4ybjJUeiJ9YGpMMFU5WjZQZmNmaHEiOXRkJHQxMUV2WDdYWyRY''@;'; put 'put ''TDQ2PnkoV0NTLGllVWUwOUxQRllHbl93USZZPzhVNlgmSDBRdnx8aj8kK0g0Z01IXUJJXy49e1RfY05XJXYlfWNUSXNyKnwpfHxGfVdrXSJ0VnJwO0ZkOXRNNTVWeCI8aDxXNEBtb2ExKXc+SWk0JkEqcFBRdXpDd0F7czJzLmpENGspfjpzdj9FN004NUJXTUp+RXpAaERGelAvbThiYng7OERZ''@;'; put 'put ''SnR8PmUlMkI8cHAkT2tuKCp6O0pRRUNSKTtFcWlBVGxOVGBsb3UjQ3pENiQoUWNtY2J2VSVMS1ZOckJPWiRwLjRMdTFMayZYYz1SZjNWdVRDdGgzSyR9Wyw1SUNCaWdMRzdlanYvXlJoMzZQZWVnYFosaEEoNVF5MTM2PzhjfEkvPkAuVyJocFZRP3tUZHswT31YIy9VNjxjSiFweToyX0lKV1Zz''@;'; put 'put ''Ol5yZT5QdGA2dFEqUy5oLlleT0whcWxkQ2dBIX1CK1Q2VGJuW1QhWlZuLklYWDtufms7JE4uXS54I0RlVyErXkYmQkY4LEBEVE5ycTJXXzkvKlo/Kl1jaV5MZHBeKFVZemckejRSMCEucTM6ezpxb345ZGp6dnNNIW4uUWk2a1F6IzpFNz5wcEdzKXpleCZ9LjFndlNpJHZIUiNkK1QzQjBWLFtA''@;'; put 'put ''KDZJWzQjZkM0WUtJVSpjX0IhN3EjYWVAUCN5Z0dMVT9PUilhXSQsfXZeK2ckej52MXh+UTkqNDp0WHR4Mk0hfUdAW1tGS2h1RjgibDxHKUFaVS5OY3tKMWZTcXwjeVtCZVpbVU5fbl1VInB3REN+T2BHLyImJlsifm4lLjQkKGJNIzBJKGk8MSw1NiE9ImtSSkM3b2todzJPflYoLldKdzI2ZHgu''@;'; put 'put ''V0RtZldCTnZHfmApIzRiaGVpekkzS00lRigqdG82Vz1KZjdWIihWMzVkSzcqSTNWIk4+UHs8MUBsL2ojRlBTK35PKiM9Ojo1XygzWyYkWXJiJnBecHxnVG86Uzw9TGFbY0BEVDJuQWk8YXU0QVI2OkkhK1RvKWBVczFmaTB+NX1NfGA0LFZqRVl7N3c0WENRX2whVmBPPUUwNzBeOWUhbCJYPUBg''@;'; put 'put ''PlsubFhMdTVUbllqQk91InZ5OlZaVTh1KiJKJGttfjd9P0E4Y1JFZ1F5dmV3SCpicihHX3siO3FCMElRKjxpeV43VCh6TGtfUzx8YzE3cVRxXz9oKkNwYWlUWGU9fkdZek9GV1lvJTFFSlltXl4vUkxgNS8/ai52ekFScHIhVFY0dCRwYkU8OSR4fik+byZqPFRWUjByTUlUVSI7JGxBSnJJQVZb''@;'; put 'put ''Kz5IYHhwL1NxL3o7WipSMiYlU2spYiRXXih9RG8lbyQ1VixJIkRjVjNtUCE3LntHWyFXIUd4QHRdOHhxREBEcmNwZjBOOHh5diZAZjhdMnVJQ2o5eHYyInVAR0dUfDgyQUtCaVFwVjkoaW1YJT5ML0ZvPWNudzd+JXdFdHU2VkxIUH54Vn5PfUppIkk7Pms9KU5DQzFgZmUvdy9XVUkoKW5MeHAr''@;'; put 'put ''R04rUyR2dVlgQWhZI1ByKyMiQGtBYnxLWTxaLE5oWWlqVE9JWChOZj9lLH4rMFhOe2lIeCIwVUhJMDxHO1p5dCh+Ui86XlB1MlhZfWZdP1VYWmJIbltLfGRieUNSYSN5Nz5yJWN+SGltMl0xT19MSj0lQSNrOmtiZlV7cDc0ZnRZQWE3IztdQGxnZ29tRFk5KF5aP2tFQj1RTTc0ZGthdDJTNjlP''@;'; put 'put ''RS4qTSNCWFMwbGlmWCZ+LGhwW19ZSEFQOEdHb3E/IVZpdVg9TCImWT5EbDQ2dDpCQXdXUmAuV3RNbHBdc0UvWCN2OnYifHJuWjZGT0RJNXozYnZdWVIpUVo8TG1wWXZSNHNfLyxMWURAeW40P1ZnbzF4ZF8rcSh2ZmM0ekZQVkl3MUhpanFYe1owW0JLUCpmOioldkpuPTd6QnUwVGF4Mk5JWUd7''@;'; put 'put ''OG9ZYDlgUTxTcE5KYXgoSTB6flo0XnBib1BiRFJgR208InY1fS5udFtPPGdXTCFaKlpFLHJYNWN8RG06YHhQM0JHR1JkOCNwKktTOWZqQCtaXiFZKzQ9ez1VciVnJGpBN3F9ajp8N1UvUE5ofTtFLlNVSWF1P3pkMklGY1g4IzRRWFpSdX17aXRSZ0lAX1hUZzUxckB4XSFddG8jPkRyUFsrXUpb''@;'; put 'put ''VXpyM1QqfSlaOC5ZNk1FLn5sUENwVkw7SjRBIm5sY31IT2M4UnA8PGxjVEl4SkhgOCYmZj1HNGo7JjcvSTRSI3w0dFQ9a3p0WTY4cyQxcnRrbFdMOCxyTltdfnRjaChKSC9XKko5YzE7bT1xXnQ3UWdBUkZ+aTFUdUNDZl91WmNiUkp0dkhUQDQ3T2ZhISJrUVEzZ1kmfHFSMXIoW18iMThrOltW''@;'; put 'put ''UlFbfEZ0Wn16XV50QzxjSz1aIz4mRkwzRDF7YjFibk9MMFZkI1VsTG1EIno6bj5ZOlZJWjU5Sj59VVU+PWhDaHNwOntEPFRDJj5HLD1vJXtsPk07cTdYYkxafDohfHxDO0NQNWQvOHxWUHEoeXJ9dW4kSy8pWW4kKEZEfnJZUjM4IzdzKnUsTGtSYjI6X11VKThZTnYwYTt9LmVqN21WJCVJekpY''@;'; put 'put ''cXVybiYubnAqV1AhKzwuTGp7fG9RYyxiK3xJX2wqQHJOPHwjfl5Va1VvUXgwN0g9XjRsfn18R2JjUUBnb0ZvTEQsSGhLPH5ybGY3RVo0UnVlTyt8VyY+Z1ZkJGYyYXdvVGZCWHF4KWtSQWpqeEErJlskfl5qbjx7Z00kYWF4Pj97dilqTlAiPlAlR1R9L2BAMERWOEpuT0JbQnFIMCZ7NzhyeyMs''@;'; put 'put ''VX5XU0JJeT1OYTRtTi8kb3gmNl1uMCUzdXU3M0dGcXBYKUhkM0Vyc31FK3RBXzFPUDBLLl9dWVdnTGh6REB5U3xGL18jfkQ0JVJ7LG9vbS5OInQmZ1dwQSJoTXtaUV46WU57fCNtLDx5JVZTIUhANCpTPk1LdHt7XXJfWnwiWCZyO3lsTE1+MmMpfDVZbmNpd0NgUiY5KUIqdXk3ZF5FYGkrR1RP''@;'; put 'put ''KDtndkBQPU1hTUB4P2JRRU42eiFeJCZveGdhQmhCT1dOb2cldnAzLkltczY5YiovNzovYWQ9VWZ1IywlbFpiJnwvfGlkfDdsTjgpdExRcnNbR1A4QHR6YDBJT1c+V2M9SmAxbT5mYjZvRXgjOEc0LlouOC5+aDZwPHVGWCFqQTpOZz1qZ2E7ZzYjNXhgJHReVlhONnVnd3luV3NmT3s2bilqNXt4''@;'; put 'put ''Zjo3JDpuSCRjKy8pSVlmWlB6ODJdJlIqbTFWRykpaTlWNUYxbn52NENxKkYxOm5mZT9CS2pzeTIrVTZHOjZDPkA+Q1FmKURWdl1YMV0rK3Z9UVdBX0JhUGQ6Z1Q2PzBpLyUrPCJqOEYoMDIlRC57PFBtUiFHTjAhSUZAO3E7OUFJJGRtblNLJm80SkF9UDxec3NEa29GVTxSIWxHaXBJZGA0XnBv''@;'; put 'put ''eDlQPTJVMzd+RkprKHlVd3QlU2RNNSM3dEJwJm0rbzQldFtnM1swK3hYND5oNDc5fEJRNTZ9ZWFqPGg4bDo2fFJUWVZlRG9QZC5WYiVeKHVtRCUkKWBUfFZjdGAoNER8IWFNdVsyRmc0SHIsYyNfZF14SXM6dUNOb2xVSWFQKFgrJlVFez9XPGZgfiN2a2YmRHAldDIuMyEub348c0s1XUgobTd3''@;'; put 'put ''KEFNZ2NsQD1Pc28mOlI/O2ZFZnpUSF1vcldXVXh4UnU5bHVMbXYvSkd6SFJiKXgrRnspcndzSkt8cWV3OEp5ZV5PYnY8XnVXI2tGa3Q5eUgqKkYvfkBkeTxzb1VFZDlrby8pWCtkTHZHSCI0R19obTA2PCRpbzB7T0xISjRZdyIkMVh9PD11Y2I6JGc/dmFJT34sSVV9PW09N01sKEtNdU9TWVtC''@;'; put 'put ''Ji5qY3glTHxvbXQiZ0chX1s9USozJHBYQ1cpfXA4KFphNERdfHl0RitOM0w6UXZCMCtlbT9re0l3SCl5MUZKSVQ+UTIrLEBEMWhmJClRenpFcjVHOmZEdHxSRmB6ckkoSCRHX1Nqb0BPYGU9JTtZU3dASDM4dV8rYXM/JSM6Q2RDaS87Nm9xemRYQCh8Mz0rRSpgJk4/NDNYNz8/WVI9akRucDN3''@;'; put 'put ''InFEXXVQPlZHZVg8bDFyNkFkT0JDa2ZXQTQ0YXB1eSRLI2UkI3VkRXtNeGtObGVzaTx+ZHJIPTRgQT51Xyoxc3VdQEJ+fFpsKC94cSxEZnZTO184V3FlQGg/VyMjZCNEQzA8Q0JzT2RkZz9LKjlfYWFebTZ0eT5EbmNPT1Z8fE4hWlojZiR1REJxREFKX0t6KCJ+RVFAT3VUT0dFRC92R0U8ZV5w''@;'; put 'put ''a3o7aE5lI3t4fENtInhfLDNpbT92P0RFOGVfTHVBdHFVYGpeQlddeHNJeyN6Y2wsOk5XdmlyJmFaciJvbHN4PXQ1RTcoMVkoWjxyfjojcFZhS2V2fE0xeHs2RXJlImBQdCNRPzdAT0BgOjBDLn4rI2w4QWBHSz5Yc3gsejVGNVJIIV8qSE9lOyFKIz5HTjRASkhwYTIhS14oMCVPKVhaOi4vMmxA''@;'; put 'put ''dWxCVEkxcjUjNXQ7PWpMM0RxMEVFRSFoPWNpaz5GXnhBLGQsaF5XNiF7WlQ4TjV3cnhGdV83QDtSMmEqSnMjSUlFWnRVdlh3JENxImBuYHtadj9lZC9MWV0zNlg9ekQzMXhfLzV1YiJvRiVlPmlSUFV9PkJeLz9QMywieio/dkFYeEo8fSo7ND5sLGxeOm02KmZwWm5gQHEsZHFMckc1VFcpIUJl''@;'; put 'put ''ZGVTNEJ0PmZfVnssV1dSJEJiLGN4KXchK0wpcEN0antGY3Y9OmRvZV1PUjJRTzU1JUhMOEdvZlJadSxZZHtMMDF6JX0qO2QyJTc+Zjh+flBye0VDT05DclcxcTpIVkxpKUhya2h5LyEkb0xtLnVpUFM1XyYjfXZmX3lNbE17aSpfXXltPFpQNiE6XWgrWDBaQ008bFRtVTpLZD9lXkg0KiRuNHR3''@;'; put 'put ''d3U8RDQlb3EpIls5fFldbk91fTFrKy9laCRoLDAwbDg+LHRJK356SX58InA8OTt6SFVka31PbjA6U0shQ15XVmNEYWA6YClTRSxdW1s0ZExKWUVPNm92VGdLT00kU2h4JUJVOXB4Tkc0e14lLDVPOzxLNHBROTNaTXR0SzlNIyMqaCkscG4vfSZCQmMvSGZqYDZDOltWMSFVdzhmLE9uU0o7UWdg''@;'; put 'put ''O0shZ0tVT1NffDZoN2dUaVRNQD54ekNBIzliWWleWkY/WTQxcE8lJjVgXmZdZWFlLFNmeXZmKGJ3VGBAI2pmRSZ7IlNXVzl7Ll87Q2djVTdTaVR0byRyNmwzIXRpTCxjYEJdRFRDPEopdzpdZ3U/Nnw9M1Z9eHZNb1tLOWBhRjBMYEo6TXhHcyQoXltXNGooWzZWIWshJkg5LixrKTk0QywzVkZY''@;'; put 'put ''IUcoMm4+Nj9iKmU5OllIcGlAOFc4QTtVYl4mKkM6XWdWMT1nbDVZR3ZTSHhqY1Z8KTtzI2BdXm89T04vTC57RChLeUlJM1c5dVQ0QGthNkB5OGdYSjEqNDpDQDE9PU04b209TVQiQzdvKm55QElZVkVmPW5TMU01JTFfdlouNk1LMGxgTmhheEFROW1icW5xXiY6VlFwYENeNG4/KjpZbzVYXz9N''@;'; put 'put ''XXxrTTA8LF09U2hOVHtTdlJ1VWIxY3JMbk4kR3BBb3VWb011RTBZT0QzSzw5QnB4XUxPWEdvWGsyaGNFOE1VbjhKeDRxO1twWEEoJkkjT3Y3LldEfDNTPnc4OW5UTHFKNiVBQDpgaE5GNUx2eVNncz1yck5IJnAsUShIUUYoeERSYG57Vy9jdSIsTyFDRzcpM0J3Mjw9Ji5vTnhxPTxlZzlbZzAy''@;'; put 'put ''L3pKbTBaTihbT0A/RDAvK2RNWjl4NDgrRW4wbzg8VlteVDY5OkRsdTt1WDUjP2h2dl8wX2JSVS4qQTgpW0o0U2l8aFU4ZlQiTkNKcEZJZyspeTk3NnUvbzJuZSIpVShmS1JuOjE4OT9Wc3U4NVpTc2lBbiFLbitQRFspMmRhKykmfjRMfSleW3RDKHRlSXc7cUlqUTdAK2NZOFA3X0NQN1EsOVgr''@;'; put 'put ''b005TUVkP2hSXnZKN2pMYiMmZD1MOnVQOn0mdG9HNE1YWlIhL0QwRSg+WkBHOUZCa0RSLCMvaWo7W3FMKkRWfEhXIT5JK1VzW3JnWy9JWWM7bnU9JTVxTztlbDd1fXAkdjI0cSRnWDFvWFJufilaTjtjR1FsRT5tSHVhQGdDeFQvU29TdkAuKm4jfWpBMkw9MEpVcWEwQnAlUHI0cHBCSntscTZH''@;'; put 'put ''YGg3ZWhJdW8zNjE7d3tAVkJyKVUhPV9XZUQrbTguLzBOVTdCeyV1M3Q0dUxgRXE+Uj0keHw0bXFldkkiRz5NSWEucTQoW2c3SkhTfUUwajEkJCQlWzReXXRKaV58NWUjUiVbQVBrVGB0cm8sakB6X1coQHwiXVBdKW0mdyhWWVU9TllARD5UXXxCXkp3PzN0SEkhJThLWW10WSNHWVhTKkA6czhI''@;'; put 'put ''Xl9rXV5ETT05N1VIVmY2ZylZOlpXUTBiSFBucjt7SVYhWHFeU2VgfHNQd1EiJnVmeSsrRXByO0U1cTNqMD9ZJXVPPERrXV1mdFU4dlhERH5MMyFEKWwvZzRpKmx0cipnNGpoPHx1OXBdSFB+ZDdOc1gvY1BYLiReZ2ZCdjorOF1qR0sqPypyWVZMXV9TTl5INnFBaTF7e3hWb0JhQEhMdStjT3Zp''@;'; put 'put ''KmQ6UFhHPnVKZDVMeXI1KS43OW5vO3cyTUxRaE5Sc0VgTCxuR1hXT0g1ZGIyOyZ3b118QjxCIStXfXs3T1M1NihQazUkLyo8PTlTeUFgTEdXaz13SjB8Lk12UE9uWiwhUDpxQWAiemEuNnNQcEVWNzNedjEkOGgyMk5KNmZVZmkrbVtHdHN8UD0lPnhHaGxvZV1ZUzw6amdseXtLWTNYZGguaW9M''@;'; put 'put ''a18wSyxYSktFcXc+a2F7N0hscnx+R3t1WFV+TkdoSzdgSlZzImxsIzkmaGpATCR1dWlxNilCNU1pKyxhJDQ4LnpJNEJEME1QdGttP3R9cjA5Zk8qZSpbJj1rSipzLy5GOHpLUF9ZKHA5OCxHTUJBK1BYVi8pSF53QmF3fS4vYjFlflo+fX06LCNbYkQ5bFJjYjtecy5jVEBbM2crdywkN3lUOHtZ''@;'; put 'put ''aFJKKjpAM24yWmtLIXsqWnxleE9pM3htZStbanplb1tFOjpVZ0E5alQufV0kbEpWLkNVdntOQGReaSFRWVtyWiMkKnRTTV5FIkg7UVI0W1BWKHQ5Zy5vVWQjR3RNL285OkFAfENUYFd9Mz5RPG1IZ1h7QEUoTGR5YVlrXT4rT2M0SHw7QjdNVlYpSjZdbCteKV5TIXMyRHNHZEdNK3o/RFcmW2BG''@;'; put 'put ''Rk4yWnFzQXdKYlR3ak5zKXV5cWR5REwpZGtsI25ifjU5dmlmM2V2LE5GczdTcDd8SXA3RlU+SW9LZ2dBZj1fUXUoQStfQVN+OUNvU0FiUHssUlhDK2JbTUJHT1dYaTFvYUcwcWp4SnBZbFpUbkNlPjg7eDtaKixAJjolNUliOiQ/PCZtdEkyfCNGezt4Iy48PnEvIlg2NmdQajZzRCE9Vj5VPEpQ''@;'; put 'put ''QHYqXmxRVUM7ay48cF9tJCRrSC5WX1tkRjgwc2F+cCZPXjsiLjhXUDRyIVMvJlhfN19waWYkLih9K2c+TU9zSFskWSMuejUuRTA9WWFWJFZMQnNEQltdRzk8PT8wZitYWW1WM0xtK3RfZzA/X24kL2s2eU43ZShEZ155WE9XQ1o3TmE7KSMxWGspLjJFSFBfUiFyaGRBfUdZI1gxQVYjcypKMiY9''@;'; put 'put ''NDc+Q049WGZTaWtqKyhNe0diPV5UNlMxWTp7VSxWUDdkbjYyRmxxMCJES3ooQW44emwyM0BARlh7XVRqMEZ6NnhTVCZba0xFOE13diJrTFU0ZlVhOD9fNmJTXTQvdW4vTkNFbGpUeElxOjphU0RmNkF8fEouTCUqdHovRiJieT4xWHsuJE5GcTJkUD0hYSx0dHMqNURoOnUiOE9pIVR3czxxZU0/''@;'; put 'put ''MXd9Sj8vMXZ6RE51alVwI2w8NCNjcnBaJiF5PnxiLmQ3MSU4PWJEeTBLQnVwTCpOZ2Zpfi8wayIqKFdPe2tvcVJCLD92VSxYNVJlPDx8bDQmNktvXjx0e01gKDpTWzxMT0EvOzJCKml4Z3ohYzAodHlQOzJMMmlSYmFCK3hFazwxdElCZ3J5cDJucV9xKWRFRixTU11xMyYyMFRieEpPQD0+SzRt''@;'; put 'put ''PzE/b0hRK1N8W3hkLi41V0FHZihvPTQ6THRgcmNQbHhVUWE7bj5RXShsIlBleyYpImF9Rl5kdVQ1I0JgfChPVFt5Q2d9UUtXbj00REFlLFQiN1toJFh3JjYhPStwZEVGU2J8dGhKa2JqfTZPfDBeQlIke3MqYE43fVNjX3p3SXFIWTw8diYibVtKXU5YdEBrX1AxYSpYISUzQVllOnEraz1hIXhK''@;'; put 'put ''QCRMQT9Mcik6OFI6KEIuXX1rZz5YVHFMVzYqKnBPaE87Tz1mP0E9ejxiUmQ9KiN2P1AuQENwSTpdZColSnhXSTJMbjtNNjAuPD0/XUhxdjIsYC5XK1hYVmpQWjl8WXdaQE9lVnh5eSxOOig7NjRCbko9WFN5PDBqeEc5LjVHd3VyR21JbS9ITikmKUVId1A5Mk1OV01mLnoxTmM0RHNDLldsM2gj''@;'; put 'put ''YCtWIyE0dTE5VixwLjJ9TnZ9bmU/QS83ZjFHOHEpc2x9L3hNZXhMYTAxdGEkeiRfeyglPHx+PUVbPVdEKnI1dFBJYl9AeCVEI1AiVkVZaitBPmh0TWxddD53PW1CeWR0OHgySTJLMWg8U144JkAuSmJ3UEs5NCFOK3x9Ln5aflRJfllMKTR7UT1rKjdlWVhUMCh+anxdNFFzeWAmTXhBK3YpdEUw''@;'; put 'put ''LFRhPmxnfjVHTSN7JGFXOyNHSGEjeyI5UnJzOmN2UTxEQGRyYWk2YmQvc019K35mRiN9cV9xPmYzRjBAeEYqZSp1Lj4+XXF0Ni89NW5sK2csYmZjMUMzSFlKQEQhcD4uT2Vday9VYVJVQEZUPn5rc3JkbW9mQnR5U2BnJXwqL1VPWHhWNFA+SGNITldJaTlNRGNjMD88PXUhaSppNTw6JG9Rcko2''@;'; put 'put ''flFXZDRJK15+TGtNUSZ2a2U8QkU4cUl1U3BdeCVeZSQhJSIzVUsyOz54XiQ1PFA1UGBiRFRUcnUqXiohLnQhVTk1VU5BaFRgcnwkcnlMInEzXzJfRy5LRnpUVTJHP0RiJSFLbE1qZ1gkVHNdWD8ufTNMU0RfTCRJV05FTFFjNmElIV9JMSJnYDhJSkZAfjhCYEY6TUwqXTdCJENqXzhkYyJRNjVC''@;'; put 'put ''TjJlYElqQ1suK31jfSM+P3R7K0siLzpuWjhwJjtJNEU1REkoZkFORiJWWnlme0gsemsqVSVSMlkyMUlOflA/NUU+SD02IjteKmUjUVc7M08xWSVeTDIxYkpFRjB6dXBsVSJEYkVTL2crTF96M3ZMZ2dRYjBCTWg5cU5iaCxHIlRyVWQqXytTUFRPKkE1N2dgeVFYfl1kOlomKGo9JX5TTXM1IUci''@;'; put 'put ''al9IfF9xRzNJJkk8JnJIc3w7S2cqL3Usc2JDQV5aU2tkWVt5byYldEhEWkZ7RCQpaUZmfV82b2gwM1AsXX5rJDIwT3p0QXhqU2treDMyZ140WFRdfUBjd14raThFPUN6IXkrOG1EQy50ZHxWdF5XUzZ4dHs/eC5DaERXVUJOOC47cl9Xa157KFZZbTJWSyhOb1RGM15fZ1syZWZOX2pLMlQ6QDI4''@;'; put 'put ''OEdeP3ZqUTUxeyMsMyxwKGxRXjdpOU5mREB5Mzs4eWM2UyNmQSYhIzEmd3pDTzxIYFptfW1iYD80SXxYQWliXmBaTW5KKjhNLzl8NVhyTWs2MzNnPT04Z0A0QG1lQnVGJWlSeVVPVXQvW0AkSWZiTFBabDJMPVIxelldJH5bY0hGQWFTaEF+N093aE1LW15kd28uI21dQj1aSjZzXUVNWislKXlp''@;'; put 'put ''M35TJHU2QVArOlVRcFkmK1Y4el1DYll2ZXdIbi5nRHRuSTBeVzlTcHw+Rmt4L3NlZSgsYlQ8I1VJbSZhN0hvQDZfdylFJU5nKkBiPjhyM3UsUm1FRDxrRiZlNTV+dSZ2KithVzdeRi50d1RHQDAkYEdIIlphRSZ6KVltLCNFOXVpPGk/KzpISksySWx9ZmdXJTdAPFlAJmlwMWhgSDBNR0Nde0I+''@;'; put 'put ''XTRKWztRd3o0L04pYDN1Sz5yTyVVMGNHIzpjZDdjPXEwPEopNTY9bFszcGpdZTtCVF5lcy46N1U/eDNZJXBYKFFaYmk2Tj4ze3QiSlQyP0R+VU5IZnx2fD0jVmAjal4uVShkMzZSQW4yR2kxN2B0ZGcoNlZlTStAcXM3eHglcUt9OUdoVjMscjBRamR4XmNaKDR+VXtjaTk+TFNxLy5rcSVfeG01''@;'; put 'put ''c2pOT0RJVTNvYGxqd11RVEA7b304KlZsWV4oSl9mPD4uJH1JMDxgZHFuL3hAeEpDSVc/WkpiLld0ISN1YG5CRXQ/fnFkL2F0Rnk2fn5CXlcwTlJjfUZfcEFTRmc/MWJUentANCR2JE01OzksI0Q3UWRjLyR7YyRhfUNTb0o0Tj9AOEB+ZDZLPyRIOXVlPSIvPFBzdUEvTF9OPiVgLHIxbHVTaiJp''@;'; put 'put ''a0xAKkJrPlE8aGIrJUBrRWg5MG1EYmIyPT5YLF8zRnByY1VQRGN2IVZgVHpydXhUdXVMIV9pTEFhdH0mblRsSSkyNG9Nems3bXQ4JVdaSCUwYkVLbEhze2gmYS8uSyJvVjgwR2xsO1pjeUBtTX12KHUyLCYoPU5LdiZYW1N1YSNELnouXmdrXWNJU0t+NksrfUtvaDVFZUFhWDw0TH1oRihLPj4v''@;'; put 'put ''WmtAcXNEO2VNZlJ5U2JmZVRJbiFWbCxwT0hNN2grM2giVzBCa2wzJWpSUlhbZUdPb0VwZihCXkd5KGh6eD0xW08ybER9YT1sTjZmQzVzJFhvSEowPHM4RHkrdFhMc0UqS2VgNkwoR3RjY1Z5W1NCcD5sSUl6YHA5WltSenRlfklzV0dEcihvRmtEai9CQzZ6KHhRanZjcS8kOGkhLEZVZz9Caiws''@;'; put 'put ''RnUraWg/U0hBQlluQyJtdWFRQlNffVkheTlhJU1hWzJaR0VTOUBhPVZDeFhXSWgxP2UufnolUUwmcC4sJDE9S1k6P1RAazRbbmhpMFdXO2BJX1YkbCFsdVt4VDosdjBwZylOWzRUVSRXLzo1KEJPQ3RfRS56ai4uK3hIOjJdd3FqZ3tVWTR8WzVwfSFgRih8PU44X0ZgQ1VuRm1HaHhzeTRGbWR2''@;'; put 'put ''PD92UFZzSklLMWU9a1okdl95fmRwXXZOQ2Z6bkpwNSEqWG9NV30ycUEoOVt9OCpQdkY8b2cjMTw7NXQlcUIwUzo3TVFfe31GUHpzQ0whbyUoY3RMaXEodmQjK0xKK0h6VkFfJFVsNyk/OjRFUTl4SzF1e1VSR1tVajl9SWRiUSpaPFNiejFiXiokKWwlfHdafXtfRWxidyJ1RWh6QjskUVZuIkN3''@;'; put 'put ''IkhKMGlmTEJSclhiemQvLE1LYDA9UXRgTlAzeFFLdWk6SGVmNkx4PGkpcjlSIUtaPTRuIyxvdGNHS3k7fHQwXXloS3d3dUlPUUQ2aikyPWNhazhjQ0I7L0I1OXhnKTFzfWt2dXdJLFt8Wn1fRE8rWi5mUS8hMjtYOzZOVSh1WGlHMkFkbm1KZ3peLkI3VXlRZ0EkTjdpcz06TnlFRVdKdllxJEVJ''@;'; put 'put ''RUUoUkZYXWAhViQ/In05LiFDb2VBRE83UDsjP0lDfE53bkYmSnUpUDR3M3g9OHohY0lkRjBnI3BqbT9acH5tS0gmRz4uazpXNUVlUT8xSChodER4OCI3blhEKCsvRHdkbntuVXFSUi4mWGU0WHlXYGRzZ19fWl8ua3FLKWxNWz5sajRIezhdfH0+Nz9zJU9uNEM3dzsxSDphUVVVaVpTPGMmTDZP''@;'; put 'put ''ZV1jWFF9ZXNbeVcvSkxKT2c7WWBaTmZqNmM9PzQjLDl2am5KSE1tWFRdbz9Way5LWThxMDdGOTUyJntgW3FRVnQpckY5cT5NekpRRHEscWVbZXpRRHtPW3hye0Vmekw6ZFomO15jaUlDPUNPRExRb1hUMnx2dyFYbThMeSRfK3U0ZEIoJEwqIU5ldEtLTjR2Q0lAP0p2OXFSQGVaXyMyTDdrfW0s''@;'; put 'put ''e0d9Mzs8NnM2dHw5allANytwQnlBLEp4MFBgUXt5bjg1P3tpOCRaOGNWRyZNRmg1WmtQOWxMbjA/KEVERjN3NiYwfGQ7a05GL2NNKiZTN1RwUVBgMEZ4fj5ZRnd7MktZLyRPPGYzITRqUkduK2Q4Jj0lTnRZaDZsKXwqcWheLkJYRz5yQGVXMiMoP2dOaEwpPD8qQileZTJuPzZ0RnJHTVJ0aDxo''@;'; put 'put ''MHxGNWBMdykzZVlKXlglNERtPlcqKFV6aiM9MHp2MEEzVDlNJHBhNGxXUF1IZSxTamo4SnNCQjpaOiUzRD1AVU1gdThzMjFyLCI8Sz5Ad0whPVs0RU1Gc01RSVQvOzFBcjFEZzZWb1hnZHQ1Rk5uY2ouejgqQ0BsP09BbS9hOEIhLjxbbnZEKCs3cX5gZHRGX1Y2Tl1Paz5zb2E6XmY+SyFTSyNf''@;'; put 'put ''ZFsyfHh7WVlvSm4xKnRxZTB1aGROOnVTM0k+cUM2Sk9QfVZeR2doUGxOSWU7M09bSVE8WldyMC8hbjU1aUA+YDA+SWdxJiUlLEx7PjEydTJ4MiZTZishaSY7Tmd6cmtzISEuNnV7LkQ3MTlVVS9YJFckLkUvcXZROiNBWT9xM3YyLGVOcVl1QmwxRF1qNXhZYVsiOlIkQ1ElPDV9WCpCWTBpMWkw''@;'; put 'put ''VUFKUFhiQEFJKEhbbDhndlhCTGxKe2pYbEg6YyNmZHx5X0pJXzlXZGszUSM0LEBjTDMjKTQzZzw5VUUoTDVPJDopQS9rKWovJExxOEl9eHQjZWRtfTVxJmpAI0tPWS5IaE1EUC9gPn1fK1o7dF16JiRPPD5XQ1EieH1hSE9LJSxlOEJxdWUuVVg0PilQPmZ7ayZPU1dRVDJHcTlWfHhiWTshUGpE''@;'; put 'put ''OjJmUStmdTtaUXUoOiolbmd1U2N0Wnp0TilGSF8qWDZQSk1mZUY6Li4vbmo3L0FRZyZpNTMwT0J9eHxtUG19cUd9M3JKOnw4aCRbR0YjdU0sISJLOlFmYWRpKyVWWT97UXE2UHZKen5CbT9uRWE0WTVEYk8pXXI9dnhlI2IpPlpCZFJCaVVCe0AsaXB3ZSwyZEhMZjtFN1l4PD9Dd3l1dHg0Xi9T''@;'; put 'put ''Yjc6MzZEfmBmP1E0c1hTIlpDTXgmcSE7UiNsfTgoXTA7eG1nZDZxaHBMI2k6JkYmJHN5MzdUSn5sKC5lN2U7T0M3Lzw6Izx6b3wkbWl2JWc2blFgSl0hQEpYX358cVltIz9DcTt2PHZsZ14+V2I9UCxVbXV0L2QwfGlmdGtbb2MqUkVDMns2SXJVS3ckZygoSGFfWUlxXjE7cil0VFQ9KURgK29x''@;'; put 'put ''WWF4Vjcua197XmtbKjNhd3I8aU5ZcGJWbkNDbWtAX0t4VjVJNz5jUkFtLl9DeiJsOiVORSI/OTpSQjx7ejF0eCpOY3dFVD5dZnMyTS9eUTM+bllZOS9fQ1s8Uk83VD5+dCksYm9AIyp4NyhiSTA3MSVYJGd6Q3RAIWlWSTQyJEdZMmJVc09RNTooWXgxT2NkZj5rVl53KFI6bnQqWlEsUzdea1NG''@;'; put 'put ''USljI359YSpifHldLGRwRlZ0Snk5M0I1JVA9I2JxRXJCSDBycCFQNGRFVUs9Izd0Z3Y4JSFxQChvaT9lOk5wTTB7e2JCLyhvT1haIVI/OCNuRmQyVVArek97UjtsRl13bn59YmwuRVdIMGx6ZzgsdjlZX1tLVzxDdGhJPExIdTNENE5HYUFvJmtAL1dxOlt+c2BjOSk9cUVlOk5dXTwiaFhHbUUr''@;'; put 'put ''JEU0T2NlcDM+dWdoVDxFciJ7LmJEVlEoOWpnYDs9Q0YhcDFXVkMla0pHWEVBIjFiImhwaG4hamlyZFlgTTc5eio7UUdBPm1KZlBZI1k+KEBwbjQoWDVTIUwid14xOl5BalcvO3ovWUlJSmQ/O1IjNX5XeW19Xm44aVgoWl0sbEVtMXl9OVZWUn1HbW56T0glPGYrempDL0RhT0hZOFhEJmMzNTkk''@;'; put 'put ''LmA4YUxoT2w0X0JiKzUzUnF2Q0JVdkRTR2Jpaj49TWtBckY6ZD9YQ045ZWhWPEZ7PiVMMiVncGZXd319Sm80KTNwMjxWTGw/eVBma2omUTtAfD5paWkkYmF0bGlCMzVzUStjQUpGPW8uU2VvOjB9ZTwhIzs8ZzBsUyl4JWJndjh0RSJZSXBLQSk1KmVVbGI1Z29ZfWpQNFFbOUd7VWYweVI+akVV''@;'; put 'put ''YyQ+Qigjbj1uVHBZTCVSUiI7K1R7UklUS2p9aklgU0QxPz9ieC4vOkN+QTdZWFhzUnd0UDFWUXQpPzUrIzMidikkRypxNiV3K20qN0pfTV94VXQjOjJEO0E2aC5aU1tZaVAvSypwJClqKFIobFZfLzJlTHg/KzxTNTs+LFdjelN8UnFCTip2P0laclAmfSlEZEUjOV1tP3x5JXZVTiRtT1R7OUJ2''@;'; put 'put ''KG1OS09sOkpoQzF9UU51aWBHUnpdaHdLRl1TL1t2ZU9BNUQvO0ppfDpNPXZTQ1JtXytQQFskPikwbGNtfjw7WVomJHQmfVtUNiI9WkgyOmQ4XzsjajZMSWtFZ0dpbGs2Y1s3XVVZfmN+JCNSTnAsYS58dEZ0WlZLK2x8KTAjU1prVTRjVFM8eVImRUFydEZ0clcjNjhBWnc8NkNLRXhGKColJEZA''@;'; put 'put ''TjUrPExnY0NqZiRgMmsjL2NrQXBEU2V5T3NeKnUjZXVkX3J0XW9aJWs/JGleak00XXBUc2MoIzMuclRKOmxHI10oLEdidHgkST1XLCJ9TFV7ezA/a2U+XlZxTSJAcT0ldylAIyVXV21aMy5sTFY9bjVYfDhfMUdlZ0JFYGo+Q2NQTlhxMUducEUiLHI7YWNSQWg5KGJ0a2dtb0w/VCZwK21JSjcw''@;'; put 'put ''SFFeL2BZViVmZVUheUw+JnApUi90ZStrP091ISNdPX4oZnlIZXFzRjFZMjdDUClhWzE5USh3RGAzYEQiSXJZTSxhMFdrLzhNe09GJVAoUT1LKX1CdnVXJExSKSNnZDV4eFJYM1QqLGVeZFFVO3hLTHhrQi5YdT5URS9RfnwqVzdVJV8lPkJiTHx8JEJFajghYDtxXytZKHo+a3pNXSMjKmJnXUlU''@;'; put 'put ''NHdiLypJLD1OSTxAZ0llVTNOOy9gUmJULytqekEqJC92X2E1ak9yUVZUOEM7fWd9e29fMk1VO2B9OF1ObFhjIit9PD1pO2NXRXZyLEVDZzg4KmVwdkxuQzBre1Y6JWovNXxJaS5EeVZHJGBnaStBSF9yVytFczdgP103NVdHfmshazArXkM1TXR4Nng3NVFwdSZDIShbNSp0L3c9ajVfJi8yRGNl''@;'; put 'put ''QGhdJlYvVUcuInpiPzVpMFFEImAoYXZgYjlbcnVnd29KfmNJcj1PZj9lYGxVNXt3OG0sels8OzBOcH59OVA7b0N9VSJ2fGpoVWl7YDdrdHBxZ3R2Mmd2XyF2amI+N3FlekZ+TXVqfC5HJTd7YkJFPW4qbHx1JSVnd3Jxb0suWiNqe2BVbnZRMTgiOFssaXVQT285W3w+WEdGIS4uVXQjMTxicDlk''@;'; put 'put ''RCpiRFhqZm17V1J0d2libiIqQFM2VCRDJF9zaitCK19kQyYwb2c8b3tNMHFOQn0zOXA4MTRndDppYzt9OF5kdW1BRzBaTVJVNyR7PFU4cl9PPltxTHd6d2A2LjUmNjNYJTcvK0syb1lvPn4yMVFdcDBLQj0rek1uRTp1TjZ5L2whbHkofV1OdWNHJn5yV2AlUGdEXkYkNVlORj8yVUVkUj9dNEhR''@;'; put 'put ''PVYmV0BgN19MSCVGMzd1I2RZaztAQFUoMSU3RFkpdzUqaT1KQDQxMUJ0TXtuIkg5PSEjJlE0NTQ8cStmL2IhdG5tWm8pQCxRTnEwJktRfUAyS3EmdmlKV25weiV4SjIrOlF9ZD9dZH19IWUzLDAmKlA4fnssOT9qUVF3PVhWR3QsWHAiLnJaQEFHcmY2X2pRRjFWSWV8QiEvYWZlXjZFOD9qbmhd''@;'; put 'put ''X3p+KS8xQWYmJC4jYCZ9YSlATnJhUU4jRTtTXmNwdVJoRFd6RDJHXyVfTDVQbFV3ZFdzNlp0VVd4dHhRa2pxX0YjcFNHV0lFXjxnYEZ6S3NYa3wsK3U3eyxDKm1ZOn1ROitsfHxNYXA6WCl2YFlvMm1bTiwoXkJoJnErdnt3WntKJUlyRFtHbnJ1WS5IZjlnZEMldWdJVHdaXnFdXXBqRHEvPn0h''@;'; put 'put ''LlMlWClfLnBmKCMuMnFdR2k1LyNoMnwyJDhhdVQ2VXw1d0pDU2Vfd01wM2pPd3ZaLzRYRU4/aV5kPEQ1PytsOXRSMFpVTGB9dWpZKWBGbSRRYzFBaX4mUT5bS1JqaDFQOC40OH1rTy5nZCl0bH1yRXpqaGkxTWFBZl9LUUkwKzgwKm42XStsZks3WG48MGhmX1Y6Q15pdHUwTnEpfltQKHV5PGo/''@;'; put 'put ''JU9pcGZARWk8dVFhb34rQGIzbls4OUVtIj1rbm0uNXw0S34qZz1kPlowYVgxKWtzYSg5JE5AWjMlbTpJRnBGQlsjbk96WkUuVSguLl4pInJjdktwQiVhTW58W3skNXxXJC57Rjp2Xj9zS34+MDMhVHpjVnxsTHkhTntFJF40WyFsejRsXltRblssMUFIe3V6JktdQzttOF1iPVA8YTFTdnpCejol''@;'; put 'put ''U283LjdTTypBclB1OnFhbDBJMlsmV1ZpMVc8NGhNXWhIfU1SaHVlI31ZQnNvM35OZ15ybCFVeT5xO2dlWiZ0NnlTRjhSVkshJClhfFRSXi9FPTMjQCszUFdeWWUrfkJEeFY1NmdmVENsdTohSUFMQH16bmluej03WDVmUiJLTyxlTThzNz9iJSJLJk9SaFBoWW1MQS5KOiR9QSJnKFIjYFZPKTBb''@;'; put 'put ''YWpTJCRVIjw0VGFod2hSZVZKeWlMVGFwaHFEQiR0bkhLZWZ5KlQ2X0NwbDFjbXt7a3xMdCQpe0hfZDtOI0hCTjZbMi56YkR5ZEhVT0RJc1B5KEUxdSpgfCh5b3h4Ki52cFlLXVRkQl0ia2BSM0EhcntNdnx7Ml9Bd19VRShpWV0lemckY2pncWo/InhtWkQ2PD5GMEBIKD9aNHc0dk5eKVZEdTNF''@;'; put 'put ''ZVZnMUM/amQxMEpMN0t2OHJIPH5obFp3dTQzUCFjYUl3QW1hTCJNPG9HT0M1TWJvb3xocjFjbytMcSxEQ2dFeUdER0ExWCl2Y3QlW2JWWVhaRUM9Yy5UMHswJixHIzZUO1VdIV0lYig6ZFBVRlNwMFI3MEskZ2NncXJqLmsieUIqLFNHIywqSWxATVZOSUlJfXVKZ1NEV3p7fCtRaWA0SUFmcVhM''@;'; put 'put ''VzdNKWxVbnV9a34wfE9eUXA3SW1vMlQ0Z2FrUThpPXdkIzxNSWYzdFYzbmwzMm5KL1R4amZUVixpenN1QldgKV9lNCEuKnpYYWRzaGtteTlXWEFdc3RyOFVpYlpvazt4N2VoXm5jK0I+Oz8/MUwjS2dCUCZubmFgeTpObzQuJiFAdCQmZ15mVGM+Ki5FTmpEZF45X0lqYUZEWHNXYXp9K2gjMyo4''@;'; put 'put ''NUAvdy9ndXhCKGt8SXZpWWE4WUIoTHlFSUxiKS4wLFlHSTJzPjJTdXtwcjB5Zn1wPWh6SCxUW2FTIXVuRkh4PX5sWkk0JHdnZyJrNVspOV5qKkojT0dHJD9Vbzd6cWx7I2FvJFE3Yj0pb0ppPnIoZ1RBUU00X3UuZDpbdTt8K1spVHtEWypvPFZSMWF9KVlCTGZzZG1CLn1xaWRvXzdjPldHJG12''@;'; put 'put ''IkIiTjAsVT18UmpXZX1IZFN1VlFQNGEveWRvbU9iU1dzfT0vcTt+X0h8TjBCYE8yZEohZWFmN0hsaEJ1WVVLeSNEL3xzW2VPZUxwbmBdeDY5QHQ2MHg5TGBZfkRrQSo6X2tZUn1uPmN7ZGBSS3N6VlJ+KUVnWTw+SmhjbndsdzxRRFdMLnlOKnZHNWhWQixQP1heRldwKk8xUGRxa1g0KHNlLiR0''@;'; put 'put ''OXc7OUVhTlFTOHZOSHFbaDVUYVl2Uk9qXz9NNGFSJGNMW0dHY25lQVVUWWEifX43eX04NSxmU3F4M1BacygkdltFdTZPRzExKnN4bHBBS1VjXTZyeV1pKFEyRmtfL1UhI35+bS9SdnNmWzxIN3AsfEZhZnNPMEpYLFZ7UGcvRE5LLyV8a2kiJixJIiIvLENDImI0ektBdHx+TF42OiJ4MmhmfWJO''@;'; put 'put ''JUA2enNgTkVtSW8ze3cjXyVJIVEoN3Y2W21KezQrdStEeGJXLEJbfXFUYXU/KDdZekJZc2EqLnQ2Q0A/S0c7QFJUTW07fEUmWk45P2QjOmBCckdQfTZdLnZFJm5Oc34zUjB3NHl4RE93dGVJczdxbFF6Lz5VeGpYUTBBQlVMPEQ+L3NKLlBaZFVIUCo0PyYzNlJ5cFZ6WTpFRV8sciMmP0NrRzEs''@;'; put 'put ''aClXU2Upcno1RjlfS1Q5b3JYa3A9Lm4zJmhKdDpGJC8jRT5ocVtQZkJySF4zT0ZYU3V4NUJteEBnRSJ8TVtnOihgQy9WOlBqdFRENigkUSkwflA0a0AiU0x9MSwrUVR2c1JOVi4kfWUjZE9wezY1K0JPTys9TnQ7M30pdCo5UH5ZTHxBRXozW2FdZWQqQVVhLjIhL2BNcUI0TDc3QiV7a10xKTcv''@;'; put 'put ''b0AjOlEoPldkTCVWLkgjNiM/UUArU1NWPWZaZkJ9fn0kVTZSKSI8eGtAfXF6OS92K3NALksqUlU9TDlKRzFTP1FKelJKRDc1bmt6Rm11TiQkJWVdZV1xeSlBK1dvbi57XVR8aF5kPkxHa09LJEswL0RRQT9GZn1PQWRyMTBAPzx4bWtxST9MTzFrfVFlQyojYE5xZHhyPSl8XlhGa0VxOldWYlc9''@;'; put 'put ''KiEsLjxSMDxqYnVJeFpxUn5GK1dlUSpTbzNnP0J+OnpJc1NUaVBKY0Z0U0B5TzUuNCFAWU4+NWE7RUtsbkZ3VnxwUHZ6MT1KPlsrSnNkfGpVeHV8SnBAK3VnT1Vadl9aNEFKMTw8LGBacmhSU2gmcSVhImVaYDJwJjg1MDEsbGZeaUN5dWo+emJ1I0h8bFk1MyQyN0w+aXJPS05bVGhOX0lySkRj''@;'; put 'put ''X2NVSEVRJltJfDU+I1Q/T2BdLGZRdChhclNQRkJoZk04Mnk1UmcvL1I9LDpOZVNzQ1VFIkVZPVpSeCVIX0lMTG8jIWpXY3Q7SmAiWTtzTCtNI1cvSVJBSytJOmtqU3pjREx2cU1rRiwmK2kheCRlPkRsQ21kezFiVFp7XV1AK0I2SSVxck56Vyk6KHVdVXY4YThMcTNod24uIUFsOFhlOlksbjxg''@;'; put 'put ''UFR2K3deeiErVzxdQ11INzZLN3oqOFhuYCI1cmwld2xVfWdrRkNsXS54ZiNIJkZ6Wkt0JnMsaXV6PW0hOzdzJmAoYiNRKGsoUWJmQzs5IyYpQl0hZW80ZnpMcj08Y3BhWiJQJC9HRXp4aXV3LmFfUi9zWHFRc1kkWEM6YDNeWls+OW8sZyozejxUNE17Vmk2X08mMXYhU0U6NHZ6dGppYEtAWllE''@;'; put 'put ''RTlMKUZPOiEqfH1CZlIpRXB7UGEpe2h0UFVzZ3w2ZT81Pz9QWS9lRi4uUl0kOnVXQT9UTXMzYzowVi5Xe0dPaVAqeTJ2bjF0WWZQV2hPTktNJTFdYG87OlZUQ0pud1JWdzxLUlgrdXAvRmdEfjM/T2g2eFIzb3UweSx6SFVyTXwyZyJrL0cmS0RjTEZpdWxBJEIze2FtYFViS11HITRlSmpEKk83''@;'; put 'put ''QzMkMSZ3JjIvcWspZ0kobkdPVCt1TWx3TlFrVEJuLHxoNnpjZ2hAKmgqZXMoNkF7VF9fMXlmaTVPXm47MjdnfGoqSzZZVyw8PDFWMzN6VFRoZk1FTCsxQ31+cCFgd3t6Y1ZsXVRIIT1fT1slNkxRVGhoTDRRckRvKVJySEczdTwjKVcqXnxqVmNHRXB8PFEidk5DSjJ2SSE0a04zfGVFNyJkZ3p4''@;'; put 'put ''R2kmeUYzOFUzSCYvIyRdV1lJTSJvVllCaCR+UWpGaU9fIT8zVFNEW3pKaVg1JU9PMGxscW04UypLMVh3aiUsRWA4IkBpbk0/bDBUXSwpMVFGdE9sOVU9QCFjP3JubHdYIj5uTzpudCojLFlgL0Vsdjl8eFVxdShmSzdSPWBwO1Z5dk1OOHs0cV45RDNyXk0rZyhiakpneCI1bGc9QF1YR1BtbTUi''@;'; put 'put ''WUIjeFBlaDlzdUlJSl8wW3lNYCNrTihAN3k6eXohR2x2Xn1CNEdwRCk4RChfUCJMZFRPODNzJjZUQjIlQWVGN1tkWVJDO2pubHJQQTF5UC4rYlpvRSJAY242SUtqayFGd0FYeFpndmVZKkUoKCZ0XnNVLzZPXyQhcUwzTG8kZk8uaGlyKnEkPFVmRChjNURLQG9lMlFZND1gV1pJKGxiW1Jpaysp''@;'; put 'put ''cUZTOnRWLFhNQCthcnZOYHxmRllkXzhjcFR2RFMyanphYm8vQ1FCR1txZUs8Z2ZpaiM/W3gpM056NkkqUGhod0dRdXY0UkYoPXZ9XXtvNyVlV2NDP0Ila11NeTNwTmJtdVA1Ym0zd1s+OW5WS2kqfTgheUI0Mzw+SFFAKH5tfmF6U2xeQn12Y3klMktVJHtCVDpgeS53NmptQHM8SD1yTmlwdUZg''@;'; put 'put ''IUlzMFtqRCYuNkhmUT5zfkw/bCg9ZkFQY08xfTdSS0FJOT5FVDdmdmxTYVVncFZpZElrTExkV2grJVpPS3xSZ2E7az0+eXttUUcmNEp5R0hbbFN4OGRTIUspZio3Xn52eGZzYUYySGNgdnk6MTBHSmBSeHJ2Vzc2fDB9RkRibXdjPUpvMzleMWU4OHtfOldbcys2MSQ3YGslODBjaFZlO1I8dCo2''@;'; put 'put ''Z0JNUD1KfjA6RSExbkhnaTplOT1TfEt3fSw2fDFfNzQ6VDIuQVhhciVRcXA4ZVdbeD1sTX0ySHM/cnVKJGEsMDZjI0JhZnQ6WDdDNnhFKE0pNEdTfFFYe0dSMWp9e3o0YXJ9dzZIQ2hxUENCPFg2Y09NXyFYTTdJUWUuSSNHIUNYa3BxRi42O2AmfDVZTk9fVkU+Y25oOSg6aUBrL3xQUkssYnpW''@;'; put 'put ''eyxJJk1hZyxZNGhbYE1FLjxOZU0lTEZIJWtmeytlUHpsZzgmcmsxfklhWGJyMUZLcE02bzc6OFdmKWcyMCtEdmBWMTlYa05eNG18dDtDYSNBdTJwbUJXTnw0JDRjInJldWZWJUp7SUZ5LHtZVl5CPE12Y2ZsZVpKVHZHTS53RFA3Oj5CMTd5NSZLTlJOPl43P3ckfUpYOUI4Z0c1OTxZVWxNUGZR''@;'; put 'put ''UHRvIkklPTw9OzRTakxvd35jW2k8aDZnYSVRRl86QXddbkdCXntnJmJAWzBXe3cySShpVis4b0ZfUFtoPW8jVW4oVEpHLGxlIk5sPmpMcUdgVyxrdTBlb0csaVZjWyVKbTwxSGRYZ0Z4aUF0WyNUM10reUlkYV5ib0tDSmJMYipVSl45ey9hUX04VV8vN1BtY1VjK1M0b08hUnRTbldVfFc2T1lr''@;'; put 'put ''LEtjaWY0c19rWlJdeklnLGI5OVpzMm5UUyh6enB7Zk5NIUJDOyJ8YDE5d0VQcFlLTUZ9RWNuPzpgZkJaQGptPUZiKmcpeTN9KXs9d1c1TXJmUERMZCtjYEd4aXk7b08ia2pgczZlaD5OWTFvSUJTdDYpVytSIV9TfW50dGhUNEZ9fHNoLy5kdno2Y3MyV201VG51PDM5TXVeenVgfDd8UE5bP358''@;'; put 'put ''VFhNYzEpKWMlNEZqSXMrP1szMmpwRkVFMXE8Q3M2RnREZTlrQ2BNfEJ+cCVuaWY4MHZeSTwzbnNnNl9SQGNOVy9ZJFM3cktWe3MoLzJCPU9+QCRCSzMvTW5nfHpSaTY9XmlWfTxvYT9sPSMleFJpTF8vcXloMGpWdE0zYEQjJCZSJmMkWjJ0UWhhT0VXX2pZdXRYfEtqTiZ5Z01tIXc+IUhDPilF''@;'; put 'put ''LEZJZTw2KGJ7X1hpdndaPT9reVc7ejhONE86bTR7YXBbSTdoX1h1Ny5PUzRAOGllOFMuXiw/NisySF1EOUcidWdQSDNTalQ3KXFtPGg+Z1M+MHQoSUpYNDRJRTZiWTQlR15gMX5EMDg7Py4sUUEmeXFmRTEzW2huJmhicGl8R3A6SytGSCslblZkYmxYT2ppYTxyRzYmcjglTnlBWjFqOFI+KUl9''@;'; put 'put ''JGB+OW5vNCEzTWBvWzVDfVc0bCRsXXo2NWs/aj97OSRsI3d7ZHVMKE1COHAiVjJwZVptKXRFI0ZCMms3ZUp3MXs/e3RPeG9YcktYPltxKXE2Kj1qVmIiWEB6Ji9jSXcrOnc9K2dfJUcqXWRzLDBKYy95RiUpOjNmNXE/fUxWb243UFd0a2hDU2lIYFVPelQ/clB2QWl4R0lzYjxYamRxOGolU3g6''@;'; put 'put ''fDF3K1B3PXx3TE8kLHJHISEkZGtEZm0rIVRleVsuJF5IPXR2YSFXdGU5NHYkXT5WZzlvKEZfKiI/R05Ge2BILjNfVHJScXJxTmtxZVRZW2g9MXNLWXB3MD85TX1UZEVQT2J9O2smIVhOekkpW3YpPXwpXm4wYHJlJjEmQjw2Q1I0MkJaaUF2N2Bke3JNJn1wdnIkLldoZktWaWRMOXxxUFlqWHZS''@;'; put 'put ''U2xUbitWTz1saUoqKWw1RGZ1LFI9bFh8cjksX15OQEZ3TUNjVjxeL2NyX1dSKyJIeG9IYyZNbypVOSp3OVBdUShYaEUjez08fm1oeitOZCRzUX1AKkJaVT1WdE5bcXlnMGZIIXZFPVMpWUMqeVp1WGpSRV51R1EuaG4xbmVQbjI7JkMyUD1YU2BpeXs6P0R8Kit+QShOMEU1cWdjW19mO0Qze08v''@;'; put 'put ''aD15N1p2RUQiNXY9PzQ7SGhlbCpXUWlOdClhbVZYSUZWZ09zLkhOZyE4WlczTXRMczd8ITEqQVM6PEksfEwqMX5TS2dIZk1Zc3UmcXRQKXZFXnlkaD48JChNamttQ3ZlJjRtYH0sdDE3Unh8dl81d0k+VW1fS2lHJj12MDNZLG1WO2diOFBxU1thSSZKfnAvXzpgbk9tSSpuN0EoOk9gKm4wbyxa''@;'; put 'put ''VWApVCtZJUJmI15iY1V7QTZELC9TWE4jZzwzUSxWentBJSFJRG42aDJ7MmlCPmRGNFg8WUd8RFV3TE9hT1hBVCxiSEN0cVZgaUptdHs9QWlpJE9xTzNaeF1mWnBFbztZJEgxTkMhLCR5VTBvUUteJF9FQ141JkdqOStzVTUjYTFdP0VEVkNuSnppL0orST1AN0RUTDVgSzA2ZXZJNm5LPWJJYlJx''@;'; put 'put ''S19kb3d9YWQlX2k2PE1DbFdqdW91d1UkV3FdWixJPTxKfjhie2tfcD1oa1o1Tng1OUZVeWoicz1uX1NBeEBUJWF3VS9rQ3VjTXRzbVRIWzFGUXpNfSp7QFldVj1KL1AxTSYmPXpkIVRGcFVnayFUdWkrOylsM0JBU2RwMyV5azAzUmNMOVpdNStoTkQ8bHxTSXpaPT1EIjg1KyhVUGNYSXV3d25D''@;'; put 'put ''MW9ZKGFCWnw3YF5YWDBuMnIwYUNKdFpzUzhwLl5+T1F4KH06czxXIjF3ZFo9fGhrTHRxLnklbk9dRkJATmJfa1RWJiR6NWBCdiVnbmVENDJHYWxvST8mIWRzXX4yWHNubkxWclkjcT9qLlRDTmchPDp0OF8/I3BeQ2w2bE1CZ30zRHNnUncoQCN8NGdDfDFrYD12ODIuS19XaWJfO1Z5X1lTKmpl''@;'; put 'put ''ZjozUDJMK1VyT2xZbX5NOXh0WTBeQkNlYlRhclQzMFFhOi9uMD9wZkNzWXZvdlRDUltkLzY5VW4pVSsuXlssYV8/TzI6MTNSQUpbQDkyTXMwLHskX18uS0hwIUc0S199aEd7U2dsI0ZtQ2o6RFpmPjhNTmZfOXBSbkFRP2lOfV50WjA2S3o5NX5MZUMoakU4LipidW5uKU4qOHFJOnx5TlhTdUBm''@;'; put 'put ''SmZsczM+Y2pKND5Wb0JaUXt7b2UwZkFQNnM4Mi5PMUR2UzdMI0xPVjsudzBASjhMcjwsLl4rPGUxXiFQT3FhPEE1YGpKcHEzZ2JbWlJHeEpILzdDe246TXZ3NU5uKXMobEVYQ1l8Nmd6Uz9OLE1aZXluYWZyaFRrLD9WOmBaQC4wQFtvdTx0Lk0xK2FLdX43PjZoYU42NiVaZTpOZk42fGc+fTl1''@;'; put 'put ''QE5kMUU1SVtRV0d3VHhia2o6YEhtd007OD96ckcsfix2KGZsWjsoPV1sSmQsUD9hTEJ7NFUvO3cvOy9dcnAiclZgQEJ4NDYzYzdQKjtbKVFQT08hW1FGT2NLPFdJeys3JXdQUDd2by9PancoWix2VmxRRV0oPFIkJnJyKDs8YEYqX2ZpdkM4S0k+VCFzMXZIdl9yJGxvRVJBXVVyb0cpOjEocUgy''@;'; put 'put ''ejJOcT1eYVsscDRWaHJdMSMlRDZCPzZGInFfeU03MHs8UEAueHAvOV5PX0M/W2JvSGxLdGZ7ZkxKZClmdn5uQEcoe3NpQ0dMRVZEQSJwNm43RCsyN2k7RHxjKD9tMTk9fkAkbyZlfjZgOTVdRU4jTzRiPnJZdiJgUVZadCFRYHZ6ZWVNTU9NIXBmQHE2KChKcUtGRTQrLGF2bnh0YV0mTEB2QSpM''@;'; put 'put ''cyY5M1coRC55bXp3YTM7e3hvRkhCV0hiYCo1aV9NW0Z4XlV8a0xESDwrKilCfX52RzJWdjhKIztEJkppSCNOPFQuZi82Zmg/YDpUZCo6LjQzJjVleTM0OEV4dUVxaF1mMVJRSE00N0V6bjE6UXJVbDMyYHokQUcmWGpMYyUjemxmbUAoTDxNYDRwTWAzYEQxZTxgb19mWyM9YT1CSEQkSVZgUy8v''@;'; put 'put ''ZGUuQl47LypANjdybkAvQVdIS19ROFRDYkVrdm1tbDNGMlEmVHFvVilTKlF2JCllMDgwUyM+O2RFeSJneERtZ2JhfHhtNzc/L1pTK0ZdfCE3RCRzYFt9UHdzb2FhT3QhQUVFSkddN3M4UmxYcDg7NV5teU8zLlQ+dzwkfTYhRlkxQyRMJDMvdz1QdmswOGJrLG93WixHbFpwdHw3dzJPPCp1WSw+''@;'; put 'put ''fUZfciYkZktUMClqTFthbzBWRVtWMUc0TH1gTU12bFd8M3REZE5IQTV8a3FLKE0zU2lCfkYuTDx6NDtPOmJROXZ5Ty9ibSklbEQhL3oxbnBIcyNgZEw/dilZcVt+RVZYOlIrMjV2LmBNXTB5Mnk4SWs8NW5TLHxuZGh4Sj1WbCx3RjlzajpfPWwrPUN4T1JfbFBGUVNxaG07eVgxeGBZWHpdakcj''@;'; put 'put ''eTFXLEk1dWIoI2NCUChQakxZPEUmZV9+LlhXZDZOJGZDeCFjZit7XytRUCpPYmxWZyF0Yz0jYS9YITl4T2FhTmVhSE5WViV5N3RDTDhkQnBxK2xGcSU8MzI5eGA+N0U6NUY5bU9wNmJmSn1jZGIhcGx4Kk1heDZaSXF9Ol12RnhVRiR3N0B9TVZTRmNIITBkNnNAKmM2eSkxW3AxLkE+S3B4IihJ''@;'; put 'put ''MkU9fTlfKnxuczVRakwpfjE+fip1WkpAJF57QW4pTClZX2Q+K3JVM3JTeXt2NS8kV1ApYH5IOGVsT3VHYmU+ayU5JltTJVdaWmUoWSohVT54OHNgV3hJZylMcmZleDRaKF82QVVrRDNCd3BrUE9VWy4xc0xrcitfWHpwOmpYcjhPX1M2TVlqbmlQSVQkWGRZREo0NFtIWUQxcUx5SWl9PF0vUzdj''@;'; put 'put ''UVBFNDhqO2AxMzohKCJhelMqdyZKVUMuNXhiKDxlfjd8bWZRWz1bLz5jeT0/ZnVXWkVEPWN2UysuSFdgd11jJSE3Vld5eUcuTkoiR0Y6Yz44UWkiSTZMblssdj5jbXF4KkVNemw0U0JwRGpFSFI7YnFRMD4wdUZlRTMyRkAhS1d4M1tKdlBnc1d6JiQ2czdWU1gsOihZVWE9d04jRCJ9LEBhMlo7''@;'; put 'put ''PFA1T3peXz9sRygkeGJCLyVDXWlOcCZFdy9+RV9sIlFTflBHXygrdjZBPzh2YUF4Uj9uTDp2K1VNaFVnNGdTKH58UWV3NWQiVWdCZWE3e0J3e0FxcWlHOEhsXkMicDxFNmFNbWslRHRJN1gpdEp0I0I6S354XkZla29kVjImOkZLWnsoN3wyMyVyc2ZlWkQiZVIiVUp+ODpGQFYvb0w8cTQydCQr''@;'; put 'put ''M0lTPWg9Nl4kRUA6VV1DbER1diY8Q0JTMDdyUHI2XmBxSmA4LGZHVD8lKV9XeGZ7Ikk9V0xean44b2lAYnF9el5Gc0g3bj9aTXkmOHVTJCRVNnRjYEhfMHFMR3pjTGh3MTw8UzNyXmJ4eHhhWWdSb3pTbWZ9Zzc1O2lzRS5wa3g4ME50X0d6IWhnKU1fI0Juc25yWWRIbS51ZGo0cE5oNHZIRjlT''@;'; put 'put ''N2YsSj5EMlo/X0pMOkQ0PzNeP0VeUENNazl7QlgiKG0jXzkyKl1eRSRXcDU3T1IzZUAzMyEkIzArflpVP1cmTzFMazc9VTIrO1dJLE1jb0c9XUlGUHEkWUJTbF01PWl8VEIzJU1XNyJGSmh+OloxLG8ia2NrMEwxW2lsejh2bjFmczFxekhYWjVWWTBbSzUmWmkyPzx7e1NpNnJtIk9kcUV1Qzkh''@;'; put 'put ''Ry53SmVxMTBBQjw1Kkg5ZCNCLzwjUSFYNlduIXYpOzwoX3g5eCNfV1tLO3VJYjsyWGxPQ0g5NU1nc1M0Y3YlUFkpY3RWajk3L3lWJnRKLDpvbiJMbTwldUI0NlMwRVBkRyxrNFAyazBaNTQrKjFiVms1VkNFei8lNT1fenE6NHVMPDQ0R3EzdGZTbFtJTWZUaS4+aiw+c1RaYTdIN2pycFRQdH06''@;'; put 'put ''WjpvaHhARDtNNjJOOzQ/KF8qSWkkUHlqVEJ3Pjk/WCVtUlQxYDBuIkxMd3JmKT9nd0hNTTMybGtNbDIqNyN+XXlnOVFeSmBgfnAxM3Jlb3A2UkZ6YFd7I15Yb35eTXdnWUN2Jl5pWXg+SCh4dlNbaW9+JUUjfD8/bHFpOltrPWgkU2YqWHo2Vj9tPVZ6fjJjSUspdSUldkw1OT46dVNFIy5BXThB''@;'; put 'put ''MCE8K3EuN0V2MyRQNjhAOURYNXB6b14jdX5JPnhhL3I2S083USJifXJwMy91X3BVZDBTVztYd1dBV1heSVJ1V24wWzZ5NjFwZEx3XX5Ccn13Ol9JT0AiTyxDUFVLXSMhcFVhdEJJOURxPWU4djRGQnpnMUB1UTlgL1dqRTIrVUB3STVXUUV0RG42P049aGh5bk9CTCpbajoxJUpRQmxsdzZIaGEl''@;'; put 'put ''JFNmQEQuJjFINkZ8QWQxOz0kNU5QUDVFMGZuTmJffklqNXVeK1RaNG5HX1c8SWRQd1NaNjRrInZFbEV7eTZnbyFrPVlyTnQwTCR0ckVrfj9Cd1M/bFBOVEpkcU52YmlCOV5HeXgjRl53fX5ufCxhVERrfCgkM3R6K3cyMnslfkJIdkZ6bzA/XU15JkRAU2NrU0l3S197ZWkjOFRlYnlWMXgmWlBU''@;'; put 'put ''KjVwKkJqcEdQIXw3JER6e11rNkRTaV1AZD1yOGA1PnBEeW5YWT5YWDlSaUo/YFQkTWxXfjF3SG1BKyQ4fEZhKml0TkJ7PmExZEZFYVhrOjBDJl9Xd3UkTThCSCNkYFRXMEJNV1Fmdk8/UHVfZUhlOTtxdl5QI3x9MzpiO1g4STpOc0RycHh0NmVOO29zdHhaX2hOKCwwTXs4PmpjdmZDYzVAZnsk''@;'; put 'put ''UUEwRmlnVWUzWmRgTlU9XkF7Q1Y1XTJgeDd6d1o9WzBNMl1nMVZNVmx4YDd8TjlhdnBGYn5pUy9CQmg8OT1RaGA9N35ebn4lNld6TDlyQyJfOTx9XnZhW29NWlFeQ19mV2lRX3xdJChmXUNoVl8oSzhHeGdiWHx8IzhLRSUvZn0rVFNkOyg/REFFVDl5cSZUIyNGLzJfN1UrYX0zbi5oMD09IiFR''@;'; put 'put ''IkUqQikyTnFtbCVRaUNJdUhEUFYySW1qXnh5OH09ZSpXZ3ExOVcuPj8qSyNPQDAvMClDXjNLbj9gcndpfmpIUVBARUlpe3N7MyU+bjZ8eUIoSk9SYX5qUEtpM3ZhX0FSJExpVSxbXXt6XltrK0hgeEtXVUw/MXBbPElLdDd+QjFbNTcwJlZ6VEQpfncodTdQJk97aFBRTG82fUklYSVAZmx4JG0z''@;'; put 'put ''elFDIUxPeERCdHdnRH4zO2wvT0AuNDI9a0tnVlk5dkt8QlRfNDtOZG9yZjpxKTorPTZ6LHs/Y0dNWip6S3UxLi4yRCNzdjl2UypaKXFqa1twJkd2fkBzIUZ2fmVNRkg/cTdmPHxQWXNaKjRGOn59ZCEmcl9EOX5oUnw0aG5VQCxUNiJvPiQzSnJ+RndVL08haSkwMCsyc1NnWHBheT9rVl0qNV1z''@;'; put 'put ''TT9EKER4NWdeXk0qZ3BgOHdMKkY3elFVJlg0fHxAMGBrdDhvKkpFQGMpLzU0V3oxQVFwKCtZYkVFY2VPY2smdko8cXxONSsobVArdjgqVSpoJj5dSCVTbEpKV3laOCN2L1pfRllseG45aCZyJXx9dSY8ckZzQnMqPUtSLnJ4VVU0d1YwXXRQcmFAVSN5MnRsR0tCMnhyKjBgb2kvMWxuQFRDU3t7''@;'; put 'put ''aCV3JVpGey9ISURsYVozN3o0SXckSC5zdGBgbDw5MEViSWIyciQzRGdJdFhkQUZCdWRvPSM1e0U/Rkk/cGdwNilvU0JqNXtTY04lbi9gMihyNEI0W1lhRnArR35lOkEyXWw4Pi9KYGJmR3pqRng4aSkleWZVVGglO3N8MnllJXFwPShkazB9I0oxeHY8M3g3RyVrSlklJVdzcEk1TkJUcURNQWA7''@;'; put 'put ''Mj8zc1dpI3NUay9uLHY7WT5nLHppQ1o6KVRDRUQ6ZEg9TldlSzBwd149dX1yMTdzVzEoMUJ4WEVpLjx3ImI2NktDfkxFKixhMkRzY2UxTDNBJHkvIm9XLmUkW1ZhRWduYTQjO0tkImN3bVdwSkVpVTJLMkZwTCZ4cFNOQTNWNWVlQn4+RkteUyIuMmY1KVZuaVsrfSopTi9pb21AaXhNfnhOODpC''@;'; put 'put ''SWZARX45OXcyVDM5bWhfRUlSS3ovMz10eHZ5cFJALGY0eUpQLyYhb0tBeHRbbH19cXViZkRDSFFAQyFvaXtgeko8el1mNFRdKjVrYEJDQHRTfjt8fSx2NlIuJWh0VS81UE5MVTljVn0uaW4ua343KkJedz5lSzp2Rl13amtuRiw/Sz44Ol1OVWVtfDJBSz0+ZjNjTi8yIm9kbEFofFFbbXVnOll2''@;'; put 'put ''a2swZGguSXtbSWJAMGtAUVZ6Z3V1V3wibV8pL1twJkMwRnk+US9TPjdLY2hefExoKjI5RiNkTF9EbXc/WkJXLkBVKlV+MWZdV25VeUNZanpNWHZaOlNZW2ZFLDByU1F3bHZqQ0B5VShwI3JwMTBIP3B0Smtab3poakQoKjdvezNYaTllU0lHKW11IzM0R31od35RM2wwPXUxZ15LaEFXMiowL0Z3''@;'; put 'put ''VHBNPEBtNGR8XWRWIj5JPHF6VTxrNXx2bVRWey4lYHt4c1dbPXxISCE/KT5QaT4lX21gPnozfUx7YkkzZytRIWBtdWkrMHMsN1hDYHpXXmEjQVlDRih3LCwmYGJAVCtsLi9tJlQ6XWReIntOeXZFIWRzMkhTbzomdyZnJTMuamZ8SitZW3JCLFVtMEN3dE1xKC9PblE+V0lrPkdfYyw2ZGo0MEM4''@;'; put 'put ''NmwmOmdjJlVIdUBBZTBqL0FieVhFYWBSSi5lPHxZIXh2QnR7R11hN2EvIjNqQy96fEhtJipJeD1xJWdzR0w6P1drdlJacmYvVkNFOjJoKCxva2ZlcEN7X1RfZko/TmchdkdMZyUqK1JhOEMlZUdHOkB5Q0Ysa0QwaFZdamhqOXhJRX5RUnBWemErZkxxSjI/Q1I1K1dGVE5CLCtlcDBNdixxL1lW''@;'; put 'put ''bShUW1RxeU57JTB4XjB7NFcoYFU5VDdtKmVpQTZyM1Quez9OLHNDRnVpMmUsdl0oRlouWEJGK1Z6dmEya3BhOHxqYDtTRE4vbVF+JCZgbCt3cy5QfntfcTJuIzM6cjswNkNMT1VSMDIoYzd9fVpeY1BJJiMkMHMmfjskeTIpV3VxSTxFLEl0TXBPan0/a04wVzlXbEorUm5ZdXtbZWcpRWFsejJY''@;'; put 'put ''VlBTR1RAPy5vTEQsNyRCZG4/LE4qImU1YEV3I0A2eF5PRD5pQ3RiaVQpSUo3QGAyZi5ebjtzWU9fbzYsQTw9bzpZNz9kcS42dENRcyIqamZjOmVgLzg5OUlkfjJVTkNscmIuTFAodXEuazFSQUJwdEY3ITRCSVhBSFVPbSQ6KzFicTRHYihzQmNaTSh8bzI8JnE1ISI/LDBhbD1VR2tHSHA+JWp3''@;'; put 'put ''TV9ZcCg7cUVpT3NwJSJNY0pjMXo+O0UxS30lJn1IcyR3YnlFQkkiWzoxRS49TitrVncvRzo/fGltZyZaYVpRRSI1TEE9Tj5ZRH18WShUU0U1a014STlHK2VuYWoxJX1ySHNCQl1HQjsoTkkzRiRoPkkoayZ8OzljYUtUI3xBazdsVjJ1c1VrJGxKS0JQMWR+SmR0LGxldSkyeCg4fElhW0pnVTJj''@;'; put 'put ''IThycXNbI0oxTFdSKntFTWhHeXpIXnZfdnI4Pi5FLkFzIkUuJlohZUpNeHFgeVFFKVYmMTlqUVJuX24jJUsodX1JMFgybEU+X2AqdlVXWXthQnEwIztdbkgrKy4xa11fekJZLCo7YXIrQD9vZFg2ck5NZ35VbnZrK2AzSGc7MzldI0Ria1VNREUyQ2J6b3hgOHciUilWUXFQeWwucE9kdTVpQGko''@;'; put 'put ''QWpTKCZHa2s9clNmIVV9JUk3JkddXyJnZ0d9L35TQXt2S3lTX0JoNi5ZcipxQDUjNDJ5TWR8YUQweXpkKmh0ciswZ2g2PCorLmpFQXxYJEBfa0Z0UHNbNzlJSSIxa2xpKztQJSpGcUQibG4pLkooQkR7Q25DLF4vYCN2NiYjV09UJX44KXVZYUYkcmdEUVFRdHdgKT9eV1U4T0o0aFI5KiIqQSNs''@;'; put 'put ''V0J9Q3BQam5ENmRfVThBZkdkUCsrOEdJJVpZR0Y7Xm8iR3ZONllYRUx1SDZTdmx1dU9gVm9eIXNudUcqdSY5UDVmayR1YmNoKl0wWX5jeDx+VmszY2c6UilbOjcxJT5sOltuNztvSS5ZWV56cHZ6TEhKanx6OVssT2UufEF7cGNuJmNxcURZMCVqb3hWS35mW2tML3E0QH01OSwsQjRISn5kRjhX''@;'; put 'put ''TGRoZElaX1JpUi5hS35OPiw5KzEhek5IM3Uha156RCI0MDZVKW5HbnJLZHRlZ2s2U20uJS9FYz8pbTE8VDFxKnN7REBAYkpHXUMxQSMraU0rJj12VyY6czhxS0w4Ymg7N1ZaWGFjRXFsT0B5eCN0endWb3h3YDlgMEtVNjpCMW4vZ017byp9cT4hRD9CVXlbeXlLUEhsIW88ejkwc1pbXlQifnlz''@;'; put 'put ''R2RVR3B+PTZyLEAlN2ZGLzkkeVV5cWE2ViF8QyxYfGhsPXlue29UWCE3YD4+S3NFVnVveisqUDIvQCF3IU9SaDpdS2V8bkRMN2o3IWJTdi5iTC5eenhSOzZmdUwzM20rSlshU3VAUG8lQXlyPnh2b3NMLz1jbjojJj1FWW84cyRgLEYoc0wyJEc0ISIvTDxNUU0uYmUyL1hKN018ZGNAV3R4fWZR''@;'; put 'put ''QTx9Iy5Weyg8Ulh3OFMiM3xhS3ExUnVScWh9ISlzSUxuSkxoVG1mUS95OWRpQEdTLnJyciJeZnk8cGZpSHlyKTshfXUmLDlQeS9LfS9QVXtQbiVDIi5KKFc4cCUma300WDpbUT5lfl96YC4iZVUyYSs1QHMsRUYwZFosKj54b3VfKS8ra3B7JnA8ODBCNz90cUtHTVNSeGp4LmxxMX15UD51OS8k''@;'; put 'put ''PjohdihTXm4uNHl6LkI+RkFRRHIkbiReQCpyZ1p+UzglMEtuO3smcmlaby5BUjV5alY/fExJNkgpYV9bYGwkKXNTWGkvRjI0KTBaUktMSzFFKHdWPXglNFpUOGYpXyx8b0l3TFVXVzQvc0BiZikwWS4qRkt7fWtxUyIwaTB5fU9lJnJkKXVDMlZPQ2hfaG5pJnQ+Sl0mITlmdywwXVc+K2s9eT5F''@;'; put 'put ''WCViNHpTSlM2Ml9vfX4ySz4oaT1rS0ZiQzc3NFRUSCNiOXg3RDh9cnh5Zi8lRSFtP3wsOnUxKzh9ekJwLkx3VU4xYnFhbV0+PFNVaTRbVGIpa3N1MDY4PyhKWTMqPnd+b1o0OiZXOTtCNi53ZDh2b3ltLjtRVjElZVRpdEM6dnAvNEEkWXFWRlR2JXlIMSYiQ05vKSIuJi5tWXlXXUUlVllyel9l''@;'; put 'put ''N2puOkhHKV1nMXtpZW9JeVl8bWdMR2hnb19qbnY2W35OTlRVS11fOCN7ZnY1PzwuWSE0bH4qZW1Td201VF97ZkZCNithMWJNLiNaOHR6YHxqd3JwV3wxMTxkP1ZQSzdRSnNLJFA1VlZDczRmfXZPaHxsZH5WeT1OM21CfH0pdFhIS3Jge2FOcjBdKipqSV16Skgpa3VgNkw1SHE3ckxQbXB3NzxI''@;'; put 'put ''blZJeWFrWjNrfmsmIlRidHI8MEx1RVhgeHhrQnRvaywyKHFQI31IP1ZrVEIkLng7QngzKysxSG9TKyt8cD4mWko5REhJSnJBdEU1SyRxS0E8XmVjLjIvRDIieDY7OX0sY01qUWxGM3MxbXhVSDx5azltbEJVcD9WNGwmeCZCNUEmLm18TXpINldqPy58KjlpWypRIzc3UFhpQjMyai5dcXE2czhb''@;'; put 'put ''dWF0KDdbRWZhLyU+JTsyTD1BVUJuLHwqN35IOTR5V0xuVzhDPFAiTCRdbzNJSF9ZL2cxQldPUThARmFTfnU2ZkVlbHcjME43O2BlUCNlS1h9bDxwT1hnLHVtaSYodEJsMHIhVF53TEVDUTsxPHxIaStCJXZvfV9RfmU5Q2o3R11BTlB2QmclWztCPldzT1VNL0pHdnplfUN7KnF2bmJ+OENvP1F2''@;'; put 'put ''cTdCeG89W1lsO29IZl5sc2gsND9+emNhXzUmIVAxeShoYSkoVypFME48fl8pfTFNUmVKLDEiK2t4X2Z1fmcsLkZDYUhXS2gie0NRLHQxTDBsXk9fV0ZGQnk7a3R5aFVrYz1YPS8+RkVydWguPDtFITpqJUF6KH4rVDBmfH4lflFjVFgvPmlUPDJ7LDwoV0guNGlXIUdwPnFUI31BYkQlezNaXWlI''@;'; put 'put ''Xzsrck4zNj5gQHRWdnMwdjlPcC9jRWh5YFk5Q01wdS98RWhFc2EseHJ4anFtZFdQSkwjWSJPbzw7T0o8YXt+cSRxNTJCX1tpO3VwcTFkKkxgY20hcDJHbkN2dy9tJk5SNkwoMUlxfG9ufmlmSnxxbk0hRm87MyJPLiJSPURmdSJbSiJ9N1U9YCNmOmhAKVNFc11OcTtvL3BeNjhiJTpDRSpdRUJ5''@;'; put 'put ''am4jPnwqekRZJT5mLmdZQVRYajIrfTBjaigxVn16NDd1Ql4+IWdPXUxpfU4rbSw8MzIvejUqQmYjfTJXP18zWmE5JTsuOyZjeEBiIUp3WDZaKTIzM2l0eip4PCRMIyJOPWUvQy4sdzBpTzZ0bUVrWUA5aG5TKUNZPFd4IVE5SlBFcEwzT2lxRz1XS3FmVHRReD0lKXpIb2MrLjVLTiFwc05aS0F4''@;'; put 'put ''eXJ2MVVHSlVZNEFwdSg0Qz5ZaDZaUHYsU2B3RShzTTIxPE0rIVQmc0JRV2ZNTGZJP0FsJld8JWxbIzh1OkdWWDJ7SDFFVk1aT1dCXmt8UT4/W3QmXW9kWWdlUCNlYUxDLndKbExiMk8kSVQjX28vISN8YVEuaCJ0ZjJgbk0/UTMoUHlgJmhBcyRxSGNdVj5nY1VaSV9KbDd9Tz8pZnY1KUxKdXdJ''@;'; put 'put ''PDcpPzNVSyU8dCZYSDdoNFpEfjhbNlJtMUQzQUx2PnBWRkFMUkNyQmdPPlR2aTNKJUQ1TGtDNStQNnckRT1OQjQ8dShrT2tDWk1vNEslRiJ5N0NTOHtjbDY6Kj9NRz1haW5qWjBuUWo7NlFoeTA7NFZwITtZM04pVjMrdngsTENNVGx+cnlnej1iYEZ2aE0ie3NoeyZMLDk5JjtzJUxqJmYmcHBH''@;'; put 'put ''ZysmJVVELnIjMXt6ZjI7YyZ8QVJsZTQrUzc9dmM8Q2NmaUpZQ2YzVl1COTVRPEVVUFosKlVhb0xDKC8lVCFwT3EsSlpsMi9aci5aLikhfTYkTV5ARjhHMUBpMTJ1UyhMKGdBYyhMclZ0UzdTc0JkM3ElcFFlel9APXw/eGBNbjJgMUgzPS5jd1ZAKC5KOEwsOVVYMHtgej5kemFxYzl7ajFxRyE9''@;'; put 'put ''SEQwLl5DX0dkYjV9L21ULCUoVS4ldE8vL1cyOnVBNDc2Tio8LCs5QTZsPDg1ayVzPEosOyNSemZpKjAuRDtbUSVBNnRfWEBZSzF2bmZFYSlkempVI2osQ2EpZHhmcFBHXjR1d0lZMjZlNiZxQHpIU1JlSTh6OWwrKSZAbSFRJXp2cSw0SC4/K21bTGJAd3BGTTxGRWw+MGFlNmNnLCxIJiV9TW1K''@;'; put 'put ''PnI2WUlmOz9ZIVlNQG0hbEF9Nm1bNFRiX1ZGU3chKzh2WF5mV1pRLndjSmpdQ3c4aSFSUmtveGdNR3NnTjEoQGkhWU19JD9iWURLM2RZJE9pdEcheEcoPSlUTkN+dFN6bGY5cW9afHdGTllpW2h8SytOWkUpQHNWR05BfXkufFsjcTcoU1VhIk5WTUN8dEJ1KjR4VVdyOnBgIiwxSjcqVVRZJWwh''@;'; put 'put ''Wj5ScmxvVVEmYkYkTFgyXyIkOm1deV5bTW1KdVp7NWg0MDFwb11jVHRHeG1NI3hJSHswbyokS3pZdGUkdWs3XUY8alJtUG1rKiF9MX1XKWQpfEtQS0B5XU1wSVZYMWZLY2hTV3I8ZV4xfmVkQikwOEdNdDJSVEQ/TWIyYkVEYjBTQnU9ZzRALiN3cH5Mak57QndwM1JDJCIoQGdiLjxNIVZDXjNC''@;'; put 'put ''OVcpSHFrPVkhJj4kO2FqdCIxaGAjcnh6Z1IjKDxjY2lZKk5vWkV3WW1nNFhnT3dtZjQzRkxYOytacjlALGoiSmkxQipIUV5VVjFpLjxRPFF1fXAzQllnbH0iayJGUmVaX1hPIUJAInJEL3ZJPTY6TGllYGcwTlVRTCxRajlAVk5yYC52Szx4WHxUO0AmVlZdZT9eakpmc3J9UjNLMjBTT3JZSGYr''@;'; put 'put ''an1GJWYlRiRgXmlJWDd1QmlzfVYzcVohOH1EZkNBTSYqIjslS2w/PWkkKkBgQXk6InBJeSJBRFczcDhuZUpHRzBUYlJPNCsxIytHeTJpZks7UjE+RFUvZFlnVkVTfXBALGVhTSg4JkxuKGlKZFImN1ZMbik/OmZxVn5uVVl6cHoxdDx2fD5rcy9eaygwT0w+P2YkeVZ6IUJlUz5JOnN5SEpBWTdf''@;'; put 'put ''JT1rMkBQaVA+bjM9JThALm4kLHxEa3lbQlAyWz9NVSlBNj1fWzIrSEBzZnpPZExgTEMzTE1haVU1OUZLUjF+cTVCN0x9fT9NMTVKYXFNbl1XRF5bYjZ4SW11ZU8zWlRpdnMpd1tZWmhMWz9zPEBbbGdCZXxbPj12RDVEPl56YFQ6Q1IvflcsV1guU1UjOSZkVWFwOT5INGppeF4kZ3AzSChZP3xl''@;'; put 'put ''W3Rmal5YMWc7LCNaXjlWeGIlYiNOJW0rMnA5bmA9RlRoLCUpMiViOyx4aSxRRktqWnJPam1KRFBzXWdXZkslcS4xWz5NJEldcTJDTSUiP3FLIyoqaG5VclQ2eE1wU1c3KzBzdX10azxTIVU2RFIjMTFifmpXT2RDS0U0KFZ2MjZzRWJYa0Q8TVc0XjYpUzFeRnZybnlWXVI6Q1UzU0QvVXBKbmN4''@;'; put 'put ''SjZHUlcsM210JlZQZX1Sdmp8ckAsak5rP2xVc0hTTnpbe1ZzZ3JbWy4sRDlEOlBfU3N4Mzt4L0g6MUtYJH1WfSxnK1suYE1wQk0lSDldOWA6KSklbksoO3lwJiUkYjFePjc/cl87PDJATGYzSXlEJUImIyMrXnFSaSQ/REp5QHhDdS4sMHNONCRKc0UuRnddJnxhbG1TTSE0fHVPQVpkcTgwJi58''@;'; put 'put ''QGoyS0tJWU0sIXx9UmFuPnZIZU0jaUhkaj9gcTE6aj51LzRXY3BaTClbanZMWkZkbGhlNUJZRzdycEZ2MHZ8bUx1TF81clApM3kvb3g4RCl0ezJTQzpOUzJ7RypjUy99eVtPXVEjdnZ8PCkmS2Q/K2w9T0NlRlgwenpNX0QlKnJJezU/TiFEWmB1VzBFVUVPYzFCQFhJa2RFLHJ1S21PdyhWUmcr''@;'; put 'put ''PUNWdDU7aUZ9fCw7ZkNmUHoiKEFrQ0tDVXw9TkRWaktMQzwxTis4Qn1MckpfP2FlTXxwd2NOLzBKR213KVdkQH40XWh5akoxR2NhM3FqTn4lakZKdTRNTlNyUSNAclAzYjE1LD1FKip+fSlvfFhjWHNzP2RCKkVwblU1UUJyQ2Rhd2hLMzYyXjBkJl4ia0YhaSpXb3pERmxFXn5YSiJATFQwWDNG''@;'; put 'put ''V3MpWWltK2ooUTZOIVdfXTVOIV0kMnp5KU9AbyFnMUFVZSxdP0tpOGNwNH5EM0tLd1gxPGJJe10lRyZhLC5KQFdqSzYpN2o9JFgkeT4qI2o4ZlFiZXAmNl48RDhvXS9NP2EwMCUwWiJCaF4lVXEjXXVSeUdXfihPektCMlhnKGZxOGtDQDxifGtoYi5UIT1xQW5ORiZzKnZLUzhCRzZoKWpWUWdY''@;'; put 'put ''dnBVOjR3e1A6eWEqNUZbKF1ELElER3JoXygzSUAlQVchcGFWPjVxK2JiNzN0ejQ5alFeMjU9L2hCW30xdXtLYmByRyw6eWZyXzZUNj87S2pHXjhXd0FUQDowKldWaCguWFEiYFcvJWtMYC5jZzN6L1d6bSNETXVkckRIKkZ9W1pwJVZmMTA6W2ssYkBfc1VCMStNZl1QQS9tWX1AJC4iWEVQPVJK''@;'; put 'put ''Qld4YjpXMnZbNmNOTWFBVipXeVhSZSt7fDkxQSpOR0JzZngkey8lWFIpOXxOKXpWOTBNKkdyOlVAYTIieThMQyMqdFtWNCssWjB1d0V4PTMzT29nU31Oak1ifS9OQnsjTjNBKTtNQ3E7QjYpXz5GSUk5X0VNVkNCdVRqPmVBQWNCI2xJdVIwZXFdW2dKS189eFt4Zkx4VFdrMHVbeHZMeFRPWUB5''@;'; put 'put ''PTl1eHxCek09Yk86ViovUDV7a0VOMk0jfHxZVS8pYGFReEY6OSRzKy8qdntjMSNzWURnN24qaT1FM10/cFpbOjJeQmlseVlKX0NMaXZDPXBPPkEmcjx9ZiFYI1tnU0liIWMiSjsoMisxaUptO1FqMyVWdlQiMmw7V3hpIkAoNzVEeTZvRVNueG41Yj98Mi5IcT1vO3xOWHo/fCVSPFNxSnQkOiM3''@;'; put 'put ''d18yb1BTSkx4WCVUeikrYUMzQixuTGh1KzMrY3dvZ2lJO01yc2N7ekNiRmpKUWBXMlVXITB1R1FQSDJ1T1doa3dEYl5iXUdIMj5PfWJZa2pWTWZ3Li94JSoqUiFISU0hfDtEPEdbL1RqTiQ/WSY3JlNrezMjUmVITXpMYGdSJlc4SEJgOGVPKjgvRHk5QCFrOGBUZE5Bb1ZaKmxFO2x2ck1iMj5y''@;'; put 'put ''MDFTL25Te2txQCkzMDFPfFBaaHEzeEpCZGZxO3s8Y1tlJldnQzdQNT5ERllORm5bWUhiMWhQfXRRRVF4Mml8VHRmITt8cVQ6ZHpzS14xJXdfQzRMcXUqSUdyPUtKaCg9PSQkPFUxVUBGdmMsJmsmfWYhN2tVJlEmNHtxR3wvM3w5aHhTek5yOiVJYiFyIyNJNDcqeCpSRmdoNXlZdF42e3xIPkZy''@;'; put 'put ''aEEwTF5VfXpePXlNQFhXI2tTekc2T0t9ZVAqPXQ7cmFaNEsmX0EwLmovL1sqWWQrQkxPRiVYR21SIypgSkZ6cWhMMGU/SDFlP0FANUlFM2kqPlpjeXcuRFRiJnNQcXdbeGlYSFc7M0xeTTx7WHZOUE5VQkNieiFlREgycE4xJFlqYXB2Z1gySDszSFJZJHV2S1pQdFM6JUN1PDE7MFdCXyZ3cU1v''@;'; put 'put ''e1EpZnkuS3U8U3V0VWVmZU5aNixXMHpIUkt3OFBQT3dpZC4oUSZtIkd7OXgsQ0s7JWMzN2NQbUpoTEB1fGkjezcjXyV9PCV7PEk6WXVaMC9KMj48Z2MpWilQens+NiIsOV5GOVVeNCwuJSYwRmovOiFjI2hfJEg2MzBTeiFiYmlCbGkuXkJJej9VQl8rNEswPHYlditWeEJEfXN8VEkjRjw0KjdV''@;'; put 'put ''Y0xZck4qPGEod0J0cTh8KUdRO0N7QDdCLGtXfkFGaV1FMnhpTypTL1ZmbGJ5QHB+eDZ5WV04RmdBMTNiX0IlJVp7RXJuUXpEXmdQTVA1NGw9dU8/Kkw/aHYyPndAKGNKdyU8LnhCOmNtcCNbQ0hlVV8oNUV8aEdjKWc0VXVocn4uREs5UWt1Z3JQK093KjZ+YD1bUikpS2UzXmF2YzZddClIKWFq''@;'; put 'put ''cGdKZX1MZGh6QXg8OF92fURhbX4zWEJXLHVMKmk6aVk+KUk8ZiFUSVdOW3c8JnE2WTAkXStmZ1l+ckI3IS5EOzopMk1BTzt+e1NwdVBMPjtCJmJESCpRNiohfmdKcXVeQUs6RSlsZVB6PHIiMjhCMl4uQz17dTU9b3BNOUE5dFEuPUNaWjlfVllqNzFFXkRRLk5kTGc8Q2xkWDNMSDwzUWNObFU9''@;'; put 'put ''dVZackdxUVVOUndrai9QPjYpcCNiIjlIbCRuc0ExfSlXZE5LMChafj4hb2RYIVJqO1pFTWJxeWcqV2lHMmpEJGl4L01XZEdSX3MxSmZBPX40WCNFfVdjJW05aFM+d3FNOXNiJS48LCE+XixpO34yS0t0b0NHKyFbTzllImN+Yj8mIzBvb0MhTm9WMWpOSlMkTHI7PVsmKGp+W0QvTHxWdVJgZnMp''@;'; put 'put ''VUpkRTIhPCgpOlBmLjlPSE0qYWlqS2VmVWZURm4wXTpQalphcGxxaWh4cFEjZXMpSHdYSCxPd0VgXT4wP2c3Qi8iQjRCI1gpPnVrJkUlfiZuNXtNdyZgIURyNCtDJlRiQiZQd1pdfGpILzksUzcyfGVmWSZMeFhFK1khRT0yYDxKX08xIi99Vk55R3lwQ1BXZDYxak8sWS43dj4mZDZyKi9+TjV9''@;'; put 'put ''V21RXVohODZsYDtZP2E/NW48LnpPdiouW1c5bzNhVl9iQmVmSiNPKF12MXtyX2BfJC8jSiVkeF06fDlSOHo3Uy9yVkRPSzhFXk5SfDhhKFJsTDBoZmFkZmEjUkYjbCQxSVYkc1lHZyZFNV94dGF6PDFHQklCeVguK1BkWiE4dmFPe3VfQndiXnFdUWpId3A5bWAydWVMcGteV05Sb0ErPigxP1Ak''@;'; put 'put ''PEYxc3x5YWprISQha3JQYXBtd3l6UkRYT1h+a1hULHAhMGRQX2YmSWh8LnA3LCpuS0p2RllRQ1FWRkx8QFgwdSIxPHhVdjF1Pyt3YnpgRTJYVClDI2BPN1Bzcmxha2ozKlssbVE6MHAkKk0rWyp0MysuX1tEYlNFcSZBd3FjKVpCQGoveDAuZTI9XTB8U31jPykyPmRUPCx1aTh7PiQ0W2ZuUzgp''@;'; put 'put ''Jkw8QndQWzE/YzhBd3Ivbk0hTFB+fDlrYmNFdiJoRkdWRn04OSVnRy8hOzR5OzdxJSU4eVp6TmlrbFlzUzZOYTtIQl9HIzUkQ2VzTEA2QFU3fU8vY1dLQU9Dd2V8LGNAM24uPCwhJS4lfmFeajVVfDxncXleI1hiMyUveksre3VoOmk+KypDJj5VITpUUVZBKU5MdHVjcXpman0hL1l1X3J6PjlV''@;'; put 'put ''WFRoUCNiMUZ7d1hmRDxPQFUoMjAkQ2pePyZ0Sz9pI0hlYGVgZStBSmozOGNoKGV4fDpYclBqY19BOF1LP0dCMiJLJCZjRW46SSombjl6I3U7XjcpeU9mQ1Z5bFJPWisqRU0meyR4NmVJfTI+TUMlK1BLcykxWlREWXgoI25FQk9BP1JTRFlaVmxFaXxTd3BjNUJhRzdyaE4/WGByZ0xxTGl1cD92''@;'; put 'put ''XVplb0ROI1JPJlhhPDxqa2pEUCIrb3dHZCYkPkNoImtORkIqR2FEIS83ZDlMRX5bWzRZZlZjMmF5dUNiUipKbEUwQmkiMClrKTIoT0JHdURIR29tYFpgbk4oXnwofE5tZ3JWKCg2PCZPKG9LMWRSZmp6OF5OY2k1X2g1eHZZQDtLVTZ6YiF2UVY9RXRCSU9INSwufj5QPnxHTE1hbk1IfkNFUEdk''@;'; put 'put ''cWhEVV4oRlk0SyZfPkNlcUcibEIwQ3g/cEwjdnZIdzBHemIhLnlieVchWzc+Q0N6JkZ0TWF5eDdrOj59fHhdNjF6X3FlJTVRUkY3XW1uZ2xGc2NVNClOekQrOXV4KzIzIXE+T09SU283KE5UfGJ1TS9KRXEhXzlvOll1QD0wQD1TZFBWVjFGS1g8bixjYCkjPGJyeFBYTHtCXmEzLCpARDo3MF85''@;'; put 'put ''YDVCQFdQVmpUXUIxeVd2MkxrQFdtRjpuRVNkNFg3IWxsbE9sfmVWNGlkOzk+dnlYPDJAb3VnLmVGZzduLHIuLCtaYCY0OG1GOiFQZXBISik2NHd0eF0jT29AWyZLLiQzRVp9d1QoSjkyKjNNQT42YHBVK3hGeTxJL2BMIk9dJUQveSNDPV5qRTg9ajsrPkl1LnFXfSRLRnl6InpuTSwkS0YwejB2''@;'; put 'put ''dUBzVWBONnZTb3M1PSZIVEw6UCREbn1ALnJWKVdtLFhsQE5FaD5xVU9hXnhsUntfUT9RMFBTLjF8IV1RX05aLG94LFI3KlssO19iMVM4KUBwPVdfajwsQjRKLEE+W3NMLll5SF1gPE5uWGZ5MTdgWCVZQmNITCtWQjc6WW1iQGQsMFsvfnFkTjYqQG9ZZywwWy81MjlDYVdwQGhRNEJuK01dc2xi''@;'; put 'put ''LFZaZnRRfC8vRXo+Q2Rfc2xIKDU1cilxOXZmI0ZJPGR5RGF1NHphQHU7VHszWHUlLCs4MFFlKnBaVkUqdSFsalNvTHpOPU4zaGp0TE9EMG14RGJeLEEuPHk0dHY2PmgqdDdLLzI4OEsqW19USD1OZGZBSklRfXl7a3c+VzImSSxOe3ckKFR4Z1U8ZTMlMU5PJEtYc3VLbFNMW3RwWmhyS1MpPHdw''@;'; put 'put ''Snc2W09aPT9oPFlnJGgqeFM1ezl4Z3MuO3hSdWxaKUJ5VCQkXlElRzVMOVFAJlt1c1Eje1kuWGNtSVIoNC4/LyglOkwwQSZxcEZoKFcrJC5UeyxVUiNLR093aUUxQj9WV0MhJGwuUEM8JGBoS3V4Pkxnezg5Y2V2TENVen5EM0ZRVW1hYC4rMTBfNnk1V2YrLj5pS2RGY3psPU1FJUd2MTRLSENl''@;'; put 'put ''SCJTfGB7YkxJVGsiSlspa29OP355WzRraGo/eT8rT2tBVUk5OzdIU0Bub3clJWdtOTpeajg2KmcsXVtBK1lqa1B8Kk8xTVR8YFphOHk1fjIpQXkiVCNSPE5JO3FycXByMmxvQVNvUHw/JkN7RTI4QEo3cSZGZkxMcUQ4NT02fmZ+b1VNMGpoWiJEVFZMb0tpbHFXMClBeU1UIlkiKGhtIW4lWz4z''@;'; put 'put ''NXNUIXZzbiY/S3RfXz9YYkxJIlN1Z216flRdaFsqTy9oSy9pS3BSdjgxWzx+UGl6XkY7aT9MT15BJiNRcXVmRF84aUtYUWk7dFIpakxTSVsqJEZtOyhkP1BFeSg/REtgPWVvLCFiVF9KRXhYOndPMU1UYi9GQyp4PGB2WWosVXlPZHpyQ0JbKkFebShMbn1FI0Y7JH1WT15yWGQ2aWlQIXVmVzR9''@;'; put 'put ''Q3ZeMFk7KihGfmUyTX5ITEZ1ei8uViR8eSosLzpJbEN0N18sPDIjKzNxQj9ja0VobTtmO2lYPSh2fFBLb2xSc2RHNX4lbix4NXdYdiVgJiM2NHZrTiM9cnVad0FZW2t9YGNmZlUkMG5mR3N3ZS5OMXpJd2UvYGlMUEBybk1XaEI6Kl9QfSZsWVMpbTRFPGd1dztpX1h0TG1CeUxPdDdmS0B2MW07''@;'; put 'put ''IndkMSllZ3ArQFFVZzREJnpsOWpsJGFQNEtySUxoR0IuTlFofHUvL3R5dCVDOnkyey5CM0lwOHBVKk92OVY6akU8bW8yJEJvU310RkY3PDEpNXV2UlVTMSEsKGRfMiJZbEBjQ0Q2dF9OIWYvWU4/JDlzQVE1Yitje0h6SGklclMjaikzfnE9I2lvdVs0VnpSUTo3IXw5TXpUbj0vVyhaREZDMnop''@;'; put 'put ''ZXpqbjJ+JTp3KF5XbnksXXBbQH5mNW8mQEYhZGpbSDA2IT1lPSh9X3A2Mm9KcFQsU0JUMUlZTG5tJTFMIXJmKmpXLDxHPiQ7JX1UYixeSVcxdCxncDRXZDlSeW1NQnZkaiIkdCRrPWpgem84O3kvLms3ZWV2ZzpRRmEybC8lJDVrMG1NUj1lQjBZdm07JSlXbSlVLFV8LEdtMCM2SmYvRGppVDJC''@;'; put 'put ''KH1HWihwJXt8PSlSLkdSdlQ7dWdePENaZVZIeTIkWFNhO0NGRjgvcjxqV0NmWlosSjUremRJM1d2T18xLmhsbE8qRnw2O2UkIU9sUnxiQTZMNjs8SlhgMXoybWBQYnFqdFJfJShPYjxNNCEmPyQicDJFPS80UzQmQzQldHhxaTlYWU1hbGM6KX02cE9peiRWPTNSPispME9McjlWNCRPYlN3XShS''@;'; put 'put ''d0pafiVmdD8rUHpKKkZvU0BRXj07OCJjNigxOyxyfnshZjtLYzhSRHBkZnpXL0xnemExb35UQGAzVyZWSnlken0/ekpNUyo/T2lQPFoqJCZEP089MWFle204KlIqYX1kW1p6OG04cExzaipLUFtocSs4XV5qOyFpQWNUKHFSZTUpRSlFNVdsX0JOd1hseyNWSWU0PDk3NTtROSFoJTF5YzklYDwz''@;'; put 'put ''TTQ1KishYDpGOmBXR1cwcjdwMX5UOjJqXjBxMyMrSG5XekN9MjZLfUE3NkRzbkllQWM1YmdvMmQ2IVtPVDR6ZTRnNDUvWVB3MHUzSX14QisrMEBVdzV1O09qek88X1U5P3RePUY7aThJZTlWO1FMJEs6dFUjN1IvMTc/PXBvI30jXWUyQk06YjUzLjxuQ15wXn5hYTV8ejsmXzglI1AsZCE8TVZw''@;'; put 'put ''JFc7ZFlTUV5DImFraUFdOCV+NVt8XWguQ0MjMFtsPCllQmN9ZDRhQl0zVTxRb34pVTJwNXwkX3E5bkh+LyglVj5dWk57X3pTNXUzITlkNmpAPmc6WD9PUzRGXT1Wa0tSdmxnO0IjJjwlJFBOIVIpVCNCJnF0PURbezZiYHtmcnNWOEZRbi4pRHZMS0VGc2B7JVVeR2UkIktkP2hGRj5wZSJiXkll''@;'; put 'put ''ZiwlTHw7N05JZXJiI3thKSZxRX5sWTxLNXApOCY7OkFSdihZI0shWSVIfnhxRT5ZOVZsNDE3SkQlTU5VOilsUkllRnRnRGs3c3wvaGZYPi94WClbc2xXI0Z7d0pwLFtxM0M3NC5wKWdwenFNZ0VYdyJ8V2dUMFtbZmhqN2dvaSY2KihHRi5UITZEb0V1dko+M0ZFbUJtazt4WHtndEhUd2B5Z1gy''@;'; put 'put ''XiVEJHsvNylufm1VQVk2QiZfWzRNZmhpeXphOyE2REEkOEksL31kKlJlLDAsIiEzL1BfI1JORVQxKiM4Y0pqcm82KENLaFc0UTlsL0NFTnpvImx5TUNNWWRaUjssRkJfR15qLGJDeld6dyx3JFFofDJWSU5EcUtPUllFWFNoXihdX3lwPXRyQlkjYzY3ODkrbiJeZDk5cSQrKkhQPVcxbXAiX3dA''@;'; put 'put ''aDhTVzxvPS8lZFJ5JDwle0dmLikmTGkiWU1qfXFXO1d+cixbPDJrUDsvXlFDcztXaF4+L2dAc2BaS2A8Uz9NbWA8LzwyLExnMm1ENVZqQUI6WXIkKVJJPGg4K05jQH58d3M/RS9AZC5zam8zMHtdS3ReZW8oWi85aF8/TSFuVGo6fl51Sm8lVzlCIkNdL3BMWz9VelhFdEImbjY0I3JzayZDIisx''@;'; put 'put ''cSxfP1cuKjNTMHEsXzphWEdHLGIhZT4iSUhuND1aUHIjbV4vO2ojbV52W2IhKms6Zml+d29hRXx1SD0pbD0vKVpvTXAlYG5CYSkrPHNXflE4VHZKXWt1dnpgcXQ9L3liQFc+fCV6O0pTQkNqOGZyWGI2UmNnZCgqemZ8SEc1XjgvSj95QlhIMC9VbDk4Mko8NklpcWh7UnVGRzQ1enFwPk9qMnxy''@;'; put 'put ''RCQ3MiErSDwqKyE/ZjNCayFeQVR4SWg7Xkw5U05Adjg+cEZtUjZycGJyQ1ZCVyxqVl1FNmxxOGBXTlBFQ2NkaEA9cl5HaE8hdjBFOkZ7UjJuPWApXU83UT5LIn0yWCx7KkVgT3VbVkYmLDlualBbZnRRUFdqUHZaMDZrMUJ6fitMZDZbJkQ3QGNLT11xTEVHdjpYYD1GfDl5cWord0hbcHkrXmVg''@;'; put 'put ''W1QkS1dzJGMsOFJORU9zcXkjUEB6Q1pOe21ONkZBSCoqRzN4K2NsNmZZZ0dKSno8MV1OeGl+RCZqJk1CbTs/RDMoQGxiQ2AhL3Ihez9UZkhTbksmY1NjTGBPdkc8aS9wWD9yMWlzZnVbK3F8emZZV0lmXiZUVE9BQFMySjcmOUtMOWYsZHIrZlY7U1hiOFs5U15Bdj5gTGlxeSg3K15hUEYpIlA8''@;'; put 'put ''YFhzYEFFbV9xeURQTmlZM0heS3BGYldVayRLZz1yakwiU0phaFE5bFAhXm8zcEYqPyg/VkdFYEN9Ujw1aSVROD0/LkguSltoQ1o0PHIwM1Y5RE16KjZhS3F9RVFQOFhlcncreDQ6UGIkIVo5Zl5TQ15EYjxwQVo8cSt+ZTArVl1pQ1gsOHEuNSF5JkYjdD5fYVZKWDJvL1ZCWndFMkt8Tk5DXks+''@;'; put 'put ''JjEiT2EhY29NbGx6ZVRZbjEjaXdpcm9Zal9FKUlkPzNlS1lrXjlpTn5ELDR+UXZvWmxSJi4mdD1wQEUoSlEhbn5ja0dlQ3NoW152Wj0zLGdiJFJac1sqaFh+VkYsJGRobz1GUHo8bnxRTEMxeVI+X2dtPyliTyYyW18ze0VgXTVfPypDK3xWVUAyNnYzMkomQ2dyVEY+fCJLW2pyJFtRLEw3K3J5''@;'; put 'put ''bnRzYmdqc0g9aCpzSkVaSEh3OFQ+akohbStUVDhAVmlodSpBKzBTV1VORjs8LF9NWix3aG1SUjdMZlJIdntabVVtPC98OXt0ODtfIWozMDxKdXpJYig1PUl1On5pO2pkMDBHZHtkMXY0c2JjYGlbUDc2KndLTWprR3clM310dEp5Mz1bX3FzN1dDeFl7XSwhcTAzSyJaVmtkeiJqO2khJiJxTEB5''@;'; put 'put ''XjFGRTl2SGJYan5zdXthc0lIRjExfE4pW2csZCFdM3VWMlp9KGlzbjFAQWl3akY7MTo7Kkx6I3F6OmlUIz9saXBYejdePWhLSF9YZUQiX0BSTHptZSkmVGEpOn5ZZTgucUpbe2FiVjRWYEM8aEZVfiNANWlYPWZNTlZEP2dzVjQwX2B6K19dRiM1NV9gWVBkPnEsUHExLjkwSllyVlY9alZBRyJH''@;'; put 'put ''dUBCYiE4eWx0bCFsKkR7a2RILCYmJU4qSTJoRT8wRCtha0V4Q183fWR9KlF1djoleHBmOnlhe0xPIztVV3dbPFI+SDRSPkkmNy80dGVXRi4iJkgmfV1kJHJzOCoiOF03Z3BZWCI7NXZKTkMjfntnWyxNK3Zld3BpTDVsIU8sWzBAWy5TYWd0JUtoe2A9clUoLiEiclUoYSJdWyN8d1BXW2pvTyp+''@;'; put 'put ''QFpvL31MeDgxLk5FMngpQDBSTy5mNF5keio3VjJyJkkvbFt9JTw1I3dIe2lgIXJROFB0bEBtZkh8VFAqV0xidk00TUxiWF85XXNdS1dBV0BqTkhQcjtSUXV1cUxLITk7QCVOcCw9dS9lLDI9XSQiVSNDaG9DU2BselpGeyhjYTNVTnV5VCE7eUpIbXk/dS9ZMmVVVnpaTVY+Xi9xK11UWXgyeCR7''@;'; put 'put ''JDRaRllgfGhwPlRqXk9lU1ZYLHVRZyZTKVVaTVZYTUFNZTE/ezJFNEFISmEzMilLcDspMT1WZGhGaWYwdUA8a2EhZU5tUipefWNATCNSOz1AYytINSh8eSZYcTEicntNYlNCJCNXfj5VQm1sLFdMfTVNeE5OW2JTeks1a19pdUhbKiQqNUtJNzZYTTdQc3ttUT5YbmozQkRIIjtXWSFfRnh3akFW''@;'; put 'put ''RmV4SllodV1MaF5WOFdfMytRfF4yRFA6ZFR4O1cleTssc3daVj05ZGVzM15hYzQ/LFN6PiVoImQ/UX5rJixuOFhrfVluYTY9PWFaYUV8WCE2cXBHIi5MK1VTTTFpeDFzYEQ/YkQ3Qk44JkciVnM/SUFHalU6MUcjMj07UkFNKzB+NXFIRGl1JmlkI0oiRjEvbjw6OCErUTBzd2dGPVR2Lyh+Vm1T''@;'; put 'put ''L0VFWD03ezd1SjdzfHk3IW8wYGIhfVhPL18hUm9NRXxLI09GVzU5KDBxZEtvWVhWK2FBeGhjJiJdcWVOfGtxZ2NTJUVlRE0hUyN5WDUpblYuekhQVl1mIXQ2b0I8MFdHQWBPdSx1VXI0YXwwPTBbJUBaW20wdUwwcWtOISgpK3NfOzVFLDA6Vm4mNmNhJlRIK0pzUVljKGY1O2M/b3F+WiF6fHh4''@;'; put 'put ''eyJlSiRCXUEwWGNIbCxXPFsxd0Y2VzJoYjZpOUxwdysodWNwNyRVeGdRYFIuIzhraW45JnpgSFlWPnAwTE1FcCUjNWh0a1VTdGlLUi8ka091WDp3YTFPIiQhOFtFbXEiV0YwMUMzU3M0NTJxRW94QCN0O31tN2gpM0s4ZWEpe05YSilALGJsejJxRUF4NjNvb2Vhc2VeL2JyQSNzeHFFMCohTT0p''@;'; put 'put ''NFE9XXttYjg1KVNpZXJaVnZ4YE5oIVdUYElOPW5ZOmY9XUp8M1hLO1c9QCVrTXN6c2U8Ok1+YlBZVHVaS3JmNUxifF0+dGkkO1htc3ZNYiwxTFkpXm09Mz10YWl+JHZ9ZX0oO04oWXkrLCwjbn0uSG49YkZvQTN7PCQzS1t0LlhaJSMrNUdOISxmXkw1RTxibyE+UzIlNSkrLmI/dlNFSTlXa0hj''@;'; put 'put ''UFlUJHg0Izk7fGsvSG1OWDJ6altbOCFTOG9xM0Q6NUhHeVo+WjU3VUhNaWtyWF01Jmp5cWxFbChQTStRZ15MUVBpW1FnISIxLFcyTmxrODExTXJXSUR4KTVPNmRncUVLO2JGfChNV1hndiRxXl5sUCt6Z3dWOXI9PFR3bkcvTV82MFB9TD4vWFVzQ1suTXcsXzdnMkQsLFtEVlNaSlBIcyoifXdQ''@;'; put 'put ''eUR9e3h3S002WDtJV3d7UHlOb3VYamIyWkZLKklVa2EySzd5RVVlPCZbJSZjSlFuI2gqe3E4SGZ4U0lUM2xdalp9OjVTYE5SOjVSSWdhXWooS3dQVyx7RUxCdmkmV10rVVl7TX0xRnopK2RhaWpLKCpHIUJZQDM/JllxOjZxTVNSXX4/WGZESUtNamZgcUghUjdrfTUrRWlSenovaD4jOGEqVmko''@;'; put 'put ''ODZsP106M0FjYmk+azJUb2ZITyhQcmR4SV5FZzRbdUsudGNjKGJqamU9W04uW0V5OEw3U09eeVBue1JxR0VKRiUyW243MFU0IVJQOmtMYn19Xi9SLzFQMlolV0phI0J2eEB2a21vJWA0amZ9aVRtWSZifD4jOXtWMERleGZCU19+QkkjMndKVDkqTExDaDBNRG1gfE94dnFNSUMqWj1jXWFHdlov''@;'; put 'put ''fnFnO3pSRCF0eVpuUDNLS0w5NEg5c3NmI3ZkKFBVUko2PTdmT01GN2VQX2AoS28lV2xtSztsLmtkQzAxcSo7TDwwNl1LImpEbUpfbUFZZ0NUMiJ5VXpYRzxTIXEwNmZMPFNfeCRFLE0jSFdsNFBnNDIrV1JSUT1LbHdgSzp1ajxaVEskaFdvakpGR25KQlRsSG5EYSJdZD1ROlpmV203c3QqXm5H''@;'; put 'put ''OXQicEw4TGh+OUxlKl9bQCQkKTk/NmEqRCRwMi58VmxQdjtjZSUkR31YbDBKRWtHISF2NSl6K2RtOHUuTGFEe1JOdVZmXT9IMyZkTix2NypQJEdZcDA7WURWdlZ0V1ZKSi5NUVs3SFliOzUyKjwxOHhgLyZVb0NsRzRCRE0uckBFOmkkIWQ4dC8jKXgrOj9oQDZNL0ZfNUB0Im58SyNXaD07Q30p''@;'; put 'put ''fjB+KlJNUyJMXTp2UjBwR3BASVI8Q09aKHp3LjtQOzNndFlAZW59IVtQMUwoTlVfN0xnaU5hN1A7Q3pXQU9IVDJDV342TCFYT1QvWjtGb1hgWTNOX3ZgVyo0IyEqKFNqPmVaUURmb1FRdTxReTA1dUx8Pj5OVjVYIilHIURvOV5kc3RJUzJaNTkjezxgdWlFZzddKkVsWjlSKTZiTHFzWyIjOjJp''@;'; put 'put ''ZjouamZLaFE6PS9MZnFpYVZAY2JGYCkrX3NicnZqUjJkPFg6On5XcytzKXoreWc9MExARyNLKSxCRU57K3JZKitbfkwsYE4wI3ZJVkVPJjpzQTBAPVV7KTkoPU5ZPFtHXmEiPGhJbldlYktpWW9DRS5gPExQZiVgJk0yUUl0SWNLIVVJdl80UTgqUXFJJHpneEppUFNZJTx4OVZ4YmZsZmVnJTJQ''@;'; put 'put ''VD1BfXx8aWttMy9aIjspUjpkPyVjQElNaC9+VnV3QEVLdzpoMmcvdzlQZDZjIUlmZWUwK1BieldEWjgzN2psRXQpR1V5dyV4MGNpWVphZW81LmU4UFAzVGIsPyFNJiJ3WmtaZyZnUytHekNKQERaPVBvNFpyJXwvc3kmME1OQilLWHh1fkJHO2NhSlZzOk1GJV9Ya2ZmfEZAczd6NClqcmZdIjQ4''@;'; put 'put ''L3VAbyVEVXRqT3hjV0xaVTZfY2c+OWUwUT0zPTkkS05+NmVpYDRPSUlob0RXOlpAZHx4Qz9LbzNFOVgmOE1QTyheKCJhajliX1AwQXshMSJHSGNxTyQlfjU5Vi58TFp6TTlpLFNeTn0ycHtxMTllIUAyT1pBYCp3NVdIST00YXdCQzUrK3kkUz1mQDBxZ0l6PGJscWV2OnU+VylDcF97eEJ9Likl''@;'; put 'put ''PW4mYHgoRV5uY28sbXxAW1VdPkszUn4hNVZkdnQje1RYJT41ZllZKlZuMT50ekFlTiJGV0czWkEqI1VBZEJSOUAjTzgxYG1eZiVjaDNNNlhaWXB2NXgwcU1gT3tPPixycmtxJjR4Ni5hcykjOUtuNVteWWUlPH4yImE5YUI3an0xXns9cVokK09rPWs4PEMmQWhrP3RtIyFScC45RHF0VzQ1SVVL''@;'; put 'put ''P2E8U3BfP1hgbXV2dV4qc0pfcCslIk9gO257MX01c0UlWH1HK3lYO3NUXlMyd1AmU2RjcTRELHJPXnR7TlFoZ0N9L0JXVkFFMXpqP2VXVjQ8ZUBpXVZQVmJwanRyXk49V0VIPTU0d2NeWV5KSWJGSFlQb2g1cmUoNHN6ejJ7dWd4U2Y4fF95dl8kMVA6KT8hODdtVyNUMzZeckpObz5JSjBaN3cu''@;'; put 'put ''UTg/cS9AaG80KkAwZm8pVTY9cGlrLCIzY2gqbkFHXjplWSp7elUqcSI8cSVJMlUjQyNHc0kyQFJnaVBTVGdfayhVb0cufC9RVypKL2w1cn1+Ong4I1sjfDhieXZLPHBBPn1tLHRpdiEmalgsVDljP05mZ28vfk8iSWNpNFs2Zm1lNkxARXB5ZTR7OHhfKm5vUmdOdEdgYFB9eTVMMF81XUR5Un07''@;'; put 'put ''c3BKe0R0VyJKP1EvJmNQI2pdKkRAWD9eQD9TcGZDYD5Idm4ia0lPMSwwLCN4IWpqJCopXSE/OXF5QT1rb3ZYLEd6dmguTGIpeGM1S1VBJTNUdFMvKX19Xntwe1teeHlFYT59SjBZa1dyKi5eKFd9MC9nakdKTDAqcSpeI3RiZzZjMW5oJkZaUDtLKFBCKnw6UXZIWVEyXjlpVH4sZz1IV3ZyTykq''@;'; put 'put ''d3p1U1lpNGNiUEBJeSxET0ZQUj5vPU01KStLNHB9alNUMTpnSkltP25QT2QyaCEmfVBUMW1FS0dJenYlaVJpKlJvRDdhdSozYUkjdmk7d35hbSpKQytVeHpQZmgpfTRlVXhiK0heUkJ4WWo7OUQwNWs9PFNPRSp7Qml0PkdGNSo3N1RINnU3Six7KjNESH5UTyRhKl15cD4vL2h2dnxfNFMsXjNP''@;'; put 'put ''Q3x5Oy5OWSlhOC95KTYoRlVEaC8qb1FCNy5mQUVDYGxYRkMuTEBWQ31sOTk/Tm89OUohbiFafEdVUTJwb25eYDhxSTJ8WVFBT1JpWSpxOEEsVD1pcnspWmFnZitvYENGMHxHYlRRY3FZRUlBSC5IQUhRdj4zS0N3XnppXUduMkIiRnIsY0A8fTVgOldMcl1WZkVeMGkwd05CWWttazZUXi4/Vn5J''@;'; put 'put ''MiIvMTIjNm1iJE89MG1iJE89MG1iJE89MG1iJFRPSFtlYWpMQ0ZqVys1cns7aSJjXmFBdiRrTXtJWWc+bWl+VmdyfXRCLGVMZD8pI2g9Y1A1OVZ4Ulh1ajhpY1BBT0JiSl06W1JCXzpsbiZmcmdFfj43VzlGLkUlQ19SIWooeVhrSW1ZTXAlPCJydn5JMiJ3MXJBZV19bjo+bkh1NE86ayohfVt0''@;'; put 'put ''NEB0Njlmcj1mI15aKlYhc2xVbnJscEl+Tz5SUzw8L3RPQlQuJVlyNDtTNmlYcFlVO3A4Ql0kRVosSjJ7WnY2ZFIjSGwyUDxEVFliNUE9SXkpcCYzZnY4QmpMa0FtQCVOUywqfVQqT3J6QkB5Kz9PdS5ga1JhaUN+cEJsWWVjU1Y7In5ZMDZdW1NjYXJYSVt2bSx2Ty5aLyx8eTRAekhiQUp0Z0El''@;'; put 'put ''fW5WX1U4OXA1WCMqJmFWP3s/PFtDKC5RSUNIbEwxcmhUKn5MIyokSU8/InhSKTNoXmJGTH02SH1ZIWEzZWwjWTlQJjU9Rmp3fnA/Q2t6dHVeSERQSUI/RkMkMW0sNTQpQE5Hd3JUaS9kdVt5flckdklednBhRXZ6WVIhS0JHMkl1TWxSSndobGNSe0BPe2tWcXUvRn0mOFlYaWNGfTs5XWZybkwi''@;'; put 'put ''YT9nbGRHMDolX2MuT29QJTAqVWI8WlF5Z15sJWlAKGVJWFVOeFBgNTl0UVN3K3JxWVA8R1FtdnoyYUQrOSgsaHBCcGkqR0clXVYqMThfcWp1N143UEZjdjg9VVkkVHUzN1FaOHUmQCouQmNxJjVtQjZla0twKWJDNG9HYX5SY3k9eikveW9wJWEpQkhfUnwheGpaLl4zMUIsSl8jOSlSckMiPUNC''@;'; put 'put ''NWVycjtpb0taVWkqKHp0RExMOUMuYmhmVE5RbkRXJGoxd1Q6U2gybVFNKjg7IzZGVzVtckJ5Wz9faytHXW8hQWRmUlo9KFo8V31+WUlsRjtOOzE3ME1uS1k5a2x0JWxMRkwwVXl8SG50bVE3JXUuaDY6KypYZSg8TElBK3FJW0NmZ1RDK2B8a31wMD5hJi8lK117QS9vUHh7UlpgeHglIWpeXWBm''@;'; put 'put ''cU5oXWdWJSRDM1smQGNJcV8+TEZdZChraklLWlVpYHdyRXBmIXdZQWNeTC8rRnFvVGJMUFIsLGJmO2JZPGpednVkXXIlUi5JRjdhcHYqd3YhPSxKR3ZuZHd+L0RzJWE+TDV0dEA8VEAremNPcy57aVEvRUVbdXBAW1RrbUltak5obltGdVZVKUg1I0haTEBHdSUvfSw5Z3opLDpvSGJZO1orJEVw''@;'; put 'put ''Y1BWSmZ4aFRxWV0saFUyelJTZzViM1JReEhuTUcuU2pvKXQ1XzUwSVNSPyw9O0Y/TG5ZdmhRdERrIV03KmdkM2pedWR0c2Qxa3VjeTMxbWBycWF4TzN0eGBLdk4pdysvPWhtXTNJPHBSYV8lbyNjKiN8IlVVeG4wRUY2NylbYSlTXUdldDwpVDJ3LihkYy5FJmNpNmtsP3AmJT9bUmRqZ1FOTUlO''@;'; put 'put ''enFuTk9SSGo2UDMpWytAMHxBfmh4M1JTbzspTlQpcU5oQmo0blROJiVgOmpvW3BxS0M1bnIuZFBIT2RjUCUxNittMyFyak95QGtaXV9AbUxKVWUrJC9OJlU0I2BtPWhbSU9kc3hBV25DKit9fGxOfSFNSSFjd1k1U2VwcHA0dCZgP3NvVG9VdG4jezRRTjEuYlczUnk8aWB0entsU1g9YkpaSn5G''@;'; put 'put ''LnpRO2h8Sl85akM6NnpTaHkkbWpUUW1yeXZ5JHxmQEp3VVlpamdgbzQjQCR7e0JaLzpQM2l6LHNJSXVkcmtkJDEuZFUjd2Jne29ubWhVW2l1b202YVRjNitjPT9uNl03WnlBV3FbLCw1eGJ0eUZPZGhHTm97UTMoT3JtUlRCJl4/N2k4Tz5kMDZuNUsub25tOE59YU4vR05VOWlCeG5vUEFPPGs0''@;'; put 'put ''ZSFmaF47JlBZeXJncn0xN294P2B4SD9JOld9Nyo2PnIpa1E5SXc2MTcpTTsvYHdaRCImZlpgKjdKeThiUEJxZEdjYXE2ME93WjVVX3U4VyFPcmZHZS5vUi43aVhCSDchL29MTyluNjd3VWVEc3F3TEFPZCN2Y0RCTXx7ISZ3ciN5OVYzVCJWOk43Li9rTHMlPC9HU2ZNIS84TjNlT3VXXzJjalg+''@;'; put 'put ''WFNqRCRBaixTP0UhZzA3NUIubVNSMl5bMXhwYF8yfHBoSi4wYFs9eWBwJDVUZTJNIlZTeFBTUFVoXkUoWT5eeWQzPnQ9YGE0YypGcXZeJDBqWT17XVFmRmxCbmIsPTo2QnA/OGEqa3Q8SFNSMyRRSW1GTWFMJFBiKUphPWNCIndZPChDI0g4Jjh3WXI2KDZaOmAvJGI0KzM5PyZYLGo1UHx9amxj''@;'; put 'put ''NjpFbk9tcnklIkZmdXV0RDwzUkIhNGk8e0hwc2lVRnxgKW1CZG1rbyZrclJ9N2Jma1RRKzNKX0k6VFskUzUqRmgubU14ZUlsUjd2RiJPbiIxMTdYOUouYFYiP0IzelJHTyY4dkpSbmxrWD55WCl5JGgsYl0wVGp2V1hMJCRaNFtPUSIxNzZLKEw5RERPUFpiSDNSeitwbFJGOjRZdFpHJGxCTjRe''@;'; put 'put ''QzVdOX18a1FKbG9MaHBXbkRdME5HLkJteCgvWWVxekYkYlohdn18T0cvYlUhbktdcmxOfSZfL0tvdiNEeCFeVDQyZnxxNytUT0VxREZaIzIxUHpibHNwSVd8MSZDNGJkbVI5SVVkP0c4Q0Q8Si54V3o/VXRPWDZ6LFVGSi5HTk1WeHlWRVN6QmxSYndKSkdoSjpVcDs8dVA0T3pUdEQlMS9UNSpf''@;'; put 'put ''d3toLnk8fDw6Ty9oQUojJTNsaj9zJU9aLEgkZWEwJWU9KlV5fENqMTI/NiVgVEc2WXh9Z15lOnw6Ly5fJSo6K1R+Xmt1OT9dREgreTVGb0tgOj5IKlV9QkxbW0EzWHoiOT4rPVNMUFN2W0o9cD5DOFpBJE5hRF1uTnRYdHk9RWdmQHd0L2pnUC98JnJZWzpNTXAlVSR0IUE0MG1XPXVGbWZxJVs1''@;'; put 'put ''MD1GeCZCdEo0RlhqQnxoUWxBdHRBNGJwOVZCWGZocWcjSFVLdC52QmYwSjwpME5YcDFYQnhpUmQoQUVBdEVhUyYpR3x3cHt1UVAvK0VTPmsqXlNqeE5tZypaezE3YSNlailSVkh1MCgqQXMvNGdTJSFQQnl1Ll8zKyxCb2JFN3hDRFlYQisxdDA3NkdxXnFSVGpba0JLVGI7WzwvRjgoUE52cVh2''@;'; put 'put ''XkR7S3E7czlhPjdAJSF8KGUifDJxIzkpbjplTXV9Kz0oIXVjNn0iaHdHcSp6Ijw0b095RzFPNG40PnFJbnY0WWNKOm1pMHtMcThVPEszJH41W15XVG1FKDBuY01qNHNkYzc7KSpLXl1QRHo4XXMzfWtBPGUyckkiaDxLZSF6ZC4rcEhkbGY8NzZ4Sj0pJSZSbCJsXUg+fGx4VVU7L0dXYFI+Jl5g''@;'; put 'put ''ViU+fF4/Qys8aEgqdEdrMCFvdUZ4MnMzV2NJVDl2cjZibXxuN1UuMVdeU3UjMl9ya3NhfW17UjN6Uj1VN2doJmdrPV11ZDdnYm1TOjFMLjxHdmZnKEh3QEJYX01tT1cmOmk9Rl9iVndkbjUmKi9OVGMxMUl1Lzx7PF1ndmk+Lz9MaSp6IXthez4zPHkpO2chfGF2SmUuekolRzdxN109LjdQfCVz''@;'; put 'put ''OX41M2czTnREa3t1WmQ/VkloY2thdXFSWUd5Y3hqT3c3LEhGbn1tSndCQEYjdCYrdTdIPEJEPTFUfl04U1NQODtrN315e3BIe0tOS143fWBASFl+cnU3VWkiVWppS3Z7blA0XWVYWDg4In1RZj5FY3g8MWoybXwrY0xZeTJBV2tqODE3U3ZrOGhVKzFjaGI6Nn5DdUg9dSlpXV80SHc6LnNHMTJv''@;'; put 'put ''YTVTWUhSI3cie2NbSkVpLGlFSlVWWUpQV3ZBJDdMfFI9OXJMeVhLYCMzJDlNXV4yXz1wSzpQZz4wZ3VaOmhaSiRwTl5pdSlqI012Rj9GTzBdezRMSEsuXnF3TD5zajpbbktpWURVentdTUtPfSNOOm8jMUtBK0NsXl9QWz5sZWJfWWshQSVSISUibX11Tnw9K2ojYlBkIzUxYStPNztyNXFWLF5s''@;'; put 'put ''TEFINTlqRXoodHJGRl1wIV9Nb2hbXzlhajthdDExK3EmO0AiQ1VJd0w9ZFovPiheYDIvQTZyemVSfHFmZTkmflJyNmJIJEhoM2s4SXF+d30vbV5GPTIkVlFCNFo/Wk45UTtRTDMvLnArbElEQkE0NTxxe0hheD1ibSEmckB1TlI1Ozw4M0phJlUkSDlIOUhfQ3FyMWxVfC9wWDB8WHUjX1pUKXx9''@;'; put 'put ''JCEvfThzPEt3bEhZKD89ejFUWiIuJGhZYF1LVT1ARWU5bkk4NTx9bSR7fWcscSk4QkA7I1socXMoTz0zN0Vaezl3dE5BeWllVXZaajUlKSF0cE93VG02SW5EL2tRTjFQVjl+U043emQ3O3c0U2BXPSIvKCUqTSM9MG0vZW1vZithaTEjZGRRQ296NmpCQ0o9Ll1uOjR1PntQOy9wPVRfdSYjbk1n''@;'; put 'put ''N1FMW1QhUlJicG8hTDh1PTA4dzM2VHZrODxleF59a11IfjlFWFUqYGpLS0I2YDRVVz0rbGo5Jl5EXmxFNyZqZC53R15gKjxecSZwISMsb1lSL3dVTFc5Kz0yaVgwK1VBNiZ0InBhPTkwX0MzPW5PQDEjJmRfcmJvVEI8ej5dJThJNyQ9YSFnUWFFMn1ZSm5LVzNPa1RWcylPVy5qXn5APFRZOkAo''@;'; put 'put ''W2pAfUV2YDwxXlZGaz9+Yz8lYyRPPXReJDJ9YW4zZ0VjbHo8cSVTLm5QcFdzUjRwdk5dfGVmdDpYYlpKe0Y9M04kZ0Z5YjFOMmpzTyhJXzJaTyZqfHIkaUZQOEAyaip6VFpBaCU7KHo6KDMrcVJQelV9SlFob1I2VnsiXSNJQENGVV5aLHdtSlFTJn14ZGNpMTIlK1NLeHModUlPKD88bFU6WS59''@;'; put 'put ''JThPM0B3a0J8eEgkbitEL3tpMj9LSjZNNW8hN1V2fD0xQkRDYyhDRCRJOWg7eCh8Vn16KmZXcnlwdDhqNU41cnBMJFN7VE5Yemo4azhYOWEkbndQSzhoNHMxKSh6JSllbzlORl4jYlkodjxTNTdtLD99aE9kUyFJPD9yLylJXmY/L05ae0F7UklYXTp1UW5QZEljYTNjYnQ8ZFk7XVh2P2dgRl1k''@;'; put 'put ''ZzA+bmI5Pk88SzhoKnRPPWMqOzt0KnQ5fnJUMVMkSiUsKlJkJHNMWFFEUUNDXUFwNCk/KlJkOWxPZFA8YFMqVEVLIjVRQ256JmpXR0UqYCgxXm1sQmAqPHdbJnklWih4fjRaOWd0YFlXZG1hYTk4QlRAbU91ZDdFTE1HKHpZajByezlRQjc4L1hdIT9vNUxZNGNJJX5OMzdEUDgzeVcoeTB0Kj86''@;'; put 'put ''V2g8ekkmOENAJWpTVEJ7aSs2PnJ4Rz16RFA6InZoVn5xeGt6fWEpImFfQG5tLGB4fS4za3U1ISFfYXxncjVtN254IXg3fU9IOjsmKFlnP1ZJKHRFZUIyNTFmYzIzYCt0aHxrVFpyTnFvPGVELkloMTZXW1I1Q3MyaVRpaihKI1JTQ2VQdjtHLk5CeXRDX1NKPHA6OF9GMmkzOWp0SX5uPjZeV3tU''@;'; put 'put ''NGlpXltufSFQVjg1KFFJPFpLR2kwZmx6NnA7M2JLWj85ZCwlfU8jfXdqejRVInx+dVsrWG1+LFA9K3BySiRjPm17aCxwfXc+bXpecFt7SlBXfntAejRtK1BiWz5ENXVJblZPRTxsJnhAe1EubCZ+NUlkKDE2WnRKQFZkKDJ9O1RGRDE/OFRhPH5BamhEPjkwYiZPM1BlVHRsPUl2QmhFPGBJU25x''@;'; put 'put ''PyV8KW00Sz0pMnlzIjA+T09fYjhPdj1oXk9oIT5fSXBeNSFOZSJ8LHxNRWpueGlIKnxZJTZsXjl5cHhweHB8NzssSyY0KiM4NXsqN3EmS2RZRUFRVUVTM1drTSI6LzgzPVkyfnRPPWZrMGg7VE9RdGUjQkMkJmRpSz1Jdk1Hd0lzSlciSCNbfUtmbj1saD4iUTReND40T2M8VDRFWU1pZjojLkko''@;'; put 'put ''M1ZiNWFKd1JLb21GfUN8bSVSIjxFNyUwTHBGNUV3QnRrcktZOHNlaUgqJmRhaVh1SEIyKXYzMTs5TVZ4ZHA5aj9tUihmcmRJfllsIUJeNlIrYXpQM11mWl0ofFpOKihVbERSQjk4QV5wdys/VXw4UWFuPUtIR0htdixZLncyZixVaV5LTkMqeFd+M3x0b0kkIyJzSUV0S2EiQ0I0QEtaYnBqbVFU''@;'; put 'put ''Q318Pl0kKlI4fiRgMSZrO3ssUE1hWUNCV14mdyliP3U4cihHL2x1LnpLV00kUzZTfGY6Q0MwKylye2VwQCJwOyUraTEqaThoRnh6cmdjaGpUe119XVloPEs3Yi8yUGJYUjVvcmB+KUl8cDpraDBATHM/STJyTUk5UW0/ZTl1W0JGdV5EOiRVInBdTzwkVEV+XUdTKTFxVXJofSkuYWhyMWhncn08''@;'; put 'put ''R3ZxWCp1bEl4WVp2Kzk6WzBUMSRuLCYleWVmKGomM2g7RWVwZiVnYHx7cl12PSJ4O159eF0ufXxJRWZBTjo6eVZdSFpnZnBALDtTa2twTmx4NSF0Oz9mP3g1SH19PGI6Om4pcD8oVUtyP3NGa1oxZnMpckZ0VTYiQ11WRisvS0NOYmdCL29HISJVaD52STFtOiNwXSFWOzVIL3RhYmgpQm9XI2dW''@;'; put 'put ''YktqbXVqMng0RU4oIkBnYVdjKE1seWh6RkpLYXVXSTM4dnBLRFtERl4wYjJQcTtDfSIzJWBEWnQ6eDNBTFA/OygiPEBwIVFkJF11KCh7a0lmYTMiIyRVc2ZjTEhCe3Z6SVYvUmlXclpzRWgzVFpfcnBPZFlyLlZmKDt+cDM3UjtYUlA3KTBkO1g6fTw/XksoSEFhSWFyUjlQQnk+WG9jbnlXNEAl''@;'; put 'put ''RjAwdnV9MmF9P21LTkNOUDk+UT49K1V1QWNeZi9JNCpGNnZZKVV1Xk0oVTs9LDcsRVZnbngvbXBEYyxwe21EJjJRTi4vOTVdSWIpbWNYJFFCK3N4WkMjIXVJP00/ImshdlM6YElGIWxoQmhGVUxPfGJzUV8rXk5sI1E6TEVOaiJgPF07YTg5ZWtwMDUsI0hzWktueVpmbU1fSXtnSDVxOUBvTmF1''@;'; put 'put ''JnNOckdme3F9RHxeViVOXTlCQEtEPTZGdSs/bk97bkJsQkR4OmQwRHEjO3d4fE1ATTtNUSl9W1NEI3I7amMkMTUyYUJ1QVBeQ2IzaSZrLDlWSmpMaUkqYHxJNjNYZ09RbXlQOFQ5c0IwUCFMZVc+NEohSUV0XztaPCQ/R2UlLkx7PiFVSUJ5T3YmJSNqd2wiV080flZUM3s0JCVkLDpEYTUsbyVp''@;'; put 'put ''Wmd7clY9IUgoWSQ9T1ExeWI/MmwqJDUwRUQxNEJDeVlyVkBzdF4hbC4wLiRWSjIuN149Oytvfl1YMnk8QWNBTGY4eSYkRV41WzljaGhhPG5yWkNJLzxFamRPQkVnM0dsaC5IbnpyXiZobFhJKzZaPCZqUGYvRVt1Y3JiRTIzXSF8YyRwNHdnP2BWe3V+Z2JEOmkiSzFZSks3Z2gmdU9lKjciMzdQ''@;'; put 'put ''TG08b1MheH12LFJCMFYxbnhNWmZPWGskd3VQa05VYS8saXElcWdyVV1LV3Y+YVdPb3Z7Lz9jN3pzeyopSVlOTT9IT3dRT0JhXlVpOXUyWn4rMXRRfGJed2V4VHlBa2s8QVFRZ1glZ2dmK1tfOGwqSHhDOFczLiteVklHP0hBUldQVTMuK0thYSlMKVFJMVk8dXl1JWlwLkhiRyhXRUlidjQoa3w6''@;'; put 'put ''T1AjaS9JcnVgaV9mLiMobF57RW4vQGBuQWkodn0kUTBRZ151ci9JWnRlZTpGQjpQJiwzXXBQa3hLO2N5WT8yW15LWSIoYnkwR2lOe31qXy4oOH1EMHYydEsxWCk4OTg4KytaMG9wR2p3cDJXM1AoOSZJbksyWWQ2X3F4MVg6YHFJNV5vb1F0X0U4Q0p6RWllaUY2NV0jLztZZ1RVUz58W3xfJGkr''@;'; put 'put ''SUAwc2dPJnpsfUhRaF5RMzFRWkRrZyQ0RzBLJlg6W2BrSjk5WDF1WywjRmE4b0BTPEFEfSRINkkwQG9ZYTRsSW5hcEdubFlHbltZL10ySWEwNzFNIz8/aCFOOTRuTjkmS2pOdDxBazIxNTA1OSY5eGwqQH1yTGVePmljRGlfNGx7JE1LRissdCxoPEdNaWUyUClbUFVONllOY0ZNUHV4X2BEIUZD''@;'; put 'put ''QzYlNClSLnoiQm1VdVMpP15sNX5PYG99cUdxMSUmMzxCW19mQD1oOVt1KCpTcWBOR05ZXUthIXBvO1BrOTshOWIwaStxOCo5bnZhL1QjKm1iMGA5Yk02PzFQOXtwTjxTQmBteUtNez81PGhxREooUDMrWGVGPCthfHhBJSo0RDk1NUYmfThLOkpMR3VWUTx4aTtWUClbS3pHSV1JdT1yZSo0PSMp''@;'; put 'put ''dUlFRF1TNWs5X3EwOCg0RU5hanciXTB7akhhajhWZmJoQToidHgkbzhWZj5ZJixob2ppblBtK3wlXkxDPyhAKT1fXmZvcnxrYDNnYTBrMCEqWyl0VSNSV1E9SGw+eGVgcGBzNUddUkZMT2cifTI5KD1HISk6PiF8dGQpQzosSFI+TSYkMndYZEVMUHMseWw5QHMmJi90VTN2dldKTiR8YFAkTFha''@;'; put 'put ''YVBQI1hELChHWEFSfDgzYmJOe3BMZU42RntBaVJSQTpvJSsjTVF8OClpN2FiOHd2R3gmMDl1bUZWcXxLdTl2bGJDI2x9SHQ9UiYmL0g0UDJwMyokekcjbHM7LiRNO0xubDBRKHRJSjlRZkdJXUl7d1prMGZbWGE6fkhyek5sN3I1NEd+eXJdckxXdlgsemxmZk5gcSl9X0NPOyxbJWd+JV47YVFT''@;'; put 'put ''KCUsMSN8dDBscnV1WF9EWk1pZXgxfnFZaSY9O3oyV34kb1EyXX16KStnT0YwUWlxdl8jUGgvdjgxWmluMjFfKVMmOGpYcGF1eXReKD1kLEcwajswK0lKeVE2REJRQk5AVm14PmQrSnBJVl5OUndfJissVyxUNGZ0Izw5PVNtNyp7bS48LHtUU19sQmo1bXhJMzQ7O11LU1dJKmpUZUJrQVVUcTJm''@;'; put 'put ''Ylp9KlhQNylMeyxuRUo4ZC9MY2RnV2RrOHtwOUFZLitQYjpoL2JdRilQbVtTI09sKyM6PDUqLlRNP30pe3BCYCJWNm1WWzVCVVh8Xis4Qm93JHxJV0JJKzYqQi8vLnQ6UDNdenRDek1Tb0lkJTlYQD1wV3UvNDE9XmIqPEFIdC5CI0hXVGA4OjtCNWZIXSRPSGx2ODN6NVY0YSw8NVBIbXwjQz1a''@;'; put 'put ''NW5RPGFWSzpXaVBNZGI8LDxpRUZ7diF6c3IuPTNLIWUxemk/RyhRUDNkKDlUSV1CbXled3xacHdbNU1+I3sjZGszSj1UUiZ8TippRmciYHFre3pPbGVjZXJCci5SKnhSIzJqZGNMc3hTaXEzNkhpZnkkZUtbKnNzc1hwOTwzP3JUdWREWyp3fEclNkEse1tAVlt2ZnIkVzl4UlQqI31gdl02YThX''@;'; put 'put ''MilQb303NXJPYVhxP2V3STYhSSRNJi9pLix4JEFlRF8uO3FfOmUpQ2xMPyxeOG4hfDBzdXF7YEoqYSlvUExwJmUqeT9bSFhfKm5JUEJWfTExS0A7ayVBbnVsPDl1c3dzOyhKZiFJZEQ7SmREYkYlUW9hL0R2JHk/VzwwcDB6KCkwRl1MWDlddzlfVyljV2dLNTt8bDh9aThSVHVpMD5RPWk/SWhq''@;'; put 'put ''fiRwZV9eanxtQipzaipKXmlyKFZWR0p5MGRfI3BgRyZqOHBJVT8wSVVdTCVSQ2VNZSg1Y1BbR2kzIXF4dih5ZD9SWXFFeTk/YyIpRlJ3YCsvcU4sNmRWaWV7TjliSjMrfEx8WCZbeGxSb3ZodzZgKy8hWkdUYiksKDY/YnhQbVsqWXpCeT5LfHpfel57Lm5aeGApVlV9Ky9MPmEoVU5rWnhXeEle''@;'; put 'put ''SWBWXWkkKjR0ajpiYXJ7MlQwPDUsfTpiYVt2dTsxSzMudjtQWVoxLnxraEtIZUxsJUkxOklzNHVESzBzPiFPQ3pNRiwvKFlxfTsmW0Zob0EhfEJIIl9PU2VHTV1DIUV5IXRlVkxmNyxmT3RwY0dIPFcrfSh4P1RKXykxLDdPdFBoTDs0P2hUOCE4MTVUOEd6RWBJaFt0c0UoS344W3RBby5hUUQq''@;'; put 'put ''QlY1JmZtZmJTcEp4eihGbXRda1Arez5RYyVGQyJpTDtgWkZTaXVufUxJVFJCP1dxIyU/M09qRCEoI1lLQDJbbztnZWN3Pj5BRDx0YFFdcT8jY3l4cSQ1WkJrWFB6XWtPWmZBOjQqSzBDMlZeZFQsRzgzS25rPyY0LEE/e2YuRFQ/fnE+U1BnZThucXN3alhjZi4rXnE/IzFIV0dmbyxHdHQqNCZm''@;'; put 'put ''SnRyTF1qdEJvdV9MNVswSElSPzIxa3ZEYTJBbWl5UEZLU01Fd1Ixa0JReFp0K087SUclSU51UjsyOHNlfjg5QisoTUgwMzIvVHxwVmBmaiJxVGlDZVhFRFQ5aXkiMGhOZHUvKHNJSi47W3pxcT1aKDI7VFZXdT0+VHF5SzZDQXddazhqY0x4TnBaWjJLQ2RCOi8mQTpYZix7ZGosImBBNDNLbz8o''@;'; put 'put ''SyVJRHU1emxnOlo2SUVIJDM5dHM2cFtkcWhRRk46JGZyRlhgaDYsQ1o2ajtLNml2JVMmYjFmci5ZaCpsUyVQal58QzxAfGg0dnVlblRqRCpJY3BpQFlRcTpwT21GKG9HRiR7SEpaOmFqfVRFcm04M1hSNikwQyoiMkl5JC5gOSIyNzNNdyxjT0N8O3tbJlB5ekJqXlpCUS9yZlB+RjkrT2AkUTxL''@;'; put 'put ''VFo6MjFUO1VTVl4oVGxoUlo+WzwrSHNkOVZoUjIpTj1DRE1hbVFXMTlTbG9ESWZWZk5VVjVSI3E9MENeYUZyU2pxOFk+TSEoYWl2cVE4I3xAYSJJUlkuQz40ZnNpdyZbcVZ0MXMlJj11czlgbyQlL2tgI09ZM3AmKHAmJUxxMmxrS2g7d3dDXyg0TjQsb01hc2ZYNV87eWhaJTcvcnBlbjZHWnhe''@;'; put 'put ''Q2J9JDRLXjV0Izo/MnNvI252KmgsQ2c0VnxHVmBjNntGcEAwKz8wfVlpb10xR3lAcEJaPzVyKTlCWm1eTmlgIU5BOkRPNFBjQ1M3PUNydilydjJQZjJGOTk6enkxJmlxSEdWXVR0ZnxRRDU9cjh9YEB0czpuWlcyfXs1Vn4xMD0qdzNqflFKPTI4VUE1JjkwZFt7L3ZDdjxKbXJERW49IkJEbmB3''@;'; put 'put ''IVtBYGp+dDMkeDcwWDJeP0FYYWRwPiI2JTM5QE0/QD08blBVK31BP141KCxuIShkdTp1cV5oYF57P0IpUlIpODVTYU1AWjs/Vzw7KCFxMDxIdVJ9V1IyRCFzIVVpP0AxeCYmbkNXbjJ6fnNkcXRPakslWGV5ISldbUkySEsmTT47VmBqYEB8bn5oam5ncDhVK3wsY11nRl8oUlJ5TjxudSp3QDtt''@;'; put 'put ''NSltNmZhSFt5cHA7ekpfJE9gLmJ+QVR8RnBAKTMiPypqUmM8PEFoMVBfZ0skZnkkfGxRfUhMeiM7JCYpUmZJcksxRXRlbDAmfnAuRz5GQkUzIip2TVEhXTdmfVN6b3A1JT5iRT01PTlGS3RALGdjdVkzezd9eXM/cjl9SGRKfFVVLkd8UVZpe0M1Pl5vW31Ta3JFNVZkOUAqYF9qT2hQcXFTLGpo''@;'; put 'put ''I0hPQERlUFNXbEImMipoPWE5ak9pOChfeXMwaC52NzBVNm9yPFs+anJQIkpAeHJLeXB+MDk+XkBJfmg9RnxjNVZDe0BsOmE2clMrYCU2QF9wb3xJQHdWX1gyQHEsTntfLCZfOigxMH4sOyJ6PTQuO1ZDTFp0e1R6MnReXSxzRHZTOTw9XkB8blN8cnVEJltPSmFAQEc1cWZVYkNOcT9RLmlPRjBx''@;'; put 'put ''elpsblpST0B9Wk41V0R5LyF8JFFQM0JZV3tTYkpFaDh2SGlAYEVeMFpgOlNHOjsoX21uO0Q/blp+e2ohfmw3M0ZARj5ZIkpuZDhTQUA/aF8/eHRdbH1BLyhYP2A6VyVJOkxyNGdmVkRiO2RnKERrV0o6RT45OT5KbTdJRTkkRSp9KFFnVz5qcX4+Xmc7NX4yLCNeKCxTMzghRSs/X2lLW3xJdmRE''@;'; put 'put ''PW9BJXpiMDkibnFYeyoqVW10NWVZfSJmcDEuLEZ8YFZeP1tmUUUhaiI4Nk9xJTIwcjkmOz9dVV1VfTNmKTs/XW5wJiU+Z285X2xvOWd+VCxOVyMuMj1dSCNNPzAlWXtZVl5QYDghXy5LWXtZdExwQEAwMDA6TGh6RGJEd0ZgWWszeHBOT1h1QCVSMytVZjQrXnldcXA+dy5CVmRmfSpddndFNkdN''@;'; put 'put ''U0p3dy5YVH4uO15VdlBgP1Y5e2VbOTNFOG5eKE5EWnxecyUmPylSdTtpYU0iKXIvSCMzZE4kOHlGOixLbiFsS3VyKSIsKk0rbz0uM31mLCIoUmJEO15WeCZmJS5lSzxwQS9+ZW9teTpsOW9nLG5qd215XWYsPn4odmNFKks+KltTJVBsL1lnWXpHbm1OSm5qPnQxaHtuX3s4dWxOOUMiYF9gUHVx''@;'; put 'put ''a19nJklwdXFYODVuaT5UfXklb1R8IVZCYUR1VXx+IX4/ezoscnt9aVRCITJNMWhKeFMzVmFkI3MiTDU+dHxmNjoxR25kOU9KRUpgfSIxbT8uYCYhTT59Ukp2fT00V1dONVEmQF55diZUdl9ye3VBLEpvI2dgWmFBfmVWc2pTQysqNUNRXXs9LixySiVxazIuPSlJP1NpJjIwUV17XWlzY291Rilb''@;'; put 'put ''PXhYJTF1SHpOXnMlVWNieXAsc2BZUSkvM0pebjNmN0w+KyVXM0NSSFBHMDYvTWBiPzNSMC92TCZJJDwiNDYvM3gkemwjVzkwYzxLUTNWNWJpLj1te1M1Ni9sbSN7KnQke1JKLz4qcj4hXWkydSlaTG5ifkFIRGE9cmxTO2hSNFVjOWpYYXY6bSMlPCxrKkYoQ3BYbyY0UEdDdiE2REMjQXZyNE03''@;'; put 'put ''XixEPFo7bHhUKmVbbEQ8dT5xbmNlWWZsNyoldFtRNzNGT1NJVTVeXztDWj4+Ojl0bXNPUz8mTGQmQHNwOXJOYVBFVG1veXdFZGQrW3NTeVM8ZyF2XSgsJSJKVHwqKyFQTGM3WmZWa3gzOzUjNXFNb1NjKFpSMVolJjxNKF8uN2k4MCs8IVAseyE7UDZDOkE2eWcrSytKTk1sSFU/WkleL3ZNKmRJ''@;'; put 'put ''YTlQKk9RezY6UDw/S1AxaFtZWHRQWnozYzBzUXtuLFs2I1Euflh5Z0VFZi48SzxkQT1NUnRCWH1YT0dkaTQocVZNdXl6eT52QFEiTUR4N3FYY0okemA1VWRpR2VHQUF4MkFBTU97eSZpYkNZeDVLKVdRNER0X0NIOVloR2JSMEIrL0ZuUkFNZ0FBQUFBQUFuQiRBQ2ZhUn5dR2hXay5sOCEzR0BJ''@;'; put 'put ''fm88QmplT09IVDpVSzt4eGs+cGsqQFFrYD96fDtlVnxzWz4udEQ/YTF2K30pbEc1byF4ZCZ5SltzUiUqeHc6O3xmWVRRUzUlOkV4bX4/Zik/bDg9YjN+Q0w0VklSfjkzdkk2dy5XODFVdllgdjVXZnR2MlpzJSEoPT86SCg+aU0lajN0byYvQUJTdHN1L1RZIUNVJX03e1BoOD16JX5GUm1VLjYm''@;'; put 'put ''MDdTbHo1c0REPmQpTWcsNDRoKHNpIk5yZFJ8bG5zIV5zfDJ8ZnA0PEBbLFFeLFFXdjI0JGVHdWklWltqW095RlZYKVIudlBjYCk9aSFsMD42I3MpXzpbNiJKUnRjNVB0U10uO0JPL2RXb0oqPVVGJmNMMXM8VThbckxbc08+TmdHVmtXOk44NmVaRzpRTWZ3TF1jS0o1ayIoXSFacntfIkNqZEFC''@;'; put 'put ''X2w6ISxsKzBBR1QjUjFwTiFfMk5oNXB7cWJaXn4qaiU0X3pEQkloeDk9RUVPUmQ2dW0uNn5MKnxsfHBEI11qVFdLTnFKQipban5BbjtGSU1JZDouZzZRSU5jZVNtfWh6PVpxYCxNdHl6dkNSTS40QzJ6JUpBVkEpIV0rXy9malBpeTVwRCwmI2tpOiheUVlUX0VGQ1RXV2FlUGc4cDkvTUNnU3ZS''@;'; put 'put ''N308dEFJezgmODQxaz51LFtMOH4+VCUuZlksfnFkUjY7X3ZyP057JWBDRDhAQzZLfXJUZmJJa3VLJTRKPFt4Kj0xejVQbmd5YkhkZjdgam5zbkNNOmZiM2ZJaih2Kk5pRkAxO2wsa0ZaKDlIRD4zVno/ISROUy5oNFBHXzFBRVQ4UVN5c1ZVX3dfSUE6MTNXNnp5dkhlelRGb0skaW1jUFU6QEwx''@;'; put 'put ''UXUvP0QwVG5TWy9HVnAjP0haaWB1VEV1NyhpVj16PX5AWWNCWU49Vm90Q1opM2EzbyYuQDhZSlkhPSY+SUlZVTI8OUtlSk5lOFteZzEjPH0rbCRbZjs+UGlhREB+R1p7WmFOeXd0X1RDRWFgVVZQcyU7d2RYVnA8cWdtKVV9aWgyYyo6aGkxWDRRK09EO2wmPGElOiRXJTRZdzt1QD05fnlhMFkm''@;'; put 'put ''O04sYil8eHErekAsakghfX0jVTk3IThdd3J3NSNTZ3xaK1BWcnVERVhXXnJRcyF6JjckaE51YiNNLzUycShmKzh+NGZlaW1rYWwwbFtgMSlXMWZIQz5SfEdsR2BTeXgyfCM9d0paWVp0dEJLdlhHUEohI2dPaTosMiMqblhHcjI+Sm0sbSQiSGwrcWxvLzRnQmZ2fmI7elgyPk88YktFIVp7Y2lT''@;'; put 'put ''OT1men48R2J5dDVVMWk/W2JhVEkiKTpIQlhiTXdoM3RVLFkmcDVlI2IuLFg3Z3ImazNCdXJxNShjW3MrKVtNTD9xR04iZmhKNTEwbkF3Qy5YW294NUJVbW43SmJCaDRfejJaaT9DUyVFWTU1TUtbdjlZLjp1dSF5Mk1XczFCXi90ekp3UjJ4bDZ9R3VfRUZGUVE/PnxENHZUa3p6WH5HOVpKXU5p''@;'; put 'put ''cSsrVDM2cVpvRmR1PHksfHN5aF9DJHglXXEqI18kenczWiF7OG9lc3AlQHFldmZxIjBTWVteV1NNO0tdT3N6ZVo0I1Rbelg6SWBwMlBCYmRjV3ooM25EXXFMV0s2YTBrYDA1I31Kc0BPfltaYnAvbkUlWGV5YEBuSTtocGUuV1ppKm5HV0oidiIpYjppaX1FMDBmfHo6eCokWG11Llt3cmlQVyQ7''@;'; put 'put ''Sj5CRE9NOzs2LEheYmh7OVhCPUw7IU1xZklhSCNhU2FbQEtiTDBMLG18Niw6Z29LTDU9VXVXKUJbWXdEd3UrRHdgZGBTSW43S01kVzlDbiUhbGhGfTdLNFZAUyVKQmhRL0x9Xiw4ZkAxViZreTt2PkRhR1dibz1UWXx6O1F2Y1A7dDBGfj9XYzRdNiQzUlEmaHVBYSRCSD58YUJHRkA0TGMlcH1J''@;'; put 'put ''azZ2ZT9bR240d2AuLCZpUGFUUWlUWzYjdSN9LitPbVc5SCY8bXZLVGQ/PUI+NythZix7Uy4qZnt4dmJbbzx6UCZ1T2RbMFkwQWUjT3szU2FhcW5BQ18sNFcoWzZ1fVZBREhKIzJmR01hUztNRlYpaShwNiZDPHdMd01Cci9Ud0VIJS46Q0JuaXdAPGQ0R1EpJDhSKClNa1IyWkhsYiV0dnpzdDF1''@;'; put 'put ''a3I/NzFMYEciO3FefFRvNkprMz5QXSp1L21wQyxaWnJaJT1EKGRyTmZXMUU5SS9JMD1Ue2lYTUk5bV9UdmxTd202ZS5gLGkzIkBRP112N1BQL1VQWWs9Q1AhT0BSeyJGdGYpfF4qJmQhempfcFtkI2A9I3d+ZG8mUjpsMX49NVZebD9nKXJ+ZTo6YlovOWpdSG9XIVEpXkQ2fURUJHEzPzJ+ayJw''@;'; put 'put ''TXVwZUdqOzhkfHxtY2FgXm8jRCx6aHg9enN8OEJ9ampNdzsiKDF+NnlQQltwISt5eTw6MnFyOH5DImVMVEtkPEEhU1ZAOFUybDs9XTwqNS8lRkJaKEtsRV9PI2dkYmBDVDRyP144S0BVRiFMby55JS9jP3hTSj5WantpWXg/VyUrKS4wQzxYPkFga09rdjZEM3w+ajRZMkQlZzd6M3RbOmk9N3tO''@;'; put 'put ''a3AzaSYrbClbcmRXYkRsNHN2cmBiZ1FeSmZWRFRnR3J3KmtzUkRaOC47I2dMej5rIUVxXi88cUVTcFcoSlVIVCJxZFJmb3Q/fkdHNHtoa247SSN1RV1kX2R9Z3kuNEB2eHZxY2E5X3RQKSQscT0jdnlfdDBSZHM4NGw1XVBQW00kYXEiXjteNzkqTVl7UWg/T0M2WUNfRW8jRyF5NSomcXY8VEEz''@;'; put 'put ''P2cuQz14YVlxVlN6UH5jN0ZrSlIuZCk9IytHPSswWjM3YztyZkViWygrNn4yXWNaOzh5JDhrRjJLPGx3NjpvRVRLRjd9KEl1UHVYajQiUGJ+IU1iN0NOdH4qSCRaVXZwdDN0XkouXUhCKkROPWwhYiExVFc2eX5kZXl4dE1hMV5vPmpHPiQqQl57eXRnQUMhd1V2Qkl6TW90Yil9IzI2OHtuVFpW''@;'; put 'put ''RmovSEckNnpIIX4pOz9LNzArNU90UUFYVlRVLDVpVVQvLy8mdHQiRHt6Pi5TekRLTD86X21+enxJX3guMndGQ2xhPH13UUVPKUYjbSRzKmpmcHsqQio3JW9PLyZbNVB4QW14YkJraCNxMnNIPn5FR3tZV2FGSTU7KWh7NF1AfEpyUCheUnFLIWpAfGN1b3psZDkqPDs3VWRRRSF4TXBsVWtzQ115''@;'; put 'put ''eHtjb2dJPHlzSFowLD08dDdZcTVNPyIxb1kueGF1S191cHlQPGUyIno+T3RtfDhqdn11bUpRM3RuXTl7KjR3Qlg1KGpybkJ4Qz5oM00kazB5Qz85aSIvY2UzaFVYW1pDTipwbiMrYj9Te15QRit6IkpkRUJEbnQjaUJkKDt2QyZeVDZNMU5jJVtpJEFtNGp+LFpSQzhvOlRGLzFLVU0lNDNWKmto''@;'; put 'put ''Ung9QGN8RjsvcFN0RjQ9eGlVVHB9OnFlXSJqQGp+R09pRV5bVjheXjlhbyg9cipoRXxzLzl8eld3L2BoZipKN09vWFc1NWB2L3dROHBfLnNzPF0yYS5Ad1EwOkwleWVNNE1pJW9seE41akZHfm40U25lSkd8VDFzZEhPP11HWmRTa1Y5Z3EsMk92IjdFTzM+T0IrKjJ6WTNdQ1dmUVlLQEI3YS59''@;'; put 'put ''U25bbDJkIz87UDc3QHB4Vmc5JCUsVmF1PW5ofGw5eGVGbzxGZGBCZm44Q2hOYHFRWjp7OTtRZXxrRX10PyJBeiFQQENTPSpyIWI0OGJuSEZqNW91XXR6ZFVlTEV7PXZlWyh6Vm1Wc3ttMFBsNEl5UHsiVHslTnY5Xys7KllgZGo4YTI3KzBIWHhvTEM7cUh+KzI5MzZBZyxCZEZyTC5TcTVgd1pL''@;'; put 'put ''YUMhKl1LazI7NEw/K1h0eiRGS0lpbW9AKlkkRlNyMllrWGtiL2gub1Y3bW9JYjZZZl4yVl54VH53VTI6OHtjSyIwNCRnbTdkfiFGLCU9N0JHIU1JfVZnbTQsVnh4Kyw5cnwyTylaO2BrOyYmQypqUUs/KywrZ0ZxcC5fNDBUV2BiWEArKnNSSSsyLFU/NHxKPStAVmtwXTAkU1thLz50YHojXjl0''@;'; put 'put ''IW9uXXBSRVB6RE9nOjB6PGUhLmcsOExsc2BmbztPan4mbWJQQWJzTHNvRmFMZ0VEdTskN1FtfktQVXVBTFZPRFtHUTdUTkJJSGlpOEwiZ0IvS1YiWklvPXc7cj9SOGFqPl9HPF5AYStMezYyWjQoKi54U14mR1ZPeSZEQzp4KHkpVCZCUkdwPW5EcEQ9RH4+Rml6Q1IqJThYQyZnU1AqbzlHU3V6''@;'; put 'put ''d2MmPUdpMmIjZjJIU3EqaDB1P1Z3MXVKK0EoYD9uJF1jbzArZG00ej18OCtTWTBSJDgubX1xLDxwM3RZZmt5TEBuS29rSkRpWVpLIjJHXSg1JU5jQmN7KGZVKmFDXTt3cDJGI351fjwuWl52OylMUD9XVSo8dHxMUjkkVVhqWlZvKXdtZkgvUnN6JF8+eTxYRlNTMT1vWl43QkEkeV8oNGp2R15a''@;'; put 'put ''W2pMZH5PLzU4PjYoUUdDITEqTH5YVkc3bXsyMTxiUVBzNG0zaFY/T3lNU2B8OFI6MS8qPzVAa2JWUCFbIkFnIj9aP2FlY3FbRCovbz87S3xUPmE3RTFpN0w0ZVsmVTUsRlQmcCI2PmhMIl1uUno6IXU/aW1SezZyKEAiXlZFS0QkbyxwR2xIW1NYVVJyR34zSUZCaEh9SSlnRDxNcEZWZyljNiRx''@;'; put 'put ''Li85ZDglP3AqNkpeKGB2P1VoVGYkV1pGfmxtVGI/V2VJeHMkallBZko6PlB1Y1IiWUVaRH4pWF56W3hmJXpBSWlpWn0jW1N1I1Jee1I1VmliPzF3cDF7dlttdmYjPUBiXV1zO3Nie1olM0ZDW0YhKEYvYnhtW1FQPElHSilMW1FscDltZ2chdWR8XW1AbWh7LE1jaSJUd2lhRHsrTGhQSChocV1h''@;'; put 'put ''SnJxdyVhP3hGbVdKR1J1dE9iWyhGaSY7NENmLCoyYSMyUVM8MVdiXkRuI1dmZG0meTg2TUUvWWA1LGpeWH14OUJEMU9NMltAZDgqVk1WTWsrd2xeKCNDSXVxLEg1MVFAZG0vUWk0fTUjVjo8N1ExdC9LSz8kMkUmUFZLRUY8WUAxYS9IYzJKWX1LdXU2YGQsSVpjYXhBXUhVZio8RmIkdnhIPFpG''@;'; put 'put ''UnZecHt6bGo9dmRRI29sST1SeT0yayY6cjheQnNTJmRCaVJnQmlkfWElWFo7U2dLUyhrd1hRL15qTWs+MHRCLmNfaVlYaXVmbTA5aSt+SzomdXxRYyRtUyg5RyU/KHszOkhZPXkjQ315fDEkIT5fQ0kqITUhV3pYdD9lSGx6KGovSUxnO3g/YFFPcFRbeVZXPCVnYThEI2xfaWY4aGB0YSt4Oi5X''@;'; put 'put ''RWFfVkFLfTdFTiRXeFtuYWxfW0FAPCZWWldTOCRfbHR6fDVxR25+U2p9OFpHZCZCWl1fZmVoMk4wKFVwSmUpTXMjRUBkaXNybV08QHlwYE5pRVhndUBec3wvbzhBaWUvY2xWPjN1T3xvVDk1JGJvYil6en1HQzZ7ZHRvPHxwO14xRGMkczJrdiR3aW1+NWBVQCk3TWcyXmVVRFIuTkk6fFcvUzxz''@;'; put 'put ''ZipKaEt2MDBoTmhrQ1hTQF1KfCNmMVJQdE5mRzw4ZnprMCIqPSxYT3F4cSpOSjU0SS9iPTE4KXBrUFksaH1yZV0pRHBiT3gobGQjUG1JRH48TWVCdkhCM0J9NCttOi54ZEhCU1FCSmNeey90Rk5sYD94JjRyVDFXYytkYiJ3bGVAVkpPPWcpXyRmc3U3UlJnbF9jfn4paiYhZShReGc9YV1sSVBR''@;'; put 'put ''O3kkfW4pNiFXIjgoVWJYdmxJTT5Gamgqc2RDMWVwJXZ2SmhQMEN7RXokO3JHK3NxcT0vZHhdbGVFVjMmQzhiO0VuIit3ajZMMEJOdz5FIko1OlFFQUwwJUBse0wufjdLO1dOaik/MV13XWtZY28rKyM1ZGNXNitidy91e0BAMFdmdyEvZXA5TWsoMG51fGIjT256YzkhMVNAOD81LGFKPVplVyVx''@;'; put 'put ''TX0pclEye2Y6PGxrdHBsZm9DKT5icnIwb2Q1V0RUbWV0aFZieU9kdTs4eHN2LFhnY1J5MG5maUdCeGltQkMmIkJwX2xaZVJeTzFXfG1XQmJFVVp2U3pTSUtdaFNLYjFAOkl0TGYkfWVJMzQlVFM/VjZ6U1EsX2BULyNPfT8yV1ssUTc4IjE4XjAmYyUlalMsLj1sWDE8OWc2MTFreEpvVGJDaURl''@;'; put 'put ''ZkNQJVNOPz1IIVswfFRieSltYEM+S1U9Yktyd05Dbjk9Wlh5P2YmJF95QCUkO2FTPjxUblc1dWNFVk17ZztIY2EsNUw1VWpke2hhIkUueUdyL0ZHY0dmVkhdbTJ0JkE7WWdAenomZU0qVmwiLyE1OltCRCRRS3A3SHE2MTE2RSNoMUolczNAQWdvbkYhUW1XcHBPSjxpeD13dEA8RF1Hb04lLGc6''@;'; put 'put ''M3FxOGdkPDltWzouRF5GLm10SWouLlIlWzZ8WkwpfnQiKEh6WH5aeUAxJDxdWHxYYFVURVYxLCE8X0prPUljdzZkbWdzRyxrbzRGKlQiZyYpPmU2JU1ocG4hJndMU0F9aylNaldgajVfbl9RWWxHISp1VENGNW0+OEVpKFo7eyw2cjlqOWp3alpNSSlxL34jKlIvZmZkTz5QV2xAWEp8bjkkfWxG''@;'; put 'put ''MDo2YTdIeUlzO2pmdyx0ZHB5dExETXszPUo/KyZsWDdbV3pjcHVzTkl5KGt7PX06fmQzKWpyYk97SG5oPyRkVCRqTCNwcVhkISFObC8qbkFjW31fKmFXXmp8ZS9CYE9sPUljVz8yan5sRDVfdmdzKD9MYm8xMFlXa3hjSnRfPFtAeklZSGUhSypnT0kuUiFhXm5ZXklCVXAxPEJIJEk8TWtsYEhH''@;'; put 'put ''N2NiM0A+OU83dVAoSDZrZjcxdkl8cmdURWVCMntqbGQzcSs/bygsbTJUSy5dfl1DbU9PYzw5PiYvMD9oXjskOGd0IjlrMFEwXk4/eWE/QkNNTigvTV06bX0oPn1mZWVRVXRgMlhAI3NrP0o6TWJkdTshcGYrJjopJVN6XTUyN3FkT29zWDJwLjI7V0k5UGR8OGtaLE5EK0hWVixzZT44WjVqRi57''@;'; put 'put ''JltyKz8qQHw9VDl0emQ1KlpUY05ZbG9WNm1vTmE0ZmQ7Qkc+IyxxInNWPVAiSFM5cFQ/QTEkZnxEJGx8fX5VLjQoZ1s/VWNlQVhbUmRidlcrL2BfTm5DQFRVL3tlMnddXkt1e0BzLkFXX3Vmel1wRC5fUkE6biZKcSI4USlsN2BlVGYxQyxTIkVvL2Ewc0xSLzE2LDJFTndyXSkwak00TnQiQEcr''@;'; put 'put ''JHwhOGpbYE9naT93W0I7bTYmQWldOjJ9cCVuak5ZXnZ6OnRPb0soV3M3Uk5MWnBaaDk8di9vTn1HLj5YUUttaXFuPVR6ezVNVClkfmtJZW1kbUtwYDx3cTcjOVEmRURuJGA9WipZXyQqS0U8U3ZiVmgjKHVGNml2KmdJUVA3flg3QS9SYDVjfC4xa0wkXyovd2Q5MER6InpYMH1LVWs5IV9uPCpN''@;'; put 'put ''aDU8d1JkVSN7UyVIbEE+IX53RENNcjdrT3J5ZjJXdHJuNDddYnQ9UmlaSWlbWHkqalM/em0jV0ZLLHojSjswfn5abUlRaGJKMU9gYlU6KDZHJW10JCo2LCtWd3lgQSNbd2hVUksyX2A5XitIdD5pVXk2Typ4Y2pMZzopKl5kVHUxRHIoeXtyWHw4fTUkVW1BLmJ+a2Z2NmBiO1dxNkNodj5nWHMu''@;'; put 'put ''LFRZIXM9QEpxcFlaJV8kM3ZQfk5GPlJLeXhQW1hBeWdkR2lCZkU9On56QEx8c184MiQmY05gOUo6aHxuQ2dHRn48PytJLFZlUlN8YCkyYkRGbypZdzZIIiJleXJObFZRSVlPKEV6cC9iMV1JTU1UTU1DJHpzUHVsc31gOm8+Pj8kaiI5YCV4ZCN1JVE1KlBMI3xpbk1iS2tpaTlLYTJbXipJXzEo''@;'; put 'put ''XVl6ODhWbXMhQz5FRjxiTilaXltva1FxLH11MmpNcmNUJW1zRiJndDc0UH19MmlHbWEvbUIpY0UzUEApZiE4XyFmVm9OdXVwcjpZbTZYWUw+OHhaenY8VDJQND9kdXx+YzZCRnAqZilSX1hSYGJGRyJzRHVoPGZzMjN8RCxvOipPbE5GczBXZi5SXWZAPGlSJDh6NWVYZWtjKUBrWDptQFdqUXlP''@;'; put 'put ''WSRLI0EyKnQyMkx1UFpReD16PGMxdyUqMmwkei52JSxTKWsofGZFSyFMYitLZTZMZntVcStUPDU9I0p7MG87PUA8KmFAcC40TU9JSUk4UjM5TGQ1SGw6Wj1NQyVGPTIzIVE7KzYiRU9QP3B1VWxFSGFJVlBPbktld28wZ29EKjxVWmkoc25XVzEwc1N9LEwuK1NUaVBKdUIseStWZkBhcksmTUdP''@;'; put 'put ''QmshLkk7QkIye3dmZGNseFY8MExPW2AqcTVDQ3UvKjlwJEkyW3VSIUZZLjs9NjViREEyLjs3NipYVS5hVCJUX19zVER+K2d5NnNjRGRIQSp7UWZ0QUhEKWwyYU47czhyZlIlSWFXdXhgXjI9TEU/ai54V2lAInleRV12TThHKixOJG40ZUtyRT9PRktGa1NHQVVJdn4rVUZ4KzJUMzxCakglYjJV''@;'; put 'put ''P0FUbFphUkRmfFohdjF2aG9OYkdiVVQpTktXWU1EazBrNT9qa20sTyhrYXRBeHYyQlhrZyFIPUh4eU4jbS89cEVCfT9JYzR7RkBNWENxWTBge29DLzNFfHAlbiVhQGNTLEkkczJNenFTR31ZOEUqSGNWeTo1Sy9UeEYvdDYpel4kXTdgR2J9c0paMChoK1tVSlJDSSVWXiojX0FEKCJdQn1aNnRA''@;'; put 'put ''OjJNbSJSVkxFTC5dc2VsMEFkMlB8X25dQUxXKnpANEVCKH58emAqOzJEdC5EeXYqc09aYTlUaEU1UX1HV3BUPjd9W0hrQz9qZDR6fmc/anZNKj9ndkdaPFJ8eS4zLkIsTmExcj81O1YvUXJRdCMpQV9EZHw+fG5gWXdVViZfU0wkZHhNOTN1RDs5I0JvX1FbcyM/JTdVI0VTfTBuTl1CWEVUMms8''@;'; put 'put ''djhjdEY2QjApfTdEakxfM34yK0NzYHUhKSNTLHh9W3E/LmhgaUJHdTdzYkl0Yz1TakVgej9WOCEjWVR7VCw8Qy5MIzI1NzhgXVYrW28rL0B8Y216SWUqXkw5S2JLL1QwcjN8OktxdStJWFk/RzBMZkpgYHsra1RZbjtBVDBveEcyKEMqOiQ3KUl5enlENzVRN0NSK0A6USZpO2lFJGA2QjJ6WCxb''@;'; put 'put ''UnVBKWxaL1Bwa1VVJiMqTTN+JHx6fG9lKl1CREpYPGZTIiE/YCxrQ0Yjeis4Z3ZZTHxKOCphVVV2a3p6I288S1JDVkFIWTpdPzszIktbVnJDN0U2YmF+dipkLyYhU3w6Z0ZbUWVkNi9LfmNFUEJTYyp4eyh4bGdqJlI3QFc3OGkhRnhLZi82MXFOeVhLTkIqP1Y0YVVmMXpZdigzTjVQYHdkISxa''@;'; put 'put ''c2FjI1FUKH5DOikmIis5U2c2QFkkeGpHdFZuWVNFUHt7cEsvS2MxSD0uNyZvUi9sOGo1V2VLNE4xfC9+djRJM31tRzROOnw/U25UT09pMFRnV24vfSoqS3N1Oj0zRCM+Ul1uRiZOTDEzYnBNTyFaRTdpcENkYWYiejBvWzVfYXo9RnlkUjZTOX4saCRsQlYhLHgldzNEO3UkNjh2eyN1YiIhYjhm''@;'; put 'put ''fDdwI2V2M2ZVNCVsR2ZYdldTZ3d2IVl4YDxQSWVwJCJyUF8vWDpiOX4sfDhFJigmaFtbZUdSPiF8O35pP0AyKkxeYTZLJGl8I3JNeEdUfFs+bkhdKW1vSlZCIVlOSXlmfV9GTE0/VU91JHQrayZzQm5BZntme21iZThSXW4qPikpYUcoXn1zVVh2VHohaytrVWR6PmRbdH5vVndXVl1MUXE4ZSl2''@;'; put 'put ''dVc+ejVme31ZeGVEOT8jPDAyd25DOmVNMEg9eiJfRzNrR05FOldYZik1VEY5eHU6dFk3ZiU3eWErLFZvS31HaF90Zk9wYERddEchWG5KaGp5NDJjcj04cCUxSVh1fnJMUFY7P3NtMF5meHpJeW9FdGJHZ3praS98fFFYODZaaDVhNUNrTFRRUFdUPno7aVoqLlRCWClSSXYjb2Vbanx+W1IoR2BP''@;'; put 'put ''SlJhZ186SyQ3TGNBZDBeOjMzKmM+QlN5MzpvMDdzQDhELyouVy8uLiQvTTpVIzkmeEtFQDhUIUUzNVhWSSU8YUQ7SkAmLFVucG1MO0YiU2VhLnFgUjAuQUlZJmBKQk8pJnVjQ30hNXglcEM7S3hqKCVddjNWcCU8KjtkcUdzbDx1cnYiSHRRRlRxKWBkNktKK18pbz09ezQ6NktKUi9edTlrcTFT''@;'; put 'put ''fWckQTtuZXgiQTh1JG9eWjVGJk5+dipuVTxoKlhpVDVhSjBoQVZSMVdIdlZ3OUd+RSN9Ol91ZVtIKiJjI1JSUURWIUBLekdNMGBpXSpxckNeL2VdQVpMYC5EK21BUjs8SF10WEdwTl5OOWhwTVpxYiRMc2g1P1Q7cjpIRVZYRTt4bGc6bj5HN3MhPS9LYillaTVybjxibG8pLjBfK3I+aWsrb0xy''@;'; put 'put ''L3IvazBSLClWZlpfYEZ4UCEmU2ZVaH4jQ15mSzdKPV9pfkVKIj1hNGlwdj1HT2c3UUpDJShGPXFuRVN6Um0sVzU7S2thLmhASS57NCYjdEQ+MCM3XVBiKX1daV4/VV5BPUlUczVjRSR3SSl2YmtYT2xyZ3I8WHAufk1YXitgfFtQS3RDSStLRDs+ezsqKz89QjdUe0c+STRmWkUmU19oeW1+IjJt''@;'; put 'put ''dnUyJiJgVGQ/Ty5HZzo7Q21AajZyaHQkRn5BbHxUX1l5ay5nWWAjfkpeVHtEKnt6ZjBmLDUzVTxgd3tgbmZeTlg8Z0gxfkBfbUFMVHZ9IVIoYD04X3VCQ0F5T19DKWxQX2NlSiNYM2pfRSVMRElvX3RrJHJvT01OTjVRO0lAOlgwdGdGN3VUdnh+S08kbzhZWlZkUHJgKF5mWG1zeT08WmNNY1VZ''@;'; put 'put ''Q0NbPls4Rj52LGVIM15NO1pBKnU0KU1GN05xLilXfTJZZkohSlRvLCgzeitQdmlUKzdofkNUVVd7ISpEaV4xNlg9PkB0KD5gbDIkWmxzcF8jWzlFSDw9SlZrO3BUP00kc2R8QHh1VVNPYE8ubn46LHdNc3w3UXcvJC8xb184KlZIIUUwUWE7KFJrLF9IOX09a0pJXiNkU2JnYUhmTkc5Zy9iRTA/''@;'; put 'put ''M0xgV0kva0JfdVkkb2B2OXc8e2lLdVN1JCQ4UzptKUUzTzh+fXYmZEBwaX5KM08pfjRbIklNOWl0RWB0OHwhWzI1SyshNTwhTVpden0/Jj47InQwNF0jd0shai5JMjB8fWBYa3ZHPzgxOWpwY2dTXzg6RCY+S0pTcCFgOjpdOS8qS31Oe0N2N3d0Vl0uQjJvMzhscnZaQSMzTSFMY1owWlFRclQ/''@;'; put 'put ''dH1hOkd4dHhJfUcoe2R+TEw5KSE5O3ZTKCxTV1pzPnozbCliSDUyIkFwZTo2NCQjVk09X0pIbV83P2xoeCQoOT51YG1PdUAoNDshMHNpQHV3b0VnVjFaTF5BTSRJX3xCVGRxbGdjQU84fl5ROWguMTJ+RSI1X0tDdHdgUmlPUj5iOF52RSpRdmV5aitpV0NKb2hRYms8WUNZcX5WY2p2PU0kIiZZ''@;'; put 'put ''UWBMeXU+I1kpUE8sP250Y05tWmZbRFhiUGhwPnFSUT84OU53SmtLaUFmMH5BOEl3Y0U9XmB9Lms3b0B7ZjtCP3MjJntUJl9fW1lkRWZNWjNUPTl2SChsNkxXe1RgajgvWjt8VzlEP2FZK1ovMisjTkd5Z3R6TFQiZldsZV9jXV1QVFh2VVlvWDgpTEx6bWNmYDVCZT1rJTRGPG5Cc1sqXlM4WVRf''@;'; put 'put ''KXxhTyF1dyZTaCMwaX5UO0okJkN5W2UwIi55MjQibkk9Vnk0Ykttd0lARzx5fF5jLEdFdUpRTHNpNTFPZCVYZGRobzVwbyhbZzBHMX0qRkJxP0wrMDV6Y2Nxe1J6dFt4NVAram42anUpa3NGbz1rUHwjL2x+dDg7T2dEbEA8eDtLXW09ZVhnNzFbT1BKI1A7JH5yQjBpM2BvJX5GbUJ+L0dDQzxr''@;'; put 'put ''WlFbO31bajF6NHtVJltYcXkxVV5LVUNeTFowM1M3T0BHYFQoVyE6RU1ncyZZbH45LEIyXiw3dkpvI3VpNSRCP1ZyTEFKWEwwdHUoJldhISR7IjcpYHRNMTh2NzFxSU89S01adWddczw4IXV4I0FXIVJ2bl9JKEFvb31RVkBHRUxeVFFdJXdRcGBaOlckOlBKckFGTWF1WEZ0JCxHZiYiM3o5eDVF''@;'; put 'put ''IlEyKnJGQWkydElXOl02eFoqRn44ImVEZzFnVV5ZL1s3QSNkKER4LEQ1aGNKNmY5dDQydW0xJVp3dSgvOGhJQjlDaG5sc3Y9YiRMKkVBMFdNe3p1OklDZVYyYCw2SC87JksyfUNqVTRfSEpkRnRNdXU2JTRgaTdDb19FSj9fUiNEWWxKa3dZaXVlXlokc05dMDxtQUIuSm9CaFFbakRHQlpneWR4''@;'; put 'put ''TX1KQ3xTaUcyUVMxIWFbaWBsZiM2YF19XiE8LitFZDF2RGo2TmArYzJRO0ciXS92X2B6OEdjKWAifDlRak5JcSYrblNyMEkhcSNOcmQ2cHhvfV1jVTU1cUQxO2tYT11pdUQpQmJ8WmI4TlkjSi45N2k/PCxtWS5lNyopL0xiTFldYlhzMCoza0FaNE9rLnhlIld7K25CLCh2NmE9dEljU1MyNHJ9''@;'; put 'put ''KFk3VGN3SCtAUWVyeW5eLCZxaUQkdGt3JEY3PllJOitXSWZ7ISM4NzJMNWgwUD15fXpIe1p6ZSxOeEtzT0BjQ3Y6QlErRWZ5dUN9K2QpMFNjTV80amFmOVByX19fKWpseURZW14xO2FrQXwsXiZpOG5zaz1vMj9NLFsrWy9KYVBtRVBgRVdkJnU8Q3JyN31UZ2IzOmNxcXU5R0RVW3hgPHRjN3Re''@;'; put 'put ''VSlDKlZwTnAiM1V8KjZeRWNZYCkxRDViLz5xX0tNTkJSNmdaVXlaRnldcTtkJDopfVBiMUMzbmBqJF9PT3dsP1I7dV5CTmIleSshO0ZAQ2N5fHZ3eXV6YFNZNWkvcSYhQVhLKGEmT3ImNVZnOytVRjFxRTA3e2I0dzx2JWdEb2dXc0RKQUVrdXhDX1dCfUUjV0chLnRDL0hHekFRSC9JP1U3SDIl''@;'; put 'put ''d3Y2X3BDU2lKXTVuS1hwfWBde15gdWshR20oSk5LYFphV0oxIy5dX3I0ZjRQayNSYzdwPlpVVEMoZj8lJUxPSWNKYUJTfEcsPkYueS41YkNxTjo4IzsoaU9vO2t0Q15IZHZJXzh1THhOS3pheWx6a0dudVM7S3FdKGhFVzwpSjdyZklaZjJtNy4jMWZwYkBdbVlvI3tFfXljLyM/XiQxKVU0K15C''@;'; put 'put ''YkR4TEBLKDJvcGI2L3BBZF1dQX5eciNyK0A2Y2x8bylsa2UhMmBWXz9mL0R0Z14+PC56YSxNRGEsJXNYOmUoSV1VZ1BmMzI9VjA1W3Y5Plp7an1Yal9vSiZFYjBYNUQmUE4sTzxtS0RrJC9QQFsyXyZuVm9GOUo8R2RZUFchbCNXIXBWJU9pSUJ4NFpUT05OUnldUWJTVFMmb1ZxTi4uMXNebkZf''@;'; put 'put ''T0orYSYyMTtoJGlyPiYhc3FoPkIsVW0zYyl2QkduOl9XMXxTJmJUc09zYlpoX2FDclQyaCkzSDt5Q3gwKiNZKTRGZDdadl9bTVBEc2NXUV9yT3wkKUROKG1GQiIucWNmMT07eyhjQzR3dl9UXX4weyNWYTZGIyNSRn4mWEFASG5zPDIlcEw7R0YrJF9zTGpOZzl3UHVpX1hSJkhmfVs1cFQmPUtF''@;'; put 'put ''OWMobkBVcXI2UmVsWD0pa0thXSMuUEQsaihCM2lNa1smbERdLmp9bU5bWyM9QDwxa106M2FiQHBbWVAyblF4VWlLRnI6NFBqflZnUlU9dTNxKysqOyFFSCxtd0dlI2R3MmB7I3dCb3czckdWUiNySVtSPGhfTDIpdlRRKlJbUX1GYWxFczBlWjowSk9hK3R9ZDlTaFQrRnQ/V19sJDBvWD5MZX1l''@;'; put 'put ''ME0lPE8wR2FpMUpFKj46UDdKW0xxdV9NJTQyKixVWUl2bnI+dVZmSVJrX0k5UjBQMCNfWndYQGFETE1+UjVyQ29GZT4mOT5tO0o1JWhdRmdPRHQ+cyMzdGNuZDZwKFlidXZLWyo7Ql0/MG1ENStSRSl3Y3xRbFJCXjhGKD8ib109VCVXeXh9KTt8eSxWVnsjRnw8RHshYzUyZkZXUGd1eVFGZEc+''@;'; put 'put ''Xi9eP15weUQ1Wzl1MVtFI3dsPDtzeS8wNTIwfHR4aD10N1N0bFZ9KS8od01fXz9iJSZWVT0kJjdndXt9YmdnSDJdOl4oO0tAIjdUa3lgaz0/flRHJDlOMj8rQn4pZD5GNHZXW2hUPUJMQzhEOERkWSUrLjhLfFcydEo8QzZvPEhbW3Vta2c1Pj9ub0NqKnBEXnFtfH1hVyZpemtiW2N+SDZGVndZ''@;'; put 'put ''Vyk6MlRjNCZmQDwjWDpiandqRSl8SjhjbGtuIVB7OEB1U0p6PUl7ZVFWYlpZSzJSfiUsSVssb2xEOmhoKHdSNjtQYj89Z0U8TXtUdT0mXV9efF5vaEhyRD5sMzUhYHJET2R3ZGsicFEqeUxpT2Q1aS8sKzhSN2N2SzVkIUVIfXZCJWNQOH1Jd1VJeUBAPFsufUtaWyNOcnshTyFPUXR3O0UxL306''@;'; put 'put ''bnBUSCttYnlqVEQrR21bKDQrZ0UqMXh3QzpTQ1pmIjd0XitWPmNCPUd4TXJ1c0pdd3l3WyFqNT4/PVd1WTIiREx0bTsoW0xAWjNjNVhaLEpVRXMzOitwREJQdGNqbU48RyRrVEBoV3JPM1crWHQmRVVOVTAyfWFgcjAwZGBbeFIrPSJMUHwid3trO0pFcl0iaUY0KD9MQFpvTlFKek9KQ2FPaS9e''@;'; put 'put ''az4xMCY5KTBxV1QuVio0aGU6JTRLZ0l3KFA4eV1DcEokR1VXJHl3MD55UGhCIXV5VHZhRWVEVlkrdT9YVzU1cW8uPXQvUzNlUTdkNjYyemt1aVZpXTZqeHFubWArZlhJUyRAY1ZgdCw3NXVoWWZ9PWRuLiFpKm4qUUxpKj83Qns0RiU8RE05c21mUEtyRUBSTTBVcTBpNiEuQkI+QTE7OyJ6clQ1''@;'; put 'put ''KGlnaXE6X1coMCMveSp+LHJTZSp2YkxSdkhTfilRP2RweThGNHJ2YHNfRUM9cz43M2dNSyhxLjQhSEpbWG41YnNOPG9PMkk3QyQ5RTc9YiFzUDVjRExCPGtFX1pRYD94dFlwdjsobiYlWmdncjA2P3s+eEpGYjB2eGwpcFVUJmsqPVZVQCpZej5zd2c+P2B+U3RFWStILGVLK19NckcvMHI0ZiJM''@;'; put 'put ''XVlabzhRNF0/VkJfcUohVjBPQV4/VWdlJmU6dnQ5WERlYF1kI0J2MEIsfH46ViJPXWxXaFU0eFNmSiJVbHNQYDs7Vk98dnhbTXgmSVJwfmQyZCtHLiFvJndmcklCfTEqUVA3TWIyeTQ4TyNWUmdEXmVpJHlUUTg/U0RuOE4rfHJwPHdeRkRxSU1FTF9nRFspT1RjcFl3ZmhUdWAuL1Fefm9vWnM4''@;'; put 'put ''OztpUCQvX2RFSWdBS1g7PXcuW1gzKFM0VVtmWmIoayRoRlBoaks2JU5bZz9Ca1teLzJGS35tTXZDLGphP01dNUAxX2N0OyxHTyhkPFd6P1d1eToueHJBWD1XNjRpKjhpfmN6UGhYbzZmMkJpRVZzMk1IWjMlSTxicl8pOlddZHAkWjh8TnZDRit1b3x1MGFsUSZ+YWdJaW91WFtXLktAR1lqNGVv''@;'; put 'put ''NCw6STp9KT1UNmN7RWxoPytnVkRaezUhc2ArOkp7cF1RZSw5S098fGV5QiZobmhPQitSKTVxJVlxb1R6Y1khbjVlR2g0ezpOVVVtbm94WENrZSxDPiprOU1zSnh8fiJ+SjFFQSpsaDZeJUBRXTU3UDspNHpqcXB8X2osTSpgKXtHbTksMVR5PCJKYnE7PX18JU9IZGYhOFcuYTgrfHtTV34+UnFm''@;'; put 'put ''WDp3XmAzZDpMb055P2AuOSx1blZJajI8SGBUe2s3RlBTRykwYjo/PChHclRkUlFiMVdWeys8YmV8JF5sfkh3JDVCMEpRSiJLMD42V0BhX1VmR0dTfW0iSDFae1A/eFElSWRdL0xJV2NGd3ptYEhHVjtOZEpmRnR1aV4sT3FGQGNgbE0sKCZ7PyVZKTJHPTRGJiN0SkhfUFQudSFMSzozYjI2UnM5''@;'; put 'put ''Nj0qezkvanFOT3ZJbFVqY3I4L1hDTyQ5Q0VISysmTCJMXlErRUBdeWk5ejAsb11OOlRDbiN2dUNRamxFNE9HQFVWP3wldC47dngscy9KTF8iL0BDaTdxJDIxKnZ1e2IvcG4wWnMkcipKKUMxUlQ/ZnokNXM5PiU4K2dPI3Z4bUNkMUN5Lm1heylGckdELG07SkF2SHteblEvSj5kZ0NqdnQzPldX''@;'; put 'put ''Y2FIKmVUQGlUdDY8UHNaL04hTztlRFF1MHtleyw/W1opfXolVyspeTk/ZFJ+VUIjVUAiRCN+a3RvUTxJRkN0amZHaDFpRShKZE9PMjdGQzE/M2JQU0ReOmlEMH5GayxUJit1Vz9SbSZHUWpdVjJ1d05mcyopflBRImRCJHsobW1HTUBpbF4uME1pY0opfEFleysvOHxlSGp7eigjQHRdSUFrQEhZ''@;'; put 'put ''K1JnWF1iJnU1ajUjI19jMEckeUZYNmdYLF4wY10/YX4rdEYzQGQkLjtMSm5lNFNZdEN7dEVWOWllSUJnWS5ncTFoOkR6L2M1V3V7YWFDbiJeflhZVSg/LmMzOkA0TjNWQC8lelU9LF19QlhGODF1ei5xZG8uXn53Q2Z+RUQ7QzE7QlYlZnhoM0UuS0NaI11RRjw2cSspTFAhIWZ1fjt9TnxRc3U8''@;'; put 'put ''YkNYNCN6YGZ9SF98ZyMrT0BEfXpAKzVqaWdxcCM8K1RfOkIhayk4eTdbejQlKVhjd296ZiVRZVN9W1cpMmxhRzouYEJ0ez40YEduXjNgMygheC88cjBKKTooTlMkZSVrO2EhMk5aJDZrWTt9JGorb3UkUGxYPyI6cn1XajZgeGN9ekFDKHRmUiFnLHgxZ3IzKGI8ZDxkVyRtIl9xTmNPcyRWLjY0''@;'; put 'put ''cW5vISFMPkRKfl9yNTBnVmlKR3g0WE07X1MjZkovSCphdVQzRGwzPkM9NWRLSGFwa180cH0rYl4sYlZXYnFlPlYmUFtLLnxCVGg9RFI7YlR2MUl5KVVjfSEoeDY7SEcvSUROIUpuOiluejVbcm1kRkAxWzdadD9sUEcqYz5tYSpKQGZDeX51d289MTQ/bl9IZ343KHlVb3BrUzY7bENWfUs4d2Rx''@;'; put 'put ''fjIycV1IMEthTWFCZF9xQk9uXi9rSSt2Tkw5ZkUxRHtSZlMrOysiMSExOTJBIU4qeC5WXVk3JHE/IXV9K1ImenszLGJ6cFRCcmlXT2BrVF5DW0skYHNZNFpYZyFkM1VyQmU8b2tMNCVeTSQuYnh3aWA4RTJXYHBKUHNoQ1JxYD09R1p4W3R5fWFKUC9GQ0BFUHlnWHFJQ0RDczJaWkMzVy9LYVlp''@;'; put 'put ''JDhvVDM1P2A3K3hrVUhQLk1dZXBVdmVDS2oqOz5KWW1ISDVqcF4pakpiLzxoYzRSVlB7SWpsaWlyUU5aPmtONG8qKDBbU1hWUlI1JStReDQ5bjYzLF1eUUo9fXZgKC8oIUNOUkslZXpDOzRDfEAoNyJXRTQkdCJBS2FSZlU3X0pPeFdlO1Vua0g9a2I6X2xHNCZmQnk9SmZzezlAOWhwOn4+M1V+''@;'; put 'put ''d2lhWGxZcUdwbTtEeWdAfWFpdEArL25WZi5Eb1Z+S1ZxUHtFN3skNT5XQDJgay5HLGhVWWl9ZXtRZzE8TjM9d11uVk1Ob0h8aDhrIXF3Wjs2UDo9MjcoNW1YZXdeSW9XajRRJm1SfVRoZ0ZXPjhKRHU9bkV1KWNsMU1DbCUwaE1BWDlIR0ZHQ15GKWhUentpX2shQn0/MElQfmtpfkRlLygzQnhs''@;'; put 'put ''LHhCSiJLY3g/RmRmL3R3YTV6QyhEZUlrZnMzPzE2N1JlZXFhXSN9ISJ2T1Uha3t8SC9xdyhHYkYlWWtEN20wemA4Mnh8PHwxNH5NLlhgPVdfUltIZDx0M1I0T1k7JXc6X1FndyhQNVkve1dqOXhgXkE7Zk08RkVXJiM6S0xyXlI8TT8jMn1JREcoWkxGR2xBSS40NDBdJCxNams8P0VQdmhdWDp3''@;'; put 'put ''UWBjaG8sQng4PyVHJi8oaiQhMX1jME45Mjg9P1dwajpSc0RhInZFO29jUk8+RGpQcWwhbDROezApYig8WG5zWjUubSE/ZGJFb21SYjkucCMiVXdLc0czekNdLzJ3bCw9fTE0LGw+Tl95YiFQcF1LODMvdzlGQyNnOXd4PVhzYjMkSl5zRz1MMlRJVVVGYldZU2NlbVFDfkw4RGdFUUgzfls7PUZh''@;'; put 'put ''V0xEKHxJdmV9LnI6PS9MZjh7TVIjYVVaWl84c1AvRjs6ej16ZltJb0pjSX54ZzBLPW9bQkE9K2FrLFZxVW0jKUI/d3pPajFoTkEyeGVlcE1vRiFjbUg8UzVBelRjenxyXUtVcnk1Q1MvalBDWjJWNE9+X01kPj9tJChEd0lfJW0uMTA4YDhZdHJIPFhlNylreHssVTpLXllUSiZnWFNxPVorJTg1''@;'; put 'put ''XktXdG8+NFZpX1RkNzpsR3hkeW1oRWxTVmxJKj5gY0V6NTFSK1pHXyg0JVdhIyxldGZ+Pz1QVkpbOX52dzpdODFpUWF1JDArMFg8VjVDODFIPk99NlhQRDM8P1VBRjBCVlskUHRkQylub0Q2WHddQHM5WiFHJWBVU3hsPl4wPDdleSg/NFVyYXFXbGFLbjhJR0dgRTprSVdfNHYyVkgjN2Z0SUR0''@;'; put 'put ''VmlBPGB6UUEhczI8TnExdEx6aTVJXT5XIUMjbiNCQFUzVG9pdHRuPnVJZ2FCQ2d8eklNZnZ0KD82ayRDKSU9ckZiUHxCdTcsSj5GImFWW1UrelRtM2Q5dDhse0N3YlJpaUM6JjFlNGRNPUp4InVgb19dUWh+JGM1QlohVUQ/Wj5ZLCksRVVaTHxrOjomS0lMUyh2ai83UVkmczpDb1ZNZCtGcGUi''@;'; put 'put ''KjFtI0J0cGZlVjNPJVVZTTgyRWVGK0AzM3IpNTBYayVHKDF8PzZXMUxLXWQ8d3NRcVgrLiI9RExGKW1mfEJKOEVaTGlzQVA6Ql89ekVBKkViI009Nz5JZT1UUXleLk4va0pEUkR0VGp4Zjs2ezo4Qk8qKWdMMXA0RlJJRHIqeyF1ZnsoLGQ0SXZXQWksYVs6S155bUFWVG1FaUc1LFJFdWFefUZZ''@;'; put 'put ''NihlbSg7S3opQGx6S11jblNWV1cpOz8qeUNSI117T1MjeGlzQFokOltgIWFPaSszOz1DTHB0N25Fal1WaV5wXj51UXZbb1R+REVqfmp3eU47ektSaVREJjtbTDkyMUZ0NzFXZVs+cSUmS3lhNzxUenBAUF1QcTcmZi99cHE+QzBbXSVgY296Qno+dl0sRW1WX1MpNCs7QFZhd2lHTj9EPDZ5Xzda''@;'; put 'put ''cWoqcTZ1PzIve25GP1AubH02Rj1yK3JqYHpBdns8aE9kRUw/JlowNGhUWGc4KF9wXXAia1UpR2p0Lys5Tjc/VWM4ZEhhUyluZWlAPWVGNm8yV1okY3tkKiIla2ghK2YhW2pVTV5XI09oZ0sqRCorVGRUM1VoYl87aHdSQ244O2wzImdgbms1MjxWQ1NNQHssN2tkL18jN3VSNztZZSNIZl4mT25+''@;'; put 'put ''eHpYR2BtUVJlPlEydk5HNT8iUFZRc2tneWIpfkF2QkpjOy98Km0rWX16ZmFdVE93ODVVbF0rPC5zKDJgaWZwRCpTSXs/RUw8QFVjRG5kV2FoWlRiJTprWGIhNVBBIVkpWzt7MDU2XSNCIUhxREM7XyYxN1dbdFBGLD96Q35aX1llPV8+UFU0PkA+YGhpeDNdeU86bkNPdDJhI2x9VXxYPjMpfVRZ''@;'; put 'put ''JFtgQ1gjKUFFcylPWCpNX2JXdDlKNU5uUjRbSV5iW3UwSWM/I0xiSmROJE9tSXdhNTJ4PTJTOTdJcVNSdGMrZjZXYClnZnI3TkVxIl40Mls3dzhGYUJ+REtxOTk4bEIzOEZZIiJVeFd4fWlGaHRfOEYweihmUGcoZVlXSSQjOS9bITBNZlAsXTZmUmtxbFFRLyZiRkBIWWZsdD5TP0w7KFFkTkNq''@;'; put 'put ''Z3JtQiYpPW9VaV9qKEsyOzYid0tkXzZ2NjBManU4ISR+fGYvYDdAJTFzI01GYSw9InAwQzhyKVZYRkt6UF45WnI1RH1FNz07cSxrQyNKQm9WSWIjSltZIlJTWno3IlRCfShheVQpUDQkN11nLjdDPDNCQkFnZHYlNH5qMDZwdyFPRnwsT3o3akhkSyhOVGFoaTg4akRmNiU2clpSUFgjZTAra31g''@;'; put 'put ''cFdPTk5wZyVROSZqSENyfHM1YSF0KjdufGU9eHQvUT40IXRjJTtffGB1VWhicEMpLEk8fSkzVVJ9e0hgek0+SXxNOCRRUTlubnt6cz0jPVp2Q1YjO0g3dWooKDRpUXR1Vmt5P1hWTDZvL2xkPHNeUXRBflJSXll5JEdiTHQ+VUV9KHZATS96ZTp+aF1uXj5+QXYjZzUzVStAel8yX3NNPDB4PDQu''@;'; put 'put ''TzVYQDFGWiI0V0IjbmtSNHs9ZSE6OjVNJkdDKUhRZkxNKTRyVF1DPkR3cHRYIU9fJHlAZDpsbFN2cVZTbmp8TFl9OyVYRGVTWDlgNUB3KFZfalp8K05maEUuJlRxLz1AfThYMC9EVGB1dD0pZ0JoVXd6P2smYzk2en4/TCpqIi9NbWI/MSQ0YHRgNU8iaW5QWFB4PGVsKVNoUT03UmR6P293cyMy''@;'; put 'put ''RyZLdFN2JWVYR2VEPTw2aGEjfG1scilHP0BHSW9eOVJxellYeW5RdEZWbjppQCttIWt2dm5gYy4iNl5lejNua3pjajIrZSkhT3FeSk82YVBVbjhoUGAiMD9HO1FQJDRVWG5XY2hrPVo+aih0SyxRSW5Hemt0aEIhZHFSeX4+PUc1fi5adHBsWmVYUlh4LzZQT3BiXVpeWD9qN1Bfcjh9NyxsYjY+''@;'; put 'put ''R2E2cmt4amQwP3RuayFmWj5KazcsVj0+SzpeQy9Pb3xjdV1zIVQuZDhscj5ZRkNePzA3dlY5clt+Tz9pUlJNRXJ1I0pBaFZYRzRQazFPcC84IzpOPiw0VH18RyJ7Kl9VS01nN2xIQnc0KCR6bU8zSEluPXUsejR+VEBNTWx1dVkhPXFsNiV6anF7LyZFKGlMe25sTls/P0Z1dmVCTn1mbH5WI3B2''@;'; put 'put ''WyV7UmBNWn57diJmRT10ajRKWnR3PVh3eTtXSCohYUkmWnJSJnJQXVEvPGN4KjQsWlNjMC5DNFkwJVkydWxTa1lFe2QoSS4zRj4vdi4kIzNBKyIqNFNySHpOK19fYyVaNXJqXVgjcXdnTVFgQmNTV2s2NiRJcHpNe3ksbjw8fStsYUFxU295LkEhQXc9c35Jdz5XKEJ3N2dPez1AKCUkWjMqOWZy''@;'; put 'put ''KTwlRUdKaHpnTk9wdzN8MV8jaUtQeH00SDlGfjlvbnFNWEg0Y101OUlqNjlDXXR7MXxVRmpdMVFNKDRwUnhQODxLYTFTIXQwOixgOGdveHxPREN3Un5LJnJII0VuaWFgeHpIc0VOQWF0JlJBeE8mSHQhaG9TSyhHMiNKKntsbUJzSDBnd19CNjciQWU+eDI6Tyt+ZiNxN3RtSExwPWZyMWk4NnY/''@;'; put 'put ''fDYzdW5fQTd0NDZ8UHZTKUoxQypWKlQqcV8kWzV+fVtyZXFFR3BBdndNW1NBYl1GZzp7eVNrIjg6SmJuUn5vbTJQMjYoKHw+U0xoJDN8MD4mRkQ7Qkl6WzFTY28va1prQD5WdUgsSmZJM2ByaFIoK05TcFJSe0tLZ0M4K0gkUSZ0aWFadklubXw1cTNtPkZJMHp8R0VbQnshTVhwUUpIezZLIXpE''@;'; put 'put ''UVVdYENbbW12YnZvNXQ9N1R8amtNWz17UGMrSnJiWWk8QDw4PXFwaGVmXSZffn06dm9mLk5KKTlIMzZ5REArWX5zP3gpezAyPmd2ZDI+MXxGa1pbSUk1OlsldFIqWj0iQCo1KEc+NlkkVD9ZYjEpdGY5WikkNDlwTDpZV2hCdGcuK0t1ZUxhO24zX0VUVE5fJlQhdGdNWDtWekUudip7TkREekt1''@;'; put 'put ''eVp5UnJMQHk8c3xCVmBxR3BfK1RaLF1TbUZTTkN3KWpsNGhLX1NWKTsifCE4cER+XVZJNGdbKilWWmlZSjFlMW1NKXtGdm9KfSw/M1ojYCYzVEFLIkF6XmlWdDJwU317JDk0MTU7SFVmaFJmI1ooeFpPLEYjOWZTI3shSCZ6RC8ueyZwcj1tenloanxGbCwrc3A1eT9zWS87K3lXMTlsJT5qZ3Zr''@;'; put 'put ''JUM/NWdeJVNvKC9XVTh0X19+ZTNSRUB8dy4pOXA8a1REc1R2UkI9QCZleXw+bnQ5cXRkQ3BwSG5ISmJnLz83MVRiIUw8JF1PMkN3em9MN2RBbyRhR0FNMyNZSnJ+eEVaS2FIOz9sSGUvOEJrIUBmSGNuYF08WylhQVZudFYhRy9PIlYwZixqeT5KVkZlSGR7PDVfanhdSV9eMX0qODJ0P2t7SEZu''@;'; put 'put ''RHoodC8wKUhgakUia0wvVUkwX0spTExGYi5MZn4xfUZrLjFyVVtEb1FVPndwcWU9KGQxdC4wWWFSYSxAcTJqUn1wUkgvSShnTFk8LkJyTyp8IzReeXIuQkNMMSxJLjpRbmcpZk9MYE4+L1lKKUIkIXAzPUdOVHZrdixiTjZuRGouJDgxNlZvMnI0VWJFOUk3dyN4NHc7Wj1vQlF+dkVDSV19bHAk''@;'; put 'put ''ZmVTSGErT0tqOkt5OD05Py5EKlUpMSlaZihfOGtrZW5wS0o5VSZ2aTBjdG5pPDZ8eWQ3OmN2Q2EkRVd2OzI1LGY/TlE0ZlQ0SmpUL2BOey5zRyspU0JjMldufF5uXlhpWkJneCwvb0dVSllhZ0dVQDc8Tn12KGtkZXpmYFtBaCpebjN4MXRpdUJpKE5yR3hNKm9eIXVDPzpCOUElKkNjKjUvdmsp''@;'; put 'put ''WGdeWlo1KDIwQm4qNilJTTYqOl5DU2MmWCUveChOaW8rQGQmSHQofSZFdD1Xak97LFtRPz1+X2s2QCtaSVRWLyZdbGNtaG4yJjhZdy57Kn07alVOYF09cWVlaC4jXTV2UHUlYiU4XXU8b0BeLltvNDk2TCt8XileWH5lVCQrWSRlTm1PfHxjLHYxKi9PJihoLC9NSTQpcVlXLCZqTj1nW2dFUVNC''@;'; put 'put ''ZXUvaz58cV02Mjw7e09SVFt6PHN8NjBNYUk+ZWxpcH5BbzdadHh3P0l8THklWHRwQyRnaEgrZEsoV0ZaS1BlNFZJdz1WV2NHZDdwd2tTOEw1a09rfD1TK2UjeFdxWG4qOnEuYiV+LCFiUDA8RE9DRFplQlA4SyQiV1V4dyJMM1Q9PD9WPnksKXg9STEmPl5TO1Iid2dWIkMmUWFdSk0+dkQ3aEd+''@;'; put 'put ''dkhzNDt4ZCJQK3pZKVttIz11QzVQfSVTckg4ZmgqW188QyhiaStfWHtJXyV+RTt3fV9SKENbKV1XQ15aUTIvPmFFYCgjayEpQj5lYTxtM1NJfTs7XixUaCxXJHMlVHRSfTdZQEN1SXcvS2Q/MEMpVC83W2lvaHltVjc5LnpOb0Fze0wjdzo/bD5wZT1CRExAOjsyJUx2NzVUN2c1Ll8lcCUpS15n''@;'; put 'put ''K1BAVHQ8NldoYUx4WE04Wy8qcko1ZHguWX4vdkJJPjJbMWIkVGpRU1oqRyxsWCgma3ZAXWR3MixUOzFdYTpwR0NRWU97YHYhOXAsU1AxeXxXUGgvL2hLKiNEcE1SKWp2PFcvR3hVMipodEVIVEk4c2o0Tz46ZFglUnEmc2NsITlbKkBdPTtNM3kqQmshPTtsJk1tZnw8NG1kU2JJTE9EZjkiaFhf''@;'; put 'put ''SFIyQXd8eHI0LG0+Xy5SLzBjWF9pcCNnKUBUTVVfR2J2Z19KQ3RkMSsvcGZkVD59akJ1U2RfQSgkPy89JmsoR1c0Okt1KnMoK01LTilgW3chJihnKXlTeyF3WVBIJHhCSW9yLE8rNTdaNyI3TWpBUzBvRkRoP1lWNT52OXI2fDdybCwpWzpVeDxmIyspVFpdJTZ1ajhCRS4qVDltMClxdkNHb2lj''@;'; put 'put ''X0hrKylKdEw+TW1XTDw4Uy8udjNiYiZwdEZJVG84ZHppLl45RCJsJS5gU1RWVk5FVFlyVVhxKHlgVENWcVQmRGpGWnc8X0I3TVVHUC84X0BCRWQrUnwoQk1Manxie2tAXzMqejxqcHdKP0wvWGlnKTRTRjEwMHRAY049WWdwPndrdG80ZnosOERzJWZ8PGxgRDsqLmJDalZQNSEoaVg4OHleR3M0''@;'; put 'put ''JkRMPHFxIl9xNmg9PHdYKWYzKixSfCJHT2xeQWFvRWNVJGoscl1HKF1bY1txLGBLMjpzO3hOXT97Ml9adFgsM2teTW1hanFhZkR5ZzZiOWdwaldTZ25pIiJBKy82b2ddMTlhanAqQyNzJSxWNT9LJGpOeDxfKGJ0ZWB8ZlJLUl1LIj5wVk5RTlAzczF5Wjplemhzdy5mcCQwMFtiWWFyO3d4ZDJi''@;'; put 'put ''MU8uaE9qWW1rLHZoYl5gODJSX3RkNFI5WEJpbU1GfChwaGFQI3EzOF4qW0l4WTZ+YT8qZCFgUHskJDMrLCRkM3leXywrJXVaVVlSMDtnRURZayRpK0h4fHpvczNjPSY/bWFpd0lWIVJLVSVRaCJzRmhUST0vMzJKJjR8W0UrUGpeYDg4LGx2NH5jZ0YsQGAle3slX2xkOmI9SUAqOyIhb3Faal49''@;'; put 'put ''OyFYXXw9Q0cjRldfTTtsbnljLGAkfj1nTWkkJjU4dXFyTCtfcVRdI2cpdG1iRklnYkYhMX5PP14qSSg4MEwkVDI5WUwlPXkufnl1eyhZcFs+Q09JdjdkPS83aXJMRFZpImcoKlVaOyNJRkhWLzxBcnZBeiF8SHkqWUlHT3BkfCp5ZW46KGlqR05sXX5pY3xyX3koVEQ0MStdNkR3OzZCUm9NSGVW''@;'; put 'put ''cj95S1VVSHclejc7NExEX15GSERNVi5FSHMqZGopVFt6REJWaVRiajgmSlQ/Rj9hQyxFNDFkdlB0bS5VLEcoaWZKNk9UbHg8Nk0xYWpOP3ZIaHApeWsrIVc0bkhWWHhbTjEye2JuNjFnWFJjNjVFVEorY2grX0poVDxncj1AMTBiTHlIPnRQOnR8OUdFRDkqUTgrey9BXWVbaiVbOTpdVjFTakpC''@;'; put 'put ''UEAkckhEaSZnVC5UbnImK1o5cmd6fVRARjhiSHk2ZUxIYmReLGtnJSt6QGMvNkJrVG5lUktNcVJLXkBLXzRsdjdwOCZ3V1dPU2c7MSspcmtUWCZfYDk2fmRSI1tGQl5vInhHR2BZNnBrJi4zVkV+RTQsTlFFW1l4ZXs0cF9tKmd4MntRVTR3UEhjO35uX2FobEM9cEl4cTsrLGp9Yy5saXs9Ik4k''@;'; put 'put ''OnF4NT1GSUByWTdSaWR1V3FNLCsuO1ZdfE0ydTIjSEgxZ2dNd15VVjkhREd2YnFCV1cqe0RSe24mfFM6aWVpI11FVGhGXTdHQkR0R1lRaWUrXnp5Pj19Xi4iQzN2PnZuamFdJFRNfkxaelFAZCRKcFRpNV5Ec0NFRX1aR3BoUSFTZVE/V35wMn01emFrQltMdWouQTErWD9fXSJzMnMvYWBPYCVP''@;'; put 'put ''SEAsels4NjZYU1tVa2RHeF8wP1p4PEIjenEwVig2IltQVz53NTghUVs4dnReRCtTLiFYJGEqRUh7elQwdCEmNT5lS0pKZmVVcDpCUDJmPVh5Wjg7SUZbKVMqeSo6Q05XfHMkNnxJSkZ5KH5gUGNnIWY1enAxR3ZlOCMrSE5FSGUlenYxcU0kQD1APDM0UChHaTtFV3Y1TCI8Yy9MUWQ0XjQ+Olgv''@;'; put 'put ''cDlZfkhmc3JDW1ZsOXJzREkyfH0xYmNjPTdZNFluOmw9PGVwTz5majRFKkdsMlg1cEdtZEo4Q1pCe1N3bD55eXtuKzFhLnBzLyJlNmdWamp2K3M0JWNxd0drMSpibjc8JFJ0d3FbNWldfmwxTEJoMHQ2cHVdfm1jRzBSeGl3WWUoT09ad1JRRVZiQGwkcn00JCgoPmhbRUszeUt7e0Jpd0ckNFZ8''@;'; put 'put ''OihHPT9dLjw0cVYsYnY1fmk8JmljTjJVRFBRbk8me0N6cVtiJTs9aVNFMHdJP2E/LyFTQ09fVFg0QXdTTU05YSV6IipHXUJsWmBFPjA1PjVwJFhrbmVpeHhMXnxRRD8xVTpuVTt+W096e0FtXmpHYEhsdjIvO3QlOm15UmlQczlmc3hfYXFMIWwkSHtkel1TNDBkcSQuQ2JKWUxVVFsqQjxZKCp8''@;'; put 'put ''MShGSEZNaGxWY35EQDh6ezVsdFtEfChdKFY6ZTxRRnRtRnB7UGBxXyRJX2UrL2BISHVfakFDcWZOLmshWHdHVmk2KlRGKlR1a0pHZi9IMyxhb0JPQl5QQTo3cCs+cUVkb1ZNJj9iIlg3QiFAKzx5KEhkbkc9NWtRITpvRzYkL3ZbQDE6R3lxPlA5TG4jTzJSVTkxJnt9K0VxfXxnelI/a3YxRzcs''@;'; put 'put ''VlBkL0I/dHQjOCJzN3YxOCMyYVtfTWRMaHg8ezpfaFddSUszWjB5KyZhPzI8bkQsVzlAaElbPVBGb1k0WW0iL1U4V2FLVG5ib34ra3ZxWTY4Mk8uVyl2TXNMV0JUTkNJaS89WDwudUtsZnk/JTcmbzpyPWRzfllhciQ5K0xhenpUTl9ycCNNb2ljaURVeVYjQDskd1R1MFh0WXtZVTRhWlV5bFt9''@;'; put 'put ''LkhYPE5zaS5WZ0dMem5HREAuY1N6RVhGR05eIVR2Uz81UG5pdDtMOmcickkwUGl+QmosYj05bl1KTDZvPSMvbXlhMWlmVjpmWjB5Nj9lTzd8WkNyaio4TyNOTV55PGtLXjNVYmREaTpXQkl3LkB5c2wkQkVeWW9hW0U6PDJCP1B6YHc2LFFOSTFiaXM0PmRzeX1JbjtYLyxre1A7dyl9JDVqfjJj''@;'; put 'put ''ZWFYfmhsV2d8IVNELFFAaXlVN3Q8dn4+X2A4L3E2XVo4PCFEYzxlPnV2TyQ5O09GT0xKNXNjKmxlRSVvYXo8MWkqcF17T0Y2TUAlNlBmOFdzTD5FSU41eGd3cjM/W1lxWnFUN0oudTV8KFtxO1EsaFtMMmlmaXJwQGV2bV1UcllyeXd5Wk4yNzpLQkVRZTQ+cGY4UUJRS1NIaEJeXU9DM1I6Om9a''@;'; put 'put ''PllBOiVvQ1E+MGF6eW4vXSJtNXx3Wk5QPmJpSGVIYFZKYm8/LDR9WlR0enp1P1EycFh5UVMocXx3fmB+MUw/RGJxRSIldyghP3pyeXxJPndRJlU5NjkuP3xCUXgvWHArQ1lZITMwKzRaUjh+N0UwLEQ/aVspW2VmQVtucWY1XVEkKWUoU01PVX4mTD4zIjlLZFQvIWtRWU9wV1J4NmQ0XlRYLF9a''@;'; put 'put ''ZUhYcE9dKX4+TW87UEskMFFLeC9kNGhsUHF0R3FaS2piPC82OEQsK00kO0dQP3RGVXNjV3V2UjIwalJldlgmSlJYOFNpLndTMWhvaWdbWi9dQXJvLzxzRl9aTjhOKz07RUZoc1QvQ084fkF3JShhISg5alc5KllyP211TlMqYGEmK0d4ZlprYERyWixaUSE1dyh7Q3s0R05JNV9IO3xRSVohdlVa''@;'; put 'put ''cV9aZ0RPVSU5TnQhSj57ZWZUJX1hMXBmMF98NURZaUtXfjsoTmA9U2VibSl9Y1A6KlJyaUVWYkxWRkRGN25YeDImYkApWnxVL2FvYSx+fjhoN1siYld3S05jQEJvPkY8KndAUC4+UzVbOEUxOy48Pk4oMHphSShdNHg9TXpMeHYxYzVNImNUfTx3T01meEVHcS5heXlbbipsdTgpU193R2tDKHFh''@;'; put 'put ''VkFFMnxKKCpGcjo7OHhdMXpARDphPGxZSmJyal9LYjg+fEhCb21kaWFzZzZkV286JDJmYTRySE0pK058QnRyWjZHI3M5NyZwKE9fX3UiMi9mPnZDfGdTKll2bHVxcXRFWF0hdHF0KWxaVz0xS0tiWDYzUWEoL2cvPyglczBxVH1BVjtMb3d8PkdFK3MuWSZISWlnZD9tWkxfXXVVOlppPmZGNSg5''@;'; put 'put ''enZNOTtbWjc1OUp9L0Qrd35lSiFBZzchPy40SVFQZ1ZrdER6ZVVVYGJNN2dXciI2P3FaMXg+RWVFPT1hZmVkInM+YWFsWDV3MHxObHMiKzhhVmE3cDdjLn4qJHBbdU5FXl9dNS41L206XWk2fk9ycVN1Kz5NfSUiQzMoS15UPH58K2hKLGRLRG4oK2NxQVpvcHsmRTU0O2VIP35KdEUwe0ckJGNR''@;'; put 'put ''M14+PkJ3Li4rRmN9VmFmMncwSVQvZk50U1hzNF1ROU1CbTgiSEYmc2p1ezNdVyFhLnEiUlVkS1ZzXVRnLjRTcDVNL0pqRVNdNno2ZkNjJSomMy9lNW9aOUJ+PCkvOEdkIm9iP0A5cHNSMjA1Oj93UUBJQXwjI3MuPX4iN3hiIV5VQyN9X053PUk8N34iVXdAZkxvfEd5W3JlM1RtZmZ8OkQxRVl9''@;'; put 'put ''OmlLO19bTiJRMz4xMWppVj10dmMqVCF0aW0vRXc3ZiFEJSNOJUpnRkhkdDRsY2BZajpJPyRSWH4xenJ7NyhLOSlAdGJLQywlYztdZ2owISZbPyNoMnhlfmNWUE1kNm8ze1JiV2BOd2p8PkdAeERne1VZUVVbMU9fOnwsaEVlbkY0eDVFJGlbRXdRRSM0NEdSV1BwQSxlVzA9NlFWaDlobWhJfV8x''@;'; put 'put ''MkAlfGUrbDdfQHcqXUt7LiFRfTJPeVAjcktjI2RkUDIyWFNwWm4xdXFjRVMuY1FIUHRDWU9GI0Q2ZGEycngoMDZQYUlRVF9nfk57WDt1TXZlVSYpVHA+PC92eUZfTEtFZnoqNEYlQkdBazolRUc1THRfeywzdysyJm5MX2YqLi59fU9JQHMhaHY1QWpRfXppYGAxWHJNLlU/fDI1YGN+SHlOSmpT''@;'; put 'put ''bEg6cWVlTGk8SV1NaXVIaHZwbzEqR2I3UFJMM3Z3RTg3WWF1dGFofFhIWEFZOjtoaFN4PE5seHxDSzpENEk0RixAQ3lmPjFOM2RXNltISC51QkZHbTIoNF57IzteJDlbaFNffHFdMSNHbjU0RkJGLlo3VztCa01ROjtfRkE8KyUhOjNxbE9pSGI8R1AuZyMpblZbJVlKYUl8JjtBUTElI0AobmZl''@;'; put 'put ''O0NKeHJQJnU8OkJ+RlFsNz5YfGo7aUQoQXdGVklUdCtzV2lDMFBicDdTQEheejU8Oy92O1o0fkhrX31NIisoSTRtYF4kPSFCbzUzLn1LJUpqWE48THtyJD1rVTxVcCMqMElgZmMoazc5IXZ3dVs6N2UxVlRoc0okRik7NVZ8UT0meWozWlY7c2hfOz83fXx3Y2lXezhsI0guRS56TnNJKjpvTkxu''@;'; put 'put ''L2EiMSVhQmtuYUElL1J6PSxZPT84dDU9dFdSPT0oRFtyV21dOipYM3c1Kj9uWFV9Myl8YGEhRj0yKTdXNj9KdERQZnMxN2F4RGhQJSgoOGRYPVNQWE9LeFNNSmlaL3pjckdeKDM3PjJ6Um8iPEA3Ll9jRW95IlpvQCZdSm8lYldPNWBYTk1IRmBbXndMZFFoNEhwY20zPCh1Vjk8ansse2l2NFRY''@;'; put 'put ''Vj9hQmB7PUZLUGZZUC8sVzF8a2Y2az5wIXIme2lRcD9EdXA9aD1FIVUyImk8Pjc1dzQ6OyRYSix0XWltLHBlWDZFeE1+K1E+WWpfRGVqUWtaTFROLE1LX3tyUDB6aj0/em17eGd2NV9fQzo6dFhse2tHQU81SCs1SWp4UGRucl5KOjB7PmcuOi9WXWRFQFApM1JzZU5YV1Y1dTgkMk9VbX11NExI''@;'; put 'put ''SSEuRk0vNGhHISx3V0ZWL2xXPH14TGNGRFshdWA4KFEyfUpSQiZveUxqNiQ6PiJXaFNvKlFCcGYwcUdRP05APE91UFlZNTo3PSVAbGg5PSVoM25YfjteazM5WipHM3NdOU8yW2MmcltvSDEsYVVQWmxlL0kiRHlWVyVAY0wyP0w5L0B0Oj5TfHYzQ35gIWkvODMjSEk8QVtZXzcqQmYuantuakpw''@;'; put 'put ''YG0+Q3FUTSE/NWZkImNeM25OW1djalZWfUZwITg9LkdIKngyPlNuOWA9ZTd6Wi9qTVpVeX5AYkpdcDUmYnZjcEgkdTVbUT5dV08+Ym1TeSgwPjNqWjA4QkU6XjViMyxkbylMPyF7fExRMnI0JSRIOyt1R2BIIU0lWzZ9YndQOUJ3aHJIPE4jI1RGRkFtQHJMMysuKytEcmVRNz9qdElvZDg+RzVk''@;'; put 'put ''ZU8odzJXdEl8UDwwM18/Vj5TUl5+N09lUWd+PVdYN0tlK19AfklyOGliKyVJMD1XWSQkWi5LKkAqOyVAMG1bUTV5c0BKZ2U7OWlUdUl0aWJdISxoOlQubzI7UHBxPygzeUhkKCR+dXk3YzRuKjhfW294RW5yIXN8JWhdRkdNd3V2d0RrUTw9L2EiNWokajsyY2pmeDw4ZkhiVjQ6KFF9VHZZZEpD''@;'; put 'put ''O1RLPkMhb1shRnw8cFJMNU1lak4oQGQyZVpmPXk7XlphLj0lOzcoNSlCbnN+akV4ZSlLfkdRZi52dzRKTD9bZjVvUk5tTC9OYEZCQ2lvdnJVdnBUU3B6L2cxeHVdY11JNDF6dDBATSZ9LzB4RkskUmY0flF7bkxASm4pb1JKcC4mQXR8KjhJRVpwZktJSGd7XixJRCszWTh4eSFeYHZafWo+X1Eh''@;'; put 'put ''IVlJWSpPL3ZVa048ZzFdaSFORm5zLjUxM21rTUVTL2s8L0NHZDcjU3hrNmU1O0VrOz4/Mn4jTEQ+cTckXTFMY1EzT3tgQVp6eEYpYyNpN1N2JVdKKEdDOCFAc0ZTQzAiWClZJVUmSHZhaWpQWjglYzwsaWt7JCh9Xiw8UDQ5QGIqJWJyfF8+V3RNTnlRKnZjI0lQUmI5SUwlIipbZk9tQm5wfEg2''@;'; put 'put ''T0l6MUdZeTlGYWRXQ0paT2JGZlNudFgvJk0jb3g5PEhWMDJMPmc4O2VAeUJpO0NkU0RjaEE3Xig3JihlWTBPNkMxPSJKal9HJnIqWFkqXm40KihKdmskREYwaTtSPnwhWkQmYmU1dUBRUjAwdVhXWlk4VVpPMTJdSEkmenNxanxvSisrQ2w5Pm04N0VLPnpmc2h5QmxSWCNheFB3Mn05RGBIR3pi''@;'; put 'put ''NUNiY1Y9KjJlOilHV35+N0lTSU1WYnBFeCFUWE1JNjM0Wn4rVyVAalVrQm0yOyRWRlc6b2okYH0hSEw7MHhPXV9YLjB7UTBEN31FUTlhaWF8ZFNBZntndGd4e351X0hwU1UzSUgveGNWJWZlQVdDYGBwfTgiS0lTc1Zqem0wWWdOe1VDZCQ8Zy5mVzd+NGVVSltkNmR8UCJscXBoZzdwPzkhZl9Y''@;'; put 'put ''QXZwY3B5U1FWZStqXW8oO3RZeiFRMGN7Rks6YFJ1JEJzeXREbW55WUQ7Li5GeExuOGRXY19NYG92dDRZLGpfWW5JUDI8TFI+aGlDN1o5PUlRYUQkOmRbLFdgbU84XWI9SDxoSTRMKmNiRncsKCpqIThPbTRAbX4pSGhOPzJeWG9WY0M6bzZfKDdXLlJyelM5ZC4/bXtge0ZMUi9DLyQ9THhNaGh2''@;'; put 'put ''KkRpQFhfYl8kYVUzJlV7KC9YU1h1PChwMGVle1B0NlQ5Q1MiWjZtY3RlXjsvd1FLTU5odSYjKXxFYUpaT3ppZkQ0alhUZz8pfn1KSGh1JV5idkZBUj9deE0sfF83Rj1kfkI5X31kVUFDNmtNR2ZNRmcuQ3ZgXm8uVHM3NDdYNXNQUyUwSnZyWG9FQSg0LDYxXnNuVUZ3bCMzWEVYZ1ZwSylSSGZA''@;'; put 'put ''OzZRZFUjZTNnbGMmKyxKIVs2Z1VKJEVAZFU0JENpNzxQOC89SWl4PXsxV20vaFB7UVgvTUlYK15IcWtoVjN3fDVecWAyMFFtIW9LVEI5VXdVK3gjeWpudXgwRztBc2JVdG9AR3hRcGFHPXp0ZHprWyh8UWo7IzBdL3YmaGZDP01YN2VdcTNvTyJ9L0JUOGJ7UmVOZCl9YmhqQXRBIiNVcHN+Ukhd''@;'; put 'put ''YGtGKkhiUns5WiU6RGUmKGtAfT9iMS9ZRHxMV30lTiNMXUdAcmZuaElyekBJeWY5cHpPRWlbTzxxcnl2amNneTpOSk48cXBISH01MzBRMiFrcWc0R2N9YnFxMHlwc1t+XkdnPSordk5tWCZZUn4jQFFzdnRzKDg7ay5JVjU0UFlLMjk4LD1rYCE/VnxWelc/WGE7MzR9QCxbM0NmU3pMMXFhay82''@;'; put 'put ''eD0lQHxQI3pONy5yVUZUUT47TWsre0tjYD8sLE8zdn5mY2g9bXRvRkM+cjVfO1Y5SlZofVNZdiRMOV91VCZfW0o+Kntaek9tekl0KyU8VDZoXiRLTmYiayQiTWR0VnNkQy4iNjRqdT4oI3ldOXFGVkg7InYjeGE8ZFszZClANExaZTtLQ0M6fWE0Zz5zLC95PmlYS1pLL0NseCxDQG8lPzpZMHBe''@;'; put 'put ''cm5LKmsiZ0M1MVUrOHMhVEAkcU9wV3dRMShoUS40NzhSejxgYzxxRWkyeyhUcU5MeTk7fH4mVkt5cVcyRCUyRVp3PlozIWAsWjhiT04hdjRBdit1RjpSQDFBNkxUOjB2MS5vYyRkI1dAayRYZkZQfUs5dWBmRl43Y2huVUArN1plNmd1RW8pL05iOTdkMUI4ITAwZihbSTNCVjFFZGwoO0Y8aTtX''@;'; put 'put ''O0NXNl48Y25zSUdpJF9LYCZeS0hZak02YHNtZVNoXW0kMEthNEg9aHl+UHFEenk0YGdiZFMiWElYZkoiMj0+W3RhYCw9SUh6SW9STj5GNG8/M0RCPF1oSUxRdy5tST9KTllCNXY9eFpnVzsiOzQ5Rl8+X1daaHlrVnh9VjpvPmlDeWpDd09zNUsrYDA+Q1okLkRaZEBEO3h5Yj1CYjFZcGorVVk/''@;'; put 'put ''RmBSMH1NJSEzU1tRLHZWS1Jhb2J6fTEoJTQkPVZnME5EL0smZShzLng8SiRdQWBbYUE/SCIhRyFteyp1cTVGU0BGZEpLNkwsUGQ6SUw0R1dqL3VQJUQoOUZONFdYTixSZjY0UTYwej1DWkY2dGd+VER0ZGpyQHc8SHg6NHJ9NmJaWHNjU0dsNV4kVVQvUVF8amtjU0dAR0deajtYYShJMGdRe35Q''@;'; put 'put ''KzI0REI1QVpQKn5+Qy5mekdSbSNTKWY1Pj5XPi58e1pHcjcpSkxhdiNmSX1TNzFAP0NKQlNaTEpqOTE0JH4jRHYoNk86aztGMzh1R29SdGdJWStIZV9LT3VGKC4mVnNreX4wSV96ZEUwPmRVQDs9WWwuTlopelJjOkxVcl1XX1dTVFZDY1QhNE5VPzA4cEczYUREVHpqKGFhbDhkOlVaNkRrY0Ao''@;'; put 'put ''Mig0VFQ/Nzw4LD1pM2Y/dD1HbExyaTNjSVdNbkdCY0F1aX5HQCEoKT9dYmxNUGVufUZdey5BX00xKjEiPDBMWmJSP146XzU8VkF0elc5Sy57TGQ9JjN0bCRQcWRvLkJaVXZDWTFQWl97cHouRVN6Y1k4bXJURDYmclk9enR+alFlP0UmZH1vQHRxYzdmL2FkM28vV2VYOVZBLH1rWilpWVlsR29Q''@;'; put 'put ''XyE6OFtxdXdNP2hvJntgKEYhaXBXfV1KSDtqMT1aaC4xYCIhSCZGWV5aKSQ+XylVeWRWUD9UZm1UTW1qMXM3ImR3eSQyUE0+In1UU04lYyU+UkRQd1BZXU94X2YwRT40QlNVVDxKaiUifmROdWo3ZDViQUlJbjNAIXk7YmxkKX1DKTF+Y1VfWHlEQFRNd19fcnhgPHMoeFBLcDNgOUA4dVc/R3JB''@;'; put 'put ''OHY/SmE9QiQ3c0JtZ3JlKVspdSo0MT49cDMwSyYxNSU0eUtAdClILjRiPHlrOUx2fSZVKWJkWEdTX25IeVN+QkU9aUxIIj5wN3w3InksWG1aaT4hPHosLnJxK2VFOnlUVmxGO291bX0+JF11RHtxJkBdaEVwUWtYNXc1UkpERnxlRj1HNUN4Tm0hJVJhIixiQ2hhRmcqYiZ5X1ZOeERIb2BuImp3''@;'; put 'put ''LjU6eTtOOWpCenZCcV92YTRsXUcoKFF9Vn00d0sqNjpFe0gwT3hiQ08+SEQ7ZzE7enx5YT0wKiFYZlBJKUs+O2dFZjBFUXNoR3ZRUm4jJm0jWl17X0ZWP15MX1ViI0chWUNKNGhpTW5SNFpHdWNyVTAjVjtAaEhDQExUO3sxJC88c0V1b2lyXnZnOSskayRDWipVTGB2T3tzYU1mV3ZQemM4fWVz''@;'; put 'put ''Rkp3fEQ9USM1RX5KXnlsVFR2QkRIQEFvT1t1Wnh3WVh2SmpffFpyR05PJE85eHd9SlNiRl0yYFckWG5MbCNeZnpmendHdEJXRCE5P1RTVFZHVX40aV1EJW9FKXsuU256XSx7JEQoRn4lZzk5cWNhYyl7WygwNT4xN0ZJQmZ7aEA0KnFtT1YjcW1OcnorQ3xEdyJ4KHokNXpsNWFLJjVmZnZSJDw6''@;'; put 'put ''SD1Nfm9lMjF0cGBhMHomcVhjPlB3NmMzbHE8InZ1Wmp1KH1vMUJ6PWZxNSpsRF9XTlYwYy5NdkhfP2FJVWR+ZTklezFFQiNEN1hiQTFjamxuMF5EJktiMzlYeC9hNEd9Lk9IPnwyWlldTlg7XncmIT1FXyEqYipCIyIoMjFdQksqW0F1b3FlMTImJWFQQkBXTlZOMihqLEB6YVlAVlZuSWdaVHJ0''@;'; put 'put ''XSZLW1lnQmQ8WV9aOThDdishWCwoUTxSYE0/PjJsez5rQ0BtbClMUEdsS2QySyk+YHZ5eTVPO2B8N0I5QnlPZFJqcyxvYEpFd3BlNHBrKCtFOXlGWGJebissPyUrb24rW3FrVlJtU3olLm87eW1wTSpZJG82XnBMZEViN0E1Y3BUSVVeeXdhNUlETGoxd0R2Ljt6OkxWP3ZseEVaSDhRK09EUVhi''@;'; put 'put ''JF5SYj5NUElObFcmOn4jRldBbV4/ZT9zL0hHenZKeEAqKCpOdHluTXkzTERkbHJYTz5RPiFnUXcrVkBmIXhLSHVrWWBRbVR6b1olZWoqaH5ia1Zxcn0wcDhpcH1kODs1JHQlSGRtbUQ8JUZMeXp0TytheX5GL3l5YE96SEovUG1mOzdQTWJqMiNYKWhEPGNMITJscylMRl1dWT9IPkV3UE5Vfk9u''@;'; put 'put ''fTlzQGlYNmM3fXxJZXs6bDZdaz5GUyJYMHNFN0k8QExUTzpbWFhFQlRQb1l2RXN4SXRWdyNwMjYpTSVbXW9+YTNZXWgwZ3g7TXQuJWY/QF5zKHhJPCxvXjM9VV9qaSxyZno4YntKMUxyQj5CaUh1KXkiNWN2NUpmVWQjVl0pbUtRQW9kfFFLazs3WmpIQ2IwLCxUcHp+eCpLYCohbyR3aFlSWy9x''@;'; put 'put ''PE9MN0EhISVsWml2MT5vd3wvdyt3QWVbYVJkJXIhWDRKSTNWTnNNcDJtJk0oUj4oRTZ5Jmw2TzpSPUFpd1ZyZlB0KGRZSmAvfUc+I35xRzJsNWFbezApcXByRVpELmxJbFsrNy9NVn03KmN4OSk0RztPPGE5OzA4dDsxTVJNYFYwOz1pbTpsNUtoREElQnB1REZIVTIlSnBnSFVFJVZyd1grfTJh''@;'; put 'put ''Q2R8ajdydTp1cT8yWUhERTBlTj5JRVNkN0A8Y2tHK2NvVzE5REwjKytDe0VLTVpxJTghbiFES112Omk1VVQ1emt5a0NXclB5aGhGfj0lXXIrd2AleEpka2kjY1J7cGB+fWcpUl91TV5wMDlbKElELkxINXgkMnhGQ2RkQi5VWi5fM01xVSh8Kn0uTiZNZHx6ckJwfGFkRUxiXWRCOXVCTC4oOW18''@;'; put 'put ''fT1bcnZtYGtXd3heYFZSbCM6Y1YucGA0U0U6cmx1NFN6L1EqaT8ibEM4XkpBVSNXUTMha1tZaC8+YUlAYCZDJFRDRVk2RG9XRV0qbzFwLj9KZjlCcDlDbTgmaFVxSEVSNl9eSG96dGlHQUpAV2AhSVtiOjkmTlduPChUPVpvXjhgQWRoNHZWbz9FfEpOW25ockxbaCFsIWY1ZWxyM3prZ0BydGMi''@;'; put 'put ''IjNBTWBScyI3NyRqeSFlQ3dORCU6fUhbdHRydFFgUHtuenAyd2A4YXc5XWkxY2pEMlRUbDQxQyU7KT5Qa3JGSyllWlszc3E1LzIkREAvZn0mfn5CT0BsNVJsYltkQi9TL2JMMkgmSGJ2QktQSFohSy5rcGQkejswa0BCYzsiZV8vXmR7blE0ZUUmflhuTVArJG82STQlbjAxL3F3P152TXVodndA''@;'; put 'put ''Z11AcG09WHxAQm0mIlV8OzRXP2VGPmw1dUIrbHhMXml1SjpWdFhtTihdS245Jil4TnNzUFVhPHZ9RVY7bF5jMTV0NE5ZOUU+SGVVbW9dVlN9YHIlL2dNXyw9PXtud3BjNlhBRz59e1RDZ2kkX111ZSNNSSt8eUhReUxIaFtzXVI+SmFMWDtafSxMTlhMZC5bZVUlSGYzQjkpR3tgVnlHUHF9UFFw''@;'; put 'put ''ZXlKJlVoWmM8S2g9bSo8TCx0aFBTZ2A3OSI3d1ZVdXx2b2ZYK1Zwblpdd1BJVSRZezlHXWlqK0xwelFMek9QSyF7d0tdbTIsKSxfPkQvRG9WKzxbNyhjRUhPbEBwOXhgX0lwcmxGVjF8dUx1KEEuTXw0RWJ1Q0xbcFNYeD1QS2MlZnh2I1NuVDYrYSRIWS8iQXVicVBrXUZSWlVVbEhERXEmRkg4''@;'; put 'put ''VU9yY31Zflc/Smo5JHZCL1lkOihYMz4+JnVlN0ckP1o1KU11bn1WRU1iNiIrP2NXcjEyUXFsPjhaIzlZYkUrUG9KYzNNPC9FKH5tcHolREdGNjQ6fjQ/ITZHbTozTDFlOnlYfSxAQE5xfm1vUFcjNChDckhrcTxJUVNQY2lZX1RIS2MrRjZVPU0uVjx5JVR7W3ovI153UiU5RGpSbnFCUmUzcExF''@;'; put 'put ''azFxU25ZaEBdSWJrW1NrXzxFaVROd0VaUiZNPkIjKTVwUmplMDY8UUVzXy5tSFgkX2BgMWVSWHQkP3R6QE9KJlI6NGpvUnRFVyk/c1A6Y3B6JUh2flhhZ1RPSVpNaj8wZnJ8Zkp7eWpAO2x8XjckSk82S3ZxVks6bCU3XStVIVtlfTM0Z2IyRzlPOX4lJGF2YXdONyhndyNJd0wvKGQpMDFoeCZM''@;'; put 'put ''fkBRTzYlIjRnUD9uSUl7Pj9pTFVbWDZ5T3tDZlAuSjp3Zi5rJFgrN31eOlspPWUoWGQ1SSxTZC88dFkuUlddKi9FWC5nKm5HYDdDd2BXdkM6eHBGc1UyQkxMK0pQL3k3WFljLGd4UG1RKy90VU9JZGtuJTA+KHYvOzZCO1tSRzY0TSgyJXhXWyJnNm0sel5nKm1eaEdGPyF2fHZwZD1kTlY4QTNb''@;'; put 'put ''Q2FOT1R2O2BDZ0VdcVtsLls1TDt2QlpUJEtMNDtpSGp7VzooazFseWYqY1lDXiY1TyJaR2lIODZaQDlrRW1lZ3pfd0suQCNqdDBsfG52KjdaR0p7e0s3UyxtYSxJJXxHdTdYPD5hKmFPOCQ4bCQ4JTw2OSZpQ0drWSFUOV8pQmY9Ym0vW3xUfVNzKWRyLksjeG5be1pFZ01+Tn5iZGAmLilBZVpW''@;'; put 'put ''ITtQQDxTaXR8KHdlNWgjZGQ9RD1zUWxFW31YO1hlLHF0d2xkXiZvOjdMLyEoJjNFWGp6bDpIYzZGL0h+RllpQ205cVAqQC9uW19PKCRLUiZUZTMyQkldPlJ4WzhNXSVeb0tXZyxYNDNgK3tRWiU4KmdKQUtoKU9VNjphJSFbel90KWd7SlpKMEowJHZLKWp6b0VxVlRSfiNybkJheWJCLERIP3VI''@;'; put 'put ''L1p8W3Q7Y1V3NjckQmxKMXkiJExfPk1WZz5UdEdrNyRyUkR6QjFOIj53Y2xWakIhRD5ZWFIwIVVhSzNzK140SnxENUx0RXl+JmpIJVRDSGRqXTJdRCJMfVJVSSkoSXZ8ZCIoMilpbipvYTBJbnglQW8lej8+cnlSIV9aN093e189UT85N0UvTWFKRGsqemZRW1c5OCwicXYmVDtPMChOcDxGPzFr''@;'; put 'put ''dX5afWFhfEovNUlaUjcubEg4YDl8Rk9PclIjTEx8JjJEVUs3NElmbDllUHo2QmVOOSpFejp1R3ddNnFnQFhiJiovfENMLis3RWojL1FgSCwyXm5wQ3FDIVZEUjJeX1YkYDV4TT50Vi97UndSRz9+PDppOGBfRlp9OTArb2chJl1oN2x8ImxfKER6e3AuMVlzW2kxT2pAcWxRd3B8OHwibjh5fEth''@;'; put 'put ''bl8zP3l2eTQlO2BfLjdMY0xbUihEflVWYmVXQn4lXiR+VUJZTjE7ZFl2JDleanJkVjR0RDZUSkF0OVkyfHBLUF1DJiZLLnFCbUZtRylwSGNOMCNFXiRMVXxnODQsLGV1TGMmVTQlcEhhZnZTQ3wkeyg6ZFFwN0pOYDxGYzJ8d3JRSD9PUFQrMjRpVmcrcTArJnE5dEZ2eSt9K0JHNjxXbmskZjR5''@;'; put 'put ''ZiFIe2JfcDtVRVMpS0hZRGZtS3V2eDJVSGE0c1k3NjxLVDxFUWU5aEE6c2U1NTI8fEBJfnFGTFdSNik+TmJdLGk1SzxwcTI/N1FmUm0pIX5ISDNqLmA2Qz8mTjQoP3UsVmZPKzlLe2g1RTdFTEFmeFM8ViNtPz4zWUZhUl4rWUZEMWVXcVNLJlp8YkpocDQ9LC5QU2Q4aEUuZTtHb1pTaix7cT5G''@;'; put 'put ''OV9sT3tdfEs5SWshSzMuZlduYUBqZT0jcG51UC9DazMqL09mcjlfQi5yV3FYLy47PDh6b20qTGojLE5BbnJSN1s0aEV8S1dmU2ZlN1dCZEVHUT5LZU9SWjtPK0t3NXxvOkElPDM6eld4RWBjTjFgeTloamdwNFg5el5UK0RAVkdSXSZGOF1GRWwuVE5SYXF3cCRKXWMmdFExQH4+aD8hVlI8fklt''@;'; put 'put ''d0BHd1IzMSgkWShgK0YmM2BfJSQidSEvby5EWWtDYU1KYUJnPiJAPnI8dHtUNnohblpmNCRzfFlIXkJIYlAkTmdAQyt3ZGRtOCNka14lMVosV3ldbn5rZmckQH0/emZrekBhJFtqXnNhZE5ddThIbHJ8e0Y6d2V0NjhjOFJWOzZbR3xsSXVPXS83NiJKZUxLRFolPT5NM0R5fUsybmt0MGxPM0Bg''@;'; put 'put ''PEArVVhOMzx5I3tbcj1TeTJlMTtOcmd7UThsK3RAfVZoST9NKm5xUShEKCJ5PVs9RCFdRWg9QVNCK0pQIWpVLHVuNDxFdigiKTNKREpMSHNkbztDIitHZlBjQ3tTWS5lTT1ANE99bSZyVXdeU3pVS1IqOk8qKHImX31MOkZsfmh3Nm98ZnRUW05ed2BYZzV0NV03PHV7Q3R5bk4kaSxPfSlreCw9''@;'; put 'put ''dHNoYEwwdHhNQEdGX3M0dzo9KXA3WHJMLnhgK0Q1UmJzMXZ7QCVbPXxqRStGVWMrdF95TnhNMGBIcipuKDlgdzIySjZQd3h2KThCJHRPJm1pPFEiVH1LL359ZyE/R1FQS10uQit1WGNQcz9oNXU5dEJdMVBvKCRaV0BDfUNoPyldO0psMGEpVT9+VTJ5JnFYLzlzJmQ2OSs3Tn0kb09eTSMsNiNR''@;'; put 'put ''NT58Imw2KypoXlR5Pys+OyZ+JGQhTllLU3lYS29xX31pcG8wR1ciUkRqKEt0YWkkQUdiUSRkI3BTX2k0UG5NYSFvS2JySEhrSiNFVWc/aC5mZ3p3WX5vTDM7UWNPOks8KVtaXnE+RkRKdX5kfWdOMEw0dml2SVoqSm5FfmUyNzFpRU8sN25dcEksKiwvPmNKWmJvOEF1R0A9OSlaS3gjW3tEOiNj''@;'; put 'put ''eFRvbyV8VEswbnQvPStrfFpwWlJIVWNsOUdIdlVlS0c/Om4kMDBIT0E8QV5LYy4+eHVEbWd0Vyk1KTQpXTRsJCQqIz9eOXdDa3hwZjw/TFNBbWYoaUg4PVRic05AYkshOlcqVDxRK25ZamhuRT05dkojP3FoSzhFT1BydHJpM1MxVypKNkdIc2MyYDBtcWIselRYLz1uUC9mQm02NmNSRm1OZXR1''@;'; put 'put ''KXMmY11bP01YeVRaUDlUNSEpaldnbURXMSR0ZC8pPH4sQEs0eGhZP1MsNThdXVRWJTY9MGE7PSgrQSIoWyU/dS5bdWU2fWpqRUk7K1VhcURWK0dqOEFabEg4KyMiXkNedz1nZndYSGlMZGBYTlhSTG4mQ1pefngibXd2XWZLWzk6amMxfUBWI1R8MTpsUkVvRzklNTNUYXowSFR4QSRkeSQ7KFQ4''@;'; put 'put ''MUd6JUZ8RXU1WzMqS2k1RkNUe2s7OVtTdyZNRSp1PnJnVz91YixGZkZsMXd0TkZpWCF9enZmaEM5ZD5rNmUvLzl4UWsrRl41NlFtWTwpRzN5Ll80SXlGUlIudTBHMXw1QzZtMT1WOHQyWihscTZhZSomaisqYFteYSVsPHlta1QrSlJ3VnlVPVlfS3pYWWA9eSY/T2s8cXRxKCshUSZRJjd5cFow''@;'; put 'put ''aHkzWXBgSiEra1ske15daklae2o0eUg0OH1tMUNhL20jbDJ1eyRfND54KnshM2JhbD17N3V3N3c4b3VzNllVe2FvZnVuQyNaWD13flUjIkdxZlhlKj5YKWR7cVB6Mi9DdmImdmB9SChCZjJMPXAuPTF9WUM0T0l+aWhgejIyZmJmW2csUXYrT1tfJTFMRColSU5MKmxHK2JQdk08Wn4/aUQxQE4x''@;'; put 'put ''Oj1ROWE1eW8jP2ApYV5DIUlVUD1XbG5CNyUrWSZrQXdaTkMvRnJJOEkkRWY3QjR3YlRrJlE4czklMyF5RTtjWGFgeC5QNDsxUnkqfHRUX3FweHQwdC4mSWVxZSEzXlh8SD86RSMuMGh5JEwpUClGb20sVH4uUXJuY3xNWlFHNW8/LjA7cFBpJlgmfShEflM3UTh1VzlfbkNBYyRzWXtNd35PbW4y''@;'; put 'put ''OCR4OUpgJWhfNCsuWXk5ayhjRm07d2YrVF5ZTFZnP0BgbSslJT0ycjE1b1N3OnQlVTF4WGpBa3pCfC5KK0o6ODdtJEo7MkRHOG0sTUlyKltRWmAjbHZTJjRUP3g+a3JfUk53SjpES0h7M1RUL2NIPk5ieS52X3RUV318eGhJWCM4T2Nyci5aYzQoIXZFbEUjajExcDlBNj9fYmc/PSFCRWJMPyNN''@;'; put 'put ''Nz5HT1l8MXhqO0g3ZUdvKSVvPnA2ZlNeSlE9KktxP0ZTU1lESzt7LjR0WHlRU0tNJHlzfCJbJHtIbnIkbm1eQGQuYCxmd0h3cnowbjlPInJPOl56Nj81eUlyLkMldWRvIXhQbE58IUdvMWx5STEvPURVTGVARDVmblVeOjM5QThicURHMWdLUV5Aa1N1LnlhQEFmMWRPQntxWyEoZ0kxT1FPQlhE''@;'; put 'put ''VEomRG8sZHh5KlI9dn5PbDYjR2YxcFtzeDJAUE1XYj13ZmdiR0hsRi9zXXVkeUdZSVkxLnlkNHNMWCM2WTxoPWhqLlBXSX5bO2opWFBzanMkIV1WT3gjIWZJdmJZYkUxWSErRmxIWj17RjdvPCIvMVNWcSE5fDUyVzs+NS4lYURIKU0xTUw9KCJefTR9dXp0SV00Z0tnPzZTZlZXMT9gZThWQkg8''@;'; put 'put ''KFl+UytMJl9afmA1RkwsUk00JV59YD1PcVVRaiV2cDQkKkNWXmBSPHxqcG4hTFB7IlltZGN1PjYuMDZsfjMvPXh2QC8wcTdEZi5sfGU9Okg9TzZtWXVEZUl5NV59ZmlbVVFbZDpJYXAiMUA8UkJYL2dCeSF3e1ErJU1yKzsoYWg2JVhlc29vKG9heHt2Tn1WfVA3Sz15P3ovMzxaLHshOzd+IW9o''@;'; put 'put ''Slh5IlFySmosX045PCJhSXYxaEI0PHIiR0U1dSJEKnhDeyYraCt7XXhmX0xPZ00oaklANEslfWp0fSs4OEBVT1p4Q31jISVpNWZeL2tdNU18PSZhWEsrWyY2WDwmPFpYT0dNe31ePWthUGxvXXBKY2pwV3lSe1p4I287UHp0SXowSWQzRDRBPDttNXtmOmo6IT1HfG9gdkZpWissIWopIkMuOFZ9''@;'; put 'put ''TkIpZW8sd3NeXWBEUU9dWSk8JTxKPjtSXVJVdG8kM1c3djUiKGpZMkgheDdOOGtQRW1PS3BgVj5eZjpBcio9S3h+Lk1WOktnYkBnLndXUWh0SV4hVWVpQXg6T0wudCRReEZSVyQvd2wkQEJoW0xSeXI+eWBBJiNIKFFbdSYxJFhbTWo5Vm9WVDUxWldjYE5iW1dZZDZzN2JZQEVMVXNJU2FDPnsv''@;'; put 'put ''fikrK3ltRjxwaVtPXkJnJW0hIT0qRHAiTjlEUDEkIzhPQywqNXRsdy8wI1gpa2NyKC5mJWxpX19LZn4mXVYvT0p0YlJVRjh8XTFLJltiM0s9d3hjTU0yL3okNyxIT0RJN2s8X3Z0UmlEfGQoeGtGLlFETE53O2JbWil8Ij9+e0YjT25UcXN8XzZmI1l9TEQqI1J0ME5MbWtnO2ZzQ1c7XiVrXWpX''@;'; put 'put ''WCV6JFVQSURTaCQqMWQ/Z1Y9N3AvbiJ2TVRpdkx7PH1gd2ZRUF9WLltLSF1rX21uQCUwOTIwNGV7OSVyV2EweFBmPFMqTjY1O1U0NkRsR2VqLHp+OV9uMDp1Uz9lLHhqLz1JZF4/cFhhPiwvdD41K2dPfU47UkNPeWgmUzZ0UElEIy9HTyx+dTtZQD8lLFNhZG0hOWkzYiUkRUAxYEoyS18saUVj''@;'; put 'put ''OUVUbW48MTtTdWM2RWVLZEw6QiYsZVgzQi5JQUVLZWtSS2puKzU5THpSJC9uTFE9IyNpXyFiblJnPXZRZyt8alE4IzlMWjVvTUYxOi5eN3JLQncuKTVTe0tJbTJGR3ckTXIqaFQ2Snc9MWRZRVtFJTN9PiZPZkoobmh3XW9QaTJQOkQrZWwoU3Qhfi4+QkVmM3tBTmxXJilWeHJNOFJgZis/KTRv''@;'; put 'put ''YHw7Yn1WMENrfVFfK1NbNnVfVmMqK1UhV3pyMT5tSTZ0XzRZTlZaJW84NHBfN2EwKn0/d15JXy5sRHg1KmJOSW9xKHImPygyKUswJXtBTHVtX0x2SlorJmtQUWQpTXROXz5WW0pWUF1yLE1qIVh5O0NSQ0h9Nz8ha3UjWXZNbzopM1NpUWVfSENpPl0ramdSZkUyUlpwVF1QJUN0bkRfQF5HL0cu''@;'; put 'put ''KHIySSNubDUzJGQiOi44ODpDenpUbVZGQmBNU2g+PlA9RF0idGA6LlM8JV48TS9vJmI5eWp7Ky9FUkglMnFYYn1TdjBdanRgLD89XjhCQnNlMFpPJVd9W2cwU0IuTyMma3tRbVRHTW45cE04VGNyMH4iIjU8NTBhRigjQyRMKCt3OzpXY0xYfTFhU2k6WlUoUDdtSjBAeElDeXQ1akNuLEBidyRE''@;'; put 'put ''U0x6IShwZVRWckdNLCFaN1tIYl9+fXNhZjhXUzdhIjAsJk8wenkyLyRSaHtpWCNqK2Y3djxQfloudCp5fl1oLEF6eVU3eDlMbCQrNDhqRk5zYSFDTkwhX1dsKTxzKiNeTmFdK0E3Ulcjbmw8MnxmZiJPKzgwSUpkdHhmZGVWRUZDMFlreT4mPUpERXJGa3c0IXBNJEEyXWQwfUpJSHU8VVJXaUxV''@;'; put 'put ''JmRWTjc8RU1lQGd7KzNUTF1mKWY2IlgqJDJXeDZWI3FnJEhDSCUmMGRmb0xlcWNBQFJ5QCZtdUZFIXxBdy5YR3skfHBPQXtHPFk0clkpSGQiPEAuMjRCTjErRXo3JUFDW1ZeX1YhZnd2eTpyKGRpbzZPPDhkKiNPP2ZdUzwreD88VkRIN2VdT0IqQG9deHpXKzRmY1BHVjhEJUxLUVpSOX5CSl5j''@;'; put 'put ''e2JlPGkpWyRvUDAkelhId3pwKEZLWWZaYzVUdDdDYz44Qz1aPE1SVGFLQXlfYFpvQVtRfFJjXkJoWm56MkFySmdJXntBa0ZbUk90K0g6ZzhRQkA6I2syRzB4YWR9T35aUl9FQ01COVVWNylSTl4vImBqIUlBO2tyRzVrWmp6Vy92ck8oMjIweTBaV1I/aVZqMFh8Z1l3ITk7dTRhKEdSbnJaRzpC''@;'; put 'put ''bTlzVyRScmU3e3hdcVUvYGk/XWcrYiF2MnMiQ3J6eGN0Qkp2Ri5MXn4rdCpgQko1SXNpNjsoUSw0c1JCTzpHZX4pVVcjaGdtVXEsK2dwZ3hTcnh2NlpuVXd6UTJfNmZva3VpeF1xcGJ+SXNISDlJX1BKZlIkWztycU5iVWBYdUJ5eFdFeUQjWHRvLHdkaD8jT0lJKCkxYWJwZ3AvdzNZKEZ9TXY6''@;'; put 'put ''YDFBVDA9QXZodDM9dUksRCJEfnRmIXNaMk1tKHJweiJ+JVVGd2E9TFU3JFIxSVUuQERCUkx5XzZUbChEJDJSdHxnISthJEEpJFtgXTRgflZzV3c1WjBUMyh6aG43eD5iIi44OG5OX05hOHdSV24lV0lvTGorclg2OCZKWXhFLHVpVD9nOHR5IVRWeH5Zai9TeW0oQyYkZyQ2KEJvNDd1K1Y5P0hf''@;'; put 'put ''OU1YJHFzK0V3fjd+RntvcXVpOlhyT3cvRnxjSlorcmw1RDNeVH5MaHdOZTxlKWkrYWFNc3xCUHFhTUQlaVFlandySEkiQWoyJXg3R1t9JEx1MWY0SDEibnp2VyZ2VWxJM1M/ZE90U1s5dGZdKyZBSmJNNjNjMFdYSGA8JUlPSl9jfDohWmZwL2d+TXFocmJVYTwwcnlaaC8kLGQ/PlA1YTspPmU3''@;'; put 'put ''WEg1TT4sYVBuVGpJQj1jWEVLLCFaSFQ3LCtoUEZBUDhfSHt3Ol1+fVk+V2VIfltdWXxBPUpmOVVGWCtqbkxifV5rTig/Vy9JVk11dlJeS0xoIXl9aUhoandqUHVOdGF6anVPPS5YYTh+dGJ0dk1YRVEhWV9QVSV4SE09KyF5LFB4RU51PGZuO0E0NzkuVUFyTi9CdzhDW19aMlYuc0t4UylDfWd2''@;'; put 'put ''RVRENnRaZyVOIVlDZ2MxfmF1Wjg1VkJDeF0jczR1Q3pqKVV7MWpuMTdbXldeRnlMQSkuWG0pfGt6eSNgKX1mN2t2UXtfUTJZZC51c19+cjppc1hQe15+NWg/SFF4RHlBWXpIcFFfSjpUMz1GSWM2b1ohRHNofiZXLjtiSCFJIypzLltdSnhJPik/NFs9TUMsVz1MR1dmbz9Lel5FWF85Vz1TZ2Ux''@;'; put 'put ''M2EvViwyTHxELiE9OmA8Zz1UVkI0PWhCQz02dEd9dEA/SGx1akFuYW8kSyVkJnteRSsqeGVBUTU8WnVIO0IlW09mZUledE9VRjVaSUB0eGh1Y2Y/I3NDMT43MXc5L202S0ptZUg0dkszNU1RZCtRWyFeKlhgWkB6TUNvcj8kLDBwPSYlUShWeUZ1KzcrOTh5O3xvUTMoXnZ6OTtVdTNVJG1TIzM2''@;'; put 'put ''WHBKcC9LMn1AQGxFcUJpWEZKOHxRQHdETipHSTFTOmgxSz1YeTlgMTMuenczIz14RSpsbGtQWGc/PC92WUpsdlpANkhQeylQKHV9WSY4In1UQWdjbDxGYjVuWCxhQl0yR1labzZQS2RwVXpnNSgkT2tZZEM0dzdwSVRddSN8ZWQ+P3pRYHhYdXl+b2Zqd2VrdW5fPkJuM2txR2FBPyxJNVp+dzFy''@;'; put 'put ''c2R6UzpocF8rN3ZxPkdJPl4pPjR5UEZaPz11c0l4KTM5cFVwcUR1N0lPfmgwQDl5QnZZXzdCcnRPRUlTaT1uQHNRQ3EqQTUmU18reUxtNl1jOmh6Nz5yNWVZXSVMIXI9XVNJKFRGUChOJSJWZVZRLFBAUTdZPF9XVXEmeGYpLz14ZzROTkdOLCVHIUU/LmU8L3g9emZnJlp6Y1RTemciOTF3OGFO''@;'; put 'put ''ZyoxR21Gc0x1bzw6SWVmciE/WVQyOUB7XTJfYWM3US55Km1hXy48PXZmL1l5O1lnWWxrZUxJZDVtZyhKTDc+YkB8RT5qQipmO1FNZWZTZkwsQnd+PH1VRDZocUguPWlPVV83PX5FYnUhZUlzX30pbGYoSWh2WSUwPjJ+QipbbEVBLz1DWEJJeFMoSkdbIyxfZjpqIjgmTz9TeiU1SSZGNVQ7fXYl''@;'; put 'put ''bFckQ0lgXSN5QEY2KHhkMl95Un0iSk5OZ1oiSFtpJDR0RXcrdVIpKTZKT2IoRS9YZTcpb2dvfXhVUVFyK114Kl9QeWlJcUhkaT1wTX40WXZKIXcrRmJFUnt4Sjs7bXBMUFJgdzJ4VWlxYHJeOCxkTSs9U3hSVCs0WTpgNjQmISReI2tPTHtTd1Bhaih6YjFQMDM3VGldSH5pbn5CKyphQC8pI3M5''@;'; put 'put ''a35jcmc1UmZyWlloWDtyeSYoIURiRygpbTkhQDdncWJ8c11qMjpdIys2Z1FkYlJ5fWpRW2VgaXlRd2dlYWF9XlpJREVdMy89SiJtTSJKelVKTFFvQ11JVHUuKFEmS2FYZjd6dmFGLkB+eyRzd2o7dDBqfFNFPUMhYTFmfXFBYUpfenE/dU55aCs4OmRXaUokMD0/ZUNeRnpZR10qZUB0WG10I3FD''@;'; put 'put ''SUQuJSRleTI7bjxyelNec1kyWyxFPCxTbEElbTI7dDUhLlB9SHpoc2lVLmQxJjlYOEw2azFQcjYyMXdtRjFRMHRINTNBT2BGI1J8QGQmTmkyPztyfEhWPkh8LnRYOmthJTZ5Sl1zKUBXI3dmVktobGd6ImA6KkhNZ25sI1g1QUdYNjpSPiIxPD5JOWxlQUBrbHBNOGh3YCVmWmslKWFrXmR8UFta''@;'; put 'put ''OFtuUVN2R35kc3MpfG8yNUR2PVEqUUxxUTBLWzJmLikkVjlxbDd+ZVF0U1E7ckJjZl4+Ok1sUFY3UUJpbT08YTVwLDc0Xis0WVlEeytzMyM+MFYseFg5SSt7RDNdZU5BRz5yTmouek9fZmh0eXUmRz59WjolZTM4OltKcE1IZSx8X05ufHw0UShKcjYhWiRrZFpAZEk+dGtaW0M1N10wb2hPQjQ5''@;'; put 'put ''TSltVWB4N1ckM0BATChBaiskeyZoWmklJktuV1VGRSpybzAyVVFwTXJydGRROjg3TlJ2PHl4Qj14RWRNRmhsTjpwTitJVWYjaWlLVHM5ckdmUGU/SW1NY1RPbTAzP3t9VkRIJGckRj82NnNgXzhbLjJnImtbWyUmUUxlOzw8Vk1wMyZBSUs3MjZQUTtWL2lyJSYyX2V1NFM1fCJ5QixZdTcuZE4i''@;'; put 'put ''UmlaTC5udmZ0dSF6YX5WMFdlaTVia0NrZ1NpOTR0Xls7Y2crPGlmWXpkdH4zKVsmPC5UMkt1M05SdnQ2blFVcFkzNCRLIlkxPWg8bl9rZTxLNXBsPl9vWEZjWHUkakw2QjcqXSZhTHIwUStmND9MdmAydS9RfGNMbitJeUZPXW9CbWxxWEhPYC47UFsicH47bkVAflpzfl9XWChGcipfPDtGdSl+''@;'; put 'put ''S11xMis3JUtSSGkiIixOfn1fSWpEWWAwJiZ1LHx2XyZLOHo4dWM4WzZRU0BGdUAqKklaUy57YjZUNVh0WS89WFlYbnNfMDlfYU1pQFUxbTA0WCs2dGJXNEF6VyxuWTtGa2AyYlRbKXV4NlhFTUA9MlkxWj9xeyhmLFgsPWZDQDpGTTBjTlF8PmtwREc3VkZxV3VZaDJuSSZyUWVKRnlmR0hFNzM3''@;'; put 'put ''fSNURkluRzJ+fGs/PDUrV0JZOEFHRER8KEN7TDsod0VuPUN0Sl5aQzF4aURvPERCcy5qWWU7ekpzek5gLj9IOj9vLm1ZOj5oaVt5KzYwXiE0XyZdTldDWklOS0ZJWmdfPCpGXWBnMSV0Z0NpKHZnbktJe3Uld112P1Z4eShgQmMqcGsjYWlEPDhlS0AxcmhbKnZXM2xSejkpYkZZM2M7QkMpK1c2''@;'; put 'put ''P0hOV0NKUng0fCZFT1l1dWp+cjMiWWhAPWx1a1RIcnJhPlF4RDcvTHE2N15PXXBuLklibjImcnAuYiV6YzZfLzB+bzdAe0Y3aD8oW1hbamcrbX1sJnsmTEVmQDFpWWNQbSFDdUMzNGFMP3M7I25kMVFXdmIlYjlWcDojK3NWUzt7VGBKS0cqR1ZRZmhNP0IrPE1GdThkQDQvWUlkcSVjYDZ5PVE1''@;'; put 'put ''S2x9MkJ8NWR+QlVQdUFZSTo0OEk2VzFPbkdraFtvQE0pQ3R3XUUyKDVhfkZ3IkszajclfU1NPHFkPDUsIVYxYjZXLGBgSyg8OTRbKE40aHp1cSh0S3VIZWB7Ril5LyhRQjtCL1t8JWdTPjVpeUExSWlzLFYmKCVJdCw4P10pTWVFbjxsbndGOy8uXyM5eitLInYpSiMoI3ZodC9uQi8kODlNR1VI''@;'; put 'put ''cyxwNUVfNTR8KDlrTl0+TXUqcXY2b0MoUFtlfSNRSnpbOV1UJlcwcTVTMChzPl1ndFhfXlNANyFHc2NbeWAsL0poW2xEZmdPeClMemJpcUpBIS9GSDIlZDB5R0dnUCI2LzJ0X0REbTtTVFk1KjE3TVoxPkZEX2RnQm4sY0JDU2VFQj94OklHTDg9RDJ7d3o2Iz17TXJzcGRsYDNjVio5WT5tYEBq''@;'; put 'put ''NipOMUBfQ3o3Vj1WZHhGYktIP3w8bFdSRX12SEczZElOU00mPDtNXn1FUToyY1RreF9iWT0mdzQ/Jl1EPlkyMlU1aSZze1EocnhISTsvLEs0JXg4Q15HOXF9N2lNIkcici9QdyI9fFtoRGVHNUBARjQxRWx6UjQsTngicjwibXNaWDAjIm0mYXp6Unohcl9TdjNkVXszWyExNVVNMjBZQkdvM1lj''@;'; put 'put ''flVjeFBwXkY9QjN4WWxAQk1tcWJ8XlVNVXt4TFZJZDdhT0Nze311PShrUlEidG1yS2xlblt3TlUiV1tkQlRHMF0wQH08dj53VyJDTjdXS25aX3o5OCRFdTswIVkwcFBDYWsqfmMsQ0dKY014emVrLlRZOXliJXU2WV5TT1NqSSg2ayN7QWpVN1YvblZyKUY4OVtJW0U0aFRbZHc2QnUwY0dCUFAv''@;'; put 'put ''RCJxcS9UJjl6PlMsSiYlRkJwdHglI2x3QjY3JGcmcXtEbSg9NVZRKnFdfTdhbXRROiFvTTBJd30rPnRTPUcoVnk5aEpyU0hQXiFrbVpHZD8jIXsrTUVqeFhrcEVtMVVsdT4sWVtmKV9hazclZTV4YiVlTyhpQ2Q8R3RMJjhLUE1kQmU0aWR8anUuSkt7Zl5EI1diS2FRQShJXT4oXjpJeWloTHQ5''@;'; put 'put ''KloyRChTJUR7L08mRCMlWjNfZ21iMDwvIzYkRExvWHcybmpNe3lYX04hYkhoMz00cCMqTXhCLCNySW02RldtazxkMXxlVGxoSn14cjd9InwyfiJ8XmtbU1ZYSkQ0TGJyL202PSxfTURqWmpyQUQ3Zm56dyJsZ1pZSUllRzJ2KjVAWF5OKmtkS2JWOCViLjV9anw0XX1ETFFtWGRLNGU3Mld8fE9P''@;'; put 'put ''VH05RU04cDMlZ2ohOz15REQjYGRAZiUsKmBQRSshIXJkS1tFRDclVlVaZiN4SThKZSpaeSFTTU9nKnF4fWhzQig5L1c3QGJDfXB+XzJmeCxyVlVsLDBNN0JjYHw8bDZNISV8PGFvX29sc2hXJXgxZyhQeCR1P0FJSGc1bF5yUUt0M20yfkB3PmV5ezdmVVAldlBZemk/JEVmZSF9OXA9KiZsMVko''@;'; put 'put ''PVRiIU1oZlsoTiV2WHt0KiV9dSpTVi86PF0/al5EIVk3aDBTNzI1fEohLypyN1kwYS5zKSZ7REV+fDpAOW9fTSt3LG11RGV8PWNacjQ0UVE4SDZWWGIiTXh2ezk/PmhqRjVkZ2FCbSQrJXVVNXV5RnppZHJLPTBtYiRZUGoyQF5IRHt0OS45b0dUeUdaTjZWViVjJFNCcGJzVGtjVU0wQ0REdERv''@;'; put 'put ''XTg2PVVFWzFefmsqZz9Za0JveHlGZDc/Z2UkclpGWls1dGRYVWoqMXVAVSFZNS5pOGleIi47Wk9QMl5oa1t0LzV5T1BEV00uLHNpd01mU1AyS3kzYVpwYHR0YVRyK0Q4I0tLeXhRe2l9QmNZNlV0dko/aV1pQzlgYyk0Q1lsdFViN1IoRWpYO1UoREU4IkpuU2dPIyorbmApPXxgfVRWMjBBXT5b''@;'; put 'put ''X2pYd29TZnh0PG9wOWNKLGU7MytTSiR6ZG1dd3pOMTFdUEdZV0J1I3FxOWkpMiNqJks1SE9hWF43MXwscip9Y3dpR2RMbjwlKiEiajA3UkYrQklaSWBfYVJMUkxWLlZlKT9CXTp4bHQ+dHwpK2twTyguKUxxdXllcCFfZjBUYjI0OTQyJCkvcHo+OksvL3w9Qip5RUNwSnI/N0FzK3Z5e29zMXlI''@;'; put 'put ''Xio4Ikx6Rm08OEdWd15OLE5tSTNCQ1YwISVEfG0jfHpucj0+VGlON1RTTS5yWCNSTEJ8VksqLnJzSXNhK2VrNyQ0LFB+MHkhK1hSZVUyNG4/VSRIWWxdKV9sZjN5YyhaSSQ+RnJJLzVqPXtSIW41OEpVZHdvJEJBa1NkXSJaLy5wJktAXkNpUTJZeC9GYUlUdy4sc0ZWRiN3alIyUUFAaDN6OFpU''@;'; put 'put ''fXI1d1Z0JGpXKSRJY05TYUU/VWlyZT8+WSFEaTd1T0VEQUxzUEQiezN2Q0wqMShIPUtqR3gvMmlpQmg0WCNTMGdoI2VqYFt7SFMpYlVXWXlwYzBdUV9TaVM0clssYjNaLm9Bdm1lO1VdPDM/dCxuOGZ6R15YJldVQHN8Qj04InRnNUplITRYNm4/KnZ5ITB5NyQ2dmRofV4pQ1VgT355YDxNKU1z''@;'; put 'put ''LCt2OW14SXYoYUVyP1lsaGFicFE5O3JXU29pazVDWExpPEoqdk1sIntpTm1CRl0qMUdTNEdhcVk+N2s/djhENm44MHg5V1JdQHo8bzkqeXFvajYrQF93Q0N5VyFPbU84XTY7RSpmW15GTD9sOUdERmNkNiFvM3NaMFVkcShKPGdUUGJ7b2lbU1djfChuPVt3Ni9YSTwlY1ckYjg/bjxwcE03Sltm''@;'; put 'put ''MF0vVlMmYDBfXSMiSV4zYnNFLC8zQy4hdmx8bnxxZVNtWXJ9Tjh1RkNlSiwme15AKUM8STkpZ0V8Ml9hKH1KaExLKzh3Vz0oI2c8KG5FQzhJWmdTR2xlZUNTUUMrI0ZHOTNgaDxrPC9XV1hbeEI3eFZ6T0Y9TnpdMktwclpuJFB5PmlpRThUOyl6MFNubWhBJiM/QStuKyg4di9AXlRBSzVpKiFQ''@;'; put 'put ''QDg6RnJGaiohdiQyfXdyXjgmcDkvc2UiM1hCb2xSSENMYTFeR1lqNUsvJG9oL3R7TmJyfnwkW2EveiZVfVA2IVNqYXhOSHw0I29JdnZgaFJSaGk2QyxTeHhaUk92KzRpQmsjTC8wQ1tYUnZrL1NmVkRIP0RDbWg6RiIwMEVLTiJ2N2tWSk9SbisyRWFGLy5gVkFKX0NSWEBWan5RZWF6IjwrWF5D''@;'; put 'put ''MUNBbUppPUIvSXQ7QGhdeFQhN1VkS1dKOHdhL2VhTlJqUHZuJSk/M2lWR3FQV1BKdkdxTy5ffC9kOWc4MjEwIT5pcWZdK1RRaGllc2VTMlkxdUQ1JF9fYFRgW281eE15Q0skZkNMckhUcXBfWEo4TEJVdTFXOVheckc5ZDplbEYwd0tae0VwPX1MXk1FTWwvZHBAUl4ucSxVNzAocDFZMERkPGk2''@;'; put 'put ''SVlxRltFKTxgSmolST1pUTAkKTR1ekssfHJIeUYsK043TFAxNCIvIiRWLiIyQyVkekFKSUIyNGxlcGtLKkxQJTB8WHlqWiVKOEtpJXBuKjJ4SDV8T3xDc3RrY0BCcW88Uk5EIWRLPVZgI1J7UF9kczpYZG8mZEVmXTNpMGNmRXMiYS40cz1jfXcsTzplblJ4MVIueUoudVszeUQlazxMbi83OUdU''@;'; put 'put ''XnY3L21lZyorYWgqQnJTc2JZaVo0ZFBtMWVTdC8kUz48TCp9czA3Z1c8Xlc+e3VwK11FZj8mQDI7KiZRTjtbZUJIYDcoOUZCUmwqLlguKUMpL25XaztIJDo5X3dXNik4KSEjeH4wdUdIc1A5WzFHOUBmYmZVVUkxW01gUTJMdUBGNUpQd1FHQ1Aha09ITFVCXWBsK3dRcHRWJFlhUTVYbmVbIUkj''@;'; put 'put ''YCQ7OSEvT3ZHVyE1dFtUMWt6V15EWipZJkxESEhbOHhjZ0dYRFJ0fXk2SztCWk0/I0p+UG1rIUwkd0dwempQQ0VnSE9pTFhedzlpQnZLWWFnZFtyJmoiVFhfLzlpRSElZUAzVEBNc15efTl4cUE1dWE2ZGVIOWNUZm56T3tDYURtTS5tO2JqSF5INWZPSXhiOjxCYlFeX0VJTkN3WDdsT3Y5aVVo''@;'; put 'put ''Tl5vPTdgfSRuan5nfV0uWi5GPWlOUmNFT3Z2aUFJS0RPdmc7UXcwXiE8WVojZjxeO04wT0gjVz5NJCpgazc6eXhYVSxQZGdIWTM0VWlaQjYzakJddiZJSCU4VF57OkJHN28pNkQ5eWAqPXAwV1dLNjFRUjx1JW5OfnclbytBT2xDTX02MVE3IzVRaWtedVhGcX5RXj8hJXMjOyMmMVFTfU81IWQo''@;'; put 'put ''Z2FKfjZ6bSUpPXhIejssVjBAW1VPY04mL3lzYTpObHYoXjkwIUdGRTpdWHdwWDo0YTRYRTIyUXtPMkV8MEs9cUleIyVYc1ZUSSZqcno3eCo8XT9JZ2htQDBvKmFBJmFHbEYqU3RLSj8pJVU4UGtoc1ZgQHt1IlIldm5kbXlYK0NVI1NCOlJTajw6YXxGbWJydG0sNF5JdyNpNj9LTTlsYSF1MlhA''@;'; put 'put ''XyRZeCY1UEBMeWQrTnk/fTYzLE57cFp+WUlyfUwrPDx4TGEuL11TdiFTKD16dj14OS9nJjEvNGlsO3JndXE0R2hNVnlkZ3JlRCh6dkFDMSgiL1tnWyM1PHd0OzNUNSFxekJ9Pi9OYkdWVUEwU2lGPyVaRVp4N0c6IS9mbWQ5QXBOPjdoPHAhS2dDM3Z1bCxPS2FZRn0jYTRZTjZVbEZvfWxFS2I/''@;'; put 'put ''aU96UUdSKSZ3MTwqSUliYkkjPHFJdEo1SVRFeXtmcmwxSF5+d15ZYEddeipUKV5vbWFaQCVETUUraGVrYGFZcmorNTYuVzZMM11sZCldWz9UR0wwenFhcndXbGIra2VEOCMxbXx4RkleYUZYKmReR2VrS2pvSEpsOj48czh3NjdVNGo+XzVmSz91MmQhbz1KKnVxc3heOURgOG1FIXhlcUJFfEJ7''@;'; put 'put ''XTc5T0g0VlVZaG1WYEAjM1JKJVpCOyM3OVUkNzYufHVnTVpyWlokQC5fW1o+fD5Tb1puOnBtPUVCIXgvJWA9Pj44TCxlZTMqZWU4IX1PYiw8W25DZ0QzTUt6eEMlZk1hZGFpLzZmY3FebXttfGtpeThAPWFRRDB8NjxkaW8wUzUmL1ZzPSwoOzFMPjMvOCopOzoiOE1PPXYsMiM0OSEmUXM6YWV9''@;'; put 'put ''emZZX0tUUn1uSnovYXdiPi9VMVY9LGVlYXZbNHBKUHlqSTwzbjAwLy45V3RAZTtPV0xuTzEvNDZzKWVsR1oscVB+LClaWjxCbVg+a0JKISExV3wiKGYhZjd1OXp9amw3Tk03eVRhWWRXSDI9dEsvQ3NlPT5gZUY7XnkzYGYva0EofDFEa3F+S29idl0ieyw0OUdZeShGW0o5V15RZzB8ZXQ9eEFH''@;'; put 'put ''bDxZLiQzN2VANkQ7KiMmO19qK2c0UWJsaUp1SChjSWE5VC9eS2sjLlpva1RhUWIpYnx2anM8Q1JsV1M9MioqJkEuQWt+I0tea0crRUFVKjhfdyE0LEZySmNDQUtNRjQ7MEVMPEFqKXduUyF1PSRmQ3ZNOTRfYD1YNUw5NVJ9Si5RMW9vYT5LXzBDZk9fcWxPIVlddk0/LldIdSVXQ2Y3WDRxR2s3''@;'; put 'put ''YSRQO1k1aCFsaForYUJuPzMhTzl4OmFuYEpJS29lVmlkekhMYFE4amIhd1pZU1tWZHovQS8iOVo1fWhUeTphU3lWR0N3SV5bcnchLGt9Uz5vJEc8dXtNVGRSVG9vcDJBaX4wX3EiNE94dUYuZnRsdEddV2cpLjZ9RFpjIU81Y2JJZEtDUmsxX2o1IkBefV1zUV1DbyolMUNoWixAe2VLJlBgamco''@;'; put 'put ''cElPKWlZLzl8TkM6Ji5nUm13Vz1kKmo7PHpxb0NiY1NeOGIkVz1nXX5uY1RyOXJ3ZWA1P18kOG5xZ190eFhIREZ1Rjx1S0hkY1lLIUA4b1BGTSspNVtpLzssY0l1OH5rVUZhJXx3dUw2IyFMJEdDd1A+MUpWJXsxRm9tJGEpI3p4dVVHaVdFLkx5WytONHxOImJ7PGglRXAuNEJRVGllUDshKiUs''@;'; put 'put ''fDYuZGdjKj5JMz8+RytjeHgvLCY/JlI0Z2s/alNqPCIvRD5GW1c6S3BOM3glR2whWnQjOissUjxNdz0vXk4sNiMrcG5vN0pSOj5zTihge0B5RW9CPmZhRXZgLEJKXTUpcEImQTF5XkosIntdbXkxYTFWPUJbcyEuLCUxQi45SXNPWXhRekVvKTNGISsrY2k6aGA/TkhFd0Y8VW40Ozl4P319W0Z8''@;'; put 'put ''LlEpTH16RGQrKV5uaHhCLipSKT16SjFSYlRebDVQKCQ+MkxYMysie1gpPG4lKVhjZDF0XXA3KSssK3M0cEs2MWpJK0IjcXR6OyEzT2pZX1Y9TEwpfVlMbmVWaWRwSmByQDRnLlY9byQrL1Y9YzpCd2N8JE5GZmN2Yyk0MGA7eTUwY0dqdyM2fFRCdl43LkNMSld+PCM4bUx4d0E5Z2wiRkYjLkt8''@;'; put 'put ''eXNtMWZPNTBHV20/fG5yZi49LCl6IzFoREd3WT5oOzw3TkVfSzMkV1FieF9HaHp7Pyteel9ITF08TkBieDozVEpDL3xHQ0c9Yj46X2lFTWxsTk1uU3JVdCkqSE1hR04rZnZYSzUmUWd3JDdWamUyMUVwMHdsI1hlUjhhUGhSenZPVX1RdyhtPXIzYyhANVZrYVFILFNST0ZTYFlKUmI3aiJXeFE4''@;'; put 'put ''V1kxdTlrdnU9YCU1Vk5iTFlZUzwqIj01RzpDWDEmdlcvXU4+bGpYMnt0fjM3Z1VHWiVTaXN1Qy5TITRJd01QcTR4a248Wn4yeUsoZ2B4WVlZdWovJFVza3R1XWlaPz5HWiVEKyIxZk1LbnJuNXMuNTVaQyVheFBHUGBKemV5SSRkTXNRYmpOZltXRjwmYC9nKjF4XUFGZUd8eyVAYG1FJmc1WGZD''@;'; put 'put ''Zmd2UTwoejcvVypgUCVDOUZ5XVZYXUM3QEhmQjw0SXVGbDFvcCQxP3wie1BFbSx8K3pUX09tU2lZcDU4a2JZRn4lQGc1dVJSSTc4MTQ/Ln05QStgKk5IPWFEVD9fOTZGM3NTdVphLFpePjhIMGNJLmZre2xFVH10cEpzN3pDTG5SKl5HZjxTcz18UF1gaWYoQHo3ViFVQnM/bHByXj5mQGJ6UGNy''@;'; put 'put ''MyE0KUEvOW9aVkxEZW53WGciVEhiaC9GPDkuJERQbkwoXzM4ZiRVQmFsWTF0aWEoeklaS3ZIR1NSSSUwTkY5RDw6JmB9K08iRjwjLC55eSR2ZiR1IUhWNndQRj9fbXw+NFJYOmcySXhaUWByaFAmVl8kWVVoZklPazE8alhCVylqdTszMmRtaWVTJmB2ZURiTTJfUj9KbSpnd0grOm5DImpYdjFg''@;'; put 'put ''UShsVj12eXhMU3A/T34qPytDP2A1YHZkS0Z6JlFNSylkSi4/KzxbRWJOW29AXm9nQCMoNFkmejsqe3tNOXt0d1VAYTh1Lm41YU5TVzMoSCRPIjdXT2NeaGkmcExuVF5VakBgKW11YWtaI080UUM7e2VHW29AayNvWlJka1okRFNROGZQLlRgYUkxL0dpOmljUyQxVHQmNyhUMkJIeWsjd28mLz1j''@;'; put 'put ''VkRsUF9QNmcjOntHMGI3UlUwVll9JSFKKi9zdkRNWXpxN14lRDpmLGswSnZOODJMYXh0P002SFtuWihZZ2R9eWxaMmA1MkdMMTtkV2hkInQrT3RjJE8lbm08eEcxSFdYTzl8KEomeHJneTE4Qjdxd059W1hDI2k2OTl4TGVTJj99WTIoc0BGWlpLT3c6NkIrbWFdYyI0UlpkWHVTRUpCUCRZPXtW''@;'; put 'put ''NTJ6KS8+L097WCYsaEI2NF5KRj1md14ibUJaZUBDeVg8SzZlYiVrTXVtRXJaOHYiYF52cUhTKWdEPWEpdS41Zyk2ZTF0MmUkW1ZAMFhZYGxxN2VqVktlZnZ1WGU7RWkrNTJHcUs4bSQ/eTEudyp6NC8vK1ZAbj4+SU9hZVBQVENpQnI3VT1LWShZXlhaOGQ6ZXk9S3NgMUw7SDpmWHxxe0JBcEdb''@;'; put 'put ''fFszTlA8SlF0Uy56YDBIeXkxZDFuKyVsYDZ6RnpQQHxebj4iPlNJUjkpPUk8I1dKP1pDakROfC87KHdvfWN7ZE1LIVB4byYhP1A2NTpvT31tKjBEZT9pWlQvMDdTO1VuIkRFNkpfP0MiMG1UfHt2Y2xqVXhKQEhNU1EiM1dIKnxsL013MCxbU29OP2c3aE4hcmdbfFhoeDddKUs2UnNSSlcsL0RN''@;'; put 'put ''YVhZMkJrV19iU1lJeFtqTTRUdj1NPz4xVEBkTFlHKzojSGtsRityejV2eDF0Vy9mVyVyV0clQjxUdThxJlold1FgQTpbLzl7IVIzcW9aUiNCMEVZZnlCJiNqRWhqP0ZiZnFFbmxbeWssakgrdzoxZjIlZCFPWVFbMlh4bikvVUlkIW9HW0VqPVtiTCN1YUJ5TXIlOkdEUiVGI1Z3SWxJTXg9L0dt''@;'; put 'put ''UHcpK0JQMmRwMCFDaX1BZFdKcFclNEckRTA+V3FpKXc6aGB3Vkd+S0tnQ0hBPEt8bXBLTnpPPSpjaXg8TVBeTGYvT1NjcXVCWGJPQzlZYEQybXY2VS47NUReLCVHdiRmZ3RBLF9QRT9GZFpWaysuSXhSZ292blpqcmZhaTdEcUhCZktSVj9LISZ9NSEzVnRbfVIueGk3d3hKPGNVZ0ttUFkhL0dp''@;'; put 'put ''XmwmWyhfL0Q+LHFNMmc7Y10/SnMhR2E8eGBxek9ZZj4uJmYuOXlRaVg1KiMsMy9sbCsxSzp9Pz1vQzcicHYjPTYuekNRQEZPYX09biUsVWQzUys/KXwpSD9qZG8mPFd8PFYzKSsheDE7O1tGVSM5VGN7ODhbWHRJRi5HXWBqPFg9XXJbT3FKKTlNTCg7cENRM0IuYS9dXSk9XVMzPS5RfiwxQkZd''@;'; put 'put ''clt1PXJfWW08QCE2RUB3Tz9CWS49K1gyMHkxU34vPUJZLnklO21YWkN6fjdySDg8VSU1NVg4Mi8+bUVGTlNHXkJ9IjtBb31gRkcmZmpmKnhvaEhZVWtCSDFWImo8bSRTYD9AaykmIkUhU35fMkdJRX1uTlRJP3s/L3FrSn1ucCN7LEFrV1Z5d3M3emFZYT9sOGdLVXosLC97Uzg3YjdJWj1VbjVi''@;'; put 'put ''WW04e3AzbTBjeF1yI1U4dT9eZXtGVE9ybCtoNGhmLklsMkhoNChNRjE6QDBncmBSTXduOT1ReXAwMmpdPDNUSFkqJTJmU2lVPXchPm1tdjdKMk00IVBXe3xQPEJgYU8jZEV3dHBtXWpkQTJ7RUZqamlTVT4xRzh3KD1TcWZ1Sj93WWRUKUcuc1hUKW9hMEpPM3dQQDBXdndydlAqfDJjPE48bD9A''@;'; put 'put ''Q05dXk0oOko/ZlVaVzcqV2hGJWNOLjZ1KmUkRDU7QSp8YGUxd0tnfFEhT0o4fURTTC5yMjlfWigwNjArNkxoZ3ddOH4kPzFGN0dNYyJ0OHopL3hNdiYpd0lHLi83dlp5TT9RJnJzY31NcTNqSHRvXkBnaG1kU0c4RmNmMF97ZFIvQn44UWFteSM4dEJ3aEl+O0d9R2ZII29bQ1YoZ1g8Xj80VE5d''@;'; put 'put ''YW1YPng8TzxeXmE3SCRjSV5pRmB7Y15tezg8S0l8VyI+d3JASz1qJl9bJS5LL2pwY0h+KDBEejpZZ09IfHJZMHkhSzlUWHk6OjU+TFluLjRCPEpaRGBAQ3JTdkUhak80ZFUzWSVrN1l4THlCbjc5M05aeEteP2AhRVI/c1tvXSpJQlghbyU4dmEpQV1NfnRhdTdyYTRfRTg3c2Akfm9wczM+KDFL''@;'; put 'put ''Mz5qOGpsSXBHdXA2NTxjLE1pSio4S1tCc0VxSGA5fDErPT9hPjpVdV9hQW9kcW5HKVlUN3lXPCtXQmhrWSFJOy4/SmguVGx3eClSKkkwQ1B6eiw2Xj8yVGBNQTVNUDFPMUA7VGdmYCMsKXFvLmhdQEJHVyooRUJMUExYKTc6Pmh3OjJYdkddUWhjTXNfel45KmFKRlBEaUFRckxKUl40eCZpVSZC''@;'; put 'put ''SFo4SHRGY1ExWVgobkF3R1JAQyRrQVJTRkQ2Uj5mWjBYMGxpTkBwYip4UiVxZUkkb3pJQT5PJG53OmBSbVpXRUcidHFKUGNETEwmRE1oYHxPVX1lR215VClUMUMqLERNNCRFQ2JDTyMpKmV+S0R3PUI5PGU/a0BvZGlQfjArLkBQcV4qdWt9aWY/VUR3LzxmaGJfUGJgTlIsXjJoRWMkeWZAL2lY''@;'; put 'put ''alA0THhwJVk4SjdVNklhRXhlNF1sfnlMJi8xSGBybzdGRXhmbFtYSiFWYGtFI29dPm54TWJze3lLZjcwPnlMfXFuJmspZTQwVWU1ZVNQPTBNTG1QSmJ4NSFMRjFGR3hdKm1NX3tzWTpJTSpqRiR2TC5hMikxfGlHR2Z0K2Zbamc8KGdbZnBXPlJ0KlhYKXFobzl4WkEpIS9tal9Ee30pRiVHKSFH''@;'; put 'put ''OlkrcXw5aF9fbGt1T2BrLlQzXytpUUhXSV19MzZ6SEtCcHhmLzVrSys1a1BETWQ7KSlleDhJd3MxWTUlUHB7SWpkOEEpOGAzTEF5JjslWWBWMlNvbSVHJEo5TnFUZERMKyxqN2olOF4ue2dEODdqLGZIYVRSenBwakB5bjZpOWc/Mzx4UVk3OHlGbH5PbVpMLmBZTERtIm12SyZWZFZkU298L1Q4''@;'; put 'put ''cGo/MloleUQrWmxGSHkkbmJxWG49TDp7by5QVyRWRVEpITFLP297VDwzJmB6OndvRGZFNVUzR1VSSGdIQW9FISFIX2p8ezNGISFEb1gvMTJXQzBqQEM0THF1UllndyxDZ3xaTzg5JFl+OyF2bTVbUyUsR15WLHI2fGohb1MuYmMkRnlvYUt7SHc1XVZ4b2JFbW5ERlN2W3h+RmhPQ1cqZEd5TzZJ''@;'; put 'put ''YnhFcmpKbl1kK0J+OXNgK0JiaW9vZmRDO3dAM3FvLClTNiVMOXkxU0Y3b1EuSjNTams5Ok0zVUUrVWpqOWgmSipMRD5CJUR3MCtON0xzN2VNWztOOFl3ZTBAd29NXip4bzFKZ2lDVFN1TWVsOm12KmpAfmIlZjJpN3BiJVVsLkNsdUgwaV88IltMRX5ibWppX1UodHp6YlppfVYsbmMkKUQrIypv''@;'; put 'put ''cTNWTjFpcE8xQDFvby8sMS98Z3IuPFlZUjJlVEVRYj1lbU9bU1psKVpQS05+WEhJa1MsWFhuS1tZbkdbc1JnMjxLPVNlYmYmI3dGW0VzVzk0VEY8WEgwaTpjM3ZwTSlqZ3hEZDpNa1JbfSJsXV5yey9xXXNpT2lPd0czTVlhO3JVWmF3WF1od3chZGVJXmp5TGFBTlVhKVVeYEQwPk97eHlULDZ6''@;'; put 'put ''cFFhW2RUfU81QFsqU0t2RTZuRy5xbWxfVjA/dGIpOSIzT2k6O25QXUU8SzhWa217aTo7IXtgNWdeaHdnbVNwOSx9aiQ6TFlhd2o+aCNqMjBbamBhWSpxWldEKnVwKFJsOm5QS05XZzRkPV1ETWJbI2gkJX16OGMsWEE7LDFwPC85cTtpYzlWV3c2VVhMMm5UMVpjWXdbNH5LQ0VSV044RTZ+S15d''@;'; put 'put ''b3s/Sjh8bDplen1dKVQ/QFdaO2dERW93T3Y9XXBEI1tHUH1xaiVmW3VZL1BbISRKXTQsMUNgdVUrS2A2S0svd0hfMGMyeSRhMCo6cm9Efmt2TyQja2NuU0wuVnZZXkJgZHR1cHVlbXlyOiVXQVQ6UVp6RUZMSSIsalhFfDA0b2NILlh1VSt4L2JjSi41dU4pT2dQPmppLH03KkZbdzZZZUNWZ3lB''@;'; put 'put ''U2w2dGI/JllffmdvOVRvOG9JMVI4OiJ8XWptIVVHNCVjKnNpYUIldkcwbF14VypubUMyJjE+fiRzKTZgMz1ZVj9LIWBDVl5pZEU4T3pYSnghPDpKeDxbcmRFLjtOOyVlJmReXXhfOmdFUTJGOXl7Tls6S0lIPlhPXlRhWnJOanZnTzxYMCZbPyw5OFpPeGJvTjc5N0VQeVgyRC5NM31TelQ9U2Yu''@;'; put 'put ''Tiljezw0emtDXSFYMmBQPys8c2A5VnNPbnkySjxLNjdMMy5zemJPNHFvT3N7QCEha0lrSS8hPDpaK0J6RkhQPC5oIW0weyg3Z1hANEVZPTp6eHhqZzxlUmpNKXdYcjAuRytUeF5kcjdpRXUqcnhNe1lwVHhdVnlvPDlCaVdnVlklMVZqeWc1cCUkRmt+fHVgdF4ucGdrQ1h0JSgvUDd4PkJ8YGBd''@;'; put 'put ''RGg4ayF+cT1jOzlZMWNyQ3hNZ2d9LkhyX2xAKkRBPHFtcENNZTkoXkpDWzlFPUtaLDR7fU9kdXNLMXdIVFEuXiIpVSk9bkNzZkkoUWpIS1hiWH1ZLCNwfjdHRDdsPUZXJEJkLCVFdS5tciVAQUFGXitSYTlTU3B5VD4iWkZPWGxYZTp2VGclc25pKilUT2ImLkY2RDR0YF1wKXpwPlBtMXt7NW9p''@;'; put 'put ''ITc9dnZvey9Vb3Z6aVRvcEE8I1NRRHR3LDxRUC5VcTk5MCJnUWtAMUFic2dGMmhATnM6ciooQ1NmeSgyTjglalVYOmpjemhRWC4iYit3VWRxVCM4TkQ1LHdgVkJKVSlrZGZYckB5aGFTOFhVaiE/TVk5eVQ2IWhMPn0vZzUscSxydCFdczdGPFk5VHMmWiNmTCtRZyUoQWoxVjZaSUc/YWJuUj5h''@;'; put 'put ''ek19OmdeZH5YWEsvK25UMnBASWghOktMW24sT3lxLElrPzpkIX58YHc9MzcrIXhjXkVEKXdKRjFYJEY0eGs3InkkSH45aktbZUZYbCpKRjkqYi9DUHBuRiNKO3Vsfl15TEdlRGVyJT8yT0sxajFOZ1Y4QWRmOGw/WzlaT09dSkh2T3VVSFFLZGwvejlLSWliIlRYc3ExTjU1OTFlMnRiYTVaSUdF''@;'; put 'put ''JSNsP0N9IyEhKHhZWjMlJT5DSVZxIXRGNk5sJGVFeTtNLDgyRSQ/XV8rfjdSUyp9ZyFCR3ttMFFtRCEsaCk1PXNAdHgxWSRtQiVEIUdOXiRpOC8/Ok00cGV1RDxncTVMeXVXPj5aYHR1e0RGMktQaDdaZVZFb084Z281UWojJGR9cCEmQFtYMGphWyM/VUsyMGlyeUdlaX1bPERxPVpNeUhpQXtr''@;'; put 'put ''akQzTH06KVRRLmM7KERTIy9baWVAVnA/aHdHIzBnLEdnSyg+KmZpNEsyKTlqZVZlVjNMdjNRZyxoZTNra34+bHQ1Vld1JTBCJUw7QEQvSk11MDplYSNFOzsoQWlMKUFBaVJvNjNxMTNyOXQ5QmglSHgodGg+aXVlbGlbRj0kUTM5an1UWlpeVHlYWHRKK3d4NHBROy5+MUprZSlpZWFbbEpCd1lH''@;'; put 'put ''LjkqSlVjXlV1RDt9ZEk5bS4xWGVbY0VQQ2VPfVhSJigjIW5aOUJ2XzRgbUJPRCheNzJWUmBGN0ozTUIhKXU0L01kdT1lUChtSmBiRCVxej9TRFZDbHJdRTdoTHRoPkthIihaUTBIKGl3a2BmWkwzXS53IigpIyFPMFAhT05Vbk5FRG5oeykxUE9zaFU+MksifEwpQyMhdEMqLnk1Vz54KGJHaE1R''@;'; put 'put ''ZXAifExmPUkoXUswXiEsOlooZkNhbkw+V1hwbV9MdDtIe15VVEBee2VXIWhUNWc/KFJFcCVqfTJNRixqRnRjQX5WcXRJaXJaRWVKcmlaeHMqczB6dztjKTlUKyp+dHAxRTdVTiNnakBDc0xUbHk+YWNGdTpHKVlhTmApci9pYmhXcCF2SHEyWXckeGw3eTFJZVA4YiE8Li5BWjtsa3dEW3N4OXpI''@;'; put 'put ''aEA0cDhXWUttO2drfGFEVC9IUkpibFchTTw5TUVAOTBCSDIqdyN1eThwYE5zdzhlPHlpaD5ZTjAsRyZLPl9obVhleDUkKDgzWHo8Q2hESHA0PClGYH5kQjM+UzhUSnkufUlDQDwpcSNsZ2k5cWlVSzhuP2dvOTJQPWluLHhxa19NOUs/PypxOiMqfSQpSWgmbVJXKXxJWmJHYllmN2U4UE4yN05+''@;'; put 'put ''QHRRKm0lZzAkciovQ0VbVT0lJE5OUVlWfFE7NlVmfDs8WFcjKEBqTSlzd3l6PWRJSyMzIzdXdEEvamRXaEB9MXRxYGJkdXhNKTZvIlEpbEdrUUolemUhdzpqVmckWkpBdklBQmAkMVoxdkhbaHs+eylqZG5leV1vQXBHXUIjTEx0fWU8MHgsQ3xgaFRoVCVgd3sjSFlIb19bO25pLz8+clhHTVBL''@;'; put 'put ''UEghUD99LzBrWlJ2TF0kbkpRVkdpaC9hQjFaPClGNX5yJTUsQSRvby9jIVFKWWU1X01aPEc1UDJyUWJJbD1pJlF3YykuWlpSdGNURjRaZylkbjtZdn1JR11VW0NgQFpuNVUkSmgjVTJzb0l+OyUmO3U5N2koKVZWQmExVEJVdU9tbjA7PGhQZmd0Lk00WXBJOmhiN15kcCoqKG4rbC9zTkk0RytQ''@;'; put 'put ''RStWUTJYRWBxN3VFK3BjPTlsL2NOPDQhTGtLcUJqaTZDWnNVSyxzRWMsfCR1KlA+Qz11aD59QDosKiFDYDRMQUZ5TXk1fGJecGFCKUZBKVBGVT17QSUjdEE/PFM7KztSLDZ7ZHg7JUM8K2FoeCthUDtDOVo/eyxMe2pmLDk+TGc3T31+UmwjPDVfXiY/OUkkfXtobVVTZHJOWiwyKXhwRkxsKUhp''@;'; put 'put ''QEdTak1JcU8hbVI2ZklWbW8za1RGMVc1QjAlMEN1OHNFaURSOTAxVEtYa1orLEt+IVN9UUtVMDE5UzZ7KztGbTckS3ckbnM2WlpxLF4/Y2lUPX1dYEtocj01UnRwYUZTSn00RFclIyRKa2ZvN2UuWVNufG41KD5ae1ZqU0pGMWp9KTtEVyVhSH4hYWZ7Wndlez4/NF0pTV5XeVN8KEczOTtzTVU8''@;'; put 'put ''OHtYP3loIyImXkIjL3hsPitHQjdrYUUlIzhlcVE/STpxUz0+K2Y1RXN8eW0qTFRXWipIZWNYN0xubXkjTDpDYEw7T2Y7WS8uWTxWN1o6dXchWWVURH14c3lfI3VNRUg3OXJpYjddMTlZPGZ7WWFvR1JRWVZ9SWczen4jX2RDWFR0UjNpSzpPYk5TU2Q4I3NlUzp9cVdTcE9xQGNrTSVsbzF0JGpI''@;'; put 'put ''UlpCdVgvPmtyJVJKXkZTWUJQVSlnJV12TVB1TFFEXkN0ciZBcmp9SENlVSN+UWglZjJWUmI9cXVMeXs2T1J4cmdaSFFJej5dSyNTbGswKH49MTNkeWA8eig1Jj0vaDFuLllhMSsoQHpleEBqOVNGPXllTzdGcGpOd3Y9QzBFbWUuamgpalQkeiRCXXZLQk12Ll4hOVYia0U+QnViRW1tTmF8MlBX''@;'; put 'put ''SDgpRDE0XjhLYEZgQn47YnZOTE8wPXJ7UHN0dzJFbEFZQilsR2p7dGlkQiI0eXNQRHM/MlE4VWNQVFhyO05tXkt7V2dMbWt1VzY6ekY+KHhHVWJSQUdBXnZTfURLcEJ0Py5hU1NFdCpbOzBeRGgiN1NAaHRjUWhqRGxYblp5TjYpWEF0Y1FoSng6UHBvKUVAfTpDPGZEQmFxPFMhQ08ycUk1Rjkj''@;'; put 'put ''MFlCPzpvT0F1TC9hWUxOYGBYIkFAb0ZWMEtRQDAwSj1sXWJyN2NFJE5QOWZTOWVhb34xL2YxfFpYOHcsT0hjKEcpMWdUJl5OZix5WjJbRnddU2xaYlgkfE97U29CKkBMPSRkUDsrN3UiQTxlVXU8ajNjJE09Kk9Veml5dV85W1RoWy98MVpwaDJxUFU/W29PZXgjQjc6aDQ8VVMxNjxzKGEhODlm''@;'; put 'put ''PSNOQmJIUUklPm5iQDBMRUIxL2xpaS9gUiN1NEE7dF0hcmA/N2U6dEhyUGhlM0t6Wyp2RTMiZzdHT1pvXTt+ZUBhPiNWTXt2YiJMXlI5YHZiamVJVmpkNUskN1F+Nkk3dGwvbFVqWTNLUUNNOFpUKC9FNVFbXWlAQlEzPEhgcUhMPDQ6b1tvfV1YK2lddFpmdzR8S0Y9KVRpeHlPPCpBS0xkMjYq''@;'; put 'put ''Jnt1VzdARml0P01jamB5L21gSnokPHgkc085Z2NJVjZHTDIqOWxNO1pyJWBsMVs3bFlsTTBAdyUleXYvYmM7cVBmJCU4MFdXNEBCKiVuWVAwRyxDNV8yP2JKZjhZMGZwdTdCNl8/JCouKlgqbVlmYGVwazpJSz9ZMEBpUDs1ZypQM1M7OENKJDY6Ujg6dlcrYmRPMypuYEhzIz9VUiQ3a0NYMXo2''@;'; put 'put ''RVQ5K0NWOTorUjowQD9dUEVXKW09TkhhRTBpdnopMjFfazoiUWpyfjwyPXhoWG9RP3MqOS43KlB5ZSY2VSpSYnB3QFdJZFg+YXRbOik4JFBNZFNubmlHQVE5az5RY016VCIpUnk/PHdIcjQlaVYkNjQoQ0JeSU06S0xNYTFMIWk0c3xrT2hwR2V6ND51eTUxZ2xlfW5HPFEoJjYhXTNId11BT2cq''@;'; put 'put ''b14+KytyVTkud3cmZ0RoNnNSa0prST46Yjs5ODRQQStHeGBuZCE7L35AKnYjWEsuM0N8IU48VT8haVBxTkU8XXdSQ1k6KWl6cElmbHFodDEjYl8wI3F9KHFZUXRoMk8hKDtGQiQva0YqRHIwTE8rLCxCQUt7dk1yXVEiQDIkV2VGWT9UPFdlM2BbfHRbaV13dUYmKW9SKyUvRnFIXzU9MChea3cj''@;'; put 'put ''UHVKbk82aCUhdTFLUn5qQVJSc2JHZHNwYk5veEFFKixiTUsienY/WDJtZjJMYFRYa0t1NnN0QiNgWkA9fG1laGRgOmxzcGJaOEczZ2Usd3ojdGhnY2xQeEloTVtWVjpPeV09PlZufDhjXkZCcmpkaCokZzw0JldFKWdSa0luOjthKzJwdEIrIiMqWCFPSD83aEc8KWk/JEI/O21aM0k0eVpRXXc4''@;'; put 'put ''VjpjfGcqZkhVRDIzcW8wUVE5M1JVKEd1eFspQ35wYSF8Kj1aIipoPnYvOElqPjkwanV3YntRTC5ecTp0PG05OHFPPGM7eVNVLHsiRj4lWmFUXjNdWEgxXUF3UDtFO0o7cl1RQy99PUlMWVkvUXZOdUBwJTJLPzp5MnglJW1LeX1QRzN2V3oydiw7RVh6Oih2V2h4Zzhjd1FSYnFjVVMyVVl4OlVA''@;'; put 'put ''MCpJLnh8ajNZfk1bWGomLElteEdrZFdsejJaNHF3XzUoXyZUdDllNjlifGRwSyUiWjU9cFVBTStfUldyb35bV3dnW0FPJCxTejQvKzdaOkJPbmVPKmlrQjc0eUROJipePGB4dnVQPmloRCUqO3NlXihvXjVpVS5HSzA3KkR2QHJffC90aGIpKzlnSUdSZTd8Wz1eM11WRn5VNGQ7eVNfYGRjcCo1''@;'; put 'put ''RVZ+fnkwV1c+dUcsaGxMPW9PamhGVlRmMkJVcFksTXdoNEsuOWdGSWduXTh9fEB1JWksRXguPkBJQmxsRlEpO2F3cmpeNERMZG0rQkoyWyNMRyxDJThfNFRNcSY/V2o2aT5EKCIhd198YyxKbVNmZ3JqOkAjcUZqVCV1enkmXTcjMUplQlR5LEIwZGxWTDJMIkYpLndGVkhkNWZ9KWsiM2RDJjB5''@;'; put 'put ''R2hDYD0xcEsqVHZpU04xQVspdElqTDV0cVJjIlg8ND5yez9BbzJFZjZyWl5wZ2IsWFJKdCx5WDw0Mz09Ln07OGJ2YDIvInc3WEZHfENVV11SemMqfSZaVyt9ajBlRFl6d2JdUkpNXXpjYFJHOVtmSCwxVTkxTXAvOlNbIUtYYVtKLlh9ZDcyQC9VZHptSmZ8MUE+ZzBMNWg3NFJTUnhhQ0JuR2BZ''@;'; put 'put ''e0ZeN2UuelN1bE8zdCMuYFBkKjJpeiR5Jmg2SHxVPUghRit6OyQsenouJml4UD8wRShtU0deNypHOHdsKy5hciMlJWhxc05iai4jT3g0biMjdmpOUGNHWlc3fTNVdmt4S3skaWBMaSZNPk1dVSVSPik6MCFxMCZtS2dVJSM6fWF0ZUxnfGR7PDhhViQ2dEc5PmszbUtnJXxXcGJVO1NHOTo6aC5U''@;'; put 'put ''JmxdVyRMZH1wWUJBTmZEU3c9QEI9MG04PSQ6eHBLPEg5SX5+dFJVYlFGS0k0LzZuU2YlPj1rPD1hViU1YVZSL2EoR1B6e0BZM1pzPXZGcyowLylfL25XYmVeXSRUI2ljW205XnNWTWx4OGt0ezJXOlVBeTdaOis4ezhubjU6ckVfNn4/OihncGppKDo8WHdVcnhSdCM4ZHQ2Wyk9Xj1Ibmc5MEZd''@;'; put 'put ''LjxhZCFIXW43ZS5ZMDR4QG8jYEkidCZSWG85TmxuVmhMMyZXKH56PG4oS0tAeHxuYCxLTGZyPzFNLjVyKipLTGQ9cipgNlJoRk9qezZoVD0+ST9pQFRHP0cyKlJ3akxNR2dRbSpNPE9mN0xQTElTTWtZcDluOW1RIihTLl5we0llTFFicUVZYT16a3pTSktwZChBb341bDIyLC5qKlNlYTt8VFti''@;'; put 'put ''JE0uWm9RLjYrJjlzb2o3K0pKW1pmYmpEZkRsTXV6OGlPLmpnRVBLJm5pa1BpNG49XmROMWxKMUsrezRidFZ5ImZubGAyRSQoajhbY2craTlVWTgpJW07W2s6azJJRl8wIz5NZnBARHF9aEJsLjg1amY3OlUvW2ZwP2JVQ01DVSFwRlZkM2VDLmN4WXlgT2IhJnxvZyY7QFphL3k7KVBZM1lwfFNe''@;'; put 'put ''TktsUFg7dTEpW1ZfVXNZWU9NRm87XzpWVVkuVVdvUCp8YGo4NW9LW0FGSzc0LmUlUjxsSzlHa0pzaC47PEZhVjJDJG4vfmlLI0IuO21hUUZuLlNCYnVtbG06TXM+XSRRbmtXSz16Inw3dXFiJUcmXykve1pRWDReU0tHRVdWZlF8bjJ4KjI4PXp2LGQubFsmTTFPWDFdbj41byF0WlBOUUMpdFZN''@;'; put 'put ''WU5zR0tHbDRyNHJ8ZnlbcHJETClRTUVNQFZgVFFFMFlXay9CcFZEUVEkJHFXUVlzMUVwLFtsRzVhR29BXTtxRHQkZD5YRjpGTUsuOFtCIUN0OCUzU2AhbExFdjViKz5OSyNZdjg0Q2Z5Q3Y4Mk92OHY1Q082SSE3UTd1b3s0YGlvN0lkfF1WQzBecDpNSC9eej1eTk8hRGt4YEoiYy51L3VbdT91''@;'; put 'put ''SjZWTnJHKilDOUZ4R29PNUtZWllZd3RHbkBsIzV6WU9ZYDlZeG8ubmozVW9qOypLJmZrdSMqYXdqP0NVfDkhTzduKTYjZjBQLDUxM1V4ZWxAYSY4XzlZSjt7Yy8hRndjQC4qXno2PG0jWm5uQ0dzNFElaXd1SkRDInJyT1d4RGxaT2ZDKSxxM2JbIVNWb1lVSlk0YTJqN2F8Lkk7UU4lTCh8YUVJ''@;'; put 'put ''fnVveSNbUlAjZj01aEJ9eTYxcjBqQ1s2PnwzYHlXWjBUdyIpfjYmSltnUk8wLCpkPURgUk0oWzdoT3VvfU9iNWhGTE91TDU6K0dBZVZJZ0FlQylTV2t1dFczclRPfT5iVF9pcHRUKHc7QkAoLFpjbS81U2k5M21RdUVPV0puVj9eTzIsKTE3SWpMSDp1Nm8lNCEzZzlvMlA4Q0ZsVzBzXjp4UVtb''@;'; put 'put ''PS5yVVRQSkBUVTloeG54bipybnFOWUNIW2VCM0lbdGtjLkpHXzZaPiZgQ0YpUiwkVTFFUnskU348KlJfRXckL2pNPG09alRSejZHdyQvVkdqTSs7Mz5pPkd9JF93R0tCX3NHJkU2czMwRlB4Yjlhd2QlUnY/bGwjRypuZUVoYm9jLFM1OGR4SFpVUkxQZk9IIUhAVEtXXmR4elNhQnMrbls3R2JK''@;'; put 'put ''XVVSN1MzR31jKm5xS1AwYEo7fjsjZmYleTNGNnpRQ3lKZ0IiemBKQDZrP0pSUEB5KHRZcC8vSilYTH0rZDlNNDVFW1VSPjE7Yyt4JXdQYX1Fd0Y5fj1zVjVaJW0zY1ExQ0FXZGRHQUNCdDw+JlNGTDFsY3d8UCRBPUl0TT8jbDBGRUNQL31YJWBLRjE0QzJpKHN7ZnQqU1YrcklsW3tMX2dFIm9Q''@;'; put 'put ''XkN+cDhCeSZQZWMxTT0uaXhsYWtPYlgwZUtfX25mPGh6PFVlaDJNPyUsbmxkUiNeLzprdEFGRG1YYGxPN1ZgYVVOc2x1TCwlR2EvJTN5UmBYI3gmbTo/ZEhZWzN6VTArbHJCMU1uVUFlZkxna2AycG5rYChoLzwzcnZoPC5sWl1ZVU9sW1AqVkJdRXx4OVU2PCM6LiJjWWx7QGBgI2lbLCtbXjh+''@;'; put 'put ''cW40YntucmtPWlpAPDtFNzphSUVgaTlfXit1eyhIUDNwMVNpUiVddFY1NWc9M2RZNz9YMV9LcUZWMmNeLz0mSF9uPnxPWHFXYV5LTTYpODk/OTFFOX1MIW9jZzVRZyx9LGxVZCRadU9nOFtabm8kRXAiVFZ5XX1mMm9jY1Y3dlFOPSlmMlJ5NmdCVXlvX0o4NztvSkZnbHNDODdaMCFmZ09LSC5a''@;'; put 'put ''WmV3IXA6YWkzLn0vNm8uPF81cVtGS0pSUEtsd2Ylai9GIWtge054cEtRbiRIMFk5X0hdKnh4Z0NCbEFsUCtlKjlwbFZLZyVIfnV0byJ6cTZoblNEe2pFL2ZLKz0jPX1fb29kNkVwRCg+OiFgQmRpfDU6UF9eXU9wTyR6bCR2IlZSVDQ1cDpoWWpkJGRpYm5aa2A3UzMxWXBNM3d4XW9SVkY7dCFA''@;'; put 'put ''VlUkQCk2ZFlbcl1OVmVRb0ArVGU5dFAydnVUV0l9W19IIkxfQGBSUER2Ik5aJUU+KW57LDd5YCF4K0ZQKz0pS19wYDVQO2NuNComa0h0UUpFTi5lTFlUQlVvUiVVblB2RkppcnREPT5dbzgrR1Z7S31XKik0Z2gsZUJRVj05dHNhWzJAezE0aDc1PXAuOjl+fSJsYT08OHBSaVdINnQ1NDNiY11f''@;'; put 'put ''NTVCMmgmPEAxUSVxcG9FYCw8bSNoTCUsUWhuYFEyaCZzczw0SmlkQ0FTWSU/LEFrPV5DMkIuYnYmc359RU1+PGN6cnR9Z006YnZON0IuTCxqY0JiSDJxITlrPXlofDlMcGMjZ1IyZld3MV1walJaM1A7WkY4blEudDVOY0h5QSRaVEdpVC4hPXJvalsmU01UMUhRUE84REg+elRhPE9jLD14dk9t''@;'; put 'put ''JTJPWHpIYWNPSShCRmBrPG4ibmpbbV0wbXYjI30/W0ZNYX4/a1NnX0wiWEhdPzd3dzhEM3I7Nz1zKiUmMilzSHRJXTJTW3JXbFlgcmFMLlQhdyVTTSF3Y2xSbl5mNmhUSnRZYiRuOjNYKVo8cHliVj1sIiwlTUleTVFebGBGa3c6KjxCYStxYntyclhVYjZtTn4+b2NmJTRiNj5BTF8uWzV6USVx''@;'; put 'put ''ZFVuJjxAL3A3LGwoN1RDZSZlQyxCfG0vLls/LkZxKSZMWWQzd1RdVEY6T2Qkeyp8KlgiUF82WTI0XkthSl0qZ2YyQk8mcH1xKHw9VUwuXztOTnxRPDxwb3lVYFJGWV45VnFWeDspN1Q4dGdqfGEyMVlCKmhIKlhuO1UzI2xydHlKNjEpUz1GOU1UdiQrcENYWXN9W2ghKStSLnUkb1R7OCEvZjIm''@;'; put 'put ''Lio0bF0qbUpLfXx0c04ofk1ebGs+OmRzcFc9JlJ4c3hpMXZ8WyYlIVhjVDYjdGtEbE5idmlQQz5XNFcxRUkjTDJ5UyRNODRUPiZ7dmMkTSpOZHYydWYjJmAlPzFVLislNCwxQCp+OXhVOz1YNnc6S1Ezd3c6aDc1U1JzfEd9SFF0cSU7RyYrMihwLy97ekt+OXMlNDpmMmM3e0pnbHwqaz80JCZQ''@;'; put 'put ''NHo0cXx7QG14MVI7IlR+PGQuQFFkK1g1MSlbX0Z3NXRqaTQ6MSwvSnZNLCk5PU84aW9MMzMxNSZOP3kkKmBpaXs4P3dQOmxRJmRBM3ssWywvUzleJFB4MCExQntaaHA+IztfRkJ+PiwzVShTSnJBM1M7cmFTNXNVO3ptb3JGQnFyW2s5Jjs/XW5wVHBrKV4xVWl+UCRDfXt5ZD4sYl05OnlYTTVG''@;'; put 'put ''M3l3T1MzbiJRM3c9IyY2cGBSTTBQTmsmVkdjZVkkViFFTmZwcGhlVDYmYjNVRSEyLCVpYlZvRypNPWY0bUR+TGhTX0FgQXwvOnV8SnptOkwyV1dWLkdremFgdztHOUZySmwkNlYpYypuMCl3R1dCV24mYmEkdTV9b0wzSDZOdjVbYEEmXy9ZfFsoLjZneUhheU4rciZlPH03YEBOcGw3KWlsO0pH''@;'; put 'put ''YiVabko4bk5CPWJbU11iNzxVL1pXL3dQWi5wb1hWckR2bGdpPV5la1FKZnZHSjokOkgzKDohfipOQStPOiFVZEk2Mig2QyFLYSolKGw2cG9PZ09ifXBEZWpkZ3RwM0xkSG8ranYuSF9ucC5nUFZ3S3x9OXplYDVmSn1wI2t3WV1aVm5ULjZVQ3k1MWBLVE1bP0NLIUpUOix+Z0dlOTdlSy51cj1s''@;'; put 'put ''Zk41Il4sYjNpVDJDRGJSejR5Si9QNkhlOSlmZTkxOHZELzBie2lmY2w4Xj9SVjFiamx0all8aEBkInR9ZkRTZ2ZBQDw+U2QpP0RdOnhtL2QyITF7STpAd3NsWUQ7eUVHbEdlNzdiJE56JSZSRCpsPC9dJUJINnojcHBqY2t8Jl5PNW1EelRKT2BELyplQUx9P2ZWXWBkIWArJFB1W11AV1pwYmt5''@;'; put 'put ''QnZhWGhGS3wkTDsvZnJTS0tJOXRxMWxbKDdUKXNyNTQ3R14zYl9qRn4lI1BDMT46c0x+PTZvdDlacSt0TFE6Kz8qKSNWWzNnZ0tvdUVWUWtwI3gjZlZILmIzMnZZMmFkOVN0b2w5e3xlWzJzWm9zOUlyX3BaT1pvIzx0U31OdzAuVEROU281YFdzMzdJNkxFLEMwbGgmeWp8Onx5MntuZHo+TC9y''@;'; put 'put ''PkVANH5OZ0JQYj5Cbk1qdXNgU1oscj5POmwpQWRTeWByWXdDKyw5eG5XfXo5KH1gQDg7c0x3Mj9dTmw4LFc7WCNpfUxqK3NhfWxDMDozMG19YlFuWWNzVHdNNEgoaU0sQDRsSDFMMzsvVzsvSiYlbno/ZX04OTs4e3RkJStqKnAvImJXJmg2NXY5Mi5pcSo7fFNPM1MlX1hKTj57OkYhdFVJRSZw''@;'; put 'put ''JGQuaGdYaVg+cXR7bnF+e0EoIiosdyYlKWVPRj5yMihvXWh7Q14hWztsQTtOcDlvXyMsQCt8fHt4WGs5cytPPiVNcVM2N2MpVFVSTUhtITllSlM0YW92M3tFTUsxNkAqKzpGeGM5VFFtP3g/KDUhZFoqfVtUZDlNM2lFKGk3eGlVXXdNekEmJT54KFskLmdxNkNocWpCWns3K1BBR0ImUX5YYHZW''@;'; put 'put ''eGJMfkptUmdBLFd6ZC81c2dbZEgqM1BOTVQzYUZhYVFtXkZPOCQiN1ZdTk1ZNmRqSDorSFIkeiJrV19mTD95IXhYODAsblBdMW4vT0NLaXxKTGFeY1EzO1c7NnNIPUR2NmRsRVNFPV0qZjJCMmFsYk4+b107XTdRYk9iPm9tfUZqemA/TU9kSmdeT2skUyg5emp6bTpgOFo8YFhkPkU3NTYrZ1Mx''@;'; put 'put ''I3siIV1wN2FDfE0zKGxXV3A5Ui5RZFQpJSxfVlV5QyghPWFjey9zb3xAT1hKWVsjeXJMZzYramRHYilwMT5qS34lJnwmL2Q5IU5PRTNCNzx6Nmt1YjJTdmt1KzFMM2VRP2BTXjxrcW0pUXFIQS9HT0ZqQTpqZCt8ckhlIWQ6JmJoYUd3Mm0qUH1kZ0ooVmwpPDpGITBgbC9rUip7LltEPHAiLCVE''@;'; put 'put ''Ln0/PzQreEhwQTJkMEpYNlk3Sn5uJDpyJW12VyQ1b1VUMDwqeGFYU05naVlbaHAyN3VqP0AwLyohR3Ika2xtIjw1dyI5UzQrUyJ3NiYreTI/ZmVBQEE9eyppaCU2Q05xflA9N1BgPVFRQmJJJGpibTUzZ0VFNz1QYHh4KDhnenBjQzB+YSpyJDAiM2BAMitHMkgoR19nOllJIV9QNSJOeF5ZSC8x''@;'; put 'put ''PHBGQi9IaE9mRUR0QG5sZjUqa0J+TDxRPEQ1SD5YSmowJUxwbWQqajVhYHRRZyJeamhiTmJ4TkNNKmE4UnZlWD9rY0xnMHtTR00sWGpoMHk6SS47MDl3YU9TRFpSZUxAUi51I2JXVSs0MlpWX1BLR3lsUTBnO1hKTDgrXzg2Wj1WXihiUC5AXjl3NyV8b1tycyVpQGF3U019WEolWFgsZz9ddE4j''@;'; put 'put ''SmZUODF0TnZIbGYzeTlMN1M1LG0kYWV2MnVpL1oqLEdsXkdMdURDO31+Sk9DNExQdnpLdmw5SnldfjEwampqPH1ETHNUPDo7NzRrZk5UV3pAQ1IzQnU7O19AKTlyPl4oJk1KaTVNWFhEa1RhP2xTQjJDWi90WHRMdV1CNjN5KmtAJEcpPlIsIWBdJDJ1QCZCdyk3dHxtPy9PSV5NdkNCVXlhNiNp''@;'; put 'put ''Vz0jPHUkZj1OX0hVYnwlb3FGRUt6R3tgcWxEWW4wLH53ajllPmZJXj9yT2UqbjllIlhEXiM8c0chcFMjMTxWTyomczpUWmxkMG89OzhxYVVDdTF8bEhCYHVSVG1WNSlHZHdzaTV1NjZHa1VLcXJGNiFCKyR0dW89JTR9SHRGOnJuVypAWGAvcmJERnZwZHYrWzJaOylhM1ROMFJefkE+fGlkcVlY''@;'; put 'put ''Iy5AKXFDRTlLTUpCZkt4OmhHZWRoTTZHZXlsQTtdSmIhdWJ5aVp3Rm8+Y1dkPCx4UUleKjhTJSE2S0x8TSV2JCN+MF5AWlo4I0N9NDxKMCYyamZBYXlYImdxYWJFbmErZlAlTWFHSy9tSUc3Ln5iP3JeUjIoMXZILFprZj0mNGtTfGgiaCQxIVdxQ1Nvc2NCSysrbUJeZUZYM3RgSnNzUXZEdWh1''@;'; put 'put ''RGQ1RDxuSHJeUCVWd091NCFXQUB5MCwqeTBld1JpPVloT2dmTWEuVHA3XzlFI3paTV8wQ1VJYWB0YC4jTVEyaEdlblhzYjZVfEw5MTE7b35+OztPQ0JHeFQ9QTZGMmFpZ2JtZXBGTENBMUQufiJoZDBJY0s4YFVVUzdAYTcudU0iclc6dypja2s/Img9WVozbjZGIWNqQVk1PmU8MFhwN30rbWkx''@;'; put 'put ''dlg1NzFDXl80YmhuMVplbVtsNlhlXVBxISExZ34jayNIaCo7QFJVUk9nIWU4aGQmT1FVXkBWMX5rMnhkWHZjUm1KMCxNdGA3fXEudGhLSH1HSDVeOUJMZGFRaE9AOSNkVmdFSHZycGpQXXV0I21ARWZ2eWRDaFJzWFhvcW9YPHR1eXpEOm5bKTR0VUA+cXwudWpgNklHPHxrQGlxcDo6IWFvL3F5''@;'; put 'put ''Mj8rKV0hcDBeUGJFaypoKS9nUTFEcmNRS2RWTVE8czFjSzZiaW9bXlVRJixCcypgIjt3aV5Hbm9hSHJhUj5PTTE3Sk5LMTtAJnxvWi5YcW9uaCRlKjQiTGY2MkR6e3hGc3RmTSV2NFVbL3hvJGEsXWZ5YyNiMUZmOTE9JnNIY2EwLiFgc1g3YXFvM1ZLMDhYc1hkY3AqfWhrM0xyZEJAVGtYY2M2''@;'; put 'put ''ND1WSV5vNy4+SltGd3oha0RkeCVFdVtfL15DUTdXSjxfQVFkbHchTGhOPFBjMGloITxoKmRJOy5qezlLYXNVKWR1KmUiQHdmRmcqcSloZCpuaDNpKmZbOz1gMFRYSzFgVUQ8WGZULz9FdUhKeVIlPV5IZU1Fb2lkejlUaylxezJ7TlA7RWpRWVgoRT9zIll0aFZYfFVZcFh1QyUmaWlKYnhjOilA''@;'; put 'put ''IlNdb0x5W0JfYEY4fFlqIyklRkZWKDNTI29BP0ZeR2U6PzR0KV9vLnFlSWpGVy9YY2wmOUwzRkZeM2tFMk0iKHMmTzhyMyFPRjdjajxib1ladUlXMUg3LzF+Y2pBZkRqM0gpNFZ9dFNKel5vYDhmUyM/UDo9bytTaWQvNmU+azs3dy9fSU0uSntJMkZoMFlVT09eKHBwT2gwIXBAb2JiaSM4bEx1''@;'; put 'put ''U1lecGsrfFlPRzhnO1c4QChbKH1JcE1EUEo/TjgseEouITtfLnZgZlNHK3A2fXU1LlY1JUl5Z25vWVdHZXJeaVl3bXVNLHhwVCtodWxAMVJNb2I+JWpMUlJmLi9PN1pVT09SOTFjXSR2NTNNX1UmXkBHQFYiYHEiWztJQmYlY3ZfTS5KS3Y4UkR1dzpOQlAqNiNdYGB8UXIpUj99MGEqJE10SDI6''@;'; put 'put ''P3E6UjkxfWJSWl4/alMyXll6SkttJWJ2fHFZZSR6eyt6KlVpOHI1PVYwQ1FGOHA8K2p9RncwKnV3SnFgdyFBLzY8aSRiLDY/Oy45ZW1sOSNmU117RCsmaTZqN105PEAjc2w2aG9xZ0tnXS9ZPGdqfjFtXypgfV8uTW1FMSpJWH1GamVQYGhmOE5ScjVLJFtAQzg1T11yfHEiLkM5TTh1TTw0RFpO''@;'; put 'put ''OHdjLkpSaDc4RUkmI0Q4K1dyLj5tPytvSXdNcC8xaEElMEUiUH5CKig0ZSU5XkhEOz9hU2lTNU9DVyNLIUw9bUVEKWBgSWVyUnxnVXZkVFpaIVh2U1JPVStMYVpybSZhIV5jQFRJOkFmb3xLS2ZYSiFSNyk0TiEsNUdCSmxle307ITNMM3IzTDMxWlBjbVIjKnthZDB5IktNPmhnITAhI2lpQk1h''@;'; put 'put ''bXk8eWZOekdhcHJQO3kuUTtackV3XThkezBLM3RQQWdDZWAkRFhmKl9ffl88N0d4U0doSDxgc29WPmI8Z0o+O2BILChHJmppJmx9UHRlU2R2W3dgSitPeWJLMTZJWy89STZ4O1JoQS94O3QyRVtoS3xbI3xCNGZtJmRzWHxaMFR5VHlUMTZDSTZRM1NHOX1PPGZ1T29yKXxRbTF2dCVRaEFaUiQ/''@;'; put 'put ''N3x8LE9lXU0zLlhUJWUuMnA1YnA3fnYlc2RFIltNLl1IVF12JlFNfW5bbV5sYTpObDg0dkJ+My9hX1ZJMX4mRzpLZDRsYVlJRDAuKylTNl5kbTYsQGlSPUAqOkZkY3g9VWA3MmYuZ0lnIktsOlNSNzdMM3R6Y2BxVU99RVRVK041K01+M3tyY1F6d0p6KWQrUjsxO0Awd3g3Rjdyc31TSmQiN04l''@;'; put 'put ''SWsvNFUlJGshZHtgdTFEOGd6bjFteiN+MyVyPUlebzcsKlYqUWRRLHA2M09MMWZEPEIqLF1uKWZ9eVB1RFY6bU5hM09LSigsfEQxSWRhTDFOcDJCa0VUI3FKbD1da1c9WWFMTCNYUEFpVkRHOURbaCZwazAzdndWKVdVfWw7eT9aaU5ZYExwOTB5RHNOVnhFMFYxM3N7Jjt6bnBUaClAaDtvWWFh''@;'; put 'put ''IT8+eCp2cyZ0V2dQZW9FcFtscWxRQS9Pc0xsdSQ1PSEkZzVbe31AMCg9X35reCh6IVEuXShTIiE/Mk1nQWcqOUc+OjtFWzI1WTF0TUZKP1pmVyFCMmtkOTo2dTBfYmA6X0BaUlVvM0hMRyZ3YiNHJHVWRyhVZjJIbFBRSnU+UyZbQHZnMkVbMUt2OFhEZX5HQyowfUxOQyIzdUY5L0JPOzshWy52''@;'; put 'put ''R2VwSnJ1bX5NZUJPfkJ3NHIhVGAiMl5pRVJ2SCw+JEk9aWpqWmVbTD8hOiRpdHRYbmB3MWxSZCF1X15xUE4zOnldQCx1SHhESU5MQzpIVlBvb113OzFUWGdHMUhdQn1jRWlPdHU4ekhTTWtNPjQpZnExclJTdmsvTDYoW092SEt0YGx6d3lbdDhIcXdmPlI2ZlZOYTJJPUw+OnwycXd5eitwNEl9''@;'; put 'put ''QDc+I0RbMEc6NzQsT1JVQUA9P1c4LnhuP0shbzxMW2g3Wntla2AhbFAsVFlLJHthcE07Ly57LFkqISMwXW15JHtnMjxZVjgkI01bbXEjN3xFKTdlaFB3a2g6X3cxPjN4JkgsLHVKekoranhEakpdME85ZjpVIXp8VERhZmFhTyRhImZ8R2lJMXdLenkrNCwrdn5dZnBJX05bRTV8fCxPIm1FRVN4''@;'; put 'put ''WTZPOV4uS004LF00UW5gVUYoakIpYHM/NlVATmxJK050RzF3cWY8Qnh5PDZhJjN3YDNGXTIwV1dFWWJHVlVRVWBHbyxjSF9dNHVBI315aFpFI1MkMG1vK2s1SCgzMik2YG85RDgsczV9JVQ2PW1KZjtaOzxTITdifUd9ZGYlK2t9Mm91P1pCYCVNUj0zUDA0bGU9PmxXPyNZWmZVNXY/bTowYHFG''@;'; put 'put ''NVNoOF5YNSFXOC9UO1QmUm9GOGNyej8kWl1AWCtUOHJJc0ROMFU5SmhMS1c8OTAwOikzdSsyLFp+ezZudVQhOjNAJCgxIUxbZ0lJMyFTTWFPOiwyeGY6VWkxe01AS0xmWFtXM2suKT9GOFY1amo2PThmQzVJYmdCYyxyaUspNUBNVGVnUUNdKSR2eUYhOSEoTlpYWmVFJlMpRispM0QzclNEVjFI''@;'; put 'put ''MC83NE1QYkd+VDl5KUdKfGw/QCRncSoxUHp6eDh7OUlQNW5CViEsQlFkaGE0eHU4eWxseGwqalNnU082RmduYjV2Xl1eTmRKNVQ5TF14LCsiTEguUl9sN1ZZMSh5ZUJ1QSlvY3d5JjA7RiRlayNoYkBFPm1BTmo1WERaWVsuMDJbWXlqXjBpW2RhVkNAI3JSejhoSmxibXVIZzl9MTMmSihwbWM1''@;'; put 'put ''djVlPC9WcGZgX0A/amIkO2RGRmo7QUd8I1s3YEBJb0hSazkyKF9QSTszdTFlTW49a0IzSFtxJjNdOml3MCRgcW84IjR+NjI1TGlScl8kUWJUT2ksSnheV1Zxb3R7cnQxTWRyV3VYQFBqUTZoZnY/Qi48d2VmKilXMFBDbi8xUn0/JlssRzFhSGE6OTN6WldpQ1pMPjpbJlVvUnhRenNYY3I5dGhk''@;'; put 'put ''P1RjYCJUKlpGeVBqfipKQ3RgXklRNUhmY0Ndd0JnN1h1LlQoNjttdiJUVUB1dkhQYnU6dWFlUn1WcVpFV0IwfH1SWCloMT1YIU8xNU5QUyJoZGAlMCFtM2pmKT82ODYjJCo3ZEoqVUlYeEZDUDh6NTouVmVtQlFmd0JeLCFqT2F8b2dJZntieTlrd31qclVJY3hHdGN2R015c3cveGQuV109cCkk''@;'; put 'put ''aXc2ZXVqPVRbSm0rOV9JJjFHP3krUEokbTh5LGFARGJ2c3t1UCYjKF1PSkJEeCx9US53WWFbR3d1M2RrTmcva1hKWGNseygmRlFqV05EKXNTLy4iY1ZVfmI8QXpfUWNackVNbEUzcz4rZ0ZRYUhWUE1nUz5xMGlaJjkxfC84KTY3eXtCVipZVmlWUEp6dTcrbHhIMTRJYnFTX3lydShGZktKQ2Bx''@;'; put 'put ''NXVrIVt2SilZK0VzSDZhJXFnYnZuKTRFPlQyZDhZMUsmdz1rYHR0cD09PTRCaXRoZWNPYXh7XV10RV85NXFJT3ZHW2NvMEJGZnF8MTJ1NUJkRDZHNU5BUWB0MXBQfCRbakducF1VbUVTMmVNSCpFM2ZbeGZrNGtIOUQ0NGJ5VVFNPEhFZTNtdlE1I2s2YWFOQ292JStZYmk3a19jWSg4Rygrb3BL''@;'; put 'put ''TlA1Lk9xOD1gYUVRUm9NcDwzYTdSWCkpYjhpKWJ8IUliXTpKM0NJVENEbDgwUzVdb0RbM2FBXV9xMHh7di5pQ3spWXlMSSxiSGpYPSxmbWlEPEJZL0hleyMlN0lPZj9hKmZERGt1cEh2Il18enhRR218R0dDNkpBMztOQSNoYjhbUCVzS2xrSUMoY253cTBFZDchaE1lT1tXTmByT310OSpJdzZS''@;'; put 'put ''YCpKKlI7Y1A/YFhqWlc9KSxGcGY7I1gwTllzIXhxJjhteUkkYDx6RipqOFZ+eXxPaksjWV9JfUxCcnREQC91WExSNkJiJjE5NC9pR1RJWWFuLDVDZCkuWmckITc6Skh8b3B6XTN2NCVXSjdtI3lSMnpRQ21wYixtIihvL0tXVVVDYnRvIzdTKG9sUVY5U1BFaDU9IUk5VWtIfH04YVllKDVyTyZT''@;'; put 'put ''QTZVZ1dkZm9zeE93fC52eXtheUBUWSFTdlF3Okt4Pzh5alh4WG9GcUI2QixaRmc7aU1fOEJNTnokO1BwPVR6RHp2bnB6fnUzNHh5Pk0vOS9kbnZtZzBxbGc0YztbaFU5Yz5gOWohPWFpIVt5W29sOWtwdXImLk4iYkRiUUljRVlmO29RMzhYO3M/OCVzeDlDMldtUjRVaDdtTTd3Mj54dEk4ZiEu''@;'; put 'put ''XlVCQkhgSSI8UDdjQWM/a2BKOUJDaDREVCM+Ml1RenlmcHhxRGElSWc1VF58Y2g7dFNWZiVDJlQzK1YxY3JYZEJ4ISpDWH1xQiZxcVNdfkY6JEJiVXJOTnlvdn0/Jjo2K3xFOGFybmhVK1goWXkwPF5wbzw3cDRmQCxpTnI4WGthcG4hTCxHTT46e2BHO2g9SWE8NXxYeG93JV5iRjV8PTA7NEhO''@;'; put 'put ''dyphei9zJkQ7SERMLjBERWw0JVA4fnw0ZVJaOj9tU0ljOzRHMj8pVjBbTjM1Wml2JjR0SFBMKEx9SitlUjRFeXUpTkZ7ZWREQC4kO2ZoZTQ3aWRjYy4+RHBMdT9SZ1F0eCk1OFMjO05sZTI7LEB8I0g6bVNCbSRJbjteJkNjJEIjNmtQTjN2YHQ1VTxdRkEoJHYqQXt6TX1mVlM4VTxaIXh9Qz80''@;'; put 'put ''RyEsL3tGMzh5VX5OOUxGa3hSJilIKTVqZ1YoTVpyamA6TVQ7dXRrbiFmWEdWVVo3VWBFTSRDP111UT5eeUBxVTAkdDhmOVB3OzN2Inx0MSluRkdlL3Q0JWVrT1Zyb3RHU1ouMXY4PUh0Sk5JRCh3QW0oVjEveWlHPjpKSj1kMW5QVCVQJiRTUn5nO0JjWHJ9ZiFRYGhtYHtXKl1rRitMMjxZO0wh''@;'; put 'put ''JF12aCRlPDE3aH1uTlFeWSQuJUdRZDNTTyZfUko2fSJLYlZTWCFLMVk9Ny47JHosP29RM0RmIT0iWnh4bEhWalZFRU13RWRKSjN4dTdscSNgeSpzVWN4KGR6MlJocT91JWZGeXtjTXBrcG1gVUFMTzx5XkJ+VjksW083fjVmWUxMblh8WnZROU1yJWUvQTomI0g1MzRbej03QXNkIUNmWiZ6KkZa''@;'; put 'put ''dXkwZjhMaHFPelY5WmVeX3hXfi42TXZQSywhIU4+TmhwKE9EMCxMOkdgU3A4N0ozJn50ZHtzJTUpd1tyaUY/JVI1TGR6dUxAS2QvTSFnKE9hazM0bHp5bHs6fVFMdGhxJDRYY3UhckIyfUNBUSVMK0shcTVob3pIR0ZpdzwrIU5OR2R9aDlVMTdoKXB3Ui9aQHtgIyxrIWUxZ3FjRDVgazF7d2pI''@;'; put 'put ''LmlpZyh3JntrSURHbEt2Sno/bWVfW002VUc7TGkoMk9GVjhVeV02eFksWUMpJCsqI2BQZEU8YyVbdyFJeHp4fXdrP3FsKFlQeiwjaDhPOD9bYjJid3JndmJkKV4oNEFre0s2PER1bDJhJXppRUZrZ01BQSpoe0dCdFZFKE1lYyJ5cyk8diwsR3wqQklJVFBbT3p0S1UoRlB2cHhtUn5YQUFBQUFB''@;'; put 'put ''QnQmRipoRGxxaTIreiNsdlRISkZBPSE4Q0tXOzNnUypwcnhDOElJKGQ1OFd2UHt5bjRUeGI5UkY3c2o1RStgTSkkIj9ieitfOE9hNVskTSlHXTJCcm8zfHwxfGYiX3piVVZaQ0ohWDc8P0w/N307JVBMRHJtSk82ayhpRWw1cDsjMC82I0BVcz94eH1DNWNAazdiPkV5YmZqZWhteE5WVGxJOWNu''@;'; put 'put ''V3FaTDl4UVUwbE5JIyYoJGh2OC9tJmEsczEpZShIT3RScm00U2F4YnE+JmA/diE2SHh3JmpzdlRObGdvKVBwVDFadU87aF80LzN+aDV9bFtxYiFRQCljT2dwbGU0eDEqKlhXcGI8ZFl7MFtAalFAPDtAYyExeHtMWX1hXlhDQ2sjcDRWJHA8SlJYe1VZdVY0PnN5ZTJJYXx4ZXlIPUowXlhodzwu''@;'; put 'put ''MlEqIWl2VUxnMiZ9JktxNjkoWShqYDMlbHldJjI7cjNybiVLSiZ1QkopTiYwXn4/UFhrMCU/QTtbI0UvfGIyYn0yLFc3XSEialIiTUd3TGIsd19FOCQ8I3lnczlwNjR+fWxJRWovR3ZmdmFFSGMyI3c/RVJJTiRJR1F3P0NPJmd+a15ONCg+Q3AkOmBle2hZZSwoZyFiaj40fCFzWW1POn4pOn5D''@;'; put 'put ''az0jQHMkdUhiak5mYUlZd0s3UVV4On1TSTMoaH1dLlgzL2grJClFW2JANk9mUjM/QXRNZzc2QCM6ZnoqT0xBc0pKMCJRXmIlcGB3aVFAc25UK3VrYWssZ3IsUV1xWnl2bCZFNFE6QjtyXzB7LkpwZGdPeig3VDMhZEpsN1diamNyfD50KDFZOkchVzZSfn1uUk1BYCUyR0JyemQzWnxbe0FUPztV''@;'; put 'put ''cjkvNUttRixKT211UjMiJihNaz0weEFuNzhgdjJOJXo9SEAqWykwaVBbXz1DX3Z1M0lZUmk9fD05eTlYYlI+NHoxKXkiVjZHbEJ6ZWVbNUd+WkBVeCZFKiM2WkZZTTojWHEqWDs5WT1ffGV7TGIsQ3k4fVVxTDdnOyVraERhdypASTdxJHpOc25vYTd7LyhCPkY2XUg7cD14bE52OF8mVlMyeTl7''@;'; put 'put ''czwlSl50X3dqU1RVfVBaPCwsbH4kUm0ubkxuSTApc051fiZmbmFjLzlkSUI4MVs9fE0rRVEwdXNWVT8+a0Jhbzs3KkhtfWVhLnVrWXkyTkdLIzxbT0daITNQNFA1S25NUjFjaTFaSj11ImpYOkpLZlBoeygkN11nNGUyYm8lOnFIU2I8XVo8Z2NsMjMoaTg+T2Y0Qjdjam04OmpIJjJLJDR0VChq''@;'; put 'put ''c2NKcFFQOz9BKlpTbmlRTGd3Ky96dSRiODZhOEJpTmFIdGUuSz4qWEgjL1tucT9bRGtfTHI9Ij5ZUlZWKSE7OmxHKlMzXz18fENEQ09IJE0icF9FeV9uQGo+P311JHIxPXBFY11hJjI6fntKYmR3dCUwNSNTbShUaVFrJDUrYktMNDxdLGc4W0UzR0FOUXFuPV1Yb11VLipUdmAlbUpxe3dAVHMq''@;'; put 'put ''dExlbiZEO1ZOaWYoO14vdn1bKnxfb2ZoSyQ5R3hqODh2bXJsKC4vU1k7W08vIXBOX1o/bD4vb1Q+NTomNixLO3NiW0l9OCtobSRQSHtFei5zS3dOWywwbzIwVml2YnZzVy5MaTQpVjw3O2JTY1g3aXd+cVQuVkh1aUxdNX47eDQiRil1PExVcFI0Qz5bQEohdFYhMUwoN3Nxa0x+eDV2cDg3Wkp4''@;'; put 'put ''eVJqe2QwKl5YOlNOKX5RN3suRys5dGljPiVbKDtWej97MU19TTxyUDxNWlJaQj4rTVslJmZJXz5Ac0RWKUUhZis5VXVAaTJhRDJ2QFc+JHg2QGBoZCx0cUIsVkBgM1FqVzAveVU/L31DQCkyQ3tocV5KZFFCZSJHVE01QzJSLjhSOzVFSjl9Nm1rSndfV1hdJWB9dCszK205Q1RgIXgyKGAzIXZZ''@;'; put 'put ''fXtedmtwcCwsMWlCVUA9Ly9CKGNqeXVSUV4kI0g7ZVMpImNObzVCSUB6RCxyU3BZVjNYaSNoWlJjaGNAJVAwKmk3KEo0ZkxPWj8+biFZZzkyLHx4dVohfXlaYjppO05JeHRSeUdSZTIqW3d+dX5BVllyZnk3eExkTCVUdlJpPHZkWGklMUl2LkM1QFpjLCwxSjFAP1c4dERiMjVLd2x4WDZ+Tmxs''@;'; put 'put ''JTs7YUNaQUVLISh2anpWcWBvTSRZej0sWEArK1QqXypwVFkuMFM2ejFsMmd4YzM7PHhAN3FMe2pBNjA7fVd7eW8sVD0xYyxVMklqUVAuZiVtMmM5cSEjW1pjWWNDZjl9LH5LaUd0cng6cGwjI3oqQWI3aThyKHkpe3t+XyFeMGV4Z0pvWF9Yd2I1KV1bUUBhc2RgUGk+Pmc5UDFmVGV7TDhdJEM6''@;'; put 'put ''dFZvYHQjOFZ+SkU6QGxyTz9fak1mMWcjJitMRjwuVSI6e2VKWCs/Yi8sSC5eYVZdUVo7LCE0YHgqIlByNlZ9Pz5yJUYjO1R3Um1HbXJ5QVkiN2h9b3xSUCRFIi56MXZFL0MuPXJfLFduPUROWyw+UGg7SjBBbnFLUjUjTW5POmMsNHoxMVheNyxMeXdCVGFRbDMxNTAobXdqOmJ8LD9KPEx9bXFW''@;'; put 'put ''RFldb0VpTTlralJ6JldVfWlVeUE4VTMxPitOUzo1QlpjMnYvRnhEI2EsNjx5Pz9MJGddPHo8LiFQSDMkYn0heTc6RiZ7Vl12U01aeDUrKj1zJkc4UlBdPW13SnU3IjFVbHwsKUV7LiV4WyklQEVGcmVyWDhjNDtYalJ2TkQkTlJjOnZzYzF1R2dqdVROdF4vfUdNJWxAflBCOl1HXnlgeGtqcWIo''@;'; put 'put ''QWc8Z0V6fD57U0JDQUNAJldralFZUiVTUiFDS3I8Uj08LmRzJHJpbEZibkcwditZUSYxKHxeU1FyOEl9RFB9XnBOKmNjW0dPP11Jdk9bLz5QKFhoQSRuaGRtc1NpVEdGXjcqWlY/LFBpP3xPLl5bR3g3Ni5eP1hEOkx0cmtRZCIvRVsqfHNLMStNYzhONnUsK0BFYCJ6Qj9jQmxSZkBiRypSY3Ff''@;'; put 'put ''bGNHSCE1LmJ0MFVxJW9GMjoyaDJINlFEVntTYHdmSFssTFskd0p2Z1oicDExK0g/QE9LeTd9eG1xTntzZFcie2pAfjdKT2RhLztKJWdncVsoOFhlcjI5PHZxODlHPStTb05tcEE5cS4sWj48QFtReHU5aio4alFDcXpwelcyQncwPWhRIVt9e1FIR0MmLzJzKWEjbFVkWVFVT0NRIzp6PEw/Nzss''@;'; put 'put ''RDAiYkFEXTV3NDtfYGo8en1uUzBMckxxeGkyc11VQSJvPnhoWFtZMiEoU0t2MVdHKEZ6amM7IjtQOV5DZG5rXXRsIzVDb081O35TY3BrKUVzSmIxYClIWTNPZUlLIj5ZKHxuYFJKIml9WF9iNGdqcUhNMDxrPS9lKVRPcT10fSJnb3wrV3ZdQGZYNE1CLnV5UkNNNyNXKkMvTmRhVldBNGhVSm8w''@;'; put 'put ''YW9UNmRDR3c5QWhGUnMlNGdVUjMxaDhdeSx2SFFnRF1CK0hwdGZPSVk/RUM7fFVkViJUSXB7PSUrV3RJYkZbPkNnSy5lL3t1QGMrSyYpNW9hXzFzI0hSJj0kX2Bta3IqYF5ASUgjI0tLRyJhfW1tJEswdjBBQj5AfFV0bF4meWlxVCwkbmI9ZG5BIWJ8VWxwMz85dCQhUURCeHVeIzNEdUpvNiEq''@;'; put 'put ''Uyw+KTkzbXV0LDJGOVVRVEsobWNYWipSdFUvNmRwSSgzL0tCWUlORlclP01mOmgjSF0yeEZURCpUfUpaYnw2JnV3QzlYc0BfK0N6VlV1NmhSQmlSL2ZBYCo8NGFdOVlvWG8rRFFNX31tfTZ1UiQoO0ZPUHEwU1IvKWtrO0x5bVtUe2VmdypSNDFAZ21VSyZ6UjtdbTVdL3JVW0szKnUlKWtoc3Q2''@;'; put 'put ''ZU9UUWxBVzApcn1pQigvc1hMV0RDbTNLR2VdaGYvVGBUbUBCJXhFd1R8Xl5lM1JyIjhiOHtITTVQa2dAJDZLQEQ2RUYpc2xlL2p9TnMlcVFQRlV+S2dHVTJbNG4hUUpadU8leF81eTZsVzRqJUp8L2gsdCNFLm45Q2JBbTZkNSRAcysvfStQKnMray9aWnY2WXNfX1gpJHgpV3pnLlBMW09haVdB''@;'; put 'put ''fTA1ZTpdVG5AJUk2UTxmO1N0RTJQWCt9fXcsb1FvJHpaRysoST1HMGNkbT9HWjMoSTIhfTV9dDRqODw+c3lbZlZwNChXIVlMeVk/TW4pXj9NfmE7P1UwOldQLjhUOkpZZmMlRVBBTW0hPXYjOlo/UiU+IX0yfFEqeE53Y0tqVF1SXSxvXllwNzpjak5JRmVzI3h6Y1AqImxIVmpXUjpTPmNNT0Rg''@;'; put 'put ''IU88cih7Y0dZNTdMIUwrJnQ+YnYpMT01dChRfDtpXjVMaTdpbkxXUGk+U3gxP2BvSzpdOlFfK0tQZmgsUlVMSSFJZiVdQzhUS3JwP2oybl5GaWRnYG81eTxDT1pxQ0JiX3N9dTFlMzQpWV93PW9HaGlpPU1hIklUbWgrTjRhbF8mXWsoIVBCVmUldzBTZFBmK15BPDApPiojTHpqb2c+MDF7RHl8''@;'; put 'put ''Si83SCEpSnZZOH1BPHMuVVJpRHdGOz9hcCZpMlJVZlhMR3M9SyM/eG0rRjErLn0kIVY5N046Qmh5M08uI31bVWRdfXd7X3xGeFdiR1pCdWNNU3ppfltqRUolKUBLdXlOTGF6fEhPMmZpVlFWNXshcFo0WTtVYEJpanMwODh9NXt8eGhmLEFYTFp4Kmp0O3BmMzRuK0JeWz9WPm1xTkN1MV9ULFNj''@;'; put 'put ''WUdsbEtwRTtFR3cmOl1YVCEzTU5WMnYve0tnJX17d2U3UTVvRjV5MXBPX3JkdTkySzgvLG44ODREdyRKNCtVKEVibTBMWjYxW0A9YHlUJTZRVS43I0RlLENrSkN7M3JgIU5+N2k2bzNgUHBrRlcqblkzcWt4OU9BWEwwRypmKT5tWUBwfl9JYVJRWnI9IjwmfT9HQ1gpdD5NIUpyPWAmdT8jPFNq''@;'; put 'put ''SXQocWwjLndHRDpBQi5xclR1dUFEe2gze3NfZ159XklTITh8WGc4aTEjPkl1LG9qPyZkNjVfKjEiNyx9cTlfQEllMDlrPGUoSGZXRlJVb0M5YGpde2hDMk9aTTg/NX07QFE1Vz0rVU9jJHJmV2V6VzNNZSQ7PGZLTXJaOUFoPHBhMlVEO314TzJnJnIjSyRSem8wYTRLLmRmbHAyQ092KXM4N1dF''@;'; put 'put ''W1pCNzgpLilleEU8YjttTkIsbVl2PTVZPGBiQHgiP0Iwbzxlb3JqXz5RXnVrPSJyO3h1V2ROKGIlc3JYKn1aTkkufkNqdjxRLn1WWV19SStdaEssaWFUJXtaMEVxSCVGay9wJllKSXIiP1Y/PEd3fHh6b34iOzZKK100clBiOnZPcmxQOVl7bC9tMlMvUF5WUlE8eH1WbmtxfDlGZn09d1ViYzNd''@;'; put 'put ''T1pTc1s2QV1vbExjcWRnbT9RSURXZDd8RnJral0ydy5FJSl0d0khJENRYG0sNWM3eF4heGpSYG5USDJlfmYoT0BiPFhpNC8oTnJWVS57RlQ/QitAP3p7LE5uUFBhKFRgX0RNRyJscmtfPlBVUkpgdy9rUSJSI042bCYsS0RGNnhuayFfVEw2b11lR3lmP0ZVZ11uITIsd09WWSR+WztHbSMzd3Vh''@;'; put 'put ''KlQmKVNlY3dubUZJblA5Z0NxX3NPPkkmU2s1dCFAIlM7dHh3XlYvI186bCt0cTJUVk0kIXU0Y1ZwbyZIa1s+b0g9TnxqW0ZCOHUwImlpd1ZXYGZHaVpTKncuO2ReYUJtK0h1KDJYVz1tYDJkPV9rOlBXU252S0EkVykvcGlkNFZ3UTBXZmwkJkYhMGV2OEd+PHo8YnNTRV1IOGMxa19PWVE9e0xZ''@;'; put 'put ''QHoiVj5xNkhwcTI6YzNGQT9hQ2k6NXQxdHJsbnhBOCZObyo2Ji9tczhaKlJDZCpvY109UDpMOWJvZlI2OFp9NEA0LmZ8fVJyOmVVPyppTy5he3dzcWxQfGI/bFVVWHhSWWQoXjR+cyZUQ0VQZS9IWTt1fntxWGdhVU1ORWQiYVFtPF5qSUE8cEw5LixyaDNoUG5meHcmW0R+K2tCY28jUTkyRztk''@;'; put 'put ''IykwdXZ+eGpjLFdfRTxoUj5IVXNBNkBmZ3RDWSslbjsraHQuNSlbQW9hRSRxdjlrbi81R1h8X3EuYkV3IV9le1dAPTpjXl1XIzdwMGgmKHRYejsxIixve2VoSWZodF5mZzkqP1EjIjYsZjdKZCIyWTd4SyxqLEdGRkUsdEc0N24jIiImQkoudEQ1c2J0blc9P1s9a2dPXT47LFBITjp3P3JuYDs5''@;'; put 'put ''MHFOUXI1NHhaKDV3aVMpVjomYW1ATllmWWMiN1Ysdn5TNnA5S3IuMz9jentuR0RXWmN8OEQyZmdaaDVaUTlbJHhBOU8mQkRzaiFgakl3XU55JHkwcUsuY1dZWVUxdi9UYT45IzUoaE5gNz80WGJLdi5WPnxHT0MuPElMOl5aS1ZDIlh7JVo/ZD5RRl1lKktIJG5DUmYoWjRNcj9UeF43X3R4Oj87''@;'; put 'put ''cj92MnhLRiZwP2kyJGclVDh4Zz1qVWE/e148LilhJEkmMF57UlVSSX59dVVfZUQ+Q188eDJWeCkiQXspdDwpfGkkIjlEcD55YD5te3pYLD1hfHhbJSwrSkNQIWpSRkY0bF9jQmRCMyJdRVc9ezwuKFhNMlE6b3J+KXprSSwiRnV7SykkcjZMS3xzIjZHTEMoOVM5SW84VXYseTleVnUpfmNvVTMx''@;'; put 'put ''OUlwIyJBU2t+dXw/KmM4VlVZaV47NzVxNURMfFB2eVhvI2VObH42e2x2L2AuJUR9fCNNRj5sKWteNzNOQmQ7UWN7bltdSERGVWBUSV1ZcmlVaVJqbHFOdkk4JFRUSGMzfmAsZzIiNHQvPFNMNz9SeTRPI0JlayJgdWRzWCx2Z0FRNUI3VDlGL3JaPF03SDxma0QsU3RDZTdNSTlkcFh9Rk9EdWlj''@;'; put 'put ''KVVfZ2BPYF5tRV9rczAiXncxRz0hYSl3R1A9eXtdTGVfOit0VERaYFclLEBYRHtBbyhbSDN7XSkrdCY7R3V+Yiw8eFBWY3w5PjdeJj1DP1E+alUjaTc0W0RXbSt5ciU6djVORFl9OGdkVCtaXy9XdmMuWEIkSkY8RGlmJGhdUFFjNEJeKjV4RHN5LyZEMGVPUV1laGtNQUIsXm1hKjhdR3xnYHlg''@;'; put 'put ''WElgZlp6TCJ5L0RKKlc2fiRmTHZAQlp8T1tedFFYLGJtVFsrb149LHdEdXx7Zn5dQCNNMDYjYF5bIz8+fSIzSyg1VzlPZGRXZ30zVkhFfXxFdXVRMz5CW1ciPz01NWlDeGdTdFtXZzlObEJqUDU9bDdSdlREOkE2Knx0WiZqMTtsU11jSkluUSxDRmdDQz4pTD1DPzN0dkhibEIiQDFvTnx4W113''@;'; put 'put ''Q0hRXSN1cEVqeHpndmQwRHA4MSomcSFFN0ZIfiZsZThDTnM+NE9Ob2c/bG5Tck9SXktjIVF+KyVgT1hYZUldRT17W2NZKn0+PUc5bV8pdXZ0THQhYWxVMihiTDRfSWM+Wjk8ay8vVDV6b3RmOFtGQzlJN1RhRk1tP25GTHt4IVYmPGcmeCNlJU1hfW9GXShTZ0c2Yj42Wk1SPEk6WXBRKl1pZ3NH''@;'; put 'put ''KDpDZzFEZUolW0tsJko8QU97bDRPbDVHX0NDUX1ZZW9HW1B4MENHSF8jRyolNlkxKjF+U2svUFpxZU1nLz9KXTV6R2A1b2woelRKSSIzJlN8SF5CSDhPNGV7NWUqN1l4VSIja0c2Tm95REB3RTMxNlpELDBFRlVUPmxiek4kViFYN2BLQHRybTgiN1pRM3lwdTFGPkswLzY+ZDQuYSYyQzdjLmJ8''@;'; put 'put ''YjNmbjBVOClULG9eXnsvRTk0P2sjUlZCSzI5bVN+W3hAYVYwVEQofktmU192WF8xdGkjVns3NntoMFV1Wj5ATCVbNSF9JHtCIitGZCZxN3pGL1d7UWhNdUc9WG4icFt7YVl4JFJATzc6W257UUtQa3RLXmRzU35FXzU7XzZjfkdMQCNMaSJ2ZE9aXnd7dj0zSCNQdSw5KW4sciMyc3JXRHRFJjpu''@;'; put 'put ''cDokKVJnSFtgInJ6Mk1UNEh6byYmc0NhfXVnYU5jKUZUXiUrK2FFUWF3SSFeOjx6WldTdUJhRk5MbX5oem1PaHJMO1kyK057VG0vJWIqeCpIWVdBPiM9KGxDNSVGTWhneExNPGZqVHxrUnkiJF9JL3VaYDRec1NoVUM+OnBUSVRgenNnK0A9LihdRiNxOUZFITJoSytKRk8yMWQ3U0ZNV3xNL1ZT''@;'; put 'put ''MS98Vk17flhTRFgpaTFoKVRtMCRRcHU+dVIpYk52Rnw8aXZUSVlhYEA0TGFzciwwTmFeQFc8PUw0dFoxQmhXMGY6bFRFRU1jakZtXzB0clUvP0FwbyF5Pjo2PE1OUmoxTSZPW3llZytHT0A/ZzVSamA9MG96QkVtY254eU0hbS5wVVsuSFRMP0NpIU0qRzRnRCY+MHxxY3Ajdk8sdXwxNSxnNVQ9''@;'; put 'put ''Z3B1OkB5UWViIXVBOV0zZ1VGYSFEMFpVTmZddm4mWCZYIkVTY01GSXB0Wj9NSH1gcklCfUh3VzxmO3MvVzs0d1RONUBjfXt5SE9YRGdyXzd5RyJgOihIb1J5KCtBPU8/UHQ7LCteUXd2UCN8Y3RRTFoiKUNrSjlKWCNscntAUSlae3peKjZHOS9JMyp7bXY5fHNHLGlDUzFgT0ZbJCNpYndzZTtX''@;'; put 'put ''akIvQnlVfHUrPnlbWlNLcXhgW3o9N1RiMi5IQDxtWlBAXTtQQiF1UDBKaFJLSHMoQXBEbDlMXTIzNkdeVGE4b0c+OW5wcSYlMzBgeGQ9bVZ+SHZLQHtXSCtGNjNhTWguLlh9MmFWIUZBVmV1aGRhJl0re0VATkZdRTw+YFJ2O0IlU2dLWjkyeUFPSDo1TDxONzxpLkxRRihWRW9JQjpRUUU1Y1Nt''@;'; put 'put ''NmkkMlVlSmdnLlNgS25tI1k9b29UPz5uIzhuWi5nZDhVM09DRlJyaVhZY1VTOiNefmx1OW5KOj5DL1E9YCRjX0x3Zm45LnVeT2Q+RFlWZjcvXy9sS2xBSGpLK3NobzV7NUdNKmEial1tWlg/Xy9SO117MmhfaCFvOT5WUClGaXckZlVSLD0kd00iYlQ1S18jeDU/K3I1eXVrQ2xySyxZZSgpdDIv''@;'; put 'put ''NzowfSZNRGp4fjU6WWRPJVFCQ1t0OXRMd01UTCtibS5YYClEJiUuY3d6TiVAXUg4L3RTUHtHJENheG4kKElKTEdYKkNzS2s5YitTSz1OSEMkbEFGYzc2X3dSUVU2QFlAPWYhYjw+Jjk0Y3NLbDwrQShxODxxKVVkJGhzYlZVdWx1MXRXbHR6U2BqVnlIX1NGKT5JPDQ0aDFvOksuUFBoTW95c21N''@;'; put 'put ''WkNWbltffHxDKEpIYEd5flBxMF9db1hBZ09QU2U+R0F6Zmw5WDpYSi9ZJkRhekk3PmZyelhlNVVBaF98XnhlOW5gfEhbQlVIZzJYcX1ZNGshdFhPdiY3L1FBQk5RNS4mJkxaNUlAJnBgIUpdKHRzZWMiTyJNcCt3Q31sJThEd2o7WEpbdU5IR3VnY3Y5JUB0KT0/RnArXnBQL2IjTSZ+UXttUHRn''@;'; put 'put ''KkM8NmswYHldcX5xYEFyTyMjfDQse2gsTjJUJUtVMV4+L1p3YVFsdWVpSEdQQnh6RURkNWJvX2p2eyxXPzBtLjl+YjNtRT5QdHYrSXgkSkpqVHFRX0leW0JSKS89TXIrSyhwezhieyExOmgjd2lLRnJYcW40WWVDOUtKYTpALGk4JkxAK0E5azVHWE5jL2N1em04TVV1Si5FJnNgK1dAXnJ3cWw8''@;'; put 'put ''ZXR9KXdydDsjS0khWX1MWThvTU1eWjolbE9dNG4oaGFYWWV5MHJ6Xi5GViFrXX58U0o+bXIxYiR1Xmo2MU1WPEFXRls8b3BSPjBVaEszV1dVOXNIODVaclN5Zih7Z34wNXkwSWZ1W3t7byQofHU/NWBNaj9dQ2djSFk/SHQkIy9WS3Q1Q1J8VWluMjxgSmdqLkJkZFpCL2JvaWhdQTlMNW9oa3tp''@;'; put 'put ''MUN8d1QxYHtzVEQrJkY+b1diRCx1N3t+e0JuUzp4cjgpPURFKUVRIyVoaTl4QkwrU1s2eUt2SXhvKS5MRHUxP21nQXkzb0E7aDozNDUhPUZpRktHfWtOTFgyTSFXdiFjWEp2IT56bDd2ZFN4Iy5gP1UjQl5qUHF5VDhGZW8uIztXTVI1WFl2elAsdGpWZ3taZi5peHchdUUuMStrbW95bzMsKSl6''@;'; put 'put ''VnEhNS5kSjRxcktoP3d3V2o1NGEzMHtVb0VINU85KXxoS1NmQz1SRUZ8eUc7aU8xSF9QTkt6fVkpKXpJS14mP0xwbEEmLEI0e3drdF98NXJ5Tj1WSEB5RFlxNVtIfnNaUzU5LD5gKi9DeyV+dn1aIjlyeFMuOERxTCw9WitAMVJUSF5obnA2RG8hRSxeUG1XcDleSl9QKk9AQ2JoKiZUNW5XTjQs''@;'; put 'put ''d3h3WnMjenRQejBYRGdmYXVsLDV4KzdfQzVNTVRyXiMjal1LTWh8SXBbQnJwWCNLIUx+ODZve0I8SjBiOHdIT2VeS3gmQyVlR1VKck1bJCtJYGJ+QDAlYVhCT1tITT9gbmkvfkJheClER2A2VSttZ1Y5Omo5OyNKWzZ4NExIZW0lOj09WnlrISgkdFs6U0d4W0g6YD4hQ3dpTjl3WllGTTtRfnB7''@;'; put 'put ''MnwiUVVObFEuSiomR2RFcG9kRSJseW1EWFRFYWwib3hrWypIYDFrLFZrbzgqUy95a3M3O1p7NkxGaUc5RkUhRSpfNGE8c1JRR0doQUF3OH1tZG15fEN2bigvfTZPWkhqXmRQPDRrV0FydFI9VE1jYTZgRXp1PGM+OTwvLl9rXzNkQXhzTnAjQGhzWFk2OyNkfS5RRXlbOXhfWDlCRyJnOUp3VlpS''@;'; put 'put ''Qkp6SllUTW42V3A4KkxoOSVeNjIsRi9kP1lWZH5sQXo1TyMhX286OWQ4TXBuW3s0QkBwVHEqaUBycH08ZmVlZEVCXnNab15BekE0TmghJUxhYzFRQDd6NH0zRkJfYnFDWCVjdnI1bj5LRH0hdyYqSn01aVtNcHwmQz80RCEhQTVVd3V3cDNFfHNWR0JgS0FTV3Y2V1tXMEo5RzZ3Vk4vMCE+JjNG''@;'; put 'put ''cG0yYEJMeVRTQmIlbEt6KGVQazMkQG96UjFyTGd+IzVneVcpP09QfF13I2JLXyEqVEdQPng5YCRhMn5zUHZiOjZSSF1HMDc6S3R1eHcoMUBaR1JELnJpKkxKT28kelQsLEBfeiEkOlc0ZmJwYypUKkYsSyVoRDRPeT1KczRYRHlUQjZQJVtDPHVrNFtIXzxHM05hR2h0SixdIy8yOVUoYlNwSXA5''@;'; put 'put ''U3k1QkBlSXJKRjlTVH1rMVIzLjo9blc6YHtwfWBjKW85YlhfTSQ7YUA+Rk44JVJIMWZadSJ3W1dRPndsc0lZRzdGPiMkemhxNml9Kk4yPy4wXlYka1NeVWl5XzgkN1ZXRzFnN1lBOXtJc1FuOmE6JExYJUpvbEk2KnpdU3Jpd35HJER+a0xicyM1cExgY1VGL0BTMyt2TzowcGoyTlEoM014X3BO''@;'; put 'put ''JWVQZmVZW0pBOjdDKyNNXzZdXz47dkc4KT9dT1Ywb1tmcUlWbGAzJXRdbiowY0wxJHElVHhubW40R08scHg7aGAySixofmN2MkM3MzxtOXspLjomYGl2RDFXWjljZVVVe080Y1JKYC9paCFLcjc+dVhMeSlEayhwfFd+RX1PYUlyb1hMMjU1ITU0ek4ofUAvNyo8fCQ1K2IydURZfVFmYVBhJHQl''@;'; put 'put ''NnFdbDFtRGtPOVJja18wTHJJO2BYVUNrZ2BSb3VTdjMucEpCMSVmfSRnIS8qZDJAXylmNF1XZjBkSmBmQ0h7Xz5MYUN8U1Z2SFZIRnE6KW8lfTl9S1t9PnB1OSlgV15yWWt3d19aamgjcDlGNXlWYzpzYEswTzhhfTUxOU8rfih0YjohV0BZTyU8Pm1DXzB9bzo2ZlNBengzaEBCbihzcCJpMGo7''@;'; put 'put ''JC9aWnhtI0RKVEMhKmpkPnpbMCVrdS5eRWB5JDBqTFYsZzNrbmlqUFtSKWZhWWtjX0AhLiEjZXgrJjMqY0RLRVVeby97MUwkcEszVjZBNnA6OnxqZDE0KDYmMVomXmpIQER2UnNfaUNEOGJWd3dVU3p6bERHcngxOGM1TDVuIXtaZ1ApJjY7QTo3VSk0NDFjRV5sTGB8MktUOT9xbU5DUTpoYjMr''@;'; put 'put ''dDhRbD9iP01vYG9PcXw3eDRnciYiUCI6TT5qdiwvfjh1VE9OLCxmXiMqLGlOemw0clYvYzgoJjJHZEJuflM4SyI0a2d+ejdMcTxreV4sOEo4IygrRldlSFIwMDg7RlFheysoWDZaTXBycEM8OXZDN2pYPDd6KFhHKkAyNUhsZmY7UFlUYmV4KF5yNkVjUXM/SDAqInxPIktBbWBLM2pdWH0ySWk6''@;'; put 'put ''Xm9fUVYyOD5zPmxzbEpEaThtbWtLIUA5cDtTXkRyenpPLF1sJF1XK0djOj8oW3FJOzNdVkdeOEo0R3V8WEtRdz4vbDcsXTR8dSsjJE5IIVFpMkIwXXA3YntfbSYmQ1k6e3JqMSVoSmVDSHoifV5nQ1J7SiljLiksWjFQKVVhJmIybERGQF5dfHE2fHtubSNlTjdJIl5TKHZkaFBibmBKLy52VWRO''@;'; put 'put ''Vyt7Okg1Pi9KNUlFZHpeNkQ/YyM0XVRTbTNoc3IjflEsP0UiZDFpZHFaKzFlU3BZfHxXaG1xOFhSR3RIdDd2ZUR1RjNkcXUzclcuZ3BMJWBIazhveXVnIyVAUjVMM0V3MG9TL0BYbl86ODI0bHF8fUN8NVB0dTtHN2cyYkI1bD9CNUp+X0szUlU6UXRQb2glIzQ7Zm94bk9baD12c2tjX2V0eGJN''@;'; put 'put ''Q2plMnh6dEB+TGc6bjtjKD9KVyxnUngpUltBP0JdbihLak9ufkF4P15TMzdsVXZZOC9uZWlhTnRNIShUfHFFVzs+OzxjPl1bUCw8ZSxGenkvZTV1R1pgM29ja357R295I1dwJVlbe2YzVCxWdk88VmNhWXxUa2E/MCtVcEAsW2graSw0SlY2fWUybGJeZlN9X1FNcGx+PD1WeFFoc3orTm5fel1v''@;'; put 'put ''a0RSRWEhQmNsUX5gNVgpVW16MkUmYzYmMTZMI3dwbTB9bnBGNWp1USMvJF45VG9QaVZ0eToxQztORHR+NjZ9RXJTQ1M/ISVKJkYhaElueHwyX31tPDh6VjdzZ0VHWFo5V2NZR2FHMkhgb0J7Jjg+W3pVfmBdPH0uXkVafm8yUEtmTDEhVjdTaEZEMz59NEs2OG8yVk4hfi4lOC5ZI34rLiNLOCU+''@;'; put 'put ''XUcvXVl2ekFnUUAhLk1KPn5dbSZXLyVVQEU+Vzc0QE4/SXg6VVArVkgpWENIel1ZIVA0RkkhNUhZfl1FWCp9SFc1Q0xgPUo6JHtnfEpfR3hBT09RcU1zbmA7dmhNS0k7NTl9Xzs1UCldJVNmPUJmMilqdSEsdlElbV5nZTFzL2Y6Zn0zPD9AJCxgKXVPRzh1Jmo2JlU2d19YciRCeWEjdDlefC8y''@;'; put 'put ''TnoiT0dfeUdqOSF6ODhlYS4sbitVPi8pYU5TYVIsTHB3WGddKCxKVmB4c3U8KytyO0YlND4sb0kpV2FfPSZzQjR5Q28/K3NkT2JXOWloKGt1S3FNJiIrdmE6eUhvOzVBc2tvL2N9XnxFMi5lTyhFX1BjdWdpREJQS1tpR2giODFHIT1FUjNdJWsxY3JOc3ROV19yWkEsQyoxfUl5JT9OP0RNOURy''@;'; put 'put ''KVdQKiM8JlVWak9ZT0tsdXQsZilaZEAvQ0VgIVdnIX5VKGpLTTxjIVJVRE50OU43Okh5ZCMkMFdMKmhSJDJgeCxzZDhqTCouWl02TTl1XyV7L0h9KUUzLGpxMStFKGBfcHAkT2BAYTBMaVJNSWUsNC9ANXI/ZzAxTGBiLCZhUmpSRH19Vzwre1M7PnRmPXhacD9WeXs9VltGbExpYUxid2VNZEM/''@;'; put 'put ''IzlBKXcxfXMkdyh0VFhqTTkmQzZWWH40XjM5cWpYSH0+JT9GbjdZK2lDXnN0VFlyWyZ5R3NidTROSmd0b0s6SXNbdz1lcH52PWxxMW9QL0U2NDhkTDFwbTRgeHJ0IjhZXmhPR0MyemczLyNHN3A4RHRJRnUwWkNpbDBZQ1s4KSMjQjslJEk7T09pQTN1IlpqYTI0bSxYNW0pPV5ZbChvLD9BdUJL''@;'; put 'put ''UW9Eb1YzVSxzN0RdJG5LekI1S284Z3Z4cVB8dysrVkIhS2c0OV9jY0hVUjZYdCw8XUQpeF43W0tkJTU4YnskKTdHd0pqSlcrMDZfRnM3OjxFTV1RLj1LQypNUyVeTD5qVE8kUUJmZXgvRyppSV9mU045akIvWTQwYHMpcjN1WjNkfG1tUCljOm41KnV2eF1KdGBEcz5aUWkicGU6dzhkOXw1Z3R5''@;'; put 'put ''aSFrOGRhNlVmdjdJMCFlI2pte35LUmk9SV4iZXROQV80SkkvJkpXLyprRDp9W1RoX1lqZ3ZPX3R+dGFxcF5tfTRdOH5FekEmNTxdVCNvbDQsdzsrTkVrdGpmKTRMZnlXNC51XXIjJHAmfCZqPls1O0AoI0ZLQ1ZtWVduPz03XlQjRjh7NE0hNV4xPWE9Pyk8OmBDUyYqbDlDS0JCcDZMXiJlPUQr''@;'; put 'put ''WzZbdkI7TVg4UE0yNUZic0gqUC47OXc5dipuI2krNXVtfHt3Mi9bLmBGazBfens3S25oNGMqQH5aa2RWdT05O297dEIoOHVfKXpVOloxVjZXbEdnUk8+NjhOJU0jQGxWUWFkT25AQyUoNV0hWkYoP0lATFJMbEFdODUuSnFUT0NnbjU8YUo5XU9AQCwyKzd7cj9SQCRjfS97NE8kfHs8Uj9ec2dT''@;'; put 'put ''I2NNaCRPbytCUFEhMl9Sb1V4WUtVIXlkcnZjTkVZSCNeQ0FRS34vWW9Ba3l3LjQoI2JjYz1xVCg+RnhgTE9lTlN+W10wVEBmImswOGlNT3tpekhRPHcjXUouU34ua31MWyw4WWJuUzhtJEVueT4rUVdoXl1qfl5gRkxlNHUzQCNVYyJ9SlkmYko+cS4/OldwOm94S2tZY1l5c21qa3NDLjYxUUJF''@;'; put 'put ''SWFrPFt1ayJFJiopSkNzRjtOcW9Afnc5eSw8dUZkdVs8PE9xejQ9YmhAckQwQi5ZRztGSVFLR1NgUGpWUCEkTUhMWCxBRClRQkJlb1VNOmdJbVUrU3xAOWlCciZZI3kiRnM3MDBDYV5gVmE9VjsrUCFWJXM+UztEUUB+KXIlIWEoLFsmPSt5ZEUxKiJSUTlJckZJUCg1WyQ5V0ttX3EuPEhVIkYw''@;'; put 'put ''KTVnMGJQOXV6aGpaRTQ3LjNUbWZ3aGlWS0NfZiUhMDI+PncyTnIwZixkTD97Mi9zQ05aKnd9V0dtZntAWWhoPE1IPzQlZiFxY00wVEd0Nm19YCl+KXlWN2pWfFBva1luYiZSaWMvfTs7aCN8cy45QzB0aTBbM0Y6ZTM5NWdAQlY4Vz4sSCk6OyZFflEhYHhTRThyZmc6ciJoU09VUT1BYFF4WzVT''@;'; put 'put ''N1lTdDpvbEdTRkRWZSl2KWErWUFDUXpuK3JOMCxETzMoUTYpXTIkaysvIipvWU5+KF5nPTpaYH5aeClxaDh0JToiRn55YlslW3JaQD9mVCxDJkNIZylyN3JJOkB6Pnh2TVJ2XSxbW08qRFVpJUBZJWBsSTxuRy8oUT04MkFUMyxHNnJ0bVJrLzklT1NlX0RAaDsrXVNGS3tEeFRKVGp+dD9IZnYk''@;'; put 'put ''QU02dSY+S2tVKGlFQiY/dmJ0RENdOElZZSZrezYhPVB2dlJ9Tmcpe1FbS1toJn4kbmkhZVssUDElcSJXL0dnLlQ6aFpBUCJeRVpNa2RpNGQlc1BNPFg5SzdGSjgxWnJUakdkJWtILmR5YTZ6dnVvSXo6IVtuW2M2NGAmb0Frb20/OGxRQWF0PyxEXlBSSUt6QFh9KlpxIlducjRZT31MW0t7RHJE''@;'; put 'put ''RHNDeX0ybipLOEZAelAofWcqLC9dem48YTJMNENOPWMuZm10RFYkK2V1bkxhR3p4ZkwrW2dMYD83Lys9KWhMVFRPKGZyVj9gK1pYfi5tenk5OkFgaztXbl5rJDhoLilVQ35HUUkjUkVgJm9CKnEzYT9lX195PWR7KUdMV21Da0ZAbG8hXiFtOXBQeGs5JWc8N3BnNHc+eDJZSHZPdXtTdGo+bSV9''@;'; put 'put ''Y2kobDBWdzAiRTVBaFJHVylfPzdXUmZTOStXc0cyc2U4JV46Nj5aSzoxW0NbfHpqXmooTDRFR1ZsczJxT1RKTzM9KCViRnRkXkRsS0wrMHFfLHFoZ2RfN2QoJD1gITw2ckoqbUEsMVhJZE5od2cjSFVQNGNnYTdCIjNxLk9xTFRkM0FeOEJALkQ3Ui8vUkhJdjs2K1NwYHUxO3Nid0wkVG9nJFNF''@;'; put 'put ''Wk5aNSgoblohciNLc1VwWFFlZjpxI2wvWkZrflpTMV9zI2ozb0hxUSFhPFpJY3djaTtsKF84QzdUYGJZNUNWKUlGJklCS3xBSnBvTWpoVFRkfU5GL3A3fm1SfG9NU0RxL1ZIPjRoQTRnOnFlRWkxIlBraWtfVCkjaUZaIj9JfmlKPX4jNmMjKyh4X10kSWQpMkl6V1kyQnI4MzcmXUFFIWRXVm0y''@;'; put 'put ''VGlPfSVVRGRgMFZdRTQsKFE1JlIuWGQwIk8/QjQja2V2K255JDFrJWZqUy50UmshOkZ9Y3RxRUBWPnZScFhsUVQ+MEMlbG8/XWQoK2wmJFNlQVRtRSJxY0R9WSRjRl8+PVZvOWBFXWY+cD8jeVlXXTgwbCZiPDg+Q05OejQ1JjY6SjNPNF07PkpQZ151Y0l5PThWMDBmTDdOIW5HYTIsbVtyJHVN''@;'; put 'put ''WywuUiI/WFEoc1kjXip5RGZeMlBEW0YkPGFka1d6cVBIZ0hbJDN6WUl7WCJvKn5qLzUpVm9mK0pddDosfUd+KCZpKzx5RkB0TmhrVyFsSSxXUmJxKkNBMXhxKDZ2SWt6VitBd0Bjdj9ybyt2OWR+cFQvVyxUOkl6LClERlhseWIwOnk9RHJucTs7ZDFdPmBkWiF3bVZZcXZfJG54S1pGSVMyRSko''@;'; put 'put ''JHdVfntZfDlWZU9CYFF1XWtlbEBdT3h7NFRvSXNJaT8jVDlPbjtbSHl8ZjgpVSkjNTNKZVt3JmV4QFkmVTdZK1pSfipjRm4hQGZDb3o7LnBDXUdVOkM1Ry5TWkYiZHY9JnheaXRFTD5bK0FYeV5KI2k3aGg1OkpdUk0uNHhXWFQyXTY2KFNAWThaKFc7dmtmd2pnP0BLfmFBMCp3aVRuOGZvN0RK''@;'; put 'put ''KU5QLE41Uig7VDRBaS5pUCEoO01PPXNqLEx3cGpqZF4reCw9Xk9hI3lbMltnWGZpMDtOcX1lKTluSDRdMiN9d21BdV42VCZWV1VoUHd2YTNzbDhOdCleS1N5UVJvdTVvW3hNQjkvYzM0Kzx5NndPSyw+bF5aWDRkZTgpfmVkTXJHeVdyKWAuSXx9PT1lWDBwLiNjcU9Kdyx1QFAxJFF2Nk42UFJB''@;'; put 'put ''Y2AxMDJlI3tvVlhlKjVFIWpnUWIkdHY3Z1Z0LztoeG5PQTZ4cjt7VyokQGJ0ZGo/JltIVTpCZz10TVd3R1skQGtkVlVeJmhxNzIuNCFtWWVFS0E0cGBdZngxSDVOdDU8LjVJfEZsSFk3YElwMmB5SyhZcWszQ2JAMzpHJjZRYWYvSCFYfj9vfm5SO1FoKChjYipoLE9+OU4uXWAwSWEmRThwP2hh''@;'; put 'put ''Ul0xYkBNJWFzbGNYelF+KlN4WXhPWjgsNkE+RnxjYSg+ZDs9MHlsXyQ4ekwjZko4ZV9zOT9oTXAhSjQvS1pgYjZJXkBLNXsiY21dcCFrSjBwUStMUitaWjh2Li40R08zemUhJDdoaWJHU302ezdqTnNnKFltZzY/O3p4LnkpQUAyVmddTl10Q28vTHAzMWYwRkxkMSNYOSlqd3F0Ty9kKTs7S2sl''@;'; put 'put ''Xmk1JEFHRUNUJHkjMSNXUz92I0YwcWo6U3dMfE4icihrI3o5PSo5Qyp5fldrPCtbW0c6UWJdeSFaQGxfdzZyTDRofmloWUEhMnJVcDRGPzdOWndGYEM9Ql1bTVszPSxGKjZ7ZUY2PyVFVUtJMm8lW1Q9bVlDaWJhOXxHaG4wRj94LGBeSExCOi9DRnNJVjdudVJaTlpdLG89QW15JHJTYSE2Y3l6''@;'; put 'put ''akw5V0B3QlMufTJ0eCRCYjIrTCtTI0YwVyZ0UnciIlM2eHcwa3pFd3ptKj8sJTt0ViI/KDo5YF5NNTtEeXojdzQ+Ln55bElZZVlSYGsvVDFNLmV8ZjB5MFVPdVpnflEuMCRNQmlIcmxiRVhBSHkscExYKkx8YCV6RkpTPmhGTlZVZ0gqbkZuQnlKXnhSX0heWFA8eC9oL1JQYHBhYHV3PDIqWGVN''@;'; put 'put ''Y0VVa3A5Zm1KUGZxQkZCJEliZFd+RjEvZXxbfmp0WWdydnxiKlReRV1WWT4sdFRYfEYsZTVhdVhmeFZ+OXZ0M3deQVJwMGljKiRdKGQzT203dzw6QE1WQGlyaT1tezl9M30/RTR0Mz0rcUMvdV9TYCRwSDA/LyshOThjKiImJn1FXiIobXYsezJ8ODk+e2ZVbDB6JVh8KnlTYU9LaVM+K3A3aC88''@;'; put 'put ''KDU/WX46IWpMXll0KHlVS3hbQDVeJDBTZlRVPCRQSnk4RU5rPDRBL1tldTVoRlV7algyY11RNEQsX15MYWk3ezpdSjBEMHRTLFI9YltrVyV5OmNYWDxgJXZoKUs0XUBsNj56VSRNXTk7QVo4fE9kMDRXeTxvJGIwNUwuW1V4Qjt8TFMoXT1tNX10QjhVayNZTUtWd0toJGNyc3o3VDtvTk01Wl9l''@;'; put 'put ''bC8ldHVYPks3RGxdcWp2cC5gPH5tdVZETyR3NERxbWpwKUBVP0xBbz9Od2slSWVgc2UzKSZifD55PWhOb3lUO19CJjkhbSlrP0dEeigxPl0zTTRUMUNxclkyPCE6I3BdZjQ2fFdReW1OPXNYKXA0UGI+eCk9WUY2M293bmxsK1VGdyRGUDM3NTNPaUl+fDNMJV5NN2w6LCpmPy5VVVVRX0phSHE9''@;'; put 'put ''L15wVGRkSkR5OmBETEcwImhuXkY9N1djU1s3YjFmYTZ8Mi9iMCk1dE4kOGRzVkshOWckP2lSdEI8P0YrJSshNjhpSHRDIW0mJiQlZzc8ai5RbmpWcnM5RDNWSVhwNER6NW5YK3Q2Z2okfj9QX0NYaUw3OnBPS1c2fl5+K3pudmIwVn5tTj1HMy4+UndCUyhTUWdoX0ZgbFZ5cj0mP1krO2tvNCVC''@;'; put 'put ''KzUvcmg9YXE4PGFQKXV9VUlraGxsVHIhcmtXL3Q4UWgkUkRiZDlOIyN1bEtCblIie0I0NXN3PVlAR0AieD1ddEd0MiJxUzdTcTRVN3JpTEtER2JMQy9MS0x1dmE4SHFhc2huSGVrPCxmUE51eC4mOF1DODVnZlMzSnBARnl6T05yNHZLSzhfb2kyJE0qV3wrd2YwezMqZig6dFo6PGYoUyskPywy''@;'; put 'put ''MDF7LGJeay8rKElZUm4xJkgyXUErN2VORDw9fU1bPDFOcmtpLDtAJXIlX3R+I0c4W3JYZj9OYERXdWQyVnpXMTtfUV45MHpkaUclXnJ4UkRxVj4sLFlJckk2NWoyWVc6UmdqLHEiTit3YF4vZTNaW25UZHdZO0xSWUtQaFtuW00lYDcybzpVQCYxaTxoUnghLm8kUyZGQ2VQUzh6OzhfIURMfns9''@;'; put 'put ''eiw0dVI2UkZTSHdpemxGelRwQ2tqMm0ydT4icENkK3Q5ZG4/dy4hZXVgeCsrRHQrZUNCVHc3NCkrQHReU0kqS0BhTSEqNCQoeWpSSmZlUnIoKyVlaEJSXTNoNm9UQGQsd2pXTWlDKj9BdXpfQyRtZHtOKXBTVnRKXzQvbVZAfV4xeWBYen5CMklFeSlTNXN4PTIybUo8bjxLSnRJVGxyYCpBdXJ1''@;'; put 'put ''XigrQD44S3svJiE1RWlpXWBYeFNAWVp2azlUYlE9YShxezJ3PytJZGpmQ29iP09Ec0MpaDoqYHIpdzRLTWZrdztJKXooZDt8RkdyY3lAazJ1YltpK2pGeWciWjcpYnQ/VjBjOSQ/Lil5bTJ0KiV1KzRYWFYmclslRkEhak1FLmY6cl88IT1WJEF6cT1oREc4fnZXfk1LQmdXSkMkZE9NUSlydn0w''@;'; put 'put ''eVciNUtQPWdtcitDLDl0Nk1aTVImMik1UkE7XyUqLFtsflBVOlElOEd+N3UvblovLDl0e0RHKksjfF1MWXZrJlIvdV4+OkJuUjA1Rl9geG9CI2R+Q11VWWZwNF5rZGBjJXIvOXJyc21nUXh5QkQmKVAwempoVFNic3xnPnxsejJXcXBGKDhKIil9RFg8JURgK3RvJi9JVSh1LmQ5NltoMFdgUCtD''@;'; put 'put ''Pm5NfUxMQ0l0Ozwvc1Z+OVBkPjxjVk1SX3NmQFdWMndAWD4vSVVhMkp6ezFGT1NlfFNeYC9ENXs3WyRCJClJNHExUXVeZWZFc1NnNW1RdT8jaTk5S2R+OXVsVF5YN2ZYWnhsXklhWCZZLlRAL303OW5aSnBrS1E3fDdfKDxPTXl7NHApSE1JXT1eRkp1SV03NFlwREA5WEw+P3EiKCFPS3hWJVFp''@;'; put 'put ''TzprYDFETC4sSzE4Q09DRzY3SnA9biZ2WSkmX2VxJXg+T3hEZDF0OHVhJXVtfmg2OlFpJjBdPm48IUlBKDtRXm1gY0hBenp9ZTwhY0EsfC9vKCtzJiFaNCpmYXczSlpWakN0UD9LPEV6cDNWbnBRNUZINzZQKmdoSkt6cT0xXW9dbH02aCl3I31ZYzJHWzJnRmF2QTZ3KWNaTTBbVCNNIz98TlV0''@;'; put 'put ''Vlo4UlAkQCh0TilXOVFsd1dTUXhwIXN2OUIoMjQ4ZltidSUyUT1KYjlHUmwjL05uZmJLKWMuO2hYX0EzZCV1QzdfJDN0KEthT0UlQyxaQDIyZihRYFUuYmFIKTk/SThrdyJdO2ooZ1YzJmNWRGV3aDNxU0pvfUoueH1POk13LmdddzIhRSJ+c1NSUXBMIiNKe2NkVU5KaWFLRWZHTUxCenJ1MjFO''@;'; put 'put ''cDd7eCYkeGVUKkJ5SkBaJTUkNShMZi9jLzopJjpoVSlaUmFGLF9mZXpyUl95R2kxSlk1TlJtNy4xP0s5NUxVRyQ/ZWJzfHpJaztsL3FbTFJLdEhHS2wmOl59Kyo+ZX1TIklWYnFlfERHMjlOX3c1PWg0fG01YFQ1d3YuUmgoSzhENFUvPEBDYSlZKyt7TGt6OyZEeF5LUFU6STZALFM3LzBlezRw''@;'; put 'put ''Qk8/ZnxVUWUvM150OC5+cm5eWmlFYFNgfXhWVGZ5WWksNGp7RUslOmdjWWVXNWZbXiJDNV9yKys1XT5vKm5qU0U9T04qYGs9eW1pM08qUmpSY3RaKmdtck1yIUN+WEFmWzptOmY8aUZ1bmE6dEA0byhrRWI2SyI9dF5xYEBNXXt2bEwlJD5XRUlkYnE0JiZMUjFFanB9QCM1I3diNTImTSk5fFBg''@;'; put 'put ''R3QoZE93PVc/dCM/YDJZNUM8Ylo3N2g9eDAva31qWnxxNmsxMnIxRE19IX1db0MyaVJhKHp3WTYrayRtLCFDZG9TP1soWG4qdkJCPVlRSF0mXTlTJShJOm4ucSpvJGM7SEp6aXo8UFhlSURnRl4iOD5mdGQ+cSM1WmR3Tll9ZyZYMzBfQnBhWUZEVlhxV11FPUU9LiRqK2lGaEMqYWVDNFk9N3Qw''@;'; put 'put ''eFRBR2htU25VPShtNDI+bX07UDZGcj5NKlh9aE10YVF7QDRLeSV6UVppSixfKjlFOm5hdHYkM0pMcCsrcX4iem16QTpNfmg8UXBZKDZlUkhkO35GLjBJaUpCPkw2KSs/ckJTXmszbntKfkdNaSZjVnlhREcjYkx5ZHpGaSVITnJNcXZJITtFOmYhaCM9fUlhQlh4fmY9RC5SfE5rLGFANURhT1Jn''@;'; put 'put ''Z1EwIzRKWmNxWCssO1l4PCNQVXEjaWFmMG1ITiJLSDskP2E5dkh4RnVzUD94eX00UVkoNVgyYzZaTlFke2NkaVdCYiIxRSIzK2A1ZTZaUWhgfSJiPEUsXS80JFhfdUpdenNDdVM4TlpdW35WNT9aazEmNSZVdHg2UjhsPERbdmgzOm4/IkEzWzw0VkZpTio5OTcmJSwlbj9XSzNXJmdBI25Sfn08''@;'; put 'put ''aCpHNW9NLiwvV1dubk1USEBOL04mbXR0VXAzODZMXVopZC8uNXBnOEhmU0prXXVCd0hiOjI9QyEuYX5CTEZZI1IxPEN7YzNDSXx2P2giZCJMSjg8R31IWXIyaXd1NV8lWD1hPHRVI1BZQG9SdkcrW2gyPjp0WU1EcjVCYys6Pjsid0prOHc1aS8jUXk5VjhRXkJkLndVP35feXt7bTtVbU1+ITte''@;'; put 'put ''M31dNF5eQWN2Qlg2InYkJl9iLlJDeEs9cE1VKz01fDJLVlBDaTpCXU9iQltCY3E0KXkwKW9TWEglaz5UYCEjQCskTl5RLk0zLEYqT3A2TnNRaSF9KzM3QjRecyVYQGs2Snw+YXBeJEgoIipQNVFtR0t6SkRqNGEoNmt5OGFGIzFOVzh5WmpVfF13enFnLHc3aTN6Q1shZExiXXc8Tk4hbixOYDtF''@;'; put 'put ''a1QiRCpKVTc/W3VsbW1HPGQ9KVpkN1BuQ0wzMD9iYnwvPkllYmI/SjlfZlQ/MF1zK30oZ0RPSU97JEtLWX0pay5HM15dZn0mRjNhUDJvMGlgfnxIZywlLEVmWSQuUy4rMmoiPGE1cSRxTSxjPDsoRXw9VWlFTWNQRXMrMTlwMTgxZDNBYUJZOmJ1YHhQJik/V31meEpRejM3U1plejNvQz8kX09z''@;'; put 'put ''c1RSOHFAWmBROD1QR0JdX3JKMigvKFB5RnJLcF47dHRYTEojTDdJJlIvLHEoUUhNeV9qWXR4Q0coQ15YT19xa1c/Q0spQ2Z0PT5wSkE9e1M3UC9CVHpXZTByeGsiITtXYnEoYXw3PV8hXWxefHR0cWtYSm95RzFXLGIhWjU7cnFONkB+MHxAQm07bkx7LiE+fXBoWSksSX09MTFTSXAhOEk2WWE3''@;'; put 'put ''V01lbz8rSj1PNFBQcTlRZkZod0NyWXp9cmd7PnpEQSFWcUFrQz0qRFBdclROemR3KGlpUCVBWjF7WXpkcFtvZy9EVnNxdi5UfVV4STJ9MXtab1BwJlRGa2R+fjZSPFR5MitpRUQjVG07WHtfVVgzWjAxYFZqM1ZdLzxlMS88bVlPITskQ2JhaX5idT0qUVRrdH5US0BTdiQrKDYxKCRiRSJbVkhi''@;'; put 'put ''ODNZOTl7eG4sJiR4VTs2UFlDJHhDcW1PaiwqMllSYGk3ajZdOE9ESCo8RztNNCssflp8ciZqL1c9QVtIJkFBZSY4KElDdl5sJEMjNzRTe289UDMuTXpGUTRBSV85eWdETnpIRitwZStUfUR4Si4mOVltfX1XdFc7d2dyLHxed1E3Z018YXdAdztZPHJaJXxndyV3eG8/UjdxLlpreit8YzRmYVM8''@;'; put 'put ''YnM5VUJFdD8zWm1kNGM/dENvaWRZTEl1JUJKWiJMVms7YztHNlZQbioxSF1ROlZST0AvMCxxcW10K3xOVCR1SVoscERqaCttL3AiR3dyMD52RDhZd0xUPmNJVD91IlVoLyV+JjxmcVV5OlUiJDtWV3N5a3gubUw8JDxJVG5jVHZGWCkvVCNoJTVCdn03P21EOUE6V2UqZiZvQk10MTgrLzBuaWRu''@;'; put 'put ''UHxZaWkkdF9taDkhN1dQaUxnWk4ibDkvSCl0fGc9TypdJWE3UkU5YDxuWE9PRV4hOjlre2hkdCxbRW9sI0Q+PDkkNUtXKlU+c193UXl2Iks4Wj0qSnwqSiZ7TixJMCZiJHM3LF9ocGx2MStzQGB4dj5wZUY/TiJjeykuNEg/PV8xUSgpckd4N25bWl90a29efX1APUloenlEK0N4SzYlOX5YcFJ0''@;'; put 'put ''SDl1LlpXKEhSUzdnfCR4eDNCVXdFdXt5a194SVVFaCUjZjA+ckNpOig3ZTNyMnM3YGl6eF5RbCo+clYxIiIzb1I+M18hTTJBI2VdIU1XZj9XZjlQTF5gW0JySSxNKiRsKl03bktnen1tRzh2IzwoYyNmMDYkL3VUaTxie2RMaDFiRUB+TSFfLDdhOyFjbCVgV3gmZUwjXnBSd2x0VnY/RkUuUEdZ''@;'; put 'put ''dFBoJmRaSEEycFQ3SnB5RnlBKG8sRWpHZylJQU1MVEV1TH5tM1Y4ZlRWa29lWyV1IypMO2orcTBueSM8SElSbV9kMzY0PiRaR25EQCJnSD9rbyJlLn1qcixbSWMjel44R3VjTE1WRzNRJEMrMVkreCkxSGJiQE1LMCFWQmJONSUsYC5aPk1LK2tnb0ImWHEsMz96Rilrcm8vUi8ucWZ5eyE3ejZK''@;'; put 'put ''ITo8YWx4T2wlLmZ4PjVfYzBoSi9uMnVPKC5JeDg8ZCZ4bXolWEMhSkovWDhLZ2IqbGhZRWk1aiJsRjZ9KmVMeWpZVj16KHFFTDZEISpQJVBzZXBwKTlEa1cjUHVdX1RZZilpcWVEelRKXXFiRnk7fDt6fDhxKXF9Lzx4RncpTDhjLENBIUdkOGtYKnRCT0N5QyF3U0pRYUlVZVcrT25pI1BUbDNp''@;'; put 'put ''JkN7YUI3X3B7fEdIUl5peTt8UjBPZ3R4aEdAanl3fH4hdUJYS2pBOm1neXtPNFpgbiNxUyJEOUgleDkqMm5zR1V9RFFVOG8yJksoSiloJTMkY185LlJBcGlJdipAV1A3JlpMa1JMY286Qyp1QkJXJnY/aXp2Pz8mWnpQJD1yOTxuQlR9QylDalZPJj9XPyZGSiU2SVYkOGxsLDM6ekRXaVkoX1ou''@;'; put 'put ''ITRhKSZfN3V3N20lXzd6dzNJW0wmO0l3VjhFdCZBRzZ5SGExQUZ+MzckSERnVDUuSUs8cjxeaHF2VyRBTS4sL0ZwfTJWOmZVISI/YXUwNF0vbzV5flUyOjJXI09OOHhXRlhRezI/Mjl9RzhRY3oqMyl2PFZoOHUjTFEsIWs5aj84eWBGQ1d1ayRReWhJIXlULy55X0NlRGBhKTYiKFM/JU9RTlds''@;'; put 'put ''OzpWYEBOLkgvRUtsbCFxdGIxM19eOSF7cXEsTkVVVDtmc2M6Xl5MMU1sdk9UTGJAPU5tU3ZUW3B2PC5VYjZCbkl7W01xKTF0JXZkYyp7OF52a0lfQDQjJV11ckZHeCFaZFVwXyRMeipPUCprYVg5PltyJD02LnpMVW9rTiFvWSZTN2xSKDk8aXYobV4rM0BXRXBbM3VPN3hlYCM7azozTUYkJXBB''@;'; put 'put ''JDdDLCoyTzxxSTZadFFge0I7dmx3W2skQHY1U0hxbml3X3lmWnFgTXY7QVN1QzlGbW96KHFWVmhhYnF6JkJhd0khdUBoWERvZ25VeU1NaH07Q3RhWWtLSThmST89V0BuT3NdPnRyJChkJXdVREdvKGM/TztlPiRBeD5gI2N+MEkzN15WdmooZWhfQFNSY0lgTkI5Pl9tJHhhUXtAZDJCUSZrKnRN''@;'; put 'put ''LGI6SSozOl8rWG9eMnVENHZqQkhgKHlEMlliM3hqPDg1fj13X35yOGVWVU8kSSU3eTVBNzM4Sms4eE8mUEh6UFRgU1dEOEgyOEBYTmNWPVsxbiU9NzNgYH40an1EKzV+Pl99W2M+PT5GLHVkamRIM1VScDQhRzlnUm1yfVY6PGJ5RVBKTHZIMkF9QmQ/XnhpP054Iz5VekVAOzl6MSQuKCpraC4y''@;'; put 'put ''P3glcCF3YGB0SUowXXxkdj5fJmZSRkY1a2NVd2lOeWZ0VXdOST9YYCk+NVtHeyg3cmdGOypNeFFWZnh6IkooTnxtQnpiLGxUIVhZWFZmdHxuaVJyNT9eLmx5eWBEKzlHPWtQV3Msej1Xfl0zPEgpZj0yRkJQblRqa0pqT1NOOzBtail3PiZyVTpMP1FvMnRDQj9yZGR4Lj0qcHkwbn4qK147e0x6''@;'; put 'put ''WEhyZ2pAMyIpXUUsJGV0P00yWkAxcHRSK2w0TypkQ2g9dzpJJks5Z0l8VDt3eWsyaWUjJn18Z2VkX34oYiU3bn5oO0dUbmtxUjtVaz1SYTApY0s0NTBVXVBYIilSWVg7W2RXT0FATy9zUkx5Zz95ai9idElEKUc5LlNGY2pzeF4iLktTVmBYJSVCbyZETXJDXzs7USZHQSU1fT9vOEorVXtiWW5y''@;'; put 'put ''LG9NKTZISlt2S31vJj5iIXIlLCZqY1lCNS5kVkxfaj9edWEhalVDZzxzV1k8YnFxaXV6QmJnP15hIVsxZGN5bE9ZUT9lMHtyLndqLFM6aiFmL2J6YCkxMmlgLyVuUCFAfTRYU0RobEJjWkZnTCRMQHhRekwiT2JhOnNddWJHeXdINlgrcEtrdylMdWE8aTM+QlZ6en57TWRBNT0lTiIwUiUxWjZm''@;'; put 'put ''JC42JCMhZU0mInFLSEpxQi9iKihVPz1MTj58fTsqN35XZXQqKn1PTGJsUCVjTFI8P0A3e1VjWCIkRn1AYH05d1cpQW12cEtfN2IqOz0reCMubD11bUxwbGM/S0Y3UW1FREsyVyJaaTsrU08yW35eXS8mS2skNDg8VmJ5I3VIOGw+dTIoX2xYIWV0LGU/TCoxMUdpNkNOcmAma1I8aFNBTj1eeiF+''@;'; put 'put ''PittQjx9Mkh0UlVBdyYzbUNCVCFjNE1xM1NJbWNraG9QUkJoOFJtNHsjLn5Sfkg5YVIyWDBxIThTIlkwaktuL1J6VDQ9SD9JLipxTEM5NXFXNiJ5fGsxNkF2XVJJXT8kOjxxTWQ5WT4rTnpwYno1MX1YfXsqcmhzT05PKnxRLyk2MlVndW5gK2NZdnNGc0orYml2Rkx3WkphKzJeKERBRilEUGVb''@;'; put 'put ''WypeXWQlRG1pUl1fRGtUan4laEErNTxESFtQd1s0QTV+YnReaUBqdXxAIXE6YXtIRCYyWDJEZjYsKyNAZXFIZTUhcXBYZDI+TCR0OlUydHxXOjNITkBwQFdOUDFNXnxSKiptTGRnMmBdc1BlMlR0eEZlYWlrJFhpZjVxT10yO2NZK3R0QTxPR0FCbEMiZyVAcmZGZTZlIXg3KnR+R0R7PkdNJWc5''@;'; put 'put ''cmxYcCtYZUZsdE5jb1lKM05PVVFWKVNkTWVFYFgyR3BZYHk3Ykc9TVpCYz4oWT9qbE1CNjw0aTRdXS81PUZPfHR0QjpOWkYvIU83bjp6SE0mWU01N0xKZjVra35xSjApSEkwTX4jQFJkPlhUZnRYJSFRPmR2KztKTXtZRGEyR3pITW1pdDMzLn16TUlqNSl2RTJvNzB0SyQ4RjhmcE9xMHBAUmVR''@;'; put 'put ''THQ2bDB0T28kN1RlInxaN0Y5JlhTfC91dzUsQmhbPGNUPE1wTWJpVShbKUs0Tzh5P2ksNDhPeGtDeV03NykhcnFWdFE8Ki52QSIzdylILCx7Z2ghM2lANkJfblopM0Y2UygyITxMOUJiTDpiNFZwd0AqPXI4S1ViKm9MVShrVUt1Zng7XSZOZHd5TmJvbUMud01wWltgPlpTZE5YKmtjVWc0eyhV''@;'; put 'put ''LCtofUYwOD51OSUmJXl7SHQhZil9UFslYCZ2R3htcSF0ISFuVldAYDV2cz1YJDY5OE1rOjsmNzckcHByIXptflF4LHUyVn1HfmxIZzxWJFNGX24xJmQjZTw0elVIXXlQUjIqQmB+USNfLF8rKWJNOzQ1bDhYbXBiNFdDTUpWZ2ZhJGw9USYiQ3lQNF04YzZ5IT54fDQ3W29uJlV+VzhjKngwTjU+''@;'; put 'put ''fkd8M1h2Wyg2NE5EY35sY25FTCgvekUsQG1bdUtDWmxBXkJdJHhITEc6TCI4SXRxQCVuYkosJSk8SmlGQUNFcV0qelh0Lz8qP1V2Sk01a3FuQUVQZlQxQkkqaGt4WTRRTEREWkRyVT8iUlkxdTt7JHZMIj44ZSl6QGhmRT14dlRoYixySE9yQEFeLyk6WGQuW1d9O019Tn1PLCtiWVtVTyUjbyxF''@;'; put 'put ''JTh5aF0iI2RXQWMpPi5jJF59SUZpMUFvLC4wK0lsUF4rUV1tc198JHEjPFQqIVQ1WkM/RCldYThmTnQ3KStmLzBIfk0sYGo4KVltejI/VHhnZzFMJiJrZVBYLzpDV153UD1+VUJaeUxNP2UmRnUzTUp3bE08ZjU0Z0s4UXo7KG11bl1WTV40PkojWG5JaVJBMVE8ciRaajZ3My87c2YoKDRlZEtB''@;'; put 'put ''VytqaCVWfix5W1txRWs4LyJAXy81alJVOEVAQk9oSzlHK000JXVjRCFRVFJvW2dnSz81Qn0uVlNbVDoxdyUkbGhuKFhMNEEsLGdZPD4xd21gWGJrV0whe0BXZ2czWlp6QH4oK1cpNWpLcHxwfFRqZ2dgfj0ifDs8Ln5JJXNFKGAiTG9KMmZhaVokO2VKd0JnTjhacyp+VVVkVWhYe0ZpZ0QrKj9g''@;'; put 'put ''TT9NeEl7cmxBaml8XW4lPCRuVV52UH5yNylmbSohZl98OE4xPV9jJVZbW0BpNVBxJUZ8UTNiWGBWOUtEZ1pEeHpOWDd9aSk9YCx8VnJSSDRZRilKeD9NISQ+OG44MjFZL3ljOX0+WzcvbGBzbVAjXWwqOCR3I1ZpKTZtfGhoJCN9fSRIUkMpUHxlR2xDVl8zZ1d2JjxoUEA8YnBKVGZELj4jbH5R''@;'; put 'put ''RzJLYjt8dFFuOHpLRys7OXUmdisxJW9KS2BPJEpsfF9VXiE0M3ReeUBCMXF6fVI7Wzd9Mns+el9qTE5oTyo7PThiVjRfTF14IVBVYyJ9L2FdSlZFVypdfWt8SmExdXh+dEtQU1hMUz43KzJkakJPPmN8fF5qK2ZqKzd4WUNUIk1hd2ZpWl01R31HelYreXRvNSUsbl07T14veEZ9S1M7aVp1WXU1''@;'; put 'put ''TTxfI1VuRjVjaG1qPjhKejtycWhzeGdMSjVpR3NgTGFtajRmQjhkWk5KVWhOImtpP1FIXUM8YVRUXUt9YD0ucnglPnQmbi44R0hGS2VkTV8vSjp+bitKJThzeF4vdSYiNjFDRDA5VkAyI3ohVEhsK21NcnIqaDosMzYuWCp2LDgrTjhiZ2hqeFcoYStzKUF+KDhNM2BnJS91Xj5UIyZ6clh+KU1h''@;'; put 'put ''S0xhQnZ0Y3I9d01fSjA4Xlg5SXopWiFtfmNuMUtUOHBOTjNifnUwWTdmKD46Pm5iU0U1I0I7bnNtaWpvXy9INndrJnBRP2ZSJGNpdi9mO0tWbEx8djp2ZlM5SF17JHhWOmlbZT4wSj1LQ2NAUlIib1g+Q1BTOl1+UTdSU0E+RytDaGd2biF7Oj9rWH4sJUgsZ1MzbiwxN2JmPD43YjUzR18ldFdU''@;'; put 'put ''V0dtNDphSCkueUMycUZsUTtYWz8yW21RYFVnYkc0OEdaNWUsU3NEZ1NRY2JDdiNifWZNcElvJj9SRnwjU0peQVUsT3Eha3B8QjVUMWQwWWg/RFZdT1V2U2JKWixSXzhhUVVNKj97b0guSXgoc2lxIy81K357ZXR1dC5RTHxDezt5UHh2aUgwMW4rcW02Njl9LH1hZj88cFIzU2ZHOiRdL2ZLZEM3''@;'; put 'put ''YTtoZl07VkNhJDJ5YS53NC8vOGxOVEsxcUcmN1Y8YyMrUWxnR1dAblRaa21eYlMhc3pkWyJmKH55T189WTYxJmkmPFZbOXVHRmtdP1laOkxUZFtWb1JLWnZXS3BVfjIuIXVAPXVQZHw7Y1twM2lyRiRga3dUNVkwV1JreUtnTktnTDd1fUY7W3xAXVBTRyR+Ry5SXktSP0hYbWxONj5wOnY8Jkp4''@;'; put 'put ''N1BdVyM8Wl5lTHQ6K0UoT3M5e0cmMn1aYFU0MXBZWSRsZDFoJEt0JXhZMyUvWjYpT20kUFtWTUMvRWpdUWppLGwjLGs1JjJHNixkZUxnTXpSZCE8LkRudyZaPTNdQzZ2L2F1ejdFMVtfcTVHeyZGLlVJPSlIeWQ9K11hd21zOCU2O0JJSlMjKjlkcjssIyUvR0J4QzlrKEBiIWcvQ1Z9ZXA0SUJy''@;'; put 'put ''RTI6WjQ5UypvcjJWMW9Ed31Ad3heLG4qP252Jih8MWJjQnEyPltDOUlpTmQrR1lbbWoiMGhiXkVRW1IlTUVBI25vRiR1dU9dPEdHUFRNKnJFLG9kNlA0YzN7RnZoWj8uQFQ8T3IhNzphdl0jXiExVT4lbmtRVHw6QGt1fi4wP2hEeH5fan5VI3h5SEBUWnMlI3VTWDtrNnpUVkk+cn1jZ1c6Vnh8''@;'; put 'put ''WjMqVEdwMlVXSDUzP340SyowUGdqQlZiMEIud04wKGxbd2tLZztuUl9YPz01MCQiaz5xNU1RI0NXO0I3bWI3YDI7OnlBKiVXZ2ZeejdiWjd6fDVLbWpAV3x5NSNkVE91SUlwNUdsZU5DRDEwJnAvan0/RUJhKlZJLDZEXSs+UDhfUEkoY2c5T31PR2ttKCN9KFVeKDNJSFokc3AlVCZKWkA+YFhf''@;'; put 'put ''JmtiXyIkTStneGZUJnskLisvW1tROEpsb0VAVUgjc3NpP3dFJSt5c01La0JRfmlXSj5pWHgpaDFJK2ohMGFIOkkqcVlvK1AyLkVkOjZobzA3az8jKWxObFpXLDUzfmklLnZzW2UyckYlXWZsRVtZOChePj1UN2lOQHE0NWdFSj1NWzB3LkN5W3F4QWklPG1gXnpGfFc0VVhDKCRtVCNeSmJQWjAy''@;'; put 'put ''JWpFMHZyX25tZz1VeyopPENIVDRoU15SUF5Gdmt5KnopWDRWMnZnbTBwSUM5QyNnWihSI3t2WDxEUWpPcEVJZGYzbDAsYnF1Tig6RzhtI2JTfGFINCx2bUovZ2BzPGxMQGR6KlBsdypedUAlOGxxcl0kLi9kaUB8dSFePUpAJnZRZyJCO0leaXB9eT97N05sRTt0XlI1d0VqcWhsNkk+NE4kREF0''@;'; put 'put ''I0I+NmB8KUFtKmwvQDF3K2hgaCQrUn01XmBsSTIwOlphTWVzOW8lbWJuIlt5ei5GWTFFL1hraSQ8fTIreU17MCtBM0d6eXM6eXNQaTpuRFVWclBkNGM9fWFxYkguVzVMfWBgaUBSIzo7Z3Y8Mnh0ZE9mLltgLFpqIlJFRWdabTI1TXBjOzQzKH4wNnpgTHldTjhnNyhJPnQhLHZzU3smWyZnO19N''@;'; put 'put ''NEFhRlVULHFCfEtQKkt7blRRbkx1RkxLIzx8MkVVeTc7cUlDfTNRVythTCprNWNpQnB2O2k8e0RpOEs9SG80c0lGMGQlfDNId2hsdzdMJmpWWyh8bj1kMkB3L3ZbTjB4cl1HQWE8cWVNbyhzTTdCeHk7Km9HcS4/MDpSOUlVTS5MZDdnOXlmVFBbKVclJWZiazFOWzJiQ1YwTSYwemBCUiYuPC80''@;'; put 'put ''PTl3dl5QfFozPztKYmNYRnEiLjNFPXgodD5SYSlAbzZodzA+bW8+a1ZlblpeYE8lKn49MDdCTVJtRDpRO3Z3fV04a1VNJTRleiFQeH0sKVBfXS8iVXRDKnBIOFBpVCJfNSx9Ii40I2s6eUk5a0R6P3BmdlRTR2ZlQGcyaFd0PmA5a10iSSEia0xdOjVXRXc4OXpBJHFoc1JGMlkoOEQzeE9LaEJZ''@;'; put 'put ''aExnVUFGV2k1cHE3Zkk0fXpeKFR0eFhLcGp6NEFGdjNYKnJiaF18eXROblkyX345NXNXQlFFV2YsbiNBWjVMPGNZJE5CNjxfeEgyNyg9Z2VgMVB0ZzpYNXlETGtuU35AYm1we05ubDV3XXtxbUgvIz1SKGo1UG55JEtjTUsiIUxaV10mKmAjR1EzT1ZiRlYyOn5uKTJwJlVFLChPd2l2b05Zakgo''@;'; put 'put ''Zl18XjBrXk8mdE1tT2kyez1LbCU+Ol0xYXJFJUBTXmpWQ1M6KiQvRk1AOCpXRGZ2azltIXVoZ1JubVY2WD87cns6YURvWlJHSGMrbDFFV3gxbkRdNUgqbUJDVSN0UmY0dntMR1ZaIzJ0aF9tM1VkV1UyaUcqK1hzPyhuMWYjIXEjSTlacFV1UGxaVUM6SipLL3w1YSVWdTZBfEw5IUwmdXlWRDE3''@;'; put 'put ''PTtmXnpwVj9aeCV3MntkM0g9c1smPSg2VTh0S0xbY1dWZ0FlW1hTKngqfjpLXXNlbjI8YltpJjg9ZyRSc259KTJOaiNGXVZjeXNmbFRuayNnQ0BTT2ZFWCZBWjZHeio5PzxidTVdPEh6W14kI0ckVGYxZ25nO0dSOUR5fSloK3R+TCwmJCxlfj0/TjBTVkZSTW5FNkl6L2M3bkdgJDB4YzlhYD05''@;'; put 'put ''cDRCViIjaihSTmlGNWNXSExHPmdxTEFQMjhZcDJsZEpFN0FnKldFc1gjLH5UWVM4aDVWcSJ6OTIqTCExM3NNeUgqfF1VdXlFNy5bNXNBW0E+ZD9pUHdoUjw5RSspK0tyfnZEc1pyRCNRYixdIzlnJn01bHxiTG0yLGxgNld3TE0rditZKF45cD55fldSdjZBa3RDYkRObDlqWz98aWlqNEBaPj8x''@;'; put 'put ''Vz8yd0haXik8OUlrViMhblAzYVg0M0V2SkZIVXMoYj9rZ1t1SlIwSGg2QytSTmFPZUpKKVYraGJUN3RmaSEufUtNK2slP3d1RDx3YV0sU1FxcF4qemxlJDJfVjIlQjVsVl1TcyFYcX00N1dQdXNxO2w5S0sxRWJnWF05UXYlVUJBSkRPcUEjNDBMfSFvPEg4WmVbYiJDJHo1fnp8O30xTEBvbVpW''@;'; put 'put ''R0B6P05+PXU6OU4sVzMqeD9deEZWXTt+XncpU3BULFQ3K3cvMyFWJkxjez5mTENvcjc5OXk+UkZsP2t7RyhzMTlLcCoqPUtqdjJqNFk5bi49aD04a15lOD42OCVxYGp3VmtlSUJ4YUt9TSRdXWF1WlFEe04lNXpublJYSSF1Vk0mcElROFFwTihfKDNmSSZuNkxLbU1jejJjUEwqfG1Haip6fihK''@;'; put 'put ''T143WjZSIV1QQiUsKklXaFk2NyUvYjd5OTZLR2JEQ255ImtTLjVqVHJTYnVkM2w2SSZdTF1mKSpQaz5HV1pqTV9OMkRWWkNvb00xajxQRUd5JFNeKDZOXUMwM19OQl9iMiouKFA+IzgielNRLD5fKTVsQmJ0bmB8WzJ3JE5VRHpXXXd8PGRjMj1lUCx+OitNcEM3WmIpWmEweTJPcDkmYHldPFpF''@;'; put 'put ''aWhUTzBTPDd7bHdGdXxMeD9PSl9wejx5OUJXOStxQSlRKGgmdGlUWlcpRFdgISFpTUlie2IxYHFIRD5xWjY5OC54ZWA9ayZiNTkvMDovP2lwRy9eOnRiMXtEU1Niay88Q2xIQFgyITtJajpTczZTaGE5ZipHXndAKDkoO1FNLz9IOUsmKiw0TExSY20hLEo1W3J7OnYwO2pxTVE6bVpXJFVodyZM''@;'; put 'put ''IyFPQm42PXIoSkRieDt4Uk09KzZsMkU/Kig/Qi51RmFWdVAlTnlEIjdQfWh1L3RaTVZdY29VKSVzNEwsVWtrQ0NbTW5PdHdvdSg1eURDTCJ7KzVAOW9pe0MwSktwW2hpfl5EQVVRQCpmKGReZCUuJTRDS3thOXcrbkowSjdXWTQvQEhYcCpYKSg6TnBDQ1swWSpgYUp9Mmh4fWVjSnwrJiN9YEEm''@;'; put 'put ''NXQ5VHVSZ3pAWVVmKzNfKyNfUSsqQCVxO2tHIV4+WnQjfHxgPUhFXjNJalgxNj1qWmtDNnVFfShyYC4veU9eLD4lOypXR3RxcldzMG9nent2KEcuTFhNaGAqV0VeUW0/elFxV2MscC4kOGpZMSMhfkVSYihyN31YfV82QnIzKihERXRYdlpbZWxWPyhZbS95aEpPJiJpYFo1ei95OiU0flBQbTUj''@;'; put 'put ''UH5ORGF1OjFbUXFdeyM+K1FpZnIvR2ksVSZEOCk6O3xpXVJOIi5lan57ZXgiOTl7Jl48NjU5WGsveEg/W2MvZ09MLFUvWC4hcGwqfXwvbFpjWXVEWn5vcTMrWz5ZQClTaUk0cDd6K3l8KXtPUEdFJUVOUV9YMjtiUV17R0hbLkNwLjIlKlVJeXI6MWt5fkh7ND1dSWpCdFZzUUw6IXRqZCgxXntZ''@;'; put 'put ''T115JlZLbThlXnVWPS9zMXpaWHMjNkJrNTsrQz93UCFRIUZrVV0zb2s+ejQsbWhsT01YMitGIkNYSykhL3pJTWFRbWNJTnQzUDteUXZQXzM9WGU8KSt3Y1hvJCRYL3ZVMGM7c2h3WjEoemVsYnl+e1RaOG9AK1k7I009MVd7cCk+Wy5AWCtyL0A7IkYoYkArNV46cWc5aTx+bFJPLF9Gd2BzbmVB''@;'; put 'put ''TkZgSDlGbHB1PVNCLkw0JkdMRTpOQjAkcTZgK2gmNEBWcD1bPWRbKC51VDh4SS56PT1sclhKKmRuNWU9aVI6e0NXNTBWPUI4Xyp9PTFmP0J2UlJZZ1J6JntxWTNyNWd3I1BZODU4QCpmIW0vd1RpcWcwRnJePTFGSk90OTxLRD88JVsrUDZGUFJbITw/e0JoJHBDZGA+dyJJMk91PT1qXiJdISIr''@;'; put 'put ''Ki9UN3AsP3A4TkZLcHZweHZdeWc8bHdAaFJTNjJEKTBBUD9CXlhMJEpaTjVKZVI9SztqZT8sOSlKc2JRWHozMko1XXAhe1JfPm9CdkY4L0BPXz45flRqb2hSLnhoOCQwOWEvS001P2QuOzdZa0w/UEZVRG1SfXpiSndWM35ROXR2PzhyQW5NQyk6d3RJImlacHE6LGUzeio5UFluLFNYTFpKRzhK''@;'; put 'put ''dyV2MmhJV1NOQW8zOWUvVy59VXg/LkIoXWElXzBoZUlAPWdbZCQ0WDUmXVFNWlEmZGpkTEtVck9wfF5XP0Ela1l5KlZ5Z1NmUSgwQmgxeWwhbFsyRWZWVC95LG4meDJDYzFmYnkhPGwvQiFESD0vLi86JFEpZ3AuWW1QaGZadlJLX308XkpSQCNBRXk7RyU1bjBgKUwvSWNXTDYuMmhNKXVqVC5K''@;'; put 'put ''TTlGNG1UJC9lZ0N1JXZUc2shQVdWfmE2PVFdS35uMW8xYjBaY24vO3l0ey53aTplQ2EmO0srVXw/MkBVa21+M2cvNEAoTSFNOXd6WEp8LEB2OjtLK01kclR4a2UuTUt1YSRjeyphb1tbR1VkbFNuNkZOfkYvYVEjTiVqTjFPQUBNLj9eaG9QRWZgaXkhdC4le3Vbcmg6KXVreG88TSlQLi9iRlg6''@;'; put 'put ''YUU8Nkp7d1tRJkBiJUtYW0dAUkpqMTc0QmNSKSpbJDdELlJHWFhiI1EvVHxwOiwyWzcoSGEoNSp4SzkkRlRIXzVQRzlASC5qS0A+Tng6TW0jcDJnQyF3Jm1nQ3AialkyOj5ITyM8b2gzSzZtWWJZLjFJS1poQGJLNGRyd09HMWtOQDpaZj5dfCxONjsqXyJmIV8yOn1OLkVvJS5oUEtDKTdmdSRX''@;'; put 'put ''OEwrdFRQVCNvM2hdW2YjdU5kJDhWQkAldVA/aCNHN1k0d2lINmoxZSxzX1lLLjF5X0FodXNmOkQuLGh2cH09Yi5lQUY5R19tanpxKkNJPm1dMDhedHU+b35lNVNBUjRnOyNoTEN2SUBRaSxpUkZCKTlVWGxPMzpFODZ1ST9ELjZAJH5LPkN4RF1TKUZ9SloxT1FEWmMmZ1RGPHRfcHg/QnNFNi4z''@;'; put 'put ''als7MlVVSmkuTHo9UT9EV1BTZjZdJF5KJVNARD9rSD4jbmBqd0Y3VlVHWnYhVmM1KHRdaWpxNWJYNVJvTUk3QF8wPEsqQGx4OVlZLF9IP1gsODRSMURvenxTM0d4bEsuUkZQdEV9NHh+OS8qVEkuUFZ4XSk6K2FkOWVOXmIlVGBtVGZSaStHKUJNVVMyZVRXfDU1O05wN1pYWkJPJTg8e0RpO1Zf''@;'; put 'put ''U2JhLzE9JkpMQFtEQSE8VlBpOlt8RUZLT2I3Tl4mSWE4NyNqciwqJCs5aGc/UiNCYHtJZjVZLHUvRjhKTENsSCp6YStgO09pa0BeUXpdSEZjfk0xN21NOj9IUi82eCspc0xvNHdNKnk2aUBMfElITWhSWDVBfkExNSwoITVxJWBMZW8hX0VqKm97YG5lLHN7fn50VHEzbGQ2M14hTWVqNEhPJH17''@;'; put 'put ''ImE/X3tCUnwoOlIkWnNXcGg7UiR5UV5BZmBVU19BKX50WiRsS04sfUQ4fShueilTYj55V0hDM3ZBMVVXOSIyNGUhR1ErOT5DZXdwSlAwMyRXJTs0P1Nvbko8fkxzVlVqNUEmQV55SEVSQjU1KGYuMXpGXWtHZiYsdHM6Lk5nJDRQRiU8RCt2QkVLWlNTK091W1VhcFZBPC9uVSFBSHphOkRSOnxv''@;'; put 'put ''dEp7ai93QWcsdnFJc0QoTm0vbUljKmZPPXR5TF4mazZwIlFfQSJWckIzdnNiSCEuNCoxIlZqPl0oWD1aZjdHO0pYRUo5QjZ1dUxrSm1DIXJ0dVNtM2NneW5ebVJGKixILFhIbmU0XUEvcDhMMFdfLy5dYjc8cENrUXdBSkt1ZElTajUraTc2JWFpSkByMW1QJWhyP1FMIXZ5WVI4OkghbiFpLEAj''@;'; put 'put ''YD5fTFZ+Tlt2O1VqT3R2QjFdZGcuVDxINHdyR2hCSV05IXFjaSM5ZCRiOGQ4X2AlUUNvPjpRSGppYnZtKlZnfWttWTs0M05RMD1MKHhtVkBILFU1VGNwTjhuaCJ2Q1c5TndhK2A+WEFHQWdEQnZwZTgiZFJWQW1naj9SUWtwYUY9dFpudmxEVVlPJl9NbW49VWVZKjZKflA2Ii5UUkQhU0ljVT11''@;'; put 'put ''enZJVmcpZWRuSn45flpWTitlTW41XiNDd2B7TjdCe3hNe0VSKzA1ZDlrKWtDKUNyWzI4flE2ZkMpeTtXTUNgRDxAMTcmYFJrKHlwNV9tdWRsYFs2TypOPHV0PG8wOHhLZG0kPzNqfDdrISElWD8zdEh4YnF5eTojLnA4MTwjVVZ7TFNyJk9nTlJIZ2xpbz8pUWNbKmZtL1ZpTCFne1R2bWBaZkBB''@;'; put 'put ''M11pUGolZjc4MmNdYU89cS5ZcithLHhLfjQ8QzUpKEwjSTdoZi5EMkdDISQ/Y18pKENWSVcpQTxjTlMsO0A6ZUpOZ3B5VyRtZ1tHWV1qJWt1NyJHITMjTkhpU1IiZ0BsaF9QYyNGd1E0eTM9anlRYiNkeHMzVSMuZ00mWnRtPSJ1US5NQXVefj99YyZVaDk4SEI2eWZnWXlPSi8seEtieG1SPkVP''@;'; put 'put ''Tj1AZzJSLDZpOFEyY3Ricz0zYkN8P2N+MXYsTlFCSiFdSy9bRlJLU2BWZlRTMn5ddGkmRHpsX25kPTY8dWFDNzhnLzkjOC5bUVQ+MVEmKTpXbHNvOmdSL3plSipscEs7MDRKZmFZOHR4M1FVdCYzK2lvV0VOWnUyfCFRajBXdHcvNE1uLjAwSyMkSWZDMl5yYVpWeCshRlddUlIlXXdAVT9qRSg0''@;'; put 'put ''JDJWdiZjd3MkRWI8MUw3YTUiZz4rPXQ3VUMvLz4mUmQ1SGFgSUQiLjJMU1VUaH00ZGdkSzdnSmlVNFhSQFB5dT0hV1h5VDUzU0ZiLzorWWpQYyx4P1hEVTQkYzU7V2Zjdn54VCwvfFMhTSQhQCFoeXloPT9wU3NOKmMlTlF7XnRETyxPb3BURVIvVjpKencqXWVSRCw7fj80P282RHZSK3VYKCYo''@;'; put 'put ''Z15+T2hLcixOI28xdmwzSUloaVB0JkhGTFdaW2B4OEhNbV98TlEhOERDbE5GM0ArZ3RSMFUmXStbNT5aUSxRNHNWfUI2cVplOC43ZEM7VkxifTx4VGNKcTdCUnU2cSI5SGxtZn5TXygjdS5GJWU9ISo1Q1BZWF46dH5MJjFpIWdkJUA7Vkl6NFtmb15UOUleO1h5dT5zIl4hXmJbQlR8WVAyWSZK''@;'; put 'put ''UDB4WD9VTmRoajRRU0E9d3wyIUlIUzVVd2w7TXdUKUkkQGkrYEpdOjxgQ0ZJWD0xQ3lzaFomdD55cEAyZDBdfGM6eGVnVGR7Qy8+Pnx+MVdOL3crb15UbkwvfDEhP0B5Yno/ZTEkfG4vczl8S1JKIkJ1WyEjUF9McDRJaDtATDUwJF9lNkhCSWU0UVZ1WFMqZkVuLEVaNlUhWSZbNTRjWG5JUm9N''@;'; put 'put ''WE0zOFJSK0pOdW9dK3FCeTFdWHI2Zlkoeys3MSJFTmZIPDR7IXJsMCJgQDNUeTRMVUN7Qy58JFRAaFgwb0FxJVAqdVhgXVVyQkluLjojRXRyUiQ1UzxYan5WZik4MyNsZ0VJa0xzNyV7eT9udFB0Y3kufjt+S0M3PlIoJDFEclhTY01AOTVEIy8kLmV5YyUvS1htbCNwIm89a2U8Uil3NWpRRSEv''@;'; put 'put ''TF9LXjkqdClue3glTEtVcVgsNHBCWyN8Z1hnOEVsIyQvIlViflp+Y05pbj12Mzd7aFZPPFl8MDtEX3M4TDl3MCk0ZThKX2lCM31COikmYmFiPjVsQmVpfEUkUytEPCk5I2gydFt5Z1FHWHB3Njckeiw4R2ooKiFPXWVjSUV5YWJSWVpKQHdYQDQ+TXhfSl1uSmpVMSxFQHI+RUpUKiNSPWJuUm0j''@;'; put 'put ''TlRSZ0tRalEoPylrVUl3ZXxEYTYvJm09VE9aYDtSVFhYM2c0a3ExaXF8SVRjPU8qeko9Kz8iRFRvXWB8JHRweCt7enYzSXR6Qj4hMiJiQ0FpcWZ9dEMyOGkoIUYlJlV1c29tezklWXllN1NOaFtZMkxkRFh4aFcmRyREYW5LZmdoLERIZHBJNmNMXXhEQlM6MjA4e2xiYlQobUZzJTk4U1YlQDt5''@;'; put 'put ''d0lRd0d1KytlRFppQEtqKVZoaHB9fG85fiNZLG5MdnM4UFJlNEZOSUQ8UGEkNml7d0B3QXA0TD5GUVRWXX1wKjFMYmpONUYibXc2Kkt5eSRyO0Q1TyNmbkMuPUV8dT0uZndhQ1ghUjp7VnJBbVk+YGU+dnZGM0Q2NkVFQmw2bys0UVpgU0VLI3Jad3Rdbj1dbV99VEJMRXB6ajckPUxqfkZpQU9n''@;'; put 'put ''KF1Ye01MX0NIX0JJaGZpaXkzdCMqRSYoIXQ0Xj4+Uj5OUm9ieFRPMVdHK1s4eCozVHxie1ZLeVk2ZCVmRDleZ1R2ZFtiQXJgO11hTVoqQTIicXc8S0B3MFsreWx9L3R7b1dPdCw5Sn00VGRqPC8pTGVoTmt7VWtZIyl9OyFpX0RQQWo8bUpMX2c4WU5UcGt1ZTpaREQ5OzhXSVAvanlfY2JVbXBg''@;'; put 'put ''Pm0pV04kbWBfZkZALDxTQkNmXjhrfnhZIW1HKDtkaSt2UmNgZmsuS3w6bSVib2VhUiljcEsrPHVMLEFzMjtiY2p3UUY9NTBTK2YuJjRpcj56Sj5wUiVvNig1U2R8QHVMNEFJbkNRKEg8MGYlSi4/JUovSU5FYmQ7ekZJZU5kOW8pbzlRfEdmTCVsKyx3e0kyPlYraGFSbDJyMWBNNHEkYnFzYz5f''@;'; put 'put ''aEMwMEV7JDJOdyRVa3ZXXW40SXFaJFVDUG17bEZpOm02KSo/KF5lZ2RKQnZ3dXNkbjdjQ0oiKXBjaG44dUwjdVIuez4xX1VNb1NfR3QrfXlNfF98dzNSSFR0KDtBRD55ZT9JYGlQVHRQYWU1d1FwYktYYFh0VmhsYDY8d1dYNVg9TSYlRD0sWnApX3RvNEtwIn0oIWR7aWNZXmx7KEZDITgyRVlh''@;'; put 'put ''N11EJDlnSS9ATGQ0fTQmZ2dhLDVWZEwwUHhGeCQvN298V2dlMGpVSnNaJHouaTlIay91PVJ0dT5uW2tnZCQoVjBTcVV3bykwdSo7fXNpeUp5KFckYz0sSyVQNk0sN21KJXxfW1h3Wltne3M9MFdFM1FZRVQ0JHh5MV9FcHU0NVhefCorYlA9IU1xOyFrMXwjQ2xEOjRPTnQ2c1kuXSZZQndbNjEj''@;'; put 'put ''dT5Tb0tBO1IldENFVnZTI0Y9LjpUOHVsYyV9c318U3dFT0RfWiosaHVXfj9NOzg3NSxaRCs8WDNAMX1WWXxiTGtOJSxHMTF9bH5NXjV3bThbInJIJWByfkptTmtBdSwqKFRNXkkpcWVDbncrQ1tIKGNFJlZyclgqeVhdVjZJUXo+TCQrYEYqM3lMOyw+JiE+eD5HSmU0fEtzOD9ZKTFzVGoqNVc8''@;'; put 'put ''WWN2dCh6fDUiWFhFNlV1Vmw1RlBvXXMoLkhZfkxtaTxfSmU/KWsoOEZTalFoZzpSbWt7Yn1hPkZvOXA5NGxmJDFsPHZJOUdrImdWPDpuUT11eCxEOCwhcUFWajYjby82LEtVNjIqb0FDVEE1LEZhfEMkZkhyY2VscmcwZllHeiU6RmdvY2ErfSZdazRbIzlHV2RsZV8jWDNgbzdfclB0aVtLOGVg''@;'; put 'put ''WjxJK188SHFaOzsxPlV8Xz5nRDNJP1JLQU9BZX4vPHttSzVFUXJYeTA4NlBbN3dZPy51azUlMTI7RDRSZSh6PTU4cj96dXhdYHV1cihsZmJZTjR8UUUhU0Z8Nl5Oa0c7VWhWT2syLjwvT1t+PVRVdX1sKl0sPSk0Y0d6OHk6TVs0MSIxMnNMfkFsOnw5RWY0Vz14bVVYaGR3W3xpaGNGSnxIcFgz''@;'; put 'put ''N3wwPFFYbjxEdXFHfk1JMj9LZ0JaNjZYPTAhUlYvMjtKajxBKV9qdjNaUyUsajBpR2cxNXpHKms2TTxhKjAsIyFITl4pUE9+OTxWYzY9WCN1SlVVXXxaV3tyInU9VSxhNEN4Rn1aY0t5L2RAOylHbnpDWnBrR019bkwqJjVHJixqWzdKc1BiQEZsWG9saG1bdDthdklbLE4mWmYjQ0hSaXRFSEhE''@;'; put 'put ''OT1MRVkrR0BRJSNDaTo1OSRMeHQ0IzZxMXhCRTthLl1obyRePyV1RGFgcWl6RCh3eiEwQ1c+SkRdPlhUOlddKm1YbVZSL3FDTlBYTDpdWlZGKUgqKEtwOStSQjFaOlt4PDx7aV94TlsyXVtHUyRgVW5jalQ6TXVhckslYTRkJjB7bmFZVF1VdDhHcX0sIl9rcklkaF1mPVN9WiJYIjh2WHwyckNf''@;'; put 'put ''USIyNlNEKV0odUMiWVkqVnc5L2AkKjslejZ9dGx9M0VsSSFATUIkenN+JDB8cnJNLFdKeGJtallWbWpCV2phamYmaXd3PklMaVBLPzpESyFmQmpIQVE3WiNnIWpnWkYsOHhhMz1kJnZJNjtQT0xVUGF4TVp+ZzY9dVJkcm04SHNLYHBkLmtpY1guZlYycy85IVF5bkJvX09yMWAmZ1R0O3k9P3kl''@;'; put 'put ''VXhlPUQ8Vll6bVRacHxNcll5WDpSaEFzUzMmfXA3WjI1Kjp5Q2NYOE1XJFdEdSNjYkMiKWFVW25mNjMsWClfI15SfVosOCZaZ0dwLElkZzsrJCRAIlIoalk6UDp3ZHE4Wm5ScGl2OWMqYjI3QVVJLmdabjpFMEtOOD0/NFZGQCg0cjI7RkJ5cElPcWg/e1cwa0xXOXh7dHxPPU1gLExVMmxpQFRO''@;'; put 'put ''bltOanlAZTQ1K2BGJGh3I00+RDIoT1BFMyI6Vzp5N19eVj1pIjZWKz1KRXl3L0MiJEUzJSlrYCFUTSZDbDx8ZGg6cyRrPz50flJxcSNdSj9KcCFGMntIRiNQWDY2T1tiaG03K2VJJGc/JnE/cEk0ZkNwM1gvcUNWaUpJWXtvaSRHQGA0Jn1uOERUbDV+Lm4yeXsleDgue2c+W3UiajNxa35RPEZX''@;'; put 'put ''e250PWcxKG1bdEU3Skg5PGQ0PlEpSTV4MmVNblB+RncqSiIsXUdbdmlSLzdaUF0qRGN1TzxGPkgrQjRXeSF7TCIyQyY2YSwkelBjYnd7dnxARyI3LloldyZxYjVDWSUmLz1OfXYuS28hbXtfOHdiVFFTd0h8dDA4YzY2Zytka29dZmAjMThoWkZdTSQ9ZXdqSnkyKz9ndixfNUVFL29WTVtueVFS''@;'; put 'put ''fXk6aDFIbDpgPnwxPk1bNyxxUnxiXUVoMHJ0I0NbUW5zKD9QfU41RXxtY08qeEpjWVR2KHBdeX4uZ0EvLjJpZiliK0FnSF5jTCRUanMiJHR1UEZxbn17fUlzV1NKPFYzcyQjKENMe2VWXWVzVyZFdX5gUDsjU18jTHRNImw5UXlJZkt8Sl16UEhXNHdgQ10xQEpjWnlUYGZheUl5WEU2TkRnK2Re''@;'; put 'put ''Kk97bkJsQGpxfVphTnJ6QWpmU3VQL11nNld1byhiUXduOUBPNiRrV3NMSXVHckxFMiVFTD5oRXg1PF5kdyZsWDQ3KExeWTVKVlo+IUlWVFlJKEZRJEAmSWVRNEJqY1NQIyZSSjpsazJgfColWklpPT9GSlE+Z2woaEVMMmE1dEF1U29yZnYsbjYpcF8rVGo0RjM2LC5OPGxdUHpXZSg7KzZWVyVY''@;'; put 'put ''KkUoKUc0RGFNWjdYNnREZH1AP15hRHVAPXcjaTwvLG1jQDcxQ0NIdUtoWSp3OzVpKCsrOVJPbE09RnNJI1tiO2RlRzMoTF1nPmRHIitvQEgpTUp8PEJuMDc8W1ZzP09TZllqQ1d0YGl0PmVhMS9KT3NpdTEvPipJPjZGNTQkY10sYjN4IiYuelJoWVcxTj5mQ2Fka1BFaDBmPm5zK007MSUkfElP''@;'; put 'put ''QzpUSDhjVFE7T3JMNTE6MGooOzwlaU0oQF9kQDBSejp2QEdSfGAsPD9yZ2J6b0JCJUxZZyJPc2BEcnVkPjJmaj5HR0JDVW5WZyJrIWB3P0FRTzIrTHk7MXIvX245Qlg0KkkqQmJmIV8iRVU8XzFsdnUrPCZGaEk1RVtKRjY2Z2J4RlhsXyZNOCo4TCF+OyYvKWxBMXUrPk04NkBGIyN+Rnt4R3c+''@;'; put 'put ''KCxpSGwvaWUyQio6PWNsTi9JPlpqT29QNjgqJDZ0fjxuIjMsSUdSJFBmVVlqUXdfK0F5MX42IlJAN25eTndDJSNNOVEvfHckW21NTy9PYjYwc0dqL1MoYVRfOjN0RnEpVmdHfTV2clRdS0xrPHxLLnk9PmhJfXBNY0IyIzUlYCo7V018clI+d3tgYkxPOlRxRGZwL2FDNlhpUmlMPDs7V2R5Xz5Q''@;'; put 'put ''RjN+R1dSOFcpfS9Gfm1ZKE9QKTBNMz57MDd+eEhdY1pNKlp4VW51UWRlYEc6dlJ8ezYjUU5hXkIqWnIxb3I6O0YoMjgqVHouJmg5cyI6dHFvR1pjN2RqcnRsW3RHbTkrVHI1dUpDJERTOU0+JjEwRHlzQWczeWl+Z1RTSzFdeXBlLmg7JFVndCZpYEw6TU1tc0AlfUU/bWlTWTE4Wio9MDRvamhh''@;'; put 'put ''U1JpZDw+ellDN2VEWEo2KThda2wwQWlhRDxScmh7T30/ciVtQlgpS1NDPWJDfX4lNGdRdVlfXz40YGg6Q0NpOz91fWkiJkw3KjJwY01tWTcmemBdZVdvKUtHU2xtZSs5MihdTHlHVU55NCo1Y0U3TH59SllhJjl4MWtMUERAI1E9azhdL0N+QHlJJCtAVnxebSxxO3RfKnI2LmN7PWkhbWVZLDJg''@;'; put 'put ''U3YpUChlLHA8VHkqRSUoQ2cuRloxZXtwdUB1Rkk4W21kbmF6TU9mKz89YkopcmRHMXY3T2NVZiZJZiM+QldXLytVfGchJTJkRT9EQHZIYWk2JXcyY3hEak4yc2tqUyolKSh5KEVGV09gaD8/bSNPdilbdFJDQ34uX1I3VyZ8VnRUV054ZE5QMjkqNWZjOW5DO1JsKz1KWmdGNEhQTHsoN0Y6LlE2''@;'; put 'put ''Ri99JEdxUlEpMkdFRXFHQHF2bj4xQnNQKTImJkReY0wqRlRGO1RCcV96REU6O31XXVciNiJ+MCE0S2k0anlAN318elt4KVldIXs6TGlXRXJfQTwmU1ViWUA+SmFFe0EpTjdQRHZFOktXTHkzKj5QdnwmYXYsb01aWD9GKzMkMD9GV3pJPFJQUC9acFBDYDwsYl9bZS9SOE91Z0pdV2t9TU92cC4r''@;'; put 'put ''RG9CWTk2SG46Q3wsJElBfE9gbSlHezhSNy8hQEFHYUl1OFZKTUJATUNoZzk8aFc6JU1ELn44fFlbZUIhZDlOe3BVdCl9TlRkNzI9UXNASlpSV3JLJlp0eilFalFiX1FIe3dmITYwNjt3RS8+cCFSKmN6OV5oRT5saHx3aD4+XnkwZHo0YGswemoqQU5vZjo6OT9KeEpYTE0uJEg1cVNIImIkYGxr''@;'; put 'put ''USwmciZlOUBycGBMRDw2MihrfHQsYjd+XThTeGdga2ZZMzNyPmw2UGElSFpVQVlfXnUrY0l7fDl5UHgifC9nM19BRDledWoyKms5NWVbOF5tfmk7QU03SFhPYUtsUjF8YVZzLzorOHhtYSMhKkRLRlVHQHo2cjRaOGF9MUZFa25JMWtBUzJiN11tKUQlSk1faV49VUZxOHVWOy9tZHx5cHBeVXdG''@;'; put 'put ''KG0kNSExYSksTl5ucnVPR2c4K1hDRix4bGZFS0lyZTRLR1lpQz54Qiw0N3Y3YlJyYytTTUZ1XjhlT1RdZnJgKllgTiVBZkt2c2YpV29EUShuLjV5OUhaa04wbUlnQ0A9cF5TY3h4QSR9UjxqWiZCd3c7XnJdVnEqbHtSYTkob34+SVUld21oNSxgcXNLTDVsPDs1YHZbVHh2OFhMfUNvdy5zWlA6''@;'; put 'put ''Tm9QNT1PRi9ZM1ZJdSV6bnddXjEmSFttWlFHd244N3I2OSsyTlQ7emp2bEU6Jjs/ejxZW0M3eVg1eXAyWEV4JDp0UnlpW01MdFBEXzU/NTg3X1E1dz0zRFh5e1UxKDAke1hYMmguUFV+Kn4/IyxHRmo9NUshakxyOi4+Ln1QK35WOmg4emo8XnpAMkNpI219RFE6QnQ6LkVNYCYrJWA4ZTJEd2p9''@;'; put 'put ''PkVFYWxHXiNxUmlXMVlmMGVVOV5YSHl1e1JeKjRNd1U1aiMse18mfFRATWJmMn5uUXsuQG9BN15FTCZKOXM2NnQsWk8wIVFPMCY4aDlEdS8+O0BHX0wufnY5NztiSzB1V3Y7S2YjIj16WSEvYzZ7cF8sZl1NfX5XPjNCYkA6P2p7czx5WVB7fjBJcSZaQXxPXWFde1VxQmMpMkhXVGc/VkwpeUlY''@;'; put 'put ''PkNNJHNKWmkuYGxTOG9jVzQ4Xm0rZVQjQlZIL343TkVVJk1IWnQxdSY0RntpY2BlMnI7YiUoS00zL3BIW0cpWHBleWY7OClmW0I5ZUluSGJOI154fGxlKmA7NENUZm1TYDksPUtYbFpnNlF5XT02WUAxWm5GRHYyVVlObSY5cD40Kiw9cVo6KmB6KGgsMiEiTTxTOjspTSRzOzNTI19kKGJIYWRz''@;'; put 'put ''Qj8rLzFWRFg6Q19ZbiwxeUF1VXdqKD0/TUpzQnE9WnpqRDlpcWhGI11WSEJDWnJWJlRfM3N0OU10ITFZMVttI0dYQXh2VEhdKVpAciJJI207RFVRTnFDbyswXyEzPWNjbztWLltVOVNWZ1l2bU1obEZkTWR5dilESVZIbmIhODx+cm9jJnU0UW48QyQwNWxAPFo3LiJWUzZDLjcyLFleK3lEdXR1''@;'; put 'put ''YT10T2F4Pn1URGBHWkIwVE4jUDV8ZT9wKjEkcjRRcmVYfikjSm82UDE6JTYpRSZpUUA+RVQ7S2YkIkl5dD5iaHRYUmAyMF4oWHFjWylEd10mNXU4ei8kbT40O1IpYCVebHZYVFAlPl9ePit2Wj0mX2BPKE9BcFlecz8+cCNPK0pkSkY5ITs2WTJbeE08IX5vUy45aXlhRX59PltoU0puRUM1YWVp''@;'; put 'put ''T0lEb1JIPWt5NkZGSnx8aEBVekA/Y0xXVXpTNSZmVTVQZW5YMVsoVkklNG1wYiZaMCFPWTNbTihFSD59QG9iInBQe3h8NkJTVkY9Uj83MmVyMVdfOCE6Lz10NG9VeVlpZXc+MiVXYVtsZmlFTmE/M1EhN1Z9Sjd7LDtJITZabWN3QGJofUdwPjg5Ji8rZTBYTyYkPzdNP0c8bl9lOUVZN1krKyM9''@;'; put 'put ''Ty5sS35TJmNgRkttVjJwUzklWSFnM3tDcWVCcTYuQDojKG8+TkNPKnNwYjs7LmNhJiJwSylTe3Q/Kn5qS3AjW2t4bnx8PSheOChXZ24pX2lwVj9DUVtzNmt4YUU5TEBUeHRfI2xKOj0rQlRZfnIhbGBnKn14cUpZPXRbczJMQn4hUTd7Q3QlWm9MbTkhSDBsSyFLcUxiK29jMlM/SFB5UER6UjdP''@;'; put 'put ''SVJRQTVOPmp2SHBSaS43bjJoRS5QRHNiTkBdfUxZU01zfEIyMT04fWFGfHhHfHk3bXZ6V21Od21jLChddT5BSTNQfmBxSlR8bGNtbl9MUVAlaXd3OXYpayJlakthS002KklbY0hGdTR4RDtoJnAhbV5kY0RmaEZsL0M1N1h8Q3RQdlZMLzM8QnEjT0c3P0xweTZ2cSRVIXghXT57ZjZsNExfJEgh''@;'; put 'put ''SEg1QCFOQVNnRV5sO1hZKGFtJVBhWnI1YFdNfW9tKUczbmp8d355WzxfUTBbbTtbTWtrKSlZZGZwJForVW94PEhvLHltdSN8KV9CKEx4VUM1ImR6e0BSeXZKUGNxbiR9VWEpNXEuV2p9UmhvZEZQQTkzXUM/LzQ7NHYrVkhDQHNfYD1mfFdZQEc8bHV0OTpeYz9zc1RxMkBMKlNFP11nYTBHaD53''@;'; put 'put ''fSVjNk4/ckJGciFWSDdvLnMmMjtGKCM5byQmbmssRmRySGczeS49VWRzMWhwQFhjJTQ0LndDZjpkX01jclZbaTd7LyU7R25NflhdIUpUWl45LkR7I3IrRUJ5PWZhRVVZUEB7NHN0bFBFSWdwKDRMbyp9THUpIjNtdWN7NHxQUlN2a1JfVHA7X29TdltySThkZzpjS2lkT0x8cDpReFk1ZFhFMDs3''@;'; put 'put ''T2koJixbT2s4bXR1IUpIailpSEJecmY8Tz5FV3gsIzRDO2dAeShlUWIvJUpCZT9IWk5BJE5sOlpkOilNa1EwL3hRc2YoYzhQRyVlfixlZEZGSTkxTS9tUUFNX0U4QXdrXzNHcHAyYlZNIXp0TF46XkpBbn19dmlRRWhwRzcqcHlLO21UbF0lVDwpMjd0dSxmWjE/fSxxI3MhXU1Ybl5QQm0oY11a''@;'; put 'put ''ZCF4I2YzIWs4O2Q7NGopcVg3TVFZUGU/O3RvXiVqdyk2dWdTY0RsfTRfW0hGdyIxQmhxeUx5VXdSKXQhNF5xViZJTyUqL0tCS31mXl8vU1Y+OExgamZvTVtxe1QqNGVaZ0JGeCZ5fE86UW1dXiFNQHE2PiE9fSNlIXMiKCF2Tyt2QE9lcyksakdMeX1GeEEiIW97Qkh3ZVpDN0d8UlIuJV10bTJX''@;'; put 'put ''blt5eUhhfVF3ayFKUnA/TF86T1BEKW88Pmp4b3RheiZbQkV5OWdJb3RJcXZOUWVJWXI3WGFlK1FDMDE5UlRrPj4uNzRdcXtZNil0Km5VJCM8Im8+SWV3dmJoLFshck5FPT0qOWg5cnY1NVk6PmYqJENjMVF3eGI5SzdpcVRwOXJUXU05cDdHZmU1InNrYlpBOHA4K3lzL3JFJCkhV1s3e146SmUp''@;'; put 'put ''I2lYR2E2XTh1Tig3YTJjIm9qclYvSWQkMU1he15KPWZ6TnpXW0REQlc6IUwrbCZpTSROTjFHTEF5RHhwLnV2Y11EfERnUTx2dXtxYjdweEdjSWQvODQyakhqPD95NXFFem89IXBLO2JwfVIxL0BeMCJTV0JhL2VicShsW3dxVj06TWY+RkIwZWNgUiRUVCExemE+bzp9ZH4zaiNQWStAWz9SIWpp''@;'; put 'put ''NkgwT3RlNm9lVnh5T2hvcGw/WEt0VTIiTilXKSw0OFpJayhRZ1pDL2MwcTdaVlBwSi98JkpXTk47YVd8azUofntUT2g3U2ZGRlJOOVsxQWx0YzxCaFsyRHwiNCwmakJWYnI9PWg2ZGxAfjRfWk45KDgmKipUNmRDc1ZFYzRsNyheRlVtJiU5OnhASUZbVHJvP3NIZT5UVSRka1ZeQ1ojWWhMbX5k''@;'; put 'put ''N0AkYyZJIT5NJS9UUUt3bnZJcXRxMzlfbzJOMGBEbl09eVNqNX12VEF6YHc1dmE7QV8vQ299JUtwRGtsSCF5cjU2KkwyN3kuSW5iPEheU3pfYyQuUi5wfkhoXXZWdlQ2WGBPbHZGV3M7QyxPP3YpJWM1d2VHdzJpZFMkRn5PNFYia0lFRT9WWWRZMltWWVs7MmxAN0tQdkkqPEJqb2p+XXpZOEki''@;'; put 'put ''alVacE9GdnElNjIqPWpUMHIoT2tCJF09JEtGNz16QEIwe087c1ZsPH1dPXw8YUY7V2tXSFpJfVtHd1p5TjhFaihiZENuYEw8d30+TnJAcSFdPDgrOTxuaW95ZX0/dCFnZC5sOVRdZ1dGIXghY0RhMExrYjQ/KSlIfndsKyxGOkUmTHR3Qjk3cGxbNmYwdSxkKUtZc0d7NV5HPFBvPk0rc2dtei5g''@;'; put 'put ''Z2dST1BSZkc9TFYjKXhQfFhNXz4iPzZ6RCtYXTN0anxzOnd2TEIrKzwlLiROa1kjP11IJV05a3VVKiJWK2hNWCV+c1RDPEl1QWloPDtYMW4xY19gQ0dDRSh5OV0pbXEyKnFJWltVWm5XUmhdVzAzfnBJUzU6SC5KfiNPTSk0fiEkS3xmbER5dj0jQzI5O1BUYlM/TkRlb05hWEM2InZGazRsbEw6''@;'; put 'put ''fl94VDU6MlN9NF5PKkA5L095Zj5nUERIfEZhYyolfkNbU1ZIMypeKXV+M294KFhETX1hKnZgOVMwNzZPeTBzRH0xRFZwb31MKSpBeXtbOlkxSWxFQUBsL1ZKVFZZW2VKK2loWm0oc107NH4sR2J2fHUiXmovbUZXbCNDOUZ0N3B4azdRPmhrTlBZSFFDKzlXUnIuVUU1PHw4bHNBQ002QCReZjYr''@;'; put 'put ''dnB7Ynl1fixHQltfWWkqL0dFMiF3bz15elg2SGJRX3NjRWNHYG8odX1BMzFecXMibnh9JSZ0QGRpOFc5VGBWUmNXY3FBUnZEVXo8flUxTWpzW2NaaUV+dlBsaytwYFUzNWpKRkBGNzFaK3VqNUx2LGo1KSo4UXpHWTUkJiFORUBAfXE9PnNAZVlvIWUuZF9TQG1XW2x7cixxc2x7JSVGLl1gWiZB''@;'; put 'put ''XV51fF1aT3wra2dRcENgU10qSEsyZi5kSi5IK2RRUUVibDs1K3I7OWMlO0ZHIWNFZzJZVW4lMm9yajM9Lnw7OzFIMndESmgkVCZkY2NDR212PlhZdnA7MyZ+R2s7LjpmLnxoVSx9LGorX0U2Yz89L10vNTpIRmB0NEUmUTk/Pl0/OldxQmkkQXlaJko5JVldZ3dtW1tGc2x+Xz0lITxzNC5XU1Mz''@;'; put 'put ''eENxX2hTKjY5dXFXTWhSLCIjSkVvSSl1PVVHYTBUQzhnSDZ1cjYiXWAkVGEpW1FyPUVeXn1ROzUidFowYG5iciZ9PzdFOVBIXkNnVylaLzp4KU9RPylrRyg1JkY8ZHY+fkVvLkJyOFc5eyQyTHNZejtZcG4oKXcidTAqZnZdcD1xcjROVXF8cGNoOjk+MzYkQ0lzOH0sd1ZbZEYjdSxNSjpgUmM8''@;'; put 'put ''WkI8WzEoXSopUCg4TkdRWmY7T1kzRU9vX18oOSg6bWNrV2JhaEo0fENsTG1MQkQqYyQ4fD0vY2dMaCJOY2YkNiwoa2s/MCZjO0RnOGErOHU6c3p3ayFnckBkRiZoJX1yTT90OVFxdzdlcXsvYkBiRmxeNy90UWh+QT1iK1VLQDl5Oyt7JipiQXUoJD9ZNzROczY9fU9VVUxne3clKHhYXypoKWE/''@;'; put 'put ''OW41LFlfbklNYVVKM15YLmEqREJnTllMbjRxX2RVc2poQiZBR3ByP15UQkc7KF1AcEs+NH5pJUxuZ0ptc2dzNnZDY24jd0Z5WUQzdiZBbG8uLiY6Pyh+d0UkPXg2VEg0P2xxOTlRWn1dezg/bDdOLm1YXTA7SUlXMHEudTRdMiM2VCUyRjdfM0w5dHZeRHwoeH5sajxRbDt8aVNQV05WPH5GSmI6''@;'; put 'put ''UCkpb2siWUdSLzxoQzNbWF86bXN3TyQsMkAxbU1hOV1KUjtxe1FqNXFkUS8rLC9fWTMzfFYsJmVJcVU1MHlPVmkoNmlWdkQxLyNkYFJHN2d6Z3I4MGJqd2IwKjNUKWNrVChKQnB8ditWbHkkPWg+ZVRNa3AhazpqNUVidDAmMDt0JHxQW0xSJWdQZCxNUlk6PkpOdD1gKmE4dDEzem1IeX1jdnhX''@;'; put 'put ''bEcuPl51JFRIIW0uLGJrLyNDKyl+b2JUSUE2S0hlMX5MUlUhLEM3VFNNTFBGVnp5NX5jfjJoYStNNnxnO3d3JTZpfm44TntQVXclLj5oeSgkQHQvZEJFUm5IKX1ZVmAuckRLa3lAL1FldTMoWH1UKnF+WGVJP2lmK2FESilybWlIfD5DcGE5ZHdvd2VMdFJ4eytZRltuPlFBKWpuM2NKSl5MUW5B''@;'; put 'put ''K3VjfmkiaE5FQV0pX3Q4aH5jS0s2NWdSdCtzP184ZWchXjwrYEZVJWoiLHJvMlBBI0dKYHc9W3QpJiNEdjEmRFdWKmw7MS5LUT9xVTlbWjBmVyRYPUJrYTQ+Nil2QSlEIS89XVBkYyhiNXhTNUMpQkhAZ2J+e19+PCM8dF5VJV5iLzd6JXhlZzBvIiIqdmMueUIoelRHU3UhJjZUeVJvO354VWFm''@;'; put 'put ''PSQvZjlofHVCfitOaDM3fnNdOTZVby9rdEdSQ1VWVHlHJDZFMiYjP2d7KDQxIW8ydkZ0MilbcVI9Rz9Gak89bmVGTDY8azs7NlksJjVySiFqLFk+NFZxb3RrcigpXTQyTW5VLyQ/MCtjZj05RUB8QF9GOEJZe2FnUHcyKHhvaD8qOkxTNnZsPDRnU203fVgsRyhvdFpRfWNXbk9gTFZtKEIjPWI0''@;'; put 'put ''Mmoib19WN3siI21oeHhmckpzZTQwdTdsVXpYdWdoIWdhajg6TXtiPy9CVkMpeD8mNUhGWUR0ZjtMIkpRQ3dDJElKYlNBW3M3N14vKTd1WEdiakZRTl9qIlZXPHcydUFdW2FbPEJfKX4jMzI5MXt5MWsudD9UMSk+a0NhRiYiRCJTV2pMfFdIKWQ9InlRO1NUIThrLHIxWn5VeHFZa0B5P0opTm9f''@;'; put 'put ''SWhQdWNqbnReaG1OSW9lOndfSE5leTI3PTFbSEF1ZGh+ZixwZDZAVkVmfUMjYClyOllfa0xRRylHckYqNSlrcywvaiFHaGRpbEttQVtTaUQpXn43PD53QSM2KjcqJFUyX1NiTHhDRTE7PWM0QHQrLChQSzlDbCZFJjp7O1glfHBodEcrYH5AbDR9eD42ZTp6ZCQxQCZYKTkkLjpsJWZkcjomSCJ3''@;'; put 'put ''QlRPXX5JI1hmQGYzZUFKR005YTpHcFU6e29QNX1kPFV8Pk9bek87cF9OVkV8U1IhRktaTmw+Z3d1RX5+T0olKklaTFRnZmUlU3I/R1BMTzppZEpIY0YufVk4bVZiXUZrRzFGfXtwKyQkJFEyeCJPUm5PYT5jQXIwL1Vkc1d+IVAhY3FLaCprXn4ifmBZaGJQYiRNLlVnJFc3V0JkS0Q5bDhjMWc/''@;'; put 'put ''biZ1YVM4e14uO3lwNyJOVXB1MF8sRkNrUXBrL2RVUiZjMUk7cm8lUC9tNT9aZ2NbV1k/TkorQ0U9bTZFdkdfV3VLNiwqJkE+bThFYURdaDVXJlEwVDBEZGRYfERuVXtUYXI9U3pualAvISJ1MVJZWzlGQXFgSUlaVik4VUNoTlhuRCtKbyw2eCZAUXFfSjg3JX4rTWp4Yl47VFJ6P2lRPChoWjZP''@;'; put 'put ''I0MxPXZMaFowVVJ2TyJ2PFI2aFAjbmYkZypKMk83KS5acVc/ZGFLfld+OGxRVylrWk0/bGkwckdMQCEuZzQwaCZ3cSIqUkZtMEBdTG1pIkdUSDQwY1sqNUtQT2R1aFY5JUImcC8zSDN7eWJpYkpafFRXI1tpOCpHSmBTIXZOPG53XTg4OEBTRG85Zix1VWtDbT09aXptMWpKM1RueDcvL014cGhF''@;'; put 'put ''Y2RHISF4UHBWXWdKSlR1Jlt8aEI8JlEwRHxmbWo6KXdPIWBrQmFOOXc5Sz4reCF9eUVHKF5ORChZQzx8RG19RkheKE1tMmQ/NzBCaksrTEJnT0pHMmshaTdePjRaWWAufHNgNSteP3FKJlY+U1I/TUlidU1EN3dWZ3oyKDpMKER3RVI1JH1va2NASTcjNE9jbmArX3FML1g6V1ZFK3h1NEhId1Re''@;'; put 'put ''L01NL0JtIl5KUlFFdylCdkdKdkFKOClKPHl3d31yc1IqWXEsSXsoVWpEPDRBWEg3dmo/IX5nQVlSVnFgSmlZSSZmR3hjVD1tWygrWlddNFFlUH1SKlcrcSNMXlhXXTJkZ3MydWM4WUE0c0lfMDwsKXlYVyFYMVRIeDFEMjRYPGNMWngkKT1qY24pPUhgdG1MLHF0fixTLzY5LjB0Wm06b0J7MW1Y''@;'; put 'put ''Nj59ckF7OV89MSUzPlFsIzJpWVlEfiRFRHVoMXp2UFlPe3cpS0xQOjFEcypoUVFIWGRpODQvTXV9I3tSJSgkdmttXThsLmIxYDAvb3dtLHE9fXkyMTh8JWU6R3I9dyk8KGVoSipvWXkzNzpdP2dQXjEuczY7QEk1OE48cT9CYmtVOk1wTFdMKTpvRlJfSWhqKTAvWWRVbTVJOGJEbnhKLCI1N1F+''@;'; put 'put ''b0JrfGJwbnlSREE6eW9gcWtVandnO2c0XT9KLkI5RjtlPyZAcSIzXT58WEtocHNVKiYzbGR0XSUuVCsyNjEjPVBEUUhhIVZCfSlQP1J9LnFnb2prS2Y9Pkh6U2NOe2Vwd15ncFlbPV8haCo3N0BhdF0mYCk3P3VBI3IxVTI0ZzNATWdGOmwuYixiNHcmZUBGVSw2U1VdeCE/IU9Gb252YlEkTT54''@;'; put 'put ''MCprVHVRMUNHPmFdZVk+M1d0UiV3PFAzOWx+PSg1LyUrPUQhIyF9WilKX0lxOVAuV0hUUDJkRnoxcS82XWVANXoqNnVKQFpzZTFzSlR8VXFJMzpiX080eyk6LiQsJmZmL0RrQ2NHcTNseWI+Mmx2WDFiZDF5SDpsUWQiOUIsQTw8WCJHeiFke1ROdXdgM3o5Yj9bTSkyNFZtbUx7dFFmU2xzc05T''@;'; put 'put ''RU1NdXJIKDc7eXZgWXxNaXZCdE9xUyhHT21rMk9zdWVBRzFrRVFAenB4JDJ6VTVLQUNgTl0+TCFDWmdnRVpna0kiTWJ3bzx+d0BMXjR1Sj59U0VZY3o9Skx9OFFFWWNueHF4KitwVmI0Rjwie3JrWkNvfXghTUJyMzxQKnhMemdSLiZxfCVCPjIqYnUmKFNbYnpUJGV1cnpwbFZuQ3B1azt3UiMl''@;'; put 'put ''bCEySj4xIXArenBZK1NeOkw5azFGXyU+eXJWaHRwZE0wXXBIPn1UcnIsfShISncjZnxGXUgvPyFkbk1Ud2RlTUkkZ3FrdlpNfjpGRyxaIURbS01kM1pqRDw2fWhMX3UkTmd9dnBMQXdbU1F2JCxUbkMhaFhhIUw2Kl9zOiQzc3FSNDZvdGpBMTRiRSEpVnczTSUyNT9pP3FhRXRxfSR5OD1xKGok''@;'; put 'put ''cSRjdHpWOjBjJmVNMWFqYUVqLm9EMyskN3tJUjBzWSUwQ05EKGhbfFgkLD0jSkhIdUdha0BTNVlPbHNnfEowVChkQ213aUB+NUBNLyYqJkB4Q05kVS5jOn1xTVo1YTZOcDZXNDswVEk3aWJYWyYucVJtcTY0SHpDdn00fWJXTzI6IjleNT4qUC5Cdix3ZypPYm9NQ3FSdWkrLGwqWkZ6S0hkRnVS''@;'; put 'put ''d3V9Z0dHRW5RY000b19PWEM+KE95UVJkaGwkTit+U1Z7W1VsL3QsWmJWSXRsP0ZHTkhwSzhAaHYkV1hPc3VAJClCa1hdNElYU0AjcnhXMC8xfSp0c1U/bXlTOz1GWXBKaU1qOHB1Vik/KiVjaCpIUE9wbWl9a0pbMjkyPSJJIncqKWU2ZjsoakxhdGsxVWZ3PTFUOzhQJkhiJkFfPmM+Q05oM2tS''@;'; put 'put ''NStrIz9QOlkuL0VDYHtsVyFOWUFbPGpSd2l0JWlvanFtamI9TDxnT1BmM29lVGVub2IjSjA3USQ5OnsvYnB7bHY4XSlxKnhaLyl+dF5iaD9peE10K3ttcy85JiNGQio9W3dUbHxrWGVJaHpHV193bjAmIn19Vi8mPWVPTzgwTkA/OTEzKz5vQChOSDVec3pJWXZGRE9+d0hDYXFJfCl2LG5QSF1G''@;'; put 'put ''QTNHZzJHV0pvfF9dZVlOSzQrT1ooZFhWUXk1X3h6JUlZJEB4NCtCZnJrOHRuKyQ9QV5OTH1eZHc4KUR4W1lPPnBKTGUzPUAmO0hfOkRPXUwuaUReUDEieyU7bW0lcSZTREZfaExgZUlFVHp1THRlITEmVkZuYnhnWHhWczkrY0omPnRBXUZLIyksMWlKbkJValR8UXokaiY0RypxMzBYIVpReldm''@;'; put 'put ''RnpyMXQ8RmhYNEV1KW9aPzBwME9LR3pAUFtJQzwqNGJeVUYqZ0ZeRXR9e2VNOEAsVXArLFFuWXgrTHdIJks+JWpkNCJnblZoPHQzN299dCIlJW1KKXVVfWptNVY4RW5KKWVVWmY9QCoraWsuVU9LJChDYEN5QUVqdzdwazhYWkQpeCx7IXB7c1tVfXl9WyN6cVhNbll4SyNgQ3xLTkk/RWlCXmE5''@;'; put 'put ''YCM+U2lKandpQypWZz8hLktjNmFYLEcoTj0ySCI9MFdEMUlUXlVRZChZUT4qai9OU2swNkFKUzE+cWAhTmY+ZnVJdFk1IUJjL1Ila10hNlFpYFI7Sl4wXUBpOF85azJPcU1uczk7UDN1O3FmcCZgTD9ZY1s8aV56dVdJV15VY1tIYV04I3E9MFV4MTNebVp2XzNte19Vcls6N3tkQjNseTVjVVY9''@;'; put 'put ''ME5gOVBOMm0mKlpbQE9iN3hbWz4pLEpeTjVKVD1yK2c5ejhVelUsMmdqZG87SHEkRDhicyQ/fWdDM3RzVX05VHMuJWU7QSx1eyk3NzVzUEApdDh2Iyt3dHVeNX41YW9JfHVbWlI+cVs2VDdtQV01aEw2b1F4cUVWXlRbazZtSU9SZnFjKCFvI0t7MSlkTDxde3Q7e21sI3s1ditfR2VAQzdwenBX''@;'; put 'put ''L3csQCZUPXF2eS5xOSokdlAwQiZBME1AWm91aCwldTJCPWlLcFF+an1mIl5IJi5ZI0hINmlXe200aF1WLCVSaFIoQD9dIXVGSGU9Z0xObntFIyt3UWxJcFpBWD1dZTo7SiNve0YvRlU3aUguem1+dnxRRU5yTlldM2RTYENPPmd7Vk9RL3heZFFtRW5ULloyQGdnT3hTe2N2OS9iVn07S1pKP1Jy''@;'; put 'put ''PDJFdC9sNTl6N2coakojQ14lRm06QWJqX0BHOz1QQ31wKT1ZfXMkX0lzNikmZCx1UGpHdyUwOkI+XXVOdWZ5fmBdM2cjeT13PHQpMTNKczJwVzdhYjZPZ3ZCcixHbTk9PEg7XUkhTGpoKzRXLFprJm50P05JbmJSVjRjO2ddZ2dPX3BlayZdP1YqMFcvc3czJjpAIktCTzBkL31ySjgxJm5ONkQ5''@;'; put 'put ''aEMoMmpgREI/RUZZLG0oK08zakBLaSJCQEQoRj1MUERaOz1YZE9kOiprYFVZYFA2QWN9JS9tJW9uezpaeStoX0UmRE8hVykqLlRSQyhqXjMlIilyM0hOWGN1c0g3WDBtSHswRTouRSlMOVFeVSF8RHheKlI7N11OQHRzfDEzbU9rJH5UPzhRJlU4aFFKNUtvI0VZaSpULG0mL2lUa0VLOXk4VThT''@;'; put 'put ''TnQpcT1xU0JON1d+SW81bm5fSzV2UUcyKFFqc0VDQjNfZVMwSGZ2b0xWQGpKbilZWCttfl8kZnFabmV2Y0w7REgsU1s1XlkpeGpKeFhANlFUNEVvayIrdl97OXh4KDtgbmVzYFI/QiorbXV1QFZKKCp7eTh5e1I0RW50ZHxQMihEUU0reUEwUjpPR0p2OFcvfWR2cXxQL1FJazUjIVo5OmY9Qmkq''@;'; put 'put ''TTNtUixEPjFlPClqOnVSUm9ufE9iKkw8MXw1RTxfLzsxSnlPTWBvSjU/MzpWSk1CJCErV1dqaFNrSypGYGJySD10NkF7OW9JX3UsV31RTikhUnNJYV8yTmZML3g+RUh2UnpKaXpufkxMMFdbJnV1R2NPZ1s2az9XXSYvT1E8Xlh9QER0UF5YMU46MmQwfFNSYDY/K21oNztPP3xYekdpY350ZD9U''@;'; put 'put ''cihEUU03QEZ2RDcmJF1ka3NjKV5DUGlYeVB+VHFrc0V4eEpfbURSTWBAeG5EPnA6YWg8QGdwMGF2R3praE0qQDNEaVdGYmdeSFFtRUU/VF1ZK2tSWWlPSng9TiY1YmZvIy48dnp2M1p2MFg0K1NfMTF3aEIzUV5sdmF0dlk1LCZ8fkVoWEpwYkl4Y3kkUF5UPW5eczdCVDpEX2coM2R2JkReTnxu''@;'; put 'put ''NSkib1pWJkYoIk84Vil+aCVrMFNeKFQkIzpGQ1N1Y3c9eVpJPWRRTiIhfSUmI2x5PjY6KnF4eFtKajNReDZVck8yL31gZm81eyVMYEJtXUNaWU97JElGY3sjUEVNa2NmIit0Yys2V2tsaFdPOml5dnZANUM/P3taVj5rY3BVXURvKUJSPDdkSnZEez5Sakk9b1h5Kz4kdUByQnpMfkM1dDdvR1FP''@;'; put 'put ''TTtAPkxxQ18jLzNYP3FHWD87dV1uT299VXc7Pn0pVUZPVCFGIVErOnVPeiFOKmI3VUhTIjksVzFOW2duc1s9T3c3M3BTQ0s+KS5damJIQjddXlsiSS5XcytqcVNKQkZdRjo3KjBZQFVKQkZUeSpUTG9JR3x2OzFsXmxqSiQuIXB1dXQ6Rk1hXUM0THl1fGJZeGk5dG54Z2Q0KzZfSzhvdFREQ0Rm''@;'; put 'put ''aDExbGlZcUNmWUV3Qnp7RWtlNUB1LndPVU1RdSZUQl0seUVYXUNXW1liU2VDY288fjVLWD5hSlBtZGkpWUkuVWI/cit3Nkw/cXVvK0xvZD5sViw0fjs2Xzc7ZXxHeFhRZ09TbXhvWjlnZChqIm00MztrVWY3L0ArTih0cEJ0aXB1T1d1KDsiOyk+d0pgXlZsQl1oUU95SE8hdytVRFB5dyYodHUy''@;'; put 'put ''Q0lMSTdiVnpLeGM+TW0wWER4Vz50Ml0uRTdTYWxXVzIuUUQhTDNJdD9wNHFrUDdWYytCc0RjdSQ/ZCJ5ckApYFc5TEdWaTlVMzB1Q2pTcU1ZI2s1cm91UipXRkZPIkJYRGdYd3pXM35sWk4/eSkiW0I2UHt1U0w6XkRuQ2srfWRmaEhFPjF9IV1DWFIqKW5CbypmSElyQygrOHQ2XyxHWX41QTtB''@;'; put 'put ''bWchI0pPVUJCPChDRjA8cTMmRCleP2NFMTlKbjNwPTRpKilMamJsaUM+MyNTKjldM3MoRlcpKF0lWEtdKVVUTHQiY0pBITM9dnlgXWsvQCtYV1cjWXdZT3NWUHlZT3d6M1MqM2VraypJZHhjRE5ob0lhTVl+QDwsUTpzbGkwMWhJQktgZmZXOTJpPUlTRVFIPEZHYFU7Tl4pMUY8OT44XzYockBw''@;'; put 'put ''OmBNWU18Vjs/RjcjIUVjcVM4WFk7QT5yOjJPQF5CYT5jXnQsb3JQMDNlJHZzOVBMaU1zfiVrYW8mQ2h7VmhmfiVbcjZ5ZTNESiQ/NTQ4PkQlTn1uMlUhSGA0U1VRSnVzdFJRUnhfSTdldEYlX2c6TW1ldkZFWU1vbEVVN3JeRm1EOkw+d1FDZ2JZMDJWVHg+NlohbG5sTCkuc0JAe1BffntkJnoo''@;'; put 'put ''NG99KHdSK3VwRzMqbiwwOSZrUSZjTDVmVnNOZGc6a0JBTXtHVjVvPShaR0c4cX0yKnN2VlFmekFnOmNgLEkmYVY1Q0EkJE5WTU1jb0ohQkszRjBucEx7ImljbU95QFB5PnspbUROR14zMDNAJDlKby45LD96eEhPMmNYR0ohbGU8c3V1OTNqPUtMQT8vUFBXUnQ9VyVHOyxJImcre0daKVZZVGRh''@;'; put 'put ''UzdCVnpRYyt1REdpNCRAWEZGTXw2c0g2QjRQPnBJJCx0czRhQUhDS1hRZllPRiolTS5iLGZ+T2F3NF9lI0JRVkZaWDVIa1pXUmwzfHopWjNdNXF6TnBxdEJBRH1PR1hCNlpaP3o0NDJre0JHWUdPe0Vya0k8P3tyWm9POWVSSiVOdlAiKGMvTGg4dV1MLk5GNUdhUFYqLHRKNUFaRyRnVl1Qa0xI''@;'; put 'put ''ZD8yWCY1dkN7dXpATEpwdj1kaUdUSz1sX1oudXxEJk5FSGheR2x7Rj9wVHRzaTN1aEZgb2xYQ01lc09jbnpyRHEqa3RjdUA2dEFpUUg2XTZgMHlNbW94YGZ8PltKTkFNUi8xL315MWh1YTR0SnwreWtBai5SRWUyU3RTNjdvOGM3Li5NKHh7I0JPJTV5TFlvWihVQjNiXiJIJjR4d3t1OSs1Lkky''@;'; put 'put ''WGJ8Y0hEdT5GdHZmJCFXfV94R0hUdnY9ZGFHYUdQL2UzYXUxW1lfQjFCX0RCPS8wTXI3ME1laXFMIkNvREZzLFdqPGxNXjZnKWREMm1hM3VwPmpgQ1VAYVIqRlBSMig+QyRNKXs+ayRmUXkwPz5rMUBQNmdmdV4pKzxGPSRFZi48a0Q9dklORXFdYEk5eDlpYi40L0c5RjpBRE8/MGQ2VVhJPE9s''@;'; put 'put ''VVh3SUQwSmhUWFtDcmtjTWc4Nk9kcHg/aHRgcDk+bDpFZztvYF9xUS5nOlpwR0J2OUJ7WHpuZ1hwX3hHL05fZ3h7aF5TIX5HIUxxZC5iRVguI1hSIyp3T2JreDBvanJzP25efmZyRTwmKlVmZXVrIWJ2MXVheF41bHFLMkBnM2Q9NiFkMyRoVjEye3UiYXMpNHBIMTlZLyglaU5lbVIoK0AvdlBV''@;'; put 'put ''TDhydmY/MSNdcmtkejV4TFZKWmZPKnVTekI+ZHdHOUA6T0N0O3I+d2pzeFdWIkdzWXlFI0NuPDYvbnlpRjt7NDxtRihGRH42WU1lImZGLG0jPjRbR05pR095cSVJSChudlVYcWVDR09RRmVgdislIyNVZm9lcilBTyFDVFNlMEM9PUsoTF0yM3REY3NkfFtqaEpWNClmd31hRiFveVJVclAlaDlE''@;'; put 'put ''K1FyYjtvKUxKNStOd3FDKWFqOC5jRWw6QnxCJnM2az8yYFZddDlYSHZaNDlNV0NeISpeekJrbjUsJWBTaGV4ZS45P1NRcngpfV08Rno5aUs4aW9AZzA3XzVsdCkkZEgocEo7WWBAenx1Rk9EKE5UalVvcHgiVjpzJGNgME4qcz8yTVRSInZ2SkZLJjM5PT89fDVCOEw6SFgoITRMfFgpaklzREto''@;'; put 'put ''dXVxKktLTE1kOnhIQ1M1PFJ4SVZIczFdI1tpQ2FdeWFpeWlfRXNbdE9QP0ZucnNIMUt1JClYTnpnfW0pUkVkMlF8XXlwKWxPMSoyYVF7fGRyVz47ZFIlJVtTTWhAIU56MCQleGUuXSU9OGJpfFdRO29WbVdifjAwbCxzQ3YkQWhHb2tSX3xldE51TTtvJktkLEEsYWcsTi5hMVF+JWMxPj1kVVlx''@;'; put 'put ''bFB+e3JQdE51TXkzWHFBOmRVdE95cGJpPVttRnJ1N2F7WldqRCR2dzpsSnMsPSV4UU9va2RPeDEoMyNKbXJzUUwlaVVOWDxbbWQ/M35bWndyVSM7e2E1XitdcjVWSzJhQFpDYkBMLC9nUGF4NkRlNSgrZ2tDWGUqUGFqSXdhQDswLmJhcWg7X1NvXnsuKCg8WldXfC9gUG5CIUxSZXE7aGYvaHVM''@;'; put 'put ''V3BWPXFqYFRCS01aQ3FHe0UsX1IpKSl8YklHal47JTw7PkNCMiJaNHEpVSx4YGY6Wl1DPFBASWNmaGYiIiEue2t2e0pOV0pZfEdLVDkvL1JaXkM1ND9DXz9waHUyZTheO2Bpe2lMelRma1lQKmZrZDA6OyVwe2Z+dWNdTSw9Z2wkdlR3ZztaXi9FOE9CRjVSSm5xc0hpNGwpSyJuJnxObTVmNVMx''@;'; put 'put ''Ym5rI35HT10/Wm5aOEA/Wm5aSk4zOnNpWlg9QCp5JWNjTzZLbylFMT9XeWFeeVVAP1lyNmdMTWAlPjosQUJsK3B5cyw1JXliLnJqMEdheCwraCZuWXZRdWRAUjV3LDhvOFVOWDcoT0xSdig7aXM5JS9oMFhxJm5fODJdelswdVohfD9QLlUrRmV1MHFOW0lDeSNJTTliQz5mVTk7RFtYJTUyfmc0''@;'; put 'put ''TjkwfVNxeCs6Q2RNYUIpJFdQVS9MYCYhcSNnWVZ+VC5ML21uUitqKHA4IVZAQV4hTzUlU2ZZYGdmdXhfKVdJTlh1SyJxYHt5dUo+KSwxPyQ+dD4wZCVebXEsMHZRaFtKaF84MF9tOD5GKGZ6IShMSTxyezpZITVVLCooV2c3IzAwYFV+NzYrNi52aURwakJ2TU9mR15VaWQuY01eYiFXOFhYaXhj''@;'; put 'put ''Vkdtc2lyKWF+LlN2Y31Yb3s5U1VKLCpuRGQ9UkJJT0dTTndZanFqS2BvMUBzJWwhbCFgTGY2PDVWSHEvOHdAYms2Y2MoNSxKVn0xKiRJMERFblBLTDl3SmI+SkQ+ZlRmIztDWj9tVT4xJiNBdyFTTE5OKXtQXz1rSkMpJmphLzZESjBfSWZISjpaMnFabHpvZHhuVzwuWmVQIz5LNn4yfH0zXmF6''@;'; put 'put ''UnEsJWo/ITk5RlU/ZktfZ1loUkZUdlB+PHMlPDttcm1aK29VYSFyPmAwUHAoOlNhcV44RmE3c2V+aX5vP0twXjVpUW9bYDA6V1V4O0RYUDx7RDk7ayhKOyxWVHk2OHg3L0NYKExgI01kX2RINilFWk0+cS5YPV9rU0Y+KEZ5W1B5N3BuYEd5ejssZStxcW5hM1ZXdk1sKEBfbTQsYWBYIWpUaGEw''@;'; put 'put ''diZ6P1N5JWhUeGB3Ni4lRytWTUo0PzwoK108U0VDYTtxJTppej9YKS8vTiV+LFJKWD88cHshVTRXbHd6L2orRlpjTF81Vi91ZUc/OCshaTtwM0l3RTtsRk4xKiFqUjFvJmdmdTNIMCw9ZlskQXF2LEhndWZ+SWUqXkhGXlh7fClfPDMmMz4wOztsdyozdm1gbGpuNUpufWYqeElWcHBrbDUlQlFd''@;'; put 'put ''TVlWU3NbRS9FR2N1NEYzZC9MeUJzaXldVFlfdjssZnZrbzkzLiklPU5ycG1wV3tpbFNHbTF1Ok11Rzk3Z181TjlqWG1RYVt8I3YpdU1ETHtgKDElMDlYLzdLWyxbYWBgJCZfMT85OVcldUpXKW16c3FrYStdMnMuYkhTU3liQ2ZofCRPU0NWU1t4eGNgR3FPMzw2VmZ+SntgXVArVTxZbSUjO2lt''@;'; put 'put ''ZTRHWTBmNl9yZz8kL1ksNHd0XnoicXxDfVpYbm5CezhjI04/OT0yJjtVMXlZPmFwekJVXStqQFJyRF9dLywlTkdDQ1g2Nl0oXkMwdDRddDlCdXIyTjZfVm05LHFyNTVHKDZsYC9XUkYkJUNDdjg1Yk1hdU9GTUpjU156cGk5X1BxZip4UX19bWJvXk9yMjBRd3RiQFUmOSwveCZvIzpgU0paL2JA''@;'; put 'put ''YlNEbiVqYVRnK2ksaVA4LldNWT5NX0J6a1FyaXF5cjhJVl48U31qTFJSTWZeXnFHKiojLyY8aEFnYkVgPENLUSZWZzdQKGVwLGV4QGNkWnYqIlFVVXYzOEcsUkAhdyRlcnIkNXZLL35mIm5RZlZQTDEqNiIyVW48VDA3dU5iflB4aFE7JT4xaDdidyEuN0JDbDR6Q3wzYVI7JiYsNCokN3tYIXxj''@;'; put 'put ''cFkiKThmeGtuKXlhQmMpQ19ecztwYjwpM2ZFI3FCOypNSjpiSDFfcENmOSted09ASGklPitfVF84TnJHTUpzTlhdM1k+SzgsLio/Wl5gIkJSZmooezlkeDspNl9UJm09TDR8fXpqOy5xTzxLfH15aUFdd34+JlZXMWNBXU9YaFZfQz1WIn5rd2BpPihFeGtHYHttSzVvb2l3K3RWcnl0dVUpb19W''@;'; put 'put ''NVN8bi95VWhpRSRGUkZSRlJVNVliRlJGTXghVDcqOTAkWkB3LnZHIUwoeU1wPmlpaXx9TSl0RDp0RDc7SWNGd1tBRnZrIyVjTkQvZTYlKH1dN28vZiVQekl0RDp0RDc7SW1Ic1tDZmN9K3J3QDlzLl9HNFl6UEwkciQ3fEQpUSJHM0JGYzhSZ1NFNHVqR1dIJipDYX0vVj5qNktqdlI1OkAjOCQw''@;'; put 'put ''Mk9uVSszeXBxVihEKE5BJFZ9ZX50UWdRV35DY0NbSWUlQ1hFXkshUXdpVExSMHpfbDUxVnxRWjYoUmVVZXBxb1cmWUpuYXFUKUdgfS92Zm9Mc2FxNU9AYGoxRW1DbEs6SiwzW2ArTUlZdD53Oi9dVWNbOT0ieC4hSDZZMEU6NipjdX48SDomSmVVZnw8XTZ4RUM1NHYsWCpuY2hJcDNDdTt7X2FD''@;'; put 'put ''LEI8djZFfXVAeXIoOXZAZ3A/XnNdc1tmMyFZS0s6V2xaXnFGIXU1eXJXYngwSj1tcDk+Mi55KlBZW2tMOFtDcWxbQ0RfJilmRilQR2dENjZvPiRSWl83e201Sk58UTNiQDM+KHpyZz0/Zl1ULCs6RWF2TzlxKE50RC5OPTplVVtnYW9kWE58az4xJmYmTH54SmlyeTk2c3M7TjZmWWoqRXtbYkxJ''@;'; put 'put ''eTl7dWdWel9Fc201Z0t0M1g5e1tYeS9CLFZkMlhUaC9nYlh3YWdXUXksUz4jaHtxUj40UCxbUXwrdHpTVVlIXjRPMmhlV3VkcmR1dStgN2RRNk5kLHdjJXlTcmR7MTs6NTcxdC9GVlhdQ01kLiZNfGpoLyY7NUlkUihMcV4mdzlQX25pKnYwelpOTXxoW1Uxd1FtUms0TTRPU1hFKUBDc0RaaGA8''@;'; put 'put ''fXdNflBSXWY5eVBEUCpwRz1LVCVjZ2ZQXzpRUlVMWFcwRXBoX04hPTo1N05laGJmJVs5QWR5MEVbNWRpMEVbLGg/ZXdBYCZKTExdWTNtTjh3RmVySmIpZXg/eCx0STZ4WmNgRGRAT1p9NTlodyRqOi81NjVzeFpiYERkOlFOWUFqaXkhZElnMkpOJFFxdGoxSSo3NSxkcVoqZjxMOXo4fFssdXNH''@;'; put 'put ''bTx8Wn5DI10lZ15rJDhBcHMlSmZkWE8pZEhdLHNLOGBQbWUlZlVjWzhne3BQTldjdzldUl1ZZH19S3c7WylEVlcjcDUjVylweWZaeWo7YWlOUjFgYUk5RmZMJWREZFU2aH1CWWwlNkUwd0tKLDBCak9VRl4sWitaeCEsIS9aNHFibEZ0KWY8U1QxY2cxNUlyKjBHIUBkZzVoN2gxZWlQOmgqaGpv''@;'; put 'put ''e28/OWJmbDEuM29oOntaTWlHckc5ejZVfTk5ZlA/TVskc1tpPjJyRX51M2shYEk2RDxDT3ZET2N0VSlyZlBSdCxsaj4jdkgsd3E5MFtdcSk8R2w+YjI2RE8ldT8vSFhUY3Q3UFdkaUNIO2JMakI6dnVYU2xNRnlIMWdPTU5rJm85U19ue1spcyFDX25RX2YpZS9ZTHExNkghR1lOVkQwRSRme0dZ''@;'; put 'put ''Vj1ETUFEKC5feCZJU3NFcDc3JXcjMUU8YW9mJit4fHhrKCxZM0ZWXUhEb1pTMll6ST1rcDAzTm0iLC5bJTNmfE5OQz9kUTBpb2BDRnYwcntxXjxAW2heUTI5QzQsQzFwLDJYe2BJQGhDK2Q+VUk9WTZSOjF3bD8zITV1UHJ1dj4jaG5WV0tlSywsZjF2fEklQSNPWjt+clUrUUQpbStlPV9hbWlR''@;'; put 'put ''bnIqWkhNWjpjNDxBZkVHL2VnaENAeikmXnkvRCs9Njc3ND5PczhSQFJ3P0UoViN+NVkwWnJWXj9WVXZSWU0kV3VdU0BqM1IvUyRWM3d3cXV8aFFydTN1JnFPcXNvKD52PDImSzRIenAwTWtSJj5zM29CIUpjcyQ+Z01bP11fU2JrMWxUZV18aUwoZSNMdXFDQlY4KnQ3JiRpalAybjYmN1UrXXxX''@;'; put 'put ''KyMxQGtTfVolSUReQ1A0ejVvIVklSS84RCZdZmZMZGY0Z34sMGJbXStjQ2IkMDdxQ3dCTzFyRTtBQEFTMVFINjBnZDBnVEJoemkoUCUhW2ZNeWNAWGdZZ2llPytlKGRwSlIyQjE8YERhRGJvbHE/ZSFqbXNkL2RVPzBaRVlCMWo8MHx2MnpebXY5TyldQyM2X0Qicig6QnVwISJSLk4xVlJ9fCMy''@;'; put 'put ''ZmdvblZwWTdEQSRTcSt1XnAzMTlrckp+Ojg1STJZRW4iIXIhVzReUi44NTwmO1YsRkZUKkdPR1FjbiVlOXB1ZXh1JH0uQmx0PUouOHFUN1kifFB7LEB2TH5fLD0sYW9nMUc8NGlxSl1wQmlxSDgscjx0KXpYdXJ7Q3NkUzYmT1U4QTM5P3s8PV90KWUpWHk8Q2BeJHFKeiZjJHFrKlE7bGAleFIh''@;'; put 'put ''O0xyeHNtJHE/KiQsN08oaT0/PVIwXSJabzpmMmdba28jUn06ZTZzcDsuWWhdbGsyc1JqIW0kLHA7OzRNQiV7KWtEK2BhJWhVTnckZT97IjYlU1JhYiZQMWBtIzVRKCgvWXdgPzN7JnhJYUgzUFcmL1l3QDpsSlc1bXJwTTk6Z09OIW95K2d1QFhobiRAOj8rNildNFZzMFZ3JVZnTTE3NClFOUAz''@;'; put 'put ''Z3glIis5cTs9ITdgSns3eSVkY3xeXV1VKDNoJHF2Ol5SY3FLbDd0clBbRkVzPj10PD9TWTF+OnxXQiVwd1okWm9zMys5XU5BPkRZeVVecFpoLzklJWFpJGNYMy49T3pQRThVTk9XOnp6e1tFa35GZjNqKGU/MGF5Qj9FYnh+LzJ4XWFgI0k8VDJaVkAqInpyTDY/aD81RXsxOyhoUz9SNjdCXXti''@;'; put 'put ''MjQ9ZGVeMi9UeGM6dEpaZWd7YW8+TWJ9SH5Ccmk4ODFjYDhxWUoyQmA2NkVlO09hM1RwNUZWT3YuKT5XTzAudX1jXWhSLGxvQSEuaGxvYUhVaj99SHoqJWMxYXBWXktSeTxOOFdHXWdbdTZqLlkzKzBUNTB3dzxPVyMvOldVTDZ8cXwlSTxHVTVtPWhUXz5IIWQiVUdYVDdkXktkO3tELG5TdT9U''@;'; put 'put ''fVQlUFN4NWhAPCwlfWUmfDpueSx+YHNBQ3F+ME5LKXcvOnsvKlJzSWljfFNofSUvXlIxMWYwJmdrezk0U1s3TjN1YWw6aFNmLnx1cHVjLGxvRWksb0g+ZGA4JU0mXWAiPmh4PFtvaX5OeWA6NipzWj0uRXlwSlk2NjwqVTohZSgmIlVzPEg+Uihbbmc/THpEbWA6SH47K0dyT0BtSGU5LnszKjZE''@;'; put 'put ''Q2VOdXRqUzVVOm1mdF40SFM4ZHdidS8wZndMaTc7IixzanBoMVgzK05Nfjp8VjYmUHZQemowX0UkN0NFeStCY1QrIzp1WyM0TUUhOyhfNlFDZyQwPTlpI01YS2lfOjBMTSRfSkE+aGNFbjh0aTF+JVQxKzI+LDJoaFM7QDFUa28vT3ROLEZbUDpIeyRdcDpEYVY2bTw3cV49I0NiVDVkPjdlPXd2''@;'; put 'put ''VFltMU9fXWpHRW5OOyJnfCREbiRxZGdGO2J1SmxIPkN1Lm5eaCQmWHN7X3YmSzhySntiLFI6QExwZG5ENzM9R2A7PTZiIjZBaTg0UGU3RSVIO2UvQEUrWWpuOGshbSZSNjAkfTpIS1VwR1IhLE5SXV51Nipma3UmcGcmSzBtTlAxU1ZGY3J3O08zVEZsdUBORVJrN3EockFraFNgKS8xOTljXlVy''@;'; put 'put ''M1VoZlpwayo8Rnw4Tn5BcUQ+e2BtYEZjcX5gS08zNHdWRjNzZzZHKEVKbWBbOjhATG9oJl19U1A7WCF3JSZATGxXXUloZ3JkRTtOLl90WiVPTkZSYSVWYG1IR0lyUkB7IlhkYFsoVVRhbj8pcURPW302R1Q1eTw2L31XYTU/fjhJVWQ2Sk1dN3pQRi9yPTxeYSw7e2d1UW5RST9sbGFRYVRyZ0x7''@;'; put 'put ''e0lVJT4xK0tkN3R6U3BOTyx5QmcraWM7Nm1ua016c306Q1k5OHNdZHY4ZTovOTVMOjp7ezZ3VnxuUTw+Q1hFRXgyIllAVFdyTHM7Ill7N1UzQFsyQFAxeitIJTp3THo/Z0M7cClTTVpqZzElUldnX1pBXTNidUdTQzlGdlp1VHMsejNPU2BCUkhsNW5oYmsuS2smUEBrTkh+aFM3RTE7T2dWcFBF''@;'; put 'put ''b3szeG5wVTc0U1l5cSR8IX5fXmhiOVdwdDpgOl1YbDpxV2IlTG0kQTFFd3lwdWVaV05SMFhzPHRjQmJvXXpySTNxeTo1WEo0P3lvUms1NzBOKHciIj1wUUw4WH5xZEJeVj84KUk0aGNdUnp5fEVKcnkqXzc/a3dJMDQ+bT04Zzh6emNneipuZGIjdCN2Rm44NFY/cCkld2huUTxBK1NuUzsjUnxE''@;'; put 'put ''VnVDbldeSHs1XkBnZ2skdSNEciVsZGhKOEhhbE1NMEhOdVY6Z3dQWSVRJDwoIVdIcE11Qmd7PX43KVpEYjdod0dPdnk1NV5yXWhZbi9ROEJqKi5wQXE5THRfQUx0UC80MUVmV3Q+dXBAMER4MW4hMD9FR2E/ei8yLnkqfXpYNmo8XipGaTldO2pebkkjXl1oLnZodyVbPXtHV3JOX3ouRV0oU0Es''@;'; put 'put ''RGQ/KEh4aVFURzxnaWtoJj00KHpDKUt8fU1QYkNRbV1ed0NGc3o4OU1OcC9DeVFIZUB2W2poLnQ4KyxqXXQxfH5NI0g7emBNZFZ2ITVDaWljUmpVelNsVmo2OWhoaCQmKStlezc+eStdY3xVfjZoN0cofl5fdVIicWlpfCZuJWJyUjJhTGlDZTAxSHFoZSN2ZkBNP0UlSXk6YjY4Uj41VXxjd0lO''@;'; put 'put ''PUw1dTFgIWEucndVPSZtSW15OTI8aF8rVm0mYmZWcXs/IT01XiQodSllPG0pTD95QGdTUDYuW3FWaC9YKVpLdzdfdz0pZ0NEfk0xeVA2UW1gOlNpTmVwX18lZ21GZHs+SylqUX5dKnJ3MCNUJjgxP3dgcTZIO21OMzQ/OTlWVEloPUB5T1phMDlQUkFmQjwlanE1QkloLHJ+LkRnSTUzOlt4fTA6''@;'; put 'put ''XmA0WTYkRTIuTSovTX40R2Qxejk8X208KnM+TmFrfV8zNXpZL3MsdkkwVz9nL10vcnRHIXdwU3piYEZSN2A1bmt5c2hBNnw2bmksXXF1WUhaenhnd2pYPzA5dUc4TSxYaTdgQWB7UnJiVWBuWUcrdnFjU35JTDplVlpeelszK1dHez1pPHZpS0dARUg8V146cEo/Q0Bwd0k3KFcpRjlLXis9dCsr''@;'; put 'put ''bm02VD4uQDk+RjJvT18/eHBWdWgvWzVjWT12eS9RbnRrI3ZaUDhJZkxmPFNySDU2RCNHVDl1RF5ObzA7L21GJTRfbFc7QW5EZEVNb3xGdmtGfHpHNFd0eHRKXUJ2Nl1NOGYpYEouWWJwZ00qJmMhMTVCJHFDLEtJLit5UmxHWGtxVytTTHx9OSVONE17PkN6ck1zekw6bVJ3Yno2S3kpPUtgfilR''@;'; put 'put ''NiNEaU9XK1dALD01Vlc4VDt+cSFyc20+eT9bW3VGcnU4SExzW1BuTFt0MEwlWyh3UW9TZHdJXmxNKiEpaTBATytkXmx3LjclIW9QcWlrL3ExOCtYS1dgPG9gWGxLKmpxPWZDYllUSGJ2X14oIm5tfX5CVj1DKHskMTxUPSszTXspQDc8cCVlbEU5X2A9VzA4VWRYTiNaPDlnW3BKSSxnVzM9bz5y''@;'; put 'put ''I2FeWyNtWFdiRl0iQjwhMSxTXn1NVkNoTXIpUnYxKTNsNSkyPFUyXmcsfHVqeSw7X31hY318MHtQU2YidXBnbiVvJENQKUt+XUhwRCYsaWJFQWVrUF9POllOSUE0WltbJHlpSVVOUVpdUyVqNEs+YlNLaGxyTSVdXkNGVHc3b2h8OWVMWFFZKS8lbzg3ZWtdOFozcnt7NkljdkV6PXgzSDE6cSRm''@;'; put 'put ''bUltUGxgVDxzdCNzNyZoVHc6KmlIeCJ4fW9MbiU1SHtrOXsjXmExVHxRNDlVQ3R6KHdPJWlqQTFGc3BFJllfTyIwUV4/Uk8/bkY3ajFSPF09MGJqZzFvZXw1NTRsPzsjOmk9PXo4M2JAUy4qRlp0UTosejIwcEEoMWBCcHB7InAmLz1peGIvak1hXU4mJV9xdzw6dThgXVYoQyZ8Kno0KTwlZT41''@;'; put 'put ''JilKPj9oWTd+NyNZaFM/cXVCX0hWT2hdV3Y6NiRbP0NJaXh2Zz1xLzAjZmgjJEtleDxLR2xCMlI8TVBMbj55Z31KRURrOzxYXS90d3cjKTxBbl9iY1NiVygweF9JdHgkKE06R1VWKD47KF1AZnwweXUmOEx6NmpgUmU4dm5QYHFyZ09OIU4rRmxIKVd9KEt+al9SLjdDL3AycTNLWHdAXzk3djsi''@;'; put 'put ''cit+UDlDYn1Vam87dSIkcG9fOkpdSTMqfk51aiFXJkZ4KDMqIlNeYnp7JVJfZlkyWSMzLCppVzBGe1lSLz1FZ2xhJFZdMHhzbDxkLi9FN254JkgyfV5oe1FlLFo7cER+O0gzJmtEUTh1OU5NM3VRbEJWe2xENU4+RH5VYz1sczF9dDZ0Q2BqcVMvRzFsJEgzMU9kcCFXUGQpVU01OCxDYHhGb24j''@;'; put 'put ''ImRfUCNNN0AjelJAOHRqKyNVMTYjN1U6QHs+KktoUTwmdEtORHtrbT5YJEFKbUpkaFlhKTN3Y0JTLkthM2E7RCZiR1lqZUZSVXJQJSFESTF2ejFVWDhhVVYyWDVmQjNUdiY9bSY7VDMmR0cpR2M/RFYjKnUmPyg8PSI7QGx6bGJWKXVgW25jJG5Na2xqblRTK2RPNExOUUFzYUtLUShbXl4xWWMz''@;'; put 'put ''fVRHKFpfKFR+ZElFYTdhPERHWHtGRXo1X2BIPGI5JEc1SCJoTiElZVMxIS5Jem8sVE57TUM9UCMkeSZKPyJIJjQ1YjBUNUUqP1pGWCgwZCF2WWNwdnhIN2tCRGZafSgvKi41dSxRR2A8ZENxK2NhMHd1O3FaX0c8JT9KOD4jLEtnNHU/aiFoLG96QG5MLlU2NHFrM0VHZGIiREdgK1Z+OD5gKXsl''@;'; put 'put ''ai5sWV8pZmIkTmczWWx5IUA3Oi5VRn04XSo5LCFLMCtpP1JiMVRjY09zWnYjaiZhZlNmRGRQaEImSVNiZ2MmS2wiPnl7L1lwLiVJfWZBU0tUdnV6IVdmODUmfHZyd2wiNT8hISQuJW4qKW5zNUEpQXFTIyo4VlEuOjhSOVFEQ1JjPFlWQ1tHY1JmPHF8QFc5cClhU050L3VnUHBlMT1TY0tifU0y''@;'; put 'put ''N10raUNuOnc8QDBTWnZMMnkhX0lWXk8hO3c+KkU+R18lfF5RfDlGbmZXby5wRk1DZ2lBbUdoP0QlNVNIU219byFjSWZjUm0oSGEzZ3sjOW1VKjZgXlNLZ3A1UGxwZVhuXllmJGhzYiR7Vkl1Y0dEWztGQUN1OXJgSUhseGpCTSwsd3M6OEY1W0w0JGdGbiY9Z3JrN1gyUHZgfD1IKTVFbm5AQ0xD''@;'; put 'put ''fHVAMD8/aT4mPmdbJDIqInBvOz0xK11OelkoIyZxNjYsPmdOaHA5KGMvM1AhQn53IT1tS2YyJl9QQVpEXmVbLmo/Wm5sbUdRY2NFR3pqS2t3ayxUeUl0SHl2fDs3NzM1eStXdk9INihqNU9zYkh2Mnp7enJ5bDEkaHk6NXQ9N3xFMDFvRzBfZVcmUVsxSXZgMFF6MUREZCg7RV4zK3B7e00kVStm''@;'; put 'put ''T1tGKF8saSZKd0lNLkdLRD1AWFM6WVtAQEBtIk5KWHF6IjFEPHs/ITd2bDV2SDxQIyM4OHNTOnczTn1hc2V+RDcpL3gsNURzUDUsITo/WkFUSWh7OT1qVz1fZkJid2loKjJPJWF0fixLVDxDKGouaVspNnVgZlgzRV5eLmRZTWZPUy9mVHpEZE1FbGluLz1GRH4pRiI8PE9IeGVnIllPKE1FRTBu''@;'; put 'put ''dig+aDhpUyU7UDNpZlM0LCM0TiRmcnlfd0dxKUtOX3FwRTs/K0RaYm5LaWJtc2ZeaHYjU043Y3s6VF8rVmlJQUkvWVVybWwlWkosLkpmam9Ydlp4YUp+MEQoKCR2YHlgIWhtUT9EQiZhXmhLb3A1RGx7aF4hUj4kR0tMK3RTWyF1e100fixGYG09Vmg3LmRaPWB0Ti58SXsjO1VRSU1IIU1gY0Rd''@;'; put 'put ''Q1R5QXgxY244dFoxenB2OUhmL3JQYHhbKUw7cCVEe3dMbkdaVHd2VDR2OlNnUyR+di86NCVvKmZMUytIe3xqSkQ5XXpxVXlQSW1GUFtIeDxrbFN6UyR8UltEPVNpXjp5S1koU19QViY1ImlHKHl8fGFZVkM2ci9YKmt9VGQhc3pwY0RfYU1hWz5sNXpHUjRLMCw0YjpAcyVwIXl0eHQqKzxZcz9d''@;'; put 'put ''Q0xpdyVHZiZDMjwqbzVYSW1VNn5eZWlgQzZYUCUucGJgW0J1T0AiVileQ2NPPUQ2XiZ3Wy9+bn5Mfks+RyUuVCt4Wy8yMmY3Lzw9YH0iJVpiVGg8R2dSKE9Cbz99NnQ5Z0JLeGF+STxuVkgqK3xeITIoLEFxSD4uRDIuIyx9KFI1VE9+P0gvbzU/MGQ6YXAjLl5DOWdEczs1bDVrKVA5Ylkwe250''@;'; put 'put ''e3orfGpkLEw3dUVZWUZvVlA6fjgjd11UcywmT1s/ak9rWWAwVUh7MWN4cmV2ZVpsfjA8eUp8az5Ic0N7MVk7Q0RRTTRBODJyfSNoOjsjMjhvRGlkfFZmXktNY2g7VTluQ2tXOWRWQFRiVXlZMj1MOW91KkAoXU1Udi57K2A2KT0vMmIjaC5rUk0+ZFUrcHtvbVVjW2k+InJzNTVvODBveyJqQSNK''@;'; put 'put ''fmdNXnxie1NxPF0hPSo8YSx4ZnZ3cThmdVgxUF8pZjlyYipSR2VDbVZQcTs4R09ZQDBKc3c9ZF11ZXBWaC9ac216c25MUDc5eVFeRXV5OWJgZzxIK0okTTReYm1RW24wLEdHYSkhbzxtJGM7PVNwJCVpYSpnTTxNKD1Je2B8ZXJFe0JCPzJNSyFaMSs9ImdySlgyWHc6ZXsvNnphTi9YQDcyenIs''@;'; put 'put ''SzI6ZV9JMHZudE8hZWZ0VXJEPHVlamBkdlpgTSxNdlpXMyFxcXt5MlJXISV1ai5SWno5dF1xKmtuTFVjKlg7a1RXdzs6dzEpeDk0VCFJP0tSQ24+OyN5LjNqMjlxZWU+PmVhOn1ifF5JQEohcD86UnU0QTViUztmNnxefXckRG5VJSw2UGV9Iys9eFBWUDs8dGd3JkJUKl5SRj99OikmYyJufXp+''@;'; put 'put ''PHt1Oiw1OWRwIzovXmdPQF42cnBkPERDdl14SUIyUjNYXXkrdndMXnlYJEQoeU9dREhDOUx8QHNCL0w4WygjLGZiL1RTayQ2WG5CVjdLN1FRPUJHdEhHTWBtTUs+Ii45Wj5fOGtGO0cqaixTJUxeIzFZYyFLPUM7NztvXjhYcGp1InJXMFM/QTQiIW5mdlBsSF5tb2xGOylsdUFpeVRmZGZZJXVj''@;'; put 'put ''XWh+P2d8QmBmaCFNKEJrQVk8N0FBK0oqUkk+PlYmIipdPSttRzclbjk5WGdPOWk7WiEoVGRHWCYiKjZUcHI4YSEqeXNqKm9yU0JgJU9RcjQlOzM5dig7PX59Jnw7NlshYDtHKDBJXkpMWHxYcCo8RWVnPGltVjVfYF9vS3tKVzd6VUd5QHAhLGlpcS44LExSfVRMdFFWdkdzYld7UldCazwidUx1''@;'; put 'put ''Yl17STRpVUsmd11oNThQW10zNEtJLmw/SFZSZCFjZ0hCVTNQSHxLd0ZARXg4ODFHTDdjMkRfJXgoZUR4TlVFLDtNcTMuZFVjW2lxZiZkQlFBV1QmcT4+OGJvRjlPQlMuJWtuWUJSaksrYlV9STh0WUFaS2E8M11qKEciUU1zQUFGUzQ+ZyxGaERnSF1daysrQCJBP09uJWEyVTw6e0B3IzJeQHI1''@;'; put 'put ''byhAJDEmVExlQUFxOlFvP2JwfClxeE9BODhKei8jYy5lUyRYOD4vWXsqaUJeNXQ4YCZ7JTNmUlY5MC5uO2BxIXhsPD1HZUxyRi9JR3drTmUsI0NZaTNjJWpXIkNnOFgyRkJ6S1MyXnFdQktCaFlbR2NSYjQ1cWVjU2MzNEpDWjRdZiFXeUh1bCk5dTFFMmhuPHNqfFI1MUpja15XaHFCP2czaG9J''@;'; put 'put ''eCk6REtyaWU5QFZ6K0Q5UlpNRlh9TEcjQD88OWQ5SGFESEs1ajtPMCgqfXcwSTFnO35ocDJfbUlISyQpajU/cUssLFhXRW5EcylUXm5BVXckPzxIbXc8ezZ7a2dvLDJ1JDwoNERVP3hdYj5kLn5dX0xnX0lmOTN5ZjYjVWYsdUVhWVhUd1NHKzFucTldbFR7VH1fQCEybyUyNFU0SDIkbmpKaism''@;'; put 'put ''P09odiZVeT9UfS5LdE0lWFVCLmZ2IWc5OyNyU1I+O3wkXWQlMXdIfW1gVl55VFFmQTxfUjopNStaRVd1bkBVV3U5d286XnVfQVZGUl89UCh0OHg5bmBUaHN7cyQ5VGNHbGQiSj46Tl5ldHdBJEZsbWJhTSFWWyM3cDt3bVkvcmNMUC5VNyZ1WFc7bUBwcEZRK3p4b18mY1tJfHh4Yl1oZj9lMGBM''@;'; put 'put ''W0xbe2xiMiZpITBCMmhLTWFUbH4hN3BOU1BXdClbXk9nfHd0XzlIb3s9KG1RZEpMcmFoPDtZfGZza2JNIWZILD4yK2t8cHM2cnZCMUIlKC8iVXJjeColWEZHaWQ+dis8XW1rQElwMEs7S05NampJa3tLMD42Ijt1PTM0QG1rZn5ddSNXdD5Cb0E7PmMmdVFyTC5NM2BaTjBOQUV7VzQ0TUghVzRV''@;'; put 'put ''MHZeQW51LE5UZVBTS2lzVWRRQDVKKiVXXXlUbDpdPi9tNXl9RVc8MTplS3xFSytCakAqe0ZVdEQzTD80KTplLjRAfk5AWSt6fFJbYixeKkxGYUFbWURfKms8NStLYGJ0PGMqTnEvbCNlcX41XWpgMCFbQXNeemFvNWJdNDtrOzpBcC5RR3VfMER5OV86Jk44V1tzamxLcU9LUFRZNjh7XT1BKTlJ''@;'; put 'put ''QlZZMHgwZW5tWDkwZSgyJUs+ZH14Onp1fjUlQj5Cb3cqT0thSD5tKEZyeDVIQ2FRfi9VL0tqPFJbakpRSE1uQmx4Wj1HVVVGeUhzXiF6ZTRUc3MrMTFQRGZCJmR7PmxXI1ouPShfXmlrblFXLFk8ITxMbFsrPFB8QCZwKjJwN0ZZe2tZMCJWJC8/XVdWOFlZPSlzIXRVO1RPYEl9emhiQEA1VE1u''@;'; put 'put ''Ji8wIl1na3AkOHF3RHdpR30jTm9vT0xhPFFqR1U7LFtXUVB4YkhdYGxQTl1zJnRqKiFqe0VnYS4/YngmdGpib1B+UFdCSU9XKT9dXWdQQXUpO0ImbCo2dkl5cStfQkJ7Z1VOYFpiP2cvfVBoQmpxVW1EbyxEbnFmLE5xaXJ4Oyo0QVFASm5XIUwqSyNLLkVxNDd5MjoqWXkuQzNMcCgvQGZhW2BK''@;'; put 'put ''a3Fabz9hRCEyQ0R7Q1o8XVFGdDZ5cT1AITx5TjlQR102cERKOXI8PWgxKTJTJThIQDZgTEcyam4iW09VaTdCeWUxTGx8bS55ZjBNcS90ODsuIjhCeT0yL110OFZxaE8xO0xJOkcyPkFVVXNEPCxKXmhJSFpMT3JzfDdFOTBfZE13dEM4Sn1MQks+Yj9dPF5kUXhuKXdMVUNjeGxgYjhfVUhdbHMy''@;'; put 'put ''R0R7LmRRSHQ2XWRHT1A0SVUpL1QyVCI2OD1OaGAhN2dffTMyMkJjQC9xPW5FR1B6WVs6PElNITJEVUdAMzs/M0p+XkQkWnJzdmR1UGNle09FWU8iflZHcitpViU5KEtXKS56OzU4OD1KeiVVJTNFTVVuZXRBVH0lPUB3cSx5cUhZZG5ubUZ0O0EqbTZVSlExN2QjMllbTH5nWjApeGQoRCxuT0s+''@;'; put 'put ''aHZxdEZSeWVEW1R9JjhZPDJERXo5L3FrN0J5WXJPUkUpLDhSPiZPMDgjWUF+eWMjWT5yJk0md0EzMV1gPXMpZyhhKSxYfFEwMXdQcUkidH5VbW9eUHgqSE03cls5Kl1wOHA+bzoyMFl5cGBWMUV+QC4ySUFycWQweVgxZGlKaXA6MU0vVDNCeDVee2dUW0RMQGM/Jl8jO2pmamRuaFRSVEg0Jm4w''@;'; put 'put ''cj19PHtWYFhrN31xWlMjPkApV2RdNGc1Y2hvcEVrSHxrX0Yicj5HRSxifUwkJGtHOXsjRDg+PWQhNkI8JnhsZzVvbFZKbGRgOyQ0KzVvNE01SX5XYCQ6VnFaTjlCJSZKJDdQelB3dENvaCRgUSk2O3FoW2NVbl5DR0k7XWpveUJVc29EM0Q2KVo2Z11gTnB9eSg3QGBEIzJCMmFGZEZ8JSxDSlB3''@;'; put 'put ''Q0o0eyJGN3pRPHM4LDgvdXFYPSZeNzcmSWlXM2xeK2MyaiQqdnJFU3FUK1JtU1tfQHBGeSMxVVFYUWsjOlkoWCQxVVQhODs8MmNuJHxtOnd1JXZxSF98ZFF0NHk/UkU3czRUQWB4SFRnPk0rRjhmUUlUIkA+V2UjTFI5ek1ocmMoWmtoXjpSRkokNysybkZgT291fFlLcCw+eSw4NzFVJHZVMWdd''@;'; put 'put ''TTRhTVlCYCoydys9eTgyZio7Rn48YiR2SThLcz0lV2djUnQ7SEhfQ2t+YTwqVjpnNTBvMmVYX01tUnhdMUFycjkqUl5QYjdyezdCI24pN2dnIVREfHokfX0+flp+KlhGbnlKQWV2YmlqQUI9Wzx3VDlHSFUlKFl6IlM7bF8zMVAjSnJqJiZwT1EsNTtfOEk4NTJdNzxpZUF3XVIsNi8ibStTRGRz''@;'; put 'put ''Kz5YOjt7QyFJbnd3VDZfeWdwZDNOdWJPPm97fi56STpiKChwc3ZCKnY0N0lDRW49PTklPUUzJktBNTVeQGFhc09ncm17ZnR8ZzhVNm56O2E/QEhbLHpqcng7KlMmRSwlZUBdJlk/KT1RMTttbnQ5ODVKXmhGb0YqSn5FKFcrPG9PLGkuKyRdRSVoLnc9YEYoKV5LZnJZOXV+b2NfIyksJCJrSmRB''@;'; put 'put ''MDQ1ZytyWUJTQHVrXjwwYmAsR0NEaz0ueyVlQiIrPzhyJU5AfSNyP1Qlam5WczVjKEFzL3VuYDZvTy9GU3R8Xj9TI14+c3BkeTZVMUMqdl1yPk9lZ1ZiJT0/VVc/cE9PcX1+PXhgPlRAJEFBflV1aVRCUzorfSU/ZWVLcmh3K35STiVXZXFVdiQjYmpIPU06NVgyWCFyXSs8YkksKl1MaExwMzoq''@;'; put 'put ''eiNKWiYhSns3ISNjSFR8RW19RVNPWXI0aVAqMmZzZWdxWUJFOWVWTVc9cmVZLlteaXhBYyVTWD07ZGhmaVdXUyFrXiV4NzlqJlUyVVo8O2FDZ3hlPiEvMEw2V1tDVUIqSSFJNCZnNTFfJHkrTkQ5KF9tJl8qVDtqMks4a0JuOmZ0VWZxUklxNWg2VHA5MDVJbk8+c2tJYUduXTY+JnUvbXFiOWM5''@;'; put 'put ''PlJKWUc7R2F4WU5rZyNQblZlU1RlUDxiWGVOUGhhOz1CUXxrcWJCZWYsMy8oelg2cjt8Qkcja114aVslbSRkZVY5bXA8RztUODBeeCJqZk9peHZLMWgkMnB7OSheeHV8Iyh1aStDJGIkSmBtKy86ez4rdlkwYi9lb2doXk17PFlnfkxDZFlJaHMzVC45M3QsYl9WZyJuLDY5cVJicXJONmxWInV2''@;'; put 'put ''WWI+cmVaMCxxNlFmUFlgMnR1OVZzNyYvNzQqPURdfXp7Rzw8UTxlSltiJVolMVRsO21DRUg6VE0yZVZCPmtVYURYZyg7OFM7WyY9K0c5JWNOa2cpI2RwNWFEZlUrQT5GZzklY05xa0dAbzNHcF4hL20iYDcmMl1KZXVrNHhDMGczaSNgKUgyWXoqX2VsVzRqcF9nOEclbzQhMH1kfGZEU2hPL3tp''@;'; put 'put ''VF1HZFZ9RlswJmhTWiJrc3BZdjM8Rz54fW5VJTFPX2hgISt2QV8jfFpaIVZSaV9FTnZFKy83W3UhKnZaSUwjIz5gfCpGfHhvXjZxREFoNkVHSVlVR3JOJnkhLE18Vnw0TilseG9qIzFCa3hhN2o8ZjFQSFM8bmMlai53SDt8PF5vV1d1SHVfKEJvPHNVRTE2NVFFSX5xKEZlKSM4Sz40ZS5ZPTco''@;'; put 'put ''eDxPdVh9SH1QWiU7Y2FaWUAmPzIpZlYqM0gxSiFAYVhHOjdiSmRvNEBWWFZKTVFMcilEWThtQ1p4XU5BfUNeeWJ2I1FOKndzNyNKSjZpMn1zRmxeTiRlNiVyeiJLJXwxS0RnPCRZeXVxdiwyRitRb1ZDTUZXTWA8XWZzVCxVN3lVODdYLEJAKjQsNV4xOmdge24kcU5EfTVEdiQ0eWNkW2w5KS83''@;'; put 'put ''ZjcxI35kbjdLLylyb0NReVtJR19vLn5CbENiW00peUNwL05ofG04dEJvSWRPcCQ5Rix3K3EiJVA1e1djZX04UT1QODFvLDk9fGF5bzUmRlhsUWs1VWFwMDlkUVg4bzNYUUU1X2ljMVlhOEQhRXl0WCtXOkdZRSE6QzJ8UHtkaDBkKWAlTzBAdTlZIzhbYmFsM3RFUFdUYTdkZ3xZYzhnLmhZUWZl''@;'; put 'put ''TVZHVExWWyx9YER1Py9gMm9HQj8oW1hJLjlnL0N2bnNGLjcoKTdaNiFHKkMqPj4sSSFKVkVtZ24wKU42fSJMRkdCUnZKSEs5fGRRRlJvZkFRYVJFc2R1UVVZWjUyQnV5c0V9PCNATGpwMzVvSEVdPGtTYFlvUEYqa0FBQUF3QUZBPldMQzlGKk1SZl5MV3A6JW40dihnWlBhRiR9T1NIVXd2Tz5p''@;'; put 'put ''Z0VDdGxCQUFBQUFBQUF2KFpKdi5jMHN8QHBFRmI6OzlESlJDQnlNYzJTXUMha3wkW3J2TU4xcTx5eXV+PiYkbHd6O1Y+ImYydUJqYDN1XlUrITJocUJTL2M+JTkhUkJ0aXBrdUYlQChiVk4vKzdSJDRBQlRtZ3JNTCU4eUxQWyhXWjRmWFBsP2RsNSZdWVtDO2EiW3tdSShZd1szajYocEhKNTwx''@;'; put 'put ''Wi9uSEd6LjE0UHp6IX09dzNVJmlhXjVFMDZPXUkrczgvaXU6TmghKjt4akN8XzgqUS4kV1RpJUtgUExrNG9KUyNfSC4mJmw/MiVuTlhSPWJPJGdJJCpKSCVWUl4xI2UkL1lNflI2dXNOUjBgMEZCTDlCV09PR09OSjJmW2I+VTMpTGtAI0wwbC53K1c5ez4yczxONHx6RyF0bnY+WDRVJGxIVDlI''@;'; put 'put ''IWt6WkRKciw5bHRqKixxfi9pbSgvJVo1fEVmQmlwVm95JishLn5qL3AzV1RjUF8wWnJuP0ckblZFPEhDdEJZNFZNQUlFPHp1aCxkfEd6L2MzWmQ6fitdZCg+cE5dKjtWKn19emZKNGY0Vm8rdXE+bH1xdjx8Nm5QUnZLaTMxJUs5WXovfndDeV57ITM/UWNbWm96TyIsMDA9VEViJUAqOF97Knp2''@;'; put 'put ''a2lBRVRhXyhCQ2c3c3RyQEg5U011U3VOcXNvUXRRN3EuKHFCMGRbZWtrNHs7WSVLZ19ePTltTSFZMlNfYXcydy55OkV1WzNUX0dxakA6Z3dlSzhBQzpCb25oIlR8S253KF50Lyl7Vmc0Nyp7dTBXTUM3M34mYCVRejQ0aVAuIU8zTz4sS2Rmfj5QVmVNSld2eWpIOUAoMyVqaTdndH5saHAxXlFR''@;'; put 'put ''Tzo7Lldgbl5wMHVoODw4USp2Y3MoR3BOLjYvWHFtLmYqV1FVSX5lKn5oSVp3Zj82bDQ0N3AyTSshNzRgQnlXT1Q/VG0kLjp7VStzc3hYYEw+UUd3W2IsQl5fXlE9XXsvRksrVkt2KVA0JmxjKT4qOmJTJHdtX2NGVWwrdUx1MUN7bCwuRUhVRXZbW2wqUFBefFt+RFh9YCFkNSkya1tFZ282ZTBZ''@;'; put 'put ''VUNyLFJZeCNWXnBsK2NiR2tVaHElXlRqYFlIRF4uKC56OkgsPzZHWlJ4VGpDWUYsVEQrSnZDNXZVZi5TVGRsOiY6dkJOOTdQX0x2UkNTXmhVa186JGpoc10ldEJMV294UWJQNE5aMDB0eDw4OD8sQFNHTXNpPnUlaVB2bCFEdFUhVGB2NHViPkMyayRUeDptZXBeNlUzYF5YOGFOUkZjflpzVl9X''@;'; put 'put ''JX4/aEJBMU1LMEwqb29qNDFUbU5FbnE1NlNheE5RbE8zeytRPFldKE18Ujw+WTByYlhJV0dTQT40RldYSitzbF1WVylEcmZ7Ryw6LGxZd1UxcUBbREdKZWdDRyt5dV9KcWRldCw/TyZAc3RSQ0ZTLHYod256ekRjNGFDd2RHSkxCIitWOF09V3ZHYll5aSswekFnUWlZX0hOekE3K0lHcVs2T1RQ''@;'; put 'put ''fEgrTmg+KDg5OjR+QXY3TE11JG5XfUZJTHwuWCF+enFiW2prS3lFQVc3W2FTaiZBSUUrUVI0MSxIXzQ7KTxlMyxAQGI5aF97Ly5OWHRlPGRJZXVDPio8I2x+Q3toM20ob0VyQGdqWSpaVGRSNXdXNy5ZR00+I0RReGFePjloZjRCcX1ddi9hbkJxUC41WXFwR0dNLk57LmUzX11wSUlbP3htOy4m''@;'; put 'put ''ajRRPz8pe2lbImQhUk1dcnhyZ1l4ajsrbHNmLzZ2O1A1TG1lazk9OX1SXWpiaFBJVzNjVnpTXyl4JmJSUDE5RTBRVXs3bW9Efn01TywmKlB9amg4L3EiUDQjaWNFR2k4LCNMW0c5WXhvfkBoI11SNjRibEpEZjZRISVwKCx8JSM5VH1CZ0JvLnteO1NhRnVqZyRraWJoMmtabkkxfSx6Vmk6WWki''@;'; put 'put ''ZnI+UGpOOV4saiovOElnQ3Y/IWBsbSpvQjxtWU94IkVZNT9OdmlFb1RLalJ+LklPK3gmO0osejt6cWArTTsmeHZrVXlEdG91MThteD1kO2lzdDhhI1hdOXAvejo+QlpodjAvMkdnO1ZXS3lta3ZmeSxFLDk6Z019NXtxWkZdfigxRi4yQGpUS2JYYEI3fSg/dT5QIUZiYHA7fj9+aUR4JWMmOWZ0''@;'; put 'put ''WH4wbkQ1eiteaEFLdlFCdnopUGA4SngjTjJzZl4xWEtgLk8pL2ZdQHUwZDd1PiZbMUNRZzJgMV5vbGlZMlZLRHY3R0YqT0svSV8iWj86RUhEPz9qMFJTTm59JS95S01xZSNbNnwrJGMhcjg+bGt9cXFrQmomV1l2RWc8O3x2fVcuODVWRFhDOlpFWFRnY1h2IU0pO1syXlk9fV9bOTcuQFdPW0FA''@;'; put 'put ''MHArUXowL1ZsJHI5QWRGJj40Z2U4b2ZRYilqSCJRPyQzSGhLOEIrWGx9KC87IUE6bmRVVWJnKVpNLGRbazdHOCNoRCpWW1pSfjI7KiM/bCN0JV9Sc3MjcktGTlshbkcwKzJyP10iclM0Z2ZWXykmOEc3PTJmcy54eUVjbjBpMitUSUVpJEJ1M310dX1ZJlQ2bUh1UTR9bTlOJSpvYyJva1B3KFFX''@;'; put 'put ''ZTVOc00rbXQjcEg3YTkzZHJUOk1NdWpyQjleSmhkdzlKWEAsXig5QnAxLCldan54VGIqKGViaz4uRHpKaXZjX25CTFNPKXk+KDZ4eG9zUVlYb1F9S08rQyR9KkgpZ0ZsKm46VH5YPGZyZD49KlpLNzBgbFQqYl82XmQ5WFNQYmApP3IsOzY4OCwwfTN4aV9Makc/YllxWFQ0REcvaHloeXwsIzN1''@;'; put 'put ''OippLzwoe0VjJXN1bGshYmZENi8saVp+NDBaa0E3cTtYLnMsL3JaaVRLc3Z6VGMocl52PEZbITYlSChyd248ZkF9fXIqUkJ1OCZkQlhwX0NIQlFTfUF+b0ZUX15tdUBVaX5BV0h6c1NlfFE5W2hYZ1JBLEJvLDttbGJmPUt0KC5gOiRsTiFUQStdNGo0JGpdNk1VUCFzNk1dVlIuU048PF9+KE1G''@;'; put 'put ''K2djbzEuQXp5cjk9ZWhiaHxhM189RnA/Skt+dyJkJSk8KmtpfWdQbGBeRUZSRUwmeTBePDh2XkBmaW9FU2NSbXIzUyE3Qy9AUHVqemtOazt9XjgzY3c9L3d3dFBDYXFyVixJNV9FQiUpNFtwbDtqT09XbihseFo5W2xHUjI8c0ZmKlVeWkpuKjtFSF5acDNPImc0PFZ5fCYuL3csTl1uJXlASnxw''@;'; put 'put ''IzsrMTdabEZvYDllOWBqOTg8PGRkJC8sMUJuRWxdV2BUSnhSRiZIJjdvPzdeTWw9SlI7YCUrVDV9MSgoJEE7a35uPyhWblMwMHQmXyg4KExkQkEhQVRDXSVnQnwoTEp9b2MvZiE2cShxWnBFLk1hLmxITiR8ZypvUm8ra3RASXE8SE99JURHZzs1QUBCYGQ/WkIjImFpeyJ5NzxLN2JXdDFiTyJV''@;'; put 'put ''QG5uUlBCNzRoakxmV1IiT3FmaEVxKSt3SSF3RDkpXUQhfjYrTnJ4KGMuTyFZRDYxXVFLbCMvMT9mNDxKbkZRZ0JQUWIlSWM3RCMkLjZEclUvJEQoeCpELihXYCYweGhMZmRWPVdHfSheczcpWVlUay42dTYsfm8hYUBjMyVoKV81QEglSjBvZER6Ui5bakdUSyZkK3B+M0ReTGxqJC9dPDFGLGE5''@;'; put 'put ''MU1aMFJseih9WStnM30xaGFjVmgsVWEqOy96fjBHb0FoLn5ocipye3tVLnJVUlJnZ0FNalVgXSRYVWRrYzU9KzlQRWZpbkJle0leSlVfaWZmJmFPY0g8NS8kKk5xa0Y4RyNKd2NGTGkjK1V+XigxZF1OWzIjRW00U2tRPTBLXXkoOzYjPUhqfSVXazFRZl19IlhyW0lWIy54bmBlc2Jnay9CKktW''@;'; put 'put ''THczN3lDWC86ZGFMOD9AaW1PJVNVSl9yPFZiMk1gdDNVUVNCUTNwVHVLK0YuIWpfSyU0YzRySDh+Xl9QJiZFM0l1IUYzcyp9PUtoQGUsUWdOOFNOOlcsPl1WLE1IamAje2hzQG1ZOWtOMXRDdGBYWWFyK3VSd3ZfaDYwYW5ERl11aE0oZjFyY0tSMHY6fiN3ZkhmZGJ7aDJNP1M6KWx9eHZQRm1k''@;'; put 'put ''SyZHJDorSGxZbVFlQlA2T0tiSzo+bmBHPVsoZl5fSEs/ZilseXFRbltOMGxmTCwjYjR1Oj13Qyg3TEtiWFI1NVRnYUN1a1N0fXpfXnkwSlY8RSJsTEp8enImQylYWH5oeDVFXm1YQzxba0FnLHdlPFtLVHQ3biNoVTZiNC4wOE9oIk1dUV1gdzBiMFJtP1orV3xiRntSXj1oZSFOP19tSTlATS9D''@;'; put 'put ''dlBOViVESUxKKiZeX31IRl5yNDFVfTBWPWhudXBUNGhaIXhyT0grcU4uJik0bFkrZ2lqdTNXQmwpcVFMPj9QUW5+VntCNDpJLip6ak5IYCtkeGwseDEoVEd2WT4/JSZoLGlZRks+UCNnL1NLbigkZCQrNylyMjI4fCtLZS9FZlMyWSN+Ui8la3tbbnFmYyROXWdPY2w9V04uLF49Nj5KVTtjXX5E''@;'; put 'put ''ZSQ3ZTFBd2ciM2dFcC8pKjFmUXJAYWVOUl9+Kih4JHlsN3hzYHgpXXc3RCZlLkxlemEuTDxYW0c1fkIlY1ZAMHddPiF9RzBtLz5dc1JofD40bXMpJmMlfk5hO2lSJjZYJld0U2cwbTd+JjIwSXdgL3BKRChRTEI6Mk5Ga254K1RXTkV3YkxdQ01sUztJVi86O3pMbihLJDp9KUVsPVdRTXJuNWpU''@;'; put 'put ''VVtYWXkwdl1mKWlIJjw/JjtZQTZFdCxbJDldWCpCdSp6ZHZHT2l1JkB9YUBOSCp2Tn16ZUM0bnI7KHB0WTp5QUExXWY0UUZuRWJsZEZ+cDtBSUR6eD1pcG5ZRTh7c3htfGlSRGlNZnBOallTZCxWKTxPfGhWJUcrYkA7USEwTytRTlFiPEtiTnk6KnxFOllAajkvSkB3VEVVaH1le3FlZEF1JSN8''@;'; put 'put ''RUI9YEkoNG48QnI+T05DYWJYR2xdKkBbMm0sRWQ/dDFDfFVyYlBvcXQxZHtGe0Esc0NmQDNpPikvMyFQZ2p3ZnBleywhfjJUXz1BfkJBVyVuVT59NWhodSM9Vj4pOnkuMWN2cUZUPEpGVHsycn1QZy5xQWJDNUtlTEY0ZzxuJTRDfWxxYTN3QyM8e216OUR7JFFHW29XRFpHUEZrZ1t8ckJdcXs9''@;'; put 'put ''QF9qTWV1TTRfJTwqRlUifW1LTyR0T2cmNDtxYmFNd29EUXJiXz1tcGRHMC5ZQDdvbDI2e2FSVmB+flQ4OFZyaCkzTjhfSmoycm1CYjBtXjFgLkRIfkpLdkRwaElAS2hXfXoiJVRtIklpQys1TCtseXN0SmgkSkxQNilwfDtSIXQob3o4OTsyTzRAZH1bfDFKa2l5Y1ozVTokSUhiRG0xNytUYWMl''@;'; put 'put ''VUsmfFF2RHNpO2RsUzlJaDwheEh5PFV4MW5ZdVhrQkQhM05aXixbLEBUV3kjeFM8KzZ9aHBBYmEjdVRlQzhMLjQhNiZyRjspeU9xPUJeQilXVyNvQGhTdEppKTxWSzJmRXZ0Snx5XywwYlFhcGtlQD08Yj84NCp5WGFla0laREUlXXpLNUBsZmhWV0o+NT17X3spcCheVXh3ZkR7LEJXQDYqU30q''@;'; put 'put ''XjRKPkIqKy8+Nk9FKSFwJW5qclJoQmxEP3BXRERfbz54MlMsdzxjci94M3hTPi4kXUZFJjhfJDZlK0N+QEssbVY1MHoiPUQ2WzNbP3ojcUZzbFd9NXN0Vyg8MW8qOHQldVdvWVV8Pi56NVheImQ+K3ptSFZnXkUwe2wvXSJtQzNacmEoPUkoKEpLKVpqO21dfmxBR2RVbzZsI2EpdzU+a1UkQnJv''@;'; put 'put ''SEUjOCNTYCJ0LFY+Ij5EIWolUnlvZzQ6Ij4pa0BrZjtHc2RkTTk7fmNBO3ZaLzZMRVAyTlg5RUpYTms3V1gsSjxrOjFURj1dWDYkN2xwQldLQFs+b0UjVVp8cU50KT03dipwd3ZpQU8iLDxCUVBqMnBNMDs8eGtqfklPMHhVZCZDdkZ9LkFQTWdBeDE8VWx7TTFYUFFVKUxSTz9FNmN4c256XnJF''@;'; put 'put ''OSU/T0o8UmIicENmPEpZJCNSU2FNWGAuY1QwJiFFO3ZYYXQxJTR8KUw/fl4zdm9WbUR1QmxnVXh2RDJBKzhNOV57RGVLdzpxcjd6QzskbGg5Y35yM2E9cUsoIjJqY2oweXJ9M0dmblN+ZH1pZFpteyQqTWowdEojOVosd3JMUiZPXyJ4K1g3ajh3TUt4czVHSV1yW3xPNmF+Ki9IfE1VdlhrQGsz''@;'; put 'put ''a0klOmMyIT5DP0ByNEElLjVQXz83dXExREF0dnF6eFVleG5oNU87Si8rJE8pN35KL3EmXTwmNTBeQWcwL3FmLjdPX2g0Tm8jfiM8SEsua3ZiYUwmSCkhdGs9JGFOMU8pd0VAWClPT2pwYjJTQFQ/aFQrbl1tVmc9MHpzfn5ie3doKnVDSjk9alBDXz00fV1OZ2Z6blFWMlFpYnZFJDJLTjlMRSRr''@;'; put 'put ''WUl1dyI2RXd6cXk1Zkh9X0kqYlt2Kj0pJVY2SFpra35CJlduOSpLdm1IeCMhfU1mbyltRXVRaUtOY14rc15pLHlMTTpyQ0FWcVNoaWNROyFxSThYcSteeEVEd1gxSWVtOn1QdU4sbyVfdzlMJmFUU2Z9YE44Z1UpQClrPEskO0c4QEZbMS5dSDBRQ0kqMHRyQFclM2orSnxkNjtaRyhJNl1welto''@;'; put 'put ''fXE0VDFhLlRZKVJoOio3UmhGQ2RZLyloRWMrfSZvZngxSSN9UCJBfSsqNH1iWis5aCVIfSksR0FzR0tkcWlgZVlvS0FVMiFhKiokVCJJc0BRSHFDQ3Elal4zJTg8QXFZK1FUPjZ+czR3TTphVWRSdX4zZTR3VUVHa0Isej86ZD5aVjAvLiVSREgmJXRvVS86bHl3VkAzb0NnaDhuMFN1YG1yYUJ4''@;'; put 'put ''TVVCckpoQWciPXM2ZHdqdVoja1dbc2tFPG5qeSFae2VFYHJHIlE0fjFbKkZnNEs2cmRVY3UxNHZ4MmZIN3I2dSRTbFZ7RCt5I29+azFGflEmYnJNJWcyTyFkSTkvfT4vVG1uYD9NdFU0LktfP0U6USQwW2giOkpnU3o9T1MpI0U+d1cvb04hTX5+UT9RI1c0ZmA0PVdfK2daMD1JKm1HUDErdjtv''@;'; put 'put ''RTpzVTE3W0NdRzhnPjdqbmNwOD4ibj5kUk9lKnd+RSpaZFN0YktlfV0hMVg0XzlQe15fKlFpZ1RjX2sie359Yyt8Q15mMXZMPHxJd1kjTGxMLz9WKktpbHUjS1lKdjp2cCpDPTY5UWJaJk0kVVhYPixTXTUpcVp+RzV6WzRuWDtkZ30vOzYlbHkwTSxvSjBnWU57VW1XP1F7NTR9NCxbWz5mdyRH''@;'; put 'put ''TUAxa1dMWFhhKzlmK3IhZzNMTzxUM0VtbGNHT1FsRkwjYkMvYU5FMyFLeGxpPmI7Vlk0Yk0uaSg9SSU5SUFRLnZGcjBVfkg3VTxPIm59JSU/fk1IV31haylQKTdkIktfQUxLVHArMXxiJTwwdmVsPE0vZnkwLGVmM0BoTXhNNSMiS0RrM2g8TnI9U2BySz9PUlJdc19qUVVQQk0sLjE4JHFMfmA4''@;'; put 'put ''VSpePmVIZFFlZEVkL0dLRjkkPTBoeHQ0Jm9zbEZfKT5PNlpFOXJuSFtXT3JGfjlwKVFxaVEhfXU7T0xDdWYoY3psSFZ4X1lKPEZfblosRnRfZk9ZIiVJUWMzcDxPaCgjbl5QSEVIYX1eTjpAckRCMEROfVsqKn5eL3ZRUjdJeixaPzEpLjR7ZyVndU52T0lxa09YYzJEQmJCL0I5cTh5PyoxJVt0''@;'; put 'put ''Ln5nfSIkeiFKaCV6Tlt9NDo/clt5eDd3Vj07fHJsYz9EUlZtRykjdCMxfTdEJmxmPE5MdTE2RkxRcHY4RGR8LmUidktCcFNDVzAqSDxZM0tmeT1sXz9mNiIkNChaSXJqI1lbMzk2bXxaej41L19XSD1LOTJ+LE1zVHQ9Vm59JDcrc3Qyfmlfdz5EW145PmdkbGxbJVI+eTRLKnNtQTBnYmU4L3Q6''@;'; put 'put ''b1oldHVGWFtPUEJUbzUxe1BQLk1JbTBZYT0pdXB1cXI8JTB6SU4qdGhUayJlfi99emVyKX5QPVByPUk2PDxbOnx6Q0YjIXxKMTIxR2ZOOzdeMSgqdmtJQCxzQn11Rjx7bHtuMnVpR2gleHNge1g0QUk9eGlTWyxyTGZoXjBHTThKNC8mL0xeL2NGJE4jeCFxbk0hOyFFL0dFdlg4YDYvalYlUWcx''@;'; put 'put ''fjpWbU1DaUtKSjV5UyZZXUNbKUtJczRGI2lyJX1bYTJHazZqTWtbbGZiMGhAcmJYOHc/fT9TP04vZzReN1R4ZHZSK0AocHZnImtXN1s8LE53QCZmSV8xb357OzkxM3V3QSUuNVk8alZASCw4a1ckVk4jeFdrK3RrXXVCOVNEVjlTI0FMXXooflZVa2I+cjtsT0lEIVFgQXo9NjYwOD55RldFOyJi''@;'; put 'put ''Qz5pUXRNP0w0am1jKHIpNl1CTkBSeHsjO08iLjtvV1opJVQ8Mk0wO0ZGRFYzNWgxNlJlO0JSXzM7NyNYdWk+X0RSQ3UhL0ZMSHtrWCxgRUR3JWMlYzNTMzxlWVVrTCpuVk8rcmtUUC9TSEh9JnJ3dG1DNzBMT1tyZWlUeXFJMFpbOUdeeTtEZmUkUyJmcENSe01XR0J8Oj0zeng3VmtDY15rIkJJ''@;'; put 'put ''XVpSI1JgSkJkZ1kqWCpPTCJyRSVsOmhXO0oqLnd4e0NvIyZmNldvbFV7XSVmakV8NzpFTjNvI1Y2bm9jdGQqI3NQbmRUejQqeysobGdNUnF8WnlYSW81PyNpVEwhS0JzQ19lZGIuP05hW0ViejJyR0U2cDRpZ2ZSZmQxeWlPKCkxM0w/RDdBc0cjR3VuQmlCTVVhJGkyMj95W2ZCYVtGVy4rYD47''@;'; put 'put ''TzpUKVFtS1ZacklGVmNkPyZac2g9PiMjS0YhJFBle3h2Zz1+OSU3X31dMTB1MGJ5a1sofmg3cS52WEI8aExLNnBZVHpNbUJ9WWJdVklabXxkV0A/JnFORDk1PmEweDcuandkXWA2OWtoQ2k5dURHW3Y0aHRFRkdQV2oqeyFaWVFkJmlBTF0vX3RCQjswN2xddyg3KGtVZihyKGw2ZmhzZjU6eWtG''@;'; put 'put ''ZWNIRmc7R1Yxfl81TGVRQDx9OHNBWi80YFI2MHlsXWdFckBtY250RyohZ3h8WFVfLlMxW0xkUkhHMC9AeWIqSTxdSl8rSXwmamhXamB4Oz46TGxnLlVkRX1VNm1daGhMYD93bmR0TDxPZFczWlVhbjFkfTRNe09WU2U7PWtpOCJtI15jJVheMjM2JHRnS0N6LHB3LGFVMCZbRXc0eXYjQyQwI2Ul''@;'; put 'put ''XXA9UCM6QGR5IW9uen0/PyU0PGZLajM0VHZqXWUvQGhSZzNdRjY9ciNfXUw2PEBYYltHLD9XMyVzS2dlUXdwJVs6SHIoKG14MGUlVWA0ejJlW1hZYjsvWU9je2xnSXFDXy5sbFM+SmAiTl5SQS9dYnpnO2EwcTNvcDFJMiN8azxNRz49KWkkJHk9L1Fxbkkmb18hJSZMSHhPQ09QWytZPWwobUVG''@;'; put 'put ''el54ZyUzbyIlcD14eXYkeUkkSU1fZklNbXlXTzd6fFE/VGQlU2pAU2p7ZT18SGdzR1lebnlQN3t4ejpIaS8sfWZTQj5eUW9qbyw2WChgVE5xWUFFbzpVeGFLOnFRLzZYKl9RUD9PST85TkolZHNxbXVOJXFWRF8yTUApS2wjbFp4UWd9TjlfezxGRilhOiJhOVhPMTZJaVlaRmclcEczKzM7UC8h''@;'; put 'put ''Vy58VmF1fF8ySDo8SFFQWWd0NVpDeFNkWChEYnxddlhaUStdeUF9RWkjMkhNPkAySGNJWzBJX0AvfEVVZEAlekN8ekp+dy5QKSZdcXF3VDNkc09hc3AzQkBiJnZkKl9YfUdMJWYiMDp5KTdtK0Vub140cXFvOWpIRHtvXjt6eyxNXmUxKEEpI1t2QC4jTytYSG0yZU5Ha0xRLGUhJl9uUTowYU90''@;'; put 'put ''PXV1RX5NNUdLd2c3Xko0XzhTSlJNaVNvUlc9Py54WSZifGtTbyVJUWIxSlheKm85Rz5CQVRqMEcmYSlMV3FxSTBIMzojPXNUMWpEbz1AZ3YlY3BBa1JdXV9fNld1ZFklcm1qWDtwRnp7IWouKjhsbHV7PV5Aa29SRz8jWkE6PyZHV1V8RWdZW1F3NXpgUW18aVdua0BaPEJwIzxzWCE4NnQvI2Up''@;'; put 'put ''TSFJVWlUMEhzd3JVZXNTcFM/fTtTLmxwXWl1QWhyekJWaUJ2WGZwMVJkWzglVnBLO2FdcjdALjFAK2QreFI9TCk2O2pte3BSJmkpYCFhMH0ja15BV2FiVitJMlNSQ3Y5YjBWeU9PMjVsdDUoYDtlb0hMTV8zJCVpW0FjXTFGMkJ6Szs+RD9QW3hzbzdzbmpeeVFvP0kvV25FKiVzXWVsZFBtOERa''@;'; put 'put ''USFFS19jdFA0UHR0ayNoMSpaUG8yYEN4a0J+MD1aXkNIZUJ4bWQ8QCM1b0g0X0pebEJBRH1eYUdmXXcveVUmaDhuIk18XV4yJEZgTilrbyFMTEdzKU5jUSk+fXpBKHdXSWE6V3czJTRaVDZFKG8yW0FiUnRReUF3OnVSZFNQLy9GTGZCe0w+akN2THJ0N01ZWmNuQ0FJc3xuKXBnXyMpZzc7WVJq''@;'; put 'put ''VHtPb1BjbkMsc1J2L0ZzfmgpfFpWKWRnJC59KjNQaTo0QW05RVJRVSY0UDJjJWFgPz9XSGQ1WVoxc1pub2BleCRYY0NZT01fPCRzc1J1N24yITJzc3xJfjR+YkNEJnhQXzA/aWRbSiJ0TTprT3RwTGE0Nix2VT9tMD9NI0lafGhTNWAyWmlTLFNIdURGUGEwNkNOMD4rJnNRLFtqJispb2lNI0xM''@;'; put 'put ''YTZeUUFlOktGeDUiRWQxVDVdU20kTGI/T2xBdDRrPFEmK1JyR3tHVW9rRlo6eWcxNigwWnJsI0pnTHN6L0pxakBbR042TEd0NDciS2lWTjh1I1J7MGojKj41O3cvWW55RCpAO1k6Iy9DTEB7WDIiRH5YYUhdUHopTFdrL1cldkk3QE4+T0kzUStfb3JnVWJlXUhDK3omMjBwd2hxe0E0RXEkNHNn''@;'; put 'put ''MVpTMytHZmh3Tk1aT0gyXn5mMTFxfEtvPEVlIkd9IUhELE5ZdGtQQXlieWdffH5ALGJrMlgyeXFHTVhgNm5RblV6SjkwQG9pNSIhSklwYXA+RHYyWi9pPkhFUndSe0JzOE58OGUqbmEzXS52PkZMLzU8SDopc3wrOWRFM1Q8clEsbl9pMEVGNWNoRFU/QHBPaUFQNVMyMDhIXiJTJndPfVsjSks2''@;'; put 'put ''S08kUXlRWlVKQnI1PHk0cmVHVm84QiFdLC8mflFkJDM2T2tRTi9gYmVFTnY1cDpMQXx7Jk5SJEBZbDs3XT58eSNYYWtLfGE/Vk14ZWQybjZCdCNgbVhiUD1LZXhwX29aOTJeSzZSPkZRbGJJX2lbbzNwKUMpazBBPUIvVHljZF04Q1E8fTU+X3wxKjY1RiE6eFNaQlhLK0RbIihzWzpIYUdIUSRO''@;'; put 'put ''QSZOfmJSMiRZQm1CQT1gNXFFOyYlVUFeYVFLeWdpQkBhYnFRMS9VdlFaIUJRRzdmMGNPVCs/cVB+SmZZQ1RpRX5VSWM+fDtRMD5+OCpvRX1ISWwpN15dPmQ0Q09iIyF8bmtIbCNFZygyWiQmPEpTXTR6PTViWVI1dTB8Y1N5MGRGRC90fjliOm9GK20mKiIkcy99dD1fKTg4Sjt2VTVdK1B6RyFe''@;'; put 'put ''K19dcltWZUVzeiZUQiY2TnwmaXpuT29mMllxLiYvVnNET0kuJlhVNDRFeUNWW09COi56JWN3LmJeJnZ5RV5FZkFYI3EqcjdzQ15gNURQTWNQJSswO0RZbHpUcVVpTms9PH1vN3JLQSFjSHtNMWBGX0pbeU5pNHI1WEAsaSphOC5nOjgoNCNtZF1uNUxaQGJASnR5W3FLamRjTE5MUm9jOlFhMGBZ''@;'; put 'put ''P3N2ejI7TnJIQk1VfWp3aXtiPz1oW0VaQE9FK0JhW0xaQ25tQiUueURIPyhTdzpFaDQqTTtBR0pVN1N4I3hhWXh2YkpIRWRZRV5HIndGTT50ajczdFkjZXYyUSp8STNmJStVaC9ddWpiTy5LKSVXZG5xZXlwTilCV0E4OSFyTDNTUz0yKWx2Pj4vV01KOUhJKDxwQSNOSCxvNCRtTkApdVlMVi4w''@;'; put 'put ''RnNDLDl4UH1mcV5JMHs0c0Y4cEUwUWkwUDs+O3FafFpAbzdZIyR5YmtKPi9hbSxuVzN7JjBFTnlwRjRMXnpfLkJsPmwwNVteVWBsNyJCZnshK3peLFAvZyV7RnpLMlVab2o/dHtGfHVAKGtTJnEwa1JJQik6dGVVSntsRng/WDJVeWpAXUs5SGolSktCZm0zLzApMjpIWUgma2QwP2d9SS9oUGBY''@;'; put 'put ''SmcoZDIxamxedHJVTHJqUnc7aH1BJTBFI0heTyJ0cDd8aTN8RGNDcENpTChBN2c7Lkg+SkcmUChFQU9FUHkzZik2fGRafF1eLj5HUFElLit3KztAemhDY0RTWWluOyZlLzIkTVlvYlEldSs0OjFXVy9GXVF+SjkpY29LZiYhYEB3IlVlKyVoTzBWJCx6ZiYhYSldKCY2LyFmZndZfF5NajooQi9Q''@;'; put 'put ''PlQ1RD1MOylOdjhoQW4vQmokcms5bC9Obk1nSXB1OU1mS04oQzUqITtiMk97YmF5WltWMmszWFZHMD8zXXNkTXtdMEBlTWRNJG06bi55WTpOfUghb3hiNTImOlVXIjRZKS93dXMyX2BNOEBKQEJeWWt1V0xKXmgrbT5vaHlyPGN7Y1VzT0RDKihhRi8rOEdRanYyK2J5KVExeF9OMD4lbm9wWi8o''@;'; put 'put ''QG0hT3dvMWNDIXJ0Ui4zZmw/dS9TeVhkbG4/Qzg0aWAiRSQsdUJXVGVlRSE1Kz1MSTAlRzp7Mjt0KUtAOkV3PE5oQWZDXnoqLmx+ekQubV1MLkh5VGJYJSo+PSpfSWkkMCM9eHtlK2wkM2k/Xz5YYXdzZSZYV0h7Kn4+UVRPUyxMR204bGFgNVE7K2ltPyZidFp8ZzY0VS80SGBAanNGMW1ZS1ci''@;'; put 'put ''aEQ1cDlTPEVYeko4STU3ZlJSc0xmPU4+cFo5biljb0dZZTlZVTZieDBaKEd0dylZJFV0XmksVnVfQTUvK2ZYaHcpTWFiOG5dYzskSnhrWC59WEVzQnt0QSwrPVImQiFFPlhwW0hyWUxUWSM3cFt2X3kpT1B2ZkchX2FSSyxbY2M/ZlJgT31oPVM3OjY9NVdYTntEQnJlQjZLYHl4S0dsPkBAdW9o''@;'; put 'put ''Vz9DfEY1OiRxc2JLV104OHBtVSNfbmU7ZldIQCNONE9CXig9TXJOKl9zVSRKUTA4bUkzPCVFQHJgbm17bVBkaSImRkVzI2htLl4yJmBrYXlaT1BNblN6fjtWIXJidDNrL2YxNjpIciJBYU9zO0UuTVpaL1JgIiZGPUI/ayNLTlNWWE1TSmZ7X3JaY2pkdiZJTndGLkUvYFFSR2VRNU1zPDVOaW0x''@;'; put 'put ''KXloOUs3S2BjTCxYTkZlS2AwTEs/TSZnc3w0TmNCal9EPW0lXSE1P11UbStdXSpCfFM1REtzJHtdWVdpRkVAbEBqUnUuTERKT0dCfEZBJiJdfiUjJWBgSEZmckQ6Jk8yP3VFTnVze0xEe3Q5aSh4WmVlKFcmeF89LDcjNl40THo2TThXQFZIJDckIUA+e2U2QCs+RFJOP3tyVSo1Q0oqPGI4e0Nq''@;'; put 'put ''bGwqfUAzQHcieiR4a2ZHemEvJns4c303VmNmWyEyY1I7OzdsQn07U1R+SUM3V0pSbm5xMDRIdzssJCRSOnZofXo8V1hAdUZGIiQ4RS9OclJzTXlYfj8+NEhqbSZ0QnkycTtGZ2x2bzdDTylidEFVTH5lMDwjOVc8Kn5NdU1yUWkka2FmZFFoJmQoalRWKFN8VzZmfUI+NCpCcCgzRE9LN1ZHXVFQ''@;'; put 'put ''algpdVV8RDBVVnZ0dVc3R18oNGJAezVZOGczXXVDOz1DWmRIVG1UPFEvIlltemRXWX5sNlsoVH1OO0h8VTMpT0NPKE0xV0R4LEBIRXlgczRCMUVqYjAmV0ZweTMubDpeIV1AT047W1lsZkZkflliUiUyX0tiIUBdcixiU1dmWShFY09II2lZeGx9Y0hSNjBAb1k6ejJ7MTguVkkyKVN1b3AjaGsy''@;'; put 'put ''Tn5DU2Q5cEVXNlojMmQxZDl5QjFEe0I3SVNkZ1c7cnJaVzRtbnR3eFlrcX1TQXA8Z0BGbFBUaX13SDBaT2B+XT40MW5Acy4vPUVgW34+RTdPNC9raH0/XW4uYFhGd09iZW46NFI7Rl95RVdwOjllK3tMK0tPQjkyaCpScitLQyoiTFleSzwkSiNIKT08PSlxeHVRdnVbKkFhNVliWE9dfkUzOkB+''@;'; put 'put ''cEtnNT9WOTReO0FxKDw6fUd5LFJpJHBiSzI8MmYhfjApXygoQ1ojS2ZaTTR8RFtXNXIwOHhkUlkwO0REdXkjcExwTXcpOlNNIlVmInAjbTguQldCQytyV2dALCJ1WVh7KH5MJUQ8ei4meWpde35pQjd+RkJlSFNGWyVZX3RHVmorSmpHNnUicU8jVUtBNCN3Lz1KY1Nybz5KMyhdKSRaPXlyb1lH''@;'; put 'put ''SHJMQWFtIj0yb1pAQjhaLDpHZ3FLTjJ6JU9uc0EuJDJ9MmglKHNmLDVDamt1KnhCO2NMVzhbUVFWLCRpfCgyZCRUR1Q3OFl6KmUqUko2MG5AKHNWQzFQOUV9TkAiSDE1Rnw8dlJBTUhIaTIvMW5LdkRQKV1vVmc4TlM5JWFCSnZUO1t2cUlQQmJzfTxoeHhOYF42ZE5vODo9UGI9aEM0RyFteXA8''@;'; put 'put ''cU1bUWUjKzcjJVEjYUcpXmB8O0c0eDA5NTRLe3o8MVs6cVlAPj1eQzZUQ3tFLk1XbWlQYzgpRGs0KXk+ZDdkZGxIU0d+fHlsT3JdbSpoY3dUWSFuR0VrNHw0ZHs4ezp1M09rTDlTPSNOPGk0WDBQUTFTMkhCOjB5PWZ7cExdZnV8JGYsUyhpTm9kSGB7Kl5XamJNKVk4PWwyQmsseStbY1lEcnYm''@;'; put 'put ''LFhENypORHJLQ0o/TTsxfnhYKntjJkVqJVc1Q1VEbUV6OiN5KEpIKyhoc0pbe3NPOUBEOnBnfDNZVnNlZVd1Q2pRYTtIPyxaQztISio2Q3h9fDk+OnNqN1MiMFpRXVJxZUg2K11odVEjYVAiUS49cUNyaDJDV3t3On0iV3NZNyRtN3lpdUchRGROUzx7Xig3bzRiTU8yR15MVFJ0XUVQLjNJVTJq''@;'; put 'put ''NE9HPDhJa2AmI0R6dG8pejM7QTNafmh9Nj41OVhvNFJnO1pjUGt8IXJHRF4lXU9NNHRkVlZRKkt4eUd4RCl7eywwQFs4MXo9YnVRTkszfUxsWCVeXUZQJlF1Pl84WlE+VjplX3A+LmhrZ3BMQy5hV2xVS00qUT9lRUIoaExkc0lxOlFURXFqRCxOWDg9OH5HOmcmenVKQDc3bUdMN3hxZG8pQGlD''@;'; put 'put ''fEdxMiw7VlZBfmRfRVVYRE15LGM1fFhyaF4rRn0lbHBKYH4+ZiJzYF9kZUM6JV9AZyh+VltLSC45UHVmN3I3QkQiUWlqN0w7NFtYMEVJY3NYSDpoW1BQbkwkQD9COlAvdmN2O3dpRzZeSSomLFcqU2haTFUxLDMqbUJXYGJZfWJwPXE9R1hAQyl0N3lacz9YQnoqRG5ofEluQT4ka0FfUTh8aHgq''@;'; put 'put ''RDE7S0l+Mi4xY0xqMD84NH50SWhbOENbRyMlfixhPSFEd1EqfWhRYzxKfF0wejU8O0tmYUIkalVRMVtRMT9UYGxJeHohRm5CUGQwYC96RXRMVVkhOWE3aUkyeU5DNGZeSCFTVE1WQztCMnE/Kml5KGVCOm0sRHF2RFNZcy5ZZldWO1Z+PkNrZ014NUgrQkp4OWlDVjdaJFZ0RWAuJCYkdnFbK0ci''@;'; put 'put ''N31IVnFkOmhWYil9VGJJfSguNWdLaks6YkRkJmErPX10ZG5pYWQlWFphfGp6LExncHhQfGw9KnlCLHlaemVpTytXdEh0M2l+OlA6WHN3QE4kOXFmQ0BBaC4wSDhGJClvSVptXysjSGNTMCs2UkZ8LkUoRXMjImkzJlsjR05Vaj1IYF1HakxPOSxeYUc8bTRIP2hKcWQiRnRnOSR4fVRhaiZqblJ7''@;'; put 'put ''N2F6Sl5fbltobkNsJUxkVWBWSlptN2lTOi5MVV9lMjY2dGFESzBiZiN2WjM9SXJud2AjRUZpI2Bab2d5X25VeVk/JTUvbkh1XlE7YiNQLiQlM2srfT98LmRzW3thfjFnLj5kW1ZITnB2KGIvQ0tJKkZ2cWo2VXdQSiRLOW94PTFDMTRIe09OYSksdjhjKWJpT3tvUldqJEdqV3ZuRlsmdXZUOnFR''@;'; put 'put ''Mjw3eEs/YnohRGtwRyo6MjZYeUhGWEVpX0RlXjlbS2liRF9uU0JgJEQyWSwpe09OKi4qOigmXkEkLytDJlV9Wkx3bCl1Qkx+WkohYUBKL0pkKkhiT3tCajY9QmRGSSxjbVR4dGRlPjZjY207enk9enVgR11TemE0eWUhPmJie2xBOmhjdWxGO19fL0ZQdnF4fjpoU0pNdFtbJTJlWGslYilvWWNb''@;'; put 'put ''d1l8U3wmVjZtMnVfRSNGJWBeKn44bkIuVCI4UGFVNC92TT1FT3dEJjZ+PV8hTU9GLmtLQFBaYD10aVRlPissQHRCfFhhfHZvJDtfQCpRbFFQeDZ7WEh7UF5jU3I9XlhpalMqRn5RSSRpWC5pMWcza21mbkJQK2FESV54aShCQWgoQ1NbMU9yVEtSKVUxaEpRRTwmKyEzNSVzMnF8UTZyJXEjaTQq''@;'; put 'put ''UmtGW3tPMTRiV3AxY0A/YVAldk9adGZ5RjZ4ZCQxODxhPUpQTF5KQ1RDLCUlPmNLdDRfLGspXTZKZCRxOmllSShMVi4+UCYyZzdGcVFfKXRTbmJLalZtJCZ8XmNLdz5Qa2xCZDQmTythbyQlVSpsaSZDPC5hR3EyMS8wdkJ7PGtMSTN7JjIrUVU0RmhoT0NQTjQ4USUoen4kYHQkRHp+a2xMQHFo''@;'; put 'put ''ISI3ZyNxYFdDWHFwR14+O35IVlBfUCQ4SzFxTkxqMy8+KWQ3R19gQ2xsIy87fVBpOSswKlFCemJtUE0/dVE8NDpITiE+SnxwbjJlY3hMQiR6XzlAPGwjaXZOSTlMIUIpI1NuRXg2RWBdRD9rPlgzODJ2RV5FMCRidz9hVGtYeSV7MHlhcGEqY0AsIS9vMWMzR0ZzOnV0Vlc2Nngpc1IjJGlObDkk''@;'; put 'put ''WVNIKDtuKEMxaT5aJEw0eC96Z0NjblFXPmBbZ0xqJC4reVMsOVFRbVVCZ2F3PW5FKWI4fStAd1V+MWJTP3FaRnIpKGU7YnVrTFVhPz9xeT8mJCtUcXxwW3ksXX5nPns9ZDZhSFV1KiVWRDpZV2FnbkNnXVJjQ1hIbmdLbFlnYlZodmU+em1aPVo6RVM1ej55bHtrPGN9JSIufDV5RGp4Nm09ZWgm''@;'; put 'put ''M0F3fHBkNUx0W2o6QDEod05gRlldc2NPO286Ki5BaltUMT9LTW82S3dZWnpaJStMP0okb082N05VL2cjTUZBVSlYSGQofHkxcUNCMCo6IzI4M0BTZlVfc0VhMmcrZSkkUStxK2EpUzUzLnc2fmh8XjoxVExMUHlAYEUsfkQpITtMaEtbTHxlay43WHV3XzljQ0t3I2ROKVA5JTZHS2hSN0VUJTtH''@;'; put 'put ''fnVCX1FYd2EkaHheV0ROSUkmWEM4PHt4UV1wXjQ+UyN6JDo0M0NLKSJJJF9zJVdMN3tXZEZkaFBedG5QXU1Yfmt7blFBdmM8QndKby5wWiQ1bTJNWTBAIiNUJDlCRDF1OGYqMlJJcSMzeislIysyakV9U3dkVilHXX57Rl5FaWI7NitIPmYuWE08OFo7cFlhb25afVBxITRhI0lsbV52O0o0P15j''@;'; put 'put ''TyR0diUqWkBtZGRgTTI+N19pRF9EXiNFOSl7eXQ0eXE+Kjl6PGNwWixFZWRSSUBuKHJ0UCVnT1d8c0k+QU8wb3x1fXQyXT1LfTpqXWNiKH1fTHk/PFUkYXdJYT81WzN7I0lqXkVGbnw/SnhRYyElLyM/dkB6UXcleC4hKFYmPXN6fGRORT88YGo9IXUxbVZ+QVt1MX5XXW9pXTtVfHM0ZVlfbmJo''@;'; put 'put ''cHdSfnw1RT0kTFdoNmBCMH4+SylmUT9qWHNOS25veFp+KnlBOV08PyMrM2kuRTVSR18oZnhme3xgITlneG1WZywrJWdiYWVeMGhuWTd2ME8vZntvZ1FUJlcpTUl0O25jKk44KVRpTjRSVVEsMXhsTyouTjJuZFlOYEEqe3pGU0I0RiNTJlYoc3NDWjh0RUt7dzk1UHhLdXk7Wl9tW0l1VmQ9L1FP''@;'; put 'put ''Ql0rMXhYZzpwdSxkb0taISgpbFdDZn1VIkpDfVEhYilaZzg7N213ZkBpL3sme1c5JHFwdiJPRz5BQE1ifChNckBdc0ovaTZSTS5VcDtLaztgQ0E/Nj9CUiVaR1JjWSt1cFZSX3pfRTR2WjJARVQqR1tmXzxYbCF0fkhJOyk1MHR1NFpLSnYsNHg0Vj5iZT9SUDVJNGhtQTJtOmc0OD9GWU03V180''@;'; put 'put ''Zk5zKlFUT1M3LDVoVSNGOFpjMGViKk0wMCtWdFtWY3xAKllse3VnQWZCbih0R1g4MyUyazswJE5tflZXYXYkUHtqbUtIUjpxPCE4ezhUO1YiaysqaChgLDRdUE5yKkspN0kydH1TOyRhI2A7SFMwXTkzJHBNYENCPXc0Lk1ATUAkLlMyLEc2TyJZPj8mRXYyLGBZIzAxYXFWUE5HNHQwPGVqdjRn''@;'; put 'put ''QW9uRyE9c2tPeEc5Mm9eS3p9MiRDMSY5JTRvW3Z5OGMwX29dN0VEKHNuP29JMkd4c3M7dzUhPVZ1JEFrSExPVz91SE5xRS84NG4qWTdbZ04pSEFIYnNINkloTDUuPjpzUT1CN3J8SGd5a2FhMCo3Xz40RW5fTlQoc2FWMmE0SS5XTDZPJDo+UDU5P090YXZ4Xk9jPCxdS09eaTNtVTR2Zj5UciVu''@;'; put 'put ''NVIwVUVlVlt9TWR2bWs6cStMJHklYSN4RWkpK0dCQ3Z1cEA3LG5PNjg6ZUo3ZnozWXpENDdqY3Rrd19pS1N3YGM7aC5GclV1IWhNZ044W1tPdnxkJGRjP1JdMTtjN31dcm5bXTw6eWNvZ0UoTkNPNVJAU2p2PGErfmxaOzBsTSkpZUtibE4rL3BYKEAmdCQhRk4mW1N+NGRrZW08UG19SyFVJCpw''@;'; put 'put ''ZnByNE50KWBDej5FMkc5O01AR3ZlRVttMlV+UkwpYD96R3Y/Vj1APH4yKDtZNyMzMzphXlokSCo5amk0Z3BgW2k1Zm1+aGtjbmJATSNCOzN0ajwraz1kYytETCRTRntPaz1zcm1pVT1hZGo0WkZUfTtKQX0yQiI0aldsYjtCeEJlWzJFbUEjRUpFYSVhJD5FWmBDWlNSZD9fWCxtM04hKjI4cFM/''@;'; put 'put ''VjcqSCMqbCtjVyp4QF9VbjI3fENfV1U5QDJoYzR3fE50Qm5gSXE5aj5PYUF2MnN7YCZJTGZrfHo7VVgiNV5JezFCKmNMaXo1JTcqV0pOVUMkPzN+KVNgI2xtPDVbZVkoXk1ePjJVYy8wL2NgNUdYTGZyXURHSGB7LFoufGZ3JUFmWWUyK35HZyk0e3N9TD8yMH1ad1FFaEFESyJXa1ssb2VWfTQw''@;'; put 'put ''O2BdTzhKQE5KbTtHMEpTRls8Ymw7cl9yNV4jVz4+UDNKans5cEZtXSo7c0ooaXddV0gvcjl4TVUoU09pKjROSC5YPGM0OGIrSyk9T3NMenR6P2kkNUxxOW4zdmtrNlc0LjZwbH4qclo+eVJZMGZoREA1VXkjL1AuNTNVR2hYenF7NWFjKj06QD13aTpSXT58UiNbbyk8QGFhJUg+Iy8kbkIxNHpe''@;'; put 'put ''ajd2LF9DW3Vnay5qXW5ETjNkPHY5fng7c3BdIV50MkI1LCNwNnF5PXxgbWptdXUoaUo+Sj1RVHp0cF44fVV6fVorM2pQK1Y5JlBdTXJROWpTM1BfaXVjLkBwIyxmWk0uOm00ekF3L0VrTSghN2BhMjtlXmA1TWBsV0RPMHsqa3VQP3JIVzRMS1lbVy9mRDxhYE98V0NIZmc0VEFLMG1odlJzOUJk''@;'; put 'put ''Ok5zWVJwRUsvcS95ci9XPGhlaypQeWJUZTtqekBPW3ozNF5YPytsKFp1aH5eWylBWFY2elZDOyZvTWAxYjBkZ3xNUE07dXwwI2wxb2dJQE4wTCF7U2N4RWYxUls4X3Z3VWYseSxmLkhqUCFvYmVXVSJyPms+d2E+UjtnYTMlTFYoWmhjP1cwSVRzRDMlZF55STJfQUxzTHZ8djpzcCwxdD9UYmJ9''@;'; put 'put ''RjpeR2Q4YypTVV0hZS9FWktpW1VEOiFoJS9hfCo2bUQmcSwuNXNNQHBZJXd1QDtQX3N2L1hwSTM1Q1BJSFBWLFojKnEmXjRZe0kjM30pbElWQTlrZFRVU1RIfjtZdlhWLC9VYUlxJU5fWWx9QGg0Z1RVUmo1bjVgbmImRX4wZ2pVPTN6SkZdcjwwWyJ0OFFAfEBeMUhUWUVsVjw6bWk3a219KThs''@;'; put 'put ''Tn5UYGBXeHVtPiUiJDc8WHwmbj5pPERJO31QbD1fK0QyaFVxVSU7PDtMOyhLYyk8bV9uZFQ5STJlWlsvYzglXVRARUJLeUAsNHYrUT10Rys5WD5WbTp2XStDK21tJF5tc21XREVdMXNgaFB5MlJUIVUpUWsuN3ZOX2t0NlspfSJld2JpUUtaU1o5fldwfXpedXl0MGx7MSJ7PFJ2KDdkKjdxWi8v''@;'; put 'put ''cExiXUtEdD9Sc3VNcllsKCx8PGl4R0Y0VEtqWFkzJXRiSFchLkpbTGNHb0h9cX1WS3x1O0lpTGR0KF5CJF9xLmVGaVp1XjhBKFJZWlAzOyM9Yi9xZFJKUmtIemp+O291aFBROyUldy44bi9mLj5IXUJGUUFBcylrUzI/bj9fWF89V10yOGpTUS81TilmPDlDbFV5Y0VjaSJ9MmZYUnkpJFo2eDtE''@;'; put 'put ''JHNLQzY6YDVSdm1LN31WS25wRz1XS1I8Yzxda2ddMCwyfENTLkNvI2dbfncyU1Z4d04rYEJhdEpVOGomJDp8cW9ZU2MpNVIyYW9PUTorWTJXYmQlU2RXQjZZdj8+M35xTEJeeEt3JUo/QFRuQWkhPVI5YGFwSSR6NUxQWyVYMlBsfShUWyZHemoqVTBGXXBFUCZeSFUkWjhlMGs1OF1tfWd2aHdp''@;'; put 'put ''WHl8P11RTns0QC5eaVZXJiJlOm4wMnM+TTdpXVA3JVoqPChEQkZWJVIrZ213VTRFcVVYQnYpIVJpUkR2SkBqU2s5Rm1ZKkI3cHI1JWEqQSlQKlBAemtBNCM4Yn5jVEkuc3tdPjNpdnUxSWN+YyV5L1pCeXd8SCUsVVc+KVhFfXJ0OzFYJjA2bGMve1k8YllGcWtEdVpWNHg1TioyV2hyNnYoUik+''@;'; put 'put ''JmhycWR8eSRkfXhXTDxQYTBgYlUvT1FRPkhAUT80QVQjfHZHP3hULGsxY1RWLyFCa3pVJmhjO0V3cDBQJVFjMzBCWHxKeE9+SUFOWGEvOTQxekVUSkw9MnAjVVRlWzFSQ0l3UzBzUkhsTXkqSjkjISpKQnkicXxHfFojeThXb3VJcDg1NjFBaGpRRFZUemVza3l1SUYmKVFOd2MvOkQoI35dZXwo''@;'; put 'put ''VzNRXiEoRm97cnI6YE0weHpYV2FrWEd1XTRDL2h5WiVFW0JwJigkRlEzUS9zWTksKFZmQFI7ci5JY1N9Wkp3VlREa2dsRTdncWY1bCZVYDZzP0dIP0BXKWJnNDlZIk4qRmJeKFJOeEt6RWZ1Sk17QmFje1FyO3gsSz1hR1k4SW5DYHF5Plg3IkZaPjdiUEIhdUdURENkMTJCU3Y5NXhrPG1gVFR+''@;'; put 'put ''VzpYMUxXOFI+ZTguT3l8RXZoImw2P1pZV0N8MD1WVXQ5ezk5dTpwaXVIS3JRZi5wSWZFb2JOSSY2e2E3dFhRfERnZUhaa2NefDZiZ3h6NElSXzEsSmZ0PDhQZVgrMTxSXmhYNU0oQ1RlbTBtN3VydmpKIXo4LCJpdiZyWSYvfV5DKG51TjFjPzM9TytjTGJ5Xld5WClZKG9HR1RWdkQ8TWV4ViZu''@;'; put 'put ''LHxDfUlZeklYRH5bKi5Cbl1JKS87cT11RGFUMEJBazwuUUZ5dDxiIl19eGIxLGt4USlDNDM4Tyx+Wn0wOktpM1QzeDZTY0JeZjNiblBAWV9aKVYjOjsoZ2d6TEpgOGA3cTpFLl9eODY7JFJCOlJWMjtkNVpZUntSZG9zWG5gZEsyJEdkVyN1MTN9UyF4b09UMjgjVXt8OGk4cVpadVdbYWgxP2Bd''@;'; put 'put ''UHcyQmdWSUBoQGJOPWxrL25uYCNGY0V4bDFWe1FzMzZscjp0emklTCNvRC9PKDRQSWRuXU5ubzVofWg/On4oZF4uIz5id34hbH5tPUJDc2xqTnszX2QxYTFJWzdOV0A4aXpFYUJIZWVBPnhiaS5zcmN+ZVZvPiNwWDU8NEVFdmp+QE1dWmQ4ME96fWBtMmwxeiF6LEY6LlIpVD9oa3ViRjk5I3oz''@;'; put 'put ''ZiNEXnI9ej8jPStLYGJjKjwzRUU8RlopY2tdSzF8RmR5Z3EkYEEuYl83Ljw0XmAmSiQhbkRMbl14QWk6Ny5PYiZNaj9zJD1gfEV5PihsKFluRzVeWT02PzpPXXtsY1EwV05iKEFYY1V2eCJ9fEouVnEoUy5lRHBLa0F9OkwrfWlSI1dsPGthXihlbiY8ajxqby90OCQpIW1LZ0ROOTt+UlQqU2FC''@;'; put 'put ''azA6Nzs/OUV7cUI/JjFKdWZvOitDa3I+V09AIXZAWihUVDBpcWFYKitHPiZmWnNCe1FjTFlRcWd1RFVxNVFlT14oKjYxZy9ETXlXIy59Xi9WQGU4TntwcV4ifUVubzZAZXorZm9IWmxWI0FvZV0vdEVDd0dbKDw3Q0V8JkQzaWx3KGJVZGxgOG58ZFA3VEFBKltzdktaeURhSGYkc3wzSTcsXUVY''@;'; put 'put ''ZTR6Z3IrWnsoeHxyWSlYQjBKQ3VdRiI/YU5mSy9XRD9HTEI3Yy5FPHZyP01QWmUlJHBJWGp0RG1MIzVxMXN3OUBGZFVHfFJbT2xaai9aXV07LnM/SGlpRCI8YktJNS5+KTpzfVB4XWNGaD1maD1yWz1kcTc6Uk1BNShQOWFiJnRqWCMyO1AwYU1FPSlKKixCYHwuW1IzWkt1aUlYMVRdVGxtbGBo''@;'; put 'put ''KyxsKn44OnpoKVhxUVNWQyNXXmIsKFEkPyh3RX4wdm5iXnBme0s/Mzd4PG8kIVo/X29MOEFTVjpiY1c2TllpN2YwbHEkQnQxYWw1amAzXlQwfWlnQz9yaltpQzcvUmtyWFh2YXZtJHRTQ0IvJDw2R3JfI2ImSn59NmhiZj8kS2c3OT1MXShUYWFvZmV1ajxSRjltYkB0OVolVXMwYk9gQWdPPE9l''@;'; put 'put ''XWVJRTtoOE4mfFFtQ3U7LDBYfD43YzMrN0YicD9JKEV8XlNWaiIyNW4/Yiw9Tzcjdi4rQixaanpJWT52UWRfPTZLU1hmS2tMd2xnO0pIT1k6LEc4Q2Q9NWlSOlIsSShMTTNdWl1oRUU8NChDMGprKkhqXTlkbWdrQStOQTU4MXloQz9Hcz1Je3ZKMnExZXwmeDw2Ui8rRSJNelV3dmxGN2E2dn5y''@;'; put 'put ''WDM1ZDlZd1pBa2twYFt6eUshV19wdlFNb0w0b1ZpI0N6RDVdVltxcFQ+VnE3V3s4WnQrTiQ1aCNPVFJyS04qajN5Rno6aVVeW2Q7JjNfVHxqWj5NbHlZVVhUJio3bzVid1FzclhkS0s6a3ohX0k2XkN3OXFWU3JwdE03QkpqZG9AQ0tIInNec3l8dEM5UnpTVXpVaUcsb3A/JT1pLnFGQkojVWt8''@;'; put 'put ''aHJ4VDI/MVgxYzI6dVVpdG44eXdVVEwqLF46cmNHTkg9LCleWSJRc3gwdChOM2shfXspPTBjMjMoemFEYzRfb1hpT1IpK3s6JEZ4fCYpfTc3dUtwVTZnWm8qOjhDUlN9JjgmNSh4PEZJfT1UI1ZjKGtvb1dJc0E3YXVoe29kTU5WQ05rQ3hpNXA+LGVgeig0LF1RN2tmSCFiRns6fS47UUo8UVBu''@;'; put 'put ''VHVIIWcqRXRkVWk+VUlOZkM6R3ohMyFNeERbVCpBPzx4aUVicVo6ZEFTSFhAZEIkPip6byt5fl9YZmM4KzZaSVYoLC8vUFBpKEdgRnopSCllR15RUWtMJDJ0RiFMZU12Xm04QWZANU17Izs8InYxMlciRGBMcl5dZjYuNEh7JUUlfi91b0VGJk9icS9ETz41TUE6KWIzO0wvIntPTV5+dDY2aC5n''@;'; put 'put ''Z0kleFMsTDp5aCJldkh6dFklPVgrYVFeUU1RU055ZDNUa0olaFNEM1IpTjUrY0leJF1fO2xnYkd0LmAhSzxKNk5qJC9hQmIrJT1LZlN7bjFASWFfZ3d8XlFaR2t3KFd6aVNCSks2alYmckpuIjY8eFRRcDAqYmdxdXIxfD03OUAiP0tTPXlFb3VNNysuQDZJe2FAaXl5Qyt0X0puYTpgfipNNSR1''@;'; put 'put ''ZXFgQ2U7WkVScEVVcSYyNUtwLk0yblQ2JnFQbG82fUgweWtzZnpxWWA+Y2dVNmU1UDtjaURqJVI2dCVNcis8T1MlYzRPeUlEaW9VRXVfVD9MJX4+MkVUKkt6a0ledCFHZWl7RTtpfUNXR0shNX4uZ0QpQHNAb2VvWCojaCJ2d15hJis2U20hSko8RldFaGxCPF9bTC59MGAzfShrWUAvZUAmS2Ay''@;'; put 'put ''cXBTZiQ/X2N0byQ1RyYrV3dwbnozTi9AeXBRR1o4TFZvMUUrQzd6KWk8MEgxND9VPSFaUURIcT5PXWQ1UXEvKSRSe3gsITNJTjdtQ2IvNlIhRkVEdjA9WSxfaVBOZHNkWElJQWl1OzNfNSZ1TSJBXkFSRzN0JikkSSR5aEJ6RyIuYE0sLjE+R1p2Ukk2elVtZF0ma1cufFV0eXg4ZGs0TnxTQGZa''@;'; put 'put ''W3RqOCwhV3spVVl6Q1c0QiNkdllxX3hXbHk5O18yUiNnZjhqQyloWVp+KkdWSWk7bWV9fWw9XjQ+K0Z9IzNmUjYwZ3kyZzxiL0U+NURiKWlBUSFReTg+OkhZdiI7fDlKTVA3YlhNVVg5fGp6VyFbR1tpLCFob0pnIS5PLGljfWo2eUc8Y2IjRm9ESjpQNlA3IUY8KixUeDNiaEYsdUdhdnV4WmNO''@;'; put 'put ''PzUlcUpbOnBZKE1hNiY4fEB7bFpbYHdUbVlEWi9sKV4hKzFudy5aSzIzOTRaRm1BczM7OnA0bjJRJSsxPSg1Zj1DJDcqUFFdITFHUUxzb0Upbn5EQDZZJUBva3IsPFEkJVNhdHEmS2I6TGVgRn45XTJHZiVuZktHVXpiN10ycXAuW14/TU43SmZeK0slKzQwJkppYVsxSyJqaCg9aW5dfi4wc3Vw''@;'; put 'put ''b09nL2UyKig0LDFfRD0jUlFYQ35gU1o3O0lveFBTQjswa0k4cEVfLHxFQGE7eHQrKTtiO2xrLkRwQW1WI0VESjE+bCw8MiQpdWBObygzMTp9fXN5Qn03LmohMnlbeSk0TkhEQl4zSmQqTHB6Om9TJUA7VDpScWp4MHVVPiVvKyRsQE9heHluJDp0dyhuLipHXjQ6V3tSMCtFPEFSe1VgR2hkPHAq''@;'; put 'put ''X0daIWxYU3ZfKSkoOCkpUEl5ZVAkYz9mciNYPGF2TmFJOls1cT1KT117dytrYGAhRzZpPDE6NjEpVkM1PX5HfEQ+ND8/ZlJLKldWN2ddP2F5NE1gUnJzNkZ1RnYyS01GS1doYkBENEZFW0NUIS4pXl4/JEIxWDNAT25FI089SEE2QWwlSkxFVX5Xcj1SMXViJE9kaGpDZ2wrKHNoWjs6UE9+M1dV''@;'; put 'put ''dSRDVDZnL2BQWyhYU2hOUiZxdWIpcmIsQHVnTGtkLEM6I0FgS2NmLD8jX2M5NzIqZ1godHw+JF5GSiw4IlVUey4sUGcsYTRjdEYvNDRYJDlVUSgwRXsvS3gvTGdZanE6cV1xLmBbTCM1UjI9SFp8L3Z4VD9QMG9lKG0vTCUiSylRWEBIaFhbeH1uVm1nbH03RGFJa0JAJitCXUlCSDBaN018V1Bt''@;'; put 'put ''Sm00X0BFP302KiNobj4sOjlLKmkzLChmWG5kP2JkIipjMldmVGpEdEQ8Tn1FWjcmSmw5QEZyaF18KDhkPC52M2h0aTtYTTFJaT8wbTg2ZW1lUngoXVNoIjZYfnExM35MVCVxOjdJMXxRbHVGWSZaL0I9SmQle3V5NUovJCFWW1Q9N1dhQFg5bEJEJSldcitXTUR+IzY8WTpOanV2SSt8Ul9SMntb''@;'; put 'put ''bn5kQ25HJS53fChzIzcvVkhnIUV9djNqXWtSQDx8a0Nxal9LVjJ3VTYkRy4rSndRfkMybCtLZHpFa156anVjcXcxSko/PzdZeG54a1AzSkZfYVF7eWIzaSElR3ZAVzBXJi8sdT1IMH48Rlc8PldVWX5LdHpvLDB5S1MkNSF0PzlZSV8yIzUyIi9WL2dSJGtkV11jejlDciQqSyR+KTk3OEV0VW46''@;'; put 'put ''cHMoQW8vRCU2clAlc3wpVEJXO2FzdUgpPCNrS3VNKUtfNio4aU96QGxieXlbNTE5al5rfklPdE8hUUVRN1k+YT8kPElmLD0mTSUlfU5PNSMyOEJxZEJ2PFBFdEFGe11jdV1NQ1hvcDY6OmUrLjdUfnpCO0BVVWpKXl9UTzhseG46TyJGPnk1Qlc+d2pAejJXPU0uXkxqOGcrRCVkdGI7NmohKnVM''@;'; put 'put ''bllxbTteOVlkaHB9UmxiVkMuRGV1PiR6fTtDdVlaa1tuKmNLPH1+R006az4vbHZkQGA5V2pAMHwiMlo4NmRlMWpaakUmQVlZTl0wTUdRcSE8Lmp0U2I2NnpCQ1MzMV8ocT5UKFdeOG1yRTYlTjVTUVBpZyl3d1NIKjRUUWFyNjdaUVhtTXVpISYubyQ8YnUhTjFaVXFiZC4xXktYMmVgXVN7VGJR''@;'; put 'put ''XV5XKCx8U29IfVVyOD0sQU1zOlpOVnBWOlQldFlyd2JbZ3NkPDptX2F7PHlYV1QlUm9gTkwlIWZKdDVrbTF6RWNPeCt1NF0rdXpDc1d+U0thVCxKXmU0NWFlYzRMJXA8YnE+ZE5wcTp7UHVjZCJzY3t+fk41YmZDNkNrQlZ8bykkMjYyaTd4TSopdEF9bzYqR0x4WEhNKlN9L0J9U3QpLy5kcnF7''@;'; put 'put ''cSglSWxUUnlVNkNfUUJOXjx6PkVdZ2U5fGNPRSkhYCgueURJXmslX0g3X2NVV258cWlpZ3BWIlIsNnkqQigjaVZ6fFRyPXpWOExaZzB9T3JvaHEiZU8vdDs2cyJ1YGdwZH0hTUkuUU9wYktMcFcpYVFDWnl+UCExQVFbbGxpQmRfVnA4YzlfdiQlSEdgWHdHO3l3cS5lS0FFSUxhbVpRd2RfW1I0''@;'; put 'put ''Z3VxITU2QDN1JT5GZ3IucEhFVXp4QEZDaDQheG5JUGloWWQ/TyJfNUI/TVkkJGZuO2luRTBBam8oK3E6WmJBRWFObG1NXlJwfU1gVyI8T1RDXkNqL2J6ZV10Qm8pMFRYfXpzUW1VeH0hIi4zPmU2dm1aQT9uZWk1SSFEUCx7NS4uIis1N2VQIUM+ZTxhbk8hSns6MFE9Ji8wUXI4aVZ4P3x4T11y''@;'; put 'put ''aDlefTNgbng+XisweDRKPDMhTklMdlVeN3VeOEQ/UGg+NHpRUXlDMyU5eFtCaGhTOFFCOlNHNUMiMnhCVkRwOWlDLjdKXW8scyFddT47IzpfNE1TO2w3XyxLQnZVNjdpZyUuejloTEA9TnpQd0Q2aHY5T0czSUxxY0pkXUpgM3szVkprYVF8ZEVVUWc+TjBOem96Uk5SIV1CMD51LHteYnNrbnx3''@;'; put 'put ''MUgjKndzUUFBPG1vIn1jIWciM0cofD8hVWVbenpjT31qcG5jYWBkeT0yUEJUbGIhPEJRYnBQYS9XUHNFUUIyX3taZS9kOk0iKV57V1VzNlpASjFAVT8uRTBmMEFEVVRSWi8kWmZsTyNKZ0FYdVYrdiNTS1dyZ11jQCxLZDg4cS4qeWBVLHNpS3dvaTM0Img7PldAMzxvfmV2XjVXXip0QU9ieG88''@;'; put 'put ''RDdLZE1xXjpGczpPSkhmV290IlJycyI5NzpdcThAfjFaOitHbDcsW0hPfWxKVXMvJDhGQE9iQT82Snl9ZUZ2bFVxbEJFfW18PD1PNzlhRn1FeHJLYWlOdWddSjoxdzNwPHttNDl0UHYkUkk4Qn1tYFRsKChkbDpXWXQ8UlAjPDxLO2FxLyR2NyRpPCFwNEl2UG5FVWlvVl4oYlQkWWI2PXdRIkNF''@;'; put 'put ''S05kYzFENHw/W0FlMyMqS2FjU1UlWGhfYk5teGd3TnZfYVhFe2E2MUghNk94Xkd1bU8mdWpLdU0qZXdJYWE4TjdEPj5AP24pUEZeaSE/bCZ0TTJDVCZIdXUyOT91ckksXytMLzF4TmEmTUYke3szeTYzL3NhTEFPYjRzS1pqMWRGVTxEbUNRVHBQdzxlUFJrQ043Zkx0K2xTW0pKcyx8UHhETWQ0''@;'; put 'put ''cyYobjFie1Y8eGcmSzg4e0BkdHRZc1t5fEQxWUVSeUo2QnhvRENzT0hdWX0zVXh0R1IhOSQ/NkZSbyNeQ19UKVtPa3xfV21hZCE4TX15ezJvalhPTjUxQjVGXSRoMTl5QzlQdm9zdGorNWcsc3pJdEtJRCFeN3puN2dBOXMxNS80RzojKUVNT1E5ezdpR2dUNDooREJCe116JnIjO1gvV31yV0dj''@;'; put 'put ''MDBWOnhvcno1PVVARntYOjdRJXx2QC8idFp1Q1o7ZVckUG1eOkFxREVAOClnSklKUCooL2VCbmVZI1IrQHslXmojblkwS0IzYCs7dHE5QzVPQmJebG03KSZgcWtUKjpOL1R0SzlGRVFxZ0dQKXZGb0IlbW9fQV1zIVdAcXQ0L3lLJkJGbSk5Nk12U2xlek1IbFFIfGcyJiNHbnkwMFRVP05YdSVT''@;'; put 'put ''bSw+eVtDZEo2e29ZWl8ybSt4L09ZXTF2XWZDb0szZjV4VGU9flcxdTd4XiNQQG5rVzp+MCx8fjc7OkZCQWJQPHhYPUtqaGAlaTNRTkl4fTQ7JmMwUmopY2VtSnV3fjNMYlQoUCwvQzIhUWF5e0c+UV53QkpiIV4+PUwhSmtyKjkvV1Z4IkAiOm1dV1ByeFBKcEJiVCwsM1JtTUV6enB8WDtrb15A''@;'; put 'put ''STY/KXB5WS9VTGQjPn5ndlF9QnBAOy5MZjslcnN1Lk8vcWh9THpbKit4dGReTE5BNiteIlFmV0JtJDMlUUM9TjBbVWlVTTUmcUZrOChnWShUOkp9QjZUSHYqZlNQZGhJMUt8RlJZbUpZK3FlIk87cHVKWiR5VWZVL3dNTks4Kzd6ImNJdjFWWnBJRyZ5MFI/dDJOZlpjJDRWTlsvQyFsdUJ3Pjwh''@;'; put 'put ''TT8icnBEaS9fTG9Pe05pOkQ0T3ZHanpuIzE4N0M7SVczYGlDaVkpZiJsX1M0ciZGcFlVbSZ5LntVTDksMUN0fkM+KH1nZyQpfUd8cWN6ezwhOkBUODt5JCtaakVoI0FgXmI+XUFdNSJsUGU/W3F4ITAobX5jRTYubzkwMUtka2IjTjNNMTVXMHJmRHBrJFAkSDtXeW96U0E+JCleX0ZSUmU+PFEz''@;'; put 'put ''WEB9TXRtNkNtU2JWdC5IJGojOyRsKm89XzlqPVdYa1MzTGhwOyw/U31kJVFldGxvaV9fbFE3RU1bQWUzPTt5P2Y0LEE6XVF1RyxkLltgZyZ1fmtjPUQqYVFnNTNjTTIhY3dsWCFeUjhnbnpgUUNRdkljfWpZIUZILHZXVDgmV2A1MEVRSndDO0hyNTJHKiFzYzJefm40ezg6elNkZnlRNm1LRzEl''@;'; put 'put ''T3pgZixzbF1bTCYjQFcybVp5XiRtaHhLa3A4S35VJGZ8STlpLmhZcXEuVWk8Z1ssPkt+cDdUMFRJRytGdmJgaEAxRjwpPmdeUWk4ZjxuR3tiLjtPYjticTJ9VSxFSkNuTGk+MmFKe0MyLjNtWSZkXWlkR2hOfno2TDFldnZWS0dKIXpSTzdSIyI0b15xekNDQ3omNkhJV11JOThwNVMvN0RnIV1Q''@;'; put 'put ''Xm47KD5Qeio0aHR5Oi9dYDBjLCtueSYxazFwfjFnTDtrfC8qZCM1VzV7czV6TENsanYqNXZaVl9TRVtiRENzLEA+ST56UT47bVExSn5bWTU+fElSOUpHcnJYfE5VY1RWZWJfPmpwTWppPyVyX0ZEM0JTVSQ5R0RGMStVTF4oLkFPc0JAZ0xlIyYuJTdaNjVlNWozL1RwXTdjQ0Q0Iz4zdixuay9Y''@;'; put 'put ''VGRFRWF0PDBHZEA4e1RqfDgsenlNT08vcDtfSzlCOTNocysoYWNpRHZRMmg2SzJ2P34hWjlmTyl0Xkp4alovSW5HIVNaYzVZPSp8bVorc3UkcHsyZGhmWDR1Mnw1NUhOIXU5KGc7JjFFOldWTzhNRldKSTU2TjMvZHk2NV5NKHg2OktCZ0xqalJZL3A8VTVyNzZXKUlgRT9EZVFKfE5JdE8xcURt''@;'; put 'put ''Rz1oPHc2NTNOUT1pKy9oQkJwaSt+VFVpQVZsPTdMfjQ1dDlUPEIlZEBIX35OIUdQb0tzPjBoWWU0V2xEZVhTOyU8PGBDMGE5OksuUWJrSzM5WXhXaEwuTWZ7ZDNPRis/dVNkdmpZNytiPF1hWz8mdCpBUHsrPHldNEZwX2NKM29FbjQ9IyhJe3Znfkk0RERKYCkmM3lxbUckR1J7a0pGbSUweGd5''@;'; put 'put ''ckJAM2NKNiJabFJNMStpI2FKZmJUPkFCbih3SjooKHx0b3VpeXs/bjBhUl8+VktFK01CL2Q9YUF0NnIwUUpEeTVOfE5ULnJ9Qz5KQ01WbSosQ31oLGxfI3M/PntfeFlVcUBbOko9XlohaGg8QlNjLG53Si9WeW5ITyNja2ZCQWtbUSszfSVmKj5PT2UrdzZVVkZPMCE7PyMyU0NufiU9PWNrTH5J''@;'; put 'put ''XVk6V3t8PiYxJlpLQk13aXtXYHYiPUBga2FnTiImL09EXkc5STlwdWd6I2VLKDtZbGluSVNGdE8yezleZzNrNmkiI3RlaEVUMFM4NDQueyRHJHV4XUFUSX5xfCVoMHxOOEljRmVSdnkwayNTMHc1LjgsaW4jNkAsUXx9a10kQSM2Nm4qV1pjJUJaPGVmcSI0dExMSTt6UylBN2F9M212SigwKVIs''@;'; put 'put ''Mn4wRT9ET3M6JT1oKTt5SVRlOjp9YzZRW1klRSk8QHxHdW4zVG9sKENnWVpLcSZpTCEyWzZiTDlqLmg+YzgpbktCI3pgIT5PLDlOJWpCT34sNio/UTk/d2YsVyFyQ3N7W0wqWCpqY1FqYGJ+LjRkUGkmNVFwUks4ZS5gIkJ4RiEwKzRqJU5xa31yZ1oiMC9SdiEyU3ttQC92NTM6XUYjQj1fXTV4''@;'; put 'put ''cjpQSitRcnBvaWJWUkQmMnE9P1FWcyZHcF0odFhdcVNSeGZePlRwZm0yXn01fmI/NnlKZy5kQEZkTSVra3RBSEBHPzhqWXV8W1E3K3cmQkxxYTtKPkU/aXl8Nyw9P3AoIz9rbyhjTj8mRUQxNEhoVGtfO3I2Z2BkZUU4cns8dHAmeCVod1tTLzpmcXU/O1hyN0FkQ101NiVPUE9+fEE5bHRsZnFb''@;'; put 'put ''WjAuJH0vSjxWSi9eaDZzPVY9MkJ3Jkg/Y0I+aGtuJnUsTXdOKnA/endVdGlhKVBUWllpLF9kLiwyd18xcWFDTShyMFQ3N2MrO0g+ajlpLmM8SUZBdDQoeDwsPFRlJiUxMkY3Yj1EN35EYFlOJjBURks2JGRxN3k0c1cjYF0vJkh6UzAmMzdjfmFxS2dleDpSa1NRJT42cVBta21AUl9BLzdWM2RC''@;'; put 'put ''SVFZeHFuOSw3Vl4rN18qJGU4O2FZJTY3SnxnKEhaTTp2PnltNVEiVVMxbCFbIygzfk51Q3RwKVd9N35oIWx+UVpjQy9Zb0VLTEUhQ0I3ejNVbzlTejYrQjJBRXw3IixRQGtMKyV5V1YvWy9Ea1AsRFkkanY6JCJmdXVBJjNmZlQhJiF1MkVNS3pgKjlue3t2QHhAIzduX0J8YVB7b2RKaCVBP0gp''@;'; put 'put ''UCpXeGF2I1tCX3NXbCQ6diVITWNWe24xfGkuTUR9NWA9OHlETDtEb2kzejNEMSswRm1PW1dVOUBbWHA3Kk4oeWZJX3xOc2Q/L3RWTU5UanI8ZG8uS1R5JDZNYl9YRzx1KWghdixDMCliWHk9Z3sxSUdjMXl+dXIzU0dgcHovZUYzd3VsZzRPM35vbEovbVMwUXl3XlF1Wz5aXjl9TiszeU4qbDRd''@;'; put 'put ''UEQ9bCxzd0FYWC5DR0Urc2ZUWl9hOkMjL3VhRDZBW28iT0RjfWZzOkRPbjQ5WiRgeGVyNmt5Z19GIXw0UGAveGN0NC9vel8+UnsuVUIhYzhPaHZnN1EvPkxKemcuaER1JmJ7eHpacGkuM2RwU0k3WXoscEEqNXg/ckRKTHVRY1BHW0w+PHI6aWMpPmhCPVQ3RkkvO0pBaXVpNXRbPXooOSRlMkp6''@;'; put 'put ''XUYvdSpJenQsO3hkYndJYEV6UHtZSXssV2lAOHFidjp0KDlqR2ZQVlNrOE5iTk84Vis8eFRRXVQ4dz1sZTcyW1NUam8qQU5WfUJZTSRfZHgxeUpVfWY8O1VNXjhyXUc9aXwhUkJibiokNUtMa0t4MDQoaHx6YzpjV2lxZVlvZHt8ZVpwOlYlRV9UImQwOkouMTd7ayhsQGYzNWpIOVt4OCYlMWhU''@;'; put 'put ''T3gsTzBRWCshdXlOS0s/JF1HbTY6PVgwJWpYK3lgQFFuXmB1RDghOS40SFVue3hCI1trOGkye0hLWGg1e0plW1tjKTRxO059W0VOeUJ0cVpPWFl1fjVCQUBgTyt7LHZOOkZUa2RARSxQKHEmKWA1MlViOVdVeH1DXiJDZFBGeUlmSkIqaWdCQ1clKVJaVWAwT1E2WWV4VGhxNyM2MTtCaWtwaWp+''@;'; put 'put ''RWRONT1ZTl1qam8zUU1lQGxwW19tTUI6bixXYUJ+dHZuU1IoZjo2a1dDUT1IZER5fCM/OncpQSJKbCw1JWlJNTdwPzZfdEZ1bEU0aDJmVH4zUzYva3QzL25kKyRQQEE3ajhjVGJVeiZkN3lFdjh4Y2pHTG47bSVFU0NyPE5YNWApZVQzfndRSjlzUWd7I1F3dWlbb1Z0JSFuOlovSkZQNnJsWWpH''@;'; put 'put ''KFVdOkRLd19BfWxANCRqflJSdkhBcTcrPz5LX0xtR1h4KFRjO1B0YWUwRDpOLlsoWntVMkpid3Z2OjZZKSU7WTAxMWlnZkR6fUtqY345LFMxUD5nfEdTJnxaQkRzLzRaPGRHbGxuTjZyfkwrSU16aHMuaypmR3R0JjRLayN8S2cofF0sVyhwbyhKUV1tJltURTJkbiQ7PnJ5N3BjQngyeWZ3VXZi''@;'; put 'put ''d3VtW2NbYGtMRiFaU3lqRCUmbmxIXm48MkxySWA8dnRlWFMhfkNDS2hxLld4VWBwJHVLTWAvSmN0Uilbb2tWOm4lWywid1lDI3JGI2ZoKGk8JD0iTE0/c3c0MERbVCEoIyg8NElNXiliQz9vS150TTZ7NDheSjVRe0QpUyl3byo5KnFSNGpuaXhuTkFvVjNocG5rSGl9cV1FSnJWMjRYdiY7MHxr''@;'; put 'put ''NVtSOUB8JSlsU3U5NHYuem07aTwsYi4ya3wyfnY4clA2MFAkUzNdYFosd3hUPFZiYmYyOEl1YCg7IkFjSTJPUyxLVzRrUkVvL008YmcibHt4UVFzJmtHUEdGNy8vSHElISM5blB1ZyRdPSNMI1Z7MjF4a3ZtV3NgRk1JcWcveVhLbG5yOTE+NDVjOkpeVy5zMyQlbUBQI2tfSHN8e31bc200QGVO''@;'; put 'put ''RV9GMn1yUmBVXikoLiEyOlAmemZGdkFjQnw0MzxbX1hPODBYbloyX2Z5X0xVdHJBXSlRViZrKVZCOjNJfWZkL3ckSS8hN2VITUl3ViNJW3N2JXVAVioycktkI0lkK3YyR1lyY19uTTYrST08Ny9WVWBGUDhlaV9AIVIiPmBkQzY8ZndjfnprYV5beWcsLypRb1U1TGdNeiNmdCQ3clhCeGFpX0Y3''@;'; put 'put ''KExvd2tHcTR4I2pwVmBYbCFIfiNpbC5UTmhjQGxbY2s1aHFdcnZ+ITc/Z2gmYiV0ZV4qK2V3PStdJDlwInhObzZYPEU2ZFNEfCVWXiRZWm0qLH1GX1I7KnpGYmUxdUZzenJxaUtbZH5IcVljZUs9KH05Wk18c1FgVENUPS9YN1I/Zn4/W018SU0uTUM0MUReTlZfPTEkb3F6NUN0e191JkI4b2Z1''@;'; put 'put ''T19+P257N3ovamNrSUo6SHB3clBvTUJjXiM3YT1KTHYkcmI2fjc3cTwkQm5fXyhydzUmfDRYV0M2MSYsUndBLEE7S2ROI2swS3lqVkosTikucSJgeFlYajAsIiI+fWdFXUVxX15DUC9QVU1vUS5ZUzw1c2JlL14mKHkhKjBRRFh9Sjt1US9wJGdCWWU4Zmg0T34zdHthVyRqSH5WTFRtaV9QW21H''@;'; put 'put ''KDFdRGhMez5AbGo6IS5bXk1ndFtyW1Q1YVllOEtFXmQmYFsoOjJGQDtbfnoldnhQNmpYO11jeTArKD88dmdjcDFkO3FnX3E5c2Bkb31KMXplNylQOnFuUWg/QHxOLHF5YS5NPUxSe10uayI/N1Z7VCU6eWQ7MWdAVVZpbStxOj97eCFZbi9iYl1pSyY5XWI0WFtRLGFHMERkMFk/Km4yU0ByPkhr''@;'; put 'put ''IkF2eFVLKmloeHpEUCwoNl5hNGZ6SmlNSCkhb3B+JnVnSWZ1Wm9KTlhhcGo+LnlYMDVaNG9DYnpvaDRFdUJEfnNkeWxsMHdEeHFCczgmRHo1N31sZGNNSHhbU0JFaSsmeWk9VW50YzhMXzUxRVYmb3ZGdHU5US8hM0Q1LnAmTkMrfEw1MSlSKix+LnpVanw/UjRfYFZwWmt7bDJWZV1PQkgwfD9H''@;'; put 'put ''Sz5ib3Y8S1kqZyosTTtoK01Xbi8xTm1gfH4se2VOLiIqV2liJXYka08kW2VYeV1AWj5DNixYfmd+b2xHIVtMUCg4Jng1MjM0N2tlUDF9eGIhYXhndHsvO24yJVR+XUBGPCZxbXBbXnRwIl5VcFdGdXZKVXpTUjxWcFZ5KiZeJlZSLCo5Y35oeTEiaTt3dCozO0x9MXtgXks5OENIVEplTkJARDpC''@;'; put 'put ''X31YQ1opdXZHW1YwLFUqe3hpX2BLKmooWEp5U2liXip4OnNpSm5KOXFgYHA6W21lSEt1aT0zQ2dXOmRiWFFLME0vXkZseWQhSkpEWSYuSDdYKSJVO1AhYkExOmhZYFE1NzFmTXNbZEg1LE9HZVk4OGMjTzBkS1tPXTgiImxweSZhZSJvWl5SKyYyQ09ve1J2TXtmWXUhOCQpNWNFKEJEJjxuVjck''@;'; put 'put ''KnpZZW9SKFkwMUtuUy5vMmhUYCNdbiYuRC5DcH5vSmZLUUJPWCNjMn52dHdKaXJlMlhUTDt5VGl6bH1tVk1VL3VwaGE8PFg8R2IqVlQhM0lgMllgbTRxKGRSLEVZQzx0SFghO2VgQ3ZsMGx0RUEjbCxubFQ7L0wiTiNyQjslc0h7NSoxfkVSaj9ReyZGa1tkYU4rdUdoLzhiKU1nO24xaTh0aXNz''@;'; put 'put ''RiYrJVgvOVt4P1RMMSwqW0ljOk5iUmxuOkwjWkxhXT88IWw7WkRVSEhne1FoTT4wN0oiZXB7KlI5ZD05dDJJZ11pZj5+WSExNXNeW0kmNj1wNGVMXipvPXwyfkAqYVBYLkowKUZsbiooWDFrTmw3ZT9XT2orcCwpMWk2Zmx9RUM/dEtSbVtNJk1xKlF1O2taJEUibnp7bEVmYHFgaX01LEFVSnVR''@;'; put 'put ''SVQvQ099OmtPSlA8VSNIZiUqZjs2W29rcSZ8ZU4vUnIsPypnTF1te3BZOSgwcH14U05gWFVFSXBpfDgrVUR8YTpFPzk2aEBpWGdfXjtCPnU5KlomKGQ2ckRxTSYiUF9RSkZ7YVI/ZUY/U1FnJnBkJGZlKjIpcV1uT1JhSjIwe0c2SWklYEomP3U9KmljVGljKzBYaFhURURQOnV3WyNRUTVoKD9O''@;'; put 'put ''VXhtRSNMbDFQYHJlSTtfaVM+STNkL3cuJSh0TVVqYG5bUiQzZlVHMzAmaXFaWG8oRiojR3Fidi9BPDpzZWE0YjA9Y2V7SSJUWnx4Pi9xP35pL2god3RseCJwRy5fbSlvdkohUzEwNmpCXzkoc35vPjFPa0ltbER2NU5vfVEvdmJjNy4qVWxuaXVGKW9iPyFFIzlpdVhOIzkmUnNUbU5tLE0oTisq''@;'; put 'put ''eTE4dF1NcUNnYiUpQ3FDdyslaHgqJWlFO0d6JEJzTDlyQDtzQC9LbkpgSnJBZn5AXmhqNSN1KWZIaXR5RHEwXjFvc1pkfWByYTglSW4uPTFlOjZHNUk8fko2ISh+TmcqSD0zdF5eeXRUPyMyaDJSdHhtflNhSVEqX1ZRal8wI0ghe24sQGBVNnQwQU50ZEQjTFtfQjklRUxOfVhzLzByYltuSkhj''@;'; put 'put ''flZwSkVYSD1veyVnZkxjKz9VeGNCZ1RrTz4keGNmVGN2ZSZUYipRJHhIZ0BfOVJPcX0oaC44PlZAV0AvQnM8YDgkRVBLMipSLkhwJG92XSw7MXx0Mz1+VXZ9Yk9BXT5RWz9gY0I3IXU1dCpkZmsmciZzWlYpTV9vQ0AzeENwT2NWRy5Kd083eW9zLE5GdV9sZS8kST1kKW5kIXk5NCptYWk1fUMp''@;'; put 'put ''TEUxa2lzTmF+amkzfSVvP2Y3WWwlMypGdGQqM1BYcXJgJjA3Zj8pa0Q5fl9vSGA5UWM5ZTUiYnRhND55e1R0bk9FRUJkRz1yWXBOIX4/R0lmKUQ/NyxdV2Vwbz0mRkJiSSI9Wz01OytPYFJFUkFZYyxXcUMkO2lGSXkqZ2BqO3AqKHZBKWtQSWxJYzhhczx7MS5JIkhIRTd2c1lrO2VqMXQqPSsy''@;'; put 'put ''YWdIOyVTTzI7OyY7KyMkYTksWjksUyw4QU1GZS5kPl45fmUucyspOVVSUD5Wb0d+ZEV6UWw2QE1zfWpHcWlHMWk0fE8pYF59fTk2PyZvUW87L193ZDIvT0kic2Q2cV0sS2IkOTh0QyFxbS5hcFpjfkslQiYzXm5TIVlhcShFK2dVYytGQS48VWdBPkkiTiJlVnQibl06U0V3biZuayo7R01IYnA9''@;'; put 'put ''aDg4WiwmNmVHISV7SnxFMGp7TGVCdmlocD1ZaiVuPyFzJkc6Xn0hMkVBI2kwdDkuMSsxTCRtQGAjbzk5c1JIWW5lUyEiQ2NaTHd1aiEiOihVVFhEekFqfDg5bkk1fTooTzN0YEY3WDd8SkJdTCxad2Q1W1NQdVY6NUJFfmFTMW9CaHBsYzkyXn5vKlFZbHtiTS5tdXlyYXZIPVRJfTAlSEc/YGw0''@;'; put 'put ''TXtFYUFuRE5LSFBuMTIrbi5tO1syeVM+b2phNjZSU2ZnTDo9JXNpP1hdajZ4UFdPVTVPVDF6JS9nRSNOKU4ie3V7U01gVEVIRl44SUs8OWQrPjJeKyt3amMoKDdLL3srISFTViE6eWo0MTh6WDNlS0VGQ3c/VXNbak1vVTY0VWBCQ0VtJH5DYS54MW9ZaXteWSVxUW5dZUVJPHxzZXJMSSFLW1VZ''@;'; put 'put ''QXVAI0RTZHs5XmVhSld9YCZaZHYxTEQxKnt3Vn1RaDdDbyEoLHBXb2BxTCx4PzxpWVlWem5aYXZZaE5qK15VbjpGO2lVR05DJk4oUmZIXm9ZMU9JR3xGYSJuaVFWd1ZFY11INm5hamteYFV3U1pvOG0mflomM0BnYHV3KzpWVFZXPFE1Q0pOUHxIV2EzV0QuYWpgPUVYMEohKGwzOlZ3KS9sVV4j''@;'; put 'put ''KVsmSSUoKSVkRFdzKWBLdzchbVp5V1kqTk5NUkB3M29Maio+LjhVKXR+QGpfM1g1akVfcXMkc29CTz54dnJ0ZWlldFQkUjwvclFWMXI0Vmc6PH51KFdmVWElTC4mfFoqTnA+SWchXyVMZ0pVamRlM0Y4YWJ1d1ZPTyVyUXMzek57VD1oel90KzBoJDdwRGhUIUhIelA8JEEzLEE7XlBtfGIkL0Ry''@;'; put 'put ''RStHP0QsRjtpfW1ieGBLcXldanAyLmp7bENaUzV5QX4/XmRxWyt6XVUwa1cvWEhIcWdpKTYqUVF3KDphfVo3RWByNERqVSUyNV4udVF8Tj5pLklte0IyS1NgWGFAYl56ZVhLTj0jXVtVXyNOLy5QV15IaG9mfSVNO0Q1fGZqfXc0W3MmOVZUd197MnVdSUVgZy8qUGosKHNzdmNNSXBsSj5AYUZG''@;'; put 'put ''YSxUS31ST35nZ210ekdEU0Q7I2NrbHgxbHopIzBedTBwTC9bZWFnYmJIKiFgLnZQIWh4XVRMRHxtJHA+VGUiODBDWmNldmI9eyw1LztdbVp6PkdkXSl8WFpGUnc3c3tPayM4aXJ3d1BlY3ZiSWgwVH46fHUpYkBsZXptNCFJSC8oN2QoKXw6TyZXNlAlZG4/T01UN1svdGNyciUzS1s9IT4jRzIr''@;'; put 'put ''RktjKnBCc2dXSURoN2hOKlZLRHJ0bENDeDY7KDtrL3tGKGFIM0FCUTY0MWtHVnghaFdEXVBLYjsueFgzI2YsTGsvU0BMK3ssSHFZPDgrPDtxZFpHQShzdFJvP0gmVDJ8eURTZy9ZXXNmSGo2MU9kXmcyfmdZS3R7YXNVLzZ+eS5BPFVCYzpMMTNhPngkOmtwM2E2UUVSUkE0MTlTL25OXWFMKko1''@;'; put 'put ''OEwkUjlOeXk3fHFZTmQhYVt0NCNsUCVUT2siNDlkNTtwWTFFciVdKnw3cEgxLGt+eFlCSy5LeFB0bnYqc3BiRUVJVDU7VEgyXzdIIXZ3aDViMF1lR2lqSDEsIyM/MTdVQSgjTH1TXTU2dTB7YSRAaXE5InY0RyQsdGAyPUsxIU1lTEpwU05OPXtgOlpbeGhlcHtzK09ETXQ/KCFpSTthLFljMUF0''@;'; put 'put ''Vm1ZeUhka3NCeVg2WE9GR0pWayp3O0pEVDNIJU1jTmZfVVhwZnJgXnklcDguJGY8QGtyamJTX1gkeEdKKjR1UWB0ZDNqVj1McUBtT1JkR3RoP19nSCpZSjpSNHIiMmYlbjExV1pneHxfNFQqZ1FaMEBfQntTdU5vNWpKXktSYigxcWMjcTd0Rnc6blhxUFdPfk1tRSZvYWp6MVg2a0suMHEsMSUl''@;'; put 'put ''MzN7anl2OHkzUVopdC5HdGozK246NCJndEFobkQoMCxpUWNObDFBbCxZMTE+QCtkZSFwT0JufDFaOHQ2Km9YInohI2JUST4xKWBAJT1afilJJVZiaVd7Yy5qSihXYjQwRWE4X2EsTigwKntGWXNqXzJTOEM+USZJfWNfXkBeTmJGXW5DTy4lTFg/NVNJUSl7eEw2OzAsaFl8bHBsQ29TNnE+JXNO''@;'; put 'put ''LjlzKT17LmI8JXZIUmpKbGZCZ1N5K3xOcGZpMmk6R0d8ZCZHMSguKUkoazZeI2AuRElAPm43UEtrPGBlI0BDKDxJSlhUImdhM19IKUBwOXprWlFMP3B8PXd3aGU1ayNUQjpRTFNocFkkY3JfLDgufFokdzZuY1tsIUs2cjpwZ2pPND90RzZSaSFiK21pLFB0SWJTeUsjWF9FeTd6QTBYcztwVldt''@;'; put 'put ''QVdje35VPmhjM35WLmZTKEQ4RCZvTigmM2xlI2hIV3VUaGhnKjNXSTUqODA/e2BWa3A5SCpYdChtVCRCPTEwNj1hWkt8eEhiQ1ludFZsfEp0NkJ8czw4ZEJzYm1KcFdFLld0Z3w0Mn5zOiZ4OWdeUVZnVHRATVJIX10ha04jTGMoTSw8OWd3UyRkOytScWMoZ11DOUZYLFdtbj9uODZnfiFeUHs/''@;'; put 'put ''Q2gra0lVV0okKVE+RkpxdGJ0SExoSUQuSypAYT9jaThOWF5HNVNDWG9gSVAhNUI8Ym8mb2J6MGoxQzpbYlFoZXxNdCxFbl1LRHZxLHIxTmZTeDBlaVJ5blpsUmJzNFI9bi4zblhgSk03IjRse2ppSz5ifUx3QClbaSpbXllIJlEqe0k5ZDtWUVl+YUt5SDp1anZjP0ouKXZFT34yPHdMZUZOMXFi''@;'; put 'put ''XUBiP3FyRF5LM0smbXJhRT9kfVk3LFQsOzB+JEo6Xz1BX04qW3srMEQ+fEM1TFM5RzRDZSVUUihwRF1qRiFCa2I9MWZVJiFNa3EyMStmK3t5b2YxaHx9XnNoPiZQZ3UpSDd4VGBXdHMxTG03X0VjVy9yI0lfYUZgdyI+aEF9dDhpLHczWzpybXp8N2ReLHEkaSlifXRJQm05KDo1e3YyfE5EQkNf''@;'; put 'put ''PVNEbCt3fHZjSE1tYileI2xwPUEuRGA8V1BqI1JTVUY9MGJhYVt0SiYyKV80YDsyc0NqTix0ZHE6S3RFdE4kM1VvbUpGdXl2PEZHclBJV340bCZtRz59M25VRz97N3gqPyZHIiR7TX5wMWRzdGhwZmwlRXNmTHgva1B5cihfdS4+MEojMFF5XSZ2e2RXOHJmQWFsSj07eXB+PWtSLj47JSU2enht''@;'; put 'put ''WHtpUyZCaWI7SU9jP2Y5clYsV1RVMG90RXozN2UoX24rcnpMYUxUO1tdbFckNDMwLysjKSRzMTN6dUYxV0Z6Q0dlIVoqOCNuKSIwal9aUiFNYzBHPTdHYi4oViwkL2lnY3M+UUBGND1bQkZeeyQrSmU6Z0koSjdlWm9kT099KiUsb1t0fGNRRlRuUC9JQG9oTU42WlZsVzBOJSUydWAlJDYyZGVY''@;'; put 'put ''RkQvUi5BVVo0aVNmY19+YkUlMUE9bCklNFBrbHdXSiI5TUJwL0smYl5CKm45a2ZtQHBzdytEU1NZNV5xTytxUTY8dlBFK1hOKkU1RGZuVTwoOF0sXkZYRzd3eSN0Ukc0ISNCRS5zPE5OISYqTmdrTSYmYU4ocE81JkgqbyMvVGNsQkZOQlZYOXd7U2pEQXVETGw7WF18MGJyb0ovcnIrVD9SN3pv''@;'; put 'put ''WFIkMiw0SShdZXk7Snt2anc3WkgrJl5BKyEwVHc1QW1gdVd3N1B2XVtMcH1QTEw9YnI6MyltIiVjc2d5Q0grK21DLjt1UGckRH15WjB1aEtiOCYhYl9jUWQjVFZ0UXImVnlBOHMqXmR3Oyo2KiptZjQuMXYvZ2ApdGBDUTQsWFhFX2FRT2hTbC8xZnlUO10jZS9sRWtHJEMseSlJKns0NntxRm8o''@;'; put 'put ''UEFuayI2ez48K05rblJeKDE+My9rVjFTZWk6WGtFcTFlKkM2TFBZdyhsREw4PXlifTRJOylmdDpoIkJtRzJPdkFtUk5EJnA6RiltSURZM2hnKmgmP2Q/bjRoLmh0SWZ9RHJDSTc2WUJkInFgUUdHIktXcmtmXiR+IWdHQiZTUnhmUWFdbncvQTxWd2FRaSFXaXRZMGZPSzNKeCM4ZkNNdkVCOng3''@;'; put 'put ''TVtLOFlmM2EkeHVKe3tbfkV2VmY3dHFBP0AkME5WYml2TVR+ckZdeng2PjBWezgoRC59dUByam5ybWJsT3R2cz5hbDQ1djJTTkNqUW1SZGZhd2RkbmJ+PCpxJH4hLm1ucytZY3peUS9eP1VGeFcvPVZ2dU8/dG1pT0JoY0gsd2g9OEleYkJ2L3g/fHE9fj1PdHVgPmZOZ1k+PmFfdzNhYHd0YS54''@;'; put 'put ''OEBkKT9XT3IoTFIqI18lRXxmQXptPSxXRF5MbkI4KT99M0x4X0x2WVVrMiJvfitXUUJeL3BGOi4kOjlMQzF8RU45THtRQiNebkdweExzYyEpTWlnNUJiUGdHNTR2LCx4RWh2VF9eaEg2ZkhRdjZ7NEU3cUVwTHVxWjdwWTZaMkhfKlVmQTVtTXM9MG99K0xTdDNbOkApUy4pdUVnPCR3YzsoUF9V''@;'; put 'put ''bEZaeHYmX19fSHQ7U0gzXzNdNkNRKF5ScCQpJn06MHp0QXw/OnIkKl19RCEiSDpCKTVTNl4sInFQVX57ITFJdElvRzRTI1pReyg5MGlFfTNvQUZFKDUwOkJ7ZiVQVitWeF4uISgsSVYhV2RwP355Y0sqY2c+LkhqbX51SCEvMkRfciUoJHAjME8lfltWLnhJcl1nWDdlL2Y6XlpDfml2Zz1ZL1Am''@;'; put 'put ''RkVod0NDKlA4a1VhO2g9MTV7eU1FcDFWRU5EUFRUSD8/PUN+VFdjelpQNXwoWHAoS14/NnhzVnxSSiZVaVB0W0REVy5NVztdaX14fWJ6JS50UXFXVncjaVZLP0crSzdlP3ZLYjc3OGY9VzhLNGB8QDsxaU0qJE0oa1VpYHp+X0VYNS5oYVcuez8hLGJHOihNWHhlWyhPIl1EQ0IzZmMhaC9AQFda''@;'; put 'put ''Tko3WVUyPFtaMi5BXUMvNnRAM2RhO3UrdEppNnxQZyZ2SHRaKyhrMEpNKFBhQy4xd105bzRoQSR3fiUwWSNkfVAlUWVwSjVfcVJGT1BzIXBVK3haOTY+TjU7Imp6aG4zRGZCfX1fSF4yVWQ8X0RwSiJAb3cra3VdSXkzdyNHIyVEejwhYyEsdXpfZDRrJi8kMVs3RFV+Xmxqfn18JVlIeldvb1tl''@;'; put 'put ''Q1h5ZUx1UnpdaVt9M2tTIWk6ZTMyeC5GOXAwO01CPFcufkFGe05xeEJlRUpxU2YhdzVXV2l5b0dxMiYqT0JQUCgmN3AjfU4zNC9PS0hETXw5VV18aiFqcCZ7ITVwdUJdI257e3VNQXZFWy5pI0UucEJDMD9SaCtxW1VrbT1rTTk4Y1kzIVZsZ2BbamRaLlAhfEV9eV9VaEgqKFhPViJ2P3RfRWdv''@;'; put 'put ''X0Iib2xZOStMe0NrXm99fXswSWddYSIyNkI2VSssJCk/IUc+Y3kwZXFEaVdNR1lHNDc4UXtsVUg7KSldNytpXXw8Imw/KEddVC80N0hXQHVLTWVgK3k4e3ByRjMkfCo6bzpbNDRaMDhsTUVwbEMubz54NmREMjlVby9uKWB9RzlTIyNma29zZkRKImc+TDQlTkI+PVZiUT16NjFsUzUiTWJ6RHVx''@;'; put 'put ''VFMrdXtUWzkmXjpHYDFCPmh1fEp3PklLSnYhN1dwbUtWaEJYVCZGYCJUdWNJVXRAdlNtaFA9UitlXlt8cHJ7TzBHOWV3Sm5iOHpQQHAiMTUycT5uM0csVn4yWW5oNlE5MmFXb1pIdCJ5d208ND0yNSE6M3gxckR8RE1saEpCeSVRUF42WiQ5X1ojP0suS3l9RFY+UXRNZmwyKFtIdk5xaCN6MnFY''@;'; put 'put ''PD11MnlUfmtrfXl2fTx0XUl6TW05c2ZFMnpeYmBNSyhMdyFkJT0sNTFORlpOVkhQLkEhVyx4TiJ+WWdKJmBnfjMudW9Kc0h9Kmk8P2hCTz9rKVMoRVhGKyk2M1dGUiZ9QVMqKGxBQHd+Ind+MmJRO1JHaCUicCVhQ250Pk9qVSNHP3xnU2tXaHw8UW9DeEsxMkdoNyRGU1pCXyh1LChnO05tPiJi''@;'; put 'put ''enlfWlUqP3wmOGp0LzRhUGRAK15GdXciQzhUMSlkJnNpKVsqd1Mld1BTLjRAKytMWEolRiheZyZ7U1U7UGpjPGteVXokVlRhUG1PNEEheXw3M3Y2S3hjcXs+SEA+SU1FRkZHN0luNkZPOUJsKTkhV1gvcTtYWypRUDVxKUZfUzdQVyUoNjl4azhufUIsYiQzdllvUlooTGVZdEE2bz0/dUMoRUhY''@;'; put 'put ''NkVOOnElYTp3S2siNDhmOSFMRF5NUSk9c09FaUhuJW98OTx0O2tOWWRVdk1efXNGLmF+Ryk0b0U/Kk9LXSV1OzRJNzhHcnM5PEYmM053PjZIR1lrZGBIQ2JKNntvTXZMIUlCcW9nelZQWUVaUSIhflBkOC9AWVZQJjlabWcySn1dekR7ajZyVntULGNGdT1IR017ZV5ZTTlbcigpVFo9MTRyJFRy''@;'; put 'put ''eiVsIVhLaUckRzcjIy55eCE+dHRZbTUyRiZXOFVddnt+KWV8e3peQ2g/PDxUcTEwciVHSlhfMG5KM0QrUDl7ams9IXhodVsiSXNadHVGSmd7RXZ9fTFwL1dPelRSd1QoKVQlXUNOM2BKVEVaNENDRixpdXhEcjI/SHN3MSZbJll7aUR+I11fNmxBa0hjXiV+Wj0sfUheTEJxX2Y7cHpTLE1FTHMl''@;'; put 'put ''JiMrS187fXQvNiMuZXJfZl5HPmVdNlVHQiZkZk97fXhKcjU8JHxBKTZMO11dI2FFVXEvWE1PL1ZFKnlwfm0hXnNfLEhfPWJURXJRZ3R2S20yNTdNcGpjWjdUaCZqSUZwcG5wWnJiKD9RIXA/YXJbbihXQnJPSy5AZXd4VDdiNmtzUHduRlohUTsjLGolfSJmU0ViTHMufk91I3E5I2lRMkFdQCwz''@;'; put 'put ''Ijc+Uy8ydVVKZ2NNOn1+T0dhWHsuQHg8Jkt3UE9KYGBafSRgJSZwZnlFNHdKNC4hN3ZiL0t4PCpVVnImRWRlL0hvKUckOyZERl8yI2hUci9oI1NdUiQ4SV46Sm88PmcpcGomNlE1PE1AYUBlZTJ1SHtSVGkzI2UmZjsqZGh4Z0UlMy5dVXc+cTM+I2RrX11pVDRiK1lEUjJpXyx7O1k5TGxkYSFh''@;'; put 'put ''MU03SF87ISM/VjQ1PG1fN1lYS3lOfkxGTFRbP2VXUURaKXh6SCVAR0NlJUYzOEZgKExnfTpbcGs3SDAqe09XIWVRaVlCSk1TczRXWnlKTnFuenQxQH59dj53bkBTSi89ZjJ9JWA6fHYlXTV3K3BTQGZMRUt3MjpkelZGP30kRyM2ZmI8Q2F7YUJ+OHp8XT1AW2E1Xk05anZ2PUsxYWNKa0RER2pk''@;'; put 'put ''Pj0qKTx+U1F+N0J9anJWTkVbQkVFU3Epczs8WmBULllGKEAuNnI/WE9jSTwoaGgobnZSSi5AZU9PPVBJSHwoaHlrVnIqUzomaUFHWmE7anNkI3BRPC5pKSxTbjNmWCxRdzdNKzBPRGdQIzM+R3wjNyh+VGZMYFlmWmlvRmRIYUJOciMqdDwjdFZdJT40aXxpQGJMeS9ScT4wSFlsOVFbQT1qOWku''@;'; put 'put ''JEBiZEF+RzVyXnRwUihCY203OHZJPDBaeV49WCNmVVBSPWk9ZiR6aXVlPFpteFMuKFpHMD47Z01FTnJuSjBBeUhbXix6SFA3Jj5ySVslPSJrRndaa1JiZXI6WW19JURKfkFwIy96OyMia081U09acTs4IUcwVDJkNVJ5YUZuPX44UnsuMltgNXY0Lk1DRH1vUHQyWDNIW0hxbnRdOlY7YDAreHlB''@;'; put 'put ''ZnYlR2FoRVRjbEAhcEZ8VG1mPExHbCRuIX1eKmk5anlOR2I9VFp0b11GemBwbC4kNll1aXtwaSRWfVIvWltwcWJDZytWVmJ0O28oQXo2NyI0UVQpPkwkZihSdzIwJDNUdHIpa2lGQGx7Y1lEV0U4RjZoQEJeUjV9Wk50PEYiODs4UkRLW2Y7YGpMTHo1Qy53R1pgYj5eVEdtbTdrcVd+dXh3YUR4''@;'; put 'put ''Vyt5Q3xHJU0mZTxdcFUmQkRCaXx8Zj9GfHYqQDZkQ0B+TC4lem5QbC5UNVVbMWwlM1MqZHdmd1E5VXBITjdeL15ARSoxUmlKPXAhaD49REkoTHVyNSJzIWlsYSJXZFo2ZmUrU0lkdSN2anBGQzFjemtlaXVrXnRKN2FVKUFuXU5kUzNiUCQ/YmR9TlFdeWNVYzZzTkQ0UVhEPD5yMSF7WTo5dyRw''@;'; put 'put ''eCVLYWZKPz1fbmguK1ZbKnRVcihmKylPNHtFPEFuMU5bVzl6cVJzYGpTTjVpNE4lY2QxKyQ6fmxwNCsiRFJ5WTRWKGc+dn01TTZeNys4OjBjOStjSHArfHJ0e3smJl1VMixgLEE0aCVqbCJqKF1oX0BiTG11YzpMPHMvJnN2SGBROG4lRUQ1a2NnfS5YanhLYkpmJj1JRUJlakRFP300ez9SQkpl''@;'; put 'put ''dWs1Xk0wOmV9akkyVXgyWTcsVjFvIW1WI35gfigpYUNefll7V0IrQHxqdEVyZi9WOmI4MVV+WFNzc2s2KD1xUTppbnNrUUx3ZDdWTCkqN2Y9I3pHIz50T2c6cn5zcjY4KG5gLjpVIlNZIz1JM1JpemcwNE57MGp2Kj41Rl1LME8+Rk15bm0uIV8hcyh6RCl3SVRgfj9CcFNPTHwzMnF0Xz4xTWM2''@;'; put 'put ''bjdAQTdQemgoTEtVTEopXjdMVldjdENyW1NYIUhFMG4pbUlDW3UxVENGbV1wN31jI3F6KGxgdyxSWWNuW1NNIm09WGdTQHpaTnNVWTBRckFJKj5JWFFoLnxKQ2ZwTiNMbCJLQlJfbmhwSjw7OWpAUSo9XTp8RU1fdWFRPCxtQllOLFAuQn1tYj44eklvSHVYM2whNXUoRlM/Uns8RXxjTi5TYEop''@;'; put 'put ''VlhkOWBBJDxOK0pTQSVBeG9kcTUvVW8mZ1BLNn0pJk5NRXxmQmE2aE4wdmdVa0tiI15MVzlbME13VTlRP3tjKVE+UFNHLz0+alpASkxwPTYicW8sPGFXZnFgJjBUNTF2Iz0kakVFYl1vRHxvMFNmNFdLb3dDUyxOQmsrUzBkNWtHW3V0W0s2OXkmKWNZfj9wQThFYmw1NFBVUTxeLCxbaGVHSktd''@;'; put 'put ''SmxMcEh4XT5QZ315a1dqU3RoI1t4XVM7SHtRUlI/UGlHN20uKC5vRT8/STwyZy9LXlQ4PGw8PyZPeHQuQ2hQL2NuN0kjN31hTnt+Iy8yP0wwTF5ZUVUweC9Cb1BseEJKNXdhIllxSUh2NFpoIS5gclNdTS5fL3twYCwreHwufCsjdVF6TyQ3WXJfbX50P0l0dElUPT9NLltAOixsb0BecWBDeXhD''@;'; put 'put ''fip3OGY4a35WO3QmZ0U5bClqJCljenpER2FgZ3pdIjwqQyF1KTN2RyFRJmtsQDhZPFdFd0R7TyRdPlJNXyRtdSFtOGk+fVJzUChvbXZdbldwVnB4Y0hTcSNBbEVhcmB8PE1GOFB7bXtkVHw1QHVDSG9jbE1ocToqUkZyOClwRVUuJEFfPHBnXTEpP0csYzpUSW1AYVtsa2FGd0RQalhteyEpOiZg''@;'; put 'put ''IyhUSGk3fUhWMD8hcE5FKHpLZiJnW1gvcmhuZUI8IUprMXRVSWIodWI9aEs1UVBAYDpnTEZ5ZkduZ0hUblZJXlpGZ0FfI3YjdkUjLzBhbyhiJWB3W0QwK2Vpc1czc3FQISZdY24hSzhUeT4uSjgmfF9XTTBXYztCcEEvYVZOKmVLcjAqa3tSTmhFVlFOIU1UNWt5aXpVUDM2OFdjL0I2a29JIyIj''@;'; put 'put ''bm5zNEEqY2FudU4yKnR+VGw+Ri5GaSZteVp5Mzdva3VeQGUxMn5ldlVAdDYscjd8fDRxRFlLVGFvYmJmeUZTcjkmNlYwJnh9L21BWDV4anp8IXFROlhDX1h2cWtaZV9YQmUqJCIpfnlQamMmU18vNjd+fTN2OFtOVE1pJSUhRyQ5L3x3JEsycTVhY2YoY1Mpc0ZKfChve2BJUzJWc152QWk9bnBO''@;'; put 'put ''PUAvUV8+bmV9aGVkcjdMalBmb1JMYUViNnRHeURMTiltWXA0Z11keG9rRTZqOUJmQ2hDL1BfKGpVRmkuNl82dSldNSg3VHtYflNTOlRuIWg5d01PY3hQM1ImTTUudktQS0A1IU1lMzlxdWlIQzc4V3VPeyMvT1RlLDNDWHkzUjAyfUJ7fT9FLGJQVWkhals1aCEzX200LislQG44KnRWSU0wRWxN''@;'; put 'put ''XzhddjM0YVM3bl1yVGYwOksoayE3dDN9SjxLZ2pqaVMmZ2VZMmQheVlpfjxDJWpWQ2REMX0zWGlzSUEkNHV+eTk7WWZLVnpwaV03SXclL3pvdTpPP0V0SVglPiwrP3cqK3ZCd0dgS3x3e2d+PGFCaXNXR0AlQj9wcFBHKG10KEdCUzRYTnh2SGtUaDooa3E2dGx6WiwzT3hOWldvVEZbPWBSLzpB''@;'; put 'put ''djVrMHQmZjR+NjEqeU1pcE1eRk1uMnZ4bjo7S0BpLllgXVQ1PGBqWnIjO2ksV2A0fU9mdy9sI25vWVB1M28zQ3t2U0Y+IV5WdGR5Ujh9KnNrfEg1NltFMzxUUEh6ZjM+W04xI2x5cUhza05BLCZBKyJ6dEYqNGBBWnJAaF15emJvI21LaSVxVGZGKlcyT2REckRZQG51UEwsRWZjKkpbKDtYYztJ''@;'; put 'put ''biw1XSp5djFBfGdtUDx9b3RBV01JbSM5KzYhPW1KY1Y/Qkl3OXYuYG5ScWohPD1haUFELDwkMltvVG16cEdNS319RUouPXo3JTovOn56RGtSbmUkL08+LHFoPVYzdD9zO0YjWzxgQno6RTUrNyw9YV1XS2I8cjJJfmIvczJMdik0P0diMF9kLDczNG9mMDNEMF5IZ3tdXmoyQWMiaXpTRTo0WVE3''@;'; put 'put ''IkdxcVg4SlVFQ2slUHBWX28pP1l+PntSIzNsOkppN0IwMUY2S2EsfSV3PGcrb1trRDs9MFRdPzE4JG07TTROTlFFc0BVPW0lSGM2K284Il1GR3FNQWpQQkFJMlF6ISY/SkFoOmFgeCVEWzsqLHFwKThHZ1NVUmdRKkZ0eHQ0b0RpPkQrO3JkVT5ITFZIXSNdMXcyZG97Y0RId3JhLH40MGBMemNx''@;'; put 'put ''Kmp0Qi4weyIiKjY3KGMlKSIxWVpUT05AdnxRSjZmKCxOK3U1dWFIdkomRHthKkFqN3BbW2VGRC5FK1NOYjQ0W1dvVjQ/UkpmQGMsZ0JlXmF1LiYzRExeLEg4dipQY3FMYio2NGQ2XnFqVX1JS2Q/NGIyeWhzN249T0QuWy9VY1Q2UzVnYXUxTiJqPE0paC84Y11IeDZHMCl5Kl9ONHNQYytAMjFK''@;'; put 'put ''VV0mbVVPczIxVX40T0wxUkxCOSF7dD1VamBxOShGSzRPYThATyp8SWkhKW5PalM3bGQ6fXUyNyQpTUMlaGJMNEhZaDkzPSwicGxwPmp0ZTxqeT5OfFFEQjFKLnldMUIvPX1QN3k6fXFscCRJT1F4cS8hZ3RoRUIiNkNYaWxGMnQ+O1EiW1NfSGQ5e2hFLG9gNi9gMFczYkBTZixjNEkmL2Jtc34+''@;'; put 'put ''QGMhTll5N0YkU182SCIkUn55dVZgJmI2N2BTWVJCbl4iR21KS2chKXlITnVZSUthPUxEM0dzOlpjVj1Ibih8QGZ1Zn5QdyYlMWhKSG9hMlFGdjI3Yy8lSCQsTDtmaEpNTDd5Tig4Y1dPLGxHUUVmREVySUNBW1YjelcxZCFHL2ooPnlve0FBMjYuKCNmKDcvX1RWXzF5WCNBNm0ubnFkTCo9JlE6''@;'; put 'put ''UEZiXVldQDtydkU9KSUsSkdsKit9YXY1I2hsciI/QGBLU2RMeWsmZVJtKVVNW3V0eF9zOk8xZ0B6c0hefmpZITRpRjA/YUFdYjw8d0J7YW13WT5MTlQxTytZalp1Oy5TYV06Z1BNempFI3x8fG9MeXtEIm9mIlpTaiFfTjpsRTRpc3Yhd0pVRzBmYkNmPTFZKnBbZy5mMSJlSjpzejRSVDglZW8l''@;'; put 'put ''T08vUjpZJm5sL09od3tjOyw2djAsX0s6VkpTP2JOMyJBRnlLbyl0IWBWQipjM2BXR3QxenN1eyk8clBIWWRLcDxNWyY8eVQqVm1XQSRvTDJ2X2d9Tnt7ezguSFhjfU9XeXY6e0x8LyhZP0ddTmQjNGNGMGRYXmouMGxIdCZhIy5kRndaVEp5PmhASTx+Qz1FfUAqdld8L194aH49eS9YfENqOFRX''@;'; put 'put ''JXI4fl9NZF9RWyxYPlkybVBicG1BUk9UdGdhNk9NZXF4SkM2PGp5MWRwKE54V3U9bzZyXkVRRnhqPzsrTFYxJWkmYCxwUlQiNllSXTpPUmFPdkpPalZ0RD1lXTFQU1k4TmFTQEp0IjxKbF5rY0hIa3s6dUFDYkU1PHtWJnN0TVVjaiRTSTkmOmNXeU9APnZWI1FBN3wiUFVDTVdjWyQ2S01acH5Y''@;'; put 'put ''ZDU3R0Q2azAuJElXQFBJTS5ua2Ipbjc7X21wSElJcjZiWVh4M21GLF9SQHNWNGl0L31RTj9EbkxAa0QrUCEmYT5zfjcxaXA8aWphL0RSKEhSUjpPRWRjRDkzKGM2WCZMTmcoZmJYPXYkNFo7KGlgLyFaW25gcVMyKmUrdSI7eV8jWlRXW1JjYFNtdVd1OjlDejNWOSFbVEw9aFdbT1YyVSpFcmBL''@;'; put 'put ''QyJtVXRPcDNacVFjOGY/WXx9Xzc9QUY6WFRuMUJAUVdiYC9wUE09amA/dFk4Q1tzd0didXNaaWRCTWUzWkI5Z0pIJHY2fjw1MWhvPyEwYW9UZDU4SGNpZTZQISZlNV9ucSxCRE1VRDR6UHNjQiQ0filHZG9Sa2dFPW0xTz9rWDtsV3sqdmEpWVVJN0wmOU5qPks5b0xabUEmdyN3d1tyYzlwYH10''@;'; put 'put ''SGJtRWpdSlEvKyooZ0dSUXIud08qeHRmMilwOzNGTHJmd3ZlSipTITp4bTBMbnd5SV9BRmB5dXhgRE1+cHIjQj98eUYpWzVJXy9uSl1CX1QodHR+SyUwdXoiYmheLHkjdmk/NGx+MiR8ZSQjaj55XmleYS9NbTRBa3IpcjZ1SGNxdTFlbUgxJk0hdVZXVU1PPTZxPlopXWh3cEEzO1hkMExnMFdl''@;'; put 'put ''K21KTy9FRzBxXiFqfG5kPltUN1UoL1lEOlprTERCcjdla0pUKHAoP2UlKDVheXZkd18hPEI6JDV+cyQ4djNhQ21rW24qMVIqfDZdOXY6cDBDZUNCJEJhLDNecV52OlYzNnJ2Iy4yfm9HfTY5IkdeRnxufTI3fkgwZz4kOTFvNTpDI0kmYm5xT1FMQ1Nnck0mLjpZcnAxWXIvLEdUUT92dDtpN2By''@;'; put 'put ''WVgxTXRKPTByfFk5VSRoLHxyJkxDbCRKJCxXJlcoakJ8KEt+MnR9RFYqKWJBYHE0dSE7MXg7LCxCS1siVUY6MEI2cF9VTUtsZzVQZmArdjp0ZixfV2wxPmFRJmU3amY9JHBsS0VMTkkmZnJsb2hlen5ZJDlVSH4ud3JdO3w/aFJaX1B8JisyaS5SQlA5MnA9NihBPks0OnFuPGtSczh3dlNSTG5m''@;'; put 'put ''X2M8SD07Mk9vZiY/SEdxKnpuKTZrd2w8b0w2cykxRCwhUylgT1pFfHRic1glZz51Vy4jQWB3VFQkMipNIzBSUWFgPG9+ZD5ZampmbmZ1ZWhJVzVRQ2RYWCNNKnVwLnZZYlc6MTVdOSQ8TUQrUlt9bTJ+e1ppc2VNdC9rS0FjPHQrZzIkZyNxNURre1UzRkd6a194OSJVWShleEQmN0pELE99KVRp''@;'; put 'put ''X3RdKyZ0OSM6JEs1ejplPGE5SWJETVJyd0R6RmQ6OEd4InBHaHBpQV9pWGZJI05QYHQ4Tl9eR15vLEx+YWc7L2oxXjMvcEl7ZV5ZfCpSbWo5Q2ZmfkIwM0VQNkNZZDhfXnhbMUtpPV4oe2N7NWF9aiNnaCRrQi9PWjwkOEVSIVhEbl0kaV8zfT5OO09Gb3Q3ckNvXiNWZyxoX3duTnBBdHZRJThR''@;'; put 'put ''bTxxWEdtfDRtdURQYDU3PD1nNjchLyJWbWR5VGp0bDRqSj0+el81SFY/anZAJFhRJGpFJE83NCVnYG42Tk96Vjl1K3lVWmsvV3BsKU1VWEQue18lNUhnNmc/R2UxeXRsQksoYk1ra2V8Lm91KF1fSHI/WSkxbDoldnRhdWxidUtlUGlUaUpuakYuaFY6MTpgTn1hfVcwYkR6UEBRdGFTZz1AbHUh''@;'; put 'put ''M3w6UmJbYmZ3SkdZUCQlTCJRU2UjYzJHYEtGWE5YNkYkMEpINHheLFJudmJOcWZ2OG97YTJASXl+YEZEclBWQ3MzVUhGPitBa0slbTE+dFpXSmx5I2dPfG5hYT1dODZyUjpDTUtqb2EkV1ZLL1t6VnY1fH5bTnAmZ11zM1VkIVlyfmNxNzcvT086YF5gSVt1dCJNTn1fdnZ3dVJMUVF4fXdDYylb''@;'; put 'put ''bFUzeDVgUUZFLFR4fHlrbTpIL1JMeSNYfjw8dF1nPlI6fX07fT9kOVozTUVeWTBnMGUvJWRHfSZRJkolMj4yQmY3OC9bPCxVe1guNDJVaCtOVTIuNSZMRUFPQltqZEBbIWdSdlsvZDMwa2MjeDtwU2MmU0V5Q2RQS1hiRkBiWiRfXmExS1NNUj5YWlh2ezRuKzl+Z0woX00yVjJiNTgoKl16a2dP''@;'; put 'put ''MDYpPkpwcy4pS21BOzRLY21EU2tGNCQySm88JS9MSls1OjpxTVElKlJmInhjRzZtdzkpZnNsakBeWUspfT9fZE5OQlZnZEBSbVZpN29HLkxLR1csQC9IbFNRYSpzclcvfitzTGRufHYwXyE1bnJLJk9WSj1HMi9SJT56dDVFbClfOiMral1xQDpUR2ZKWmQlYWB0TG9qVn5MKHUwNiM4NyRzZFBM''@;'; put 'put ''QHUockwlMD1fcWFlIU1je0B1Ql5fIitNXmFqakdYa3hPJi8iXjdXTTllZmxEIkhAcX57bk5kQlh9Z315NmkrP25YODIuKiFnJFhUVypqemwzVzEoc0lkTndLRmxKbk0oWnxoMipGcylzcShdaiI8YHZAXWE6TW47ZmFGaVFAWFdrRXhDbDw6Tmh2cHFqdVU9akM4QE9gPyQ3Um93emV3dytnWiJk''@;'; put 'put ''b1FlUnM6bm1dTnZ1JS41L1hfT1EqRG0mb3UyW2QkXWgpTERsS2VEQ2o3PFlnM2BpKDV4Vlk4d199REB4T1ZqbEJITmcyX2s9RkYjdCFnbGNNfEs7TTVtZ2BJTWsxezVPXz08QU5IZCErLDIoJDZkak0mcHsydmdYL1doQ2hPbWkoKFgoTXJYUUI5V2s0JCRVUCYyV0ZFa3hIImhESHZVPSxYT3c4''@;'; put 'put ''Qlopdm9EazZvSEhjJCNYQ0BEelIiNTJ7MWQjPDU1OXRWTGlHM1RHQGFhbTdYOEhTRFIwTjlJLlhUYTciUlkkVUN9VFBnT3FiZkpFSUY2fVc9eX1sWSI3YEo0NFBBTFJOcDJ1Q0hFNTFGPmhfZERLJmJbbHVpfTZ1eD8qJEJNX3dhKmk5Tm9zMCYpVWFzcVYzN3VYdncvZVRGK29PTUFgaSl9SyFx''@;'; put 'put ''O292aHVPQDRrP256RzM0cU14eiQwKWZjbUkwfn1bVVszLkluLzNWSjwpakskYiUrOFFuKH5BKnxrdjUwXS9UbTFgdm17Zi8wQW5EVD87PTw1U2hYbzw8NnFSTXFCVCo3OVhqcCNJXXVHJXh8ND9mRXBrREk8KGApU20oREdXOy9yRU87Jk1GMXI0RU49JUghQzY4Y1h6Tys9RzMqOFkzfWw1PHsl''@;'; put 'put ''ISI6SSg8YFd8SSZiMCpoZ0I1NGpeZz01V3AvamZ1ODhzYnd9ND8jOHUsJGc1fncpRll6cGlpK1RNaGZpLm1qanNURTg+KS5McCk2cD5RRURiVDUwWHpEMmtEOHRVLGg6UFh6ZSJndUtgZW8ydWNValA7aCxoeD0mLiJuPUNibWEmQUI6cSsze2lzRkBMfTF6ITQxM3hQJUx7aCl1SjgoYyw0WmZJ''@;'; put 'put ''KkspbCt+XSNAI2YjWzA6eSwmMUA6TX5ML0Z9dDlodTY8QHo0JWhdVldUL0AwRVd4I2tQY3RrYTFUZlVVYnJvbzlScTNLfC81VTZoRn5XY21QX3lSKnc5Uz42JS4qdFlyTGNofEh5aU8ydWpwZVA6NStYY202ZUtjcj8xSnVNKXUzKm94XU4zKWQpenZUcVkqR1JUVzJmOml+LHZaK3VKU08yX2o1''@;'; put 'put ''RW1PLGQkMngxeXooel9GcHVyeSI9fXZWKWY7JE9SRkc0RyZ6ZVRRdkU3XzEiNXYiPUJrM2BlQCNXLFdwRkZpZUNJWGIyeXNMU14/JGdWMGBDSz82cj5tUUkxbSsqUjhZSk4zSmVkREgmXSxaUmVSVTZsZHg3RmRMNmdveDcuMFJUOVQ9ZnNVNEJVZE8jQCZOI3BuRDYvaG56RUUxZip8VndaXU5m''@;'; put 'put ''eEk0Ojd4Vzp7UkhmeTEkc29MXys4LDk0R2A+Z3lrfFpGR0EkZTFxdip9MWA8REh3ZDgpLEAhVF51K14wTXNQcWxgT2lYfUFMQCF8WnRWQm42R2Q3LipfeX1sOT1EIVRvX0wxVUpIeFBIVkBUa2M0Z1FjRTVNKUVZZnIkRT0lLzhkRCptbDlsYEImRkhiX191S2F7cnBLP3ZOXSV6eC93fnV+Jk4p''@;'; put 'put ''YispYHBFcWFbKXN4bzJmVUtLT0csVCFuKmRaPCM5dj1QbjQzPWV7dmpTci9AMmp+OEBaXjVFXkVxfSNOYD0ifWwiOTxadUNJV21lU31bKm10MkV0RzZpIihYJn0uOHU0W3k7YyZYMVVYc2wpencvLEghcFRAQmtJbnlaU3o2QzAwNnFLVXd1KmN7ZFhPKjJEbUdwUiFoOjZYfS5GSiV0R0VvQkZh''@;'; put 'put ''JnJXUXNnK3NYamBKQDN4M0YvUEduPW98MmNeU0kzP2xRaTw2fFpwXl8zZkc2aU9vSF9wdXVZQGc+TTZEfixQcEhmNSwrejFTNlNOYT9ZJDZoZSFQUmMhI1tVWVB0KXxVZVsqWnJpJTM/YmQyNl9RW24/SkJ9SyxTeXQsVjYlXkZ3VHw2d3EmI2NpNmtpTHouSl4oOl1lMDczJiJrMyFAMGY6byQu''@;'; put 'put ''bGsja2swZj1RWnQ5UHpFV3ZhSTJgZ3gubXV5KixIKURXWCN+aFFeWXxIPFsoLlM2TVtNMGo9ISs6ITFmXnpxandSJDQoOHNAXllnay47P3JOVD9aZ2suQVE2REJQUDZgcGIrNyk6NDR3N1p1YzNgUmMwUHN2PHJHb1NyaF5lYVo4cWhWcyhQMyIpLCUmJCN+MGc5PiQ2JChAMUJqLHk7QFBUI18k''@;'; put 'put ''SHZLdjF2MG1LZCJnMVBtPUB0aFY6TnBMdVE6TilLO15MNH1NXjw/cEZVaH1GfXxRNWMxNjUwU1tEflohbHVaZUJ1RlAlUHRJWE18XiJKQk8pZn1hZ3hLb35qNE9pMDs6YTMpT0xiKVZjb1pkaE1hRj4yMGl7eiElUHBlYzU3VDhbNTtAJXFlWGFnKTBuMTtAUl1HND86RyU4K0t9VUA7WHwuTXcy''@;'; put 'put ''Q0hWOXZhSVd2W14uIWA9YjZNPlVHSkdzJGddKiY9PGJGejZ9RFQ+akxBJisxS0JSKG0qZ11Ea0tSNWVMT3k0WVAwZHY1MXpzVnFjL0xZVnR0dHBPNUpAOyY+IURJYzVJczB5ZGUhaH4lNi42aUJtYkYwQE5IXXJLWHh1I1IsbE5rayROeUBHMi44U3s+IS9maV03WFNGKGFESHNoRkhzR3NyKiRJ''@;'; put 'put ''eWooa2EzUiwpIVIuRDtUKjBfQEMuRUMseW5NZnVhbFkiPjZ1eTtDZlR9NnU5Zy41eGF4ME5sejReL0RnaU9UJUthKTRfcmZnVnVPOWJZXW9OT2Uhc2NJWEJoQXEvcV9vJDNHIUBXPnJeOFYvU3gyQi83O0VNVE1nRk1aYF5rYFF4Mj8jQ2NPLDcsQlhSNHAicGYrUmc0YVp7cE9pPEt1Oyg9Z2op''@;'; put 'put ''ajchPnl1MWE1Yil0THFaV00kSjtWJHx0Klk1ai4lbVomPHIiOT5DRikkWGZebi5tbTVXRTFaJG9mRmpZRjslIiVpZVBjfDJEQ2pRUnldQ0g5UzBbakVGVG9MSzErOCtgJFkhWkArT2shRUUjSnZfPGJFPFomVTo6JE1pcGlpOUJnKGhEJVY/OiRhXTJBNEx5dVRhZ30vRlcpSVF1QF0rYnBUPkcl''@;'; put 'put ''XlsrflIpKkNWWCRJcD4oQFNZSH0jUXZbLCZLfC8/Pixreyxje3Y+cHJSMVZBfThAYVZxdT8hb3ptRiwyViRSc05OQWBBSmVDXlMpMzMkX2JWPjxEWHMmZWJ6MT5Ffk14OnB1Rj93Zk5gU19RZTRsQEFqODw2MH1VaTQ3MypqOyZrO3N5fiVMUW1Cfl50VHhOYUguLHB8ZkwzaSZlPltObkNOdTl2''@;'; put 'put ''WWR1IkgvKWdreTlJQkJYUiFzWG9NO307YkE+TkhLY31VMUo9aSJHdFE3UjVJRipRLk9iS2lBcHxROWg1KkxbbHErP2RlTntpeGpKakVKSDIyT0whVWEpbltNbU9lPlR2JUdIcixhYEMuUlI6YVd2Sm9helB6dVImR2J5OSFqSWVPI0w8eEpgeyRgPWQjPlREKHRGfDUwYGZiImdYPUgpdkVpcjJr''@;'; put 'put ''Yi51R15faz5zTmJpRUtIJCF+eXFFR3dxRW8pR0NEU09YeU5XKT0wREphe3owPVJDYmkiLipCa0M0a19bdT5hInF9eHxLcGd8Qn1uOmdYKTZYd1sudmQ3R09pSWp3QEY+eSMjKF17NTxDe1YqK0k+LGNpUlsqK358KD0/bTsmVTp2NXdASCkoSEZVd3lYamAyTDo1dnQ8aHhAXlFZRnVEL1Jqb092''@;'; put 'put ''Pks0Z0VWTSImQzdvRFlNPShzTkk+STx2YndAUj9iJklNdHgwSSVQT3ZibV5eQXF2fTEyQVR8cHxJaHhyK2EuR3gsciVIVTVdTGZHSVUiRCtBaiFCP11bPiNFXzhzXm9KTXkoQnVDdiVbR3YmdHNuTlkyMH4lKmolbi9DX1pkdUBnbnx9Pm5NRFk2P3Vjbk8je3ZVQjJAckxONTdtWWhiQnF1cmt6''@;'; put 'put ''S0JCbjc3dyswL047d3szekNaJj05I31wP188dFhAZCt8XUE+YWVbKTdpKj1RVEZhQGxKVzxeIzBMOCNxcTo6S253NipmPHN8QnZXal1fL3JZWWR6RmdRbWxTdGVPT35SfFVBIUxQZGt2IkRoR0hhOiM7VkIyU3p8WlUmKkolRSsyUkReQmdBRSpDQi5VNHduQGlSKmlhKi5hIS4hVWFsSj1pWHl7''@;'; put 'put ''cjkpRTArTHI0TF44UTFMQCpiaGE3ayE9eEQ2MGAwQGlgQltyQi9YQDBGQ014OWp6ZFJYSUVFR3JoOj0xWnojdlpUdHYsXWpnKV17fF1qVmVJPH13UzNlU3FGYFo/QmV+VW9Bd3F1bSZyRkE0ODpBay5HPk5PZiRgdHtwOnk5K1hQKmhHV2RpOGpuWylfOllBUmJpbltoK05PUVM3eEBjc09LO11e''@;'; put 'put ''JEJ1PkgmSCF8OmA0e29KPGxEJW59QnhKVD9MQDZ4Qj9ZNkxJSGA6Y297Si5lVkh9blJPdCwlOmYuSWJed0NgRkg0OF9tPVE0Wz5LJGpEJUluRStnay9ZNjFKfDVPai9qTz9ka312VikoUGYwRGROLFsxbGtNeHxuSEFaOGNCQT82MD1seVl+PmQ6aVZzdj9ydTQpW2gzJGUhWyxzeCUhXjhCZk11''@;'; put 'put ''eV5XOVV3QGslRV8wMVQ9dXFtOiYlXUJheH0kYGw2YzdwXTBJTHsvcCpoUkooQ1hbS0lgUEV6LmIjWkNsNmRzRmE1NlpRMH1gYDw/I0hKU29kLz1CJGVjSiNhU1pmNyhGdSJJazQkLFRFUEU/Zi5ZeGVtRGcxQ0VsQitiSWJJPD46KTxLMVQwXjRQZ2IkJmRFJig5dX5vLi5bOWVpV3Z0RjJJcHVi''@;'; put 'put ''N3VbN11tVGY1MGFpZ08icCxRRmpYeTNqO2QwZU9fXTdrMFMuK1UyeWdCaTJ7VTJDc1RzKHgwY24kMzZqall4Oyt6PWx7LGlPZlFlWk1bQ0JadGUrfG9HXlVxXzRlNXhAajQjTEBPOGJQRFteSmwrKHZFOE9TbV9RODBIOS5OaUtwJXdwJT1kanVvL3E3a3tNRnEvKkJbSWkuRm9pM0MmN3A7NDZ4''@;'; put 'put ''Tj1dQ1ZWI0pifDFDemAoSjJUNS5eNzt4c25qVX1IdmdeM1spIVpFNV45PDJFWzY7dUlncE06biReUiJKRlFvQD9fOUoxWHEvdzh0RT4uTig8MFg/fXNSMXZTRXlnOTtRSVhvZiM1VyVpK0A7TmksWnhUP093bSJ9bEZIbGAqVVQ/ND45KXNnT0A1OG5QREhLMUxAOEQpKXwkWHpsWGtoM0plQFNZ''@;'; put 'put ''Zm1HdWB0M3RPbzFKI0xLSzBfPWg4V2VFR0h7KVZFa2UjfU5WPXYkSmkjKik6ek52Mikoezk7ezBfKkJALzRCeTFDcyg2JEA2UVgobnUpQW9lZ3dPI2Q9cl5QZV4hOVFVI2RdZltIYnhAbl1GPlJTfXp7P0x2U29NWHlVbHldJDt4WzhEaztONTVtOSZDMntGKXVYaWRFdU1RWVgmVzYyOVUsYEgw''@;'; put 'put ''K3NxPHxUfWdTIXxHZmtvTnJZNiFAJWNMWWAmMjAySE0qMjhtPFVtdGF2XXo3JXxdN1FoUjJZe2lOM2RYS0VRUUZCOyVpSWouZztKPHhjSyNQUUZUMV8qa0IiWS9VZDFoQ3VnM3Y1JXouZEc/VGohNCZFOCEpX2kuT1RJNkQ1KXEsX0k7bXU+VTkoY3E1MUg5ZShXbFIya3lUNWtsQmQvZzRbaCk0''@;'; put 'put ''bWVWVHQlSGtSLzxPS0tUTGMjekN8KWNdang/IiZDWV9YX0w6aSh8cjpQY3lHVHd0RUNTbUJ1bSU3YyFHIzkkRTBLNi4pWDdzKFJtXnRNfSVsPjtyMCwzd1Erbyw/dEJNSUpkUWAqNXBDL1lpL1kjbV8rLmRETngpKiQ8MzB3d1k8UW8hSiEyblp0b3VKIyNWOHlGXTNjfi9HJDtlWlIieFcsSn0o''@;'; put 'put ''d0ksdipCSWV4Z2QxamtdSExeeGlRMEp7cGhkJjshIShqNnc0Q1BldUV9XyEldlVYT0B6eEx3Nm80YTJELFJoQF5pYS5SOFAyR3BmOmFxJUR+aVREQV9nQGw6JT1xSlNwZVZ4aGUqRkxUP0ptfW9NREpTT1ApcGY7LiExL0UiQH5YW3hnRllGTCZDOW1zek9INmt9IUd+aWcmUXNKU2pRXjFTQG49''@;'; put 'put ''YWNKUkArPjw/IkEyVTVTcFFPUTBoJDFdTCU3dlViJWc8KUxbaGNBdlVqZW1hSkV2Lmw2d2V8TWdTI2w7YDxZNDEjOV5oZVZGQUZzWXc8JH5lQCNGeVBINFJNTGReWTVWSWcoZWBocG1IfCthL0AsK09CdzxWQTEpRkE7ckhXTU1fQkpTdmE8NVVsQTU9az5GVXlnNjFrVXMuKkkpXyRpWGJfc3tE''@;'; put 'put ''JG8lIlJAVSxeaUtIL1o0K2B6WUF1UD1BQyluLmlKd3o9ZDV7UGg0bllQWG5tWHpoZTlWe1V8Iip0R3RxJTl8Yl5JIWl2SDF0RFtPK2RCN3o3cHhwWU1uYXdgLE9OWWhBT0o6bjoscUtscSpvJCo5Iks7RmtWOFk3SDt7Lkx5LihOYkRfOT4uSGZLMVVsKG5ecD1MMFh0ZCVsPShaQ1MvZVJLaDlD''@;'; put 'put ''cnwkWCFpTnNBSkRUYD4idkIyOVlBdzUiSCRBfXJ3SzZ3V0tNYEx4NzVGR1BoKmgvR1NwdH52Q0Q7SiolfEJCKnZ1b0h3P3AyQGBHIVBNVEp1SmtWI2ZsWXxIeFFvJmY0UjFrZVVaIltoNDoiZUVkPGtCaiNJZiVCRFoqTWo5RkApP1IvMzlZQl1ZZ1tqI1QkLzBNJUN+Zzw1U2pxR3paRDF2U0RY''@;'; put 'put ''L016W215bStfdUQpLG5MRnglPSQrcjU7R0ZxcmAlMzdlSXpVJntHPl8oPSJgUGE1O14zfWNweDJmQFpSUWokJX1wQldgeUklKkMvPyQuVDsmNVIvc1gqbVFJXW9eVlZ0M0JQZl06TSxkYFB7WUhNRHF+cj5QImAmQm9gZVtmeHFIeEkjfnxPMXc8TWYpN29GbGo5U1ZLUWFaW19XKnRndW9ZcTpu''@;'; put 'put ''TElPUUp2YFJ7RU11Yz9td0NWIUokYGlSe0RLPzFINjUlcVhxWytORHVmYGFrSiJRY0xGNlhVYC4zM30rTkMqVlZHWmplUzReZyhrb3wrfF1aUXN+MSxRSWFRVj4jcyNDLmguP1VIc0Bhc19jLHpOcTlMTmNbTmZ0OSJgKzByNlBHWj96dmssTSQiM1k+XXdwIyEsRD4paHFyUCh5aVQ2Im9HbCVG''@;'; put 'put ''SHM0R3RoZndAa1BGbnJOYCpvWzEsODtSdDpxMUxgO2ZFKHZLQHhSIzVpK3V1SCo/XSNzL0AwYXJnSyVeTG97Pi9kY1Y9KktrMUw8UUZ3OH5XSChhIjBufVUrS2o4R14mO21OfnFwb0JNXmN2TnVDeEdzNGM8bHQoc1s8L1dJajN1MmMkTWZHQiomYExpQEIua1JVNlNtYHN3bDosbHIvSnpEd31C''@;'; put 'put ''W2kidj0zNFtaJnhDV01bM0s3anFJRjI9Uy9EVUxFc1k5PVJjK25XSTFKKiUscV4zcD01ZHlTYD5Id2NLI0tgfnJdUjJ9OSVNUHAjcmVva311ez52T0YuTHEkZkZKV2NkW0x3TGF4M0RTdE47Xi97bk1sQG1XT1kyU3doPHFnUXVtTEx8W0BGR3BJWE1TeEBHYl5gNHpbRD1VXUlNZ2tmKHlqIyl2''@;'; put 'put ''NSQifm5VNmt7UnxQOWdkM0tSPmB8KjduX1g/SyYoMn0vJkJlNl5FL3guaCMmTXdBbEU8PjZPI3gmPk9qVGFlcyswIzo4R2UpcFN9NlM9S3NLalMoIjtWcztOYjVtZ1Jyb2ZbZzl7U240Llo0I2o5QXdTbSMsISZKSiNeOy48MmdqWFY+amJbKywyMExAZXhiV3Y/Rm9dMHN9dEQ8QkdONV5wISJE''@;'; put 'put ''eipNNitPc306KVBuL31WSzw/e2B8a3lVO1dpQlpffnZrfURrcj5LZHI+NmJeOCFATXcqdStCck5jbUtPbXx+T09Eck5ZNmJ7VnZ4Z0pIKC8kSGopdVplan1ee2RIeCIvKjNMeUM2WTBYaE1xO0xaKTEpUm5SMENkSF0zY3pbQTtoIzdrPklMSVUibSsvdHEvYl1HeXRANUVFTCFNbSszckBBJDQx''@;'; put 'put ''OjVteldDV0Y2b0dwR1UuWGlXP2dNSVVgekYyNmFXP0JrRm1QJlMqPj8+KVNrb2olUFhrPyFuZl0rfDM8UlA9ZTh2VGxxWkhbMXFLKU1wVXIyeyRHPGpCTXFXYFBoYjRKR25PcFksI2pHQythckFyRyQrZ31aa0QsajNWVHRtdEUkUHxdM1g3XzNNUjd6Zj1uJGoxeXtXRUI8Tz1PfV4lW1BKSFN3''@;'; put 'put ''d1lrKXRnZUlOR0dPUFFFR3EzfEBNQDMsYjBhUD5Xe0t7MGFqZWhBUXlEUHwwbXY/Z21rUkdsPz1yP2N3R3IkcnxUJSFDbVQ6PGBQS2F4eixnd0h8b2JFLE5YMGdpdFBObyQzYWMjfWo6e1U6cyZeVTtebGdNT24uVVhpYj52VU4jJWM9ZXgzI1cqIldyKTAsd0BkcXpZP31DcEQ8eHlqOUw8WlFn''@;'; put 'put ''amIjLnBBcn5Rfi9Dd0EwTV4kelRfPiVBTS9RRnxEI0t8VSE2SnEzNix5Qz4vUUxidHF9M145LyI6ImdERTkpXjIxdD9MYDNNX1svQWslLHY6ajMoZmE7QGM7N0teQGM9YDhLIzhVWGw+YiIsVkM7MHIxLGdQVVh6KUx1RT5bbV1USkl5KVhvX0w/QVkvbG5oJGFUYT1eL104e2F3aUQzaUZ2blRR''@;'; put 'put ''U2VyMiFFNUt0KztVMEl3KGReQWAwTVZ5Zj1AQzVNPCYvTUlFS3V8JEtdcGZ5dXtbNypiYiUkNUo9YEopJGdQZVFRU2JKOzApbmRBSlJIcnVFaTEoWHhlJDtQJUJOSFhlXXkybkA7WHYkK3k7eylCTiw7V0NuUWZjKyxNYyxqK1Blb0JrL0ZTRDJuVj5RXkMubzRrMS9xe2ZBSW19eTRbWz5AY1BF''@;'; put 'put ''NkM/ImVXKVdHeXVYIU9XbCpRdWY1ajQxZ1RQdT5mbzUkTmduLlhGSFtnbik1bHQuIi5OVX1CZDcqZT1BLnczTWU4eiImRHYvRmhEOz88ZCRlSE1FWlNQYylVc2ZHNF8sUldRaCEkKlVzXld4S01hTyFPL3QrK3VSL0JmUUBfRX19ZiFbaWR1TiM+PyVPRU8zTl4pXXheNkJNQHIiMVJUZ1pwZlp6''@;'; put 'put ''fH1ZTDJiQm46MmVHKj1aKUxLIXE5VURAWCUsMVpgOyRbX0A/Nm5FSHlXdnQ1S2BINkshNTAqNVd0RGkvSiFvNEMhencwe2dMcjJPfWZadn1BKCsoQ2IpQW5ZVylaODFTUXNlRnhxTCZTKk1wVEBMMGQ2WF1uVXE1Q3NxNnMvZjlvKC9YJD9VXXlILjdrOjVeaXtIS3soVEtAe1ZhcDBTb3B9TkxT''@;'; put 'put ''STJGYH15NnEvZX1qViteKStpV0F4W2Rgc3p2KSF1Xnw3P1g2Pkd9VH5QKzpidD05aGF5e2pINjFlfTVRZXE0fH1fZ1VEYnBbTTBVI29pOER6ZiVVPVNzXmdSd0MoZT0qIW07NSVnRy89KzpnWEY4dmpJKVM0fGgkNi9eUWcvOHc9dj55VUEsJmtmPV83MTd5PE9EbTBSYmhuT0ApM3A8SkIuKEdu''@;'; put 'put ''KlQwVEpTW0Z2VENeZnB9cCJtTj4uO2ZhWHVoUSR4WVhmRyshW1B+IXM9bSgoNXV8eVV4YHIvU35ZOlEqdz53eCZrRyY5ZGdUb0M/PU1FVGs2XS8yOFhednppXzY1S3FxWWtoUlk+IjtHcjl0YmFPTXQqTGxQIUFrYUNqPy5OMG5qLC9pSX1jRmpbey8qV3ZRMUBlSCF1aEh1YzprYF9kTCZ7WHgl''@;'; put 'put ''WiR7UFpuRnBsXyY+JipCZmhWVi5bSVNROmQ0My9CJj95YVdRJHdvUUpUeG1SOjAzXkB3ZSp6UEckWFpSJEVOdU0pNnZFc0YvbiU1amI+TGJpd0c3WTpAQ24sTT9XYlZEL3tnO0MxZ0pQaFB2WiVaZlhUbmgvVjBMSmZ3ZThWL1NRezJjQnI9ZjlXXylbeXQiUVk3KmZ7ekg5IThkL3EyQ1VmeSRG''@;'; put 'put ''flYscExJK1VsbnYpSDEqM347YWBpQTRAZk1+SyxnWURdPV5CaFouWnxWaW03d0taQUxMK1ZkO3pxXnR5bHlLRHJOSCF6dyF9cihFXS49PVcrP1lSemFJIUVZTCpmb24jIzwvO0Z+ODkpSUVEQ0klZVI+TzhAZT8lQUZbYHM7XiFCZSpNPzZoUGdgfTtyIkU+ajQ5eFJgezpEcFFrRGl+JD4/V29t''@;'; put 'put ''N3pZWkl6VEx2JHhydUJwOU9TI0Y2UnVbVSxpSEsyYmxXb2k1L3o1ZmpRYz1yWDBydEhDdURibyJCcz9tQyZZJl95N2F7VkpnR1lHKlJxRnNDa2tOYUphQVZSayVjYjlefjxNX0l0PDN3QlRBR24jZ1deW2kwRjJDXSxGUixkeSFPYntoUV5iUV5CbERdRSFxQmFSRzByP0dDcUJYRmNxa0JaOC41''@;'; put 'put ''ayREV3QsM2VofGB6M240RV48a11WUHMvMVAmckZoZmVuSHFiMilyUlp2W2U9NEdPTWNJY0lFQ3VGTChGdz52fWdtP1lmTz9jPmlubVZKMlRMdmQiSzFkeWQqI1NFZmEpb0h7YUZWKGd8UGswJFBvXzkoS2lUWE9KW2RHe0pvajRUXyZkX1E3MSgrQmdMKH1efldOJk9tOUpveWpCfHRYdi5JTCZq''@;'; put 'put ''bUF2cHZPfGljT0Q1KyRZWW9xTzMpR1Zud1JtdGVvPlo/dXdhbFVzKXBsaTtIRk46ayk0N20qTjApOSN3SXN1IUl5QHN7OmsrTFp8Pns9USEseG92enR6S0o1Kk16PWprIj5yd2RpZ10kXm8jSzJuSil1V1VzeENXYEUzeClYWylTWzEqYmNJc0ApVDVlS2pAKl97cS9NMlhPYl8udDNXQGsyNyVm''@;'; put 'put ''S0FZdU98OjF7T1VzVDgkRko2an0kZFFPbGE6MTM7WylqJklxMXQqL0E+K0M0PyQqKjo3Y19aSClyem0oZzBJRT11Y2l2W2hAQGtxOC5fN34sMWNzd1tELzx6cUJBIzMhMWshK3s+XncyZT9sY1glaFMkVWNETHd1TzxDeG1oTChzQixYWl4/VThJXVhUeTRmeSFOPiFJPHVOcVJPNSlCLzhocGAu''@;'; put 'put ''XjB9MlJsZVBuMFguKEQ1RTd5el9rW007dGkjTU5nXiZMPi9qS15nUndAbXVqPERZamJYNW1TOHxwInsqUjxSXjREZktIPXcvWDd2NDYpPUdKW1tMSndEJngyeHJxKGhHfUdFZ3ZNPyxWMlluV11RKDwuYVZoZElaODFDMW8qS0tLMX1kcEMxNCF+WVVzXmYubC5ARj4uaHA/IUJreF5tZkV8KDEu''@;'; put 'put ''UG10aCN8R0dkYF40UlRFZkhNNFEiMF58aix6OFEzfjQpLndMYjliL1BdTG9Ib0w0cDBNc1ZMQjJHJUlGNG0keHBibk9qaEVBMHIyXnlXJjVQKVtTPXV5PW4oRW9HbFB+LjZkL3wsJEwpXndCTkpqVWF4YXs2Jjcma3goLixFV2U8WXpoSCYhfEBnRD53NjV3dmswJSF1UH46eSRMKV5mSEkpczQk''@;'; put 'put ''XnV2LzhHNFJQM355V09qPjQjRCxRTkdvfG5xbVMobU1jbj1BbCVKVHV5MFdTUTxWdHc4TCxPVjRwYTRMYHZjPktzMyE/SF56MWVGWXM/d1AuPWUpLjxuTD5uZTM3ZGtRUHM8elgkK2c4enpBbjlbIjt4MjVGTDtKbCx0eU0jLF57VkxefHIvaj5rOypSRFk1WVFNa3k7LkI0O20qZ0pPR04kKW1N''@;'; put 'put ''Sk5DbUIxYmBrRyExNSl3Y1JVTktjY01IS04qZllqKTVbNiYyS2dWJS44IitAXTgyZVYxJGxSIlBAbzJUNVs+dHIjdWhvQ3FRSCt9VilfQDJjODRJO0VsJDc8RD0iV3chcUguRTNXQX1fWWZtdCV5V3BvdjM0a1IybCY6W08mSDMya2NnK3F3d1dfSVs/Vj09RSt4NFdmdyVkaEwzdz09eE5HVk14''@;'; put 'put ''JDx8R0dWOHNEYl8xWUppfFZVN0txNDhWJUdxPUxIbyQwXyIpXXtJUipMSjZrVSszSztnNGZuVDJDJlBFbjlKW1JdVkRQaDlBeUk9RSpEJTlZaFRsYH0zMSlHNnwjY3hHTjFeT3AhVlNMQTFFSlcxe01VLjVIdiU8Q1ZPOCp0RlN6TUVNRDlVOEU5ajxyKzoiR1Z1ekw4IWBSLkBOYVhWbCVreExW''@;'; put 'put ''U0QjbmkxekhRTzhPKipUZW9GP1ZQNzMhUSFERi43JV9sSXBsVUd8ckFgMFVrRS5vSmU9ckgpa3V3TEJuRDBDTE9MdHtLaisudXo4PEd8PDhgXkBLSG9XNngmPj0obUkhM0dnQnU+VzcyTkNONnVvZSJJOjQ0KVpLYTAvcmVBPitzWCssRXxnI1VzdFE4ay5pSWVNRnxyUlUuPkVIQmcwdT0wbD9a''@;'; put 'put ''bmR7JGUje3dWZ21HJmcqYl4xW2BeQXU/dzFXU09rNWl+d1dFWGRwL3d1bU1kfVVQcEJdPWAjMWtSUX51TERhPGlBbkpQTkM+UlQ9V3hib0xlQVJaNjJIPSlCNWo8ITJpTyNfSiF8aHssSzM3eExnU1R6VlhNRHFzPTZzayRrQ35nT3UmY0EsLypxLE5eXl5TV0JzQzY1biNLOkZqTXpMS0smeDNI''@;'; put 'put ''RWtVJE9sMzp+SzQ7ekxTXy54WSR5PFN3RlcwfSM0a3ZWLjF4RXg3dWVedWVfZVt7cl1qfnBZIiV0KjU6OkBrdnBaQSZoYEohJVdHcF11RVhnL3R4R0pPI0JSKyRSUTNjZSMwdlM0O2pFczklQyIkS2xpRkFWPWVyTGhFeUYwSEkvK2h1Rn5DcWQ0NX5ybEdodVJrKXcqPCIwbG5Qc2hBaGtvOS4p''@;'; put 'put ''eCxkdDRpZStpOyFNNXMrbDQkM1JsMnVZdVJ6KXgsQGQzYVtRT09TS1ddVTt0YmVPMU1aVCYsUDlHfW5FKEVOISlRdWQ/PXJKYSJ1Vyw/bEhlRVBKSTw5SmRASSFrJTQ1MV0hU3dfUyVjak5vdTlOIzpGY343RVdIODQwZ150aUBqcFJNQTlweVBJcEpMQ3xGRVlvW2dKSD1EI1hgPUBLZlJSMWom''@;'; put 'put ''bGdPNiIjI2JeJW8kPE41NSFXIX5KWHpwL3U6Q1dKfXhjKSQxT0BfR3o4P3t+TVd0bERZX0A1dGMuc1VJSVlNN1RXZX1WJi9NPlY2KWBiJkBsIWAzaXdtPEBoQDg0ZzFQSypqWWEweiF5b0k5MT1EJlVoNEl4eWxYIS95NCImbnRXX3JJWV9mZl98QTo2VzRYQ25qRGB0ZDoqY0B3UzdrUyM2ViQw''@;'; put 'put ''MCh4e1N4RVQvPk1ELCpXQGxrRTA+aXhbSSVkS2kmWU4rQ2JNYHxrOjBrYSVabSR4KzhWYmtsXlEifFY6VXlNYlIpfFhWSj93fHAjZj1tUntVaUsiTWF0a3tWeSpIcWU2NVRVIypvUTJ2bj0zUT1bJlEoSnJ6fUFoayEldDJyPFJCfjF+ZzosQXIsR1hTKzM3XV0/e2dUNF8pXSp9dGZhbWBBNX48''@;'; put 'put ''eTUuekQ2ekMuJSQ3V287ODZPU15wZ2t6S1pqMk9laHJGSDRmKiZ0XSNLXWJDczFtIXJbQy8pWnVjWW12cV98UChuP3RgWl1acnNyP25qOUNMTzBjK0N4RmApYSpMXWtrKl8va28vKkI/Q1l8bF9oaXJ5cUtBYXltP3RoIi95NUt6MCFnbiYoU28sRTdOSGxZVTp9NyEhR3BSciZAP2Q6cHVdVTRN''@;'; put 'put ''TzIiOyN8SGxYMm9PbFd6fkklMG9WbX5QN31nJERdUjNPJjVMMCw9JHYmUUcmclc2cWdobGdTI3FnUz1mPGYpc1VIPU15TFomeiVzLFZULk5eeCYwZmplTE9ZeCtnN2I7KUVNamV0TV48ZCZhLzg9QVZAQmAkOSZrcnt0cWd0PT1UVzFNdzlwJT91SG4lYWJtM0Y8QzZIV296UFJvZlFTaTlEJmFJ''@;'; put 'put ''RGR3YF1RcSNCZVU8UT9QOCN8YVd7NV1lS1IuX3Q3PUVFUWxRSz1teVNfe3preHQ0VH1uITYvIXxFSnN8cmhBWE5ocGU0e2FXNWkvKTpXU2gpekM7NjRlM3RJWSo3e09lWkV3MWU7L1FFM2Y8NjQwVk52bCFKKEp3UTQ+ITBJW2lEWF4yQEFkejU9S3UsZUo4JkVkZ1RVajhgP3Q5JTs0QDMjLiFn''@;'; put 'put ''W1YoJDs4QEN+K2d8MGZ9eSV4UCI6TnBqMWMyPjYkO1JwXU87MElQMjJOOnY+VSI+OG06RGQ1YTFecTkscGFXRD5NZz1kMnNeTzVhJF0pcXxgayEzTy5rfGk6YEw2dCxfI045aFtYNVNScUooO01nbCE/L14hJEA4ano3L0p4PDtSJkwsaTAwYmRaZXQlIzBmJjBedWUkIWxrY3ghZHFaM1hTUTk0''@;'; put 'put ''OEx1OXtTV2A4SytndjxAMykhYj9tdEYjQDxIUC8kJDRbaFY7am1sKEVvbSF9V1MqIWp6Oj0zSHtWO01nS107NX4hPy8pYlFoSjcoUy4mV3dkPWx3UURrU3dnbjdFUmI6bHd3NE90akJvI3IvVXpCRSYySz5vL0VRUz1EXTtzJWs+fC9PNCN6Xi5uL3Q3PDheJTJVVDcyNUdgLEEmTVVNbDNTIl4m''@;'; put 'put ''JXFVQCszdktwRlpoQ25UMmZ7NGxpLC9UIWhYczJEVClHeyY9VjJmNVc7KFc2OF5nfkg+SUw6S3syJFBXaEwjb0ciX15tLDBvQUNxWX1xZ3FoT2VmOkliP046e2heJnxZe2VOfUw6OWtlSEA8KENBTVopO1FqYCprLl4jVV0rI3k+QyFHKERpSm97N3tqT2MmQ2Rjb2RAM0VdViRAZTlvayNmd3N3''@;'; put 'put ''I3ZCfDwmRiJre3tvOFYlREwlQC8ufHBTYCYrMEhZZUU9S1ZaSiNMJUhQSkhrKWJ9SGMrOVFJSHNhR1h9NilCS0dfJjwuX2F1bGVqc0lXLDFxUXo+Znx3d19IfGlCVmlLYF01UDx6eS54XnIiPWxBNF9qfi5Gbjg/WDlreyQ6UHgxLEpgdGlCWnA+REtBd2tXaGRJNjVIQ3Jka1ghNmk6TipAUyVG''@;'; put 'put ''YCU0W0grRV8mbllyaTMvbHd3RDVeLyZWYkw2VTxCX0E4W091MDNbK30uOj1Xe1h7VHFmZU5IWDMscWc7YHFwMTBbbi93KCtLTnt6KGNLJWwqPk07OD9QW1V1YG5DWjArL0d8OilkeVZMUHZlbDhOfWhyVlhdKSY5XzJ7M1RhNz1VNWlnUV1lV10kZ2d9dVB7ezlFLjk9JGprV3tTMGw3fGNbZWp4''@;'; put 'put ''PFVXOUtYVTxYLkAse0t7NDJpKiNIMGsjanlsRn1XKG4iKUx7KlhQYnRMcXNyP2ZIazNhU2NOW083YXZMKi4hXWtdV19WMC5GYEo+VVkwRXo7MjV9M2JdNj99Z3FientGXVoxY205TnlkUHk1Z3VVXTNiLDkpSTVvS3B3NiMwaGIzemtjPjBMT1d8OjE9XmM/ZXR7TDdtbWp0SEhZZHVFUiZqJXpl''@;'; put 'put ''ZT98SD5VfDVMQihYXm08Kk1GREM+IXA1IzdWVEZ5RlhGWEZbbChXQlZeM0RXSyZuX0EpInZCK1B2V1crOklyZUtvR10weDF8eUJ8eTp0eTxGImFsUTxbWk1IL0F3UiZbT3VEcDZAJWtTRTF9b0pxIjc5OjwrTXBDPloweGM7MkNWTWpeK1c6VmhEfnkybE5ITU0kdCVnQltiY3tvP3ZqeXZxSz5s''@;'; put 'put ''P1QvZ3wpVmsuP0A6R1NxTl5rbFc6ZzczfTomdjpMU15QVWEzPWdaM3p4TTF4Yk8oVClbM3I2InZSdixWUjw8V2omVk9SOEY4fnQpcTh4Rl9PZSIlcUh1KzZXI1NsZjRnNUA6X0dkV3B7JXB6dFttZVdJajhiemclYmQsSHRVZEtxMzpnIldJTy5rPERrIyhqJjs6Nk9YNyU8YCY9QiQxfkUwQV5r''@;'; put 'put ''LGptVWAjez1VZHJHfHIsK3V3RnFKUjxedkZoZ3Y5KT1sOGNHcHE0KlJJdytDe1d4U1txRjpjJihKRyVGa0VyWVZzVXE/Zl5YUV5RTGEiY0NAYFpdMVo8P2UiN3wpPyshPGc6THJbMTJALGAyQFl7Nik7Q154PHhXeUhOazBuSjlfQEt7OSxCeERPQzZGaTQqJjFpfjQucm03Pj02UyF6MDsrMSZM''@;'; put 'put ''XypgW1ZiL29YJD8hYndRWEE+ckBlT0NfaG5RbF4lZUY7aVQoJjcmU31qaiVtNHEjKVZ6NE5sa017Jno0bVIhWUclUGVudTZjT1RkV2tNcVpQUXZ+K0l1ZXVaLzxrMTI3R3cidSN7ZyZZbTh3Tz5hOFpUKUc/RWBvPjZRblFsJTc+U35wQiY5QCtqUCFzUj0xaSJoP107eDVEQCR2SXl3RmFTZ0M+''@;'; put 'put ''ZyEwKjtyP0QvUnhaQVJ+ME1PTSleS2pMM2JJJkgsXW06Q2JTfHZ7OXh1enw2ZHFrMj0rWFBdNi8/KzJMJiJrLy5wWHQ9VitQaSs1O3IkakZ0V3NbMWFjfDlPN0E/JG08PX4pRkV0KyovMjEuLGVocUlfbkY2LGp9YVdYdllYRjNiUUhIVE43RXdlem9fdGtKdzlIUCRgdVh8PytoQCFYU3djUyNg''@;'; put 'put ''b0A8VWQpeER0VCMxSy9sVDQqJEkuJXpSbkV8X2o7cGYhRmQjXzM0fSJXQTxtdy5PX3NJSW5bUC9ack1Bb2pZIyNtQmkwSzxdL0hoSkgmWkkmLlA+ZFhxYj8xOy5DYjlrWUV0TzFFYG5lWHFiSGxASXp1RkU6KiVXSFgqXmAkXTQzPkVuSVExRUJdKExhUVJ4U1JwcEBIVHZoPzlEbSVeVUE0USFr''@;'; put 'put ''Zz1qWlIyTHZOflpeO1I8UkRgLkZ6ZUdkVTR7Ojo6PzwhJV5pM19LVXJiNmgoI1ZUUnxGPkBPRSQ2S3ZLQGZtKFNFWjBnR1ZeTzFUa2Y7ZG5ALCEjYnNCUSshcl4wMmc1MFI+N2BLZGZvMGZlb1NOMEskZ3skK2ksaUdQKkhiKFNmXzx+ZXJIfEJyLzo0PlduZywwb0hvJG9IIWVOfWZ0RlgmZDBw''@;'; put 'put ''cEkoQGd4bVI7dDAsWyVKZ2hzTWF2T11wPFMzbS85SVlJeXc8PD4ja3tuZzR1NmtLWXZAOzdPL0VtJT9nZzU1R2B5Kl4mOzd2NnoiPkM1cVN3YW1YXyRsKWE3WmBTTyguUWdmbT4lOmYwKWFpbDNjLjh+N1Z5b2FbOmEuV0dSVzQvT2hVYilEXXYmd3pRWjYlVn5uOl1QTD1wYXVqLnp8TmBFQSx+''@;'; put 'put ''dj1TU0YrbDViLmAyQHF3dCRlXktlN2tJIS5FTzleWCNgbE9lM1pjOSxKWG01bHlIfGVHKk0+NkFXa2wzVl5bI15rOkE+TGoqMjVdN2hNXXJsO1ArYFFgYX1DK2R9VCY3PCV9UU9LPSY7UzZNYGxFNUYwPXIselVfSyVlM3NXc1NTJHg5e217TUUvbWwqViQ1PlYsTW57cVMrMjc7e0I/KEl9Omdu''@;'; put 'put ''SWNYJFFZdCVEP0MvTkt+P2kxbntLcTM/Y3k+Km1maDpmYTc4O2wrdUomYkskaExrNSMlMC8qfiR5XVlWRnhPZEtxbldYVldERjBGXl1nMXFAdSxZcjdLXnxULF9BU3RHT0wxMU9DV2BxRnI/Q0ZzUjY7I018Vls7M1ElazVaak8zM3FxWUJiL2RlPDJaWVhraT52cjY3O2ZUQTt7R2QiNz50Jnwi''@;'; put 'put ''OlIhd3ExaCtNdWNWJjwjQk1lPnpRdT1gVlB8eHZ3eHc7fDNzUkojJCpyM2AxImsuKi84TTU4SWVjN15GZiFwYiM/b342VC9vL31VVlJzKnBHeUZ9SE5LOmVsZFtfeDNrc058VllZQCtUUEhzfWN3SmgscGtSMlc7THJEMkBFRE92eWxCSy9SZH54Pzdmb0hpR1BnTWEpOD5CTypAe0toe1IwNnB7''@;'; put 'put ''eDQ1L154c20xIzswc21aSGZtLC9hcEooYWNjIVZPUSFFPn4lWVNIcEcoSkpATT9hPSY4MV5qWysyaSl3OlQiWDAsQE5ieUw3cF5BZWA0cHs3XTJPTzFZL3NSaltLTlNHXns0RHRuSU5HRU1xVGtUNUN1RSt0bzdUV1FOV1s7Lj1HPTErNWtbJHUzMDBPKDE5LEx5PnZPOV87UyJqfXoyfk82YFMv''@;'; put 'put ''fVpbND53VXI5Ylh9SjAkdl1+UEpoJG42ViFrOUNvNTgwfXI3X21OcEspXk0xV1E6MnR5OU9Aa251bVJKLiQxK24qS2smdFQ4eGNLdWdAVDE3bDdqRi57NDx3I2x7ZUAoRk9SSE9scTh7MldTKm5HYURaT1YvbWcmbVErU2lreDA8d3E8VGJSSE9bMnNUQlUwT1JxP1Q7ZzRTP1Q2YzJGP2RIcVol''@;'; put 'put ''dmVVcnN2b35bRFtFJjtQMCVzaSozZG1Jdz45XnRJJjtXUHl+dCxGfUNjPmZgO18mKm9wUHFQWW5SMiw5KUlhW0QjYltXezhSWnBLWSppSyUlUVYkWzNIN3Q6QW8yeHEvX3d7Ri45UkZfN1JGYFVuSzEjeTRaSk5PXUxdMEYsJSo/WWJHKlJYI0dPKWwpQUxoQiM5WEhFXWRUSE5McTNYZFJfWHtr''@;'; put 'put ''PnRhbFomTFolbWU4azA+eG0ybDlXXl9QQ1BGKFFdOHJVNVtlfT1sPF9WRiNzeURBIy84TDgvIzhKODpnOjhsWVEyRHBrMmgkOyozP1dUSU1AQjpAOjI4eE9TZjxnIXEvcCU/XWwkbXVaXmtwOW05NjBCbiJVfkdaUFksSUo3MGA/aDBkYTVfYV9NJFg6JWpOZnUuSWkqbWMhQThKZEUsZ305Vz1r''@;'; put 'put ''MWU4Qmg7JkpASWNRQ309Jl55OzYqUitYUUoxLFAjOSVvKXAyfUlRY0k2VWFhVEkhRCxTVFVxSTdYI2FeRHpwSkxWKjJxS1hwLzw7IUR+SEspPTRsKXBKWjc3W09RVnVuaGAmZUt4UnJqQkErW01GbFE2aHxlVjF5XyljLDhWZkw9VF40Jl1VJm5zVV0xcy5XI245ey9XMyNydmdwb2pdUiVfTiVE''@;'; put 'put ''KFVzbVpTLCEwK2NpLHklWzdiL1NmVmYmZTxnWUsoMlpmbD47NnVWR1l5QUpjTGMsfVpyWiZRP30hUDVSMWojRGdrajZCSmNPZldKdUkvW3paLC4+LHp0VCUmSWg7NjdOREBJKGVRYlM1RGwzYUxPKywpel04XnowUUtOS0RvfSFwIyF6KHZFX0dDNkpEO3ZZJkRpeCNVbHxvVi9lNH04UDUxYH0/''@;'; put 'put ''aDt9ZyssInx1a2xUblZlamAqQ0RjYzU7PmJ0PSNnZlQ8V2hCRldFb2BLMnxSendQUU97V3h3dVkudT14P2tAWC9qNil7Xm56KzhkNzYqS3x4O3xIIXooTDNXLkBLWTpZTzhhekJIR0g2T0R4PFVFQksxVC4qdn4lL2J+cEdwLlVnUUokMF5ZOk1neVRXI2hSPyEuNGxpKztBdzxJezxrIVVSJjxG''@;'; put 'put ''P1l2RSVAUXJ6W0IzfnB1cEZIIlM9amNtSHh5ZkViaipGNnhoZX0pR3UoZ1k/VylHRy9qPExWXnYxW05eJDo1KGQ9ZmVOM3ZkVUElSjRrb0IlYWQyZkl9RmZqYDc6RW81JTdUKGxiVEFlL2F6e0I4NUhFJlZyIWhYZDdvS1RaXU84aChBOktNfm8uOkIoamR7ZENoQSEpQ3hYNXpbRXwsP0V8LEwu''@;'; put 'put ''WjIla0E+S1c8RTIxIW4ofltYKjFSfCxGbz1VNWdHUWFzaERvITY5SEw4Y3BicGl+MHY1JDlIflM3Sjs4P19vYHRxV3BGJHE/ZDZocltPcWttOUV3WHJjOXRRdWpSLl9lSyt9NzhUdmg3Sj9TMzFzOkQ4elY0NnUwYV00Jj9iNHZ1VUk6dDIpUW45ZTdgfXM9cT1RZHYhTntTXnRaTGtVcm57PF1V''@;'; put 'put ''XkJ+Y2IjRSY7LDxsKERyNGpVcjolKnM5QFN5PjkpSWFbczAwJH0wXTBOMyJycDBTY0tfeDc6fFlhNiVXN2Q2NTxBaSJkSDAuclc7bWp8WFo0LndwPmp8LCUsd11uZDxON0tJNHkmRi5NZilvUHI2Q0c7NntKeXVaMiZFdkgkPzxdTEBba1RDV3c4bkVQNERgJHc9LzIrWlI3RHZrKDp3bVcmT0I5''@;'; put 'put ''eHNoMXtZJj12U0RJeio8b3ZVRXcyPmhsYHxzS0BCNmBhJFpzYG9ONj1uLkZ6fXlPJGVQVE9FTXFTcjs/T28vV3QmPXgiPWgkSEgvW18mcU9uJU9NYmVGZHt7Uz1uTzk/YEQ/L35APixIbnE5Rz15bWEkVmJ8fVFjcTRrVWV5OmM1XjsybjlLKmNNTW5OWXA3aUdMNjViUmI6PXM/STRxWiQ7NDBa''@;'; put 'put ''YkQ0OnFraGw8ZS54MUg0IkdGYHosanVFdTQhKjpheSwkaDROYjtZWyE0dyh8amRuYn40fCRIWUtxdCVlIXUlZVkrTTs+fmg2Syx9Ol1fVUhuUGBvIS89XUI/T2dtYjowdTF2PUZwclEwY2d0UVUrdi84PCEyZjtfYn5adiElMnI/JVtIS3E3blAxe0xyJGkxdUpeRyFTdWFDJllMZG8iRylrZXdw''@;'; put 'put ''Xkp4ekMyfll9RXAvQUsxI1BvRlZSOmcwRnhPXnpyUT9eRmRrLkowTS90KSwiUWY+L1g2akwoKTYxZFJhIjlIUDYsSlFEOGoqeiphLCxpM11vS3ZoUSNlQ2p5ZWtxZDlHaSFdX0hjISUueyw6fWZjRCkrNjkxflZwbSomMGZNazFYOF8ocU9vS3NdPTNCWy5wWVEyckEyU1BVVy9iIUM/XkddVjZi''@;'; put 'put ''Tks6TiNCaFhrfncrayVlTzwodmRgVl5Zd2cmeTg7NV9pJWxIUFkpNTsqfXlKeSx5LjRzUCpBM3I+IkZlPDwsXTA3LCM+M0dqIWhpT2QhaGdpaWpGfkNXbzBAKjU6JlAqUTVVWmRkWGFbdkdjM1FOQGVdbGooME42dXkuMUcvOEd3ITUwZXomRjBaQCNgMGRUMFMwSy8razBmUE4paSomTU5gdGl3''@;'; put 'put ''MmY5Zk5PXiRFTi4hO21KNlklbE8xMFZ7XyhTLHFjSWFwKlRwRXo4JiRETGVnbU9CS0IoR2ZtOFVjLmQvODx+KjA5MHlMcFBUWyJSe1QvJjxqcUsyWUByQmp+VCZZOUAmcTxTZClWb2pMOEtjaTxCOHpWb2o1YUJzQCt2ZDt7L2ohN2hyXVJFMWQvTlt5OGd0UV0mRm15fWBDZjlHPTNwWm9Gb0Uv''@;'; put 'put ''WERpeF1Vdj1sWmxiL2w0PnRYcnJzLHosQUxTdEZgKWQ4NHZKcmMmZ28iaD05WTx5Ll5aZGBPS1Q2UlhCLlQ1P15SR29TIU09OU5GKCszY3p2VkhxRGY0cjRiZFNpJS9QJmUiLjlINmBwIVlZNX1bbDVfVmFJYEtVbW50XSlOSDJZUlE7elVZbUhxV0Z4SVVxOXY5JlFVI1pwYXwvVy4oSzcoZV9T''@;'; put 'put ''TXV7NFNrX2sobjNgeUVZb2Njbk5WPW9WZm4yVXRkcT98V0EoVitHTFc3bnwpI1o0NWM8bndbJT1PJTc2TChCTX5MJTlUPjtUI0JRfnE5ciJFPj49a0QkZyp9UWMwUDR3ImoqbkFmZG11VGlLfXJnPXM+IS9FMGBDV3NPakByNjZ8cmdNLyRSNk0leWdZSUN1eWd6UjxbYmdhMUN2e25ZVDVEX2dN''@;'; put 'put ''N0tFX0BnIl5LUWpsSE94IUh0ST8icCIsOSU7fCMidix0WTAyX0FkMSp5eFBHXkB2aVZWQCs6KGNFc212VEMoKVtHSVBpJVo4aVkwNkl5MTd4QDgvJWFafVUqODwkSl0zZUooS3pxL2Q0NFJ3fVNVNms1eURGZ3IyU2VNMHh4T0hEInkxIkNPeFI3Vj16JkVuLmIpbGV+X2BSe1E8eHhtLHw9MnB+''@;'; put 'put ''TjFGMHVeUWhQZGc9ZXttaGB5YUZWeiVAKUhxbnFDe28mLGVrOTx5NjNRVXhmMTZ2ZENQW1JrI31aa2BAQyZicHU0U2hPXlY3d0hUJmhpWylqOEpXaF1pfGN7RjtAYCVifCp+bm9oLiM+RSJUPm5oeSZiZU54NF08fT9zUlBQZEtCXypndXIzbVsqfiU/fXVWJisxeG45Jj8wMW4mWS9ve1tqOlhi''@;'; put 'put ''TUkoPE1DSSxPPWduW2ReRnFpfkVeKz1ZfDBaZndAdkZOfE1GbGpSQ0YraWAwbUksPH5aKlE3TEl2fjwmP1Bke2AyW1BVbHpLdVUybUkkOyZrJVU9UV8uU30kLFhdVSVUVWghaTE/ZnhwNEBfVkUlKUJQbS9eSyRifGN7WjxxeSQ/TyouNW90OkAxLE8xVztiMW1JeWI5LE8xW09xUGUxbUk7Tj45''@;'; put 'put ''SWoiVSlRLGQwJjUlZF1URlN4U0o9ZyU5Kil9QnV2USEjIVE4cXJOIV8mT3JWd1BVXSh9Vm9JP2ZiQ3lDdjk1WkNOYEpQdl96RVgzUVNmfVc/YzlKOk9Xa2RbSTN+cEVIKXVwbitLSWtVMzMjRkJmenFjbmJmVEV3bkJOQiFXOlhmLyNHdEFtdVRLa0U5SzZSM3IjaiM1OGM9b11va19CRjVCMC8p''@;'; put 'put ''Zy9aQ0c8aDpoVTlTS31hfnQ0MX1MSFA9UFd1QFEzZEp0cT1rVUJvZU1lQUdofCJjcTIzbkJuTz9ibjRGS3h0OXJnXnguekhOQmhsfm8+RVUze3kzZUcrTzBVTyowSEx8REBxIT82Wz1aUyFHdHpYKHQuTDxoWkl4ZCNNMEVpeTtXTFVbVz1Gcz8sTDtXV0EoQWZEVC9UQGFdQytFZk5NU0NkUnBC''@;'; put 'put ''aHgiKH1YZFtDRC9OPmJQdjVQRlIiKU03b0lOWikzd0FxdTMxNEUyaj5abGMxSHMicWIvP04vVikzYkw1YkhqNHN1L0JQaXcxeSkqZCZOb0N0QDB3aU85RWB5X0g3SVFqYSJ8UT92NjRHMy9uOEhsZ0lJcilgPjUheEZ6KEtPOm9SKndfNUZTZUd0I0dKTjFXamkxd3VHey9XM1MhdEpiSHFYeVg2''@;'; put 'put ''enU0e1h2TEFeVDMsUFVYdz9eOVs+fGVdTChGKHRpQ11bLilURkhCZSJFS3s0PUNoRSVfWFslVC4pcGhqRDxjLGh7QVdIMG5EZ0xIZzV4SWtVamlFLFlnVUhqdG9uSTdxQ2BgaCt1XXZ2ZTRZZVJGfT50bk56cFZidCNXOyQvTjpIIUdYZGdKTXc8QkUhYzRrSElFXVcvYVYqSDdxaVZCNytsVT1a''@;'; put 'put ''PnV9eWJJamM/alQzTER8QzhBNkk/RDU0V3wjMX1BJChZND12XnpmTUNCPywuYn5GcSJUaHZHTDdXUjIoZTRrTjh0e1FQUHpEa1I0Llg4K29JdX1ffDlzY3JERXBfTXgxX3EsYjBfOmlKRnJ6Uz9GQVJRLkE5MTRifFY4TWJ0SkJSdG0vTCZYOE0yU0NaWGx4JmFTYU8vI0c/aHxqUUNoImV1VGgi''@;'; put 'put ''OEgvKUhrKW9zaUNdTE1GRzMwaz1CVEppQypCbiZ2bCxNQ0BCWlVBanFGLEJObXQzMV4jOmh6WGRjLklaQihrP01geV1lemklTVVNdFFiaHElI1omTV5rezMkPHdCO3s5JW8lLzhQcmMseSIoWjUsWHc9O31HW2hhTVQ/I11VTyVoUmhJc1IzbCp9JWZebChaRnI7b28/clc9eGw3Pjw8PXhfKkpU''@;'; put 'put ''VjtKPGBCRz5LQXdgdEshS3k6RnB3MUYiY0tXRj4uMXZ2djlWNW17XiN6TW8uTXhRNDFAQnU1X2Y0Z2xYUypzKVF7VGlJczdYLHVbPnYlYzwxLF9bKCpPQ1JRQVkjMCU4SDdZfnNxQiYiRmhxNy9hNSlWUGlRe1p+NVdESW1EO2tESVRFbCFnbVBtfEd8cH1PT1VSaF5GcHVCUSIpK3VGK2BmMHxJ''@;'; put 'put ''UjAoS11RQCFJfVU9dDpVcT45ZHMlcHtkWmBxPlh3bDxmakopbCxhMWs1eU9wYTpGJVBDOn55NSJJO1s0Kz5NXlpJKlIiPWxQYmA2ci89NFphQzZ4dCZGaGg2PDsiTkxSQHJsODAlfE1ATGoxRD9nK2RSYiNHaWt0IW5mWTJhVWVkYDRPWDFJNlciWCk1N3R9R3xkVWplUixmU0Q/IXo3bSxVNjR1''@;'; put 'put ''XS9CREFHLHpvOF1qLylKZEBJVTxwMmkjOGJbXVRGfWlSSFpXWSwjSS5hbDYiWiI+PlpKVVJEVHUyQ3FjfkBxVF9lPnlKPCZjbiZyXSx4IWpUUUFVdm5bKlhKRTtFU11Va3ZQI1ojbDs2X2dKYldPdl9TdVNTT3R4eW1pYkFsTCRzIzEpMGVoJG5FNkRXdlVYbFpMMS9vNDNiSGZSIypfdU4ibipD''@;'; put 'put ''KFFyXVUzSlFPeGUwWVtFdVg0VVokK00+VSI1eTNNZyI0fFtBbl8/MWIvW1BsSDAobHZPejJAb1VeR35BRFdrVTheQGU4XkBXUTQxUWVgNFh2JClwdn1IO2J8OWRAfkBFYiIrZH58ejRyJFt+QCpJcTMubjMzT2FMYlNUJVJ9NXZMTzcuL3pPR1k2XXlrXS4oXis6a04/aSFTL1VxXlllbXksMkhX''@;'; put 'put ''IlYqeXVNcjFWSWJiNltrLjk/VTFZKyRteVBKWHQzYmhHT2w+cSF4aDBrenphRHVCJkJ0RHB4fUV5R0BJOk57Yko/WTI/KiRnekcqL1UoVz87W1dJUmNpTkVJL1JHPkhvWm9KeCRESihBOHVBTGlXU1A3dmlYYyNrI21ZfHZ9UUpzNCRnWThuKDw0S3RMWHZdJV5fPm9wWXxkdlI/N2huL2tnJGlM''@;'; put 'put ''NlVhdjpLZTJjUmJ5cmluS3tCOHIwbWlWMEBAMnVlXX1bU3lGUk5DNkI4NntYNGtTVE9NMjJqL0Z5bnRRXTFxQ2AlfFQ8WSorZmd1Om9qeWpibU44WVM1fVdFPyJLPjd1PVVFJVtXJmc4JFBKMGdienJ6Vm10Q2AxO2heKiwzTz93e0s9VXQvY1JAdTlXZX57Kkp1NlVTRyk4bkJoTTxiREZlI2VF''@;'; put 'put ''eylsYyUofEwoYW5MTW1nX2p+T30qYTQseThLVEJ0T0Z0XT94ciZCaiNQLH5eQCZjQGBfKnM1fUNqc29oNiU3Si9hSkVHXlBVbHpxNC5wPjw1aWEpfUlnXSs4YSI3SWhFbFJjZXR3WGJeM05KOlZ3O2gwcj9scG9oSy95SjosZG1SRlQ2NSopMm9RPEhtP3VUM3ZWWipSO3M4anpZKlJOKyslZmYx''@;'; put 'put ''fnY6PypjQUA8WWBvS19pT2djQk1ja0ZhUj1ZVkxjdSVzNS5EcTBsJX5eOm8hZFthNlBveyMiciQpaS9EMmpYQl9mYSQ0TnF0byZxNWUrbylGUTFzTj5PeEpYTkUuO3xuRF1FfCFpSk93LixIPl0+Ynl9VT9PJG9ERlpGejA3MCFKeER6SyQ7dUNZVnBkZ1lYY3A9RSFJPEYpV15ibWNMa0tWU1pj''@;'; put 'put ''MS89PlkjTUM+QnpKI3F6JSpQYUdmJlZpeV9pTSs3IVN1RzF+SmJBPm9wSWdhNXU0aDlHJi5nWj50UDB5Umd1ayE2S31yNT5GYnp9T3xLXUZ8UHNLbEU2KnJWcWYyK11YQEgxJCkjTVFlVTUjPURfbClJRjk9PG5ocH02PHpPUzN7KyJgZGBgJDNSRjlBS2p2YVR4clo8QW58bXttXzglOi50RSxF''@;'; put 'put ''U1Ffe2pyITJqXnU6eXwhbmZrZjBHJjhGZGsjeUc2cCxtP0k/fHh3UXpdY18uJWowal9mMihqUkhmYUVWQ2JpPVJIZmFFZTRsRTZUOkZhJEojZ0RTeSx+flVWRDx9Kn1BcUImQj5CX0FxQiZ1Sl9TLCxBbjhla2AqVSIoT3tvTHR6Wyp1QiluaGpeR1IpXW5bd0c0JFgyLzl9Vlg/VDoiIz5ieShu''@;'; put 'put ''W2ZVWGApKkV8TV9JIUo1ImBaKzBTdDwiWWIrMFN0KnQpcVFWNHVxSXBsZGxzY0IjaGVPT0x1SVMobV5IOFldQ1IhVk9RQG9JNlciUjlxRno5KlBtdHgkLEB+Wz9ePiEwQ2QmWSxmJFU5PD90Wmk+TENtPjZ0IjtBT3Z9dm52MSlnaW9RZjE0ZzFQZlBuY0JfUD08VnxNMUZ9djFvekJpbGdYY1Bp''@;'; put 'put ''QjxaMXUvOCMhQD1WMDBEbnVvQHQ+eTdrQ31Ia1tfQFhFJTQ5Wj4+fmtzblRrbD5NPWkxVmckLGhnPzRkOChvSjFmZUxPMXFbbUB7NzBgaG0udEJbdio6YEt4cVQqfiZ6b3tab0gpPiI/bFBkLnpOLDp3amw3I2tLXkgwZSUlOzJQbjl0ZVV1Jnc/XTJkK14oLjpfN29XcS91dGhZKlVGRz4xSnRL''@;'; put 'put ''ZUxWLmZDPyFuZlEqYjBTfVhuPmJmTl0kRX15TUd4eWhicDN7TkllW30mayRbMG17IUNqOm45VjM8Z3ZpLnptUXdTSWo7RmRYMTFGalpecSNaPU5Ne1cpL3N5Q3EjenZAQl0ySUtHamhnUXhtQEI8fXJgOEFfL3NAQzIhJm4kW3lPZUdjX1pQc3kqTHtmaFcuWWhIMDZJOmU+eTpwLiNQI2hUVTFd''@;'; put 'put ''YzRmM1pVKStjdzExdC5xVjJpdnk0ZC9YW002fVZqT2F+ayE0Wnx8ZnYiVGI6IzYraTlJcWs5SVd3YWw8PC4xL1VVbWI5ZHIwRTtqInY0dEJKcXw6a11VSS9bR0R4IzN3dHRwXjhWPn4kZmY5O0duc2dpUUw2Q0lgIUAmNXEubSEoTWlRY1A4N1RLYmNDXyEldio7My5jRmAvK1hDXi49RmlmVlBy''@;'; put 'put ''aXkjRjBoJl1sRXQvekhBUF1OQlIvaTp3V297Wz06RSh+cnUmTTchRUEjQ3YvZzFtSVc9PTVUVFF3R0VMdCxad1A1Vzd+az1ZRjReTC5kXTAwKkcwaEB2e0l0Y0J2XXl3UWBBc09POXFzUzUkRCMyISosIUFlaEdPUWRBMWtzdjdkNnwlS3tXT2djKTRLZS8wXVArSkg+a3x7W0s8dCN3PkMhNTRW''@;'; put 'put ''MUQjdz9efCs8Wl11e3h+a19IKks7MTdje0QsekRuZX5vY3g6X11jL3poUF0xbTlDV3tWdFpoYXxNKk5hR0Qje0xiU1BzIi9LTEpvYzRsNFRhYik6ejVCeGJSQF9VQSNKT0IjVyV7YyJXOUAyL0BCeVBuOSJoUiZ7Y0FQWFBNRXRQZDQyVk4lXWFxK34+VyE4XUNiWEhPYVchdypdQSNNcSVFR1pE''@;'; put 'put ''Q0d8SDtmbCUxeEt1LiJXTTtvTEN9RDFab08oWVN3WnhEXmltMVpWeWssRCNgMT82c1BnJX5KUDRsM01nI1J+UE5JK0lDIV9jZUNhdjJ1ZW11MkBAbXVAIlsiPE8lUVR6MG5DdT90TEkiRzVOP1RDKW50enRAZldwaHJKQHk6WGJUMy9WYlNkI2lGR3lLOjllSlI1KE5wcXxaPWZ4RTVjTEtNTzVd''@;'; put 'put ''JChuLnV2anpCODZBTlpEYmJoT19DODZ+TVo3QiFbJHJndTA9JjM6LyJgWjJaTm5rdHp0ZlkoTyI2TD1Yal12UUhUVDJrZXZJT2x6blJNPjFsX25NTDMqRzZaeCg9IlpuSnFCS0IkLz1OWil2alRuTENJOzJzYWFHamo7NSU+dlIvTnJyZ2FxXVV8R10oI24ya2V2dU1KUytybmN3QDgzdmpnTV48''@;'; put 'put ''Q0ZPZENWZTFidltPNTclSCY/MUg/K0dXOXZBeV0hWFJWPCRXTDswZkxAQW48ciZiZW14YDhZNjJXWTAvXylZbjhFaEJSdzcla29UMUFPb29LQyl2cj8rdSt8Vix5WD45a00wbTc3c114RHBnYjM5RFNKbjpFeU02UG90MUlARHFXUUljJXZjaUhTRVpNTXY1Oz18aiIuYTpEMiNBNlt2WnRXdkRp''@;'; put 'put ''LiZlWntDci8mPn1TMio7YjFSfkEpVWYpNXw1bTkkMSNqW2A7fXs8dkVYZDlYT1VjOVhwcSoufHNjKmB8b1k5aHIqcVZ9MF1QaHpzbF1bSz9dVSRIMEJJRjl1ZkBEfHIyVE9dTCZAT0t9fmM7WX5UO2JIVDt4U0p4bTRjbW1edzBLaU4sSk9IbmBCeGsrMCswIztTbGFbIW16QytsSnBqQEcqZ15r''@;'; put 'put ''bSVWbkdbV2tkOzwzVSFucCs7YTt6XWMjfTdJL1dISSZNWkdrKTU4VCpSUk5dTDlRcS9Gdml6S3hXcVhhXTVOLGRTYVllLER1Yn40RWw/fmIsTEpbSjhyNWVGSlMhS18sZ3pyR3sscEs0Y1pgcHUuPVBAY3U/flBqQ2YqRUpbYyE4Q0EjaVE/TjB6WitpW11gWnB6L0BPRzs0bFFmSXB9STNCWD56''@;'; put 'put ''KVlWNlJVcy9wbThyZUpsXX0/K1szQnBRWGxjMDYxRipWOHooLjY5OGIvYXtsOiVjWSw9Qk1Qbig1LDE9WDpZIllTd2p6dGJnQiNSIzV9Qi88VjsibkJiRGIwU2MyXThOT15PQVVBS0BPMSN4IzFXPVMjNW5WQk5bVyQrPENaTyowcCokaVQ3dGF8WFhzWk5VYU1eKz1PelU2NCR8WjQxVlAyMU1l''@;'; put 'put ''ckdCens0P316YVNRVTxER2dXSGl1NFM+aXV1PCk8OTcuZyVxZE92WiE3eHptdUhAMn5FX054Q35ZLE0rXSJDcXpEOyZUKVpHXnU9bFgoe3w/YkZzNHkifFdVblR5Sko+ZX4qeVQzI2dpOVpkfnlWYmVbMFppdjlgSkhvWmg4VmFoOFI2dysqZmExWVNTVjFMQigwP3Y2TGVQImBbWl5faF03QCVb''@;'; put 'put ''QkROIU9jYEBRYTRCaiRGK0F2eFNDXkFsYzt7VzYyMCp7Um1NaHp+RV9xeVckaUh0dkZ+W2w7bVtlM2F5VTc/eEldemc+ZF10UVVmXTQvcm57QWNGdy9JQy5CdEJBQUE4X0VBRFhyQ31FKk1lY3kiMmkjXSlDQEFEdmIsRWE9TlJiU0AyT3F1aHg2RkFBQUFBQUFBRUE5PCEzRnBJcm5FJi5ZL247''@;'; put 'put ''ZGR5WDJNdzNiPkk7KDU/bW1iWEFSX0FiSCVfbEZfWkYsbUVjWl87SWBIQ0dJQkhXKXwvUzxsVG55UENvIzZxVzwrVzYqX11WSyUxdn5aMVJCSiJnT0J7b3I4SXlUMGkjTmIpZkdHLjEydkMiOks3fSwhSiFycGUuLDgkTz99ejtGUntqaCFiUlNPT3B8OSVWJX1JWHx3PyVYLnRwZWg4S0VwYyRI''@;'; put 'put ''L2BxQDcmXS5zRkd3Iz95KVZIW01RJFtlZGlvbUhuKypnWFk+SjNXezE5ZVBhUj03Mz9rP0VISkQ+Z3d7O1dIWkVSLDtHWnB7dWFUKmVWcGt8SmlCXU8iRUdXemlrKXc1aiFnfUtkLG14OFE2X2RZZjdTM3RUZHlmcno7SiR6MDg2RndwKzI8a1g7fDcqaGZnbXV6IVo0T09FV2J5Nn5yZiV+SUxu''@;'; put 'put ''M1dWMy4zNzM2bnl+QjlbWTNAOEQ1fnNyQD0yc0YpYExPQD41LkIscVo4U0RGRzBeZiM6QkxjOmEkRjZdTFpAeXVOUENvdDtkTyxaJVksUWE+ImhOUyk8Sm0uMyl4JXFoY2ZyQiZmOj5DXXQwQkQlXl5ONjJyc2BebylkNklYcWpYKipBRVVFYVM6MV1XWi9MfnV1cW8yKyw5fV5+MCkwbzlOe29E''@;'; put 'put ''YmJrNFdjbFhnTFdfanpAYmQ8czorS2coPGxvN3IuWWk9M3tIdGMpJThnX0NOflRYW00wWUt4Mzl8JlF1XTBYW2ZzZkgqRGpFR0NxKWNEOyR+R0pwRSRRKWc5RmshX15ad1AsYmhGPHs9RnZpSyJPcjdUc1JUfCpORWsqeTNSMGpKO0JnIi5xejd2aUheOkp6YDpQUGU3LzVkeiY2U3lTXTYzTm1j''@;'; put 'put ''fFFzbywqbGE/MWt7YXwqXXA5N1A+ITwsPiomWSJLNkNoQDtEXkJKVnY8bkE+b0xTWztMXk1NZllzVC5qdWwqT21lQmo6eXFFY19uKCs0YkAmcTltb0ZELHkve0t0K109QE96SmNFYWxidWM3V0UwTGpeKTJQeHNCLnhbemNqfC4xOzl6XkRYXnkvKFkyN0VDK3s/W3w6eWJ3IjhRZD5qaD1yYl0k''@;'; put 'put ''SFtFX2xVUGM8ImpUVWUxUnpgY25qO3tbfHs/a35IQGFybTN4PSMrR3t4Q1kzIjxeJSRVRUwuSUJoX1NoPTdMNykpeFJrZENpOTpqRnxzfkQzQEw/aGF3MC92QnowR3UxVUAkcCsud1AuNU8uajNuTzB7STt4QSRVYk1zPS55cFN4LyY6YTIwfmQ3d0AqaFhPJVt+LjJjN1ZnbCR1XVhfQFpjKT1b''@;'; put 'put ''b1c3JDZURF1dfD03OiFZQnw6MnpzdWovaGxtPSY3RWF0aW5DdSw6e1NKV2Q3aC5KLl0hLl0hfUFyQFpKPEZEYl1HN3c/X2gvfjM8eTQkQDxhSXQ+e0JRQkJbMTUydW95b3tfUytCdF8mTEJUNigze2t5RjN1YjZzWy9pQWpqV0JaaD4hNyE1OjhXbEdiR3liZDVpbzFFKFh4ejxoSX03V10vZnlF''@;'; put 'put ''UWh0VjIpIXo7c1c5PHpgViooLzhmOF9DZmZ4UzNgOztyKGtDOXRASylIXyttaTZkaFMoeWEwV11iaT0yUjE5K0JwNiFJeDc3XytwUWJ+TCZPYzNiU3RucVZEPkV3cl1wN3h9VTJRZENCY3UwQHIkeVg8X29iaSF+TmU0dDlsNC4qYUVbOWZJQktIVVNaTCshKFRgYzs1VXJYKTp2UHQ5S0tlO3RP''@;'; put 'put ''IU1LITRsdTVdQno2Z3IoX3s3Y2ciOntxKFVEWjd1dCopO3owLjdZTTQ4aiNxV2Z4QnUoVzt6WXFJdVZLMypIWSRda2JXZjFAfTcidSlweClLdGJyRmlzV1dTUkVqUzd2UFlwYCR0Ij8rQmBwcEAmUjJvQ3phQGwxS3RHfCpTKzhYeS8sZVF+IlgmTChmZTI6KnJLRXMqLGhibCZzRnF7OU08T2ZY''@;'; put 'put ''dVN8Xm5eQ1JJQSFtfnhiJTdFZDVUTTdWKFZmSHQ7ZWQ+LjE6U2pqTXkodCprO0FRQFJCTVVjYTtiL1UjKFQlUGFldGQpYVAlal1OOkNReTo0IzorOUdyI01aYnw/SlBpSyM6YkdacTgmKD12ZXw4a1hedVJ9eHVTWmVXYzthOSojKTZgWy9jXyVVRT5bSEE+U0czWDkmOnVHNGxbdixMe2wwPCgy''@;'; put 'put ''T2lDTmk5S11FT3FySTpUbWtmN2RJbDFabU1mMDlvcm9BeU8oTE9WcEhiR2FlbiZpeXcsOn0kKUpTRzM+W3M5cnBgNH1ydzF+fkdSPSlIWDpiX1M/dWBuey9hcDpRQDZ0cEtHQVUpO2F4R2IzN0Q4S1F1ITxrSns1MismQTxkPWwzWXo9P3RCZyJsSz9KdTVbaH0mfGliO2lNQy9Ufn5oY3ouZ01m''@;'; put 'put ''Zl1VRmoqR25vY3hve2N9Om1NV0xXSD9CeExTdGJNU3gzWXRwNWV+dDA8MFZRZHQ9UWwuNEU4RGpJcHVXMng0PD5Dak5oZnk/ZGYzWnx7QyU7TGkybEVzOzthI1ouUXclTnAuISooQyFzNj55JTB0KHRXWHlTMkhRY2lTYEA/RFBxNE8rdUshdk1bRCFKSkE8Qz1uRShJRXtNIShveHFHZEN+SFli''@;'; put 'put ''KVhgIkxrIXc4YjA7Zz55XSF5anxGR0tEbkdKJHdLWWw6dSx1LDMhYHwlQTBOal49bTBOaU1lbSQ5UF5aeS5laXVUdG5hbFk/JEJDZzBYN2hUKz9raGI/JVguNVowX1VWO0BvMDkuVTJIK2c6S20lUDg2O2c+Z29iVjRoZ2gvWVZqKE5HbT0lOD4rVT54MVFaSWt5OT5GZUwxTn1RbHYicmR6IzM6''@;'; put 'put ''LjxkVkxMK1hHfUshSXlacnU2UGhnbDIqRn5mdTx9aCwjK2d3RT4kQDpFZDVycj5EKFBqckE5Rz8qRXowLzI0I2ZWWHJPTEMuY24hZl5MeD4lcyhPNTVmaVo1d259ciErcltJSyFDJDRPaEtdRGQ6PHQ3dHohIl9qKjkwWT4uOT1iXVVYMWN8PCtSPTR2U0U+eUpjTX51di9PImxmKXVKZ0tKOzUk''@;'; put 'put ''X0hNcUdwbFUlS1AqQE1YT2BLbTFUPW1pRng7NVhWY3ZdXSlNfnFKPzN2bUBgJDw0TEN3SH0wLCUrRyI8fWVAYz9eWEgpelEpaX0wUFUxISp6ODJkQ0k2Wzl+LiNqSmQwPlY/ZDU8RCNfR2JDNCw7MG19fEVERlo+KVA/MkpUPDdYMTU/PmgjX0VtODJ9aWx9UEZVUGBaKGBCQlBidFczeW1XVVZ3''@;'; put 'put ''OnxRQk4vVSo2ZXsmR30zKTZTUEFMbVVnU3YyVWV6LG5feERoX3x4IWBwfiYjXkFbdFJmQio7PipNcTZRWFdIT3Usa1siRWNbY3Q3YE55Q1Jndzk2MDhiTXsuOWFeISRBVW5DMU8uKyRTSjVqYyU5PCMyfihHWCwweS8rXWdFQG84YV9QM3Y0fiEyQz4iNl85QzspSlZyU0k+dHlLe1s7W0ddS1l+''@;'; put 'put ''I1kmcXZLXl1iWnVnWDYoRiVQNmtkZTFdTSRVWl1gWW8hcWY0ZihSMSYuSjNEZkc2YiF1bV1WKGZ2KC57ek0yajxDUjl8fiFFX2NrNTZXUUxKW01FOSpFZ19hWFg8cllLUiRVK0czV0JCKHBJZVoqJXJvQ28kRXxAdn48NW1lPU4sendoT3dDNHxqXjI1Ql8qIzB6UXQzM1UyeixUW0kqKV1EIVBJ''@;'; put 'put ''SWxOKXt2JUksM0orYSV2PnhKOVR5S2F8OzEuQ11hUzR3fFVpdSZhMHp5RGJybm5qUndqQVopSVEwbWAmSmJ6VEUlfW5wQkkvQ0N7PHAvc1EqVUR8I2E3fW1Ia1NMQHlpYHtddy9QanJYTWJQM0duWFl4PipCdC98X0VMQmlSfm4xdCkqJjlnQXw6OT0yemhPTyFeSntpW2ZHPz96WHRKdnU6SWVp''@;'; put 'put ''Umo8eyJAOnI7Ui9VS3FkOm0rMWcpKD58fVJiaTxseW42YVNpU31TZmp8elkrR3BbTkphKT1aIWh+OnthVTtXO0BQLkNPc3lmOm4hXj04azVtekYjSEY+SzIpa09UdGRydH1lJG8yZlp4UVVJPHpQQUVCMzlfe1ZMPmJwR3YpUFhCXitVZS5qeGE6TkpKMHM0bnFMUTY8OVdwL01WTk16aDoxVklE''@;'; put 'put ''S2x0elJ+P15JSFA8fGxHZ2g+W2dNUlgpfTFafEhye35EfXJhS287MkA7SiRGV0R7bCIjP2RgJT15MVo+Z1l3MWI9Zl99cG5tJFdJaWZ4VmVtUmBsezsiQkh4bzw1MntbMSxEei5delchJWdvcjMoR0xMTmpUfHooRFZwLEczc2RLRXduL2VPJDR4fCteMDoiNVlHMXRDKzldN0cxZ01tK2ZNNXN5''@;'; put 'put ''THlhU2hpITpZb2pmaFcyYUBsTzc1W0hwaDV6LkVfOjBvUGEoSXB7fmpIcSVnZk9QdC5HWjZgcWx2cHFpM0pvdEp1I0EoKHJ8cVAkM0U3cXp9LjJGN3BUaiVOZTlbSTgjSGthIyFtRy9+T2Z9dzo2KVU/PS9QbysxQ2cueGI8aGg1Il9ObjpSdllYP3tLOTpDYltYYU4yTis5aGZmI2hiKEF8JVg/''@;'; put 'put ''Q0w+VyYoWzwzKFFCfmQ4U041NjxRdFZPM19mODw+eV42S1VkYXokYXUzOmNlSmEocyFOamMoM25jU353UUFZSmxfSnJTe0ssWzozcEtFRS5nTlBRPyh2QGVBXWw/ZWdYODYyYk5SXlJ0dGNwY3Q5KFFtYGlTUnlYME9KZEZmWzJ3Tzh4IkR1WzI0UE9bVDN8cjttKG0rM31EY1Nbel5tVGpPU1d1''@;'; put 'put ''V0ZdLlA2TCwvd11DNiE5eVtIcktjb1BNQU1DJF86a0klJXxMX1F5MFpzQTNvMnZLT3lpcyE/b2Y4aWolXnIhcF1jU01kTHtLQDROIjM0TzZWeE9WVXs5JDBFWmpSeXJ3N00obXJ0aTJMMmR0Ql0pRWJqcXUuNXpPP05+TDVdeD82WT5WTmpyJlVje3pYWHNHb29hXiJsMDc6UUs+PDd0NGlzPWdX''@;'; put 'put ''UzEvJXkseT51LDxTKH49VHw9WCNZazZKMnlebzgmTGZvcGwjSnFJImFPdXheX1tuWnx8NWI1XldkXUAzR2g9JnIxVGw1dkJ6TExXN0t2NnEvKXhKP0BwUG9tKDojYGIiYmNkcHMybS97XXdXe3hxZFBXUnJCcUUlZGUkYHIjfnRJWVY0RUNkODRJKHVEfXFtRWdsVVYodmQ2LkZZS3ltKSl7Kj9z''@;'; put 'put ''SSVBYV5GeUp9bWwxbFI6Vi8/byNFJkYoNUR3eWY2Wjd+cis0b2ByUyxdeGBneCopS29HX1pmaVRxcCNScUQsak51a3ZXLjpgWipeT0ovQV5QWXElcEIwIVZZOSRBT3EqX2l7X2M3WSZHMm4vLjphM1N2Uko9c2JzOFQ3Ql5Aa3koN088WmNUWzZCMCNHKTRaMVFOeE1RRyUhXytIPWZJW10sW2os''@;'; put 'put ''YE9NOlssd0hAPXVQeyE3K0RhdDlfWCw5OTI5QDheWnBUXl9fbj82YUN2YkMhaWVfUjhEJiE9fGRpSjkybWlzKkNZVWRfNVtVNVplVzpAZytSZzsiUGA6ZmhuVUtmZ2RKRUxaW2EqKihHInouP0MvektBSkdTPGFoMW5UXXQ+dTpFPjxLYVY6MV8iL2JNXnl6RjZXejQ/Vjgscn5VTGQwYElQNDMv''@;'; put 'put ''aiN2S2NOUlROTHpkfXU5cTFCWlltY2l9Rz5acGkwOWFhVWhIcG56MCgqOnc8MEtYdD9TLko5YCxBQ29OSmZ8N35FSzI4aSUvODIxNFhyN2p0cywlbF13UWcjVHM2QU1pYTxEeEdZa1ZLKUp4OSF7Z211UyhCYF53LHV1bCldbUFyWFtsI10mdjB1aTNzZDImT181b1poQ3MyI3V1ImIpUkJiRlpz''@;'; put 'put ''QzJQOnhTOExyVDt2cSVpWyE8IXVvVy50ZStgQFA+dVs/fEc1djUlPyY4TmwjdjVjejApS0Q+YnZ9QDh8NFhUbFF1I3hQQDxvInE8RSVjPisudVNxfGliK0tXKGRERipucVteRE8sLHFLP19bY3hac0RFVC59IUE0STh8UEVVOGhiemheVS91dG5WdSVhVD9wM21aWSYzI3pFTEFUJjNlPHkrP0te''@;'; put 'put ''XStDS3h7Ok56LGF+XyRsMng0ezNJYlNyfjNNMVdGcHVEZnIyKnNOSlV4Y1NEMXA/K2YkYjsvWS8/Nm96L2lrX0NCOmYqX1Y4R2B6NFshKl0/bl5AQVEvOV4vMnJfdEJ6SyQwaj9yQ0tpfi5odXowLDpNej1Yb01vJDg+QyJMfjpSW183RUkwO2pCM3h+WVkvVy5EaC5dYTR8XjRGZWVJR01mYyoj''@;'; put 'put ''VlthekRpZXlSZEpxfGN3P2Mqe3pOMTFOOXBzQmBdIUBATFp6Lip7bkJ+dHwjanpPOjVeRSFqNzdGWHkyW04/bSphQWh8QjxBInd9WlZtTUFVa30/SWBIZGNyNy9IKVJaVDZLW2FfUDtUYU1zXi58LjgiUnRHT2pyaildOHR6MDlEQ1VbeFt3I21acSReJnZXXXA4enRzW3ZWLjQyaTNaLFBSNWxK''@;'; put 'put ''Q2MoMmxdaVdzaVN5KEMvfEtMKjA7dG5HMUpKSVE3L0ZDOGd8UjFeLmZbcH5aenZTWiUqcUBjQUVyW1hMeVIzLlFIKWF6WDJqcCVYTVNGQXFMcCNpVn0zKC8hTk5OfSIqcjpDU1NHeUguMHc8RWk2T2F5W0EwJGxaJC5gPFBnQWZndFpMKWppImhJYEQ9dUpyNiV9UiIrWjReczhScn4keUY0e0xT''@;'; put 'put ''e0FlKTR6T1I+cGokU0dgKzVbJTpnfDlfaD5BQ0p2cTpgMC4saj5JXVZNdTRqXWR8KT45UlJJUGl4Kjwqfl09SXhDPzxVMEc0fDFJT0JhLiskfVpsZVVIYFtwbnIjeUAkWH0ubE9IeSVlX1hsKnw2NmdqKlJpUSpDPSNoWjBEYkZFaXFyK3N1M0BmXzFoVjZgVT1IbDdXeUkhZkVkSSFNVjwzL3hG''@;'; put 'put ''LGI4UERPUmhuUm59WzpsLDk9XS5bfFJ1OlI+PUVuMUF5PkY6NW04ajUySChDaDJlKkZqcG5kWkB7YmBFTXE9T2tfR0VQY3hMdEBpcDREIV9gKkMsXW93KzZ8KjMpR2UqNlNtdE05QTRZV01RKlY6PEJJNncyPi94V3Q0I3d4bV55ZHVaMDh+YVJNSUcpdyp1bHdzMTZoKXg6czJ4fiMwNFViUk03''@;'; put 'put ''d2BpXSNzejE0NGwuWFJedWUhMVd5VzFwU1NpL117cT50bigiSWFyPEtzO081Ji9WLHs2WGRGLklKU3k4PENmbm4lYntrfWgmLlJheWxKe1c5RThzQmoxSERTOillfUQzZDVHaCs6QmsvQlI1W1poS1N2ckBETjwoP186RGt8Vjp2N19RdD5bU2U4akRBYmA4WEFdR344RF17aiQvYz9iMHV+QHhV''@;'; put 'put ''biFNYDI+JmlaJGtHcWtUajZSfSsuW11ZX1daZE9rJVZ9JUMhNHpSZ1hyV0JTKjZAaX0uKUp9XloidigzS1ZtIThUWzZERkF3TX5Ia2JRWXRrPnQwO01sPzFMLD99Xi5+RWRLc3c1YWVLfDk6UXY4fTJrfnUiO3pPRjFfIkExTnJKPi4mImp4LiQ3Pm5BbnZIcXBAd1VsRW4zcFQkPntOS1IidH5o''@;'; put 'put ''dG8kUVBBLGc1OXFyfXVOXj9BS3NJIXtRYnpyXlFGIj58L3JZcyJRLzU3UUx4Nj8pUSVpTHBhU3dCIypQOzo1MXJaKSohaFFzZ2FoWjMvLGRgT1tAQ0EmZU5PLCNOeDR8Syw6Jn1LbkJjc1ZJSXt+aCF1X0FwKFd8NSpLeiw1JnsmOShKUXhVQWBRbnlOTipsaXduezBeUzJAbyg2Nz1mSGNbJClk''@;'; put 'put ''fj0yaElmaDlvZzdkcndFZVpMaG5oNXojZ2lhSD5aMVlaO3ZMeFFXdDAvcVp3JkxWWURpaCUxUiw2ZWJrXmlsYj5VZFgvNXF5VVhvWStfND44YTFPPWd2RU9SdDsybSZNRipQRExQO2V3cTdybUw/KFpERXdbPGRlP1FXRUpgPF5JcjNjLGFAS0hma3FhbzdNeSolWlpER0x0MEJ+bFdETUBsP2Mh''@;'; put 'put ''aSJNd2J5PlFfeU5udHhAYUVhKnlReC5EP3RvKEwkKXw2OlVZbUxKPUwjTUxnJDxLIkJCQnlaO2IhbDhhVEJVKkMkJSN7aE9oWU8/ITpIOUteX3lYRElKR2V2I2lZeGdpLyZ0LiNzfmAifSRZSTs+bm9FLktKJEN2USpeZyVjNCg2SkZvTlUpK2EqUlo3IXRNeE9zMSt1fV1TVXssbk5nK0xGWUsz''@;'; put 'put ''cSN5NUEyeWo9U3Ekem0zTiVtNDo3em5YOSNXOUwkUFFNTS9sMCZZUygvV359b2pgN3hDbS5uT2tPfCJDNzB9Qlo6fFdYeU9rNnRUeFdLTCt6eUM0eys9bl1kMFFPPXAxOkVqJU9ZMTY/XVd6UF9VOXFOS1QyJGlpTjw4IlE7ISYrRnB4YHp6RGUxaHlnVG1bKVYjKnhvck5WPnJWYF1kVmNga0Jb''@;'; put 'put ''bC82MEh8W2JSTCZ5LHwrdSFyZVsmQW9odTM0X05hNj9ETjo5UCFeam1KSkdlckc7a2ouQ1g2aTo+RUkoSFFJWjFIKFoxJG9+fnpHdWE+QXQqRkVmNVJwOEMlYEptIigrVFkyWjY+RXQkLHJUfFhUeVlhWmNlRipZdCR2Nk9iUzZPJGR6cHpicntlRT5HR0pXeUN5dThZR34xU3I5UipVNldaWF9n''@;'; put 'put ''cV1vMkssej5vd301bSgiTF5TZWlQR3d6QFNrQ2clS2l9LmxPK3cxenpLL0EkWXgrSEMoaXNleFteS0QzO3x8MjhLKGIrbFpRcDlgYUYoeCI6djksJkRTWG4/Jk5eeylfLHtDXXAoM3c4SjxdYFVdVm0rRmJWUmo5ejpyUUReZztHU3VXZHE/aDwvQ0FabmFbYV1pVk5KKj09YnQ4SCI0fSlBI1h6''@;'; put 'put ''R1o0SnRuKm5YJkslcUMqaDlQXldtdTVdczlocEplfVRVN207OGcyTjwvbnh2T3VGJlFxYVN6aGUjR0NZTlhBKmFTQEQuR0V3eWl0UiE/SjYlXytsQURLNmNdYkFUPyVPWClBdjxZN0tBX05eK3B1RjxeUXliRnt7akheNEshZ0t1JikyL2diUUlzeU56LElFZFFTPHN7c3V1SEYySEtsUEkiQmVX''@;'; put 'put ''VT9LS2dzI3ZbaSVaWy5kYG5VaFR5d34xT3V0NVR2WmBmLEhfVC5GbXVuRXc7Mz53fnZAOkZ9YiNUfDhaM2xdcnpERXlbO31QYVguSjguYiw0TDRRbGVvfmtaK1t0Oz5UNWYleyo5WmUiRTNERUlJWS9NZWVbaCV5I3NsQnwhL3xgOzB8UF4kaGs5RkJSY0hvYmVMUlo3cWUxY2g9RU5nXyx1WDBK''@;'; put 'put ''KjF5WzltRSs4Qlk6W0UxPi9IQFIme29IOEtAKXA6Uk0yVCw+TWxpPWZ6Z3I5anQuMWgvPCI4UlM7P3x9Zj9DcWEhVjdJZ2pjQWRrWDg1KUZeO0hgMyhRTSo/JHhrWVdPdCo9SW9RSiUxSGksbG0oayw2ckA5Nz8zeGhOeW1hLnV4Lz0qXiFvR1d7Lz53SmZORio+RXhAPkQ/PU1Pel8kLE1OKno1''@;'; put 'put ''RUtAdkx4VGMhUDA2PD9uOFFYRVRNKF1pNj95QmEwYHMrMDZ4KEZBPDVlI3k1PiNNfmU7JWxpNWpRWUh+RzxRTEF0UGE0NkJVPF9dXUl2MEg4eTApKH51aTFJNHdANls+VG9GPW18Q0NYNFpnem5mSn5HO21WIVZXakgqPHxEWk93MUF8S3BqN3o0TXBGdGhPd104fX0lJVciYCNyVjxMfDt0L2dC''@;'; put 'put ''MzVOYDR3bGFKQmJvbk5+JEBxWjsxezVZci5veiZbX0ZsbVlyeTZsOENDWkIpYk97WjNNenxLPmRocj5uUHVVcSFscHRCPiosTl02fDltZ2F3e0kiKC5FLkxwfW8oL1RmS0tmUHpGaCZBQF41JTY/ezpBWismWlk4cEEjLmt8eD5PcTZWZk1LZFZIaVk3SDBObEVnOjl9ZXV6ZV4/by8vRkRxNFc+''@;'; put 'put ''MSU1dXZeTVJdbWlVUUlzeklZX1NVcjwlXmhFQShgUChRJmFhQU1XIigxSXUzYywvQ1N3c3V1ZkVTUkRuI314Q0NVc0t+PExIdVE6QSh2O1MwUmMqWXduWyliZGs0RWBHRCY0fFowaXldMCM8XkFOZEVpZS5ZbmRUe0BMe298X0wqQ1YyeCswTDhZPWI5QlMvVGVjenFQeXRHP1txWzhCSDI5PCFy''@;'; put 'put ''anEpLmJAQzsidDo+aX1ZSSNoX3xsQ0NQamtVZiU4NnIoMUZzTEZZbl54b35VdiE5Lzp5OTJdNUloJF1BYnVLeE5UXlJ0fV1ZUz4mUlQpVXV6ZyluamMiTFp2dzIqdm1rdV04LnR+KVB0UGAvTVQ9S31LdkNCdS9pOzpDfWZZOkxUREp7fSJJVWJefXswPUU8fndmOF9dcXF0SCxEeltoKTI1cTFh''@;'; put 'put ''eH0hem9UciVMOW8sSFdqVCU3NlA3c2NybiFYTGBENjQjT2NpV3hGMXptL18iTHt+QzRuU2tqezI1fXlMIUsjOS9qPmFJYGhyTThxcmhEIyNfenE3bUxfKGhNaDE+N3BzSmE8a1BLbFFQQjpdbi9hYlhqLDFYKjBJSDVZXy9qT1A5X3RVbjo7Lng4MX5xJj0paWk0YFtvbzd+cEVNNCkpJGcpMT05''@;'; put 'put ''Sz5zYHpdZ3VeTWJoJitURlJOPyJZOzwifl4uWGZsUCJmJSVgWzhIfE9fPEErUU1nRVReLjZyJnZWPlgoWGRkbFdrJG5beFc8KTVzLyQqKlo8biNJS2xAI3ZyNHtoTDMvMU5EfkJIeyJxSmo3Plk3SyRdQjJbZjIxKXx4dytbQkd9ZVoiUFdRRmZKP2ZqVG1gSGtEVH4pR3N4aGI6Xn1WUm5zSDA8''@;'; put 'put ''ISNOUFs5JV5idXkuO0c9ISwvdDIqcGBHMTsydWdVdy4iZEp2YW9kMChLSXg0cUg0InZFQHZ0dGk3ZFhZKmQiYFA6cHAhUElJMHdxJENJQ0giRzZ5bG5aMSZrZnh7RWxyW2ByajMwZXwuR2N2V1NlWEpXLCxFN3YqKG1QMnIxX19pNFUwTFdAVClMeXkyeTdua1U+YXJlTmhVTmZoNFF7OFQzM0NT''@;'; put 'put ''ZjgoNUVPLkR1QDF+ZCZHclEmRlJwZyM8KD5Qfls8THQ2OmdQKkB+LEFQMyV4MXh5cClrfG03bjZGIW95KyxtSUZZRVZWQk0wfVlFaEhfaGkhU3pdSWM/SjRLSkJ6WUNKRGB4Mnh4MjE5YWYxYVAvKkJLRjNOJldaejdUNnIlfj56S2E3RE1URlhNS3NrZXdne1RQKT56PXNXckl+eEw3VFhqQEY7''@;'; put 'put ''N0BpL1MlRyVwQDpIVVhQKVJWR0ImcGVkOCJUfnVteDpGfEI2TXFiP241ajZ8dSVMa3xDMHpBYXh6dSFsQC9rWk9qdntwcmJqc3dnUGZiZVpKJiRfIlVAMD5oUXU5a1l5KzlXfUxHWFhAWXoxMFQ8eFNDOF05Pz18fmtEfDhXO3BlXmckSktVajh2ZnlqSF93SUU9b0RqOTAkTWheamRgTjR0eVUh''@;'; put 'put ''UzVYanNwKDsxL3I2aW1MdlczUHsjMWhON1p9UE0kVEIiZ0VMbityLCp2UnxYVk4mOT0jSlZYYDwuYHZ5PzZkdDI9T2IoaDB3RW1Qb2x4ZUg7KDs4aG0yZi9pQjh1RnY+dXlRSW4mKW0/cVtraHhhSy5LSDNyfGUuYktKamJkfXUwOGl3ZHw1aDROPGAoTWleSGN7UTlfQCtqW3tIZVchRUBvPTIp''@;'; put 'put ''PXl8JFIjRG0wNGZ+bGM1SD9YUXhWUl96dSwmcCJzSDtTam53W2QkV158IyVVSmQhSkwwMG5Pe15AQEZedWxKJlNiUF1wekBDdU04UW1oRmhTPlE/X2x3Wjd0b1ZfbCxDLzxhRzBWWHUuVGdrdSo1OWVlX3B5ZDZWbT9ne11vMCE5MGZXO28oN0VJa3hXOWFmcWVAVThhRE5YWjlyM35RJk1nPEc2''@;'; put 'put ''eUttTyooRnBJRWYuX1Z0P2YlIU97VX0yT0h7Yj58V3MvOUp7ZVB6I0BEZClmMyk5UFd8dWMhbHdRIWU2UkI9WipmfSVYYkZELHU9QFpxellJKFI+RlJ9amlOfmhgLFA9PmlKMiZ+N3RvWWovcDYlQWR9LlZ0KUlfSSZKWTcvZ30ydShUfm4jYWdzfHw9TlUhaW9IR3dgeyxfek5MQXZWck8sT3dr''@;'; put 'put ''L04uLnE0JGtJXm50dDFvTCNbOlQhUnB5aHdUWHIzfiJzLGhjS0tnMEVgPSxMUUpXTHJDZ0FRP3hPRkM0VHp9cmhmO2lTNHBUeitZdWBEalo9N0BXMkV8ZW9uQEJdTVQjSE8lVU1DWHtUTnd1dzwrX2hSa2BdU2NGLj9odUxOMk54X2leUDAob2hpRlo3eHIuOSp1Rzt5QmdoITUvTm1qY1FVZWxV''@;'; put 'put ''eW9aTk41dj1aKUE+bm01b1hIWChOViJfZUxoRzZTKFVIZnJXWEg+N0xUfV1UWTlGcE9DWz40XmxLbURqSC4/eWohbk1KLkRZdDYiYGwocmZQLD1IO3dLWT1hYGFXSDBIRURtVmBKTUkrZTNZL3hkQyYwJG5EcEYkQHQwfD5yK0t9YyxpSUpVbFJ+bD48RHQzW3s2b0pwMzJebCR8On5VQG01dUkj''@;'; put 'put ''I0dMWWNoRCJkPCFrNEEjWU4jN2ddNCkzdykhUnF0TzlzYD5nd2FwMG1UNTxGZk5jVlpvREtQJVMkNmtHNDo1QnpBJll2ZDRIaXIpWkVaeVZHPm85K1BdM2c/O15GVXtAekNlNGF1O1MoUFVvJjZuKT9TXTZFKUIkRUVqQ1AkX3pGZmdrX2dmOjpNTndGT0grJHRqY3wrXyRuLj0sL2o3QExhWng/''@;'; put 'put ''PnsoeGNtYjR+OC5bL3hwQVlmcUo9L31PV3B+N20sJllYU3RCS2Baam41OWBtU2dyTkRmVF1gbVlWfWl5ejB6PS4iJmY7LGc+SCUqN2hXN2xgTjdpa3FdOEpXKyFHSiJfZjgkMVB5PF0jPntVJF9QQ0MoXihTVFk8fFhiUjIkNVdSIjlCZVloMTwpdjYmJCQ0dCJkQlt6NmsvekM9RVovW2ZdUiQ4''@;'; put 'put ''IikvaUJmcGYzNmpoQ3ZCfjsxLlhiem0rP3g2NXgvWTR2bUwyQj96ITNHfF9mO2ZWaj1IYkhicClAMzhWPiFaczBFbHFRMGttT0kqOTZMcDZbYiNTWUNtODZWJUR3cGZAZWYsP3V7IUNfJS5PQykyMF85LFpaKj8uUjlaWCwlJDVqQyszSzxMInVfUTxHa1ZjMUAmTyp+TERxMzd1OXRrbWxBJmFi''@;'; put 'put ''TD1NVjpLNn1wRSorZjNQOHwxZzZYVkteL2xYcyhgc1JqIm1RMCt9RzNbTj1kbVNjSHt8WVlpN306ZDZOL0pfPXxAb0R6QURrV2kzPHVlbCo9WGZvSCxbNDx1Uy46Zn4/NH0qb1dTcUolL2hpdVFBYW91UE1oV0A+Vyw5dzRzdVNVdThTP089P0A/bEVKZW1We2klc0lEI31+eGNKJVhmbE17L2xU''@;'; put 'put ''IiIpdWFKd2tfaE5ZQ3A8VEBZPHdkNngySy5tcGNnTFdleDhpTVBUZC5DdiMrVz5jRnFNcDopUVZNaFUkMXMvR0g/V0ojK11+KjNeSlcqYFhSRjxLQ1IqdlJMTm06ezY9KTE4IlN6P1o5TWIxQVcrTXNNYDFOa0N+akc0biM4KXh7ezNdIVExckdjakRWMVlTb0N9bGVLRHM3QnVId2AvKDc/Iz1m''@;'; put 'put ''SCZZYG5xLGJbRnlOTSx2SmVLKjkjcEdONiVKSkoyQnV8U0dhNl10USRNWlFHW2dkVE1pfHtqbjJXPE1SVSFoM1ZrcXR0WlVVfDp4diw/d2VHQGFyNWtdPyhhOllXPWcxIXQqfkdMbixMXVM6W00sQyN2UFJeeU1jTyV1I25rfmAkelEoaH5DdSgkL3VsP25EY3kvdTdWe3VwYFFUaHVZelZ9fVU1''@;'; put 'put ''NUhiZH4qXlJ8Kn09VGQxe1FRQ05BP0J9cVErOl5lYGxLM1JhZnokISFIWFBLd35PcSZ9WlJ2IWtdR0FIJU1TM1hLbHlGMG1xNDsyZHovRCg+V09VQHZ3c2FDJVJtLzRxdUBpbWldclV4JGM7Y3wiZzxuQ2pbXz5Rb0lISzljd25CWyR0KzhlLmxHfnF8NGkkU0QmanwoQHQ+JjZ2aF4uXlpFRT1E''@;'; put 'put ''MDxGKHR9PXM1VXleMC9+KkwwQ0UjPH5kYnY8cXBWfHpBSXdGaHN1KjRlVDNqOU1xOzBLcWdaQUhxZHhZej9Ecl8qYmIsTUI6RXhjclRecD9XQXclND9FYzVmWmt3RCgsYm8lcHYoXlJ8ejhJOU5dOCtBSDZQRi5dRCsuXShvYntocVp0ZngzeS4vOCF1QEZLaCJsb3B+ZmRTUzQkN11xO2E9Wkl8''@;'; put 'put ''IXVrLDYsfTA2RCt7PG9EXz01TCtqS3dBVCVzJWE6bVJYSTVgKz83REpGUmB1eG95PCpoSGxtfHZAMSk9YlZWPWleZCYlSVA0Xiw2fHhHUW1qcEA2JSRpaytHISxjPHR9JnhxT319RmpvMCNFazU7NDhmITlJWmhBYWI3VVZHTCE6TldJbCtEbS45Jjd9M19SZV5OXnpqZEE3RGtaQ1dTK1JlSTZO''@;'; put 'put ''UEs5PF9wMk8/aSVzSmZ9RzVvaXgpOnJ2O0xxVG06O0kjWSl0W0J1OCNAQnpQZTAsOHZdJjouX3tCOX5Mck5CKElaKTw9R3xEK0R4YCpGO2UpVFMwZX48ZCxxakV6d08lbFRVYD9HV1M4THV9fEQvNTdTeDR1Q1hIO0RKUD18VHtsWms1Lks3ekpWQHIzQmEoYElXeyNtTyFaV3VmPnVsRXs/N0JD''@;'; put 'put ''aVgiJilmKEBrN0hQd2omIT9WWjVdeF9dODJkZTJAKHRnK0Z1PlMofSFfOG9GLG1aNENtYXxkJlgwSzdwP0NQeGNRKGNeR2JVTllFWjJGX3o1RXdSXUZOeT9MWW0mNjI+PkZUMytfKCslNUdIaD5mcG1kVlBmTl1yaHR7PGZKaD5qZ3M8MiFSMUY7RTR4I15yUnduRk1gcUd+XkhtemN1VHtnYipI''@;'; put 'put ''M1JIZDlJVzpOKyhBLDFDVDhdUHAhSFp7PT07NS9lPXdmV05DbFpvOHY3TVlIVzFAVnUpZixONHMsZzdKeixTUzlAUXw4XShid1Y/MkNmR2F9JCJaeFp9YC8rZC81XkguPzxWbW9FNyRAXjMyNmVMV1AwKFpQWjBmbntQUDtbeTtyZ0gkPSgsTUlrZFU1KSlSVGUve21oYDRzfnl7Wyolal4haEVp''@;'; put 'put ''NHxYKT0zLnl9I2d7Ln5bb0o/SDQhWUJ0bkp4PypoaSYxbC42LGIjVkYleDlsTCFjfj5PM3ZNMUtITHtCOzNRJHVRRlQ+YltCRywsVS5GNC9tPXM2TylTXz92JVkkZmk7RHtQbS9zcEBldkNwS1t3SDw8ZTFyV2M6Lz44ejomfkIuIX1pRFosUl88M1cyOz88bDB4Ui46e1g9PnhpMX5AdyRJKW5h''@;'; put 'put ''LEZZV21sXSw1JTtMYD8obCsiZjBsXS46dzJqa2N3fj1+dkVIWmFOYnx6P0dbOiQ4P3c6NSowZUVBIXwkMk5EYmsxXlc3fHwsIjV7ZXF4L1VpcldATSh8NXBIIzlfPnBhXXB4OThzKUM0PWZELmVwSERaOnBteTNePUlHU1RSQmwyKnx0Vis4REdUbiYhYiljYjZldm16ZXp3YnRpVXBNV1JqNkdV''@;'; put 'put ''PStPQUN7PXVmQmt8MmVPKHxYWjhfNj9leEUsRnp5QTNOUk1OTDtiYG4ucy5qSiFeVEd2VyNtLlUpb21HaFVAQ2xvND1RRyYlPyMhbixrP3wqNT45ZlpCOFBBY0JCQi8rZFM8MUg1Ul1KejRmRFVMeGlRODp5PSQ2S2BbQDhkViFxWlhCZll4NXFLMj5EfEFzckghRk8wb1hFPzM9YV1ddk0vaVFE''@;'; put 'put ''YH4oJkVndiMoa3FVRENycmI7SHFDUFciNmUmWTV0dVVecFE1T0EhUT89dHpFZVkmPC4zYkY3PiF0YyZ+SSZRJjlNMnBMSEJrcyI1R3lbQ3RSYGElc1RKZEJnU1BiKFQ0KFprMzdjU1hyZWFSUEFUX3V8STQ1SEthMkREME5bN2w7RFI2c282PVltaWtlfU9lJDV2Ui4/akJZW1lFaiF9VUQ3fSNm''@;'; put 'put ''VmRAbXxNVkw0KSxAYS80SG4vYWcmUlpac0pgPmwwcl1OcmZLQG0+NDQ3e0tnNlBKOno2K1NYQ0M0bDwqInJRWl00ZmRHak8uQmd7Izt0bzFdI0dsUz1UNWJTJEUlbXdgSE80L00hREN+ZDp1OnpVM001enxlWFZaWXdtdVEifjhRTExkKDtpXXFIMyIreWdrMFIrTWxPQHRlW2o1R1loYHNkUldK''@;'; put 'put ''QEdDJlhCYVIrZWE9aDhJUU9LNU9tTWJgRWVpKFQ+c1k0QDVPbEhmU0pgNUY0dGQlS15mc31UI3ZyezBJckU6PTp0NF5GaVEqSz94ISRBZ3omMSR4cHJJOCkxRGQxVlBRZFMlKTVCYipNI0VrJWVnQ3xkZ0Z5VT8iPGFUdzwuX3NbYikhSlFMIjZkNXRda144TUpEVWojO01EPVNbNUJdaiFzaS5p''@;'; put 'put ''OXIzKCsoXnNUaVh3WGNZKSh+JWhfKCY7ZyIqRX06WUt4ez52QCo6RXVvOGtqeHNpQD9UYjFJWTguWH5tZXYqVFdqZ0hNenZpTSJaOklaSj5ocUQ6WSVxNWVTbkJzQ0w1YXxYP2MveDB0YVhkcFJlT29DJTxwMDVxI2NnPzxrX2M5VEdeZWpJTCV2R1F2MV9vNl82WGU6dml0dkRfOVskY1pCdVJs''@;'; put 'put ''PyUxSUtSMkBEW0hTMlp0TWVKTXteSSUsRHleUiNsfj50U3w4MjsxKDhfazpdPXRQIiExaV9QdDB9MyxVKncwMyFXLHlnYWNxTTF4Z25ZT0ZoJUJfNC5bemcrSFoxcndjfTFkWExdVDNSSlgqKUFGQjo3X1dOcHZXYFBNM0UhSXBGd3JHVG9EOkp1KVQre1dQcFRxaXF+QiYvRyshUkk+cjlkR1tx''@;'; put 'put ''O29tTno1WV8iV2xGWmhSVzpZSkJmISYwW15CNWZmQTo6KlIoMFhaSGI6VXxUIlUlY3BrYnAua1swd0tJNT9hbmZaJTV4MGZUaW5uUV9sZnpDVXZOIj5pUi5QfjZ2RjsrOE8oPEhKelpVN2MpSG9FMyI/NFcqXzJDIjgpRkVCMz9UfXV1TUR8YDNnYC8zZzYvbl4mez0qKTwuI3dxS2x4PT1bUj1Q''@;'; put 'put ''UXMiNV9faHxyOkk1TSEkIntYT0JrRixwO0UwV2h2Lk45MWt7OzclbyYqVyolZDJkaDxsYzJkbTxsJD1JJHhjUCZMbUJSbTNVX0VSWi95LH0uZjYzRlFEZy4+PGYzR1lFSk9gLk56K3ZiS2MpP3V6PHNbY2w/UztjdzRrZ0JPN0NSXmwoRm9dcXFAVDU7N2lAI3ZfVCNzMmVkVE96UHE8ZSgrZ2I1''@;'; put 'put ''dnx0aE1fTipbfDN+KmQiNnVuNjhvbEBdTTxzMlVgek0hRjhEOnNtUSFTOm8ofXtzQ0dOd1RkcWQxKTQhWVk4Xm5wKEBeN2RtOyRXPDQ9XzVgMmdVZDpNS1hLI3NwWksveDlNaSU4WV1VMkhkUmkyVkEwTTo5KDxyaVA3IW1TbVBxaSFlKUY9V1ZHPWhnIWwpPU42QzBhQ3hiQ3xMJTpaR1Z7W1FR''@;'; put 'put ''Tm5EOnJke01aVXN9SnYmcTxwYG06cC5FfXNWczlmSnY9aj5WMmUlfUBtdkFvTX1fT2k5Mj1AK31KeTAzaEkuMk5YPUk7U3dVZn41a0Vjbl4zJiQpK10xPFgqO050Yl4hUz1Bai5TdXRKaChYSHdEWSFFN19+KXpoO3NhIkR9clVIKjwsJlt5Vl1eeyUjN3c3Y11HY3EpST4wfCNTSmxvTXtLQjZQ''@;'; put 'put ''JVhnJU9RKDsvX3d0W3VJfDlVQD1KVE8rcnl1MVR1PVBoQ3QqXX1fcl81Q0Y8OkpWOGpfX0NqLzdHNlZeTH09XmtrYytUaT4iWDVkczEjWWNOe0MxPll7Y1I/PlprN1hZYlUpVmRhZGZgfjVRVSRzUlJjQyxKISZXfkwhZXlIWlN5eiJkflVafUxAS0tEaDAsJi9nVHJTNDVvSzojc1lRTU5KVkB8''@;'; put 'put ''YyZQUWF2Yl5DWiRYLjJqJXZ4R3NqYy8qcmcxYUZEN3A3YV1KcFtbRVVUbkRJNj9FOW9FWkxBT1FMMzRIJHRvanoxdEBqO2N5L3ZxZ3c3cHJOaHFBQmNuUl1iR3xrfWpNaUMpdixvO1ouVjA/JiZ1MGZPbnl5KXVUNlYuRylLKTVaWnJqeHM2YjEkT2lrQm9qbyx1V0BuVilMKT9eWEd6XjA3VjxG''@;'; put 'put ''ITFINV9fWUl7Y1R6OURSU1dRQ18rckB+aCE2Y2A5dyEvXypMWj4iZHNdKEJhTGY4Ln1NRk87dlZ6clp5IkgpQ2I5YDsoN2Y/Nn1YaltTbSspfEVIN350K3N8WFZAPFVRbmZ0SGhhKmtyQ1lrdjxnYWksO3QkUjR0ZnE5O0Z2fGtdMTpFWTNHPENYTGZMdUIxVCh8SXdUTytEajN8OFY4NHZtU0hY''@;'; put 'put ''Yiw8Iyp6KHdfUkpya01uRkwqUFRiN1U8K016SVJzKz9RNWRiPHJFJSVlcXB4TktAMzlQZFdGRU5fZU1YU288SVlFRC9pOzhsQmZ1Z0FDe15keHx4NSo+M0YlbksheGhkRHxLIVs1dXk4OHc/LnhLS19DN2dGKno5Mlp0RzphPnFJOGtSPylROUxlOnRLOlE6IV0mcUBOa0ZGPWYvVX1TTT8iNWJZ''@;'; put 'put ''M3A3P0k3O0Vme2dweEpzfnMjNitLP0xBfHt1aCU0YFhTKnl7KDR4akYhJndXJWk7fmdRMn5uU1tsMiVjP15nQzBnfmhvWVspQ304RSU5JmcqP3JjOlt8SHIqMnpAV0l5IWRQXUpxcFZoMHovRWxvVktLSChxdjhjMDsvT05pcU5HLkNGfihCJS4ieDUkX3tFcHhiZSU0SlFOdTNkNmVgKHckJE08''@;'; put 'put ''cVRMLjBDbCZ3ayFTI2AySCMwSnBkekxAITkzK2svQDB1KFN6Pz5VK0xiTypSdEgqMUU7bEI3RFliV1I8RzZTQXJCSz9FIWVXYG1neDkiUjJQMVNybURub0MrR21jU01wcHRDQ0pQYWNrcDloaU1BOVUhIVpCcS9xIWJHV0s0ejxBcVVHfjUoanJGUjx1TyxjN0RAeTQ8bWdFQytCK3AqO3dUTDRP''@;'; put 'put ''YDspTE5HdTxIUFZmeyk3NSwjcW9BSzp9K2hMPUxCdy5uc0x9aFNUSWJYVVZRK2QvSjN+NylLLmc9PyZxRFA9X1Y3UFhqKVREcz5eYjlYJiYzcnY8QEw4bHhxPyFQci8mKTpxPXBmMEw4LHhESERuY3gzcGNbUG07Jk10YVhCdXQwWGVoZDkhP0RmVUs2TUJFdWd4bmlPQD5MYTw1fU1ESDE9WVMz''@;'; put 'put ''KCgjZHZVVWh0U3M8dXlQemFPVlY2InEzcSw7YnMmIXN5Zi5QKnR6UUN8dlF3XUFXWExSMltveXlHdzUyWzB4PiUpTHE5X2hyYHw/LyEqQ3F3Sk5selIxZSNofEt1YVhGPSxlJFplZDRLSzlWeHZ4eUpRQ25RK1lJMHdxPilmTkcsUSg/dl5KPTYxdHtTMGg6aClGYF1TXzYkVk8jQGYrOStaI0A4''@;'; put 'put ''aHw1OmxNLDlFUEdwRm9jSXBbIylYXzE5fU49Kks9fHtnQ1FhOD5BJnV0WiRRSExOLCFnWDZ1JUxATikvTGFDKyRxPG4+MiVbSUZWV0RGcmVnSzsyOEMqWWhJVm9AQTFUYmZASXxdOyQ6U2ZCP3dnR0d1YzlTZEk3MlRVVlZ4VTBKQD0rSDMjQnpjfl0oVSg2T2hzL29rRWxBaHBeSGB2O3oyU15t''@;'; put 'put ''VX0hc2AuaTIjVFEiSHIhREJtVzEidW1SKEJ4RiJhfXRaMDNQMERwJEdFcXN3JGFbY15FYz93XndOdnFYJWJJTnxecC8jQ00mKmgiJkVaN0lafkV+WCh4JTZaRztxc3dCVCJ7VF9pNXJgMV4vWyE/IVNHPlpsbjx4alU/NGsiYD9veXQkKm1ePG42RVo5ZS9oOT9jZV4oTF8rOj94N24ld15kRDV9''@;'; put 'put ''OHg0VkQ3KV1XKWxdMGEibWFPN1hAcGR3PH1kPGxfenZNenJWaFs2Vks4K0VSPFtWJVdMKFhHPTxvRVlDaC8pYTgxNWxQQyh9N3x+cmw1Oz58K0o0WkBFdCJueCkiUFBuPCtjOH47YUllfDB0M2VfKHA5I2tWMjhDdHN5MSs6RGRjaGJYbXA4KGhKKDtGaWNxWj1FSDJlc2ArTTk/fF4zej5FUjZA''@;'; put 'put ''XlhkIXZuZllaVW8xd1clcjpRO0lyZGhBMkY+SWMuUDl5ITt3IzEwJigqSUcpKjpiPUx9QF1XaF0xU3w3Y14/dXI7PlZlUFgjb3UoWDd4PkMoaWFGQHdJOy91P1MuJjF9UkpEUjU3KiZlXjlfP1ldPyR7dVpZRyNnLFgyZzE3eGt5MjtBYks7MTFwU0l2TkwoV0hYfmU7Nn18entYLi53NT57PjtN''@;'; put 'put ''Lk8+QjxXfjNDTGYscGsqPVMvJSpRQzNzaTd8PnEmYWdLdSIyQH1vM0E/Z01ue3kvSF9ieVo8SXVHQEMzSENeZm1GOz5xclpGb19HTXN7Xyw3UVdUfEx2JHM7Y00yaE5idXVjVzdFLGRuYjc/L2k1THEkP1MxIkhvbGpiIXwkY0Y/O2s6LFZzeEB7YUhlLHh1aDlKcFs4ZzFuX0tYNCVVelY4LGlK''@;'; put 'put ''bD8veG0+O0gpNWBfdXoybjUyQDFKMT1MXzNULDouSzlsYkZFJG55PTxtbEAyeigsK1Upb2o5UjttJEcrWjUuYyw+WUQlPURbYnxFN31FLzl4VXF3Sk1rN1ZmJD5Qb2JkIUR5P0R7aVQxM316L3hjSUAxUiMlYn1ySG9TYDB1M3E+Vkgrfmd8I3J0O1I5KFR4STNwXyU+M0heQVkzV0FPe1tFeDdL''@;'; put 'put ''a3BOMHBYZ1dUT3JmL1t9ckBhTjhzbW0qKmptbDc3O2NSQFU5YEFbeUZTSThDYEZLeHJ2c299Y1dqc3k2U3JKS2hyQ2VUP0F0Zj4kPFlJXldRT0whKXJafmY5WDVgb0o4JExhYnoyUkhhdi9bWH1PJUJ8fERyMFRXWFlMYS9zYT1NJFBmNFpXaS8yZFVhKXlZL1E0OVpifTlnZCM+YGx4I2liRjFw''@;'; put 'put ''QGVCRDk6UzxvTXlVSG5pbiMyeX1nXnVNWWFTVm15LkpdRz9hK091V3VZd2lpbXswWG5VLCtKPlZebWJUKUtWbnFXNVBbOiI3S2MlJmBIOiJ4UGBVKlo5Wl0qZG93KUswMlQjcms+QGAxdXZkOWQkajpmVU9WbS5Bdyt+aik2JkgpOGpfbHpbZEw1QVh3ZXJLNClsWHx1JnpsZyluT1M+SntvQHN7''@;'; put 'put ''R0V5THIkfCNBUiJ2eHB7KjdNPUZiY29jeHIrPThXPUkwalMwTFF6bjZyRCVsV28+SVAkUFgjODFOezthOEwkbUZbVzxMbzs5Uj04VSpZSiMwTD8qQXApKklYZmFTaC48fjM7fGpOeDV4TVRoOCZdPSFETDUoPDJ3IjF7Sn4xRHBUNWxjSCx6IU1TMXdJUEcwREZbMENje3pjdE50REltMjF9MGsl''@;'; put 'put ''WlB+T3hEVi5CVDk6LCguKUpIQEkpZSVudyVmN151e1VuOiRPWXMuVHkyQkFGZ0EzJHRwd3xXNkdrVV5tQUF3UldPU25nTDR4aVtYSjRHU0tVX1VmWEZgUUYlaT5VQkwhYGcsVnoscDNMRXEmT0hyNmoiXlUpUlRjJGAzPlNkc3drVj85S2pbPnhzbS55Wip+cW4wVzMwQEtbfDFqemFmNkYkRD88''@;'; put 'put ''SERgXk5gSzl5R2IhIj1JQ3VjTk9qbCU6MWd4P2FufTlVIWEyeHBTJFpSYW5NSyFlbUFKKHx7WmdiMTJbMnRjO0ciPzR9eGlPQ2dzenUsd1lHWD5pUStNP18oYEpEXjh3cD17Z3U+JCVAJUc5WFEhYDpYNXMhfHJGaEVRWV17W2MkZ1dPU21pPjdnJmRSY1A4ND5lZ0UyNWxtXiZKLiFlNl05MD9z''@;'; put 'put ''VlAzU009XlE1QjYpJGVsXm45ZDNie2Mpb3JDeSE0VSl9QVQod0g0OXI3QzV5bmhneWhKW01qb218RzA0cGQxUWhGMmBZLnYxLkZrMGEqdkVXfj9dYGJXYnVXcFQuNFFYcURxcT04U1pGaHx6Yyk8d218YGdje1c5WHhGcjdLaFpNM3BiSEZSdFJlVWUke3hKRXtbZWtaVVArM2Iid3tKeHNtSGJQ''@;'; put 'put ''IkE4WDU1azhPSihRSlpwT2BfRnAmRjRtS1pdJDU3WWw/LHh4ZyNzTVdfc3AxISp0dERwVFY3T0BKPShzPXZeVip6Y1pXYmFeNGt7ci9aVG18MUxXVm4kJHluWmpANTdKT3g/UyU7e0ttc2tZbWAzYiV5T1toVSZnbEI4SzIuYDIrOzwvXjVzcnIyR01oZTlYbj1QX2pVK1FgR2BJWDZ3K1o2S3c9''@;'; put 'put ''Y01uNGptLzBFX1JdKXo5cm9xPVgxOEw6S3o0azR4MlgkNmA8eH04QHY4YnZVImw3WC5KQGQpMEZ6R20mclJHKkpmdSY+YiV4N1d1TF9wQzpoZ0lSUz0oYSs2Py9hdyV0LElINHNeInt+dzFgbE49VCVNZFE5XiR9RSFmUDBOKzJsZGFpIS5fPkM0QFgsYTxXPEt1K0lbMDEqPyhyPy47Jmwsaitl''@;'; put 'put ''SyozJl5nb0RCPmA7KHFkSyt1b19DQj9fL1AvRmdvZFM5enV4VEx8djZvbC4zWlslRSwxSjwkJEUlWmEhQmVVYmUuWmAkP3d5Py5oSyNXKkREOUtpR3ddPD0qPFN2LmNjR2xQTykieWt5UG9VK3xCOXF2Pk98YXVVRllCeSkwVVFpOHooJEswL3AqKD8jSkN+I3FGOGNsUlNUZnBzcTReSjAuVEwi''@;'; put 'put ''Jns+T0NGOzxYfk9sZ3NIMTpzfG02e3dqUUd4Kz9MZipFczp7eHE9RkkvKUlyPXB7JVpoQ2MpZjJqUXlkaDZBb2IzTkRVTCFkNThTRyNUZVssNENlTkhGJEhlQz1YYFV3QTgldThhPSYyczt+RHBscVFWIkhEaHh4TjIrT2BqJXM4WmcsRXRrLjVXYVE3TChIZVFTfWs1fl5aJEIxNlJ3W2ZTKl4x''@;'; put 'put ''KjdIQnJ8IXBwQ2gvI2RaUigxUzFiYkY7Vm1rMHd7TWIvdXosTml+WjU2ejlALl92bkdzSFNpel0ld1Uwc2B8MCNdYHkiWTh5eERmMVR6fmpFeCszLGs6IyoyLDtsPUdLfXhlaHhRP2FMI34+O1chJD1UZiJ6fnR6RU1jRE0vekgrUj52I0h4VFdhPCFXTXY2ajZkVyVFM3ckYm9fQ1AwdkRobEJV''@;'; put 'put ''cTg4Q2JeWCtKJXwoXlh5dG5yUzhtcl1qPyJASU1neWp4YGFTT0MhfHdebEE3ZTdqMyxGUHxPZ1dYezY7eF5XM34hay9UYVAwXlYmOEJ4ZW9sYWF6MT9OWXhEJjcubXA+SC5YPXhPVXZvfD5WQVBGbToiYjZSdlpBfW8+dDBiSUFaOlFhbj9JaU94Zn1EQToxLjdzP01gfllkLlhxbV9dQTg8Q2Qm''@;'; put 'put ''MCZySVBpKkBVQ1gjN2xmfjwsZHpedUh7NCRzNT97X35Cb1EjdEUxYCZ3L1V5VG1lTjB7UCZWYj44fnc/I2dRPkBIaTNFXU0rfWIsRHpNOlpVbH0+bVNZRzlFRmZqenl0QWYhLH5vJEomVkMzMmxnR2FRVVtGWXdTTUxqPFIpNGJda2MkXVUqR1ZEWCpUKmwmRjo1WzZfODB9YTJXMV5xLlE1Iila''@;'; put 'put ''IXNVaCNseEUoTDIhTm1MImdbN3ReXz8qMFMrcWpsTDlxU0gsJntIW1dieElfenhVYXZeem0+MH5hQFpxakRqOXghPm9JQFUrbkltXk44Mkh2WGh6W14+LnBQLyIvaykwTi9FWntlVFdgRGRdclt9VkdCc009UiE7T0J5LkA5UVU+Rm1UamtvITRdVW5zPV9neCZRZ3UvQEN5VDdMdkokSHpCfERF''@;'; put 'put ''X3VVVkc3PFVRW35qcilLS3xQcXU7TDhnfmR8byN7JVJ0ZlpRUj4icEV3NEZ1LEF3a3Vfc1lTcHVCKGdAMCY7MSVSKH09Ky59U1JrP3NSIWVBR2EoV1BtMXZRZVpqQipbQXNocFhZMGpiLiQ1RHJoVD8uNTokYTQ+QWx9d31ULGUrIWR7O01nL2hWXz49YU9gRUt8X3UuKXNzMSM1UkBhYDFjNl9m''@;'; put 'put ''TTpmSTQ2RFA2I2tTeltGdU9lUG5gSEswMmxVN3pGYzpHNiF0XT9JTyw1ZFJKTzg3diQ2eUlBInYsdjdLOEhraz8mQ19QdlRUJmpmaXI4T04sQmRwdikiTHJ+VFlqLHVhOU54QXJJbWIlKWBza1lwZ3QhZFo7dSIiWWYqbWNMVC9YVmg9UGsvNkx0NiIyMjhuX1olJGNHc0M7eXFAeVFCOklvZiYq''@;'; put 'put ''VnMqKkpxTCVlYUZsK3pbcWJvb2M2Xj94fk01KTpkUl9JdC5dRitJY1NuM0dhVyp3eEYsbFpaMSxXKHZJRC46SUFHKklXR2FrP0VAZV8/Nng0OXFufUY/S0FPQ1ghNlg3OS8lNiQlcSYmYjcuamJ7eE5kJGlsenwqSzszMldmJGUpU28/OSF7Pyl9d2NIJTNeYFgwZ1osNzdjRGZvQ0gzbWVPPDgq''@;'; put 'put ''bTs/TT54L3MlfTYuXjFQWzxHN1ZQVHJxYD1CTyJlX0tNVzxbP3srdT1xWmBjM0A0WTt+fHAoSEo5bXt2NCJlNEpBdWc/N3I+K0B1T30pRTFnLnAjM3dIMz5GSCtnPXtLKD9kSndMdyNDbX42UH47XVFwK1liMzY+OGY+NkJFM3FIc3IhZmYoYlFXTHZ5MH0qQ1MvOjlsZHN+PnkkUiZkOjdvIi4v''@;'; put 'put ''IWo0QnZ2PT1Nd21AK15oRzdYNjF9UmlFJHwiNm1nemowUElNc3c8PVJ3QEAjJFVRVERkKlhySV8wYj9EWzA6I215dSIoWjZxR0hpYWhoVVUxdDBsYzdNUypAb3cjZ045Rkk9MHhePyYiWmI3eTRJMUR6JVpQbCZ1ZzVqUjZ0UzR9VlZjLmZBOTZHZyRvWyRlSXNkOUIoKHZsaj5laWVUUH5KKW5L''@;'; put 'put ''Z0lLMitfRl9BdkpMPW0wUmt+ZG5QdCo9dzVIMF10KTRhaUM3fSk/MUc6eEQkdERGV31mcXxLLjpaVVF3TG0vWFF2a35COHh4clBkVFVFSmZdbWI/RHh+KDgoJD4pZiU1fnxucWg4VSkwWSQ2SXg3bkRedFBXXVlpUFUsajBRKG88YDFJWVNQVSE3VVB4VFUoWFdXWyRgXUZtMCNRPCFFfGV2O1Iz''@;'; put 'put ''U3x5aW5DbUh5Oyt0Q0hAKSFTfkJHM0o4SGwqOE97JVJvWlJZQSIhKDo6RSVnWFUmcCY1Jm5sZXooXX4rb0JtPSV5IjIyei97b3JYY2pSfHgvJDkhVVkjKzBMMiZpZ1RoNm5aaTo6KGldeFIvVF8zcHlwZj06OVhrSUZySWB0MUZ+K3dfalokW2x2Z0tRSUskTSldVnhPVF18JHgyNmtRanMuKlks''@;'; put 'put ''JVFfWGJZKEJ2OEJsJUpZIU45M2tmU1RTWUZMLFQsW1NQM2VLMF5FTjFZLiwhbCgzYTBLbXx3ejlOPGYvVD1rSjVEJkkiNEY4VCp8VX4lTlpMRDdbRnhUPktsPU5pK0BIQj9MI29oRSpSMncsZXJfPmtGfm5WbipnSVJsL2kqUkQ+e0tER1huKiRAR2g1e2UiblZtYnBkSHlzY2JnWFVkSUp0S3Ng''@;'; put 'put ''Mj1bKnooRiF+dTQvTmo7WVhHQyhVVSxOYU1mRy5rdzQzK0RCZUNUM2Y5KU9IU0NTKWQ+bV4sZFBXUHg0YF8wLDF4UDglM0FgWU1lX1kyPTwlOGY5YjN4OWQzK354WiRIfVhMYklHOSM/cmJ+XVFHPjc/PjRuNSZBWTZAXXomVzMjSH5eaTdLUndOMURCUEtUJEViRUZdJDFUJHNmMT0iZjd6W2Rr''@;'; put 'put ''bkpvTERbZTs/WW1IKSpzOkRWfFhyXkwrJm1IL3NEaWlHNTJeWC46LylUJS8lemhhJjppWzJRSFA4XiRYU3xlbkhVXn43TlllaXh6KWA0azFkcUNnUlFJMUhSbzg3XShCaW5tLjVBUlk5InM2JS9AXj46KFhqU3NKImg5Y3p8TVlrO0VzLEYxVEgySHh2NzU3cmM8eWk2Ii48Xy4sRT01e0lJVEdF''@;'; put 'put ''NT9TZU1qelQ1VDxtXzBrUTZZR1JaJDtTblFLSUtiaDMhaHc+VUVZRXZ2PmxabDppIXlLc2FYaFkrWDc1ImpvTTFvNmU1Pm1fUVcwU1dCbThHejlwclZZYztLXUR+SWRjfVJLPzdfQy9VaFlpU2IzUldbP2toMUhldUReekZiIjJ7LDV7YW9JQSlfI2xtYWc/UCp5b2JTOytleXQoLDxfakhoX15V''@;'; put 'put ''UWEwKEpbSX5pdkBGPWg5ODllfG1rR30/O29OJUNwYHNKVFNoU0koX3VHdi8yTyFQdHRZb2tdMkJMX0ovRG5YKGNkXTo2cUhyJGcuUWZmZl91JSF+OipKLDV4NElSUXpkalB1OTA0Y2lQZE9BZVgkRHdgTUhlYV1xWHU9PmlMXzh0THcxb291NGVqYFYmKmRGdipIJTFGRXdnbCUlQ0xwY3UwWy4p''@;'; put 'put ''QlEhQnY8aDdNb1E5fklOWGlUalRGWF9zQEBpMjkpIW9GTENdSGRffG84PkpHWG9XMGR9d1ZxaWxDVGMmQ1V3RDd8Nk1tfFt2S1o8e3FPYUVCR0JzPWpHSmtSUXJxVnRnNipSQ3dGVl9hKFp4UTVuR1Z7Wj9iV2hZbVtnUEU9SWxAUSx0SzAsWF4/QmVDWCZzPG8pZTJCdSlzKGAwZ1lCWXc1V1lC''@;'; put 'put ''YyZKam4vYSpnV0UqQDRdZldpJEpONkQvdFJCS1h4Xlo5aGAyeX5WYTpPMCREfVg5ekBOTlh7VWlGNEF4M09seGRjKSxxWWFxOiVSJVtJRjs2fUVXe2FYPEZOPkh5fWk5eT1VRjJrTEJ8W3gpTVdMMVRxWV06PHEvTCpTR3RLYi5oS1Q+Qk17VWYjJmtmJi9APGNhOm8zNzsjKnlDRHNlWmh3RlI4''@;'; put 'put ''KjR9VCUvdEhTSmIvLlJicGs1OU5OW2d2aGk6RGRddTI9cT1lbWhaRDN5XXVHSENdSzgsW1goP3UuMDorOl1hcykoN0hSQDdIfFFvfnFOcSgiSiNkdHY1RDI7djAwMllSaCYvaHhIeTJPbX5LWj1uOl9AWUZLI349NCNMO2NILH0sJiZibWRTIT5ILiVNOTV8NmlAWWJwU3ZJMFFqNTE2MUMwVlBV''@;'; put 'put ''d1Q8WjBGRkVnIlg6ajovTUF5QyosIkNmSjVdM0wuPyIhWzVEIXVxX0lCKnhybT0jRmIvQFddTk8wajgjOjBDM0JeSjk9Pj8/amM3UihddEpQd0Z2fUIjaF9TZWojPyZuTUdten5WYFlfeVl5OXZXTlFVbk9sPWs+ZF9fQzchN2NZKjR0b0EqeFhLaTg6ZnM2eXVlW2wzSF8/Q3B7NSZpaj8kKlNS''@;'; put 'put ''LjdYWVVbWHI9cE9EUW00eHxTNzdGKUEmPmhMNHZQYisqOH50R0F+KVg4M2BtZXhOOVE9KzVOMClTbjBxVnYhcjAkfmBIN0ZMbmcqcW8kMm12YDlKMCViJkBLQlpmSDZSN2hjTTxmPEdZS3BKVywpZDk+WExnXyY0bmZLWEJiWzpJXmkoT2gjQlc1ayRzZGtaYWFyNzJOUUxpbEwxRENUejBjNnk+''@;'; put 'put ''LlFMQntRKHViNWYuKXh0SUlQU3NweHs6bzhZUnojTmB4T35gQjFLInIzKURaOlJqZ2o2PXQqWH0uL31TcWQsJUoieT1Jd3VNKjMudmBmPnw8S1l1cmcoZHQwR3lPakZyQ0N4b0VdYXI1e1IiTE5OeXR0cEVzYDo6LDcrfDRCOGxWNEo9IVlkO2JVSFMxdTVWJTtFSzhFaGNATD1hWVEwOntxLzRM''@;'; put 'put ''WW8xc2dkemJsb2o6ZEQjWWtNaS57Mkokemw5ZTxZcTwjKkwvdj4kQ1cvIzREeH44OT9DTk1eaWZJMypjKSwiR3A8JmBCfUJLbXR+M2s4RFohaFJXPUUhTnt7YC82cll5W0phUlE5K2p1OlpsTkFhQH4iXXVPQExPPkpdcV9xQVgmcW1waWUvfGBMPV8sSjZNSE1vUWliJWtmdTVtWzNxSFF4Yj8x''@;'; put 'put ''O3M7alJ+Zl1FZFRuJTl9V1RyM1QodjpwbFN7L15sSFhQdyp0KzIzX3RaMk9ye3FYdn5LIWdQT3dXOGh+RVdibW1qaW1NKGxZazlEJXh4TGZheTVjIk1jTEVaWVo1aHREMCllZSJIRFYyVDJ1SyxPbnJ7fjJbI3A4LEIlJGc9NjYqZCE0fTg8TUA4e0cuQio8OF9FNk8iZipkUkpPM3k6PmdeOVN1''@;'; put 'put ''WmBNMEheQlVTUEQmMTx4RntWa3RRP0JPWVtYVVYwbmM/WHg2cXoobGZpfmE/W3VGZlBIJlt1XXgoVGxTY1JLPyh6KFs8Yz9veHp3RUdrKWpXYWA1dXZLZmswO3dDdCl1OFVVaVNpcExeejNQfV1aYC4vQk4xcX4mLD5aRzFPS3BRRTxJS1ZTIUZUYXdqTU5iWDxYanRYU1UySSQvRXQ+fH1ZZisj''@;'; put 'put ''T0I/XVBrYT03YUNFLmMqP3JRSFd5NndAckhLenZCUT8hQUQxQG1IZ2YwNGY6Jn0qQVQ/OCpYd25jQEAoUSpWWCgmMkRxdTA6Y2d4YWwjbzppWTh1Oko/TzU9PzA7MkowLHxJXnk3aHQxPDgmZ1kzVFVKVU1iTGdWT0lUNi8wSWNeXX07UiQ9VGZgOjFefGZBRE58YndwPnM6VEUpZi8mYE1tIW5E''@;'; put 'put ''RUwyKjtrP1kkPCF9NW8uVUZbTi9EVT4jeDUxRTlrcCZwenswNGR+UCphdXc2Jl01ZUUwT3VMNnUzbChMN0RwREMmQkpXdHlMZjl3aFNdW0xXUmEwb3pVPVA4NWBQLlovOjVyTW55YiJRbis+Uz9lJExCdV55fCF7dVNEWEkuOSY9cUZvcEMlWWJUcXAmWyVUKzUqXSJyUmorSz9idFskSE80V0U6''@;'; put 'put ''SjBRKUpaUjhWXWBVOiVFYWc3cStxXT4qWEtHWVJLLzFDYnw2L1ZkQCloK0dVLnBTU3c8fnBKVmg0alh+P3E4UVF4V29ZSHQ6RCpRcE5XI1B0bGBiTV1NND1SZ2oifnIvLlhsJnFbbCh+KFtKYzIyOUcsQjdSM1pyeGYpZW4uKDIoc0l+OWZrTDpzUH1fe19bcV1ncFlDbS5PIWdhWVE7R2s3TUgo''@;'; put 'put ''Q1E7KGYyUXlsSGUjb3NdP0A5Y0t2U2gxPy47YjFSaC5XImdaTkEldFJJQkY6e1hrWVZtekBHQWlzP19hcnFUYkhyUmA6QEExKC9kYUFabCVYSUZXcWNpKylwYksrT3g9L204JlorM01BckZRIzZ7O317akAiVnxdclkzOlkvd3pmMGBCIXFlayxeKGpMWCU2cnRQVWR7fGUkfVtULHd3RGNFW29C''@;'; put 'put ''eUNlfVNodEM1JUFPfn5KO2JIaj9WPjg+fElkaTlDdlc0Li53dGJqLnV0Ym9MTH1lJCtgb3MuPk8zZ3hvSF54eGdTU0lWTEV8dnRibipxan17OD99NXBWV1I1OGE0fD5OYm9bdm4wXmosKG92LEdnfE1ldS8+VUolUEkzTT4mbXZzbXY6PT8yIXIuNkpadCVyRFF0ZUxKWzZDZGksMipDZCwhWlNu''@;'; put 'put ''U2ojRGFEND93MWIuTk5MNS58V0RNZlBNZ25ib2lFXjpkSVdBbj5fZixCQEUqMjk/NygpcnpoVlFjT0NBNj1lTEYmbXlOTkY9SnxxciU3IXtjSH1Kb2pPYywqUjo+bCFqN0JkbHFzMG1PKXBUb1E1JHlGQl5Ib0pCeFVbKEZrdDlTSFQoOSNWQHo4SSFJeWw5MklvNkZHYFU1UGlWL1ArcSR9SF5o''@;'; put 'put ''OTVCakc0NnI+M1kuV29OL2A6azhOfHZTS1ZLPiY+dE00OWMkJEkkM0w1Y0s/Pjd6Wzw8IlhGQG8vIT14TW99b0t3YTxFNVRSQV8jdkZeMHlhNVdkd0FAfnJGfW9rTHh2SVBGfkxEZ1RKPzNrVmZzU1ZHRlokYy9JJiZKJUVsP3BtK1VeSmlyWFJQZHhZXXt6S2B6PWRpbGVzQmNXRWIxdHgmOzVo''@;'; put 'put ''I2ExfjJNa045MiEqZTZsLiZGai5BKyxTakA/YCxYbXohZE5MJip8W3Y0ZElAe3djZz4oQXgybVBoUjhnIiNEZVo4UFZAbFIqKUYiLjA2YVV3MX5DRSpTQjByUUplXXc0OU5vdnhybFdLYExqIkc1QT01fk1AWj52RyRKSEBzNWI+cFI7ejwlKV5EVm9Cc2preD1JVUcoeEVRVHd7d3RBPVNfXXFt''@;'; put 'put ''JXdTVXViVUsweEB1c1o0XzN8dEZdc1J2JHVnXTs3eyNYQG13fmNhMkpuJCImIUVyTilhcmojR15sTGVURHl4Qywxc3I/MSZ0aWZ4fGsoRlNjc2l4QklVdWVYbjldakEpe2pHWHY7Z2BsKXtVfmF9X3I5RixCMS4mQnJaVlAuU34/O19zRysxM3pbVkUkbmdIZXdhM34xXmQub19lZVAjJSVmV0t2''@;'; put 'put ''eCVGJm96TjRtWW88NnBVR3VLdmMxWzhUQF8vdy9VaW90RUhDdS5wSWopan4oZXxoKU98IShDOU46I2dHRUUxNEokSjUjeiNVdW45MGRMUlZ6RmgkeFF0L2koeVlvUUohO24yc0EsdXk/IjM/bjIqWjAkYy5ZfjpxIzRTLmBCPiowIWhgUjlZd2tebSFtRyliXzF7NU11PFMzfEUlajE5ZFNvVzVN''@;'; put 'put ''JFpvUGtFZ2hbcTRedWRzRyE/cWE9Z1NdYl49cWUzTjdNIUhxajg0IUlMUyZoYWw4ZCNAeyQoKD80VUspJV9CYzRsRDhhNlVpVkBse1kkR2wlSlcjZWxLcWMqTz0xfEdZPXwyI2NeS3FzY09FV2c8JGlAZj1DUV5bRDlxSXchMzBsRmYmNHFTUyQ8LDw9cU5HSkhPYil8fEFlVlMoTVg2fj43MT0z''@;'; put 'put ''b1ZMPWtFIV8pMmJ1fEhiLCtLWkxjdj52WXRrQG0+NWpmXWN9L2VNdX1fdnMka3I3cGEhJHI7TDJNPzlsVHxqaH45TjZLUyEraH5MJHFNN3hfSHxBQUM5cVtaUS9iaWFSLlIjUCY/T1UrKDJ4VUVDcG98YDpuQ0dTWEpKSSpNcjt7UGFrNnE9TU9ld0BaZkw2cHpSWF5dLEAjTXg6ZihBKzIvMCla''@;'; put 'put ''LyNZVS5jP0xwY2poR2tvZF9BS3IvZzVVQ1MoIWclTG41fVU6PCZUQnI9PSUoUSl7NyxFR3VrLFlNajA0KCFGYXVVZVsiP2gxOjAsdS5PfHtiIWNxeVdOUXs5P2x9OTclKDFnel9jM15tSlgqS1trVywzIlcwKXRKPWhiZHROOiohPU5rKWZ9bnpWODNUTl4ydkN0IWJKN0J7MFh7ZVspfmdsLkNs''@;'; put 'put ''YUdVcWVET1cpUmdqb3BwbjpHRVcjZy9RSXpgXj0kdjNDRXUuWSp0XiZdZnJSY1A7MF0kWDM7ODVPYCg2Z1NPVlopd309eHtZQT1ZQm85NiRFKDNzZnxWOD1sVipIQSU9MDAyaDFwXj8uX2ZgUWUiX0ZQVS9oSjchVSFPcElYciFeKnt1eC5wK18vPTF5KjpGITYzJD1GJiNnQFdCRmZfIk14OWgv''@;'; put 'put ''ejxnIStAPV09VjY6fGNzKml4ZWQ3XU0yRmIlYXtqTjNhJllDJDtLVH1We1JsX0Q0X2E+XjtLQ2JSYU5HZSI9Q3d4ZnE/SXQhbWF+KldVcVhfPW94ajEzfHVfYk07RTRiNU8sRkdhXiZFbnYqYk5eLEVURjM0MyNlbG9Zb1MiRio4S2w5TXgoRywraiNvVXJFMzdMJW5PNkkpX2F+dXoiVWRnTSpW''@;'; put 'put ''RDd5UG1iSGJfRHFCYSpucjpVR3R6NyVDQFZiSz8jQGd7MSpIQmkxRlQ/IXd0flomRkhuRUZCMjMoQFBMfE4vb0g0PEN7PyREQChxLEw+RDZKTSt5R2F0Qy8jczIwV0BzOSR4LzBXKT9uaFEkPi8iJk9OVyxPT0ckc1ZRKzVMLkIwSklNNDNMcGMvOVBLdSI2dHgpPmk/R2giP0BSd3Z3SSJQLmlD''@;'; put 'put ''UnwvMWs6WVEpeCVwV0ZDfUk7bXNGXjliWmo1MUIsTndiJDFeIWI9SiV+QXMoXXZJald2IT5IY0xQeCtrRyppPTgobU86RDhRUWtETCxOSHB8SksiUjRtUlZjYl5BLHl0IV9LV2RuOzVkJDsjJHlZM0hNSVl1I1psfj1jYThjIyN4dExGYjduKmcpOUNKRnE6UXR7U2ljNT1vX3w7SjlhRnhAO0dT''@;'; put 'put ''d21pbShSLEVHLDQlOTN7Zzl7YnFYZXxZMjlpVSNILFVLOyZscl8hKFpVeTUzQ0V1ck56VS5zangvNHheWlAkUn5RfTYsZ3N+Tm5MMlJESlYiInFScGhAQiYuaSVIfVg7TFU8ST0+PzkoYTh5Uyt5Rmx4RSJuaEVtWlJsIjVadylQU3poaVN6P35tPHQyV0IvfnYoeXtyby4rY2BbQV8rM1MqTSZX''@;'; put 'put ''K1BYWjdjZUJIci9FbDkjPVBBfmUjSj0oIzoiK2soIiElVTVWMFlkYG8ybEB6VilgJUYrODZCZDFOIWtbczMpVUsvcWRRZXNbS3BhW2QhSTpkV3pWcHpUYjRtTkdJPT05UDZvUitUeU5+Yl5oVkJIKkNBel5VUEF9LDh5aUx5Rn51TW83MXF9d1Awd1EjdmJqOyt5NytPYGptL3k7MEVZLkltWnpy''@;'; put 'put ''Yj1fVWVefC5KNmxAOGsjYll7cjtsQGp2I0ZnL2xSQCE/ZFQ7aVBvTXwhKDtyVnloO1p1bSFyLy80PWpMQk10dUAjY1NpdVlrK3FKKk5XfTRLemddUF9INFg3ZF5TY0V4UXoiYWAxe19pKzpRRmR2cXxEbit9WC44PmZbd0lrPVBFU0BZZExPIVlmVkJVfVl8MF9Tb3JgcHdSWWZiWChrVENScGgh''@;'; put 'put ''amc1dX1FJUlbd0xwTzdoWVduMiVOZyxjLGcxM28qNTQ1W0NgOlZUREMpamN1NyQucUZzYF5RLG5UPF1yQHZwJWokR0JffEl4VmJMO0w0KFBNOyFTQGk7IkxfOUJVWnptQmhlNjtUOUR0Jk1Zc2lNSGcqTUJZbz9pXXl0azl0W3FeYXdeP3VEcFRybTdZbXNDIngwcGFtcz9FL2ZqOjFnci4wXiQv''@;'; put 'put ''JC5qS2koVTZ7cShTVE8jI1osejk9MntZZDg3Zj95MlM2enpzcDs2VVJlUHAyZVlmOCs9Sk1dWS4xbjpMaXhgO3pjOUE/Q2VeXVpPKTtPTmF4TH56dkZWMVdUVTlda0Z9fCMrflN+fHBidEN0WUdUWHowSXB7LmcvUDlWR2YyW3NVRE4lbywoVk5UeF41Y2d9PHM9LCRxPy9weSZvYjJjamFVJS9f''@;'; put 'put ''bDckL3Q/bHtKa0dOY3tFRXkzaXNrTHd9KW96UEdEW3g6PDJFWElkNU1pVjxeT0VOPVhCOSgwJHpfV1opT1BEZVleKUowZWU5TS53cltLalN4YFo2K2xROFkrUWpqMjJyZU89L3wsSlIvPCxjN3o0KkJ4JX5UKDRhX1QkITQrQHJURiYkRWxVWXh4cGw6YChhI10xKmZ+Lzk9MzV3TioidFtWa2RJ''@;'; put 'put ''dih4Rz5AKXB+b3lndlZTcVVxIzpySjNKP28iPS5oTVohSjl+L0pVR0FlUCo6QypaZ0xUfjh7L0o1TkZtNGttaVFpKUVuVCpbPmY6YyU4UHlNQyV5YiYuSixmJS9gfVVKRXorRyx6Si5dekUodzJscX1uYmgqVHQ0RS5iS1VXc2B9PSV2dS46LjNLTUkjb2Q1LFJHPFZ8PFZOLiYlPiFyeyViQSU3''@;'; put 'put ''PklLdW0+Wis/WVI4UllPaXtVNWdjTFRJaCtmQ2smdXlxWThUZHBMYX1sZ2JhMkpgMCl8JVJLbzZXdiZBPUQrOFM2RGx7Yi4kZyJARGJKUnB7OCk0Y0t5aD9YcjRfaC9gOl5aOyReM0FrdEtAMjhzRiV2XSNhY1RZKFheWXF1NUwjK2dLekN5X0shW01SIzNuJEJye1NjLjQzWyZ7MD8/OFRNZFk1''@;'; put 'put ''MzV7eGVIQmRscFtVczpmd280SWFwalt0dD5jNzBqNWAsfmorVXN6MWM5PUoqIjciQD4wTDdZJi9FQW9uT2N6Zml6SkVkUiEkNUVIdWJvNUQ9MC4xa3s/NUhealMxNTVGR0VJTDJAUj16WnNNQWJ5IzReYjZIWlssYEFZSzlqVWdjRF8mckM7YmRYZlM2ZTY9R2UwPSNVWURnSXZ3am06bUtpLlhU''@;'; put 'put ''ZlA7MVUzYCM4N2VRZkNZIXBwTEprVVFjWEM2a3tqR30hSGteOzh0Sk9ieXZ1cEdvLlJ3eVdOb3hIejtsNT14dSFBalROOC8+Iz1qZCxrTUFyWVVRaDlnaSZxWVAmI2VjX1U9dSQiVHkwdGhCKTMqTkw6L3E4LnZFdFVuTl44bGJ0QSIscnFzTXFiZT5LWnA4RDxzJDdZbTtMOC59TXc5IyFtVjVW''@;'; put 'put ''WUNJU0FiQ2NHZ2ZbRFRZVyFQLnBPZlNjSTB+R0NtInh9NV4kR2ZRSVUwayVmeFE0P2NSJDg5djdxIjEwfj0hLHVhJSNoaXNDIT5EI18rY1pHdm5vM3VFMkBFKDlGaHVPLGVnc31TWSZdYyshKHthO1pMQCVdVktPT3pMU2tKWVNdJXAhQV13MyZqQkBXbzhZKGQ1OyI1T3RUayU0Q2RtVEczM1dB''@;'; put 'put ''dCIreGdbPzYpOFcwTl9xfHBXMGY2UHZzWWlvIzxRNjB6ZDYvdz1CL2lbcD1JO2xRX1NqNlRRMldCKm1EJV1Tbmg6bHxtSXFKI0kuUnwvUCZdSi8zIVtnKH1bQyVXdSgweGQ0MiUoTUA1aThdYUFtfk89Vih6JXokKEwmWWpsSTNYSjhuK2c8TEVGRVdoV2NVdlFBJk0pdVIzbTA5OlNRPCR9a2s0''@;'; put 'put ''L2siWDlbUXdbV2QuSV4kVW49dCwxR1NIR3F+bihfeFNyVUB+ZWN1SWIlIVA2NGRlYF1xTHcmRixUSmpOW2MvalJpVz1qPGYpcGhzIWgyQUowRW9iZEooXkRUfktVUVYpbnAifklwU1YzfGZUT1J8PEI3LHB7WFRnXk9Ed35yKVRdK008WjlPcz1oSVB7RVNnRzwhMl9YSkR7elM4KVo6emImbXwq''@;'; put 'put ''MXRxV3JaSnpPPztaTXdMYTRuLzVqSzRSN3RDdnMhNWRHKFZbZlhSQ1cjNSJPPyx2b3BpRGt0eTk4IilYeG9wLF8+SFNLdTxxen5ZVjFUJjouY1V7WzBGVTokflh3LFphMS5ec0FqPGkqSkhxPzdjfUVWemJDXjd5UTNqRiVjITs5eG9sYCxyJjVlbjk0TUQzdWJEZzVYM1tGX3I+a0N8Wj1WWH1z''@;'; put 'put ''PV1IcnYoT1FBPjRiXmEofCpbPGF+QU9bQV0hJjFMN3VQQyxmSTMsTylTLGdzNS51ZTcmNj1fUlZgZitKIltOYzFkMHtIOFRIZVNHcEhVVWMoUCI6WVlFZENeaUZwJDUqeVYwWlJeUTpjfHZ4Q1NZNklFSEt5JlFTN09+XVJPWFZpWFU9ZjFMMXdPcllOOU8lMHUvTX4/Ink1YmwpW11NPGpSaWFq''@;'; put 'put ''WXQqKlkkWDZbcG1MSEN3L1NTb2g2Z0VuIkFjVXdxZ1h2N2JAbmNWcmVEYCllSFZganRMck9vKm1saldAUVdheDRsaiVVaVN5d2hCOXg0SExLUnlzKWgwW1gyWkhkblt1bT9aR0BtcG47MlteLF1fJiokMT1rfkEjKjJAVGVFZm5jRmt2P0VTK3djRjFvQk4vQEslZChxY3dOQT9lZEpDfEVqbVZ0''@;'; put 'put ''JFo8NzteUShoNlM6N2ZRYklebkB4ME1rNGN9PVtPZXxFKkpbUSFjK3Eja01jdE9KfW5PTiN7Z3pLVTdkVllzbzYkJCguNSw8SCRBYDhDU3MvZHFOMTdDU2guWWlvRExnKmdlNUUwa3NIZGo3d3dYYkU6KS84dylBXjU8SmZDYGQxQ19+dnxLPHxhKVFkMUpnOTZ0Wjw/I3ZxNEJEVlJ9KVkyQl0j''@;'; put 'put ''I29dYndecTksb2NYcGA3XnE+d25zOWxhU1JuOFdiPDQ7d3NtUGZhQTU7e0lyJDFBL0daK3Q7YHNVaD9aaWYrOUBOVEloKUhjdD16YjE9OCxXdEJLZzJ5KCpyKT9YYHpEWGdBXVg2SkpmVT0/W2VxbTpHWUdXYmRFPVE4eUswbXhiQTc0JXxQTlVdfHxbZC5ufTFCPUs1eUVHITF+XXEqZzxEVEhp''@;'; put 'put ''Y3E+amkzUnZ9Ky4rQlNaNnJRRV48PDoyUjhvRHA+NkNAWm1nRX1+XnlubFl2KCpnQj9uPyEqK3hAbEBUTmN6KzAqMUopK000ZEw9XTcsekVrbCxkWyxUMFZXQ1Y2X0IpI2x0QlokIVZxV0dQS19hWFpHSEdMeEx9cWxeJCQrMDA7KWR0KEpXd3NEZjVvXyQ8UlZ5cEhFY3U3QjRvcUJrZEMsRGJ3''@;'; put 'put ''Wkt2NkRSZEtgKGgqPls0MEVhYXgwJmlVQzE3bUM3eFQ5QmliSlg+SyZ1QDFrK3g6NilRRztYYyp3NSg9dVA7WDooJj1uImAjcFdiRkkkUj86PGxdUUFKTDhofDQjZExIOlhrVFBzKzFmTT0saS8kYD10UzROIXBoUmhGMEk9K1QrMEcoeEF4IlpsIzNlX3ozZUZJKz5DYWcxeCYvLnk4OHxxRnlT''@;'; put 'put ''amBELiMvTDFoKmYoQWk7c040QS4hWyVpQyF7dyopUz5aP35DRHU0KWMxYCNlQUBNUk9mSVcmaFJYKGxrUz45RzBUPUtPK3EmfFIwdmdNbVFzMjh3dmw4eXwzdXclaHdiLHNddCFAYnpPaGxnWn43VF8lSkQybzkjfGR4WGVxbmUlWllEeU46W1M8K0hWUVIrVFVOLH5LZiFIfEpCeWxgaXY9XjFq''@;'; put 'put ''aTVHVFFHZD14InhWSEBhUFtXbylJVHVFZlV3ZTVSaktGdGVjSHBYN3MqQ3c/UlhBb1NkSitheGQ0e1tSYCRvQ3QoNU4+bClINFJHRTByV1pPKi5YIV0qclY1Omp2JmA9aGs2OCo6b3EvMF9CbDJfTiVURnJVaEgwKnZ6KVtZVD1bQnBYJk5uU35RU1p2PnZXPXluQlkxVUxfRyFzV3I/emZ+SSxq''@;'; put 'put ''bkpSYyhrPzshZCF5QS43JVVrTHFwVVkzYiN5Ll4xTkRqcjZlYXFXTXpxPz5RaXhkaUwuYkl2QlopaThyQmtFfS5jR2dPaSZoQW1oRFhrSGEvJU1fK3BJUUxUWHJFTC51XWB6ciUjRUN6dWNdJiszZEJOdlRPRSI8fk1zPFt1UiNDMT4+fUlYWGt7Q1oudEFzMEloREZlTip8RkBYSEl5LGV2UE9Z''@;'; put 'put ''a0picn4rJmwuZEE9eVs7TSRGLjBpImFeOlB7WG1ES0MpUkJkU2ZQQlEjcX1UQXVueCVtITB2bmhPOzsrMCFzZEpwP1lFc29TYWQqWXMuRlBfME8vL3tZSk0lZ0R+KihXTmVeIWIwcW86O1FyI25GIiNdS3c0NixDd3ZCVytjWiMjXUltVzVGYzhXakFGenN6Jih3amxDY20rRkdIS18jZWN4eTFt''@;'; put 'put ''WC4xdjtbQzJBRF1oKXFPJVBpciprfHwvYH4waGJTMHJBIj1PSkt4TzwxenYkWXRURmEpMnhmTHFsTjdKY0Zab3JjKzVGSnpARENGSH5hVChXWV57c0hzVSJOSWNafi9JU0d+eEUwbyRUKllMMDA6a0xbcWRuPCxWXncvKkJGb1l1RDQlNFhjVjUhYWNALndRcGQ+fnJeZzBFZ3xGU1V1YDosdU1k''@;'; put 'put ''JFRGYEl2M3g8VGxTKU1FK00xK0hLbyhpM0tSfjtmXysqOFRdfXBsa25oOW5LbSN4bFJaRTcoaTd7JCk6KFpaKURHY0hpbSVmaF82dUlWLDQ4bUMlbD1EdnpCYmsuc0VUY3RPNy8iZXFsJWUuMDI7QExGbHRbWWokVT1pVlhQdjh5QkxZdVI6V2wvRDQwKXFsSF07fVIxJGJYUmIpKUJBckQvMkNK''@;'; put 'put ''cHlGLGUkIT97Z0F0KGZFfnRIIVcmR3RHOEg1fU06VUxMeiE1JHcpeW5ZNi9SVnd7MShKZXYzQnMwXVkxMSlraktyZW99bHlOfUhoNGBQK3tORWw5Q1Y6YkNOSHhiMVt2TCtPUlQvVXh+a2BsJVFCY05ga3JbNXp+biF7IWxKSkxNTCV2ZFRRLHZrTnFZIyZkKGs3O3g8Y2UyMGBjNG1JPW5FIWp9''@;'; put 'put ''aSNJfDhFYWwyJnZ6fl9KO0ooZDVWWEpRRkYieWVTckBVQjBkbTh+SXs6dEl1L0FZMW9HQFZHckRIckgiUW1mLEI8M3JKdyJyJDVfU0VLTGVYWlIqJEtvam03d0Q7Rkx7aE83WmN9RGdKZFhheGA8dmRiUlJWOEQqWCVyUXB7KSE2N31GbmZCXlA7cylfKms0VTBqfG5jNn5WSFM4RT0kMihaNi5A''@;'; put 'put ''NyQpYmRtcStFN3YlUjJ5anJ+NFBLQEMpQ2lSSTIzPzs5bzh8OEg4WTlZNDFrQXNVNjZYZ3guSCFOTWQ2PWAkMSJhQnkheXx3flZXOjwmPXpOeG9Oeklsc1k7KHY1dHxYUylyZD0va2M/QkIhcGNxUi4rQVJgWyRbZlBZdmx5PyNQZCN1MmsiTkNbMlY5XlFefjFFKSwuY30hTip4QVspdk8/LDo/''@;'; put 'put ''WGt+JERkQStiZnZ6VHcqK0ZOKEpxLyF2bz9pWD03MURNTiVZXl58MWgmY2R5M1leMiN5aDNFLEg9SXJBOmVWQyV9PXgjQCttVkt0Sl5+PEFZSE9PJiV3O24uNmxIcDdJbU1vOnYiX01weEg0aiw6REZIZzI2ZFtZL1R1ZFpfNEF4aEI5NCEwImxgPzVESFRwLDJVbVJXLmovJVRNSkZEWjVGb3Vl''@;'; put 'put ''YiV9eiJNTzhJM310bTJhMy5LaXJIWW4qT2J1P1hbKyxnPD0hLFdpbkpxVS50QmkuI1s2RyhlYVpqfTJnVXU0NTU9SXYhKmlyPUgzT05gRTAqc0IsL240THtWNkt9e18kI29URDdvXzE/PlZvS2ZGYS5HL147L3N3OjZgIylybEhROjU/TXJaT0NOMDlGOFJiR0R4JW49Nn0jLjpEYXx6a3pSQD9j''@;'; put 'put ''ZERJaH51Z3cybzZUN1JxQilaVS9LUi9rbSVPIU84clR0S1o9WipiK1RtZEBnV3l3Yi88WUhtbDVON2diNSxTSixJc2xxKmhEY0RAOjUxdVVuLmRQYXk5cn1rNCpXbFB5bTYlPEo+eUNQK05edGFxJEVPcT1EIjM9e1lKUUU4c3ElYTFTNGJaWVJJSmpoNEgyJk1WT3hPRDYoSCkiJTgyR1lGbT1g''@;'; put 'put ''TyxzU3o7VXsoQndWU3NoSSg/QXxzQUZDPjFiJkU/b0owKEVFel1UXWhoOy4oV2NORjYxVTV5WSE2PylmeEI9O0lUSHxWUCE5V155b2MieTNMdWJnbSlOXyREVU9HPm9uOSZKL2hhaGsjbVg0aV0hRCszNH10TShYWkkvRGkuW1g4RzwuckZSc2tQJE5Ybj5OTW4vT3VkYktfK1piVmNSNCIhNT9O''@;'; put 'put ''aTluOnNvVkouMiMlUkgzSkxRT3wkJSpgRXZsPFJTKmIqXiJFMntVQ3BkOyJBUGFsQU9uUFchVGkvc0tdZ2Epcz47UWBLJE1LZFVIYnJfZjR1KU9wJVlvVjpzNyREbU1lVCtwMzVEaS47YSlTc31USUMzWzI1b0l6L0pLVzl+KD1dfH1VKGY5U300NDA/WzUvNkozQFFbfEM3XyI3OGU6dEhDbTJv''@;'; put 'put ''K2dPPSpiK0JkOSEhYj9uUXUwXkNrcnhobENWNFM2YmkqbGc+dltyaiRWIVBld1NAKmIzZkM8IlNYO05PQiFxTGhiVnxhWzlRaVg0JWVreHpNO15qbXdabVFRWlRMWG81ZHlyPywwUnRrPFEpIzNlXVMyZVs7YCxLMWBCPHpuKF57SzNDZjloWjIwRj9hPmVSRXRpaytCeEdwcHwkc1RrXnVEb29G''@;'; put 'put ''REFvIWVEYW5+bFtvY0w0OEBCcUJFWVEhbG1+TD13SGFUNHxsaUE8KWYzUiN3NGUvQCFsLGZJfCYwbnw5XiIvdnw9LEM7Qi5qdl0oRlJYOm56JSE4ImgjPU12UDxaTmVwcCg1Wjc3QmRkO0BjNHxUUyhabUs8aTEpdDxVOHMwXjB1N05mX354MSk/Qn08NUZ8SUp9JV9eeVF+STh4PXJKOywmLytE''@;'; put 'put ''LitUO2xqLyRGalJyYlh2fmlbLmB2ZmZLaE13b2BSeF9bI0NVOW0seWlmbCQjRDE6UzdIel5pPm5bakVULnFNVzssLExVRXBYZURZOF59aXA7ZWpRSFdMK3JAQkY1fjd9WTAsfW9XZ3hVXk1re1daKk1qOW96JXBTPDw7RXtgNEV8TVVuI14pb1ZkVkd2Sj5+Uk5iUTZsUUJPfHlPQEBFPDk4K1pe''@;'; put 'put ''JVokenBCcz9DajJjUkFSZSNmVVhraTdgIUsxeU96Ul0vZ155UXtVSU8xa1FzUlt9T3QuIltpNyg1N1ovOEFFPXcoaklEPGFYbEZRLElaR3hPLFNdIy4/RHdZZ2MxWmlmTC9mOyU4OjArNlZSN2MlYm5+PCtXbyZFPnY/LFV9Rm9TOTN4OCVGckl8PlpFM2N7bkhCRW8wcjIjP240MGA2WEcyNXIx''@;'; put 'put ''alZsdV9YJWxSbip0KW8zdkU7d21yPSYjS09SYEsyPUY1TGMqa1I0eGcxQk43Yyl5VTx4X2s9RlcoPENoTjpHJFd7K0NmaUx3b2NTS3MxRnFRT2NVKjE3WDlTfWhvVF5tOjd0I2BxL1k4Zys3VUBTMSpVYjlZbC5NJjRgQF5GbSpQUWdlelpsUyRNWj58b0ZfJXl+ZmRlVTFhTj9ocmU3K2xvXldT''@;'; put 'put ''d1VPRj1vRXNSU0A5S0ArdSk/PnQhVEcmZmRhcCpvYTd4NklUJmR2UCJoPVo1eHl6LlpLOCx9UDB+X2F8YCE3LnI7KlE9KmksMXRdb0k2ZVIiPGtoemZpTn1NW1oqU2BGe24odUN5S0RifWwpckN2LmdESjtOQ3ZGa2kyISh2IShZRTZkWEhreWhHZSQ+KnBTWGp4SUpBKUxgeCVGRWJKMUNfdDRr''@;'; put 'put ''ZitLaTxvUnRGIj13OV1MUiZfanRrMkZ8V3d0R2B7ZnM2Q3EkXnkmQ21iXyw8VXNZU0BCZ11iQFdRXXZqM2ttbCtAMT1FPVVJITZZVnBAT3B3WSxyI2pERlF7TSs3KE0rMGdzaiJNSCkySFsjal92SXY7UGJqX0pLcSR7JT46eWlmSjYhWC9IRXIvP3grYX59RUcmfE59OTQiOiImaylRdV9NX0Za''@;'; put 'put ''KXNIIVk5LkxVXjBxOlRYU0J4TD5WV3RtQjhnQipCIXg8ISQ4YWhhbWt6WWBKOyRoRWphUShKLzR2d3dnI2opSjo+XVhjXTI9X1VxUH55VjFsVDFscD9RQlFtRnhZPHdpK1VVTFd5L2RaWTpiUUN5NEs2eEQ8bD06fTZuRH19UVM+SHM0Xyp3Tyk0fm4jblVaTm5Me3J+Qj8kMHMhaFYhc1JNUS5m''@;'; put 'put ''LlJ7S2IjTVpvYFU+ODY5KjJVMyhCdDEvOWJJN0R1eEBaOFJdTlA6fX1gL1dnVS5MZCNPezNAcE0qRT0vRFdNQERTIjYhU1QzWjxUdUFYS1VUeWQ8K1hbYnFQfCY6bTU5TjMsVWdAUil2KzB5JF5XOTdwdVhWLltAeDF7eDQ6O0hhd1ZzbE5yW05HQzYocjB3cj0jNzVgQ08rT1lhUTBSbWI1MWh3''@;'; put 'put ''ZXlafTo2XjRfNSF7YDM6ekxyMWNWNnN5fnd1eEIoXnYsJjcwP2AuY3pIMFc2fkUhaGdMcC9FLFk/cVcjQztHWkNmU2l0ZGwyXmxRJk06ZkU2dkgkVUR6L0VYWCJSTyFaR093RHw9b0FBezl9VkczLH05bS9oLCUyXSlKM1VGJGZzWFVEL1k1MDFGX0N6eHBZYj10M1N8TTptaEdEW0FiJG4yM15z''@;'; put 'put ''UUQzYiF8QDQybHd0c0NRK1NKVkI3KSx1ZnJSM2N5Ilp7emAwSylBPERUOzVdVlErdiRFT3JQcEYiT3V0MTdibUpYP0NsUlNHVikxKCQ1IV0qTlA5JXk+Si8xQCg7UmxHK10/fS9ud1NXLDc0QVEwUmk7dzVUWEsmQVFTVlBbfUpLP2Vhd3JrYm9OLFYseW9qfCNIcTdaaFAyWE5oYXcwT1AyR0Ix''@;'; put 'put ''WH1mUSpLZHRYeGM8RS8kQy40KSxzVilCbXhvYHNWU1I3Wyt6WWpmTEcmbyN5YXU3eFoxaUE7WXIzYTRbRndeS2RGbkRqbjBCeCZvVm9gfG1PUFZJKTluMzlxdXZ1STomW2p7aGxDSH4mcmFMTHJAOSs9X0A7UkAiM0VIcEx2eFZxeiV2b3UybSlrO1pWMTEzUEcuRSlDWkopJnlJTSomI280SW5w''@;'; put 'put ''Mjklc3ZdVyhJRWZoWWYwPnEjeXZVbCZseV5pJlBDS0B9Mio1SSxxTSJxMm9dZnkhLyRrdUVEU3Q9PSExVFVMZEJldzoweFhObCUlUHxGN355Vk5aMEd9TlQwZjF8Y1cyP0h8TXwjJTtBPWhPYERFXUNqb2JZRVZFTGkxUUF3QHFQKHl4W0c6UkQ5TTpySVAlJChiPissUHFwY0F9Y2A3L0pQeVQr''@;'; put 'put ''Z3UjX1JgckcqP1YiTjlGYGBteCUvVz9GSChBaWQ8NX4xNyMxQEZ2dzY5cFsicjMqXUE/cCI2ZTlSYT5waThaJG9YVi83OEwzS31lQDNQSioqUzwvW3dfWHteUXVlOjBYeT5fdX0/UFolKl1WUnFKVng4eERhXX49LEFNUDNoLDxwbXVPKV4jKn5JYEI+Tihmd1l9aHExOilwdCsuV1A3O21uTmMk''@;'; put 'put ''KUY9ekg3O0Q4XWt7fi5sbG5KRD18eEdrXVM2OmRQeWJjYjpVS0hgfmVxOD5wMm8qejU+aiJwWUo0WlR8dTxgMTxtNC83WDg0Py5ISCE5NGoiP3ZQRyVRK0BqakZKNWk8XzFuQjgyfVV3OVJxTGVTXkxPbzZfZGBeWVdkOyR6cn5XOnRnQjpvTU9OdU09V01CZlpsaFAhTzFjOyhWanZMamchVkpj''@;'; put 'put ''QnR+PXg0P1h3TiVzR0BHYlVYNCNtI3FpSWZ5Oj9EVTtXKiVUWll8UyYxSkxDLEhPfEhIQH4zIipUInhAVCgmMmM1VFVYP3ojKU8pJV4wbHFDM1VDMCNDMSxVI1kzaEhvL3owMiRZVDkoK2ZnZiR+TmFbRWJKKWM1RDJ8OT82OHBNaXMzOTlvSXVpMUdwZFYqaXtQV20xc1I7YkV7VjVDO2Fvc0dG''@;'; put 'put ''RyhfIzx8IUJ0ODhEaGxMOkJ6YWZLazk9JWBdPHNXfVZPPyZAdT8sQHM1P1MxYWheaF94Ny8rM1c+U2c2XSZIT0puMkYzVTM0dUosb0daYGx2XihELExGV0ZUek9BNjVrcWp5TnJhX2p+Wy5fOSIzZnsjNyxaUiVeY094eTtARz0kWighWFpERWBQKigvNm5DPzlNU1Z0ZDd7LD16N1NWbX5GbmJ5''@;'; put 'put ''RH5XOURLPnZDaXFIcjMiTSg4MWddXilKd0MrZWdRaEpRYmh2WFpOaktkQipHQzJdKXRjRTJbM2V6P0hjUWo+K087YlV9P1RKbnZfLG09NUlNRWpGXm4lWltJSVgwZWxQViFwajk6UEgwMEpZLix7QDx5UE5uMTdwPjhAUT84VEB8cnxpezBsYnVzPDgxRDNdW1tEUiZtXUkxQD1tPUNTc0VwKXh4''@;'; put 'put ''TyM0YiFhV3JUPTc7dyZqJVdvPkVNSl13U2g8UFpFK0ZaKH1acnBxcjNyYDY1bG5+cjFJNDNtNEo+Q2U6blFZdWI6fGIrVHZXT3w2Lj91Y2Eic3tuVGF3dFJ+PEZGKzZecVkmYTBCdUFBQ31jNHZ2KnVfIV03KW5Na0c7eGcuR0wzRkM9Pj9UVVYzayNwXjZleGVFP345WW0hPVJeUnEvWSVzbCVL''@;'; put 'put ''ZldQb0BORjojVUpOQEJ3ZTwkJj1bImouZjpAS1MqdWg5WVlPRjIkbiRvJG44MyV+RSQ9I14wQEN6bFlNMHVEND4jIkkxL2VDb2pubEEmPE9uLklkc1tsRno+Y0huISpwR1k5fmFvdVA4cCtlMnhReFYzY3VaZkgxdTElL0ZqQzhIRFNdanZFOHxZd1M9KUVlP3tLU31lcm1TM0RKUTlAaDoleltA''@;'; put 'put ''MWx+YFMse0hEfl5rfCY7LFlpR0tOT31WaXJhWiw4IzEuYStfQyskTjZKNyQ7UnM3LllmT0AjNnx8RTVoMmJiTTdmPCRTOHU1cHFBPF0lSCkrSVdLUVRmUGRwQ05SOTdkZEdvLGYxIUIrbCFyVyVeOSlxYTZgLzg4YEVIWE1NLjJCbTNzN3EuQHgmc2l9JXJ5PC59Kj9qVk1iVUByKXMifk0mKlJ1''@;'; put 'put ''PEZyOkJjI2trdmpVS1VQKkgqNT0xX2wifHB+eENnQE0sfW5VaWshbmVYcCRwfjU8bHxLImo2cF41dDo9dzVMQ1dWNjVPZ1dhUEIkdEMjUH1Lej1JUF4pNHEsZiJlKiFnSjthZ1puUVVFVUtkNFc2MTBMSEshSDcucjpTWGZ9fEc1MW0kIXQ2dU1VdFA4KThaalJzS3Q7QT1dZyFgX3c3QTwkIVlP''@;'; put 'put ''JE9AZkk6dnlrOyVZYUcvKV5GdD1wPHNnM3czUWg3YHRiWGRjYX0lKl80UH50K1V5PWciQlEjWlNTM0w5S3dzTTlDOWd0UDRuW19qSTg2NCtjZE57YCl0WWF2NENjekpvJnMldVJZOEZrUGU/VktQRTBxVlpxXnMyLCVOdUglQ2VdUElQeXh+WDNJTkd0am5KaihGUi9Gb3s5cHpxUGo4WXIyKDt+''@;'; put 'put ''MnpVMnNsejl7bl5UYHI8dWFBQ2kuIUZxK0ZEY0pQUj1ofk5nSyVWdi9RI2ZEIWJifVRnJGBOYTtYIXRRTTQpI01XOFZsZG1SMjVNZGswU05hKzwyVDx6JGpKZk9aOi97OHY8YTwlVS5ZeU4zZDtgVyshY313IktXfEVTKXQkYUY4NWdrVWwqW0R2a0BgNCk5VkhPUSYjRz0zUk1WT0Vze0o9VThI''@;'; put 'put ''JTdTU1oqVkRXISUpIkZ1VHl0Pi9XQj9JMUkmZns1T3ZZOlNuZXxyd0k2TWBpKnZkRkpmJTpJPVFHN1NjRn4pYnRPcS5nLkEvY0ooQWdNLH0/W3lRLkFycm0yK2xTbzMkXWNzOWxqLG1EaVVkYiYldnwwOVglZXNwK14xODhDd1JsN3A+az8oazAxa0FsWm48YE0xNV1UYyNuWm8mWHYrPjx8ZnV5''@;'; put 'put ''VUFMSiQpWHoraiVWUz5kJSV4YFVFRVo9aTdgdVpuJVpYO3V+JWpUK0oiV31hJWgsTX5aLld3PEpqKVtfeV1YWlM6Y2FvKyU1QXQue0VWVTJgV3Z6PzBhcHgyIXwmclAlfjRIQHNLcyxpWWN9N31dXkUqMnJDfEtXbHtIPjNMaiJXUDVEOWBeaD5NPm1US051RmtQd0cjTVg4YEs8QjEkTFhRWFBF''@;'; put 'put ''MjZ1VXVWZUxNV1A3PEN5LlpsWyFwanJRemNmUSJPVkNWPDNlYVYzWEppXyNAeDZJW0ZvJDxUNmJvQmRoJUYhI3psbjQ0cj9JXl1SV2RRT0slJnxbeGdqQlh1S0I4eXxZWTRxPkRFR3dnRlgpfDldOU09U2shJnhTRHcrL2ZxbnhUJkxtRVY2JCwveCxXRVR9OW5hXWUqQls0RiwzPChJRCwzbUFI''@;'; put 'put ''VClWP1NxQCRFNiN9VSh6dFFhbTx2dUtSZkZBYURZRzA1emA4SG9tfU1FfHU2W1Bkaj0kbyQxRjUpRzdJaFRTeXZKVmIofU9iTGUvMnc7T3ZSb0MkMV1LJFU1P1hrPSQxPmh0eXY2YU8mPUA8JDEoUl5Dcmd8JWB5alBBS2hfM25KSFtRYVFycXdiMW0lYjtBaHt1ZzVKV3BQenlTJj1CP0J7ckle''@;'; put 'put ''SEdzfHltdWI5amFEfF9iRCpOc3FzKjdYUX0xTGo3TWlDUnhrOm57SEZ1ZlpLRSIwazU7Lj5HfShocXlxWyQpSDIlR1VIenlxTGFXLHhbOjBzN2diYHEqI3Z6eV5NXjJ5MENJdT09KzRxM0A2cCVjZ3l+cztvYUBSbyhOZ3h0M1k9I2FgaXA9TVhRJEZVUjBdblk2cCZCNTs4Pl9+TEdPNilkUEo3''@;'; put 'put ''aWdiZC8yNyRVXklENE5IYHZvbjg/PkZuXVc9cVErdiFOM3s3bTt6YVg4YFl7PnFAcGQ1YmVxKTphejlqR2wjK01qWWIraXAyYHdnLmt7a3xaT3FCVEY3XT5ZK2d3S1AjKn44cy9oRnE8b05teSk5RDg4K2NzTH1bdHEydHMuK1IvaHt3TTpKL3tvUmUsS1pxV3RgY11yQmRNVWg7bCs7WVc2P2t3''@;'; put 'put ''bnRvJixqdjRnN0FzXXlyN0IvbE88WSQ6V3YpdUxQPkxFY146TUNATD1bak1pI31DL2lNb2BqPEIsNnxuYHRCa1R1dXBZPHdhekAyRjN6WzJxJFZISmAiYkl5dmJaNEc9ZDlIZyZHRk5zbUtkJiY+LH0uWWJ8PG8xOj1JMCYvcWAsYyFLLnBwMTNUa3FhNDI0MkI7Z3laO2BVZys7OyswamNPcUMo''@;'; put 'put ''Z2B4KVs+IT1LVyJ0TUEwXmU8OEw2JFBqYTN2RV84L303VW48SCxDbVZOQGozdXxYMDNQYXA0YERjK1pdbCxEMGpYRHMybiVvZ3RWRlhKX3NIZnxoRzhpeFIvfC96allHUFF2bVpCWiYqMk8lamU9S3MjfExlRXVOdytOZilGJiJsaF8qfCZJVnpNMjAxayRXTzReSF5xc19ge21oL3NmOiVWWz9Y''@;'; put 'put ''ZG5PaEYyWF9sRlY2YGtZVzpqQltpRmA1R3s1Nk9Tbno+Kzx5dHFgN3l7MmByTnl4Xz0/IyZ+dWI3YEFsJD00XThsan5nJk8iUjJOcH1bfFZtfjtjNSlPO2VwTW8lVV94Li9rIUl+YGtEbkdxQWI4OX5wV3JHeHxmLnFXMWR1eGpvNXZVSmxvRTBbKXdZaDUkNikzUTVWdEomdHBnUG9bMUU3ZU1o''@;'; put 'put ''aGRUI1UvXndpaXRGYjU1TDgjK2dILGs/c2FPbiQwdVFhZXUhVT1QPj5KR2NhPm0hRVNzUFAoQDw+ZUtbfTNmOTh0ZiYzWy8xa0M8SiFMRDdjU31qTXhBMlNyOjE/XVl6Vz03XTQqTCNvaE9fPC80UUc0L0ZdWE91WzBAUWlHK11ybWhrVm0ldz1VT2Rhay9aa1BLZmE5JV50c2NOZCZYPTF0Unxq''@;'; put 'put ''WmZdMkBbN1d4UVZ+Ry85d0V4ZFdjS19bPDowXllOal4pNlZLPyYjOSlUImxQZnJiN2dZNys3WUVBfkxXRW98OzFheUZHSS9EXy97dnltUzp0XUQ2JClfQzZ3dEE3MiwhQWs4QD9PQ3J6Un5HSjU2Mm5tb2R7UiEpdmUrXj5HTHRSJkhkIlM0d1haIj87Kip5aXphUWJUY1RQUlN6ZClzdGwoaCpk''@;'; put 'put ''WSNpb3pOd3k1QXFfXjJDYVMxZjx3bz0pKlR3b01jRC8oVzY/Uzw9TD02IUJgJCJkYzwqT0dMeSRwTGYmaEFqMHo7VnFWX3Y+JFlbKjQydFFJKl9DazF3RmlXUEBiKUV2KS45IiNWJXwxPmchMmZOSyldZlVkVCIvN2FvMVIpc28vbU9qSDg+fGIpKz57cXpIRXkzUERXelhyRGRySV49LEQqPWF6''@;'; put 'put ''ejsxVEA+cWM7biZBaCY1VFsjVzJzIyRSL10xdkZEK0t+PzFAOWxTfTZEPXg7fW91Li5PQ1FlKyM1MntHfDJFPj1gPUdpUF42Yn4/I3xjNndNaVJGY3ROJit+OmA9ODthKXdVYjpTQTtuMClzcyY0aVRDQDdTcEp1VT89c2k9L0lQK3d2PTx2U2g/VzRoLlMmU2ZWYEp+KXh+Il40KjNMUHxyS09V''@;'; put 'put ''OWEySyhCImp9K35gK3lGRH5OW2IsIUZraGE+RSprOlU7UFM5TzM+RHU3S01MYStKNDhfUitMTWJuWmBTUG1FU3ZmK04oX2xObChUZUJ2Xmp8M1MvNSRZIzJ+b3I1TGo6R1hTUkc1cUs/O0kyeDQ+LE9KfWFSWVYjbi9fQzFGenxYXWsxOGhrbjlnVUo+WTcqUnZseT99bCtsZTBLQSsiXkdOI2ku''@;'; put 'put ''TCkuOiImP09XUHl7Ym4veCQ5LyxiT01keVJ9X0hYc1kqbHBkOX01MFpNX1lINkglckMuQkVreDQrI2kwPmJNfDt9Ln5RUV4jNn4mNX5QYykxeT14PkYvTH5dV05hSEhEaDBhO3N4eShAOklvSFlKPnc6cHJYb0A4ZmFBMjcpZX1NTnpRN308Qlg2R2FaUiZNQnJUMk8lTjxjWWY3WEpmOl84JkpQ''@;'; put 'put ''V19RK3NQbmdXZjlLenpHezdDdVZdZSFSZWhOKFpERFo2KjNuQkRRIU42P1RQfj5dXThZTypjKmtjOjtVIWBLeyRGSmA4KH5DXiUhVT0mZFVSZV9LTSVNVj1zXlEmWiNiTW06NW5beG5zW2B1MkUsdEB1fWRCRyw/KGtJPWtqfm06K21gWmNLck9zLykzUkI+flQmKj43bi9GME5zUyV6ajssYXl9''@;'; put 'put ''Mj11P3MqQ0RHTUg/SGRoJipeLCE8MzQwfTwybix9c1t4byRHQ0ZBdXwuPH16elhTV2dGN19RXiZmNyJwc2V4Rn4kTG8scEp6QzIpajBvIVFYaWhoRkhnTTs2QUEuQz8mcDpnY3piQ2VvM01Bdj5KKFhPcElya1tOVy48Ly9rUFVEW0lUZ3dhSi9tZiYvJW57cDZxaUtGfm48MDdPJVIiVVJ6bllP''@;'; put 'put ''TVEhKXomTnhQaXRxdD9EKmdxNi9DQklENVRMU11oQFRHYTBNWCI5PzdFe2JxRkpWZUFlMz9rfF1zOVFZX0pTPU9TaDNHbGI1MXpOeyosQ3t0dltlISQvZC9PYD1WKVhfaWZtR215UF1CIyQlU0BKemswcXtzVi5EIVVKfWdYOyslKzlqLmQrZDMpfFU8SFdVcTBXNG89dTtGPzlZISNEcVFtK2Y/''@;'; put 'put ''OTBRal5kPCRSe10vUStaVW0vTiJdUUtmVCQiRDN5aj1bWT4+d1JsaGY1JUxHcCwqRUddbEZLKXBgPHJKR0teJllOcjFMPy97Lm03KFlWZEdlI100bC9RK0NJQjdCS0JuWntvPldHRW9bdiRYSzVidEtFYHlROT5AKG9FajlBNGhHMnlJVFc+dTZmKjptJVZ4bnB7VzE3VG1wYyltWDhofV55bU11''@;'; put 'put ''K2xhMnwxJlpVTVhRVXhTN31qdnYhPGZqIV15PVZGd0xXdlBLK1phOjZgRlZHJERyPWdzWmJrUmtseHZLNUN2O2BHYWNwbl40a3lERzV2O0owI35ZeSFrQXssdUBwVnhhISQ0K0IifnpqQSFnaXFeNzQ8ezhEbitrbDhjIj5FUiV9M0s9aDc8eHM5eCx2O1VVfCpTc25JcW5KcjlsVXcvT3Z5ZG1F''@;'; put 'put ''Inw1azMuKHVVX3kjN3wqNUptc0Z1fkBnIzVWX2RePnVYdXFsKCsxekQzXnZYdSwvc1ttTjk3KnZjRG91QCF6dHI+MH5pd34mZjV3eyNCW0I7elFdbU9lNVk8WFRCOy4qWTI6MGVycHxtMWdFKldOeCgmakFdRFAuQSo2eSk9cThEJHljPyU0TVhPLkJ8czVpSVV+V1lZemRFWmBxKmY/cEtTcy8+''@;'; put 'put ''Z0VEcDZwfFVDXihFUVR7JHF2UUEyPG9PTlFre1A9OGBXdixIajJ3Jm4kfk9YT2dmNGQsRCNjRlk6ZHY4fmZmNyx4bTs5UkVBJC41WSQkIVRVQTZbUX5TdU9EPGIwUi5BYVhpWmZ5LjFWU19DRmx7LD82K2xXNXpecyt6Oi5URiw3aWpfJFIoX0V9cVdDOCZUMjpTZnRiWU9LUSRVSjdZVS8rW3tV''@;'; put 'put ''VkhbP3lBZnEhe0F8OWZYeGhePlJyY1s1Q0V1NSpLR1QjP2EkdHBXOzpnIU1PM11eQGEyVE5fTTRrM3ppSSo1Vjp7cCVzMGo6Mk1KKl9GN2c2ZitMNzNUJEZqblpfaExpXigsS00jfjwrWS83NFV+U0AjcHxRR3dgLDQpQHVQXUs8X3hmdVAkPUxYZzdeInp3bitjXkNCRiR1bHxLRD5XUnwpaT5O''@;'; put 'put ''N1RsbiYqbkRvKUNpR3FRS3Y1PWgyVnxOPjw7ZEUmazJfVCh6ZlVHK1ZkSWlnbUxGU00wJE0xMS4/UUxVZmdFT05yOWVKLkZSLGQlU2B3VCJsR0omLnZeMWh4QmU4K1dqN09nP0JSd0VHKn1DamR5cE1MNyFidDZ8RWQzNT5STSJFIm58KT9CKyF5TjZzalAmYE12dzc9VFtEbD5CSSZhJmpBXiZD''@;'; put 'put ''ZjglQUp9PlI3ZzFRLFZCMCJHQTJybyFRLk9QRyl3QHBVdDU6aiJ5U2c7aWhrRzQsYF1IPiJ0ImI1eDt9IWFCcC9MODFKKyxgdjc1Olg6bThCIl5SMHZte1Q3YVUvKEReNjA3VD84VjooeG9Pc15SJT9jNDYqNzV3MUAwcUEheGhbW3JnIjReSSpzN281QlUxS21UJFMkWm9TYnczLkNtJkgiWkFF''@;'; put 'put ''ZW1sO1lHeUlfcyxnO1UjZCxmPm5xaTtFPmhufGI3clopfS86PTdMfXV0RGU0Y15GOVBKUHBHL2IzaUA8bSN5bTZhZDFlKEt0emFzSWErTzNyXWpHTDFOLj1oWmpjMEwpU3N7ejEhWXE8cyw+WX07aj9KVmNaakZYN2dWfURQam86USExMCRSPFs1KDAjV0YqW0ZwaFd8NDNiPlsoaEt3LEF6b1Jg''@;'; put 'put ''LkAmQHFDP0g1NDpRYXZXKmF2cSZWVnh4cz5ZOUJyUFF8aGwxPFtVc19jeDdZTUk2cilXYF1QYD8+SS9CMXUhQTc0OD8vMCp8eEc+fnVIen0odHdfM0NGWFcucHVzVWBRUlg8Un4xKFU+PSllMz8pQyQ6eiNDTW91cCRkXXYzdnI+cSV7OXdDNF9yOk9uNG13fT80PUxBWkFuc19NLjdgNWo9Ryw5''@;'; put 'put ''SFNmWVR8KGp7NDU8ayF5NCxRJFhjQnI2YEFDSSM0KzlEeERRJDg4JmBFbUpNeTp9V3xTT2UlbmokcWQ7YHlOaERKdGldS1RoPS8meTk+NFlKS1RoeS9zUXdPUClLYFt9KXokPUxHKy9GRn0iaXUvW0B8TUMyX0tNQSY1U016VSVbejVEcyFxKFdTSToxPUdsdzNvYGcpaVU7ajROY0J4fEBEXi4y''@;'; put 'put ''O1IyNVNwdXA+bj5bUWlhVFNYM0tZMCthNW1zUXcjeUNdeGUxcXliRF49SzNaTjBRSW4kZ20hVXg1RHdjfFlTIV8jMmlUPkJ2TGc1YEtCT3Zqbm9aJERIYjh5fXJKRyZlMi5oUk45PzQ/QE46PkF6K0NHOmFES2EiakZzdntyWnIxSFlDLiZFWGtOP0JxLn0yeDVOVTU9KikqMCJ0MV9qLDVgQF9e''@;'; put 'put ''SmBsT3lSVkZpPjhfSVVvYlEpc1VYVi5gKmFBJWQxdUApL2JbZDpCWV42aCZQOzMuSSw+R1VlX3xxRV5Zcj5Ta3t4ZjQhXkNkPHlyOl5kQSROb1MpWHBndkcieHIpXWM2RzpFellSOEhuVyl5ZzpIamI+N2VMbXcyOV9OaSJNM2lkRkpbeXQ/Vz5mSTptSmYhfCQ7alNjeFp1em9JS3kpZz8/cGgy''@;'; put 'put ''bmxIY0djU3c7O3ltbW9AbVohTT4sNSFUUWFUQTNES0J9YFQ9cDB0VSU7W29LRTE3TzF5L29gVmEzaVIscjJGUU14bVhJJF1PTnZ9enFEQzFXZi4pOUsqMTNYWkZKe2pvZkguWHB0JFlmKkdLWlZFW0RQJW5fQHN3cjpIZW4/WCg8LD4zPHtBUFJUW3diK2JqYEprKjR4WFNvPGF4XURbRDs2TDt1''@;'; put 'put ''T1pUM0hMMEJEdFRAPHMjbl1NTmJFa2xCJGc+JnZXM0clbXk/YDw7M2FMTj53VSpXRHM4YjkzQjBhfCVKQUJQc3AxMDRdcDAvTnxUVip7KFJOSGk0OTNocksiIzxgUGc4e0ZpcFNWPTNFKTpxTVpONzI8KHwlNCU7QnM5L0NiKTlSNVJebzxrMGg7W0x4fS9LaDddUlQ2NEJXVFtDWTViU0pLPS5Z''@;'; put 'put ''fGs3Z0dXXj1DZnQpQkYzeUJHXlQzWkAuNTUoJHxGSSYydzs2XUtLKmlTL3NQUmFHXmJjSEd2YmF5bXAzSlA0YmtyTkAseldoMmtabTxbWGhoND88YFJ4UC9vTD1IMGJgUXl9fElaI0MzSzt7answQ2JbYCV9aF0lamxbLkZyb3BvUWRpRkooWzplSHxrTVFlMm9sSksvW29dMG5FP0B7JElFaENK''@;'; put 'put ''RyRhJiNnVHZMUCtAUFJXQmN7bzw2Lmk4YVs9MlUqdzdCZXx7emtuP2BsZDE3XXFRTmdtL2VDbWpfNCF1e155SG1jWkgoZEd9TGFJa1UyMEkqRHUkd1o8WjBhVlQoZGI9OztZOE5VOVIudF5PUmBvMVB5L0o8JCxvUXgwQUo3QmA9SHBrU1IsRUQpOGhVTDtOWzF4e3ludjE1KSxbSG1OWU9XdjAs''@;'; put 'put ''d29waEJvNXN6S3F9ayZAcWU9PmxZMUNUNF1YPX1qXVV2NTtHJjkmMW9VLnwpVW94eXohNChSLiV7bFFrYXJtVlZGMFp+UzpRPX1ucHF4c1VHIUAvRE1RSGpLUm94VT9dOF9gU1o7L2dJKkpsPl1zOXs1T25VMVNXPjZSJE12dzllbEIpaUpzKU9MSFU1RDpIRyhHPHcvTUVZXTcicmRRW000R3Mw''@;'; put 'put ''MFNmb21rOWY6STt9PSJpfVklUEI3ImdlKFd+NWxtSVJ2PnA2bmtabj5QRF9OYVdJcm8/bXVLWHk0RW00OyhHT3tjXS9kJDg8SXsiZywocCQleE91bVYzRW5XOHdCWX1GZFp5em1AS3NIcDBSTGhgekdkcEUoQ08jRVl9SlBmeHlbUDkoOTE3T3IpVSRkSCF5PE4uVCszZitlODszWFNVUVVvO2lG''@;'; put 'put ''dEUlcSF6Vz9USnZFJjNWYkUrL2hlXVBvfnQiPTw3MldOeElHLFJNTjxaQz1Qb3koSFBpLj02RipeTkw4Kkh3Q2c2OUQ4XVJbVWdWWTdJM0I3fGhVXUxJdigrMT5eS1hwZ3VmW2Rfejd7RCt3R2d4ekclUHdWcytULG1jV0R0TChgcXVNT0xLUyN2TWpEWjlOMWAuSkNKLERPUjlbMyFvRyM0ZXEx''@;'; put 'put ''ZHVrOHBBaXReT3NhM3ZwXjo8YFNGV0xTRmVSQiE+STlbYmsvTC9LcFNqbztecjNhJX1SezVCOnRgUmB3LnkrMGpdWFNaJDR2PWkzW14xTj52P1ViZCJ0Q1ZWXUpScjM5RCI3X3BaVG8hXiRzITZTNzt6SlUhbEpTcGhLcnZ9ZC9VI1VoeDViYGFPdjh3OD9sclhgPGJvODBeVz17bDIqTTpKb30j''@;'; put 'put ''PER0OG84RSFbZmRhPkwlYE84ZzJIPGJdYlJPYXxsN2cwfHptUHZOejUhXiooM3FtJGshbEhCamozaUlJbjJOUkpVKV5peG5MW3Eucjc2aEcxdDYrOiI4TENYNUxVaFZkJEVHQyMhRl5mbUd8TXFaVHtPYUsxdnhbZWw3bEJwKTtJUWtVUXV8YUpddlowdkROYUdGWiZ5dkNQZXhlbCE1bndnJTwy''@;'; put 'put ''UWNRMDtMWWRhZWJkKkFnNG0jL0k6PHpNUmFsbUlLPUtFQEJZb0JFXWh3ZVdzWFRTd2I6JH03cCtNZGUhfCF3R0NmZUNzL2FyaDN4LzlGcDtTRypaPlRPZ3RtbWgwMExLJVVnYEc2QjVMN2suI1BNVmFgZmdEMGAlVXpxMVhaLFZAMGc8L0RZZ002WFg4fT4qWSFiT10zUWpUY1B0SForO0lvJjcz''@;'; put 'put ''JTgqenBOOG5iQHB3PGZHPnM2JUs6RGs5fHAkaWwkZU1LeXxhUVkrTSQrVlBoVnVaQlBlTklNVWhsKio9NlI2Q3NYUSU9eUtOOUBORXYrdy5tZTNWQCxxW2FkTXpoIWJPSVBgTWF5a1l1JixaOztbXlFhK3pWYilZV1lQKyEzWSpiREMxZiF8OUluMiFJbl0vKz0jSS9Zbjx7Z0BJZkRfIy5FfEtD''@;'; put 'put ''SipdayteZlNNTywxUk8+Sz0hbSpnNzpgRHhtfCpPOil6aVFeVipqajFLTXhlUGlzT0FueTdIblNpNjBrITVuOnE2WENzSF1xRCVFXzFjK1NaM0UmYFQ/P2plUlsqQE4hUzdqOGElbyFMbSFoRHhTRT1LRS9NaytIcUZdSiMsUXErZVZYUG1gPnFJO2hYOmlHZDtZe11oWW8mPyR7V2Bycj0lOnN3''@;'; put 'put ''W19QRilsaStjMT97UlckKTx3SS5tfFMyXnl5ZCNrfWNnN1UvQVlnL1RKO2QwU1UyNEQvYGxpeSlrOk1hZmZuL2J2Xkola2w1NSk3LyZDSUQ4Si9GMFZWZGpMSmp9UEokW1NhPTUwMXw5WWwmPDs2aGh5TkZVPjx5anl5VDM6ST82c3ZRQktDISE4fCFpMF1hUSUxbSYmQm9xS0NrP1p1OWNocTM5''@;'; put 'put ''KWRaYGFjP0tiJm51UXo9Q1tnQmNKWE5XOHlDMFQ6V2p6RkY+cS99YCUjKGtzZU9FJUZIWlJ9QUhNQSVGKmJ+MmQrdk1NYFQrbSYpYXVhRkouaVd4NVQyPy5BbVg6NGxTUUtNQihLa3lMSHd+QXVFRXkoUExLam0xcjF0VV0iMWt0O25zQFtYZFpLb1B0Sm5AcUxSQkdVWFpWX3o4MWVGekBzXitV''@;'; put 'put ''YCYiPDV4e08uVj5XPmJQQGg7R1okTjd6Py5hLlE8QypaSmArZT5zd1ByZm12VGwoeyV9Nzo/TEA9KWNZMERWMklSN1JuP316KiluMEZWPEBudXZXPS41RC59MDxvXT1JVWUmMkklWmpJJTdkSSVrU21zMD1PdF1LajVaUUttc2NwczZKMys/WV1QdEVvb2cwWF9aXi5UQD08PE03SVJ+OUk0PnM0''@;'; put 'put ''YF4meHszMX5lbld2T0pdImgrdjNiKVNZLjNrTTtIQjBlMCRXRXdZSkNkQmMufllRYT9PfHddNnJlJWRtRVlneC4hTzI3d04odVRPMjp3NFoqKjQpVCR5d0VfRzdbVXYrKThGQVF0UiY2YHhVSCpwWW89Sm1uKmYzTzZdQmc7XX5aIjRQVS5tY1ZxWDBEaFNNb2duKURBYENlTU5fSnRVX1o9VDpm''@;'; put 'put ''M3ZwcDk0TFApLzwuMit1Yy5PdiYzKGdrcFcrUUk8JlAhTGQ3OGBPNHMuQmhzODx0Yix4NHcyNj5eNjZSX312VURtLmkrUm9RdG1vRX1hbCwoamtSbCFXQE9saCYxKSFvZzFUMVchczl+cHluLEMjMTJuV0BHbTVkNy96JlJTb0V5PmlhfEkzPEQ3PDYkZ0M8UF8rQHU7Y3lHVD9wZFFtWTk2bSMq''@;'; put 'put ''Im5XMX4/RH1+KUhqZEdfcjJiQDQ9R1dETDY4L2hhRmpLQj06VmxzWVYibHU7Okkid0xIKnBjYzRReEp8PzdneW11WUZhWUVAZzxbOSZEKnd7XSl3RCsvZDolbjIhYzwqU2IyOWJBbT9JS3UiV2woX0o3UEI5eC5iZlBeYWpbeXwyRChXckxYS0J5UzhFNl9CRVdeUltaYkMyIlYlZXVKbFBAXX5y''@;'; put 'put ''dSs4SUpHfTBEJDtHNTxxMzIzTyFgXSZnL05qdipidFA+OSJOIjpjJSsiSF1FZkBtcVNUTT5nPFtLeC4hPF9IYXZPRUk9TGJUdVB7bHJuSjduflRWOHJOVzZhIk5RP0ZDNDpxcz1mZEpCWHQiVWA1dG9mIjtUTipreExwaWM+WiEofD89X2R8Q2JqbXFNUS9JbDd3cWFNc0I3UkZWcDQ0KWN+Oi80''@;'; put 'put ''RTtSZHsvIzk5cExJbWpjQ3NYUVttPlQ9WHZWay99eHI6Wz49UUc4Uk93NE91TWIvLCsldFFqaW8lVG9nbzVhSmZYOENoPzJGcjYiQVFhUXsiPXkrIlYyL0QmdTlGMTU/dTBnTHZEZXg5X3RWQUordEo6RWZFX3U2SkJpaCRDaUl+aysjK0VGTzlDKX0icE5fPGVMRUMlT3MpQlA+R29fc01VcSov''@;'; put 'put ''RiRaMS5rUzZLSUI1RHRkXT8pWjRLVE54OHZBYlFJWmBPQ05xZFJzKTdZQz1VdVAmanpVfTxFYDkoPUpVSlp1WGJeeD4hTiI7cl1EX0d2bjJKfElqP3che0ppUVI1QzdeLzpnaVtAa3F5Plg4STB0UCJPPyp4L0E7b1tJNkVlVjNwXk1ZKS9+QkwmPi9BO2RPYU1jaGc4LG41Qi55OUQ5a24uRiEl''@;'; put 'put ''Kz1LQm01cTN8c1VAdkVIUm8oYXVwcWkxODJgSzhBPEpmNCY6YFouJGJwLHs5RGwrKD8lNm0rKDZAPyVJZSNqaH0/MCw5WmFHd0ppITlnVDUuWnBARG9gO08rc0BAPj56NjBWLjBoIWRiMS5ZJjdELy8rS1pLVSUrVjA0OlJDV2wrWHVlN1c+KVtCcShhQV5MPDQuYn1CbVd7b3YrKXwyP3QwO0E7''@;'; put 'put ''PjNbREhkJEBOc1guajVpdTs0Ris/TWVeVHtyJEdJRU1dYCFYfC5BJHQreVIpeXozZEB5N3RKLGM1SnBlQVQxXmFCUiUxQypwX25+bGwyVX0pO105bG83O3xvZiJQJitrSXB1Wj0jRlcpPFRKWXl+KWo+MCtAI31TbSs7IVgwSCVQZHltbGglcU4xbUdpSTc5LChSWEZKdlNDIU9bYzttZCFoRnVQ''@;'; put 'put ''NkZCMVl0TTZfOmhPITQrV08+VHoqTSF0MURyPk5+NE1wWjdHOEU4U2U7Tyo9WGcvWWchVzNdL0VMemlfWER6XWthKVN3a0dzdiI8W0AvWTR4bVlXUjF4WVZTISZnO0gvZE5ISXUoNHp6TDYpUFJwQjwoV2pdMFRdaCwpPCYqdThyOzh3ezdHOmNGZkZKU2F0Y01zVnpoMGV9d1FvSGt9S2VNcyEv''@;'; put 'put ''dTI7ZndqUX46TmVhV3M5V1tOTU42YEcwW0spclN5QToyRmt7KD1qOFtwfW8iVHxbRihlTEApPkBHY3RqN1p+TltSOSYyY31VOm8wS2h9b0cvJDwvbmFyaEJDPF1oKCFbKD1beX5oZ3RNXTNRYFVqUXBLdXc7e2gsXzMqJX0jSz99aH5nPFtMTS9ORC9YblR5VG4/YF1rITAsMUFPZzNCWkFPSChh''@;'; put 'put ''IXNRQEIwMTVtRVBkVyVAeTBNTmtCKH5qLElQfDI4ME5LdmUqcj5SKzd7IUZsVWMuQlhpIWoiaFRZQyNoNVl9bS5uZHkleSh6NF5OQmFeQ2NSV3lNZm5CWUh9OWJgcWU5JWdRWi53e2dEIl8uK2hTcylZPTd6QkdBITIhQFh0Uik0WWNTMWYofE9yRyk0VmRfKFZQZSNmO1VDTnovaSEwQmcvJX00''@;'; put 'put ''WGVeSXNZZDsoLzEqaUBvKHFxPU1uMjxrLzc0SURCIyFiUiF1eExQRVhNL0dQY3AqPUZQY0UwbHd9TEBFVnNSTFVGe0h1emx3XU5YKTlJWHhde3JMTm9ed11OQCJXKWlALEZITlo2JFEjSmp3e1QhOGV4LldneGVKTng8IWJSQHUxbjJkM09uMiUxI1ojeiRMZ2Y3SV8ic0k1STk/YWozaUhEOnlj''@;'; put 'put ''RVR3IThNLDIrXmRoeE56XVorSjB1M3FiNDlsXUE3WWJIS2RUdigrfDU6Q2xYP2A5bGJgM2s4UEtobnpUYmI5Jks0dzBnZVo8U1U/VGRYJT9iM05zYldzPGclR184W2ZQKXhiM0J1UThXeHkpSHg5S15GJUB6UERCezlaUFV8ellSfXhhXSZhVTY+U2dmeklfdDNrM094ekF2W1F7KTYwUnhgKjs/''@;'; put 'put ''YWpYaU54Lm5SXkksZ1E9I2I/QWY9TWVoQEksQlFDd3plbmNROk0iRCFmSUVNejkidkMrUzo0JThaRUo/IVJKIXJmeklVTS5SQiRYSXRSa311Wk5YJissOzIyP0QwPXc9QyRPXjcqJE88KGpOUyN2Xk1OZ0I/MWl3K2xJXVs2SG15UClKV3ZveldSSiFsJjN6TjlTQnoka3MiMUtCampJaWRKZ2NK''@;'; put 'put ''aThuVWo4ajdIP1g5fSM4JXFmRV9NOnYoMVtLRFNxRWQkJDFrdkh1eWhSNSpwQFJGVl9JZyJNM3MxJU07ZkchS1VETXdVWEcvVTUufS5RYlIzY140a2Recy8uTGpgcy5EQ29Fe0w/UilvXkI4dkFrUz1rfEA4UDMhTzhqPCQsdXRoQ0A1SXJ1dmp7K09aZEZHMFZrOXtlbm1Fd2YpcClxIyl3Vztf''@;'; put 'put ''KWY5VWUlRTBuS1lTfFpRJVBFT2NReVdvdU0lXS5OOlU6MVF6cX1YR3VsO1h3b3g1dk01SyIxLHE9WDIxZTRlRW4+TTx9RkJiWGspJGV0JlZrMUlmL2BvdCgxRX5kXiNgViojbT5ONT5PJlcub0QzUTksZ1s9PmB5TlcuTl0yYmllaWEiL0EwNT5BLGw6KG5sYkA7WD1iKDFOdXspazY9Q0NXS1V2''@;'; put 'put ''dzcmMGhEMzQwLCkjZjlfUkVDR01XM0cme1JWYjtSLlY+XjFZUm45SnllQF9JNjg/R2MqWWlqT1d+XXk+cXk1OkxZVWNSKmY8WGUuMmJSWyhYRlVKP0BiMHtlRVpXaSJuQDE1WVs4YkdZRCwrL214OHpPdnBTcFF1eSZXNzhuWzc7eHk4Rl5sVGZxSHQrPCojViY0SjszfUhzZFhbdGZweDU6TGpv''@;'; put 'put ''QTZMOzhLPmNgckNrR09FWjhScXBNX01WdClzXzlackJnMjwyWCFDNjtiVjF7WWB9XXllcX15O1M3YDAzTHpGVV0oKzNxK3N2d1ZkVUdNN1k4MyFYbyZwRlMmek0leXYyVUZ1ZUhGUWNXQHdEUytdSXVRQzNBRDdGZUdTfCpubWA6cFQ/P2p5PXBTeFl3SUZjfFFRWklgVylqSiYrOHpEJEU5Q3Qr''@;'; put 'put ''IURkNiZIKiJAYGtXR0U4JX4uaWBTfGhsdWp1W2cqcCZpTiF3bSssNjpJd1c9ezk6Uz5sRzxKZmRiaWNFKDpFbUY1SndDZHJPVyFHNDVUTnJ9SV1XaXFQX1g7R0YuX11hPk0hO3N3T1AyfGRLODorRDdJOyNmOXZbO2xEYX1uMT1ZSClfNjUwWzsiX2xfY1R5KEdAI0opKjEzN0VvNXgzVSswS19W''@;'; put 'put ''KjB7ZDo4ZmgoSUI8UFN1N0FmKEsqdSwqJmUrVFshZm4sbmFFez8vaz06Ri9+TiJtNCZfSmExOEJsdF9PWzlgVGt8fjlnb0EwQC9XNGJyI0hFSnVOeyV2cVI9P1VOcnlpL3NbNEJ7eGI4OzI/Zzo1bXlvRWJROkVwLClgdltHUEtbRzcqYykubFM2QmAiOWpQQUA6W35oSG8hWnQ5fGc3ejsoW25Z''@;'; put 'put ''eHM5I1khfV0+ZmZZQ3R6Rl89cWpWMl99dkY6XjI8LjFpR1BATThmclBBRSZgWTNROlZ6UCFTYil1ak92O2YqN0pGZixTeVR1Uz9EJkA/eWRLeEZZVH5icSxyOlM/c0xMUGFhV2F5ZEEpTmdXS3slU1kqMG0wJXNeamIoQyp2P0QrNjNNJUN2dyNzamQ7UV1xPjx2IitxJHxlQUlWbik2YkhtRH40''@;'; put 'put ''M3clblhueGQ7Tk1lRGhTRHZGQGx4NCtITyk2M0B2bHUvaGw+YXt1fENmcXRafVckWUQsI1BfVGwrO181fnldMEY0dkE+b2YiY1J7V2d6TWBmRUJQQkwoL2FqJCwoL1Z6SGx9ZVVtdFBDaEYlRC4hP250Jk5mSmBAfV1iaHorZCRSW0dlOCYmfHZQSU5TT3QuV0U6NTslaSolcT84YiRULiNDcGc7''@;'; put 'put ''Yls3Z0crKHQ4PmNda1A/RURlW2I+TG4sVSVLNXYvLyROQzR7XztxLFc9QHkmTnBmeUgsRU1BYktzMDRgbDZ1PCRwVS58KHgrPE5QJlBvWCRiOUh7ZXV+LGpUM2g7WnNFM2dUZjdrNm12KyFbVHhEOmdfU0I5aTw3MDpQZTZaL3pnaCRtJn5KQXpkdX1kVChzKmZ+VENBLFhJYjZRQmtGUTgycWc4''@;'; put 'put ''YF9UTiUyQkokMmIxQmYyc31mOjVdLDcvLGYveEg2WTBFOjNEQFJVYSJGVSZyL1BfTCopKCtVLmFDbVpCfUwuL3ElSUorJS8wMSlYUitmYnh1UEwkbyFjRUBWci5FZUlzWXM5MCpeYFNdWTwxbHJKPWxeVk1TSjopdlBuKGEwYk0qcTdMW1h6dXEuJFJCW1pnK1ZhbiNXTHBRQipRe1lHcipgTXt9''@;'; put 'put ''fiRyeXtfP3h8PiZQd0QwKWAoJXA6dlQ0SCtvUjc+V2hGS0dqaG5HNUxfV31vbylnWEA2YFtDcSl5UnJ+QzlCe1hRZTNIUmhVK2JJLiNkLGwqRSUxdktpOHYyJVNWditDJSFZfDhlbzkqN0ZgOiVWcCp5IS59RFQsPmIhdF93S0VNJDMwdWVYRypsb0d1WXVoKmIwP0QlUV8ofEImanZoXU9VYG9G''@;'; put 'put ''LkIqPS5tVmdgY0lyJixaQWZOVytMOV56YSZdeytuIUw9KytlYFo5NnB1aSlEek0lYiV1ZVEmJUtyMToxekQreF97WVJpKVdjU2o7S2wvQn11RkFhbENyWkVaYT90VT4qY0RDYl84JUVjcUVxKnwwLFdPWVpvKmlqRmI4azBkTX11PXcpMEs0ISZ7SGNBZzl6PVJuU0ZCIzBJWGEjKiZEZyVTbXND''@;'; put 'put ''YF5vL1R2ZzY7aEgkW1ZAQjEuLHRHbEJIXz9bLmJ9UV1VN2FlbVR3L1VGZz4pP21OcCRleW11PlU1S3J2WlBCKDthVDE1VHU9SHtMWlQ1WGtAME09TVpUK3FLb3tdYzt9KCY7eDhQbyJzNiJ6eXNWIlo5NkI2S3JkVmgqN2wrNjBsTD58SlIuW2JyRHZxKmMyOX07MGNKZUFwYmBtNDpJUk0pTVh8''@;'; put 'put ''YFgodE96KiZUM09XLDUwVGgqaVRKZChDOmY/V1kmKE9VQzdbcytxImF1M3ZAa1hAT08wamQ3a1IuZU9acHhxND1daj5qakdjcFo0KWtHOz5tPCtbYWFXd1c8fUFHb2dIMkg7PlRgfW1VencvMTA1NWdnZH1oMjcxOVJJTSIvZSs2M2ldIyZBfVVdT2w1JlBgOTU5U0BLY1BxYmU8cD5RWHZHZ2Rm''@;'; put 'put ''P2pMfmpGRD0vaHxjfE1pMEtNMGomcV9HNlcvZD87XyM1XzM6XUdSaF5yeXMzQ0J+Z0RvPiVWbEFteHhiel83MjpdYSF8bjhAYkksfSliTE9oPFhvbGZ4aixvUHx3blApb1AjIjsheHt7anZGRkhANnMwdn1OTX0hcUFFPip4P09aIVE9KCQiIk1WREtZMlpKM08xNj9MT1RQQ00hO3pdTzp1bDM9''@;'; put 'put ''OzNaTitSJHE5S1kqRzVjQG9Ub1AsPWc0SVFESEZDTVk+WyVGampPUk1dU2I9IXBhWCpBckp2aWpsPGJWOzFpR1lqN1FATm5vcnVyR1FvcCsqTFpZM1tvWisrUW01Ril1ZW9JYCVKPj9vVENoUTBfW0UwUl9FNm4sTG9OKTV9R3ltYixFJXQ8RjE9ezFob0g2Zkg3cVI+JVk9MCk1Ql5icWREZF5W''@;'; put 'put ''MDlQVEVIPDFNaiFDPl8uN0k4ajUkKGI6bnMzWG9BPDxyVkRbVD0wMVhQRl0xbnpxaEFyJjxUR3ArKW9reSYlNG8+R1RVbDAzKWoodHY0QCIrOjtRN3t5Nl5jb21ZflpyNmY3MTFHXmJpJixOUl1iYmppa3MzXXF8OCkuTEciUm90cz5RMEBJOjkpLl1uLjBORCtsUixZMGZPM0chRko3QElEcjlP''@;'; put 'put ''WEt2YW5aNCRzJjEmZDlZOXNSaUAjZE5JfEtdK1RGTlNjT2lATEgkOHcvfHlfM2c/NnBYMT1JNj1DTFpxPTxHeElIb11ZWk1EKzNye1NGUmQ0SFElUzE0d1tCXSNNXTlMK1tNN1NkcEJfMUNxLnU0OHMyQnR+PUF3MDouX3xtYU9ASVlAZHRTY0clNF46YX5IIzhaTXQkPzBWTT13YEx3PThXTGlt''@;'; put 'put ''WkNjVklucWhrbyxTfW53ZFdFNXdARFJKPkBAW2dNaSFFMml2fnY1djQuYW5lX3V5TEh+cGYyb2JmKXsobmcxSCx+Wn1aRXhTYyZ2MjF6PUE6ZDRSeEJsPldNSEgzIktSKElNI3pBJS9PYEd+TGA8KjRKeEBJIWg4dDl9dWNlWUA+fW9vYVAwS1dAbV96VHpLYU87ej8qaF8xSjEvVkB6dEFqRmt6''@;'; put 'put ''UixLdFR0WFBeJCMpcSk+XXkibmUsPVhqXlM+SD1QeEdzUGlEbUwiQChmK1JuR2hNInZgOXM3Y3lbMUNHaE03TXhqPC59T1tPWE99Qkd7L25QL2c4fTtSNWNAOEorUm1rdVBuP2BoJSZTYk9Zb0RYTSN6ITlOQ0VnOUA1KC5tTzBWMCZiPjV5eiw9NkhSRVt4e3B5UG53VWF0VDJ+fnRORy43OEc2''@;'; put 'put ''b3B0e11ud1JdXmQoMH01KktFaUA+VWozI2k6RnZ7RmlmUFZzLlpJa1dGOC5efFhdTHRiV2BWZzBINUwmSVY8Zm9jQl1mZ2IzJiNSclVRRl9uYFhycCtNNzI2M3RiV2BTSkBOaWFbcTA7ezJOdDQ2Myw4JmJ8OVl9ISwxOE16eUEqYm52OmV8MWdzZHthdmIhKSN2N0pSdWVGIzY6RFkqRzVNJDZ5''@;'; put 'put ''Jih3IlpMN3x1Y3hCV1BFfW1zRFY3SDtUdEk1RGkvbFlCLnNHZmYqM2M+Tm5uOm1gZiZCNiI1PjVCQz9eeFRGaWFCNW9rOjsuMj5hMWliTXMxJnJAdHBsNEQxVD1SeVhyJV5dX0M1SCxTPmwkRDZDTnEzaixMVmp6ZUtRJWAqVDVCWzAlT1p4amYqVHZmN2Q0SV5mbzQ1TUA/aWghTSYwTiV4eWtZ''@;'; put 'put ''aENHRzVTMT4+czYuJTd0O1hheVY1ZG4xTSN4aWApTXBxTThbV05aIXFxWTtmXTBsTVdLUzojdSlUV0BMeUEkeGozQilmQ1hFLExWIihWd0EyR15nemdFK0dJUi5ybzNlVl5gUjcuMkMwMiglNTwuMj1OZSE5anJoIUwoUk08QltCYk1BbV5MYU98O1ZQQlZjOEhLdEs7MSIxeUFjOTx5WnI9Q2Q8''@;'; put 'put ''eDJpYmlbVWU2Ly41NXF4JTh0XzFoLGU4TzBYbS9APU16Ql03NyMmKVQ9VXFFJFprSzk7aH10YTV8ZVQhRXRbZn5nPVRBPHNHcWZgTWV0V1BmY0dvSSUhXjFWWT89bGYlb1cqO2QqN18yJHpCZVpJRT1dLix1PUxXN0doZz5kcCJnSHgpIUtySz1TUD1vTHByZ2xTZ1B5dHp4cWxwMmxGKUs4ODBW''@;'; put 'put ''UCJhKSleYV4lQHNWS0x7eWEoMHI1dlRwMCxjP2BfdTEvWzRHPjYwZDouSChHYWdJXiI+KF1fTC9WMns3P1t1UWlFR3RvbC5lW0VHQ2ZBeUhGb1VTaFlVOGdoWEhGUy9gR3t1MkRoUyIrXUY5ZndAMklZTSJuUlYyQzArNDM3aUBRMjo/ZWpxemxsLj1xOzFmZ0UoRkFOWXFaUTI7UHd3fmhDZjNp''@;'; put 'put ''cDd5bCtJVylEJlBNd2VXblo3Z0R9YCJwTXh9NEEjemBtez5HT1I5IXNNUFFFX3Z0SnA3NVlqOyx8eClJPj9ePilYMD0iP3BER1crWjA6TnwpUEVZKTVdNlRHfCNJZnteLn0lNzNoJVMiZWB+aSI/aFBvIlhFLEEzdmMrIV9UUEpqWW9NdjMlU3ZQYFNJb3U9biUmfHFbM2xLNFk4cEV+ZS8yUXFj''@;'; put 'put ''KElVRFVsSTJ3IlgkVjBZI3s0SXxLJFB7Lig/MUtkaixRXlN4ZTJMRDhCRTx2PXJUZWAmXkJ2e1B4Im0icSpeYmxyUStZPEBlfFgiR1tMc3sjRGkmLDc/dS9NfnlZR153XnlLO2ZdRnw5YXY6anl2JnwpMGBTcTI5RHB7YC4mRSZLMnNrLEppJiVxa0h3ZHlLM21oI3Q3e2Z8MDsmOyRxO2wjajJD''@;'; put 'put ''cixOc2x5O3tQfCpTZ0hVbW9wSFl1bks1RVkyXWRiR3Z8bSteanw4eTBELFRQSEZWI2tLYFZnVTled1laZEdaP0xacjlLJjFnOV5eZDYkSSp3dk1oKXtYaCI9IUl6NTtALD1PMHQuRkVQWm96Vz8oLyp5MW9NZ09SNE5odkFSWyRmbkVeLis7Pl51YkZxNWlySXh3bDZvQyksYzEyXiV4Z1BeKFRQ''@;'; put 'put ''S0sxJD1EbSZWSCV0LGQiVTg1bilKQk5FWlNtJGZncSNmQGcvbDJvOVQzcVM7KjB8Z3pZRURuZnsjbSwzNlRtdG0sMFJfIipLPXVQN2YkJmxKMz8wOj07bER8Uyw0KFFyWCF8WVExcEs5TjA1QDVgXXV7XUMvezwsOlI8VTFmLEA+bCMlOHMuaCxnZXBYJWl9UE4kLCUwcWU1ZW8xZ0gzY0xAQmda''@;'; put 'put ''N2VdTnRLIzZheip5NWM7cVpsJD9kdGdnJTNfbi9xPmpKaDpFdFAhKiM2NVh9ITY1U34pbVRjQDt2XUg/ZkJ6SVZNYEc/SkA7USU9KH1qVTssTzhffV5VYC9eaDhrYTZIcz5UYj8wL0A1KXJUOy8/aixDYkw1NVR5NDRtYHBoYlUkTyg7QmA3LE4/ZVh2XnVNNV0hImQsclFDd1VnYCFGNXBaWXp6''@;'; put 'put ''KmJeeUBCUlZhWFtXalhAUUBzOU8kazVmWmtFOHZ5S2FrPjtRIyFnMz44RmZveW1QbkBdTHg5X3M8OEZnVkA7KV5sUFlFOTkyLDt8bkR+IVZ+akZue3Q/b3klIztWPDoydi9wI3ZlcUpFXzs3Z1goKXc/WXEsaVs0UnJbOjZwN1gyPjxaJjNfPHZuKGN+blR8dXIseDBLRyQsITNDZUYqPUdYQis5''@;'; put 'put ''S3Q3eEBbI2p7MmNGW3Bmb2tfRVNfKXNxQEF0QjgvdEUxNlg6PmldanojSTxwT2FleFBMTkZpbm9TeCYvSVZVRVoxVks6JV5LVTdma3RCZnZtSWcvZnl1SXlZPW91QFZoYGdjRTZeNyx0RjU8O0lLVSE9L05IT0lQMXs3NE0mPDFIKCpRVTpqKX5jQVc4YW9tclVvKFZgL2ooPjtnNz1uXSEzZU4/''@;'; put 'put ''Oj5xLyU5enMkIUFYcmRraF1GU2hILG1YZkM8NCZXSzhxbDdfSlN4Zl8iWyxtc1UoVU1EWkUsWV91b0pJPCp+QjF5MCklKzB1eTo8SiJtOkJhUD47SnVrXTVITU9VZ2NAajxdbkhFUFdELi4sNXxZfFE6P3pdV3MqP3B9PU1jb0xGOEhRVFlPdVVNbl1XUWVxeTZ1JEI9cU5yZHRdJm57UGN8OERw''@;'; put 'put ''Jl9gaGB7fWliXzx2KFIsRkhVOWVfR3VmRGZ6QmNPQkcqc3w4RERofCo9OTtKVnBJS2UybmVEMSt4Yi5HPFhtWWAlfD9LfCNYK3lJYittKGIqNWdVdzBGRkFSa2wvQVhxSGQ2KkJNL214L1NRYyklT0lQYSw8eiRhdllGOSJxcn1RXl8rfXAlQ01JNilSIlJRI2Yxcn4hL3ohVmNXdnpBMWVGMTw3''@;'; put 'put ''VGR4b2NGJUZUbnNNaD59S2JxcyNRI09YUmlgOSJLZCwsT3NCZXh9PSMzUE5XdXFvKj9ncmslfV1rRWVic2NmNj51dXhRRlkibT8lWFJiRlhRdUtfaCUqJHNCX2RCbW5OKF1hO312emU3SnF9SW9pbFYuNHxzYiMmRlY8UEYyUlhvc1tvVCFdLyVjayRrZzhGMUlTdFR0RnphO3ZacEVEK1FJKmV4''@;'; put 'put ''XkxzWjw4OlJrZV1DOiVaO2BmQCVJOl9GODliQF5PN2dmKVVveDhBTEx7L3BiejB8KkVhPVRJeFQhOjtAIWA3aUl5dStsfGF9Jjt9UTZja1taUW1FTyhUdis7RzFzPDtyRGR7dz8hYDFZMG9qV3c2TC5LZWMwXllnTG9ubHwlOyh2ak5FYDBJLy96UT9zXnshdSZxRlJ7OXk+MT9FNlZwSz8rVUw+''@;'; put 'put ''Ul5qZkNoLGw6IVtVdFdWWXlmdEtMSkw5ck9dMHxHVndSRWJ9QSksZDNzOHpySSJJdWRnPyZHb2JHclhYR0dXR11HVUNmQEY0YnBVdWh4WHVMSWBCWnx2M3w4djsxYUdmaSt1L0R0S0xqcm9XekFkUylgal1kfFgpUFFVejhtKDh3NHp7RHJoTSEibTpeQEtHeEpWUF82QGxXQWlNR1ZUQzt7bCpx''@;'; put 'put ''UWk0RUtpYTA4PElheW1sdElOaTA6NmVfdU0wNVFjPj8+bFBsQiZOT3xVNiQ1WVljZW5EV0JCKnZ8QVspbyYjSDR9Smg9NVcmIitdLzl0fEN6XjghU1J3aThRTzd5VyZfT3Q9VltFUlZrcXdEUW16ZHdXbD9iQTB2QlY+dH54MzNnZypRXTtbPyw1WyZFOVkpbWBaMVcyUEQ+JFp8VUdpNXFgTTBA''@;'; put 'put ''ciZ6XWtmJUdqdFBfYHBhQk18elJqKTtGNVEuUmIqfjxvJF80KytbRTg6Y1I5X2ciW3dKVzlpaFt0RVVKZllqNlNWWiolZE9qPkRHbih3I0hNSzVLJnNMRnpDR3M4WkZNKkF7YTpUR11NXU5EcSNCbitBYDdwI0JdYGBHPyZPc21iMnVMbnYzMFd6fVFgdlN2M29PeiskNDI/KklNSDRsO1UiL3k6''@;'; put 'put ''YCYoeVNdZ3tRYCU4PGV2M3A3cHltfTJuVjBUJTBOT3RhcWZZciVaZXQ5SHg3LyMmZEdOemoxQnJoRmsjZk1RYE5ZU0hMOCh5PVtOP2dISD5IRyEsWzZXSi9GKmImZE5pOlZVS2lYbzBfV2Y1dHVvZCxIOStJZGlOJiQmLjdwR1lkZSg9Q3lHK0BPU0hiUG1MfmpsYmMiQFg+ejw+XSZ0di5CO0Q2''@;'; put 'put ''TVlNbHxdJi9EUkhiUEohYVZxJnJ5bzhIUmFWXm55OEBfL2ZNaVtGUkhiUCJoRUciUixjQnpuZ2J1c15bWkYiLytbNih5PXBUJmgrMSlXWUIuVFFPeCI0S1IkKEkzflp4S18uNW5JT0NCc181V0YwJVRgUUV5TjlxPkRhYmF2SlhHWWZVelI5fFp4anM+VmdmZ3VaPSs6Z1R3ZGd6aXxbVCl9TChI''@;'; put 'put ''TXVkJmlKNSsyQk04Vlp1LytNb005Vys7V2x0JDVRS1QpJTNGTnBeS0liNjtDImFnRChGLF4oS04xdUsqKGNiKUVNbShWJG5NZ2hqJEF8TE8wY3psTURrdHlRe1dyPzBtQVUkRUdIU20ieElrNHxBfDc6Qk8sWCFYK1tQN056SnVJSDh2TGBzISZNVkQmMFRMSkgrISJ2cDpjY0dfO0xYRi9bPSYr''@;'; put 'put ''QlovK00+ZWJiOH5LPkMqTjV0PjVzWDMreCtCfn5EdDpYWThAJTtWbSo9JjxhVzhnIj9ZXUtlbHtBd1FTcTUmSWlLLEFyfikqLGwlO0pEbSwjME5NUnk3b11tVm9ZSWdOREhLKChaZnJvOjw+bjQwZCpKMmtjdj98eWxoIlYiTUpsRncrQj5oLHdvVnRfbFF1S2RFaVohbTNxVSYhdjtfNVAoKDFo''@;'; put 'put ''aDJ+Onk8RCo3QEc0YUVnPCsjcyRdNyVxe3c5cCVDdCEjYl5seDhiRjxodzEqVVZdVz9LNm9dVDpvfXhfQiRNNEolN2dFY3AjflV4RUh3UipmS2BbUjk3I3xvN2Y2NT5yKTJKOGNFIjxkYkhHZFQ/Tl89cyJbITd3KFNvPHc3dlJLVFZ2KVZ3Ln0heyFIJjUlfVR7OU9tTTNGKig0K1ZHaVtAVU9L''@;'; put 'put ''P1NrP11lXT90dTFobyVAK15vNnZzS3BoOmwuRG0pJmEqU2x4b2NVTTwmfSV8dG5mSGpfbU5re3U1cEtlOTtQMDNJPiV8YzZCYExGeU92JmZ7Y30qIU0wJjtRYCViTHMvYjdjRiFYfS54NHRNUFNWT31MeWo+KytRYDovVkxOdzxddltyVXlAYTR8fUx5WERGb3RfcU46cCZyPF8uKyJFPnZ0Ullh''@;'; put 'put ''ejkuX285R2FuaHl0JEBXfTA4Rj1jPyVuc3glQCRRdX5pIWhGY1QlUCtkRW9qenU+P31sUE8od3lzUllhe0tRTmt8O19MUz00fjY+Q3s1YndlLkVGY1RyJmN2dWo2LnY/Y2pzRlQhbnEjPChBTjhRK2lMR100OWloImhQIXJzQVBITUpQfE9Wd34/YC5KJDNRe0BoW29hLHYvYiJ5cHcmVjp4eEVY''@;'; put 'put ''VXJCRmkmfnchUyRkNz1ZQ0ZrI3llcWhBUU4jIiNNXi5LOEAiZHJGX0M0ISFFYVJefSt1M0wzKXxibH57JV8sTk0vWH44PlRTdl4jQzxvKyI7Ri8kYDJ7YVQlUSJdUj5LNE8heFc9KF8mSypeVkxoUWBSXW4uOmFPM1s2T1IoNHFsZz4mN0tyQmRwOShIX3t0SltLeT5xKk9PdUNGOFkmPmNoSFpP''@;'; put 'put ''fmsmVy9MNkpuZlZ2YDsyUjVnW15aTn4vdHdMPjhFdDpbKSVEfGcmWn0yJGJPTCplJSxwckh+THlTaVZzfHRbKSg5RipMbE1xKGBSLDRzb1Q7MCYyb1s0Sz9tbWZ8KzhpTSFnVT5YZjk6e05OXy9LcWp3bDptZi9nNF5rLGdgVSNWOV9ZIm1QZG50ZylmZlNRSz16WEtVN3ptdH1jQypfIjdQL0Ah''@;'; put 'put ''IjNoXWs5NU5vREdDcjchb3Mqe2t1Ml1hTEBubnBncnEhcmN5OGkoZHhAeGFVLzZvOjkmODBaK0BQfjZnSVhrNy9eQEh2JjBCTzhVaS9WXWFUaGlZTUh3UmVoJlsqMC9Tai5fQVQye0tWPDBgMl1RWWp5cDR0UnJiaU9lQ2ZQZVdVLCh6fXcrLFJhZSJpTkoiKz1xLEp0cHU0InY0b3BgdlV+MGNW''@;'; put 'put ''RV0sIXRKdXw1TiRFOV9OW31zJnNqM3NXMX5DXjozcjZiZjQpdWomMyNkSnJILiZEWStQa15DPDFoLDBNcHZiQnJYeHhFeWdYfHkwejwvZzdqdDEpe2Nvckx+V3NXV0tsMEVzW2o8a0JfdyJ6JjUhIl9+aylFNEcuc2BHLyg3ITsrYDNYJEd0S2J1PU4mUFt3XSpkckZGNXpnSClJfU1xPzhRTHtT''@;'; put 'put ''JG9eTWZBakJOWF9iJixZY1VTY2l3QjZbSyV9PVZ8Tm1Wa3JtaENQPyU1Iyw8MTYxKVdVKUhIc3NRI14jXz8pMG0/NDVXYExbaDl6YiRdJVd5T0NrPk45KlVzLyVFJjc7YnpGR1ZUPWAudX1CcGE9eV5EUShJdnJyUXkzd3lOXytbV19XWyxFdUR1fUBhPylfZ2Q+XTNEVVttSWZrMSxsU3k3LyVF''@;'; put 'put ''cXoiUSQ7ZmgoZTsue2lwdFswKEc5UEhzQF1HZjBMSj4zYW9mM3EvZVdQP0ZvZkM7PXpxaH0weTUwVUJ1MipJfk9MPClvPFYmMG1CJXsxIVYvVUwrN11qLD5SUXhOKFNFYV5MXWE+MmRQPmN3cy87UCN9X1BwS0B7Ylo4VT4hI0x1JH0wJkksazw8Ii41I2ojJStFcSFuYG00XkBiMzhkZ0NmMV4v''@;'; put 'put ''PCQsdyZvU1VdT2l0JHssSHApIT5kQnZ1VUVmZyplPTMmY3xtZEEpW21lUTM9OyhVfStkPiQ3YlM9YDtvP1J3bUpWK3g2KEg8OXZzIz1NRiwrZF5VbE93YCNIJE9dX0szdlsvcXw8KmN0QyxTN2NoLCFTPClqIWN3Y1s1O0xEIUBbN0xmYSZQc3ZkQmhUVV47MGRVQkRWJihLNndEOnA6IyYuYCRz''@;'; put 'put ''W1h7JUF6Vk54N3VjJDQzR3ZfUnhQJVUlJXFieWs4PWQ3flhQJUA4eD1aPHgyeihNUnhSJVQhTjZFJWByOCx2VWg4Pl0hRUIwaWZNK2d9Xk9hdyFKSX5teU13Xj9mfFElMThUeFE4MnFSaF9wZGRWPX1qWGhiOGssMWdbbSs1dDpKZk49ZiFMdkFDQ2xLcmUlND5tPXwhZjJ3c3IqbT5tPyw8dmBJ''@;'; put 'put ''bFRZZXgwRF07M2lxYFlgQiR7LFBHOl5bbUhHTmF6NGRyVExLbS81bzwjd1J8O2ZkZiRANnwsdkI8PU9xLHVkVixnYDtZMXtnJilRVDpEfWVjVSxBcjg4SFBuMGNvJlBgME1waGIuPSFDcyxIfXxoeC5JIVdlYWlgdEcrPGZkZit1KWBjMVorTTRsUn55WDFpUUBdblh7US5NSiFoJmwqaUdeSiJ3''@;'; put 'put ''W2h+eSVIKkt7cHZ7TF02L1BPIzQoMHc6XilxfSlAWkRRWC4pQjxWVylPYitJTiQwWVpCPGooQEJ3W0BWUFU6TkU0Pn15UEdXUSU6ZlhiJTF4aCxaM25UfjpKUzhDbkdJZENSKVdrLH5AL2QpQHFMU1BTUFIwWThfPjAmSmo5NV9gelQhQXJbR2ppK180T2RMRzFkLzZiM1QoX0EzVl8+VUc5VEVh''@;'; put 'put ''cm1qW0BPZywsSzh3akc7cXZxO2IlempiLDx3NSkubTZKIkpxRTUyVT9yT3VqfjpPUk1eVWBOVGE8SDljXWMzLitsLDhQNHBTbWY2amx0VnxdYGdTdk1DQHh8PDxybSEkcUVIR0J1bGojRCFGMSpkJGhFfUtgV2tnbzM9d35aVF1zd1RHfXhiL2RwW1AjMnlAQj94Tnoqc0Q1fXRKMjd2TmBwaDR0''@;'; put 'put ''P0IxQkozQSFQKEZKSytgJTFfSipjd0FHbCE4ITNuUD9EUkJ7bk1WRjlLW1l+Y0MsYX0zOERLLHRGSH1VTDsobFpFS0g2TzY9Ul9uS3E0cl4xPT0kQ0Y9aGhheitLWSI2dS85Iy9eMj0zQ29vOTpwOGpJInYkYUskU21aISYlMz1TR3BtITQ0KiN1YCVBeiN8TW5+Z1FZd0VkZzNWP1R7fGs5Q3c7''@;'; put 'put ''NHEsWENXa0xuSjRteV8lbzllXVhATkt6aFErRHdKYWI7JVZiUCY3LzMjeFIwIzlFKVU2eS5wZmR5eGldaFAlcilYcjYhWHc8ZnZQdz45JlQ1UiUhM25KNEw8JW8jVD5vL0hIRXllR3ppRHhETiFNVlNQXlI8SnxyZlVVd3N2eWtAXnA7ST1YPnJqKk14ak8pMXlQUWU9WGQ2fThaYT5ZPTAyZ2R3''@;'; put 'put ''M0k0fiJ9SyQjQHhpWTcqe1krLnZUWj9IO3JweTxMW3M5V0JMPCNMIWBCWit0SS8yLkR9XStLZSR+PFJzPylzOSE5KythcnYjSlN+YElgYl1sLjZpRSVHV0Q9XndQWXc/L19Ta350bC5UckpTTiF2ZyRAZyYzaDF7Nik2fVJOPURAeVJVbUk/TjFhWiZvM0clST8pKXpnbThpTGAyazhSUnkjQTU3''@;'; put 'put ''QHc9eElRVlZNTjl+T0o4PWJtNXpNaF8zL0s4Py8/YkNmbHpiXm92ezYmYX1lJTwyUTwlMV56bURMY08iPTkqen0vYlM8LDA2SnxWY01QfTNENWlDR21rJVorfTVZT0BqQm9hZmVLeEY9c1psQ0h4Yl48V1FbUkVCLHBANC41WDB6dlR4QjBme10+O301MT1qVEBPYCtSMC5te19VKCJWa2kybzpx''@;'; put 'put ''VF9EKT8/U246X0lgbEVQfGlNJTorYFh4bC5dJlJZN1RUa0VfZFA7Y3BaZCp+NVdIZmM5ZDxYYTM+Z2EzKH52JWI5Tm5bYTxfJilgXys/YHEhW2EzbiVvOWxYWmFSaUBeWW5hYXAmN18mPj4mbFJXaCpIOUBNelAlaTMjWl9jWW5QZWdXdSkyME8zS1QxUDlib3JWQ1siXi9QbCRMKkdvYkQzfT82''@;'; put 'put ''TUUrPnpRKzlYKmowUVNOJF01TTclZ1s4TXFvVTVIKGA3LGN4IVtVe3owVSx+MCxEdXd7aUZMRUQvQ2hjK2VbMVFOJXZ8VXpveCkqLmByMVZDQ2M/JCl9QlNtSUU0cSgyeTZiIUtpKClJd1tvRkQ4XT92W3pSOixCY2l8c0prPyR+YFUwezgsc2B1YnZJMFIjNzF7SXBDNjdAZWAzW3lGRkZAfioq''@;'; put 'put ''XT9AfGFGZ0ZNL0IiNkNETHJxPlR3X0RrXUt3W1UodV5IU0tzbW9KSzk7OFIkOjUyNmJ5Vnw0TFZ3QDNoWHFTVklBdXt5RiEoI3RkX1hTTTE+fiZDJnN6eVhTSF99O3c9S0xKSiRJd19SZXgwN2JLaEdfaitfaEZMYT5uXzxuQVNDPE5PZkg7eEcycWRwSURMaCYzOylVSnEsOUtGb113OVsyVmhD''@;'; put 'put ''M0t5ZTUvWDpjUlB6S0RNQ2tLOENHQlN6RVM2REZ3RGtxPDhHMlRTdE1uR1lkQjZ+QlZOQTpfTkxTQjJtZWIsKXUlQlA3RmFrPytyayk4Y1drQVNHTEJpLlFXa0puRG1faitfejR2M2UjWWV8UmpxdExKcSVnRUdZRltOKFVqbUFiR05gREJbTUN4XjQxbjVvdl5qITRMe0NzU0xjZUwmRkpWXixm''@;'; put 'put ''WysmMmc6en1yeWJRW3tPeG5zSDQ/fXQue3Vaa2g0bUkvSllmSUlGPmxuZHMuUXhYYTVGal1qMDtUSTR8YzU7bm80fDchXmBkUkhHWmBvTVk6S0VhKVRVY1A/eXFJRF12fHZXdWk+XXA6OVtoOFUkUUxpM1M5Ym9zZkAlLi9INHF9ejFxa28xTTg7MGJXJk9qWlRaaVlrezcyYChMMEozW0M1Rj0v''@;'; put 'put ''TGZ9bm1BSjgiLDBNUCxNPkhKVXghZS5pdkRiaWJRIVh2InRuaSQ7PkNlVj5SfHpUd0tgYVJwaGU7YiVJWD5AelEzaFBrLngjR0RXeSkxK007emNdZ0ciP3ljb0lxaHpOSChkcTBnKmh6fmo3S3F9eEFGQllpV0BkeGJWY0lNXU8qYU01XTo0TXs9fW8wfSQhKlBiJHgqSXRLUDh2S3lSZmx6bDRF''@;'; put 'put ''fU8/aSQqeGMiUElhJUk9aTBwSytOXjxrXSV7byJ7e2BTSVlhbE9MTjY1dXl3Pkx7UnJQdXt9QUUkSGpkY25XITgxRTM2TGVZSXpkUk1hSllQJTNLZjZFK3pRYEN9V0VAXlA4UGMhcnNePUBgWXdNc0MwWn1gVlhzIksoRSt2czI1MWh8YVE5W31bXSRHfV5XOEJEL1RrPCw4LFtDQ2MuW3FtQlg5''@;'; put 'put ''Vml9a15HKGYjNCpLKzwyRXpaa1lqMXt+REd1QV89XVtyfDNFbkxmRGJ3RVc2NUxaPD0mSkshfHt8XXYma0dXSWBjMy5RLCpuYDAhfE5lW29hX3dddmh8Q09EXjFxXy5Nc2dLfjJMXXw0R1dbVCwqLCxbel1Fd1tmeFE/QU9DQj0hMjBGV1U8cXgmMEAqcE13MHU/QG1NWkE5JEprJCtIcDpfM3l8''@;'; put 'put ''aH5sLkBAUyklfHl8dj8yVEFKc3BKaVU8RC5dPiVYYSFRMXt6Uz1JcH4kQSlVSUAwYVpSXShKOzFfYjJNX0oxeTFoVntlOE4/dl85YiJaUFlHWTtqNF9EZkluXVUzdCVMMjN9cXxvSkRbXXZIbzxmIWMkRjFxKS4lVTkoaTosPShjJixeLzovIjMzJnJNc3Z6UCklK1BxVlhmd3ppWUFhYShMdXk6''@;'; put 'put ''SDh2P2pgSk9PbnszNWs8MjVoUmVvcXx+dnJ1b2lTaTU0JT9dJkp6NHFlVGohbEo4Y3hqIV9+MjdsQ2FOMCQ7PjJZT3ZzNkhYOiYvLnQpZ0c6WmN4bFc1RjFEZCYpZS4qU15ZSXpwbHMzaF8kbm1+OG9scS9ST19DUTQxTmBaXyklZS5SaTRWUUt5UDRwSjBBenltZDVsZC5QTXh3aHZeKiUsXnt6''@;'; put 'put ''Xnpde2J5eW11bzkrOkU3WmwkdFleWWk+dz9pR3VCejwiW2V4Um89VF0kalk9dS5fL0hZfWAleEhiK25TZ096QkU1djVacCRjcFNKRD9reW1UejFUX1NETWx3Z0AldV9laUBgemRRd3RNaXBWeFAsMEwvYWp3fTBZWWFUWiVZe0d6TDlpKXdldW1FSDYxMSlWenlXai80S0dkfUAjSl15dzlNQT1A''@;'; put 'put ''THE1JFM2Sik5al1CX0xaInE1KWwsV3BTLkUkeyxTVG91RDQ+c3B5VFtCVT5UfFE6Rz58LmB4SiI/UHhjX3dUZ0twP1tbTHJdOThJS0VqS0V2KD9VMyRlZjdrPC5kIik6NDxedGhRSi9TfExDO3xXVF4qW3JMbC54Z2wkSzxfXltJTT9NSU84KnEzNTxYWj1tWjgkejhaUVVvZik3UyxWP08mOUlo''@;'; put 'put ''TSF8dk9bNWZiJTE9Kk81IWV3UCJ+KUtvVnZYSTFFJnVRI184blFhZ1JCQjEoOUF4bSUqMFBod09Jbm0+Kl9DVC5OZDdxTDw7YU04Jj0yeGNuIUcyc0UpJVhhP0JOODpPJl9NZlBoe1UjS0lzMXc0bWUzR2QubUg4LjgsUnNOazExXXM3NDA8NSRjXyZ3aSQxK3lfcmROZWxNQH5FT1ZdeH49XTFW''@;'; put 'put ''VF9KUVVOLDcsMyZBbnsxLHMvS3NmM0BLcVZHXVAxQFBWd2RbeFUxTyFIV0Q9WSphNVtLfU5KKSM9PV5VdXI8N3VMLldKY0NSLDImJDFtZlJwLFt0aWJBXklsTzciMC4lSWBVOSx4T3tlPilea1YzZiEyQzdTXUV5PGx5MSliZDcyPFUuMWEiTThkLjE1MzU0KHxebDhETSNGeVZNdz8hJEl9Wzw5''@;'; put 'put ''YUp2bVArfSFoUnRiI09Uc3wqI29ZfXFPSDZZMERkKzw2dCw6YExZdSg1Zm4yaGo/M29IbXU/QGhfUnwjZ0gjMVRFeEtEP3p6IT9FfWJrcSpSWTgkc2AsP1d5PSQ1e1Rka3BNT1YkS3JfPHtRR2Y4LHdhOFc3TDYwR3tlNz9Ee0xZdXFVJHZ6USQqUkJIKE16dG9pY2JpeSheJVtCKTFWMjBQcE1Q''@;'; put 'put ''Vjt5dTdfSlYlbUxIbENmYnR2SktsLllXYHg+WEtDZkpbazM/aEdXU3lmMl1YND9JaVtzZyw5RFRoN3FqKWlJWjtCRkUycVVZfEhwKEYoVXZeL3p8KUNmRGIlSnk+dWw/a1ptO0xdM2NBZ217M1F6SHMhWSpiPC5QeVR1WCZDTjFzSmlmPmJpIlRXfFpScEcqMjZgW2poc29pUT05cHFEXmRIXkxv''@;'; put 'put ''Qml0QHxzOXZ7RGA7PjFlRmp1WXYpNTdvYHohL3l0JEJ1Nik4cWRCRio1WVFEdFI4SH1BeXYoPilVLnA9LnYoXlhSanFeQSQuKzNxWXslTXw/RV5pZmI5YF5qZX5RR1ZuVjMhJVM2NDhlI2BPUiR2RzZKaDQyYEwqVz03bmpUNntWQihwPSFUTHJ6I3x3Q3RNdGk1VF5ramB6NjY7eD1FYEhONj9J''@;'; put 'put ''TlpUN19kak5aWz1NU3NRPipKbHojbndGaWtNLk9PX1ZfQXY2fG9EdnoxTUpAQ1pLPFpoVXh6Q0Q2bCM/YWBmVE4jLk5nfWNeMTdANGE/dkB3fVhJTGlPcztNXXlYbzcsbjlCfXlwXlhbejpie0x5b01VXlJ3Vyl+PSRVKlM9NHVKQ2BUNXxDK18iTlIkSkFMTVY+ZzpOJV9dLz8qSF5wTlJER1hY''@;'; put 'put ''UVk8PlZFJGIoWTs1ZWR8VS9WT1pTXilYenByMkNARGluTXw5OEIxXUpbenZRbyNhWlQiOjxYS1VeejRePVNRQnZ9U18zRShaKEViUTlFWlRfJEY2WyJ7JSRifjolIVM9QlFxWF1VYGYqJTAmantWQnZCcFM8M0M9b0ssSylRRXBnJj0zOCZiZUl4VFpFZjF7c3t8JC5aODtCciNhcjNBIXVJXWxa''@;'; put 'put ''S3NXNztVOUF7UndvYEZuPkNOTlBZIkgoZ30hOSwwSS42NUMoS19fc2c7aHBmWj8sTG5kSjM3ZV1aTyE7YUBwZmM7MnpPfGY/ZTdaeyUobnlZJiNOZDxGUCFAJFFNU3FAJFRgS0wpbkAoSUQ/Nmo3a19+UERkJCRRTSQkcHpoU19JZ2c0fDpGclg1bFdRMkxzMjQqbmNwTHMyXm9AT3wpJnBzMW5m''@;'; put 'put ''QCRYXSZGYTNHfU9ERkVBXjZyZXhidX0zU2lvNCN2OXYxPiVDTUJQJFJSYXdtaiZpVk0oV1gxKDdwTUJEV3ZwRUdgKW5tRHguXTFNbH4rXXZodENIMktubjF1KTBweD4zUElhRVJPIlheTmBqQnV8ST80NC8pN0k2dGRWe2xMd2E/OndrOnNVczs2S18mXnZVXS94b1I6XTFxVWpuanU/eUQ/ZiZ9''@;'; put 'put ''MUhvV3pARD9GLzlhZSpVbVJeQ0MycnhkN007TTovXjUwVl0iT3pWNHtMTyJEPSltRjAuSk9MbW5mIjBFNTk5bFBzX3BvMyVhUkZPJXwvXT5sb3BuaSI2RkpyPV0lc21PISlMaFZsPUc9JmNzIl1sfXFoVkQkVSszMSgpTFJ6RU49eS95L0RHdF9zVU59Qzt5P0NeJDtNR0I0SUxAfSVea00qMmgz''@;'; put 'put ''ZndqQkNqfWdAXSZnVGAuKkZVdXNjLnR4MjFKY0NTMD5veElkVE8oZUxlPjUwMWxvcWBjcDNEKjI/KG1XViVtaWtANFMoLG5PW2hUUiJUeG0icnxJcHY6SjV2VDp8K35YPVhxS2N8UHg6TGU9ZCljVG84RGpEaWBaUEcqcEJkNCl8a1VPNCtDTkcwbTBXOHg9byMjeG41OVBDezNwJiVDZXE4dSx9''@;'; put 'put ''WG0/Zl9xPDViIj1CTzRzS1FwfS5tbEwrXiw9OyhoN15keWokaiZpfTEicndUNUI5OyksSmY8YWIpPzs4PyQ6NHZVKEdDV3Z6e28hTjpNSDozKlBeQVNEI0xZSSJSLk5WRjJdSSw4dzJ8IkY1VilPIkZXV1txKHdqd2RjUDdrdGVWcmAzTjpCISJ8dFNZUyo4aHJzcVlUXl0mdF1qdnhYQnMsMlhf''@;'; put 'put ''XiZwcWB2VDJbS3klVlpfTmxPSDYuZShtMEhqcTU3WzVGZDsqQ0U5V3VPeyk+ZXJdQ0RHXTwjWyVib1YqWS5eQzNRVHlzTXNVUTVPZkksP0J0YEpgQUBaJG1sOS86Nj5nSGZaSHczWXZOO3gweSkpJWFJLGllaGplRyw1WHQ1JjtNNUBGKClrY1M8SiFWJSVEQV1YZSI8MT5ANShnVV9AZ0xKOnV0''@;'; put 'put ''JmRNXTJZdSQsVXBvR1ZYcGRnKl4mbGQjbm9kK30pa2wmJHl8VEFNXTc4Sz5kV117Rj5kbj9pdC8vMktTejFacWM0RFliSFdDKXIrVUdWdVMraXZqWjVPIzAmTCVLKiYzUiMzcEgwfDRIVCQzdWVjeFo1KGBXMihgV0oiUGJBeDFtbVBqRmRJVWQ1STVIVSp6d1k5ezMkTzxhSGcudVYzTTRtYnF1''@;'; put 'put ''RW9Fbj9zPzZ7dUEkU0hNan0mZ2kuYzw2aXU8OXopVXB8SlldXWAveD46SlBaTS5vdDlEPnpuPlIhcSYlOlMxb3Qsb2E/OmxWayQ2YihpKVFQdz8sRWZ7R089fGNWUEpUdjE9aHM1LHVnZ3Q4aXFCYFdfLjFvZG93TUhyMVBtWj10XVo/dkpzaWY8cWhjLHBtSz5peWBQVUdzNTtjdWwkQ1sxR1k7''@;'; put 'put ''Jj8kWCYkRDNyVSt1LiZTTSomdypeaUY1eU5eej8/alZtOHQoRis+VVVqbkQ/ZyI6cWldMjdPSGRqU3suKEwyRXxCW3M/QFpRX3VgJm4kRGE0IT9rNG1MP2hlNSJAJkQvZUhEKik9ZEtDKnt5Q0Y/ezNNe0tXX3tHL2hfMFt4RlM+ODF8QFldV35ALGFCeF9pRmljI21BQUh0Pk0vbFtgX0AkdElq''@;'; put 'put ''NVBYdmZBJEo7IlVMMWFASkh0bXBLYV9oVzRtR3Mpe3lseWA3W2ZCTVhGd0Q4Nj1WVVVGRiI9enZWZzRMQEtGaXFvVCMiWSYwIygrQVp8SmEyfVhER3l+aXFgNCNfaCxMP2hnQlIrJFUxclplKH55ZE9Dd1tgM1drT2ljKyFOfFFDOy40JDlRZ1BINCFpWSo2SU9CNVJJXzo1aEB9eypVUlRmeHhs''@;'; put 'put ''XiN9dTVpbnJzaiZ8UTRGeDZ5cj0zaFJvPX42QFYofHNnVnd9Oyp+b30kSjY9QU50cHUuSWhdP302QlNQLms1fTNwfUZ4NEd8LiFye1E9SHZyJC9GfEJbe25NcjhlYnFSRj5Ncns0PShuTzVlfkx5cHRYZTBLMzFpTGBiTFNmMWQ4L29QOUsvSjk6YylLJW4mX2c+MzVYWFBiMmo0MVRzcGAoXz1K''@;'; put 'put ''UDg7N0I/di47MyFycV9GclAuJl5ObXh4dWRMU1Q1ZXQyNXA+KEwvX2BqR2FfT3wqKX0vY0x1VnNHdWp1dC5AVVM+TDQpTnBJIUtMUzR+RzJ6PmdvNSt+YnQuOSpzKX4qeV1GL19oWzNzfCl9fC5faHZeTm1YaypueXhDTD9uUGB7bjQ1fkR6LnZzeHh0ZDR+Z281VS4qT0ZJekhSP34jczlMVlM1''@;'; put 'put ''ajReYFIvbVQ6VnF1ISxVZDlRfF1Lb1YqVlo1IzVfSi5WKUlfKjMrJW44dkteT2hWTF1ESnEyN0NWNTBAJUxdcWU9Xj12bmx3djReQkFHTHR9TU4pUmo9VG5AeSMvdWwmbn51MGciVGIuVlFaeTMsdF1xZVFxV1ZtOSZkImp3dmFIcXQ5Y04qNjFTLkI3Tm9OJDIqRkJMUmI/PEhGOlc4dTFUfWs+''@;'; put 'put ''VFlyQ1k6I3NnU1RMS0teQG1BTEBvVnh9R2BUZV5OKjl4PW5TYjJYOWE8aXh4N0FQNEhUb0UzYUBlYGF3I2k5THc5SlAuUWVvc3lafC4rJjMiJkJTJDZhM3ExTkNtSH5SMzEuKkh1NlB6TWVSbjlAXmAwNW96IUMjQjZybCJvME4kbUMkYjVAYDMvREpIMDI9enpBTV8hdVAvNXJTKW19blZUMSsh''@;'; put 'put ''TmBdRl4jIXQhUyZNWmJhOSxFIXI8fVVyNjkxLGEuJndwcChVSVskcUBAJFB3d0ReRnFLMCNqPD9BZTxzKWZQUWVbVFd3e3FFRHFEVH1oOT9bV1lCLmcxVHJ3dCZbJiVNJUxoZURFL3U7NiR3dlVxOjMvVXJ4dUhkZ3F4NTZDd1FQZSphaXVTLzxtNURmX1lMKUJWdjs2M2NsfFE1VVhoMi8kLEAh''@;'; put 'put ''STlBd1t3IU8wRUtefn1bITNeMikhQStdbyVjLnN5JSMqNyNILl0jKkUocGVCb1pULzxUWmN3JD90ZzlZJnBxZ153ZTNAe2gsZiM7KTRQJTdxZEwoNTs0KExeN24kSEI6JmkyKXAqcTN5bXU+QX4lPmYwdkc8VlNbPzpjTiteSDpfZm5FfmdZQSZpcWpkSlFBYV4oUT06SCU4SG5PMT5VbCFvaT4/''@;'; put 'put ''Z0FgMj00VjIpUXFZcjpINSZLfE5kVntrKVZyZiZLSEZeUnt+KGo+aFlJPFJEfVsoPWMpZ0tkeW9kJlFtdzc4Wl1oMHJiNU1ld2NGSmp2O0pFJnJKIWU+XkdTPGQpX2daJEx5WzBMKGQ4Kzsib2lRcyVSakJ9WVpUc2MqQG5KKy9ZRHpMWjVWaVg3KGkwZSl+bEY8OzgjYStRSSgoeks9TmJiJERT''@;'; put 'put ''T2glLkQqYDFEJVdGZGtgYStyKX1rKCxQRkMyakEhcnt8MXw3MiMhOUh8W25Ufk9oXSQ4LnJRdmdnMm1nIXpsTEMzdERSY3x6N1E2L2xfeTJfZzdVNT17MGwmZzE0XTd5MEBtelB3JjJGTFRNb1VBdzhHanlDbUc3UShsalJpeWgrYyViMHo/RUZmeThgVih1KDZsZGRiQnBhZyJ0aWBGdmBxLksw''@;'; put 'put ''clp3VG5kT3I6Pk5CYz5RNE40fmphfGZrMzsjXVNfNnZVdX1FZUEwNHp6UEdGJWpDc2YxLHMsJipHTDE0Tj0rVElLSVR4WzxuOEomLCFscntib2c9M1J0KUxxdUZsMSYwbURzcyRoMGR6QWFhT1g2cDBiSnhyfkxzTjdjblNGNkliY0hjfDN8cWhtYWpMTiFIXXZjTmFbK2AxMFlgISVDO3dTNkZD''@;'; put 'put ''NndXaEksRHAiKjczX0o3NH4mbypSPG5lbzVLMzNLWSY0PF5nfis0bjVibzNNNDh3JkBHVmlrT1pBSmh6cUxAbEFsaTdIUCs7WWdQYV1GPkZiYDlnbkhAMi9GeVFJRT9HSWZ4UyhGPilFdD19PUk4eTEqRzg8LCZZRW9JXjhZaXgzISQsPC8pVUBEaEtdT05seUgxJHIuTEdeRTxIRk9xKjZhOXpv''@;'; put 'put ''TmhLd3BzYkhmKCpgWl0zam58ITRRN2NCYj5AaVI+SERTOk5qciI1V2lOUn5Kang8PHhtc15MNC85RGh8Nl81fT13eCNALl1beCIsPCwsZU9ob04uJXtbelt8eVJ2VyV9PHtbfU5eZ1pYTUc3WSopTHttZDgqXiFISndbOWE5KT5bYF17N30pWk1MZjUxKV56OWJpJExhMEYhVjcoOSNROmMsYEs4''@;'; put 'put ''Sj5MJW1kRUw1TlVeP2RjKHdDIXxCMUc/bnMreDJMPTk4KlEhZjFLbThFTiV2YVR9ISVlXix+PVJgMXtsbS84bG0vY3w9WDFKREkuW0w7YjVAKVBoSnhiRlFUMElkPWdhQF45YnoyPmNkI01qPHNdbkhgNUk9NmRSMnNCcGozKzsxY097bTN3QzE4ITZwIjcuKDkhNkMoO2xWI30vLiw2dHtlQkhF''@;'; put 'put ''R3RdInxjZ0Z3TkYkKE1XK1lvKjshYXNUcykkcntZT2I8TFBUVjBtKT02SmNlSUw2OSw9e2sqSCJFbz0/X0F5PWg1PTt3YEM7KSlxMCkmUWh7S1FeZjwza31ebEUhVFVHQHEqSnZBRDcrIV9efV4vPmJaS2dlRDFxcncsenthayNmYWlOUjBJPTtQI3s/c1VAODY1fSVZZndRIm1CKEcqZE4yJDAm''@;'; put 'put ''PmcxPixadj4oMEVudVNELm0hb112W1cqOFV+a2xnZHBvIzppfj1MbnMkdV5tZGRISjFaNlkxRTEsTW1vY280dVI+WHhQQm1vN2JMNz9ATmB2NWd3JE14Y0tfdFl8NXFONlFwNyJMMlFDM1BuSFAmNzdwT2hhdk1gTDFARUhhTmhsZCw0UXAxZVUlTmB4amhgTjBqeDJ7SkBuclN4akRzPXg+dzhZ''@;'; put 'put ''XllhQXF0eVZWd1UqMmlpT3hyRiM5eXZvJVQ5MGB4NH0pO087eVU8OX1DVSJoYVB4VXs0YEs5V2lgezQickpAUUR8R1tdMj9qWFg1ZjpKZEdDOC9QJldPeSl2X3VjSHY8X05QWk1nZTBHYEg/OnE7YDVzQlUkcywuNUVmUysjTlRiRGJgRkdEPEQuIipAUDk5WFhNVVEodGYvc0w2WHZYWnZfdVRP''@;'; put 'put ''PSh1Pj9MQ11uWFlNZlBsZE5Sai9GRERhXWhfW1VEdk9vZHh9KXhANylwQUxAezJnaEpTRGE+eSRpT0lNPXErUkNdIkNFNEJ5MH1dL0xiXmZQPm08WndLX0V6NDEkcUhtKzBkT1VSWnMzX1EmbWRVS3pZV1pWXkUmJGpzcDRTbj14d1oocjZ4M0Iwe3JKIVkrWSt3JDFnVSEzPTcwZyFWPXFCPH07''@;'; put 'put ''L1ZJQ0lkX1Eld1haTXkzbCQkW2JAajg8QDdKeyQwbTxJTU9wOiJNS3YwQEUqc3F2eltLQ0k7U1lZd0RXY21ld1h3eltLU0k7UzJlb0ZITzpAemw2L0VpbV9OM2I7XlB6TmgpalZwI2Z9ZSxmeUJHdUhsTThmaS9zOl8rUXEsU1EkaW1gSyRiI3ciWy80SUBCV2chZSZYVHxGRGR1JC5LdmFrWWJR''@;'; put 'put ''QTl6LExlaTlfSF47dTwhKXRJdSxqcl44ays7c1BxX3lTVzpaND5uSyt+SE9IJGxMPyp0UTBQRzZEcnoqQ1FvYVUrPFlqQ3hHcUIhfCxuZTgpInk6Xi8ucSUrJU1xZFY9K3tVUnQ6MkxiKFdKWn1fb2AqQ2NZaiZhKzpCX1ZiLzwrZ2hiKXBDVSg9Ql9OPnUhLFlgT1p2ZDE3fm01RH1SViNIJVM1''@;'; put 'put ''SFQ2OTNhUFUhXS9+aUBNWF89S3hofkpWfW9rLDMpM3JiVV1xa1p4TCp6VXhqUGhkb1hTXS5ifHJVYipyMH1VOGFzNU1FMF4iV31YeVlqMjZjSVdoYil4MEtILEh3KS8iLlo+MGExZWU6aStiZjghKW9VKGo6RVpCNm1SZSkqSiFxfkpXWi5wTD03R0EpP3FhLG8lMWkqJG9Db0RWK3UuMzNBNkAl''@;'; put 'put ''MlI9LER6dnoubUFdUkQwWFt0bkJJMFdWNWJvO0pbRTZuUVs7LiZMdjJWcHEkNXd+Qip6NHRPeHVUcmN3PT11KzJQJEA2OCI3WCVmeyw8OVZnOnltKWk3PGZ5PiVoMz9FQF1YSno5dWlYJmpMZ0NuTk1fa25eOF9ILzNLMS8oOyZ+diExITlmRjN2ZTIyIylMYT4ibXxuOCgoUzRLRnchOFBHeXJx''@;'; put 'put ''VT9PUCUudCYydj9jQEJnbFltUy54NUl1dV4lLlM+IztTa09pXkpkY0pBMGJeWj1BQH5vRVNEJH5yOEcyRkRmVFA/NDYrcHBAXyk8aGYxdltqKWU8SHpPXWtWKDRSSCQlN3FkbDFhVChxbGJEPH5QNlJEY2JFYyt4KXdYKFBHUiNIVXpDXjQsUSZ1Y3RuMHxEViJAS3hyVSVNc3Ewd3p0MWQjUEEw''@;'; put 'put ''Pm57dVMpQ0RndE9ZU0ZpOXgkbFAuNz5nWTBEZHVFTiY+Sik2eXhLRilIcH5UKzRefTJEOCZEc1pia1s7dDYyPEE4dF1eTGV3aXksKmdxYFEhSzA0YEZXdW4mUTBwIXwwVDp7Wz5PPlpKWztpRSFYLHhFXmlQaS9IY28xV2ReQ1N0RlZaTnlEUT5YTHhdLyRRIypdXThhNTk3NH5wKjJAMWxHOD5b''@;'; put 'put ''Tnd7cHFBNUdQNURNfStbTj9yL300VitHSV5ZPXVDPVY4WlRUeVdsZmhpVE56O0F3Lzh8Lm1iQGZkekBAa34jKXNIOlNhKWkiT0R8NnNXYXlkcXRKVCspNGl0L1Iub355WVZ9N15rVHMpIUxsSC5wT189Zjo1TzVTKXMpLChZRChVXlU+a0Jte29HPCwhT35bWjcrK1R4TztqTHRWQDN2aHkqSkFh''@;'; put 'put ''Q2dIWW1XWUc9SVMmSUw1LiVfZykzazZaQEUxXzxIWHN5RmNOTW0jNXcuQUAvTVQmZS9hRn5HVnVsaXFnSUh1T2JNPlk4Wk4qP1tBaUh3MyJgIjY8SmwoM203LnNTc3h7LHtXPnlefXJtPyg2S2FARW8vXk9EW1pFVUZ8WjlyNDhafWEhdGJvPVkhXWNSUmQyVWFWPDNuJTN6UFdGJWp0VDV4YHdw''@;'; put 'put ''S2RAPEVANUUzVGZSZz12Jm1yN1tFN2RUaVAvIl1LQCJKQFRGcX0ybkdINUQ8Vmk8OU50MHJ2UXtPJWB5UXZiVFdAMDl8clVXQ1toYEpAVCZeOi8rJkpxSXp2XUJHIj81QDcpSzNWdlgkM1UmSj0zUE53T3J2IWI4Vjc3T0h3W3JVaEZ4OnxvSCwsRVhKMilBYVFecU5hMVBmcTo5eGQzM3h1MFc+''@;'; put 'put ''YHEoWyx1V30wUUx4XVVOW1RSSTUoMHtxNjl8bWZAUHNHfWosKTZJPTJ8YmY1NUpyVFNURzArdFVlWTtJSkFAUWlEdigrdThGUU9nY20hMTVHRXQ2UXREdGR8RlFpaiFaUjAqNj55bVJBTUNBQUFBQUFBQUEkQU5KIntKdGZyR2w1SH1OYGpCaTh7SmF+NDpgTCglJF9JZENJTlZEZGZfZWlULmFH''@;'; put 'put ''WjIycH53T3NYODdmQ0NtV2NOa0dhOFIvOW5FWHJlND56dCYlbCQ2ZltiLlhLOWkuYDdneHZiSEtUXyZpVHlXV2BpU1s0bVNpWUNtYW03YU55fXk/SE4wJj94NDtnV1Flfm9dc3xrSlZsbTdRaCpaaVpTPlM5K1ZwTXxQUFpLV2wkVzFjaiIsYVImJk9NKjJ7P2Q0YkBMeGA6W2ZJOEJte0QzfFUr''@;'; put 'put ''MiFdTkpXalZhaEI2NmA5cWxjIU1VW2tIT1g5JjNZa0AkeiJbaUc4cVE+ZTtrOXJTWXIrRFlZPy8pMURaZFUyPj1SKWUjM3hUQzo8KCpkRUJoaUBKPltmP195a1ozJjhnVyplXXIxXyRPYmZLL0BCMkZtSGJrd2hNYng1X0AyI3NNK2hybUdwYGIjZmN+MVYyb2FxK3ZYcVdFUWZEXnVKU3Fxd2VS''@;'; put 'put ''LHNXcjJMNmYoRXF0S3thKjoqd3gjIno5ZEFYInZ7fEBNb35laiJffT5HV29RK093dTRrNiVkMGNsJjNASihvfU9VeG97Wzh6R3s+TmZjbCt2W2tZMm9Ve0BQV0p4VT9wL0cyWUJfNFhtTmZdUyJxPThRSkdtMDFZQW1oa2kjPyFMKSEiTXBMPEBbbTo4RzN7YjRSfVZjWTQ4K3MpI2EkU3RBOmcs''@;'; put 'put ''aV4jX1tPUUs1VEZ7NHN8TltqaXpvdEEvTSFNQkRnXSpmZTpDbzd8PEJwUT48Xn10ckZxYDYqQCtwUTh9a0M7UTo8S3kucG9eKUt5JXNKaiwiYVgxOVgxKV5Ad2owS3RTXSVXKVhmIWZRQGF5djl9Lzt1PmxfISpHWyRQSDVCVn0hTmZyREgsMGIvJEZTeElfLGA2RUtyU2FOK2ZGSnxGODVQbnIv''@;'; put 'put ''ZEJbKVkuYzRVd1ZyRFRrdSJCI25CX2J4ZUdEMFBIZW8mcF1zVX5TXit7ZEZGTSFHMjJqeCopYm94QmpaUERefGxLIl1MZkFYWFgkX2tLTXxqbEAjaSorQTVCcH0+M049bSV6NXV2cmQpMXdUKm5ZaE9ZISUyaW4pVjdda3xXcldFLCFWSkhuM0lEPzppWHp6JF8wa0gzVW13cio2S0RkfiVbLilw''@;'; put 'put ''RjVdWShHVSR1XX0uOk9jWWFsMnxNVitOVzA8XjIzOHpwUERYajpFJEt1JkwwQiUvbzU2QmFCLH0yQTBnYnFFPWN7QE0yS1o0SkdsejxLI3ZEP1FDUEUrVms7WHMhP3B9InwlJEhoeCN5WWIsXnE+LmBJQiJUNiMwZi5qdWtpTzdEdlkwRWNsQGhtTnI4W1R+d1Z4I1dzd0M8ey9eX354azV7UGR5''@;'; put 'put ''SjozRW81S1RlSWttQXtNNF88fWNMfTxudCl2WGs2WDJ3WVslaG40ZEZaUn1DJl9WQDRXQCpSU0lkUT56WzJbMEMzfGxIbkpbdj1Fbj9yLGxLMUFrb1c8Q31zOCV7eD5nJH0pO0NoMl94MVhuQ1JoZXN2c0xHYlh0JksiL2JpLksheVovbnRnImtlNkMhMUJhaHtEIj1xIzFUe2p7WVZIYjgraTlR''@;'; put 'put ''QHZ7OzZgYUldYlBDbnQvdlZENXxnK2E5RXs4MD5sQSoqVlZ2SXhfLFlbO3UrTFFbd1Z1Lyp3TVIwQF9gW0J2MEAmSG99UT9dQ25gcWxrYjd4Tjg9Vyg0Y1FfIi92I1NxaShTUzokOSZKPzJQQzU/QFg9Pl1KQ2N6YnxvOzFLc2NYL1h5fiElI2h0eTQmP2IrQT9XR0l9IUg4bkZeLCMoY05mMHU3''@;'; put 'put ''Um1KVilCR05qOTtwSSYjI1QxUncrZ0drfVlzdUt9REtIVDVAKFluTiVxKXNyamc/cGl9TylbUSJrXktDdU9rSWZBN0VHXlJhP3hBWn5xMXlIPio0Vzt2aG1AY30/YVNBbU4lJlBtQmY0VnAmTSx+bT0oWzVsMWlNKlprdlImSCo4RDg3MnNpMXBtOUZIPC8sdVlmTmcjbjxWOVhyO1kjSnxQZ3FF''@;'; put 'put ''azJ9KHNdQ005TFZLImxQT0lGbllSJSRINjMsVUlsfUouZSolLF1zInt7PmRnWi9oRSxhYHhhRikse0JrIV1NRVVmam08ezF4al1fdEJMV0ZEPFA6cFgjdDUxS2Q3WzFffTVjdzByZUhrZjQ1WV5dQ2JeeExfNX1oNUZTM31mM3BTVyR6VHxyJU0+LzhJPEl0V2YxfGYuWC5oZjN5LnVpX1J0ensu''@;'; put 'put ''b2xFTy84X0JAYiZJYXhRLi9YXi5BSmh3RDdOKXRJZVNDYl0xWntSTUAqSllPWSY7fXA/cSQ8Wz80fWdtKWwyX3NUSUE8TlhxajRMQ3lpImAheWErL2ZTbkwoUClockV8ci4pZ0pTKHhJd04jPXF4O1JhbVlQLmMuUF9sOTZ3OXx6aE5ob1g+NUY1P3hEIyN0U3ZmYXw4ZW1aRzM3YzgmMl8zP31a''@;'; put 'put ''fj9ANTN0c01zaH0+RnE1OnAsd1hNKiI7U15nR3s2RnIxbEE/TmA2amk+QXVaVGY0bj9oOixHP1QvNEdocXFNI0U+Q1tZR2ReYTJhO0lzRSU2bzAoYD13byk4QE4oYzh2dnU9MUQ8PS9aNj9TdHc0JlFDWHAjSiJRd1d5dFQyYmElO0p6ciNAandbS2Q5XlojQCVaQnFefHNyOHx0RXAlWDpCYjZw''@;'; put 'put ''T2kqP2hGO0E4Wnd+bFVPazx8ZWNEMz4+SU53IjolUWdAbWhQKStWY3xkUCthYCRyfXA2enROaWdqbHR2KHwvRDRvYSh0U0RGTSxSeU1BNW1EQX1YXkhGOHZuZHhmRGArQE8vOGQ8O1VAWHwwdGBJZV05OVt+U2Ave1tQbiJBNGVUWTJdRyUvc2ozaTRSX1ZMaFdxRUdddyNQWyFmVFlHUyNyI2Jd''@;'; put 'put ''em5BRzYhRGJ6Rio6c1YvVkpyQkpIfixIIkY3O34vems5c1RvPyxRPn5BI3ZHbUNQZl51RVYuLnw8clZrNmdXTSZGVT9mJnd8Oyl5eEpEYG93fTNEZFBAI1JYSiRhJH4sbVokQjlOK05pfmpIcz9wIiw9U0tOaTQxTHdbYSEydipRYU9MOEVeVmxpWDtSJnw3eiYyWW1ERSEwcn5jfDB2KE5uaW8o''@;'; put 'put ''cDdWeWc6MmRySW5wdFpFUU0+PnJEdyopRl0wbTdiZ24/TCU0JlVWcitBV0NVLEt3bGNHcSthb0EvLyM0cCNDTEhwfi9GcG9kVEN7Wk48anI4RmVtU20pZGw4TVpZMChSIU8wNU8iQX46akNIK0lUNWY/Tjo7VjU7bE9fflpAVit6flEpT3cxUFZ2WUFWYCNtXyZRb3FyRC5dMnEvWyZAYHU9Mmt0''@;'; put 'put ''bkZaJiU2UUJFUn5kPShtVjd+TWxsP01ySzpteVZdT1A/Qm5bMG1SPWFOSG1Aej4hOnozQy9+XzAmZnwydEFfQHJbLz56Y3ojcV8+Y357SnBjWD5KIk1gaDxTTmFIQnZSJCEyVCoySGRLPGR0MWBOLGBZT0NfLGZKSWxeUD84MEgjWHk2RntkJWpFXUxRZ1BRTFNIYUViUypAWVEkRz5WSFNLZi5T''@;'; put 'put ''WndMTE0odCswQjNvSHtrMW1zfis4VFQ8diNBLDFEbGNHODFbL1NQMypKMFcmNS9iRlMmSH5LamglX0BbInpSWTljNTdSREQrSStTVSNQby9+fDBRTHFzdSJNTkhHVVMmWnhHXWpmXyN1O2t7YUpsSFUiRF8zdV1WQCsvIkc/c1JSLjYzbnx1YjU2Z1BaI3Q2MlR0byNkMCtvcS9mKFprWEQ0bzhH''@;'; put 'put ''L1l2c2QvYGhSdVlsYiRDVz1kdWYqdD5sTyslSCZoaHhHXkpacEx4TGtzfCYxQSFwPXhbaXxhIWRBalI5P2V4SltfRWQ3NHRmbm4/eUQpcktqNVouQlF3Om44R3psdXFHdClvPntmdz4ofSE0aCx9MUIhLnxQdmQ3RE48bS4pakdCZXZYcnJOXTppQXFgfnYvVS9nZjkhczNeVFhCdFc2SEh0aVBP''@;'; put 'put ''YHMmJSQufGFaI31gT00qdWgsX2pdazFhLl9yTWx5MntYWjQ7Uy4jRjIoQDMrUkc2bkJXJmk+PjM2OSx3K0NOW0wuS0s8RzFkV15fVDs9clY7ZXkzYWhsLyJSPyZFPjxDUE8hKnwkTiJxQl1WUCV4N0V8Y0lYSz06enlWdy5sOUlzJWslSW9YR2hwSEwweXhyeXY7U0ZAKks0SjtzNiNATk5wX3tz''@;'; put 'put ''MTEiJWVQa1t6Tmg6RC9kL2VLMTdQVj9CVSZaUD9Qd0toZVMkW3wrLFZjNEN8X2RgVnZROCklYVNlK35LKXxYPXBCeiN3Z0QkQHkqcmhDbVpKOEpKIXZdUX1pfnJ1fmtlamMhXSRnNldjRUE2L300PX1jRCp9JCtLbz4vVitCa3xQfShMZEJtaTw+KFgqMCRPWXM1ZkJeUX0jWGgyPC5+cnBAZ3Bh''@;'; put 'put ''aF1BJEtrSmx9RiR7X30hR0UlXWEqTipxVVNlXTU0cHdAU3tWLF4kMjZEdy9naURgTjxtZGorN1J+bURGdW5ic0lkMWdKaVIiR20yez5ib2U/SzcpaXA6akF6JjY+VGJgQWxoOFVZcj8oOnFlfXQpK3Jad1clSEcuXkZlQSg/QSNqT091Kl5tZ0JHUVJtKyFlODN5V1V5Vk9OaismM0Y1I0dWSmpk''@;'; put 'put ''YXNmMElUVFdYal9hQmkza0IiZ3BseHchbVtjOCRFN0oielAvRlIpZz5HVE4sXjxYRXY4NkZ5SU9ZaDpOeChUfUNJak44JEpke3k1blZdY1pCXVpPQTUuPktZUy46YCtlWHoqeVFLdFVbWnhGVz5RNjRnT0Y1XilQNmNNbDNyUXR9Mk0ldHpXZzYoeixDaW0iTVRRIjx1b0guQmtGeXVabTJDP11N''@;'; put 'put ''SnVtM3g+Q013MyJIL2lNJDUuL3hlVSleMzNpeXhmJkJHQDAoVSJ4ZStXOyFmeWdzUlokdiZVMVpIJGBUYTglc0tpY3hkd3k7Zk53YVRwYC9NbGs1ZD17SGhYIWx3S2JScV4kK3YrX3tANWJ9V0JIV0NFYXJJUUM9fV5fdCNiaFE3STc6VHRBVHVKWjEqRyJLdikkcm0id3UoQFckVk1pZVQ4KTo8''@;'; put 'put ''KGl8OnBoOCtkblFxTlVaZiZ2L29Fbmh7VlcpLEpMbyhNYiMqRyRnREBJKWw/dXIuOiwwNCZ4e0FkfnsoVHM2VT4oVSlVbkRwbWtIJCsjfD9PKmN8SEklb0diPWU4OWFTfSxSelg+ZnZtU35EcS5QQlsmT2lDYVdFKzZOaT5HVnpeSDl6JjpiMXs9fkxOWj42VlZ7Sip0QUNvYCx1cSolWDdpPW45''@;'; put 'put ''UEpYUjNXRClyYDopUV89WSgjRmpFbFFeX0FwPE8iX2ZHOyVuQnloSUVvV3hNVGptZDNEZSglKXtmJUg6NTc6VVVKYV1tR01LNU9lcH0wUjkqaEtIZWNDQGpqP3JLYUxfS2F1UHMwbzxxPlpPMy5jfFl+R0wqN0pyPWYxRFUxcHZ9XzVrRE4sOFlgcm9ie0F2R19KcGtabkJpWG9DRD9hbE0jOSpP''@;'; put 'put ''QHpUbkFUNjIuaEshW2VTTnxnTjJKdmhSL0wmMjhXPTBlZWl6aDdKIzBKPDF+amIqaG05OWJKQjY4KlhdSTY1Ojd8SU9RcWtsZUBSb1FwcTx4ejVKUChzQiZ9Y2lNfWs1KFhjPFdmSCtHfFMwNzk0YWBzODteOWB1RkhMN0YhUFZiZjt1L2xXVzFER0NtRSJVUHxNPWQhdUttWG8uWD9OUkVeUHBL''@;'; put 'put ''OEBkOSVTZkR2YTE6dilhfnJ2dnVweDJ8TWBaQUBobWc6I1JnOyZiQ1V1e2o+LCN5NmVjfCwrUSptX08odERrZClRSl5XKXUpKWMveE5gWTB6QXNzRnNTMnJLNFY4fVQ3Il5UN053aXkkVT9yXl9XQUZ3Ri5AKXJvOz5GSl0icnhGZFtqcGtrMS4sUzw+RSR9JTNaekshNCRXPG5+b3RlNkBqc0VC''@;'; put 'put ''MWN9KEFQa2I2SHU+YGQiLHJzXzxrckI/VjVoLmhDdy8/RWNSWiRoeGQzQEE1KiJXVlI4U2VaPU1QXWJbTlNFRU5TU1taMU1ddGxwV1ltNCx9MEk8ZDcqWl9AS0QjRHFgT2BTS2pQIXpZVCEvQDYpYGU5cGh6MEJmM2lANjkxVXkuRCJhPGY5WFRIaFRBSX4iIjdUJHNWSzJ7IkBYXVs1PGBEUU9H''@;'; put 'put ''YS5ZVzt8STJOezNJIV0qeV51R3gpJUxsXmNye00zdiN+ejIuUDBGOE9+SFBqJm8kVXAyY1QmQE1UVV9wVDlfIk8uZ0ZRTDokYjRROXBOb1ROaVJzcl8+SXN6XXJdV30pcW93PT4hQ0Bhdk1oNlclJVokWDUwY0dbfmdHa1VYRVQ5dzVNZVcuSUQkOnUqKXF2cztNbTFPT09LLz1Rem9DbzlJUnF5''@;'; put 'put ''Qy4rK3tqT2VMYVsrQS90TlRJKylXbUB5I24lW1M4T28mU2I0Z21SNyQiSH1vNyUwYGVqO3BubjVCWDlJbzYqLzh6U0N6emhPaFNJM3BTUjZmd11+eDIuSjBfQX4jTShhK009XWE5YEtSMTQmNn0pNnBNdWV+UzJOSGQhQDVrMjdCOzxeX1FXPEYjRi9bd31RZnFffmBtMzgyRCJAfCRJNmx0ZEVj''@;'; put 'put ''WlRRInE0PWdFT202WDFXVUZrSVgwdCpLejhGRUxHSkhrKXpyTj4jZWg6OVBsbmcjTCMmUztTIm90UkJXMk95SVg4WXZiKHlEXzkkbTVUMU1rSy9oKys8ST1YSHxPYnRJR2lPOz4mWXAkWTtKbTcvSnlBRnJgW1E+eVN2IkdZXkRYRjBHY3R4UypZcj90KlJyYXlpSiZIT3o/Z1hhfjZXPDFFXW8x''@;'; put 'put ''SCVhZiZRKW9PL3tQNCNPYEs+MDo4P0R1WGxfZzQ4b3A4OlNBPTdiWWhzNmJ4UyUkfDo8K0E+elNbMDgsOnt3N308elg0UkBKNERtP3IpTSp8ZCgkaCtxWzt+cEMxWVVvJjprMjphJCF+QT0kNGNHKDF5ZTdqfWUlSEZBLGEpXWdwKysidW9dQUppWFpAU2d6djRCNjh2fXUhY0hTQXhuVUFbeU4j''@;'; put 'put ''Wy9lLio+PmBvaHAiRUYveUtyaEAmfT80b2RLWiMhKFA6dWJUJHQ0SVgwRiolIjtaY1g+NGxpQHNnLG08IW5ZYHV2NnhdIytSSCVYQiQvcU1jY1NYZ1NLb3dsdFJgKy9MV3lOYkQ2dSF4d2hFN3dObj49W2U8fC4rJSJpYVooKT5PWUdFWFBZK0g5R2B1a1MqVUV7ciFzYStDZHlnQjc8VSM4U34m''@;'; put 'put ''eCVKRGc6VGtJandWL2xTLH5XcjM3Klo2LGZSNkFLYDQ3Pnt3TXVNZV5ud3hvYk5WSj5TampPYk06On5ycl1GS159KzFjPVI5LHhDfEFtJERAPHpDPVI6TUAzTiVsYFIuZFtKPig1akpmezU7eXE/MHpobmBERj9feyF9IXFsU3tER2VGPm9tT3N6KnZXSkh6QCxpbik4fWg/VCxJRENSSXFzbDIu''@;'; put 'put ''T21fOzAjdmYyO3goQD9xcWhfMEtGa0suNi9iUEZmN30+Ujd3b3d8ZXNVUmtMfnFadUo1W0d+Mn1EayhYNjgyVGxPfl9AeXV8VVJHcjFzNz0wdzAjfGV0V2RQKEh5QzZmcVAsMG8rZFJjQVdiK11WKnFoQDokdlp5dF1CaWA9RkBTPX4zSndzRmE8KG1nfSZUfkVsP0VLbF4vYyxydjh0NlNvVnQz''@;'; put 'put ''UFgiKXszSTh7NnRYdjlAb2tsaWowM1ZfJVtJR0U9d3R4P25TfHlHZi5KdSQ/Wls5X188b0Z0VU8ra3d6eVJUNGhRTXFjSzJkRVVBbnRdbzVAYz55T3xlTElLLiVrW1IsMHAzeS5WLDVAYExXPVNuIVlPbnokZjBuJl5yaHNZOXp1Zn4qfT9Xb3c/Ym9kNUFzdzA7cnY5aG5tUFchaCJFOXJ2Sls7''@;'; put 'put ''fTZ4Yn0/Z3EqPW1fZnwleVgyMT1iNDozQDJiVGNrT30xbyklV0x1YT0xbn4hfT57OWdZKzJpcSUlRC97UDg5ZkczQHRwa1tRLCtESypAWEFNIUVOREl1SHt2TXBTfU01WjdwfS9NYD9nV0tfY09QQXpqXz80MG5gSV5sNW4qVTdPdjlnK092WGU6eDZ7cVY9VVJpL152SHRiTWx6L1gqM2okJWAw''@;'; put 'put ''MEdWKVJPaH52OVMrNio2JVlOdUh5fkIkU1doKj05fXxWXWduZT40dUl4NE8iSjUoSUpYLztHaXQzN3h8e0s1TnA9KCpfWSJXZmBifUMqMis8JS9IKWh+LkppNm91M2lhIXtMYCl0XXIzZ0gsLGVGempRcHJMTUhbbDo4YU99NDhBZD10SFRKXW9DfnVZelVUPTYlYD4vT1cjKjJSU0YlYTlhIm8r''@;'; put 'put ''NixALnh7MHcsTVYoU0hwd2c8NC4jJF81SlpZUkFLYEBqR1FnZX42SHFpfm59Z1l+OXkmPUcvX21IR3dFW35bJW9jSHNKakt5RXxDIyNPUiMwdVc0JDV4ZnM7Wi4xPioyZXwjXjtOSWNTKlJ2M0xCMH0lPmE+JEgpcj0xdV0mdyIueCgzek5kTjx0UHVzMCJfVmlNKypocyF8d0UhZWo0cW53VnRa''@;'; put 'put ''WnAmV19RJXAlSHU5cjdzaCwuLko8JGFeZTxyUlo+cFY6ZSMzPWM9PzxLKG8qL3o1e0BXI2Q6Wy4xOnBPTDprSFFNMjp6I3QkTF4jSk4kaDNfViZObls+cUIkYEd+Sj0wTDldblB0PlBsUEBkXlZza2p2Ol4iWjlzUV0sdHlgIUI6SCk8dn1MYSpSPy5GcCouTHJBdDl9NjZ+TUBzPkphVixEPkBX''@;'; put 'put ''bXZgYVlGLmNXe0N9PG9HSiI9RGpseWYmSVo+YXpzfSQiXktVMTwweihLKn5sI0luXlR5SjxFQCJIY0Jzdy54SHhlZl1eZ25bbERjRDdDW1cqRVZXL1BwY3x7dEEmTUA6PzRqV2VRZHhxYXlzRzNDbkRgPDpdOkNxTl1+cjk5NnRHRj5fZjBPTW9PIV5tTUEpNXZtPDtGPDNYdjlFJCtGPCJMIj95''@;'; put 'put ''RnJAXSElLnBncik2anZva1pRLDU/fGR1YVpYPiRXT0NkdU1pSnIqX0t4Uj9ac2VVNzYlKS4rcyo+aX1aMz1dcz9BMVNCLjtfJX0rJjBwOTBlaXZAUndROitWV0I7I19DOkUvfWs2TywrQ3ZvKDxdLD81Ryt9OzdodE9fREZ0JEQ5eTExPEBqOGE4M0ZBOFBoJThnQF4lKjBUWHwzZVJOYkVIKkk4''@;'; put 'put ''Pz5bXn1HNXBiVSR6VDd8e21CflZyS2NqQGA7Tj9TfFpPe0Q7WV0zKWJnIlJOPioySE52TXRCSXEpZFdZMXQ0YmpVND1NQ0ZvI1dGRXEhXW00MSt1P1ZqS0hIWHJWMFR7YC9gS3l4ZUZ2ZXRHdjtbN2NyVUU9TmwlNjxnL2MqaUJja2t0cHIjRnRVenVrfXVrR01IISVyd0BwQEMheSUuVUYwfmpl''@;'; put 'put ''Nj00Ryw3ZG12YC4rIyw7eUwwNCJWTi8sX2lBb0MiW2h1IX4oZVUrOj5uPmBtbHF4X1szYkw/OUBqZU5tVXU7VWEpQF53fT0sX3FRJGRrcDRJInQpbjR6d3FxLzJGPktGZUF7ZHo2YFByMVEuTyp0RTVyZlpEVC8mKkE/U2RBcVFdQDZSNDU4UENxLyxZWEpbZWFSXTNHZjV7XmFabHxofSh3e3U5''@;'; put 'put ''bT9kaH5CVEdVWDFJL1QheTJFSn1mRlZZfio1JT16VWZHKzlJVyxAfHl4NE1QJE1wPzolX144P0NGUjkqZ0hRaDcjLGVAMGo1bnspQmEjeXs0TXB0YioiWEY7KHtJX2BAWF4uLnBvVyZQenB7PFFYfjcoMChFXmV3NCUiVGx3XnZQQXcqdSJUMVU1LlBlNTlRWFhCMkA3Q3lwWV95Qlg8U0teMm80''@;'; put 'put ''Y2VNdGdWdyxbYkh2UWF5NyQyKWgiaTRFdFBLSUMqcCpoSXl2RSheMVBSb2ddV0xHPz0udnRJJUpMTCsuekVkeForW3ZxMmNJWy9YY1lNYEVaLiNnOUNwOzNtVzF3clYoKF5MJX5OS0NSITwvJjJLSXhyZTVIRjU6MEhIM3l6IkFaWDp2SGFgejY0MUslOSxSQnZfdFYsPyNbJF09TDJ6bmRST3g4''@;'; put 'put ''eGpSfCxNMylCWGIzYDVMOWU0LmA6VThAZj9Gb092OHYpaTEuUSs/OkQ3XmtQW2lGX11CWTVSY0ZoPXttbkNYMG1bbFZQWzQqaW9EWUtVdnZPSWhZQnVicG9aY2hsYncsZXR5RihQbUp6fEozLExVQTNNVHU9b3s2cSgvcz1Ie08mSHtWYCE3b0YwTzc7amRDLGVyQk8ma2gjI1R1RHZfeVVAOjJW''@;'; put 'put ''eFU4IWNLUkU0M04lS0hGYEV6ZlJoZ1N2STojPzZ1d1RYa3dmN0FvL0FsKlh2LiFsamdxXkQyRCU+eDo0SlBdMyRdd2UhWD8uUnMzXTFoSjh3WCRjUEtgUnx2UEk6aU8vazk6MHQrdlkjTFp0XlUjPGpqdVh0NTQlLyojTz5uMCZHNE4vTykpPmZtJndmSmpXJFJuS2VnQW06Q09vciZQTEJzKChB''@;'; put 'put ''VD54W3VgJTUhJWIkZ0p4d0p7TVN8fSZjSEAvYX4hKzo/T3huY2dldCF0VD00TUg7LHhXLkd0dUxbcWVWTzgxSn5UZmdjZkF8NCpuN2Y0WGtiXlRNV3Q6Jj9jTGwyQk07P3QmI09FblUsUlp6PXpgYCpFPkgod0U0Y3p8QCRQUEpvM15zX3xDeyRZND9IU2lHRV0jZVJbN1QsVF5yJnRNdXVUWjRL''@;'; put 'put ''bypgREowSyU4JFhYKmB2W3pKX3hHIUZZZDlWO29GdltaWmFwI1RLY1lIejxTODFTIXQqXT1NfCMvcmA0OEMhPExERzJCRHAxK3hSdF82PC43RVgmajZbbUsscmBWYUJpOj8zN1dbclFsKHNKS3IsODosYE1HOjEkaEthXyFJODhGUTVhWUN+XkwrRCt7JWNDYWJHUThHMGlfWW9eOUc8fSJUflBv''@;'; put 'put ''OWVwKXR1bXx1LjBbVChtJUosZkx1b3RIV3RPaFJuPHpvQzIhYUhHc3wicVJjd0RwLzRaQls3bjFmOU1hdlR6TFl4SiIodT9mNmBaUyNFbD45Mmh5VmhPI1giYjZRYUlaeV8zUk00QjxOTng0X0AofHA8PFk+d2s0KStGO3E4ans+b1lYLDtUWGFHIUNwIVUySjQmQTFMW2lEK0Z5fm9ReXBZP115''@;'; put 'put ''RXJTLDV+UWBKWUkvJEFUKmw7N2FzIUo7TixQXm4yLltkezdvaGwoSVZQT3pGVyx+TyN8Z2YxP1tudG5YaV1lWFhMYVlqYEJRbFhwRlBJdGVdVF5gfkwmXjxoeF5UfDtLfTZwVzwpa1JJPEVnZEU3WV5aaE9fPjNjSnA4MDtqLyNARDVgcHpUPz1WTTFhYUdPWylTOEorX3o7bnsmPUU9UEwmUigr''@;'; put 'put ''N2IqcXZrVWYpQn4kd0IwS3kjQ1pTQFsrS0dVXWB0Wy8sdms/QC5fKmM4d1p1Ji91MWc+UlpvQE0hLGteQyg6TlEhYixkT01hZl5sNVF0djQqPz8uSjIpKHlxYiJiMSJ2UCRRKmRxT3F6alQ4SzUsZGs7LnxudCFlU0pUVVpOMD5iWXRvQ0BPWkVXJU86cCMkWj5EakpKZy5+ODdpUmo1VH5HRUZQ''@;'; put 'put ''V2s7TUVrJXV5Xy9TSmE8UV1HPHpJMHFgJlJfRiFASVNZIS9TNTVfIlRrQC9WUCFGVGkpRHouZUNqKkllI3pZNS81ez1LZVMuRnE+MVtQMCJ2N0A4TS8iR3B8UnxDZHdAVEJhfEsvaUtHSy9URnhnXUV9NnxtVS90MVBeSld8I3kuXXMkRERyIypZPCt3bFRIXkg5YE0sJWd2NEBjK0FGZ0N9fm4x''@;'; put 'put ''YiNwIk1oK01za1loOCt8L09LbkE6S3xdKVZ8eVV+OiY3RXJrKUQ2SE0+cXlYR1JkL01TdXI5TTp1VmQ4ZXFmbjshaHFKMDN+Z19tUFhyemN8ZX0mOG1OP2ReNGRaaSpxeiovRCgvMS85NCw/fnY/ZW8meW09b1pWZFFpeitnX3xENm5IWj1+O0s8SSsuLHdpJUdNWHNAP3kwK2pgSyxuWDwvQEhi''@;'; put 'put ''L2QjeCklcWc3Nkomb0x3cTh1LGA6dF8zKTB6MlBaIys5ZVgyKmR7MkVvTkYzMFBodChyb1F9Knw/MCtZLGM/Vj1pMV9GZ3FaRT1fU0hge1hSLkY7aHE8RjokTzteRT95Wy9kUHRLZyFaWTlIT0ZTOHNVPDlTODhaNSwyKmA3VnFqN2ZOVyFzeUp6RWdvX09OS0NnNi5iRUhaMj5Pe3VYe3d4bkkh''@;'; put 'put ''Pl5feTtuSXMyYUtIa11YJnY9ODFXcXxaUkA3OmAkVm45ck9BYzsjQVhocCQhW147eUFALy4oZXFuTDUqTmBxL1kvKDJ0WzFvfSY2TCI9X1NZdGpBOT4sYU1DRGxJbHckSiJZd1hWTi9BUUo/a2BULE9maj5tMU5lU1k1OjhHN01mI34wQmp9UUdVPiM5KSx1eCJNfllQWlNObiF5bDp7OixAR2xF''@;'; put 'put ''JV9JQEhsOUhkPjxEISRrcSkjPnFdWHsuViUjMkZLITRQYTdvdTtqfVJlai90TCF2R09iYGlfLkxpU2FCOm8yPVVYN3RvcjtbWGRRJjJkPmowJEUidiRlPHUuQVp9bHFiMTVXTHFBOkM/YHdTO0NYb0g3PyNbeUNZbU1Za115djplcileNiRMOHQsXywlOTl9KWcqRks6ekVzKGJMU3svXVJrZ1Iv''@;'; put 'put ''K0VBV35fbHR4d3B9VWNPKX1ybm4sVlgsNiNldlYxR24/fXFucWhlR1AlP0BKfis8IzdiaGpGe0FDdD9fRXozSzwmbD9NcDZvRF9kQU9ocFQ4KU8+VVNfOXwoKWxSZEk7QlI9fkpyRio4THIwdTNsQlQ5SG06V01kbEZGXXw8fjJKJT1meGl6XnxbfWJDcGU1XytRQy9LWkx7W0tJdTEscHRvWF4v''@;'; put 'put ''NnFBeiFOMGw7Q3JOO0B7ODpxUEJKLkAkTSs5MkwzcDtCPGRrYFJteE1jOX5yZzs9R0VYP2hicms6VFNVYW9mSVpRJktTXXZaTVM2MXBbWWc2dkYhbXBGV0xpZVV4MEhlMHZrY1AlOmNBSE8rTmRROkZIQn5xXz5VJls0Wm9ePSROQ1hOUSF4Ri5QRTksa0MmT1ZYIyJvQSIlb3B8JiMsbmskK3xa''@;'; put 'put ''QSthJX41cXEkUzdsWk0iMWJrPXo0OmxBMUA5a1B+bEMjVTsjbGokc1J3NWRoMzQqWTlPVlM5dDtWL1VdM3ZwPUN0KHpCa1YlSlZhPHsqXmB0Wy8uQ11sa0ZFcGI1ZX1KLDAyMmsudXp+VilQOylrSmpIJXJfM3FOXzU+W1ZnWmZPanppP2R3Y14jQGc7UnQ8c01XT2d8KEpqUWNyPCZGMHw3Ll4i''@;'; put 'put ''LkdCRG9nY3FlbUcsV1R2YGs3MTUqZlg9VEo8I0QyYVpNLHRCM1ZzU35OY3kuYVVRUzdOS3lqIz46MVcmLyM7bWVMZzVLd0wvPl1aJVttPUxkaT9HMUZraDl0ZG8qeXk/clo7amhDMixHZGoxJEIqTmI2cXU5bnZpYjFtU2kvQk0lRi5RaDpYPGRbVzQwNzAqbFM5M0c0PEg0MU5tfk47fUd4OzM3''@;'; put 'put ''NVp4WGRbNTIpaisoXXtOSz83RChBKnc3LkI7ZU9YN154a1l5YXZ4bFIrKFY+Wz0uaVgrYEpAPCQvVy4uYHJrTG4/NTpYcT59Pi91RzFxcSJWQCFkKlswbDd1UjFLM1tJND0oJlY6JD5FJEByUjpyKkBqV0J+YnFKNylSfFo6aHU4XypTI1VBYER0PFRRdWs8InwwWmNzYVhNSDJkdWRMKEdycUkm''@;'; put 'put ''RiosQ00pN11MZlBFaVgpPGl5UyRBPUliWzVjUTVJQ0JacEA7YyRIRCMvPlVLQGdgb2A2UkxjVXtTU3Q1N3leLnlTWzZmNklnYXhaK3VeR1BIbjY7eWssQ0oudH5OSmVwTlZfKj84aWg7W1p4K2N+Rm9QWXVBZGooOzQrS0Z4ZHk9aDEhI3RJWDlLaWw3aTY8N3FMTDZuUUFZT309RjhiYnUwR0lw''@;'; put 'put ''QF9QUDs/YmFzVHYiR1ZdejVnbz1qRyxqJWpVNDpURCViM0JNSFIqUGBgTEBqTyg+LlZdL10/fD03PXxUSEA5SGhrfTlFdl9CRiZlSHlxJkhgMzYrfFQ7Kmw0TlgjPENMPSNxKXM9NC5FTDhLXiRpeDBZJmNhRXR0JH0lQSxSb0lrQSRSXlt5RF0pdUUpMm1ecWg3LGxhWl8lTndPOlVSeERXU2E8''@;'; put 'put ''XVMiWiVfQXRYSDZuXmFwO21qZXI2YVZqL2x8PHNvWF1CLHlKJFAsUl17UiNGazZbUShGVFlXZ0ZUQnR0YkZrTCFsO2lXQlpLfn5uL2A4OGYzU2FNfWJqOVghNzx4MlJ5K2NDOiVqe2REYVg+ZCp3dFBHIjwrfWFhOnFbJGY5c1k3QWwhNyUqKDEkPXg9ekF1Jl4iJEIuM1ZbYHZKLCMpX0YjQi9f''@;'; put 'put ''IyJkW3lpYmw3SDZgNFc5VCFuPmBrVjQ8XTJEJHQoNmQsZ0JQPkE5SDxNZFNoOmdsW2ssQltwJkR3XyY4d3RVOCE6WiJlMiV7V3oxQ01abGBUfFBuUE1gOEckXSZTOnQsTyo6MHpUTzcoTlBxcVdLUWpkTmpANm1jVShkSUB3TE1RPkQuL3w2Xk5yeHk2eShzXj49fm9LZXpjRjFdelpDaFFLJUEi''@;'; put 'put ''fXE8fmxgXVFnImhTN1JvTllIeVRYaXchfH1weXhxJShmdmwlMjslNz5aOGd4dXVvQmIiY1E3Y3hsIVAiZis/IX52ajx3XnNOV2tlNnVXVkdAU0gsQ253aipdW0h4dnd1Pl50X1I4QU5Rd1E6IjM1eWRfRDhAZGApOzFXYUxmK0o0LCFvSDY0JXBYUUozKUZvNlM9ayxjdk4sI1p+bVVjKkUzX0tU''@;'; put 'put ''UFBka21GZiU/Kys2dmJ0VFEvPCRzTkFhciFtLiZmeEw3W3NvMGdqRjBCU2x4QXI7akpmc3tlfShhekIpP0xwMkZSX2deP1MmNyE1ISxNIzFga3k4RVAlS0l7PTRMSk1ZITU7YHk8MSV0KC9wL2Y7REovRjZ+TChJLzMoM3d7W2Fjdzd7N2hIWzIqbT56eGxvJG00SCE8SiQlenFmMiMqWFRHRHdd''@;'; put 'put ''K3p3ISM3P3h7JFleMCo6OHZac0Fle1lhT3ZlJjV2Pzp9U0pVd0VWWjt3SUN5aCM2fEhIJixbKXR6LCRDOFkkLzdmSFt+eGR6YldHZmVSM18kenpoc0k3KS4oZUtHcS9eRGZzbGVZW2ZPL1hHcVVKJWlNUSk+clopbXxNRmU5K0hvfXo+MkUieSxEPDlaZHw9XTNsM118X3Q+O0lQY1RVR1ZiJStM''@;'; put 'put ''e25iRW5kTUMla3QmYV5SZW93R2N2elQzXzJCTVcyXntHSm1EUGwmRU8qSyJFL1RJVnIod0JgTHttZTAubl9IS2JRbjhgeEMxdS97NWlLRSZuKVVNYCYmUHQ/QilGUHUmZiEsWXY0NUB9ak98WTdCL0U9V3hhLmE2a1ZtdjdGfl1KdlplTExWSy5kblVnfXpiZ2o6XkdCYTR6SmpzY1t7JWBJQFN5''@;'; put 'put ''MzRzaF9LWjtVendQentdL1VbYUhPfXZUSVQ/ZDxdQVhpVWUsQ3tBQjs0ZnhWOWVGMndLZmU4S2s/dTghajV2I0lwenwsImVIe0hvandgJDw6ZD9aOU9AWzJiY0tkd1hFanhiej9eV1Z6Wk8sWDswcFouWHBOIn1MKVcqbTBdZXB1Ulooc0A0PTFmQ3R9LGQ3YkdKfm9fUiROZUZhWyg9bmdTQiR3''@;'; put 'put ''ZUx2eTNLZnJoYnpoTDghekgle0ZLP2hwdEwmSFI+LzxQV1p1SXomM0coNXA9bEA+Q2xVLE5ZMEJHUzlmVXpXQkxCaiQjdyF7ZltwJmshJCtbVSY6dUhYNmxYUGpSS0pbdnx3SjQ8RG1LTU1yTWNoMTpJNyk/JG5WMDhUMVp0T1ZKVV9ndGk8WldvNDdPMERoaW5JMFs5Wi9pLkkrL3RnNy95NCxd''@;'; put 'put ''Ml9tXzJfe1cjc203N0xfNDNTfTosbFl1ZyRkb3I5VilpQnBgbTU4b05dcGoiNytXcUAuUVgqTGlfJm9iOyZOXW4vQkc8e3dtK3tzJVNnS0FUTUtdPFZ9R31sS1BZVnwodW1fRkc5bGJEZmpXP0E3dSo9Z1ZGSz4iOzN0STJvb2dGPzsuJUNhWlJiMG44ZER9NC5FQzJOI29QbXtzJllBPDglMiY4''@;'; put 'put ''TTYjIjJVZWlRfDI6S3kwL1YzXWlYdzY2Y3dHPG5xLHtmbnUoa2Y7Z21EdEF0X0dQPWFXfkZUMW5qXjtYUWZDL1l1UCxdOzBoL1hQcHMicmdJOEciT3ZUdjcqJkdZcGcpNnx9KS5dMzNiRnh9PC5pZCNefVowV3RKbihbSWlubCE+dGlmWFpxdC9QKXVrWCxnZSNFZjY3MWh6Y1JDUEkjVDVXO2Z8''@;'; put 'put ''Y2hUb25uYU9UWV10JTZxSDR9U28pRGsvQEJNS2hHel0xaFphKG9xQThtQXFWOFVRKG8+LG48dXYvMS48OmZUayk/NXEoQnd3Tk47MTdrL3l6dkQhZk11MDp8OmhBR0Z9JHU3dSZoQnplVW5odTtaJDxpQkR5Sj5NV3YjUDZyJjkzd0xZU1tNRF8zVltVQiozelNSW2QmVTpdWHtweXtKa3syXjxW''@;'; put 'put ''aGwkckJ2OjNBRz8vYFB9cHwhcD1PPj1kc3xoLj50TWw1PER2IzJPMV0kTHl7fHg+XjRQTUNAbV42Ij1VYy42e15vMlJHUnxXKmJ3UT1VWFBHXlIwQUgxXTlWbXVQMUpzdWhafDU7QFVJIWkmUDA2Vj5UQk5FZmtJTSV6NnZ9bSU9RlgyKDI7M1IvLEtXXV17JiMsK0t4NVQrPmFNcyVhcXpMemhe''@;'; put 'put ''dHhBbThBMjVVJFZsa1p8bHlie3FIUSs7NzZEb251ZzM0L1tjPV9dIUMySVpnc1A/Izg6dSR1VmIhW2lhUXBsJi5rYUl+dGd5NCVEayYyelZXfCZYW09iNHMzSCozOFowez5MKCxGWWBKcn0lemJkJVIiYXJWTVNhUn5ALjZgJXd7WjYoTmhIRjwkOS40fU8kQUUkbUZkNyk9K1tRcUx4JGZ6MTsw''@;'; put 'put ''fmAlOURkS0glUlJrVkNeIWdgSVRfVHNwVGAzKEBUL1R0SD9lI3c5QChVSSMxWnN4TWhHXWc2USp1YUdFbXB+XXwkcWh4KVV9M1BuO2pJeXpIIlhjanlvem02T0B9REZfa3NCVkIxUU03NkF5JTxoUFV0U3svMHlDNEBJflhYMWRGNyl2bGk0bCNTUVZsYyxXfV5fWllFX3tEbG12Nz5DRjdIcVkw''@;'; put 'put ''L2Yyd2heYGNETWxEdFk0SHxNM1EyK0NCfEUwNW1GV31+JnRRREtdcWBXbV9rYDo0PXIvZGBaK104N3UuKUBHWS9kPiZRUEhLZVhPLGoxRkxuTXZ4bVNIbVl+cSlQZ0lKXnR0WDM9Umh9TipCPUpqTmkkK3YoZ1s+MC86SV0lJlJkNHVQSyllY3J+djRZKktmQ09QI15mfkdlL05RZFA3T20jdE1F''@;'; put 'put ''IURoRTVPb3BBRip5ST5Aaj0kSkBTJGZGRjIwcDF3PmtJOnFnSkc+Qm83aip5a14kXW1NQlB4ZzNXdF89dH5ZcXtCdzp1SH5BbkUqJEp9bFhLbURydjNRPEYrciI3YUI6TCgwYkZCYDZyIkl8fkhhPSs4fWNISlB2YGFVQjI0RmUjTElhOEc4QixsWTN4WlpvOmVCOFBJdiZLOSVpLCRXY2I6Kks8''@;'; put 'put ''R1osaWA2UWMvK11odkhZZzsvLzhYelEwcU9HenlvTl9bJmU8QF5vTmtGUCNtWipMa3tGeng4ZGU0XztBLz1jPDJ6SlJkJjlJcEVuTy5EWmBwQ2h3e11tdCVRfl9zJHU2O0hlQDBveiY1QFFNNFlhcXxCYCY7XzY+SypVcG9DcFoqL2RsM2EyOl93UWZPUz5oN2NPYiJzYmAvKDpdd15NQyZlMDps''@;'; put 'put ''SGBIT1FRKV92JmI9Y0k7LHRwW0JUMDlUdmp6eDlyMWVzT3opZGZNY2E2RituRlBgUCtlN3Vxezc0bVEvPEJeIkxbTnFPcHgoa0xiTyNDSVlZTWhDJkQsTTlbdighZUZqdEdnODApdlBlWyVVdjxHKzVxKWEuWSQhW1BfQ3JRVk9pX0t4JkpNZCpSL2gyUCk7Y1ByUHFsXU5zPFtGb2JIRTFVej9g''@;'; put 'put ''WSVPaCo7NXxaVGJ9cG1+SW9HVj5jUWxhfnQoPigpNy4mQjpScVlgPEFDTlMmL018ZnwuXmolPDNaTlg3Z3FDI2JCIzZaaTNrMSljbjMsIzsjUFEmWCRGKVU3M0MubyE/UmNFKS90Zzo3V3BUTihQLHZHWyhPLlIudTRNRVVxTVYkZCx3OmQoOkcxZyM6QzJsYm0yYGJiI3ZpKldTcHEzezFpd2Yx''@;'; put 'put ''aiptUXw/XUhfIilBcXJeaExGaVhJYzxXZTpLd0A5PyphcSp4M2N5TldtU2x0UENkdHg7XmVfV1lUJiglZVsyXyZvW3MhYHlIWHE4KUY3Q2hnSDZCUyZDTlhmW3BiOkM/bnddTyxDZjxmUl95UG8xJmw1UWJTW0VEbyFIQGhXKjZ2VTcqNl1UOFleOkRqKGxQMEZFIVtsZCtOVmA/Tkc3QD93WmY6''@;'; put 'put ''aVZSWmx3YmNNdjU0aCNpWzAqaCslPUNWcE5SaGdsQ01DUjY4d3ZhMTJJTDczUChILzRYcTJsYSErdm04KXZ0aiRJI190O2dyYFt4K195ez17JXx8WXkoOWBGSFR0VkRRbC9IO0FLUjd1Ym9+ejAzUzQjXz5kdGIlMUU6eyx+P11mT0pJLDEyR1AkMCVKeWslNDxKPltOfCNtYCtofHRNWnpMYSoo''@;'; put 'put ''I3BRNT9jKztgNTE7ZyNNMEdYaz40IztbVHp8KHgoW1FVIXZoYEFtXjppamR2aE57PXQjQG48THFafXxhRD0sMkZqVl0vPDF5RytTfFB6YWo3RTFXYUdreGhWQWAyO21NSDFwOntfVCV+S0pfZCtUSWFwMltDT1Z+RGQ+eGBFKXZDek0pLGxSTldSNSEkZUEzdSN7OEBUYnUiQjxdRCpmVEgxcF0q''@;'; put 'put ''aT1MbjZnVHJiNjVhQlQ3VmhCRnRAYmVPNnIwc0NMOUEmR1ZuL05iPiNSXz8yJS43a3xWJCNwfHkzV3hpO0pkW09zQVpxUihpcGcwM2ByWXJDdCErcj91TENDOWkxTUI+ZUJIcTtwZllpOjg0SDdmI2Y0W30+LEZkTSpmc2BaUDQ8b3xHOV86P29ueGpgPzo5Yl9zPVtoc3YlMjV6V29kWXo/SiV7''@;'; put 'put ''VzZibilqdERfKjN3MzxvbEg5YjY7dSZ3QFhZdC83Zkd3IiF1UHZxfW5JMnJ2PV56emtMJi57YFp9PE1VSVdXe3kjNDBJKyZ1ZVhZaWErYHlnZzpCXUZbMC87Ulh7VCtbbGhueUNtNn58RmYuLktuMGV6aisrJSxbU3p4QnJCOD98R0ZqNHYpIUZMKCRtamcuL3FMOXhafVQrM1RbMEFrWDt2OGh9''@;'; put 'put ''NVNGL0tiME93PmN+OXQ4K0lDVHlLTF0wZlF+fHZbV19kXXVMflVaKkJ6aD5JbUUwQVB+flg8VmJGMEdzR2xIRW47K2kqVUdEYzlwKWBWWWR3TUZVTXoha3Z8aU9bSXtoYXt2MTBkfV1kVmgpUXZrTih0Ly9URl9vQFh9MDdbRX12JCI0cVheWUp3LGNfQSVYdjIqVHYvTUlDe0hgWUVBWT0uaDxx''@;'; put 'put ''ZWpLTkxCeiNkQkJASWFXTyh2TF4vLzdSUSYrSEoiRVUwLFA3KXU5aHVKeX42MnNobTIxQ0E3Z0IreEB7KFs+MFMsdEZsUklEYjZJZU88fjgsNXVpY2d3eyI+XjFWW2N0d3R5T18wb2RtP0lncURiSHVnU2AzMlR3T0BicGhKcEE3YlVpVTx2My8wR2d4MmQoaVVkWkFfdWVtYGNpQ19rYDd1SGwr''@;'; put 'put ''N1tELkxwa0JgW2Y2UFBWIUIuWEAqU1RGeGl8cTkrX1BDNkEzO1c/LExDYmtWZ3JZO3VOMH42VClCJDZqRFA9em5LS3pbLFQmIVErV2sqJTliVEkxPVlNVyltIkBKZWRnNnwxTD9Ue29NVjYqVmlhSzN2XXJQY1RMTGtSYFp7KjtWWDhVSzV+RUhnOnVNYiRbcDRKRDJQSyosPn1BcEAyTTg+dFQu''@;'; put 'put ''eUZRb21iMTZYSEA3IXUpNCM4WEowWyM4RVpCUT9yNEBASGQsYjFLe2pLUm1qbUp5LGo2R0N7Li8pUVVgPmR+Kikud2htNG0pQzl8MUw0fmY5cmgzMVdqdldRKzVjVzdOaWlzJVNlRXRKPHAkd0FwWDRnVEdfdXBWVXBSbEg8VlUsSHNsKmBwejtPe25aTklRdCU/YFFMS3VKMGVmfHZYUDg4NCI0''@;'; put 'put ''VVNIMEN1Z3VGciowZj5nezVtOTtxT2IuPFF6b1V3algrQEA0JT8odEsvczZhLCR5JGR7e1hMNm0iQ2chVU5bOS9EOD5bZ1hISHhROFQ0Mzc7Pn5VdF55QGxeWjZmIjEuanRHRlckN31gKFMhUkckJXB4cU9xKXhXTGIvWGhKLjVhI2V5VF93NSZkOltwI2FQeFl4STl2Y0cobmUsfCx1P0JRfnJ9''@;'; put 'put ''KnZ0fUw6KzVkYkNsRU9mJjh7Jlc0eHpXfUhFYDksfjk4dD9UekJJeWt8diVVQyVZLHh5NDQ8KF49Ikx8Q2x8VnE+JCpGSXVYemg1fElDRzMpandgVj87VDVUKVtGTTJZSyVHe0pIUThZMXc6RnQsbXVZbTE8JXJXTlFtO0tgbz5fNHkqTEwxVCE9VXE/ezgrdE8uY1BoZU9fVyRwM0VOcUxjKnFN''@;'; put 'put ''cDBYR3ksO2RReXVIOWZDSEhqLiE7P3ZuZiFpXl9ZZSMjeShjNlQiOmREbnpld0toQThfVEhKPVVNK348fkc+T2RtUV96Rns7Pn5FWHJ3KWlTJCVocFE+Y2FRTG1MZHE1RnY/MilNMTB7YHQlNEZAbiJ8XmxDZW9TUHYmTSZzcitwJUJOdXZZVSRCZEdvYURybEI7bi5wbl9eRDNnSUJxKDdFfDlY''@;'; put 'put ''Ol0rVCspL3QwNXxVYChbWGheMVRIe1Q8V0pgSSRvQytgPlBlcXBbPilpfWtIOjVUU2tTUUJqNiJOalNCWDZEXWQ8X3lQK3xva2NheClsLDYvOWdTSWZYSSVTJnBaMSZqMjxGQWR1dHs5MmM4UWtfMyhNdEIqXlNKV2xwMX1tWXtHPTkmPkkqdjN5VGI1XjYpSSlAWlIyRWFXS0tqfVQrWjo9P2Bp''@;'; put 'put ''Wn1bZ0ZLKUp1Qmx2c3lbOWw9X3h8fDg2OndIL0Zjd0hPYmpRXnZdOU42TSZ0bEpGfjtsRVklIXBfajNaKmUlJV54TVIoVWlxTSpWMSVaQXhZNmdXdWxUTmx8W0MmVVZUT10xRGphbnNgeiF7R2FHTTlpWVZXbTUuQ0csdUp8JWF0dFJ+XzgheFVEOiF9LEs1cmJRdjxvOHo2PyI8RT49NkNAM29z''@;'; put 'put ''azRdNTBpeD5rSX1bPUZfdkRJM2tVP20rSTphVmhYektpQUx9R311QFFPdWRsYSxBK059OV98KUFVZ3hPOkspMDZQZ0xWK10kR0JEcXZmLzRsc1pkMT5oIkt+fHxpX0kmcTQhVUIsXzt0NjUoMyljdmBjPD88MnxiR1g0fTh6IXglZSJ0PytteFQ+dn0wLGNYb1JZcjtxKHQxQGY3fVFIT0g5dy5Z''@;'; put 'put ''KlBubjJncnQ9Vk9GUkhHWl5oKk56PUslOzQ0TiE8dzRrdzFrZnVxSSZ8U0YvZzZWSyFfPSVtNDt1NC4mcj11dzpsYl4rQyREXzpSXmVFPjMuUm85em10VjFwb043eilGQGxtOVl+dms6ayQkWzwuQDB5IkRqJVFFJUc6aDw6eWFSRSY1JlM4RTQkaGwlWmhXZT1AbG5TSjk8aUNrWzpCUU53Z1Ih''@;'; put 'put ''YHIrbWBOKyh8O0poVTkvOV0/P1dlYFhhdEVwOUY4VTxTS1ZodlAxS2kxI2Y0ZGo3SkVDa2BJQmNjL0t7P3NWaVJ+UFciPlBJLztbd1NNKXNaeE8iTHZ7Rzhreio8VkVNImQwOGxDTm1Ydi5kN2VpQTcyeX5aW1FkRUdeYUtARzxbIUczfTZpdDZCbWpLYU9HNUtefGMzfH0/T15oe0RZYEwzQmt0''@;'; put 'put ''WjYrPzpGYGdKWzZTWUVyST59aWczWXlGPDdGPGorYEtvd05MQDQkKXZNJjZCWGB7cXM4UGxUWCYoOX41TiNUKjVZa3ReZmY6O0g6K19BUCgxeEpdQlU7QE16Qn5peGlNWSZnWXdrX1BvMVpCbEY9IWpJRnVPSjc9RUc4a0lgZkwvbV1KSUUkPFIvZz9YOSxJZWU7e2M8S1ooNzclOVRhUVQ2Pkki''@;'; put 'put ''cE4hNWAmVCRGTm0uJUIiYDNJM2d0az06KT52NF5KcC9QY1lpIXUoKjFZbHZPTDgiV1Irby45MUNaVWhMTClCe3BlSmc4NjJPXjpqZmhoUHM3RiNCV0hGVnF8aTl8WnVCcC5KQWlVc1VofDluNmBXfkBUWTY2MXYmJkNaXSpGI3pyTUUuIyZwXXAwUDNzM3h6KWVFWFhKdWpLWWRhbmRiYTIvbHgm''@;'; put 'put ''QXRMSVEpUUJZL0JvNEd5ZD8rSkxjdHhPJDtzUkU4NixWOXBFRnFuPH06dEdMSWVYUzw2eFltXmdSTUBKJmxaW1tqIzFiLElHLjtCYGtaSlhqYz9DVEFXeWdSbHReJjsuaVJCQiJIcF5KN2haQWY2Uml5QGk8ZThHIiMzXkwjfDwrfTRkbyUuQzw6TSEzJXJ2N2Z8UytXT19LZWM1ITY9TkkhdkMw''@;'; put 'put ''R1lCTjkpU1gwT19RKjQpWV5vZnI6S0ZKUV4uOEl3X3w+Zy5DSVpNUS4yIyZiTShPWzJzPW1aL1huO00sVm9XbHklMVAlL1s/bWdUSUMzXXAhbXhYU3JSVzVYMCw2K007RGxWJUB9YDFCSyEqTVN+djxQR25PS19hVVByVGJuP1YqI0AxdzNlI1dDQE9tdCN1Z0k2R2B5UzZDUzVILHRePHhveDZ3''@;'; put 'put ''SzNIZld9OiV9PnprL0dEclVqZV9RS1l0UkdVRkVfZHRWOTl0UX05OSQ/Zm5jeF5oQEpENT9EVWgufUpWM2kjRSt4TmQhaU1lMj58Rm1EKXx1c19RcDxONS5CaFlKJFAwcC9Mbiw2OHRKUF4vbUBXQ0RAUTc3RnY/PXp3cXl2NXdSKjFnejdLS1t1W350KStOciswdlV9UF0xWi5adiVLTyJdQ0Rt''@;'; put 'put ''dV5GeTUka1ZuclBHeDspQDEzJkZmRjRCMCkyajRGZm93ZWQlOjcxPHdkT3J8KixeJHBiPVA4UkZbVTBPey4vXWYmKUdPUCNKdXFEJCEsNkB6KEUqTy8udVpaMjxjQkAxTixgaDs0fER7JXEydG0waT93TnJjQG4/QWx2UTRCcSh+Ni9TLlU+Ok1dJn5mVHBvKmNVayYkKlA2cGg7STd9UXcua1VX''@;'; put 'put ''RXBDNH4kaU8zJVhGbEc4ayt3JE4pPVNpaU9DMDp0Q3k7S1p1QFJfcEZxVVY/czVRXTZEWVBPPCxLWkFwWUxReiVFX2FRQEZWfU9MN1IsVHhgU1kpOyh2WVVtLj0sakwyMCUwTGhDdmhbdUpUUXVlYWBuIVN1Oj80OGxtJjIhcnh2Zm0vTnIhWGJ5JTN0SihYSiFmd35xIXouTmUsfXVCU0B9KVFV''@;'; put 'put ''K1NCfmhSLkpJe1N4IXNkQXZyc3R+aylLYTV0JDpVcUAvLlJ0Myk7Vyg3RzJ5O29hJn05LG4iVXpEez8sN1Y4az5scHZaXTk9bUp6LllIUEB2a3R8Nls4bUdGQkd6OW91Q284M1JeNk0hSDAldmt3UVsxY1FeOzRxSlNaU0YoYXQjeGt0O3FlYXJte2tPXmY0REhpaXNodG1nM2MyUD07ODQ4WiNF''@;'; put 'put ''YSE4a1kwUkJyV2M5d3o6WXRbV2Rmfl9HfVpvZ15GIkNmXS9sUmJTWEkyfWsheGszc2FNZGV4KC51bHwhKSUqd0UkKTB7UDpsWmJFRz8xJVkvYlg6I2I1IlgrbCsuSUMhYXY/QnZDWEQiNj57SXdrfSpfMT1fQ1l6UmNyPnIxdXAxKSNySWZqSFRkUkBoTTd2UzJwQmN7bDopSk1PenBnOEZXL11J''@;'; put 'put ''UVh1JnttNSU8bS8zTV1HcS9Hd1Z9RThnOyxgT1p2RTRWPlVgdGcsYzhMNHQ6UmAhQFsoMTJRS2RuYDZ9ZD9vO2o/IWJgQkhXQHRvVE4xRmMuOTsqK1BYPCQ8MF9UKXk/aWQ8Q1svTG49MEwkfXhwTVtHZD0oQE5dRmAjUm59azA7ZVlyVSRRQFYxISxpIiZVTVVfa0NhRWRLbC91XXdmJS8zeExu''@;'; put 'put ''byVyajhFWzAuNlpTPyxZLn07WSI7a2x8UVVlV3p8Rm96bDM3TTtuK05hX1dmRVQ4UWRaJW4mLGpiJEdNWDBMTyw6OmM3dShuJFhzZ2ZDMjpjTFVkLDQueTgiNXZNWEJoUEZyK0M+el8ya3NJVjVoWVhgWXA8QHNjMTUwZU10Uz5qSTgpT2p+MFBKa3NpNVVxUUdYbnhQW2c0JGs7Y3dhYiF0JHhe''@;'; put 'put ''X2xnRm18ZElXWHxiSFBkPiQxX111ZipWQFBid2pyNnRGcSNEWD5sSUssIzFDZEE5WzRjJW1gRWFIVz47I0JOdDxEWEdnPmg4OHl0N35RN3pOYHxFcE0kb0lEYWJdW2BWMTksYTlPJVVKQ1UiemQ9MUs+e1N3d01TS0Y1MFYpSyNXdE9VOU9qc2lmTTh5NUU0cFU/eFs8fHtgOndAMUhqZ0l7OG9M''@;'; put 'put ''MUJFRXQ2Mlh7XkpKMG9jWjpCbjQwSklESys2JTMhfkFhXmdVPnF7ZkRhd3JPOWhveSFTRzl2JlNQXSs9fHVubVM9TUw+QkNtd1QxSWpCUjB8UiNyZmpPTG1SPGRyJmFCQmIpZCxIQDIpSTMxdlh7Tk52bFUrQEUwbzJhPHdMfld8T2haeHpoTVBpIkY6e0IySio4ZVp6TmJWVCp7bUZ3bVdpRE1Z''@;'; put 'put ''NmY6X3gwUSEpeG9XI2BOWXtSeS41Ml8yOSMxel5IJHxTZHxqayZvLGN1YnlDcSlxNT1JNUQqLHpoaE5rdCs+SyUlPWBGYDMoPXtIPkN5bGpYZXBiZmw3ZyNVeSFiM35yMFtHSWRUVDVYQiQ+OkouYWR0XTx1MXF2Q3B1K059WWBdRHNMOEh0IiFKRzBefEE6dWpPeDN1d09jaGFPX0M7cCNVPGdX''@;'; put 'put ''QmAhWlNLZFolU1R3P2hLe19CcVhIPSM+QjYlKjAwYjFTZWEzWENDOiQ2KzI3U0tPfkQrR11QYiZFQW1zaUguc1EhcEVLLmJaRGZfLGxSKjJQeT45RzBOKTl1RSM4JnRSIkNCbV9rcmx3Km0pdnlZOFghcGhgZms7dEFwPW9ZXlI3XVVETjh3KTV1eXRrYigyUz9uI1QoMCo6fEE7PkxqVkByMndX''@;'; put 'put ''VG1AZClrJFYhYzcjJkwxJSJaPVpRVVUldzU2LlpbNmAxX2M8JmF+aDRNPkNbZ2w4TWFRVUBdaEBAQnI6Xn1aaGhPOH5WYmBzSGIsVjt0X3JUVzxbSENYNm1XSXo9VXV6YGwxV0BMWkJSIUpxSGt2XWtpMkJQPFI1O1I9QUtJWmpgTSZdTE12akIqYklTQ1F5aUNEfDBNV0loeFR2Rkg5X096M1pY''@;'; put 'put ''YDxbaHp6LCZBXUFkJGN3aUdBW2pQL1FgP15mZXdDPThsZWBgNGNobnpgdWFfZzx0T1hOdkA3TzkjKCtJbWVfMjBJVn5AYmlXXnwwTlhOS2oydEZ0MShhdX1LWSxNVnp1NDpoVjkje3FyMCxOWn1mKEA/QEYsflZPTW8vSGtuYXFfaENPXkRCfntwKC48YEdddiN4L0QpLzZWLCJmIkA6JlgpSjwk''@;'; put 'put ''XkglRyIsPVpAfG5LRSx1eUVKenU+MzxrQ3dPZSR4XStVSXtAN2FzTW5TVnBPQVZjd0o4N3t2JEhZYE9ELygrLFgjTCNvX25BMy5TZ2kldE9UekNXMGUvMGk0QV1WOWdsRzxzPlNmNjM9MCpTUW5VRyt7PjRqfnxwRnw6QGhgPTk0MllzNHUvWC8sOWhZRUhrISVyZXtdWWRqJTpBcnpTU1FXPlY/''@;'; put 'put ''SmhrMkQwRmw4fG1RVlF0QmZeYDNAUUE9VH0rb3Y8QVkhfFRqMGNiT3p5U3NtVzI/aX1nS0ZJWUBFOTFFKWBod1tiIWY5KllaTFQ3NChxMXx9OnBYfXI2SnJfNXcqdzZUZ0IwND59Ykg9STVCTGJ2XiMoRTFXViJeV0VpQWI3QlNsNUYyKy90SWN8bC93WEdbWDN2W1IuQDJuLzVYK1krTyNhNG5A''@;'; put 'put ''fjZvWk1aVkRze2tgMUFLWV80VkQvPypvL0QzRX1XdmV8OW9NNEp6Im4sQm5dYClTSHhbLFgzSWNFeEEqYSNZaGVtbWNCI2dKJj1YM1plQDs5JGcsWSwyIUB8PX1tbjNwP1o+XiQocT5wcXREY106ZUs2THdpW2RZVFVIKVR6cENuP3pdRzd9RzUsL1Y0QV45cl9uQXg+Y2VLMUc5Wy4uKWowMjBt''@;'; put 'put ''OmNZMSFhKnJDU202O3YpM1V4ezt6QU55Ji9mc3Z2LEgxVEdzL1NCPT5+fXlSb0BbN0FJcHRhdntRPUAldFUyKT4vL2wsbWlDP2ZPNltWIVRRK19LIilzJH5CI1RqdVlfW0d3LFNKP2N8YyVOQFt+LkQuTHZ+blQ2PChpM2JXO1hUdWgoO0ZvRSwhIW4/PXBodnNuVlk7ZGY9LiI3cHhtdFY7NmpW''@;'; put 'put ''ZH1AbzUjRU87alhiKG5uOUZLRGQzJnVJWSghanZ8NVRvcVZaVVtQRFsyKz0vaWtkKEd4TH1XZ107a0ZgU21NUDBAYCpbYCk5SzFaM3VAUXUuWFt+YFRLfUx1Z05XcT4qdXZaLDM0OzpaKz53Tlooe2R0cSNteTpETGtgPF1OOH5QcVRbXTFjT146OztwTHI3KC81JXIsaXFSX3BMck9+bU48Ykhy''@;'; put 'put ''VHc2Xih8RDc1cWlTdiV8OVghQCs7K31ULCtDOFFKMyN9MTtQJkcsdHs1PUVSPip1WGVrb3VhYX4vJj82dSE3WyFbQlB3bGlyZW1SLnsmTUY7aTBPQ0lHUngiK3VXJn5ieUJiT0hRdV5iIUNaLmxiQyJqVl4sXUJpPjtdcWEjcyNgJnNbR2RGSlYsaTtwTkJHNX1kSDgzOzhxYyluVCFBdW5vSElq''@;'; put 'put ''flhoaXI2bF5MVEIsWjlzci93WG56QVNkNT43WzI3bTc2eDhYQlgpVEomOl9SJSguRSpaZkNabDYzMXsmbC9bVVdpIz9nOXJATHVTNy9XOFFaPmM2W29OKEJQeFpqJH1bM2VxQlpELjV6TjR4SylCZ2NRbFt0bFVOXUlHdj4zcnY+ZVlZYClfSH1MbypqUHREZHtJP3Q7VUkkdGtEcnQmZ185fUhU''@;'; put 'put ''UmFFYUJXKEREV3sucUJCN3shMkVDPUEwfj46Ojo7ajU3OkpGQnt2UyVmVihBX2d8d3NTL3JlQHxaUDFTYjA3YiUwSlNHaVUsMmMhdWIzc059QGVuMSpTVkxlTERwRkd3TX1VLmBVbGZmfmVnXzM9T0NkLjhdTTVadjAwLHwyPTgqZ2dwfU52Yll+LDQzS1c6QWVtUGpkTjVOJiZxeUQrKXBiOzkz''@;'; put 'put ''YEx2S2s2PzwsWCQ3Yix9I3lrPF8lfWciaE1iIiQvPWxYMm9NYzpHMVRwNUlAeDluVWZNWlsxLn5JJXROPmYyRzNXJTpkfUNLKnBycnJPKXFSMSwpPnIzey5Xc04ye09OLCpWMlhQRGdgQytTeTBAbnJgez4pI3gjVmNaMnE8QiU2dHZWTzhFM0VHaW09OzBiL04kTmdlOXUlSF4uUiUxW08/QDh3''@;'; put 'put ''LnUsMG5sc3tzeSNvSHk7Ql9Cclpid245eSt7Yn1vckVIUFs+M3lTaWU3YiwpLi51ZXdOZXA5XjQsezU5R0hAd3w+JHhiJHJQZ0pCKik2dF1pPnhyT0Z2eE4/NT1jWmd4SFZtemAxRUhgPHBaV11AR31uIWBWLDk0VEtneHtlYDpvX3U/dWZuOnJCPDVsfXlWWEUhejNEezZjJV9yRko7bT1tekVZ''@;'; put 'put ''M1tlRDpLK2F6Lix7UiNQMnd9c0AkJDRvJTV+OSF2NyVOPGI0O1RHen1FNjpgLERHYT52NHwuKiVfL2Y7KnpwdnZIY3ZhcGEhR1Z4TV5ITHs4XllFdWomaUw6d3l+Tl5sWldnYEB3Y0hIKXh1bmsjPGNsM2MyIW1wNUNeeStIY1kjN2g8P1NGczBBJm9AOFFuLjFeMG06NVRPNC4rZVpAW19QNUtO''@;'; put 'put ''dWFRWTp4SntlfV4xUH5LY285dSVNRmkxR1dZRnlDYzhNZj4oXSxUPnBuVmVzRjgwZypZUW0uUWxLQGRZd2IrT21MXjFkTHRPP2FxIV5vQG8qd2U1fTRVelJyRnlOVTt3Y3llVUU8UTQrbz9NWV1yeC5BeGdUaj07THohWDZSQiZqKHtULD5RPVdEMHRRQyRQckYwfXlMRDFnQTA8Z2JBLyViQDJb''@;'; put 'put ''MSgoUUsjXjo7Nls5JD5rRl90LkBoaChFSm5qXUtONy8qI1RjWl5SbmgvdCxzfSVqN0w7UU5JSG1feDMkTV9DQD5VLF12SHAsK3l3bkZGcSx8THdQOHAjejNLRE9FWzs0cjlwYWEuTXZjRCt4fFc2UjlYSig7Z0RgeTNmbEdlPksibGgucl14WlZ+WDxfIjAoYVNSfks5UTU6bU1MMGVzNW1eJkRy''@;'; put 'put ''KElFWj40Nis5JFtYIkc9RWApVytYR11TP1Jia3trQ0x3JHdfb3JqTihuMHVVRUM3b1t7cVBuVk10aTtwXmohWWldI3wxVHF5NXwkaTJrRHx1V2g3NkwrQj1pXyhxWjw8NDpwXmE0P1tUI1Z2fks5UmI6I2xrRW9PMG0/d1olRjNjVSUhcyN3em9jfX1CL3JaQG8iMkxYInFBRFBAd01mWFEjc0pn''@;'; put 'put ''Q3B9ZkNNZHkzPUNLWWJCZ2tTaH5rU0BpbC53UHF5OHZ0IXRrc0pWYHJSVis4dnF5Tk1jNlEvIm4sYEtbcmdTfCpCMTkiVyViTTFDKnE6ITdeWHA3TS93JCFJL2o8Sz4uTXdSVD5iak0iTUdqWyNybm4/dSMqViNaPWhHaFtOTDRwOlYsSCVVOCYmfT0le1g1MzpFdD09WDFGd3BWOkxNVHF1L2gq''@;'; put 'put ''R15zWUs1fFJMbnhXSXc1V2JoZ3dlO2IuR3JPMGI7PVheL0R2Z3pbTUltb34mZDNJMnJORGNaK05la2tuY2Y1VnwjWX5yPGFlXykzN29HOj9SPlE2RztFUyV2UDcqYjcvZkkqN1V7I2VIUlN3KDFPKzZaTjckbTN8fSE6OypXdik1YlEmX2BUZHEiWTFuWDUuRmFSUTNxPUs1ZTN1WjNlUFVzX09y''@;'; put 'put ''N2s5fFFARyRPWk14KFl5PGVfMT0jWHp+LDxmIVQiZX1DMkomMl8pKSN+NDl2alZXRW80QntiLzh7a0pEN0R8ejpKfkdgODYiYU8lWXRuaHlFaUs9QyxUV2t7YUU3ME4kS0ZSQipaPXBSXzFaOXIuZj92b0g/bV9UImxWcG9NPFo+WTdrYlthSDJJQFtAPFFndClIQEtdMnVbXjJjaSNxfiFTKit6''@;'; put 'put ''ZU5bXSZMbjNzUiNWInxFaSh7akVrYSw5LjY9M1gqN20zQnQ7YzZrY0BPKnwqPmV+RihNS1p8NztiTHZSZHBpK0cxT1BCNyRbcG1tbWpjYFZ+UE9Na0QwQW5zP3VVRXYqZjFSZEx1NygmT2RyUVIqUltmdzMzaG95RT5+ck1NKjtaU15HcDVmaixVUTJdOjk3fXVaUS4+eF11LlBDKz9wLzJqaH4u''@;'; put 'put ''NXNXYkpjJmhrZngkZnU3WktKR0I7cHdKQTF1MkVGLFE8S3Z2JnhiZjA/YnB+WlV8RjQ2c1kzUz4/PyFBNGVFb1RkdUl9YylmTDU6fjV0dVNlakp5ZExnM1tZTG5KVmBJMW0zZiNAbzNMPFs/VFBTSiNkSG0zQSwhZTI6VlM2N0Z6WFZnV0dmO2FPVV8vUCJLOSxtVE5WRlskOT9ofFdka0VvcHRa''@;'; put 'put ''KFU0TDh4LH5mOllpbVIrcD5ddEI1OVVTb19GSTRIeFAzVl0vKDVLfkk2fEZ4YiJqJFR4I1h1fUxAKCpKJjQwXXd1ZEd2dmtwQk5ySChHZGc1Vil7cyJQNTFCREdodGwvOGNHfGVnUCQ9Wjg2JHFVPSZ2N0IoLEROMTc/IWFpa3xJTVczYF9IOThkPW01NkJZclt3fVUuZFY7YTg5PWc6WG5ITmI3''@;'; put 'put ''NntNK3ZPXnlIS1dSXiVyOkk7Km14d1IrXT81Q1t+bD4kZ2FNJTxHcS5+QGBZVk5TbD41Tj41aTR3KWI6TzRQayY7U319fUpDOnFsVW1AaHM7P0llPCpjSkpHVmFvYXNIdCZiUDplWHhLd3Y8Q1JJWGhNZ0syeF88VnA3UGtWbjlfJktPWCxsTjE8X1hNXmErfSxwOE1wZHpNJFZyNE9TV0RZT1VZ''@;'; put 'put ''RkUrWFNTZVs1SkRGazFielROcHVUIyx8byxkVDU/eUxvMWAxNzlIdmJYLyF2V2tlM3ZoQ2NVJGhxekpeISR2NT5bJCFgcitUKUVDMFJWSFchWjBhUnpLVygodGk2eWJPO2djbk1oOWQyellNRWsrQmhiRn48b0NhRVFXYFpuS2tGXzI8PitNPyg2dHc4WlEwTU0/T1AsbnE5cFU1I3NYWGRCekcm''@;'; put 'put ''PFY/ZEdYUzBDK1NMYFRXYENUe2ZjSGIiYXYrI35gJD0re3hIPFEvMlo8fXpCdzElW1FaPlZxMWsuYy8hUE48TFJ1Y2VTKF5uTGliP1Y9ZjRGMjMlUmA+dTpZSlplQFpRUUBdcEdeX0g1eGt+KG52ezc0WF88azI9PkBraTgrTTppai4rbFVZXTM8eFpXM0JKTy5LRmo6OHchPTEhcFRrRmZvcGtN''@;'; put 'put ''IUJ2RG5oVylsKklhKCE3L0pSMngkPTZSblRRYnhSJGkuKVgma0hAdF4ha3QuMT9TI3IlcUk0clpsYyJoRDEvaUx4e2tHKiFRImRNPm5sW2hdJG46W1N9b1A1PiwiWldyOSMzVXFKdVU5N2RVJk00SEMuOGpOPEUrMjdFM2ZlPWBsKGJQQlUsezI5YUlLdyg4R1ovZGcrUUEmKyl1JSNkPjIqZk0j''@;'; put 'put ''eSI3LzxvJWorNWYvemRqfCExLFRpK0N0WDRXK0Jlc3UwUkR4RUU+SW9TW0RkPEpZKCZtZEw/N1V1VU4mJDxlalg5WUM6fHlHKGZgO0leLD9oJVoqczVkL0BpbjxQdClqYVJ0PkdQcVFGblUha0p1M0dTXXUqeGxeX2dZUnAke0JidCgyQSkjMmdnWShtSURhWiFMcVskdiEhPTN3Ml4xI2thbjdF''@;'; put 'put ''dVckTz5jSTlYIzR9ZSI5bipLSn0xVEY8SzdtYXtxcHkvM11UKEhgfjFEcXs+YEIuJS48QFQ7fjMvbGkkR0wobS88cE9sVmU0RUZkMClAfjQ6SjYhRWhkNVt8OyUrWjxEMkAjIzA3QXVhb0dIbXtEMz1BVVVFRH50VEYua1I4MzxGN29hKjBiO2c7PnE4NFMwa2YsMFAqJCl5Lz5pXk4jXjwkPlUr''@;'; put 'put ''dSFIM196TCpTNWxyJGg8KWtZTjkiZFdybW5MVk4qe29NViNtV3QxQEhyWjlfVkcwZzFbMmJ5WUtJYmwjVHB2Q0c5P203VWVRJDZJOix6WEp+RSNbZDx0RSRrUSp7JVFaaXcyLj9kd3U6L0xYQjBgeGckUSkvSlVtRFlXV3hZY2xrNHFdZHkzaTEmMVsjREpKaXxWR2Q7fCZqTjt1d0t9ZTdgbUU7''@;'; put 'put ''VTw/IyNfPCQ5KGwjKiVeSXReeWwkLnd5PFBqXjxkbl5+SjtYYTg2LyhLKlN0R1hUX0VQekFPZlU7K0FqcSo0TSl0fDNNTUw6fDl+OT4oYzN2MSF2Q187dH01SmY4NUZQOD8mam5eYkpVNyNrJXx0RSt2cjRIaTNzVkJYIzF4IjlMM3lRP3c3P0h8WihwWkwybTZGMTksX1ljP25jWF9QdihUSk52''@;'; put 'put ''cVNaYE5HI2wifFNNJGpwN1drc19mUntIVTxCIjM6LHJVMzpiKihyeUxGLn1mWF5MQHE1c1g6cD5UPXNnWkdiV2ZqdmRvdnZYWDFnVmlEUX5ZKnleank1NzptTElvflUkQ3lHdnQyQDNaQ0lwV2hZRTozNEB0XXhgKHAyO1c0flQ0VSlYLyozK2I9bjhZU0clfSp5JXQ1aS9UMVhhXztnLzNQVCZm''@;'; put 'put ''Z0o1d0Q5aGoxRX0xTXBCJS9teTJYcD9DZy8jVnhtcGRIYiI0UjVqZCwwNXdWb20jX193PylBWzhBW1BNYSM9fUkuTzt9RHAvcilgIywiflpSeCMwJSttXWV5SEN0IS8zP2p8ZWElN3MpSDFYRFVwK1ZfVlc+d1BFVFFKJDd5V05RQXV3WVMoRz1NNWZRTzZeZ2pJOXNTW3k4bXhpSWFfRT1VWEEq''@;'; put 'put ''S25ROT1YKGMpXjNBeEdARGp1T3E+fFt9Z3MqQCJRbXA1YSg+SXFDcChtNi9+bWxhV0s8LlhqPWYmIiNSbExhdXdkdlNEfT5vdGB5VlJmQzhJa3JDVXlaWSRwaHh7Mz8uaUdNYXpFfV9weVo4Om5LcihuRm9iW2tIJH47bCF8b2hZUnV3NHdaLDJOeD41fjBwfSt5Z28zMDRoNlhWTmB2d2I3ZjFu''@;'; put 'put ''X21nWnE3UHcyaE5rQFVnakclVj8lTG1EelFbUVJIVDVwU3JSMyp7LnZrdTwmLDw7Nl01PntnfVQrXT9NWTl+Q1liT0VsV0A3I1d3V1FKMyZpJTlaSTEhNX5SRXl0QzR6TjVOdjtsckE0YUpvZTtFSEJJQzxqMyF+YnFoWXI4P3xpYVIvcDJlcEdBTGZsSSNrYjJRR119VXlEdFg2cjVMOk9yQSJM''@;'; put 'put ''UD4oOl5JZEQpW3E2aG91ITckaF58SzpxYWhtNXFzUWUvJihnJT42SDFfOmtFOTtrfVU1XztDeXR8XTAzRiMxbGhZS1dMd3dBeG5afmxTSzQ4I3pmaCxadE4rdFFIO1YoYTxKIzpPSDN4SlRgTG5GVTJLVkEuQUhLcjo2cVl2JkNWejxbUUQpRHd0R3xqNFN8PWhgUyM9UiIla1M9TmExY1BpdHU6''@;'; put 'put ''OFRoO3VjZywlITE5PiFpLlM8Rl1HdW1XP0M7fjw9U09ZXUNpc2kke11FNVcueSp6RFhiSS86IyFwJFU9Sm0vc31GazYlWVFyfUZ0ZCY3K3lmaTJkKGlmeXllXltpXWwhIzxffD86YVR+Ykh6fEA2TkQzWF5ZVDRufno4aysxdDMjUlJ8ejd4aHlMOW1QTipMIzVZUzRsVldVUiJDNlMwK0dwb1NI''@;'; put 'put ''Q1R2ZjVjLztrbFpramVpKmE/eGQpOU9vdSs2dWdeWDBTfHI/Sj5HJSZOQzBoRlNAbDh9andgcXw/OHIyWFtRZmdbbGB6NWEyIjJIP3NiPFV2bCMxYHMzcjw+SlpNM1EiJisiP1VBamxAZztwL0k9TzQ7a1IzOnhNT0suTCx0KXF1Uk83fSNsKjZlbzFwVjRUVzIxRHdzWkFEciVtbilAbDhQfCtM''@;'; put 'put ''RUVOUS9QZHA+LDlIOUJPZ10mVXZVMDBCSzxPbit1c2Ypc3tqdG9vPlVyI3t2eFc2XlhkTjpFeGdsez8jc0ojbS9ETkRIT2BHYSQyKVp9JWQmeW4pPGE7TUhVfFJ+RCVXPT1PM2lWbiVeWGtRdDRIPXorYnc1O3xgSE00Vk99IjBJU0FZX19Kd1RzdTVpLzVkJUd9e35qIjNkTzJDPndVbnJ8JWtE''@;'; put 'put ''QFtyP0oxOiM5S11RSTFGdjs+dDpYMjg3RlJfcn09b2dEJE4qSGYyWi4zYmM8NExLRFdIMEAkfl5NaWJVUUwzUzQqYm1NRU9IZmY4NyM3PCRNLy4sLml0MHBKYD89bV5rP0h0U1VTWTYqJmZQfCVfWGg5O0peRENATW9SeWdkRnhrY0ZXcW9SVHxeQ251ZH5hRykyNjNKfU1semdaRUhQIi9iZ1tE''@;'; put 'put ''RHB8WSl7Tnhtei8sPUNAQitMWnF9OlZLJnZWPlJla0xWdTJ3RUQ5VlhyeSZgMXFIPiNCXl09I29MRGIydG4rQjwoYVZASFQkbVZjNEoqcWFXSGU2UmNLYzNqaUxMKWBWVTJmal48JD17UDAzbE1XMy8hLkFzTDpLeURoTzMuXlpoMjlDUDd6UFJHfX1PWnF1eHBOUGFQKjZldGlXIWgyQWRTcHdF''@;'; put 'put ''OnN+S11OPVAvb0kuUTVZdDh+QX0/OVdFT3FAY0hJKUdOY2s1MiVTKEhlPnVoKDkyfUxOX24qWjsoaG52YUUzRip3TyFeazVPUEp2L3R8R0p6S21JejQxTVhqJHhvd1tAcGUlL2N0aVEsb10sQmBPPVJIYzUjSXh5RWd3cllBTGxzdXEjcSpqKXRQUFZKNGhnSmhQSTByMExPfXEiMEglbSMhclJ9''@;'; put 'put ''T0RaeVZ2UFV1djc+ajFtPXdLUFElZj1XM1s2aGQqRWZbKEdhalZESVpYZ0lhP0k8dVVaMHJmdkMjR3soVy9kT0xYZGYjMDBGNGkkY15kNTl2JS9XZVlYcHFEYV1SSiptZk5be1d1ImZlWFc/IlpJamt9a1A1ZVpkcSNHP1lhMmZieE9nKWFXeEpxNk1wW1o/WytFMnJJMG5UbH1iOiouOllYOHYz''@;'; put 'put ''aGJvUFgxWl1Obyl0LjVwNFJ3X3YpYCRoPHxHSjlaVnBRS2NNWClUcy5nPCYlVV5gZz13QzM+eHkqYlU+W3JjQ1ZpQGEqK3ghSDoxcm13RyU5fTEmUSkrOCVOSClXcCRESFFwZExgKjY/MTlwIm5KcFBtdCJ8VFQlUSUoUTp1LlMudUFbQ1IzfkxTS301WmtBJGUzYTtgWDFle0A5JTE+M0RqRDJL''@;'; put 'put ''SFg5PSJ3OERZMm10OjVjSCxoQE5lNCZWdGUzKWF1ZHtVfEcjImptQn5vdEd8LnUvLGFMbGddcnJqVCMkQiFoZFVMWl9LR1l0MkVTWG8mdntILyUrWnJ1Tl5aRCZWOTM7PmpBaV9JfVtaIkAhIyVgIXs+Pk04flAsO05ENm10bTg5TVRTejFvMyg5SWRnTHtfPFRoMmBSNzB0YnJDU31wMHdwT1pi''@;'; put 'put ''TVd6Ui5aTG05LmhhaTkyfnEkWzZxOm9QV1MieSohQHJaQnRwalhqNzskWUxUb04pbUtlKXxtezpaL19bR2gvQy5XbSxTVm5rUCxFLnUqQyliQUgpOi48MHlYNE1SNlhwWU5jPVUrNWEmWi52cCMuMiZ3TlZbPT0/PkNhLkFQVCRmMnArfUtmbDk6cD8pU1Z8PVBUSHwpaiU1VTcyP0RYZn4oWyI0''@;'; put 'put ''ZGpmXWE/XS5GM3dacStnQm44YWFqSDh3SztJW28uW3JGKyJQSTtmU18yaiFGO1pFZlJpTnJHQTdLdTArTmJaTGs2KU04bSYyKmpYPiFLPUhxI2UvTmRuSGZLfitYYkQhNyQsIXUrZzwlW2ZhSSp1fWtJRm0lI3JBZ0IuSTVYQG9oOFNtJGohY3w1ZHthNHxSP24/WWdFVC46eCtiajl5KlY4ZzM4''@;'; put 'put ''Pj8uNmxCZ34xXWZTOTdoQSRZUTVUSWQpYi9NZ3R8Vyk3LkRZXyY4NitzKlpINyhheWRZQ0VuN0U5eUhCL0dxSlVmb3I+UFlOcG5sKSFHJi5XLnNscGJLVi9HaC55OWwzKT4ybUljUSkqSTBSWDF7fVVBbTgjNXF6Wkhofj57YkR3RjBQTTMsdUZBMVgkT3U2Rlsxfjh5VFZuK0ptdS50aXBeTntS''@;'; put 'put ''dXo0ODZYOiw7XiFrLHNodmhgI3JaNHlkQW1WQUp1YUh6fjdsK3hAUU90PXd6fiE7dXBKPFlecWp0VCMiWnBmTCMhbmxQPUlXdEFHQSp3fHdmOnBsU29xfnk+VVBGJihZL1RnPnY1JlIlUmQzbV5XMiVpWVUoUUowV1B1bUNjO3ZeakNNfi9rOCNNIlkpKTtkfW0mWSY/JEhJSXA+RnZOdDAvfS8v''@;'; put 'put ''V1FTQiVMSmNsZHtAQWd4cF95dEI9ZVcwRi55cnk0NGNwTHhfSTU+N2w4KnNzcTJaMHk3XjQrKTxkRmVaL189R2JpaE08RGhfakFud1kzcWlvXShhJW9jSUo6fVQ2JXQ5eFpZT318TW4oUSp3eV9tZzZra1BkUGlOLl5PKGo3ZlAyQlBDTUlvQEtTMEBTdz5qTVVzfFk+N1tVSTs9cnIuT2ZbMitY''@;'; put 'put ''X3czUU4/YUQvRWZnNkcyMnkjKjlJaEc4USZfWDtiZ3YrRk01ODNUSW1EX1RqLzkkTVQoeFdAYmFQbiRLQG9sXyFBYzV7KnJYaEtkZWNaNnRiUUMqV00rW2hxdXRAMC80fU4wb3dqPk0jOmp6Q0c6MGczeng8ejowTn5YcW0wNFQhMFVmNTVyLFU+azpyIm53OyhmMjp5WHZ6ZDpjZC5dQG5oYmNW''@;'; put 'put ''MyEiJTNiVkNERHtdKlhka2BsV1ZOMG1ZQ1hva0E9QUhKTj5Eck5AQD5OYWMqcU9sJWxleHhReFtMJSN1VmVNV2p6YWFZTjR1NjQoVW50Z1Z3fHZFKyhnNEJnSlp4azRMSl1NVls2LCh5aTlWeV08RD1+S1pwPHFCaTUkO0RBcUNZI0hUPzBjPUJMVFg1UnJJOVZYV0V4cmp2ZWFIck1EMjBnPGxr''@;'; put 'put ''KEsyN3EvIzNYWXg+IlpITFpDdC87IXpBIns/V2JxdnhPOlAoRE1hYVJCZiZ+NDpMVFVhNy84ISRHSGg/WFA7Uns/UCFBVF8mLkw+el9wKllOaXkrNFYlP2BROWE+dThvST44JCJsflgyTyFteCtIfjQjQkhmNlNFVjddOHhnM00lUzp5U0IpXV4uKG5CcXVlZU1LPUw/PjdfZyYlOzYkQFI9YkYp''@;'; put 'put ''Njpac3BpS3IrMk5Hek5QZnMzfjZmb1ByQjFYVGRLTyphWDUxd1BQRClvfFlvQ1pmK30/PHNKZk55d3NOcnF5NWExZCk6Yn5vXmxwXUVLUjU6b0JHZEV6KG9gc3BSdlQpYHw8YE9VVDI1OC5rOGA6a0JqXVBhcWtaZFB2YWwoL1RSTitSVDkzMnZ5eXxidnkoVXFYUiNUVEZORiJ0bX5FdGloJC80''@;'; put 'put ''UypRMkpkVjd+L2B5ZippNmE/cklhREJNMiszPn55SSFQSzxHaFhCKz1JUDNFUylbW14reVMwIjBCSWA7NylRXSUiMlUifDQzRSpaOnRVO2dXZndWWFlnVUpke11dQm9fTFVAZmx2YiVlSng9VEVVNHRNVzlyYiQudVQmfGMkYVkkWkdtOWdzVTtabl1ORywkc1UmNjtLdXE7N1lmeC52ejhJNl9K''@;'; put 'put ''M0x7YSspIVVfPDxlWERhSjZ8SDFYT24qWFI+L2grSEheQTBMUiIlez5namFJdiQ+dFpkMk1FIU9wS017Qng4Vzk4RmBXKVk3LzVlSX0uJipVb050RHdRdXZeQ0NdVyo8LipzZ2QjYVIpY2w2fThVUmpeN1RWM3tTd01PI2UwPWM4eUBNWHpEPGhfb2llaCFLPi4vNz5ha09AYWcwTE9nQG9pdUo0''@;'; put 'put ''bH1LLjh0ZWkoYnh6NGMlfUY1O1lUKHREQzpnPjhmWiFYYWFyOk9xRyRPenFvcHlbd00xPyo9P1t5WlJCdzVfISs9JnZtd3xAYSQmQDdbaHxnUlFNL0pnRH1GNEJIQS8sLHgvUkttJVR+PzF0a0lda2ssMy4jfTosK2JQVHNgeGpkPnRfWCN+X31mWiQlPFcmVys1XjtUMVR5Kz1eYCokPCohIVBW''@;'; put 'put ''VnxqZTR1aG0wfC9OfEhpUUR4ZEl9Z1JNa1gmbEtneUxwJSh3UlZCcWZAeEZPNUV8dzIxTC5ZIU9UQSEvZUVzJlFGMkJbZm84bndbLlhhNXJOZWNTRUVRO09ZdVFsRFA/UiQwMWspVyJeX0s5dXJuaGJLMiYqKlFSSSQreyZoanVuZFgibl1MYW83bz0reElNeG9FamZbWSNLQUBvSn1qM1J4eVhm''@;'; put 'put ''PDJ0Qk5vMTA4Sz5iWVQwaFAqN14/TyxFe2M7U05SSU8mVGVFamZFIj5KTVJWLCZeSmZseEliZ3w/Q15pYFdEbWR3YWssPGVHIlVrPGRHPDVKMCZJbWUhTWdqPz8rd2k9P1dXWDMwIldwellvbktzRU9rOC9uQnE6JFdXalc9MX1WRGQhcXo4Tjo/JjhtLEspLiNWV0YvPFU/ZCJpRTF+M3hGdTor''@;'; put 'put ''Vl9zJnBiMl17QzJ4X3p+a0l7eGxUL3oweTdTYC9RcUJ9OzZzPGdBO24hPkVSWUVRPDVTUG1SKEJsanI8QkNrPnkkMzpiYm52cjd7YVoiUjpnNk4lOShXZW85a3UxPWlrUTI+Sk52X3R9K05fJjdQdEVhaCtwbEVpeWJlYXpDNF9nLEYuLHh8Ylp4enE6blczYiFLTGZ3RmFscjJGcUpEJS53dUsp''@;'; put 'put ''RmExXk8/SU18KXU8Pk5pWzpQOi5ucSokZWptbzAjLH0kdHU3X1AhIzsvfEc5YStxemBWXyYscVA7SmJeMDd2cTNSKFt5ImBCKVEpaD9ncmRzfjZoKWZ1V14uXk9td2x0TXo+bV1hckEyR108PywuYmdsUU50QiZIUHBzb21UYyFifXc5REhZXSt2MFFVMy9ZMkh3L005fm5GaCVvWyo+c09fcHdy''@;'; put 'put ''YT8/VTczdWRTLilUeTxHZjsxOjA8JVA5RjRoLEAoRCRZPkcyKWhaSmloLn5eZCtSYlsqLmY0JTh9RTNGeWJKJEJ9YXZYQT85ZDxPbnhPYHt8fjdxTkF5L3pCOyxLWjZQMG9aVkVPQkRvKWhrX1lVeyRSXjBnJXFMbk0kVngzYUlYLkdxJSxGUHp9WWtsbzxuMF5mTDVsRTZobEVYQEArSTA3dV9h''@;'; put 'put ''PDsxL2opWHR+fklsVE4+UC5CV2piMV04WE14Vl0wRGUwJXE6VmN2RlBIZDZYJHE0e096I1BAWzl2cDcrOzsjMj5mRDVucjBFamYyZDxYKXY1ZE1NWXlwbm1SL1BkY0wmfTBvZiRFY3VeYypvSkBxWHowckpWKWkzIU9jQ293cCNXZ1IuJFM2aH1WZjshVWRMT19UQXBCUTtaU25dYCk7c3Q3PSNS''@;'; put 'put ''ZzhxIn0iXzJ9eDxSR0xWYjUwSCFKSSlDckMrdEZBVjliVF4kWSZOMn19bVBvV3lWUGIhbiVlRiNzL2A/US4xWmZZSzB1Xmt9V19FJXVVfT8uQFRCeis6Ky9FTCJtJGt6UClkUmV9OVRESzIxSURwRFVjJkR8Ii9CTk05RVRCeXA1fV1gYCU1PSJ5fXxEbFQ8fSt+Llc/Q19mZHU7Km4xMFgiezg3''@;'; put 'put ''eEw3YFJmZTJoY19KeSZiZ1YqVj51Q0NiKDlsNDVBfWFea11UK1dpNSgqLzJ5OCMhK19AMHdCdFoyZ1pHQHkvRSJTUTVQalJUdT5uKDklazliR0lHdFt7NTJsYHkzXUAkXmxqdjZJayspb0BYYHJpbTdOZGowZDMzdHR2VFhCWUpdVlZ2ZihveG46MC4kVClxRFJ8aVF5bUcjNmFwZFkveD1TXlgu''@;'; put 'put ''X2UicXJaazRfNn4ldClQP1drX1M2TT17WWRROmRHSVglSUNSTDN2ak9mRGJiWSVqM29ZOnB0a0hzPz5oLz8wclM6dGlONEJgbUt8N2ZGVUtJPk1NRSRiQkljJHwoRl9jXi8xWCROOzFQWD9nQz5vIXR2VVkrfFFiKntwQl5RfGlIcnlKWSRBRTljWWM2JjNZdVpEOGBYVmFHO1lzKEswdHxSU2Jg''@;'; put 'put ''KlAiaiZvez83ZXl6MD1QcV14NWIsMi5KZXtpOHNVWipZdnJ0aXN4fVpneXxSRWpAKVAvaiNJfm1DP1hTSi8hazN1MDRFUTp2QkMsPCJEV300eS83cV5hUSJ5QnVwVHFobTJ9UnBUSUsubX1FWStxeS5mVTJHQkAqUUd8cWMyNCMwPUJVMlUoUnY5O1l3VVV3PVVwa2hbNk4xND5wSXYhaC5FTi5b''@;'; put 'put ''KEpHfSMiUUtCblUlc01qbD5gMHpdZVZ4ekFiNSordE80Z0AzNnZbbl8sSEkqNzlmWyN6UEIjMk92P3ZZLiswIkcwZ25EZyFeISt6e08lS1pTb0UjZl1fUUIiY1BxLEp3PVlEazI0YW94KjEvcUhdQDhATkdHeDNRPGorVG4yTFhaa0k0Y1lyVFlLRXdJKl9UMylFQ3g0O2l7eG9rNVRGWXhAcEI5''@;'; put 'put ''RWBuWUk0NW8rY0glKkdEVnZYcyNkaGpDOS9GdXpJS1lwYn5XLExzX0BtYUhsR2p6cVFrcUd6XzpFMHRjaiVTTVd8dSEmJjNYa1JXKV00V2ssSj42InpGZCk6YGhhUz9bZmNmUF0yTGpkNnRKK0RxPTt6T3B8e0gqdEMuYjBEVTpzKCZSW05oeHYyZmdSJVQxeTVeZTtvWThfe31gK3VOeVp9ZVl7''@;'; put 'put ''aUBnN1h9aSU5dD02QHxbT0s2PnQkWUJzJWw5XzNzJWxkQHgsXWcsOjxUV2pebVdHWCtMbXl7QUdVOGBYfDFRVD5ISE8yZzxuPW0wdGxoWm51P3BOS0lrSEUvPClzQykuP0ZgSy97V2p2bDV3PTl1Rk9TeC5UaVpeblZHOkcmJElFNUBCX1o2dCNQL3gmRClSWmdEaT1RbzF1Ljd1fTdQaik5KyN2''@;'; put 'put ''dGxqNSEwejY3SE1ONSl2NCk6LHlGZ1gxalJsQ2hMYFV2MGhJMG1NPGtaWUs5bjNrWjQiJUFacSpgMCo1LEMybX19Kn5Tby48JHxndFVZVn1ZfHxlWjQ7Ny5rbklFSC4jNjZ7cXp4ayV0SnIjbVZLWiwqaiVCd0tra1VZfDRwUXw1ZmNHcGs2dmUyWkorUVFuYkdUSGlkYygiUEI3UkolYm9VMWF0''@;'; put 'put ''S0U0K3g9dnZVekk/N0EiREI7IjllKSNIZGtrY1IqYkRFQS5eZDNFMHlFaDdrKjtXQm5SXjxAVDM2VTVmP29RNklwMCR0XjMsNFtdZ08wMjRgKj1BXW9HYWpUKUwlK09BQmwoJSY4bX5eUldlVzdwI3ZkVFZdfGFiP1B4WHM+ZW8xM2UibjFwJWxoemRqTF59Yk8jblVKJS5HejVsOjdwKSY3UUZ0''@;'; put 'put ''e0RwX3MqLiY3c2BfR05zaGBZa3Qzfnd+a21UKkpKa051b3wuQFFBcjBAOWdrZSRrPT1PSFojTU0+dyhQMVBMJGZmeEcqRHUsbD9USz18OXkvOHMxPntocXZqYk1bWl02fC8we090alsxK2NAc2BrWnchOz82OFFYIyZjZHA1KX5LP2VRU1BIaWUoR3poJUA3byV0X0A7Qm82cTJLaXkiVFpML25Z''@;'; put 'put ''SSIlYS9ZQDBWPSpfd0BPe0tMZWRwJiEhZnlyaDZZbUdDQk0hUVclaFpvYEg3QnwqfVJJPWo/JmVROWR4NEY1b2d2flRHZ3A/W0cyJl90VzkmKDlZaDJfO3tVfHQ/SEtvN0FnKVgvck95Y1tiWUxhcnh0Pyp+c3UlPHg/YExYQGYyfj9bMjBCVXY6XmtYJGhGKUw+Pyl6ZipCQXUuTC8oby8hbmB6''@;'; put 'put ''RWIoVSI6NGVicVBeU2xmJCIpaS5sPDFxW048aFowfFRNU2xDM2JFcFRPRHtXTV5aMHk0WEgubkhrSCFTRW1DWXRRV283e2BPWDkqTz8qN19rQztpV3EiXmN8RHt0WlcoJTwiPXE6SSZMQGB2USlJJGUqPT5nOkpGJWYjMzVUfmgsMzk8JkdTeSlzNFlVRXEpMyFlZSZQam5LNlEzUGRXZ0s8Q2pl''@;'; put 'put ''NG9RQT8sQ2ZPcHRNL1daZk8iSChbY0JYUkNeTTolUz0mWHZeP2Y8ak4qZG5GKGN2SjQ6Mz9QO2l3a1MhL2Q6JUg4cjN3bHtMa2VieEg9ZmNCbDxzUltPSlYxZixYPXoyYG1SezZ1Z3s8fF80dyx0Km0rZkwseDJvI1R9ODxdSiFZPkMhJDVmTkdRM1dxb3shdCZzMCg4SmlNZ2BwU2FBQndjPDZN''@;'; put 'put ''dXo0SntYbi44WTNYQGdNSFdZcSJiVkhgeWk0YzEpIU91aEV3dlc1MktjdXVQYSNULjExb1EmXSVjdXF5dSluN2N1anNeOiM/TWZUfV8wXXtaeykpRihzSD5TZilVQHk9TU1TTj5XR3NJWDtDTVNzenFJJnguLFpPTE55VV1TV0U3I3pFPGF0PERld3IsLDxydlpzLG59eX1INFVXI21VUlN1cm5M''@;'; put 'put ''eXFtUWZlKSg4cVBLOVIuRCJMdiprdmJCaiUrfS5lXSZAXWtlVz89eHZsbmtBM0V+UH4+b1M1bHZXSHxVMHA8JlFNIWUyRiZDQlJkIk4rU1d3MCYrZ0FkRC5LIn5PUnJEb1V6b058WjY4Jk5WNj1gIXElK18lcE57YyZPMEddMlI5Y2RmTEFCPzQwNjdEJk4sbUdmI2JyK0dqcH1uZkt6QThsSnhN''@;'; put 'put ''N1F1LldqLHttSi4wSn52cVBne1VbKykkJj8kPmx+aHA+PHBoZTx7Z2J9Kix+N2BXeElgcUJpTWtCWSpJdFEjVV1qOklCU1RufWxJQmozMF86Ki5aeGlnKDxyUjJNUF93eks6OStaPldpNkpMLm1JdUJLeXQhQENZM2VUS1pNLnJ8cUMvKHkpZ0UhK21yUnxBRDo1eERTKmdtSHw0WDxiMWs8Vnpq''@;'; put 'put ''akE6SGRhVCZMJUR5ITIoOjB4UGROPjxkPGVhYHFHUiRJTzhCOT5wckVnP20vM0lqV0h0ZTxJd2xDfT1jYXhCKHd+W3Izajo2eUI+TCp0fF5pJTVsWTM/cj5qMCI0cl1tRyJ9QkU1enFPbTN4bXpNe1FqKjtlR3ZtU0hCIiRxcjZ9WG9CfFk7WTl5Il1RNUZFbDU/MXV3Xj0hQWRTXlo3UENgWGxQ''@;'; put 'put ''bmd8NjdPfVZifGMuKDA1KmUrPEVOT3NAN3ApKDxRMzs+KnVJfjpEPW9EWW1YZ1ltPEQxVTBiIWEkLj9YcW99QCZzRlFdckJvWnkjcz57VGs0eXIuMD9tQEx3ODsyUmopeGRBaiNfNi4jYzZCXzckOEQ1In1gZWZnSy9kJXU/bWNuRnJ2VXdURTFwbH5YRiFfcTY5cjR1PjFqRXApUlU6LlhSbjs0''@;'; put 'put ''Uj85QDNyNzJedDBCa18+KW02UixIIyw5RDtGMy9gJmVWJj52RCxpbWpaU1QyKWVdMjtXR1BCT0x1clIjMiIuI1t8VTY3YDZ9V0pVKkp2fVkqKmtoTFlxRkIhN3osSk8yWGVFSWIlTix8ZXRpRDx3IkwwIVt1ciIwMDV2ZXJsRyhCIUZNMXZeMXkxbzR8LGgyWDxgIzdycm9ydWA9OU13QkcrYjFt''@;'; put 'put ''MFIkKDUqeHRfOVA/WGVQJHQ5XmtgZEU7RXJePkloSDtnUE9uUkRVN3JXYmQhZmcsQylGRTRZPmkyaF9aT0IyWXtNN1UuJUAqdzI1KztWIy4+bDZFNFM1ZG9kaixOXzN9d3MkKGZ7STk9RSledklQQipFW3o2ayxAYXtFZXRqJjZpaFNgWHJHVS45RVtmNHBUQGBeRmxxTDgoZkgwPGQiQ3lnaT1V''@;'; put 'put ''Rm1gQzRSSTg3O3M+d25odUEydnFXKkRnSUl6d0F3Zz96JX50cyk3TDcyNlNIUUUofE9JfEZvRCs7XlBfak0oc2gkblZAKCgsWEtSNzFMQld1QEdqbXBuRX1uOWZ8Pml9fDY3TG5iNEQ2I2M7bk9HVTs6VHlfOmpDYjw2NiorNX1iSWB4MVVrKl9JJkxyeXY3XkdFcyk6VDpsMTNqNSkpdFQzKVEz''@;'; put 'put ''bWchVzYvZVNRdzUsfUo8KjlyIyM/b0hvK1hyK0BKW0tmbDI5P0VYWV8wRF0xLHJ+aDlzb044dEZ5NVVvXWhHOlN6bjB4dnhWW3MqTiQhZjFDVGAyYypRKC40Unt1R3dqRDVxdSM4PHVqT1pAenMkWCxVKTBbMUEuWmZ8YmwqcENZXS5sLjxmZz18TFImdFE5KGBjUWQlX04lfTg5RFhaTXdAMyZ+''@;'; put 'put ''KFMjcSx5bE9zdGg2ZzVLNjlCY3lUZDkqNH0vQFJfOWchSzhwOHkjZ3AzRWRuN2ppKyp+dWhfJDhgcU9aOD9qNndnLlAhbzdyQmhUXix7eFJ+JUpuKXdBSy8rSlh7K2V5ZW8rQU5iblRPWFY9VVBXckNoNXc0OyRdLGVwcU1qQiJST0htRypCPE08Xi5dbjt7azhwfmY0WDM1RCJbbkRfTCFHNkNL''@;'; put 'put ''W3F2ZTJBazYySzRiQC4+XXFwW24odCRfVStxNTRsZVdeflVFWmk/d2Y9VlkwJHNfe3M4MEtkSDksdSE1PDgjXXw9XSs1SUYmOiZZOHtRfEJsQyttN206Qy8iX0RYVUlKV0tlMz1fTkY1RjliWDY6Zl9uWVpOXzomKGZ3Z2RXMk9yLyV0Oj5+UUovSl8kVEEpV2EsNGpkXjQmPzZ5bU1mWkpnI2xk''@;'; put 'put ''a2tqOnxjPW5VV31BQHpJXzh7SXBMejFUQ2U1PyFMY3Yye31Fd10ycmR6P356QCFQLmlpdjxKe2xCJGBANXpkbnM7RH17I3tdQzNrWUdmQzFyalM5ajElV0ouMWNFIlg5N294SmtTUExPYEB6PyVqQHIjZUYkaFVRPSIuTFQrdFllcj9KSClDMkEzPXBXIXdMNng2dHZ+cTBMN195IXR+VVtjNz5C''@;'; put 'put ''SWZNPnBJW1FMIU19VitpNipNcGIrL3tpW0A7fC58UD4qZ0xOUGlFIktnQSUqR3Q1Qn1yMUUwbXExbFkyQzE8bXVnNWUqKFdFYDB2OFJteilmTmNDYGhNQkBeJWNwJSgwPTZvUlZgUk9vSU11WygvMnEyd1VeUDJ8NnhjKXZIP2g6ejAsYVkzan1fLEJyYnBKTyJhL1d4fjV6SFR9ZE1pW3t5b3FA''@;'; put 'put ''eHBnXTphfGVWdytFSn4xVlhLSyJhNT50czVjVVlUc1Ezdi8lMipkKXtPdixILElmbnYsb3tYbyRPVUV1X156PE1JVkA4Ik5YV0NzPS8wVTFiTDQ7PyNvJG5pO0E5eXk8NmZ4UTw6TmpJZGg9PFBrSixPJFhTa1hKWyJWJnthIztTOUxJVGoyOWB8KTU+R1B+PWBHY0FoTUw6O3A7PnlyOzckVSg1''@;'; put 'put ''KTM7SUlaN0NCaTZncnpSYT49IztBeUVWQjVPVj5LTHV6aUJxVStWKldCfjFHUE5vOXo8NDJtVH1TO0NDYEAwTD46QHoleUc2VzsuXS48TGROISl9aXVCVlc0aSRycGxnXXM5MjFxYDk/OCljRWZaXloyJk4pVkEidXtydTNjN0U2ciEvOiRZTlQ4Tjw+RU1FKXZGR0khPWYuNCE1JUx8eEEySXc1''@;'; put 'put ''bHBOP1B5OV5Waz1rOW9ubT1sTFBAY0BHRUZyJFdOY08wdy9KeTppQ0tGUmtdIWFoKik5ISpTVltQOnhMUiIxZSNCSkFMdHQ2O25bU007KWd2SjNuUzU/WShKYkhQLkIsTldte08jWzg4MStaKUU2dExZZEdoR1AvLHpVMT1HPkd2SXV5YDRdb08oezhKSzh0Szw0YUtgISwkPURARlJtQnw0K1hR''@;'; put 'put ''QXwsMyo+bGA5YXRuOUM9aTh8M2woVSFMK2pDb0s4UXFddFRLTmNpQGFAPysvJGguPnhweGFzckZxfGNJUjEhUlM+IlAjWzwvbW1wQmhNaipoV345MmFqQ0RjUk9KMTx0V0shdWBveDZzMigwTWlHMjJkSkhHY0AsOSV6T0xUVipmPG4oUnNuc0VdRlI0UGRvMTlpeiU9eE4/KWZzLC9kNlsmSDZl''@;'; put 'put ''e19TVChnREFye2h1KzpjSHB3Z09lK18rK3Z1YnNWRWNQTHlZfiZHVytGRX1Pd00uMHxoPmd9YGhvWXptc3UoclorbyEwdVE0TiFOSVBYOlswW0o9Qy5FSXtZKW03aFF0WltCXmJ4MVheTkhWPT9vdnR1QyUhfjBNLFQrMn5+ay5ZfVl5XzgxVU58Q0A0R2ZReHxNM2JAWT83fmAyOWl2JSo0Pz9r''@;'; put 'put ''aEBqLE5HJmVxWWdhZiVbKT88PFFhZUUpP1t2dmdLWnJLUVUsYFExUHAka1BUPmBKanRSPl5meVppR1lFQXQsTjZ4TVsuOFB1VWZnT1Q3VU5pQXlpPD4vJmxqdWhAd1thTkxjfnwmRWNuVntMXlFxTEBGfUUkeDA3diFBJFFIJkBmXVEkcTF6flEwcVloS15GUypqRXIyO0MyZS9VMik8akUhL2Ry''@;'; put 'put ''U3peTmJKNCxIcFVkeGgvPit2VF1qbl96YkE5TXc/V0RQZXRuVip1KFhVRF95eCszXXJbZFRXOGdlKWk5Z1EuNVA5YU0+I0pJN2FyYzRMQEF7InQuL3p9bjlCSjtqbGZCbCw2UUhYJV12XllLSlQ8O1B7ZH0jLzZNI2Q2X2FdSmtZb091UnhpSTdzZih2cz0iRmt5ODNdM0xpPEJwfVpJM2NKeHxW''@;'; put 'put ''Vkk2KlUvWzU2STl4d057ZV9jLkFZIlZIKVdRfEJdLH08SUJ4fjAxcHkiXX13JkJzaFhOeTRlMzdlUWhyQ2c2R0smRi5LZT98NyVaKypwb0U8UHRvWUlOMlg8PTxCekpXYDFsL2JMVzQrdUFYPk1kSWY7P24wWldHWXZnXnUjdmA/d0w0aF5zLGF4KFZaOlhdU3dsJl15P0R9Q3FoLGRsdS5hLy9G''@;'; put 'put ''Ylp0KWlLdy4kSERee0lfLlA9MzVYbm9kVGhGKEsxM0opa1Q/V0hISzJrYWh+bUZ0ZHZWSTc9JH5JKDVRW350XVtHQCUyQ0ouKjZgWj5kb2U5LF1jPl14en1tLG8+P3AzPytnJkx0VC4vfj09ViF3MntvckRqVGJLMHl+YkxVKkd9ZGJqRFp2NDVLTFVeYmFrQWUwZyJyQFY5ZFBHIytQSkQ1ZG9g''@;'; put 'put ''KFtvPkQrcUs0d0tsVClhTUovZ2Y1RXNdV0ghI2RZeSYkYnspQTo4c1lFOjp0T34rWFllKD9PR1QoVVB8amV8Y1FRdyk1bl15dU93IVRhfXgjTGdDUVM1IW1tQCRNMiJGck1xbyxUbSRrdFE7d2RzU1J1MF9qbF0hbHVSUmVHcEhSYzlyNWFfMyleNmQ9bm9pPVZ4UiR2Vjg9RmBrZD49ZnJbXWI0''@;'; put 'put ''O0BEZSs8Pi8rcGRALnlXM1lfb2U8ODB8TEN9OWR3K1tCVHxtRHtCYz97e3NSSE1SLkJMSHAmbWZKbiZFLiZHeiRpdXJQc3R+WyZ4WnR5dj1Zcy5aeG1qWG8rcWJMT3dzQ2Z1SWE8KHpqe2JaY2FOcC5KZzgmVmwiQ0E0Ozk2R1k1ZiQseHRmJVpjQCU6JFg4JiQ5Y3wlMlpPTWlTJWkrb1l4MyI0''@;'; put 'put ''XlZiLytyNEh6fHNmZVF1ZW1YVUVrfWczZXdkaUMrS0JpK1d4bUhmUmhlIiZUN1Ndb3w0cFQhQjdXdTtDdj5XdmZ0dkA6UH1mVGN5aCJUV0dGamBeKXk4VXlxblpKUF9lbyhReW43JDY7JCshP2Vybk55TVVgJV45OyRgL1MoN2tlOkx8P0MiUnQpIjM6YGh3PEVYOHpjc19lP0VpKGNwOWMlU1t6''@;'; put 'put ''akVZeHl8MEx1IThwNT50cDMiY1pVWWVmMnBiMSpdNCpCKUU1c09SKUNfTElNSHI/d0hmbXp5fFNePnNeQFBfSWFtelo7NW0jbnRfMSR1bFh1WnoodGYre0lJOHFfbzMuSlhbJkVXdWVNel9nb0c8QEVRNWplRixfaSNnWHkoNjUxdCNrK0JTNWtkI2o7W3ZuITBVQyZTMFJVNDU8OWBnTWxHdVpE''@;'; put 'put ''cWMyKTQ5KFtRPTNXRmgrdGl0Zn53fltwP3dQa1M9N0hdX09CUldEdyFGWERhfW1ac1RdfU8xNnZjZiFULCwhZXwlMGhgWEkqKXhiN01saFNFOHVGLDQjOEE6aU07YltXbEs9QHA2WXJ9XUpNW01iOThOMmVbdUJEQUhUPFZhaEp9Nyt6dFdQcCloZGguLFRta0ROS3JVIjp4JEpxYE1daXVAYFtP''@;'; put 'put ''MnVMLHhERDFrJktMYyg9LkJEZFdVTFMuJW5UZng7WntwO31KeCFZbSI1TnBEKFk+P2h4T1hvOExSMTdOZzVrI2kicSF4fmpZb2YlN191ImNweUs+aXQ9USo1dT1pc2RvX3I7eUhBUj1Jc192S0cuem0hbnNueVFbN3A2I3ZHYER1M0FBRm5nM1JoUG1tU2FHdyxEUGxqKztsI2NOSVEvdClnd0E9''@;'; put 'put ''UEAuMH1xamAkam8iM1cuYmR6MVAjKEI5PVF6b0IoZzkkLl5wNS5bVXUofHplb0BiSy59Kk8kZnE5KVFhJmR9eEQrIS4jM09nWnpUOGkhVkpfSTUqdSV3OzJ6VHIsbGxGIypvZ1piYS5iNGk1S0MoLF96UX4jL15NRV9dVldoOmwjcj8rNS5BPl81Iip8WDAwTXVgNSV8OT5TWWp4TyRXdjFmSn1D''@;'; put 'put ''LDN0UHdsPS98YzxDSHxAPCMwem1WK3lBVk8+UHNPSDYsQU9qM0hRVUI/ayJXM1tRYF8vUD0/eTJAQX5hOEFwWDhZPVE6SFVOQDwiYjNqNHVxbzdMLi5RNERLfH5sRU1ZNndiNG0xOjs3IkVNe111VmttSGNNfVlJOkYmTH5DXl4sYSswSW14bThWbVdWeD0zcUYzbS4qJUFFcElbMylgTE1IWEho''@;'; put 'put ''MWlFP2NHfXVdXyFXJH1jb2AudiwxbEVpb25PT0NxNW4xfj4+YCV3UD1ndD9kbF5uZX5xcEtCTChCPyVmfj52UHE/OFl5aUdIeWRHaEJMKTBUKTxFQUVleHU0dC40U2NSY3EkJGsjL3Y1RkJhSlQ2Vy5HO2lpVTl7NCovLGQhKyEkOXooYkN0OHh7YDlSaUZ3M2k4NDJvKVpIQ1F3STY9OjF4aE9v''@;'; put 'put ''ZGd0RF5gMkIlMChUeSNpQlAqbE9SLHRCJltEdFlQcmApVHQvMD4pWTc0OkxqLG4zWHsqTi5JLjlLPkZoNHxlXWttZWxHNGNwTDxzTzpJR0VILnplWHVkU2oxNT42SSw0SXc4OkJUWztPSUUxQnk5NUBuaUNDTSZ8NlIzd0hNbzUwS1g+ZTFCRFk4PiImQ1lxQ0IjI0N9RlQ0b0A4TDN0JUFKPFRB''@;'; put 'put ''VXYhbztILjRxViVqZSFtbkp3YH1GMTg5OTJUKVBPUTxhUmUhNyE/TnBaWCE0Wz51MEwydSVDSSV6JWZSQDkqQU5zV1ZBeiMwakoxJUNAZiE6NSYoXVltaUoxaU57e0dWUFRPJX0pRD1eTEB8cHolZDMoOnZ5fVJTVEEmIVpzSH4kZWdiIXpPc1AhZXRAOU9GbExCWT5oLHhRWis8TT1afFgxSzRo''@;'; put 'put ''ZlpuO3R5OTNJfk9NYD9EPll8SmNZRSlYYlJ7YmppRElobWoobW9Fe09dWWtkbkJaMUs6eENMTHJQQEV0Nz5YdDZ5ak1BZUN0eF1adyJQUENCW199OHd5alN3VX5hQlFjNUcjXWhTdG1HYlQ2Sn5SUDU3UU9GXXImO2lZYGdybzIwWmlUI3xjdCIxZlcpQS5LPXB0WjRIdktNIjxHTnsqVHNFanEl''@;'; put 'put ''KG5pbFNOdyQwbWQ+WGszPTFNY15FWG04VCRdMz5YQCZVTW51MXU0Uik6VCFHJkV3S2FFKSJPZkI3MHZBQExMSFZTbGxTJHBeRi5pLDxyMD1uaTJdMz5hbHgqaTVzPFo/MildKG5vTV1IWWtLYjQ6cyNpKldkUXgwaWtqbSEuZT9Ecj59RVV4Lnx+ezJ7TWIlZHNSPkdeKmdoJTY5NzYvbVUmITVy''@;'; put 'put ''OFAhWk5aWG8uLG5eSVU9T0RjPGhPT0JWMV5NbTBAeUMsWHswWSRNJVsxQlNsXVUucDROcno1IXJGZm5+XlBLbkpKYDg4MVg1LHtsUDkhMmszU15qPEZPZExkYGJnK0JjKyx1Ong9fXJ6KUhITEkuNyxHX3hoSjhmVTQkSmlYTkVfNnNOZ2pKPHJGJGNiJXkwUWR9KFYuMWVjWT40bGozRVI+NnxE''@;'; put 'put ''Wy40WTFhOUtdTVNURG0vWUNQInhpdU5yTzY+JSV+X05KVlNJR2VVe20oSmFdKnpgITtpPlkrVGExMj8/UV5lZWlINE0hdi5kVTdpdDt5UTJLdl43dURNbEcuUyZUfEx6aFhOZTF4MytrIV5QezAwMXc4ez1hbWwlUnFpTGcqQzx5UmM+OFR0Ri41aGZBQ2p3MTJDM3d6NWNhcDt5PmFoc2lMfHBl''@;'; put 'put ''Ui4vNW5WWUBCRDdbM1duQUVXcCZFRX01NStkLFNAQjEuSSZYND5Rd1tpekduUkN+RzY1NklyfUFyJSlbTmMufi52ajgwOGIzQz9HaFYyfiFPdF5bRnZyYGdWYGU1cTMjWUY9NH0pQ2R8OixwbkJpNXZufihLUDdgbE95SWAiS3tNeG00dyw+ZUlVV0ZMTyk4PmBWXXB7Jm4hJVE0JnkkYHVASz5N''@;'; put 'put ''N0dhfGtuI3VWX1kvOVZwW29LUVVPMEZbITs9OjRbPERIJU0zWy90NCQ3VlQhY081XSx8NHxjWkB9KnZOWEVBVSxGdi9sVlJrZ3dYcUxISVNbdHNNaGAxTDEvNFQ5K3BrWDI2MDopZWchJUFZRSUmdHN+STImaysqLlBIQk47S35KPF98PlM3JE9XP21XPH1TNSU8SndMLkptJHJUZ1dtJEw7Vyg4''@;'; put 'put ''X3Fbbm5mRGwsXXZyZkppdzVaKy5rbilMOlZZSHhEM1trdisuXzFYR2RGLExoaDUrZXVDYlkoWWNkeEptR107b3BAejgyJk14ejQ0PiZ7PywmPiZYfjVCYEs/T3tEZmxAdjk/by9VY09Ha1ZEKnBJdnBUQEorXSFhRXpoSTRNNGBqbVQ0TDA2WF1HNiJuYmVoTnFQUCVqO1t1QjRqVShEYUtbbkZ3''@;'; put 'put ''c3RxcEAsa2prJmUhIVk3RUlHRXFTRjhbXVRtRnRXOVtbISpuQDhzamg6NXNVVzJ2WVpwS0xxOyJAWnxSSE9UekcjdFhtXVE9P31AZFY+W3F4WEV3cG0uKHxxazshV1c1NChSaX0rRT0jWXw2Ym1LOkpVJGViT0dWbEdOWGdCcFcmeTlISUtVMX18Y0dPP3IvX28yQjhSJSszKj9ufV4+ZXZHfnNy''@;'; put 'put ''XnEySSxqZjFOR0lhTy8vTjRFcDhYP21JdyZ8NUZpJDFfK2xQPitkSVhMaGp5RkkpQkBZeCt8a1h3WGIuIzZHOyNHYn09WSo2eWNPJXl4aHRqNDZ3SGhDL0R5SDJWMnNbe1N3YGsvRSkhe1lbQkkvT11bZGM1WixTPFlIQk0+IUBKMnklJVJMej4qOiZAUDJ2RitoVlhoRnRdJH5HK1lMM3dZQ2o1''@;'; put 'put ''YUIsdiRkL2RydmkwaztWS1JTVS8mKk1wOE8qNVY3Uy5WK2ZyRnx9ITY6d3YzK2VCJEdKVDo3IkkiU08yWTlINzNkaGM5VzBkZXc9aC9ydF9IKzduMUhhWTpgP20/QnpFbigjbF1LdjY8TGVmJCZFPG1eVzBBJHppcFh3c1hEQ3VuY1l+TVFzZU8vOlhbW1tyRGR8fiN8THZKM0B8P1BSO2FeQng7''@;'; put 'put ''NnFpXylXUUZmc31zVkpGbFZ2cllWcl8qdUpSWTwjN2RtLl4yNSYyQFFwW0RgSWcwZUhWWChQMDlNVSNuRW0yPXosTj47W3ZQM3U4dEdRNGltOlE+e2tYXUxrZkgmcEMoaGkpZ3tLLy5mJXIsckh7aj9BdT05KSsiM3Fleyt7ZHgrZF85WnVPVTIpQkB4UHY/YCh4V108Myl+KXtkZlZySmh4XlMs''@;'; put 'put ''czMzajA3QHZ0d1pTbnJLVFtrZDx+RmBHXXNHVnpnPWksanxuZmk4OnoyY1F6dz5EaVcscDYrZk9kOnJnKX4xSmJWVGhPPCpaTUBraVtHJH00dHZ4fipuYHUybj5OPU9jNT5Va35EUHMuMVpdM0VAI3wrQEsoPFVSJUdsWl1sc3g9SmlGYzsmIm5OOFkiXkh4b2N+UGhwNVdiOD1wOEIsOj4+Qjdt''@;'; put 'put ''PGh2en09RD1ULHd+aENpTW5teG9zSW5iP3N+bzk5eTttRXJBbXVIR3E6eEA5Ik5ZRiJaUzEpWT4lOCFTWkFLODBSaSphbnNlLkkqQXIwQmoxP0xKLCxDNH5pMnZLLjFGbSpwcllyP2ZSOl5MMTZ3citxSGd9bz4sSCVBPmswKlYqUCRmTH1+b0RPW3ozJWAzZiQpOUw0V1FjMWhjTXpOall9Lk1m''@;'; put 'put ''R0pTMjJIJlQ9Sz59Y3Uva100UzZhRXd2L1UrRWZdcSteNH5yI3NIZkhFQT1KVWdRQ1YoQSJ0VW1oP2lySz81XS8rXV13I2d3LkZJN0FHTCwlaTQ+R29pJTNGTltzMUI+PyRdJmtbXygkLG9bWihQeDt0Mm52RDE5dV5SeSQofWJmW0pme3U6TXo2R0gwMTg2TlM7VTwudUNvUWwpRTQlYDdTOF8/''@;'; put 'put ''M201Xy4rP0MmUTspODY6InIsZGVvN3AwfixZLmdLaSgzV24rLntpWHhuSGlCWFhOdXtlNCs6ZD1Je1dPcV9YdXs8TmRbc1RpfWtnQ11dI0IyOERPdUxpIkIqaCRhfU1fVDJGYkh4ODI7cm1AYVQjLG0lQDAuMiQ5ZFVBRzZpMk9AJH0ub1FIfkEmUWNNQkplSVsvPmRQXXhtUmU7XT45KEZ6I28u''@;'; put 'put ''dCZvb0pCL2dGPiNxXldlaURfVXtXJSFYP0ttL09wL04pPlRHfTA1VGEwYFErQFMkKEBReDsqd0JWKHNAZi8kdjJOTmxrUVR6RiN3fEVGQ29xOzRUVjdOTXxlfG1HTFUle3BmdWIvKSpadDl1Y2o1YFVtZXEzbTlvSj9STnk3PjZvNCpaVDM6SjFaNXtyUntwfnhkZl5RdXJ3YSw3YEM2Tzs+PXws''@;'; put 'put ''PmAlR0U+amQsc0x+Wk4kMVlWVDlsR3lpKCE5TD02UkoxfDBGYnhgPmQ0NTF0PjJTV14xakN4NGV3WXYxODlaPi9+dCV9UDtjMC4+MnNBVEtrZF88Q098WT4jYElILjEpKTl5dFJpMDtQWHAvSVs1MHQiTTdmdm1BN3oqMithfCxqUzdPYjcoXyZdZDZabT0rVnJHcFhId3tkSjxddU1pcWpPZkNY''@;'; put 'put ''WUB+OVNjW2p+Syg1NDklSF8sUWx5JWJ8OkNkNU9fJilvNUFAbDFUXXZRZnY/W24wO3I3M2xZQXNpYy9NRCopbVV3eEpuQilsOy5MP31+NzptIXk3O3wmTz1sP2BseFImZ0cwcCs/YlYpIl1wI0NiZjpuN19dJmw9fng+NHc9Q09ja29ocEJaUUp+NXI+OEZnfW0/MVBqQ0RAeUZIX0ZUKTlpJnli''@;'; put 'put ''Z2lbLzI7eyhDZSlZWisxMlZCJlhnKXo5M19VVHZ4MkZhIykoMm5vVjwmeEJaSnpEdkNmdShMKT9saUJWYjcmMV4wMEp7eT1bTXY6JCJsfiphaXs0fUN3VmVLKUZsQnskfHhTNCMpfHNiLjRrWSsjOSV5KFpHeFdydTA0dEVUZXBOZ3RDV3YoU3tpeigrTzcwRyxTXz07IWNQMVpFJWs3bmZKZ14w''@;'; put 'put ''emhwZHRpI0RRfEBnV0JVSHlrRnpJOCNKdE9iYXdET01qYUYsWH0kOUozek40LyovUGM7VEJVYmIkSztFTj1OVyI6JGpHdHN0eyhdNjdnM1lVSDw9dUFoQ0l3dm1jPT4hNTZvPGJ4XTNVSmUvW0toe0lmV2dKd1Zec05hISNWWnI6ZjRNV24sZUp2RkVYfnZ3d31XMmd2e116MTclKVl2KWZxV1oq''@;'; put 'put ''Uix5dEwlPCw4OCxVXXI0XzBfWCpeJDp7fDBeWm9+MTNta1dTUUJbajV3KD93Mk5rJGd5YmdFLHZuKU5ARTQpdFlKRUJBP1Q9PiRGcy8/MU5bSyg7bz8pel9NRi8kVWhQOG05WCtfYy9lQDE2JENzWTBvXyZJQ2osaD9SdkRnUT8le0MlN051YXpYZ1h6UzVvYzM1RCFYZjs4fkYxME1gTyo6OiFW''@;'; put 'put ''JTltLntGJGdWJkxHclsuUk47N3RUQmBzNlVXbkZdK1ZNLHtwX2FKPlMwbzw3e2F1ZWdsMjdDZW9CPkRabkBMTUJ9P3dQaz5EOHYmViF9KWhKSD91UEFmdlFUaFlfMXYrOXxtSXN9R2tXLnozN09sJS8hPGReOjxYNSpzI0A0bGQlIXNELlpJbVkze1IkWldTcjZPUmcsal0iIVYlNVBXKWd0NV81''@;'; put 'put ''QU86RlsrIXFQUiE9clM2Oi5taDZOJEl9Kyk4MWpHcld3WEh+WyMvSjlAK0FhL1NGfldXRE0zXVRGTihRIShiQHZJfFZTOy92b1Zfflh6K2REPDVZdnZNZT5eKUYsJUxXPzU5NH0rLiNgSzdZYHlQW3xeNmYwMGgyNUxmTTJbd3VmMUhRaF1maWQkO1E4NT1gNWZmSjRbNEgxcWM0dG4+NDE1VW5g''@;'; put 'put ''am59IWB4SU5JdUs3JEErI3RVOXZhNDFlTHR3LHtpTnArZHBILzNATy50YkMqM3RhUmxmXUR7fSUqL0EuOiMlXSI5U3RjKCooPDhwO3l8STFAZThJc0JVTkR3UW5IYHE3QHhIXi5dYFltKzlMJXVRX1MlOlhyQzpUOSVaNDcyKVNwVltlRy84VTw4PE13e04jSUksZWVQRDBleUJpcVR8K2Ile2Jn''@;'; put 'put ''dS8hLF9lNUJ6Mj1GVmVIdk9Lfm5hOlQ1RCF8U1ZJKlJyMWNHPCE4OltBLzg5VyJ8Mzp2eUVxfiN6ezVgLkF3ZnYyRipUemNJanF8SltZdX1CWjxUaWsrLCVuZ3tsTWojOlBmQCE7ZVFmNC84IT9iMlZnQ3JYa3U+Ul1qPzZ4Jn0wZlVecFN4WnoscFZQQzs+cUw9OUN+Q3piJmBqZThLRGI9aDtF''@;'; put 'put ''Ll1kP1JmajF7UHdISGtWU1V6Rmcmaj8hb1dNc3c7e0JjZH01fSM2ZGsqQm1zNiFxQH1MbFBvJHZDdS4sM35AbClwOWlePjQ6Y2Y8MDx6OnhCKmRWck9wZHljKTUyR3Q3fH05d3I/PWI8RXNZSFJYZTdEIXRZNGgmWlU7WFBoYDZ6O004emA5NEQmSjoxbD5rPCEzbW9ZUyFWMi48W0t5YDM5SHV2''@;'; put 'put ''ZCV4PEIscno4Ii5Ye1s6VUIqbykmJDl6OCN8SnB6cnxDPFAoUiRjZk1wTDthR1U7VWI5K2YvWTN4Q3VJT0wyM1oza01ZWy5pKyJ6PyxkeG9rWzMzWD1mQj5MWCExQzlaUUEpQSxscVZCfDguMHJxUmBHZzVoelFdQ0Fed1dfWV9gMzxCO3orYzJ9VjAqWWJLPXxiVUgrSD4lWiVXP1YybllpenJo''@;'; put 'put ''bkNaaiFrQXFddWZuK3UzcCl7IVlHUVV4S2xvYk9OZSx0bjR7eVlyZGMyNn1QZSZFIjdgQmZFJTBUPTBec0Z8Y1tIZkhEY099MT14Nn1rYGpYZm5IZkVMOWQwWk9sOChdMm02cU5aZjp8SEM6cTlhOk5sI2csY2ZoIyYsNl8jUi4pbF9paDJXPDI2KlR2ZCx3bVklQ3xRTEBeNkBTWVZgTyxNaS4z''@;'; put 'put ''ezBNR2NPWEB8ZTNYWHdYMTVoKFRPPX03YjNtRWVEb2wmU28ufF4yVCpjJFIwMTtnPmcuQ1tPS2Y+KHozYFYkKW56bkc8fEMhMjg9aztUQlM9LjZ7PSY5OG84VDZub0s1Q3E+NHI4VGo4I0lRL1RzYEpsVERtInc4T1huYEcrPGgvXT16U2JiP1cpbiNpaXdNJTIybiVpcVVlJn4zSmRkOll+Qls1''@;'; put 'put ''Qmd2dkA6TUlATEkzUFJsbVZwSDFTWz5ufm46KDxuMDw3V3xuO1RzYmY0Kml3TElSQlsrclRAOiUpcHRiUVR+TD9AMz0vW3FbUCVqUWBbKmU4LCZnfldHY0FWYlV1Z3tbNS9ybV84X0B1P1o7KTB2KF00MUUla2ZgWWhhP0gzKSEldzxUIW5oPyQpaSpbUCxaNlZ0WXFEM0hZOH5vc1RofT9YWXtP''@;'; put 'put ''Om9sd0RBZmZWZXZHLiR2YD8mSjRXREQvUVpDQ0Q1K0d8TChyemBGQ1c+ZkNhRVs1RVRnb2smQH5WRXZpU253ZjJ8czE3KGYwUF5fPXovSDIvIk1AYEdfQDEvOHlbQS95UDBbRXM3L2NSeTBZaHpVS3BVXWJwR2NZT18uTXQ6fHNAMFBTV25gOD0iWF9mdyZ5eFdPQCVOJWZsfCt6VDtyaUB0Y0xb''@;'; put 'put ''NzohSncwfC8rbXB2OGJlaCwxQ2ZMRj12YjUjN1RvLikkZ0x7O1REbUIreyVnYikyQUsqMiFuX1pHQjJGd1tUZUhFKDJla1pQXjBAfGtSbzYldVcsVXNtPXtWO09HVVh4UT0yb0dkb3ZOXTsxcU1Wdlg0b3tJKCQyfmphP2ZWeGMhTW1HJUducD42UDFETS9NSStubH4xbE4jdlt8fjtlM0Q8OlR+''@;'; put 'put ''a0lVSUVTPTN6eTBlSGllayM2bjRJWEcycXlXKU1XXX47XmxHezFjSWJFPmgueG9uUFgzZWBANVcqZ3o8XU5bbndRMjRKWDxfWTs7KiVPIzhlV04wTC89MG0wcC5jKEk7LjglY25kcHhgI1dPWGhHRTxRO35gIXhFRHJ9UWtqWm5+SDFzfktmXyEjOzlmL301OTttRWVedElCJTpjIT1gO1VKeGtJ''@;'; put 'put ''JlhyeXlQT0M6OUZ9a1lid0VUTzFlZj4zTSwuWiwraTAuIUlOMjlibWtfOHtiJDo1XlVMPTZqPmhhKGd2dCtiVGhkczx0YlRnTDRIblZyfSVLOzQ/WExMSHIxcVZtdSluaSg3VzclPkp4YCpQZjJJW2hjai4zXW1nUlspWkJwRDdXLnVsTWgvZVB4VGQ9fE5LcWJtNTQwRU1ieE0rL2lDIUtyK15P''@;'; put 'put ''PEhQRlIuLEZUJTpNK3pNPUlyUj9kSipUI3V2akp7Lmhkcy8vSXQpOT1IdXhHL1VFRHIwQ2R1cW1WW0B5ZS58PDY0KllBVkIjVHRJLlM1YW9tKU9JRzExfVFaQ2dnRUE3dkVrQ2lbKGdLci5RXlImTSIhP3t+OUpleWh7fDc1NS5iImgrUD06eUVKNkh7QWRBbzRDKTduZCk5fSkvaWBWRzdtJFou''@;'; put 'put ''ZU5nYFgrOGVwMG8jdWxySmVLSk00PHcyeU8zMXlpLnlyfF9Wdj00SjJLeG9HdF12SE1XJUpHczxxcjMxZzU7Tz5lPj5GZl91Rz5aPCRVX3U5YFE+bmNARk4hfDlVZjtVPDJwdDJ0Ki5bb2pzbEh8cGhoJEQzdndua2JUXj1aL21jbGY4NEc3PUNNMS9+S24vLmMoSSZeZTNCSDlie1ZEKjtreW8v''@;'; put 'put ''aVJoQyFWaFhUa1Iwb1NJUG1CJHBpOjtqMWVkaUduQ2NkPTp4KGM3LzxRSzA1UGwmXj4oW2o/NUkkTEJoPWthdVZMWF58T1gmK2lPVWFsaThWT2pXQDI9c3EoL1p5NTJDcjNvNDFRPFVzQTdpS0FObDI5N21MZXchK2c7TU1UKHxAQ3ckMXJLOzF5ejZAeTZCRlhTYD9qWl5KPVt+P19DTXc0S3N6''@;'; put 'put ''N0hhYDpBSipwSUZKflg7VWQyfm1VYztjKTlyNWBRPnB3c2VDaURwc3ElSS49ZyM2RCFvTyp7MGd0eypkKlc7VD4xPlpmJj83QFZnKiU1OVJ0cn1dKz86L21LNWg6Sz5ee3tXOS5tKmZ6W3YmNTo1W11vKDwwdTZlIiFrK2VuY0FjMCZAP0MyR0pFMVZ0ezxxP2dRdTA3RzpvbDksPGxMOnQpV1Y5''@;'; put 'put ''P1ArS3J4e2wkcGNSai5QLy49N10weD12ZURdND5EQHVPN1dQLil6c2FEZUZsKipnM3BuRVM3dioqazUzIXtxNVpZIiYzQlU+OzMqb2BLfnJ9Z116aDZHayM9bigmcVhIbG9QZ2M8MGZYNSZyLyNHZn5NOC8zXzZuQmZzO0dzbiElaUd+KU5PYDJla3hPUlVQRTM2cDtxKGhEUURxbSpHZFBiVV0w''@;'; put 'put ''U31+dVBNYjFGZUVJeE9HPSNoJSw3cSwzWjJfUnJXa1ZsUThxXjZxVV1bKiRLdkEhNjJjb2M3NTVAMnBvckBKSHU9SX1PXTV7bEI2WSE3PUJDKCglKjl8bWNLNmFvQ1t6bntAWWJpbE0uXVAvPjk6P3ZkLG83bWFUSC9meSMobEYyX180dTs0SWNjRklBR2VqPVkqY25PVixkJGFhQC5JWkV7eUg4''@;'; put 'put ''YFNTPzR+PVVhTyVncWorKVZrY3Joa1t6STFrTH1QU3s5cGxqM3N0MGJPKFppYUBFa2tAZklbYzhgUUpxRUw1T00wSHNYXUNWTVUzdnIzXyxdYDBwZX1daksmYF0qdSNLOFVydHpHJVA7Q3tbQEpwPzojOTcrXlQ5LkpkKHFnYWN8RzZUXjYwbFI/VjtUUmd8MC8yVlFkPy5KWVYqK2lxUT4mTHd+''@;'; put 'put ''MHc5XVt5MlZfNHo4LjhLa3BMMyQ2TG9beXA8P3lpfURWWE1FVGhvOTBgUW04OThJYUV+dUkvN1tPbjZRZXwxeHBATEJnKWRVZXJxa1kwV1U7OlY3YyJ0JTRLN1JCUG1uNmhzWk07MjhqJVY7R3x3MTRHSkVKWl9zYjBVJVdTZDlfX0ppKnxBJW4kM0k7RV5RMklqayt0QkBvSm8xfDw/ISE6L3ds''@;'; put 'put ''Ump+bkdJYH5mdVBYbExeeGhuYGIxImZCbSVobjFrMS82O1VOOjM8ZyZbbCwuKCh7VVJoNEk3MXFgU3VnJVo+QTZwUkg9MW0qM2lIez9oREd9bDpAZSZzXiFgYHdRM2Z0Jl1SRXZqOlkqOXE7LkkzfSExKmp4aktuPmI5bW1iVkpjdyxebHtEOV08U2ptXXc8NTY6Rno8ZzcvPH5VU1QlVldCfXE2''@;'; put 'put ''ZTw3eDsvITpbP0xjQVdWZmRiI3x4eEwwMUhKSjY2aUg3R2E7VF9SMWptcyZuWiZneCNmZS5tMUBiaFosZCssaihyVjthJHIxL3tDfTpSMzFnaGksell3KWFQaGB6Ujh4Vkl0dUtuYk5RXSJtI1IoWSl9R140UnB+O0V1MUlwU0pRdlZqV3k4NlcrSF5sMH15O0c0M3R0RypSSyRoM3piR35HN3dG''@;'; put 'put ''NT9ddSN8NGkobUlnPTBARH08fVhyQmdQc2tLNXtuPGFqYEw+IzNZcjs0QTlEZiYiVjkrbilNKy9ZcDxIbGokSHRbKlFCI0BuUStZMClGfCVRTzg+Ol4qOF52QjFkKCZEQk9Tanxwdy4/fUBSX35oLE5+ZzQ2RioqIjY9Im5uUldrJCpNI3l1fDY9fFIrI1U2VkQ8Jk99S0dXOXRHTk0vbSplKSRy''@;'; put 'put ''QygiUGVWOHhOUUpdXUlyQ2VkdSpoZGJiOUkmdzFneCM4M2xYcFZoL29KV2MiKSFXKnwqMGovMzwueV5gcFp5SH0jWkh7ZTUufjd0Ll1fUUd4RURWP3AqQUdYOFsrNyg2ZXVpYyYrKjYjI3p4PFlhZGExUkRYR0EyXnphOGhvLGlxZDMvYHRsLDB6JURUfnJiUyMlTkosfWBpa2ImU3lUdVc1ImZH''@;'; put 'put ''V0VnTSFmLFRPMVVfeSE9dUc6YDdbKldfWTlxIjE7alEsP0whPUo2SmMqKiRYLDoyRVpQP215IV46JG1aRz1lVFQmYFp5N05JRlh1enhtVCllejw0IVdgSXd9V2htfmUoI2x1cC5VUD9nd3JrIUAjdDsweXkmdH1RZjAkIztlYHlQTXFfRyZ8Vll0TnttPiU9bmgmaDg1ems4ZUVyU1c4KXdENj8z''@;'; put 'put ''QmQ1VkN8fX1KPmVpdUVqfUhHd1pzU3ZbfVR6VSZfSz5YVjE3bVlbNT46aFchMS9CWVtQVyN8P2E+cUg2WncqOSVLIjJ6ODU8IVY0W1AlKTJ2dW8lLCsiRCt2JDBBTn10KmlWd2FdKywqMz5wXTtPQFRSYzcoITxwZ2xTXn5neCM8SEphQmc2IThWImxiVjA5Ym17Y3h6Ii4kLE8lYmYlT0dsZmh8''@;'; put 'put ''SVBHI3giPCluclA7QiEhO2xNQkxsTGVDOyo1TWxmfXlRLz9XOSRYSENrTSNXd3hJQXs1WzY8SStRMFtGSXIsP3h0cVRUIVkpNjs/X219QCojU3s/VnRvY0hfLHwxe1p6VSREfkAsVioock57QCM2eSs7OlMsTG85VGV3aDJOU3xxISoqc3Mxej8wLzMseUxQRlFuLj89IVslclFubHk3d1pORixI''@;'; put 'put ''d2t4TW8rW1JBQFJ6Uz0mP349NHoiVGtfX112KFN4TF19XUVdWmE8PT5lfis9dDpKMCF9SnNkbiNIQUJhIk02QkJ0L2l3VWcwNnhCK0c5WSRePEU7NGFte2Asdl1XUUZxMD9AJiRKfV83LDssMT55YjFicnhbJDFoTTE/O3BdeTRwJixSMiloWXRFQ1QxZENHUix9ITx3I31oeUxSJnFxV1QhbW0z''@;'; put 'put ''W2IhV3lnaT14SUVkaTZHOjFmb0ZWY1k7akhLWDpub0EsXiM4QHBmPFhxWGEpMChoZV5dcz1BNykuWiEiYmtQU3gxPW5mbWYsSlkqVGkocDlCUWAjfCJKWEVVbXFWXTIlKTRSQE9NczpNYjtPOnF9dVFVb2pfUiU+In5sIzNyNilpcHxwNUFfK1I7aH1baHYpRFN8dSYlczhkY186aUFQPUB+bU14''@;'; put 'put ''dG0+YWRWflomKX43NWJhZ0Vlaj5OI0k4MGkhaEVlJV9RaD0jPGpqOWl4NHJHZnpoVmJtUnRtfXVzKVE6MnF8I1ZjfCpZaS5SSENHW2dtPUhvcjlrLlIqOH0jc0lDPCooclJwOiFEVzVibFIlZlU3OmNUV31feTdMPSFqXkdlSnp0WDwrdXNLWT86PERgZ1MlKiNkTi8oY20ha3lnNlJRa3c4PDBx''@;'; put 'put ''O3doQV9+YDYlPCprZV1uc3FJYz9baX5+OyMqTCx3OV4/fV89RW9IRVBeOH5eK1JMOXVdL1AzaFhGTjYrSD9WKU49UVthIlpOZXo4Uj4kSCpeMzpXSUNlI301O0M9U1IsbGQ6amFFJj9AMXZxeHxAUz1lYzVZIjI4STYsLHUpfUolMWQwdFJxLlErSX42aV8/Z1ZibVJ6fktJRCpbUiI4R2NPYWVG''@;'; put 'put ''OnB9W0xXKGVQP24mfCNgQ2VEMWdySnk5NE9gakFoPGlvOC9XT3hAOTh2KzRKRihyTGhTKE96QV03STQrSUglfHM9JCpqcnQ9LipheFUxfS9kKThVeHRNQkFwRHVgK2BKMSFWQnlNX3JxZC9mO1NBcXBgNV9eXzZRbk5lSCJNRzt5JFk8cTRMJiRKNV1NPkU3Z3EuTjxmN0poUjU8NF8zfFREO2Jk''@;'; put 'put ''ZVQoYUshcThieis3YyZmY21vK2U8aC9HNnxvb2B0ZyhaL1EjLDc7cG9gTUFZQUY/SF1CPzRiYnxtQHB5MVtgMT09ejhPMmYjUiEqfSRPPVtQWnBsXTo7QD43ZXNybT07Zi83LEBKelVPUjs1dWxdVTc5NCZ3KjlUQjtPMl9wVEM6PVEjd1lNUTNJXVMkS1dvNkU+SUg8cTduTD4wbTxkUGU+N1dI''@;'; put 'put ''fDdFTlBlSmFFcT1KcHpiTUchNkBHRG5uYXlXay9gZDNJel5ZUzZuUSFLR10xd0ZufiojNm9vaXV0dGwkb3I0TVYraVpHJSRtfC4rJEFONF5ZLlolZEMlKyQ9VVoyQkR9YDheOF44OHhlM1Z0KzI9P0pZTkYpSzJYMEshKk1vKVpYSnMpN0BvM2wkeSQiQFtncVQlY1sjJiUmVWpGVFBzTVFhUGgm''@;'; put 'put ''OX1DK3dRXWBQYFlEOjxhbmh5fTx1N214ZDc/XjJtX1dRdkhpeEpJUDguJC4lJDkkWkdENjprSDh5TTEpZ0xoJilKejhHcCR7dTczM3wqSmgwS1ZIZH5sU0t0aS9hV2l8eUBLTDQxR3RWcEhoNUZsVjkwTFNIVWQxVXNVUzF3dFVEPTZXS0B5Izk8fTQwJStAL1Q5eGxYXVl+PT0rVVQqWF5TdGoh''@;'; put 'put ''aFBzdFk1eSUqUitJeFt6JFNaKTsmfSJOPjE9VlorKzZFXkdSTm19em1lekZ1SHcjfDYmT3MmL1dqMzF7IypMeS5ybmYlUEFLQnl1dnQpKV1Ec2NbayVdVDdlfiUyMCU4QUBBb3RWRXtZUSVmX25Pb3tIWGcoYlBlOzNYeUspakBxekZIdWhOLl9UemlRYVZDL2NeLnMpKitxa2lLXnpGTCpNeU9u''@;'; put 'put ''ZE52bUVANVJZRmI4YmlANE4vUTRaWixdO1AzMkhYMlo5IUpjS0t6QysoLkRNYiYjMl0mNjI/P0RebzgzMWtzdlJ5ZzZUR1FJPGZpZT4yXklyejFHVSMqcixDeTZlMExEeVpNME4xMC5WaXhReno5bD9zSzBNTSgsMFI2LDB1cnAkImdrTW1SODFdcHUlLFVhRWBTdjVBczlsPWksWGpHSzh9WnAm''@;'; put 'put ''Y0RHO09KNF5nJDIyW3w7Tj9ySm5CPnQzU18lSHouRTpmKXs4c1VFZmU7K2FRK0pvMWxCJk5VS3cyeE1RRXxDcWA1Jkh+PmpyaDYzZH0zOUhxa0dqJmY5Y343bVlZMHYlYlBSTlVUeT40PTljOllNOigmRHBwKUpdcThVKmZHPitncSxoUER8dnooIlV8e2ZdeGx6R3AsQ3JSJmwsbGdzUDtEWFBx''@;'; put 'put ''ZWYkMDFBcnAkPGhHSWJ1OG9OUklUOShBJmt5L1VTUiM4fnRvajlhbz08PHV3Vi4zR15gNFV4dEFCU0o4JWZHKnIqaWBBSVBdOSh8LDVGe0dtOE5pUTR7aEg8OSJbQWcoNDhPSnZQMy8sMyZqZkIoNEIzemI/QGhqbzglRUhPcUJdJWpKNihAKj1oMEdlWDNPJiU1aCt6fXBUalgiZ25DdV95VUAw''@;'; put 'put ''aWt2IXJaTXg7PWhveVo2LCw8Q19TJUFzUXhnOEtnVChhS1E/Xm1ZWSZKNXxTZWJPZ2JAeFlSOWJHZn5FTXdocGNOemVOIUoxOTVeeiJjZUwkcXtwN2F6IzF5RXAzPThXaGA2LmIxLDV3JWtSJk1ZT2JKQnIqVEVXLzJdLEM7T2A7MDdkUUUxVSJxSXE9eSI4JC52SWRlSTpfPTBLQ0B3SG57Zl1Q''@;'; put 'put ''RGtbeC9MTjlON2FRWWRiIWMiWl91M1pec3x7cjdWOU0wKismI0h2ZVpee1dsKntgLGNQelc8XWI9YGZeLk5pJntUYWFAJi43WmVIR24uLy9mKlIsKS95cyxCfHhjKlJCWn1TcDwmYj5ueURQMGAudTV5P1lpd1MibHVfUmBUK0FxQiZIY21LXTlnPT94VDZRYFpqfjtfPjU8K0dfLytnRTUxKUN6''@;'; put 'put ''YmBRRyNaeWd5YVBOMzJtQD9Da1AoJVVpej1dXVV2VWB8P2lBOCM6MTVkT00pJVQvMHR0TUtKKFA4dHZyQXMpTUFfaTt4Kjx5OFZpZkNNQjJwMEpUMTJrVjojS2VJL0k5LElGOj4vKS8lMX4mJEgzWmVIeX0+YHI6KlszZChmVzJLRVt1TmJPdnl+OmIqb1MpPVNCOXtjNyEkRlJvTHhXdW84citY''@;'; put 'put ''YWlZflhyMXZ2fC9mK3MkKzhiezdmVS4zcCFaL1g1L1N6YjFIMyJKZmghI1JfRjRKV194c1VXUDlEKkpHZWJiSGQuWUhOVHolMU9RME1+SCVpP31IITUxQ3RUOmtZfTU0P19FKjF7T01FWWU/JTFkMDMlazU2WSMiL1FBQ3c3dFtKWDd8RWR4RmszNVhWIVl3aFYmUWB9bVhgcis6blJqT09KbFVF''@;'; put 'put ''OyQlPEY9K2dadHpLTGx9aCxrfj5YdFQ1bWw/NkN+MywxIz5naT4kMkJXOFlzKzhjNl0oMyN1WXI+QkNYRUAjMmZfSUBMJSMyVVY1K3FvIls1di9VIXEzJEFfJEAjcXtweVBGbDReV3c/KyJjSXFVflpSaTx3JT1ROSohXVFecVM7SG1rOz1JVVcjaTJeby5bTEtEUykzSklDWDxAUG5tWFgkc3p2''@;'; put 'put ''JE89MG1VVlY5JjtIOkVML3RZNXZvUEs6OHNQSTx+e2J6SV54OHJhUSN3LiJNZn1LbzopOig/Pl4+ZmZXQyhpaysmfERtL0p0SkNuJUsiP0I+WHkjOl9gZyR5KzJ+RnZ8eU1kS3VuJXcuLGxHI3YuSGJxQ0tKTyE1X0hXenAmYjsoPkptZTtqTm1NaXJIOVU3ZE4jQkRlQjc0MTNZQyw5PnRaKS4s''@;'; put 'put ''VH5YPnRPam44SVd8a1BiaVpPNzFQPFpWXzhMITwlfGtPeTh7VFkze0FYOTZhTmlZT2gpM0hWVmlTdi9pXjdLZzc7PjZ1PDVAYml0NEsqTStnSSEjang8S2J9YGZma1FmcVBlcXBhaUtRe1J7TyFtTXM6fFs/TWRYZVV2OVpGazVxUkpbNztYOS4zcGY3QkpNYXgmR0NWTFRnZzNoNkciTjNHemJ+''@;'; put 'put ''QF9PbSRoeEIlOyRvaDArdnVJUEd1TTB2USZZRSx1Mm1oWF17NWBYPH17SWw+IlBUNUhmLix7VytVSyY8JndzMV1UPjNFIS4+VUdAYSVwcEM4U2xWO0gqaSYxMm4uNTRdbCYwbWxPdTFvU1Z0bTZjd1NYLj1Bd1NrOEpHSDBJN0dpSUoxdHRjVks3OHdQKSNEbGlbLmt5KnI9U1hTLn11RGVnMDsw''@;'; put 'put ''K1RfRG9scSZHXllSWTpyaFNbJWNhcHdKKmxsOm84XX1SUF19RlREMnghOzdUWVR5dEt1bHMyMkQuUFRhfDpXOFJtfCZLLnlgVG1VZXpnaFNmLnV6MGlnbEVlPTRrUi9IIT8mcGF5dW1oeENbbDo/IS9ZIjBnXUpGMGIwYHdbdy5NW0A2VihTbEFxUXVtKlBxdlhwYG9QQytMK0FQL2FpXmJuRWUq''@;'; put 'put ''fHBzYUA/PXFYQXxVcEtFUEM6TDQqQXpva1tYbzlFVjQvJXsjemBYX2FBPUJJUEdVYCNZRlNbNzpCLkEqM3ImOkVieU9NZjFONmJsWDdHNyh4ZnVCa2I6c3VTa1FaMTZiOmdvQ2wxYSglJikkU2hkL2U7eFFJUihOTWsvZkxnL3RoZSZZaSthNVpDc0EhWWpIL3psKTl3TVVRLHhLVTA2bFlGOVtq''@;'; put 'put ''QHh1MDdwR0B8OFNNIW1VPW5QIU9ORU1MdT9FYHZVdT84dEEqU3hodztdLHAsU1A5cV9kLyNIIWFpcyJ3fj9fX3lJaSxxJSVjdEc/S11yITFSQzNAOCxWej48RlFQMW8jMj8uOjxFQTAoJSlhTGIoVj47SXtLM2cyfnBFQyJfPyEmaHBIYjQ4IUdAWk5CVD0jViJTO2JxR1RQLnklc1FFIX1vWWFN''@;'; put 'put ''PGgvK2kpPTM5fDBteTFveCxsW1MrOmJ1fVROYEdqcWdpK1t4MnB4ZlJESnwpaV8/bTpTNipxeH0kRmxBNzs7UWIzRS4jZzQjV3ovQjJyMFZ5aSZneltZNDZ2U2NZPEBKSzB6U2MrYSZLbXdHLnQ2SCg2O197a1QmdkliUV43WEl+UUVSNEcsKnc3ZDI8bnl3IT5FNF9HJTUzcitQMEluJn5VaiJh''@;'; put 'put ''VlNqfF0laiFNNH1WcCZTfXcpTC9zQkU3TTpXaUNSXTB0ZUtZUzMmZ1lUe2AjSSI3WVI4bUJNc3xLQiIjZVJraytmOV48O2BLTj9CSUFCME1RK2JJRWo7OzNZazc2filLQS88bTg7c3l9MltEJEMzcywlfkVMaCtzJiVTeUFIZ1p3Yy4jbCVlTEZsR2BQIyYiRmAlYGBmQG4sQHlOez10YUFzdmJt''@;'; put 'put ''W245VC96b2tMMFUvI0QqRkA/JWAxZ3AjS0B4Y0l2LyorSyFiYn4oV21NT3puVzhrXnVtbHMzWH55P1VsJi8zO2xRMyk3aDgxYk4zKTZ8fD1fJD5kKiM9IkVgNkFAcmZBYmImVCtIO35TWnxHV0hnQDp+eEo0eyxTNVNsMWg+YUJ0S0JPdnJvc3wiKntMN1JiPz9VJUAvOXJHWzlsKkR0bjx9Olts''@;'; put 'put ''Xno6MWpZLm9pdWwlQWowcyslW2h+cihoOjlyLClsKWVudzQ3fGUiO2N0YlNgbnJlc3w9K1tSdGBBUkpQczE2OT54e3gqMGk5I0puSjR0X3Q2KiM3NVAjN2RFSFVkQnY9fDlhTyltYzlSMVFQek0kLmBmKWxsfW9gZS41O0p5aFUsXT9rRWVka0hXOHAiVipxcGZKWUlxNFNufS4ySUdtfGssLyNg''@;'; put 'put ''WHJtLzh3NV5VKm8zVnRRQHw1LGliVHs7O2J9Nz04bDtpQXtXVV98Y3V+dHR1e3d2VGs0ZFU/NSVDYEtxVVhoRzpsWCFAPW1zK0d7OFBbRW1MaWRxdHtyYmAkanUqd0M7R0N+cn19cT4rb3ssXjBNVihjKyVqUFB+RHw/dlFkOFs4eXNsN2RTWSp3bzpUbmFxYmU1MUUla2V3RjouUzxeK31yciRx''@;'; put 'put ''ez1OWytxcHpZcWJPMG8/NkM7dWhjRCQzeEtEOHd8KVNzfmU5OXxjJWU5ZFhiVFI2Ij1uYCZBPkFFTWVOMDl9KTBgXyRgQ3VLbEp2OyoxUGh6b2UjcFRsKTddQjlscGgrTCZmMX58enpEeTk4aD4oenAjSyhBZSFeLGR2JFZyITlBPSR3aWBefll1PVY4TEpgVnI8QDJ9blFWU0lkWHNCcFZKM2h9''@;'; put 'put ''LHhUJHZ3Y2hdJiN+Jj8lPD13dyNGRWp9eGxITVowXn5lPXd2UzRJMnxdbDBaQkJtUntfSzd+bXxpKj1qQlhuX3BZfjVWWT1EQGBiZUxwJlZMTWcuRkkmbF5vcWw9PHYhO295SGFSanVrNXdpZDgjaGIqeUxaPiE5bGJiOmt6eDBKeCNoN0w2Z0dtUkZ8Ryt5OE15NjUxWyJUSmZNcklmb0h3STx2''@;'; put 'put ''UXp3KnBSX3tMKDJWYFIpSl1KNEkyfF5sTVptUj48M2RTPjElbSR9eTZAO0w1S34/UndhIU44ZW17Pkl9K2kwakx0M1hva35aQl5IRUgjfFdVJmtVYipMenk5aWo3YXRMSnRZclVkQCtrOj0xZkxJWXdFKG4xa2t4UEdwZ0VfPnY4cDkhMCFxcGsqSEdpViEqSXdYISszfTlwMiYzdWZwLDxxJSVP''@;'; put 'put ''Vmp6OFs7LjVlclQ1RUJZdk92JjIofmUwcF9yVSlUXyphL2k2UTFgOjM9X2NgY0huPjFLWkYmUTI9Pm1bcCNLWkY4QS95ez1IaWFbfHRBenMuQUl+dWwwOUQoQyZHN1pNOFF8YVQpJSpuUix9LkRLUno/K0BzVHpafE06R2NZUH1HPzgrQGdyRmBiO2owSFVaalt7LCRdel45Ql9+NXw7RFZJR00z''@;'; put 'put ''S0cwRmd1fGFtUmxbUWpRMGwiIXdibzFKY2phcCFVLjRoJj8lfUlVZSRtVFhwT2pwVlk5OHtjb3kzUTUzUWhpSWNGIXdCeDNhLkRzKS9YckJDL3ZtOmh3Yixza1ImZ1FgRyhNeW09Unk8d0RNZkh1WjI9Oy5bK2Y4KS5VN0YhV1NmdSJWUig4eVlWc2FQcjJLISopKTdCPlY7eGM/MlE5Y0s/YiE9''@;'; put 'put ''USQ9Qlh2QC5TL3N2bTtDO284RVN2e3FWL3gvbFo1ZFRqYjJHViMwN3A6ajIjaG9ePG0laD5xfVNnLl1JNz8iUjM+Z3kqKSw/X1gsRy54UGZpPGE4TkIzNSw6SlVtJVdoUCpQOmtvWm9bOVYmXjEjKEYrXktnNyZyZU4udDhMX2EyIjtJRm5rJUJ0TEhaP1h4eWFLLnZnJHdjNkJoUEFeYUk+TTIm''@;'; put 'put ''QU52dm0rV09RXm9QX3wxNSZNTkk+TTQmK0xkWCtJOUQwR0IvR18kRiVHeX1QQm1SdS86JDdTM1FjN1NlNFhDOlgxfjpofTlLY3JhPG9SXXMrIkpoTnM1QCQjTHQwJH55NlpTQDhpZ1p5ZXI9SX14ZyQjY1dtbyMhInI0QGRHcFdwdFBUZC8zNHU9JVFROl03U2c5Imx+Ln1RREBjPXZNTG45VH1A''@;'; put 'put ''RHpQT24yYFZubDFxO2A3Ijt+Xnk/a2BrTFVuMjVqQlRCSkxjPjJEej87UTEkUHdQZyI/YkhgTWBkTC89aWJgZTAxPTlRZ3IwLjs2YjV2dkA6MUsqWHNbcCZnP3NjL31xe3RbW3BIb3QvRjhlcDImKDA1UHhbd01ReSlvcX0iPCM2bEh6TGpWQTY9cCNBMjBmOXYpSTJ2O116cF1TLndQWSRXYD8z''@;'; put 'put ''QCUyI1FocF5bWHhySSQqTTYyUS9PWjtLaDlsb2c9bXU7KkB9JFcuc2BdUzlGSlUoKCFmOm5JYTYvNmpvNzlMKDptYDlzZT5SX2BJIUoqWTxpPnd5OXpUSDxIWkAuN2w9W0RGZzleYiQvc095VTFqJF82JjZlVVUoLGxLOml2On52WyVFS15maU5pR107aVFSUzw7aSNzdj1fNykzK0pdKnFxcjMu''@;'; put 'put ''e00kfSUsVDx7eGs3ZWxabmI9aEZMKzY6SjpKX086YXg0SkMkYzdaMCQ1OWJoT2dUYjoxZD9uVDJUb0wqTkJEOUZmTGZIQURoLnVuMzhHWklBVD9DbThrUU1SfSRDUk0sPC9XJm8xeSRyVVRQM3gmYz4/Z1ZdQXwmcTpDMHIqTilwSmBUfnhGUFVhTjxFMDhzfnt1dk8hNjVbVWImfTxpKmJaTTxE''@;'; put 'put ''aTNwR1JGIyJdZ0I+NzlpaHo8SjpuezkwcCNXckphfUM0V1B+MHlaV1RObEV+JiltKXQ3Rk0rUkh6biQ9SX1gRX1Aaz97XjpaWHJtUjJiYSwkWEl9QV5RWmIrQy89Q0NjRiVNMl9Ra0lzYDMjIiVLci84V1dXO1ZnUWZAYG45andRI2smeDhLO21kITZoYSg8VyhWSyE5VT09ZzshUjZ5XkcoVzNG''@;'; put 'put ''NCFiV2cyc1EjP1hKP315c15YaCZJY0ZWYi9NSn0+e14sWSgkK1c8WmNbaWsxdnRnL2U9InN6ZUkoVFVuSzZhN1tjXnVVPUYzM1AhPCVwRT5ITDkoM21aI1cvXi5QbTVTI30kWyNnKHpiLzNnQWFjJStzOmVoPmdAU0lLIy8wXmIxeXs6VGNiMlk+QDZufC8mLjpeYUlAX25weClUaURgUzo3Q055''@;'; put 'put ''dzFYVkZwUSl+VDxiUytKYWEsPTpJOjk6bCQ0UkQ5bVFTLHUuWypqZFYmM2ptKjRSXyYkJjZeVCZXOHhbXWYuXUNRQGRQKiVlXU9BWVhUVnRDQ3lZNXV8dVFXM1BfJGN4SUgodnx1U1FbJjhJL0VIOGdHS3lPSC5BSVkuTDBhe1Q/W1NNXyFlMUM7QVJOZyhyeDUlMVZtVFVHOUhqX1tSc2RVeG9l''@;'; put 'put ''Q2pVY2BUMX5tPj1xPClNNzU3cihqZnRnYj9na098OkJaZWZOYXw4QjNNXnwlYkkiMiRJPWloeE81QXhnMiFlRl4qJFpZRiwyQFpPKDt5TTpRcWcvYmtbOXc5UjtxdG94JlRVNHBdMWlCNWdbaWdvakRqdGZzbUwhV2h0JiImImwlYlREXT02Xlo8UDpkeDcvWyt0YjFCY3YlVDs3ZSpmK1paMDxN''@;'; put 'put ''WSpBUWllRC8mTHM8TDklQ2ElRHZYNUFvQi5AZ0FxOUJ1UWtRRDh7eUpRKE91KSlnRWVbNntUVjB4WEclL0xXQzhdbHhFPT40LDxdOCFtRTVsXW1jMls5QHVoMVEhKChMZ3Q1SVF6cEwkKi82ZTVWcEpPR01WeXAjLjkzMGwoQGZUdltkWjQ3QmRYT1kpcjwiX1BCemNYVih2RS9WZ1B8VmcwVEw1''@;'; put 'put ''cHFKdzJAPUQqJTdhKEI5SHNBSThuZms3e3xINWliQGgycltmYyNnN2pXOiY4ZTNMKiwrIXF3SChZQX06IT9AcnZ0Ml1jJHVgKjhoeFBGKXA2b09TPCZRc1VSPFVfe0VVcXxEe0AmXUpRPiY+Y35Jei9TelhPQElAOD86PT8ufE41Z3tKO05QOGomXSJNQypHdmRKZF4/KG19IygzWVo8YzhwVCwh''@;'; put 'put ''K2FWKE9QOUgqKWsuLzdCJHhHVUAwb3x6O0RXI0VgdXBxR1N5JGk2dSlaUDM+QSFKKyhTL3dXZ0l2diI+ZUwyIU4pYUBTQ29rc29pRyouaWkyMEtrIm0kWDdpSHMiJTolajJuPE9uME1wOzQ6U2BeJm9wLzdCJGJNQzpSai4xPSZPbXZpMz9iLlhlU3tETjF7MnRGYlgvP2hbUWtzJVJkbUUhOklD''@;'; put 'put ''ME03TG8va2lqZl5uYyZMOlssWV47bFI0ZDh3OHtBOyRTblp7VVM3d2NgUEJ3W0wuYjFfUVMjOnpxTkV+ImU9W2RtZURObHo9aW5vTUledDgkX3Y2SWxzeUxwU0IkZGl6T1Yyb29ZUXIxW21oVkNXU2ZXUFF7NC5LOlk5UlF3fWZtclZAWD96RF4xPEFVVjFsdSl4OUZEeWRbbXlSU2A7cyQ+bC9P''@;'; put 'put ''I354ZDJFQEJIWTNsO2E5OjFFL09leEFMMUt5ZDtPd2JHLjhhciwiPCRgfW1uQ1V+anZxZm9HVWRKaD1WfFIwLj09Q281QiFSbjlhQ2IjO0c6KXZhOiZPQUU5YE1QIVBPZ3pJOGhaOjRFS1JEMEcoK09OMVVHY35iLHhsMDIhalQvVzchPk1hOSlFclkwYjZASmkuIURCRSRKODZ1KVdxXzk9Uikx''@;'; put 'put ''PXtsIiRGeDgwITdfa1hHSnhAQDxZZU8hYGg4PSlNVS80WSN1YXs4UyxId3BbODE5ayw2Z3tVJm97R2YjNHR1cWhaOnBTakZlNyYuKHpUJF1WIy9HXmozVTl5aU46UXt5KiZZT0I6JjgyZ30ue0hOajMyKS9SdT9PQV9OaXhNLDtWKWo8cmQ+UVk+aV5mUVl2YEZgWDNUX1hmKzExOlB9KGooYygq''@;'; put 'put ''fHp5dXVSIlUjKn5eYDEjXXQsezxdfjx3fj19bUU8UGFUaVNNYjIvVXJ1XVZ+KSksLiJzMV9Sbz9mISRtUGI8KDpVXkwieCE3MTwzbmR4WlZFb28+eSRZLyRndj8/ai9NcTZAVH1nbF8rZUlNRHFETmdbcCtUXTh7Rmt6ay9bUz1RdF58SCxgTGc0SkZIaHFCM1tzRip+JFVKLixNdlolSldzOiF7''@;'; put 'put ''OU80THNhdm5gJGNfJGVaKn5pdTBGWn1oWEZXTEZkS2VWI3ZHYSgmJWcvazN+UGx1U2gvQkQwTChMeT4oQ0ladXk8aXtXfmFOfmY4dy88L29ZJmdzJHs5YDZQRzAqKSxHIShJUiMoSEVPNmRzSmV9MkpFalNQWmE1MCFlP2VwVnFoIU4sWC85eWV1figmTjBSNzpgP15LNUFfbEJRY3V1eTVXRXpX''@;'; put 'put ''OFV2T3A7a0dZajZsXiR7P0RVL1goK19rM185Ym9MZ3NyPUxzQHFNbkBCXnxGKzV9MEh4MT8+e29bfDArPXxhQ3Z6M3ciMU9NcExKPiswPUdlOyM0R2FYJX1AMHEyZj1KSFlMMksoYnQrO290V2o+M3x1OHZNd2Qua05qVWlVUUd1OzAvT2BeN1BzNCIsb3hKWj5WOiNJKCRZRHR+O0M8NShDJDBy''@;'; put 'put ''aVZ2PkIzTzFpITk5enZ0QjBPK1BteVEhUjhZPk17YjlaU3NzPyZ+Tj8/RlhQYS9Ob09WKHIiWXByVEk7TTRafV0sV0lNcmZFV3lOeXU3WylhbWErKC4mdXdOej9nfmRNbTQleCFCQ1NWSCxOJXV3W0wpcD9GVylBT1s1dERkb3hndiEqSXdYYVpMInVZQ0VTMn1yJiRQR00ick09WCFiPWBDeSRw''@;'; put 'put ''ZCEoOWk6USlXQGkzNFJbbG4vajFvLCVqQkBuZixLQH1TNHcxP2k2W11UYk88I1Jje3pUWCZIUGApdXNFX3E8RipVdS8/TTxiPFg8Um56ZSY7YDpOXXFbVGUvWClrdHl7flZtJWkpS3RGYEYxZmNQZTVWTk9ee09sbkhDNSY9S3wpdWx4dkdSKzpMKXFNOXNOLnpLfHBCZUBVKT5BMkU9ZElLaSpv''@;'; put 'put ''ZGNoOGdne19TNztTZVR3NzdHSzsxN3U1NmlkeHA8P2NzIjx0MVFdPExYMExEOEBxOmtPdDBvdF9yLEt8RyQuLyZrWkg2XzRuYT8vaT9Xdmt4aSoiLH11PWc0NldpOlduPGAoY3clKVNWVUIrdjVZNUFCNHt1dV4iVztQU288ZSgrbVVqfTUoKGA+VVAjY218T2I9cVZhVC4kcjpvJkU5Sy9bSGlV''@;'; put 'put ''SFJAJn51SzVgS01CfEZWWDtNSTAxSTU0KTUoQE9pbiYxaWFON11kTmk9QUdWWCQubn5YcDYsPH4rKTBCeyU+JW5Nakp3UkI7RXEoYjpeMWI0V2YjXUZBNkVaPCZzfUFwVWxYJGYidVVTJW9+b0p9MSYiV1R6MmRdLn1KLCo9eV9YM2wkfCk8Y0hobkNdbyxYMWZsTDp9bltLfmFnPmNWfVhiOjR6''@;'; put 'put ''Kz07cll4NnRVdGlZcn1lITFrczhYaWozdll7RX1IWGlqQVh7UXt1YiRBTl89dUcrTFFCKnQlX052RUxIaCxBTyg/c1JUQzFqbiNrUm0+aD9xNmZOSjJbcmIlajduWz5uXmIxT3YqaWxTZ3lJeT87c00jOGVsMFNJdzNrJDlfVGxCMD9wVjJ8fWVPISZoZlldQ283ImhvYHBXLHUrZSVnaC96TUN3''@;'; put 'put ''IU05ND9DfEI8QzpPdk92Jjp1THpAWmphLF5xWChXYkB6SWJnIXU8JC9oODUqMGtFMEJHa0dtUFZ4VFZAR2pZKkN0aWw4ciYkMCh1JDdPZXByVEVJN05+TjVfODNRKSo0Kk96UWgkUFRNTD0iInB0MkN7fHAwcEImPDlYbG10WjBNXkpeT1Q+U2JpSCFgOUJfeHkxKTpTcHxgJXR1Img2bD1EdEAo''@;'; put 'put ''Q2FfMF9pKV1CR2QqRCJfVF9+PDpJNURvbTRpaTJNYio6Wz9AaHhpbUV2QThASz9AaEI2MVJxQ210N3V0OCVoTGZSbTtVVChoXTgjJjAlRDVIdl47KF5+IkEiXmZkKTMjZXtlOXVuWD9kYmJiKUVhPWRkTkgqLy9oSTh5bm8vQ18qTDR2IXRKVTdSc3RWV3xEPHtIXTViYnghbn1ZTUEmUVJ7dzhP''@;'; put 'put ''elJIPEpLZzVaYyg0fCxCIylQc05INlkwMm5EWUw/fGVPP0B2PSk7TEAqR0RIVTJTa0B6MSg1YGtfKWcpXlZFYSxZJl9dIlVfUm9TXVZsaFptV11DTz82L0MhJmowbiVuRmF9NkI9YG5iNSZkR2twZVVtIypbSWVybHlxcT0uWCRscX40Um9BfGF9S0NOenhRYDY6SmQ/SF9jTTlfRE9+Kzd2WXVu''@;'; put 'put ''Y3lJQk5sV110JnQ6fmgsKFdzMFBKO0J4WWYwaj19ZUs3VF9UXykzTHw5bFFaZ2tRVEhhKUY9YWRSWyp1bHdQdD8/Q2QhUXYhdlBmcykvbWV7PHp0cSRVZiN1PnY7fkBJSEJtNnUqQUBPXWRKbiE/NDAuZk5rJVBhXnkxPU9rQkNtYFdxa3BsS0o/ZnEwbWo6c1EuJCwrL2YqUyxDK3soST5vdW5R''@;'; put 'put ''VFBkPy5LUDxCXjFKQ1QpbjxoKX5oW2EmOE9kS3d1ZnwzUV9FU010e24jWjl6dyxyaWp1TURkIX5vfCY7P104ekk+bzZgWF5EP0VCekBJZGUqRlpvJj5vSnRCVD9JVT9wa2Q3bFhIYzpNaVRMMX18VExSVT5LfmtiTj1CUWc1ZTZmOlJ4On4qTVdiNzRjXUdDfTsiZXl7Qk9bSEAiIz9bWTU1cV8k''@;'; put 'put ''KVV5PXpNQUlBcVNKU1lWUnRmTGVLWUl3OF9+dVc2eTJRLFEraF8qXmFeNSlwbnVPRl5zLl1pfURLNDNjcGNDYHxhRXc4TyRgbTBbWVNuQ3V8U21lLE5lOFdFW10la0BxPCM3LFFtYVdNUTNyeCs8fmdTL1s8KSFWSGc4cjNnWjcqaipgOXM9b1tQZWp1M3VtbjA1QDM7b1JfSlFxWyojTC5LOHo1''@;'; put 'put ''N11IOzR5PiRENDx8NHBrVFJIfS9yakViOTp3MXVFY1BgMys+em8zRkNSOn1VVyo0O3J+YlhsIU44YEc8THw6RyhJRWpZRnMlPG4oNVVvTzo+N1lzZV1DQ0hIWVpoeDxRT0tfTFpDUFhoZnEwPGBgdyNienBReDsyQWlSdDI6cjpYZTUyYGQ3PjNMaXV2TGBET3Z5cCVdXll3O1MjaXIzKXooYF40''@;'; put 'put ''KT4ie3JZemY0MXwkWDdtLy98Rzl7IlNAUDdZM0JVVSRpI0hzSzZsL0NlfGF8OEdbQkI9L0Y3KlV5TGtLK0kma0g0d1hQdmhPIV9IfXBLK05eQWFveFlUSFplTFlGN0VpSGZNV1ttVGZ0JlY4QHMvPE0vOzhyK0xKPnQxdkwhSVp4T0daWDtLOnxSVmB5PVoyZUxQcm9nI04/bEZlSGw0JjVfIUhM''@;'; put 'put ''VVMyL1tbMyt0NjBCTF59a3FMMCtVcFgsN1I0ejExT0JMenhRYEZfaz18dXVrd09UPGhteHRLOFArRGBKeGtIVz9CTGJeTFFRX0UhPVhta3NmalBEb29yKiYzYnZHMC5iMEY9MzlsSl16ODQ5PDxwXSVdJiV4fDUvVVNRRThPeVJIZjMpJlNaSjd4Mik9WixGLFVydTlfS0BdPVF9P19MOV5VWCZ7''@;'; put 'put ''S1V+TDpxbWdZeE93X3tGPXVnckxmRD16OWEmckU3UUo8O3k5XzgjP0c2SWxQZCRaWSEvOE9VZ3Q8biRbXzVDJH19eFp9Qm5oUHVgSDdBPGVWMTtOZTEwZTBqanpTRlBPNjNmYUk0W1d5NHAmfnI2PmoidD41Im00ZiNSQiZ5KC8lZ0tPSTtURXk1e1hoNyI3ZWhvX3QpUH19OW8lcC8vYS5eOSp8''@;'; put 'put ''MXcueWYhZmV5OE9HSFhgdU8hXWtuWDBUM3E6fUc6ezdNUWx7NVoyNDhxUmdfcExLLEEvSE5EcTgyXzBTY29rTW1SfigwbSosfSg4TFJ1QTpAWl8jfFYvUFVTPERrMFloO08sQTFOcEBWbTs6VHA5MXhpRH5bPipkJnFPU0JFNENSJS5WTklCI3E2bW8/fU5YITdodVE6Z3J1SWlQfWZ4NndbJnxC''@;'; put 'put ''YmcxKGY3YVRfOjsrNnZybm9AeG4xQSMvbUUvSkhdZmxHfSNHZFNKUEddV2F9YCFlMmxeUWZjN3IxVUdoRiRwJFgrYFRJJVg6JWohOCZWfSQwVEYhWy8vVzU/PCI+QllmUGFlKnJ4ezcsWU0/b0xAcj4lZT1AXjZySi9VeWRAOz9dQjtDQGlRdUZMIWFxcz9aJHNIN1k2QkIhYHZKYFU+Qy58ZWtn''@;'; put 'put ''VCJHQDYxSS9IR0V1KCx4TSgsZ15mRnZWMX5eMzE9NDRuZGFwKT0wbVpgcCl0T3tSRWZHOzVKPjYxJUBxamx9O0JicnUwSW1RSTpLWVYpTyVrWEZjcEdeVnQwRVp3WSJxcCUvMGsrSVplSmhxPGZib0ZheGIxSUM8cEZXJCkhY2goPGMqZX1NV0BYJStWT1R9c1RdOXZ5TVJhbi9NdDhXfH1lW2su''@;'; put 'put ''UUJtc0VzaXFaWGksISJYcGc+aCVQd192TEM8Y2NIc3xvalMkN35lSmJRQChETTh8NURBZztCdXMpPCUjIjhwWiJQYW9KOzVZUVNBK1hZUnU3XiN5O196W1cyNHRGTW47PlFSWj5ZZjB8OE8pfGhKSjY2IS4lcTRvKlVMKXxiNzdeWT5ITmFpTTo5NiRNXSksK2kweXlJXlF4fUAyXS5LSFo1bFRD''@;'; put 'put ''bS8raFsuP2piSHMjYGx8LHV6SmlMOXNsMkZzTyVMYkE4ZUhya0YrIVQrNS9yP1QiVis0cWRQNlBZIUdtOEMubS9uQWxaT2Q3emFMM0t1aEY1QDJAR2shSkZ2Pig5aSZOZjpOOWBDUTswfFVMM1QuSDdiVVNeMDNab11ARDg4VloiNilAfkh8TWp9IlMmNDEjYWRUdk8rYGNnMGhtdnhSVHBzJHNx''@;'; put 'put ''Lno2clY6TDRvOTNCS3JWOjs8YGdKZWRGdU1zKlFPT2tkPTp7TEFhd058WiJHTSU+aSw6PGdXNUVyS2Y8LiNZTSV9TV5aMn1gaDMyUEJdNUVyLlhFW2M7aU5JSXlSWUZ1US9RIk42ZGBALGFIZn50TC9SXyN7TUtXL183UGBxVyE3Nit6JCE3fDV0YE1gTUAoNC5rWj5aLjMuQVdzaGQsblR5d2Bg''@;'; put 'put ''cXh9IjZVSl4pKko1VzM2JkR6Tmg+eXp2czhXU09HZW9rdHV5fDFMYjY7dXpSdHp6RkohYlNRMUhGbCxuWDkxdWZ5cy5te2ZMWmoqOXYzdGRQWig5SU5kQSl5KEFhKW8pOndfQDtdRnY9Z2wsaXZvc0N5SXshS0IwTjVuZ0EuaVViLlRTWzl4MTlvdyslTW56MWRrKlFpZ2MkJVcqJVlVV1NTfjhZ''@;'; put 'put ''I1hOWEw0YyFVO3IlPWx2ZCN2dDJRdUVdd2AoYEI6a0JeMUhmaXNYIyptXkFNPG0qWilJclJeb2h2VTMqKkVaMGk+TzVMOSpobUU3Y20hJXFwI2hpeyElZWgxaTMyPjhfVnsjaHxLZ0s7IjtxeCVTVHp7KHJ+bEUuWE1HTlJoZT9sR3I5JmxEZiY0OE5ZfGpleEg2MiZ8QjhoJEp0SFN2VGViOHJo''@;'; put 'put ''ZE9MPjMxfHFKSHdSOEtTeTRrb3Z2Wz90djJJa25jQ1BkN31tTUBGRC9NTT5VOjFaJE1eaEVHPUJIKCVdUndOXzxoOFkvNVFjIl02VFlRXk5NSWFgXksiV1swMXclPHQxRzB0e2cmcTw+dFghdFthM3pYQWx9aFtIeT9ieVciSjBDJHhVd3tVKDRjVFk6aHFwYnlkXlMpNj9MfWxdUGIwKDwmODlY''@;'; put 'put ''Yng5UGswcC9OMjFbZyxEe3VEc1dNVH1JSk91YkRQclpgOm92LEBLa31GdiRmI311K2FzI1VEUyVwe0x4cSJ5b1luL3w5dSJVWDY2cjtrRHJieDlQdX1DQDBldE1ZcywlajtYVltZMD8vI0dibDVJMTRUKWNZR3ZnRldQLDB6WTJyRW0kWTk3ek91MGFyJmdQISJtP3she20vSXFzJnh7JDp8W1g9''@;'; put 'put ''PHNATWZ+S0ZnfiowQXAxbjN3ODVAUEEpU1I5RH05aHtNfHUlLlBUTC87fCklYjtWPDdjOHtUUEtVU2lYUU5sfDZjaTs1R1k+bF1nezRjTlJqcT9LLHt6clhJIm8vTSl5bmZPIWx5YXNuYG1pbzlVSXJfSFM2NEAlU341NSJgcTRfa28ybXwvam8sPGdDfnljKDVPJiU1THdYPjhbO2BVMSRQZ3Bz''@;'; put 'put ''O1UxWzAmJTdqblFuPG0md2UwbCVlb0V1SF1dfXtjJDttUVswbSp6TjhqZGUyaUcrNXw8e1tud3hea1o2YVh+bW01UWJ5PGleUFsuM3lGbEZqITdmT2MpMlF+SipNezx8SEZ6S0s1dz8oWSZpRyVNelp9Q3xvfCk+YDMwdiNzZ1FZU35GeTdPUzNyWV1XYE9YbkFVK2Q9XyFHWURKYkJ8QD8mZU8k''@;'; put 'put ''QlkyPGpiXiEiMHhja3tmJW01WSpUaSlSdkZAWE07IzpucVg+Lld5V2NQTEhPKF9iTSlrZChZUDFqVndxPnFTWlkzVTc+QEE/PjAiXiRldUhfMndlTmVnJntuJVBNIXt1VShoZCRQR2RsYSs8aG1aZ09deGx3IUhwK1NZZnhVW2ZdP25mJiVoMz13dUZ0KktpXnNZXWhIQ2NCTHQzaWtrP11NKVV8''@;'; put 'put ''PCIlNmNIZigrRTptOCwlNTkhUSVdIWNyOVZRSl1tSXkjXzBbbix0NS8/Wk0hLy9TX3MpNyEvKmUmK0A8THc8SWUhal09fHdRbyVnWHBzZWlxMDhdO1RwWnUwX0h8UjglNSVvbD4oViNVSm1nRSQjaGBWKyhAQDZ1MTA/bT9nMDsrR3s5ODpnIW9vOW09OnBzOzJWUSN+Ml5JQlBKaW5jdS9rQDBZ''@;'; put 'put ''WTd+QWBAOnpYMnQyfi9kVTl3XTR9I0FlJkhbXSVgI0skMHRyfFBDOHBQaHwpWDg8bX1DNGdCQHt3I0ZXK29lbiQ9bHFkSzNDSVAhOShfcSZsJWt7JDYlMXo4NUAhcGlyQ3BDOHRlWH02dWtPPy9yLzg5Oy5ePER4UyM0Ry84U3NzZCtlSVBEfDBlJWMoP1VUJDBsXlB3K2VgJDI0WTVzJChvViI6''@;'; put 'put ''cFlYZE9eLlFuLGhSKW0/VjsrNS9XQiRHX0xlIUhyMTlRLypzZT4mbDtLI3EjUyhyeyNdemQkIW52K2NiLyEvakxBQXYoS09DIndEX0p0Wkh6R3VmK1BQOD08Qj1KIitATzxMcWA9WjcxbFglKl15PHZJQUFBQUFsQkBRWjB2Kn04YnA/XV5pIV01fikwTFdPQFRNPXxiOSltcVB7ZEFZQXhSZk1B''@;'; put 'put ''RWdfN0RSTjhneHtGb1ViMn01fSVHbyM4eUleN35LNUgmaHNGM3EuQ2lZUVs4b0ljYiVmLE9CXzA7KlVsQHtOZzVjZVZITFcwayx6RkhXTHZtST10c25nT0VSNmk/UFAxSmVucE8uNyEuIihaU0tSbzIhZm4uWFFlelAkYXw5OnFQZ1JDQTArNXshTEFENGgrd2JoSENTP0UobXZ0K3YxVld0VDI6''@;'; put 'put ''KHhqTCNEfWlRdD1JW0x5ZGdCcypJJGFuYjJeP1hWPURudSZMNnVRPE5tOUlQXjUkemJ9RSIzY1tIfXY3WltmeHhnSHJJNVVjMnJqQ24pfn19MkxLJkpMMG0xNHBQS155T3g8e1JWSjhZWlJiZF19I1RVJiY1eVJPST8/WC42bDtEd29BVVRSY3B7MVA9X1dYdkdKYT1PR1cudXB+XkAufSEkcXdk''@;'; put 'put ''a20iKnsxUSkhWz9gQDRkY2RbSHcjSnZNaS5WZWZKekpaMUdIPVdTVFdyOWs8K0tIfF8/IVglYmkkMHdLP2IpeGNFeCxvR19sbChrdzEoS3BAVGQwLH11I0lLTnQrMFpGS0lPQWdMN1Qua09nOXpQajNSOUthfVhhNFU2Wng0PUVlfkQ+IyxIVlFfVE56ZlIvcj4pOEpsTzV7Ql9dWmJKTVtIUytr''@;'; put 'put ''ZDM7VmclMklvcUxGZjxraiwyOzUzX35dXShDU1dvQGkwYiRzcCpgYnE/QkNDUUdwX1olcCVITzl0eCkhZH1jVDJPe1p9SiE9UCoqMF80a2N5XVNUSiQuaFo9bkkrJkFjUChvNlRMS29IRkhULmo0M1hZIyhPND0ldGtmT0MpLkh1NkN5SWUjfXh5SUs2SDcsY1FGeUdGUj1VN1A8eWpHaGciR1dx''@;'; put 'put ''UzlBKm1eJXh6OkdiaFFXL0w7UW9nfG99JTQxYn5zXWA3VmtCaXB0QmtRZEl4fUhCNjQuY14pWFo3eSsvamk2YDw/ekd0Wyk1ZFg2IXg5Yj5PR18zQjU/UG01Z3tOUD56VmNjfjdOUGQpayRdbDpkRTdtXWkoOG0rek45P117cXc9MkZ6ZSVvJFpINFlzPHB9SiolUlUvXSQxdm9AOFpDfmh7NzNt''@;'; put 'put ''Rm9kXXdLRms8Rl5vMG83PkB0NF1ERUNrNnNydUclL0liI0gyNCoweWRyXkk0NT42WUQzOVpbdjpmTmopRiRVcV9NdV1sS3VPPyFeUW13O11DODkuaHhzKSFkemljXk40TiZtK0phe1ZMNjZXTGBIZVRVV2ghUHRxRHRZWzN+JWxtX3BvdT1MYGJiXllOPipoZEk/O1J9bzBaJHlpMUlDNVlFdiMj''@;'; put 'put ''WG53YUB3JTVecV0/ZUsrWntIPC9HSXAkLnh5NFs8fjpyTG4wWkplZmk/XiNVdSRLQFZqeUBYX3FtVjo+PH5zQjModzp4WC8qWCQlOmhiOVJzW0UpIWhOZVJkMkdaaWdnKlA+VyVYSlAmUF1ZfERyRnt1fEp4M2dEUnUqd2NUXnNLSkArQDMqYHdNNHYjRlJ4T1R2bW4pRDJLb31HWlpTYSUmPDdb''@;'; put 'put ''QHk9VUVhJV09MzQsXlRoeT9rcmhIZy9nfi5QeC94L2VZfk1TIytIflt5WiNFYl9dbkkyflcuNjZvNUNdQ1dVVEltc0h5MEA6WEEsVnoqflRsW2JMaU5ELGw/T2V3T0gjQC9XbmsjL2IpaXxmejZnLzFTOWQyX0R9Pmc6NCJvSmo8VEJXb3Y6MWAkPm5oUU5WIll9YXxwRkVNPVcvKXZ8K0NPY3pY''@;'; put 'put ''MCMybmcieHh4RWVMT09+Ll0qXzs/Z3dOd1t6aU1VWldea2xyKGtxel56QVpNdCtPTHgjSUtoJFNEd0RZQCQwRnJFOHUicEszKX5vWXh5bno/fk1nYkhJMlklNHNne3lGR1p0KUIpKjhIVjNQXUdnbltvTHk1b2J6ZSlVa0xFW1NxbFh7R09YSGZ5Qzc5VWdgUi8/SndBKXlnN1lOdXZvOyg7QktM''@;'; put 'put ''WjRjbVRWay83QX5Pd2dlajZDT3hCNlZbdilsdDxyXV5wTmtrXVpxKVhSOEJbJVozaFtJPUJ5WWtwLGxaRDJ+fXl7eklLeFk5ejVTdHEheUllTCtdanBMeVF1K0ozcWFUdzlPLCMsRjppNHBDdkl1Ik9WTEhiL0MiSD5Wcy52fFA+L1leQEBPdC5fRi9VKChNUWVyWz5ZJkc9aDl1TT9PV0dYOSNt''@;'; put 'put ''QURrTkdfS1hMeVlrdHpRUkF4bEZiajhkXX4sbixxVltxIUQ7VFVUXn5TdkkycyFkbkRERGE3QGw2PiltOCVCLmU4I3hmRlchT3BTK1BpNWYxOjIxSTwyZHc2SDV0NFdFWHgvQy5FV0dqVilsI3oiTlpYNjNUaSwsRFFHRU0xU0gkM0NsMEJVYExoUWp6cF1yalhkWzVqaTEmNDNTfig9TzF4Kjhg''@;'; put 'put ''fkZ3RztdPGVdSEtVUUt6aTk4MkpVKXFpKXxGW19UbDF5KT9iM0d4K2oyLGFgLk1iK28ybjVMakRGMnpRJHUqX2EsPS9+N1h5aUxQJUcqb1hVcVd8PkJqaEI5bnlpZ0AoPU5WeD9kPlkpJXF7M2AqKDBhU0xJJkkpWU9WdlZ7KUx2W0IiSWVudyZPLispNSorJXw2ZjN+Llk4ImpjWDJHdy43K1NR''@;'; put 'put ''RHZNWjh3TmNQYX1dIihFRyhRTlE0SiwxLnJwQmUmKV1pKzpPO31GNmJTKGRVcHFDcHxeViE2UU0pX1JLMElzQFJaIkA0c0B4P0BTN25GRERzKGthKXllNjZALHdmY2pnQThdOkM2Nmx1PCo5aDIrY2tvMChHYng5fEJ+OXM0JTVFLGlsMk9lUkV3fUMzKVVkTkFkRi9RSl4uJEJOZDxrRShreTtJ''@;'; put 'put ''YSYkUFFqPSIvMX41VkFyYEkrWHddKT9ANDRIJDlLMHo1dHIoLix1bHtkO29OJCkkNUF2W2tGV0BpdjZFSU9JVFlLJX1yW0crPG07cTY9Qyk+V08/WiVGU2pXRjNCaW1hQlFndjNocWBYZlpFdyIsSFdHX35UZnYrdXYxZChSRG9sRF9feFEydnN2P3F6LHd7OXJJQmBub0U0QSlrJVc0NjdeOn0y''@;'; put 'put ''MmtWYFoqJXt3eEE3NDJIZ2Y4PFhvT0poTG1zOzk4I0tueltxcEtiQFosKyFYNG9RX2Q1KmE0ajJ+JHZqbGJoR0RIVnsmfilgOXhBVkU+NkZeTkgpUzVRdztgVGo5dmBgPnZMKjtRYGUranRWP3VSVXM6OmlFMj4xLChpMVdMR1s7YFZnVTw5SVZKRTclYmFpMSN6ITh+UFtfQCgsT0ZGbUZTJnNM''@;'; put 'put ''bSlSXmNpaT86Vm5eI2dlKyZkUFlRdXtOdUM2bXNWMl4zYHY8KyFVeXEkYTV3M3Q/XmIoT2hwa14xMXpQTSVmWVE/ZW80OyklfiIqQkR+NHdAIW5bIy5AZmklVSgsalJDL3lMa1NTdkcrLlgqVlFHPStwTSlwWU1iYmQ+R3ZrIXxaOmQ3bi9AVHlHclN1eDw3UEpPTEoydUopKD13d08+MGYhP0V4''@;'; put 'put ''M3k5M1N4eXZVeWQvIyhJUXxVJmVqQCoubHpBU1BdUmgrSXN6VVl6byoqXWFgaF9DWzduJTpLIkE6ancwYGQ9WUghOD84Q286b115Q2FSZ3tKfCtfVkt4SkVGZzRpbSReTVRaUVtNI0k9eH5qQ2M5Mj9Ic2deS1JhPFN2OkIjfkBgMShLbFl9IjtBSXhYQWhKWE10P0czc3hPJCtMWkxAQl9UTFRn''@;'; put 'put ''VlJiUXlkc30yIjwzXT5MT3Y4Qn18a0tzMHB1KSEsU2kiOSlIVWNHeV5UX0A9Wm1rVFJ0Im0mUm9ERHd2aj1VPnY6fXFkdEl7cnp5PS5fOFdEN1pwdEluTj9nanhMayJQMks2Pl1ePDMlajY/ZSxiaT9kTChzUVs1RGA+bmY5RXR3V3kzRSVafHM9cGldPkxLbVNjYmdxJklldHp6QHZ5ZWpEIWU1''@;'; put 'put ''flZYdnhhdz1fOGVuO2xyWDlrQG58ciVKRVcoem1IfWE4W3pFYmpXVj1aW2AoKUBZX09RPShbUilJO140aEZTRGE2UDJGWWZMezI3bn56d1hrZTtyYmg3N0BufEV6aTV3ZTVZRHUwRyYiUzo8NzhhMy9jW3gvWHU/V1dPeTsvI3JZZHchTU0yLzx+XnouS0IyNHZ9dks1bz4kLmx9MXMlRmkmemJo''@;'; put 'put ''U0x3VDQhWnp6SXhUMV1XUC8zYXQ2bCFgdENHU3R2ZEQ8KylPeUQjV1gkI1tYQkIiYn1bKUVdUiVvfFp6KmspQmE6XyImfkJZckphYzx2KTFCZz9Zb0gwO1F4Z3s4NGBBbyVIPmVIaDRrIkl0QmVbZjdobVd5P3EmQyNYXitlU1ZZeVlORSY7SyJlOz5seFYkVXluLD9iKSMzM3ZPL18+XiRuWVRE''@;'; put 'put ''IiJacGNTXmxVX3xWPTF4Q2xiNUA0S2RPO1oocl8pMUYsekUpWT52I0RGVVAyMWgvO25oYS9LS2MjOSpDMW16QSM0ZGgsc1ZKeVl0d0hNNEZgSjhPLnpfd1lse2RTeVghfEwqWUFKbyhPOX4yaFosNHpQRj8mKmM/Oi88Ui5FUmZaMXB1QzIkKSkxY1hYOCN7JTpCVFkzZSFgOTtLIUA/YCVZL0pD''@;'; put 'put ''fUJrWnA8Ri49OCE5az1bT306VjVKclk+SUgxV1ducGZAcjQiPDAoQmF8Sn1TXVJTd2ZXJkdKJDVWc2lxaTFkTGM8cl9EUnddX1lqTU13Mn54LnhqVWxGSzcpKXI7Ln1UfFdybHF2PSVSWnB5QFR3VnUhfkZMT2BLJEB4R2Qoa2Y+VCZBYUk4UlhtYUw8ZHM5c2laR0craCFCSmI0TmVROEdjeEZY''@;'; put 'put ''cEQxM3NRKzp8QjNfIWM3NlR+LGFeVHdue0BPXXRyeUx5YjdWRUJzZlpWXyk0fmhtViRlO0JnMVI/ZUA6XyxnNEZpW1hRam9veHV0ey5eayEyI1JqZ1lJaGorc0pOanR0MVQ1VCJhcm0hbDUqeypXZm1gLD50bWIoS0AsNHpkMlQkNUU7MEMiR110YjJFTDxwcmc7byVqcWppVG1VRi5vcnxHP1ow''@;'; put 'put ''JUhyfHx9dG4jfUxuVVFyel9HeTltOmNaemxsUTNXaHxyW0Izb197ZUgpWk9QWmFnM1VmaVd3WEk3WDdANiJDMmYuNEBVdUhLMSE1VVYmUUNUak44Xyt9VGFqeWFsIVs0Nkw3Vy9HV1IvU3pHI05hOHtzTjNKPy98WDxbfEIlRVZxbU9pLj9DKkdMcGxYP2h2JTJRMGVvUmVoQkI+RHNkdThwWTxr''@;'; put 'put ''LDtCfDRfVjRUKj53Vk92eClSMShTPTY2TDtRXX43TFJnZWNYYHRfLDZUdjJkeFAwTi8xZX1VI31BO1VENWJBK3JJcVpOYyVKWkVxcT1SISY8WTh+REwsb3leaGh2SXhrfCZzYyx1QFY9XTtbLllUd2BxXnEyaXp2K1pidjxUey9jVVNBQnRrMEwqYGZPa3pkbUp4cTRGb2kqSG9AXyQ/LilkTEZE''@;'; put 'put ''UTNLKlp5e1dGQVZzMXticTY9NXMufHJXcHRdbW44bGpseHV3P3Ajc3tGRFB+IncpXTNWKDg1Pk1lYjYpNUN6Xms/PGNNYFEkWVNDR15EQzR5YlJwfU5pPisqWHZgYXJObFM3KSwyT3lQQ2RGNDcrZG1FUD9vdmJDM0MmW1B4e3M/Yi49K19JLzdvcXo5THRGPmdNRThkPzpKSk8oXW5pZTR+TV9i''@;'; put 'put ''fUV0NDB1JCVYL353Zi5xVjpmdkpdcUAkN0lyXnhIezg5SCMjanBUOyRSIjhbcyY6IjJaKyM8ZXA+Ki9lSC9SOmZqWnQjKShGbjVjUkQpYkBMaHw6KlJEcmQoRnpWX2ldR0YoTjFdO3QybWBCbjYybEtdRktxeSlfW2R8UV5qRUoyaz0xLlE+MzZuYXpBayopRkAvdnsybWl2cWAzL3lDWlYofXdV''@;'; put 'put ''UnNSVi8iZTd4LFclSz0qRGk5cT1AQ1hnOXdwKCYzOk4/W1JrXTh1a1pUaiw+TixEWStJV1Fba1dhTWpkMlFIK3xHZSp3N1U+ZE1hUHxJZUU2dy8iUCtXJmZAZTk/WGRBVGJjeUo5ekgkXUxoTjFGdj1OKjd9LkhWUVk2RUomUzkvTWB6dzZ5KjYqXWI7aSszX1JbJVt2NkM2PGd4I0xVa3Nbeks0''@;'; put 'put ''YWhsRX5eZSVzO2tqdFBHPiZJdSg8QkcvYWl+eV9PM2JYRTgvWUVRTERDdmxDOE1wNnJjeXc/Kk1kLEUpc3piTE91L0VsOztPSls8Y3R3NDUuZHU5ZHpTLlo5VTdtMHMweytDbGdaQWwmKE8uSyI8YE5PWTJheEVlMjNXblVdcipxTyJNMT1HM0R+PnRGfFU/QGMoISM4UGhwWnh+eXdCd0xxZG5v''@;'; put 'put ''L3hpUFsrL2g4YmAkcVBRTzhdPHwvQmxiIyp2UHc6KV03cixRKn43RzpaQ20vPEN7dEdRWG5NUW8ubHJsJXNYbyZPSVdxRk1nS0g3KlZMLFhIcFkxaUhdeXVVaEhRbHFDQkBkISoiYFp2TWpVaTUiXmslZXhvdkJaV2cieFRzKUBpaHlFb31NKVVxXSJzMjhsR0kyPzsyXXZEcU9RY0wqe3MiKiFs''@;'; put 'put ''NT9ITjR9a2x+JDR5S0NjLkJCV1pecVM8SCRlJT9WZUNCZmcifWsyT2Y4bD4odyZRU0V2Yjw7NW1BKFNqRilIczMyZi9eZXVEQlclN3RVKlkocyN5RUpYbjxMTG1JS2I6QXErXnAwbmw6dXZMX2sxa0FxdSloLHdafCMrUDtlTHpOR0c0RWM1QlVXPVptPHp3NlpPdTZWI1RMSmtUZDE8OzRXZCkw''@;'; put 'put ''b3hLQUFTalRXU2JOWzBsfHFRNTZmNDtWaTtgIkNvQE12dCJSamFqOH5BYUcjV2AzTiowbmJNT3RLcV4rK2kmQj07Vnc7NTdhPF9aNkosenY9OjxnOV58W29tR2NpYzxsLDopKzlmXUxmJk8xSzNnXm9IOi90ei85OjhVSWMkfSUhWTBLTy5zNGdoVTUvKUBWJT0jcDReP2l8K2dIeD42V2lWRCxH''@;'; put 'put ''KnJmX1pVOGdaKXRde1R0P1B7anBhanlXPllSO3JlX2ZZbkI2YEsvalB3YT9Ic3Zyc0o3PHpvR1hpdGkqMV9INlJSTXdkXWIkfjZjU2xodHY9X0NXeVROQEZke0hSK0FDYExFZTFHeStrfi49S24mNDQzJWxWMDdqck9BSylQNF08KT0jQTdmKyJjM1FLKiZzOixeT0wifjBfY3ZlJmZQXV1DKWZW''@;'; put 'put ''TGVRd1BpT3FMSSltP0x7akdTal0pNjdrXSRRWV81SXFqYSkyITxNeytqaHpDQTBBSFF8Rjw4YFljYCsmISZUQmpVYiFNYnsjRFtIMTplTyJbYioqaTZ+VHR6KnsmTGF2dXk4Ni5YVkZiV2xERiEhXSRVTjU1bHRPKT9wN1NIVzhZbS9GfDw+KkxBcmd+Vkdfc3hhKWlmKjZnPWhgMzVPPUxmUy9j''@;'; put 'put ''eksmOEMqOGVTWjV5KmRdcDdaZEc5OnU9NWsjVF5vLD1tK2gocjEld1NJUyEsfHMwSC5CMnUmaUQsJn1dcyJtcTZfSENqRno6dHlSbmJfazBAIUJEZl4yLnFdP19JLj1jQiJPPj5VQEspRj1nZS9yZy56Mm1nR09eSSozWzBXclBMJDFPIyRwbUxvcUNoQyQ5V2h9Q2ZORSVkOz5TeyVyKHhGJTpe''@;'; put 'put ''ZDU1NEpgfk9SLjsuQX1+KVcjSF43MlRyZHlEay89NllANlh9PSp1TWdqPT1HSyxnVT5xSTxbYHJXaHZeS1QyezxZTSx0THZZVix3NW5QOHssOjZyYVEke2U0LjMkMCt1d0pGRn5jSFRvVkQ8Ylo2X11lKylPbTFdeXV8QUsxMXNQfkNyeDpfQmxHNTcrO0Y/SVgqRGgwV3FOQFBMJHs3M2slaClP''@;'; put 'put ''Rys7T3RRVUpbbXxUdDZdTUdxJlNvPiVhV1ksN2FQUmp6MCIpfEJeRDh3NSMsOGtfJWpQRTQmMndfL19zP0Yid2NIQkZZYzh9TDQ3TFdod2hzUHYvRXZua091I1k2am45cEh1eXExUjdFOVF3QW1Me3dDYXtlKlBJXWN1RCp3SHtrOH0+VEVdQUowLDoqJGFzZjJIMDtJUnplPFpjODVXK1VzNnsj''@;'; put 'put ''dnxGJWNUfi88bz4hKmNXTyZARiR1THdeL1VPYigldk9QM24rdzF+SzUqcmEycVViWzA1Q1NHdXw0OjFhdSJZVnx0V2Bma1JUTTwwVyU8d19SVGM+fWVFJVcoWXNDT0ZoQVtPXk02K1BIcSpHcUhIKkZaSWtNSGorcn5kYmo2XUcyU3tqUj1uP2lsdUclTFAsaDJ5SnhoQiIyaXoqdiI/Jkw5aFAl''@;'; put 'put ''NTFOQHttSTxqN0F6ZUFkd3JoRyhKNm9NPyptaDJDIUdkQkNfO2IrTCJFRHZjTGlUL2FgRU9MWExRPVIhe31hUCteSGovNGBDWzFGT1FaZXlVOlRSOnhjYyl9T3srRnh3dlB0b1dla0VXbyZweWdGci86fVAvMmhIUmp0LkZNLnpZNjArdTJSbVpgUS5nN2FAbTsuREEzX0U9OHl1NkVBZ1B7akw4''@;'; put 'put ''JGBXTkh8MnxeVj9KRVtuWmVEUzBHY3dZWlNRSiEyRVVuUDhPO2VoMTV9YDA/MlRYNXpkWyYmTHIkPlMqUURJKDA2OVFXYDc4aDNWcD9rXWpEIncwcDFdO3JzMzs9Wz1PSTNpKDJsWHlqUSlENnRJYkIvLmFdfFc2OThfNCM/XkspN3FEcV85XSZhYjxSTTttYztJJmk9V104Xl9qOWczMjlCfGho''@;'; put 'put ''ajtsLE9HLll7Yjh7M1hVS0pPdjd6fThrMi9wbmE4cXNjR10xYComZktUanYsOyVCaHBfcSpbUW5uMVtPIjxTenxYOC5vWXheYUVXQzJtYndOViNJIix6d21uaUt7WkwoK3Y8UkpkYlRtQCV6ZWpfazo8UlphVkFVbDVUe0BXJSklPU4hQ19fbHp2fVJDdVVNJHJOXXU9PSpncERZd0RQT10/JWlS''@;'; put 'put ''aUBCRnlnQ1Q1IWRSdzljOSxgcnhfISwvPHxpLj9hYWpDclAiUzRWb3QsOi58WUBHVl5fdX19QmdDTn5zOT19cjZSSndfdm5IPWgxMEtLMEAwMzJffVt3NWBAYj40cWFzO1RgJFBpXTpFRDE5dFQ/KkFUM0RAM0gqZ3lKen5JOV16bzIqIkd7NW06SUEzXnMkPEdrVi5pKmVvTzhzajVjM09Gbi4u''@;'; put 'put ''KT97W1RZPnpvLkNxP2NpaDEhck1AKXc4N2BNXUpBWW5SSjosS0J3eVk6U1ZyTWpKOSRbd0Qjcy58eCZaPENhZD5ofCkqLy8iNEJbc1pfSkZCNTlPPCZPZD9qN1cwKjZ0cGB4OUdqdiRvOGxAeHVtTkcsKDY4T21oPG83OFlCWjp9Jkg7W0BPMVp5I0h8SywoL2pqZUY0UmJ6Rjt2SlZVJihAO0FB''@;'; put 'put ''RlltWCJhUGJ1b3lgZy4mW2ExKndYJFpBODh5aWg8cXt3ImBBazg8PENNMHg7KG0xPnxaJkdGYzh3Pz0kR0RGMV1ec25PenZsTCZQTGpMamxLOHBjUXEuRl9+SWskfGBsfTdWcjFkdEkjUXMiSjhCc31kOXs8JXBAXnU1VytLNGUic1RqKH1zKEpURCNpQUppTCwxLlB+YSV+XUM7P0BMbyt5W2Yq''@;'; put 'put ''e0xgYUk7Sz5aM0lQcV05b3s0WWMwelM/aExScE5CO1gsIyJTYGIxVEBUUklLa2pzaDUoZnopbyF4azNqbWJ9Y3AoTStkLiprTDA7TzNnM2o3OFJRNE5RaktGQEw4VDlTQlR4UzcwISZQfW1RaXU5Knc3dHVxUU5TNFciViU0fjBjKiR9cVcsbTJETyk4UzRHQlQ3cENFZDxyPmhiblohJlYjKURJ''@;'; put 'put ''I1NSPDtxNnIxIkF1WW48VGh9fFV6dz1dY2NVaCY9NnRzJDJyQ2oiRTxHPzZPISl4fGpLUmx2LjFFTTx2U0tLPUxkZj5uKm4kLCV8d3ZrRyVeOiYrYWIibWhEak48dEZnU1pZQHxnPEdbe3FQQV49WzQlLnF2aSxTPnU1TW9WWG0lQmEpTTYycUVgeHZzOUJHVj95bDYsOyJleDU+VTh2RVt9enB0''@;'; put 'put ''bk52IzQ5VDNwc2Z0R0IvcDZbVCJ7Zk1eJTB0RjRtLiEoTUlxZFl7Z0ZRITN7N1EvJTBfRTRNdWYlMElYRWFQeld3Wz5pSFtEUzhXRXdydHVeRXFKJi83PyUhZk1JNyE/TS5FOS5nNUpRcVU1bSpWcU14ZnF7KVoobV4/YzZOVDwmR3JVUm0lTXxAOTpzcHMudkhLTWpQdmwhRD5qL2Faai9wQ2F8''@;'; put 'put ''TnRFPSlTc2VKSG4lRD1daG0qcnBucXZPSjdeV15rbT4+dzF5TlAxXWJiI1p7JEJXOWk3L0EpW2N0KX5FJFtwKmtdNyp0PS5tYk4yKi5NW0l1QmdjWXx9a2NWVW43NltafntHd3FhYUBvSXg1N1d4cl54eiVVRng4RDU4Kj1UUFB0YmlXOntJQEErWW9kSiNKQXhSXl8vYyRUUXJtSCw4Yyk/TTkz''@;'; put 'put ''fShdfHZUKUEzNj5xY11gYX10YGoqInZ3bjkqa0t2P0xCNjQ4RzxUNzkhUmtReDlwcVRUfEYlNSVjITk9NjMldXIqSCNffHJIPTlMTTg2cn5tblk/NTVqfCpHXntlXyRNbCRvK3dlWjI9aWBESU5BeCwqZ2gmd2JVbDp2N3xVYjF0WHNnL0UzXWs+JjRqKXVmREwpLzJRT2Y/MEgkek4sUS96RHNX''@;'; put 'put ''cTY6OyZqbW1URy5TaUxDO3MlVGM9IWMveHpvM0g9Mkp6Ul5ETCY5ZU56S2x7byFRb30kJHxteSlaWCV4cFJ6UD50NHd1Kk9DenpZb15pcCgzSU5WUDFMX2p8N2N4aFZvaFZ2WWF+JDU8JF1XWncrUT5oTlQiWE11RWRKR1lHanguVy9WSD9hTV1nfSJ8NTdBQ1cyWFFfKlpvZWhzLyFaRGpWUFAj''@;'; put 'put ''biJrVGF6SSttWiJeYGYqX1Z6Wmw7aHhWeXdSWkghNz1aaW1AUmIkSCJBQTV7PlpyLkZbZGpUQD9Vd3VFMTxDSlldYF0lVzMoa1FeP0tAPDprIkpZMTg+U1t9K2RnczRIPl0qV15SSjhgSCE3RkBiUW1VOjZrdm87KGIkNHk2QU9zXTJzdnZpdml5QXpiOT5dZF0sNyR7OXUmNDtWX1BbSDt8V2w+''@;'; put 'put ''PWEsKWddOGd7SkgmZGBjXnVsZXAwJDRfcTp7eG8uWURtOjFHQCF1OV9tZT5ycTM2RmJ4T31PJSFTbV1jWEV8RE5UWmNdTkVwejEscjd5NUVVUFBAN3xBfWNiZkNodzRTaj84VFJ9IWxHc0x9WkViSXlMazN3Nip0P2UpS0tacm5RaiJNSDpdY1ImbVAyK2pNYSFXUkZURjFqIi9PMHtMJWg6WlNb''@;'; put 'put ''NTB6ZT5ie3daM01OYF55RyZ4ITRDdEhfWWIsfWZRKCt4O0gvNltkLk1ge2RwImM8RTE8ajxGdTMxdjRdUFB+N0tTUmNbYXl0NXZMcDw0M0s2Mm5vfUcuMkw3akRCZm5dOV5bW21CL0NnYVc6R3Q3M0BIdl1sUEBnfXR9IUxDfiVAVTYkKmRDZytZaXprJn1TQEIrJEU1YnMmZWljWjZmSjJTI1Ik''@;'; put 'put ''M3xpMUhCZmFIMF9aaG1KIXhCKUxUYiZIR3tTVlEldENqRnRWWk8kakgmeVtrUCFhTF52KU1sUixJZEl4NHJ0W0hgLDUqQz82R28oa3lAYVRnP3E+cWokcHZaZiMzSHxMYmI6SHZhKm8rQm4/cy4wN0Q+IWBYby9td0lsQ1N3P2hGVG5+QnQsUCV1KixCKEZtMmZuaEw6I35DaHo1KDhYfDIhNUdj''@;'; put 'put ''JFtiWnR8YkdmQUBkWGFedDs/RjdxODR7OEYhWz9xT1dDXjsqZEJpQlhLYUxAYEA9RDZ8WEMiIzNxd1ljaH5iITsoemI6cTFUOSw7X2NMSUUuOFFnczskR1Z+eEdMOihreChMOCpdP0lmJV5LQyxuImtxeEkieldDeUlQQnF5Q2o+fjJDNFVER0lmal8qOkskPj0pLD98b3Z3KSE4I1JHP24sR2p8''@;'; put 'put ''aEFDPjRPSklWT3tHQXlVfUx3W317UEl+YHxfRVpVR2xISV43clArdmYsfHVSe29GfW5lW3NdKSpMMDdlelo4YHMiSk9YPVJeSjI4cFklNX05RWx8UXY9OjB8JF5oTGhKRXJLaChzZWUwciV8S3RoJFlTNlhGaCtrZSxvJSVKMXsvdl1fVHlkTTFBZWliOSFHLHBtKDhgbU1mTiwwNFQvZH1fXmJ1''@;'; put 'put ''TmhRcVd0Yk82YHVzN3F+eWI0fUU+NVNHbDlUSFZNY3gwMVZOOWwwOyluKGtIbFU+fS9qaXRQKldXNSZWQUNmdzxhR0QxeXwxVy9XJHQ0US8mb0BnUT9HMGVeck9rdjh5aTtISXQpZ1tPXzs4Nm97UG1Kb0wqQCk6VTZ5TDd9KFslUVJ5PTo2cjErfU1GWHUxL0hHfWFkPmErLypLYGd7SlgmJE0y''@;'; put 'put ''bHxfZHlNN1JONXl3ekNrKjpqWFh4QmQiWTB2WlYoN0RhcDYoI1doUT96M2ppUEE1JVUmdCIhVkxrT1csKSl4aXRyX2E0cWo/LGR+NXpfL2pQN0ZDKiluXyN+RHA4Zz5SJmIrYUN7Q3BabEdqKk9DIyl0dj84YjMhMGAqMW4oZHR4eCI8XXBxdGZlfGFYUyY4RlV7all1WE9eZl0uNmM7Szp7V1FM''@;'; put 'put ''ZzcuNyNNWk5XdH1JK090a0dqbkQ0c05lNT43YlAqR0o2PTNKME1nfSt4c2U4alU/TC59d2VXNiw0PD8qWmBAQEdeWDtHanNdYFpwLDpnfjQ6T2VEKG5JU0FZP2kxfG9vTkksb0I4V1BISDp2dFJsSXssL1R7VX5WfnVJNz1ZVmtgND8ySFEzL20vTGddaWJOY21xV1BRd3ppXzNVUDUucjFpckQl''@;'; put 'put ''MGo6fmgrWmdedjc2dSkpd0whQllXQ1FMWV5MaW1FZyRsZE9McWBdfi8xVlJme3UyaElffSZGMWghbkc1L3olZ1JCMXFAQUt5blB5eUZUUkd0fSEsJXgrTGAsb05lUGMzVExOYywoMXI1RzkpKihBcCUlUypOMUssPH0mazkiJlI8Q1R2eDltJHpjKjM3QmNVPElmQzg/K2FldHcqeHN5MDBRZUo4''@;'; put 'put ''bSh8ZEgjNjgpOj9tKH1jSkg8LmUqYWpHU3whPjMoNXhMVkthPlBlLDpWPFduT1kuVmZTMHlyV3F4dGQ3R1Fra35MMD9mR29HMntmWGc4d0NUXWJPcy9pSjFxZlpRbjIyZTpjd0ZXUj1aWW5sO25DUWZlUGxkJGtTOFhyeXJ9SDNoKV9AVVtjPVped2FuQHpdXzA4ZnFYW0d5bkAzL35EfFg2XyF2''@;'; put 'put ''ZjN+TDliImUqLGN5e1AoQmBJRFlZKmVnM20/Z2ZWQjo6by4ucj1WeSpjLm9ZbGsrPiFFInZsQ3FOKCF2VXV4W118MGBqY05PL0heKld1a0taSF0qYDFgey5QW0J0YHBkRXowKWlRfGpPOX1CQUNMKVRkYi96bmg6KWtKZF02Vlo2LlpKZVNlQ1RUS0lUaHZQYVFUdFtsYTA3TCE7QitVOkQ7OiF5''@;'; put 'put ''YVV4JkwhKlRIKjh4Jjt1bHM/azQ7WUlWQTE4QyFqTnVfNTw0ZFlvd2R0c2U3OUZsSX5ubztsdHBdSy9OPDwrbl08b0o4OGA7SERnW2xycU5+XSNxMEx+M3Z1NUJsfWpMVC4odlZ5KCFac31ATHMmR0t2fE0yPFksJlJIUCJLRnxvLjw7MUZKRll1fEl5NzZUWiplXzwyNGFXV3pJeWt1NDBCV2RN''@;'; put 'put ''ZVdIPGxoIUNkLmM7Rm9DbjI8XTAuQkp8Wm8xOkdEP2pKPEp9XWlseSNJMTpReGQwJl1+O3dlaTgmOWpfQ0NNeUVuUHc3JXFBKTxVN3hgTlBkbnBXfkZGX0JrNHxKfUYvSmx6ejFPJkF1R0c/SlBWNnliQFJIVD8ran07S09WTlI/ZUNGO0VJaiYrb1U7PHdWM0hDI3JRPzNQSmA9OiVXYzQ8bCJj''@;'; put 'put ''ZTVyZi5NWkx3M1d3fkJuc3lnb1I7MVApYltCJm0scS5qMjkycmd1Ny9AVUw2Uk09Mz52U3l8ISVPQyF0XUpkazAzdDFPK3pSV0VQPnU8InZUMGNsP2FebkY7TGFRJXg5X3Q/bDQxZUVFTnx5STQqMTZqIkBaSGY1Z1paVHgmYWZiSCRVU1kqSU0hbyJ9MX5BfXVxQFk6YkE/fkV2STNtdlBPLjBi''@;'; put 'put ''Ok0kbkc3RmYhZGNhOjY0ZHRuRnVwVHQxYDxSI2p+Ti4pP2s8VjVyKXRePFc1Pz4ydlFJRVhbRls0Zm0pP3JwNiQ1RDk5Q0FfVkZObFJyMzpyM2Bmc1dHcDhMW3pteUx2PU17S3l4JiNtVVR3WmVKdTRRczdPeytbTjR8WkBYMnhuQnE8KUZFbGMlMlMoUlV+OHFZXnl5dVYrWTo1bzQkfHJ7Ii5M''@;'; put 'put ''ajYiendGOGYrYWdSS3dsKDVwP3R0Y25gSU9zJEdTZkdeNDslIWBNYEdSNXx1QFBbSmlJUXAsWjNtQDArfWhmUkgzITRKam1EN2pOWF1rQj0yPT1Gd1cicXooc1pha3N7L0ViNF50Z2pyPXl2dTNXJHo0OF0mXWZDQDhlNENFZVZQKWFJTiRMI2lUNFcyVXN1eyZbZE4rVGpfJW1jcUYzSXcyKSQy''@;'; put 'put ''dm49Rzw+MkAwPV56VDwsako3SF5tbUwiRm48OUM4cCMvJTAxdXQkTmo0ZSozVk8hbSM0Oz9vcHk/Vz06USUsYF8kWjptfiR+aCFdTGkjZmMhb3F7Z3s/I3l4fkZvUzZ0QypGfFB0bihGKWtKISkjWz4mJDZgOiFlOFdCb2hSP14qYTpIemVMUEorTUkiMzo2NnxDXURFTHxqXVI8ZDZFP2I4IzJi''@;'; put 'put ''RkU8blJASCxveDMiO0IsOClkeGdSfXsqcUUoMUBkNiRSejVGTTp0RXZrdEt1SF1vIzNBQURoOUNIK2NvTS9RfnU5OE42e081a3RhNlpNRGokLngwKyQhMkYvUVR1W282TktVMjJvTTxQOiRTPkorL0owMC5ITiErfShPV0lNSXVAZShPWiNVeWdtaEFRJjdpJl5CblVfREgqMn4mJlQqdzhkd2JT''@;'; put 'put ''LGA8ZkI5YjcjR1VoPkBpbEshLmsmUyVkZF0uXVVHYTR6PVo9TEhKT2NvWWZsbWdsV0JAe1pzYVNQKiZLVXVDIzFpQk0ocm9nKDVFal92PmAlJkNDIl85Nz9UNzBxOmBCdkZydGRBfGVHS0B5K1dATmcwNV46fG4qUnsrTTVGSH1bZ0xSSXZ8eG0lQm9SLGYkbm81SmF+ZDB7KEBtTG5ZbmE5eTE9''@;'; put 'put ''bE9ReS9CLkJ3VjFFVGVdMSM2WT1tN04wb1kiZ2gieG1SUlBaYCNNdGUsU0hMOmNocyExWDBRW1MxY05rZjA3RVpWODxvUnQjRmJRPUEqfENfZDdqOSZbNng/Xk8iKmw8ZjdfXTorVG1RZzh5dDppLnNpO0EweG9IUkAsREIrR0xDZGx+bDxhdlR5W2Uyc3VTZ1prNm9QLDU0NHhoO2IicVlqQDVa''@;'; put 'put ''LitXXi5wLyRRcSMrKT57JXZLWV9hI0FHK20mVll8bkVDOyp6UEwjSmR2IXxBMXluUUJKfSp0LlFOZD0pU1I8LmNGSlREZz9vIXttOVgkJXJJZDlqOW9keXJMMzt9VSg5VXhHcDNaanBQKnJlVj9CIlBZZS95ITQkWj1qT2pMI2A1PGk3MUdSInJYWEFzfXRvK0tuUClPIV4rNDgrKVt2Tkt6KzB9''@;'; put 'put ''PGM5ITokUkY1WGAvWlsqRmQwTU5QUDJ8VHJVTlJtNVUzQkpzcDFUYFglZGZlUkFhN0hQWGtPTl54e14zTWsibE44YzVIbEZbY1tvQDgqND9wJkt6JmM9KDt5UndMZF5zaGVjJFNDdTRLUjVrMUh0aXg3ezQufC4lUlZPZilUIUM5TSFCLyhaZjt9WDNYcSIpKXNRIjRrNEdIMipoPnt5JmZ6c2ZV''@;'; put 'put ''IyhhfCR+JCk+cVpTUzk1c2x2Wjl5e1s3KFMuYCRJVUs6MUQ/YDFXa11IYH4mNXZ1SX5wU297SWswblc9S2BPJmImJTI0Nyo6Sn1gQEtdWG84N3FxYTg0MX1EXj0keStMNHMqT1hAOmh2bjZrdSFney93Mio6WncuYzA1S0dkTWc9cmJXQzouRnFlbnZmMyEjPEcvQWAwQndLfD9UIXshaEkrNkk0''@;'; put 'put ''RkB3VCVJVlJQOj4vSEd1aGI1NHQ8MzZCJjo/NEZwY3A7LDIhZHM6Ukt9PDBMXXtMNW9aVSklZ08pWkZnRHQvRWwwJTFIYXpxYmhObGl3SEk/TDw/PC9qQkIwYU02WTk6a00+Sn0vWSk8di4jPSZ4JkU0RSlNfVtkL3M9ZElEX3pNIzdlUlJfUkpmTWlSNTNlcX0zaj1oLyVCYz99YmY1RClzNEl2''@;'; put 'put ''OS5BLmVvK0JWNUZ0UDFxPEtCImIvZCh7V1EwSkBdNSY1NjNqWmRPZ3s7c0EiOkUofDtqaT0wRHguPD9JeDQ6WWBESmBoQ3YyYTdYYnElRCN9WVU5P3UuXm1bfTssRGdqP2FjMG94RVgzdngqXjFqdy4wOCg7TlJIdVltNkUlImEqYzRGTGRCRiNwPFdBUSNfJSRsajlxM3Q2O2Z1cTZsKytyU3dJ''@;'; put 'put ''e3llL2hxdGRoSjpaRGcpZDVbTjJXUng6TixbMj5MRHdRbVo9TypYMWFdd0Ywb09bY0VhRWo3UWtEVjksZyo+RiRaZTtGWUF8KWU3X2lPKFRfJUJ8K0UjSSFQIllCRUorOU1vImFtNisvTVFVOnVTTixLdzRzUCRsR24hdUl9ODdKS3J7K0ByMmkra3grVS9hJnE4ZHVAfVEuK1VnO2xrYywreG04''@;'; put 'put ''SX43PldTPXxlJFNjRElweyRdRExUTF1oPHFuTlFfQGV8fWMhYl5wP3p5VkgsNCllRjwjV0hCVi83TWk+cEh3amhlbSxZMSgyNndgelF8Smgje0clfXJKdFhXYlZLfnswXWNeIWhwe193d0pEYj1FUSZtTEQ3IXxeJkFNIXBpXlVbWiZteGJnWFdvSEpKflJhRU5GTi81ciksRl44Y3NkMCY9fUxY''@;'; put 'put ''YkliLDpxXjFRVTZFPjxUc0NhdmU1ZlI4YWZbPHZpJi9gUzRyMH5hfHMuYUkxUUhLXVUuTDVwMUJVa1heVl5vMEgjSXBQfl83K2k8M2lEPnRyWVI7XmpTYzY9cGNMdzUjbzB8LF0yMT9QLzplVUh8I0k3SylEWHRhJnI7Yzd6RjM5Jj5vJDArdTJuKy5PVUZBSkg/MS5wT3k/eGorVVpZTSpoKEUw''@;'; put 'put ''KlI5TSw3fDkpKF5eS117RTE8Lyova1puZGFNSXYjdTpbWzFMRVVSR2gibCtPWzZHemYlT2MsXjx8RWldZWZQK2tSdWAqLlBpTnU3ciVyPU54ZEBOQ25Ma3o5Z2J0XShdKGkoKkIuay9yPE9zOk9mdXl3cC86c15ueUN0MlF2d29bPEk2d1U/S0NkfCVDNFdMb3k6TzEjNjlUPygmVHBTOWM3TF0s''@;'; put 'put ''fnlBV2FfS1p6W0tnTFlJIS5Hd2dbRnJMbmFCInV9OU4lNX0sdnRWKjV7Y2RHKjtnTS40bUJtNHlUU3c+XksjZ3xPcEJ5cEtjZy9uVUNDWnVbdS9rK1BXJmpSMmZNNUMkWkpGTUdCIixFPTw/enw/LnhDRzp3PFolRXtxVmltYiExKDZoe30sNjZ4aFU8JXohdSllb1ZZIXomU254JUprVj5yKiMh''@;'; put 'put ''MSwod1MrP3gmNnNPakcsYWd1d1Q0NnRuSTFyXWoyNDlBK0B3RVFERXFFL1sjcE5STzZEVFdvVFFoRGhLeG9rLnRaLDswYG0xZHc/YHFTPXd9KkpNMUpLd30sZyJ4UCQ2TlVAPE1POU4/aWh1aFAuS1Z+dVIvMF85b1IvciVyfjsrUiFHYl88OlV8Q201NS9Ua211LmxAYi86W2ZQYjwzaGVocW52''@;'; put 'put ''KC5XZk5bW0ZhaGxiUnA+RFpLRDhZbitJIj9pS1F5SDZZYj03fnNWPyNgdFpAbX47KzFGKWhZemNvb2NhYkdsaCUpXiJscTIhMnMrK2lDc1ZXWzpNM3NhSysxPCsxU2QjbypFWCl4dGJrQDI+eF0ybllQXWE2NEFFNXNtSThdVGRBR0l8fj5Rb1FPIlg/OUwwZ0NeNC5jSypORlJlektyZUhiPXMp''@;'; put 'put ''STA1MzhuQDBaI3IhKyU9SCprOj5FKU9vNTJ2cm91VCNJUnNVUzc6bXZ2WG47SnJva3F8JUB2R01hI28jekpqSFR0MDQhaHdbPyJIY29KfDAuRFEleThHMio2OmRIOy91cWMsSVReYXp4ezkyMl9MaDlgd2g6Q2ZWPWh5T3gpejBbUlJ2YmsuXTdIVUBTdFtpOWJnbH5afnw/L2lPWi4vLE51Z3FJ''@;'; put 'put ''OilbPysuTHlWLCFZMH02ZSMzVCxVWnBDbXo2MWZmOVIpdlFhW0Y+UjRKcn1VTk9jfXhRaTdNMUVOPz9CR3VqKktYJitVUHlJcjx6Z0ZbeDhMa2xpMFVjaGoudHt1QmtfX08iOT1raWBFLyhCaX1AdykpOj90eXR8TFFhcG9wUzg5ai5sYlZPMDUySGhKJTZEQVBLeyRnOVYpPC4vKXJ3TzxqKyMq''@;'; put 'put ''PXh+MXZIaW5GWE5hcW13a3syPkNoQT4sd2lpXXN1KDFFZUlWSHU2MyYxP2IzUH5Pe0J7bThaPGRuRkdNTyQ7NVJuODt7RXQlWHdNdD5GME4xfkRxTkkiJiRzLGwkOFVgQ1pvdTI1fldRWCs3OFRvdmd3ezNAPmE+THAoe1Y5TDprd2ZZWEkyKDR+fi4lbUwyIzFnZl9+LzU7PEVzSCJDRGREeT5d''@;'; put 'put ''SV5aN3VQcCxldzlofH1bbCwwIWZ9UXRdeyhnU0N1VjFqMFlORip2d0Q6eGtCOzBuWzFBcyxbYEFTKSxKbilAdikoVUAiVSYxe1k1SE9ZaTNzYTM7bGlCMjVfIiMvSEpzI0puP1tFUFRPTmpYS3l7XktbN2NJOSRYS14mRHY+RU5NQ3klM3tqKWo/N3FLN31JfmxsXl1deH5CWHglekRsdUJZRzNp''@;'; put 'put ''R0g2ZS96K2F9dzZzREpjUW9yKVVfKVVSbUE2eC9hc0tjcFJbWTxiZzx8XmZgQGVXNztkXXkhZFNsdTguNzBGKGRrQW9JKHl8W1VfSVhWJDwxent6ZC5Rdm90eXcxZVsybFE7ckk0JkQ6UWFRblRUNzYidHpzSjE5fCZqNGdmfVtgRm1NeXk6aFFqRz5tMjo3aUVdO148Ryl0cEJkZi9tInV+fExk''@;'; put 'put ''MGhuRmFHJG0+WlB6LCNIOTwzNDcvei9fa1h6Uz1yTCxsdmRGYUh+QXNzIyRHbTF6aXVKMXBmZ0xzVUlRLigwayMsazJ1eFJ8WEYuPVI5K3c8TllJK3c0RUJvJDwkNHpMSU44UF41MG03NlUmeDtRMlheXV5jQG8qVCNnXkIuKWJ8aGtBLz1vd1AlfWA9KClZQ0dTcWo+fmtKU0grR359LjxSIz9a''@;'; put 'put ''dmUhS09FRlF4enFwOiQ5UmE+PygveTo7JSN7MyVZejMuX3UvMzVnTXFVMTdANSRleH5jajJOYHs1XUk2PnRGM1cvJjtzN25hPDlCayVPUCU1fi5xVWBmXVpQQTprQ2FldmQkJGs+XlI9WWQkTEhgIWFNSC8vdEFWbiopdTsqayxDaVtZWnA5UnRIKXhLV2skSiJDdFV9LDJLa2VtbTg9RW53JHZ4''@;'; put 'put ''fnN+ZG4jbTMwZUlZOjdQTGAhTz1oW3Z3MTM+QnFYb0BtO30rKDlmajZ3JihvW0NXb1N0QVNJdS44YWI3aTJ9R1QlRmJtdisxWzB7NztOP0gxPnpgVmFeM1dDVm83bGs0OXImSCtWYSpoMWtseGE2W3p4KG5oIkN9X3xUK1k2S0AzQFhtRl9LYjg+QkJAUlhuWXhycCM6cEZTZzVfYkouRVhIV2xt''@;'; put 'put ''QTdwNE13WFJMaDs8UlsoRk1UazR1Om9eKjFjTHYwX2Qpdk88IWx1b2IrUklFQWNlbTQjVkIrJFchPndMLGBoLyVoQkhGRFZLSDZpTUVhbHhNQ2pzX3VPXSUxJW0lZjQiLD9HMUN7SXJeOWU1UW9YflV1LC5Cc2FbPCYkN3MsJEFGSVVEWXFgSStfPEBfRk56LF59ZmVlKGIvYkB6fmdaVT97W3hS''@;'; put 'put ''Ulo/PmZhXmhoe10+alZZazM4S0c3O1hpQ3lkfmRhVVg0OFRadzBNb3g3dmluKkN5XSExW1ZCMyhZQitPaSF3QTZVOypqPnt9V181SHxsW3s4aEwrak87PHldLFUoeHdoTXJVU2coUEQzTlQ1On5Se05IPDdRU0lzQE1laXB0SG5rMT9WPX1XKklCfUJ6Vi4vXXxpVElpWl8iKi4rQFQ6TlRvVnFG''@;'; put 'put ''cSJbbihMemtWNGpZSGdNUS9DbDVZWnVEVEpeZXVUPDFWU1lEZkxiaExBY2F3WFZRWj07UVEqNlo5OlRlMnlFMkdVcihxRykmMXojWGpULyV4LjFZOG82Mz5fWVd6Vk9VVmdkdnNMZ19rNlglUGsobXd+eS8/MXtyJS55cmdzT15Yb1E9Uy9meT8ha1tbU1ciUGgzPWV3NHhUdDUoZ1A+Sjo8MXcv''@;'; put 'put ''SEdVXWlgY1FUeCRFelV2NGQhKUEjVV43UF1ESlZ5L0U6KSx7XkcpMnEhS0wsOkprcUxARl9MNmpKJCw0L2VfX0ZQO1dAb2lrYkYjSjMzZCt0MltFZiosZCNKZkJYdFUlYF4xSCZ8eDVxQkhbPFgzRWhBNHF7RDxjKj5OK2xObnBmMVFtWSt7KDE9KmMqMkw7XW5mWEdxbF12USNDXj03OXEuKzB3''@;'; put 'put ''PjBrdj8yS1NoOyo9WVQqOyZ9KXshWXhHeURra3B5PSxSbGxXQDp4aUh6dUxIWz8vYk5BTURwVyV4aVZueTkpRTpSVExaTzBnc2B8X2NLOkhiMXhPUCV9VWZ8OSlMPjc9WHI3NWdpW0s3bU04eXhPdFQsRDlWdVBaTSR8Xm5CNiMoVW5uZTY1LzRRa2RLOSRrTyZIOFZYUGYwQiVjLmQqTSE6bDdJ''@;'; put 'put ''QC85OnNuck8lTjVfTVo2dTFkbjMzV05ve0xbeV11SF0iOnEse156MyRNSDUuW1Q4KC95VSZ7ajs5S0FRdD4jZlF2YUxqcHMrN0QmJX5FWHVUS001ZjV5eHVoPElpLlVJVXkoNzwufTh0Ziw0WFUlNGwrR0p0YDRxYUtBXmBbVEFoQDVsT1R0TnE6eTksLmw5R1g0IUQ7OEcmbGhlRiMlbEswOTlr''@;'; put 'put ''UH5ST3oyaHdCVXcoY2Y/PGF+T103P180Xz9WIiVPUi58bj1FcXo0UGRtVVJ7N3pxWHw1ZSxHMGowL00zLmM4VSNZQCtMWW5CemRUOyU8YkNlKUYjazU6Tk5aPFF3dz1USWhHcHxJST94LlB9WXQ1TVtHQzE1YVhUJCNHdVkkVGBfMklob153fSxuTC9uJjNUMW0/XmAqSmVeP0BdJmhFc1JlayUy''@;'; put 'put ''JGJhajt0W3UjNWBqdDBETGIwMFF5KSJNOTYsLmNKMFBPS1heIypKLGZYSj94JVN7KGhHcmEkOzNlRG9oSW9BRzBdWk08TW4/ZDhETCUhNSNoRHErOkc6N3heJm8jc2Y7U04hfWBEZUtFcys7QzguTHQqU0ArW2ksUWkjZnY2SE1+MDImQEFjW0FpQytNYnJTMjsrcHx2ZCElKm1Mb3FSQywuRm5D''@;'; put 'put ''OXReWjA+dEtRNihnOzp+ZUduJlZmaD13YE4xJW9QZ21sMlAoMz4lZUMvemdAYGN0IjwhTHlFZVo+K0JHNGlialc5YmNTUVs9KlA0VyFmYUFUUEYmQj9zJSwmKyZ8T21JNlIuZW94WHRtdD1FfUJdeWk7JUthbDYxPzdyLll4WEcrO11DcFBPXkVjMnNuY0wzNzNFRTIhNUJhUXNMVFBodUgyOzpb''@;'; put 'put ''PnpVMH5FT2wkcE4uImlhNnxscDxzQ0B8YyFldkEpNHEsVVBEJHp6WGIvU1puditCQFE8dmAuYypdWzU6Q0Q0cyRJfHtHYDUqNlBlU2N1Rl1iL2I9NUQ8PTNNcUJZOEg2ZkwuUkE8K0FGN2hyMHZGaHQ5Rz5LI35NZzNdN084KC8sQk5sYHR5OzhHU1djWXplNip3TzBYVkAhW2xRaFFBRytPcCQ6''@;'; put 'put ''VDxkMns5cztqQHQ4NmYjIWw/aU5JRG16YEw1KiJ1eEguRERvcjhFbWMmQHoqKmVpfFVyPWhHXy5DclU+YWIjM1VGe1lMREJneXhrVlMiS25DPS5wMnQyJlphSm1lbnsxI3pmUHJXeDZlaixtb0s+ZjJYdDsjd3Y3Nyx1NTpYRWZSXjd2R3MzW0dMNHxHQGw/TkIpS0NfNGZNL2BdaHtOMWN6eEFz''@;'; put 'put ''WXwkblY1RyR6fis6TGtvKl09In1UUWFvNm1MJVhVdEY5VHxRTyFmbSohQ2B2W3RzQlhiPEV4W3F8MFQ/YU10Iy9uM2tteUB5a3ZmV3M9Y2w1T0Y6SkgjXVFQXU9WbTw4JmVXXkU6TWN+QDh3d1BiMSVLUTVMdTlFaFgzXlJifDleMiJ3empQV3xwVkpiWDFuYD9NQCxZayooW3t1ZmpMQ19id21j''@;'; put 'put ''ZS56M20mIUp0YyEyeVVFX350R3EkUE5vP0svMXgrSzU3fCMiTiNlSlVdXW0heGAqaExaZnw8SzwkI3IhTzVhST91WCFjZUUuUG9aTj98X3t2cnNFe0N+dk1Na11vQTw3bH4jLjQzdy5UQVErQnN1LF9KazNrJSMyKjIhZF03PVFlRjljcUNraCs0ajRqUy9ZWmhEQn09fipCdWNrfEZ4c2puMD0z''@;'; put 'put ''WSE/RktEemBtaFVRRElhSEJJPH1sQHZMMnNLWGZiW35rL056YEI6XUBEOk9ISVs8YSVtQk9SSVQzU0pnO24waF55ZkVJOkNtQEV9T0JsKFg3OT8oS2k0JkJ0ZmJ0Pk1nfjovdntEMT9FXURLISpJdnBfaStWeHgvWDpBZy59c3dSPUBDfjJaY21CVzAwQDJGdTk4XWFaU2FfNXl8UGZwPDlNdnY5''@;'; put 'put ''Z25ldUtPTWVvUXguUnwrbE59OEl0PWssWERWbl1zanxAPGhLLGZ9THZVc3M9cTdGRXQmOG0sbWMlJnYmIkslT2R5aUBqZ2lPSVpKdEVDXzleX21+ezFAW1s8M21oXV50K2N0Tj1QejcmL0VGNWQuJk1tM25TaD99IWF0MiZ6JGklJkY2WFZYeG41LlZkO1NeQE5hPHo2SDpsTUQ3a1pudjhFZngk''@;'; put 'put ''e0V8MEB9bHdQXWQjWlp2UXhDdzZ0TTl2N0x3N0VUTT5nfXY8SSNJcEZEdjdqI05LLm9iVUJ7V3xkNTB6ZmpEMiwpe1s8aURRKURkZTt3Rz1qeXhOfmd7YVA+Rm1oJWxlflNRbU5uOW1uTWZ3aXw8QVA3TTx5PURxSWZPZ1BDP3g7TWEibVssNC81ZT1dfXhHISliQkQhLyI3WzdpbEBWVUpzWVIk''@;'; put 'put ''QlAwVWN8VW8pWX5uN0g0ZUJ8fGh5fTR3Mik9MTp6a1dZeFIpbkl9PUslZ2xJSCFGUE1WI2RVL1RMYEMjNlpRKW4sd2t1Ji44PnhrQFcxRUpoellAXUhtXWRVKzZCSHVaR2Q3eltWYn52eyxGQSl2ezlhSCRdU31NLiJkKyxhYVpyRFByaGlTPyUlTHxkOkNpOmldYi4lQEsvOXhEXnR7PnEpRSZs''@;'; put 'put ''UlVGQS9qXkAzLDMjM3s7JGVsNipjK3JYaz1iRDFuTGlbY0tqZj4sWTB4cjQwY1l+MW1eX0FNUUVSOzhSJjd8cU8hKTl8Qy86MG8hUmdTNV9Gb2Rfc2ZPX3BsJjE7YStuJjxNOF0zMH1OalFBcmFKaV9XY2NFbEduVWsvVnwsK0RuRnwpb15lb2xFQyZtWGBWUlpMIUElaTZFX3tDWDxCfTNLO1FQ''@;'; put 'put ''OVVRUHoqR2Z4eHkucl90QE9RW3I9O0pHW0F9YWEofjAqeHNXaCErfUZlKSE0MEg+NHFrfCFAXX5jRylZZkI4XktaR3pVcXkiXzBUZT8jelh1L3R1MW1dQkQmYTw8TD1OQDFwQ2RSUTtRQDx4dE97IUBlWyw3KGBRfU8iZ2o2VytWXXVoMmQ+PUtWbkFSNGl8UnpzaERoMz5fUkE5Pll8L0tNNzgh''@;'; put 'put ''N2UjeyhIPjpYby96dS5jRDJaUzVkMGJrfUs2R3I/ZUhEKWc3TW1kRmpIYWlyc09PI1dmRlhlb0B4bipYK0NodFRWMyl6amk8NkxBQVJ2THZQKEdzIWI4PnpjbiskfWcpPCMkQEpPcUA+U3A5fGZzSzRxR1F+LDZRM2EsKSE0TlMufik5dWtpKWlwdlZbWCVkJDxgSzhQbnlXKlFvdj5gYSJVezx9''@;'; put 'put ''TFI0aCxfOD9ZamdrOkRTe3s9THQ2KTFddyg5UEFnVnYuOmVpMShIVnZVKjg+bFhNdCwyY31XRSxRUm5YT2FeNWxKZkYmX30uZ1FKS19UMHxtfjByajw3WCs6My5sdExWPERKPC8jXyk3fEtLa1FuT012dS8/Kkc0antOcWEhSi9lMURkUCQ7dVheUjBuVTYuMiNlX0QkMDghIzBCJSE3TixpdEA8''@;'; put 'put ''Uns6bFRyKyxGPkErIih0Knx6b3hlRSVqPWF9OWJJJl1VSj9UNloyRTdsajtGKEBvbE5EXih+KyVsOl5MZ2IuX1ZjY1U/LmNwYiF4Tig9YSNWQ1p8M2IzPWM4Ulp5bixHW2pzVndmZTxVZFl5bWJCR1RYSFMqaTRbI2l9YnFyJih5PVFqaSV8JS5FKmdIcTp3WkxCUzNxTEl3N31jLChOUFdUQmQz''@;'; put 'put ''O3tsOXJkZy95ZCxGUn5uSW1Xb3x9ZnlEOHkweEpwLCxxR3UhM0olTz5beFVCX0Zld1EjTHAzT3N0V199cTA1JGFOSzlYZDBBPHFsfG43Y1JVKmZoOUp8LC5OZkhCKDZadFk5UntWT1l9UzJIZXY1diN9MGAlOyV3dGVkRDxbal0yfGRTR3Y7MlBffnZoLzRYRXl0PG1DdGoidzx3Vkt5U2JjTzV5''@;'; put 'put ''WithZVNzRyRkelIzaDg6TjVQdk8zQEtEQE9HRjFxdCEvelcuITpsZGEhd2c+N3RJa1ZtMVtueSpeRyw4TDc1KF9bVExPbVhMUmJMZD9CWCtYWy98T2hCSmw6QTxDS09zPyRtXXlyfU9RKkhZRV9xZig1clNUQ0Q9ZytkVnpUV1pxdiYme2VZVDZgcXZ8bkZZMX1OISxwKyF6fkxDNXZHSFlGRl1H''@;'; put 'put ''bFRpdWVGTiEzTEY4KnIhOClTTms8L25pejMzO25Semhud29gSl4oNkVkcjFeZzFMNzp3fjBWY3ZUL3ZkPk14VDVjLigjL0lyOXJ9anM7c089a18+Ok4+Tn56ImJiY2ZVbkVjQT1nY2RCSVBaYk0vYCwuODNgJkohb2tpcHt8NVFPRyslRmthIjtmJitKSDxQKV9qUE5ZVUg6Ymw0JG9ZO2QoNkUy''@;'; put 'put ''S2RjXldLdGMpPEdsOXM3dkU0RnpGSmJqLHI9dnxRWzQ1UzptIT47YDojZ3w4dEVXJEM4VU80c1MjKyk5Jls5PUEhbzVIY0UxYyVaLm1OaV1Ubyghbzt8ZC9lNWFMMCw8aj9hNDRWbFNnIyRSL3NKMyk2LCpmVEg6V2ZwJk1kPjFeSGllL29vXjUlVFlGZH5pcU4zJCt+IiVOa0lpWjxXKnFOVmU+''@;'; put 'put ''XVdhUzpsNTtpM0liRXVFWFZfbkU2O2JuVS9bXmc/bWM4U0R+UnhWXjFTa2d2Zm9NJiYsVXFSL1Vgej8hUml4TkxSYCNFXj9RUjkyOyxxbDlgNiMzW2Q8S1E7eH1TbTxBeytEdEJbVF5JPj81a24kI05HVSw7P1BKLHQjeF9GVHN8PnxPOmFuMXt1e2pRalFjQyFXRCxeJX1oYippNlg4ezhCRUp3''@;'; put 'put ''KFQlbEAhNG0vX3Y0IyhBZGwzTWkmaGZlO08mUVYoUz9lTmlRWzFVekZSM1skMzhyfG9FckMjTzU5dlBZdHA1UlNoNn1NQiomUFp1NDVpfXFxLEV1YzBWe3A2MnA/fFEhTS96NGRlW0lsLCRCQGYlc0UicVN3SF5qM3Z2KjhQK3leKVZxWUNafVM1TXJ1aUhFMF9ycjlLaUZbc3RLYHFRPnoxIz9g''@;'; put 'put ''LDErRHBJTWx8cXc8aF4yNmc2TlJtNTtxMih3YC96LmBmLzIyK2g7JHllWSwzdGI1SC5qSSs2bHpwVl0oVEdxZGBiaEFjN1NpdU02QWMzWGZYcik+R35INWh4NWA6YVtNVWs6IzdddSo4VTc+XXlHKUxXaztzWG9GeDBORFFhLitpNUttVjkkZU1LSH1SJEhmTGNqfEhOQzd1dCliLyVqODckPy8w''@;'; put 'put ''QTk1L0E5Kjt5UkJtaSkuXVtFRSM4LHBrZ3U+Sld9ITdbWjwoVnhDPHNvfkZHNHx1dUZhP0h3Tm84RkJUQHdPNDlNcUNeYDUoYmspP1R6RzN2JXtdTmc0aG96Rm5MQzNkRElUQntyXmJeYGdYMiVrfWlTNXY6UTQ+Ty5EY1A5V1tOMSErI35IVylIfiNLaEk9U3FuM09tLEYyX3ZrZHJneD8mMnw3''@;'; put 'put ''aGE1VTVwfS4zKmo4cGMpQXBXeTE2TnpGezVjdjFzb3RHRGR0RUMsM1lOT0RVdl9vcWtXbzp3UnpBR2FTJW1obzdtOWdUMj8xZGJ5NzY+N2ZadV5jRGhkR1c5akBzUXUiXlBZYVJrakh6Zyp2X3V1OE1zQyEmfj0+eX1vKFl7WCZrek5tLzptNGE5clArYCE5JE0hRk93QmdxKywpKUdiMkoqJV95''@;'; put 'put ''S15aZEJFOHFuNlEhdEI7bD5LS2lsJXpEakxLSzRSLi5Jc1N6cXp9Y1twLjd6YUohUU8rXlYpM0YlTy5dbV0iaDxbLzhuWGRjPmQuMClKWzMyVyZGN2pSSyU4Q31leWp0e2srSVJqXnJHMitNUkgyRWUlfTd8cXdaJjBYUl9ZR01bMkhnXz9FR35wVkJmMVZ0M25WMUJANnxbLGBCNSY/dFdtTzVK''@;'; put 'put ''ckVEKm1fXlNAQlA6YTc/Jl93Nk5KTXNfRyIhSlMiKmBfXy9jW2Y0Z25idy4uPUI1fjZ1R0VUbUpiMXpEMWxNUmRxOS4rSSFBPXJ5MTtETVZjRGRKYk04X2RYWD0vUmB7SUp3cW1DNTdPSjxlKyUlS3w7Zy57c0hwfmROfmRwTmpKVn5nMk1dSXtweX5SWUBwPjcjVXh4bmpJKkRlZDhKVl9ZOHhT''@;'; put 'put ''XWYpcXZmKys8Wz4rN2NbNGs3V3VifnFCPUlZbSZWbks7KzZCVzVvfXwzdWRZQTE6UCRyZmA3VStpSFJjNV5VIl0xc2puPHtRcixLaUhiUSpaaWNrXXAzPDgjPzlJNSIjUFdWRCpUMj82W3A4fitXZHReNXJrO3IyNjFCYUZFO21LNDddbihwQzQoNyoiI1A7Zik/RHdtYzNOQ08qUk4iPCJOTTU9''@;'; put 'put ''I0Vge2gqeWQhc1NhOXImYzNDRGF7dDNCdXtHKl9WVjBKamo3e1kmLm9XSDJHPmouPV1wWE1WflpOPVhLP2xvKChCTUk5K240dVd+RkkxbHk1U3BtbUQuYlNSUT5+UixZJHl+Sl9yJiNmIVhmbn1uTFBQXiM1JTNFY0F1MHRMcU07LElBcD0pY0YmMWhDX1JvISowT1hEMTQzY2U6TWJDfSVoVSV5''@;'; put 'put ''c1F4MG53aVpSTWYrSkFHPDR+UT8mYUcsLCkpLCEoPHgpT01Aaj1yaWRyb3tuZzl7YmA5ZksjQl10QWVEfUhiaCV1XjxfS189b283KURiZkIkcFg0bGtMdDJKcEBHcWovWi8zOHE2OXluPSEzWkUvTTVCIVppL2BGSGJESV5uOXJUdSMsPikhLkRyUXV1RU43PTFrTC9KWXlgZU1sfWQwVj9ne1kz''@;'; put 'put ''Iz5NbHFEUF41XUEjJUxoIWlQRF5uWihXSjQ7Z2d4cDtnb3d3MDElRnw1KT8/U0xTflIqZF9bfjZ8bDhUQjJpYjFMMytyYzwkfkRJZlRoQi4sTnVESSRMJXs6eE5tUzo4fmdQYVBoUm9nU2I+U2QpPk9FQFtPLC4sMzxqVHlAPkFXXUwpS1lbRk1GZSN6ZG5GOnomZWRKQlFTWjghPkc9blJETyxy''@;'; put 'put ''aUpDe0ZPfVdMIWxHM0JiNzdlbHdxPCUoJjxGV341WC9MKlohJGFlQ0FLeSF7SVh4eUBMSllpPUUzVypBS0ozajt2SlE8TW5VQSkzQCRAKWVpLlQ+RVl3W2YuMG8oQjNNeiw8JTp6QSVwR1hwZz5jeGhCTjZzMyx6T1cyNCFQY21OWlVvJVpwY0pEeWIpe0pqdV5seSx1I1pec15QYSZHYUpAKVJ8''@;'; put 'put ''YkRfalE7eGdNQiQ1XzdPQFNlMVZ4ekx2NGFHdHc2KE1MWW1RQlA8Nnkrbmt0bH1eNSUmKi56MCgvZjxIZHpmLnV0ajNYSSpoNjdOejFdM2YrREpGZWk3VXxTay80SW0lbGcuTnhIbENIYigpckF+byVHR3YwXWw+P1tOQ1suZHkpd2haQ1FaPyRPbmR8WFAofFdwOW9EeE5sbjR3UkMlaXp9dil+''@;'; put 'put ''WUJ7a19+dEo9ckdFfmJad3wiaD9hK19KKEJBQjBoIy5aLylyJVBPfDJoUVolQT5zb0VbQj5YJlIqMmJ0XntsVGlQdVk9T0gjYUk5YFpGaSFpRWQ6UndhfU9UUlkpZXUiZDFOenNqaWZVSFk+Z3R7cVBxZWldUTJINVJPa1ZwOT07bE9nODdHUyg1PFo7JDc2YzdRfiZyajZ1JkdiZVh5SHZFbS4i''@;'; put 'put ''QWBKZGxUYG1mQDBmXVB1QGFJdCJ2dHszZEhFW0NlKiNBQygqbGA0a2dFJHRyL3sxX0VKQm86ZiVyRVhvSSZBaTdPTyg4I1shaT03LzlFNEFIPTRlZGNVXnJ6eFlld1l9ay8kZ3pTVzBufXErIkVNWyYkaEFGSX1WaVhFc00iQXhqRjhIUFBSQHE3SVYmN2tHSy9tWTgzNHw7UmgofjF8anBSM0gz''@;'; put 'put ''QHMxMmAjamVreSRtMkI+eVM1fHlqfl16dEl1OmZQISp0bjNxdkNPO31Xd3h9aEI9OF9TMGdma0MsVSgyQi5qY1o4IntIUT0/TCtfeGh1T1dzNzFdIjw4bUVwbmJsM3ttS2sxRGxwaTgjbVB1Q0I7aS81WH56V3ZzRlttLnEpeTdVNnxSKl44XlNKMFFIKiYmX29GbSgufX1qd1B5P35idkZEcHI2''@;'; put 'put ''OkdqW0dKanI6O0dyKmlNY3NlMDZNSE8oMVI1Tl57PiViIV8qXmc3VGs5dn1QJTZ0XlJsNzsxWT8ycz87aXspITB0JHBnel9HQjNTRlJbNHQ9YFBSfiY0WkhpIjcxUz1DNVViVCx5VGI6TylXUTRXUTI9Im56MWFzbT5PWjAkUkFHQ28hMmk0V0x1T0Y/WnNyPi5eZE8kPX41MihPVFNVRGokOURj''@;'; put 'put ''SG5dZlkvPHRoWHxiS1JHRDF0aWNfSjtmTyw2VkowZ3BrVERUKFlEJlpDfWJRQ0M2KTovYS59YHk4RX1tPH1eXTkvOVVJJHtYYzlFc2g3bXdpZyIxc2NtKkByTk8+aG9kaF8/Z31SKSo3VTVeekoweWk9Mk1qbXkwcEMpSnBlcUh2flQ9Vn0mJXhXUSovNUNkKXZCQGcid0BQTlNLZVJudSpCNTIm''@;'; put 'put ''R3N1SV4uNH5mJW9RJT8sYEtZMG1uOGdeVDJ9SjIzQGs0cDAjPXg4dUh4Ik1Qdm86Ums2QHFCYS5ARFl2Zl1XWHR0UkE2JjViUU9kaF5Ca1hsQzZ6fDRWRmEwWklzXlpEcHc8OCpoQ0FVOT9SZ04jST04bFAjQCxkKU85MkdaQHJIPTkwOm9qMW5GbnIuRVc1XSZAUHQ+TSkpPSJBYURIXVMlajNi''@;'; put 'put ''WzIwb1YpO1E5MGw3YWw/NXgxMTMlM0oiKGM4fW53WXAyYyYyJk8jSGh6RmBIVXtdM0I6YjNeJToxS3Y1PDVKYGRvYUBTdyFNKXFLMDQuPTgjTz1iWz1TV3JoMEhjZWJMKiRVO3pnWnReckJ3Y2hwbC88JERWeSRJIz4lU1ZGQHkxU25XMzV0VC9bPUoyN357VVYoYmZ1VFZzTE4uXl1sbzs8UlEo''@;'; put 'put ''Y00vZCxgLG1jRm0wOyg1VTRibzYxWDwhfHtUV3hGMEltYnImWW1UV051MFRmb0NjeXJhZyFeMH5udXBiJS8xdlYhekkvX0d4Zy85KUhOUn1seHlUPHtSR2EkQTxzKVt0LyYiIjFubFl1ZCNMSU4waDYrc09vUkdzX0RVbnduIkZ+JXVUVFg7bFJSdl40dz8+ZlVtY248L1BzSyklZlZKVzElWmk/''@;'; put 'put ''c3NXJUBIfF1RSyhdTiZjZG1MSmtWQVNNe08vJW8re2BNQzsqKzY1alNHKixIIWAyb3FBRGJhX05wazlTTkNqSnY4Oj1HeW9ZKnp7en4uOnlhWVRsSFR0QmNJcFlIe2pgWVYvV3p0dWc2aF1FZ0t1Yl4sPFlONHBpYCF1L3NQez1kY2ZZZnJbQ35UNHdnP190Sl9acTUjNDNCR318L35vTC9tQjkl''@;'; put 'put ''KHkhNHlXblJifF1WKl1dMmorRSw5Q2dlUSolbUUqU08oRWEvbHA4JjJvcXBPUz5uPUc3eyxrY3FMPytANHZnL319Q3h6T34jRSEvcSY3MmRBLC5TJCMyZ3dtK0gySW0rdU1dfTtSTmY6QXs7IUhmU0AuP1BEWVBmIUcqaUpmN0tZQF0lVGpFSkd5JnoyYUdoVUB3P0B0TmlTfm5pL0YuPkBnOV9T''@;'; put 'put ''Z3YjJXJsRHdyLiEyaDhfT3ZGPCE9OHtTLjhocWFke2k/VXNTanRGPFoqSU0mNjU5UH5RWCl+ejg/JVc5Y2FTc1pQTjhwZldVc0VvVjxAYDZRQmw1NUBmY2dWKl9nU2IlVlRCaS5iNT9sd1tydCpje207MWc2cEw2PjtjYWNgfDIsdE04dVZOO1YhKFJII3ljTXJlPXhZa30oZ28hfFdnO0BuMi9R''@;'; put 'put ''P3l6cVprIzxdKW49Xjo3N0lGaXhRe2JVQkMvKSYpazl+NnlLYjw9LHYuTGdaWGpLZTBbfFciOV42Yzo2eUcmfUp1Jip6MnwofGQrY2FFP3JjaXRdUSFsSEhyJUNVa0Jfe0Z9M3ImSDFUUml8JEFgIjttcWElRnY1WWZYfEg/Tz4sNihEKVR1Tkk9KWs0UExOLjVHUmp1ZWwmIUtrWkB+Q3ZMeHRO''@;'; put 'put ''e15HMmtDIUUsYFIpRFoscjRIMWFpWlcyb1VDZDJEQjE5LjU4e0NuSmhGak9IO1NPQE49eTxQYWBMbzpvR0FxaTVaQ18+MFooP1IxOVc5TmQ4WkliITRHMCRDJFAhVEt4ZVp8KEdhSi5VM3tbRDpnfTR6TSR7T3o1fHcuXWFMPClRX2ksKioySTg3clpld2dvUHckUGVKbCxEOmhqKzJKY3RVcClH''@;'; put 'put ''d01lSmZsQDNwXjE6NnRMcFhgTipbNlQ0IXk1PVNAMyx5UCxpOSFSSTBAVU8/JDo4NThKI1duU3ZIKk1UVUpwYGBTR11wcSovZz9JWEd8Pm1YUD8zcC9iIU1JeilVe3lvOz5yaTtJVCNqflhjdnxBcCtjUWZDQ3NlX2NUWikwOiNFKzYvfHV7fTd6X1MwfjkoSXhLQzlTRDMvK1IkKXhObEM6L2Q8''@;'; put 'put ''P2QsZTNzc3xxSGE+Mj1vKTg+NF5NL0dCWiUrRiUlWE1kWyNQfUkxLG4hPmoifGJdLmB4SCxWNXljczsqZ00pWC9rODZbMDYzc290TmswVTdvUiY4UGlub3Rpei4+eGE5SV1dcXJXaTFyaT4lfngwbFg1OTlZK2VMUUVpLzZtQE1FUHVNeG85XW9eNm0xfF1ETjZJLnM8diQkdyIuZCZzY010TVl+''@;'; put 'put ''PDpzTUM3UiUpQUxhZV1BQ2ZVZ0l0dSo9JEJFWlZIQFA4JU08TFd1Tj51ZHNRMypYMnxMdT1QN0UjPUJsRSFGcWFqXzZAbyp+U0hrInZZZyM9PjEoWXRuLzI+dTBIOE5yaW4sI2opN2thNFU4KDtBanR7biwpU2ZAWjdNe1dmdVdKcVh0bmM2WksqJGMpVTtPUFg3bks+UVpubSZ6RzRYb2QveHFe''@;'; put 'put ''ZF1OI1AsIjxDLixSPmViKHd6QXQ8al9ufURZKEpIYmNvQmteNWRMXkhFVXc8XTx5ME17cDtMalpkKUdpNEBaRTI9djU4aUFhOklsVVM6WCllaUlKbi5nMGF0Km0wLkRibFh9dTgxaFAjcD9JeSJPPnI1IkAvKT1sa2wwNGEvajtwYmRib0VIQ3RhVkQqPCQjQyosMypSOTUkNyovREBTLkI1Xl1m''@;'; put 'put ''end4PVg2eVAhJGdiQk42U3oiRCNFZ2RAKzhtXzRJS0lkW3NvKiZQcD5YWjJeZzxMcFQ/Z3NRLj9bJGxYQztmfVh2Z0x8aiNtdjo+TjRFYCVtfTVjaitjYCMwdH4hYWtxbCQvcXh4ODdNbnBXTG47S0Y8aFpdfX5BQFEuRkx0JWN8PW9SYHpeWTgwZEd9bnZNOU04P0kuTTVwWDZzMXtmMjNmekwq''@;'; put 'put ''KFJaTUYhNGtYdnR4OD5iTUZYciI6anA8U30hKVpNNFFCTmM4YzFMdXVVW0pNNSp6LnwjemYyd2w8bDNRUW9LISs4KkM1fFpXbEUuMCk4bnpQTks/dzpbX3ksKUg+UChMXkpqb3A7QGovJXRQeGYlO3ZacGA9K1pIQj5gKmQjQz4jPitVZ35TaEx9THk/Ui5RWF59Ji5UZl1KQ1FgQFo6YEQsU21d''@;'; put 'put ''P21KQDMwcylFQDokQjxIZmtKTj8qMU1hXzUiMjJ5NShiOGNmbm98PEhCXXwjLG1xNmwlTHtHKjFyN34qQVIjIWY+UDFnU2tTRiovZkN0fWU0NzZpOjZtPDxVbmszMWF+Y3BnIlYhd0NNYiY2bU53ekRCJD1TSlVuUmw8dWohR2oxZD0rPWU3QG4pK1l5WT4xfGJDez8kbzxsM3pSdXVHampqP3ZJ''@;'; put 'put ''eDF8d3csZytROVlWR3xKWVpyWiVyeVNhY3plLHFZPUR9LDxPLzcuYHRNYiluYzspJlMiaCJzQ2d2OykpUWJTYENjUllBYHUsd3l0cFsoPDd1YDhdOnBFQkw1TSYwKSpFfCtJYFpGUkk/eVdvKno0M0dqYGF+JDtocmUoViFKZlV3KzFSQzAkRVtnM256N2Z1Ni5DQFpNfD1bZkpfU2dTOSVQRVtE''@;'; put 'put ''RChYUytgeHp4YVpuTmtpQkRzenl6dGhjMlo8OixEWkxzcHMuSyt6USZvd00lRXQ6Kj16SztHcClHQ3R7WjlVTipiM2J4fjxRaUdScl1SSyZad1JPPkF0bjthNEFMK0tQeD0pRVdeI2xmSHopRiJ3fkMrMihJakM3dn59WmlZPktpZFEyUnwpUy5IQzl+IkBNYmVnantEcX52enxmJWlLXllnRmBr''@;'; put 'put ''KU1MTXs2ZXskb0k3SmV3TkU+cmtgRDp6Klcic0tbc1dFNi5mRS9KTUhLVWJuNCpGKXVjKl4qXzFydz1OKV1kU25YSG1Ld2NIMF90ezQpNVYiPjk0KXxOM01OYjNBMlVLOz15SjhUMiEiVmVMLitNSmJzbUxJajxJRTEzcT9zflREYkNZM189MENvMkY9blZhfkYodzpLKF4vMTxsNUdWbExJdjRY''@;'; put 'put ''eDUjQ1RTPUpobnU9RFg5fjE8QnFOaHloQ014dmZjdC81NHFAJnZJInA2Yl1NUXtVMC9GJXJMLnhuTXc+VHxOViY8cjpHV2tmRnRmeyttVUhtfmkxKTtsW0J1JmBhe2gkRGckWXQ6MyZMUXJmYSRnQVtCb0t+ZVQ7VGpZL1R2LlhlIVolRnZkLCpKSVZKQ1AmVW0iOVtmcDo3eyghUT8vVDI4MGAu''@;'; put 'put ''alQ5bG9kMXojbXgldTs2fVlqbGkpMXx6OXlrRilqNmExbDU5SUk0bSl4KzZiZiJqUHwyWUolREIzYj9oI0oqLzFEZitDd0IhOCpdfkBaWnxxam5QfVMzPUIiJTZRQytOLkBTTUlHWTc3a1JxQjI/cF93OHMySGxDZnxzMilwLj98MmdGTndYYFVvQz57MDUoMnl9PUJxNjssNDYxWy5nc11hbk9C''@;'; put 'put ''TCgqQWVLeXd1NnE+LD5IX3FzN3slLlkiWTNjVSk+PC57SzlHdmc2S2lvXmlOXng9Rnx0Jjl5d0djWGYlalM3UWdLaVRTLDJMVitwb18vX24weEB0PWMpNz0/VUpUbypWeDlLVk0xX0taXXN5e2k0dyZ+ZGdSa1BRZWpZeTwyLjhwVlEvYlcrLik3UFZSc20qIiEpazV7Sko9K1VVTDpOfVJOSzk3''@;'; put 'put ''N3AkLj9xTmkiOD9SNyRTNzJ4WGRSMiJNL2MjeGJKMz9DLmIhOTdRclpPOFQrQn1dNlFiPmJlL0NjdnBLOHdAND5eVl4haTNsUWlHPTg/MzZEfGs3N2p4dCp3UFJtUVQqSV5MRW1JZW9yNnEqd2h3Ky81ZDgyQUpKIiFpbjZZWz5zdlM/b1FIRCpnLDZzJkA7RCNCKkY8KHNBRnUqXzBUKGRbO01f''@;'; put 'put ''YXd7K1lzd082WjN5ZVJDeDB7RER0NnVZTVR5OTBNS1ZNRDdeI1A7OlJzK28jTDRjbGlFWDkzaV9rWSM1IyZHKUIoRU4yT3xlNzZ+R1JXa29FIn4pNz5bWyFqbmxCPDg5S00xXnk1PV5uI0BGWGhYZ15tLE9kdUNaUGhOVk53Nip7XmFbbXFndGFlVlo2PFRrWVFRTS5SYEFdX1FYIVhHdz1bZjpY''@;'; put 'put ''WWVkPEE0bFsjMnM/O0l6KHM4XVdHJWcuZSI2UUd1Ljlwfj4kWn5sV0VFZ3hbTTs9UHU6VUx5IUBGNTM0TVdyOH1iUGZXcT1QYllufVkoIl9HJG14MVE5Wk51ZndWS0pMUTx8Kj9aXj9YRUNqaTlkOTN6Wz5SWXIycCMrUnw/RjAyKHZBP29bIVl6fXY0LCtIIUlbXT97NENAWV5WQkVCNHwpelgs''@;'; put 'put ''M2BTIU4jXXV2fUBGOSE7M0phMmQ7RmdrdmdQdFM4eE8yTFgjUzJuUC9qZTFXWiYpWXNlWmNmUV1QbWR8aCtnU2lNOEklKGRoWiRZW3l+QXBOYWcsS0xsUWEpZ0VBRGU/TSxTMGU1OSN5X1tacHwzcUk8MSQ4VmZwPDxZbmI/NyM4ZV44eTwuLmxhcWMvaCUyKFc/K3VGYTdPL31qbGpVbzghYVNx''@;'; put 'put ''Rmx4PDBERXJ2UGc2aXVGT1BRak86IiFOTWJtNC9EMHdDQWQqcitLQS58UDd7JDQ8RiE0P2lGPWYoUjJKKHllIyVzVXxXLGphIkJIUTlNTW15OkJlVXo8SX1BbWMsVS5VV1QsSTFEbVNyeiE/UmloRV8qazgyVHRBeXh3e3hpT3wyQkNaOG5LQyw9cDlgeXZUOnkoc2ZILHVnVyJkQmcuKnVxZVlM''@;'; put 'put ''ZU9qTz9WM0JDM2A8JXshT0dGLjJ8TG1BSSEuaGFXb1haZ1EmSWJ9ZGxxeT1EeiYrJH0oQXlyXnM6M180M01GPTsjR0hOL3RTbl5mP3s9fHcoLntgajFKTEtgUX5nKCQhR3J2OTJ0MWo3R21SYENSIUhvczpvJXQuenNkLChuajslQF0/PzBKXik1QzVmW3tCe111MCp2KjdHLiZSVmxPPilZQ2w4''@;'; put 'put ''dHkuYFksemRjYklfYnklSXRhdDxWbk5TM3teUURXfmgvTnMkRyshbTtVPjhSR1FIYmRSW2x9NS5hLlJKSy5aY2wkQj5FfldZWWVKVXUkRH1ac3d6RXZyYVtjWz1zdjgpYGFlPG9SVEsjJExUfTFsWHNmU1AyOGwyYmpiVDtAc3p1XyIhS1BgXk1vfjVQK01ocE42RSJBTDppZ3ltIylkNHU4JWk6''@;'; put 'put ''VztIVm1Oei5aLy9PQUdbK2RJMHYkKCElTXFWMW5VTiNvKCUpOkUwRUoxa2BGI0trQFRjdSs0VTtvSUsxRSVeIiteVXV9U2lValB6PE1MOkpUdmg2dV84PiR0VWppXiZkJVFkRkdAfGkxfnQiNHIuSTNTVikuUilZVHohdG8+dUBLW198OT0rXTJXKTFpcmtkNjA7fChfWUAkaVMhVHFbJkxMan0r''@;'; put 'put ''KStzQ2VTMTFKTkhhKV81X3MjNjVGQlFOPi5edXF0Qj4iKnQ9KU4xM1tHUUpedGFgO0dNbnRhfWRhOSZAXVpjWzhtJVZZLDE8UmR4YFNuWEJUO3w2XUIwPlM/PihWbltiSXQ1fWNaPTkiTHlxcGBRe2A8KHB9TE4uc1ZiTXgqaHQ+OU01Mjk8M3xqbD16M0JCeWpEYCN8ZUZ2N3V7OlZLZGFMX3Bp''@;'; put 'put ''RWJQSnQhbDNTdSN4K1pCUC9qVUYmVmVYKkpjTzt2JUtjQ2heNmQlXVUwbFpdRk1RJFJsUzB5KlVbZTNNYVArMEwvOVVUV35MW1g4RiJBaTxJaUhtdlQjMjxeQHJyI1ldbCw0fTh4MnQ7ND5gZClIVzliV3dCZU9IKip6dEclOlA4eFZ1cj5hSyR6VW8ySyRqJnsmPSk1SCZLSWVlIzlyNFQ/K0lk''@;'; put 'put ''QkhibTU4YEdNYXsoIy5fKmJHKHZ1UyI2QClfW316MWxzVHU7WjptdGg9SkN1LClQWipmKjF9dD9lJih6cXgqWmBMOm1bc3VsVTVAUSxhM1F4YWlaLFJSQnVjJVpufnBPITF0RWBHKVE1QkBaanhoUDhPNSQlQEAscE9OJnlRWTB5e05IfFB0ayEmelVEZEdnZkx0WD9IRlgzT1o+YXpeTiRwWU8/''@;'; put 'put ''VjZHZTdPbG5ldDJ2en4vakwuUS94UkIuTGYpfUdAYzsjLGJKM0FlO258VzNdXkQifjRiaFRaW0V6byFzOkVLOCl9eHUuKV5PQGIpeUtCcX1QeEIlJD40fkN3d1cwWERYMG1oQl00ZnFfOjFxWnIwYmR8QlRMKWVXZkV6Uk5OLHlqbVReXytSeHJRNGkuOlkmYCZLTX1XakY8LmpJPFAsUVd4Uyw0''@;'; put 'put ''Q28rRU80UT47LDAsZ2IpbmN1QEIiTUNzIlsufTZ8PGQrUXlkZ1V9TzBGPDoxbEtOSEZ5XnopJmlDLjNhWDxTJX1naEtkVWZ4WGlIMCxAWC4yKnMkd3MuTSlNOiFoV11ZdWssbjE2TjkvempNJF1GcUFwY01rd2dAZip8UDUlVU18UENeTTRbeSVAdXhjYH0zWE0qPWBkInJPJkVpZ291UGl7UFkx''@;'; put 'put ''TGhqSjVsPWo/OUZwSkNHVzo0Xm99e0BJWGE9dC8hXjN1cWUwXmxWdnB4UzBQaTF+VXRAa1lScHx9ZHR4flIvWG9JOzVtMSRDTUIvKVkzd3ZSRGpKeitxX3dVUi9AeDM0VTZXOG1uNjJLaHMiVjNjNGBnOSJda11yenR5JWRyPWo1OjNUUHx+R05LLlJ5PShiWihAY0ZtbjAmeVhYQG0zIVhwNjJz''@;'; put 'put ''PVJlLHVHR3ldZXRoU2JWe0hqZ0ZQQXNhdl42LDNLUERUOVdpRG5lJkpiYzk0UFRtKFh0K0Fze1kpR0pBai50K3gmPSN2SGYvUExFbGomPSNyKVAoOj5RTyRHeGFzQ1gzJnglK2UlJTg7IWEsNlZzUCppR055eG5RaXF8Yl0xLk5YOn47N1t1ImFgbS46bWcsZ0daTkZxTTk7c0Z7cklWKXErIkY5''@;'; put 'put ''ZTNNUkpqZXwsajVNVTI7YC5TVzo4OEA3ZmxabC43M2JHQjQkZWRRQmZeNFQ0Pj4kSn52SFUoUXEhVC83KVltUUBTel0yLEZjZylOVDZVdkZeVCtPW3NGdkw0dXA6Y05+fFAjTDlVYV1lMmE4UDoyaC4iJjxha0t0SDd0LlgsU0E6bFhuK2Q2ZFBqNy8hPHZIM1V8SnswJUJmVVt9dGhOZyRAdUJ5''@;'; put 'put ''US8oNHYjIVZUO31eez14OypMWV4lODBfU1pEZH5tRTJqelVuXVJeVzElQSNsUUxuQmJkS2sjJChrMlNQYEQ+RDgwb29hP0dJMEh3PkUkPEhfO0NYNGhJZyxMS00+Sm1fUDpOIVhyZkFoMzEoaVNpMFBpPiZSUz97dE88TmVpPktebTFMOGtFdHh3VGYjL2IkYEUxSkFxWHFmN2UleF16SSFiWitP''@;'; put 'put ''VjtXTCZVMVJWTExdK0NLNS96KzA3NkV6d3g+azs/UlVCbmkhflVubXFqO3VxZCMocSlAPWR3XUwmamxbWTFkKyFOcUd0XnNQcnx2SUpvInJZamNueSg0bVkoNFUsZn1VeSw5RSlIfkk6SEAzbTcre1F9a30lVTw5ZEczOlVqK0N9cCpmM1o7fGFnW3B2RlM7NDI6W1dWTT9ofCl2Zng3ej0waTEr''@;'; put 'put ''MCtxL2ZEVGR+VFBicyp9TStiX2goX3xbbkt3bDh7Xm1WZldAZHNiV2ErajFSW1JqSGxXQzIhRSZXalA5cEl5bHprKEY1akNENjEzcVJyUlhHeGxeJm8uSV1sTTNKTTpEJm16Rk54RGVnaENyfHlebCooU3JoL3l1dEVqMS82YUshe0NxKDZ5dl1xMENDOFFITEw2cyVTV1dWZTZnc3UsUWg+Qn1E''@;'; put 'put ''OjApOUglO1hCL0dLSVN3TilgSGJVJjp1I1MyfmI3YlB9b25HK1JFcWw8Ok06cSEhWCsvOmkzTS48NnR6cWgjZlJIQmZNX3l0bG99YzRQVkAjVktPXm9uQ2ZxcTdqbFRoTFUqd1gwbF19Pnx4TSlgWDBNYlMyPn12Z3xNYVEieHspU3JHP0JKUHhidmNJJSheTnRhLGVHZS5hbldJdFRBdnA4OWdK''@;'; put 'put ''amhWOGAraiN3NU9vQXVPYXxROmNFW2lrKiNfI15QZlVudEU2TSlEJGlbdXgjRUguL0AyYGw6QGVdU3FeXnlAbiUoMiwiR3xvZz4zcSFhTHg6PCh7N3VJI21haGZdWDEwRi4pc1NefFREP1hbWz0mcXdePmA2aCg4PkpFdSwsMW9NY3FqfVpVVT0rKTl3OWtnU3gwTCo1Oz9jUWE9YHhGSGJQIm5G''@;'; put 'put ''I2doQkBhN3I4bkxrZFZyMVJlQjZffFkoR1dNV31xOER0bkk8X2JbRVtlJSUsKikkMG5eTSt9NEA6PUIlY1NkOH1kLnpRXiR1Nn1HNEV4aUU6Yk1eJFM+IzkoSSp7OzNlbTYiTy42TkdlaFltb0M8WlJfb3E2K2UlayZ0OWIkZTlzLC9lYFJ7aHlFN1pte1QxYChIRik4dlZdZDd4aTpVfEJKW05O''@;'; put 'put ''biYuOntJJmJ5TihCbmh0UlFNWUo4Q3lHJiFRYkYva1l1PXh+R19wdlp+P0JXPHU7Vk91NVR4R0tkNzFCaVVCVFM9VyV7blZ8RFc0SzUkQD03fFVrP2lBRT5Maz5vcUtpeHBAUllDVEA8JjxOV1t0Y088SlBuQm9JW3BNdlZqI3BbJmJdMERsbFI3SXdCaG04TFBNOX5YRG9GalZONCsve182fDp5''@;'; put 'put ''cmFseiE8ZkJSIU1rYFR3NlcwbkI6fXVeX3JNVCh6P0J7cWl8IkF0RDxiQjlEY156XUtuUU1eS3NJP1dBM3tseGd5T2o2O3k7bll8dFMhPn5oYD5VbyJhc1J0Q0dNYTs/NTRVNHFaRE1qVHxEXTo1dHZEMkBmS2pVcW1Rejc8QilNO3VxM3w7JjMxblN7d2g9VnsrZStQQjZXNF8xUmxSNGt3N1pX''@;'; put 'put ''Nnk6ey5+TT4sUWpNeClQU3VYSikkbm42Il5eSDFgViVjZWZAIX17NUI5XWlkKWsiZlY9SlE+JVRLNyQvY31EZD19Jnl6T2k8VkU6IUwvK2RsVT1HJmVbQyV0bSNTLFtKXWF0Plt0Q1FNeUtfViN3MmNzOUNjXyE0USo8LChGNGBacVFkdUMycTw2UT9dfkohZ2BSImxCRCUiVXFyTylsZUpEMjtR''@;'; put 'put ''cSFdV2ZEMGVaM2RYVGNbaS9jaiVnJkd1ViNlIV1TNExtcFVOVGVyUE5ZcUxMTXpVfSQvNkZSXXtVfVk0MEtIYD1iQSRIQVFjITNtT008K2hdIzc1WC9Udj4vSDxAP2JpT2JQZW49eUdHdUFaOEp5KGFyaEVecStRe1AyampGLEtsTG5sczssd105cGJ3eGR4eXsqa3JjOCx6MiJiZ2RyZSxabEhz''@;'; put 'put ''LzEpVVgzfn5jfTVNRkJbPjFOXyNsZW0zYDAzPzFVZG5Ub01OdzVbWWxdQWEyeVdHeiJBX0JxYDo6d3MkQ3k2bVVqQ0JDXUN8Z208dFFgOUlfMCw/PzxHYF5gPSF+b18pKUQ2TDNJeV8zfEl7IzYlNEF5SlN6X2hjMG1nVTM4OlcidUhFP24qfi4hVDNVMSJGP28hYnNIcTpqUTJ2QXcxNXAlW1ts''@;'; put 'put ''TDZHe11naiNqbXM5eSlKYHNuUChdcC9lTVNkUnR+aURARHEySjlUQHxxfHViVSNZSnNZVzF6KTI7TEppNmNKdWV3KzY1NnA5ZzxVbnhHNTFHQ0M0ST1aQGRdXzVGJUtVY3FTQiQmXikjcnpIK25TPXU6YkYmVzYxPkhtTnRXV1BFOFBeSVdJZHZFOHJZXlMjeyVnSE1bTV1RIylNQmU5WGhVLjEo''@;'; put 'put ''SWd0Sk0za3RebzZ5WzlsUWBtfGtvKzUoSj88L1hjTk9oVTdHVE5gWXZpbj95LHJ+TVhIbU5dc0JxWytbZDhpU31lcl5kKEArLDR1QEA3cEtLYT18MjlldHQqSUw9KlVbN201PDYrWVNnbCglZEx4fmpyT0MuZDhWPHlMeTE1RkAiflZGVi5YMExWKlAqdC8uOlV8ZF9AOEJkK0xLOCNqaUMhK1dw''@;'; put 'put ''cC9MUilEeUUiUXgjPUQ2Ozx+OnpnY1R5V25DdE9iZERTKlo4KCQpNGd1Xi84Y3ZrUE5RbDUsPjolVE02S01WNWdgc0ouP2Q8fEhAVi5beCo0VmlefChNc1luajV4eUtxXn5Fenw2LEVDcUZkKk8vJXdjQW1aQlN+RDN4fHEqRFZvQ1MzKHY4RWUxSm9aTnMva1IxSzc5cGpuIjk+VU9VJW1hQV0p''@;'; put 'put ''TmdEVGlqWUklR31GTTxdWUQ1dDt3diZ3YlVGamF7cmFiYmQ8ImQjSyYkNVFAUHR+bE5kODYyTmlzOjVLNCQ9ajl2fV5Ddy8kVHYiV00iOkdlITokPXhWcWFJMSRXPiJjSnAvOkg/bSM2QUhPOzFSYjl0QmBaWGx4KkFuOD9nb3hYI3tPcCE1aD9hVC9DPV1tXmN+TH0lKXFzIWJ0fmEkOmBSVkZa''@;'; put 'put ''XWx5dHBDPUEvYiE0QipQVlE0IXtCJiJrfnFBYGVpfi44MEZydmYlKG1nNUN7dixfVjpGK145fmMjYXkzVnc3bHo3fDRzfSs6Ky5YcUlTUTNeJFNKNjRtfEp6SXIwNjp0Uy8xQSJVezcpWTssVXgqflAwbmRLUGddRCVPS05TaGw6ajZ7MyE6fGUpTUtfMW9QNSg/XXkvLFFxRzdCaUZxTT43VTtw''@;'; put 'put ''LEdaSH4+O0s4OjxpdSg9SDtAM3g0JXFXPHE+ZjFtLllFWFRrTGVBYE5gYVAhczx4QlNXYXRjblRnYVQ4c2RmQCtFIigweE5+Zm1ATG9IOCY5WEpsRzJ7R0lBInglX29WTFQrLFo3NF5AanlJMShJeDx6QWc4U3AsWX1yaTI8K2hSWyo+dihiRkBkTTguJl4kY25mUkkmUGVESV1TMkZzNCR0OmIi''@;'; put 'put ''TmRwWipEUUpWfiF8VD1xfCwsVkRQYT1OVnojcV9wMzRCNXJTd1QkMVFgdSFmZyhkaSxJX1NBU3BAWldiKXR1bCVuJENFfEt6KGU/ezxkKmNrZUU9d3xEeVFbaFVVfmlXMnt4bFhncG9rYzxKPHUkIktAUUErJHA9PXJ6OEN1aj8vSy9sLFd2NTk+e25HYWZsfnB2L1JEUUdbNTlgSTA8OFoqYC9q''@;'; put 'put ''aHZFNysqOURvTGcmOEBJMF8vbWBzb1ZBQFZlYWMvO2pNLkBebU9dbCRQPmFhZ0V6cEgyaSIjWzNpYC9TQz8xcTV0KmhkQWpBd2UhZGQofUwyeixmJUtUWSMmQ1EjMFcyel0rZiNNbDNvTV1yRGdxJjhUfXRASi9aKEFCe3ZHL3QmNT1Xbl56NSppXlddVWEzdFBkdiRMNTBAOENqNn1lKX1uYzxe''@;'; put 'put ''X3QuM1Fue2JBIiZvMFBOaVYpeWtSTHxiXUouMn0sVE8wZUN3JWRQPCwwVT14YX0xYGApaipidnNCUUM3PVBBVEgxdFdAeF1rVWg7eWp4JFpWOUkpOmh9ZVthXUBUa007aEhSfWMwej5vbXFLZy5XZVkubS49fVZaYy5NTDhZITlbflE5RU1jSU83TCFCbFlDSDViT08ldFErcGE8RUclME5rVHVn''@;'; put 'put ''TGFoemhrZiZSY3ojMTY3fnNXIkM6U0tJYm86UW5McG5NM1JofSNPX30oPVJ9YzNYcSV+IlE6WTRnKyZTVEQ2ZjpaVjE5a29ydTpgNl49OXRWRipFWiE4fix6Y3x3fldtdERrVjddI3o4QlRHU0w3KVErL3VvNWA5JDQlOGc4Uj9BZ1M+M1N0bltSXkpNQlEpLildVmMrSy9sd1RmQ1piN05KT2Yk''@;'; put 'put ''cGhbOUFIbUN2dkQrPltqciRabGZnQ1ttam1mOGFzQyp2Vn5ITFtVR2ZyQmZ+S11NIk1sK155Yz8leFk4Wm9vXXBeQl1uXi5UQXx4P1E4XUt4I2RTRm95NTtKJk4ldHVXYXNxPCNVOzhWcHpHQSUrbWxXTUBXM0RsYX1Ce2s2JjxkVGZ3L24+eWp5ZDJlQEY9WzcqaTNwdlc8YClOSGNNXy41RHFH''@;'; put 'put ''KFk+OUxPejNWKCEoPmlmXWBqR01mezgwPDFNVjN5SWBoOEpKNi9WWz8zMWRSOUEvITlCUWk6Qlt3cFtaaS40ITtbe0R8Lk4zN3dBLixuNzQ4Nkd0OlR9ODR4KTJzTWFSXkxNNWdjYnBbLmx3XipkUWU+X15jUXEwMFVaPT0sVjRmW109KngvKjcxSSZqUEl8SCFBOXApUjY5WUgmJDdDe1ooWExP''@;'; put 'put ''S01eSiludn1KLExOZEouWTdBUlRuI3YwMG5MaFZ2b1tZalJLZltUZ0xqYG02XjlnfSUjMXI4LkkoKzs9czpPdjx7PzMuW2ZxQlVNfTQvRGBwPDVnfH5vajNybVtrMG1aSTdaQWk+TXJCUCpDSV4vQT89UWxWQ0RMQyp3YGs7QCkxT0J0KHA6RFJrPjxBJHtkTEReYDNqfmpDbyxvPTU6U09ERioz''@;'; put 'put ''P3F5UXt8flddQlkkMnh0Xik1P1BaUUhyP1gvMCZyYlJ3YlIlUyFnPkxGKEZ+Q29WVzZhRy5Ea3pJZkxnN2dBRkxxNFRiXkd3X3FjdXBNSChQU3dmYTRnJWI1UHNhI2tuaXIxWTdhW2VibCFZRCM6Sz87QjQ3NT9Ud0p8aEl2LlYsSi8wSkBXVVYvbjwhfEUjZlhHaG02KiV7P0hXcS9SY3pLWGZv''@;'; put 'put ''QFtgWGA2P0A7X0p4bVsxRTdLK0AhQ3ZKY2BwTTtme0BHLiRWOzN+cT8mbnRzWXw6RmtPbkRZbEFZUCxON2ZBcyhCOSI0WnRuNyp3QDcxQzFCJUVkdkZPcFgiNTR6WStLUWJkdkxudWYjRl0mPEs5STMlRVVtJntXRVFwdUIpPD5wO3Q7bmRxbVR6KltKNkR6LjQ1ZHckN0BTPkYlSGZ8d2R0b31E''@;'; put 'put ''Zk1JUG1ZTntVdVolPHlmQlQjVkJFZExsMVJgQl00Sy5BN3JOcGk7fEtkUn1RJDZaa0QwdDlYTWo6am5ifVp1TyglTXRCaWY2dFtANXNiJCpDPEVrInw5MzNKOSJtaSpoI1FAOSR0PnR2b3xgOyNRTE15MTNYY2U/O0paLypkZHlEaXw/Ln1ZSyZlfkwsdn1LfEFMfSRgbTIjJUYjKERMJWwkc2h3''@;'; put 'put ''aF40S2xbODJjN2xVJDglXXRmTT5KIWMsdU5lI2l9UWBve3NlS2ZLIlVbOSxHS0JhbEMkJnBkblFdaEwxQ3QpPy9ecSkrc2V+PVoqbGRXZVN4RCwhZmk2UV9uX0BKInReMjFmJEpiMT4/TWdlRFpfcSRLKXdPX1ghQS5LJW86eFNadz09dChLLGIzViQhT118aEs2RXNLNHQqJFNFRU9pV05zfHIp''@;'; put 'put ''OGwpXn42ZHdHcG97fW8wNXYzQVl3fjtVQ0s/NytMJiJXOHNafHVNaX5SI0R4IVZkJGZDSHxFT0tZRVo4a0g5bzBUZGZfSkUwfDVleC8wIWc6Rl0/a1kkRz9SWl07U3RWXSxidExmQ2k3Vyo4NFhDbT9sckRLRzg3KyR9JDIkQyU6T25daz9yW0M9c3F3NCF+WGpycVk4UG5rRU8hZ0s9P19NOH4p''@;'; put 'put ''bmQ1bW4pa25GJHdOJXNUfWBnbnlSeVJQcmlQKnlaNVdoQGNJVzxPa15DdF8mJU5hWTZadzIpPkx8VlR5KzpUNTwwcmBeLndKIU5EP1NUK29za2JDbktkLFlHXU54O3BIdS8uYlJreERVbTJzKURvQ3B+eWtJK3ovUk5DZCghIUwuVSZaUyRqbHVjUEhaW3hHR0dQPmtyLDlYZSZYNkxbfFNzR1U4''@;'; put 'put ''LzEpLmEhKj0oM1VgTTRjfWkoXjRmdkw3V0khJT10NEwuYTI6VTxzaGt1OG5WKisubUI1ZzchWWppeHcjSSVgKUVVR0JjfT9aOyZXZkgpMUFzaykpaiMrPUBnIzlzNTNaU2oyXndXXVl4UChDLyE6aDBMUUZnTWJKMSNnKTkmeHAhSGs2b0RNRHMqRnllaylmKStbRkR1UTxZMmwrJls4WiJsPSxh''@;'; put 'put ''TE1MMSRgL1V1MU5qdUYvZlpgWSl8RHwsSD91KjlbSCE4Zmoqcik/OjdlVTNSQzZMRixAVHgoMyNrTTpaLFY1VVcxSjZHMUx1ITtRcTF3OTJVT1BuSGxgLi5nUz5DJEldSjFKcXF0TixXeX5CXyRpQHZKWTpES2NPQzU0UUA6UC42Xyltd1U5eiI8KVV4PzkxMFVEMWhWPXBScSo9WXkzJHksQmNG''@;'; put 'put ''JXF3WmJ1cEh8ZW9kImk6JEtFQzZOQkBTcDYxX3tCQzZ5PSpgUFFqVml0KiQxTFtAd3NycmZWa1lzXjRIZjZtZlF0V21wamFAOyhyYi5nRyU8RHgxdVB8dj5gQHJhU1JQLy9FKVtdKjEjbj9ANDZrTXthUERnWTJdQDgkPCZqLFtPTUgoRm9Bd21gWVVQI35oX1c2fX4oSFJoM0dXTih2dVNHaF98''@;'; put 'put ''WlU1U34jZ21mT1F1SUp9JEpxQ0I3I1R6UF5JaWM+eXIiXnF8d313MkspdC9RUHhERyVMdCo/alVKeilVOFlvXUI3b21PUiEvPSNXfm81bSkvengrKltfK0hPJlNQTklTblVkZClMSVIwLHNCNy41bENaYFVxP0VNMX1QNzNXenZQZ3Y/Y2d+Zn5pVEg+aS82TWFHI15qPllFSHA6bkIzJU1RJUY2''@;'; put 'put ''XTBJMStuQiFGbykzWXZjdmIubXooQGw1UkVFa0RQYWNGP1RTYFcrTW4rcyhzY0kkRVdXKTBRdy9FKyZ8fTR1P05xY2tkVDE9YjQ7KklVKDN0LmB9Y3AvVlpTKmJzOkRIUkBuSG8yO2lHRjxibnEoRUteSmUuKyUvRV9lOCRDYmF3Nj4rR3AlK0tEZ3k7JD9GXTRLaUt1cyl5VzlCUGFzIWJ1diNO''@;'; put 'put ''bV1MdHglcDsubkhzeiI+NjJsJCx4bVU3NUZNaG8hMm8hVFchIVhCKi5+Liwleix4RV9yWG9yOzohekhOR01EVkhVYltVKCwoZWQ6M1NCMFU1QUAhW2AjdGxOPVAwTSE3Z35IeVBfQ1QzQ2NZIWY/VkgkVzdiRUtIb3V1c0tLYS5jOk1HYkAqclE2eEtyNG9QPHNWZC4sRkFQWFI+LC5rSVhKQX1W''@;'; put 'put ''e3JYeGYzdVAjd3J0fj02RFVuc2l6Lkt0bWxNUjB7KixCRn4/I2pYQnhSS0MsUik6eTA6ezxvNF1yKHNveWxLIWkuOXh8JDlqcDl1Xj4vRlopM2Aybj5vQ2JhPEohVCJXTUliRiFrMCZbcyxoSmA6N19hZihYPm17UCQ+YFJXZ00zV25IQT5uYClsb3hpdCVDeEZvRnhRQiNXMnxpJEZJUCIufjxP''@;'; put 'put ''ZGtGV2owKTdJJVh1WX4zcmIrL0VfQWksVDhuPyhVUWJHVUxbMXVTNitFalBuJnNJdFZYflkqfVRLIVdDNEpJezQ8MmFKa2ZiTS9gdSJKaChvPERoTDZEI2Ihdk9ra01pSypxanREdUMpM3dYMX1oVkkiMlpfVTc3UihXPCJIdC9dY316X1N0Om5qJC5GfTtJbFhPVTprPX48YTldVlNaaSJXWUFu''@;'; put 'put ''NXd0eX4kQXVTNDNwVlYseCRFITo7UnMqbkIvP0dKYERjaEJkcDx6KHx3fkcpaVAmKitwSWZgOU9IeTRoP3EhRldoKjpeTy9EMnp5RVt5aWVwdGRXPUhvSS93cH1rZSkwISpiJTdlQCleN29iT2lCOGVJX3EsTXVFe20qfVhWOG5odUlnPzM7cCZQeTQvXWo4Q0ZgQUFSM2JSIjR3MGtnfX4wTnBd''@;'; put 'put ''SiE9WUdsdlRkXk89PihbO2UzXVQ+JSNVLyJAW01tOXBBe3VJY0QpanI1Z0RwRXwkenhRYEEsUn5WQ10hXyRkPmlmMl91YllnZ1Z0W1hTIjlPfV9LXnMxVlUxZTowPmB3eyJsX1oiTHNJeE5Rb3s1N2pYMFlZPFY0dSlqbSg8aCUxOHtdW3tYaD5kQ3UzY09DPWBBaHFFclZzYi8zej1+JnQ8VmdU''@;'; put 'put ''QWFhKFt8P1NZIzwhTTYsKmNgQUZ3S2VqTDJ8SHtSRGUmcVIpI0Zjb2Q8OzNXVn5leHh7WGl+PDxVNX1kZU5ucStWJV9+VXJJZlN3ZnZoKkklKlNAKzAoKDM0JS5rVV1MPHw8V2VaKlExOW5AeCZXPX0vWH1KcSFtQTpSU0w7cj54O3l4cyQkRDUwL2RhU15SRSgqK2dgI1RkQ2prOCJvblg/dVlb''@;'; put 'put ''aGUwanBHbUlSOmliQi9rOTBOTnU5a2tHO0Zmc2lqIzw4cmpbP19+L3FrRF8sV0BPKEpzZ05yRH4/KCpYbnpWZUtzMHxzWmtVK0AwNDQqTXlZekhQR1pTbW0kMUdILFEscncxb0w6fT1tNio2KnhMVSx6NF1WUUleVm0vdSJNYyFPUWxdJStGXnpMSE50O05VIVM3MXZDPkF6PWFofSk8cDdBOTVb''@;'; put 'put ''TVlpSmtCVSw8UWF5cjhbLlVwKi9GKSJTZCl3cW9laT1pVmImc1BzWDx6Z1EhZjA6aXNrInVObzxad2RbLClZNi9fLmMrRmBbVXAsOTFCX0slbWt7Ikc7LjhpWWdyL1JYLnU3OVdCS0IlbyhPU28ianZVM1p5aGtacHpfSWx4YDU0aXllIXEsY1gzNUdKdjR3Om1MPjFVaCFlTWJHP1N5OGQpVFFu''@;'; put 'put ''TyVZRGYmYUExJTp+RW5CfnEsRmZlNShiMG50PGFRPFpdYXJDaSNNSTcrd0p+ZUtxVFR5aklqYEUjbGZhKSIhPURKJigiUzJacT5yP0ZSenpBIWlNMWFJeX14Yks+c3c9X1psVV5BMFtbTSxlcUtTSkw0OFVycTE1cCtzWyJjXz4yXyY8PD81PDs7Y3o9QDtCdDEud3JyfHYqZWlBSm5TPV1yVHh1''@;'; put 'put ''JGlGaVBuezh3OiosIltUdWxuR1JLQ007Kz9CVUNyZE9RISZ5VUhwNCVdbmdPT300ez1wanNzMUNjL2Q2OXIqPWk1UEJeSGlrVyV4N0ExbWl9SmxbOD4qaGVYOmtQVjRUe1NUem5NLiwjKl4/JDZBbFYpTihyKWxaME9Pa0dvTm5abE0wczhdJW9KKipTaU80VWJ8aV43NVZKc3heYndyYXxKY2BJ''@;'; put 'put ''dGY1c3xQR3JINDR3QiF5eGl9d31CfXIsPmRlUzdsXXdGUnl3RG9sOSZaJWFXRT9QMiVjMnhDMy9RZy4iJndwLFVlQWVxQUhpZCRxQSlVKGs+MjhZLn0pQTU4LjBgcVUsbF44PHV2dz8wQitYPlRYX2RLYzReKlZ0MnkrYiM7NlE2STl5fjU8YnZCRHNlaTQ4OGh6VyY6QWQpMj17fVtlUWYhWWp8''@;'; put 'put ''TXI2YSVweW5BWjVqRzpTY25XeCZMWEhTRFJ0VSRGP3ZqemBOKThlbGYhajYmYGZ2b3NJRlg9OTtoTHAhb2NWUEUwOElnW29iOl8hQHRYTVYkdzhjay5rbWdab08wXiRDY1V1UnNoT19XWVpbZ0Q7dz9GQyR1SmJmY0Eocj4wQ1FMYig2JWAuN1ZdJVF3VF5yZSVybEsjS2Y0OkE6JlJ8X11eQ1Jt''@;'; put 'put ''aj0qN088IUlrRTduV19Be1F0N3lKO3B9STp8R3Rge2JLTjlbclhDKUJRITEvYiRTPncybDwwNlI5KTxMRWlnTDlVOkR0Ikw3NFBJdT5NOSleYDJsP0EsPEYzL3EuRUxyNUlhTFVhO3Fkdmw1LExiKzNvV0psbGQsVzdtPT9tWDo7fW98ZEZsYTtEZ1VPTyxvZUZNTl9TZH4ldER0PV9uM2sqNFlL''@;'; put 'put ''WzRTLjwuai86fF5WUnMsTXlDfSQ3a3grWntBZC5GM2dSVH45XlM0KGM3MDk/aSZjPVVLMEpPMjlyWEwxYDY2bn1bPGZwJSNQIlRKYFd6KCFUJkZXYS9sIVtdMDksViJlK3NbTl15OUI/MGpQZy9Pb29Lbmc3KEtMV1srRUcpW1BNZ3pSKn19RCp1dS9jSVVSJTZESVUhJXBTOCN9Vm1fPl0yfC5I''@;'; put 'put ''T0RBSUFxMkszIS9NMjJHaU9fU0lwZnJKcGR1clNzKlh0MjxEMEVXTjBTMXFYT3h3Imh5SlFqRHVRZ3hVNktuVXNhY3xyOyE+emxNV1oidFMhcU1waklBQW9SQEA0P0chSyxaPX5CdU1iZFI6PjdCMEhLRyM/MDpvTzh3cDxqYjp6TklVVk9sVDgufSRVMGg+cFlIUykpJUVzRjcsK0tdKk5APSVb''@;'; put 'put ''KDV5cVc8dSNhKEhaM2Zud21AfWI3NE5jSU8sSkhDaFozL1NtXWpLdnRpRCZgfjtFbU9HPUxpV2swaWE6OXt9WTRgXm1rNHsoNnkyRm4lPzV1Lm9UVjJmXlBPc1I4VjpdVU97bih6Xkhpcl9AZkV3QmhIUTo3R1hILFlpVD1IREJ3fjZYQCpKKjk9KnNsTTxNOkJ2MCRJfHhBP3t9bEE8diwpQTMi''@;'; put 'put ''L1FtMCMjfnJgRy9MM1pjfWNlN25yQVQpY2FmMDdMIlduanNPaEYkKkc+W10kLjQ/WVkjM1kmMTdXfEUuM00/OFc5Jl1OZjw0P3BdUnl5NixKTHtxJGBobE9FTlE2YzwrUmdldjZJRUolJTolPHFOeCRbVUlxQ1EyQGwlTz5NViJ7cVBKcHRJW2JgIWguRX5iNEVGNzIoamksVFIzJk5KOWJnajNC''@;'; put 'put ''OS5BRUhALk49anVIY2xeRCxTbkpSRkZOdDZydjttd1QjLEpzQEc9VDtDM2V6T2l8fX5AZi9YYCRaP3J8Rzx9YmlvVVZ5UE1IdHZqcjVdcklLeiQoXVY6P18+WU4xVUhJPkIhRWxkIyxTTEJoTV1yX2N2YCxBTSJDQStyLGQlPE5TWEM6SjRLdE83R0xdeiRgSSFlWHlVRSY/JGZWKFMieCNzYDZW''@;'; put 'put ''dG02JG5tVVciZ319azVSUit6dyxUb1BeWDpCOn46dmwqN0ZtVy8hSUNuSjl+S3I9byx8cyZKdUZiQnw4IV0/Y2dLdFhAYXFwSUgoRUxlckd+L31dPmpzIlt7S04iRjVqTUZ3cSVwYSs8VXRvPzJdPF87KmdIWlVYN09JaiphTW9IQTMxcCZkPnk4OjR+cnFafkxyQT5rSlVCYSF+Wl5JUjpUNm0x''@;'; put 'put ''JXk4SE04eTtSVlJ0fGooS1hpLnphJGY4eXZGOiU9Nz97cW9ubzhFRCptbGBGNSx8TlBPKWJzZlM4OkEqVkRwLExZRGJvI01uKlReX1N8OWlzPjEiYStbSnJ2P29vT201KkZZLkwsfXFGPHpJJFR4RXljY0hWc2ptX3N7WmpnKTIqM2xvNDVsKkVzYiNnYjclWX5xXigmJDhqREdIZHYrUVB8ZHow''@;'; put 'put ''UCFyKUJ4QipAQmxKamR6dzEoeHZYdjVjVXcuZUU+dG1DblA2ZyEvXjZ+OnNbVm0qZUkkVnFjNjh4LEchN3dmKyE8ZmN5YGl0TWQ6L2F9RHFrPiZeWzYrZEFhXy8jfERdIVpGSH1RMiokNnNiV2REMkBsejpxKGx8STlrZDY1ODF6R2BQejowNXhwMFhlU11iRng0QkZJKFphcX5hLyRaWVRaS0Vv''@;'; put 'put ''Wig3fmtOSFBoKXp+L3pYc3BybFtHdVMwP0NsXiRWIStmcjdrLyZpaGxsRUBBKkU1QWAyUzlMKTNuaXhBW0lMZSpSeiVAJkpqPDZmb3wpXnBVdXA/U01xNFcoTj09eyxfOjdTUEtRRTh7bjRwT30+NEUveWt3N21tWmRPUCJ4WER4WFhMKmtZY2cjKEdPMilNeWMvNCRWQS9uJHgzSGEyPTl0YGE9''@;'; put 'put ''PCZJODJoVSE+bCt9K0QhTzI5Yy82MTheQ05RaXB5TmRbKE8mcF84fGs/ez9TQGRgJE1HXnF9OFUhUCE3REtxX3VJOm48Pi9TKU1ZUkFBRVY9Zk9+cnFoYT4sT1hCQWNXXWJSakU/aWNAdEJ3Qk9xKy5yKWF2MV9QSCpnUXMlKSp5N3JDcHp5czFDSzliUipdTjw2elp4ZSx2WjNjZChCZWZIPSFs''@;'; put 'put ''VDw0QGxUVmFXUW1uJDhLdyY0ZEN+ekVjc2dzJEEwditNbC9we2V2VGJ6Uz05KihFV1diSzx+SSVqfFNiO25nWihRMWhUX3ZzY0Vea2pKOmMiSz5AaE5RemUjUEk2b1VuWGI/Z3tobXY+eXJye3I7TlBoI0JPIjRyIi8ub0VLWV07RyM6JCxzT3pyMUt6MzRXZXAxSS5aJjY9VkEhUExTdzRNQC57''@;'; put 'put ''S1c7bit7TE5QMH09a305MEM/ZUBhQ1dZV3tAKXUhQCFqbkBoTlBdTkg6RHA8QFYlZz1OM159WV5hbFYyeytXN0gxa3Z1Z3B9dl57dD9WbzQiXnlTQjpbbjVqLm0jSDFjNnheflhQc019R2RfVCpVQkg7P0NfbnB1XUc0Uyk8a0Zkb25ab154ciEvTDFDV3QzYig6VnddX3M5V11hJlVVWzR2SHRY''@;'; put 'put ''VDJtPG90OCJ2KVd+dDZHfjFrdWVyUUc6WWshV29aTUI/dHlxPFsoY1Qwd18yOm0pK1U9V1AucHdYYilQcnlPaW4wL3FIby4yaXF2KCNTPzxmZSFCWlBAND9LVl00JDI+UnpbZyxvN1ByQHMmYiMkJmZYNmQ+QFtUWk5HUV5aa1RdbTgwLz5HS2JoQS5PSkk0QjY/KlJpa1RpT0k1S0hPMHlJLyE4''@;'; put 'put ''SjJsZCMqTypJKlFNZWZwR3RtO0JecFRbLGt8LyRTdGpsJGwiQTtJQDxpT15hNHglelVUKChxU0J0cnguZT5TZTRNZiQ8bCRvRi9bNz1kbmQ4UWZydGddbWV0aVJJLC5IQkB6UTwmaVd9X2llKiglOUJBNiooNnZfQCVYJlckMEg6UkBWNkJEeiUoei9pRjR6P1c3aVU5UUlLZVtTREJ8LGVTVCQr''@;'; put 'put ''U3lTP0RUa3xAWU0yVmpeNS9eMEZLMnkpKCRwY0E+ZjUlLit6L1RpITU7WFkuWjJ7az5qb05hZDBoaiImQENLKT5FUXNzREt6c0tdRDxvfEBXaWZXfjJ0SS5hTixNa0ROel48MyxIIXtCe3BAZE8oTkYmNnV8ZSI6PGxmXkVbUihMSTB+NHs3Nj9yWkhzQTImNHw7UiJqSHhTKmopZyhuYU8zO2pb''@;'; put 'put ''PE1nW0VYVkFiRksufF1yMFU+MEV5L3JISy58fVdtN3U1VChBeUMubkcpUlZuNk5dTit8UGc3cG86UWtXb3JeRn1lQlE8WyEqeHxTQiZMNFolc2MqOF1VSlYpXy4hL188Rj5WcXA+UjRiMF9LP34rODFFKWplRndHITlAfntCbiMwYDtgXkFNNm1RKmc5ay5GWEQ0SnYsZUI+Y3AucDtLOXo7TVIo''@;'; put 'put ''bEN7ciY1bFdpe3tbJlpDYyswa2MpJmRSQW5BL0c6LzRJNFAjKzJjMnVMKXM2RVlfKFVLeEkwekJVNHo9WEhDOmIwTVNZYnU+OkpoXkFsY1dkVWY+bFlCUk06YylQeiJnNjE0UikzfVcrbnM7KjNeRU1WZHQ5UHFyRE1lITVmTkMqOG8yLE4vNiImfm04ZVh+d2pefDZnVmQ5KSxiei9IL0JaK0Zy''@;'; put 'put ''ZjMyU1R4bX1sPlg9e1tIVW1FV2p3MTMwInQsZjJSLGd7cFlRUUlKRmIzQCsvaFk9V25NUkVEQFR7Z0t3Q1Avc0BhMnUjVzZ+Xmdzei9DWmFOSms9TlQ8JDNMKF97Szh6eHAzP102UDtZYXclZmBmTE56RyVVZ1Fdc212ZHBNbCk4VnlKU0NMfT1LbHFmX0cifU4qbzxlPD1hcnglb2s0Pn59ISgw''@;'; put 'put ''OmwlN0YySSV6XXk5fk8jSi9II2luOCFheFs6NCMoOiwleE5oQDBvMUNwMUw/flMyZldVYWNPX29CMiU3KUo3KV58SEg0KD11R2wzJnVsKS85OzpJVjxlUUo0Kl8rfXswd0IhclFMWTMmWX5ISiZCRVgpcTZkUUosOlNhJWdJM2tUTS8zcEBUXnZgcSpFLiVqPyFKYmhSbD1qPkJ8YHJkXkFxMy57''@;'; put 'put ''YkFWazFGL3J7R1FiMnVMIldeXWNDdlF3a25QaWNOLFNiOFZ+emlkO30wSmFISTApLEwpUDNUTTB7Q1tfRlNPWEl9KTRNSnNdS3B1TSFifXRATkQuIz1rW1VMc1lBezNmfDJgP0kxcmErWFB5WTttaUVSfmRpXXl+TmA9XkdqOVkhb2Znclp3W0N8U3pSMC5EeSY5ZEd9UzcvOElnfUlQXlc5czcz''@;'; put 'put ''Y0BkNjFATiV7RWcqSkd7LDZLVj1ramEzcERyX3MrbkVNRmFgfHdDbCFRYWozTzI+P15TX0BfOCY+TEJ8Pl8iYUM0QnMqenRqTno5SUJDMElkTHJMMldnSGh1YFhzZlEhMTg/YkYvNzpHaSRabCssW0gsQ0hCY3V0K0AmUmt2Pm99USFnWWB5LGQ2e2RCeSVqRklEJUpkYVJuaVgjTFs+PF13MTpy''@;'; put 'put ''PkwxWUY+N11QM0kxPlFAKTdpT35rRCYiTzAsLEBlWTE1QVo8IjM+fllONHJVOzVtNjYsJW1KYDpkN0pUPG5Pcyx0K1NjYjF9RnsmJn5rSzgybk8wLHQrU2M2SXtMVTxLckRqXW84d19WeD9DTX40QVoxP3N5TVA4SSw0TyFDdUcrVjApQC9pPmBhSVB4YitwPSVgK1VBWmI2NWoxPGd1PjUvbmgo''@;'; put 'put ''K345dklyVD1TZkclbmp9WExZPGx+K09mIiZ1VGZXd2A3UWRtTi5pbFRtPUlNYDNYUEddPURpYDFZMjBWM0MuVmVnVHl5PitMRkwwZzJiUisreVolOjVKJjpMSmJjeTIyaWBnRS9AKz8uZWBIdjRiUzUzWV9iZ3IlO19TZSgpIzFMMV5VWUxDb21LUkhmZ0NlUkhYd0UrIW9HRVlfPCVefHZkI1t9''@;'; put 'put ''fj5pVmlza1ElUmBUYW5Ld2kpJCEyRzNrJDFTMzIkXUIybnNHNEp+KUBaMFpfd3FXbmNxL1R7dmU4ZEJ+cmA4IiZTRiJAdSQ3ZG9VV2R+dERDZUlVSmBIY1EqcE1zdUkoSVNhOD07eixzTXltdGpeZF92M3dDZypLISYjcDkjQiJzbThRaS56cmdvbno/Tz1ufXB2PzhwW1k+VlFpOEVHVDl0UEdR''@;'; put 'put ''aTglbldhfTY/VSQ6ZHIvamNCdGZ+MH5tVGZZVXhJT0dkTXtXN0oxWnFJeD0xMDxCLk1KNyhqWF5aVUJJaEhBTVQ9Vk5KXlZQPnJLVCozTml2Pn14clY7JnxOSU9SLilOfkcqYGArVC9xWE9lLDM7UGUvZ21PN3kqTUI6ZCV1dztJbnx+Tmw9XXgjcDk5REZ8OHVdMTEzPVAxQWtVJVFsYGt8Yjlg''@;'; put 'put ''Jnw6eXBlMUw4Sl8pS0cxPEsjZFE9dnUyJXQsOCokbFd+LkdDbWI2Yjppb1VYd0lnUEVEbWVSQThnRGsofnJHKVJCYDQpTz07Uk4jNnlfKnlwMTJmU00oVFROMFNQPzpkNkZHbWh6YjtiaCN2NUc+Z1J0bTZXTk9FUFpPdmJ9eDpZKTYjRzFzZDx2RV9dO2xLMyImP309TnQzLE53KkBIPG8zQjV3''@;'; put 'put ''OnBxRWBEU2lgaTJbdWY7aFV3MmQrJD5QfGpWanBMaHhbMHZadFYpZF5sT0t1QyZ+c0EjUHdATzslJVRCZ01dY0JpPTg4dEVZW0lRR1JVM1d2UXprbVpdOkdJM1dAO2EzQi4qUDp+WW1uNEM6Z3V0P19VR04uKmtqSnFFZ0V6aXsoSnFeX0lyRDR4bjssUGEoPVVyO2UrZlRYMl9vMCt8SV9JYyQ3''@;'; put 'put ''bTYzaXA8NmV0bn1kNUZwbTcyT3ZYdk9VKHdWPF48dmpPS0YhIkRuMVVqJHxRJHRoKC8yWCUhTndpfm1NaURefHBOM3peejo3dGVMcUtDXSlQbi5Ba2M0XlNAMD41JkIzWGMlKUt7PkRmaS5sSmFHLktXKSh3fHIiNnxOTCRzRntseSwsKlYqNE47RSprTWojYVt5SUJfOG1MRjlHT1gjeCslbWRH''@;'; put 'put ''LklnSEVRK3AvL1IuP1ImQ3lIInVFLks0LHVifFMwaTpHQ3ExMl5Efj8hd29DMDJQVHdFTlBRI2BSU3A8eGJzLEozVDJlI0lPXlkjWlNHVU0pUmgoSVtKJVEuZX5vayxXTldVZDFiVktdNHp7Y15hPllAKyp5fFU9fUhxLjJtfWRCPnxTSUdFSFs8M218aUc+ejVPTSlSVWxbLEU6ekxUYjxsUFVF''@;'; put 'put ''JFRQcDJKNntaW0h2aXAkRS4xTVY+IyMmTTslQj4vZVE2eFlxOShyQWJTbT0+UGtTT2AuSV5reyU6c1dSPVo6fD0hbUlZc30/ZX41KF9PKmZ3WTJvcFJZfHpue1ptUj45OWdudkYiJnIkendvfTImRlkkUUcmQXBNNlJiQms3MV1acVNCXVgzIVAjUCk0Ljp1JXdAOiRnQEpdbUtzOSVlPW0+WTBR''@;'; put 'put ''SWNmJiZWfDhCIyJ3N3w9Xjl+Y3JNLiVAaTx2eUZvR3heK1FNRm9UNkV7Wlk3ck1+KVJuOEErb3hwK1UoSXNnbzU8RmY8Z3pyNjssYnhQOlBNVi9MKVJZaTMyYHk/SWxqW31gUDFvKUo5PCo5ImBTT18vYyRPPSF6bTE/eXxJWlVoZVhrU0VZX3gyaE55b1QyW3EzZU84aWUvUCh7bTsuPXJzYGsh''@;'; put 'put ''XjJYSjB8Uzp6RjY5JEooN148am4uTT5EVG1xenQiIkRodHg5Jn1hMFRsfTYlUTRDTX0xSTF5SkQyYUBBS1hHcUEzbTFYLFdiYlJ+VSp2ez8/QEwrMUVLMTE8YnhvKFghIl41STBgTU1FMT1haXVjVC8pciRnaEhlOXo6dnxXKkVJYUskeVJeKF1yOV9KaHMiTjNxaEdoXzZAQ0Q4ezM8NUJjelc4''@;'; put 'put ''ITklbDYhe0p0YWRSRkN1MDJubV9wOjM9RF5xfjlNcndzQCxoWkVxRG5+QDZSKHJVK04+cjZUWThwMzNUM2JbJTsuWW9jOy9qW1l9Nl1iTi4vVV4hWSlWLz02TCsqUzV9JHBCaD87U05QLHk7P0Zwbmw7OGMlKkFQM3dyOCM+eWxCeSx+emA/KWJAU080P3FmL1cxLmpTTGtbV1lBYXBOQ0FiN0pU''@;'; put 'put ''S3U1PTlhfl03OzNZfnw9ODxLckVNfFtPO2cuWXtyR2UyQH5dPHJiOiFJcl9sWC4vI0FaNioqeylnXi9GV2U5L2JjIVBaMkhqRnZ+SSNIaWEjMWUjdXNOIkM2ey5mIlcjPlhsJEIxRlckfnQsZjR9UG5LZGZSbjImM2g4VmZoOF1rTUcoXXQ8OUk7SCVDMV1wTntEU21hWitXOjg2ZEJLdChlalBM''@;'; put 'put ''a3Z1WHJ4ZHI0MmwvLn54QjlNcHg/OkkxVChEUTRacE5oXTgleFhzOXxAWV1fKlBkJCFCY0BSQHNlLGc9dXUwfUM7Z0ckK2xEKzdSezlwVV56PHtbYzA9RzlmT059azpkQFklS3RLI2RgbFlhKWN9Ymh+WXtbJGRRJHksISZJITBrVy5PZFFMZFMqSjdKJj8+MXkpYz1zI11CXXglaGhCcH5TMHxQ''@;'; put 'put ''OFdiUV5tZGMvXTshZmtNeSQjdnFFRiRPSEFHJmxda093WU9DTSVxWWVCSEBoVTBMYEI+XWFNaWp7PEspNWRXcyZkJVY4U09geTFobktufXVqIyxuKyN+alpSaDpgQ1YvZGtpYXZGSEtaT3ZQP1MkKyZEWjE8TGF+VmFESTJ8a3xgb2hhW1BhYzh8ej5+ZlFNeE8hbn12TF57MyltZD9zTi5idUs0''@;'; put 'put ''WCtYTEwoQkhpaEshTzVWRHRZYjIhSTA5WVVaK18wXUJ5XnY9VSgyYGlNPmVfdTlAQllBU3t8V1g+PV81cEtoP1NqfGpvYV1DNExvMFhkIS8mIT5ZV2pKU14/dkUobDBXNj55SF5ienNILy89aCM1OjYka15HW0JVLm1FVlMwL1soNm8/OE9wfT0pfT93ezF1fDpHcVE8QDYqY3xrTW1CUT5EZGFV''@;'; put 'put ''cEM5RWtATm1fMDtEc1A6WykjdCN0diRwRk4uPGZDemcxSTlYbD0+PGwxXlZvfmhPIzImUnBKWyRCejJmcisqfllJeERMZ31kUWlzRyR8ImF9Y25+R048VXxMNGlFPWUoQyUkQUVrVEJIQzt2bzh+JF5aJV55Jklpaik/R0RUdDh+dnx7I1ptbmQrQWN+K3Q4fU5XMEo6RiF+fU5tX3w8ZlNQLzUj''@;'; put 'put ''YTtZI0ZHN11uPkFtalBIc3V1RXhjdyNnKU9qSSN7Mj9fcFA5OzE2X1F+MFZBI3lpMn14PEBXZn5jVm88PWUyUjRfdlNLfEl4U1JDUygmTTIsV3s5L302a2NjLHNWM1N8ZnQuV0FuKClOO2pPe2E5WUdGT3ZPKkFrJmN3NUhlIiYlZXhpaEVIRUttWTN+YmUyMkg5W1NRUmRtXixyZj0rWVFVR21v''@;'; put 'put ''a0ZdWzVGZ3hvUiRSWT09Xy5bNXVzQns9eCNAMDJjYWBndlVdXnU6YVc1PDU+S2Zgckt+aHBPWl0kWiVlJkc2UVBAIWtjKkJZWn5HL01AMipJb1ZDYEIuYHp4IVVGeEdyWmkvZDQuNGxnbHk6MXBXfHJ+V21lMFU3T1MvZWclUGk7RlMqcTlERVdzYH4wKUZ2JUVFWXRNWERBTCsyaVl8THMlMjg9''@;'; put 'put ''ODYyZVM5aWd3UD5OLjBoUSx3OWpIdHY1Oj9xekBSZzZ2OHFLVTopWl16WHx4Qlg0JT4zaFg9VEJqUVFkRDtTV3U5ZFU+czRzKG4wZXpvT1IpXWElODlUW3AoWm0scHB6R3FxcUkmdnJ0d1hqaV99R0k8JG54UTwmK2xEXl01KGgjJWMjTTUoSCMufm1II0xFZiRdWzJyYHlXV29gTHd2fXZzbn01''@;'; put 'put ''SCJafm1VPnBhWlhlKH1bcXVYcyROa2Fufk9TPmYpZ2lvRDQjXU1uSGY/YWFqd2s0S1V8OTs3YjVBbig5cnk6VkI1bHA7M28uLy44S3ZBclN4fncpa2tlQTFycyohL1VaRUl+XnA1cntQZFEoJTwseyxneD9TV2tnYkMhWDt2PSlqLi9fe2s+eXIoP3t3a2FMfi5CRnd6ZGMkRURdaSVuc2hXNnVW''@;'; put 'put ''NC54I1U0NTI0T0NiQnRwcFRVNFJ2b3BzQ2hke3w4V09RfitAUjo6c3F8VyxzVDA+QEtbPmlbUm8jJlI+Zm89OmRwZXNSXzI/OTc5Yj05PlJUcXQyXi4ufmA7MkteP3daW2lgSWJqVmhEOnJVX1NGSz4ha3B1ZlthTmhqak1SNGMhJkYvVXh3TkguaCZEdVBBX0QpX0VONUNKMCxzL3pBKDpdR2wp''@;'; put 'put ''IXYyJkRBV2VxNEBUOHdUc0p1OmMue2pgJk1VJCRpMFF0KnIoY09BbTEoOmt+PjZOKH5nQTlLcnM5Ti4uZmJ8QThoN3pdNjM7OUp6biZuWT1BLF1bN203MGVDU1JIcjhoYyJKdC5EaDs0L0ZAKDdsQXNVJSpKdj5tRiMhNiF8fFN9aDNrZk4wVzVxJWR4X2BOZnpMa1BpZGxobnx4JU5dR3dHZi5w''@;'; put 'put ''eFsiSTxjREdyJDl9TlRrcipfKl1oOmk+eFhJX3tvMjhxbD55PmM7NSxtLDI1LktsW25NV2gyS15oVlVmNmNzYGU5TXJTMmRpdmVMTXYvPDJIMH1Pd09ZZHwwLm5pN2lPVytQZGlZbl1+aCMzJVMkOkZmRCQwXnhQTVNIa2Z4I3wkSTNHTFdAfmU6Xl42Nj97JilLLlM+eF9MI3pFTmpzSyJeaHdV''@;'; put 'put ''LCwhc3tzKllVQVJBKVAqVUJZWj4wbDxaey5td0pPXjlhYlR7biQ4YTxCOT5+RnBjS01uVilzVF1XbFNBeHh2UEdpNGdHRWFLSChCJCkuZioyciV1YjV7XVAvVy9NMTRzRzJEeWJgY0RWLHBOLmpWLk5sTWlibDxPI0lkKSVwUG1DOU9gZkduUFFmUDVWY0V8P0pXUVkiM2FRQSpqPXk3LnU0O0tQ''@;'; put 'put ''PHhHKiZDYj41On5UaDtwNiwqLCFkVE9VSmFbfEh4VElQSmZkYCIhZX5kUTcleloocURZb3JXQlpiI31PW1BoSigwZlI7eGtndEdhdUxnJGJpT3hobjBRKmwpKGhBYmlPeGg5cSExLjpOUFJpVE5+KDRjc3dXZn5LT1FYZ0NMWGdOe1swbywlaj5SRDQhXn4zMEJfQiVGcD8vfTw+ZiZNLE9vKDFT''@;'; put 'put ''ZTsvfi9QVGAsR14uTWUkdUY+Iy53XmB0U0RtT09bd2BbOGx6filzfjdhNy4mRW1bL2x7KktTKFN6W2xRcmxNLGVfJikqKDtgY3paJjo/OyV5PHh+fVRzUiFMWDpaQDk8ZjJYak9+N2osNjd3bzBfUnVENjlzJjYmKzI4OHV5MSw3cmxacSFDVU8oRzd8RXssYzFYZUBSSnVCSG90X04lTn4hJSwj''@;'; put 'put ''cjl+NV1YND9tSHR+c31lYF5+aHhKOm54Pm14dTB4RytTPDRlYSI0LFQpY2ozWzhGYXIuUSo8XV9LUXhCI3hlOzA/KGNZRUtqIyRGczZ7TnMjOlhQLEI8ZklkQHY/Z3NIcCVIJHNBOkNBWHVXViNHQU9BPGk9bnI7bC8oX1luPm48PFo9eztsL3V8MnI4N21wSWYwfCU5SUwmZVMpUnYxdml8KF9m''@;'; put 'put ''aVplcD1fKko8X1QoSWNLOSElUVQ5OXZ6QDhKMzZyYz8pYWB3Rn5VcVJqVz05VmdEN19tQlFAITIka0x8VzRPMlJ6KngzSVUqL3p7NXIzXTpgSSwwcixlOyYjen5wMS8vVXg9W296YHI2RjV7R3lmKns4XlNJeWYwJGl1KEx1W3hFSjp3K1NleH1ZKjtlUzBQdUM/YXNQMUQxI2EpJlZjNmhYfldr''@;'; put 'put ''Ql5CU15ycHVkPEorRW4salZLejZqe28jdmFEQGJRVXlzaDl5fGZ9bmtAcjs9ZFJUflhWfk1TT2xoMjxVJDtZQltMbDRSUVBIIl1pOGZEKS9ibXt1cjo6a2hkXlY1WXteRzR0TD5tITdJK1V4SV53aiplMUQpXTBENVQve3AofU4rLG82fmdmYGRvVy5VbiY+TW96MCwmK2pVYGh0PiR1PzFzWnVm''@;'; put 'put ''bytvfTNdM0E5Jjslc2w3Ql84e2JdVnBIKmxOVygudk1uMEZUSUVGenIkZnYkY2lFSzd8UHMlMkY5U2s1ZkFzWWtWNX5AeTZJLElbRitGLisqMSNAazMxeWVTLGk6P1Q7SnE7Lz8uP3t0OnxNbkg0On56aEJaT2pwOEcmSmtOUU4oQkNBfDAlYmc6PERbNmhDO34mRCsvOFAzdn1mPTteMnkpdiZo''@;'; put 'put ''RWJJeHguSnsxOlpvPixIOUhmaDJDXm9+LFIsSmU7a35hbUxTRV8lIVlhPE1nMip+OXBoWVR2Rm9sXk5AQVo2fFgueUJaX0h4Mk45X1V0ZXFTbnovIXJpYkhbYEdVOk1EJHFRQ112VV9+JlRLcVdSQ2FVU3MvU2BuQTU5dVJyJVI8e3k0aWdlT3k6KGBQJjZNVj9BOmMjVlM8aiNYYi9SY1U5SDo0''@;'; put 'put ''JSZbcTs5VVkqZT0pKTs8UlJJdCk6bUBzc0JLUm12YDY1NV5ZRjdaIn1zIWs9XnNCX11IZXpZVEtVTTBuTTVNdGQ9QnMiRn05T1s9YVhITiMiZER4NkBVZnohQj1NS2FmT3pAb3h8YmJSMyowbzZZOGt+bT8hNlBnW2hXaVZ2T1YhQnk8RlpYPzAwcm8hM0ZwYiNPQlNZXjxqfTFqV1MqcjguSzJI''@;'; put 'put ''bj5QMCxYXXN8TG00UXE9c01KbmdfYiVyQX1SazYpamloKUdiSzxLPDs8UW5aK31tcG5weysvR358Zk4ySzx6MlJXejxPdGF7SkxmLzM4RjNwYGt7PEBJZFZ8VSg5LEVodF0sYzdWOWNfN0QwPkZbaDkoNitieUNkUVN+ZFVwLnskLDdfU3RvXWMuV2taKz17V2lxKn5JUC5AdGZUSVtBKTxARn1R''@;'; put 'put ''RD1APj9xQmxhak8zXlBWU25meCRJPHlpRmJJZng4eHdUO21pP09wIj5qKUQ3ODd8OTFRci9kIzVCX11CIjU7PmBxSWExTC4lQGxpWl1Re1tKQVdEaFpoOlNkLyxjJXsvZ0ZCeio6KW1JNixLNG47YEM6SCpTPF4oRmZjRyhVfjtqaWJZPmVsTl9ucGtiYG45KVQlOWhsOiZAcjFkN2VsUFJAMC5h''@;'; put 'put ''Tl0relY6WHxreGBMYEQsSUg9YHc8Zjp8JVR+P2l2NzU3T2RyKDsuMmg1RjpIMT5OW0pjZ10sbVVUT01PbD09WV51eFImKFFjXVhEUkRaWnUqLzMjMElsXlBzSi9ZVSoxRHl7cklbNCVTaHIvNSwsMThyQH1efHlANSxddTBZOEhhSU8xI3ZNIVIjODwsSVc/dm4iWl1+VzptWnhVQiVDfjhAVl1U''@;'; put 'put ''emExQktOXTNuWVVIMkJyMip8SjBicWtta0dOJWhobl4uNUQ+Kz48MDVtYXBdKGMjaHAzI2VqJV0kflRCa2c2PnI+ayUhKHVKW11KYGo8MDxqZDIqW019bzpROkY3WTBZeiZUQ1VOM28seWskTzRwTy5uNi8hVH5jJSRSTjNyeyZQJClsVDhgdzxjW0hRVS9EWiwpd3JOWzxRT1hJe0hNKTdhWi5q''@;'; put 'put ''c101RC53OWxWJDR2ZU5CUE1vZ2l4X3g2fntZPlVONzRNeCRReCtncCklbWg/Q0A7fFNlZXxSNTJgZnIzUiglPDh8N3YpQCMma35MQC9wUXUoT1Y0cHwiPT9nQ19zW21JRTs0VEhye3drO2ljalEhP2R+QEtxLDQieyY6JU15WVJ0ZEphfEVkfDpmODg4dTkwRHkke0dvYlhtZXA/JTtzWlIxU3A6''@;'; put 'put ''IT0yLysodlZlWlszais3dGB5QlFTVXF6PD5FeV5rSSp5RlVQV0xqKEFDSFRZanJMKmRtSk9jTzh3KUY0MlZ6YEpgTHF7ZXBfIXNGbk1raC5zMWt5e09eRikpazRRLEk4Y15kQ3JRNFtYN2NxSU1KOTJMPDQuekg5LFI+UFA4SS9YdlJIYXpYPmglaF5SZjd9OlVadWttMW9PMU9JR3grJXczSWlP''@;'; put 'put ''I2RyKE1ATnV9PS4vQkVUP2g2Zl5+PTtzfjp1TjpVYkpnYS5UJWtgWjwpOSl9bm4vVytRNGNKU1o3VCFzdGI6TEVKfkxadzhSZVN5T0lvOW5AVCFrUVklIUV5WG8xOVBRXm1QZFtNOXIsMSttMzBpRks7dj5aZWhmVndJTE1dPD81KVM4IzhMKjsjN1NSfTEqX0MyUSNzbFAmYSpCa2lCTTxFdXRM''@;'; put 'put ''Zkx7bz9zQmNGRCRbbypeQ3A2KzUlUHA6IWksQHNSLkp+czZEa1VsJXFJM0ZAVkpPKG5eU3BzVWYqQi5nOVcxP315PldfaGBbVF1fe0xrITAhYV9EX1JoSTpxOzRMPyFMRGJXYSVyU0dbfWdKWnBwWjk2K3wubX5jZCgqVkpXJC5NV0p9NXU6PTVqYUZqVEBxamtXdXpdK1Y4b3AmQENLcT1YQjUm''@;'; put 'put ''bWJ5KzkpbHpAeko4QXl7TWZ4OHZyeUp5TzxDXnJOSDw7cjddQjJLXm4hWWdSQnFjYU4mPDh8SExvL1hQLHN3eW85SC4+ZzQ2ZzAke24sL2pFN2VYPXJieDZvNWY0bjc1VyMxc2VeeC4+cmkxYSk8UjJZVW0/X3VrNS55ZnpeKFB6N0N+MTpBNnI4O2ZadVhVfV0uMldFcW51cltxMGloeEUlKDYh''@;'; put 'put ''alN+IkVEKjhGVlg5cj8rUDVVX1g1cU5oK1NWbzhKWDxwKVlvVjkwdVsoXXJSNTM3fG9VTS5aX0ptM1tBWk1CPiR8LnN3fDllLCU3QF87SWdleE4pLl9acVVNTD4sUlZpZV1ZI2tTMkg1XkgjLjxlTH5SWXYhNV5DZE1LNSthZzJJaDUjVyZOYENTYywpSXM1JSEvdjp5LFJZaDB2djBYSCpFMUtO''@;'; put 'put ''IWswLDJ3NGU5akgmTWx3QCpTIiYveylHeEBscXc8N1N1L1NWY2x2NXFeRkAwY1tbOG1SXWJDQWY6Vz1sXnsxdyk9bmZzNCQybC4rdWlPNEApbSVVflYieWF4b3k4OFhQa1lnKnx0bFk3b0ZISCZQTm0pKypCdTxTXTd0KjBSYSlkXzdLYkpDJS5Pbz8lL3RNNjBCVWBvajc8UCRCRUI3bjMmTXhI''@;'; put 'put ''VVpYMisrKkEuYVVXVy5pOXFpS3xBTV80MzlYUnhzI1pCckxiWGQlfH1FLE98althbVd6WG85Zl4od3lALnBibkQ7UUZqNzwkeEI1dHdybm1YQVNbIUs2ZFVXJDN2Sn5OUmNFfCkzTFd5WFlKTzBSPGtRY1J8MX1EUyImWVYzW3Q6SGlKek1bUHwyYjs4Q09EUF5qK1t9KC9GOC4mWnJoa35ZckJY''@;'; put 'put ''PF1MUlooNllxaHRdR1pzfT4pSGo7OHt3LiFjSV5feVElal5feVEvPz1IWjI3b0l7djUmMTYqcHFENE4hZHplXjR4eUtRXjpqcVBuSndiK1F1KnZic0ZHVypHbzpVQlF1YT0iaTRUdiprc2d+OjRHcSEuYyRIREMkcDBpfGYycn4oXWBDZnd4QkZ7e3QxMGNwMXZEan0yVVF1NS5pdHVjWnJ3UXV0''@;'; put 'put ''c2VpX0tqM285VTFPNFRVazpiSG58MTZOcF1mV2JZWjRQRGlEKFAxKDZJbENVdzpLM319YTc/UE5ZPD8jMHJKWi9ZT0g2OnlCKEdkbkd0Yi9SMEZdRWRQMy8/YWNIQyJ7VVEiOE1yNCpCPGNNYTdhcVVUeWRqLmRWUHdRaHt3Xj90dVlUbnBzTmolWmg+Xk1udWNjUGhCc1decj5JTkQ0eD5QfWNw''@;'; put 'put ''ak1vektRZHt6KyIhaXNFSWY1UmxaI1IvZFUiM18yTUVQeUMvK2JWeS5KVCYsNDZvUixmTzdGbiEmYDpXcD5LTzhRYFd6MEtRVyNKc2hgQl8xPEZsIUlDPVZiOlppOzhoOWF2X2lvK1srMCNdZWxWXiJyakJaQHtxdSpRLiQ3YEZZSmVDcWZoYG0hSkQ7am8oS1pVKWx7LkZ1WVpXX2B2XUpLOTxO''@;'; put 'put ''ISViQDxYWThERkhxNX1UMjE5aHNKOl9jMk14MCtBdzFtTEE8cGlSW3ohSUBEWV8/bCEvaygqaD5dYzRFYm0laV9lTWE5Zz00S1NsLFhEWTNHdXUrQlJFbkc4fSxfNkN8fD4/XW9ZVzQ0S2ZkXnldR1cyRFN9Zm4ucHE/Pj9rUy82L3coLHhlVVFBay5NdXg9TXZRY2V2UTowVX1NeGlONT4vXzJT''@;'; put 'put ''Jlp+OnFbUDQyfSZSL1Y+UTxrWERJYF5LMllnNk90QExlK1dpZGBqe05feysiPzd7MUEoN1J7N2xMODhPdFVLQjpxXUV5M0FMU2pkSF9XNS56P28jZHpFV1VuSFpCV28yK3VpRk0vKHpWVGorKHpyNj5XREslbGRINDZ4L2RfbFtnQnRWKDcmNyU5XUQ9NlhXSmpfUHUjOys0MjpLZ109bVp8W21g''@;'; put 'put ''SygvenlpI0MlK3I5blYzekZ0cTxQdT13fXpIcyZ1XX5XSS52Qms0aTZ3eCZnYSN6Z2pfOC5IenpAaTNISk5vayY2KygpOH5kUDB+VSkpMm5PTztRUzJbb1dKbkoyZ0AkPkckdkUoZy5gOldPfiMwQGdaL11+TnFUVW97R0wzT01VQFUuUm8jSGh1SGolOzoybU1ASldJbGlwS2REX1k3YlQuL11s''@;'; put 'put ''JUtvPyJfSUxIYDJzNktTaGQvR29JQjt7e29GajdVPyZRPGRfenJuVjJMdyFlM2hecn5NaHNVbUx7TGdeaXVIdjlgSGAuKDd3Nyg5ZmByJUsrbURWVV1ZeV5oVXosTlNYKGw5NUxOP2cpN306MDUhb3I9Ui5ZM2kzRTVkOjlWPyZKLzRGYWdVPUdMZ1BdXjIvQStwKHh2RE85RyksWU9ZIzlHayVn''@;'; put 'put ''ZlF0eThaJX1EOW08NW57WlZIezkrXXBPfnhlfDtyOTNIc3ohdzZrYGpCaHtOODw0Q2cpdjEqeHJpQCZQUDlXQmh4OnBWPyhQWShCO1hFNChDSz82cnBGezRAYCZLPVghKCxmMCNve29OZUY6YUA7MmV9UklYez8yal5SU3xpM1o7eFlZMkZxTnpsfFlNdElhRXJVa0NhLzBFeTR3VDlAK3FqJUE8''@;'; put 'put ''bENhX1VvQl5JdF4pKEJHZWFyPVFEND8wJH13aWAvV3BiP1VRZ10yNiJwMytsTmgwRz13I3M2cyNGdzFec19HMV1+bmF5KVgzIzV0RW46OEEqQmNzMlU2cG9AZj9yeSU6fDRLaXU6RW9VKUNdMFtvT2JKUWl8fTw+MmJMXU1fZFAwfj5UPzlJeD9tT3FjZ3RZdGo+OGd4MClhOUY+MGlEI0JfQXFl''@;'; put 'put ''WGs8Wz1hK1U8SiNTSnFacDZ+NUU9dyF2YX1YSXhYRFZRdTVzUV9TISx0TDwyYz5ZQVp4IUk9ViY3QXsxXWpXVllleVIxaFlzPk4jSVtQfmMyRl13JV1PNmc/T3VsL3pqenx6I3tOUTd9dT5UIzhsNTcicXo1bGFyY2c+fT0rQyU/fHoje0ZQJi84RmhdampFM0FTa1grNkNWajpSKl1XMD93PDEw''@;'; put 'put ''ZXY7MFJsPilzNTh+QHlFUV96QTpqNTBiZHJoMS93Iis1QiJbTl93MkRrQFQrcHdOJl9YQDtDYn5jc2AyRFomXz0pT0JMVlRMO0NPVV5FbldLfXlkO31XQGp3SEpeRS8kZnNpeiN9VmpiY2h9Onx8cz5kYEcrfTRDMz9CNmtvMW1+K0olbjEwP2VpR19VJSthRChJMyp6fDIoP3poZXc8KiRibX13''@;'; put 'put ''ZmFOMS5jfn5hNDN3VVNWSHtifWBKKVI1TT4hO0V6Kk17XV84cVg3NXRzUiEkYHpwJXQob15LdUx+S3QmLmFPMH5CO3c2SiVpXzgjYndhOT5qPyUlZUx+QFgzQ2daTH55NSFvel0jaDY6flBzJWMrPTxMQ2g5WWw+VWFIVn1fZFApTTAsc1k0Y3V1NS5+OjpJUzJAfH5mbEVKcyVuMT08YkNoOWsl''@;'; put 'put ''VXkkeVV9dCJxUUQ1VX06dnFRMndJMm9Ae3NIN0ViZV1dT297R2Joa2UwLn5jNFFTXVtSTEk3LGlINy5aYjl9bCVwdWUwfjVXNHY2W1JMdDd8SitKcD4+PGQwQ15Sdkw7S0Z5dURkWlh3SXhAVzImcmVdcE5qS1hZfjpyJSs7NlJ9PiU7UH0qX3RCaXJ8cihnaUkxa21LWWkyJDNDXkBYV2YweHZR''@;'; put 'put ''UDxde240KHFYfH5HTiReTXJVeS9zIn5YaCJoTlRMJEh4QE10amAzaEBsM0R2RW5Bb0ZlLEojIVYwOEk9aXtoIyRzVDcvQWRpekBVI1Y8TClbQmo5SipjTEopI2l0MD5pWyJZPm0ibkpJI0EmJUVFQHlKMUVRL2Rjc1UrT14zfHRweiQyIylAYEc7aUBoOWBeNjo4R0BDXToyVng5LyF4MD82cXg9''@;'; put 'put ''UlBiKiVaI0ppJmQzUENRN19KNHx3IUVYUzB4S2ttJWcxW0I7Y1BlYlJta19ldzk2eTFLT1d3OW1tRGw2TCg1Y0wsQEgmNUJbUlFeYjQ8Xl1PcURqPmBIXyR+PFZddU9ATkB7fnkzbiYlMylgP3wmX1IrY3s8VkNlaTNuSj1PUXFhJF83Y0h1czQ5YDZSSHBnN29VfCY3JTdVbFssXy9IP0ZDVGJ+''@;'; put 'put ''aUFTTmFBU0IyfVR5VF8yJUYwPihKNUxnRHZaPXR+UUZrIU1tVld5bmw9Q182fiV0S1lSY3d9b181dF0/MSRVU0RMQVBbJDZMKHJRfFo9dFQqbnN3IkgpdDVOPTxlfGlSUHYvNzBFUy46LjV3SUR8aVNnWlF7K2Q1Tytfblc4fUZjN3JOQHM7SC99Ti5MQ298Ok9hLjpJI3YvWntBc21qYktFKCpV''@;'; put 'put ''cUd2aWFzajFkbWxpa1tzdUchcDxLS0dGI1JCMlBzW104I1hnfXlWNDY+ZlZldWM7I3ZZV28zVzc8K0IoJnZMPS5TOjN0az5nbzl5a0xKOHAmJTlqb1BGMl8vbnZKOT9dP2VFWWwoQiM8eCR4OlM8NVNsdngsak0vLnt2PHtkOTgpVmJUZ0dOM3Q7TitwTTN8cV45W1hqMUAucnFMeDZ6QEhOR1tC''@;'; put 'put ''MVYyUlduLHpvOzNXT2BtQ2I/WkY/IzR9c0RkbWdXSio0N0M0a1c+NkViPUVJODE1M0V9ai5efHx3aV80US9DZn5SR00pUmpDa1FTfX4/JiNdK3xmV0xpRk9NdCM8cV5NX2FWaVtLQzpwWDdYIz5hQEJWaXhTS19heWE8dkdMbyZtZENoelV3WnttcmE0UX0oXWgpMGVROWx7fW5ELjVdd0dLWzol''@;'; put 'put ''W3JRcT5GNjlxOVgoQi8kZVokVFkubl9LUDlALzNPZlZqN3F8KVNZYSlsUGEjSGk/OnlpJWRRMWA4fitwa0d2TTFDensqY00yYSUuOylSJkYrNC44b1JHRjRfRSU4TjtYR19nRzsmSFtdaWh4d2lxbn0hYSNUTTBqTipQR25QMGJ+Xj9qZV58RW9gKSg5fEV5IlNwZzQzUz5+W0BuIm1kdSYsKDlD''@;'; put 'put ''T0IrcEwsc245cCI0bywzUF0ifjFZOyhib3NRSDJUYlJIYnNKR1YqXnN8PjNeTlVvdnB3OXtHS3NXW1csXzVpcnc5SiNEP2EuUzhfUSQidW5sS2wzYHElV0YxS1QxK0QpNng+JGxMQ0giQkJHel5sOn49P2EzPm9WO1lteUouMTJyU25OfWhHQHVvRmEoTGhCPFJKJjBZUz5kK34hLz18PHJ3Nkxx''@;'; put 'put ''YUF9LkA6T0J8O25mJVBBW0BTPzBkfWAoZkdaUSJxNm4jOyxQcWZqSVQqL3xWV2csI315bnZ9fSVtRD1UKUBuQEwkcCZ4QUIjSChyY2JLSXx7NEFXPH1aOHI2TDBwV0VtRjIvZGk3dEY0fCVjNGxQXUNOYDg2UGQxXnRCVGhoJUt+X0ooaSNaeXxkbVN0cShfaHdvKDw6TUx1TTdKNyQreCp7djhK''@;'; put 'put ''PHtyK2drL2AkRGlRaDZUQnBFU2Q3YjNWI2MuVk5+ZHBGRzBJXywmMXJUXywmS3wjQk4+eXJUfiY0cjBiNGphYlQsOVhTSDg7RnF1PnQ5U1ZDJjJGODJsIz99fSl4QTlMWGMoYXM5eH59d0YuMSZJaX0+WiFwdE5ePChvK09oaERrN2wkL2g5LnNiWChwPE97WyljJUUuOUl+c1pMbmtqWEtnbDxD''@;'; put 'put ''SUU5bStsLGtueW9YTSRReDN9S3M0Nys/JiNFT1RwMDFNV11tZUpNZFpoSlJoaCs5e2x8I31sXjBGfDN+KWxuNXc2emBXMUp8ciJtPVYmN0ZSdHx0NDRtYDtuRDYjRH4/KEpqdGFCcDgqYWJCO3tHbFA9LnEiWC9HbTRRIkFDeXJYZFd2cFordm07VS85O3hOXnkoa10zdD1Fe3YmaWUpOzEsPkJS''@;'; put 'put ''IWs1KzlNcU46L2c5bW89IkJGLj9hcHNTc1B8aj9ZJS9KTWlFR3d9dGpeI3hgdmBmY3N9az5JWixPMTdxYTVxKD59L2Z6O1ZHPmt6Pzo+cTlPaCJbXV9tRyhoS05XQ0xmLkdAUTF3OTU2aEJDQ04iUjRfOyVWI3ZhdkxPYjNve0ooWll9ZEZLPmQoc2NHey5AOCY6KEhvN29VSEs+ZC9hQWYjZjZA''@;'; put 'put ''Zm9sZEFjYSNCN1AxYXNqLj84eSpoQlkjbzlJI3taZTdSa35zIWR8cyFgUTs5YSpWMX1bYVVwI355VlZVVCshckYuXXAkaG4wJD1GLn0/OSpGNyRIJnluYFImO3JCV0FTbkA/WTp4emxvaCEjVWVaVigvNGxSS09GNTNSS0g6N1lNVDFhNWpTXyp2dltoKj0qKHp2eVIxeTdoO29zR0olcHx4OCQ6''@;'; put 'put ''M2pkI3hVfkp2Q1ArMjo6QVZrZHJ+QDNwZEIiJSxzUndmIkpMPlRMXndbbT1QLEAlKiIreyZfKiIreFtdR1toYDd7KH1zWj0zVGxFbS9lJFAzSzhyeEIoWG5QSjc8Mi8wMGVEOmJhd2sqX3x2OEo8aFZ6U3A6QnszNyhxTV1xdUs7U2k2bXRSfllmPXYqPypyKCp2KXhOfGkuOCw1OlMqV1NaSnh1''@;'; put 'put ''SltVOmhgZGhTYk1ESVNeUFcsVSw4U3Jjb1hJajl8fFM9YktfVjpHUTE2YWs1KU1zbjR+X3RFRGVjWkNAOCgvImRyT0RjRnJubmx9OGxVbWAmRyZuKlBVcyR0bX1CTEIyYDxeayokKmx9WjomVEU7TzF3Uk9tZ29RJF4lPmEyQCs3ZktXbj8uJHl0RVc0XzpoJW0wRz0yUSZQU1Npc30qQmI3QHtt''@;'; put 'put ''ZDc/YTlnKnp0SF9mIlk9IUQ6QnEiaSQ2Um9FeUddISVbZDlTLlZPOm9tM01Vb0FaYG12OF9VdWtjUFBVckRHR0krP3ZgalZydlY9Lip6S2lxTjVibzpeTFhxRWZdU09deix8cUJBfDg6aitLVlNTZilJPD1PKzRMdHk6Uy9vXSFsImgwfTtwa2R0Kld4ZFA0a2JfUTJzbz9GZ18sNCokKD5sODRl''@;'; put 'put ''fUg2fT1OaXViJF4vSEdtYCJ2ez5iOD1jLGo+V340QVtFWiVIU2o3JWNwen0laltrcz08bmZfVm51SWFzInBoSHJ4JHFwP1VbNER4MyYvRHNCNzMubihTPXVFSkhneWtEIkFnPnx8XXVMKVQxPEJ6V3ZRbSgqdV5+el1BcU5lQjJaZ287Z0N3KXkhcWZQc1NgQnBufnNIX0RhSDUvJSx2R043XX0+''@;'; put 'put ''Xj5RLyw4Xnx0QSZCPl5lSz55dUBfaDQxPiJtSGdZOENYOTwqSUl9UyNOJXBiSltaflZNen13Xzsyd29SWmVZNnd5QDosaUdsYTI+bVFhdH0rUDNUfiFqNUZFZWhraGVsZEI/bGxda2N1dlY3VEZWYEkiKz1+OVk7VjN7S0czTDc9JGh6Ij9+K1ZDRntER3orVGFWX0BfQmFgbSxmRDVAdyNxaH49''@;'; put 'put ''Y1lDPGpvcVF+PWwqO3t4NCZzZSRJI3QyS0hhX0I7L09hYmEjY1siX1t5JHZ2YWRSYmxHLmdoO3VsVzlhO2A+P3hFKV1UMUlQbGc7WWc4YGc9SjVISWRbfnRIfEJXOWVhIX5FUDxJR3Q3YElDfEZrIVFWdTghKXI5NHFsJDIqVDt4RjpHRFF+dXVMS288emMqLFleNE81cmRmZWR1XnV2X0o7Mm06''@;'; put 'put ''RzRGSm5DejleaGEvdixYSGQiPjJgNC85WGVYPlRyPUcpbkVZaHVUYHlqV3p9e1B2aj1qVEJ0am17JXlIVzJ7cmBrPj8pMTtbITtnL11Oc2Z9UjRpOH1eejY/OnleO1VYMWJzLkRxWnA2LjRrenplT2J2U0hwbzFCLl1lXX43e3I0NHlaeW9wYzpkZXd9dkJfRm4rblIrVzh+ZkJKT082bjooQGIj''@;'; put 'put ''UGU6K0Ymaz5WNi9GPndJTV9zNmk/ZUI5JmlMc0tmWFNkRlhqTS99OFtWJSEpaig0QXMrfllvcFdENHAsSXhwcTk8OGd7IWY5I3QpSiZ6Ml1TVHZKaGZsYyEhZWhye2o1aXxyfmErJi5nTVFzOFcvMll+dDxnNWh4PlpsW1tTUF9PaH1iMlleayZQKWpFbDhHT0F8NkUuYCZ3VG0jIjBhI2Ivb3hN''@;'; put 'put ''ZlpOdkxpajcpdmB0eSRPSj16P0xaVSxCJlpsVXNbYU5WUllCI2srT1JlZDE2XnE4b2RpPWB9XWRXQ0RCa35EbCt+XmUkbmZSX2Frb00mY3FyQVNpN20xNFd1eGlaWlJmMldIPjBGfCVpTDZqOSVlcHxRS1QsXUgxT1N0dE4vXWlUUyFramhVTSUyO1NyNGchbktHaCRIM1A6YDNRQjpYP296djgy''@;'; put 'put ''eHBSQiUqI3tXVU0hZm0rT00vZFgmfj8hdlMzP0lLTCRwPEFxW1NJRjNqbF50PElTSWQ8KzlQUWpKTDhDVUBRM1ldQld2OlpLNlk1SEwkRUtmPVhCL3syV3JoR1t1PD1OWE4wS0MxU3I0L1tZO21CR2JzcUYwfFMmcVs3elBpbnQ8I3ZDTTJBfnEvPFRWaDs8OHYsXThIQStveF4rcTsoak0qM0hE''@;'; put 'put ''QDtSfjI4bVhmLDh7d1MoXXhwQG16dkB+em9dPVhzTnkuZ3Z7Vnlva3JnbkQxfG9NLDJVZSk4aUw2ej1JUE1HZnRHK1ZtMHc3dkAvXnU/LHFZRFtGNVMlKUJbJG88WWU5SG9wTk9JUGtqOGYoUDlxenNFZis+dj0yKm8pIWlvZmA1XUs8Y2BCVHxaMVBNMEtHIXFNd3lUbT5gUURDSE49Sk9HJj9t''@;'; put 'put ''ZGk7IUE5L2BMMltgUiYvSSRkbGVWRHY8Z3Y3anRmVXR9TTlgZ14sOHh+eHFreUFLdGtBfUxpZz5pbj00Ylc9bHI5SkhPfjg4THwyciVYLDsoa3NfOi8uU3dzaSMjRTZoL3Y1N25CZ0NKUjBdKi95ckI4bWFPOD1tTmJKKixrOmFoOTQqM2U/M0NTPDR1MU5NNS9sVmM0ejxCKnJ3N1J4b3pbbnpu''@;'; put 'put ''NEBNXVZLTk1LdkhZX2F3d1d4c0FrQVNQb0VnLCh9VyZWUz9fWT1qJXdWKnQxb3dtOlZdWFNZPiwzYkpBP3wpNnVoJHQqY3U7U1Z8Z1diWT10Wmlpc3oxVyhfUHN+VldFSjchQDMjZy5wLDheLC9wMj9QST5zMnd+fjppai5jMERJfm1ieG1XRjRHPVhDVXQrdDxaNW5eJUBqTEFYXStiX0k9aWh4''@;'; put 'put ''bzsrdlhhOkhZMER6eWlIJSoiTH5HWFRQUEdHR2IzRzA7TypINDZPYSVTI3V0VVYkVjNNJkFZN2I2bGkiJTcvTkxsbFVmK280UixZLE5sTjl7MkE2XUhTKGxzQWxuOmMhNnYrcCU5ZSMpWExMSUVoeFVwZFZPM1JpK1FWMiplREh3TV04MUJqWixUWkZaQjVDL0xAfCZOQGMlWjl0WW1WcT9kX3Im''@;'; put 'put ''ZHA3SGA7YyRgKTcxPyk1alshNXV9bTRuWzZ0eEwrTCZKJC5RQjVVI1ZINGhMekV4fmdJOUVeTkt9eHssfC4oNStzWiFGdDppey9RVl8rT1UvYklzXUtiL3giT3FsX2VKYEpgSTVhdy5Ha3N+RWdVK2VgRVouVjR5KlY0TXZwM3RqeCNyRyV9dnhLLjEvUEhtZCohRWFad0RhViE9U2EhUEx9NCpL''@;'; put 'put ''Y15SWil+c1Y0ZmIrInY0OXBPSDYicCxtVDNUMEYvYSZXIXh5YlE2KG9+ISguKHVhVjVlJWg4TGgpaTlpKHMyQllfQSZfbzJGZXpjNGQ9dyNucGwzIiRMYl5mbFp4YHN9YjRYOD1pL2psJXdtezNyVTw7Mj5bZl16Nj5iOkVALFVJYDxWejV3fmpLenxrMy5denJddSVgPXwyXj43MnUodkZyXSly''@;'; put 'put ''KktMaEsoNCpfcHBzVzlUV114fXNrSDV0eU1UfS5bJXgvLjhoeSF3clVWXTNqMCFlKWhddzU3VlBeMjIjZGFfdntrR3hhc2lLSDE5OV0uX0djJkw2ZyZmZ2RebD1jTlkpfjsuIjdvVTliP1hhWCJ1UDtjXjBEZy8pSlhXb3h9YiEjOjZJMl4lXlBIaklIbXQhQGh1XnxrIVRfPSpZd2FvZnkrcDlj''@;'; put 'put ''IUBjWjg3O2x8VkYjeWN8eHd7ZGhNX1NpUCErRDRDVmFTOGx3WUNzfW41KXd2OF5vRUtaPTxKJCtMJiFwVXFpdyNBdGpRVz06eTBiI1diMzFCa1dUS3tpeHxQVE0zckExRl1hS2I8enk+W3h7KWZ8fTQxZWBqUzYzJV9oW1spUE4lfm5VN0FhRmEmVT5+cVVdW1Y5TXZaKGB3IW1VT1p9SFlmeGNw''@;'; put 'put ''QGJJVUMmVTJMbUxoUC9fPXwjX1AjJkF7fnd9Ri8rI0RvdEp5Q0dJIm9vbTkidkNoW2ZxNCIkI0p5KE5KWXREeXxWeV4ucS8yTGtyMnFWdCt6MVo2SXBHdmM+aVV3el9wWylWVmw5XzM+bDg8S1IvJFtVZGlPeDpNYzdiQmM4Nzl2JjpMe3Q1WlRLNz1jXUI4I19lczR6fn5FX19FOEB3MzhnZVNm''@;'; put 'put ''KFdMXUhldS8xIT1uS31FOHN3TWpwKWtBeSF4NyxCSGojaU5veSFsZkhCeSFeMThTNzhwek5bSGVFSHI/SGUmRiRLdjBHelIrQHVKXkhqYEFeRjZQbExhWXhSOXFAe21keD9zZnUvfF1PeWVHXSxpNHkie2p4Y0lAc2Y4SC45c2w9Sk8rOEBUcWlldUBycCxaJiJkZURHMUIsMV9UcH0lN3dxQ2Vt''@;'; put 'put ''QVJjaGdheS5EYCRpM3xCL3xjX1lzSzohTHl8THt9c3pyXSlSNyl+SF88VkhWS2BKYCVBLCVbYjJ5dHxjX3BwMWBEJFRxfTRYWlViWnxmTjlwI2NKeEtWUCJkKjs1fSpSMGtdISRCSllCY0EiXiNUczgkKEptMndOfk9DTzZTeSpvbXEsMShlOCZ+NXF5Py5nfit2ZGd5XyRgSGA8cXBkdEZ4TyNg''@;'; put 'put ''UFQmRUshfmdLNW1wV1RvO3NIbEhpd1VwJGZuXU9FZDQrO0djb3Rpb2tLeGx4Xl9bNTRuJl9PeTV8KFpsRTdZN040fXRTfUZTNyNuVlQvcXFJfl1XUyJbI3dRYlQ0Ym8sLGB2XVFpUHVnfUM9d3s7fGRrfmE3ZjdWTUwzOH5hXXE8M0QxYnwzWmJzRmRDfXlDJT0rZztsWSMoSEVsZTVgJiY4ZCFR''@;'; put 'put ''Qio6Pkd7dDExdjgzekl6UWM/djdAVmNrLHxKIUAmRjREKChFbk0wJkx7WElNMGpmelh3XjkwMHkiJHldZHQqQEpbQnt7WSxFMzgwQmN0SS5ockhoZStDVj9jYWdRYCQqVyJCVlBMUDBPMFVOYzRefE9zJVR0XiRTdFgiKkx7Tyo/V3diPyQiTSVPQSxteShOMVk5LGp9NFlNSE9VWkwsVEdwJVop''@;'; put 'put ''OTNaTjRlNXZgSnQqV0YlPT1kbFZGRTs3bWxzenBKUmRSWzN6QUIud2JBaiopalNndkB4M3EyQG9FQl57YmVNUmchLGpBOzpnOENuQEpJbFRiKXloK2ZBeGIxZE4zUUI0OF52VlBpUXUobGpSR0AiMlpvSWF5MXgsPiM6Nl5mPHd+byZZUCo4RjI/cU4xciVieTFAbE5RL20zWyhJcXUiRGxkdzQx''@;'; put 'put ''W3FvVDlVfT56emNVMXp1eFJXJjV6bnF8MlpCPXxpTmVdWmxZS3UzPmIybHAwWy5AfnJdelFgZEBvKTByVT5fUkJvRitFZStmOmF+T0JxPVBWVF82dXN+PjdNbXFfIjQyW0ZaT2Jva0svIiRFclBkKCRAam5vSltUTDRCPDp1cipjWEhWfUhATyVPYDJncmFjSCZjRUplbF9IJTdNWj82Ky8meV8q''@;'; put 'put ''TF9jSjA/JmNHX2NKUSUpciZlPXwvUCNHOW5pJGJDN35IWGskVENddURqKTVVZGtNcj1fV01XN1k4MnhxTS83SGYuTDxGdzIiaS9aJnFfVzQzTzdKeHFNL1h6UGtMX3tMInBNS3U2Ik5ZUylFKERlWylgM111VSNWJjMhMDtoSWRuXWA1d0owUVUoKW0qSzkoI1tqc2dGeHBZM3h5eSNhei9MaVQs''@;'; put 'put ''YHdpJCJpeD0xbk9ne2dsPlQ+VSQ6OjJlb2FeWEQ5a0oyN0I2YlViXSQpcjVOSF5vbXpNUC9CVncpNl5wPD1XbG9JJU85RllOIyYlOkBDPjNTNixZOlFzeTpCdVAlWFB0fjRNejQ7MyxmRGhUdW1VRlVfWTlNXjwmTUVKN3h5Zm86Vyl3NjVVbyxTWS9WVXxZQTNtJT9NfFp+SUJxPT9WVUVgUmNK''@;'; put 'put ''Pnp5PVM4PFA/VzxXN35OYlM9SkIwaDIwcXY5bWpiMj94ZlgrZCslPjQwWlNuTFpfaCpjXzVAR35xbHY1I3wjYjdPZmxvWXQ3b2YyTGZub0tNeH1eWiUpOHxRJHp9VFlHK0YrWzhkNFVXZFN1emRZUmcpdGBWNGpDQnc4JjxVV2gxakxMbGFPISxSTj1uOVAhYSx6PEdNOjJUZV9fMW0zPmUqY19p''@;'; put 'put ''Um19WT1JIy4iR1JTZ2V9d0A4bXwrMG11bU18bz5NfGBbcntgNSVKLHB7MTxdNDFlYik+Sy9PXyRoeTVnSlFkKG9QViN+RUxFSmNVfilKK3h4UyUpNiNHTm1JT2VlVzdva0RRcTVOZDIvSUFBQThNQEBuQVVFUU83biYiYlgvWU1JYTI8ckRIKmh1T2YzYCozLEVOSm81RCVJZk1pQUFBQUFBQSRB''@;'; put 'put ''JCQpb050cVBEZHNhMX5US2lXWSlycjN4QHFCQTJ0VF5SJGMsUmhxY1dHTktuZ3psQUg3YUphRVFfV0JzJUlJT1B4WlZ8MyVjOW9ae08uS3o7OyslSUc7YXhoOlM9O24mRzI2Wmg7RTV+PDUzVHp7UTBxLlU8QmsmRU5xM1g8M1BhWzolYG0uZGBHUCkmYipCP2tkJTVfMiV3fTxbUl5WM3NZP088''@;'; put 'put ''VDlxMS9qen5IRDM6eTohPzQ5TndzRTZkSTsqPzpiNik3e3Q3WyU6cXlRXUVUbypeN0tyXSt1bGdyXT13Q2pqT1pyYylDU3ByMC50Vzw9Nn5kWnozQDx9KWBVS2xhIn12KSZNZHRYSkRKIjFCeSxmZUVNWHhRMVNSOy9qfjMpdW4jXXIyeHBofXNFLklqLkhDXzJuTzx2TW14JlQyYndEaG8pPXBM''@;'; put 'put ''Jl4mZClvV2J7ODZRS0U7KzE5QHF3I0JEO1tWPU5dYzZvVEp3SEpGZE46Q3guZXVvbCgjU2VsJE55XUVMWko+I0x5Qj00bSFScF1jdyg7NEJHZnwuenc1K3p9ZiReP2UwJX5fdFlFdF0xQ0pLLDtCYj1pOEtNTlpKPWBGV1lieiN8NCRgO08qMD0sR357XlNGOSF0ISJeJTJRfjQ2RH0lJFBiKjpE''@;'; put 'put ''Sj5POjVJWiI7NyE7eHN1WjRCaT5AIVh4Qj8haHZsJSt5IzlKRVt4XzNMMDdoT3xXXjQuTS9uRCF6Q3xOKS9MfUhvYVc5LmEobDt7TFI4JEAuRn18IS9xRmR6JSU8eUA4WnBSL3x1IUBiRT1QbUs9X0NxI2hmc1k+TWJXe1YzbUJwRz1ITks7Z0tBMUUzaUtdSjs0Tnl1dzJvbjhjNlU7dlszdyRR''@;'; put 'put ''QEx6VSRUS2pfSTFgTSYuNSI+ayJlfmwwJW9jWzAobyNmZn42T2JhcW9BLysmTFM5QnJlMzouKENiYiwyREIrKktWfT10R2V0cVdHMERMbltHQ0EoKjZLImcpU1tVT0ZjWTAxdzh6RW9ONUNsYykxZmdbaykvaGAwJD9EcHQjaUxnISJaNFdjTjhKX2BbPUNdIWU7d3JtdCtady9CcUVANFUzWzMl''@;'; put 'put ''aj1udFFxZHh6O2lffDpwI2ImfnVHblcqWjkwMHlYXzUsVyxGY0dnYG5DMyEhOSh7RGxiNWp7ZGJyPmF4WSx1ZigifVRNc0s7R0I2WSprNGljImZVMW1ZXltfJH1RKTMqKTpeUyRfKDMjLGBgNEB7TiVZT0pvIiQoK3QvUj1zIz9JTTZZPm9QS3tYUSlNS2AxPDlTbjQxPyhFM3VnIjh5PDFrUG9G''@;'; put 'put ''K0FaM0t7ViFNM102ImhzPTtZW2IjcSpsZ1VyQnZERERvTzk0NFFLRkVNSC4lajNfekUxM0BwZ0dBOEZIZUpHK24hTzgobGdHYVkjTi4wfH5mZXQ6V1VrJXpPSyhBLilCSncwXUFXPmwre182NFplIXpHdTEkNVh6czVUQzEuUShUMUY8MmQuei50N11iLlBXZ09YQCI5WnQjQl5uKzhpPzhoKSVA''@;'; put 'put ''Q35BOmtnMEZvTzklJmUoTGNrLG1ZRV9dcEhibTB3OkVQRixkWFA1MHhHMnd6T2x6eVZvdzRGZEBPLlkqNntBbnNibWlYQDZiX11kTFV0VjFeflY4eHYlbGo2ZzlpSH5LQ29JJXgvJlJLZk1zQ25FP2I7cm9hIiZqeW1UOzowRHlVNyJtNEJJTEc/KDZvZVkzOyFKYDhxUVkiU0M6cElxO05fX0xU''@;'; put 'put ''QUlBait3XU5OSnhmZWFWb01bIXBTSyFPPnNhRjAvU09sJVMyPT4kIWMjZX1WLls1Y0BKQ3EvZDRSQ2oyQF9BRExDNHxBPVlLU0RKX1hRYUlwZT1xbmFxYFVnJCk3fntZamd2MikueytCX0RAbCxGXkt+KVpDeiMuIXRvbTBiSDJ0SzFjR3pLOWJ+cVhdXzxkOHY5O1dkOThbfD5jTjpGQjVwbXh4''@;'; put 'put ''ZFN6Z1Q8VUtiYXYqQ0QpVnJEQk0xS3c0TENjR2ckL2NUbD8xWTZGJXFDRnxRM1gxbmlfJWc+Wn53cXBGejh3UDlRR0FHN01RRVptPywvXj1IdTx2Ukk+Nm4pMn1LfldgWz4wQyphTnBvPkFrMW9UNkRXJT9zIjVwX2Z9ez9hUTRjdUp6M1dgSEBYa2xWSlA7MyVjSiZfUTo0WkIqY15nRmsidmh3''@;'; put 'put ''UH4vJTk1dXFWan1YcjRLQmt8dWhqJUk2NG1CaGMqRmdTMEoqYjZOMUBVQC9mY3YiRSJHUzttNyZoV2U1Xkc+T2dJKTMsV2FSYHsxbnA4KFhAYEpRKH12VkZOWkt4X1hraC5sbDQpdihLcXUrX25mLlNTdyNkKzpAKypQe2VdRlJ5MFpAIlBTcCt+a2dnRHJlL3ROYUNJeW1+P0UiL0o+VWhxZXVJ''@;'; put 'put ''MEVkVkpVVSkwW1ZydGBxanZOQTF0W0hpXSokMjY/O0VVRUVPfEtLR3NgbFZ7SXttTFJJXjxNSXlbI0BaUm88QTRURDs6Y3pJM0pydClhUFU3TSgoWyJiS1tbSFJeaiNTZGNsVUp+OWZwTHMjbkt+QXF3aENjTXpIfWssMTE1I1tJXkg7ZXQhU3hbX3NPOEtJbW1yITZkYz5zNVk7ck0wQ3JBTWUo''@;'; put 'put ''Xk1CcVtgJjVEXT8kLiV6WH5QZmhdPFlxQmFCPTFETSZDbH5XfTcycjtIRWlPMC8pZSomP0MmMV1LSXVtbiVRcW17VC54aT1SN0B3TjQiZylhR0RQQmJ7YlczYUphPCMoYn5SSTB2S3owOzpPal5KdEVGVW9ZNlp9YChId1grTnNkWjIyaGhDfXNjNi5geUtWdlppeUNKIUUwJCV2WXZyaD9ZJS8m''@;'; put 'put ''WS5zU094ZH18Ql5fYClgZU9WO15lenFEYSZSaiJaTWc0ZUJ7fkdnO0JeZ11acnxNKzt2JkxlJlg7NCh9VCxCV25OJXdUNis/T18vVCNXeyJFW1Vfc3JTaiooTnB3PmNsWz5lW0oqMWI7bmNGPURoYzA8TE9vZXFjdm0wV1tWWyE7dD99R0VANzVOdHEwQXJVTlskZzA9MmY2NHkjKGxrVmMrU29O''@;'; put 'put ''L0I5V3BhJG1oNldSZHVAIWlzWk82M19iJXBOeSo7czl7KWFAZH5nUmllezhia0A2LCEkSEpKKWFrM0dYWk03O2trbjlRQVtnYXhoZTFTJHMwYlNtJVU4NnI9PTszRFlzPkFaZCI6RTUyZCgyT007aGxvJS5VQHIxSEx7SFpPaFFBQk90WjJ+bzhMMH1gOXcxMThVTWRPa1NdTEhvUnc7Pk5GL1Mk''@;'; put 'put ''dzIxdz1WUSg+My4jQH0vcilEJXlATVdgT2h6NCpsbnhMNlcoPVEmbnE5OGtnOH4md1JpamZGailGJkNKaD5WMktuaU4xI3ZScjlpcypYZD8mYFNsbDFpI3Y6cVRQfjB8TElLOD43K2AzdHF7fWFkTWZLNTJ5RissfC5GZ0Zib0hlaERWX2lbe2dERTQvdzxtN1QmWj9iSX1SY0VHZ3BMXTkjZCw2''@;'; put 'put ''cn5eU2gjXSNYSDpXOk5WRlAsXUIxO2VndH19bk5vVGBtYjwjbF55QnQ5LCkzPDZhdnNYajA8S3g1bEZIJlBWPyEyby5sPCR9ODsuMUdMVD1LIjdvVn1RYnEmS29EX3c4bDBsW3F1ZkNCUSRpbWA0NigrVilXbEVGUUA5bUAhXyEwcklpVGRzYzZ+Un1ENzNNKkFjdzNLV1REQV5aY0p2LFhuVUNY''@;'; put 'put ''R0BnTHUzJSw8c0N6bXhrSXljYjl+b0x4bjJIQFJCTTxlW1hGYDsyWzVQKytbZUFzZjxbfUJmJW91aTM6NyF3bWU1VVUkVW9yMkwoMSNeM1tGbXEvWy5FJWN1QXR8JW1ecCxHfX0ieFEqU2NmWjV3RzpKc2RgXTd3cy5zRys+fDZrUCUmc048JFZ5LHpJL2FrISNoYktxVDk1MzhJP0tKOWYiTz4h''@;'; put 'put ''KnpTaj85KjV4ZS5DNl5tbkk7TURATGZLc1lUfT1SKH5kJVQ2QFFUTS5KRjwmLDdrdll4ZFJEbCkoaTFvQkVYXiNKeHRoVU9LJE4yMkJraFdneDU0ZE4pVDp7YzsiK0Vhb1lkcGp5V18wPTZGND0lPm5IayVlT2UrZGVkezpDODR3QiV9YzlfXWh+ZlB9SCQ1O2FFOzFeWzJ4MSQxLDt4V3liZnNd''@;'; put 'put ''MEJXb3NdSS91WUpTQz9Ue2kpMHdjbXwmN0RMK2duU1omYyFRajg9fEViRFFsdXNjfiIqSXp1bT5yTnNCInBVMF9FR2w5YDNmYk9FK35QWU5KUldUWzh4YE5rZj5MO1swb0lOd3RmfCo+djdUN1c5dj5aamE9VDdndnM3cFVSXmtedmEpcCNKb1pbSmt2NF8wWlp8YG4/PzVaIjFILnx5bWFMITRI''@;'; put 'put ''UzgkRmpBSyZrTmZ9dW5DcVo7NXssW3IrT0AmYzo7Inx2OWk8L3lZXjt3L2o0MVB1X0tpZUdeeys0Vy4rK2BCdjNQYHVEJUBye0kjMFBQLEVgV2t0NmE6LF1fU0YrRXYhPFcuUVIiSUNYcixyNkdBfWVadyZaVE5APWFrTjRROElKWFZwWiZ9KStZPUNWW2pJTCZPbDdEPU59dmlNQ3dQdEh6ZEZJ''@;'; put 'put ''Z0FQVm5zYWB4JVNrRFR9Tk87d3QlLGc3JTslaUhUST8oPVZ0OUA7dUdrJD80STRZLyVCMGc7SGMlP2koWnVnNnQhd3xMU2tXdyg1WEJBIl0uU3hHT3l3K242WDB3OjpQTzxwO0VffjYpPioxMzVIM013fiQ0Wn1dZkBnYF5Xdk8mQXY4dG5vZiFuRThnXVc/QltvPE5tZyJFIXRoN0l2ZDkqc05A''@;'; put 'put ''fjJoV0M2RWc/PVJYbUVRQGdZMiZnSD1FLDVvJnQ2XUhSOnE0bFkyZ3htLkxuQCY+KVpbanNdWVtGIVJPVTVtbVYzM2ljZj5pekxLRjM8ZWZ2JjxYTT1tNnImIkJaWkJeNlptR0d5QDY5c31zSys0bWJoamtTS2w/MT1qWDp5Zm5CUyleL0oqJGVJP0UqaT4jajhzeGpmUDBmbk9RYWo0RE0wMyQ8''@;'; put 'put ''TzEzQnxFOkxsJDs2PVNAJXBTWHBBczw8d04kZ3VlVyZqbllCIzplJiZXbXR8IUIlfGB8Xk4yTi5LeWtbU0JNOS9ffExJezE+TnFlRHpdN3pHMTZzIy9TYigreEpiI31bUHApTnZxVjdCKDk3W2oxYltCM2YuSzw3eXQ/NWxMKE89QTNgSHJPTzIjVW1Xfix8RHFPUyo2Zl5fWVZtVzU3Pm5OVHck''@;'; put 'put ''KWs/YXdxRWhjcl1QdThFQ110S2xYYjw4QVdULFBgMVBwQks8Q1k/OyIsImo/JTJFXkQ6L04jVFJsV3dnLjg/SERfPk0iPTQxVWosYUVrYi4+amtTaFlXbH00QUsjZFU7bkNfZWxuMkhTelNDWzM9Z1pPNTlNSHkwKz5RaTdaRlI/X3VNdi4yaEBJeCFCW3dnR3Q/MH1ibSRQTH5rcmd3ZyVqenZU''@;'; put 'put ''ej1ibmI0WFltVVtdMCNPUjhqViN4dFpvWikkXVhsVzBlJkd8fTwoREE7UUsoaWk2YzFLXVckRCkhMUlaO0QuP2RmNFVLUWNieWg9eG00PX5wXUdpcipyQk5zQzx4OHo0e0QhWlM5RD1VVW5AY2xGc1IrU0tidk54fCZmRzREdjBwMGJXKz9vcClYKy5SdyZsPFhgRkgkLltTQkt+KSxbeil4cyop''@;'; put 'put ''VVYwYn4uXyQ9RExuJTMkKHc6bm40RlNwWlhrLiosdVhTT25fOTchU309XyxSTz9URTBsbHBQfWR4JmVJRXR+Q31sXVEkVng2WTFbd3Z+QzVTclNFfjoqZTIjYCUkaXFQeTw+LmcqQUV5dWE1dHxvPWl+SGElTm5zNjQ6VTl2RjlseW1MQW9aVyJwd2J0amYpcDpkVTxEU1Zufj5SLHUmbDNCTk5O''@;'; put 'put ''PlBGdGsxXTxVKF1bUk06ays7Xk9LYH1tPCZ8Nkh6dk1DXXZAUVtwRzhMRjY0ZD1tbEVpfjx5JF1bYmhdMSMxdipfVjdJQy4rcnUvKFhhSWs7fTBqR3o8ajZ7MVssITxgdllIZEk1ajtVIWE0K2ttI2xwVEIyUldGaVJAeGpANEAoZW8pTlFVRCR4SDNPWnRtPWlxcFM+WCN0JkBZPHw+VSp2Ok01''@;'; put 'put ''Tmw5aD1aQTJ0bnJvImNgS0NKKjBzP3ckcWNxLCxUYnx9eSh5V1QwM3t+eDV+bldadil4bitdUU9ZbzY3JWcoSnwzLCJFanlTXyRAZldKZi9XOm58OmB4UEJaZz80fSEqV2VPVzZ6X0xlQGJCbzFzMmZOdCk1XXF4JVY/aS5SNXhHP21SeU03PyNHVDdLIUt3bSY1KGJUTUl3eS9JJEJRIk91aXAm''@;'; put 'put ''d207LCglLk9mbXdGIiVbW0l1MnlQM2BbS2hSa2giSXh4JjJxNSVUY29scSp1VCMsXWgoT0duaEA8JHJuZX5+Q2FBXWVIPnF5YCtDJWtTKCFhP1tQVGBfSCphVnJ4L0Z9WCpfL3dMenNtOkY5SUFBc2lXNGImYlpjNyJne1RSQHBpd0MmRzhGZDp6ITReXmVHUHUwPXd2aTBDcml+NkcwOk16cnJE''@;'; put 'put ''PFt4TDM9YXpDOSFELmIpTGk2bj00aERHbl9Fa3cxWjZAM3pDImVvL3JQPGssYlp0cmFma31yZzFwb0ZrInh6SFh2U3doaSpuPmEqRnwzQF9XOmkpOiNlcTdla1NvR2trYjxnW1RzeVErYUJ2fTszLCg+YVdWbVV2MzNpbChXaEpiKzdsOGNWZXxwZC9tNDdmSlAyTEVOQks4JTlwY3k+JG1wKXtI''@;'; put 'put ''WDwoe0g0SWlsVWheWUxYQWR2R2ROZFhET15wczZHSF1GYkF3U2Z2ai9IRiJ8czg6bUE4TGd5KF93YUEhN15YSSN8RWZPWiMwfCYqQ04pc0JsKl5AS1c7QisueF5aQmZdL0N3SXM8Jj05IkdET2V5aG8hamtmXlhNT3tqQ2M6NCEpWSNZREZxdl9wX2RsbSMuVkdZbGNmdUI+YXMrNj0yYmIhVkE5''@;'; put 'put ''MFVebX5QMlprISY8eU1IUCRKVz85fEFJUDtDUUVAcilaTiM+dSY5JjNgMXB0N206aCs/b3FrciZPVVhQZzBra1F+RnVUe302JSh2VD5hWmc9Kmp0ZX1YMmw8bl85Q01xY3gkMm5MO3g5VFZpZVt2IikzMnA9U3MsdiM0Yl86X1JQRDBuNGtBS1k0Sl9oZiNqIyMwR3pWZkpUakNheiZoUkowfnRS''@;'; put 'put ''QFtQWTl7WXtKQlJKXkFZa0ZDTS5JZndTZjwyZSomKFI2Yi81IyU/ISx3JVlzc3teeiZMe3AlPCNOQ0gzVWxnc2BiRGJ+d35HKS8lanlEcC5TRGt6K3hfRjJiLD9ONVs7UFo6PlQuViR2d09tVTUjW0U7SkRYdF8qNUE+WWEhWyFAT2F1UClZLzJRMjloNU5iMSk/JE1QaihDW25yS3B1YjZOJDpM''@;'; put 'put ''MmNWL3ZkNGYkZjRlbllvM3NoKiI+cSRnWG84e054VFVdaGRJNmVCTng1UDp6KnBzWFtQKDJxIkZvdTNsKiwpaHVIdXd3KGEoQEFtP3JHMEsob2NbVjglIyY9Y3ZGQG0icTJIQUVTaz9ZUDEoS1ZdQ21AdVB6WkhCMyhtaUJDNXptRTV3fjc3P0VCcEVXNH1DT35tRXR0RE87e3ZFdWE+QzY5L0F5''@;'; put 'put ''XUR0YU4oUncoOV5xayQkSmp0SXgmZitFd0lyKkNVeWI9KyNWZUVUQ1NBW0g5UiI6MDhVYiNdQjEmVCV2SyhpUCZ9QEJyJXg2TzFvXUpOWWhYY1U9ND8zU2IuNUs4YTUzfl1xIiRndFRnfk4ha1F1UE5KRiVLTjQmUk0vJno/dnc1cHMvVCRJUm85bF1UQTw+UCNFQUdfSixiei5mejFffVtHdUsm''@;'; put 'put ''K3lTYW4xTzpTRHImKnMkbDJfTXRpR3VAPl5LTTMoNTZBe006RVpUL3xZbTRzOWk1SD52NUg0VlAuJDd4a1ZXSzNuRmFlOVlaO2FFKltJUENBIUQrOzxEXSUjWj1nS0FOR3liVUEsdVZ8cW4lMktyR3l7aj9PTkRCUz0sTH56e3pxfW1hPHh5MSw4b1s4c2dKQkBdeDZ4djAhemd6NUsyM1ZDZztO''@;'; put 'put ''WC9pTWBmNCI8PjpOKkMidz9VaWNZR2ZTPV1qMTR5IUxlZ343UEMuZ2ZrTi9MW0lROSxVRD87e0giI15jc2MwQW5ReTF9WU4qP2UhIk0laXk8bDc2VFt7OD42X3dSISosZnVIJlJJXkYyMipAPWNZPjhbQCtQa1VxdUl2dGArK1YpT0YqMlldSl9lPz4ob1F3XTw2dG1LSUBKSDtefj1ZNVNqR1kk''@;'; put 'put ''QWJuTV5Vb1NyUWlIOz4zVjUxK1tLaD54QWVNLjJjQkJ2dmklQSJ8Uz9zI2k+SmNKNmxvWGk1YDg3KkhOdm1gJCpodVZXdEhNJjs3TkE5YzgsU3lFaFVCWjw7dEtJaCpxNWFYI3QrbT17Kk9jXl9PLmRUUFAvYDMwNiw5bD1CYVtaVUhSZ1FiS3FvazczKWEpPHR6dH1aVSZ0fE0kUGxvRWhgQFt9''@;'; put 'put ''YkRSejxoRDY4WnowSnokd09vX0dENCIwY0lRNi40MV97TWs/O0VjfH5NeFlwaW49Yl5lcFg1YilsaGdweXsrbmF2ST82MEFoalFzOmtEVkxDRC5MZHYmOS8hXjtKIkgwJjYvTEZZRk5kQjpYPUlRT01Pbz5mZktoLjxhOFlRWWcyV1g/LGw0MSEraShAMWg8XjA3fEVtK1UhbihjbzVrQ2lgfi48''@;'; put 'put ''KSVZKjIjbSltRmhjX3AzW1I9QiNwInpCXSMva0I2JmwxPnU2OFsuenouPyskWGRuJVdZNVZfTzRRKCFQRHdpKlBERkt8Umk8IXNFOzx2SCxVLCVeTFJ+TE4rZF9HbitUSiRELDRmb0lyUyJTRl9IaExkUlh2UDpTPUpseF4yI0pNQzBmMl8iUFZjNk4wdjl0bSV0e1c1YTZ3Nm08by4xZnI+bmxs''@;'; put 'put ''RHR2ZjhbdF5EdVklRV1LSmpxY3JbU2ouSz8/aVBHK3pWJTN2JkBiPldNcSJjbmQmSm9EL2V8VVhqX3Fqa25sPk0qMl5CUUo1KFcxaTRKV2syNEdrKChVJXttTVN5JG56Smw9RHFeVj02W0ZlY1l6PEVbfjdkZSopNzNwaHkxajw8KzhgTTA6d1UvNCgzYXFdUmN5a2hsZCEoLlUhUDBGQV0hQGVx''@;'; put 'put ''UVlNWnNpUWxfSXMlRSxtPXtlUFI0W0hFRChKeGRSdio8dWhiXW4hOWxdeztwezozcEpla0tAVmcxNEVbM3Fdfk48KF1NPkZQa01McmQ9PzBQI1E+SmNqTXYkLGZ1V2gkTUhQdXNQKVQ7fTVaZHhDek5IcmsuUSNhenxGJDROUEQsdGpKfCpoakRkej40TGdFdl1rP2N7XkN9SCJZWDJyY3xIcXYv''@;'; put 'put ''eihjdntublRWeE9PcCh6ckNUOnJXJFIuXihfdX57MCZSMiNsX1FgTU9TT0BtJkZsODRMKTQsWGwxWEgvdG51WFAvfmV7TEcsKnpjaXtrYHVOfSohVXAmbSZmeV8jezFZL20yentaU1p2SyNGYHlrUHd0IWB0SlZpZTRRNE9LPn5+YiQrSFVKfHV6Zmk2WlFkSXJwKC4waTJaPyhgPCZIO0B+UFhK''@;'; put 'put ''QmUlWURYJSpoSUgwU0p7PzxYS2x3dXY3Nj1WSnx3Lm4ydyhsfllfb3M5QVJSVi5NOjJXa2lWRUg9KDpzTCVLQXZJYGZXZSg5OTMrLjZ9azBEX1gjKnVzU05aTVBIN3ckL3dVNFhPdTR7L0ZfJmFCdkREVUtLV3pjc0V4ITg7d3J1XVVyXy90NH1JaV9iREk+aG42Si91XyNZISg1L21yekdOWigo''@;'; put 'put ''QS5aSENbU0lAS09QWlBeO3dzbSRJYTRLX2U7O0xgX0clenU9ejVXW1pvRFtTJT89d094NV1GRXJYUUFjcGRnajxRVEdVWT89RDQlOjFJfkBidUNKcTgrOEhbWCE1cWNic2hgMiMrO0AmYFVDYyVSPng/aWorakRAYis9SUovUEFZRTE/YTw/Pm4iLks9SE17QlYpUXElcCEqdGYvPF9pLz8sIT19''@;'; put 'put ''P09ral5DZU5ZUWdrJlg6JTZqI1JlIVZ6PV5kNlJnPnN9UlVqNEs0UVlFLG9pbXpbUmRRaik7ZERyUHJ1ZHptJVRKQ2JQe0U1WFZGZEdLeHpXeiNtfE9LOGAkcTUpL35QL3xbP1skXlohKDdtalopZElsYFgjOTkjQ30wLFNENnJkLi5pMWNqa1VPbCojZjV9PnJDdkxFJHcreTouS3Q1N3grL0pq''@;'; put 'put ''Ny4sblheJix7fVBDUSxqRHB7MHw2ciFKNTZAQE5OXkMoSGAzJmJaPk97bD8rSDwrd0FtVFJmI3ZDLHZicnxqOl1VK1I9TWhCckJ2KX5lVGRoNnMlWkV4eDtSYCQhPHdARChkcDNwe2lHb1kwUzFtLlp1O108e3U0fmZaaX1gXkdfW20zfk5zLERxVikjeX52ayZlVkpCbWwoJTNDVlh9M1laY140''@;'; put 'put ''TjROZy81MEBESVZrbm5IfGgyWiRzSERSPTQsa0FiLFh5Q2gqX11MQmZXelRYN1pqUSlUa3leW3UvMmhgY0w5OFhjK3xWdnZZez1kUHk4fkdxLEtCXU05NCFDfnRsZFRkZlUifSR6ezApP1N5UitCPHouSEAjdEpKaWZ0PVtIKkVsIkF6THBifVlDPSJ6dHliRjNML0pmOElCTjEuRzkzPCJIWXZw''@;'; put 'put ''TUsxL09tSVZIXylfKD10czVBXU5WVEVmcUh8eS89VSUkUlBnYEBzY1kiVD9banZCfX1qQFs2aShsamk2YkttbyxLQnw5IihGXTZHUy54ajtDX24wR0FgJn5EQ09xd0lLOCtCKUxzVS43Zz4kSEVPVS5lQHEqZXtzLiJBPGUjOmt+JWhNczBKVSQvPUh8RH5jaXRuSyVYYiNEMXJ1dWVsIXk3N0Zj''@;'; put 'put ''eV1wfncvQThfOD1kTnhzMkQqfDB8ZXxlR0JoPiJncTNXVz5HYjxebnpvdjFTdTUqZF89fHt5bWZDZ3k4SkhlRGk5PD5TKkBQVmUzU11uWXNzJHkyRUFweWNZRi9gT2B2cVk6e3daen43SWcoeiQqN18zZzxTSm5VYnttMFhSczckPy9PMl91bTxxW3MsQUMialVRZktVQlFvZCxLYDUuOkplRjxU''@;'; put 'put ''V3g3fH0qTG5Lc105OXU2TVp2OWxqSiREaH55R2g3XXdFKX4mcmJUQ3xJUkZYamU5X3RpQG1oJXtxU3hYYXVLIj5mSFR9QSxQfHRuXWd0RklYQjQvbERXRXRDbUwpfkRAay85O1Z5WHprey54PFRKeHhtPUJUaFUyajhCTjRKaURITzQ2OSZDVD42dCpxXUg6M1UuKT9dUUdgWUdtYHdqIWMjIXFY''@;'; put 'put ''QWF1b2dBQyp0a1M9U2QheWxKOXJmcUN6c1MzXmVJMHJnaHUwZHZXeCZWQEAyMkFgYzNbRz9iamx9MyZ9dD9iX2g0JjBaSTM8OHNYXztkMFBIJmNCIURDRnY5bCY+S1NdYz95N2NNaTdVdDg0OFkoTixaW05DWjU7SHxNVCJKREJYYDV+YFMseC5RQC9HfUtLSShRJF9TaytqYTQ4OmF3O2k1NHNU''@;'; put 'put ''Kk4qc3dlLz54ZSE7SEghYEV9aE5hRTZScyQlO3RHRTdiM1YvTXlxT1FgPU4jZntlbzxlN0J8c006Z3xPSDkydHk3dHROPndCWEE6cENVN1ZpbSVkLG1QUXFSb0RQfT5OaWhgQD9ZZWpLKCZwOFkpLHJBeUQzYmAmS0hWSn4mcXxEJEBiSCsqb2kxKUUzfkJnSVUobzlCVUo6YGFhUkx8QmwoTmhA''@;'; put 'put ''WXYpLisjSFRpQm9jNUddNlckNjE1enE2QSJNKkl9V0VgSSU3VUpBZHZKJnN8e1IuZE1KKyxaNEtrL3l5OjdpJUl1IUAuZFIvSVUzMkJSSmlidmxgMSkrNz9PYUBDRENUVj9kQERmTjo7aihZPjBdaiRXcF0/N2Z2WlNQQjZ+RWIoJCIrPVRXWEpdWClEKX1EQUMmY2QkRVNhXWQ/K2hnQ2JMdGhk''@;'; put 'put ''Uj9Ya3c6c2gzN0l9JngwJlNmSlhTNitmOVtkPFJKKmR3Qm5IN3NmPUpkRlNeLnVDQEZgX29qN1ZAMUhYdnUwRX0oJiZDQTdUMUVmNSFLaTR4RVArX11IIkxrTWphOkomdXdhR2YxKSRtNEJWaztKNXd8WTo4bF9YSWtad3RuQW18S3FNTSxKSUcxYmQ2bGA9U1g4WnxyenBGVkYlOi82ZzMmUntE''@;'; put 'put ''O2xSTHpfQz5FS3h9L1Y6TmFOP0wzbm0qIlJ+UHpPVVFHYVApNStmbSM1diVTMmBPRXF0YXUiWT5zIS5mT3lrZVk1a318ajowNU8uIzBteloiNFFFKTcsRW1HZyFOQlhQS0xkSklHSG0yW35ZZWc9NXBoUzJ4NDQxZGJrN1c/WXFSdEpkKTdTdVZ7O2lwX0ZPTn4xNUU5Sik0N3FYNDFiW19FTnl8''@;'; put 'put ''ai57MHZZcVhAekg9QlU+JVJfKDR+MVA3NU9Bc35KV0x0Klt7TUEuRmdDSHU1WUUhTiVSYl5sbHxFSGZ3V1JDOz5bd3dMej0oSUUrQzZAPkhCSG5tKm1SIlBOKT9zaXBIWXV1bzEiXlNsQXdxaXBRMUMzVjIyQHQxMHhDeF9dTFhNNlpkW2pGb095dD9OIzduISs0d08leGRPT0N5P05lU3kmOCg4''@;'; put 'put ''Rl89NDZ2dFlYTjZrdjg/U11vciQ6M3NzQjxIMTdCLiFSd01le04pOm5SNURHdSJDRXo8SEB1UGxoP21fbF1NYiFzPitXUnB6QDxKZHdPVTk5N2l3NzR8OHVoazA6OXdBT0RJKX4+MSRBfVo1fEZBbEF4ckRITCIvRS8mJi4uUENIVCZ8NH5zdUZCYlFAKXg9QkNKOWxIPEA4NzNIS1VLZERQOl9A''@;'; put 'put ''RWEmL0VzN1ovJU9YNlVmOkpbP2dhPUNHQ3JmOXUoc0Y9U3c/KGt8aWZDclBiSUxhVyxGW29eWWh7RlRic1NfRWd5SiMpfTMxJTFWekRMSUlkfCEyUighSW8yZXFucWImOHkrL1Q0XldYbUI5SiwxRWd+RHZWVW1mXW9peVByfHomfCloJHxJTklYRV1JXmtHYW9oc3o2TyUuQ31HSFFXbXxYcy9q''@;'; put 'put ''bTNYOHM/Q1RrSHwjbUh1dTorayNQP0skOH1CSUdYVmJoK2A8UkYxX28+cStkR20sXjxEaSVqWnR+fDRTSVE5NzFTISp+TkhPS1lmalFqYUBUfmQhOFhodn01Yy9jYlpmN2FoMmNLaEYzbG9mWU5xIldzai8wWlk3aVpKSFlgakJHYTNPfU45JVYsV1hMZDY4O3ssOl9Kdks3UXZpcllGazpLSVM0''@;'; put 'put ''Kjw7QDYyPUEhNH1De2gjfjwyME9tWmVrPGJILkhoSTM9MGpyZU5zO2pWfEExKH46Z0UjJk5vM3ZbRV0jMGMjLGZeJUgsUGBtcHNQOG5zVlAvVyZlfTUpTTdjMHJ4KWdNSTVZQ1M7S0c+PUVYVCJAWTViYkJOc2JuOE5UVV58I31vXiRzIzVnPXdlUFR7cXdXSSl7cHZeWzYjMmpvajRgJldxbGBJ''@;'; put 'put ''ZFN7KnY7fT8uWDcscGMvbTI8ZHZXcU1EdEwmZHk8fXspPX05Tng3W2g2bWRBXmNhZEF7OT1oI35WTnlIMyhEIWUlenI9JnE0PU9UUDJ4PHlzPi85OkBfZklSXlNSYzZQZ21fQ14yIyFSMmJjcWBgWFQ6dTYlXkZndUojZSFPSDw5QGorWjZlZXZaMiN8MH5uaDc1Rno2Ti5FcXJaa0ojUTcsXTNq''@;'; put 'put ''VD1VJCtiUTxWW0JUI1VVfiRULHZyL0wuOEAvdVJnKmdCUC95RzwuckxefVJoLnlfXnRsS24+MWNmIjZFSFZHJXRPR0VMIzA9X1Q/RSg9Kjs2ejcsc3NWYGBOWmFrdzN7eH5JPXI2Wyo0PGR0e0B0a306Qlp3K20kPC94RjBdKWtQdEYidUkkY3RfRTFXdD5HdmApbDNPRkVyYyZmazE6dy4rIWtB''@;'; put 'put ''XSFWTHBNazQyU3x+eCt6fWZ4PDcmVCNQO05SO30oOmxrT00udjA3NF14aXd6MCFrO2twTWYjQW4vT3drTDxJWy9eK1MkVjdncT88RnA7UHN3IlRMPEo0ZSopeTRiZiM8fW14cXs+Wyw/ZHFsV3pHKklLInMiLn1CaU8yLyJxKiNGRXpVI1oyaj9Kb30mK2g/RXImMk8zbHI6I3xXMF1AInpoTmtP''@;'; put 'put ''emttXz5wSmsqNTJ7KHc5eCs3Wmp2dnhJTV5aWlU+TSVXMHNESlNGfjR3STdLRDoyeDljSEIrfmRPaFMxfF9td0VfYD9PPnEvS28/R1h4O1psWE17YzBKU3BpZnk/NGd5O1FpaURlc2lzcD1CWiM0PWM6SWhJUCpAKS9dSyNLWWJobzQlN0lpLGhNK0UhUCFgX0xtUVFkWj4kdDImRTsyZjJbIUF5''@;'; put 'put ''ITM4Rn1GWnkkVXxvXzw9S14/djw8K1RYIXg6fl1MJVUrMHdiVl1USTAlVjlsaWJiSlR6YWtmPmpwUSxkPFteOChaU1g8UlMkT1BxNWgpeEZKfCpRS1hWdXduTlJNY3M6I2h7dT5tR2EiJmBzMklQLGNPInN2Z3BRPi5ZfiFIP31+STtZWCIhJSM3TDZ5JHdGaWhiNzBURX1aME4kIzVoKHAwRW5L''@;'; put 'put ''Vzw2LDsqTklgPHg4fFs9Mk9XeV45WS9CPF1fJmVzdWhGcyYkfnc1WWR7WDw9TXt6PV1wMDFLdklwVzRZWEFIemBmSnxANGx6MlZMWDpeZmtwOy86RSQjUElYQiNueEBwOHI5JE01aUA4fXVKQHhveXdyamxpRitFOXl6Sn00VzhnR1lWe2peJmRmN2tfZ1ZUTHBadWRpMm5LaEwpMkE+ZDw5eTN4''@;'; put 'put ''bHArTClwLk09cFZObDxUJm4mP2RUPVQrXT1GW3VLJDRsaWAzW28ycFQ1OHlMdmdPWT5oemF3YDc2OFpNKStLRFI0JEhSaTtkbil7JFNVVHh9fmlAWWs9bUk0NnZGQ3dtdCheRG5hRj1feX0jRXoxa3QzfjU9O25AJm0rKXFKbkxieCN5L0dAMVJUNGZnZkA8YHtjWjFxLCk6eGllbExNV3gyeWYx''@;'; put 'put ''OlJaYS9TZkpDdXEhL1dKfix6Ulh2fVpbdSJxUT9DbWVSc1BXNiR7VzJmbG9NQjglSXMhcmlwcG16MDQybCFsezpqcWZQRSMkUnlNKD9uW3NdSltRVGskfihQem8qN2ttPjpHeTdabyt+PzddPmM/PncsXmQhInBRWXtybzN3Uz5CSyZwOi8hdyRvUEVfQ19qQHNgUldAdjt7bTN7OTN+ZTF0SF9e''@;'; put 'put ''RzAhPSJ8KmleNXUkdj17LDczbVghZ2NqaUkjXWdWPWd6bSxpbTF9WHBZeloiO2lIbGtEJXM1IyM4aEV3dUtYdXAyeHQlRkhkWDY0SldqTnl6NCVxMiRfOH42KXApelU6YnJNLDBbKSVIRnJ6RFNXNEU8M0sxWUJFK2RXRlU2cExxZmVoNmJdMCN+TjtSd3xYJSY3TXlSPEBrKU9UYWw5IjF8ITQr''@;'; put 'put ''XjpuRElTaSQwZXBSRTlqIU1eYUR5Z1k6cEV6Wn5eVW9MUlU0IWhdNzszLFZEQXh6ZDgyJE5ZOU0mdjN4LEdaTWJoZDFSVmRiIkkoe3lxKFJkeHFvI1FmUnprYG9dWjJISncwR1c8O357cyJXRXBedDYlU0xoRkgjY1J7eD11WEoxT0YubSFNcjspIy5ZZjJHfDNUN19PWSZWUFpJX0VuX1t2UCF3''@;'; put 'put ''a0kjfV5lUmZwWyZsS359T2xRKG16OEheY1c7fj86KClrTHkhUnRFUUBtal1LeX5DSTJOai50PHVEQ0UlVjpbXyFxOm1maUQ3fDo4WzY4cEV6PmdFSk03KEptTHpTfThrTT96JXRVZjk3XyFZSW9+QD9Jcz1Wb0I/XSE9ekhKJHBOOWViPGBHZylzIzNPMEI1WVUydExAPHUuZWdPcGY0V3xOfl1m''@;'; put 'put ''eHgwbVpdRmdnbSpRRVlROEk/M0J8Vmt0NW4mL2hhRn16V1BiLj0uaEZpZHI+LzgxJDJxOSJGeSF3OGclRmc4M2cyN3pPLkFML21gVlklMzt0QkFNYmBIZzdyNiZuay5gXVRuRiV1ajRuKX09UlleZjcsJiIkcD9ucSN+RDRqVjF6W1tLVTI6PmoiVEZKNUZBOGFLey5RW0AsYGU5dSZuIlMzZm1O''@;'; put 'put ''KEM1cTckcE9bW3xDOCwxImxTYTJ3fGlzSGojaXkyQnY0NCZQO1c8eHVyKHd1SnAhWyRQIzJKeyx8Lzp+dlRuc1tuZnpfOG4/fldzYTFeZyI/empndjMyUUY5Ii85TF12Ri5lOjZiYjJbP3hHM3BVJjErOTl6WTVobTFAc0RAdCYsbFs2U2Z2d0ldYVJmaiU1cTckMytIfnNCbjJgR3dQUkNHV0Ek''@;'; put 'put ''d1V3cFplUCpIZSEiTTlrVVF5P20iXnR6YCwhUkQ5bUt1RVJIPCoyJVs8YTpJPmxdbUZ6VDZxYF0xbCwkMD0+cUU0SkM0OW9BOU97LGlCe0RfKnMjKlozUC9UTyl9LHM4N2slNiQ4UCVTOiMvLFJWTyE+dDJEUHUseCIqcEZrWDFdOToqWnFYRUk6U1ArXnU7MHpLJmE9ZTF+QS5peXRhNVRoLE03''@;'; put 'put ''TW8zLkV3NG5RZDF0emVlUF5NbEFvMDswX2BgR0xiQnkoUzAwYjV9R3dAK3deL05BXTRKZUNsYWo9ZnpEaX1XQktRTHwjWll5ZiJsNnIwZXNFJEhkQDdZRT57QWs3UXwoNlBQejYpYiltbkdTT01tUWRmY3s7Pz5oSX07I0p+Q2JOcCxVR1huMkk5c3ZGTHN2UGBqdk9kSnB0e3J6cV9rV29QYEg3''@;'; put 'put ''aVg0MXw5d2tvZEFlZFtOTyReaVtMVG9NdFJCMEU2aXFfdTE6IVhyZ2xZUX1gISlDJWtRUmo7aW5eNz0wI3pEfmpPJiZ2dzFsXWhYQ1V8SDNXOzdNL3BGPnJSYmhPKXoqLjJjdHJbZEo8TkghSy9SWEVDbSlLR0hnS0BJKlBpQktlQ2FkfXNlSktefGpmTj1YODdjJTo1VlRaXkdlLFZnM2RIZila''@;'; put 'put ''d0JZKyUqTU1oUDQ4YGgqN2xFbEY4JCJbZCFdRmljXVRYZCsvX3QhZ11uPHlHTVtaUDM9OTM/PS56WnZiVHNTc28lc1hrW3olbF5raVl2V1VYcmRKUlcvK21QWUtWW3RlYHRTJFM0aDNpei9QUD1eVVt1e0NMKiE+IURBRW5TIzU8UUY9Wjc/cC4/MHtHNzFnMGBIbjZhSkV2bGpXY1NKLkswc0B2''@;'; put 'put ''XUp6KT5BVCYxSyFZO2d0UmteSXo6KEBzM0dxP2RkN21bdl0uYl1fVVA5LDcrOVlFYTpQIiRgRCYqW29UKFYyJk9BVHh1Z09ZNiFRW29kP2E8fDV2VzZzQmdNVFhQNFZEWjp4VGdKOmByOVE/SmlMRDx6I3dzKFFGJC9YYHZTUjV5Rk5taj93MWRsTn01WF5MQCVsTyEjekwlbiMkNltdIUlULCRN''@;'; put 'put ''e2pmTC9CYlE1P281Mi5PTEk3IlhMOi89TD1PaFNWSnVAcnJ4SnlAPSRtIiEuN192SilSZXNLV2osXnQ+VFMwImEmMVoxK09FXls7aDckUyw4dnhpdF1+PnF1JTR8fF0hQH1+YW1CLiwsczsuKnV4LkJDIWVtNEx0VCgiQGhfKltkMnB9Zks/Kng0PEAmeDZbXXl5bGR2KXJxMEQ5STU6T1ReVVt3''@;'; put 'put ''eyZpPjhzMTYyfF14UkFHQWBKJU07L11OMUBKMHwhPVFqUyF7YS4rUSt+SUt9VCk8RG03XyU1byxZdX54RGRyd1F7Nnw+fV1Wb258PzVjRmZlWjJ7NmNeXm1PM2s4LkhuM1I7ZHc6VnM2IUI4eF8sdFhBR1RaeW0pR0J0S3h0a1E1VnpdP3ZTRTY2UiR+KVZ+YEZsKiNzLGx7M1Q4W0cpR2BYZTow''@;'; put 'put ''TzpaLzQ0fEpSY2ZFU1gmfj5uPm0qZzVHY3RFMTZbIi40czdGZTxaNT5XRmErY3NVI0BLaGg3KnQja1puZTF+TnJ7fGtoJmhhQTh8L15Kd3tLal48UH5qKnZRMDh4SDBeJD5kLDB1N3BEOTU1KyUzYWkvVz12Nm9mRTdGOj9wb0txSU46XyFCSGJTaSZSfmhoaks+R1RyXyYwIWsqRWNjaTJScV9V''@;'; put 'put ''UW93S3RpOFRUM2p8MFZiUVt5WlRMc3d7UCZZZ3cpUiw/Sjh3MFMsdVBBQyQuMjBnfFZaY1tKTzFATiglRmosQH5QY085SnYhalN+ZTZnJjZ0SWx8fG58V2E5LnZickE6Y3JdcklpeVt6SUJ1ZSp0cTtBaGRzaWloLHBkcjl3UkJJLCVoNC8jIkxkMTRUPjNnNzNjUTNAalE9MzA7aXlPZjlhWW9r''@;'; put 'put ''bHJNTzMlfl43XjVnMG9wO09qN1h3Vk50eWxwa0BLJGhkUiVieUgzKFs3QjksWDEvYXZmRU1qOlRWdWU3N1llMWZoN19nbUZ1SyRnMSRMUjh2YTVmIml1NjokclFoTDRreWBGcHp2P211KmJbbzQ/LikySiExXkpIMis/JVJlP141MHA7SmkyIzt9fVRCaiVlNCp+elRYZ1l+RWghZDAsWylMZG8p''@;'; put 'put ''fmxdXlU/Zjg/QDc6JEhEfSkuRz9RQ3BfTyJtXWpBNXg8cGF7KHtbTXMycF9qQmZxMSU6ZXB0NG12TTdoNFQlcnU4dTFsbnx3cXNiJmdCaEhONVQ6OUZ8JmVTKmM1VkcqT0h3YENlSHpbVmtmMVsxbEtnciUvKWUzKF5COzw/NHw6Rl8jJkMyVENOPHw4O0d1VmtuM3FsNGhVKlU7e2lzPjxpJCx5''@;'; put 'put ''OGpjJHlxJCFrMmBKSU9OMXl8IjFjTlN4UD9pTUZfbFApLG5sYGFEV1VsRWU+ZjVTKytAdmwrPSRndD9yMFlsOkNjMSo5UjpnT1pgXX4xUGVUej9WfUwxP3ljODlOMiVeQyJ2PW1oNi5pOGpYMEV4a3E6XVpWbl1xKWZgME4vbC5BXitAWSFrcl9MIkIvUz1GLjhWKVReUnJVdl17SmYjfXk5eT5A''@;'; put 'put ''QDQmZVJIYkR3KHo9cnFYKTF2LnZiX3Z1d3I3NUljdC82TjchfUc2YmFmRCksdEEoenNBIXFAVExSfVhxTTdiL09wYyFCJStPUndiXVlzdEN+NnZpLlg8RDREZk1Te1QpXU8zYVZXTWRaSyVAVCt0SV1ranZ5SUFCdkF0JWxZfFkwV0pqazlOJnFHc3IwKzNTeEF1JV9Yej10N2dDM0FkZmNgVmpO''@;'; put 'put ''QD97KzsyaU4mIStSe09DWjxffUlaQiJTdnl6blNDUHR7Qn09R0tJVEwsKEYkbDNQOCkwMnJ+P3pFcTFmVjd3b3A6PEY7fEFAJH1jVHd6PllKN3hXZ0RCc3g2Kml8MWhtfk1+KXYsMGBASipJWV10dTpFUik7MHZgb25BUlZMQTR5RVVtSUUvOGRPJXA9e3R2cypNITxxRHNhd3IjcEZQe0MjOF9N''@;'; put 'put ''fnB9cHZEZTFkKmJOaCpLWlt6OiZqO3UwO2d6b2ZnbmQvXTxKZHFvRSFMX2wqREZiZWVNeWtHWjgxKSMkRHxWJGIzcSs/dHlKSj14WnBfRiViTCY+RncpWUl1YyoqZG8xRWIqUn0/T1Y2I2tUP1hnPiViP0h0L0B+RjEqPCs2MmlTWHwjJXsvfmAqOjtnfV8zQClmaylgIlVhIjNlb2FTY1olUnQk''@;'; put 'put ''aUx1ZUY8ZFdjc2w1bzpxcEtmVStWOSFNXXtkT1tVY15AVjYwclM5Vk1tPWZgakx1MmBtZ15qSyh6bCJqO3czPyNvRCRpO1g0M1NtRkkjdlMvRGY7NHd4OWxOVG5MU0hAdyV8RlAod09PcC5DPmxudmttYWkxKCleLnE5fTM/NGtzOHhncjZFZzg2JG8raCx8eSEuMGdbVUI3Nis9V1drVkFxczBi''@;'; put 'put ''dWR4RHY8Xi5yKFYiSmhNcHAiNHl8YHpqRypHTnYzQFEiVHcyXmZkcn1edztkSU1LJTguT3JGfSFdLyY8K0s8Mnl9emJ6a3diV1NAQyg/ejAxU2UqS103RHI5N0FoT0Qzdmp8T0JQc0Q/YTBAfWN3KUpxfjJHRm41KX1sUzN3ZihDd19uWj9zQ00oKnx9c2EvZmIuXmpeU3dyOFJBKn0+LD0xUlFB''@;'; put 'put ''LGx1YFBXQXBYWzspYXVNR3ZRfE99MnE3JFQhTHtnJXZQKW5JTmU2I09mXS98Y2lJXytVUTgpdGcpbj8xIlEjTmx2JSxpSnZENCtLOks2Ozs+KGhTLHR2MGd0NXRxOU5zc3UzNyQ6QjEjNWF0NV1jR29YUC9XcHZNO1ZLfGNOK1IlJFMyamEvPWIyYlB0MGNnYUtDaUVDNGZdYiNFNkxlNlg9SHo+''@;'; put 'put ''NiFtOz1nd20sRTVTLmljOEYyYU9WWE1gTzBaOWtoZHphWnhNcm9kfEpleWo1U2VdfTt9QTQ8SU4+R3JxMFIpZmVdMU9oY1JWMUJTIzwiTTx2QGIwRHA3LGxHTTF1P3h+TEdnVylrcCxqdFp4PmhucSpiWWJeUkBUcjV8YENCN0Z4dF4yTW5qVm0hQ0N5SFs2VzxtO3l5aDVGPklOcVk5ZzZzU0RV''@;'; put 'put ''cyJMLiZZd10iR2Fwb01PazU2XX1yIyJWLjxgIncjRFs4WHBadTVKZDp0dHBXR0JoIyElTDJKOChsZnAxbCt0JnNuIkhyUkhVcklnTi5ecCFjN3xiY0cvVjg1PVczKjZtNnZheUJJXmw+NUs+LjRmem9fS3pqVH4vJld4IktAP0ZPL0FXKyxJLys6Okk5a0Y+MShkRFlbPnpDN3pQPUUie3Mmci8w''@;'; put 'put ''L1c5VVN2MVVxdk4zKUpneHhNbTM6Z2Y6TiI2R1E0a0poRDtJe3oxfDp7enltZ1pOQ19jbEJ7Q25FUGF6MVlIZCtQKyQrUCxhNWMydlltISRJK1NsW3hlckJAOz50JHJoJUpJSWhLblVse18+QSRYT1d6Vn5WeiJsRyJYInNPd1dUOl5MUVJHdk53Q1J5fXZHJStUfDApLG1LZnZNeDd7fiZJdGZq''@;'; put 'put ''SnV+UU5UQWNMRENhR2V3PlJUKFguakleSShoM3hofT5XbmlheWlLZi8xRG19IilucVhsSjlgZnM9fW9tfiskQjk6WyY5KWFUKXIlPiQlXXtBImBrRDI1M2NFTkJpMWZhOVc7QDgoVDl8P2p6cmFLNmt6UDAlM15oViVVSylIJEQ6RWgmSn5HdC9WaHEvQG8ue3s7aUBLeXp2WzclWmtSNFBWLEgm''@;'; put 'put ''K0E5XXE7Nl9DTnslMywld2pmaWNpS25gRlpNV1JHdUlsXUNZKTwrJCV9QndaQntHek5QfS5pSVh3PXdXQUpTPCVhcGhkUDExcTBCZXx5NyhVYV5+WG5XNjlaUjxXPFR3SHd2diR3b2JkKH59LzR+c3ZwViU5KntGaXZ3VGEkSmU2e29DW1hFJlc4bzJjUTErWEw1PSZ4YEkuTVViW3ZMI3QueH57''@;'; put 'put ''LmtBKC9ZemdbZmFGYXdTbEhlRUo9KyliS1EiPzsuelJvI1IqfGd1JVhVLDxRfHxrVDY5QkZxTzx+SmFCYFEqTnc0PmdpYWVSeDAjenxqalNdKE5JUm9CdypwPG1nUU18Xms5SihXVTo1MHsrK2p+c3xXcjFJIzNydEI0QiJwOC5hK1FBKGhrZGFEOj5HJFs1bmZeKExqdEZmXitnSFk1NFZ2d19g''@;'; put 'put ''UTY+QFV7fV0hcEE/PT9mSXYvVEAoZmM0QDkpN01ZND5EZm9LTjNENExLRF4uVytNRVRUY2k7OjVNSm1RPio/NT9mWk8zd3dPMUh2PHM5SnxdPWRMWDpnKmR+Z318TzFWTi5rX24wTWhKTHNHJWNRaz5mL1lQRnpBXnB9VH5yUCZoInxESS9YNXsrInpXRXFBLFg2MVhISm4zK35ONnBxWntGUnZs''@;'; put 'put ''MDh2UkYjaF9pZS8pR01ob1d1ekxofDp1LkwmPj5Re2NMMmBSJiV9XzlUJHZWMkgvKH46V3BnclBAXj1JZGsjXkxUe3RIMztveVZ9V1tXXlElJm8rZDhGWnJJbGZtSnUjWV4kLk5yKVN6YmZDZjEkVzM5c3lUOWRYTz8oWGNvWEdBQWN1SjswQ2BwUkZiV1h7NGlDQTlwQUZ6VXV1YXRfYnVEM0hT''@;'; put 'put ''M2tFZzJPVlY7OEs1fVgpWShmJnFDXXMkdUleQTJYSGJoMFhRfWUkNE1rJFRydGcyY2N+b2ZaYUBCOHdQKjVtRHE5Pn40eDdkcUsrJFMueix5YVhOa2NNa1BwenI5cmElJiRiWTBWRXhoJiNFXlBjfX01fSFSb0dma1N4VGFIeyxbYilhX2l5fHZlREooYSsxaTlEW2liU2t3RVBFaFYwc0NqQVUr''@;'; put 'put ''QCJ8X3Z4I1BlK1FFZ1Q0YiFUJGVYMnxEVWV3SmovckdOe3A6TTg8XXB0ZyQsZFsoXkA4UUxyI1BlPFRwPz4rfDV+TUg3VGVYWV1PcDZgbzs/eyosPDp5NnAvQzYxSm07OnglUiZVKVRIQ0smbiRZZ3M5fCVmYm1xPG9BazsveFBUL1tjOmtvKEZ6a2tCKCNaSD9lIURVeSh8SXN3ZC9CTi48RF5Y''@;'; put 'put ''Mk8lVDhCWyJ9OXcmSTAwTmpaPjpqc2hlJWROb01jaVYwOD1kJX5mTFR6QF08a0trdmtNeFpFSytgQzFaYlRyJjl9PEQ3c3hgV1BIfDdOZW98XmlZZyZVLkp1TzAsKy9HLD4qWDd6Xzs6YVVEIVtbLHJdcFdhO0VJej5IRCRKKylQSDVGW3ExP204KmdKOCpzM2J2RHFrU11FUksiJSxiKzhPIXg+''@;'; put 'put ''fS5qWmJZV3VIW0k5KGBlekA5MldJWyY+fFdmIW1VS2NncklTQDx2dl19OUBzeTVIcmZ+dCMqW0tpNWRfWy5tKl1zUUhlJmd6R3plRWdKTG1yOytHPCx9cU9bTWt1TVVUdltHRmI0LClIcVNHQXNad1orOXdzPjQlbUdzRGBXfXExSnxkYzZDYTh0XUttRz1jO1dQQGRgfn1JVy9kTFY0SHlTeUNQ''@;'; put 'put ''JEE8bkU+KFR5X2BZXThbcUl9RTs5WFUjWXddeHF0fSx9QX49c35+MWFxPmAzJklkdj1UfSYlejkjaFJheFBPRzhYYiJPLnBaV3thL2ZWdVRUXSsmVGsjTnBvNWooWT09fFB1c3tWTExnJV8oIkBrbFEkOXhQP2ZQQy40LjFqQmhYI2U2MUlYXWFMeDAlWXROU19kM2BNZGwyU0VtLmMzPypdXiIy''@;'; put 'put ''LHJPNUZrJFpJTEJXMnRkViJTQngzWC96XTV6Oj1oLztgYmwjPUhWfGR5QHRtW292ODEycTRhRChVdFBecXlOS15kO0hdJEBpPWhTbG1bXzVjZXB3Zi5EeFBIcW4rcWl7LDE3VTVsQk5UVlo/R1VQPzBlZlJfTD55UlU1VXxiUHtgcm85ejkzPHdVUC84TWVxcV8qOHwudzxpa3hAaz8oWUdTOW5W''@;'; put 'put ''a11mNG8qRiRidCs3I2pDVXwiJk9FIyRCaH5QLjpoTGVJJTpreX0pXVthZCIqOiNxPDxvWnhBTnNhP1E9dVE7Rm80UDVCRjA9Pmw5Ul46fFhAZUxtdz5SI1d9dEd7YzhBKmcoLCtaSW1WUCwsNC9JLF09U1dAJEgjYmp7ZFRjc2AiVnU8dFo9MWEkczI2L1pkNkd3IilPWTRIOyMkSjRHYlM3TUJw''@;'; put 'put ''NDtIelNjXVhsZ008WE5Wcmx5InFlP0E2SGE+TF1kYzRmZW19JW9VSFVWczsraXdMOU94b2RzZlQ1Kj4qTVBrZXx+fUl3KGxpYDVbV19AdnNEQ2ojOVR4InROMEM+dXBIK3UvKTBtIixPa3RZVUJ4TDhUZGQ8Yk8xIzZyV3d2YEM3PEJnKFVzUmtWYHR8QmtGRWpLRzFlaStCUlksWWNXeEU/UVd7''@;'; put 'put ''bV0+Iz1BcV4sZXZKaUtNRyVHaVIlKiVkQG4zVF5DMlBpYTBwNTcubE0xdHQrVH0qR1RPbTwzaTRhejhmSiMpJSwrb1dQOm5qfnp7K0ZPIVpFU0xbU1tKZF88P1ZPXStOXVpZKGIudyF9KmghYmdqQTt9aixRSXtsSz0qfHAvNjJAeTM9Uzh+cCxiSHF0ezdKKW9BO3pqMUomK2tBKiZ0V1dQczo2''@;'; put 'put ''T2ZEajNgaX4kJDtUXStudyskdC9iVVB7WSRzWzxFYns3YzNHSHhgXloiZmk4RUkrQnk+KlVvWyg8Pn1bZE15QytnWGBLPH11YGh5ciIvejlKfFg2czdPOEFlS2htOUA+UClpKlsqLGIpOFdHIyo1SVZJO29kdVg6OW5NYSN2Uk5uNlowKkc+WVBdV21YOiolZDAmJF07TDlOYmNTLCgsZFNWQTc+''@;'; put 'put ''U0BDKHdbX3FKNHxgJHBOQHchRk9MaDo+OypzakIwcS9dfF88UDMvRCZ4a1BHQGFaZWc5Llo7VEhPM1tjb2ZmMl8xQTssVVo7aTVib0Jneyh6YWxtVjNrLDpLQlMrOCpMUTJaPVt7MFp5Y0x1ciFzNzVkJmhndiMhY09gekY4RyI2RnckYX4qYHpQTFdRWHFJMnZSczsrPU1FQ2RReTBNVl58bUgo''@;'; put 'put ''JXVtQGA8JT8re35SMj5jRGtuXylfZT9LN1RhITtBVThzeVV9Njg+SEghPH5kamVDcEgwL24lJjNhfiY/YVg1elc8QzRLKHExNHJAI3hpWyk4MzY1Q3syIT88OE1GbDJLbmg7SkAkNU9iOEt7QTIvNG1JP3FVKlApSl55ZGZEIl1valZEc311cS9eIXtYKSxvfltQN1k4Ono2flBQMlgyVmwxQmxx''@;'; put 'put ''NUtgSWUld0BNIU83aH4+OVlvfWczZTh9biZhP2xENVglJkd7fSRwV0x0YGE1Z0RsfitSVExYNSFnS2g3cSI3Vit2XWg7dVJxOlpQJi92fXAvMnhtU2hsaG5kLEEld345Z2csS3RGJVcvJnApL0E8UU96QCpGRl16PkokZSRrVnlNVSQ7RSV8ckchfkt0VlFQOlNheVlPIWZnd3EiditWeXMub0wh''@;'; put 'put ''PCM3Mm1AeTF+STpSbXpOMC9EbEVLWHhdV1EibXVHUUUyQ1N1al9Ka3ducCtQdjs4N3wySDptRjBuQ3BuI2NOKz0hYD9YXi5FaGleLGdQKzY9bUBKSHY/UGRUJG9STGdySDM1UmU9fW1yMTQmfk1zMEQ1bVp9QEhxbUVpfCQwV2tvSTxNOUo3IyYyVH00T31gfjNefDJRL3xkfUduUH1eO1JXezs9''@;'; put 'put ''c3EyI05DZFdocXJKPlZmc1JmO0tVK1dFaC80Y1h4WjUjYCRaSltze0JHbk1leWJfIUw2N3QuYStAOVhGXnFDSl1vZzRMKjIyWFY7dCkiQ3wici4kNzteQ087a3ZYRUpYMTZqa3UrbUF6bj1vTWNtKmo8aytGLHM8US4uYnxBa0ZWMDY8ZTlZVFcqbkU1U3B6cSF7VTBgYyoyUEtlUntVPmskP3xU''@;'; put 'put ''IV05OmJeaCQkM3J3JGo4VjlsRmMqMWhHIS93PDIieGFBM3gyIVU5LH5CIThvJWBqRSs+VG83PWlmbn59Qj5mT1c+b2R3Lzh5XyJZbnUhdFNdMGFhcW5LLjR4TDpdKitAOFtTPFdefXg0KHskSTFzKjhtWDchP2BMMjNvMFBWQnY0OXVxKl5ma14wKGFYOCJBRG5GOWl4e3gsSm0hO2oiV0MkSnwl''@;'; put 'put ''MHwwKWdzSHI8LHNeZUxtS1FEK10me25wNk9lLlB1W1Q0KHNadj4sNXA1cnEvNVFMYXtHdiVERiJHflplSGEsZz59K1Y1Oj9VJkFkOkxfaSYoZG49VytmaWpnRCxeTF0zTkkmKXkxaCxuYXFUOmJLKzZCZVd8PVlQY2pnR1RhaUk7c05Cdj1uImQ/TTw6TVFBNElxempXLmk3OkolfU5adkIoZVRZ''@;'; put 'put ''Pl1lJF5fWHB2QUFPMjtgZkJQZj46ZE9PdCtOZ1lzT2sxWX4mcV4hOipUMTBqPiYuLylxfjE3Rm9qY1BaM01LalByPGRTQG5LSWdkUHVnOEhrMGFGfDpZcH05Kk5jKiNaeGM8MWJWTzh+Y1FyJFQ9Yj5SIX5WPSR8T0I6TFJDNk5kNHBIRVVleWpFSFBWbjcoZHR5QXNLNHhmUm9qQjElfTg9VyZS''@;'; put 'put ''L0o/KjMiIXZ6ZX0zO3VIfCo6MDhJNGByWVV2OEZvRmMiaz86O1VIfjZAX0tlV2kqPTFiWUpCfUUqOUJRJCw2UXtAW29IKSR5enFaT0UoaGB2cHJ7fjdjIlhGZi5DSWdVcWZGeEBQc1sldGlJTCZSRDU9eiVaemduOWRJcWhoTHl4ImEmR1ZFRkt8Q0tMWj1MZnojSH5tQmRyZSxMQjYpaV87ckd3''@;'; put 'put ''eWU2QGloT29MZXNxI0FJdzhuc1g7Vi8ySThqRCImb3R3Qjd7WjdeYkcqVEQ+bkMqNkNYZVlVXTVAUXhlZkB2bSwpJHUwVjhLRyQjajEpZCgsPElFeDRGXWJXUHpxMkp1YCEsPVdoJUtvVWIhQkpefnlRWDJTc29Ce0BUfG9TejJ9TC9eNnVsRGZgUSwxcEY2K2lyS218S01jbSM1VnVJeHd8Njc4''@;'; put 'put ''WU95cUklQjpyLkpbPSg0PCsie0hvLERvRXxhTHp0L19qP3csNE1pbH0hcnFYOyxaNGwsTCRXPnxCXWFFaWtEc1dYPzVzKkViVEsxO3I5MztvP216PFZudHZJIU5rNDUuRUA+dyU2Yz15MFBYR2U4Q2FIfi9zd3l9JUAhMVNYO1k+UHsiIzpnfjxVcWtPOWF2VHN1PVZuV0NVXTJaelN9NzAmaG1e''@;'; put 'put ''W1N9NzhCXWVHZyV7I1c8TjpLTlEsNTl3YG9TZzliVVhzc2hpUXxWYH4/MG5DIl4zd3chdWo6Ujw7NDglQzI/aUx0Ij9wJG5CKF4kPUIzYSt3SUg8SXo0OU5HS2V3diYxclBTUGhhbjw1QEBPVylgfCpOX1FkLyU5V2xiZTo9QzNJRWVNPUFdKTVOb3RIPlBQLDZFZGJAcWsxfENKeSl+KmgmeCp7''@;'; put 'put ''QztsaDRRdWtOc1M4dHpkPzpPWmVdbCREQ0RzTih6YTtAQS9ZYU07IkhNPFVEUi9XdGJbXS9JbSVkLCoyUDAqe0dTSX5jSigybTJdZlM/aTt5d3lQc0xNeCFpQG1UMGlaNlB5dyk3a2VOXnBCdElMP0NXQCU4Ri44Qk85Rm5tbWosSkJOYm9UK2ZAQVI2TGlgKjFpRmwvOlZAPEhsYWZhMyNoQnoq''@;'; put 'put ''bGB3Z0UuYUFPZUE/QmxzV0M+VF5wQUU/RkQ6ImVifCRWRF9aRHVgNlJIaVY6eS80I31AL21rc34xPFovbS4zOlR9RHF6Mm9reVNETWs6RGUjNG01bDlkQCljJnZEcyM4b0Y9NjlHRFcmNkN3VWoidlB5QnUsNi5QIzI2d2NxQCQ6KHo1U3tXa08sKSNMI3BAJXt5Y0xzZnMqeDJOS2Q8SlFFXUY7''@;'; put 'put ''ZiYofE0sSFdVNSNjNDskUzhdR35waEpjM31DfT5HYHd8VHI3LHh3PHpbaVptU3Z2ZyNDUDp+PyVOPkcwWH5YRm5jUWhBOnRoRmdwP3gkJUw5MkM7JCJoKFpfQGNKX0VPPTBQQmVNP29TRHV3JmhgMWgwWVo8SC99aCt5SmFNPlFeMF0ibFpDPChUSEBGP05WVGwwLltINWc0fDpvWitbWT45YnlI''@;'; put 'put ''KHMsfW5WNXtUeWd7TUFjOnNFMGNLW2F0W2h+OyZgJXdeeShYSUkqaEpFclRmKm4uJi47cGhaZ2VRMzJGeXh5ZWpPXS9IYXkrZVNzM3xyazVQIX1kcy8+WSR9RDYzPVdLN0tkQC81eCtqWV5tWVg1VHUyLHtoVEJAdDZ3PSYlWnR3VGwjfHRVSTMrZ3hSLEokQHpybmJ8YUo/OGYzfF49PSVQVExf''@;'; put 'put ''SXhtYUZNVGtBRUhXfWJiRl9ZMUhxMUVsSiYhfG9FZ1Z5IjxWKiUhTGljZXI5QnE4JnYoJFkjUCE4fmpXJlI4Z2BXQzJCXyxrQj0hVlRSUW02R1RiTSs3SG1TeDVZIXEveztadS5oRVRyYWRHaCJKWUFfQUB3eEpOcysmIXxGKSVLLEIuQjM4UDlWTX57emVTNmxheX4kdk8wJFMuK1I1MHRkTyxy''@;'; put 'put ''fjJ8L1hlOkBeLDkifUs4PWchViJWUk9peE9hSnF0OHY/UCtOUyNiO0NgZ1ltPCViYWFGQjIuZHpdMShObl1QaV9PLFtFUTY9MkkzKyx0SE5xPCszYy93ZXdlT3RHVFNSSy9PX1c1YX4seyFpeSNOUGtxN1ZqSDtVUEIzO2R1WzZyRiEuQ1BAbDUhYHx4V1Ilbk1XPG1GN2JbQHJEK0Y1L2pMOGp1''@;'; put 'put ''ciZKcG1kdUF6K117KGkoXyU/VkhgKWJCRC9MUmNfeUA/W0RiUSxYYnBAbWZ4NiIiTCFXd0pyTyNGYVUvQ2lIOGs3OWErOEouZytIfnAyTFN5XTMwQmRfT0kuJiJ5Y3MyRHZRWGZvYmFdMEJ0WG0hOllGMF1RP293JnVXejNMbiNYfmYkTlNdXU1DS0IoVlorTU5bRGozMG1CKWdgbmBaSCxWM1F7''@;'; put 'put ''JS50NnBDZnheN1t1Uz9lYzYzMW0kXW5FJCxDd1pXYSlYfTp0dFc7SiM7IWcxMUJ3IjdmPFQ6XzJBTy5dQEVPRDZBM3A8KH0/ZUJtaUZvNi5HTygwfldqdnZhW30vVk1sTi9oWlB8OXQrPGcuXXIzak5XUD5YTDVvYSNbRSooakgkMCVqU01WJGF9SzRxNSZSOypLaTthRU9BRz10VD9lT0JiYFUh''@;'; put 'put ''RlBsWGs+XTcseDw+anZxRCxqaGZuZnRJZChraVVkZzhJeGxwTUcjbC9VZ25IK09CUyw6c0JreXdCXU09SjdVIilaMkp5O3RLWEN8XltEQitXUHFIZHVpSTZ2TDF3bWI5bkU3ZC5+X05aeWhsQE5kWzZQTCxyRGsjMlp1Q317L0UrPWVVQ1BzRWpqTmZDKTlgZS91N302ZF19aDBQMUd3b011WShJ''@;'; put 'put ''W1VUQF9ZKyJYbSZAcUxncUJYeCNVYDxUYClpNlkiRTUuMmpaMzI6dXdLVXZiXlByRFluZ1BGVzhELiNsfUA8NWw1U0xCeTwmMlVxMVFwcj4oTmNHOkZPUzR2Qi5eJVRXdGFQIT9ve3JzQDp2NEQjfmxWQSFZaUEhdkVadDVUY3F+JFomT255ZyMofnpTJXc0S1ZTIy8qOVVRaVA+cGBBL353RnxK''@;'; put 'put ''P0E4NCE3WmppYDM8Nyo1UkZ1eE5MV0xlSi5lN2ExZjZNQjZoITImP3h1dHglSDlKWVN0U1pBYHMhQ2ZeWz5aaiVbWDo7RmZVeztVQmc9UHJiLHZISn5bYkBPdC9AUmBYfkVCRnpFSSkqOmRZUXBmNCQ9X0Nmayk9SV0zdUUzWEc9JElwOXxxPGNDYm9vJUwrQV4sPD8wSDwzIzRBKCIiY21zLzNZ''@;'; put 'put ''a1JWVi8oeF4xMmM4KkxEKEBWVEp2M25jbl5TZE44WSJYRUVwPys8Y35ZQC5LfkZ6RW95QCNlTDxndmtTKT1kcVEscWImaC9veCZiRDN3fFA6R09oailrZnEjNSpMc2FxPkVpY3U5fisqbU1mIi9jZXkmJEJhTlJ6XVRMKTNKamZGYzpKSnUhZWJWXk9pME0pSjQ+RlV1Q3AvIWF1OGZUSSZ1OUVv''@;'; put 'put ''T0tsPmxCZHM7XytJe3drYEA/cXloS1dPXUx7UnwjVnQ8JTB0JD99byFpJV99Tk55bjAldkNvTFdEKiRjUyhJWW0odzR9XXUsOiFkPyYkP0RvKDMvREI0dlN1OHVJWSMjJSt8MS50UDUhcm9XV1dHb0Y/TWttLGxGcmI8RU0lQjh4fHxLX2t7NU5sNGo7VDhAdiR4XWFPWD8vK3s9ayQ5VmoxWWFy''@;'; put 'put ''KiVkRUVsc3YvW1ckcFtQMSooRlA9UD9FYHksX2RnYl11RExJczh+aGZYPEFGVU50Rl44VElIe2o+TlA7Kzh3PGI+WFVGPVhBb0hjUGUuKj8lKXpLc0NiTD5FUkZmJjY6OCtJSmpyMSF9SU08PnYweixGK1N8fX1SNT87UWhKY195XVN9Wjw1Pil9d3lGY2sodXU8T1orIW9ATnVLNWRYVGw0TGdM''@;'; put 'put ''NmsmNXJSTns3fnpUdzElPmUoaGF+eHNRJV14bEIoey99T206IXE+ZWAic1pRYnJYJkplYjR2dWoqQGE8LD0xOkd5VHE4QzVIbzI+S3kpMTpjLjgjalRML1h5KkFnaD98W01ZSUYvIUlLQEIzTUJoSF1VPS8+c2gwVCY9ZyJwRiZlVXhfbGMxYEIzeSpUXWAmKUpZb19YbkxCVnR6L0k4bSg2RkBz''@;'; put 'put ''Tn06Tks4IjFRSUUsbEAlQzApfkcwMnhdczIrYld4bWlgVGxGJlB3VG9iXzwydHBbbk0iTCF3PytZLCg2ZDtWSH1BRTVXTD4uTCJoU3luaDZBUkZmOjFuZz5ANjsqaVpbL11vU058N1h8fGxkfl5aUT4lJTlYPXZNPjh4eXdrbzsjI011YiMrV0s9KDZUPVYjJEhndnlMXl5wcTFWN1lwKX1pWVty''@;'; put 'put ''dmtsfS88fmNYc30pKVVycSVIMk1HZDJHNTF1SXMpOSZNMTFtZ11dUkBSO2QoaFhkT2s0XXdld2t3NDtsZXxuK2JfbywvcSl8fl9QPT1lU2o5a1lBXW5CdX4wL3AzS3g6TjI0KE0rLjU9PTAvXmlkeXh4VWFFfnpQP3ZfQ2RhRWY7NV12dWoyOTw1Tz4hOTJKcGU/TkNzc09JJmRwPlsve0xbRlBk''@;'; put 'put ''ZFo/Rk04Rit+fD99My89NVAqK1Jqd3NdQjhfMyZRa1Q3Xm54OiF7UDdtZ0JnRCNELDhqY3E4dWYoMD9tNEdCXjNYLEVpPGxwSTlZSG4/KVUoVXdhKkRTPDphL0RIKmVfPENCMEc8dFgsRnguTE4hKWEjXz5jcF9PSWVaOiVZfjdfXWsqfnFiRVVZWn1+dCIwUkdAejRYa1NVTFNAQjE8ZkppeUVr''@;'; put 'put ''ST46dT50dkhuWXFPSEwrL3FuLH4oYFspNXNuejowYjclTXgvRlh4TVsyYS5MXyx3bipxXS5Oa1NWRWZwV09kW09FPTROenBKM0AwN2lRd1RAcnQub3p+JTRnLEwxbyp2WFRrdlZMVUFqIXRvY2xIIUJ+RlQzcl4xRyRkVzQidzwkOWtxJGRNdXRXJWFfallnMW4+MVJke05ZVDs1UmZLX1ojPnBL''@;'; put 'put ''OEBDdzQmYzgmNUxse0ZncThvPHowX3t4V1lkcm0oOF5wOm4mJG1bdGooISE4NGRJV3E9TUEhW0dHfU87WzlVVHc6MWUkTU5tWip+JD1LVWp3LE5uaXgvbHYvck85Zkx8ZVZmK1FQdiImSkZ0KWhCeCFKT1l9b2VXTH5uSGBOJDM8YztoQEprV01SYUAoaG9ncjtOblVrcnVLX1VFNXJ1ODxUOEdi''@;'; put 'put ''RGp+SFpYWFJYaG4wa3FmPy54I2RAPFNfPnNXNHlBfSVwcTVHflgkfUZUeHU+S2pGXiZlfko3dX15TGhrbzZnb3JnVmQmJjdsbFIlUkM9ZHFqKXFsO2o1I2Z8d2xhXkVdUjYjTGQmel5nUCUkdC9jdj1iU11qXiFpV0IpISlJeSFeWWNCe0xvb0VhXVIoZTM9YT5rbkI5eUc6NC5hc0tJel1MNEA+''@;'; put 'put ''VzoxNXo7eDtrMyE1Vy5mUiY9WVA/TTE/SGEoUHVMeDE3eDk5UmQ1c1E8MTZzeXg5Y3lVSG9SOUZSfHg6YEZlJjIxP1ZqYj84Nk80cUtVaTZRZTRhYDFdI3xKJXc0fXldPHlNTUduT2JhNm5Ta0NeJHljNV5eMD9vU3Z3P1lrcGt6fSZgPzY0Z0RmbmNFMTI1RHM1ODJRVHd5WURsNnd5TTppSDlI''@;'; put 'put ''W1ZYZlkvNiRlaXRPWyx4emgrTyh1JiNLMFIhZj5yUj04fFlsXklpbF9QayVpN0lTdlJQbH5SdDVMb0slWUc4SGRAK0dnJjJVeEl3d2dPLypmcTNibkUqZCFbKW5gPXtHfWxUT3x4VGBsaW8zUDxnZ21lWjMrIUs7Pz9gPkgxXn1ZLGEwUXh1I1IzUjcpYSlMeiokSj9ufjNpKmNZYiE6JiZfaDxM''@;'; put 'put ''ODM1OC9eTnN6UmhgTjRvSF13bk9WdVZuKW1tfHE9IkdbZkwlOFNrYUl1WHN9STpHKFdmRjt2bXt6WSZUdi5RSkMzVDZwIkZqYzBjO3Bjd1hWJHRgO2ZkbnIhdGwiKXA4aUJSbipicjt3YTl3IiI0ZCF2eW48OlRLbyxSNXlJO0wyUGVVWUpGR0JzaDBuVG9PXShtRzBAKldtITowKmRpMyM8QWBW''@;'; put 'put ''Qm07XU4uLnU3WGVsdWglNDFbK01ZU3V6IT52WE9+JT1BRHFkT0M8bmtQdUNGfmJvK1U+eGFNZSV5PWRkel8rQmFRPCQoa0VpK0FeeldOSlJndHQjI2k0KWopVV95SkRUd3FsYGlwIXpTWm1pUyZ5VFFDOTRCVzB7WzpOOzJnZkg1OCloem5pdkZNM1tbNCFMbVRePCpCRndXbV9lfCQkIVZxbjNZ''@;'; put 'put ''O25YYkJeRU5IRChuQDBaeyV9WEYlYXRVaUtiLFRlMXt4fmQ6M2djfEUpRyI1WSw9aEkyQlVDRiVefFthKyFkYzQyKCNWOCFrLnBhVyNlflphXih6MkRFTWEqcHRlXVpCKXM1Zm5mP3okWmRlOlBQY2d5Nyhzc3F5REJHRCh0eFZYQXw6JnRidjpZQF1leT9ASkRldzN0fndHPCosfj4/REhDPWBy''@;'; put 'put ''VSY1ciNUTjN6JCM+WiM6L0ViTVg8bTZLMXRUQlR9S1tkNipUUnZ3PE5VJF4lbnZoJiRKUzpQZ2o0cnRnejdqc2k/YGhkR0xCZmhsKDdNM10/TSx+XXwvaHt2I24vTH43Pjd6eGJpWTUmMEF8RTdKWjpVPUAuK3BDaGA6SjBONmZfRGV1VS9HKVRScHVWU1FTKmVrdzgxNmE2QkImeVhgbXkwel5G''@;'; put 'put ''ejliVytQX0ZVPzFpYTcvVCQ4ajd+ZSpGUmNOcjYoMXdVJDJNSG4iRj10PD9maHZVMj1gNUI8WzlqVCVvPjdJX2NLPDY1IUZ3XSwyYyt5TUBienVsYE9wJiZJUTwuXX5dVj4zXko/SkEvOVZudjl+Z1F2YV4hejxZd2ZNdnRUaEx+OzFQITpxRXljdlZjTTF1NlQ4NXtkNVIqXV5HdXdDTldePFgq''@;'; put 'put ''fi5lbHx2Pj9ASjF+Rkh+dz0pP0ZHdStEcyY1d0R9SS4iPlVJNjxtITROND9hLkNidTVvaFlAdFdeQTUkXnF9MFpgOmExN2p9LG1ec2RhOFNjVCVQdzE/YTFtMkZmRE0lYThCdVZheDg6dG5FOCU0UDB2OHVEZW06bXEhbHpNc0lFM19KR35yIkErKDhbP217KDlEciVAY1Q4RkN4MndGRDpSZ3BM''@;'; put 'put ''eEUjQTxEeGhJXUZ5fF5ULlk3W3JQN105UUR9KFhpfm9UZFF6V0ZxSVp4MkhCIjgjJD9SUVR6fmU3emhPT2FQXiJjam1ZXnBUOm9RRjZwTmJNZjlueSFhU3UpSixwQ1FganI6LnVTO3Y9RUl6b2tCLjxid0RJdlswM0g9IzReOz9ofW1kWlpNI3gwUV10US5RaXkiWisjbVJdckJ9UDN5Z3tIbypN''@;'; put 'put ''ejY5SG5qRmBWN3Qsbml3emREazRhbihTendLb1lAQDBPc2E8dHVSNGNdR2AoPXQkfntDYkt8KUl4UTMwbU95QUhSSiVLIjpeOXJBTX00W25xdEp4dkpOcFdmdXpCXzBwQlI8OTRuNTxxPkQoOUNlN3gifHk3VD5COzIzYXYpUnk0OH48X35wfERWeGJ4JXF6djsvIWs1JDNoellfemRQMlUxSlVD''@;'; put 'put ''KHhjR3ZiKFsvTFNRcFtvM0MkMm9rdiFOakxfOVhjWT1IVFAzTT5LdGFPTEhpMWxtcT8yXjRqRX4rJD4vT31IP25eQWJOJD01M01+WVpraDElL1Z4NDh9WSFGazBYOGFlcnZCQixrZUhXdT9YS1Izc2NdO0JBent4Y1pNTWEkSV8uZnJkbE1dU2wjaTVhQFZhJHg7VzArRiRjQHhmdmtdVVlqZHhD''@;'; put 'put ''IkVhQUNAVUY6MUorbW94MXdZTHlMa15HUF99Y1ZubGc3dH1sWkZtP3lmP0s7VShYQFchc1czeEJmYU1zSXhTYnx7cHsqKl49MS8uWlBROTluWXRpVnJQMDB3M28haixjdDJjXzVPfTVpOjJ5b0dHOFspeiJ4ayNMdDt8InM8PUwpYUlAPkxnMT8udjFUfG5CV2lWNiQmPyo4aVFYdltVWnxqXjQ0''@;'; put 'put ''YHEuT3pfV2dZdnhFQEw1fEpfOTk9QX57PmxDNEIxPnRZdlEyPF54d3JeLEVqLmtaMUNxcl1xV0MwSV9majZwfk9+N0xgLiFDODJSZHtHPiQ5ZDxfUks/OGZzKTErVUg9WUFwfX5oJiR6IWFUOUxCQkxBczFrKzZnYjBAJjQzS3k2flhnSiRYY0NnOm5OLihNOyUjT3xEKENjUl5OSjpdYE1YRm5W''@;'; put 'put ''PCN+KEJOU0kuaFBHYktdVm89VzAyanhwQ3dFNl80NlduOms+Sls7M0E8Zl9peWAoQkNmaV9sRVZASy56Ni8uMG5oeGQ+akt+WlhHfEpEYihHX0E4Tk9PQnBtM0dCI1hUXShCOnxkXnA1NkckNHFbWV0uO28ldltPUGR8OEpgIkFTYEtkU15RYzojZlpWM05jSGhPW001UCIpYiRHR3JCL2g1bnwu''@;'; put 'put ''Szwrem1WTmZfRnRpd3xXJSRuVCM6P3gweDJmJmJrIXd5NHBYYDEscC44fldLbTMxYjk+YEFJV1EodGZRYz80I100I3siKklXNER7bFBwYF5TeVFKbSlgdGEwRFNqKlBjPkhZcFAvcndFQEtCK21SRGMyKHUzQ3ojM0BselBsKSVsWFVyOVF6cEY6PEVfX2peYnVSeXdVa0hdbU1vIiZ7RlNSTiNq''@;'; put 'put ''a1g3LlBSQlNCZi40PkhCSEouWjxId0ojSjh+VXciJi9zcSUueUs3IyxNYV5aRlt8KVFlLj53SEJZKU8mcUJqI20qQ0VoZHsjMHRAbjc8ZEMqV1BOL09uKlp8WyxdP1B4KGtSUX5nZzgrTiFwWGdmPWh4RT1UT3shK20jO3p9UXwsKC4xS1EvdjcyJCZRbjVmKFdbcmA3WSw2Xl5HW1Q7YigxMlA+''@;'; put 'put ''fGRja0M4Nnd5Nyk9IyhEJmRjQEVMa0A/MVFpW20kVz5Hc1p4M1Z+RmZiZkoqJldUUncmTWF4UCVnTWhGZURzYn4sUWdjRj41TkNyfG9lbHlhO1lWd0JfWFNdcl5jREhQU25OWSUmaD8yTGBsN3F1cHlyI05reDA4NCZaOHc9ITshJUJGIStKJGIxaCV8Okw0Qk4wKj91L1h5WU9vImIvXyshXVdx''@;'; put 'put ''WlNBLmQrYjJ+LzsqYSY6Oz9LaWBMYHQwMzU4fGJrLE5naEMqc045RlVrP1kpXiNvLnlzVlAqdW89YlVNV3hFP3RKbkJrdDJzRjV3WU90aCNOOHcySUxjNjRGbXB3XXpOaFBne2V9JDZZcnt1OkF+IS9QfnR7Xn1xM0pxQH12bDFyL0ZXVjxeIUFPTVJGYkFNMDU+Sj1We0hmdV9RQ1o9MiVUS1d4''@;'; put 'put ''al92flU6QTt6TFBvJiIxWyE/fWYuKTxGfEFPRnF2d35YbjZZY3NNXixHfkpebihWOltsS0IxcFE9cFJCNGVkQ2A2YFFvaEk9Qk5bUVtQMDIuJVFJNkpNPFdvdkNvPSMvfW1hc2FNQDpqTDRKLnUvaitdPio5cE1NWGJnLiN+dHh1YCRSQVhkfFYvRVdCVkcsVkxEOSV6V0V9SExjPVRxLm53KDlY''@;'; put 'put ''dV80YSJDMSIhdDJ+UC9AQDNbLG0vSWMjd01vcygjOyksKFRlczNQL0M5dCEsaj47KyosdiJvdnJHSnBoWFUuTHdZTF9mfEI0N3VmLFhSKmxIPHBUZ3hZe31RPUx4Zil8VSNPKCVsL21NTGRbZyRNISlndmc8ayMufnlfR34yLnRadWg1YmFNUHFWTyM6dmZEen03JkdDOEUlPHV0eDB1QCQ2Qj5Y''@;'; put 'put ''Wi82UHdXPm9LNGRgfj5pO0o7e2JBQkd0d3RzVV5GWVVnVWEre1F5fVczfER3IWBXUnY5fiNOe09LKVUuZVMlTjkpbj9Ac1VEfWUiR1hCQDdeTltiQ2BFe296TU1mSzk6Kj11biN7a0hETlAlMXxrbSY0R3UoTEh3fTJGc0FhXVREbVhWfldxaF9DIlFmOn0jPmIzYk1DX2g1S1d+bVNleWJrXSpD''@;'; put 'put ''ZFp8O3wpbzJdQ0UuLFA+c1MwKX19Jn5CXkdhKl8ybUE4NlNlV3YqWytCcWE3YDNVejNoJStbMWFELFBKK1B1KkdqMHx+S0xNSmxpUT5CbXk0SzpSOUpyREt2Qy9zakVDMT4zak1qOT5JMWt1cDlpYEJ9cU9YImJ5fTVNLFlwbEo6e1k4djdkLHQzR0pRbS5MNC85TkJpOSVkZGpQI1hhdDMlcFpx''@;'; put 'put ''Y300bX5+XVtGKUxkKH1UL0QmdUZwIjNKSkBTaW9hLF8iMXp9OkMlb3F7Rnl8TzhDKFNvQ303YHtuO08jTGNiSSl3UGhTW2BkUFVob3RkSCF1OlFnNnY3L0dOW3ouJSUmQUg9USVkQ3dNLnk5bHleMiFHfSxzWUo7UGBPJCsjOEN1KCQydjhGSj95IitZUCguLyMmSngrWlJFfGBsWEsvZk90PnpS''@;'; put 'put ''T3cyRkVzc1g4NyxdJE4uJGxnXUh4MH1lW3VoZ0IjOlhAei5TLHVPTEl2ImlDeVM+VFVjaENdOl8pQUZTPz43KHN+eU5vZy9MbDt8UVd6Wlp2KDFnan0kNiRhYjNpX3ppRn1KZmtqM101IiYpNE4oVHIuSiQ0aUQqMyRgdGp3UDhTfiJdN3I6b1pRN1k8cEU+Jkk9U0o7ZSpoNXB9cmRwNkpjJkt2''@;'; put 'put ''OzE+M3ZKWyYwZC4oSC5XeXNsWE0hUUBqakczWnheSSVaSFl6e2U4PF5WJlkwOENTUlAqKF82LjlXe0VqLE59OldeS05UJHpPZ0NleGNuZm9HNls2TCl5fGNSdXF0R1pYaVI4OXJnYj5PT0swcEozQEdSS3pjZSlJaUVSXT1ZL3tFUkZ5QUc0YGJZOmQrO0NqaCR6ekNQNDtBYSNLPipJRWwmLGFM''@;'; put 'put ''OVNCSmQpc1dwUDFJUmxySVJGfS89dyM9bUcuWTJseDdAfiE1NVM7UzhBUWZlMj9gNkZ0bmVnIVNVW2dzPzwzUTRkIXBPRns7U31yUndYb1tFQTFLaWMhN2JxNmtrV2tAKV9EWyF5MGElKG1Jc1s1bH0wO0ZwfUtVblVeQHdoam1AWVhFMnYoJG5AeGM2PygxbCowc1MiMF1yJCZRXkhKSV5AUVNd''@;'; put 'put ''OVtSdk5HVXk/NT1MPjNnJGckNV50RT1XQ3NIL3ZfRTIvUiokJjAsbjN4OH5CWzBBLy9oKldJfVcpSnZbW2sqY0hUfi8xIyxXSmhjdj9uV3BaKU9FMUB3NnJCKDtVXURlfnlIYkB0QVYlQzAvYkhAYWxjUmYjNjpAI2xeYjgyOixbOzdGeXdUUVp+eEUse11CODVIeCIpZSRjdCQ2ISYwI0pdVyQ1''@;'; put 'put ''dXFINzAmdndCPj5Ob3JEPURfJmNVciMmIWpSQUZSPXw2aE99cXVUZmlHMjN1LkdPPUdndnApQGRLTEBWQ2tpS2tFN2tsVVVvSSV+dFs1TyNBdyxnMnRDMWNnYFBjU3Ypd3w6PjgiTWhzVmJZYlZpPD4mdldtUWZGOUlFaW9ecHN0QU5YejJuU2ksV2R6TTdid34rPTxQVllCO1BecFdFfGVEOHo0''@;'; put 'put ''bXs1NFVqIzdMYkR+VkMkWTVfPlUkW042OmtCW35gUUUzQiZTaXImWXBLbTxxYmc2OWc9ZnImQHVBcyokfnFSMiNtcnZfVEtmfkc3ejY9dGJ7WDN7O0tlZm10QDU1WVk+ekNAWSxKKSs8U0xCN3VbKD13XXBgRk8jeClXOjJpOHM8dV84KDg1K0tfaWxQSGdYSWN3IUAmeHFtbXY1MmA+PVMyQkA9''@;'; put 'put ''TCZXJl0pNEQ0PHljJFp3bVR4TCYpZV50JHxee35oYm0zVDBgYVtqKm0xTFI7RWZ2WWQoY2xzP0JpakFJZiVAXmdadGhoMU8sTG1VMCU4WzB9cUh2ZzxIfERhODB0Kyshbl41M1k/JHE3cG1ieC5qfCMmKGQqTl4mVVhiR2w1NHpIekplSmpkc1FYRTlbWkUuO1taOnNFRSh+VDByRWNLZjZAYTl1''@;'; put 'put ''clpAaj0pN20/MVFvciNGVn5MN29wLiFCYV1uYntyOSN7TTQ6NTI7VV9ffWssfDxZJXxyTmpHZSJZUzxjRzQoKS90WWlBPUIkdjBARkFTNjhFNDAzTGFrUClQaD9kU1NJM1h6bkBZbkwkPlNlVWVjV0skbDdsN1pRejIlM2djKTJMI3RuWCl2KEdoLkQ+Vz9LYVQ9NnVmKnpWXUxmXUwoYXYsTlRs''@;'; put 'put ''W1l4dWZ3I1dYdlFBWnNoKldhT3suI3N5T20hZVJ0U3dMVG9feX1qTHAmSUUoTTJpSitnV1FKJWBaXThWPSw4aVBXL1dBdV5UTERddE4lLyY2b0U0NiIxRmlnfEUlUG80SlQzdy8rfiE/dnwwVUFXOStzZyN9T0I3Mmc9KHYvQUBXVGlCTnM3Wj07Z3hNaW4jN2YqUi91Iyt6e19FfVYyZVNZS0Bm''@;'; put 'put ''XUZ6Jn54Ukpyb0hTNkMwPjJNSCs0PTZYIkdgXyFCKE84dGI7Wio8JkUhKTB5NmBwQV1qSk1UPCQ/UGhPKHIldzQuWSRWQ2p2P35+fmBTPEolQlRrSDl6MTE2ZXhmNldbOVM6PjorOXwjQTh6YiY7UTx5Q0NrR1EoYm1UU0pQejlhS0RXZSZQfnA5SGh0Vmw7Q3drLnlKTCRPKl5UQnRDJCsxTkt3''@;'; put 'put ''SEBFNio7UF5MX14hWF9zJWVkUChzSlRGUWZuazpNOzhqMXB8ITgxbzdqYD8hOkB+W3grJTJOck04VD40NT0lRjtUP1ZAZUY+TDpVcHFgdzx8Yj5qUX4vSEtmelBrIVZoSDRnV2ZBYTJVPihmJFJmc3IuU21EKWVAUGpNd1ZoPHRIXSptKHRnUy9iei99PWt8QnVlaiZOfSJ1U0tSTElHcVolTkJl''@;'; put 'put ''YjxVLmxhPTwhbH00X290P0xwUyMmI2cjK2ZhNWMsSCpxT3Y1Iks8dSZCPkl+KF0iaWpXVGpNUHRFSC5yXn18RDIrYC8uel9WN0taWWFAXT5KVjg6eUw4QjFfXixTby8oTks/R3NOOi8wIXVDRTJoVm9kTGs6KnYvfkcuZCpsTzRiYTQ2OSwzM1o/cTNMQ0JCMD9WWjVpKitMUmQwRit7M0VbZW1+''@;'; put 'put ''PWI2UyhLaWgiJjBsIW8vKURbUiwwSzJ9MEdSYnZHc01TIkl7YXV1a1RBWV5VMEQqaWU5KiZOLjxlTVJ7NylTWy4hcj1NX15eXSp5REtzY0NlIi5bcCV7UzdFayRYUmI5LkIiKiRAOkswWlYwRH5zVm9dIyJWLiNWJHtIW0VFRFVldFphS2UiZFdMdSNDQCF7T0F0c05jaDB6MCN8RGEvKihwSmkh''@;'; put 'put ''ZF1QcGZoZEkoRTopWVtLRVdpQ0toS1MyRlN8bFUrVEhjejRYTUNSSSp0QG9QSil9XXU7cUVPN0hNLiUwWEVdZms0LGNdZCFMTH1Da3ksXU4/Pl90akM6alFwOTF2L3JdVFU3Tn4jQVB8P0VCcisrKiltbz9OXntsbS86dWcocVJpP09KJjE+UClIN1ZKOkZ5PCpYPU5xeWhzQFRFQGoyUjdWKTNw''@;'; put 'put ''fXRyRn5UPW8zcUlXJVN4RSNHJE80WVQ4O3FRX207Nzl7K3lxMyRlQDNuMCV0RSRqJVdfPVpTfEssZm01I2h+dCVWd0hjYC43Szphd1FIP3xnbl48I1slOVVhdjk8dDV1SzohRFplZH40WHpGI3lRPjtkRHJnKy4rcHx2Y209UnVpTVgmaHhobHBneCZhVnhbXyNrSEhEKTNlWU01QktyV0Z5ck5y''@;'; put 'put ''USghKXdmWklnNEljPkkpZiN9Sk5JMU4hMj5HKjNyflV0fmFoVmEyV2gmQVEyJGl1XmhqfTUuLCYrMDNxSU5LKjJpbC5ZYkZiJk17VSxgXkJtaHB4RXhYTzlaZT5Dcjd7c19WQVR0OHByQE49KG4+OVJfWiQsS1oxTysiQkM6YDtLW1k1S15CS3YwSk5UeE1jdjJgNHI/Y3ZrTGFQRVg8NzxLZHNH''@;'; put 'put ''ViMqPlglP046PTE2VzRTciRNSH18QnNQRFI0QXteaFMwekJHTV4/WEdzaE42SnMvSWUqXkJkMDJ3cVNiZ21WayZgV01hfTdUWGh+PnkseTV6V089e1ZDPTVmcllnelFmfF9CTCk7M2hrPHZKbWxdVVtiOi9efFh9L2JZSSR5bTpbRVs6WkssdTN9RE14OkwwZFFsYDEmKEo3aUkkK0E3fUpNOVs8''@;'; put 'put ''VW0hKjcoIUNsPzUsXXZee25NQCgkNERLcU9vZ09YYCljcE1wPGdiNmR6enU7Xzx6ISl1fCtUTmQkRW44LjUxM1Rnd2UoT29pKTNqfF5zb3cySzQvWFFAd3BANUQjQDUob08wJVU2RkpFSEVFYH42fjYvfVF2eFk2VUREPF00bj01TzpARGZGSTs3ZVpOc0NEPnFVcjZaLjlUOFh9RFFzKyZLenk6''@;'; put 'put ''TT4qeWlALmdwaDhKNC80QEQxVm08Qno1M0hacnV+SzxqUkokLmdTOGFSfkMwaDhpSjphIlhSXn1BdzAkbVdRPDpATzMvTGhWSmVlX2hBfSpIJT83JXVIWFhQPzBvI3xYY0RidTRUVkx1QjQ0ZVo0MSNlNDJJM0lQRSlQK0Y4eGpPN0A7UnUzT28yWXYlMnVmZWFvZCwje3VnWExtNDtWYE5ReE4s''@;'; put 'put ''R0BKYClaZG5bNUJQN1hHZkU7JE5kXyg6OW5XPmtISGZIJHFiT3t+eS9yW1A+JFhIPk5WTXV7bGh0XXJvUFciZWZjc218JVE1STRPemo5aDhpM1RScGJoMTZPJE8sRS8wP2A4RE1eeTJ4dihvMypSezVKRj43ZSg5aCpTeCI7eH5McGBZLy9QUiJMWiglVlExW1tLLyM9dEleRWkzMGo/O01eUWBF''@;'; put 'put ''SG8zSVhyPFptZXNHTldTfS8kdSJjTGBGKzc9ZSZDOn1ib2BrJHRJRHo1NXZ5aVlfWThjQntrfj1JKHY8JlFTM1JlL2Q0cHAoNUxVX086Qzg0eU9bfCZ9PUUmZzlUMk1MN2NNdT12My8kQUNHSlN2LkBQQjVddjJqLjokWnFBOFNIWVBFWCY6WzBhcmgyaD4xSGxQdW5IOEBgWlB2ZTFHLFB7PlhJ''@;'; put 'put ''VkNyO1QjOkJsan5mUlkvI1M3MkJ0VHlbbTw7bDU/SzxHKT5PQVNsfCN7MmNxIyUxfWd1Rn5KflF8OCVRY1RKc14zdSssNTt4aEBIU253RiFfUVNRSTpaQE1ZP3lUPkI6NGY/PjNuQCtIdHJVc05lKSNLOXowMmcvOiNAMGdfZnRdcF1MeD9jeFtZR297aVg+R18iMnUrQGxIbVg2LzRtKWlWd3w+''@;'; put 'put ''aSVUWyJvWSMkIVNwSG5TRjlvJDlMKCx8JDJRfUNgI0dZWUFZZlhOSWBXaXkoJXRAOXNnZSFPWjkzKiZzdjpkTk95dE9ZLjpGekQpOGAzNHcqYUlzalNnZkwkQmlRcWdUU3VyVl90b102PV1uTFZyWmdWflluKVsjTm0jK1BrN0ptISNAan4oanJ3Pz97Q0hgRXY2a0dCakxzI0BNWyJtcXlSQz59''@;'; put 'put ''USV8dU86NStBW2EvI1hiMnJfLiFNZWwlW2kjQmVGUHlxUmBIfi8qQG4+IXcmYnUvWylhXkosM29rS0lHQ2s3IWJDWiNAKjJkK3NdY3o7LDhpZVZYXTtFOCorWntTKV91eDJbdjVDKjNfOT1pbjB9SDJ9aHk3YmZAJGVKbHddODw/PjJAQEFkTG5peXxeVyRDSnVfMU1gUnxvN1BKPShAW3g1enBY''@;'; put 'put ''MlVfa0UseDhZSGBzfDlHaSZpW3hJeHlQYkpSb0h2VmpRSU4raEIxdTVDdWReUlVmQl07KCpHQ0M5LHlAR1l8PWc/czkpWX1McV1fN3s9XSxuL0QyUGhUIUg5XnEyd3k9NlAkYn5aLHlATilQcXEyTUksZj8ubFNafkddbCZtdl53blYqVDQlJnpvTS8/M0lZYjB1WjVTOWo1IVdfb3BadHc5e2wk''@;'; put 'put ''dm0pPT5xWkczU3c9RnF5e0BiIVckeFB8ImM7aGM8UjdnZ0pWWThqZCFIcGg1Xns3c1lJd3R1Y312Rjdna1hsSXgwbFEjZmRINUcufXJ4cE9tWW9zVUA5UEs6YnJITiRnaClyayEqOjI7YUtbemd3a0xVKFdLfSpBa20+TVM+ODYhK2hidkAjNSlKM3w3TUh6fiw2U0NaaD0kOlo3ekZWJURrYT1k''@;'; put 'put ''ZEYlYnxHNEt3LmRVTG95TF5tWHlMfkdwc1REX3MpL0d1e1Q1XU9TYlVzY1c1JDNVKHN2KmJRb1U0MGokNkV6KCRSbS5YTVtgXilDVilocnhDTmFOVCh0RWVwdU03Il57RWFyeHtFZiZiIzk4SylmNT9gdTFNY0EvQ0g3PiM1VXdURyMve3lZRlhPUFl3UHZ2IWVbfXYqc2NqX2l9fXpfPitaVkQ6''@;'; put 'put ''IzVSQGg3JUM3IyUpMHA7KTw+SDNiJlBFOSVFJVRMPWJZQ3ZqWmE2MWlfcGkydHtSWjZsNXdNSlFJTnYke0dDdltAXnwvWCVyKFNvQztySUhYTiZbek8uXz15OVFIUigmXlA2QT9QMTw2LlIyS25RfHUuRiMkMG1jQHNpRktuOzdfLjp1cy93UWo3b3FkJGNZIkxJai4hSSsjZkNVfjA9aVBSbXBh''@;'; put 'put ''JnJrbE9BQ1ROcnwhTnF7P21LaiVuR255THZvZClRMWkqT0gwa3lzJnBmVSRlcyM6NUcpfnFqUGw4RTVDeHt4b25GYzlQeFJRcSJNSDVGMn1yXyNjbDhSazIqLmJZKyNTfVMzLil7NXBsLj08d1l8PjZ0RWFbT1pdMjBeLHMyZjMyfGYvd3d2NG9pPjp2fUYjKWopNiNlXSg6X0g3WFFIfiw6NldX''@;'; put 'put ''cVZEYU9fcSN9ZnQqay5DPVI5VUt+PkVZOnE6TEl1QU96Yl11Nixfc0ZbcntYZWFhKXVqfDUlLCV4fGVrXWpLPUU1OXZ7T1BWIUt8dD4pW01LK15OdUVVZj9JSTIkTitBPEJvT0dTcDFnIW43TEVYXXFFY2NoWEtGW3hbN0JpSCwuLGNYI1RPamUmTmtbU2xNPCsvOVBuM0p7aUk6PFhwd2NUaGlN''@;'; put 'put ''TSJEMkosUWw1bS9CPT10KWV2PT9AL101Wm4kPCEyXz1dSCk7ZmA1Yz04Z3RoNClwRzBbLDdjS3UpdCkvTUBGOkkkMX14cip3QC9GIlU0V2YvLzsiNFZlUEMlIU9lSDJEfXg2amVEZHBOfipmSnpwTzV4ZVNhbGtRKTpsTlJHWVBGLEJtcWlXKiEuTjp6fklsKlpuXVtlcVAoTFUsZTRWRzo3dzxE''@;'; put 'put ''R1Q0RHcwRlRHUzRpXjVwVStQbk80aVUhY2gpPzBsWl5zWlhxXTtZLFcvdEp0XT1Ra0JXPixoZG1JUVouIjJgR0BlU017VkIqW2YvMFhIamAofi9rUD07YG84b0FhbWlFezBqTndxb1FMTiVyL3o0eHJZcTcvTn04bzZbS3NxJXNgKVMxc3lLOGAjfkpSYWopW1laRlo5QkMoclZkckMjYCZnKjVL''@;'; put 'put ''KClQaDtSV09VVmEkeENVS1Akdz1GIWQlSS5hISZgSSI6YT4hcDpeTD9sWj5tVzYpVjtzUjd2Jix5Q2R9XzRLYVlMYEVFflJ9NVd7Q2BdQ25CcXVGRzRNbTw4UXV7K3hTZ3RKRkNCZzpCYE1Eb0o/QXZ+bDohWz4seGVufGZtZm1ZZXB0R0YvdUJiS14mTzIiImpbPlpedDciK30mQncxe0ZbPD8j''@;'; put 'put ''USU7X2FDNTFjW2pbSyJqeC9hYW9IMFliU3d8YWlDdXlUdUozQ3V7KD98P1kyLj9mX259OENbX1BwP2NsX1BCTjZxQnd1MjAkXTh7JCgwbVFzPnhNZDEmTWQjSFFbUi8qSSFRKDNmRkloeklaRTxoIUU9IVIiR1dLZH0/QGJuKU95VzNSWFR3NjQvKGBSJmpWMDkkUyZnOzA2Rl0zUyk4SF5kQChx''@;'; put 'put ''cCR3KFYzd09he141Zi8yPWkwaX1mSzdlPWAoNil2bUpYUG86VjxtYnklTCZRJUkjVVtWek82MzwwMmt0RTU4bkg9bD96LF8zKVBLaHFEQEdqdEhaenhYXm55dSUkSmZ8Wyk7WD46Iy9qcyZkLnl3MUZGbF1GNHM1Q2tQK18iKmdFJElmYTxAZzI4VmxMN1ZnSl9eOjRtUFBIaWt4VF1QdSZRI01m''@;'; put 'put ''WXkrLilwNHZffjdKMC9qVkYrelgyTm1SazI4d3YoRFAjWzsqUmgoI1ZSUiRHW2pfWzw8bD5CWlsuMjFVWj1sSiZScnJRZ1o+e0g9X05gdipIUnQ1UDc+MkIuOl9xdW5kfmdMUT1UZGdeQjEsVTF4YHFjaVkkZkl1dVU8bSZbckBlKDksSlJ5d1V5PndAXldiOTM/OHxJZkxXeEZBeHtmNX0ie1Zn''@;'; put 'put ''Y2tucnYrKjdrcis5YUdmfH56fiZ7IyhpOEQ4ajFsUWNhWHVCdGZSRlJoalpYUyxzZFk4W0kpXjhOWntXXzdOUDNseV5KMU5jTnN6U1tPNjskeFEhbEJFc1JyYFZvZUhRQ20kTVteUDRFZTxlVzd3Ty45W3MycnF9SClAWUNhQz4pQXJpTHhsI29IIlRCZlJnWUg4fU5VNXJ9YlkqUGxwM1Vxa2NM''@;'; put 'put ''eTFJfUM8aVIjOHBITm1ITk9LZlJYcyZmaiEraTAibjckfjx5IW5wYWd4RnRMTlg4PXJBZF1pcytxWXdsTUJiMTlKNj1mbWAmMywhRDB7RTNfZyRhT118RWpyQ1BUUFVsO0E2KmNkfmRxZjRAQHs5VGI3ZVsjN1hURyljQDw2bEhrTTYuaTVZUExXYmE7XShVYnReNnBlXiokUH12dSM5PixGbDRf''@;'; put 'put ''KUxKZ21ZPEVAbng9Xmt3eSt2Wkg6NkZYent+XVN0b2IzRzY6P14odWNoTEN8KW8mPD04WklXbHYuVlJnZT1hYSRXajNZNE1beHZOWSJvVVlzcyRxVHE3TWFHR0RoLG5kOkJFPUF7dD09OG52ezlEKmJmZkBYbVI9JCNdQGlHXytKblIqd3ApQkx7WUdKX1lJWChLT1pLNWp2SGg8REFKbjJXJj1a''@;'; put 'put ''W0gpLmwuNkdZNW1hbSk6ezQxdFEvJkRuZWh7S2ZOdkpLOEdiMG9iQmBIVjdgP1Q4aH4iIiJlcngmM25sJCwvSm1zbWBrPnw+aSkhU117RDZpUj5fem8wXShXRE14KVg/ZyRGSCRvZFV7fWBeNldbKmRESj1ZLlc6U2BbRzJ1KEMpUkhYY0VRNTFFNXtmZVkvPjAmfkZKe18hd3FlIls/aE8hSCZP''@;'; put 'put ''ZlZdLEMrOjslQSFNNkRqKGlBR1kmfVIoeTMlPDhGaEIrdXVHcGE5c2osdm9PMXxhdDpZSjo2VnFaKjNlRjZfeUgvcyovNXJ7dkZnPHRYRzZdezVsVEM+T1JYWlRxMSxtaUJ7MS5lLGlLYXspL2oydlteYWhxZ10+alM5byVbMDRSPSFTIThEbXk9Nkh0OFhkNl5rfjRnUHR8ME8oKEZ4OCJMP2lp''@;'; put 'put ''RHpWQzoxKDZ5RG8uemszRSlzfCJxWGZCSGlROjgmdU55SHQvNTUxQl8+KXVgMEs2fExIXTZnLiMyI0c3V1JOPDJRQ2hjK3YqWntaS0gvMSQ0XmNNK2NvI3gkZlYlSVJqajo5JDIvc0NEWjRaTGB0dkBvTWAsWV0wJG8pTnB7K3Q7Xy5+dzw+ZVBfe2kkPm1POkRqcHVVciNzLmxtSUhPcj9GIkgj''@;'; put 'put ''VU5xeCszL04iK1k9ZS8oYm9AVDxDRFtqY18idl1BR0xFNXhAU3NrXkZ+Q1pva1UsdX1xdEtQd15QSyZ0YyowdClyJlEvWnZqUkRGRzNve045fSRJMVtsLEo2aFs9PDMzd25KQkgwJHFbJHlFJVk3V0BhNDBLXVUqRDJFNTc+Z1ljPUBBc1JrRUxMOXJlcXI/bX48IVc6UlhlOiU1VUBaPS4hXkAh''@;'; put 'put ''NighKyxxLEw0LGZdd0tSa1hKVlAjVyl1IVJ9fTFjZHkhMGMmX0U0OmFYXzBVWkBoWjQ9Q29zOWBedVBKd2U7QC9mbEFYJWUmcnh6YW9hZ01ZK1dgSXRrKEBDSXh0LGVvSGhmTHxHaSZfWD4qdlY8VUJGWl1aQ2x6YDp5R25EJmZEZiFGNm5rNjVkcm1dSFFpRCs5W2d1LkglLH1mRkxTMzpgPCxs''@;'; put 'put ''Jm9jcVU7SyYsWkxQYm86RjFbbVBfYEA4RH5Nd3lYZWN9JFE6MkUhOFM6OjJMJnRAP1ssQ2FgSzpfOHByeXdmW0tQYnNnRHZWNXdtbW9dNzI3L2Z5Qlt+RTpGd2tTZkRQR0MvUG1zc05sQ2dOZGZjJF1gM2lMa3Mraz9jO3FPZkI1KGN6MC4kPX46XVdTYD4xSi46ImgrSGp4fXJiRTdRSWImMjhy''@;'; put 'put ''UShMITdHRV1adCltKWVadipXNVtEKyZsKXM2PW8vdWxaNSIkVmgsK1ptRFBpKkFAalgvUXcja2VDWyZmIllvNzVzUEJSUGxkKkdTY0kyPX5eUWBINmpGNFVOd2t8al8zZWJPQzlsRihgPmZ0TTF4IjVHa2M6JllPdHskfil+KD8rTThtTm9zNGYsOl9FQWRMRntqfFIjNm5eSDQuIyM6ISlYaDBk''@;'; put 'put ''SnlETCw8TU86JDlZKj9NU3F+cGpgSFtjejt5JmhWb1siXkQzNFpmPVhsbzBpI0xxXn1RXnJOWDQ7JD1xVFlZXSxIUmpOXkRtNX5oSUdtP11teiR+LzZrUlJDckpaTkc9cCowWihfQHpVUj1NN2tpcTpaR01zM1k/OjB4aT9hWnB0PU9OOTQkbUdWaSI/SnoqbStfNVA0ZHsmJkV8NWBeYVovRTJQ''@;'; put 'put ''fHBtT3BLVnR6RStgSiR1eGpUQjxUNjh5YHskKlMqSXdGJXtqZHRVUF0rK3ZTMTlvckN5fTpZM3Z1MGUqYmxRe3g0VWVIQklScT9hYTtvaCNST3MsdGlHQ048WTImQ3g5NCFoLGFOUFZJYjVHMS9vKTY+VlB6JU5jP0w4QkViXnQ6RzsoJkQsek5maTkuVDNqeGxMPmZZTzwsZmwlZlMwfjVZUXo9''@;'; put 'put ''YEtRZzdOOUpgel9MbiFwP0NKTWJJdm0uVUh5eHd7fnVaO3Q7QGdqMDwifE1fezJ6L0JWVGFsWzFEZml7bU19LE8ufksvciJSRFA+MXFEdnxCY1FKbWE3PTBofkpEUGZuVjNVc2dGLlFNfVIpPEwuOkpSW3QlQUB+JnkkK3skcj1NRy4hLkVQSVRPVlNLXl98eTBVJTZrSFJKWzphOEpjcj5PVWhi''@;'; put 'put ''ZyRUSHF4cUBoLi8qOzpHJUU7W1p5P1s5LDtXV1BoS0dxenU+Z0pwa110eFpOVHJXW35LWU5bfD9iPUg1YFk6X3FBU0MxR00wS1Q1U3hSJjpkOWI5OWdfdWUlXjtELkguLkFjOnRXIUVhVSo4VG9jKTs1Z1FHUmhOOSNpNC5MWyxfXm0uM19Da1ouKlcyX2F1NFhyN2NPJmY1SnpeMTpKXSo/YHxt''@;'; put 'put ''bCssLlgxemkkUjsxVyRGN102SmB7e21kN256clBzNGVLNWR7ZUNMeXxII31Ka15Ca1tPc2czUl5uYTIiKmNqMUpoQ3E9PjxtVF9PYFR2e0RJXU92dGh0TV1sPH1XP1BLJSxCPVtXeGgqQGVbd0xEaExVV15wTWomel4+b2UxeSk1Wk07XnxtOVhDYUB4OG43U2gqRm4maWZmeGZOaj4mMEY3L3Bo''@;'; put 'put ''RzBrXjh6SDtdQDNLbnM3P0JEVltZVl9kOWV3IkhFXS9zfiRUTillKFY6cThsTXgjcSY8UH4uX2kxRj9pKjQlSEhtLlR9Mkwjak1EelBgS1E/SWdnUUswWDNlcnRHblR2S0tyMkxqPlRTa35CcjBOJH1USGpCUSFeUi85LilEYVBsI0l6b1tVbzM+QTI1RnhrNSYrRiNJeyhoZz9JPkxWYzUoKjc+''@;'; put 'put ''SCVLUSVfflp7KlVTSUIwZHNAVkUyW2UsWE8zVWdRUEJUOE1BeHA7O14qKUQvJG9bUWxtSHB6fnphNUcsK1ZPIV1FbTMrVSNORm5fPE1hWEVvfW9AfmZ8Y1Ymd3s7ekIpSStZM2JGLEg2T2owYl41QGdiWjYrSEFRKFMkMEkhTzlOXStGRURiPD5wR1tfSHQ3endCcn42Y3JXeW4vY0hqQUUjRTNG''@;'; put 'put ''Vmp7XWZTKzkrbXB0PWB7N2QpRjEjWXlbTVA3ckVUOV5rLkclT3dpemtgP2N3MGhXSlBDcnVNOXpiTnxaZVAoPCljXSQyZlltS2g9NkpIWG1hRTJGbU5HNTl6ZHpicUluJkZ9cC5vQj8ufnJVaSlaZD8xNnRnZ05JbnIqYz9yWTQ2e1UlUmdjJiVwIyw2UEB+QkckU2dfckIhUU4md1VvbXA9NTRN''@;'; put 'put ''M21BRlE9e0o1Q0Z7cFUyLypFfHx3bGZxaF09R0hkW3FZVn50UF9Zd00sYjYwXUQ5T0kqdXo7KnxVJDRtUylEKyVYai5nLFl9NG87dDU8cU4zL2NLeVRid1MwVjRJRU03Uih1K3hyMXJfKlY9cFBPPlZZdE0vPTUpLF45MmAzamk6PnlvLiRJY21vQTQjNzIoOWk+IT1eKHY8cUUvN2JVe11UWF94''@;'; put 'put ''XVc4Vi9ifGomXjh6VSx8XjFpIT0+WGpIRiMkb3w/YW1JO2gjKGdAZUlvV3srcmpAU3hYLEBZPEFbPEN0Jm5yS35nI3VMJGV7VztAJWsmPCV9anJpdy51KSpoQyp4dz9MfTxEcWtNPV5CQDE9UUV0I3Q0VVpmdHo+e0FsfDg1VypITyUhY2AsW3NrPVZBVG9bPmopXykvP2thPz8wYytUUyxbYm9t''@;'; put 'put ''bSMua189PTQkfWYqeksqdGZEcS8lVlN2MV5LfUM1KipNfVFad0QsWGE0KVBaVzhTQ2hAXnx9X0NVVkJRa2IldnFqekpwOHF0VV9oUFtmbC9HUGNJTG5kdVp4cHNWVU4xY3Q2PDBmdjBVcUFRYU5FZnZ1USgzJHRpd0hocE1KO2M/IndSR2JEej9uRD97cEVUd3ZDOypgJE5zcnxMZHlHOmwwVnZb''@;'; put 'put ''SS5zcCFqU0QxaEp3NXBYcGd4KGxzc2JwSTRsVEx0WkBJcnZKMS5USkdRJkNmbXdsRnEodElKWlFXbS5LIik5PTlQVz9kRlsqalFpP3c1SSUkP0hkc3QrI3N9SylVRjtpfT1jTStCY05uVCU3P1F1bGA1fm0hYDFQJF5MQE43NyFOImFFbD5nRkRfPlAyakx9JD1wQ2JmOjIkaVJnXUZHKEVdaWE+''@;'; put 'put ''XTB0bDR2TXlPYStgaGpjVEJrYUM9fEl8dGNhWGlZeVtTMHMjMj86RSNbaGYmPCxCZj5wbmQlXj5rWCF5PEA7KjgpZ2JfZFFKTi9BfWxbfFdtIlQ+cGgmQl88c2EsUktOdT9gN25WKzs3Kzo0WD0xWClOTSJlfk5DTTcyYndfbCUuN2JDInFWKmx3KGN0X0d5UWxmSDUwSFU8fVdmM3dGK1BYVyIi''@;'; put 'put ''azdDKUIpXzU3JiEuait+SFMhSDBXUzlkQkolNygxaHx9W3ZKP2t5TCh5SEUmUmk+Pj4+ZWVsOCUrRChfZFRYVk1iZkREcVk4dk4qUztQcC5zdEg1ezJAMnBWUFtiPiwlKE9+aldJdkVCLzQzaSNpJCI4YDBnR09eWER5WHAqcm1qQG1XeGpmPmdJa3NgQWtUQ30qdjZXVWJMaUZicnsqWVN2TyZ0''@;'; put 'put ''PGBmPmt2XiFOIzd4OCZhd0EqbF5kcUNMVldPcGU3YUM5MHVmKi5ocDMsW3l4dXFxdy9EKlFqYSpSbnlrZHAhWGNxVEZmVWlnendNaHxTVHs8ZjI7PkhYVEgiQSpAallHQzg4OnQ4NlFXJTdaZzlZWVtEeUo3YiFaMWA+Z1ptQTFiTURhNCoke1tNd3FsQDU6b3pUOV0wKCRgMWpXbU1LKkI4fDBA''@;'; put 'put ''T09Qdl99fnFHci5RLkwjJFZNSE9MZHY8cEIxUnY3IUBYeiIwfWw1dGtLO3FSdnptU2RUUTUlJVFrPjMrV3owUnh0XWo/Nip7VUhzPSwqWFBHbUlTTlJJKzB2OXksOz91UF57Y1t6dGRZQndCPzBsZT1RTjV8bndRaXlJL007USNoWj1razY7e1B0WEJLa1AodEspSEl8NSNFO29HTiMxY0N8VGZ2''@;'; put 'put ''O0N3c2l3bF4mbDk6ZzVnJlc9KnNENkdbO1ZPOzxhMSJFYXxkWGIsZ3I2N0YhKnM7UD53S1VsRHNhVDxQbGdfTFpmZVZdYSVQT212Y1tYdCtLfkl2IkQ9UE5rbDV2W1prWShIKCV7UD5rMz47SGQ4LCZJYlFkX2FaTlArZWc9TyQoRyskK0NEJUtvWGZaKW9SUSsseSpaRyxGMy9KNXooR2tBfmBo''@;'; put 'put ''Rz5eVU41aEIuViZddkRBdEVqYW5YYnlDQT04S1RZa2BkfmA1VWs3S2htMVF3NW9fVW86aSI4VmpLaEIqXnxWYTldYz4hQk9pSWYzeHxZWiJGaSRPeXY4dlRPJGoxfHd8OiFWKFZbciVfYT80eCs4Yn5pPXFtK1YlZF4kJFswJVBTdk42ayMvTTRTKDhOdm8qVjR9KGFpZU41eG1EUFJFXyMrIVNS''@;'; put 'put ''UXZVQ2M7ejFCNXlLajBxL3IwYWFJXUt5Z0l0MFsxcCtWalcrWExediwyVENOODF+cDpDT3A6KyUqX0l1OmFKOTRhJntqYVErfChGeiNHaDhYSG9tJXhEfFNmcnNDLnprUTt0VDJWQH5eNV0lUXE0OFFwXSJ2K2YzdUxoWn02S2pFM1N4WDFkeWBEaWkvWU5pbCRwYT50clkmPlk0M3QqTSpqWm81''@;'; put 'put ''PFpySWt7MilRR31scHxwQnB2TVE3JH4oe2AjWVJiU2JFOkB+UXZwYFZWSld7W1JFdDVJa09iLCw7Yms+RyViQzZwYX5gOShuQW1TWVNgRnZtMj5PMHpnWi48SltyYmhMeEJvOlk0QSw8XUljMzs+MFY5TlhUNypWUGt+XWMpPyF0WVlnYm8sN1JdbG9tOERyWXBGMG5STy85U0lfUmRzK1Uzdl1j''@;'; put 'put ''NHYpKHpuKTVraV1fPnE1Ulomfnc/Nj5VSn1oaypGMDh7eWQlTkhkN3QwX21rWlBfKDxbbyZ7d1ZyZnkqZyk3QFZ8PFtwdS8pLmAmLHFhSTxUeDBdKStUY1U+LjBNeCtbfVVYUWxxeS9EZCx5PUJhXXpGOWp7S2IyWUJdSXZdM3pMWDtOelRGY2t8X2VRczlkSkQzL2pXUV8ldU86JlpXbUl4cC8w''@;'; put 'put ''Ul9XYVFvIUJbZFRqLkVWZjZ9Xj8hMFtPPCpCN1E6N3ZpOHtKZ3Z8MCF2QWFHIXNNP3xucE5IcjUrKGJLTHR8Y1tTYks/cEFYJSRUPHI4QUguczc/TiFAKGwkSVZFVmErI1pURX0mJCZQK2JtVD0jPDwjNEtiJE4vVj4yPWUkXmYkUGR6Zy5kZk9uKDdrRyZiJT58bWdPeF80UVt1UTJsXkpOIilu''@;'; put 'put ''U2JkeD9nJn45YUZLb3pKT2ZdVyw/JUopITpxLzhkP2tKdntLWTNsdWMhImsze0pDfFcpcnd5S3AsWnZoem09QD1EfUZGckBtZURuQlZDIjhoeEQwXnxTfT59dUdFaWNxb2E6Pm9JUipGKm88R05EcFNmfEh2MXdDYy48XTVCK0NqRFsxPTwsbDJfQX5NQEprYS9kc3lHO2hQMTNkWz8lUyNjYGJ4''@;'; put 'put ''bVIzdnduZW1Nc1tjNXtXR1IhbmZRJGw7PkdlWTtzIXsrT2Y1OnAsQSM4JkwjdTEvKXMmcjw0VVN3dVR6RVR8XyhgQ1JaJH5TVVhyLz1SRFFhYUY0QVU7R2h8LjAvQltddTgrZiZmLjhKSjZ9U15kalMqSFM2PjhpRldpVmlZSkVBZVkiUn5DKjltKkA6YmVJekpjREtFXmtXa0FhcllieUVzcFFD''@;'; put 'put ''eUg3cDI/dHhqNi8/JiJaRl14YXFvQWksWjVhYzJUSFlxTjFbSGNsKnAsJntEaSRII0gwMWMkUl07KGVmLHIsanNiPzVqbGpNJkBfPV8oWEwoWHVocEt1RERacUdocUltbmo+Pns7PDFOfGA0cXI/UD5IRXQzJiQheFVjY1s6L0c5KCQhVSlvfFlUTSl8ZSVMQXtZbFc4NipuVHoyZXZMKE9NUCo+''@;'; put 'put ''U3xLT21HV25oZysxYXtHcWVPUiZkWlMpKGBre3ohXSNhIylCW2cxMzpgdkxDPD0vMWVbUGhmdXFqYnUkLiEoZkBoTkMoUUZNVnxJaj82XiNDJU59RTowL3czYG98Lz5eYWZ0Y351QXxiJmNHUyQvWmd7cTtsdVgpQlloeypUKmFbbHE+b2UhQjAjZXkxQmNuOTBSPGUmckdmNmZENSRTamF4Z20m''@;'; put 'put ''XX1NSVdocWg9RGMsfVh7PCo+LzhLMDppOC5lUHR0O3hfQzRCIyJ5IVRjcXlpfWtAMipxcDYvaFVmaT1JYzs3L2FtQllKWEs2Jiw9ZVhecjRFL2tdZHlOQSM8ZXpSdFBYJVVyaUMlKzltQCJfd3haQVJNd0lWNkdNVyZ5QSJdKEpGUVNCKnlufTBSLEpYfm1mMCVdeHsweSJzP01icjpeTlFINnth''@;'; put 'put ''dk9kPT5wTDxsdXVEKyo0S0U3c3FpdTdDIjFXK3VIJkBCdHVIOkBMJXVnO0o8JTBtfnZ0MyJqYHl0PTYlem1vKzo5Z1gvK0kuS0hUfG5halp+eTtRTGs/ISt1Kk4yYHgwcUI3OUJXVEBiWHlELDd5K2ckKGpxOFVPNHcpPHJYSS4vWi9tdG8kTHo9L1E1MnRGZHtTWGtLQEt1cW59XUZKJTdvWig6''@;'; put 'put ''RVE7UHsjRFhDI29hLCkiNnddcC5de1UxRU0sRGosbCJbaXo0T35bIXVecncycW1Yaml2ISs5ZylmdlZEdE1aQy98bHV+SGcjdnU8ZCowYXpFclFWZXNYQzZHZENlMzRbXi5FZjI/OH12Ki5adl0ldTp4bUtLfDYlJFpjU281Mj4ue2d1JGxAU2dKZixLeG1gL1MlTiRDcCh2IzUmUz1jdDEkWEsl''@;'; put 'put ''NVVlKil2IU1DZlt3P2REXyldIkZKb2A9R0F4ZStjJDJIOT16PFZGMkFAalhwPlJrU0FjMltMLkRKVWBQMm52ajAyL0F1NlY3NSUzVmVvYHlQZnpbantrflc+IkxEOzU0T3VvRUEpdFB+dEtoNkNdKF1xMGlkUGtEZjg1NEtTXkBDfU0rKXY2aTdeU04kYHBkUytxY1RIISopPVt0YjdleTgyQEgp''@;'; put 'put ''XSJWXkRHbkUlQHVgclI4YnBhPXFgJGVTPDQ5WVB6PWEkbngoa2p+TTY3XnhkJD5bdC5rX2MqfFt0eStyRnd2ZEdGMEpSeGRYQnAlXSFvK0FNS0VUMjBgRndJTSwlalgqNjRqaXREWmJlcilzUXokbCszdWdTfk8lTWIwSHs3VXJMWlQ/RmNrWUh+N2JjJExiVyoiSlF9RkY4Vy8sd31idlE1SDJR''@;'; put 'put ''eGtEZmhjOGcqdk9lRDZ9Zjg3V1E5MXdPNiFkcj4jOmRMfTc0fjdzNFdpLlhWNSRZeHRhYWFLS0decFQvbmRLfGhoNl5lOE1MUmhvOW47PF9RWEsoWmVuKH5XRCZBaDBKS1lscVRfLCZzW0tZYTcyLzx+VHpPQUJzKWNJLk9LUy9bLnc+L3l4UWV9cC5lJVQvRkpYLG9CazJNUXZqRmwuLHFWZXQx''@;'; put 'put ''IzdwJDRrZHVreG9xYVBLMFN4cGtwd1A6TWl7N3UkZUpvNztIX1NCMyE+VVFGNyZoIXZ6RVVQL0tzSF47d2JlbkxJTWs3dUwiQWM5P1A5T2ZHMjwiRkkyZE1rMUBYeD5bTCFvY0RHdzpzN0J7Qlh+Kn5PL1tZJld4aWhFdkROUEkhYU1YYipmWHthbTB3KXk3OSx4cHRqREp+RF0hM0ZZRllLN08q''@;'; put 'put ''JlZLaWlvMCFjbT1EPGBtazo5WyxaXzUmLHM5aCo1ZVRKUyJuPnVPXkFxMDVRMDVzQUtWPywmZkYuVmZSSldCLltMZW5TJUFxLilya3Q4cCMjKGdIUi9RWlV4RlJVPllBbkoyMi58UyIkOTdwbyZUbHtWeihfPWVVNk01QHJebX1Rc0IwbTtbcmc5cHI4PDlePm9yLGdXe1BwQmYoXmYwXTloOFdd''@;'; put 'put ''ZloqOTIrRzQ/SXJ1aTJbM1E7aUpiKjdCfEN6OWVwVVMrSVNuTnFASXI6KDArdV1NQzlKNSxtbj9QXjFSXzkoU31MbHFIcHtBR1dkWCt8dCFqOnNnNzozIW42a1kwXjVpPlcjbmZXaC8+YTI5eHxQeiNQUSt8VXFzR1Embn0zK2MrTEpEVyMyW1lbRnU8QWhjai8pNy8icjp3XXFXPn5mMF11QzlL''@;'; put 'put ''N28/PWlbSihRSjdtSndCOFNZLHF9U1p4fUgrdUFLOitKJFo+IW9SMnJVVmokblFnW1RLK09veWldaT46Lj1YK2JqV1N7SX1GVyZXUTRkVD1zVU0kUGVofFcmRVFnUzo3YkshRU4qNmF4ZW12dmpTSmN4NTZWN0xoazokWDk3QTU5enowVFFGS08zRXAoS00qTWd6NklDbntzKSljVU4peCQqP2lA''@;'; put 'put ''dVNvcnwmYUo4dnZkYzwsQV9DX2FNbFU6Z3pRPHwiYTlnMiUocmgjVU9YajMjUE5lXXxufiR2SDc8XV9xMmA5MDg/b0daN21hUz16bDRnPyhyVWdkKztiJCtsSnFTPHdFKWl4MC94IS4sQylqcWBfe0thVDY8a3Z4VlFWU3ZTb0p7bEJoL3ZlUkJwRXUpRmEsK1QvYEkuaWFiUjdldnFNazZIaz15''@;'; put 'put ''KHJAJllbfVIvTDNSWC45THFxKHJ1QGhCP1Y9P0FXfCF9amp3bSsjN1ttYFJvXXwsNDEySjF4bkBdK0sxbVs+R3BJL2REd1Z4eFNiLkFNXj97bjtkZlt8X1dta21WUm9dPlN9Oi5FOSo3d0hXSXEkdF8sfjNCQDVsbG8he2BLTzRMQ2NlWXVMPDs4YyFSZSx7OFVdTyQoYzdZXXJGTCtUK3I+QVJ0''@;'; put 'put ''fn5aQU8/X2lJKUBpZm9wYXgxRzZXakpfV29AfEBVam1pa1crV2EibXIvSU1KIlU2fEJURnR3NlUjNzhhajUkdjQ+Xm0ycV52dDo0I3oycjBeXkooe2d5X0YjPUgwQl8iOWVzZTMhV2liYFJERXxfXVkwUCFeND5CX3J+cEU9al5IdF97MERkP20xYnwvTWJYTnc4dkhdalkoMFAhUShAcTsjMGcu''@;'; put 'put ''RGYpT3hAP11iTlRVIk5INjhvYS5eSV9jcmk1dlg8R15IODAmZEhXU2F6Qzl4KWJQLjJMQ3QhRWdqKVNHNmZNeVQwInN2UWhtQU0+XjcraTpKN0J3PylzVzJWZE1fQ28leENNPzBgcHZuSGhoSi40W1tnRD9OcjBKTEQ8cHZacEdXSHxZcXV6QTZYW3ZMdTEiZngqJj07fmY6TiY4KXJ8LkdgMipq''@;'; put 'put ''Vy5gaXglUSpeYF11TFl1TTxpeVhNWCFCPnsqQTN7YltgPiVGaztmW3QyUyMrTj9OLHU9YTVoYkcmbCl3TGZvQiZUJUQlO2xtMGFNW3J+PE4sRTtMakc2RkdxfCRJTT1kck5SNE5BOihee0ohMUZffjUmYEovYm8/IlJyKC9dM0N8PXsrVjROdjpZcEAiZTI/VG5URTpdfHxVZyE3dHdLM2pKdnlq''@;'; put 'put ''RSwlanZlKlMsRzBJLyxtUl5oQWYrZFtAK3ZbVXZVWjI8JShJZzUrXjVGdmZzY25rdn1udEd7YlUqb3pldH5zVEx0LkMzeV48bDtbWipzPXE9cT1xLGNePWRUNHgxX0pLUGt4OyxrSCpnKGo3Y1s9UkYzRzUsc2AxaWhpd1J6XyxNU1tfJjN+d3RPTnI4aXtOYmVWYHApYTcxM3JIWCpiVnUhaH57''@;'; put 'put ''eC9fI0U1UFJRMzMiR1VjOy9pOUEmPmd9XUJ9O3I/XS8ifnw+SFpkYTU4U1Y+UXhqUklDTkB+P0osO2heRzNjflYvY0BGLykhe1M8OHNSL2h5LFBMN3xHcXRXRiVlMGQ8M2JeN1VNYypzRTpAP29LfiU0cCEzO2w1O1E4XzkpNV50UEJbeGU0eXk5PE5vYkdiLnwhOGpqJHAzVHJTZWY0RkZyXyN6''@;'; put 'put ''eUhGVTJDI1tYUz1gJUt3WEk7QExWKCRfWGFbeTxndFVxaGhPKW8/KElTSlJ7VG1RKDR0fk86JkB+Ykg1YDp9TzNEIUVPbUBGaTgrLFFINjV+IUc2WTBNbzh6LGxGXTBqY3o5LjRDWzp7d3svVyVGUkBgZU8lZVYjblNpSTtfKkg2NDY6VFR7PXJGOV4mPHA5NmQ7OWJEQ2dKNiJTQF15KV89T1gj''@;'; put 'put ''IzZMNDxHaiRmbmU0MEEjJWpUNVFPIWlGKmY1UVBAIVkhPHsmdVd0R29vKD9AYUloeHFmbkd5b2BJRkQ0TEBFIiZOfk4xVVI/LElmPSM9ckImYzJfaHttJUMrLERuKENfVTU5TXpvcUtFTXZHIWJbXVY5dVJOeDoyTTRMZiNbIygoQCYwNlRaa0FWWF5DZk1oeHVHQ2oiODU0NDE2diMqVCNuVVti''@;'; put 'put ''bGohJXpqU2BMYVBfIlp2T1ZzJVFiY2g5Jjs/XT9CVixSMn54RnplYzZZUE9vZnswZ2ZEVnxuTlZmRWZbeiVGT2JlZz4xRUo/Zj59QzFHOy5UaFksSH1QdHxPZmE5aSJ9aVd4L0xWLnhAX0xRfj8uTlQ4Ny5xejUzUTNOLmlEbj42ckVSYSlIRGw+LEVCdl49MytKXiU9Vk19cztKMmpzeG4hbiw5''@;'; put 'put ''SHEqJEkkMURtRVhNRUV1dUxaeHo0JHZoQE5HeXJtUn0iPzdVZzI4VSMpT0lPWChHSHZNSTtudTBfMUhHOmlqSENeaHhRS1hQT1BpWTA+Xy9GOWZFfGU8Qk5mWElsM1tYfT1ic0Yzc3RyL1lCOiZoMCYxMTZjJVlVNH1WW11jNiNNUnk7PS5paWsxeFVJc0VfcC5ELHBgcDwzJEMwckNnblZifSZq''@;'; put 'put ''NGYvM082d1tgclsjcixMOFQ7TCZSeDRLcVtyWV85cTwicjM3QUcsOTErS0FoUz9gRDRDcE5pKz14YSJsbDE4VFIsQGRrX31WIX04YGovflVSNix0M2gyamc/MWQscD1PMEB3RltkeXdXcXo4V2JsOnJMQXUsOWkofTtxL3U4X0J1SzlIdF8rT1dnVilGcTF+amVKR35XVCNfflM4QndsMTQ5e2go''@;'; put 'put ''bj52K0o4eEJxUmNTPlJsbDQhTitANFpGZFpUfV0kM1g9aTheQEt8eC5nKU0kSWB9eHszR2R9azNZMzpgc1o9Ty8iMzZKflZ0R1hudk1YVnRjITNJRE9EXktpdUYhJXVjZTc0dGRAeGdRK2ArSS43PD9sNEZlWztsV0oqMzRFUmJnfFJObnZSdjxjPU8pfXdLZEAhOF8sJnNbWkJ8QCxefGpFTX5W''@;'; put 'put ''LEhkXmtFazkyP2hGeDpkKy57bkt2Q2tRZlgiZmtbZ1B5SWlfSWRKLFRmIXhaMzhXYG16YEVfSTNzLGlSaW9pO0UoOitJcyhgWTw5Kyg2Mn5JLmZbfjxvQTZ+RG1FbVo4PXIrVlNldzR1U3pJNnBLK1hWKC51NTdvaFs9P1JyeyxBa016ezkvISZVP15FW0tsZTUpJTd7JXk6aVBuemJmTHRodn0m''@;'; put 'put ''VnNbaGg8YTVbTSppJXhDUktdMkAvajxBY1FdPzx9bGgrQlhMM1pKaDl0MkYsOV4lVUpuSW91NmlOQnFsPmM9OW86SjBCY2thdTRMYXVTX2klYmtHWnl1LmxXfGs+KT4mci9GUykxMnAvXjhyTUkwbFJhKWJ8Tm4jN0dyZjlhUnxZIlM1OEA6aWYzNnhIV2tzSSEhblk7QzU0QzdwVnZDPl1SbUs7''@;'; put 'put ''fm9NfWl7RS46c2c4Q2VeTSJKSzM5b0IzKjchSCttaGBGbygsd2RQcDYiQVBGX2FdMjM4QGhnakREM0dBKi56JEd5VHlvaVk1TV9iXlo9KSZLfGVfZyxFPV5kMVQhdUN4NXFNZ2krTz15YCYyTygibV5XU1ZCMlNmQkhYYzUiPkUzQS5VMiFtM3REPEMuMnZGdjpqVXl2QixhfEsrKmVHVDkuXlNZ''@;'; put 'put ''OSZ9cEdecGApOjJXfjsyfjJKezU+YFNYfVd+ODYuRy9vdDp1bHJLSGdHfUxyemB4dDZdbSE2cGhreWxXVFc9PmxZV1lNc00haiQyNF5+UDR6Qi5SeFgvIn4lQix0bUJ0SzkhdnRBIUh2Tz9GQ1tVJEhUKjB0fEZTKV1QbiN2WHBxK1EmS20reTpHZEI9NlhZcVFTYlZjWysmXXE0ZHQyX1lQY09x''@;'; put 'put ''OFtEPTV8WTNyRUs/aVR2c2VfKGplNFBHYGBRW31iIzRKX3k8WnB9YVl4XktRbG8/fXJQL2hzfWkrQChsOTVna3E8KG9+aUx0U09vKTkmNSI8VyhqODxZSCRnYmt6NDNXOVtTPWFjIks5W31xOS5GfV1gVnpyfEdJfV9qWCpAISpMfThJV2ZgXnkvKFdKP1pra3htST1pI0gvcVBDST1SJjNPO0Q9''@;'; put 'put ''bzRdXSYkNFYxVF91JXI5JFdeMFJ7RjtFME5PR19INlBddGZESU5JSjBgWXh0ZHBYTkg9Nl4mPDU9Vn1dekcwQl9kSGE+YyUudVJYbnRlVXBeJT1YKzRmPnxwUUhuJX1xXlhMamRCNjMiOilRVTMsMSY8S2FdfHAxbFtGcE5GW0FjMDwpT246ZGVfa0RYTnc+cWpxYnNUIk5PYkY7SGpVZ0RsV09A''@;'; put 'put ''VzMhPUpzRyg4N3BWcF5zRSF2JXNSLzEkLzNWfSQpaTFwd25SVll0c1k0Y1cvW0o4WFcsREUmVERdSTdzOSgiSX05JG1wYVQvXXRIPWR9Rn1JTk4ve2ZtYjtjXiUjXTlpYmNPXiNWPz9EYzVmdkBQLyFsUmBEUXx+PHMlfklOTi9mODp4aylUXlJ7b1FUMzY8I284R1Npb3FUU1NXVz5ObTE7ZWt9''@;'; put 'put ''RjlkbGshRHJPMWpfWSF2Y3RuVmk/U3RUazh2VH1QWT8kVCtjbE1YbnE+YkNOamNWWHNOIV9SZ1pWL3A4TXBvQXFXayxnOUxKZi8hITZ9dlhEQ3toJCQ4MlN2Z043fHFjMlo6WltUXypiMEZQUW95Xyp1KE44N1lTcTF4c1V8LHxeQ2AwRmJbRXUqRXFyN2BLL0I0M150by42PSlRfkIkcC46Tl9w''@;'; put 'put ''V3M8IjAheyxSIUlgZnM4LFA4byxJO1IhLnY4WkFzU01mVGRwMX5pfEV+c2UjfVFdSVIhZ3VaUzgvRSI5LEpDQ1RlKClJZlQhbCIzeXxDeV1qMzU9NHpTSEtDO0h4S3BLI19SQkQiRnRLPC8ycn4scU9lb3xCJT1pSTBRXWNSdD4kV0NCI1tPfSlRMnV9KjJwfjQyPmQlQD9tc3szcTZCK1ladk0u''@;'; put 'put ''Nl1gTGhsNz5MPCJnWVpdKnQ7YDRpbHMycE14QkV4aWMvbEskSldgb3BCYEorX1l1fnpKdC4xPmM6Mzl1dixvU1l1O0xUZ0o8KDFFbV5lIjEuTkFCNEpYYVVFSU9hNUM3fFFQM20sT2RnS3JxP0hJQ118LFpwUjNZPTxUJGpyZlVtISwsTTAseFhGY0cvQnxuVjF7Rm1pXyREXUNmbVYsR0MjPWxC''@;'; put 'put ''ZSJlVEB0Wlt0MnRPa3M0JkZSOjQ0Zzk9bnZnS254Ol9wOWd3bmxyKmUiLGtOW1pwQytqREhedVREPHRMRW1+WU5tOlQ7OXY2OFgsfFRbUD5SSjdyW0ZGWlNCfCwuVS9GRDklQ3F2Pn1NVGtVZ3QsTEQ/X1Eucz9OKDElLm1YOTA2QkpENTQqUzFVYHtBc2o9QjRwOXtCPH13QUI0dkJQW18/WkYi''@;'; put 'put ''SWgpWG8oMz1RYXwheT4uYVtxMD43VSM3TH5vci9uZmhAQHZmNFRTbjxAWCF2aTJeJlF2UEdKang0NHZQPVQ+dTRFUkIscno+ViwrPC46XywmJV0qY0JOJDN5UCZfVUQpW2ROJDMoTV80PU93VDVPMH1xVmU7WkgyL0ZNY3IvclIjRjN4LD5pWTZQTDwxZkZWb2E2amtuVklVKHwlc0Q0aiZ9UVZl''@;'; put 'put ''OUFsd31RKDBVIylDPWwsOHlkK2NwU0JjTkk4UkFQfkR0MXdyblJpe0JjQnNdS0E0fHJ5VXk/Z0AlQjlnbSw9LlpvQjFaMUEqZn4zLyhLQ29CQlJHI3Y+Qkg3WS9AflYoNXRCLmQ6NCl+MVU6Ty48bClxMW0jWkg6TWxuKF0lPyZwS1AodT9UYW5iS1pvLF1qQDZNN0tfSDdweHt3fmp5UnUkNWtz''@;'; put 'put ''Pl8vKVdIUzJkfHhXP2JVSWNpb3tVWVthe15KWHZCUzMwTEpBbHdNVFJGN2ZNQ3lQYSspfXR+JERJKlp+VjheS0BLQEp8JVpkPXA6SzI0fGIvMTQ2fGMkZFNFKzF2N1VncFVCP0tLJiJwODlvR0FjZFczPzhiY3BrY1AqYDpRKWN1NV52alFGQyVaTE9xLll+XUhHO3N+ZzA7ZUJaYGw0bHlyRypa''@;'; put 'put ''TntMKntaPnt0ZWQxcjA8S1Y0WDRgNitxdSJXa2IldXQiPCZjL3JbOkImPE4sITBkUzRbLFpwSGJJVVlsRkFbNT43X2ByQXg1VSNfK3AvQyMxIXE/cC9hJUxJNzckX0I+fGFuXTY+S3wuaWJkRGB4PnNBIXAyUTE2ZDw7VW9UaStha3Y6fUQ0e1B0OnchL3FkbDVqQE9nZmIlZ0JYOzhBUnwuRHVY''@;'; put 'put ''dVZFIjIoQDhlRzM4VlB8Q1YqaFR1d0RHMWlYNnkwIV8uODdpVi42XShGcz0sQEtpdXpfI1MjU35jUixPazA6SlE0KmMhV2IkVTlGJT1mKm5AOCFFJkt7ZVJ9M2Nbfm4udDA+bEBRJkkkSkEqUHs/ZW5Wc0RVU0wkSz5CNFhkJTZ0JTN4RG1maDRBZGF7ezpdbXNraFUsLEJISCpzNShbNVRPJE9U''@;'; put 'put ''KGskYS8pUntxdTZrJUE4KWhLJWtibn45TDJJUkw8K3EjKysuQjhCcl1fTlFqczxYWE5kcz0pJmUiVlJzanBCW2YuJnpUaGsrOCRyOl5RL204eGBkflFWZW1aRzwvS0JaZGlVTzR3cVEiUitYL24+VytNaXtFVXUwbz4rMXlEPy81flEqPn5GRU0mUX1NaStWLEw9W24mJE1kKlsuWlpNQkN+eSNM''@;'; put 'put ''RFtuRWN6Km18Rj8jLlomfCIzM31mYGBdbmpPXUVtbWlhLmcvMF9jJW5dS3pgPHM2aGhdOTB7NT9BJEQvMCZRK1BDfHkjbiwxQzRMIkcmQzh1Sl5zPDBXOWZEUGlTVWhLeW1XUlMoYDYjVCl9LyE/UnlOLERWXm4rJC9URl9ZcyMlejQ+ZzE7SVtaaX5ZYXZjdEwvQyouQzhbbyhETThEPEZhY1pu''@;'; put 'put ''KUZbYyR3ZHdPY35adjQ/MnN3TztmWXBJQSksNDgkWXFIcyNKS016MX1JJGshaz5jaFp2MTxpa3d+aGpOUEJqZj5jX01bdlRORClfW1NGdjhEM2trTEVkVFpgREQyMypjJEAlIWpWdU4/UWcpMyNqVn5NJSxbW15ybFcoPXwrZWRaUER7R1lUTDpmLlA5JmV1dTxofD9NZ1tOR3lzWVo1UmxXcD5m''@;'; put 'put ''dkpETkhVejlGT35SUV0haU9sYHVQcWw8W2o9Q0JbPkdPTG4+JmIoV3U+dT55YEA4bSlpQ0NHQjZfbGY0QVtrenhtUl1ZXWlxUmt1UTVrd0svUDV0e2ZwQG9peTFdd20+T0Y8aChTdzg3d1N3e1tAbjE6Y3hjSjshJWdjNWgoX1godXYlKThhdH4rXmAmIUMqb2lQez9AeDJLWV9xWk91XnhhZUAk''@;'; put 'put ''bD5lTSZCdygrI3QpeCtBTSJuTlk9Xn1nZlgsLms7ODciVSM0ek8kRSFaNyZTY2E8PVdGfFFYIT1peD5fd10/Sj95dHE4dT0qJFZmeEhMUDFxQUNgcWRRd2h5MkZ+W2h5OS5fQ2Z8Q2MmQzQ9PE1BP3R7N1dNZGxKOXsrSXJ9O1JGKXY4anZXTjhwd093dStoTkg/Q2MxXW5QNV5OYUh8NHB7XTpD''@;'; put 'put ''Y0c0cjkiYzxkd3kiTEo4RjRoaEpnVXNBKFhqSiVKXTAvSHc4RUxgST1ndHBpPmpPUnRRdjpKfWA9SHlpcE5wL0pzcEd5SyJYIWU0Oi5dMDYqKTA3c3RDRm1hOytCOnQrR1pCO1c3a3tlK1QhenVKVXNpMTVDNXduT3BvaW49XjNVViFYW2x5IWY3fiZaJk9pKDt2Yi8iP3VHako8JkpjUW9oVkhi''@;'; put 'put ''WmsxV0x8ZW1gR05pbDF9dmhRWmBwcFMoa086dHQxWitxZFIjYzFOeGpAdW0kezFzIyJDYSN0ZjRvbHYvVXAqW2dKYXFwRlUpe3xDVz5OYDJvOiYjXz4pWSJ8Slt4Y2thYWFBYzIxfVRIXXtIcTBCfiwvOm5WSTA1K25HUkFZQnMjJVc/STZ+WTYjQlhdPDI4QWNXUEFVfFFOXUczeFM5e3xZNiNz''@;'; put 'put ''K3pzKHx0UkdHX0d7KTdtXVBrIWI0XixxI29sSzNJcyl6YDwrfHpgZzs0LkJ9Nld8fVd8TzJ+S35GQjU8WHlXNUZedlldZn03fVEsYytTPnkwd0QpUFdgNX19KnBmQW4yfXtSQUoocFEoIm1gV1VWQWhbaXwxby9eUzo+eyxLOSQlRWohb01VYSFUKVI+b3tOPj5naF5la1h9LjBpME8jeGUwXXM8''@;'; put 'put ''QzQkLnM7XnxHJlU7PEdqXjc4cTNgdTN7dC5bT0hOUWQjKl1Dbj4ob2Y5dTNAe3t1enY8JVlCd2ZseT1dNl1hPVkwUEc8JmB7amJvM096S2NdMHB6LmQwJHB4UEchWUx8NlVHWUdvQ3pKcXwuYXBRSyQ8K0pZbzFoRlkjfiN9KmduOEFaJX5VR0Zjc3hvan1zTWtHJi5ldi4qdUsiOWU0K1Q1P144''@;'; put 'put ''SH4lYEo6JGZ4Uj03T0ZbfVkwZkY0I0g+VVA9UU8oKUkzZHtTIV5CVCF9Q2ZDTX1TYSw5dDlweyRAWSl4eilwUyl7eUhpVHhDIT5ULEBXJD5bUT1DWS5AR3d6LD08WXVUMUE9MXZddVA6UWpibG46bEt+S3FeSTRkPnckM21Lbyw4KWpZRH5wI19SKHZSbHs2SVReXlVEImtLfVFmVHNsMjdSfkFe''@;'; put 'put ''KHVbWmpecSMqJno3UiF9S18uZTNPRk05VHdsOSNBd0Rye2lPfHQiJixyWkhdInhER2JCPCRvSjp+SHJ9Ml1LMng2aFZiNG5vdVV+KiEsW3VDNDs5TEJfaSNkPVNmZkhfJj5XPFJpaXNMW0tFZ3AkUHRlNVJ6I0gyRjduK0V9T11xc09mRjpKNDx7JjF3OiYjdjNbcWsleCEsLCMwe19je1ZvTSxB''@;'; put 'put ''TzlzMUR4KGxlcl0rM30sXnl3b1Zjb3M7cVZjIVo6RnZsYi4wVy5pRV4oS0RnT2g/d2QuRmZPZzIlMjR2OjVHK1o5RiJ7fCxzYj5VRW1hRD9xc2dneHdfei5lKzAwdGdLZltye1c4OjZ8UVt0bVFdS3JKS31YPzxrWSNzMz17WkldOGR6bmdQfktYeG5AKzohbCRlbHcreEUycUBGW3c8Klh0dVRO''@;'; put 'put ''NCUzeC4qY2RKOldTeTxiM3NJcWNUSHIrclNxT1hEX3ZzSXJ1UnB7VnxlNj0+NDd1JTUkN2BDL0s2YFROPlB2XygmSHMuP0BscXY9NSQrNEIkK2wkTH4ofEU4YiQ7Ok5jKit7QiZLekpVTzQyWVBXZVExfDwvYCgoZltrOkMrSzBseV9WTTFCSWtnSFlBbElbOmVyZX1wK3l7bH5AKE5uS0Z7RlVM''@;'; put 'put ''MG5bI0ViZUclRlUsQD4sazc3UE5OSCo9aWN5dGs1NjV+XyM5KCFob0giKDBNVWJ1Wl1WaXJPLGxZYmUzVkVzJl1mQlk6Rk1+Z0V4VXNdMXh2QkJLcEVwRitGcmp4Qi4uWnNdfnMicSlHOkU8M3M1JCF1MC9lPzZNO0ZXUzVTcz4wXyNVN1Q4UyxhezNXLGNlPChYTDMzdjBWcy9XOEVVZi9JMllm''@;'; put 'put ''ajdZIyh6LFhiYV9jTnI4e1ghNGhER1dhXUBZUDglYX1tZSFmaitsTGdNYkg3ckdpTEM7UDBFe2h8MjFCQHVid2JZQVhOXk8iYT83Un19cWlPNkpCTEQxV01WcFo2RlZxMUI6dFtjRlIqRDlQRkJySX5UXUEzSUZQOGt8THwqS1l5dFZxbC99Vyh0bzRMeDMoVypPdipEfEI2Q2Q/bj1xQ2hWJGtz''@;'; put 'put ''TG9SKWFxKXtSPEU8KXZ6UVE5QmhYc0xbSnVHN3YocyM8U3FjOGBxLlhBaG4rZmZxdFdGIVcwdU41UHJvNDdDP3YiVGxhJDp4KCtNZUttbSJlKjwqY2szQ1B5ZyJNMD88TVs7Syp2LmU7ZyVnQnBrJV0sT3RRLiRmWk9AUX5MX0ZjRSNaNnEyKltgPH4sfkZRcX4yMDBZPW0+cUk5XlliNkBMVUpt''@;'; put 'put ''NE9ULnEsdS4sei4zPlM7ODdfVTt1SjhwaFtFTSkjXj8jcXRTJmAvRzRxIWZIMWopVkRWI2ZGVCxxdk5jLn1dMTZSeFFROnYxKi81bTA+ZTNMSlVoVypTZStQTjkmdk1IYGBQPTlDXj9bNnhOPXtwTl5gWmxIUURoRWIwWG5bT3pZaiM+OyNYPyNAMTIiSyN1PX1VZ2B7T0tgUypNKHtXJnZdZyRw''@;'; put 'put ''TjZAMEhFX05jT25KRV5JaHVtcHA/VUtgakJTKFtATCJFQW5lSEl7Om1Xflh8KXU9WkxpaHpRSzdwWyxAdGQvRS9TJVI7fiU7ITklSHB+VE05IzMvT3Fldzx4dmA/JTM2Six4bGk5Nk41L21mOGBWJUo/QGs6WmlXLmRNVFVzZ2Y0b0A1fCs8QFBDeWVTdmZkWS9qS3kiVG1dW3R5Ky94cUIuMndP''@;'; put 'put ''SjtPNyt5K1BQNXhTQTVAKmwkYSohS3lSOlFaJkB1eVFvTjFAOkAyZ1FaOzh5RE9Nej1eRnVWejRlQWJQSz07eiosJHwvezpMK3Fvayw4O2R9KEdzO2ZeWytSfC93PCkya0QzOiw8VVVLPVVncWpeO1FdWlRSaDpAc21NbC8sSX1KT3hBL1YzVVE4eXc+YXVXSmNtXSlrNThFR0VIOUl5RDlQe2M8''@;'; put 'put ''KndAY3xeX3g+eWA2MjFofnlwVFFjei5kZXZzeDBKUWZBNGcpQ2d5KEtdMl9oaDgvNmZwYVswXTg6eTVRNmNuSHRQOiElSFtOYlpjUUssNWAmQkxsOW5aQjdzYHVbNDE1bUllSk44eClkMUdDQTdKW2EwbThMZCYiRU0xUGs9MHNGIyt4YEpBZHkqTD0/O1MzMS82cnkyPWQvcmI+VFBUeD46fHdZ''@;'; put 'put ''ejF5ZjxBTTdGcUc7c3ddbDNlI097e0xAL2ovKWFgbGpkLCIhdXdCRHxROmBVTitfMm9CKiQ6K1BpKmtoeERgTmcvLk5zc297RislbUc0bW5FY3RFfj8qdW07YWhHLks3KVBPYFZjeEhNWXhodDQmSCY9LzhXb0I3MlNBZFN6aVgweiFjeTZVVVNIZ14yJExRejpDI1prQ3NPX1pwX21PUERAfTEo''@;'; put 'put ''aztmeDN+YjtuOXA1LHtXRWpVVz50PHVlI3B7O2FNLzEyXWYqW2FmIVcwJDkiV0ZKOE5WL09sZkFILGN9N3V1TltuJn05YysofmIjXWpjMkdUa3p0QyheYHosR3Y6MEsuNHY6am9nP2xeWXVQPmklMithUGl6RVN2MTpmfW9jUzBeKWRvanpgOF5eZVhqN2lJLlhUYnNvdjF0UHZqNl1gX0R8biRt''@;'; put 'put ''LHxmO2ZCLGE0P0dvaHtRfiw9JW1kP2lUP09xJilQOi9JakFuI2RyfkpKPTVUcURAJXsxczVWfUUxOGRwfilMX3Exe1MxLnguO3R4TTZgTWlGcWpXODxoTFZSLkI+aUl3aDtXVypiajQxcjd9Q0JaM3Y+Kz9YSSJTYjMlRyh4WF8pO1hvMmZ0QTFybUJCd3JDfTc3Zj1rKFojUDtSSDVeXzFkTjA7''@;'; put 'put ''VE02Wzcud15fKSRqSGNmNnV3KyI0Rmx8UlpkWU0lSCoqeHZgSkZOQVlGTkIqMXdaZG5QdHg6K3BMXkpoKV1KJDw7VC9CdlMvOj5EPytANmJ9V1goPTRESDNNeWhIPl1iWDZbQ0VUUXVJJklaPFoxWmlUfDtwOzlgaHtGSEMqTD5FR11mNTwrQjdZPzRXXkl1TlQ2ZWUyd1VqcHhKRzolPHdWaWtR''@;'; put 'put ''K1J8cUB2JFlmTyswalJaenxhTSledGolfGA9X1tgR0ppO3FVcihwMjhicnFMdSx4UDU6OX1kNGg1dEFmR0NYVjd7ZGVjfDw7dSEzZmJTRVRUMUF+cnhXcn14ZjFXIX5HW2BnW29QZV8vaXo0SE19dzBVQEZ1MGp9KV1HWCE/IXF0L1ZiKzl6SCQzQDw3Q0VqZ0Zla1UoVDU9KSFWP15nJWlyT0R5''@;'; put 'put ''SWF4N3Y3aXFbZXRXZ2E0IU5EMStwP2tvJjJbY1QhXz1LNDQzW2dDUGAsJXVeL1hpJiljK0J9cXZ2V3J4bmlpMHBoYF5UcUkrUG81WH19OVVKMEMlRVJIMzkpYyljKWMpY2pQJUg+dy91OCV4XnM+K1BSXWhubkVsPiRzdXROcG47Omlwb0xSTFJMUjVuTFJCaWE/V2lYP2N3OHtMRiYuJiN4LEQ2''@;'; put 'put ''akhoY1k1Qmk9Oy8yeG5UWjdbYk5tcXVVbWNaZC5LZiU9ZlFqPjdrQkZJb3s+V1hXRTI0KnIoPzZTbjBzdnVDMUdIJDR3fjtvYHNfZT5mLkw5RGQpU0RxP00rKFtgW1d1Mmt3ODh8LDQ9SV0vMmBKRihVWC9GV2hFIihuYD1USysueUo3T2M3S0FPPVtLbC5ZK0QkdkA6SHhgMnBQNDZeWEs4ZFg5''@;'; put 'put ''XWgsUDhoWVh9dDRHcjNLOnc1N0Z6ZWM/XyZLOj41UGtQalZCUDJhUD83OCkjKEtiPUJGR15SRnNzNmVdK1c1QEJkMUBCfEhXL2cqPVd1VjZFXUkpNzpKX1s9YTQ2e2c7L2QhVmdZRyhkbTdkNjpmPSsjbHwvfGdCN1goO05MRVEsRk9YSTtkNiwifC5xSk41MVEoV1Q5NDxuQmR9UF9bMDRneXJA''@;'; put 'put ''JDRPJUAxTy9zVixUYEZmU28zQzM5c0xxalY3biVgckg0V0Q+dEIicEFMNjVPSHU+LmswS2N8IWwvXl1WNXY6RG56STFjUX0mZTJgdGVgYDgpWmslO0JhWmspPVdVM2NCI1smdEUyZzRCUExFJXxBNDgsPXhWL1dpTFY5WDA0IS84eUR5ZFMqQXgqM2RUfl9sJlViby4mR1tZTkFJT1UwZEQjdS9b''@;'; put 'put ''SjtMNTdRXmJqWG1lPHxCYGokUXlZPnliNHlOSykueUBxdXRHdTRQSl1FUlpqI3VOTVYmMmFlTzlqYmpBNTgzRCxPSjsxNCs8WSRTNTdeYSVmTEJvdF12S28zTDpDSylFIUx2LighWz1QWEJsdEEhdXBkSj8hZkZBRjtkR1F+JGg1X2F2MX1KI2ArV15TIyo6Nmk2MSs3RHVtfEZnZ1plL19CRndA''@;'; put 'put ''MkVQNUVUdFhfLChQKlIxRzVnRS5Le11DLHApR1ReUWx1dDNbZ25rMm80Zyx+X3o6Snlla2lYR0BYa1BGPVFgRHVmQlJCMlJUUG03K2tsbzRidGE5IUZHU3NYTGgkT0kwSy5eclMrYWEzayRLRiw2UVhTPzA0ez98Insze3s4UyM5ZXRPflZ0YzdDXk9jRkw5KkNQOCohcW1AIVFScjRpTG5wQzBM''@;'; put 'put ''cFIxbyRzXTU5ckM4bFVlKUkwVjxZU2NuQixhQzZoNCIrKHJfYEBtPltZM15bKz17UWFASFQwZl8sPX53cmJKUn50U2hvalZ4Ul5Id2pOV25qPVNXNSlXPHplbDgjZ1VKXWw8VmwpR3MxPDpqO1U4ZmUqcTM2Y2U9JCRTZjlaZ2gye3lRYm1scWF7OjI2JFN4bGJkO0lRQjBgISlDTHI3eGY1NS9D''@;'; put 'put ''d09dcD0jcDReVVpIfiVCby5QI10/PEFgbUZbRGJCVDJpQ2hWQjM3KVlyUDI8Uy5SQ118fiFsNFNuNEs8MFVzdEBxMmpZIytdUGcpSVpkel5aNVUuY2xUMlAyQmMzPUh4IiI/bGg7WTFlNkR9Ill1b3tQNjh1MDt3djF+VmphdEVHT3Y5VHwwVENWSlNoQyFOUF8qejBHS21feiMlKV0qZUEkRXVJ''@;'; put 'put ''Ukk7QDIzRDw6T0VFWFt0RXVGWHRdLm5qTmNhZkREbEo7dSMra0FdKStAK0g1QWJOKk1+MFdLNiVHXlB4XWFAO2R7RDolPGJhJXZBYG9KblBYKz13ZTFkRihHWChnaVVzPkpgNEQlUEY3KHprME4oVnhqM3I0MmZKN1V3Un52eyR7SyxIYmExXjtSVVAxTk5oKiV6PWIvMmUic2JPX256QC5YKF0x''@;'; put 'put ''JGdSY2IvIyxfQSFgP0dmSy9IUT19Oj1HTTRIaWxbQjtaRF57cDQ8bmx4e09IUCZPRilpM3Z1PS5gYiZPND9jKkhiJEhlKlY1OUtyZ3RxWnFAY0YsKjkhM1g+REtLUntUblhTPnJmRCxaZlBjZVs6Zy5QSWd2N1dNIk9hLGRTOzkpQ1lxKyEvbVlYdVJrNER4OjsidEhOY156Jml0VH43bVJHWWNS''@;'; put 'put ''I0lOSVBBTF5IMnhiaTBVa0JkUzxxY0Y/W1BgN14wJmo4djwmND1xX1YpJTcjYnphQl4uJk97e1czc0I7ZHFre1dWS0UoYUYmSVBDUSxZLD9nfGQjaDJoZndaRCU4Ui5eO2NgTT97Xm1ZUitZMkRzMjo1KlpMfTBwQ3NVYEpQJl9RdjJ9eHx4fHh8eEhoNDdCOVoxP2pWfHlJWUouNV1pa0g6MDow''@;'; put 'put ''OjBYP1hSc3w5b2VKdlV7djl6VVV+aUJjeUxPZS9kO0o4VD0vXnFKNzJfRCEwZl0/dTJFTkg1R2F9dSUjV3V8KTt0KnVVQiJFcGQvZCVCUHlGcmpIcEh5MG1JV3RpQHMiSXUxOkhwV3R1bzhnQjQuOlh5e1lNcDFAdHszbk0yaU1WU3JKYy9rUF41OUNLcEU7ZmFwMzlnOjlsZUt0RzhVInJsKy8j''@;'; put 'put ''XzNoOlA7R1VLRV0le1VjcCRMTjVfOFcjcW80PG0zNkg/LzlVaHk7RncxWHpkaUAyMEd2QnJwem1zRzF8RSFKcDR4VmVmI3E5NH10InFXYHNOdHs0TiNLYW56ZGFqMWgjcVMxUU1rKiJFIlhvJHEpTSw6WzB+NFtPdEVrdHNdakk3Zzh5OjdgamNvdGhiMCxIUkFPenRPWmRjKXNuc0hPcTRdNHsv''@;'; put 'put ''VXgyeyl9NVVzbDI0On1PJVU/T0pIOmwxOUNDcDcyZUgyNGhkQjchYCt1bEw5NCg+V3IsSGUwZjApJW8wV3I0MFdyQlBPL0dLMStIUn1dTlV7X0Q0JTJ6bmhjbVZiW3dEb0JgSSplc0ludlNuMnNZdCJOMHtYW3hkaVNoc2J8Y19ecWdlI1dldGB8PHFUSUshVTUkW1JPVD9iMVVVKVpFaCQkSChf''@;'; put 'put ''KmhbeHgwLi5YZV46dkQ+dEtTXkcmRUw7LFsvaVVTRlJ1fnJkXzc4PFYmM2p7YkRRbDpaJEFdfCh0YEZSWSU1RE0wND9nL2hTWSZ6bCUuJkgqO0ZXYDExMnZOS3FFcUA6YF8peUBIak4yJTNXI2crNHFeKTtMIiVqaWBrXkU9XWVTIWxRdCg0VWdHN0IvQGJeLjlmRT5ndCUsPjtJK1pvZUpNZmxY''@;'; put 'put ''L2A3JU9venBDRUFqTT1HNlE0Wi5xJlRkJD9bYVkydm9fN28vLDdCd0UrVVVXPmQ0dGUyOzZTditbTz8pXnwxclRkPnRSfGllV3M2MihGS1kkK3tUaW1EJDRbcntMNnRIUCZCJHtLKHNnJVB6OFI9RGVYVUtaLE1fZ2FrSl9CQjhGST1pR1h7VGtmV2A8M2pAWSR5Yjg2XUBvMEtlb3xNO0pSbTtu''@;'; put 'put ''P01eZGUqLlIqeWkyVkJXbiRuczcyTW1bT0F5e1pDYkMoRzt7NkthJlp6a2ROWCQoU3NsfmJeYD4/W3IvalhUcSZHUT9WK2p1ZGd5QklSQzNwRHdyLGU2VzFSe2d1OFksfHxQIn0ycTBudl9JVXhiKlNecThbPnRSfGtvQDw1W21lO31LQXJeSjNYaG9dfUpPRVQvfil3cls4MS5JcnloOyhKaDs6''@;'; put 'put ''TXxOTF5FcW9WIUcoN3RJb3lmbFlAPCo3LFZ+fXFpQ2lfQ1BRfXk3YWFnZVFZPVYwdzJ3RGMlR1gzaTswMChsa0Q4WHlQMF9mcVprdSVzKkx3d1JofFJORHxIfUVtO0tAOz5JOk9UOEokbXNGX0AjKHoxXWkhVz1ndTxzKkhidHNxVX5daShwaXM9SHovRy9qZWZrLit1JD9XVldRdj8iNEgkV2Q0''@;'; put 'put ''QDF1SStxcSlZQD8xdWE4O1AsMSwhMnk0LldDXSxvZzJ5WW9AaDNLU3pjNyhLeFJ2Y3xHUHZ7ajQwNV90eHNAMXVMKk9WaU01fDc0ZSpheUZFdnw3NER6UCsuQClzSTBlUytJO2tRTENOQERreHArUEw8UCJCa3hCITJ5dnp+Kj4/fkw7STMrWmQ0QGgmKiR1KyRZcVUjLyhLRTFnIUpiczA7MEsw''@;'; put 'put ''K0dOckZsTDc5a1ErLyo/ayh0K0lQUlNJfnEka3B4NmNTKy5ZRHA4UGpFd25oUTRALzRNUGE1N0tRSmNvKmcrSVZmPERwcSRreysrZFArYUN6ZyR6e2ooVCF1JHEpWUphOmI7KilkMEg+amhSK2NzcTNoKzF+Vj5YLylkKz4jTkR7UllFQnRvL2JTYTJoVCJ0U09DVG4pUzsuY2dkNSo9cVorKiFG''@;'; put 'put ''Jm9vZEJhJSN1MFA1ODsqa3lDeDFnZldGLHFHTVZtUSU/MXUoKlVWbVFjYGFYYUoxS1UxTiVkUFpmeFNoSVpmJlBRTCVnYz9leTlFRCl0UHhSJi9lbC9bMXVRIjZxbGxaeGRHOEs2PzQ3Y1A3TW9Fa3pIamA/Jn1lLzFJfHFsbFgsT0QlRT4/NDd8T2JaJWxJSVthV1ZRTD04YlNIajlYJX1lL0Y/''@;'; put 'put ''M0tnSl98NzRbNDJLWUoiPzF1NVhjeTVFQX5lL2N6JktZSkA/MXUuOjJLWUppYGFYR2oiQzZQd25mV24lfiI4S1lKZmBhWDJqTytjQz19ZS9XSnkhcSFTSVBwQXoxZzM+cWNWZkpFMiVtYW1qSWp1WFVRSnZlVkZUKUA9YUlqU3Uocl1Oa3hdaGhJVmBVPCJ5N19RK2p2NV82WWt4P2FaST8/biFY''@;'; put 'put ''T3A1YTl4UnMhYWVhPCFfNE9ObWBvWklZYHY7MS90cSpsWnghcSpsZWFlVkBTXkJMUklqbzV2JXkhJWNqK0hqez8vJEhqIVhFZlArPllONXkhJHF7M05jL046KzldZjUhNGl5M2E9az12WmZtanVKeGlBWnY/UihJUDh6RG1bWzdVYyFVR3M0SCQ3ZSNqYXFxbVl3ZEc+MENneSFVR2BOWG9BZjtg''@;'; put 'put ''OkQ7YnxsVCpeKm9tYXtZJG4sY3hfX188azBaQ1Q/fCRRK14qb21hYVIhSzRqbSp1dmFmVjZRKX0hQXFtYXtlLHUidTB6IWdpVSh2UnlIYHdyTDl9fCpXSy4mSCI+RDhQM1hQMEhqdVhoI2x4L2kvZVUsRkpqb2lzM29jN0ttIS9nJnxPTm1neCtAKn1NKyFJQ3gmUDBYNUlhPG9xNHpbX2pONGlw''@;'; put 'put ''dVArRHZ8Mk9xSXRuPzFeX2ZDMyVOLyRYdEAzMV5qJHZxMm05ISN6L2k3SWdWc0grOzxvMCo1X30kflpWQWEqLkBsc1dic2c8dSxJU2ZVbkdYRW4yT2t4dDYuY3ZnbCpCcVM+cmZ3dzAsPH1xb1N4NUI3VDssM21bJjtFUCg1VypPbT5efVBZXnBsb1I9L2A0KFhvbEsxXmQkOn4vfGJuYFFaOkxV''@;'; put 'put ''LzpFVlFGWyxSMnlUPGw1WUFGKHxRS3hEIWBvOiZlQmIpYSlzVyk2N2tpNVkifCs6P0V8SU9GU0w2PFptWVVQfD5mJjAjb0IyeHhGMkYqNTxkX0giZH4zU0w8VC9DSn0/TzNEZ1lVWyYzVEYrNF9HKWFKVnwpSTlwOEAyb0ImOmFjX0g0LnFxQTZ+eU16QiprNkw7SDdoTUVpdWI0MCpMVns5P3Yp''@;'; put 'put ''T2taT2M4W0didENHdHtXd0RlRWN1OGBiXj8kJGBTIVQpNnZQYyYhPz9jbj8hPjhyLCVqO0NlS1N5PUVDKUElRzwzZF8uaFt3WTI8YUM2Yk1hLzRLT11eK3VjMl9fL0dbMD4wQXMuMjRpbnpZXSZkIT8qKyVqaWB0ODtELkIvKXYqbiF3OEZkSG0oXSEocVkoTkI0dGpXRGx2Mkk6aCtDI0xna1Jv''@;'; put 'put ''QV5PXmpVeC9qVCpWLiR7NWdiVz4vUHYjJkEyc19xSTRTa3wuSHx1SXElTWQwe0MzXndQaVQ+WTYxN2EzKWw7bXsuOG8lKGBXPzxBYH4mcHRseShzWV9dJVJOK29GTyU9NiwhTSxWPFUreTFFek4pfThnVW1gT3QzNGxycStkc0M7cT5EZltZPEh1SEZuJXJ4cDBJSTtAT0sxKmBsQ0pCaVdvRjJs''@;'; put 'put ''Jk06b1ghYjhuZTQxPzNDMXtBSGQhaGVuI2wqZlJURFZma3QvYDV2ejp8Uj95S09nYHFTcXVVXnJieyl3ImYqWGBXKWg+VyQsP3FyWz1nfFUhaj4/MD8odl51dTVbemdCMnp5dzt4cFFyNSYzM3NMaGJ4KFJpPlZFZkw4R1NCMnV4L1U+VmhFcE46Wj9fKF0ucnJmX3taXlc6c0MiWkJGdThKYH0m''@;'; put 'put ''dDVkcV9rY20qdUd4M3F5dlJyOlE2ckRpJVB6b1ckXyFfST13fD1BcV9CUFteMXc2Si5Oa1Y7Q1smO2g4Qj5TWzJvQVZefCoxLjF0RT9ney5IMnt9eWxWSksrU0dCcTE8SS8lPzZzVVJsOzIue1pCXU9LLyZ8bykhN1VpZF9gNHpeOWw/S1ouIU42MTF+MyhofG5DSklqMW89amhbY0tQI2l7aUto''@;'; put 'put ''UDJvX0JHUyRYJD5vMEBPW01xek1kS05JZEw2VWFEPlVhYm9UeWskOlohU3s/RzFLPXdtUkVnbXBdKy9QbmJ3Iy4zYXAwTnpTSzQhQCNSUnFPRUtaXTcuV0xBSzZmb2ZsdnJyJV12UnU7T3J8cncyN28yKWFpNTE9TFBxQVAxLi5ORTJjcnd4RWN7Vl87XTwxYnswUHZjWXZaXVduenhPMlhdQyVd''@;'; put 'put ''clJVQlkjZkZAKjRKO2FTd0BjKjo8TXZaelpEekVNY1hgL0RAJnx0I3trTWFofVJUYWVWTkExUjhvZipdOyYvXip1TlIhWDlIMHtZbENNTSpTKm9YTWVGLzohU3ZeIV11YTFtUlVWenJjUWFnO3Y0Y11FLE1Ka3NXPFFzfmlhIjB8cmwyXnUlXzE8Ziw2JDM9NmgxJkFyZVJ7NWlNO3NBNyVSWjIw''@;'; put 'put ''JSYlXl9sdmBkITopTVVlK3EmXVhwZTNnLmFwfSFuZlosI2RSOj9YVkkwLCZaTTNpTU1+QEtBaDRuLyljOG0sJWpAI1VQMD0hczV6JVBpOyNdJWo/IUgvInRRVHI3TWlWZ2NeKShGPS5YRlluaC9EQ3xrPWtsPy8lUFYmc20/IVRibHwhOWx5Wmt1SSRYLmkuRUB6eU5SbWtWRlIwSFcpPUI2ZlJe''@;'; put 'put ''XTFoUjpSRT9QMShdXWAzbW4vYnY3UlJ6bEVvI2BrJDswWWhVYld+JURJK0Q2cE5TOjFwSFp9aWspOFFfIWBuT3pPeTB5RkE0IldGP2o0Lz9HNmskQjJqLi9wM2M3S09hd3RoM1kwcCkpLkQsTH4rLiw6ZFhPd3YlRSwzMDI4IzU9aFpRI0QubyFUWGBZflFIVSk/c151RV4vaiVZMTFBKGB9IXlG''@;'; put 'put ''Y1peXWclPT17RWRkX1dobFtraE56OUBicTo5SlFLJTlnZUgrJCtJJCRZMkBWd1tFXSRwemJHekt8OD1+JnJeaXssdipOQWFSM0A5fjlyOD42ZFV6c0dLbXIlS0JlXl90Pl9Gak13QHlUZi4rJXhDWig6clZ0IXJ6JkVaWzBlSVptOlY8eGAwXVpfeWpzVF9XbD9xWGJFfS5zezxmQUk7dmUsd355''@;'; put 'put ''NjM3T3dRL0ReX1o4N3ZRPU05OzVKfFlAKypOPlFJZl9aTS80VStIdi9GQSZCTz81VmV2c2B+Zk0pLi9kI0MsOSVDWTRsdn5nW0Y5JGQydD86Lj16QllQOyRQL0tdZUdrQ1UzJDljRixNJUNkcHImTUBmInd9VChzXU1xQkhjeEhNWSxzaFlTbks8ejpzJDVyLEA5MnYuRWJ7NDo5U0RwJnVMdWs+''@;'; put 'put ''KGkhaWh3KTIrTlhWLGF+YXJ6emhdMlpNeEA7VT4/WFp0MDcrd2w4UHNbOkNjeiZ9VyRyQXshWCozKF9Id0NjZURPRXtZNClOZVBeWVVjW2VfTFpuakRHQWMjcEwvYW9HJj12U0Z2ckFbRDsyKGplLFF+bX1WPHRWN21aKWhMXlowW3JrQXhGeFJuPztOU31TMVdsdD9gZTdTYFY8eEUoNGxIYFhn''@;'; put 'put ''THtFZ1lmZG9MOTJOaSpkbU9qTldabHhTXmtOUl0lWT8hWXJ7MVtTXkJzTlcqdkt+U2dUWkB8cSFkVWQhPCwxLi5ULk5hPy8ycDt4PEZ6Y28rOE4/Yz96ZWNSIypVOERCaUBPTzAuXj5yS2pxdyNdME9AUX5uVihuIXYsR3plRDYycHcvdTltQW9nbEIvZC4vNVllZyMsP305YiZwXT4rZWlbRCY1''@;'; put 'put ''dHs6VT5TbCI0TG85N3NreilXVCZ6RENNS3Z0eHY5ZUlyUV1FZGRXaTVhXUk4RGNPfSxIKTo2O2F0UDJ5fS82T3p1ZjA8Yjw4WiwzYiYkYEkyN2syaF5oPlBlfThedSRxNTsuW0V0LHtUJDlLP2hxQm5PaiJXb2ZgQyVneyNSZW1zbV5dLCNlWnNnZTVdaH09aWswc1g+dHU+cV0+Zlo5YzkoJlMs''@;'; put 'put ''QWVGfjNhb2dLcDE9fitWJCpXYjI5ekZhVjg/XVQ6MCRFI0d3REBwSTc4dEQ7QGk/cC5NcjVDNk96fHo1ITY4cGFdLiFXWTdqIzh5fXZmTDhEYzBINzN7UHVUMlFZSENQNyZ5bWdWYElKMFs3bDksJGFCfl5BcUImYXp9I1EzN28yLmRVPCgoSiE9Zl40e3tbOyFCe2RCNFdkQjRXRC9EZDZVcXpr''@;'; put 'put ''UVpFN29UR29MbCk3Tk9kbmAlZ301bCVzJEg5KD1ZdWpZfnl0RmZlPmdbOiQ4MnplTCpwXnRwbislJjtDL2BuLylkVEVDQGUzQ2VXPilbU1l5WU41dVslUiU4JC5lR15bZXlLXSZHOXE7Vy4/V0BsViUidDdffDw1aW8qPnx8bGFVSjM0ZnxZZERDfVlDRWJyME40fHI8SnVJMU5hX2AmcGdFakZA''@;'; put 'put ''Y2diKiRbTjRUdTVxQlNASUttbj48MnxXYnFCU2s8W3Z5UT5CTHVFLCU2aHozVHc0L3xPSTtfQi9CM3VJeCo0VmBEaj9TVzV4Izx+IUhiSCtOe0hjbyh8d0Qke1c4ZntCIl9VZm5XdFI9LikpVFY1NlJCcCF+M3NbYW0oYDZrXS4zSi9vKjtyXnh8UjNxe0E+MTdPaG85Qjs0aEA2VGUuOFJ7WUBT''@;'; put 'put ''LnB3Qi5Ba0FTcXUvRlZYRGZAM2g5Yi5qb05Pe3t7XjIiMHN5Tnc6ajRqWHByRjBBTXg3KTwkTTplWnNtODNdVGJHTnR7d3osd0JVOihpRDM1MUdDZCJkYlhuPH1nfms4Ri5tXWJfIiRxWzgyP0BqTW12NnhuQ0JuXVBxOFReOFBzLFY1dW9vT3wxfiU9MGRlfmolTWU/K2Nfcm9XLDRzd2JzRnFz''@;'; put 'put ''XWBUfUZLUC4hO005KSFQZ3pEKUNFSD10ZXxsMkFzWF9COyw2O2U0OSU7RChYXkpdYmtXeng1ODlMNXprIjM2IUF+ajxnSzBUMTlCKjRGLls0fmFMbTdJbWx6LG5iTVIoUDo0YCFdOHB8PV5rdEV7TjlsMkJVMWUhLmVJPWpXeD9bPGk0T0AkRzQ2MHljWVF9LlhuYyFian5HXjw3fEYhZVk7LEkp''@;'; put 'put ''SFpeKDQ3REFzOm9KOSpvRWRaKU4zfUZma0RyR30iczIvJGBlYmdxZGAyfjw9LmJUOm1LYFQyL0pzMmRBfmBFUipjQkRvS0NrS09JWWQ8O0FsPy9KXWY5SUY6Ty9tOkBIND9xOlJtYCZodFlyWHo5MFUyczUsS35ARURbQExzcCUxVF9BLFdEK2AxWU5hOit+JTdGPURXNjo1QEhCe1cvem1aJHcx''@;'; put 'put ''byReNUB0YTB2cnwuI3E2R1BpMzZ4fElnIzN+QDJIWmg0LilyRVEieDQ+Yj4uR15NQ2FpJm50QCFoKkFfTXNoMl1uSnJlYEJXUlU/T3twQH0pU2UlJjIiKVBld0hUYno2ZV8pdzdPQmVrejgqVyU8bDBTMk9aNmtXSUFWZWdXPXJnNC9YfFhia0lMQjx6OkdlezxPQHh7biZWV3p+cjZCci9OQjhn''@;'; put 'put ''aWB5NWg6QDlML1diYUhUVU9zJHU1KXVsYFE7SCN8Q25LSyxOa2NsPU8/LnE4eitHJiNnPUdHInV6a1ZCL2xgN2g6O1VwcTUxeDwscUhSK0ZWSkM3bCZtfVFGZVJ3fkpBWmFsdWBwTT0vJmo4MkJZWCU9LnVtWD5UUSUrNSUsMXc1NlM8dmx5dVJ0e3laLk1UZ0ZMJmNaeC9yLyM9VyJZLjddb3pm''@;'; put 'put ''U1dwJUdJJDQ4Sl05SThoWUVNaz8mTUZXfXxDKG9bd2w4OjlnOXdiUjMxd3FuJiZ9bVJCOGl0UShnITIkdkRZW3lkVGgmJC5HRUElMT1YVk8xa2wxaTtSSzxYRjdYI304dzFbN0VNQitOZCUsPnIlSSwxTT0vYDY3MFZvb19wMzZVITpnQGR8LDJfalU5dnUkWVBYZWtGPz59V3JQPllVIiNhT3de''@;'; put 'put ''ZV1iXTEvU3xHXWVgYTlvLF9dcWQ5RjdPNzhzd3IuQEk7LCx6eTZ0Zk5OL1h9Znt2ZyFzJEBOa1FrQnpgcCllNDo+R29gL2Yqa34waTNyaCRYTXN5SmZ9eCN3RDVtSlhaLihyTTsvZEZOI281dVA7TWkoRlppPShfeUl3bSRLVzYuREl5Oml9O3lgcChPQjgmIlMrKXc9LypxTy5FJjl8RWUhRlRy''@;'; put 'put ''Py55bT91MztUOG9eNkJ3MzJqX3l4ayZFKXdARlVgb15TZTozezorcnd5RXZSJSlvT2U1fC9+emxDTX5XIl0rPSxTWyhYRiRoL1d6LFt6VmpuXVdSKWVzelJnXTV1U3xvUnRqfnl6QWhhTVolKyNkTk4vWHd3Q3M6WFBRMiMwN1NVWVBrUnpdN2Amfl1ab3U8VGosQCtYKSQpTzlfS0tkSUJlVT5a''@;'; put 'put ''T3plckFFP3FecTFULkxILkl+PyE3O3QrYThtYkxhZy5JRW9kdTJKYD5POmdNQUFTcUdLd2JRKyIvdG1Ack1fUCZxQ2wqZSV4VGVXT2NxemJkbyIwc3M+JDkqN2B9RGpDYjUhWDQ2bXRoNDNJW2ZlYEFdSypvKWw0IXMpRVpqRyx3JVNSOWghZjhLR1pke1pmMj1YKW8yVE9CZ2tgK0gyVSYzPldp''@;'; put 'put ''Y3F6ZzN5VUFRKDEpdTEmOS9laVd+KD5ybyhWe3V9aEtUKyJdcHFXL1R4JVtQe1htei95SXFWOm03dlYwRX4xRXJOQ1RsdFZpTnI/eDRYakdLOF1lQFFwYnhJZFJOVEI6MzplOGhnbHU1ciQhLmFXLndyeTYwcV9lKndgO3soRTghOHlIJnlxZGV9MWs/ZCh3OnFQXXMzW3UzOjM2ekYufUhPRjpg''@;'; put 'put ''Vj0yLHZ8VnNoIXZUL2V9RlZPbF9OcDBsOnZIYkV2OE83Qn5ZMFNNVWlUaTshKTZhc194KjcyKmZ9fjR3WyNuZSZsVml1UnFyJT5ndn5yNUdII2gpZHpLeWJXW2EyPmIyOE4oNGtHIlRWPWwsODJeKndRblE+a3lDfTkxKTdBNjEkSnMjJjI8eFhvKD5eR0ViZ3kxO2QkS2M2PS5sOCF4PD8heGhT''@;'; put 'put ''cHRiQjdEJSNTWFpbWXNVVXAwS0p6Nj9kbjtpXjpyM3JjWGU0O0VBLzVxTyx8On5aa3Z+dUxKNUBrMDdmLylaM196SzZ5WF83fk8lelFhQmtQREFBLGhISEJ0O0NeSmNjODRHdXJDIV19dVIiQ0FRJjdkWGoqZ1RSbnpsNmtFblJQdnVXKUF2KEp0eU52KH45c2N6ZH1YTWwxZE1UMTQyaHYpaE1o''@;'; put 'put ''bCVjRGN6SClSREVydT5rTFIuIWk+S2lITCRLfXFTVW4vbC59VElpPk8leUVEaXQkfDdbSF1TM3dQeXUwUkREdipTb2N3Rnc8QzMofHliXldjdVdmIy90W1d4KVE+ZGhgMypKLC5UZUF5Slcifi9SOURUVm5fQn1UN1Y2fXJsNT97P3Y7dj1MQDNeRCNGVGNTdEo6dTJxfnRaUVgqKVcjRWlFNnFh''@;'; put 'put ''PHtzZVd0Y29VblBIeUx9bl14bk9RSXhaTXA5VW1yLDJsJVJiaCQrQWVeVkxqMVMoKzdiLD8xSU9wNjZIVTNgJnJLY3c4cTVLXjNWcngoWlk4KUc6STY7Jj5eRFR5P3ZdQHpdOUVLTG8lTHFffFJYQ0ZwYX13Mn1EeE80PEkuMmBkeGVSYEhzci9gdFdnJCs9QDdrI2RJJiRRR0tYV1c6byM0a1Fp''@;'; put 'put ''JnJedGJIVX4pSFZ8dWdULDNAcTNdNFl4OHouQF0xUEImQ0pDPn5BNlBvVFdxeG9ON1AjRk09PlpLQGN0R1tkPUNvTixXWGolKzRGZFB4I3I9SUssfjFPOipMVH4pXTFGantpXXFfY1JAdS89fn5KSVU3Ymp0cj8pXX5xdiw7aWp6V296IzZGbWVDJXI/fGhxY3xbUWB0fXwqMUZsUmRTY3AzfUIo''@;'; put 'put ''dWxic3t6O3J0SUYkR2NvNXslO2gyYiU6Y2d+MX5AVjpRbDRnWDNuQyRMSmgxSiQrOit4L3VZKks6Znd+Y0VmbTlVWDt9dD1IczQxfFdkJGBKTSJ0WGpSeSo0PEJTUmpiOCxCIzVEPE4wTG5SSzdoemF2bmQ/P0VNYUpaTmA7OUZTOShPLmBZUF5mWz1NXk5HYkVMPVsoa0VoLmEkezA0aE18L2A4''@;'; put 'put ''X0Y1WG5RNFk4V0NgentOP14iRiwyTU1eZWpNfVRSL2BZPHdVRXsjPn54dXhzZEU2XXtfd3A5Tm9ve3hdSiwxLHJzZmdoTjJDVnIuIjVRPlRffjV9Y3c1Uzl3PVAxZlp4NS9bPFQoKWtiTEZnbSwoTT1BY3M4YmtJVzxQc1tBZ1JVNkQ+V1ZhWUtCdXNYNHcjVmF1eVleMW4ka0EkOmVSb1s8Mjdr''@;'; put 'put ''MzZROj1WJHEvbkV0NjxSMyV6WU4kJHpOQD5wd2RXOz88bkphMmEwU2lrQSIuLjB5Zj8mZDtaOVRDWmZCNDE7X2wsNyNyQ2EsZGxGWjIuSz5NejwqMEtPT1N+Z3pDOkYvaFQjeXZ0Lz5TR28kfF94eVlAdUN1Tk98QCZ3K0ZaNi9NaVZuNEUhKGdaVjZbbGRbNjIqPCVeXitGbDJrRyR0eHRwVH1M''@;'; put 'put ''L2UpRnRGRWlvV3V3MEwvSUpSTDVUa0FITDIja3gwQSVuL2tdVT1sajNnX2NjcmMuRmNEQlExMjZwYGNmcWZWSVBPVSYkOmBtUkdAIVFvZ0ZrdUtUUz9lXzo4TCQkXjt+aSxdUEtWXnoveU5DSjxZaHRrT0BJW2BRN1MsQVg+MjxlT1VYdVt8U2UiNmZycFUid19AOCZhMTF3K15HIipFbGg+Yjg2''@;'; put 'put ''TWslPEhhYFRPOndnTnUmRH4xPilUWSx2Wk84KH5CcSZ0LzdZPHcsfHYzbyZKfVlMOlNlOjk6dzN8WTduT0t5NXZTMjk4Jm46SEt7KWlWI2tZbXZtJD0sRVNGVEJdZ0wpfStEWShsMFN5aVhSdkxiKWhAKzdjSGo2OXI2Xk5QMSg+THhjRS5YdndiZXcsRGUqeW1vZH5IKjReZWsmZmlKZk1QRVBP''@;'; put 'put ''UjdGbzNSKzFxelA/b1AvX1RVYnJqMEhKLitTY2lnWFAyNXNhcFQpVjRicExlTWVuMkxXdm4mQGlMb0NGUVZdPXhvWjw0bGlPeVA1KE1eKWMpJFdhKGxSZCYvR249TWA4XVtRUXI3JjdGPVVOJFVkeSx1VHcrbkJTLyFMKXl4NDU/dFdyYl12STR+bEdAOjBdTWhSRGRMYmVZdzFWekNWR2hKTE5e''@;'; put 'put ''PntEezs9OntVckVRJSkycDZVS1ZNWG5yQjNiaW9qcV5XRnIsdzU6Uj9XRUVdeCZVViYoX3teSXo5UGtKLng5IXMzYGQ7Yl5YZXVbU3diOEQrb1Z8KGc8c3B7XSlYeHgsPUdHInc7VU5kfCgsYiNFbHkjSDR1ejZ0alJdQE57LChwPCRVbG5oJDhpeFl2ZGQpKmx6Kjs0TnxLLjZOeTEpTHcwODgz''@;'; put 'put ''JlZUViJmdjYpTEVOJkx5VVRec3xbU0VhWzVfOExpWzhNP2JgbDx3LEhzKXxzPyx6KmYkQ0EpI2wqTEtaTXAmY2MxeUByekVVPkEqbShXaiY0LllYazptKytmREpHaGsyc2dMKSFGRnlJPHp5WCp5fVhTem5fRXJyW1pwfHl9Rkk/NFJPKGMmNEJ5QCVoQWYwVVB7e2JMRH0uP252PCMkQSREU0JQ''@;'; put 'put ''LGZCOXhtIikkcSE1KyxRaX1UQGpqTjNgbHBMRzZTcnFDdVRYJnExYUU8cV1UU1gzQEFuYkgvO1dVI3Q1a3ZaOzM0blI7QiV4YXhFMzB9W1ZPQnohcCh1cXZuNEtYZl9VRnY2LF5pIXtiMS5eTmtsRXM4ajZCQnh0OzR8MktBITdPOjlkaSlHMjwzR1hZUWhlL0d6OHFSNDV8cDlQKFp9ZiRVKEly''@;'; put 'put ''aXk5XTVDfUghZEIoL29xdn5KaW1bZHUiKj1mXUA4MiU9cGFxLlFnYGdqPWElL1Yodj1DP3UoIWdaXn58RiVfbUpfK3t5bylHZTlkemxwTHZ2JGJGbGR0PV1vbnB9fjNPTV80clZwdmJ6I2dNZy9nbVIsPys2eixQL0RyV1A8TWtDLE83QSsrdntjPzYzIzVsfGkiRDlHe2o0e0h6LlQ9VW16cXYh''@;'; put 'put ''aEpMLCJdKnUsVVJleDNuQjpFZV04eGJpSiVwcmNGSFhrOko8N3ZLNzo5a3hqMG8xfDRIcyhnXVl2aFteQ2Y3Ty8ySmxtYUNtaSZkfndDbkxhT117amRGc08qP3JsT3xVfU42aEVvVkdHY3pjXmtvRlZoLzVicThraH0lTW1iKnRlOkBWMDUpbCxoN2dtLjB4azQkTCZoeE9bTEY8c2ZyVkpOUyps''@;'; put 'put ''KU9aSzc8KnBbcGFfVExLUGlhPE42KFd6IUopM1Y9Y3M8cHcpdEpmYTI2RHNDR3BEVmVCM1ByIyMlVTNYe15xc256cFl3aSZrRzw4Imx5InEqZXY/PUlCcy53eH5IcEMpMV1kcWd4WUZWPUk1S3JIbCpMKks+QV1JUl05VG1QWWJ3ZjdHJHtAdUw7NlZvZ3FTN00zKFNAc0RVeUtEWltGZ1U9NW85''@;'; put 'put ''WW17XnNJfFd6QHM7dmJebVMiKkY0QlFnPEw4UDJdI35rKXJRJXk7OX5UZklsRiYxT25OfCg2Ing9OzVwdUtSdFE3X3Z7RytfdHVFdG1oa01KTGBvX0Vtb2d8cS4qdSUlaTplNl06ZiokX0lGRCRpbyEjflRpTE8iZ0xAezs/REwqIWYrK1MwRndpQUQidDBPZj1GVCVxdmJaPF5ad0dxL2ZqP0hB''@;'; put 'put ''TUtoTn12W1tVYGV2dyk4SDp4VEQ9ciU5Yz0+c3pedSU9MF8jOllqe0h2d3FKNGBlTEV2Uy45YlYkbTlFNGA2PC5MZiZEXkczNDJ6aXlWc1BDazYoWUNaekhtQU1XO0huZVhzU2RSLjFfckBkQGxJUyg3Rj10djFFfXMje3kwKTpheFU1fHVOejVRR2k3Unkke10/YW9nSWcxLF8rUkVDMlI5TVo8''@;'; put 'put ''RlQzK1hjOCMwP3R8Oi5xfU8jOlhWTm1XPSlFLD58Y3trNXFydzk4VElxMEFoMVE+Vz0jMGtlTSNQfHkzOzt8QzcweV8/IjYzbHwxZFhFMjl5a1FjOVBKaUtUb25vZzwiYHF2IUJbR2pudmcuUXk4VGA8OHdmazA4VzspX0V0MTIybHFqU3wlLmA+Uj00bjZJX2N4cW4vSXlGIm1nd1R0ZTpDOlRs''@;'; put 'put ''a0M+MXJta153dEdeTT0oWGxZU3RYOVhHbUNvXUNyOGBCIWE1NW9MZS9+PFo4YGA7b1RTdnJwXXJfeiF2VEVgS18rJVBiJns4VDE0ZkJpL1FoRHFzPUdgezQhOGZocmFnOlt6NnQ6SD5HSkx0bWB7REtHYlkmUERvR0YpcVFAaCNtcCt2OWtbOFNEWG1TbTpoV2J3PS4yUmEmISZ7U3ZVKWZ8QExK''@;'; put 'put ''Qy5PaTI4LmR3cWBXRHUqRnV6MTNKVFU+Q1UqTD9TdWNpSFVsYnAsVnlnc3FbMUhWWFt4XyhXczU+ZjAuTSlBeldvaVk7bThLKlN8Vy8paXAyTyJjUTZGaVAwYnkwcENiOFZFK0dwd3JZKHc2V0hwcFI+N3lUaS5dWVciR2NjOT5fclExOWk9ajlLZCNIWyFzPGkjZUAoamFYQ1lhQTJqUiZnTVZG''@;'; put 'put ''VHA4VS9nPjhTeXcxRGJgb3JQTnhRTjZ9cExRPFY7XT5eR3YwJVJyPFZ9YF4yQFRlKCYsYm0xSXplJGhTLyhzNk5kbiQ5T1BffTtnIn1rWDhYJk1sOTFFbEtDaTJVW100UiFDM04wXVRsIVVocnhSOGtsX30sSHIuQ2U9TllIayR1IXJGc25XMlk3d1UwL055M1V0JWpjIyJgU04vYWJ1SWRnKX0o''@;'; put 'put ''S3dDImhtZyIrTmZkUXgmRWhlRGlJbWU4eUg0RUgjRjY9PDkwc1hteyttSzE/UW5XMm8vQGsqMDdSfDsjR2ZLKHhoZmlIa0o3Tz49ZV1bRDsvSmwxMldbJkZdMiEufTskT1g3VTd0I08yWj1PTGpzV3JLZXs8QzhpRCEhMksyJERwO0J0a35lbX1NZVQ+W2BTQ3xxQyZAKDVMNi9ReCEkOiErMXVx''@;'; put 'put ''Tn5sPENwYyR1K09WOmNaOWtdNm5ZN25SVE40W1ZdRihbLDd3KVVdUG4qVWc2anNWYixLQDRibkFGSWYvTSNNUSlzeFYlMWchRjZnJHpoUDc4Int1aGhKVFciWVREfklqdC9hV1BGbUdkJiJxdF5CVSMmX058Y1NLRyheK2ZzJXNEajN7UWNqPTZbZzx9VChJPGNxKURmaXRDXjZKVlpVKGMrUVgw''@;'; put 'put ''XVR1NyNHLD53c1djYy9ReVVMPnE/QmgmdisjOWBGT2VJRTxJZXBOVGZLYkg6Ki5TbWZFJH4hNTgjXmo7NSlwYmxGK2JnaEMwRWpzK21mSHhYd199MiJ1ZUwkOyJyLF9tdzsiVldOfXJSQm10Iyk9QFR3KCZ+RGw/dHh7VXo7RU9rdk9QZ2l6aVYiVnVdRHd6KlFOczV6ODVjVWh6T3FWNlNMNUM/''@;'; put 'put ''O0phNWpra29OKCwzcHl4JSZNRHk+WV56YDNEfGEsbG1XdXMpfDpyfWxkOmVpfTZZSjBadDlhOzN7SS8qJFZLR29kMzJmNk5iJk15MUlXNzgkQD4oT35CW3AocSV2Vj9+bzEuUFJqWFk5ZlBra0Noe2E9PmNJNCZjOiZZQDIwVWpCTFsrbTY6M0tYTzs4cWpBRitEJTs8bWlLOzZvd2RyQk43IUMr''@;'; put 'put ''TFVhOTc0TlZuS05SViFFI0dPOHRYZmFLZ2dNOW5qJkBnbjd1bzI6SUZ0PU10UGxiYlVIKEoldDgsdk9rKytadTZUUU1RQi51Sm04RXojLnA/KCZsVGBMZVlSVFBLU2xERk1bP0smZzclY2dsbk5sQztbZTFJPW5LSCZufipDcSJ+JGtTM0xdQzYiempOTUN7JHpJLjxadmpmVTI9fWh5VGpENnM9''@;'; put 'put ''SiJ+M3poRWpnZkEpcU1MM1tASShZMV5aNEddYTs2YT1TUk4wQ1V6TzgxImBMWTVpcGUpOXg8KD5lY3JKLmEzXks6N1JieClafTprRVFnMGxVIkx2Kj8lQD4/ZHlPSXBqW2QucDlmeVI5SF5BdXlQOGh6fVgld0tbYCMjUyl4TClqP2ltejUoPEQoMk5FIzQmQzIkK0l6PGpQYyJLSCh7PVl0dDEv''@;'; put 'put ''fUl2cl85OlNmMFRIKC9MdHt4KDwqSmkrYUNWOTsje31VQ0ghcCFsVmBZdkExbyFFMF52RF9GXj9jfXxBdFVqZHZUT2NicjNJI3FMbioiP1VHS2EuOWZSUCJ5aTg7QnVsZVhCZjlVZyF8Q1hMUitdbHk0a0RYKGFNSGoqPXhkMjF1clFHYCYyL1pscC9aRl5jS2U2XmZHP1o5RkZ4a1hTTj89d0pU''@;'; put 'put ''UV9wXkhhdXoiLE1PX1ZJNmdqX1gxVD9qcCk2Om9YLnhvPH5EOHZ3bmksISQ6LEQpbG9nOnVXZ0ZYLl9iYj9uZl9bWjI3RD16c0xoYlddMiFbTHdSOnI+I348OiR8Y1RmKzpIUE08Tj1HQnVWdGJyaFtUTU5PfVsiayRubSlzIW9IWVFyPjFYU3ExNWl7RUpKKSpaaFN2dkosdDV0R05JdyRFYkh6''@;'; put 'put ''MjlaWkhZTUNoMm5EXlpTaSN9TXlBLl1ESSRPVGJCTCMpe1F9by9WR2gvT21eNVZqRlUrRX5PYn5PQmN1Ont8NCIhYnRFVlQhL0p9NiIub150IiVKSEcmfW8+SyxqeW5eZUlSa3QlezYjXVZYYWY0YVM6Ol5CUV0pIlFDUStYXkhFayUpMWdzRzA5Kyk1cklAKSkkIi9PYkU6N2E4cGlrYWkyQilm''@;'; put 'put ''eGFFYm50XWhwcU9FcTpgRWReS19QUWpVKyJ+ZUBlXT97IVJDelE7ZzNkNSxMfGM/dGomSVRDLExOJkNgQ204MSkicFI6Xko6OHZzOFhCKEcjNFguPU9gPDpeK0VSSC9ddC9Qfk5jdWNWNykmLD5lV1JHbX4+UUpIZ2d4T2YzMnR7ZUFkZmJsXzR1dCZbRkxbaktgXUt8MmU3fTZBakNxYi9DWEBw''@;'; put 'put ''Ym1WZmg/aVFgbFp2ZixPVTApT0puLmtFZldma1hqZ0sxX1ZMeWpBSXNLe1ZOb0lmKyoqb0R+aW5bQ08ze3JjTnFfXUQuSWc3aHgoZ25bV3w1UDJSakoiOio4anFuQkVRLGkpJUtTQSI2JHZGbUBRZWJ0aUczQC5OV3JRUG1eY3BjfUY0ZTQ8Vix4MmIwQE9rInBnUyglLkUpJlNrfWhJNF5tPFkw''@;'; put 'put ''Qnl2UkJmezJVNVtkVFd3QT8lIWplQnd2X0c+NVArek5bRUdYRXNUIUR8dFMwZVVlVkk2VE9FZW1rVTw9O11oIiROSTlwKTxSLk9AWUxiNzopWyRRcVBXL31laVZsTVc1VTBdQCpAR3UhYFgre0xmOHolZlBDc0p6ei5mNyhxK11IZyV1QlozbkVHU0kqQ1EiMnpZSFZESGA/L3YjXUc7NVA0MF16''@;'; put 'put ''e19jcG5xa1RRK2tlL0lHNy84MilzcCN0XnZeOWwoZFRLSFUucHRiRV5UREtmajlsI1hNVV8pcmooJF1hZGhlZltOV2J4TSJ+enJSeHxYM3hRITg6anhVcTgmYzo1bWhFPUMsbD1LJEhQRHQ/ekFkNERxIVI+T1p+Klh3bzlfQ2FqY15pYE5reFB6fSY5fiVKXzpJMTE1K01VNU9IUFpKcVtlXn1q''@;'; put 'put ''S15oIlFZYHtRcEp1bHdnSTptYms8R1ZbRUR0ST12SnAmcCx0OCVXfTo3ITFqOmlsXU0wfmxrWTAhTkhpaHdeNT9VPmBINlhYdT9XfF8rX3A4NUkkJVZ4PTIyYWFwSmRsMHpiMi52W2olJDQ4bXBqWStKeXNSeShCWnRdIVBYSX0wTXxWaj5OXTMsY2dybTJWTXhbMjFXM2l5UWQlLi9qNWM1TVUo''@;'; put 'put ''ZEdrbi9dQGt1OyNyKD8yL1QsazhgIUpabF0hZ0FsPmYzTVl8UVBDKHNNKz4jWGFSe1k6OisoQ2YxLkJmRGt1RyJ4eEo4PEdmPlcoZDBTZU47e0dSXjB3YVZ3UXVFaTh1YD1gaHY1YVMqV0p7U3FtITJ0TDVoLH49W3xpWEEvb0xJeDgpdm1zOmdWR2kudz52bUZycHdeTGB9I1QoIXh7ZHImd1hs''@;'; put 'put ''V2lFejAwYUdHZHBBIkMwZlJdLFpHNX57RXRrJU4zdVhTaH54TC5QXSFYfjFHYGExWixCRHBFWFdgdiR+bXtzNCkzflpiaEVAb3l3TH5Ud2Z1OWYkc004OUJjcnpIcG19cW88LEMiSFU+PHR1T2VMMVNqWl5+NkZwXWpfS055SCg2RUB9fUw+fVREa3QmMEIkfF5HY2V5SFd6XmpPbjF3YU84Ky49''@;'; put 'put ''bTxaPHRBfllSTTVhekhlUzhRQ3gkRyhbT2M4UEVMcWpvbU5tc1BkO1V7flRxIUkjYlBVWD0jeFEhbXsiVzt4bDxTQV4xO2pJSk1VO1Q5XVt4cCJRQnUwJk5DaEQ1MzchO35BfnxGbUFBVHF4fWomYXtecT88aWU5SyNUZEBbJHt+eiJTcyZzTigmQThHNWhmamlpLE4qYyF0Oj1EdXkobS98Tkxq''@;'; put 'put ''emJueSwkL2RTJUxeZzpjNkxOPm1sKyx8W3JwTzUlTjopN1thLjM0JjZ9dix8RHBUemg6eHAxXmVPKX1xRCxaZTF1ZmN9V3V9OjhtbkJ1dCxuMzUhaCw5RmJheFVqUVV8RUFxY0czPVM5b1JvOm9mfXdDeDVPLzxeJGFDVXJmJWZSIUFfN18wTXA7fSR+eixsfUpKfGNSbUJyMGNMOCY5Sk5uV2pJ''@;'; put 'put ''JHZjLmRsPSIxezgzS1YlTWxmUlYjZVElRG4xZVZ9fmBOTTNVYF8rIXZCWj91a3UhZDd6cFZGIVdLLjRTQnE1SCpCIUpkNTkwTUM+Nkc1T2UxI0J9d3khUnhQMz98WHZrJlQ3clpPPDtHJHlQMi5wO21YLmtuSU4/YHJDRF45cmBPLzc0QV5DOGg7ZGZpQHxxQV46aW90KlFlejg8Z1oiUFMhQjFE''@;'; put 'put ''QDt0JWRkXSZ1JndRXVdIXk5EMHY3e0Y+MDZYVWJxLi8reXFsK2J3QjdlPVVUNl5ITyl+empwMmhQZ15mODlOZjQ7M0J9UHNmLllSKkxtaEBJeGlvWkd3ME5VcDFGRWE0V3lrZUIyPmM0eig9PlBERWp1Wz5BdEQqU0NmWl5hRnBFNGQ0NWI3cG15N1hjbiVxT1poaSM7dDYoJEJvUTEsIykkK2c8''@;'; put 'put ''TEVmPG01Sl1DXUI2SWN1VCJdZDZuMis+SXp5VjljI2U4eS8/dD5tdTAsem5iaFN9NSwuQEFTenlZPiFQMV1oY3FkSDBDZls+I3ouUWYiJV5GfT5ZO2VSLCZYYXt0fnBVJUo1LnkrdGY1cD9fXSJAOjMvSS8zOTg6Wl5vZ2cyQnlMU3RmYkRMe2JfaVk6QXFRLys/NUR2JCY6RUhRTCk+R2d6KXBq''@;'; put 'put ''Z00wcnxuYFFXcVVyNFR0QXVLdFZzQFg6I2lzem49OS5tQXtMOzk2PTRZUUEiJntLVFlCMFpUbDtJQXhRXiwpQmZ8L3l0O3k7Qzx9QCF5QlJMNGx0eChJaHldMDsvbiVaM2U3Z00sUyNFO1dKVTJbNH5LS2pZRitSMlhmVjlZPzdePDxvUWopLl1mcCNde2gmJGIlNlFESVkxZllpSGE1d1glLjp8''@;'; put 'put ''UFQ4SFliW0d6SnxlZHhJKT1hKVtQXyguSnlDZ3Y/eCpMOCE6Z2k8NiIia0ZmbHwyUStgbmBWWCl+dmdJd1IqcXYzP2FeUVdjQEVHQnswaFNUUGNHbTkpWjprfilzPkJSNShzQG52Xy4hS2drSG5reVh9Nllpb0kvc01fLGd7LGB6Qzd9JVlhXjxLSyE5UzNbSDF3UChRW2xIbjhsY31mWEJyKHR4''@;'; put 'put ''Kmdndl01PHFeOnlHITR2aGJ6M3B1Q19AOnNhRkhJQj10P01jenMyQTx7JTJmfjUxXigzVURKVFVEI2xwP1M/WzY2b3pabEMkeGtfJEtZLE5OdWprM2Iqc285VUAheFZ3b0h4K3dDR2lxXU58d0x8WHZhaEIqe29zfUJlPU47JVJMUSx7fSF6dVN7Oik6dl07IlkxIVNTZylre0tSXmxZe0x0flhj''@;'; put 'put ''clooRSZNeUNjeF1jOl1OdFtXY2NReCFMTEAwSCo0VkkpSjB1VyxYOVNfQ0RES1d4KlU6I0IwS0RodCZyR3hSaGs7Xi5WMlRmfjdEMSRsYFg+Rl8vUWxbe3duIilQNyZeRV1tPC4wUy8zflZoNVY0OEI+TTJqXjR6cj9Ia3lOLFg0IS5KIiNMT0xSLFs+bTdFYEooJDUpJiMhaGVrW0U5P1AjP2pQ''@;'; put 'put ''U2xeVTpPblQ4bFJiOH5AM0VDXV5qfEZpLjZdbkphSUk5M2JOTnQ8M15VRlVkX2J+dVIxeFI+JXhFbWhhX0pVVXEzc1ZFXWFyYHt5TDlOYC4lTmklbWIxZTlYSUUpaT4xb1tQcGoqb351cX4kQE13IUksVUxQdHkuUT4yS1JodGRnT3N+MURfVHQzUy92MCMlOS8vLGhZYU1pWGN1WXkiJDgjaWpu''@;'; put 'put ''Z21YNzJvTGlsa1FZMjImTVpfMElJaWF5LGVoInoubkZdUkYqdE4/X3huTS5ZWCI5Wn05a08saFJsLkMwT05PdWIlKENqeHNkdXM2X31Rb257N088aXBDcGgzWCt3b3RCNWA+YTdNbEMhRSZXfDd+emdwLy9eV3w8JSZYKEpAPltXakMkOnh5NTN4JjU9cTBeW1BKUW47Qz5SKzJIKUkzQCQ6QV1C''@;'; put 'put ''UVMzdjxeMlRHUjFJPVBJSEBaQCZUYilwbWF2WCVRZTU1R2JjSy8hbUYoRWNkVlNHeV94d1JQRDdvKnNIPEZoNCZpfF5YRStQNndKUD0jcFprMC95UTp2OnRsUF5Jc25jPjNSRW5wOTcxfD9Ob300SGc1WUl3dlY6NStKaEk4K2F+Y3VdNEFaW3FiTU1VKXQ9c19pfXIyfEt8alU/Yy51QkUkPSpR''@;'; put 'put ''RiRSTGxZMzgoTG1bXXI4Lmk/eXFCN25kKSh4bFN1WSY3TU5naCFNcnR8aWtCNSRXVWkxY3pme11uOExtMGNdeU5TLHRlaj5wOFBLWl96YT4jbUlhPD0lNkRwc05IPW8oK1ZafHVNUUl3UilhSW8uYFBpZEVDRjYjclghL14oXyprfl5+VkZ4Yn5jWjlzR2x3Ij5gYV5CY2liLCosPHU5fS88L0Je''@;'; put 'put ''Yiw2SFQ0I0ZoUF56ZXBbbGBLMX4pMkV+SUJpVWF7MjhyJXJAXjg9Wzs4Y3Y1MFQlJHpOIVFUJGxkdldle1AlYS5Ld0krKyVSbF5GWl52ZzAreD1JeWx3QW5jJX5bZ1B5e0MlMTp+VzV7a3pfaSs2LkZQajxuVV8uT1NlUXRyfSV5ZWZ+cj0xcHs1bnU0PT95Ii9pWV1sMHlzJExtX1pYbSFIe3dw''@;'; put 'put ''NSNUTDFuRHN4PD8uaT0/emBwfW8qYXRFTD8qcTF2RGBYWC8rRSlXNzl7R1VYV1NfXnJrLzVaP181Jkl8Ji9SZUEod2xyeHEzL1VDVSY6WlsxUnU3MU4iYmgkZHh8UnNNLD54JXJ5bHh4cTsmZ3pKIlV2YVEzWXw7bz8jZ2U8T3g2L0AzdE9ae1M3KjxdMS8xVk80aGQuYT14MXNzVCQ9eV8vRTNV''@;'; put 'put ''KVdsRz1OU0xsSlc3d2BPK31nJDJ5XWp9eGpnRWt1OG86YDA0VGc/bilVKiFiMGg+JDMpPFgodmB0fG5UezxFckV5RmNCOXAzbDR6M1JqV2Q3W2xrV15MI0JrVTNqZUBHUVQ7VnFGYnc7eDkrQnFxWGhbdmZiL25bPDQmUkFUX3YoKysvYzgxWSpQTG5GREJsSUhrZl5JKHVJb20/JHshJW0mPmYw''@;'; put 'put ''aGFNSCs1UU1NUHZobHdBYjpGOnBzITV0KEUiV2BDRzViaF9QW359NT9CI0U9PHQvdzM0RzZEQD9rPUdmbWNLTWA0OVgmTmttPkZxbEI7VCw9ckdhJFhyI1BXSUJdIS5mSG1ZfiF7fVBSU15HVE9SaDdfeV4uciU/YCN2VHswWG8zT2d6MzFzPkUwX1U5eHh3ci9hKk9RUkw2ek16SyRNflIpUmV6''@;'; put 'put ''fUA4cFUwP1NzblZiMzYsXX5RMXB+N0VWcVA4UiJHO3ZnN2V9KTtxUDtRKiY6TEkmUiljME9ue1h5O2xSVyVGYVF3NXZYaGlVQGguSWpmbz9QSzpmUmRxQDRFbXBwWmtUSE9XYT1iSWc8TTx9Ojl7SnMuWG4pJiNgVlFiV084KnRfRS5sT0wsS3lrI3JXbV1sYiteT3RjMzZNK2xtY2JRMD14JmpA''@;'; put 'put ''fVtiIU0hYEBPJiloISRqOWtYP10oeF46eUJFZ2psRitVX0N9UygkUDZJUjBPSGpicElLc0lFaSxgU20uaGBeUTY2ZExQVlJbRldbWTRZOnZrQk01flgkKXs7fGR8Zm01dzt2bDhBdTR8RHA5NHY6PFBGMzpVKUBnTEYpLnFfOSYqV3AofnFRdzVoKkpASjJuUCEjKzpCbU8pZzdXZnRmcyxlZjQ/''@;'; put 'put ''c2Fob3VWJDZrfE14UStZVmlKQksmW2lWfVt4eG55NFs5TzV+WEElVzE1JlQsTVFiL1U2Y18mUH4jd2BCWFtwPmBeMF9UNkQxLHRLWXdiRVtrdENzb2BVVHhDTUFKO0Z1VVpJMDVlZD1sZDV9ZCRbRj84XzYlNX5FQHdLSSVGQThGPUdzaHRmLmZ5Z0h+KDRxM1FdPiQybE01TjFEWXp4SWUxLDg4''@;'; put 'put ''PCNvJVEuTmpjMmFvalZwZVBjSC56NElFbEJXZVhAbkw1W01aYnElSS5gejE8eCNARTAjcmFleV82bWR+Mkh3U3JwfUomRkBrVitoa3FMP1pmU0w9JXs1VDFHbWdvSmhhREc9aD87UiN6KlZaNDdadGFPYjxDSyNWSSxReTcxXUQmRzE9UkpTQG5SPX1saGhNMjAhXyMkd1RGZ0ZaYyUmLiR9R0p7''@;'; put 'put ''OGVSRE8lelhALkBedkswNjZkbz9kLEZOfTVgRiRmTzNpNXcuYSQ9dGBjSiRgfG1ePFlJIlg0QDk/eXVZJWp5fHRGeFF4dCt5e007bDc/KFlZUWhpbV42bzpHWGh3K05rKk9jU0k/KGtqWDJ1UlAiVVc6Y3A/N1AwOXY6QjZQYy5LSUdIWl89U1J5elNHLCYzdEA5YmUiY3VvVCpdKVNkNVAyVzhg''@;'; put 'put ''XXNKKmksXTRsTkU5VSVbJXFlY0ouaiI8XWldUmIhW0JxLE5kPEUiSHo8LCY9MFdrO04qKkgxOjp8RShYVG80Knxba2I0aW9ROlpLS0pkSXUod3I6KGF1QjxGTFZVRz57dTpUS3tyMSpYXjlGKSsheEZHT297UTtNXUNiXS4rVT9JUU1EUml6I2puP2hlKzFTJTYvLFVsNlhkNz18IltPOnI5Jkch''@;'; put 'put ''RTRCPXMiNEEwd1BFZjokd0ZmPEsmUXhIY1FOazpJKk9XbGFxSHJnVE9GLHspdj9WVkY6RHA7Kzc2MlkrN0FPbCpKRzJ8Z19xOy5hZCF0WVtfYUR3V0IydF5LOGhAeFVvW3dEdD44WnNSKG1eSiE6cnM+cHd1dn1lIUo/ZH4kX0pGJW9GdHwkTVFgNDJWMEVoVEg9JlZVJlUrWlZHeFBZU3FwNEtW''@;'; put 'put ''QEtyc21xQ2QvPV8kI2gpbFlZWVZ1TEdzO1pwQEBmeylKSCpIQmpFakhGTCY6NXg/fWVJNmV7OE5qRWN0YnVdQm81Q3UhMlFJJjE1KFddfj8mbTZKIUIiPlNKNVl5XX5VRSpGW3g3fW0jLyx1TXVkZmRJaFNGQyNsakNBQnFLZz4zfj4xcFNedEdDWUNrck1EVHlxXnQiamdoTkdDMkVlUTAjJnpE''@;'; put 'put ''Z0U8d3V0OkJMVl5QXSVOOSpTWG4ocFV1NUY/TDYzbTZ7cFJNL3JuZm1wT3ZET0Uua0g7fnkwPV09VloxL21UQFNAdHhIYV9fJE89K3A0IU41aXRJNjF3eGkldltyIkE8SzlzdXoicz5FUmlRImdbKUByT0Q+emIjQDd9LzJtZWpveDZ4NnYrJiw4c1dOZW5pNEAsO14kIz8hSXtWPERhKmNOaHA3''@;'; put 'put ''fTRMSXRQez8lZ2xgRTYyXXxpaWZLc0JqJCJJIWxHWl17blV8Ij52PSxkYCliVXZ0bStDPnlOT0BVYUg6XSVsOSRvLEM2P2csbks/REA/Yy5ePHtMIlE5Tjs0K3peR0xQcmFYSVV1ImdTKW9jKnxmOlZdW19PL0FUJTMvLkNhezc5LCltU1hVT24mSXsxemhXcXVoYjo4VWx8VlNNNGkwemMxO1Vv''@;'; put 'put ''ITgoSVROLnBJVDl5TXR5V1UwKUZ3Mys7W1c8RW51ZElWV3VWL3I1R2BVcjo+NEtPRTdkRjR9RSNQcHglTF1QOipASVN1IkxmYDg8ZVImVnhVanA5UCpISDVeODIrQmtmI3lCJDBuO1lBNT5zNzkjT153OTM0YFI5cHZiKDM/Rl05WD04azIofEpVMCJqc1h4cW5kSU1BcEM2TWNJaksmNWYsSEg7''@;'; put 'put ''RnE3d09oV1o3PCU9Nl9WdWQrOztpZ1t+diN5XkpGOnMjSDk6YCRDdXJuRmxDcTFQK1ZNWyNNVUM/VSQ1UzJaa000IXVFKUo0LyxMR0xSL1JQQk1aOXZ1SSFESDVzWDI1Vy87JEVsI0dFO19zMUN9bVVNeEx8eWZpYEo3PkhtV2YsVlZrJns7akBNY1Y9Qm89YFIpZjsreFkoa2I5a2w1M11YZCs6''@;'; put 'put ''OT1OUCNLP3l9WEBPW0tibEdfLHtMXXBoW30qXU1dWnJLcD4laWw0UzUsTXlyMGAjQ14+cjo7V19jJlYydzh+bjN3KS4/a0AyWDBPVV0uM2o9Qyg+TW5PMDlUMUFjcytDOyFCTkdhUGRseCp5Nm11SFdBI310fnxoVD8jTCVGViFAdTApd2BXVW5yT3xUMy84Y21SMXdJQFJsbU0hazpiIjJfVHNa''@;'; put 'put ''d3ZAOUpRWGFSQmhYMjAobUFpVTBWUEl3ajolX2lwWlIoJHM3YFIyWF0qI2NNJHZGOy59aCkyTnNHenRCbWVbNEtpYFt1WTNbXnppTTcxQzlbY1MsUXtRR3RxISU0OXxYMlYic3ZmXTNbJDhlT34lPEBBUll4UXNpakBmNWQwLFF+R1ddSWgoQDtWWlEjMSFmVy8iQ1pRLEZrVDMsX0lFZkZUJD9L''@;'; put 'put ''ZGIxaiFvfFVrb25xfnxQSHU2Q14reXQ2akM/WUxHdj9JR3QrKilRL0hxL2A0Pl55al86OGBKImNmdVA6Qz1XRkxfSmVnfkpTc1hCayFsSWloQG41VnYsO1NyV0JxNix1cF1gPGtnaigvaEd3eUZzc3dpV2VAe00wLmNhJEskJj0vYTthXit2eHRtcHRqL3diJEJpfnksMVE7MmBEcSlMOkdXL3tU''@;'; put 'put ''d2lGVTB4ayZkQTN6bmZfQDk+ZyxAIUVZTit2JlFNWi9LZkBiNSJxZkVmbkkvXitDZWJpeE44cFRAc0NaLmttK01QNHdPQ3s/RXRIWE06YyFpLGckWlFJOGtkSHNOKzEwPWh8azoxeWkvT1s2ZSFFSHQvWWROVFNWczBkN31RQklSOWthRyVgWG5iZ0R5Z0QlUmJ4d0BuKDc+V05QOTF9VHlzVDB+''@;'; put 'put ''Kn5ObFpRMzZyK0pgcDl1amQuaWVaU2UySDNqJUo/Un5QV3RDeW0jYzckRSV1eS8jQFkrc29HXlRVKFVbTjhuaSEhW2VlM0lVJCIzOU14Qk9lVlM0STtleDsjNCJ9fDU8bEs6TEVmUTgrclY1PkM4QENWZjMsUz5jYXwhdjclNXZPcTMhd2MidVlzTVg+STNsdU1hITE/SGlQWT8ofUhvJV8oYT1M''@;'; put 'put ''TUhkZC8raWN7KV1OJj9HOiFCOlYoeDJKPzVNc0FmJShLXX4ydUc6Rz58JnIqa1BjS2hFKz54LEM8dGc3bGZzUXc5RWV2bVhLQkZWPFpePGdFRisqdntjU2QhWDgxP3FhQVcpWlsoaXNbZWcmNDdgam4idzVqOGZoZWlyJjYzUUpCalgoOFUmQCtbZSZ6ZGUvcj5Wdk9femorfERGX287LmFzIypi''@;'; put 'put ''R0YjfHNLWjU8W21Ae0lyQVJDPU5DV0o2dGMpMnJBbU5keWhaJE5NRjQqcE5iQFBxRFN3T19iMjcjNCw7XnBRZnZ5YS5JU0Q6bk9uKyhbfSN6SX06LkhoLilyKEssKiokY3dRempOKlIiYTlIQDZFI1NIazdnIlJVRkNNd3FJYDwyRGA5eSRIZ3t9Ll5LekFCKj56Y1MrfSI2ZSF3eDw9YGxfcDdy''@;'; put 'put ''WSlSNlddIzBKLkV3c3F8alJfdi5gSHc+KnQ0Ki5adVMsUTQue10iI2MvcD91R1U1dGd2Rl9iI0xfRF1hMyNjREJGckA8OjghZlBFREQ2fXA3IkohZjw5Qjk9WXh9W35iJSRlLDYhVltLKj5NZlRAdHQ0RHkqeTBpQF0xd1dsNCNqL1suXWZ0fj5ZT2loLEF9aiUoOCk+NkZ9d1M0Wi8jTFM6T20o''@;'; put 'put ''L2YjTyZfMHhhQX1dcj8kUEl2VjclR0t3MD07X3phdztMWH4oMS84N2hRI25yL0JDXnkwfXFzeXMoIiZsKlhBKyxqKXBMQE56fHY/QjdSWzZBKSw7Iisqb3J7VkBOPnsjSWQ0Z3FjZiIoVGxuL08lZV1wSHl9S1h4SGpjPiRZMiU0SGpzcV1yTD5XaTBeWWVWYDxqeH19LjpYcDQ1KXhzYlM3ZTtA''@;'; put 'put ''YWpjelhzMWhFRyJ7YHl9fSEqP2VJSnRuYmpOLyhdbU0mQX09WFFAMlFSOUN+fFdYY0lNPE87I0t0QkNtN2ZZaX5IV09MUExadzJ4RDVXU1hjISx2dix4TEM1b2lkTjlkV09uVDlRJDVbMV1FajRvOFB6QHddTFNgd0xnK2swN2hVXSYjXjlRen41L2dAM2paUEN+KVFIbio+L2wwekJNTWhJNDg6''@;'; put 'put ''cTozX1FTLi4+ZUw7VlY4TEtsW1d8LF1+cnt6aUxBIUwwN0JWTWRMaF5uVTFBWHFUTDo2aURKVyIuWGFoREV5TnFaTnxRczUiPm9VJkRLNXhyNEBZV1NYVXc5OyY8fk1jOGh9cFo7eXQzU3tdZj8jISt8WUx8KTBnbCIpJGROayY1MTYsI01EKzlxRH1YUmkza3h+TzZrNjtnNWJwcVlDPUAqdCg+''@;'; put 'put ''VXo9Xld4JXNhNGRKSzM8UWZALykzT1dJM3djUSY2TCtCPHkvdnpTZzpxYGM8OXBfPUNgUWA3V1RUT3l4eXIhbVpoeWY8YFlPfHVtbSVdJWYxRXFQaG5NdEhMa1lmdyUrIU00JGV8OlozenM/MHdKKmVeQipabXR1OW1yO3R3JEUwJEVObFBiM0U4VzdvY197emNjN29FflUscTdTOURGYWJzX0Up''@;'; put 'put ''ZjsoeSVhRnVQZCllPiVYKWdSS2VTVGNVODlkKn0zZS87TmdXK3MoRzomLkRfMHE+eypVYnowOCUlQ3IjJGYrMD4iejM/TVsib05jdlYvRkIxN1BxdlM+bWx8fEpYcVYrUHNPWV8pJTBWM01VKUtUW3lZR3JDUWltbGMoMDdQMWRvIywiOEtgb29GTExEPExafXdXfGw5NDV4PGNdai9NJEl7YEh9''@;'; put 'put ''VHY2YyRsd2Bha2VbbEdoTG5fVShnV2ckMktKO1I1flc2fmNjIiFPU1poVXRPUXZnaDZsfVErMjgkP0EqWU9lPShJVVpRYCpbMX44RTZSc3dvWC9kN0x8NyM6Zkdwcz9TVGRmdlA2U0B0NGBfMTFbdERNSUdUZVJ0ZyVgUTBWVTF8e0Z2VFVyfHZ5PE5OQV4+I0g9ciNVOC5fKUtueyltP0B3NiMz''@;'; put 'put ''ZW5KXmdKYHVQW3NgV3lLMUBSSUFZPlNeIyZWJnp9aUk+Z2A/WmBlWHpJXzRzMSlndE1KPCtkYGJrNFlSaz4sYX1tblV8XXpbT2ZhI1FRfG9+LjpZdXRoPnlweyJbZiQ+SnRQeWx3Y0YrWnx4MSYpfXphZFcpUWNdKUkibTMrK0VLd2tiRmY8Y29RJnhdc0d9a1ZPZHYkVEs4NlRVJnFqbVNJU05n''@;'; put 'put ''QiIkUjI0K2M3W19ZKjlfRihdXzRdej9JI3hZNyxwMGM/RT54VjJZU0tTe3hNYEJpckBiKXsrbztCfmF6Mj9rSGRIIl1WKStfPTQ1d1ZyVCZTYD54V1NfNjhxSmA0cj52RzQycEI3YXdsTDYrUGlRcXt4KSp5cWQ2LGNSbXdtU1BtOiQ8bS99PncvO05nOGlpWj5uL1lPJCp6RExUdHlhTUl2Wixl''@;'; put 'put ''bXRfakJRL25XZ0RtMStoZ1A3cjZrMFhfcVs1MV8wL2NIMSE2XiZQPG4haGtELm1CYnd0L2l9OU1+IUttU2kvN3wzK0QjcTZCPip7ZSJzdXBDYShNXXQreTNvJkJSTDx5SjN2a1J7YnViYTdiYUhsW2pbeCUxbXlafnF2QEM0enUjRl5Ra3BxQXEwJVYwdTRDOkIsZ3d0Ulp0MHp8X2FyTWlpQzNY''@;'; put 'put ''QFt9OzVrMUJUN0d8ekAvKz0za1hyeXFkOCEzJFFJKTx5Py5oNywhY3lMVmY2NS5AN3A1c19lLyNzOF4xVFZkeiNwMiJtNUxfUUh3Kl5gUDAmVF1SOjFmKS9gI3BxL1t5UyE1Py53aHRjVUE8c2xUUmJUbWlKSG0jMHNwZy4vN0VsTikvITF9Z3AkZS5NQj5tNFc2WjM4fD5fKXArRl8xIWhyITdy''@;'; put 'put ''PzU/VXokKnZxOE8mOD5OaTxefmZtcW1MT29teyNrKUlmX30/cnNHM2lxW2YmWj5mRHoqcGpidlVIW0R7Ql09V1chT1ouWVhwKDdCVnhxTkdDQD5+ayhdVn0kZ3wpbXdoP19zXnkjPzsxem1IfUVVZGBuaFovcl1OSFgoLD9ENUJVLyVKN09GWlk0UmhvLD4mNE9yP35aTGdCaDMmUzNMVEwuUmVJ''@;'; put 'put ''RD9lIzImKHohXT5kQTp3M2Z8TWg8dS9+eXdORlVnfU87R0kyUUpgLkhxJDNtT1B2b3VfI0pEUSR7TH4mJVl9MVlje3opbk1jN2pqZGoreDJhP1BTd1F0dV86KmpoJTB6fD11ViV8fGBKUkF7Lik0YURgUiF3IVIheDJsS11QfD4lezc3Ul9QK1ZDQW5kYCNLLksyWiFRQEp8X0Q8WH0+NkIzLnl7''@;'; put 'put ''Rjg2PFs2dVpCfm5vQEBTPkw2eSMybkwpRTRJeV1UO1QlJFdHYmVKJmRjWDdfb0F+flduOlpzVTZ1NDlxdGBTIkleIShhOVdjOCtVLDBkZkRdKz46WEREbk5qPzxXTDBNSWxaL1V3Y0lXdDNDW198WTp7a3orZjBIKGdSd3FFNn5rLklySHNnc0NKd0l8TGE+Z3V7aDJ8RFsrOkd+fCpkPkFVI1dv''@;'; put 'put ''PiU+XlNAY0NTNjhydyg6YnsrU3x+VUZIT0kjRyJfNj5GQHZLLCMyPWFEblRrVS9IZnBMWHNuU2dSUlU+RklPaVt+aFo/Li4zTDxMayNpXj0ufFJ2XSlpYVd3QiJRR3xIZV18OFs1Xkheel15TlIxZ0p4JCRQOj5ubCZgdytjRD4mUCsxQEIzdmZaTileUWx4bCpSdzVnXV8kc2Uxb2RPI09DWGpf''@;'; put 'put ''eihLVnYyQGw8fEFjfXJXU2ZqIyZKW1Q1YTlUWzxCeD5ObytvbVRTYCtaQlkyQSNrYzMuS09jXiRiZTpVfDt9LkxHd3hbSjAlOV5dIip6Q0psTmY4aFdkKHw3LCRmbm5uQm5ZP210MTZfVDordWAvL1dyRUt5U0FZdCZ0KWtscTIlYEQ2dWVlZnFUY1hWd0JQXitLLHVhU0l8KVdTbiYiRFBQQXk9''@;'; put 'put ''bE4vaDM+ZFNJNzVXTnBCZk49Qi5mb0pvRms3WjJZL3IhJE5MXik/WG9TZClQXV5kMTB3I2MkbHQ6QmJqQHluJShzWThJI3RHNGhJbSVAeWM7L2RzYjUkKiopTF1aJkxHI1RvIi8sNmtAPiExeUZ6UXomeXYhYm1AJjpTWF8wIT4rSUprOjxtamU2K0ooKi55QC5GVDc1YTNOLHxofUZGNHNOZC5z''@;'; put 'put ''TXdWQkVfN1swc0cycDBPXnUwR0BSMlBQPG5zOywheXYwI01BcU08NHEueXJVN1hARmFUZXVGL2wha3JCeVkrY3RVYiNDUiY+W2siZ245Wz8qaSQ+QVd0Ql51NjhIP3VbbCg8ZnFEMj1dTlNqYnMsXVdlRi5jfEUwb3Bhc1k5eldlP01gVSJUZExqdTljR0JFYU5sbmp0dXMwVU08UEtXN0heMzcu''@;'; put 'put ''aDdRXXswZHAhOFZ5KmZuJUk9YWpxck82eiF9Uyg2QFVTV3tzbG1+MW00RngjNCRWa2YhUG9hUjd3ZyRRbDs0cDwkWSV0Lm1VTkA0IVB6YGgyX3hGZlNhJTYyMyFubXMpfjAiXVtJOk9kVFQvckNvISsseCw1THQ3PyNHM0F4d3dkVGs/WEh+SV5qZH1UP3xFeFswSTI6M3VYVWxDMGYlUXI0OSV8''@;'; put 'put ''ejw1I3FEe3pqMWhHImVFbHE6ZF10P2lGYDY7VkQicWZTQGZLM3ZRdHQ3N21gW0NuaiguVzcoZzomR0dtNm4iRDkkVixFTlBaMihZWGE5JFdPPVtEO3YiIXNsaXphWSNJNE8pe2kqVDsiVDRANjB9PEFNcWAjLGFlXzl1bGcrKUw8W2hpMHhxPEMoM1ZhMXpffkR4d0csT2J9Vz90VFgkIUhTIV11''@;'; put 'put ''RW0iI01FKW5ZKjspUy80OD9fQjJWXV0se3J0bG8uamA7Mz9ZTlpPVUZtUyN0ZWkhQ1VLeVtZZyw9T25yaHJGJXhVPGJkUVJoO113ciV2SF9pV1ElO1Qpb2JzdEtfYlN3Q09hOm9zcXAwPFYxbm5xKGVUYDgwWkZEX34sNENYai80fDM7InM7K0FeVjskWz9ea3Q4QTZtRnIhJHB9ej0rPyk5NmJf''@;'; put 'put ''YH5bJldhcUpofmF5Vzt+QihgbmshfCIvVzs/W0hNLGpJfTtpOkdIUm8zOll0Mk1EZHVaSUwhJTF0VjJDSk1JUlE1eyF9e2s0cWolXltXPUUiO28mfXwuajxscGxubzJSZUpgfHFsXzVHVU5xOzZsOER7VDlRIWtbZWJXaytnQHJTSCpVJTUwPHA+fTVuOW1kaG5pfkksPFlfK1ZjNjhWU3FGaUc9''@;'; put 'put ''b0xsLiE4d085O3hQQHQmcFNRRWBXS05hKEhGOWVUZitTMl9jTC9NVTsiYHlnWUU6SUdQY0x5RXE2Q3B0TGZWNiJpJH10JktPa31lcDVXUk55KHxtOH54bXAhPUJ9RXtkOGJHejsiN218enNOOU02QVBfSDVRSEUoXmJ9L2ZkKi85L1tWKWdGTXdEZDErel1UTGsjeDR4eTMmI29vJiJme0ZRWEJG''@;'; put 'put ''c2lzbj1HTmcoXTlWOWdmVlpCfGR6QXN0QkNMdy83dH5kQEZdcEU/SV08P2xyOGJnd3lqK29XL101M0QpLGxuUkp8NCV+SkIhcip6PG82LFs4aUVIKE42KitsZ2pCaEh0OWc5Z2UqVEZ8PWpSO3VZbi98fDpqekB0fVkxYkA0MiZjV2lZMC8rb3QwWGZsQ2xAbS9zOU1uL1t3dHB7KjB1JDdCfUFf''@;'; put 'put ''eFs0b2tTJCYxMjAyI3hsO1UqMih5TDMudVNgNmZ1QkIsek83L3owbzxoUTo+dGVLNTE3LCpIMlslZF0iOzhkPDxwZSF8aClJMEdxWmMzY1hvbGokcGxPMztxM1QqcWM5dlBLTjJ8enwrWTpScTs4IVFEU0l0ejB8KH5rbkp8QEk6bnEyOkU2QXAjWUQmUmZGbkhHXVZNKkxQKXl3P1hhbjpAR1t0''@;'; put 'put ''aCJmRShfYywlckxWXU5zYUQrfXZzVVA4I3RffGgzJkMmZktdYz1fd2xEITZVLC9CV28wLGp+cUJtdyJrNjRkRix8d3tBcnl+UTcrWSxxW1YxblJOQStmPGNdem5sVGZRVkUwZDphb3tqeT4scWwlKmFDckNuNCRxViNhbilnciM7bE1QLH0lbyRpbkFXb1VyfWJAcV55c3ZJMll1X1tFQVsvVC5W''@;'; put 'put ''SktZPVpHWUs4W3p6VH0hVFYiTkI4b0Bvb1lbZG5ecGB8NW1GKlt1bm9vJEsjXXV1T0Y3dChTRmg7YmomRWNbW01DW34mZ0QlfEVrLldeeV9tMEA6YHo9IzxmSHwmLDc7b1FiI24+WCFTTVsiVX1Sbig2QlVrUnEvW3dVYFtPQ1NldDkqL3VhJEZmbSxqfEZiaU5eKl9ScHZKPXpiZ2FKbENnUXVM''@;'; put 'put ''P1VnaXxRZzd9Rn1ONnAhIkVBbTQuMWRrP3NqPEY8P2NZRzZmVWhVRERlKlZWRFUmcnl9Plcra3w+cC8hfCx1LHRxMVA4YUw6XTh7TWp7b1JfdF4+UHM8YFl0XmZ1LGlze3NAXlttVWtNc3xKSlZxJlo9dX1ARzc0Qi9OMCNdRmEmPj5wXTtuZ1NJPW5nIT9RS1EselBgJllbI1hmQ3JpOS5zM0A4''@;'; put 'put ''TnJ+N2khL3Z5dCEsYjFPcmIqPVFbTSVYJDVCUUc/dWFHKWlAfV5rPDMhKSs4MXB4W0NTTGV+YHdDUXVFfkRdVFt7KVYofSNUZUJNVW9qOlJbQzFEJlpEIk9GLEVoXzptRUlhUm9ZX152OXhYWlVxKXJqfDpNZywjeSQ5RyI+elt2LjwxQU9FVGZ0PGBvVm9lZWQrMGZCNlc3Z3xPV3MxMT8zc09O''@;'; put 'put ''QEJ6aVU0Nlc5aXFCcHQiOk5oZVo9UihYQzBlcnxhVTwsaDl9PH5VblhjPmx8VyghWF5ARU1UWjhHZ2U9bE5COyJQdHRIZWY0NWVgb2B4OzYiWzNSPmRhTUdySExOfWE2UzxyX2VGbGpbJm9hUTx3ZU4mL3NMP2xxYWlPNGskWFZRfix9bCljKjhHQyNXUGtWSnB0IUJ0TkA0fHxUelU/IWp1SXQ4''@;'; put 'put ''cUN8Wi8kLllaY2d0Oj9oaShqXUFkP1cvU1tpRTBTJDNPRTFyN2k3QHA6X0dxOnUrViNaVE40NigjUlN+M2UvYXhranJ7YkhUWHhOMTh9YVlqbmxzZzVRfCYxRXwlIVA1WDp8SD9zKkVYeldHKEt6RHZjbUxpP3ZWJTBAYDBEaDE6Ui5LbDQxZFA1ISh1O2EyV0pBKVp0VzgjdlRrOUZTZ0pNa1FC''@;'; put 'put ''N0xnIVtUdDZJI048SjUmcXMsfXM7X0tIQkhwK2t5REdXQnZ8KmF1RCZ6XzMvaVpTJT10S1pGQzhrSD14QkopeXVVbkkuKCRfS3NXMCJAaW1OSnw4YVQuM309ZEgmRzFkQ3YlbHx3TT4jaDNNbHBwc2BLP0FQSzdkdmNoN3lOJWNLMWV+dTUxKG48T0FXc2xrbjVkeFZURS4wM0laW0giXzA6MmIv''@;'; put 'put ''MjJKVClBVFBIUGl0IWg0WD48ISVNSEUoP2tAa3FoV0YpJExYNVguKCFCfjtmTH5lS215RiwmRXpvMSRnQGBCMy50JE83ImlOTmh2VDsxZlltMiwiQFlSLlpMPWlobkpxQEo2WUBZdkQ/Ij1+LEdlYzxOS3pFPnE3dixbaCNSS19+TGNGdnhaPVlHXW9gKFhCYCpmbTMrM1opWVh5TSQ4Pz9YYEZY''@;'; put 'put ''dHk6eUBWJmhvUm9OeiR6SHg4Iz1RWEgiJlsrXjE+UGw5JX1jRnB4V0JbNSVdclsmUnZITF16Qj0jOSI4Z1JsK2I6T3UpbHhLVF11bzwwWF1LcWQiXWEjMVdQYlYrPj9AYX0mUTMhUzFSNUU4aH5jT1VJSmlSbCpeJlY5W3c2XXdxQisrdW5GVXhEW0twa0s0SD4lNH1EQTorTyUoM0Q1UHJqaHNU''@;'; put 'put ''ZURPcUBWI3xtZ2NZa2NVfEJpeGZiYUsrL2liWjhZcUdoWlFdP0Q2fC4zbUJbTGBFOmFpXWI6RTp2L0A9YGxJMCE9VCY5fkI4T1pWTD42VyN3L3Y+UUlOM19lO08lODpSYm4kOVcleTpgeDUoQzJgYE8jU1tCRWB4eSYhTW8/S1Y1eVtXXW89azAkKz85dCR4cEo0NGVmakVGOj1JMiRQMGw/cXF3''@;'; put 'put ''ZmVEOSoyeVhrPS8oUWQ9UT9yfF9GLCRnfD19M1BjfXIuVEU9bnk2JShVc15RNywwYVJObndEJkpJOFp8a1dbOX5eUnczfj9iP2UkUUNKX0tyLitkXWR1dXw5SCN0OitJdUh3XjUuXXVEZkFZPzwrciVCWlB7XkA9ZTNQX21nX2RsbV4pa2VrWVJSZklBX25HN01KNXorTz02OnJbSExqRXNePn06''@;'; put 'put ''ZFtWIy9XYn00ejRLJjRBaVgxPUhrVD1qXkNULDI8aiRrPkMyTTBZVz0jVStjUyZbfDdZaHtBV1hVeUJCVVtlKjF5a0UyaExPRTNOdjU7Ql0iQWZuNCk6fD0qQFhOVC5NQHJbOlgiQkNzSjphTnhwSnpzfmU2KS5bNjUmJDluKSVQdVk5ajNKMkZtWENjTnRNRUF7UXxEOFoqeFI8eWJyRXIhN1ZH''@;'; put 'put ''RzkkYlZTMDAqaGFwSDJiNHxISW1zfmpwSCIrcE81ejFJckxfT3NyWF0wJUxtNUc7Zy9SdntVM255OmNvM31AfkBbJWc6VTwmb2ZxUTJXaGFHWitlfTdTWXNgfn1GJmEjPUJJI0xUIWNUWF8+ai8+cnFMKUpEUFN9SUtXWTp9fWFFLk52ajcoZiU5WllhWmxFcT1uI2shKSNacUw0TWVDTntrQ2NV''@;'; put 'put ''JixEcmpuSnp1QjtjZiQsaHFmPFc/QzBLel9Ea2x+bz9uOkM8IV8jUGpDR2UqU0xxTn1zIUQoRTw6WWI1YW9hOiN5NiZtezlTdzsxRWhUKT11TUR3Z258NCVKNC87KUF1dSFKQHtDM3k4WV5nRDF8dFR4R1RlUHRkeD81Q1U5SHpiKSNbUmg9cEZ+WzFlXjJONno6czw3Q2NiO2IoaEZmfF52QHxt''@;'; put 'put ''az9GWkpWNkV7QG9fdG42JndbeDxnKytZaD1oTVM4S29HbjdyJTNeeyU8R3hsPSFifVRsMkl1QFFfXWUySC5Na3BqcyhPeiJOUk4uSWNLMFk+RXVCKkMwPXh3cG8/VjtkK2gjPzRZdV47PjUscEk3SEB5Tio3dzpgRkR7b1oxZyhkPXEpenxmQmczQkFQbXlOdiJyOCw+fmZsPkRxOE5qL3ssX0c/''@;'; put 'put ''Py4wW0ZaaVpOeXdrMjY/TmpZVDd+Knd0PENwcG9uNXhfQDhmTmM9djcqNVlFTkNTcS8kSjUpTlksKGhHOTFXIng6cVYhXyFjNlg4T0cwZ2QkR1Y0Q1lVaFl3amliKTBbV2RoKVlFSCRDKCVYXmdbWSgxQkhnRmZLV2xJbCphfE4hdXdgJEgzem59Uy5jdWciOW9NUXA6cW1tVHJGaXVrJnZTJSZj''@;'; put 'put ''XkJNOCNtJnFvVkdQUXN0JFJyKGtHdz81aiMjMmxjcXlIdFI3fXp9Xzk2Uk1+OEJpKzZZOyF+UWcwVXsuekZAOVB2X0hFOyZMaEUxM3ZdU3g0eWVuIyZ5YV4zQFQ/cFRdSGs2UmBbayM4fHBKZVhjUip5NnE3R0pCdVpCJH5HbVtsWXxgd0QyZj4wZDg9clBwQmNwWTZXcjFYdXtYKG82VD1iRFZt''@;'; put 'put ''U0VUZWVhO3oieGZkV01+bjomdSM0OmB5bmN3PE1jcSVGQ1MqRDN7JCRvY2ojIyRGQE9DITU4N0ZCY3A2KWYsXihANHtvXzYyJVMoYlF7ek09TzNvNTxfZC5FOzZfKztpTGRHZ1BXKkZ7XVBsQWVsSUwoeDYzTyU1UixAcn1idHlQTzxQZzoiSSNzJkRhPFdWOD5sUzErazxZNz8vPXMlOHIie29U''@;'; put 'put ''cWB4QH1ze2l0OUpjaXpPM1MpY0lga1pePkFaNEskaWdsKmcsaigkXyQ0WjxTWz9fUjZkbkRIVDtDKlpoSmwoc1MuI1dZMzlxQ3Y/PVcoLGEqOzQucmh2TyVVeDVQUURAd3U1bT1QP2BBWiorQzNRaWNGPlR0WUh0eEVFOlhXTn4jX11ee2hRU0BVJSxePy94ZWRuRS98Ukt7bV54cmZpIitZNS9X''@;'; put 'put ''XntSKSE4YywkW1o5cjcuaWRBMXFdfG5uW3Y2KUdzcis2MUpKOXIuIXN9KmJHZ3BOeEJ3e1ExO2A9JSYjMTciRTUybndNM0xeLFlJfVtrJjtOaX1vUXcmIXBFST98WEgqZ193OHRPOjJzNCMkPDpUezBSVnowMV0pSW9IcV82X35uYGNLb28vO0VQVkwqYF1tc1Asd1YyT2k0PW1hflpFI0B7M3dk''@;'; put 'put ''WDE5PiwvWFRkeWZnOFtMcVZgazclS0x4Kk40bl5qaCMsUWg6YU5kSyFAUStDTjsuLkIieGk6InpDO2kxcXxhSmp0MTpQYmpqI1ghWGMlR2tTNj5AOjRmSU5uKWhXdSVdbyZtW2pnLyg/ImxfdzBybD5jald0OSx4YTFAP0Q2X1lXdlFfX2I6czJGK21LeHZkOmJ7PkImbjZfY3RxelgoNmVaMVYx''@;'; put 'put ''K343YGZ4b3p+cFh4QntMSmV6Okk3d15ZTXViI0xoPVJkNWIrUCpnVSowMz00ODs7TiY2enUuOS4vYEYud0l5TzhaaU9wVyQsLCp7blpjJEMyRV1PLEVVQClNbFo0KXA+Tz9wbmBWOVRkRHw4b0JRaVFbcHBuNDIyUWVaUzs+cV54b2EyZDtwaGIvYShPTnlyT3VbSiVmJTMsdjJFJGRCRVlxKTh1''@;'; put 'put ''SS9hP11pbWFvSmYieFpwYEhYfG1wPHdaWnpeSlROXkd+NjZnZ1FkUnUsM25KMzQyejVvNmJIKktEeV1iT1lrPkUiMlgyYjFeQG89b0BLLl56fF9HQUZXM3hlYVZHRGddW2RANntFeGJZan5WLEZJRkp8Q2s1YHlNSXl+bzpOYzlxLEFlJSl0SVYyWWJdSztzZFJDJCE0JDMqUjQyTnxhRVhZKVo3''@;'; put 'put ''eVdNNUhGIlY/Y0wyXXJNLjwhTTdJeTlRVEVjQGl8Z1tqYzxud0A7SU8kPT1VXV15SkgqcnVtUng8ey9EYVskTXZhSnlVXk1RcXheZ3UmPyVBKXo1Z1NeeCJIV2NEemZdKCt0bT5wUFJ5I2lLNzJTNGY6UjRrdXxZc2Zac0tgRCFpem1fRW1hd0skR2hSIzdEOykwIllkZ3BecCpCVj06OH5waj1n''@;'; put 'put ''MWJQQTBSXjhNQ2FgLipKJCQ3d2RSN1g6cDpPYDRAU1s5V2oofXJQb2EjQFAqSmtnJilbWE5pfTxJcXVSRWAzc3FTQFk8S3JCWiE8OSFfN09BWUdxXU5qTyU/WHAqRWdfeSh5bnlve3dBWDpFW31iN3I9ZWU6NDhuLyE+JGAmb0ZGRChdNzQ3QHo5I3gpV00jO3cpPjZ3antFNFo3ZU9saHUiKC5z''@;'; put 'put ''ZVZCIkNjek5lYipkMUl8Z1RHQEQufF55fGcuSlZLWTkzJH1sRnlPYE5yY2BmTmQsaFE6ZGFRUzhDb2ZBXzBdM19aNnt5bkYqLEBaYms9XWlXNm12SXlEO1ldcGlhQW9SXzZZcyhVJGpJYkVAViEkYGhOcz0+YlU1cSwjUEl+Ul9iY2t+TmhTb19IKEJ3aUJYNjF6U2N1VGRkMzM8YXxiN2s3eXdd''@;'; put 'put ''STZXdW92WzQ6QjVuOzFkIi9feWQmWTZOJT5GTUs0MmBrK0VWUWcmfkBPekxSdjFtJDw7LiErMWJUbVh3KFMpbk9Hd048U0w+bCUjISNnOD9IJmdfblVVOVJfL09FRDljS3tuJTFIM2tEKFk7THElaSFDekshMH1LflddWFROTTFGQF1+WTxFNTtXSixKKipSblk1QTZ6W15+Z1Y6Ri5Oe3x2fTVQ''@;'; put 'put ''eXpYXyNMRVZnK1JxPkV+ekFxaSh5eXY1MXlEPHVzWWZAfml1YSghYUl4PkVFcWx4a2N8YjIvTzg7bWdvcD4+bDBuNXo3Wlp5QSpuMTVWIU97OmgmOHVyfFApR1FCPDxZUl1SYlpUWyQpbmM0WTVOU3JPd1NpakkyUDJ9QER5QSRrKEk9YFBHZl5sYGV1OSg/aERAUjg4MzhBZUhzSzd2Z3lRcGMz''@;'; put 'put ''QH18M2kvMT0pbVRlT1ljQH17QnwvP2sqMUsqVS9fMGV+JFpBbXR3ZWFtbWdhMWNRJVFNaD80bVQhfTFpISVFfjQ+d2R5IjZtYyZGR1pnWlFHJmFQcEEsbCMsck4pSlVvLi5YO3BsNF1nIlo6JE1XRU9oVmtmcGYqRH1tJiVzMCNIey5gfTFmX3NYY0FeUyFiX1krJE5LU35RS3NpIVtwRjcrV0Vx''@;'; put 'put ''Qz8rIzMrR2hPYEQjdG8zUERKQE1CUHRwWmJiWmgpYTxlVz1wPjM4PEsoKzY0UH5aUD0ydE1WMHBjLDo3cyRRN0RkeixBYlshOm9VNDF7eSFOYXZVVVFyND5URHBCZzdsRD99fF1oYTBRaW5YbW1+W2Q/X0UyYldXYV9xITpsIjY+Ik9ZazVXPyJ7VD0wcF1vbU5KWnhfQyhiR0k4USJaZmpNVHdQ''@;'; put 'put ''ZFt+QVVQV1ZVOi9zYFNJe0BSTyw4NThbeld+IztTPDYxI2wrVDgpd1pFPjxXSW05KEQlUDY3bDV4NlB9WEloNkNBZmJAM2hAOWtMIWp0JXckNVQibnJKb24zZF4wYTtGQ2tmPShsVlYvSkRJOmc8LmY7ejNOcH5QTCIuJms0XjBMc1J1Kjd3QCpCLnp+fnVLTiMoYyY6ZFlsYGJ8V1IqUSpHU2Fz''@;'; put 'put ''P3lIKkM+K1ZeQCRjaXpiQj5YY0pGb01AKDNsYF1dSkgiVD12IXxxKXFRaXhkQjNUMjt4Kls2N2Y9RENnR3xPX0hmU1srPnReNnV1UCZscFk3TlBLOmRpfk90dCJVUUNbd3J4SVIzeGcjQGBDIThndDhlJC58fTI+M1o5cyQkQGtjIzM4PGtFcFp2aGZKOmdIIzY8fmlZdVRvMzxvPnJsYXlvK0B4''@;'; put 'put ''L2ArLFJnWEdpY0g1azRTUjFWdm52R0JsY1diOXklYng/OjRNdj03bjteUTIlfH5leUhdUVE0YXsiXiNmQ2R0OTt7L28pQFs5RkQ9IXc7ODwrazl7aEJhe0VLRGd7TyRDRi9TcUpja0M5QWVhcDcxJmt5WDY9X146IkZNfWEkNTovRmt3RE0sc1R+VDNSX0U+Jng4b0xeWHdlTWtlRyYub1lLb3RD''@;'; put 'put ''ey44LDMlS3lSeW4vR3w1ayw3QVd7M2xJODRuQEZyP0h5N29oPEl7NEZ7Z3ZHWzguVlJYfGw3JHFZPk8uMlU/b200LnpBOmA2IUZFOz9eeyZkaUV3VH5aUj5rIT5Vd0RnU01mMGBjMFYxV3JxPVAkIyIlVDl7Q045Ml9Ray5HNUpHZ09LYXd8ME44PUpBZGdrWXc3OnF+RHhzUUxSUkxFN2U4OWpx''@;'; put 'put ''JjJddSEhS0smLGllOGE7eChYZyU4ZCZMOGJXbyspeFRGMlpQQjROSTp7OiZNYiRbVnwic285T2koKmtiSkZ+LnlJRG05dWlxPnZrPCIqRyYxUT9+WyVfcHhURzRBb1ttYTVMbk1HIUx1eT96eUQrZDI8b2NfKHswQSJ0UnMwWnNSLGZBamxVTyhrQmFpe20uTUJXaVMvT0Zaa25dSmFxN34lbHgk''@;'; put 'put ''TToqfExWNk85QDp7TitCUkIyN2hNNzFqMUc2T19jN0wqTH5FMHVFSU08WE9OaD56eV55IXEkYTAra05De3RlbFJnd0JXbGN+IkpyTll3byxucSsqVUIqdi9yeVdWVEdheXVjPkohQyJGKjZAPGZWO3MzRzdvdjh8SVh+dShWWmtjUypyU24yKTJDJCR5U2s7MShnQTtGZ242OGZaX3RSZ0BwV2F4''@;'; put 'put ''KHpGNXovNFRXdDtHL3w3P2ovaWo/JGk7I0N4IX13SSRvWW59bkBsP3UyJHoqKjN5XkdbWjF9LjZaM2ZHX2JPPSRaWilFZ3ZbbkZoZk9dNkcwZ0p0ViVfdUBEXmJxfkY/SkBAQH5zfEJ2SF4oK2Z6K2RTd3ZteGUwd0kyKVF2Y0k8LzN3fis2UFNTJTlidzY9Mld0Q21nUlM2LCIlX2JsVWplZkI7''@;'; put 'put ''KDsrT3NAQElHVmRzUjMuSipzSjFAKU99IXAlOUdAUT1bLDFyLyY6Z2N5ZmRfS1pKaS9WWWR4Yn58QHY2eCQvXXthLGsxV0RaQGs4dC8jaE1FNT1LPGp4VihmMDNhQit0UUlnW1pAfHosPEM/KjdyX0VONEtFN04lSnxCS3R4cDpae3w1L2dNM3YjM3szeU4vRDhEUGw6VztXXiY6REBQTDVSQFEi''@;'; put 'put ''RjdNWHFVUiI2O2R1NyVDOn5QVmRYNUdPNTdSaE87Unh5YFF8ZkIvV2ZzeEgseWNSPjIuSyEiVHlhNU5Ddls+K297eTE+MGl0cDluXnIye2hOOFA5JmozNG8zM1ZdMF9AXzpnYzNDbWQpYU07PUcqflAoXXdSNH5lY0wxISY3V1tkN20lamVVMiNHNmJhNkJLeyRucCQ/XXEhWHx+dyFTNilvJlB+''@;'; put 'put ''ey9MOjVfKjE2WmJqMT50SVVUYFpGTzhuYl8iPVtqWkhfYnhiJT04LlpAdmJGX2VMYlFeayJuPlshK1szfClDOXtuZCQ4PEtbbCohTUU7ZGUqPkxxQTN2KTNoQmQoVHNYbno8Qz0jciIjTykxUjYobkshZlFWJkxCI0dGMkhfeSorQDlrZnojeH45UVdReGRjUkJpQl5CMiZYKEV+O2hxUVpMSWA+''@;'; put 'put ''TSVjI3E7WilXYEMqc1hMaW4vdF00JCs2NG5rTiREO2d8ZWhOXz5VT0JuWkVmZGw5W2NNXyl9dWhIWEZHYltIbDYjQUxgIkJ9OyYlMjU3ODhkNUc1ZTUuWWp7eD5KYypiRDkleEdvRiowPV5XeGQ/d3p6YC9VZylPMi5oekU4Pz5yTm0qdkp6amVqJWVFfT4qVGV8MENdKXc7QUJPIzYqR01kIjgu''@;'; put 'put ''Y3BIIyl+ZXZUKCNMdDtUcW90InNiMShXKz03RGVjTVQ/bTsyZHVFYVBOemQ+WFB7X1A9N05SdmEoK1UsbnFxejxYNV1sQjgjeDhITlRDbTNAIkFaQVNubXV4PX17Ry5+XlZqPUBtNTN9Rk5VfE5gU3JrVyVFUG5EV25GXyxgLlFsJjVNKERDOU5tcCUsLHQxaUlOYWJpMy45fVoid0ddX2c/W0ki''@;'; put 'put ''ODxraChKUXIvTHkubkBKfW4xaStqRSM4djFEeSNfbFQ3ZmwjaSRTLC9pdnhici9JVj8zVHhkXTF4SVgrNVN4aktWTkZUaWZlNG8sW194KkEoREtZWkdDPHE2bDs0XiQxU1k0V2NfWGRkKCwzY1t8czB7WEokJTwoYylPcnVYb2JiVnphSE9ueGBlezVlfGVNWkFTSChdQEhkPzVUVSRnenxYLHsq''@;'; put 'put ''fS54VDQ4SHhwK1FeWUZfdSFwNXpUczcyO2FZfWg+TFUkNFp3bmkoOmFdNmEsWD1XWUc4VWMuUEdrUWxVUnVgfVc6b15+ZGg9NndFPDMqc25tTSpnNVg+JjkmSHYlSSlVJV4oPjFeVnljJi5KcnUiZXVeQzFTJmsiW1ZMZSRBL1lSVXpZZVpQVzltOFZbOCJMZ0M3WjE8P3VYR3V9YzJLOGMwXi47''@;'; put 'put ''XktuaX4zbzVxYW1gU0lhTDxiU2ZoLjsoInU3Y2ZsO2IqWVl0anRQYUQkWEk/W1ooWiM8ViUjPzBIVipYfCwsVTpzXVkidHNmdV9hdHksLFU3cEdyMG5zJTBTclZkZ3pYWnA3TjJwb0BqZCVqaSp9ZVJufGR9OCY4TEg0JTVkb059M0ZKKUk1ZVNQT3ZtWkhHa0JWdm10OUdpSXhAQndQKH0pc1Yh''@;'; put 'put ''WG0zaTF8KHs8YSpsKz91aGV+OXEqRWlVKEplfFkvTVc/XT9DLzxFY0lwS25kMFN3dVNxVGZQMSRKREdlKDxAUitRQHJvQCZTciZMblBdfFVxOSlVOTZKZyszOmh0fDo2Tlh6JT1tS2peelVKXjZzJSR2c2xfWDJ+RU5NT31QTXZZWGUqdHtzMCg2eGEwP1VlS3JmWXklLj9DJStyTXooOXBGSnVF''@;'; put 'put ''K3NlT2xxRnlPIzM5SThMe0ZFTCFDeCV6cDN2cl1feHAsPzFxRzJ4JEVlSThOVXpYQ0Q+dkNmVy9wKTBeMWNKS1BrWWU9byU4Yi5KS2pJU3UjKSo9YyhlN2dQYnEwKzpqNEQweXBEOHxmQ2Q9TFdvIT8oZj99Ll4qQnpAbT48TUB6OlZ6I1hMfGJ4YUZoRXU9SypjKyF5eXRwRD0kZTdydmY7Q117''@;'; put 'put ''aDVAMnYzWG0iRENTeSs+QHw2NDl+cTYzQWBDW1t4bGIyUWwoRj4jUTE1TTRCNnZ9YkAlPk0vNDd8ZXRgWmkiKDZzWkV8anRWITVCe3FPMz4pRyxmUipLPlcqXVJGQX10fn1YYXdbYT0uTVhFTCt7XjFqRTk6bXRHJG82SGY1I11hUVlxKGtiKUI9IUJCdSxaTV1Kdzc4ImlWbmB2MnY8XV13bFNt''@;'; put 'put ''Oz9CP0FobV1NKWVOa3xRWV5uPlVtYjhQQUFVUjx0aX47LyxbLFBUP3tIJjxrZEAvWytIVixhN0ZifF0mV2omc2N5PDspQzFfRyNAWDxUd1IjZkZ2IUI3NTticntCSlFeRktGTkB9Mk1rU0xodTtiT3RIP25EaV5paTxbXXZ3a0dfOyZGYXJaKS9ebVVwYTBia0BzXXc/aWJlT3VFXWB5PW9wN1lY''@;'; put 'put ''N0V6TXtfOUooKXs0XXBvJmAhKWM4Z2R6OCU1LD0zOjRvJWtGRWd2d2E7N1NSO3lSQCE1cmNOY2V9PyY2SVdFcjRSV3lMUV5LTDRKc3dlOnVHVWppLjF8KmJhQztJKGBQYXcoal9ybz5rRk00VUJBP15OKDM0UUldOF0oZjI4KE1Kck1LZ1ZaXig2Z047XjMyRW42YFJFMykwdS4vWltpRTVCNHx9''@;'; put 'put ''NDU1fGVXeW8kckNxMDkjJmhmPTpNUVNEaVdzLzFbKWZKKXReJn5YbEt7SmE9dDJFfF1vWmR1WSkqRTw1fTRFNjYrRmU0aCtQb05vSkdxNSomdTQ3Oz8sKX1veT58ZDBpaWU9cS92M30sViUoZmNTWVE6ajN3JF50SSV+elRYWE40ey59amgrNVhjZWg9ZHUkNkw4fVQ9dFMhVVBpY19oLmF9c0U0''@;'; put 'put ''NDYlW29pa1RiUHtiNSokUEdbNFFpd2pIL0F5RXhLI2tPVyU1U0BkRVFRWShEdyZaTVdGJDo2JDQ1PDxKdFB1bSY3M3xDN2g6aTVaaVU7K007UDNCNyg4ekArU15sLkR9JVc+W0ozeU9ORSlxXi5lZmpIIUUxOnZJQFF6V2MqYCpiWEhJdGl6bXphaXtOXjQiPFJ0KSpZfS5wZ1JKKz9yJUspXjNK''@;'; put 'put ''OlcoUEZRWUlpPltwLztgN0w0e2phcF90Tm1OS0J2TUhreHJuInx5Kix4cEF+OmlrYFg4cl18PnpQMCFURGpRJX5CWUszImlfZ2t7Zm5+OiQxQTJ8JmV+fldkSGE/ZzU1T0dFLE11bXd7KDBOdVk7VVQwOmwmQjs3UCZNbVZvdXhMUXNBdSs2e2RPP2B6YEQ/azprZWF8K259LGFMcW1jJl8scUp2''@;'; put 'put ''ZXhvY0tsdyJDXSZLYGx2PzJkMTJSYFRtNm9Odi9QfG9QcDs3TzVfakg7OT5hcDo0fGJ7YX1zelhRKFlVQn4yfWxiQF1gLHU8TG0kUj8qUmVGP3huUWEwTjcuaUB6WCswLCtFaltTNFE7VXhUdVU9TVAuYkdIJFtve24yWEI5QFRBfWxqWS4jajF9clZ7WHcvaXReTnkiX1JxUjgrRip+XVtTd0Jk''@;'; put 'put ''bSpMOmokaX0zSjBeY2chaE5TblpQOE89ZUI8Izh3NFkpei8rY2Q1eTpPNz0oY1VZYUZgU2dJJWl1LCozVWU9OC88T2kqdUgyU3k5TFUuKS51WEt7O3Btdkc+dXtRWnQoMVk9XVpWaDp3LEgrXlZZX1pXY3tFaW80REtPOSliY0RkX1o2UVUuU0htOVdLKEVXP1VDIkQuWzpTPkJLQC5jMHZTOkNK''@;'; put 'put ''bns1cUIxZVJzPzpDJTlGVGkiO0t8JC59WC9KaXR1c18qVT5KOk4lQDg2SXcmdi42WUtVdlt9dU9BR1U4TjEzbG1ady50U1FZcFtiMVB0MzliVm0qWnE7OmhoYSU5fU8yQCxodipCPDskdjtPUEQ6KXpQSX5SKERjfWpSQj09JDJYTTFpVyRTQyV+LndicHlocEcmXmNydn56ZDk3d2s6IVFGOERE''@;'; put 'put ''cUU9PkNMMzBvNkNIVDFeeV5BTF88R3lWRnBsbndLZDJKfUw6eXZEeGMvZ35jelMrL08zPnVVOmpBLjxKKShsfDd0Uj1mJi5wI3c4VCRKYmBvQEU9PFpBM3t0d1tDX3wsYGU1KEMrXmVjcWlBfFlCby99OmNPNyU1RW1hO0ZFSzRDJD5XfVkkUCxfL0lWVk9kLFRfME9pQjBmWEJ3alV2WU04Ozk2''@;'; put 'put ''YSUkTkxVeDxZcl4uejlTLGlzTSEzPH16P2FVPCpwak8uaCRVQFphR1JLYk9+M1UoWyklVFZMQypIdXUsYVJ7cSw0RUAsMXtofnsuX2wlRVlnTWR6PWxgX2hnYC5MeD8pT11fd0JXdHxkKG8xVkVhdk1wfDBEY1pwcVl+M2JGfHNaQl5pamIxW3UiXXBPK2ZiKGUre2lpOkMvZ1Ardiw3fkNGc2NX''@;'; put 'put ''cEk3bCtaVnBYVXZhM2A+TmAhbCE4IU4+N31qQnEofn5tI1FlK1Y+MTMqM2l3dTZNO3FTeFpwSV1EfD5XNzdLSHg1YCMrTjNnXkVCZlY7NlVdUiUyK29MTF1bVkgvMmtsR0JJIyQjJFh1R09bNCI1OnhpMD9vPk8xOiwrYlhIPjJtITk8eGlhJnxBUVROUGAyZiVidXtfeV9vcSNmNE9raldtYVQs''@;'; put 'put ''cVk4Z0JJaSI8cD95OmghbHFDfHE7V04vUj5yNlVGPUB7Sj92LDAhWn14YEVuV1prXyI5VCQoYWhecGRaZFM9QHRDam59bF8lemFHazVUYjFNYWc3KVlDRHRzY0ZOTXVwNnE3YmltQm11OV53fUEoalZHYDZEJT5RNkwudDxESSkwLG8hRVNTYl5fMXZ9eXRxSz5dTHF5b3I8dEJvKTgmcDsqVDV5''@;'; put 'put ''e2puSUt1XWZHMCY0d31ucSxTTnEkJUZjQ1N3WT8jfkNVaHdCbkQ2JT9MO2pKMX1sKCJnXS4/NWJLUGd2NGdiQHBvQ29CJHU8Z2Y7dTU9XlQ1UHJZISJpVSQlYTtzK3JzNFtCMUJGcktaKkdSI1FXK3liOygpTyt3XV5ETXhMZiNebmVVOFNycmE4UyZUS3VSb0VIWDF4KEEsKTV9WEZlI1QjbHQ0''@;'; put 'put ''Z31dbmomQGB5K2t2YkZ9JnJHOFksTExHJn0iVGRYMCtDa2A5NzpvPlVHKWtsYXImYmpeemFsRUV1PnUzKjo/WlY8V0UrYS8vWXoqT159MW1bMlJfOHl6WHRMUnhldV06SFNrOTxsNz1NYkoyK19UJS5wdzBsRz1FaTRwQTQrP0oxT15uPG5mME40cypRKnU0U0ZlMDFuNWJBKWd5MDpQU1tJSnl7''@;'; put 'put ''WSZteyw2UDt6Slc/LHFud21UKyZ9YEhBVUdMVVZVb0pDWyZdaHkpInZ3Nys4ezFVSmUySlc5NXlSIjl7XVcxIztafToqaVVRciJOInJqLlJHZDZmeEQhL2BMU2l0TEp6RSp3cGpdK1EwZHxbNkNLdEdKdSxyQ3VWO2wmVz9oNT46Vjlzd1RYMipMcjdeITVYY0ExS3QqXzJDZjFNeyRJYjYxPkg9''@;'; put 'put ''QCZsKS4lVW1oNj4+dHwqRnB2Rz5xL3wjckVeKU5xZ0tIOHNERCY/VDYzPTlRWjpNXXsiZTlSNV1ufENdX3NuT2M+JWwudSlISmJDNCRpTUhUQmNaUHxVWCZZOFJQcjRhXkc0Pm9KeXkvcDdeZVBjaXsqaW9BSn1lS1dTM3BfdnJDWlM5Ql0wcWZdJC5xO2R5ZjtdIi5NLlhjOGUsS3NsRzAqNWxo''@;'; put 'put ''L0h+YGIjUUZSPStgXj5KT3tAOSNiLnRLMG84WTlTTEJMLipUdXBBKCg+YmZxPHp1I0YwdWl+L0c0PnlTZ0tWKEgqfkEqOyxYKHRTeyt7XlYyPF9RJjJLe1NeTGBYfHRVSllufTxreEs6RDtUK1pyPnpEQF5bLlk7WTYmdnJFRC9CcD14fU08Xl5BPn1BfXdFSSYqeyVHZTdzcGo2KzxvPk48aj1R''@;'; put 'put ''c2prPCM1e2E+OXA5ckllKkFUamtSNDZQSEopWTBRIiw9TGlDSWBiZDQsXzNsKjxxRklwMGF1dT9MZihLMT1uYSJFSVlrT2dlYWlBYVRtQ3VDR0xDKkN3TSUyKltYOFshZ3xLRlF1YXVSXVpIRmlrNUJHRjohQEBVaVBqWkRvdCoxeHQ0QFZUeytnfjMxKzAzNUBjaldreGNBYkZUXzRwKlVtSF9Y''@;'; put 'put ''UzI/NXU5Z1l1Ons3KDdPKm1FSGVYemtxP2VmTixoO3Q9SGFkO0drUm1vMj5oMGlnOTNIYzp7JGBuIyh3M0Mue1RoOyFpR3BAVyNufDI/TyFWTSlsejQpWXRTRi9rUXtjbCFPJlk4YEJ2fG05JGgzUkU1OTBNYWw5fH5XanNdUHkzPC5jNGdGaW1Jc0N+XkM/MmE9VixuMFNmJSZabDhoQD9VTFlQ''@;'; put 'put ''XXZJamApSjtqMDRVfFtCZVleSyEjTTxvOkg9aDgkSTkuLCNeIy88YipUMzlMXjZza0w+YEhvIlEwVTk+WTNBQz17WDVgRyFVXTZ+OHZGSWBZUztiTylrM31wT1NyRX0mUV5qZ0VHTllyOFpSNFZ6RjNQTWwoOixxO2FyWXJYOXc6KzdbUzQwczRQc0A+KWh2Q3VNeCFCVjtqeDR7dXJ3JWsqVnpF''@;'; put 'put ''U0NZREZsUVUmUGJGKzoqIXEyJDF8OV1zVyUsP1N2Ln5fK187LEdafjBnYkkwTVlGdTFBOlYvWnErcywjO1dfREVrPnF4fUciMlQpO2MwZHt9OVR8M2lpQnl7a0tUenRYJCZ7P18ieiV0VFkrRHtvJiNiZThVWFIwaH5aVVo2Vil1fHlzYzNLbDBxdD8rSVJnOGhgblsqLz87VTB8WGo4fXRGbXs5''@;'; put 'put ''IiR8Nk1eJFlYNSQrKDU3K2FmVjlBY1pjL3EhYUk5WUBKNS8lXVZWbHs8IWVVd1VmPC84bGBGLzAmL3okSTg+I3dud34rWyNUcDYiV19JPmZPZ0VHdFIxOiQ0W0JJYmE6bXtbdncpUyh9aC41Qz10ZTRYZGJaXT5MTltYLl5sW1klVksqMzp2QyE1e1k2KUk3JnZFNXNtKkAofkg4NEJYSSEqUX5f''@;'; put 'put ''bVlEfjtJKlhkZzRkYkYiKzxgWi9JNCUvLGducn1IaCpvfVM8Yz1GfT45QWJOeG51a09Id3UvL1ZORUxeIm5pPXQwQ2F5TmRZJXkodyMobjVvX2N0Q2FiOTJCfDAyL2pQMn1eVG5Aamt1YVUkbV5QaVs9NWU4IXswT21RISUrVnk0byF4QXE/dkNpTHMhIVFwOFJmS1lHVGF6bmA7Y0JtXmxTblp4''@;'; put 'put ''eGlyS2suJDxMaVJnTFFtOnREajRqJWR1bT5CODYqNC8oPXF4T0wzYCgpSnVbXXhobk90MU1xemBDYmRGaj5Abjt7TDg9QHIiUlJUIkdUN0Y/MlkyUEQlTCZ5bEpCLFlzayRmWE9ReV5JfXE6ZkNIXSszSiEzakQ9dT5mc15ZaCZbbEBVW0Q6NCY1RzZoakksRlVSbzhWaz1vO0JVdn0yel40UWZu''@;'; put 'put ''e3VvIjlRdT4jOH1nY1Y+YnYpLClJMXBxKUE6YVMmTX1NfnZja3gveip7a3JmVTB7Wj5USkB+WlkpclM6R2hUc3xXI2oqLGpzQCtKNFpuVHlgZXs6M0FnTXR+KVBpUEhFRilYImU8ejpLdlp9UTlZIiFMRWZRWlVoLilQPz97O3BjbT5mP21uLEFdVChWWUh4MjlgWEdtWWFGZFshNFI1LlRnN2h1''@;'; put 'put ''c2pUTlNsYT5LLmpmLm8hYn0pZTFdcS9IRFlfNWYhfjlPe11UeXU+Kmc7VEdiQE5SW1lGJk8mRzEhe09BZ1NHIypZZGssfWI1akR1bjFxdjhNSFhoLEc2VSN9JHFHNX1sN2UkRGpQMyZaNiZPSkEqL1pOKEpSLmAmPiQzd3ZRaW1neiV9KUs9NkV9ODEibVJgfiJtT15nPiQ3OSNYJnd9KjNZdzBT''@;'; put 'put ''VWpRe3RmOjxFT087YlhQRV0zaDprUFB5TTQqQiEjIWIjVUQ0QnQlMn49bylnU2FWX25QNXZZRU86ZEU4fHApQihDXiFtaiNQSW8/bGU4UCtkbD52WH15OlRsPlk3TGhsMnA0X2x7T3FDVVBHXUExfUljVj4/TUYkPVQsRHQyYSVsKG9lNmxGKWc+VSlVKmR7L1ZERiYjWG8rezNWTFBvOitqdTNd''@;'; put 'put ''dEBeekheYFU2Pl47IXxtamspPE5ybUsicUJQWl4hZkxFLEZUOUNjNVllfHtCeltKV2kqVihSLGt2M01RTW1fJHFiYXZGcnhrMzFAa0QsSSpHfjVFYGlNK2RwRlRTPFtmPFpINU9QTmpncGxoakEyL2I0YmMqNzwleHRlTFcsYm0oUD86UDRzR0U7V0RIOjVFJnFISnMjWUV0PF9wJkdHNWRWLCMs''@;'; put 'put ''M11MXUxlWVoofjx0dXdXMl9hfndRcEViVmI7Q04yYWs1SlhNVFhbJD0jUEV3eDBPLFpCRXAxLHYlUGg4MHFAS1swRHdbam99Vn5RKDN3aSo0P04vMkhTcT1jNmE0ST1lWCFuTSwweThxIzxWOjwjfV4uazZTWTdzVHJuYm9dMzMob0BKTUdvJXN6UVVUOlkoKUJjQTMoTU9bL2BxU29lTzhsP1Rx''@;'; put 'put ''dFQ8XiJrc0Zoanc7eClANzV9VDgze1ova1ltTClyUihbKWpQQUFiWVNHTjpdOCR5T2spb2EsYzApVylLXjpoN3B0SztWI2ZuU24hQkQ6OUBnU0xuN0YoaiYoUU08WTBLNCR3SjQwKTIsXlNwMUZKRCNFfktnXUZHY2taUFFaLHcoQzlXU2NgLjRFZzY5dTZBIUtoRmJpMXR4bitjWStARjZROEhk''@;'; put 'put ''fCFrM0N5RygwTz92e1UqOD1seiZ8U3dTb34lLmAxXjoiJGY4R2l0ZGY0RWk3V2guNFQ8VjVwKyRbOE93SD9gfkk6N2pdWjgmVj1UX3t0T3BiektJWE85T3R1WTZhMiVJQ35YdHFMMUBdWSpeMFh6XmFBK1dTM0cjTXYjSF8/V3l1US9zeW1FYiFrQzg5S0tbfmFgc3U9bzlzQnA4PGovQnN1NHAu''@;'; put 'put ''Onc0T19rWVRfMClpKURAMTBKTS5nbUdJS206VEleKVsmelIsREVAfTluMHxIPW8pTkk4Yz02ZVo+UlUqQj59OzpSW0BFPWNHNEUmX2B3Pnc+LlFITEA2ZUYzPkwxa2hsSlhLcCNTeTZueC8kKjUvWEYjQFg7e3J8dF8oY3plUy5zfm5AbG47dmFLOCEsbSVFPV46ViE0WUNOaUxEX2ksLkFddDpi''@;'; put 'put ''UEE8Tnh6eEpOY34rUF17Y0ZPMFl7IW09JXJQNWN1OnV+eSNaRy5PLmBgPHZCJW4rO2ZdWzZWXWNbYmxIaTU8MFVNNVNrVzVsPCVuc1hdI1ROWDlBLkFSbVg9bSwwMFNHdyhuLHRJYFo3ZHJpPntePmQveiVPZT5VLE9aMio+dVd9YXoqflBwZGoyU2dwcEN9I1cqa1d2PWd6b1dWYHFxOUkyWFps''@;'; put 'put ''WypWXz9lJWBmL1Z+Kn49Y2NYa2d5Kks0e2VSSm9eZSxydDlze0lzMGtlfFA1KkNlLzdlVHFed0d4ITYrVElNdzthUSg5I1dUM2MqeEUhcjRiRUwrQ1J0Z1A+N25yOXkwWS5oWV5zT2BvLm46UlkiPG95WWAqT0ExIzA5cUxoNUlaLitBVjcjSWk9WnxiTFlTcjBCXS90WmEiYlshRmtIZjw1bz9s''@;'; put 'put ''Mn1hfFpmeG8xe3tQZVE6OjdXKF1NPnNrUm43b2REOnNQQ0N7KVUzMHNlckkpbHhWbiNaaE9QIXt8SlY9I117Q0s4bVtjemdvMWp+K28iSTBEOm5bXnQ4b3c0V2l9XngkdFZIdUxvcF5IJShQcE9gLHV1VVBlYFpKT00xQzlAUCh8fkZMLGlROzRVNjwsVnBnfGUjSyhVRWZAXmE3PnVzdWchTUtP''@;'; put 'put ''LmVUdHJOW0dLYyN3UDJadSgvJTNQJnZnUVo4c3dNbS5vfSojLmV4ayIsb1hwKmslS3ZuKEhtJEtxNy43JH5VRTFbeClPQj5lfiQqd15AZXdjL28mY2xnZG5iOFBkL1EiL1p7L0NGMlpsITlHPzJiOmRVdCVvK3ZFVWtUPVN7UWlURzIvYWt8T3tAPDpoLHpRKnd4YThDVmFtRytaM1JMcUpgfnNA''@;'; put 'put ''bCtjbl8udWckJHVKVFR0aFd5LkE7Tn5GMU52IzZlWkw+fXFuIkg/R2ghdnttRWF+Ti5rLCRXcG08bGwzcVUvQyMrWFhkaSRsY1cmU29WRnl7X2Qxe01IIUBtclpgKHlFRGRCX09IT1dlLm5pTDpkI3NEYFB4bTouYWlSVFpzX2NVZ2FpX3dfPWBQIXI/Yz5qdW5kanQvMzVEaF5IcCtrVFJhOlQj''@;'; put 'put ''TixwLnJNK1VKSnlLO1pVeFgycEx1dVRnSnNMeFh4byNIbEpFb21JPjBDaG9eSWNtaGlGaDhUJjAicHtpJEx8dzhAflcqUG8ve2Y/JDBUUDR9K0JdPFE3eDpfX3U6T2phSTVuQywubSg6NHtBZyVxRyh4K2JERCxwdXJseEUhP2ZKM31jUXA7NWhXZVVYKXp1b3VxZlZsMFgoX0J0cEZ2JSNmSnJy''@;'; put 'put ''cUpRRmsqPGZmUUxFYTRrdzBgYjR9PXFZaWhdVCtsS3w3bzEva144TmN9Nk1CKzJVInlBdmVkPS8wcS5wU1c8Iy85Kj8ieURjWCJBcVcvWX1HJjBLR2klczQ1cUxMcipudCVMWk08MURIZypeclhZRnxNaTVLa2VjTz1uXSQ2ckw6XTZeTihaQkh3YiQvVFlXOzlCayEjV0lvITJxckRaJiFgfUkh''@;'; put 'put ''ZlBKRlcoNzh3RzZ4WSsxYkVdcGkva0MmY3csNyhzLyRzcyVkdXk8czdFPm1TRGRzS0p5bUF0MEFxLjIlMTkidm1YRFFnT2k9Z1gmNEo+U3FybHIzLih4OkJYey5ofiMsPFQoOEohSjd6UngqMGZjZWVpMnRvLmhFTVcmUCVJKTxZNzJWbnZAcigoZFFDXU8pdVQ0S2pkY0Y7THc1ZWNTU2hSTU9R''@;'; put 'put ''VCJXbEQ3Y2dlTXlMUjhlZlBaOjopZH5vVW1+TTt0Ni4/ZEcyWXtXWzw+Qyg1YU5LISFlU3tvN3k2bzhnc2FqIWUsWEleM2NMZCJ6YElrcGc0Kk52dSxwPl1acUpGKmN4MFEoWzc6V1hqJXI8QHw2SiNSX2NpIVMsd1RnXTk6JTdeKElobF1YUzhUdVIhKX5wJjchRUdnZGJMInE1UyIzIiM2YFFN''@;'; put 'put ''UFViLj5OeEAlPDRrRXFKX3Q+WUxNbHF2JkR2ZGFPJHRALFFTOiRpekZGeFVzLFYsNHFfVXh6IXwrRyMrdEVsTE08SGBRVXB+RVYxNGVONmhmNVtoWF94KF0qRTQrWUVaOCpsbDcmaU1ZXTVgTWlCYWxvUXduUzVDLHhfRnZvWzE4bWxKcHssKGBxdTl8NVVLZG8+Nkh5RUV6SkB1fEshaT9mYmBH''@;'; put 'put ''WU8+NkxXejlxaFc9NCIuZnFmSEVPZH56dC8vWGc7UEAqZ3xTRkYva0oiSHYpXkl9ZzY0NnJ+Z0tMK1hYRilXSXdOUWl9SFVPOkNPTWVlbEFrXkpXdXtpZ0N7el1fe156I21iOXBARi5ASWMoKE9aNDpbO29ASTxqXTl5LilDXSkhZEhfYmgsT3tkZD5eWVd3cl1UXy9FblF8R09bOTpSMzIveG5T''@;'; put 'put ''dWNOent0KyplQmQrXippeVp4Mk43SzIqXjQzO30vb3ElIltDQn1IXnt7cFBOWEcmRkR7Yz9oRG5YWHNfJlV4eCUjYW51eUJhWW41IU1BU35nVmohJkQ2Q2pYKn5qPWI4dUZQRVBKeihkaV19UjhxdipsP1FUIiVHalg/Um5RPEdDJFBpV0hsMmhGLH5SYjpMaG03RzJlRmhTL1pEPnV3Zjx0a006''@;'; put 'put ''NC4mcEZuRG8laiMkTHkrVUY/fVlDfFM1OCg5dlYxTXxFX3hwSyZ5Tldudl19V0tkWGBNfWdyRG58WVJNYiJVM0NpZ31MRihBc25FaDgqejdgMyZzZUp3K21wW3ZSTiQzRHVGWF5bI3NpbjZOeT0xIzcxNXNpPCFqSkJDW1Z6cVdQOGBsaSpFaTJAVjkqI0p7XTdLJWV1SzU5YjkpJGR0LHcmd31+''@;'; put 'put ''fClnP3ZlZXdFUiUvO0duUT03IittPX57VEhVbSpZXXMjK2E0YmUleUlQUCxxIXJ8dSY/bChhOlYxajghJlc7QytfX21sXWlAX2N1YVclTTszWUs7PjFofFBVZGgxWnxPRVdoWVYzIVczZWtOWl59b2RbRnZWMnQ5ZVs5flNQRlVKMzFSfWtBPDQ9dm1HLHo5Iy9WUiZVImEiJnFpPktUInUxJnRF''@;'; put 'put ''VXgmeW4wUjBpW3dzODxINkIwP3RUfXJlZn53VWZhLz9DbyNoeEx2VWlAcU5iV3xoPT1GPF0rQzMuUWdCdT1QfVMzUkg8WCxIdCVFNCNtKyJ5SGl7MVc/fUNMSio/ai9sdihOK3RSUnpOSlZLJUFOZVIqeFdwaXduZFE5PWlNRWxjMXZ2SGIya05jdXhLQXwsWlI9Xj9NIl5rPUJSW3JfKklSRClX''@;'; put 'put ''RztucllHVTd1QGk1a19LdT9XQjEoR0dmOlFdeG80cnxKN3BFbWd8PiI0bEx8VDQvWSlgdUVmKzdxdD5rfTh+a2Aoe3dqOzR+WXo/JCIkUjU8Wmp7aUU1Wl1HMmB2dDoyXm5STHw8WVlzYipCWkpxbCswaCpzd1g6fGhKNjs6JSo9c2hJI31YekoxamlOWTxWd0U/ZGlUMk8kYH1fRV1dP2J9REdU''@;'; put 'put ''aGU9SF8oS31rdXI9cDxBVCtCeTtGKDNfVz0iJFJ9JCFXdDlUfHozZkBzeWFzP3F+WFpFWUwldCRPLkV7TDAufVlZMCQlc30kdSRJanQoU2NaPVYrWjs1SDsuS307bGdjaygrUnxHNCEyNUJaP1RaOGleUjUxS3o2NiooKVJbfTFhfU9zbllLVmp5Q3xvejhIPyVgdXlHPk8mNG1IVUc8fTUyPXxj''@;'; put 'put ''THREX1daUUs8M2N6SGBQTWY2RVpyNCFdSkRWailVU21nUyZbUj5FKDFrMUpEZ11fI251YUcyPD5ROl4oRXl5aDQ4TXEjaSM3U2AmMVdgI08xKTNaWXE6ZFRFQF1DOEpYPWJFL1AiS0MkJlVuazRLNnc4aHF7fW4hQ2U6YmJNWXptSlJ7XT1kXWJjLm0+bXszK187QU4ofF8+Mk90QVk4UmN8Mlpf''@;'; put 'put ''MFdmbD1JRzldWSY6S15JZkd0RXRKUW5BRXdRezU+TWlEa1BgclBgaExMd1A4UEIzcm5xfGZuRGVZKTR4Z0RlazEoREc7KitoPXQ0R00qby5Sdz98KFM7N1o2dUZ3eS4sbEN8N2dXXmsqQUc7SmI9cSVHXSh7bmghR0UzNiVXbGNFNEtzYkRATDhBZnFFJDUzYi5XdmhPSW9bPURDPko6VksrWHVL''@;'; put 'put ''UHdqW2RXXmQ8NFErfHArR3doXjBYZ3BnLmhhZkNRVV0yQ2R5XTExWzJqTiRnPD9VRjVJMzxbU1ZSQyk2bGQiaj4vZl1TIVJGPyx6bkJXTTo2PkBoRGgySS9wN3Jmd29dfHoxQmxvP31DLn55IjRzTSMqK1ZzKzxffiIrUj1+JEExK3Q/c2BwNlRRPjlAUUhGbzZjRW1lfERrNz4zLHMmcX5BVEZy''@;'; put 'put ''Rkp1Wyoub1B7OlNOZjpTfkphT0w1enlwQThrXyN+fVpmaCF2SEddZ3xDfTB9NmhTWmY0YyttX2hqPSRYXV91e1hUVDlzVj53Uk9AbVReRCZSeXAkaVUvJXVxZil9JC43Yy9UdCl4SXFaO2VRY1Eke1EpVTQoUjt6Nm9UNGhKJUZUWWgkbVdmUihlTilGLmZ0ci5DR0BCbjsuUEs8M2RNQD0/W3dj''@;'; put 'put ''fUteaXB3JmQpN0c4XWdeNmBUYlhMMTkhcVdfRiZZXXhWeCR8fU9NZjZxKSsod306RXFQMy9iL2wrQE8ldkkvdXYxQnZWQDQsb0g3eH1WOEI4O0w+cX02Jj46bzJgTzYhPHkjb2pfZFBoLERoXWBUV2RELHJ6YTV+elQ5Yjp8P248YUN3YVskaUE1W3w7T1cwKDhoQ1pZfDNdWUFjOitOc3tAXUcp''@;'; put 'put ''MD1ERCJ6dFg1MC58ODUpdlgoaGo1MihhciJBOnBtYHxebiFkKlk6VHY/eDtre0NuaUouJHM6PVJaWnopNEIqKlMsUysvUGJyXjBZKUUxNjNvSj5uMFAicjhUdlM7NVJReSFMOTdZNCpnd0NYNElpQmZzX0RsVjBHcV0+MU1RJTNfXyh6aSJRPiFZO1hFcCxATjEpfmw/LC4lUTh+P1ZKVytubncq''@;'; put 'put ''YSwuYl5AflBCYiYhPE5kdzciIk9vXipKfHhoSFRjRkxbR2FhQzo0JnkxVnR2flZIJUJXQn4lLGJUWlh+TDRAQF55fHYmeXp5IixBWyNBMTZCNFRUOWdyNSFzNXxxUkRGMVE1K2lhaDRTX2RjMl8xaiErQFZpVFcsMnxSS3VHbkpbe15PODsrJmlXYys3TU4lImIzfGYsLiNCLlVCRFRlYzVOZVhA''@;'; put 'put ''VENCW05zcF85WzxNYWZ4NmMoKj56eDpQd0FkRCpAOUljIm5ZaCMjMjkvPF5bKzhQfjB3LzI5cHl4PWE6XlV8cj5USVArX1I8dSg2QFdkeCZ1bEBVP2RYbm4iK3hbSjJ5STUkbCU5TGdtMkdXQitIbTd1SGNDRHA2TFQyaFluKSwzPDohVi99QXIoSjwwISk8QllYTVtNTUcxZX5DVTdOPmhFZHgs''@;'; put 'put ''WSw6dl9RTTBrN2Q8XUFwZHFqeTd0TjRVUSlKZ0dwaFZ3OEklT1h5XyY4VGUlPTo8LGZVe089fnl1Un5YMG9KJHV8PF5rezYhcSoua2ZNYXI5eVh0Vk4iRXt2bEojWyl5e3RlVX0hVntLZGJoayt1NlV4b3VhQUk4X0U9OXwqSm8zNkcjMFBZUDExM0heZVlYMEVFN1NLJG1bNWhpT2ZLUVc0PyRp''@;'; put 'put ''TiI5OlpwOjRHVjIsVUNYPmQxdSEybE48MGFZQD1wRz5wVCx1Q2ose05PTXZGNytSNTRQbipWUzBGcH1jKUhbV0l3NnY8by5VJUQzQGpHOEs4cVMiLD48NTBINjxWPU8lSXI9ZEdVZUx9K0UkK21ISUxuPmk5I1JqK3hoNHpkfUV3e3BAb3t+QFViNVpXYUZ0fUJCWm5iRSYpJk9QYk5PLmVLe1NK''@;'; put 'put ''Izc5IX06NERqQG40e3REUlR4YT96Nk94ekRaVXR5el09UFh8aUJNbipnbiRuJm8+bnYvXUFMKFs5Y0tiMFdTbXJBdj5UJGFeeVQhJEE+W2k3emssTCtASHJtP0ZuJF02KVV7UkouNkcwR0BIX2RLIzt4XzwwRHRZKD48O3k0KH0velY2LGo8SDtIX1R+ZX19SFl4OSF2bSM1RjpFY3A8JE1hWDUk''@;'; put 'put ''IWR9OFIhSjlTVm59U0RPd0lYbW1TcGZYZyVHKX0/TFdZU3BOaHo8RTN+d0hzd3t5LyklRiFDKlJjKGlOPWBONjdbclV1UW03aj1ufVAzXUAzcUZJZiNIUHVBTCFtNChEWyNvOF5II2YxMFA9RHJ8Nz8lOEV1OSF2aXNtTSRyJSJ6UDJFW2I5Zjs7KXpuLj5USSlkRWJJQThAZSRtSDxrRkdeVGxs''@;'; put 'put ''VEcxPWFNXXVlOC5sQGRYP1E3MjdvYWwjQjI8IlBdXjJGIixKZyVpPWd7bS9pbytQWTRsQ1VJY0QpPyk9WU1OVCNob2RZfl5EZilWSFs7U2RnfXtJTT42VkVaQnZRXX1XXntmQixOM3QvI3d4LzdlVSxkXShgT2R1OyRhNn0vK0I4MXksNylvXXFZbXldPChNS0g/KUhea0xCfTJ3QzhBalQ7NW9V''@;'; put 'put ''WyNeYGIia2QrKmU4RlZQe1lCP3crVnpvYG48UF9wfjY7dVhWZ05eSntndFJJLEQuWFM6a2FDVl8xInVNZzYzKXNkTmxzOzlVNT19VFUpU3Q4SE0qWyw8PnpRSWpvPnZOdEQkRFkjWElndjsvLiRaNXk5KlF7YmN6S1pYaEFyKzBwQy4xS25AY3k7NHFkYUUlWzRJdXo6fGt7RFozXX5RYns2S2hS''@;'; put 'put ''cldJLypScktXVlhacUMjLCx0RG54UyFfZzd+RyNKazRiKnw5Zmxxb1R3T0BzL0RgXmY8Rjs7SzFReyF5QU88IzFYZVgrO2lmYDFLZ0s5Mi9yZSsvKlhBSngifXFsLiR6KzV0VUh1c2I+a3t1VW07ImNbWnsxcmxUKFBNX3RiXiZddSRObUBPeEs6VHZoe3A0aT1Gb0UwcDQ5ZnRpSGd+cCp6ek1+''@;'; put 'put ''bVJlYkhBdU9uWDNoI3ZycWM3fXdiYUMoUUt5azg7bjAyeyp4PWs2RyZHR0wvST1tNigoMU1jfWNGWipDaEM3IiVLc2tRREZhfkttLHhKXUhQaDY3Wk1jPWVPc2FQcWgmQkhCeDs5eDpqfiJ0JT8vdDdBPXdCcz5BXTIjTDZdPW9qTERzW2IwVlF3TXdqKUx1PEl5cTswRSphW3wzJGspUiFeMz13''@;'; put 'put ''Q09EJXg7MkNteixhRn1FfV10OmwweUM2djYiQXdFWT8qOCU5YCQ2V1Q/JiRRN0hMSCFuQmwvYzpBVDVxNSYwLHVyentlSDVBIW9HQjpWJX5zbnhWSjlUJU41XTcsUi5ucyZoUnZaRU1FSEtHOV1ZKmJrWHQ3ImpUeUtVbkh4K2NfKzpoaSE2R0ZHWmFOZ0ptPnosJkt8YTA/WjtCM3RmYkkwKl80''@;'; put 'put ''Y100flZ0WUFKZTs/WE5XQzU3RGxzIjB9XUQ8JDMuVjlZSDp+cixSKG1+YTlufkxwODxVN0BJMklQQGFDL147MzQzMGVZYCEuVjdxc084ZHNIaDIqXTZ6dHZFNG1ZSnNAZnA4V01mJkNQMHtjemxoZFttWSk2QG0iNm1ydj5fMmV3Ljd1P3Zoe3ReIzpjbzBjfSxNITVJeCFhbDNAKzVaKHd4dWI5''@;'; put 'put ''VWUqa2VGMn4mUzErYlovVEtaKDM0ZmBTZkxyfj9iTDF9XXRnU3xhT2VzKmBrSWYrZnxzdzs6NVJaNUpCRkReQnNEL2hjeyYwVmRHNyFycXIpSlltX1h3Ryw3P0MjXl1lT0c3IUMzRFApLlhZM2VsY29bfjVCM2UhclldPUImYmdST3txen1TSHMlfW0ue2ZoYE9+NDt8X0dTJmt+aiEiUkp5Ymlx''@;'; put 'put ''aDd1YV1CV19RaHYmfTg/VlpBanFoaml7azomfW83c29GMXNKbUhSI2JqTChrNE87a30rLlh9eSVPO2spT3lyXXlNYClreU5TPDMxZExTRVF8ejg4dl54K08wfVNfSkJyYlRSPG5PXTVQQXpeQjB+VSJJJk51QEk/TmtHS006KHRGUnFrR2lfTipMeHtrWXNlcj9OQlQ7OjtNe1IjMz55WzVwSkx8''@;'; put 'put ''ISRuQDBxfEdJNyJWYGMiOFJWd0xQOSEzYkskNXc2MHUjezI7OiUqSTI6S01yUF17SHc1cX5uKFZDL05iVDpke20/Q2k4fnQ/KFJGZFU3VC9sV3lXJVFYRlhsIkx2PW9Eaz0lLHsyRClgLl5uJT5YKjs5eGFVQzV5fjFJJmh1SSZBamJpYmJ8dyhCK1F2c1lbIWVKWVdYVV1XcD9NQkRmV3xKMkgo''@;'; put 'put ''RFA9YHAuJlspZGVgcnVFRiVXJXYoQnt1JkdYQ3VhWTZnSXs7dykuezEwcTt7WCFuVGc5cmVeXiVmNC9zJGdNbVspPlc8VlN6cmdGUD1sMjdKZiomS2hGIUMoYH4zdTZNc3V3MnZCSGMoQk89WCpvY11PfEEsVnl7NGgpW2UldXIpR3UrcF87N3I4TyIlant0cHImTTN1KkZ7VS9UP2N7bEU/aUds''@;'; put 'put ''QEl+JHQ9WH4sJEI+VjR4X0RXUk9icEUrZy4sb2V3TF8/OGVwW2E1Sm9VaVlNd2wxc3BQS1tkQDhvJilmYDZMXikqMik8JmdJPWM9fCslRlJUI2JzKyZ3bnl4Y0pmSmhTdllvOEI3QTJzNGJqZ01BSiheQGx0KzxZX2NtLi9veWhERHtBbGZoW29FZFl1QixjVV00ci99P34rOCV0REVQOSlULiYi''@;'; put 'put ''dip2VF9qT3hUakV7LkpBaT8heVZfKG18dzh+ZUBoW04lfkJwX2k1KDlxXVojdG8oKno1ZyheMDtZc2dFTToxXkkzKz1sbDhofnVhPyRsZTJGJlckT3cpY3NXKjRpemM7YUNOdGZMSmpxKUMyTHB2THJqLjglP2U/N2UldWZbeGJ6RmVdTH1uLH5SLkR2LDZZXSYxZXdJdm8rbjp7WkJ8U0A6UWVN''@;'; put 'put ''fnJvPm8hOU9uVV1edHApVWozPy5vWyFwMCJSem14U09INm5WJUt+VSM9I15zfUFjfkkwLi8xfTM3b3l9aSQyO2FAZV9YaVNAbWMvNnVHczN1Mzg0a1Z+MjEvJFUsfH51aSQ0WGZ9OzxLJThJKHAwXT40aTYvNVFfPzFxRnY+aUdnfFhMYkxEYXt9YktbcCo2SiIpc0BeTm9URz10ZVo3PzFOUmll''@;'; put 'put ''R2pqdlJkTHR3UE9AQUdIRVZ1Yn5GVC9hKylJJmAjNDtifT5GJG0rZGRSUFQ0bWtCK2ZVMUI+MSFvSU0wYkJHMzJrc1EoR3g/MW5be2hxKk1WOVglaz46cHl4N0IjbnNFdVNuSVtDeUF5XmV5JDo9MGQkVSVSdWpXd0wuTGI+MWVYMiMqKUlOLyZgWj1YLmUhW10kQ2suW3Y9MC83K2tIMC93fC5a''@;'; put 'put ''Om9acXsrZy9NRGpOc0t2P0Q6aDFVV0syL3Y9al4pRnhDU1R0VkVhOGBwXXVCZy9VclR+JnprRGJrS3hNSmw5WClOfEA4WWcya2BpeCFTLH00S1lPbChDRjc+L3xWYUZ7KUdZcUhJYkZCQ0FgSX0rbG9NTFJjfSpuKmtPd2Rzd0p6VTB2TTR3WSR8ODpueDEzYilEOG85czFpRGVkI2s5UkRUfmAu''@;'; put 'put ''KnJjZE9ZYWpHJVlianljK3kwUFY7Si9wWyRwMllWMyZjQnFPVFEzYD1YXS9mZzNTRXZSWFBtMXxxdDNbRERwOHBrcEJbYHtITjsqfDZiNnMzcmNrOHdMN2lkZ2MiSEpYezU6SjZjZCwkaHt8XVM8dmF5YEBKQmhNdE9QPyJfPndGWHwidDVsTiRANjw4cGVmX29bfW5KPXFyIi9vWyxDSDR7Xmp5''@;'; put 'put ''MzUhOSlWYyheKk0zak1aNl08SnxzcjZ9N2ZtZTVbTDp7fXFZUH1OO2p4UCRmaywrZF89Q29lND57Xj4jM2wqNkBdQFU+O1s8PmdvOVcjRTl0OyNgTntRTHpMcCQ1aHteS05gQnclPCV3NSNwWyxMPUAzTTt+bjslajpAM3h+YHFqeG1Sckw3b2Z8JTs0OjQqKVsxL1Y1MURoVW9CKS49OWJAZF8+''@;'; put 'put ''cn49LkNYTyo4Qkx8NWBiPTNgWTtsRU9RbzFOZ2x8fFVGRjhzK18mXX0qOyouZl8xLkFxLyUscz8uT3xeOjova3QwfVQ8fjxCYHNLSSY6bFhrRD1BeWhDZHM8KF8+P0xOTEJvYU9xOFIoNnY5dip2Q3d4REowTTA0d3hEYHd4RDM6fFE7N3U4VlJRdl4rSVNLSCVePjlqWF5lKmNGS0NKcUlTaEB9''@;'; put 'put ''M0ZxUkNZeUV+ezo3M0lhVkNUR0tHKHVFIi55WFImcCgkd3FYeFRlcnt7eHl9UU1ZPFtWPnslcyM7dmhVPCUpVmNbTWc7ZE97dj5KN0dXKmgvVnRNdzgvRkc6bDg5Yj1xcztncltmbV48M29daFVgZTh4PSl4XUFxTVp3Nk5lMm01fGJEWy93a3xxYHF3fi8mWkRPfklHQzxbN2s9S25XIU1sSGxQ''@;'; put 'put ''PXU3PG5MOSY3JHB2I2JobTtfTkx4fE1UcG1lIWFoT0FWLiNLOH5xUEA6dz5TYTZjVj5lNn5JYVpWKjdkUTx6SDxxR2BvK15bXX4jPXB7dyhfSHMvVmdmT35iV2EyRUdTVysmRWJ9ITM6Rj9Xc059UVVtR2MpNjl0O0gvdD09XnI8ZiRBYjh0OExmSkZ2SXxFOTVdZT06RlNhclRodlNycG13SGIq''@;'; put 'put ''QF5HaEFed3siPWIvRT5BSzg/e3shPW1abV49aHJfeVhaUzo9YE9EcTVvQ11iWUp2Nj1hSWx1L3lEQFlHeWBOaWtXX1BAKzlMYGVaZEZiNlAweTw1MitSYGBieXBvcXNGJk9yWUhAc3lTa1k+IU9hLFFme0xSfUNlekY8LCxmTmFEPiI/Py5ZeSl7dV5LeFkhLzlpaWorQ2V7cjI/UXtaT2dXPWpd''@;'; put 'put ''I1ZUW1s+ZmE7QGdrV0VLKFM6cFFZM1owWFUyUD46cD5LMkoremoobnxsYilJPyVbWFg+Pzc4Qyo/Zmp1Z0NXK154RmJNSEcrOXJLYWZkSWRQYlZTQDpjZmZ6VEEvIn0+Nm56fkhGa0R9IVpMcy4yL3dYQCFIWU5SOytiLldDSDcheD5EVW5WfilnJW1oJm0sSnxicT8/dlp9NWZYIUV1OkN9NCtv''@;'; put 'put ''YXduMSRhNS9fX2QhOn14aSxQZ2U4a0p8ZDcxZ24kdEU0RXkoQlFjPyNyZkA5Y1VNKkRyOGY+XilSPENZc3pYYXpWVj5ARmx3VSpEMGhUUHt1cVVZKkliVVF2UEs3T0pwcDMlNyMoMHFaWEB3U19bbHZhQiEqIyo/Z2p2PUNXKm1fViteeVtscHp5U0hMSyxRUktNUlJLc1JSS3hTbDdJTnpvTH03''@;'; put 'put ''PT1yPF5fOyUlZ19gJk9JcmgkSik5YjYwSHBaTkRUPTNSZllbTEp5JFo3PU8oNzh0QDBNSks8Nk5TdCpgNjArY2Z3cllFe31EMiJzVjozTzYsWT90cmhMOHUvcEtwbCF0S1EqMkU6WnhRcFluX05mZj9ZPjAuZXheRiFiZyxGQFdWMjBBYCUqS3x8KjwxRGc9MmBxTH19Kk8/XnE+ZiE1ZkYzKyRt''@;'; put 'put ''NkRCIVtEMyRqK14kXXxQaGdJdmlyWE9LczttLEEqRkA5cyVIZHhBZUdFY2R5PTZ0bWVhOWksTm9GJHh5eERtRHZoanNtKkNgIzdYW0lAP2YwYGI5S0w1O1IuJj9uPCFKfmx3b2JFaU50UlhHKGVpfH0pL3NEPzIhK20kO3x2cXh+N0VOfjJ0VjhYLyVsZUM4SiEycXxgPXNmVDteeyI2ZkFhbTA5''@;'; put 'put ''JiwqMUBefjhGVX43aDw9ZVtgJkM7ejAxS31Vfl9BLyg9K3h8fTQ0cndHL0NpK2k0U011WUhjMSNtcjFzeF1oK2lUUl18M3dwLlArdWgoJDlrVltWNWJ5KDkuNkMhM184eHx9L1F4VCpIa0xvdCZJZSptaVBCRispTipnXXlTLl9mK2BAdnpJXUlJfCFjXmczOn0qZzw1JCFSfjlNdVFVaEw/TX53''@;'; put 'put ''a31AS3N9eHB9KE57a198aFFAWUN9TGJyRmVCW29CZyg/cW8mTW4sSk5ARDVReCQjLDRhPkwpYH1LTn1VeHRHfnhJcXFKRW9EUlgjUW4maCY7amF3SitWUUMsPiZBPlZfP2p8UTpxPX1sQEovcmMpYkEwbXd+e1t9VHJJVj1vb31sJSo2Qj4sb2w7N2lVYkdOSTplVS5+cj5rdFZbO2pCM3szfTNH''@;'; put 'put ''Lyx5ZzRBaiU+ZzFAT30mNC5pMWRWQjwxfU9IRj5MZn0vPTEsS05NRG1iW2srdVJHT1BxaVI1O2ZYWGZibnpLZWNwPUtkVW5FaF9KeU13aF9VeDMzQmhYXnhvVCl+SE54RllUXzU7bXJrKUQ6cEMsSH5yYkN9O0xUYkVUbHBiKG9nbVQqe1B1PUozejZxN2NILGZvYTN+fXgzPU1LSWZUeDxiU0pm''@;'; put 'put ''QDpeZilkSHVeLjo9TFcuTitGcXd2aV1eQytpSUslcyRgSnwxLmdKVTNOcVlTIUMrbmJ1ZXBnWyREenU1YUk6bFNRWWpHUm4sVTE0T3MzTFFEPzpbQmtdXktDYEN6V2tAUTYxSHQrQTNhN2Mwdz9YKiJYUDNwbG5oTXRaRzReOCJBdWtmfUVWbUUqX2JoSV9Malk/bEl9OilqelJPNjhNPCZWY30u''@;'; put 'put ''UHo5S3k5fSgsTkM8PkZKRiNnRlBvNXVQe3VCRz9QM34+KFRdWTlYfWF7cm9pL2EkYUF5a31MR31uSCxxXk1hW1VkSD82Qmx4N2FPTWIiTiRbeXtKeHJnK2l+ODNDIVBVeSlPfXtzdGpAWl4iSFJ3bC5pJDN2Im1vRXp0ZkZUeXMmXyU0aXwlJDp0RGhrXSVPM08jMiNXJE42KEw9NDNgVzUpJUxv''@;'; put 'put ''bzxLLHd3cWBlYW1bPyMxTG5WVj50TmVZSHhAbjJ4WixHQVc2cTBKckY6K0o5RSksLzd+SXNRZlFjc0cia0tXN3BNWTQ7VytmenRQTHddLl1BM3hqVyElTCxvWEMsTl5+QWN0T25IZWVMfDBEWDBbNTFGYHU8d2UzfVVtZEolMEI8XT5XLFImNmNnKUQ4SDtreng+VXt3JHw8QWxmJEVbZyM6XUMj''@;'; put 'put ''JT0qUWhEQmJJL2QiP3A1RGx1PV41VjtWQm43enEkYUxaNXY1L0p9YSleSDN8cjsvRCtIKjVRbE1xZTd5X1RDQVlpJWZiMVlWX0VlTGVGOGNvPipDbzBBJj9lRGBhQWwjbT5iNXwjdCNnLiZ6cj9ySF1ZaUZCYkJ3QihoOiY2KG9TfEorP1o7ailNUHZiPnA6T21LdXFWaGtSY0pQKUhXbjpRd2ZZ''@;'; put 'put ''I25ZKCV2T3pJcCVTdGBAc01yRT9uUnNKVlp6VGo/KXs5SiV+XW9jUjpmLlp+ZWZGPElDT01MN30lJEYlPzUoeVgqJCxbTV1hSWk+b3UyLGpZK19hZjJiYT1YX09FXlksSnNNfkoqbSpgYVAxezJUKU09W2YofTouQUMsbylLWzRdfUNoQkYkLDh+RUsuT14pMWEvLzV3aj1NS2t9N1pQQDt+WXI5''@;'; put 'put ''bHBFSmleJHZ8NlEwfTxNUVV3TDFEP05uMTR4KVQhYkhxNztxKm5WOHR8MkorIUg1XTxWPF14KmA+NGlzSG1OdGNVUSNeKi9mUzhMW2A9M2FhcHpdfG5yRC4wdyVZfE84M2Z0O241O1g5Tl0lUWFDWlkmWXVNdVt3V1hVQl81Zl16MUtOXjc7Q0gvJCghQmpUNDdKKFZzTy9eayRlbnJAdnB9YHdw''@;'; put 'put ''eDNxWUZ6c2NXOS5BOUdGPV4pRmh6NmNnamVCbyVfQHdwdixWY0M0LntGTmEkT04zVVhgRz1gWjMrdE9tLHV0Yzhyb3M1SWZHZDNHZis3aytDYyk9MDNEWDhycH4rW3lfVERXdyJZL0YhdG5MWXwvZFFEQFd2Kmc7PCw6bU86W1dsPDRdPVpialQ0aFhjQnpbfVYmPTAzXjEveUUuQCx+OndXVWd4''@;'; put 'put ''TVBTajA4WCttQk9aQn5nTWwiXWN3U0orc3Q3MldLWS81aWRdUjNecU56VEJjUSpEOG8xKDd+eFJAQG9acXJCK19PaUVFSmliTDtWdz4pdFoyWCtNb3JJYWFSUDJiS2lMRFVYb2RbM25PZ3QqSWo4clFXKSxeT2J+cEt4d0dXfnc8dDYpQi5ZWFFXVmR9VyNHRHF6Jmh1Q1hVRV9lbTA8em0rbGcz''@;'; put 'put ''Sk1nSylYJFUyeHM4L2ZpVCxeUiomeHlMSGtuSkwpXmN4YCZsQUA1PXVKQVV+M3NDZS92cT1uIlVzaWhDcl43a2BEX15PL3E9TEtxRWxgfW9hbz1SKSlHVV9JYiltK2ssbUcqOEJMXSE7fW5QRyk3ISFXVEBCSFFDYzd0UC4hO0w5dDdMXnMpZnkyM09aNWgraF9CenQ4QTRoTmJyLE9tdTIvaDBo''@;'; put 'put ''eHk9RzQ6aWBeKXx7YXBlSk5sV1g5UUpgW1lpem9YVkZybV9RKk58KW5KNTpgdnV0KFI/dn1HXSpYOGdnSU9qYkprWllUfUt2PXN7aHpSM1lDJmBFVE9SSCUhVCZzY0ZDRFVxbn10dzNybn1rLD96RExQTkJXOjFZUyY6empSQ0ppNzg3Y147VFZORi9oYjlMPE4hQlI4OzZQLHZEUWhOUEJQLG98''@;'; put 'put ''Xlp8SndKNzN0em4uey9jOXQme3trSyxEaU44LixuRGFWUUtPXzNSP1hqMEhoTTt2LzV0OT04ZXR5XzVSQmtNQlJYTWxTI0BwK141OkgqRHNsInhLWmFeS1AmTElFd2R1YDJ8bDlUNSU/TWl8WXtpenEmYU5fXkFYO3dUdENQPyVmWzcrYSp0P1clU3VHRCZbcE9wNjMmWTxMcytdRkxIXnNxalc9''@;'; put 'put ''KVVBNi5iLlRzNmc5L3RSeVErbXxoaWVqOnNJfWhXYSZCNHh+T2tlR1pAIUBfc0leZmBaZzpPYV85UXtONCQkaSkoRTU7MUUhZXArQzc9Y0tfM3U0LFd9alMwIylAcWhjWkhRZHcoYXh6dGAjSis0MngpMUZkfSQuKFsqOVAwSGghNE8uUmJlN2pzNmIsSlIwSGghNE8uUmJlN2pzNmIseStyOzNE''@;'; put 'put ''RispTkAxS01jMV0xTDFKeWRlaHRAMTRPY2BDYCxEIXllMDI2QEBEQDBISUFgS3ZwdGA0dG9gOEE/QFB1bWB8bipHcXI9aV5RSmxAOyIscmd1b216ZX1TInhVSl8vKkN2flhefW14Q0ZTekhQe1VCWHVNYlpvT3pVPERlQEpVQnVoL19SJDxPMCVgZyFxTzhoXTVGTk9CUlhsaSpfXkw7UmU9ZEom''@;'; put 'put ''TS82biMvMStvOWBiOV1eSEA1P1IqZm9GfD9eVSZ2MGc6YGZkbU5hfjg6OmYzbDdeQEAvV0hdN256YUVRekF2RCFheEkkV34oYj8mSUdCTWtCV354flA1N3A5d0pEZlcsXjZIYEdlfC96JXJaVTZYdC8vRDRGWXA2eUpPSXU1fkVHZU1ffm5OTDddfGs/PXxXdT9wUzBqRGAiPkhMdndDWlZlO2Q0''@;'; put 'put ''fDh7ZyZmMSYpWHM6eGo7NiVdXmcvYyJEVXtyV31aOnR6XTZyeD1xdHpfTmU9WDt+KUR+dDV+ZzFpTl17eXZleEYlL3VHekkvL3oyK0RPTDEodCxeVkcjSVFNUDRdTUR6Jlp5aT0wYkRZTXFEbHRdVFNkfjVhdzMoWlJNWWNXUkhsKTthPEVxfTUiJnlwV2owNVIwYTRHbmlzbiZgSmMhRzFiK3VS''@;'; put 'put ''PythLD88aC5HVW15Tl1oL1R8JnlEYFcqM3JQKWZhST92bXRrYXF9LnolPSNtKEJUTUNMUWFpKTs4cjwrSCwmaXl9RV9KU1UwKFp8S1ZjWSFQM09SKVB7TVc8Qi5BOkxtZzcqYG9+emxQJHI5NHosIipPUF9XWG9CYD5DPmNLTFhiUERgTl9KK3JITF5CM09IeigzdXFhdV9fOVBXQSZbWy5ffisp''@;'; put 'put ''X3YhYyJ6fXg0ZEV3VGNkTVdHLltEeTtVK0dYYmhdV3hALl9+VkxlUSx2ZCVHTDhHNjh0Yl9Qal9mc0FSKkxJeSNZYkg2dEAmKVZ1T3Z1Xk5yL0wmNlBwSUtKc3piNHRKfXdkL3JJWFI2WShWVGlwIlFMemk0Ty8sKlRBSVZNZWNGfEd4WFlpRX5GWHdsNiRZQHtwVW5aLkBGODF0eUVITigrbmcw''@;'; put 'put ''MFlzTChjVlVDT3NwQnVrbHhTZjxmfXtYRFFzNX5tXXY7YW9rPj5YcWQ6Pnl4e25XUUJIVFJhSzpnUms+KiJYJipNUm1NNHU0cztOZ2MyWWNXKEdXRjphezNjSj1vak03eCR+dGhRXklkK2IhPkloXXdDPGBHaVdkMDNvZTVVWCp5MzJ+My9EIWJPLHFuTm9LfDB2XmVjMGhvZGEiNXhXUnAjP0Z3''@;'; put 'put ''aCkzK2duTipgKEglPHBFWXk9SiZiO2xFKXJlXzxubT0iMW9ZMVR8UCJSW2B5ZCNqY0A/OWBwRE53fnhPI0NJVF14IktKTlc3UlhzLzE9djhfd0xZZHhnVTRpNFZyM0MzVX1YaVdjO0ZgWnVJY1NjclNYR2cxMX4mYy82eF4sNnYqInorVFJ2PUJMZTAvNm9nYWNBPl1sMislSX1MX35JfjI4TX1b''@;'; put 'put ''a2VhcTZyOElfRjRVZUZPTlNddEFkUCM1VUV9XUcsJS9IdnNRb3pyVmQrciVPJUtXKzg7R2B0aWtvYFkqb00oOU9EfFl4cEs/ZkF1b3JCd3UsRisxS2Z2ZmcwSF8xNE85aWJlMWoyOFAsZ2VsKnM2UCxQZjEwXTFOUHl6RzM1JUp5dWJqPlZRfj07KWA3TzZuYm9USlVaZm1CZipMd3BUKz07clhW''@;'; put 'put ''fSJqbkNgOHdGL1AraEx5NnVMVnsjSSsmRD9OQy5gRXVlSjdNMURgdXc/Q0BhRmZ0T3dEUFRSRGFYRDk0STA/RH1HeHZ8KmV9IVdYWDJ5JDYkUyVNfjZLWXNCMWNzQkJ6fHNyV1spSUFLb3NCfFddc0JFLmlsK1loMHc/fGlpM0QzbUciNzNhKVcvTU08UmRFW3ojYVpkT0ElLlh8Lm9lcVJkOFsx''@;'; put 'put ''cF9XWUBHemtifkY8P2B2PzJGPlEqcjFMLiReTmZ5aSQ/a29Fb3xwQldYPmJiOE1xfVlCO2BQMyVVVWg/LisjU2suYDJTdDcwfD8+QU1nWVJeOC8rVEA/VH1QZkl3ITZhRzdvITVpQ3ApXzVXNng0ZHg8Yyt1T3ApM3xHLkVneVFZeTVWJFptaTMkYF8uSG1RRmo7ImR0eDV+PURFNnxuRn5KNmZY''@;'; put 'put ''ajZ2T0VkPzEhNFM6WTByNiFVSDZTNX4rP3tSKSNuUigrdkdMXz1uSGpUVjxLYERUNTs2PTAzXzE4d0Q9M3pkV0tIb05mKmRQXVouQFlZQ0ZSVD9HIj1YRjc6MyY1PVV8PnxvaVkiLF59ZF9hd2R+QFAzQWltZTtdT1N3NHt0KWImMFhFfjp5SDVdJXJwVWQhWXhBeXc9PHwjY2Bwcj8jbl4jUSlo''@;'; put 'put ''OkljMC9ba2MhJCQ8fG9VXTM2ZW4lRktkMjtWMX1CRk11c3dwbzNAdEAud0J3RkU1b1hKOj9SeyVuUWFPV31zcHlYWyVpSmNNXVQ0NEBrWEhAa2JRTShkNjVGMl4jezo1d016V3A7dnVdJDYqNT0iaSsxYVRNUDR5TSZibSt5JThNZWBSKkFEfkU8YTxseXxMYWBwUXNuRCRONDteVW1PPn14PTU/''@;'; put 'put ''aH4ySypnS25iOSNOcUh7emksNDloV0UoakVRRjpHVG9HVmovQyUwZllEc3pXRGl0WFsjIyU/e2ZQX29wV0BfI3Q7YGZuSHl6K1JDNjQ1JTI2eWRVXT1sc0A0cjNRNC9bQWQ2en5NdWRKXk1NKStJL3FPM0djIWBUM0lFK1VENXExbml3MWNTWT5WWWlZVVRIVE19XX1WM2lOPHFPai91fEs2TlJ7''@;'; put 'put ''elV9P04kS3VLSzA8XVQ0MSVpQE1xOTRQKWJZdDVPWCthdz45dXNlMk0lQj1lVShZRXk9QWR6PUtQZDBUeDhMaGlQKHhEflhaRnF6NG9tT3F9bTVeNCF+VSpYPiRNOnpMblM2N0AkJHp2I0dWZGowIl5JU2ZUU1B8Sn5VaEhoXVY3O24jP3JRJU9fYF1kNTdXRzhIQTtdMUAiO2g8Rk5Ce1JYJkxI''@;'; put 'put ''XmF8dSVGNCFUdis1PUFhQEtjeFFxfV0vTXpBXk5wYip6Nm5YKVg8SWFYbitrZDssKlc5dThXTDYpVmFrbUl8YVV2PHlZNT8kQTIkWDkzVzUpW2U8V0ZHUElbRyt7MiFoIjFGLDArSFModDRzaGRqW15zW2g5cyNJSU1Uc0ldKE06YilQKEVFNGlqOzg8XUNWMXFVOihuYX5fNUsyK1hwdTArZD56''@;'; put 'put ''clUhdURjQix6Z1V3M112JEwhN3ZuMTIjXl16bUMrT1AhPz5JZV10UmpLUXlBO0cieDd4eXduMEtPdjhyfFFPQy41YSMxRFM9c1NTdGE/WGYqIU1BWWxAdVRuUE1ZJm40fDFxb1B9bW8rK0JFdHA5WyRjNGFdS31BUT0wMH1tNnN3X3lCSGpqekZ1c1RkbmRwQW5oSWZmIS85flZYPjtEKUdRWDpz''@;'; put 'put ''WyRadkIqQmZ3T3lpUiZ7ckclR1khNk96SGNAeChCRlhnOmlDeitET0F6c2hiO2RmJjIzP100Mjw2WV17MG5xLyQ0byl3bDkjPCYoPSNHYktLflV8QVdOSV9XcjVpeWswPzNAV0VjTXleZCtFPT8oNCh4fkZoP142dnRNZkcwNX4mSD1JVUAqem0mfEwwcmBUXnsqK3Y6dXxDIWs9KWA0d0Ngeys3''@;'; put 'put ''MlI9JjU3UFd+PTJHZlB0OyNqTTNzQVhJMjN7L0ciLl5+ezNtKnFqZ2ciITYpbytBb2pAXytXfCwldll4XkU4W3xENjlmUXZ0fkVlcDM6fGF3PiNBTzxEeVlnOnFOWVhqMGB2eU1SeXpmdktyYTl2KVImPUQ6cjBgLFA/fVcobnhgK015PTwrS2V3d1FxRmUpaHd2Tk9RUHQlQlksNXAzRVlqI0VO''@;'; put 'put ''Qjg3I3Y5d28rKTlTXnZTZXxncGE2eiNlclBJY2JpQzI7Qk1YIzlBOHtjKF0oejBdfF0uOUB0eEo9YDB7ZXpMem1pVjhwTCt3Pl84L0xSL0JVTV9+LjNxKUxvRWxQPiV5bzhienxnd2xAdGdSTGAoei95JT5JfFl7VmVXb2V1c0xYWGBHRVdeb3BnQ1VWfVJibUJ3Ky88WTdTfktOMmFmTjNlXXtP''@;'; put 'put ''UHpPOT42fVRuLmBCWStPNFQ5ezdWe3kqRi4yPmchTHlBQzNsP30rZV19YVZsYXxeQlVjVGUrdVJPWGFDc2JkZmRhaTNrVDYhNmlGQ1Y0TzxrN2B0fjMhXncxTDJmNF46ImY0Mml7Lzk0Ul1RTnQwVz5NND81RzVSXS5HdU9ffn1+OEldey5OZitMNEdPfWI4SHVyLkZZKFtGRyJrQHZOKl0oeGNV''@;'; put 'put ''ZVRITUNUamlTQ1ddeHw/fFJvZiFXPkp4Mk9NYG48dWN+Vlg+T11pL0p7R0R5KTM8Y1IzUGhDRyJMUmkkdVpmJEtCZmRiNDs/aittP0RbPyR2TGZRc0RXfkVRVn5vOCUuT2ZObDIrMEtCZCtkSzZdZzVXVmtzUHxmdEElVCtYUERXfl5kLHs1bzJpMDJbQigma3pLU3RzOU1DOlR0dXNmR117TmR6''@;'; put 'put ''X3VCUyx9KGZMUGpdSExCZWxgZSIrOHlZKFNvV0w3eGJ9cFB3WTpzI2F1djMsfT9saHA5WiJbKGxAfnc2WmNFJDIkNjpZcWs5TVtwY2o6SEJYV0lQMiV9flJxfUcqLlhdXkF4YHhMW19fUkA2Y2U5K3xrMX5wS0l+Z0slbk5XI0xIV34rdDN7KExUQGRfU3poIWR8Wjsjd21VKXJZZnBCJSF8M3to''@;'; put 'put ''VUBLY2hoJCFCcGA+RX0rXyZ4PHlwVyI1dXNiMng9Tih2cGY8MnxeUz00cHdrMWN6RjJbPDo+dys+TjFqW1RZOWQyXmshTCVpbEckWXFreGc3aDhQcktKTyQyPXxTUDpPaFlKU31CbGNlRVQ9P08rbX46L2AmaEhEWTIzeUReaXtjYS8ic31+LlQhIm43dF4wTnl7NHV2cWV7Zik1QUs/RW9eKGxh''@;'; put 'put ''cHl4P2M4fmx9UigpeT5vTGd8OEh6Tkgxd1FNe05OSHh3YVk6RDJ9fHxCeFtrZkpWMyV7clk9PyI2YD1XbDd3LFtoYn1kYjxHYEdsTDYxITQ1ZHU5VTk7b3l4SG57ezllKCFNbzh2dzhyOGI0a0pwN00lQlokcCR1dCY6WlZQfXpfW1NCV0RDV35Sb3JARnlFfVJvKyVHZHA6JSg0cyZJLFhZQDV9''@;'; put 'put ''XmVxQEtxcFAmeTZSSy97SmUhRSQiVjBAZFV3UjFVOHkifk52W3pwQF1ILkhiTHghIm5aMyRGYFNLcSlPN19JbzFgYnxIfldUN2k8bHJ9P2VwUGt1NHM1cTMyaGx9YjRQTlhNe2ZKfHBFMzwqKilrdzFGcTNgYmFkYShHej5YYXs+Q1FoN2Vde0R3MnZSN3RZc1twYkdHZSUuW15PdzRZMERkdVVm''@;'; put 'put ''a0g2WTBFOmBmdk9INnYjRihHNDxVdEhaaWx9NjBXcyN9SDooUl84NmgpbC4jYm1dZilsfjgmJUgucXY8Mz1geD1+PDxoODMhaDg9LmlsK2xJaUJsaltnVFFae3NkIVg6Rl9QWGhzcl5bNVU/SUZzenEoe2sjb1cjeHd7fjgoZWclZlRuOC9Ce1o/TnpoeGMrbTFmW3VwOT97IVh5fDZ6NX50NmdV''@;'; put 'put ''dFA4M0U4YXQzcFEwI0BDWEd3WW5AMW4oKDdheCxebEd2OjQvVk4xej56OUVxeSV5UltKUThZQXFGcmR9JSZQflt9ZTFUZThAflUsSH5XRXMmRjF8Vz1MTXc/OnR1K0FvYSh5azQxJFJ7WGxqd10mR11QS2x9dGIkWCFSdTNCRXNLfUIvKXV0P2spKEVNeUNtMWJUfWlfM3VjKFVOKl1MX2JbVERs''@;'; put 'put ''XVg0RmUsfHdpMHw1SFB+eE9rXjx3XW42Y0hXe3U+L1hdRzBHO3sweCNXXUBJK3NNeTw3XyNYdSg5MFNSMmNITyUwWHw4XjxNTDpnfTc4YGNsdEYkI30qXmQ8V2ZzQkUqL2ZZVDIyfjldVjVhXkdMX2BAZlN9UGFlenRKUUV4NTlXJFU5P2hmV0xVRH1dfTluQiUwVGRKelJIdWgyT0VmNlF2cCIj''@;'; put 'put ''fFtFS2R8LlBKT1N+QHl7SH1KZHxOU1VeKF81WnhLPG52VlVDSGZ2aGkyVF42ZlgsUWpgZSJPRjxXXjF9PiZQcTg+KXJmX2dAVGRYfVYwVTNQQ1FEbF1XKEBlRSl8cWtMNyEzd3ZjQCNAbnd+QGtYMC83WF9zaEkod0kwckxINkUpc00sQkp6Yl9PMT1ZXnMofS5qZCoxblkuVjhEN1kzTWQvOWgx''@;'; put 'put ''MXNoZ2NBOygsaXYiUTNua1NbY1ZqRmshcCJdaShrN2hkVGU3OFtKJDMmc2lUXm5JKUNgYiw2eTlDUyJEcEAuK1sjZD5lIjIvVDYzUSU+L20rV2YqNmJ+LG1ffmJ+Km5hNnNpbytBPTpaQGFjci43fD9OfVUlQHJ5SC9RcV8oPno5KGMlUURkKnd4PXszIVFEaGI1b1pgWz9IbHI7dHRKTjFCamJD''@;'; put 'put ''MGEiPUlAOClNPD49Pm9yL1VIQyNsfGI3NE92fXc2QylJfGs3QSFWVFo0KyVDdV4uNDVhdWxGLFlxYDRmJjM/Lm5rXTV9eDtDbnR4WmlOZkQ+Imx2Kl1KTUdVTmMsTzlwJiU+Z3JVMSFRUl9xJH41TDYuZkBZcHc5WENnKEB5NnRhYDYlIj84cFZfakkkL2Rlc3xgQzVpYCZjWkV7LC5Dfix+P1d2''@;'; put 'put ''UTRGZjI9JjNbNSRpVjkyfEdQfT9oMyQuZy4yelteNUskfns2WnpVMSV6RVFUQio/RkZPTyRfbHNyWD9CV2hWSmNANltsTDhAeUZ7O2h+djshVT9DcmJ9ezNpSkRkSTxeZXJdZEJINis6eE95cFVwLntMTmBBdDFbZHVdPGM6dTd3eV9kd1RpKzBjMCFLKktMSGI+QU1XVS8qYSp6TURrXiQ2T3Vr''@;'; put 'put ''fGJETTZyZ3tLSUlLNUF+QFZaaFlFeGUvQ2B2REV0RytIcXRkbiUlR1VWUWJwOio9WHc6TiJiYHBXUzUoXlU8RzAvOWdFfEFuPyVXWFF8bWlBKTdyYHhDei5PWF1iQlhbZEIkZlREM1MyUj1aTF5DdjxfTmZCQV9aMnY+emREI3tyZyVwKk5lZSZ0JnlMUTFzL09jTX0qblB2bmZVVjp0fjpHRnpB''@;'; put 'put ''TE1lQUN0dS5+MkldNTV+eGFxfSNpej1qXyUkRUlMSC5ITypDMURXLm43aCNoZzskcklpQ25CUHF2T2lmNzpfeXxCb1p2XTVAPiVDbHMzXmJ3XTRsOjFMTkgyOyppPC9qT1FyXjVkfFldek11PykmdWRvRlldbz1hbkhyZ0B6Pjh9ZkBHczE6M01hell7WmN1VmE+MnNjeEsjXUkzS0ZvfWtEQFt1''@;'; put 'put ''KS96Qz02YilWInQ2JDVfIy4/TmpSOX1scjVvNixINDt+U3h7JTRgcGZKOlAjN1dqb2NZMTBaKE5pX2ZZOk0/Rzo/PSQ1UCI4a2F6K3lod3Zga2FAWiRKX00rOyNjYF9icCsjSTFHb2hRI2gkT3ZPWkJ8Nmwjcl40YXUhS0U4fWd+OEAjbmRTJFQ8bWdMOGxpJkl2V0REXSFvdyk9cyxwIiZsfjhH''@;'; put 'put ''OXpOZ0tTcmBVIVQ+cWs+QT5ecSZfKzlGUC4ySDQxfE9MMUQhekFKdXkrdGNVPTBaWGg6JE5ZWGg6R0x0L20oUXRUKjVvKXJpYCMhcT0xXl48IjhCX0Fxfj00JUh3W0wkZ011dFt6fV4kUWBwKWMkVlpmJUJjenVBemE7Jkg8VlJgKTlCWHBxdncmNWdRd0tURCU5Zz5RSit6V2NvRihncDZWRlJW''@;'; put 'put ''d1JNJElkPz03IjAwcX1PQHhPN19sKVhKZldOTkghQjc5bzR8VWV+Jnt7Tm0vdkIjQCxGN0t8cSpFKFYsflMhckBmOWNVZVRhOlsmWzd9fT44NT80Rns0OjJqeEZJVE18Y0dBfWFANk5OVzxJOn1ycHFzREBnRV5ONjhuWU1HfCY/ZU9MYmE2QCFOR21zS199O3VhaTBkM08mWXxDS28oN35nL2Js''@;'; put 'put ''L3BvN1swUHVbWyw/TStNe1FFSD0+IkEkN11xRlZNWC5eU2MjWlFTS086QzBLdHNYVjo/Znh7T3ooYFghR19MKjMwPmluP2B2SE5WVlhQQSxVRGo5a11xJj54WlMrX3hjKk1YTjA0K1UifXg4UGhncnYlV2R4MEhTK2pVN3w8JkZLMT0mSytiWFZ1WEtBJlMjQiNYQktmd3tqQDApYW9sRkopN1d+''@;'; put 'put ''bDFiKChQdTFuViU9QitdNzJtQWxbRm1QJSVWUCUlbGk6MWhCV35FcEphKCFjeXRdXV5ddTxYN15rT1h4VFtaO2JKZTxvZ01oMj1CN2I2YyV0aVt3ajsqRmx7dm8uOV0zIlYjPnB+YWkqcWR8bjhpJDpjYWEqWDRjYCw7b3ViVDdJL0V+ZzlHbnh2TStkRXwmLlsoYlE0OV5SeCh1I3pgbVVIYiFQ''@;'; put 'put ''bGo9PUUmQ1lUPDM9KmZXVzl1fiU6akxjVmFDcktlOSI7Q0cyfnZOU0ZefWQ8ViFhTjJ+Mkl6O28xMT02JX42RzdkVWA4ZkN1QEZhTHVTO0N4SUxwQiZoLkZ4b2tYKzU0XlV8O0x5c3Nzb0dZMms/ZnIsSj4xJSJDZiZ0c0ZzLjxRaiklYmdiKG0zKVszbShPVTZGbTBaZEIvaihXNjU0QWMze1hz''@;'; put 'put ''PEcuWlA+N01DKjlbbWxERCREUWZzP1FNeSJKMkcjcyUrbnZ8cWMqbiR+YTdLd0g4OENLTiRRYlovTEtOU2F3eXZbVm4/VFo2PnJ3PjhDQ241b0NyNERgKzMkZmJCTEpLXyRDcUtzMHdVUTYzcHRGeW5nVyJgckRvNio7dSR0Qnp3JmF3VkpQfSopdkNkWUx8aVQ1b3VHYFFqcW07WHlNfkprYjhw''@;'; put 'put ''L1o8TnwuY0khYV40clZfRHVUX3o+ZXxaXyhpdiYsdz0mOSRdOmtXUXtvb103SHpKUSQ/IT18fiEyMH1yPVN7bSo+Wz1wUnd1fENgYkReTV8+RitVTilNWnVLfSMrI25ZUiF3fUVofmVXLEpVXWVpdnI8IzVTd054QXVFeWJKfHI0XyRbPWZAa0pNWjVkTTpkdkJkPWVbckkvayh6dW0rM0xxQjZ3''@;'; put 'put ''ZV8jJFYzTTI9dnc9VytSfTA9ZTxVMG9wT19IJlRpMl0rI0dIdDdDR24kMjoofVJhWiFTeGZiOiYobTJfcT9NWj94PDUiXmBrKFZ0MTt8b05ONGUpaVt1RVF4WFhIQCk/SC9pKmZHPT9uPzBAXVVDYCFPYXhGeXViImRnX28/dXFnMG97Pjp4NkpyfHQ/Xil3JCFJYGN6OFpoPFN8fiorXlA4K0Bi''@;'; put 'put ''dUtqYCNOMVF9UGBydkl+MDRRRU97dnJyZzhELytMQC4mWHlkeEVkUmJZcz5lcioxPEZkVGlKRzQ9QihUczFoVSo2VE5zb0ZkN19eNyV7JUJ1X2BATFdKU2ZnVkZzbSlucEUoRkwrW01Dc30qb0N3KXM0Yl9TRjdFOTpmSVp7ajQ7WzpbKT12M11qPT1fMT1WJSRgYms3cEVlPlNSOkdKWDk0Tmhd''@;'; put 'put ''bXFCYlY6d0x6c0t+Y2E2TEFKLm0kPSowImFDRENHLE9eOTw6bE5yMFlMX3AoPVJZSlZrZn1VQF5GWz9vd2JbfldKbVhMJipOKH5xTnxGP0szMHNuKXp0YmZnTlArWzFMJF5KL3RVcXBrZTBjYSombXxWMTg2PzxvVjJ0dlZhWj5Ecls2P1p3dWxRRUgzNFdlNkJfcCg9MHZuQGA3Zlg9bytUYEcp''@;'; put 'put ''YlhWSHVfJDBnN0c8X2gkMGd6R1V7YW9YYW9AWXBnSyJVNDtGNnVxVVksdUc7dzl+LzovWiVbOl9ONG5jXl9VTl1FZFN9RjRvfF8rL28lOlgjQG9hVilpXV9VQGY5VFN3SDokVU85ak02VDk3LkZuIm4jemI0c3JxZUl4QiNXOn5UNz8uJF9bV1ZMIXppPHpXTShWYU0mfWBwJjJgcHYjY31pX2U3''@;'; put 'put ''Vk5bVD9RMXMuTi4yRnpfT3pUYVhMR0EzXSlkM1twS2g6Z15ObVclX343KGQjNFJdbHtLTnI7ST8qYkBfP3x4ZjBPfSY3ViYkaElUOE86U2Y/cTNscDBAXSo1TzUuXmw9M2BCPlgzPiNVPnB3SXpWfklieTJoTnBkO34rT1QpYUBAXXF1RWFxWVYiKz1hQnQ/bV14biIzIilxTn0qNj9rTkBhdkpQ''@;'; put 'put ''fmRePHxeUWJtZmRoYWlaX2pFRDFFL2NkM05qMjgmUzg6bG0hU0Y9WVRmYW9IUk1lU09ye2FFflZaYnNDe098Q2Q7OXopelQzaWYyVGk0T3Q0fU83aWlaZzlXMy9YYFQldzxIQ2wsa1A2XzpdWUM5aj53eDswYmVnIXg1NzhGWiNgYl5BJkI6NDxbRy5FcmhAVUpyTSZMJjMqRGBwNj8uMjN1diVK''@;'; put 'put ''Q1RgV0RpUnImQndqb3VoRFohWEVmWF5Ie1FbbjAscmdQZF14eHRka14mVCg3dmRfe1t0MH1KXkFYKk1vM1lkR15YSFFlMCJ6YUdAdVo5QysqNj4kZV9IMUZGQSFSXnlyYl55ckFYU0AxcnAmYzRQKU88dXEjdzJmXkxsKntvKHcuWVpHWHl3eVtrXmt7TVBwNGlwST50YGg8JittPUdsQlAqL2BR''@;'; put 'put ''N3BiPkdbWER4OkZde1R3OyxObzNZW1cwV09wUyoxK2hfLE85QElQfGdzZ35UdT8lN1VYe308YWFMdCV5P0hbOSFwOTtdMHN2OnxmS2Z0KmQlN0BTVX4yNEB2dk81XTE1VW8lbXpddj02XkBtaDl3WjV8eWsqXiQoUXFraGw6eT9fJjoiTXFsKW5pcyheeFs0fjElYlhQPnMlbEdUIU5IInxsKT80''@;'; put 'put ''fmg5UEw1OVh7PysjRzs5amkhcypDLlcrXms/ZiJRJVlFcX5gPmVmQUhJRyVFaCQ5LH43QCs2OjtBTSpBL2JxfUcqJTx3emhqbkAmemtlY3VBX1Y7VkRyKSVHX0RFJDB+XUtxfU5xWXswO1cheWRmbnQxQ31KPzdzUjZgPmtKZWxRSHYjKHAkOXNlQV82VWhxbFlWMzE9PTREdUx4alZCImopfj4i''@;'; put 'put ''blY6KitzdzhkaDw5JjRbMiF6VXBrfC5HLlszQHxhfTR2fUlYKWpMfUgkLGVscC9TfHRGMmxpQWRubkBSb3dDYk1KeX5MPWJVU2UwW3cuLDl+PkhCTXBpN1BBa29tYng1SmFvU1h6RjY3OkJ6Vzxidn5MVmNmS3t9NlZqeV5yMCorPlJJWWlrQHo5IWZTb11JWio2T1E9MERHWWlaekNMfkg8XU1W''@;'; put 'put ''VDlSXVc9ZF9oSDd0dTtVe1hCY0N0dnM4I212fUJ0MDBBX3ElKk93Yk0sWiVRLClhOT9RYyJpa2FGKkxZNz1NNk5Lek98KCkoTUQqMSFHfCFNd0N6KiRyZlFZQj9RWUI/Unpla1dHWVQ8LHEzYGFPe2g9THF0SDNAQnxPdTpGXTcpd0hrelAwKV0xNWJiP3B4aEpDXnd+a2p9LzI4JlJTQDdwYnR4''@;'; put 'put ''Z2dmY1l5TlM9fXxfU2xwSnFRM3kpejc5UDB6N2VVNmFqQzgqIVdhXXNFWHJ4ektbdDNjOVAkIi93KDkoVmhvMnFbZVE0RmVfdFBpQDJyNEM2W28zLl9lSnVyY1t2O0g6K2ssdnojNHtlOHVveittc0tRKWYvUlYuei9rPUhWTT9IVmlUMltqPEhRLEpiZGB0KSJRd0QoWlYwcmYqQn5oejFbY19N''@;'; put 'put ''LGFDZHBPTU1tI3IpWDI+R3B0SFJaMitHc0dgRF5URUg1cSNKQzouMCx2YVI2WSwsSkxdKTR1KGkuMEl3UGk2SSxfNSE3di9aPUhwTD9IfXkmWnwhMUI0eiNQTSxETjVqUUQ0T2ZGKT9tbnZpJUloYE9TK1l6UD1pVlZ+KU1TaTA3b3ZvelBTLD83SCl6aX1qcztMOD4xWGEodzdNLjBTekgrSSRT''@;'; put 'put ''V3J3NEcmb0ElLlY6M2A5bT5jWnFEIz5wTzNzaTlWWi5EVz8yKi9TM01oQEh6WXt3KXdZMStMTHAsYm9yXTVPVVsuNEslT3wjTDsrJV9eY05OcHt0WnduZXQse0UqKyRqeDdIc2U2VGdnTWhTczdaXnxvWz9dLGUueixmX0pwSzcvZjZSXV5xXWFKOywma1tyZTRJXntJJFtwTG0mUF1vXjgsZlJZ''@;'; put 'put ''JnAhKEpKIjBQLDJLNClYKEFoMykhS09zaExHbG9jSiVSbTxIN200NTR+Vn1PcDVtZl9SX3tZNkdmeCkySitfRjw9SztxTFdYMzMhYnpXczdTVjg3c11iIz9vYkAweWA4YXtpK2lxKSV0RzxdTGtIS2gzXWtvY2JWflRERF4/flZGJFopXX5zKylRVSt4WTgxUSlhQjk7QGRtXyxzTnhwK09fL01d''@;'; put 'put ''Zl4uIyV8TD5lfWUzWUAzRH1lUUxOJWlKenJdRHksPjgiZj4+TDcleFN1Z35UQTMlbklMRj1dVyQhND02JXxuflQ5STd4JkRaK3ZQJERQPXB1SGkvaSJITWExcnFTLjh3dHAoK0h1OTNicjA3WyRpOilLPGZpTyF6SWFFZnM/U21LKTUlPFsjR0B9bzxld2AoVE80UFZLSTQ6RERUWTUuUTYkNF0i''@;'; put 'put ''WndeMGAyKFVYVyhLUmJvS2NCZjJ7WWtWW0s2X15CLCNkYEVeW0JBSWN6WSVYU3Q3JVh7WTx+UF0hSHJja252SHwvfXh1dzx5ej0lZ285aV5pWVskYHlsXl9TKlVXI1BQTHtCaT02YH1fOHRbNjUrOiw4Q24mU3QhYHApZGlZbnxLOXlDXnRzNC5KMXZ2MmtoJmUjKWtYcF4iS1VpNmo9Rn1tQWNw''@;'; put 'put ''eDBSWGUmMyMufDhgcj9sZXs5b2V0IW90eiZwX0dRMktaNXEjc29zTldkbTJzInY/JXlVIj8hS0ZVNmU5MG43PFg1PncyKVpHUmc5PGlTOn4xfkkvK119Iy9PYlRNI2NobFBORFMpWXJjfE9xUl9DQCwvTj1ZIV8vL0s2dVNYI1FCX1B1dn5KanUhKixlW1JuWmU5L1I3QGk1ZC9yeDAhPVBjMkZ7''@;'; put 'put ''WT5FSXZUPnVPW10pOkBjYV14djxTXXtXYXQ6UUJMbjJuKXA3c3RmT25IdnlNLmBJQFhAUFA4Xmo9Rjg6Xy9YXyJLPm45KWBRdnQ9OHciSTFfaCZdTDtQPClfV2NNJlVmTj8hb0lbJnc4NkJwaXdwbmo+SDRMNiRefjZ1TnQ3PXM+KEFWZFI1RjtUTTlqekp3aVVSS25MWWcySiVGSGYjWkwkaHQw''@;'; put 'put ''KSRfQkNDaG9JSjczLEQvRkVBPU4kQmk2QWFCJGs/KT85O0VLSz1qO2ZPXWxad3gmPCYhWiEhW0k6RC9ENkZTR3A3cksoREpXPj40TmtfcSV1NTA/IzJvfWp2ZiZSYypacjJbOTs6VFkwJEhNOXpeS3RJRiplSCMxcU9rKUBPK3tSe1tNRTA7MkVMMCZAcXl6ezh5ZUAsO0ZFfT17d0p3WChFZEkk''@;'; put 'put ''MmdEYDQhKkBMOXpeOGBYIlZ8JF80JncyNzZPP2V6PEBPRXlbNEBHdlAuWVF+bUo5YmJQb0F1I2thWlVmWldPQVlqIjROaWc0ajloeUJ5MHU8fF99MWUue3VmbyNweWdXQ0pCay5aWCklOTFxW2gpMmghQHJ1UzMvaCE8MSRUbip2YEo0JWk+PVVAIWwqa1RKdDVySWFxUm1lNDVhZmBoZl9mKlkj''@;'; put 'put ''QUNwLkhYOERKJktKT0N4NkJfXXhBSFNJVzxoWkZHOkMvbWg0e2JHSkxEYD1POHpye1o/WnU+bWd6cXhXbE9vYU5QRWlTSSVvaWh8RT86Q0s5JDh0O01UTUR2UX1zKlRUWDRTQX5QNm5fbERKPkVZISw1RGAwWFhEYEl0NkZLd3d5QXYjI3hUZWg3MF98Lz5YTC9WVldASjNMMSlffWdbWEx5S21f''@;'; put 'put ''THkoWEAjTEh4dkxFOCYsbHxDKlk3MFFdd0k0e1djMU1pdHYlISRwJlV9c0BTIiFeNDkjPSRdTHlEWHMqUzhCdzk5azBvaXgyNmNMa28lc2UlW2BmLnQjI31bYGY/aVpdKEtqbWZLPUVlLjRdYGZ+SU03fTgpbEZrZVAwRy5nYXp0Xl1QIn1UXj54STpIT2dqPklgI1BaWGpnPDkrcyRILk08Nlc1''@;'; put 'put ''MGAvPSxoPGghSVVOZjhAMCVJOls8clR3L0lTKzgsZ15JczQyZ31maTE0SUt5TVRIY3RlOllhXjZYYnA5QGJXRTs0R0gvZTttOGZgPTs8ZmVdZCxxaiVzOF1kLFBrUzI9WXw4V1BXUD1NZjEuIzNnTHVYNT5sVSUmTVg4bjlZN0RKfFByVjMxfUh3TXEqREIhOEA4PnpYQ1BmMU1tKmAjTmt6Inpg''@;'; put 'put ''SzlaL3FaRGRESkp9XzhxanppJjtCI0prTTR0eDt6VTtkLixsM3t1YzlAPWdhXk80dlpfU2lvdGU0cD5sKWpPcC4jWGZ0ZWM5PmwpalFwLiMyZ31mfVBPcC4jdmxaXXpsYEk+bEVKPmxVMixDaiRNVFtLP2klJiEpMW0vfE9rLnFabUNVWEJJdDt6eFd4ZkU7eTxBMERUS2JJJDJnIU9oU3FeSD1q''@;'; put 'put ''JE1ULERuemRoZGw7Q21UTmtefGUuS1VaVEc/TWtUJFtZRm0oL1IkNzZuZ2IlZ1R5bVFddjJ8JkkjNkZPL1VxTlszUXEmZjVZN08xOTlJRmMqbCxGRS98M3NoOzRdTXxfRVltKkRSXigyKVlRfkNPMnJ6O2heM2pQa3gyTG14V0IhSz1IdEFpUitrP19IO3ovYCZ5OTkwbD49PyU3InVtakEyQV9q''@;'; put 'put ''VCQ0SEQuaTxhV089NUl6e1QkbntUJHhZVSRQZVptTzRIOUovciRjYX1rZGFdZiEmK11kLCFuIzxmYEBmJExmaDUwaHBSNDprKmUqTTUwNjBScyU0PUtEIzFPYV48JSQsMnxIOXdjJSFxajEiOVh4ZSxbVz1xbS5aP2YrSk4kSDlUXlFmTCpqNXptZnk6VT9KKUdEOVlQQDU7R0w5JTxUazlxcG05''@;'; put 'put ''THtmfklET35IUS8kJj8lSXY2IV48dDtjOTFeJiNhdGEkbmo/I01NSHdSci9AZSt8LzVYPyFlNFBaPndOa3dNe3FnO18rQCFJRClmMDAvIyZSOklFVEhjOE5hXlc9TCQ9a2FmODlnaDgmUlg4Jl4lQ3A4PEUyOTl8PERKOGo7Zntxem1LOzVEJTgmWkt5UT5aVFJyfipiJkNnem1pe2dBKC9aVFJy''@;'; put 'put ''U20/az8rbDU3e04yLkhYOFUuR2doITYjTiR2bF8veTxoO0gjamUxeThROSM6TSEhT3JeWClsMmt+bSpPKWx+bTIwekREbGsxOCZhfUlVK2NMKjV6QEhdMjVnPE9xNUIwajddJWZldlp1NFZtWyMwIXZaKCphJEZYeTAjJjFsZSw8a2Rsdzt8PShsWUhMPVBIaG1XJDJaZUk9PF5KUzhZbkspRDI3''@;'; put 'put ''andnTHVxfShKTEJSXjI9XSNkdFA5R2QsVG52KGlabCFwfDNXXmsoVVQ0eGlNSyglU3BbYUVkRU9gNjAjJjlkOiErUUZTTDl6R01fbGZ0O1V+WHY5Xl1QMnNHODpwOFk5KGtMcUlhJGQsfWtjO1V+WzV3O3c+dmRzZXlePEwvNE5oPTtaV35rU3NmalUlZX05OHk+dmR4O1V+U2V4T0VnVWZ6PTBv''@;'; put 'put ''TGVSNyt5Nmp4NGBmNzBgfCEvVjBNO0M6ZSE8MUl2ayRvIWBmalVlTVR9STppPEhzRWx8ODk0Tns3V3d2bUNqdH1yWS97PmY7di9Fayt8MEU0dD1oY2NJc2ZjVmgubnt7ITl2bE87aU1KTFF7OVFzJn0hZzslJmBgPzxaV2RnSXN2Y304d2xieyghZ1c/aSZ+QlNHKGZgZTR5czlSXShYanM0YGYr''@;'; put 'put ''O2ghQHkye3c+UFB6Mi9ZdzxIfWhmX2ZsU3FqRTsuXXFqOiM/JTZOYV5MXzl8OHkhOXtmXytmdGxiPTtuIzhteU0uQSRIRmQuS2EuOWxiKyVmSDJyJG4wZCVDW2pGVER3PnVvbnt1Y2VUMiwrQU50Qj8kbVklI2RjQ1Evfld+az4rbDUpSCRNeTxUUDckNWdoXVM9ZDlSe0hTUn15PCtTU3tIU21I''@;'; put 'put ''WW5AIyVsXWY7dWg7UlhxVVZuQ2gyMFNzSmc2am4jdi5oJmlweV5XUFo4dFlGJlE+dmQjcEZkajVkaD49NiRPa2A9KmxJN0sjQXZdamZ7TiQ6WXxxP0MpZj80MEc6LCx6MVlEKCx7PF0jMTxmK08zXVptaEtDcHVOeD5ZOEhDRWd3TGEsbS5qNS5JXntNVF0oNVR3eGF9e3A8cGRgYF4hblkuPCEp''@;'; put 'put ''MmNEdT4jZCNObjg5SXJteEojbk5rJkpIIz1FTztqNW92JmMkayUrUFRXOGgjPGZdIzN1OVhoTyMxcHNlOkNNM0pnOz03XTV7KlFJWS5EIU9bVlcvTWFsQ048ZmEuOWwycW87UmAhY1Usa0dlaC9NWysuWSJJMlZmaiVmJSsuI1htIkp+IyN1Nk0iRHQ+QDRmUExhTmsuT1dqez9CZFtmP2UqWVF+''@;'; put 'put ''JVteOF0oO3kqWW1LcXhJNyopaFJdOkdNWV5XUG1CaDUyfHd4LHpyezUwQCtTfXdeNmBkLlc4PX1eZl0jUUArOGhmI2VIIyErPjAiQmJlKFpNJF9GZzxiUWEsNkw4cXRpS35TZTZeMmo4QHxDUl5pSk4kIkVbKyQpfCEyc0pCL2ZbcXplI1o3akoqflRpZXw4QGZsTyhzSDNOS3ZDZlk3YGt6JTIk''@;'; put 'put ''K29ibE9mWTdgdShvYjkrQjxDImNHK2hEQVhaeVdNbUJ0OmNEWTwrbVNaR3V4WFp4Img7ZnJ1eEojSndFc0MycSNtb3F4bFVYWit8X0VxaGAvVjI2Wl9bRlo2NUolfllvekRUbD8seCxGNzZANTM6V011YysjYFt5eUFLa1BZSz0jKCp3OldFSTRqMFApLkJFRUMpdihGRXV0MGttQkVFRGBoMnhV''@;'; put 'put ''Lik8IXJeOGU4UVZLTHkwRSN7I002IUF2bW5TdVdbVldqREgrcGxlP1NLNTBAKzlkTnlLWWlER1opWmdSU2UxeShpL05zLD4xcWxyJSpAZStIUGt0Olk9NEA1TzEsU1NEZ3Z0eltmLiN6bE07VzhAZn44dHo5K1E+anI2TmFeOSF6c1dXcyo5VE5rMyJmakNNQz98eDs1fUU6NypAOHFXUEg9cGxM''@;'; put 'put ''Rz1AbGZZL2dYXnFfalJHR1M5VUt0KCVnN2Vgc1V2dStdPElEOTF6QVk4IV96eHB8WGptWyN8Wl13KWpSNWwzWlJ0JjNiZGZJWjdsX3pQVEhjYDxhV189RlBSODcraCFuYyFTcSs9JD1rXU1tKiYpSFNgbVBec0xjKjdYcExfZiw0QDUiMHFsXmNiWilaSFNtMDVSKzhANURKYyYqbCFOIkRiM2sk''@;'; put 'put ''bWp4ImJyUGU0e09jUzEpWU8yZ25AI0ojZ25LfkhTZWh5PHIkX209T259T2t7TC80eWk7K1ZQXlV3Ty5aYi5JJDltPzF9OEUlaDs6d0U3Pl1XUGFQNzp7OCU8NXtzOm1TP2ZEWW9gO1JUSkZrZXo8aiQvJiF5bGB8OFBIbWFwej0oJWZlQzByO1JeeE03PHloYlo8ITBHM2pnM2pUS3dHTVFeOGIh''@;'; put 'put ''TTsrd01sWmU6NGJ2NW8heXMrXUlVQmJvJE9raXtwX2dHdS9HOE03d3QoaVJFeWV1LGdZUEs5VE5rVSk1JH52ZVZvZTdqd2dTcF1pRG5iLnl2Zi43eEQiazpBbV54Ty97aS54S1RrP0JFKV1fMn5pIlNyQFc+Jj09Q0liUFh6RU9VOVNzXylffGMqO2dBWENuTE5UQ2spemNgRDNddl0reiFYdTpz''@;'; put 'put ''d0tCK11+VjlvUmgzelt4N3NRTk0qRnFJJTVzZTJoT3Q9RDpXeyRfSEhbMFJdSFhGYDZ4fXArTnNAITtWMTEqdipfI30uPUxxcSs3PSwoODhFdmxFbjJeSXorNmcsS1VKY0o7WDApKlY/NlkrVEhdMzF9UlY/Y0I8OVomVGN0Ry9vMTpiVEFXK0NPQmVCKlkqWGI8eFRJaTdhbDxWd0pFc2tOPWIs''@;'; put 'put ''JjNmN0p9a2BsYSZaSTJYT0lXbiNeIUtWampSNmEocWBeQyF8aFlTLEkrRUR2WGVUcXpCWmF9XyhxKz08KUVvUkdeTnBgb3coYTpuRTZnKzs6SUB6cjRFailAJjpoQ1dUa10zYXZPS1M5UW1WbCQwYD8iPz0rdi98W1pWOHYjbDIiP3M4UzRTInVDSDN0YGlPPmcrYFcmVHwzPEVpVnBaZG99X3lU''@;'; put 'put ''N1QwU0xsd2czeHJFVy41RVpKPEpOMXRgfFR+YlVlYzVXNXx5OGpFInsmL0ddcm85UXh+clZqPF5vc3RCLGIhOGFOXVhOW0lwbkF0WyJAcWBqaVsyRUZZcW4kNEt9S2s9Z2dEaVJbcm5IdTAsPipCK3l2YkEkPXZoMDldUV9PKW8ocSw+UUI1ZXszUUJzbUdDZihnKHFkI2c6KDA8PztrJDh9RSJS''@;'; put 'put ''Qn1paVVPPkNLZSs5Z25WfXY1X3U/YEFyaDNFRHZKQC8xZHl2c05vXVZzUmNVQ1VeZVo9UXdGeXViSilDYG93KFM2YTVpOj96RFZqYCs9enNvRW99Ry4ydmhEOj1xJUcxZSZNb1M0U0pQW1RqJlJocSU8MUI2SjRHKVA7NyxhQ0l5dWI3PDN1OCxseFUjZWtqfGxoZ0V4SV0kdHxzcX03NEo9U1M4''@;'; put 'put ''LlYvUzQ8e09LX1BDQitve0d1QWpVcnJZOHRBe15MdXwuU2RUNG9Fb317My8/Ont7LkxhM1N5WV1WKGFeODIoaU1BOTVyNGRFTlMod1s0UClgQEd4WGVgLFp7O3RYK0xqNHdhJSsvKkpENjFATHJEV1YyUC5vW1pRayZdLkhoVVlLWzsqcDYkKmgzVHhAank5QEooNUBtTGphTSx5eDc0U34jJjVH''@;'; put 'put ''Ml0vYmZ8VVZZbGdlUC9lVCZ9RG9ZRnptYzFvcFd6VkM7VlczL25jc3E+fXNPKTVdTm1McShDLEQzKVIiNUAmZERDPF9wQGJETHJoLyZnSig/XUczKylvNmJMbnc+elBDbEA3OixWQ0YrSk9ydkUiMnV4ZChLOjphLGlsNCwvSiY9TF0uVX4zNz9RLnJ5NzNgfjRFRUw1aVAmcnMxNWpnYSt1WlVa''@;'; put 'put ''SXg0TWksITV4WUNzfFsyNDd5bkAjPjsxV29zY117MTZ1STQ8dXc3djtfRk9xKXQhRj02Z1M/XUh+I15wQzxfdk5TI2U8LkolZ3EiYWNXIlFYLj58bSRbdkV6MzIxaTRtOi5iUiZ4Q2FEWzR4XmB4UFRIc2ByUjQxN0U2PSI5dDFQLlJde1Y/dzR5blA1VSZNNjhwL0oqZnsySVtUalZ7dlJ3PixO''@;'; put 'put ''Q3RDIXZWRUBoV0VXLiJwe2EkV1lpMWFqNXkrKDVWMXZnNn5LS11CTmI7UDZxYE06YCx5O0AoRz5Nc0Qqd3MueyU/W3BULHlWPzFsZmQlPyMjfF5TSWY0ekhCVFhDNVEwQStDNWlSb092bjklYFJaNVUzbXguUCtWYzRAfFZ5WyJHem9hfn5xPmZVPXlwensxKzMhaXBtcmM9Rkk5Q1h5Y3gpSF05''@;'; put 'put ''RS5pQUpvOVJ5WUNFUiliQCY7fXJBUlk8Zll4PClsd18/fHZzJVkxK1hgeTwhIVpQOHIkfk98cygxPiloMGJlNkg0elFIOSpPdyxCdUg0akkuWi47PzZ3SG4pJnFgNyV9PFY3OGVzKFsrfUNUUyp1ITgyNmlYZj80VTVkQXsoITZKMjgxUnJmLmFHd3BHeHhYbiRHdWQyTlJJciorcFlaZXlTYnBN''@;'; put 'put ''W182e2VecTtmLkRyZ11yIV9bSkYrVyoxUXJzKXM4LDFLdyJXQUZFJXpgcSVCciJkZnA4VFVNcFZwKVI/VCxfcV5LTlJNZGdpInopOHx+ezsrKy4hSUQvVkEqOTc7eVBNJWNGMH5QS2VTfG47emdzdWYwSVBwVTkrfHZNUnR3PG0oYW53XiN0P3haMEd2WGVXRUhGeDhJRVllaFNZKzxlL15jK0lG''@;'; put 'put ''Z3lFJkxQODtHYHBtVEVzMXYkQiFbXnVyPyxyZ0l1WjBkXW9gZSVTe0QpWEpiaTZvWGV4RGhpaGFJTGRDSF5IayFUamBxP3I6Oyp5LGVEQmM3bXVuU1V6VHMoZEc9U3lrKjU0byZxTipHSmdwTXBSNjEmbDFuYE5ga2ckYXlbdHNPfVBNMEQqfVhmZWkoaGAvfWdJJCFHNipJRGwua0lyJmEqUygl''@;'; put 'put ''TSx+aHpZOiVNWVczKll6RmRFKkB5LHxzfH0xUE1vI1M6Q09zPnN5NSQuY31rLGBQWiZoa09hPmZTNy95eSxpT0BSQyx9eFoiJG5gR351bmR8dCYqOF1+YllVZGxlP3lBaUM3dEV0UkVoZGBSPmNaIj84aCJ8NnVkPHI3QU4kQlZqW2I9KytLV0BrYiNPdiZxVj1JfkpCeShxSjM5O1QyZl8rdDRB''@;'; put 'put ''c1VTI2B0Sk9lZkZOfHFuViYzRkdKYW1JTVhTPEUzaCp3dSkmOjRIVXBAWENGMjB4MEo4SnowVTdkVHhgdlN9JHJxWH1KelpYIj9eXVtyR3VOdS4xRmVGOGElWXMoVnIjUWhhTzIpJWxAXk9IT3ZRKGl+QSt7dVNpcylEcGZObSM0UnNrbyg3M3Q7JkReQGx+VGY6M29gOSRqRCU5WnQiXnVwZ2dw''@;'; put 'put ''eW9HZDskV1M1OW9pU2lBQ0FBQWZES0FsQnxFZUxlY2UhfUE2ZCslT0sqQklJRixyTmFVXVJ3ZjMxVlglKmEiSUFBQUFBQ0ElQUMiWDYoQSQlbSUvKjNhUnJKbzJ1SE15WCYkVlhXLmZrfFB0dER3SUpFQkFEckZTakhnTmFFM0J5dlkkbmI8c3Z+Tmo8U31tenEoTHUsW1ZYKXMmOlZOVD0/R3N+''@;'; put 'put ''TkltYD4zXnUrfHkwUmkqNz49IS94MzlTfE5PTkw0M3syI1syRTliUFYmZjNlQFJXRSxyZ2c0JmcpdmYsLEUhXmVNY2g/P0pxX2NNZXcqQXIwem5XRHViUC46bTIwIyxFfUFoaFFGV3JiN2E0SzMvKVZBNWJCN2thdGlLZlYyQlBVOmA+SCMrN0IzeUIiNlJdQFckeFNseEw0T1FpfVs6I3p6azpt''@;'; put 'put ''ZDtfb2R1aE59fH1se1J+fSh1W2s5OjlrTSJIOlVCXkw+IUp8UVpWd3QrPjZnUHdiNUEjcU57c34vUX5hI2xBKmA/bTp+NixTKGxFSTFOX3NVRSF0IURlVCxnbkpWbiZZZUshb0JycitJOD9FRnxfXzBISW45OVMuKV8/SCtxMkg3UDdUKS9zYkx2K2JEfVNHSWtETVUkeGw0OGFENW5jVWFNQSEi''@;'; put 'put ''L1AmIXN4TzUiczp+ciwwaj1OeUwyV1hjXTMzYmc8a3NLVnlOQ3piPGtNelc+U3E0b3Q7OzZaNXpNWiU+U0ROJjxLWVl1eSp3IkA5XzU6NTF3aFtrOXAyO2pjYGs2TCFkQFBhUDVRZ3V2PF8pUz1tISIjTCg8dURiUkZYQDJLRkFwSj0lTCJfdzlMZSVhSHdadmA1TSlobDI1RnJRPVB1XzNUU19x''@;'; put 'put ''aFZ3Zzl8ImkycTBJVXNQRlgzRWo7NEYiLiFTTDZiSTp7YmglRyo4b0hmMn5zd1tDLGdGKk4yTF9WJilbZFooaiZ7TC5HO1NSQSxbNyF6Y2YrbUxXVH48OGA3c0ZOcSpVVnV9NSF1bjhkaUdyeThsdXNJZyhqLzEwbGBtUFE6ZFpGOlRVVUVEcnU4Ok9KcHMmezAkbTI/e09uMU85d1hFRy9eKCZE''@;'; put 'put ''W2lhTCZaMFM7ekZ2TCs6cTx1MFFwN10ueUdpRjYudHE3SjZpMiMsfmdAcXMiJDEvKSJ9PHhvQjwib0B0IUFFUD42KzVhJDEkdDh9aTloSzdEMFQ+ZyFEQltHfWYpXzlRMDcxWy9DUEhDYl85ejQkOyxAc34uRmpCQ2lSPiVsNit0TCRPPno5VnohU1tOdmc3OkY/NXZtOG4iXXtzU3xvYH1MdiR2''@;'; put 'put ''azddMSlJb0VFYW5aflYkZ3xJUnc6PHR9OUpESndDakBCak48bChuPUQ8IlM8ZUdeLDBaNGByK1NiZGVQNSNHUkQ4aV1PSjguey9JTlksOzJtbCk3VCYmLDBiK19RbnxxSndMcX5fOVRfXXhZQWZXSXZWTzFSMSF2PlliQFN1PGEvUClINXQwY0g/fDtVZVJyW3V6VTg+NmhVeDoqO0ZOUTtRKV1R''@;'; put 'put ''fnxVWlduTkczcWddIU1wSTVfJCViI1o+MlJ+Ri9ISm4oZmtfZU08RXolMiE7UERPP1lUSGs5STB1XX5qTGwmVXkzOzxgYi4hNDZALiI+Q2VRJXgpJSpXTCNUaSlvZSRYVy5IJUFXTlEwbTxyKTBPPDo3NV9meFJ6JS43VCpOOGRbPmA0O3JNa0c7fXd8MmJ6X1s0Q21Zd1pYfkM/YDdSV3xhIlIi''@;'; put 'put ''fTNPJEYwUyxvR2BTUT8qdDdUb0lDOGVLLlZGZHU6Km9kXnZqNTNocVU4dld6ekdmNzdPe04yIy5mcCtGR0xWL2xnMCNlUldJYWduYnFgT1JpLmlzNilIQE9ud2pwMmJSTi85QjpBJV0sQEQyTnFoRVViRD9JK0ImZXJOZShdPGo8dFBCVT9PPUZoRmJ0QjIoQmJrVjwmMEVqeW4iOTVITHFbMGVf''@;'; put 'put ''fTkvdm0rTnkhJkM7eTQxTyk9PnN6dj1NRzs5TCEkdHF7YXlxSHRBQCR0N01gYVppeyp2I2E9b0F2KVhORUwjLmomd0MzaWRyQUxeJm49aU5FRXcyTTEqbkB5N1tuXTwzS20yelQ0eUxWc3VKZ3ZgRjZ3JFR4TXpTYntARUtEdUlvfXZgZlA+cmkpOElZbF9JRWByeDdgTFZXMCslXkBBaHdOdzVj''@;'; put 'put ''VD4/emg8LD9uMHQ0UWY6LEJuNVQ0JHx6RzAuWzZTdC5XX3IqLmpCWGpWSTQ7TiNaJH1YQyhgXjR4RyMzT3FZb1VDYHtJdi5TW3gkOF19eC49VFl9Rn0kdUoxU0tbQndfYV0qbW0sXlJKLkEiUFdtS2x6RFhDWzEiVjRTT3BraXFhc01aISZmUC5SSF1YLnR1Zyw3OyFVdC91cHx2VSUhTmJkWU8r''@;'; put 'put ''dU56ZyZwe2Y+a3hvNnJqWyMid0Bxc1F4PHM5UCV7XnEkTiRibT96S2o6JnpxZmlVTGBMY3ROKmRDcHJePngwcipYdDlbN0BuZFdWb0laUVUkJTMuXlRreXtgQDExSyxfUnBMdixLP3UhVE5gWHYyN0g7TGolLzs2UFdDWk0idkVlbnUhOj9PLFhxOmIvc2k3KThfYiszaF16RDB6WyRvJlhqcy4w''@;'; put 'put ''PjRgZXhIc3xdKSNifk1zKTFfd3JdS0MocCtvY187IWwsOnpjcHxreXt3N0lUNyw/fnFkLCo4bG1KLjpzU0FLPzxAX2hZc1NpL3ZNRS9oM3lTJHFHVENtZUA0JVBRYiJ8PyRdbWpWUU57PXtCPEE1aDlkdFVHcVtteywjMyk3XVdEanxYSDZYL3BEd3pbdWVXd3J2Nj1NXl54cGZZY0tKYD5KJGs9''@;'; put 'put ''X0JMI3kqek0vU3FGe3NJI0haRTQjez5rdEpyL0Y/PWpKQEJ0WGQhb35FIm1aSTBEfmlRJkAyIUdxXz8kayhOREYpcihwUHp4ZT5qKnJRRDZ4YjAkUjElSXxRUFJFTX1HJElHQTguXkIiOnMqPWgxdTBDTmhRWyEhaDM6OVJTKDMhJSJsOSxOaVN1KEAuZUV7I0wsIWxufX5DOCtnOkg1amlNRiEh''@;'; put 'put ''SGJrPWArMEhedz9ebiVPUWt+UzVUQHIjXzVfO210YStHNWpUfE98NXFNbGxPMH02KVhWbEdsW2s5KkMuTF9iI35gMiRnUEAlS3pJaFBGNX44QVZONiM4NFF7SShNODxRKD9fP3JySTYrdT9+RDNtWFAueSh7YTUiIVs0RjNjfVd4L1RuRm47SDVkMVchQ0hYSCE6eDpnNUYpSUgxITBrIT59TCZz''@;'; put 'put ''eS5MNk4sZnolU0NnTkJCPT1CMVIpSnglUjVgM2ouWlNoI25sV25MRDhOQUQmOUV4MlhjM29daV5rbGZXZ2ZIOTRpenZvJEdmO3JuWl06VFtbT1ZkJnNVVj9HaHlzWEpvI3dwbFQ6QCZXY3xmR1csfE45VVBNVS5RaWlkekAyUDdHRFB1RDM/KnthaS8zLCVPQkdtM3RJMmJMITpXSXojWn5ZUz5N''@;'; put 'put ''eD0kN1RUUXpCTkxaTWhRZm07RWBKJGswSXRwIXMwTlFnQVhpMT15V1NxUi59dElLbz5Mb308Yzt0Y3l6Sj0oPURwN09LPTtRQUA1QmswbUNtYShGcjV3ailCOzk0Zn5ddSYrcTBvIUZiJWlwXV8kSF9ZY3IqQj5XXk49VV9CaStfQDwrWn51Z2sxZWwuZlRSRkpiQXkxKTM2O01KQExNdihNU3Zk''@;'; put 'put ''VEdGVTE5azxjRUs9Im1WNSMqdXFvR0Q2ITB5ck82LG93alFnNkhsUE98elkrKld7OlhfdT10fFQ6JjNTLHImYS84OGNhV2t2MTV8blFvfippOn4jXSMhezt0YkJ5K1hEd1tqOShkRzYyZDgoUTBIdzQ3RzN9cnE8djUrM3x+PDdGI1lrWylONENlK2FYe08zaCMhUG12TiZNbj46Llo+ZkxLeDlI''@;'; put 'put ''RDB8MHh8NlJPZFVhbDJfdEgjeHZDZHQ+bCR+enB9c0FgUVVJLjBJS0g5O3U4bS85UXRWNFk9QTA/eWZTNztSbCM0cEx4Ik1DMm0sIzNPWWx8STRPYSpZemBCMzo7LzBYS0V7M2NeMXF6aEVXQnozZFZBYFM5aVhuNHcxN0VnbTdrU0Q3bFMqcENTQEUjQipqbGFNKy8pPSJJc3RifWVUMi98d1Ay''@;'; put 'put ''ISNPKEhFUT1ScCZ5cn4+fT58bGdeVjBjMnNMcmFzQ2g9MnFGQjxWTSJaW2JGfEsyMWBLfCNTS3VOWTE/bUlJeT44OFY6OG1YTE15ZDJlRSpxKV5HK0h3IXpKeG1VKUtjQixoWihoJnFASyVxeEtIdS4lVUIqWCsmW2Y5PU0zTiJFUltOd2kwPUZHYGhXZ0w7MT5rNz5PbksxWkZWeSF8K0wsa05u''@;'; put 'put ''PHFldmpqWzd0Ljx2JXheJkshQW18UiV0eUBpcWIoOVopPjFGdmJlcChZZGBGXW51WToxfUx4WiF0fT47QG9scSspR1BLS1grRXhXP3htKCRjfShAcGVxLHJMWGY1NykzVzkmViI0Pig1TD83bTBRLHtkNC5icVA2SU0hall4QjtVSmk2Tll6dEZ8Uj9oUX0se15ENm1NVHVwaGV8KkBvT25qXklA''@;'; put 'put ''b29RUSooS2QkbF5ra188Y3ZqRWlUa2glPml6KkdSfU5uS1VEXVtrdjMkQ19mPW52L05qYCZdTSphfiJtXnBNTm0hXXQ9aFYxVnNCejhVZyxFM3lSKiRFeT5WeURuWXIpcjlvW0lRI1ciJnQ1KEdzSC5Le2F3OyQsUFljWDsodyRrJUEwQ1ArZEg9TmYjRiloVGBCOCJUMytnOlBWbjkye1cic0h3''@;'; put 'put ''WGo8USMmOEJ0YmI6b0hrKzY2UC56bCV6YD47M1plQEM2OXxZLnY7bTE9UWhCQUdpTUNKbF1KeE4zNVZCT2JhOk4hPEZpJURxYHk4OWI4YGl0UXZ3Y1creUpXTGJxaiFIWlZnNXs6TCpVaVMmfTZlcmRJZEJEczAmWklPYUJKKXlAKyFqeE1AUmw8UnBpWltlYCFxUzEuR30wR19DanA9czpgSj0/''@;'; put 'put ''OExkWnBqKmsvI017SSF2Pnw+c0JtMVZtaj9USExCWnpgVENnWm5pfkRhOVZ5OSMyMVpWKEk3M3lUMDBDOUJ+bWAxODhAVW41P1pUL09RP1VhTXZWWnI6KDkle28pOGpwPUplKTEmQUNwSTUkWjRrTFNHKG5KV3I4dmJ4L2xmTlBAQm12T0RRbyZNeCg/V0l1U0d7cDRaY01JO0l3NHBQKS56ek4r''@;'; put 'put ''bmVycHJoVFRKYX4rZSlrO0NaOjxiSipVO15oMFNLTkFuZkJEUnZyLyxDXUE4UGx1WSw5LGo0RUZkI20xWHFEPmQvPl1AR1Y8TzpfR0I9OC5eTyg5Mk8uYjZtKSkvO2hfU01vSU9yM11BUT1LalkoQDMoNTN1WWEqUntoYjkrbm03ekpRYVFgIzk+N0IiY2F5SXVZIStYJTIiWFZRLyJQaFQ9O0FW''@;'; put 'put ''MDFROUFhI2Vrfk1OT1ZQMGcrZUU5VCM5b1lweVU4bDIyczM1JnFMMGxkYTVXTnQ1TDU7VXolaXFPOTpmJkB5KW0lM1hnSiZJPypgLy5qLHRkYzlQLmlAfnE9dHJZUlMsUVZVS1pOfHR7N2YuQ2V3KCsmL05mRSxDO2ljPC4xZixKREUyV1AwenhrYyFuWHV2LjVHZFJEfHFdeEpvfTYsUD0wLDNy''@;'; put 'put ''UVF6eClEelQ6Vk9IRlg/Vm9scng7fUB4S1ttQGNwfS9SbWp4SkYuaiRxeFBfUSJkM1ZUJWZrKHVUKkoxeEpzTE9ETXEvcmV2djEhT0A3VWIwTyhhR3BgUElNOSQrbSpbMk4maDNmZkJMNy9qLE5bMTZlb2Y/clolNW17WjYmLzVRTiM0ajBdOTFRb2lIdFdSUzNATnBKZWpsTmo3N31FWCQrUngq''@;'; put 'put ''ISgzO3V1ZVQvPF54USk1eWl1NVEoRGdzSEN8VGdRKFF8K1BybGNsRHZwRzIuIj4odHE2NUt3Yl1GWUovJnZ2bF1+ZHxFUmZ1U3ptMCwqdCpeJExtTC9EM3Y1UTVoMilvIWt0WTt2KXJ4UF5udDNhX3ZuTXpvZCU+ZF1PVzM5UWpyZ2ByRVYjfnd4cFIzITY8KCltellDZl5db2c6QzZ3OjFFWEte''@;'; put 'put ''UWteNSEzaFtbJSRaUkZuP3I2RG58NmVQQ2JfcUd9ZXdpZzBSUFAvPlgqIithVCVqbyJTPkV8V29XSXg3YEA7KTUrIVVyJD1GJl1iWHZmaTdTeG5WMmIqWTNtMkV3P2hNIUl9IUUreCM6eWFaJSxyflpSYllvSU4zP2w0WGV9LDk3OEdmXnxQZiZrNjlMb08qLnxWPllMZTBJYUp4eiU1UTJZQllJ''@;'; put 'put ''TyUqfWZ4cylHTztSeTJ9cFUpNiQhTEdTfU55ZGdkX1I5P15tYz9vcGg+Yl9LYWY/bkI+PmVJQTM6Y0l4KElrPEBiZHtWWUAydkV7ITEoaVJvMmtZa3VATEIwXjt0a15PbW8mVksza3ZtL2d9cGIoKWgmJl82cUJuPCJ5Q1QxZFg/aixsbzxDakB5eTRjSTMme2ZUWV1sU2hKM3JLVj9ZYn1sSDdi''@;'; put 'put ''aF8wdENadkA+KWJoOl4xOFlqbk1vITlTNkVLOU4+QilEUChbXlY9MEtwOTp+cTJYSGZiaUxRVkJoSDc2JSFuY0hjY11UY3RTYGp6ODl1LGpqR04pZkZLQTBfIilHRD9iUmFudzZfSzg6QDRnX2V5ezIsZys4OF5Qb3dsI1h8QU5LSzM+PjFgIVpKU18wMHUiSEBCQjhqbEBHTyVbWS9XJE98aHND''@;'; put 'put ''cU4sPzsiNy5wWjZkbE9BRU8iUmZoKk41b0UlT3RzKjpbWT44WF9QTEhNVnBlfExLN0s8V2ZhPzdPRFJ4SEtpUmtHT0M8ZjJFZ2VrfXxLKjdNZjJZQXRbRzsuOiZFJkc9JUZAJXtZaStaPyJzW0lzMVAmfCJSMCF+X3IwOW9AXzxYb25ZS0s7Jn50Vy5MNTUkN2huLDZdSTdEXzBxIl9SNzp9RF5C''@;'; put 'put ''VWBDZXhrKFVWWVskUSU0Tj5ST2R6Tns0b28oIighaT9FZEpKTFFUfk4kbF9nZDc4S3Z0TzJQJDZnSiJ2ZD01THJsZnRwcW4yTDRHT0RGUk1xQE53LDlyKCx6XTs2Ynh3eDU7cWEyZUpiKX5WQmRiK3VGY2FVPzMzP2tAcW9EeVc0ciN0ISVqRTFNMnNqYHxGJHkkcShqc085bypdUlZoYy9BbVJ3''@;'; put 'put ''NSxTUyM9TyU1JHYzNSpaKV51Zz0oIVh8LzxJckoqWEJ6W29aKjJBcjZFUihmd3pGZlFuW3UsU1ooPiVgdXouOEdrVywwRWVQSlhtV3hPPm04Qnk4fn07TiNQZiNVJWJNWF80IWxWMVt6TUBMeUwkSnh4TjltfDEhLztIdkxge1VTLkZzaU9fJWtybz9JeWpXMXZEKzJlQHRWS19wOzhZLF1gbCw+''@;'; put 'put ''PntALj9ddX53PykzeixrTEdHZH1qJEldR0FiSXpIQThXMHVNSzdqOXsuUmVfaFZuVWJpZzMjSjNQTGZdZmdXJFhUO1lwK3lgSVZlRFZMcDtXQHY3fGV+fUBhPUExc255Skk7WmJlWWZkRF9YQDtGXSl6UWlrMmo4UUtjbncoT2M2cFIlcEErNn1HaHhoS05iX1UpT0ZHSj1QQjFTPTxST0pOZC9j''@;'; put 'put ''SFZiKSRaRT5RIUZqTjYoMXBFITI6MyIoPlVIRD1bZjdAKmMrXURtX2xSZ3MpYUJsUS5XJmFMI1l4WldveTlZYSV7KHdTeFM/NT1JM3BZM3YySyJTZGMvK0A4Q3gpcEtFZE1ZN0YoYndHdWw5JlFCJEVzIkN+eUAkdkJ+aHZDKlNKRE8jY105cXk/JiQjLz59TkhzaGlVZVpLUyZ4SyMwd3UqdFld''@;'; put 'put ''QHRWZmU6X0w5d11bQ1BLdDIkaWwrfF5VdzdCLm4uWy55TnJ6emZhakdjSjR8JDt3P3ZrSD87KmtnKS80T1phMGBAfSFCXXNjQ3JwZFQlZCxbeFtqUWh5QWM7UXw3cFdnLFBPZEhXVH41QiVYfjFGIlYsWT0vajQiYzBGTUZIfmYhaTBZOjBBKkg8KnY8P35pWFZDRFNSZFo9NjpfKUNnOX5oWH1m''@;'; put 'put ''S3BPSiQoRERpczsrSU8jUEt+ZV1IY0xYYl4wLiwkPTF8YE02RUIuSkMpYTskMjFoPkQqcnEpN21ReColPWx8Zn1MdVNdIkZVQnVsczVgMjltVXU/Qm4yRTxuMCNnfXgoc3JNKVlEdzg8Ql0wZXU0YmFeVEk/aj4kc2RbOjghOzcqTCQza0UrbUw/ITpfOTgoMjt0ant5U0pYcjBzRHhtMlFZVlJR''@;'; put 'put ''M0tNPUZUSWUzOSZKKUNhUWd8bDJPK1lUYypDYHkzY14/Z3EzbkE1aGpyWkxQNT1VJkN+PXpZPT11WS58aVElUiw4MCNjcyE3I25FamFbfi8yb3xoeCheIyUmdFpTOkhybTBQWS96ajB1MVtNRyI2blJIenM/YVAvfkQwXnEhZFN8bEljLjRfXyo7RDsjSF1bRVBtMTZXbTMyOVVxaTFsQHF2WVQj''@;'; put 'put ''WmQrISxDWjxZSU5ldWpdLlN0Z1tAa2xAaipHWkZMOXlCNHgqQiIzS01NT1EuaWBtTGwvcXQ+QUpNbSl2KTJDNm9XSigwPW8hUCU8Vz50UkZPLmttPkM5eHVAIiQ/QSRzOm9VO0BVUExoUUpiSzVmXm02SExOQ0pRXS9sbm1VVUpVSVlEcEMxPkp+fms7cXY8XXQjPyIsel9VSiZeNjtvJExlYSZH''@;'; put 'put ''OE1tZDlkdihiNkY4W2xNbG5DQzJhKjRlMG9lbH1ifE9XXmB0VFQ8QkU6V0JVXW56NFZWfFReNGl9bHBMLzx+ZD03KlRlOGRnZz1NVnckYGtDaVJQSj19b3pSWkR+cWM8XWJLbXs/YUxIVGRJYyx8eGJ5R3IwQ2ZTeChIJGE4U2NCbEhmbCxJX3ZTQjkwXTMoRjldUio/VEgxOVQxJWZyQXtfSDVr''@;'; put 'put ''Vjt+KjxIRCgoK1ZBNFFacl9NN11aNERld2ppZ30vMj8zLkFCc1NHRktVKzVtQEo/MFAkVU83SF1ySFhDO2NBc0VIT218WldYbTRYPEZ2OktNe2gjd1JubylHc1g2LEVgRXgrL000IUpybjIqaCNHbitOeTJeW0k4ZyFZR08/TGZ2Lmo8Yz1DPmFQMSVsXnhGfCpOPztqKzFVQzF7MWl0clFWfVsp''@;'; put 'put ''WW9aakBXOi59TjRyfGYzcS97YiF4YERxOTBZXihaRHNJNDpgbThtWUwlV0dwezZpcU47bGlRP2RoRUVLO1JAJSgzNSxGYWkkMnR0QlM8OjNXJkVXWnJVdkB3Iz1DLm9ZYn48OG1GfjRNSlRgYDBJNjArNXUxbDN8Z35QbzhoOXBLKm4oUG5xaEVuaFtnaHZTZXg2PVluNEJdUUcyIXoxUm15WUJy''@;'; put 'put ''QVVgazJuSC4kR1VnOnBDUHxLPHZ+ZFtPTClfVHB5eS5uOjBCKEAuVV9SbX16VyFPbjEmIy49dCMyJnV5NGl9dV99PkZ+JiZqJWFDaix4VU1gN2Ajd05lXVA6Y1FMNFpSPW9XbUJpWlY2Ync8N3VedjsmMiFCQ3YhW20sQDR3dVRtXTx0WTgyYWZWWDBGbi9kIndOPVk2b204aio6YEhHTHgzVS8p''@;'; put 'put ''LixGMlIwVzpWc1s7c2d+RUMhNEdOV2d4TEYrX2wsUUUvV31aaVU3SV5nL1Z8YGRxST5tMU9NQTYlVGZNJmo5UWkpXVlPLix0XShsWkY2ZXE0dEBUPkA4Km9MUDQkKj5hbCZSdSU0L1RrT2k7I3ElblB2LlY2Ri8xWG5KY0FSIlkiP041VDo2JDNpVWM4U1lSXXkldX5ofnNARTpMPCh5aCxHUH1m''@;'; put 'put ''cjUsS3wlZD9Wd0JKRXs4V09PLkVUMVB0VG4hSUMxR0lYM1A0aWJ0O2AvO0E/TkVzIXpOP3g3QTg3MD5yNmRsTmUycjE3REpRa1V8I1k5IV5VRERZPExfXl5NX19wRU5veTozVS5jWmFZV1ppdHcycHp0eyZ2Lj82WVVaUWRPKE8yd1lJZCxfZ058ZTQuUU1lVTAuaT9ffTdAVCVoeEdtRzVqXmY2''@;'; put 'put ''MUBYVSN9OnNbUCQwKEEqdW1ENlVySyE+Q059QkNPSCF0amN+eVYsI35lMVBoWjAkP2w9Z3Bgfit9TWtYJUNMYmMuTj50Pno8W3xYVDR6Plorb1ZoQ3RLckNfKigkOktbanAmJDgkdGt1MXdAL2swO0tGUkp8Vzo7Syk3ezpEI1YobkM6VH48NHFZMH52SVMwfihZfUpJTSYjXVBWLHQvVkMhJjVC''@;'; put 'put ''aCtISiJkRD5KZSFbX0llTDU5KVRyIzFRRnAmXlpXWDVqY15Bem9WWyVDeWJuQFk9KC4qTGV8XkxdcixPYnJXOEt5I24iYFUjS0AxJHAkMTRrLkxyYkpre1A3NylORSI8VHJmYTFfbDx1OEsoQnV+K3NdZV5fQCxtcS9jMF4sT1BlPWomfmJnOmNwK1FxazgrIjhhdiZTaS5BXXRDLDhEJUtpd0BR''@;'; put 'put ''JGJqbiNiTDhEW1Y0VT9ofXx+X3MsUCUydChiUVtEJU9Ld1lAPV1ocXY7VDMzUEVVX2g/X2tWWzNfYklHWXRCPWdVYFJ1WG1xLH5wWy9gfVRGPEQjRnhLNmR9Q2pqKWtqd2RqZ1JqI2QrWUc9Kmk1an06PGhzIXFJIVJJdThndXtgWWZoP0x9OmxlNlNyfUh2MnUuRTRbbUJ6em51RF1kbl1xaj50''@;'; put 'put ''b3p8M1FISjh7QElnNnRAJmE7PDBXXitQQ2FgRzIiJklSOG02LGQxfHIlZXAyRkAxVypMd3JEPDBeMzx6XUtPKDdiUXI2PzVkYjJXbWBHIU01Yj9yTyU1ZTw/T1tQcUtNOkwqTnNzM1YjKzx8MUUsYVdTL2IqQ3ljcFpIZ3Jje2lYcWQwJCFqdiNPTkFSMStFIT1gJXoqcktWJkwqPCNMVV50XT0m''@;'; put 'put ''dTc/am5+dyNdUk14Ymg6c3wyfGc/PHFlelUqU18wbG1CUFA+djRFJHVhZEw+azI3a0ZrWVVdd1pYcWc+dGRTMlE8NFhYTy4uVn4qcmwqfWkqNTJ3OnNVRjc6Yj9vNHZjL2o+ejpRUyFTY29ZJmlCJW5BbHRCJiF9a2p8KmgvMEFFJTBfKVdGI0V0U00wMChvfUNOOTxyNyQ7a2BIPmhPdlFjalta''@;'; put 'put ''a0VgYlRESkpHZFg3TEVYdD5Ccl5bKnIjLyRSand5YTV1OCRfdyk3MDdYPExkMUIvYkg3ZGJkXSRsanJIYmlWLDRiPWFvZUg+RWpSTiMvNSp8cDc9UEt1dXZiPWtRanROLGNkWGNZN0tbdVN2WXoiWm5jQT9LUV94VVs7MDhkX1RlKmNoZTslVDhFR08icHM6VlYvR2ZMIXJIPH1kT21CNXcqN095''@;'; put 'put ''JUdHPjZ0Nkt4VDVPMEl7QzZALF5fJiMrY1dALiNJY1FxXiQvW1VeTCFaWDB5fk1qSkd4KnxCZ3h8eC9Hd35KXXJwdT1CK3x7dil4TFUuKGI1Wzx3dihRYWNNYzJ3Nk1fb0xGfEklNGJsUj0ja0xyOHBRaGEpO245WjxXJVI1MTcuRlBfenBsbj9WaHNCIU1QbFZnPTVbO3p5TVZjeVlPT0k8XT9M''@;'; put 'put ''ejMiPkJCWnV4Ok5+PnY7PXZHeUhzcSNpZUVqT25NTzBdZzl4MWNQWEQqO35MY3dCdk0ubWxDUjZbVk9MLyZaVj1UdCpWY3BjZEYkblEkOTYuOD94ZCRSZXJLQmVudmNAZSk4XjhkeWMiZiUqZiRONFJlfUpyT3BEUmo5Jj0lQnhbUH5MKUk6OylUUCw2b31qeXVgfTEqQ3dsaWRlTzZlI1BUUFJd''@;'; put 'put ''V1hzOnR0Vmp2c1B7dCxySTF7eDw6KmhPbV06OFQ0TnQhfkF9ZnwqIXNnITQ3Q101cFNAfSY3Xmo7X3Y3bkBheTFgUFt6cUZ4ciJycnx9P3xxbjp1Sno6KWY1T2ZabDEoZUx7aXA9YTxkbSFiW0JhZjN4T1kxbFJXPF1mdld4QyVGckAmbSMrdXA5ZjR3Ni9qaFJWJV07NzUxM3VvQFsoOWQsUFJ6''@;'; put 'put ''REptaChaOiw1O180Py5MRUpbZjhRbys0Qy4oRUZ+ZkswTUI6IWsrOkh4KENgfm8lV2VqOHV7bnQkZ1pUfDcmVzs/XmZAe0Z+QllhbSROUVhvUzpnXnlOeW41PWcybXptbSgjJTNCaWVeWG5vdXlmTVhFRF0/Y1Rael1iVFRZPkg3R1FUUUo/M2d5NDVsOnFNMEFFUSxeV14qMCFEUk1WN2wjdW4w''@;'; put 'put ''fDBdPFl7bkMuWH4zYEFNKGlxdFBHbEEqQGYwRGVGXiJqMWsmLzMuMVpuaHxwU2c+ZnpBQ002dmU8JjFsNHNtazxhKSo/Q1k+fD9YelNzNiM6QT9LczUxeCJkY30pdDx4MEY5cFt3QzE/PjopW2pRa1Z1c1hSKjZjRERCTiR4QGQ8NDVOVl9ndCEobl19VHpPekVnfCpnKyY5WEBqY35CQEpwJFpX''@;'; put 'put ''T09Rd2NGUiE1IzhCT2VgJGFoUn1MfWM+VHpyW3R6NTBZSEdZRXtGXmQrLnhUSSZiPHcsTU5xMmgxVSxHWVtEYVNSZ05IZCY+a1BOWHIjUD96LDlJITU0VTN8WXIuSXRoMGdddSNxKU9DKy9QVGtrVDZELHY3WVohIU97W2JhdG9QaVQybEJwTlhRL246Pj9bYWAhUUF8Y25eQUlhfmo1Iik8fWpK''@;'; put 'put ''aS85bGJbbCtDYXglS2F7bG9zXjh6YXJNLmk6VHQ1PG98IzVCSTU2MU9TfldeTDU2WXh1dHdrKHZuYj1ePEQ4P1dWZlBeZ0N6W0M8KEd8NUVIeFh6ayZUbj1eLzQjQ3s+OTwkQ1hpa2B7LkNOUWxuVU1vajF3PD1+fW0oU2hwJl1ILjJENHI7Lix5My8hZmBIKUk5bXlzMHU0SFdDKWthZWF1bzIy''@;'; put 'put ''ej47RjRNU2lbe0cwcHxWYSwzZ2U4TCEpKURgKkRtcTd4cVZXMDFEVFJ7N05HeihRSnFZWTNnRUslYl17TEE6eHJJYCsqbD5hR1RTNGBnQllfJVVNTThEdXUwZFVYWWsjWmNbOnl0eG9XdTNVVkQrcDFWNmReMmYlSCNzdVlEKUJ6JlY7MFlCOj1tMGRmSU9mQEEwOl9hNTB9aT4kbTtzdWVEe2hV''@;'; put 'put ''XjpyWVMoeX5yPXRVRWohek86Llg2N1hFSlZRO3RabFMsQjcuejdGYXVQWTVAU3Q+P19sP2lUKDQwZjBmakx5V0d4PkQrXWJ4ODJJI2YxLlZ6WihXUT9QLHpPLi9VUz1zPzExOkNGUW1RQC85dUB1cVVIfmZQanMrOnJFP3Q8WylNc0dYJiNPemYqSl19I3opQyQ+TmBaMERKSUNYJm83M0x7SEJQ''@;'; put 'put ''UitXKWpMVWghXz45Qj4sbT8rMjJaW18iZ3clcTk2OTtYODREKXE4U31mJn0qSj5wKHRgXjhAMCN8dTw3d1RLKzxVQzpPNjdMYDBxPSUvRn1TL3xZeDpxNEM0UzpRZlQzbHNBWG5ST2pCYEpHR2kzfGFWWTcqbjtqPnU0eH57SFJnKVorOj4kKiFjPDYhbjM/KlR8UiE2N2giK1FjL31XSjphPDRQ''@;'; put 'put ''a0NHYGVaYV0pejQ/TTcsb1dgOTBPMnZ0U3ZtMVJyOSRpWis7XSQ1IzkqdnN5bFFWQ2AvMT4mLGI0cWNLRlNEckZpKlB+L1MqI19SdWA2R3NxQ0NfImppLik8OyM6bEN8ZCsoXjVlN2NFcDxCYUV9QEBGcUFpN0NuVHxfZEJqcipzN0JyYntka11XNyNybXdoczxHXmlxUytKbSFBV3xLa1lDQCRO''@;'; put 'put ''aSU9L0J8KDhCLyNhQU95ZjFxWEMydjRlcVsiVG5JWkVjbVNCL3UyTD1fK25BWWFGZEt+QU9ZbFohV3o1X11Ubz9BJEBmRmRnWXRnbisrdThYb09CRjxwVm8/VCFafGpUaTssVTtrZHd6QkUxbT0pQFltfTx4fGV1IjkzYSxQOS9dY293an4yVFVxQ3YrLEtMXzFQelhXfV5iPEleQ1daSW9NZmYl''@;'; put 'put ''NTF4S2hgIiNSck1eez0/PTN4V11Ka348OztqKHVpJCZvV3xLUC5wSm1IczpgR258VURlNmRXYGY2W2JyZ3pHUD53VU1ydXZMRFI8byRtYWhAaShsYnt9YWBockRrLjxxMXVCOFIuUSsyUjxYPnd2fXBLeStOVlk6SHhEWVoiZDg9eUVdU2YvWk1fRno+a3U+enxvZ3I7eHJ1XnE5d1ssQiR0MDco''@;'; put 'put ''YWQ6Q1FeREJNa1E0IXZIL3g7QTw3eGBjZW8vIX04eFVAelA3azo8dmYmcWpsKSpITU0pT0l+N35uYVRxVkIsY2ptInQ9eDpYLjE+MHY3dyNHUXJocmZTU0AmQ0h2bXFmYFlYKmVeOXRkKVg+ZDRAfmA1O31EIXN3MVltU2EiLyN4WjtheUpqM3YqOit3X3ZYWV5Scz1yemZbMDNbRCozSl4/IlFB''@;'; put 'put ''bSg0T1pUa3BFPlU+ZyMpTF9sLlcoVzV5YEdzJUd0aDFWdUdnIkUmVjZwfFlHdGRTI2hWKStNQFE8aGEvKXtpPE9gSUtSJGtbczheRmJwXXQyPGtPclE5cE9HdmEvPm82PlJrcGI2WzliMHZLVHczakJafiFhbE9VNDJQS0ooWmJ4a0ZIdG8mXWdyOjJLV0U9L0Zwa1A8aThMNGlQR0d6RzNFUi58''@;'; put 'put ''ODdYNSF7dUpUVyJpN1tgdS4ibT44Il47X1lZK2kxKFhLOzBnLCMsMGUlY0ZEeEI0RFkhQDBuUnxwaSFgMW49YjxucTA3cHtRLnhSZXEvK15Ad0Y4KWdZKUU5cGlkT0YmVUUvJmx5RipPOW1od0MkRHwkbzw3YkIxcGtBQl17c3x3L3BWUkBqP2Y9fCFSfDBuVVAvTl1oZF5IcnMhe148ZTxYZ2Uk''@;'; put 'put ''O29ZKSpIVn1LPmVHa2Qzb3BUZEFsOnREXyZ+ZCxYMyQpK2hVNWZgSGleXXR0YTchL3FsNjJIcHR4fXJlWkQpb1ZyNDMqbDE7XVpHOzpnRT89ai5+QHt3MD5CdG5iP193SGM4P1RQbFBOSEMxUCJOXm1fXiZaNzdtWz5temJlWnt3azNkJDxJMyIhO3JjIUJ6NkUiemAzTlZjTXc4fEdEcCVrUTVw''@;'; put 'put ''JXxUQlMhTmgrLzRsRldAbUl8RHh7VTw2Yllmej9EMkskVmkhbysvdUpeUjZ2UEIyWUVDSTlaVWV6U01sRmd+anJ4L3RFd21RRl94aUlLJnNWelcieFchXyZlPTBKZTJ2NlBWPzc4WiJUT1N0Olo1ak43NE40d3VJJXZjNEBOJU9PXW1ZXWM9UjdPUn1tX3ciTyxffUtmYkZjSXlPQlVzZSomWUpd''@;'; put 'put ''OnlbWDV0VnBES081PXJtZV53UXBqezIobX5qbll7ajFMP3NVcipKeS5gMHolekFAMXdGWj9mS0o2T3FvOnwzJmBmQGRdQysmPk5JVmQ4X3VbITJnZDo+O18wPzl+dkl8dHkieVh4OTwzZElaX21fQ3QzISpqUCwhQlV8eHI3Y11bampAelBYfmBVcC5IUy5wWnFmSiUue2B2c0d1KWNDZVZtOXY0''@;'; put 'put ''XnBXL2Ahd1EiQS84WnBoPnxnW15gZV4zZ2xTSiZed1dQbGJKQy46czVFTHw/e1FIXUIzJGBhMmB7aDZGXXNXZ1hsdzM4TW4idTFsNi9vdkIqdVp4RE1kOiJ9QWs6MEU0LilxcDU3eldzNmZ4XUlvVjoqIVIibmYzfDttQDwxSFRYeXoucXRAYSlZekpKSndTIk85X3s/dzJkaH06JG06OmoqJEZH''@;'; put 'put ''NUAoNjIrZz1tYHlOS1ZLcFNec10sT1QoWXVHbG5zK0lDfSEqJEVBZm1DTzhyXzR7NCgwWFJvUXU4N3h+dTN9Vip1LlJ+WEMrbTUlY31zOzIpRHVCZT89P3RSSF4xKSU7Y2JqYHUsUi4rfV9hNUtEOnBzdTBJcSpbVF9kVm9pYWFFaHA8VC5veEZTT2Q6RiwoRiZkaSV0Mm5aKjBPJVY5W287I09K''@;'; put 'put ''d3ohUDNEU2clblhPYVpFaVtHQHcvVSJPaldBTz1ZL1ZUQlp7SkVQPFNvfmBUcWFpOXxaNURodip7MD1qYiUsMlszIlVYUVlTVH1gNTo/MkN1UUQ4U1Y/eF02JlgzfDgvOTR5YzJQWTJBQDFFMC5MJCROUHlhOWRRZEIvTz1KJkdtNjdZMTtsa2w8MkM1ZHBIM153JVBrczQ/YU9QIVgrcDErSFF2''@;'; put 'put ''LFgpQjExPyp5eFA5WGFhRC9nVGU2ZTloVUtGRUFRKCFwdU51NVRFM2Y7PEkjY3JNLD4oISt3REhYYGFiOnZyUXopaCh6QlZfJTM8OHRVR1Zge25RUTt0eFsvTEQjXmR9OyM2I2dRWUhCfFtXQjFAXnFWdnx7SHRfVGdObFBEQ159KnIpaF5CKiNrT1MqbUI4Xnk7dElrcThEfEtIdzB2VUJlP2pM''@;'; put 'put ''RUhqZV4zST8uPD1xJip3VyRjMmAzUitjRix4dkxabVosYCFFNGMlRCpsIlUxbEFNNEgmYC9nIkJeMyksY2FkNzNqakoxTk5hPGBhdyJGfG5dbWhNTUUwKF57dFIvUDRtXjYyOSRAYWpQNEFqV3YlTCI7amU7I2NJUHB8P1Fpd25TVi8qWj48dmwkOHcwdUxeQ1NDRV9dRXJmd3RSTG0mYVlxPURN''@;'; put 'put ''MjdMNiVRdFdIJDsqYStPOF1tSCh+YG0jeUNvUzJQfkBxPVd7KmVkKkNNXjxXaDZRV1o3fEtSbjVxdkoiPzg4WFpoaEt7WjZiKTROV1NVVkhOSDhuRCUyV3BeKStgaTo2NDxGZyVKV213YExoSUoqSkQ1e0hAYUNsX1U8MldeLzk1XjxZJHFnSyR3R0YmNF4uT2cyRTtONiNMNjgmZiRqKW5WZDFI''@;'; put 'put ''TTwqZXBRZVQvSEAiQGgsQmtuUkdeOlsjSk1PTXN0Wyo6Vi5GZzdRUGlDVDJfX0h6T19tWjh5ITh9KURGVXE1SltacEJ+QCtCZDxvJDJNfjt1V25IIzgxYVZNYCxjNkN9ZyRfL1U6TEFKSilsc2Q7cnszNF5CPnJMIW1DWVZwZTY/PjozSy4iP31VUTJLW2hCISNgKjE4Iyt4S3kxRSpLMH1HN1I4''@;'; put 'put ''P3RIRCEyUVdGMk9sfWc4MHtfY2pRPGFfQEt9IiFjMXo6UVU4aDl1JT9xbi5hIk5gaDo7IWgsS0dtdzMoKXE4SWF9aVJmTCVHKT45VyFsR1VeZDomV3tTTFQ7OWxNLGMiZXkiLCZxfGw6fDRFezN2fVY0SUB2fWNjOSNOQzA7bCgvdz9oZCE8MHtDW205cn0le0dEPS9BTz9oenlOSXE+SzA0bTxG''@;'; put 'put ''JEU1O01YPjt7UDpfbThGYCxAZCNoTyR3R1VlRCVyMGxKc2R9TH5eZm1mNEdvbEZtJXh0cjQ/YyFLfiQvamEkdk9qLDwoN19bKW5sJEZPcmZtb1RiKlJCaDVTdj18UUcpXXwkNDgxeSJXKVd6ZTFzVW5lI1NpTClFVnYsTDZRXzZMU3FkLCM3PHklWlYkcVZ8am5YX3FzWyQoSTlRY2E0KEl6UX04''@;'; put 'put ''Pm9uQ0B+TkEzQmRYcjg0dTxgRG1IKVVNXkFwYjYuLExkQm90NCg2Qi5vZH1OKV1iL0lLVGF2ejdfK204WD1IYG00RylaJCs+YlRmZ1hVNVM1NDo+RlBSVFJWJVEvNFtiUj5hL251Wn1qYXhNT0NQNVReeGwqKTxQMF1SYipkKXVsem0wR2Y0R2deZVYsSF5YNWIuZkxaWSJCYWdzRzRtSSMsLENZ''@;'; put 'put ''ZTgxcC9XMFVbekpdXyFzck1WQGgyNC5VZT5lLDMwQGFKOyMmNCklPWpoNl96VEhbXlozI2NbdG9XZCtKTEBefXtrVVtGeFNwbTZkfTZtJU1aMHw9TCwhcGRKOkdfRChVTVFHI2gqbUxFSSpYLC8lLEZ5U2JrcVkuXiN+RV5qMyt2cDtVYUc7Xn47cFFmZnNHQmN9Qyt4RmRIaTRsZThgTmJmIlts''@;'; put 'put ''W2UhIlpZTEslPGguNjBeKFlfcWVtUzZ8JUkkTlB6cT9TLC45VHZ+QitfQHg1aDI1XWJidzkuW1p0dmo4KGZ2QVpmXz17V0ZsYylWbn4yITBjJmdDUk5gMCpNeHx0TigjK0RYMnFlSnNuWmNlJUFGbUB8Zip5P3BQR0B6WVJGRmloTSl5NXdTJmpKOWR6ZDdeIXl4JTh3emVENXFUJD8hYV9LeWhp''@;'; put 'put ''YWF8TjM2aDBBZVo2aV5kSH14I3w0MCpeV305THBrZjs6MjpfSVd4VGEjaSopP045NUd+LkJkOW8kKSlKSU1UamB2Ny9JdzBfdXEpM1hjaHpPKGNaO3o9Qnl9eEM1OEFUIVQyPFdWcz09Iyp9KyhtcnRwMz9KSl1FTn55bndtW3dvRD1yUDZbaFUpQGImLnwjOzAzU2Q/TlJ8OkR1JndALGlhUD8q''@;'; put 'put ''fVhUV19uPGRjOF1dIl9wZVpPTXJXZU9hUkdYWXJ7KF5WXzk7NiYzRmhpRWx3bSNgUyxaeDVeNSo/OWc+R15lL3NeSyM4ZVhnQzZrM2d2fE8xbHh9bEdZVC5eOVRqbV57Sl5we2N5XXdrKEFLQWpQWGdbP2FFdndsRHRGQkk8WmhOVFFhYFZSSDM6VkxbUV90LmR5KV9kTWk9c2lTRHxvZyQoWnk+''@;'; put 'put ''Uy9SdSw2fmJMWmx6fThRbVFjZipdUVMmLHpbcnBQP2ldTTRPcE4oV3E7Pn10PGV4dnsqdmNWeHBmUDVgIl9OaDRgPDxPensxNm8pUXQ0IzhNW0xkKiJwNnpbT1tfMUthfD81dD1KM0AmM3E+dGZ9MlR6K2h1KVQpNS4ubnJ4M2lpPmtCaiVIUiFIZVhDP1MjZFJIQks5RGxbfDs9fDFGWH4lW1Mv''@;'; put 'put ''SWp8cWZ9LjAvNGB9bHJpYTpuUXp8JjVTQ0Zhe196NyllJDh1OzRVL2pVUVQ+Z0JaS3FmLGFDZF1kYFt1LEBYV2cqbl1IVnlbR2UqIVN7d10zaTlkb1VvaDFaeEd7OHJNb3M+aVp2NDdrOTV6bSZ2K3t4eldid24zcDBpXiNBNXcwVVkzKHk7PUlNZl5mLFAwOE9LYVpFYFdrZEdpKWhYX2A1Kz4j''@;'; put 'put ''azhTM00jdWRdeWozUnV2KmBOInpYaWJebjldUkRHX3k0MDNibmtDL1kvcTF1SWlFYy8jR3ppOChCfH56NlNvb0NlL2t8aEF2b0VGfVp8djIwOGEvP3RXYTZwPiwlOzxZaFE0VnVDYyQ4R3sjMHl6NCE1bHh2NUJXI2dWfEU9fTxkeGkvIkUwUDFkTmwxam5oTE0yajcqen5AdyJiflV3dyk0UUd1''@;'; put 'put ''XXBwQVRMOXF1bWUoe3xZR107Ky9FJHokMU9kcFRHVFFvczwsN1RhRzpSc1BFb3N9dVV5YWtFVyZMOF4xQnEpe0koLHBRcDl5I28/WFBiQ3EvKzRyLD5wSGljeVtiM3ApKFpgI0M9S3Y1MGwoWS5xe3paaUhUQFFhWSRSV21FOT5aZnU6LnVGSzpzJCkwPXxKdCtwLzl9OURHZmZ7L1NZfGAwaDtF''@;'; put 'put ''QHhAZjUkSilGT0xabHxoI3olVTgiXThBKmQiRSFPcnw7L2k9cWYoI003UihNRl9mclMkLk9MNHldc3opMjFFbUVHKHNFc1dbZjxFMUFMM1t7dlM2YCxZPVdVYXNueXReP21KZX5daUghJFRNfE1ZT3k2Uk1pcWVOMXM0NTczSXxFXyIkO0NoNF1+dSxhPElfZiFMa0QsPWEvOyguY3NzZStaLGh9''@;'; put 'put ''eHZnO2I+JSpoIU9YYTUrSUZvKlFRXko1Rz0zUDRVRSFuLjgjJGZecXcpTU5dJDRSXzswanxwLnQ8SlZbNnwsPC88bSxoPHdzYyYhOismeDZ7eWV2P0dObTFSRmUlcG8xL3RXTmpOaERwMENfRSR0c20mZGxtaE1fV1VmfWtecjhHQiJlRjtHN1siQndHfmw3bGlzM3VDSVl+VmIib0h3XndOVnZm''@;'; put 'put ''JC5BOH4wX2QuPjk+SVB1eDUpNSwyWktgMyI4UEltSGp6Z0ZpZWpYdTs5eSVJb1Z+NEVXUXNNbis8SzxwWltoKFhseVIkYCFNbmpFdm1NYCgoJFA7PX5oN2JBe0FAaWBpMmdHdGg6QmoqJi5MTndvTH14V0owRHA1MnQ1IUFLKSl8b0l5djFEdFdWbnI2WldQN29xUGtGZytKRnJ2Q2tHZUxEOUxj''@;'; put 'put ''eSxqMmtoOTNuNEJSJWtIaVVvUX5dVSNZd1BoWWV7NDM2bHp1byFbKmRRSDJhfGdnek9gY1toWlI8S3VyK085b0E6XztaPS4jSmJ2eUchWjI9ZU8wQUlLS35jbiNAW08wTDs5Q1I3MCVaLFA7eS9wTHgjTCt1SFJrcHkqV0lVZTRSREBjcSpjLHo2WkN7KWs0fiZ6WnorMikvdmdTQWc3XjxBYVN0''@;'; put 'put ''MVFUfmwoNT9MSCl5UG9+YEA6IUFhJHw7YlNfUXojKjVOY2h6bHE7VChqOCZFanJnfld5bDJyb2EiO35RO2IqPlBsXy5pYCRkeWdSfUF2QCo0KixeYF4wcGJgWS54a3BpO2ZELiRKUn1XLF5VLmBMZUtdKH07MSw2ZjdXPWRFMm1xUTpkIkkjMmBaaUFOOmpqREc3VTR3c1k9W1pSeVJbKlIlPWNb''@;'; put 'put ''VUdxNGgqSmxqL2V0T1tMTVNuUUF0NyllW1JORkckTSQxWUJYUTBUW0lbNmJeIXtMWClZQ0F6UmVYZ100cHtLLEF7R2wyN0V1KE1JTTcyfVRgO3FaeH5QMDNRKVImMihxPjJ1bT41VzpJK0xOeHx9aT9rRm4kQDhrTmFjcmFpLExQaSlgNHhoNX4+ODchSVtjQ20heCZPIThfJVZKOC9McFNRYyZw''@;'; put 'put ''Ql9YNUFmKFdUMi9dRVJHQkU0YEAvcnUheTdNfXkmc3FaaS5WWGUyYzZGUzl2aFtJLD9UJmtrITVnW2Q/dCQ/d0NRMiFzLFVIb2ZOWXlHalRnLzE/cDN5bUorVEw7ak4rQ31iYDNoQjNhTVd2U2lySWZ9Wk00ZFdCaFghRE1oP3hQYCxHMGkxLEcwMlpfYzlGaEFuJlVDJnQ6RjlySDRRS0RPdlNy''@;'; put 'put ''ZG47MTpaZjp7fWlqcSFfLmo4YTN4MFlxSEw7XndeOTw/KF5ELGhKQzROPnt1M29dIzxbfHo6bSZ+L3ZMQ3tUZDRjKn0pY2lXQjk6TU9NeCVWeXxgS0RaInBUZGkyOVkwMUYjPkV8TTlLMlt7M1A4LkV2SFg2NT9QOlM8d25PUT9jLCRVeT15eFZ3SVdvcGk5MmNBSkY2UClnWi5LKS5IeEczQlFW''@;'; put 'put ''MTNONiZkdHxQUmlkbXRsUG5UQihhRDZ2VnpKMTl7eVhdP2YzIV9MLnU+ZT4md214ZUxZZHxnJWExLl8zc0RPKUlaTX5rTyZIQzR9YXBmMkhCOl9qc2tOWlI2N15nWXUhX0NlPz0mP2VwJT5VfThsXV9QVTx1OFN6IjElMSNiaDJBUyMrW28yWF5wJnRlVmQ4M1hmYEg2bl8ofEQxfjddT0w7UHk2''@;'; put 'put ''aihJN2UpXVdVQmJufiI3IlNheWwvJFMzNWFBJGoqQiRfUylDLm0qWHJiTG95PStOSntpMjZQYiJISDNCVU9FYmUlcmNLVUJMTlo6Mjw7TVM2LmdCN3M1Y1k6XWJYejBfNlc9bVhmZXIscyJZezYkM2huOlVGZEpMQE9XdEYhZ3xwQjFuZkM0YnowTUh2aiwuUCJAXWMvWHJpTFI/TW5OXlRDRHQ8''@;'; put 'put ''fjEySTJ5PD5AKnFfKDUpOHl1cXtpN3ZAbDJ3cFphKShKc1BHX0M6XlAoQShxPkp6NTFbUEheJDtFPiMpSUtaaUFFPytxYU81ZU1BPmRGJFF+K0UycTtiSSg9VmF2NC52eX1YdF0sRzNGWlkwLjBVdFlJOEo1ZEBSRzVHSHQ7YykiYFV0bWlna3YpVEI6OlN+QGBgPk1nKTVMUCRxckx6e0VuYHYz''@;'; put 'put ''UUN7WkFXPT8pSkZZK2BrVHVeZUAoMUxdaGJyd2tucTN4ViJgaGo9PVRAYUMzdUdedj1FdTh3PGxGWzBMVSZBZUlTYVpIZUc/cjxmejpwXlolWn5pUVFQNlIifHw0cWFlKjlyITJ2ZHNzK0M4OEVuUFQuYGQ2bGI1RGdxbCViZyRXRyp+fkhlcDhjYntfbiZLLiZFMT9yTG94L1M6Y0pgbzJ+RVhC''@;'; put 'put ''akZCbkZ0W0QsKWsvLD4kKXRSVD49aE9XaDw4W0NrKUpVVFgqTWlZfXpoVDBzcnNsJDVTOnFJPmRJOGRCKXdeZnFkdGN6JDtXejZzbTlWe0RSUFlGKlQwSXouQ0I+aWAwe0JxQHwpck9OZi5pJjF4QHkuZkhPI1FmZGUielQpeWAsSFczPEVdX1trRkJjU3pAL0hLOWBsLm0rJj9IaXh1KjdSR3M5''@;'; put 'put ''RFNOX1Qjb0ZqIVVNe3Fja3heb31FQCR0emxtR21CJWxJamVjZEpQKnhjcFV8fWFCJnF9ZEpgbzt4TkRxOz5ZaXE/JUBPUDA8ZGkhcW09dTpoLnxAITAobHNtJj1vR1skT05nNCJOciJffCFSU1ByRWRvRU11YkxDT0d2bUUwcSZSMEA3Y1o3a3J4ZTdxTnBAdUg3cGp+YE1lTDdJYj1aYylwbCl0''@;'; put 'put ''ZTBINGAodSQ8VDg6VUZdcWMhLmNfUE9KcjBiJUM/K3Vfel9EMFdfeEMwWzNZY2x8MjJNUER+dlMxeGZNMXdvb0E3T018c1ZeS047V3xMWjoiVW9QdGVEcFA3R05xNkx3QH07WVlHN1d6YE1HPzhKV3khSG1EellfR1B9ZXFiPjdJYSVlYERmXSNbOkQvfDxaJGU8KGQ8W0dsanl4azRFSzFVTm1N''@;'; put 'put ''Qns9QT1sfDZKWWYyJHBGOEMubit3N3xgJVhweGlNMj5Abm5MMTtbXmxFXTQ4UHxvan5ZfVM7NEFfVU9+KnwheyE7eDwpUkpDXl05V2NPR0glZG1rNl1oMiRuez12XVZbfCVyKD9RZipxYTskcUsqMmJ0L3JaLF1ndG1CdUt8ZDtPITJOR1MmMUA+al9qdTtDe3V2SkIzMm0qW2ZpfGxIXXlqTCo/''@;'; put 'put ''RWZ9KVFHXXdLPzVAK1dAUSomSDZoRWwlPipOYGVhImJYeGZzL1ZsKzo1RV5AQHxiSHx4R1NUJkcsdXdmYnxBclg2VnVAKV1YJk9NOVImYiNQPjRiOUUxZUcrWWleJExGd2t3ZG9qMGFpLD5TN0xyUWxbW31GXUJmaTt3WGRyQ107KV5VfltKWUpKUWF3fmFVXUZ4Y0hPVT5VViE4KykofmlnIUZ3''@;'; put 'put ''LHtrOUhXNmFjd0lnaXg3TG5vK0F1Y1tuXSxRIT5kTzVMZ2Q/MHxkLmxkPSVaNnxONjtdJCQjLktqMmhoP2RoPj8pfCI+OVdOJEdrL09RJDpqTldiISRaUltlPE89eSFFYnd6RjczeFV2SyQ1e2BANkMjYW1qXS5tNzY0bEt0Uy4mTSokT3dnWWEvRjoueG17O0M7aWt0TG5GenFMLGVbazQ7NXpQ''@;'; put 'put ''WE5SeXIzdiIlczo7R2VLOk0qXk4mW3plVUpmTlhCZUo1NDM4fDs3dnJbLG5QezpbTmB6ekRJRj5iXzpzeV5NIX48NWdKc34iL1RWVnwwblRRN0J3OTV9ZlE+VEQiQXc9QWh+VDNONCVNNkMjYHFgcU4+Jl1UdHBxOFUpNCgjdyRjKTpucUNvK2NSMXBKQT5oJXEpMzVsV1JrXjp0IUVfVFc6VU9n''@;'; put 'put ''P15oZGFSaiJ3YSombk03K1QsbkYjQ3JsKUApITdZKDVEZ2NmYklgRlJeQCM9X1JLUTc/SlhsXVFYPHdSJitnZXZwYypsM35pez8oOClXWnFHU3t8dD8/bD4lPGRdIzM1XSRtVCYwdDA/aW9+eiF0Q11fRnk5fjxsWHZgd2B1WyNLIlZEU1dEaipbXWJaL2VMS2QjKz1aWUspXkt8eFh8aG5XOEI/''@;'; put 'put ''ZT1wTmdIQzJNOklJOyt8aHVQRktEa3M5bWhUflk5fGV1MzRyOjVQLkVbWWEvPnY3XVd8W054OUtpZ3Q+IzJnPkohdVptVkxqVXx4MDYrTnpiTnVSVHFfIyFuZVpwPSNsInsraWg2WDF2Sm1NaUt3WkYpPjJJLF9ZM3B7Vz9IQiM7Ny47T2MqYCgpMTJ5YUNpKHlzUWtRMVVRSDZgaFQrY1NbLHkv''@;'; put 'put ''akYyJn09aTRRTzxARUF7QG9+bUx6RD1MenF+YVElfWM1TnJaZWNGXSElc1s0Zz5RdlRVQVdTMl5GI28lS2djUTFRVWN6fVddO0N7LFF9QzxUdmA0THR5O2s8RTEkLDZkaGxxN21ReCY4VS9MLDkjO0peLEREaE5vYzpdYEReT0AzWDBIbXJaa0UwTTRHdzVEfGg1YXcjQWtbWUZIW1slcnFvSHxF''@;'; put 'put ''UUAwWnd+UCZWLDIqUVVMSkFqN3hqdm4+X3VbbHBXbGxTaWZiL29WSExlJT42IUQ5c0ssRVMoIUgkfEc0ajAxRj10VU40X2RrR35QJWI2b0Q1WmNHeFsjVGpgY0I/ajZJY1goW3xIYVF7cEZNKEszYkVSbyVzbDplTSxabnMsP3tHX1pwJWExKlN+TG9KPDIhWWt5K3g2RWFocFhpKS9be2dlbGBL''@;'; put 'put ''NkBXZyNKSjdlT3ZySDJhYjUrIy4sYGFZSVdKLlNjUlZtWnJuX3BMPkVlYCoqbEhUKjVJIUJlYkYsRi5bYGM8X0VIL24paERPPGdxJGdaI3YxLlBydFQ9TFEoOERKfWcvUn1hdmY5IyIvaVp2Z1ZWLltsQFkiXkwpMnZeTCUuYXA0TnNvTzEvImVEUUphRDRoWHRqMyJJTVJNdENzYyNKRitNaFhW''@;'; put 'put ''KzB2ZHZSVVhAWC9oeHNIZXB+LDczIk44IWtSSGNkPyRgIXszbDV1V2FbdiFLd35nJSNoL0hKKi8lV2ZyfGtESURjfC4maiouTTxQelQ2dElOTHZaO0NCRVV3d0Y4fDF3KmJ7RWd5UFtIQmojQzYjLls5M3Vmc3NNUj5RbGtDdEE2THpXXSpEamp5eVpSVnBWUkEoQFc7PS8lRExsIlNhfnxNfHUh''@;'; put 'put ''aVg4ZldLUyEzWzNWPGkwfmhiWil6VSxpUlI4KHNZK0VFUn4jcjNGWUFFUV9oV3NebWVEQWdqUkBybFZRSzBufEtFVTo+LHNON0JgVGMzdmhnYVYwVDUlVjxqKVIyVyxFX1VtKiJnMlVzR3hfUFpJZ3VycSYleTEqQ2JwfHI1PFIzJHZSdkI/YighSkI/diQ1T1pZdkNqbW8ueHpwM3BmVnx6WjIu''@;'; put 'put ''TXc+fFVuKk8ocDFgV0ZsPnowZmopLG5kaHNnSDw5OzcyRnsrWSVTOmJKMjNpO3p4ckdaJGVSMTYxKT1BMXkjKnM7UzM4SThseHRZP3YoYGcsUT50XjJqcW1bJHF1NXlgNn5mS3MqPyt1cEpiaTlYc3FAenwyXiJsSjF7X2BRMGF6NG1uM3xCZVp3XSVSJGVxI19CUStvUGZ4MU0lLll7MGUsRGM+''@;'; put 'put ''cF1HX2V9UG56UnZtY0E5PCF7KzsxSHJWVFFsP1BiJE5MZy5XQS48SVlVRW95TkhHd19aQSVvKixmZl45RkxtdGA0SnY3IWwjKE5vW1BXTWNkb11faV9ibDxOY284NXQ2I1lXNj1WOzo7QWJAOzNuLi9MeTNLTzJKQlNLKipYSnEzOzxDIyt2L241WXE2UTIqPkcjREZLZjslOmQoW0slVSJhe2FF''@;'; put 'put ''Nj9mfUliRlpWdiN9fiwyOCRaRGZQJkJtM2RFRE09Qkl1Mmd3em9aRFpZTGlEb1h6VDshZFdxSn1fYyslT0BdelFfIVEpNUJEcWhNaitnIjFNYEhVNDMpbDxpNEhoW19vQ2lscnt7WCtYWVBnX2ojWy55T3E7XmV4THdxLl9jMiw1fXZXK29VWURheUt8OCpgL0czKGdAb0V7Mk5lZmVZY3lOfXhi''@;'; put 'put ''dDdCWzRKbHxZY1hIKUIvMChrJH1oRDZsbFFgTFlsITpFQFEpZDV3MCpVTnZYJVlDVj42Szc1dXxDSVkva35FIS88fUBJQz0scGRDVCgxelFCMlNOQmMpeSFiaCZTN3YvOjM7I0NBaEhTTGdZOWUwcDVPQ341LyJvYUMzKSpjbSkvIiV8RlBQO2NLciMvRnhsVWwudiowMHloKiNFInV+ZVpdNGcj''@;'; put 'put ''N2VOeDU8ekVbc0o8QFooeWg3MCJlS0JGNz1SPz19NXJYOi5KWnU3IWtsdWh1ek1jVyxAQmIyXVdoUXBVVTp6M3RSKTBBQixLUV1MNkN+OU1kNnYhalshIXdMNm8yIzlrKnopJTxOJkB0SjF0OmMoSD82emxSX1ZhTlBiTSJCZm90WTl9bURxRS4zUEhPbnxYdnBiKEQuVk5uKXhtYE1sd2lnJFJl''@;'; put 'put ''YVVjUHdTQlopN1k1L2tDfHovO315R0IiRUNid1Z1OVFafTsyd15vI2U9VDtiaGt0UzlfNEt8YFI1XSkwR2MsIXw2MEhNbGNXbi5hPl51WUBaVDxlU3MqTXN2ZGUqWjEoW2RAPVFQWHZhfnQjRUxARl4xaWxDWHlRKmpaJjozZWBYUWNfW0NyJjEiOkJ3aSNIRzdhO1Q3blVASCJQMGh9eDY6Jldw''@;'; put 'put ''TzcuSVpqUjQ1MnFEcF5gJDgjSl5jeiZsJklydE90UjVUPSF0OUlyOjMoOm5KfURUaytTdjgzSWxYQHVoIm0sMiFtQmdjQGhZRihRfFBfJkRAeyM6WmVvMVMhRFlxYiQ4IX0vMUdiLkg+VkskXjkycCJoOWEuJmxob19DLjE3T3t4eHEvJVpQdzh6Z3ljajBFekFCZDVYc3AqNCp9cSRXQG5JZ0hE''@;'; put 'put ''fjd2R35EPWZZOHwxaj92bkF4fFlJUnNbKm1KQWREWHhaMiNzN3A0WCJvdTx0JW9kSlBKUC5fXVt4S0doQ0VrM1tuJi80a3ZWRSNicGAmb2cvSGtAcFpOfCtFZyFpSSNtNWx5PHlTVV9mZ25oV2BXRUduZzd7UkY6IjU2KXdnUikmRUVVOkNvaCxNfShDJiNteX4mQihodnBGcE1JPl5OcHFMTmoy''@;'; put 'put ''UyE0TUptSihqNTpgfmVbOl0sTF9qcmglT1JJMUlHMjFkazV5SFh4JjJVRG0zYmI7NntZQHpZWnwvQn09NFVmJkVLKkUjeWhiIXl6OmAmbXAsLlpMcTAmNXNAVl4+PjghKkZzNT19X3Vjcjo3I1czWkpwc153WT94Xz4uYD5neHIzY05VXlc1RVFmPnZUUlU2TmAlJiYxb2o+ZzZfWmtQaXhTZ0kh''@;'; put 'put ''Zmg5IzVJX0MzK2BvX2VsZ2kjNDAmOSEmZDk2eDZVdXhVbGUle0NNV1QyRH5DQk91OWopKTJDSz8wTjlWJXVuaHRWLi8lMTkvYmUkYjh1MExGXjA+emwqVVVFZEc9M3xZa0BSKzBFYCh0P1ZnVz4kMzB0XiZAezpYXmhWUCYoSVMmTk1HNnlDNH0vT29bMUUkczRPT1IjNGd6QWtIKmZRPV0wfV5V''@;'; put 'put ''U2FIU2kuMVZucnU/U3o5THtLdzFqW2FuQGpgWzFpPjE2djl4Kz9hPDR2SywoMUNVLyUiNGdMImQ+VEJwPmNIR0w8Zj1mPixyZGZDcUMhSmxRTERiWmVBPk9qUnVmPVZJSHZUNmp2ZSl2dDtGfSwha3EscnRUOWNHL2FSY1lPPUZhWU52TG8lb3RqQS9IIUd2RWg1MmI/UEFHL1g/VDFrI2J+PFNn''@;'; put 'put ''c141dmgqL0dfdjJQN3w/TFRARV8xUDZfTTc/W1RlQnxyZl1jY005PUNzP2FmXX1KQmxmbW0vbWs0YEhncz1TdTQhZ3lAJFVIMSZjTyZbfW02Z3lYSCk/RE9ZcTwoMzxbJG1EUWBSSn5QXnNtJF1LQUJrUyouZDtiM3pIOTZ3ZjJJckZGakc2Pl81UlQkKlp7YjkuJnMwalNTKmolPlQkQnhhWloq''@;'; put 'put ''TTRrb0cjcihoKVBgR2N8UT1ANkdedmZjZTtraXsjfHBXdX4wal1ycjspaGJmJShpZGV6Rnt1VCZLT3tfQ1YoVGMpZnhMY1hVcVJjayxSIiZOMXt1a1NUOXMySk0raFs+SjUqLzg/eFhMWHF6KWtuQl5pPnhUTixXVVBtWl4wYHldKUxQaygkQWJ8dHNUXko2Tkg0W3Q0IXt+NXV3NzUifmxnOWBq''@;'; put 'put ''ZnRtSUZCLjsoIUFEKiFVImxxVzdxZyRFZF1UT3BBPE59SjZPSzh8UGFXOV9yMz4kI21QJVt5SCZSQj5AYz93YDlrcEgqO1F2OyRBR0NxTkw0YUF3WCR+XUMvVThWW2p0aUBLXmNzeXx8IVNLdD1fOTYxc2EqWz88LG5XKzZpN10qXV9TMlZ7bHNmPTYyTSJ4M1pMMVZIcVdtTVApVXppeEZqSVh3''@;'; put 'put ''THV7W3Fjb25YTCRVRHRlOW5rUVJKI3BDPjo4aGxKNFd+QXVfKEMpa0dWfitMUTw8cC5pQz5nOm1gSnJ2TDpgPFoiIW1tO2ciVnF5UTBSLEJHPiVPKGQ+djpsZHVMQywrKEE0bUQ4Y1Q+L2c0am5tT0FxckssOjVQbX5Aa1Nle05zdWQuWHB3QlUwWHljd3I9WCYvTFZRe3YhOFU6cjFdRFhsfV9P''@;'; put 'put ''KzopPHJLN1F5ZTFwX1E+JVY9eCh9SClWOG9Gdih2UDwyYVkjLCZDX3xndDZROFA+JGtmbEk7VFNMOWJ9eDQsNEEuI1tZfmYsdk8kJnREOlVuRyhhVz9fZTRIWS5FPHRfVTB+ZHZdTis3TU81eXh8USE4d3N+dSU+OkxuU0VnMEJaWTA5KjMjMD1tbS4zdkBpWDkpZ3ZSUn5qb05TZSRLJUJIQlRj''@;'; put 'put ''VlhWbi5ic3xTM2lHWTYsMj8vZGEvUitkVFV6VjVkeGEoNlUkU2RIZkRUZll4JTNAImhjTyh5TGA7eVA9ZUNWYWNoJCNqPWRjOk02ZWM9cmllUzkxOE5ZPFF2LHZnXV12QzoqSEJNTWhfaUhYb1sqV31HfnZ+aHh2SjZdN1dERX1JXyFQaDp5K2xmLE59d2hVTl8rQ1NiSW9dYCMhOWNfV2grO3F1''@;'; put 'put ''I3V4b2VDKzhtaE19UCIpSF5bXj9iXmxINWo3PWRxcXpAdVc6OnpqWHBbME5FdiJLKHIkI1QxWTRzK3shRH56Sl8lRls3fDNMckBkaD5EKks4RyFRUU5Wby8uTGs0MiNFS2AodCpYbyMqJUwrJllmM0Y8KzcmSl9PTkx8PDA0R3lRPFtxSCpJYFY4X2w/V3peMFMwTXVwZTl+eSI5ZUElflZseEZF''@;'; put 'put ''djI5P1QyeDQ8P2Q/R28lMFpAPUxLR2o8RixOWjFtfFRQKSw5ZjZ0TUAkJGB4KnI4Lih9Q19DQzRrVT8mdmU6OzUpSTQ9cTRwQkYhcjtPdDVYRXJFKXoxSntHSHomNz9TQWxNZllhNVA1KVZvV1dNJCZWIXciWDFecTlZVXJKOjUkPzpFWEkoQlgucWZ5ZnMzO04yPjR8XkQ1Q2xhYVI8WlBWUjJj''@;'; put 'put ''bzBiMk5TKHxkQXdCdTtbZzRbTGEyVmAoKGxJQU00d1AxTUl+dUhoSkV5OHhCM2l7WkJgWnlMfE8rOWFHWWgrbUBqSD0wVyojcEpHQStBQyRSdDhtOkd1ZyVDaiZMZzZGYmJIc3YyRSNIRkwzRVRPN2hec2AiKi5ubn1ZQztXOStuaDsmRH12KW5zWVArXXUoZmAvOV1RaFs7Kks6UGoxZ3AkM2pC''@;'; put 'put ''eSgyTHFMU1NKM3IrXXpRZnR0dkNpMmlKTCN+dG5pLEQkVmZ8R2F8X2cpX08sVVR8WV02SXt3dH0uK2kjNkJFVEJUTjooLGFmSmNJcix4LnJ5a195fl95ODtjLzo7UExaKXdBRmZbRV83KzdhRXJZWUJII2lyXj47fDNFNjo2TkUrLGpRd2FPJE5aYSwrKzJgRmIqLzxNIm5SQD9nVnU/a1s4a0A+''@;'; put 'put ''flEmQCQ2PVhkdiU8ODd0ISs7MD9jPnpObjF5UjpiW0QlOU5GKz95QDA7T3J6ZiErYWJ3SjA0cmdnaWclb3BVaXVSZkhoRz1mXjdLIz9KfHReU2l9PHg3cWQwJH03L1M7VjsuSmRYbm44PUN+XnswdkB3WH0pS2JGVHprJCR9WCgjO2dxOG0hWTthTUorO3V+PFRoMVAiIz56KHZ7Oj98P0hIU21M''@;'; put 'put ''fSoubiJ6aGs/WEpVOFdsfD9DKzFfMVpVRDFqbHshaWA2RUF6NVleYmlXY2xCQzpuZyUqdHYlJmVGIz0qUU17ME9de3smMkM4TGNHOSFvM2dicmJIQ3tbQjFAUFlbLkljPXNLZ0w6Qjx1WiFGXn5XQDlzcmBdZzNiPnZ1KTRVOl4rKmhbR10pKDVlXWkiNSYoV1lqI2JgKXE4fnBZYzZ5eGZmWTpi''@;'; put 'put ''R18vXmQqW3hiOzcycDJMPHJ8YW4lQCN1fWRZUiZuZyE3UjlIWzhEalUvSCtyWXhwWmNqZDVQV0VlVjdfPWpnb1hXW0dEZ3dPU1diRU9nbmF+M3R3azcpTUBtN0wyN2F+SU0zNn1vSltGXiJIWnspc0xeMTtxP00uemR4KV8oW0lZVzNETVoxXiMjP1o9VVJKVVshfkFQMTR4IzNqYjx9YiNnNzdT''@;'; put 'put ''fVY/UHkxXkk9KSxkbmp7dVdtKShHKTwuMDYkJE0+MC5OeSgzIm09V2lQLEhNNHd2JjB7ZE9uUjgmQVoxbUd1OVk5a3E6IUBeSjlOVk9gOHI8OjkjbjByMV1FMzZkbzxvNHByYCpyYkNke0dhSk8uO0x7RnFlZDIuY0VkJn47W2N6THZFQTJbaGcqeTA6LHxIbT5dfGF7JTYxdltoKkU2Sn0/aUhp''@;'; put 'put ''cUdPdkFYPmN2Yzdndls+RyZoLm9LS10yZl0lNUV1eSRaPXhVVkVwT2VlRToiN2I5MEpkal9zP2hJeCpWfV4obnZXKWVgRHciQ3lCUVkjNXdZJTEmPDE6NH1BNU5PcXxUQ3JYSlRiUHEiT3k1UCojO0Q7JEVuIjNzfmBkekRvJSklPjliUCwzbWREbHRWZGBRcU9yM04zMC5pJV5YKzY1ZSNYcTN1''@;'; put 'put ''L15jUHphPGZUKGFTPDF2MUNxLHU8amErOWRaRD1kX21FWkh8YEhGYG9vOUJzZnRsOyNiQyI6QjNxSWt3JHpMXU84SyVaZnpad14jV0pPfllNNTEmb0x0c1cjdzpRX1oqXyorQyVNW3A4U0RGcF9BT0VwSTlCKkFCfD5hM1YmWy8kdFg7fEwqTEJ4NmFTJSx0XnZHXT94MkN3Kk9XK31FNT5GYDki''@;'; put 'put ''dkMrXyoqfTJ3O15aX3VbOmZje2JRJVJoflBGZDFgTUc7Qzc6NCszc1U2ZW1bKD5MfFJ2Ulh9TzVKZltIJFNtal9fbm97ayk3fHdnUGxaOFNebUNTL0lQfGF3bGIrKHNMZ2JRPkksNn4yMm0pNlA5L3lTUVlrI1h8ckBNTk9gLD9FZEUrSE88ckdpUSY7bHZwZjgrfStDKnkwIXRoRkUpNCVRTWZE''@;'; put 'put ''RytAPiwsamlmeCtXakxnb2xMUnRkQUBYaDQxQ2NHTFhAYX14S1A5OWNgOm09NW5bJmtPMlc1LjBdeSRVWmp4VGRrI10oXXBTP0sxfHFSS0goPUsjZ083RVQ5cytYV25uR2QxOWx3PDxpJlRwYiYkclJLKjBqU3F1OkVEW308K29fTTYxNElLIU9LRU1pSz4vJlpYYndsY3cuLG1mYkd7azFvTHgi''@;'; put 'put ''YXsoWDZfM1lNNWI+PS9BK095OTBwVlJtdy8oSGNfWypaOShhfHZEdzx5P3VPYHYiK28qJE8lRihWSltnKG8uYGp4dzU4eXdqUTQ6bUJ3Im4kcEllWiZWfkF7R1pIfGpZbEEqYWlNT3Y1YUg/dV9vVmsxPkxdPzdAWnguR0U/cmVvbkVkIVZ8bWdkanN5VDA1fV1nfGM0d3YxJG8sWzdlSWNHIl5W''@;'; put 'put ''SFlaU2VIejZOMzp2d3NOfDRFM3RaI2BuXUM1MFd1R3FQdG4oZWVRWWk1YEY0TFs0LnRgfn16eUA0SXovNTQ/V3F5bzs9bmVYbmhbIVMkKjpsamZtQDBsc08yV1dwYUxOXi9QTStlTSxTKXpMVE8wSmRLK0YxWWAsR2YzIlJOVzdYa3wlM2MuUyREM21NKTZfVENlY0pMQFZUQ3R4JGxIQFd1MlhA''@;'; put 'put ''JXhILFtzX10+b2wiVWAod1lmNGIuKCQpIip6MHVAS3VgcnRETWpvbShETUR9KnRNTTFmdVo0MTxiIShbODxXPChpKWxrYFcvbW90ckBnIlQ+PUNTKVNeS2Uhck9lPC5+Zil2dSV5ZE4xSThtZlY1bkU/R1lMO1JqdiZ4ODMkR1RuMEJOfkhSP2l+NVdvU2s6P3RMU2d7VEo9NnFkJTYjLypvOk1U''@;'; put 'put ''YXdmVCs2KD11SGw3eG53Lj4yVFZpcml9bHloVDdHM1hmWFpUbnBWe1VILFhqYCopdD46JXhddjp6VUpHOmFudmoieCxbVVNXJSole0ZYTGZ6Vy8kO3NCdy5TZk93eThPeXgvUk40YU5ZNEE8KXNieXhNVHZ6aiMve0RFWmcxdHpEPWpYXilRSXwmWWteWlRhJX02Ild2VHJZS3gjNmM0OTZON3Ru''@;'; put 'put ''WUZlSk1mcFQlQSk1ND93Qi92WD90al4zfCx1fCp5Y1hzSElSQGw4WUVoLmJjUmIzVHx7RmNqUj10OVQ7JlA0OTB6PU9OKlN+X0V2NDA7L05vazJoKVM9QExSPnx8PilHUihWWF1zOHNfQi5kTmB1ZVJ3aGZAZHhxfld8OiUlaE5jPGF1ciZReX4yL3pdPz59W2t+bV5oTmR+bC5JbXlVbDF6dzRK''@;'; put 'put ''ND9wJlE3KilHXyV6UHY/RVckQWlLRD1kIVV+VVBON2wmd3FUXSsscls+KWNeUFhabzNgWSZaJD1WeH1YXyRINVFCUTZYLmY0JC5oZmJrJjdsT0swcEwmKFdkL1ohNiYob1sjM25FYGphWU9udjpCcmZqdXVhbWZEe0JbXnRzayE0JmNhTFZpUCUqPzMjLmE1OWJhR2wlUyx3VyRCPmBJZGVvfVo+''@;'; put 'put ''O18+dllAeDRfbyE3UCU2fGZzMGY0IVVqVkNTVWh+P1QpfCphdCIhaDlIXypTUV1tLE5Ve1BwP0ojfTFkck8uIWZHQVRyKn1+Ti4vc2tiMStvfVBKZkM4NkNELyhESClPVjRaWzhmJSRHXl5pNkt6Tysma1A7Q1YwYXx5aGNbRDY9TW94cl1aXn4/MitocSpuZXU3UTlycGR1WGQ5Y3RDUW05P3sq''@;'; put 'put ''YXFqNWIkWVdaXmhaPXRmK1FJKGFnO05peWxiW1ovV31udyp5Qnd4P3k3bkxPQGVka25Fb3tjJkBWRUVuOEwrRyNaPXlVbGFEVXUpQnw2VWZjXSxdQ1lvVnRaK1AoXzYkaGJ1MyxNb1QvP0pOLERfPUJ0XWgobSpKIV9waWljRWtreVJ5VWMqSlRLKXBxdDhTMFoxa1opdUpGL3xAVHRsTFJtIURn''@;'; put 'put ''O3FlSDoyL0JbVXloVTwmVSQyZj89XXFaTSpgUmB7bkxrdDpvfD96VF9JJEAsN0VANTU5aHhrY15Sfmo7LEk7Wl9eJXQoRVcvdG1Yb0g0UlFIZj5jfkh0O3A9en0mQlB9JilZeUReRyklaGBQd2xtWjRva18xcytON0skRmFpRGcrcXJdJjYmKVsqVWd1TFgvUXd2Ly9laEZEZWRJclRMWEtxKikk''@;'; put 'put ''NW5kIm9kVCtXfGx6OSI5Q3lmYnp0cE8wdDNXVzY/UGIrfE1VWTtaWz5vLjFDc2NGKm83PERLNixgJndoJW8xKnIoZGlVXUcpPjF5VW1LTVplPnZeNWBQRlJpRjUpPkx6RVtMXm4mOlpkeFtYe117Slt5UFFfVD54WEo/XkoufVMjVktJSGchS2tOKE5sPXhqOWJJWHFXLkRucmhaJCRAa0lkcU5A''@;'; put 'put ''VWZWbmlxcE5FQzAvVyp1WFBTXkt2XlUsMG0yW3lVYCt1RytHKDw8QE9pNE4vWD0xT29hIkw7ZXV1ZX5+fWtKRTJuM243NFhhP3Aye1taPklraksiY21SU20wYC5YU3NtUSVVI2o1MyYhdEB0Kz8qfSt2bUJTYEFGLyJBWTFyZF9tZnl9aDdwP3leflMsMlolTWUvKStoY0lRbDVvbUBiW3U1cko1''@;'; put 'put ''aXhjZkF6MVlXakdiI2c7PmNRPVE8LyZGdS9VbURKQTA1ayprQCNnbTBofkhPSmNqMk9lSWthcCwqSlM/KT95KVJjLio7JGxJeGRRen0uWyxxI0chLEd8RX1ONmw2KzNCU2lfMFpIY0NTaT9YY2wlITp3NmFsY2kiJHhaWEIuJikvYUBZLlY9X0Y4PTRFaVNGdlQ0REQ9JDRgWi4oTFdBPEpHbERA''@;'; put 'put ''Li93bEI+eC5ZUjRSPVAjY1ViLHAmVChLRzRyT115NFVBWCEiPzwlZH4uOXlGZSltcT1FQ3hoejt5JXxvP2EyeEMyKGdeVzx4bzpxdzBQfW0+cE4iQEVvNG0ia3N+X2UmI0tyMUlZTSk0RzRoYzM0JW9ndC9ofVd2Z181KnM6QCV3eSYyVzk7Z0FhLEd4QipTaWtYajxrRGBJZXguT0oxIzkhU2wh''@;'; put 'put ''b2RqckNdZihJaHp+czRvdlpHeDEqd1hucz0oK2dSZHpfVz12ZSgob2RFNS4mMDomdEtNLmVrUU0mbWo0V30zazk4S2N1en49TTtCYUQlMFc+M3VbOn1kUldldGQldndHT0x7TVVXcWMpWH57dmN2VCEmSnZCOGdacS9Aa0NlTHg6MVE+OW90cXM6ImZTTCN5VmEzOXZ3JnQ7K3t8YHEhO1RpQmlw''@;'; put 'put ''JXlwYVIxfmVNWkdYXnRMX2dDbTU0RypeV0ZtP14+SSxUfi9KeDJscGpTeTBCczRQLDNGXUowMHtHZ21hQyVYVUNKakIhOXlRIUh0TkRaOShjSjI6S3F1QmFuTiFqIU0rZC9rblhCeVJvYEp8Pn1Uclp5NWlgYklTaDE/OUUjVTptV1ddSml1OXpZSWVTMyR3NE02KnlGKF1UMHlDIyIkVT9zWDxL''@;'; put 'put ''bEx4fF47cV1zNFYhY31PZHRfSCUqSz8uPXUmT1hRWjB1TixQd0VWdCxpeisubjZgS3pMO2taSVh7amRhaDc2IWlIYCNfWjldIXhndlY6RGVpMWEpZHdLPkU9JkVhS0Q1M2Bvak0jfUFAXVQvZklOWU5gbl1FTS5tPlVqdFdROE5HfkoyRiM0ayZmR0V9PnB5fWhtXXZLRlZbJGIzeW9kd3k0MyQ8''@;'; put 'put ''aGljbjAjNFB3RUR7QWMpVy4wRGMxdV1KRmtUOm5ZPy5rSEhGQWt6LndLbDEueUtYUG96dTMrdjB3Q2JTIV9BUkpMa0R6I3hDaVc1dlA9RyI4a0JAXWNifVI6QnQ/eWZSZ1pJdEwyfFNYLFhaRC4sPl4lP3BtcX1lSHAhWlIvMjljXmpfZTR8ZHQzU2hzd2tCRSs8ai97W1koRnBUQmprdEdkaSgm''@;'; put 'put ''NEE/Jml+Pm82TUw1TWY4Lmw3Uj07ZDkkTiUkVzVaMlM9Z0sxby9sL008c31lR0Vsb2gkKmBQLiRKMWpSezM6THY+YGZ0VyMoYlFtPT4majh0NiNsPjJ3Pl0qKGFEcFtLNG9Ta2NiQSx2QDIrJjJXKkpWIzolNjA3Iy5PZjpCT292IksyflhMMC5KJWVbRT5lNkouST5sK2Awa3YuamNTQjBsNjdS''@;'; put 'put ''YWBBTWMqQlJfNUl2IVswS2tpdEZEbS94L2l3QWooRnM0RFdSVSUkbj5vY3xGLGVTRjt3KjFDSkEiJms2OV11YGU6YSYwRUJfKj1gUVBTbiRmeWZ8SnpdWFJUdm1VXUpoJSEub1Q/THguZDUhZGtEXlpfYUVBZDExV0lCPjQlW3RrMWMoe19xIkolU3VyVSZbTWNKWSw+TGxNYF9rOV0pW0t8PiU5''@;'; put 'put ''en4+P0pXLG5ya1duZjd9P0R4JSQ6TyNRTFFUdlJJITVWIX1xSkxmOls0XWB2cD9uLiRaIkojZ1E6Izs5JT5gfTEvTnNVJVBjXkBvQjR8UEcqRkt7KDpUUVNvdl1YQC50cUxjUVZrSzVueVdxSFhWOnFQSnJZeX1hMX4jaV1IXiloTDZJWHgrRzduKkJLLiVrL15jT1BrSiszQHBZfk1+InclZmln''@;'; put 'put ''MSszLD5vK0hMI28jPkpuWFpdeHN3Un08M01NZCw3N2ZCJUBoSiJtRF41MSJsNE5ITywqWVFWamJeWk1NPiY0Qis5MzU9KFddXjw9ejp5bz4jO09Bc186RClwMVRfSFFNUlciNHwuYlAsZmZjLlJ9WTJ2dGUoa048bVUzazJFXzJiM2hCZWh2a1NuN00qVVlyPjpSVWYkcz1tQkozbnYoRSl4eyEw''@;'; put 'put ''YEBLbWJSIUtWLERne1Mvb0hvMmpUR29kI1tYazByT2ZnOCQoK3NHNHRZVHUrcHYyN1Y+M01EcnJCWTl0TUY5USYkYEl9MTs6N1g2ZDQ4b3Q8Un0yZXssIm4lQDhKX1h5JWo4czpMbCtVRHsjLFVaWyt4SXpKWjpadzRwPCl5Tnp7I0xTUFpIJmN8RV1CKnplbWNVOyg6PmEpVCRXfGwucXshIjd1''@;'; put 'put ''TSood3B7O007IXB4K0xmOF5ecTtFZ1FMKWQkaClzJkcpYDJVT34jV0tgbWpHbyZyVE42Q3lwcCY7KGJ5Q3JdPjdzNzp2PUBvbFIwLixmfnUhOH5Gbi48X1tleFRzeyJaNCsvYFglejRQTyZWdVNlTWclc2MvfCIhR2ZlWElTR3l7VkR0VVRSQSFTdn5hM2Qxa18vVD1yMXlmVTwpVEJ0XVZ8KHo6''@;'; put 'put ''fnBsU2AjcDR3SlZ4LnBLMko0Vk1mPjhqOSNkSHw5KTteWD5YUTZyUnxDen1DSjh0eSx0LD0wTHI0ZithN0JQRVJFPCJTcEpvSkl4WjpbNkwyQG5ENWJoTFlTdV07YzxHXXBbYjY8dHRlfX11aFZiJm5gKTA7alhmbj5AOkBRZWhNLHFlQnEqVXUkY2A0SDFEOHwhOlcuM2ZGOXUrUyx3PTA+KG5P''@;'; put 'put ''RzVSWn11aV40eGdWT2FKTUMlLHdEU0hUQiowbiNgPEExIyl4YTxxW153PEgoYjRSbUl6Vm9vM31IYCM8cll2QUcjVXtSb2xkVTleKXxpeCpFI1QvTGBJNnoyZ1Z3ZmA3XzJlYntgKyJTYUZPPWhNPVhtZChLU3NVKlo1MEQ2aFh+P2FudU5Ldzx0WG95aUQmJV1RI15CZnB3RjBgVDRoamBJa1Im''@;'; put 'put ''PyRVOCt5T257dzI7cDozKS5RX1Y/SV9zMkFMYzdVfilLKDxHJUBYUC5EPzR7S1VZJml1N2RiNjJNbVpsdGlUVml2PSlYcWpfbFJHSmk2KEU5WjpyOix3KTw2M3BsPW5xRD83NEVEMlt1ZHVqO2BvZVBHZDFPKj5sKnUoPWJPcV55O34sRTZ4RS4/JE9Zb1NYW1p0RmQlYSVEbVRNP25feGA5YiMu''@;'; put 'put ''b1UhbHZNdCtRJUpUYlc2OnY/fHxXI01ML3E/dXR5Z3xiUUtgSl01IUIqNWopemNafFMxVVsoX1tLRHdzKFB3WUdEfT91ZClgNHReS3Z1PDNEUCRmT2FFYns3cmNITSglYTlrOmMsaGxZeytiZHluXkp9R2UrNCVdV1VIV0AzLFFFSFgjRjM/JE1sZE99I1czcWE2VyR3Rk5NRlcwNFMyVkIiUzhA''@;'; put 'put ''aDE7TUwxKD8hLCooUkEsO0c6eU1+Jl5haHY8JmgudTxPS0ZhWllBRWk5X2lRSTJSfEZiPDY+Sm48T3ZnVVVhSF12UjZgeWB1ak92WyVAUDRgS2F7Unp5dD8vOihoMjp6ZTdRWnYpZ3c3R1dzbmUoN3UqL2NqNm9RaC5CcVVJNTQpKCZFKWJGalc4eTAoXT5ILjxQTjRBZigzKnt2S2Q4Y3t7VTN8''@;'; put 'put ''MnBacFdLWS9gfFB1WDVoImZ8KSpDYEl1JUxJJltjKFgsSDtCOzJ4bDlzeiNuSURqKTg3fkZsISZNSkM1TE1jR0FIajZ0SCU4SiR5VnprfmY0TEc+SjYkcCwvTkNoaG59Sz5FMk1nWThuMVJfPUguYE5pWWYpS0dteEhOL11NXk5tfFRxdHRSTnBqYnU/PFZ0NzNNYHZFeXZ6QHRPbTpINytBRSNL''@;'; put 'put ''eWNYbmIjM1QoJkNCPls/ZzBBYmRfPV1+XSVFT1txN0FPN353cXB4bFpyZkRtdFdbXXRMKz5FYiNvKmhmVWRacj1MKVhvcktFeVRFbVMqS1F2WDl9dkEmOkl9Z0IzQClwRlpnMl1xUXFbUCNuYiF8Tj9Ze1V7amgzKks9MzVgSDMwdVRRamI+JD59dEAyaFA9OXxzRTF6KWRAXltjRm4jKElSY3Zm''@;'; put 'put ''TWB7e2s8IShrLkRIdnJ5PCNfVFc2OzdUQyRwNENPX3xNIzw0a0JIPkM4MW9obWQjNCZaRU9nI0tqP2FSfDFvdCVqZG9JeGleeWRSJXQkZ2xLMCRUNlNRXlgyMnE5KTkuPUxTemlGQWspWm41VyRUfENeTk4ldX4hWWM2RXZAQjZKK0htdylSTCYuUDRXVXQmPi4kMjtaZ2RvajV0QkpGNkVdMzRN''@;'; put 'put ''bklVfSk7M05MfSouOldFcXt0fjdGYnsxKnpxKSFaSTEvZFlzcFJ+bzlmeX0sUCImIm02fTZTMV9CYl8hVEdQQGVBbiMoeSZJQ00lZElmJE1rUDd7fFcyUy5NLCRCck46dD4kZ3IlWX5VQFA0IlEzLG8uV1srNmpmUShuT21YQVQiUDNjS1o4KVVufUp4QmtlWSlMRSF3NkxidzIxWSVZdHNOJFtB''@;'; put 'put ''ZjhbNmFwU0QuMWlpKjpIV3B1ciMpa3hYXmYhKW5jWns7VVAkYUY9Mj89fXBAaTZVSzZ9OS8hMyVwYCUidzdRO1cuPHoxX2lpRkE+aUJuaWF4eFg/OEFZQmlbOVVKW3M5LFNxUD98QlVxIVR1Z3QpKzBXdnVpZjZzdzhpfGJ4JUN9YUI5P2E7ITMlUXo5eVdxdm59XTprYzAxQTlGPUtKRX0sdG55''@;'; put 'put ''N2EsOk9sMCF9I2JfZ0VPPFRlT1QpZVE9QSNKU1FUQS49MHN8JnRVMEtZSVl8Ukksa2NKakBsM3BNOih1WlJHQ1RzQUQ6dWZXdH1uMz5hbFZgUHlDKHtNR1grZUN+XXFJRitzUnRFYUlEI0VjPHBCPEM8W1AoTnlWUjZDazQ9PDM2b0llfXIuOiwrPGZlJXZkWVVnc2BwJmQ/aHM/blFyKn41XixV''@;'; put 'put ''R14pNmVFQi5zdVFiZld0S1JlJDYsfC8mNXJlKVAraC49eTc5Q2kvaSU+O3xYRGU7OmJZZEVEWGsjTj4xOnNnTmF3cz9kamklRXBGUnhsSiFzcmg/e0BTS2ElLEA1NHF5P3wmV19FenVrSCRPe3x9bEl4ayJ4OWF8NzIpJjFjWU0wN2tsZDshOyRmYUJnW0whXn5kZF9aWlZyNis/LyQ9Iyo+SF9r''@;'; put 'put ''VVEjNVBjOyFLOj9GX2QmKikyUlkoJCFlMCxjbVtyPzUlNHZPQkhqW3JAWlg2b2hkVWJEfj5wYkwkdHdLNE9RTDhPLmVjP1RpOFJSK09hbk4ieW03fVduLmwlaX48ZzJxcmYyWSs4IjlzUW5GOXF9N1RkSWM0RHY3Z2Vjd3Y6MWZhcVkxaD17LElBWE1bInN2KkJVWFIvX2M0bkMuWT1YSUtbRzI4''@;'; put 'put ''Ti9LXipOI2psPGFrQG9zcUYiT1ZweXZHVD8rO11ZdTVqWy5QP3dyOTM2YEwwY11fNSMscT9BSWc8IjlZZWpFNShFRUJYIldjWlguR1Z6UkxYUERAOyUsMCEzRFtSZkN1aGY+XWBhIWRjZkE+X0J1aFNUNzlAYFk1e291TTZCJigueEx3PWdzeiZ+KTB4eGA5a09hNThwWFM7TWozbmYqa3khPFBn''@;'; put 'put ''MFkpJV1FbjgvPWIpXkU0IjRhVD8mKDNhNkskKmg8cVY0ZDxeUkFxX15gMXslanlGMj54cmciJnJUciIvRDRJNy89TltOd2F2NDNsS3ZARmROPG4sajN4KDVDZXc7OGdNSFZ6a0dbQzM8dCszeHt6ZktwKTRBaWlxYCg4c0Z0SishY2hnPkolLlVeaXhTZlV6Pm10L2BVWDB0L0RMWDRAJmp8OmBi''@;'; put 'put ''OVlGb3FZImcwd19tJTEuc35+SSozVl9MMlJbRXpDfSN6RWcrNmxvb290W3ZlLE8kN2QzKEcjYzgrZz5bUmZJJWJURT0kaGBSLEZEOH4qdlNfaklRJUcoVWxYZSQ3ZXVCXjJdeERDOy55d148b3hGWFE6KiUvK31AJkE6V091TyN0QmJQVmBmPndlcTEvOlVZNSlidzwvUlc3Wl0zMkhpZWA0NX1e''@;'; put 'put ''YGlsS3JMc1ZfIUR5MSlwYmwoVllhJVJ7cndyIUY3d1NlXnR+XndoJE5xWiZKZiJlL0dZeHVfM0lpLmleclhUMU56VSFZfm13T3ouRD82MHY1dTJUJX0pbUthTDRoK3l0Mk16Z2oidWtvTjlgdiJ8clI3VEp1QFReTHpALG9WIVF4JTs8VGU4b0w7RENYVGshSlQiOVUrQyFHNSk/UyUodWdAJn1X''@;'; put 'put ''ZEoqTy5Kd191TFlkQHdoVjd4Yk4pZSJqLCxeOUQ/LDIqPCpMOFopJnAkN0djakYrUHl7OEhMcks/K0hHVW5VVnhdcDtLKT5ffDomJXZHQFVUZ3EmRVldcVlyOSJKRXwzWzMxcEZ4UEJbVksjfVYmKXxUfDx1X0xZS00lI15SdDpNMH01KXopfT96I2wlV3FzVGshcXovfG4oWkYySF17V355VX54''@;'; put 'put ''Jmh8YnYrRiI/SSZHJEYqRmpCQFFmNXwpOkFFMHdGOVFBOT9qW3IrY35HOSwiKHo1S0pFSjJIUkhrRXksYzdFJHo3bFtWeDpnQl1yaDZWT1p7QDFHTSZlW350dHA/eFZMZz1OeTVfT1goUWhXdEpHcnYwfHZFKCwmJTpzNnV+YDdneGBJODtnY3dSfk9WdihKW0h0KF80aVJzSF5mWE9WYSpMNkkz''@;'; put 'put ''cTw7PHJSZS9IWD54KiZNQ1cmelZEeDh2bTN5PUw6JnE+PF1gcjx7RShKX3d5cS88NV9SMCFiP3xpaltwYHJzMzE+Wj1JOXAoZTl9PV5Oajc+QDFqcXpJfT9jQWpeMyVub1B1LiVZPzxSPHQ0dTIlZXJzeGI/JEtUZUhRVmhlOWpmVEA9ZEZZeXEidnttSHUmZXM+eSsrazFtSWIjTTswUixBSihy''@;'; put 'put ''ZnRDTUtaLzZNXW01MltvUykybHhiUDR+ajxfK3g3bSUyQmFDezhuNT1AQ2Fid2NSPWdxREcvKFRuVCE4Nlgkbl17QS88ezU7ckNQUDk4eDNgUj1tVE19bnwoeiY4MDpZZ0ZNKmNvdjZIKld9VyhvPzFwVHRETkgyNEBaNDIwPmJHSEMvdTdeRnsiZFR2TkxsUkswakQwaGNSUkRIVnIqUm1YOmxO''@;'; put 'put ''W1l6dXZINktmO3ZdM2IxKDgmKG17bmVVMDkxUEhVeV1+OmgqRFNFZHoiOnhFOWdIX2dOVDdmVFNPLCFjTzRafmkoLHJSd1MpOUUlP3hSdyhfbX55aFpxO0hINSgxIVRPc1lDWHtYPnxpWTo+eHRBV2RPd2d7OWRQe2NXIyZsQ0ZWVEQjS1dYOFpleSVPWntqR3JiIWwvSG1SdzxBVXpZc05uTGlt''@;'; put 'put ''QHc5c09vL1hBcU9CeCsqNTRpNjBHdSFGL054P2RDaDRsI2YwWnB7NGRzUDRmVXE5JnIhMyx7NDxtT35WeHM5QTZfcypofUJkYnNzT0h6NHVeVERGTC9pbCR9Y29oSzI5LGJZU2MqOkZGdVNPNSw8UHtDPjh3Uz1FY0VQWjpoZVJwdTIzJEtjRlJBQz4pJC9XbCRNb14hZ34+RntZTmZ6Wl9hREgu''@;'; put 'put ''OyorQG5vPEs5eVckNkUweHFELnIqMjhMLGxkPHI1SUooSVNgMnxjb3k3PiFHTWwpTWslQUIkTjBwXVRmUEJOVj5MeEswaW1IJUJsVU5xQVszbEModyEpWy5CTGUpIiM0Mjs0MyFhRyNTX3hYIX1aSVtmLn1ObihfO2pRZGIqTDx0QjlednUuXmRPTGkyTlVMUG52aFdgWEs1V3ZUJHk7L28iVW1D''@;'; put 'put ''O1orUlFYa1h2e1BKXVt3cGNGaGFoI2ZFTE5zfGNbUXdveEF1SU0jaWpIPEk/JT1ZRSVzaiV4VGhwNn1HMiRaWXQ/dy9dU1E6ZXVpNzxGNFAsd2Q1fn1hJFhWPyVAdyVLakk6KnRDWUdge3h2W2k8WHEhdSkienA5LGx3JGpqRWQyZ11QUHIvVit9WVp9MlAsZWRNcWgvRWVZJjFjNHNvenBFfnFB''@;'; put 'put ''RGVwT0M4bTpyKktNWS4sQCtZWVJ5Xm55T2lzXlImU3tvOWNDbDpyalhEP3h7dGxXYH0wWEc6Q2BqS0dZRiE4bU40cX1CSi9AWDdfTVZpQGNwT040Tz0pKjZpNyojLk13PERbWSFyQy8wLl9TemhZK0pUbjFyWiI+T1luZn5mcW1ZSEE0X0pTUC9+aTY8OSMkcjlyWD9SYn16WWdSSUY7dGQlTXtx''@;'; put 'put ''ZEtddTtDZ2JDTiw6V3R4O25kd31ES1F5OHl1a3xsdkJiKDh9UkxOYyleL31Xa0Y8elc4QnpzVls2OkJ0fUMhRjMzVmNjWUVTaCNFPHUjMjojTishVkQifjZ9eShlO1ppUFZKZi5afEZHbEN6V3F9OFZaRzBbWjNaYFN0KCNYJGpUT2szdSE2cyFAUH5yK34kOXRTWy9je295SWlLckJFWTMiO1VT''@;'; put 'put ''TW5NXyYjUTEuVn5DbkUmd0ldO3o6JEtgVjBGQDJZRyY4dEZEZXxMTk1mZUdHWiQ+O1A0QlBiKjkoIyphNz5iIlgoJGIpR1J5QlBhelNfSSx0Q3B7MUxCPT02d1UyYUBvOzo2P2YpPU9gc2hkI2UpZX1dI3VVZWFoRmRNKU95R0s6TDhrL2Y5MGU+dV0xPU0jQERrMllwIUFmOkY7WHNCQmRAUFtC''@;'; put 'put ''flBmI31RJkQrQHRCRiVXcXdsZEtfc31iZlU2Lls8fnhNeXUpeW5uQU1Idzkjd1BpOW9gZXpYUjNpQEpnYjpDRF8iV2c6TkB4Y0pDOmAlLFIvWFhubGg5TCR4b0tpTl1nNCxua0k6QEQ3Q0htSVU7T2dQYihfelJHMlR4UFJAVG0mRDJYZGoqJH5KPzY+S3pec2FuMkFKRTdjPCtiQjt3JE5tQUFp''@;'; put 'put ''eiw5dD9jLm46NTtxJX1efS5xUix+TX5mW3dKK0BwSlpoZDtsYk1TTC8oJkdpbTw0UHgvS3Bud0NtQHdRR3QyVCUsNXIyUngpM05tZXBnOHklYW1AZ1lqZm5FNTgkMzoiXks/NzFhVEtJfklFNVVkMnhgMyFQcnd6ezY3Qkd6fS5MPjk6WD9aYDVqZGwsRyZROTVuVl5ZZC9aR1s2d0woVXg0aW8h''@;'; put 'put ''ampvPzZPUmpWMFtlVEFdek9ZN21oUWplbjEjT2Jlal5kNCk6U21OOFs5djgjNFYmRF9ITUxhQyNFZVkrOjZdVXQ8S0V4NTEqVCFRRHgwVnkrLDVFKl5VUlpGTHJ9ME56Z0BZbytZcUlIeHd6PWlEdSRMVTouRUJ1LDUyWFRwYV57ekx1QGx5YjNQZXQpS2dzbHh8Y1J0M0ZAXiQxOnt6ZXg/Kixp''@;'; put 'put ''JDUrZGZMRzlEej4yeXV5KyVJJSZ9PDcpLzQqSl8laHlffE9bKCVoTWk3cF1ZbDpnd3ZfUTEoWF8kZ3l+ImlVV1EpZEJoeSR9UTJhKnorRSxeU21dYXRxPT0jdTo6JFBeRH5WfURMb2Y7XkU5SGNmK3ZJZ3NNSjRxVH1JUmg+RDNTSFUifHNCZV8pbls/dEplQio+TiheZE5beUhIV2pKWWx6N3hW''@;'; put 'put ''VExkeD58cU9ISSVeRGcrNlNmS3spZTJraWtXMFJHTyN+Vms3aXldMX1gP0l2d3JSPzB1Qihidldjb3NDRUcvJHx1LEBbVzY7QilEUX53djFjNSxRfihTRU90fkR+JHowMXtGbjNtMmQhaH5XV3pFPyVpMFNqcUdEbHBYXyUoPEBnK1ZKS3Rra1RjRSo3Tnx9REZfU3MxMig7WGNdKCNdaEQlMEpd''@;'; put 'put ''bkwlbDsuaXRfXTFYWit1Uk9OJlYlMlRnbnI0NX1KfE5vLE5fRlBWOTx7TWNYIy9UQ08mSVJiejIueUQwWT1ATCEqZ0NLaTFbWFMkUlE/eEtFSDBsVUNeKmMheiw9N0JAJnZkbHIvO1N6VEQoM3pERllRQXo5M3J1VFtFfixjSzJFWGY3Mn5TLk5TMGtINzBTdnAqLltAdlc5bT5ZP2llekZkOUd0''@;'; put 'put ''YSRDUUNHJmE5SFZ8I3Q1cyFQMVkpX0U1XkpfdC8mXlBMKEthO2hhIXREYSZ9YFRuRXhjPF16dHdvZGx2MypxWXtNRG1BbmM5PXxxNWo1dEk1Uy40V0E1dVZjOUpkUXBoYGJydzlPblohNC9WPFpqemQ8NjB6Y1MrZGxkQzsqbzVFSSxHLj5jJD1iNmJ1OWpJMSQkZmlqX21MKkFRViMkZ3VtQFFy''@;'; put 'put ''KmhddU0jTF9XM2Fhe10+Ll9jJSo/R01jMEBhTXI6fjBITSEzeXRyX0osdUg/Z01zNTZXXlduUFdXWGtvWXRrTnUvTHE1fSJVZF8zMlYrcl0lI3luKl9XL3BGNUBCSUxeTEh8VjM2ciN7WTp9Z0MzYUBKUiVuK2tKYHoodEVbfnNkayt0T1RyO0g8cHRgKilGVVdVJT1fdkZeU3VRPUBLWC5pfWpt''@;'; put 'put ''RjtBdSwyYTFzX1t3ZlV3UW5Mc1tEfCYucUNdVy9Sbmd9Oj9mJWhOSEU2b1Q7SGw/KjdZbyUyK1p5NnFASVIsWiU1LEEhR29oMX49KnBmXi58MENyQDc+KyIjd15fcS9Vekl8RXY3ODBANFNfXXZ3ayIpLEkoTD12IjtsWFE8Pyt1fExwKT9Nc2IhMl4lYiMmYzE2b0w0LDpxV2EhWCJGJUN+c3Yr''@;'; put 'put ''JUlVV1YifiFqZ34kPzE3Z2lGR0dCYXlpNz8kUDVxRF81Y2J6cntXO2RkMSp6QD4lWV9mfiFqJCZdfkx+T0o+NnNnXzp0eilnVyp1T1Y0PXZ0a1kjXz5QKjdvWXdAJXZiNGRHNXMzMVBtQyxMTD9jaDBgfF8xJEQyN2VMVF1OaGl5elNXMEJFOzY+OUN1c0dgfVB4fiUjSSYjN1ZjKnApJnh4M1ky''@;'; put 'put ''eWJFPD85dlkxMTZmXmdHWEI2N2MlRGJYWUtFWTlWLGhTcW9SLmVefDZXfHRqb2NpezRkP1h9U2ZCeHBPYz4vdWdyWCh3fEBVVFldPCJfYzJZJX4ob0UhVFJRKms2L3JoIT0yP284MH1nNilFYTNyaDZUb1gxal5vIU9NP341KDNvaFAyIV14QWFOU1BrP3V6VExnbnY0d01JanIpYnV1W0hPejl7''@;'; put 'put ''dj1wRjF2eSZCSTFFNlAiWWIoKUZwXiNBTk1Ca1tqSXJTNFFbYSphcTFednVVP0lpNG5vU31uZVF8PyhUQENsfVRWUW1ESlp1TWc5OWt6Yzk8UjdZeD1DSXshVmtddms2cmgkRShoYjE4IjV8S1ovMFRaW3JUZEliLm0zQUVGZTpPSnJUfkk0c0VqUUspKWsoUk8/SzFoMiVSfHEuUlVIdntEfE9e''@;'; put 'put ''KjAuRW9FXj1taF9+SFRXUVFqW2RnYSZxQE1pY1Y1N1FZYkp6KFkheFdkV0V7ZHskP2Nocnw6JWFuRXR7PWJQe2dnTz1McjRUeWc1NTl9O280ezFybUJ8c0V6Pi4qa05YcjdbZX1LcSYkSWNeVzxNXTgqPHhZIWtuaEJEdk0qTi80eUdxMlcmcmBGYVAxNlA3dD1Lbyh8QWNkelhRSygrNTciSE9k''@;'; put 'put ''UHA8OjoyUikjXVlLSTQ3XjxRQDE6cmFfKDghPTQ/bkBQfmxdUkFTfX58Jj8qU3JhM08kMj9iP0ZJdGshTERffXgsVkU8Ok5oWWpPc0hCPDRPTk4uYE9yMUAsWUVaYlBjamM8alRuPWhNSng6dW84QHpAcSUhY3IpKktXMXg5LGspZG9XISl9XzA4fTlXKUptemZRYkY5WCtUK3U5UCVCQ1h7T3l1''@;'; put 'put ''dk88InxeVDVfP0JrTD9pPXI8W2dsdEJgaCY+KEViSF1rVysvPm1vXVZVOCQ1QHEmUEEpbTtDISVdekYyemNIM0VOTUVldjFUPSpEcWh9YGA7M2hSYHc0K193MCwxOktOeU0qdTx2MlYzQS5+ckAia1NzYVY1IztFT0RoJEVAbXBlKS9ZL3coZ3wyTSFwfGZLWmtxISk2flRkeyMyQ3Z+TkVoVmlm''@;'; put 'put ''M0J4XilnQDtxYzVwViU1VjNKSW9DenFuTjE0TCE8LlYkKkJGQ259eHo7VDxIOHxuMVNGLHdXJHokSCwsOFpsPk56YFlYaT9zcFJsYSgoWzxUSyxvKmwsOHJVRjA7dyFQbFFjUm1MZENmZHFaTEFlcmA7MUBFLGxXbWVCdnMwKD46WHRSRT1SMX0iPFY+Nll7OnFoO0xyY283KmcuWSZzOWwoekli''@;'; put 'put ''QyxuI3chNyx+ckgoazs2K3huPjRkcWBLOzlXViNVWCosZCRAZkZMbmhwVHlTMDk2W0ZrWiZKakJxKiJ7JHBOSyRYV0BlRVR5I2c/VzhnKDUuOGFfLyFWVE88PEd+ZW95N2hre3BDWnxrJis5XildN0VqKkosc0pbOTJyPC4xRXM8fC9SQm15fGxGbDRWW1syeypLK1hyQmg5WCxKUT12IVBvJEN9''@;'; put 'put ''K1Q0Ol1FR198bGVbRld5MjRpajxgeXAmSSV4Sk87fSZ8Y3VRJlJqOyUheilmIlFtM0ZxR29QQHo8cHBDZFkyISN8YyZya2o9V2F9ZzhbZGx7aGtkYCN4ZFhRO217SD5MNFs5VCl7OGk6TUNWZXR7WjI5PSpibGMhPXcuaWF5NGJIOD5UUGg1WyNQalV9YUQmJXUyLHhFeCFuTXlqNGAsbFhSR0oi''@;'; put 'put ''QXBOTHR0e0x4T2YwXSFjXlssYUxEMzJLZ3o8eStuLm9YVD9kOCZNSyhqY0NZZ1hsSChDZlI+fTxPeHY7VGNyVU4qNyM4VCgqITlAPDNlcU1IWHh4PDpZM2w1Sl1jPEsqUXMxISJVUUdgd0NGKl48dHZRO3dhMjxWMiZEan55UmM8U1BhVDF8L3FHel1IZW0kKj0zVn10aGRhaDtUWkQwcW4/bjtC''@;'; put 'put ''IUdhaClqVWBsJSVEQl9kIWsoNDhjQCUjNTQ7eUs8VCRFSWY9RHR2b0piUXE8Z2spUmghN3s4KG4vNV84c1JeJHdxIy9fVnEoXk10IiE9eGYjN0IpWCUhRmIjMEN6U1s/TXk7Mz8zQzJJL1RXMytWbGwsR3pwJHVDd009Vm9VdVNmMnt3PCh6cG03biRDbTxZO0pKVDdhaUllQyZ4LyNNa3RXRjEi''@;'; put 'put ''VGFkcyZaRSJlVV02Iy84KThIWVZ6M0NdeG40YDY5XWArUUhJW2ZSYzRuRUsuOFZQdCghUyZbdHtBM09aKmo1U1VPWU8rV3l1e1Foe3haLHUxcUduN1VmXzJiJWR3SlAmOFAhQ1dTPDBOR0RXJDthVmpySjk8fH1HfDJ7czIsK2MwMitfcipYRTV8REtaQjxjTGYjZHJRTlNCXSo0c21GTCZxXXdr''@;'; put 'put ''WTxHY1cpNjl1OmQlUiNrbiomMkV4S1BzY1R9dVlWeGN9alEwXzxAbU9+T3lES2tEajpyeFJvSDYyR0QvKC52eXtJbFMrL3ZNbTN3QXNNTEBhM0leZkNUMn00djVyZSFtXSw7OHM0aihJaDF3a0lTZkVRRE1SWDRZRF1we3JPe0F4bSpfLyV0QlteOCZDUlJwUCFgTFBeOlJjd2U4SW1uZWFsRnNJ''@;'; put 'put ''e0ZiVFN3SHhWOSQ/YXswSlRlakU8dDN3VGN2PGMjYXYzekZrZiNvVn5yLm4hdTQoVCJIbTV1IkRCVzR9MkJETE55QnksYUhHZHN5MVZ1NngyXUVxIXdrXTxGO3lrPVlUWndjfDpOXltVVVR1TH1XbWImK0hEU2ZXNTk9YVYkeHt3O11pYGVCOmpnfmBQNjN8WyJWQilmYmsoaUgjKHQ3Zy91Pmcr''@;'; put 'put ''L3w/cXRraTVSPSlNQkA2ZDJCdTNhSzx2YkhKKCQmYTN8ckVkJUx9X1dJPUA6R192MmEjSyU+YDY/TC52QEdlTStvRWFnQjEhb08oNEVTZU04PnZMQEVvXnUlc35qTHheRUB5PiM2WmdtYUZVJUpaSCVNbnJfOHVyQzF8XSs3OSxmLkV0S2RgOiRQZmRxUWBbVGxvNS83eWk3eSJhZWVNRTEpaHVX''@;'; put 'put ''JVQ+cnM8QE1RPGRnSlZwRzFycykkamZlJFFJRCFVRnBkSlZjOlt4fV9CI3ZYcm9CVjVESz4wQjFfJCZwbE81TjlHazM6JHY+e2F8MHNDVVB5VVZGSHBbejl5ZF0wMn5BNy91QTA3KmRmdWxkRiZdMWNddFFdQCFdTHJ4di9ULmcqQ15RPVYvUCRZNEtEYVFJInxsOjh7bn1KNHBYLn4jfmk7UCVW''@;'; put 'put ''KFFOVVg0ezxjW1tvYFNaYWB1PmdHb3VHXS5ATHArej5oXiE0N3BdIzkuUGVKTz52ODFlY1RnMEA4Inc/JVN4R1pldTEzIkhZU2VgdCRMZTlzQ2chMk8uWUEiMGF5IkMzMlJNOWE1UjdsTkluXX5VUkNhcmo2NlEkTXhEQmN+JmFjRFZNS1hMKCQyejhvcCszKjFlPWQxdHxrYjdWekBXTHYiJHNx''@;'; put 'put ''YVo5ci9SczJQQCJqWm55a2pgXmduOTp+M31ec0o4NUxHfWhHXjQpKDxKaUciRnAyfkMjLyRNfn0mQVsjJlIwYTxgWUh1bDBZNm17L150THY2TzBAOTRXeGgkams1YTNAfltyaHFSLCNEeElRc11OcSh4VF5fU2FzdSxBODZbYmBmPl0jeCUuN0B1cHBmOSlESXJjPEJwakNXS2Q9JDhEaCRtfjJ1''@;'; put 'put ''VV4/ITU2clo6emYqZH5UbSF3MF0ubGoleUNSRkI9N0xOQFZVX25mVWJWXW0kdl1EaD94YiRiZVU9OG1gXWs2MylmKSxdVmJXcFhheHNwJFA9JGBEOXYldGdFKTBaLmFNcl9re157dDQyJWpKZC5sM0B5bDtUQTtrcnJ6MENMRiV8bERKc2BbNyNROmJkNUB9UyVUSGRQYC84NiV0bzJndEMid2Fj''@;'; put 'put ''M0NMRkxGTEZ1WTk6fDd+NzZbQWdQRGc5X1JTNTtXS1hpLz9pfG1xXSs/UiNgUCw5N2BBW29aeFlgeVIsX3pJZWVfYm8xXThPWSxMZT9pNyxHPXs6dzc2PkV6K2xYWnlsOjUpOUBtWnRuM09vdDRpSWJKV1JRSSV5Zj1WamkhZ1pLdm4kTCtXOmMwOChSZG5Dez89L2VrM0BHNnlDWShrW3psSGZD''@;'; put 'put ''eE5kczskJVc9XUdLMC9dOF8vbzNacGw4JEBudz53USVTOCFgPV9VKFl7Zy98a2VKNk02UyhJJDJvSDgzPiJuNz5gOjVeQCtnWkhzdSxGO05SO2soV2lvKklZYTU2MGRYMDYlMGhDUDJhMl5yXSpkJWwjYlE/PDF1dEB6VDhiSl9IJWtmcWN8LiQkeTVQZXY0OUJCQG1MOXFaMm0wLGthMjNjNUVi''@;'; put 'put ''JCx7YWBtMlllPEdzMXUqans4YiRyZWI6Yz9EcHtPciNPVS8jL1s3Izk1bk0pJWpPPVd+OnIiPWwjQyh4anFXe2xnYVRpcEUqQ1hOT3BVUUkpQGFrdiFoTHFdV193XlJGQDxtQjh0RkBrcF9JV3BKM2xgT2BYO2JpZ2JBYEwka3AuNWwxRHhfUXs1aCVdPGR2LjdgWyxiQ2Z7ZGk4Vix1PTA2fSop''@;'; put 'put ''XUZ7USs2X0VJb11geVI9cSRFXT0hXkk1Pkg9fTo/XXJZVWlgOCZONjs3cDg7SnohMkI7fmo+UH1POUB5ZTFnX1Qva2s1VWFacTF4TEQyN2FRZkVldig4aDBCOFJyLC54PCUlbUZXYU83UnZ8IkVdW2QwN3Q/QlI2OjMrNGcobHhsLiFAITRbWWNCODxXK3o+Y0FmWmtsNHhZe1N3NH01N3RlUS5k''@;'; put 'put ''ODtFXXM+MSN1a3Q2dVVzMHJnZlteWjpSRTt8XTRtQ0w6NlskVXVAemQkcTU2TkJ5VUtRMHp6Pmx1Mno+IlR2XkBtUHw4fH5kNThbN2FwUVtgeVE9JWQzKSZLKURLTi5jbG8uVCNkUiUkZzowUjpgN1NkeGU7JHUwcX1dMFI6YDdSZ2BkUD9xME02RTg1XVtRcVI6e1dkSEtNRns4RCsqI1ltLHtw''@;'; put 'put ''YnZgX3I1bDNAOGEkLl9ka3RyQ2Nna3BFcCZZcUlaZVY4LzdOZGQkTDRzeSRGeTRsUDFncnRqZFNCTVVebU9tNjJSOmtlO1dHSkUoJSppW1puYi5DODYkWiQla1RjZGpUMVk/Y25HMWg0RlBUbVVpRXNBZXIkanIhUDI3blo5NHAqdzc+PH1PJiNgfXU8MHEieUBJL216bz95ZFhoYlozPjdqZGNO''@;'; put 'put ''PnkkNHdPdCFyKjNjPWdzO0wkVDl5RzVqRWRYYDdkLzcuNDVqRShnWEcjdk91N3hiR2RzR0RQInl8Ozk0alhdZCt1W2NIZTBYVzFvWXFPRmZ8ZkVnbWE5NHdPLHU/ZlYmMmN0JXZQVWF+ZGRYLGQvN31PblpRPy46bjBKZSx1eUdqWkRRUm1BZXUqNGMvJDlgMDxfZlRtTmB8T15uYjFPLGVkRDhz''@;'; put 'put ''XWVjLDpBZWUpLiNLVG51XnhFZU9Ganpaa31kYjZUZSpqSl41JCNGRjxMKHdVYjpEZSQ3dzxeWDkjZVhbdz42Rk5nY0A0NnUqSGBtdDBXLGRMWjc2QG8pI0spTUp6US5tMHFdLDxvakkhWXBwMHBsd3w4ciIhQVB9ZFpQbExaN1VhTjdgN2ZSMU5IMFU9dTBYOCgqLjQ9XT52PG98YlN9PVlmNn1I''@;'; put 'put ''YV43ITtHMmAsPGZPNy9nP3hsbjVtQ1okVDt4OW5sa104YlBhRiRPbTpyWG1BWko4VDVFNk1hcmU+eWlbaDVbcEBmfTd7cklaSjhMWzZuJGoxOW9tJTdoXiojeUNGZV03LGQyVlY4OTJEK3hzb2hPMSIkMmBbOE9RXiU1ZWBTVHtEbDFsdClDa2k4PSV4TChscT5rN2ZKNmV7I01neWJ1M182Q1dG''@;'; put 'put ''TXt0L3p5Ny5TQEx7dGwya29TaXw3V19COCo5SzhtOEwkP3pKNlJEMTQhNlpoVTtlM3opUGBsN1FhVGVPKTNadl07M0Q4SzhHWGp7NVUvTXJIRT9EVy5EWzJzXVR6YFt4OV9xdV1sdnRIMD5PMU16TCRsO2RpIzdqaz8ueEgoQCVvOjo1YTg0fV9nWWQ4XyFOfXkmKlJ+ZHg0b3tXWjpsPmA8SCRl''@;'; put 'put ''OyFDMTJKQUJMeFhgIiVTWmNQJGVseztuY1BxRUl4NzVEdk19O25oVXE3Z104PzA6aUpQaV8kP2RPO2M3K3VUMlB5L3pueUtJUCNoN2dsbnlDbzh8blQyfUldRnZBYnVJVlF2XW4wbWEiaF8kckooYUd2M3tUUXRsWTA1WTtdKFNZe2sxKFMuYU5MYmk3VmMqPUk/PTV2Wi45N0lyOTdCUnFnSXJB''@;'; put 'put ''ODIwJThAZkNkfHh5MGpYZDx3T3EsaEpBeT1uR3hCZXcjKzhyJDF3Xm9kTiJidnldfVFdV0tXOXxaMm01aDVecl12UWQkWyZlWG12Sn5mOUdaY3ZwNGlJVXV0WHJsfkAiNzE9YXlKRk02MjsmSzYlKkRSdlM3JGRkQGZVWXtjJFlLVzk9T3FnU0gyYWguO25ubSwudCQlSDg/VGAhPV04dypaMXs3''@;'; put 'put ''Wjg+M151MlA7VWZBel9AXz9GYEhoR14oOmtsVUFJZltabmF7KzR1UUdrPCF6WV8kTDMrTlhJYT83W0ZuZCRmVkhzeyVNRXBxNSFVYnhtYHorfVA5SyhTekMpT300VHpKdGxIZmpHQiNoRXR9YFhwcTUhRm8uanFqImhfOFdFMmMkRD03YCpAPV0jZ2tqcTdhVWZXPWw3bThxJSJBWTohKjwwKEpL''@;'; put 'put ''Z1ksOF8/fTskMyFqZUA/K0xdNSVkbSVOeE8xLCpdXzZuUHtfX0l3ZDZ3c2JkZyFCY2ZDJC5MVnM7VyxHVk5lR1pIYUhLfDhtVk02eGV9eCI3Z0VeRVokdSU3MnVVMUp9ZEElQCE/fGszZltBYE42blJwSlFLSnEuVHNIZiUuUGArY2ckeGVUez9BOCMlWSsrI0tFKFM+OjQ1KDshT24zaFlZSVFP''@;'; put 'put ''M25JdlQ5PzxYIV0xSWJyXiVMUmUkNGpYLHVpazNlLHV4RElIUU8zbklQfGZiZU9lT2VscFZRVX19PGxnPSEpNGB1eURuZyFwOVtFMTlbYiQ5W3k7WC89ZSImc2lfdjRIQEZHZn50YXN0XltqbmFePzxsN19eLmBnVkpnOXdYNVYpcDEpIWdHdn5ffTwsYUd2QCUlOSU5VV9xZ2A1PVokej5uLHUi''@;'; put 'put ''JjMwVyxJR0dmR1NSMkgob10mOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9d''@;'; put 'put ''bnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmOz9dbnAmJT5nbzkmO0xlX2ZvOSY7P11ucCYlPmdvOSY7P11ucCYlPmdvOSY7P11ucCYlPmdvOSY7P11ucCYlPmdvOSY7P11ucCYlPmdvOSY7P11u''@;'; put 'put ''cCYlPmdvOSY7P11vOSY7Pmxibz05eFUqcyYlPmdGVyp7P10+MHw6ViNuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQ''@;'; put 'put ''PzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQIzBnLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFu''@;'; put 'put ''ZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyFuZiVQPzBvLCVqPyE2MkNAJmo/IW88ITtdMC9VI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFbmc9ISUyMTAzPlczeSUhdk5UUEsvNyNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9K''@;'; put 'put ''PVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSktzdF5VOW1mOilz''@;'; put 'put ''dnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbmo/KSlzdnxFX0o9VCNuaj8pKXN2fEVfSj1UI25qPykpc3Z8RV9KPVQjbjY2QntfSj1UJF9fIz5Ue3k/N3tOdlpEekVNSllTd2lHKk12WkR6RU1KWVN3VjluPGguYixjXzUuLD1SWTEyc0ddZFBOdlpEekVNSllTd2lHKk12WkR6''@;'; put 'put ''RU1KWVN3aUcqTXZaRHo4MEVNSllTd2lHKk12WkR6RU1KWVN3aUcqTXZaRHpFTUpZNGVTd2lHKk12WkR6RU1KWVN3aUcqTXZaRHpFTUpZU3dpR3BnKk12WkR6RU1KWVN3aUcqTXZaRHpFTUpZU3dpRypNdlpEekVNSllTd2lHKk12WkR6RU1KWVN3aUcqTXZaRHpFTUsqP108bDpuZyx9dTJZcDNS''@;'; put 'put ''bXR1OG12dThteHU4bV1CMHI2WzJQIldOVylwfSE7LHtfXyNtfHFbJWI1eCE7S007Mz9VYmlnOVcqc3F0XjMze0dObTwlO18zM2Bwa2Z8R0xNXU5YKm18cXN4ZVkqbHEvYnN3O18zM3tHNj9TVl1OWCpscS9ic3dHemVbYS43SUk5NWlFSWFAU1ZdTkFXXU5YKmxxL2IiMioxdXdnOVZZSj1jLHda''@;'; put 'put ''UnhCO3tUeUphfVB4fk9SZmkhJmlxKl13LkgyUFJmaSEmaXEqXXclZSFvcCF7XzQ1YWIjbzUuWjNZWCRQUmZpISZpcSpddy5IMlBSZmkhJmlxKl13LkgyUFJmaSEmaXEqXXcuSDJQUmZpISZpcSpddy5IMlBSZmkhJmlxKl13LkgyUFJmaSEmaXEqXXcuSDJQUmZpISZpcSpddy5IMlBSZmkhJmlx''@;'; put 'put ''Kl13LkgyUFJmaSEmaXEqXXcuSDJQUmZpISZpcSpddy5IMlBSZmkhVjV9LkAjKDRQZ2ovMl5kL0hRZS8xbWUvSTl0NCQ5fHJ8dTZbd1tmaGllc2ZTSiNnUXhXcnReXS8kbzlRQl5fIyNJcltmaCV4ITtiNTJfJVFqJWVJbSMyMCU4N2pRUG1mYyxnZTwhMjAlODdqUVBtZnlsZyw8bWNlaXN8b1Fd''@;'; put 'put ''TyROIzs2dDQqZmMsZ2U8ITIwJTg3alFQbWZjLGdlPCEyMCU4N2pRUG1mYyxnZTwhMjAlODdqUVBtZmMsZ2U8ITIwJTg3alFQbWZjLGdlPCEyMCU4N2pRUG1mYyxnZTwhMjAlODdqUVBtZmMsZ2U8ITIwJTg3alFQbWZjLGdlPCEyMCU4LCNqJShwPmB3LGB8b0tgfFhOYHxHUWB8WyM7YCRIKVFN''@;'; put 'put ''IXxyI2dNOSVqJFBeSSNnTTlze308bFk7Lns9P2hnOXplWXJ0XkM4bVt9bXFbfW1RUHs4VzttOWJwaDg7ZzNdJGU4JVI7bTlicGg4O2czXSRlJWUhb3Ahe180NWFiJGBJM3hVX0JlYCRlOCVSO205YnBoODtnM10kZTglUjttOWJwaDg7ZzNdJGU4JVI7bTlicGg4O2czXSRlOCVSO205YnBoODtn''@;'; put 'put ''M10kZTglUjttOWJwaDg7ZzNdKV08bChldT4lUFhuXUxYbkhNWG5YTVhuV1B1Pn5XL2lARE58XyNLUCVlISV7X18jNV1eLlN+a1MhZzw5dXt9PHlIclsyc2lKZzleZWc5XmVsMiN4Nzcld0F5N09XaUBER2ZzKSpITSF7dXdQV2lAREdmcykqSE0hbjl5Pm0kcTw6UW5pbTEvUGVEflUzPEVvOmNQ''@;'; put 'put ''T1JbUWtOTiZbZyUrfVN3anJQI3twOjBhYmQhW2RbREdmcykqSE0he3V3UFdpQERHZnMpKkhNIXt1d1BXaUBER2ZzKVN9fGYhSDYkX0RlPX1DZT1CRGU9RkRlPS9ETnxYL1NmfnRhc3ReYixZZU0hKHJ0XlF9Jm9MKzN4ITs1UDVWKXBddWklRmpndldtWGZ+X308Zns4XWM7IUhkZU5memlLJUEr''@;'; put 'put ''JCEjYFBydF5zKTtgLzhnYyQ0Ol02YFRhVD9AaWFbPyFhYmh5ZVhvOXtPKi5hO0lsaThOcVEmY2dbbTdnejhSOmprMm1rOVErV1o5NCEyTCRjMTElb1tAaVkzclVPM0MzMVFVMzola1sjLmZ5PDRqa2Z5ZVgqLjEwZVh8b1FdN3BRXXkhXS5BZXU0diVmODo4Qy9AIyg0UGdqLzJeZC9IUWUvMW1l''@;'; put 'put ''L0k5dDQkOXxyIWpSTSlYaTh9LipITSF8ciNnVyMlailvYC5bOzxsXUhXVip7dHRpJXFrRV5fI1Q4NTNpcnU0aGt9MzZbMmZdbFtJT3ZNZFtQJFVXOWdZZDgkYUAxJDg4TzU2a3A2LzAuLmw0KyJmUSxPbH4ke0NnIyMldFB7SV1qXUJyZzJ3VjlAdyhZaHYiKEwxZ1Q3SHN4PzFvZltSVlApPyFj''@;'; put 'put ''PStMMTxmUiNEZltSeUVqJXRQUDk8bGdbO2BkZ1pWQ2hJcjU2dVFTNlo4S2dNZCwuW3pweTs9eSNrZCVARThqL3VReUxPZlYkdjlRemteRyR2OXd8eDsjMDtSSzt2O3sjOmgwfi8jXm1QJG05Mm1BcEo4MyZ0YUJgYz5wVUo5YF17bjVlN2ppJShKKXJ0XmlzaSUoSl8/XyNLRHJbfW1JPDxsdCFj''@;'; put 'put ''ZTdqc3x9PHR7cVszflNKZzkmaFhydF4+RChvOn4jeCE7PlE9NCZoaCElailvPzYmOSE7Ykp9X308T0JfLm8zYSkhZ1VsPSo8bFh9fTxNdnFbVEYmOCE7RFJ7Mz9VSCghZ1ApXj9fI1hFXy5uS1dpTFBoMitwR2krJWJTXShFIVM2Ti5baENmOzM/VXhsaCVjdUhtQWtnfVhlTSFHdUNmPEtre18j''@;'; put 'put ''YkVtZmlzfF1fI2N4NTNpciwoaWVHJDRWW2hnOW5pWXJ0Xk44bVs8S3JSfDgiN3JTIVZ7aV9SbF51SmsxcylRQ3tRUXpIbV8vVSF0PFsxS2xfRDdJdHhsaWNGXzFjLFRSL3hVZmNGUjJdKl4/U2RWeTlWNldQdjk3NDA8LGdrTDxKKGolPTtQOzxsKEUxVip7NCsmbyE5PD88bCl4NFYqe3k0bVtm''@;'; put 'put ''aC5oZzl8U3d7fTxvNSIpR0AlYzsuIyZKLHl7UFJHZkUpQCo8bDtFaXdjVH5qKUkxSWF2e1F9SURreWpEPUxTYD1KLDopSiwuMDtSRDJiQzFJRGtvS2l9eUlVPDZNM2lVUHpJTjpWVnR5Wz1kOz9qUyhyUzsub2VCIzNaQUowc3xrIUdseXxZdSk7SkAlUipOQisqJTRvXkJgdnwvZFA/Tjt3bWpi''@;'; put 'put ''PXJOZDM9Jk08OlthQjhVK1Y3TWoydykscUsuMWdqbGk8IU9eQ0wpMVBtcFJ3eThQc1QwIXBjWDxWN0xtNTpHJGNsRGd+K1ZWSSgoUlY2Ti54aGo8ZWhAaV0qKVl6UXxfJGtuaW9LfTFXbUReIihsaG9LOyVzIyg4Oiw1Kiw5Vm1zVEkvQDBPNDlFYldnSksoWVNPRG9wRlZze01EIjszMXtse2ll''@;'; put 'put ''NVZfRTxSKnQ9cyNHdVp5UzYkUG1Td0tBYHtGIjt6TXo+eks8LzkqeWorVTQrMjYvWSQueTZnU2FVM2drK302PVlbKit7TCF0cX1tanYqcHZeXWJfMXlsVmxDU2h2eF9fX3UudD11SitHckkucHc4OiwsKjtSandOLmZMRD17UlJSbngla3xEVnk8NFdsY0d4I2xtKGU9cSpWRkwxWHY8Mn5pVGlF''@;'; put 'put ''b21NVlpWNzNlMGQ6SXJYNzp3VUsrOXNeVlg8N0YlQCQ/ZzMrTyVVPUFDRXY+T1tWWWs0SlZRTiFWI1J3Rj1PW01Pa1RIVE8pR1FHI2JtOmw8JXg8S01fJW05dllbajhtYXJ+e3xqO0BLKFRnOSZlYFdkIl9PPTZnU3NHZjBmfGxHblQ6JFhJMmxgWFRlZ3EwOS83SnksIiFlYH0/YF5sMU4+QXl6''@;'; put 'put ''KThvNm1iLlpuUT1QRmM9TDlnJU8ueko4ITdtUXxPbmEoSmBre0tqZz55c3lCUG43USklMmhGZ3M+bSQsbChpUGdXdjI7Vk1PPWcuSG9iV3AzZCRtW2I8NDYzKTVLODUhfFsmfl9ZW2NaQl1WWkh0O0l9PGxFYHZmdmhadFowJiFANyxFPThhJF0kJlc9fTNPLGMpP09+WVE5WGRxODNQJHBHI3Rv''@;'; put 'put ''PmdJOTJFK3xCUH4sVmRWXnBiRjhTI2JqYzdjOmI4aSRLVHhlMW0wcWJ6NktoSWQ5dnxIOkdWallnNjJOS2RNNyldcE5eYTsxPHdTRDVtNyl7JiFHZjxzNDRoPz8wbSRjZWJicXdfM3U9OmdHM2A5Ujw1YlRoN08oKVgrLCFhOFozbWAvNT5dI0RNMVFoRTgxOzpKKCRASFU3WTxxWWtYWkBtJV5m''@;'; put 'put ''O3o+YiViP2pqOTpuQ3VsPDdqeHhKWTV0VH5kXWIhaCgqWz0jYiFoTENYRUJucGxJPHduPSwmNjZNQyY9Y114MVEucmp9V1FQPU0uQSYzIUtGQ198YlgrIixFe0VxSygxb0soWF8wbXY5bk0oLkNAMD5DJTckfEBKcUtQTSh7JTckcithXzU1aUk1aENpT0JXLGRWQl0kKz4hJD5lPVRKaUU1cWJf''@;'; put 'put ''MW5xakhmdH1XVXlibmwvQEElWHNNKENAWHNtLC9se21fSSQ3TzFVXzhtMTNkOnZ9dzYuJWtbZDY5c3hzfGkuai41MWZQViE3SV1yekR+U3deel08Q18+fDFvcVRQPSpAQ1FCeypkS1hWZ3Z9XTBPUE44RWR6Q3pDOS45Mm5bPzFaclZtTzNSOjJodCFjQE0oTmxBLnpqXm1QfDx6RWZ6eHYsTHJh''@;'; put 'put ''bjRmMCFEPi45NyRsXk49cltGJmE/Li5APSomTU5IJkdlUD9meX0mZl5nbXcuV197SVdLQz5Wdyl3e2hsUk0mO0BIUllFJSxPZG4xZDZNQC4hW15iYH5LdVReJU5gfj9lLnQ+TSElIW9wZiQvSXxnbDdFeSVTX1QiZCpydCEvIVZuSSQ5ITdtLl1FeTtvMTxKQGcsJTJBVjx4K1A1cVMjY0BKMi5z''@;'; put 'put ''W0siNW5JWVRvKEkkdyVCakIucjx4fHcjM1kpbWQ6Wz02bktdc1JvOF8mYlEhfl1KRHJka1hfRyZpW3tzeClXdXFKImpWVChoNWFeI3IoOWpHZ3x3XzhwJEA3O2x6bWY7QUBVOGFvMGQ8bS5kOkJjIXd8MHlGaUdmKnA1eF1oPTdIK08oXX5KdkI+ZmA+c1RtcyxyODh9bDd0PV0wMylUZyJuQVtP''@;'; put 'put ''KH1qezBScXc7SCZhR2k8dlFFM2RNKGt5ZWhFU3ZkOkA9RWhdSTVtU1BScS5UbXB2OiQseEp6NDRoXiNFTVtLLC5bJm9yVm03cHhmVTlScW4ybj02VV1VaGVNKDN6QTcofUEjKn1+YTcsXmdIYDYySyhiaU8pLmx4LCtdTHpyUi48W0lvKCVARmcibnAyNkVpblFVKT4jYilJJT5HZ31rIm47QGVU''@;'; put 'put ''YiR1fjk2QntlVD04RCtPK0QoVGd8d3hOJT4+UnNdYT56XU9QVDpJVlVsaW1iJHM+Rz1RaSUuOzEvOFZtNXVkMDZYZDp6JSVhL11JbHQ+bntGMW5kN0oraV9zciRPLEwsJFhFeWhNKSVmZ3EzSitPeiRqJX5VK2ZrJChGQDUsUiM7ai4he2ZeI1M9NGV8MDk2IWFUc3UsJTIkai85NE0/fC5sR3ts''@;'; put 'put ''MWJxM2AubENgJCVqR18hOzZxKG8zYik9XUw5Jkl2bDExQS4me2leR2YjYC5sR3oqNH5dLjwoVT99Z0dfITZKMl9yKGVRdVg9LmAmLmx3ITdUKEpNJUw2bjwmUi9QMnw0bXhnX214R05eW2oqXnU9MH1Xc3QmYUc6JHJSQltBUjkmPTBnTkA5clk4KXJVITtSdjwsbGx5aGhgeilvM0NwPlFIPzQr''@;'; put 'put ''bmRURXo8Kk1yKC4iM0Bhc3BiOkVlJSNhflNyMXxsYSE/fH5OMGRiNlVlVm0zKTsiVENjKjVrMUlaJDdxdCxRP3s6LmdmNlZIfU9+Ti5Ec0hWMXg3dnZYLHRuSVphW0xVYGRwbDIxdFV+Tl9Kdl9EeW1aQT96ZyJ6ezFlKU00Vj1BMGlrfG03JCE5W15yQGclOytQP0ZjQV1II3IrWm5AWmFhYmJM''@;'; put 'put ''eU46ZCk0aHpsQmRYb1okX2IlfHVzblJDT0QrXVZ1JU18VUNBUE4mOGFrZmBkK2UuXUskTGVhbmB5Vmcia0EuYnckMCM5e11pX25QPHJRTn1NfU19TX1NfjVhMHklJUlCIzxlSGgmMFFOZTZlLzFHL1BpLEA/I28xXV5JMW1efXBiM2BdSnNAcXhyUSFqL3A4ITx6UD1+SkxVZWdoW3F4aCR+MCJS''@;'; put 'put ''PiVdN34/d10vZVJ2Vm0mZFJ2Oy5rcmYsN257LEFpRyQ8UiF9WTM2PmMsN25BUkUobTNmKTx6MEpIUjt7alBtLE5oVWZQZCRQdGViWXZJe2R8XV0hXjJqMTUkcVpZbUwkP2dLcSZJSWhSdjc2W0o5JHAkT2lxaFE/VFB+WSF8UCNlPUQzNno3bXVVPS5aOFZ7UnZfNTZyZjAlQEJvX2k6OTZqPyl8''@;'; put 'put ''MThKMDtMbTIkP21fNVUoe2A6alZuaV5sYEtxNGpFSSFnWXAzKSxtN21XPU47NzJvYDM+cz5PfXoyL3s0JH4wWVZYI3h7KiluRjx4IkUyXjN2bXZuP0BTMjsxXkNSKFFDaXJoJnZzYGlpdiEzZm49Z1Q/S2ZkdWdbKTxsJF80TTtqWUovYWVeS11mRltxdypMU3wldC5sflZqTEAwflZqO0B2bT9z''@;'; put 'put ''aEdgckZWcWJvTyVxL0pvfkUxS11UIy5NKz98Kmpycz1JeS5KOzB9KnwmQD1kbmM/ITRjKSIvZmdlcTdKTiR3KktdbWI+fTg3e156O2ddSVF4eD0yI3xuKFswNjtWamQkbyh4c3w4MSQjaCNWUGg5fEZnMEBVKGt9cn54Xm9KWD1yfkNRTyN1cXJ4XSFeMjxRLH13K3NoRTgve089LGtjTWBdfmpH''@;'; put 'put ''c1htNVFnTmMkN3hlRFhzSlklfFE/MSshaFtqcXNefTJfITY+fjEsMW1WPUZ7MGFoeWQpYVFNM2gkVzpfP21qSEorUUdwSl4kUjNTazF3VSh7PjFyfmgxd1Uzc3I2WF9tanBEJWFaM2goVzplW21qcERtMWBWfSMqUXxLI3VoXn0vaVtUKEp+WTNBb0g9UlNmcDExK3BIZG5gbG8rcFA9SzJpa3Rr''@;'; put 'put ''dnB3TkV9Y1EiM2w8dT03cCpEIzlIODVPNTZWWUcuOCxAWjIzPTpoO0dwQlR5JCtwJkUjSU0yZVFxanxaR2IlXUo5cll2TkJwVH1OZ1hTRDY6clZtRFUjTCREPFMiOnhfTn1NKU4xRGFLJVljXmAwOUZvfUpeVXE8Jk15NG0zRkB4U0B7fWFscn02KG1kMEYrXXhFJVgmcHhNQGUuMm1WfTFvfntT''@;'; put 'put ''PUNvIj9pY2ltUXM1UWFUI3U+cnJDMU85bS5dQXlAJXRWUTksVS97Ym5GfS5QKitdR3V9KnxgKzc+cWhRaXh5fSoyPih+LlFTKyZeYmlhW31hXysmaiVWLyxMamcuU3ZwJEVNNSlmP1N2dSxJTEBaZyUxYCRqN1ZKM3FHN0pvIUJbO0A0YnBRYmA6ajNfJFVmPT09IWExITdqd1tiJDswN3UwT2Ml''@;'; put 'put ''fHFTRV1mdX0pfTEzVShmVkk5cyx8JktlVjp4QjNFXm09Tm8hQFp1bDcucmh8MzojKUA0NnEsT2x8Xm0sL2xRMU1dI286Ok1XZyYrYVJdM1BZJXVhP2d7cm5mIz0pcS9KaSM7MG4kYC9kcm5mXlB0IS8wRFMvLncuVD1ZV19HNUtyd1UrX09bS0g6Tz0iTzMpT3olQGEsMm1geUJAS3V3XlFVdVEm''@;'; put 'put ''JTkyJCU0LmE/YCpIXUFvbls3NClAPFhIdUAlLk0jLFt6YmkkJnYlcjxPWTdaZXlOYDIwWz03bi5wa29RW19SM195ZTVQNU8sWVtqbmAjfHNVbj1PVT58bW9HMU8lMmd9eC5QO0AmLjUsSlFAfEF9YTY9cTgsW0hxVm4uW2R+QnRZdTRQKjVyc2xAVUZ5ejwxfEdnejJXMTRoeys5MnsxIzJ5JVlE''@;'; put 'put ''cyUpekojKEdJU0dnImpEUT5mT1RAUi5yUisibmg6c3o8MjgvVFtdO3ZdWnxdMHV4SDpyVVkoNSRpMTNgKz04fTAySl0wUzxAa0lhJF4jUSROJGgpSE14UVZtVDliMDg7Kmw8K0xbIi5gK2t9PzFbJnFOQnA2VEQrZ2QjPToyPF0ycThgZXx1PU8zZVQkTk1qN1REU08odFVuPU99eFUucjZiVSNW''@;'; put 'put ''bnxaRWg8REtJX2k/TEUodjsyZ1poNWphLFJ3QGV3OzRqL3BFUGBbMFo3bj9nP10vZG4zIXhSOD56R2xGUVI7fUg7PUo5Q0l8PCJ3JWJMZTRoJWIkN1JgcXNESUNQVls2LFE/MFNCUn1uYiQwXTgkLiN3MHt9eXNtVD11UVNlX2AsM208ZFEhNiRKUUBaZWJaXz1OYntkZyJqOmxzQCVvR1BJWFtk''@;'; put 'put ''NGV1Mmw7OC9gKkBEQEMlSi9hPj5VdChAcCI1MGUxQHpWbVFdSTB0VUVmakckN35pJDclQHMiR3JQL1lQcjx0RFF9R2RnUDY3aXMzZylCYl42IWtdRFFKZWU4UjpgPzVhK3VqLENZNGNpKm0wPjB9V017YzQiQylEKURUQEBiWDs1aGRvLiNEfjhtLl1kM04jTmh6bHxiS2AvaGImS2VQZT54Ujo/''@;'; put 'put ''QUUzSDg5ZlU3UjdfdWtlUzMpQmNnfGdAdUdzdER+Tl4zbFtLUUEvUGU0Lk1yT2NubDFdZGIkJiYyWjFgJlo4YVRSOmIxPk84cn1HWW84VFEmLjhkfGBONDRRLD83RTQoQmtvN3FaLExOWV00KD9ZUzp8Nyl4aTYqdWQzfSomanwzUXU1aTEzXXJeVkM4aGNtPTRiemxibyJiR3JtX2QpelZwSXU6''@;'; put 'put ''KzNaW154N3VWbUBCV2FpdlksZz8/PyYuRjtodC9WfTtXQFhfVXQwYVllaEA0KFMjcTJIViF8YE5saFUufmNCWHxFV3BWYlt1RShGeGElcGQ3LHVyYnloVVtRNTduRV1RWUZpIUQvUUQ8Pm5MMGIjblc2elFSUTlfd2pXXSJpQHsjaW5PYDJQQXBDbTA/YlFEeXVDdjlpb2x0UCVgKio5cmVaWjQ0''@;'; put 'put ''dFpsLkZ6b24/eD9ZOXxlZXtZPFtvXlEsQH5DNGteIykpOXJBW1FAQVNdIyQqKFdbUjV0XUpWSEF3VmEod3pSTDomUWBuKTdyRF5KXiQvKjIqRWx2TmFAYVtlTWZJb0JQPjl3dXV3KkN+OERqKXkqPG5jQi96eWtWNjBPTEhdcDlDaGBRc0QzQnl9fSFoI15NU15IOm4ycVA8dml6V1d+bmJOVmdq''@;'; put 'put ''KS5eMG8rJCpfUFNFOn0pKTRCI3MsYkhyMyNbPSR3VF5JeWorZj5ZfTxUX0BWK1U7L2k1OiJNOT9de24rIjI9Z15gPUxnW1pMb05bKTdjPUc9Sj5dTkpxVlVqczMsRVNmZF8iNGBWfFlYI2ZHQnJ2KHlxQEt7OjpIdSFwfTVkTm5+dUFVWEliPzpfM19GOERdUzllYERzMSVjRk0wMGZvNz5zZFEm''@;'; put 'put ''UT1ZIz55MXRxO2hQQjZIWDw5VDtGXnsxSFM+ZXlRKUl2NVdhNlZCM25SInNxTEQyW2NObjs8QnUmWWZPa00yPyUrZTEwXUxeSHRxd0wsN3lidiJVdH52SzRGUi89JTNXe3hIZUJRMWYkc1FfQTQuJXloW2VQQXpBYW1gTlp8V2JJVVE8X1RvOX5tZyZhL0NacjAsMUV7fCZGZldsXVBecGBDRE1X''@;'; put 'put ''PC9QSWdKJV9faCJgQHpTS0pQKUxJUTlKfCQ+Rj50Rm1KN2csMihSKHl6OHFgW3dEbXp2Nm5WLFcjdCR3VXxCe2RWSyQ9M2dMVzIpWno7PEc2NlkoXlE9b31uLD58V3IkVXgxb1tYdkIzUTBAXzJwbmAqZ1gyV11OVEs7cUxmezVGcSphTmp8UXB3PFcjQ2U1anFPM25ENzxPd2RCUURzVlJKdCkk''@;'; put 'put ''YmVXQDFocVd1W05bbkh3fEIiSHNmKVFtRXhxQmY9Rj5MZURSNCwjN152Wz9OclZ8b3IidXtAPiM6Vk91QjJtSmRtJm1GViVuYzN8fSMwLkhPUXdEQVJOUUVkKiZIT0JRKzhEWXE8OEsiUDgqPE13eHQiMkEqclsxQn5MQEtEajZlflkscmYrSS44Kn0kZ05YejVNPUwkM24lRyl3dHI5IVExb1ZX''@;'; put 'put ''W0RqW0hvKHZRTCl8KXclL1FCODN2WFNFV3p9Y3NCNU1+S2hHKmBdfGxCYkp5QVArUGE+ZSVyZHNrQS9wKSh1TXVEdU9fM2hOJis1MGIqInZRTzU+W0V0Lm5nP256Wi8oMSt4aCxGclhuckt0UShMe3xzfWZbR2pGXSQ6SVs5TXgiOXh9YHg1dmlOSWBOQS5ifktrXjdKQFhvPi9PXlVqcUYlJHBT''@;'; put 'put ''RCxGeFI7Jjk3Ok4pPW8+aFMzJCpZSTNFTEJbRCl7K09Ee2VUI21LSzQrMn1xdzRNOGJjPzpROWRaXmw3eikuPFZtaFlYWD9AVW1PTUdTa0I0a0tpbzJqRDo8dEIlOFdPP2s9QkldPjpHU2Q9ZWhqXkJpZUduI1cwJTZCdzRCMiosTUZKdEVoX1RyKDgvbnJlaDMsM0Q1XzNmUlEjTnA1VyNdIkpW''@;'; put 'put ''PWEhezdqTEMxMkBRbGJ7JHlUXkM6PnRsKmgheihON21FQyRtc0MxKk5dOFluRH53fDJHTVddITphIVV4P0g4QTdsNXNGUFlJb1lePns1aCtkQyFJI0F7IVpfRzVSV0JZfHFfYDQ0fClyZ0tAenRba30ibX5gKyRWfF9ZVVMiSDd9Rj13Mz5BSl9MWno8SUB1Uy9FOVozYiopTVJjY20yWi5NNmRh''@;'; put 'put ''aGA+NEhMWkcsSU80RD0/PkZlNjtuPH16bT9qKyJlX14scnwwMl9SP3FwRnlwJEtvdW9benBwMEd8RkQlM0RJKkVFZjdxbXBtMW9bZVlbcUc/M1E1LmM9VC9PVyJ2LGAoWysmbit6VlNuV3ppSlgmX1pSOCY8d3JtdndfIXZzUEN1b1YjPCY0b1Z2X1FaZFtPOVdFI0pSP1sqQFNRT0YvXz0mMypC''@;'; put 'put ''Wnp0V2EyTG00IWglal1oJT50b1Z0X2JJRCIhNiJzLGB4WzQ5cnN4fCV0fD0xUnYuJEt3VVEpOm8jPTd2dkk1aWozK1QyLjZyNEtHU2dGNjx3bXd8QSN+VWw9SV81fTdeRy8rM29Wcl9jMWNbdXBhI31qYnl0SiV1ZUttVmArKCFCUV4uOjsiVUpdVSswMmxWdCF3Xm9tK24iPCNwIz12TmJUWW1I''@;'; put 'put ''IyMle0UwIStgKk1YPGtnNHBrPkldfCNHdG9bJjhZLCRPcCklb29KOD0jb2FUWW1vTW08UiZYfntTSTRSQyhoZjs4e0pCT3suQmRqIityNTsqWTNbK2FNTEM8UjMrPmp5c3ZTQSthLiRaRmpALE8kMHgrJF8yeG9odWJKYDw8a0xTfkIsYGxbPmI5TV9VMUs7cXBGOio0IU9vfEN4WyouJjM/Okpv''@;'; put 'put ''Pm5bVltuaWQvbzkoJUsqSXNNSUtOQFQjPlAwLiYzVio7Q3U1XiR4KmdiSE07PmdGVT5uM0dScyFybSo0REdFb0w0V1QxYFFQOkZuMm9WLnw3YUw0aFNbcXdgbmtVVyFqLGB9QEtue0MieUp3LE0pfE5FTDR8UVtxb2BvW1RXP2csYDEoJUs/fTZtYDBUbWlgIXZUVyplLGA4QDQ5bXNsN3hbQF5L''@;'; put 'put ''bm1zQTZ6RF1yWS5XKSpIUj9BalQ5WyVbV0cvInpvVjZ8XWxLNG9OW3FVYGA2U1czb1txRk1MdlVRW24oQWl6Mnx9ej1xaEcjXjBvMEQoOjxGcVIzW1Y+b1ttWk0qbitHKlZRaFhAaV5PKF5nRmNXMy5wJm9XfWBWPlU0VE1LbndILHxfTjBbaX5JanpbJHxHfE80bVRtV3RtS253SHIoeF5SJU8u''@;'; put 'put ''Jk1YPDVOIV1ZWzpWJDgjJmcpciFZZzM8S3dJQypNJXM5eltxO3MjPW9WJHNZeVtxYC4qeTY8Ymc5fWFHRy9FPVY+Ln1yREcvfDxVaC59ISJhKyYzQzN1TCtgNXkpRlB3cmdDdSoqL19GLz88VWgyc3IvLGBHQD5ianMrLldDeEowPDlGcUEsR2JmM3BsRH1rMiF3altxY30rSkkvRnlvVnZ8fEdJ''@;'; put 'put ''L0B4b1ZpNyFaQiJWfmUyeCopXk83YSt6dXlbQV5oeWJ4W3F8X29bTjRvOW9WTH42bXlbVXZ5c3gqTTV+Q3ZKWyF2W1txY0dDI0xUemY2aGg8RnB7QF9LcSxIL2E7Vj54czo4LGAmfTFNels9JHpbY3wvZTtPfUZvXT5iWVdrUnNXVmhtJnh8YCVGL0F4b1ZGRHpbR3RSK0pPfXNMKGxWJSY3UlIj''@;'; put 'put ''cjZvUkB5ai98a2lkK0goNWU+NV4wYTMrWntGL1RnYGFXbXw/UCsqVD1tR3g4YGMkdjEoPCU/M1FZV2BPLGB4fmU2Ri96d3AmSVJ6SzUiW0E0fSQwRi9Ud3Ama3x8R0o0QEZbcSlfTXYlQjNFJSM7cUYvMnZvVmh8YT1JNDdFW3E5XyF2TCZYY0N6RzdqNktFSX1lQnpbWF0/LmVzUjMsYEl7R3x6''@;'; put 'put ''US9NdmxGIzcreEp5O3laZCohKTB8ITBiJmsiOVYmYHlbSXxSK0kvfX5FfVthYjB9SyVhJFZaYnojfXZQPDhOPlNyKnZmWkZ3LGpfMUVBZnx+Q30mSChoOX1KNkxjIX5CXTtjYH4zXyROfXNjfDxaUlNqKFR4NjJAXzUwZnBnRmAub1s7W0QwNWBRJEFFPXQweU1UX187PURnVThvJGtbQX1kRyho''@;'; put 'put ''OH1+QzRGWkwiflczL0tkYGx1UnFbfntgW0t9czxoW35IP3F7VjVgZVt+Rz9DSHMoWnxIWUF0QElxVypUWVZLNmxHT3tZSjhSWV1GMzBweC5YRU4oKGBrXm0xKnZWY3Z3ZE0jc2V+by9uSXtzdl8qdXQoNn0zNEc3dHA/UWRbI0NxRlt+fj5nTjpxLmNHaEZ+NllueGo8blMvWWJSIixndEw5KXlJ''@;'; put 'put ''Tkl9VkU7SWAhJml9Lk4zZUV4cTV8eVlhPF91ekY/LE1ROTpxcUJudHhiY1ZlKUgkfjpeZn1LIz9RfHNQfmI8MFtfc3Z8bCF1KD5+Il9+U3NXbVNBIi5+KX1WfWc5Kj57c3N8aHs1XVE5JH1xP2EjdSh0KD1+WntAZHRXXX5LfSxJNEYkfjo/RWh9cyh9fHc0RiJzVHwmSFdMXX4+XzVdRzdfc258''@;'; put 'put ''Q0hpbiN+dygwP2NafSk/b2J2TS89fjhfbkk0fVk/eTN0KCt+LmBdQkZ+JnVneExfR2YlNT9ua0VFditDSFhXQEIiT0RSYlhjI2FSI3ssZ0loSStTR2t1VSp9W1RsVFdWUDlQK0BuejNvNUR4YWtOOiZVSVsjZnxJK091TnZSP2RuPz08PSlCRCUzL0xHeUVKNTI6YnBCUEx7MXJLMFU7XjNYMUZX''@;'; put 'put ''VEMsWyhBX113bFRNNzkxW3RxRlplckVpdHUoQH5OI11dR3MjPVRoM2dtJk1HO3FxSj1xVn09fiNgc3BUaF48Snx6QnlyLnR0Vzl+ZVtwcDZsSjNFVDQweis1ZVMzbVQ9KV14NXJLblUxVzRZOU1VPW1pcjYuPDF6PjRlc21tVih2c1dXaUBEP2Nfbz0kOWd4bVA9V0AhMCVrNFhmeHFFfHd5Sm12''@;'; put 'put ''Ji8zcCglNVtFb3QpJW99fmN0WXpdVCloKz5+fk8zWFE0PH0yeiQqUWpfKH5RW0VvYSVLfGteWnMrfk9beztsVi5TKWhxflAuODV7fjVPQH50YE9qVzQ0fSQxNEY/c2BzVFV2Z2h+Q0h4KWNgRXZaK1BJQEsjZzpxXj5lc1t8MnRzflNPTExXfHIoL1Z8NHRbJXlzfjtfY240ckhWfi4kTlt8UEBo''@;'; put 'put ''V30zTldbfExATDQ7VXUoKHNKXnp5WnJXNDszJE5yW0oiQHwxaXJzTzw/c3l7a0k2Vl1YXy4uRilgXil7fVUhKHNHXkcvWXJobjszc0pyW2F2QHxiaXN+SDxLTGhyakJzW3g6e31NIVcoJXtmbj0zdShAfF1eZF8+My8mYCsvNjlWKmJlTUFNeVdpdT9ve0dINEw3YU9uengkSDdhT354SUxKVks2''@;'; put 'put ''JDRleCl4eHQ6KnN4InZ7THQ/K34uRnYiQnIqSF9fQCgwZH1HQytfc2B+XktNe25JNkZTYWgpIl8+KDBkLkc/dD1zVUNLNm1BV3hmd1lPPn4vXzspWUY8KCF+SUZxImpsM1sockZtUyghfkVtYnZbfjFBT2NyYTNMUyhLVks2XyhreEt2bklaPzdLQSJlQUk3Vk5OeGcoeUtHOiRXXT9lP2F2Wl1a''@;'; put 'put ''U1ddYX43bnBMZkdhIlVDV3RAT3Z1KX1HNTB2ekYzNkV+bCJzOkQmVXRkelBEU0FLVntKLH5HN1N8Rk9mRyxuYjNaeFNhfmssKipDKTF9Pz8xaDhwam45b3tyLGUkekRKfGVnPn55P19aST9vMXwxYFNgbHUufkcrfCppZnM9V1s5cSUyJEZed29EUm1rRHJyai5HWUdFXVQhcXE3RUB6TDMmQEhI''@;'; put 'put ''LmZJYjU0bkd2VClzPzw6P1B3XWV2Y1NhUns1KiVTKktHOnVPX183cSMjcyM1Tks2OD9gX1Rle2RGRVNhQX49PzxYbHk+LmIyKChXdmtKKyZkZTlIcThrXU8mWFNZI3lUJktvZ2t+K3EvSjIzVHImbCgxY0pNdztKbj5icW1aZH1WXjsrIjVOISE0NTk3fSxbQiZFQjBUdmJTYSMrIUw4XjRdJm8l''@;'; put 'put ''dSxLTHJ3KU92WjNNWE0uRz5xX30sLjljdCJrTytzVTRyZCkhSDRdI0JyPkJMfHIzQG8+alNnREQpbTcsdlNxQXtgW1YuQXQyfT5JU18ie3hFOnxRRTsydXZhc1Z5WHNxVEByciRTOUVwUl5Gb1ozWz1bIz42VjcubEIuQVY9am9KUGElbz4jeG1LZV95dDZfcT9maDZXdmB6SGlNfl1FXTFZS1pl''@;'; put 'put ''aE04O25bSClmNkhJMUtWXTErJGJgI2Ngc058ZnE8WG1CdTNda0lzR2dLc3BgQHgzVDo/Z0ZnSXsianU9SCZSeHQ9fFtkM30qQHpIOlIsYj8rLmZ9OlRRc19HKzVBVTJefntxWkh7Kmk2YTVhMm0/NzEsdSRfO3EsNWhEOF0hNWFgWl4/fWE7ITMjMWo3YXlaQFlxPjcpfWE+UCw5TmVxLFM4Tzxl''@;'; put 'put ''VGdUPioxPjwuWH0sPEJ9Y15fU0dvc0AxIy9Kdn0jcGhmJU86M08oXzcmS20sSmxHaWowL3tYeVBRUSY0VVQyZlY8Kj17ZzYlZ1tqUDk4WD1VPy4vXSZpTDAjYFd7ZHJXX3dtMDtwODk9UStWOFkxL2xwL2hvYHlBOjZAXj1kZ2BtWl56aEJgJWU0UHJzOHAmXXpsKyMyZ1UrRWA3bnQ2QyE7ME44''@;'; put 'put ''MSxbM1ZWe2JMeGZJbSx2MXlkaVkkKFZjc0hMeU9aMDExSWN2TFJQflJGVjpZZUFTfXVOLnUhIjFiQz9rM1BiamthM0V3XndJOzooKlRKYn1PVCZJLEVLNmN0bXhoeXg3YmNvVDpLJH4+VGdkdCNLfGcibUtkN01oSWxaJlQiWzdpPUIqbzdbNC4rTnAqbmxfQ3VvUihUTWltQn5BeVdDeXVpNEks''@;'; put 'put ''eWM0K091dTQ0PldOSFFwXm4jYHcpNS5BeD8uXndNdEo3MXRiWiRNOkNUdGdRQFZUN1NHU3VqVWlXUXQ7fjNAaDZ9czx9TDBBdD9+WGBtYlc0bX49K3FQe35XfnV6bkk5fmhANXllQ0ZkZXo9VksqUElyfDd+Ol5feHFXW358fUUlOnZ8cyl+MH5IfTBbP1E/fnF+P31JYFpTQXRLTkZkfjloRjAu''@;'; put 'put ''bVdfYkU8KFE1M2c0MlVRUWp+N3FLXTVjPzVKYiUzWUdnRnc/bFZxNGokOnZ1KFEsTGNBIn1+O34lK2R5clVLNnNyPz90QCpOTFU4N1JJK09TQjdpUFh4dHxoPnE1eSo+YUV3T35lU3FYNU83bXEiInsoa19jKnkxQyIyX0pZMVdlKn1SaXNXcV50WzdsQnJxfD4zQ0c6OUZ+X2hBKEtHOlFjV3g6''@;'; put 'put ''dj5YKTVTYVV0XlFRS0pYNFIwKXpXVXw2PmNoMVdNYj9qVyZ5MVhEQ0QjR0xpaUFJTSthIVNxRldSak4wQXBFcXBdQ30+dUcqaEM1blg4RHdfLHVicUR2UCJheXA0WT5oSSR+TEwlRlNYdiZFTjUzUDRWST9+an0yTDRGJX5QQGJzfXMsfWh5YGV9flJ+KDxqX19zTndoPmQwOHd8MXt+UGRYUGww''@;'; put 'put ''Ji44SWtoNHFoaylLXj4pVXFMfUlmJFE9Sm1vIWlqVWxdRERscS9gX11yaVUmRWAzS0pZKX5FdFtZKX5Ffk57cz5eREBaTHV3QHNzRmNeZztJMyolcl9XdlIzKls5aXwuWlZYY28rQF49S29VMixeMXl3KT5lI2wpan18WGU9fTxOcUsoR1ZSXyJYIjtFMVFTLG1aJjoybDpGeiJNeGRQQnZ0Ljtr''@;'; put 'put ''VU0+aUxrMGFBIUlpSGNAbjM8JkV9alVYdHVVcUhxcTtfazAyLitJMSFRPG1PQFNZY0ltIlNFIUt8cHZ5XjFRJXFRbj17aHZ3cUxSeG99PjJVWHRnZi4qSjJkTC5iejksJnJrSzZrOiQqNyRKcWxeX1dwMChRP1YyZEhmMWIoWkEhbnNoS2l6UV93MypNazBBeTxJMT5ya0txL2EuSl1UY005QUpE''@;'; put 'put ''Nyh6V2BgYHV6ZTFCLjxFMU8iP20jfi59eHk7YXlyeldlNU5xX1tyKHJzSmwkOSpSYGBPKCJ+aCFffngrdjBjfXsyQCt3Yjo8LzI7VVNhTEFqeCNRM3srLnwzaENSX3JHQD90Q0dwSjxjMF1Nemlnck51T1IuT11KN1JNVzRuPHtOKGhwVF8qWVEhM095eiZ1LCZKcVJeIn46PEoydmpqa0N9eURE''@;'; put 'put ''e15PX18vfitSJH58a2pNSDxGIXZeNTFIcENtQUZMUit4eXgyaW82SUQ8IUZtOix+anRpM0k6OiFZeWpacmQsNllNIXx1V2wrR1dmTTpWVnQpZHZOTGd9YSM5fkFjeDpIfjRqSWN2e1Z7Mz5MVjgkVkJzVz0uRk9BfWApUzQoYVFxVjUyTDE/W0NtfERBOH0sT3pGP2NjK3p2UWRfPmowXX15ekw0''@;'; put 'put ''Z2VyODh9Mnp4azJbMWUrfWhhZ1djeEovTEM0eSEvMFJ6XyM4WVd3O3VqSmBSbWJXKT9DMF98eyxtc2BuRmNtUUMsPkBpZkB9YHdnKExUbjF1fkFbJWh8TiYseUByPGB9ejJQKDhuN1RYPEsjUH4kXTM+VW9uLlUpYSNHfit6UChHWV87YyMoVXlAUUZvXzJ2VnxFajV9RG8mflB0byh0aWlfbDVe''@;'; put 'put ''ayVgUVpWfCQ1UTQpTWduV3ZtYi98aEBpfjFjUFdAfTkyPHwkTnZ+S1hQVylJekZqTSx2Lls+VFE/YDIzX0J5fH1YQjZoXmhsMXE3bm9Xe0Z5bFs1KVt9SSJmflBjKH52cWBzdUlNL3pbUnlufEZAYig9VDo5UXBGNylecHk3fHB1OH0+PWZuajROe3NXOFthUGl9NCglPjU4N1RDRE0vWXtvQiV9''@;'; put 'put ''WUdjc3BjMEYmXnpFVWBRWnx9VVhSV2dqJD4pRz0yK2BUdyp9SUVJTFljZm5dRDwyP3V6a2ZgOzg3fWw/Uih9Qzo5VWQ3NUsvJUteYF12Kn1rcmc9Nn1OX1E0OnVfZXoiL2lwWzkye3xtO3xzR1FNL15bUnlHfkNvPTk1ZTc1Uy8lS35gbCsxfjliZz07Py49I3NFSyNoXXBUeEI0OW0vW04yd35Q''@;'; put 'put ''czo5TiYoVTF+XTQ9OWpnNzV7dG9WfFsuRnd8Z2ghPkM4Tnszfndjaig9SC5Ra0dmbmNGVzR4KVpTLnx5NVkodWdfOyVAaEtwYGleNn0uY2Z+TD9nKHd2OW1oflY9QmFRKUtQXz4jSXVfO0VCfl0/PX5Qbn1deTpoS1R9eTVrczBMS0xhSnhbVUguQyh5OW0kfXcsR2M2fFdEQn5wKVcoYkgkPkZ6''@;'; put 'put ''VzR+KVpTcF9KKyF9a2k9OW1uc3BNLnBTeV8hdkN+VVgkc0xBZz1ve3ZzVDREel9ldUI0KnAvZVRRP01KVHxsZThoMVdeO2VKc3AsXlFGOnxGa2Z+OCtlVzlbUFF5flFdRWNNdEJhXn4sWjVoKVljX0FdWlNdfjtLLzlFTn1dQ3koVV97MnZffWh9aF9rSGx1IisyO24oPF56VW9+bXA5aHkvL2lN''@;'; put 'put ''XSlKa3wjOmVfMEQoaC59LCkofXAhUVdMUkpjRF1zUitzQz83VGQsfmldfVZ9b1dCbUwvWTQrN199Nl83Plo7WiMwX1pDN34idVtYVF1kZSl9byFkfmljYytxU0t2RGAjJFIoajJGNy4+L0MqfF90L1E5eUEiR0BzeCV8K0xtc2FEQDkuX14pOX02Yzp2QFojJG8pb0ZCYG8xJX5fI3Rge357dHlJ''@;'; put 'put ''SzZLdSEqK0RtZl9mKlM3UkRVZCwrMF1qbE1uPF9IYyE/OGEpYkIyaXcxMX5vfE1GKERPOldwaTg3cGxRbFF6ZWA4TiM5WGpXTX1zXykwNUZCbVRefWNtNDZRcGpBZXg3LDdVQ0g2WWM+YCI6YjYsI15vUWdydGtYUnZoWXNwOWc6SUloV0IsSz5lVWZuYC9jL215ZXVnZ3wxZy9tOHRvb0RKLFBp''@;'; put 'put ''ZjRwKnU1dTkudjV5QzZOQTF5OyE6PnkraH5FRF51c3k5NXR9N0lwcVRJUH5ZL10sN1FHWWN4X0EkbHhAeV9IYXV1dExeOGc+KDZuV0I6P2JlZTc6JXc+eSN4N0BTXmVMNnUjVVZJN2dDJC5HOjA+MStzaEtROGdWcCQ1MGRoTSI6eUp3MEtUKCNhcCk5QmUubXx0KV0jYnpTdGwxWUdYdjR6KWc/''@;'; put 'put ''Nm5TKFZnamM0ckpJL3ouN05kbkVvXSokJSVEZX1QfSpTPT1MbjR6NDBnLHVDWDhbLk93K2greTVxJHpAamNuQ3FYWlFaX0NRJlFpQmJNaz9ZLkZ7WUo2VSVPVzlPMUxgU1FgWFhhbnNsVVFJRV1gWzJlOlddK0hlNi82aGVGUnhMdSs0aiVZRUh1IUQmcG1sWC8yQG1wUyEmSSFmX3k1WSJkUnZt''@;'; put 'put ''LEVdWltUWkAjLlJ0bEkheDd5JiVAKWMzMDFVQmR9N0Y2VlBSYnQpcClvWHZ4N3RdQTFAZERJOXNKKGFoXTRZPChRLls9cSJhdTE+Ki87ems6L3Q2QGxMYWg5cC47XUo6fF4yN1RxPigvNnkvXiJUOCw+MShSUFdAUm5FJnc3ZGs7KUB8ZEw5QnI3a11PMmd8ZCVJI3RSNV86X0lvOi90aTJVYVk5''@;'; put 'put ''XVJBOyNldH0kcXVhd3A+KjE+KjZHOnwmVj10LFsmdmE4dFI1ZDo4PHJxSjk9SVU3JXk+Xzk2aEwzYnBjTDZiOT4qY2klYkNQJWRnUT1VNSk0aEZQMyxEZyFfdDZtUytkSjhoMEYrSTRzeXc+diFEMVE9T19TYTEkQ0U9bTkzWm0jViVkd0QmNXwlW1J+ZCpTbEwvazIvKCpHZS5kT115alk8JFRl''@;'; put 'put ''Rm5IJlsyUytkUy5sTC9rWkQ5MCQ4Y0xjNyRnSU9YLCNTYTgqSGhQQEw7IXw1bjQlZENlX1NBVW83XzIhRW4zLGEhdGEoZDMxUVg6MSVCO3MmeEhVYU9lVD9URjl0UzZOKFswKjZ5c1R7eVFHOm4lMFVdIV1KQmVnIWZ8dH1oRDozSl5sVlFmWyxvXTIhaEoqI1ghVmZXQl9KVWFySG5KWUtROV53''@;'; put 'put ''ImRSdkAjZFZSeWhNejpGM2dFQEIpXVpsZl1ELE54X3coREBPISU+PXU0JUxpQjUpN2RVOTV0e18vTyVPZ1AmZC83OHo0TFRjJHkhMiZqNmg5QStQU2Jtc24kXjFRPUkrUj05NCRqUEQhN3VdVWVpc01kIVszZkR+PElhdUR1c099YyFkRSl6OWIqWlV3NHAqcSI9d1B4IjtiT10jXTdoODFuZzgp''@;'; put 'put ''MHw5ezg/ZjZqTVZtZVNKRWZgUTVqTjhCO1s3Qjh4X08yQSExdEI4a1NGXn03UmJIYTVFK3gjYWhrdTB0NWd2Y15fLzgpW2hnIWFCYFNvSGdJfTljZEVkX2hEOEROQHBEKzg/TkhVNSU1bkpWUSolI0hUMjghcWcxVUBnWzxiPTBqViQiXVc4W0pSayJqViRLOHYiSjh4O0FeT0VqY00oOzd3WDxX''@;'; put 'put ''VSVAPWFuXyR7aTJjRV1IPWUufC5GZDU4NlUyTnZsTGJuXW9KS0AxPVtkaktrTWl4bm1sRF94Qzg2JWBRZ2tfQVZAWDtwMUUqY2Q8Tj5CUkpSazIxW1lTKlMkXWpfUnpWflZFMElMK3NJc1AvNTpibjBsdSphREtONSUuSDUvW01oQm1CQEl8NC92fHA4fEBJfDQwYTJGQmMmIkVzNVFMOGNHYzdy''@;'; put 'put ''STs3dmxEaVRjNWQlWi9talpAJC43aDI3dH5McEombXBsWnt2RCZGcVJvKTp4a0hSLElRN3U8RWsrOTomQCRuW1FuY2Q2YHZGaVg3Q1g4W0FtTFAiNzlJSD0xLEpPQGMqI200em5qK21CVGxAYzF0YXVVdWpGTHpGZj5jPWdZLDc+Z2JaX0VJLyQ0amNQN3VBQF1Za3BIOi43TDsmVDFtOTpWRXVJ''@;'; put 'put ''anJYOXJJZnNYTj9FXm1wbGJjRHlLUD4zVGVEVyF9XjVwSkY8OyEhdC5ddD57bXtPaT5nYl1aRVBIaUU5YiQ1JFtQKFlBZW40fnBCSShKQTgjeHhReXguZCJCSCRSUz4zezE7PVtkcz5meW5bfGROaUZLeV4lRUp5WzJXX2FvLiN2PW45P1V+aV5gdHFtfXtkIXR6VT5te09ie24yMXJ1XU43d21f''@;'; put 'put ''R0E7WmNzOy9vSDBVS3VdR3M/S25URFBLWF5td2d1cG1sZSVQYGwlSm8/T3dMc3hpNmBLVnB+RXtdJlk6RXc7JCxsPWV3UEgxSShESWFJSHN8Jko5bXJwMk5SOH5XLlZPSGpPSHB4T0AoMDZSdn5TTkw4WFhFQHU8dmwvKEh9S084K1JfRikxYVYmWSUjIjFiQ1JyV206LG00W2VaOWdZb153dz54''@;'; put 'put ''aE1SOlE1RCtrXmwlSl1GJT4yZTB+TzE0MT0iLHMhX1UyNj9se2lFXTBtNmh6bDglKERdbF9RZmhHPUplOj1DSWlCbSw/Z0JvQ1FCa3V8N0cmRUFDcyx3JTM+TyFnV1VfUSs0YUlRfTwkLmRfXjtYJi9SYnhiQiRYK1NUNU59UnY+cm0sdnR+PyVDPShTI29SPFRbZGh0L11ibkZJP2dVLlhhU0o2''@;'; put 'put ''Y19pR3s0cngpTDs3bmlMQm1NZjNDfFtzfWtleilTOWphSENWSWBVcVM9JGtrfDpdZltpIy4uKz0lIUtuantPUUZxZUUpS3UpXWIlKEAxQEc4RmlIP05SMV1KUU8jcGp8NypTeDQsNXBqcV1xbEZYMF4oYU43QWVtTGwyeDB8UXdMJj9CO3gzSDhVYXRiK2RGWDFnTD1TI3dPQy5bU0Q7bE1gYzwo''@;'; put 'put ''OWxWeHEwRSpjZC9ZU3BAYWhNSmxeI156KSIydFRwQGEkZjNgWmwlJDpndWw8KF1kZG8oTzo9MGZMfnZ2X0FtTFU3eW8mXT9lQjg8VzpRfTw1YTk3akZyeiNMe3QqIzlQfU9ySGhrTHJXdGlYJjVbRCJHI1toVztyYn15eXhxeXdRRWRlbmxjJFA9MT0wfSIwRVByPnJYQjgqI1M4eGJlYG8kNSgo''@;'; put 'put ''cyw3KnZBZSlETn0iR0JMNVV8WjtFdVtaez43aTBZVlQscDcoRFRLK3lkeVRjK3B7NXNxa11hVG49KnxrZUg4KEB9a2xqRDs/IVFlMHJCUi9AdyVvVCQ3eytuaz1pJiN5RyZwV3AwZGI2dXNKOCZqNCZkPFBsVWQyLmZbblF5T1IxYT8zO1lKb1gzOkpRWmAvWW1kRWQ4OyFAa0skSWdTUD1WamZx''@;'; put 'put ''TDYha0EldCFNJEtRbCxFZTh4UmxdVzZhezpWcSU9MGo6UjFkbXA6aXldJSU3amNlVXwhSSwxQD40YktlOj1EMUhlQWUrdXJIW3Y7OXg3My9bajgqSmVzSHBMQzRoKGUwWjpzMHhMfFFtbFQ4Xjk7Zz8leVlVfk88VjdYYTA7LGR3Y1BoSDlOOkQzeExxbkJJPG1jJDZbQWc/NzZbQWd2M1hhUGVI''@;'; put 'put ''W19dfmpsdiZJT314RDd6NSxHS0hzJk5kSXN8W0UrZEFqMlpRIXYweThSYllxSjFgJj83fFFuZE5JXWFBbEI4X2EzKzNrX1FCZW5aZmI5NF03ZWlAZVAlMiljKV83NmhHODZ1Y28iKl5tKT1YIyl6bF1tQmI5LEs2NnEyI3QwLlNnQ3Bae28uWmllZiRtLzY8KC9RO3tkQjVAWWMhMTxrSS5gNTNm''@;'; put 'put ''dHozZCZdPzF+P2twUHEyQ3FzckM4cHM7aClTelU4cyxZZDkpWjhvWCRkW0txSEZ5T1tpc0lIdEg6Zy9LSTNhKEtlNGNicV06Z1pPN0o3cmU+YFd7YEBhLEl7ZyU6SmM5d1hBMzxANDUqZnVnOSRiezpUWCs6a2s1MVBZcGokZ1EldTdRc2p1MF5sX1FTJUJQQTgid1FuemU7NippMlp2XTokLjc2''@;'; put 'put ''aHpsR1hvWDJTfGhYN0U6Y0tWZSltWDhKckpJKiNUVFUoRUU3XzdqO2ZhdSFAalBXRXVJSnhvcV9IazN6YVF5Ly5oKSwrNmtYPCtwQDt4PDZqVyNHdUxDKDZyTzdfVX0sNzk/fjdxW3AyU0VaNjwkTlI4Q2NDPkVYcFRAYj1mI25kczshcXt9dTAoPSNQPVdPKTEjfGZ+MG5SOCQzXnJUPDIqPSxQ''@;'; put 'put ''fDhxdjp4WXp4Xyk6M1dPaGVhb0luVSUibys1TCsqKXJ+NVZOJilGfCkxZXdIUlBdbHM0T24+dygrXixVUjQ9ZyFuQ2pQM3p0P1FUTTNWbmpSaklMJC89TUdScEA+QiVCQCZsTzNCW2MjP2hudF9GRjQkOTF2bzZ8Km1nTStfVmR4KnsvKSk7KW8kOm9fPjloW24xZT1DNHUuLjF8Wlk3cmdCYmM1''@;'; put 'put ''S0RQbX5sXzsmOlojeWlhXUZVKGRINFRvLzNEQEhaYGFIdnw3QnNCeHYpKSM+ZikuJmpOanU1X05jPzk0TDxMNjVySlVLUENiQmNidno9ZVhqSU0sQ3FJd0crbWckPSRLMSlFSjNdMWYhMytNOWg8aSRNYnw1T1Y2Nz5NK2hdLl9OYFpTZz0zUURqZEhEPTMxRmdWcVNjfU1HUz9vRF9XJiwkYksh''@;'; put 'put ''UUlvfGV3VW01TkV0LzlPb3dLX3BRQHR6LF5iMDtfRE43c2lbSkZ4dyV9U3VLVnsiXkQxX0x8TGJ8NUJ9cVBqMEhdWjlpT3BCZXVBYCJTTT8+WGlAM3FHWixgaDEwaGExcyZVLi99S2BZXzxoYlV4IUB8Q0RZfC5DaUFFTWBCaih4em0uZUw6dSZXMHdtYiQ+OiI9Sld1PWJaWik2e2Jad15bbUIs''@;'; put 'put ''XyN3WnxTY083U2FVd2B+TkljZ0o5LmwrXj0yJXxLY3ojYD1DKmVUYygkTiJ1PHgkUXg6YjdFNSFYWkcvaEQ7ei5XQjQvOmk6fXxPTT8hTT8kYl1IM3hje0IzclBnRTZCRWxgYGFdcjFhKFB5YXRfPnNVYyEyOiZjWmAmeltEIX1zQTVpaSN6LmpFM31UPUkqLDFWWG02WU8oSTVrJWZFJXxXTjUu''@;'; put 'put ''N3w9QWtpbUI2dWxfUkNLN0AzV0MxK05KXnwuInVjbUJ+KD59JDI1VHYxeVQreTZlW1giMSZYVUNlQjZkZ2BSIj9ySDRgJVtFdWBTYiZyPy4hOHFkJlB0SzxBR3BDS2ZgTXhCc0Y6RGZHYWEhJn4uV0xxQCsoekIicy8zTFV6ZW8wRlQ4OitvKncrRCx2WT92XltkTWh8QSp4PSRxQUJzTShhKU08''@;'; put 'put ''dG9FQXMpWnV6flskV2B+O0IoWn5aM040NTVFeHgpcjcuTmZ3TU1oYytqWGFbNmR1QWFTMmBDUnlyV0RTKFJSRCxtQ3g9e3ovdER6VFgmeyR4Qyh1akVSU2RLVzJ5NlllVFlVOSh5Ni8odlFdYH5NcEwqTS9GU35vNTs7KWJsQl9uZFllKWovMXI0WUFHcU8oJSQ1ZjRUaiRAUSQoTjZSPDB5cD4/''@;'; put 'put ''IiVZKUlVeig0cmIzMWd6IiUra019PiIlTSIqeWlpcCE3TzA+Tk4qTklyKi41aTJdaEU3LGsyT0M3XywyJChfXWlFQnRJZ19rQlFXPzNVTz8oI3g5SUo5Si8heGpRN3YwPHxiRlQ1a0dAPSF4dlc5U1Y1Yl1fdTJVZWF3aj1NQD1heEpmYTRtUkJJbXwqTSpJWSVTJjV2MmRJWTQ5SyE1VSE1QjVi''@;'; put 'put ''T1ZAIiV1N3FGQXAyUTtOYFFYdEk8S0M/PiIlLF86NFYqQjl3YXZ0L1QpYklkXV1wI30yRz57RnZlLGthWiRfSDFJaGR1OStQWWYzdixMdGJeTFY7UEJAflV7az1GVHReJl1tIyFseEhKRDp4OT58SXddaGlsdmpZcH5UdUpTVTp4e15XQy5IRFg8YWFLQWlLS1FVfFlSaFMjM08jblcwcTchSFhH''@;'; put 'put ''ejlmYTgmaltMT2tEXzNbNzg9cHghR1VYKEhdXSllcFRxSyooTWRsYnNhKUxRVEA9KndaUT50cEJCdm4zdyhsZlBPcXAiSG10elZPT0gkJHVpOWQvdnN+eHtefEhBJDxEYmpoZUt3fWZEaUtJQD0zdWVPW3owTEFnRUBYR2J0QiEwOW9wbEJnek5jKDdwZlErfU9zLFEqLjt0USpCbUBkQkFpWntZ''@;'; put 'put ''QzIhSXpuJkJ8VksvLmpEaF1UTmpGVFtVZF5gXW9yLiJlXkZpNzRKMFd8ZU4jfVhuWXIpSFBLP2kjMXZlbHp0Sm1tKWVxfHFQL2F5LFdKZD86JkNqcVN1amlGaC9ZTHteZCRXZnBVTWlQTFhedi4rM2NjYztoOTVnQEJ4TWFyYj0ic3V6OTFKa2IhRCZCcTc1R15oM1E7Ul5wI0hhNSE3eHdBck47''@;'; put 'put ''bm5NKjF0U3lVNUFZNEtmI2BLdilAV2FEQG8iQj53REI1XWZQI0w0LGNDUDdxXWFBTyY+OHFpUkRwNm49VjNTVmxNRiFEQm5ZTE9OVTB8RG4xNEVjaDdnNX5ga1NaTEc1bmVsKiMxdTRSRjk1Y3RVNUIwbmE6WUkhWThjRWE2Mit4RHUpNC8oT0ouPz5PQ2ZbJkdgMWd6MXpJaEdbNHp0ZjohSzt9''@;'; put 'put ''RGEvTEhGZmtuI0hLQj9EREQvWGRdMmcwSHpCPkh4Rm5ZKSg6WyQufVZiM2EmektLUTg/UCZzJnFMVCxQflVwa2BYSFR1aWczPzpbcTFeUX5GVDg7KzpCNXw/R2lDMzk4RXRKPENWeGtdI058THoobUxrclNKfktRRS8seC9DOHB0elY5Wk4/WSYudXhXaVMmWnM8KkgqY2paLmEoJlBwe1hIQltQ''@;'; put 'put ''ODR1ZyVbM3Zfe0heL2tmMDl4VkFGM2kucVosa0sqMURuWT9ZNShoeFVxLz0qKGg0aSs3SFdofTd+d2hwTlk1Okksc3x0MHhFajFVNXdvdThON0srMyY3NEdIVUUsZC9lb2s6IlM/Lmh3KkV6Mk9RLD9xL2VvayN0TkRQWGMzWTxEIWUrTFtPJjhTIjtCeH0pTGdyWCYiV0BVdm8rNC8iSUtWZzY1''@;'; put 'put ''QnNyZ0c0Y25eejZqUD9ScG84bFs1Pz1MWUFqKVsydVkmPVApTl52RSRucHg2YlBCdD1sYSY9UCNNflcsJFtaU1s0IkVsUEhwVSNIezEyPGFnXmQuWDhxUVZ7Jjc6M2NOXSVOdVMoM2YlYnU6Vyluc1AsZUlrcE5gTWNpOCVqIXxVS0pZTzdfXmAhOiRrUG5MblQrMShNM1hMNDszY0kpNEd0WUFm''@;'; put 'put ''SFEmVykzbj88ViNIYjJ4TChGbTc+bGQjSjY4WXgxMDkiOklBW2tSLmpdM2pXV2BuOFJBYF1veFV9QTJtXTYrY3RNQGtMQzlqI0g2SndMQloobUJ4SDwzdz5wI3c+d11FPWF6eW1jQWcpQXwrMloyeXNfbCMjVDIvOjUyKk0hYzxLVmd3OVZrUE9VSGlOaDpDVCRdezBEdGxEKnhbYzddOU1QUi9Q''@;'; put 'put ''SipsN3dfeGk2W2hLaChLNlMlV2ojN1hAMyxYRll6PUxkK2VHcUl1JCpXbWpdIWdpVzI1fGUxYGtTMWthU0gwXWUxNEx6ZW1BUWxNMzlRSWFLPXgmZD06PERARmJNXmlLaG87T0ZDaU9NSTxEMXgrUkc7KjtuPndreSskV2U5L0NnKSl4RGJ0NUlrVT53ckZwWlVDZyNJZ1shbSpZSk5YNTkqfjBF''@;'; put 'put ''VXFBZyJoaCFOcDBFLCpPN1U1JihtRzU/eiFsUV1WJVkwPT1xSGFzUHRaeE8/PDJFJVp+RiVGX0ojSDk0Y1hPU0FgMyVDejZJZSpNQ1NxMXdDdH1XNmQ4Y35LMW9rVFhYO3RqUCFFKzB1LkRiXW12VUF3WyRKVktoaFF3MmVwVlJLZyJjbFRrQyMqR3tsI3o2VytrPWl1N3RRREkheURBQU8mLnVN''@;'; put 'put ''WWdzKlIqZFRNcEJuJXgqPUhqUDNaLClnX3Z6YUIpTlZBa1UxaktoYDBQVEo6LjIsN3tIekwmdENAcW0+dztCcGl8MDRPT3B1enVvY2leV0pyfHE8SEkrfXZPOTNjI1BuT25IKSl9cHtTSWwzdl9tQSxwcTFMb10ocXU5XTFnZ1ZBRSQhdXpiIy9yIjo+IiVBUkRuUWUzSzt3U1guNVt0bCV6OW9w''@;'; put 'put ''Pkd+bntLVSRgcFdOKFFTcU1oKUo9TShXYUwrMENvP3VjMDg4cjBwcEtIfVJ2T2Q3Qm1jRFNwQEAmRHldIiV2KGxVX01vMGw5dl93LmpZV2lTJldJTmk0VldHJTxOM0cqaDFWdCZHcHA3MHIxT0Z0cUJFVnZ5dVE3VUJUJjV2aE1rM3hpWjgzOFJkSSUhSl1fdDNRKnxCSVRSMVYuMyt8b2lPakdA''@;'; put 'put ''PWd2RVlZeiJRdjt5Kyx0KkVAZC47NytbSDNhQG9QcH4iVk46YCJlPj8iJUhYYDxBQ1VrVmlTdzMlS2VCTSglKUZmbCJvWXYlO0B2SUFBSy4iUCY1dit5b0wleVRnXnouT25gYVNHYHQzeGUoSCtkQUQiJVZIPzV1WVIlcHBFSlAkSVlYQHBUSEEzTFo7dixmcSouXSYqdHIhVUtwMig0MUQ2bEVT''@;'; put 'put ''RmhYZ0hSOGBYZDlkJlB8aC5IQ0MjTE8mdFQzcXFrUGVxXU5UQVZ3T0NEemBBPjZffVdzQkx5PkV5SzkifTciK3g5cnd7L1BqJUxNY21UUHdedGFSZSZYMUZ6QUk1THc8VDEvPkYjdkI6eXteIlkxaU0kRGFbIW5CZFhBUkJfYyY1djNyUiUjNTgpZyZZRUtEI0d1UnFweENfU2V+JUJpPCswfG5y''@;'; put 'put ''TCtIcUlAPU5jQFkhT0VHQnhPTyU4NjVWL19deEg3XklIO3U8N1ZLdTE7dyJocDBwcCJYbGRmTH41R0lRZmlLO09fdFpxdTkjV211YFp+NUpmIilIVENhNHVwcDBaVDpgJF8jZ1B+TDxXX0VTQipfImdAPixKWUp7JGFSY2kwR081ZCFeTWxrW0ksN0l6MCt2cl9QXlE3MUxsbHckMTdiXTk2U3ZO''@;'; put 'put ''Tmg2YGBERT9PYyRBN2NwVlUjXzU/QV1dWTcmMHQwZnAuOWc0W0pMWChTKFdPJj5ZbWwjTVhSVE5OZy8/WHJTblAsY1YqV1RpSFo3Ulc2cW5NfXM2Q31PQkQ0Q05FPCpKbGFpdyVLNHdiPnl8WDVhWEUjR2tlKjZ3MzZUZkUjUHhuaE5sPXJZelJQamU7KiN5LitTblkoMn0zPkMhRTAlIXRWWD52''@;'; put 'put ''fEw1eEMqMyJxb09kWk01Q2x3P31CQGJoMUV7Wy8zX1RIKHpZK2prbTVmPUgvTTdINSVWNjwxJEBWOXxudFhvJGE6Vih5RFo7c2NnRVZ1U18vNVo9MERafDBOWl4mWi9HSFQwSFskUUhyd3okT0dGN3NNLm4+IVtZREAmZHI7Pyg0a1FTJFNsXi9xXz8wMU9nST1jNHwhWjs5Sz96KWUwXiZVZHxb''@;'; put 'put ''WWI3Y0VoeXk3ckJAJDUzNEBtdVZWSEUzdlA8ZUgjNkg6LzdtUyIoQkRudHN5YEZDfS83SW9DTHF6JjpfYXRzMkx8PCZ7XyleUVZeeExhUG4qcjMvJEJad1p3ZiF3R3JAOXY0cjkpQ0RtaVUwdGhOe0QqcGFad3dLeEdIJnEmTDt1dzU5Q2MrclQwQnZmY1gzM2g7cmZARzNDV0hWN3hkbmFXPGtV''@;'; put 'put ''Q3REal1zJkVdTWJKXUxFQixxRiU1VjB0UCN5b2s+OjtWOj5kNk4vTiJCSiJHWD40Vmsmej40fDE3e2pbYVd9eFsxRkI6d184em8qWCp2VHBOLDcheDZnMmg9NTAoWy51eUMwdHlfL3laeHsjXzkhOVZ3Xyh3e1lpeTh9PH1me3dYZltlamkqZWdKJngkaSFiOnZTNnhHdGV4IlhpbH1rV2I3eiVQ''@;'; put 'put ''MjFnIjU1R1Zfaz41Kno1UDNLd1ZIcXxrTnIoXWNiUTFQdCsuTHxBbHJ8dk5BM1B0RmFQKTZ2e11saGF8cSlEa1k+MUdCNDcxKFpEVj8iJWRtczNgfE9kdylRQkhiWlMoanxwd003K1YxaD9gRDc2WH5TTnklUUZwbnNuYV0/dklofUJ+RGtZU3A+cHxjK0hRflMvUWYyYHIoOSpNO2Rjc3R+VlR6''@;'; put 'put ''bSEwT0RhOnZTciI/Q0lWek4rWlgrJlBfTzp6aFdUfkQ3PG5lZ0hibi99RWA3N3dKL29zdmBCMiJNe05ZKEh+JjY+c1hhNFtHVDZ+dVtLRGRHbT5Oeyoqe0RMMkcvKHJaQERJZiQ7O0piaTNNe0x9QjJMTCpgcGtRKHxydz9Yc3c/dUhBTjpCUnxdJj95LmErcilvdWtxNz41NXovUEtCeiUmSzs1''@;'; put 'put ''OF1PWn1WMyVqXXImX181YzpRezQ/Ty86Py9uSTxRdT5lPXA+cGVxU3VzMShNSEQ3M05wWmlYK01feHlGJjVJP0tIMSNwYnhhJltTUE9CcEZUMnNAPCUxdHc6OlF2cz9fb3hxdiFPRC9zc2V+Nn1CPDdnM28lNFN7QnthSHtjUDZ0ektRdjpMa15GZD0rM19gNTdQSUpDaUJxPkdWREV3a08ySE4z''@;'; put 'put ''Q0pDJCwoSyNfSmJ6RChyYmNEMT4va3t6dG9sUyRpXTM2VTZEekRCQ25+TjRyaXojdDtyNi5Bcj8yUDtDekJwYkdqeWAvKnldODVhYzNBTHxiQ2RBYT1XbTxoaSs4YTwzVHRWXlp0TSl6RXc+Om9Pe31CTjtlYjlHS2wxPWMufEx1byI+QWRDbVhreUVya2AwMVMzU3tOLFJXWjYyTDhEflNrRC5y''@;'; put 'put ''NW90JjRaRTFlLj5MYmFsQzFGYzJ1K0RyKi9iaEM2LF0jeUZlbzhvaH59ZltlM2pqeX1fS0MoMVpxTj4xeFp4emFkVHtBKWtaNGZALj5jP1pgXVp3d05GTm9oYDUoenxabTwiSCNlI3ZzVnB7c007ZTg2RVFTWUNdZygvfDBPYjJaLCtybFh6eXJzVzo0VUlDa11QbnxxTn0pfCUyUXQmdy5RSF1+''@;'; put 'put ''NXBMTXptQXVbNDZzMlMkcGtjaEtyZCkuNXltOj1FJlg+eF99e3tmOnJpbTtROXJ2LzJ2QF90WVpUImYmQ0NsXTVZOnxYVjhQfHxLRChUYEouOEpmPVRIOX0+QE1ZJEhYMl9xXS9Lek8oMlVyeUBjcV9tdmBOZj1+YCM1WkB9eDVoeiEmOTFWXlp5TnY2eHEjN2QodjIqTFQyeW1GPmE6Ln08OjtM''@;'; put 'put ''fmMoTmM2WGAyZk5tSmoxNm58UmNwVDI9T3o2TUlML31WKmFkY0dObn5xV3p7dyFqRD5MbkNyYXpvYWAjOEc0UTpgUjV7cGZSWzAvaSZDeFZbW1spcHwoTDcyXUgpb243JjU1MjIwZjFzdT1EV1pbVlM2VTA+Y09FZHYmNnxbN09UITU2czJkdn5gZGhmWj1NJU1wQzt1WTBRYUAmO1oyNWhTIlpq''@;'; put 'put ''RiIvL1pPMW54PzxiYDo5QmRYZCE3OWtueDZ1e01LYkI/JDhFUWR2Vz5eYD8/a1omSFs3b08oPll8eClGZTltaTpDNHZIKTd0JXVWal1oWVBnNmF7W141Ll1xWiZYJWA0aDZrVDFVZ1R4bWg3JjpbQFhGVTs/aHV+TGx5d0E5eXBWUGwvOHRaVCk/dTF5QTpdfG98OEZSaTI+ZVdFYFVielZVZWVf''@;'; put 'put ''bnNvYFYiZV5yWFRydH19dnFmVTt4a1coXl9TfmNeLFFIR2NfbnNIYFczeXxdWlJMQmFkX2RTUypHM3BqSmJTYEl+MSJDczN5ZEN5eVMyZU1NeixYcGpPYlJgK25jU0ZZIzhnMD0vYFNvektmb2k1LldiJm9waDdbKmM/TWFaQl08NTwvJTJ2VmxuWVdUbD81JXBAKTc5I2QyfV1LXX1gTEV6fC9Y''@;'; put 'put ''fkspIkheaXRbRXtFOk5hLls7RSF3cFZQbFVybjQxeztFNVE7ZT4vQWExT2l4ZDFEZDFoZzR4ZzNac35ZT3tgc1tLZjpXU31yVVI6M1RMYn1TNjEqLGNKI0JTKCV8Nyt7YmRxJUxLNV9LdHxGW0BGezQ1UVh8eTZARlNZVSgwXzJ4KGtKajJoezkkQUt2K0dvfEErOkhUZSFXQ2p6cjc/YXJOeSVL''@;'; put 'put ''RzZWMGBjS2xIUmRnPDZSYVJ4cD5eNXFMJkI2OUxiek5QXWZhY0smMExufi8lWigpKUo6PXNdJjklNX56OCJyX35Bb1ZpXVgoKHNxVWV+KV5KS0MsVHtlKjFOMFo2KGVqSSZ5TjVaantvLy9hV2xiKzFGbmw8Y0B8OFhuWj1fNEVJYmI/PTpMcjxzMWBsQyo3UnMwYDAsJVN6NzNVMTY1ZlhLbF1Y''@;'; put 'put ''bnY9aVd7TTN4P1hZMG1GJVtMfF43dlNHXXAyKzBOUEtCQWE0VE98d1NBOl9aQ05DQjNpYT5NOmFyW106MTZBYDU6ekdZWlRDbEk4OlhEaHAwNkQ+Y0A+TkYjZWJuSHskNUJ6KC9dbnA7Ry9vc0dgNkRTMUtOSDYpM3lzc35CMVh0S2VTRWBba1p1W0FGPnRfMz81RUA2RERgcHdkczFgZFNZM0Jw''@;'; put 'put ''RSZdYkpycmYpQnRrPy82c3woVkcuISJOfEs+ckZ6STJJMkRaSyR0N01uSF1LcltdYFlLJE5sPnolRGpdKVEmNXc2MktbYkRkV2QvWnFUZGM+VXVEazlxRkNkOnxGUW09Pl5QQUMwV0g/Y2Bfe3Q1I2Y9ekZ5VV1PWkglNXBMSjBtcSNCc1ZMYSx7cjcpWiJaOi5pczt6cVF6MnheKGF1emd1KXZo''@;'; put 'put ''eG9GKCpJcXBqcGpfOT0/aHUiST5qYzNhTV5ldTdefWN7UEVNJUVoXmVbJkVhWCsqR05qT1dxX3F6NV0iIn5xXz5wS2hVKDNXfDkuakV+Tk9MaFckeTd0LEkuUW9UMVkiLnBzdX1SYzlpclg3U3JtcHpTM0lgYjpsU31eZlkoIWNkQlU7dThaTmxkaFR7eDdXcGUwVShWfjU7IVNIb3hOK2t6bC5i''@;'; put 'put ''Pio/NCgpYCFjSV1WfHJtP185e3BvZXVbP1ZSXT9tTE5vWiYsMDZ9WjMpR1QiWnk2PnxCWWNwQkh+b3ojSGxyMlIxYF5RRlA5Vko8VnZ8WylHTHVzMWgrVFJjcWYyL2QxYWh5cyVfK3ZORDZ4Nj4pNW1+YEwmNUVgZFljcCFhSjRPOn58eC4kTCtDPVFEOn58WykqZTBTeCNlMjB7ZDZfV2tdSi8x''@;'; put 'put ''Jmp7dDt2IzkpZWklLHk2cXw0LHNaa3V1KUtyUF1Gcm46ZTNYWTpld1Zve2g3cyUsPUFyUWRoMXMmdjIuQEpSdndhOnd8RSslaXxvX3omKiVDQWZdKDMkSCQsUW06W1ZfW3dEYE9iY3E6cSYlW0ksJiM0U1JaTiZDYCYiZE8kLzgxW2FvJixKMDMxPnR3MSRNPjdWL1soQzZ2KGBYPnxKOCxHXzsz''@;'; put 'put ''fmB6O0IyaVd+enBWYy9+IXwkVFtXK3FWPl8pWE96KW9LamdCSj5iJjJfXztnNWE8QDptOCwzSns6NiRGIWFLJjxjM2VjZitEVDtQZUAuWnFdKXF6bkBpWDNJS3F1e0hQXTZPSklxfVYwTUk+bHFZKXo0VnJuaXxiMVZXcjlxWCkxQ2ROVyMpM3tgezosMH1WJG96S2NxV0s9YEg7fEU4K3l9KDN4''@;'; put 'put ''X043MEpxcFpGcF9qWH1WfHp6Sys+JVllamY2MFRyT1FyZjQ6WCMiezZQbkRyKVZmcilWUWBTWjFPbFAwS3FxcXtwWDNJY0ldcSgvNDUrLns2dlZOYE9GKEVXeUxaKz5IKiUyLGN9VmV1SlZdX2xwZl1qIihrKGApM3pfeUBIKmx5ZD5zZ3RFZHFKN2AoUURAJk5PazYvWHJZQCZOTyoocj4rNWdk''@;'; put 'put ''SGRUbFczKTxCbFczNFF4TzQjSXI/eiZjdVVOXlJUIzVoIlFFK0tLezFIeCZTXUBYXW5BV15vfj42Q0NdZUIyS3EmK1RDbFtLO0g+VClELH0wTTByUn03eSY1S2E4eFloTnJjLDZRPm5GVkhPSWBpOis1bGQpJlovaGVxZjBYV3hUX2RFUl86ZX56SlZZXTp0ezZiOjY5N3Y2YmErNHhldVYyOU5T''@;'; put 'put ''YkFAcndZcnt8P2AodUZlbzhKTGl8aipgRzxqP2VnZnY/cndfIUZWL1k+dHUjdHN5OldXWmxAMkN7WVZvOClLMlNuNS94MyNFe2dOJWFuMTxRT2gya2dlfj40JGVJfiNheStyQVglQ1smcjRCVys9K0tLezIwMDZwOFcwR31TbVg/RF1oImUwdyNmMnIqS2JiYTE+alNSOGtmMkpiK1JXXnxOYz41''@;'; put 'put ''R3IiW101SjpbMko/ZWFxZj50XURdL1syWzNPLnJFTUVvaHFfWSxRdEZWKEsyU1I4KDhBKUFyTDghQ0JdMHJwVlNdUjgrVDJKWGFGNkBzRmBiNEN7UXRqQis2d1pAWzFXeDNoRnFzL2BiNEJwXVkjQWIrUld4fDd5ZXY+ZXJPQntKO2hlcWYsJitUK1Ypellfb2J5bmpQMDYrU2BFUHJpOnZrdHgp''@;'; put 'put ''VHlkdSM2IlZfIlpQM2RPVj8wWWU1YklER20mJDQ4YHlAei5QMHMzZE9bVTdjOHtnMWsoeVBrUmRIaTIpQEFyUH1XIz4wOXhwOmtoPXNIWWB1QFFUOiNfcHk8O3hJLiZbc2lYPFptRSZTX0QoSU57JDkrcyRkLmlLTyZTYHdEe1V7fU5ZSFB4Zyh2STl6S08mU2ssOkklS2JjaCklRChyKH13cGwv''@;'; put 'put ''P2MuZyh2aWN7R0xpcSpaRWI2K0hHNm9IQ0UpV0ZmeFhQXXlJc3xzfC9LNzA/Y09BRE56ZHJMaTJfdWp4OkhYYzdddFdQUyMkJntScU5uNGBqQihLSHQuR1VeYF8wPmV2Skk4Kkg3eWMhSlJ7YC9yNFNZKmdXJk9FRzdWWyx3IX5RPFB8bXRqVTRPTjcic3BzdUxoIXFzUkttV0tCcThJd3FQMk1S''@;'; put 'put ''dmJzLGBDdnZzOlA5aERHUXpvY3ZoZWBqWT59e0Z5d1s+K0RgfFIpOGhDNSUsT0d5X2YoO0UlLHBgWlNGc3AoQ2dicz1gOCo+fXA/bldzPmxPI34wZjJ9dlt8UVVRbjM7Y1pgUDgoTX5ibzkpaE9XJTEzeSV6cVBXezN3ZnNrY2hXW2JobjtdJTo6fTZ0U1cpRkcvU2RiWixdYkUxXypDZHNGKDcm''@;'; put 'put ''bHcieFFqYlpHL1c3MigqbnE4L183a1Eob0drQiJDVmVLfkBqLzkhKTNJfWBPfGR+KiUlaEk3W0s0Z0p7W3UlfWcyNGh0dyNBbSkmSEh9ZzVyc2kvaCgmXnQoNX1QMm4oXVFTRWRAJGQlfUkpVyhGZjI+dVAsN2IoTkdVNGQzO2M7X19CPnN1UyY+PHlLUFNMI0V2LGYjMX5bKTl+eEdRLGQoO3N2''@;'; put 'put ''ZGUqbTcufCVpanNwKTBSblskZGRXTipzVzV9VjplRUp+YWBLNG5VVHZmNyVbTUp4RmtOfThpV2FRMXIiIjtjLz5aQyN8djpMND9DY180QmQrTltePE1MdW5eSjokOiZZNiVWYnMmYFd8b3hRfnFsZ1dCeTJ5czpYST50MHk7Y0l9Zyopc0V3YSsxM0w4I31kYExQMntLLCt+M3pQfF9eVS9mflZw''@;'; put 'put ''UTRTZChoNX1JfXFMLn1ZV0Q3PEM+KFFJOShjcGh+WExZKCs4U1hqfEpreEZHSDFGP3QqTzJ+WXd4RntDYGVUfD5YclcvXkE5I3xqMlBMUVEmaEBET2o9dEtQJEA1Qz1GITomSF5fMDFUKChFVExgIktQfihvRjhfWitkfihxIn42fkQ/UkxfREVodyl+XXlGIUNic1s+Snl0Xz1Pan5YY1NMSUhF''@;'; put 'put ''aGZ8QEIjfTp3VjdyT1UoQEAqQV5lKT8/d1t8KT9WNCVncThKMXhLcSl5SD9gPlg8aEVfJTokaE1OUHwlLjBSVH5+KGMrQyJScU9XW0V0KDpzTHsuYDgkWkxFWCRsM343fGpCVVtrSihzOlM9Py5+IltyMC59KU88c05OYlpTfk1wZHN9RiE+UEpxOGF+fldTKHc+JkhBYGhdbFcqb14/YSx4WlFq''@;'; put 'put ''dH5WTWBzci4yfWpbSUYzX2lKcThCMXhLTV1EOEEibSFLUCNbJUMwblRLODU7Pz5ESn5ydGR+fnZ0KEN9bUhsKGNxWiNKYHl2Onx6fUB+SHMyfTFbfjpxZ2UyZCtoVyJFOVlZfFJ7IXNAUTVoIzosSUVCOkkyfWZbLjEhfTJjMUZlSUNUaDVrfi89bihsLHBeO2Mrc0M9MnkidyNnYjl4PTE+VXw6''@;'; put 'put ''SFYoTkheKSU9dlQrNCM9LH5vMnlRY19VMU9qKF9HfFRMPWkobTI+OFIrN1sqS3lPKC58dVhQdmV9cyJ2SlF8JCwxIUV+Kjd5RmN3YG5kX1oyT2paKXZwMn1EW0VSb3MkPVU0PCI1XWVXLktjX0IyQGRpfjAhRmN9SGpFeHxURSUsW0ZMTmVfXzE6UEpbYl9xfnEqXnlbJjhXTk05W1cofmlqQmtY''@;'; put 'put ''TT5OV21fSzdSKDVpNHk2dE8oKHw6SCFJS2AqQyZzaUUqdkxgOkIxUFEoUGc0eV14fUxic25gakVpc3BDIT5vT3NXNn1vJWksYkl7dHc7Mn0uQElGNV9CZT5+US8yfVBbfWQpfWY0MFJHKUg0Pn1mTT5+K2AkKn1+KmApKj9+eVs3Xzk+JlBkK0FrNCQ6djl+cXx+fld8cz1CIlcoeHRmPyNRZ35U''@;'; put 'put ''UlFfOF5VdShXeGtveihyfWghJG4yU1guS25GMStibj0iYSsoW0ZKfTJbMS8kWERSekN5WyRfSDtpT0pWUltXXkI8OEE/KUVGP3xzUGMkVnhDOHM9MzdvJS5BOE98a19hPC9lWnJbNld1TXNncjh7JF83QlooMGk/P0JrPCFSelFeIypxTSptfip9dmt2SjxEZk90VkVtU14/RlNgYC5lOCVeIz1J''@;'; put 'put ''RzhfOls1bkheUUZCTGhZRVooTiw9P15dLjswOXQ+Qld2Ol07SF97UytWd3Fye0lAdVs3UVljUTk2Q1ZWPSE/Pz9oPjtNSk87N1l6O1Q2JkoxcyJCKndHOzozPTdaPyN9Tjdidj55TnZEd0ZFQnRnWl1Pe1hLQyZXR0MmS3MpQml2NHZkbk9xcWRxN2NafllpLmJyOFl7QWVZLFkoMXVOSHljNUx7''@;'; put 'put ''ND0maUFLOG9rXjJmeHY0MDpgTzIiJVF3K0ZmODdxcT1zO1Qic1A7TjcvQiNzdnNzYSI7SntEfWcjW35nPk00U3l9cVBdeSMmPDcvMyFhJVhqKHYhNi4xPEd4akxsKlBNaWQ6N2NJcnpAdmNeIkksM2NVR0c5SWsjKH1lRDJnUEFBelhBQUFBP2IpRD0oNUQiPHZIREcqX3pLNkF1e2s+PUtraVNu''@;'; put 'put ''QURgRUs/VEsyJEpBXUNNPHVtQ0FaPzIzSnxobjBoZT5KPW1BelgzNGNDVEFFRTAhKnZWdHIsWExGUn0wZkRBQXBIZkcrblJRQXVWUXZEc2I5QkdPTzxhZUwhM0pJNldSaj82UncpIShfJG9JPUhBTXtxaXU/bz96XUhdMFhbYitEbUZ4QWl7aDFbUF12V15lRWFfXyhvfWkzLndwVjxEQHlRfmZP''@;'; put 'put ''IWNbPm4+JEheZFVLXmRVX145Vmh5PjNJeF4zYi5nP29gPyQpLipWd2txdn5dN19heUF6eUUob0dRYC41NC9DIVZlckhGckRgLkpRNkNhNEMwWVVHbnxlW243XyxSaFVfIWJ8XTJgfkg4YDBkbDt+JGpdV1BTc1dxekMifkAoaDUzIzV7WCJzW089KiIsfnN3bFhiIn59I3pkSzpGKkl9WHlleCNn''@;'; put 'put ''R1J9K2t1ajgsdUNyIm1vYj12bHVzWSlyTV40fllxbUBdY2dmK3osLE1KZWliMW5lcCZUOGlxallsbzcoKjBHQ1tCbm4wTDtTQDE2eTNJSnUhbUNOaCpSd0BWeWV0NzEudyI5ciJ4SnRJJU0uQHQxT1M7MCJQcWMpXV5GSHpeLz5tPX1NWk5kOWFLL1Ymdyo/L1c1Om9jbXpWV0FnbXsxWkd8MzV0''@;'; put 'put ''SSlPe2N5WXZEP25nNERXM2d+cl9VQkxjJVNtP3FXaVhPNUNgNGExJjpzUXNSfFR2IyFudnRrXXtfOk82TTxUUjR5eSlyUHR4L2wrcFM0czxXcVY8TzAsM0AjfSJHT3VTVm9fMX5IZk88fXZgVlBMVXpIM0htIV1bImtIQ3ZtVy5TO2hdZUdhfkp+Yzw8L00ySVA7dU9TI20vRDNZeHI2fWxLT0E5''@;'; put 'put ''c0sxbHMhOyZFLCoqI2kiJkFVT1l1JD5QPW5KRy9EZzFwWWE9R2F5Z3NdWn4qfU9XNFIrMmd0QCgxbERYWFEkeWAocSprYT1UPld6PkFnO3JrQDZdK3dXMElGTExsMVQqMDlgTmV9QTZfLDQqJUZLSiZ1eHFxWmkqRGtZRTdIUyp3c2JZL1tvLy5YV0x6Ly47U1osJHJ8ZnJhR1FESSY4Iytpa1l8''@;'; put 'put ''R11GcSVQRDtDcSNIKns3SCpBZCRnZVVnQTokcG5uenMlSWhGR0tpeyVEQXhxKlBEcVFEYUs3fTwzVUJKKUNDO08/Nl1RY3IwPTk8dCs7N3RUUyFaQjxaN0s2RkN0KmF7OWRUQmU4QltjKHVzJiU+KS52JmRFcnVsXVNWRzJjaWwkSEhPKVdCejFCWHw/PkdvSSVVd0VhPVl0ZUV7WVVBUDEwSzJV''@;'; put 'put ''NlYkc3tjbD93TE91ekJSWzIuJW0oW2ZgVFEiM1pOTVFRaz1RN2F7cltRbCVnQmFZTDlFQXRzTVJEJXkoK2FgMlYwPFhHQ2tbPzVUfGF4dno2RF9RdGRWN3V3IStacSpoT3svNFhWbHA7RHdFLkElVGY0Oj9KU00wdFRofDIsPF5ZK0UkYF13LmdocCsvfXxlQjE0RnovJlZRZ11lVENPfDdZNl99''@;'; put 'put ''IWx+KFRaNylCTyIjdiZhXW5DXSV7NV1pdzRCI2pEdntPcn4mZiFzYmB+dGIuKSNAKjY6NCR0KiNeT0pgL0U3fD5geUkqX3IwWXwmNkEifXdnKXxIJVBvOmI6QzBCViJHaDVRM3B3RGc1L21kUzIqVjwyLFpkTjNFW2xfQyFISF5FUF1qUDszPHFwL2wwbi5UJiwpJSF0RytbfEdVTXRfemNRTT5i''@;'; put 'put ''dDRQQUxbakJxe1Zra0ZaVT9rRnM/eTEpSEFjY24oZFpZcT5kOjohNV0sdFR4dGlUVGcmYn1xKihOXTh9TDV5K3NEWHw6KWhOeF9Ob01jSlB6cH5nRXNRNCM3amdBVyYrKHt7JFA3cl16b351YURCYmxbQndtXyV5eWk9RGNBN0tWSikpIiMlXjpXbzdPRTJ4UEtqO3kmVjxZXmgyfE9TM1hJRCVG''@;'; put 'put ''SXpNPmV4SFhIaFRaQlkpPVl8ZUo5OzM8fDguJX1VN3NAOk0+eURRJXZEY3hJPURCQm58LDo3cDtwKCxKd04+ayFlLmArQ0lJUXp2R241IXI9UEhmK1trIz5HW3lvLGZdLl1OMnU8QlBhWUlsQ2NKXkE9WFZCOXM7SV0re1htO3BhNUFdLCQwYkFnPHhZNktQfiVZNSo0ZCQmNCUsP25jS11+Rn4r''@;'; put 'put ''TzMmO0pdYjJmTk9LKzFkdGRWeEdNLExdMGRCNygoKlRfb152SC50K0tKcUNSbilOd25bUUpLeTN6JnE6N1ptPmNTO3EkSTFoIigrcWZac0khRFUpTVNlN00mLGxWclFZUDVaYTk/aU87Xj1tWlhDXUY/NTNFbyspKHMqaDRAfk9yQ0NPMk10RnhMcjM5TVdbNFc8YFZzcnZAfU8/QnxXITU1Wi57''@;'; put 'put ''ckZEN3F1VXJLWlBsKkF8K3lSdXY0fVMhKGo9U2g5Jjo+YC8kKGVFL1M5KDFLPCY0e2o8el18QXBWLlM6KU40c017cVE1RV1+RkNdYCJwejZuXkJPS0J4KH0oVFZbKyh0bnsjMG1UcjE1WFEwfTRlT1cyXyYraGh+ZUZ2SC5ffX5XV3VZdEIyNGh5L0JzOFsueyxjaT1HRG5HUT1hSDlnVzZoPU5u''@;'; put 'put ''XltBJjQyWC5LTyhvdy5wJnEjfi9wdUlGMExaaHIzP04xQzMwcWR1eHFxKXl7NkBaZH5xfHIxeGEqRSwvNytZfFhXZGd4KFIjWkd3XyorO3JzQlR3fXFzST05aUBpUD8rTVdXRVR4PzIoclNYLC9MeVZfaSw3cG5HdD4weGw1ekd2aUp2PiZtTHg1LDh0PmBHMzwoKyhycGkzeCt3X3YmZFh8UkhI''@;'; put 'put ''aTVeWTs7PCxaKChdIzkjLltJaT45Q1FEX2c+UX5bOVR4V0p5KFZYaSFzY1UyW0tJT11bXnA7MjdwZ2tuQS5gWFNHSGBva1pEN2NTU2Q5ZXQ/am9iWHMlbXxWNF59K0E6aDwlM19sSStPZD1pZylrKmRTT35KPER1T2VKRjZMaTwyTlRxdUxaKCg2Zn0mKTtzTy9YLEJFT146MDVfME1ITUg5aDAo''@;'; put 'put ''VF9yT3RKTUguUUhOPHt5JV5JJWc5Qm9XRjoyXkdATl5oTnR+MnFIVkpUeXcpYX19MHphX35NaG1mRDVoc2d2WjFrTlcjQl1bZyt1fl97dCFIdmNeaSt0c2x0V19VR1RKa0wifFJJcT4vWGk+UkBXVyhQbWJYWF00fUJCfHJZdS9pcyJeUiNwR3NfXVs0eCpESndMS2UvVU91PlpYclVfU30oYl8k''@;'; put 'put ''LjdwRjVwPkhIblN1VSJodyl2Pl56PWElaT99UVpkPX1DMXg9d25gTiJAcmdsYl09UDksYE9RYEQ+aU5vUTksVVJHOlZOOXJ1VHFqQitSXUJaPG86JWgobUdlPWREKXdGLjhAWEFUKD5QIVNmMmcsYE9XfTx7Lm9lLiFAM0lqd2YrbShndXtvdz9ZX24wJC4xYlo/bXohfG5WfTRRVHo6elVeKEpb''@;'; put 'put ''bT5yPEZaUyM1XzBaO3JQQVI8fV5YUGtJdEpPUTdrM3gxdmR8ZVt1PkBoOHtReTVfKyw+MT5lcUoyKlYrNnV7bzEiRT5aQlIjdCYhc3o9THxRbXtPLD5JcHMjW11vfFF2Y194Yy5rQ3smfSNVPDJ7b1pYVE1IYFtVQj5qS0hSTXEkY3l3W145KFVjXlFWbnZSMkpSa0wsYk1VPy5wfkd6cHMyM2g6''@;'; put 'put ''Q1VfTVViM2NrUCxgT0pgWnN3VlZTMkAzSW53THFFZEZaXSNpfjF8VV9VenRwV2cpP2xHbV8yVjRMZ09HPzAlYCgqWkV3Yn4rYUZackV2fWFqNHJJL185XmdqWjpRVng4flZ4M3ghKTVzcyJ4MW9eb3pZMXNEXVtrJDloUnBsYjV5Y15rJC5RYiM5XmV5M3h5PFFXa2pMfF01NiZabWZXSGZKKkYy''@;'; put 'put ''S3l7b3klTXxfOW0zXVI1KjtNYF8qWS9ZVzNVYVM6PGB4NiwmM0khVF1hW3J0YV5vRUA/fkw7YjhSLjdwLz5EMEUuV3okWXpAP357dHE+Mm9oPmxgL2lpWTRybTdwVUNvQURVeCYrdCFBd2NeQk51cyw+WV9+bmxTRlBPPyxnfnIrYismclk4fW9vY1M6MiFbIXVXLnx8akJ0cnRweDROTFV2OjJP''@;'; put 'put ''NVBIKz0oKFBmPUo+OVhKWzApVUhhVkV2elFWWEBpTltJey8zX2xCWS9mQ3NRKm41ciw+VlB0QnUjIzcoeUFGVGJRfVVUclVjMzdTZCpLbSw7XUZ3bzV7cXFUZCJSUGpYKSxBWnZyMVF2NDgqRVROdGN6ImtHOVBaLlEpYSlWKTtiYnEueCVub29NNTNVLF92OktwQzVwPn09NHY/dmJ+IktZM2R0''@;'; put 'put ''SjRZdFhfdyUyYTl1VUdEaHQweDdKclJsWiQlPFd1dj1fWlBEbHQkTSREW0tkTXl1ZGNRdl1Fd1c6Qz5XfkoxfTZycEYhQUMoWVh8WHRCLntHJmVKJWM3NFdkJHI4Lz1QWDUzfEw1R2FNWXpsPXl+aVVFd0FRL2NgJFhWalR2d0NZbn5MWFgxZCN5LFZPdTZrSip2elptTHwhcih2YD5yQ09ROU0x''@;'; put 'put ''QnBMdU5dRUp0OkNIcm1dWHNCN0h9P3Y9cihBRnQ1RlZONyReWyhLV2w6eitJbnw0S1EpTVZHZHY+SyI1RiRBOmlHJm5VLFhzQjQ7Ul1KRnEvV3h5LERLWXo7SXZRKkJWdCxocz5+PyltOU5dJmt2SjwqeFR8YzJbWnRTOz52a0RbMC5pXXFqVHZxK3MpbURnQXdXNFlmYkYoSVhkU05CWTdxU0lz''@;'; put 'put ''SEU2bksxfEZOcWxqPTBiRFdVTyhkUGZvQFBmbiY0Lk9uWHI+LlJXZDx1REJTfV9HOm4oTipfZU4lIW1hKD99Wj5Nb3pbKnNSRkI7aElnI3JTRHBMZ3p0fFVHWVJlTTovcD59VntyalpNKEtwVV01Sk1SQ255PDpHIiZCK0JAdXxmPWg+R0k6Q3QvIzpdRTlGPWhNRj9Qej5PPTBtWiZbSy9MNFJd''@;'; put 'put ''V2AoPjtXJFsjOWJiflJXT0AoPFJbKVYzNX5xIiZtPnJhK2ZQW2V1OSRCLkFrK1FUKEIpdFB9QWV4fSo+SjV0QitRPSlFUiFffGxpQERIPH1yfl13aEE9M0JtLlZRW252dXksa0VeeT97V2ZzKVo7KHJlLGdlNlVPfCkpc3ZUQlF8ZShfW2g/dVgsdUJUbWI7TzJjLCtHajhZRiomeSJ8VHhwcVpJ''@;'; put 'put ''YC46MkFmYEJtI0MvY0JLIjVGMGs1X3dIJjQuTyZzZlksNTR3T3MldXkxZkRdUUhuYytsNGQ9IjNfaEQ1ckc+R0ooI0FOeWJKWipqVUEoaVhMXj42TmNJYz0jTVopYiRjT3QhcyJoR1YmQzIkMFcyaDptcy5iX1dLU1syXyQsazM4enB+Zk5pU0ZQKEc6THJ6WWtFZCgsRyZHYUt5VXV0KCk8OjJB''@;'; put 'put ''ZiQuVXUoaHhkZGd7Yy9ZOFsrN0x8KjRucmMvOnZCQTR8K2dZVD5tSnZRPSxLKlV3KHI+IlZod3Y3Qkp1b286I0dsYlgkazliWDQkeCkvcGE0XSY/OFFaP3VXaSRNXSZaQ1dLWk0+L2JNa2A9JEQhbTNBQVRuRF0pa0JwTEUqNnc0PlVhbiwvM0N+PGlAPUc0ciguYWN7IygrO01RfW9TRlB8T2pA''@;'; put 'put ''YTNDKDMkV15YTnlGVEpgdDlUd1VGcE9kJGgoVE9RenA8aW5RU355aTsmQE5EViFwb15aS11yJHQsQ0EmJntZeFBjI1ouYHklKCM/bXN+RDczfW9LUVJYPWhXRDAiKzA1RzguW3t9IWhEK1RfSV0xczhzVHhMS3A+M0ldW0pYVTQ6KFA0bjNjVCR9IyFaX1RRP1tbdlZlWlhzZy4uYyVRSV1ebCNt''@;'; put 'put ''SUE7NHRSRk1ebVlaV1lPVV91WVRJJEhLfng1TnFxckJeNC96RiJrXyIzKGoiTn5CRUpdL05QT0wvRT9qSUh0Y15URGl+Ll9WXyt5LGt6ejc/eUhSKGZpQV46WjxfZkU7MzxBK3dtKzJefnBdTChDWnl+fENdV0F7Q3BjNT4sWVRLYTUlP096KXwkIj1oPCVnWWxJPyhRPW51bDVKR040WlBZRSwk''@;'; put 'put ''dXQqZUt4e29nOmooNzNZRilGMzxrYiV7Nj0zeGxidnNISjVUXSx6fUEza3UrNV0xUEBCT3QjbTM8PjFoLm9Ubld0bFNTWSRfVmFgckl0Zzxyd2o/M0lBaE58UklyJX1eYW5fNSZCKjVkVzokdjcqdFVVdEYlNn5HJS8oKyV+Uz4yXmErSF5qajNoZFpMcUxMYWFbWjV8NUBRfEE2cjwjUlFMdGI7''@;'; put 'put ''fGpKeFVbTHc/fH11PjoiLFVdTHc/dEdVKHMqTTVOTXc/eUh0fCMxITxzOSR9SXVnQy4mTlBGWnhDdChzSCxWcC83cChgOFpfe2BJUUchZHN+alF6Pm9SYXJeLmx1K0ptOVVmLGh+JkF+RjYmQSNHZ2x+Sm0+JlhtVVRsQypiTT5gJlI1KDdwL0QyaGxCNSQmJHQvdjdIUEttTXd9ck55QGFuVFMs''@;'; put 'put ''Ml4ieyJdL0xtfn5bVV9sNVBIcDA4KSZHVXxWYk1SaS56K118cXpKKl9+ekRkT3xhNzFKaV18QzAhW1FJVEcwW3Z8WjN6IV5nNUYyaERINiQobilrMEF2P3FIbl9WWVk9N0F2PzNJaFVGQjoyPlZjJTtHcThUXTpiVlR8eFhCfiI2N0wqZyx4Ukh7RXR+WG8rdT40QU4hXyh1UEdAWW5wfCRUWHJ1''@;'; put 'put ''cyZjbDxoaVReaVFeeXd+YHcmbWIyeXVvcX4xP1pIRjV1fX18KzU+KFh7YWNITE9obn1yZX0rUG5WVSNuKSVxVXpEY352NkQ1RXJAQ09BIS4mX1dkMDlrNT9ZMVEoZmtTbkcpLzl9cVA5VnYlWlA1N3M4fFdfSTtyNl43UkcvJnYsZi4ydWwuZDdkbTk/aWJpTlgwWUVXO00pRTVnQ0NaRilpO2o1''@;'; put 'put ''MktQTjgqLCxtTCVNWkxnKlZvYl5pYWR2X2ooellRPHdVXyhrXWM6dUpGbzFbRmpNMD08SC5oN1JMKmlOQS97bnJGLC46WWQwPCxufHZZci47LG9kWyhWeDUoZVdwMzFfQTZPST1rR10qJmdEcTR9LzFodF44aCZhMWpFQypfend9cjpEeGpzNk5iVExHdThtZnIoKVZ4NGxTQElKanZedig9MWhg''@;'; put 'put ''dmVURDRQLEpCMz9nMUdzUnkke19lPX4wU1RuRFVARCQiNVJ4OnU2QUZeZmojNTpvYWg4eHZjZWBqUmgmQ1REJUkiSWMkPXwuKyVnJTRyTWc+K1A7Pz9JU3Nud2tRakREem5XLG5gKmw+IVBkIXl2e3tQUVs+LHYiOSVqPVIoYF50bmFTUzVOb2BHVmhBI0xUUGIoVW01dzNvV1JZUTM1JnNlSzBV''@;'; put 'put ''P0dMIStOSGIvcmouSVlnYk5wY257S0cmdEdtIWA+XStWT0hgR1ZGP21TZ0k/fnVXdEN9Kj9NbSk9QyRAU0g/fFRCNGEsJSEuRWhoWypDPUJxNHspen57P1pfR0Q/KUdANGxwYDgjcVJBQCQoV2RbeSk6N0hCK3xecyVedjFAIUpdKFspJFcqMDR8LkN5cjRCKX0peiJsS2BYKk1TNGVpRHpqN0Mp''@;'; put 'put ''R1h3Xmo0UypOIl8zUzR1bnpFQCx+PXJ4RSN5ck09VjJKQlh0U019N3hoZnlOUCI8UVhRcXZMLz9zSTgzeSk2VnUxTXNfaGxWfWQ2JVNTTUksUGdOTSpjckxZfT1AY19vbk4wZXdvNj85XWAsOHgpe21GIUkmI3ooKWB+a1FAbjEwV3xwM1QyW1pGQjhzYnhHVmJOL1kySmxQZDVEaTVCXXs0bF4m''@;'; put 'put ''U0IoJl42KnNKKkdMKjNuVV1HP2B7RHo+JTJ3W2B6bDFnMmdkcktAaD4veD9VeEF9eDNzN2BVZjUlc29MeDNjfWM9On5VVkgmfU9SXzh+dVh8OVZuYDEvR103OG1lTEojeXpweXZEdmp2UHx7YTdQfGRePDNpJW0+Pzx7Umo1QFFUTEZ5TVpBbFNucnYwUkZbKVZGWnBVKWMic01QJE44U3EiVyk8''@;'; put 'put ''KUppNj5vW3g3MDZCfnQpQihfTF9vVj09SlojRHZCcXw7UkYhV1t9UENVX1ElMyVDb35zQ0swfTB4MHwjPW1UMW0pc3RMTHxZUlYzbXp5TnZ3QGBsWWo1NHchKXNzN25YXzg8OSYxWSt+XyQ5XitOUiNXM2l8dWp2PjVXQ15xSihfTHNtPkM/bHIzWSV9KDR1Pk46SjVvVXdHMXJPfm9TUEJFNj1N''@;'; put 'put ''QDkkc1V4QnNTTndsKWg6XSFuVFglL0ZpPXNyZ154UDIuV2grSHVFaE99XSlKfDQ6TUooXz45Zj5iQXxsfi49ZWIsLDhsRnp+ZHRYXz1tMm9RUjNGJD8xeVZESVJ1QlR8NkhwPnJ9biRXW0h9Wm4wZiEmYnVnc1NiNFRsbiEmYmVSKHVuS3FxbiEmTk1+c3p7IzB8TmJXNF5reE8ofE1mR3F+PzJZ''@;'; put 'put ''KjV8X0dRQVpMUG82PjxOT1F1dVV1PDwhK3FQdXwzMUJyam1vKDAxVV9KPU1JJEg9fCh9Vl9ZIURRPXF6QG5JbH1MNW0keC9YT2VXLytYSWZKSk8pUTtgW109JkF8fm1yLjVpY3xeSmNOKGVhXyxvVT1NL0ZIQythfDZNQDdXYWZBMz5jO20uVXl7PWw3fnMuNztzMnJxXjpIfHIkL2s+ciI+fnom''@;'; put 'put ''I1FCTDFmQjU/fU9gfDU3VFFZe0pDaTAsQE5lfFBOTSJVYVRoRmNBPGk/T3khVXF1JX5TN2U9OyxRX0wlSTRmU0x8Z1pYcj1hOX14R1M5fmlNSEk1RjtJJl0iWEkmNC5Pc1lmJGsweDd5ZzUqRzdrXywmPWtmWTp9T3o6Jm1UKVpWSF9+YW8yfUtGeC4xcU0sNWk+cnM5JHtoLCFzeHVVX1I6eGc9''@;'; put 'put ''MzM+WkUwcj5NUW4seU00IUVHJilLL2NCcz4yV0xjQDxkN1o+TT54aHNHczQkal5POVtRQSIrcz0rQ2pJVFh8I01YX0c5JS4jZCk+WXBhc3JfQ187RktjVXw6WjZ6QFNuXkNIMVN4Lmo4K0AmZS5JWDRuP1Q0d1tOO3QobTJ8LjttMm9kfTclVEpOQlhYPXNwbWJ+QyFLfCZ9NkdtPkdQPnU+Tjt8''@;'; put 'put ''OGpxPkZpQm0pRUEiW0A0JH59cm9XXzEvMXdsciZ7RkNdcnxja14lRTpfZGF7Jm1INVUuWGV+cF1dJnQhWio0Q2xgN0k2Kl1FT3YkelVfMlZsPmNgeCtwPmtgWXIwQjBfI3c/JiRbTmQxSnNzZXFVbiI0JU45Vl9+KGxzejckQi41ajFqOn0oUlVuQ29uQ3U5WnQ0KiE+SWRpUEZAPjxuSVFgcE03''@;'; put 'put ''R1ZYREhRNDlZTHx6VTVeU3xmQkhJLEh4QmAufH0saVZfVyxrPitfdSx9Jlp7JSN5Zm87bkkvX3klTnlQPXR+UlJZXzlPWlZ8R3cqezc3czB9U19hOFBxL1k3c3lUNGBxMF1Fe05ldV9wPF94YV4mR1pwOkcvUl13Omd8LnUuJnVGRml4VzVENmY3Xi5KPnV2S29IRzc2czV1LD40dWNETDRCVk5X''@;'; put 'put ''cXo3bVk0JGF8KyhjQSQoSE5CaHxsWXY+K2I4JnJ7aGE9Jll2STwpWWUlWSoufEpIM2ZzWTR3big2Ql1FXlFLayJKX3NgVFVuLkZVZCEiQl56eWNmYDI0Kip8fD1FPG1QJX19PE58SyFHJkJLUW5kd21XdD0yVGA1WDJ5R19fKWwiJjMkaW1xWj9+UGg4bTxVM3s8d2ErcX0sJi8makBKeUB8WUM3''@;'; put 'put ''NH1PbSokfSt3WF93SH1rIyk+fXZpZUpAcnErdHxbWyZtM3Q4bmdFWnwrUml6MXwqbU0/YDloOUVZWS4kLGthLkwjR00sUUd0TjwrUmltLih3XTBYa3p0Q09PP1YzbG5ZbjEoWlIrVyNnL1FzUiwhJWd3QHI+a293KEJCTV0uUU4uKGNiRkxBRjB0JUFZcjVqP3dJPHYhbX0ifENHVk01WS5kQyFA''@;'; put 'put ''aHk3IjZ1YjhPNWE0JFlRfmp6OiY+ailLckc5OCgwS0hbcHs+UGsmJUlJKGJDfiF6dD5daT1MRCN1Q31zdk04fmN5cSshR2N8XllzZ0xqenVTcXJMS3FmOXZ6VCU5UHNvUVdda1FveCp2VE0/c1FUQyZpRSxwWlRxNWdrYVV9XSt3IzpTdEN0I1VkcTR3KFQmQnh1NHh3QUoueiM0VVE5THlCRDNi''@;'; put 'put ''WWp5cTw3UyxNMEQ3Yi86OldSPGpYbStgUnNyVDZ5LE9pfml0XzcwQW9+P1NjW0JpbSxkL0RfSm4yQWxPY2VSTWszLmxXWz0qZ0FlYnwjTT8meFFsM3xxPjhYWVtbWitQKSthYkxofkBTSCZKRjRnRyVoYDlPcj5vWzorLFt2flFvbz5idCRUMEVjUzl+eFo2JGNeK1Z1SXUoeXVrWzVnbWBKWn59''@;'; put 'put ''SlN0PnhkfmRRT2AuOW1Ae1tVRmowcHRUfWslWE1RdW5jUWRNL1ovUm1zMWF7cnBGbXVnc3w9TkVZTlIqcTl9an13MTFaNCpldS92OXNjRDBadDhIVDNAR3Y8WFJhOm8+PVVEVChNJWY/QFVSfU9Zb2shdVNaYHtWYCJoWnRVOlFsRy51dCU/di5XTXEvMXQwfExsIlFkcltaK1AlMmFIQjc+WUpM''@;'; put 'put ''fC5XPE1XcXJ+XSojKlcrTEQ4dnpRczhAMkRkLFIxR1ZqKD9TcjZ1WU93RGVzISssTGA9bz5oQiNkbGpsYXAwfXpfJVpGZ2k5Q2Y/SGdyJi5oU1ZHeDFOZTpaTHZgdT4mXk5RfVFFT3RPTkRHK1VZUCR3QTw6Ln1UejV0VkhiNFsvWS5wOlRefS9dK319UG90Yz81Z3hUYkMoKik2eWF0QVg7UV1K''@;'; put 'put ''L0owQjdIQDpgMGtoSSllYjZ1SFUwQ0h7YWI0PjducDBtUEljL3sqRXpvd3F0SWhsM2MxMzFnKDE3fFRLaHo2eTAlZXhadW1AR2ZtezpadSNbUzQpKVJ9PihJRFJ7IUhdSGcuJEBgek9+JEFocF9+c1Y2T2VnRHBqJUkqcT1NIzFLYCNIQl0xfVpKYTYrZkd2ImZLXS81L0plU1UuLldrNkhvRXRD''@;'; put 'put ''X0R5WU00a1cpRGNFWSpCZU1FfVprWm4jblVOJSEqNnJjPyhTIzAuKmc0Ryx+ZStXbnx8LzE0T2NFVztIXitQJSN9d2B2OGhINSxWdSwqZyg9dnNUVVVuNihbMT9aeUk/OStKKWooQzY4YXRed3lhTURNWVg5LEQ2fVQzdFo0IXY9dUFgYlRvImU0ZT9WcDM4XiNqX25+MVN1Ois/al1hQ2tQdElO''@;'; put 'put ''P3pybThIWSppajBRSyJWJmwqPHhPZCZnQSlnKH41RCx4Y2ZKNXxGekUsRlhhYDZoaDtlNlVKb15UdD1aQ21xQHdfbjlLR2FDOU46fTB9eGgxPzZEOHxRWmdudGA9MVRjUn5KYDsmb3ZHbSlrdSVCSD8yaDpXRkBeYlQ9OXM0aDo5YzFqVjMhc0hrUjBfRUx8WzxlJDkkaW4rNiliaXxtSm4jMkIh''@;'; put 'put ''WGFKMWFXZTkoN24pdlVEIkZoNUVJLE5XYXxbaExsRV9MTEA8K3k7X0U2MTNQSm17YXImZnQjPnVmckcmZlBbWHYyaHwoIitvbj9HWW1McTh5KWRVcWJmO0ouRCshY0FVKD50NVJTQzBMd35ZVW4+KzVpZkN3WTkyeUBXQ0IlbHk2YERtdVt2cyl5RXJ8N3VjZmp4MzRtQil3IlQiU3JgR1Zadiou''@;'; put 'put ''cXFHLyZUbGJRby5HSnohfCE1NHJzQjpPM0wvKjx9NVJhbjRucUk/dUJ3M2hqU30qNllkMGVSJn1YQ0Y+SEZRaSgxaXxlajRyZENaTypCOEFMY2wwdiRGUlNqI0R5fUpDXyZJdHM7TmM4PH1zPj95ZmBsS2tCOmVUJl90JD4sNkp0fnZmanl0Ziw8S2N1WEVzcW8maT1vZk07VnZ0KWt2cSxtVT9T''@;'; put 'put ''Mjp9OTByX0FIQmwwaFR2dWpIVE9pdDllPXt2LDUjcl5bZmclKFNGSiE7SGJPSFUvXW1ALGIoa15ObD5SV0VwSmdiflg1WWtiP0RvSkpRenclOHM4UUJsNXFFUWYiLyxERUc+RS5pTn58OjUiJng2UjBCbEk1fDQ9KmZJcUslISVKRntSIjM+SWlUanJOJihlV01eLFZGQWErT1RsNTtjTltLRHth''@;'; put 'put ''e2RuSmR8O0B7JkZ3R1Ikenc+flNWYWF6bDdwTCE0dzMqakdPRCJ6WzZyfSkieFsoMUlXJklCJFlSdjB3fUp+aUcuN2s1MTZueCMiel1mREo3dzxCLF1QdipqW3R6cmBqKiowSWVCalhDZVd8dUl5InExVD9kUHVXTEdkWlM8P1pJMzhlZH4zKF0kazMjfD5JMytIakAmK0JpNEQsVXxMQk50W1E9''@;'; put 'put ''fkZHVXNSR1lSZjV2QUZCN0JeJjI/fml8Nk9danlBISRpTmF4Y1ZtbkZhYXsqYCpwU24rYHlib0oyYWI2dWo5OUJRR3pYZyt4MCkvPzJZUmp5bzwrUl9gM0JsVHJEM040V2xdRGImPyE0bU1pZzgiVmpsYmZZTjFFYW1DQH1ie31oQW01X09iZVlUQyxpOyZDM3wlb3BFdn1sflhDeF8pRVlTKVRg''@;'; put 'put ''WkwmRDpDd0ltRERUMmBCVUA3YEo1KFRXel8zVGRtMUVYbGVQJHROL2ZJenklUGt5OXx2dV8mIls4Rj5NcmVwUGNbY3RCRElSYmFnfjk7I1FtSlZ0dD9iP2RHXXw+SXtoVUVIW15zXyZGViFZN2JibXpIInNDMXYkZn5EMWdRKj4kOH5jL0ouXiVNU3JGNz1jVzc6U0ZVO0I9OTluSEVYZUBrYTJl''@;'; put 'put ''ejhMS3VDR3NSaWRzUFZFYkQ7SiFQN0dVe3BbQDFuX0RPZ3Q6YnMrNX1pei5eYHJ6QWAseEEqP31zbzVvdyN6LCsoTjYpIVp8YXNxWDlCWUx8Vi9OSnl1UHQ0aF9WRzIxfCYwelojMFJjbFdiSkNTe0dIP0hSO0xZXyUvaCRDMj0ibm9QfXpCMFhFR3FhcXNwdFdubUwoIjl0bituV1g7OjI+TSFC''@;'; put 'put ''U288IjRseXNndGJVUXR2VWg2VHxbRV82N0o1W1YoP30sVipNIm05UCkuflNpYGdISWQzbWVzRlFpQmc7USlxbEZCb21MYW5oS1Yqel0pVkUuRFNXKzIwKCtsZEUoSDt8PURwdG9leXlzfm8hNiQ6M2dmeU14ayZ6aGlMJCJ4YVNiQ3RBdjZxeiMpeEJVaEBHIz5FaXBJY0MoTCp+eyQ7dWg6bigj''@;'; put 'put ''LDs1YCF6SWA8bkVMMTQocD4vL0VIQEEuJDtROCVoOjgsJFRUM0F+Q2RaX1dYLklwL09IJD5gUTFONHJ2LkhIMi9TdzFoYjkvSkAkOiJjNFZFMXJkMDE+YUJ0JVd2WH46R2JsQj8jTTNOYHgwdHJeSGFLJjQ+bmp5Rn5GclY+TyMyflQoa1JvaWEseXtCdWFoJHVQOWk+WmYrQlQ2KSJrVzorYH4y''@;'; put 'put ''WmxaMitZMj8jdEB1Im5uRz9hM1RXbXxDSXd+QT9AaEI8IjEoe3I6OzsvTml0djRsR0BdcltCZnx3OHFzWncpSF0zclM5NGVTfkZ7O095Llc2eTJMRkg6TCJiISgmeXM4IUo3KHdDRlYqZj9QKEY3M29WWUBEb0Auc2JaXitDVlhmJCpCT3lNNzgiWFk6QDNNT3VRSl5LTFsxR34mViIrUlg6aXgh''@;'; put 'put ''PnB4ck03Q0lSZXgkfThSdT5WIVp4SERxdW1XNWtFPntLRmp0T0ApP1FzYFBLQGRNbVt8VVtbJkFYbHolWm1LISRPeFBnZkMvUzorIWh1TkxqKGxpb1pKQiVFQ1hEcWdSd3NmS0x8dWgvam4xS2pNY0RSIWUrInJILj0uZU5WfjVKdDMpQEIqaXhdYF5EXlFnSkA3KXxXU0IzZCphMEZKL3w0eTNx''@;'; put 'put ''UWhyPXl8bHh3KT9NSkkkWjE2e2J3eiQ2Szo6fVNnT1V3b2dgeURVL20+QnBhSCsrTUNeZWpATClAd0t0PkJVYDd3aCYmXTZ6UFglWlZ2c19YLntyKkNOcjAhVDlJY2MxJW49UyRrTzd1TklrVlVtIVNRZzVZK1JEMUUkczJvV1tlMFovfGFUbkk1ISYpTDh9NClwPmRQImJfT2Yse0xfP2J+QEtp''@;'; put 'put ''ITxLOmgmflk1UjlAYXUwYFFyTkwmWiM+Q2QyLHohfDZNLzdheWEpcHN7MU1TKl9JUGZ6KkQqZ1FMcENSWnNAT2cpQV4+bGJQLl9bQzo9fTghOyY4W25dYWxwLFZPZX00Q3BMelVFRSl8SEFbJm1YVk4vQkdmOHNFaVdPPD5ydzl2ckcwLG9+dnRXblYieFptQWVWezthYWdYVVIoeEh5cTV8OEph''@;'; put 'put ''ZGg7OihQSExITSF5LHJpVCZ0azEvKjcxXU9aLk0+XVBkWSthUU9ST31JOVpbalYscXJyaklRNFVOQyJZUUdWZ3gqfC9OKi45eUAsITt9a1ROT1JpXlhuLng4QiU9eFh8PipdJiw2KVohQzFwbDFkI09zImI5SS9WJi8pfj5rNlNUQSFNWyRfRStwZHdSTS5vITZfOU9CTyh9R0pWRTdLLyVtQ254''@;'; put 'put ''Q31Ady5qczlaWG5AWkRUdUJSI1hZQltHdlREPU1hKjBzOEwzVH1RaFpnQSpIZm5GXmh1Z0NXRV5GdH5bV1lfUC90MVAvRXRLY3wySlNWRXRSREt1XyVhbCZwfVBLMHhZPCI+OTJeOl8pTj5zZXt4IkFrdFtMKytyOVMreVMweUZKe0U7SFNnTHRZeD1JdVBRZG1BdWVJX3lhT3dlSGAoI1B+KGEy''@;'; put 'put ''SiUuLG9fRERLTUVnLCpoQEZSP0p1em5nW044KG0uKm47SChzfj9KS1VZcHd7SVVuSTI9QiJoJlQ7OWZsOV5xRXZOSk8uOzFPej89LnhhcVM0TFp4Pi9PVDdxcEIhV0F6M09tLF8oJHIxeFBqdlQqKF5KY2dnI11hKH0iXWdGIXxzITtaSStMaCR0LnNCYTIoTUZrQEdjQXNEaGlOOi9hIWx4aSwi''@;'; put 'put ''fHdLTmlrNkNEOXMzX1tTOiJlY24lUyk3TUd7aFVSZ3NZVkIhfipkVG5rQU9XWiN6SyJ+JFckTmgkbGdfTH1+Pm9sPjAzUWZqNiJ8OTZqcz51IkZoVEw+SUMsJFVEfGVqN2EySElkRmRYOWtmRzc8bltzenkvfUVkUzYxWHRBYll8UUtKIWtwbCpBTl12aHVkLFA+Qnh5NDFfNUd+L0tiZEh5c1da''@;'; put 'put ''fVtJT2NKX2tFaTUkS2JESGpYO1Q6UWFILEJXSXdsflt5TEN1JiJUSHJgN3dYfEFLbGlqTkk/Mj5EfWQ9JEtTeU5PJXxiLkkoPnR+UWlOfn4+Kj9WVnQ1MUFveT0kb2Q3Jm1QTnIrdV1hejBBSVJsWWJ8X1hQdk13czldIzlKJmEoTCZydG9yPiVvIktoQl0xRi86RTl6aWBgKX5jdSN9REdrQnxB''@;'; put 'put ''WHlyfnVmV0FiSGUsNyxOe2hlfDF4SShqQytSKXpreC5RYndvTEdPalJXZTV4VXx6NTdmQloqaDZ9LEFYT0Q6LGE+WSQ1bEJJbFlfZSVsYSxkcz5PVFU2VlopOEVMZkF5TUVaWER1OXJER3B5eVJKIklsckRFJV47MCVGV0FwRUMuKlZJXSxuajQrNVc2LiwjYjtGKHxaNFA/MWRBQ1gvO1h0eF58''@;'; put 'put ''RHpDQ0U6XzBBNUBJVEluY21Yajo1WE07LkQzdFk0SFAlTExPNyxNKC4/QUY0QTwvMj4qZmMlNUlOKTVGLkxUTnhLcTFwMEZ0YzR1MjNfaEVlayxob0kuYDlDW3J8KTJMJl9vZkVSVDpGd0VjdnY4bUROaDcxVXE2aSxDfXYxbSFtYWx+PUdeJjBqNVhIKWxLZXopKX42V3VsPzw4Pn5eVE58bVYh''@;'; put 'put ''PzlEayw/UUg/bGkuQExSOz9kfmJVWF9ENX5sSkRpZSEkYT1ffiVaUH40bDhgOFB0YX5ZOXR4KzlFJCE2ZTJ1IzNdKVdFOEhkUGsuOj5PJDdycCo0cmxHa15XRixfckUqci9DXlF9fk9bSl8rcn0qRiZTO2o6P0BLKjRiIzheSEpSJlRaUUBASHRVdUlSNFQlSWpOMmlMd2ZnRUFPdDh+TCs4eyYs''@;'; put 'put ''QFJIW3RTTDFIYWokWzZGUlNqMEUwfTdlOyY4NWFROHpFaVBMZlMsVit0ZkQuW2t8ZDZ4PilNXTE0TzJHVzs9dG9GdTVlSkcvZShbNUxxdFMmYTlCJHZraH1AWkdtdVAsUFBsfGpDQCZUJG56JVpKSUY3JkI4WmhDLEltbnpdPjF8TUt6cFJRYE5pKSJUQEBtJj98M2IhKzA3Pk5pJHsuQ2p8cU5+''@;'; put 'put ''JjZiJERoY0Z2ZG1jc0ZxVTl8cmdCNkc7dEU8PX4icFJnaU44emdmQltqejhpWl5xTnN6PCZ6NixoazZpIi85R053RS9ydmtFVGRkeEljK0dBcTVTP1JRN3Qyd20uLEVYWCthOF9GeUAmTmV1MWZEbG54RlVEZD17SmhORHJdKSNBPT5ReGJYMWpzXVEoOW46SjE6Xls9TTUpMU8qXzkkTikrYSs/''@;'; put 'put ''USg2bjNUWHF7YWBNP3Z9bHtAfndwVilrPWcrZV5eVyU+aGhzIVlqczZ1PE0+L25UIy5xZklPRmx9K3Isem4+e3smYjpPXWx7PzI/aHkkL1pyeG1aUStPIkRzW1p8ckJHNUx+TCR8TlNFYEhpRSk7P250Oi5NKklJKVczVWw+akt4ISR+VSVrfFgxSV1JT3N9dExmR11XWWBQYU1ZTjBBImM6bj5F''@;'; put 'put ''TUpZQSJ5ajdyPmJ1QDgzQXRnVjYkJVo/NUQySGtecSUvfW1MRE5WNiVRM2NmeDRnREpMdlcqNS8xJW1rM0QjYkwjaj0mQl1ZTzh6W21DTyhBVGtSQDIhP30oTSkkOz51WEx0e0JrRS99czUobnlSTFNaMnRvK1pkUlh7eSFaUUx8KXV1Vz9XWmoiI2B0dWYySCNMfHpIJV52VHBKfW1nWzp2OjRL''@;'; put 'put ''fDROdFE9dE08PmVlZH1IQWAmKXRoTCxPT3Uwc3FSVl9XNm4yVHArfXlqQihQQzUudC9BM2hfI1pUa1taSmkkV34qflNRYE9OZGlEYSo7JXMvRGl5TDloWV5ZITIobDBiNjhnLltGWyk+Q2lGJVoybXoucTAlLyRQNiQpZ0U2dyVCOXVqOnsmUm9pUWpnKT59QTVnZ1gocCtSLG8rLzV9c2pBT2Vo''@;'; put 'put ''TlR6KmciUkdoI2ZROm4pKFpXbk1KJnRhKSp5XzszUk1CcD5qOmBENW80ITJ5aEMvMDtfdmEhNGQwXlUrT2M/NH1YLHJNQXtMVyFNYFcjQFtYS2BvcEgqPUp9N2t+W1FxPktpaVovREdpVTRDTXpyYTQyeEwiL084NX0uVkdNTShjVVFUfi4/OiYuW19RcERaUl1zd25kWltMWz1xcV5JRjE6K09p''@;'; put 'put ''PjVXVVdfVXR3SnMhQUFaIzp0RXB6LnwyN2s4U1JVQjJ4X2loVHFSWmIwIXN1TXMuMVtLM2h0KjRkU1R9MUReWlpiNls6UUdUY1NAQXhBYHlyQnpyUGhlR0NHX0M1eWNJdC5IbFMuQnMmYjZibGlHM1FkQyl1ciNYfFgvOlEoLmRVX1h6QkE0Tyx8MTJSc0YrJVlTc2V+WVVqeWREa2EyYC94cl00''@;'; put 'put ''MUdIbWZuUkU/KXRUakdgKSRydV1UQE1nOVpGSCh9Kn1KUjpZfChNcmdRc2d0KGM1QVFGfXNASkg/PitZakp3IWM6O10wRD8+aHFMTXxtSCozfnFEfmNHWmNETmYiZX51ZTElcHdnbUBMfG4uViMqQEl6QX4+V3p0X3JXd1glc1ZCcHNUP01xZjwkYm1IKkBmQWF7THEjX00wVnpENDtje0BvSk95''@;'; put 'put ''bVM4RSV8O0BgJmtYWlJ4RGd0Jn4jQlRuQUFQKTg+NGxZP35lcyV4ZH5MNT9dQCR6JGNnRWZPeGlseGZ2aEpFQS48LGhgQjNFLmFLWWlgbTYyQXZEUVF5YXRaWVNIUlpIdnZseC5Mc3V0QkFBQUFBQUJ0LExNZm5MQm5BKmM/cnhncVR8ZkMmQiJgUks2c2NyRCJNPiJaekBQZHFxVEVgLlJSSVJb''@;'; put 'put ''Lk0sUzRtLiN0N3ZecGR6JGRAbDV4VSsxdD9eZU9TcVd4KDNeUURxdVowI0opSWheYixgPEE+JF4pT3ZVeCNJI3NNNDM2Mn5FLmo/ODNmJmsxQXhaSTdJfnFmXWwoancofSVlRXxDPS8wOjFYfTgjW0lZcFttQDMqZSIsd3w8KzF7IjBZRyNfYFssSnJSe1cjSmo9dCRLTyI8cyohc1MlRWNdJXtA''@;'; put 'put ''bnIyfD9tSFgmOHV+UXJvbW94ZWowWU5lck4/cl86VTBHP3xadVlHTXF7bio6eStbKWNuNWhOPEBXLjBPMytXZ044a1U+XWEqdUEoa1VlSVgyS2h7KWt2Tz5oI3RzWUxUOV5rbW1PcHFdbCZHcDx5ZF0yKklJUzxLOXk1JDV4dXxdNit+Ni9tUStLOD1OOzR4bkA7cCVKbih3TDJsLC4rbi8zUl9+''@;'; put 'put ''PVkmd1t1L1BBYEN8LkleeVB6eyZ2N3xLIVUhJjpVR1o5fSgoV3ZhVmVwMiRlRExVeyxRfXNzcWpPKCxnd19QZng7Jk8rSUJOO1B8PToyM29mJS5HPGI/RjM+c1dkZ0pldDpDamchdF1tOnJ+LkVUbFJicDEuQX4uKHQmIy5dKk15T0BkNUVjXSxifFpSVHNOKnoyZFBXQmtpfkk2VXMocW5BQEtS''@;'; put 'put ''NnV0WUlwa3FYVG1VI0RLel1xQmxKP1hFV1hjL2BRRU1YbkpdWCp0VGVdZXIudUArJj5wfCtHMlZJflhAfHtIbXdCeUkkMTwkMixffG1AaUVNcDZIPlZpdlksMzAxRzgvTG9yRjg7Wmk+c1pUOTJkKjZCbzVeVEghRmIiRndGViVMQGs4Sm9FMU0xZUojTVJ1e0QwO142ZDVIOW53L31PT2g1QTxu''@;'; put 'put ''XzZpZF1VWGkzKVklaFNqQFB+ITRVIUZEYCM7XV8sRlhVOz18QDQzfng7dnEqOz5lITt8eClObip1OnJsPUJxeE9qckcvbnJAKWtWJks/MG84Yyosbn59PWA1cVVoXnlQQUZyLEVVeGM9PVZ7eHNqYk1tRjA3WVd6ZiZ4bXIuJEo3UCleP1YvYlN7JmtSWEs0bzpkNl5LV34vXTN2PSE6ZSVMTGtl''@;'; put 'put ''a1BBRjlbJHg+ZFNNR1khNiJuV0gxZT9qRDxvc2pwOj4xWzthbXtXXyFhMl49djBSUX53akEpc2YvbiMvaENBT1BZVzg/bW9NQFBSZ0ZZX1VpYj9kZlVkOXMjTD8wIUkvVD5aK0xqPytCUVJhU0tjOWZRfSZCMTRoSGI8Kmt9MygzeTtlNz1TI0J5bEJsa14uQmFLVUZmbUBUWiV0aVt6fjN8bi4z''@;'; put 'put ''ZTJJKzlbIz98KVVKUjh+eUZ4RHtKZW42NC9lPikmQkBbYnlSXmRbTFRlVyNSWnkkRyZQLC9YaFdTOXdWNFE9SX5dI0B9SStFdVhacFRAfm5EOlpxR2UufGlsX2pJZHlvNyM2P3d1UWRCRSUhKGR7c3puPU9RfHFAUndIVFB+dzVuZilOOWEjWltRfDptQ20kdUwuaiRxelE5NXNKQFczIUB2fUJB''@;'; put 'put ''WWkoNjJ8S2VWblFyIntwdUNgeX1rSz1eY35fXTRjNV1+N09MPDI5YlBgK29SQGciK1hRbVs9bX09SzhmZCg3ejA6dH1VXnZrTD0xc3BwQCxoVEBwWlVILCVnfFtVLGRFRSpMUWF7PUd3I0ssWWBxYE95ezJYbD0/KyNgYVpzUnltOlJMYlE0YCo6XmJQZGZNUGQickg/c35aJiY9cGluX2I2cWRE''@;'; put 'put ''WGFMUVtuOy5hbnxgUGM4eFQwaHZCRE5EJStiYTlUVUs7QTF0W2A4fmJVJWRTbDRdZD9zS3dzVlkkLllMJm9JdE9ZKX4weHQ3N3wmVn59aE8kOk5+dWckUm9+WzU2MiVyWyh1Vjd+PzRISzk0fXJLNDhmWTs5dmdIZyZvTiExeUNgYXxUNjYqe2ZzbDNiWmh9XVhGQylbIzxeV0Y3TmUrcTJUcnBS''@;'; put 'put ''T0B9RCJnel1jcj90NGlmNmRWVD0wJjslZS5RPk98KH4oPnBXTFhXRGNrbVtOdT1eNkY6KWVTQDNZL25rREwvcnhHeXhDdmhWJDlFMj8mUiZzK3guSGBAPTFWKUJDazgyR2ZeYmJ6fCNaUTx7ejlpbDRAQnVEWndqMERDOUJ9elUkM30kdWozKVUmfDJPJHlbPiRBTiVLOCYlcCRHMEoxRXgxWll5''@;'; put 'put ''fH59RyNuSnJbU0piNXNEKUc8TmQ7KU04QHpsVldMSld8JVomaXF4QnUme1s0ZlExc1tJTV4iMG4yUks3fi5pckIvTz5Zdz8sXjRYOkdXQTVgakImSCg3dj16JD99bSNdPloyWnAyVS5ydD0/VURNU1BUV2AjakYlVkIzUVs0Vj1KWlF5Sj9NTEN0cn5UNm9jQ1dfPD9GKEdbfU5TT3t6RFReTHZE''@;'; put 'put ''PE9aQzh2SiVtW0AzZ0QsdjQwRk8ranxWbV1KLj47SXR8T3Y9dHlRVFBuXVQpSmt6QkdnLiRhJihRW35uX1gyKmhtOTIsPypRTlQlWU48eylqTz5lY2NtMmt9OztqYnd+TmBBX0Ihel1Gcl9yYVVzS2VzOEMuUWF0W0ducmV3WGtbXVApdDtuU0FWZn0mVHFoQCZMYWY7N1I/PEJASTxzdGxAeV9p''@;'; put 'put ''ViZGUGcqPUdsYGdwLyNZa1dweG5VcCxyYkp8PmxrPHJsfksjIVk7cE4qZE1OYnB7KEIscH13Tjd3N3tKRXVeTG57NGc6eSozWm1fb2pReyN+bkBoVWxWYnwxUT5ebzlbeF0lPUlfRzE9fCtKXTI4WCtkZFNoaHtdNyNncEg5ZzE/YVZFO0UyaXJ2a2ozSyhffnBbajFoVDVAWGZgPTNtaSUjNks0''@;'; put 'put ''fHp9JVBPT1R7RXQkTXVhaUguc3BHd306V0o+PGBqYX03ZX0kOypjXl5pZmdWbGxUQlEiVFMqSl0+VThrJkQ5fDVrd3N9Zng2ekBRbHhxayIhYTRgfkApREtlL1RdVX1yelcoPXVwMCVhLllGMSw6ZkMmTz9bWDF9PihqdkNlPzEpKilvRURKLGxQbj12PGwsc2ZzNWJ+c0k6fHRnaVRWe1o5PF53''@;'; put 'put ''aCFhaD03UWk1VFdsT1Y5KTRgU0d+WiV3cnJ9QntqaE1VKWRJeSU8IT1jPnFUT35sTigmPjRTITtUPCR4RSpuL2FCIjZmYTxvcH1FZWYpViZAaVIsVUN0PV0oOzYwP0tqLjVgSyRyPF9HckorUFZAYiZCUDs6IyZZU1cufn1fc3BNU3oyZnBrUUNTX3RgYkVdVVNkKWxuaEpNRExgPTh7fHJpI0BS''@;'; put 'put ''PXM/Qml7MnBvTHBYYFh7UEFGN2Q4PXl2TjFPVWE/eTBCWmkyInMjZElEMHtoI3JxRzRMMTNge3hdJFA6VT8oI1d+KCNkZlojW11BeV8uTU0lcyVBXn5MeF8yenNsVE56YjIrY2xALFl+ZnRNImRHIysvTFJzKDRFQVZDNCx2WGFmdUV9JXUyZ2EzS30qViVuMUJ4cS5yQ091LGxpIStUbEt2eHw5''@;'; put 'put ''fkdmdHF9PCU+WiZDSVB9L1RucXQwe05BPzRtO1Q/NTI9YnBXKHBrYCRWeVIhd1BMWll+P1RXNEdvMmNPOWQlTyhMXjhMVmppWko2XU5eJF1CITRQKVJ8PFlEckRxaDYmcHEqLEkyfipSKFsoUD1TO0s4e1l6bGc1fltvU29xdHhjSWlpMkQyPTl8Slc+bVosT3g+KW9DL0dyOVRNMEVFPVdZP1Rb''@;'; put 'put ''QGxUQD0+JWJucW8leWV5UitxTTp5LlJCMDAyKUVdNj96UndOfSUoOk4hPXpDOjB5STVEQHhIJGVJb3RLQ09NNVV5Z2YiI0dxMStiK1t+U3FiXyRkRW0sfG8yfHB7I3ZBITdhKTM6bjtfKjJRWmd4WV9VV2J6eHxHYiE4I15uM3cwRkl8TUpjRmNhX2Z9JTNOKE8hPF5NSV8jWmZ9TWpLaH5EImc8''@;'; put 'put ''NnAmP2hxcltuUExGeTp9Y11yaChkL0B4cnRnX3pTUHo8bDhxfVVoUktEIT95eCRbPWRqeEZJM20jKl5TO256ZiEhMzJHOzBFL1FGMFJvbihTcj9EVGlzSHkvdzR2XUxLY3gyXXB7PildWERMOlslTCw2UDFzS0tkR1BgcDImRSFzdjBRIXlkOllfJHx7OkdRNDNtOC9SVlBaUD03aD46cmdXd296''@;'; put 'put ''Q0MjS3g4X1RIJTRxNiM9cXlvQmErcjM4Om4zPFcpT2pKc15WZDZZak90VWwzSStVKDIqVSV+KlgqcDUpeDFsVmY3ITxTODBlTSs+YElEJFRFaUUxVz1tdkxKY310ayh6ZWYhLl1tPiM+UFg/Y0RveWs4SFpSKkEwPFtTSW9pVShAQT1QTktfIj5EYVg9OVVaT2ddZkhbRGN4NlZaWS5rWjkzQlh7''@;'; put 'put ''S35gWXJZbCFtP0kyV2VQUXR9NnkqZlpZRjFwJXAqKC54eXIhUVFIWEM4QXB2QUR1S00vZTg3Ym59UnsmQnFtKkJJRV5UY3R4UnAvYjc+aH5xMkRiO1UlSXx2fkBscDgsQyN8Oz9QKUF0OH45fm1MQkZsKEFMOl1BInpKL1MpMFshVH4wIkJ7c3FQUjsxTTx8SWc0ezQlLmJweWNSTDd0U3tucGtp''@;'; put 'put ''NlIrUm5MXztnT3xxfVJxSktqTUx1SzF+YVN0W2FMRkIuUlc+NVpJQm44KHwzdHtuPWZkRT0uUWVMfHokaylORUlyJjRpbklnUkgjdWRCd0RiXi9uW11XfVYsPjFxcWZSbDRNO3lvfHJLRkxmbVRgYlhsMUFHLyNoekttbzM2XlgyWmA+W1Foa3pSQ3ErZGtdK3svZEJXb1lfTVlaT1Q8KEEleCZ1''@;'; put 'put ''T147JHR1PVElKXNyeV59TS8xRHpLQDtEcnl0LD49anwvPWdIVjk1ditDKnc6PCk3JmRMYEpDdG9IUllycTFbbkM3UWh7U00yb25fR2BZV2BFQThPflpzZV9FeUdoYnFoN0VCV0UufS5WY34jXmgzfGtMOnA0WTlLMDtoJCRpJT45e1R1XzFndSZOQkUsPSQ3QUFxSEI8ZGJLOVRROUtPVVQ4flZx''@;'; put 'put ''bDNqKHlHd1drX1BXemJoKkwmJVZnRDxUKz4lVzJ1Z1lPXTdPcmdyT0F9IWx7cmI/bXdwTUZSXUw5RFsoQURCdFQhPUBvYXgxeTtzSyZ5U1U6PTp6Y0MlI1NiUjYvZi9XW1ZbOSFMSytUWGJ5cFk/eXAqXWlrLnA1Q1llIjttMSQ4ek07JGtvLl5DRjxzU0Yzc2xSYSlSTyt9eUlJTj5peTBXTFR2''@;'; put 'put ''RiorUihHNXUkWW9RQDw7KUs4dERvTXg6fChjKGFJeF0kUWM1TV0jUl4zZUJOQllrZFMyPyMhV2Q3JkIjXn1rP0hDJFlza0o4RWt0PVchU0g0UUBMd2FxOUlTKUptZ2xnOHFqeGtHVjtVU2BQKnUzeTNOaFJdb3BaLFdCdz9aNE5NQGl2dXckVjBscCM4dXFUSyhUUz9yYVtTcl48RElPJnIye3Fl''@;'; put 'put ''USpJIj40WTlVcmgoX11tfjs5Nnx9KHVAXkUiejFlXmJ3OjZWYyRCJExtaDxdWXJ2a10lOk50Z2d2Kl13O0gsTV5kaFJGezBEVmZXS28hW1Y3KlN3TS5fJk5xRjBLUSMpMnFCczFLXl1aLml2dHs2JCx7SUdDQElyXXVCe15gKGpOZH1bais+JEpHZFJoMSRpcFArPmEsOjhRTjsvdHFwTW84QFF6''@;'; put 'put ''eit7Vzgjey4rXTkyen4mKztEO2RxOD9RW10kczlfYkooNWM7PDdwTSxuOENoYTV9QGlZO01Oej4hKFVfa2hbKigyMWE3XXAkSnFUcVhTW206e1ZNT0kje2JjeWJ7b1YqblQuNzRDMyRGa0VjJVpDb1tqKGRRcXM3Z1UpUVtMSlozakB4ZlAjaEVyJD84eW0jelEkZUJqbUhFdTwuNndtJUhlLkhJ''@;'; put 'put ''WFRjUnBtYU1HX2kmKjNzIVdYXVlCWzo1YiZ1fipKSGEzUiUoUiZyTi5uTVorNH0kWzI9K0NwT14veislW3p7YSEwfUc5JGAxVmB5eThNWUYhOTx3OjZlTXl9SnphZF5NN3FxK3V4ZCJVJDRuSlldX1pWdzF+RkxHW0xbY05CeTpuUyo+e246ISEpQUt4K3wxNHF8KyMoWD40OEgoNHViU3JfOS4v''@;'; put 'put ''bjA1NWRwdm5dM2c2diZabUNFbElNUXhxaiVOLkJIRnNlMDssdEg/IW8hO2c7WU0vKStWXn1vSGw+JWB4Qm98LDQrXyEwPlglYnRYSCxsL0R+VXZIeXE+QCkoS2dsLGxTNWhddXk4NHwze01ELkZqb2p2Z1slJFk0OC9VQTJufj0wXzIsRH1fdjo+Z3NgRDhSZT9bMzMjSk9TZk1ke0dzTFQ4aExN''@;'; put 'put ''Tis2YSM2cFpnN0lrUl8pUmxwc18jVH0+cjpnc2w0aV8sSkhhSVRlQjcjazhjc19FTip5NnR6aElLTTN0LD1LV0lIMUo2b2NCNmUrUWpFdjVBPFQ+VDFtcm4xcF94ck9qRVYvZSM4TyN0UStAbiI1XV0vJT5yJm5HRVNVaGdVVFV9T2cjI1s3dmN4NiEjbXkoZ3IyMWlIdy50VXtZbkhldmkwMyI3''@;'; put 'put ''UnBhQnA5MSY6PypSU29yejlILFQsZDUrWSFgajtfUDtSM11QalpgW3pgdDUvWD54R2BkZVdeOTBAIkJ9W3wzLjs5SWhTbUl2Ki98U1U1SDZDYkA1bisyKjR+Sz0hQm05ayU5WitIanlxNER3OyhmY1RWY21vOFdWaihzNCovYFk/aG9LPk1GRSt8JXRWOClGK3lFck9gJEYifWJZdCJuKChBM1Ny''@;'; put 'put ''cT13Kz95TT1RS2VJL3BQbTpvLCRbRTVuRz1yNGp9PlNMTWVUPX1scVp4T2AwfFhOJHhZbUBkb1FWV2MvL28rVWhILGhuKCNXNSMjPGtHPV4yfnNVaGU7XzF3S1s/NCFJMGlRZmZsNyVjNVA2YCNgSkMmQXkmVF5wVUxrdFNZLERYVTFuP3ZqS3RQdyshPmlbRXtMSGIqdCgoYWk9ME1haDNRMCZ7''@;'; put 'put ''PmtRWGkuPm87I201JSUkcTUuMEF5b352Ni81fXJwUk80PjMxc0EkPV1BdWNha1QzbTEyKEVSNm9ULmVQcl47akRNTi9FaFluXkgrOUNmREFJc1ojfDUlPl8rMVFTK3NNUllMPTN3Wj0yb2ZMZ0VRKzRbS2crTHZaLkRed3E6WEQod2Y0MnRRZzgwNVhpWEI3T2ksKlp9cDN+WStkOiVjZy46dToq''@;'; put 'put ''QFUiPUZjMEFJamJJOkx0cntSQiQ9Jm00Xm9hVVFjZ0s+a34/WCh6Y289enJiRmBIMVk4Mnwla0ZxJE1jcTtdZ3xNJT94NHE1T1QvM3Mue011PV9HdGhAYCUpSjJSI0w+Y2pud3dHeSRHLFQmYjNsQ1phKWpTUz5JI1ElckZKbkRwWCVmMnNBIlkyNSwuX1VHb3ZEfWMwYV87OE5YXXlScz42WXxI''@;'; put 'put ''TXxqfldscCxqbHM3OnlSOzB+SGIxXSNbaz5Udj5oWnxbPjpHdVA9Yj5bN3h3Lik1JXYhbTl8KighVEUwRmNdN15LP09sM1RlRFIkSWpzIWg4bHJlUD5RUFZjTT0yLy8jKz4wZXJtQFl5WjtOb2YpS2BsJWhvWXY4aXBoeE8kKDd0fiVdKmpuM150Z0xLWCF8TGNSV1VMPHs1WlFBODteM1tYeVNm''@;'; put 'put ''ZSQjamErcEssQy5XclM+Yzk3ejJ6LzFrOjNmYUp9KS9gJiU+RGcoX1dZWGJVV1Iqe0k3LyUmWU5PcCJFcn4qaGMzKFc7enBnPnYxYm1mQEBNN3czVSN7fTUuLnF1cH5pWm9xLDBEP2VzU0FfeFlyLnslYFRnKWJzOCZVP2kqIVtJTD57RXJ8YHQmLzBNV198W3t7N2ZnRUhAd3VVP151ZkJraVJr''@;'; put 'put ''Pk9sfFIrPXNZKFE/WHxEMSpnYltYd1JyISw5dCJPK09tL1NfRUNwaSNTKF4+V3tFO1dbN18oPnxqaC9yIWN2bmBEXUB2JXJbXkoxYyw0NFJdMT1NYXB9TUNdKCFtP3BKXy5pfiV6KCksMyY+Vm1kLihdMiprdkxvUGlGMTArYWM2MDt2aGdjPiw6SEY4QiJvdytPX3YlXWZ8NnYzdCZkZGM7ZHZo''@;'; put 'put ''NGQkX2toNktTOmoqcFMzSERWbVd1Y0hvPyoiPilbU3RWZyg0V0ROc2VacWpYNWprOWVKIXAlQ3l5LzIvT1lRVjFHSGl3aF1Hay96dlNxOm0oW3kuKDRmVXJTIzYyS3klSFtpNjNzM2VyckkzYHByUUdwOXcoWl48WlJHcE89Vzp5UiwrSUVnMzsxbio5USxYZXNKeUsmZ01+JUNNOTg6NnwmdHN8''@;'; put 'put ''NDhtKmRWZ144TiZbWXpRKlpfd1lOZD1UW1ssUkpGO0l8SGR3d19gPjZHIV4wRGthJUk9SkQidmo/RntvVGRuKFQ7LnBGbHUuQ0V8YzB8XmApdVtgSCR9KGJWQzdsVGR6RFI9aT0uWWc+dmdML0FTLzFFNUpLbXZLYmpwMCRJOWZWa15zZWVLZDNHUjBGMHtGXiJHS0cma1pBbXpkd3FvVGpdRmp5''@;'; put 'put ''LDBecEIoVUk9Pj9rQ1taMGEyKGB9WzY0amdBM3JwMGNDNH58eVNzISQuZyF2NWAhJjNpUUBUW3h0Wn5wJFpVSFRPd0xsUmNkVU45OklAP0pfdXpINXFQaTNQQVZLLENfJHsxLCoyc1VMZGNqM3huKFF5JFNdZ0x4aUtnSzxmZjo2XzlMRWVXcTlfO1UsW3tfbC5aZjk8WmxHWlF+WHxROnp1JWQv''@;'; put 'put ''bjwoJkt7M2FZeUpIb2IrSU45PzRGfXFNQ0c/TXk/YElBa0QkS2x7VCRQIVUsQWk9cHF0Jl4ySGhFNVdaVV40KURuZmwvdGA+OCM1XSZTJmtQdTxjXXI5PlhFSUFIdEd3VDJadX51KTVIeUJuVDJeQ0h2WXZvfDYrOixtIyw7PVM+IyhbKWBtUkY4WUZ+TjUlL1s8O19FJVR1Q3wlMWJVZWgyZHN6''@;'; put 'put ''ekN1KUI2bWFZTkJ2YDV3JSQod0hzMTBNYCQpKTE8ajFdNDw/Z3FUPU1Ydj5YQ2h5WEAoO155PG5Ldz9OayFbRXxMV0IhekMmfi9LTjhSS1JgfS9pck9aT2xRPHk8TWxLPC5QWH1MNEc5QCIoLnJVMWJFUUJ6M1lhTiskK1lNUzwkayQ/SERLZVF+KlZwSUtYKkYwO0R1T3V2R1FRMyxSZF1UMjNZ''@;'; put 'put ''YzxDXzsoPTJ7YkVpPnchdDAmT0Vmel1OQn4vMC97KCg6Mzk6SUdoJXlVOi5KKSVnND0pOl1rLjZpQ3wyc3VkXXtVOEFtL2Z9NU5nOzdGfSRxd2hMeDA0ZHJzKzNya3s7YHJIVU14dHliemBxL3t0Z2d9dkB3Om8pLDxpJnFwSTIzRjwhaW85PzxPRTNNTXRDNWBiTV9DMS9TckwvTTlacS9nc1Jq''@;'; put 'put ''JjRFKlB0LH5iPSVxPGFddjU3NH12IyJZY3FyKHFHUCQsc3FMYj4iZk91O2NJI0hYcjh3Z3txV3V2Rm5IMH5xXlkjJURkW2ZoLHd+KXZvZlk2R0shOm1UeEIyU3khd2Mvb05RREYpLzd2eyxuWC5+M28lX1h8U3ZzVGRlTngmUn5oVzxHW0VyXV5rbFc1dm9KRU8hUXJNdWooYDJ9bXppTTxuTFQ8''@;'; put 'put ''fWY4RyhIc015LiR4e0V6S3VbYC5VQ2x8elNre3xzJCpJR3hGOW1kW0c2TV1rJVttKnhnMD0mdjc+TTg1dU5xR299aVJ+djNhUEIpXVpVTHkxclNqdXtiXU5+X1FYNmd+alcjJT4ibH1FSHJ3cjVxdnI1MDpibl06MEgoIjZgbCt3RyxsOnt6cFB9PDM5PDJSR2J7aFYvbiF7PTQ5JSQuZD0kVWBU''@;'; put 'put ''aEl7fCs3VUhhLiVBNV5kZCVibns5Tzc4VmZ1TnpURmNSTiE0VkBSNDR4RzJkXVUwP0ljPGcoNil0LnxuTkteNkMsTm5mMlhlLz88UlYyfXJDOk0pUk0+RXdFYUJfV2BlY2tuTTxvQk1SJlB2ZGxgZCkzWEw4Zm15NiFyIlVZKTU4fEJfKVFwYCYkIWVmLHtGW0NvMHB1JFpvdko2SSsqVn1zbCwq''@;'; put 'put ''eG1DOTNCdSs5XjdmIzEkK15eKWI3aldOfCZJU1pOVGB8S0xnS2M5eSxjU2JGV1QkOis3ZFp4aiM1ZTNmMipDKHNjKFF0LE4xTSNrLyRQMGNxJCNzZDI2fmo/R2YoTENEUnA9VGAjV0A+RV1yKkRMRDs3W0dXa01XbEtMbzlTaVFbaWVOci57VytqPDRvRSVgMi4hUj0zaGVHSSJMT05nfjoiKGFy''@;'; put 'put ''aXBVbzVlIjVDY1FHV2NqLFYqNGk9RyZSdnpHNUAqPmRgKlkzSlFEPVVkK0VEdTxEKntOPHJIXyRBZDNZfVdnTTJePkJjREFtS2xjbywsSVsxKE1IZXc6SWZKOlhNJWt6N3tXZFZFOnNAV3BiflEhL1kmKnR7a0EzSTxALFExY2B9RCZDPWZgQ1ZnRmt1YEpmLyhUKVtaU0YpNSsieyJ6flB4bHFE''@;'; put 'put ''K2NHTHBrTi86ZXM3fFlYam5Ka0w0e0krais/aEk9JnNvRkchWV1UIzc5Y1sjLHVmUUxlbnMkNnB1SV9AUmJHcTgkNFlURG94eHwhYjJTQFM0WyJ9MzB7ODpjTVpyfTR4dGN0SEdgMlE3Z0J8Y3NId2BFSz9rMjFdRWZtan1rYlc3eSwlbGs0djUiLm1UVFg1S1c/M3xEUCE4TSlbRSpde3U+c30o''@;'; put 'put ''bDkjeD09c05QZmVtT0lmLDthZDx3Q3BpIjdOTUkrcyh7Li8jeU9CfEFmbmlWbFNaa3k2PEdOYF50RE5ILFIhSGJdaHJ3TkdYTGghZERnNjZVQSguTC8oSzgkQXVMUX5yWDVgIXs3alQqI3YpcDh0MTw8Ul8uWGJzZGkvVGVocWVxW04mZ04lYnV6VUZ9OTp6KkI9MlFNW2E7RWQ5Qll7aXtldkk4''@;'; put 'put ''IW5aU1B9eV9oUnYhKXZRZ1srW2EkdE5EK0ohOnU/aElXaz1VKWxCa3E+L0Vmc3dhK0ZAQHpkdUwvRSRtOUM7STozSntIRyQzd3RlPHByQGs4U21tfEtvODlrYyJtMWZeNl1RcyUmR2drI3tkLjUlUjpoYHsoYDk1MlEkRFE/L2JmNzFQPWBHJS9fQl5MRmFmN1sse1B8KklHLkYlPG1wcyImInkz''@;'; put 'put ''X3IhXTZNQmghcEFfXUN9UF9YKSxFelp+bVE/I2wuZTRpWSYqeTZoaEMkOGFFPUl0UC4/OzE0N1toQUVMLjVocEs/QFNyRDchcEgrY2VsOj0oLGghX1F5enh2XiwjfXtCekB0bTttc0gxdGs+anNMM3ooY2IiU0c+cG5nJn5xbThIVl1LJV9idUhrTF0qREcsU1g2VU1WO2NEYEBGcmx9aTFwLkRd''@;'; put 'put ''ST5DZm9kM25LRmZCZU0wZUt0VWMqe3tAXyxwXlBwfGlnSlJXYCx0e1okW0MpMEYxWlt4NV00TXhbJi9DOXl5TXdnWmkiVStsO09TZjFEaXg8WXk7I2RbWmJHIS9MdVd6UngyInxqcmdzLC9wai5aaDxlaWcuMDJjP0I7dEJZTmdfNEE1OUdxI0xwbzxLSUVTY1dPO1F3ITVLUVhiMGh3cTwodndA''@;'; put 'put ''VjA9M20oXTlUeV0yTStlPD1odT1Acl8yNUY2KiIqRFZuQmNsIkNyJVo/WUNqSDN9akMxNn5PKC5gQE9mSFlRZ0UmRjw2KkcwZmhpe3dsVy5leFh2dWQuPHlIS1UsPTdTNmN5ZWREVkd4aEtralVmJU9XcjgoWnN4Mlo2IS9sIiRSM098dFMrL11GJlQ6RztBR1kjenphcHkqbXArblp2UGs8MmdW''@;'; put 'put ''PXlpelU3XnkpLFU7fklmTnpDNVt7eG1lI3MjRkxpdT5wM3tCa1NDaVVuM0UuSWluMyl5XTE5W0luIX4mekNVdFcsc1gxVHZ8Pig7cSZTWXlXND0pVSYlOU9iRXhlI3JqWlh2MHczTGZfOTI9YEI3Q0pfQW5UJHJ5eltHL3NCWlB9YClleD1rQj5od18pMEc2ezBmYCZCInZIYV80MG9fZkV4TWJA''@;'; put 'put ''V2szI0FidT8ucWBiL3VtMG90dTx1L2RWfiM9OV1sPExQYElOcCpzLnc6PVp9KzRAIkNNWUpSI3lBK3ckP3REUz43UWBuSjBtPHBPeklBW0Q0W21GRC81O3Z0KUZSYWFGSD9CZG5pajklTVQ5JjJTIytPTV9ERDNxdSlNPkN0LyF1MCN+PU5HP3lpZ2svM05aIlBTOjZQRnUlTmxkUC8wQjZmc1B2''@;'; put 'put ''PkBGT2EkUGp1flR3cltYTSl+WnlsL2kiKjZzNyFnaGJhPTA5SzZwPz16dnBuSmddaUQpe3ArUSJeaytWMFkhQWtaIXZoKDNQPz1OK316XmEwQUcoUVRRWGZ3Q0Z3JmJ6M2oqOj9dIXQjaVFzd0Uxcl5pKVFuP3ZkT0lyViJ6IX5odHxmVCsxXjI2UUkweWtRfnRXNjBNSDFvc2E6RkJZLlV5KUpr''@;'; put 'put ''IUR7UyprZkNHPV42WXJWZzl8ekJGXWZGKkVWPVApTV9tOzR+eUNuMjY1WFZiYD9IO3Q2anFRNHYyNDxKKHdYPHp+X30vPXBuRztWZHZDWkxpfVcxOUVNPHkhTCRVPCRobiFUMmpSVnpLNlMhNjNwLmVARURoUzJiZCpRXXkrOH5delhTNDEkJC9+NStgLmhZRG9WcnIzWTNyL1FbdFM3YSZLT09D''@;'; put 'put ''cmFXKmw8Ql5SJUsvQmE0PDt3MkQyUCp4dnA5UUtjRDNGUj90ayo6QmQ9W2AsTl8+cXxUWWcmS2tiYCs+WHg7QGh2ens7cSRKOSk3ZFh0KkRqTm9JSyNhUlhKb3VaWGVMYlouOyk7Ijxyb21hMG4jR2J1WXl0U2toUXdwUFFHLzx1LGwqZWFZR0ddPm1dZiojNUk4e3hTe29hIWR4Ty9pSiNlZXdy''@;'; put 'put ''UVRfZ0BqUltvYyIxWVc4ZmhJX09wMWxyeW5RKm5mYExadkBRO2VJbSJ6Q0txbWk2ekxfRCxmRm1uRkd7biw/cXlwYnRvK0RxWyxZUU03R250dXphOzFFKFN0bjskKmpqa3hbNV1kOE0sV1pGanNCIWNMbFlGLHVGTX4vayhnNn19TTh5bD94SnlYb21SI3RNVnMuVmZQKnFTKF0hemB1XnUjQFpM''@;'; put 'put ''NSQ0aXY2YENGPyJoLFVaRXxRe0RUck5FUmtFMzNgZjwsLEVTPTVJIUBQOCEhMW0xOlQ2JGVdSipgRE4oXlAlVj99UCsiVnZ0TFhGQksiZVY2ZSM1TlJkcykoUFBrOnh6e0t6Tm8/LC8hJGtTMGA4MmZsQlFgKjdxbUp0alEiWj06SXk0fXJiPilYfGVPcGdaYj9ERSpySXUzIXcmfSRNLmduWTJY''@;'; put 'put ''Xz9zPDN9QDRAe0R3TSNRJGU4SVRSNHE5KkIrcE1zTyVfMzZNayYxLzthVSU8PEkjd2EzZF4mYzxOVFU5Xmc2TEdua1pdL3A7QFUhREE7RHQhMTxlXjNtKmZxN1YvSmtWQmprY2NMTjBea3Rrbygma1ZFcnpVdkdLWTwzI2gxYSVncClrX2FeaSJedHBFfE5yZi5hXTxHJGlCRjs9dldfLnMuK3pA''@;'; put 'put ''S0VMUWooXjdmbiw0ZExgfm4wYm8jTm0yK3tkMDtXU05dI1didy9Mb1dnei9yfixSTEo9MGE3OzUwNVB1XiwvOXglfkh1R1pvOWMqTWMrM1dfWm9NWXZ4OyVLN1lvdGtELnN4VT0hNHFZS1JEMVBaLzkoT3F+bzBjLCUwKXxqWktkbU0ldCNsdzd8UE5aelF6NSRuck9zZCpEVjtqM2pyYUc2JHdB''@;'; put 'put ''QDs7dT8ufCQuRjQuaFdkfT1HenNuMH0ucFF9ZV5dNitTKDN6SEs2K20kKl1LcHdnSzF6YStANm5YRTxvOEJiWkdCeypockJ6I3oiK2V0L3JZXn1MVVtnIT4wVz5gKnU0ZHxya2hNNG8hODZxTyVzK01yZzgofXBWdCslZDI+SGxNX3M8QGZmb0prbSxSVUwzYEoyMFljc2kwc0VVU3x7L21Ve0tL''@;'; put 'put ''ZUQjYHdtPkE7dFBjRGcrWWEiaHJGWFdEd3hUdnM+K2Y/fHNWd1BbRlNzSGBDeXVCRG86VnhSOFRkRiRJKG1PI1s3USYzOjFSbDdRIk97WTgvSlp3PGYrZF0pXip3Wld5VkZXXVRTS0o3MVIiMGM9R0dQfStSMDZFV1NHa0NOfDxRRjhjNnFKfCRgelp3LGVMSz1PSXs9L29ISSlpSSMmbyNjbGg4''@;'; put 'put ''dDgoaUdod2VGWSM3RUFSJXtzQCFiaUlpISZ4aCpiMTdwUyFxbz5da1l+cnhUKHN9Qkd4JmojIyh4P18jOWp3UkFwXVpydUBYdU9GPmwyc3dFeHpBNkN+TGNdP11TJWBuNjcmVF1jKnpfZUIsJTBEX31RczhFdUxeZjgpNFtZeENbNHx4KmVDJTw8PSV6MkRVU2hkezc2cHpUUkRKbHIpZm58YEVg''@;'; put 'put ''Sn14UXk6UjF3WUlEbkprQipESHd8eDVJSzw6b2BKLy54Z3NjT29rRE8kTyokTDR9O2ZmRERAeXBmd0VYOnpIcFBsLGYse2ZhNWBqXWVScz50MUxMNF93fXFPZH4jQykpYTNvc0ZjJSt5RUMzeD48aGc7SEg2aFlvNk1GSjE2dipAKXdudTdaI1Mkc1tZbn1XWDZ7Kk1+RlA/K3txUlBbZnN0Oz56''@;'; put 'put ''S2ZoY2VFNk1ASFBdRl0kPUl2U3ElPCxkZ1VyYDFiWzZZeFcrO0NnLjwrJjBGWXJlamwlPSgkd0NhQ2BweGklTDVqQGUlWloqSUQ/cnNTbXh+WG1qbFVoKTRRK3VCTjRXcj5JLjYjODM0WDA2XiVgR0VGdTZlKi9EdXFhdyQpS0BvR019PTtkd1VlU0BqPzF4NCNxcnFCSTdyRHoqaEIvN3tsM1td''@;'; put 'put ''emhdKzgxLnVUYV9jL0JaMFgiQDtOTV0uaExpZDFIQHw0JE4pW2xAViMmIT5LaH1SI0p8YUo8QD8uUXkuOHpgZS9BUFk0JCR8fjdxKTdMYWVJV2dWeH4rQV94Syl3LkRNeDZmNzs7OVMkKnlgMWIiWkIya3BhWDRPOHkoUWsjaDFjVl9NW0I7XyMzeTAvWk01d2JwP10jSy9iPnVyNlI2UkkvfjQ5''@;'; put 'put ''WCF9eGE7bTZ5dkZoXVI+JXhBa2NtRTchJHkvVkB4MltVaD9PNUhFejFXU3tVY2MrMVMzTGB4THxeKWM/QUArNDg0XmZlOEFqbTpPWms3IzwlOjh1QkRSPj5ddnxvOjE8fWYyTEsjNld7XyxoWHtBZVV3OEdLfUFoY2cxT0c/RFl6ajlXVjl+bDs4Iy9leHxZekQjdGhtUDxZSDI7M2c7cmx+X3Y9''@;'; put 'put ''UTVfIVpiPnUmMkhIO0Bke2g8Zn0wOkRyWGFEKnxlcSNbOHcyPjJbUVV1dCYpWCNgcTguaWA7VCo9ISlaVz5kNkg7ZHtXI3BMJXRRd1RhajMpazFZKFEkXWBOOWh4ez9BUnpga2BtPk5TdCF7S1Y/W3FpdnRWW00/Vnw8TjomXjk6VzB1eEdeaTNBUS5HKW08cW9hP0FXYTREVWR5allKclo4TFNE''@;'; put 'put ''PEM4KXIqdWQrPCRrQGhGflBmRDtMOk9DbFNoJHhwKjpjdElbVEhVZ3Z2QlIqfit0Q1NUQkNkZXNpbGd6SFNqKyg9YnlndiR8bV9fTWxkczAiL1ZYJGlTWWM3XnI7NCJHWSxrezkxMX0xQTFbUS5AfStQdnBxVnlJfmpVYmFVczBVSiIhUEo1RWtDPTZ+ejV9PU0kVGpnRjs3OG4wQyIrdmN8WUoh''@;'; put 'put ''K1VMJVc3e2o/bilRNGZWKT94eDV9Xy9nLj9TRykxOyF1W0g4N0xhUlM6N01ue2c2QD9+bGJDZ303QzJodnt8NHtKeT8kJSRaS3EkfGNAckBbeiUlQlFIKSk9ZDhpSH1XdS5pWzQjMVtee2AkQEkhVjYjJEw4R1NRJD9FKWw2UWspL09KXjtSckRaaStoIzEkQHxCKF1jWnJYIitpOk41NWR2Y0FF''@;'; put 'put ''OkBjK2lMOTwwWmp+UCEjKG1gKz1ecixiUVR3ai8uUWVNT1YmfkBHNkl1cGJATDBMWGNkPmBQSlB6MHxMJiRSc3MjOHZUMCFham91TngkYElyU0BCY3xoWXNHTGNFVHZiNG5ZdnEvOXJ2byUkfWhQc0lNWCZQa1d9TWk5aUMheGpDWGpMYUlrXWV0WyJDTT4yeG5sK242fSF2QDk7dGJSN0leZ2A6''@;'; put 'put ''JjUzLyh9IWY1fkYoL2csXSpLeVhWJEsjalNYdHhRe08+KUFUMl0xfDRza1FCYkluTDtYInE3SGJ0b1h2eTFSVyRac0xZYSR2eiIqTy57L3xMO2QieSx+OHQkVyV8PSg7JUVWKHo6aD02N1dseW52QmBqNGlvQzw8fjMrNjAjUFo0YHdLdjV9L1dJWmoyei8oUFNJIl5Gdk5fVms+OFZuVCJHfGkr''@;'; put 'put ''LFNWP2ZtOk5ra09jLjR0LGBvJmkmPGdoKX5iMVdCRy8pVFFqMmZrLCkyImBnX0d0QjFFPG0qKzZmbEl5WX02dCFXbjJVYz88YWlNdGFiTjNvb180Zjdae29KISs5e3ZtbkZYdT9KZShSNCpxQjFAJj1oZyVyeUNEM0xtWHB1elk0KSMrd0p7fipeR3c3TElNW1FCaXJjPjEuZyE2fXc3K3soSzJC''@;'; put 'put ''aV4/d0dPKD8jLEsqSlM2Pl1xN09mOFlzPl02XktuMFskK1hCRUJXKXlEWV89a2ZMX3NVM3Z+TiR6bnd2NWs0M3NxeUB2Qm5pNiwmKEAvdUhXMiIrRT5YYm4zJV0jMWYpZkclezcybmlFUjsvW2N7VHdLVj5lTHkwSHoyRX5xSlEkbXIkTVYqQFFUbDZbdTpOX3R4fSFoR2pSIT0mS08heUMsejgq''@;'; put 'put ''eU1jUHZtb1NjaDosZnZmUl1QL0Q7MTJXbEx8RlpzZj9hSkM0c0BjUWhFUm1uKHJDMC5hQmFHUCZ5KlEuKFFVJitgXmJLVT9Ja2slJCVmempmXnFuKzxbIjU1TkJNNSZKbDlzTWo7WnoqZigrQ0dINlhwNHJSSkp1MFdBLDpPPEBWV2RiOFpjcSxOR2JTbTgqQ3JWdXhAUmRrTmlEYng9X3o8TT5F''@;'; put 'put ''LiloVyErT0NDWyR5NCZuKnBLWXNkfEphMEhHYFchOn1vZHhQVlpVfTU2IjE3IyoyLDNfTW9TUUIrWU4ycWU7XyVxQ1R0aDx+JnVJIUAje3hXTjx4fD0pQH5AeWddInxTK3NRYUlkOUQ3K1pKSzgubnl+fkxsZV8jSSM6IXZNUC57P09dTUxyV1ImcUVPanhyTHZDRFRQa00ufHAzey9Lbn1FZz9n''@;'; put 'put ''XjlRJCM5QHpvdX1jVV10RH19O3l7LDA1dEpjeT1vaDdZKTA7cEFlITsmXiMwblI3NH1KO2dqcyxVTl40XXR8Q3VwY1FtYFlTSjMlKTF3NC4+T31kfCFXTytgaH15MUNEUnZ8eiIpYFp0Li8zaFJgcDwwQ2osV1F+QjJBeUAqO2lRdT8qLGxrK2cpWks8ST5fKzRnTzElckdzdVFAQyErS1BqRGlV''@;'; put 'put ''U0FuR2o/VCJoVTtifFpESFBpMl05OihhZ3pkVCxVWiF8Nmk4bEAwSGRFQnFYK1hAd3VKVnVOZl5qeTs2PTppWGlZYy8vLDMpSUtPPntGS3R0R3FIMyhEZGUrelV0TDxzak8yQiM3ZztRKCg3LGxEW10jfWRQU05kYTt6PChVbSQ0LGAxNSp4V059SzU1Kl4uQz02KDZQdX0sdi9GU1Nid3Npbl9R''@;'; put 'put ''PmU1OjciTmosM0JDQExAOmFbXUB+QFBQL0RbdWVyfVd3aGBJazIyflYwcSI1NFpfIjclUl1yM0REaDBNLjsmdnNAdTxdU0J5IThzeVtSeUp1RTtoN1pJSUdpP2gsOV9nUVA8ajV0bTRlMlpwaioyVSpIL3BGYVR+a2EoYUshIUpDJC5WQkZxPSNsW3E/e3tyUy5tXmlkPHtqeXUlJn42fk1SelUy''@;'; put 'put ''dUAhPmd4ImphRnY+dU9QfFpaY054RE9IQCp+JlMhNUJxL3trMGUleUA1aEBgZ3ghKXoyJm8kL15NYCk1KGosI0wkVSFqPiheUHhHQ1k0bDx1KXI2Vk1ATjc5eF0/ZTB4TDdWLmo2cToldDxIS31XQztXNm9ANX1bdElZUVkjIWYpKi8kKTsvRmkrU2ozYktAdmwwViFqXTBCfltNMmA8S3dnUGp4''@;'; put 'put ''QEFfQGtUdV8pWnVUUVkhYnV3ZkJkLjpTYWpsflBGRTZPdT0kfSFwSmQvWTtSWkt2O3JzMmRINVIpQ3tLUTBgfTdqdCY/fC93WzkpXytwfFJ5WHNLaShJPTM4T2M5N2JeM0xaWVR0Wi9mX1tzbFczb0F7WkBPWFQzR1t7XmYjckVsPTNvIVdvb2BzO19MXy4qfkg6eHJ1OXpHbEltWjdfI1NjZzRR''@;'; put 'put ''MF8zcSNMPFt1RXNZcGdQXik+Pn5EeVI/UDppXz1FcnlpeVU9P25VQ1ZdcSJoa1Bea1R2Ino1dT5uNllqcGFOIlB6YHFoJUhCV1FDcl94NmA8TXlFQXA4aTAqMFF+O2hZZitAI2BMKWdqZ2M2LGduJDQ+Vig7WTgxRDoqI1BONjhZcW8seSV3WVE5MHdlKFRHX0MiTl45UkhCckxjPDNJVHhddThe''@;'; put 'put ''OkZMdUs5KiRPISg1elFkaWk+bHN0cWQsbWpqfWpdKXBQM3lUVnM4Mzksa3xaMCJXKC9wN057KT9dVGMyNCZsWFs9QjYrWWUhd2s0aTR8XzRDaUN1LklkUnNUdVAvXVVEXXE+KlsiaVdVfT17eTxJP2s3QW9SYm40diNtKzVlS3ZzKj98PVJ5NWo+eXdkNiFMXjhuQ3hBPFdgbWhQdWlMVFg8a3dM''@;'; put 'put ''ZjEoLlppVXF9MH5wVGllK2B6I2xSU1Neb1FbUVhaSXYrRnZAUSJwaCxmRixVZlkhR31HdyhRLjVQa1Jmc3IhVC5bKy9IJWwvPz1oKylbSzB4KlkoRjdxMjNzeigrMU0oeDgqLnhxTEVqNzNEfjpaLiE+OWVkQVAhayw8eSp7PUdyKE9qaGFMO3NdO3hucTEjMDYsNHdIVXJsaWR1cCtTT3Nvdygr''@;'; put 'put ''ckwhTixlcVZvTmZddTB9VW9lO0QsSmpMTjo1NWJvJXNuKnF8SUEzby5jaE1EUHVVXmsyeDhiQTBJaGBpXWdHWls6VXtzX3I2MkN3Zj82UHl8PV1UVWd1TEg6YU1uPWxHUz0lYGIkfVFDdWZGNVIkKHVxLFs2WSJQXk9uM1Ykc3g3VUViaUh0QUVme3hhMzJlSEgzZ0hAa2FjM0oqLCg2eXt8YkAh''@;'; put 'put ''Pk5TKWtxKT9FJUx5RDJaZj8pRyNGUS4mSmNdQkwrcFMyfmxzamlaNF9QWH1AfjpSST9ye3Bnci9KVFQ0R3kkSVZKPFIxOW9BKT9CYjhYcTNzZzVIcVRPYWVUYER0UUBPOl9RVyNEUD8lek1GMXMpYGN3NE9oKCx9RHRgcVJBVT1idlZ+M1VVNDxHaS5AXjZROCJkdlhTJVA3V2VUXV8xbktSIlhW''@;'; put 'put ''cCtyIVtefStSJTZsR2skV1M/STJ8bU06XU9ySFo9TCtaV3lkI3g+aCp0RWtzSU8vPjxWYD5Db2BXWVdsXVRNJkomcXtjRVNAP1YwaHRSdCtGVXFgTiN9NjV6OnYyWzJRZWdsIlEwPiVRfFZpPUA4cVhhMUM6dklJfT1Vfn13WWRWVWZHYWw7My5HNGBMPFN5VjVeJCpPcVNfdDw4eEAlKX5AOkVW''@;'; put 'put ''SCVSdTFlVklrK3h7VEdDN0U2XlpIVWFZPUNYbHdJN3w7MVl8OyJXXiVsIkJFRn5iI3B4Izh4Oz1wUDxXRGxBTjRZKywuZks9WH4wPlpTSVskL0xaTmh4e0A7a19NMGhdZSx0W1hgaSM/blpOS2p3TTgjOnVONExbUC5HNyk4T1ghKXcsSHciOXs7YVNeQSo6YEJdZ2VSci9PRV5NLk58UkR8KSVK''@;'; put 'put ''NGVYe0M9KjJoeDM0UUZRYEVVX1YmTXhpaClTN096Tj5iTXNXT2pxWWU8WkJMdGIyYV1TYjVyR0p2d3laT0dQXTcmUTh+WVQkbD0re34rYi5XJlplSSY9ey8hNHxXTzYzTzNyNjZpKXJpNkxaNHE3ZCZ9WVlUejt0XyIwXyZASlQ2TGhyVTVCS1pBTkltWmZJP1ZpUzVrNiVSL3ZJMSUzalpEODdW''@;'; put 'put ''YGtDTjk/X1JmWTlhMiV9aCwjTztXZzVSZUJqTGFxQzRRez98VlhMJV9keDVvX1ZHTXxHR3UjLzVKYlFKL25NKXYhbnQzPEIubSF4LHwhQmVEWnYqNEQzPHVmKXl5L3EyRSZub3koclpVcWFKWlRJVVpwTmN8aCEsXyFiKDQzXkRsO1gyeVBXXmdqcm9PNkssKyRnZytkVmYlI0VzbFhfaD87c0Rd''@;'; put 'put ''bV5yLGlDTlM0UiUmbCFNRSYlfns5ZEF3bnZRYi4qTkQzaGJYNzxWS2NsZFNlQztkUiwiX0JVZjt8YyQ1cE5VYkBHSGBqeltlPDJuMF0uKEh4VkFMO3kyW1teSC9fQWFaTz9Jc190VzVDd2tzQmcyPSwoQSFPXjpMO0IueUg8MEA6aWgqY18uQ3QlIVNXeG5gdWNdTChTQ1dRWj5hOSFDJD90K1dv''@;'; put 'put ''bWlOUj49X2hmSXQ7JVE6N2Rrd0QqNj9PRD1ZT2FqPnsiKEhfWG0ySFlHdTZPeDJBPShkb2tiYlFJWW5+bFZxN2UxN0d1bVBbLHd0aHlVYSJpZlRlJVVdKX1rWEZ+WXBHQ05RbGB1UkBXY0NOdj8jaUNOTjQiZ3FURlg8empDRHRxKC5BVGpCIU16d08jWHh5aFBjIi5lNVBDUH1zMnoxdU9lZlNC''@;'; put 'put ''bllGRCYvKypSSTVZYXFSSyJBY0M6cGl5VzEpR1k2Lj0sR1g5UmppREB0XVZXVSxaUXghTS9FcVQsMUkhXi98eClZKlFlfTZ2XyY0OHFmYkl6JC5jYm41WGJpU0NIXlBeVl1EUj5nZkxKVXU0MjBkM2EpVEU+RzwyeF5DIm9YfT9RcSpkNXM7RElRNENbPzgjXWE9Ik9gSyV8JixhO3wxZH1vK2RU''@;'; put 'put ''QEtYKT1oOiQxcTI3Qm13W0xYRjtQJTkrLj5IMXglUV5FKyE1UnpLcXtHNnlMMVViaFBaZnhgOXg4S00/YTk9TmoyOD9QNjQ+ZWJKT05qZ1lyL3JRPzYoOCMySjoiXTl3fkBfc09udCxnT2R7ZCJXPiwze01EQEJZOCsucSJHYShycUJqWUhLO31uNXomLzQ6aFQ8WWRCQmFNYyVFLGRSYkIpby8w''@;'; put 'put ''R0svVno5djl2TmwlKzM+dTNPemNiaWhuYTNzYjJufGZFezkmUDlyNWFQLDhfN3lZSiliZzNZW1dwdWhDaFtubz5ndFY+Tyg7Yy5CYD9pRj5aJCF5OD9ZMSZhPyR3YDUuITp6UyFhPkg2cGN+TUo6XTdlUWE8T2JNWn4pXkheMThyJCIlSlUmemBHMFFyMko1WXZmaDMlakQ+Xl1hU2wjI3xDO1Bi''@;'; put 'put ''Mm8mdj5GdFJpI0hXZHZCIjwjOGZvaVB0UHpgPzU4T2VPfXBSbGUsQSlzS0tyTHpyKCVXLi4qdCs6US5rSWk5Wm5DQiFsMGh2cCVdKnxgZzQ8ITEqP3FNYF5oNlgwezh8cVVUO2lse0RLd1N5fUJyOHR3XVMqPXZRKlJHUUdPZCtWOEgxWn1dV0g7SGd2RCNIPGFAL0gleExqT0Q0NyY2byk5TGMq''@;'; put 'put ''Ij1KQzFKYU50SVI6XmRgTk9lOktua1dxblVFVEw1am4ub0xxWjtYOk8vOTkjSS5EfmMiYG18ZjVUekNsZzEuQStSdHl5dHFTJiozaExRQ3skazRbQ31VdFNCdUBHc2lBYilEKTA5bFhZR1tONCNVbCNIZlR1ZFtNUSRuSH1YejVsOVkwKyE7O1UkcztNYkJHZSRVNn5GU3VrP0oyOSEjWyx4O2gi''@;'; put 'put ''YFI/L2ZSTW4rUkh5aShxZis3dng0UWpWT3pqPUxNfkJTOl1lOWZYSmEyWVp+Kz0qa01mYkBWSXt5RGd3Lkx2L1o0RVRKZnt4RHtXNHZAWHJERmFrXUB8S1RWeyhaPEk6TT4xWEteKlthYSElKStFIVB2cnZMMUEkJF1XI1NUbTBnUW0iVyJsOWpfOlVTfH1eP2AhKVpWMzJhSXE+YmZ3el1fNVVn''@;'; put 'put ''ZyFnIy9yPWB7Jk4xWHdva3pdKnYucU5LMSEoVEFrSUNaXmcxMXE4PCVnInBsPX07UC5dUEspW0lJOV0zeCFBQ1VdbWY/JGVKKipTS1ZHUyh7T08mVT1iXUB9WlQ8Zj1ZeEVAeC84LzdgTXwxTyRVWjokcSZAYmlGTF59aipLZ3xTe2RWQXo4ZkdOfU01QlJlbWpDaFgjNyRCQ1prfDlRLk9nYCRB''@;'; put 'put ''KkAuIWxKN2V1cytWM2F2PCgvQENlIyRLQl0lQnFLIzImeVojWmZHQXczYnslMkRreX1QSE54dSZwKkpNZzckQWUoT3NHVTE4VEtGaHBeKGtVOndsY1lUZyNAM0t9c30hMXxgLHx2UWwoJippLnpfUzJndlUiM1slaEksOT1jYFdjfXFDKlBfTnNVO1BAd3FhVW1sTHN2XiYlPV4wTComT2loSSRX''@;'; put 'put ''eVg8YCNDW2RGfjJrNz5VZUNuMU0pVj0hLi9aMHMsN1FGQTZ6eilAOlttPlRHXkFkR20rRWVwZFsoeGxCKzcvd1FLajpdTn0mZCx+RVpsc3xxYy9WWUEzTGpEUFA3bWdJdy5SZEVLdXE9ck86T3haYjJpQkldJTk5N3d0OjAuNGZaYEV2L2tQX2xMdjBgPDBfMUthPS9vY2xkKl5Mck9xMyxrMnsj''@;'; put 'put ''PVtdZUxFM3A7cUk6Mj9eNDg9dylrPTh6X31SYz5bd29LSn1WKWtDVC80STs8OFJJUm02SHN1NGc9WWppRHFZZ0lEI1NYMjpmSlpMY2FDb2Vze0NBaUdsL11SbSZTa3AiTHxbQWwyNjZRaGIhPF1rb3pHPy5IN0J2byw6ciQyblNbSk41XWZFOkQhakM8Y3VkeEJGamNOUXJ8WiFgcyFOfEBhN3o5''@;'; put 'put ''KS80emc3dT9Tc0VZXWkzIk15K2g2MCk+KUpfIXpleFZuZD9ZeFFTeXEkU3UrPV5dWFJQZSRrLE92aXlzPT1ZL1U6X1ZvalAuTi4rXl1VOkchYiElMXNpfHBBVHZSI305Jik0fl1FMTlSK2hXUz5mZ0kkLDk1O3V+VUh5eEJPMWgoWjU7M002VyZfayl1Rmk4a0VPWkpuSzJzUDNlL19jciRhUCRZ''@;'; put 'put ''eDJ6VzNpNW4jampgclF7JDJ0akF+YEk3NUpxPDNuN1dvcjZZdlZlLGJjYVJ8OlRdNkl6PHglRTR8TTJrc2M3fnJRVEg5IV9PRTI8LmRIJldSeDs+d18wfkwqVT4rTzopfWFXLlFJOXc/OndsZWc8WFFNZEJTcFhoUFlDazJzTHtrbzA0byhvcV8uLltQbVpMYSU8ND9sIzRAMExsXWQpVHxxZ0Re''@;'; put 'put ''ZSkrREM9T0h0bGNrflFXPHJNYzppd3hSU2I+fHJnPTY5QmhZQDxdYXptYEI+eDBnSStaWldHYVBLJExsM1dGJj9jbEEvVCR1LFMxdCpzRD1bPzdFL1cuXX5CVltbMlJRRyV0NkJ6fENOMTFbP1pkXkd6XmIkQ3dwJUdPeHo0O3R5ZSRzbVlDflBvSmkjR1JuImtYUFZUalR6cD1TaVMpUStFSnMj''@;'; put 'put ''TSIxKVtUZFJ1JGckMlYrZHFAcm9lNSNfJml6MSUzUEp6Uzl4fnNyR2wjPz06KFpYTzR0Q2NBRStmMkJsNUhsbmQuPHEjbDlxeStQK2M5WD1rdzF0Nil8bFFCWm9CZl8yJjd0aytLJls7YGpJMklaTnBXR0UyWWJtcGpYSk4wXl5bTVV3WkhDMU9SRXVIN11meCUlNyx7SEthS01IMG5HJlcqUzBK''@;'; put 'put ''ek91eD4qWDRATyVKXStDfSRSd2twPmwzNEV1U0hQckhIVHZfb21kUXhxPzlnU2RYM35LNS5vI1g5cmMoRlNmbmhOTyhKUD1vYEhFOHlSb2peJHM/dHJ7dVN3az9QSVFuKTYwPU87UyhCUUEke1tQbjxnS3E5bUopLzxJLDFjXjI3QmxmXiVkUzo+b0M0Zm5ySXxjfk1aVGRgYSxnLkl7clc2czVI''@;'; put 'put ''c1NiQW90OzY8cDdxKlQkNmNqTz5NPCJsOE5TSCpWc1RgVV1rN19tcWNXUSxPO30sJjdQY1JKK2YwQDk+TWN0dGxRZyVqdyg8JHlBJls2dndSRCkjcW40NXhuczxSaFtVVks8THNrcXJ1ajZoUyo4UWBzLz1ZZTsiZUxxQ3UrQ1QhNGYlb0xyKCYvK2w7SGJfdlleem1ia0UxOiheSUBeaiNQciFP''@;'; put 'put ''KT9qK1Y3QEA/YDx7N0t2ZSN7KE5Zbm8sPm8pLERQKExKWmAhY3p9XUluVSpeTE9+Um19VUI1ZGFZXkBuQH4hbFtEY3JEVGVbJW1sdGE+aFEkdmczIWVLOmd9ZnI+WXxtW2hNRm99VEVoTWl0LiVoQlJUPUw1KWpiejwrdUohflE9dipncFF3a0pdeG0oQklXKnQoIStvc2ByNF4kMyNhfl1jRj1V''@;'; put 'put ''KWVMLF5vbHBddURDej5kUGZvVHliQEApWFEuUVFjTCwvSmFPbSImJChTd0VvaysleH1aOEg2NSRgUToiJX5KVHpuNWxncWZLP0hwNDlddzs7NykmY2s4Wm09cHFgMDEqeUhaOygmaDpZZmtCbnYxanFdLn1PSmRjLGsub2U6W1ojb2RUMnYra0Z+LixKMV47TypPPT9ObjJRbXtXKV9zb193Jnc+''@;'; put 'put ''a0JaNCZKUU1sdCw7NkRCInZCMVk5Oixvb3IpQE1aRlk4YWUlY2x6LEVwMDFiZEE+c2Mwc0tbL3V3U3RrVkFKSSldKCl1RVFYOUtZOHtRRk0hNzd6bypBbnwleDZlMkt5JndJYDJmJHFhYWFdbEJWMVUuIT18MUpnMndFOTlzWVV3TSw+c0pUKD4jd187IUFkOVB2Qi5xNi4/NSxHZVBvMHBfOlc3''@;'; put 'put ''OUwyZDI2RVEmaCU7JTpHV2FALjpHLiVne0BTWz4+NV93dFFwN0R8bS5lLmFdLn5NZDMsP0d8ejFPJEk/QDZVWERAOjszQU9ZOlA3MVt6OSFrZWdDVkAhKXpVcD1LfF5HPH5Cc2pAYTAya3J6P3hHe2lyPXt5Zk1wSFUzWlByL2YkNSM2Qy56JUd+WUIpK11UcGMrakNkblZqQy5VXiIhOHxjZGkv''@;'; put 'put ''I11eSGg8fks0YnRUUV4uQEdZKTQmaE5aRzV5WFVCMnpwaGNKeUkuMHQrfCs9Xmh8W1A3Z000TFpZbzZJcjckZl8ldmx3O3VhKiVeXn5FUkQ2SXMmU1gzaX1RaDByXyk5SFRETmtga0Mpd2x7UFRYdSU0JX59MnFkakU/WCVrVTFYZmBiZXpgWmZSc0godzM2aUUxYnFGKy5BZnleT0crMlQmSzxr''@;'; put 'put ''MzlZQmJXQWw+eF9vUnc/Sno/fUxUdXg3I2oyRm1oSVZTfUxXUHkuJmAxM0h3R3FJdXhCUiowdThrVmRgbWVrazUmSyRwRUlycHQ7SzpjOj5rVitdK2tsPUNTYkZiXXhvTztlIkwyZ0M4cSsoKH1POkRqfDJOQSYoZFdLXU5kcn5XaSxmWCJKWGJ1UVUueTE8Ly8sWWlHNVRQLncqY2FLcU5dVX5Q''@;'; put 'put ''ZypKbDdnP1N3Y3xiQUxmWDpeRlUpYEpqTW9FKjMrcGxgNGFXdGwvUkxeQHR6R1k9YTdvdCs5I3k4UTxGYE4ocD9KKSslUXUuUDooSThxVWt3VX5PVXRocl5hUmFjMTlsYzI8ZiM/eGd9PjNAPHEufDU6VltwYGpILDJ7OWQpfSNHIUZRPnI0SFZVfTEwS2hZPEB7dk9AMSo5Tn58S3ImRW81OnxD''@;'; put 'put ''bE9XI0NYcmB2LHVzV11MXkJOSiR9LlJzNjU3VFZ1Q1I7MTBkWVdAI1JjTD8pIVBRSDY3di82PWpDLkYkcThvOXhFTWY7cnRSW31GeG0qTERGcUBIWzclcFM4Ii86S3YwIl5PWF9lSF1GMC5tIm9QKkg9cFcjSkFiQldHa0xHcG4lWjV4aTQuXWxLd3VUISJqSU03MEszbUBtJCksbTQpLklbYUNX''@;'; put 'put ''W0cmcltzYV15X0FvanpHT0g2Vj5hRTlzIkwmaUFYfl12ckEiQ18xezswOSRIMlRtcFJCbWtbIUl5MmJCQTEvQm89SWJNXTdvTkUhV199YDcxdWR0fSR7Ql5ZJkRfb3dOU1oreik3IVl7XWwqO3YwSlEyMC8udUJSPmpQMiJPP3RIS11tKjlaP3dPeVBEdStrcnMsfGtnImhFXntQWkI8Kj83WEt4''@;'; put 'put ''K2hSbXpGXTd7OnRrLHFMS3VqRCtFZzxaeFU7IWduc1JJUV5PNlBbVEdOeEpjYDhrPkZ6LCpZIj5CKnB4Kk4mJDJPYUU/YVokP25Oei40Nll8ai5ISVRqTTtVQCN4Xyx0TUM9MW4vPDlGPFZwSXEwZWc+JlE/XzptaDhWcDZ4aD1uaU0pNDxrMWVTMXFzUjlibSJQcGlySn1sYz82fntIeHozX2xh''@;'; put 'put ''R2p4flB9QndlKl9nWXo1Jlc/PV07K3h6dkoqbWh5QW9RKmBhKitxTz9TYFI/MiRXVUI8MEBRaFtNVlo4N0wuXTxEUTJJdTY6diElR1R0Ijd6VjV9U2hdfShPLDpoZ2dBU14oLy51dFgrNV5qZT4wQ2B4MEopaiNDXjdLbSRuN21mN3dbZE9OeyFTQVlrJmh1cVI0WWJgX3RNeC5dPUNFVXJiVjdA''@;'; put 'put ''QDomP1ZFKW5uWTYmKnNrKWNreW9zeGMhfFpaW1I6NztlXWF8dmNVJS5QLz99akNpclZDZzU6TCNuZ0crX1pTfU0+YWdVJndqNV9DXXVXMzAkN1hvIV9UVTk2N0gpWDg7e0NkWWA4NDB6bX4xfEZKI11wZzoxTDB5NzE+RjJidGp2dlJRLzttNEp5UClkKmlWV2hyMCZlI0R9Tnphfk9qPWBAZ3hj''@;'; put 'put ''M0xKZWlOeGJbME0/eztae3EpSnhtM31gQWZ8UmYuJXo4WFlQRl42XjxNIXlGSFZWKnczKk0+ZFolY1h4entEQ2UlUktSdmdrYTRsKlFHU1hlK3FpWmEoKC5DL2xecEo6cHR6Tmw6PGlEY2BbYjJOQmJjOFhpTyN5Rjc8d2NYay5tTW0hekl9STRnbyszMDR4ZTdZbCNHRytFPEgiMkY7TGBmM1pd''@;'; put 'put ''emAzJFFLMFJiMGduMSJFRk1DX1dEcCVMaW5DdUBbclEzeSlUQ3RnfVZ6Myk2PjFVRmExaEQ3eTlmQXA5bHJNeWxgI25Fbiw8WmZLJGNESFJWL3tLYilHT2pzWG9CWU9eUThrKGsjXkhlSTV6LjtJVGNhdStofXtSLn1XPWxKWnddQW8lWHZDSnRhV3cjTTZhWERlaWVbPlNZMT9aNTFzU1gjLHFP''@;'; put 'put ''Q3pNSCJhdnpIKjFEMnBSSntOVGBEbmI2LG1NLyJTRnV7XyYrKGhQdklHczlMKyJ0NGE8N0t0Qkt4cE1NdTB9dW83OmpZRU8sT0tKKzFEX1JlOyVMekw2VWxrNm1iP1FaMzMldzJ5cmU8PjAjazord1lOWm8qOUFLNGRTYih1LmFTSkJkS0wpVG9zKElgWHlHbWBEbi5eel09Nj8+On55ZGJGQHF+''@;'; put 'put ''R1tgUyxiIntzSmJJeSYmcnNaYEV3ZyZVaWFOZj16PzRkV0pCQExdbUdgZVdCeSJtOiRBRW5lVjcmPXhEQkUiaHFEKjFuTkFtdHJHUlZbaW43OlF8OjhySCxfblliR19jR2VYKGAkSnpkXUk3PDYvO0RFYjdYMndrNCxXeGRjN1tYckQweEAwPTxOIWE8TylfbjZKVEUxa0tHMEx7KVFQaW1eV0Ri''@;'; put 'put ''M0BjODBsPy5WW0FnazowRT9Gfl15SWw8fmBrMn50LDNgWEw6SnNFNmNdYDVoUHlZS01oano6eWEqfHsqT0V4Q1ZtNldscCNIcW9sb1p4ZzNAL29RR0BuN2liVXJdUllibCJpZX5tLEA9VSI8O317QiZpSEkxXjVYUF8mPilMQDBTfjEkOEs0IUY2SmhlLF9SIypZVDZ2WykrX18peUZHXkB9K3Il''@;'; put 'put ''QldqLF19IzlOdDQ4IyRAMXpqJDQ5RUxCUVpjWjpCUi59NXs9RERpZChofTVkUjtpIlcpbz1mSzJXaV1wUkBoYzdRald7RGFbSDxZSGg1USxkR0lkVD4yRDFfRC4pT0E/UEM1R3JqUyZlVWR3bXxhc1tAPkYuKV1DRXR4JVo6JDNBdnYwVWFdUWIpWktsUWJgflg2eDVxISo5Rjl7Nk02KFNefH5t''@;'; put 'put ''Tzs8Olg9dCQ1dWBAWD10JH45ZCQyIVtoNW1UNUp0cjZZQnw9WCUzOjZeWD17MVs8eXdCOFlQQSwvcDVtam1JcHpsTFFEVzJOc3RAZFNRfj5yMDFKeVAzOjlbO0ZAQzF1PVpIan1ZXz4ybUh2ZkVRQVc7OVs8QnlJYDoxT3J8eCJSKEpPUExGd0ppYX0zRUo0NFBdKTheMTI8fWtycShsVFBRN153''@;'; put 'put ''MTN+Ym43PEdAbz0jfTVsU0xfS1ojKSxmJGl8KXBXKDhyRi8lIyZuJF92dz5zcm5GL302OW0kXyUiZyhvbkYvSE44NWx9KSoofmJUT3FxLnhLbmN3Sj85Vl9SImd8QVtQTDdKPDJ8XVE9IX0hWDY+QlRnXy9WODUjX3JFc3N1IXMoM357Kl1zfGllZ0I9T1RpfFBrIX5RITJ5dSlgITlxYkg6diR9''@;'; put 'put ''KDhwKFtfL0M+fSlMRig4fWF7X19fZGx5ZHQzT0YvMENSV1VDfG95ZDA4JFFCUkMjUHZAe3x9JExWM3A9dihsZUtEJEIkRzRePGFLJWNaNkt2dVBLeEROMjV4M0guSjE8NVlRMzF+fUI+P2VTVVhQV2pAcl0uKH5XPyFscSg8cnRtRWR8YE1MeT5sJjN6QXtLcndPKXtUa2lUY0YvPTFmJStHX2t+''@;'; put 'put ''MDNwUkR3RTd9ZE00X0tyUmc+SGF4VzJwSGoqTzRuRFlMaE1HSHZkInZnKDBacUo0bi5Vb1FNPCx7d0p8X0duO0I5fStLPD8jUVdjQURITCN5Vy5PNFlweCs2Pyt1Wzo0aGdfdmlmWVNBNm10MFhzcHZdTGwjeEROMnZZeWhJVVRUbS9BeVhzX3VnVDkjU2NGLzBZIkhHUTJCMUUyZC54QEkkUVt0''@;'; put 'put ''ZTRJNE94Ul58a2IiY1RnbWdZKXU5TVQ/d2AkSTxCSXI8UD5LQFkxZC5eeipPT0NPIm8jc1N6KzgwQ2ldWypAWDxWc0VId0dIQkgmRiNzI2M6eUk2YUNOYDd9dkZhQkBuZyJHSEJIXkMjc1JHYFNoK2daPnF+THdtIUE9KEBRR1hUP0d6Y18xNXtlYz9JYSgjVis4aTArYUNjczgraDU7KiJkJj80''@;'; put 'put ''ZVFtcHlBWVNodj9+aEgpTkRSdUkhVU59PCFHXnVlc05EPD90XktvfEBvdzxgdztGS0xZbz18V1BXSSpAdCEoTXZjUl5kRSNvW3RaLlkmPSE+Ryo8IkdMak5BKGhbbUIyUlVIdHVlc0pEPT91VCldbktqcmFETTcreC9hb09yRyo0STRaWHJ8VnlwOnUmJU5jVTF7MTR2RD5WYUFENzhQJX1MK2Mz''@;'; put 'put ''VlRuaCZJIilbVSZYZ3kySlR8Vk1veDkiPmF4Lk5tLjx5NUBWSSV2VEBjcnl6NntXZ21sP0M4Qkx1TS4wVHxoSnQ3TltRXVIqUiZmPnM0STR3P3F8Vnlpb3F4bXhRdWldXy5SST5QMjAjWVpJZ018MXVvbXZlZ0loakMsdVkqdGlnX3ViSDZwIVlpX0VeNEhRY1JCbExmcFhQV09acnwxeVRUNGpR''@;'; put 'put ''QF09VWZUeXtYcHFZRyY0STQlYCh9YVpNdkd4eWdOSkkuaD9SeFEveiJST3hbJiVnKG03bEA6ezl0ME5pPyw3W3BQOnYvTnRRa0pfbCQpWWg2P3lpY0YvWkdHfXtleEw7WXc0NXMzVTkpLkpJSCxgcXNCQFVDWy94d19fUHMjSyoxcVhBIW1lSGRJPyprOS8oSitoIXIkR05PRDcwTFtnSUJ4Nztm''@;'; put 'put ''N1NkLzAybyEudzgxeERZbDVhbzc+Viw0dytFPHlvW3FOd0lIdzpxc2coSFUmeChafiI3Zj9rS3cwS1dZY2NFYz8lZyg7STtVKTQ7dWBMUSRjSDV6KUZBdmVzJndyfGF6SCFETltkW2NsRCp1N0Y6TGFjRWNaRCNzXmN2KTBje3QiXlt0UF5fbnBCNjJ7dWVzc11xfGM9fERNdG5OSVhhJjMja05o''@;'; put 'put ''cTlsd29BYDMkeEcmeUtVekRNR31eaChVJUA+RiohPk1kSXQhcjRfWGgyZj5pcUdFVFs5N29TKmw+bCxuSEJQPkVDR0J1LGVMbmlkU2liazQqSTFHQzhOT2MiKzVKKzwvKH1wR0EyZi56ZyhKVUtCbjYsenJWQzQrbFZOfioxZFNpU1BXUiEkcjdFakV0Iz9WeD06VGkpdm9DdHBIZFMqSTFFJEY8''@;'; put 'put ''YmE0Rz0yI0UyZkdaTVclTVlZbmNlU1pNbXBBdV0qWCx7cWFOVE1wOz9USzR7MUglTDx7SUc2Q3QiNV0rIT4oYnlYXl95QndaRDFdK2opUUNLezRkU2l0T1dSOWpGfm0wIVh7e1lNNnR7elo3PUUiXUc2OTRoUFg2akpUb0g6MStKZGlaNjY7Rmlacyk4Y1VDYWJkLDtSRns+MmJZKEhHPHtaXSl0''@;'; put 'put ''cj1wRnRUIjc7MlJUZixMMExfKSE+MWxjfCVOP0I9R04qKVJqJjQpVWE6fXE4TGlJTFspXzZnKSUxQVFpY0B4WFIzUGxaTE0uRGdqandoK2RFcWFSbDN8OzZFRWtpI0cjL1p0JHBRNWspaFhwVFFxIm5YbyJVQD9VWGs6Uj0pWmVPfnZ5R3psXSZtaU5ON1hySk4pdVduTE9PPU4zfCI5MVM+aDh3''@;'; put 'put ''bCFJJVswbnZhQXxERV40TTkqRF9hfX5MfHo0KHUqMVNeJnIqW2A6QmljJC5ETSl9dTl3eWxqXWhgRHJJZzFtc2pRUz9XdUN0S3BdKyE+ZCZreCNEeU99NV9JdXNjYyhmOFkvJDIkXzJleTNPd093SkBvTG9UUEshTnk3VChlITo6K2xIYFRsRWdsdXtbaSlYc2doJFZaTjcySSRPdWI1dTk1Oj48''@;'; put 'put ''eURsI295PyVnNzRoZntvQmQ/ZnBYKlVIXXsoKjt8cj9KW3lVVTRqYHFXdTd5NGR1aXNWQTg4YjIvNXE+JGY3e2V3TDw/e2JLZ1hXRGVCZyY2SDE0cUNrQCtHeHs9Nm4id0VBTyxIenErWkJfYyxNKFg4WUVmZjt7RkJBP3oxQ2BgezYidXZwRTpgdTxdbloqM3heN2JsUnJWclReaGBKVk5gWnNB''@;'; put 'put ''THEpIlRkOXx+WFpESDxYci40c0VBQEBJM0lxMnd3QENFXn41KUJqbXNGbCE+I1Z2VlZlJnNGIWkwKiUoYkVWWHVsQU8+Yk9Lanl9OVhSOVQkI0ReKEYpLz1oNjFnO0MoPjdaT291dnBAXS45fFd1fD1Fci95Ii44UU8pRWhpQHg/RnZSPHg7M0lOe2JLM1ZCc2dyYmV0a2wyQG0rdWFAS24qZXk9''@;'; put 'put ''P3dJW1NbMW9JWUFkWTsxTDwhXUJmN0RFXjc7JTojOShibTJ4N2l1fStgMkspLC5gRl10KiFCUUlQd3gvcnpQTWQySzBHQ2daOWpSZE5mY1R2RVl8ZHxrTFR2RCVPWSghPiw6flBmRzNifV5Gdl5JTFNfQTtoYzZCTy8xRWw/bi4wZ01URigoOUV7V24jVkI2aVFoQFdXV117P2V+WldTYilwJF0p''@;'; put 'put ''MTNONl8zI21WcyN2WWVMMGBtQiV8WE10YD8ldF17ZTU5I0c1R0dubT5HfXljVWtRUV5VSlNPaTRTYXwodFltWkVacj9dblB+dWEleTl4T3R2cF4vS2ZzSHV0UnpkdTJOOm5ZalBvKWc/eDltb14rODRrNUpdNFtgdmJKeGA/OldgRnopPUk4RTV8P0I5QD4mfndtQUxLZTVXVEp6PDdHKXN8Mnwh''@;'; put 'put ''RGNFYlY4TVNpIUw4VEx1Nnklc0hbc1QlfnlGaHRIQjA0ajNPXmp+ejU3SGZ0YFRpWllaVSxsdXJYOG5oWCpVUHdyfFZ5czBPU2tgMWZWY0tCRzwhTl0qbTRqMztNKX1LWlNAWEY2QEQxMXF3bSRMeUouNDJoc1huYkoqRm05USNjcmopOzhZLEd9Y0JTVHZefnJgTzRmfFR4d3pAOTx0d2hOTzsp''@;'; put 'put ''d2g3JnJwLDsrRFd9KV0rOVpoS1BbXXs/IXV+O0daez9afFY2WCkhfnNwO0A1Q1l9RzdWcSliK2Z6RnFgZE96RkZfNTQ9fjNhMS9aQ0pgSC4hKG4xcTRpbmlJXnxvTltwRmJkUl9CYHpod25oSHloNnBfLlY+fnZ5YGVsOEJeZ00iX2YwRS86I0c4X30qYGIub2FGTlt8fm1JOTJBcEZZJFJ2Ii80''@;'; put 'put ''T3x9Sm5UWyZSTWN8VlZDSjg7IS4oVFV+fD1OPHo3e1dFQ09QSm9WLHR8PUV1NX0uMypvK1AlM0YpY3MhbTpDfCNsMFY3fS5YIV06ZyEsfWVCRDRQSWQ8aSEsfWdbfDN+NjFeUzxrfmQ9fi4iY3FgO1QsfTFARzQmeCZfeHQ1KG1iXktqJTJNY3B8PXhLdH1iXmxWMzw6c1EzQHEoWTxwfD0vJm1f''@;'; put 'put ''VSNUV1AkU0xKMFJgXUdILmtEcmU3NlkoekxqVTttTmsrNUBWQnVJbUk5VEIsYmpeZjg+Y3dIZkdqXzwwMy5KYnhmaFolaGhDcCZGNHQkY2FKL3xAPy5qU207MT8xT2B0YzE4cERIcmVacTZoTWh1K1JXSFFLJFVGNF1GZXlrUWxpVnpfWVdGQnR9UGUlMXw3SlJvKD1DaVVwVytqMmpsc1RsdVsl''@;'; put 'put ''KWgqbmRtQF0zTFdVaGJJYDY6K2xPcFB9LmtjcDh3IV4zaE12a1pAX1ZkKzg+WWExV1h3dWtYXUBmMmA/QGhbWF8oYnk8Q35GR2h8YCopbUk5V0FFRVE8bE4jZz95TmMkZjt9QmpBLzc2PmhQbDN9QllIL1R9djI2L3FAeUh6Wy93Y2slZjt9YiN1PDllfDp8N2tqaV9rPGJrTTU4ITF6RmNtVHAm''@;'; put 'put ''eEVeOTUwcH4rVnVbZFV2VGRhJnMzbll6ZzlERnhkYCllKEdZK29XZzBXIW96fjlgfi4qaXAkUTNdfjxXKmAqVjlSMy5vV3FnTUF9clAxM2Q2aks3b1Z2KC82L1l5PDJ0I2hnVmRtP1d8PSZFd3NHb3RrPSRrVihFd3MxY3okfiZhelc4Ijc7OSZUNWZSM0gjdj9BNCJ2UiRNZHZdeUhSIkQqcFVw''@;'; put 'put ''PzY3PyFfREFTQkhaNHN+L3tEJGBSI3M2aGlVNWA7LGBSUlc7P2ZEVFdeODo3NVUmYFJ5RHNORC5qZ3BuW0xNM31jQVk9Ll08LlZldHxwSi8yO1UmYDxofW85Z019Ml1fZ0I4Pz54S1d9YW1TN3oybnRaXVp8WmdHaXhlPyJTfEp8JmBObSk4bnQ4NVAsRlc/WSFkN2VHL09NaDxYUHFXbEV1W1hV''@;'; put 'put ''eV41SHQoNiRhdiZUb1tkfDlXU2Z0bGVWM0xabWcsWyV9M3ZadDBxfDcoQCsrPjEreDpMfFE7Wkx8T0ppal9+MTMuSHghIWl1JmhDI1Y+LyxQZ1Mpels9Oj8uKHpBMmZAUWQifTptYHRwSmQ/NiN2UkIvWSwoI0skaH5OWHszZ3BRbWVJbHxDRFA0cEt5XmVJbHx3bEYvXz0jMytMZldqSGBAOUNO''@;'; put 'put ''eFc4SSM9OTpiaiUmfWEuRSIlc2JOdFt+X3heMG0+fU42eFtNWCpxODImfnB0WT9yV1JDJWRrKmM4KFVoWyUyXWF4ZikmWSNvQCtwZkVPfTMkYk9FOk81VWgxRXJlKTVUNE83NWZwU2Eudlpec0cxKW9HdVslRXo6c3A/c2tWJWtWd1ptKGgvY15mOFksczBhcFJxbStia2dwUl4zOj45MGB6JFZ5''@;'; put 'put ''LHtjXWlfdS8/Ll89eyYxJTtjZzx7M0U1WUdwKVF3KFVrV3NaL1h9dWZHdnc3YkdkaVUiQFsxSnVnc08yUnd3LipeXyZtdWZfJll5Ti9ITGJjJlVKU0l+VGNfWzc/XXEuRERvKyJ6TklWVDchKmVEKnp8KWY+WX1AM0V2KGY0N30hQE1eeEFLVnJQQS9MSTApMG5FaGlWa21iITsse0s5WC91Tngu''@;'; put 'put ''fCFALDpEeTpFS1lvaS5rZmVJYkgmfXVXdFBLUzwucjIrZ35uR18meE9HbSlvTmhXLGR4ak1HPD0vaVBsPDdFOlUmV1FHckBeSlJCQXNNZH5EUjc3RHVad2klR3A4aTtQZ0FtQnZRaXozS1dLUmVySTBhbmtsTkJ3PzJVRnp3W1pDLllsXkhROj8zezUvIX0sXjtZa3pXQ1ooOlpkdzVqWEREenhr''@;'; put 'put ''YFB8RFl8dmE9bj8rLE9VVTFzcmpmUUFjMD5VbTxsQTZle2Zqdnc3amtDTVtFMWNTM2trSWxUcHdPIX1rX11WbnZVWHhvNG1IMExHejokXSFSPjleIWVAaTBkbXFKVUx5dk5HVER+ejUyMGgxOG1sY1ZMdCFOWVduPHA9RlRCfEglRTp9LGdsWzA4eXNhenpCI2xzUHh0NlcqdmV6W3NhejVTU21e''@;'; put 'put ''YnBNUS8peTAwZiVeVU1pRz9kVXtYYXQzTlMve1NhbmFYRjFgOTxLditRamBBfSIhe1Z5PkkvNjg0cDQ6V3YhIkpGfjF5K1NuQTZsPiI6V3JkdUxjalF8PDFjUCg8eURweDlMOEA+dl15emUuJSlWOzFRSl8sSHRlanlMQCxbZWpPeVF3QWJ5IXFSMy5IfkgsVTo8QnZOSX52VmB7eVBENzFWRV0h''@;'; put 'put ''NUNSdH5sMVh1eiJOOXtoIjczaEdTKVBiX0dVc0l0QiNsUSlkKnwjM1ZXSXV0fXNaMUJLdGJmIlEsV18+ajxYYml1JS5gZTN5fDUrYkp+PWBlRGl+RyxgOH5kJD58cmcyMj43ImxdZH5INmB+YTNnTHcjXkVOTlp1JWFDWDFEVztCfFdyVC5HN311MXwqTzlFZDw/OUhObUwqfkBKc1d7LFhEIkly''@;'; put 'put ''X3NsY09NMmA1Nn1oSnw/Sl1CIkl+KCNmeCV4TCFkd3hgcE9CLiJjMnEmV1c8NExiPXp0X058Pj08PHc8LllYQDRLM0dRKmlmTjcxQ0YlNCxiJHdlK09PT2dgKDFWbnAzJUl5IUVSREZ3dV5qbGdOPmh6QE1yPzVZZXxndmtJZDFoYXdhXUFyY1t1eE9DZyQmZSpealhfRkVhZVs8SUBxOlN1XiZZ''@;'; put 'put ''KXgpTVY2bVgycW1ZM3FHPSs6JGFnYylHU3skXkdVRWNZImRkdV9ddyZJaSVZYVVOW0xgQ3c9U20iMU9IPipMYSo9ZD82aWR4NjY9dHp5eSt3M0ZkJk16dX5qSE1fYnYvcl5DUGpeT1UjS08pXzoxPFdIcihZNkFEdSVaYT9EZ1dLPl9iKl47RHJMRWhGcT0pMzE/Wk49b3hQZE8qJVQvI0JuYEhl''@;'; put 'put ''L19DQXEhVn07fHUseVIsX1JPdGFbdTksYktSPXkhZXg3dUhva1AwQV92KilZSj9jUnRlKCtjajw8L25BJn5RaEcwIyVAeHNpUFY6I246I1E7SUMpaV4uMk4vW1g3WVNsczdnZX5UR2pSe1t1Wms6Lyprd09tT2djUSpCNUZxWkg2UzBQRy9JcyQ+eCRhL2l9SU9NKzVnK1JXXyhCUUJZQH5pXVtg''@;'; put 'put ''X3UxIiRHXiFWQ1lOJlR7bjtzM3A+ZE4+bTkvdzZ6YFU6M2I/fSM4cGUjc1ZCNVBnIy8zLjx2QC5ScyVwa0R5c2NvYjgsQyNqeUVtcG5ZRHxPQyQ0Zz51Xz13eXsjZU8pJCJ0OiRaZz4qXkVHSWdoWnpWSStpME1BQXwoLz9VY0NFaGp1YDhmK0BXOzwoOnpSUTZkInhaSFgiYSRlUWk4UktTJFBX''@;'; put 'put ''eyNlY2ZiMUN7LEcvXkkkP3JHTlB0YTlFRWtkJWZ4L2FecE5LS11WO3Y8NU94OiE0d2NTYyNSd3hgTnAkb1c5RUFIfVl4fHl0Sl50UEFdJHJ6MnYhT0BndVdQdD1MW3tsPC8vMVp8aUxRdi8sVFMjL0l1ZEpCaUFUey47I0RwWEEhMXlnPmJkRnYvNUZgT3UjfmAuT0wmVGMvb0okdlFNOEM6QSU3''@;'; put 'put ''MjxOaj4sNDVGQjc/TE5oanlpX1M5TzF5flFMRT9TL3lUOTNwKUljUnAkQkdNVFpSeFVWclRNZHVZS1pwSj15dHxfYEJSSyJxfFg7ail4P2lFPUJRfUtNOjlOK0RbTjJfUF5sL1tVYCg6VywlPEl0MF1tcVM4UTxgcU1LLmFqOUNXTUhLPEleRiJvPF4xRGhIXVldalV9fVJ8YXU4MEhAeGlSbHl2''@;'; put 'put ''QitfaExoalBsUjVbXm5OKTg5UjhJVmJUTl8mYktAKFkubl5TVH5lYG4welZ3VCNVYlQlJUk7fCN7fD8iL3RxWCxfMVEwQTxoeFNMbUcoK18jQG82a3MseXhIU2AoNis1T0JXaENWWypuKy9KN2VoJnswbjN4WE1RMy54VmpFRk5qN2MlOWZ4bnw9XXVnWStPUkZoKyZ9JDldQjVITnN6eWJTOz9w''@;'; put 'put ''bD09YXJmNigmSF9rVFskMFpGUj99bWpeOipNT11Ndkt3fGV5cjt5PFFIemZiSlVvOzVqUjd3SUIwTXI8UUgsUSN1WiQ/N1lOSmxGdmVpfW0vW2sqMzlRbWVsJmpXYDY+fjJhKj83KXFfJUpGTFUsdDJzN2M/SCFdRmZUIyFbKCEpKUlGLyZhYU8uT1MiQmh1RnZuR01IYW5JYUFOXj5OW1BnVTA4''@;'; put 'put ''dzpGZnt3eGIpaXl8P25UYkJHWnVqNys4VEF+Z3dleUw1P0VmTCV4OV4yPml4ImN+XmgzNX45QzRgaEo5PlIwWTVERlo0KmJkZDlyS0taKChJXXY3MlRhfSFDN1g3TmYqPF5VUHQjZ0ImXm1QdiNHQ1JPfkdAQ1J1Xm5CIzxiRUZ8QWtJfUwrWXo2O2Q+UyR+Nk5odTxpXk9MVzM9Sk5QeD4uS184''@;'; put 'put ''VCI7LzJ9SlkxKHV2T1ZOcWtAfDdeUlF8M0U2dEp7M1UoOz9HY3QwYzY+eD1lKTJXZUJEPWVXaTY8WDZ9VmphMDdpO3IxKl5KentaZy4/d0siTnc8YUZjajNzbEsvTVc2WShTRH1rclRMLkxUcWp0X0dlWiglK0p0SVF8ZmhtK3xCRD9STF0zJCE0MShgVzYqU1I8V2dyR2QvJixLPEIwK3VdSDlk''@;'; put 'put ''dCJNVkg3PmMmNElPQC89ZTxeY0ZNYnxdc3BHdyVjKVRRPUxnWj55P3ZpZHNsYFJsZGM8P0Fte2ElPTIkUlQpNmRhOXE2TUNdUj5iIVR1THRqcDQ2V1ZAKExIYm1DJX5QMVVKLi5vY3ozPFF2IXJiLHxjJX5jbDBUal5WZnVrTV1BNig8MipTeUIvTmFLZzw2e2YsVVU4VEN2LEIqWGp7d2JNRiw1''@;'; put 'put ''YGtoblpQY1BER1kvPjE0P0ZadTB3czYsam5xb1tXO3I+RndadVowc0ImPFBIWEBIInghcUg1VlpvN0RfIllKIUNIX2M4bngoaDRaTjg+Nn5CWSg6QilEKys1JTxvZTI+JiVCQU0pbE1SbW1XS1RUKkY+UzU5UXMqMVhNXXB4NkQ9WmZfZClsYytPa0VxQDZBWT54fiJ6UlA8I10oNjRGVkxvOmln''@;'; put 'put ''OjFyOVBCP2l+OXRoQG4/RiNVOVh8QSxARUVtUmBqYi5LMSFiSW81MXJta1AqZGVmPlA+Zk1Nb2t6QHsiWjZKLGI+W2ZMKXZ9UURHelpabmRYVCJWeD55WmBDTkp3ODYyc0VkQ3hpa3UqUnpAVGFxIT9Ie2YwPTQ7YiJBM3hLV3xpQk1nSWFuOkFQQT0vNkdlK1tYNnh2b14oZ2QqYmE3fEc5TnZi''@;'; put 'put ''SmhwWkF2UChOVTthJUxvNE16ZCt1STx3e2FIJnJGPz8rSCt4bSteWHtFYnZzOHc5c2cxTDsxKzdGVTZpMVlhSWMobjx9a1lkbSQ4an1MIXZiXWV7IzBUI0lhSlhCRmVGXnRdNDk1VXM2enAkdCU0SWl6XkNgaTxfR3VmJC48X056WDNCRXYuLnRCT2w5bWJLVjBhQSZrZmU2R2g3ME9ibld2I0dR''@;'; put 'put ''T1I9NCt9MnxAV3BKfitAVGReRF9bWUxvL3ZDV3Q+ayFeY0VyN1E3KkJpQDo3WVVWIkV+eU1ZdHl1fEVjTT0jJiFoRTZMZT05OHxQWmo7YWRmWE1xUDJ5ZnMsY3JWbng7L09QQEc1PEQ9MkNjfklnXyFWKXh0L3hEMihxYSo7UkMrWD4qbnhJfDVtdit0V0dwSkFBbXA7I2B1UlEuIVAraHNyLEZ4''@;'; put 'put ''cUx7Ym1WJlsifEl3ZUhPSHxFVmo6fFJgaFQoQmFDdUIvTT8rc2R7ajxAWk57XiFBYiJbU2xpVEBVKWNDXXlYPGpeOjdgNl86RXtQYFkhO0xeSndRK2xhakROPlpoLE9MamF0aXx8XjBmM1NXVV86dkp+Mkwlfmk3IitpODA8WD89blM3I0Qzbl9UTTdQOyR7VnElYmB6P10+X2pSLkFvdVtrdndH''@;'; put 'put ''Xm5yMHNXW09HS3ZFKiE/O25sbjp2Pyk0Py5uW1Q3clVRR19WQmp8a3JwPTp+VG4lVmBsK0RucV9KfEVSOXJDYz0wIT0kZWhxayI2OH4/Sj0mbGhgU2FHSV05ey8kbD1FLD85UEVVSWh1PV14Xz1nfjR1O2p7S34qcz5FWGZlO0FCOkhRallmQGBtbjxnaF8sUzNhaF9RcEZ+MHZuSUZTRDdaMCV9''@;'; put 'put ''MDJUKl56aDJuanFvPCwkU2BhRykhRChKdlFiSj5fdzRKSTpMelFEdEUqIkJBUnlIVmA1fV0+TCpQNGVyZiU9OW9EVSUrLDtAZmBNVX4+YH4vKCY5LncjWWo0KWNeTDxHUT1WQEV4cyp9Rkt2KClwPkhodXB1clUzSmgwUW5YLDQ2VlNRNGEmJlc0eGttenVeLDQmLDhwXWdIaHd5LGksSUIjSTRj''@;'; put 'put ''b2MhWC9zRV55NUl5IlpJMH5zPSleKm4uYDpsKUhnUiZKNmElaFh3R14sVWc+U0U6dmMqM2UhTSZFYXZJKnU/KV9rX1V+fXhQVzdBNm1GdWopbT8hbj0kTlZHLEldVT84X2J8fG1jdUFIRFJicVBGJCxJeyxUazkoMmlCIjgrKFs+bm55VlUxXTQvOlNwTF9vOGA3eF1tbjs9e3B0Mz56Qyh6VC86''@;'; put 'put ''b19VdHBHQGRXO1R7SHNaKDg6dnMuWF5lIXI6Qm90JV1wX1ZxNy53ODldRnJSK204Njg0OXtOMTVXPmNzVWtqMWpbOS5hR1hmdl9WVzM7M31ZfG45MmVITHhGT21pZTwhNklgYT8xLkZ3Q3shajE4JTdqUVA+bkopJjh6IyV6X1BdODdqUVAmTDYiRUh6SFFqYWxRUG1mTkElZUM4cmA7YSJhcz5h''@;'; put 'put ''MzRpdTxtNmFSaXBNbE9XJEJgXyNNRW1TMj1KVk5yQjxoLklBKTdqTVAmIiJXQVo/OypoSjhoZXt0ezVpYU5UWkE3PGFlIXN1LD5OfT1bN0s9dCQ7PF4la2ppbUtiQ2F+bUIiO1UldSh5UER8aEFTcllASSF5P2EyaS5GTFJhfGIxaCZSO0c5QG4zInBJdHRJT2lTI0JoNEBQeVdWQjxoS0NMdDIh''@;'; put 'put ''MjBMT25rcFREa0x9OGF3YEJiJlJxakZiTjJMVGp7b2pDNHFObmtHLjAyWWRdYjJ1SC53KGhMLEo8KUp0eylTQWhndG4pTFlJfiw9altzI103ZDhpdkIlU01iYWpnUVRmRDheaFVFdGxXY2tKZCxFaWZFXnJ1OGMqfn4xMkUhZkc2NjFFK1lLRSZEVzxeQlg2ImxaO0c2OkNCQmVtfj43ITljUGF5''@;'; put 'put ''LEUzMEBQYn1jTnZmNGUwcWNuXXw6LDM4aVdPeFZCKUsyclB+bH5EKkRKZUk4QmVJUHspa1lFRE1NWDwmYXFsP2g6ZilEW2JRYTdPeGIkM0lqVkFbYl10cmRgImMlbTQ4c3xkczNzcDY4a3ZbOiViV1Nkc0tnO2J8fGMmKWg/flJ4Nn1BTSEqT0wzX0R3MElHYmcpTE1vMjZhSTQ0ZEpRcn1RTnt0''@;'; put 'put ''b1YuVT9vVEp6OGopJUt9PmV2OEl0MmN8OFh9R1dydW5+fjd+c0YhfTw0andOV1I/N0VQYVdTTF1uTEBbO2hFY25VbHxvbnpeWkp+cVhiSz5lKSg7V0dSUyFYdH4yUWZueF5oOmZ+Wz97P2g9IVRfflJQZm50Xn5UXj9MR31MSEJPb2l1d0x0KmkjfXd+dkIpZks8NEJNVSlpI2BZbiNTeX15JXs1''@;'; put 'put ''VFE8Q3s+emZ+fTo5VCV7bndAXSJURDcqQilzNEJVTG4wekd+czI/b0ZAfjQxdSh+KUIiWT1efUV4Mz5AbjFyPDBbSy9bJUM8fEhJI35CInR7fG85WGNqNFBOZ1NvLz9eRnEmKDRSRjt6Llc9JkdRaHE0a2t0ODlXeF9yVFcrJVJVM1RbNiswVzJzJXYhO0kpZkhRMlYveHxkczd5K1FIflU4Y3pt''@;'; put 'put ''TEtVTippTyZJOHgmKmEmISRXRTE4MmNmUW8kbl5Hd3Ildn1MaCU6WnZGUmRHRHFTd2EvNDRSJWpDJCw2SlBOb300QWM8NkQ8QVk7KFBOZzFpJEZIPER6UCVbTjV7ZXM5bj9VMyU7JWchVCR4U09bKEBnIVJBSltFJlA/T1g6Lk5mQ29LIzA7Mj4xbW5vcTtHYkRHTnZOeGk8UntqV1EpdkhkbC5y''@;'; put 'put ''ITFqI3YsJUBtYklyQFJoNHd7amleTU1+OShlUl5wbFd7fS9hdFAjdExjTXw8STN3IWp0XU87dTMlYHlWKTRJITZrQEsrMDM9MDVCVThQYXhIQ21UYFhtPlJHaj5jcTcsRVd+N2ZnbURGJGE0OjpITH45NjhDNSljTDhPNlRfL2V4K3grOjx4NTRiWk9UMUBgN0FyL0JSVDo9RklMcnIpUSxVfkpn''@;'; put 'put ''ajVWOTwyJWkkeEVpZWRNbVE2SmwyJXFeZ0tJanhRbTxZMGpWdUJHRzVnY2pbdld6NDM4Vi5eeTk1SU0lSm5ZSzc9XlQmVl1WS0x4T0tPJSUyOiMwJlI6YHVAOHNqR1ppP10ma2J6SStFIUFsPjlRWX5jKF0rK3BzXl5aUXxOQ2orQGFIK3lpVzRnWDNSKkZqQjoyYG84bUhWMH5AOnFrNF0hIlo4''@;'; put 'put ''JmxNKmxYSj83Z3xdUi5IXmJvXXs3N1p6Wns1KFI0bjV3K15QTjllKFohc2l4NHdAUWk9d3h0UUgufmBBUG1NOmhEdTw8flJfJVApd2wiLz15ZV9WZDp1ST9dPXo+T2FxSlJROHx7STV3NShmbUImfCVYSElZeFp6QHxMRDg8eH1eOV5JfVpPI01vSDR6Oz9AR0oldEsrUGV4UCU+Yzk0YyErbV9F''@;'; put 'put ''KiUmNyVtMWFNJWcrNzF1Q0hUWz1lYV0wWFhoJlkwR01WSHhKVnwyMj8pQjJoczlwNz4/PXlTNTtpVGR1d2B2dT0/LEpSR2wuQHIoKG0kM29MYmZGRjZBVlUhOGQwcWIlcHJ1Zj8kQntaQCNSITNoNk5bNG1mTl5XXnFCMFI7Q0tAT2leXnBHU2Z5UUF0OWNYY1JbVVoxUFRJZGVQZk09VG4qajZv''@;'; put 'put ''Und2S09YTkpVZXplbz5XY0tYPSspKXVNP21AOXN1V2Q3YjlOKWx0QEl0UEchJlp1b15rTiIiYzNMeyk8Ikx6RCRjfSxOK004KmhDJGdlQipSfks2enVSeXpFcClFLnpLK2RFNFVOPSJvWm1DVlF+WDJ4cHtSN0tRTUJRIyFBeHd6OC5ebTRCYGtBe1Y6XjVJa3BHL1ZwOF5hWmklTVNHKHszPSY3''@;'; put 'put ''ZTlRJmxiP2NlYWgqUl5tRkVCQjgySGVbJDZwaU9IN3tsamlNYEg0UXxmMWQwIX5sOixPOXw2dTBsY2wyc00xTGtATzNlPkUrKipPaSxPe3A7XkcpJHQ8dk85UVspZmEiRzZLb00pSUJpKWU+TW0rNEchMlh1O0VuP1sxOkE0TzlKW0EpKi9CNkJgezQ8RjM1cEssK3V4QylzYXlgKTgsUmlEdmlR''@;'; put 'put ''YD1+YUFxWkFwY3B9UTJEQ3VdVWhqYEQrRVgmaXJwWjh+MTcuT3lNMyZJT0NfYzl5NTh5MigoOkVeTCwsaUNZNllyKWZdMG8yZUBiYXo4MipJQGNLMGpGNjg8TDdVZiMkWi9Yal06Rmlde1heO0RtalgwcCs2JCJwdHVDfU8sMmt3PmhKUCRYU29HQDVFXVhMTnJyWUJGQHFLYHlXU28vX1JQLHZT''@;'; put 'put ''MTdfUTFIWDZyK0doT0p7V3haZUJXYlJ4Vk5BbjJ7cHMvaDh+KGY8b3MpRUQpTD5MQ2plQH45MjVBeGU6N0hmSkxqQC9JI3lAJTw5SDxPb3plal1HPUV2IX5nIVJbQW9lckNqfjxZNUZqdis6VVl4YCJMLyNzPSJHRilnIWxPR0pYaHN3IztbUVQuWkhqN1l9LnJfezE4cUlLc1clTT10VWI/Nk1C''@;'; put 'put ''LlkjZFY9enJabiJgWjYrKzViK20uM3VKQnEwKStnRVFWaSRHPFQwNyRMTm82cEp0YC5rTEQiIjF5ODJPNyo8PF94TGxsI0NnWntoSG8wb0Jzeks9eWFZU147UEdoeTxUMDZnZFJrMD5jTy8oRF1Ze0ZVbUphVT57KUhbNCZbdWJlRVBSU1Z5V1NVLzxrKl9uSjNnIm9CbndeTSkrLHdIaj9MTmZw''@;'; put 'put ''Syp6eW9tJmZrQnpjP0Yqe2l+O1MoIiU0S1pyS3NQRiQ+L1NlMEtSMilGd21bJnVkQHQ+Vyo9Lko9WnNDV3owXiEhfisiSm96OVZKblhMTERPKkdAN2JaRUJtX1Mze0VwMVFMPmBZRkwicDRXdCVWKy5UUDVQcTJ8R3lOPSYrN0hyNjdOd0RLVX5tPTFrdllZdkhtWS83VXw1WTBadFRablBOJk16''@;'; put 'put ''OmRvdn0oTnZYNTJ7Kioxc1pGUEpoWVorXkkudldbJT9tJEosXUdLcDtKfT5KWVlkK3FNfG1wRVcpXWNUZTI+bUxJMl5wKjZ+UGlsMVU5PyRiQkZLdHAvREpKVXl6ajB2XmsmSVovLFFqT2t8M3V4dGo5WlBOdU1RMklLQm4iRVNFPmciNFp7QUs9IWZWYyFWPDp8YDAzIT1sZG9ZY1VhI3JHUy9e''@;'; put 'put ''PGYmSzZae05MJDVJMW5Sa2Q9PGQ0S2Jvc3pqbFpKIWN9bVN6M3Y/WlF9ezo7Z2d0ZDVVT1BrPjp4U0FmZU98S2JoS1hFemBqN2M2b0klQD5ZOUZkOykkTCxLZGh8M1l6TnFxOFtbfX0pS0l3NyY5UmVQU0o4eCMjLkojN2wsUT85UVpuXU0yPDN1Zmt2emRqeGlCcjhRL15nMjNPYmgpWDBGcyU2''@;'; put 'put ''e2VoVj1FWXo1U0F8e21ZSFBqenNeInh2NkJKNTgoZHxqbS9sazJ1ZGg+OlFwO2J5Jk15YzZPYyFDWSE0WjdgPDFqNyM1Wj0xV2ptZlh7PXp2QTE1KHU1OnpfRUxtTU1XUilKeF9GclZVY2h0dT5nJG51YzQ9IzpjJTtGaWwvNUJYRHlyUjJFa2lXekFfdEZATF1jczdNMWpBYEh4PHtgL1g9UTVv''@;'; put 'put ''YmAycG52bllDPlhqaDpyLmt3QnBmQkYvPmN0JT9rZWtLUUxtPU5hKUFDPmFmXy8wejMmQUo7VCR8fVM9RHpkPGZJfCkuelBUUypOTEw/PkV8ajByQ2Q9ajUzSFhhbUMsVXlmISleUXh+aTBXRXd3aXV9KUU8M3hdV187T1F1ay9sLClwUzN9d11xT0pUazpHYWJ4N2okQURFI05yRn5pTV88JElt''@;'; put 'put ''SHlpQkdpNE11QVQ6Mj9tM0lqd1hbeD9iTFtJX0o8MjZWb3taRVQzUXNRWWk3dU1xfWlNVyE9YE9vOSNXNzhsYip2dlRrZSZvdChgZDxjeGMiTE5tMkpTJmNPT0xLNWQvfEoqT2ZfOENuSTBfKmlNUkpSXztLPGxWWmZfVTJLRiRQVEIscDVuIWtxRTBzKGMlPDYyXUpMamx5JFpRNH12TnE0eEdt''@;'; put 'put ''fmJxa01nfiY1WGc5MHMiblpKMzd9Qz49fXpaTGB0PSl1VFNjZyRuWlBCdHEjeDl0Tn5WeTdEOndxTlskTit1TjdYSXtWeUdCMkg7VD1sJmJTKGEpWTc8cGt3S052QHJdb0tXaW9maD1eVXY5UiQ+KDAsaDMkTD1jeTg8cDxJRnRAJGBnNzZqQXxtYHdlbjpIZjVeYXB6bHIzMU0ue3Y0c0lgQ0ZM''@;'; put 'put ''dFBqKmhSIXVOaUNaNDJ9bGtRUkBwLmVHMXtYdU1wPEQoLEl6d0RaMUhDJCw2LFdAUktuN3M6RzJWTURrX1V5VFE2K2JGSSheazZhbE8qTkwjfllZeCJtVENjfnFhNm1HJSYmazNzUHJfSntgeXZYLlJtRGk+Pn0odEFLcj0+TD97cilXdE46KkwsOE1pIS8mWFosJkp2b3wqKTJROyFKaCo6SlZu''@;'; put 'put ''fj86JD92U2teUWt9VkJwfVdALG5gdHp1OiVndnNzL3RUfHpNIUgrUT9uNWRvOk9dIXk5Qjg+JmRHUm5SP09xazB4c0Uqd11zUG9xTmFGMmh9JUVZPiF1V318NlptaVFHQCRGMFFYZ3Q2WVt0UXx9YUY0R3h3RyppYk44TT50ZV9FOyx2ZkkpayQmPUIkNmBYUXwjVkA+Ujd+WkskXU01dzRST347''@;'; put 'put ''cFQ3MixXWHM8O1J7Vz5YW3NRPTxVRn15bFJnPCI0b3YmZmcrRTVaTDluakYybEYhSSJFNz4vcjQ3OTxOYzVKTUhsYV88UFFVUCRGWFFZPCxVKE1rZmI7Zmc+PFdxVVE/T0VVd2FaQ3c7bi45b1FiVE06RyVvdWwiRSV+O21XJDpANkt5TEdEZVoudyZ8YyU+d044UXd3UUZ8PldGNSJgM28vWT9v''@;'; put 'put ''N0h6UWIxW2wkez5AVVtIOW9mUHZFUH4rIkFdSyxjbi50dy4jMVJtKUJaUnclWHBCNz47RGFTInp+Vjh5Nmp9OXVyU3s3Z1FEWTxacXN6WFBZUEBROlM4VHVyelg5TEd3OVJkN256dipPezdnd09LT2QjWTJ8UE8pfFI7dmRuPCtnRXxvbyJbMVVgMmU3eDhUU2Z7SWFZQmQyIVNmWD5LZTBzVT1Q''@;'; put 'put ''SWFNLGYmV3YxJkwxK2x+PF44U11CIiIzTWZFKl9CQV1hbi4qQEhkSmldaih6PjVZTF58Jj4lVXJHa0h+STMrWnhVQ1hEdC9CcU10UmhJWT1DMSxSSiF5LE4wPm92NiVVZEpZISFkMCx5W0M/KEJxMDVUTmB8YXVXU3o0dHZrWWZfQlgqeGBnWGk5UlEhNjprTFB7QWhEPzV1UHRUWGs6UlojSSF7''@;'; put 'put ''QnE5TVdKUmAwU0o7cXlEU3FgQnFpampYOllfdS87dWF2MVNGYihNOV1AbiloTGNqSyl5LnMmRn5YMShYMk0/JGdPPHhJdW9VeyRCcXl2STc9dCVYLyUrNXN8Plc2fSllN1BBNWtSOVgqTGdjJUwwNkRfNCF3bVUhXTk3VHZvfSttOntiIkkrdHs0cU8lalpPJDBLN10zYWU/VCkzV0c+aXtkTWdV''@;'; put 'put ''RDFyfGh3VVoxYjolKmBiRWIuYzY+Izg2U25vdWIpeSZON3B4TD10XTNERH4oRDRfRDUpQ04vVyhGZHN1ei8sM0RPYzdQQUZueDpTdDZdM0NHIVIjRyRpa2ZpRU4vJjxpXyFSVHl9ZzFFb2pHSnJ6P19pX0FyNUFUcXlBMisvLEZSKls/c1lgSk1LeDZnKWE+NC51KVFzKyxWblcvU1RxfjRnVVBY''@;'; put 'put ''U1d1WWFfXVZrdTFTITU9UjwoRlJibFh8UGFsXi44Py93MHpDSTVMLCk/bGIpUClfTVBwbHpnXy9VekkiTChOVXBIVlM/Lm1ANkF3PjVnUV5mMF1GUWNeTGlkK3B3TUtRWnQ4VDdlXmJVKj10JCskYCVKciFRaiU2dXk5MVBNOj5RQFZdWkwxdGg9Z2RWbjMhS1Z9MDdDbDZPOGd7ZjBAIXZDUlgl''@;'; put 'put ''bD8/TzUuL1JXI30xajw/ajM/SiV5UithYzY8bl1mMFpTL3RfVSRjLzNYKGRYZ2QlNmMkYVBKNUt9IV0qMGI2YyFJJjViek0oRFtNazQoQ2tseTh6Q2B5aG4qT21mNGh4WFV8ZzNndyU2Nn0qWSFUfj5tbERPMHRHdDI7N1MpR2wxbExTKGZPZ3xYS30/bUQ1RWg2TSpiblldezt3azo8ZGRBP0Vw''@;'; put 'put ''NDZxTnwoSl19UVojNmckPjFgZ2Rpbml3a19mVVRId2Q7NFAodzUpcjNRfWx1VVV6TExfO1MwWnxRM1p3P2chaGNgOjNRRXkzY2x7XTpzO21+Pml2YCp7emN8Zz9iKkExZnZzSldje11wTX1sbH4weSIjI3N7KnQyPGYxaF1qJX1pUlEoc3VsfEBleSYlSGhLYmgwQV1lX08kfm9Jb2gpLzw/cVRk''@;'; put 'put ''dmksYz9QVS9HKFV1X1BVWHhYLlZKcFAoc1t6cXwxNCxLN2NeUVo1bmc0WSNrcD0sQmIsOX05R1RGfjxlKVZMX0NibiZ1ZXhCUDR+cURXRz5pTkpqXy5FOVhbfmIyeFB9flZgUEJbfGg2Iks0LiFUPVN+cyk3YVB4M0cldTRrZEAvPmAvR3hMX3xhQl87L2Aufjo5bXxqfTo5d1s/WT05aXwwYDo5''@;'; put 'put ''c1s3dDV+M29XVzV9a2EpckIpIm5vaHFuLDtBXl82P1pkc3lKZWt9bGklbTRdfnpJYHRpLFh4aEsvTi85Kmx7XXJ0SlJPNlAoSyM8X2g4Vi9oOD1CMUw0fW0uUCpSOn5oYm51Sj8mRjckdUhJYWN7XT98fl9eOyRgTT06OTJ2OURjc2RxOl9xWzhfOX02X15fKkBzLmV8VGVgXzxrd0ExclswPGsk''@;'; put 'put ''NWNdeTVVLnFxd0F9XXt3UWs2P1hVKD5YNl4sUjA9VndFdChnYGVDXzgpLF5FJHtjcD5kdjM2e2tSRCYkYT87RHMjMm0vaXR9Jjl7OzgpNVFAMVJiMDpHTnxtM1JreHIhRnFDa342ang6WShlUyliSX1rOyFvdS9xakVucyImLDttc08+O319WHA3RFZuLnx9aHlrSjN1aWNdWEYhUiZ0V0x8Xj8i''@;'; put 'put ''Zy45P3VHfHNPSWAhT3woMElJeXJrUlE6SSVjNCJ+cTQkdHAxQ2F6PEszIkRPU19fcjwufWRkSEY3bzlrJVR+U2woPn1hKDo5ZHF8XVlPUSheaSlyc1RzcF59WW19XS58TTteO0RTa19sU2AqP1k0aEgudG1WKHwxdDJmKEo/V2JWKCtJKHE3fTN4TCpHNz0pdmQwWSYjQFFjX1pBK1YsVSt6Ol8o''@;'; put 'put ''Mks6fUdQfHhCb2gzd2RgSCxFP0xrNkkoVVUmJkU0UXdENGgrLE1+VShmMSklbnNkUU1kWnxDSmA/KWw6OShAQCozaGksdG17ZDI+Iy9kOzV9aDheOy9SW2N9XTd8MyJDdUkxUzE/O10ibls1WmRzdDZ6PyFYNj1vM21ddUIxaD8vJHI9YlI5VyplKVR3VGt9WEV+JTBkT2p8OU9WbGJgS1hINiRe''@;'; put 'put ''eFUxaHhEMUY8Mk90MWU8b010fn5tTnw0Ij47RjFPZnNnd28oWD94Rz87T0BvMX59JF0+fiksPDJgX3F6RVZaLzVTKXwxQEw0LykkOSJ8YG1OZHd8cnswNUMqfjAwamg2OGBqRC5pbm5HOzo5In10e2FbMSw1UyU/O0xwOiU9dlFncjtrQyZKKjtAaHMzWmw6Yj9fPzFoSj5GJFcoYUBaU01+Sjo6''@;'; put 'put ''UTk0fWxAXi9COzw1fnRuPX5hRGVRSFMvfHorKGhFXjswaShJKHpyYn1PP3J+eDwuUWhNfDRWP0N2fHxuZUtiYylvKmxKc0ptc0RPIiM7fWhifV0vJis+aGkkSVdybHNjKEE9I2gsUXVfUVJfRyJmbHN8JldyZShjeyFiPF1afjNaNk1ldl1DRykoKUxEbC8kciFOUmpLMV50RnUhaHtdaGY9XVls''@;'; put 'put ''XSpYSFB8Pkg/JlZ6KSVrc1gmWH1kKHw9TEFjfjxTJjl+e2Q6a0R9XSN5bmh4KzRWZmYxaHZBZEg1dkdIXjtdN2h+bGQhX3JRS0hubzxnLkdmPXd2eCQjP1hvKz49MnR9VTE5QEpjT2dIYEdiaHRub0FUc3tsPlcuZmY0YEdiIihVJWxKImZpU09xbSMmOTQoaEtMYjI+YEkocmVOenpFeiI+XWZd''@;'; put 'put ''SVdyMD90XkBsJlpkc3UqX19VcC83ZmMxKTojOmFJYzVRR3AlNyIoSyM1SndkfH5SbU57aHN4bnIoNVtjL15EUCgidClyaSVzSmtzVUwiIyx9KFZ8bHh8SHFVQTwyJXMmOUZAQTE8OURAQCpYTy5RLGRAJl1FZ3wvMDkqL0tQKDt4YChsIU5SfiNINzZ9a2FQKlgkJV5rZWo/MCxsZSpMckNjXzlJ''@;'; put 'put ''e0A3PSFUcHVjOVQ1JiVLZjNWckMvOVtNXnhISyRMeks/VlVZZz99dDpHKSVpc2FKIVQ4KGI4JGNjUSo+T1NNLzNIb0c0PyFUK1p0eUB6TS9MVEZmNjFfIlFkPTA/O1gjPGxKdmcsblFkPkoyblI0fVIsaF4lfThYSHYrYkB6SWRrTyU8KHYuWzEpUjZZfTZ3USpBMTJoJCooRVMoVHhAUWtfeE9q''@;'; put 'put ''R0E9M0tmSTtKYXgmOXVYZnN6QDhjdk59Uyh9bFAjQkpDe1N+I2UkNlkpfjgodiFRfnowNX5iVWRTInN8V002fH5oYlc0PlsrMWQ/RGM4SSs3K35LcDh9YH4sWT9hLn4/Ol1+RXJidHprND5dWHlCJX1TSEI9Nyx0V30sXil9OVFQQiJTOHN+Kyg4Z00sPX4zVy9gcit6azcrXVgzQEpWInM1RnM3''@;'; put 'put ''Pn47U3t+T3JlPH19TztCMzR+JkQ7fko2cVsqMSF9YUhKIWNzbWpfXyVjXjs7XyMpXzs6X1UxLzkwPy9LMmhFKiFgQHs7OGpuZHM5dXR8UnJLdSspV3dpTCo4KTU9UCpCUypiTkRQe0ptPmI7NSpjbkZQW0F0K0E8UT9WUHw+JihBOV4qaENoJFh9ZnNtRkF1ImY0TnJwI31NS3xsa19yJF87I18h''@;'; put 'put ''Xlo0dHwpbFBMW00mOXNwIX1hYDo7KXhQV0pLVi9McyF+KkRDYExrfX55K0N+Q0lbWFRdUnlBdHBGTylufXVJWWwsRyw8fmVkc3ZrKXJ3dEoveXBvMXI/OTwuKV9hOFh3MUA0ej86dmF8fkA1QzNMNkNwfWAwOXMiOyE+bEI4JEF7VnVWfnpVYHNRI1ZlM358eiY0eEt5e29sWldJW15FRHxvbC9+''@;'; put 'put ''Ik99c2IxcGlZYDspX31BYF03VDRzYVQpfX1oQVRXPG95RnJbRVJafDRqbU4/KCZ8W2pQMlAoOjJsfFA1MmgiUVVBNXwpSndzdVlMQ0Y+WTUodkZSIV8pVnh3aU5MUntpcUFPcVppTlAueiNLTDtQKDpSJndkfmZpTkVROWJSTTIxKGNaJEJROVBSYkI1azZ9NlVkQj50MWU/QyRTaFpmWlQ2bSI0''@;'; put 'put ''UFc2WnxzelhVW3t0MmwmMj5DRyIyMk5ibk5mYEtSaDVse0hdZWt4RilhIltVNFd4XzEmY3duQ11zInBWdl1QYm5rT2l+XUlHLihbNUh2RW0+OSg0YDl4fkM/aV1+YEc2OCJARThRdGJNUzE8TE9FM1loKHBkPnRiTUl6cUtWWj9CNSlyQVB8TEh4MlN0bDlHT2psMj5rdGx8dSxdO3tAOX03Wksq''@;'; put 'put ''LmRlfis3dF9uTXF4OiN1an5HRD8/WSh4Ym02fTNaUip4OlYhaHc/YWRkMDFBdDxbZH48aHxmUjMzcCFsd3J+T2NzYWoxP1NYVXxkJF0qLFhbMWQ/JThmUi5RR0k+Vkkwe34jU2RzYTFyfEBENj5sfTQxbmguUVUhJjk9WWFsKj58SGtJYmMhc0s9SWIsPkpxbHh7O2EoWDF3ZjI+WkdCbl5fZDBl''@;'; put 'put ''dmw+JGJgX3s1di9ZaWAzfVRnfG8zaGMlcixOe05qJTVgMlUvXylqZXNYe1NqVEx6L35fU05tJnF8U2plc08kOWlRRWhENmZfdllIOl9AcmV2OzhQUFhISC4+JX1HR2JHKS9ATipCUyFFW3FYVyUqdm9YSkMwd0dxSjFlPmNmaHRkI3VCNi5VISpKSyhOLGFhK2dEalVmZVV3OT98d2N8K1pgdGow''@;'; put 'put ''Q208UWB3dV95eiV4MywvdC81MHdoNnQla0dPKllkal5eTzBkOF89eTpJJWFmeCs3WWMldSp1blgzRDBOfj5+S0NkVS5YfFdaMzVPRDE/PFpgQyUuIj4iPlpLeGNjZ3hvXzt4XytqZHNaentUSnpRNF1jPT9TXjVQVU43NWcpOmZdUW4xOXw3aj4/PStfXy84JWhGVjVjN1R4RWB3PiYwWWkpMmJu''@;'; put 'put ''Uk0yPzFyfEZDKVUpUFZfOH1yakpQI3N1RVRUUFdZfms5KyV1R24uMXdyPFMsJnV2QFRGcmtgMzFNLFVRWjxAWHxhOTs/K3w4fVs1NEU0fHF8LDw2Y2BsaWJYLm1uQDlIRGZzRHhMe3NCO0VndX4+biRYeFguSWhoNkppLzZiT2oreCUwPHVvdmxudl5nN1NTYiRpNDB3ZmJWMUhpPTg6XWwhPFF3''@;'; put 'put ''WzIkLmw9REg+JFBKSVIyayt3a1VUODFaODhSOzJkP1JUOC5tO2YoRmc7JUl+JDIkSVhZaCsuI0J9OSJJejliYiM1cl5nOG80bl5wdS8qbUpxO1VjQVlgU1thcyhMRjB8OWlSUmlNR2hCY0FLKmpwRCpXaTZ2WnFUZFNjbHJFPHBxa0lZUHdBUkMyd3BrTEZqVmhnclVUU1AiJE9JJVMxMTtJNGtB''@;'; put 'put ''fUFON2VeT2pOR15XNShwVkVKKlVyaSN5M0M9SXVSYzFoInw8Ti85antuTS85YD5XVDFocF1uUT5HVjUoVWEoP2AvSzFoOV1HKEgvc0F+OmNzUnoiX1EqOH1oNWx3YnsrRGhuXnF0e0l+OWAxdW9+JWJoNmd9KDJlZ1JjTl1vMVR7dn4/Z2xQZnNLfjlhZnNDW2whO3FIU217dm9XNHskSC5DfXdq''@;'; put 'put ''U1djMXg6bj8renVzdEhHL341O2NQYDVPWFc7RE4yImB9dCh9Zlh6RiowTjJ9YCs3NH13VVM0X1dOMj59a3RnVzMwRzdXe0BaIz5ydE4yO31VdlJXXz11aiw+K3p9fiNSWVM0fGhhNH06bWZnVSxEayRzSWwsel4+KkchSkdiPyhOU19Ycn4oX2p3YE5+Iy44WCU6SHdrM3glfXgxPy47NE9XeCt0''@;'; put 'put ''fFJyTS9qXiJCWDQlNGFDYjNQInR6N25rTzBEYypFVVZAbC87YXJPfV80UXZEelBHVS5NTEg4WTo3VEZtQXFpQUpbLiZOeExkbFhYJFdISGM3Zkg6dSZrOCU+RkB0RVJXYjt3ay44dFlJOUooKDA6ZnI0QFd0LyV3IT57NHRzNmRGWjhXR2NeN1tldFVaZl9+IURQfTYxRXtxRENbdlFHIkA1Yjx1''@;'; put 'put ''ZGY0RUdYR3BrITQqOVokdDJCck9nNVt3TjpVSWVJJEtbVSI4RE1kMC5EYD1aITV0L2t1X15fW0E5KmZAXURwYTk0LHEoZDBEfis/PyNWb2YsSFFOPy8zNjJrdVFacV8oSy9Rb3lzUGUpN2J0Ijl1RVoyfksyKFZ4VUFRPiVhbXovXiUkW3p0OzA0dWJRZ1Q/W3h8bUgiJksqK1grel50WXEye1sl''@;'; put 'put ''ZWQqYHhpdC42QkYzPHx4Wjl9Unw2YlhBcndkZmg1eiI2IkJQUUB+IjNjWlt0a2JOX1kvWzJFSE9oPkcwR2Y+fUNwaDM+JGg8QW1UT0sueEF4OlhwVDB8ajxdYURoaWwmIiQyZFBoMGosPlBLZG9vVVVifk0kJTkoQzp+YTdeel9vcnNGUWYwRj9zPTgoWksxczFIJnkjanxPI3FUSDZnSW87YGdy''@;'; put 'put ''LiZ5NEd0L1toUXUlUllYV3FmcXd5cUc4OzZLOC9zWnd1ZV5NITk5UWx4XSQlNmBeI2Y1JGJkOiZ7bHh3Km5iMXtkfk90V3k/W20lKk5dYyRQKXk2MClzbzZ1LGhheyQ7VWQkbytnTWYjX0V7OHVeQUZ7ZiNNfSRoUHZeN1BRcGMkRiEkQTwqbVFbYnpTPk5gUC5pSi5CcV5tNEQ6eyN8ZFgublRj''@;'; put 'put ''UTNKLi9gLDlGfldvL0ppYlB+JSEraTpZezRtel1RM3R5TEV6JClaViQ/NElfUSxEPjVmWDlFQnVYU3o7KCpddmMxWkIzRjlfSDU0Nj5HV1l2LDZfaXRmZTtoOD80d3tVcTMwRWs0dlZueTsqbk1KcW81T2omeS5LX15sPjs5cTwmbUJmeSVKPVcqZk9ZfFo6ZHpobnhkT0tya0ZoM3AzX1BEWVVf''@;'; put 'put ''MElpU117NjNvZzVyeUEzWHxWNyhdekxLS0xQc3N6LF9MX3lLaV8obXY9Uzs8a0spTD5hdCRULmAiZ0JVeUh5W3p9fFM/cH5rXXxCakE8V2k3PElnN3VuczI8cl0oTS5eOj5Ncko4Xzx2eDdfNlFpRUUjNXEiKWpYIXVTR00yRjB4RzVfYU0jTjNKQzEhQyEoU3hWLkFYc1FwP24reFFzbzlhbl8s''@;'; put 'put ''OFl5X2d5ezlDTUtCVUl7dTU9Ikk/fUNNQnQpKyxye35fODwiU3lDbG5FUFZJfGR2dCptZjpKSjcqfmBQeUMlRWF8QlMvVlAoeWVZJXZ8RTR2WWphOWwsdXFVcEpTLmtJeGE6c0g5Qyp0VVF0b1RGTjNHWCt2LzJnTC4rNm5bbyxvWFR6JF8/Xm1mbGBDLj1teDJoSDxvJVF+MW9OKmNlJV0qL01w''@;'; put 'put ''MVo5VHVXVzYpe3A4S1V3PHdNZFs7cisqTDVJJDMqRng9Vz1OKlYsPV1mIjo8WWM0L2k4RURYSFo6bkRNdCU8fT1GXSk3XkQ0Vkc/MmxgNFlAYGA/S016WkcwNTpORENaJUQ5OSlVSltdTiF9N0YuL1o/MCpma296cjRDUkkrenVUIWZPPjRiKzAzS1RATCFAWkhfZiFPelBiMU1NXkFjRiY6UUts''@;'; put 'put ''fiM1fFc8aExtLFtNeXchcDcyNHBublEmVXhHN0NoWThmMm12I2RwdEJFMU5aU0JDLkx5SlI0VWtANUw4P3Q1JTt9KGx7cDBdK1R0cHs8TEFYIWM1WzRMU2NCSkAvfnlFRCl0T2tQNmcvemA+NUxCcUJ7RXNPWTA8QEYzfEgwdntkcFIlcFo9SCpfU1osTnREVlk6eiJ3XTIpbGwkXys0UW10dWxK''@;'; put 'put ''N1QjKlA8bW5JdT9WcXJZbGgqN2Z2TC9hNkZvKHsrJnsvLzNhPmIyRm5IYD0xQFdjYmBfdzx1ckZVZkwsQXp0ZVE+OE5fRDxwIjdgTjQsZUFNZWU7fGAycltGWGxzJWJgTHRWcmZYc3lwNkZvPUJyMyIqcF52Jj9jT0U3RWliVE1EX30lanBpLl57L2crN3B3aF49UDAwRyxOanMpRmYyIWtKW1Al''@;'; put 'put ''JDlNe3Y/L0hmeXk8YSFNbnV8WGYrPTEpW3VqMlo6IWpoKVomZ3tzJlFMREV0YHZMT05Pfi9kKWVodCNzaE4zL2FGNnt2Vyl9UUdLfW1SckUwO2gvJEdveWg0M0w7bWJbUjFjYDF+YjNUXXpMOjVaS3VZJX5ibFZwKnpaP01EYkk8TFcwPG0wRixHelcyP3NwSCV2Uj4ocTI8dS9adntUd1JhUzA1''@;'; put 'put ''JFVNJkF6IjBtdS5jQHI1QH1QczNSX0JFJm5wXW1pWzdjJCtyeVpzWDJ3aWk7fEdTVHNyRnwyOT1AalJbWmNVNjwxfkYvQUIzM2I+YyQ0T1F3L3RPcT1gdnsjLjI5PlBheFdlV1d4MWY6MTc0UjpHeFZ0U3pYeyN0NSgwKGNCODUwQyJ5OEU/JXIlaXQpeWIiVENJY240JXBJfnp6UnFBIT99cyxf''@;'; put 'put ''KSl6b2UofU9MPiwke15qV3dMdT5ZanU8WFV5WjR8IzNbXU8mfG95YkI+OCRhOTc0JV5aYER2PHJwMmZJV04iaVNfazZWY2M1NjBhNEtoSGowNz8rRiVTWSJ4TDgzPiNpKDhFamRpUS5rMXIlTW4/a1drS0pkTiomL0csMVdgOlc2M3xlMUt7XzVYdlYuaVdtNzpMYEs2NVRBKCkjYXhnWk5Pfksz''@;'; put 'put ''RSVHbUEjWns4Zkt9bUtAOkR3X2csOkNHaWVpZllMZFUyKVFhYj5dMS5lZyEremoxWTRhM0JmM2d4NjxnRjk9Q2RAKmNvayEhdGtqNiZVPSY4PkViPWsuLGwoMDxwKUthQGdjNTRVUChCJnF3WHp1cWlCaXhNV0Y4SGFNJTEkfk5baXZnLC8hWDReQHtlKWg3TGgpeUFkbWNOaGhsIzw4KyFlVCFr''@;'; put 'put ''XjRaJWRITUY9NFBqa1ldOGU0P0pTRjlPbXM+aDchQ0sqYSxDWT1QMlojdj9iNyQ3YmArQipkMGBoNltuRm4vODF5aXwvODJmRExReXRoWVlUJE1kRUQqfixdPmJmZEJnI2g5NHw+akxUQllPODUxVX02anphcXVYPVoyNDBfXVVDQUhdW0MhNDBJRmJwZVFhWHJ3L0kjTE1yMjlbIns3PW1SaGN5''@;'; put 'put ''LGQiM0FJJTk9JEgzJihMdVc5LG1zZGQ+Q1p9cnxJbC5mWEJqUCMjPTRKbjZBflgpRzVoJUFLTVBPaXhCWHMzWE5DNVF0VHQvLENkc2RMa3F8JDlBTGthK2tHd3lPYyovL2w3WmslLzA/Sl1aRHl+RWNtWzVuSX4wMTpTfVNkWHkvVD4jX0pqdn49LDk0KDtpeHgkJCVCWkgzN0BVMTdzT2xKNnYp''@;'; put 'put ''IjJfJVdsSGR7YWZIX2pVZjI/I1IoRm02SWFneDByQFg9QHEoN3g4aWNLZzczPEpvM3VScSkvdWxDNjF9dUVxXlJNOSR1dkU5NXAlOztgZDBiNjhQfShTL0RYd1VyaXxoJGVVJltZPzVGM0wpWy9LPzBjOHpAZFRvVnNBe081aG1rPjg3LjBKfmwifmtrc0FpZypJYztHak9DY11VSHJEJUJ4Vl18''@;'; put 'put ''Wms5NDpuVGNAOCh2IyhZJkFVajlSaWBEJERyYmxvI0pmNGx6NVsiOlZxUlh8dSwoanVERTFYL0tUdy9WZ2ljV3FIMTR+YEVjMVhPSEVIYjtDej06MStoWmMua1lnWE0jb191JSxxeF4hSSRtbklUcjZASmRMNXZQQnRGcjopPHk2S25JKUAxSnUzNkBrWkJ0MU15Z25TPWVwfiN2MT5JUXtPRHs1''@;'; put 'put ''b1NndWIjND1SSXk6WCtTRXFRZ0l+djg+Iz4zOUsiaiN8ejRRViQrNFh1W2MxTGRVTnUxZlJicThnR11fJCJUTl9NN3JLckdffnI9TDFQRTI/fWk9KnQzI2Nda2poSVJrfGA2Km1PYS9JPihAQD5weGRBJWshXnB1KWdRd3t2cilfTnE7dXpbQy9VLHJJRy9QTTZjfGRzLmZlNDAmbXI2OEtSXl83''@;'; put 'put ''XUVmUEJ6ejNReFp5PXlHX2FaJCZaOXdBSWA7I1B+ZzJlMWpnMyMja0Y/WzNWI1lrL3VjKiZZIy9IKFR2eiQlUDlaUHNhNV12OXd1NTtTQkBKPTVJaWZXUVhJMFVBJykpKSxJQXx8KElBPUdNdCh7d2FzbUJpbmFyeTp4dGUsbG9jYXRlRmlsZTp2b2lkIDB9KSksSUF9ZnVuY3Rpb24gUU10KGMp''@;'; put 'put ''e3JldHVybntwYXRoOmMucGF0aCxkYXRhOmA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iPz5cbjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEv''@;'; put 'put ''RFREL3N2ZzExLmR0ZCI+XG48c3ZnIHdpZHRoPSIke2Mud2lkdGh9IiBoZWlnaHQ9IiR7Yy5oZWlnaHR9Ij48L3N2Zz5gfX1mdW5jdGlvbiBleHQoYyl7cmV0dXJuIGMubWFwKFFNdCl9dmFyIFA4ZT1jbGFzcyBEd3tjb25zdHJ1Y3RvcihsKXt0aGlzLl9tb2R1bGU9bH1zdGF0aWMgbG9hZCgp''@;'; put 'put ''e3JldHVybiBYTXQoKS50aGVuKGw9Pm5ldyBEdyhsKSl9c3RhdGljIHVubG9hZCgpeyFmdW5jdGlvbiBKTXQoKXtJQSYmKElBPXZvaWQgMCl9KCl9dmVyc2lvbigpe3JldHVybiB0aGlzLl9tb2R1bGUuR3JhcGh2aXoucHJvdG90eXBlLnZlcnNpb24oKX1sYXlvdXQobCxhPSJzdmciLGQ9ImRv''@;'; put 'put ''dCIsaCl7aWYoIWwpcmV0dXJuIiI7bGV0IGY9bmV3IHRoaXMuX21vZHVsZS5HcmFwaHZpeihoPy55SW52ZXJ0PzE6MCxoPy5ub3A/aD8ubm9wOjApLHY9IiIsTT0iIjt0cnl7IWZ1bmN0aW9uIHR4dChjLGwpe2xldCBhPXtpbWFnZXM6W10sZmlsZXM6W10sLi4ubH07Wy4uLmEuZmlsZXMsLi4u''@;'; put 'put ''ZXh0KGEuaW1hZ2VzKV0uZm9yRWFjaChkPT5jLmNyZWF0ZUZpbGUoZC5wYXRoLGQuZGF0YSkpfShmLGgpO3RyeXt2PWYubGF5b3V0KGwsYSxkKX1jYXRjaChEKXtNPUQubWVzc2FnZX1NPWYubGFzdEVycm9yKCl8fE19ZmluYWxseXt0aGlzLl9tb2R1bGUuZGVzdHJveShmKX1pZighdiYmTSl0''@;'; put 'put ''aHJvdyBEdy51bmxvYWQoKSxuZXcgRXJyb3IoTSk7cmV0dXJuIHZ9YWN5Y2xpYyhsLGE9ITEsZD0hMSl7aWYoIWwpcmV0dXJue2FjeWNsaWM6ITEsbnVtX3JldjowLG91dEZpbGU6IiJ9O2xldCBoPW5ldyB0aGlzLl9tb2R1bGUuR3JhcGh2aXosZj0hMSx2PTAsTT0iIixEPSIiO3RyeXt0cnl7''@;'; put 'put ''Zj1oLmFjeWNsaWMobCxhLGQpLHY9aC5hY3ljbGljX251bV9yZXYsTT1oLmFjeWNsaWNfb3V0RmlsZX1jYXRjaChaKXtEPVoubWVzc2FnZX1EPWgubGFzdEVycm9yKCl8fER9ZmluYWxseXt0aGlzLl9tb2R1bGUuZGVzdHJveShoKX1pZihEKXRocm93IER3LnVubG9hZCgpLG5ldyBFcnJvcihE''@;'; put 'put ''KTtyZXR1cm57YWN5Y2xpYzpmLG51bV9yZXY6dixvdXRGaWxlOk19fXRyZWQobCxhPSExLGQ9ITEpe2lmKCFsKXJldHVybntvdXQ6IiIsZXJyOiIifTtsZXQgaD1uZXcgdGhpcy5fbW9kdWxlLkdyYXBodml6LGY9IiIsdj0iIixNPSIiO3RyeXt0cnl7aC50cmVkKGwsYSxkKSxmPWgudHJlZF9v''@;'; put 'put ''dXQsdj1oLnRyZWRfZXJyfWNhdGNoKEQpe009RC5tZXNzYWdlfU09aC5sYXN0RXJyb3IoKXx8TX1maW5hbGx5e3RoaXMuX21vZHVsZS5kZXN0cm95KGgpfWlmKCFmJiZNKXRocm93IER3LnVubG9hZCgpLG5ldyBFcnJvcihNKTtyZXR1cm57b3V0OmYsZXJyOnZ9fXVuZmxhdHRlbihsLGE9MCxk''@;'; put 'put ''PSExLGg9MCl7aWYoIWwpcmV0dXJuIiI7bGV0IGY9bmV3IHRoaXMuX21vZHVsZS5HcmFwaHZpeix2PSIiLE09IiI7dHJ5e3RyeXt2PWYudW5mbGF0dGVuKGwsYSxkLGgpfWNhdGNoKEQpe009RC5tZXNzYWdlfU09Zi5sYXN0RXJyb3IoKXx8TX1maW5hbGx5e3RoaXMuX21vZHVsZS5kZXN0cm95''@;'; put 'put ''KGYpfWlmKCF2JiZNKXRocm93IER3LnVubG9hZCgpLG5ldyBFcnJvcihNKTtyZXR1cm4gdn1jaXJjbyhsLGE9InN2ZyIsZCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwiY2lyY28iLGQpfWRvdChsLGE9InN2ZyIsZCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwiZG90IixkKX1mZHAobCxhPSJz''@;'; put 'put ''dmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsImZkcCIsZCl9c2ZkcChsLGE9InN2ZyIsZCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwic2ZkcCIsZCl9bmVhdG8obCxhPSJzdmciLGQpe3JldHVybiB0aGlzLmxheW91dChsLGEsIm5lYXRvIixkKX1vc2FnZShsLGE9InN2ZyIsZCl7cmV0''@;'; put 'put ''dXJuIHRoaXMubGF5b3V0KGwsYSwib3NhZ2UiLGQpfXBhdGNod29yayhsLGE9InN2ZyIsZCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwicGF0Y2h3b3JrIixkKX10d29waShsLGE9InN2ZyIsZCl7cmV0dXJuIHRoaXMubGF5b3V0KGwsYSwidHdvcGkiLGQpfW5vcChsKXtyZXR1cm4gdGhpcy5s''@;'; put 'put ''YXlvdXQobCwiZG90Iiwibm9wIil9bm9wMihsKXtyZXR1cm4gdGhpcy5sYXlvdXQobCwiZG90Iiwibm9wMiIpfX07ZnVuY3Rpb24gRU4oYyl7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sYyl9ZnVuY3Rpb24gdzYoYyl7cmV0dXJuIE1hdGgucm91bmQoMTAwKmMpLzEwMH1mdW5jdGlvbiBGOGUo''@;'; put 'put ''YyxsKXtpZigicG9seWdvbiI9PWMudGFnKXsoYT1FTihjKSkudGFnPSJwYXRoIjt2YXIgaD1FTihkPWMuYXR0cmlidXRlcyksZj1kLnBvaW50cztpZigicG9seWdvbiI9PWwudGFnKXsodj1jLmJib3gpLmN4PXYueCt2LndpZHRoLzIsdi5jeT12Lnkrdi5oZWlnaHQvMjtmb3IodmFyIEQ9ZC5w''@;'; put 'put ''b2ludHMuc3BsaXQoIiAiKSxaPUQubWFwKGZ1bmN0aW9uKFBuKXt2YXIganI9UG4uc3BsaXQoIiwiKTtyZXR1cm5banJbMF0tdi5jeCxqclsxXS12LmN5XX0pLG5lPVpbWi5sZW5ndGgtMV1bMF0sY2U9WltaLmxlbmd0aC0xXVsxXSxiZT0wO2JlPFoubGVuZ3RoO2JlKyssbmU9RWUsY2U9QmUp''@;'; put 'put ''e3ZhciBxZT0oRWU9WltiZV1bMF0pLW5lO2lmKDAhPShudD0oQmU9WltiZV1bMV0pLWNlKSYmMDw9KGx0PW5lLWNlKnFlL250KSYmbHQ8MS8wJiYobmU8PWx0JiZsdDw9RWV8fEVlPD1sdCYmbHQ8PW5lKSlicmVha312YXIgbXQ9W1t2LmN4K2x0LHYuY3krMF0uam9pbigiLCIpXTtmPShtdD0o''@;'; put 'put ''bXQ9bXQuY29uY2F0KEQuc2xpY2UoYmUpKSkuY29uY2F0KEQuc2xpY2UoMCxiZSkpKS5qb2luKCIgIil9aC5kPSJNIitmKyJ6IixkZWxldGUgaC5wb2ludHMsYS5hdHRyaWJ1dGVzPWh9ZWxzZXt2YXIgYTsoYT1FTihjKSkudGFnPSJwYXRoIixoPUVOKGQ9Yy5hdHRyaWJ1dGVzKTt2YXIgZCxF''@;'; put 'put ''ZSxCZSxsdCxKdD1kLmN4LHluPWQuY3ksQ249ZC5yeCx0bj1kLnJ5O2lmKCJwb2x5Z29uIj09bC50YWcpe3ZhciB2Oyh2PWwuYmJveCkuY3g9di54K3Yud2lkdGgvMix2LmN5PXYueSt2LmhlaWdodC8yO3ZhciB4bj1sLmF0dHJpYnV0ZXMucG9pbnRzLnNwbGl0KCIgIilbMF0uc3BsaXQoIiwi''@;'; put 'put ''KSxudD0ocWU9eG5bMF0tdi5jeCx4blsxXS12LmN5KSx5cj1NYXRoLnNxcnQoTWF0aC5wb3cocWUsMikrTWF0aC5wb3cobnQsMikpLEduPXFlL3lyLGlpPS1udC95cn1lbHNlIEduPTEsaWk9MDtoLmQ9Ik0gIitKdCsiICIreW4rIiBtICIrKEVlPUNuKkduKSsiLCIrKEJlPS10bippaSkrIiBh''@;'; put 'put ''ICIrQ24rIiwiK3RuKyIgMCAxLDAgIisocWU9KGx0PUNuKi1HbiktRWUpKyIsIisobnQ9LXRuKi1paS1CZSkrIiBhICIrQ24rIiwiK3RuKyIgMCAxLDAgIistcWUrIiwiKy1udCsieiIsZGVsZXRlIGguY3gsZGVsZXRlIGguY3ksZGVsZXRlIGgucngsZGVsZXRlIGgucnksYS5hdHRyaWJ1dGVz''@;'; put 'put ''PWh9cmV0dXJuIGF9ZnVuY3Rpb24gaXh0KCl7dHJ5e1A4ZS5sb2FkKCkudGhlbihhPT57YS5sYXlvdXQoIiIsInN2ZyIsImRvdCIpLHRoaXMubGF5b3V0U3luYz1hLmxheW91dC5iaW5kKGEpLG51bGw9PXRoaXMuX3dvcmtlciYmdGhpcy5fZGlzcGF0Y2guY2FsbCgiaW5pdEVuZCIsdGhpcyks''@;'; put 'put ''dGhpcy5fYWZ0ZXJJbml0JiZ0aGlzLl9hZnRlckluaXQoKX0pfWNhdGNoe31pZihudWxsIT10aGlzLl93b3JrZXIpe3ZhciBjPXRoaXMuX3ZpelVSTCxsPXRoaXM7dGhpcy5fd29ya2VyUG9ydC5vbm1lc3NhZ2U9ZnVuY3Rpb24oYSl7bC5fd29ya2VyQ2FsbGJhY2tzLnNoaWZ0KCkuY2FsbChs''@;'; put 'put ''LGEpfSxjLm1hdGNoKC9eaHR0cHM/OlwvXC98XlwvXC8vaSl8fChjPW5ldyB3aW5kb3cuVVJMKGMsZG9jdW1lbnQubG9jYXRpb24uaHJlZikuaHJlZiksRXRlLmNhbGwodGhpcyx7dHlwZToibGF5b3V0Iixkb3Q6IiIsZW5naW5lOiJkb3QiLHZpelVSTDpjfSxmdW5jdGlvbihhKXt9KSxFdGUu''@;'; put 'put ''Y2FsbCh0aGlzLHt0eXBlOiJ2ZXJzaW9uIn0sZnVuY3Rpb24oYSl7InZlcnNpb24iPT09YS5kYXRhLnR5cGUmJihsLl9ncmFwaHZpelZlcnNpb249YS5kYXRhLnZlcnNpb24sbC5fZGlzcGF0Y2guY2FsbCgiaW5pdEVuZCIsdGhpcykpfSl9fWZ1bmN0aW9uIEV0ZShjLGwpe3RoaXMuX3dvcmtl''@;'; put 'put ''ckNhbGxiYWNrcy5wdXNoKGwpLHRoaXMuX3dvcmtlclBvcnQucG9zdE1lc3NhZ2UoYyl9ZnVuY3Rpb24gc3h0KGMsbCl7dmFyIGE9dGhpcy5fb3B0aW9ucy5rZXlNb2RlLGQ9dGhpcy5fb3B0aW9ucy50d2VlblBhdGhzLGg9dGhpcy5fb3B0aW9ucy50d2VlblNoYXBlcztpZigic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIHRoaXMuX29wdGlvbnMudHdlZW5QcmVjaXNpb24mJnRoaXMuX29wdGlvbnMudHdlZW5QcmVjaXNpb24uaW5jbHVkZXMoIiUiKSl2YXIgZj0rdGhpcy5fb3B0aW9ucy50d2VlblByZWNpc2lvbi5zcGxpdCgiJSIpWzBdLzEwMCx2PXRoaXMuX29wdGlvbnMudHdlZW5QcmVjaXNpb24u''@;'; put 'put ''aW5jbHVkZXMoIiUiKTtlbHNlIGY9dGhpcy5fb3B0aW9ucy50d2VlblByZWNpc2lvbix2PSExO3ZhciBNPXRoaXMuX29wdGlvbnMuZ3Jvd0VudGVyaW5nRWRnZXMsRD17fSxaPXRoaXMuX2RpY3Rpb25hcnl8fHt9LG5lPXt9LGNlPXRoaXMuX25vZGVEaWN0aW9uYXJ5fHx7fTtmdW5jdGlvbiBs''@;'; put 'put ''dChHbixpaT0wLF9pKXsoZnVuY3Rpb24gYmUoR24saWkpe3ZhciBfaT1Hbi50YWc7aWYoImluZGV4Ij09YSlHbi5rZXk9aWk7ZWxzZSBpZigiIyIhPV9pWzBdKWlmKCJpZCI9PWEpR24ua2V5PUduLmF0dHJpYnV0ZXMuaWQ7ZWxzZSBpZigidGl0bGUiPT1hKXt2YXIgUG49R24uY2hpbGRyZW4u''@;'; put 'put ''ZmluZChmdW5jdGlvbihqcil7cmV0dXJuInRpdGxlIj09anIudGFnfSk7UG4mJihHbi5rZXk9UG4uY2hpbGRyZW4ubGVuZ3RoPjA/UG4uY2hpbGRyZW5bMF0udGV4dDoiIil9bnVsbD09R24ua2V5JiYoaCYmKCJlbGxpcHNlIj09X2l8fCJwb2x5Z29uIj09X2kpJiYoX2k9InBhdGgiKSxHbi5r''@;'; put 'put ''ZXk9X2krIi0iK2lpKX0pKEduLGlpKSxmdW5jdGlvbiBFZShHbixpaSl7R24uaWQ9KGlpP2lpLmlkKyIuIjoiIikrR24ua2V5fShHbixfaSk7dmFyIGpyPVpbR24uaWRdOyhmdW5jdGlvbiBCZShHbil7RFtHbi5pZF09R259KShHbiksZnVuY3Rpb24gcWUoR24saWkpe2gmJkduLmlkIGluIFom''@;'; put 'put ''JigicG9seWdvbiI9PWlpLnRhZ3x8ImVsbGlwc2UiPT1paS50YWd8fCJwYXRoIj09aWkudGFnKSYmKGlpLnRhZyE9R24udGFnfHwicG9seWdvbiI9PUduLnRhZykmJigicGF0aCIhPWlpLnRhZyYmKEduLmFsdGVybmF0aXZlT2xkPUY4ZShpaSxHbikpLCJwYXRoIiE9R24udGFnJiYoR24uYWx0''@;'; put 'put ''ZXJuYXRpdmVOZXc9RjhlKEduLGlpKSkpfShHbixqciksZnVuY3Rpb24gbnQoR24saWkpe2lmKGQmJmlpJiYoInBhdGgiPT1paS50YWd8fEduLmFsdGVybmF0aXZlT2xkJiYicGF0aCI9PUduLmFsdGVybmF0aXZlT2xkLnRhZykpe3ZhciBfaT0oR24uYWx0ZXJuYXRpdmVOZXd8fEduKS5hdHRy''@;'; put 'put ''aWJ1dGVzLmQ7aWYoR24uYWx0ZXJuYXRpdmVPbGQpdmFyIFBuPWJ0ZShHbi5hbHRlcm5hdGl2ZU9sZCk7ZWxzZSBQbj1idGUoaWkpOyhHbi5hbHRlcm5hdGl2ZU9sZHx8KEduLmFsdGVybmF0aXZlT2xkPXt9KSkucG9pbnRzPWZ1bmN0aW9uIE1NdChjLGwsYSxkKXtjb25zdCBoPWMsZj1oLmNs''@;'; put 'put ''b25lTm9kZSgpLHY9aC5nZXRUb3RhbExlbmd0aCgpLE09KGYuc2V0QXR0cmlidXRlKCJkIixsKSxmKS5nZXRUb3RhbExlbmd0aCgpLEQ9WzBdO2xldCBaPTA7Y29uc3QgbmU9ZD9hOmEvTWF0aC5tYXgodixNKTtmb3IoOyhaKz1uZSk8MTspRC5wdXNoKFopO3JldHVybiBELnB1c2goMSksRC5t''@;'; put 'put ''YXAoZnVuY3Rpb24oYmUpe2NvbnN0IEVlPWguZ2V0UG9pbnRBdExlbmd0aChiZSp2KSxCZT1mLmdldFBvaW50QXRMZW5ndGgoYmUqTSk7cmV0dXJuW1tFZS54LEVlLnldLFtCZS54LEJlLnldXX0pfShQbixfaSxmLHYpfX0oR24sanIpO3ZhciBYbj17fTtHbi5jaGlsZHJlbi5mb3JFYWNoKGZ1''@;'; put 'put ''bmN0aW9uKElyKXt2YXIgJHI9SXIudGFnOygiZWxsaXBzZSI9PSRyfHwicG9seWdvbiI9PSRyKSYmKCRyPSJwYXRoIiksbnVsbD09WG5bJHJdJiYoWG5bJHJdPTApLGx0KElyLFhuWyRyXSsrLEduKX0pfWZ1bmN0aW9uIHluKEduKXsoZnVuY3Rpb24gbXQoR24pe2lmKE0mJkduLnBhcmVudCYm''@;'; put 'put ''Im5vZGUiPT1Hbi5wYXJlbnQuYXR0cmlidXRlcy5jbGFzcyYmInRpdGxlIj09R24udGFnKXtpZihHbi5jaGlsZHJlbi5sZW5ndGg+MCl2YXIgUG49R24uY2hpbGRyZW5bMF0udGV4dDtlbHNlIFBuPSIiO25lW1BuXT1Hbi5wYXJlbnR9fSkoR24pLGZ1bmN0aW9uIEp0KEduKXt2YXIgX2k9R24u''@;'; put 'put ''dGFnO2lmKE0mJiFaW0duLmlkXSYmR24ucGFyZW50JiZJOGUoR24pJiYoInBhdGgiPT1faXx8InBvbHlnb24iPT1faSkpe2lmKCJwb2x5Z29uIj09X2kpe3ZhciBqcj1Hbi5wYXJlbnQuY2hpbGRyZW4uZmluZChmdW5jdGlvbihZcil7cmV0dXJuInBhdGgiPT1Zci50YWd9KTtqciYmKEduLnRv''@;'; put 'put ''dGFsTGVuZ3RoPWpyLnRvdGFsTGVuZ3RoKX12YXIgWG49ZnVuY3Rpb24gVE10KGMpe3JldHVybiBmdW5jdGlvbiBFTXQoYyl7cmV0dXJuImVkZ2UiPT1jLnBhcmVudC5hdHRyaWJ1dGVzLmNsYXNzP2MucGFyZW50OmMucGFyZW50LnBhcmVudC5wYXJlbnR9KGMpLmNoaWxkcmVuLmZpbmQoZnVu''@;'; put 'put ''Y3Rpb24obCl7cmV0dXJuInRpdGxlIj09bC50YWd9KX0oR24pLElyPVhuLmNoaWxkcmVuWzBdLCRyPUlyLnRleHQuc3BsaXQoIi0+Iik7MiE9JHIubGVuZ3RoJiYoJHI9SXIudGV4dC5zcGxpdCgiLS0iKSk7dmFyIHdpPSRyWzBdLFFpPW5lW3dpXTtpZihPYmplY3QuaGFzT3duKGNlLHdpKSl7''@;'; put 'put ''dmFyIHZ0PWNlW3dpXTtpZigoV3Q9UWkuY2hpbGRyZW4uZmluZEluZGV4KGZ1bmN0aW9uKFlyLE5pKXtyZXR1cm4iZyI9PVlyLnRhZ30pKT49MCl7dmFyIE50PVFpLmNoaWxkcmVuW1d0XS5jaGlsZHJlbi5maW5kSW5kZXgoZnVuY3Rpb24oWXIsTmkpe3JldHVybiJhIj09WXIudGFnfSk7UWk9''@;'; put 'put ''UWkuY2hpbGRyZW5bV3RdLmNoaWxkcmVuW050XX0oV3Q9dnQuY2hpbGRyZW4uZmluZEluZGV4KGZ1bmN0aW9uKFlyLE5pKXtyZXR1cm4iZyI9PVlyLnRhZ30pKT49MCYmKE50PXZ0LmNoaWxkcmVuW1d0XS5jaGlsZHJlbi5maW5kSW5kZXgoZnVuY3Rpb24oTmkscm4pe3JldHVybiJhIj09Tmku''@;'; put 'put ''dGFnfSksdnQ9dnQuY2hpbGRyZW5bV3RdLmNoaWxkcmVuW050XSk7Zm9yKHZhciBnbj1RaS5jaGlsZHJlbixXdD0wO1d0PGduLmxlbmd0aDtXdCsrKWlmKCJwb2x5Z29uIj09Z25bV3RdLnRhZ3x8ImVsbGlwc2UiPT1nbltXdF0udGFnfHwicGF0aCI9PWduW1d0XS50YWd8fCJ0ZXh0Ij09Z25b''@;'; put 'put ''V3RdLnRhZyl7dmFyICRuPWduW1d0XTticmVha312YXIgaHI9dnQuY2hpbGRyZW47Zm9yKFd0PTA7V3Q8aHIubGVuZ3RoO1d0KyspaWYoInBvbHlnb24iPT1ocltXdF0udGFnfHwiZWxsaXBzZSI9PWhyW1d0XS50YWd8fCJwYXRoIj09aHJbV3RdLnRhZ3x8InRleHQiPT1ocltXdF0udGFnKXt2''@;'; put 'put ''YXIgVXI9aHJbV3RdO2JyZWFrfUduLm9mZnNldD1VciYmJG4/e3g6VXIuY2VudGVyLngtJG4uY2VudGVyLngseTpVci5jZW50ZXIueS0kbi5jZW50ZXIueX06e3g6MCx5OjB9fX19KEduKSxHbi5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGlpKXt5bihpaSl9KX10aGlzLl9kaXNwYXRjaC5j''@;'; put 'put ''YWxsKCJsYXlvdXRFbmQiLHRoaXMpO3ZhciBDbj13cyhkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpLmFwcGVuZCgiZGl2IikseG49KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoYywiaW1hZ2Uvc3ZnK3htbCIpO0NuLmFwcGVuZChmdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiB4bi5kb2N1bWVudEVsZW1lbnR9KTt2YXIgeWk9cTkoQ24uc2VsZWN0KCJzdmciKSk7dGhpcy5fZGlzcGF0Y2guY2FsbCgiZGF0YUV4dHJhY3RFbmQiLHRoaXMpLGx0KHlpKSx0aGlzLl9kaXNwYXRjaC5jYWxsKCJkYXRhUHJvY2Vzc1Bhc3MxRW5kIix0aGlzKSx5bih5aSksdGhpcy5f''@;'; put 'put ''ZGlzcGF0Y2guY2FsbCgiZGF0YVByb2Nlc3NQYXNzMkVuZCIsdGhpcyksdGhpcy5fZGF0YT15aSx0aGlzLl9kaWN0aW9uYXJ5PUQsdGhpcy5fbm9kZURpY3Rpb25hcnk9bmUsdGhpcy5fZXh0cmFjdERhdGE9ZnVuY3Rpb24oR24saWksX2kpe3ZhciBQbj1xOShHbik7cmV0dXJuIGx0KFBuLGlp''@;'; put 'put ''LF9pKSx5bihQbiksUG59LHRoaXMuX2J1c3k9ITEsdGhpcy5fZGlzcGF0Y2guY2FsbCgiZGF0YVByb2Nlc3NFbmQiLHRoaXMpLGwmJmwuY2FsbCh0aGlzKSx0aGlzLl9xdWV1ZS5sZW5ndGg+MCYmdGhpcy5fcXVldWUuc2hpZnQoKS5jYWxsKHRoaXMpfWZ1bmN0aW9uIFROKGMsbCl7aWYoKGE9''@;'; put 'put ''KGM9bD9jLnRvRXhwb25lbnRpYWwobC0xKTpjLnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZigiZSIpKTwwKXJldHVybiBudWxsO3ZhciBhLGQ9Yy5zbGljZSgwLGEpO3JldHVybltkLmxlbmd0aD4xP2RbMF0rZC5zbGljZSgyKTpkLCtjLnNsaWNlKGErMSldfXZhciBIOGUsUnh0PS9eKD86KC4p''@;'; put 'put ''PyhbPD49Xl0pKT8oWytcLSggXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuXGQrKT8ofik/KFthLXolXSk/JC9pO2Z1bmN0aW9uIFR0ZShjKXtpZighKGw9Unh0LmV4ZWMoYykpKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBmb3JtYXQ6ICIrYyk7dmFyIGw7cmV0dXJuIG5ldyBBdGUoe2Zp''@;'; put 'put ''bGw6bFsxXSxhbGlnbjpsWzJdLHNpZ246bFszXSxzeW1ib2w6bFs0XSx6ZXJvOmxbNV0sd2lkdGg6bFs2XSxjb21tYTpsWzddLHByZWNpc2lvbjpsWzhdJiZsWzhdLnNsaWNlKDEpLHRyaW06bFs5XSx0eXBlOmxbMTBdfSl9ZnVuY3Rpb24gQXRlKGMpe3RoaXMuZmlsbD12b2lkIDA9PT1jLmZp''@;'; put 'put ''bGw/IiAiOmMuZmlsbCsiIix0aGlzLmFsaWduPXZvaWQgMD09PWMuYWxpZ24/Ij4iOmMuYWxpZ24rIiIsdGhpcy5zaWduPXZvaWQgMD09PWMuc2lnbj8iLSI6Yy5zaWduKyIiLHRoaXMuc3ltYm9sPXZvaWQgMD09PWMuc3ltYm9sPyIiOmMuc3ltYm9sKyIiLHRoaXMuemVybz0hIWMuemVybyx0''@;'; put 'put ''aGlzLndpZHRoPXZvaWQgMD09PWMud2lkdGg/dm9pZCAwOitjLndpZHRoLHRoaXMuY29tbWE9ISFjLmNvbW1hLHRoaXMucHJlY2lzaW9uPXZvaWQgMD09PWMucHJlY2lzaW9uP3ZvaWQgMDorYy5wcmVjaXNpb24sdGhpcy50cmltPSEhYy50cmltLHRoaXMudHlwZT12b2lkIDA9PT1jLnR5cGU/''@;'; put 'put ''IiI6Yy50eXBlKyIifWZ1bmN0aW9uIE44ZShjLGwpe3ZhciBhPVROKGMsbCk7aWYoIWEpcmV0dXJuIGMrIiI7dmFyIGQ9YVswXSxoPWFbMV07cmV0dXJuIGg8MD8iMC4iK25ldyBBcnJheSgtaCkuam9pbigiMCIpK2Q6ZC5sZW5ndGg+aCsxP2Quc2xpY2UoMCxoKzEpKyIuIitkLnNsaWNlKGgr''@;'; put 'put ''MSk6ZCtuZXcgQXJyYXkoaC1kLmxlbmd0aCsyKS5qb2luKCIwIil9VHRlLnByb3RvdHlwZT1BdGUucHJvdG90eXBlLEF0ZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5maWxsK3RoaXMuYWxpZ24rdGhpcy5zaWduK3RoaXMuc3ltYm9sKyh0aGlzLnplcm8/IjAi''@;'; put 'put ''OiIiKSsodm9pZCAwPT09dGhpcy53aWR0aD8iIjpNYXRoLm1heCgxLDB8dGhpcy53aWR0aCkpKyh0aGlzLmNvbW1hPyIsIjoiIikrKHZvaWQgMD09PXRoaXMucHJlY2lzaW9uPyIiOiIuIitNYXRoLm1heCgwLDB8dGhpcy5wcmVjaXNpb24pKSsodGhpcy50cmltPyJ+IjoiIikrdGhpcy50eXBl''@;'; put 'put ''fTtjb25zdCBWOGU9eyIlIjooYyxsKT0+KDEwMCpjKS50b0ZpeGVkKGwpLGI6Yz0+TWF0aC5yb3VuZChjKS50b1N0cmluZygyKSxjOmM9PmMrIiIsZDpmdW5jdGlvbiBBeHQoYyl7cmV0dXJuIE1hdGguYWJzKGM9TWF0aC5yb3VuZChjKSk+PTFlMjE/Yy50b0xvY2FsZVN0cmluZygiZW4iKS5y''@;'; put 'put ''ZXBsYWNlKC8sL2csIiIpOmMudG9TdHJpbmcoMTApfSxlOihjLGwpPT5jLnRvRXhwb25lbnRpYWwobCksZjooYyxsKT0+Yy50b0ZpeGVkKGwpLGc6KGMsbCk9PmMudG9QcmVjaXNpb24obCksbzpjPT5NYXRoLnJvdW5kKGMpLnRvU3RyaW5nKDgpLHA6KGMsbCk9Pk44ZSgxMDAqYyxsKSxyOk44''@;'; put 'put ''ZSxzOmZ1bmN0aW9uIE94dChjLGwpe3ZhciBhPVROKGMsbCk7aWYoIWEpcmV0dXJuIGMrIiI7dmFyIGQ9YVswXSxoPWFbMV0sZj1oLShIOGU9MypNYXRoLm1heCgtOCxNYXRoLm1pbig4LE1hdGguZmxvb3IoaC8zKSkpKSsxLHY9ZC5sZW5ndGg7cmV0dXJuIGY9PT12P2Q6Zj52P2QrbmV3IEFy''@;'; put 'put ''cmF5KGYtdisxKS5qb2luKCIwIik6Zj4wP2Quc2xpY2UoMCxmKSsiLiIrZC5zbGljZShmKToiMC4iK25ldyBBcnJheSgxLWYpLmpvaW4oIjAiKStUTihjLE1hdGgubWF4KDAsbCtmLTEpKVswXX0sWDpjPT5NYXRoLnJvdW5kKGMpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLHg6Yz0+TWF0''@;'; put 'put ''aC5yb3VuZChjKS50b1N0cmluZygxNil9O2Z1bmN0aW9uIEI4ZShjKXtyZXR1cm4gY312YXIgQU4sWDIsajhlPUFycmF5LnByb3RvdHlwZS5tYXAsejhlPVsieSIsInoiLCJhIiwiZiIsInAiLCJuIiwiXHhiNSIsIm0iLCIiLCJrIiwiTSIsIkciLCJUIiwiUCIsIkUiLCJaIiwiWSJdOyFmdW5j''@;'; put 'put ''dGlvbiBIeHQoYyl7QU49ZnVuY3Rpb24gUHh0KGMpe3ZhciBsPXZvaWQgMD09PWMuZ3JvdXBpbmd8fHZvaWQgMD09PWMudGhvdXNhbmRzP0I4ZTpmdW5jdGlvbiBEeHQoYyxsKXtyZXR1cm4gZnVuY3Rpb24oYSxkKXtmb3IodmFyIGg9YS5sZW5ndGgsZj1bXSx2PTAsTT1jWzBdLEQ9MDtoPjAm''@;'; put 'put ''Jk0+MCYmKEQrTSsxPmQmJihNPU1hdGgubWF4KDEsZC1EKSksZi5wdXNoKGEuc3Vic3RyaW5nKGgtPU0saCtNKSksISgoRCs9TSsxKT5kKSk7KU09Y1t2PSh2KzEpJWMubGVuZ3RoXTtyZXR1cm4gZi5yZXZlcnNlKCkuam9pbihsKX19KGo4ZS5jYWxsKGMuZ3JvdXBpbmcsTnVtYmVyKSxjLnRo''@;'; put 'put ''b3VzYW5kcysiIiksYT12b2lkIDA9PT1jLmN1cnJlbmN5PyIiOmMuY3VycmVuY3lbMF0rIiIsZD12b2lkIDA9PT1jLmN1cnJlbmN5PyIiOmMuY3VycmVuY3lbMV0rIiIsaD12b2lkIDA9PT1jLmRlY2ltYWw/Ii4iOmMuZGVjaW1hbCsiIixmPXZvaWQgMD09PWMubnVtZXJhbHM/QjhlOmZ1bmN0''@;'; put 'put ''aW9uIEl4dChjKXtyZXR1cm4gZnVuY3Rpb24obCl7cmV0dXJuIGwucmVwbGFjZSgvWzAtOV0vZyxmdW5jdGlvbihhKXtyZXR1cm4gY1srYV19KX19KGo4ZS5jYWxsKGMubnVtZXJhbHMsU3RyaW5nKSksdj12b2lkIDA9PT1jLnBlcmNlbnQ/IiUiOmMucGVyY2VudCsiIixNPXZvaWQgMD09PWMu''@;'; put 'put ''bWludXM/Ilx1MjIxMiI6Yy5taW51cysiIixEPXZvaWQgMD09PWMubmFuPyJOYU4iOmMubmFuKyIiO2Z1bmN0aW9uIFooY2Upe3ZhciBiZT0oY2U9VHRlKGNlKSkuZmlsbCxFZT1jZS5hbGlnbixCZT1jZS5zaWduLHFlPWNlLnN5bWJvbCxudD1jZS56ZXJvLGx0PWNlLndpZHRoLG10PWNlLmNv''@;'; put 'put ''bW1hLEp0PWNlLnByZWNpc2lvbix5bj1jZS50cmltLENuPWNlLnR5cGU7Im4iPT09Q24/KG10PSEwLENuPSJnIik6VjhlW0NuXXx8KHZvaWQgMD09PUp0JiYoSnQ9MTIpLHluPSEwLENuPSJnIiksKG50fHwiMCI9PT1iZSYmIj0iPT09RWUpJiYobnQ9ITAsYmU9IjAiLEVlPSI9Iik7dmFyIHRu''@;'; put 'put ''PSIkIj09PXFlP2E6IiMiPT09cWUmJi9bYm94WF0vLnRlc3QoQ24pPyIwIitDbi50b0xvd2VyQ2FzZSgpOiIiLHhuPSIkIj09PXFlP2Q6L1slcF0vLnRlc3QoQ24pP3Y6IiIsUW49VjhlW0NuXSx5aT0vW2RlZmdwcnMlXS8udGVzdChDbik7ZnVuY3Rpb24geXIoR24pe3ZhciBQbixqcixYbixp''@;'; put 'put ''aT10bixfaT14bjtpZigiYyI9PT1DbilfaT1RbihHbikrX2ksR249IiI7ZWxzZXt2YXIgSXI9KEduPStHbik8MHx8MS9HbjwwO2lmKEduPWlzTmFOKEduKT9EOlFuKE1hdGguYWJzKEduKSxKdCkseW4mJihHbj1mdW5jdGlvbiBMeHQoYyl7ZTpmb3IodmFyIGgsbD1jLmxlbmd0aCxhPTEsZD0t''@;'; put 'put ''MTthPGw7KythKXN3aXRjaChjW2FdKXtjYXNlIi4iOmQ9aD1hO2JyZWFrO2Nhc2UiMCI6MD09PWQmJihkPWEpLGg9YTticmVhaztkZWZhdWx0OmlmKCErY1thXSlicmVhayBlO2Q+MCYmKGQ9MCl9cmV0dXJuIGQ+MD9jLnNsaWNlKDAsZCkrYy5zbGljZShoKzEpOmN9KEduKSksSXImJjA9PStH''@;'; put 'put ''biYmIisiIT09QmUmJihJcj0hMSksaWk9KElyPyIoIj09PUJlP0JlOk06Ii0iPT09QmV8fCIoIj09PUJlPyIiOkJlKStpaSxfaT0oInMiPT09Q24/ejhlWzgrSDhlLzNdOiIiKStfaSsoSXImJiIoIj09PUJlPyIpIjoiIikseWkpZm9yKFBuPS0xLGpyPUduLmxlbmd0aDsrK1BuPGpyOylpZig0''@;'; put 'put ''OD4oWG49R24uY2hhckNvZGVBdChQbikpfHxYbj41Nyl7X2k9KDQ2PT09WG4/aCtHbi5zbGljZShQbisxKTpHbi5zbGljZShQbikpK19pLEduPUduLnNsaWNlKDAsUG4pO2JyZWFrfX1tdCYmIW50JiYoR249bChHbiwxLzApKTt2YXIgJHI9aWkubGVuZ3RoK0duLmxlbmd0aCtfaS5sZW5ndGgs''@;'; put 'put ''d2k9JHI8bHQ/bmV3IEFycmF5KGx0LSRyKzEpLmpvaW4oYmUpOiIiO3N3aXRjaChtdCYmbnQmJihHbj1sKHdpK0duLHdpLmxlbmd0aD9sdC1faS5sZW5ndGg6MS8wKSx3aT0iIiksRWUpe2Nhc2UiPCI6R249aWkrR24rX2krd2k7YnJlYWs7Y2FzZSI9IjpHbj1paSt3aStHbitfaTticmVhaztj''@;'; put 'put ''YXNlIl4iOkduPXdpLnNsaWNlKDAsJHI9d2kubGVuZ3RoPj4xKStpaStHbitfaSt3aS5zbGljZSgkcik7YnJlYWs7ZGVmYXVsdDpHbj13aStpaStHbitfaX1yZXR1cm4gZihHbil9cmV0dXJuIEp0PXZvaWQgMD09PUp0PzY6L1tncHJzXS8udGVzdChDbik/TWF0aC5tYXgoMSxNYXRoLm1pbigy''@;'; put 'put ''MSxKdCkpOk1hdGgubWF4KDAsTWF0aC5taW4oMjAsSnQpKSx5ci50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBjZSsiIn0seXJ9cmV0dXJue2Zvcm1hdDpaLGZvcm1hdFByZWZpeDpmdW5jdGlvbiBuZShjZSxiZSl7dmFyIEVlPVooKChjZT1UdGUoY2UpKS50eXBlPSJmIixjZSkpLEJlPTMq''@;'; put 'put ''TWF0aC5tYXgoLTgsTWF0aC5taW4oOCxNYXRoLmZsb29yKGZ1bmN0aW9uIGt4dChjKXtyZXR1cm4oYz1UTihNYXRoLmFicyhjKSkpP2NbMV06TmFOfShiZSkvMykpKSxxZT1NYXRoLnBvdygxMCwtQmUpLG50PXo4ZVs4K0JlLzNdO3JldHVybiBmdW5jdGlvbihsdCl7cmV0dXJuIEVlKHFlKmx0''@;'; put 'put ''KStudH19fX0oYyksWDI9QU4uZm9ybWF0fSh7dGhvdXNhbmRzOiIsIixncm91cGluZzpbM10sY3VycmVuY3k6WyIkIiwiIl19KTtjb25zdCBrdGU9TWF0aC5QSSxEdGU9MiprdGUsSjk9MWUtNixCeHQ9RHRlLUo5O2Z1bmN0aW9uIFU4ZShjKXt0aGlzLl8rPWNbMF07Zm9yKGxldCBsPTEsYT1j''@;'; put 'put ''Lmxlbmd0aDtsPGE7KytsKXRoaXMuXys9YXJndW1lbnRzW2xdK2NbbF19Y2xhc3MgSXRle2NvbnN0cnVjdG9yKGwpe3RoaXMuX3gwPXRoaXMuX3kwPXRoaXMuX3gxPXRoaXMuX3kxPW51bGwsdGhpcy5fPSIiLHRoaXMuX2FwcGVuZD1udWxsPT1sP1U4ZTpmdW5jdGlvbiBqeHQoYyl7bGV0IGw9''@;'; put 'put ''TWF0aC5mbG9vcihjKTtpZighKGw+PTApKXRocm93IG5ldyBFcnJvcihgaW52YWxpZCBkaWdpdHM6ICR7Y31gKTtpZihsPjE1KXJldHVybiBVOGU7Y29uc3QgYT0xMCoqbDtyZXR1cm4gZnVuY3Rpb24oZCl7dGhpcy5fKz1kWzBdO2ZvcihsZXQgaD0xLGY9ZC5sZW5ndGg7aDxmOysraCl0aGlz''@;'; put 'put ''Ll8rPU1hdGgucm91bmQoYXJndW1lbnRzW2hdKmEpL2ErZFtoXX19KGwpfW1vdmVUbyhsLGEpe3RoaXMuX2FwcGVuZGBNJHt0aGlzLl94MD10aGlzLl94MT0rbH0sJHt0aGlzLl95MD10aGlzLl95MT0rYX1gfWNsb3NlUGF0aCgpe251bGwhPT10aGlzLl94MSYmKHRoaXMuX3gxPXRoaXMuX3gw''@;'; put 'put ''LHRoaXMuX3kxPXRoaXMuX3kwLHRoaXMuX2FwcGVuZGBaYCl9bGluZVRvKGwsYSl7dGhpcy5fYXBwZW5kYEwke3RoaXMuX3gxPStsfSwke3RoaXMuX3kxPSthfWB9cXVhZHJhdGljQ3VydmVUbyhsLGEsZCxoKXt0aGlzLl9hcHBlbmRgUSR7K2x9LCR7K2F9LCR7dGhpcy5feDE9K2R9LCR7dGhp''@;'; put 'put ''cy5feTE9K2h9YH1iZXppZXJDdXJ2ZVRvKGwsYSxkLGgsZix2KXt0aGlzLl9hcHBlbmRgQyR7K2x9LCR7K2F9LCR7K2R9LCR7K2h9LCR7dGhpcy5feDE9K2Z9LCR7dGhpcy5feTE9K3Z9YH1hcmNUbyhsLGEsZCxoLGYpe2lmKGw9K2wsYT0rYSxkPStkLGg9K2gsKGY9K2YpPDApdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKGBuZWdhdGl2ZSByYWRpdXM6ICR7Zn1gKTtsZXQgdj10aGlzLl94MSxNPXRoaXMuX3kxLEQ9ZC1sLFo9aC1hLG5lPXYtbCxjZT1NLWEsYmU9bmUqbmUrY2UqY2U7aWYobnVsbD09PXRoaXMuX3gxKXRoaXMuX2FwcGVuZGBNJHt0aGlzLl94MT1sfSwke3RoaXMuX3kxPWF9YDtlbHNl''@;'; put 'put ''IGlmKGJlPko5KWlmKE1hdGguYWJzKGNlKkQtWipuZSk+SjkmJmYpe2xldCBFZT1kLXYsQmU9aC1NLHFlPUQqRCtaKlosbnQ9RWUqRWUrQmUqQmUsbHQ9TWF0aC5zcXJ0KHFlKSxtdD1NYXRoLnNxcnQoYmUpLEp0PWYqTWF0aC50YW4oKGt0ZS1NYXRoLmFjb3MoKHFlK2JlLW50KS8oMipsdCpt''@;'; put 'put ''dCkpKS8yKSx5bj1KdC9tdCxDbj1KdC9sdDtNYXRoLmFicyh5bi0xKT5KOSYmdGhpcy5fYXBwZW5kYEwke2wreW4qbmV9LCR7YSt5bipjZX1gLHRoaXMuX2FwcGVuZGBBJHtmfSwke2Z9LDAsMCwkeysoY2UqRWU+bmUqQmUpfSwke3RoaXMuX3gxPWwrQ24qRH0sJHt0aGlzLl95MT1hK0NuKlp9''@;'; put 'put ''YH1lbHNlIHRoaXMuX2FwcGVuZGBMJHt0aGlzLl94MT1sfSwke3RoaXMuX3kxPWF9YH1hcmMobCxhLGQsaCxmLHYpe2lmKGw9K2wsYT0rYSx2PSEhdiwoZD0rZCk8MCl0aHJvdyBuZXcgRXJyb3IoYG5lZ2F0aXZlIHJhZGl1czogJHtkfWApO2xldCBNPWQqTWF0aC5jb3MoaCksRD1kKk1hdGgu''@;'; put 'put ''c2luKGgpLFo9bCtNLG5lPWErRCxjZT0xXnYsYmU9dj9oLWY6Zi1oO251bGw9PT10aGlzLl94MT90aGlzLl9hcHBlbmRgTSR7Wn0sJHtuZX1gOihNYXRoLmFicyh0aGlzLl94MS1aKT5KOXx8TWF0aC5hYnModGhpcy5feTEtbmUpPko5KSYmdGhpcy5fYXBwZW5kYEwke1p9LCR7bmV9YCxkJiYo''@;'; put 'put ''YmU8MCYmKGJlPWJlJUR0ZStEdGUpLGJlPkJ4dD90aGlzLl9hcHBlbmRgQSR7ZH0sJHtkfSwwLDEsJHtjZX0sJHtsLU19LCR7YS1EfUEke2R9LCR7ZH0sMCwxLCR7Y2V9LCR7dGhpcy5feDE9Wn0sJHt0aGlzLl95MT1uZX1gOmJlPko5JiZ0aGlzLl9hcHBlbmRgQSR7ZH0sJHtkfSwwLCR7Kyhi''@;'; put 'put ''ZT49a3RlKX0sJHtjZX0sJHt0aGlzLl94MT1sK2QqTWF0aC5jb3MoZil9LCR7dGhpcy5feTE9YStkKk1hdGguc2luKGYpfWApfXJlY3QobCxhLGQsaCl7dGhpcy5fYXBwZW5kYE0ke3RoaXMuX3gwPXRoaXMuX3gxPStsfSwke3RoaXMuX3kwPXRoaXMuX3kxPSthfWgke2Q9K2R9diR7K2h9aCR7''@;'; put 'put ''LWR9WmB9dG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5ffX1mdW5jdGlvbiBaOGUoKXtyZXR1cm4gbmV3IEl0ZX1mdW5jdGlvbiB6eHQoYyxsLGEsZCl7cmV0dXJuIGw9LWwsZD0tZCxbYyxsXT1bYyphLWwqZCxjKmQrbCphXSxbYyxsPS1sXX1mdW5jdGlvbiBXOGUoYyxsLGEsZCxoLGYsdil7dmFy''@;'; put 'put ''IEQ9cTkoSzhlLmNhbGwodGhpcyxmKSk7Yy5kYXRhKFtEXSksVEEuY2FsbChjLm5vZGUoKSxEKSxZOGUoYyxsLGEsZCxoLGYsdil9ZnVuY3Rpb24gWThlKGMsbCxhLGQsaCxmLHYpe3ZhciBNPXYuc2hvcnRlbmluZ3x8MCxjZT1bWzAsLTMuNV0sWzEwLDBdLFswLDMuNV0sWzAsLTMuNV1dLGJl''@;'; put 'put ''PWQtbCxFZT1oLWEsQmU9TWF0aC5zcXJ0KGJlKmJlK0VlKkVlKTtpZigwPT1CZSl2YXIgcWU9MSxudD0wO2Vsc2UgcWU9YmUvQmUsbnQ9RWUvQmU7aWYoZD1sKyhCZS1NLTEwLS4xKSpxZSxoPWErKEJlLU0tMTAtLjEpKm50LGYuVVJMfHxmLnRvb2x0aXApdmFyIGx0PWMuc2VsZWN0V2l0aG91''@;'; put 'put ''dERhdGFQcm9wYWdhdGlvbigiZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImEiKSxtdD1sdC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJwYXRoIiksSnQ9bHQuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigicG9seWdvbiIpO2Vsc2UgbXQ9Yy5zZWxlY3RXaXRo''@;'; put 'put ''b3V0RGF0YVByb3BhZ2F0aW9uKCJwYXRoIiksSnQ9Yy5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJwb2x5Z29uIik7dmFyIHluPVo4ZSgpO3luLm1vdmVUbyhsLGEpLHluLmxpbmVUbyhkLGgpLG10LmF0dHIoImQiLHluKSxkPWwrKEJlLU0tMTApKnFlLGg9YSsoQmUtTS0xMCkqbnQ7''@;'; put 'put ''Zm9yKHZhciBDbj0wO0NuPGNlLmxlbmd0aDtDbisrKWNlW0NuXT16eHQoKHRuPWNlW0NuXSlbMF0sdG5bMV0scWUsbnQpO2ZvcihDbj0wO0NuPGNlLmxlbmd0aDtDbisrKWNlW0NuXT1bZCsodG49Y2VbQ25dKVswXSxoK3RuWzFdXTt2YXIgeG49W107Zm9yKENuPTA7Q248Y2UubGVuZ3RoO0Nu''@;'; put 'put ''Kyspe3ZhciB0bjt4bi5wdXNoKCh0bj1jZVtDbl0pLmpvaW4oIiwiKSl9dmFyIFFuPXhuLmpvaW4oIiAiKTtyZXR1cm4gSnQuYXR0cigicG9pbnRzIixRbiksdGhpc31mdW5jdGlvbiBHOGUoKXtyZXR1cm4gdGhpcy5fZHJhd25FZGdlPyh0aGlzLl9kcmF3bkVkZ2UuZy5yZW1vdmUoKSx0aGlz''@;'; put 'put ''Ll9kcmF3bkVkZ2U9bnVsbCx0aGlzKTp0aGlzfWZ1bmN0aW9uICQ4ZSgpe3JldHVybiB0aGlzLl9kcmF3bkVkZ2U/dGhpcy5fZHJhd25FZGdlLmc6d3MobnVsbCl9ZnVuY3Rpb24gSzhlKGMpe3ZhciBsPSIiO2Zvcih2YXIgYSBvZiBPYmplY3Qua2V5cyhjKSludWxsIT1jW2FdJiYobCs9JyAi''@;'; put 'put ''JythKyciPSInK2NbYV0rJyInKTt2YXIgaD10aGlzLmxheW91dFN5bmMoImRpZ3JhcGgge2EgLT4gYiBbIitsKyJdfSIsInN2ZyIsImRvdCIpLHY9KG5ldyB3aW5kb3cuRE9NUGFyc2VyKS5wYXJzZUZyb21TdHJpbmcoaCwiaW1hZ2Uvc3ZnK3htbCIpO3JldHVybiB3cyhkb2N1bWVudC5jcmVh''@;'; put 'put ''dGVEb2N1bWVudEZyYWdtZW50KCkpLmFwcGVuZChmdW5jdGlvbigpe3JldHVybiB2LmRvY3VtZW50RWxlbWVudH0pLnNlbGVjdCgiLmVkZ2UiKX1mdW5jdGlvbiBxOGUoYyxsLGEsZCxoLGYpe3ZhciBNPXE5KGU3ZS5jYWxsKHRoaXMsZCxoKSk7cmV0dXJuIGMuZGF0YShbTV0pLFRBLmNhbGwo''@;'; put 'put ''Yy5ub2RlKCksTSksWDhlKGMsbCxhLGgpLHRoaXN9ZnVuY3Rpb24gWDhlKGMsbCxhLGQsaCl7aWYoZC5VUkx8fGQudG9vbHRpcCl2YXIgZj1jLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJhIik7ZWxzZSBmPWM7dmFyIHY9''@;'; put 'put ''Zi5zZWxlY3RBbGwoImVsbGlwc2UscG9seWdvbixwYXRoLHBvbHlsaW5lIiksTT1jLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInRleHQiKTtpZigwIT12LnNpemUoKSl7dmFyIEQ9di5ub2RlKCkuZ2V0QkJveCgpO0QuY3g9RC54K0Qud2lkdGgvMixELmN5PUQueStELmhlaWdodC8y''@;'; put 'put ''fWVsc2UgMCE9TS5zaXplKCkmJihEPXt4OitNLmF0dHIoIngiKSx5OitNLmF0dHIoInkiKSx3aWR0aDowLGhlaWdodDowLGN4OitNLmF0dHIoIngiKSxjeTorTS5hdHRyKCJ5Iil9KTtyZXR1cm4gdi5lYWNoKGZ1bmN0aW9uKFosbmUpe3ZhciBjZT13cyh0aGlzKTtpZihjZS5hdHRyKCJjeCIp''@;'; put 'put ''KWNlLmF0dHIoImN4Iix3NihsKSkuYXR0cigiY3kiLHc2KGEpKTtlbHNlIGlmKGNlLmF0dHIoInBvaW50cyIpKXt2YXIgYmU9Y2UuYXR0cigicG9pbnRzIikudHJpbSgpO2NlLmF0dHIoInBvaW50cyIsZnVuY3Rpb24gbnh0KGYsbCxhKXt2YXIgaCxkPShoPWYuc3BsaXQoIiAiKSkubWFwKGZ1''@;'; put 'put ''bmN0aW9uKHYpe3JldHVybiB2LnNwbGl0KCIsIil9KTtyZXR1cm4gZD1oLm1hcChmdW5jdGlvbih2KXtyZXR1cm5bdzYoK2wrICt2LnNwbGl0KCIsIilbMF0pLHc2KCthKyArdi5zcGxpdCgiLCIpWzFdKV19KSwoaD1kLm1hcChmdW5jdGlvbih2KXtyZXR1cm4gdi5qb2luKCIsIil9KSkuam9p''@;'; put 'put ''bigiICIpfShiZSxsLUQuY3gsYS1ELmN5KSl9ZWxzZXt2YXIgRWU9Y2UuYXR0cigiZCIpO2NlLmF0dHIoImQiLGZ1bmN0aW9uIHJ4dChjLGwsYSl7KGY9Yy5zcGxpdCgvW0EtWiBdLykpLnNoaWZ0KCk7dmFyIGQ9Yy5zcGxpdCgvW15bQS1aIF0rLyksZj0oZi5tYXAoZnVuY3Rpb24odil7cmV0''@;'; put 'put ''dXJuIHYuc3BsaXQoIiwiKX0pLGYubWFwKGZ1bmN0aW9uKHYpe3JldHVyblt3NigrbCsgK3Yuc3BsaXQoIiwiKVswXSksdzYoK2ErICt2LnNwbGl0KCIsIilbMV0pXX0pLm1hcChmdW5jdGlvbih2KXtyZXR1cm4gdi5qb2luKCIsIil9KSk7cmV0dXJuIGQucmVkdWNlKGZ1bmN0aW9uKHYsTSxE''@;'; put 'put ''KXtyZXR1cm4gdi5jb25jYXQoTSxmW0RdKX0sW10pLmpvaW4oIiIpfShFZSxsLUQuY3gsYS1ELmN5KSl9fSksMCE9TS5zaXplKCkmJk0uYXR0cigieCIsdzYoK00uYXR0cigieCIpK2wtRC5jeCkpLmF0dHIoInkiLHc2KCtNLmF0dHIoInkiKSthLUQuY3kpKSx0aGlzfWZ1bmN0aW9uIEo4ZSgp''@;'; put 'put ''e2lmKCF0aGlzLl9kcmF3bk5vZGUpcmV0dXJuIHRoaXM7dmFyIGM9dGhpcy5fZHJhd25Ob2RlLmc7cmV0dXJuIGMuZW1wdHkoKXx8Yy5yZW1vdmUoKSx0aGlzLl9kcmF3bk5vZGU9bnVsbCx0aGlzfWZ1bmN0aW9uIFE4ZSgpe3JldHVybiB0aGlzLl9kcmF3bk5vZGU/dGhpcy5fZHJhd25Ob2Rl''@;'; put 'put ''Lmc6d3MobnVsbCl9ZnVuY3Rpb24gZTdlKGMsbCl7dmFyIGE9IiI7Zm9yKHZhciBkIG9mIE9iamVjdC5rZXlzKGwpKW51bGwhPWxbZF0mJihhKz0nICInK2QrJyI9IicrbFtkXSsnIicpO3ZhciBmPXRoaXMubGF5b3V0U3luYygnZ3JhcGggeyInK2MrJyIgWycrYSsiXX0iLCJzdmciLCJkb3Qi''@;'; put 'put ''KSxNPShuZXcgd2luZG93LkRPTVBhcnNlcikucGFyc2VGcm9tU3RyaW5nKGYsImltYWdlL3N2Zyt4bWwiKTtyZXR1cm4gd3MoZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKS5hcHBlbmQoZnVuY3Rpb24oKXtyZXR1cm4gTS5kb2N1bWVudEVsZW1lbnR9KS5zZWxlY3QoIi5ub2Rl''@;'; put 'put ''Iil9ZnVuY3Rpb24ga04oYyl7c2VsZi5kb2N1bWVudD17fSxjLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uKGwpe2xldCBhPXNlbGZbIkBocGNjLWpzL3dhc20iXTtudWxsPT1hJiZsLmRhdGEudml6VVJMJiYoaW1wb3J0U2NyaXB0cyhsLmRhdGEudml6VVJMKSxhPXNlbGZb''@;'; put 'put ''IkBocGNjLWpzL3dhc20iXSksInZlcnNpb24iIT1sLmRhdGEudHlwZT9hLkdyYXBodml6LmxvYWQoKS50aGVuKGQ9Pntjb25zdCBoPWQubGF5b3V0KGwuZGF0YS5kb3QsInN2ZyIsbC5kYXRhLmVuZ2luZSxsLmRhdGEub3B0aW9ucyk7Yy5wb3N0TWVzc2FnZShoP3t0eXBlOiJkb25lIixzdmc6''@;'; put 'put ''aH06bC5kYXRhLnZpelVSTD97dHlwZToiaW5pdCJ9Ont0eXBlOiJza2lwIn0pfSkuY2F0Y2goZD0+e2MucG9zdE1lc3NhZ2Uoe3R5cGU6ImVycm9yIixlcnJvcjpkLm1lc3NhZ2V9KX0pOmEuR3JhcGh2aXoubG9hZCgpLnRoZW4oZD0+e2MucG9zdE1lc3NhZ2Uoe3R5cGU6InZlcnNpb24iLHZl''@;'; put 'put ''cnNpb246ZC52ZXJzaW9uKCl9KX0pfSl9ZnVuY3Rpb24gWHh0KCl7a04oc2VsZil9ZnVuY3Rpb24gSnh0KCl7c2VsZi5vbmNvbm5lY3Q9ZnVuY3Rpb24oYyl7Y29uc3QgbD1jLnBvcnRzWzBdO2tOKGwpLGwuc3RhcnQoKX19ZnVuY3Rpb24gUnRlKGMsbCl7aWYodGhpcy5fb3B0aW9ucz17dXNl''@;'; put 'put ''V29ya2VyOiEwLHVzZVNoYXJlZFdvcmtlcjohMSxlbmdpbmU6ImRvdCIsa2V5TW9kZToidGl0bGUiLGZhZGU6ITAsdHdlZW5QYXRoczohMCx0d2VlblNoYXBlczohMCxjb252ZXJ0RXF1YWxTaWRlZFBvbHlnb25zOiEwLHR3ZWVuUHJlY2lzaW9uOjEsZ3Jvd0VudGVyaW5nRWRnZXM6ITAsem9v''@;'; put 'put ''bTohMCx6b29tU2NhbGVFeHRlbnQ6Wy4xLDEwXSx6b29tVHJhbnNsYXRlRXh0ZW50OltbLTEvMCwtMS8wXSxbMS8wLDEvMF1dLHdpZHRoOm51bGwsaGVpZ2h0Om51bGwsc2NhbGU6MSxmaXQ6ITF9LGwgaW5zdGFuY2VvZiBPYmplY3QpZm9yKHZhciBhIG9mIE9iamVjdC5rZXlzKGwpKXRoaXMu''@;'; put 'put ''X29wdGlvbnNbYV09bFthXTtlbHNlImJvb2xlYW4iPT10eXBlb2YgbCYmKHRoaXMuX29wdGlvbnMudXNlV29ya2VyPWwpO3ZhciBkPXRoaXMuX29wdGlvbnMudXNlV29ya2VyLGg9dGhpcy5fb3B0aW9ucy51c2VTaGFyZWRXb3JrZXI7aWYodHlwZW9mIFdvcmtlcj4idSImJihkPSExKSx0eXBl''@;'; put 'put ''b2YgU2hhcmVkV29ya2VyPiJ1IiYmKGg9ITEpLGR8fGgpe3ZhciB2PUplZSgic2NyaXB0IikuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuImphdmFzY3JpcHQvd29ya2VyIj09d3ModGhpcykuYXR0cigidHlwZSIpfHx3cyh0aGlzKS5hdHRyKCJzcmMiKSYmd3ModGhpcykuYXR0cigic3JjIiku''@;'; put 'put ''bWF0Y2goLy4qXC9AaHBjYy1qc1wvd2FzbS8pfSk7MD09di5zaXplKCk/KGNvbnNvbGUud2FybignTm8gc2NyaXB0IHRhZyBvZiB0eXBlICJqYXZhc2NyaXB0L3dvcmtlciIgd2FzIGZvdW5kIGFuZCAidXNlV29ya2VyIiBpcyB0cnVlLiBOb3QgdXNpbmcgd2ViIHdvcmtlci4nKSxkPSExLGg9''@;'; put 'put ''ITEpOih0aGlzLl92aXpVUkw9di5hdHRyKCJzcmMiKSx0aGlzLl92aXpVUkx8fChjb25zb2xlLndhcm4oJ05vICJzcmMiIGF0dHJpYnV0ZSBvZiB3YXMgZm91bmQgb24gdGhlICJqYXZhc2NyaXB0L3dvcmtlciIgc2NyaXB0IHRhZyBhbmQgInVzZVdvcmtlciIgaXMgdHJ1ZS4gTm90IHVzaW5n''@;'; put 'put ''IHdlYiB3b3JrZXIuJyksZD0hMSxoPSExKSl9aWYoaCl7Y29uc3QgWj0iZGF0YTphcHBsaWNhdGlvbi9qYXZhc2NyaXB0O2Jhc2U2NCwiK2J0b2Eoa04udG9TdHJpbmcoKSsiKCIrSnh0LnRvU3RyaW5nKCkrIikoKSIpO3RoaXMuX3dvcmtlcj10aGlzLl93b3JrZXI9bmV3IFNoYXJlZFdvcmtl''@;'; put 'put ''cihaKSx0aGlzLl93b3JrZXJQb3J0PXRoaXMuX3dvcmtlci5wb3J0LHRoaXMuX3dvcmtlclBvcnRDbG9zZT10aGlzLl93b3JrZXIucG9ydC5jbG9zZS5iaW5kKHRoaXMuX3dvcmtlclBvcnQpLHRoaXMuX3dvcmtlci5wb3J0LnN0YXJ0KCksdGhpcy5fd29ya2VyQ2FsbGJhY2tzPVtdfWVsc2Ug''@;'; put 'put ''aWYoZCl7dmFyIE09bmV3IEJsb2IoW2tOLnRvU3RyaW5nKCkrIigiK1h4dC50b1N0cmluZygpKyIpKCkiXSksRD13aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChNKTt0aGlzLl93b3JrZXI9bmV3IFdvcmtlcihEKSx0aGlzLl93b3JrZXJQb3J0PXRoaXMuX3dvcmtlcix0aGlzLl93b3JrZXJQ''@;'; put 'put ''b3J0Q2xvc2U9dGhpcy5fd29ya2VyLnRlcm1pbmF0ZS5iaW5kKHRoaXMuX3dvcmtlciksdGhpcy5fd29ya2VyQ2FsbGJhY2tzPVtdfWVsc2UgUDhlLmxvYWQoKS50aGVuKChaPT57dGhpcy5fZ3JhcGh2aXpWZXJzaW9uPVoudmVyc2lvbigpfSkuYmluZCh0aGlzKSk7dGhpcy5fc2VsZWN0aW9u''@;'; put 'put ''PWMsdGhpcy5fYWN0aXZlPSExLHRoaXMuX2J1c3k9ITEsdGhpcy5fam9icz1bXSx0aGlzLl9xdWV1ZT1bXSx0aGlzLl9rZXlNb2Rlcz1uZXcgU2V0KFsidGl0bGUiLCJpZCIsInRhZy1pbmRleCIsImluZGV4Il0pLHRoaXMuX2ltYWdlcz1bXSx0aGlzLl90cmFuc2xhdGlvbj12b2lkIDAsdGhp''@;'; put 'put ''cy5fc2NhbGU9dm9pZCAwLHRoaXMuX2V2ZW50VHlwZXM9WyJpbml0RW5kIiwic3RhcnQiLCJsYXlvdXRTdGFydCIsImxheW91dEVuZCIsImRhdGFFeHRyYWN0RW5kIiwiZGF0YVByb2Nlc3NQYXNzMUVuZCIsImRhdGFQcm9jZXNzUGFzczJFbmQiLCJkYXRhUHJvY2Vzc0VuZCIsInJlbmRlclN0''@;'; put 'put ''YXJ0IiwicmVuZGVyRW5kIiwidHJhbnNpdGlvblN0YXJ0IiwidHJhbnNpdGlvbkVuZCIsInJlc3RvcmVFbmQiLCJlbmQiLCJ6b29tIl0sdGhpcy5fZGlzcGF0Y2g9UWVlKC4uLnRoaXMuX2V2ZW50VHlwZXMpLGl4dC5jYWxsKHRoaXMpLGMubm9kZSgpLl9fZ3JhcGh2aXpfXz10aGlzfWZ1bmN0''@;'; put 'put ''aW9uIEROKGMsbCl7cmV0dXJuIHdzKGMpLmdyYXBodml6KGwpfVo4ZS5wcm90b3R5cGU9SXRlLnByb3RvdHlwZSxSdGUucHJvdG90eXBlPUROLnByb3RvdHlwZT17Y29uc3RydWN0b3I6UnRlLGVuZ2luZTpmdW5jdGlvbiB2eHQoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuZW5naW5lPWMsdGhp''@;'; put 'put ''c30sYWRkSW1hZ2U6ZnVuY3Rpb24gYnh0KGMsbCxhKXtyZXR1cm4gdGhpcy5faW1hZ2VzLnB1c2goe3BhdGg6Yyx3aWR0aDpsLGhlaWdodDphfSksdGhpc30sa2V5TW9kZTpmdW5jdGlvbiB5eHQoYyl7aWYoIXRoaXMuX2tleU1vZGVzLmhhcyhjKSl0aHJvdyBFcnJvcigiSWxsZWdhbCBrZXlN''@;'; put 'put ''b2RlOiAiK2MpO2lmKGMhPXRoaXMuX29wdGlvbnMua2V5TW9kZSYmbnVsbCE9dGhpcy5fZGF0YSl0aHJvdyBFcnJvcigiVG9vIGxhdGUgdG8gY2hhbmdlIGtleU1vZGUiKTtyZXR1cm4gdGhpcy5fb3B0aW9ucy5rZXlNb2RlPWMsdGhpc30sZmFkZTpmdW5jdGlvbiBfeHQoYyl7cmV0dXJuIHRo''@;'; put 'put ''aXMuX29wdGlvbnMuZmFkZT1jLHRoaXN9LHR3ZWVuUGF0aHM6ZnVuY3Rpb24gd3h0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLnR3ZWVuUGF0aHM9Yyx0aGlzfSx0d2VlblNoYXBlczpmdW5jdGlvbiBDeHQoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMudHdlZW5TaGFwZXM9YyxjJiYodGhpcy5f''@;'; put 'put ''b3B0aW9ucy50d2VlblBhdGhzPSEwKSx0aGlzfSxjb252ZXJ0RXF1YWxTaWRlZFBvbHlnb25zOmZ1bmN0aW9uIFN4dChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5jb252ZXJ0RXF1YWxTaWRlZFBvbHlnb25zPWMsdGhpc30sdHdlZW5QcmVjaXNpb246ZnVuY3Rpb24gTXh0KGMpe3JldHVybiB0''@;'; put 'put ''aGlzLl9vcHRpb25zLnR3ZWVuUHJlY2lzaW9uPWMsdGhpc30sZ3Jvd0VudGVyaW5nRWRnZXM6ZnVuY3Rpb24geHh0KGMpe3JldHVybiB0aGlzLl9vcHRpb25zLmdyb3dFbnRlcmluZ0VkZ2VzPWMsdGhpc30sem9vbTpmdW5jdGlvbiB2TXQoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuem9vbT1j''@;'; put 'put ''LHRoaXMuX29wdGlvbnMuem9vbSYmIXRoaXMuX3pvb21CZWhhdmlvcj9rOGUuY2FsbCh0aGlzKTohdGhpcy5fb3B0aW9ucy56b29tJiZ0aGlzLl96b29tQmVoYXZpb3ImJih0aGlzLl96b29tU2VsZWN0aW9uLm9uKCIuem9vbSIsbnVsbCksdGhpcy5fem9vbUJlaGF2aW9yPW51bGwpLHRoaXN9''@;'; put 'put ''LHJlc2V0Wm9vbTpmdW5jdGlvbiBiTXQoYyl7dmFyIGw9dGhpcy5fem9vbVNlbGVjdGlvbjtyZXR1cm4gYyYmKGw9bC50cmFuc2l0aW9uKGMpKSxsLmNhbGwodGhpcy5fem9vbUJlaGF2aW9yLnRyYW5zZm9ybSx0aGlzLl9vcmlnaW5hbFRyYW5zZm9ybSksdGhpc30sem9vbUJlaGF2aW9yOmZ1''@;'; put 'put ''bmN0aW9uIHdNdCgpe3JldHVybiB0aGlzLl96b29tQmVoYXZpb3J8fG51bGx9LHpvb21TZWxlY3Rpb246ZnVuY3Rpb24gQ010KCl7cmV0dXJuIHRoaXMuX3pvb21TZWxlY3Rpb258fG51bGx9LHpvb21TY2FsZUV4dGVudDpmdW5jdGlvbiB5TXQoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuem9v''@;'; put 'put ''bVNjYWxlRXh0ZW50PWMsdGhpc30sem9vbVRyYW5zbGF0ZUV4dGVudDpmdW5jdGlvbiBfTXQoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuem9vbVRyYW5zbGF0ZUV4dGVudD1jLHRoaXN9LHJlbmRlcjpmdW5jdGlvbiBBTXQoYyl7cmV0dXJuIHRoaXMuX2J1c3k/KHRoaXMuX3F1ZXVlLnB1c2go''@;'; put 'put ''dGhpcy5yZW5kZXIuYmluZCh0aGlzLGMpKSx0aGlzKToodGhpcy5fZGlzcGF0Y2guY2FsbCgicmVuZGVyU3RhcnQiLHRoaXMpLHRoaXMuX3RyYW5zaXRpb25GYWN0b3J5P2xOKGZ1bmN0aW9uKCl7dGhpcy5fdHJhbnNpdGlvbj1mdGUodGhpcy5fdHJhbnNpdGlvbkZhY3RvcnkoKSksUjhlLmNh''@;'; put 'put ''bGwodGhpcyxjKX0uYmluZCh0aGlzKSwwKTpSOGUuY2FsbCh0aGlzLGMpLHRoaXMpfSxsYXlvdXQ6ZnVuY3Rpb24gb3h0KGMsbCxhLGQpe2lmKHRoaXMuX3dvcmtlcilFdGUuY2FsbCh0aGlzLHt0eXBlOiJsYXlvdXQiLGRvdDpjLGVuZ2luZTpsLG9wdGlvbnM6YX0sZnVuY3Rpb24oZil7ZC5j''@;'; put 'put ''YWxsKHRoaXMsZi5kYXRhKX0pO2Vsc2UgdHJ5e3ZhciBoPXRoaXMubGF5b3V0U3luYyhjLCJzdmciLGwsYSk7ZC5jYWxsKHRoaXMse3R5cGU6ImRvbmUiLHN2ZzpofSl9Y2F0Y2goZil7ZC5jYWxsKHRoaXMse3R5cGU6ImVycm9yIixlcnJvcjpmLm1lc3NhZ2V9KX19LGRvdDpmdW5jdGlvbiBh''@;'; put 'put ''eHQoYyxsKXt2YXIgYT10aGlzLGg9dGhpcy5fb3B0aW9ucy5lbmdpbmUsZj10aGlzLl9pbWFnZXM7cmV0dXJuIHRoaXMuX2Rpc3BhdGNoLmNhbGwoInN0YXJ0Iix0aGlzKSx0aGlzLl9idXN5PSEwLHRoaXMuX2Rpc3BhdGNoLmNhbGwoImxheW91dFN0YXJ0Iix0aGlzKSx0aGlzLl93b3JrZXJ8''@;'; put 'put ''fG51bGwhPXRoaXMubGF5b3V0U3luYz8odGhpcy5sYXlvdXQoYyxoLHtpbWFnZXM6Zn0sZnVuY3Rpb24oTSl7c3dpdGNoKE0udHlwZSl7Y2FzZSJlcnJvciI6aWYoIWEuX29uZXJyb3IpdGhyb3cgTS5lcnJvci5tZXNzYWdlO2EuX29uZXJyb3IoTS5lcnJvcik7YnJlYWs7Y2FzZSJkb25lIjpz''@;'; put 'put ''eHQuY2FsbCh0aGlzLE0uc3ZnLGwpfX0pLHRoaXMpOih0aGlzLl9hZnRlckluaXQ9dGhpcy5kb3QuYmluZCh0aGlzLGMsbCksdGhpcyl9LGRhdGE6ZnVuY3Rpb24geE10KCl7cmV0dXJuIHRoaXMuX2RhdGF8fG51bGx9LHJlbmRlckRvdDpmdW5jdGlvbiBseHQoYyxsKXt2YXIgYT10aGlzO3Jl''@;'; put 'put ''dHVybiB0aGlzLmRvdChjLGZ1bmN0aW9uIGQoKXthLnJlbmRlcihsKX0pLHRoaXN9LHRyYW5zaXRpb246ZnVuY3Rpb24gY3h0KGMpe3JldHVybiBjIGluc3RhbmNlb2YgRnVuY3Rpb24/dGhpcy5fdHJhbnNpdGlvbkZhY3Rvcnk9Yzp0aGlzLl90cmFuc2l0aW9uPWZ0ZShjKSx0aGlzfSxhY3Rp''@;'; put 'put ''dmU6ZnVuY3Rpb24gdXh0KGMpe3ZhciBhPXRoaXMuX3NlbGVjdGlvbi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJzdmciKTtyZXR1cm4gMCE9YS5zaXplKCk/ZnVuY3Rpb24gcVN0KGMsbCl7dmFyIGQsaCxhPWMuX190cmFuc2l0aW9uO2lmKGEpZm9yKGggaW4gbD1udWxsPT1sP251''@;'; put 'put ''bGw6bCsiIixhKWlmKChkPWFbaF0pLnN0YXRlPjEmJmQubmFtZT09PWwpcmV0dXJuIG5ldyBzNChbW2NdXSxLU3QsbCwraCk7cmV0dXJuIG51bGx9KGEubm9kZSgpLGMpOm51bGx9LG9wdGlvbnM6ZnVuY3Rpb24gZHh0KGMpe2lmKHR5cGVvZiBjPiJ1IilyZXR1cm4gT2JqZWN0LmFzc2lnbih7''@;'; put 'put ''fSx0aGlzLl9vcHRpb25zKTtmb3IodmFyIGwgb2YgT2JqZWN0LmtleXMoYykpdGhpcy5fb3B0aW9uc1tsXT1jW2xdO3JldHVybiB0aGlzfSx3aWR0aDpmdW5jdGlvbiBoeHQoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMud2lkdGg9Yyx0aGlzfSxoZWlnaHQ6ZnVuY3Rpb24gZnh0KGMpe3JldHVy''@;'; put 'put ''biB0aGlzLl9vcHRpb25zLmhlaWdodD1jLHRoaXN9LHNjYWxlOmZ1bmN0aW9uIHB4dChjKXtyZXR1cm4gdGhpcy5fb3B0aW9ucy5zY2FsZT1jLHRoaXN9LGZpdDpmdW5jdGlvbiBneHQoYyl7cmV0dXJuIHRoaXMuX29wdGlvbnMuZml0PWMsdGhpc30sYXR0cmlidXRlcjpmdW5jdGlvbiBteHQo''@;'; put 'put ''Yyl7cmV0dXJuIHRoaXMuX2F0dHJpYnV0ZXI9Yyx0aGlzfSxvbjpmdW5jdGlvbiBFeHQoYyxsKXtyZXR1cm4gdGhpcy5fZGlzcGF0Y2gub24oYyxsKSx0aGlzfSxvbmVycm9yOmZ1bmN0aW9uIFR4dChjKXtyZXR1cm4gdGhpcy5fb25lcnJvcj1jLHRoaXN9LGxvZ0V2ZW50czpmdW5jdGlvbiBO''@;'; put 'put ''eHQoYyl7dmFyIGw9RGF0ZS5ub3coKSxhPXt9LGQ9dGhpcy5fZXZlbnRUeXBlcyxoPU1hdGgubWF4KC4uLmQubWFwKEQ9PkQubGVuZ3RoKSk7Zm9yKGxldCBEPTA7RDxkLmxlbmd0aDtEKyspe2xldCBaPWRbRF07YVtaXT1bXTt2YXIgdixNLGY9dGhpczt0aGlzLm9uKForIi5sb2ciLGM/ZnVu''@;'; put 'put ''Y3Rpb24oKXt2YXIgbmU9RGF0ZS5ub3coKSxjZT1hW1pdLmxlbmd0aDthW1pdLnB1c2gobmUpO3ZhciBiZT0iIjtpZihiZSs9IkV2ZW50ICIsYmUrPVgyKCIgPjIiKShEKSsiICIsYmUrPVorIiAiLnJlcGVhdChoLVoubGVuZ3RoKSxiZSs9WDIoIiA+NSIpKG5lLWwpKyIgIiwiaW5pdEVuZCIh''@;'; put 'put ''PVomJihiZSs9WDIoIiA+NSIpKG5lLWEuc3RhcnRbY2VdKSksImRhdGFQcm9jZXNzRW5kIj09WiYmKGJlKz0iIHByZXBhcmUgICAgICAgICAgICAgICAgICIrWDIoIiA+NSIpKG5lLWEubGF5b3V0RW5kW2NlXSkpLCJyZW5kZXJFbmQiPT1aJiZmLl90cmFuc2l0aW9uJiYoYmUrPSIgdHJhbnNp''@;'; put 'put ''dGlvbiBzdGFydCBtYXJnaW4gIitYMigiID41IikoZi5fdHJhbnNpdGlvbi5kZWxheSgpLShuZS1hLnJlbmRlclN0YXJ0W2NlXSkpLHY9Zi5fdHJhbnNpdGlvbi5kZWxheSgpLE09Zi5fdHJhbnNpdGlvbi5kdXJhdGlvbigpKSwidHJhbnNpdGlvblN0YXJ0Ij09Wil7dmFyIEVlPW5lLWEucmVu''@;'; put 'put ''ZGVyU3RhcnRbY2VdO2JlKz0iIHRyYW5zaXRpb24gZGVsYXkgICAgICAgICIrWDIoIiA+NSIpKG5lLWEucmVuZGVyU3RhcnRbY2VdKSxiZSs9IiBleHBlY3RlZCAiK1gyKCIgPjUiKSh2KSxiZSs9IiBkaWZmICIrWDIoIiA+NSIpKEVlLXYpfWlmKCJ0cmFuc2l0aW9uRW5kIj09Wil7dmFyIEJl''@;'; put 'put ''PW5lLWEudHJhbnNpdGlvblN0YXJ0W2NlXTtiZSs9IiB0cmFuc2l0aW9uIGR1cmF0aW9uICAgICAiK1gyKCIgPjUiKShCZSksYmUrPSIgZXhwZWN0ZWQgIitYMigiID41IikoTSksYmUrPSIgZGlmZiAiK1gyKCIgPjUiKShCZS1NKX1jb25zb2xlLmxvZyhiZSksbD1uZX06bnVsbCl9cmV0dXJu''@;'; put 'put ''IHRoaXN9LGRlc3Ryb3k6ZnVuY3Rpb24gVnh0KCl7cmV0dXJuIGRlbGV0ZSB0aGlzLl9zZWxlY3Rpb24ubm9kZSgpLl9fZ3JhcGh2aXpfXyx0aGlzLl93b3JrZXImJnRoaXMuX3dvcmtlclBvcnRDbG9zZSgpLHRoaXN9LGRyYXdFZGdlOmZ1bmN0aW9uIFV4dChjLGwsYSxkLGgsZj17fSl7aWYo''@;'; put 'put ''KGg9T2JqZWN0LmFzc2lnbih7fSxoKSkuc3R5bGUmJmguc3R5bGUuaW5jbHVkZXMoImludmlzIikpdmFyIHY9d3MobnVsbCk7ZWxzZXt2YXIgWj10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigi''@;'; put 'put ''ZyIpLGNlPXE5KEs4ZS5jYWxsKHRoaXMsaCkpO3Y9Wi5hcHBlbmQoImciKS5kYXRhKFtjZV0pLFRBLmNhbGwodi5ub2RlKCksY2UpLFc4ZS5jYWxsKHRoaXMsdixjLGwsYSxkLGgsZil9cmV0dXJuIHRoaXMuX2RyYXduRWRnZT17Zzp2LHgxOmMseTE6bCx4MjphLHkyOmQsYXR0cmlidXRlczpo''@;'; put 'put ''fSx0aGlzfSx1cGRhdGVEcmF3bkVkZ2U6ZnVuY3Rpb24gWnh0KGMsbCxhLGQsaD17fSxmPXt9KXtpZighdGhpcy5fZHJhd25FZGdlKXRocm93IEVycm9yKCJObyBlZGdlIGhhcyBiZWVuIGRyYXduIik7dmFyIHY9dGhpcy5fZHJhd25FZGdlLmc7cmV0dXJuIGg9T2JqZWN0LmFzc2lnbih0aGlz''@;'; put 'put ''Ll9kcmF3bkVkZ2UuYXR0cmlidXRlcyxoKSx0aGlzLl9kcmF3bkVkZ2UueDE9Yyx0aGlzLl9kcmF3bkVkZ2UueTE9bCx0aGlzLl9kcmF3bkVkZ2UueDI9YSx0aGlzLl9kcmF3bkVkZ2UueTI9ZCwhdi5lbXB0eSgpfHxoLnN0eWxlJiZoLnN0eWxlLmluY2x1ZGVzKCJpbnZpcyIpfHwodj10aGlz''@;'; put 'put ''Ll9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigic3ZnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLmFwcGVuZCgiZyIpLHRoaXMuX2RyYXduRWRnZS5nPXYpLHYuZW1wdHkoKXx8VzhlLmNhbGwodGhpcyx2LGMsbCxhLGQsaCxmKSx0aGlzfSxtb3Zl''@;'; put 'put ''RHJhd25FZGdlRW5kUG9pbnQ6ZnVuY3Rpb24gV3h0KGMsbCxhPXt9KXtpZighdGhpcy5fZHJhd25FZGdlKXRocm93IEVycm9yKCJObyBlZGdlIGhhcyBiZWVuIGRyYXduIik7dmFyIGQ9dGhpcy5fZHJhd25FZGdlLmcsaD10aGlzLl9kcmF3bkVkZ2UueDEsZj10aGlzLl9kcmF3bkVkZ2UueTEs''@;'; put 'put ''dj10aGlzLl9kcmF3bkVkZ2UuYXR0cmlidXRlcztyZXR1cm4gdGhpcy5fZHJhd25FZGdlLngyPWMsdGhpcy5fZHJhd25FZGdlLnkyPWwsWThlKGQsaCxmLGMsbCx2LGEpLHRoaXN9LGluc2VydERyYXduRWRnZTpmdW5jdGlvbiBZeHQoYyl7aWYoIXRoaXMuX2RyYXduRWRnZSl0aHJvdyBFcnJv''@;'; put 'put ''cigiTm8gZWRnZSBoYXMgYmVlbiBkcmF3biIpO3ZhciBsPXRoaXMuX2RyYXduRWRnZS5nO2lmKGwuZW1wdHkoKSlyZXR1cm4gdGhpcztsLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oInRpdGxlIikudGV4dChjKTt2YXIgdj10aGlzLl9zZWxlY3Rpb24uc2VsZWN0V2l0aG91dERhdGFQ''@;'; put 'put ''cm9wYWdhdGlvbigic3ZnIikuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZyIpLE09di5kYXR1bSgpLEQ9dGhpcy5fZXh0cmFjdERhdGEobCxNLmNoaWxkcmVuLmxlbmd0aCx2LmRhdHVtKCkpO3JldHVybiBNLmNoaWxkcmVuLnB1c2goRCkseXRlKGwsRCksdGhpcy5fZHJhd25FZGdl''@;'; put 'put ''PW51bGwsdGhpc30scmVtb3ZlRHJhd25FZGdlOkc4ZSxyZW1vdmVEcmF3bkVkZ2U6RzhlLGRyYXduRWRnZVNlbGVjdGlvbjokOGUsZHJhd25FZGdlU2VsZWN0aW9uOiQ4ZSxkcmF3Tm9kZTpmdW5jdGlvbiBHeHQoYyxsLGEsZD17fSxoPXt9KXtpZigoZD1PYmplY3QuYXNzaWduKHt9LGQpKS5z''@;'; put 'put ''dHlsZSYmZC5zdHlsZS5pbmNsdWRlcygiaW52aXMiKSl2YXIgZj13cyhudWxsKTtlbHNle3ZhciBEPXRoaXMuX3NlbGVjdGlvbi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJzdmciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIiksbmU9cTkoZTdlLmNhbGwodGhpcyxh''@;'; put 'put ''LGQpKTtmPUQuYXBwZW5kKCJnIikuZGF0YShbbmVdKSxUQS5jYWxsKGYubm9kZSgpLG5lKSxxOGUuY2FsbCh0aGlzLGYsYyxsLGEsZCxoKX1yZXR1cm4gdGhpcy5fZHJhd25Ob2RlPXtnOmYsbm9kZUlkOmEseDpjLHk6bCxhdHRyaWJ1dGVzOmR9LHRoaXN9LHVwZGF0ZURyYXduTm9kZTpmdW5j''@;'; put 'put ''dGlvbiAkeHQoYyxsLGEsZD17fSxoPXt9KXtpZighdGhpcy5fZHJhd25Ob2RlKXRocm93IEVycm9yKCJObyBub2RlIGhhcyBiZWVuIGRyYXduIik7dmFyIGY9dGhpcy5fZHJhd25Ob2RlLmc7cmV0dXJuIG51bGw9PWEmJihhPXRoaXMuX2RyYXduTm9kZS5ub2RlSWQpLGQ9T2JqZWN0LmFzc2ln''@;'; put 'put ''bih0aGlzLl9kcmF3bk5vZGUuYXR0cmlidXRlcyxkKSx0aGlzLl9kcmF3bk5vZGUubm9kZUlkPWEsdGhpcy5fZHJhd25Ob2RlLng9Yyx0aGlzLl9kcmF3bk5vZGUueT1sLCFmLmVtcHR5KCl8fGQuc3R5bGUmJmQuc3R5bGUuaW5jbHVkZXMoImludmlzIil8fChmPXRoaXMuX3NlbGVjdGlvbi5z''@;'; put 'put ''ZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJzdmciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJnIikuYXBwZW5kKCJnIiksdGhpcy5fZHJhd25Ob2RlLmc9ZiksZi5lbXB0eSgpfHxxOGUuY2FsbCh0aGlzLGYsYyxsLGEsZCxoKSx0aGlzfSxtb3ZlRHJhd25Ob2RlOmZ1bmN0''@;'; put 'put ''aW9uIEt4dChjLGwsYT17fSl7aWYoIXRoaXMuX2RyYXduTm9kZSl0aHJvdyBFcnJvcigiTm8gbm9kZSBoYXMgYmVlbiBkcmF3biIpO3ZhciBkPXRoaXMuX2RyYXduTm9kZS5nLGg9dGhpcy5fZHJhd25Ob2RlLmF0dHJpYnV0ZXM7cmV0dXJuIHRoaXMuX2RyYXduTm9kZS54PWMsdGhpcy5fZHJh''@;'; put 'put ''d25Ob2RlLnk9bCxkLmVtcHR5KCl8fFg4ZShkLGMsbCxoKSx0aGlzfSxpbnNlcnREcmF3bk5vZGU6ZnVuY3Rpb24gcXh0KGMpe2lmKCF0aGlzLl9kcmF3bk5vZGUpdGhyb3cgRXJyb3IoIk5vIG5vZGUgaGFzIGJlZW4gZHJhd24iKTtudWxsPT1jJiYoYz10aGlzLl9kcmF3bk5vZGUubm9kZUlk''@;'; put 'put ''KTt2YXIgbD10aGlzLl9kcmF3bk5vZGUuZztpZihsLmVtcHR5KCkpcmV0dXJuIHRoaXM7dmFyIGE9dGhpcy5fZHJhd25Ob2RlLmF0dHJpYnV0ZXM7aWYobC5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJ0aXRsZSIpLnRleHQoYyksYS5VUkx8fGEudG9vbHRpcCl2YXIgZj1sLnNlbGVj''@;'; put 'put ''dFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKS5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJhIiksTT0oZi5zZWxlY3RXaXRob3V0RGF0YVByb3BhZ2F0aW9uKCJlbGxpcHNlLHBvbHlnb24scGF0aCxwb2x5bGluZSIpLGYuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigidGV4''@;'; put 'put ''dCIpKTtlbHNlIGwuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigiZWxsaXBzZSxwb2x5Z29uLHBhdGgscG9seWxpbmUiKSxNPWwuc2VsZWN0V2l0aG91dERhdGFQcm9wYWdhdGlvbigidGV4dCIpO00udGV4dChhLmxhYmVsfHxjKTt2YXIgbmU9dGhpcy5fc2VsZWN0aW9uLnNlbGVjdFdp''@;'; put 'put ''dGhvdXREYXRhUHJvcGFnYXRpb24oInN2ZyIpLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb24oImciKSxjZT1uZS5kYXR1bSgpLGJlPXRoaXMuX2V4dHJhY3REYXRhKGwsY2UuY2hpbGRyZW4ubGVuZ3RoLG5lLmRhdHVtKCkpO3JldHVybiBjZS5jaGlsZHJlbi5wdXNoKGJlKSx5dGUobCxi''@;'; put 'put ''ZSksdGhpcy5fZHJhd25Ob2RlPW51bGwsdGhpc30scmVtb3ZlRHJhd25Ob2RlOko4ZSxyZW1vdmVEcmF3bk5vZGU6SjhlLGRyYXduTm9kZVNlbGVjdGlvbjpROGUsZHJhd25Ob2RlU2VsZWN0aW9uOlE4ZSxncmFwaHZpelZlcnNpb246ZnVuY3Rpb24ga010KCl7cmV0dXJuIHRoaXMuX2dyYXBo''@;'; put 'put ''dml6VmVyc2lvbn19LFo5LnByb3RvdHlwZS5ncmFwaHZpej1mdW5jdGlvbiBReHQoYyl7dmFyIGw9dGhpcy5ub2RlKCkuX19ncmFwaHZpel9fO3JldHVybiBsPyhsLm9wdGlvbnMoYyksbE4oZnVuY3Rpb24oKXtsLl9kaXNwYXRjaC5jYWxsKCJpbml0RW5kIix0aGlzKX0uYmluZCh0aGlzKSww''@;'; put 'put ''KSk6bD1uZXcgUnRlKHRoaXMsYyksbH0sWjkucHJvdG90eXBlLnNlbGVjdFdpdGhvdXREYXRhUHJvcGFnYXRpb249ZnVuY3Rpb24gZUV0KGMpe3JldHVybiB3cyh0aGlzLnNpemUoKT4wP3RoaXMubm9kZSgpLnF1ZXJ5U2VsZWN0b3IoYyk6bnVsbCl9O3ZhciB0RXQ9Xyg5ODA4Myk7ZnVuY3Rp''@;'; put 'put ''b24gbkV0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMjkpfWZ1bmN0aW9uIHJFdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci1pY29uIiwzMCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMik7cmV0dXJuIGgubGlicmFyaWVzU2VhcmNoPSIi''@;'; put 'put ''LEN0KGgubGlicmFyeU9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rpb24gaUV0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMjQpKDEsImRpdiIsMjUpKDIsImlucHV0IiwyNiwyKSxwaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29u''@;'; put 'put ''c3QgZj1PZSgpO3JldHVybiB2aShmLmxpYnJhcmllc1NlYXJjaCxoKXx8KGYubGlicmFyaWVzU2VhcmNoPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLmxpYnJhcnlPbkZpbHRlcigpKX0pLGhlKCksZ3QoNCxuRXQsMSwwLCJjbHItaWNvbiIs''@;'; put 'put ''MjcpKDUsckV0LDEsMCwiY2xyLWljb24iLDI4KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPXZvKDMpLGQ9T2UoKTtmZSgyKSxmaSgibmdNb2RlbCIsZC5saWJyYXJpZXNTZWFyY2gpLGZlKDIpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0''@;'; put 'put ''aD4wKX19ZnVuY3Rpb24gb0V0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMjkpfWZ1bmN0aW9uIGFFdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci1pY29uIiwzMCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpLE9lKCk7Y29uc3QgaD12bygzKSxmPU9lKDIpLiRp''@;'; put 'put ''bXBsaWNpdCx2PU9lKCk7cmV0dXJuIGgudmFsdWU9IiIsZi5zZWFyY2hTdHJpbmc9IiIsQ3Qodi50cmVlT25GaWx0ZXIoZiwidGFibGVzLlRBQkxFTkFNRSIpKX0pLGhlKCl9fWZ1bmN0aW9uIHNFdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDI0KSgx''@;'; put 'put ''LCJkaXYiLDI1KSgyLCJpbnB1dCIsMzYsMykscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoMikuJGltcGxpY2l0O3JldHVybiB2aShmLnNlYXJjaFN0cmluZyxoKXx8KGYuc2VhcmNoU3RyaW5nPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlvbigp''@;'; put 'put ''e3d0KGEpO2NvbnN0IGg9T2UoMikuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLnRyZWVPbkZpbHRlcihoLCJ0YWJsZXMuVEFCTEVOQU1FIikpfSksaGUoKSxndCg0LG9FdCwxLDAsImNsci1pY29uIiwyNykoNSxhRXQsMSwwLCJjbHItaWNvbiIsMjgpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9''@;'; put 'put ''dm8oMyksZD1PZSgyKS4kaW1wbGljaXQ7ZmUoMiksZmkoIm5nTW9kZWwiLGQuc2VhcmNoU3RyaW5nKSxmZSgyKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIGxFdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24i''@;'; put 'put ''LDI5KX1mdW5jdGlvbiBjRXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItaWNvbiIsMzApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKSxPZSgpO2NvbnN0IGg9dm8oMyksZj1PZSgpLiRpbXBsaWNpdCx2PU9lKDMpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3Ry''@;'; put 'put ''aW5nPSIiLEN0KHYudHJlZU9uRmlsdGVyKGYsImNvbHVtbnMuQ09MTkFNRSIpKX0pLGhlKCl9fWZ1bmN0aW9uIHVFdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDI0KSgxLCJkaXYiLDI1KSgyLCJpbnB1dCIsMzksMykscGkoIm5nTW9kZWxDaGFuZ2Ui''@;'; put 'put ''LGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKS4kaW1wbGljaXQ7cmV0dXJuIHZpKGYuc2VhcmNoU3RyaW5nLGgpfHwoZi5zZWFyY2hTdHJpbmc9aCksQ3QoaCl9KSxGdCgia2V5dXAiLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoMyku''@;'; put 'put ''dHJlZU9uRmlsdGVyKGgsImNvbHVtbnMuQ09MTkFNRSIpKX0pLGhlKCksZ3QoNCxsRXQsMSwwLCJjbHItaWNvbiIsMjcpKDUsY0V0LDEsMCwiY2xyLWljb24iLDI4KSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPXZvKDMpLGQ9T2UoKS4kaW1wbGljaXQ7ZmUoMiksZmkoIm5nTW9kZWwiLGQuc2Vh''@;'; put 'put ''cmNoU3RyaW5nKSxmZSgyKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIGRFdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci10cmVlLW5vZGUiKSgxLCJidXR0b24iLDQwKSxGdCgiY2xpY2si''@;'; put 'put ''LGZ1bmN0aW9uKCl7Y29uc3QgaD13dChhKS4kaW1wbGljaXQsZj1PZSgpLiRpbXBsaWNpdCx2PU9lKDIpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoKS5jb2x1bW5PbkNsaWNrKGgsdixmKSl9KSxHdCgyLCJjbHItaWNvbiIsNDEpLExlKDMpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1w''@;'; put 'put ''bGljaXQsZD1PZSg0KTtmZSgpLHhyKCJjb2x1bW4tYWN0aXZlIixkLmxpYkNvbHVtbkFjdGl2ZShhLkNPTFVSSSkpLGZlKDIpLFJyKCIgIixhLkNPTE5BTUUsIiAiKX19ZnVuY3Rpb24gaEV0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMzIpLEZ0KCJj''@;'; put 'put ''bGljayIsZnVuY3Rpb24oaCl7Y29uc3QgZj13dChhKS4kaW1wbGljaXQsdj1PZSgyKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKCkudHJlZU5vZGVDbGlja2VkKGgsZix2LnRhYmxlcykpfSkscGkoImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXtjb25zdCBmPXd0KGEpLiRpbXBsaWNp''@;'; put 'put ''dDtyZXR1cm4gdmkoZi5leHBhbmRlZCxoKXx8KGYuZXhwYW5kZWQ9aCksQ3QoaCl9KSxkZSgxLCJwIiwzNyksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0LGY9T2UoMikuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLnRhYmxlT25DbGljayhoLlRBQkxFVVJJ''@;'; put 'put ''LGgsZikpfSksR3QoMiwiY2xyLWljb24iLDM4KSxMZSgzKSxoZSgpLGd0KDQsdUV0LDYsMywiY2xyLXRyZWUtbm9kZSIsNSkoNSxkRXQsNCwzLCJjbHItdHJlZS1ub2RlIiw2KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDt4cigiY2xyLWV4cGFuZGVkIixhLmV4cGFuZGVkKSxm''@;'; put 'put ''aSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpLHhlKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdDb2x1bW5zJiYhYS5jb2x1bW5zKSxmZSgpLHhlKCJpZCIsYS5UQUJMRVVSSSksZmUoMiksUnIoIiAiLGEuVEFCTEVOQU1FLCIgIiksZmUoKSx4ZSgibmdJZiIsYS5jb2x1bW5zKSxmZSgpLHhlKCJu''@;'; put 'put ''Z0Zvck9mIixhLmNvbHVtbnMpfX1mdW5jdGlvbiBmRXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwzMiksRnQoImNsaWNrIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCkuJGltcGxpY2l0LHY9T2UoKTtyZXR1cm4gQ3Qodi50cmVlTm9kZUNs''@;'; put 'put ''aWNrZWQoaCxmLHYubGlicmFyeUxpc3QpKX0pLHBpKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpLiRpbXBsaWNpdDtyZXR1cm4gdmkoZi5leHBhbmRlZCxoKXx8KGYuZXhwYW5kZWQ9aCksQ3QoaCl9KSxkZSgxLCJwIiwzMyksRnQoImNsaWNrIixm''@;'; put 'put ''dW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKS4kaW1wbGljaXQsZj1PZSgpO3JldHVybiBmLmxpYj1oLkxJQlJBUllJRCxDdChmLmxpYnJhcnlPbkNsaWNrKGYubGlifHwiIixoKSl9KSxHdCgyLCJjbHItaWNvbiIsMzQpLExlKDMpLGhlKCksZ3QoNCxzRXQsNiwzLCJjbHItdHJlZS1ub2Rl''@;'; put 'put ''Iiw1KSg1LGhFdCw2LDgsImNsci10cmVlLW5vZGUiLDM1KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpLiRpbXBsaWNpdDt4cigiY2xyLWV4cGFuZGVkIixhLmV4cGFuZGVkKSxmaSgiY2xyRXhwYW5kZWQiLGEuZXhwYW5kZWQpLHhlKCJjbHJMb2FkaW5nIixhLmxvYWRpbmdUYWJsZXMmJiFh''@;'; put 'put ''LnRhYmxlcyksZmUoMyksUnIoIiAiLGEuTElCUkFSWU5BTUUsIiAiKSxmZSgpLHhlKCJuZ0lmIixhLnRhYmxlcyksZmUoKSx4ZSgibmdGb3JPZiIsYS50YWJsZXMpfX1mdW5jdGlvbiBwRXQoYyxsKXtpZigxJmMmJihsaSgwKSxndCgxLGZFdCw2LDcsImNsci10cmVlLW5vZGUiLDMxKSxjaSgp''@;'; put 'put ''KSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSx4ZSgibmdJZiIsIWEuaGlkZGVuJiZhLmluRm9yZWdyb3VuZCl9fWZ1bmN0aW9uIGdFdChjLGwpezEmYyYmKGRlKDAsImRpdiIsNDIpKDEsInNwYW4iLDQzKSxMZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpKCkpfWZ1bmN0aW9uIG1FdChj''@;'; put 'put ''LGwpezEmYyYmKGRlKDAsImRpdiIsNDQpLEd0KDEsImNsci1pY29uIiw0NSksZGUoMiwicCIsNDYpLExlKDMsIiBQbGVhc2Ugc2VsZWN0IGEgY29sdW1uIG9yIHRhYmxlICIpLGhlKCkoKSl9ZnVuY3Rpb24gdkV0KGMsbCl7aWYoMSZjJiYoZGUoMCwiaDMiLDU1KSxMZSgxKSxoZSgpKSwyJmMp''@;'; put 'put ''e2NvbnN0IGE9T2UoMyk7ZmUoKSxScigiICIsYS5jdXJyZW50TGluZWFnZVBhdGhDb2x1bW4/YS5jdXJyZW50TGluZWFnZVBhdGhMaWJUYWJsZSsiLiIrYS5jdXJyZW50TGluZWFnZVBhdGhDb2x1bW46YS5jdXJyZW50TGluZWFnZVBhdGhMaWJUYWJsZSwiICIpfX1mdW5jdGlvbiBiRXQoYyxs''@;'; put 'put ''KXtpZigxJmMmJihkZSgwLCJkaXYiLDUzKSxndCgxLHZFdCwyLDEsImgzIiw1NCksaGUoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKCkseGUoIm5nSWYiLCFhLmN1cnJlbnRMaW5lYWdlUGF0aENvbHVtbiYmIWEuY3VycmVudExpbmVhZ2VQYXRoTGliVGFibGUpfX1mdW5jdGlvbiB5RXQoYyxs''@;'; put 'put ''KXtpZigxJmMmJihkZSgwLCJzcGFuIiksTGUoMSksZGUoMiwiYSIsNTYpLExlKDMpLGhlKCksTGUoNCksaGUoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKCksUnIoIiAiLGEubGluZWFnZVRhYmxlTmFtZS5zcGxpdCgiLiIpWzBdLCIuIiksZmUoKSx4ZSgicm91dGVyTGluayIsIi92aWV3L2Rh''@;'; put 'put ''dGEvIithLmxpbmVhZ2VUYWJsZU5hbWUpLGZlKCksX3IoYS5saW5lYWdlVGFibGVOYW1lLnNwbGl0KCIuIilbMV0pLGZlKCksUnIoIiIsYS5saW5lYWdlQ29sdW1uTmFtZS5sZW5ndGg+MD8iLiIrYS5saW5lYWdlQ29sdW1uTmFtZToiIiwiICIpfX1mdW5jdGlvbiBfRXQoYyxsKXtpZigxJmMp''@;'; put 'put ''e2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDY2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDQpLmRvd25sb2FkUE5HKCkpfSksTGUoMSwiIFBORyAiKSxoZSgpfX1mdW5jdGlvbiB3RXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDY2KSxG''@;'; put 'put ''dCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDQpLmRvd25sb2FkQ1NWKCkpfSksTGUoMSwiIENTViAiKSxoZSgpfX1mdW5jdGlvbiBDRXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItZHJvcGRvd24tbWVudSIsNjUpKDEsImRpdiIsNjYpLEZ0KCJj''@;'; put 'put ''bGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMykuZG93bmxvYWRTVkcoKSl9KSxMZSgyLCJTVkciKSxoZSgpLGd0KDMsX0V0LDIsMCwiZGl2Iiw2NyksZGUoNCwiZGl2Iiw2NiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgzKS5kb3dubG9hZERv''@;'; put 'put ''dCgpKX0pLExlKDUsIkRvdCIpLGhlKCksZ3QoNix3RXQsMiwwLCJkaXYiLDY3KSxoZSgpfWlmKDImYyl7Y29uc3QgYT1PZSgzKTtmZSgzKSx4ZSgibmdJZiIsIWEuaGVscGVyU2VydmljZS5pc01pY3Jvc29mdCksZmUoMykseGUoIm5nSWYiLGEuZmxhdGRhdGEpfX1mdW5jdGlvbiBTRXQoYyxs''@;'; put 'put ''KXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItY2hlY2tib3gtd3JhcHBlciIsNjgpKDEsImlucHV0Iiw2OSksRnQoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMykuZ2VuZXJhdGVHcmFwaCgpKX0pLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3''@;'; put 'put ''dChhKTtjb25zdCBmPU9lKDMpO3JldHVybiB2aShmLnJlZnJlc2hDYWNoZSxoKXx8KGYucmVmcmVzaENhY2hlPWgpLEN0KGgpfSksaGUoKSxkZSgyLCJsYWJlbCIpLExlKDMsIlJlZnJlc2ggQ2FjaGUiKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPU9lKDMpO2ZlKCksZmkoIm5nTW9kZWwiLGEu''@;'; put 'put ''cmVmcmVzaENhY2hlKX19ZnVuY3Rpb24gTUV0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2Iiw1NykoMSwiYnV0dG9uIiw1OCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5saW1pdERvdERlcHRoPSEwKX0pLExlKDIsIiBMaW1pdCBkZXB0''@;'; put 'put ''aCAiKSxoZSgpLGRlKDMsImRpdiIsNTkpKDQsImRpdiIsNjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDIpO3JldHVybiBoLmZvcndhcmRMaW5lYWdlPSExLEN0KGgucm91dGVyLnVybC5pbmNsdWRlcygiY29sdW1uIik/aC5vbkdlbmVyYXRlQ2xpY2soKTpoLm9u''@;'; put 'put ''R2VuZXJhdGVHcmFwaFRhYmxlQ2xpY2soKSl9KSxHdCg1LCJpbnB1dCIsNjEpLGRlKDYsImxhYmVsIiksTGUoNywiQmFja3dhcmQiKSxoZSgpKCksZGUoOCwiZGl2Iiw2MCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoMik7cmV0dXJuIGguZm9yd2FyZExpbmVhZ2U9''@;'; put 'put ''ITAsQ3QoaC5yb3V0ZXIudXJsLmluY2x1ZGVzKCJjb2x1bW4iKT9oLm9uR2VuZXJhdGVDbGljaygpOmgub25HZW5lcmF0ZUdyYXBoVGFibGVDbGljaygpKX0pLEd0KDksImlucHV0Iiw2MSksZGUoMTAsImxhYmVsIiksTGUoMTEsIkZvcndhcmQiKSxoZSgpKCkoKSxkZSgxMiwiY2xyLWRyb3Bk''@;'; put 'put ''b3duIiw2MikoMTMsImJ1dHRvbiIsNjMpLExlKDE0LCIgRG93bmxvYWQgIiksR3QoMTUsImNsci1pY29uIiwyMiksaGUoKSxndCgxNixDRXQsNywyLCJjbHItZHJvcGRvd24tbWVudSIsMjMpLGhlKCksZ3QoMTcsU0V0LDQsMSwiY2xyLWNoZWNrYm94LXdyYXBwZXIiLDY0KSxoZSgpfWlmKDIm''@;'; put 'put ''Yyl7Y29uc3QgYT1PZSgyKTtmZSg1KSx4ZSgiY2hlY2tlZCIsIWEuZm9yd2FyZExpbmVhZ2UpLGZlKDQpLHhlKCJjaGVja2VkIixhLmZvcndhcmRMaW5lYWdlKSxmZSg0KSx4ZSgiZGlzYWJsZWQiLCFhLmNvbHVtbiYmIWEudGFibGUpLGZlKDQpLHhlKCJuZ0lmIixhLmNvbHVtbil9fWZ1bmN0''@;'; put 'put ''aW9uIHhFdChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDczKSxMZSgxLCIgTG9hZGluZy4uLiAiKSxoZSgpKX1mdW5jdGlvbiBFRXQoYyxsKXsxJmMmJkd0KDAsInNwYW4iLDQzKX1mdW5jdGlvbiBURXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDc0KSgxLCJkaXYiLDc1KSxndCgyLEVFdCwx''@;'; put 'put ''LDAsInNwYW4iLDc2KSxoZSgpLEd0KDMsImRpdiIsNzcpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgzKTtmZSgyKSx4ZSgibmdJZiIsYS5ncmFwaFJlbmRlcmluZyl9fWZ1bmN0aW9uIEFFdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpKDEsImRpdiIsNzApLGd0KDIseEV0LDIsMCwic3BhbiIs''@;'; put 'put ''NzEpKDMsVEV0LDQsMSwiZGl2Iiw3MiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7eHIoIm10LTIiLGEudGFibGVGbGFnKSxmZSgyKSx4ZSgibmdJZiIsYS5ncmFwaExvYWRpbmcpLGZlKCkseGUoIm5nSWYiLCFhLmdyYXBoTG9hZGluZyl9fWZ1bmN0aW9uIGtFdChjLGwpe2lmKDEmYyYm''@;'; put 'put ''KGxpKDApLGd0KDEsYkV0LDIsMSwiZGl2Iiw0NyksZGUoMiwiZGl2Iiw0OCkoMywic2VjdGlvbiIsNDkpKDQsImRpdiIsNTApLGd0KDUseUV0LDUsNCwic3BhbiIsMTEpLGhlKCksZ3QoNixNRXQsMTgsNCwiZGl2Iiw1MSksaGUoKSxndCg3LEFFdCw0LDQsImRpdiIsNTIpLGhlKCksY2koKSks''@;'; put 'put ''MiZjKXtjb25zdCBhPU9lKCk7ZmUoKSx4ZSgibmdJZiIsIWEuZ3JhcGhDb250YWluZXIpLGZlKDQpLHhlKCJuZ0lmIixhLmxpbmVhZ2VUYWJsZU5hbWUubGVuZ3RoPjApLGZlKCkseGUoIm5nSWYiLGEuZ3JhcGhDb250YWluZXIpLGZlKCkseGUoIm5nSWYiLGEuZ3JhcGhDb250YWluZXIpfX1m''@;'; put 'put ''dW5jdGlvbiBERXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDY2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDIpLnJlbmRlclRvRG93bmxvYWQoIlBORyIpKX0pLExlKDEsIiBQTkcgIiksaGUoKX19ZnVuY3Rpb24gSUV0KGMsbCl7aWYo''@;'; put 'put ''MSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLWRyb3Bkb3duLW1lbnUiLDY1KSgxLCJkaXYiLDY2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkucmVuZGVyVG9Eb3dubG9hZCgiU1ZHIikpfSksTGUoMiwiU1ZHIiksaGUoKSxndCgzLERFdCwyLDAsImRpdiIs''@;'; put 'put ''NjcpLGRlKDQsImRpdiIsNjYpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCk7cmV0dXJuIGguZG93bmxvYWREb3QoKSxDdChoLmNhbmNlbFJlbmRlcmluZ0dyYXBoKCkpfSksTGUoNSwiIERvdCAiKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPU9lKCk7ZmUoMykseGUo''@;'; put 'put ''Im5nSWYiLCFhLmhlbHBlclNlcnZpY2UuaXNNaWNyb3NvZnQpfX1jb25zdCBSRXQ9Xyg5NzU4Nik7bGV0IElOPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0sRCxaKXt0aGlzLmxpY2VuY2VTZXJ2aWNlPWEsdGhpcy5zYXNTZXJ2aWNlPWQsdGhpcy5yb3V0ZT1oLHRoaXMu''@;'; put 'put ''cm91dGVyPWYsdGhpcy5sb2NhdGlvbj12LHRoaXMuZXZlbnRTZXJ2aWNlPU0sdGhpcy5sb2dnZXJTZXJ2aWNlPUQsdGhpcy5oZWxwZXJTZXJ2aWNlPVosdGhpcy5zd2l0Y2hGbGFnPSExLHRoaXMudGFibGVGbGFnPSEwLHRoaXMuZm9yd2FyZExpbmVhZ2U9ITEsdGhpcy5mbGF0ZGF0YT1bXSx0''@;'; put 'put ''aGlzLmdyYXBoTG9hZGluZz0hMSx0aGlzLmdyYXBoUmVuZGVyaW5nPSExLHRoaXMuZ3JhcGhDb250YWluZXI9ITEsdGhpcy52aXpJbnB1dD0iIix0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSx0aGlzLmxpYnJhcnlUYWJsZXNSZWY9IiIsdGhpcy5saWJyYXJpZXNTZWFyY2g9IiIsdGhpcy50YWJs''@;'; put 'put ''ZUNvbHVtbnNSZWY9IiIsdGhpcy5saW5lYWdlVGFibGVOYW1lPSIiLHRoaXMubGluZWFnZUNvbHVtbk5hbWU9IiIsdGhpcy5saWI9bnVsbCx0aGlzLnRhYmxlRGlzYWJsZT0hMSx0aGlzLnJlZnJlc2hDYWNoZT0hMSx0aGlzLmN1cnJlbnRMaW5lYWdlUGF0aExpYlRhYmxlPSIiLHRoaXMuY3Vy''@;'; put 'put ''cmVudExpbmVhZ2VQYXRoQ29sdW1uPSIiLHRoaXMubGFyZ2VEb3RGaWxlTGluZXM9bnVsbCx0aGlzLmxhcmdlRG90RmlsZUxpbWl0PTFlMyx0aGlzLmxpbWl0RG90RGVwdGg9ITEsdGhpcy5wZW5kaW5nUmVuZGVyRG93bmxvYWQ9bnVsbCx0aGlzLmRlYm91bmNlVGltZT0yMDB9c2hvd1RhYmxl''@;'; put 'put ''U2VsZWN0KCl7dGhpcy50YWJsZUZsYWc9IXRoaXMudGFibGVGbGFnfXRhYmxlT25DbGljayhhLGQsaCxmPSExKXt2YXIgdj10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtkLmNvbHVtbnM/KGQuZXhwYW5kZWQ9IWQuZXhwYW5kZWQsITA9PT1kLmV4cGFuZGVkJiYodi50YWJsZT1hLGZ8fHYu''@;'; put 'put ''b25HZW5lcmF0ZUdyYXBoVGFibGVDbGljaygpKSk6KGQuZXhwYW5kZWQ9IWQuZXhwYW5kZWQsZC5sb2FkaW5nQ29sdW1ucz0hMCx2LnRhYmxlPWEsdi5jdXJyZW50TGluZWFnZVBhdGhMaWJUYWJsZT1kLkxJQk5BTUUrIi4iK2QuVEFCTEVOQU1FLHlpZWxkIHYuc2VsZWN0VGFibGUoYSxkKSxm''@;'; put 'put ''fHx2Lm9uR2VuZXJhdGVHcmFwaFRhYmxlQ2xpY2soKSksdi5jb2xsYXBzZVRyZWVJdGVtcyhoLnRhYmxlcyxkKX0pKCl9c2VsZWN0VGFibGUoYSxkKXt2YXIgaD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtoLmNvbHVtbnNMaXN0PVtdO2xldCBmPXtTQVNDb250cm9sVGFibGU6W3t0YWJs''@;'; put 'put ''ZXVyaTphfV19O3lpZWxkIGguc2FzU2VydmljZS5yZXF1ZXN0KCJsaW5lYWdlL2dldG1ldGFjb2xzIixmKS50aGVuKHY9PntoLmNvbHVtbnNMaXN0PXYuYWRhcHRlclJlc3BvbnNlLm1ldGFjb2xzLGguY29sdW1uc0xpc3QmJmguY29sdW1uc0xpc3QubGVuZ3RoPjAmJihkLmNvbHVtbnM9aC5j''@;'; put 'put ''b2x1bW5zTGlzdCxkLmV4cGFuZGVkPSEwLGQubG9hZGluZ0NvbHVtbnM9ITEpfSkuY2F0Y2godj0+diksaC5zZXRHbG9iYWxEYXRhKCl9KSgpfWxvYWRNb3JlTGlicmFyaWVzKCl7dGhpcy5saWJyYXJpZXNQYWdpbmd8fCh0aGlzLmxpYnJhcmllc1BhZ2luZz0hMCx0aGlzLmhlbHBlclNlcnZp''@;'; put 'put ''Y2UuZGlzcGxheUxpYnJhcmllcyh0aGlzLmxpYnJhcnlMaXN0LCEwKSx0aGlzLmxpYnJhcmllc1BhZ2luZz0hMSl9Y29sbGFwc2VUcmVlSXRlbXMoYSxkKXthLmZvckVhY2goaD0+e0pTT04uc3RyaW5naWZ5KGgpIT09SlNPTi5zdHJpbmdpZnkoZCkmJihoLmV4cGFuZGVkPSExKX0pfXRyZWVO''@;'; put 'put ''b2RlQ2xpY2tlZChhLGQsaCl7IkNvbGxhcHNlIj09PWEudGFyZ2V0LnRpdGxlJiZ0aGlzLmNvbGxhcHNlVHJlZUl0ZW1zKGgsZCl9bGlicmFyeU9uQ2xpY2soYSxkKXt2YXIgaD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtkLmluRm9yZWdyb3VuZD0hMCxkLnRhYmxlcz9kLmV4cGFuZGVk''@;'; put 'put ''PSFkLmV4cGFuZGVkOihkLmxvYWRpbmdUYWJsZXM9ITAseWllbGQgaC5zZWxlY3RMaWJyYXJ5KGEsZCkpLGguY29sbGFwc2VUcmVlSXRlbXMoaC5saWJyYXJ5TGlzdCxkKX0pKCl9c2VsZWN0TGlicmFyeShhLGQpe3ZhciBoPXRoaXM7cmV0dXJuIGVlKGZ1bmN0aW9uKigpe2gudGFibGVzTGlz''@;'; put 'put ''dD1bXSxoLmNvbHVtbnNMaXN0PVtdO2xldCBmPXtTQVNDb250cm9sVGFibGU6W3tsaWJ1cmk6YX1dfTt5aWVsZCBoLnNhc1NlcnZpY2UucmVxdWVzdCgibGluZWFnZS9nZXRtZXRhdGFibGVzIixmKS50aGVuKHY9PntoLnRhYmxlc0xpc3Q9di5hZGFwdGVyUmVzcG9uc2UubWV0YXRhYmxlcyxo''@;'; put 'put ''LnRhYmxlc0xpc3QmJmgudGFibGVzTGlzdC5sZW5ndGg+MCYmKGQudGFibGVzPWgudGFibGVzTGlzdCxkLmV4cGFuZGVkPSEwKSxoLnNldEdsb2JhbERhdGEoKX0pLmNhdGNoKHY9PnYpLGQubG9hZGluZ1RhYmxlcz0hMX0pKCl9Y29sdW1uT25DbGljayhhLGQsaCl7dGhpcy5saWI9ZC5MSUJS''@;'; put 'put ''QVJZSUQsdGhpcy50YWJsZT1oLlRBQkxFVVJJLHRoaXMuY29sdW1uPWEuQ09MVVJJLHRoaXMuc2V0R2xvYmFsRGF0YSgpLHRoaXMub25HZW5lcmF0ZUNsaWNrKCl9dHJlZU9uRmlsdGVyKGEsZCl7dGhpcy5oZWxwZXJTZXJ2aWNlLnRyZWVPbkZpbHRlcihhLGQpfWxpYnJhcnlPbkZpbHRlcigp''@;'; put 'put ''e3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5saWJyYXJ5TGlzdCx0aGlzLmxpYnJhcmllc1NlYXJjaCwiTElCUkFSWU5BTUUiKSxLbi5saW5lYWdlLmxpYnJhcmllc1NlYXJjaD10aGlzLmxpYnJhcmllc1NlYXJjaH1saWJDb2x1bW5BY3RpdmUoYSl7aWYoIXRoaXMu''@;'; put 'put ''Y29sdW1uKXJldHVybiExO2xldCBkPWEuc3BsaXQoIlxcIiksaD10aGlzLmNvbHVtbi5zcGxpdCgiXFwiKTtyZXR1cm4gZFtkLmxlbmd0aC0xXT09aFtoLmxlbmd0aC0xXX1zZXRHbG9iYWxEYXRhKCl7S24ubGluZWFnZS5saWJyYXJ5TGlzdD10aGlzLmxpYnJhcnlMaXN0LEtuLmxpbmVhZ2Uu''@;'; put 'put ''dGFibGVzTGlzdD10aGlzLnRhYmxlc0xpc3QsS24ubGluZWFnZS5jb2x1bW5zTGlzdD10aGlzLmNvbHVtbnNMaXN0LEtuLmxpbmVhZ2UubGliPXRoaXMubGliLEtuLmxpbmVhZ2UudGFibGU9dGhpcy50YWJsZSxLbi5saW5lYWdlLmNvbHVtbj10aGlzLmNvbHVtbn1sb2FkR2xvYmFsRGF0YSgp''@;'; put 'put ''e3RoaXMubGlicmFyeUxpc3Q9S24ubGluZWFnZS5saWJyYXJ5TGlzdCx0aGlzLnRhYmxlc0xpc3Q9S24ubGluZWFnZS50YWJsZXNMaXN0LHRoaXMuY29sdW1uc0xpc3Q9S24ubGluZWFnZS5jb2x1bW5zTGlzdCx0aGlzLmxpYnJhcmllc1NlYXJjaD1Lbi5saW5lYWdlLmxpYnJhcmllc1NlYXJj''@;'; put 'put ''aH1yZXN1Ym1pdFdpdGhNYXhEZXB0aChhKXtsZXQgZDt0aGlzLmNhbmNlbFJlbmRlcmluZ0dyYXBoKCksYSYmKGQ9e21heF9kZXB0aDphfSksdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10se3JlbGF0aXZlVG86dGhpcy5yb3V0ZSxxdWVyeVBhcmFtczpkfSl9bmdPbkluaXQoKXtLbi52aWV3ZXIu''@;'; put 'put ''Y3VycmVudFNlbGVjdGlvbj0idmlldy9saW5lYWdlIjtsZXQgYT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5yZWxvYWQ7aWYodm9pZCAwIT09YSl7bGV0IGQ9dGhpcy5yb3V0ZXIudXJsOyJyZWxvYWQiPT09YT9sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgiZmlyc3RMb2FkIik/KGxvY2FsU3Rv''@;'; put 'put ''cmFnZS5yZW1vdmVJdGVtKCJmaXJzdExvYWQiKSx0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZShkLnNsaWNlKDAsZC5sYXN0SW5kZXhPZigiLyIpKSkpOihsb2NhbFN0b3JhZ2UuZmlyc3RMb2FkPSEwLHNldFRpbWVvdXQoZnVuY3Rpb24oKXt3aW5kb3cubG9jYXRpb24ucmVsb2FkKCl9LDJl''@;'; put 'put ''MykpOnRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKGQuc2xpY2UoMCxkLmxhc3RJbmRleE9mKCIvIikpKX10aGlzLmluaXREYXRhKCl9aW5pdERhdGEoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtLbi5saW5lYWdlLmxpYnJhcnlMaXN0JiYoS24ubGluZWFnZS5saWJyYXJ5''@;'; put 'put ''TGlzdC5sZW5ndGg+MD9hLmxvYWRHbG9iYWxEYXRhKCk6eWllbGQgYS5zYXNTZXJ2aWNlLnJlcXVlc3QoInB1YmxpYy92aWV3bGlicyIsbnVsbCkudGhlbih2PT57YS5saWJyYXJ5TGlzdD12LmFkYXB0ZXJSZXNwb25zZS5zYXNsaWJzLGEuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVz''@;'; put 'put ''KGEubGlicmFyeUxpc3QpLGEubGlicmFyeUxpc3QmJmEubGlicmFyeUxpc3QubGVuZ3RoPjAmJihhLmxpYj1hLmxpYnJhcnlMaXN0WzBdLkxJQlJBUllJRCksYS5zZXRHbG9iYWxEYXRhKCl9KS5jYXRjaCh2PT52KSxhLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSh2PT57YS5vblJvdXRl''@;'; put 'put ''Q2hhbmdlKCl9KSxhLnJvdXRlLnBhcmFtcy5zdWJzY3JpYmUodj0+e2Eub25Sb3V0ZUNoYW5nZSgpfSkpfSkoKX1vblJvdXRlQ2hhbmdlKCl7Y2xlYXJUaW1lb3V0KHRoaXMuZGVib3VuY2VUaW1lb3V0KSx0aGlzLmRlYm91bmNlVGltZW91dD1zZXRUaW1lb3V0KCgpPT57Y29uc3QgYT10aGlz''@;'; put 'put ''LnJvdXRlLnNuYXBzaG90LnBhcmFtcy5jb2x1cmksZD10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5kaXJlY3Rpb24saD10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy50YWJsZWlkLGY9dGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy5tYXhfZGVwdGg7YSYmZCYmKHRoaXMuZm9y''@;'; put 'put ''d2FyZExpbmVhZ2U9IkZPUldBUkQiPT09ZCx0aGlzLmNvbHVtbj1hLHRoaXMuZ2VuZXJhdGVHcmFwaChhLGQsZikpLCF0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoImNvbHVtbiIpJiZoJiZkJiYodGhpcy5mb3J3YXJkTGluZWFnZT0iRk9SV0FSRCI9PT1kLHRoaXMudGFibGU9aCx0aGlzLmdl''@;'; put 'put ''bmVyYXRlR3JhcGhUYWJsZUxldmVsKGgsZCxmKSl9LHRoaXMuZGVib3VuY2VUaW1lKX1uZ0FmdGVyQ29udGVudEluaXQoKXt9ZGlyZWN0aW9uVGV4dCgpe3JldHVybiB0aGlzLmZvcndhcmRMaW5lYWdlPyJGT1JXQVJEIjoiUkVWRVJTRSJ9b25HZW5lcmF0ZUNsaWNrKCl7bGV0IGE9dGhpcy5k''@;'; put 'put ''aXJlY3Rpb25UZXh0KCksZD10aGlzLmNvbHVtbj90aGlzLmNvbHVtbi5zdWJzdHJpbmcodGhpcy5jb2x1bW4uaW5kZXhPZigiXFwiKSsxKTpudWxsO3RoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2xpbmVhZ2UvY29sdW1uLyIrZCsiLyIrYSl9b25HZW5lcmF0ZUdyYXBoVGFibGVD''@;'; put 'put ''bGljaygpe2xldCBhPXRoaXMuZGlyZWN0aW9uVGV4dCgpLGQ9dGhpcy50YWJsZS5pbmNsdWRlcygiXFwiKT90aGlzLnRhYmxlLnNwbGl0KCJcXCIpWzFdOnRoaXMudGFibGU7dGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybCgiL3ZpZXcvbGluZWFnZS8iK2QrIi8iK2EpfWdlbmVyYXRlR3JhcGhU''@;'; put 'put ''YWJsZUxldmVsKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgdj17U0FTQ29udHJvbFRhYmxlOlt7dGFibGVfaWQ6YSxkaXJlY3Rpb246ZHx8Zi5kaXJlY3Rpb25UZXh0KCl9XX07cmV0dXJuInVuZGVmaW5lZCI9PT12LlNBU0NvbnRyb2xUYWJsZVswXS50YWJs''@;'; put 'put ''ZV9pZCYmZi5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoImdlbmVyYXRlR3JhcGhUYWJsZUxldmVsKCkiLCJ0YWJsZV9pZCBpcyB1bmRlZmluZWQuIix2b2lkIDAsIkZyb250ZW5kIGVycm9yIiksaCYmKHYuU0FTQ29udHJvbFRhYmxlWzBdLm1heF9kZXB0aD1oKSxmLnRhYmxlRmxhZz0h''@;'; put 'put ''MSxmLnN3aXRjaEZsYWc9ITAsZi5ncmFwaENvbnRhaW5lcj0hMCxmLmdyYXBoTG9hZGluZz0hMCxmLnZpeklucHV0PSIiLG5ldyBQcm9taXNlKChNLEQpPT57Zi5zYXNTZXJ2aWNlLnJlcXVlc3QoImxpbmVhZ2UvZmV0Y2h0YWJsZWxpbmVhZ2UiLHYpLnRoZW4oZnVuY3Rpb24oKXt2YXIgWj1l''@;'; put 'put ''ZShmdW5jdGlvbioobmUpe2lmKG5lLmFkYXB0ZXJSZXNwb25zZS5mbGF0ZGF0YS5sZW5ndGg+MCYmZi5saWNlbmNlU2VydmljZS5jaGVja0xpbmVhZ2VMaW1pdCgpKXJldHVybiBmLmV2ZW50U2VydmljZS5zaG93SW5mb01vZGFsKCJOb3RpY2UiLCJZb3UgaGF2ZSByZWFjaGVkIGRhaWx5IG1h''@;'; put 'put ''eGltdW0gb2YgbGluZWFnZSBkaWFncmFtIHJlbmRlcmluZ3MuIFRvIHVubG9jayBhZGRpdGlvbmFsIGRpYWdyYW1zLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8iKSx2b2lkIGYucm91dGVyLm5hdmlnYXRlQnlVcmwoIi92aWV3L2xpbmVhZ2UiKTtpZigic3RyaW5nIj09dHlw''@;'; put 'put ''ZW9mIG5lKXJldHVybiBmLnZpeklucHV0PSJkaWdyYXBoIEcge1NBUyBFcnJvcn0iLHZvaWQgZi5idWlsZEdyYXBoKCk7Zi5saW5lYWdlVGFibGVOYW1lPW5lLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLkxJQlJFRisiLiIrbmUuYWRhcHRlclJlc3BvbnNlLmluZm9bMF0uVEFCTEVOQU1FO2xl''@;'; put 'put ''dCBjZT1uZS5hZGFwdGVyUmVzcG9uc2UuZmluYWxmaW5hbCxiZT0iIjtmb3IobGV0IEVlPTA7RWU8Y2UubGVuZ3RoO0VlKyspYmUrPXVuZXNjYXBlKGNlW0VlXS5MSU5FKSsiXG4iO2lmKGYuZmxhdGRhdGE9bmUuYWRhcHRlclJlc3BvbnNlLmZsYXRkYXRhLGYubGlicmFyeUxpc3Qpe2xldCBF''@;'; put 'put ''ZT1mLmxpYnJhcnlMaXN0LmZpbmQoQmU9Pm5lLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdLkxJQlVSSS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKEJlLkxJQlJBUllJRC50b1VwcGVyQ2FzZSgpKSk7aWYoRWUpe2xldCBCZTtpZih5aWVsZCBmLmxpYnJhcnlPbkNsaWNrKEVlLkxJQlJBUllJRCxF''@;'; put 'put ''ZSksRWUudGFibGVzJiYoQmU9RWUudGFibGVzLmZpbmQocWU9PnFlLlRBQkxFVVJJLnRvVXBwZXJDYXNlKCkuaW5jbHVkZXMobmUuYWRhcHRlclJlc3BvbnNlLmluZm9bMF0uVEFCTEVJRC50b1VwcGVyQ2FzZSgpKSksQmUpKXtpZihmLnRhYmxlPUJlLlRBQkxFVVJJLGYudGFibGUpe2NvbnN0''@;'; put 'put ''IHFlPWYudGFibGUucmVwbGFjZSgiXFwiLCJcXFxcIik7c2V0VGltZW91dCgoKT0+e2xldCBudD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbaWQ9JyR7cWV9J11gKTtudCYmbnQuc2Nyb2xsSW50b1ZpZXcoKX0sMWUzKX1mLnRhYmxlT25DbGljayhCZS5UQUJMRVVSSSxCZSxFZSx2b2lkIDAh''@;'; put 'put ''PT1kKX1FZSYmKEVlLmV4cGFuZGVkPSEwKSxCZSYmKEJlLmV4cGFuZGVkPSEwKX19Zi52aXpJbnB1dD1iZXx8ImRpZ3JhcGggRyB7Tm8gTGluZWFnZSBBdmFpbGFibGV9IixmLnZpeklucHV0PWYudml6SW5wdXQucmVwbGFjZSgvXHNkczovZywiXG5kczoiKS5yZXBsYWNlKC9cc1xuL2csIlxu''@;'; put 'put ''IiksZi5pZGxvb2t1cD1uZS5hZGFwdGVyUmVzcG9uc2UuaWRsb29rdXAsbmUuYWRhcHRlclJlc3BvbnNlLmZpbmFsZmluYWwubGVuZ3RoPmYubGFyZ2VEb3RGaWxlTGltaXQ/Zi5sYXJnZURvdEZpbGVMaW5lcz1uZS5hZGFwdGVyUmVzcG9uc2UuZmluYWxmaW5hbC5sZW5ndGg6Zi5idWlsZEdy''@;'; put 'put ''YXBoKCksTSgpfSk7cmV0dXJuIGZ1bmN0aW9uKG5lKXtyZXR1cm4gWi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKS5jYXRjaChaPT57Zi5ncmFwaExvYWRpbmc9ITEsZi5ncmFwaENvbnRhaW5lcj0hMX0pfSl9KSgpfWNhbmNlbFJlbmRlcmluZ0dyYXBoKCl7dGhpcy52aXpJbnB1dD0iZGln''@;'; put 'put ''cmFwaCBHIHtObyBMaW5lYWdlIEF2YWlsYWJsZX0iLHRoaXMubGFyZ2VEb3RGaWxlTGluZXM9bnVsbCx0aGlzLmJ1aWxkR3JhcGgoKX1jb250aW51ZVJlbmRlcmluZ0dyYXBoKCl7dGhpcy5sYXJnZURvdEZpbGVMaW5lcz1udWxsLHRoaXMuYnVpbGRHcmFwaCgoKT0+e2lmKG51bGwhPT10aGlz''@;'; put 'put ''LnBlbmRpbmdSZW5kZXJEb3dubG9hZCl7c3dpdGNoKHRoaXMucGVuZGluZ1JlbmRlckRvd25sb2FkKXtjYXNlIlBORyI6dGhpcy5kb3dubG9hZFBORygpO2JyZWFrO2Nhc2UiU1ZHIjp0aGlzLmRvd25sb2FkU1ZHKCl9dGhpcy5wZW5kaW5nUmVuZGVyRG93bmxvYWQ9bnVsbCx0aGlzLnZpeklu''@;'; put 'put ''cHV0PSJkaWdyYXBoIEcge05vIExpbmVhZ2UgQXZhaWxhYmxlfSIsdGhpcy5idWlsZEdyYXBoKCl9fSl9cmVuZGVyVG9Eb3dubG9hZChhKXtzd2l0Y2goYSl7Y2FzZSJQTkciOnRoaXMucGVuZGluZ1JlbmRlckRvd25sb2FkPSJQTkciLHRoaXMuY29udGludWVSZW5kZXJpbmdHcmFwaCgpO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiU1ZHIjp0aGlzLnBlbmRpbmdSZW5kZXJEb3dubG9hZD0iU1ZHIix0aGlzLmNvbnRpbnVlUmVuZGVyaW5nR3JhcGgoKX19bWFrZUdyYXBoTGlua2FibGUoYSl7bGV0IGQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiI2dyYXBoIC5ub2RlIik7Zm9yKGxldCBoIG9mIGQpe2xl''@;'; put 'put ''dCBNLGY9aC5xdWVyeVNlbGVjdG9yKCJ0aXRsZSIpLmlubmVySFRNTCx2PWEuZmluZChEPT5ELk1FVEFJRD09PWYpO3YmJihNPSJUQUJMRSI9PT12Lk1FVEFUWVBFPyIvdmlldy9kYXRhLyIrdi5NRVRBTkFNRToiL3ZpZXcvbWV0YWRhdGEvb2JqZWN0LyIrdi5NRVRBSUQsaC5jbGFzc0xpc3Qu''@;'; put 'put ''YWRkKCJjdXJzb3ItcG9pbnRlciIpLGguYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLEQ9Pnt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKE0pfSkpfX1nZW5lcmF0ZUdyYXBoKGEsZCxoKXt2YXIgZj10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtsZXQgdj17U0FTQ29udHJvbFRhYmxlOlt7''@;'; put 'put ''Y29sdXJpOmF8fGYuY29sdW1uLGRpcmVjdGlvbjpkfHxmLmRpcmVjdGlvblRleHQoKSxyZWZyZXNoOmYucmVmcmVzaENhY2hlPzE6MH1dfTtyZXR1cm4idW5kZWZpbmVkIj09PXYuU0FTQ29udHJvbFRhYmxlWzBdLmNvbHVyaSYmZi5ldmVudFNlcnZpY2Uuc2hvd0Fib3J0TW9kYWwoImdlbmVy''@;'; put 'put ''YXRlR3JhcGgoKSIsImNvbHVyaSBpcyB1bmRlZmluZWQuIix2b2lkIDAsIkZyb250ZW5kIGVycm9yIiksaCYmKHYuU0FTQ29udHJvbFRhYmxlWzBdLm1heF9kZXB0aD1oKSxmLnRhYmxlRmxhZz0hMSxmLnN3aXRjaEZsYWc9ITAsZi5ncmFwaENvbnRhaW5lcj0hMCxmLmdyYXBoTG9hZGluZz0h''@;'; put 'put ''MCxmLnZpeklucHV0PSIiLG5ldyBQcm9taXNlKChNLEQpPT57Zi5zYXNTZXJ2aWNlLnJlcXVlc3QoImxpbmVhZ2UvZmV0Y2hjb2xsaW5lYWdlIix2KS50aGVuKGZ1bmN0aW9uKCl7dmFyIFo9ZWUoZnVuY3Rpb24qKG5lKXtpZihuZS5hZGFwdGVyUmVzcG9uc2UuZmxhdGRhdGEubGVuZ3RoPjAm''@;'; put 'put ''JmYubGljZW5jZVNlcnZpY2UuY2hlY2tMaW5lYWdlTGltaXQoKSlyZXR1cm4gZi5ldmVudFNlcnZpY2Uuc2hvd0luZm9Nb2RhbCgiTm90aWNlIiwiWW91IGhhdmUgcmVhY2hlZCBkYWlseSBtYXhpbXVtIG9mIGxpbmVhZ2UgZGlhZ3JhbSByZW5kZXJpbmdzLiBUbyB1bmxvY2sgYWRkaXRpb25h''@;'; put 'put ''bCBkaWFncmFtcywgY29udGFjdCBzdXBwb3J0QGRhdGFjb250cm9sbGVyLmlvIiksdm9pZCBmLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9saW5lYWdlIik7aWYoInN0cmluZyI9PXR5cGVvZiBuZS5hZGFwdGVyUmVzcG9uc2UpcmV0dXJuIGYudml6SW5wdXQ9ImRpZ3JhcGggRyB7U0FT''@;'; put 'put ''IEVycm9yfSIsdm9pZCBmLmJ1aWxkR3JhcGgoKTtmLmxpbmVhZ2VUYWJsZU5hbWU9bmUuYWRhcHRlclJlc3BvbnNlLmluZm9bMF0uTElCUkVGKyIuIituZS5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXS5UQUJOQU1FLGYubGluZWFnZUNvbHVtbk5hbWU9bmUuYWRhcHRlclJlc3BvbnNlLmluZm9b''@;'; put 'put ''MF0uQ09MTkFNRSxmLmlkbG9va3VwPW5lLmFkYXB0ZXJSZXNwb25zZS5pZGxvb2t1cDtsZXQgY2U9bmUuYWRhcHRlclJlc3BvbnNlLmZyb21zYXMsYmU9IiI7Zm9yKGxldCBFZT0wO0VlPGNlLmxlbmd0aDtFZSsrKWJlKz11bmVzY2FwZShjZVtFZV0uU1RSSU5HKSsiXG4iO2lmKGYudml6SW5w''@;'; put 'put ''dXQ9YmV8fCJkaWdyYXBoIEcge05vIExpbmVhZ2UgQXZhaWxhYmxlfSIsZi52aXpJbnB1dD1mLnZpeklucHV0LnJlcGxhY2UoL1xzZHM6L2csIlxuZHM6IikucmVwbGFjZSgvXHNcbi9nLCJcbiIpLGYuZmxhdGRhdGE9bmUuYWRhcHRlclJlc3BvbnNlLmZsYXRkYXRhLGYubGlicmFyeUxpc3Qp''@;'; put 'put ''e2xldCBCZSxFZT1mLmxpYnJhcnlMaXN0LmZpbmQocWU9Pm5lLmFkYXB0ZXJSZXNwb25zZS5pbmZvWzBdPy5MSUJVUkk/LnRvVXBwZXJDYXNlKCk/LmluY2x1ZGVzKHFlPy5MSUJSQVJZSUQ/LnRvVXBwZXJDYXNlKCkpKTtFZSYmKHlpZWxkIGYubGlicmFyeU9uQ2xpY2soRWUuTElCUkFSWUlE''@;'; put 'put ''LEVlKSxFZS50YWJsZXMmJihCZT1FZS50YWJsZXMuZmluZChxZT0+cWUuVEFCTEVVUkk9PT1uZS5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXS5UQUJVUkkpLEJlJiZmLnRhYmxlT25DbGljayhCZS5UQUJMRVVSSSxCZSxFZSwhMCkudGhlbigoKT0+e2xldCBxZT1CZS5UQUJMRVVSSTtpZihxZSl7''@;'; put 'put ''Y29uc3QgbnQ9cWUucmVwbGFjZSgiXFwiLCJcXFxcIik7bGV0IGx0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtpZD0nJHtudH0nXWApO3NldFRpbWVvdXQoKCk9PntsdCYmKGYubG9nZ2VyU2VydmljZS5sb2coImxpYnJhcnlUb1NlbGVjdCIsRWUpLGx0LnNjcm9sbEludG9WaWV3KCkpfSwx''@;'; put 'put ''ZTMpfX0pKSxFZSYmKEVlLmV4cGFuZGVkPSEwKSxCZSYmKEJlLmV4cGFuZGVkPSEwKSl9bmUuYWRhcHRlclJlc3BvbnNlLmZyb21zYXMubGVuZ3RoPmYubGFyZ2VEb3RGaWxlTGltaXQ/Zi5sYXJnZURvdEZpbGVMaW5lcz1uZS5hZGFwdGVyUmVzcG9uc2UuZnJvbXNhcy5sZW5ndGg6Zi5idWls''@;'; put 'put ''ZEdyYXBoKCksTSgpfSk7cmV0dXJuIGZ1bmN0aW9uKG5lKXtyZXR1cm4gWi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKS5jYXRjaChaPT57Zi5ncmFwaExvYWRpbmc9ITEsZi5ncmFwaENvbnRhaW5lcj0hMX0pfSl9KSgpfWdldFNWR1VSTCgpe2xldCBhPWRvY3VtZW50LmdldEVsZW1lbnRC''@;'; put 'put ''eUlkKCJncmFwaCIpLGQ9bmV3IFhNTFNlcmlhbGl6ZXIsaD1uZXcgQmxvYihbZC5zZXJpYWxpemVUb1N0cmluZyhhKV0se3R5cGU6ImltYWdlL3N2Zyt4bWwifSk7cmV0dXJuIFVSTC5jcmVhdGVPYmplY3RVUkwoaCl9Z2V0U1ZHQmxvYigpe2xldCBhPWRvY3VtZW50LmdldEVsZW1lbnRCeUlk''@;'; put 'put ''KCJncmFwaCIpLGQ9bmV3IFhNTFNlcmlhbGl6ZXI7cmV0dXJuIG5ldyBCbG9iKFtkLnNlcmlhbGl6ZVRvU3RyaW5nKGEpXSx7dHlwZToiaW1hZ2Uvc3ZnK3htbCJ9KX1kb3dubG9hZFNWRygpe2lmKEROKCIjZ3JhcGgiKS5yZXNldFpvb20oKSxuYXZpZ2F0b3IuYXBwVmVyc2lvbi50b1N0cmlu''@;'; put 'put ''ZygpLmluZGV4T2YoIi5ORVQiKT4wKXdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlQmxvYih0aGlzLmdldFNWR0Jsb2IoKSx0aGlzLmNvbnN0cnVjdE5hbWUoInN2ZyIpKTtlbHNle2xldCBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTthLmhyZWY9dGhpcy5nZXRTVkdVUkwoKSxhLmRvd25s''@;'; put 'put ''b2FkPXRoaXMuY29uc3RydWN0TmFtZSgic3ZnIiksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKSxhLmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKX19ZG93bmxvYWRQTkcoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtETigiI2dyYXBoIikucmVzZXRa''@;'; put 'put ''b29tKCksdEV0LnNhdmVTdmdBc1BuZyhkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjZ3JhcGggc3ZnIiksYS5jb25zdHJ1Y3ROYW1lKCJwbmciKSl9KSgpfWRvd25sb2FkQ1NWKCl7bGV0IGE9dGhpcy5mbGF0ZGF0YTtjb25zdCBkPShuZSxjZSk9Pm51bGw9PT1jZT8iIjpjZSxoPU9iamVjdC5r''@;'; put 'put ''ZXlzKGFbMF0pO2xldCBmPWEubWFwKG5lPT5oLm1hcChjZT0+SlNPTi5zdHJpbmdpZnkobmVbY2VdLGQpKS5qb2luKCIsIikpO2YudW5zaGlmdChoLmpvaW4oIiwiKSk7bGV0IHY9Zi5qb2luKCJcclxuIik7dmFyIE09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLEQ9bmV3IEJsb2IoW3Zd''@;'; put 'put ''LHt0eXBlOiJ0ZXh0L2NzdiJ9KTtpZihuYXZpZ2F0b3IuYXBwVmVyc2lvbi50b1N0cmluZygpLmluZGV4T2YoIi5ORVQiKT4wKXdpbmRvdy5uYXZpZ2F0b3IubXNTYXZlQmxvYihELHRoaXMuY29uc3RydWN0TmFtZSgiY3N2IikpO2Vsc2V7dmFyIFo9d2luZG93LlVSTC5jcmVhdGVPYmplY3RV''@;'; put 'put ''UkwoRCk7TS5ocmVmPVosTS5kb3dubG9hZD10aGlzLmNvbnN0cnVjdE5hbWUoImNzdiIpLE0uY2xpY2soKSx3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTChaKSxNLnJlbW92ZSgpfX1nZXREb3RVcmwoKXtsZXQgZD1uZXcgQmxvYihbdGhpcy52aXpJbnB1dF0se3R5cGU6InRleHQvcGxhaW4i''@;'; put 'put ''fSk7cmV0dXJuIHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGQpfWdldERvdEJsb2IoKXtyZXR1cm4gbmV3IEJsb2IoW3RoaXMudml6SW5wdXRdLHt0eXBlOiJ0ZXh0L3BsYWluIn0pfWRvd25sb2FkRG90KCl7aWYobmF2aWdhdG9yLmFwcFZlcnNpb24udG9TdHJpbmcoKS5pbmRleE9mKCIu''@;'; put 'put ''TkVUIik+MCl3aW5kb3cubmF2aWdhdG9yLm1zU2F2ZUJsb2IodGhpcy5nZXREb3RCbG9iKCksdGhpcy5jb25zdHJ1Y3ROYW1lKCJ0eHQiKSk7ZWxzZXtsZXQgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7YS5ocmVmPXRoaXMuZ2V0RG90VXJsKCksYS5kb3dubG9hZD10aGlzLmNvbnN0''@;'; put 'put ''cnVjdE5hbWUoInR4dCIpLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSksYS5jbGljaygpLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoYSl9fXNob3dTdmcoKXt3aW5kb3cub3Blbih0aGlzLmdldFNWR1VSTCgpLCJfYmxhbmsiKX1idWlsZEdyYXBoKGEpe3RoaXMuZXZlbnRTZXJ2aWNl''@;'; put 'put ''LmNsb3NlU2lkZWJhcigpLHRoaXMuZ3JhcGhMb2FkaW5nPSExLHRoaXMuZ3JhcGhSZW5kZXJpbmc9ITAsc2V0VGltZW91dCgoKT0+e0ROKCIjZ3JhcGgiKS56b29tKCEwKS5hZGRJbWFnZSgiaHR0cHM6Ly9kYXRhY29udHJvbGxlci5pby93cC1jb250ZW50L3VwbG9hZHMvMjAyMC8wMS9mYzEu''@;'; put 'put ''cG5nIiwiMzBweCIsIjMwcHgiKS5yZW5kZXJEb3QodGhpcy52aXpJbnB1dCwoKT0+e3RoaXMuZ3JhcGhSZW5kZXJpbmc9ITEsdGhpcy5pZGxvb2t1cCYmdGhpcy5tYWtlR3JhcGhMaW5rYWJsZSh0aGlzLmlkbG9va3VwKSxhJiZhKCl9KX0sMTAwKX1jb25zdHJ1Y3ROYW1lKGEpe2xldCBkPSIi''@;'; put 'put ''LGg9IiIsZj0iIix2PVJFdCgpLmZvcm1hdCgiWVlNTUREX0hIbW0iKTtpZih0aGlzLmxpYnJhcnlMaXN0JiZ0aGlzLmxpYnJhcnlMaXN0Lmxlbmd0aCl7bGV0IE09dGhpcy5saWJyYXJ5TGlzdC5maW5kKEQ9PkQuTElCUkFSWUlEPT10aGlzLmxpYik7TSYmKGQ9YF8ke00uTElCUkFSWU5BTUV9''@;'; put 'put ''YCl9aWYodGhpcy50YWJsZXNMaXN0JiZ0aGlzLnRhYmxlc0xpc3QubGVuZ3RoKXtsZXQgTT10aGlzLnRhYmxlc0xpc3QuZmluZChEPT5ELlRBQkxFVVJJPT10aGlzLnRhYmxlKTtNJiYoaD1gXyR7TS5UQUJMRU5BTUV9YCl9aWYodGhpcy5jb2x1bW5zTGlzdCYmdGhpcy5jb2x1bW5zTGlzdC5s''@;'; put 'put ''ZW5ndGgpe2xldCBNPXRoaXMuY29sdW1uc0xpc3QuZmluZChEPT5ELkNPTFVSST09dGhpcy5jb2x1bW4pO00mJihmPWBfJHtNLkNPTE5BTUV9YCl9cmV0dXJuYCR7dGhpcy5kaXJlY3Rpb25UZXh0KCl9JHtkfSR7aH0ke2Z9XyR7dn0uJHthfWB9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0''@;'; put 'put ''aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoZDEpLEdlKEpzKSxHZShDdSksR2UoTHMpLEdlKHVoKSxHZShwYyksR2UoU2QpLEdlKEd1KSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtbGluZWFnZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQt''@;'; put 'put ''Y29udGFpbmVyIl0sZGVjbHM6NTgsdmFyczoxMSxjb25zdHM6W1sibWF4RGVwdGhEb3QiLCIiXSxbIm1heERlcHRoIiwiIl0sWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbInNlYXJjaFRyZWVJbnB1dCIsIiJdLFszLCJzY3JvbGxlZFRvQm90dG9tIl0sWyJjbGFzcyIsInNlYXJjaC1ub2Rl''@;'; put 'put ''Iiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsiY2xhc3MiLCJ3LTEwMCB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbMSwiY2FyZCJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzMsImNsck1vZGFs''@;'; put 'put ''T3BlbiIsImNsck1vZGFsQ2xvc2FibGUiXSxbMSwibW9kYWwtdGl0bGUiXSxbMSwibW9kYWwtYm9keSJdLFsxLCJtb2RhbC1mb290ZXIiLCJkLWZsZXgiLCJmbGV4LWNvbHVtbiJdLFsxLCJiaWdsaW5lYWdlLXJvdyIsIm1iLTBpIl0sWyJ0eXBlIiwibnVtYmVyIiwibWluIiwiMSIsInBsYWNl''@;'; put 'put ''aG9sZGVyIiwiTWF4IGRlcHRoIHZhbHVlIiwxLCJjbHItaW5wdXQiLCJtYXgtZGVwdGgtaW5wdXQiXSxbMSwibWItMjAiXSxbMSwiYmlnbGluZWFnZS1yb3ciXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1wcmltYXJ5IiwzLCJjbGljayJdLFsiY2xyRHJvcGRvd25U''@;'; put 'put ''cmlnZ2VyIiwiIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsIm10LTMtbmVnYXRpdmUiLDMsImRpc2FibGVkIl0sWyJzaGFwZSIsImNhcmV0IGRvd24iXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLDQsImNscklmT3BlbiJdLFsxLCJzZWFyY2gtbm9kZSJdLFsxLCJ0cmVl''@;'; put 'put ''LXNlYXJjaC13cmFwcGVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkxpYnJhcmllcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsic2hhcGUiLCJzZWFy''@;'; put 'put ''Y2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIiwiY2xyLWV4cGFuZGVkIiwiY2xpY2siLCJjbHJFeHBhbmRlZENo''@;'; put 'put ''YW5nZSIsNCwibmdJZiJdLFszLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiwiY2xyRXhwYW5kZWQiLCJjbHJMb2FkaW5nIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayJdLFsic2hhcGUiLCJyYWNrLXNlcnZlciJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmci''@;'; put 'put ''LCJjbHItZXhwYW5kZWQiLCJjbGljayIsImNsckV4cGFuZGVkQ2hhbmdlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiVGFibGVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01v''@;'; put 'put ''ZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWzEsIm0tMCIsImN1cnNvci1wb2ludGVyIiwzLCJjbGljayIsImlkIl0sWyJzaGFwZSIsInRhYmxlIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkNvbHVtbnMiLCJuYW1lIiwiaW5wdXQiLCJh''@;'; put 'put ''dXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbMSwiY2xyLXRyZWVub2RlLWxpbmsiLDMsImNsaWNrIl0sWyJzaGFwZSIsIm9iamVjdHMiXSxbMSwidy0xMDAiLCJ0ZXh0LWNlbnRlciJdLFsxLCJzcGlubmVyIiwic3Bpbm5lci1zbSJdLFsx''@;'; put 'put ''LCJuby10YWJsZS1zZWxlY3RlZCJdLFsic2hhcGUiLCJ3YXJuaW5nLXN0YW5kYXJkIiwic2l6ZSIsIjYwIiwxLCJpcy1pbmZvIiwiaWNvbi1kYy1maWxsIl0sWyJjZHMtdGV4dCIsInNlY3Rpb24iLDEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSIsIm10LTEwIl0sWyJjbGFzcyIsImNhcmQt''@;'; put 'put ''aGVhZGVyIGQtZmxleCBmbGV4LWNvbHVtbiBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiw0LCJuZ0lmIl0sWzEsImNhcmQtYmxvY2siXSxbMSwiZm9ybS1ibG9jayIsInN3IiwicG9zaXRpb24tcmVsYXRpdmUiLCJkLWZsZXgiLCJhbGlnbi1pdGVtcy1jZW50ZXIiXSxbMSwibGluYWdlLXRpdGxl''@;'; put 'put ''LXdyYXBwZXIiLCJkLWZsZXgiLCJhbGlnbi1pdGVtcy1jZW50ZXIiLCJmb250LXdlaWdodC1ib2xkIiwicG9zaXRpb24tYWJzb2x1dGUiXSxbImNsYXNzIiwiY2xyLWNvbC1tZC0xMiB0ZXh0LWNlbnRlciBkLWZsZXgganVzdGlmeS1jb250ZW50LWVuZCIsNCwibmdJZiJdLFszLCJtdC0yIiw0''@;'; put 'put ''LCJuZ0lmIl0sWzEsImNhcmQtaGVhZGVyIiwiZC1mbGV4IiwiZmxleC1jb2x1bW4iLCJqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJjbGFzcyIsInRleHQtY2VudGVyIHBiLTEwIiw0LCJuZ0lmIl0sWzEsInRleHQtY2VudGVyIiwicGItMTAiXSxbMywicm91dGVyTGluayJdLFsxLCJjbHIt''@;'; put 'put ''Y29sLW1kLTEyIiwidGV4dC1jZW50ZXIiLCJkLWZsZXgiLCJqdXN0aWZ5LWNvbnRlbnQtZW5kIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsIm1yLTUiLDMsImNsaWNrIl0sWzEsImJ0bi1ncm91cCIsImRpcmVjdGlvbiIsImQtYmxvY2siXSxbMSwicmFkaW8iLCJi''@;'; put 'put ''dG4iLDMsImNsaWNrIl0sWyJ0eXBlIiwicmFkaW8iLCJuYW1lIiwiYnRuLWdyb3VwLWRlbW8tcmFkaW9zIiwzLCJjaGVja2VkIl0sWzEsIm1yLTEwIl0sWyJjbHJEcm9wZG93blRyaWdnZXIiLCIiLDEsImJ0biIsImJ0bi1pbmZvLW91dGxpbmUiLDMsImRpc2FibGVkIl0sWyJjbGFzcyIsImQt''@;'; put 'put ''ZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIiLDQsIm5nSWYiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siLDQsIm5nSWYiXSxbMSwiZC1mbGV4IiwiYWxpZ24taXRlbXMt''@;'; put 'put ''Y2VudGVyIl0sWyJ0eXBlIiwiY2hlY2tib3giLCJjbHJDaGVja2JveCIsIiIsIm5hbWUiLCJyZWZyZXNoQ2FjaGUiLDMsImNoYW5nZSIsIm5nTW9kZWxDaGFuZ2UiLCJuZ01vZGVsIl0sWzEsInRleHQtY2VudGVyIl0sWyJjbGFzcyIsInNwaW5uZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwicG9z''@;'; put 'put ''aXRpb24tcmVsYXRpdmUiLDQsIm5nSWYiXSxbMSwic3Bpbm5lciJdLFsxLCJwb3NpdGlvbi1yZWxhdGl2ZSJdLFsxLCJncmFwaC1yZW5kZXItc3Bpbm5lciJdLFsiY2xhc3MiLCJzcGlubmVyIHNwaW5uZXItc20iLDQsIm5nSWYiXSxbImlkIiwiZ3JhcGgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24o''@;'; put 'put ''ZCxoKXtpZigxJmQpe2NvbnN0IGY9T24oKTtkZSgwLCJhcHAtc2lkZWJhciIsNCksRnQoInNjcm9sbGVkVG9Cb3R0b20iLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgubG9hZE1vcmVMaWJyYXJpZXMoKSl9KSxkZSgxLCJjbHItdHJlZSIpLGd0KDIsaUV0LDYsMywiY2xyLXRyZWUtbm9k''@;'; put 'put ''ZSIsNSkoMyxwRXQsMiwxLCJuZy1jb250YWluZXIiLDYpLGhlKCksZ3QoNCxnRXQsMywwLCJkaXYiLDcpLGhlKCksZGUoNSwiZGl2Iiw4KSg2LCJkaXYiLDkpLGd0KDcsbUV0LDQsMCwiZGl2IiwxMCkoOCxrRXQsOCw0LCJuZy1jb250YWluZXIiLDExKSxoZSgpKCksZGUoOSwiY2xyLW1vZGFs''@;'; put 'put ''IiwxMikoMTAsImgzIiwxMyksTGUoMTEsIkxpbWl0IERlcHRoIiksaGUoKSxkZSgxMiwiZGl2IiwxNCkoMTMsInAiKSxMZSgxNCwiRW50ZXIgdGhlIGRlcHRoIG51bWJlciB5b3Ugd291bGQgbGlrZSB0byBsaW1pdCBET1QgcmVuZGVyaW5nIHRvOiIpLGhlKCkoKSxkZSgxNSwiZGl2IiwxNSko''@;'; put 'put ''MTYsImRpdiIsMTYpLEd0KDE3LCJpbnB1dCIsMTcsMCksaGUoKSxkZSgxOSwiY2xyLWNvbnRyb2wtaGVscGVyIiwxOCksTGUoMjAsIlRvIHJlbmRlciB3aXRoIHVubGltaXRlZCBkZXB0aCwgbGVhdmUgdGhlIGlucHV0IGVtcHR5IiksaGUoKSxkZSgyMSwiZGl2IiwxOSkoMjIsImJ1dHRvbiIs''@;'; put 'put ''MjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5saW1pdERvdERlcHRoPSExKX0pLExlKDIzLCIgQ2FuY2VsICIpLGhlKCksZGUoMjQsImJ1dHRvbiIsMjApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChmKTtjb25zdCBNPXZvKDE4KTtyZXR1cm4gaC5yZXN1Ym1p''@;'; put 'put ''dFdpdGhNYXhEZXB0aChNLnZhbHVlKSxDdChoLmxpbWl0RG90RGVwdGg9ITEpfSksTGUoMjUsIiBSZXN1Ym1pdCAiKSxoZSgpKCkoKSgpLGRlKDI2LCJjbHItbW9kYWwiLDEyKSgyNywiaDMiLDEzKSxMZSgyOCwiV2FybmluZyIpLGhlKCksZGUoMjksImRpdiIsMTQpKDMwLCJwIiksTGUoMzEp''@;'; put 'put ''LGhlKCkoKSxkZSgzMiwiZGl2IiwxNSkoMzMsImRpdiIsMTkpKDM0LCJwIiksTGUoMzUsIlJlbmRlciBhbnl3YXkgKHRoaXMgbWF5IHRha2UgYSBsb25nIHRpbWUpIiksaGUoKSxkZSgzNiwiYnV0dG9uIiwyMCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLmNvbnRp''@;'; put 'put ''bnVlUmVuZGVyaW5nR3JhcGgoKSl9KSxMZSgzNywiIFJlbmRlciAiKSxoZSgpKCksZGUoMzgsImRpdiIsMTkpKDM5LCJwIiksTGUoNDAsIkRvd25sb2FkIHRoZSByZXN1bHQgKFBORyAmIFNWRyByZXF1aXJlIHJlbmRlcmluZykiKSxoZSgpLGRlKDQxLCJjbHItZHJvcGRvd24iKSg0MiwiYnV0''@;'; put 'put ''dG9uIiwyMSksTGUoNDMsIiBEb3dubG9hZCAiKSxHdCg0NCwiY2xyLWljb24iLDIyKSxoZSgpLGd0KDQ1LElFdCw2LDEsImNsci1kcm9wZG93bi1tZW51IiwyMyksaGUoKSgpLGRlKDQ2LCJkaXYiLDE5KSg0NywicCIpLExlKDQ4LCJSZXN1Ym1pdCB3aXRoIGEgbWF4LWRlcHRoIChzcGVjaWZ5''@;'; put 'put ''IGRlcHRoKSIpLGhlKCksR3QoNDksImlucHV0IiwxNywxKSxkZSg1MSwiYnV0dG9uIiwyMCksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGYpO2NvbnN0IE09dm8oNTApO3JldHVybiBDdChoLnJlc3VibWl0V2l0aE1heERlcHRoKE0udmFsdWUpKX0pLExlKDUyLCIgUmVzdWJtaXQgIiksaGUo''@;'; put 'put ''KSgpLGRlKDUzLCJkaXYiLDE5KSg1NCwicCIpLExlKDU1LCJDYW5jZWwgdGhpcyBzdWJtaXNzaW9uIiksaGUoKSxkZSg1NiwiYnV0dG9uIiwyMCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChmKSxDdChoLmNhbmNlbFJlbmRlcmluZ0dyYXBoKCkpfSksTGUoNTcsIiBDYW5jZWwg''@;'; put 'put ''IiksaGUoKSgpKCkoKX0yJmQmJihmZSgyKSx4ZSgibmdJZiIsaC5saWJyYXJ5TGlzdCksZmUoKSx4ZSgibmdGb3JPZiIsaC5saWJyYXJ5TGlzdCksZmUoKSx4ZSgibmdJZiIsaC5saWJyYXJpZXNQYWdpbmcpLGZlKDMpLHhlKCJuZ0lmIiwhaC5jb2x1bW4mJiFoLnRhYmxlKSxmZSgpLHhlKCJu''@;'; put 'put ''Z0lmIixoLmNvbHVtbnx8aC50YWJsZSksZmUoKSx4ZSgiY2xyTW9kYWxPcGVuIixoLmxpbWl0RG90RGVwdGgpKCJjbHJNb2RhbENsb3NhYmxlIiwhMSksZmUoMTcpLHhlKCJjbHJNb2RhbE9wZW4iLG51bGwhPT1oLmxhcmdlRG90RmlsZUxpbmVzKSgiY2xyTW9kYWxDbG9zYWJsZSIsITEpLGZl''@;'; put 'put ''KDUpLFJyKCIgVGhlIGdlbmVyYXRlZCBkb3QgZmlsZSBoYXMgIixoLmxhcmdlRG90RmlsZUxpbmVzLCIgbGluZXMuIFJlbmRlcmluZyBtYXkgdGFrZSBhIGxvbmcgdGltZSwgaG93IHdvdWxkIHlvdSBsaWtlIHRvIHByb2NlZWQ/ICIpLGZlKDExKSx4ZSgiZGlzYWJsZWQiLCFoLmNvbHVtbiYm''@;'; put 'put ''IWgudGFibGUpKX0sZGVwZW5kZW5jaWVzOltzcyx5byx1MSxRbCxCMSxRcyxZcyxTaCxPZCxkZyxPbCxvdSxLdSxCMCx4Mix1cyxPTCxXMSxEZCxJZCxpZyxoNyxmNyxPeSx0NCxlNF0sc3R5bGVzOlsiLnRvZ2dsZS1zd2l0Y2hbX25nY29udGVudC0lQ09NUCVdICAgaW5wdXRbdHlwZT1jaGVj''@;'; put 'put ''a2JveF1bX25nY29udGVudC0lQ09NUCVdOmNoZWNrZWQgKyBsYWJlbFtfbmdjb250ZW50LSVDT01QJV06YmVmb3Jle2JvcmRlci1jb2xvcjojMzE0MzUxO2JhY2tncm91bmQtY29sb3I6IzMxNDM1MSFpbXBvcnRhbnQ7dHJhbnNpdGlvbjouMTVzIGVhc2UtaW47dHJhbnNpdGlvbi1wcm9wZXJ0''@;'; put 'put ''eTpib3JkZXItY29sb3IsYmFja2dyb3VuZC1jb2xvcn0jZ3JhcGhbX25nY29udGVudC0lQ09NUCVde2hlaWdodDpjYWxjKDEwMHZoIC0gMTk1cHgpO292ZXJmbG93OmhpZGRlbjt0ZXh0LWFsaWduOmNlbnRlcjtkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCU7Ym9yZGVyOjFweCBzb2xpZCAjZTRl''@;'; put 'put ''NGU0O21hcmdpbi10b3A6MTBweH0uc2VsZWN0aW9uLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7bWF4LXdpZHRoOjY3MHB4fS5jb2x1bW4tYWN0aXZlW19uZ2NvbnRlbnQtJUNPTVAlXXtiYWNrZ3JvdW5kOiNkOGUzZTk7Y29sb3I6IzAwMH0uY29udGVudC1hcmVhW19u''@;'; put 'put ''Z2NvbnRlbnQtJUNPTVAlXXtwYWRkaW5nOi41cmVtIWltcG9ydGFudH0uY29udGVudC1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jYXJkW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OmNhbGMoMTAwdmggLSAxMjBweCl9LmNvbnRlbnQtYXJlYVtfbmdjb250ZW50LSVDT01QJV0g''@;'; put 'put ''ICAuY2FyZFtfbmdjb250ZW50LSVDT01QJV0gICAuY2FyZC1ibG9ja1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzouNXJlbSAuMzVyZW0haW1wb3J0YW50fWNsci10cmVlLW5vZGVbX25nY29udGVudC0lQ09NUCVdICAgYnV0dG9uW19uZ2NvbnRlbnQtJUNPTVAlXXt3aGl0ZS1zcGFjZTpu''@;'; put 'put ''b3dyYXB9LmJ0bi1ncm91cC5kaXJlY3Rpb25bX25nY29udGVudC0lQ09NUCVde21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9LmdyYXBoLXJlbmRlci1zcGlubmVyW19uZ2NvbnRlbnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDoxMDAlO2Rpc3Bs''@;'; put 'put ''YXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21hcmdpbi10b3A6MTBweH0uYmlnbGluZWFnZS1yb3dbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7bWFyZ2luLWJvdHRvbToyMHB4fS5t''@;'; put 'put ''b2RhbC1mb290ZXJbX25nY29udGVudC0lQ09NUCVdICAgcFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjB9LmxpbmVhZ2UtdGl0bGUtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bGVmdDoxMnB4fS5tYXgtZGVwdGgtaW5wdXRbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9QG1l''@;'; put 'put ''ZGlhIChtYXgtd2lkdGg6IDc2OHB4KXsudG9nZ2xlLXN3aXRjaC1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi1ib3R0b206MjBweH19Il19KX19cmV0dXJuIGN9KSgpO2NvbnN0IExFdD0oKT0+WzEwLDIwLDUwLDEwMF07ZnVuY3Rpb24gT0V0KGMsbCl7aWYoMSZjJiYoZGUo''@;'; put 'put ''MCwib3B0aW9uIiwxNCksTGUoMSksaGUoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2hNKCJ2YWx1ZSIsYSksZmUoKSxScigiICIsYSwiICIpfX1mdW5jdGlvbiBQRXQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwyMCl9ZnVuY3Rpb24gRkV0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9u''@;'; put 'put ''KCk7ZGUoMCwiY2xyLWljb24iLDIxKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgyKTtyZXR1cm4gaC5tZXRhRGF0YVNlYXJjaD0iIixDdChoLm1ldGFMaXN0T25GaWx0ZXIoKSl9KSxoZSgpfX1mdW5jdGlvbiBIRXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtk''@;'; put 'put ''ZSgwLCJjbHItdHJlZS1ub2RlIiwxNSkoMSwiZGl2IiwxNikoMiwiaW5wdXQiLDE3LDApLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCk7cmV0dXJuIHZpKGYubWV0YURhdGFTZWFyY2gsaCl8fChmLm1ldGFEYXRhU2VhcmNoPWgpLEN0KGgpfSksRnQo''@;'; put 'put ''ImtleXVwIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLm1ldGFMaXN0T25GaWx0ZXIoKSl9KSxoZSgpLGd0KDQsUEV0LDEsMCwiY2xyLWljb24iLDE4KSg1LEZFdCwxLDAsImNsci1pY29uIiwxOSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT12bygzKSxkPU9lKCk7ZmUoMiksZmko''@;'; put 'put ''Im5nTW9kZWwiLGQubWV0YURhdGFTZWFyY2gpLGZlKDIpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwxKSxmZSgpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24gTkV0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMjMpLEZ0KCJj''@;'; put 'put ''bGljayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpLiRpbXBsaWNpdCx2PU9lKCk7cmV0dXJuIEN0KHYudHJlZU5vZGVDbGlja2VkKGgsZix2Lm1ldGFEYXRhTGlzdCkpfSkscGkoImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCkuJGltcGxp''@;'; put 'put ''Y2l0O3JldHVybiB2aShmLmV4cGFuZGVkLGgpfHwoZi5leHBhbmRlZD1oKSxDdChoKX0pLGRlKDEsInAiLDI0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpLiRpbXBsaWNpdCxmPU9lKCk7cmV0dXJuIGYubWV0YURhdGFJZD1oLklELEN0KGYubWV0YURhdGFPbkNs''@;'; put 'put ''aWNrKGYubWV0YURhdGFJZCxoKSl9KSxHdCgyLCJjbHItaWNvbiIsMjUpLExlKDMpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQ7ZmkoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSx4ZSgiY2xyTG9hZGluZyIsYS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMpLGZlKDMp''@;'; put 'put ''LFJyKCIgIixhLklELCIgIil9fWZ1bmN0aW9uIFZFdChjLGwpe2lmKDEmYyYmKGxpKDApLGd0KDEsTkV0LDQsMywiY2xyLXRyZWUtbm9kZSIsMjIpLGNpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgpLHhlKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBCRXQoYyxsKXsxJmMm''@;'; put 'put ''JihkZSgwLCJkaXYiLDI2KSxHdCgxLCJjbHItaWNvbiIsMjcpLGRlKDIsInAiLDI4KSxMZSgzLCIgUGxlYXNlIHNlbGVjdCBhIHR5cGUgIiksaGUoKSgpKX1mdW5jdGlvbiBqRXQoYyxsKXsxJmMmJihkZSgwLCJoNCIpLExlKDEsIkxvYWRpbmcgbWV0YWRhdGEgdHlwZXMiKSxoZSgpKX1mdW5j''@;'; put 'put ''dGlvbiB6RXQoYyxsKXsxJmMmJihkZSgwLCJoNCIpLExlKDEsIkxvYWRpbmcgbWV0YWRhdGEgb2JqZWN0cyIpLGhlKCkpfWZ1bmN0aW9uIFVFdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIpLGd0KDEsakV0LDIsMCwiaDQiLDMxKSgyLHpFdCwyLDAsImg0IiwzMSksaGUoKSksMiZjKXtjb25z''@;'; put 'put ''dCBhPU9lKDIpO2ZlKCkseGUoIm5nSWYiLGEubWV0YXR5cGVzTG9hZGluZyksZmUoKSx4ZSgibmdJZiIsIWEubWV0YXR5cGVzTG9hZGluZyl9fWZ1bmN0aW9uIFpFdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMjkpKDEsInNwYW4iLDMwKSxMZSgyLCIgTG9hZGluZy4uLiAiKSxoZSgpLGd0''@;'; put 'put ''KDMsVUV0LDMsMiwiZGl2IiwzMSksaGUoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoMykseGUoIm5nSWYiLGEubG9hZGluZyl9fWZ1bmN0aW9uIFdFdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsMzgpKDEsImlucHV0IiwzOSwxKSxwaSgibmdNb2RlbENoYW5nZSIsZnVu''@;'; put 'put ''Y3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgyKTtyZXR1cm4gdmkoZi5tZXRhT2JqZWN0U2VhcmNoLGgpfHwoZi5tZXRhT2JqZWN0U2VhcmNoPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgyKS5tZXRhT2JqZWN0T25GaWx0ZXIoKSl9KSxoZSgp''@;'; put 'put ''KCl9aWYoMiZjKXtjb25zdCBhPU9lKDIpO2ZlKCksZmkoIm5nTW9kZWwiLGEubWV0YU9iamVjdFNlYXJjaCl9fWZ1bmN0aW9uIFlFdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDQzKX1mdW5jdGlvbiBHRXQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwyNSl9ZnVuY3Rpb24gJEV0KGMs''@;'; put 'put ''bCl7aWYoMSZjJiYoZGUoMCwicCIsNTQpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpLiRpbXBsaWNpdDtmZSgpLFJyKCIgIixhLlVSSSwiICIpfX1mdW5jdGlvbiBLRXQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdHJlZS1ub2RlIiw0OSkoMSwiZGl2Iiw1MCkoMiwiZGl2IiksZ3Qo''@;'; put 'put ''MyxZRXQsMSwwLCJjbHItaWNvbiIsNTEpKDQsR0V0LDEsMCwiY2xyLWljb24iLDUyKSxMZSg1KSxoZSgpLGd0KDYsJEV0LDIsMSwicCIsNTMpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O3hlKCJjbHJFeHBhbmRhYmxlIiwhMCksZmUoKSx4cigib2JqZWN0LWhlYWRlciIsIWEu''@;'; put 'put ''Y291bnQpLGZlKDIpLHhlKCJuZ0lmIiwhYS5jb3VudCksZmUoKSx4ZSgibmdJZiIsYS5jb3VudCksZmUoKSxScigiICIsYS5kaXNwbGF5LCIgIiksZmUoKSx4ZSgibmdJZiIsIWEuY291bnQpfX1mdW5jdGlvbiBxRXQoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdHJlZSIsNDcpLGd0KDEsS0V0''@;'; put 'put ''LDcsNywiY2xyLXRyZWUtbm9kZSIsNDgpLHFzKDIsImFzeW5jIiksaGUoKSksMiZjKXtjb25zdCBhPU9lKDYpO3hlKCJjbHJMYXp5IiwhMCksZmUoKSx4ZSgiY2xyUmVjdXJzaXZlRm9yT2YiLGtjKDIsMyxhLnJvb3QkKSkoImNsclJlY3Vyc2l2ZUZvckdldENoaWxkcmVuIixhLmdldENoaWxk''@;'; put 'put ''cmVuKX19ZnVuY3Rpb24gWEV0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLWFjY29yZGlvbi1jb250ZW50IiksZ3QoMSxxRXQsMyw1LCJjbHItdHJlZSIsNDYpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSg1KTtmZSgpLHhlKCJuZ0lmIixhLnNob3dBY2MpfX1mdW5jdGlvbiBKRXQoYyxsKXtpZigx''@;'; put 'put ''JmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItYWNjb3JkaW9uLXBhbmVsIiw0MiksRnQoImNsckFjY29yZGlvblBhbmVsT3BlbkNoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpLiRpbXBsaWNpdCx2PU9lKDMpO3JldHVybiBDdChoP3YucGFuZWxDaGFuZ2UoaCxmKToiIil9''@;'; put 'put ''KSxkZSgxLCJjbHItYWNjb3JkaW9uLXRpdGxlIiksR3QoMiwiY2xyLWljb24iLDQzKSxMZSgzKSxkZSg0LCJwIiw0NCksTGUoNSksaGUoKSgpLGd0KDYsWEV0LDIsMSwiY2xyLWFjY29yZGlvbi1jb250ZW50Iiw0NSksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQ7ZmUoMyks''@;'; put 'put ''UnIoIiAiLGEuTkFNRSwiICIpLGZlKDIpLF9yKGEuSUQpfX1mdW5jdGlvbiBRRXQoYyxsKXtpZigxJmMmJihsaSgwKSxndCgxLEpFdCw3LDIsImNsci1hY2NvcmRpb24tcGFuZWwiLDQxKSxjaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSx4ZSgibmdJZiIsIWEuaGlkZGVuKX19''@;'; put 'put ''ZnVuY3Rpb24gZVR0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2Iiw0MCkoMSwiY2xyLWFjY29yZGlvbiIpLGd0KDIsUUV0LDIsMSwibmctY29udGFpbmVyIiw3KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgyKSx4ZSgibmdGb3JPZiIsYS5tZXRhT2JqZWN0U2hvd0xpc3QpfX1mdW5j''@;'; put 'put ''dGlvbiB0VHQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiw0Myl9ZnVuY3Rpb24gblR0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMjUpfWZ1bmN0aW9uIHJUdChjLGwpe2lmKDEmYyYmKGRlKDAsInAiLDU0KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQ7ZmUo''@;'; put 'put ''KSxScigiICIsYS5VUkksIiAiKX19ZnVuY3Rpb24gaVR0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRyZWUtbm9kZSIsNDkpKDEsImRpdiIsNTApKDIsImRpdiIpLGd0KDMsdFR0LDEsMCwiY2xyLWljb24iLDUxKSg0LG5UdCwxLDAsImNsci1pY29uIiw1MiksTGUoNSksaGUoKSxndCg2LHJU''@;'; put 'put ''dCwyLDEsInAiLDUzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDt4ZSgiY2xyRXhwYW5kYWJsZSIsITApLGZlKCkseHIoIm9iamVjdC1oZWFkZXIiLCFhLmNvdW50KSxmZSgyKSx4ZSgibmdJZiIsIWEuY291bnQpLGZlKCkseGUoIm5nSWYiLGEuY291bnQpLGZlKCksUnIoIiAi''@;'; put 'put ''LGEuZGlzcGxheSwiICIpLGZlKCkseGUoIm5nSWYiLCFhLmNvdW50KX19ZnVuY3Rpb24gb1R0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLXRyZWUiLDQ3KSxndCgxLGlUdCw3LDcsImNsci10cmVlLW5vZGUiLDQ4KSxxcygyLCJhc3luYyIpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSg0KTt4ZSgi''@;'; put 'put ''Y2xyTGF6eSIsITApLGZlKCkseGUoImNsclJlY3Vyc2l2ZUZvck9mIixrYygyLDMsYS5yb290JCkpKCJjbHJSZWN1cnNpdmVGb3JHZXRDaGlsZHJlbiIsYS5nZXRDaGlsZHJlbil9fWZ1bmN0aW9uIGFUdChjLGwpe2lmKDEmYyYmKGxpKDApLGRlKDEsImRpdiIsNTUpLEd0KDIsImNsci1pY29u''@;'; put 'put ''Iiw0MyksZGUoMywiZGl2Iiw1NikoNCwicCIsNTcpLExlKDUpLGhlKCksZGUoNiwicCIsNTgpLExlKDcpLGhlKCkoKSgpLGd0KDgsb1R0LDMsNSwiY2xyLXRyZWUiLDQ2KSxjaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1PZSgzKTtmZSg1KSxScigiICIsYS5OQU1FLCIgIiksZmUo''@;'; put 'put ''MiksUnIoIiAiLGEuSUQsIiAiKSxmZSgpLHhlKCJuZ0lmIixkLnNob3dBY2MpfX1mdW5jdGlvbiBzVHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDQwKSxndCgxLGFUdCw5LDMsIm5nLWNvbnRhaW5lciIsNyksaGUoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKCkseGUoIm5nRm9yT2YiLGEu''@;'; put 'put ''bWV0YU9iamVjdFNob3dMaXN0KX19ZnVuY3Rpb24gbFR0KGMsbCl7aWYoMSZjJiYoZGUoMCwiY2xyLWRnLXJvdyIpKDEsImNsci1kZy1jZWxsIiksTGUoMiksaGUoKSxkZSgzLCJjbHItZGctY2VsbCIpLExlKDQpLGhlKCksZGUoNSwiY2xyLWRnLWNlbGwiKSxMZSg2KSxoZSgpKCkpLDImYyl7''@;'; put 'put ''Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgyKSxfcihhLlRZUEUpLGZlKDIpLF9yKGEuTkFNRSksZmUoMiksX3IoYS5WQUxVRSl9fWZ1bmN0aW9uIGNUdChjLGwpe2lmKDEmYyYmKGRlKDAsImNsci1kYXRhZ3JpZCIsNTkpKDEsImNsci1kZy1jb2x1bW4iKSxMZSgyLCIgVFlQRSAiKSxHdCgzLCJj''@;'; put 'put ''bHItZGctc3RyaW5nLWZpbHRlciIsNjApLGhlKCksZGUoNCwiY2xyLWRnLWNvbHVtbiIpLExlKDUsIiBOQU1FICIpLEd0KDYsImNsci1kZy1zdHJpbmctZmlsdGVyIiw2MCksaGUoKSxkZSg3LCJjbHItZGctY29sdW1uIiksTGUoOCwiIFZBTFVFICIpLEd0KDksImNsci1kZy1zdHJpbmctZmls''@;'; put 'put ''dGVyIiw2MCksaGUoKSxndCgxMCxsVHQsNywzLCJjbHItZGctcm93Iiw2MSksZGUoMTEsImNsci1kZy1mb290ZXIiKSgxMiwiY2xyLWRnLXBhZ2luYXRpb24iLDYyLDIpKDE0LCJjbHItZGctcGFnZS1zaXplIiw2MyksTGUoMTUsIkF0dHJpYnV0ZXMgcGVyIHBhZ2UiKSxoZSgpLExlKDE2KSxo''@;'; put 'put ''ZSgpKCkoKSksMiZjKXtjb25zdCBhPXZvKDEzKSxkPU9lKDIpO2ZlKDMpLHhlKCJjbHJEZ1N0cmluZ0ZpbHRlciIsZC50eXBlRmlsdGVyKSxmZSgzKSx4ZSgiY2xyRGdTdHJpbmdGaWx0ZXIiLGQubmFtZUZpbHRlciksZmUoMykseGUoImNsckRnU3RyaW5nRmlsdGVyIixkLnZhbHVlRmlsdGVy''@;'; put 'put ''KSxmZSgpLHhlKCJjbHJEZ0l0ZW1zT2YiLGQubWV0YU9iamVjdEF0dHJpYnV0ZXMpLGZlKDIpLHhlKCJjbHJEZ1BhZ2VTaXplIiwxMCksZmUoMikseGUoImNsclBhZ2VTaXplT3B0aW9ucyIsV3MoOSxMRXQpKSxmZSgyKSxMZigiICIsYS5maXJzdEl0ZW0rMSwiIC0gIixhLmxhc3RJdGVtKzEs''@;'; put 'put ''IiBvZiAiLGEudG90YWxJdGVtcywiIEF0dHJpYnV0ZXMgIil9fWZ1bmN0aW9uIHVUdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMzIpKDEsImRpdiIsMzMpLGd0KDIsV0V0LDMsMSwiZGl2IiwzNCksR3QoMywiYnIiKSxndCg0LGVUdCwzLDEsImRpdiIsMzUpKDUsc1R0LDIsMSwiZGl2Iiwz''@;'; put 'put ''NSksaGUoKSxkZSg2LCJkaXYiLDM2KSg3LCJoMyIpLExlKDgpLGhlKCksZ3QoOSxjVHQsMTcsMTAsImNsci1kYXRhZ3JpZCIsMzcpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoMikseGUoIm5nSWYiLGEubWV0YU9iamVjdExpc3QmJiFhLm9iamVjdFJvdXRlKSxmZSgyKSx4ZSgibmdJ''@;'; put 'put ''ZiIsIWEub2JqZWN0VmlldyksZmUoKSx4ZSgibmdJZiIsYS5vYmplY3RWaWV3KSxmZSgzKSxfcihhLmFzc29PYmplY3RTZWxlY3RlZCksZmUoKSx4ZSgibmdJZiIsYS5zaG93VGFibGUpfX1sZXQgTHRlPSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoYSxkLGgsZix2LE0pe3RoaXMuZXZlbnRT''@;'; put 'put ''ZXJ2aWNlPWEsdGhpcy5zYXNTZXJ2aWNlPWQsdGhpcy5oZWxwZXJTZXJ2aWNlPWgsdGhpcy5sb2NhdGlvbj1mLHRoaXMucm91dGVyPXYsdGhpcy5yb3V0ZT1NLHRoaXMubWV0YURhdGFTZWFyY2g9IiIsdGhpcy5tZXRhT2JqZWN0U2VhcmNoPSIiLHRoaXMubWV0YU9iamVjdEFzc29jaWF0aW9u''@;'; put 'put ''cz1bXSx0aGlzLm1ldGFPYmplY3RBdHRyaWJ1dGVzPVtdLHRoaXMuc2hvd1RhYmxlPSExLHRoaXMuc2hvd0FjYz0hMSx0aGlzLm1ldGFEYXRhSWQ9IiIsdGhpcy5sb2FkaW5nPSEwLHRoaXMubWV0YXR5cGVzTG9hZGluZz0hMCx0aGlzLm1ldGFPYmplY3RTaXplPTIwMCx0aGlzLmFzc29UeXBl''@;'; put 'put ''U2VsZWN0ZWQ9IiIsdGhpcy5hc3NvT2JqZWN0U2VsZWN0ZWQ9IiIsdGhpcy5yZXBvc2l0b3J5PSIiLHRoaXMub2JqZWN0Um91dGU9ITEsdGhpcy5zaG93RGF0YT0hMSx0aGlzLm9iamVjdFZpZXc9ITEsdGhpcy5nZXRDaGlsZHJlbj1EPT5ELmNvdW50P2ZhKEQuZGV0YWlscyk6dGhpcy5zYXNT''@;'; put 'put ''ZXJ2aWNlLnJlcXVlc3QoIm1ldGFuYXYvbWV0YWRldGFpbHMiLHtTQVNDb250cm9sVGFibGU6W3tvYmplY3R1cmk6RC5BU1NPQ1VSSX1dfSkudGhlbihuZT0+e3RoaXMuc2hvd1RhYmxlPSEwLHRoaXMubWV0YU9iamVjdEF0dHJpYnV0ZXM9bmUuYWRhcHRlclJlc3BvbnNlLmF0dHJpYnV0ZXMs''@;'; put 'put ''dGhpcy5hc3NvT2JqZWN0U2VsZWN0ZWQ9RC5OQU1FO2xldCBjZT10aGlzLnJvdXRlci51cmw7cmV0dXJuIHRoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMub2JqZWN0Um91dGU/Y2Uuc2xpY2UoMCxjZS5sYXN0SW5kZXhPZigib2JqZWN0IikpKyJvYmplY3QvIitELkFTU09DVVJJLnNs''@;'; put 'put ''aWNlKDErRC5BU1NPQ1VSSS5pbmRleE9mKCJcXCIpKTpjZSsiL29iamVjdC8iK0QuQVNTT0NVUkkuc2xpY2UoMStELkFTU09DVVJJLmluZGV4T2YoIlxcIikpKSx0aGlzLmdldEFzc29zaWF0aW9uc0NvdW50KG5lLmFkYXB0ZXJSZXNwb25zZS5hc3NvY2lhdGlvbnMpfSksdGhpcy5kZWJvdW5j''@;'; put 'put ''ZT0hMX1uZ09uSW5pdCgpe0tuLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2aWV3L21ldGFkYXRhIix0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoIi92aWV3L21ldGFkYXRhL29iamVjdC8iKSYmKHRoaXMub2JqZWN0Um91dGU9ITAsdGhpcy5vYmplY3RWaWV3PSEwKSx0aGlzLnBhZ2VTaXpl''@;'; put 'put ''PTUsS24ubWV0YWRhdGEubWV0YURhdGFMaXN0JiZLbi5tZXRhZGF0YS5tZXRhUmVwb3NpdG9yaWVzJiYhdGhpcy5vYmplY3RSb3V0ZT8odGhpcy5tZXRhRGF0YUxpc3Q9S24ubWV0YWRhdGEubWV0YURhdGFMaXN0LHRoaXMucmVwb3NpdG9yaWVzPUtuLm1ldGFkYXRhLm1ldGFSZXBvc2l0b3Jp''@;'; put 'put ''ZXMsdGhpcy5yZXBvc2l0b3J5PUtuLm1ldGFkYXRhLnNlbGVjdGVkUmVwb3NpdG9yeSx0aGlzLmxvYWRpbmc9ITEsdGhpcy5tZXRhdHlwZXNMb2FkaW5nPSExLHRoaXMubWV0YURhdGFTZWFyY2g9S24ubWV0YWRhdGEubWV0YURhdGFTZWFyY2gpOih0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgi''@;'; put 'put ''bWV0YW5hdi9tZXRhdHlwZXMiLG51bGwpLnRoZW4oYT0+e3RoaXMubWV0YURhdGFMaXN0PWEuYWRhcHRlclJlc3BvbnNlLnR5cGVzLEtuLm1ldGFkYXRhLm1ldGFEYXRhTGlzdD10aGlzLm1ldGFEYXRhTGlzdCx0aGlzLmxvYWRpbmc9ITEsdGhpcy5tZXRhdHlwZXNMb2FkaW5nPSExfSksdGhp''@;'; put 'put ''cy5zYXNTZXJ2aWNlLnJlcXVlc3QoIm1ldGFuYXYvbWV0YXJlcG9zIixudWxsKS50aGVuKGE9PntsZXQgZD0hMTt0aGlzLnJlcG9zaXRvcmllcz1bXTtmb3IobGV0IGg9MDtoPGEuYWRhcHRlclJlc3BvbnNlLm91dHJlcG9zLmxlbmd0aDtoKyspdGhpcy5yZXBvc2l0b3JpZXMucHVzaChhLmFk''@;'; put 'put ''YXB0ZXJSZXNwb25zZS5vdXRyZXBvc1toXS5OQU1FKSwiRm91bmRhdGlvbiI9PT1hLmFkYXB0ZXJSZXNwb25zZS5vdXRyZXBvc1toXS5OQU1FJiYoZD0hMCk7aWYodGhpcy5yZXBvc2l0b3J5PWQ/IkZvdW5kYXRpb24iOmEuYWRhcHRlclJlc3BvbnNlLm91dHJlcG9zWzBdLk5BTUUsS24ubWV0''@;'; put 'put ''YWRhdGEubWV0YVJlcG9zaXRvcmllcz10aGlzLnJlcG9zaXRvcmllcyxLbi5tZXRhZGF0YS5zZWxlY3RlZFJlcG9zaXRvcnk9dGhpcy5yZXBvc2l0b3J5LHRoaXMub2JqZWN0Um91dGUpe3RoaXMuZXZlbnRTZXJ2aWNlLmNsb3NlU2lkZWJhcigpLHRoaXMuc2hvd0RhdGE9ITA7bGV0IGg9IiIs''@;'; put 'put ''Zj10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5vYmplY3RJRDt0aGlzLm1ldGFPYmplY3RMaXN0PVtdLHRoaXMubWV0YU9iamVjdExpc3QucHVzaCh7SUQ6ZixOQU1FOmh9KSx0aGlzLm1ldGFPYmplY3RTaG93TGlzdD10aGlzLm1ldGFPYmplY3RMaXN0LHRoaXMubWV0YU9iamVjdE9uQ2xp''@;'; put 'put ''Y2sodGhpcy5tZXRhT2JqZWN0U2hvd0xpc3RbMF0uSUQsdGhpcy5tZXRhT2JqZWN0U2hvd0xpc3RbMF0pfX0pKX10cmVlTm9kZUNsaWNrZWQoYSxkLGgpeyJDb2xsYXBzZSI9PT1hLnRhcmdldC50aXRsZSYmdGhpcy5jb2xsYXBzZVRyZWVJdGVtcyhoLGQpfWNvbGxhcHNlVHJlZUl0ZW1zKGEs''@;'; put 'put ''ZCl7YS5mb3JFYWNoKGg9PntKU09OLnN0cmluZ2lmeShoKSE9PUpTT04uc3RyaW5naWZ5KGQpJiYoaC5leHBhbmRlZD0hMSl9KX1tZXRhRGF0YU9uQ2xpY2soYSxkKXt0aGlzLm9iamVjdFZpZXc9ITEsdGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoIi92aWV3L21ldGFkYXRhIiksdGhpcy5z''@;'; put 'put ''aG93RGF0YT0hMSx0aGlzLmxvYWRpbmc9ITAsdGhpcy5zZWxlY3RtZXRhRGF0YShhLGQpfW1ldGFPYmplY3RPbkNsaWNrKGEsZCl7dGhpcy5hc3NvT2JqZWN0U2VsZWN0ZWQ9IiAuICIsdGhpcy5zaG93QWNjPSExLHRoaXMubWV0YU9iamVjdEF0dHJpYnV0ZXM9W10sdGhpcy5zZWxlY3RtZXRh''@;'; put 'put ''T2JqZWN0KGEsZCl9c2VsZWN0bWV0YURhdGEoYSxkKXt2YXIgaD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtoLnNhc1NlcnZpY2UucmVxdWVzdCgibWV0YW5hdi9tZXRhb2JqZWN0cyIse1NBU0NvbnRyb2xUYWJsZTpbe21ldGF0eXBlOmEscmVwbzpoLnJlcG9zaXRvcnl9XX0pLnRoZW4o''@;'; put 'put ''dj0+e2gubWV0YU9iamVjdExpc3Q9di5hZGFwdGVyUmVzcG9uc2Uub2JqZWN0cyxoLmdldE1ldGFPYmplY3RBdHRyaWJ1dGVzKGgubWV0YU9iamVjdFNpemUpLGgubG9hZGluZz0hMSxoLmFzc29UeXBlU2VsZWN0ZWQ9YSxoLmV2ZW50U2VydmljZS5jbG9zZVNpZGViYXIoKSxoLnNob3dEYXRh''@;'; put 'put ''PSEwfSl9KSgpfXNlbGVjdG1ldGFPYmplY3QoYSxkKXt2YXIgaD10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXtoLnNhc1NlcnZpY2UucmVxdWVzdCgibWV0YW5hdi9tZXRhZGV0YWlscyIse1NBU0NvbnRyb2xUYWJsZTpbe29iamVjdHVyaTphfV19KS50aGVuKHY9PntoLm1ldGFPYmplY3RB''@;'; put 'put ''c3NvY2lhdGlvbnM9di5hZGFwdGVyUmVzcG9uc2UuYXNzb2NpYXRpb25zLGgucm9vdCQ9ZmEoaC5nZXRBc3Nvc2lhdGlvbnNDb3VudCh2LmFkYXB0ZXJSZXNwb25zZS5hc3NvY2lhdGlvbnMpKSxoLnNob3dBY2M9ITAsaC5zaG93VGFibGU9ITA7bGV0IE09di5hZGFwdGVyUmVzcG9uc2UuYXR0''@;'; put 'put ''cmlidXRlcy5maW5kKFo9PiJOYW1lIj09PVouTkFNRSkuVkFMVUU7aC5hc3NvT2JqZWN0U2VsZWN0ZWQ9TSxkLk5BTUU9TTtsZXQgRD1oLnJvdXRlci51cmw7aC5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoaC5vYmplY3RSb3V0ZT9ELnNsaWNlKDAsRC5sYXN0SW5kZXhPZigib2JqZWN0IikpKyJv''@;'; put 'put ''YmplY3QvIithLnNsaWNlKDErYS5pbmRleE9mKCJcXCIpKTpEKyIvb2JqZWN0LyIrYS5zbGljZSgxK2EuaW5kZXhPZigiXFwiKSkpLGgubWV0YU9iamVjdEF0dHJpYnV0ZXM9di5hZGFwdGVyUmVzcG9uc2UuYXR0cmlidXRlc30pfSkoKX1zZWxlY3RBc3Nvc2lhdGlvbnNEZXRhaWxzKGEsZCl7''@;'; put 'put ''dmFyIGg9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aC5zYXNTZXJ2aWNlLnJlcXVlc3QoIm1ldGFuYXYvbWV0YWRldGFpbHMiLHtTQVNDb250cm9sVGFibGU6W3tvYmplY3R1cmk6YX1dfSkudGhlbih2PT57aC5tZXRhT2JqZWN0QXR0cmlidXRlcz12LmFkYXB0ZXJSZXNwb25zZS5hdHRy''@;'; put 'put ''aWJ1dGVzLGguc2hvd1RhYmxlPSEwfSl9KSgpfWdldEFzc29zaWF0aW9uc0NvdW50KGEpe2xldCBkPW5ldyBNYXA7Zm9yKGxldCBmIG9mIGEpe2QuaGFzKGYuQVNTT0MpfHxkLnNldChmLkFTU09DLHtjb3VudDowLGRldGFpbHM6W119KTtsZXQgdj1kLmdldChmLkFTU09DKTt2LmNvdW50Kyss''@;'; put 'put ''di5kZXRhaWxzLnB1c2goe0FTU09DVVJJOmYuQVNTT0NVUkksTkFNRTpmLk5BTUUsZGlzcGxheTpmLk5BTUUsVVJJOmYuQVNTT0NVUkkuc2xpY2UoZi5BU1NPQ1VSSS5pbmRleE9mKCI6IikrMSl9KX1sZXQgaD1bXTtyZXR1cm4gZC5mb3JFYWNoKGZ1bmN0aW9uKGYsdil7aC5wdXNoKHtBU1NP''@;'; put 'put ''Qzp2LGNvdW50OmYuY291bnQsZGV0YWlsczpmLmRldGFpbHMsZGlzcGxheTp2KyIgKCAiK2YuY291bnQrIiApIn0pfSksaH1zZXRUeXBlQXNzb3NpYXRpb25zKGEpe2xldCBkPVtdO2ZvcihsZXQgaCBvZiB0aGlzLm1ldGFPYmplY3RBc3NvY2lhdGlvbnMpaC5BU1NPQz09PWEmJmQucHVzaCho''@;'; put 'put ''KTtyZXR1cm4gdGhpcy5hc3Nvc2lhdGlvbk5hbWVzPWQsZH1hc3Nvc2lhdGlvbk5hbWVPbkNsaWNrKGEpe3RoaXMuYXNzb09iamVjdFNlbGVjdGVkPSIgLiAiLHRoaXMubWV0YU9iamVjdEF0dHJpYnV0ZXM9W10sdGhpcy5zaG93VGFibGU9ITEsdGhpcy5zZWxlY3RBc3Nvc2lhdGlvbnNEZXRh''@;'; put 'put ''aWxzKGEpfW1ldGFMaXN0T25GaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UubGlicmFyeU9uRmlsdGVyKHRoaXMubWV0YURhdGFMaXN0LHRoaXMubWV0YURhdGFTZWFyY2gsIklEIiksS24ubWV0YWRhdGEubWV0YURhdGFTZWFyY2g9dGhpcy5tZXRhRGF0YVNlYXJjaH1tZXRhT2JqZWN0T25G''@;'; put 'put ''aWx0ZXIoKXt0aGlzLm1ldGFPYmplY3RBdHRyaWJ1dGVzPVtdLHRoaXMuaGVscGVyU2VydmljZS5tZXRhT2JqZWN0T25GaWx0ZXIodGhpcy5tZXRhT2JqZWN0TGlzdCx0aGlzLm1ldGFPYmplY3RTZWFyY2gsIk5BTUUiKSx0aGlzLmdldE1ldGFPYmplY3RBdHRyaWJ1dGVzKHRoaXMubWV0YU9i''@;'; put 'put ''amVjdFNpemUpLEtuLm1ldGFkYXRhLm1ldGFPYmplY3RTZWFyY2g9dGhpcy5tZXRhT2JqZWN0U2VhcmNofWdldE1ldGFPYmplY3RBdHRyaWJ1dGVzKGEpe2lmKHZvaWQgMCE9PXRoaXMubWV0YU9iamVjdExpc3QmJnRoaXMubWV0YU9iamVjdExpc3QubGVuZ3RoPmEpe2xldCBkPTAsaD0tMTtm''@;'; put 'put ''b3IobGV0IGY9MDtmPHRoaXMubWV0YU9iamVjdExpc3QubGVuZ3RoO2YrKylpZigodm9pZCAwPT09dGhpcy5tZXRhT2JqZWN0TGlzdFtmXS5oaWRkZW58fCExPT09dGhpcy5tZXRhT2JqZWN0TGlzdFtmXS5oaWRkZW4pJiZkKyssZD09PWEpe2g9ZjticmVha310aGlzLm1ldGFPYmplY3RTaG93''@;'; put 'put ''TGlzdD0tMSE9PWg/dGhpcy5tZXRhT2JqZWN0TGlzdC5zbGljZSgwLGgpOnRoaXMubWV0YU9iamVjdExpc3R9ZWxzZSB0aGlzLm1ldGFPYmplY3RTaG93TGlzdD10aGlzLm1ldGFPYmplY3RMaXN0fXBhbmVsQ2hhbmdlKGEsZCl7dGhpcy5kZWJvdW5jZXx8KHRoaXMubWV0YU9iamVjdE9uQ2xp''@;'; put 'put ''Y2soZC5JRCxkKSx0aGlzLmRlYm91bmNlPSEwLHNldFRpbWVvdXQoKCk9Pnt0aGlzLmRlYm91bmNlPSExfSw2MDApKX11cGRhdGVTZWxlY3RlZFJlcG9zaXRvcnkoKXtLbi5tZXRhZGF0YS5zZWxlY3RlZFJlcG9zaXRvcnk9dGhpcy5yZXBvc2l0b3J5fXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1m''@;'; put 'put ''dW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKHBjKSxHZShKcyksR2UoR3UpLEdlKHVoKSxHZShMcyksR2UoQ3UpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1tZXRhZGF0YSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVy''@;'; put 'put ''Il0sZGVjbHM6MTcsdmFyczo4LGNvbnN0czpbWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbInNlYXJjaE9ialRyZWVJbnB1dCIsIiJdLFsicGFnaW5hdGlvbiIsIiJdLFsxLCJyZXBvLWRyb3Bkb3duIl0sWyJjbHJTZWxlY3QiLCIiLCJpZCIsInJlcG9zaXRvcnkiLDMsIm5nTW9kZWxDaGFu''@;'; put 'put ''Z2UiLCJjaGFuZ2UiLCJuZ01vZGVsIl0sWzMsInZhbHVlIiw0LCJuZ0ZvciIsIm5nRm9yT2YiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJjYXJkIiwiYmFja2dyb3VuZC10cmFuc3BhcmVudC1p''@;'; put 'put ''Il0sWzEsImNvbG9yLWdyYXkiXSxbImNsYXNzIiwibm8tdGFibGUtc2VsZWN0ZWQiLDQsIm5nSWYiXSxbImNsYXNzIiwibG9hZGluZ1NwaW5uZXIiLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLXJvdyBjbHItZmxleC1ncm93LTEiLDQsIm5nSWYiXSxbMywidmFsdWUiXSxbMSwic2VhcmNoLW5v''@;'; put 'put ''ZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJzZWFyY2ggU0FTIFR5cGVzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01v''@;'; put 'put ''ZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwic2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciLCJjbGljayIsImNsckV4cGFu''@;'; put 'put ''ZGVkQ2hhbmdlIiw0LCJuZ0lmIl0sWzMsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLCJjbHJFeHBhbmRlZCIsImNsckxvYWRpbmciXSxbMSwibS0wIiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImJsb2NrIl0sWzEsIm5vLXRhYmxlLXNlbGVjdGVkIl0sWyJzaGFw''@;'; put 'put ''ZSIsIndhcm5pbmctc3RhbmRhcmQiLCJzaXplIiwiNjAiLDEsImlzLWluZm8iLCJpY29uLWRjLWZpbGwiXSxbImNkcy10ZXh0Iiwic2VjdGlvbiIsMSwidGV4dC1jZW50ZXIiLCJjb2xvci1ncmF5IiwibXQtMTAiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFs0LCJuZ0lm''@;'; put 'put ''Il0sWzEsImNsci1yb3ciLCJjbHItZmxleC1ncm93LTEiXSxbMSwiY2xyLWNvbC02Il0sWyJjbGFzcyIsInNlYXJjaC1pbnB1dCIsNCwibmdJZiJdLFsiY2xhc3MiLCJvYmplY3RzLWNvbCIsNCwibmdJZiJdLFsxLCJjbHItY29sLTYiLCJ0ZXh0LWNlbnRlciJdLFsiY2xhc3MiLCJkYXRhZ3Jp''@;'; put 'put ''ZC1jdXN0b20tZm9vdGVyIiw0LCJuZ0lmIl0sWzEsInNlYXJjaC1pbnB1dCJdLFsiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsInNlYXJjaCIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJdLFsxLCJvYmpl''@;'; put 'put ''Y3RzLWNvbCJdLFszLCJjbHJBY2NvcmRpb25QYW5lbE9wZW5DaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xyQWNjb3JkaW9uUGFuZWxPcGVuQ2hhbmdlIl0sWyJzaGFwZSIsInJhY2stc2VydmVyIl0sWzEsImZsb2F0LXJpZ2h0Il0sWzQsImNscklmRXhwYW5kZWQiXSxbMywiY2xyTGF6eSIsNCwi''@;'; put 'put ''bmdJZiJdLFszLCJjbHJMYXp5Il0sWzMsImNsckV4cGFuZGFibGUiLDQsImNsclJlY3Vyc2l2ZUZvciIsImNsclJlY3Vyc2l2ZUZvck9mIiwiY2xyUmVjdXJzaXZlRm9yR2V0Q2hpbGRyZW4iXSxbMywiY2xyRXhwYW5kYWJsZSJdLFsxLCJmdWxsLXdpZHRoIl0sWyJzaGFwZSIsInJhY2stc2Vy''@;'; put 'put ''dmVyIiw0LCJuZ0lmIl0sWyJzaGFwZSIsImJsb2NrIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImZsb2F0LXJpZ2h0IG9iamVjdC11cmkiLDQsIm5nSWYiXSxbMSwiZmxvYXQtcmlnaHQiLCJvYmplY3QtdXJpIl0sWzEsImNvbHMtaGVhZCJdLFsxLCJvYmplY3QtdGV4dCJdLFsxLCJtLTAiLCJ3b3Jk''@;'; put 'put ''LWJyZWFrIiwibXItMjAiXSxbMSwiZmxvYXQtcmlnaHQiLCJtbC0zIl0sWzEsImRhdGFncmlkLWN1c3RvbS1mb290ZXIiXSxbMywiY2xyRGdTdHJpbmdGaWx0ZXIiXSxbNCwiY2xyRGdJdGVtcyIsImNsckRnSXRlbXNPZiJdLFszLCJjbHJEZ1BhZ2VTaXplIl0sWzMsImNsclBhZ2VTaXplT3B0''@;'; put 'put ''aW9ucyJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImFwcC1zaWRlYmFyIikoMSwiZGl2IiwzKSgyLCJjbHItc2VsZWN0LWNvbnRhaW5lciIpKDMsImxhYmVsIiksTGUoNCwiTWV0YWRhdGEgUmVwb3NpdG9yeSIpLGhlKCksZGUoNSwic2VsZWN0Iiw0KSxwaSgibmdNb2Rl''@;'; put 'put ''bENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIHZpKGgucmVwb3NpdG9yeSx2KXx8KGgucmVwb3NpdG9yeT12KSx2fSksRnQoImNoYW5nZSIsZnVuY3Rpb24oKXtyZXR1cm4gaC51cGRhdGVTZWxlY3RlZFJlcG9zaXRvcnkoKX0pLGd0KDYsT0V0LDIsMiwib3B0aW9uIiw1KSxoZSgpKCkoKSxk''@;'; put 'put ''ZSg3LCJjbHItdHJlZSIpLGd0KDgsSEV0LDYsMywiY2xyLXRyZWUtbm9kZSIsNikoOSxWRXQsMiwxLCJuZy1jb250YWluZXIiLDcpLGhlKCkoKSxkZSgxMCwiZGl2Iiw4KSgxMSwiZGl2Iiw5KSgxMiwiaDMiLDEwKSxMZSgxMyksaGUoKSxndCgxNCxCRXQsNCwwLCJkaXYiLDExKSgxNSxaRXQs''@;'; put 'put ''NCwxLCJkaXYiLDEyKSgxNix1VHQsMTAsNSwiZGl2IiwxMyksaGUoKSgpKSwyJmQmJihmZSg1KSxmaSgibmdNb2RlbCIsaC5yZXBvc2l0b3J5KSxmZSgpLHhlKCJuZ0Zvck9mIixoLnJlcG9zaXRvcmllcyksZmUoMikseGUoIm5nSWYiLGgubWV0YURhdGFMaXN0KSxmZSgpLHhlKCJuZ0Zvck9m''@;'; put 'put ''IixoLm1ldGFEYXRhTGlzdCksZmUoNCksX3IoaC5hc3NvVHlwZVNlbGVjdGVkKSxmZSgpLHhlKCJuZ0lmIiwhaC5sb2FkaW5nJiYhaC5tZXRhT2JqZWN0TGlzdCksZmUoKSx4ZSgibmdJZiIsaC5sb2FkaW5nKSxmZSgpLHhlKCJuZ0lmIixoLnNob3dEYXRhKSl9LGRlcGVuZGVuY2llczpbc3Ms''@;'; put 'put ''eW8sVWYsWmYsUWwsemYsUXMsWXMseG0sYnAsQTcsbk8sJHksS3gsck8sU20sU2RlLHVnLGs3LFh5LE1tLHg3LENtLEU3LGVHLFNoLE9kLERkZSxPbCxCMCxBMWUsdXMsSWQsWnksVXkscDFlLGtMLG0xZSxnMWUsdjFlLHlZLHQ0LGU0LHhNXSxzdHlsZXM6WyJib2R5W2Nkcy10aGVtZT1kYXJr''@;'; put 'put ''XSAub2JqZWN0LWhlYWRlcjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiM0MDU1NjB9ICBib2R5W2Nkcy10aGVtZT1saWdodF0gLm9iamVjdHMtY29se2JhY2tncm91bmQ6I2ZmZn0gIGJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAub2JqZWN0LWhlYWRlcjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNk''@;'; put 'put ''OGUzZTl9Lm9iamVjdHMtY29sW19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6NzV2aDtvdmVyZmxvdzpzY3JvbGw7Ym9yZGVyOjFweCBzb2xpZCAjY2NjY2NjO2JvcmRlci1yYWRpdXM6NHB4fS5jb2xzLWhlYWRbX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQgI2NjY2NjYztw''@;'; put 'put ''YWRkaW5nOjEwcHg7ZGlzcGxheTpmbGV4fS5vYmplY3QtdGV4dFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQ7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luLWxlZnQ6MTBweDtmbGV4OjF9LnJlcG8tZHJvcGRvd25bX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVde21hcmdpbi1yaWdodDoxNXB4O21hcmdpbi1sZWZ0OjE1cHg7bWFyZ2luLWJvdHRvbToxMHB4fS5jbHItYWNjb3JkaW9uLXRpdGxlW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5mbG9hdC1yaWdodFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjA7Zmxv''@;'; put 'put ''YXQ6cmlnaHR9LmZ1bGwtd2lkdGhbX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCV9Lm9iamVjdC11cmlbX25nY29udGVudC0lQ09NUCVde21hcmdpbjo1cHggMCAwfS5vYmplY3QtaGVhZGVyW19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1''@;'; put 'put ''c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO3BhZGRpbmctbGVmdDozcHg7cGFkZGluZy1yaWdodDozcHh9Lm9iamVjdC1oZWFkZXJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2JvcmRlci1yYWRpdXM6M3B4fS5kYXRhZ3JpZC1ob3N0W19uZ2NvbnRlbnQtJUNPTVAlXXtkaXNwbGF5OnVu''@;'; put 'put ''c2V0IWltcG9ydGFudH0uY2FyZFtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDowO2ZsZXg6MTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5jb250ZW50LWFyZWFbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVyZW0haW1wb3J0YW50O2Rpc3BsYXk6ZmxleDtm''@;'; put 'put ''bGV4LWRpcmVjdGlvbjpjb2x1bW59Il19KX1zdGF0aWN7dGhpcy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KX19cmV0dXJuIGN9KSgpO2Z1bmN0aW9uIGRUdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDEyKX1mdW5jdGlv''@;'; put 'put ''biBoVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItaWNvbiIsMTMpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDIpO3JldHVybiBoLnJvbGVTZWFyY2g9IiIsQ3QoaC5yb2xlTGlzdE9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rpb24gZlR0KGMs''@;'; put 'put ''bCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsNykoMSwiZGl2Iiw4KSgyLCJpbnB1dCIsOSwwKSxwaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpO3JldHVybiB2aShmLnJvbGVTZWFyY2gsaCl8fChmLnJvbGVTZWFyY2g9''@;'; put 'put ''aCksQ3QoaCl9KSxGdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkucm9sZUxpc3RPbkZpbHRlcigpKX0pLGhlKCksZ3QoNCxkVHQsMSwwLCJjbHItaWNvbiIsMTApKDUsaFR0LDEsMCwiY2xyLWljb24iLDExKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPXZvKDMpLGQ9''@;'; put 'put ''T2UoKTtmZSgyKSxmaSgibmdNb2RlbCIsZC5yb2xlU2VhcmNoKSxmZSgyKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9fWZ1bmN0aW9uIHBUdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci10cmVlLW5vZGUi''@;'; put 'put ''LDE1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoKS5yb2xlT25DbGljayhoKSl9KSxkZSgxLCJwIiwxNiksR3QoMiwiY2xyLWljb24iLDE3KSxMZSgzKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0''@;'; put 'put ''LGQ9T2UoKTt4cigiYWN0aXZlIixhLlJPTEVVUkk9PT1kLnJvbGVVcmkpLGZlKDMpLFJyKCIgIixhLlJPTEVOQU1FLCIgIil9fWZ1bmN0aW9uIGdUdChjLGwpe2lmKDEmYyYmKGxpKDApLGd0KDEscFR0LDQsMywiY2xyLXRyZWUtbm9kZSIsMTQpLGNpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBs''@;'; put 'put ''aWNpdDtmZSgpLHhlKCJuZ0lmIiwhYS5oaWRkZW4pfX1mdW5jdGlvbiBtVHQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDE4KSgxLCJzcGFuIiwxOSksTGUoMiwiIExvYWRpbmcuLi4gIiksaGUoKSgpKX1mdW5jdGlvbiB2VHQoYyxsKXsxJmMmJihkZSgwLCJoNSIpLExlKDEsIk5vIE1lbWJlcnMg''@;'; put 'put ''UHJlc2VudCIpLGhlKCkpfWZ1bmN0aW9uIGJUdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIiwzMikoMSwidGQiLDMwKSxMZSgyKSxoZSgpLGRlKDMsInRkIiwzMCksTGUoNCksaGUoKSxkZSg1LCJ0ZCIsMzApLExlKDYpLGhlKCksZGUoNywidGQiLDMwKSxMZSg4KSxoZSgpKCkpLDImYyl7Y29u''@;'; put 'put ''c3QgYT1sLiRpbXBsaWNpdDt4ZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvdXNlcnMvIithLlVSSU1FTSksZmUoMiksX3IoYS5NRU1CRVJOQU1FKSxmZSgyKSxfcihhLkVNQUlMKSxmZSgyKSxfcihhLk1FTUJFUkNSRUFURUQpLGZlKDIpLF9yKGEuTUVNQkVSVVBEQVRFRCl9fWZ1bmN0''@;'; put 'put ''aW9uIHlUdChjLGwpe2lmKDEmYyYmKGRlKDAsInRhYmxlIiwyOCkoMSwidGhlYWQiKSgyLCJ0ciIpKDMsInRkIiwyOSkoNCwiYiIpLExlKDUsIk5BTUUiKSxoZSgpKCksZGUoNiwidGQiLDI5KSg3LCJiIiksTGUoOCwiRU1BSUwiKSxoZSgpKCksZGUoOSwidGQiLDI5KSgxMCwiYiIpLExlKDEx''@;'; put 'put ''LCJDUkVBVEVEIiksaGUoKSgpLGRlKDEyLCJ0ZCIsMzApKDEzLCJiIiksTGUoMTQsIlVQREFURUQiKSxoZSgpKCkoKSgpLGRlKDE1LCJ0Ym9keSIpLGd0KDE2LGJUdCw5LDUsInRyIiwzMSksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoMTYpLHhlKCJuZ0Zvck9mIixhLnJvbGVNZW1i''@;'; put 'put ''ZXJzKX19ZnVuY3Rpb24gX1R0KGMsbCl7MSZjJiYoZGUoMCwiaDUiKSxMZSgxLCJObyBHcm91cHMgUHJlc2VudCAhIiksaGUoKSl9ZnVuY3Rpb24gd1R0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiLDMyKSgxLCJ0ZCIsMzApLExlKDIpLGhlKCksZGUoMywidGQiLDMwKSxMZSg0KSxoZSgpLGRl''@;'; put 'put ''KDUsInRkIiwzMCksTGUoNiksaGUoKSxkZSg3LCJ0ZCIsMzApLExlKDgpLGhlKCkoKSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O3hlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi9ncm91cHMvIithLlVSSU1FTSksZmUoMiksX3IoYS5NRU1CRVJOQU1FKSxmZSgyKSxfcihhLkVNQUlM''@;'; put 'put ''KSxmZSgyKSxfcihhLk1FTUJFUkNSRUFURUQpLGZlKDIpLF9yKGEuTUVNQkVSVVBEQVRFRCl9fWZ1bmN0aW9uIENUdChjLGwpe2lmKDEmYyYmKGRlKDAsInRhYmxlIiwyOCkoMSwidGhlYWQiKSgyLCJ0ciIpKDMsInRkIiwyOSkoNCwiYiIpLExlKDUsIk5BTUUiKSxoZSgpKCksZGUoNiwidGQi''@;'; put 'put ''LDI5KSg3LCJiIiksTGUoOCwiRU1BSUwiKSxoZSgpKCksZGUoOSwidGQiLDI5KSgxMCwiYiIpLExlKDExLCJDUkVBVEVEIiksaGUoKSgpLGRlKDEyLCJ0ZCIsMzApKDEzLCJiIiksTGUoMTQsIlVQREFURUQiKSxoZSgpKCkoKSgpLGRlKDE1LCJ0Ym9keSIpLGd0KDE2LHdUdCw5LDUsInRyIiwz''@;'; put 'put ''MSksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoMTYpLHhlKCJuZ0Zvck9mIixhLnJvbGVHcm91cHMpfX1mdW5jdGlvbiBTVHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSgxLCJkaXYiLDIwKSgyLCJkaXYiLDIxKSgzLCJ0YWJsZSIsMjIpKDQsInRib2R5IikoNSwidHIiKSg2LCJ0''@;'; put 'put ''ZCIsMjMpKDcsInAiLDI0KSg4LCJiIiksTGUoOSksaGUoKSgpKCkoKSxkZSgxMCwidHIiKSgxMSwidGQiLDIzKSgxMiwiaSIpLExlKDEzKSxoZSgpKCkoKSgpKCkoKSgpLGRlKDE0LCJkaXYiLDIwKSgxNSwiZGl2IiwyMSkoMTYsImRpdiIsMjUpKDE3LCJkaXYiKSgxOCwiaDMiKSxMZSgxOSks''@;'; put 'put ''aGUoKSxndCgyMCx2VHQsMiwwLCJoNSIsNiksZGUoMjEsImRpdiIsMjYpLGd0KDIyLHlUdCwxNywxLCJ0YWJsZSIsMjcpLGhlKCkoKSxHdCgyMywiaHIiKSxkZSgyNCwiZGl2IikoMjUsImgzIiksTGUoMjYpLGhlKCksZ3QoMjcsX1R0LDIsMCwiaDUiLDYpLGRlKDI4LCJkaXYiLDI2KSxndCgy''@;'; put 'put ''OSxDVHQsMTcsMSwidGFibGUiLDI3KSxoZSgpKCksR3QoMzAsImJyIiksaGUoKSgpKCkoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoOSksX3IoYS5yb2xlTmFtZSksZmUoNCksX3IoYS5yb2xlRGVzYyksZmUoNiksUnIoIk1FTUJFUlMgKCIsYS5yb2xlTWVtYmVyc0NvdW50LCIpIiksZmUoKSx4''@;'; put 'put ''ZSgibmdJZiIsMD09YS5yb2xlTWVtYmVyc0NvdW50KSxmZSgyKSx4ZSgibmdJZiIsMCE9YS5yb2xlTWVtYmVyc0NvdW50KSxmZSg0KSxScigiR3JvdXBzICgiLGEucm9sZUdyb3Vwc0NvdW50LCIpIiksZmUoKSx4ZSgibmdJZiIsMD09YS5yb2xlR3JvdXBzQ291bnQpLGZlKDIpLHhlKCJuZ0lm''@;'; put 'put ''IiwwIT1hLnJvbGVHcm91cHNDb3VudCl9fWxldCB0N2U9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmLHYpe3RoaXMuc2FzU2VydmljZT1hLHRoaXMuaGVscGVyU2VydmljZT1kLHRoaXMucm91dGVyPWgsdGhpcy5sb2NhdGlvbj1mLHRoaXMucm91dGU9dix0aGlzLnJvbGVTZWFy''@;'; put 'put ''Y2g9IiIsdGhpcy5yb2xlVXJpPSIiLHRoaXMucm9sZU5hbWU9IiIsdGhpcy5yb2xlRGVzYz0iIix0aGlzLnBhcmFtUHJlc2VudD0hMSx0aGlzLnBhcmFtVVJJPSIiLHRoaXMubG9hZGluZz0hMX1uZ09uSW5pdCgpe0tuLnZpZXdlci5jdXJyZW50U2VsZWN0aW9uPSJ2aWV3L3VzZXJuYXYvcm9s''@;'; put 'put ''ZXMiLHZvaWQgMCE9PXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaSYmKHRoaXMucGFyYW1QcmVzZW50PSEwLHRoaXMucGFyYW1VUkk9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpKSxLbi51c2VybmF2LnJvbGVMaXN0JiYhdGhpcy5wYXJhbVByZXNlbnQ/KHRoaXMucm9sZXM9''@;'; put 'put ''S24udXNlcm5hdi5yb2xlTGlzdCx0aGlzLnJvbGVTZWFyY2g9S24udXNlcm5hdi5yb2xlU2VhcmNoKTp2b2lkIDA9PT1Lbi51c2VybmF2LnJvbGVMaXN0Pyh0aGlzLmxvYWRpbmc9ITAsdGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcnJvbGVzIixudWxsKS50aGVuKGE9Pntp''@;'; put 'put ''Zih0aGlzLmxvYWRpbmc9ITEsdGhpcy5yb2xlcz1hLmFkYXB0ZXJSZXNwb25zZS5yb2xlcyxLbi51c2VybmF2LnJvbGVMaXN0PWEuYWRhcHRlclJlc3BvbnNlLnJvbGVzLHRoaXMucGFyYW1QcmVzZW50JiZ2b2lkIDAhPT10aGlzLnJvbGVzKXtsZXQgZD10aGlzLmZpbmRSb2xlKHRoaXMucm9s''@;'; put 'put ''ZXMsdGhpcy5wYXJhbVVSSSk7ITEhPT1kJiYodGhpcy5sb2FkaW5nPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJtZW1iZXJzYnlyb2xlIix7aXdhbnQ6W3tyb2xlaWQ6dGhpcy5wYXJhbVVSSX1dfSkudGhlbihmPT57dGhpcy5sb2FkaW5nPSExLHRoaXMucm9sZU1l''@;'; put 'put ''bWJlcnM9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycyx0aGlzLnJvbGVNZW1iZXJzQ291bnQ9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycy5sZW5ndGgsdGhpcy5yb2xlR3JvdXBzPWYuYWRhcHRlclJlc3BvbnNlLnNhc2dyb3Vwcyx0aGlzLnJvbGVHcm91cHNDb3VudD1mLmFkYXB0''@;'; put 'put ''ZXJSZXNwb25zZS5zYXNncm91cHMubGVuZ3RoLHRoaXMucm9sZVVyaT1kLlJPTEVVUkksdGhpcy5yb2xlTmFtZT1kLlJPTEVOQU1FLHRoaXMucm9sZURlc2M9ZC5ST0xFREVTQ30pKX19KSk6KHRoaXMucm9sZXM9S24udXNlcm5hdi5yb2xlTGlzdCx0aGlzLnJvbGVTZWFyY2g9S24udXNlcm5h''@;'; put 'put ''di5yb2xlU2VhcmNoLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJyb2xlcyIsbnVsbCkudGhlbihhPT57aWYodGhpcy5yb2xlcz1hLmFkYXB0ZXJSZXNwb25zZS5yb2xlcyxLbi51c2VybmF2LnJvbGVMaXN0PWEuYWRhcHRlclJlc3BvbnNlLnJvbGVzLHRoaXMucGFyYW1Q''@;'; put 'put ''cmVzZW50JiZ2b2lkIDAhPT10aGlzLnJvbGVzKXtsZXQgZD10aGlzLmZpbmRSb2xlKHRoaXMucm9sZXMsdGhpcy5wYXJhbVVSSSk7ITEhPT1kJiYodGhpcy5sb2FkaW5nPSEwLHRoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJtZW1iZXJzYnlyb2xlIix7aXdhbnQ6W3tyb2xl''@;'; put 'put ''aWQ6dGhpcy5wYXJhbVVSSX1dfSkudGhlbihmPT57dGhpcy5sb2FkaW5nPSExLHRoaXMucm9sZU1lbWJlcnM9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycyx0aGlzLnJvbGVNZW1iZXJzQ291bnQ9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzbWVtYmVycy5sZW5ndGgsdGhpcy5yb2xlR3JvdXBz''@;'; put 'put ''PWYuYWRhcHRlclJlc3BvbnNlLnNhc2dyb3Vwcyx0aGlzLnJvbGVHcm91cHNDb3VudD1mLmFkYXB0ZXJSZXNwb25zZS5zYXNncm91cHMubGVuZ3RoLHRoaXMucm9sZVVyaT1kLlJPTEVVUkksdGhpcy5yb2xlTmFtZT1kLlJPTEVOQU1FLHRoaXMucm9sZURlc2M9ZC5ST0xFREVTQ30pKX19KSl9''@;'; put 'put ''cm9sZUxpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5yb2xlcyx0aGlzLnJvbGVTZWFyY2gsIlJPTEVOQU1FIiksS24udXNlcm5hdi5yb2xlU2VhcmNoPXRoaXMucm9sZVNlYXJjaH1yb2xlT25DbGljayhhKXt0aGlzLmxvYWRpbmc9ITA7bGV0''@;'; put 'put ''IGQ9dGhpcy5yb3V0ZXIudXJsO3RoaXMubG9jYXRpb24ucmVwbGFjZVN0YXRlKHRoaXMucGFyYW1QcmVzZW50P2Quc2xpY2UoMCxkLmxhc3RJbmRleE9mKCIvIikpKyIvIitlbmNvZGVVUkkoYS5ST0xFVVJJKTpkKyIvIitlbmNvZGVVUkkoYS5ST0xFVVJJKSksdGhpcy5zYXNTZXJ2aWNlLnJl''@;'; put 'put ''cXVlc3QoInVzZXJuYXYvdXNlcm1lbWJlcnNieXJvbGUiLHtpd2FudDpbe3JvbGVpZDphLlJPTEVVUkl9XX0pLnRoZW4oZj0+e3RoaXMubG9hZGluZz0hMSx0aGlzLnJvbGVNZW1iZXJzPWYuYWRhcHRlclJlc3BvbnNlLnNhc21lbWJlcnMsdGhpcy5yb2xlTWVtYmVyc0NvdW50PWYuYWRhcHRl''@;'; put 'put ''clJlc3BvbnNlLnNhc21lbWJlcnMubGVuZ3RoLHRoaXMucm9sZUdyb3Vwcz1mLmFkYXB0ZXJSZXNwb25zZS5zYXNncm91cHMsdGhpcy5yb2xlR3JvdXBzQ291bnQ9Zi5hZGFwdGVyUmVzcG9uc2Uuc2FzZ3JvdXBzLmxlbmd0aCx0aGlzLnJvbGVVcmk9YS5ST0xFVVJJLHRoaXMucm9sZU5hbWU9''@;'; put 'put ''YS5ST0xFTkFNRSx0aGlzLnJvbGVEZXNjPWEuUk9MRURFU0N9KX1maW5kUm9sZShhLGQpe2xldCBoPSExO3JldHVybiBhLmZvckVhY2goZj0+e2YuUk9MRVVSST09PWQmJihoPWYpfSksaH1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShKcyks''@;'; put 'put ''R2UoR3UpLEdlKExzKSxHZSh1aCksR2UoQ3UpKX19c3RhdGlje3RoaXMuXHUwMjc1Y21wPU5yKHt0eXBlOmMsc2VsZWN0b3JzOltbImFwcC1yb2xlIl1dLGhvc3RBdHRyczpbMSwiY29udGVudC1jb250YWluZXIiXSxkZWNsczo3LHZhcnM6NCxjb25zdHM6W1sic2VhcmNoTGliVHJlZUlucHV0''@;'; put 'put ''IiwiIl0sWzEsInNpZGViYXItaGVpZ2h0Il0sWyJjbGFzcyIsInNlYXJjaC1ub2RlIiw0LCJuZ0lmIl0sWzQsIm5nRm9yIiwibmdGb3JPZiJdLFsxLCJjb250ZW50LWFyZWEiXSxbImNsYXNzIiwibG9hZGluZ1NwaW5uZXIiLDQsIm5nSWYiXSxbNCwibmdJZiJdLFsxLCJzZWFyY2gtbm9kZSJd''@;'; put 'put ''LFsxLCJ0cmVlLXNlYXJjaC13cmFwcGVyIl0sWyJhcHBTdGVhbEZvY3VzIiwiIiwiY2xySW5wdXQiLCIiLCJwbGFjZWhvbGRlciIsIkZpbHRlciBieSBSb2xlcyIsIm5hbWUiLCJpbnB1dCIsImF1dG9jb21wbGV0ZSIsIm9mZiIsMywibmdNb2RlbENoYW5nZSIsImtleXVwIiwibmdNb2RlbCJd''@;'; put 'put ''LFsic2hhcGUiLCJzZWFyY2giLDQsIm5nSWYiXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siXSxbMywiYWN0aXZlIiwiY2xpY2siLDQsIm5nSWYiXSxbMywiY2xpY2siXSxbMSwibS0wIiwi''@;'; put 'put ''Y3Vyc29yLXBvaW50ZXIiLCJsaXN0LXBhZGRpbmciXSxbInNoYXBlIiwiYmxvY2tzLWdyb3VwIl0sWzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNwaW5uZXIiXSxbMSwiY2xyLXJvdyJdLFsxLCJjbHItY29sLTgiXSxbMSwidGFibGUiLCJyb2xlLWluZm8iXSxbMSwibGVmdCJdLFsxLCJyb2xl''@;'; put 'put ''LWluZm8tdGV4dCJdLFsxLCJjYXJkIiwicm9sZS1kYXRhIl0sWzEsInRhYmxlLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJ0YWJsZSBtZW1iZXItdGFibGUiLDQsIm5nSWYiXSxbMSwidGFibGUiLCJtZW1iZXItdGFibGUiXSxbMSwid2lkdGgtMjUiXSxbMSwiIl0sWzMsInJvdXRlckxpbmsiLDQs''@;'; put 'put ''Im5nRm9yIiwibmdGb3JPZiJdLFszLCJyb3V0ZXJMaW5rIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7MSZkJiYoZGUoMCwiYXBwLXNpZGViYXIiLDEpKDEsImNsci10cmVlIiksZ3QoMixmVHQsNiwzLCJjbHItdHJlZS1ub2RlIiwyKSgzLGdUdCwyLDEsIm5nLWNvbnRhaW5lciIsMyksaGUo''@;'; put 'put ''KSgpLGRlKDQsImRpdiIsNCksZ3QoNSxtVHQsMywwLCJkaXYiLDUpKDYsU1R0LDMxLDgsImRpdiIsNiksaGUoKSksMiZkJiYoZmUoMikseGUoIm5nSWYiLGgucm9sZXMpLGZlKCkseGUoIm5nRm9yT2YiLGgucm9sZXMpLGZlKDIpLHhlKCJuZ0lmIixoLmxvYWRpbmcpLGZlKCkseGUoIm5nSWYi''@;'; put 'put ''LGgucm9sZU1lbWJlcnMmJiFoLmxvYWRpbmcpKX0sZGVwZW5kZW5jaWVzOltzcyx5byx1MSxRbCxRcyxZcyxTaCxPZCxPbCxJZCx0NCxlNF0sc3R5bGVzOlsiYm9keVtjZHMtdGhlbWU9ZGFya10gLnJvbGV7YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxO2JvcmRlci1jb2xvcjojMzE0MzUxfSAg''@;'; put 'put ''Ym9keVtjZHMtdGhlbWU9ZGFya10gLnJvbGUtZGF0YXtiYWNrZ3JvdW5kLWNvbG9yOiMzMTQzNTE7Ym9yZGVyLWNvbG9yOiMzMTQzNTF9ICBib2R5W2Nkcy10aGVtZT1kYXJrXSAubWVtYmVyLXRhYmxlIHRib2R5IHRyOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzI5NDA0Yn0gIGJvZHlbY2Rz''@;'; put 'put ''LXRoZW1lPWxpZ2h0XSAucm9sZS1pbmZve2JhY2tncm91bmQtY29sb3I6I2Y5ZjlmOTtib3JkZXItY29sb3I6I2E3YTdhNztib3gtc2hhZG93OjAgMnB4IDVweCAjZGFkN2Q3fSAgYm9keVtjZHMtdGhlbWU9bGlnaHRdIC5yb2xlLWRhdGF7YmFja2dyb3VuZC1jb2xvcjojZjlmOWY5O2JvcmRl''@;'; put 'put ''ci1jb2xvcjojYTdhN2E3O2JveC1zaGFkb3c6MCAycHggNXB4ICNkYWQ3ZDd9ICBib2R5W2Nkcy10aGVtZT1saWdodF0gLm1lbWJlci10YWJsZSB0Ym9keSB0cjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlNmU2ZTZ9LnNpZGViYXItaGVpZ2h0W19uZ2NvbnRlbnQtJUNPTVAlXXtoZWlnaHQ6''@;'; put 'put ''MTAwJX0ucm9sZS1pbmZvLXRleHRbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6aW5saW5lO2ZvbnQtc2l6ZToyMHB4fS5yb2xlLWluZm9bX25nY29udGVudC0lQ09NUCVde2JvcmRlcjoxcHggc29saWQ7Ym9yZGVyLXJhZGl1czozcHh9LnJvbGUtaW5mb1tfbmdjb250ZW50LSVDT01QJV0g''@;'; put 'put ''ICB0ZFtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpjZW50ZXJ9LnJvbGUtZGF0YVtfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZDtib3JkZXItcmFkaXVzOjNweH0ucm9sZS1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXttaW4taGVpZ2h0OnVuc2V0fS5yb2xlLWRhdGFb''@;'; put 'put ''X25nY29udGVudC0lQ09NUCVdICAgaDNbX25nY29udGVudC0lQ09NUCVdLCAucm9sZS1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGg1W19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmNlbnRlcn0ubWVtYmVyLXRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDoxMDAlfS5tZW1i''@;'; put 'put ''ZXItdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGJvZHlbX25nY29udGVudC0lQ09NUCVdICAgdHJbX25nY29udGVudC0lQ09NUCVdOmhvdmVye2N1cnNvcjpwb2ludGVyfS50YWJsZS1jb250YWluZXJbX25nY29udGVudC0lQ09NUCVde292ZXJmbG93LXk6c2Nyb2xsO21heC1oZWlnaHQ6''@;'; put 'put ''NzAwcHh9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpey5yb2xlLWRhdGFbX25nY29udGVudC0lQ09NUCVde21pbi1oZWlnaHQ6dW5zZXQhaW1wb3J0YW50fX0iXX0pfX1yZXR1cm4gY30pKCksTVR0PSgoKT0+e2NsYXNzIGN7Y29uc3RydWN0b3IoKXt9bmdPbkluaXQoKXt9''@;'; put 'put ''c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdXNlcm5hdi1yb3V0ZSJdXSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6MSx2YXJz''@;'; put 'put ''OjAsdGVtcGxhdGU6ZnVuY3Rpb24oZCxoKXsxJmQmJkd0KDAsInJvdXRlci1vdXRsZXQiKX0sZGVwZW5kZW5jaWVzOltlZ119KX19cmV0dXJuIGN9KSgpLHhUdD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7fW5nT25Jbml0KCl7fW5nT25EZXN0cm95KCl7fXN0YXRpY3t0aGlzLlx1MDI3''@;'; put 'put ''NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXZpZXctcm91dGUiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjEsdmFyczowLHRlbXBsYXRlOmZ1bmN0aW9u''@;'; put 'put ''KGQsaCl7MSZkJiZHdCgwLCJyb3V0ZXItb3V0bGV0Iil9LGRlcGVuZGVuY2llczpbZWddfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBFVHQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwxMil9ZnVuY3Rpb24gVFR0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLWljb24i''@;'; put 'put ''LDEzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgyKTtyZXR1cm4gaC51c2VyU2VhcmNoPSIiLEN0KGgudXNlckxpc3RPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIEFUdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDcp''@;'; put 'put ''KDEsImRpdiIsOCkoMiwiaW5wdXQiLDksMCkscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKTtyZXR1cm4gdmkoZi51c2VyU2VhcmNoLGgpfHwoZi51c2VyU2VhcmNoPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxD''@;'; put 'put ''dChPZSgpLnVzZXJMaXN0T25GaWx0ZXIoKSl9KSxoZSgpLGd0KDQsRVR0LDEsMCwiY2xyLWljb24iLDEwKSg1LFRUdCwxLDAsImNsci1pY29uIiwxMSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT12bygzKSxkPU9lKCk7ZmUoMiksZmkoIm5nTW9kZWwiLGQudXNlclNlYXJjaCksZmUoMikseGUo''@;'; put 'put ''Im5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCkseGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiBrVHQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwxNSksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKS4k''@;'; put 'put ''aW1wbGljaXQ7cmV0dXJuIEN0KE9lKCkudXNlck9uQ2xpY2soaCkpfSksZGUoMSwicCIsMTYpLEd0KDIsImNsci1pY29uIiwxNyksTGUoMyksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpLiRpbXBsaWNpdCxkPU9lKCk7eHIoImFjdGl2ZSIsKG51bGw9PWQudXNlckluZm8/bnVsbDpkLnVz''@;'; put 'put ''ZXJJbmZvLlVSSSk9PT1hLlVSSSksZmUoMyksUnIoIiAiLGEuTkFNRSwiICIpfX1mdW5jdGlvbiBEVHQoYyxsKXtpZigxJmMmJihsaSgwKSxndCgxLGtUdCw0LDMsImNsci10cmVlLW5vZGUiLDE0KSxjaSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoKSx4ZSgibmdJZiIsIWEuaGlk''@;'; put 'put ''ZGVuKX19ZnVuY3Rpb24gSVR0KGMsbCl7MSZjJiYoZGUoMCwiZGl2IiwxOCkoMSwic3BhbiIsMTkpLExlKDIsIiBMb2FkaW5nLi4uICIpLGhlKCkoKSl9ZnVuY3Rpb24gUlR0KGMsbCl7aWYoMSZjJiYobGkoMCksZGUoMSwidHIiKSgyLCJ0ZCIsMjcpLExlKDMsIiBNZXRhZGF0YSBDcmVhdGVk''@;'; put 'put ''OiAiKSxkZSg0LCJiIiksTGUoNSksaGUoKSgpKCksZGUoNiwidHIiKSg3LCJ0ZCIsMjcpLExlKDgsIiBNZXRhZGF0YSBVcGRhdGVkOiAiKSxkZSg5LCJiIiksTGUoMTApLGhlKCkoKSgpLGNpKCkpLDImYyl7Y29uc3QgYT1PZSgzKTtmZSg1KSxfcihhLnVzZXJJbmZvLk1FVEFEQVRBQ1JFQVRF''@;'; put 'put ''RCksZmUoNSksX3IoYS51c2VySW5mby5NRVRBREFUQVVQREFURUQpfX1mdW5jdGlvbiBMVHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDIxKSgxLCJkaXYiLDIyKSgyLCJ0YWJsZSIsMjYpKDMsInRib2R5IikoNCwidHIiKSg1LCJ0ZCIsMjcpKDYsInAiLDI4KSg3LCJiIiksTGUoOCksaGUo''@;'; put 'put ''KSgpKCkoKSxkZSg5LCJ0ciIpKDEwLCJ0ZCIsMjcpKDExLCJwIiwyOCkoMTIsImIiKSxMZSgxMyksaGUoKSgpKCkoKSxndCgxNCxSVHQsMTEsMiwibmctY29udGFpbmVyIiw2KSxoZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoOCksX3IoYS51c2VySW5mby5OQU1FKSxmZSg1KSxf''@;'; put 'put ''cihhLnVzZXJJbmZvLkRJU1BMQVlOQU1FKSxmZSgpLHhlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSl9fWZ1bmN0aW9uIE9UdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMjEpKDEsImRpdiIsMjIpKDIsInRhYmxlIiwyNikoMywidGJvZHkiKSg0LCJ0ciIpKDUs''@;'; put 'put ''InRkIiwyNykoNiwicCIsMjgpKDcsImIiKSxMZSg4KSxoZSgpKCkoKSgpLGRlKDksInRyIikoMTAsInRkIiwyNyksTGUoMTEsIiBVc2VyIElEOiAiKSxkZSgxMiwiYiIpLExlKDEzKSxoZSgpKCkoKSxkZSgxNCwidHIiKSgxNSwidGQiLDI3KSxMZSgxNiwiIFVzZXIgcHJvdmlkZXIgSUQ6ICIp''@;'; put 'put ''LGRlKDE3LCJiIiksTGUoMTgpLGhlKCkoKSgpKCkoKSgpKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSg4KSxfcihhLnVzZXJJbmZvLk5BTUUpLGZlKDUpLF9yKGEudXNlckluZm8uVVJJKSxmZSg1KSxfcihhLnVzZXJJbmZvLlBST1ZJREVSKX19ZnVuY3Rpb24gUFR0KGMsbCl7MSZjJiYoZGUo''@;'; put 'put ''MCwiaDUiKSxMZSgxLCJObyBFbWFpbHMgUHJlc2VudCIpLGhlKCkpfWZ1bmN0aW9uIEZUdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDMxKSxMZSgyKSxoZSgpLGRlKDMsInRkIiwzMSksTGUoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7ZmUoMiksX3IoYS5F''@;'; put 'put ''TUFJTCksZmUoMiksX3IoYS5UWVBFKX19ZnVuY3Rpb24gSFR0KGMsbCl7aWYoMSZjJiYoZGUoMCwidGFibGUiLDI5KSgxLCJ0aGVhZCIpKDIsInRyIikoMywidGQiLDMwKSg0LCJiIiksTGUoNSwiRU1BSUwiKSxoZSgpKCksZGUoNiwidGQiLDMxKSg3LCJiIiksTGUoOCwiVFlQRSIpLGhlKCko''@;'; put 'put ''KSgpKCksZGUoOSwidGJvZHkiKSxndCgxMCxGVHQsNSwyLCJ0ciIsMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoMTApLHhlKCJuZ0Zvck9mIixhLnVzZXJFbWFpbHMpfX1mdW5jdGlvbiBOVHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSgxLCJoMyIpLExlKDIpLGhlKCksZ3Qo''@;'; put 'put ''MyxQVHQsMiwwLCJoNSIsNiksZGUoNCwiZGl2IiwyNCksZ3QoNSxIVHQsMTEsMSwidGFibGUiLDI1KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgyKSxScigiRU1BSUxTICgiLGEudXNlckVtYWlsc0NvdW50fHwiMCIsIikiKSxmZSgpLHhlKCJuZ0lmIiwwPT1hLnVzZXJFbWFpbHND''@;'; put 'put ''b3VudCksZmUoMikseGUoIm5nSWYiLDAhPWEudXNlckVtYWlsc0NvdW50KX19ZnVuY3Rpb24gVlR0KGMsbCl7MSZjJiZHdCgwLCJociIpfWZ1bmN0aW9uIEJUdChjLGwpezEmYyYmKGRlKDAsImg1IiksTGUoMSwiTm8gR3JvdXBzIFByZXNlbnQiKSxoZSgpKX1mdW5jdGlvbiBqVHQoYyxsKXtp''@;'; put 'put ''ZigxJmMmJihkZSgwLCJ0ZCIsMzMpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgpLiRpbXBsaWNpdDt4ZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvZ3JvdXBzLyIrYS5VUkkpLGZlKCksUnIoIiAiLGEuR1JPVVBOQU1FLCIgIil9fWZ1bmN0aW9uIHpUdChjLGwpe2lmKDEmYyYm''@;'; put 'put ''KGxpKDApLGRlKDEsInRkIiwzMyksTGUoMiksaGUoKSxjaSgpKSwyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQ7ZmUoKSx4ZSgicm91dGVyTGluayIsIi92aWV3L3VzZXJuYXYvZ3JvdXBzLyIrKGEuR1JPVVBVUkl8fGEuVVJJKSksZmUoKSxScigiICIsYS5HUk9VUE5BTUUsIiAiKX19ZnVu''@;'; put 'put ''Y3Rpb24gVVR0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSxndCgxLGpUdCwyLDIsInRkIiwzMikoMix6VHQsMywyLCJuZy1jb250YWluZXIiLDYpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgzKTtmZSgpLHhlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzVml5YSksZmUo''@;'; put 'put ''KSx4ZSgibmdJZiIsYS5zZXJ2ZXJUeXBlIT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEpfX1mdW5jdGlvbiBaVHQoYyxsKXtpZigxJmMmJihkZSgwLCJ0YWJsZSIsMjkpKDEsInRib2R5IiksZ3QoMixVVHQsMywyLCJ0ciIsMyksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoMikseGUoIm5n''@;'; put 'put ''Rm9yT2YiLGEudXNlckdyb3Vwcyl9fWZ1bmN0aW9uIFdUdChjLGwpezEmYyYmR3QoMCwiaHIiKX1mdW5jdGlvbiBZVHQoYyxsKXsxJmMmJihkZSgwLCJoNSIpLExlKDEsIk5vIFJvbGVzIFByZXNlbnQiKSxoZSgpKX1mdW5jdGlvbiBHVHQoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRk''@;'; put 'put ''IiwzNCksTGUoMiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1PZSg0KTtmZSgpLHhlKCJyb3V0ZXJMaW5rIiwiL3ZpZXcvdXNlcm5hdi9yb2xlcy8iK2QuZ2V0Um9sZVVSSShhLlJPTEVVUkkpKSxmZSgpLFJyKCIgIixhLlJPTEVOQU1FLCIgIil9fWZ1bmN0aW9uICRUdChj''@;'; put 'put ''LGwpe2lmKDEmYyYmKGRlKDAsInRhYmxlIiwyOSkoMSwidGJvZHkiKSxndCgyLEdUdCwzLDIsInRyIiwzKSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgzKTtmZSgyKSx4ZSgibmdGb3JPZiIsYS51c2VyUm9sZXMpfX1mdW5jdGlvbiBLVHQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSgxLCJo''@;'; put 'put ''MyIpLExlKDIpLGhlKCksZ3QoMyxZVHQsMiwwLCJoNSIsNiksZGUoNCwiZGl2IiwyNCksZ3QoNSwkVHQsMywxLCJ0YWJsZSIsMjUpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDIpLFJyKCJST0xFUyAoIixhLnVzZXJSb2xlc0NvdW50fHwiMCIsIikiKSxmZSgpLHhlKCJuZ0lmIiww''@;'; put 'put ''PT1hLnVzZXJSb2xlc0NvdW50KSxmZSgyKSx4ZSgibmdJZiIsMCE9YS51c2VyUm9sZXNDb3VudCl9fWZ1bmN0aW9uIHFUdChjLGwpezEmYyYmR3QoMCwiaHIiKX1mdW5jdGlvbiBYVHQoYyxsKXsxJmMmJihkZSgwLCJoNSIpLExlKDEsIk5vIExvZ2lucyBQcmVzZW50IiksaGUoKSl9ZnVuY3Rp''@;'; put 'put ''b24gSlR0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsMzEpLExlKDIpLGhlKCksZGUoMywidGQiLDMxKSxMZSg0KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1sLiRpbXBsaWNpdDtmZSgyKSxfcihhLkRPTUFJTiksZmUoMiksX3IoYS5VU0VSSUQpfX1mdW5jdGlvbiBRVHQoYyxsKXtp''@;'; put 'put ''ZigxJmMmJihkZSgwLCJ0YWJsZSIsMjkpKDEsInRoZWFkIikoMiwidHIiKSgzLCJ0ZCIsMzApKDQsImIiKSxMZSg1LCJET01BSU4iKSxoZSgpKCksZGUoNiwidGQiKSg3LCJiIiksTGUoOCwiVVNFUiBJRCIpLGhlKCkoKSgpKCksZGUoOSwidGJvZHkiKSxndCgxMCxKVHQsNSwyLCJ0ciIsMyks''@;'; put 'put ''aGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoMTApLHhlKCJuZ0Zvck9mIixhLnVzZXJMb2dpbnMpfX1mdW5jdGlvbiBlQXQoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiKSgxLCJoMyIpLExlKDIpLGhlKCksZ3QoMyxYVHQsMiwwLCJoNSIsNiksZGUoNCwiZGl2IiwyNCksZ3QoNSxRVHQs''@;'; put 'put ''MTEsMSwidGFibGUiLDI1KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSgyKTtmZSgyKSxScigiTE9HSU5TICgiLGEudXNlckxvZ2luc0NvdW50fHwiMCIsIikiKSxmZSgpLHhlKCJuZ0lmIiwwPT1hLnVzZXJMb2dpbnNDb3VudCksZmUoMikseGUoIm5nSWYiLDAhPWEudXNlckxvZ2luc0NvdW50''@;'; put 'put ''KX19ZnVuY3Rpb24gdEF0KGMsbCl7aWYoMSZjJiYoZGUoMCwiZGl2IiksZ3QoMSxMVHQsMTUsMywiZGl2IiwyMCkoMixPVHQsMTksMywiZGl2IiwyMCksZGUoMywiZGl2IiwyMSkoNCwiZGl2IiwyMikoNSwiZGl2IiwyMyksZ3QoNixOVHQsNiwzLCJkaXYiLDYpKDcsVlR0LDEsMCwiaHIiLDYp''@;'; put 'put ''LGRlKDgsImRpdiIpKDksImgzIiksTGUoMTApLGhlKCksZ3QoMTEsQlR0LDIsMCwiaDUiLDYpLGRlKDEyLCJkaXYiLDI0KSxndCgxMyxaVHQsMywxLCJ0YWJsZSIsMjUpLGhlKCkoKSxndCgxNCxXVHQsMSwwLCJociIsNikoMTUsS1R0LDYsMywiZGl2Iiw2KSgxNixxVHQsMSwwLCJociIsNiko''@;'; put 'put ''MTcsZUF0LDYsMywiZGl2Iiw2KSxHdCgxOCwiYnIiKSxoZSgpKCkoKSgpKSwyJmMpe2NvbnN0IGE9T2UoKTtmZSgpLHhlKCJuZ0lmIixhLnNlcnZlclR5cGUhPT1hLlNlcnZlclR5cGUuU2FzVml5YSksZmUoKSx4ZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhc1ZpeWEm''@;'; put 'put ''JmEudXNlckluZm8pLGZlKDQpLHhlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2FzOSksZmUoKSx4ZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpLGZlKDMpLFJyKCJHUk9VUFMgKCIsYS51c2VyR3JvdXBzQ291bnR8fCIwIiwiKSIpLGZlKCks''@;'; put 'put ''eGUoIm5nSWYiLDA9PWEudXNlckdyb3Vwc0NvdW50KSxmZSgyKSx4ZSgibmdJZiIsMCE9YS51c2VyR3JvdXBzQ291bnQpLGZlKCkseGUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KSxmZSgpLHhlKCJuZ0lmIixhLnNlcnZlclR5cGU9PT1hLlNlcnZlclR5cGUuU2Fz''@;'; put 'put ''OSksZmUoKSx4ZSgibmdJZiIsYS5zZXJ2ZXJUeXBlPT09YS5TZXJ2ZXJUeXBlLlNhczkpLGZlKCkseGUoIm5nSWYiLGEuc2VydmVyVHlwZT09PWEuU2VydmVyVHlwZS5TYXM5KX19bGV0IG43ZT0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdil7dGhpcy5oZWxwZXJTZXJ2aWNl''@;'; put 'put ''PWEsdGhpcy5zYXNTZXJ2aWNlPWQsdGhpcy5yb3V0ZT1oLHRoaXMubG9jYXRpb249Zix0aGlzLnJvdXRlcj12LHRoaXMubG9hZGluZz0hMSx0aGlzLnVzZXJTZWFyY2g9IiIsdGhpcy5wYXJhbVByZXNlbnQ9ITEsdGhpcy5wYXJhbU5hbWU9IiIsdGhpcy5zYXNqc0NvbmZpZz1uZXcgZmguU0FT''@;'; put 'put ''anNDb25maWcsdGhpcy5pc1ZpeWE9ITEsdGhpcy5zZXJ2ZXJUeXBlPSIiLHRoaXMuU2VydmVyVHlwZT1NMC5ZLHRoaXMuc2VydmVyVHlwZT10aGlzLnNhc1NlcnZpY2UuZ2V0U2VydmVyVHlwZSgpLHRoaXMuc2FzanNDb25maWc9dGhpcy5zYXNTZXJ2aWNlLmdldFNhc2pzQ29uZmlnKCksIlNB''@;'; put 'put ''U1ZJWUEiPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlJiYodGhpcy5pc1ZpeWE9ITApfW5nT25Jbml0KCl7aWYoS24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb249InZpZXcvdXNlcm5hdi91c2VycyIsdm9pZCAwIT09dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpJiYodGhpcy5w''@;'; put 'put ''YXJhbVByZXNlbnQ9ITAsdGhpcy5wYXJhbU5hbWU9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpKSxLbi51c2VybmF2LnVzZXJMaXN0JiYhdGhpcy5wYXJhbVByZXNlbnQpdGhpcy51c2Vycz1Lbi51c2VybmF2LnVzZXJMaXN0LHRoaXMudXNlclNlYXJjaD1Lbi51c2VybmF2LnVzZXJT''@;'; put 'put ''ZWFyY2g7ZWxzZSBpZih2b2lkIDA9PT1Lbi51c2VybmF2LnVzZXJMaXN0Pyh0aGlzLmxvYWRpbmc9ITAsdGhpcy5pc1ZpeWE/ZmV0Y2godGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL3VzZXJzP2xpbWl0PTIwMDAiLHtoZWFkZXJzOntBY2NlcHQ6ImFwcGxpY2F0aW9u''@;'; put 'put ''L2pzb24ifX0pLnRoZW4oYT0+YS50ZXh0KCkpLnRoZW4oYT0+e2xldCBoPUpTT04ucGFyc2UoYSkuaXRlbXMubWFwKGY9Pih7TkFNRTpmLm5hbWUsVVJJOmYuaWQsUFJPVklERVI6Zi5wcm92aWRlcklkfSkpO3RoaXMubG9hZGluZz0hMSx0aGlzLnVzZXJzPWgsS24udXNlcm5hdi51c2VyTGlz''@;'; put 'put ''dD1ofSk6dGhpcy5zYXNTZXJ2aWNlLnJlcXVlc3QoInVzZXJuYXYvdXNlcm1lbWJlcnMiLG51bGwpLnRoZW4oYT0+e3RoaXMubG9hZGluZz0hMSx0aGlzLnVzZXJzPWEuYWRhcHRlclJlc3BvbnNlLnVzZXJzLEtuLnVzZXJuYXYudXNlckxpc3Q9YS5hZGFwdGVyUmVzcG9uc2UudXNlcnN9KSk6''@;'; put 'put ''KHRoaXMudXNlcnM9S24udXNlcm5hdi51c2VyTGlzdCx0aGlzLnVzZXJTZWFyY2g9S24udXNlcm5hdi51c2VyU2VhcmNoKSx0aGlzLnBhcmFtUHJlc2VudClpZih0aGlzLmxvYWRpbmc9ITAsdGhpcy5pc1ZpeWEpe2xldCBhPXRoaXMucm91dGUuc25hcHNob3QucGFyYW1zLnVyaTtmZXRjaCh0''@;'; put 'put ''aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCsiL2lkZW50aXRpZXMvdXNlcnMvIithKyIvbWVtYmVyc2hpcHM/bGltaXQ9MjAwMCIse2hlYWRlcnM6e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiJ9fSkudGhlbihkPT5kLnRleHQoKSkudGhlbihkPT57bGV0IGg9SlNPTi5wYXJzZShkKTt0aGlz''@;'; put 'put ''LnVzZXJEYXRhPWgsdGhpcy5sb2FkaW5nPSExO2xldCBmPWguaXRlbXMubWFwKHY9Pih7R1JPVVBOQU1FOnYubmFtZSxVUkk6di5pZH0pKTt0aGlzLnVzZXJHcm91cHM9Zix0aGlzLnVzZXJHcm91cHNDb3VudD1mLmxlbmd0aCx0aGlzLnVzZXJzJiYodGhpcy51c2VySW5mbz10aGlzLnVzZXJz''@;'; put 'put ''LmZpbmQodj0+di5VUkk9PT1hKSl9KX1lbHNle2NvbnN0IGE9dGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMudXJpO3RoaXMuc2FzU2VydmljZS5yZXF1ZXN0KCJ1c2VybmF2L3VzZXJncm91cHNieW1lbWJlciIse2l3YW50Olt7dXJpOmF9XX0pLnRoZW4oaD0+e3N3aXRjaCh0aGlzLmxvYWRp''@;'; put 'put ''bmc9ITEsdGhpcy5zZXJ2ZXJUeXBlKXtjYXNlIE0wLlkuU2FzOTp0aGlzLnVzZXJJbmZvPWguYWRhcHRlclJlc3BvbnNlLmluZm9bMF0sdGhpcy51c2VyRW1haWxzPWguYWRhcHRlclJlc3BvbnNlLmVtYWlscyx0aGlzLnVzZXJFbWFpbHNDb3VudD1oLmFkYXB0ZXJSZXNwb25zZS5lbWFpbHMu''@;'; put 'put ''bGVuZ3RoLHRoaXMudXNlclJvbGVzPWguYWRhcHRlclJlc3BvbnNlLnJvbGVzLHRoaXMudXNlclJvbGVzQ291bnQ9aC5hZGFwdGVyUmVzcG9uc2Uucm9sZXMubGVuZ3RoLHRoaXMudXNlckxvZ2lucz1oLmFkYXB0ZXJSZXNwb25zZS5sb2dpbnMsdGhpcy51c2VyTG9naW5zQ291bnQ9aC5hZGFw''@;'; put 'put ''dGVyUmVzcG9uc2UubG9naW5zLmxlbmd0aDticmVhaztjYXNlIE0wLlkuU2FzanM6aWYodGhpcy51c2Vycyl0aGlzLnVzZXJJbmZvPXRoaXMudXNlcnMuZmluZChmPT5mLlVSST09PWEpO2Vsc2V7Y29uc3QgZj1oLmFkYXB0ZXJSZXNwb25zZS5ncm91cHNbMF07dGhpcy51c2VySW5mbz17VVJJ''@;'; put 'put ''OmYuSUQsTkFNRTpmLk5BTUUsRElTUExBWU5BTUU6Zi5OQU1FfX19dGhpcy51c2VyRGF0YT1oLmFkYXB0ZXJSZXNwb25zZSx0aGlzLnVzZXJHcm91cHM9aC5hZGFwdGVyUmVzcG9uc2UuZ3JvdXBzLHRoaXMudXNlckdyb3Vwc0NvdW50PWguYWRhcHRlclJlc3BvbnNlLmdyb3Vwcy5sZW5ndGh9''@;'; put 'put ''KX19dXNlckxpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy51c2Vycyx0aGlzLnVzZXJTZWFyY2gsIk5BTUUiKSxLbi51c2VybmF2LnVzZXJTZWFyY2g9dGhpcy51c2VyU2VhcmNofXVzZXJPbkNsaWNrKGEpe3RoaXMubG9hZGluZz0hMDtsZXQg''@;'; put 'put ''ZD10aGlzLnJvdXRlci51cmw7dGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUodGhpcy5wYXJhbVByZXNlbnQ/ZC5zbGljZSgwLGQubGFzdEluZGV4T2YoIi8iKSkrIi8iK2VuY29kZVVSSShhLlVSSSk6ZCsiLyIrZW5jb2RlVVJJKGEuVVJJKSksdGhpcy5pc1ZpeWE/ZmV0Y2godGhpcy5zYXNq''@;'; put 'put ''c0NvbmZpZy5zZXJ2ZXJVcmwrIi9pZGVudGl0aWVzL3VzZXJzLyIrYS5VUkkrIi9tZW1iZXJzaGlwcz9saW1pdD0yMDAwIix7aGVhZGVyczp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn19KS50aGVuKGg9PmgudGV4dCgpKS50aGVuKGg9PntsZXQgZj1KU09OLnBhcnNlKGgpO3RoaXMudXNl''@;'; put 'put ''ckRhdGE9Zix0aGlzLmxvYWRpbmc9ITE7bGV0IHY9Zi5pdGVtcy5tYXAoTT0+KHtHUk9VUE5BTUU6TS5uYW1lLFVSSTpNLmlkfSkpO3RoaXMudXNlckdyb3Vwcz12LHRoaXMudXNlckdyb3Vwc0NvdW50PXYubGVuZ3RoLHRoaXMudXNlcnMmJih0aGlzLnVzZXJJbmZvPXRoaXMudXNlcnMuZmlu''@;'; put 'put ''ZChNPT5NLlVSST09PWEuVVJJKSl9KTp0aGlzLnNhc1NlcnZpY2UucmVxdWVzdCgidXNlcm5hdi91c2VyZ3JvdXBzYnltZW1iZXIiLHtpd2FudDpbe3VyaTphLlVSSX1dfSkudGhlbihmPT57c3dpdGNoKHRoaXMubG9hZGluZz0hMSx0aGlzLnNlcnZlclR5cGUpe2Nhc2UgTTAuWS5TYXM5OnRo''@;'; put 'put ''aXMudXNlckluZm89Zi5hZGFwdGVyUmVzcG9uc2UuaW5mb1swXSx0aGlzLnVzZXJFbWFpbHM9Zi5hZGFwdGVyUmVzcG9uc2UuZW1haWxzLHRoaXMudXNlckVtYWlsc0NvdW50PWYuYWRhcHRlclJlc3BvbnNlLmVtYWlscy5sZW5ndGgsdGhpcy51c2VyUm9sZXM9Zi5hZGFwdGVyUmVzcG9uc2Uu''@;'; put 'put ''cm9sZXMsdGhpcy51c2VyUm9sZXNDb3VudD1mLmFkYXB0ZXJSZXNwb25zZS5yb2xlcy5sZW5ndGgsdGhpcy51c2VyTG9naW5zPWYuYWRhcHRlclJlc3BvbnNlLmxvZ2lucyx0aGlzLnVzZXJMb2dpbnNDb3VudD1mLmFkYXB0ZXJSZXNwb25zZS5sb2dpbnMubGVuZ3RoO2JyZWFrO2Nhc2UgTTAu''@;'; put 'put ''WS5TYXNqczppZih0aGlzLnVzZXJzKXRoaXMudXNlckluZm89dGhpcy51c2Vycy5maW5kKHY9PnYuVVJJPT09YS5VUkkpO2Vsc2V7Y29uc3Qgdj1mLmFkYXB0ZXJSZXNwb25zZS5ncm91cHNbMF07dGhpcy51c2VySW5mbz17VVJJOnYuSUQsTkFNRTp2Lk5BTUUsRElTUExBWU5BTUU6di5OQU1F''@;'; put 'put ''fX19dGhpcy51c2VyRGF0YT1mLmFkYXB0ZXJSZXNwb25zZSx0aGlzLnVzZXJHcm91cHM9Zi5hZGFwdGVyUmVzcG9uc2UuZ3JvdXBzLHRoaXMudXNlckdyb3Vwc0NvdW50PWYuYWRhcHRlclJlc3BvbnNlLmdyb3Vwcy5sZW5ndGh9KX1nZXRSb2xlVVJJKGEpe3JldHVybiBhLnNwbGl0KCJPTVNP''@;'; put 'put ''Qko6SWRlbnRpdHlHcm91cCIpWzFdLnNsaWNlKDEpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpKEdlKEd1KSxHZShKcyksR2UoQ3UpLEdlKHVoKSxHZShMcykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1si''@;'; put 'put ''YXBwLXVzZXIiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjcsdmFyczo0LGNvbnN0czpbWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbMSwic2lkZWJhci1oZWlnaHQiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zv''@;'; put 'put ''ck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFs0LCJuZ0lmIl0sWzEsInNlYXJjaC1ub2RlIl0sWzEsInRyZWUtc2VhcmNoLXdyYXBwZXIiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwi''@;'; put 'put ''RmlsdGVyIGJ5IFVzZXJzIiwibmFtZSIsImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJuZ01vZGVsIl0sWyJzaGFwZSIsInNlYXJjaCIsNCwibmdJZiJdLFsic2hhcGUiLCJ0aW1lcyIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwi''@;'; put 'put ''c2VhcmNoIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayJdLFszLCJhY3RpdmUiLCJjbGljayIsNCwibmdJZiJdLFszLCJjbGljayJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsImxpc3QtcGFkZGluZyJdLFsic2hhcGUiLCJ1c2VyIl0sWzEsImxvYWRpbmdTcGlubmVyIl0sWzEsInNw''@;'; put 'put ''aW5uZXIiXSxbImNsYXNzIiwiY2xyLXJvdyIsNCwibmdJZiJdLFsxLCJjbHItcm93Il0sWzEsImNsci1jb2wtOCJdLFsxLCJjYXJkIiwidXNlci1kYXRhIl0sWzEsInRhYmxlLWNvbnRhaW5lciJdLFsiY2xhc3MiLCJ0YWJsZSB1c2VyLXRhYmxlIiw0LCJuZ0lmIl0sWzEsInRhYmxlIiwidXNl''@;'; put 'put ''ci1pbmZvIl0sWzEsImxlZnQiXSxbMSwidXNlci1pbmZvLXRleHQiXSxbMSwidGFibGUiLCJ1c2VyLXRhYmxlIl0sWzEsIndpZHRoLTUwIl0sWzEsIiJdLFsicm91dGVyTGlua0FjdGl2ZSIsImFjdGl2ZSIsImNsYXNzIiwiIiwzLCJyb3V0ZXJMaW5rIiw0LCJuZ0lmIl0sWyJyb3V0ZXJMaW5r''@;'; put 'put ''QWN0aXZlIiwiYWN0aXZlIiwxLCIiLDMsInJvdXRlckxpbmsiXSxbMywicm91dGVyTGluayJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgpezEmZCYmKGRlKDAsImFwcC1zaWRlYmFyIiwxKSgxLCJjbHItdHJlZSIpLGd0KDIsQVR0LDYsMywiY2xyLXRyZWUtbm9kZSIsMikoMyxEVHQsMiwxLCJu''@;'; put 'put ''Zy1jb250YWluZXIiLDMpLGhlKCkoKSxkZSg0LCJkaXYiLDQpLGd0KDUsSVR0LDMsMCwiZGl2Iiw1KSg2LHRBdCwxOSwxMSwiZGl2Iiw2KSxoZSgpKSwyJmQmJihmZSgyKSx4ZSgibmdJZiIsaC51c2VycyksZmUoKSx4ZSgibmdGb3JPZiIsaC51c2VycyksZmUoMikseGUoIm5nSWYiLGgubG9h''@;'; put 'put ''ZGluZyksZmUoKSx4ZSgibmdJZiIsaC51c2VyRGF0YSYmIWgubG9hZGluZykpfSxkZXBlbmRlbmNpZXM6W3NzLHlvLHUxLGN5LFFsLFFzLFlzLFNoLE9kLE9sLElkLHQ0LGU0XSxzdHlsZXM6WyIuc2lkZWJhci1oZWlnaHRbX25nY29udGVudC0lQ09NUCVde2hlaWdodDoxMDAlfS51c2VyLWlu''@;'; put 'put ''Zm8tdGV4dFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTppbmxpbmU7Zm9udC1zaXplOjIwcHh9ICBib2R5W2Nkcy10aGVtZT1kYXJrXSAudXNlci1pbmZve2JhY2tncm91bmQtY29sb3I6IzMxNDM1MTtib3JkZXItY29sb3I6IzMxNDM1MX0gIGJvZHlbY2RzLXRoZW1lPWRhcmtdIC51c2Vy''@;'; put 'put ''LWRhdGF7YmFja2dyb3VuZC1jb2xvcjojMzE0MzUxO2JvcmRlci1jb2xvcjojMzE0MzUxfSAgYm9keVtjZHMtdGhlbWU9ZGFya10gLnVzZXItdGFibGUgdGJvZHkgdHI6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMjk0MDRifSAgYm9keVtjZHMtdGhlbWU9bGlnaHRdIC51c2VyLWluZm97YmFj''@;'; put 'put ''a2dyb3VuZC1jb2xvcjojZjlmOWY5O2JvcmRlci1jb2xvcjojYTdhN2E3O2JveC1zaGFkb3c6MCAycHggNXB4ICNkYWQ3ZDd9ICBib2R5W2Nkcy10aGVtZT1saWdodF0gLnVzZXItZGF0YXtiYWNrZ3JvdW5kLWNvbG9yOiNmOWY5Zjk7Ym9yZGVyLWNvbG9yOiNhN2E3YTc7Ym94LXNoYWRvdzow''@;'; put 'put ''IDJweCA1cHggI2RhZDdkN30gIGJvZHlbY2RzLXRoZW1lPWxpZ2h0XSAudXNlci10YWJsZSB0Ym9keSB0cjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlNmU2ZTZ9LnVzZXItaW5mb1tfbmdjb250ZW50LSVDT01QJV17Ym9yZGVyOjFweCBzb2xpZDtib3JkZXItcmFkaXVzOjNweH0udXNlci1p''@;'; put 'put ''bmZvW19uZ2NvbnRlbnQtJUNPTVAlXSAgIHRkW19uZ2NvbnRlbnQtJUNPTVAlXXt0ZXh0LWFsaWduOmNlbnRlcn0udXNlci1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXXtib3JkZXI6MXB4IHNvbGlkO2JvcmRlci1yYWRpdXM6M3B4fS51c2VyLWRhdGFbX25nY29udGVudC0lQ09NUCVde21pbi1o''@;'; put 'put ''ZWlnaHQ6YXV0b30udXNlci1kYXRhW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGgzW19uZ2NvbnRlbnQtJUNPTVAlXSwgLnVzZXItZGF0YVtfbmdjb250ZW50LSVDT01QJV0gICBoNVtfbmdjb250ZW50LSVDT01QJV17dGV4dC1hbGlnbjpjZW50ZXJ9LnVzZXItdGFibGVbX25nY29udGVudC0lQ09N''@;'; put 'put ''UCVde3dpZHRoOjEwMCV9LnVzZXItdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgdGhlYWRbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6I2RhZGFkYX0udXNlci10YWJsZVtfbmdjb250ZW50LSVDT01QJV0gICB0Ym9keVtfbmdjb250ZW50LSVDT01QJV0gICB0cltfbmdj''@;'; put 'put ''b250ZW50LSVDT01QJV06aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9LndpZHRoLTUwW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDo1MCV9LndpZHRoLTMzW19uZ2NvbnRlbnQtJUNPTVAlXXt3aWR0aDozMyV9LnRhYmxlLWNvbnRhaW5lcltfbmdjb250ZW50LSVDT01QJV17b3ZlcmZsb3cteTpzY3Jv''@;'; put 'put ''bGw7bWF4LWhlaWdodDo1MDBweH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjhweCl7LnVzZXItZGF0YVtfbmdjb250ZW50LSVDT01QJV17bWluLWhlaWdodDp1bnNldCFpbXBvcnRhbnR9fSJdfSl9fXJldHVybiBjfSkoKSxuQXQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3Rvcihh''@;'; put 'put ''LGQpe3RoaXMuaHR0cD1hLHRoaXMuYXBwU3RvcmVTZXJ2aWNlPWQsdGhpcy52aXlhQXBpcz17QW5hbHl0aWNzX0luc2lnaHRzOntpbnNpZ2h0czoiL2luc2lnaHRzIn0sVmlzdWFsaXNhdGlvbjp7cmVwb3J0czoiL3JlcG9ydHMiLHJlcG9ydEltYWdlczoiL3JlcG9ydEltYWdlcyIscmVwb3J0''@;'; put 'put ''VHJhbnNmb3JtczoiL3JlcG9ydFRyYW5zZm9ybXMiLHZpc3VhbEFuYWx5dGljczoiL3Zpc3VhbEFuYWx5dGljcyJ9LENvbXB1dGU6e2pvYnM6Ii9qb2JEZWZpbml0aW9ucyIsam9iRXhlY3V0aW9uOiIvam9iRXhlY3V0aW9uIn0sRGVjaXNpb25fTWFuYWdlbWVudDp7bW9kZWxNYW5hZ2VtZW50''@;'; put 'put ''OiIvbW9kZWxNYW5hZ2VtZW50Iixtb2RlbFJlcG9zaXRvcnk6Ii9tb2RlbFJlcG9zaXRvcnkiLG1vZGVsUHVibGlzaDoiL21vZGVsUHVibGlzaCIsbWljcm9hbmFseXRpY1Njb3JlOiIvbWljcm9hbmFseXRpY1Njb3JlIixkYXRhTWluaW5nOiIvZGF0YU1pbmluZyIsYnVzaW5lc3NSdWxlczoi''@;'; put 'put ''L2J1c2luZXNzUnVsZXMiLHJlZmVyZW5jZURhdGE6Ii9yZWZlcmVuY2VEYXRhIix0cmVhdG1lbnREZWZpbml0aW9uczoiL3RyZWF0bWVudERlZmluaXRpb25zIixzdWJqZWN0Q29udGFjdHM6Ii9zdWJqZWN0Q29udGFjdHMiLGRlY2lzaW9uc1J1bnRpbWVCdWlsZGVyOiIvZGVjaXNpb25zUnVu''@;'; put 'put ''dGltZUJ1aWxkZXIifSxDb3JlX1NlcnZpY2VzOntmb2xkZXJzOiIvZm9sZGVycyIsZmlsZXM6Ii9maWxlcyIsYW5ub3RhdGlvbnM6Ii9hbm5vdGF0aW9ucyIsYXV0aG9yaXphdGlvbjoiL2F1dGhvcml6YXRpb24iLHJlbGF0aW9uc2hpcHM6Ii9yZWxhdGlvbnNoaXBzIixTQVNMb2dvbjoiL1NB''@;'; put 'put ''U0xvZ29uIn0sQXV0b21hdGVkX01hY2hpbmVfTGVhcm5pbmc6e21sUGlwZWxpbmVBdXRvbWF0aW9uOiIvbWxQaXBlbGluZUF1dG9tYXRpb24ifSxPdGhlcjp7aWRlbnRpdGllczoiL2lkZW50aXRpZXMifX0sdGhpcy5zZXJ2ZXJVcmw9IiI7Y29uc3QgaD10aGlzLmFwcFN0b3JlU2VydmljZS5n''@;'; put 'put ''ZXREY0FkYXB0ZXJTZXR0aW5ncygpO3RoaXMuc2VydmVyVXJsPWg/LnNlcnZlclVybHx8IiIsdGhpcy5nZXRCeUNvbGxlY3Rpb24oImpvYnMiKS5zdWJzY3JpYmUoZj0+e2NvbnNvbGUubG9nKCJyZXMiLGYpfSl9Z2V0QWxsQ29sbGVjdGlvbnMoKXtyZXR1cm4gdGhpcy52aXlhQXBpc31nZXRC''@;'; put 'put ''eVVybChhKXtyZXR1cm4gdGhpcy5odHRwLmdldChgJHt0aGlzLnNlcnZlclVybH0ke2F9YCx7d2l0aENyZWRlbnRpYWxzOiEwfSl9Z2V0QnlDb2xsZWN0aW9uKGEpe3JldHVybiB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuc2VydmVyVXJsfSR7YX1gLHt3aXRoQ3JlZGVudGlhbHM6ITB9KX1zdGF0''@;'; put 'put ''aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShNcihmVyksTXIocTgpKX19c3RhdGlje3RoaXMuXHUwMjc1cHJvdj1hbih7dG9rZW46YyxmYWN0b3J5OmMuXHUwMjc1ZmFjLHByb3ZpZGVkSW46InJvb3QifSl9fXJldHVybiBjfSkoKTtjb25zdCByQXQ9Yz0+''@;'; put 'put ''WyJzZWdtZW50IixjXSxpQXQ9KGMsbCk9Pih7InNlZ21lbnQtbWFpbiI6ITAsZXhwYW5kYWJsZTpjLGV4cGFuZGVkOmx9KTtmdW5jdGlvbiBvQXQoYyxsKXsxJmMmJkd0KDAsImRpdiIsOSl9ZnVuY3Rpb24gYUF0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwic3BhbiIsMTApLEZ0''@;'; put 'put ''KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCkuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLm9uVmFsdWVDbGljayhoKSl9KSxMZSgxKSxoZSgpfWlmKDImYyl7Y29uc3QgYT1PZSgpLiRpbXBsaWNpdDtmZSgpLF9yKGEuZGVzY3JpcHRpb24pfX1mdW5jdGlvbiBzQXQoYyxs''@;'; put 'put ''KXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJzZWN0aW9uIiwxMSkoMSwibmd4LWpzb24tdmlld2VyIiwxMiksRnQoInNlZ21lbnRMaW5rQ2xpY2tlZCIsZnVuY3Rpb24oaCl7cmV0dXJuIHd0KGEpLEN0KE9lKDIpLm9uU2VnbWVudExpbmtDbGljayhoKSl9KSxoZSgpKCl9aWYoMiZjKXtj''@;'; put 'put ''b25zdCBhPU9lKCkuJGltcGxpY2l0LGQ9T2UoKTtmZSgpLHhlKCJqc29uIixhLnZhbHVlKSgiZXhwYW5kZWQiLGQuZXhwYW5kZWQpKCJkZXB0aCIsZC5kZXB0aCkoIl9jdXJyZW50RGVwdGgiLGQuX2N1cnJlbnREZXB0aCsxKX19ZnVuY3Rpb24gbEF0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9u''@;'; put 'put ''KCk7ZGUoMCwic2VjdGlvbiIsMikoMSwic2VjdGlvbiIsMyksRnQoImNsaWNrIixmdW5jdGlvbigpe2NvbnN0IGg9d3QoYSkuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLnRvZ2dsZShoKSl9KSxndCgyLG9BdCwxLDAsImRpdiIsNCksZGUoMywic3BhbiIsNSksTGUoNCksaGUoKSxkZSg1LCJz''@;'; put 'put ''cGFuIiw2KSxMZSg2LCI6ICIpLGhlKCksZ3QoNyxhQXQsMiwxLCJzcGFuIiw3KSxoZSgpLGd0KDgsc0F0LDIsNCwic2VjdGlvbiIsOCksaGUoKX1pZigyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1PZSgpO3hlKCJuZ0NsYXNzIixucCg2LHJBdCwic2VnbWVudC10eXBlLSIrYS50eXBlKSks''@;'; put 'put ''ZmUoKSx4ZSgibmdDbGFzcyIscnAoOCxpQXQsZC5pc0V4cGFuZGFibGUoYSksYS5leHBhbmRlZCkpLGZlKCkseGUoIm5nSWYiLGQuaXNFeHBhbmRhYmxlKGEpKSxmZSgyKSxfcihhLmtleSksZmUoMykseGUoIm5nSWYiLCFhLmV4cGFuZGVkfHwhZC5pc0V4cGFuZGFibGUoYSkpLGZlKCkseGUo''@;'; put 'put ''Im5nSWYiLGEuZXhwYW5kZWQmJmQuaXNFeHBhbmRhYmxlKGEpKX19bGV0IGNBdD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKCl7dGhpcy5leHBhbmRlZD0hMCx0aGlzLmRlcHRoPS0xLHRoaXMuX2N1cnJlbnREZXB0aD0wLHRoaXMuc2VnbWVudExpbmtDbGlja2VkPW5ldyBxcix0aGlzLnNl''@;'; put 'put ''Z21lbnRzPVtdfW5nT25DaGFuZ2VzKCl7dGhpcy5zZWdtZW50cz1bXSx0aGlzLmpzb249dGhpcy5kZWN5Y2xlKHRoaXMuanNvbiksIm9iamVjdCI9PXR5cGVvZiB0aGlzLmpzb24/T2JqZWN0LmtleXModGhpcy5qc29uKS5mb3JFYWNoKGE9Pnt0aGlzLnNlZ21lbnRzLnB1c2godGhpcy5wYXJz''@;'; put 'put ''ZUtleVZhbHVlKGEsdGhpcy5qc29uW2FdKSl9KTp0aGlzLnNlZ21lbnRzLnB1c2godGhpcy5wYXJzZUtleVZhbHVlKGAoJHt0eXBlb2YgdGhpcy5qc29ufSlgLHRoaXMuanNvbikpfWlzRXhwYW5kYWJsZShhKXtyZXR1cm4ib2JqZWN0Ij09PWEudHlwZXx8ImFycmF5Ij09PWEudHlwZX10b2dn''@;'; put 'put ''bGUoYSl7dGhpcy5pc0V4cGFuZGFibGUoYSkmJihhLmV4cGFuZGVkPSFhLmV4cGFuZGVkKX1vblZhbHVlQ2xpY2soYSl7ImxpbmsiPT09YS50eXBlJiZ0aGlzLnNlZ21lbnRMaW5rQ2xpY2tlZC5lbWl0KGEudmFsdWUpfW9uU2VnbWVudExpbmtDbGljayhhKXt0aGlzLnNlZ21lbnRMaW5rQ2xp''@;'; put 'put ''Y2tlZC5lbWl0KGEpfXBhcnNlS2V5VmFsdWUoYSxkKXtjb25zdCBoPXtrZXk6YSx2YWx1ZTpkLHR5cGU6dm9pZCAwLGRlc2NyaXB0aW9uOiIiK2QsZXhwYW5kZWQ6dGhpcy5pc0V4cGFuZGVkKCl9O3N3aXRjaCh0eXBlb2YgaC52YWx1ZSl7Y2FzZSJudW1iZXIiOmgudHlwZT0ibnVtYmVyIjti''@;'; put 'put ''cmVhaztjYXNlImJvb2xlYW4iOmgudHlwZT0iYm9vbGVhbiI7YnJlYWs7Y2FzZSJmdW5jdGlvbiI6aC50eXBlPSJmdW5jdGlvbiI7YnJlYWs7Y2FzZSJzdHJpbmciOmlmKHRoaXMuaXNMaW5rKGgudmFsdWUpKXtoLnR5cGU9ImxpbmsiO2JyZWFrfWgudHlwZT0ic3RyaW5nIixoLmRlc2NyaXB0''@;'; put 'put ''aW9uPSciJytoLnZhbHVlKyciJzticmVhaztjYXNlInVuZGVmaW5lZCI6aC50eXBlPSJ1bmRlZmluZWQiLGguZGVzY3JpcHRpb249InVuZGVmaW5lZCI7YnJlYWs7Y2FzZSJvYmplY3QiOm51bGw9PT1oLnZhbHVlPyhoLnR5cGU9Im51bGwiLGguZGVzY3JpcHRpb249Im51bGwiKTpBcnJheS5p''@;'; put 'put ''c0FycmF5KGgudmFsdWUpPyhoLnR5cGU9ImFycmF5IixoLmRlc2NyaXB0aW9uPSJBcnJheVsiK2gudmFsdWUubGVuZ3RoKyJdICIrSlNPTi5zdHJpbmdpZnkoaC52YWx1ZSkpOmgudmFsdWUgaW5zdGFuY2VvZiBEYXRlP2gudHlwZT0iZGF0ZSI6KGgudHlwZT0ib2JqZWN0IixoLmRlc2NyaXB0''@;'; put 'put ''aW9uPSJPYmplY3QgIitKU09OLnN0cmluZ2lmeShoLnZhbHVlKSl9cmV0dXJuIGh9aXNMaW5rKGEpe3JldHVybiJodHRwczovLyI9PT1hLnN1YnN0cmluZygwLDgpfHwiaHR0cDovLyI9PT1hLnN1YnN0cmluZygwLDcpfHwiLyI9PT1hWzBdfWlzRXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5leHBh''@;'; put 'put ''bmRlZCYmISh0aGlzLmRlcHRoPi0xJiZ0aGlzLl9jdXJyZW50RGVwdGg+PXRoaXMuZGVwdGgpfWRlY3ljbGUoYSl7Y29uc3QgZD1uZXcgV2Vha01hcDtyZXR1cm4gZnVuY3Rpb24gaChmLHYpe2xldCBNLEQ7cmV0dXJuIm9iamVjdCIhPXR5cGVvZiBmfHxudWxsPT09Znx8ZiBpbnN0YW5jZW9m''@;'; put 'put ''IEJvb2xlYW58fGYgaW5zdGFuY2VvZiBEYXRlfHxmIGluc3RhbmNlb2YgTnVtYmVyfHxmIGluc3RhbmNlb2YgUmVnRXhwfHxmIGluc3RhbmNlb2YgU3RyaW5nP2Y6KE09ZC5nZXQoZiksdm9pZCAwIT09TT97JHJlZjpNfTooZC5zZXQoZix2KSxBcnJheS5pc0FycmF5KGYpPyhEPVtdLGYuZm9y''@;'; put 'put ''RWFjaChmdW5jdGlvbihaLG5lKXtEW25lXT1oKFosdisiWyIrbmUrIl0iKX0pKTooRD17fSxPYmplY3Qua2V5cyhmKS5mb3JFYWNoKGZ1bmN0aW9uKFope0RbWl09aChmW1pdLHYrIlsiK0pTT04uc3RyaW5naWZ5KFopKyJdIil9KSksRCkpfShhLCIkIil9fXJldHVybiBjLlx1MDI3NWZhYz1m''@;'; put 'put ''dW5jdGlvbihhKXtyZXR1cm4gbmV3KGF8fGMpfSxjLlx1MDI3NWNtcD1Ocih7dHlwZTpjLHNlbGVjdG9yczpbWyJuZ3gtanNvbi12aWV3ZXIiXV0saW5wdXRzOntqc29uOiJqc29uIixleHBhbmRlZDoiZXhwYW5kZWQiLGRlcHRoOiJkZXB0aCIsX2N1cnJlbnREZXB0aDoiX2N1cnJlbnREZXB0''@;'; put 'put ''aCJ9LG91dHB1dHM6e3NlZ21lbnRMaW5rQ2xpY2tlZDoic2VnbWVudExpbmtDbGlja2VkIn0sZmVhdHVyZXM6W3lsXSxkZWNsczoyLHZhcnM6MSxjb25zdHM6W1sxLCJuZ3gtanNvbi12aWV3ZXIiXSxbMywibmdDbGFzcyIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzMsIm5nQ2xhc3MiXSxbMywi''@;'; put 'put ''Y2xpY2siLCJuZ0NsYXNzIl0sWyJjbGFzcyIsInRvZ2dsZXIiLDQsIm5nSWYiXSxbMSwic2VnbWVudC1rZXkiXSxbMSwic2VnbWVudC1zZXBhcmF0b3IiXSxbImNsYXNzIiwic2VnbWVudC12YWx1ZSIsMywiY2xpY2siLDQsIm5nSWYiXSxbImNsYXNzIiwiY2hpbGRyZW4iLDQsIm5nSWYiXSxb''@;'; put 'put ''MSwidG9nZ2xlciJdLFsxLCJzZWdtZW50LXZhbHVlIiwzLCJjbGljayJdLFsxLCJjaGlsZHJlbiJdLFszLCJzZWdtZW50TGlua0NsaWNrZWQiLCJqc29uIiwiZXhwYW5kZWQiLCJkZXB0aCIsIl9jdXJyZW50RGVwdGgiXV0sdGVtcGxhdGU6ZnVuY3Rpb24oYSxkKXsxJmEmJihkZSgwLCJzZWN0''@;'; put 'put ''aW9uIiwwKSxndCgxLGxBdCw5LDExLCJzZWN0aW9uIiwxKSxoZSgpKSwyJmEmJihmZSgpLHhlKCJuZ0Zvck9mIixkLnNlZ21lbnRzKSl9LGRlcGVuZGVuY2llczpbd3Usc3MseW8sY10sc3R5bGVzOlsnQGNoYXJzZXQgIlVURi04Ijsubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAl''@;'; put 'put ''XXtmb250LWZhbWlseTp2YXIoLS1uZ3gtanNvbi1mb250LWZhbWlseSwgbW9ub3NwYWNlKTtmb250LXNpemU6dmFyKC0tbmd4LWpzb24tZm9udC1zaXplLCAxZW0pO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOnJlbGF0aXZlfS5uZ3gtanNvbi12aWV3''@;'; put 'put ''ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6MnB4O21hcmdpbjoxcHggMXB4IDFweCAxMnB4fS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQt''@;'; put 'put ''bWFpbltfbmdjb250ZW50LSVDT01QJV17d29yZC13cmFwOmJyZWFrLXdvcmR9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b2dnbGVyW19uZ2NvbnRl''@;'; put 'put ''bnQtJUNPTVAlXXtwb3NpdGlvbjphYnNvbHV0ZTttYXJnaW4tbGVmdDotMTRweDttYXJnaW4tdG9wOjNweDtmb250LXNpemU6LjhlbTtsaW5lLWhlaWdodDoxLjJlbTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Y29sb3I6dmFyKC0tbmd4LWpzb24tdG9nZ2xlciwgIzc4Nzg3OCl9Lm5neC1qc29u''@;'; put 'put ''LXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC50b2dnbGVyW19uZ2NvbnRlbnQtJUNPTVAlXTphZnRlcntkaXNwbGF5OmlubGluZS1ibG9jaztjb250ZW50OiJcXDI1YmEi''@;'; put 'put ''O3RyYW5zaXRpb246dHJhbnNmb3JtIC4xcyBlYXNlLWlufS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnRbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1rZXlbX25nY29udGVudC0lQ09N''@;'; put 'put ''UCVde2NvbG9yOnZhcigtLW5neC1qc29uLWtleSwgIzRFMTg3Qyl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudFtfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXNlcGFyYXRvcltfbmdj''@;'; put 'put ''b250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tc2VwYXJhdG9yLCAjOTk5KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQt''@;'; put 'put ''dmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLXZhbHVlLCAjMDAwKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5jaGlsZHJlbltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWxl''@;'; put 'put ''ZnQ6MTJweH0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtc3RyaW5nW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZh''@;'; put 'put ''cigtLW5neC1qc29uLXN0cmluZywgI0ZGNkI2Qil9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLW51bWJlcltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2Nv''@;'; put 'put ''bnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1udW1iZXIsICMwMDk2ODgpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1ib29sZWFuW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVd''@;'; put 'put ''ID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLWJvb2xlYW4sICNCOTM4QTQpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1kYXRlW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1h''@;'; put 'put ''aW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2NvbG9yOnZhcigtLW5neC1qc29uLWRhdGUsICMwNTY2OEQpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1hcnJheVtfbmdjb250ZW50LSVD''@;'; put 'put ''T01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1hcnJheSwgIzk5OSl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLW9i''@;'; put 'put ''amVjdFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1vYmplY3QsICM5OTkpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVd''@;'; put 'put ''ICAgLnNlZ21lbnQtdHlwZS1mdW5jdGlvbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi1mdW5jdGlvbiwgIzk5OSl9Lm5neC1qc29uLXZp''@;'; put 'put ''ZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWxpbmtbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0tbmd4LWpzb24tbGluaywgIzlC''@;'; put 'put ''NTlCNil9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLW51bGxbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17Y29sb3I6dmFyKC0t''@;'; put 'put ''bmd4LWpzb24tbnVsbCwgI2ZmZil9Lm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLXVuZGVmaW5lZFtfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC1tYWluW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LXZhbHVlW19uZ2NvbnRlbnQt''@;'; put 'put ''JUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi11bmRlZmluZWQsICNmZmYpfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLnNlZ21lbnQtdHlwZS1udWxsW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21l''@;'; put 'put ''bnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbmd4LWpzb24tbnVsbC1iZywgcmVkKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtdW5kZWZpbmVkW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50''@;'; put 'put ''LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQta2V5W19uZ2NvbnRlbnQtJUNPTVAlXXtjb2xvcjp2YXIoLS1uZ3gtanNvbi11bmRlZmluZWQta2V5LCAjOTk5KX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtdW5kZWZpbmVkW19u''@;'; put 'put ''Z2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtdmFsdWVbX25nY29udGVudC0lQ09NUCVde2JhY2tncm91bmQtY29sb3I6dmFyKC0tbmd4LWpzb24tdW5kZWZpbmVkLWtleSwgIzk5OSl9Lm5neC1qc29uLXZpZXdlcltfbmdjb250''@;'; put 'put ''ZW50LSVDT01QJV0gICAuc2VnbWVudC10eXBlLWxpbmtbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV0gPiAuc2VnbWVudC12YWx1ZVtfbmdjb250ZW50LSVDT01QJV17dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTtjdXJzb3I6cG9pbnRlcn0u''@;'; put 'put ''bmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUtb2JqZWN0W19uZ2NvbnRlbnQtJUNPTVAlXSA+IC5zZWdtZW50LW1haW5bX25nY29udGVudC0lQ09NUCVdLCAubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5zZWdtZW50LXR5cGUt''@;'; put 'put ''YXJyYXlbX25nY29udGVudC0lQ09NUCVdID4gLnNlZ21lbnQtbWFpbltfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwfS5uZ3gtanNvbi12aWV3ZXJbX25nY29udGVudC0lQ09NUCVdICAgLmV4cGFuZGVkW19uZ2NvbnRlbnQtJUNPTVAlXSA+IC50b2dnbGVyW19uZ2NvbnRl''@;'; put 'put ''bnQtJUNPTVAlXTphZnRlcnt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKX0ubmd4LWpzb24tdmlld2VyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5leHBhbmRhYmxlW19uZ2NvbnRlbnQtJUNPTVAlXSwgLm5neC1qc29uLXZpZXdlcltfbmdjb250ZW50LSVDT01QJV0gICAuZXhwYW5kYWJsZVtfbmdj''@;'; put 'put ''b250ZW50LSVDT01QJV0gPiAudG9nZ2xlcltfbmdjb250ZW50LSVDT01QJV17Y3Vyc29yOnBvaW50ZXJ9J119KSxjfSkoKSx1QXQ9KCgpPT57Y2xhc3MgY3t9cmV0dXJuIGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxj''@;'; put 'put ''Llx1MDI3NWluaj1Bcih7aW1wb3J0czpbTG9dfSksY30pKCksZEF0PSgoKT0+e2NsYXNzIGN7dHJhbnNmb3JtKGEpe2lmKCFhLmluY2x1ZGVzKCIvIikpcmV0dXJuIGE7bGV0IGQ9IiI7Y29uc3QgaD1hLnNwbGl0KCIvIik7Zm9yKGxldCBmPTA7ZjxoLmxlbmd0aDtmKyspaWYoIiIhPT1oW2Zd''@;'; put 'put ''KXtjb25zdCB2PWhbZl07ZCs9Ii8iK3YsaFtmXT1gPGEgaHJlZj0ke2R9PiR7dn08L2E+YH1yZXR1cm4gaC5qb2luKCIvIil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NXBpcGU9YWwoe25hbWU6Imxpbmtpbnpl''@;'; put 'put ''Iix0eXBlOmMscHVyZTohMH0pfX1yZXR1cm4gY30pKCksaEF0PSgoKT0+e2NsYXNzIGN7dHJhbnNmb3JtKGEpe3JldHVybiBKU09OLnN0cmluZ2lmeShhLG51bGwsMil9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3''@;'; put 'put ''NXBpcGU9YWwoe25hbWU6InByZXR0eWpzb24iLHR5cGU6YyxwdXJlOiEwfSl9fXJldHVybiBjfSkoKTtmdW5jdGlvbiBmQXQoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRpb24iLDI0KSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQ7aE0oInZhbHVlIixhLnZhbHVlKSxmZSgp''@;'; put 'put ''LFJyKCIgIixhLmtleSwiICIpfX1mdW5jdGlvbiBwQXQoYyxsKXtpZigxJmMmJihkZSgwLCJvcHRncm91cCIsMjIpLGd0KDEsZkF0LDIsMiwib3B0aW9uIiwyMykscXMoMiwia2V5dmFsdWUiKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC4kaW1wbGljaXQsZD1PZSgpO3hlKCJsYWJlbCIsYS5rZXkp''@;'; put 'put ''LGZlKCkseGUoIm5nRm9yT2YiLGtjKDIsMixkLmNvbGxlY3Rpb25zW2Eua2V5XSkpfX1mdW5jdGlvbiBnQXQoYyxsKXsxJmMmJihkZSgwLCJwIiwyNSksTGUoMSwiIFNlbGVjdCBjb2xsZWN0aW9uIHRvIHN0YXJ0ICIpLGhlKCkpfWZ1bmN0aW9uIG1BdChjLGwpezEmYyYmR3QoMCwiY2xyLXNw''@;'; put 'put ''aW5uZXIiLDI2KX1mdW5jdGlvbiB2QXQoYyxsKXsxJmMmJkd0KDAsImNsci1pY29uIiwzMil9ZnVuY3Rpb24gYkF0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLWljb24iLDMzKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD1PZSgyKTtyZXR1cm4gaC5s''@;'; put 'put ''aW5rc1NlYXJjaD0iIixDdChoLmxpbmtzTGlzdE9uRmlsdGVyKCkpfSksaGUoKX19ZnVuY3Rpb24geUF0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMjcpKDEsImRpdiIsMjgpKDIsImlucHV0IiwyOSwwKSxwaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rp''@;'; put 'put ''b24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpO3JldHVybiB2aShmLmxpbmtzU2VhcmNoLGgpfHwoZi5saW5rc1NlYXJjaD1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5saW5rc0xpc3RPbkZpbHRlcigpKX0pLGhlKCksZ3QoNCx2QXQsMSwwLCJj''@;'; put 'put ''bHItaWNvbiIsMzApKDUsYkF0LDEsMCwiY2xyLWljb24iLDMxKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPXZvKDMpLGQ9T2UoKTtmZSgyKSxmaSgibmdNb2RlbCIsZC5saW5rc1NlYXJjaCksZmUoMikseGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCkseGUoIm5nSWYiLGEudmFsdWUu''@;'; put 'put ''bGVuZ3RoPjApfX1mdW5jdGlvbiBfQXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItdHJlZS1ub2RlIiwzNSksRnQoImNsaWNrIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCkuJGltcGxpY2l0LHY9T2UoKTtyZXR1cm4gQ3Qodi50cmVlTm9kZUNsaWNrZWQoaCxm''@;'; put 'put ''LHYuZW5kcG9pbnRMaW5rcykpfSkscGkoImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCkuJGltcGxpY2l0O3JldHVybiB2aShmLmV4cGFuZGVkLGgpfHwoZi5leHBhbmRlZD1oKSxDdChoKX0pLGRlKDEsInAiLDM2KSxGdCgiY2xpY2siLGZ1bmN0aW9u''@;'; put 'put ''KCl7d3QoYSk7Y29uc3QgaD1PZSgpLiRpbXBsaWNpdDtyZXR1cm4gQ3QoT2UoKS5saW5rT25DbGljayhoKSl9KSxHdCgyLCJjbHItaWNvbiIsMzcpLExlKDMpLGhlKCkoKX1pZigyJmMpe2NvbnN0IGE9T2UoKS4kaW1wbGljaXQ7ZmkoImNsckV4cGFuZGVkIixhLmV4cGFuZGVkKSx4ZSgiY2xy''@;'; put 'put ''TG9hZGluZyIsISFhLmxvYWRpbmdUYWJsZXMmJiFhLnRhYmxlcyksZmUoMyksenUoIiAiLGEubWV0aG9kLCIgIixhLnJlbCwiICIpfX1mdW5jdGlvbiB3QXQoYyxsKXtpZigxJmMmJihsaSgwKSxndCgxLF9BdCw0LDQsImNsci10cmVlLW5vZGUiLDM0KSxjaSgpKSwyJmMpe2NvbnN0IGE9bC4k''@;'; put 'put ''aW1wbGljaXQ7ZmUoKSx4ZSgibmdJZiIsIWEuaGlkZGVuKX19ZnVuY3Rpb24gQ0F0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMzIpfWZ1bmN0aW9uIFNBdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci1pY29uIiwzMyksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEp''@;'; put 'put ''O2NvbnN0IGg9T2UoMik7cmV0dXJuIGguaXRlbXNTZWFyY2g9IiIsQ3QoaC5pdGVtc0xpc3RPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIE1BdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDI3KSgxLCJkaXYiLDI4KSgyLCJpbnB1dCIsMzgsMSks''@;'; put 'put ''cGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKTtyZXR1cm4gdmkoZi5pdGVtc1NlYXJjaCxoKXx8KGYuaXRlbXNTZWFyY2g9aCksQ3QoaCl9KSxGdCgia2V5dXAiLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuaXRlbXNMaXN0T25GaWx0ZXIo''@;'; put 'put ''KSl9KSxoZSgpLGd0KDQsQ0F0LDEsMCwiY2xyLWljb24iLDMwKSg1LFNBdCwxLDAsImNsci1pY29uIiwzMSksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT12bygzKSxkPU9lKCk7ZmUoMiksZmkoIm5nTW9kZWwiLGQuaXRlbXNTZWFyY2gpLGZlKDIpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aDwx''@;'; put 'put ''KSxmZSgpLHhlKCJuZ0lmIixhLnZhbHVlLmxlbmd0aD4wKX19ZnVuY3Rpb24geEF0KGMsbCl7aWYoMSZjKXtjb25zdCBhPU9uKCk7ZGUoMCwiY2xyLXRyZWUtbm9kZSIsMzUpLEZ0KCJjbGljayIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpLiRpbXBsaWNpdCx2PU9lKCk7cmV0dXJu''@;'; put 'put ''IEN0KHYudHJlZU5vZGVDbGlja2VkKGgsZix2LmVuZHBvaW50SXRlbXMpKX0pLHBpKCJjbHJFeHBhbmRlZENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpLiRpbXBsaWNpdDtyZXR1cm4gdmkoZi5leHBhbmRlZCxoKXx8KGYuZXhwYW5kZWQ9aCksQ3QoaCl9KSxkZSgxLCJw''@;'; put 'put ''IiwzNiksRnQoImNsaWNrIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9T2UoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKCkuaXRlbU9uQ2xpY2soaCkpfSksR3QoMiwiY2xyLWljb24iLDM3KSxMZSgzKSxoZSgpKCl9aWYoMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0O2ZpKCJjbHJFeHBh''@;'; put 'put ''bmRlZCIsYS5leHBhbmRlZCkseGUoImNsckxvYWRpbmciLCEhYS5sb2FkaW5nVGFibGVzJiYhYS50YWJsZXMpLGZlKDMpLFJyKCIgIixhLm5hbWV8fGEuaWQsIiAiKX19ZnVuY3Rpb24gRUF0KGMsbCl7aWYoMSZjJiYobGkoMCksZ3QoMSx4QXQsNCwzLCJjbHItdHJlZS1ub2RlIiwzNCksY2ko''@;'; put 'put ''KSksMiZjKXtjb25zdCBhPWwuJGltcGxpY2l0O2ZlKCkseGUoIm5nSWYiLCFhLmhpZGRlbil9fWZ1bmN0aW9uIFRBdChjLGwpezEmYyYmR3QoMCwiY2xyLXNwaW5uZXIiLDM5KX1mdW5jdGlvbiBBQXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJuZ3gtanNvbi12aWV3ZXIiLDQ5''@;'; put 'put ''KSxGdCgic2VnbWVudExpbmtDbGlja2VkIixmdW5jdGlvbihoKXtyZXR1cm4gd3QoYSksQ3QoT2UoMykub25Kc29uTGlua0NsaWNrKGgpKX0pLGhlKCl9MiZjJiZ4ZSgianNvbiIsT2UoMykuZW5kcG9pbnRKc29uKSgiZXhwYW5kZWQiLCExKX1mdW5jdGlvbiBrQXQoYyxsKXtpZigxJmMmJihs''@;'; put 'put ''aSgwKSxMZSgxKSxxcygyLCJwcmV0dHlqc29uIiksY2koKSksMiZjKXtjb25zdCBhPU9lKDMpO2ZlKCksUnIoIlxuICAgICAgICAgICAgIixrYygyLDEsYS5lbmRwb2ludEpzb24pLCJcbiAgICAgICAgICAiKX19ZnVuY3Rpb24gREF0KGMsbCl7aWYoMSZjJiYobGkoMCksTGUoMSwiXG4gICAg''@;'; put 'put ''ICAgICAgIiksZ3QoMixBQXQsMSwyLCJuZ3gtanNvbi12aWV3ZXIiLDQ4KSxMZSgzLCJcbiAgICAgICAgICAiKSxndCg0LGtBdCwzLDMsIm5nLWNvbnRhaW5lciIsMjEpLExlKDUsIlxuICAgICAgICAiKSxjaSgpKSwyJmMpe2NvbnN0IGE9T2UoMik7ZmUoMikseGUoIm5nSWYiLCFhLnJhd0pz''@;'; put 'put ''b24pLGZlKDIpLHhlKCJuZ0lmIixhLnJhd0pzb24pfX1mdW5jdGlvbiBJQXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtsaSgwKSxkZSgxLCJkaXYiLDQwKSgyLCJzcGFuIiw0MSksTGUoMywiIEdFVCAiKSxkZSg0LCJwIiw0MikscXMoNSwibGlua2luemUiKSxGdCgiY2xpY2siLGZ1bmN0''@;'; put 'put ''aW9uKGgpe3JldHVybiB3dChhKSxDdChPZSgpLm9uQnJlYWRjdW1zQ2xpY2soaCkpfSksaGUoKSxkZSg2LCJidXR0b24iLDE2KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKCkuY29weUJyZWFkY3J1bXMoKSl9KSxHdCg3LCJjbHItaWNvbiIsMTcpLGhlKCkoKSxk''@;'; put 'put ''ZSg4LCJkaXYiLDQzKSg5LCJjbHItaW5wdXQtY29udGFpbmVyIiwxNCkoMTAsImxhYmVsIiksTGUoMTEsIlN0YXJ0IiksaGUoKSxkZSgxMiwiaW5wdXQiLDQ0KSxwaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgpO3JldHVybiB2aShmLmVuZHBvaW50LnN0''@;'; put 'put ''YXJ0LGgpfHwoZi5lbmRwb2ludC5zdGFydD1oKSxDdChoKX0pLGhlKCkoKSxkZSgxMywiY2xyLWlucHV0LWNvbnRhaW5lciIsMTQpKDE0LCJsYWJlbCIpLExlKDE1LCJMaW1pdCIpLGhlKCksZGUoMTYsImlucHV0Iiw0NCkscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2Nv''@;'; put 'put ''bnN0IGY9T2UoKTtyZXR1cm4gdmkoZi5lbmRwb2ludC5saW1pdCxoKXx8KGYuZW5kcG9pbnQubGltaXQ9aCksQ3QoaCl9KSxoZSgpKCksZGUoMTcsImJ1dHRvbiIsNDUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5hcHBseVF1ZXJ5UGFyYW1zKCkpfSksR3Qo''@;'; put 'put ''MTgsImNsci1pY29uIiw0NiksaGUoKSgpKCksZGUoMTksInByZSIsNDcpLExlKDIwLCIgICAgICAgICIpLGd0KDIxLERBdCw2LDIsIm5nLWNvbnRhaW5lciIsMjEpLExlKDIyLCJcbiAgICAgICIpLGhlKCksY2koKX1pZigyJmMpe2NvbnN0IGE9T2UoKTtmZSg0KSx4ZSgiaW5uZXJIVE1MIixr''@;'; put 'put ''Yyg1LDcsYS5lbmRwb2ludC51cmwpLEY0KSxmZSg4KSxmaSgibmdNb2RlbCIsYS5lbmRwb2ludC5zdGFydCkseGUoImRpc2FibGVkIix2b2lkIDA9PT1hLmVuZHBvaW50LnN0YXJ0KSxmZSg0KSxmaSgibmdNb2RlbCIsYS5lbmRwb2ludC5saW1pdCkseGUoImRpc2FibGVkIix2b2lkIDA9PT1h''@;'; put 'put ''LmVuZHBvaW50LmxpbWl0KSxmZSgpLHhlKCJkaXNhYmxlZCIsdm9pZCAwPT09YS5lbmRwb2ludC5saW1pdCYmdm9pZCAwPT09YS5lbmRwb2ludC5zdGFydCksZmUoNCkseGUoIm5nSWYiLGEuZW5kcG9pbnRKc29uKX19bGV0IFJBdD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYp''@;'; put 'put ''e3RoaXMuaGVscGVyU2VydmljZT1hLHRoaXMuc2FzVml5YVNlcnZpY2U9ZCx0aGlzLnNhc1NlcnZpY2U9aCx0aGlzLmV2ZW50U2VydmljZT1mLHRoaXMuY29sbGVjdGlvbnM9e30sdGhpcy5jb2xsZWN0aW9uPSIiLHRoaXMuZW5kcG9pbnRMaW5rcz1bXSx0aGlzLmVuZHBvaW50SXRlbXM9W10s''@;'; put 'put ''dGhpcy5lbmRwb2ludD17dXJsOiIiLHN0YXJ0Oi0xLGxpbWl0Oi0xfSx0aGlzLmVuZHBvaW50TG9hZGluZz0hMSx0aGlzLmNvbGxlY3Rpb25Mb2FkaW5nPSExLHRoaXMucmF3SnNvbj0hMSx0aGlzLmxpbmtzU2VhcmNoPSIiLHRoaXMuaXRlbXNTZWFyY2g9IiIsdGhpcy5zYXNqc0NvbmZpZz1u''@;'; put 'put ''ZXcgZmguU0FTanNDb25maWd9bmdPbkluaXQoKXt0aGlzLnNhc2pzQ29uZmlnPXRoaXMuc2FzU2VydmljZS5nZXRTYXNqc0NvbmZpZygpLHRoaXMuY29sbGVjdGlvbnM9dGhpcy5zYXNWaXlhU2VydmljZS5nZXRBbGxDb2xsZWN0aW9ucygpfWxpbmtzTGlzdE9uRmlsdGVyKCl7dGhpcy5oZWxw''@;'; put 'put ''ZXJTZXJ2aWNlLmxpYnJhcnlPbkZpbHRlcih0aGlzLmVuZHBvaW50TGlua3MsdGhpcy5saW5rc1NlYXJjaCwicmVsIiksS24udml5YUFwaS5saW5rc3NTZWFyY2g9dGhpcy5saW5rc1NlYXJjaH1pdGVtc0xpc3RPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIo''@;'; put 'put ''dGhpcy5lbmRwb2ludEl0ZW1zLHRoaXMuaXRlbXNTZWFyY2gsIm5hbWUiKSxLbi52aXlhQXBpLml0ZW1zU2VhcmNoPXRoaXMuaXRlbXNTZWFyY2h9bGlua09uQ2xpY2soYSl7dGhpcy5sb2FkVXJsKGEuaHJlZil9aXRlbU9uQ2xpY2soYSl7dGhpcy5sb2FkVXJsKGEubGlua3NbMF0uaHJlZil9''@;'; put 'put ''dHJlZU5vZGVDbGlja2VkKGEsZCxoKXsiQ29sbGFwc2UiPT09YS50YXJnZXQudGl0bGUmJnRoaXMuY29sbGFwc2VUcmVlSXRlbXMoaCxkKX1jb2xsYXBzZVRyZWVJdGVtcyhhLGQpe2EuZm9yRWFjaChoPT57SlNPTi5zdHJpbmdpZnkoaCkhPT1KU09OLnN0cmluZ2lmeShkKSYmKGguZXhwYW5k''@;'; put 'put ''ZWQ9ITEpfSl9dXBkYXRlU2VsZWN0ZWRDb2xsZWN0aW9uKCl7S24udml5YUFwaS5zZWxlY3RlZENvbGxlY3Rpb249dGhpcy5jb2xsZWN0aW9uLHRoaXMuZW5kcG9pbnQudXJsPXRoaXMuY29sbGVjdGlvbix0aGlzLmNvbGxlY3Rpb25Mb2FkaW5nPSEwLHRoaXMuc2FzVml5YVNlcnZpY2UuZ2V0''@;'; put 'put ''QnlDb2xsZWN0aW9uKHRoaXMuY29sbGVjdGlvbikuc3Vic2NyaWJlKGE9Pnt0aGlzLmVuZHBvaW50TGlua3M9YS5saW5rcyx0aGlzLmVuZHBvaW50SXRlbXM9YS5pdGVtcz9hLml0ZW1zOltdLHRoaXMuY29sbGVjdGlvbkxvYWRpbmc9ITEsdGhpcy5lbmRwb2ludEpzb249YSx0aGlzLmVuZHBv''@;'; put 'put ''aW50LnN0YXJ0PWEuc3RhcnQsdGhpcy5lbmRwb2ludC5saW1pdD1hLmxpbWl0fSxhPT57dGhpcy5jb2xsZWN0aW9uTG9hZGluZz0hMTtsZXQgZD0iRXJyb3Igb2NjdXJyZWQgd2hpbGUgc2VuZGluZyByZXF1ZXN0IjthLm1lc3NhZ2UmJihkPWEubWVzc2FnZSksYS5lcnJvciYmKGEuZXJyb3Iu''@;'; put 'put ''bWVzc2FnZSYmKGQ9YS5lcnJvci5tZXNzYWdlKSxhLmVycm9yLnJlbWVkaWF0aW9uJiYoZD1gJHtkfVxuJHthLmVycm9yLnJlbWVkaWF0aW9ufWApKSx0aGlzLmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLGQsbnVsbCwiSFRUUCBFcnJvciIpfSl9b25Kc29uTGlua0NsaWNrKGEp''@;'; put 'put ''e3RoaXMubG9hZFVybChhKX1vbkpzb25DbGljayhhKXtpZihhLnByZXZlbnREZWZhdWx0KCksIkEiPT09YS5zcmNFbGVtZW50LnRhZ05hbWUpe2NvbnN0IGQ9YS5zcmNFbGVtZW50LmhyZWYuc3BsaXQoYS5zcmNFbGVtZW50Lmhvc3QpWzFdO3RoaXMubG9hZFVybChkKX19b25CcmVhZGN1bXND''@;'; put 'put ''bGljayhhKXtpZihhLnByZXZlbnREZWZhdWx0KCksIWEuc3JjRWxlbWVudC5ocmVmKXJldHVybjtjb25zdCBkPWEuc3JjRWxlbWVudC5ocmVmLnNwbGl0KGEuc3JjRWxlbWVudC5ob3N0KVsxXTt0aGlzLmxvYWRVcmwoZCl9Y29weUpzb24oKXt0aGlzLmVuZHBvaW50SnNvbiYmbmF2aWdhdG9y''@;'; put 'put ''LmNsaXBib2FyZC53cml0ZVRleHQoSlNPTi5zdHJpbmdpZnkodGhpcy5lbmRwb2ludEpzb24sbnVsbCwyKSl9Y29weUJyZWFkY3J1bXMoKXt0aGlzLmVuZHBvaW50JiZ0aGlzLmVuZHBvaW50LnVybCYmbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5lbmRwb2ludC51cmwpfWFw''@;'; put 'put ''cGx5UXVlcnlQYXJhbXMoKXtjb25zdCBhPXRoaXMuZW5kcG9pbnQuc3RhcnQsZD10aGlzLmVuZHBvaW50LmxpbWl0LGg9YD8ke3ZvaWQgMCE9PWE/InN0YXJ0PSIrYToiIn0ke3ZvaWQgMCE9PWQ/IiZsaW1pdD0iK2Q6IiJ9YCxmPWAke3RoaXMuZW5kcG9pbnQudXJsLnNwbGl0KCI/IilbMF19''@;'; put 'put ''JHtofWA7dGhpcy5sb2FkVXJsKGYpfWxvYWRVcmwoYSl7dGhpcy5lbmRwb2ludExvYWRpbmc9ITAsdGhpcy5zYXNWaXlhU2VydmljZS5nZXRCeVVybChhKS5zdWJzY3JpYmUoZD0+e3RoaXMuZW5kcG9pbnRMaW5rcz1kLmxpbmtzLHRoaXMuZW5kcG9pbnRJdGVtcz1kLml0ZW1zP2QuaXRlbXM6''@;'; put 'put ''W10sdGhpcy5lbmRwb2ludEpzb249ZCx0aGlzLmVuZHBvaW50TG9hZGluZz0hMSx0aGlzLmVuZHBvaW50LnVybD1hLHRoaXMuZW5kcG9pbnQuc3RhcnQ9ZC5zdGFydCx0aGlzLmVuZHBvaW50LmxpbWl0PWQubGltaXR9LGQ9Pnt0aGlzLmVuZHBvaW50TG9hZGluZz0hMTtsZXQgaD0iRXJyb3Ig''@;'; put 'put ''b2NjdXJyZWQgd2hpbGUgc2VuZGluZyByZXF1ZXN0IjtkLm1lc3NhZ2UmJihoPWQubWVzc2FnZSksZC5lcnJvciYmKGQuZXJyb3IubWVzc2FnZSYmKGg9ZC5lcnJvci5tZXNzYWdlKSxkLmVycm9yLnJlbWVkaWF0aW9uJiYoaD1gJHtofVxuJHtkLmVycm9yLnJlbWVkaWF0aW9ufWApKSx0aGlz''@;'; put 'put ''LmV2ZW50U2VydmljZS5zaG93QWJvcnRNb2RhbChudWxsLGgsbnVsbCwiSFRUUCBFcnJvciIpfSl9c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8YykoR2UoR3UpLEdlKG5BdCksR2UoSnMpLEdlKHBjKSl9fXN0YXRpY3t0aGlzLlx1MDI3NWNtcD1Ocih7''@;'; put 'put ''dHlwZTpjLHNlbGVjdG9yczpbWyJhcHAtdml5YS1hcGktZXhwbG9yZXIiXV0saG9zdEF0dHJzOlsxLCJjb250ZW50LWNvbnRhaW5lciJdLGRlY2xzOjMzLHZhcnM6MTMsY29uc3RzOltbInNlYXJjaExpbmtzVHJlZUlucHV0IiwiIl0sWyJzZWFyY2hJdGVtc1RyZWVJbnB1dCIsIiJdLFsxLCJh''@;'; put 'put ''cGktY29sbGVjdGlvbi1kcm9wZG93biJdLFsiY2xyU2VsZWN0IiwiIiwiaWQiLCJyZXBvc2l0b3J5IiwzLCJuZ01vZGVsQ2hhbmdlIiwiY2hhbmdlIiwibmdNb2RlbCJdLFszLCJsYWJlbCIsNCwibmdGb3IiLCJuZ0Zvck9mIl0sWyJjbGFzcyIsInctMTAwIHRleHQtY2VudGVyIiw0LCJuZ0lm''@;'; put 'put ''Il0sWzEsImQtZmxleCIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIl0sWyJjbHJNZWRpdW0iLCIiLDQsIm5nSWYiXSxbImNsYXNzIiwic2VhcmNoLW5vZGUiLDQsIm5nSWYiXSxbNCwibmdGb3IiLCJuZ0Zvck9mIl0sWzEsImNvbnRlbnQtYXJlYSJdLFsxLCJjYXJkIiwiaC0xMDAiLCJw''@;'; put 'put ''LTEwIiwiZC1mbGV4IiwiY2xyLWZsZXgtY29sdW1uIl0sWzEsInctMTAwIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciIsImNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIiwic2l0aW9uLXJlbGF0aXZlIl0sWzEsImpzb24tdG9nZ2xlIiwiZC1mbGV4IiwiY2xyLWFsaWduLWl0''@;'; put 'put ''ZW1zLWNlbnRlciJdLFsxLCJtLTAiXSxbInR5cGUiLCJjaGVja2JveCIsImNsclRvZ2dsZSIsIiIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1saW5rIiwiYnRuLXNtIiwzLCJjbGljayJdLFsic2hhcGUiLCJjb3B5Il0sWzEsInRl''@;'; put 'put ''eHQtY2VudGVyIiwibS0wIl0sWyJjbHJTbWFsbCIsIiIsNCwibmdJZiJdLFsxLCJ3LTEwMCIsImxpZ2h0Il0sWzQsIm5nSWYiXSxbMywibGFiZWwiXSxbMywidmFsdWUiLDQsIm5nRm9yIiwibmdGb3JPZiJdLFszLCJ2YWx1ZSJdLFsxLCJ3LTEwMCIsInRleHQtY2VudGVyIl0sWyJjbHJNZWRp''@;'; put 'put ''dW0iLCIiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiYXBwU3RlYWxGb2N1cyIsIiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJTZWFyY2ggbGlua3MiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFu''@;'; put 'put ''Z2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJjbGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIs''@;'; put 'put ''ImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xpY2siLCJjbHJFeHBhbmRlZENoYW5nZSIsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwiYmxvY2siXSxbImNscklucHV0Iiwi''@;'; put 'put ''IiwicGxhY2Vob2xkZXIiLCJTZWFyY2ggaXRlbXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbImNsclNtYWxsIiwiIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItanVz''@;'; put 'put ''dGlmeS1jb250ZW50LWJldHdlZW4iXSxbMSwiZC1mbGV4IiwiY2xyLWFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJ0ZXh0LWNlbnRlciIsImVuZHBvaW50LWJyZWFkY3J1bXMiLDMsImNsaWNrIiwiaW5uZXJIVE1MIl0sWzEsImQtZmxleCIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJxdWVy''@;'; put 'put ''eS1wYXJhbXMiXSxbImNscklucHV0IiwiIiwidHlwZSIsIm51bWJlciIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiLCJkaXNhYmxlZCJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLWxpbmsiLCJidG4tc20iLDMsImNsaWNrIiwiZGlzYWJsZWQiXSxbInNoYXBlIiwicGxheSJd''@;'; put 'put ''LFsxLCJqc29uLWFyZWEiXSxbImNsYXNzIiwiZC1ibG9jayIsMywianNvbiIsImV4cGFuZGVkIiwic2VnbWVudExpbmtDbGlja2VkIiw0LCJuZ0lmIl0sWzEsImQtYmxvY2siLDMsInNlZ21lbnRMaW5rQ2xpY2tlZCIsImpzb24iLCJleHBhbmRlZCJdXSx0ZW1wbGF0ZTpmdW5jdGlvbihkLGgp''@;'; put 'put ''ezEmZCYmKGRlKDAsImFwcC1zaWRlYmFyIikoMSwiZGl2IiwyKSgyLCJjbHItc2VsZWN0LWNvbnRhaW5lciIpKDMsImxhYmVsIiksTGUoNCwiQVBJIENvbGxlY3Rpb24iKSxoZSgpLGRlKDUsInNlbGVjdCIsMykscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKHYpe3JldHVybiB2aShoLmNv''@;'; put 'put ''bGxlY3Rpb24sdil8fChoLmNvbGxlY3Rpb249diksdn0pLEZ0KCJjaGFuZ2UiLGZ1bmN0aW9uKCl7cmV0dXJuIGgudXBkYXRlU2VsZWN0ZWRDb2xsZWN0aW9uKCl9KSxndCg2LHBBdCwzLDQsIm9wdGdyb3VwIiw0KSxxcyg3LCJrZXl2YWx1ZSIpLGhlKCkoKSgpLGd0KDgsZ0F0LDIsMCwicCIs''@;'; put 'put ''NSksZGUoOSwiZGl2Iiw2KSxndCgxMCxtQXQsMSwwLCJjbHItc3Bpbm5lciIsNyksaGUoKSxkZSgxMSwiY2xyLXRyZWUiKSxndCgxMix5QXQsNiwzLCJjbHItdHJlZS1ub2RlIiw4KSgxMyx3QXQsMiwxLCJuZy1jb250YWluZXIiLDkpLGhlKCksZGUoMTQsImNsci10cmVlIiksZ3QoMTUsTUF0''@;'; put 'put ''LDYsMywiY2xyLXRyZWUtbm9kZSIsOCkoMTYsRUF0LDIsMSwibmctY29udGFpbmVyIiw5KSxoZSgpKCksZGUoMTcsImRpdiIsMTApKDE4LCJkaXYiLDExKSgxOSwiZGl2IiwxMikoMjAsImRpdiIsMTMpKDIxLCJjbHItdG9nZ2xlLWNvbnRhaW5lciIsMTQpKDIyLCJjbHItdG9nZ2xlLXdyYXBw''@;'; put 'put ''ZXIiKSgyMywiaW5wdXQiLDE1KSxwaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24odil7cmV0dXJuIHZpKGgucmF3SnNvbix2KXx8KGgucmF3SnNvbj12KSx2fSksaGUoKSxkZSgyNCwibGFiZWwiKSxMZSgyNSwiUkFXIEpzb24iKSxoZSgpKCkoKSxkZSgyNiwiYnV0dG9uIiwxNiksRnQoImNs''@;'; put 'put ''aWNrIixmdW5jdGlvbigpe3JldHVybiBoLmNvcHlKc29uKCl9KSxHdCgyNywiY2xyLWljb24iLDE3KSxoZSgpKCksZGUoMjgsImg0IiwxOCksTGUoMjksIiBBUEkgRXhwbG9yZXIgIiksZ3QoMzAsVEF0LDEsMCwiY2xyLXNwaW5uZXIiLDE5KSxoZSgpKCksR3QoMzEsImhyIiwyMCksZ3QoMzIs''@;'; put 'put ''SUF0LDIzLDksIm5nLWNvbnRhaW5lciIsMjEpLGhlKCkoKSksMiZkJiYoZmUoNSksZmkoIm5nTW9kZWwiLGguY29sbGVjdGlvbiksZmUoKSx4ZSgibmdGb3JPZiIsa2MoNywxMSxoLmNvbGxlY3Rpb25zKSksZmUoMikseGUoIm5nSWYiLGguZW5kcG9pbnRMaW5rcy5sZW5ndGg8MSYmIWguY29s''@;'; put 'put ''bGVjdGlvbkxvYWRpbmcpLGZlKDIpLHhlKCJuZ0lmIixoLmNvbGxlY3Rpb25Mb2FkaW5nKSxmZSgyKSx4ZSgibmdJZiIsaC5lbmRwb2ludExpbmtzLmxlbmd0aD4wKSxmZSgpLHhlKCJuZ0Zvck9mIixoLmVuZHBvaW50TGlua3MpLGZlKDIpLHhlKCJuZ0lmIixoLmVuZHBvaW50SXRlbXMubGVu''@;'; put 'put ''Z3RoPjApLGZlKCkseGUoIm5nRm9yT2YiLGguZW5kcG9pbnRJdGVtcyksZmUoNyksZmkoIm5nTW9kZWwiLGgucmF3SnNvbiksZmUoNykseGUoIm5nSWYiLGguZW5kcG9pbnRMb2FkaW5nKSxmZSgyKSx4ZSgibmdJZiIsaC5jb2xsZWN0aW9uLmxlbmd0aD4wKSl9LGRlcGVuZGVuY2llczpbc3Ms''@;'; put 'put ''eW8sVWYsWmYsUWwsdUwsQjEsemYsUXMsWXMsU2gsT2QsT2wsQjAsdXMsVzEsUHksRGQsSWQsQkwsWnksVXksX2gsdDQsZTQsY0F0LGZSLGRBdCxoQXRdLHN0eWxlczpbIi5hcGktY29sbGVjdGlvbi1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWxlZnQ6MTVweDttYXJnaW4t''@;'; put 'put ''cmlnaHQ6MTVweDttYXJnaW4tYm90dG9tOjEwcHh9Lmpzb24tYXJlYVtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO292ZXJmbG93OmF1dG99Lmpzb24tYXJlYVtfbmdjb250ZW50LSVDT01QJV0gICAg''@;'; put 'put ''IGF7dGV4dC1kZWNvcmF0aW9uOm5vbmV9Lmpzb24tYXJlYVtfbmdjb250ZW50LSVDT01QJV0gICAgPm5neC1qc29uLXZpZXdlcntoZWlnaHQ6MTAwJX0uanNvbi1hcmVhW19uZ2NvbnRlbnQtJUNPTVAlXSAgICA+bmd4LWpzb24tdmlld2VyPi5uZ3gtanNvbi12aWV3ZXJ7b3ZlcmZsb3c6YXV0''@;'; put 'put ''b30uanNvbi10b2dnbGVbX25nY29udGVudC0lQ09NUCVde3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MTBweDttYXJnaW46MH0uZW5kcG9pbnQtYnJlYWRjcnVtc1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAgMCAwIDEwcHh9LnF1ZXJ5LXBhcmFtc1tfbmdjb250ZW50LSVDT01QJV0gICBp''@;'; put 'put ''bnB1dFtfbmdjb250ZW50LSVDT01QJV17d2lkdGg6NzBweH0iXX0pfX1yZXR1cm4gY30pKCk7Y29uc3QgTEF0PW5ldyBTdCgiV2luZG93VG9rZW4iLHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuZG9jdW1lbnQ/e3Byb3ZpZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9PndpbmRvd306e3Byb3Zp''@;'; put 'put ''ZGVkSW46InJvb3QiLGZhY3Rvcnk6KCk9Pnt9fSk7bGV0IE9BdD0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoKXt0aGlzLm5nWm9uZT1hLHRoaXMuZG9jdW1lbnQ9ZCx0aGlzLndpbmRvdz1oLHRoaXMuY29weVN1YmplY3Q9bmV3IFduLHRoaXMuY29weVJlc3BvbnNlJD10aGlzLmNv''@;'; put 'put ''cHlTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLHRoaXMuY29uZmlnPXt9fWNvbmZpZ3VyZShhKXt0aGlzLmNvbmZpZz1hfWNvcHkoYSl7aWYoIXRoaXMuaXNTdXBwb3J0ZWR8fCFhKXJldHVybiB0aGlzLnB1c2hDb3B5UmVzcG9uc2Uoe2lzU3VjY2VzczohMSxjb250ZW50OmF9KTtjb25zdCBkPXRo''@;'; put 'put ''aXMuY29weUZyb21Db250ZW50KGEpO3JldHVybiB0aGlzLnB1c2hDb3B5UmVzcG9uc2UoZD97Y29udGVudDphLGlzU3VjY2VzczpkfTp7aXNTdWNjZXNzOiExLGNvbnRlbnQ6YX0pfWdldCBpc1N1cHBvcnRlZCgpe3JldHVybiEhdGhpcy5kb2N1bWVudC5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQm''@;'; put 'put ''JiEhdGhpcy5kb2N1bWVudC5xdWVyeUNvbW1hbmRTdXBwb3J0ZWQoImNvcHkiKSYmISF0aGlzLndpbmRvd31pc1RhcmdldFZhbGlkKGEpe2lmKGEgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50fHxhIGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCl7aWYoYS5oYXNBdHRyaWJ1dGUo''@;'; put 'put ''ImRpc2FibGVkIikpdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkICJ0YXJnZXQiIGF0dHJpYnV0ZS4gUGxlYXNlIHVzZSAicmVhZG9ubHkiIGluc3RlYWQgb2YgImRpc2FibGVkIiBhdHRyaWJ1dGUnKTtyZXR1cm4hMH10aHJvdyBuZXcgRXJyb3IoIlRhcmdldCBzaG91bGQgYmUgaW5wdXQgb3Ig''@;'; put 'put ''dGV4dGFyZWEiKX1jb3B5RnJvbUlucHV0RWxlbWVudChhLGQ9ITApe3RyeXt0aGlzLnNlbGVjdFRhcmdldChhKTtjb25zdCBoPXRoaXMuY29weVRleHQoKTtyZXR1cm4gdGhpcy5jbGVhclNlbGVjdGlvbihkP2E6dm9pZCAwLHRoaXMud2luZG93KSxoJiZ0aGlzLmlzQ29weVN1Y2Nlc3NJbklF''@;'; put 'put ''MTEoKX1jYXRjaHtyZXR1cm4hMX19aXNDb3B5U3VjY2Vzc0luSUUxMSgpe2NvbnN0IGE9dGhpcy53aW5kb3cuY2xpcGJvYXJkRGF0YTtyZXR1cm4hKGEmJmEuZ2V0RGF0YSYmIWEuZ2V0RGF0YSgiVGV4dCIpKX1jb3B5RnJvbUNvbnRlbnQoYSxkPXRoaXMuZG9jdW1lbnQuYm9keSl7aWYodGhp''@;'; put 'put ''cy50ZW1wVGV4dEFyZWEmJiFkLmNvbnRhaW5zKHRoaXMudGVtcFRleHRBcmVhKSYmdGhpcy5kZXN0cm95KHRoaXMudGVtcFRleHRBcmVhLnBhcmVudEVsZW1lbnR8fHZvaWQgMCksIXRoaXMudGVtcFRleHRBcmVhKXt0aGlzLnRlbXBUZXh0QXJlYT10aGlzLmNyZWF0ZVRlbXBUZXh0QXJlYSh0''@;'; put 'put ''aGlzLmRvY3VtZW50LHRoaXMud2luZG93KTt0cnl7ZC5hcHBlbmRDaGlsZCh0aGlzLnRlbXBUZXh0QXJlYSl9Y2F0Y2h7dGhyb3cgbmV3IEVycm9yKCJDb250YWluZXIgc2hvdWxkIGJlIGEgRG9tIGVsZW1lbnQiKX19dGhpcy50ZW1wVGV4dEFyZWEudmFsdWU9YTtjb25zdCBoPXRoaXMuY29w''@;'; put 'put ''eUZyb21JbnB1dEVsZW1lbnQodGhpcy50ZW1wVGV4dEFyZWEsITEpO3JldHVybiB0aGlzLmNvbmZpZy5jbGVhblVwQWZ0ZXJDb3B5JiZ0aGlzLmRlc3Ryb3kodGhpcy50ZW1wVGV4dEFyZWEucGFyZW50RWxlbWVudHx8dm9pZCAwKSxofWRlc3Ryb3koYT10aGlzLmRvY3VtZW50LmJvZHkpe3Ro''@;'; put 'put ''aXMudGVtcFRleHRBcmVhJiYoYS5yZW1vdmVDaGlsZCh0aGlzLnRlbXBUZXh0QXJlYSksdGhpcy50ZW1wVGV4dEFyZWE9dm9pZCAwKX1zZWxlY3RUYXJnZXQoYSl7cmV0dXJuIGEuc2VsZWN0KCksYS5zZXRTZWxlY3Rpb25SYW5nZSgwLGEudmFsdWUubGVuZ3RoKSxhLnZhbHVlLmxlbmd0aH1j''@;'; put 'put ''b3B5VGV4dCgpe3JldHVybiB0aGlzLmRvY3VtZW50LmV4ZWNDb21tYW5kKCJjb3B5Iil9Y2xlYXJTZWxlY3Rpb24oYSxkKXthJiZhLmZvY3VzKCksZC5nZXRTZWxlY3Rpb24oKT8ucmVtb3ZlQWxsUmFuZ2VzKCl9Y3JlYXRlVGVtcFRleHRBcmVhKGEsZCl7Y29uc3QgaD0icnRsIj09PWEuZG9j''@;'; put 'put ''dW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgiZGlyIik7bGV0IGY7cmV0dXJuIGY9YS5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpLGYuc3R5bGUuZm9udFNpemU9IjEycHQiLGYuc3R5bGUuYm9yZGVyPSIwIixmLnN0eWxlLnBhZGRpbmc9IjAiLGYuc3R5bGUubWFyZ2luPSIwIixmLnN0eWxl''@;'; put 'put ''LnBvc2l0aW9uPSJhYnNvbHV0ZSIsZi5zdHlsZVtoPyJyaWdodCI6ImxlZnQiXT0iLTk5OTlweCIsZi5zdHlsZS50b3A9KGQucGFnZVlPZmZzZXR8fGEuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcCkrInB4IixmLnNldEF0dHJpYnV0ZSgicmVhZG9ubHkiLCIiKSxmfXB1c2hDb3B5UmVzcG9u''@;'; put 'put ''c2UoYSl7dGhpcy5jb3B5U3ViamVjdC5vYnNlcnZlcnMubGVuZ3RoPjAmJnRoaXMubmdab25lLnJ1bigoKT0+e3RoaXMuY29weVN1YmplY3QubmV4dChhKX0pfXB1c2hDb3B5UmVwb25zZShhKXt0aGlzLnB1c2hDb3B5UmVzcG9uc2UoYSl9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlvbihh''@;'; put 'put ''KXtyZXR1cm4gbmV3KGF8fGMpKE1yKFlvKSxNcih2cyksTXIoTEF0LDgpKX0sYy5cdTAyNzVwcm92PWFuKHt0b2tlbjpjLGZhY3Rvcnk6Yy5cdTAyNzVmYWMscHJvdmlkZWRJbjoicm9vdCJ9KSxjfSkoKSxQQXQ9KCgpPT57Y2xhc3MgY3tjb25zdHJ1Y3RvcihhLGQsaCxmKXt0aGlzLm5nWm9u''@;'; put 'put ''ZT1hLHRoaXMuaG9zdD1kLHRoaXMucmVuZGVyZXI9aCx0aGlzLmNsaXBib2FyZFNydj1mLHRoaXMuY2JPblN1Y2Nlc3M9bmV3IHFyLHRoaXMuY2JPbkVycm9yPW5ldyBxcix0aGlzLm9uQ2xpY2s9dj0+e3RoaXMuY2xpcGJvYXJkU3J2LmlzU3VwcG9ydGVkP3RoaXMudGFyZ2V0RWxtJiZ0aGlz''@;'; put 'put ''LmNsaXBib2FyZFNydi5pc1RhcmdldFZhbGlkKHRoaXMudGFyZ2V0RWxtKT90aGlzLmhhbmRsZVJlc3VsdCh0aGlzLmNsaXBib2FyZFNydi5jb3B5RnJvbUlucHV0RWxlbWVudCh0aGlzLnRhcmdldEVsbSksdGhpcy50YXJnZXRFbG0udmFsdWUsdik6dGhpcy5jYkNvbnRlbnQmJnRoaXMuaGFu''@;'; put 'put ''ZGxlUmVzdWx0KHRoaXMuY2xpcGJvYXJkU3J2LmNvcHlGcm9tQ29udGVudCh0aGlzLmNiQ29udGVudCx0aGlzLmNvbnRhaW5lciksdGhpcy5jYkNvbnRlbnQsdik6dGhpcy5oYW5kbGVSZXN1bHQoITEsdm9pZCAwLHYpfX1uZ09uSW5pdCgpe3RoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFy''@;'; put 'put ''KCgpPT57dGhpcy5jbGlja0xpc3RlbmVyPXRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LCJjbGljayIsdGhpcy5vbkNsaWNrKX0pfW5nT25EZXN0cm95KCl7dGhpcy5jbGlja0xpc3RlbmVyJiZ0aGlzLmNsaWNrTGlzdGVuZXIoKSx0aGlzLmNsaXBib2FyZFNy''@;'; put 'put ''di5kZXN0cm95KHRoaXMuY29udGFpbmVyKX1oYW5kbGVSZXN1bHQoYSxkLGgpe2xldCBmPXtpc1N1Y2Nlc3M6YSxjb250ZW50OmQsc3VjY2Vzc01lc3NhZ2U6dGhpcy5jYlN1Y2Nlc3NNc2csZXZlbnQ6aH07YT90aGlzLmNiT25TdWNjZXNzLm9ic2VydmVkJiZ0aGlzLm5nWm9uZS5ydW4oKCk9''@;'; put 'put ''Pnt0aGlzLmNiT25TdWNjZXNzLmVtaXQoZil9KTp0aGlzLmNiT25FcnJvci5vYnNlcnZlZCYmdGhpcy5uZ1pvbmUucnVuKCgpPT57dGhpcy5jYk9uRXJyb3IuZW1pdChmKX0pLHRoaXMuY2xpcGJvYXJkU3J2LnB1c2hDb3B5UmVzcG9uc2UoZil9fXJldHVybiBjLlx1MDI3NWZhYz1mdW5jdGlv''@;'; put 'put ''bihhKXtyZXR1cm4gbmV3KGF8fGMpKEdlKFlvKSxHZShlbyksR2UoRWEpLEdlKE9BdCkpfSxjLlx1MDI3NWRpcj1Fcih7dHlwZTpjLHNlbGVjdG9yczpbWyIiLCJuZ3hDbGlwYm9hcmQiLCIiXV0saW5wdXRzOnt0YXJnZXRFbG06W1puLk5vbmUsIm5neENsaXBib2FyZCIsInRhcmdldEVsbSJd''@;'; put 'put ''LGNvbnRhaW5lcjoiY29udGFpbmVyIixjYkNvbnRlbnQ6ImNiQ29udGVudCIsY2JTdWNjZXNzTXNnOiJjYlN1Y2Nlc3NNc2cifSxvdXRwdXRzOntjYk9uU3VjY2VzczoiY2JPblN1Y2Nlc3MiLGNiT25FcnJvcjoiY2JPbkVycm9yIn19KSxjfSkoKSxGQXQ9KCgpPT57Y2xhc3MgY3t9cmV0dXJu''@;'; put 'put ''IGMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGEpe3JldHVybiBuZXcoYXx8Yyl9LGMuXHUwMjc1bW9kPWtpKHt0eXBlOmN9KSxjLlx1MDI3NWluaj1Bcih7aW1wb3J0czpbTG9dfSksY30pKCk7dmFyIEhBdD1fKDI1MDAxKTtsZXQgTkF0PSgoKT0+e2NsYXNzIGN7dHJhbnNmb3JtKGEsLi4uZCl7Y29u''@;'; put 'put ''c3QgaD1wYXJzZUludChkWzBdKXx8MixmPSJudW1iZXIiIT10eXBlb2YgYT9wYXJzZUludChhKTphO3JldHVybigwLEhBdC5DKShmLGgpfXN0YXRpY3t0aGlzLlx1MDI3NWZhYz1mdW5jdGlvbihkKXtyZXR1cm4gbmV3KGR8fGMpfX1zdGF0aWN7dGhpcy5cdTAyNzVwaXBlPWFsKHtuYW1lOiJj''@;'; put 'put ''b252ZXJ0U2l6ZSIsdHlwZTpjLHB1cmU6ITB9KX19cmV0dXJuIGN9KSgpO2NvbnN0IFZBdD1bInF1ZXJ5RmlsdGVyIl0sQkF0PSgpPT5bIiIsIiAiXTtmdW5jdGlvbiBqQXQoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDU0KSxHdCgxLCJjbHItc3Bpbm5lciIsNTUpLGhlKCkpfWZ1bmN0aW9uIHpB''@;'; put 'put ''dChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDYxKX1mdW5jdGlvbiBVQXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItaWNvbiIsNjIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKDIpO3JldHVybiBoLmxpYnJhcmllc1NlYXJjaD0iIixDdCho''@;'; put 'put ''LmxpYnJhcnlPbkZpbHRlcigpKX0pLGhlKCl9fWZ1bmN0aW9uIFpBdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDU2KSgxLCJkaXYiLDU3KSgyLCJpbnB1dCIsNTgsMSkscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9''@;'; put 'put ''T2UoKTtyZXR1cm4gdmkoZi5saWJyYXJpZXNTZWFyY2gsaCl8fChmLmxpYnJhcmllc1NlYXJjaD1oKSxDdChoKX0pLEZ0KCJrZXl1cCIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoKS5saWJyYXJ5T25GaWx0ZXIoKSl9KSxoZSgpLGd0KDQsekF0LDEsMCwiY2xyLWljb24iLDU5KSg1''@;'; put 'put ''LFVBdCwxLDAsImNsci1pY29uIiw2MCksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT12bygzKSxkPU9lKCk7ZmUoMiksZmkoIm5nTW9kZWwiLGQubGlicmFyaWVzU2VhcmNoKSxmZSgyKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg8MSksZmUoKSx4ZSgibmdJZiIsYS52YWx1ZS5sZW5ndGg+MCl9''@;'; put 'put ''fWZ1bmN0aW9uIFdBdChjLGwpezEmYyYmR3QoMCwiY2xyLWljb24iLDYxKX1mdW5jdGlvbiBZQXQoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJjbHItaWNvbiIsNjIpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKSxPZSgpO2NvbnN0IGg9dm8oMyksZj1PZSgyKS4kaW1wbGlj''@;'; put 'put ''aXQsdj1PZSgpO3JldHVybiBoLnZhbHVlPSIiLGYuc2VhcmNoU3RyaW5nPSIiLEN0KHYudHJlZU9uRmlsdGVyKGYsInRhYmxlcyIpKX0pLGhlKCl9fWZ1bmN0aW9uIEdBdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDU2KSgxLCJkaXYiLDU3KSgyLCJp''@;'; put 'put ''bnB1dCIsNjcsMikscGkoIm5nTW9kZWxDaGFuZ2UiLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoMikuJGltcGxpY2l0O3JldHVybiB2aShmLnNlYXJjaFN0cmluZyxoKXx8KGYuc2VhcmNoU3RyaW5nPWgpLEN0KGgpfSksRnQoImtleXVwIixmdW5jdGlvbigpe3d0KGEpO2NvbnN0IGg9''@;'; put 'put ''T2UoMikuJGltcGxpY2l0O3JldHVybiBDdChPZSgpLnRyZWVPbkZpbHRlcihoLCJ0YWJsZXMiKSl9KSxoZSgpLGd0KDQsV0F0LDEsMCwiY2xyLWljb24iLDU5KSg1LFlBdCwxLDAsImNsci1pY29uIiw2MCksaGUoKSgpfWlmKDImYyl7Y29uc3QgYT12bygzKSxkPU9lKDIpLiRpbXBsaWNpdDtm''@;'; put 'put ''ZSgyKSx4ZSgiaWQiLCJzZWFyY2hfIitkLkxJQlJBUllSRUYpLGZpKCJuZ01vZGVsIixkLnNlYXJjaFN0cmluZyksZmUoMikseGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPDEpLGZlKCkseGUoIm5nSWYiLGEudmFsdWUubGVuZ3RoPjApfX1mdW5jdGlvbiAkQXQoYyxsKXsxJmMmJkd0KDAsImNs''@;'; put 'put ''ci1pY29uIiw3NCl9ZnVuY3Rpb24gS0F0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsNzUpfWZ1bmN0aW9uIHFBdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImJ1dHRvbiIsNzApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKTtjb25zdCBoPU9lKCkubmdWYXIsZj1PZSgp''@;'; put 'put ''LiRpbXBsaWNpdCx2PU9lKDIpLiRpbXBsaWNpdCxNPU9lKCk7cmV0dXJuIEN0KGg/IiI6TS5vblRhYmxlQ2xpY2soZix2KSl9KSxsaSgxLDcxKSxndCgyLCRBdCwxLDAsImNsci1pY29uIiw3MikoMyxLQXQsMSwwLCJjbHItaWNvbiIsNzMpLGNpKCksTGUoNCksaGUoKX1pZigyJmMpe2NvbnN0''@;'; put 'put ''IGE9T2UoKS5uZ1ZhcixkPU9lKCkuJGltcGxpY2l0LGg9T2UoMikuJGltcGxpY2l0LGY9T2UoKTt4cigiZGMtbG9ja2VkLWNvbnRyb2wiLGEpKCJhY3RpdmUiLGYubGliVGFiQWN0aXZlKGguTElCUkFSWVJFRixkKSksZmUoKSx4ZSgibmdTd2l0Y2giLGQuaW5jbHVkZXMoIi1GQyIpKSxmZSgp''@;'; put 'put ''LHhlKCJuZ1N3aXRjaENhc2UiLCEwKSxmZSgpLHhlKCJuZ1N3aXRjaENhc2UiLCExKSxmZSgpLFJyKCIgIixkLnJlcGxhY2UoIi1GQyIsIiIpLCIgIil9fWZ1bmN0aW9uIFhBdChjLGwpezEmYyYmKGRlKDAsImNsci10b29sdGlwLWNvbnRlbnQiLDc3KSgxLCJzcGFuIiksTGUoMiwiIFRvIHVu''@;'; put 'put ''bG9jayBhbGwgdGFibGVzLCBjb250YWN0IHN1cHBvcnRAZGF0YWNvbnRyb2xsZXIuaW8gIiksaGUoKSgpKX1mdW5jdGlvbiBKQXQoYyxsKXsxJmMmJihsaSgwKSxndCgxLFhBdCwzLDAsImNsci10b29sdGlwLWNvbnRlbnQiLDc2KSxjaSgpKX1mdW5jdGlvbiBRQXQoYyxsKXtpZigxJmMmJihk''@;'; put 'put ''ZSgwLCJjbHItdG9vbHRpcCIpLGd0KDEscUF0LDUsOCwiYnV0dG9uIiw2OSkoMixKQXQsMiwwLCJuZy1jb250YWluZXIiLDQyKSxoZSgpKSwyJmMpe2NvbnN0IGE9bC5uZ1ZhcixkPU9lKCkuJGltcGxpY2l0O2ZlKCkseGUoIm5nSWYiLGQubGVuZ3RoPjApLGZlKCkseGUoIm5nSWYiLGEpfX1m''@;'; put 'put ''dW5jdGlvbiBla3QoYyxsKXtpZigxJmMmJihkZSgwLCJjbHItdHJlZS1ub2RlIiksZ3QoMSxRQXQsMywyLCJjbHItdG9vbHRpcCIsNjgpLGhlKCkpLDImYyl7Y29uc3QgYT1sLmluZGV4LGQ9T2UoMyk7ZmUoKSx4ZSgibmdWYXIiLGErMT5kLmxpY2VuY2VTdGF0ZS52YWx1ZS50YWJsZXNfaW5f''@;'; put 'put ''bGlicmFyeV9saW1pdCl9fWZ1bmN0aW9uIHRrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci10cmVlLW5vZGUiLDY0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKGgpe3d0KGEpO2NvbnN0IGY9T2UoKS4kaW1wbGljaXQ7cmV0dXJuIEN0KE9lKCkudHJlZU5vZGVDbGlja2VkKGgs''@;'; put 'put ''ZikpfSkscGkoImNsckV4cGFuZGVkQ2hhbmdlIixmdW5jdGlvbihoKXt3dChhKTtjb25zdCBmPU9lKCkuJGltcGxpY2l0O3JldHVybiB2aShmLmV4cGFuZGVkLGgpfHwoZi5leHBhbmRlZD1oKSxDdChoKX0pLGRlKDEsInAiLDY1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3Qg''@;'; put 'put ''aD1PZSgpLiRpbXBsaWNpdCxmPU9lKCk7cmV0dXJuIGYubGliPWguTElCUkFSWVJFRixDdChmLmxpYnJhcnlPbkNsaWNrKGguTElCUkFSWVJFRixoKSl9KSxHdCgyLCJjbHItaWNvbiIsNjYpLExlKDMpLGhlKCksZ3QoNCxHQXQsNiw0LCJjbHItdHJlZS1ub2RlIiw3KSg1LGVrdCwyLDEsImNs''@;'; put 'put ''ci10cmVlLW5vZGUiLDgpLGhlKCl9aWYoMiZjKXtjb25zdCBhPU9lKCkuJGltcGxpY2l0O3hyKCJjbHItZXhwYW5kZWQiLGEuZXhwYW5kZWQpLGZpKCJjbHJFeHBhbmRlZCIsYS5leHBhbmRlZCkseGUoImNsckxvYWRpbmciLGEubG9hZGluZ1RhYmxlcyYmIWEudGFibGVzKSxmZSgzKSxScigi''@;'; put 'put ''ICIsYS5MSUJSQVJZTkFNRSwiICIpLGZlKCkseGUoIm5nSWYiLGEudGFibGVzKSxmZSgpLHhlKCJuZ0Zvck9mIixhLnRhYmxlcyl9fWZ1bmN0aW9uIG5rdChjLGwpe2lmKDEmYyYmKGxpKDApLGd0KDEsdGt0LDYsNywiY2xyLXRyZWUtbm9kZSIsNjMpLGNpKCkpLDImYyl7Y29uc3QgYT1sLiRp''@;'; put 'put ''bXBsaWNpdDtmZSgpLHhlKCJuZ0lmIiwhYS5oaWRkZW4mJmEuaW5Gb3JlZ3JvdW5kKX19ZnVuY3Rpb24gcmt0KGMsbCl7MSZjJiYoZGUoMCwiZGl2Iiw3OCkoMSwic3BhbiIsNzkpLExlKDIsIiBMb2FkaW5nLi4uICIpLGhlKCkoKSl9ZnVuY3Rpb24gaWt0KGMsbCl7aWYoMSZjKXtjb25zdCBh''@;'; put 'put ''PU9uKCk7ZGUoMCwiZGl2Iiw4MCkoMSwiZGl2Iiw4MSkoMiwiZGl2Iiw4MikoMywiZGl2Iiw4MykoNCwiYnV0dG9uIiw4NCksR3QoNSwiY2xyLWljb24iLDg1KSxoZSgpLGRlKDYsImgzIiw0NyksTGUoNywiRXJyb3IiKSxoZSgpKCksZGUoOCwiZGl2IiwxNSkoOSwicCIpLExlKDEwLCJZb3Ug''@;'; put 'put ''Y2Fubm90IHN1Ym1pdCBlbXB0eSBjbGF1c2VzIiksaGUoKSgpLGRlKDExLCJkaXYiLDI2KSgxMiwiYnV0dG9uIiw4NiksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSgpLm51bGxWYXJpYWJsZXM9ITEpfSksTGUoMTMsIiBPayAiKSxoZSgpKCkoKSgpKCl9fWZ1bmN0''@;'; put 'put ''aW9uIG9rdChjLGwpezEmYyYmR3QoMCwiZGl2Iiw4Nyl9ZnVuY3Rpb24gYWt0KGMsbCl7MSZjJiZHdCgwLCJhcHAtcXVlcnkiLG51bGwsMyl9ZnVuY3Rpb24gc2t0KGMsbCl7MSZjJiYoZGUoMCwiZGl2Iiw4OCkoMSwic3BhbiIsODkpLExlKDIsIiBMb2FkaW5nLi4uICIpLGhlKCksZGUoMywi''@;'; put 'put ''ZGl2Iiw5MCkoNCwicCIsOTEpLExlKDUsIkxvYWRpbmcgVGFibGUgVmlld2VyIiksaGUoKSgpKCkpfWZ1bmN0aW9uIGxrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci1pY29uIiwxMTUpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXt3dChhKSxPZSgpO2NvbnN0IGg9dm8oNSk7''@;'; put 'put ''cmV0dXJuIEN0KE9lKDIpLnNlYXJjaFRhYmxlKGgpKX0pLGhlKCl9fWZ1bmN0aW9uIGNrdChjLGwpezEmYyYmKGRlKDAsInNwYW4iLDExNiksTGUoMSwiIExvYWRpbmcuLi4gIiksaGUoKSl9ZnVuY3Rpb24gdWt0KGMsbCl7MSZjJiZHdCgwLCJjbHItaWNvbiIsMTE3KX1mdW5jdGlvbiBka3Qo''@;'; put 'put ''YyxsKXtpZigxJmMmJihkZSgwLCJzcGFuIiwxMTgpLExlKDEpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgzKTtmZSgpLFJyKCIgIixudWxsPT1hLnRhYmxlVGl0bGU/bnVsbDphLnRhYmxlVGl0bGUucmVwbGFjZSgiLUZDIiwiIiksIiAiKX19ZnVuY3Rpb24gaGt0KGMsbCl7aWYoMSZjJiYoZGUo''@;'; put 'put ''MCwiY2xyLXRvb2x0aXAtY29udGVudCIsMTIwKSxMZSgxKSxoZSgpKSwyJmMpe2NvbnN0IGE9T2UoNCk7ZmUoKSxScigiICIsYS5kc05vdGUsIiAiKX19ZnVuY3Rpb24gZmt0KGMsbCl7MSZjJiYobGkoMCksZ3QoMSxoa3QsMiwxLCJjbHItdG9vbHRpcC1jb250ZW50IiwxMTkpLGNpKCkpfWZ1''@;'; put 'put ''bmN0aW9uIHBrdChjLGwpe2lmKDEmYyYmKGRlKDAsInNwYW4iKSxMZSgxKSxxcygyLCJ0aG91c2FuZFNlcGFyYXRvciIpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSg0KTtmZSgpLGpJKCIgKCIsQjgoMiw0LGEubnVtYmVyT2ZSb3dzLCIsIiksIiAiLDE9PT1hLm51bWJlck9mUm93cz8icm93Ijoi''@;'; put 'put ''cm93cyIsIiwgIixhLmZpbHRlckNvbHMubGVuZ3RoLCIiLDE9PT1hLmZpbHRlckNvbHMubGVuZ3RoPyIgY29sIjoiIGNvbHMiLCIpICIpfX1mdW5jdGlvbiBna3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtsaSgwKSxndCgxLHBrdCwzLDcsInNwYW4iLDQyKSxkZSgyLCJjbHItaWNvbiIs''@;'; put 'put ''MTIxKSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDMpLnJlbG9hZFRhYmxlRGF0YSgpKX0pLGhlKCksY2koKX1pZigyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoKSx4ZSgibmdJZiIsbnVsbCE9PWEubnVtYmVyT2ZSb3dzKX19ZnVuY3Rpb24gbWt0KGMsbCl7aWYoMSZj''@;'; put 'put ''KXtjb25zdCBhPU9uKCk7ZGUoMCwiZGl2IiwxMjcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoNSkuZWRpdFRhYmxlKCkpfSksR3QoMSwiY2xyLWljb24iLDEzMyksZGUoMiwic3BhbiIpLExlKDMsIkVkaXQiKSxoZSgpKCl9fWZ1bmN0aW9uIHZrdChjLGwpe2lm''@;'; put 'put ''KDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImRpdiIsMTI3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDUpLmdvVG9MaW5lYWdlKCkpfSksR3QoMSwiY2xyLWljb24iLDEzNCksZGUoMiwic3BhbiIpLExlKDMsIkxpbmVhZ2UiKSxoZSgpKCl9fWZ1bmN0aW9uIGJr''@;'; put 'put ''dChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsImNsci1kcm9wZG93bi1tZW51IiwxMjYpKDEsImRpdiIsMTI3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDQpLm5ld1ZpZXdib3goKSl9KSxHdCgyLCJjbHItaWNvbiIsMTI4KSxkZSgzLCJzcGFuIiks''@;'; put 'put ''TGUoNCwiVmlld2JveGVzIiksaGUoKSgpLGd0KDUsbWt0LDQsMCwiZGl2IiwxMjkpKDYsdmt0LDQsMCwiZGl2IiwxMjkpLGRlKDcsImRpdiIsMTI3KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGEpLEN0KE9lKDQpLm9wZW5RYigpKX0pLEd0KDgsImNsci1pY29uIiwxMzApLGRl''@;'; put 'put ''KDksInNwYW4iKSxMZSgxMCwiRmlsdGVyIiksaGUoKSgpLGRlKDExLCJkaXYiLDEyNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSg0KS5vcGVuRG93bmxvYWQ9ITApfSksR3QoMTIsImNsci1pY29uIiwxMzEpLGRlKDEzLCJzcGFuIiksTGUoMTQsIkRvd25sb2Fk''@;'; put 'put ''IiksaGUoKSgpLGRlKDE1LCJkaXYiLDEyNyksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSg0KS5zaG93V2ViUXVlcnkoKSl9KSxHdCgxNiwiY2xyLWljb24iLDEzMiksZGUoMTcsInNwYW4iKSxMZSgxOCwiV2ViIFF1ZXJ5IFVSTCIpLGhlKCkoKSgpfWlmKDImYyl7''@;'; put 'put ''Y29uc3QgYT1PZSg0KTtmZSg1KSx4ZSgibmdJZiIsYS50YWJsZUVkaXRFeGlzdHMoKSksZmUoKSx4ZSgibmdJZiIsYS50YWJsZXVyaSl9fWZ1bmN0aW9uIHlrdChjLGwpezEmYyYmKGRlKDAsImNsci1kcm9wZG93biIsMTIyKSgxLCJidXR0b24iLDEyMyksR3QoMiwiY2xyLWljb24iLDEyNCks''@;'; put 'put ''TGUoMywiIG9wdGlvbnMgIiksaGUoKSxndCg0LGJrdCwxOSwyLCJjbHItZHJvcGRvd24tbWVudSIsMTI1KSxoZSgpKSwyJmMmJnhlKCJjbHJDbG9zZU1lbnVPbkl0ZW1DbGljayIsITApfWZ1bmN0aW9uIF9rdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTM1KSgxLCJzcGFuIiksTGUoMiwi''@;'; put 'put ''RklMVEVSIDogIiksZGUoMywiYiIpLExlKDQpLGhlKCkoKSgpKSwyJmMpe2NvbnN0IGE9T2UoMyk7ZmUoNCksX3IoYS5xdWVyeVRleHQpfX1mdW5jdGlvbiB3a3QoYyxsKXtpZigxJmMpe2NvbnN0IGE9T24oKTtkZSgwLCJkaXYiLDk4KSgxLCJzZWN0aW9uIiw5OSkoMiwiZm9ybSIsMTAwKSgz''@;'; put 'put ''LCJkaXYiLDEwMSkoNCwiaW5wdXQiLDEwMiw0KSxGdCgia2V5dXAuZW50ZXIiLGZ1bmN0aW9uKCl7d3QoYSk7Y29uc3QgaD12byg1KTtyZXR1cm4gQ3QoT2UoMikuc2VhcmNoVGFibGUoaCkpfSksaGUoKSxndCg2LGxrdCwxLDAsImNsci1pY29uIiwxMDMpKDcsY2t0LDIsMCwic3BhbiIsMTA0''@;'; put 'put ''KSxoZSgpLGRlKDgsImNsci1jaGVja2JveC1jb250YWluZXIiKSg5LCJjbHItY2hlY2tib3gtd3JhcHBlciIpKDEwLCJpbnB1dCIsMTA1KSxwaSgibmdNb2RlbENoYW5nZSIsZnVuY3Rpb24oaCl7d3QoYSk7Y29uc3QgZj1PZSgyKTtyZXR1cm4gdmkoZi5zZWFyY2hOdW1lcmljLGgpfHwoZi5z''@;'; put 'put ''ZWFyY2hOdW1lcmljPWgpLEN0KGgpfSksaGUoKSxkZSgxMSwibGFiZWwiKSxMZSgxMiwiTnVtZXJpYyIpLGhlKCkoKSgpKCkoKSxkZSgxMywiZGl2IiwxMDYpKDE0LCJwIiwxMDcpKDE1LCJjbHItdG9vbHRpcCIsMTA4KSgxNiwiY2xyLWljb24iLDEwOSksRnQoImNsaWNrIixmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiB3dChhKSxDdChPZSgyKS5kYXRhc2V0SW5mbz0hMCl9KSxoZSgpLGd0KDE3LHVrdCwxLDAsImNsci1pY29uIiwxMTApKDE4LGRrdCwyLDEsInNwYW4iLDExMSkoMTksZmt0LDIsMCwibmctY29udGFpbmVyIiw0MiksaGUoKSxndCgyMCxna3QsMywxLCJuZy1jb250YWluZXIiLDQy''@;'; put 'put ''KSxoZSgpKCksZGUoMjEsImRpdiIsMTEyKSxndCgyMix5a3QsNSwxLCJjbHItZHJvcGRvd24iLDExMyksaGUoKSxndCgyMyxfa3QsNSwxLCJkaXYiLDExNCksaGUoKX1pZigyJmMpe2NvbnN0IGE9T2UoMik7ZmUoNCkseGUoInR5cGUiLGEuc2VhcmNoTnVtZXJpYz8ibnVtYmVyIjoidGV4dCIp''@;'; put 'put ''LGZlKDIpLHhlKCJuZ0lmIiwhYS5zZWFyY2hMb2FkaW5nKSxmZSgpLHhlKCJuZ0lmIixhLnNlYXJjaExvYWRpbmcpLGZlKDMpLGZpKCJuZ01vZGVsIixhLnNlYXJjaE51bWVyaWMpLGZlKDcpLHhlKCJuZ0lmIixudWxsPT1hLnRhYmxlVGl0bGU/bnVsbDphLnRhYmxlVGl0bGUuaW5jbHVkZXMo''@;'; put 'put ''Ii1GQyIpKSxmZSgpLHhlKCJuZ0lmIixhLnRhYmxlVGl0bGUmJmEudGFibGVUaXRsZS5sZW5ndGg+MCksZmUoKSx4ZSgibmdJZiIsYS5kc05vdGUmJmEuZHNOb3RlLmxlbmd0aD4wKSxmZSgpLHhlKCJuZ0lmIixhLnRhYmxlVGl0bGUmJmEudGFibGVUaXRsZS5sZW5ndGg+MCksZmUoMikseGUo''@;'; put 'put ''Im5nSWYiLGEudGFibGVUaXRsZSYmIWEuYWJvcnRBY3RpdmUpLGZlKCkseGUoIm5nSWYiLCIxPTEiIT09YS5xdWVyeVRleHQmJiFXcygxMCxCQXQpLmluY2x1ZGVzKGEucXVlcnlUZXh0KSYmIWEuYWJvcnRBY3RpdmUpfX1mdW5jdGlvbiBDa3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDEzNiks''@;'; put 'put ''R3QoMSwiaW1nIiwxMzcpLGRlKDIsImgzIiwxMzgpLExlKDMsIiBQbGVhc2Ugc2VsZWN0IGEgbGlicmFyeSAiKSxoZSgpKCkpfWZ1bmN0aW9uIFNrdChjLGwpezEmYyYmR3QoMCwiY2xyLXNwaW5uZXIiLDU1KX1mdW5jdGlvbiBNa3QoYyxsKXsxJmMmJihkZSgwLCJkaXYiLDE0NSksR3QoMSwi''@;'; put 'put ''aW1nIiwxNDYpLGRlKDIsInAiLDEzOCksTGUoMywiIFBsZWFzZSBzZWxlY3QgYSB0YWJsZSAiKSxoZSgpKCkpfWZ1bmN0aW9uIHhrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2RlKDAsInAiLDE0OSksTGUoMSwiIE5vIGxpYnJhcnkgaW5mbyBmb3VuZC4gQ2xpY2sgIiksZGUoMiwiY2xy''@;'; put 'put ''LWljb24iLDE1MCksRnQoImNsaWNrIixmdW5jdGlvbigpe3JldHVybiB3dChhKSxDdChPZSg0KS5yZWxvYWRMaWJJbmZvKCkpfSksaGUoKSxMZSgzLCIgYnV0dG9uIHRvIHJlZnJlc2guICIpLGhlKCl9fWZ1bmN0aW9uIEVrdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDE1MSks''@;'; put 'put ''TGUoMiwiRU5HSU5FOiIpLGhlKCksZGUoMywidGQiLDE1MiksTGUoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoNSk7ZmUoNCksUnIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uRU5HSU5FOiIiLCIgIil9fWZ1bmN0aW9uIFRrdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwi''@;'; put 'put ''dGQiLDE1MSksTGUoMiwiTElCSUQ6IiksaGUoKSxkZSgzLCJ0ZCIsMTUyKSxMZSg0KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSg1KTtmZSg0KSxScigiICIsYS5saWJpbmZvWzBdP2EubGliaW5mb1swXS5MSUJJRDoiIiwiICIpfX1mdW5jdGlvbiBBa3QoYyxsKXtpZigxJmMmJihkZSgwLCJ0''@;'; put 'put ''ciIpKDEsInRkIiwxNTEpLExlKDIsIkxJQk5BTUU6IiksaGUoKSxkZSgzLCJ0ZCIsMTUyKSxMZSg0KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSg1KTtmZSg0KSxScigiICIsYS5saWJpbmZvWzBdP2EubGliaW5mb1swXS5MSUJOQU1FOiIiLCIgIil9fWZ1bmN0aW9uIGtrdChjLGwpe2lmKDEm''@;'; put 'put ''YyYmKGRlKDAsInRyIikoMSwidGQiLDE1MSksTGUoMiwiTElCU0laRToiKSxoZSgpLGRlKDMsInRkIiwxNTIpLExlKDQpLHFzKDUsImNvbnZlcnRTaXplIiksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoNSk7ZmUoNCksUnIoIiAiLGEubGliaW5mb1swXT9rYyg1LDEsYS5saWJpbmZvWzBdLkxJ''@;'; put 'put ''QlNJWkUpOiIiLCIgIil9fWZ1bmN0aW9uIERrdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDE1MSksTGUoMiwiT1dORVJTOiIpLGhlKCksZGUoMywidGQiLDE1MiksTGUoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoNSk7ZmUoNCksUnIoIiAiLGEubGliaW5mb1swXT9hLmxp''@;'; put 'put ''YmluZm9bMF0uT1dORVJTOiIiLCIgIil9fWZ1bmN0aW9uIElrdChjLGwpe2lmKDEmYyYmKGRlKDAsInRyIikoMSwidGQiLDE1MSksTGUoMiwiUEFUSFM6IiksaGUoKSxkZSgzLCJ0ZCIsMTUyKSxMZSg0KSxoZSgpKCkpLDImYyl7Y29uc3QgYT1PZSg1KTtmZSg0KSxScigiICIsYS5saWJpbmZv''@;'; put 'put ''WzBdP2EubGliaW5mb1swXS5QQVRIUzoiIiwiICIpfX1mdW5jdGlvbiBSa3QoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwxNTEpLExlKDIsIlBFUk1TOiIpLGhlKCksZGUoMywidGQiLDE1MiksTGUoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoNSk7ZmUoNCksUnIoIiAiLGEu''@;'; put 'put ''bGliaW5mb1swXT9hLmxpYmluZm9bMF0uUEVSTVM6IiIsIiAiKX19ZnVuY3Rpb24gTGt0KGMsbCl7aWYoMSZjJiYoZGUoMCwidHIiKSgxLCJ0ZCIsMTUxKSxMZSgyLCJTQ0hFTUFTOiIpLGhlKCksZGUoMywidGQiLDE1MiksTGUoNCksaGUoKSgpKSwyJmMpe2NvbnN0IGE9T2UoNSk7ZmUoNCks''@;'; put 'put ''UnIoIiAiLGEubGliaW5mb1swXT9hLmxpYmluZm9bMF0uU0NIRU1BUzoiIiwiICIpfX1mdW5jdGlvbiBPa3QoYyxsKXtpZigxJmMmJihkZSgwLCJ0ciIpKDEsInRkIiwxNTEpLExlKDIsIlRBQkxFX0NOVDoiKSxoZSgpLGRlKDMsInRkIiwxNTIpLExlKDQpLGhlKCkoKSksMiZjKXtjb25zdCBh''@;'; put 'put ''PU9lKDUpO2ZlKDQpLFJyKCIgIixhLmxpYmluZm9bMF0/YS5saWJpbmZvWzBdLlRBQkxFX0NOVDoiIiwiICIpfX1mdW5jdGlvbiBQa3QoYyxsKXtpZigxJmMmJihsaSgwKSxkZSgxLCJ0YWJsZSIpLGd0KDIsRWt0LDUsMSwidHIiLDQyKSgzLFRrdCw1LDEsInRyIiw0MikoNCxBa3QsNSwxLCJ0''@;'; put 'put ''ciIsNDIpKDUsa2t0LDYsMywidHIiLDQyKSg2LERrdCw1LDEsInRyIiw0MikoNyxJa3QsNSwxLCJ0ciIsNDIpKDgsUmt0LDUsMSwidHIiLDQyKSg5LExrdCw1LDEsInRyIiw0MikoMTAsT2t0LDUsMSwidHIiLDQyKSxoZSgpLGNpKCkpLDImYyl7Y29uc3QgYT1PZSg0KTtmZSgyKSx4ZSgibmdJ''@;'; put 'put ''ZiIsIiIhPT1hLmxpYmluZm9bMF0uRU5HSU5FKSxmZSgpLHhlKCJuZ0lmIiwiIiE9PWEubGliaW5mb1swXS5MSUJJRCksZmUoKSx4ZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uTElCTkFNRSksZmUoKSx4ZSgibmdJZiIsbnVsbCE9PWEubGliaW5mb1swXS5MSUJTSVpFKSxmZSgpLHhlKCJu''@;'; put 'put ''Z0lmIiwiIiE9PWEubGliaW5mb1swXS5PV05FUlMpLGZlKCkseGUoIm5nSWYiLCIiIT09YS5saWJpbmZvWzBdLlBBVEhTKSxmZSgpLHhlKCJuZ0lmIiwiIiE9PWEubGliaW5mb1swXS5QRVJNUyksZmUoKSx4ZSgibmdJZiIsIiIhPT1hLmxpYmluZm9bMF0uU0NIRU1BUyksZmUoKSx4ZSgibmdJ''@;'; put 'put ''ZiIsbnVsbCE9PWEubGliaW5mb1swXS5UQUJMRV9DTlQpfX1mdW5jdGlvbiBGa3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDE0NyksZ3QoMSx4a3QsNCwwLCJwIiwxNDgpKDIsUGt0LDExLDksIm5nLWNvbnRhaW5lciIsNDIpLGhlKCkpLDImYyl7Y29uc3QgYT1PZSgzKTtmZSgpLHhlKCJu''@;'; put 'put ''Z0lmIixhLmxpYmluZm8ubGVuZ3RoPDEpLGZlKCkseGUoIm5nSWYiLGEubGliaW5mby5sZW5ndGg+MCl9fWZ1bmN0aW9uIEhrdChjLGwpe2lmKDEmYyl7Y29uc3QgYT1PbigpO2xpKDApLGRlKDEsImRpdiIsMTM5KSxHdCgyLCJzZWN0aW9uIiw5OSksZGUoMywiZGl2IiwxNDApKDQsInAiLDkx''@;'; put 'put ''KSxMZSg1KSxoZSgpLGRlKDYsImNsci1pY29uIiwxMjEpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoYSksQ3QoT2UoMikucmVsb2FkTGliSW5mbygpKX0pLGhlKCkoKSxHdCg3LCJkaXYiLDExMiksaGUoKSxkZSg4LCJkaXYiLDE0MSksZ3QoOSxTa3QsMSwwLCJjbHItc3Bpbm5l''@;'; put 'put ''ciIsMTQyKSxoZSgpLGd0KDEwLE1rdCw0LDAsImRpdiIsMTQzKSgxMSxGa3QsMywyLCJkaXYiLDE0NCksY2koKX1pZigyJmMpe2NvbnN0IGE9T2UoMik7ZmUoNSksUnIoIiAiLGEubGliLCIgIiksZmUoNCkseGUoIm5nSWYiLG51bGw9PT1hLmxpYmluZm8pLGZlKCkseGUoIm5nSWYiLG51bGwh''@;'; put 'put ''PT1hLmxpYmluZm8pLGZlKCkseGUoIm5nSWYiLG51bGwhPT1hLmxpYmluZm8pfX1mdW5jdGlvbiBOa3QoYyxsKXsxJmMmJihkZSgwLCJoMyIsMTU2KSxMZSgxLCIgTm8gZGF0YSBmb3VuZCB3aXRoIGdpdmVuIGNvbmRpdGlvbnMgIiksaGUoKSl9ZnVuY3Rpb24gVmt0KGMsbCl7MSZjJiYoZGUo''@;'; put 'put ''MCwiaDMiLDE1NiksTGUoMSwiIE5vIGRhdGEgZm91bmQgZHVlIHRvIHNhcyByZXF1ZXN0IGVycm9yICIpLGhlKCkpfWZ1bmN0aW9uIEJrdChjLGwpe2lmKDEmYyYmKGRlKDAsImRpdiIsMTUzKSxHdCgxLCJjbHItaWNvbiIsMTU0KSxndCgyLE5rdCwyLDAsImgzIiwxNTUpKDMsVmt0LDIsMCwi''@;'; put 'put ''aDMiLDE1NSksaGUoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKDIpLHhlKCJuZ0lmIixhLm5vRGF0YSksZmUoKSx4ZSgibmdJZiIsYS5ub0RhdGFSZXFFcnIpfX1mdW5jdGlvbiBqa3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDE1NyksR3QoMSwiaG90LXRhYmxlIiwxNTgpLGhlKCkpLDIm''@;'; put 'put ''Yyl7Y29uc3QgYT1PZSgyKTtmZSgpLHhlKCJtdWx0aUNvbHVtblNvcnRpbmciLCEwKSgidmlld3BvcnRSb3dSZW5kZXJpbmdPZmZzZXQiLDUwKSgiZGF0YSIsYS5ob3RUYWJsZS5kYXRhKSgiY29sSGVhZGVycyIsYS5ob3RUYWJsZS5jb2xIZWFkZXJzKSgiY29sdW1ucyIsYS5ob3RUYWJsZS5j''@;'; put 'put ''b2x1bW5zKSgiY29weVBhc3RlIixhLmhvdFRhYmxlLmNvcHlQYXN0ZSkoImNvbnRleHRNZW51IixhLmhvdFRhYmxlLmNvbnRleHRNZW51KSgiZmlsdGVycyIsITApKCJkcm9wZG93bk1lbnUiLGEuaG90VGFibGUuZHJvcGRvd25NZW51KSgiaGVpZ2h0IixhLmhvdFRhYmxlLmhlaWdodCkoIm1v''@;'; put 'put ''ZGlmeUNvbFdpZHRoIixhLm1heFdpZHRoQ2hla2VyKSgiY2VsbHMiLGEuaG90VGFibGUuY2VsbHMpKCJtYXhSb3dzIixhLmhvdFRhYmxlLm1heFJvd3MpKCJtYW51YWxDb2x1bW5SZXNpemUiLCEwKSgiYWZ0ZXJHZXRDb2xIZWFkZXIiLGEuaG90VGFibGUuYWZ0ZXJHZXRDb2xIZWFkZXIpKCJy''@;'; put 'put ''b3dIZWFkZXJzIixhLmhvdFRhYmxlLnJvd0hlYWRlcnMpKCJyb3dIZWFkZXJXaWR0aCIsYS5ob3RUYWJsZS5yb3dIZWFkZXJXaWR0aCkoInJvd0hlaWdodHMiLGEuaG90VGFibGUucm93SGVpZ2h0cykoImxpY2Vuc2VLZXkiLGEuaG90VGFibGUubGljZW5zZUtleSl9fWZ1bmN0aW9uIHprdChj''@;'; put 'put ''LGwpe2lmKDEmYyYmKGRlKDAsInAiLDE1OSksTGUoMSksR3QoMiwiY29udGFjdC1saW5rIiksaGUoKSksMiZjKXtjb25zdCBhPU9lKDIpO2ZlKCksUnIoIiBUbyBkaXNwbGF5IG1vcmUgdGhhbiAiLGEubGljZW5jZVN0YXRlLnZhbHVlLnZpZXdlcl9yb3dzX2FsbG93ZWQsIiByb3dzLCBjb250''@;'; put 'put ''YWN0ICIpfX1mdW5jdGlvbiBVa3QoYyxsKXtpZigxJmMmJihkZSgwLCJkaXYiLDkyKSxndCgxLHdrdCwyNCwxMSwiZGl2Iiw5MykoMixDa3QsNCwwLCJkaXYiLDk0KSgzLEhrdCwxMiw0LCJuZy1jb250YWluZXIiLDQyKSg0LEJrdCw0LDIsImRpdiIsOTUpKDUsamt0LDIsMTksImRpdiIsOTYp''@;'; put 'put ''LGRlKDYsImRpdiIpLGd0KDcsemt0LDMsMSwicCIsOTcpLGhlKCkoKSksMiZjKXtjb25zdCBhPU9lKCk7ZmUoKSx4ZSgibmdJZiIsYS50YWJsZSksZmUoKSx4ZSgibmdJZiIsIShhLmxpYnx8YS50YWJsZXx8YS5ub0RhdGFSZXFFcnJ8fGEubm9EYXRhKSksZmUoKSx4ZSgibmdJZiIsIWEubm9E''@;'; put 'put ''YXRhJiYhYS5ub0RhdGFSZXFFcnImJiFhLnRhYmxlJiZhLmxpYiksZmUoKSx4ZSgibmdJZiIsYS5ub0RhdGF8fGEubm9EYXRhUmVxRXJyKSxmZSgpLHhlKCJuZ0lmIiwhYS5ub0RhdGEmJiFhLm5vRGF0YVJlcUVyciYmYS50YWJsZSksZmUoMikseGUoIm5nSWYiLGEubGljZW5jZVN0YXRlLnZh''@;'; put 'put ''bHVlLnZpZXdlcl9yb3dzX2FsbG93ZWQhPT1hLkluZmluaXR5JiZhLmhvdFRhYmxlLmRhdGEmJmEuaG90VGFibGUuZGF0YS5sZW5ndGg+YS5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3NfYWxsb3dlZCl9fWxldCBSTj0oKCk9PntjbGFzcyBje2NvbnN0cnVjdG9yKGEsZCxoLGYsdixN''@;'; put 'put ''LEQsWixuZSxjZSl7dGhpcy5saWNlbmNlU2VydmljZT1hLHRoaXMuc2FzU3RvcmVTZXJ2aWNlPWQsdGhpcy5zYXNTZXJ2aWNlPWgsdGhpcy5yb3V0ZXI9Zix0aGlzLnJvdXRlPXYsdGhpcy5ldmVudFNlcnZpY2U9TSx0aGlzLmxvZ2dlclNlcnZpY2U9RCx0aGlzLmhlbHBlclNlcnZpY2U9Wix0''@;'; put 'put ''aGlzLmxvY2F0aW9uPW5lLHRoaXMuY2RmPWNlLHRoaXMucXVlcnlGaWx0ZXJDb21wTGlzdD1uZXcgZmQsdGhpcy5saWJyYXJpZXNQYWdpbmc9ITEsdGhpcy5saWJyYXJpZXNTZWFyY2g9IiIsdGhpcy5saWJyYXJ5VGFibGVzUmVmPSIiLHRoaXMubGlicmFyaWVzVHJlZUV4cGFuZGVkPSExLHRo''@;'; put 'put ''aXMubGliaW5mbz1udWxsLHRoaXMudGFibGV1cmk9bnVsbCx0aGlzLmZpbHRlcj0hMSx0aGlzLmZpbHRlckNvbHM9W10sdGhpcy5udWxsVmFyaWFibGVzPSExLHRoaXMuYWJvcnRBY3RpdmU9ITEsdGhpcy51cmxGaWx0ZXJQaz1udWxsLHRoaXMucXVlcnlUZXh0PSIiLHRoaXMud2ViUXVlcnlU''@;'; put 'put ''ZXh0PSIiLHRoaXMucXVlcnlFcnI9ITEsdGhpcy50YWJsZUZsYWc9ITAsdGhpcy5saWJyYXJpZXNMb2FkaW5nPSExLHRoaXMubG9hZGluZ1RhYmxlVmlldz0hMSx0aGlzLnN3aXRjaEZsYWc9ITEsdGhpcy5ub0RhdGE9ITEsdGhpcy5ub0RhdGFSZXFFcnI9ITEsdGhpcy50YWJsZURpc2FibGU9''@;'; put 'put ''ITEsdGhpcy5hY3Rpb25EaXNhYmxlPSExLHRoaXMub3BlbkRvd25sb2FkPSExLHRoaXMud2ViUXVlcnk9ITEsdGhpcy53ZWJRdWVyeVRhYj0hMSx0aGlzLmRvd25sb2FkRm9ybWF0PSJDU1YiLHRoaXMuc2FzanNDb25maWc9bmV3IGZoLlNBU2pzQ29uZmlnLHRoaXMuc2VhcmNoTG9hZGluZz0h''@;'; put 'put ''MSx0aGlzLnNlYXJjaE51bWVyaWM9ITEsdGhpcy5udW1iZXJPZlJvd3M9bnVsbCx0aGlzLmhlYWRlclBrcz1bXSx0aGlzLiRkYXRhRm9ybWF0cz1udWxsLHRoaXMuZGF0YXNldEluZm89ITEsdGhpcy5kc21ldGE9W10sdGhpcy52ZXJzaW9ucz1bXSx0aGlzLmRzTm90ZT0iIix0aGlzLmxpY2Vu''@;'; put 'put ''Y2VTdGF0ZT10aGlzLmxpY2VuY2VTZXJ2aWNlLmxpY2VuY2VTdGF0ZSx0aGlzLkluZmluaXR5PTEvMCx0aGlzLmhvdFRhYmxlPXtkYXRhOltdLGNvbEhlYWRlcnM6W10sY29sdW1uczpbXSxoZWlnaHQ6IjEwMCUiLG1heFJvd3M6dGhpcy5saWNlbmNlU3RhdGUudmFsdWUudmlld2VyX3Jvd3Nf''@;'; put 'put ''YWxsb3dlZHx8MS8wLHNldHRpbmdzOnt9LGxpY2Vuc2VLZXk6dm9pZCAwLHJvd0hlYWRlcnM6YmU9PiIgIixhZnRlckdldENvbEhlYWRlcjooYmUsRWUsQmUpPT57RWUuY2xhc3NMaXN0LmFkZChLbi5oYW5kc29udGFibGUuZGFya1RhYmxlSGVhZGVyQ2xhc3MpfSxyb3dIZWFkZXJXaWR0aDox''@;'; put 'put ''NSxyb3dIZWlnaHRzOjIwLGNvbnRleHRNZW51OlsiY29weV93aXRoX2NvbHVtbl9oZWFkZXJzIiwiY29weV9jb2x1bW5faGVhZGVyc19vbmx5Il0sY29weVBhc3RlOntjb3B5Q29sdW1uSGVhZGVyczohMCxjb3B5Q29sdW1uSGVhZGVyc09ubHk6ITB9LGRyb3Bkb3duTWVudTp7aXRlbXM6e21h''@;'; put 'put ''a2VfcmVhZF9vbmx5OntuYW1lOiJtYWtlX3JlYWRfb25seSJ9LGFsaWdubWVudDp7bmFtZToiYWxpZ25tZW50In0sc3AxOntuYW1lOiItLS0tLS0tLS0ifSxpbmZvOntuYW1lOiJ0ZXN0IGluZm8iLHJlbmRlcmVyOihiZSxFZSxCZSxxZSxudCxsdCk9Pntjb25zdCBtdD1kb2N1bWVudC5jcmVh''@;'; put 'put ''dGVFbGVtZW50KCJzcGFuIik7bGV0IEp0LHluPSJObyBpbmZvIGZvdW5kIjtpZih0aGlzLmhvdEluc3RhbmNlKXtjb25zdCBDbj10aGlzLmhvdEluc3RhbmNlLmdldFNlbGVjdGVkKCl8fFtdLHRuPUNuP0NuWzBdWzFdOi0xLHhuPXRoaXMuaG90SW5zdGFuY2U/LmNvbFRvUHJvcCh0bik7SnQ9''@;'; put 'put ''dGhpcy4kZGF0YUZvcm1hdHM/LnZhcnNbeG5dLEp0JiYoeW49YExBQkVMOiAke0p0Py5sYWJlbH08YnI+VFlQRTogJHtKdD8udHlwZX08YnI+TEVOR1RIOiAke0p0Py5sZW5ndGh9PGJyPkZPUk1BVDogJHtKdD8uZm9ybWF0fWApfXJldHVybiBtdC5pbm5lckhUTUw9eW4sbXR9fX19fSx0aGlz''@;'; put 'put ''LmhvdEluc3RhbmNlPW51bGwsdGhpcy5ob3RJbnN0YW5jZUNsaWNrTGlzdGVuZXI9ITEsdGhpcy52aWV3Ym94T3Blbj0hMSx0aGlzLmhvdFRhYmxlUmVnaXN0ZXJlcj1uZXcgWm0sdGhpcy5zYXNqc0NvbmZpZz10aGlzLnNhc1NlcnZpY2UuZ2V0U2FzanNDb25maWcoKX1uZ09uSW5pdCgpeyIi''@;'; put 'put ''IT09S24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb24mJjA9PT1PYmplY3Qua2V5cyh0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcykubGVuZ3RoJiZ0aGlzLnJvdXRlci5uYXZpZ2F0ZShbS24udmlld2VyLmN1cnJlbnRTZWxlY3Rpb25dLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9''@;'; put 'put ''KSx2b2lkIDAhPT10aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5saWJNZW0mJihLbi52aWV3ZXIuY3VycmVudFNlbGVjdGlvbj0idmlldy9kYXRhIiksdGhpcy5saWNlbmNlU2VydmljZS5ob3RfbGljZW5zZV9rZXkuc3Vic2NyaWJlKGE9Pnt0aGlzLmhvdFRhYmxlLmxpY2Vuc2VLZXk9YX0p''@;'; put 'put ''fW5ld1ZpZXdib3goKXt0aGlzLnZpZXdib3hPcGVuPSEwfXJlc2V0RmlsdGVyKCl7dGhpcy5xdWVyeUZpbHRlckNvbXBMaXN0LmZpcnN0JiZ0aGlzLnF1ZXJ5RmlsdGVyQ29tcExpc3QuZmlyc3QucmVzZXRGaWx0ZXIoKX1zZWFyY2hUYWJsZShhKXt2YXIgZD10aGlzO3JldHVybiBlZShmdW5j''@;'; put 'put ''dGlvbiooKXtkLnNlYXJjaExvYWRpbmc9ITA7bGV0IGg9YS52YWx1ZSxmPWQubGliKyIuIitkLnRhYmxlLHY9cGFyc2VJbnQoZC5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWQpfHwwO3lpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnZpZXdEYXRhU2VhcmNoKGgsZC5zZWFyY2hOdW1lcmlj''@;'; put 'put ''LGYsdikudGhlbihNPT57TS5zYXNwYXJhbXN8fE0udmlld0RhdGE/KGQuaG90VGFibGUuZGF0YT1NLnZpZXdkYXRhLGQuJGRhdGFGb3JtYXRzPU0uJHZpZXdkYXRhLGQuZHNtZXRhPU0uZHNtZXRhLGQudmVyc2lvbnM9TS52ZXJzaW9uc3x8W10sZC5zZXREU05vdGUoKSxkLm51bWJlck9mUm93''@;'; put 'put ''cz1NLnNhc3BhcmFtc1swXS5OT0JTLGQucXVlcnlUZXh0PU0uc2FzcGFyYW1zWzBdLkZJTFRFUl9URVhULGQuaGVhZGVyUGtzPU0uc2FzcGFyYW1zWzBdLlBLX0ZJRUxEUy5zcGxpdCgiICIpLDA9PT1kLmhvdFRhYmxlLmRhdGEubGVuZ3RoP2Qubm9EYXRhPSEwOihkLm5vRGF0YT0hMSxkLnRh''@;'; put 'put ''YmxlRmxhZz0hMSxkLnNldHVwSG90KCkpKTpkLnNlYXJjaExvYWRpbmc9ITF9KS5jYXRjaChNPT57ZC5sb2dnZXJTZXJ2aWNlLmVycm9yKE0pfSksZC5zZWFyY2hMb2FkaW5nPSExfSkoKX1yZWxvYWRUYWJsZURhdGEoKXt0aGlzLnZpZXdEYXRhKHRoaXMudXJsRmlsdGVyUGt8fDApfXJlbG9h''@;'; put 'put ''ZExpYkluZm8oKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLmxpYmluZm89bnVsbCxhLnNhc1N0b3JlU2VydmljZS5yZWZyZXNoTGliSW5mbyhhLmxpYikudGhlbihmdW5jdGlvbigpe3ZhciBkPWVlKGZ1bmN0aW9uKihoKXthLmxpYmluZm89aC5saWJpbmZvLEtuLnZpZXdl''@;'; put 'put ''ci5saWJpbmZvPWEubGliaW5mbztjb25zdCBmPWEubGlicmFyaWVzLmZpbmQodj0+di5MSUJSQVJZUkVGPT09YS5saWIpO2YmJihmLmxpYmluZm89YS5saWJpbmZvKX0pO3JldHVybiBmdW5jdGlvbihoKXtyZXR1cm4gZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLGQ9PnthLmxvZ2dlclNl''@;'; put 'put ''cnZpY2UuZXJyb3IoZCksbnVsbD09PWEubGliaW5mbyYmKGEubGliaW5mbz1bXSl9KX0pKCl9ZmlsdGVyRm4oYSl7dGhpcy5saWJyYXJpZXM9dGhpcy5saWJyYXJpZXMuZmlsdGVyKGg9Pi0xIT09aC5MSUJSQVJZTkFNRS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoYS50b0xvY2FsZUxvd2VyQ2Fz''@;'; put 'put ''ZSgpKSl9ZG93bmxvYWREYXRhKCl7bGV0IGE9dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsZD10aGlzLnNhc2pzQ29uZmlnLmFwcExvYztjb25zdCBoPXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7bGV0IEQsZj0iJnR5cGU9Iit0aGlzLmRvd25sb2FkRm9ybWF0LHY9IiZ0''@;'; put 'put ''YWJsZT0iK3RoaXMudGFibGVUaXRsZSxNPSJTQVNWSVlBIj09PXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT9gJl9jb250ZXh0bmFtZT0ke3RoaXMuc2FzanNDb25maWcuY29udGV4dE5hbWV9YDoiIjtEPXR5cGVvZiB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZD4idSI/''@;'; put 'put ''MDpwYXJzZUludCh0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmFtcy5maWx0ZXJJZCksd2luZG93Lm9wZW4oYStoKyIvP19wcm9ncmFtPSIrZCsiL3NlcnZpY2VzL3B1YmxpYy9nZXRyYXdkYXRhIitmK3YrTSsiJmZpbHRlcj0iK0QpLHRoaXMub3BlbkRvd25sb2FkPSExfWRvd25sb2FkRERMKCl7''@;'; put 'put ''bGV0IGE9dGhpcy5saWIsZD10aGlzLnRhYmxlLGg9dGhpcy5kb3dubG9hZEZvcm1hdC5yZXBsYWNlKCJfRERMIiwiIiksZj10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx2PXRoaXMuc2FzanNDb25maWcuYXBwTG9jO2NvbnN0IE09dGhpcy5zYXNTZXJ2aWNlLmdldEV4ZWN1dGlvblBhdGgo''@;'; put 'put ''KTt3aW5kb3cub3BlbihmK00rIi8/X3Byb2dyYW09Iit2KyIvc2VydmljZXMvcHVibGljL2dldGRkbCIrYCZkcz0ke2R9JmxpYnJlZj0ke2F9JmZsYXZvdXI9JHtofSR7IlNBU1ZJWUEiPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlP2AmX2NvbnRleHRuYW1lPSR7dGhpcy5zYXNqc0Nv''@;'; put 'put ''bmZpZy5jb250ZXh0TmFtZX1gOiIifWApLHRoaXMub3BlbkRvd25sb2FkPSExfW9uQ2xpQ29tbWFuZEZvY3VzKGEpe2EucHJldmVudERlZmF1bHQoKSxhLnRhcmdldC5zZWxlY3QoKX1lZGl0VGFibGUoKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvZWRpdG9yLyIrdGhpcy5saWJUYWIp''@;'; put 'put ''fXRhYmxlRWRpdEV4aXN0cygpe2xldCBhPXt9O2E9S24uZWRpdG9yLmxpYnNBbmRUYWJsZXM7bGV0IGQ9dGhpcy5saWJUYWIuc3BsaXQoIi4iKVsxXSxoPXRoaXMubGliVGFiLnNwbGl0KCIuIilbMF07cmV0dXJuISFhW2hdJiZhW2hdLmluY2x1ZGVzKGQpfWdvVG9MaW5lYWdlKCl7bGV0IGQ9''@;'; put 'put ''YC92aWV3L2xpbmVhZ2UvJHt0aGlzLnRhYmxldXJpLnNwbGl0KCJcXCIpWzFdfS9SRVZFUlNFYDt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKGQpfXNob3dXZWJRdWVyeSgpe2xldCBhO3RoaXMud2ViUXVlcnk9ITAsYT10eXBlb2YgdGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVy''@;'; put 'put ''SWQ+InUiPzA6cGFyc2VJbnQodGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMuZmlsdGVySWQpO2xldCBkPXdpbmRvdy5sb2NhdGlvbi5wb3J0Lmxlbmd0aD4wPyI6Iit3aW5kb3cubG9jYXRpb24ucG9ydDoiIjtjb25zdCBoPXRoaXMuc2FzU2VydmljZS5nZXRFeGVjdXRpb25QYXRoKCk7bGV0''@;'; put 'put ''IHY9YCR7d2luZG93LmxvY2F0aW9uLnByb3RvY29sfS8vJHt3aW5kb3cubG9jYXRpb24uaG9zdG5hbWV9JHtkfS8ke2h9Lz9fcHJvZ3JhbT0ke3RoaXMuc2FzanNDb25maWcuYXBwTG9jfS9zZXJ2aWNlcy9wdWJsaWMvZ2V0cmF3ZGF0YSZ0eXBlPVdFQiR7dGhpcy53ZWJRdWVyeVRhYj8iVEFC''@;'; put 'put ''IjoiQ1NWIn0mdGFibGU9JHt0aGlzLnRhYmxlVGl0bGV9JHsiJmZpbHRlcj0iK2F9YDt0aGlzLndlYlF1ZXJ5VGV4dD12LnJlcGxhY2UoLyAvZ2ltLCIlMjAiKX1jb3B5VG9DbGlwKCl7bGV0IGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGV4dGFyZWEiKTthLnN0eWxlLnBvc2l0aW9uPSJm''@;'; put 'put ''aXhlZCIsYS5zdHlsZS5sZWZ0PSIwIixhLnN0eWxlLnRvcD0iMCIsYS5zdHlsZS5vcGFjaXR5PSIwIixhLnZhbHVlPXRoaXMud2ViUXVlcnlUZXh0LGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSksYS5mb2N1cygpLGEuc2VsZWN0KCksZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKSxk''@;'; put 'put ''b2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpfWdvVG9WaWV3ZXIoKXt0aGlzLnJvdXRlci5uYXZpZ2F0ZUJ5VXJsKCIvdmlldy9kYXRhIil9c2hvd1RhYmxlU2VsZWN0KCl7dGhpcy50YWJsZUZsYWc9IXRoaXMudGFibGVGbGFnfWNoZWNrRXhwYW5kKGEpe31jb2xsYXBzZUxpYnJhcnlJdGVt''@;'; put 'put ''cyhhLGQpe2EuZm9yRWFjaChoPT57aC5MSUJSQVJZUkVGIT09ZC5MSUJSQVJZUkVGJiYoaC5leHBhbmRlZD0hMSl9KX1sb2FkTW9yZUxpYnJhcmllcygpe3RoaXMubGlicmFyaWVzUGFnaW5nfHwodGhpcy5saWJyYXJpZXNQYWdpbmc9ITAsdGhpcy5oZWxwZXJTZXJ2aWNlLmRpc3BsYXlMaWJy''@;'; put 'put ''YXJpZXModGhpcy5saWJyYXJpZXMsITApLHRoaXMubGlicmFyaWVzUGFnaW5nPSExKX10cmVlTm9kZUNsaWNrZWQoYSxkKXsiQ29sbGFwc2UiPT09YS50YXJnZXQudGl0bGUmJnRoaXMuY29sbGFwc2VMaWJyYXJ5SXRlbXModGhpcy5saWJyYXJpZXMsZCl9bGlicmFyeUV4cGFuZGVkQ2hhbmdl''@;'; put 'put ''KGEsZCl7YSYmdGhpcy5jb2xsYXBzZUxpYnJhcnlJdGVtcyh0aGlzLmxpYnJhcmllcyxkKX1saWJyYXJ5T25DbGljayhhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aWYoZC50YWJsZXM/ZC5leHBhbmRlZD0hIWh8fCFkLmV4cGFuZGVkOnlpZWxkIGYuc2VsZWN0VGFi''@;'; put 'put ''bGUoYSwhMSxkKSxkLmV4cGFuZGVkKXtmLmNkZi5kZXRlY3RDaGFuZ2VzKCk7bGV0IHY9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgI3NlYXJjaF8ke2QuTElCUkFSWVJFRn1gKTtmLmxvZ2dlclNlcnZpY2UubG9nKCJbbGliVHJlZVNlYXJjaElucHV0XSIsdiksdiYmdi5mb2N1cygpLGQmJmQu''@;'; put 'put ''bGliaW5mbyYmKGYubGliaW5mbz1kLmxpYmluZm8pLGYubGliJiZmLnRhYmxlJiYhaD9mLnJvdXRlci5uYXZpZ2F0ZShbIi92aWV3L2RhdGEiXSx7c2tpcExvY2F0aW9uQ2hhbmdlOiEwLHF1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pLnRoZW4oKCk9PntmLnJvdXRlci5uYXZpZ2F0''@;'; put 'put ''ZShbIi92aWV3L2RhdGEvIitmLmxpYl0se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pfSk6Zi5saWImJiFmLnRhYmxlJiZmLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSgiL3ZpZXcvZGF0YS8iK2YubGliKX1mLmNvbGxhcHNlTGlicmFyeUl0ZW1zKGYubGlicmFyaWVzLGQpfSkoKX1v''@;'; put 'put ''blRhYmxlQ2xpY2soYSxkKXt0aGlzLmxpYj1kLkxJQlJBUllSRUYsdGhpcy50YWJsZT1hLHRoaXMuc2VsZWN0TGliVGFibGUoYSksdGhpcy52aWV3RGF0YSgwKX1zZWxlY3RUYWJsZShhLGQsaCl7dmFyIGY9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7aC5sb2FkaW5nVGFibGVzPSEwLGYu''@;'; put 'put ''dGFibGU9ITEsZi50YWJsZURpc2FibGU9ITAsIlBsZWFzZSBzZWxlY3QgbGlicmFyeSIhPT1hP0tuLnZpZXdlci50YWJsZXNTZXQmJmQ/KGYuYWJvcnRBY3RpdmU9ITEsZi50YWJsZURpc2FibGU9ITEsZi50YWJsZXM9S24udmlld2VyLnRhYmxlcyxmLmxpYmluZm89S24udmlld2VyLmxpYmlu''@;'; put 'put ''Zm8pOihmLmxpYmluZm89bnVsbCx5aWVsZCBmLnNhc1N0b3JlU2VydmljZS52aWV3VGFibGVzKGEpLnRoZW4odj0+e2YuYWJvcnRBY3RpdmU9ITEsZi50YWJsZURpc2FibGU9ITE7bGV0IE09di5tcHRhYmxlcy5tYXAoZnVuY3Rpb24oRCl7cmV0dXJuIEQuTUVNTkFNRX0pO2YubGliaW5mbz12''@;'; put 'put ''LmxpYmluZm98fFtdLGYudGFibGVzPU0saCYmKGgudGFibGVzPU0saC5saWJpbmZvPWYubGliaW5mbyksS24udmlld2VyLmxpYnJhcmllcz1mLmxpYnJhcmllcyxLbi52aWV3ZXIubGlicmFyeT1mLmxpYixLbi52aWV3ZXIudGFibGVzPWYudGFibGVzLEtuLnZpZXdlci5saWJpbmZvPWYubGli''@;'; put 'put ''aW5mbyxLbi52aWV3ZXIudGFibGVzU2V0PSEwfSkuY2F0Y2godj0+e2YubG9nZ2VyU2VydmljZS5lcnJvcih2KSxmLmFib3J0QWN0aXZlPSEwLGYubm9EYXRhPSEwLGYudGFibGVUaXRsZT0iIixmLnRhYmxlRGlzYWJsZT0hMH0pKTpmLnRhYmxlRGlzYWJsZT0hMCxLbi52aWV3ZXIubGlicmFy''@;'; put 'put ''eT1mLmxpYixkfHxmLmNsZWFyR2xvYmFsc0ZpbHRlcigpLGgubG9hZGluZ1RhYmxlcz0hMSxoLmV4cGFuZGVkPSFoLmV4cGFuZGVkfSkoKX1zZWxlY3RMaWJUYWJsZShhLGQpeyJQbGVhc2Ugc2VsZWN0IHRhYmxlIiE9PWE/KHRoaXMuYWN0aW9uRGlzYWJsZT0hMSx0aGlzLmxpYlRhYj10aGlz''@;'; put 'put ''LmxpYisiLiIrdGhpcy50YWJsZSk6dGhpcy5hY3Rpb25EaXNhYmxlPSEwLEtuLnZpZXdlci50YWJsZT1hLGR8fHRoaXMuY2xlYXJHbG9iYWxzRmlsdGVyKCksdGhpcy5sb2dnZXJTZXJ2aWNlLmxvZyh0aGlzLmxpYlRhYil9Y2xlYXJHbG9iYWxzRmlsdGVyKCl7S24udmlld2VyLmZpbHRlci5s''@;'; put 'put ''aWJkcz0iIixLbi52aWV3ZXIuZmlsdGVyLndoZXJlQ2xhdXNlPSIiLEtuLnZpZXdlci5maWx0ZXIuZ3JvdXBMb2dpYz0iIixLbi52aWV3ZXIuZmlsdGVyLmNsYXVzZXM9W10sS24udmlld2VyLmZpbHRlci5jb2xzPVtdLEtuLnZpZXdlci5maWx0ZXIudmFscz1bXX1saWJUYWJBY3RpdmUoYSxk''@;'; put 'put ''KXtyZXR1cm4hIXRoaXMubGliVGFiJiZhKyIuIitkPT09dGhpcy5saWJUYWJ9dHJlZU9uRmlsdGVyKGEsZCl7dGhpcy5oZWxwZXJTZXJ2aWNlLnRyZWVPbkZpbHRlcihhLGQpfWxpYnJhcnlPbkZpbHRlcigpe3RoaXMuaGVscGVyU2VydmljZS5saWJyYXJ5T25GaWx0ZXIodGhpcy5saWJyYXJp''@;'; put 'put ''ZXMsdGhpcy5saWJyYXJpZXNTZWFyY2gsIkxJQlJBUllOQU1FIiksS24udmlld2VyLmxpYnJhcmllc1NlYXJjaD10aGlzLmxpYnJhcmllc1NlYXJjaH1saWJyYXJ5UmVzZXRGaWx0ZXIoKXt0aGlzLmhlbHBlclNlcnZpY2UucmVzZXRBcnJheUZpbHRlcih0aGlzLmxpYnJhcmllcyl9dmlld0Rh''@;'; put 'put ''dGEoYSl7dmFyIGQ9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7bGV0IGg7aWYoZC5sb2FkaW5nVGFibGVWaWV3PSEwLHR5cGVvZiBkLmxpYkRhdGFzZXQ+InUiKWg9ZC5saWIrIi4iK2QudGFibGU7ZWxzZSBpZih0eXBlb2YgZC5saWI+InUiJiZ0eXBlb2YgZC50YWJsZT4idSIpe2xldCBN''@;'; put 'put ''PVtdO2lmKE09ZC5saWJEYXRhc2V0LnNwbGl0KCIuIiksS24udmlld2VyLnN0YXJ0dXBTZXQ/ZC5saWJyYXJpZXM9S24udmlld2VyLmxpYnJhcmllczp5aWVsZCBkLnNhc1N0b3JlU2VydmljZS52aWV3TGlicygpLnRoZW4oRD0+e2QubGlicmFyaWVzPUQuc2FzbGlic30pLmNhdGNoKEQ9Pntk''@;'; put 'put ''LmxvZ2dlclNlcnZpY2UuZXJyb3IoRCl9KSxkLmxpYj1NWzBdLEtuLnZpZXdlci5zdGFydHVwU2V0KWQudGFibGVzPUtuLnZpZXdlci50YWJsZXM7ZWxzZXtsZXQgRD1kLmxpYnJhcmllcy5maW5kKFo9PlouTElCUkFSWVJFRi50b0xvd2VyQ2FzZSgpPT09ZC5saWIudG9Mb3dlckNhc2UoKSk7''@;'; put 'put ''eWllbGQgZC5zYXNTdG9yZVNlcnZpY2Uudmlld1RhYmxlcyhkLmxpYikudGhlbihaPT57ZC50YWJsZXM9Wi5tcHRhYmxlcy5tYXAoZnVuY3Rpb24obmUpe3JldHVybiBuZS5NRU1OQU1FfSksRC50YWJsZXM9ZC50YWJsZXMsS24udmlld2VyLmxpYnJhcmllcz1kLmxpYnJhcmllcyxLbi52aWV3''@;'; put 'put ''ZXIudGFibGVzPWQudGFibGVzLEtuLnZpZXdlci5zdGFydHVwU2V0PSEwfSkuY2F0Y2goWj0+e2QubG9nZ2VyU2VydmljZS5lcnJvcihaKX0pfWQudGFibGU9TVsxXSxkLnRhYmxlRmxhZz0hMSxoPWQubGliRGF0YXNldCxkLmxpYlRhYj1ofWVsc2UgS24udmlld2VyLnN0YXJ0dXBTZXQ/ZC5s''@;'; put 'put ''aWJyYXJpZXM9S24udmlld2VyLmxpYnJhcmllczp5aWVsZCBkLnNhc1N0b3JlU2VydmljZS52aWV3TGlicygpLnRoZW4oTT0+e2QubGlicmFyaWVzPU0uc2FzbGlic30pLmNhdGNoKE09PntkLmxvZ2dlclNlcnZpY2UuZXJyb3IoTSl9KSx0eXBlb2YgZC50YWJsZTwidSImJihLbi52aWV3ZXIu''@;'; put 'put ''c3RhcnR1cFNldD9kLnRhYmxlcz1Lbi52aWV3ZXIudGFibGVzOnlpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnZpZXdUYWJsZXMoZC5saWIpLnRoZW4oTT0+e2QudGFibGVzPU0ubXB0YWJsZXMubWFwKGZ1bmN0aW9uKEQpe3JldHVybiBELk1FTU5BTUV9KX0pLmNhdGNoKE09PntkLmxvZ2dlclNl''@;'; put 'put ''cnZpY2UuZXJyb3IoTSksZC5yb3V0ZXIubmF2aWdhdGUoWyIvdmlldy9kYXRhIl0se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0pfSksZC50YWJsZUZsYWc9ITEsaD1kLmxpYisiLiIrZC50YWJsZSxkLnRhYmxlVGl0bGU9aCxkLmxpYlRhYj1oKTtkLnJvdXRlci51cmwuc3BsaXQo''@;'; put 'put ''Ii8iKS5sZW5ndGg+MyYmaCYmKHlpZWxkIGQuc2FzU3RvcmVTZXJ2aWNlLnZpZXdEYXRhKGgsYSkudGhlbihNPT57aWYoTS5xdWVyeS5sZW5ndGg+MCYmInZpZXciPT09S24ucm9vdFBhcmFtJiYwPT09S24udmlld2VyLmZpbHRlci5jbGF1c2VzLmxlbmd0aCYmKEtuLnZpZXdlci5maWx0ZXIu''@;'; put 'put ''cXVlcnk9ZC5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShNLnF1ZXJ5KSxLbi52aWV3ZXIuZmlsdGVyLmxpYmRzPWQucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbSxkLnNhc1N0b3JlU2VydmljZS5pbml0aWFsaXplR2xvYmFsRmlsdGVyQ2xhdXNlKCJ2aWV3ZXIiLE0uY29scykpLGQuYWJv''@;'; put 'put ''cnRBY3RpdmU9ITEsZC5maWx0ZXJDb2xzPU0uY29scyxrZWUoZC5maWx0ZXJDb2xzLFtdLE0uJHZpZXdkYXRhKSxkLm51bWJlck9mUm93cz1NLnNhc3BhcmFtc1swXS5OT0JTLGQuaGVhZGVyUGtzPU0uc2FzcGFyYW1zWzBdLlBLX0ZJRUxEUy5zcGxpdCgiICIpLCJTQVM5Ij09PWQuc2FzanND''@;'; put 'put ''b25maWcuc2VydmVyVHlwZSl7bGV0IGJlPU0uc2FzcGFyYW1zWzBdLlRBQkxFVVJJO2JlJiZiZS5sZW5ndGg+MCYmKGQudGFibGV1cmk9YmUpfWQuaG90VGFibGUuZGF0YT1NLnZpZXdkYXRhLGQuJGRhdGFGb3JtYXRzPU0uJHZpZXdkYXRhLGQuZHNtZXRhPU0uZHNtZXRhLGQudmVyc2lvbnM9''@;'; put 'put ''TS52ZXJzaW9uc3x8W10sZC5zZXREU05vdGUoKSxkLnF1ZXJ5VGV4dD1NLnNhc3BhcmFtc1swXS5GSUxURVJfVEVYVDtsZXQgRD1bXSxaPVtdO2ZvcihsZXQgYmUgaW4gTS52aWV3ZGF0YVswXSliZSYmWi5wdXNoKGJlKTtmb3IobGV0IGJlPTA7YmU8Wi5sZW5ndGg7YmUrKylELnB1c2goe2Rh''@;'; put 'put ''dGE6WltiZV19KTtkLmhvdFRhYmxlLmNvbEhlYWRlcnM9WixkLmhvdFRhYmxlLmNvbHVtbnM9RCxkLmhvdFRhYmxlLmNlbGxzPWZ1bmN0aW9uKCl7cmV0dXJue3JlYWRPbmx5OiEwfX0sZC50YWJsZUZsYWc9ITE7bGV0IGNlPVtdO2NlPWguc3BsaXQoIi4iKSxkLmxpYj1jZVswXSxkLnRhYmxl''@;'; put 'put ''PWNlWzFdLDA9PT1kLmhvdFRhYmxlLmRhdGEubGVuZ3RoPyhkLm5vRGF0YT0hMCxkLnRhYmxlRmxhZz0hMCk6KGQubm9EYXRhPSExLGQudGFibGVGbGFnPSExKSxkLm5vRGF0YVJlcUVycj0hMX0pLmNhdGNoKE09PntkLmxvZ2dlclNlcnZpY2UuZXJyb3IoTSksZC5hYm9ydEFjdGl2ZT0hMCxk''@;'; put 'put ''Lm5vRGF0YVJlcUVycj0hMH0pKSxkLnJvdXRlci51cmwuaW5jbHVkZXMoIi9kYXRhIikmJmgmJmQucm91dGVyLm5hdmlnYXRlKDAhPT1hP1siL3ZpZXcvZGF0YS8iK2grIi8iK2FdOlsiL3ZpZXcvZGF0YS8iK2hdLHtxdWVyeVBhcmFtc0hhbmRsaW5nOiJwcmVzZXJ2ZSJ9KTtsZXQgZj1kLnRh''@;'; put 'put ''YmxlLHY9ZC5saWJyYXJpZXMuZmluZChNPT5NLkxJQlJBUllSRUYudG9Mb3dlckNhc2UoKT09PWQubGliLnRvTG93ZXJDYXNlKCkpO3Y/KEtuLnZpZXdlci5saWJyYXJpZXMubGVuZ3RoPjAmJihkLmxpYnJhcmllcz1Lbi52aWV3ZXIubGlicmFyaWVzLGQubGlicmFyaWVzU2VhcmNoPUtuLnZp''@;'; put 'put ''ZXdlci5saWJyYXJpZXNTZWFyY2gpLGQubGlicmFyeU9uQ2xpY2soZC5saWIsdiwhMCkpOmQubGliaW5mbz1bXSxkLnRhYmxlPWZ8fGQudGFibGUsZC5saWJyYXJpZXMmJmQuaGVscGVyU2VydmljZS5kaXNwbGF5TGlicmFyaWVzKGQubGlicmFyaWVzKSxkLnJvdXRlci51cmwuaW5jbHVkZXMo''@;'; put 'put ''Ii9kYXRhIikmJmQuZXZlbnRTZXJ2aWNlLmNsb3NlU2lkZWJhcigpLGQubG9hZGluZ1RhYmxlVmlldz0hMSwhZC5ub0RhdGEmJiFkLm5vRGF0YVJlcUVyciYmaCYmZC5zZXR1cEhvdCgpLGQuaG90SW5zdGFuY2VDbGlja0xpc3RlbmVyfHxzZXRUaW1lb3V0KCgpPT57bGV0IE09ZG9jdW1lbnQu''@;'; put 'put ''Z2V0RWxlbWVudEJ5SWQoImhvdEluc3RhbmNlIik7TSYmKE0uYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vkb3duIixEPT57c2V0VGltZW91dCgoKT0+e2xldCBaPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5kZWJ1Zy1zd2l0Y2gtaXRlbSIpfHx2b2lkIDA7WiYmWi5jbGljaygpfSwxMDApfSks''@;'; put 'put ''ZC5ob3RJbnN0YW5jZUNsaWNrTGlzdGVuZXI9ITApfSwyZTMpfSkoKX1tYXhXaWR0aENoZWtlcihhLGQpe3JldHVybiBhPjIwMD8yMDA6YX1vcGVuUWIoKXt0aGlzLmZpbHRlcj0hMCx0aGlzLmNkZi5kZXRlY3RDaGFuZ2VzKCksdGhpcy5zYXNTdG9yZVNlcnZpY2Uuc2V0UXVlcnlWYXJpYWJs''@;'; put 'put ''ZXModGhpcy5saWIrIi4iK3RoaXMudGFibGUsdGhpcy5maWx0ZXJDb2xzKX1zZW5kQ2xhdXNlKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5zdWJtaXRMb2FkaW5nPSEwO2xldCBkPVtdLGg9W107aWYodHlwZW9mIGEuY2xhdXNlcz4idSIpcmV0dXJuIGEubnVsbFZhcmlh''@;'; put 'put ''Ymxlcz0hMCx2b2lkKGEuc3VibWl0TG9hZGluZz0hMSk7e2xldCBmPWEuY2xhdXNlcy5xdWVyeU9iajtpZihmWzBdLmVsZW1lbnRzLmxlbmd0aDwxKXJldHVybiJ2aWV3Ij09PUtuLnJvb3RQYXJhbSYmKEtuLnZpZXdlci5maWx0ZXIuY2xhdXNlcz1bXSxLbi52aWV3ZXIuZmlsdGVyLnF1ZXJ5''@;'; put 'put ''PVtdLEtuLnZpZXdlci5maWx0ZXIuZ3JvdXBMb2dpYz0iIiksdm9pZCBhLnJvdXRlci5uYXZpZ2F0ZShbIi92aWV3L2RhdGEvIithLmxpYmRzXSx7cXVlcnlQYXJhbXNIYW5kbGluZzoicHJlc2VydmUifSk7Zm9yKGxldCB2PTA7djxmLmxlbmd0aDt2Kyspe2NvbnN0IE09Zlt2XS5lbGVtZW50''@;'; put 'put ''cztkPU0uZmlsdGVyKGZ1bmN0aW9uKEQpe3JldHVybiBudWxsPT09RC52YXJpYWJsZX0pLGQubGVuZ3RoJiZoLnB1c2goTSl9fWlmKGgubGVuZ3RoKXJldHVybiBhLm51bGxWYXJpYWJsZXM9ITAsdm9pZChhLnN1Ym1pdExvYWRpbmc9ITEpO3tjb25zdCBmPXtncm91cExvZ2ljOmEuY2xhdXNl''@;'; put 'put ''cy5ncm91cExvZ2ljLGZpbHRlckdyb3VwczpbXX07YS5jbGF1c2VzLnF1ZXJ5T2JqLmZvckVhY2goTT0+e2NvbnN0IEQ9e2ZpbHRlckNsYXVzZXM6W119O00uZWxlbWVudHMuZm9yRWFjaChaPT57RC5maWx0ZXJDbGF1c2VzLnB1c2goYS5oZWxwZXJTZXJ2aWNlLmRlZXBDbG9uZShaKSl9KSxE''@;'; put 'put ''LmNsYXVzZUxvZ2ljPU0uY2xhdXNlTG9naWMsZi5maWx0ZXJHcm91cHMucHVzaChhLmhlbHBlclNlcnZpY2UuZGVlcENsb25lKEQpKX0pO2NvbnN0IHY9YS5zYXNTdG9yZVNlcnZpY2UuY3JlYXRlRmlsdGVyUXVlcnlUYWJsZShmKTt5aWVsZCBhLnNhc1N0b3JlU2VydmljZS5zYXZlUXVlcnko''@;'; put 'put ''YS5saWJkcyx2KS50aGVuKE09PnthLnF1ZXJ5VGV4dD1NLnJlc3VsdFswXS5GSUxURVJfVEVYVDtsZXQgRD1NLnJlc3VsdFswXS5GSUxURVJfUks7YS5yb3V0ZXIubmF2aWdhdGUoWyIvdmlldy9kYXRhLyIrYS5saWJkcysiLyIrRF0se3F1ZXJ5UGFyYW1zSGFuZGxpbmc6InByZXNlcnZlIn0p''@;'; put 'put ''LGEudmlld0RhdGEoRCksYS5maWx0ZXI9ITF9KS5jYXRjaChNPT57YS5sb2dnZXJTZXJ2aWNlLmVycm9yKE0pfSksYS5zdWJtaXRMb2FkaW5nPSExfX0pKCl9cmVtb3ZlUXVlcnkoKXt0aGlzLnNhc1N0b3JlU2VydmljZS5yZW1vdmVDbGF1c2UoKX1kYXRhc2V0SW5mb01vZGFsUm93Q2xpY2tl''@;'; put 'put ''ZChhKXt2b2lkIDAhPT1hLkxPQURfUkVGJiZ0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYC9zdGFnZS8ke2EuTE9BRF9SRUZ9YF0pfXNldERTTm90ZSgpe2NvbnN0IGE9dGhpcy5kc21ldGEuZmluZChmPT4iTk9URVMiPT09Zi5OQU1FKSxkPXRoaXMuZHNtZXRhLmZpbmQoZj0+IkREX0xPTkdERVND''@;'; put 'put ''Ij09PWYuTkFNRSksaD10aGlzLmRzbWV0YS5maW5kKGY9PiJERF9TSE9SVERFU0MiPT09Zi5OQU1FKTt0aGlzLmRzTm90ZT1hJiZhLlZBTFVFP2EuVkFMVUU6ZCYmZC5WQUxVRT9kLlZBTFVFOmgmJmguVkFMVUU/aC5WQUxVRToiIn1zZXR1cEhvdCgpe3NldFRpbWVvdXQoKCk9PnshdGhpcy5s''@;'; put 'put ''b2FkaW5nVGFibGVWaWV3JiZ0aGlzLmxpYkRhdGFzZXQmJih0aGlzLmhvdEluc3RhbmNlPXRoaXMuaG90VGFibGVSZWdpc3RlcmVyLmdldEluc3RhbmNlKCJob3RJbnN0YW5jZSIpLHRoaXMuaG90SW5zdGFuY2UmJnRoaXMuaG90SW5zdGFuY2UudXBkYXRlU2V0dGluZ3Moe2hlaWdodDp0aGlz''@;'; put 'put ''LmhvdFRhYmxlLmhlaWdodCxtb2RpZnlDb2xXaWR0aDpmdW5jdGlvbihhLGQpe3JldHVybiBhPjUwMD81MDA6YX0sYWZ0ZXJHZXRDb2xIZWFkZXI6KGEsZCk9Pntjb25zdCBoPXRoaXMuaG90SW5zdGFuY2U/LmNvbFRvUHJvcChhKTtoJiZ0aGlzLmhlYWRlclBrcy5pbmRleE9mKGgpPi0xJiZk''@;'; put 'put ''LmNsYXNzTGlzdC5hZGQoInByaW1hcnlLZXlIZWFkZXJTdHlsZSIpLGQuY2xhc3NMaXN0LmFkZChLbi5oYW5kc29udGFibGUuZGFya1RhYmxlSGVhZGVyQ2xhc3MpfX0pKX0sMWUzKX1sb2FkV2l0aFBhcmFtZXRlcnMoKXt2YXIgYT10aGlzO3JldHVybiBlZShmdW5jdGlvbiooKXthLnN3aXRj''@;'; put 'put ''aEZsYWc9ITAsYS50YWJsZVRpdGxlPWEucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbXx8MCxhLnVybEZpbHRlclBrPXBhcnNlSW50KGEucm91dGUuc25hcHNob3QucGFyYW1zLmZpbHRlcklkfHwiMCIpO2xldCBoPWEucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbTthLmxpYkRhdGFz''@;'; put 'put ''ZXQ9aCxoLmluY2x1ZGVzKCIuIil8fChhLmxpYj1oKSx5aWVsZCBhLnZpZXdEYXRhKGEudXJsRmlsdGVyUGspLGEubm9EYXRhP3NldFRpbWVvdXQoKCk9PnthLnRhYmxlRmxhZz0hMH0sMTIwMCk6c2V0VGltZW91dCgoKT0+e2EudGFibGVGbGFnPSExfSwxMjAwKX0pKCl9bG9hZFdpdGhvdXRQ''@;'; put 'put ''YXJhbWV0ZXJzKCl7dmFyIGE9dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5zd2l0Y2hGbGFnPSExLGEubGlicmFyaWVzTG9hZGluZz0hMCxLbi52aWV3ZXIuc3RhcnR1cFNldD9zZXRUaW1lb3V0KCgpPT57YS5saWJyYXJpZXM9S24udmlld2VyLmxpYnJhcmllcyxhLmxpYnJhcmllc1Nl''@;'; put 'put ''YXJjaD1Lbi52aWV3ZXIubGlicmFyaWVzU2VhcmNoLGEubGliPUtuLnZpZXdlci5saWJyYXJ5LGEubGlicmFyaWVzVHJlZUV4cGFuZGVkPSEwLGEubGlicmFyaWVzTG9hZGluZz0hMSxhLmhlbHBlclNlcnZpY2UuZGlzcGxheUxpYnJhcmllcyhhLmxpYnJhcmllcyl9LDEwMCk6KGEubm9EYXRh''@;'; put 'put ''UmVxRXJyPSExLHlpZWxkIGEuc2FzU3RvcmVTZXJ2aWNlLnZpZXdMaWJzKCkudGhlbihkPT57YS5saWJyYXJpZXM9ZC5zYXNsaWJzLEtuLnZpZXdlci5saWJyYXJpZXM9YS5saWJyYXJpZXMsS24udmlld2VyLnN0YXJ0dXBTZXQ9ITAsYS5saWJyYXJpZXNMb2FkaW5nPSExLGEuaGVscGVyU2Vy''@;'; put 'put ''dmljZS5kaXNwbGF5TGlicmFyaWVzKGEubGlicmFyaWVzKX0pLmNhdGNoKGQ9PnthLmxvZ2dlclNlcnZpY2UuZXJyb3IoZCksYS5saWJyYXJpZXNMb2FkaW5nPSExLGEubm9EYXRhUmVxRXJyPSEwfSkpfSkoKX1uZ0FmdGVyVmlld0luaXQoKXt9bmdBZnRlckNvbnRlbnRJbml0KCl7dmFyIGE9''@;'; put 'put ''dGhpcztyZXR1cm4gZWUoZnVuY3Rpb24qKCl7YS5ob3RUYWJsZS5kYXRhLmxlbmd0aD4wJiYoYS50YWJsZUZsYWc9ITApLGEuX3F1ZXJ5PWEuc2FzU3RvcmVTZXJ2aWNlLnF1ZXJ5LnN1YnNjcmliZShkPT57YS53aGVyZVN0cmluZz1kLnN0cmluZyxhLmNsYXVzZXM9ZC5vYmosYS5saWJkcz1k''@;'; put 'put ''LmxpYmRzfSksdHlwZW9mIGEucm91dGUuc25hcHNob3QucGFyYW1zLmxpYk1lbTwidSI/YS5sb2FkV2l0aFBhcmFtZXRlcnMoKTphLmxvYWRXaXRob3V0UGFyYW1ldGVycygpfSkoKX1zdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKShHZShkMSksR2Uo''@;'; put 'put ''VmgpLEdlKEpzKSxHZShMcyksR2UoQ3UpLEdlKHBjKSxHZShTZCksR2UoR3UpLEdlKHVoKSxHZSh4cykpfX1zdGF0aWN7dGhpcy5cdTAyNzVjbXA9TnIoe3R5cGU6YyxzZWxlY3RvcnM6W1siYXBwLXZpZXdlciJdXSx2aWV3UXVlcnk6ZnVuY3Rpb24oZCxoKXtpZigxJmQmJm5hKFZBdCw1KSwy''@;'; put 'put ''JmQpe2xldCBmO3hpKGY9RWkoKSkmJihoLnF1ZXJ5RmlsdGVyQ29tcExpc3Q9Zil9fSxob3N0QXR0cnM6WzEsImNvbnRlbnQtY29udGFpbmVyIl0sZGVjbHM6OTUsdmFyczozMCxjb25zdHM6W1siY2xpQ29tbWFuZElucHV0IiwiIl0sWyJzZWFyY2hMaWJUcmVlSW5wdXQiLCIiXSxbInNlYXJj''@;'; put 'put ''aFRyZWVJbnB1dCIsIiJdLFsicXVlcnlGaWx0ZXIiLCIiXSxbInNlYXJjaEVsIiwiIl0sWzMsInNjcm9sbGVkVG9Cb3R0b20iXSxbImNsYXNzIiwibXktMTAtbXgtYXV0byB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsiY2xhc3MiLCJzZWFyY2gtbm9kZSIsNCwibmdJZiJdLFs0LCJuZ0ZvciIs''@;'; put 'put ''Im5nRm9yT2YiXSxbImNsYXNzIiwidy0xMDAgdGV4dC1jZW50ZXIiLDQsIm5nSWYiXSxbMSwiY29udGVudC1hcmVhIl0sWyJjbGFzcyIsIm1vZGFsIHotaW5kZXgtaGlnaGVzdCIsNCwibmdJZiJdLFsiY2xhc3MiLCJtb2RhbC1iYWNrZHJvcCIsImFyaWEtaGlkZGVuIiwidHJ1ZSIsNCwibmdJ''@;'; put 'put ''ZiJdLFszLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiXSxbMSwibW9kYWwtdGl0bGUiLCJjZW50ZXIiLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWRhcmtlci1ncmF5Il0sWzEsIm1vZGFsLWJvZHkiXSxbMSwiY2xyLWNvbC1tZC02Il0sWzEsImRvd25s''@;'; put 'put ''b2FkLXNlbGVjdCJdLFsiY2xyU2VsZWN0IiwiIiwzLCJuZ01vZGVsQ2hhbmdlIiwibmdNb2RlbCJdLFsidmFsdWUiLCJDU1YiXSxbInZhbHVlIiwiU0FTIl0sWyJ2YWx1ZSIsIlBHU1FMX0RETCJdLFsidmFsdWUiLCJTQVNfRERMIl0sWyJ2YWx1ZSIsIlRTUUxfRERMIl0sWyJ2YWx1ZSIsIkVY''@;'; put 'put ''Q0VMIl0sWyJ2YWx1ZSIsIk1BUktET1dOIl0sWzEsIm1vZGFsLWZvb3RlciJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLXNtIiwiYnRuLW91dGxpbmUiLDMsImNsaWNrIl0sWyJ0eXBlIiwic3VibWl0IiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5lIiwzLCJj''@;'; put 'put ''bGljayIsImlkIl0sWzEsIm1vZGFsLWJvZHkiLCJ3ZWItcXVlcnkiXSxbMSwicm93Il0sWzEsImNsci1jb2wtbGctMTIiLCJjbHItY29sLW1kLTEyIiwiY2xyLWNvbC1zbS0xMiIsImNsci1jb2wteHMtMTIiXSxbMSwiY2FyZCIsIm5vLWJvcmRlcnMiXSxbMSwiY2FyZC1oZWFkZXIiLCJkLWZs''@;'; put 'put ''ZXgiLCJqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiJdLFsxLCJidG4tZ3JvdXAiXSxbMSwicmFkaW8iLCJidG4iLDMsImNsaWNrIl0sWyJ0eXBlIiwicmFkaW8iLCJuYW1lIiwiYnRuLWdyb3VwLWRlbW8tcmFkaW9zIiwzLCJjaGVja2VkIl0sWzEsImNhcmQtYmxvY2siLCJ3ZWItcXVlcnktd3Jh''@;'; put 'put ''cHBlciIsIndvcmQtYnJlYWstYWxsIl0sWyJjbHJUZXh0YXJlYSIsIiIsInJvd3MiLCI0IiwiY29scyIsIjUwIiwidHlwZSIsInRleHQiLCJyZWFkb25seSIsIiIsMSwid2ViLXF1ZXJ5LXRleHQiLDMsImZvY3VzIiwidmFsdWUiXSxbMSwiY2FyZC1mb290ZXIiXSxbMSwiYnRuIiwiYnRuLXNt''@;'; put 'put ''IiwiYnRuLWxpbmsiLDMsImNsaWNrIiwibmd4Q2xpcGJvYXJkIl0sWyJhcmlhLW1vZGFsIiwidHJ1ZSIsMSwiZmlsdGVyLW1vZGFsIiwzLCJjbHJNb2RhbE9wZW5DaGFuZ2UiLCJjbHJNb2RhbE9wZW4iLCJjbHJNb2RhbFNpemUiLCJjbHJNb2RhbENsb3NhYmxlIl0sWzQsIm5nSWYiXSxbInR5''@;'; put 'put ''cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1saW5rIiwzLCJjbGljayJdLFsidHlwZSIsImJ1dHRvbiIsMSwiYnRuIiwiYnRuLW91dGxpbmUiLCJidG4tc20iLDMsImNsaWNrIl0sWyJ0eXBlIiwic3VibWl0IiwxLCJidG4iLCJidG4tc20iLCJidG4tc3VjY2Vzcy1vdXRsaW5l''@;'; put 'put ''IiwzLCJjbGljayIsImNsckxvYWRpbmciXSxbMywiY2xyTW9kYWxPcGVuQ2hhbmdlIiwiY2xyTW9kYWxPcGVuIl0sWzEsIm1vZGFsLXRpdGxlIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tb3V0bGluZSIsMywiY2xpY2siXSxbInR5cGUiLCJidXR0b24iLDEsImJ0biIsImJ0bi1w''@;'; put 'put ''cmltYXJ5IiwzLCJjbGljayJdLFsiY2xhc3MiLCJsb2FkaW5nU3Bpbm5lciIsNCwibmdJZiJdLFsiY2xhc3MiLCJjYXJkIG5vLWJvcmRlcnMgaC0xMDAgZC1mbGV4IGNsci1mbGV4LWNvbHVtbiIsNCwibmdJZiJdLFszLCJvcGVuQ2hhbmdlIiwicm93Q2xpY2tlZCIsIm9wZW4iLCJkc21ldGEi''@;'; put 'put ''LCJ2ZXJzaW9ucyJdLFszLCJ2aWV3Ym94TW9kYWxDaGFuZ2UiLCJ2aWV3Ym94TW9kYWwiXSxbMSwibXktMTAtbXgtYXV0byIsInRleHQtY2VudGVyIl0sWyJjbHJNZWRpdW0iLCIiXSxbMSwic2VhcmNoLW5vZGUiXSxbMSwidHJlZS1zZWFyY2gtd3JhcHBlciJdLFsiYXBwU3RlYWxGb2N1cyIs''@;'; put 'put ''IiIsImNscklucHV0IiwiIiwicGxhY2Vob2xkZXIiLCJMaWJyYXJpZXMiLCJuYW1lIiwiaW5wdXQiLCJhdXRvY29tcGxldGUiLCJvZmYiLDMsIm5nTW9kZWxDaGFuZ2UiLCJrZXl1cCIsIm5nTW9kZWwiXSxbInNoYXBlIiwic2VhcmNoIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInRpbWVzIiwzLCJj''@;'; put 'put ''bGljayIsNCwibmdJZiJdLFsic2hhcGUiLCJzZWFyY2giXSxbInNoYXBlIiwidGltZXMiLDMsImNsaWNrIl0sWzMsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyIsImNsci1leHBhbmRlZCIsImNsaWNrIiwiY2xyRXhwYW5kZWRDaGFuZ2UiLDQsIm5nSWYiXSxbMywiY2xpY2siLCJjbHJFeHBh''@;'; put 'put ''bmRlZENoYW5nZSIsImNsckV4cGFuZGVkIiwiY2xyTG9hZGluZyJdLFsxLCJtLTAiLCJjdXJzb3ItcG9pbnRlciIsMywiY2xpY2siXSxbInNoYXBlIiwicmFjay1zZXJ2ZXIiXSxbImFwcFN0ZWFsRm9jdXMiLCIiLCJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiVGFibGVzIiwibmFtZSIs''@;'; put 'put ''ImlucHV0IiwiYXV0b2NvbXBsZXRlIiwib2ZmIiwzLCJuZ01vZGVsQ2hhbmdlIiwia2V5dXAiLCJpZCIsIm5nTW9kZWwiXSxbNCwibmdWYXIiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIiwiY2xhc3MiLCJjbHItdHJlZW5vZGUtbGluayIsMywiZGMtbG9ja2VkLWNvbnRyb2wiLCJhY3RpdmUi''@;'; put 'put ''LCJjbGljayIsNCwibmdJZiJdLFsiY2xyVG9vbHRpcFRyaWdnZXIiLCIiLDEsImNsci10cmVlbm9kZS1saW5rIiwzLCJjbGljayJdLFszLCJuZ1N3aXRjaCJdLFsic2hhcGUiLCJib2x0Iiw0LCJuZ1N3aXRjaENhc2UiXSxbInNoYXBlIiwidGFibGUiLDQsIm5nU3dpdGNoQ2FzZSJdLFsic2hh''@;'; put 'put ''cGUiLCJib2x0Il0sWyJzaGFwZSIsInRhYmxlIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsImNsclNpemUiLCJsZyIsNCwiY2xySWZPcGVuIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1yaWdodCIsImNsclNpemUiLCJsZyJdLFsxLCJ3LTEwMCIsInRleHQtY2VudGVyIl0sWzEs''@;'; put 'put ''InNwaW5uZXIiLCJzcGlubmVyLXNtIl0sWzEsIm1vZGFsIiwiei1pbmRleC1oaWdoZXN0Il0sWyJyb2xlIiwiZGlhbG9nIiwiYXJpYS1oaWRkZW4iLCJ0cnVlIiwxLCJtb2RhbC1kaWFsb2ciXSxbMSwibW9kYWwtY29udGVudCJdLFsxLCJtb2RhbC1oZWFkZXIiXSxbImFyaWEtbGFiZWwiLCJD''@;'; put 'put ''bG9zZSIsInR5cGUiLCJidXR0b24iLDEsImNsb3NlIl0sWyJhcmlhLWhpZGRlbiIsInRydWUiLCJzaGFwZSIsImNsb3NlIl0sWyJ0eXBlIiwiYnV0dG9uIiwxLCJidG4iLCJidG4tc20iLCJidG4tcHJpbWFyeSIsMywiY2xpY2siXSxbImFyaWEtaGlkZGVuIiwidHJ1ZSIsMSwibW9kYWwtYmFj''@;'; put 'put ''a2Ryb3AiXSxbMSwibG9hZGluZ1NwaW5uZXIiXSxbMSwic3Bpbm5lciJdLFsxLCJtdC0xMCJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIl0sWzEsImNhcmQiLCJuby1ib3JkZXJzIiwiaC0xMDAiLCJkLWZsZXgiLCJjbHItZmxleC1jb2x1bW4iXSxbImNsYXNzIiwiaGVhZGVyLXJvdyBjbHItcm93''@;'; put 'put ''IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHctMTAwIG0tMCIsNCwibmdJZiJdLFsiY2xhc3MiLCJuby10YWJsZS1zZWxlY3RlZCIsNCwibmdJZiJdLFsiY2xhc3MiLCJjYXJkLWJsb2NrIG5vRGF0YSIsNCwibmdJZiJdLFsiY2xhc3MiLCJjbHIt''@;'; put 'put ''ZmxleC0xIiw0LCJuZ0lmIl0sWyJjbGFzcyIsIm10LTItaSB3LTEwMCB0ZXh0LWNlbnRlciIsNCwibmdJZiJdLFsxLCJoZWFkZXItcm93IiwiY2xyLXJvdyIsImp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwiY2xyLWp1c3RpZnktY29udGVudC1jZW50ZXIiLCJ3LTEwMCIsIm0tMCJdLFsxLCJm''@;'; put 'put ''b3JtLWJsb2NrIiwidGFibGUtc2VhcmNoLXdyYXBwZXIiLCJzdyIsImNsci1jb2wtbWQiXSxbImNsckZvcm0iLCIiLDEsImQtZmxleCIsImFsaWduLWl0ZW1zLWNlbnRlciJdLFsxLCJpbnB1dC13cmFwcGVyIl0sWyJjbHJJbnB1dCIsIiIsInBsYWNlaG9sZGVyIiwiU2VhcmNoIiwibmFtZSIs''@;'; put 'put ''InNlYXJjaC1pbnB1dCIsMywia2V5dXAuZW50ZXIiLCJ0eXBlIl0sWyJzaGFwZSIsInNlYXJjaCIsMywiY2xpY2siLDQsIm5nSWYiXSxbImNsYXNzIiwic3Bpbm5lciBzcGlubmVyLWlubGluZSIsNCwibmdJZiJdLFsidHlwZSIsImNoZWNrYm94IiwiY2xyQ2hlY2tib3giLCIiLCJuYW1lIiwi''@;'; put 'put ''bnVtZXJpY19jaGVjayIsMywibmdNb2RlbENoYW5nZSIsIm5nTW9kZWwiXSxbMSwidGl0bGUtY29sIiwiY2xyLWNvbC1hdXRvIiwiY2xyLWZsZXgtY29sdW1uIiwiY2xyLWZsZXgtc20tcm93Il0sWyJjZHMtdGV4dCIsInNlY3Rpb24iLDEsImNsci1mbGV4LWNvbHVtbiIsImQtZmxleCIsImNs''@;'; put 'put ''ci1mbGV4LXNtLXJvdyIsImNsci1hbGlnbi1pdGVtcy1jZW50ZXIiLCJjbHItanVzdGlmeS1jb250ZW50LWNlbnRlciJdLFsxLCJkLWZsZXgiLCJjbHItYWxpZ24taXRlbXMtY2VudGVyIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsImFyaWEtbGFiZWwiLCJWaWV3IGRhdGFzZXQgbWV0YSBp''@;'; put 'put ''bmZvIiwic2hhcGUiLCJpbmZvLWNpcmNsZSIsInNpemUiLCIyNCIsMSwiaXMtaGlnaGxpZ2h0IiwiY3Vyc29yLXBvaW50ZXIiLDMsImNsaWNrIl0sWyJzaGFwZSIsImJvbHQiLCJjbGFzcyIsImNvbG9yLXllbGxvdyBtci01Iiw0LCJuZ0lmIl0sWyJjbHJUb29sdGlwVHJpZ2dlciIsIiIsNCwi''@;'; put 'put ''bmdJZiJdLFsxLCJvcHRpb25zLWNvbCIsImNsci1jb2wtbWQiXSxbImNsYXNzIiwib3B0aW9ucy1kcm9wZG93biIsMywiY2xyQ2xvc2VNZW51T25JdGVtQ2xpY2siLDQsIm5nSWYiXSxbImNsYXNzIiwiY2xyLWNvbC1tZC0xMiBpbmZvQmFyIiw0LCJuZ0lmIl0sWyJzaGFwZSIsInNlYXJjaCIs''@;'; put 'put ''MywiY2xpY2siXSxbMSwic3Bpbm5lciIsInNwaW5uZXItaW5saW5lIl0sWyJzaGFwZSIsImJvbHQiLDEsImNvbG9yLXllbGxvdyIsIm1yLTUiXSxbImNsclRvb2x0aXBUcmlnZ2VyIiwiIl0sWyJjbHJQb3NpdGlvbiIsImJvdHRvbS1sZWZ0IiwiY2xyU2l6ZSIsImxnIiw0LCJjbHJJZk9wZW4i''@;'; put 'put ''XSxbImNsclBvc2l0aW9uIiwiYm90dG9tLWxlZnQiLCJjbHJTaXplIiwibGciXSxbInNoYXBlIiwicmVmcmVzaCIsMSwicmVmcmVzaC10YWJsZSIsMywiY2xpY2siXSxbMSwib3B0aW9ucy1kcm9wZG93biIsMywiY2xyQ2xvc2VNZW51T25JdGVtQ2xpY2siXSxbInR5cGUiLCJidXR0b24iLCJj''@;'; put 'put ''bHJEcm9wZG93blRyaWdnZXIiLCIiLDEsImJ0biIsImJ0bi1zbSIsImJ0bi1vdXRsaW5lIiwiZmlsdGVyU2lkZSJdLFsic2hhcGUiLCJjb2ciLCJzaXplIiwiMTUiXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJpZ2h0Iiw0LCJjbHJJZk9wZW4iXSxbImNsclBvc2l0aW9uIiwiYm90dG9tLXJp''@;'; put 'put ''Z2h0Il0sWyJjbHJEcm9wZG93bkl0ZW0iLCIiLDMsImNsaWNrIl0sWyJzaGFwZSIsInZpZXctY2FyZHMiXSxbImNsckRyb3Bkb3duSXRlbSIsIiIsMywiY2xpY2siLDQsIm5nSWYiXSxbInNoYXBlIiwiZmlsdGVyIl0sWyJzaGFwZSIsImRvd25sb2FkIl0sWyJzaGFwZSIsImRvd25sb2FkLWNs''@;'; put 'put ''b3VkIl0sWyJzaGFwZSIsInBlbmNpbCJdLFsic2hhcGUiLCJzd2l0Y2giXSxbMSwiY2xyLWNvbC1tZC0xMiIsImluZm9CYXIiXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQiXSxbInNyYyIsIi9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9p''@;'; put 'put ''bWFnZXMvc2VsZWN0LWxpYnJhcnktcG5nIiwiYWx0Iiwic2VsZWN0IGEgbGlicmFyeSBpY29uIiwxLCJzZWxlY3QtdGFibGUtaWNvbiJdLFsiY2RzLXRleHQiLCJzZWN0aW9uIiwxLCJ0ZXh0LWNlbnRlciIsImNvbG9yLWdyYXkiLCJtdC0xMCJdLFsxLCJoZWFkZXItcm93IiwiY2xyLXJvdyIs''@;'; put 'put ''ImJvcmRlci1ib3R0b20tZGl2aWRlciIsImp1c3RpZnktY29udGVudC1iZXR3ZWVuIiwidy0xMDAiLCJtLTAiXSxbMSwidGl0bGUtY29sIiwiY2xyLWNvbC1hdXRvIiwibXQtMTUiLCJtYi0xNSJdLFsxLCJ0ZXh0LWNlbnRlciIsIm10LTEwIl0sWyJjbHJNZWRpdW0iLCIiLDQsIm5nSWYiXSxb''@;'; put 'put ''ImNsYXNzIiwibm8tdGFibGUtc2VsZWN0ZWQtaW5mbyBwb2ludGVyLWV2ZW50cy1ub25lIiw0LCJuZ0lmIl0sWyJjbGFzcyIsImxpYmluZm8gbS0wIGNsci1yb3ciLDQsIm5nSWYiXSxbMSwibm8tdGFibGUtc2VsZWN0ZWQtaW5mbyIsInBvaW50ZXItZXZlbnRzLW5vbmUiXSxbInNyYyIsIi9T''@;'; put 'put ''QVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9pbWFnZXMvc2VsZWN0LXRhYmxlLXBuZyIsImFsdCIsInNlbGVjdCB0YWJsZSBpY29uIiwxLCJzZWxlY3QtdGFibGUtaWNvbiJdLFsxLCJsaWJpbmZvIiwibS0wIiwiY2xyLXJvdyJdLFsiY2xh''@;'; put 'put ''c3MiLCJ0ZXh0LWNlbnRlciBtLTAgdy0xMDAiLDQsIm5nSWYiXSxbMSwidGV4dC1jZW50ZXIiLCJtLTAiLCJ3LTEwMCJdLFsic2hhcGUiLCJyZWZyZXNoIiwxLCJyZWZyZXNoLXRhYmxlIiwibS0wIiwzLCJjbGljayJdLFsxLCJtLTAiXSxbMSwibS0wIiwiZm9udC1ib2xkIl0sWzEsImNhcmQt''@;'; put 'put ''YmxvY2siLCJub0RhdGEiXSxbInNoYXBlIiwid2FybmluZy1zdGFuZGFyZCIsInNpemUiLCI2MCIsMSwiaXMtaW5mbyJdLFsiY2xhc3MiLCJ0ZXh0LWNlbnRlciBjb2xvci1ncmF5Iiw0LCJuZ0lmIl0sWzEsInRleHQtY2VudGVyIiwiY29sb3ItZ3JheSJdLFsxLCJjbHItZmxleC0xIl0sWyJo''@;'; put 'put ''b3RJZCIsImhvdEluc3RhbmNlIiwiaWQiLCJob3RUYWJsZSIsImNsYXNzTmFtZSIsImh0RGFyayIsInN0cmV0Y2hIIiwiYWxsIiwzLCJtdWx0aUNvbHVtblNvcnRpbmciLCJ2aWV3cG9ydFJvd1JlbmRlcmluZ09mZnNldCIsImRhdGEiLCJjb2xIZWFkZXJzIiwiY29sdW1ucyIsImNvcHlQYXN0''@;'; put 'put ''ZSIsImNvbnRleHRNZW51IiwiZmlsdGVycyIsImRyb3Bkb3duTWVudSIsImhlaWdodCIsIm1vZGlmeUNvbFdpZHRoIiwiY2VsbHMiLCJtYXhSb3dzIiwibWFudWFsQ29sdW1uUmVzaXplIiwiYWZ0ZXJHZXRDb2xIZWFkZXIiLCJyb3dIZWFkZXJzIiwicm93SGVhZGVyV2lkdGgiLCJyb3dIZWln''@;'; put 'put ''aHRzIiwibGljZW5zZUtleSJdLFsxLCJtdC0yLWkiLCJ3LTEwMCIsInRleHQtY2VudGVyIl1dLHRlbXBsYXRlOmZ1bmN0aW9uKGQsaCl7aWYoMSZkKXtjb25zdCBmPU9uKCk7ZGUoMCwiYXBwLXNpZGViYXIiLDUpLEZ0KCJzY3JvbGxlZFRvQm90dG9tIixmdW5jdGlvbigpe3JldHVybiB3dChm''@;'; put 'put ''KSxDdChoLmxvYWRNb3JlTGlicmFyaWVzKCkpfSksZ3QoMSxqQXQsMiwwLCJkaXYiLDYpLGRlKDIsImNsci10cmVlIiksZ3QoMyxaQXQsNiwzLCJjbHItdHJlZS1ub2RlIiw3KSg0LG5rdCwyLDEsIm5nLWNvbnRhaW5lciIsOCksaGUoKSxndCg1LHJrdCwzLDAsImRpdiIsOSksaGUoKSxkZSg2''@;'; put 'put ''LCJkaXYiLDEwKSxndCg3LGlrdCwxNCwwLCJkaXYiLDExKSg4LG9rdCwxLDAsImRpdiIsMTIpLGRlKDksImNsci1tb2RhbCIsMTMpLHBpKCJjbHJNb2RhbE9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSx2aShoLm9wZW5Eb3dubG9hZCxNKXx8KGgub3BlbkRvd25sb2FkPU0p''@;'; put 'put ''LEN0KE0pfSksZGUoMTAsImgzIiwxNCksTGUoMTEsIkRvd25sb2FkIiksaGUoKSxkZSgxMiwiZGl2IiwxNSkoMTMsImRpdiIsMTYpKDE0LCJjbHItc2VsZWN0LWNvbnRhaW5lciIsMTcpKDE1LCJsYWJlbCIpLExlKDE2LCJQbGVhc2UgY2hvb3NlIGRvd25sb2FkIGZvcm1hdCIpLGhlKCksZGUo''@;'; put 'put ''MTcsInNlbGVjdCIsMTgpLHBpKCJuZ01vZGVsQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksdmkoaC5kb3dubG9hZEZvcm1hdCxNKXx8KGguZG93bmxvYWRGb3JtYXQ9TSksQ3QoTSl9KSxkZSgxOCwib3B0aW9uIiwxOSksTGUoMTksIkNTViIpLGhlKCksZGUoMjAsIm9wdGlvbiIs''@;'; put 'put ''MjApLExlKDIxLCJEYXRhbGluZXMgKGNhcmRzIGZpbGUpIiksaGUoKSxkZSgyMiwib3B0aW9uIiwyMSksTGUoMjMsIkRETCAoUEdTUUwgRmxhdm91cikiKSxoZSgpLGRlKDI0LCJvcHRpb24iLDIyKSxMZSgyNSwiRERMIChTQVMgRmxhdm91cikiKSxoZSgpLGRlKDI2LCJvcHRpb24iLDIzKSxM''@;'; put 'put ''ZSgyNywiRERMIChUU1FMIEZsYXZvdXIpIiksaGUoKSxkZSgyOCwib3B0aW9uIiwyNCksTGUoMjksIkV4Y2VsICgueGxzeCkiKSxoZSgpLGRlKDMwLCJvcHRpb24iLDI1KSxMZSgzMSwiTWFya2Rvd24gKC5tZCkiKSxoZSgpKCkoKSgpKCksZGUoMzIsImRpdiIsMjYpKDMzLCJidXR0b24iLDI3''@;'; put 'put ''KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgub3BlbkRvd25sb2FkPSExKX0pLExlKDM0LCIgQ2FuY2VsICIpLGhlKCksZGUoMzUsImJ1dHRvbiIsMjgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5kb3dubG9hZEZvcm1hdC5pbmNsdWRl''@;'; put 'put ''cygiRERMIik/aC5kb3dubG9hZERETCgpOmguZG93bmxvYWREYXRhKCkpfSksTGUoMzYsIiBPayAiKSxoZSgpKCkoKSxkZSgzNywiY2xyLW1vZGFsIiwxMykscGkoImNsck1vZGFsT3BlbkNoYW5nZSIsZnVuY3Rpb24oTSl7cmV0dXJuIHd0KGYpLHZpKGgud2ViUXVlcnksTSl8fChoLndlYlF1''@;'; put 'put ''ZXJ5PU0pLEN0KE0pfSksZGUoMzgsImgzIiwxNCksTGUoMzksIiBXZWIgUXVlcnkgVVJMICIpLGhlKCksZGUoNDAsImRpdiIsMjkpKDQxLCJkaXYiLDMwKSg0MiwiZGl2IiwzMSkoNDMsImRpdiIsMzIpKDQ0LCJkaXYiLDMzKSg0NSwic3BhbiIpLExlKDQ2LCJDb3B5IHRoZSBiZWxvdyBpbnRv''@;'; put 'put ''IHlvdXIgcHJlZmVycmVkIGNsaWVudCB0b29sOiIpLGhlKCksZGUoNDcsImRpdiIsMzQpKDQ4LCJkaXYiLDM1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGgud2ViUXVlcnlUYWI9ITAsQ3QoaC5zaG93V2ViUXVlcnkoKSl9KSxHdCg0OSwiaW5wdXQiLDM2KSxkZSg1MCwi''@;'; put 'put ''bGFiZWwiKSxMZSg1MSwiVEFCIiksaGUoKSgpLGRlKDUyLCJkaXYiLDM1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGgud2ViUXVlcnlUYWI9ITEsQ3QoaC5zaG93V2ViUXVlcnkoKSl9KSxHdCg1MywiaW5wdXQiLDM2KSxkZSg1NCwibGFiZWwiKSxMZSg1NSwiQ1NWIiks''@;'; put 'put ''aGUoKSgpKCkoKSxkZSg1NiwiZGl2IiwzNykoNTcsInRleHRhcmVhIiwzOCwwKSxGdCgiZm9jdXMiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSxDdChoLm9uQ2xpQ29tbWFuZEZvY3VzKE0pKX0pLExlKDU5LCIgICAgICAgICAgICAgICIpLGhlKCkoKSxkZSg2MCwiZGl2IiwzOSkoNjEsImJ1''@;'; put 'put ''dHRvbiIsNDApLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5jb3B5VG9DbGlwKCkpfSksTGUoNjIsIiBjb3B5IHRvIGNsaXBib2FyZCAiKSxoZSgpKCkoKSgpKCkoKSxkZSg2MywiZGl2IiwyNikoNjQsImJ1dHRvbiIsMjcpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gd3QoZiksQ3QoaC53ZWJRdWVyeT0hMSl9KSxMZSg2NSwiIGNsb3NlICIpLGhlKCkoKSgpLGRlKDY2LCJjbHItbW9kYWwiLDQxKSxwaSgiY2xyTW9kYWxPcGVuQ2hhbmdlIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksdmkoaC5maWx0ZXIsTSl8fChoLmZpbHRlcj1NKSxDdChNKX0p''@;'; put 'put ''LGRlKDY3LCJoMyIsMTQpLExlKDY4LCIgRmlsdGVyIGZvciB0YWJsZToiKSxkZSg2OSwic3BhbiIpLExlKDcwKSxoZSgpKCksZGUoNzEsImRpdiIsMTUpLGd0KDcyLGFrdCwyLDAsImFwcC1xdWVyeSIsNDIpLGhlKCksZGUoNzMsImRpdiIsMjYpKDc0LCJidXR0b24iLDQzKSxGdCgiY2xpY2si''@;'; put 'put ''LGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgucmVzZXRGaWx0ZXIoKSl9KSxMZSg3NSwiIHJlc2V0IGZpbHRlciAiKSxoZSgpLGRlKDc2LCJidXR0b24iLDQ0KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLGguZmlsdGVyPSExLEN0KGgucmVtb3ZlUXVlcnkoKSl9KSxM''@;'; put 'put ''ZSg3NywiIENhbmNlbCAiKSxoZSgpLGRlKDc4LCJidXR0b24iLDQ1KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGguc2VuZENsYXVzZSgpKX0pLExlKDc5LCIgT2sgIiksaGUoKSgpKCksZGUoODAsImNsci1tb2RhbCIsNDYpLHBpKCJjbHJNb2RhbE9wZW5DaGFuZ2Ui''@;'; put 'put ''LGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSx2aShoLnF1ZXJ5RXJyLE0pfHwoaC5xdWVyeUVycj1NKSxDdChNKX0pLGRlKDgxLCJoMyIsNDcpLExlKDgyLCJFcnJvciIpLGhlKCksZGUoODMsImRpdiIsMTUpKDg0LCJwIiksTGUoODUpLGhlKCkoKSxkZSg4NiwiZGl2IiwyNikoODcsImJ1dHRv''@;'; put 'put ''biIsNDgpLEZ0KCJjbGljayIsZnVuY3Rpb24oKXtyZXR1cm4gd3QoZiksQ3QoaC5xdWVyeUVycj0hMSl9KSxMZSg4OCwiIENhbmNlbCAiKSxoZSgpLGRlKDg5LCJidXR0b24iLDQ5KSxGdCgiY2xpY2siLGZ1bmN0aW9uKCl7cmV0dXJuIHd0KGYpLEN0KGgucXVlcnlFcnI9ITEpfSksTGUoOTAs''@;'; put 'put ''IiBPayAiKSxoZSgpKCkoKSxndCg5MSxza3QsNiwwLCJkaXYiLDUwKSg5MixVa3QsOCw2LCJkaXYiLDUxKSxoZSgpLGRlKDkzLCJhcHAtZGF0YXNldC1pbmZvIiw1MikscGkoIm9wZW5DaGFuZ2UiLGZ1bmN0aW9uKE0pe3JldHVybiB3dChmKSx2aShoLmRhdGFzZXRJbmZvLE0pfHwoaC5kYXRh''@;'; put 'put ''c2V0SW5mbz1NKSxDdChNKX0pLEZ0KCJyb3dDbGlja2VkIixmdW5jdGlvbihNKXtyZXR1cm4gd3QoZiksQ3QoaC5kYXRhc2V0SW5mb01vZGFsUm93Q2xpY2tlZChNKSl9KSxoZSgpLGRlKDk0LCJhcHAtdmlld2JveGVzIiw1MykscGkoInZpZXdib3hNb2RhbENoYW5nZSIsZnVuY3Rpb24oTSl7''@;'; put 'put ''cmV0dXJuIHd0KGYpLHZpKGgudmlld2JveE9wZW4sTSl8fChoLnZpZXdib3hPcGVuPU0pLEN0KE0pfSksaGUoKX1pZigyJmQpe2NvbnN0IGY9dm8oNTgpO2ZlKCkseGUoIm5nSWYiLGgubGlicmFyaWVzTG9hZGluZyksZmUoMikseGUoIm5nSWYiLGgubGlicmFyaWVzKSxmZSgpLHhlKCJuZ0Zv''@;'; put 'put ''ck9mIixoLmxpYnJhcmllcyksZmUoKSx4ZSgibmdJZiIsaC5saWJyYXJpZXNQYWdpbmcpLGZlKDIpLHhlKCJuZ0lmIixoLm51bGxWYXJpYWJsZXMpLGZlKCkseGUoIm5nSWYiLGgubnVsbFZhcmlhYmxlcyksZmUoKSxmaSgiY2xyTW9kYWxPcGVuIixoLm9wZW5Eb3dubG9hZCkseGUoImNsck1v''@;'; put 'put ''ZGFsU2l6ZSIsIm1kIiksZmUoOCksZmkoIm5nTW9kZWwiLGguZG93bmxvYWRGb3JtYXQpLGZlKDE4KSx4ZSgiaWQiLGgudGFibGVUaXRsZSksZmUoMiksZmkoImNsck1vZGFsT3BlbiIsaC53ZWJRdWVyeSkseGUoImNsck1vZGFsU2l6ZSIsImxnIiksZmUoMTIpLHhlKCJjaGVja2VkIixoLndl''@;'; put 'put ''YlF1ZXJ5VGFiKSxmZSg0KSx4ZSgiY2hlY2tlZCIsIWgud2ViUXVlcnlUYWIpLGZlKDQpLHhlKCJ2YWx1ZSIsaC53ZWJRdWVyeVRleHQpLGZlKDQpLHhlKCJuZ3hDbGlwYm9hcmQiLGYpLGZlKDUpLGZpKCJjbHJNb2RhbE9wZW4iLGguZmlsdGVyKSx4ZSgiY2xyTW9kYWxTaXplIiwieGwiKSgi''@;'; put 'put ''Y2xyTW9kYWxDbG9zYWJsZSIsITEpLGZlKDQpLFJyKCIgIixoLmxpYlRhYiwiICIpLGZlKDIpLHhlKCJuZ0lmIixoLmZpbHRlciksZmUoNikseGUoImNsckxvYWRpbmciLGguc3VibWl0TG9hZGluZyksZmUoMiksZmkoImNsck1vZGFsT3BlbiIsaC5xdWVyeUVyciksZmUoNSksX3IoaC5xdWVy''@;'; put 'put ''eUVyck1lc3NhZ2UpLGZlKDYpLHhlKCJuZ0lmIixoLmxvYWRpbmdUYWJsZVZpZXcpLGZlKCkseGUoIm5nSWYiLCFoLmxvYWRpbmdUYWJsZVZpZXcpLGZlKCksZmkoIm9wZW4iLGguZGF0YXNldEluZm8pLHhlKCJkc21ldGEiLGguZHNtZXRhKSgidmVyc2lvbnMiLGgudmVyc2lvbnMpLGZlKCks''@;'; put 'put ''ZmkoInZpZXdib3hNb2RhbCIsaC52aWV3Ym94T3Blbil9fSxkZXBlbmRlbmNpZXM6W2M2ZSxzcyx5byxiMixpcCxQQXQsbzcsVWYsWmYsUWwsQjEsemYsUXMscjcsWXMscHAsU2gsT2QsZGcsT2wsb3UsS3UsQjAseDIsVDIsdXMsajFlLFcxLFB5LERkLElkLFp5LFV5LFlMLGlnLGg3LGY3LE95''@;'; put 'put ''LHA3LG03LGc3LF9oLHhfLHQ0LGg2ZSxzTyxCZWUsd3csZTQscDZlLE5BdF0sc3R5bGVzOlsiLmNhcmRbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MDtmbGV4OjE7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn1jbHItdHJlZS1ub2RlW19uZ2NvbnRlbnQtJUNPTVAl''@;'; put 'put ''XSAgIGJ1dHRvbltfbmdjb250ZW50LSVDT01QJV17d2hpdGUtc3BhY2U6bm93cmFwfS50b2dnbGUtc3dpdGNoW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGlucHV0W3R5cGU9Y2hlY2tib3hdW19uZ2NvbnRlbnQtJUNPTVAlXTpjaGVja2VkICsgbGFiZWxbX25nY29udGVudC0lQ09NUCVdOmJlZm9y''@;'; put 'put ''ZXtib3JkZXItY29sb3I6IzMxNDM1MTtiYWNrZ3JvdW5kLWNvbG9yOiMzMTQzNTEhaW1wb3J0YW50O3RyYW5zaXRpb246LjE1cyBlYXNlLWluO3RyYW5zaXRpb24tcHJvcGVydHk6Ym9yZGVyLWNvbG9yLGJhY2tncm91bmQtY29sb3J9LmhlYWRlci1yb3dbX25nY29udGVudC0lQ09NUCVdICAg''@;'; put 'put ''LnRpdGxlLWNvbFtfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcn0uaGVhZGVyLXJvd1tfbmdjb250ZW50LSVDT01QJV0gICAub3B0aW9ucy1jb2xbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9''@;'; put 'put ''LnN3W19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW46MXJlbSAwcmVtIC41cmVtIDFyZW19LmluZm9CYXJbX25nY29udGVudC0lQ09NUCVde21hcmdpbi10b3A6MTBweDtiYWNrZ3JvdW5kOiM0OTU5Njc7Y29sb3I6I2ZmZjt0ZXh0LWFsaWduOmNlbnRlcjtwYWRkaW5nOjNweDtmb250LXNpemU6''@;'; put 'put ''MTZweH0uZmlsdGVyU2lkZVtfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXRvcDoyNnB4O21hcmdpbi1ib3R0b206MTlweH0ub3B0aW9ucy1kcm9wZG93bltfbmdjb250ZW50LSVDT01QJV0gICAgIGNsci1pY29ue21hcmdpbi1yaWdodDo1cHh9LmRyb3Bkb3duLW1lbnVbX25nY29udGVudC0l''@;'; put 'put ''Q09NUCVde3dpZHRoOjE4MHB4O21hcmdpbi10b3A6LTE4cHg7cGFkZGluZzowfS5kcm9wZG93bi1tZW51W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC5idG5bX25nY29udGVudC0lQ09NUCVde3dpZHRoOjEwMCU7dGV4dC10cmFuc2Zvcm06bm9uZX0uY2FyZEZsZXhbX25nY29udGVudC0lQ09NUCVd''@;'; put 'put ''e2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5ub0RhdGFbX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7ZmxleDoxfS5maWx0ZXJCdG5bX25nY29u''@;'; put 'put ''dGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmVkaXRCdG5bX25nY29udGVudC0lQ09NUCVde2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0uYnRuVmlld1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luOjAhaW1wb3J0YW50''@;'; put 'put ''fS5jb250ZW50LWFyZWFbX25nY29udGVudC0lQ09NUCVde3BhZGRpbmc6LjVyZW0haW1wb3J0YW50O2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmRvd25sb2FkLXNlbGVjdFtfbmdjb250ZW50LSVDT01QJV0gICAgIC5jbHItc2VsZWN0LXdyYXBwZXJ7bWF4LWhlaWdodDp1''@;'; put 'put ''bnNldCFpbXBvcnRhbnR9LnJlZnJlc2gtdGFibGVbX25nY29udGVudC0lQ09NUCVde2N1cnNvcjpwb2ludGVyO21hcmdpbi1sZWZ0OjVweH0ubGliaW5mb1tfbmdjb250ZW50LSVDT01QJV17cGFkZGluZzoxMHB4IDIwcHg7b3ZlcmZsb3c6YXV0b31ob3QtdGFibGVbX25nY29udGVudC0lQ09N''@;'; put 'put ''UCVdICAgICAuaGFuZHNvbnRhYmxlIHRib2R5IHRoLmh0X19oaWdobGlnaHQucHJpbWFyeUtleUhlYWRlclN0eWxlLCBob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICAuaGFuZHNvbnRhYmxlIHRoZWFkIHRoLmh0X19oaWdobGlnaHQucHJpbWFyeUtleUhlYWRlclN0eWxle2JhY2tn''@;'; put 'put ''cm91bmQtY29sb3I6IzMwNmIwMGIwIWltcG9ydGFudH1ob3QtdGFibGVbX25nY29udGVudC0lQ09NUCVdICAgICAucHJpbWFyeUtleUhlYWRlclN0eWxle2JhY2tncm91bmQtY29sb3I6IzMwNmIwMDZlIWltcG9ydGFudH0ubm8tdGFibGUtc2VsZWN0ZWQtaW5mb1tfbmdjb250ZW50LSVDT01Q''@;'; put 'put ''JV17YmFja2dyb3VuZDpub25lO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS53ZWItcXVlcnlbX25nY29udGVudC0lQ09NUCVde21heC1oZWlnaHQ6MzV2aH0ud2ViLXF1ZXJ5W19uZ2NvbnRlbnQtJUNPTVAlXSAgIC53ZWItcXVlcnktdGV4''@;'; put 'put ''dFtfbmdjb250ZW50LSVDT01QJV17bWluLWhlaWdodDoxMDBweDttYXgtaGVpZ2h0OjEwMHB4O3dpZHRoOjEwMCUhaW1wb3J0YW50fS53ZWItcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLndlYi1xdWVyeS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgLmNsci1jb250cm9sLWNv''@;'; put 'put ''bnRhaW5lcnt3aWR0aDoxMDAlfS53ZWItcXVlcnlbX25nY29udGVudC0lQ09NUCVdICAgLndlYi1xdWVyeS13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgICAgY2xyLXRleHRhcmVhLWNvbnRhaW5lcnttYXJnaW46MCFpbXBvcnRhbnR9LndlYi1xdWVyeVtfbmdjb250ZW50LSVDT01QJV0g''@;'; put 'put ''ICAud2ViLXF1ZXJ5LXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLXRleHRhcmVhLXdyYXBwZXJ7bWFyZ2luOjAhaW1wb3J0YW50fS50YWJsZS1zZWFyY2gtd3JhcHBlcltfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLWxlZnQ6MH0udGFibGUtc2VhcmNoLXdyYXBwZXJbX25n''@;'; put 'put ''Y29udGVudC0lQ09NUCVdICAgZm9ybVtfbmdjb250ZW50LSVDT01QJV17cGFkZGluZy1sZWZ0OjB9LnRhYmxlLXNlYXJjaC13cmFwcGVyW19uZ2NvbnRlbnQtJUNPTVAlXSAgIGNsci1pY29uW19uZ2NvbnRlbnQtJUNPTVAlXXttYXJnaW4tdG9wOjRweH0udGFibGUtc2VhcmNoLXdyYXBwZXJb''@;'; put 'put ''X25nY29udGVudC0lQ09NUCVdICAgICBjbHItaW5wdXQtY29udGFpbmVye21hcmdpbi10b3A6MH0udGFibGUtc2VhcmNoLXdyYXBwZXJbX25nY29udGVudC0lQ09NUCVdICAgICAuY2xyLWNvbnRyb2wtY29udGFpbmVye21hcmdpbi1sZWZ0OjB9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0''@;'; put 'put ''aDogNzY4cHgpey5maWx0ZXJCdG5bX25nY29udGVudC0lQ09NUCVdLCAuZWRpdEJ0bltfbmdjb250ZW50LSVDT01QJV17ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXJ9fUBtZWRpYSAobWluLXdpZHRoOiA1NzZweCl7LnJvd1tfbmdjb250ZW50LSVDT01QJV17bWFyZ2luLXJp''@;'; put 'put ''Z2h0OjByZW07bWFyZ2luLWxlZnQ6MHJlbX19Il19KX19cmV0dXJuIGN9KSgpO2NvbnN0IFprdD1be3BhdGg6IiIsY29tcG9uZW50OnhUdCxjaGlsZHJlbjpbe3BhdGg6IiIscGF0aE1hdGNoOiJmdWxsIixyZWRpcmVjdFRvOiJkYXRhIn0se3BhdGg6ImRhdGEiLGNvbXBvbmVudDpSTn0se3Bh''@;'; put 'put ''dGg6ImRhdGEiLGNvbXBvbmVudDpSTn0se3BhdGg6ImRhdGEvOmxpYk1lbS86ZmlsdGVySWQiLGNvbXBvbmVudDpSTn0se3BhdGg6ImRhdGEvOmxpYk1lbSIsY29tcG9uZW50OlJOfSx7cGF0aDoibGluZWFnZSIsY29tcG9uZW50OklOfSx7cGF0aDoibGluZWFnZS86dGFibGVpZC86ZGlyZWN0''@;'; put 'put ''aW9uIixjb21wb25lbnQ6SU59LHtwYXRoOiJsaW5lYWdlL2NvbHVtbi86Y29sdXJpLzpkaXJlY3Rpb24iLGNvbXBvbmVudDpJTn0se3BhdGg6ImxpbmVhZ2UvY29sdW1uLzpjb2x1cmkvOmRpcmVjdGlvbi86cmVsb2FkIixjb21wb25lbnQ6SU59LHtwYXRoOiJ2aXlhLWFwaS1leHBsb3JlciIs''@;'; put 'put ''Y29tcG9uZW50OlJBdH0se3BhdGg6Im1ldGFkYXRhIixjb21wb25lbnQ6THRlfSx7cGF0aDoibWV0YWRhdGEvb2JqZWN0LzpvYmplY3RJRCIsY29tcG9uZW50Okx0ZX0se3BhdGg6Im1ldGFkYXRhL29iamVjdC86b2JqZWN0SUQvOm9iamVjdE5hbWUiLGNvbXBvbmVudDpMdGV9LHtwYXRoOiJ1''@;'; put 'put ''c2VybmF2Iixjb21wb25lbnQ6TVR0LGNoaWxkcmVuOlt7cGF0aDoiIixwYXRoTWF0Y2g6ImZ1bGwiLHJlZGlyZWN0VG86Imdyb3VwcyJ9LHtwYXRoOiJ1c2VycyIsY29tcG9uZW50Om43ZX0se3BhdGg6InVzZXJzLzp1cmkiLGNvbXBvbmVudDpuN2V9LHtwYXRoOiJncm91cHMiLGNvbXBvbmVu''@;'; put 'put ''dDpMNmV9LHtwYXRoOiJncm91cHMvOnVyaSIsY29tcG9uZW50Okw2ZX0se3BhdGg6InJvbGVzIixjb21wb25lbnQ6dDdlfSx7cGF0aDoicm9sZXMvOnVyaSIsY29tcG9uZW50OnQ3ZX1dfV19XTtsZXQgV2t0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFjPWZ1bmN0aW9uKGQp''@;'; put 'put ''e3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOltqYy5mb3JDaGlsZChaa3QpLGpjXX0pfX1yZXR1cm4gY30pKCksWWt0PSgoKT0+e2NsYXNzIGN7c3RhdGlje3RoaXMuXHUwMjc1ZmFj''@;'; put 'put ''PWZ1bmN0aW9uKGQpe3JldHVybiBuZXcoZHx8Yyl9fXN0YXRpY3t0aGlzLlx1MDI3NW1vZD1raSh7dHlwZTpjfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtpbXBvcnRzOlttNmUsTG8sV2t0LEZBdCxEYyxqMCxuOS5mb3JSb290KCksajksX3csdkEsemVlLEsyXX0pfX1yZXR1cm4gY30p''@;'; put 'put ''KCk7Y29uc3QgJGt0PWpjLmZvclJvb3QoW3twYXRoOiIiLHJlZGlyZWN0VG86ImhvbWUiLHBhdGhNYXRjaDoiZnVsbCJ9LHtwYXRoOiJ2aWV3Iixsb2FkQ2hpbGRyZW46KCk9PllrdH0se3BhdGg6InJldmlldyIsY29tcG9uZW50Okd5dCxjaGlsZHJlbjpbe3BhdGg6IiIscGF0aE1hdGNoOiJm''@;'; put 'put ''dWxsIixyZWRpcmVjdFRvOiJ0b2FwcHJvdmUifSx7cGF0aDoiIixsb2FkQ2hpbGRyZW46KCk9Pll5dH1dfSx7cGF0aDoibGljZW5zaW5nIixsb2FkQ2hpbGRyZW46KCk9PmRidH0se3BhdGg6ImhvbWUiLGxvYWRDaGlsZHJlbjooKT0+RXZ0fSx7cGF0aDoiZWRpdG9yIixsb2FkQ2hpbGRyZW46''@;'; put 'put ''KCk9Pm03dH0se3BhdGg6InN0YWdlIixsb2FkQ2hpbGRyZW46KCk9PnJfdH0se3BhdGg6InN5c3RlbSIsbG9hZENoaWxkcmVuOigpPT5tX3R9LHtwYXRoOiJkZXBsb3kiLGxvYWRDaGlsZHJlbjooKT0+VSRlfSx7cGF0aDoiKioiLGNvbXBvbmVudDpvJGV9XSx7dXNlSGFzaDohMH0pO2xldCBL''@;'; put 'put ''a3Q9KCgpPT57Y2xhc3MgY3tzdGF0aWN7dGhpcy5cdTAyNzVmYWM9ZnVuY3Rpb24oZCl7cmV0dXJuIG5ldyhkfHxjKX19c3RhdGlje3RoaXMuXHUwMjc1bW9kPWtpKHt0eXBlOmMsYm9vdHN0cmFwOltnWWVdfSl9c3RhdGlje3RoaXMuXHUwMjc1aW5qPUFyKHtwcm92aWRlcnM6W1FSLFZoLFpl''@;'; put 'put ''ZSxqUl0saW1wb3J0czpbaSRlLG1hZSxEYyxjT2UsTlRlLCRrdCxfdyxqMCxqOSx2QSxLMix1QXRdfSl9fXJldHVybiBjfSkoKTtzQ2UoKS5ib290c3RyYXBNb2R1bGUoS2t0KX0sMzczNDoobW9kdWxlLF9fdW51c2VkX3dlYnBhY2tfZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKT0+e3Zh''@;'; put 'put ''ciBfYXN5bmNUb0dlbmVyYXRvcj1fX3dlYnBhY2tfcmVxdWlyZV9fKDI5MjkzKS5kZWZhdWx0LF93cmFwQXN5bmNHZW5lcmF0b3I9X193ZWJwYWNrX3JlcXVpcmVfXyg0Mjk1OCkuZGVmYXVsdCxfYXdhaXRBc3luY0dlbmVyYXRvcj1fX3dlYnBhY2tfcmVxdWlyZV9fKDUzMzQ0KS5kZWZhdWx0''@;'; put 'put ''LF9hc3luY0dlbmVyYXRvckRlbGVnYXRlPV9fd2VicGFja19yZXF1aXJlX18oOTM1MTMpLmRlZmF1bHQsX2FzeW5jSXRlcmF0b3I9X193ZWJwYWNrX3JlcXVpcmVfXyg4Mjg4MSkuZGVmYXVsdCxfO3NlbGYsXz0oKT0+KCgpPT57dmFyIF9fd2VicGFja19tb2R1bGVzX189ezMwNjI6KHVlLHEs''@;'; put 'put ''Xyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg4NzY0KS5CdWZmZXI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuQ3N2Rm9ybWF0dGVyU3RyZWFtPXZvaWQgMDtjb25zdCB5PV8oMjgzMCksZz1fKDk5NDcpO3EuQ3N2Rm9ybWF0dGVyU3RyZWFtPWNs''@;'; put 'put ''YXNzIEIgZXh0ZW5kcyB5LlRyYW5zZm9ybXtjb25zdHJ1Y3RvcihQKXtzdXBlcih7d3JpdGFibGVPYmplY3RNb2RlOlAub2JqZWN0TW9kZX0pLHRoaXMuaGFzV3JpdHRlbkJPTT0hMSx0aGlzLmZvcm1hdHRlck9wdGlvbnM9UCx0aGlzLnJvd0Zvcm1hdHRlcj1uZXcgZy5Sb3dGb3JtYXR0ZXIo''@;'; put 'put ''UCksdGhpcy5oYXNXcml0dGVuQk9NPSFQLndyaXRlQk9NfXRyYW5zZm9ybShQKXtyZXR1cm4gdGhpcy5yb3dGb3JtYXR0ZXIucm93VHJhbnNmb3JtPVAsdGhpc31fdHJhbnNmb3JtKFAsRixPKXtsZXQgej0hMTt0cnl7dGhpcy5oYXNXcml0dGVuQk9NfHwodGhpcy5wdXNoKHRoaXMuZm9ybWF0''@;'; put 'put ''dGVyT3B0aW9ucy5CT00pLHRoaXMuaGFzV3JpdHRlbkJPTT0hMCksdGhpcy5yb3dGb3JtYXR0ZXIuZm9ybWF0KFAsKE4sTCk9Pk4/KHo9ITAsTyhOKSk6KEwmJkwuZm9yRWFjaChLPT57dGhpcy5wdXNoKEkuZnJvbShLLCJ1dGY4IikpfSksej0hMCxPKCkpKX1jYXRjaChOKXtpZih6KXRocm93''@;'; put 'put ''IE47TyhOKX19X2ZsdXNoKFApe3RoaXMucm93Rm9ybWF0dGVyLmZpbmlzaCgoRixPKT0+Rj9QKEYpOihPJiZPLmZvckVhY2goej0+e3RoaXMucHVzaChJLmZyb20oeiwidXRmOCIpKX0pLFAoKSkpfX19LDY3NjM6KHVlLHEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShx''@;'; put 'put ''LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLkZvcm1hdHRlck9wdGlvbnM9dm9pZCAwLHEuRm9ybWF0dGVyT3B0aW9ucz1jbGFzcyBfe2NvbnN0cnVjdG9yKHk9e30pe3ZhciBnO3RoaXMub2JqZWN0TW9kZT0hMCx0aGlzLmRlbGltaXRlcj0iLCIsdGhpcy5yb3dEZWxpbWl0ZXI9IlxuIix0''@;'; put 'put ''aGlzLnF1b3RlPSciJyx0aGlzLmVzY2FwZT10aGlzLnF1b3RlLHRoaXMucXVvdGVDb2x1bW5zPSExLHRoaXMucXVvdGVIZWFkZXJzPXRoaXMucXVvdGVDb2x1bW5zLHRoaXMuaGVhZGVycz1udWxsLHRoaXMuaW5jbHVkZUVuZFJvd0RlbGltaXRlcj0hMSx0aGlzLndyaXRlQk9NPSExLHRoaXMu''@;'; put 'put ''Qk9NPSJcdWZlZmYiLHRoaXMuYWx3YXlzV3JpdGVIZWFkZXJzPSExLE9iamVjdC5hc3NpZ24odGhpcyx5fHx7fSksdHlwZW9mIHk/LnF1b3RlSGVhZGVycz4idSImJih0aGlzLnF1b3RlSGVhZGVycz10aGlzLnF1b3RlQ29sdW1ucyksITA9PT15Py5xdW90ZT90aGlzLnF1b3RlPSciJzohMT09''@;'; put 'put ''PXk/LnF1b3RlJiYodGhpcy5xdW90ZT0iIiksInN0cmluZyIhPXR5cGVvZiB5Py5lc2NhcGUmJih0aGlzLmVzY2FwZT10aGlzLnF1b3RlKSx0aGlzLnNob3VsZFdyaXRlSGVhZGVycz0hIXRoaXMuaGVhZGVycyYmKG51bGw9PT0oZz15LndyaXRlSGVhZGVycyl8fHZvaWQgMD09PWd8fGcpLHRo''@;'; put 'put ''aXMuaGVhZGVycz1BcnJheS5pc0FycmF5KHRoaXMuaGVhZGVycyk/dGhpcy5oZWFkZXJzOm51bGwsdGhpcy5lc2NhcGVkUXVvdGU9YCR7dGhpcy5lc2NhcGV9JHt0aGlzLnF1b3RlfWB9fX0sNTE4NjpmdW5jdGlvbih1ZSxxLF8peyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9faW1w''@;'; put 'put ''b3J0RGVmYXVsdHx8ZnVuY3Rpb24oUCl7cmV0dXJuIFAmJlAuX19lc01vZHVsZT9QOntkZWZhdWx0OlB9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5GaWVsZEZvcm1hdHRlcj12b2lkIDA7Y29uc3QgeT1JKF8oODA5NCkpLGc9SShfKDk3MjIp''@;'; put 'put ''KSxCPUkoXygxNjU4KSk7cS5GaWVsZEZvcm1hdHRlcj1jbGFzcyB3e2NvbnN0cnVjdG9yKEYpe3RoaXMuX2hlYWRlcnM9bnVsbCx0aGlzLmZvcm1hdHRlck9wdGlvbnM9RixudWxsIT09Ri5oZWFkZXJzJiYodGhpcy5oZWFkZXJzPUYuaGVhZGVycyksdGhpcy5SRVBMQUNFX1JFR0VYUD1uZXcg''@;'; put 'put ''UmVnRXhwKEYucXVvdGUsImciKTtjb25zdCBPPWBbJHtGLmRlbGltaXRlcn0ke0IuZGVmYXVsdChGLnJvd0RlbGltaXRlcil9fFxyfFxuXWA7dGhpcy5FU0NBUEVfUkVHRVhQPW5ldyBSZWdFeHAoTyl9c2V0IGhlYWRlcnMoRil7dGhpcy5faGVhZGVycz1GfXNob3VsZFF1b3RlKEYsTyl7Y29u''@;'; put 'put ''c3Qgej1PP3RoaXMuZm9ybWF0dGVyT3B0aW9ucy5xdW90ZUhlYWRlcnM6dGhpcy5mb3JtYXR0ZXJPcHRpb25zLnF1b3RlQ29sdW1ucztyZXR1cm4geS5kZWZhdWx0KHopP3o6QXJyYXkuaXNBcnJheSh6KT96W0ZdOm51bGwhPT10aGlzLl9oZWFkZXJzJiZ6W3RoaXMuX2hlYWRlcnNbRl1dfWZv''@;'; put 'put ''cm1hdChGLE8seil7Y29uc3QgTj1gJHtnLmRlZmF1bHQoRik/IiI6Rn1gLnJlcGxhY2UoL1wwL2csIiIpLHtmb3JtYXR0ZXJPcHRpb25zOkx9PXRoaXM7cmV0dXJuIiIhPT1MLnF1b3RlJiYtMSE9PU4uaW5kZXhPZihMLnF1b3RlKT90aGlzLnF1b3RlRmllbGQoTi5yZXBsYWNlKHRoaXMuUkVQ''@;'; put 'put ''TEFDRV9SRUdFWFAsTC5lc2NhcGVkUXVvdGUpKTotMSE9PU4uc2VhcmNoKHRoaXMuRVNDQVBFX1JFR0VYUCl8fHRoaXMuc2hvdWxkUXVvdGUoTyx6KT90aGlzLnF1b3RlRmllbGQoTik6Tn1xdW90ZUZpZWxkKEYpe2NvbnN0e3F1b3RlOk99PXRoaXMuZm9ybWF0dGVyT3B0aW9ucztyZXR1cm5g''@;'; put 'put ''JHtPfSR7Rn0ke099YH19fSw3MTgxOmZ1bmN0aW9uKHVlLHEsXyl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihGKXtyZXR1cm4gRiYmRi5fX2VzTW9kdWxlP0Y6e2RlZmF1bHQ6Rn19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2Vz''@;'; put 'put ''TW9kdWxlIix7dmFsdWU6ITB9KSxxLlJvd0Zvcm1hdHRlcj12b2lkIDA7Y29uc3QgeT1JKF8oODQyMykpLGc9SShfKDIzMDcpKSxCPV8oNTE4Niksdz1fKDQ2OTIpO2NsYXNzIFB7Y29uc3RydWN0b3IoTyl7dGhpcy5yb3dDb3VudD0wLHRoaXMuZm9ybWF0dGVyT3B0aW9ucz1PLHRoaXMuZmll''@;'; put 'put ''bGRGb3JtYXR0ZXI9bmV3IEIuRmllbGRGb3JtYXR0ZXIoTyksdGhpcy5oZWFkZXJzPU8uaGVhZGVycyx0aGlzLnNob3VsZFdyaXRlSGVhZGVycz1PLnNob3VsZFdyaXRlSGVhZGVycyx0aGlzLmhhc1dyaXR0ZW5IZWFkZXJzPSExLG51bGwhPT10aGlzLmhlYWRlcnMmJih0aGlzLmZpZWxkRm9y''@;'; put 'put ''bWF0dGVyLmhlYWRlcnM9dGhpcy5oZWFkZXJzKSxPLnRyYW5zZm9ybSYmKHRoaXMucm93VHJhbnNmb3JtPU8udHJhbnNmb3JtKX1zdGF0aWMgaXNSb3dIYXNoQXJyYXkoTyl7cmV0dXJuISFBcnJheS5pc0FycmF5KE8pJiZBcnJheS5pc0FycmF5KE9bMF0pJiYyPT09T1swXS5sZW5ndGh9c3Rh''@;'; put 'put ''dGljIGlzUm93QXJyYXkoTyl7cmV0dXJuIEFycmF5LmlzQXJyYXkoTykmJiF0aGlzLmlzUm93SGFzaEFycmF5KE8pfXN0YXRpYyBnYXRoZXJIZWFkZXJzKE8pe3JldHVybiBQLmlzUm93SGFzaEFycmF5KE8pP08ubWFwKHo9PnpbMF0pOkFycmF5LmlzQXJyYXkoTyk/TzpPYmplY3Qua2V5cyhP''@;'; put 'put ''KX1zdGF0aWMgY3JlYXRlVHJhbnNmb3JtKE8pe3JldHVybiB3LmlzU3luY1RyYW5zZm9ybShPKT8oeixOKT0+e2xldCBMPW51bGw7dHJ5e0w9Tyh6KX1jYXRjaChLKXtyZXR1cm4gTihLKX1yZXR1cm4gTihudWxsLEwpfTooeixOKT0+e08oeixOKX19c2V0IHJvd1RyYW5zZm9ybShPKXtpZigh''@;'; put 'put ''eS5kZWZhdWx0KE8pKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSB0cmFuc2Zvcm0gc2hvdWxkIGJlIGEgZnVuY3Rpb24iKTt0aGlzLl9yb3dUcmFuc2Zvcm09UC5jcmVhdGVUcmFuc2Zvcm0oTyl9Zm9ybWF0KE8seil7dGhpcy5jYWxsVHJhbnNmb3JtZXIoTywoTixMKT0+e2lmKE4pcmV0dXJu''@;'; put 'put ''IHooTik7aWYoIU8pcmV0dXJuIHoobnVsbCk7Y29uc3QgSz1bXTtpZihMKXtjb25zdHtzaG91bGRGb3JtYXRDb2x1bW5zOlUsaGVhZGVyczpXfT10aGlzLmNoZWNrSGVhZGVycyhMKTtpZih0aGlzLnNob3VsZFdyaXRlSGVhZGVycyYmVyYmIXRoaXMuaGFzV3JpdHRlbkhlYWRlcnMmJihLLnB1''@;'; put 'put ''c2godGhpcy5mb3JtYXRDb2x1bW5zKFcsITApKSx0aGlzLmhhc1dyaXR0ZW5IZWFkZXJzPSEwKSxVKXtjb25zdCBZPXRoaXMuZ2F0aGVyQ29sdW1ucyhMKTtLLnB1c2godGhpcy5mb3JtYXRDb2x1bW5zKFksITEpKX19cmV0dXJuIHoobnVsbCxLKX0pfWZpbmlzaChPKXtjb25zdCB6PVtdO2lm''@;'; put 'put ''KHRoaXMuZm9ybWF0dGVyT3B0aW9ucy5hbHdheXNXcml0ZUhlYWRlcnMmJjA9PT10aGlzLnJvd0NvdW50KXtpZighdGhpcy5oZWFkZXJzKXJldHVybiBPKG5ldyBFcnJvcigiYGFsd2F5c1dyaXRlSGVhZGVyc2Agb3B0aW9uIGlzIHNldCB0byB0cnVlIGJ1dCBgaGVhZGVyc2Agb3B0aW9uIG5v''@;'; put 'put ''dCBwcm92aWRlZC4iKSk7ei5wdXNoKHRoaXMuZm9ybWF0Q29sdW1ucyh0aGlzLmhlYWRlcnMsITApKX1yZXR1cm4gdGhpcy5mb3JtYXR0ZXJPcHRpb25zLmluY2x1ZGVFbmRSb3dEZWxpbWl0ZXImJnoucHVzaCh0aGlzLmZvcm1hdHRlck9wdGlvbnMucm93RGVsaW1pdGVyKSxPKG51bGwseil9''@;'; put 'put ''Y2hlY2tIZWFkZXJzKE8pe2lmKHRoaXMuaGVhZGVycylyZXR1cm57c2hvdWxkRm9ybWF0Q29sdW1uczohMCxoZWFkZXJzOnRoaXMuaGVhZGVyc307Y29uc3Qgej1QLmdhdGhlckhlYWRlcnMoTyk7cmV0dXJuIHRoaXMuaGVhZGVycz16LHRoaXMuZmllbGRGb3JtYXR0ZXIuaGVhZGVycz16LHRo''@;'; put 'put ''aXMuc2hvdWxkV3JpdGVIZWFkZXJzP3tzaG91bGRGb3JtYXRDb2x1bW5zOiFnLmRlZmF1bHQoeixPKSxoZWFkZXJzOnp9OntzaG91bGRGb3JtYXRDb2x1bW5zOiEwLGhlYWRlcnM6bnVsbH19Z2F0aGVyQ29sdW1ucyhPKXtpZihudWxsPT09dGhpcy5oZWFkZXJzKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''SGVhZGVycyBpcyBjdXJyZW50bHkgbnVsbCIpO3JldHVybiBBcnJheS5pc0FycmF5KE8pP1AuaXNSb3dIYXNoQXJyYXkoTyk/dGhpcy5oZWFkZXJzLm1hcCgoeixOKT0+e2NvbnN0IEw9T1tOXTtyZXR1cm4gTD9MWzFdOiIifSk6UC5pc1Jvd0FycmF5KE8pJiYhdGhpcy5zaG91bGRXcml0ZUhl''@;'; put 'put ''YWRlcnM/Tzp0aGlzLmhlYWRlcnMubWFwKCh6LE4pPT5PW05dKTp0aGlzLmhlYWRlcnMubWFwKHo9Pk9bel0pfWNhbGxUcmFuc2Zvcm1lcihPLHope3JldHVybiB0aGlzLl9yb3dUcmFuc2Zvcm0/dGhpcy5fcm93VHJhbnNmb3JtKE8seik6eihudWxsLE8pfWZvcm1hdENvbHVtbnMoTyx6KXtj''@;'; put 'put ''b25zdCBOPU8ubWFwKChLLFUpPT50aGlzLmZpZWxkRm9ybWF0dGVyLmZvcm1hdChLLFUseikpLmpvaW4odGhpcy5mb3JtYXR0ZXJPcHRpb25zLmRlbGltaXRlcikse3Jvd0NvdW50Okx9PXRoaXM7cmV0dXJuIHRoaXMucm93Q291bnQrPTEsTD9bdGhpcy5mb3JtYXR0ZXJPcHRpb25zLnJvd0Rl''@;'; put 'put ''bGltaXRlcixOXS5qb2luKCIiKTpOfX1xLlJvd0Zvcm1hdHRlcj1QfSw5OTQ3Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLkZpZWxkRm9ybWF0dGVyPXEuUm93Rm9ybWF0dGVyPXZvaWQgMDt2YXIgST1f''@;'; put 'put ''KDcxODEpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJSb3dGb3JtYXR0ZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLlJvd0Zvcm1hdHRlcn19KTt2YXIgeT1fKDUxODYpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJGaWVsZEZvcm1hdHRlciIse2VudW1lcmFi''@;'; put 'put ''bGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHkuRmllbGRGb3JtYXR0ZXJ9fSl9LDcyMDE6ZnVuY3Rpb24odWUscSxfKXsidXNlIHN0cmljdCI7dmFyIEk9Xyg4NzY0KS5CdWZmZXIseT10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oVSxXLFks''@;'; put 'put ''WCl7dm9pZCAwPT09WCYmKFg9WSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFUsWCx7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gV1tZXX19KX06ZnVuY3Rpb24oVSxXLFksWCl7dm9pZCAwPT09WCYmKFg9WSksVVtYXT1XW1ldfSksZz10aGlzJiZ0aGlzLl9fc2V0TW9kdWxl''@;'; put 'put ''RGVmYXVsdHx8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oVSxXKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoVSwiZGVmYXVsdCIse2VudW1lcmFibGU6ITAsdmFsdWU6V30pfTpmdW5jdGlvbihVLFcpe1UuZGVmYXVsdD1XfSksQj10aGlzJiZ0aGlzLl9faW1wb3J0U3Rhcnx8ZnVuY3Rpb24oVSl7''@;'; put 'put ''aWYoVSYmVS5fX2VzTW9kdWxlKXJldHVybiBVO3ZhciBXPXt9O2lmKG51bGwhPVUpZm9yKHZhciBZIGluIFUpImRlZmF1bHQiIT09WSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFUsWSkmJnkoVyxVLFkpO3JldHVybiBnKFcsVSksV30sdz10aGlzJiZ0aGlzLl9fZXhw''@;'; put 'put ''b3J0U3Rhcnx8ZnVuY3Rpb24oVSxXKXtmb3IodmFyIFkgaW4gVSkiZGVmYXVsdCIhPT1ZJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFcsWSkmJnkoVyxVLFkpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS53cml0ZVRv''@;'; put 'put ''UGF0aD1xLndyaXRlVG9TdHJpbmc9cS53cml0ZVRvQnVmZmVyPXEud3JpdGVUb1N0cmVhbT1xLndyaXRlPXEuZm9ybWF0PXEuRm9ybWF0dGVyT3B0aW9ucz1xLkNzdkZvcm1hdHRlclN0cmVhbT12b2lkIDA7Y29uc3QgUD1fKDk1MzkpLEY9XygyODMwKSxPPUIoXyg4NjQ2KSksej1fKDY3NjMp''@;'; put 'put ''LE49XygzMDYyKTt3KF8oNDY5MikscSk7dmFyIEw9XygzMDYyKTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiQ3N2Rm9ybWF0dGVyU3RyZWFtIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTC5Dc3ZGb3JtYXR0ZXJTdHJlYW19fSk7dmFyIEs9Xyg2NzYzKTtPYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkocSwiRm9ybWF0dGVyT3B0aW9ucyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEsuRm9ybWF0dGVyT3B0aW9uc319KSxxLmZvcm1hdD1VPT5uZXcgTi5Dc3ZGb3JtYXR0ZXJTdHJlYW0obmV3IHouRm9ybWF0dGVyT3B0aW9ucyhVKSkscS53cml0''@;'; put 'put ''ZT0oVSxXKT0+e2NvbnN0IFk9cS5mb3JtYXQoVyksWD1QLnByb21pc2lmeSgoZWUsSik9PntZLndyaXRlKGVlLHZvaWQgMCxKKX0pO3JldHVybiBVLnJlZHVjZSgoZWUsSik9PmVlLnRoZW4oKCk9PlgoSikpLFByb21pc2UucmVzb2x2ZSgpKS50aGVuKCgpPT5ZLmVuZCgpKS5jYXRjaChlZT0+''@;'; put 'put ''e1kuZW1pdCgiZXJyb3IiLGVlKX0pLFl9LHEud3JpdGVUb1N0cmVhbT0oVSxXLFkpPT5xLndyaXRlKFcsWSkucGlwZShVKSxxLndyaXRlVG9CdWZmZXI9KFUsVz17fSk9Pntjb25zdCBZPVtdLFg9bmV3IEYuV3JpdGFibGUoe3dyaXRlKGVlLEoscmUpe1kucHVzaChlZSkscmUoKX19KTtyZXR1''@;'; put 'put ''cm4gbmV3IFByb21pc2UoKGVlLEopPT57WC5vbigiZXJyb3IiLEopLm9uKCJmaW5pc2giLCgpPT5lZShJLmNvbmNhdChZKSkpLHEud3JpdGUoVSxXKS5waXBlKFgpfSl9LHEud3JpdGVUb1N0cmluZz0oVSxXKT0+cS53cml0ZVRvQnVmZmVyKFUsVykudGhlbihZPT5ZLnRvU3RyaW5nKCkpLHEu''@;'; put 'put ''d3JpdGVUb1BhdGg9KFUsVyxZKT0+e2NvbnN0IFg9Ty5jcmVhdGVXcml0ZVN0cmVhbShVLHtlbmNvZGluZzoidXRmOCJ9KTtyZXR1cm4gcS53cml0ZShXLFkpLnBpcGUoWCl9fSw0NjkyOih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIs''@;'; put 'put ''e3ZhbHVlOiEwfSkscS5pc1N5bmNUcmFuc2Zvcm09dm9pZCAwLHEuaXNTeW5jVHJhbnNmb3JtPV89PjE9PT1fLmxlbmd0aH0sMjY1NjpmdW5jdGlvbih1ZSxxLF8peyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oTyl7cmV0dXJuIE8mJk8u''@;'; put 'put ''X19lc01vZHVsZT9POntkZWZhdWx0Ok99fTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5kZWNvZGVUb2tlbj1xLmhhc1Rva2VuRXhwaXJlZD1xLmlzUmVmcmVzaFRva2VuRXhwaXJpbmc9cS5pc0FjY2Vzc1Rva2VuRXhwaXJpbmc9dm9pZCAwO2Nv''@;'; put 'put ''bnN0IHk9SShfKDYyNDUpKTtmdW5jdGlvbiBQKE8seil7cmV0dXJuKDAseS5kZWZhdWx0KShPKS5leHAtKG5ldyBEYXRlKS52YWx1ZU9mKCkvMWUzPD16fXEuaXNBY2Nlc3NUb2tlbkV4cGlyaW5nPWZ1bmN0aW9uIGcoTyx6PTM2MDApe3JldHVybiFPfHxQKE8seil9LHEuaXNSZWZyZXNoVG9r''@;'; put 'put ''ZW5FeHBpcmluZz1mdW5jdGlvbiBCKE8sej0zMCl7cmV0dXJuIU98fFAoTyx6KX0scS5oYXNUb2tlbkV4cGlyZWQ9ZnVuY3Rpb24gdyhPKXtyZXR1cm4hT3x8UChPLDApfSxxLmRlY29kZVRva2VuPWZ1bmN0aW9uIEYoTyl7bGV0IHo7dHJ5e3o9KDAseS5kZWZhdWx0KShPKX1jYXRjaHt0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIkludmFsaWQgdG9rZW4gc3VwcGxpZWQuIil9cmV0dXJuIHp9fSw2Nzk5OmZ1bmN0aW9uKHVlLHEsXyl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihnLEIsdyxQKXt2b2lkIDA9PT1QJiYo''@;'; put 'put ''UD13KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZyxQLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCW3ddfX0pfTpmdW5jdGlvbihnLEIsdyxQKXt2b2lkIDA9PT1QJiYoUD13KSxnW1BdPUJbd119KSx5PXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihnLEIp''@;'; put 'put ''e2Zvcih2YXIgdyBpbiBnKSJkZWZhdWx0IiE9PXcmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQix3KSYmSShCLGcsdyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx5KF8oMjY1NikscSl9LDMyNTk6KHVlLHEpPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLnByZWZpeE1lc3NhZ2U9dm9pZCAwLHEucHJlZml4TWVzc2FnZT0oSSx5KT0+e2lmKCJvYmplY3QiPT10eXBlb2YgSSlpZihJLmhhc093blByb3BlcnR5KCJtZXNzYWdlIikpSS5tZXNz''@;'; put 'put ''YWdlPXkrSS5tZXNzYWdlO2Vsc2V7aWYoIUkuaGFzT3duUHJvcGVydHkoImJvZHkiKSlyZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LEkpLHttZXNzYWdlOnl9KTtpZigib2JqZWN0Ij09dHlwZW9mIEkuYm9keSYmKEkubWVzc2FnZT1JLmJvZHkubWVzc2FnZT95K0kuYm9k''@;'; put 'put ''eS5tZXNzYWdlOnkpLCJzdHJpbmciPT10eXBlb2YgSS5ib2R5KXtsZXQgZzt0cnl7Zz1KU09OLnBhcnNlKEkuYm9keSl9Y2F0Y2h7cmV0dXJuIEkubWVzc2FnZT15LEl9cmV0dXJuIGcubWVzc2FnZT1nLm1lc3NhZ2U/eStnLm1lc3NhZ2U6eSxJLmJvZHk9ZyxJfX1yZXR1cm4ic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIEkmJihJPXkrSSksSX19LDk3Nzg6ZnVuY3Rpb24odWUscSxfKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGcsQix3LFApe3ZvaWQgMD09PVAmJihQPXcpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShn''@;'; put 'put ''LFAse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEJbd119fSl9OmZ1bmN0aW9uKGcsQix3LFApe3ZvaWQgMD09PVAmJihQPXcpLGdbUF09Qlt3XX0pLHk9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGcsQil7Zm9yKHZhciB3IGluIGcpImRlZmF1bHQiIT09''@;'; put 'put ''dyYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChCLHcpJiZJKEIsZyx3KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHkoXygzMjU5KSxxKSx5KF8oMTA2NCkscSl9LDEwNjQ6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7T2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuU2VydmVyVHlwZUVycm9yPXZvaWQgMDtjb25zdCBJPV8oMzkwMCk7Y2xhc3MgeSBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKEI9W10pe2xldCB3PShCPVsuLi5uZXcgU2V0KEIpXSkubGVuZ3RoP0Iuam9p''@;'; put 'put ''bigiLCAiKS50cmltKCk6W0kuU2VydmVyVHlwZS5TYXNWaXlhLEkuU2VydmVyVHlwZS5TYXM5LEkuU2VydmVyVHlwZS5TYXNqc10uam9pbigiLCAiKS50cmltKCk7dz13LnJlcGxhY2UoLyxccyhbXixdKikkLywiIGFuZCAkMSIpLHN1cGVyKGBJbnZhbGlkIHNlcnZlciB0eXBlOiB2YWxpZCBv''@;'; put 'put ''cHRpb24kezEhPT1CLmxlbmd0aD8icyI6IiJ9ICR7MSE9PUIubGVuZ3RoPyJhcmUiOiJpcyJ9ICR7d31gKSx0aGlzLm5hbWU9IlNlcnZlclR5cGVFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMseS5wcm90b3R5cGUpfX1xLlNlcnZlclR5cGVFcnJvcj15fSwzOTA2OmZ1bmN0aW9u''@;'; put 'put ''KHVlLHEsXyl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihPLHosTixMKXtyZXR1cm4gbmV3KE58fChOPVByb21pc2UpKShmdW5jdGlvbihVLFcpe2Z1bmN0aW9uIFkoSil7dHJ5e2VlKEwubmV4dChKKSl9Y2F0Y2gocmUpe1cocmUpfX1mdW5jdGlv''@;'; put 'put ''biBYKEope3RyeXtlZShMLnRocm93KEopKX1jYXRjaChyZSl7VyhyZSl9fWZ1bmN0aW9uIGVlKEope0ouZG9uZT9VKEoudmFsdWUpOmZ1bmN0aW9uIEsoVSl7cmV0dXJuIFUgaW5zdGFuY2VvZiBOP1U6bmV3IE4oZnVuY3Rpb24oVyl7VyhVKX0pfShKLnZhbHVlKS50aGVuKFksWCl9ZWUoKEw9''@;'; put 'put ''TC5hcHBseShPLHp8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS51cGRhdGVDc3Y9cS5jcmVhdGVDc3Y9cS5yZWFkQ3N2PXZvaWQgMDtjb25zdCB5PV8oMTU1OSksZz1fKDcyMDEpO3EucmVhZENzdj1PPT5JKHZvaWQg''@;'; put 'put ''MCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCgwLHkucmVhZEZpbGUpKE8pKS5zcGxpdCgiXG4iKS5maWx0ZXIoTj0+Ti5sZW5ndGgpLm1hcChOPT5OLnNwbGl0KCIsIikpfSkscS5jcmVhdGVDc3Y9KE8seixOKT0+SSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlv''@;'; put 'put ''biooKXtjb25zdCBMPXlpZWxkKDAsZy53cml0ZVRvU3RyaW5nKSh6LHtoZWFkZXJzOk59KTt5aWVsZCgwLHkuY3JlYXRlRmlsZSkoTyxMKX0pLHEudXBkYXRlQ3N2PShPLHosTixMKT0+SSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBLPXlpZWxkIEYoTyx6LE4sTCk7''@;'; put 'put ''aWYoTCl7Y29uc3QgVT0wPT09Sy5sZW5ndGg/MTpLLmxlbmd0aCxXPU4uZmluZEluZGV4KFk9Plk9PT1MKTtXPi0xP3ouc3BsaWNlKFcsMCxVKTooTi5zcGxpY2UoMCwwLEwpLHouc3BsaWNlKDAsMCxVKSl9Sy5wdXNoKHopLHlpZWxkKDAscS5jcmVhdGVDc3YpKE8sSyxOKX0pO2NvbnN0IEY9''@;'; put 'put ''KE8seixOLEwpPT5JKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKHoubGVuZ3RoIT09Ti5sZW5ndGgpe2lmKHoubGVuZ3RoPk4ubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiYSByZWNvcmQgY2FuIG5vdCBoYXZlIG1vcmUgZmllbGRzIHRoYW4gcHJvdmlkZWQgY29sdW1ucyIp''@;'; put 'put ''O2lmKCFMfHx6Lmxlbmd0aCsxIT09Ti5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJhIHJlY29yZCBjYW4gbm90IGhhdmUgbGVzcyBmaWVsZHMgdGhhbiBwcm92aWRlZCBjb2x1bW5zIil9ZWxzZSBpZihMJiZOLmluY2x1ZGVzKEwpKXRocm93IG5ldyBFcnJvcigiYSByZWNvcmQgY2FuIG5vdCBo''@;'; put 'put ''YXZlIG1vcmUgZmllbGRzIHRoYW4gcHJvdmlkZWQgY29sdW1ucyIpO2NvbnN0IEs9eWllbGQoMCxxLnJlYWRDc3YpKE8pLmNhdGNoKFc9PltdKSxVPUtbMF07aWYoVSl7aWYoTi5sZW5ndGg+VS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJudW1iZXIgb2YgcHJvdmlkZWQgY29sdW1ucyBhcmUg''@;'; put 'put ''Z3JlYXRlciB0aGFuIG51bWJlciBvZiBleGlzdGluZyBjb2x1bW5zIik7aWYoTi5sZW5ndGg8VS5sZW5ndGgpe2lmKCFMfHxOLmxlbmd0aCsxIT09VS5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJudW1iZXIgb2YgcHJvdmlkZWQgY29sdW1ucyBhcmUgbGVzcyB0aGFuIG51bWJlciBvZiBleGlz''@;'; put 'put ''dGluZyBjb2x1bW5zIik7Y29uc3QgVz1VLmZpbmRJbmRleChYPT5YPT09TCksWT1bLi4uTl07aWYoIShXPi0xKSl0aHJvdyBuZXcgRXJyb3IoInByb3ZpZGVkIGNvbHVtbnMgZG9lcyBub3QgbWF0Y2ggZXhpc3RpbmcgY29sdW1ucyIpO2lmKFkuc3BsaWNlKFcsMCxMKSxKU09OLnN0cmluZ2lm''@;'; put 'put ''eShOKSE9PUpTT04uc3RyaW5naWZ5KFkpKXRocm93IG5ldyBFcnJvcigicHJvdmlkZWQgY29sdW1ucyBkb2VzIG5vdCBtYXRjaCBleGlzdGluZyBjb2x1bW5zIil9ZWxzZXtpZihKU09OLnN0cmluZ2lmeShOKSE9PUpTT04uc3RyaW5naWZ5KFUpKXRocm93IG5ldyBFcnJvcigicHJvdmlkZWQg''@;'; put 'put ''Y29sdW1ucyBkb2VzIG5vdCBtYXRjaCBleGlzdGluZyBjb2x1bW5zIik7aWYoTCYmIU4uaW5jbHVkZXMoTCkpdGhyb3cgbmV3IEVycm9yKCJjYW4gbm90IGFkZCBuZXcgaWQgdG8gZXhpc3RpbmcgZGF0YSIpfX1yZXR1cm4gS30pfSwxNTU5OmZ1bmN0aW9uKHVlLHEsXyl7InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBJPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihtLEEsb2UsdGUpe3ZvaWQgMD09PXRlJiYodGU9b2UpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtLHRlLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBBW29lXX19KX06''@;'; put 'put ''ZnVuY3Rpb24obSxBLG9lLHRlKXt2b2lkIDA9PT10ZSYmKHRlPW9lKSxtW3RlXT1BW29lXX0pLHk9dGhpcyYmdGhpcy5fX3NldE1vZHVsZURlZmF1bHR8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKG0sQSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG0sImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEw''@;'; put 'put ''LHZhbHVlOkF9KX06ZnVuY3Rpb24obSxBKXttLmRlZmF1bHQ9QX0pLGc9dGhpcyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKG0pe2lmKG0mJm0uX19lc01vZHVsZSlyZXR1cm4gbTt2YXIgQT17fTtpZihudWxsIT1tKWZvcih2YXIgb2UgaW4gbSkiZGVmYXVsdCIhPT1vZSYmT2JqZWN0''@;'; put 'put ''LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG0sb2UpJiZJKEEsbSxvZSk7cmV0dXJuIHkoQSxtKSxBfSxCPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihtLEEsb2UsdGUpe3JldHVybiBuZXcob2V8fChvZT1Qcm9taXNlKSkoZnVuY3Rpb24od2UsVWUpe2Z1bmN0aW9uIEpl''@;'; put 'put ''KHZlKXt0cnl7TWUodGUubmV4dCh2ZSkpfWNhdGNoKFhlKXtVZShYZSl9fWZ1bmN0aW9uIGF0KHZlKXt0cnl7TWUodGUudGhyb3codmUpKX1jYXRjaChYZSl7VWUoWGUpfX1mdW5jdGlvbiBNZSh2ZSl7dmUuZG9uZT93ZSh2ZS52YWx1ZSk6ZnVuY3Rpb24gc2Uod2Upe3JldHVybiB3ZSBpbnN0''@;'; put 'put ''YW5jZW9mIG9lP3dlOm5ldyBvZShmdW5jdGlvbihVZSl7VWUod2UpfSl9KHZlLnZhbHVlKS50aGVuKEplLGF0KX1NZSgodGU9dGUuYXBwbHkobSxBfHxbXSkpLm5leHQoKSl9KX0sdz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24obSl7cmV0dXJuIG0mJm0uX19lc01vZHVs''@;'; put 'put ''ZT9tOntkZWZhdWx0Om19fTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5nZXRMaW5lRW5kaW5nPXEuaXNUZXN0RmlsZT1xLnRlc3RGaWxlUmVnRXhwPXEuY3JlYXRlUmVhZFN0cmVhbT1xLmNyZWF0ZVdyaXRlU3RyZWFtPXEuZ2V0UmVhbFBhdGg9''@;'; put 'put ''cS5iYXNlNjRFbmNvZGVGaWxlPXEuYmFzZTY0RW5jb2RlSW1hZ2VGaWxlPXEucGF0aFNlcEVzY2FwZWQ9cS5jb3B5PXEubW92ZUZpbGU9cS5nZXRSZWxhdGl2ZVBhdGg9cS51bmlmeUZpbGVQYXRoPXEuZGVsZXRlRm9sZGVyPXEuZGVsZXRlRmlsZT1xLmNyZWF0ZUZpbGU9cS5jcmVhdGVGb2xk''@;'; put 'put ''ZXI9cS5saXN0RmlsZXNBbmRTdWJGb2xkZXJzSW5Gb2xkZXI9cS5saXN0U3ViRm9sZGVyc0luRm9sZGVyPXEubGlzdFNhc0ZpbGVzSW5Gb2xkZXI9cS5saXN0SW5pRmlsZXNJbkZvbGRlcj1xLmxpc3RGaWxlc0luRm9sZGVyPXEucmVhZEZpbGVCaW5hcnk9cS5yZWFkRmlsZT1xLmlzRm9sZGVy''@;'; put 'put ''PXEuZm9sZGVyRXhpc3RzPXEuZmlsZUV4aXN0cz12b2lkIDA7Y29uc3QgUD13KF8oNTY3NCkpLEY9dyhfKDI1MjApKSxPPV8oNjI2Niksej1nKF8oMjk3NSkpLE49XygzOTAwKTtmdW5jdGlvbiBLKG0pe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5k''@;'; put 'put ''ZWZhdWx0LnByb21pc2VzLmFjY2VzcyhtLFAuZGVmYXVsdC5jb25zdGFudHMuRl9PSykudGhlbigoKT0+ITApLmNhdGNoKCgpPT4hMSl9KX1mdW5jdGlvbiBZKG0pe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnByb21pc2VzLnJlYWRG''@;'; put 'put ''aWxlKG0pfSl9ZnVuY3Rpb24gWChtKXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFAuZGVmYXVsdC5wcm9taXNlcy5yZWFkZGlyKG0se3dpdGhGaWxlVHlwZXM6ITB9KS50aGVuKEE9PkEuZmlsdGVyKG9lPT4hb2UuaXNEaXJlY3RvcnkoKSkubWFwKG9l''@;'; put 'put ''PT5vZS5uYW1lKSl9KX1mdW5jdGlvbiBpZShtLEE9ITAsb2U9W10pe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnByb21pc2VzLnJlYWRkaXIobSx7d2l0aEZpbGVUeXBlczohMH0pLnRoZW4odGU9PkIodGhpcyx2b2lkIDAsdm9pZCAw''@;'; put 'put ''LGZ1bmN0aW9uKigpe2lmKEEmJnRlLmZpbHRlcih3ZT0+d2UuaXNEaXJlY3RvcnkoKSkubGVuZ3RoKXtsZXQgd2U9W107cmV0dXJuIHlpZWxkKDAsTy5hc3luY0ZvckVhY2gpKHRlLmZpbHRlcihVZT0+VWUuaXNEaXJlY3RvcnkoKSksVWU9PkIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9u''@;'; put 'put ''Kigpe2NvbnN0IEplPVVlLm5hbWU7aWYoIW9lLmluY2x1ZGVzKEplKSl7Y29uc3QgYXQ9Ri5kZWZhdWx0LmpvaW4obSxKZSk7d2U9Wy4uLndlLC4uLih5aWVsZCBpZShhdCxBLG9lKSkubWFwKE1lPT5GLmRlZmF1bHQuam9pbihKZSxNZSkpXX19KSksWy4uLnRlLmZpbHRlcihVZT0+IVVlLmlz''@;'; put 'put ''RGlyZWN0b3J5KCkpLm1hcChVZT0+VWUubmFtZSksLi4ud2VdfXJldHVybiB0ZS5tYXAoc2U9PnNlLm5hbWUpfSkpfSl9ZnVuY3Rpb24gbGUobSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1bHQucHJvbWlzZXMubWtkaXIobSx7cmVjdXJz''@;'; put 'put ''aXZlOiEwfSl9KX1mdW5jdGlvbiBTZShtLEE9Ri5kZWZhdWx0LnNlcCxvZT0iLyIpe2NvbnN0IHRlPXt1bml4OiIvIix3aW46IlxcIn07bGV0IHNlPU9iamVjdC5rZXlzKHRlKS5maW5kKHdlPT50ZVt3ZV09PT1BKTtpZihzZSl7Y29uc3Qgd2U9dGVbT2JqZWN0LmtleXModGUpLmZpbmQoVWU9''@;'; put 'put ''PlVlIT09c2UpXTtyZXR1cm4gc2U9dGVbc2VdLG0uc3BsaXQod2UpLmpvaW4oc2UpfXJldHVybiBtLnNwbGl0KG9lKS5qb2luKEEpfXEuZmlsZUV4aXN0cz1mdW5jdGlvbiBMKG0pe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnByb21p''@;'; put 'put ''c2VzLmFjY2VzcyhtLFAuZGVmYXVsdC5jb25zdGFudHMuRl9PSykudGhlbigoKT0+ITApLmNhdGNoKCgpPT4hMSl9KX0scS5mb2xkZXJFeGlzdHM9SyxxLmlzRm9sZGVyPWZ1bmN0aW9uIFUobSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBQLmRlZmF1''@;'; put 'put ''bHQucHJvbWlzZXMubHN0YXQobSkudGhlbihBPT5BLmlzRGlyZWN0b3J5KCkpLmNhdGNoKCgpPT4hMSl9KX0scS5yZWFkRmlsZT1mdW5jdGlvbiBXKG0sQT0idXRmOCIpe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnByb21pc2VzLnJl''@;'; put 'put ''YWRGaWxlKG0sQSl9KX0scS5yZWFkRmlsZUJpbmFyeT1ZLHEubGlzdEZpbGVzSW5Gb2xkZXI9WCxxLmxpc3RJbmlGaWxlc0luRm9sZGVyPWZ1bmN0aW9uIGVlKG0pe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oeWllbGQgWChtKSkuZmlsdGVyKEE9PkEu''@;'; put 'put ''ZW5kc1dpdGgoIi5pbmkiKSl9KX0scS5saXN0U2FzRmlsZXNJbkZvbGRlcj1mdW5jdGlvbiBKKG0sQT0hMSxvZT1bXSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybih5aWVsZCBpZShtLEEsb2UpKS5maWx0ZXIod2U9PndlLmVuZHNXaXRoKCIuc2FzIikp''@;'; put 'put ''fSl9LHEubGlzdFN1YkZvbGRlcnNJbkZvbGRlcj1mdW5jdGlvbiByZShtKXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFAuZGVmYXVsdC5wcm9taXNlcy5yZWFkZGlyKG0se3dpdGhGaWxlVHlwZXM6ITB9KS50aGVuKEE9PkEuZmlsdGVyKG9lPT5vZS5p''@;'; put 'put ''c0RpcmVjdG9yeSgpKS5tYXAob2U9Pm9lLm5hbWUpKX0pfSxxLmxpc3RGaWxlc0FuZFN1YkZvbGRlcnNJbkZvbGRlcj1pZSxxLmNyZWF0ZUZvbGRlcj1sZSxxLmNyZWF0ZUZpbGU9ZnVuY3Rpb24gbWUobSxBLG9lKXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYo''@;'; put 'put ''KG09U2UobSkpLnNwbGl0KEYuZGVmYXVsdC5zZXApLmxlbmd0aD4xKXtsZXQgdGU9bS5zcGxpdChGLmRlZmF1bHQuc2VwKTt0ZS5wb3AoKTtjb25zdCBzZT10ZS5qb2luKEYuZGVmYXVsdC5zZXApOyh5aWVsZCBLKHNlKSl8fCh5aWVsZCBsZShzZSkpfXJldHVybiBQLmRlZmF1bHQucHJvbWlz''@;'; put 'put ''ZXMud3JpdGVGaWxlKG0sQSxvZSl9KX0scS5kZWxldGVGaWxlPWZ1bmN0aW9uIF9lKG0pe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnJlbW92ZShtKX0pfSxxLmRlbGV0ZUZvbGRlcj1mdW5jdGlvbiBUZShtKXtyZXR1cm4gQih0aGlz''@;'; put 'put ''LHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFAuZGVmYXVsdC5ybShtLHtyZWN1cnNpdmU6ITAsZm9yY2U6ITB9KX0pfSxxLnVuaWZ5RmlsZVBhdGg9U2UscS5nZXRSZWxhdGl2ZVBhdGg9ZnVuY3Rpb24gemUobSxBKXtjb25zdCBvZT1tLnNwbGl0KEYuZGVmYXVsdC5zZXApLHRl''@;'; put 'put ''PUEuc3BsaXQoRi5kZWZhdWx0LnNlcCk7bGV0IHNlPVtdLHdlPVtdO29lLmZvckVhY2goKHZlLFhlKT0+e3ZvaWQgMCE9PXRlW1hlXSYmb2VbWGVdPT09dGVbWGVdP3NlLnB1c2godmUpOnZlJiZ3ZS5wdXNoKHZlKX0pO2NvbnN0IFVlPXNlLmpvaW4oRi5kZWZhdWx0LnNlcCksSmU9bmV3IFJl''@;'; put 'put ''Z0V4cChgXiR7Ri5kZWZhdWx0LnNlcC5yZXBsYWNlKC9cXC9nLCJcXFxcIil9YCksYXQ9bmV3IFJlZ0V4cChgJHtGLmRlZmF1bHQuc2VwLnJlcGxhY2UoL1xcL2csIlxcXFwiKX0kYCk7cmV0dXJuKHdlLmxlbmd0aD9gLi4ke0YuZGVmYXVsdC5zZXB9YC5yZXBlYXQod2UubGVuZ3RoKTpgLiR7''@;'; put 'put ''Ri5kZWZhdWx0LnNlcH1gKStBLnJlcGxhY2UoVWUsIiIpLnJlcGxhY2UoSmUsIiIpLnJlcGxhY2UoYXQsIiIpfSxxLm1vdmVGaWxlPWZ1bmN0aW9uIFYobSxBKXtyZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFAuZGVmYXVsdC5wcm9taXNlcy5yZW5hbWUo''@;'; put 'put ''bSxBKX0pfSxxLmNvcHk9ZnVuY3Rpb24gcChtLEEpe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LmNvcHkobSxBKX0pfSxxLnBhdGhTZXBFc2NhcGVkPUYuZGVmYXVsdC5zZXAucmVwbGFjZSgvXFwvZywiXFxcXCIpLHEuYmFzZTY0RW5j''@;'; put 'put ''b2RlSW1hZ2VGaWxlPWZ1bmN0aW9uIGIobSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBZKG0pLnRoZW4oQT0+e2xldCBvZT1GLmRlZmF1bHQuZXh0bmFtZShtKS5zdWJzdHIoMSl8fCJwbmciO3JldHVybiJzdmciPT09b2UmJihvZT0ic3ZnK3htbCIp''@;'; put 'put ''LCJkYXRhOmltYWdlLyIrb2UrIjtiYXNlNjQsIitBLnRvU3RyaW5nKCJiYXNlNjQiKX0pfSl9LHEuYmFzZTY0RW5jb2RlRmlsZT1mdW5jdGlvbiB4KG0pe3JldHVybiBCKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gUC5kZWZhdWx0LnByb21pc2VzLnJlYWRGaWxlKG0s''@;'; put 'put ''e2VuY29kaW5nOiJiYXNlNjQifSl9KX0scS5nZXRSZWFsUGF0aD1mdW5jdGlvbiBDKG0pe3JldHVybiBQLmRlZmF1bHQucmVhbHBhdGhTeW5jKG0pfSxxLmNyZWF0ZVdyaXRlU3RyZWFtPWZ1bmN0aW9uIFQobSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVy''@;'; put 'put ''bih5aWVsZCB6LmZpbGVFeGlzdHMobSkpfHwoeWllbGQgei5jcmVhdGVGaWxlKG0sIiIpKSxQLmRlZmF1bHQuY3JlYXRlV3JpdGVTdHJlYW0obSx7ZmxhZ3M6ImEifSl9KX0scS5jcmVhdGVSZWFkU3RyZWFtPW09PkIodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIFAu''@;'; put 'put ''ZGVmYXVsdC5jcmVhdGVSZWFkU3RyZWFtKG0pfSkscS50ZXN0RmlsZVJlZ0V4cD0vXC50ZXN0XC4oXGQrXC4pP3NhcyQvaSxxLmlzVGVzdEZpbGU9bT0+cS50ZXN0RmlsZVJlZ0V4cC50ZXN0KG0pLHEuZ2V0TGluZUVuZGluZz1tPT5uZXcgUmVnRXhwKE4uTGluZUVuZGluZ3MuQ1JMRikudGVz''@;'; put 'put ''dChtKT9OLkxpbmVFbmRpbmdzLkNSTEY6Ti5MaW5lRW5kaW5ncy5MRn0sNTYyNjpmdW5jdGlvbih1ZSxxLF8peyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24odyl7cmV0dXJuIHcmJncuX19lc01vZHVsZT93OntkZWZhdWx0Ond9fTtPYmpl''@;'; put 'put ''Y3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5nZXRBYnNvbHV0ZVBhdGg9dm9pZCAwO2NvbnN0IHk9SShfKDI1MjApKSxnPUkoXyg3NDM1KSk7cS5nZXRBYnNvbHV0ZVBhdGg9KHcsUCk9PnkuZGVmYXVsdC5pc0Fic29sdXRlKHcpfHwvXn4vLmV4ZWModyk/''@;'; put 'put ''eS5kZWZhdWx0Lm5vcm1hbGl6ZSh3LnJlcGxhY2UoL15+LyxnLmRlZmF1bHQuaG9tZWRpcigpKSk6eS5kZWZhdWx0LmpvaW4oUCx3KX0sMjk3NTpmdW5jdGlvbih1ZSxxLF8peyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVu''@;'; put 'put ''Y3Rpb24odyxQLEYsTyl7dm9pZCAwPT09TyYmKE89RiksT2JqZWN0LmRlZmluZVByb3BlcnR5KHcsTyx7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gUFtGXX19KX06ZnVuY3Rpb24odyxQLEYsTyl7dm9pZCAwPT09TyYmKE89Riksd1tPXT1QW0ZdfSkseT10aGlzJiZ0aGlz''@;'; put 'put ''Ll9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24odyxQKXtmb3IodmFyIEYgaW4gdykiZGVmYXVsdCIhPT1GJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFAsRikmJkkoUCx3LEYpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5y''@;'; put 'put ''ZWFkQ3N2PXEuY3JlYXRlQ3N2PXEudXBkYXRlQ3N2PXEuZ2V0TGluZUVuZGluZz1xLnRlc3RGaWxlUmVnRXhwPXEuaXNUZXN0RmlsZT1xLmdldFJlYWxQYXRoPXEuYmFzZTY0RW5jb2RlRmlsZT1xLmJhc2U2NEVuY29kZUltYWdlRmlsZT1xLmNvcHk9cS5wYXRoU2VwRXNjYXBlZD1xLm1vdmVG''@;'; put 'put ''aWxlPXEudW5pZnlGaWxlUGF0aD1xLmdldFJlbGF0aXZlUGF0aD1xLmRlbGV0ZUZvbGRlcj1xLmRlbGV0ZUZpbGU9cS5jcmVhdGVXcml0ZVN0cmVhbT1xLmNyZWF0ZVJlYWRTdHJlYW09cS5jcmVhdGVGb2xkZXI9cS5jcmVhdGVGaWxlPXEubGlzdEZpbGVzQW5kU3ViRm9sZGVyc0luRm9sZGVy''@;'; put 'put ''PXEubGlzdFN1YkZvbGRlcnNJbkZvbGRlcj1xLmxpc3RTYXNGaWxlc0luRm9sZGVyPXEubGlzdEluaUZpbGVzSW5Gb2xkZXI9cS5saXN0RmlsZXNJbkZvbGRlcj1xLnJlYWRGaWxlQmluYXJ5PXEucmVhZEZpbGU9cS5pc0ZvbGRlcj1xLmZvbGRlckV4aXN0cz1xLmZpbGVFeGlzdHM9dm9pZCAw''@;'; put 'put ''O3ZhciBnPV8oMTU1OSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsImZpbGVFeGlzdHMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmZpbGVFeGlzdHN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHEsImZvbGRlckV4aXN0cyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIGcuZm9sZGVyRXhpc3RzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJpc0ZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuaXNGb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHEsInJlYWRGaWxlIix7ZW51bWVyYWJs''@;'; put 'put ''ZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5yZWFkRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocSwicmVhZEZpbGVCaW5hcnkiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLnJlYWRGaWxlQmluYXJ5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJs''@;'; put 'put ''aXN0RmlsZXNJbkZvbGRlciIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcubGlzdEZpbGVzSW5Gb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHEsImxpc3RJbmlGaWxlc0luRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5s''@;'; put 'put ''aXN0SW5pRmlsZXNJbkZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocSwibGlzdFNhc0ZpbGVzSW5Gb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmxpc3RTYXNGaWxlc0luRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJsaXN0U3Vi''@;'; put 'put ''Rm9sZGVyc0luRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5saXN0U3ViRm9sZGVyc0luRm9sZGVyfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJsaXN0RmlsZXNBbmRTdWJGb2xkZXJzSW5Gb2xkZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBnLmxpc3RGaWxlc0FuZFN1YkZvbGRlcnNJbkZvbGRlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiY3JlYXRlRmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuY3JlYXRlRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiY3Jl''@;'; put 'put ''YXRlRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5jcmVhdGVGb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHEsImNyZWF0ZVJlYWRTdHJlYW0iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmNyZWF0ZVJlYWRTdHJlYW19''@;'; put 'put ''fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHEsImNyZWF0ZVdyaXRlU3RyZWFtIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5jcmVhdGVXcml0ZVN0cmVhbX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiZGVsZXRlRmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIGcuZGVsZXRlRmlsZX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiZGVsZXRlRm9sZGVyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5kZWxldGVGb2xkZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHEsImdldFJlbGF0aXZlUGF0''@;'; put 'put ''aCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuZ2V0UmVsYXRpdmVQYXRofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJ1bmlmeUZpbGVQYXRoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy51bmlmeUZpbGVQYXRofX0pLE9iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShxLCJtb3ZlRmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcubW92ZUZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHEsInBhdGhTZXBFc2NhcGVkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5wYXRoU2Vw''@;'; put 'put ''RXNjYXBlZH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiY29weSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuY29weX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiYmFzZTY0RW5jb2RlSW1hZ2VGaWxlIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4gZy5iYXNlNjRFbmNvZGVJbWFnZUZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHEsImJhc2U2NEVuY29kZUZpbGUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmJhc2U2NEVuY29kZUZpbGV9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHEsImdl''@;'; put 'put ''dFJlYWxQYXRoIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5nZXRSZWFsUGF0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiaXNUZXN0RmlsZSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuaXNUZXN0RmlsZX19KSxPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkocSwidGVzdEZpbGVSZWdFeHAiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLnRlc3RGaWxlUmVnRXhwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJnZXRMaW5lRW5kaW5nIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''Zy5nZXRMaW5lRW5kaW5nfX0pO3ZhciBCPV8oMzkwNik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsInVwZGF0ZUNzdiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEIudXBkYXRlQ3N2fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJjcmVhdGVDc3YiLHtlbnVtZXJh''@;'; put 'put ''YmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCLmNyZWF0ZUNzdn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocSwicmVhZENzdiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEIucmVhZENzdn19KSx5KF8oNTYyNikscSl9LDI3Nzc6KHVlLHEsXyk9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEubmV3TGluZT1xLmNhcGl0YWxpemVGaXJzdENoYXI9cS5zYW5pdGl6ZVNwZWNpYWxDaGFycz1xLnBhZFdpdGhOdW1iZXI9dm9pZCAwO3ZhciBJPV8oNTMwNik7T2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KHEsInBhZFdpdGhOdW1iZXIiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLnBhZFdpdGhOdW1iZXJ9fSk7dmFyIHk9Xyg5Mjc1KTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwic2FuaXRpemVTcGVjaWFsQ2hhcnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiB5LnNhbml0aXplU3BlY2lhbENoYXJzfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJjYXBpdGFsaXplRmlyc3RDaGFyIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4geS5jYXBpdGFsaXplRmlyc3RDaGFyfX0pO3ZhciBnPV8oMTYyOCk7T2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KHEsIm5ld0xpbmUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLm5ld0xpbmV9fSl9LDUzMDY6KHVlLHEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLnBhZFdpdGhO''@;'; put 'put ''dW1iZXI9dm9pZCAwLHEucGFkV2l0aE51bWJlcj0oSSx5PTApPT5JPjk/STpgJHt5fSR7SX1gfSwxNjI4Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNDE1NSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEubmV3TGluZT12b2lkIDAs''@;'; put 'put ''cS5uZXdMaW5lPSgpPT4id2luMzIiPT09SS5wbGF0Zm9ybT8iXFxyXFxuIjoiXFxuIn0sOTI3NToodWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuY2FwaXRhbGl6ZUZpcnN0Q2hhcj1xLnNhbml0aXplU3BlY2lh''@;'; put 'put ''bENoYXJzPXZvaWQgMCxxLnNhbml0aXplU3BlY2lhbENoYXJzPXk9PnkucmVwbGFjZSgvW1x1MDAxYlx1MDA5Yl1bWygpIzs/XSooPzpbMC05XXsxLDR9KD86O1swLTldezAsNH0pKik/WzAtOUEtT1JaY2YtbnFyeT0+PF0vZywiIikscS5jYXBpdGFsaXplRmlyc3RDaGFyPXk9PnkuY2hhckF0''@;'; put 'put ''KDApLnRvVXBwZXJDYXNlKCkreS5zbGljZSgxKX0sNjQ2NzpmdW5jdGlvbih1ZSxxLF8peyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oRil7cmV0dXJuIEYmJkYuX19lc01vZHVsZT9GOntkZWZhdWx0OkZ9fTtPYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5pc1NwZWNpYWxNaXNzaW5nPXEuY2hvaWNlVmFsaWRhdG9yPXEuY29uZmlybWF0aW9uVmFsaWRhdG9yPXEudXJsVmFsaWRhdG9yPXZvaWQgMDtjb25zdCB5PUkoXyg0ODEpKTtxLnVybFZhbGlkYXRvcj0oRixPKT0+ISF5LmRlZmF1''@;'; put 'put ''bHQuaXNIdHRwVXJpKEYpfHwhIXkuZGVmYXVsdC5pc0h0dHBzVXJpKEYpfHwiIj09PUZ8fE8scS5jb25maXJtYXRpb25WYWxpZGF0b3I9Rj0+ITA9PT1GfHwhMT09PUYscS5jaG9pY2VWYWxpZGF0b3I9KEYsTyx6KT0+Rj4wJiZGPD1PfHx6LHEuaXNTcGVjaWFsTWlzc2luZz1GPT4oInN0cmlu''@;'; put 'put ''ZyIhPXR5cGVvZiBGfHwhRi5pbmNsdWRlcygiLi4iKSkmJm5ldyBSZWdFeHAoIl4oXFwuKT9bYS16Xy5dezF9JCIsImkiKS50ZXN0KEYpfSw3NzU3Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLmdlbmVy''@;'; put 'put ''YXRlVGltZXN0YW1wPXEudGltZXN0YW1wVG9ZWVlZTU1EREhITU1TUz1xLmNvbnZlcnRTZWNvbmRzVG9IbXM9dm9pZCAwO3ZhciBJPV8oMTMwMik7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsImNvbnZlcnRTZWNvbmRzVG9IbXMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBJLmNvbnZlcnRTZWNvbmRzVG9IbXN9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHEsInRpbWVzdGFtcFRvWVlZWU1NRERISE1NU1MiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBJLnRpbWVzdGFtcFRvWVlZWU1NRERISE1NU1N9fSksT2JqZWN0LmRlZmluZVByb3Bl''@;'; put 'put ''cnR5KHEsImdlbmVyYXRlVGltZXN0YW1wIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gSS5nZW5lcmF0ZVRpbWVzdGFtcH19KX0sMTMwMjoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSks''@;'; put 'put ''cS5jb252ZXJ0U2Vjb25kc1RvSG1zPXEuZ2VuZXJhdGVUaW1lc3RhbXA9cS50aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTPXZvaWQgMDtjb25zdCBJPV8oMjc3Nyk7cS50aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTPSh3PURhdGUubm93KCkpPT57Y29uc3QgUD1uZXcgRGF0ZSh3KTtyZXR1cm5b''@;'; put 'put ''UC5nZXRGdWxsWWVhcigpLCgwLEkucGFkV2l0aE51bWJlcikoUC5nZXRNb250aCgpKzEpLCgwLEkucGFkV2l0aE51bWJlcikoUC5nZXREYXRlKCkpXS5qb2luKCIvIikrIiAiK1soMCxJLnBhZFdpdGhOdW1iZXIpKFAuZ2V0SG91cnMoKSksKDAsSS5wYWRXaXRoTnVtYmVyKShQLmdldE1pbnV0''@;'; put 'put ''ZXMoKSksKDAsSS5wYWRXaXRoTnVtYmVyKShQLmdldFNlY29uZHMoKSldLmpvaW4oIjoiKX0scS5nZW5lcmF0ZVRpbWVzdGFtcD0odz0iIixQKT0+e2NvbnN0IEY9bmV3IERhdGU7bGV0IE89W0YuZ2V0VVRDRnVsbFllYXIoKSxGLmdldFVUQ01vbnRoKCkrMSxGLmdldFVUQ0RhdGUoKSxGLmdl''@;'; put 'put ''dFVUQ0hvdXJzKCksRi5nZXRVVENNaW51dGVzKCksRi5nZXRVVENTZWNvbmRzKCldO3JldHVybiBPPU8ubWFwKHo9PigwLEkucGFkV2l0aE51bWJlcikoeikpLFAmJncmJlA8Ty5sZW5ndGgmJlA+PTAmJk8uc3BsaWNlKFAsMCx3KSxPPU8uam9pbihQPyIiOncpLE99LHEuY29udmVydFNlY29u''@;'; put 'put ''ZHNUb0htcz13PT57aWYoIXcpcmV0dXJuIjAgc2Vjb25kIjtjb25zdCBQPU1hdGguZmxvb3Iody82MCksRj1NYXRoLmZsb29yKFAvNjApLE89UCU2MCx6PXclNjA7bGV0IE49IiI7cmV0dXJuIEY+MCYmKE49RisiIGhvdXIiKyhGPjE/InMiOiIiKSksTz4wJiYoTis9YCR7Tj8iLCAiOiIifSR7''@;'; put 'put ''T30gbWludXRlJHtPPjE/InMiOiIifWApLHo+MCYmKE4rPWAke04/IiwgIjoiIn0ke3p9IHNlY29uZCR7ej4xPyJzIjoiIn1gKSxOfX0sODIzOToodWUscSk9PnsidXNlIHN0cmljdCI7dmFyIEk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuQ29u''@;'; put 'put ''ZmlnVHlwZXM9dm9pZCAwLChJPXEuQ29uZmlnVHlwZXN8fChxLkNvbmZpZ1R5cGVzPXt9KSkuQnVpbGQ9ImJ1aWxkQ29uZmlnIixJLlNlcnZpY2U9InNlcnZpY2VDb25maWciLEkuSm9iPSJqb2JDb25maWciLEkuVGVzdD0idGVzdENvbmZpZyIsSS5Eb2M9ImRvY0NvbmZpZyIsSS5EZXBsb3k9''@;'; put 'put ''ImRlcGxveUNvbmZpZyIsSS5TdHJlYW09InN0cmVhbUNvbmZpZyIsSS5BdXRoPSJhdXRoQ29uZmlnIn0sMjQyNzoodWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwxODk6KHVlLHEpPT57InVzZSBzdHJpY3QiO09i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMzY5MjoodWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw0NzI5Oih1ZSxxKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSTtPYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5MaW5lRW5kaW5ncz12b2lkIDAsKEk9cS5MaW5lRW5kaW5nc3x8KHEuTGluZUVuZGluZ3M9e30pKS5DUkxGPSJcclxuIixJLkxGPSJcbiJ9LDY5Mzk6KHVlLHEpPT57InVzZSBzdHJpY3QiO3ZhciBJO09iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLk1lbWJlclR5cGU9dm9pZCAwLChJPXEuTWVtYmVyVHlwZXx8KHEuTWVtYmVyVHlwZT17fSkpLnNlcnZpY2U9InNlcnZpY2UiLEkuZmlsZT0iZmlsZSIsSS5mb2xkZXI9ImZvbGRlciJ9LDMzMjc6KHVlLHEpPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNTE2NToodWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwzOTAwOmZ1bmN0aW9uKHVlLHEsXyl7InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihnLEIsdyxQKXt2b2lkIDA9PT1QJiYoUD13KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZyxQLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCW3ddfX0pfTpm''@;'; put 'put ''dW5jdGlvbihnLEIsdyxQKXt2b2lkIDA9PT1QJiYoUD13KSxnW1BdPUJbd119KSx5PXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihnLEIpe2Zvcih2YXIgdyBpbiBnKSJkZWZhdWx0IiE9PXcmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQix3KSYmSShC''@;'; put 'put ''LGcsdyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx5KF8oODIzOSkscSkseShfKDI0MjcpLHEpLHkoXygxODkpLHEpLHkoXygzNjkyKSxxKSx5KF8oNjkzOSkscSkseShfKDMzMjcpLHEpLHkoXyg1MTY1KSxxKSx5KF8oNDA2OSkscSkseShfKDg5''@;'; put 'put ''MzIpLHEpLHkoXyg0KSxxKSx5KF8oMjAxNSkscSkseShfKDg1MTUpLHEpLHkoXyg1MzEzKSxxKSx5KF8oODk3OSkscSkseShfKDQ3MjkpLHEpfSw0MDY5Oih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5pc01h''@;'; put 'put ''Y3JvVmFycz12b2lkIDAscS5pc01hY3JvVmFycz1JPT5JJiYib2JqZWN0Ij09dHlwZW9mIEkubWFjcm9WYXJzJiYhQXJyYXkuaXNBcnJheShJLm1hY3JvVmFycyl9LDg5MzI6KHVlLHEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6''@;'; put 'put ''ITB9KX0sNDoodWUscSk9PnsidXNlIHN0cmljdCI7dmFyIEk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuU0FTSnNGaWxlVHlwZT12b2lkIDAsKEk9cS5TQVNKc0ZpbGVUeXBlfHwocS5TQVNKc0ZpbGVUeXBlPXt9KSkuc2VydmljZT0iU2Vydmlj''@;'; put 'put ''ZSIsSS5qb2I9IkpvYiIsSS50ZXN0PSJUZXN0IixJLmZpbGU9IkZpbGUifSwyMDE1Oih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDg1MTU6KHVlLHEpPT57InVzZSBzdHJpY3QiO3ZhciBJO09iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLlNlcnZlclR5cGU9dm9pZCAwLChJPXEuU2VydmVyVHlwZXx8KHEuU2VydmVyVHlwZT17fSkpLlNhc1ZpeWE9IlNBU1ZJWUEiLEkuU2FzOT0iU0FTOSIsSS5TYXNqcz0iU0FTSlMifSw1MzEzOih1ZSxxKT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDg5Nzk6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuVGFyZ2V0PXZvaWQgMDtjb25zdCBJPV8oODIzOSks''@;'; put 'put ''eT1fKDg1MTUpLGc9Xyg2NzgxKTtxLlRhcmdldD1jbGFzcyBCe2NvbnN0cnVjdG9yKFAsRj17fSl7dGhpcy5fc2VydmVyVHlwZT15LlNlcnZlclR5cGUuU2FzVml5YSx0aGlzLmdldENvbmZpZz0oTyx6KT0+T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuX2NvbmZpZ1tPXXx8''@;'; put 'put ''e30pLHpbT10pO3RyeXtpZighUCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdGFyZ2V0OiBJbnB1dCBKU09OIGlzIG51bGwgb3IgdW5kZWZpbmVkLiIpO3RoaXMuX2NvbmZpZz1GLHRoaXMuX25hbWU9KDAsZy52YWxpZGF0ZVRhcmdldE5hbWUpKFAubmFtZSksdGhpcy5fc2VydmVyVXJsPSgw''@;'; put 'put ''LGcudmFsaWRhdGVTZXJ2ZXJVcmwpKFAuc2VydmVyVXJsKSx0aGlzLl9zZXJ2ZXJUeXBlPSgwLGcudmFsaWRhdGVTZXJ2ZXJUeXBlKShQLnNlcnZlclR5cGUpLHRoaXMuX2h0dHBzQWdlbnRPcHRpb25zPSgwLGcudmFsaWRhdGVIdHRwc0FnZW50T3B0aW9ucykoUC5odHRwc0FnZW50T3B0aW9u''@;'; put 'put ''cyksdGhpcy5fYXBwTG9jPSgwLGcudmFsaWRhdGVBcHBMb2MpKFAuYXBwTG9jKSx0aGlzLl9jb250ZXh0TmFtZT0oMCxnLnZhbGlkYXRlQ29udGV4dE5hbWUpKFAuY29udGV4dE5hbWUsdGhpcy5fc2VydmVyVHlwZSksdGhpcy5fc2VydmVyTmFtZT0oMCxnLnZhbGlkYXRlU2VydmVyTmFtZSko''@;'; put 'put ''UC5zZXJ2ZXJOYW1lLHRoaXMuX3NlcnZlclR5cGUpLHRoaXMuX3N5bmNGb2xkZXI9KDAsZy52YWxpZGF0ZVN5bmNGb2xkZXIpKFAuc3luY0ZvbGRlciksdGhpcy5fcmVwb3NpdG9yeU5hbWU9KDAsZy52YWxpZGF0ZVJlcG9zaXRvcnlOYW1lKShQLnJlcG9zaXRvcnlOYW1lLHRoaXMuX3NlcnZl''@;'; put 'put ''clR5cGUpLFAuZG9jQ29uZmlnJiYodGhpcy5fZG9jQ29uZmlnPSgwLGcudmFsaWRhdGVEb2NDb25maWcpKHRoaXMuZ2V0Q29uZmlnKEkuQ29uZmlnVHlwZXMuRG9jLFApKSksUC5hdXRoQ29uZmlnJiYodGhpcy5fYXV0aENvbmZpZz0oMCxnLnZhbGlkYXRlQXV0aENvbmZpZykodGhpcy5nZXRD''@;'; put 'put ''b25maWcoSS5Db25maWdUeXBlcy5BdXRoLFApKSksUC5hdXRoQ29uZmlnU2FzOSYmKHRoaXMuX2F1dGhDb25maWdTYXM5PSgwLGcudmFsaWRhdGVBdXRoQ29uZmlnU2FzOSkoUC5hdXRoQ29uZmlnU2FzOSkpLFAuYnVpbGRDb25maWcmJih0aGlzLl9idWlsZENvbmZpZz0oMCxnLnZhbGlkYXRl''@;'; put 'put ''QnVpbGRDb25maWcpKHRoaXMuZ2V0Q29uZmlnKEkuQ29uZmlnVHlwZXMuQnVpbGQsUCksdGhpcy5fbmFtZSkpLHRoaXMuX2RlcGxveUNvbmZpZz0oMCxnLnZhbGlkYXRlRGVwbG95Q29uZmlnKShQLmRlcGxveUNvbmZpZz90aGlzLmdldENvbmZpZyhJLkNvbmZpZ1R5cGVzLkRlcGxveSxQKTp7''@;'; put 'put ''ZGVwbG95U2VydmljZVBhY2s6ITAsZGVwbG95U2NyaXB0czpbXX0pLFAuc2VydmljZUNvbmZpZyYmKHRoaXMuX3NlcnZpY2VDb25maWc9KDAsZy52YWxpZGF0ZVNlcnZpY2VDb25maWcpKHRoaXMuZ2V0Q29uZmlnKEkuQ29uZmlnVHlwZXMuU2VydmljZSxQKSkpLFAuam9iQ29uZmlnJiYodGhp''@;'; put 'put ''cy5fam9iQ29uZmlnPSgwLGcudmFsaWRhdGVKb2JDb25maWcpKHRoaXMuZ2V0Q29uZmlnKEkuQ29uZmlnVHlwZXMuSm9iLFApKSksUC5zdHJlYW1Db25maWcmJih0aGlzLl9zdHJlYW1Db25maWc9KDAsZy52YWxpZGF0ZVN0cmVhbUNvbmZpZykodGhpcy5nZXRDb25maWcoSS5Db25maWdUeXBl''@;'; put 'put ''cy5TdHJlYW0sUCkpKSxQLnRlc3RDb25maWcmJih0aGlzLl90ZXN0Q29uZmlnPSgwLGcudmFsaWRhdGVUZXN0Q29uZmlnKSh0aGlzLmdldENvbmZpZyhJLkNvbmZpZ1R5cGVzLlRlc3QsUCkpKSxQLm1hY3JvRm9sZGVycyYmUC5tYWNyb0ZvbGRlcnMubGVuZ3RoJiYodGhpcy5fbWFjcm9Gb2xk''@;'; put 'put ''ZXJzPVAubWFjcm9Gb2xkZXJzKSxQLnByb2dyYW1Gb2xkZXJzJiZQLnByb2dyYW1Gb2xkZXJzLmxlbmd0aCYmKHRoaXMuX3Byb2dyYW1Gb2xkZXJzPVAucHJvZ3JhbUZvbGRlcnMpLFAuYmluYXJ5Rm9sZGVycyYmUC5iaW5hcnlGb2xkZXJzLmxlbmd0aCYmKHRoaXMuX2JpbmFyeUZvbGRlcnM9''@;'; put 'put ''UC5iaW5hcnlGb2xkZXJzKSxQLnN5bmNEaXJlY3RvcmllcyYmUC5zeW5jRGlyZWN0b3JpZXMubGVuZ3RoJiYodGhpcy5fc3luY0RpcmVjdG9yaWVzPSgwLGcudmFsaWRhdGVTeW5jRGlyZWN0b3JpZXMpKFAuc3luY0RpcmVjdG9yaWVzKSksUC5zYXNqc0J1aWxkRm9sZGVyJiYodGhpcy5fc2Fz''@;'; put 'put ''anNCdWlsZEZvbGRlcj0oMCxnLnZhbGlkYXRlU2FzanNCdWlsZEZvbGRlcikoUC5zYXNqc0J1aWxkRm9sZGVyKSksUC5zYXNqc1Jlc3VsdHNGb2xkZXImJih0aGlzLl9zYXNqc1Jlc3VsdHNGb2xkZXI9KDAsZy52YWxpZGF0ZVNhc2pzUmVzdWx0c0ZvbGRlcikoUC5zYXNqc1Jlc3VsdHNGb2xk''@;'; put 'put ''ZXIpKX1jYXRjaChPKXt0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHBhcnNpbmcgdGFyZ2V0OiAke08ubWVzc2FnZX1gKX19Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5fbmFtZX1nZXQgc2VydmVyVXJsKCl7cmV0dXJuIHRoaXMuX3NlcnZlclVybH1nZXQgc2VydmVyVHlwZSgpe3JldHVybiB0aGlz''@;'; put 'put ''Ll9zZXJ2ZXJUeXBlfWdldCBodHRwc0FnZW50T3B0aW9ucygpe3JldHVybiB0aGlzLl9odHRwc0FnZW50T3B0aW9uc31nZXQgYXBwTG9jKCl7cmV0dXJuIHRoaXMuX2FwcExvY31nZXQgZG9jQ29uZmlnKCl7cmV0dXJuIHRoaXMuX2RvY0NvbmZpZ31nZXQgYXV0aENvbmZpZygpe3JldHVybiB0''@;'; put 'put ''aGlzLl9hdXRoQ29uZmlnfWdldCBhdXRoQ29uZmlnU2FzOSgpe3JldHVybiB0aGlzLl9hdXRoQ29uZmlnU2FzOX1nZXQgYnVpbGRDb25maWcoKXtyZXR1cm4gdGhpcy5fYnVpbGRDb25maWd9Z2V0IGRlcGxveUNvbmZpZygpe3JldHVybiB0aGlzLl9kZXBsb3lDb25maWd9Z2V0IHNlcnZpY2VD''@;'; put 'put ''b25maWcoKXtyZXR1cm4gdGhpcy5fc2VydmljZUNvbmZpZ31nZXQgam9iQ29uZmlnKCl7cmV0dXJuIHRoaXMuX2pvYkNvbmZpZ31nZXQgc3RyZWFtQ29uZmlnKCl7cmV0dXJuIHRoaXMuX3N0cmVhbUNvbmZpZ31nZXQgbWFjcm9Gb2xkZXJzKCl7cmV0dXJuIHRoaXMuX21hY3JvRm9sZGVyc31n''@;'; put 'put ''ZXQgcHJvZ3JhbUZvbGRlcnMoKXtyZXR1cm4gdGhpcy5fcHJvZ3JhbUZvbGRlcnN9Z2V0IGJpbmFyeUZvbGRlcnMoKXtyZXR1cm4gdGhpcy5fYmluYXJ5Rm9sZGVyc31nZXQgY29udGV4dE5hbWUoKXtyZXR1cm4gdGhpcy5fY29udGV4dE5hbWV9Z2V0IHNlcnZlck5hbWUoKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5fc2VydmVyTmFtZX1nZXQgcmVwb3NpdG9yeU5hbWUoKXtyZXR1cm4gdGhpcy5fcmVwb3NpdG9yeU5hbWV9Z2V0IHRlc3RDb25maWcoKXtyZXR1cm4gdGhpcy5fdGVzdENvbmZpZ31nZXQgc3luY0ZvbGRlcigpe3JldHVybiB0aGlzLl9zeW5jRm9sZGVyfWdldCBzeW5jRGlyZWN0b3JpZXMo''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fc3luY0RpcmVjdG9yaWVzfWdldCBzYXNqc0J1aWxkRm9sZGVyKCl7cmV0dXJuIHRoaXMuX3Nhc2pzQnVpbGRGb2xkZXJ9Z2V0IHNhc2pzUmVzdWx0c0ZvbGRlcigpe3JldHVybiB0aGlzLl9zYXNqc1Jlc3VsdHNGb2xkZXJ9dG9Kc29uKFA9ITApe3ZhciBGLE8sejtj''@;'; put 'put ''b25zdCBOPXtuYW1lOnRoaXMubmFtZSxzZXJ2ZXJVcmw6dGhpcy5zZXJ2ZXJVcmwsc2VydmVyVHlwZTp0aGlzLnNlcnZlclR5cGUsaHR0cHNBZ2VudE9wdGlvbnM6dGhpcy5odHRwc0FnZW50T3B0aW9ucyxhcHBMb2M6dGhpcy5hcHBMb2MsZG9jQ29uZmlnOnRoaXMuZG9jQ29uZmlnLGRlcGxv''@;'; put 'put ''eUNvbmZpZzp0aGlzLmRlcGxveUNvbmZpZ307cmV0dXJuIShudWxsPT09KEY9dGhpcy5tYWNyb0ZvbGRlcnMpfHx2b2lkIDA9PT1GKSYmRi5sZW5ndGgmJihOLm1hY3JvRm9sZGVycz10aGlzLm1hY3JvRm9sZGVycyksIShudWxsPT09KE89dGhpcy5wcm9ncmFtRm9sZGVycyl8fHZvaWQgMD09''@;'; put 'put ''PU8pJiZPLmxlbmd0aCYmKE4ucHJvZ3JhbUZvbGRlcnM9dGhpcy5wcm9ncmFtRm9sZGVycyksIShudWxsPT09KHo9dGhpcy5iaW5hcnlGb2xkZXJzKXx8dm9pZCAwPT09eikmJnoubGVuZ3RoJiYoTi5iaW5hcnlGb2xkZXJzPXRoaXMuYmluYXJ5Rm9sZGVycyksdGhpcy5hdXRoQ29uZmlnJiYo''@;'; put 'put ''Ti5hdXRoQ29uZmlnPXRoaXMuYXV0aENvbmZpZyksdGhpcy5hdXRoQ29uZmlnU2FzOSYmKE4uYXV0aENvbmZpZ1Nhczk9dGhpcy5hdXRoQ29uZmlnU2FzOSksdGhpcy5zYXNqc0J1aWxkRm9sZGVyP04uc2FzanNCdWlsZEZvbGRlcj10aGlzLnNhc2pzQnVpbGRGb2xkZXI6UCYmKE4uc2FzanNC''@;'; put 'put ''dWlsZEZvbGRlcj1nLkRFRkFVTFRfU0FTSlNfQlVJTERfRk9MREVSKSx0aGlzLnNhc2pzUmVzdWx0c0ZvbGRlcj9OLnNhc2pzUmVzdWx0c0ZvbGRlcj10aGlzLnNhc2pzUmVzdWx0c0ZvbGRlcjpQJiYoTi5zYXNqc1Jlc3VsdHNGb2xkZXI9Zy5ERUZBVUxUX1NBU0pTX1JFU1VMVFNfRk9MREVS''@;'; put 'put ''KSx0aGlzLnN5bmNEaXJlY3Rvcmllcz9OLnN5bmNEaXJlY3Rvcmllcz10aGlzLnN5bmNEaXJlY3RvcmllczpQJiYoTi5zeW5jRGlyZWN0b3JpZXM9W10pLHRoaXMuYnVpbGRDb25maWc/Ti5idWlsZENvbmZpZz10aGlzLmJ1aWxkQ29uZmlnOlAmJihOLmJ1aWxkQ29uZmlnPXtpbml0UHJvZ3Jh''@;'; put 'put ''bToiIix0ZXJtUHJvZ3JhbToiIixidWlsZE91dHB1dEZpbGVOYW1lOmAke3RoaXMubmFtZX0uc2FzYCxtYWNyb1ZhcnM6e319KSx0aGlzLmpvYkNvbmZpZz9OLmpvYkNvbmZpZz10aGlzLmpvYkNvbmZpZzpQJiYoTi5qb2JDb25maWc9e2pvYkZvbGRlcnM6W10saW5pdFByb2dyYW06IiIsdGVy''@;'; put 'put ''bVByb2dyYW06IiIsbWFjcm9WYXJzOnt9fSksdGhpcy5zZXJ2aWNlQ29uZmlnP04uc2VydmljZUNvbmZpZz10aGlzLnNlcnZpY2VDb25maWc6UCYmKE4uc2VydmljZUNvbmZpZz17c2VydmljZUZvbGRlcnM6W10saW5pdFByb2dyYW06IiIsdGVybVByb2dyYW06IiIsbWFjcm9WYXJzOnt9fSks''@;'; put 'put ''dGhpcy5zdHJlYW1Db25maWc/Ti5zdHJlYW1Db25maWc9dGhpcy5zdHJlYW1Db25maWc6UCYmKE4uc3RyZWFtQ29uZmlnPXtzdHJlYW1XZWJGb2xkZXI6IiIsc3RyZWFtV2ViOiExLHdlYlNvdXJjZVBhdGg6IiIsc3RyZWFtU2VydmljZU5hbWU6IiIsYXNzZXRQYXRoczpbXX0pLHRoaXMudGVz''@;'; put 'put ''dENvbmZpZz9OLnRlc3RDb25maWc9dGhpcy50ZXN0Q29uZmlnOlAmJihOLnRlc3RDb25maWc9e2luaXRQcm9ncmFtOiIiLHRlcm1Qcm9ncmFtOiIiLG1hY3JvVmFyczp7fSx0ZXN0U2V0VXA6IiIsdGVzdFRlYXJEb3duOiIifSksdGhpcy5zZXJ2ZXJUeXBlPT09eS5TZXJ2ZXJUeXBlLlNhc1Zp''@;'; put 'put ''eWE/Ti5jb250ZXh0TmFtZT10aGlzLmNvbnRleHROYW1lOnRoaXMuc2VydmVyVHlwZT09PXkuU2VydmVyVHlwZS5TYXM5JiYoTi5zZXJ2ZXJOYW1lPXRoaXMuc2VydmVyTmFtZSxOLnJlcG9zaXRvcnlOYW1lPXRoaXMucmVwb3NpdG9yeU5hbWUpLE59fX0sNjc4MTpmdW5jdGlvbih1ZSxxLF8p''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24ocCl7cmV0dXJuIHAmJnAuX19lc01vZHVsZT9wOntkZWZhdWx0OnB9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS52YWxpZGF0ZVNhc2pzUmVz''@;'; put 'put ''dWx0c0ZvbGRlcj1xLnZhbGlkYXRlU2FzanNCdWlsZEZvbGRlcj1xLnZhbGlkYXRlU3luY0RpcmVjdG9yaWVzPXEudmFsaWRhdGVSZXBvc2l0b3J5TmFtZT1xLnZhbGlkYXRlU3luY0ZvbGRlcj1xLnZhbGlkYXRlU2VydmVyTmFtZT1xLnZhbGlkYXRlQ29udGV4dE5hbWU9cS52YWxpZGF0ZVN0''@;'; put 'put ''cmVhbUNvbmZpZz1xLnZhbGlkYXRlRGVwbG95Q29uZmlnPXEudmFsaWRhdGVKb2JDb25maWc9cS52YWxpZGF0ZVRlc3RDb25maWc9cS52YWxpZGF0ZVNlcnZpY2VDb25maWc9cS52YWxpZGF0ZUJ1aWxkQ29uZmlnPXEudmFsaWRhdGVBdXRoQ29uZmlnU2FzOT1xLnZhbGlkYXRlQXV0aENvbmZp''@;'; put 'put ''Zz1xLnZhbGlkYXRlRG9jQ29uZmlnPXEudmFsaWRhdGVBcHBMb2M9cS52YWxpZGF0ZUh0dHBzQWdlbnRPcHRpb25zPXEudmFsaWRhdGVTZXJ2ZXJVcmw9cS52YWxpZGF0ZVRhcmdldE5hbWU9cS52YWxpZGF0ZVNlcnZlclR5cGU9cS5ERUZBVUxUX1NBU0pTX1JFU1VMVFNfRk9MREVSPXEuREVG''@;'; put 'put ''QVVMVF9TQVNKU19CVUlMRF9GT0xERVI9dm9pZCAwO2NvbnN0IHk9SShfKDQ4MSkpLGc9XygzOTAwKTtxLkRFRkFVTFRfU0FTSlNfQlVJTERfRk9MREVSPSJzYXNqc2J1aWxkIixxLkRFRkFVTFRfU0FTSlNfUkVTVUxUU19GT0xERVI9InNhc2pzcmVzdWx0cyIscS52YWxpZGF0ZVNlcnZlclR5''@;'; put 'put ''cGU9cD0+e2lmKCFwKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzZXJ2ZXIgdHlwZTogYHNlcnZlclR5cGVgIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtpZihwIT09Zy5TZXJ2ZXJUeXBlLlNhczkmJnAhPT1nLlNlcnZlclR5cGUuU2FzVml5YSYmcCE9PWcuU2VydmVyVHlwZS5T''@;'; put 'put ''YXNqcyl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgc2VydmVyIHR5cGU6IFN1cHBvcnRlZCB2YWx1ZXMgZm9yICBcYHNlcnZlclR5cGVcYCBhcmUgJHtnLlNlcnZlclR5cGUuU2FzVml5YX0sICR7Zy5TZXJ2ZXJUeXBlLlNhczl9IGFuZCAke2cuU2VydmVyVHlwZS5TYXNqc30uYCk7cmV0dXJu''@;'; put 'put ''IHB9LHEudmFsaWRhdGVUYXJnZXROYW1lPXA9PntpZighcCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdGFyZ2V0IG5hbWU6IGBuYW1lYCBjYW5ub3QgYmUgZW1wdHksIG51bGwgb3IgdW5kZWZpbmVkLiIpO2lmKHAudHJpbSgpLmluY2x1ZGVzKCIgIikpdGhyb3cgbmV3IEVycm9yKCJJbnZh''@;'; put 'put ''bGlkIHRhcmdldCBuYW1lOiBgbmFtZWAgY2Fubm90IGluY2x1ZGUgc3BhY2VzLiIpO2lmKCEvXlthLXpBLVowLTlcLV0rJC9pLnRlc3QocCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHRhcmdldCBuYW1lOiBgbmFtZWAgY2FuIG9ubHkgY29udGFpbiBhbHBoYW51bWVyaWMgY2hhcmFjdGVy''@;'; put 'put ''cyBhbmQgZGFzaGVzLiIpO3JldHVybiBwfSxxLnZhbGlkYXRlU2VydmVyVXJsPXA9PntpZihudWxsPT1wJiYocD0iIiksIiIhPT1wJiYheS5kZWZhdWx0LmlzSHR0cFVyaShwKSYmIXkuZGVmYXVsdC5pc0h0dHBzVXJpKHApKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBzZXJ2ZXIgVVJMOiBg''@;'; put 'put ''c2VydmVyVXJsYCBzaG91bGQgZWl0aGVyIGJlIGFuIGVtcHR5IHN0cmluZyBvciBhIHZhbGlkIFVSTCBvZiB0aGUgZm9ybSBodHRwKHMpOi8veW91ci1zZXJ2ZXIuY29tKDpwb3J0KS4iKTtyZXR1cm4gcH0scS52YWxpZGF0ZUh0dHBzQWdlbnRPcHRpb25zPXA9PntpZihwKXtpZigib2JqZWN0''@;'; put 'put ''IiE9dHlwZW9mIHApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHZhbHVlOiBgaHR0cHNBZ2VudE9wdGlvbnNgIHNob3VsZCBlaXRoZXIgYmUgYW4gZW1wdHkgb3IgYW4gb2JqZWN0IG9mIGBIdHRwc0FnZW50T3B0aW9uc2AiKTtpZihudWxsPT1wLmFsbG93SW5zZWN1cmVSZXF1ZXN0cylwLmFs''@;'; put 'put ''bG93SW5zZWN1cmVSZXF1ZXN0cz0hMTtlbHNlIGlmKCJib29sZWFuIiE9dHlwZW9mIHAuYWxsb3dJbnNlY3VyZVJlcXVlc3RzKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCB2YWx1ZTogYGh0dHBzQWdlbnRPcHRpb25zLmFsbG93SW5zZWN1cmVSZXF1ZXN0c2Agc2hvdWxkIGVpdGhlciBiZSBh''@;'; put 'put ''biBlbXB0eSBvciBhIGJvb2xlYW4iKTtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIHAuY2FQYXRoJiYocC5jYVBhdGg9dm9pZCAwKSwic3RyaW5nIiE9dHlwZW9mIHAua2V5UGF0aCYmKHAua2V5UGF0aD12b2lkIDApLCJzdHJpbmciIT10eXBlb2YgcC5jZXJ0UGF0aCYmKHAuY2VydFBhdGg9dm9p''@;'; put 'put ''ZCAwKSxwfX0scS52YWxpZGF0ZUFwcExvYz1wPT57aWYoIXApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGFwcCBsb2NhdGlvbjogYGFwcExvY2AgY2Fubm90IGJlIGVtcHR5LCBudWxsIG9yIHVuZGVmaW5lZC4iKTtpZighcC5zdGFydHNXaXRoKCIvIikpdGhyb3cgbmV3IEVycm9yKCJJbnZh''@;'; put 'put ''bGlkIGFwcCBsb2NhdGlvbjogYGFwcExvY2AgbXVzdCBzdGFydCB3aXRoIGEgYC9gLiIpO3JldHVybiBwfSxxLnZhbGlkYXRlRG9jQ29uZmlnPXA9PntpZihwfHwocD17fSksImJvb2xlYW4iIT10eXBlb2YgcC5kaXNwbGF5TWFjcm9Db3JlJiYocC5kaXNwbGF5TWFjcm9Db3JlPXZvaWQgMCks''@;'; put 'put ''ImJvb2xlYW4iIT10eXBlb2YgcC5lbmFibGVMaW5lYWdlJiYocC5lbmFibGVMaW5lYWdlPXZvaWQgMCksInN0cmluZyIhPXR5cGVvZiBwLm91dERpcmVjdG9yeSYmKHAub3V0RGlyZWN0b3J5PXZvaWQgMCksInN0cmluZyI9PXR5cGVvZiBwLmRhdGFDb250cm9sbGVyVXJsKXtpZigiIiE9PXAu''@;'; put 'put ''ZGF0YUNvbnRyb2xsZXJVcmwmJiF5LmRlZmF1bHQuaXNIdHRwVXJpKHAuZGF0YUNvbnRyb2xsZXJVcmwpJiYheS5kZWZhdWx0LmlzSHR0cHNVcmkocC5kYXRhQ29udHJvbGxlclVybCkpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIERhdGEgQ29udHJvbGxlciBVcmw6IGBkYXRhQ29udHJvbGxl''@;'; put 'put ''clVybGAgc2hvdWxkIGVpdGhlciBiZSBhbiBlbXB0eSBzdHJpbmcgb3IgYSB2YWxpZCBVUkwgb2YgdGhlIGZvcm0gaHR0cChzKTovL3lvdXItc2VydmVyLmNvbSg6cG9ydCkuIil9ZWxzZSBwLmRhdGFDb250cm9sbGVyVXJsPXZvaWQgMDtyZXR1cm4gcH0scS52YWxpZGF0ZUF1dGhDb25maWc9''@;'; put 'put ''cD0+e2lmKCFwKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBhdXRoIGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIHB9LHEudmFsaWRhdGVBdXRoQ29uZmlnU2FzOT1wPT57aWYoIXApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGF1dGggY29uZmln''@;'; put 'put ''IGZvciBzYXM5OiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtpZighcC51c2VyTmFtZXx8IXAucGFzc3dvcmQpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGF1dGggY29uZmlnIGZvciBzYXM5OiB1c2VyTmFtZSBhbmQgcGFzc3dvcmQgY2FuIG5vdCBiZSBlbXB0eSIpO3Jl''@;'; put 'put ''dHVybiBwfSxxLnZhbGlkYXRlQnVpbGRDb25maWc9KHAsYik9PntpZighcCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgYnVpbGQgY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gcC5idWlsZE91dHB1dEZpbGVOYW1lfHwocC5idWlsZE91dHB1dEZp''@;'; put 'put ''bGVOYW1lPWAke2J9LnNhc2ApLHAuaW5pdFByb2dyYW18fChwLmluaXRQcm9ncmFtPSIiKSxwLnRlcm1Qcm9ncmFtfHwocC50ZXJtUHJvZ3JhbT0iIikscC5tYWNyb1ZhcnN8fChwLm1hY3JvVmFycz17fSkscH0scS52YWxpZGF0ZVNlcnZpY2VDb25maWc9cD0+e2lmKCFwKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcigiSW52YWxpZCBzZXJ2aWNlIGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7cmV0dXJuIHAuaW5pdFByb2dyYW18fChwLmluaXRQcm9ncmFtPSIiKSxwLnRlcm1Qcm9ncmFtfHwocC50ZXJtUHJvZ3JhbT0iIikscC5zZXJ2aWNlRm9sZGVyc3x8KHAuc2Vy''@;'; put 'put ''dmljZUZvbGRlcnM9W10pLHAubWFjcm9WYXJzfHwocC5tYWNyb1ZhcnM9e30pLHB9LHEudmFsaWRhdGVUZXN0Q29uZmlnPXA9PntpZighcCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgdGVzdCBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBwLmlu''@;'; put 'put ''aXRQcm9ncmFtfHwocC5pbml0UHJvZ3JhbT0iIikscC50ZXJtUHJvZ3JhbXx8KHAudGVybVByb2dyYW09IiIpLHAubWFjcm9WYXJzfHwocC5tYWNyb1ZhcnM9e30pLHAudGVzdFNldFVwfHwocC50ZXN0U2V0VXA9IiIpLHAudGVzdFRlYXJEb3dufHwocC50ZXN0VGVhckRvd249IiIpLHB9LHEu''@;'; put 'put ''dmFsaWRhdGVKb2JDb25maWc9cD0+e2lmKCFwKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBqb2IgY29uZmlnOiBKU09OIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gcC5pbml0UHJvZ3JhbXx8KHAuaW5pdFByb2dyYW09IiIpLHAudGVybVByb2dyYW18fChwLnRlcm1Q''@;'; put 'put ''cm9ncmFtPSIiKSxwLmpvYkZvbGRlcnN8fChwLmpvYkZvbGRlcnM9W10pLHAubWFjcm9WYXJzfHwocC5tYWNyb1ZhcnM9e30pLHB9LHEudmFsaWRhdGVEZXBsb3lDb25maWc9cD0+e2lmKCFwKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBkZXBsb3kgY29uZmlnOiBKU09OIGNhbm5vdCBiZSBu''@;'; put 'put ''dWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4gcC5kZXBsb3lTZXJ2aWNlUGFjaz0hIXAuZGVwbG95U2VydmljZVBhY2sscC5kZXBsb3lTY3JpcHRzfHwocC5kZXBsb3lTY3JpcHRzPVtdKSxwfSxxLnZhbGlkYXRlU3RyZWFtQ29uZmlnPXA9PntpZighcCl0aHJvdyBuZXcgRXJyb3IoIkludmFs''@;'; put 'put ''aWQgc3RyZWFtIGNvbmZpZzogSlNPTiBjYW5ub3QgYmUgbnVsbCBvciB1bmRlZmluZWQuIik7aWYoITAhPT1wLnN0cmVhbVdlYiYmITEhPT1wLnN0cmVhbVdlYil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyZWFtIGNvbmZpZzogYHN0cmVhbVdlYmAgY2Fubm90IGJlIGEgbm9uLWJvb2xl''@;'; put 'put ''YW4gdmFsdWUuIik7aWYocC5zdHJlYW1XZWImJiFwLnN0cmVhbVdlYkZvbGRlcil0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyZWFtIGNvbmZpZzogYHN0cmVhbVdlYkZvbGRlcmAgY2Fubm90IGJlIGVtcHR5LCBudWxsIG9yIHVuZGVmaW5lZCB3aGVuIGBzdHJlYW1XZWJgIGlzIHRydWUu''@;'; put 'put ''Iik7aWYocC5zdHJlYW1XZWImJiFwLndlYlNvdXJjZVBhdGgpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmVhbSBjb25maWc6IGB3ZWJTb3VyY2VQYXRoYCBzaG91bGQgY29udGFpbiB0aGUgcGF0aCB0byB5b3VyIGZyb250ZW5kIGFwcGxpY2F0aW9uIGVnIGJ1aWxkLCBkaXN0LCBvciBz''@;'; put 'put ''cmMuIik7cmV0dXJuIHAuc3RyZWFtTG9nbyYmInN0cmluZyIhPXR5cGVvZiBwLnN0cmVhbUxvZ28mJihwLnN0cmVhbUxvZ289dm9pZCAwKSxwLmFzc2V0UGF0aHN8fChwLmFzc2V0UGF0aHM9W10pLHAuc3RyZWFtU2VydmljZU5hbWV8fChwLnN0cmVhbVNlcnZpY2VOYW1lPSJjbGlja21lIiks''@;'; put 'put ''cH0scS52YWxpZGF0ZUNvbnRleHROYW1lPShwLGIpPT5iIT09Zy5TZXJ2ZXJUeXBlLlNhc1ZpeWF8fHA/cDoiU0FTIEpvYiBFeGVjdXRpb24gY29tcHV0ZSBjb250ZXh0IixxLnZhbGlkYXRlU2VydmVyTmFtZT0ocCxiKT0+YiE9PWcuU2VydmVyVHlwZS5TYXM5fHxwP3A6IlNBU0FwcCIscS52''@;'; put 'put ''YWxpZGF0ZVN5bmNGb2xkZXI9cD0+e2lmKCJzdHJpbmciPT10eXBlb2YgcCYmcClyZXR1cm4gcH0scS52YWxpZGF0ZVJlcG9zaXRvcnlOYW1lPShwLGIpPT5iIT09Zy5TZXJ2ZXJUeXBlLlNhczl8fHA/cDoiRm91bmRhdGlvbiIscS52YWxpZGF0ZVN5bmNEaXJlY3Rvcmllcz1wPT57aWYoIXAp''@;'; put 'put ''dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN5bmNEaXJlY3RvcmllcyBjb25maWc6IEpTT04gY2Fubm90IGJlIG51bGwgb3IgdW5kZWZpbmVkLiIpO3JldHVybiBwLmZvckVhY2goYj0+e2lmKCFiLmxvY2FsfHwhYi5yZW1vdGUpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN5bmNEaXJlY3Rv''@;'; put 'put ''cnkgY29uZmlnOiB2YWx1ZXMgb2YgcHJvcGVydHkgJ2xvY2FsJyBhbmQgJ3JlbW90ZSBjYW4gbm90IGJlIGVtcHR5IG9yIHVuZGVmaW5lZCIpfSkscH0scS52YWxpZGF0ZVNhc2pzQnVpbGRGb2xkZXI9cD0+e2lmKCJzdHJpbmciIT10eXBlb2YgcCl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQg''@;'; put 'put ''dHlwZSBvZiB2YWx1ZSAoJHt0eXBlb2YgcH0pIGlzIHByb3ZpZGVkIGZvciBwcm9wZXJ0eSAnc2FzanNCdWlsZEZvbGRlcicgaW4gY29uZmlnLiBSZXF1aXJlZCBpcyBzdHJpbmcuYCk7cmV0dXJuIHB8fHEuREVGQVVMVF9TQVNKU19CVUlMRF9GT0xERVJ9LHEudmFsaWRhdGVTYXNqc1Jlc3Vs''@;'; put 'put ''dHNGb2xkZXI9cD0+e2lmKCJzdHJpbmciIT10eXBlb2YgcCl0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdHlwZSBvZiB2YWx1ZSAoJHt0eXBlb2YgcH0pIGlzIHByb3ZpZGVkIGZvciBwcm9wZXJ0eSAnc2FzanNSZXN1bHRzRm9sZGVyJyBpbiBjb25maWcuIFJlcXVpcmVkIGlzIHN0cmluZy5g''@;'; put 'put ''KTtyZXR1cm4gcHx8cS5ERUZBVUxUX1NBU0pTX1JFU1VMVFNfRk9MREVSfX0sMjkyNzpmdW5jdGlvbih1ZSxxLF8peyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDg3NjQpLkJ1ZmZlcix5PXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihGKXtyZXR1cm4gRiYmRi5fX2VzTW9kdWxl''@;'; put 'put ''P0Y6e2RlZmF1bHQ6Rn19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLmRlY29kZUZyb21CYXNlNjQ9cS5lbmNvZGVUb0Jhc2U2ND12b2lkIDA7Y29uc3QgZz15KF8oNTgzNSkpLEI9IntzYXNqc19lbmNvZGVkfSI7cS5lbmNvZGVUb0Jhc2U2ND1G''@;'; put 'put ''PT57Y29uc3QgTz1nLmRlZmF1bHQucmFuZG9tQnl0ZXMoMTAwKS50b1N0cmluZygiaGV4Iiksej1JLmZyb20oTytGKS50b1N0cmluZygiYmFzZTY0Iik7cmV0dXJuIEIren0scS5kZWNvZGVGcm9tQmFzZTY0PUY9PkYuc3RhcnRzV2l0aChCKT8oRj1GLnJlcGxhY2UoL157c2FzanNfZW5jb2Rl''@;'; put 'put ''ZH0vLCIiKSxJLmZyb20oRiwiYmFzZTY0IikudG9TdHJpbmcoKS5zdWJzdHJpbmcoMjAwKSk6Rn0sNTgxOih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5ieXRlc1RvU2l6ZT12b2lkIDAscS5ieXRlc1RvU2l6''@;'; put 'put ''ZT0oSSx5PTEsZz0xMDk5NTExNjI3Nzc2KT0+e2lmKDA9PT1JKXJldHVybiIwIEIiO0k9ST5nP2c6STtjb25zdCBQPXk8MD8wOnksRj1NYXRoLmZsb29yKE1hdGgubG9nKEkpL01hdGgubG9nKDEwMjQpKTtyZXR1cm4oSS9NYXRoLnBvdygxMDI0LEYpKS50b0ZpeGVkKFApKyIgIitbIkIiLCJL''@;'; put 'put ''QiIsIk1CIiwiR0IiLCJUQiJdW0ZdfX0sODY1MzoodWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuY2h1bms9dm9pZCAwLHEuY2h1bms9ZnVuY3Rpb24gXyhJLHk9MjIwKXtyZXR1cm4gSS5sZW5ndGg8PXk/W0ld''@;'; put 'put ''OihJLm1hdGNoKG5ldyBSZWdFeHAoIi57MSwiK3krIn0iLCJnIikpfHxbXSkuZmlsdGVyKGc9PiEhZyl9fSw2NDU3Oih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5kaWZmPXZvaWQgMCxxLmRpZmY9ZnVuY3Rp''@;'; put 'put ''b24gXyhJLHkpe3JldHVyblsuLi5JLmZpbHRlcih3PT4ib2JqZWN0Ij09dHlwZW9mIHc/IUpTT04uc3RyaW5naWZ5KHkpLmluY2x1ZGVzKEpTT04uc3RyaW5naWZ5KHcpKToheS5pbmNsdWRlcyh3KSksLi4ueS5maWx0ZXIodz0+Im9iamVjdCI9PXR5cGVvZiB3PyFKU09OLnN0cmluZ2lmeShJ''@;'; put 'put ''KS5pbmNsdWRlcyhKU09OLnN0cmluZ2lmeSh3KSk6IUkuaW5jbHVkZXModykpXX19LDE1Mjk6KHVlLHEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLmdldEV4ZWN1dG9yUGF0aD12b2lkIDA7Y29uc3QgXz17U0FTVklZ''@;'; put 'put ''QToiL1NBU0pvYkV4ZWN1dGlvbiIsU0FTOToiL1NBU1N0b3JlZFByb2Nlc3MvZG8ifTtxLmdldEV4ZWN1dG9yUGF0aD15PT55Pyh5PXkudG9VcHBlckNhc2UoKSxfW3ldfHwiIik6IiJ9LDMzMTY6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNN''@;'; put 'put ''b2R1bGUiLHt2YWx1ZTohMH0pLHEuZ2V0VHJlZUV4YW1wbGU9cS5pc0ZpbGVUcmVlPXZvaWQgMDtjb25zdCBJPV8oMzkwMCk7cS5pc0ZpbGVUcmVlPUY9PkYmJkYubWVtYmVycyYmQXJyYXkuaXNBcnJheShGLm1lbWJlcnMpJiYwPT09Ri5tZW1iZXJzLmZpbHRlcihPPT4hZyhPKSYmIUIoTykm''@;'; put 'put ''JiF3KE8pKS5sZW5ndGg7Y29uc3QgZz1GPT5GJiYic3RyaW5nIj09dHlwZW9mIEYubmFtZSYmRi50eXBlPT09SS5NZW1iZXJUeXBlLnNlcnZpY2UmJiJzdHJpbmciPT10eXBlb2YgRi5jb2RlLEI9Rj0+RiYmInN0cmluZyI9PXR5cGVvZiBGLm5hbWUmJkYudHlwZT09PUkuTWVtYmVyVHlwZS5m''@;'; put 'put ''aWxlJiYic3RyaW5nIj09dHlwZW9mIEYuY29kZSx3PUY9PkYmJiJzdHJpbmciPT10eXBlb2YgRi5uYW1lJiZGLnR5cGU9PT1JLk1lbWJlclR5cGUuZm9sZGVyJiZGLm1lbWJlcnMmJkFycmF5LmlzQXJyYXkoRi5tZW1iZXJzKSYmMD09PUYubWVtYmVycy5maWx0ZXIoTz0+IWcoTykmJiFCKE8p''@;'; put 'put ''JiYhdyhPKSkubGVuZ3RoO3EuZ2V0VHJlZUV4YW1wbGU9KCk9Pih7bWVtYmVyczpbe25hbWU6ImpvYnMiLHR5cGU6SS5NZW1iZXJUeXBlLmZvbGRlcixtZW1iZXJzOlt7bmFtZToiZXh0cmFjdCIsdHlwZTpJLk1lbWJlclR5cGUuZm9sZGVyLG1lbWJlcnM6W3tuYW1lOiJtYWtlZGF0YTEiLHR5''@;'; put 'put ''cGU6SS5NZW1iZXJUeXBlLnNlcnZpY2UsY29kZToiJXB1dCBIZWxsbyBXb3JsZCE7In1dfV19XX0pfSw2MjY2OmZ1bmN0aW9uKHVlLHEsXyl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihOLEwsSyxVKXt2b2lk''@;'; put 'put ''IDA9PT1VJiYoVT1LKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTixVLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBMW0tdfX0pfTpmdW5jdGlvbihOLEwsSyxVKXt2b2lkIDA9PT1VJiYoVT1LKSxOW1VdPUxbS119KSx5PXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5j''@;'; put 'put ''dGlvbihOLEwpe2Zvcih2YXIgSyBpbiBOKSJkZWZhdWx0IiE9PUsmJiFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoTCxLKSYmSShMLE4sSyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLmNodW5rPXEuZGlmZj1xLmJ5dGVz''@;'; put 'put ''VG9TaXplPXEuZ2V0RXhlY3V0b3JQYXRoPXEuZGVjb2RlRnJvbUJhc2U2ND1xLmVuY29kZVRvQmFzZTY0PXEudXJsT3JpZ2luPXEuZ2VuZXJhdGVQYXRoRm9yU2FzPXEuZ2V0TWFjcm9zUGF0aD1xLmVzY2FwZVdpblNsYXNoZXM9cS5pc0xpbnV4PXEuaXNXaW5kb3dzPXEudW5pcUFycmF5PXEu''@;'; put 'put ''YXN5bmNGb3JFYWNoPXEudXVpZHY0PXZvaWQgMDt2YXIgZz1fKDExMzEpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJ1dWlkdjQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLnV1aWR2NH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiYXN5bmNGb3JFYWNoIix7''@;'; put 'put ''ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5hc3luY0ZvckVhY2h9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHEsInVuaXFBcnJheSIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcudW5pcUFycmF5fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShx''@;'; put 'put ''LCJpc1dpbmRvd3MiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnLmlzV2luZG93c319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiaXNMaW51eCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuaXNMaW51eH19KSxPYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkocSwiZXNjYXBlV2luU2xhc2hlcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcuZXNjYXBlV2luU2xhc2hlc319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiZ2V0TWFjcm9zUGF0aCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGcu''@;'; put 'put ''Z2V0TWFjcm9zUGF0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiZ2VuZXJhdGVQYXRoRm9yU2FzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZy5nZW5lcmF0ZVBhdGhGb3JTYXN9fSkseShfKDMzMTYpLHEpO3ZhciBCPV8oOTY1Mik7T2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KHEsInVybE9yaWdpbiIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEIudXJsT3JpZ2lufX0pO3ZhciB3PV8oMjkyNyk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsImVuY29kZVRvQmFzZTY0Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''dy5lbmNvZGVUb0Jhc2U2NH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiZGVjb2RlRnJvbUJhc2U2NCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHcuZGVjb2RlRnJvbUJhc2U2NH19KTt2YXIgUD1fKDE1MjkpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJnZXRF''@;'; put 'put ''eGVjdXRvclBhdGgiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBQLmdldEV4ZWN1dG9yUGF0aH19KTt2YXIgRj1fKDU4MSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsImJ5dGVzVG9TaXplIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gRi5ieXRl''@;'; put 'put ''c1RvU2l6ZX19KTt2YXIgTz1fKDY0NTcpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJkaWZmIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gTy5kaWZmfX0pO3ZhciB6PV8oODY1Myk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsImNodW5rIix7ZW51bWVyYWJsZTohMCxn''@;'; put 'put ''ZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gei5jaHVua319KX0sOTY1MjoodWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEudXJsT3JpZ2luPXZvaWQgMCxxLnVybE9yaWdpbj1JPT57aWYoIiI9PT1JKXJldHVybiBJO2xl''@;'; put 'put ''dCB5O3RyeXt5PW5ldyBVUkwoSSkub3JpZ2lufWNhdGNoe3Rocm93IG5ldyBFcnJvcigiSW52YWxpZCBVUkwuIil9cmV0dXJuIHl9fSwxMTMxOmZ1bmN0aW9uKHVlLHEsXyl7InVzZSBzdHJpY3QiO3ZhciB5PV8oNDE1NSksZz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oVyxZLFgs''@;'; put 'put ''ZWUpe3JldHVybiBuZXcoWHx8KFg9UHJvbWlzZSkpKGZ1bmN0aW9uKHJlLGllKXtmdW5jdGlvbiBsZShUZSl7dHJ5e19lKGVlLm5leHQoVGUpKX1jYXRjaChTZSl7aWUoU2UpfX1mdW5jdGlvbiBtZShUZSl7dHJ5e19lKGVlLnRocm93KFRlKSl9Y2F0Y2goU2Upe2llKFNlKX19ZnVuY3Rpb24g''@;'; put 'put ''X2UoVGUpe1RlLmRvbmU/cmUoVGUudmFsdWUpOmZ1bmN0aW9uIEoocmUpe3JldHVybiByZSBpbnN0YW5jZW9mIFg/cmU6bmV3IFgoZnVuY3Rpb24oaWUpe2llKHJlKX0pfShUZS52YWx1ZSkudGhlbihsZSxtZSl9X2UoKGVlPWVlLmFwcGx5KFcsWXx8W10pKS5uZXh0KCkpfSl9LEI9dGhpcyYm''@;'; put 'put ''dGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKFcpe3JldHVybiBXJiZXLl9fZXNNb2R1bGU/Vzp7ZGVmYXVsdDpXfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuZ2VuZXJhdGVQYXRoRm9yU2FzPXEuZ2V0TWFjcm9zUGF0aD1xLmVzY2Fw''@;'; put 'put ''ZVdpblNsYXNoZXM9cS5pc0xpbnV4PXEuaXNXaW5kb3dzPXEudW5pcUFycmF5PXEudXVpZHY0PXEuYXN5bmNGb3JFYWNoPXZvaWQgMDtjb25zdCB3PUIoXygyNTIwKSk7cS5hc3luY0ZvckVhY2g9ZnVuY3Rpb24gUChXLFkpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbioo''@;'; put 'put ''KXtmb3IobGV0IFg9MDtYPFcubGVuZ3RoO1grKyl5aWVsZCBZKFdbWF0sWCxXKX0pfSxxLnV1aWR2ND0oKT0+Inh4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCIucmVwbGFjZSgvW3h5XS9nLFc9Pntjb25zdCBZPTE2Kk1hdGgucmFuZG9tKCl8MDtyZXR1cm4oIngiPT1XP1k6''@;'; put 'put ''MyZZfDgpLnRvU3RyaW5nKDE2KX0pLHEudW5pcUFycmF5PVc9PkFycmF5LmZyb20obmV3IFNldChXKSkscS5pc1dpbmRvd3M9KCk9PiJ3aW4zMiI9PT15LnBsYXRmb3JtLHEuaXNMaW51eD0oKT0+ImxpbnV4Ij09PXkucGxhdGZvcm0scS5lc2NhcGVXaW5TbGFzaGVzPVc9PigwLHEuaXNXaW5k''@;'; put 'put ''b3dzKSgpP1cucmVwbGFjZSgvXFwvZywiXFxcXCIpOlcscS5nZXRNYWNyb3NQYXRoPSgpPT53LmRlZmF1bHQuam9pbigiLyIsIi4uIiwibWFjcm9zIikscS5nZW5lcmF0ZVBhdGhGb3JTYXM9Vz0+Vy5yZXBsYWNlKC9cXC9nLCIvIil9LDk4MDk6KHVlLHEsXyk9Pnt2YXIgST1xO0kuYmlnbnVt''@;'; put 'put ''PV8oNDU5MCksSS5kZWZpbmU9XygyNTAwKS5kZWZpbmUsSS5iYXNlPV8oMTk3OSksSS5jb25zdGFudHM9Xyg2ODI2KSxJLmRlY29kZXJzPV8oODMwNyksSS5lbmNvZGVycz1fKDY1NzkpfSwyNTAwOih1ZSxxLF8pPT57dmFyIEk9Xyg5ODA5KSx5PV8oNTcxNyk7ZnVuY3Rpb24gQih3LFApe3Ro''@;'; put 'put ''aXMubmFtZT13LHRoaXMuYm9keT1QLHRoaXMuZGVjb2RlcnM9e30sdGhpcy5lbmNvZGVycz17fX1xLmRlZmluZT1mdW5jdGlvbihQLEYpe3JldHVybiBuZXcgQihQLEYpfSxCLnByb3RvdHlwZS5fY3JlYXRlTmFtZWQ9ZnVuY3Rpb24oUCl7dmFyIEY7dHJ5e0Y9Xyg1MTQwKS5ydW5JblRoaXND''@;'; put 'put ''b250ZXh0KCIoZnVuY3Rpb24gIit0aGlzLm5hbWUrIihlbnRpdHkpIHtcbiAgdGhpcy5faW5pdE5hbWVkKGVudGl0eSk7XG59KSIpfWNhdGNoe0Y9ZnVuY3Rpb24oeil7dGhpcy5faW5pdE5hbWVkKHopfX1yZXR1cm4geShGLFApLEYucHJvdG90eXBlLl9pbml0TmFtZWQ9ZnVuY3Rpb24oeil7''@;'; put 'put ''UC5jYWxsKHRoaXMseil9LG5ldyBGKHRoaXMpfSxCLnByb3RvdHlwZS5fZ2V0RGVjb2Rlcj1mdW5jdGlvbihQKXtyZXR1cm4gdGhpcy5kZWNvZGVycy5oYXNPd25Qcm9wZXJ0eShQPVB8fCJkZXIiKXx8KHRoaXMuZGVjb2RlcnNbUF09dGhpcy5fY3JlYXRlTmFtZWQoSS5kZWNvZGVyc1tQXSkp''@;'; put 'put ''LHRoaXMuZGVjb2RlcnNbUF19LEIucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihQLEYsTyl7cmV0dXJuIHRoaXMuX2dldERlY29kZXIoRikuZGVjb2RlKFAsTyl9LEIucHJvdG90eXBlLl9nZXRFbmNvZGVyPWZ1bmN0aW9uKFApe3JldHVybiB0aGlzLmVuY29kZXJzLmhhc093blByb3BlcnR5''@;'; put 'put ''KFA9UHx8ImRlciIpfHwodGhpcy5lbmNvZGVyc1tQXT10aGlzLl9jcmVhdGVOYW1lZChJLmVuY29kZXJzW1BdKSksdGhpcy5lbmNvZGVyc1tQXX0sQi5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKFAsRixPKXtyZXR1cm4gdGhpcy5fZ2V0RW5jb2RlcihGKS5lbmNvZGUoUCxPKX19LDY2MjU6''@;'; put 'put ''KHVlLHEsXyk9Pnt2YXIgST1fKDU3MTcpLHk9XygxOTc5KS5SZXBvcnRlcixnPV8oODc2NCkuQnVmZmVyO2Z1bmN0aW9uIEIoUCxGKXt5LmNhbGwodGhpcyxGKSxnLmlzQnVmZmVyKFApPyh0aGlzLmJhc2U9UCx0aGlzLm9mZnNldD0wLHRoaXMubGVuZ3RoPVAubGVuZ3RoKTp0aGlzLmVycm9y''@;'; put 'put ''KCJJbnB1dCBub3QgQnVmZmVyIil9ZnVuY3Rpb24gdyhQLEYpe2lmKEFycmF5LmlzQXJyYXkoUCkpdGhpcy5sZW5ndGg9MCx0aGlzLnZhbHVlPVAubWFwKGZ1bmN0aW9uKE8pe3JldHVybiBPIGluc3RhbmNlb2Ygd3x8KE89bmV3IHcoTyxGKSksdGhpcy5sZW5ndGgrPU8ubGVuZ3RoLE99LHRo''@;'; put 'put ''aXMpO2Vsc2UgaWYoIm51bWJlciI9PXR5cGVvZiBQKXtpZighKDA8PVAmJlA8PTI1NSkpcmV0dXJuIEYuZXJyb3IoIm5vbi1ieXRlIEVuY29kZXJCdWZmZXIgdmFsdWUiKTt0aGlzLnZhbHVlPVAsdGhpcy5sZW5ndGg9MX1lbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgUCl0aGlzLnZhbHVlPVAs''@;'; put 'put ''dGhpcy5sZW5ndGg9Zy5ieXRlTGVuZ3RoKFApO2Vsc2V7aWYoIWcuaXNCdWZmZXIoUCkpcmV0dXJuIEYuZXJyb3IoIlVuc3VwcG9ydGVkIHR5cGU6ICIrdHlwZW9mIFApO3RoaXMudmFsdWU9UCx0aGlzLmxlbmd0aD1QLmxlbmd0aH19SShCLHkpLHEuQz1CLEIucHJvdG90eXBlLnNhdmU9ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm57b2Zmc2V0OnRoaXMub2Zmc2V0LHJlcG9ydGVyOnkucHJvdG90eXBlLnNhdmUuY2FsbCh0aGlzKX19LEIucHJvdG90eXBlLnJlc3RvcmU9ZnVuY3Rpb24oRil7dmFyIE89bmV3IEIodGhpcy5iYXNlKTtyZXR1cm4gTy5vZmZzZXQ9Ri5vZmZzZXQsTy5sZW5ndGg9dGhp''@;'; put 'put ''cy5vZmZzZXQsdGhpcy5vZmZzZXQ9Ri5vZmZzZXQseS5wcm90b3R5cGUucmVzdG9yZS5jYWxsKHRoaXMsRi5yZXBvcnRlciksT30sQi5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9mZnNldD09PXRoaXMubGVuZ3RofSxCLnByb3RvdHlwZS5yZWFkVUludDg9ZnVu''@;'; put 'put ''Y3Rpb24oRil7cmV0dXJuIHRoaXMub2Zmc2V0KzE8PXRoaXMubGVuZ3RoP3RoaXMuYmFzZS5yZWFkVUludDgodGhpcy5vZmZzZXQrKywhMCk6dGhpcy5lcnJvcihGfHwiRGVjb2RlckJ1ZmZlciBvdmVycnVuIil9LEIucHJvdG90eXBlLnNraXA9ZnVuY3Rpb24oRixPKXtpZighKHRoaXMub2Zm''@;'; put 'put ''c2V0K0Y8PXRoaXMubGVuZ3RoKSlyZXR1cm4gdGhpcy5lcnJvcihPfHwiRGVjb2RlckJ1ZmZlciBvdmVycnVuIik7dmFyIHo9bmV3IEIodGhpcy5iYXNlKTtyZXR1cm4gei5fcmVwb3J0ZXJTdGF0ZT10aGlzLl9yZXBvcnRlclN0YXRlLHoub2Zmc2V0PXRoaXMub2Zmc2V0LHoubGVuZ3RoPXRo''@;'; put 'put ''aXMub2Zmc2V0K0YsdGhpcy5vZmZzZXQrPUYsen0sQi5wcm90b3R5cGUucmF3PWZ1bmN0aW9uKEYpe3JldHVybiB0aGlzLmJhc2Uuc2xpY2UoRj9GLm9mZnNldDp0aGlzLm9mZnNldCx0aGlzLmxlbmd0aCl9LHEuUj13LHcucHJvdG90eXBlLmpvaW49ZnVuY3Rpb24oRixPKXtyZXR1cm4gRnx8''@;'; put 'put ''KEY9bmV3IGcodGhpcy5sZW5ndGgpKSxPfHwoTz0wKSwwPT09dGhpcy5sZW5ndGh8fChBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpP3RoaXMudmFsdWUuZm9yRWFjaChmdW5jdGlvbih6KXt6LmpvaW4oRixPKSxPKz16Lmxlbmd0aH0pOigibnVtYmVyIj09dHlwZW9mIHRoaXMudmFsdWU/RltP''@;'; put 'put ''XT10aGlzLnZhbHVlOiJzdHJpbmciPT10eXBlb2YgdGhpcy52YWx1ZT9GLndyaXRlKHRoaXMudmFsdWUsTyk6Zy5pc0J1ZmZlcih0aGlzLnZhbHVlKSYmdGhpcy52YWx1ZS5jb3B5KEYsTyksTys9dGhpcy5sZW5ndGgpKSxGfX0sMTk3OToodWUscSxfKT0+e3ZhciBJPXE7SS5SZXBvcnRlcj1f''@;'; put 'put ''KDg0NjUpLmIsSS5EZWNvZGVyQnVmZmVyPV8oNjYyNSkuQyxJLkVuY29kZXJCdWZmZXI9Xyg2NjI1KS5SLEkuTm9kZT1fKDE5NDkpfSwxOTQ5Oih1ZSxxLF8pPT57dmFyIEk9XygxOTc5KS5SZXBvcnRlcix5PV8oMTk3OSkuRW5jb2RlckJ1ZmZlcixnPV8oMTk3OSkuRGVjb2RlckJ1ZmZlcixC''@;'; put 'put ''PV8oOTc0Niksdz1bInNlcSIsInNlcW9mIiwic2V0Iiwic2V0b2YiLCJvYmppZCIsImJvb2wiLCJnZW50aW1lIiwidXRjdGltZSIsIm51bGxfIiwiZW51bSIsImludCIsIm9iakRlc2MiLCJiaXRzdHIiLCJibXBzdHIiLCJjaGFyc3RyIiwiZ2Vuc3RyIiwiZ3JhcGhzdHIiLCJpYTVzdHIiLCJp''@;'; put 'put ''c282NDZzdHIiLCJudW1zdHIiLCJvY3RzdHIiLCJwcmludHN0ciIsInQ2MXN0ciIsInVuaXN0ciIsInV0ZjhzdHIiLCJ2aWRlb3N0ciJdLFA9WyJrZXkiLCJvYmoiLCJ1c2UiLCJvcHRpb25hbCIsImV4cGxpY2l0IiwiaW1wbGljaXQiLCJkZWYiLCJjaG9pY2UiLCJhbnkiLCJjb250YWlucyJd''@;'; put 'put ''LmNvbmNhdCh3KTtmdW5jdGlvbiBPKE4sTCl7dmFyIEs9e307dGhpcy5fYmFzZVN0YXRlPUssSy5lbmM9TixLLnBhcmVudD1MfHxudWxsLEsuY2hpbGRyZW49bnVsbCxLLnRhZz1udWxsLEsuYXJncz1udWxsLEsucmV2ZXJzZUFyZ3M9bnVsbCxLLmNob2ljZT1udWxsLEsub3B0aW9uYWw9ITEs''@;'; put 'put ''Sy5hbnk9ITEsSy5vYmo9ITEsSy51c2U9bnVsbCxLLnVzZURlY29kZXI9bnVsbCxLLmtleT1udWxsLEsuZGVmYXVsdD1udWxsLEsuZXhwbGljaXQ9bnVsbCxLLmltcGxpY2l0PW51bGwsSy5jb250YWlucz1udWxsLEsucGFyZW50fHwoSy5jaGlsZHJlbj1bXSx0aGlzLl93cmFwKCkpfXVlLmV4''@;'; put 'put ''cG9ydHM9Tzt2YXIgej1bImVuYyIsInBhcmVudCIsImNoaWxkcmVuIiwidGFnIiwiYXJncyIsInJldmVyc2VBcmdzIiwiY2hvaWNlIiwib3B0aW9uYWwiLCJhbnkiLCJvYmoiLCJ1c2UiLCJhbHRlcmVkVXNlIiwia2V5IiwiZGVmYXVsdCIsImV4cGxpY2l0IiwiaW1wbGljaXQiLCJjb250YWlu''@;'; put 'put ''cyJdO08ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIEw9dGhpcy5fYmFzZVN0YXRlLEs9e307ei5mb3JFYWNoKGZ1bmN0aW9uKFcpe0tbV109TFtXXX0pO3ZhciBVPW5ldyB0aGlzLmNvbnN0cnVjdG9yKEsucGFyZW50KTtyZXR1cm4gVS5fYmFzZVN0YXRlPUssVX0sTy5wcm90b3R5''@;'; put 'put ''cGUuX3dyYXA9ZnVuY3Rpb24oKXt2YXIgTD10aGlzLl9iYXNlU3RhdGU7UC5mb3JFYWNoKGZ1bmN0aW9uKEspe3RoaXNbS109ZnVuY3Rpb24oKXt2YXIgVz1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzKTtyZXR1cm4gTC5jaGlsZHJlbi5wdXNoKFcpLFdbS10uYXBwbHkoVyxhcmd1bWVudHMp''@;'; put 'put ''fX0sdGhpcyl9LE8ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKEwpe3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZTtCKG51bGw9PT1LLnBhcmVudCksTC5jYWxsKHRoaXMpLEsuY2hpbGRyZW49Sy5jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24oVSl7cmV0dXJuIFUuX2Jhc2VTdGF0ZS5wYXJlbnQ9PT10''@;'; put 'put ''aGlzfSx0aGlzKSxCLmVxdWFsKEsuY2hpbGRyZW4ubGVuZ3RoLDEsIlJvb3Qgbm9kZSBjYW4gaGF2ZSBvbmx5IG9uZSBjaGlsZCIpfSxPLnByb3RvdHlwZS5fdXNlQXJncz1mdW5jdGlvbihMKXt2YXIgSz10aGlzLl9iYXNlU3RhdGUsVT1MLmZpbHRlcihmdW5jdGlvbihXKXtyZXR1cm4gVyBp''@;'; put 'put ''bnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3J9LHRoaXMpO0w9TC5maWx0ZXIoZnVuY3Rpb24oVyl7cmV0dXJuIShXIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcil9LHRoaXMpLDAhPT1VLmxlbmd0aCYmKEIobnVsbD09PUsuY2hpbGRyZW4pLEsuY2hpbGRyZW49VSxVLmZvckVhY2goZnVu''@;'; put 'put ''Y3Rpb24oVyl7Vy5fYmFzZVN0YXRlLnBhcmVudD10aGlzfSx0aGlzKSksMCE9PUwubGVuZ3RoJiYoQihudWxsPT09Sy5hcmdzKSxLLmFyZ3M9TCxLLnJldmVyc2VBcmdzPUwubWFwKGZ1bmN0aW9uKFcpe2lmKCJvYmplY3QiIT10eXBlb2YgV3x8Vy5jb25zdHJ1Y3RvciE9PU9iamVjdClyZXR1''@;'; put 'put ''cm4gVzt2YXIgWT17fTtyZXR1cm4gT2JqZWN0LmtleXMoVykuZm9yRWFjaChmdW5jdGlvbihYKXtYPT0oMHxYKSYmKFh8PTApLFlbV1tYXV09WH0pLFl9KSl9LFsiX3BlZWtUYWciLCJfZGVjb2RlVGFnIiwiX3VzZSIsIl9kZWNvZGVTdHIiLCJfZGVjb2RlT2JqaWQiLCJfZGVjb2RlVGltZSIs''@;'; put 'put ''Il9kZWNvZGVOdWxsIiwiX2RlY29kZUludCIsIl9kZWNvZGVCb29sIiwiX2RlY29kZUxpc3QiLCJfZW5jb2RlQ29tcG9zaXRlIiwiX2VuY29kZVN0ciIsIl9lbmNvZGVPYmppZCIsIl9lbmNvZGVUaW1lIiwiX2VuY29kZU51bGwiLCJfZW5jb2RlSW50IiwiX2VuY29kZUJvb2wiXS5mb3JFYWNo''@;'; put 'put ''KGZ1bmN0aW9uKE4pe08ucHJvdG90eXBlW05dPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKE4rIiBub3QgaW1wbGVtZW50ZWQgZm9yIGVuY29kaW5nOiAiK3RoaXMuX2Jhc2VTdGF0ZS5lbmMpfX0pLHcuZm9yRWFjaChmdW5jdGlvbihOKXtPLnByb3RvdHlwZVtOXT1mdW5jdGlvbigpe3Zh''@;'; put 'put ''ciBLPXRoaXMuX2Jhc2VTdGF0ZSxVPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIEIobnVsbD09PUsudGFnKSxLLnRhZz1OLHRoaXMuX3VzZUFyZ3MoVSksdGhpc319KSxPLnByb3RvdHlwZS51c2U9ZnVuY3Rpb24oTCl7QihMKTt2YXIgSz10aGlzLl9iYXNl''@;'; put 'put ''U3RhdGU7cmV0dXJuIEIobnVsbD09PUsudXNlKSxLLnVzZT1MLHRoaXN9LE8ucHJvdG90eXBlLm9wdGlvbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Jhc2VTdGF0ZS5vcHRpb25hbD0hMCx0aGlzfSxPLnByb3RvdHlwZS5kZWY9ZnVuY3Rpb24oTCl7dmFyIEs9dGhpcy5fYmFzZVN0YXRl''@;'; put 'put ''O3JldHVybiBCKG51bGw9PT1LLmRlZmF1bHQpLEsuZGVmYXVsdD1MLEsub3B0aW9uYWw9ITAsdGhpc30sTy5wcm90b3R5cGUuZXhwbGljaXQ9ZnVuY3Rpb24oTCl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBCKG51bGw9PT1LLmV4cGxpY2l0JiZudWxsPT09Sy5pbXBsaWNpdCksSy5l''@;'; put 'put ''eHBsaWNpdD1MLHRoaXN9LE8ucHJvdG90eXBlLmltcGxpY2l0PWZ1bmN0aW9uKEwpe3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gQihudWxsPT09Sy5leHBsaWNpdCYmbnVsbD09PUsuaW1wbGljaXQpLEsuaW1wbGljaXQ9TCx0aGlzfSxPLnByb3RvdHlwZS5vYmo9ZnVuY3Rpb24oKXt2''@;'; put 'put ''YXIgTD10aGlzLl9iYXNlU3RhdGUsSz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBMLm9iaj0hMCwwIT09Sy5sZW5ndGgmJnRoaXMuX3VzZUFyZ3MoSyksdGhpc30sTy5wcm90b3R5cGUua2V5PWZ1bmN0aW9uKEwpe3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZTty''@;'; put 'put ''ZXR1cm4gQihudWxsPT09Sy5rZXkpLEsua2V5PUwsdGhpc30sTy5wcm90b3R5cGUuYW55PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Jhc2VTdGF0ZS5hbnk9ITAsdGhpc30sTy5wcm90b3R5cGUuY2hvaWNlPWZ1bmN0aW9uKEwpe3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gQihudWxs''@;'; put 'put ''PT09Sy5jaG9pY2UpLEsuY2hvaWNlPUwsdGhpcy5fdXNlQXJncyhPYmplY3Qua2V5cyhMKS5tYXAoZnVuY3Rpb24oVSl7cmV0dXJuIExbVV19KSksdGhpc30sTy5wcm90b3R5cGUuY29udGFpbnM9ZnVuY3Rpb24oTCl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBCKG51bGw9PT1LLnVz''@;'; put 'put ''ZSksSy5jb250YWlucz1MLHRoaXN9LE8ucHJvdG90eXBlLl9kZWNvZGU9ZnVuY3Rpb24oTCxLKXt2YXIgVT10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PVUucGFyZW50KXJldHVybiBMLndyYXBSZXN1bHQoVS5jaGlsZHJlblswXS5fZGVjb2RlKEwsSykpO3ZhciByZSxXPVUuZGVmYXVsdCxZ''@;'; put 'put ''PSEwLFg9bnVsbDtpZihudWxsIT09VS5rZXkmJihYPUwuZW50ZXJLZXkoVS5rZXkpKSxVLm9wdGlvbmFsKXt2YXIgZWU9bnVsbDtpZihudWxsIT09VS5leHBsaWNpdD9lZT1VLmV4cGxpY2l0Om51bGwhPT1VLmltcGxpY2l0P2VlPVUuaW1wbGljaXQ6bnVsbCE9PVUudGFnJiYoZWU9VS50YWcp''@;'; put 'put ''LG51bGwhPT1lZXx8VS5hbnkpe2lmKFk9dGhpcy5fcGVla1RhZyhMLGVlLFUuYW55KSxMLmlzRXJyb3IoWSkpcmV0dXJuIFl9ZWxzZXt2YXIgSj1MLnNhdmUoKTt0cnl7bnVsbD09PVUuY2hvaWNlP3RoaXMuX2RlY29kZUdlbmVyaWMoVS50YWcsTCxLKTp0aGlzLl9kZWNvZGVDaG9pY2UoTCxL''@;'; put 'put ''KSxZPSEwfWNhdGNoe1k9ITF9TC5yZXN0b3JlKEopfX1pZihVLm9iaiYmWSYmKHJlPUwuZW50ZXJPYmplY3QoKSksWSl7aWYobnVsbCE9PVUuZXhwbGljaXQpe3ZhciBpZT10aGlzLl9kZWNvZGVUYWcoTCxVLmV4cGxpY2l0KTtpZihMLmlzRXJyb3IoaWUpKXJldHVybiBpZTtMPWllfXZhciBs''@;'; put 'put ''ZT1MLm9mZnNldDtpZihudWxsPT09VS51c2UmJm51bGw9PT1VLmNob2ljZSl7VS5hbnkmJihKPUwuc2F2ZSgpKTt2YXIgbWU9dGhpcy5fZGVjb2RlVGFnKEwsbnVsbCE9PVUuaW1wbGljaXQ/VS5pbXBsaWNpdDpVLnRhZyxVLmFueSk7aWYoTC5pc0Vycm9yKG1lKSlyZXR1cm4gbWU7VS5hbnk/''@;'; put 'put ''Vz1MLnJhdyhKKTpMPW1lfWlmKEsmJksudHJhY2smJm51bGwhPT1VLnRhZyYmSy50cmFjayhMLnBhdGgoKSxsZSxMLmxlbmd0aCwidGFnZ2VkIiksSyYmSy50cmFjayYmbnVsbCE9PVUudGFnJiZLLnRyYWNrKEwucGF0aCgpLEwub2Zmc2V0LEwubGVuZ3RoLCJjb250ZW50IiksVS5hbnl8fChX''@;'; put 'put ''PW51bGw9PT1VLmNob2ljZT90aGlzLl9kZWNvZGVHZW5lcmljKFUudGFnLEwsSyk6dGhpcy5fZGVjb2RlQ2hvaWNlKEwsSykpLEwuaXNFcnJvcihXKSlyZXR1cm4gVztpZighVS5hbnkmJm51bGw9PT1VLmNob2ljZSYmbnVsbCE9PVUuY2hpbGRyZW4mJlUuY2hpbGRyZW4uZm9yRWFjaChmdW5j''@;'; put 'put ''dGlvbihTZSl7U2UuX2RlY29kZShMLEspfSksVS5jb250YWlucyYmKCJvY3RzdHIiPT09VS50YWd8fCJiaXRzdHIiPT09VS50YWcpKXt2YXIgX2U9bmV3IGcoVyk7Vz10aGlzLl9nZXRVc2UoVS5jb250YWlucyxMLl9yZXBvcnRlclN0YXRlLm9iaikuX2RlY29kZShfZSxLKX19cmV0dXJuIFUu''@;'; put 'put ''b2JqJiZZJiYoVz1MLmxlYXZlT2JqZWN0KHJlKSksbnVsbD09PVUua2V5fHxudWxsPT09VyYmITAhPT1ZP251bGwhPT1YJiZMLmV4aXRLZXkoWCk6TC5sZWF2ZUtleShYLFUua2V5LFcpLFd9LE8ucHJvdG90eXBlLl9kZWNvZGVHZW5lcmljPWZ1bmN0aW9uKEwsSyxVKXt2YXIgVz10aGlzLl9i''@;'; put 'put ''YXNlU3RhdGU7cmV0dXJuInNlcSI9PT1MfHwic2V0Ij09PUw/bnVsbDoic2Vxb2YiPT09THx8InNldG9mIj09PUw/dGhpcy5fZGVjb2RlTGlzdChLLEwsVy5hcmdzWzBdLFUpOi9zdHIkLy50ZXN0KEwpP3RoaXMuX2RlY29kZVN0cihLLEwsVSk6Im9iamlkIj09PUwmJlcuYXJncz90aGlzLl9k''@;'; put 'put ''ZWNvZGVPYmppZChLLFcuYXJnc1swXSxXLmFyZ3NbMV0sVSk6Im9iamlkIj09PUw/dGhpcy5fZGVjb2RlT2JqaWQoSyxudWxsLG51bGwsVSk6ImdlbnRpbWUiPT09THx8InV0Y3RpbWUiPT09TD90aGlzLl9kZWNvZGVUaW1lKEssTCxVKToibnVsbF8iPT09TD90aGlzLl9kZWNvZGVOdWxsKEss''@;'; put 'put ''VSk6ImJvb2wiPT09TD90aGlzLl9kZWNvZGVCb29sKEssVSk6Im9iakRlc2MiPT09TD90aGlzLl9kZWNvZGVTdHIoSyxMLFUpOiJpbnQiPT09THx8ImVudW0iPT09TD90aGlzLl9kZWNvZGVJbnQoSyxXLmFyZ3MmJlcuYXJnc1swXSxVKTpudWxsIT09Vy51c2U/dGhpcy5fZ2V0VXNlKFcudXNl''@;'; put 'put ''LEsuX3JlcG9ydGVyU3RhdGUub2JqKS5fZGVjb2RlKEssVSk6Sy5lcnJvcigidW5rbm93biB0YWc6ICIrTCl9LE8ucHJvdG90eXBlLl9nZXRVc2U9ZnVuY3Rpb24oTCxLKXt2YXIgVT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIFUudXNlRGVjb2Rlcj10aGlzLl91c2UoTCxLKSxCKG51bGw9PT1V''@;'; put 'put ''LnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5wYXJlbnQpLFUudXNlRGVjb2Rlcj1VLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5jaGlsZHJlblswXSxVLmltcGxpY2l0IT09VS51c2VEZWNvZGVyLl9iYXNlU3RhdGUuaW1wbGljaXQmJihVLnVzZURlY29kZXI9VS51c2VEZWNvZGVyLmNsb25lKCksVS51''@;'; put 'put ''c2VEZWNvZGVyLl9iYXNlU3RhdGUuaW1wbGljaXQ9VS5pbXBsaWNpdCksVS51c2VEZWNvZGVyfSxPLnByb3RvdHlwZS5fZGVjb2RlQ2hvaWNlPWZ1bmN0aW9uKEwsSyl7dmFyIFU9dGhpcy5fYmFzZVN0YXRlLFc9bnVsbCxZPSExO3JldHVybiBPYmplY3Qua2V5cyhVLmNob2ljZSkuc29tZShm''@;'; put 'put ''dW5jdGlvbihYKXt2YXIgZWU9TC5zYXZlKCksSj1VLmNob2ljZVtYXTt0cnl7dmFyIHJlPUouX2RlY29kZShMLEspO2lmKEwuaXNFcnJvcihyZSkpcmV0dXJuITE7Vz17dHlwZTpYLHZhbHVlOnJlfSxZPSEwfWNhdGNoe3JldHVybiBMLnJlc3RvcmUoZWUpLCExfXJldHVybiEwfSx0aGlzKSxZ''@;'; put 'put ''P1c6TC5lcnJvcigiQ2hvaWNlIG5vdCBtYXRjaGVkIil9LE8ucHJvdG90eXBlLl9jcmVhdGVFbmNvZGVyQnVmZmVyPWZ1bmN0aW9uKEwpe3JldHVybiBuZXcgeShMLHRoaXMucmVwb3J0ZXIpfSxPLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKEwsSyxVKXt2YXIgVz10aGlzLl9iYXNlU3Rh''@;'; put 'put ''dGU7aWYobnVsbD09PVcuZGVmYXVsdHx8Vy5kZWZhdWx0IT09TCl7dmFyIFk9dGhpcy5fZW5jb2RlVmFsdWUoTCxLLFUpO2lmKHZvaWQgMCE9PVkmJiF0aGlzLl9za2lwRGVmYXVsdChZLEssVSkpcmV0dXJuIFl9fSxPLnByb3RvdHlwZS5fZW5jb2RlVmFsdWU9ZnVuY3Rpb24oTCxLLFUpe3Zh''@;'; put 'put ''ciBXPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09Vy5wYXJlbnQpcmV0dXJuIFcuY2hpbGRyZW5bMF0uX2VuY29kZShMLEt8fG5ldyBJKTt2YXIgSj1udWxsO2lmKHRoaXMucmVwb3J0ZXI9SyxXLm9wdGlvbmFsJiZ2b2lkIDA9PT1MKXtpZihudWxsPT09Vy5kZWZhdWx0KXJldHVybjtMPVcu''@;'; put 'put ''ZGVmYXVsdH12YXIgWT1udWxsLFg9ITE7aWYoVy5hbnkpSj10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEwpO2Vsc2UgaWYoVy5jaG9pY2UpSj10aGlzLl9lbmNvZGVDaG9pY2UoTCxLKTtlbHNlIGlmKFcuY29udGFpbnMpWT10aGlzLl9nZXRVc2UoVy5jb250YWlucyxVKS5fZW5jb2RlKEws''@;'; put 'put ''SyksWD0hMDtlbHNlIGlmKFcuY2hpbGRyZW4pWT1XLmNoaWxkcmVuLm1hcChmdW5jdGlvbihsZSl7aWYoIm51bGxfIj09PWxlLl9iYXNlU3RhdGUudGFnKXJldHVybiBsZS5fZW5jb2RlKG51bGwsSyxMKTtpZihudWxsPT09bGUuX2Jhc2VTdGF0ZS5rZXkpcmV0dXJuIEsuZXJyb3IoIkNoaWxk''@;'; put 'put ''IHNob3VsZCBoYXZlIGEga2V5Iik7dmFyIG1lPUsuZW50ZXJLZXkobGUuX2Jhc2VTdGF0ZS5rZXkpO2lmKCJvYmplY3QiIT10eXBlb2YgTClyZXR1cm4gSy5lcnJvcigiQ2hpbGQgZXhwZWN0ZWQsIGJ1dCBpbnB1dCBpcyBub3Qgb2JqZWN0Iik7dmFyIF9lPWxlLl9lbmNvZGUoTFtsZS5fYmFz''@;'; put 'put ''ZVN0YXRlLmtleV0sSyxMKTtyZXR1cm4gSy5sZWF2ZUtleShtZSksX2V9LHRoaXMpLmZpbHRlcihmdW5jdGlvbihsZSl7cmV0dXJuIGxlfSksWT10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFkpO2Vsc2UgaWYoInNlcW9mIj09PVcudGFnfHwic2V0b2YiPT09Vy50YWcpe2lmKCFXLmFyZ3N8''@;'; put 'put ''fDEhPT1XLmFyZ3MubGVuZ3RoKXJldHVybiBLLmVycm9yKCJUb28gbWFueSBhcmdzIGZvciA6ICIrVy50YWcpO2lmKCFBcnJheS5pc0FycmF5KEwpKXJldHVybiBLLmVycm9yKCJzZXFvZi9zZXRvZiwgYnV0IGRhdGEgaXMgbm90IEFycmF5Iik7dmFyIGVlPXRoaXMuY2xvbmUoKTtlZS5fYmFz''@;'; put 'put ''ZVN0YXRlLmltcGxpY2l0PW51bGwsWT10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEwubWFwKGZ1bmN0aW9uKGxlKXtyZXR1cm4gdGhpcy5fZ2V0VXNlKHRoaXMuX2Jhc2VTdGF0ZS5hcmdzWzBdLEwpLl9lbmNvZGUobGUsSyl9LGVlKSl9ZWxzZSBudWxsIT09Vy51c2U/Sj10aGlzLl9nZXRV''@;'; put 'put ''c2UoVy51c2UsVSkuX2VuY29kZShMLEspOihZPXRoaXMuX2VuY29kZVByaW1pdGl2ZShXLnRhZyxMKSxYPSEwKTtpZighVy5hbnkmJm51bGw9PT1XLmNob2ljZSl7dmFyIHJlPW51bGwhPT1XLmltcGxpY2l0P1cuaW1wbGljaXQ6Vy50YWcsaWU9bnVsbD09PVcuaW1wbGljaXQ/InVuaXZlcnNh''@;'; put 'put ''bCI6ImNvbnRleHQiO251bGw9PT1yZT9udWxsPT09Vy51c2UmJksuZXJyb3IoIlRhZyBjb3VsZCBiZSBvbWl0dGVkIG9ubHkgZm9yIC51c2UoKSIpOm51bGw9PT1XLnVzZSYmKEo9dGhpcy5fZW5jb2RlQ29tcG9zaXRlKHJlLFgsaWUsWSkpfXJldHVybiBudWxsIT09Vy5leHBsaWNpdCYmKEo9''@;'; put 'put ''dGhpcy5fZW5jb2RlQ29tcG9zaXRlKFcuZXhwbGljaXQsITEsImNvbnRleHQiLEopKSxKfSxPLnByb3RvdHlwZS5fZW5jb2RlQ2hvaWNlPWZ1bmN0aW9uKEwsSyl7dmFyIFU9dGhpcy5fYmFzZVN0YXRlLFc9VS5jaG9pY2VbTC50eXBlXTtyZXR1cm4gV3x8QighMSxMLnR5cGUrIiBub3QgZm91''@;'; put 'put ''bmQgaW4gIitKU09OLnN0cmluZ2lmeShPYmplY3Qua2V5cyhVLmNob2ljZSkpKSxXLl9lbmNvZGUoTC52YWx1ZSxLKX0sTy5wcm90b3R5cGUuX2VuY29kZVByaW1pdGl2ZT1mdW5jdGlvbihMLEspe3ZhciBVPXRoaXMuX2Jhc2VTdGF0ZTtpZigvc3RyJC8udGVzdChMKSlyZXR1cm4gdGhpcy5f''@;'; put 'put ''ZW5jb2RlU3RyKEssTCk7aWYoIm9iamlkIj09PUwmJlUuYXJncylyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQoSyxVLnJldmVyc2VBcmdzWzBdLFUuYXJnc1sxXSk7aWYoIm9iamlkIj09PUwpcmV0dXJuIHRoaXMuX2VuY29kZU9iamlkKEssbnVsbCxudWxsKTtpZigiZ2VudGltZSI9PT1MfHwi''@;'; put 'put ''dXRjdGltZSI9PT1MKXJldHVybiB0aGlzLl9lbmNvZGVUaW1lKEssTCk7aWYoIm51bGxfIj09PUwpcmV0dXJuIHRoaXMuX2VuY29kZU51bGwoKTtpZigiaW50Ij09PUx8fCJlbnVtIj09PUwpcmV0dXJuIHRoaXMuX2VuY29kZUludChLLFUuYXJncyYmVS5yZXZlcnNlQXJnc1swXSk7aWYoImJv''@;'; put 'put ''b2wiPT09TClyZXR1cm4gdGhpcy5fZW5jb2RlQm9vbChLKTtpZigib2JqRGVzYyI9PT1MKXJldHVybiB0aGlzLl9lbmNvZGVTdHIoSyxMKTt0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHRhZzogIitMKX0sTy5wcm90b3R5cGUuX2lzTnVtc3RyPWZ1bmN0aW9uKEwpe3JldHVybi9eWzAt''@;'; put 'put ''OSBdKiQvLnRlc3QoTCl9LE8ucHJvdG90eXBlLl9pc1ByaW50c3RyPWZ1bmN0aW9uKEwpe3JldHVybi9eW0EtWmEtejAtOSAnXChcKVwrLFwtXC5cLzo9XD9dKiQvLnRlc3QoTCl9fSw4NDY1Oih1ZSxxLF8pPT57dmFyIEk9Xyg1NzE3KTtmdW5jdGlvbiB5KEIpe3RoaXMuX3JlcG9ydGVyU3Rh''@;'; put 'put ''dGU9e29iajpudWxsLHBhdGg6W10sb3B0aW9uczpCfHx7fSxlcnJvcnM6W119fWZ1bmN0aW9uIGcoQix3KXt0aGlzLnBhdGg9Qix0aGlzLnJldGhyb3codyl9cS5iPXkseS5wcm90b3R5cGUuaXNFcnJvcj1mdW5jdGlvbih3KXtyZXR1cm4gdyBpbnN0YW5jZW9mIGd9LHkucHJvdG90eXBlLnNh''@;'; put 'put ''dmU9ZnVuY3Rpb24oKXt2YXIgdz10aGlzLl9yZXBvcnRlclN0YXRlO3JldHVybntvYmo6dy5vYmoscGF0aExlbjp3LnBhdGgubGVuZ3RofX0seS5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbih3KXt2YXIgUD10aGlzLl9yZXBvcnRlclN0YXRlO1Aub2JqPXcub2JqLFAucGF0aD1QLnBhdGgu''@;'; put 'put ''c2xpY2UoMCx3LnBhdGhMZW4pfSx5LnByb3RvdHlwZS5lbnRlcktleT1mdW5jdGlvbih3KXtyZXR1cm4gdGhpcy5fcmVwb3J0ZXJTdGF0ZS5wYXRoLnB1c2godyl9LHkucHJvdG90eXBlLmV4aXRLZXk9ZnVuY3Rpb24odyl7dmFyIFA9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtQLnBhdGg9UC5wYXRo''@;'; put 'put ''LnNsaWNlKDAsdy0xKX0seS5wcm90b3R5cGUubGVhdmVLZXk9ZnVuY3Rpb24odyxQLEYpe3ZhciBPPXRoaXMuX3JlcG9ydGVyU3RhdGU7dGhpcy5leGl0S2V5KHcpLG51bGwhPT1PLm9iaiYmKE8ub2JqW1BdPUYpfSx5LnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Jl''@;'; put 'put ''cG9ydGVyU3RhdGUucGF0aC5qb2luKCIvIil9LHkucHJvdG90eXBlLmVudGVyT2JqZWN0PWZ1bmN0aW9uKCl7dmFyIHc9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxQPXcub2JqO3JldHVybiB3Lm9iaj17fSxQfSx5LnByb3RvdHlwZS5sZWF2ZU9iamVjdD1mdW5jdGlvbih3KXt2YXIgUD10aGlzLl9y''@;'; put 'put ''ZXBvcnRlclN0YXRlLEY9UC5vYmo7cmV0dXJuIFAub2JqPXcsRn0seS5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24odyl7dmFyIFAsRj10aGlzLl9yZXBvcnRlclN0YXRlLE89dyBpbnN0YW5jZW9mIGc7aWYoUD1PP3c6bmV3IGcoRi5wYXRoLm1hcChmdW5jdGlvbih6KXtyZXR1cm4iWyIrSlNP''@;'; put 'put ''Ti5zdHJpbmdpZnkoeikrIl0ifSkuam9pbigiIiksdy5tZXNzYWdlfHx3LHcuc3RhY2spLCFGLm9wdGlvbnMucGFydGlhbCl0aHJvdyBQO3JldHVybiBPfHxGLmVycm9ycy5wdXNoKFApLFB9LHkucHJvdG90eXBlLndyYXBSZXN1bHQ9ZnVuY3Rpb24odyl7dmFyIFA9dGhpcy5fcmVwb3J0ZXJT''@;'; put 'put ''dGF0ZTtyZXR1cm4gUC5vcHRpb25zLnBhcnRpYWw/e3Jlc3VsdDp0aGlzLmlzRXJyb3Iodyk/bnVsbDp3LGVycm9yczpQLmVycm9yc306d30sSShnLEVycm9yKSxnLnByb3RvdHlwZS5yZXRocm93PWZ1bmN0aW9uKHcpe2lmKHRoaXMubWVzc2FnZT13KyIgYXQ6ICIrKHRoaXMucGF0aHx8Iihz''@;'; put 'put ''aGFsbG93KSIpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLGcpLCF0aGlzLnN0YWNrKXRyeXt0aHJvdyBuZXcgRXJyb3IodGhpcy5tZXNzYWdlKX1jYXRjaChQKXt0aGlzLnN0YWNrPVAuc3RhY2t9cmV0dXJuIHRoaXN9fSwxNjA6KHVlLHEs''@;'; put 'put ''Xyk9Pnt2YXIgST1fKDY4MjYpO3EudGFnQ2xhc3M9ezA6InVuaXZlcnNhbCIsMToiYXBwbGljYXRpb24iLDI6ImNvbnRleHQiLDM6InByaXZhdGUifSxxLnRhZ0NsYXNzQnlOYW1lPUkuX3JldmVyc2UocS50YWdDbGFzcykscS50YWc9ezA6ImVuZCIsMToiYm9vbCIsMjoiaW50IiwzOiJiaXRz''@;'; put 'put ''dHIiLDQ6Im9jdHN0ciIsNToibnVsbF8iLDY6Im9iamlkIiw3OiJvYmpEZXNjIiw4OiJleHRlcm5hbCIsOToicmVhbCIsMTA6ImVudW0iLDExOiJlbWJlZCIsMTI6InV0ZjhzdHIiLDEzOiJyZWxhdGl2ZU9pZCIsMTY6InNlcSIsMTc6InNldCIsMTg6Im51bXN0ciIsMTk6InByaW50c3RyIiwy''@;'; put 'put ''MDoidDYxc3RyIiwyMToidmlkZW9zdHIiLDIyOiJpYTVzdHIiLDIzOiJ1dGN0aW1lIiwyNDoiZ2VudGltZSIsMjU6ImdyYXBoc3RyIiwyNjoiaXNvNjQ2c3RyIiwyNzoiZ2Vuc3RyIiwyODoidW5pc3RyIiwyOToiY2hhcnN0ciIsMzA6ImJtcHN0ciJ9LHEudGFnQnlOYW1lPUkuX3JldmVyc2Uo''@;'; put 'put ''cS50YWcpfSw2ODI2Oih1ZSxxLF8pPT57dmFyIEk9cTtJLl9yZXZlcnNlPWZ1bmN0aW9uKGcpe3ZhciBCPXt9O3JldHVybiBPYmplY3Qua2V5cyhnKS5mb3JFYWNoKGZ1bmN0aW9uKHcpeygwfHcpPT13JiYod3w9MCksQltnW3ddXT13fSksQn0sSS5kZXI9XygxNjApfSwxNjcxOih1ZSxxLF8p''@;'; put 'put ''PT57dmFyIEk9Xyg1NzE3KSx5PV8oOTgwOSksZz15LmJhc2UsQj15LmJpZ251bSx3PXkuY29uc3RhbnRzLmRlcjtmdW5jdGlvbiBQKE4pe3RoaXMuZW5jPSJkZXIiLHRoaXMubmFtZT1OLm5hbWUsdGhpcy5lbnRpdHk9Tix0aGlzLnRyZWU9bmV3IEYsdGhpcy50cmVlLl9pbml0KE4uYm9keSl9''@;'; put 'put ''ZnVuY3Rpb24gRihOKXtnLk5vZGUuY2FsbCh0aGlzLCJkZXIiLE4pfWZ1bmN0aW9uIE8oTixMKXt2YXIgSz1OLnJlYWRVSW50OChMKTtpZihOLmlzRXJyb3IoSykpcmV0dXJuIEs7dmFyIFU9dy50YWdDbGFzc1tLPj42XSxXPSEoMzImSyk7aWYoMzEmfkspSyY9MzE7ZWxzZXt2YXIgWT1LO2Zv''@;'; put 'put ''cihLPTA7ISgxMjgmflkpOyl7aWYoWT1OLnJlYWRVSW50OChMKSxOLmlzRXJyb3IoWSkpcmV0dXJuIFk7Szw8PTcsS3w9MTI3Jll9fXJldHVybntjbHM6VSxwcmltaXRpdmU6Vyx0YWc6Syx0YWdTdHI6dy50YWdbS119fWZ1bmN0aW9uIHooTixMLEspe3ZhciBVPU4ucmVhZFVJbnQ4KEspO2lm''@;'; put 'put ''KE4uaXNFcnJvcihVKSlyZXR1cm4gVTtpZighTCYmMTI4PT09VSlyZXR1cm4gbnVsbDtpZighKDEyOCZVKSlyZXR1cm4gVTt2YXIgVz0xMjcmVTtpZihXPjQpcmV0dXJuIE4uZXJyb3IoImxlbmd0aCBvY3RlY3QgaXMgdG9vIGxvbmciKTtVPTA7Zm9yKHZhciBZPTA7WTxXO1krKyl7VTw8PTg7''@;'; put 'put ''dmFyIFg9Ti5yZWFkVUludDgoSyk7aWYoTi5pc0Vycm9yKFgpKXJldHVybiBYO1V8PVh9cmV0dXJuIFV9dWUuZXhwb3J0cz1QLFAucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihMLEspe3JldHVybiBMIGluc3RhbmNlb2YgZy5EZWNvZGVyQnVmZmVyfHwoTD1uZXcgZy5EZWNvZGVyQnVmZmVy''@;'; put 'put ''KEwsSykpLHRoaXMudHJlZS5fZGVjb2RlKEwsSyl9LEkoRixnLk5vZGUpLEYucHJvdG90eXBlLl9wZWVrVGFnPWZ1bmN0aW9uKEwsSyxVKXtpZihMLmlzRW1wdHkoKSlyZXR1cm4hMTt2YXIgVz1MLnNhdmUoKSxZPU8oTCwnRmFpbGVkIHRvIHBlZWsgdGFnOiAiJytLKyciJyk7cmV0dXJuIEwu''@;'; put 'put ''aXNFcnJvcihZKT9ZOihMLnJlc3RvcmUoVyksWS50YWc9PT1LfHxZLnRhZ1N0cj09PUt8fFkudGFnU3RyKyJvZiI9PT1LfHxVKX0sRi5wcm90b3R5cGUuX2RlY29kZVRhZz1mdW5jdGlvbihMLEssVSl7dmFyIFc9TyhMLCdGYWlsZWQgdG8gZGVjb2RlIHRhZyBvZiAiJytLKyciJyk7aWYoTC5p''@;'; put 'put ''c0Vycm9yKFcpKXJldHVybiBXO3ZhciBZPXooTCxXLnByaW1pdGl2ZSwnRmFpbGVkIHRvIGdldCBsZW5ndGggb2YgIicrSysnIicpO2lmKEwuaXNFcnJvcihZKSlyZXR1cm4gWTtpZighVSYmVy50YWchPT1LJiZXLnRhZ1N0ciE9PUsmJlcudGFnU3RyKyJvZiIhPT1LKXJldHVybiBMLmVycm9y''@;'; put 'put ''KCdGYWlsZWQgdG8gbWF0Y2ggdGFnOiAiJytLKyciJyk7aWYoVy5wcmltaXRpdmV8fG51bGwhPT1ZKXJldHVybiBMLnNraXAoWSwnRmFpbGVkIHRvIG1hdGNoIGJvZHkgb2Y6ICInK0srJyInKTt2YXIgWD1MLnNhdmUoKSxlZT10aGlzLl9za2lwVW50aWxFbmQoTCwnRmFpbGVkIHRvIHNraXAg''@;'; put 'put ''aW5kZWZpbml0ZSBsZW5ndGggYm9keTogIicrdGhpcy50YWcrJyInKTtyZXR1cm4gTC5pc0Vycm9yKGVlKT9lZTooWT1MLm9mZnNldC1YLm9mZnNldCxMLnJlc3RvcmUoWCksTC5za2lwKFksJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiAiJytLKyciJykpfSxGLnByb3RvdHlwZS5fc2tpcFVu''@;'; put 'put ''dGlsRW5kPWZ1bmN0aW9uKEwsSyl7Zm9yKDs7KXt2YXIgVT1PKEwsSyk7aWYoTC5pc0Vycm9yKFUpKXJldHVybiBVO3ZhciBZLFc9eihMLFUucHJpbWl0aXZlLEspO2lmKEwuaXNFcnJvcihXKSlyZXR1cm4gVztpZihZPVUucHJpbWl0aXZlfHxudWxsIT09Vz9MLnNraXAoVyk6dGhpcy5fc2tp''@;'; put 'put ''cFVudGlsRW5kKEwsSyksTC5pc0Vycm9yKFkpKXJldHVybiBZO2lmKCJlbmQiPT09VS50YWdTdHIpYnJlYWt9fSxGLnByb3RvdHlwZS5fZGVjb2RlTGlzdD1mdW5jdGlvbihMLEssVSxXKXtmb3IodmFyIFk9W107IUwuaXNFbXB0eSgpOyl7dmFyIFg9dGhpcy5fcGVla1RhZyhMLCJlbmQiKTtp''@;'; put 'put ''ZihMLmlzRXJyb3IoWCkpcmV0dXJuIFg7dmFyIGVlPVUuZGVjb2RlKEwsImRlciIsVyk7aWYoTC5pc0Vycm9yKGVlKSYmWClicmVhaztZLnB1c2goZWUpfXJldHVybiBZfSxGLnByb3RvdHlwZS5fZGVjb2RlU3RyPWZ1bmN0aW9uKEwsSyl7aWYoImJpdHN0ciI9PT1LKXt2YXIgVT1MLnJlYWRV''@;'; put 'put ''SW50OCgpO3JldHVybiBMLmlzRXJyb3IoVSk/VTp7dW51c2VkOlUsZGF0YTpMLnJhdygpfX1pZigiYm1wc3RyIj09PUspe3ZhciBXPUwucmF3KCk7aWYoVy5sZW5ndGglMj09MSlyZXR1cm4gTC5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IGJtcHN0ciBsZW5ndGggbWlzbWF0Y2gi''@;'; put 'put ''KTtmb3IodmFyIFk9IiIsWD0wO1g8Vy5sZW5ndGgvMjtYKyspWSs9U3RyaW5nLmZyb21DaGFyQ29kZShXLnJlYWRVSW50MTZCRSgyKlgpKTtyZXR1cm4gWX1pZigibnVtc3RyIj09PUspe3ZhciBlZT1MLnJhdygpLnRvU3RyaW5nKCJhc2NpaSIpO3JldHVybiB0aGlzLl9pc051bXN0cihlZSk/''@;'; put 'put ''ZWU6TC5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJzIil9aWYoIm9jdHN0ciI9PT1LKXJldHVybiBMLnJhdygpO2lmKCJvYmpEZXNjIj09PUspcmV0dXJuIEwucmF3KCk7aWYoInByaW50c3RyIj09PUspe3ZhciBKPUwucmF3KCku''@;'; put 'put ''dG9TdHJpbmcoImFzY2lpIik7cmV0dXJuIHRoaXMuX2lzUHJpbnRzdHIoSik/SjpMLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogcHJpbnRzdHIgdW5zdXBwb3J0ZWQgY2hhcmFjdGVycyIpfXJldHVybi9zdHIkLy50ZXN0KEspP0wucmF3KCkudG9TdHJpbmcoKTpMLmVycm9yKCJE''@;'; put 'put ''ZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogIitLKyIgdW5zdXBwb3J0ZWQiKX0sRi5wcm90b3R5cGUuX2RlY29kZU9iamlkPWZ1bmN0aW9uKEwsSyxVKXtmb3IodmFyIFcsWT1bXSxYPTA7IUwuaXNFbXB0eSgpOyl7dmFyIGVlPUwucmVhZFVJbnQ4KCk7WDw8PTcsWHw9MTI3JmVlLDEyOCZlZXx8''@;'; put 'put ''KFkucHVzaChYKSxYPTApfWlmKDEyOCZlZSYmWS5wdXNoKFgpLFc9VT9ZOltZWzBdLzQwfDAsWVswXSU0MF0uY29uY2F0KFkuc2xpY2UoMSkpLEspe3ZhciBpZT1LW1cuam9pbigiICIpXTt2b2lkIDA9PT1pZSYmKGllPUtbVy5qb2luKCIuIildKSx2b2lkIDAhPT1pZSYmKFc9aWUpfXJldHVy''@;'; put 'put ''biBXfSxGLnByb3RvdHlwZS5fZGVjb2RlVGltZT1mdW5jdGlvbihMLEspe3ZhciBVPUwucmF3KCkudG9TdHJpbmcoKTtpZigiZ2VudGltZSI9PT1LKXZhciBXPTB8VS5zbGljZSgwLDQpLFk9MHxVLnNsaWNlKDQsNiksWD0wfFUuc2xpY2UoNiw4KSxlZT0wfFUuc2xpY2UoOCwxMCksSj0wfFUu''@;'; put 'put ''c2xpY2UoMTAsMTIpLHJlPTB8VS5zbGljZSgxMiwxNCk7ZWxzZXtpZigidXRjdGltZSIhPT1LKXJldHVybiBMLmVycm9yKCJEZWNvZGluZyAiK0srIiB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Iik7Vz0wfFUuc2xpY2UoMCwyKSxZPTB8VS5zbGljZSgyLDQpLFg9MHxVLnNsaWNlKDQsNiks''@;'; put 'put ''ZWU9MHxVLnNsaWNlKDYsOCksSj0wfFUuc2xpY2UoOCwxMCkscmU9MHxVLnNsaWNlKDEwLDEyKSxXPVc8NzA/MmUzK1c6MTkwMCtXfXJldHVybiBEYXRlLlVUQyhXLFktMSxYLGVlLEoscmUsMCl9LEYucHJvdG90eXBlLl9kZWNvZGVOdWxsPWZ1bmN0aW9uKEwpe3JldHVybiBudWxsfSxGLnBy''@;'; put 'put ''b3RvdHlwZS5fZGVjb2RlQm9vbD1mdW5jdGlvbihMKXt2YXIgSz1MLnJlYWRVSW50OCgpO3JldHVybiBMLmlzRXJyb3IoSyk/SzowIT09S30sRi5wcm90b3R5cGUuX2RlY29kZUludD1mdW5jdGlvbihMLEspe3ZhciBVPUwucmF3KCksVz1uZXcgQihVKTtyZXR1cm4gSyYmKFc9S1tXLnRvU3Ry''@;'; put 'put ''aW5nKDEwKV18fFcpLFd9LEYucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24oTCxLKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTCYmKEw9TChLKSksTC5fZ2V0RGVjb2RlcigiZGVyIikudHJlZX19LDgzMDc6KHVlLHEsXyk9Pnt2YXIgST1xO0kuZGVyPV8oMTY3MSksSS5wZW09Xyg5NjMxKX0s''@;'; put 'put ''OTYzMToodWUscSxfKT0+e3ZhciBJPV8oNTcxNykseT1fKDg3NjQpLkJ1ZmZlcixnPV8oMTY3MSk7ZnVuY3Rpb24gQih3KXtnLmNhbGwodGhpcyx3KSx0aGlzLmVuYz0icGVtIn1JKEIsZyksdWUuZXhwb3J0cz1CLEIucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbihQLEYpe2Zvcih2YXIgTz1Q''@;'; put 'put ''LnRvU3RyaW5nKCkuc3BsaXQoL1tcclxuXSsvZyksej1GLmxhYmVsLnRvVXBwZXJDYXNlKCksTj0vXi0tLS0tKEJFR0lOfEVORCkgKFteLV0rKS0tLS0tJC8sTD0tMSxLPS0xLFU9MDtVPE8ubGVuZ3RoO1UrKyl7dmFyIFc9T1tVXS5tYXRjaChOKTtpZihudWxsIT09VyYmV1syXT09PXope2lm''@;'; put 'put ''KC0xIT09TCl7aWYoIkVORCIhPT1XWzFdKWJyZWFrO0s9VTticmVha31pZigiQkVHSU4iIT09V1sxXSlicmVhaztMPVV9fWlmKC0xPT09THx8LTE9PT1LKXRocm93IG5ldyBFcnJvcigiUEVNIHNlY3Rpb24gbm90IGZvdW5kIGZvcjogIit6KTt2YXIgWT1PLnNsaWNlKEwrMSxLKS5qb2luKCIi''@;'; put 'put ''KTtZLnJlcGxhY2UoL1teYS16MC05XCtcLz1dKy9naSwiIik7dmFyIFg9bmV3IHkoWSwiYmFzZTY0Iik7cmV0dXJuIGcucHJvdG90eXBlLmRlY29kZS5jYWxsKHRoaXMsWCxGKX19LDY5ODQ6KHVlLHEsXyk9Pnt2YXIgST1fKDU3MTcpLHk9Xyg4NzY0KS5CdWZmZXIsZz1fKDk4MDkpLEI9Zy5i''@;'; put 'put ''YXNlLHc9Zy5jb25zdGFudHMuZGVyO2Z1bmN0aW9uIFAoTil7dGhpcy5lbmM9ImRlciIsdGhpcy5uYW1lPU4ubmFtZSx0aGlzLmVudGl0eT1OLHRoaXMudHJlZT1uZXcgRix0aGlzLnRyZWUuX2luaXQoTi5ib2R5KX1mdW5jdGlvbiBGKE4pe0IuTm9kZS5jYWxsKHRoaXMsImRlciIsTil9ZnVu''@;'; put 'put ''Y3Rpb24gTyhOKXtyZXR1cm4gTjwxMD8iMCIrTjpOfXVlLmV4cG9ydHM9UCxQLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24oTCxLKXtyZXR1cm4gdGhpcy50cmVlLl9lbmNvZGUoTCxLKS5qb2luKCl9LEkoRixCLk5vZGUpLEYucHJvdG90eXBlLl9lbmNvZGVDb21wb3NpdGU9ZnVuY3Rpb24o''@;'; put 'put ''TCxLLFUsVyl7dmFyIEosWT1mdW5jdGlvbiB6KE4sTCxLLFUpe3ZhciBXO2lmKCJzZXFvZiI9PT1OP049InNlcSI6InNldG9mIj09PU4mJihOPSJzZXQiKSx3LnRhZ0J5TmFtZS5oYXNPd25Qcm9wZXJ0eShOKSlXPXcudGFnQnlOYW1lW05dO2Vsc2V7aWYoIm51bWJlciIhPXR5cGVvZiBOfHwo''@;'; put 'put ''MHxOKSE9PU4pcmV0dXJuIFUuZXJyb3IoIlVua25vd24gdGFnOiAiK04pO1c9Tn1yZXR1cm4gVz49MzE/VS5lcnJvcigiTXVsdGktb2N0ZXQgdGFnIGVuY29kaW5nIHVuc3VwcG9ydGVkIik6KEx8fChXfD0zMiksV3w9dy50YWdDbGFzc0J5TmFtZVtLfHwidW5pdmVyc2FsIl08PDYpfShMLEss''@;'; put 'put ''VSx0aGlzLnJlcG9ydGVyKTtpZihXLmxlbmd0aDwxMjgpcmV0dXJuKEo9bmV3IHkoMikpWzBdPVksSlsxXT1XLmxlbmd0aCx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFtKLFddKTtmb3IodmFyIFg9MSxlZT1XLmxlbmd0aDtlZT49MjU2O2VlPj49OClYKys7KEo9bmV3IHkoMitYKSlbMF09''@;'; put 'put ''WSxKWzFdPTEyOHxYLGVlPTErWDtmb3IodmFyIHJlPVcubGVuZ3RoO3JlPjA7ZWUtLSxyZT4+PTgpSltlZV09MjU1JnJlO3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFtKLFddKX0sRi5wcm90b3R5cGUuX2VuY29kZVN0cj1mdW5jdGlvbihMLEspe2lmKCJiaXRzdHIiPT09Syly''@;'; put 'put ''ZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbMHxMLnVudXNlZCxMLmRhdGFdKTtpZigiYm1wc3RyIj09PUspe2Zvcih2YXIgVT1uZXcgeSgyKkwubGVuZ3RoKSxXPTA7VzxMLmxlbmd0aDtXKyspVS53cml0ZVVJbnQxNkJFKEwuY2hhckNvZGVBdChXKSwyKlcpO3JldHVybiB0aGlz''@;'; put 'put ''Ll9jcmVhdGVFbmNvZGVyQnVmZmVyKFUpfXJldHVybiJudW1zdHIiPT09Sz90aGlzLl9pc051bXN0cihMKT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEwpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiBudW1zdHIgc3VwcG9ydHMgb25seSBkaWdpdHMg''@;'; put 'put ''YW5kIHNwYWNlIik6InByaW50c3RyIj09PUs/dGhpcy5faXNQcmludHN0cihMKT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEwpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiBwcmludHN0ciBzdXBwb3J0cyBvbmx5IGxhdGluIHVwcGVyIGFuZCBsb3dl''@;'; put 'put ''ciBjYXNlIGxldHRlcnMsIGRpZ2l0cywgc3BhY2UsIGFwb3N0cm9waGUsIGxlZnQgYW5kIHJpZ3RoIHBhcmVudGhlc2lzLCBwbHVzIHNpZ24sIGNvbW1hLCBoeXBoZW4sIGRvdCwgc2xhc2gsIGNvbG9uLCBlcXVhbCBzaWduLCBxdWVzdGlvbiBtYXJrIik6L3N0ciQvLnRlc3QoSyl8fCJvYmpE''@;'; put 'put ''ZXNjIj09PUs/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihMKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogIitLKyIgdW5zdXBwb3J0ZWQiKX0sRi5wcm90b3R5cGUuX2VuY29kZU9iamlkPWZ1bmN0aW9uKEwsSyxVKXtpZigic3RyaW5nIj09dHlwZW9m''@;'; put 'put ''IEwpe2lmKCFLKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJzdHJpbmcgb2JqaWQgZ2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwIGZvdW5kIik7aWYoIUsuaGFzT3duUHJvcGVydHkoTCkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIm9iamlkIG5vdCBmb3VuZCBpbiB2YWx1ZXMgbWFw''@;'; put 'put ''Iik7TD1LW0xdLnNwbGl0KC9bXHNcLl0rL2cpO2Zvcih2YXIgVz0wO1c8TC5sZW5ndGg7VysrKUxbV118PTB9ZWxzZSBpZihBcnJheS5pc0FycmF5KEwpKWZvcihMPUwuc2xpY2UoKSxXPTA7VzxMLmxlbmd0aDtXKyspTFtXXXw9MDtpZighQXJyYXkuaXNBcnJheShMKSlyZXR1cm4gdGhpcy5y''@;'; put 'put ''ZXBvcnRlci5lcnJvcigib2JqaWQoKSBzaG91bGQgYmUgZWl0aGVyIGFycmF5IG9yIHN0cmluZywgZ290OiAiK0pTT04uc3RyaW5naWZ5KEwpKTtpZighVSl7aWYoTFsxXT49NDApcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlNlY29uZCBvYmppZCBpZGVudGlmaWVyIE9PQiIpO0wuc3Bs''@;'; put 'put ''aWNlKDAsMiw0MCpMWzBdK0xbMV0pfXZhciBZPTA7Zm9yKFc9MDtXPEwubGVuZ3RoO1crKyl7dmFyIFg9TFtXXTtmb3IoWSsrO1g+PTEyODtYPj49NylZKyt9dmFyIGVlPW5ldyB5KFkpLEo9ZWUubGVuZ3RoLTE7Zm9yKFc9TC5sZW5ndGgtMTtXPj0wO1ctLSlmb3IoZWVbSi0tXT0xMjcmKFg9''@;'; put 'put ''TFtXXSk7KFg+Pj03KT4wOyllZVtKLS1dPTEyOHwxMjcmWDtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihlZSl9LEYucHJvdG90eXBlLl9lbmNvZGVUaW1lPWZ1bmN0aW9uKEwsSyl7dmFyIFUsVz1uZXcgRGF0ZShMKTtyZXR1cm4iZ2VudGltZSI9PT1LP1U9W08oVy5nZXRGdWxs''@;'; put 'put ''WWVhcigpKSxPKFcuZ2V0VVRDTW9udGgoKSsxKSxPKFcuZ2V0VVRDRGF0ZSgpKSxPKFcuZ2V0VVRDSG91cnMoKSksTyhXLmdldFVUQ01pbnV0ZXMoKSksTyhXLmdldFVUQ1NlY29uZHMoKSksIloiXS5qb2luKCIiKToidXRjdGltZSI9PT1LP1U9W08oVy5nZXRGdWxsWWVhcigpJTEwMCksTyhX''@;'; put 'put ''LmdldFVUQ01vbnRoKCkrMSksTyhXLmdldFVUQ0RhdGUoKSksTyhXLmdldFVUQ0hvdXJzKCkpLE8oVy5nZXRVVENNaW51dGVzKCkpLE8oVy5nZXRVVENTZWNvbmRzKCkpLCJaIl0uam9pbigiIik6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2RpbmcgIitLKyIgdGltZSBpcyBub3Qgc3VwcG9y''@;'; put 'put ''dGVkIHlldCIpLHRoaXMuX2VuY29kZVN0cihVLCJvY3RzdHIiKX0sRi5wcm90b3R5cGUuX2VuY29kZU51bGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcigiIil9LEYucHJvdG90eXBlLl9lbmNvZGVJbnQ9ZnVuY3Rpb24oTCxLKXtpZigic3RyaW5nIj09dHlw''@;'; put 'put ''ZW9mIEwpe2lmKCFLKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJTdHJpbmcgaW50IG9yIGVudW0gZ2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwIik7aWYoIUsuaGFzT3duUHJvcGVydHkoTCkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlZhbHVlcyBtYXAgZG9lc24ndCBjb250YWlu''@;'; put 'put ''OiAiK0pTT04uc3RyaW5naWZ5KEwpKTtMPUtbTF19aWYoIm51bWJlciIhPXR5cGVvZiBMJiYheS5pc0J1ZmZlcihMKSl7dmFyIFU9TC50b0FycmF5KCk7IUwuc2lnbiYmMTI4JlVbMF0mJlUudW5zaGlmdCgwKSxMPW5ldyB5KFUpfWlmKHkuaXNCdWZmZXIoTCkpe3ZhciBXPUwubGVuZ3RoOzA9''@;'; put 'put ''PT1MLmxlbmd0aCYmVysrO3ZhciBYPW5ldyB5KFcpO3JldHVybiBMLmNvcHkoWCksMD09PUwubGVuZ3RoJiYoWFswXT0wKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFgpfWlmKEw8MTI4KXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEwpO2lmKEw8MjU2KXJldHVybiB0aGlz''@;'; put 'put ''Ll9jcmVhdGVFbmNvZGVyQnVmZmVyKFswLExdKTtXPTE7Zm9yKHZhciBZPUw7WT49MjU2O1k+Pj04KVcrKztmb3IoWT0oWD1uZXcgQXJyYXkoVykpLmxlbmd0aC0xO1k+PTA7WS0tKVhbWV09MjU1JkwsTD4+PTg7cmV0dXJuIDEyOCZYWzBdJiZYLnVuc2hpZnQoMCksdGhpcy5fY3JlYXRlRW5j''@;'; put 'put ''b2RlckJ1ZmZlcihuZXcgeShYKSl9LEYucHJvdG90eXBlLl9lbmNvZGVCb29sPWZ1bmN0aW9uKEwpe3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEw/MjU1OjApfSxGLnByb3RvdHlwZS5fdXNlPWZ1bmN0aW9uKEwsSyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEwmJihMPUwo''@;'; put 'put ''SykpLEwuX2dldEVuY29kZXIoImRlciIpLnRyZWV9LEYucHJvdG90eXBlLl9za2lwRGVmYXVsdD1mdW5jdGlvbihMLEssVSl7dmFyIFksVz10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PVcuZGVmYXVsdClyZXR1cm4hMTt2YXIgWD1MLmpvaW4oKTtpZih2b2lkIDA9PT1XLmRlZmF1bHRCdWZm''@;'; put 'put ''ZXImJihXLmRlZmF1bHRCdWZmZXI9dGhpcy5fZW5jb2RlVmFsdWUoVy5kZWZhdWx0LEssVSkuam9pbigpKSxYLmxlbmd0aCE9PVcuZGVmYXVsdEJ1ZmZlci5sZW5ndGgpcmV0dXJuITE7Zm9yKFk9MDtZPFgubGVuZ3RoO1krKylpZihYW1ldIT09Vy5kZWZhdWx0QnVmZmVyW1ldKXJldHVybiEx''@;'; put 'put ''O3JldHVybiEwfX0sNjU3OToodWUscSxfKT0+e3ZhciBJPXE7SS5kZXI9Xyg2OTg0KSxJLnBlbT1fKDI4ODMpfSwyODgzOih1ZSxxLF8pPT57dmFyIEk9Xyg1NzE3KSx5PV8oNjk4NCk7ZnVuY3Rpb24gZyhCKXt5LmNhbGwodGhpcyxCKSx0aGlzLmVuYz0icGVtIn1JKGcseSksdWUuZXhwb3J0''@;'; put 'put ''cz1nLGcucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbih3LFApe2Zvcih2YXIgTz15LnByb3RvdHlwZS5lbmNvZGUuY2FsbCh0aGlzLHcpLnRvU3RyaW5nKCJiYXNlNjQiKSx6PVsiLS0tLS1CRUdJTiAiK1AubGFiZWwrIi0tLS0tIl0sTj0wO048Ty5sZW5ndGg7Tis9NjQpei5wdXNoKE8uc2xp''@;'; put 'put ''Y2UoTixOKzY0KSk7cmV0dXJuIHoucHVzaCgiLS0tLS1FTkQgIitQLmxhYmVsKyItLS0tLSIpLHouam9pbigiXG4iKX19LDQ1OTA6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSx5KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZyhWLHApe2lmKCFWKXRocm93IG5ldyBFcnJvcihwfHwiQXNz''@;'; put 'put ''ZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIEIoVixwKXtWLnN1cGVyXz1wO3ZhciBiPWZ1bmN0aW9uKCl7fTtiLnByb3RvdHlwZT1wLnByb3RvdHlwZSxWLnByb3RvdHlwZT1uZXcgYixWLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1WfWZ1bmN0aW9uIHcoVixwLGIpe2lmKHcuaXNCTihWKSlyZXR1''@;'; put 'put ''cm4gVjt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09ViYmKCgibGUiPT09cHx8ImJlIj09PXApJiYoYj1wLHA9MTApLHRoaXMuX2luaXQoVnx8MCxwfHwxMCxifHwiYmUiKSl9dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBJ''@;'; put 'put ''P0kuZXhwb3J0cz13OnkuQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7UD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6Xyg5NTApLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gRihWLHApe3ZhciBiPVYuY2hhckNvZGVBdChwKTty''@;'; put 'put ''ZXR1cm4gYj49NjUmJmI8PTcwP2ItNTU6Yj49OTcmJmI8PTEwMj9iLTg3OmItNDgmMTV9ZnVuY3Rpb24gTyhWLHAsYil7dmFyIHg9RihWLGIpO3JldHVybiBiLTE+PXAmJih4fD1GKFYsYi0xKTw8NCkseH1mdW5jdGlvbiB6KFYscCxiLHgpe2Zvcih2YXIgQz0wLFQ9TWF0aC5taW4oVi5sZW5n''@;'; put 'put ''dGgsYiksSD1wO0g8VDtIKyspe3ZhciBqPVYuY2hhckNvZGVBdChIKS00ODtDKj14LEMrPWo+PTQ5P2otNDkrMTA6aj49MTc/ai0xNysxMDpqfXJldHVybiBDfXcuaXNCTj1mdW5jdGlvbihwKXtyZXR1cm4gcCBpbnN0YW5jZW9mIHd8fG51bGwhPT1wJiYib2JqZWN0Ij09dHlwZW9mIHAmJnAu''@;'; put 'put ''Y29uc3RydWN0b3Iud29yZFNpemU9PT13LndvcmRTaXplJiZBcnJheS5pc0FycmF5KHAud29yZHMpfSx3Lm1heD1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKT4wP3A6Yn0sdy5taW49ZnVuY3Rpb24ocCxiKXtyZXR1cm4gcC5jbXAoYik8MD9wOmJ9LHcucHJvdG90eXBlLl9pbml0PWZ1''@;'; put 'put ''bmN0aW9uKHAsYix4KXtpZigibnVtYmVyIj09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXROdW1iZXIocCxiLHgpO2lmKCJvYmplY3QiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5pdEFycmF5KHAsYix4KTsiaGV4Ij09PWImJihiPTE2KSxnKGI9PT0oMHxiKSYmYj49MiYmYjw9MzYpO3Zh''@;'; put 'put ''ciBDPTA7Ii0iPT09KHA9cC50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihDKyssdGhpcy5uZWdhdGl2ZT0xKSxDPHAubGVuZ3RoJiYoMTY9PT1iP3RoaXMuX3BhcnNlSGV4KHAsQyx4KToodGhpcy5fcGFyc2VCYXNlKHAsYixDKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5''@;'; put 'put ''KHRoaXMudG9BcnJheSgpLGIseCkpKX0sdy5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24ocCxiLHgpe3A8MCYmKHRoaXMubmVnYXRpdmU9MSxwPS1wKSxwPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZwXSx0aGlzLmxlbmd0aD0xKTpwPDQ1MDM1OTk2MjczNzA0OTY/KHRo''@;'; put 'put ''aXMud29yZHM9WzY3MTA4ODYzJnAscC82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KGcocDw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZwLHAvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJh''@;'; put 'put ''eSh0aGlzLnRvQXJyYXkoKSxiLHgpfSx3LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKHAsYix4KXtpZihnKCJudW1iZXIiPT10eXBlb2YgcC5sZW5ndGgpLHAubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5j''@;'; put 'put ''ZWlsKHAubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIFQsSCxqPTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMSxUPTA7Qz49MDtDLT0zKXRoaXMud29yZHNbVF18''@;'; put 'put ''PShIPXBbQ118cFtDLTFdPDw4fHBbQy0yXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7ZWxzZSBpZigibGUiPT09eClmb3IoQz0wLFQ9MDtDPHAubGVuZ3RoO0MrPTMpdGhpcy53b3Jkc1tUXXw9KEg9''@;'; put 'put ''cFtDXXxwW0MrMV08PDh8cFtDKzJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24ocCxiLHgpe3RoaXMubGVu''@;'; put 'put ''Z3RoPU1hdGguY2VpbCgocC5sZW5ndGgtYikvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgaixUPTAsSD0wO2lmKCJiZSI9PT14KWZvcihDPXAubGVuZ3RoLTE7Qz49YjtDLT0yKWo9''@;'; put 'put ''TyhwLGIsQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O2Vsc2UgZm9yKEM9KHAubGVuZ3RoLWIpJTI9PTA/YisxOmI7QzxwLmxlbmd0aDtDKz0yKWo9TyhwLGIsQyk8PFQsdGhpcy53b3Jkc1tIXXw9Njcx''@;'; put 'put ''MDg4NjMmaixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O3RoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihwLGIseCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIEM9MCxUPTE7VDw9NjcxMDg4NjM7VCo9''@;'; put 'put ''YilDKys7Qy0tLFQ9VC9ifDA7Zm9yKHZhciBIPXAubGVuZ3RoLXgsaj1IJUMsRT1NYXRoLm1pbihILEgtaikreCxtPTAsQT14O0E8RTtBKz1DKW09eihwLEEsQStDLGIpLHRoaXMuaW11bG4oVCksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4o''@;'; put 'put ''bSk7aWYoMCE9PWope3ZhciBvZT0xO2ZvcihtPXoocCxBLHAubGVuZ3RoLGIpLEE9MDtBPGo7QSsrKW9lKj1iO3RoaXMuaW11bG4ob2UpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pfXRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuY29w''@;'; put 'put ''eT1mdW5jdGlvbihwKXtwLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aDtiKyspcC53b3Jkc1tiXT10aGlzLndvcmRzW2JdO3AubGVuZ3RoPXRoaXMubGVuZ3RoLHAubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxwLnJlZD10aGlzLnJlZH0sdy5w''@;'; put 'put ''cm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHApLHB9LHcucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24ocCl7Zm9yKDt0aGlzLmxlbmd0aDxwOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHcucHJv''@;'; put 'put ''dG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sdy5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxl''@;'; put 'put ''bmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHcucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In07dmFyIE49WyIiLCIwIiwiMDAiLCIwMDAiLCIw''@;'; put 'put ''MDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''IiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sTD1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxLPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3''@;'; put 'put ''NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3''@;'; put 'put ''OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFcoVixwLGIpe2IubmVnYXRpdmU9cC5uZWdhdGl2ZV5WLm5lZ2F0aXZlO3Zh''@;'; put 'put ''ciB4PVYubGVuZ3RoK3AubGVuZ3RofDA7Yi5sZW5ndGg9eCx4PXgtMXwwO3ZhciBDPTB8Vi53b3Jkc1swXSxUPTB8cC53b3Jkc1swXSxIPUMqVCxFPUgvNjcxMDg4NjR8MDtiLndvcmRzWzBdPTY3MTA4ODYzJkg7Zm9yKHZhciBtPTE7bTx4O20rKyl7Zm9yKHZhciBBPUU+Pj4yNixvZT02NzEw''@;'; put 'put ''ODg2MyZFLHRlPU1hdGgubWluKG0scC5sZW5ndGgtMSksc2U9TWF0aC5tYXgoMCxtLVYubGVuZ3RoKzEpO3NlPD10ZTtzZSsrKUErPShIPShDPTB8Vi53b3Jkc1ttLXNlfDBdKSooVD0wfHAud29yZHNbc2VdKStvZSkvNjcxMDg4NjR8MCxvZT02NzEwODg2MyZIO2Iud29yZHNbbV09MHxvZSxF''@;'; put 'put ''PTB8QX1yZXR1cm4gMCE9PUU/Yi53b3Jkc1ttXT0wfEU6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9dy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24ocCxiKXt2YXIgeDtpZihiPTB8Ynx8MSwxNj09PShwPXB8fDEwKXx8ImhleCI9PT1wKXt4PSIiO2Zvcih2YXIgQz0wLFQ9MCxIPTA7SDx0aGlz''@;'; put 'put ''Lmxlbmd0aDtIKyspe3ZhciBqPXRoaXMud29yZHNbSF0sRT0oMTY3NzcyMTUmKGo8PEN8VCkpLnRvU3RyaW5nKDE2KTtUPWo+Pj4yNC1DJjE2Nzc3MjE1LChDKz0yKT49MjYmJihDLT0yNixILS0pLHg9MCE9PVR8fEghPT10aGlzLmxlbmd0aC0xP05bNi1FLmxlbmd0aF0rRSt4OkUreH1mb3Io''@;'; put 'put ''MCE9PVQmJih4PVQudG9TdHJpbmcoMTYpK3gpO3gubGVuZ3RoJWIhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1pZihwPT09KDB8cCkmJnA+PTImJnA8PTM2KXt2YXIgbT1MW3BdLEE9S1twXTt4PSIiO3ZhciBvZT10aGlzLmNsb25lKCk7Zm9yKG9l''@;'; put 'put ''Lm5lZ2F0aXZlPTA7IW9lLmlzWmVybygpOyl7dmFyIHRlPW9lLm1vZG4oQSkudG9TdHJpbmcocCk7eD0ob2U9b2UuaWRpdm4oQSkpLmlzWmVybygpP3RlK3g6TlttLXRlLmxlbmd0aF0rdGUreH1mb3IodGhpcy5pc1plcm8oKSYmKHg9IjAiK3gpO3gubGVuZ3RoJWIhPTA7KXg9IjAiK3g7cmV0''@;'; put 'put ''dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1nKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LHcucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHA9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3ArPTY3MTA4ODY0KnRo''@;'; put 'put ''aXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9wKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmZyghMSwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMu''@;'; put 'put ''bmVnYXRpdmU/LXA6cH0sdy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSx3LnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihwLGIpe3JldHVybiBnKHR5cGVvZiBQPCJ1IiksdGhpcy50b0FycmF5TGlrZShQLHAsYil9LHcucHJvdG90eXBl''@;'; put 'put ''LnRvQXJyYXk9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxwLGIpfSx3LnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihwLGIseCl7dmFyIEM9dGhpcy5ieXRlTGVuZ3RoKCksVD14fHxNYXRoLm1heCgxLEMpO2coQzw9VCwiYnl0ZSBhcnJheSBsb25n''@;'; put 'put ''ZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLGcoVD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIEUsbSxIPSJsZSI9PT1iLGo9bmV3IHAoVCksQT10aGlzLmNsb25lKCk7aWYoSCl7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSks''@;'; put 'put ''QS5pdXNocm4oOCksalttXT1FO2Zvcig7bTxUO20rKylqW21dPTB9ZWxzZXtmb3IobT0wO208VC1DO20rKylqW21dPTA7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksaltULW0tMV09RX1yZXR1cm4gan0sdy5wcm90b3R5cGUuX2NvdW50Qml0cz1N''@;'; put 'put ''YXRoLmNsejMyP2Z1bmN0aW9uKHApe3JldHVybiAzMi1NYXRoLmNsejMyKHApfTpmdW5jdGlvbihwKXt2YXIgYj1wLHg9MDtyZXR1cm4gYj49NDA5NiYmKHgrPTEzLGI+Pj49MTMpLGI+PTY0JiYoeCs9NyxiPj4+PTcpLGI+PTgmJih4Kz00LGI+Pj49NCksYj49MiYmKHgrPTIsYj4+Pj0yKSx4''@;'; put 'put ''K2J9LHcucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihwKXtpZigwPT09cClyZXR1cm4gMjY7dmFyIGI9cCx4PTA7cmV0dXJuIDgxOTEmYnx8KHgrPTEzLGI+Pj49MTMpLDEyNyZifHwoeCs9NyxiPj4+PTcpLDE1JmJ8fCh4Kz00LGI+Pj49NCksMyZifHwoeCs9MixiPj4+PTIpLDEmYnx8''@;'; put 'put ''eCsrLHh9LHcucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBiPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK2J9LHcucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8o''@;'; put 'put ''KSlyZXR1cm4gMDtmb3IodmFyIHA9MCxiPTA7Yjx0aGlzLmxlbmd0aDtiKyspe3ZhciB4PXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbYl0pO2lmKHArPXgsMjYhPT14KWJyZWFrfXJldHVybiBwfSx3LnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0''@;'; put 'put ''aGlzLmJpdExlbmd0aCgpLzgpfSx3LnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4ocCkuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy50''@;'; put 'put ''ZXN0bihwLTEpP3RoaXMubm90bihwKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sdy5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LHcu''@;'; put 'put ''cHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LHcucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24ocCl7Zm9yKDt0aGlzLmxlbmd0aDxwLmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIg''@;'; put 'put ''Yj0wO2I8cC5sZW5ndGg7YisrKXRoaXMud29yZHNbYl09dGhpcy53b3Jkc1tiXXxwLndvcmRzW2JdO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXVvcihwKX0sdy5wcm90''@;'; put 'put ''b3R5cGUub3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IocCk6cC5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihw''@;'; put 'put ''KTpwLmNsb25lKCkuaXVvcih0aGlzKX0sdy5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24ocCl7dmFyIGI7Yj10aGlzLmxlbmd0aD5wLmxlbmd0aD9wOnRoaXM7Zm9yKHZhciB4PTA7eDxiLmxlbmd0aDt4KyspdGhpcy53b3Jkc1t4XT10aGlzLndvcmRzW3hdJnAud29yZHNbeF07cmV0dXJuIHRo''@;'; put 'put ''aXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQocCl9LHcucHJvdG90eXBlLmFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5s''@;'; put 'put ''ZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQocCk6cC5jbG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChwKTpwLmNsb25lKCkuaXVhbmQodGhpcyl9LHcucHJvdG90eXBlLml1''@;'; put 'put ''eG9yPWZ1bmN0aW9uKHApe3ZhciBiLHg7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KGI9dGhpcyx4PXApOihiPXAseD10aGlzKTtmb3IodmFyIEM9MDtDPHgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPWIud29yZHNbQ11eeC53b3Jkc1tDXTtpZih0aGlzIT09Yilmb3IoO0M8Yi5sZW5ndGg7Qysr''@;'; put 'put ''KXRoaXMud29yZHNbQ109Yi53b3Jkc1tDXTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdXhvcihwKX0sdy5wcm90b3R5cGUueG9y''@;'; put 'put ''PWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihwKTpwLmNsb25lKCkuaXhvcih0aGlzKX0sdy5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKHApOnAu''@;'; put 'put ''Y2xvbmUoKS5pdXhvcih0aGlzKX0sdy5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPTB8TWF0aC5jZWlsKHAvMjYpLHg9cCUyNjt0aGlzLl9leHBhbmQoYikseD4wJiZiLS07Zm9yKHZhciBDPTA7QzxiO0MrKyl0aGlzLndvcmRz''@;'; put 'put ''W0NdPTY3MTA4ODYzJn50aGlzLndvcmRzW0NdO3JldHVybiB4PjAmJih0aGlzLndvcmRzW0NdPX50aGlzLndvcmRzW0NdJjY3MTA4ODYzPj4yNi14KSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihwKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuc2V0bj1mdW5jdGlvbihwLGIpe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgeD1wLzI2fDAsQz1wJTI2O3JldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdPWI/dGhpcy53b3Jkc1t4XXwxPDxDOnRoaXMud29yZHNbeF0mfigxPDxDKSx0aGlzLnN0cmlw''@;'; put 'put ''KCl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCl7dmFyIGIseCxDO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKHApLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5u''@;'; put 'put ''ZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIHAubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihwKSxwLm5lZ2F0aXZlPTEsYi5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oeD10aGlzLEM9cCk6KHg9cCxDPXRoaXMpO2Zvcih2YXIgVD0wLEg9MDtIPEMubGVuZ3RoO0grKyl0''@;'; put 'put ''aGlzLndvcmRzW0hdPTY3MTA4ODYzJihiPSgwfHgud29yZHNbSF0pKygwfEMud29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2Zvcig7MCE9PVQmJkg8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKGI9KDB8eC53b3Jkc1tIXSkrVCksVD1iPj4+MjY7aWYodGhpcy5sZW5ndGg9eC5s''@;'; put 'put ''ZW5ndGgsMCE9PVQpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09VCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoeCE9PXRoaXMpZm9yKDtIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXgud29yZHNbSF07cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihwKXt2YXIgYjtyZXR1''@;'; put 'put ''cm4gMCE9PXAubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhwLm5lZ2F0aXZlPTAsYj10aGlzLnN1YihwKSxwLm5lZ2F0aXZlXj0xLGIpOjA9PT1wLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLGI9cC5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLGIp''@;'; put 'put ''OnRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHApOnAuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHApe2lmKDAhPT1wLm5lZ2F0aXZlKXtwLm5lZ2F0aXZlPTA7dmFyIGI9dGhpcy5pYWRkKHApO3JldHVybiBwLm5lZ2F0aXZlPTEs''@;'; put 'put ''Yi5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgQyxULHg9dGhpcy5jbXAocCk7aWYoMD09PXgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxl''@;'; put 'put ''bmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3g+MD8oQz10aGlzLFQ9cCk6KEM9cCxUPXRoaXMpO2Zvcih2YXIgSD0wLGo9MDtqPFQubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNbal0pLSgwfFQud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJmI7Zm9yKDswIT09''@;'; put 'put ''SCYmajxDLmxlbmd0aDtqKyspSD0oYj0oMHxDLndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2lmKDA9PT1IJiZqPEMubGVuZ3RoJiZDIT09dGhpcylmb3IoO2o8Qy5sZW5ndGg7aisrKXRoaXMud29yZHNbal09Qy53b3Jkc1tqXTtyZXR1cm4gdGhpcy5sZW5ndGg9''@;'; put 'put ''TWF0aC5tYXgodGhpcy5sZW5ndGgsaiksQyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihwKX07dmFyIFk9ZnVuY3Rpb24ocCxiLHgpe3ZhciBFLG0sQSxDPXAud29yZHMs''@;'; put 'put ''VD1iLndvcmRzLEg9eC53b3JkcyxqPTAsb2U9MHxDWzBdLHRlPTgxOTEmb2Usc2U9b2U+Pj4xMyx3ZT0wfENbMV0sVWU9ODE5MSZ3ZSxKZT13ZT4+PjEzLGF0PTB8Q1syXSxNZT04MTkxJmF0LHZlPWF0Pj4+MTMsWGU9MHxDWzNdLGplPTgxOTEmWGUsRGU9WGU+Pj4xMyxGZT0wfENbNF0sUmU9''@;'; put 'put ''ODE5MSZGZSxJZT1GZT4+PjEzLFZlPTB8Q1s1XSxrZT04MTkxJlZlLEFlPVZlPj4+MTMsX3Q9MHxDWzZdLHJ0PTgxOTEmX3QsUWU9X3Q+Pj4xMyxkbj0wfENbN10seXQ9ODE5MSZkbixNdD1kbj4+PjEzLER0PTB8Q1s4XSxpdD04MTkxJkR0LCRlPUR0Pj4+MTMsdHQ9MHxDWzldLEhlPTgxOTEm''@;'; put 'put ''dHQsZHQ9dHQ+Pj4xMyxxdD0wfFRbMF0sUnQ9ODE5MSZxdCxQdD1xdD4+PjEzLGFpPTB8VFsxXSxRdD04MTkxJmFpLHNuPWFpPj4+MTMsUmk9MHxUWzJdLGZuPTgxOTEmUmksZnQ9Umk+Pj4xMyxQcj0wfFRbM10sWnQ9ODE5MSZQcixBdD1Qcj4+PjEzLExuPTB8VFs0XSxzdD04MTkxJkxuLHp0''@;'; put 'put ''PUxuPj4+MTMsbmk9MHxUWzVdLFdlPTgxOTEmbmksVHQ9bmk+Pj4xMyxycj0wfFRbNl0saHQ9ODE5MSZycix4dD1ycj4+PjEzLEJuPTB8VFs3XSxvbj04MTkxJkJuLGp0PUJuPj4+MTMsZGk9MHxUWzhdLGNuPTgxOTEmZGkscG49ZGk+Pj4xMyxJaT0wfFRbOV0sWHQ9ODE5MSZJaSxlbj1JaT4+''@;'; put 'put ''PjEzO3gubmVnYXRpdmU9cC5uZWdhdGl2ZV5iLm5lZ2F0aXZlLHgubGVuZ3RoPTE5O3ZhciBobz0oaisoRT1NYXRoLmltdWwodGUsUnQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKHRlLFB0KSkrTWF0aC5pbXVsKHNlLFJ0KXwwKSk8PDEzKXwwO2o9KChBPU1hdGguaW11bChzZSxQdCkp''@;'; put 'put ''KyhtPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2MyxFPU1hdGguaW11bChVZSxSdCksbT0obT1NYXRoLmltdWwoVWUsUHQpKStNYXRoLmltdWwoSmUsUnQpfDAsQT1NYXRoLmltdWwoSmUsUHQpO3ZhciBNaT0oaisoRT1FK01hdGguaW11bCh0ZSxRdCl8MCl8MCkrKCg4MTkxJiht''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKHRlLHNuKXwwKStNYXRoLmltdWwoc2UsUXQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2Usc24pfDApKyhtPj4+MTMpfDApKyhNaT4+PjI2KXwwLE1pJj02NzEwODg2MyxFPU1hdGguaW11bChNZSxSdCksbT0obT1NYXRoLmltdWwoTWUsUHQpKStNYXRo''@;'; put 'put ''LmltdWwodmUsUnQpfDAsQT1NYXRoLmltdWwodmUsUHQpLEU9RStNYXRoLmltdWwoVWUsUXQpfDAsbT0obT1tK01hdGguaW11bChVZSxzbil8MCkrTWF0aC5pbXVsKEplLFF0KXwwLEE9QStNYXRoLmltdWwoSmUsc24pfDA7dmFyIHByPShqKyhFPUUrTWF0aC5pbXVsKHRlLGZuKXwwKXwwKSso''@;'; put 'put ''KDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZnQpfDApK01hdGguaW11bChzZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxmdCl8MCkrKG0+Pj4xMyl8MCkrKHByPj4+MjYpfDAscHImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGplLFJ0KSxtPShtPU1hdGguaW11bChqZSxQ''@;'; put 'put ''dCkpK01hdGguaW11bChEZSxSdCl8MCxBPU1hdGguaW11bChEZSxQdCksRT1FK01hdGguaW11bChNZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHNuKXwwKStNYXRoLmltdWwodmUsUXQpfDAsQT1BK01hdGguaW11bCh2ZSxzbil8MCxFPUUrTWF0aC5pbXVsKFVlLGZuKXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoVWUsZnQpfDApK01hdGguaW11bChKZSxmbil8MCxBPUErTWF0aC5pbXVsKEplLGZ0KXwwO3ZhciBXbj0oaisoRT1FK01hdGguaW11bCh0ZSxadCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLEF0KXwwKStNYXRoLmltdWwoc2UsWnQpfDApKTw8MTMpfDA7aj0o''@;'; put 'put ''KEE9QStNYXRoLmltdWwoc2UsQXQpfDApKyhtPj4+MTMpfDApKyhXbj4+PjI2KXwwLFduJj02NzEwODg2MyxFPU1hdGguaW11bChSZSxSdCksbT0obT1NYXRoLmltdWwoUmUsUHQpKStNYXRoLmltdWwoSWUsUnQpfDAsQT1NYXRoLmltdWwoSWUsUHQpLEU9RStNYXRoLmltdWwoamUsUXQpfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bChqZSxzbil8MCkrTWF0aC5pbXVsKERlLFF0KXwwLEE9QStNYXRoLmltdWwoRGUsc24pfDAsRT1FK01hdGguaW11bChNZSxmbil8MCxtPShtPW0rTWF0aC5pbXVsKE1lLGZ0KXwwKStNYXRoLmltdWwodmUsZm4pfDAsQT1BK01hdGguaW11bCh2ZSxmdCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKFVlLFp0KXwwLG09KG09bStNYXRoLmltdWwoVWUsQXQpfDApK01hdGguaW11bChKZSxadCl8MCxBPUErTWF0aC5pbXVsKEplLEF0KXwwO3ZhciBLaT0oaisoRT1FK01hdGguaW11bCh0ZSxzdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHp0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoc2Usc3QpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsenQpfDApKyhtPj4+MTMpfDApKyhLaT4+PjI2KXwwLEtpJj02NzEwODg2MyxFPU1hdGguaW11bChrZSxSdCksbT0obT1NYXRoLmltdWwoa2UsUHQpKStNYXRoLmltdWwoQWUsUnQpfDAsQT1NYXRoLmltdWwoQWUs''@;'; put 'put ''UHQpLEU9RStNYXRoLmltdWwoUmUsUXQpfDAsbT0obT1tK01hdGguaW11bChSZSxzbil8MCkrTWF0aC5pbXVsKEllLFF0KXwwLEE9QStNYXRoLmltdWwoSWUsc24pfDAsRT1FK01hdGguaW11bChqZSxmbil8MCxtPShtPW0rTWF0aC5pbXVsKGplLGZ0KXwwKStNYXRoLmltdWwoRGUsZm4pfDAs''@;'; put 'put ''QT1BK01hdGguaW11bChEZSxmdCl8MCxFPUUrTWF0aC5pbXVsKE1lLFp0KXwwLG09KG09bStNYXRoLmltdWwoTWUsQXQpfDApK01hdGguaW11bCh2ZSxadCl8MCxBPUErTWF0aC5pbXVsKHZlLEF0KXwwLEU9RStNYXRoLmltdWwoVWUsc3QpfDAsbT0obT1tK01hdGguaW11bChVZSx6dCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKEplLHN0KXwwLEE9QStNYXRoLmltdWwoSmUsenQpfDA7dmFyIFFyPShqKyhFPUUrTWF0aC5pbXVsKHRlLFdlKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsVHQpfDApK01hdGguaW11bChzZSxXZSl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxU''@;'; put 'put ''dCl8MCkrKG0+Pj4xMyl8MCkrKFFyPj4+MjYpfDAsUXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHJ0LFJ0KSxtPShtPU1hdGguaW11bChydCxQdCkpK01hdGguaW11bChRZSxSdCl8MCxBPU1hdGguaW11bChRZSxQdCksRT1FK01hdGguaW11bChrZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtl''@;'; put 'put ''LHNuKXwwKStNYXRoLmltdWwoQWUsUXQpfDAsQT1BK01hdGguaW11bChBZSxzbil8MCxFPUUrTWF0aC5pbXVsKFJlLGZuKXwwLG09KG09bStNYXRoLmltdWwoUmUsZnQpfDApK01hdGguaW11bChJZSxmbil8MCxBPUErTWF0aC5pbXVsKEllLGZ0KXwwLEU9RStNYXRoLmltdWwoamUsWnQpfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bChqZSxBdCl8MCkrTWF0aC5pbXVsKERlLFp0KXwwLEE9QStNYXRoLmltdWwoRGUsQXQpfDAsRT1FK01hdGguaW11bChNZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHp0KXwwKStNYXRoLmltdWwodmUsc3QpfDAsQT1BK01hdGguaW11bCh2ZSx6dCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKFVlLFdlKXwwLG09KG09bStNYXRoLmltdWwoVWUsVHQpfDApK01hdGguaW11bChKZSxXZSl8MCxBPUErTWF0aC5pbXVsKEplLFR0KXwwO3ZhciBKcj0oaisoRT1FK01hdGguaW11bCh0ZSxodCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHh0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoc2UsaHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UseHQpfDApKyhtPj4+MTMpfDApKyhKcj4+PjI2KXwwLEpyJj02NzEwODg2MyxFPU1hdGguaW11bCh5dCxSdCksbT0obT1NYXRoLmltdWwoeXQsUHQpKStNYXRoLmltdWwoTXQsUnQpfDAsQT1NYXRoLmltdWwoTXQs''@;'; put 'put ''UHQpLEU9RStNYXRoLmltdWwocnQsUXQpfDAsbT0obT1tK01hdGguaW11bChydCxzbil8MCkrTWF0aC5pbXVsKFFlLFF0KXwwLEE9QStNYXRoLmltdWwoUWUsc24pfDAsRT1FK01hdGguaW11bChrZSxmbil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLGZ0KXwwKStNYXRoLmltdWwoQWUsZm4pfDAs''@;'; put 'put ''QT1BK01hdGguaW11bChBZSxmdCl8MCxFPUUrTWF0aC5pbXVsKFJlLFp0KXwwLG09KG09bStNYXRoLmltdWwoUmUsQXQpfDApK01hdGguaW11bChJZSxadCl8MCxBPUErTWF0aC5pbXVsKEllLEF0KXwwLEU9RStNYXRoLmltdWwoamUsc3QpfDAsbT0obT1tK01hdGguaW11bChqZSx6dCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKERlLHN0KXwwLEE9QStNYXRoLmltdWwoRGUsenQpfDAsRT1FK01hdGguaW11bChNZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLFR0KXwwKStNYXRoLmltdWwodmUsV2UpfDAsQT1BK01hdGguaW11bCh2ZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFVlLGh0KXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoVWUseHQpfDApK01hdGguaW11bChKZSxodCl8MCxBPUErTWF0aC5pbXVsKEplLHh0KXwwO3ZhciBCaT0oaisoRT1FK01hdGguaW11bCh0ZSxvbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGp0KXwwKStNYXRoLmltdWwoc2Usb24pfDApKTw8MTMpfDA7aj0o''@;'; put 'put ''KEE9QStNYXRoLmltdWwoc2UsanQpfDApKyhtPj4+MTMpfDApKyhCaT4+PjI2KXwwLEJpJj02NzEwODg2MyxFPU1hdGguaW11bChpdCxSdCksbT0obT1NYXRoLmltdWwoaXQsUHQpKStNYXRoLmltdWwoJGUsUnQpfDAsQT1NYXRoLmltdWwoJGUsUHQpLEU9RStNYXRoLmltdWwoeXQsUXQpfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bCh5dCxzbil8MCkrTWF0aC5pbXVsKE10LFF0KXwwLEE9QStNYXRoLmltdWwoTXQsc24pfDAsRT1FK01hdGguaW11bChydCxmbil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LGZ0KXwwKStNYXRoLmltdWwoUWUsZm4pfDAsQT1BK01hdGguaW11bChRZSxmdCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKGtlLFp0KXwwLG09KG09bStNYXRoLmltdWwoa2UsQXQpfDApK01hdGguaW11bChBZSxadCl8MCxBPUErTWF0aC5pbXVsKEFlLEF0KXwwLEU9RStNYXRoLmltdWwoUmUsc3QpfDAsbT0obT1tK01hdGguaW11bChSZSx6dCl8MCkrTWF0aC5pbXVsKEllLHN0KXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoSWUsenQpfDAsRT1FK01hdGguaW11bChqZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGplLFR0KXwwKStNYXRoLmltdWwoRGUsV2UpfDAsQT1BK01hdGguaW11bChEZSxUdCl8MCxFPUUrTWF0aC5pbXVsKE1lLGh0KXwwLG09KG09bStNYXRoLmltdWwoTWUseHQpfDApK01hdGguaW11''@;'; put 'put ''bCh2ZSxodCl8MCxBPUErTWF0aC5pbXVsKHZlLHh0KXwwLEU9RStNYXRoLmltdWwoVWUsb24pfDAsbT0obT1tK01hdGguaW11bChVZSxqdCl8MCkrTWF0aC5pbXVsKEplLG9uKXwwLEE9QStNYXRoLmltdWwoSmUsanQpfDA7dmFyIFZpPShqKyhFPUUrTWF0aC5pbXVsKHRlLGNuKXwwKXwwKSso''@;'; put 'put ''KDgxOTEmKG09KG09bStNYXRoLmltdWwodGUscG4pfDApK01hdGguaW11bChzZSxjbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxwbil8MCkrKG0+Pj4xMyl8MCkrKFZpPj4+MjYpfDAsVmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFJ0KSxtPShtPU1hdGguaW11bChIZSxQ''@;'; put 'put ''dCkpK01hdGguaW11bChkdCxSdCl8MCxBPU1hdGguaW11bChkdCxQdCksRT1FK01hdGguaW11bChpdCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHNuKXwwKStNYXRoLmltdWwoJGUsUXQpfDAsQT1BK01hdGguaW11bCgkZSxzbil8MCxFPUUrTWF0aC5pbXVsKHl0LGZuKXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoeXQsZnQpfDApK01hdGguaW11bChNdCxmbil8MCxBPUErTWF0aC5pbXVsKE10LGZ0KXwwLEU9RStNYXRoLmltdWwocnQsWnQpfDAsbT0obT1tK01hdGguaW11bChydCxBdCl8MCkrTWF0aC5pbXVsKFFlLFp0KXwwLEE9QStNYXRoLmltdWwoUWUsQXQpfDAsRT1FK01hdGguaW11''@;'; put 'put ''bChrZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHp0KXwwKStNYXRoLmltdWwoQWUsc3QpfDAsQT1BK01hdGguaW11bChBZSx6dCl8MCxFPUUrTWF0aC5pbXVsKFJlLFdlKXwwLG09KG09bStNYXRoLmltdWwoUmUsVHQpfDApK01hdGguaW11bChJZSxXZSl8MCxBPUErTWF0aC5pbXVsKEll''@;'; put 'put ''LFR0KXwwLEU9RStNYXRoLmltdWwoamUsaHQpfDAsbT0obT1tK01hdGguaW11bChqZSx4dCl8MCkrTWF0aC5pbXVsKERlLGh0KXwwLEE9QStNYXRoLmltdWwoRGUseHQpfDAsRT1FK01hdGguaW11bChNZSxvbil8MCxtPShtPW0rTWF0aC5pbXVsKE1lLGp0KXwwKStNYXRoLmltdWwodmUsb24p''@;'; put 'put ''fDAsQT1BK01hdGguaW11bCh2ZSxqdCl8MCxFPUUrTWF0aC5pbXVsKFVlLGNuKXwwLG09KG09bStNYXRoLmltdWwoVWUscG4pfDApK01hdGguaW11bChKZSxjbil8MCxBPUErTWF0aC5pbXVsKEplLHBuKXwwO3ZhciBJbz0oaisoRT1FK01hdGguaW11bCh0ZSxYdCl8MCl8MCkrKCg4MTkxJiht''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKHRlLGVuKXwwKStNYXRoLmltdWwoc2UsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZW4pfDApKyhtPj4+MTMpfDApKyhJbz4+PjI2KXwwLElvJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxRdCksbT0obT1NYXRoLmltdWwoSGUsc24pKStNYXRo''@;'; put 'put ''LmltdWwoZHQsUXQpfDAsQT1NYXRoLmltdWwoZHQsc24pLEU9RStNYXRoLmltdWwoaXQsZm4pfDAsbT0obT1tK01hdGguaW11bChpdCxmdCl8MCkrTWF0aC5pbXVsKCRlLGZuKXwwLEE9QStNYXRoLmltdWwoJGUsZnQpfDAsRT1FK01hdGguaW11bCh5dCxadCl8MCxtPShtPW0rTWF0aC5pbXVs''@;'; put 'put ''KHl0LEF0KXwwKStNYXRoLmltdWwoTXQsWnQpfDAsQT1BK01hdGguaW11bChNdCxBdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LHN0KXwwLG09KG09bStNYXRoLmltdWwocnQsenQpfDApK01hdGguaW11bChRZSxzdCl8MCxBPUErTWF0aC5pbXVsKFFlLHp0KXwwLEU9RStNYXRoLmltdWwoa2UsV2Up''@;'; put 'put ''fDAsbT0obT1tK01hdGguaW11bChrZSxUdCl8MCkrTWF0aC5pbXVsKEFlLFdlKXwwLEE9QStNYXRoLmltdWwoQWUsVHQpfDAsRT1FK01hdGguaW11bChSZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHh0KXwwKStNYXRoLmltdWwoSWUsaHQpfDAsQT1BK01hdGguaW11bChJZSx4dCl8MCxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKGplLG9uKXwwLG09KG09bStNYXRoLmltdWwoamUsanQpfDApK01hdGguaW11bChEZSxvbil8MCxBPUErTWF0aC5pbXVsKERlLGp0KXwwLEU9RStNYXRoLmltdWwoTWUsY24pfDAsbT0obT1tK01hdGguaW11bChNZSxwbil8MCkrTWF0aC5pbXVsKHZlLGNuKXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwodmUscG4pfDA7dmFyIE9yPShqKyhFPUUrTWF0aC5pbXVsKFVlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoVWUsZW4pfDApK01hdGguaW11bChKZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChKZSxlbil8MCkrKG0+Pj4xMyl8MCkrKE9yPj4+''@;'; put 'put ''MjYpfDAsT3ImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGZuKSxtPShtPU1hdGguaW11bChIZSxmdCkpK01hdGguaW11bChkdCxmbil8MCxBPU1hdGguaW11bChkdCxmdCksRT1FK01hdGguaW11bChpdCxadCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LEF0KXwwKStNYXRoLmltdWwoJGUsWnQp''@;'; put 'put ''fDAsQT1BK01hdGguaW11bCgkZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoeXQsenQpfDApK01hdGguaW11bChNdCxzdCl8MCxBPUErTWF0aC5pbXVsKE10LHp0KXwwLEU9RStNYXRoLmltdWwocnQsV2UpfDAsbT0obT1tK01hdGguaW11bChydCxUdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKFFlLFdlKXwwLEE9QStNYXRoLmltdWwoUWUsVHQpfDAsRT1FK01hdGguaW11bChrZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHh0KXwwKStNYXRoLmltdWwoQWUsaHQpfDAsQT1BK01hdGguaW11bChBZSx4dCl8MCxFPUUrTWF0aC5pbXVsKFJlLG9uKXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwoUmUsanQpfDApK01hdGguaW11bChJZSxvbil8MCxBPUErTWF0aC5pbXVsKEllLGp0KXwwLEU9RStNYXRoLmltdWwoamUsY24pfDAsbT0obT1tK01hdGguaW11bChqZSxwbil8MCkrTWF0aC5pbXVsKERlLGNuKXwwLEE9QStNYXRoLmltdWwoRGUscG4pfDA7dmFyIFlpPShq''@;'; put 'put ''KyhFPUUrTWF0aC5pbXVsKE1lLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoTWUsZW4pfDApK01hdGguaW11bCh2ZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCh2ZSxlbil8MCkrKG0+Pj4xMyl8MCkrKFlpPj4+MjYpfDAsWWkmPTY3MTA4ODYzLEU9TWF0aC5p''@;'; put 'put ''bXVsKEhlLFp0KSxtPShtPU1hdGguaW11bChIZSxBdCkpK01hdGguaW11bChkdCxadCl8MCxBPU1hdGguaW11bChkdCxBdCksRT1FK01hdGguaW11bChpdCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHp0KXwwKStNYXRoLmltdWwoJGUsc3QpfDAsQT1BK01hdGguaW11bCgkZSx6dCl8MCxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKHl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoeXQsVHQpfDApK01hdGguaW11bChNdCxXZSl8MCxBPUErTWF0aC5pbXVsKE10LFR0KXwwLEU9RStNYXRoLmltdWwocnQsaHQpfDAsbT0obT1tK01hdGguaW11bChydCx4dCl8MCkrTWF0aC5pbXVsKFFlLGh0KXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoUWUseHQpfDAsRT1FK01hdGguaW11bChrZSxvbil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLGp0KXwwKStNYXRoLmltdWwoQWUsb24pfDAsQT1BK01hdGguaW11bChBZSxqdCl8MCxFPUUrTWF0aC5pbXVsKFJlLGNuKXwwLG09KG09bStNYXRoLmltdWwoUmUscG4pfDApK01hdGgu''@;'; put 'put ''aW11bChJZSxjbil8MCxBPUErTWF0aC5pbXVsKEllLHBuKXwwO3ZhciBnbz0oaisoRT1FK01hdGguaW11bChqZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGplLGVuKXwwKStNYXRoLmltdWwoRGUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoRGUsZW4pfDAp''@;'; put 'put ''KyhtPj4+MTMpfDApKyhnbz4+PjI2KXwwLGdvJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxzdCksbT0obT1NYXRoLmltdWwoSGUsenQpKStNYXRoLmltdWwoZHQsc3QpfDAsQT1NYXRoLmltdWwoZHQsenQpLEU9RStNYXRoLmltdWwoaXQsV2UpfDAsbT0obT1tK01hdGguaW11bChpdCxUdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKCRlLFdlKXwwLEE9QStNYXRoLmltdWwoJGUsVHQpfDAsRT1FK01hdGguaW11bCh5dCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHh0KXwwKStNYXRoLmltdWwoTXQsaHQpfDAsQT1BK01hdGguaW11bChNdCx4dCl8MCxFPUUrTWF0aC5pbXVsKHJ0LG9uKXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwocnQsanQpfDApK01hdGguaW11bChRZSxvbil8MCxBPUErTWF0aC5pbXVsKFFlLGp0KXwwLEU9RStNYXRoLmltdWwoa2UsY24pfDAsbT0obT1tK01hdGguaW11bChrZSxwbil8MCkrTWF0aC5pbXVsKEFlLGNuKXwwLEE9QStNYXRoLmltdWwoQWUscG4pfDA7dmFyIGVyPShq''@;'; put 'put ''KyhFPUUrTWF0aC5pbXVsKFJlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoUmUsZW4pfDApK01hdGguaW11bChJZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChJZSxlbil8MCkrKG0+Pj4xMyl8MCkrKGVyPj4+MjYpfDAsZXImPTY3MTA4ODYzLEU9TWF0aC5p''@;'; put 'put ''bXVsKEhlLFdlKSxtPShtPU1hdGguaW11bChIZSxUdCkpK01hdGguaW11bChkdCxXZSl8MCxBPU1hdGguaW11bChkdCxUdCksRT1FK01hdGguaW11bChpdCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHh0KXwwKStNYXRoLmltdWwoJGUsaHQpfDAsQT1BK01hdGguaW11bCgkZSx4dCl8MCxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKHl0LG9uKXwwLG09KG09bStNYXRoLmltdWwoeXQsanQpfDApK01hdGguaW11bChNdCxvbil8MCxBPUErTWF0aC5pbXVsKE10LGp0KXwwLEU9RStNYXRoLmltdWwocnQsY24pfDAsbT0obT1tK01hdGguaW11bChydCxwbil8MCkrTWF0aC5pbXVsKFFlLGNuKXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoUWUscG4pfDA7dmFyIGNvPShqKyhFPUUrTWF0aC5pbXVsKGtlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoa2UsZW4pfDApK01hdGguaW11bChBZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChBZSxlbil8MCkrKG0+Pj4xMyl8MCkrKGNvPj4+''@;'; put 'put ''MjYpfDAsY28mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGh0KSxtPShtPU1hdGguaW11bChIZSx4dCkpK01hdGguaW11bChkdCxodCl8MCxBPU1hdGguaW11bChkdCx4dCksRT1FK01hdGguaW11bChpdCxvbil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGp0KXwwKStNYXRoLmltdWwoJGUsb24p''@;'; put 'put ''fDAsQT1BK01hdGguaW11bCgkZSxqdCl8MCxFPUUrTWF0aC5pbXVsKHl0LGNuKXwwLG09KG09bStNYXRoLmltdWwoeXQscG4pfDApK01hdGguaW11bChNdCxjbil8MCxBPUErTWF0aC5pbXVsKE10LHBuKXwwO3ZhciBfbz0oaisoRT1FK01hdGguaW11bChydCxYdCl8MCl8MCkrKCg4MTkxJiht''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKHJ0LGVuKXwwKStNYXRoLmltdWwoUWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoUWUsZW4pfDApKyhtPj4+MTMpfDApKyhfbz4+PjI2KXwwLF9vJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxvbiksbT0obT1NYXRoLmltdWwoSGUsanQpKStNYXRo''@;'; put 'put ''LmltdWwoZHQsb24pfDAsQT1NYXRoLmltdWwoZHQsanQpLEU9RStNYXRoLmltdWwoaXQsY24pfDAsbT0obT1tK01hdGguaW11bChpdCxwbil8MCkrTWF0aC5pbXVsKCRlLGNuKXwwLEE9QStNYXRoLmltdWwoJGUscG4pfDA7dmFyIE9vPShqKyhFPUUrTWF0aC5pbXVsKHl0LFh0KXwwKXwwKSso''@;'; put 'put ''KDgxOTEmKG09KG09bStNYXRoLmltdWwoeXQsZW4pfDApK01hdGguaW11bChNdCxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChNdCxlbil8MCkrKG0+Pj4xMyl8MCkrKE9vPj4+MjYpfDAsT28mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGNuKSxtPShtPU1hdGguaW11bChIZSxw''@;'; put 'put ''bikpK01hdGguaW11bChkdCxjbil8MCxBPU1hdGguaW11bChkdCxwbik7dmFyIEhvPShqKyhFPUUrTWF0aC5pbXVsKGl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoaXQsZW4pfDApK01hdGguaW11bCgkZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCgkZSxl''@;'; put 'put ''bil8MCkrKG0+Pj4xMyl8MCkrKEhvPj4+MjYpfDAsSG8mPTY3MTA4ODYzO3ZhciBlaT0oaisoRT1NYXRoLmltdWwoSGUsWHQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKEhlLGVuKSkrTWF0aC5pbXVsKGR0LFh0KXwwKSk8PDEzKXwwO3JldHVybiBqPSgoQT1NYXRoLmltdWwoZHQsZW4p''@;'; put 'put ''KSsobT4+PjEzKXwwKSsoZWk+Pj4yNil8MCxlaSY9NjcxMDg4NjMsSFswXT1obyxIWzFdPU1pLEhbMl09cHIsSFszXT1XbixIWzRdPUtpLEhbNV09UXIsSFs2XT1KcixIWzddPUJpLEhbOF09VmksSFs5XT1JbyxIWzEwXT1PcixIWzExXT1ZaSxIWzEyXT1nbyxIWzEzXT1lcixIWzE0XT1jbyxI''@;'; put 'put ''WzE1XT1fbyxIWzE2XT1PbyxIWzE3XT1IbyxIWzE4XT1laSwwIT09aiYmKEhbMTldPWoseC5sZW5ndGgrKykseH07ZnVuY3Rpb24gZWUoVixwLGIpe3JldHVybihuZXcgSikubXVscChWLHAsYil9ZnVuY3Rpb24gSihWLHApe3RoaXMueD1WLHRoaXMueT1wfU1hdGguaW11bHx8KFk9Vyksdy5w''@;'; put 'put ''cm90b3R5cGUubXVsVG89ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMubGVuZ3RoK3AubGVuZ3RoO3JldHVybiB4PTEwPT09dGhpcy5sZW5ndGgmJjEwPT09cC5sZW5ndGg/WSh0aGlzLHAsYik6Qzw2Mz9XKHRoaXMscCxiKTpDPDEwMjQ/ZnVuY3Rpb24gWChWLHAsYil7Yi5uZWdhdGl2ZT1w''@;'; put 'put ''Lm5lZ2F0aXZlXlYubmVnYXRpdmUsYi5sZW5ndGg9Vi5sZW5ndGgrcC5sZW5ndGg7Zm9yKHZhciB4PTAsQz0wLFQ9MDtUPGIubGVuZ3RoLTE7VCsrKXt2YXIgSD1DO0M9MDtmb3IodmFyIGo9NjcxMDg4NjMmeCxFPU1hdGgubWluKFQscC5sZW5ndGgtMSksbT1NYXRoLm1heCgwLFQtVi5sZW5n''@;'; put 'put ''dGgrMSk7bTw9RTttKyspe3ZhciBzZT0oMHxWLndvcmRzW1QtbV0pKigwfHAud29yZHNbbV0pLHdlPTY3MTA4ODYzJnNlO2o9NjcxMDg4NjMmKHdlPXdlK2p8MCksQys9KEg9KEg9SCsoc2UvNjcxMDg4NjR8MCl8MCkrKHdlPj4+MjYpfDApPj4+MjYsSCY9NjcxMDg4NjN9Yi53b3Jkc1tUXT1q''@;'; put 'put ''LHg9SCxIPUN9cmV0dXJuIDAhPT14P2Iud29yZHNbVF09eDpiLmxlbmd0aC0tLGIuc3RyaXAoKX0odGhpcyxwLGIpOmVlKHRoaXMscCxiKSx4fSxKLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD13LnByb3RvdHlwZS5fY291bnRCaXRzKHAp''@;'; put 'put ''LTEsQz0wO0M8cDtDKyspYltDXT10aGlzLnJldkJpbihDLHgscCk7cmV0dXJuIGJ9LEoucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihwLGIseCl7aWYoMD09PXB8fHA9PT14LTEpcmV0dXJuIHA7Zm9yKHZhciBDPTAsVD0wO1Q8YjtUKyspQ3w9KDEmcCk8PGItVC0xLHA+Pj0xO3JldHVybiBD''@;'; put 'put ''fSxKLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXtmb3IodmFyIGo9MDtqPEg7aisrKUNbal09YltwW2pdXSxUW2pdPXhbcFtqXV19LEoucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihwLGIseCxDLFQsSCl7dGhpcy5wZXJtdXRlKEgscCxiLHgsQyxUKTtmb3Io''@;'; put 'put ''dmFyIGo9MTtqPFQ7ajw8PTEpZm9yKHZhciBFPWo8PDEsbT1NYXRoLmNvcygyKk1hdGguUEkvRSksQT1NYXRoLnNpbigyKk1hdGguUEkvRSksb2U9MDtvZTxUO29lKz1FKWZvcih2YXIgdGU9bSxzZT1BLHdlPTA7d2U8ajt3ZSsrKXt2YXIgVWU9eFtvZSt3ZV0sSmU9Q1tvZSt3ZV0sYXQ9eFtv''@;'; put 'put ''ZSt3ZStqXSxNZT1DW29lK3dlK2pdLHZlPXRlKmF0LXNlKk1lO01lPXRlKk1lK3NlKmF0LHhbb2Urd2VdPVVlKyhhdD12ZSksQ1tvZSt3ZV09SmUrTWUseFtvZSt3ZStqXT1VZS1hdCxDW29lK3dlK2pdPUplLU1lLHdlIT09RSYmKHZlPW0qdGUtQSpzZSxzZT1tKnNlK0EqdGUsdGU9dmUpfX0s''@;'; put 'put ''Si5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24ocCxiKXt2YXIgeD0xfE1hdGgubWF4KGIscCksQz0xJngsVD0wO2Zvcih4PXgvMnwwO3g7eD4+Pj0xKVQrKztyZXR1cm4gMTw8VCsxK0N9LEoucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihwLGIseCl7aWYoISh4PD0xKSlmb3Io''@;'; put 'put ''dmFyIEM9MDtDPHgvMjtDKyspe3ZhciBUPXBbQ107cFtDXT1wW3gtQy0xXSxwW3gtQy0xXT1ULFQ9YltDXSxiW0NdPS1iW3gtQy0xXSxiW3gtQy0xXT0tVH19LEoucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD0wLEM9MDtDPGIvMjtDKyspe3ZhciBUPTgx''@;'; put 'put ''OTIqTWF0aC5yb3VuZChwWzIqQysxXS9iKStNYXRoLnJvdW5kKHBbMipDXS9iKSt4O3BbQ109NjcxMDg4NjMmVCx4PVQ8NjcxMDg4NjQ/MDpULzY3MTA4ODY0fDB9cmV0dXJuIHB9LEoucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24ocCxiLHgsQyl7Zm9yKHZhciBUPTAsSD0wO0g8YjtI''@;'; put 'put ''KyspeFsyKkhdPTgxOTEmKFQrPTB8cFtIXSkseFsyKkgrMV09ODE5MSYoVD4+Pj0xMyksVD4+Pj0xMztmb3IoSD0yKmI7SDxDOysrSCl4W0hdPTA7ZygwPT09VCksZyghKC04MTkyJlQpKX0sSi5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbihwKXtmb3IodmFyIGI9bmV3IEFycmF5KHApLHg9MDt4''@;'; put 'put ''PHA7eCsrKWJbeF09MDtyZXR1cm4gYn0sSi5wcm90b3R5cGUubXVscD1mdW5jdGlvbihwLGIseCl7dmFyIEM9Mip0aGlzLmd1ZXNzTGVuMTNiKHAubGVuZ3RoLGIubGVuZ3RoKSxUPXRoaXMubWFrZVJCVChDKSxIPXRoaXMuc3R1YihDKSxqPW5ldyBBcnJheShDKSxFPW5ldyBBcnJheShDKSxt''@;'; put 'put ''PW5ldyBBcnJheShDKSxBPW5ldyBBcnJheShDKSxvZT1uZXcgQXJyYXkoQyksdGU9bmV3IEFycmF5KEMpLHNlPXgud29yZHM7c2UubGVuZ3RoPUMsdGhpcy5jb252ZXJ0MTNiKHAud29yZHMscC5sZW5ndGgsaixDKSx0aGlzLmNvbnZlcnQxM2IoYi53b3JkcyxiLmxlbmd0aCxBLEMpLHRoaXMu''@;'; put 'put ''dHJhbnNmb3JtKGosSCxFLG0sQyxUKSx0aGlzLnRyYW5zZm9ybShBLEgsb2UsdGUsQyxUKTtmb3IodmFyIHdlPTA7d2U8Qzt3ZSsrKXt2YXIgVWU9RVt3ZV0qb2Vbd2VdLW1bd2VdKnRlW3dlXTttW3dlXT1FW3dlXSp0ZVt3ZV0rbVt3ZV0qb2Vbd2VdLEVbd2VdPVVlfXJldHVybiB0aGlzLmNv''@;'; put 'put ''bmp1Z2F0ZShFLG0sQyksdGhpcy50cmFuc2Zvcm0oRSxtLHNlLEgsQyxUKSx0aGlzLmNvbmp1Z2F0ZShzZSxILEMpLHRoaXMubm9ybWFsaXplMTNiKHNlLEMpLHgubmVnYXRpdmU9cC5uZWdhdGl2ZV5iLm5lZ2F0aXZlLHgubGVuZ3RoPXAubGVuZ3RoK2IubGVuZ3RoLHguc3RyaXAoKX0sdy5w''@;'; put 'put ''cm90b3R5cGUubXVsPWZ1bmN0aW9uKHApe3ZhciBiPW5ldyB3KG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtwLmxlbmd0aCksdGhpcy5tdWxUbyhwLGIpfSx3LnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKHApe3ZhciBiPW5ldyB3KG51bGwpO3JldHVybiBiLndv''@;'; put 'put ''cmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtwLmxlbmd0aCksZWUodGhpcyxwLGIpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8ocCx0aGlzKX0sdy5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAp''@;'; put 'put ''LGcocDw2NzEwODg2NCk7Zm9yKHZhciBiPTAseD0wO3g8dGhpcy5sZW5ndGg7eCsrKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSpwLFQ9KDY3MTA4ODYzJkMpKyg2NzEwODg2MyZiKTtiPj49MjYsYis9Qy82NzEwODg2NHwwLGIrPVQ+Pj4yNix0aGlzLndvcmRzW3hdPTY3MTA4ODYzJlR9cmV0''@;'; put 'put ''dXJuIDAhPT1iJiYodGhpcy53b3Jkc1t4XT1iLHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLm11bG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihwKX0sdy5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSx3LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCl7dmFyIGI9ZnVuY3Rpb24gVShWKXtmb3IodmFyIHA9bmV3IEFycmF5KFYuYml0TGVuZ3RoKCkpLGI9MDtiPHAubGVuZ3RoO2IrKyl7dmFyIEM9YiUy''@;'; put 'put ''NjtwW2JdPShWLndvcmRzW2IvMjZ8MF0mMTw8Qyk+Pj5DfXJldHVybiBwfShwKTtpZigwPT09Yi5sZW5ndGgpcmV0dXJuIG5ldyB3KDEpO2Zvcih2YXIgeD10aGlzLEM9MDtDPGIubGVuZ3RoJiYwPT09YltDXTtDKysseD14LnNxcigpKTtpZigrK0M8Yi5sZW5ndGgpZm9yKHZhciBUPXguc3Fy''@;'; put 'put ''KCk7QzxiLmxlbmd0aDtDKyssVD1ULnNxcigpKTAhPT1iW0NdJiYoeD14Lm11bChUKSk7cmV0dXJuIHh9LHcucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIFQsYj1wJTI2LHg9KHAtYikvMjYsQz02NzEwODg2Mz4+PjI2LWI8PDI2''@;'; put 'put ''LWI7aWYoMCE9PWIpe3ZhciBIPTA7Zm9yKFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIGo9dGhpcy53b3Jkc1tUXSZDO3RoaXMud29yZHNbVF09KDB8dGhpcy53b3Jkc1tUXSktajw8YnxILEg9aj4+PjI2LWJ9SCYmKHRoaXMud29yZHNbVF09SCx0aGlzLmxlbmd0aCsrKX1pZigwIT09eCl7''@;'; put 'put ''Zm9yKFQ9dGhpcy5sZW5ndGgtMTtUPj0wO1QtLSl0aGlzLndvcmRzW1QreF09dGhpcy53b3Jkc1tUXTtmb3IoVD0wO1Q8eDtUKyspdGhpcy53b3Jkc1tUXT0wO3RoaXMubGVuZ3RoKz14fXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKHApe3JldHVybiBn''@;'; put 'put ''KDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihwKX0sdy5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKHAsYix4KXt2YXIgQztnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCksQz1iPyhiLWIlMjYpLzI2OjA7dmFyIFQ9cCUyNixIPU1hdGgubWluKChwLVQpLzI2LHRoaXMubGVuZ3Ro''@;'; put 'put ''KSxqPTY3MTA4ODYzXjY3MTA4ODYzPj4+VDw8VCxFPXg7aWYoQy09SCxDPU1hdGgubWF4KDAsQyksRSl7Zm9yKHZhciBtPTA7bTxIO20rKylFLndvcmRzW21dPXRoaXMud29yZHNbbV07RS5sZW5ndGg9SH1pZigwIT09SClpZih0aGlzLmxlbmd0aD5IKWZvcih0aGlzLmxlbmd0aC09SCxtPTA7''@;'; put 'put ''bTx0aGlzLmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT10aGlzLndvcmRzW20rSF07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgQT0wO2ZvcihtPXRoaXMubGVuZ3RoLTE7bT49MCYmKDAhPT1BfHxtPj1DKTttLS0pe3ZhciBvZT0wfHRoaXMud29yZHNbbV07dGhpcy53''@;'; put 'put ''b3Jkc1ttXT1BPDwyNi1UfG9lPj4+VCxBPW9lJmp9cmV0dXJuIEUmJjAhPT1BJiYoRS53b3Jkc1tFLmxlbmd0aCsrXT1BKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihwLGIs''@;'; 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 ''ZW5ndGg7QSsrKW0ud29yZHNbQV09MH12YXIgb2U9Qy5jbG9uZSgpLl9pc2hsbnN1Ym11bChULDEsRSk7MD09PW9lLm5lZ2F0aXZlJiYoQz1vZSxtJiYobS53b3Jkc1tFXT0xKSk7Zm9yKHZhciB0ZT1FLTE7dGU+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 ''MCksSD1uZXcgdygwKSxqPW5ldyB3KDEpLEU9MDtiLmlzRXZlbigpJiZ4LmlzRXZlbigpOyliLml1c2hybigxKSx4Lml1c2hybigxKSwrK0U7Zm9yKHZhciBtPXguY2xvbmUoKSxBPWIuY2xvbmUoKTshYi5pc1plcm8oKTspe2Zvcih2YXIgb2U9MCx0ZT0xOyEoYi53b3Jkc1swXSZ0ZSkmJm9l''@;'; put 'put ''PDI2Oysrb2UsdGU8PD0xKTtpZihvZT4wKWZvcihiLml1c2hybihvZSk7b2UtLSA+MDspKEMuaXNPZGQoKXx8VC5pc09kZCgpKSYmKEMuaWFkZChtKSxULmlzdWIoQSkpLEMuaXVzaHJuKDEpLFQuaXVzaHJuKDEpO2Zvcih2YXIgc2U9MCx3ZT0xOyEoeC53b3Jkc1swXSZ3ZSkmJnNlPDI2Oysr''@;'; put 'put ''c2Usd2U8PD0xKTtpZihzZT4wKWZvcih4Lml1c2hybihzZSk7c2UtLSA+MDspKEguaXNPZGQoKXx8ai5pc09kZCgpKSYmKEguaWFkZChtKSxqLmlzdWIoQSkpLEguaXVzaHJuKDEpLGouaXVzaHJuKDEpO2IuY21wKHgpPj0wPyhiLmlzdWIoeCksQy5pc3ViKEgpLFQuaXN1YihqKSk6KHguaXN1''@;'; put 'put ''YihiKSxILmlzdWIoQyksai5pc3ViKFQpKX1yZXR1cm57YTpILGI6aixnY2Q6eC5pdXNobG4oRSl9fSx3LnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSksZyghcC5pc1plcm8oKSk7dmFyIG9lLGI9dGhpcyx4PXAuY2xvbmUoKTtiPTAhPT1iLm5lZ2F0aXZl''@;'; put 'put ''P2IudW1vZChwKTpiLmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD14LmNsb25lKCk7Yi5jbXBuKDEpPjAmJnguY21wbigxKT4wOyl7Zm9yKHZhciBqPTAsRT0xOyEoYi53b3Jkc1swXSZFKSYmajwyNjsrK2osRTw8PTEpO2lmKGo+MClmb3IoYi5pdXNocm4oaik7ai0t''@;'; put 'put ''ID4wOylDLmlzT2RkKCkmJkMuaWFkZChIKSxDLml1c2hybigxKTtmb3IodmFyIG09MCxBPTE7ISh4LndvcmRzWzBdJkEpJiZtPDI2OysrbSxBPDw9MSk7aWYobT4wKWZvcih4Lml1c2hybihtKTttLS0gPjA7KVQuaXNPZGQoKSYmVC5pYWRkKEgpLFQuaXVzaHJuKDEpO2IuY21wKHgpPj0wPyhi''@;'; put 'put ''LmlzdWIoeCksQy5pc3ViKFQpKTooeC5pc3ViKGIpLFQuaXN1YihDKSl9cmV0dXJuKG9lPTA9PT1iLmNtcG4oMSk/QzpUKS5jbXBuKDApPDAmJm9lLmlhZGQocCksb2V9LHcucHJvdG90eXBlLmdjZD1mdW5jdGlvbihwKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBwLmFicygpO2lmKHAuaXNa''@;'; 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 ''KHRoaXMucmVkJiYhcC5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMscCl9O3ZhciByZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIGllKFYscCl7dGhpcy5uYW1lPVYs''@;'; 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 ''aW9uKHApe2lmKHJlW3BdKXJldHVybiByZVtwXTt2YXIgYjtpZigiazI1NiI9PT1wKWI9bmV3IGxlO2Vsc2UgaWYoInAyMjQiPT09cCliPW5ldyBtZTtlbHNlIGlmKCJwMTkyIj09PXApYj1uZXcgX2U7ZWxzZXtpZigicDI1NTE5IiE9PXApdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1l''@;'; put 'put ''ICIrcCk7Yj1uZXcgVGV9cmV0dXJuIHJlW3BdPWIsYn0sU2UucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhwLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5w''@;'; 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 ''cy5tLmJpdExlbmd0aCgpO2ZvcihtPW5ldyB3KDIqbSptKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cobSxFKS5jbXAoaik7KW0ucmVkSUFkZChqKTtmb3IodmFyIEE9dGhpcy5wb3cobSxDKSxvZT10aGlzLnBvdyhwLEMuYWRkbigxKS5pdXNocm4oMSkpLHRlPXRoaXMucG93KHAsQyksc2U9''@;'; put 'put ''VDswIT09dGUuY21wKEgpOyl7Zm9yKHZhciB3ZT10ZSxVZT0wOzAhPT13ZS5jbXAoSCk7VWUrKyl3ZT13ZS5yZWRTcXIoKTtnKFVlPHNlKTt2YXIgSmU9dGhpcy5wb3coQSxuZXcgdygxKS5pdXNobG4oc2UtVWUtMSkpO29lPW9lLnJlZE11bChKZSksQT1KZS5yZWRTcXIoKSx0ZT10ZS5yZWRN''@;'; put 'put ''dWwoQSksc2U9VWV9cmV0dXJuIG9lfSxTZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXt2YXIgYj1wLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09Yi5uZWdhdGl2ZT8oYi5uZWdhdGl2ZT0wLHRoaXMuaW1vZChiKS5yZWROZWcoKSk6dGhpcy5pbW9kKGIpfSxTZS5wcm90b3R5cGUucG93''@;'; put 'put ''PWZ1bmN0aW9uKHAsYil7aWYoYi5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMSkudG9SZWQodGhpcyk7aWYoMD09PWIuY21wbigxKSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBDPW5ldyBBcnJheSgxNik7Q1swXT1uZXcgdygxKS50b1JlZCh0aGlzKSxDWzFdPXA7Zm9yKHZhciBUPTI7VDxDLmxlbmd0''@;'; put 'put ''aDtUKyspQ1tUXT10aGlzLm11bChDW1QtMV0scCk7dmFyIEg9Q1swXSxqPTAsRT0wLG09Yi5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PW0mJihtPTI2KSxUPWIubGVuZ3RoLTE7VD49MDtULS0pe2Zvcih2YXIgQT1iLndvcmRzW1RdLG9lPW0tMTtvZT49MDtvZS0tKXt2YXIgdGU9QT4+b2UmMTtI''@;'; put 'put ''IT09Q1swXSYmKEg9dGhpcy5zcXIoSCkpLDAhPT10ZXx8MCE9PWo/KGo8PD0xLGp8PXRlLCg0PT0rK0V8fDA9PT1UJiYwPT09b2UpJiYoSD10aGlzLm11bChILENbal0pLEU9MCxqPTApKTpFPTB9bT0yNn1yZXR1cm4gSH0sU2UucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXt2YXIg''@;'; put 'put ''Yj1wLnVtb2QodGhpcy5tKTtyZXR1cm4gYj09PXA/Yi5jbG9uZSgpOmJ9LFNlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj1wLmNsb25lKCk7cmV0dXJuIGIucmVkPW51bGwsYn0sdy5tb250PWZ1bmN0aW9uKHApe3JldHVybiBuZXcgemUocCl9LEIoemUsU2UpLHpl''@;'; put 'put ''LnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW1vZChwLnVzaGxuKHRoaXMuc2hpZnQpKX0semUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHApe3ZhciBiPXRoaXMuaW1vZChwLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gYi5yZWQ9bnVsbCxifSx6''@;'; put 'put ''ZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIHAud29yZHNbMF09MCxwLmxlbmd0aD0xLHA7dmFyIHg9cC5pbXVsKGIpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVs''@;'; put 'put ''KHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LHplLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCxi''@;'; put 'put ''KXtpZihwLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBuZXcgdygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHg9cC5tdWwoYiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhp''@;'; put 'put ''cy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0semUucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW1vZChwLl9pbnZtcCh0aGlz''@;'; put 'put ''Lm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0odWU9Xy5ubWQodWUpLHRoaXMpfSw5MjgyOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNDE1NSkseT1fKDUxMDgpO2Z1bmN0aW9uIGcoVmUpe3JldHVybihnPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1i''@;'; put 'put ''b2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGtlKXtyZXR1cm4gdHlwZW9mIGtlfTpmdW5jdGlvbihrZSl7cmV0dXJuIGtlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZrZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYma2UhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wi''@;'; put 'put ''OnR5cGVvZiBrZX0pKFZlKX1mdW5jdGlvbiBCKFZlLGtlKXtmb3IodmFyIEFlPTA7QWU8a2UubGVuZ3RoO0FlKyspe3ZhciBfdD1rZVtBZV07X3QuZW51bWVyYWJsZT1fdC5lbnVtZXJhYmxlfHwhMSxfdC5jb25maWd1cmFibGU9ITAsInZhbHVlImluIF90JiYoX3Qud3JpdGFibGU9ITApLE9i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShWZSxQKF90LmtleSksX3QpfX1mdW5jdGlvbiB3KFZlLGtlLEFlKXtyZXR1cm4ga2UmJkIoVmUucHJvdG90eXBlLGtlKSxBZSYmQihWZSxBZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFZlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLFZlfWZ1bmN0aW9u''@;'; put 'put ''IFAoVmUpe3ZhciBrZT1mdW5jdGlvbiBGKFZlLGtlKXtpZigib2JqZWN0IiE9PWcoVmUpfHxudWxsPT09VmUpcmV0dXJuIFZlO3ZhciBBZT1WZVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PUFlKXt2YXIgX3Q9QWUuY2FsbChWZSxrZXx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9''@;'; put 'put ''PWcoX3QpKXJldHVybiBfdDt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PWtlP1N0cmluZzpOdW1iZXIpKFZlKX0oVmUsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09ZyhrZSk/a2U6''@;'; put 'put ''U3RyaW5nKGtlKX12YXIgemUsVixOPV8oMjEzNikuY29kZXMsTD1OLkVSUl9BTUJJR1VPVVNfQVJHVU1FTlQsSz1OLkVSUl9JTlZBTElEX0FSR19UWVBFLFU9Ti5FUlJfSU5WQUxJRF9BUkdfVkFMVUUsVz1OLkVSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSxZPU4uRVJSX01JU1NJTkdfQVJHUyxY''@;'; put 'put ''PV8oNTk2MSksSj1fKDk1MzkpLmluc3BlY3QscmU9Xyg5NTM5KS50eXBlcyxpZT1yZS5pc1Byb21pc2UsbGU9cmUuaXNSZWdFeHAsbWU9Xyg4MTYyKSgpLF9lPV8oNTYyNCkoKSxUZT1fKDE5MjQpKCJSZWdFeHAucHJvdG90eXBlLnRlc3QiKTtmdW5jdGlvbiBDKCl7dmFyIFZlPV8oOTE1OCk7''@;'; put 'put ''emU9VmUuaXNEZWVwRXF1YWwsVj1WZS5pc0RlZXBTdHJpY3RFcXVhbH12YXIgRT0hMSxtPXVlLmV4cG9ydHM9d2UsQT17fTtmdW5jdGlvbiBvZShWZSl7dGhyb3cgVmUubWVzc2FnZSBpbnN0YW5jZW9mIEVycm9yP1ZlLm1lc3NhZ2U6bmV3IFgoVmUpfWZ1bmN0aW9uIHNlKFZlLGtlLEFlLF90''@;'; put 'put ''KXtpZighQWUpe3ZhciBydD0hMTtpZigwPT09a2UpcnQ9ITAsX3Q9Ik5vIHZhbHVlIGFyZ3VtZW50IHBhc3NlZCB0byBgYXNzZXJ0Lm9rKClgIjtlbHNlIGlmKF90IGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgX3Q7dmFyIFFlPW5ldyBYKHthY3R1YWw6QWUsZXhwZWN0ZWQ6ITAsbWVzc2FnZTpf''@;'; put 'put ''dCxvcGVyYXRvcjoiPT0iLHN0YWNrU3RhcnRGbjpWZX0pO3Rocm93IFFlLmdlbmVyYXRlZE1lc3NhZ2U9cnQsUWV9fWZ1bmN0aW9uIHdlKCl7Zm9yKHZhciBWZT1hcmd1bWVudHMubGVuZ3RoLGtlPW5ldyBBcnJheShWZSksQWU9MDtBZTxWZTtBZSsrKWtlW0FlXT1hcmd1bWVudHNbQWVdO3Nl''@;'; put 'put ''LmFwcGx5KHZvaWQgMCxbd2Usa2UubGVuZ3RoXS5jb25jYXQoa2UpKX1tLmZhaWw9ZnVuY3Rpb24gdGUoVmUsa2UsQWUsX3QscnQpe3ZhciBkbixRZT1hcmd1bWVudHMubGVuZ3RoO2lmKDA9PT1RZT9kbj0iRmFpbGVkIjoxPT09UWU/KEFlPVZlLFZlPXZvaWQgMCk6KCExPT09RSYmKEU9ITAs''@;'; put 'put ''KEkuZW1pdFdhcm5pbmc/SS5lbWl0V2FybmluZzp5Lndhcm4uYmluZCh5KSkoImFzc2VydC5mYWlsKCkgd2l0aCBtb3JlIHRoYW4gb25lIGFyZ3VtZW50IGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgYXNzZXJ0LnN0cmljdEVxdWFsKCkgaW5zdGVhZCBvciBvbmx5IHBhc3MgYSBtZXNzYWdl''@;'; put 'put ''LiIsIkRlcHJlY2F0aW9uV2FybmluZyIsIkRFUDAwOTQiKSksMj09PVFlJiYoX3Q9IiE9IikpLEFlIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgQWU7dmFyIE10PXthY3R1YWw6VmUsZXhwZWN0ZWQ6a2Usb3BlcmF0b3I6dm9pZCAwPT09X3Q/ImZhaWwiOl90LHN0YWNrU3RhcnRGbjpydHx8dGV9''@;'; put 'put ''O3ZvaWQgMCE9PUFlJiYoTXQubWVzc2FnZT1BZSk7dmFyIER0PW5ldyBYKE10KTt0aHJvdyBkbiYmKER0Lm1lc3NhZ2U9ZG4sRHQuZ2VuZXJhdGVkTWVzc2FnZT0hMCksRHR9LG0uQXNzZXJ0aW9uRXJyb3I9WCxtLm9rPXdlLG0uZXF1YWw9ZnVuY3Rpb24gVmUoa2UsQWUsX3Qpe2lmKGFyZ3Vt''@;'; put 'put ''ZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgWSgiYWN0dWFsIiwiZXhwZWN0ZWQiKTtrZSE9QWUmJm9lKHthY3R1YWw6a2UsZXhwZWN0ZWQ6QWUsbWVzc2FnZTpfdCxvcGVyYXRvcjoiPT0iLHN0YWNrU3RhcnRGbjpWZX0pfSxtLm5vdEVxdWFsPWZ1bmN0aW9uIFZlKGtlLEFlLF90KXtpZihhcmd1''@;'; put 'put ''bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFkoImFjdHVhbCIsImV4cGVjdGVkIik7a2U9PUFlJiZvZSh7YWN0dWFsOmtlLGV4cGVjdGVkOkFlLG1lc3NhZ2U6X3Qsb3BlcmF0b3I6IiE9IixzdGFja1N0YXJ0Rm46VmV9KX0sbS5kZWVwRXF1YWw9ZnVuY3Rpb24gVmUoa2UsQWUsX3Qpe2lmKGFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgWSgiYWN0dWFsIiwiZXhwZWN0ZWQiKTt2b2lkIDA9PT16ZSYmQygpLHplKGtlLEFlKXx8b2Uoe2FjdHVhbDprZSxleHBlY3RlZDpBZSxtZXNzYWdlOl90LG9wZXJhdG9yOiJkZWVwRXF1YWwiLHN0YWNrU3RhcnRGbjpWZX0pfSxtLm5vdERlZXBF''@;'; put 'put ''cXVhbD1mdW5jdGlvbiBWZShrZSxBZSxfdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBZKCJhY3R1YWwiLCJleHBlY3RlZCIpO3ZvaWQgMD09PXplJiZDKCksemUoa2UsQWUpJiZvZSh7YWN0dWFsOmtlLGV4cGVjdGVkOkFlLG1lc3NhZ2U6X3Qsb3BlcmF0b3I6Im5vdERlZXBF''@;'; put 'put ''cXVhbCIsc3RhY2tTdGFydEZuOlZlfSl9LG0uZGVlcFN0cmljdEVxdWFsPWZ1bmN0aW9uIFZlKGtlLEFlLF90KXtpZihhcmd1bWVudHMubGVuZ3RoPDIpdGhyb3cgbmV3IFkoImFjdHVhbCIsImV4cGVjdGVkIik7dm9pZCAwPT09emUmJkMoKSxWKGtlLEFlKXx8b2Uoe2FjdHVhbDprZSxleHBl''@;'; put 'put ''Y3RlZDpBZSxtZXNzYWdlOl90LG9wZXJhdG9yOiJkZWVwU3RyaWN0RXF1YWwiLHN0YWNrU3RhcnRGbjpWZX0pfSxtLm5vdERlZXBTdHJpY3RFcXVhbD1mdW5jdGlvbiBVZShWZSxrZSxBZSl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXRocm93IG5ldyBZKCJhY3R1YWwiLCJleHBlY3RlZCIpO3Zv''@;'; put 'put ''aWQgMD09PXplJiZDKCksVihWZSxrZSkmJm9lKHthY3R1YWw6VmUsZXhwZWN0ZWQ6a2UsbWVzc2FnZTpBZSxvcGVyYXRvcjoibm90RGVlcFN0cmljdEVxdWFsIixzdGFja1N0YXJ0Rm46VWV9KX0sbS5zdHJpY3RFcXVhbD1mdW5jdGlvbiBWZShrZSxBZSxfdCl7aWYoYXJndW1lbnRzLmxlbmd0''@;'; put 'put ''aDwyKXRocm93IG5ldyBZKCJhY3R1YWwiLCJleHBlY3RlZCIpO19lKGtlLEFlKXx8b2Uoe2FjdHVhbDprZSxleHBlY3RlZDpBZSxtZXNzYWdlOl90LG9wZXJhdG9yOiJzdHJpY3RFcXVhbCIsc3RhY2tTdGFydEZuOlZlfSl9LG0ubm90U3RyaWN0RXF1YWw9ZnVuY3Rpb24gVmUoa2UsQWUsX3Qp''@;'; put 'put ''e2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil0aHJvdyBuZXcgWSgiYWN0dWFsIiwiZXhwZWN0ZWQiKTtfZShrZSxBZSkmJm9lKHthY3R1YWw6a2UsZXhwZWN0ZWQ6QWUsbWVzc2FnZTpfdCxvcGVyYXRvcjoibm90U3RyaWN0RXF1YWwiLHN0YWNrU3RhcnRGbjpWZX0pfTt2YXIgSmU9dyhmdW5jdGlv''@;'; put 'put ''biBWZShrZSxBZSxfdCl7dmFyIHJ0PXRoaXM7KGZ1bmN0aW9uIE8oVmUsa2Upe2lmKCEoVmUgaW5zdGFuY2VvZiBrZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLFZlKSxBZS5mb3JFYWNoKGZ1bmN0aW9uKFFlKXtRZSBp''@;'; put 'put ''biBrZSYmKHJ0W1FlXT12b2lkIDAhPT1fdCYmInN0cmluZyI9PXR5cGVvZiBfdFtRZV0mJmxlKGtlW1FlXSkmJlRlKGtlW1FlXSxfdFtRZV0pP190W1FlXTprZVtRZV0pfSl9KTtmdW5jdGlvbiBNZShWZSxrZSxBZSxfdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGtlKXtpZihsZShrZSkpcmV0''@;'; put 'put ''dXJuIFRlKGtlLFZlKTtpZigyPT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgSygiZXhwZWN0ZWQiLFsiRnVuY3Rpb24iLCJSZWdFeHAiXSxrZSk7aWYoIm9iamVjdCIhPT1nKFZlKXx8bnVsbD09PVZlKXt2YXIgcnQ9bmV3IFgoe2FjdHVhbDpWZSxleHBlY3RlZDprZSxtZXNzYWdlOkFl''@;'; put 'put ''LG9wZXJhdG9yOiJkZWVwU3RyaWN0RXF1YWwiLHN0YWNrU3RhcnRGbjpfdH0pO3Rocm93IHJ0Lm9wZXJhdG9yPV90Lm5hbWUscnR9dmFyIFFlPU9iamVjdC5rZXlzKGtlKTtpZihrZSBpbnN0YW5jZW9mIEVycm9yKVFlLnB1c2goIm5hbWUiLCJtZXNzYWdlIik7ZWxzZSBpZigwPT09UWUubGVu''@;'; put 'put ''Z3RoKXRocm93IG5ldyBVKCJlcnJvciIsa2UsIm1heSBub3QgYmUgYW4gZW1wdHkgb2JqZWN0Iik7cmV0dXJuIHZvaWQgMD09PXplJiZDKCksUWUuZm9yRWFjaChmdW5jdGlvbihkbil7InN0cmluZyI9PXR5cGVvZiBWZVtkbl0mJmxlKGtlW2RuXSkmJlRlKGtlW2RuXSxWZVtkbl0pfHxmdW5j''@;'; put 'put ''dGlvbiBhdChWZSxrZSxBZSxfdCxydCxRZSl7aWYoIShBZSBpbiBWZSl8fCFWKFZlW0FlXSxrZVtBZV0pKXtpZighX3Qpe3ZhciBkbj1uZXcgSmUoVmUscnQpLHl0PW5ldyBKZShrZSxydCxWZSksTXQ9bmV3IFgoe2FjdHVhbDpkbixleHBlY3RlZDp5dCxvcGVyYXRvcjoiZGVlcFN0cmljdEVx''@;'; put 'put ''dWFsIixzdGFja1N0YXJ0Rm46UWV9KTt0aHJvdyBNdC5hY3R1YWw9VmUsTXQuZXhwZWN0ZWQ9a2UsTXQub3BlcmF0b3I9UWUubmFtZSxNdH1vZSh7YWN0dWFsOlZlLGV4cGVjdGVkOmtlLG1lc3NhZ2U6X3Qsb3BlcmF0b3I6UWUubmFtZSxzdGFja1N0YXJ0Rm46UWV9KX19KFZlLGtlLGRuLEFl''@;'; put 'put ''LFFlLF90KX0pLCEwfXJldHVybiB2b2lkIDAhPT1rZS5wcm90b3R5cGUmJlZlIGluc3RhbmNlb2Yga2V8fCFFcnJvci5pc1Byb3RvdHlwZU9mKGtlKSYmITA9PT1rZS5jYWxsKHt9LFZlKX1mdW5jdGlvbiB2ZShWZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFZlKXRocm93IG5ldyBLKCJmbiIs''@;'; put 'put ''IkZ1bmN0aW9uIixWZSk7dHJ5e1ZlKCl9Y2F0Y2goa2Upe3JldHVybiBrZX1yZXR1cm4gQX1mdW5jdGlvbiBYZShWZSl7cmV0dXJuIGllKFZlKXx8bnVsbCE9PVZlJiYib2JqZWN0Ij09PWcoVmUpJiYiZnVuY3Rpb24iPT10eXBlb2YgVmUudGhlbiYmImZ1bmN0aW9uIj09dHlwZW9mIFZlLmNh''@;'; put 'put ''dGNofWZ1bmN0aW9uIGplKFZlKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3ZhciBrZTtpZigiZnVuY3Rpb24iPT10eXBlb2YgVmUpe2lmKCFYZShrZT1WZSgpKSl0aHJvdyBuZXcgVygiaW5zdGFuY2Ugb2YgUHJvbWlzZSIsInByb21pc2VGbiIsa2UpfWVsc2V7''@;'; put 'put ''aWYoIVhlKFZlKSl0aHJvdyBuZXcgSygicHJvbWlzZUZuIixbIkZ1bmN0aW9uIiwiUHJvbWlzZSJdLFZlKTtrZT1WZX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbigpe3JldHVybiBrZX0pLnRoZW4oZnVuY3Rpb24oKXtyZXR1cm4gQX0pLmNhdGNoKGZ1bmN0aW9uKEFl''@;'; put 'put ''KXtyZXR1cm4gQWV9KX0pfWZ1bmN0aW9uIERlKFZlLGtlLEFlLF90KXtpZigic3RyaW5nIj09dHlwZW9mIEFlKXtpZig0PT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgSygiZXJyb3IiLFsiT2JqZWN0IiwiRXJyb3IiLCJGdW5jdGlvbiIsIlJlZ0V4cCJdLEFlKTtpZigib2JqZWN0Ij09''@;'; put 'put ''PWcoa2UpJiZudWxsIT09a2Upe2lmKGtlLm1lc3NhZ2U9PT1BZSl0aHJvdyBuZXcgTCgiZXJyb3IvbWVzc2FnZSIsJ1RoZSBlcnJvciBtZXNzYWdlICInLmNvbmNhdChrZS5tZXNzYWdlLCciIGlzIGlkZW50aWNhbCB0byB0aGUgbWVzc2FnZS4nKSl9ZWxzZSBpZihrZT09PUFlKXRocm93IG5l''@;'; put 'put ''dyBMKCJlcnJvci9tZXNzYWdlIiwnVGhlIGVycm9yICInLmNvbmNhdChrZSwnIiBpcyBpZGVudGljYWwgdG8gdGhlIG1lc3NhZ2UuJykpO190PUFlLEFlPXZvaWQgMH1lbHNlIGlmKG51bGwhPUFlJiYib2JqZWN0IiE9PWcoQWUpJiYiZnVuY3Rpb24iIT10eXBlb2YgQWUpdGhyb3cgbmV3IEso''@;'; put 'put ''ImVycm9yIixbIk9iamVjdCIsIkVycm9yIiwiRnVuY3Rpb24iLCJSZWdFeHAiXSxBZSk7aWYoa2U9PT1BKXt2YXIgcnQ9IiI7QWUmJkFlLm5hbWUmJihydCs9IiAoIi5jb25jYXQoQWUubmFtZSwiKSIpKSxydCs9X3Q/IjogIi5jb25jYXQoX3QpOiIuIixvZSh7YWN0dWFsOnZvaWQgMCxleHBl''@;'; put 'put ''Y3RlZDpBZSxvcGVyYXRvcjpWZS5uYW1lLG1lc3NhZ2U6Ik1pc3NpbmcgZXhwZWN0ZWQgIi5jb25jYXQoInJlamVjdHMiPT09VmUubmFtZT8icmVqZWN0aW9uIjoiZXhjZXB0aW9uIikuY29uY2F0KHJ0KSxzdGFja1N0YXJ0Rm46VmV9KX1pZihBZSYmIU1lKGtlLEFlLF90LFZlKSl0aHJvdyBr''@;'; put 'put ''ZX1mdW5jdGlvbiBGZShWZSxrZSxBZSxfdCl7aWYoa2UhPT1BKXtpZigic3RyaW5nIj09dHlwZW9mIEFlJiYoX3Q9QWUsQWU9dm9pZCAwKSwhQWV8fE1lKGtlLEFlKSl7dmFyIHJ0PV90PyI6ICIuY29uY2F0KF90KToiLiI7b2Uoe2FjdHVhbDprZSxleHBlY3RlZDpBZSxvcGVyYXRvcjpWZS5u''@;'; put 'put ''YW1lLG1lc3NhZ2U6IkdvdCB1bndhbnRlZCAiLmNvbmNhdCgiZG9lc05vdFJlamVjdCI9PT1WZS5uYW1lPyJyZWplY3Rpb24iOiJleGNlcHRpb24iKS5jb25jYXQocnQsIlxuIikrJ0FjdHVhbCBtZXNzYWdlOiAiJy5jb25jYXQoa2UmJmtlLm1lc3NhZ2UsJyInKSxzdGFja1N0YXJ0Rm46VmV9''@;'; put 'put ''KX10aHJvdyBrZX19ZnVuY3Rpb24gUmUoVmUsa2UsQWUsX3QscnQpe2lmKCFsZShrZSkpdGhyb3cgbmV3IEsoInJlZ2V4cCIsIlJlZ0V4cCIsa2UpO3ZhciBRZT0ibWF0Y2giPT09cnQ7aWYoInN0cmluZyIhPXR5cGVvZiBWZXx8VGUoa2UsVmUpIT09UWUpe2lmKEFlIGluc3RhbmNlb2YgRXJy''@;'; put 'put ''b3IpdGhyb3cgQWU7dmFyIGRuPSFBZTtBZT1BZXx8KCJzdHJpbmciIT10eXBlb2YgVmU/J1RoZSAic3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNlaXZlZCB0eXBlICcrIiIuY29uY2F0KGcoVmUpLCIgKCIpLmNvbmNhdChKKFZlKSwiKSIpOihRZT8iVGhlIGlu''@;'; put 'put ''cHV0IGRpZCBub3QgbWF0Y2ggdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiAiOiJUaGUgaW5wdXQgd2FzIGV4cGVjdGVkIHRvIG5vdCBtYXRjaCB0aGUgcmVndWxhciBleHByZXNzaW9uICIpKyIiLmNvbmNhdChKKGtlKSwiLiBJbnB1dDpcblxuIikuY29uY2F0KEooVmUpLCJcbiIpKTt2YXIgeXQ9''@;'; put 'put ''bmV3IFgoe2FjdHVhbDpWZSxleHBlY3RlZDprZSxtZXNzYWdlOkFlLG9wZXJhdG9yOnJ0LHN0YWNrU3RhcnRGbjpfdH0pO3Rocm93IHl0LmdlbmVyYXRlZE1lc3NhZ2U9ZG4seXR9fWZ1bmN0aW9uIEllKCl7Zm9yKHZhciBWZT1hcmd1bWVudHMubGVuZ3RoLGtlPW5ldyBBcnJheShWZSksQWU9''@;'; put 'put ''MDtBZTxWZTtBZSsrKWtlW0FlXT1hcmd1bWVudHNbQWVdO3NlLmFwcGx5KHZvaWQgMCxbSWUsa2UubGVuZ3RoXS5jb25jYXQoa2UpKX1tLnRocm93cz1mdW5jdGlvbiBWZShrZSl7Zm9yKHZhciBBZT1hcmd1bWVudHMubGVuZ3RoLF90PW5ldyBBcnJheShBZT4xP0FlLTE6MCkscnQ9MTtydDxB''@;'; put 'put ''ZTtydCsrKV90W3J0LTFdPWFyZ3VtZW50c1tydF07RGUuYXBwbHkodm9pZCAwLFtWZSx2ZShrZSldLmNvbmNhdChfdCkpfSxtLnJlamVjdHM9ZnVuY3Rpb24gVmUoa2Upe2Zvcih2YXIgQWU9YXJndW1lbnRzLmxlbmd0aCxfdD1uZXcgQXJyYXkoQWU+MT9BZS0xOjApLHJ0PTE7cnQ8QWU7cnQr''@;'; put 'put ''KylfdFtydC0xXT1hcmd1bWVudHNbcnRdO3JldHVybiBqZShrZSkudGhlbihmdW5jdGlvbihRZSl7cmV0dXJuIERlLmFwcGx5KHZvaWQgMCxbVmUsUWVdLmNvbmNhdChfdCkpfSl9LG0uZG9lc05vdFRocm93PWZ1bmN0aW9uIFZlKGtlKXtmb3IodmFyIEFlPWFyZ3VtZW50cy5sZW5ndGgsX3Q9''@;'; put 'put ''bmV3IEFycmF5KEFlPjE/QWUtMTowKSxydD0xO3J0PEFlO3J0KyspX3RbcnQtMV09YXJndW1lbnRzW3J0XTtGZS5hcHBseSh2b2lkIDAsW1ZlLHZlKGtlKV0uY29uY2F0KF90KSl9LG0uZG9lc05vdFJlamVjdD1mdW5jdGlvbiBWZShrZSl7Zm9yKHZhciBBZT1hcmd1bWVudHMubGVuZ3RoLF90''@;'; put 'put ''PW5ldyBBcnJheShBZT4xP0FlLTE6MCkscnQ9MTtydDxBZTtydCsrKV90W3J0LTFdPWFyZ3VtZW50c1tydF07cmV0dXJuIGplKGtlKS50aGVuKGZ1bmN0aW9uKFFlKXtyZXR1cm4gRmUuYXBwbHkodm9pZCAwLFtWZSxRZV0uY29uY2F0KF90KSl9KX0sbS5pZkVycm9yPWZ1bmN0aW9uIFZlKGtl''@;'; put 'put ''KXtpZihudWxsIT1rZSl7dmFyIEFlPSJpZkVycm9yIGdvdCB1bndhbnRlZCBleGNlcHRpb246ICI7Im9iamVjdCI9PT1nKGtlKSYmInN0cmluZyI9PXR5cGVvZiBrZS5tZXNzYWdlP0FlKz0wPT09a2UubWVzc2FnZS5sZW5ndGgmJmtlLmNvbnN0cnVjdG9yP2tlLmNvbnN0cnVjdG9yLm5hbWU6''@;'; put 'put ''a2UubWVzc2FnZTpBZSs9SihrZSk7dmFyIF90PW5ldyBYKHthY3R1YWw6a2UsZXhwZWN0ZWQ6bnVsbCxvcGVyYXRvcjoiaWZFcnJvciIsbWVzc2FnZTpBZSxzdGFja1N0YXJ0Rm46VmV9KSxydD1rZS5zdGFjaztpZigic3RyaW5nIj09dHlwZW9mIHJ0KXt2YXIgUWU9cnQuc3BsaXQoIlxuIik7''@;'; put 'put ''UWUuc2hpZnQoKTtmb3IodmFyIGRuPV90LnN0YWNrLnNwbGl0KCJcbiIpLHl0PTA7eXQ8UWUubGVuZ3RoO3l0Kyspe3ZhciBNdD1kbi5pbmRleE9mKFFlW3l0XSk7aWYoLTEhPT1NdCl7ZG49ZG4uc2xpY2UoMCxNdCk7YnJlYWt9fV90LnN0YWNrPSIiLmNvbmNhdChkbi5qb2luKCJcbiIpLCJc''@;'; put 'put ''biIpLmNvbmNhdChRZS5qb2luKCJcbiIpKX10aHJvdyBfdH19LG0ubWF0Y2g9ZnVuY3Rpb24gVmUoa2UsQWUsX3Qpe1JlKGtlLEFlLF90LFZlLCJtYXRjaCIpfSxtLmRvZXNOb3RNYXRjaD1mdW5jdGlvbiBWZShrZSxBZSxfdCl7UmUoa2UsQWUsX3QsVmUsImRvZXNOb3RNYXRjaCIpfSxtLnN0''@;'; put 'put ''cmljdD1tZShJZSxtLHtlcXVhbDptLnN0cmljdEVxdWFsLGRlZXBFcXVhbDptLmRlZXBTdHJpY3RFcXVhbCxub3RFcXVhbDptLm5vdFN0cmljdEVxdWFsLG5vdERlZXBFcXVhbDptLm5vdERlZXBTdHJpY3RFcXVhbH0pLG0uc3RyaWN0LnN0cmljdD1tLnN0cmljdH0sNTk2MToodWUscSxfKT0+''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDQxNTUpO2Z1bmN0aW9uIHkoQSxvZSl7dmFyIHRlPU9iamVjdC5rZXlzKEEpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBzZT1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKEEpO29lJiYoc2U9c2UuZmlsdGVyKGZ1bmN0aW9u''@;'; put 'put ''KHdlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihBLHdlKS5lbnVtZXJhYmxlfSkpLHRlLnB1c2guYXBwbHkodGUsc2UpfXJldHVybiB0ZX1mdW5jdGlvbiBnKEEpe2Zvcih2YXIgb2U9MTtvZTxhcmd1bWVudHMubGVuZ3RoO29lKyspe3ZhciB0ZT1udWxsIT1hcmd1''@;'; put 'put ''bWVudHNbb2VdP2FyZ3VtZW50c1tvZV06e307b2UlMj95KE9iamVjdCh0ZSksITApLmZvckVhY2goZnVuY3Rpb24oc2Upe0IoQSxzZSx0ZVtzZV0pfSk6T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnM/T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQSxPYmplY3QuZ2V0T3duUHJvcGVy''@;'; put 'put ''dHlEZXNjcmlwdG9ycyh0ZSkpOnkoT2JqZWN0KHRlKSkuZm9yRWFjaChmdW5jdGlvbihzZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsc2UsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0ZSxzZSkpfSl9cmV0dXJuIEF9ZnVuY3Rpb24gQihBLG9lLHRlKXtyZXR1cm4ob2U9Tyhv''@;'; put 'put ''ZSkpaW4gQT9PYmplY3QuZGVmaW5lUHJvcGVydHkoQSxvZSx7dmFsdWU6dGUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpBW29lXT10ZSxBfWZ1bmN0aW9uIFAoQSxvZSl7Zm9yKHZhciB0ZT0wO3RlPG9lLmxlbmd0aDt0ZSsrKXt2YXIgc2U9b2VbdGVdO3Nl''@;'; put 'put ''LmVudW1lcmFibGU9c2UuZW51bWVyYWJsZXx8ITEsc2UuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBzZSYmKHNlLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSxPKHNlLmtleSksc2UpfX1mdW5jdGlvbiBPKEEpe3ZhciBvZT1mdW5jdGlvbiB6KEEsb2Upe2lmKCJvYmpl''@;'; put 'put ''Y3QiIT09aWUoQSl8fG51bGw9PT1BKXJldHVybiBBO3ZhciB0ZT1BW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09dGUpe3ZhciBzZT10ZS5jYWxsKEEsb2V8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPT1pZShzZSkpcmV0dXJuIHNlO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9Q''@;'; put 'put ''cmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09b2U/U3RyaW5nOk51bWJlcikoQSl9KEEsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT09aWUob2UpP29lOlN0cmluZyhvZSl9ZnVuY3Rpb24gSyhBLG9lKXtpZihvZSYmKCJvYmplY3Qi''@;'; put 'put ''PT09aWUob2UpfHwiZnVuY3Rpb24iPT10eXBlb2Ygb2UpKXJldHVybiBvZTtpZih2b2lkIDAhPT1vZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJEZXJpdmVkIGNvbnN0cnVjdG9ycyBtYXkgb25seSByZXR1cm4gb2JqZWN0IG9yIHVuZGVmaW5lZCIpO3JldHVybiBVKEEpfWZ1bmN0aW9uIFUoQSl7''@;'; put 'put ''aWYodm9pZCAwPT09QSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBBfWZ1bmN0aW9uIFcoQSl7dmFyIG9lPSJmdW5jdGlvbiI9PXR5cGVvZiBNYXA/bmV3IE1hcDp2b2lk''@;'; put 'put ''IDA7cmV0dXJuIFc9ZnVuY3Rpb24oc2Upe2lmKG51bGw9PT1zZXx8IWZ1bmN0aW9uIGVlKEEpe3JldHVybi0xIT09RnVuY3Rpb24udG9TdHJpbmcuY2FsbChBKS5pbmRleE9mKCJbbmF0aXZlIGNvZGVdIil9KHNlKSlyZXR1cm4gc2U7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHNlKXRocm93IG5l''@;'; put 'put ''dyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7aWYodHlwZW9mIG9lPCJ1Iil7aWYob2UuaGFzKHNlKSlyZXR1cm4gb2UuZ2V0KHNlKTtvZS5zZXQoc2Usd2UpfWZ1bmN0aW9uIHdlKCl7cmV0dXJuIFkoc2UsYXJndW1lbnRz''@;'; put 'put ''LHJlKHRoaXMpLmNvbnN0cnVjdG9yKX1yZXR1cm4gd2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoc2UucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6d2UsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksSih3ZSxzZSl9LFcoQSl9ZnVuY3Rpb24gWShB''@;'; put 'put ''LG9lLHRlKXtyZXR1cm4oWT1YKCk/UmVmbGVjdC5jb25zdHJ1Y3QuYmluZCgpOmZ1bmN0aW9uKHdlLFVlLEplKXt2YXIgYXQ9W251bGxdO2F0LnB1c2guYXBwbHkoYXQsVWUpO3ZhciB2ZT1uZXcoRnVuY3Rpb24uYmluZC5hcHBseSh3ZSxhdCkpO3JldHVybiBKZSYmSih2ZSxKZS5wcm90b3R5''@;'; put 'put ''cGUpLHZlfSkuYXBwbHkobnVsbCxhcmd1bWVudHMpfWZ1bmN0aW9uIFgoKXtpZih0eXBlb2YgUmVmbGVjdD4idSJ8fCFSZWZsZWN0LmNvbnN0cnVjdHx8UmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVy''@;'; put 'put ''biBCb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoUmVmbGVjdC5jb25zdHJ1Y3QoQm9vbGVhbixbXSxmdW5jdGlvbigpe30pKSwhMH1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gSihBLG9lKXtyZXR1cm4oSj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9m''@;'; put 'put ''LmJpbmQoKTpmdW5jdGlvbihzZSx3ZSl7cmV0dXJuIHNlLl9fcHJvdG9fXz13ZSxzZX0pKEEsb2UpfWZ1bmN0aW9uIHJlKEEpe3JldHVybihyZT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mLmJpbmQoKTpmdW5jdGlvbih0ZSl7cmV0dXJuIHRlLl9fcHJvdG9f''@;'; put 'put ''X3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHRlKX0pKEEpfWZ1bmN0aW9uIGllKEEpe3JldHVybihpZT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihvZSl7cmV0dXJuIHR5cGVvZiBvZX06ZnVuY3Rpb24ob2Upe3Jl''@;'; put 'put ''dHVybiBvZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmb2UuY29uc3RydWN0b3I9PT1TeW1ib2wmJm9lIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2Ygb2V9KShBKX12YXIgbWU9Xyg5NTM5KS5pbnNwZWN0LFRlPV8oMjEzNikuY29kZXMuRVJSX0lOVkFMSURfQVJHX1RZ''@;'; put 'put ''UEU7ZnVuY3Rpb24gU2UoQSxvZSx0ZSl7cmV0dXJuKHZvaWQgMD09PXRlfHx0ZT5BLmxlbmd0aCkmJih0ZT1BLmxlbmd0aCksQS5zdWJzdHJpbmcodGUtb2UubGVuZ3RoLHRlKT09PW9lfXZhciBWPSIiLHA9IiIsYj0iIix4PSIiLEM9e2RlZXBTdHJpY3RFcXVhbDoiRXhwZWN0ZWQgdmFsdWVz''@;'; put 'put ''IHRvIGJlIHN0cmljdGx5IGRlZXAtZXF1YWw6IixzdHJpY3RFcXVhbDoiRXhwZWN0ZWQgdmFsdWVzIHRvIGJlIHN0cmljdGx5IGVxdWFsOiIsc3RyaWN0RXF1YWxPYmplY3Q6J0V4cGVjdGVkICJhY3R1YWwiIHRvIGJlIHJlZmVyZW5jZS1lcXVhbCB0byAiZXhwZWN0ZWQiOicsZGVlcEVxdWFs''@;'; put 'put ''OiJFeHBlY3RlZCB2YWx1ZXMgdG8gYmUgbG9vc2VseSBkZWVwLWVxdWFsOiIsZXF1YWw6IkV4cGVjdGVkIHZhbHVlcyB0byBiZSBsb29zZWx5IGVxdWFsOiIsbm90RGVlcFN0cmljdEVxdWFsOidFeHBlY3RlZCAiYWN0dWFsIiBub3QgdG8gYmUgc3RyaWN0bHkgZGVlcC1lcXVhbCB0bzonLG5v''@;'; put 'put ''dFN0cmljdEVxdWFsOidFeHBlY3RlZCAiYWN0dWFsIiB0byBiZSBzdHJpY3RseSB1bmVxdWFsIHRvOicsbm90U3RyaWN0RXF1YWxPYmplY3Q6J0V4cGVjdGVkICJhY3R1YWwiIG5vdCB0byBiZSByZWZlcmVuY2UtZXF1YWwgdG8gImV4cGVjdGVkIjonLG5vdERlZXBFcXVhbDonRXhwZWN0ZWQg''@;'; put 'put ''ImFjdHVhbCIgbm90IHRvIGJlIGxvb3NlbHkgZGVlcC1lcXVhbCB0bzonLG5vdEVxdWFsOidFeHBlY3RlZCAiYWN0dWFsIiB0byBiZSBsb29zZWx5IHVuZXF1YWwgdG86Jyxub3RJZGVudGljYWw6IlZhbHVlcyBpZGVudGljYWwgYnV0IG5vdCByZWZlcmVuY2UtZXF1YWw6In07ZnVuY3Rpb24g''@;'; put 'put ''SChBKXt2YXIgb2U9T2JqZWN0LmtleXMoQSksdGU9T2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YoQSkpO3JldHVybiBvZS5mb3JFYWNoKGZ1bmN0aW9uKHNlKXt0ZVtzZV09QVtzZV19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGUsIm1lc3NhZ2UiLHt2YWx1ZTpBLm1lc3Nh''@;'; put 'put ''Z2V9KSx0ZX1mdW5jdGlvbiBqKEEpe3JldHVybiBtZShBLHtjb21wYWN0OiExLGN1c3RvbUluc3BlY3Q6ITEsZGVwdGg6MWUzLG1heEFycmF5TGVuZ3RoOjEvMCxzaG93SGlkZGVuOiExLGJyZWFrTGVuZ3RoOjEvMCxzaG93UHJveHk6ITEsc29ydGVkOiEwLGdldHRlcnM6ITB9KX12YXIgbT1m''@;'; put 'put ''dW5jdGlvbihBLG9lKXshZnVuY3Rpb24gTihBLG9lKXtpZigiZnVuY3Rpb24iIT10eXBlb2Ygb2UmJm51bGwhPT1vZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO0EucHJvdG90eXBlPU9iamVjdC5jcmVh''@;'; put 'put ''dGUob2UmJm9lLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOkEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pLG9lJiZKKEEsb2UpfShzZSxBKTt2YXIgdGU9ZnVuY3Rpb24gTChBKXt2''@;'; put 'put ''YXIgb2U9WCgpO3JldHVybiBmdW5jdGlvbigpe3ZhciB3ZSxzZT1yZShBKTtpZihvZSl7dmFyIFVlPXJlKHRoaXMpLmNvbnN0cnVjdG9yO3dlPVJlZmxlY3QuY29uc3RydWN0KHNlLGFyZ3VtZW50cyxVZSl9ZWxzZSB3ZT1zZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIEsodGhpcyx3''@;'; put 'put ''ZSl9fShzZSk7ZnVuY3Rpb24gc2Uod2Upe3ZhciBVZTtpZihmdW5jdGlvbiB3KEEsb2Upe2lmKCEoQSBpbnN0YW5jZW9mIG9lKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxzZSksIm9iamVjdCIhPT1pZSh3ZSl8fG51bGw9''@;'; put 'put ''PT13ZSl0aHJvdyBuZXcgVGUoIm9wdGlvbnMiLCJPYmplY3QiLHdlKTt2YXIgSmU9d2UubWVzc2FnZSxhdD13ZS5vcGVyYXRvcixNZT13ZS5zdGFja1N0YXJ0Rm4sdmU9d2UuYWN0dWFsLFhlPXdlLmV4cGVjdGVkLGplPUVycm9yLnN0YWNrVHJhY2VMaW1pdDtpZihFcnJvci5zdGFja1RyYWNl''@;'; put 'put ''TGltaXQ9MCxudWxsIT1KZSlVZT10ZS5jYWxsKHRoaXMsU3RyaW5nKEplKSk7ZWxzZSBpZihJLnN0ZGVyciYmSS5zdGRlcnIuaXNUVFkmJihJLnN0ZGVyciYmSS5zdGRlcnIuZ2V0Q29sb3JEZXB0aCYmMSE9PUkuc3RkZXJyLmdldENvbG9yRGVwdGgoKT8oVj0iXHgxYlszNG0iLHA9Ilx4MWJb''@;'; put 'put ''MzJtIix4PSJceDFiWzM5bSIsYj0iXHgxYlszMW0iKTooVj0iIixwPSIiLHg9IiIsYj0iIikpLCJvYmplY3QiPT09aWUodmUpJiZudWxsIT09dmUmJiJvYmplY3QiPT09aWUoWGUpJiZudWxsIT09WGUmJiJzdGFjayJpbiB2ZSYmdmUgaW5zdGFuY2VvZiBFcnJvciYmInN0YWNrImluIFhlJiZY''@;'; put 'put ''ZSBpbnN0YW5jZW9mIEVycm9yJiYodmU9SCh2ZSksWGU9SChYZSkpLCJkZWVwU3RyaWN0RXF1YWwiPT09YXR8fCJzdHJpY3RFcXVhbCI9PT1hdClVZT10ZS5jYWxsKHRoaXMsZnVuY3Rpb24gRShBLG9lLHRlKXt2YXIgc2U9IiIsd2U9IiIsVWU9MCxKZT0iIixhdD0hMSxNZT1qKEEpLHZlPU1l''@;'; put 'put ''LnNwbGl0KCJcbiIpLFhlPWoob2UpLnNwbGl0KCJcbiIpLGplPTAsRGU9IiI7aWYoInN0cmljdEVxdWFsIj09PXRlJiYib2JqZWN0Ij09PWllKEEpJiYib2JqZWN0Ij09PWllKG9lKSYmbnVsbCE9PUEmJm51bGwhPT1vZSYmKHRlPSJzdHJpY3RFcXVhbE9iamVjdCIpLDE9PT12ZS5sZW5ndGgm''@;'; put 'put ''JjE9PT1YZS5sZW5ndGgmJnZlWzBdIT09WGVbMF0pe3ZhciBGZT12ZVswXS5sZW5ndGgrWGVbMF0ubGVuZ3RoO2lmKEZlPD0xMCl7aWYoISgib2JqZWN0Ij09PWllKEEpJiZudWxsIT09QXx8Im9iamVjdCI9PT1pZShvZSkmJm51bGwhPT1vZXx8MD09PUEmJjA9PT1vZSkpcmV0dXJuIiIuY29u''@;'; put 'put ''Y2F0KENbdGVdLCJcblxuIikrIiIuY29uY2F0KHZlWzBdLCIgIT09ICIpLmNvbmNhdChYZVswXSwiXG4iKX1lbHNlIGlmKCJzdHJpY3RFcXVhbE9iamVjdCIhPT10ZSYmRmU8KEkuc3RkZXJyJiZJLnN0ZGVyci5pc1RUWT9JLnN0ZGVyci5jb2x1bW5zOjgwKSl7Zm9yKDt2ZVswXVtqZV09PT1Y''@;'; put 'put ''ZVswXVtqZV07KWplKys7amU+MiYmKERlPSJcbiAgIi5jb25jYXQoZnVuY3Rpb24gemUoQSxvZSl7aWYob2U9TWF0aC5mbG9vcihvZSksMD09QS5sZW5ndGh8fDA9PW9lKXJldHVybiIiO3ZhciB0ZT1BLmxlbmd0aCpvZTtmb3Iob2U9TWF0aC5mbG9vcihNYXRoLmxvZyhvZSkvTWF0aC5sb2co''@;'; put 'put ''MikpO29lOylBKz1BLG9lLS07cmV0dXJuIEErQS5zdWJzdHJpbmcoMCx0ZS1BLmxlbmd0aCl9KCIgIixqZSksIl4iKSxqZT0wKX19Zm9yKHZhciBJZT12ZVt2ZS5sZW5ndGgtMV0sVmU9WGVbWGUubGVuZ3RoLTFdO0llPT09VmUmJihqZSsrPDI/SmU9IlxuICAiLmNvbmNhdChJZSkuY29uY2F0''@;'; put 'put ''KEplKTpzZT1JZSx2ZS5wb3AoKSxYZS5wb3AoKSwwIT09dmUubGVuZ3RoJiYwIT09WGUubGVuZ3RoKTspSWU9dmVbdmUubGVuZ3RoLTFdLFZlPVhlW1hlLmxlbmd0aC0xXTt2YXIga2U9TWF0aC5tYXgodmUubGVuZ3RoLFhlLmxlbmd0aCk7aWYoMD09PWtlKXt2YXIgQWU9TWUuc3BsaXQoIlxu''@;'; put 'put ''Iik7aWYoQWUubGVuZ3RoPjMwKWZvcihBZVsyNl09IiIuY29uY2F0KFYsIi4uLiIpLmNvbmNhdCh4KTtBZS5sZW5ndGg+Mjc7KUFlLnBvcCgpO3JldHVybiIiLmNvbmNhdChDLm5vdElkZW50aWNhbCwiXG5cbiIpLmNvbmNhdChBZS5qb2luKCJcbiIpLCJcbiIpfWplPjMmJihKZT0iXG4iLmNv''@;'; put 'put ''bmNhdChWLCIuLi4iKS5jb25jYXQoeCkuY29uY2F0KEplKSxhdD0hMCksIiIhPT1zZSYmKEplPSJcbiAgIi5jb25jYXQoc2UpLmNvbmNhdChKZSksc2U9IiIpO3ZhciBfdD0wLHJ0PUNbdGVdKyJcbiIuY29uY2F0KHAsIisgYWN0dWFsIikuY29uY2F0KHgsIiAiKS5jb25jYXQoYiwiLSBleHBl''@;'; put 'put ''Y3RlZCIpLmNvbmNhdCh4KSxRZT0iICIuY29uY2F0KFYsIi4uLiIpLmNvbmNhdCh4LCIgTGluZXMgc2tpcHBlZCIpO2ZvcihqZT0wO2plPGtlO2plKyspe3ZhciBkbj1qZS1VZTtpZih2ZS5sZW5ndGg8amUrMSlkbj4xJiZqZT4yJiYoZG4+ND8od2UrPSJcbiIuY29uY2F0KFYsIi4uLiIpLmNv''@;'; put 'put ''bmNhdCh4KSxhdD0hMCk6ZG4+MyYmKHdlKz0iXG4gICIuY29uY2F0KFhlW2plLTJdKSxfdCsrKSx3ZSs9IlxuICAiLmNvbmNhdChYZVtqZS0xXSksX3QrKyksVWU9amUsc2UrPSJcbiIuY29uY2F0KGIsIi0iKS5jb25jYXQoeCwiICIpLmNvbmNhdChYZVtqZV0pLF90Kys7ZWxzZSBpZihYZS5s''@;'; put 'put ''ZW5ndGg8amUrMSlkbj4xJiZqZT4yJiYoZG4+ND8od2UrPSJcbiIuY29uY2F0KFYsIi4uLiIpLmNvbmNhdCh4KSxhdD0hMCk6ZG4+MyYmKHdlKz0iXG4gICIuY29uY2F0KHZlW2plLTJdKSxfdCsrKSx3ZSs9IlxuICAiLmNvbmNhdCh2ZVtqZS0xXSksX3QrKyksVWU9amUsd2UrPSJcbiIuY29u''@;'; put 'put ''Y2F0KHAsIisiKS5jb25jYXQoeCwiICIpLmNvbmNhdCh2ZVtqZV0pLF90Kys7ZWxzZXt2YXIgeXQ9WGVbamVdLE10PXZlW2plXSxEdD1NdCE9PXl0JiYoIVNlKE10LCIsIil8fE10LnNsaWNlKDAsLTEpIT09eXQpO0R0JiZTZSh5dCwiLCIpJiZ5dC5zbGljZSgwLC0xKT09PU10JiYoRHQ9ITEs''@;'; put 'put ''TXQrPSIsIiksRHQ/KGRuPjEmJmplPjImJihkbj40Pyh3ZSs9IlxuIi5jb25jYXQoViwiLi4uIikuY29uY2F0KHgpLGF0PSEwKTpkbj4zJiYod2UrPSJcbiAgIi5jb25jYXQodmVbamUtMl0pLF90KyspLHdlKz0iXG4gICIuY29uY2F0KHZlW2plLTFdKSxfdCsrKSxVZT1qZSx3ZSs9IlxuIi5j''@;'; put 'put ''b25jYXQocCwiKyIpLmNvbmNhdCh4LCIgIikuY29uY2F0KE10KSxzZSs9IlxuIi5jb25jYXQoYiwiLSIpLmNvbmNhdCh4LCIgIikuY29uY2F0KHl0KSxfdCs9Mik6KHdlKz1zZSxzZT0iIiwoMT09PWRufHwwPT09amUpJiYod2UrPSJcbiAgIi5jb25jYXQoTXQpLF90KyspKX1pZihfdD4yMCYm''@;'; put 'put ''amU8a2UtMilyZXR1cm4iIi5jb25jYXQocnQpLmNvbmNhdChRZSwiXG4iKS5jb25jYXQod2UsIlxuIikuY29uY2F0KFYsIi4uLiIpLmNvbmNhdCh4KS5jb25jYXQoc2UsIlxuIikrIiIuY29uY2F0KFYsIi4uLiIpLmNvbmNhdCh4KX1yZXR1cm4iIi5jb25jYXQocnQpLmNvbmNhdChhdD9RZToi''@;'; put 'put ''IiwiXG4iKS5jb25jYXQod2UpLmNvbmNhdChzZSkuY29uY2F0KEplKS5jb25jYXQoRGUpfSh2ZSxYZSxhdCkpO2Vsc2UgaWYoIm5vdERlZXBTdHJpY3RFcXVhbCI9PT1hdHx8Im5vdFN0cmljdEVxdWFsIj09PWF0KXt2YXIgRGU9Q1thdF0sRmU9aih2ZSkuc3BsaXQoIlxuIik7aWYoIm5vdFN0''@;'; put 'put ''cmljdEVxdWFsIj09PWF0JiYib2JqZWN0Ij09PWllKHZlKSYmbnVsbCE9PXZlJiYoRGU9Qy5ub3RTdHJpY3RFcXVhbE9iamVjdCksRmUubGVuZ3RoPjMwKWZvcihGZVsyNl09IiIuY29uY2F0KFYsIi4uLiIpLmNvbmNhdCh4KTtGZS5sZW5ndGg+Mjc7KUZlLnBvcCgpO1VlPXRlLmNhbGwodGhp''@;'; put 'put ''cywxPT09RmUubGVuZ3RoPyIiLmNvbmNhdChEZSwiICIpLmNvbmNhdChGZVswXSk6IiIuY29uY2F0KERlLCJcblxuIikuY29uY2F0KEZlLmpvaW4oIlxuIiksIlxuIikpfWVsc2V7dmFyIFJlPWoodmUpLEllPSIiLFZlPUNbYXRdOyJub3REZWVwRXF1YWwiPT09YXR8fCJub3RFcXVhbCI9PT1h''@;'; put 'put ''dD8oUmU9IiIuY29uY2F0KENbYXRdLCJcblxuIikuY29uY2F0KFJlKSkubGVuZ3RoPjEwMjQmJihSZT0iIi5jb25jYXQoUmUuc2xpY2UoMCwxMDIxKSwiLi4uIikpOihJZT0iIi5jb25jYXQoaihYZSkpLFJlLmxlbmd0aD41MTImJihSZT0iIi5jb25jYXQoUmUuc2xpY2UoMCw1MDkpLCIuLi4i''@;'; put 'put ''KSksSWUubGVuZ3RoPjUxMiYmKEllPSIiLmNvbmNhdChJZS5zbGljZSgwLDUwOSksIi4uLiIpKSwiZGVlcEVxdWFsIj09PWF0fHwiZXF1YWwiPT09YXQ/UmU9IiIuY29uY2F0KFZlLCJcblxuIikuY29uY2F0KFJlLCJcblxuc2hvdWxkIGVxdWFsXG5cbiIpOkllPSIgIi5jb25jYXQoYXQsIiAi''@;'; put 'put ''KS5jb25jYXQoSWUpKSxVZT10ZS5jYWxsKHRoaXMsIiIuY29uY2F0KFJlKS5jb25jYXQoSWUpKX1yZXR1cm4gRXJyb3Iuc3RhY2tUcmFjZUxpbWl0PWplLFVlLmdlbmVyYXRlZE1lc3NhZ2U9IUplLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVKFVlKSwibmFtZSIse3ZhbHVlOiJBc3NlcnRpb25F''@;'; put 'put ''cnJvciBbRVJSX0FTU0VSVElPTl0iLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksVWUuY29kZT0iRVJSX0FTU0VSVElPTiIsVWUuYWN0dWFsPXZlLFVlLmV4cGVjdGVkPVhlLFVlLm9wZXJhdG9yPWF0LEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5j''@;'; put 'put ''YXB0dXJlU3RhY2tUcmFjZShVKFVlKSxNZSksVWUubmFtZT0iQXNzZXJ0aW9uRXJyb3IiLEsoVWUpfXJldHVybiBmdW5jdGlvbiBGKEEsb2UsdGUpe29lJiZQKEEucHJvdG90eXBlLG9lKSx0ZSYmUChBLHRlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwicHJvdG90eXBlIix7d3JpdGFibGU6''@;'; put 'put ''ITF9KX0oc2UsW3trZXk6InRvU3RyaW5nIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiIiLmNvbmNhdCh0aGlzLm5hbWUsIiBbIikuY29uY2F0KHRoaXMuY29kZSwiXTogIikuY29uY2F0KHRoaXMubWVzc2FnZSl9fSx7a2V5Om9lLHZhbHVlOmZ1bmN0aW9uKFVlLEplKXtyZXR1cm4gbWUodGhp''@;'; put 'put ''cyxnKGcoe30sSmUpLHt9LHtjdXN0b21JbnNwZWN0OiExLGRlcHRoOjB9KSl9fV0pLHNlfShXKEVycm9yKSxtZS5jdXN0b20pO3VlLmV4cG9ydHM9bX0sMjEzNjoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBJKG1lKXtyZXR1cm4oST0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9s''@;'; put 'put ''JiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihfZSl7cmV0dXJuIHR5cGVvZiBfZX06ZnVuY3Rpb24oX2Upe3JldHVybiBfZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmX2UuY29uc3RydWN0b3I9PT1TeW1ib2wmJl9lIT09U3ltYm9sLnByb3RvdHlwZT8i''@;'; put 'put ''c3ltYm9sIjp0eXBlb2YgX2V9KShtZSl9ZnVuY3Rpb24geShtZSxfZSl7Zm9yKHZhciBUZT0wO1RlPF9lLmxlbmd0aDtUZSsrKXt2YXIgU2U9X2VbVGVdO1NlLmVudW1lcmFibGU9U2UuZW51bWVyYWJsZXx8ITEsU2UuY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBTZSYmKFNlLndyaXRhYmxl''@;'; put 'put ''PSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobWUsQihTZS5rZXkpLFNlKX19ZnVuY3Rpb24gQihtZSl7dmFyIF9lPWZ1bmN0aW9uIHcobWUsX2Upe2lmKCJvYmplY3QiIT09SShtZSl8fG51bGw9PT1tZSlyZXR1cm4gbWU7dmFyIFRlPW1lW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAw''@;'; put 'put ''IT09VGUpe3ZhciBTZT1UZS5jYWxsKG1lLF9lfHwiZGVmYXVsdCIpO2lmKCJvYmplY3QiIT09SShTZSkpcmV0dXJuIFNlO3Rocm93IG5ldyBUeXBlRXJyb3IoIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuIil9cmV0dXJuKCJzdHJpbmciPT09X2U/U3RyaW5n''@;'; put 'put ''Ok51bWJlcikobWUpfShtZSwic3RyaW5nIik7cmV0dXJuInN5bWJvbCI9PT1JKF9lKT9fZTpTdHJpbmcoX2UpfWZ1bmN0aW9uIE8obWUsX2Upe3JldHVybihPPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKFNlLHplKXtyZXR1cm4g''@;'; put 'put ''U2UuX19wcm90b19fPXplLFNlfSkobWUsX2UpfWZ1bmN0aW9uIFUobWUpe3JldHVybihVPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpOmZ1bmN0aW9uKFRlKXtyZXR1cm4gVGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoVGUpfSko''@;'; put 'put ''bWUpfXZhciBZLFgsVz17fTtmdW5jdGlvbiBlZShtZSxfZSxUZSl7VGV8fChUZT1FcnJvcik7dmFyIHplPWZ1bmN0aW9uKFYpeyFmdW5jdGlvbiBGKG1lLF9lKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgX2UmJm51bGwhPT1fZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9u''@;'; put 'put ''IG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO21lLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKF9lJiZfZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTptZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG1lLCJwcm90''@;'; put 'put ''b3R5cGUiLHt3cml0YWJsZTohMX0pLF9lJiZPKG1lLF9lKX0oYixWKTt2YXIgcD1mdW5jdGlvbiB6KG1lKXt2YXIgX2U9ZnVuY3Rpb24gSygpe2lmKHR5cGVvZiBSZWZsZWN0PiJ1Inx8IVJlZmxlY3QuY29uc3RydWN0fHxSZWZsZWN0LmNvbnN0cnVjdC5zaGFtKXJldHVybiExO2lmKCJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiBQcm94eSlyZXR1cm4hMDt0cnl7cmV0dXJuIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLFtdLGZ1bmN0aW9uKCl7fSkpLCEwfWNhdGNoe3JldHVybiExfX0oKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgemUsU2U9''@;'; put 'put ''VShtZSk7aWYoX2Upe3ZhciBWPVUodGhpcykuY29uc3RydWN0b3I7emU9UmVmbGVjdC5jb25zdHJ1Y3QoU2UsYXJndW1lbnRzLFYpfWVsc2UgemU9U2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbiBOKG1lLF9lKXtpZihfZSYmKCJvYmplY3QiPT09SShfZSl8fCJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiBfZSkpcmV0dXJuIF9lO2lmKHZvaWQgMCE9PV9lKXRocm93IG5ldyBUeXBlRXJyb3IoIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkIik7cmV0dXJuIGZ1bmN0aW9uIEwobWUpe2lmKHZvaWQgMD09PW1lKXRocm93''@;'; put 'put ''IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIG1lfShtZSl9KHRoaXMsemUpfX0oYik7ZnVuY3Rpb24gYih4LEMsVCl7dmFyIEg7cmV0dXJuIGZ1bmN0aW9uIFAobWUsX2Upe2lmKCEo''@;'; put 'put ''bWUgaW5zdGFuY2VvZiBfZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsYiksSD1wLmNhbGwodGhpcyxmdW5jdGlvbiBTZShWLHAsYil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBfZT9fZTpfZShWLHAsYil9KHgsQyxUKSks''@;'; put 'put ''SC5jb2RlPW1lLEh9cmV0dXJuIGZ1bmN0aW9uIGcobWUsX2UsVGUpe3JldHVybiBfZSYmeShtZS5wcm90b3R5cGUsX2UpLFRlJiZ5KG1lLFRlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkobWUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSksbWV9KGIpfShUZSk7V1ttZV09emV9ZnVuY3Rpb24g''@;'; put 'put ''SihtZSxfZSl7aWYoQXJyYXkuaXNBcnJheShtZSkpe3ZhciBUZT1tZS5sZW5ndGg7cmV0dXJuIG1lPW1lLm1hcChmdW5jdGlvbihTZSl7cmV0dXJuIFN0cmluZyhTZSl9KSxUZT4yPyJvbmUgb2YgIi5jb25jYXQoX2UsIiAiKS5jb25jYXQobWUuc2xpY2UoMCxUZS0xKS5qb2luKCIsICIpLCIs''@;'; put 'put ''IG9yICIpK21lW1RlLTFdOjI9PT1UZT8ib25lIG9mICIuY29uY2F0KF9lLCIgIikuY29uY2F0KG1lWzBdLCIgb3IgIikuY29uY2F0KG1lWzFdKToib2YgIi5jb25jYXQoX2UsIiAiKS5jb25jYXQobWVbMF0pfXJldHVybiJvZiAiLmNvbmNhdChfZSwiICIpLmNvbmNhdChTdHJpbmcobWUpKX1l''@;'; put 'put ''ZSgiRVJSX0FNQklHVU9VU19BUkdVTUVOVCIsJ1RoZSAiJXMiIGFyZ3VtZW50IGlzIGFtYmlndW91cy4gJXMnLFR5cGVFcnJvciksZWUoIkVSUl9JTlZBTElEX0FSR19UWVBFIixmdW5jdGlvbihtZSxfZSxUZSl7dmFyIFNlLHplO2lmKHZvaWQgMD09PVkmJihZPV8oOTI4MikpLFkoInN0cmlu''@;'; put 'put ''ZyI9PXR5cGVvZiBtZSwiJ25hbWUnIG11c3QgYmUgYSBzdHJpbmciKSwic3RyaW5nIj09dHlwZW9mIF9lJiZmdW5jdGlvbiByZShtZSxfZSxUZSl7cmV0dXJuIG1lLnN1YnN0cighVGV8fFRlPDA/MDorVGUsX2UubGVuZ3RoKT09PV9lfShfZSwibm90ICIpPyhTZT0ibXVzdCBub3QgYmUiLF9l''@;'; put 'put ''PV9lLnJlcGxhY2UoL15ub3QgLywiIikpOlNlPSJtdXN0IGJlIixmdW5jdGlvbiBpZShtZSxfZSxUZSl7cmV0dXJuKHZvaWQgMD09PVRlfHxUZT5tZS5sZW5ndGgpJiYoVGU9bWUubGVuZ3RoKSxtZS5zdWJzdHJpbmcoVGUtX2UubGVuZ3RoLFRlKT09PV9lfShtZSwiIGFyZ3VtZW50IikpemU9''@;'; put 'put ''IlRoZSAiLmNvbmNhdChtZSwiICIpLmNvbmNhdChTZSwiICIpLmNvbmNhdChKKF9lLCJ0eXBlIikpO2Vsc2V7dmFyIFY9ZnVuY3Rpb24gbGUobWUsX2UsVGUpe3JldHVybiJudW1iZXIiIT10eXBlb2YgVGUmJihUZT0wKSwhKFRlK19lLmxlbmd0aD5tZS5sZW5ndGgpJiYtMSE9PW1lLmluZGV4''@;'; put 'put ''T2YoX2UsVGUpfShtZSwiLiIpPyJwcm9wZXJ0eSI6ImFyZ3VtZW50Ijt6ZT0nVGhlICInLmNvbmNhdChtZSwnIiAnKS5jb25jYXQoViwiICIpLmNvbmNhdChTZSwiICIpLmNvbmNhdChKKF9lLCJ0eXBlIikpfXJldHVybiB6ZSsiLiBSZWNlaXZlZCB0eXBlICIuY29uY2F0KEkoVGUpKX0sVHlw''@;'; put 'put ''ZUVycm9yKSxlZSgiRVJSX0lOVkFMSURfQVJHX1ZBTFVFIixmdW5jdGlvbihtZSxfZSl7dmFyIFRlPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXToiaXMgaW52YWxpZCI7dm9pZCAwPT09WCYmKFg9Xyg5NTM5KSk7dmFyIFNlPVguaW5zcGVj''@;'; put 'put ''dChfZSk7cmV0dXJuIFNlLmxlbmd0aD4xMjgmJihTZT0iIi5jb25jYXQoU2Uuc2xpY2UoMCwxMjgpLCIuLi4iKSksIlRoZSBhcmd1bWVudCAnIi5jb25jYXQobWUsIicgIikuY29uY2F0KFRlLCIuIFJlY2VpdmVkICIpLmNvbmNhdChTZSl9LFR5cGVFcnJvcixSYW5nZUVycm9yKSxlZSgiRVJS''@;'; put 'put ''X0lOVkFMSURfUkVUVVJOX1ZBTFVFIixmdW5jdGlvbihtZSxfZSxUZSl7dmFyIFNlO3JldHVybiBTZT1UZSYmVGUuY29uc3RydWN0b3ImJlRlLmNvbnN0cnVjdG9yLm5hbWU/Imluc3RhbmNlIG9mICIuY29uY2F0KFRlLmNvbnN0cnVjdG9yLm5hbWUpOiJ0eXBlICIuY29uY2F0KEkoVGUpKSwi''@;'; put 'put ''RXhwZWN0ZWQgIi5jb25jYXQobWUsJyB0byBiZSByZXR1cm5lZCBmcm9tIHRoZSAiJykuY29uY2F0KF9lLCciJykrIiBmdW5jdGlvbiBidXQgZ290ICIuY29uY2F0KFNlLCIuIil9LFR5cGVFcnJvciksZWUoIkVSUl9NSVNTSU5HX0FSR1MiLGZ1bmN0aW9uKCl7Zm9yKHZhciBtZT1hcmd1bWVu''@;'; put 'put ''dHMubGVuZ3RoLF9lPW5ldyBBcnJheShtZSksVGU9MDtUZTxtZTtUZSsrKV9lW1RlXT1hcmd1bWVudHNbVGVdO3ZvaWQgMD09PVkmJihZPV8oOTI4MikpLFkoX2UubGVuZ3RoPjAsIkF0IGxlYXN0IG9uZSBhcmcgbmVlZHMgdG8gYmUgc3BlY2lmaWVkIik7dmFyIFNlPSJUaGUgIix6ZT1fZS5s''@;'; put 'put ''ZW5ndGg7c3dpdGNoKF9lPV9lLm1hcChmdW5jdGlvbihWKXtyZXR1cm4nIicuY29uY2F0KFYsJyInKX0pLHplKXtjYXNlIDE6U2UrPSIiLmNvbmNhdChfZVswXSwiIGFyZ3VtZW50Iik7YnJlYWs7Y2FzZSAyOlNlKz0iIi5jb25jYXQoX2VbMF0sIiBhbmQgIikuY29uY2F0KF9lWzFdLCIgYXJn''@;'; put 'put ''dW1lbnRzIik7YnJlYWs7ZGVmYXVsdDpTZSs9X2Uuc2xpY2UoMCx6ZS0xKS5qb2luKCIsICIpLFNlKz0iLCBhbmQgIi5jb25jYXQoX2VbemUtMV0sIiBhcmd1bWVudHMiKX1yZXR1cm4iIi5jb25jYXQoU2UsIiBtdXN0IGJlIHNwZWNpZmllZCIpfSxUeXBlRXJyb3IpLHVlLmV4cG9ydHMuY29k''@;'; put 'put ''ZXM9V30sOTE1ODoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBJKER0LGl0KXtyZXR1cm4gZnVuY3Rpb24gUChEdCl7aWYoQXJyYXkuaXNBcnJheShEdCkpcmV0dXJuIER0fShEdCl8fGZ1bmN0aW9uIHcoRHQsaXQpe3ZhciAkZT1udWxsPT1EdD9udWxsOnR5cGVvZiBTeW1ib2w8''@;'; put 'put ''InUiJiZEdFtTeW1ib2wuaXRlcmF0b3JdfHxEdFsiQEBpdGVyYXRvciJdO2lmKG51bGwhPSRlKXt2YXIgdHQsSGUsZHQscXQsUnQ9W10sUHQ9ITAsYWk9ITE7dHJ5e2lmKGR0PSgkZT0kZS5jYWxsKER0KSkubmV4dCwwPT09aXQpe2lmKE9iamVjdCgkZSkhPT0kZSlyZXR1cm47UHQ9ITF9ZWxz''@;'; put 'put ''ZSBmb3IoOyEoUHQ9KHR0PWR0LmNhbGwoJGUpKS5kb25lKSYmKFJ0LnB1c2godHQudmFsdWUpLFJ0Lmxlbmd0aCE9PWl0KTtQdD0hMCk7fWNhdGNoKFF0KXthaT0hMCxIZT1RdH1maW5hbGx5e3RyeXtpZighUHQmJm51bGwhPSRlLnJldHVybiYmKHF0PSRlLnJldHVybigpLE9iamVjdChxdCkh''@;'; put 'put ''PT1xdCkpcmV0dXJufWZpbmFsbHl7aWYoYWkpdGhyb3cgSGV9fXJldHVybiBSdH19KER0LGl0KXx8ZnVuY3Rpb24gZyhEdCxpdCl7aWYoRHQpe2lmKCJzdHJpbmciPT10eXBlb2YgRHQpcmV0dXJuIEIoRHQsaXQpO3ZhciAkZT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoRHQpLnNs''@;'; put 'put ''aWNlKDgsLTEpO2lmKCJPYmplY3QiPT09JGUmJkR0LmNvbnN0cnVjdG9yJiYoJGU9RHQuY29uc3RydWN0b3IubmFtZSksIk1hcCI9PT0kZXx8IlNldCI9PT0kZSlyZXR1cm4gQXJyYXkuZnJvbShEdCk7aWYoIkFyZ3VtZW50cyI9PT0kZXx8L14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFt''@;'; put 'put ''cGVkKT9BcnJheSQvLnRlc3QoJGUpKXJldHVybiBCKER0LGl0KX19KER0LGl0KXx8ZnVuY3Rpb24geSgpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9u''@;'; put 'put ''LWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuIil9KCl9ZnVuY3Rpb24gQihEdCxpdCl7KG51bGw9PWl0fHxpdD5EdC5sZW5ndGgpJiYoaXQ9RHQubGVuZ3RoKTtmb3IodmFyICRlPTAsdHQ9bmV3IEFycmF5KGl0KTskZTxpdDskZSsrKXR0WyRl''@;'; put 'put ''XT1EdFskZV07cmV0dXJuIHR0fWZ1bmN0aW9uIEYoRHQpe3JldHVybihGPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGl0KXtyZXR1cm4gdHlwZW9mIGl0fTpmdW5jdGlvbihpdCl7cmV0dXJuIGl0JiYiZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgU3ltYm9sJiZpdC5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmaXQhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBpdH0pKER0KX12YXIgTz12b2lkIDAhPT0vYS9nLmZsYWdzLHo9ZnVuY3Rpb24oaXQpe3ZhciAkZT1bXTtyZXR1cm4gaXQuZm9yRWFjaChmdW5j''@;'; put 'put ''dGlvbih0dCl7cmV0dXJuICRlLnB1c2godHQpfSksJGV9LE49ZnVuY3Rpb24oaXQpe3ZhciAkZT1bXTtyZXR1cm4gaXQuZm9yRWFjaChmdW5jdGlvbih0dCxIZSl7cmV0dXJuICRlLnB1c2goW0hlLHR0XSl9KSwkZX0sTD1PYmplY3QuaXM/T2JqZWN0LmlzOl8oNjA5KSxLPU9iamVjdC5nZXRP''@;'; put 'put ''d25Qcm9wZXJ0eVN5bWJvbHM/T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sczpmdW5jdGlvbigpe3JldHVybltdfSxVPU51bWJlci5pc05hTj9OdW1iZXIuaXNOYU46XygzNjApO2Z1bmN0aW9uIFcoRHQpe3JldHVybiBEdC5jYWxsLmJpbmQoRHQpfXZhciBZPVcoT2JqZWN0LnByb3RvdHlw''@;'; put 'put ''ZS5oYXNPd25Qcm9wZXJ0eSksWD1XKE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUpLGVlPVcoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyksSj1fKDk1MzkpLnR5cGVzLHJlPUouaXNBbnlBcnJheUJ1ZmZlcixpZT1KLmlzQXJyYXlCdWZmZXJWaWV3LGxlPUouaXNEYXRl''@;'; put 'put ''LG1lPUouaXNNYXAsX2U9Si5pc1JlZ0V4cCxUZT1KLmlzU2V0LFNlPUouaXNOYXRpdmVFcnJvcix6ZT1KLmlzQm94ZWRQcmltaXRpdmUsVj1KLmlzTnVtYmVyT2JqZWN0LHA9Si5pc1N0cmluZ09iamVjdCxiPUouaXNCb29sZWFuT2JqZWN0LHg9Si5pc0JpZ0ludE9iamVjdCxDPUouaXNTeW1i''@;'; put 'put ''b2xPYmplY3QsVD1KLmlzRmxvYXQzMkFycmF5LEg9Si5pc0Zsb2F0NjRBcnJheTtmdW5jdGlvbiBqKER0KXtpZigwPT09RHQubGVuZ3RofHxEdC5sZW5ndGg+MTApcmV0dXJuITA7Zm9yKHZhciBpdD0wO2l0PER0Lmxlbmd0aDtpdCsrKXt2YXIgJGU9RHQuY2hhckNvZGVBdChpdCk7aWYoJGU8''@;'; put 'put ''NDh8fCRlPjU3KXJldHVybiEwfXJldHVybiAxMD09PUR0Lmxlbmd0aCYmRHQ+PU1hdGgucG93KDIsMzIpfWZ1bmN0aW9uIEUoRHQpe3JldHVybiBPYmplY3Qua2V5cyhEdCkuZmlsdGVyKGopLmNvbmNhdChLKER0KS5maWx0ZXIoT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJs''@;'; put 'put ''ZS5iaW5kKER0KSkpfWZ1bmN0aW9uIG0oRHQsaXQpe2lmKER0PT09aXQpcmV0dXJuIDA7Zm9yKHZhciAkZT1EdC5sZW5ndGgsdHQ9aXQubGVuZ3RoLEhlPTAsZHQ9TWF0aC5taW4oJGUsdHQpO0hlPGR0OysrSGUpaWYoRHRbSGVdIT09aXRbSGVdKXskZT1EdFtIZV0sdHQ9aXRbSGVdO2JyZWFr''@;'; put 'put ''fXJldHVybiAkZTx0dD8tMTp0dDwkZT8xOjB9dmFyIHNlPTAsd2U9MSxVZT0yLEplPTM7ZnVuY3Rpb24gRGUoRHQsaXQsJGUsdHQpe2lmKER0PT09aXQpcmV0dXJuIDAhPT1EdHx8ISRlfHxMKER0LGl0KTtpZigkZSl7aWYoIm9iamVjdCIhPT1GKER0KSlyZXR1cm4ibnVtYmVyIj09dHlwZW9m''@;'; put 'put ''IER0JiZVKER0KSYmVShpdCk7aWYoIm9iamVjdCIhPT1GKGl0KXx8bnVsbD09PUR0fHxudWxsPT09aXR8fE9iamVjdC5nZXRQcm90b3R5cGVPZihEdCkhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoaXQpKXJldHVybiExfWVsc2V7aWYobnVsbD09PUR0fHwib2JqZWN0IiE9PUYoRHQpKXJldHVy''@;'; put 'put ''bihudWxsPT09aXR8fCJvYmplY3QiIT09RihpdCkpJiZEdD09aXQ7aWYobnVsbD09PWl0fHwib2JqZWN0IiE9PUYoaXQpKXJldHVybiExfXZhciBIZT1lZShEdCk7aWYoSGUhPT1lZShpdCkpcmV0dXJuITE7aWYoQXJyYXkuaXNBcnJheShEdCkpe2lmKER0Lmxlbmd0aCE9PWl0Lmxlbmd0aCly''@;'; put 'put ''ZXR1cm4hMTt2YXIgcXQ9RShEdCksUnQ9RShpdCk7cmV0dXJuIHF0Lmxlbmd0aD09PVJ0Lmxlbmd0aCYmUmUoRHQsaXQsJGUsdHQsd2UscXQpfWlmKCJbb2JqZWN0IE9iamVjdF0iPT09SGUmJighbWUoRHQpJiZtZShpdCl8fCFUZShEdCkmJlRlKGl0KSkpcmV0dXJuITE7aWYobGUoRHQpKXtp''@;'; put 'put ''ZighbGUoaXQpfHxEYXRlLnByb3RvdHlwZS5nZXRUaW1lLmNhbGwoRHQpIT09RGF0ZS5wcm90b3R5cGUuZ2V0VGltZS5jYWxsKGl0KSlyZXR1cm4hMX1lbHNlIGlmKF9lKER0KSl7aWYoIV9lKGl0KXx8IWZ1bmN0aW9uIGF0KER0LGl0KXtyZXR1cm4gTz9EdC5zb3VyY2U9PT1pdC5zb3VyY2Um''@;'; put 'put ''JkR0LmZsYWdzPT09aXQuZmxhZ3M6UmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKER0KT09PVJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpdCl9KER0LGl0KSlyZXR1cm4hMX1lbHNlIGlmKFNlKER0KXx8RHQgaW5zdGFuY2VvZiBFcnJvcil7aWYoRHQubWVzc2FnZSE9PWl0''@;'; put 'put ''Lm1lc3NhZ2V8fER0Lm5hbWUhPT1pdC5uYW1lKXJldHVybiExfWVsc2V7aWYoaWUoRHQpKXtpZigkZXx8IVQoRHQpJiYhSChEdCkpe2lmKCFmdW5jdGlvbiB2ZShEdCxpdCl7cmV0dXJuIER0LmJ5dGVMZW5ndGg9PT1pdC5ieXRlTGVuZ3RoJiYwPT09bShuZXcgVWludDhBcnJheShEdC5idWZm''@;'; put 'put ''ZXIsRHQuYnl0ZU9mZnNldCxEdC5ieXRlTGVuZ3RoKSxuZXcgVWludDhBcnJheShpdC5idWZmZXIsaXQuYnl0ZU9mZnNldCxpdC5ieXRlTGVuZ3RoKSl9KER0LGl0KSlyZXR1cm4hMX1lbHNlIGlmKCFmdW5jdGlvbiBNZShEdCxpdCl7aWYoRHQuYnl0ZUxlbmd0aCE9PWl0LmJ5dGVMZW5ndGgp''@;'; put 'put ''cmV0dXJuITE7Zm9yKHZhciAkZT0wOyRlPER0LmJ5dGVMZW5ndGg7JGUrKylpZihEdFskZV0hPT1pdFskZV0pcmV0dXJuITE7cmV0dXJuITB9KER0LGl0KSlyZXR1cm4hMTt2YXIgUHQ9RShEdCksYWk9RShpdCk7cmV0dXJuIFB0Lmxlbmd0aD09PWFpLmxlbmd0aCYmUmUoRHQsaXQsJGUsdHQs''@;'; put 'put ''c2UsUHQpfWlmKFRlKER0KSlyZXR1cm4hKCFUZShpdCl8fER0LnNpemUhPT1pdC5zaXplKSYmUmUoRHQsaXQsJGUsdHQsVWUpO2lmKG1lKER0KSlyZXR1cm4hKCFtZShpdCl8fER0LnNpemUhPT1pdC5zaXplKSYmUmUoRHQsaXQsJGUsdHQsSmUpO2lmKHJlKER0KSl7aWYoIWZ1bmN0aW9uIFhl''@;'; put 'put ''KER0LGl0KXtyZXR1cm4gRHQuYnl0ZUxlbmd0aD09PWl0LmJ5dGVMZW5ndGgmJjA9PT1tKG5ldyBVaW50OEFycmF5KER0KSxuZXcgVWludDhBcnJheShpdCkpfShEdCxpdCkpcmV0dXJuITF9ZWxzZSBpZih6ZShEdCkmJiFmdW5jdGlvbiBqZShEdCxpdCl7cmV0dXJuIFYoRHQpP1YoaXQpJiZM''@;'; put 'put ''KE51bWJlci5wcm90b3R5cGUudmFsdWVPZi5jYWxsKER0KSxOdW1iZXIucHJvdG90eXBlLnZhbHVlT2YuY2FsbChpdCkpOnAoRHQpP3AoaXQpJiZTdHJpbmcucHJvdG90eXBlLnZhbHVlT2YuY2FsbChEdCk9PT1TdHJpbmcucHJvdG90eXBlLnZhbHVlT2YuY2FsbChpdCk6YihEdCk/YihpdCkm''@;'; put 'put ''JkJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChEdCk9PT1Cb29sZWFuLnByb3RvdHlwZS52YWx1ZU9mLmNhbGwoaXQpOngoRHQpP3goaXQpJiZCaWdJbnQucHJvdG90eXBlLnZhbHVlT2YuY2FsbChEdCk9PT1CaWdJbnQucHJvdG90eXBlLnZhbHVlT2YuY2FsbChpdCk6QyhpdCkmJlN5''@;'; put 'put ''bWJvbC5wcm90b3R5cGUudmFsdWVPZi5jYWxsKER0KT09PVN5bWJvbC5wcm90b3R5cGUudmFsdWVPZi5jYWxsKGl0KX0oRHQsaXQpKXJldHVybiExfXJldHVybiBSZShEdCxpdCwkZSx0dCxzZSl9ZnVuY3Rpb24gRmUoRHQsaXQpe3JldHVybiBpdC5maWx0ZXIoZnVuY3Rpb24oJGUpe3JldHVy''@;'; put 'put ''biBYKER0LCRlKX0pfWZ1bmN0aW9uIFJlKER0LGl0LCRlLHR0LEhlLGR0KXtpZig1PT09YXJndW1lbnRzLmxlbmd0aCl7ZHQ9T2JqZWN0LmtleXMoRHQpO3ZhciBxdD1PYmplY3Qua2V5cyhpdCk7aWYoZHQubGVuZ3RoIT09cXQubGVuZ3RoKXJldHVybiExfWZvcih2YXIgUnQ9MDtSdDxkdC5s''@;'; put 'put ''ZW5ndGg7UnQrKylpZighWShpdCxkdFtSdF0pKXJldHVybiExO2lmKCRlJiY1PT09YXJndW1lbnRzLmxlbmd0aCl7dmFyIFB0PUsoRHQpO2lmKDAhPT1QdC5sZW5ndGgpe3ZhciBhaT0wO2ZvcihSdD0wO1J0PFB0Lmxlbmd0aDtSdCsrKXt2YXIgUXQ9UHRbUnRdO2lmKFgoRHQsUXQpKXtpZigh''@;'; put 'put ''WChpdCxRdCkpcmV0dXJuITE7ZHQucHVzaChRdCksYWkrK31lbHNlIGlmKFgoaXQsUXQpKXJldHVybiExfXZhciBzbj1LKGl0KTtpZihQdC5sZW5ndGghPT1zbi5sZW5ndGgmJkZlKGl0LHNuKS5sZW5ndGghPT1haSlyZXR1cm4hMX1lbHNle3ZhciBSaT1LKGl0KTtpZigwIT09UmkubGVuZ3Ro''@;'; put 'put ''JiYwIT09RmUoaXQsUmkpLmxlbmd0aClyZXR1cm4hMX19aWYoMD09PWR0Lmxlbmd0aCYmKEhlPT09c2V8fEhlPT09d2UmJjA9PT1EdC5sZW5ndGh8fDA9PT1EdC5zaXplKSlyZXR1cm4hMDtpZih2b2lkIDA9PT10dCl0dD17dmFsMTpuZXcgTWFwLHZhbDI6bmV3IE1hcCxwb3NpdGlvbjowfTtl''@;'; put 'put ''bHNle3ZhciBmbj10dC52YWwxLmdldChEdCk7aWYodm9pZCAwIT09Zm4pe3ZhciBmdD10dC52YWwyLmdldChpdCk7aWYodm9pZCAwIT09ZnQpcmV0dXJuIGZuPT09ZnR9dHQucG9zaXRpb24rK310dC52YWwxLnNldChEdCx0dC5wb3NpdGlvbiksdHQudmFsMi5zZXQoaXQsdHQucG9zaXRpb24p''@;'; put 'put ''O3ZhciBQcj1mdW5jdGlvbiBkbihEdCxpdCwkZSx0dCxIZSxkdCl7dmFyIHF0PTA7aWYoZHQ9PT1VZSl7aWYoIWZ1bmN0aW9uIF90KER0LGl0LCRlLHR0KXtmb3IodmFyIEhlPW51bGwsZHQ9eihEdCkscXQ9MDtxdDxkdC5sZW5ndGg7cXQrKyl7dmFyIFJ0PWR0W3F0XTtpZigib2JqZWN0Ij09''@;'; put 'put ''PUYoUnQpJiZudWxsIT09UnQpbnVsbD09PUhlJiYoSGU9bmV3IFNldCksSGUuYWRkKFJ0KTtlbHNlIGlmKCFpdC5oYXMoUnQpKXtpZigkZXx8IWtlKER0LGl0LFJ0KSlyZXR1cm4hMTtudWxsPT09SGUmJihIZT1uZXcgU2V0KSxIZS5hZGQoUnQpfX1pZihudWxsIT09SGUpe2Zvcih2YXIgUHQ9''@;'; put 'put ''eihpdCksYWk9MDthaTxQdC5sZW5ndGg7YWkrKyl7dmFyIFF0PVB0W2FpXTtpZigib2JqZWN0Ij09PUYoUXQpJiZudWxsIT09UXQpe2lmKCFJZShIZSxRdCwkZSx0dCkpcmV0dXJuITF9ZWxzZSBpZighJGUmJiFEdC5oYXMoUXQpJiYhSWUoSGUsUXQsJGUsdHQpKXJldHVybiExfXJldHVybiAw''@;'; put 'put ''PT09SGUuc2l6ZX1yZXR1cm4hMH0oRHQsaXQsJGUsSGUpKXJldHVybiExfWVsc2UgaWYoZHQ9PT1KZSl7aWYoIWZ1bmN0aW9uIFFlKER0LGl0LCRlLHR0KXtmb3IodmFyIEhlPW51bGwsZHQ9TihEdCkscXQ9MDtxdDxkdC5sZW5ndGg7cXQrKyl7dmFyIFJ0PUkoZHRbcXRdLDIpLFB0PVJ0WzBd''@;'; put 'put ''LGFpPVJ0WzFdO2lmKCJvYmplY3QiPT09RihQdCkmJm51bGwhPT1QdCludWxsPT09SGUmJihIZT1uZXcgU2V0KSxIZS5hZGQoUHQpO2Vsc2V7dmFyIFF0PWl0LmdldChQdCk7aWYodm9pZCAwPT09UXQmJiFpdC5oYXMoUHQpfHwhRGUoYWksUXQsJGUsdHQpKXtpZigkZXx8IUFlKER0LGl0LFB0''@;'; put 'put ''LGFpLHR0KSlyZXR1cm4hMTtudWxsPT09SGUmJihIZT1uZXcgU2V0KSxIZS5hZGQoUHQpfX19aWYobnVsbCE9PUhlKXtmb3IodmFyIHNuPU4oaXQpLFJpPTA7Umk8c24ubGVuZ3RoO1JpKyspe3ZhciBmbj1JKHNuW1JpXSwyKSxmdD1mblswXSxQcj1mblsxXTtpZigib2JqZWN0Ij09PUYoZnQp''@;'; put 'put ''JiZudWxsIT09ZnQpe2lmKCFydChIZSxEdCxmdCxQciwkZSx0dCkpcmV0dXJuITF9ZWxzZSBpZighKCRlfHxEdC5oYXMoZnQpJiZEZShEdC5nZXQoZnQpLFByLCExLHR0KXx8cnQoSGUsRHQsZnQsUHIsITEsdHQpKSlyZXR1cm4hMX1yZXR1cm4gMD09PUhlLnNpemV9cmV0dXJuITB9KER0LGl0''@;'; put 'put ''LCRlLEhlKSlyZXR1cm4hMX1lbHNlIGlmKGR0PT09d2UpZm9yKDtxdDxEdC5sZW5ndGg7cXQrKyl7aWYoIVkoRHQscXQpKXtpZihZKGl0LHF0KSlyZXR1cm4hMTtmb3IodmFyIFJ0PU9iamVjdC5rZXlzKER0KTtxdDxSdC5sZW5ndGg7cXQrKyl7dmFyIFB0PVJ0W3F0XTtpZighWShpdCxQdCl8''@;'; put 'put ''fCFEZShEdFtQdF0saXRbUHRdLCRlLEhlKSlyZXR1cm4hMX1yZXR1cm4gUnQubGVuZ3RoPT09T2JqZWN0LmtleXMoaXQpLmxlbmd0aH1pZighWShpdCxxdCl8fCFEZShEdFtxdF0saXRbcXRdLCRlLEhlKSlyZXR1cm4hMX1mb3IocXQ9MDtxdDx0dC5sZW5ndGg7cXQrKyl7dmFyIGFpPXR0W3F0''@;'; put 'put ''XTtpZighRGUoRHRbYWldLGl0W2FpXSwkZSxIZSkpcmV0dXJuITF9cmV0dXJuITB9KER0LGl0LCRlLGR0LHR0LEhlKTtyZXR1cm4gdHQudmFsMS5kZWxldGUoRHQpLHR0LnZhbDIuZGVsZXRlKGl0KSxQcn1mdW5jdGlvbiBJZShEdCxpdCwkZSx0dCl7Zm9yKHZhciBIZT16KER0KSxkdD0wO2R0''@;'; put 'put ''PEhlLmxlbmd0aDtkdCsrKXt2YXIgcXQ9SGVbZHRdO2lmKERlKGl0LHF0LCRlLHR0KSlyZXR1cm4gRHQuZGVsZXRlKHF0KSwhMH1yZXR1cm4hMX1mdW5jdGlvbiBWZShEdCl7c3dpdGNoKEYoRHQpKXtjYXNlInVuZGVmaW5lZCI6cmV0dXJuIG51bGw7Y2FzZSJvYmplY3QiOnJldHVybjtjYXNl''@;'; put 'put ''InN5bWJvbCI6cmV0dXJuITE7Y2FzZSJzdHJpbmciOkR0PStEdDtjYXNlIm51bWJlciI6aWYoVShEdCkpcmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24ga2UoRHQsaXQsJGUpe3ZhciB0dD1WZSgkZSk7cmV0dXJuIHR0Pz8oaXQuaGFzKHR0KSYmIUR0Lmhhcyh0dCkpfWZ1bmN0aW9uIEFlKER0''@;'; put 'put ''LGl0LCRlLHR0LEhlKXt2YXIgZHQ9VmUoJGUpO2lmKG51bGwhPWR0KXJldHVybiBkdDt2YXIgcXQ9aXQuZ2V0KGR0KTtyZXR1cm4hKHZvaWQgMD09PXF0JiYhaXQuaGFzKGR0KXx8IURlKHR0LHF0LCExLEhlKSkmJiFEdC5oYXMoZHQpJiZEZSh0dCxxdCwhMSxIZSl9ZnVuY3Rpb24gcnQoRHQs''@;'; put 'put ''aXQsJGUsdHQsSGUsZHQpe2Zvcih2YXIgcXQ9eihEdCksUnQ9MDtSdDxxdC5sZW5ndGg7UnQrKyl7dmFyIFB0PXF0W1J0XTtpZihEZSgkZSxQdCxIZSxkdCkmJkRlKHR0LGl0LmdldChQdCksSGUsZHQpKXJldHVybiBEdC5kZWxldGUoUHQpLCEwfXJldHVybiExfXVlLmV4cG9ydHM9e2lzRGVl''@;'; put 'put ''cEVxdWFsOmZ1bmN0aW9uIHl0KER0LGl0KXtyZXR1cm4gRGUoRHQsaXQsITEpfSxpc0RlZXBTdHJpY3RFcXVhbDpmdW5jdGlvbiBNdChEdCxpdCl7cmV0dXJuIERlKER0LGl0LCEwKX19fSw4MjI0Oih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01v''@;'; put 'put ''ZHVsZSIse3ZhbHVlOiEwfSkscS53cmFwcGVyPWZ1bmN0aW9uIF8oSSl7cmV0dXJuIEl9fSw5NzQyOih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtxLmJ5dGVMZW5ndGg9ZnVuY3Rpb24gRihVKXt2YXIgVz1QKFUpLFg9V1sxXTtyZXR1cm4gMyooV1swXStYKS80LVh9LHEudG9CeXRlQXJyYXk9ZnVu''@;'; put 'put ''Y3Rpb24geihVKXt2YXIgVyxsZSxZPVAoVSksWD1ZWzBdLGVlPVlbMV0sSj1uZXcgeShmdW5jdGlvbiBPKFUsVyxZKXtyZXR1cm4gMyooVytZKS80LVl9KDAsWCxlZSkpLHJlPTAsaWU9ZWU+MD9YLTQ6WDtmb3IobGU9MDtsZTxpZTtsZSs9NClXPUlbVS5jaGFyQ29kZUF0KGxlKV08PDE4fElb''@;'; put 'put ''VS5jaGFyQ29kZUF0KGxlKzEpXTw8MTJ8SVtVLmNoYXJDb2RlQXQobGUrMildPDw2fElbVS5jaGFyQ29kZUF0KGxlKzMpXSxKW3JlKytdPVc+PjE2JjI1NSxKW3JlKytdPVc+PjgmMjU1LEpbcmUrK109MjU1Jlc7cmV0dXJuIDI9PT1lZSYmKFc9SVtVLmNoYXJDb2RlQXQobGUpXTw8MnxJW1Uu''@;'; put 'put ''Y2hhckNvZGVBdChsZSsxKV0+PjQsSltyZSsrXT0yNTUmVyksMT09PWVlJiYoVz1JW1UuY2hhckNvZGVBdChsZSldPDwxMHxJW1UuY2hhckNvZGVBdChsZSsxKV08PDR8SVtVLmNoYXJDb2RlQXQobGUrMildPj4yLEpbcmUrK109Vz4+OCYyNTUsSltyZSsrXT0yNTUmVyksSn0scS5mcm9tQnl0''@;'; put 'put ''ZUFycmF5PWZ1bmN0aW9uIEsoVSl7Zm9yKHZhciBXLFk9VS5sZW5ndGgsWD1ZJTMsZWU9W10sSj0xNjM4MyxyZT0wLGllPVktWDtyZTxpZTtyZSs9SillZS5wdXNoKEwoVSxyZSxyZStKPmllP2llOnJlK0opKTtyZXR1cm4gMT09PVg/ZWUucHVzaChfWyhXPVVbWS0xXSk+PjJdK19bVzw8NCY2''@;'; put 'put ''M10rIj09Iik6Mj09PVgmJmVlLnB1c2goX1soVz0oVVtZLTJdPDw4KStVW1ktMV0pPj4xMF0rX1tXPj40JjYzXStfW1c8PDImNjNdKyI9IiksZWUuam9pbigiIil9O2Zvcih2YXIgXz1bXSxJPVtdLHk9dHlwZW9mIFVpbnQ4QXJyYXk8InUiP1VpbnQ4QXJyYXk6QXJyYXksZz0iQUJDREVGR0hJ''@;'; put 'put ''SktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIsQj0wO0I8NjQ7KytCKV9bQl09Z1tCXSxJW2cuY2hhckNvZGVBdChCKV09QjtmdW5jdGlvbiBQKFUpe3ZhciBXPVUubGVuZ3RoO2lmKFclND4wKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBz''@;'; put 'put ''dHJpbmcuIExlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNCIpO3ZhciBZPVUuaW5kZXhPZigiPSIpO3JldHVybi0xPT09WSYmKFk9VyksW1ksWT09PVc/MDo0LVklNF19ZnVuY3Rpb24gTihVKXtyZXR1cm4gX1tVPj4xOCY2M10rX1tVPj4xMiY2M10rX1tVPj42JjYzXStfWzYzJlVdfWZ1''@;'; put 'put ''bmN0aW9uIEwoVSxXLFkpe2Zvcih2YXIgZWU9W10sSj1XO0o8WTtKKz0zKWVlLnB1c2goTigoVVtKXTw8MTYmMTY3MTE2ODApKyhVW0orMV08PDgmNjUyODApKygyNTUmVVtKKzJdKSkpO3JldHVybiBlZS5qb2luKCIiKX1JWzQ1XT02MixJWzk1XT02M30sMzU1MDpmdW5jdGlvbih1ZSxxLF8p''@;'; put 'put ''eyFmdW5jdGlvbihJLHkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBnKHgsQyl7aWYoIXgpdGhyb3cgbmV3IEVycm9yKEN8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gQih4LEMpe3guc3VwZXJfPUM7dmFyIFQ9ZnVuY3Rpb24oKXt9O1QucHJvdG90eXBlPUMucHJvdG90eXBlLHgucHJv''@;'; put 'put ''dG90eXBlPW5ldyBULHgucHJvdG90eXBlLmNvbnN0cnVjdG9yPXh9ZnVuY3Rpb24gdyh4LEMsVCl7aWYody5pc0JOKHgpKXJldHVybiB4O3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT14JiYoKCJsZSI9PT1DfHwiYmUi''@;'; put 'put ''PT09QykmJihUPUMsQz0xMCksdGhpcy5faW5pdCh4fHwwLEN8fDEwLFR8fCJiZSIpKX12YXIgUDsib2JqZWN0Ij09dHlwZW9mIEk/SS5leHBvcnRzPXc6eS5CTj13LHcuQk49dyx3LndvcmRTaXplPTI2O3RyeXtQPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/''@;'; put 'put ''d2luZG93LkJ1ZmZlcjpfKDY2MDEpLkJ1ZmZlcn1jYXRjaHt9ZnVuY3Rpb24gRih4LEMpe3ZhciBUPXguY2hhckNvZGVBdChDKTtyZXR1cm4gVD49NDgmJlQ8PTU3P1QtNDg6VD49NjUmJlQ8PTcwP1QtNTU6VD49OTcmJlQ8PTEwMj9ULTg3OnZvaWQgZyghMSwiSW52YWxpZCBjaGFyYWN0ZXIg''@;'; put 'put ''aW4gIit4KX1mdW5jdGlvbiBPKHgsQyxUKXt2YXIgSD1GKHgsVCk7cmV0dXJuIFQtMT49QyYmKEh8PUYoeCxULTEpPDw0KSxIfWZ1bmN0aW9uIHooeCxDLFQsSCl7Zm9yKHZhciBqPTAsRT0wLG09TWF0aC5taW4oeC5sZW5ndGgsVCksQT1DO0E8bTtBKyspe3ZhciBvZT14LmNoYXJDb2RlQXQo''@;'; put 'put ''QSktNDg7aio9SCxFPW9lPj00OT9vZS00OSsxMDpvZT49MTc/b2UtMTcrMTA6b2UsZyhvZT49MCYmRTxILCJJbnZhbGlkIGNoYXJhY3RlciIpLGorPUV9cmV0dXJuIGp9ZnVuY3Rpb24gTih4LEMpe3gud29yZHM9Qy53b3Jkcyx4Lmxlbmd0aD1DLmxlbmd0aCx4Lm5lZ2F0aXZlPUMubmVnYXRp''@;'; put 'put ''dmUseC5yZWQ9Qy5yZWR9aWYody5pc0JOPWZ1bmN0aW9uKEMpe3JldHVybiBDIGluc3RhbmNlb2Ygd3x8bnVsbCE9PUMmJiJvYmplY3QiPT10eXBlb2YgQyYmQy5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkoQy53b3Jkcyl9LHcubWF4PWZ1bmN0aW9u''@;'; put 'put ''KEMsVCl7cmV0dXJuIEMuY21wKFQpPjA/QzpUfSx3Lm1pbj1mdW5jdGlvbihDLFQpe3JldHVybiBDLmNtcChUKTwwP0M6VH0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oQyxULEgpe2lmKCJudW1iZXIiPT10eXBlb2YgQylyZXR1cm4gdGhpcy5faW5pdE51bWJlcihDLFQsSCk7aWYoIm9i''@;'; put 'put ''amVjdCI9PXR5cGVvZiBDKXJldHVybiB0aGlzLl9pbml0QXJyYXkoQyxULEgpOyJoZXgiPT09VCYmKFQ9MTYpLGcoVD09PSgwfFQpJiZUPj0yJiZUPD0zNik7dmFyIGo9MDsiLSI9PT0oQz1DLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKGorKyx0aGlzLm5lZ2F0aXZlPTEp''@;'; put 'put ''LGo8Qy5sZW5ndGgmJigxNj09PVQ/dGhpcy5fcGFyc2VIZXgoQyxqLEgpOih0aGlzLl9wYXJzZUJhc2UoQyxULGopLCJsZSI9PT1IJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksVCxIKSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihDLFQsSCl7QzwwJiYodGhp''@;'; put 'put ''cy5uZWdhdGl2ZT0xLEM9LUMpLEM8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJkNdLHRoaXMubGVuZ3RoPTEpOkM8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmQyxDLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooZyhDPDkwMDcxOTkyNTQ3''@;'; put 'put ''NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJkMsQy82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09SCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLFQsSCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24oQyxULEgpe2lmKGcoIm51bWJl''@;'; put 'put ''ciI9PXR5cGVvZiBDLmxlbmd0aCksQy5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoQy5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgaj0wO2o8dGhpcy5sZW5n''@;'; put 'put ''dGg7aisrKXRoaXMud29yZHNbal09MDt2YXIgRSxtLEE9MDtpZigiYmUiPT09SClmb3Ioaj1DLmxlbmd0aC0xLEU9MDtqPj0wO2otPTMpdGhpcy53b3Jkc1tFXXw9KG09Q1tqXXxDW2otMV08PDh8Q1tqLTJdPDwxNik8PEEmNjcxMDg4NjMsdGhpcy53b3Jkc1tFKzFdPW0+Pj4yNi1BJjY3MTA4''@;'; put 'put ''ODYzLChBKz0yNCk+PTI2JiYoQS09MjYsRSsrKTtlbHNlIGlmKCJsZSI9PT1IKWZvcihqPTAsRT0wO2o8Qy5sZW5ndGg7ais9Myl0aGlzLndvcmRzW0VdfD0obT1DW2pdfENbaisxXTw8OHxDW2orMl08PDE2KTw8QSY2NzEwODg2Myx0aGlzLndvcmRzW0UrMV09bT4+PjI2LUEmNjcxMDg4NjMs''@;'; put 'put ''KEErPTI0KT49MjYmJihBLT0yNixFKyspO3JldHVybiB0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24oQyxULEgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgoQy5sZW5ndGgtVCkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIg''@;'; put 'put ''aj0wO2o8dGhpcy5sZW5ndGg7aisrKXRoaXMud29yZHNbal09MDt2YXIgQSxFPTAsbT0wO2lmKCJiZSI9PT1IKWZvcihqPUMubGVuZ3RoLTE7aj49VDtqLT0yKUE9TyhDLFQsaik8PEUsdGhpcy53b3Jkc1ttXXw9NjcxMDg4NjMmQSxFPj0xOD8oRS09MTgsdGhpcy53b3Jkc1ttKz0xXXw9QT4+''@;'; put 'put ''PjI2KTpFKz04O2Vsc2UgZm9yKGo9KEMubGVuZ3RoLVQpJTI9PTA/VCsxOlQ7ajxDLmxlbmd0aDtqKz0yKUE9TyhDLFQsaik8PEUsdGhpcy53b3Jkc1ttXXw9NjcxMDg4NjMmQSxFPj0xOD8oRS09MTgsdGhpcy53b3Jkc1ttKz0xXXw9QT4+PjI2KTpFKz04O3RoaXMuX3N0cmlwKCl9LHcucHJv''@;'; put 'put ''dG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24oQyxULEgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBqPTAsRT0xO0U8PTY3MTA4ODYzO0UqPVQpaisrO2otLSxFPUUvVHwwO2Zvcih2YXIgbT1DLmxlbmd0aC1ILEE9bSVqLG9lPU1hdGgubWluKG0sbS1BKStILHRlPTAs''@;'; put 'put ''c2U9SDtzZTxvZTtzZSs9ail0ZT16KEMsc2Usc2UraixUKSx0aGlzLmltdWxuKEUpLHRoaXMud29yZHNbMF0rdGU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9dGU6dGhpcy5faWFkZG4odGUpO2lmKDAhPT1BKXt2YXIgd2U9MTtmb3IodGU9eihDLHNlLEMubGVuZ3RoLFQpLHNlPTA7c2U8QTtz''@;'; put 'put ''ZSsrKXdlKj1UO3RoaXMuaW11bG4od2UpLHRoaXMud29yZHNbMF0rdGU8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9dGU6dGhpcy5faWFkZG4odGUpfXRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oQyl7Qy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2''@;'; put 'put ''YXIgVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKUMud29yZHNbVF09dGhpcy53b3Jkc1tUXTtDLmxlbmd0aD10aGlzLmxlbmd0aCxDLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsQy5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLl9tb3ZlPWZ1bmN0aW9uKEMpe04oQyx0aGlzKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''Y2xvbmU9ZnVuY3Rpb24oKXt2YXIgQz1uZXcgdyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KEMpLEN9LHcucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24oQyl7Zm9yKDt0aGlzLmxlbmd0aDxDOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLl9z''@;'; put 'put ''dHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9''@;'; put 'put ''PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx0eXBlb2YgU3ltYm9sPCJ1IiYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbC5mb3IpdHJ5e3cucHJvdG90eXBlW1N5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIildPUx9Y2F0Y2h7dy5wcm90b3R5''@;'; put 'put ''cGUuaW5zcGVjdD1MfWVsc2Ugdy5wcm90b3R5cGUuaW5zcGVjdD1MO2Z1bmN0aW9uIEwoKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9TdHJpbmcoMTYpKyI+In12YXIgSz1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAw''@;'; put 'put ''MDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxVPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLFc9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1''@;'; put 'put ''MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0''@;'; put 'put ''ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gZWUoeCxDLFQpe1QubmVnYXRpdmU9Qy5uZWdhdGl2ZV54Lm5lZ2F0aXZlO3ZhciBIPXgubGVuZ3RoK0MubGVuZ3RofDA7VC5s''@;'; put 'put ''ZW5ndGg9SCxIPUgtMXwwO3ZhciBqPTB8eC53b3Jkc1swXSxFPTB8Qy53b3Jkc1swXSxtPWoqRSxvZT1tLzY3MTA4ODY0fDA7VC53b3Jkc1swXT02NzEwODg2MyZtO2Zvcih2YXIgdGU9MTt0ZTxIO3RlKyspe2Zvcih2YXIgc2U9b2U+Pj4yNix3ZT02NzEwODg2MyZvZSxVZT1NYXRoLm1pbih0''@;'; put 'put ''ZSxDLmxlbmd0aC0xKSxKZT1NYXRoLm1heCgwLHRlLXgubGVuZ3RoKzEpO0plPD1VZTtKZSsrKXNlKz0obT0oaj0wfHgud29yZHNbdGUtSmV8MF0pKihFPTB8Qy53b3Jkc1tKZV0pK3dlKS82NzEwODg2NHwwLHdlPTY3MTA4ODYzJm07VC53b3Jkc1t0ZV09MHx3ZSxvZT0wfHNlfXJldHVybiAw''@;'; put 'put ''IT09b2U/VC53b3Jkc1t0ZV09MHxvZTpULmxlbmd0aC0tLFQuX3N0cmlwKCl9dy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oQyxUKXt2YXIgSDtpZihUPTB8VHx8MSwxNj09PShDPUN8fDEwKXx8ImhleCI9PT1DKXtIPSIiO2Zvcih2YXIgaj0wLEU9MCxtPTA7bTx0aGlzLmxlbmd0aDtt''@;'; put 'put ''Kyspe3ZhciBBPXRoaXMud29yZHNbbV0sb2U9KDE2Nzc3MjE1JihBPDxqfEUpKS50b1N0cmluZygxNik7RT1BPj4+MjQtaiYxNjc3NzIxNSwoais9Mik+PTI2JiYoai09MjYsbS0tKSxIPTAhPT1FfHxtIT09dGhpcy5sZW5ndGgtMT9LWzYtb2UubGVuZ3RoXStvZStIOm9lK0h9Zm9yKDAhPT1F''@;'; put 'put ''JiYoSD1FLnRvU3RyaW5nKDE2KStIKTtILmxlbmd0aCVUIT0wOylIPSIwIitIO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9aWYoQz09PSgwfEMpJiZDPj0yJiZDPD0zNil7dmFyIHRlPVVbQ10sc2U9V1tDXTtIPSIiO3ZhciB3ZT10aGlzLmNsb25lKCk7Zm9yKHdlLm5l''@;'; put 'put ''Z2F0aXZlPTA7IXdlLmlzWmVybygpOyl7dmFyIFVlPXdlLm1vZHJuKHNlKS50b1N0cmluZyhDKTtIPSh3ZT13ZS5pZGl2bihzZSkpLmlzWmVybygpP1VlK0g6S1t0ZS1VZS5sZW5ndGhdK1VlK0h9Zm9yKHRoaXMuaXNaZXJvKCkmJihIPSIwIitIKTtILmxlbmd0aCVUIT0wOylIPSIwIitIO3Jl''@;'; put 'put ''dHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKEg9Ii0iK0gpLEh9ZyghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBDPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9DKz02NzEwODg2NCp0''@;'; put 'put ''aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/Qys9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJmcoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlz''@;'; put 'put ''Lm5lZ2F0aXZlPy1DOkN9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2LDIpfSxQJiYody5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShQLEMsVCl9KSx3LnByb3RvdHlwZS50b0FycmF5''@;'; put 'put ''PWZ1bmN0aW9uKEMsVCl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksQyxUKX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24oQyxULEgpe3RoaXMuX3N0cmlwKCk7dmFyIGo9dGhpcy5ieXRlTGVuZ3RoKCksRT1IfHxNYXRoLm1heCgxLGopO2coajw9RSwiYnl0ZSBhcnJh''@;'; put 'put ''eSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLGcoRT4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKTt2YXIgbT1mdW5jdGlvbihDLFQpe3JldHVybiBDLmFsbG9jVW5zYWZlP0MuYWxsb2NVbnNhZmUoVCk6bmV3IEMoVCl9KEMsRSk7cmV0dXJuIHRoaXNbIl90b0FycmF5TGlr''@;'; put 'put ''ZSIrKCJsZSI9PT1UPyJMRSI6IkJFIildKG0saiksbX0sdy5wcm90b3R5cGUuX3RvQXJyYXlMaWtlTEU9ZnVuY3Rpb24oQyxUKXtmb3IodmFyIEg9MCxqPTAsRT0wLG09MDtFPHRoaXMubGVuZ3RoO0UrKyl7dmFyIEE9dGhpcy53b3Jkc1tFXTw8bXxqO0NbSCsrXT0yNTUmQSxIPEMubGVuZ3Ro''@;'; put 'put ''JiYoQ1tIKytdPUE+PjgmMjU1KSxIPEMubGVuZ3RoJiYoQ1tIKytdPUE+PjE2JjI1NSksNj09PW0/KEg8Qy5sZW5ndGgmJihDW0grK109QT4+MjQmMjU1KSxqPTAsbT0wKTooaj1BPj4+MjQsbSs9Mil9aWYoSDxDLmxlbmd0aClmb3IoQ1tIKytdPWo7SDxDLmxlbmd0aDspQ1tIKytdPTB9LHcu''@;'; put 'put ''cHJvdG90eXBlLl90b0FycmF5TGlrZUJFPWZ1bmN0aW9uKEMsVCl7Zm9yKHZhciBIPUMubGVuZ3RoLTEsaj0wLEU9MCxtPTA7RTx0aGlzLmxlbmd0aDtFKyspe3ZhciBBPXRoaXMud29yZHNbRV08PG18ajtDW0gtLV09MjU1JkEsSD49MCYmKENbSC0tXT1BPj44JjI1NSksSD49MCYmKENbSC0t''@;'; put 'put ''XT1BPj4xNiYyNTUpLDY9PT1tPyhIPj0wJiYoQ1tILS1dPUE+PjI0JjI1NSksaj0wLG09MCk6KGo9QT4+PjI0LG0rPTIpfWlmKEg+PTApZm9yKENbSC0tXT1qO0g+PTA7KUNbSC0tXT0wfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24oQyl7cmV0dXJuIDMyLU1h''@;'; put 'put ''dGguY2x6MzIoQyl9OmZ1bmN0aW9uKEMpe3ZhciBUPUMsSD0wO3JldHVybiBUPj00MDk2JiYoSCs9MTMsVD4+Pj0xMyksVD49NjQmJihIKz03LFQ+Pj49NyksVD49OCYmKEgrPTQsVD4+Pj00KSxUPj0yJiYoSCs9MixUPj4+PTIpLEgrVH0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9u''@;'; put 'put ''KEMpe2lmKDA9PT1DKXJldHVybiAyNjt2YXIgVD1DLEg9MDtyZXR1cm4gODE5MSZUfHwoSCs9MTMsVD4+Pj0xMyksMTI3JlR8fChIKz03LFQ+Pj49NyksMTUmVHx8KEgrPTQsVD4+Pj00KSwzJlR8fChIKz0yLFQ+Pj49MiksMSZUfHxIKyssSH0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0''@;'; put 'put ''aW9uKCl7dmFyIFQ9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrVH0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgQz0wLFQ9MDtUPHRoaXMu''@;'; put 'put ''bGVuZ3RoO1QrKyl7dmFyIEg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tUXSk7aWYoQys9SCwyNiE9PUgpYnJlYWt9cmV0dXJuIEN9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBlLnRv''@;'; put 'put ''VHdvcz1mdW5jdGlvbihDKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihDKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLnRlc3RuKEMtMSk/dGhpcy5ub3RuKEMpLmlhZGRuKDEpLmlu''@;'; put 'put ''ZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0''@;'; put 'put ''aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihDKXtmb3IoO3RoaXMubGVuZ3RoPEMubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBUPTA7VDxDLmxlbmd0aDtUKyspdGhpcy53b3Jkc1tUXT10''@;'; put 'put ''aGlzLndvcmRzW1RdfEMud29yZHNbVF07cmV0dXJuIHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihDKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8Qy5uZWdhdGl2ZSkpLHRoaXMuaXVvcihDKX0sdy5wcm90b3R5cGUub3I9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMu''@;'; put 'put ''bGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IoQyk6Qy5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmxlbmd0aD5DLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihDKTpDLmNsb25lKCkuaXVvcih0aGlzKX0sdy5wcm90b3R5''@;'; put 'put ''cGUuaXVhbmQ9ZnVuY3Rpb24oQyl7dmFyIFQ7VD10aGlzLmxlbmd0aD5DLmxlbmd0aD9DOnRoaXM7Zm9yKHZhciBIPTA7SDxULmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT10aGlzLndvcmRzW0hdJkMud29yZHNbSF07cmV0dXJuIHRoaXMubGVuZ3RoPVQubGVuZ3RoLHRoaXMuX3N0cmlwKCl9''@;'; put 'put ''LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24oQyl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfEMubmVnYXRpdmUpKSx0aGlzLml1YW5kKEMpfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKEMpOkMuY2xv''@;'; put 'put ''bmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmxlbmd0aD5DLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQoQyk6Qy5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihDKXt2YXIgVCxIO3RoaXMubGVu''@;'; put 'put ''Z3RoPkMubGVuZ3RoPyhUPXRoaXMsSD1DKTooVD1DLEg9dGhpcyk7Zm9yKHZhciBqPTA7ajxILmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1ULndvcmRzW2pdXkgud29yZHNbal07aWYodGhpcyE9PVQpZm9yKDtqPFQubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPVQud29yZHNbal07cmV0dXJu''@;'; put 'put ''IHRoaXMubGVuZ3RoPVQubGVuZ3RoLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24oQyl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfEMubmVnYXRpdmUpKSx0aGlzLml1eG9yKEMpfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3Ro''@;'; put 'put ''PkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKEMpOkMuY2xvbmUoKS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmxlbmd0aD5DLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IoQyk6Qy5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5pbm90bj1mdW5jdGlvbihDKXtnKCJudW1iZXIiPT10eXBlb2YgQyYmQz49MCk7dmFyIFQ9MHxNYXRoLmNlaWwoQy8yNiksSD1DJTI2O3RoaXMuX2V4cGFuZChUKSxIPjAmJlQtLTtmb3IodmFyIGo9MDtqPFQ7aisrKXRoaXMud29yZHNbal09NjcxMDg4NjMmfnRoaXMud29yZHNbal07cmV0''@;'; put 'put ''dXJuIEg+MCYmKHRoaXMud29yZHNbal09fnRoaXMud29yZHNbal0mNjcxMDg4NjM+PjI2LUgpLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihDKX0sdy5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihDLFQpe2coIm51''@;'; put 'put ''bWJlciI9PXR5cGVvZiBDJiZDPj0wKTt2YXIgSD1DLzI2fDAsaj1DJTI2O3JldHVybiB0aGlzLl9leHBhbmQoSCsxKSx0aGlzLndvcmRzW0hdPVQ/dGhpcy53b3Jkc1tIXXwxPDxqOnRoaXMud29yZHNbSF0mfigxPDxqKSx0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9u''@;'; put 'put ''KEMpe3ZhciBULEgsajtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PUMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxUPXRoaXMuaXN1YihDKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1DLm5lZ2F0aXZlKXJldHVy''@;'; put 'put ''biBDLm5lZ2F0aXZlPTAsVD10aGlzLmlzdWIoQyksQy5uZWdhdGl2ZT0xLFQuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+Qy5sZW5ndGg/KEg9dGhpcyxqPUMpOihIPUMsaj10aGlzKTtmb3IodmFyIEU9MCxtPTA7bTxqLmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT02NzEwODg2MyYoVD0oMHxI''@;'; put 'put ''LndvcmRzW21dKSsoMHxqLndvcmRzW21dKStFKSxFPVQ+Pj4yNjtmb3IoOzAhPT1FJiZtPEgubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPTY3MTA4ODYzJihUPSgwfEgud29yZHNbbV0pK0UpLEU9VD4+PjI2O2lmKHRoaXMubGVuZ3RoPUgubGVuZ3RoLDAhPT1FKXRoaXMud29yZHNbdGhpcy5s''@;'; put 'put ''ZW5ndGhdPUUsdGhpcy5sZW5ndGgrKztlbHNlIGlmKEghPT10aGlzKWZvcig7bTxILmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT1ILndvcmRzW21dO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oQyl7dmFyIFQ7cmV0dXJuIDAhPT1DLm5lZ2F0aXZlJiYwPT09dGhpcy5u''@;'; put 'put ''ZWdhdGl2ZT8oQy5uZWdhdGl2ZT0wLFQ9dGhpcy5zdWIoQyksQy5uZWdhdGl2ZV49MSxUKTowPT09Qy5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxUPUMuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxUKTp0aGlzLmxlbmd0aD5DLmxlbmd0aD90aGlzLmNs''@;'; put 'put ''b25lKCkuaWFkZChDKTpDLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihDKXtpZigwIT09Qy5uZWdhdGl2ZSl7Qy5uZWdhdGl2ZT0wO3ZhciBUPXRoaXMuaWFkZChDKTtyZXR1cm4gQy5uZWdhdGl2ZT0xLFQuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVn''@;'; put 'put ''YXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQoQyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIGosRSxIPXRoaXMuY21wKEMpO2lmKDA9PT1IKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpcztI''@;'; put 'put ''PjA/KGo9dGhpcyxFPUMpOihqPUMsRT10aGlzKTtmb3IodmFyIG09MCxBPTA7QTxFLmxlbmd0aDtBKyspbT0oVD0oMHxqLndvcmRzW0FdKS0oMHxFLndvcmRzW0FdKSttKT4+MjYsdGhpcy53b3Jkc1tBXT02NzEwODg2MyZUO2Zvcig7MCE9PW0mJkE8ai5sZW5ndGg7QSsrKW09KFQ9KDB8ai53''@;'; put 'put ''b3Jkc1tBXSkrbSk+PjI2LHRoaXMud29yZHNbQV09NjcxMDg4NjMmVDtpZigwPT09bSYmQTxqLmxlbmd0aCYmaiE9PXRoaXMpZm9yKDtBPGoubGVuZ3RoO0ErKyl0aGlzLndvcmRzW0FdPWoud29yZHNbQV07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLEEpLGohPT10''@;'; put 'put ''aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKEMpfTt2YXIgSj1mdW5jdGlvbihDLFQsSCl7dmFyIG9lLHRlLHNlLGo9Qy53b3JkcyxFPVQud29yZHMsbT1ILndvcmRzLEE9MCx3''@;'; put 'put ''ZT0wfGpbMF0sVWU9ODE5MSZ3ZSxKZT13ZT4+PjEzLGF0PTB8alsxXSxNZT04MTkxJmF0LHZlPWF0Pj4+MTMsWGU9MHxqWzJdLGplPTgxOTEmWGUsRGU9WGU+Pj4xMyxGZT0wfGpbM10sUmU9ODE5MSZGZSxJZT1GZT4+PjEzLFZlPTB8als0XSxrZT04MTkxJlZlLEFlPVZlPj4+MTMsX3Q9MHxq''@;'; put 'put ''WzVdLHJ0PTgxOTEmX3QsUWU9X3Q+Pj4xMyxkbj0wfGpbNl0seXQ9ODE5MSZkbixNdD1kbj4+PjEzLER0PTB8als3XSxpdD04MTkxJkR0LCRlPUR0Pj4+MTMsdHQ9MHxqWzhdLEhlPTgxOTEmdHQsZHQ9dHQ+Pj4xMyxxdD0wfGpbOV0sUnQ9ODE5MSZxdCxQdD1xdD4+PjEzLGFpPTB8RVswXSxR''@;'; put 'put ''dD04MTkxJmFpLHNuPWFpPj4+MTMsUmk9MHxFWzFdLGZuPTgxOTEmUmksZnQ9Umk+Pj4xMyxQcj0wfEVbMl0sWnQ9ODE5MSZQcixBdD1Qcj4+PjEzLExuPTB8RVszXSxzdD04MTkxJkxuLHp0PUxuPj4+MTMsbmk9MHxFWzRdLFdlPTgxOTEmbmksVHQ9bmk+Pj4xMyxycj0wfEVbNV0saHQ9ODE5''@;'; put 'put ''MSZycix4dD1ycj4+PjEzLEJuPTB8RVs2XSxvbj04MTkxJkJuLGp0PUJuPj4+MTMsZGk9MHxFWzddLGNuPTgxOTEmZGkscG49ZGk+Pj4xMyxJaT0wfEVbOF0sWHQ9ODE5MSZJaSxlbj1JaT4+PjEzLGhvPTB8RVs5XSxNaT04MTkxJmhvLHByPWhvPj4+MTM7SC5uZWdhdGl2ZT1DLm5lZ2F0aXZl''@;'; put 'put ''XlQubmVnYXRpdmUsSC5sZW5ndGg9MTk7dmFyIFduPShBKyhvZT1NYXRoLmltdWwoVWUsUXQpKXwwKSsoKDgxOTEmKHRlPSh0ZT1NYXRoLmltdWwoVWUsc24pKStNYXRoLmltdWwoSmUsUXQpfDApKTw8MTMpfDA7QT0oKHNlPU1hdGguaW11bChKZSxzbikpKyh0ZT4+PjEzKXwwKSsoV24+Pj4y''@;'; put 'put ''Nil8MCxXbiY9NjcxMDg4NjMsb2U9TWF0aC5pbXVsKE1lLFF0KSx0ZT0odGU9TWF0aC5pbXVsKE1lLHNuKSkrTWF0aC5pbXVsKHZlLFF0KXwwLHNlPU1hdGguaW11bCh2ZSxzbik7dmFyIEtpPShBKyhvZT1vZStNYXRoLmltdWwoVWUsZm4pfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGgu''@;'; put 'put ''aW11bChVZSxmdCl8MCkrTWF0aC5pbXVsKEplLGZuKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoSmUsZnQpfDApKyh0ZT4+PjEzKXwwKSsoS2k+Pj4yNil8MCxLaSY9NjcxMDg4NjMsb2U9TWF0aC5pbXVsKGplLFF0KSx0ZT0odGU9TWF0aC5pbXVsKGplLHNuKSkrTWF0aC5pbXVs''@;'; put 'put ''KERlLFF0KXwwLHNlPU1hdGguaW11bChEZSxzbiksb2U9b2UrTWF0aC5pbXVsKE1lLGZuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoTWUsZnQpfDApK01hdGguaW11bCh2ZSxmbil8MCxzZT1zZStNYXRoLmltdWwodmUsZnQpfDA7dmFyIFFyPShBKyhvZT1vZStNYXRoLmltdWwoVWUsWnQpfDAp''@;'; put 'put ''fDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChVZSxBdCl8MCkrTWF0aC5pbXVsKEplLFp0KXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoSmUsQXQpfDApKyh0ZT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxRciY9NjcxMDg4NjMsb2U9TWF0aC5pbXVsKFJlLFF0KSx0ZT0odGU9''@;'; put 'put ''TWF0aC5pbXVsKFJlLHNuKSkrTWF0aC5pbXVsKEllLFF0KXwwLHNlPU1hdGguaW11bChJZSxzbiksb2U9b2UrTWF0aC5pbXVsKGplLGZuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoamUsZnQpfDApK01hdGguaW11bChEZSxmbil8MCxzZT1zZStNYXRoLmltdWwoRGUsZnQpfDAsb2U9b2UrTWF0''@;'; put 'put ''aC5pbXVsKE1lLFp0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoTWUsQXQpfDApK01hdGguaW11bCh2ZSxadCl8MCxzZT1zZStNYXRoLmltdWwodmUsQXQpfDA7dmFyIEpyPShBKyhvZT1vZStNYXRoLmltdWwoVWUsc3QpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChVZSx6dCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKEplLHN0KXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoSmUsenQpfDApKyh0ZT4+PjEzKXwwKSsoSnI+Pj4yNil8MCxKciY9NjcxMDg4NjMsb2U9TWF0aC5pbXVsKGtlLFF0KSx0ZT0odGU9TWF0aC5pbXVsKGtlLHNuKSkrTWF0aC5pbXVsKEFlLFF0KXwwLHNl''@;'; put 'put ''PU1hdGguaW11bChBZSxzbiksb2U9b2UrTWF0aC5pbXVsKFJlLGZuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoUmUsZnQpfDApK01hdGguaW11bChJZSxmbil8MCxzZT1zZStNYXRoLmltdWwoSWUsZnQpfDAsb2U9b2UrTWF0aC5pbXVsKGplLFp0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoamUs''@;'; put 'put ''QXQpfDApK01hdGguaW11bChEZSxadCl8MCxzZT1zZStNYXRoLmltdWwoRGUsQXQpfDAsb2U9b2UrTWF0aC5pbXVsKE1lLHN0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoTWUsenQpfDApK01hdGguaW11bCh2ZSxzdCl8MCxzZT1zZStNYXRoLmltdWwodmUsenQpfDA7dmFyIEJpPShBKyhvZT1v''@;'; put 'put ''ZStNYXRoLmltdWwoVWUsV2UpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChVZSxUdCl8MCkrTWF0aC5pbXVsKEplLFdlKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoSmUsVHQpfDApKyh0ZT4+PjEzKXwwKSsoQmk+Pj4yNil8MCxCaSY9NjcxMDg4NjMsb2U9TWF0''@;'; put 'put ''aC5pbXVsKHJ0LFF0KSx0ZT0odGU9TWF0aC5pbXVsKHJ0LHNuKSkrTWF0aC5pbXVsKFFlLFF0KXwwLHNlPU1hdGguaW11bChRZSxzbiksb2U9b2UrTWF0aC5pbXVsKGtlLGZuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoa2UsZnQpfDApK01hdGguaW11bChBZSxmbil8MCxzZT1zZStNYXRoLmlt''@;'; put 'put ''dWwoQWUsZnQpfDAsb2U9b2UrTWF0aC5pbXVsKFJlLFp0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoUmUsQXQpfDApK01hdGguaW11bChJZSxadCl8MCxzZT1zZStNYXRoLmltdWwoSWUsQXQpfDAsb2U9b2UrTWF0aC5pbXVsKGplLHN0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoamUsenQpfDAp''@;'; put 'put ''K01hdGguaW11bChEZSxzdCl8MCxzZT1zZStNYXRoLmltdWwoRGUsenQpfDAsb2U9b2UrTWF0aC5pbXVsKE1lLFdlKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoTWUsVHQpfDApK01hdGguaW11bCh2ZSxXZSl8MCxzZT1zZStNYXRoLmltdWwodmUsVHQpfDA7dmFyIFZpPShBKyhvZT1vZStNYXRo''@;'; put 'put ''LmltdWwoVWUsaHQpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChVZSx4dCl8MCkrTWF0aC5pbXVsKEplLGh0KXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoSmUseHQpfDApKyh0ZT4+PjEzKXwwKSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMsb2U9TWF0aC5pbXVs''@;'; put 'put ''KHl0LFF0KSx0ZT0odGU9TWF0aC5pbXVsKHl0LHNuKSkrTWF0aC5pbXVsKE10LFF0KXwwLHNlPU1hdGguaW11bChNdCxzbiksb2U9b2UrTWF0aC5pbXVsKHJ0LGZuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwocnQsZnQpfDApK01hdGguaW11bChRZSxmbil8MCxzZT1zZStNYXRoLmltdWwoUWUs''@;'; put 'put ''ZnQpfDAsb2U9b2UrTWF0aC5pbXVsKGtlLFp0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoa2UsQXQpfDApK01hdGguaW11bChBZSxadCl8MCxzZT1zZStNYXRoLmltdWwoQWUsQXQpfDAsb2U9b2UrTWF0aC5pbXVsKFJlLHN0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoUmUsenQpfDApK01hdGgu''@;'; put 'put ''aW11bChJZSxzdCl8MCxzZT1zZStNYXRoLmltdWwoSWUsenQpfDAsb2U9b2UrTWF0aC5pbXVsKGplLFdlKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoamUsVHQpfDApK01hdGguaW11bChEZSxXZSl8MCxzZT1zZStNYXRoLmltdWwoRGUsVHQpfDAsb2U9b2UrTWF0aC5pbXVsKE1lLGh0KXwwLHRl''@;'; put 'put ''PSh0ZT10ZStNYXRoLmltdWwoTWUseHQpfDApK01hdGguaW11bCh2ZSxodCl8MCxzZT1zZStNYXRoLmltdWwodmUseHQpfDA7dmFyIElvPShBKyhvZT1vZStNYXRoLmltdWwoVWUsb24pfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChVZSxqdCl8MCkrTWF0aC5pbXVsKEplLG9u''@;'; put 'put ''KXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoSmUsanQpfDApKyh0ZT4+PjEzKXwwKSsoSW8+Pj4yNil8MCxJbyY9NjcxMDg4NjMsb2U9TWF0aC5pbXVsKGl0LFF0KSx0ZT0odGU9TWF0aC5pbXVsKGl0LHNuKSkrTWF0aC5pbXVsKCRlLFF0KXwwLHNlPU1hdGguaW11bCgkZSxzbiks''@;'; put 'put ''b2U9b2UrTWF0aC5pbXVsKHl0LGZuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeXQsZnQpfDApK01hdGguaW11bChNdCxmbil8MCxzZT1zZStNYXRoLmltdWwoTXQsZnQpfDAsb2U9b2UrTWF0aC5pbXVsKHJ0LFp0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwocnQsQXQpfDApK01hdGguaW11bChR''@;'; put 'put ''ZSxadCl8MCxzZT1zZStNYXRoLmltdWwoUWUsQXQpfDAsb2U9b2UrTWF0aC5pbXVsKGtlLHN0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoa2UsenQpfDApK01hdGguaW11bChBZSxzdCl8MCxzZT1zZStNYXRoLmltdWwoQWUsenQpfDAsb2U9b2UrTWF0aC5pbXVsKFJlLFdlKXwwLHRlPSh0ZT10''@;'; put 'put ''ZStNYXRoLmltdWwoUmUsVHQpfDApK01hdGguaW11bChJZSxXZSl8MCxzZT1zZStNYXRoLmltdWwoSWUsVHQpfDAsb2U9b2UrTWF0aC5pbXVsKGplLGh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoamUseHQpfDApK01hdGguaW11bChEZSxodCl8MCxzZT1zZStNYXRoLmltdWwoRGUseHQpfDAs''@;'; put 'put ''b2U9b2UrTWF0aC5pbXVsKE1lLG9uKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoTWUsanQpfDApK01hdGguaW11bCh2ZSxvbil8MCxzZT1zZStNYXRoLmltdWwodmUsanQpfDA7dmFyIE9yPShBKyhvZT1vZStNYXRoLmltdWwoVWUsY24pfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11''@;'; put 'put ''bChVZSxwbil8MCkrTWF0aC5pbXVsKEplLGNuKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoSmUscG4pfDApKyh0ZT4+PjEzKXwwKSsoT3I+Pj4yNil8MCxPciY9NjcxMDg4NjMsb2U9TWF0aC5pbXVsKEhlLFF0KSx0ZT0odGU9TWF0aC5pbXVsKEhlLHNuKSkrTWF0aC5pbXVsKGR0''@;'; put 'put ''LFF0KXwwLHNlPU1hdGguaW11bChkdCxzbiksb2U9b2UrTWF0aC5pbXVsKGl0LGZuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCgkZSxmbil8MCxzZT1zZStNYXRoLmltdWwoJGUsZnQpfDAsb2U9b2UrTWF0aC5pbXVsKHl0LFp0KXwwLHRlPSh0ZT10ZStNYXRo''@;'; put 'put ''LmltdWwoeXQsQXQpfDApK01hdGguaW11bChNdCxadCl8MCxzZT1zZStNYXRoLmltdWwoTXQsQXQpfDAsb2U9b2UrTWF0aC5pbXVsKHJ0LHN0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwocnQsenQpfDApK01hdGguaW11bChRZSxzdCl8MCxzZT1zZStNYXRoLmltdWwoUWUsenQpfDAsb2U9b2Ur''@;'; put 'put ''TWF0aC5pbXVsKGtlLFdlKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoa2UsVHQpfDApK01hdGguaW11bChBZSxXZSl8MCxzZT1zZStNYXRoLmltdWwoQWUsVHQpfDAsb2U9b2UrTWF0aC5pbXVsKFJlLGh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoUmUseHQpfDApK01hdGguaW11bChJZSxodCl8''@;'; put 'put ''MCxzZT1zZStNYXRoLmltdWwoSWUseHQpfDAsb2U9b2UrTWF0aC5pbXVsKGplLG9uKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoamUsanQpfDApK01hdGguaW11bChEZSxvbil8MCxzZT1zZStNYXRoLmltdWwoRGUsanQpfDAsb2U9b2UrTWF0aC5pbXVsKE1lLGNuKXwwLHRlPSh0ZT10ZStNYXRo''@;'; put 'put ''LmltdWwoTWUscG4pfDApK01hdGguaW11bCh2ZSxjbil8MCxzZT1zZStNYXRoLmltdWwodmUscG4pfDA7dmFyIFlpPShBKyhvZT1vZStNYXRoLmltdWwoVWUsWHQpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChVZSxlbil8MCkrTWF0aC5pbXVsKEplLFh0KXwwKSk8PDEzKXww''@;'; put 'put ''O0E9KChzZT1zZStNYXRoLmltdWwoSmUsZW4pfDApKyh0ZT4+PjEzKXwwKSsoWWk+Pj4yNil8MCxZaSY9NjcxMDg4NjMsb2U9TWF0aC5pbXVsKFJ0LFF0KSx0ZT0odGU9TWF0aC5pbXVsKFJ0LHNuKSkrTWF0aC5pbXVsKFB0LFF0KXwwLHNlPU1hdGguaW11bChQdCxzbiksb2U9b2UrTWF0aC5p''@;'; put 'put ''bXVsKEhlLGZuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoSGUsZnQpfDApK01hdGguaW11bChkdCxmbil8MCxzZT1zZStNYXRoLmltdWwoZHQsZnQpfDAsb2U9b2UrTWF0aC5pbXVsKGl0LFp0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoaXQsQXQpfDApK01hdGguaW11bCgkZSxadCl8MCxzZT1z''@;'; put 'put ''ZStNYXRoLmltdWwoJGUsQXQpfDAsb2U9b2UrTWF0aC5pbXVsKHl0LHN0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeXQsenQpfDApK01hdGguaW11bChNdCxzdCl8MCxzZT1zZStNYXRoLmltdWwoTXQsenQpfDAsb2U9b2UrTWF0aC5pbXVsKHJ0LFdlKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwo''@;'; put 'put ''cnQsVHQpfDApK01hdGguaW11bChRZSxXZSl8MCxzZT1zZStNYXRoLmltdWwoUWUsVHQpfDAsb2U9b2UrTWF0aC5pbXVsKGtlLGh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoa2UseHQpfDApK01hdGguaW11bChBZSxodCl8MCxzZT1zZStNYXRoLmltdWwoQWUseHQpfDAsb2U9b2UrTWF0aC5p''@;'; put 'put ''bXVsKFJlLG9uKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoUmUsanQpfDApK01hdGguaW11bChJZSxvbil8MCxzZT1zZStNYXRoLmltdWwoSWUsanQpfDAsb2U9b2UrTWF0aC5pbXVsKGplLGNuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoamUscG4pfDApK01hdGguaW11bChEZSxjbil8MCxzZT1z''@;'; put 'put ''ZStNYXRoLmltdWwoRGUscG4pfDAsb2U9b2UrTWF0aC5pbXVsKE1lLFh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoTWUsZW4pfDApK01hdGguaW11bCh2ZSxYdCl8MCxzZT1zZStNYXRoLmltdWwodmUsZW4pfDA7dmFyIGdvPShBKyhvZT1vZStNYXRoLmltdWwoVWUsTWkpfDApfDApKygoODE5''@;'; put 'put ''MSYodGU9KHRlPXRlK01hdGguaW11bChVZSxwcil8MCkrTWF0aC5pbXVsKEplLE1pKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoSmUscHIpfDApKyh0ZT4+PjEzKXwwKSsoZ28+Pj4yNil8MCxnbyY9NjcxMDg4NjMsb2U9TWF0aC5pbXVsKFJ0LGZuKSx0ZT0odGU9TWF0aC5pbXVs''@;'; put 'put ''KFJ0LGZ0KSkrTWF0aC5pbXVsKFB0LGZuKXwwLHNlPU1hdGguaW11bChQdCxmdCksb2U9b2UrTWF0aC5pbXVsKEhlLFp0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoSGUsQXQpfDApK01hdGguaW11bChkdCxadCl8MCxzZT1zZStNYXRoLmltdWwoZHQsQXQpfDAsb2U9b2UrTWF0aC5pbXVsKGl0''@;'; put 'put ''LHN0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCgkZSxzdCl8MCxzZT1zZStNYXRoLmltdWwoJGUsenQpfDAsb2U9b2UrTWF0aC5pbXVsKHl0LFdlKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeXQsVHQpfDApK01hdGguaW11bChNdCxXZSl8MCxzZT1zZStNYXRo''@;'; put 'put ''LmltdWwoTXQsVHQpfDAsb2U9b2UrTWF0aC5pbXVsKHJ0LGh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwocnQseHQpfDApK01hdGguaW11bChRZSxodCl8MCxzZT1zZStNYXRoLmltdWwoUWUseHQpfDAsb2U9b2UrTWF0aC5pbXVsKGtlLG9uKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoa2UsanQp''@;'; put 'put ''fDApK01hdGguaW11bChBZSxvbil8MCxzZT1zZStNYXRoLmltdWwoQWUsanQpfDAsb2U9b2UrTWF0aC5pbXVsKFJlLGNuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoUmUscG4pfDApK01hdGguaW11bChJZSxjbil8MCxzZT1zZStNYXRoLmltdWwoSWUscG4pfDAsb2U9b2UrTWF0aC5pbXVsKGpl''@;'; put 'put ''LFh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoamUsZW4pfDApK01hdGguaW11bChEZSxYdCl8MCxzZT1zZStNYXRoLmltdWwoRGUsZW4pfDA7dmFyIGVyPShBKyhvZT1vZStNYXRoLmltdWwoTWUsTWkpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChNZSxwcil8MCkrTWF0aC5p''@;'; put 'put ''bXVsKHZlLE1pKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwodmUscHIpfDApKyh0ZT4+PjEzKXwwKSsoZXI+Pj4yNil8MCxlciY9NjcxMDg4NjMsb2U9TWF0aC5pbXVsKFJ0LFp0KSx0ZT0odGU9TWF0aC5pbXVsKFJ0LEF0KSkrTWF0aC5pbXVsKFB0LFp0KXwwLHNlPU1hdGguaW11''@;'; put 'put ''bChQdCxBdCksb2U9b2UrTWF0aC5pbXVsKEhlLHN0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoSGUsenQpfDApK01hdGguaW11bChkdCxzdCl8MCxzZT1zZStNYXRoLmltdWwoZHQsenQpfDAsb2U9b2UrTWF0aC5pbXVsKGl0LFdlKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoaXQsVHQpfDApK01h''@;'; put 'put ''dGguaW11bCgkZSxXZSl8MCxzZT1zZStNYXRoLmltdWwoJGUsVHQpfDAsb2U9b2UrTWF0aC5pbXVsKHl0LGh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeXQseHQpfDApK01hdGguaW11bChNdCxodCl8MCxzZT1zZStNYXRoLmltdWwoTXQseHQpfDAsb2U9b2UrTWF0aC5pbXVsKHJ0LG9uKXww''@;'; put 'put ''LHRlPSh0ZT10ZStNYXRoLmltdWwocnQsanQpfDApK01hdGguaW11bChRZSxvbil8MCxzZT1zZStNYXRoLmltdWwoUWUsanQpfDAsb2U9b2UrTWF0aC5pbXVsKGtlLGNuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoa2UscG4pfDApK01hdGguaW11bChBZSxjbil8MCxzZT1zZStNYXRoLmltdWwo''@;'; put 'put ''QWUscG4pfDAsb2U9b2UrTWF0aC5pbXVsKFJlLFh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoUmUsZW4pfDApK01hdGguaW11bChJZSxYdCl8MCxzZT1zZStNYXRoLmltdWwoSWUsZW4pfDA7dmFyIGNvPShBKyhvZT1vZStNYXRoLmltdWwoamUsTWkpfDApfDApKygoODE5MSYodGU9KHRlPXRl''@;'; put 'put ''K01hdGguaW11bChqZSxwcil8MCkrTWF0aC5pbXVsKERlLE1pKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoRGUscHIpfDApKyh0ZT4+PjEzKXwwKSsoY28+Pj4yNil8MCxjbyY9NjcxMDg4NjMsb2U9TWF0aC5pbXVsKFJ0LHN0KSx0ZT0odGU9TWF0aC5pbXVsKFJ0LHp0KSkrTWF0''@;'; put 'put ''aC5pbXVsKFB0LHN0KXwwLHNlPU1hdGguaW11bChQdCx6dCksb2U9b2UrTWF0aC5pbXVsKEhlLFdlKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoSGUsVHQpfDApK01hdGguaW11bChkdCxXZSl8MCxzZT1zZStNYXRoLmltdWwoZHQsVHQpfDAsb2U9b2UrTWF0aC5pbXVsKGl0LGh0KXwwLHRlPSh0''@;'; put 'put ''ZT10ZStNYXRoLmltdWwoaXQseHQpfDApK01hdGguaW11bCgkZSxodCl8MCxzZT1zZStNYXRoLmltdWwoJGUseHQpfDAsb2U9b2UrTWF0aC5pbXVsKHl0LG9uKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeXQsanQpfDApK01hdGguaW11bChNdCxvbil8MCxzZT1zZStNYXRoLmltdWwoTXQsanQp''@;'; put 'put ''fDAsb2U9b2UrTWF0aC5pbXVsKHJ0LGNuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwocnQscG4pfDApK01hdGguaW11bChRZSxjbil8MCxzZT1zZStNYXRoLmltdWwoUWUscG4pfDAsb2U9b2UrTWF0aC5pbXVsKGtlLFh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoa2UsZW4pfDApK01hdGguaW11''@;'; put 'put ''bChBZSxYdCl8MCxzZT1zZStNYXRoLmltdWwoQWUsZW4pfDA7dmFyIF9vPShBKyhvZT1vZStNYXRoLmltdWwoUmUsTWkpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChSZSxwcil8MCkrTWF0aC5pbXVsKEllLE1pKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoSWUs''@;'; put 'put ''cHIpfDApKyh0ZT4+PjEzKXwwKSsoX28+Pj4yNil8MCxfbyY9NjcxMDg4NjMsb2U9TWF0aC5pbXVsKFJ0LFdlKSx0ZT0odGU9TWF0aC5pbXVsKFJ0LFR0KSkrTWF0aC5pbXVsKFB0LFdlKXwwLHNlPU1hdGguaW11bChQdCxUdCksb2U9b2UrTWF0aC5pbXVsKEhlLGh0KXwwLHRlPSh0ZT10ZStN''@;'; put 'put ''YXRoLmltdWwoSGUseHQpfDApK01hdGguaW11bChkdCxodCl8MCxzZT1zZStNYXRoLmltdWwoZHQseHQpfDAsb2U9b2UrTWF0aC5pbXVsKGl0LG9uKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoaXQsanQpfDApK01hdGguaW11bCgkZSxvbil8MCxzZT1zZStNYXRoLmltdWwoJGUsanQpfDAsb2U9''@;'; put 'put ''b2UrTWF0aC5pbXVsKHl0LGNuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeXQscG4pfDApK01hdGguaW11bChNdCxjbil8MCxzZT1zZStNYXRoLmltdWwoTXQscG4pfDAsb2U9b2UrTWF0aC5pbXVsKHJ0LFh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwocnQsZW4pfDApK01hdGguaW11bChRZSxY''@;'; put 'put ''dCl8MCxzZT1zZStNYXRoLmltdWwoUWUsZW4pfDA7dmFyIE9vPShBKyhvZT1vZStNYXRoLmltdWwoa2UsTWkpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChrZSxwcil8MCkrTWF0aC5pbXVsKEFlLE1pKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoQWUscHIpfDAp''@;'; put 'put ''Kyh0ZT4+PjEzKXwwKSsoT28+Pj4yNil8MCxPbyY9NjcxMDg4NjMsb2U9TWF0aC5pbXVsKFJ0LGh0KSx0ZT0odGU9TWF0aC5pbXVsKFJ0LHh0KSkrTWF0aC5pbXVsKFB0LGh0KXwwLHNlPU1hdGguaW11bChQdCx4dCksb2U9b2UrTWF0aC5pbXVsKEhlLG9uKXwwLHRlPSh0ZT10ZStNYXRoLmlt''@;'; put 'put ''dWwoSGUsanQpfDApK01hdGguaW11bChkdCxvbil8MCxzZT1zZStNYXRoLmltdWwoZHQsanQpfDAsb2U9b2UrTWF0aC5pbXVsKGl0LGNuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoaXQscG4pfDApK01hdGguaW11bCgkZSxjbil8MCxzZT1zZStNYXRoLmltdWwoJGUscG4pfDAsb2U9b2UrTWF0''@;'; put 'put ''aC5pbXVsKHl0LFh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoeXQsZW4pfDApK01hdGguaW11bChNdCxYdCl8MCxzZT1zZStNYXRoLmltdWwoTXQsZW4pfDA7dmFyIEhvPShBKyhvZT1vZStNYXRoLmltdWwocnQsTWkpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChydCxwcil8''@;'; put 'put ''MCkrTWF0aC5pbXVsKFFlLE1pKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoUWUscHIpfDApKyh0ZT4+PjEzKXwwKSsoSG8+Pj4yNil8MCxIbyY9NjcxMDg4NjMsb2U9TWF0aC5pbXVsKFJ0LG9uKSx0ZT0odGU9TWF0aC5pbXVsKFJ0LGp0KSkrTWF0aC5pbXVsKFB0LG9uKXwwLHNl''@;'; put 'put ''PU1hdGguaW11bChQdCxqdCksb2U9b2UrTWF0aC5pbXVsKEhlLGNuKXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoSGUscG4pfDApK01hdGguaW11bChkdCxjbil8MCxzZT1zZStNYXRoLmltdWwoZHQscG4pfDAsb2U9b2UrTWF0aC5pbXVsKGl0LFh0KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoaXQs''@;'; put 'put ''ZW4pfDApK01hdGguaW11bCgkZSxYdCl8MCxzZT1zZStNYXRoLmltdWwoJGUsZW4pfDA7dmFyIGVpPShBKyhvZT1vZStNYXRoLmltdWwoeXQsTWkpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bCh5dCxwcil8MCkrTWF0aC5pbXVsKE10LE1pKXwwKSk8PDEzKXwwO0E9KChzZT1z''@;'; put 'put ''ZStNYXRoLmltdWwoTXQscHIpfDApKyh0ZT4+PjEzKXwwKSsoZWk+Pj4yNil8MCxlaSY9NjcxMDg4NjMsb2U9TWF0aC5pbXVsKFJ0LGNuKSx0ZT0odGU9TWF0aC5pbXVsKFJ0LHBuKSkrTWF0aC5pbXVsKFB0LGNuKXwwLHNlPU1hdGguaW11bChQdCxwbiksb2U9b2UrTWF0aC5pbXVsKEhlLFh0''@;'; put 'put ''KXwwLHRlPSh0ZT10ZStNYXRoLmltdWwoSGUsZW4pfDApK01hdGguaW11bChkdCxYdCl8MCxzZT1zZStNYXRoLmltdWwoZHQsZW4pfDA7dmFyIGdhPShBKyhvZT1vZStNYXRoLmltdWwoaXQsTWkpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChpdCxwcil8MCkrTWF0aC5pbXVs''@;'; put 'put ''KCRlLE1pKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoJGUscHIpfDApKyh0ZT4+PjEzKXwwKSsoZ2E+Pj4yNil8MCxnYSY9NjcxMDg4NjMsb2U9TWF0aC5pbXVsKFJ0LFh0KSx0ZT0odGU9TWF0aC5pbXVsKFJ0LGVuKSkrTWF0aC5pbXVsKFB0LFh0KXwwLHNlPU1hdGguaW11bChQ''@;'; put 'put ''dCxlbik7dmFyIE5zPShBKyhvZT1vZStNYXRoLmltdWwoSGUsTWkpfDApfDApKygoODE5MSYodGU9KHRlPXRlK01hdGguaW11bChIZSxwcil8MCkrTWF0aC5pbXVsKGR0LE1pKXwwKSk8PDEzKXwwO0E9KChzZT1zZStNYXRoLmltdWwoZHQscHIpfDApKyh0ZT4+PjEzKXwwKSsoTnM+Pj4yNil8''@;'; put 'put ''MCxOcyY9NjcxMDg4NjM7dmFyIG1sPShBKyhvZT1NYXRoLmltdWwoUnQsTWkpKXwwKSsoKDgxOTEmKHRlPSh0ZT1NYXRoLmltdWwoUnQscHIpKStNYXRoLmltdWwoUHQsTWkpfDApKTw8MTMpfDA7cmV0dXJuIEE9KChzZT1NYXRoLmltdWwoUHQscHIpKSsodGU+Pj4xMyl8MCkrKG1sPj4+MjYp''@;'; put 'put ''fDAsbWwmPTY3MTA4ODYzLG1bMF09V24sbVsxXT1LaSxtWzJdPVFyLG1bM109SnIsbVs0XT1CaSxtWzVdPVZpLG1bNl09SW8sbVs3XT1PcixtWzhdPVlpLG1bOV09Z28sbVsxMF09ZXIsbVsxMV09Y28sbVsxMl09X28sbVsxM109T28sbVsxNF09SG8sbVsxNV09ZWksbVsxNl09Z2EsbVsxN109''@;'; put 'put ''TnMsbVsxOF09bWwsMCE9PUEmJihtWzE5XT1BLEgubGVuZ3RoKyspLEh9O2Z1bmN0aW9uIHJlKHgsQyxUKXtULm5lZ2F0aXZlPUMubmVnYXRpdmVeeC5uZWdhdGl2ZSxULmxlbmd0aD14Lmxlbmd0aCtDLmxlbmd0aDtmb3IodmFyIEg9MCxqPTAsRT0wO0U8VC5sZW5ndGgtMTtFKyspe3ZhciBt''@;'; put 'put ''PWo7aj0wO2Zvcih2YXIgQT02NzEwODg2MyZILG9lPU1hdGgubWluKEUsQy5sZW5ndGgtMSksdGU9TWF0aC5tYXgoMCxFLXgubGVuZ3RoKzEpO3RlPD1vZTt0ZSsrKXt2YXIgSmU9KDB8eC53b3Jkc1tFLXRlXSkqKDB8Qy53b3Jkc1t0ZV0pLGF0PTY3MTA4ODYzJkplO0E9NjcxMDg4NjMmKGF0''@;'; put 'put ''PWF0K0F8MCksais9KG09KG09bSsoSmUvNjcxMDg4NjR8MCl8MCkrKGF0Pj4+MjYpfDApPj4+MjYsbSY9NjcxMDg4NjN9VC53b3Jkc1tFXT1BLEg9bSxtPWp9cmV0dXJuIDAhPT1IP1Qud29yZHNbRV09SDpULmxlbmd0aC0tLFQuX3N0cmlwKCl9ZnVuY3Rpb24gaWUoeCxDLFQpe3JldHVybiBy''@;'; put 'put ''ZSh4LEMsVCl9ZnVuY3Rpb24gbGUoeCxDKXt0aGlzLng9eCx0aGlzLnk9Q31NYXRoLmltdWx8fChKPWVlKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihDLFQpe3ZhciBqPXRoaXMubGVuZ3RoK0MubGVuZ3RoO3JldHVybiAxMD09PXRoaXMubGVuZ3RoJiYxMD09PUMubGVuZ3RoP0oodGhp''@;'; put 'put ''cyxDLFQpOmo8NjM/ZWUodGhpcyxDLFQpOmo8MTAyND9yZSh0aGlzLEMsVCk6aWUodGhpcyxDLFQpfSxsZS5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihDKXtmb3IodmFyIFQ9bmV3IEFycmF5KEMpLEg9dy5wcm90b3R5cGUuX2NvdW50Qml0cyhDKS0xLGo9MDtqPEM7aisrKVRbal09dGhp''@;'; put 'put ''cy5yZXZCaW4oaixILEMpO3JldHVybiBUfSxsZS5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKEMsVCxIKXtpZigwPT09Q3x8Qz09PUgtMSlyZXR1cm4gQztmb3IodmFyIGo9MCxFPTA7RTxUO0UrKylqfD0oMSZDKTw8VC1FLTEsQz4+PTE7cmV0dXJuIGp9LGxlLnByb3RvdHlwZS5wZXJtdXRl''@;'; put 'put ''PWZ1bmN0aW9uKEMsVCxILGosRSxtKXtmb3IodmFyIEE9MDtBPG07QSsrKWpbQV09VFtDW0FdXSxFW0FdPUhbQ1tBXV19LGxlLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24oQyxULEgsaixFLG0pe3RoaXMucGVybXV0ZShtLEMsVCxILGosRSk7Zm9yKHZhciBBPTE7QTxFO0E8PD0xKWZv''@;'; put 'put ''cih2YXIgb2U9QTw8MSx0ZT1NYXRoLmNvcygyKk1hdGguUEkvb2UpLHNlPU1hdGguc2luKDIqTWF0aC5QSS9vZSksd2U9MDt3ZTxFO3dlKz1vZSlmb3IodmFyIFVlPXRlLEplPXNlLGF0PTA7YXQ8QTthdCsrKXt2YXIgTWU9SFt3ZSthdF0sdmU9alt3ZSthdF0sWGU9SFt3ZSthdCtBXSxqZT1q''@;'; put 'put ''W3dlK2F0K0FdLERlPVVlKlhlLUplKmplO2plPVVlKmplK0plKlhlLEhbd2UrYXRdPU1lKyhYZT1EZSksalt3ZSthdF09dmUramUsSFt3ZSthdCtBXT1NZS1YZSxqW3dlK2F0K0FdPXZlLWplLGF0IT09b2UmJihEZT10ZSpVZS1zZSpKZSxKZT10ZSpKZStzZSpVZSxVZT1EZSl9fSxsZS5wcm90''@;'; put 'put ''b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24oQyxUKXt2YXIgSD0xfE1hdGgubWF4KFQsQyksaj0xJkgsRT0wO2ZvcihIPUgvMnwwO0g7SD4+Pj0xKUUrKztyZXR1cm4gMTw8RSsxK2p9LGxlLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24oQyxULEgpe2lmKCEoSDw9MSkpZm9yKHZhciBq''@;'; put 'put ''PTA7ajxILzI7aisrKXt2YXIgRT1DW2pdO0Nbal09Q1tILWotMV0sQ1tILWotMV09RSxFPVRbal0sVFtqXT0tVFtILWotMV0sVFtILWotMV09LUV9fSxsZS5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKEMsVCl7Zm9yKHZhciBIPTAsaj0wO2o8VC8yO2orKyl7dmFyIEU9ODE5MipN''@;'; put 'put ''YXRoLnJvdW5kKENbMipqKzFdL1QpK01hdGgucm91bmQoQ1syKmpdL1QpK0g7Q1tqXT02NzEwODg2MyZFLEg9RTw2NzEwODg2ND8wOkUvNjcxMDg4NjR8MH1yZXR1cm4gQ30sbGUucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24oQyxULEgsail7Zm9yKHZhciBFPTAsbT0wO208VDttKysp''@;'; put 'put ''SFsyKm1dPTgxOTEmKEUrPTB8Q1ttXSksSFsyKm0rMV09ODE5MSYoRT4+Pj0xMyksRT4+Pj0xMztmb3IobT0yKlQ7bTxqOysrbSlIW21dPTA7ZygwPT09RSksZyghKC04MTkyJkUpKX0sbGUucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24oQyl7Zm9yKHZhciBUPW5ldyBBcnJheShDKSxIPTA7SDxD''@;'; put 'put ''O0grKylUW0hdPTA7cmV0dXJuIFR9LGxlLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKEMsVCxIKXt2YXIgaj0yKnRoaXMuZ3Vlc3NMZW4xM2IoQy5sZW5ndGgsVC5sZW5ndGgpLEU9dGhpcy5tYWtlUkJUKGopLG09dGhpcy5zdHViKGopLEE9bmV3IEFycmF5KGopLG9lPW5ldyBBcnJheShqKSx0''@;'; put 'put ''ZT1uZXcgQXJyYXkoaiksc2U9bmV3IEFycmF5KGopLHdlPW5ldyBBcnJheShqKSxVZT1uZXcgQXJyYXkoaiksSmU9SC53b3JkcztKZS5sZW5ndGg9aix0aGlzLmNvbnZlcnQxM2IoQy53b3JkcyxDLmxlbmd0aCxBLGopLHRoaXMuY29udmVydDEzYihULndvcmRzLFQubGVuZ3RoLHNlLGopLHRo''@;'; put 'put ''aXMudHJhbnNmb3JtKEEsbSxvZSx0ZSxqLEUpLHRoaXMudHJhbnNmb3JtKHNlLG0sd2UsVWUsaixFKTtmb3IodmFyIGF0PTA7YXQ8ajthdCsrKXt2YXIgTWU9b2VbYXRdKndlW2F0XS10ZVthdF0qVWVbYXRdO3RlW2F0XT1vZVthdF0qVWVbYXRdK3RlW2F0XSp3ZVthdF0sb2VbYXRdPU1lfXJl''@;'; put 'put ''dHVybiB0aGlzLmNvbmp1Z2F0ZShvZSx0ZSxqKSx0aGlzLnRyYW5zZm9ybShvZSx0ZSxKZSxtLGosRSksdGhpcy5jb25qdWdhdGUoSmUsbSxqKSx0aGlzLm5vcm1hbGl6ZTEzYihKZSxqKSxILm5lZ2F0aXZlPUMubmVnYXRpdmVeVC5uZWdhdGl2ZSxILmxlbmd0aD1DLmxlbmd0aCtULmxlbmd0''@;'; put 'put ''aCxILl9zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oQyl7dmFyIFQ9bmV3IHcobnVsbCk7cmV0dXJuIFQud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK0MubGVuZ3RoKSx0aGlzLm11bFRvKEMsVCl9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24oQyl7dmFyIFQ9bmV3IHco''@;'; put 'put ''bnVsbCk7cmV0dXJuIFQud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK0MubGVuZ3RoKSxpZSh0aGlzLEMsVCl9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhDLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihDKXt2YXIg''@;'; put 'put ''VD1DPDA7VCYmKEM9LUMpLGcoIm51bWJlciI9PXR5cGVvZiBDKSxnKEM8NjcxMDg4NjQpO2Zvcih2YXIgSD0wLGo9MDtqPHRoaXMubGVuZ3RoO2orKyl7dmFyIEU9KDB8dGhpcy53b3Jkc1tqXSkqQyxtPSg2NzEwODg2MyZFKSsoNjcxMDg4NjMmSCk7SD4+PTI2LEgrPUUvNjcxMDg4NjR8MCxI''@;'; put 'put ''Kz1tPj4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZtfXJldHVybiAwIT09SCYmKHRoaXMud29yZHNbal09SCx0aGlzLmxlbmd0aCsrKSxUP3RoaXMuaW5lZygpOnRoaXN9LHcucHJvdG90eXBlLm11bG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihDKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSx3LnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSx3LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oQyl7dmFyIFQ9ZnVuY3Rpb24gWCh4KXtmb3IodmFyIEM9bmV3''@;'; put 'put ''IEFycmF5KHguYml0TGVuZ3RoKCkpLFQ9MDtUPEMubGVuZ3RoO1QrKylDW1RdPXgud29yZHNbVC8yNnwwXT4+PlQlMjYmMTtyZXR1cm4gQ30oQyk7aWYoMD09PVQubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIEg9dGhpcyxqPTA7ajxULmxlbmd0aCYmMD09PVRbal07aisrLEg9SC5z''@;'; put 'put ''cXIoKSk7aWYoKytqPFQubGVuZ3RoKWZvcih2YXIgRT1ILnNxcigpO2o8VC5sZW5ndGg7aisrLEU9RS5zcXIoKSkwIT09VFtqXSYmKEg9SC5tdWwoRSkpO3JldHVybiBIfSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24oQyl7ZygibnVtYmVyIj09dHlwZW9mIEMmJkM+PTApO3ZhciBFLFQ9''@;'; put 'put ''QyUyNixIPShDLVQpLzI2LGo9NjcxMDg4NjM+Pj4yNi1UPDwyNi1UO2lmKDAhPT1UKXt2YXIgbT0wO2ZvcihFPTA7RTx0aGlzLmxlbmd0aDtFKyspe3ZhciBBPXRoaXMud29yZHNbRV0majt0aGlzLndvcmRzW0VdPSgwfHRoaXMud29yZHNbRV0pLUE8PFR8bSxtPUE+Pj4yNi1UfW0mJih0aGlz''@;'; put 'put ''LndvcmRzW0VdPW0sdGhpcy5sZW5ndGgrKyl9aWYoMCE9PUgpe2ZvcihFPXRoaXMubGVuZ3RoLTE7RT49MDtFLS0pdGhpcy53b3Jkc1tFK0hdPXRoaXMud29yZHNbRV07Zm9yKEU9MDtFPEg7RSsrKXRoaXMud29yZHNbRV09MDt0aGlzLmxlbmd0aCs9SH1yZXR1cm4gdGhpcy5fc3RyaXAoKX0s''@;'; put 'put ''dy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24oQyl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24oQyxULEgpe3ZhciBqO2coIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKSxqPVQ/KFQtVCUyNikvMjY6MDt2YXIg''@;'; put 'put ''RT1DJTI2LG09TWF0aC5taW4oKEMtRSkvMjYsdGhpcy5sZW5ndGgpLEE9NjcxMDg4NjNeNjcxMDg4NjM+Pj5FPDxFLG9lPUg7aWYoai09bSxqPU1hdGgubWF4KDAsaiksb2Upe2Zvcih2YXIgdGU9MDt0ZTxtO3RlKyspb2Uud29yZHNbdGVdPXRoaXMud29yZHNbdGVdO29lLmxlbmd0aD1tfWlm''@;'; put 'put ''KDAhPT1tKWlmKHRoaXMubGVuZ3RoPm0pZm9yKHRoaXMubGVuZ3RoLT1tLHRlPTA7dGU8dGhpcy5sZW5ndGg7dGUrKyl0aGlzLndvcmRzW3RlXT10aGlzLndvcmRzW3RlK21dO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIHNlPTA7Zm9yKHRlPXRoaXMubGVuZ3RoLTE7''@;'; put 'put ''dGU+PTAmJigwIT09c2V8fHRlPj1qKTt0ZS0tKXt2YXIgd2U9MHx0aGlzLndvcmRzW3RlXTt0aGlzLndvcmRzW3RlXT1zZTw8MjYtRXx3ZT4+PkUsc2U9d2UmQX1yZXR1cm4gb2UmJjAhPT1zZSYmKG9lLndvcmRzW29lLmxlbmd0aCsrXT1zZSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jk''@;'; put 'put ''c1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKEMsVCxIKXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4oQyxULEgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25l''@;'; put 'put ''KCkuaXNobG4oQyl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4oQyl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKEMpe3Jl''@;'; put 'put ''dHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKEMpfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihDKXtnKCJudW1iZXIiPT10eXBlb2YgQyYmQz49MCk7dmFyIFQ9QyUyNixIPShDLVQpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PUh8fCEodGhpcy53b3Jkc1tIXSYxPDxUKSl9LHcucHJvdG90''@;'; put 'put ''eXBlLmltYXNrbj1mdW5jdGlvbihDKXtnKCJudW1iZXIiPT10eXBlb2YgQyYmQz49MCk7dmFyIFQ9QyUyNixIPShDLVQpLzI2O3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9SD90aGlzOigw''@;'; put 'put ''IT09VCYmSCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKEgsdGhpcy5sZW5ndGgpLDAhPT1UJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxUKSx0aGlzLl9zdHJpcCgpKX0sdy5wcm90b3R5cGUubWFza249ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMu''@;'; put 'put ''Y2xvbmUoKS5pbWFza24oQyl9LHcucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKEMpe3JldHVybiBnKCJudW1iZXIiPT10eXBlb2YgQyksZyhDPDY3MTA4ODY0KSxDPDA/dGhpcy5pc3VibigtQyk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTw9''@;'; put 'put ''Qz8odGhpcy53b3Jkc1swXT1DLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4oQyksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKEMpfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24oQyl7dGhpcy53''@;'; put 'put ''b3Jkc1swXSs9Qztmb3IodmFyIFQ9MDtUPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW1RdPj02NzEwODg2NDtUKyspdGhpcy53b3Jkc1tUXS09NjcxMDg4NjQsVD09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tUKzFdPTE6dGhpcy53b3Jkc1tUKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1h''@;'; put 'put ''dGgubWF4KHRoaXMubGVuZ3RoLFQrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24oQyl7aWYoZygibnVtYmVyIj09dHlwZW9mIEMpLGcoQzw2NzEwODg2NCksQzwwKXJldHVybiB0aGlzLmlhZGRuKC1DKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2''@;'; put 'put ''ZT0wLHRoaXMuaWFkZG4oQyksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09QywxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgVD0wO1Q8dGhpcy5sZW5n''@;'; put 'put ''dGgmJnRoaXMud29yZHNbVF08MDtUKyspdGhpcy53b3Jkc1tUXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tUKzFdLT0xO3JldHVybiB0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4oQyl9LHcucHJvdG90eXBlLnN1Ym49''@;'; put 'put ''ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihDKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBl''@;'; put 'put ''Ll9pc2hsbnN1Ym11bD1mdW5jdGlvbihDLFQsSCl7dmFyIEU7dGhpcy5fZXhwYW5kKEMubGVuZ3RoK0gpO3ZhciBtLEE9MDtmb3IoRT0wO0U8Qy5sZW5ndGg7RSsrKXttPSgwfHRoaXMud29yZHNbRStIXSkrQTt2YXIgb2U9KDB8Qy53b3Jkc1tFXSkqVDtBPSgobS09NjcxMDg4NjMmb2UpPj4y''@;'; put 'put ''NiktKG9lLzY3MTA4ODY0fDApLHRoaXMud29yZHNbRStIXT02NzEwODg2MyZtfWZvcig7RTx0aGlzLmxlbmd0aC1IO0UrKylBPShtPSgwfHRoaXMud29yZHNbRStIXSkrQSk+PjI2LHRoaXMud29yZHNbRStIXT02NzEwODg2MyZtO2lmKDA9PT1BKXJldHVybiB0aGlzLl9zdHJpcCgpO2Zvcihn''@;'; put 'put ''KC0xPT09QSksQT0wLEU9MDtFPHRoaXMubGVuZ3RoO0UrKylBPShtPS0oMHx0aGlzLndvcmRzW0VdKStBKT4+MjYsdGhpcy53b3Jkc1tFXT02NzEwODg2MyZtO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24oQyxUKXt2''@;'; put 'put ''YXIgSCxqPXRoaXMuY2xvbmUoKSxFPUMsbT0wfEUud29yZHNbRS5sZW5ndGgtMV07MCE9KEg9MjYtdGhpcy5fY291bnRCaXRzKG0pKSYmKEU9RS51c2hsbihIKSxqLml1c2hsbihIKSxtPTB8RS53b3Jkc1tFLmxlbmd0aC0xXSk7dmFyIHRlLG9lPWoubGVuZ3RoLUUubGVuZ3RoO2lmKCJtb2Qi''@;'; put 'put ''IT09VCl7KHRlPW5ldyB3KG51bGwpKS5sZW5ndGg9b2UrMSx0ZS53b3Jkcz1uZXcgQXJyYXkodGUubGVuZ3RoKTtmb3IodmFyIHNlPTA7c2U8dGUubGVuZ3RoO3NlKyspdGUud29yZHNbc2VdPTB9dmFyIHdlPWouY2xvbmUoKS5faXNobG5zdWJtdWwoRSwxLG9lKTswPT09d2UubmVnYXRpdmUm''@;'; put 'put ''JihqPXdlLHRlJiYodGUud29yZHNbb2VdPTEpKTtmb3IodmFyIFVlPW9lLTE7VWU+PTA7VWUtLSl7dmFyIEplPTY3MTA4ODY0KigwfGoud29yZHNbRS5sZW5ndGgrVWVdKSsoMHxqLndvcmRzW0UubGVuZ3RoK1VlLTFdKTtmb3IoSmU9TWF0aC5taW4oSmUvbXwwLDY3MTA4ODYzKSxqLl9pc2hs''@;'; put 'put ''bnN1Ym11bChFLEplLFVlKTswIT09ai5uZWdhdGl2ZTspSmUtLSxqLm5lZ2F0aXZlPTAsai5faXNobG5zdWJtdWwoRSwxLFVlKSxqLmlzWmVybygpfHwoai5uZWdhdGl2ZV49MSk7dGUmJih0ZS53b3Jkc1tVZV09SmUpfXJldHVybiB0ZSYmdGUuX3N0cmlwKCksai5fc3RyaXAoKSwiZGl2IiE9''@;'; put 'put ''PVQmJjAhPT1IJiZqLml1c2hybihIKSx7ZGl2OnRlfHxudWxsLG1vZDpqfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKEMsVCxIKXtyZXR1cm4gZyghQy5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9''@;'; put 'put ''PT1DLm5lZ2F0aXZlPyhtPXRoaXMubmVnKCkuZGl2bW9kKEMsVCksIm1vZCIhPT1UJiYoaj1tLmRpdi5uZWcoKSksImRpdiIhPT1UJiYoRT1tLm1vZC5uZWcoKSxIJiYwIT09RS5uZWdhdGl2ZSYmRS5pYWRkKEMpKSx7ZGl2OmosbW9kOkV9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PUMubmVn''@;'; put 'put ''YXRpdmU/KG09dGhpcy5kaXZtb2QoQy5uZWcoKSxUKSwibW9kIiE9PVQmJihqPW0uZGl2Lm5lZygpKSx7ZGl2OmosbW9kOm0ubW9kfSk6dGhpcy5uZWdhdGl2ZSZDLm5lZ2F0aXZlPyhtPXRoaXMubmVnKCkuZGl2bW9kKEMubmVnKCksVCksImRpdiIhPT1UJiYoRT1tLm1vZC5uZWcoKSxIJiYw''@;'; put 'put ''IT09RS5uZWdhdGl2ZSYmRS5pc3ViKEMpKSx7ZGl2Om0uZGl2LG1vZDpFfSk6Qy5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKEMpPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PUMubGVuZ3RoPyJkaXYiPT09VD97ZGl2OnRoaXMuZGl2bihDLndvcmRzWzBdKSxtb2Q6bnVsbH06''@;'; put 'put ''Im1vZCI9PT1UP3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RybihDLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKEMud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZHJuKEMud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihDLFQpO3ZhciBqLEUsbX0sdy5wcm90b3R5cGUuZGl2PWZ1''@;'; put 'put ''bmN0aW9uKEMpe3JldHVybiB0aGlzLmRpdm1vZChDLCJkaXYiLCExKS5kaXZ9LHcucHJvdG90eXBlLm1vZD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5kaXZtb2QoQywibW9kIiwhMSkubW9kfSx3LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmRpdm1vZChDLCJtb2Qi''@;'; put 'put ''LCEwKS5tb2R9LHcucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKEMpe3ZhciBUPXRoaXMuZGl2bW9kKEMpO2lmKFQubW9kLmlzWmVybygpKXJldHVybiBULmRpdjt2YXIgSD0wIT09VC5kaXYubmVnYXRpdmU/VC5tb2QuaXN1YihDKTpULm1vZCxqPUMudXNocm4oMSksRT1DLmFuZGxuKDEp''@;'; put 'put ''LG09SC5jbXAoaik7cmV0dXJuIG08MHx8MT09PUUmJjA9PT1tP1QuZGl2OjAhPT1ULmRpdi5uZWdhdGl2ZT9ULmRpdi5pc3VibigxKTpULmRpdi5pYWRkbigxKX0sdy5wcm90b3R5cGUubW9kcm49ZnVuY3Rpb24oQyl7dmFyIFQ9QzwwO1QmJihDPS1DKSxnKEM8PTY3MTA4ODYzKTtmb3IodmFy''@;'; put 'put ''IEg9KDE8PDI2KSVDLGo9MCxFPXRoaXMubGVuZ3RoLTE7RT49MDtFLS0paj0oSCpqKygwfHRoaXMud29yZHNbRV0pKSVDO3JldHVybiBUPy1qOmp9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubW9kcm4oQyl9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKEMp''@;'; put 'put ''e3ZhciBUPUM8MDtUJiYoQz0tQyksZyhDPD02NzEwODg2Myk7Zm9yKHZhciBIPTAsaj10aGlzLmxlbmd0aC0xO2o+PTA7ai0tKXt2YXIgRT0oMHx0aGlzLndvcmRzW2pdKSs2NzEwODg2NCpIO3RoaXMud29yZHNbal09RS9DfDAsSD1FJUN9cmV0dXJuIHRoaXMuX3N0cmlwKCksVD90aGlzLmlu''@;'; put 'put ''ZWcoKTp0aGlzfSx3LnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4oQyl9LHcucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24oQyl7ZygwPT09Qy5uZWdhdGl2ZSksZyghQy5pc1plcm8oKSk7dmFyIFQ9dGhpcyxIPUMuY2xvbmUoKTtUPTAhPT1ULm5l''@;'; put 'put ''Z2F0aXZlP1QudW1vZChDKTpULmNsb25lKCk7Zm9yKHZhciBqPW5ldyB3KDEpLEU9bmV3IHcoMCksbT1uZXcgdygwKSxBPW5ldyB3KDEpLG9lPTA7VC5pc0V2ZW4oKSYmSC5pc0V2ZW4oKTspVC5pdXNocm4oMSksSC5pdXNocm4oMSksKytvZTtmb3IodmFyIHRlPUguY2xvbmUoKSxzZT1ULmNs''@;'; put 'put ''b25lKCk7IVQuaXNaZXJvKCk7KXtmb3IodmFyIHdlPTAsVWU9MTshKFQud29yZHNbMF0mVWUpJiZ3ZTwyNjsrK3dlLFVlPDw9MSk7aWYod2U+MClmb3IoVC5pdXNocm4od2UpO3dlLS0gPjA7KShqLmlzT2RkKCl8fEUuaXNPZGQoKSkmJihqLmlhZGQodGUpLEUuaXN1YihzZSkpLGouaXVzaHJu''@;'; put 'put ''KDEpLEUuaXVzaHJuKDEpO2Zvcih2YXIgSmU9MCxhdD0xOyEoSC53b3Jkc1swXSZhdCkmJkplPDI2OysrSmUsYXQ8PD0xKTtpZihKZT4wKWZvcihILml1c2hybihKZSk7SmUtLSA+MDspKG0uaXNPZGQoKXx8QS5pc09kZCgpKSYmKG0uaWFkZCh0ZSksQS5pc3ViKHNlKSksbS5pdXNocm4oMSks''@;'; put 'put ''QS5pdXNocm4oMSk7VC5jbXAoSCk+PTA/KFQuaXN1YihIKSxqLmlzdWIobSksRS5pc3ViKEEpKTooSC5pc3ViKFQpLG0uaXN1YihqKSxBLmlzdWIoRSkpfXJldHVybnthOm0sYjpBLGdjZDpILml1c2hsbihvZSl9fSx3LnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24oQyl7ZygwPT09Qy5uZWdh''@;'; put 'put ''dGl2ZSksZyghQy5pc1plcm8oKSk7dmFyIHdlLFQ9dGhpcyxIPUMuY2xvbmUoKTtUPTAhPT1ULm5lZ2F0aXZlP1QudW1vZChDKTpULmNsb25lKCk7Zm9yKHZhciBqPW5ldyB3KDEpLEU9bmV3IHcoMCksbT1ILmNsb25lKCk7VC5jbXBuKDEpPjAmJkguY21wbigxKT4wOyl7Zm9yKHZhciBBPTAs''@;'; put 'put ''b2U9MTshKFQud29yZHNbMF0mb2UpJiZBPDI2OysrQSxvZTw8PTEpO2lmKEE+MClmb3IoVC5pdXNocm4oQSk7QS0tID4wOylqLmlzT2RkKCkmJmouaWFkZChtKSxqLml1c2hybigxKTtmb3IodmFyIHRlPTAsc2U9MTshKEgud29yZHNbMF0mc2UpJiZ0ZTwyNjsrK3RlLHNlPDw9MSk7aWYodGU+''@;'; put 'put ''MClmb3IoSC5pdXNocm4odGUpO3RlLS0gPjA7KUUuaXNPZGQoKSYmRS5pYWRkKG0pLEUuaXVzaHJuKDEpO1QuY21wKEgpPj0wPyhULmlzdWIoSCksai5pc3ViKEUpKTooSC5pc3ViKFQpLEUuaXN1YihqKSl9cmV0dXJuKHdlPTA9PT1ULmNtcG4oMSk/ajpFKS5jbXBuKDApPDAmJndlLmlhZGQo''@;'; put 'put ''Qyksd2V9LHcucHJvdG90eXBlLmdjZD1mdW5jdGlvbihDKXtpZih0aGlzLmlzWmVybygpKXJldHVybiBDLmFicygpO2lmKEMuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIFQ9dGhpcy5jbG9uZSgpLEg9Qy5jbG9uZSgpO1QubmVnYXRpdmU9MCxILm5lZ2F0aXZlPTA7Zm9yKHZhciBq''@;'; put 'put ''PTA7VC5pc0V2ZW4oKSYmSC5pc0V2ZW4oKTtqKyspVC5pdXNocm4oMSksSC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO1QuaXNFdmVuKCk7KVQuaXVzaHJuKDEpO2Zvcig7SC5pc0V2ZW4oKTspSC5pdXNocm4oMSk7dmFyIEU9VC5jbXAoSCk7aWYoRTwwKXt2YXIgbT1UO1Q9SCxIPW19ZWxzZSBp''@;'; put 'put ''ZigwPT09RXx8MD09PUguY21wbigxKSlicmVhaztULmlzdWIoSCl9cmV0dXJuIEguaXVzaGxuKGopfSx3LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmVnY2QoQykuYS51bW9kKEMpfSx3LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53''@;'; put 'put ''b3Jkc1swXSl9LHcucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMud29yZHNbMF0mQ30sdy5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24oQyl7ZygibnVtYmVyIj09dHlw''@;'; put 'put ''ZW9mIEMpO3ZhciBUPUMlMjYsSD0oQy1UKS8yNixqPTE8PFQ7aWYodGhpcy5sZW5ndGg8PUgpcmV0dXJuIHRoaXMuX2V4cGFuZChIKzEpLHRoaXMud29yZHNbSF18PWosdGhpcztmb3IodmFyIEU9aixtPUg7MCE9PUUmJm08dGhpcy5sZW5ndGg7bSsrKXt2YXIgQT0wfHRoaXMud29yZHNbbV07''@;'; put 'put ''RT0oQSs9RSk+Pj4yNix0aGlzLndvcmRzW21dPUEmPTY3MTA4ODYzfXJldHVybiAwIT09RSYmKHRoaXMud29yZHNbbV09RSx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0s''@;'; put 'put ''dy5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihDKXt2YXIgSCxUPUM8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIVQpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJlQpcmV0dXJuIDE7aWYodGhpcy5fc3RyaXAoKSx0aGlzLmxlbmd0aD4xKUg9MTtlbHNle1QmJihDPS1DKSxnKEM8PTY3''@;'; put 'put ''MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBqPTB8dGhpcy53b3Jkc1swXTtIPWo9PT1DPzA6ajxDPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LUg6SH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKEMpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Qy5uZWdhdGl2''@;'; put 'put ''ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PUMubmVnYXRpdmUpcmV0dXJuIDE7dmFyIFQ9dGhpcy51Y21wKEMpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1UOlR9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24oQyl7aWYodGhpcy5sZW5ndGg+Qy5sZW5ndGgpcmV0''@;'; put 'put ''dXJuIDE7aWYodGhpcy5sZW5ndGg8Qy5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBUPTAsSD10aGlzLmxlbmd0aC0xO0g+PTA7SC0tKXt2YXIgaj0wfHRoaXMud29yZHNbSF0sRT0wfEMud29yZHNbSF07aWYoaiE9PUUpe2o8RT9UPS0xOmo+RSYmKFQ9MSk7YnJlYWt9fXJldHVybiBUfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5ndG49ZnVuY3Rpb24oQyl7cmV0dXJuIDE9PT10aGlzLmNtcG4oQyl9LHcucHJvdG90eXBlLmd0PWZ1bmN0aW9uKEMpe3JldHVybiAxPT09dGhpcy5jbXAoQyl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY21wbihDKT49MH0sdy5wcm90b3R5cGUu''@;'; put 'put ''Z3RlPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNtcChDKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKEMpe3JldHVybi0xPT09dGhpcy5jbXBuKEMpfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihDKXtyZXR1cm4tMT09PXRoaXMuY21wKEMpfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0''@;'; put 'put ''aW9uKEMpe3JldHVybiB0aGlzLmNtcG4oQyk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbXAoQyk8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihDKXtyZXR1cm4gMD09PXRoaXMuY21wbihDKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oQyl7cmV0''@;'; put 'put ''dXJuIDA9PT10aGlzLmNtcChDKX0sdy5yZWQ9ZnVuY3Rpb24oQyl7cmV0dXJuIG5ldyBwKEMpfSx3LnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihDKXtyZXR1cm4gZyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxnKDA9PT10aGlzLm5lZ2F0aXZl''@;'; put 'put ''LCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLEMuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChDKX0sdy5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250''@;'; put 'put ''ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LHcucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5yZWQ9Qyx0aGlzfSx3LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihDKXtyZXR1cm4gZyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4g''@;'; put 'put ''cmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJlZChDKX0sdy5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKEMpe3JldHVybiBnKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMsQyl9LHcucHJvdG90eXBlLnJlZElB''@;'; put 'put ''ZGQ9ZnVuY3Rpb24oQyl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24oQyl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdp''@;'; put 'put ''dGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhpcyxDKX0sdy5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihDKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMsQyl9LHcucHJvdG90eXBlLnJl''@;'; put 'put ''ZFNobD1mdW5jdGlvbihDKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24oQyl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdp''@;'; put 'put ''dGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLEMpLHRoaXMucmVkLm11bCh0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKEMpe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3Zl''@;'; put 'put ''cmlmeTIodGhpcyxDKSx0aGlzLnJlZC5pbXVsKHRoaXMsQyl9LHcucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBnKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LHcucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSW52bSB3b3Jr''@;'; put 'put ''cyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSx3LnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVk''@;'; put 'put ''Ll92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sdy5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKEMpe3JldHVybiBnKHRoaXMucmVkJiYhQy5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsQyl9O3ZhciBt''@;'; put 'put ''ZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2Z1bmN0aW9uIF9lKHgsQyl7dGhpcy5uYW1lPXgsdGhpcy5wPW5ldyB3KEMsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB3KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0''@;'; put 'put ''aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBUZSgpe19lLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gU2UoKXtfZS5jYWxsKHRoaXMsInAyMjQiLCJm''@;'; put 'put ''ZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIHplKCl7X2UuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBW''@;'; put 'put ''KCl7X2UuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBwKHgpe2lmKCJzdHJpbmciPT10eXBlb2YgeCl7dmFyIEM9dy5fcHJpbWUoeCk7dGhpcy5tPUMucCx0aGlz''@;'; put 'put ''LnByaW1lPUN9ZWxzZSBnKHguZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09eCx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gYih4KXtwLmNhbGwodGhpcyx4KSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhp''@;'; put 'put ''cy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3Vibigx''@;'; put 'put ''KS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfV9lLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIEM9bmV3IHcobnVsbCk7cmV0dXJuIEMud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlz''@;'; put 'put ''Lm4vMTMpKSxDfSxfZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihDKXt2YXIgSCxUPUM7ZG97dGhpcy5zcGxpdChULHRoaXMudG1wKSxIPShUPShUPXRoaXMuaW11bEsoVCkpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZShIPnRoaXMubik7dmFyIGo9SDx0aGlzLm4/LTE6''@;'; put 'put ''VC51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1qPyhULndvcmRzWzBdPTAsVC5sZW5ndGg9MSk6aj4wP1QuaXN1Yih0aGlzLnApOnZvaWQgMCE9PVQuc3RyaXA/VC5zdHJpcCgpOlQuX3N0cmlwKCksVH0sX2UucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKEMsVCl7Qy5pdXNocm4odGhpcy5uLDAs''@;'; put 'put ''VCl9LF9lLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihDKXtyZXR1cm4gQy5pbXVsKHRoaXMuayl9LEIoVGUsX2UpLFRlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihDLFQpe2Zvcih2YXIgSD00MTk0MzAzLGo9TWF0aC5taW4oQy5sZW5ndGgsOSksRT0wO0U8ajtFKyspVC53b3Jkc1tFXT1D''@;'; put 'put ''LndvcmRzW0VdO2lmKFQubGVuZ3RoPWosQy5sZW5ndGg8PTkpcmV0dXJuIEMud29yZHNbMF09MCx2b2lkKEMubGVuZ3RoPTEpO3ZhciBtPUMud29yZHNbOV07Zm9yKFQud29yZHNbVC5sZW5ndGgrK109bSZILEU9MTA7RTxDLmxlbmd0aDtFKyspe3ZhciBBPTB8Qy53b3Jkc1tFXTtDLndvcmRz''@;'; put 'put ''W0UtMTBdPShBJkgpPDw0fG0+Pj4yMixtPUF9Qy53b3Jkc1tFLTEwXT1tPj4+PTIyLEMubGVuZ3RoLT0wPT09bSYmQy5sZW5ndGg+MTA/MTA6OX0sVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKEMpe0Mud29yZHNbQy5sZW5ndGhdPTAsQy53b3Jkc1tDLmxlbmd0aCsxXT0wLEMubGVuZ3Ro''@;'; put 'put ''Kz0yO2Zvcih2YXIgVD0wLEg9MDtIPEMubGVuZ3RoO0grKyl7dmFyIGo9MHxDLndvcmRzW0hdO0Mud29yZHNbSF09NjcxMDg4NjMmKFQrPTk3NypqKSxUPTY0KmorKFQvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1DLndvcmRzW0MubGVuZ3RoLTFdJiYoQy5sZW5ndGgtLSwwPT09Qy53b3Jkc1tD''@;'; put 'put ''Lmxlbmd0aC0xXSYmQy5sZW5ndGgtLSksQ30sQihTZSxfZSksQih6ZSxfZSksQihWLF9lKSxWLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihDKXtmb3IodmFyIFQ9MCxIPTA7SDxDLmxlbmd0aDtIKyspe3ZhciBqPTE5KigwfEMud29yZHNbSF0pK1QsRT02NzEwODg2MyZqO2o+Pj49MjYsQy53''@;'; put 'put ''b3Jkc1tIXT1FLFQ9an1yZXR1cm4gMCE9PVQmJihDLndvcmRzW0MubGVuZ3RoKytdPVQpLEN9LHcuX3ByaW1lPWZ1bmN0aW9uKEMpe2lmKG1lW0NdKXJldHVybiBtZVtDXTt2YXIgVDtpZigiazI1NiI9PT1DKVQ9bmV3IFRlO2Vsc2UgaWYoInAyMjQiPT09QylUPW5ldyBTZTtlbHNlIGlmKCJw''@;'; put 'put ''MTkyIj09PUMpVD1uZXcgemU7ZWxzZXtpZigicDI1NTE5IiE9PUMpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrQyk7VD1uZXcgVn1yZXR1cm4gbWVbQ109VCxUfSxwLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihDKXtnKDA9PT1DLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25s''@;'; put 'put ''eSB3aXRoIHBvc2l0aXZlcyIpLGcoQy5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0scC5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24oQyxUKXtnKCEoQy5uZWdhdGl2ZXxULm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKEMucmVk''@;'; put 'put ''JiZDLnJlZD09PVQucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LHAucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKEMpLl9mb3JjZVJlZCh0aGlzKTooTihDLEMudW1vZCh0aGlzLm0pLl9mb3JjZVJl''@;'; put 'put ''ZCh0aGlzKSksQyl9LHAucHJvdG90eXBlLm5lZz1mdW5jdGlvbihDKXtyZXR1cm4gQy5pc1plcm8oKT9DLmNsb25lKCk6dGhpcy5tLnN1YihDKS5fZm9yY2VSZWQodGhpcyl9LHAucHJvdG90eXBlLmFkZD1mdW5jdGlvbihDLFQpe3RoaXMuX3ZlcmlmeTIoQyxUKTt2YXIgSD1DLmFkZChUKTty''@;'; put 'put ''ZXR1cm4gSC5jbXAodGhpcy5tKT49MCYmSC5pc3ViKHRoaXMubSksSC5fZm9yY2VSZWQodGhpcyl9LHAucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oQyxUKXt0aGlzLl92ZXJpZnkyKEMsVCk7dmFyIEg9Qy5pYWRkKFQpO3JldHVybiBILmNtcCh0aGlzLm0pPj0wJiZILmlzdWIodGhpcy5tKSxI''@;'; put 'put ''fSxwLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24oQyxUKXt0aGlzLl92ZXJpZnkyKEMsVCk7dmFyIEg9Qy5zdWIoVCk7cmV0dXJuIEguY21wbigwKTwwJiZILmlhZGQodGhpcy5tKSxILl9mb3JjZVJlZCh0aGlzKX0scC5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihDLFQpe3RoaXMuX3ZlcmlmeTIo''@;'; put 'put ''QyxUKTt2YXIgSD1DLmlzdWIoVCk7cmV0dXJuIEguY21wbigwKTwwJiZILmlhZGQodGhpcy5tKSxIfSxwLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShDKSx0aGlzLmltb2QoQy51c2hsbihUKSl9LHAucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oQyxU''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihDLFQpLHRoaXMuaW1vZChDLmltdWwoVCkpfSxwLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihDLFQpLHRoaXMuaW1vZChDLm11bChUKSl9LHAucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oQyl7cmV0dXJuIHRo''@;'; put 'put ''aXMuaW11bChDLEMuY2xvbmUoKSl9LHAucHJvdG90eXBlLnNxcj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5tdWwoQyxDKX0scC5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihDKXtpZihDLmlzWmVybygpKXJldHVybiBDLmNsb25lKCk7dmFyIFQ9dGhpcy5tLmFuZGxuKDMpO2lmKGcoVCUyPT0x''@;'; put 'put ''KSwzPT09VCl7dmFyIEg9dGhpcy5tLmFkZChuZXcgdygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhDLEgpfWZvcih2YXIgaj10aGlzLm0uc3VibigxKSxFPTA7IWouaXNaZXJvKCkmJjA9PT1qLmFuZGxuKDEpOylFKyssai5pdXNocm4oMSk7Zyghai5pc1plcm8oKSk7dmFyIG09bmV3''@;'; put 'put ''IHcoMSkudG9SZWQodGhpcyksQT1tLnJlZE5lZygpLG9lPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSx0ZT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKHRlPW5ldyB3KDIqdGUqdGUpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyh0ZSxvZSkuY21wKEEpOyl0ZS5yZWRJQWRkKEEpO2Zvcih2YXIg''@;'; put 'put ''c2U9dGhpcy5wb3codGUsaiksd2U9dGhpcy5wb3coQyxqLmFkZG4oMSkuaXVzaHJuKDEpKSxVZT10aGlzLnBvdyhDLGopLEplPUU7MCE9PVVlLmNtcChtKTspe2Zvcih2YXIgYXQ9VWUsTWU9MDswIT09YXQuY21wKG0pO01lKyspYXQ9YXQucmVkU3FyKCk7ZyhNZTxKZSk7dmFyIHZlPXRoaXMu''@;'; put 'put ''cG93KHNlLG5ldyB3KDEpLml1c2hsbihKZS1NZS0xKSk7d2U9d2UucmVkTXVsKHZlKSxzZT12ZS5yZWRTcXIoKSxVZT1VZS5yZWRNdWwoc2UpLEplPU1lfXJldHVybiB3ZX0scC5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihDKXt2YXIgVD1DLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09VC5u''@;'; put 'put ''ZWdhdGl2ZT8oVC5uZWdhdGl2ZT0wLHRoaXMuaW1vZChUKS5yZWROZWcoKSk6dGhpcy5pbW9kKFQpfSxwLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24oQyxUKXtpZihULmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09VC5jbXBuKDEpKXJldHVybiBDLmNsb25lKCk7''@;'; put 'put ''dmFyIGo9bmV3IEFycmF5KDE2KTtqWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLGpbMV09Qztmb3IodmFyIEU9MjtFPGoubGVuZ3RoO0UrKylqW0VdPXRoaXMubXVsKGpbRS0xXSxDKTt2YXIgbT1qWzBdLEE9MCxvZT0wLHRlPVQuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT10ZSYmKHRlPTI2KSxF''@;'; put 'put ''PVQubGVuZ3RoLTE7RT49MDtFLS0pe2Zvcih2YXIgc2U9VC53b3Jkc1tFXSx3ZT10ZS0xO3dlPj0wO3dlLS0pe3ZhciBVZT1zZT4+d2UmMTttIT09alswXSYmKG09dGhpcy5zcXIobSkpLDAhPT1VZXx8MCE9PUE/KEE8PD0xLEF8PVVlLCg0PT0rK29lfHwwPT09RSYmMD09PXdlKSYmKG09dGhp''@;'; put 'put ''cy5tdWwobSxqW0FdKSxvZT0wLEE9MCkpOm9lPTB9dGU9MjZ9cmV0dXJuIG19LHAucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihDKXt2YXIgVD1DLnVtb2QodGhpcy5tKTtyZXR1cm4gVD09PUM/VC5jbG9uZSgpOlR9LHAucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKEMpe3Zh''@;'; put 'put ''ciBUPUMuY2xvbmUoKTtyZXR1cm4gVC5yZWQ9bnVsbCxUfSx3Lm1vbnQ9ZnVuY3Rpb24oQyl7cmV0dXJuIG5ldyBiKEMpfSxCKGIscCksYi5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmltb2QoQy51c2hsbih0aGlzLnNoaWZ0KSl9LGIucHJvdG90eXBlLmNv''@;'; put 'put ''bnZlcnRGcm9tPWZ1bmN0aW9uKEMpe3ZhciBUPXRoaXMuaW1vZChDLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gVC5yZWQ9bnVsbCxUfSxiLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKEMsVCl7aWYoQy5pc1plcm8oKXx8VC5pc1plcm8oKSlyZXR1cm4gQy53b3Jkc1swXT0wLEMubGVuZ3RoPTEs''@;'; put 'put ''Qzt2YXIgSD1DLmltdWwoVCksaj1ILm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxFPUguaXN1YihqKS5pdXNocm4odGhpcy5zaGlmdCksbT1FO3JldHVybiBFLmNtcCh0aGlzLm0pPj0wP209RS5pc3ViKHRoaXMubSk6RS5j''@;'; put 'put ''bXBuKDApPDAmJihtPUUuaWFkZCh0aGlzLm0pKSxtLl9mb3JjZVJlZCh0aGlzKX0sYi5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKEMsVCl7aWYoQy5pc1plcm8oKXx8VC5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciBIPUMubXVsKFQpLGo9SC5tYXNrbih0aGlz''@;'; put 'put ''LnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksRT1ILmlzdWIoaikuaXVzaHJuKHRoaXMuc2hpZnQpLG09RTtyZXR1cm4gRS5jbXAodGhpcy5tKT49MD9tPUUuaXN1Yih0aGlzLm0pOkUuY21wbigwKTwwJiYobT1FLmlhZGQodGhpcy5tKSksbS5f''@;'; put 'put ''Zm9yY2VSZWQodGhpcyl9LGIucHJvdG90eXBlLmludm09ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuaW1vZChDLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0odWU9Xy5ubWQodWUpLHRoaXMpfSw5OTMxOih1ZSxxLF8pPT57dmFyIEk7ZnVuY3Rpb24geShC''@;'; put 'put ''KXt0aGlzLnJhbmQ9Qn1pZih1ZS5leHBvcnRzPWZ1bmN0aW9uKHcpe3JldHVybiBJfHwoST1uZXcgeShudWxsKSksSS5nZW5lcmF0ZSh3KX0sdWUuZXhwb3J0cy5SYW5kPXkseS5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24odyl7cmV0dXJuIHRoaXMuX3JhbmQodyl9LHkucHJvdG90eXBl''@;'; put 'put ''Ll9yYW5kPWZ1bmN0aW9uKHcpe2lmKHRoaXMucmFuZC5nZXRCeXRlcylyZXR1cm4gdGhpcy5yYW5kLmdldEJ5dGVzKHcpO2Zvcih2YXIgUD1uZXcgVWludDhBcnJheSh3KSxGPTA7RjxQLmxlbmd0aDtGKyspUFtGXT10aGlzLnJhbmQuZ2V0Qnl0ZSgpO3JldHVybiBQfSwib2JqZWN0Ij09dHlw''@;'; put 'put ''ZW9mIHNlbGYpc2VsZi5jcnlwdG8mJnNlbGYuY3J5cHRvLmdldFJhbmRvbVZhbHVlcz95LnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih3KXt2YXIgUD1uZXcgVWludDhBcnJheSh3KTtyZXR1cm4gc2VsZi5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKFApLFB9OnNlbGYubXNDcnlwdG8mJnNlbGYu''@;'; put 'put ''bXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzP3kucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHcpe3ZhciBQPW5ldyBVaW50OEFycmF5KHcpO3JldHVybiBzZWxmLm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyhQKSxQfToib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmKHkucHJvdG90eXBlLl9yYW5k''@;'; put 'put ''PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQgeWV0Iil9KTtlbHNlIHRyeXt2YXIgZz1fKDkyMTQpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBnLnJhbmRvbUJ5dGVzKXRocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCIpO3kucHJvdG90eXBlLl9yYW5kPWZ1''@;'; put 'put ''bmN0aW9uKHcpe3JldHVybiBnLnJhbmRvbUJ5dGVzKHcpfX1jYXRjaHt9fSw0NDk3Oih1ZSxxLF8pPT57dmFyIEk9Xyg5NTA5KS5CdWZmZXI7ZnVuY3Rpb24geShPKXtJLmlzQnVmZmVyKE8pfHwoTz1JLmZyb20oTykpO2Zvcih2YXIgej1PLmxlbmd0aC80fDAsTj1uZXcgQXJyYXkoeiksTD0w''@;'; put 'put ''O0w8ejtMKyspTltMXT1PLnJlYWRVSW50MzJCRSg0KkwpO3JldHVybiBOfWZ1bmN0aW9uIGcoTyl7Zm9yKDswPE8ubGVuZ3RoO08rKylPWzBdPTB9ZnVuY3Rpb24gQihPLHosTixMLEspe2Zvcih2YXIgbGUsbWUsX2UsVGUsVT1OWzBdLFc9TlsxXSxZPU5bMl0sWD1OWzNdLGVlPU9bMF1eelsw''@;'; put 'put ''XSxKPU9bMV1eelsxXSxyZT1PWzJdXnpbMl0saWU9T1szXV56WzNdLFNlPTQsemU9MTt6ZTxLO3plKyspbGU9VVtlZT4+PjI0XV5XW0o+Pj4xNiYyNTVdXllbcmU+Pj44JjI1NV1eWFsyNTUmaWVdXnpbU2UrK10sbWU9VVtKPj4+MjRdXldbcmU+Pj4xNiYyNTVdXllbaWU+Pj44JjI1NV1eWFsy''@;'; put 'put ''NTUmZWVdXnpbU2UrK10sX2U9VVtyZT4+PjI0XV5XW2llPj4+MTYmMjU1XV5ZW2VlPj4+OCYyNTVdXlhbMjU1JkpdXnpbU2UrK10sVGU9VVtpZT4+PjI0XV5XW2VlPj4+MTYmMjU1XV5ZW0o+Pj44JjI1NV1eWFsyNTUmcmVdXnpbU2UrK10sZWU9bGUsSj1tZSxyZT1fZSxpZT1UZTtyZXR1cm4g''@;'; put 'put ''bGU9KExbZWU+Pj4yNF08PDI0fExbSj4+PjE2JjI1NV08PDE2fExbcmU+Pj44JjI1NV08PDh8TFsyNTUmaWVdKV56W1NlKytdLG1lPShMW0o+Pj4yNF08PDI0fExbcmU+Pj4xNiYyNTVdPDwxNnxMW2llPj4+OCYyNTVdPDw4fExbMjU1JmVlXSleeltTZSsrXSxfZT0oTFtyZT4+PjI0XTw8MjR8''@;'; put 'put ''TFtpZT4+PjE2JjI1NV08PDE2fExbZWU+Pj44JjI1NV08PDh8TFsyNTUmSl0pXnpbU2UrK10sVGU9KExbaWU+Pj4yNF08PDI0fExbZWU+Pj4xNiYyNTVdPDwxNnxMW0o+Pj44JjI1NV08PDh8TFsyNTUmcmVdKV56W1NlKytdLFtsZT4+Pj0wLG1lPj4+PTAsX2U+Pj49MCxUZT4+Pj0wXX12YXIg''@;'; put 'put ''dz1bMCwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NF0sUD1mdW5jdGlvbigpe2Zvcih2YXIgTz1uZXcgQXJyYXkoMjU2KSx6PTA7ejwyNTY7eisrKU9bel09ejwxMjg/ejw8MTp6PDwxXjI4Mztmb3IodmFyIE49W10sTD1bXSxLPVtbXSxbXSxbXSxbXV0sVT1bW10sW10sW10sW11dLFc9MCxZ''@;'; put 'put ''PTAsWD0wO1g8MjU2OysrWCl7dmFyIGVlPVleWTw8MV5ZPDwyXlk8PDNeWTw8NDtOW1ddPWVlPWVlPj4+OF4yNTUmZWVeOTksTFtlZV09Vzt2YXIgSj1PW1ddLHJlPU9bSl0saWU9T1tyZV0sbGU9MjU3Kk9bZWVdXjE2ODQzMDA4KmVlO0tbMF1bV109bGU8PDI0fGxlPj4+OCxLWzFdW1ddPWxl''@;'; put 'put ''PDwxNnxsZT4+PjE2LEtbMl1bV109bGU8PDh8bGU+Pj4yNCxLWzNdW1ddPWxlLFVbMF1bZWVdPShsZT0xNjg0MzAwOSppZV42NTUzNypyZV4yNTcqSl4xNjg0MzAwOCpXKTw8MjR8bGU+Pj44LFVbMV1bZWVdPWxlPDwxNnxsZT4+PjE2LFVbMl1bZWVdPWxlPDw4fGxlPj4+MjQsVVszXVtlZV09''@;'; put 'put ''bGUsMD09PVc/Vz1ZPTE6KFc9Sl5PW09bT1tpZV5KXV1dLFlePU9bT1tZXV0pfXJldHVybntTQk9YOk4sSU5WX1NCT1g6TCxTVUJfTUlYOkssSU5WX1NVQl9NSVg6VX19KCk7ZnVuY3Rpb24gRihPKXt0aGlzLl9rZXk9eShPKSx0aGlzLl9yZXNldCgpfUYuYmxvY2tTaXplPTE2LEYua2V5U2l6''@;'; put 'put ''ZT0zMixGLnByb3RvdHlwZS5ibG9ja1NpemU9Ri5ibG9ja1NpemUsRi5wcm90b3R5cGUua2V5U2l6ZT1GLmtleVNpemUsRi5wcm90b3R5cGUuX3Jlc2V0PWZ1bmN0aW9uKCl7Zm9yKHZhciBPPXRoaXMuX2tleSx6PU8ubGVuZ3RoLE49eis2LEw9NCooTisxKSxLPVtdLFU9MDtVPHo7VSsrKUtb''@;'; put 'put ''VV09T1tVXTtmb3IoVT16O1U8TDtVKyspe3ZhciBXPUtbVS0xXTtVJXo9PTA/KFc9UC5TQk9YWyhXPVc8PDh8Vz4+PjI0KT4+PjI0XTw8MjR8UC5TQk9YW1c+Pj4xNiYyNTVdPDwxNnxQLlNCT1hbVz4+PjgmMjU1XTw8OHxQLlNCT1hbMjU1JlddLFdePXdbVS96fDBdPDwyNCk6ej42JiZVJXo9''@;'; put 'put ''PTQmJihXPVAuU0JPWFtXPj4+MjRdPDwyNHxQLlNCT1hbVz4+PjE2JjI1NV08PDE2fFAuU0JPWFtXPj4+OCYyNTVdPDw4fFAuU0JPWFsyNTUmV10pLEtbVV09S1tVLXpdXld9Zm9yKHZhciBZPVtdLFg9MDtYPEw7WCsrKXt2YXIgZWU9TC1YLEo9S1tlZS0oWCU0PzA6NCldO1lbWF09WDw0fHxl''@;'; put 'put ''ZTw9ND9KOlAuSU5WX1NVQl9NSVhbMF1bUC5TQk9YW0o+Pj4yNF1dXlAuSU5WX1NVQl9NSVhbMV1bUC5TQk9YW0o+Pj4xNiYyNTVdXV5QLklOVl9TVUJfTUlYWzJdW1AuU0JPWFtKPj4+OCYyNTVdXV5QLklOVl9TVUJfTUlYWzNdW1AuU0JPWFsyNTUmSl1dfXRoaXMuX25Sb3VuZHM9Tix0aGlz''@;'; put 'put ''Ll9rZXlTY2hlZHVsZT1LLHRoaXMuX2ludktleVNjaGVkdWxlPVl9LEYucHJvdG90eXBlLmVuY3J5cHRCbG9ja1Jhdz1mdW5jdGlvbihPKXtyZXR1cm4gQihPPXkoTyksdGhpcy5fa2V5U2NoZWR1bGUsUC5TVUJfTUlYLFAuU0JPWCx0aGlzLl9uUm91bmRzKX0sRi5wcm90b3R5cGUuZW5jcnlw''@;'; put 'put ''dEJsb2NrPWZ1bmN0aW9uKE8pe3ZhciB6PXRoaXMuZW5jcnlwdEJsb2NrUmF3KE8pLE49SS5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIE4ud3JpdGVVSW50MzJCRSh6WzBdLDApLE4ud3JpdGVVSW50MzJCRSh6WzFdLDQpLE4ud3JpdGVVSW50MzJCRSh6WzJdLDgpLE4ud3JpdGVVSW50MzJCRSh6''@;'; put 'put ''WzNdLDEyKSxOfSxGLnByb3RvdHlwZS5kZWNyeXB0QmxvY2s9ZnVuY3Rpb24oTyl7dmFyIHo9KE89eShPKSlbMV07T1sxXT1PWzNdLE9bM109ejt2YXIgTj1CKE8sdGhpcy5faW52S2V5U2NoZWR1bGUsUC5JTlZfU1VCX01JWCxQLklOVl9TQk9YLHRoaXMuX25Sb3VuZHMpLEw9SS5hbGxvY1Vu''@;'; put 'put ''c2FmZSgxNik7cmV0dXJuIEwud3JpdGVVSW50MzJCRShOWzBdLDApLEwud3JpdGVVSW50MzJCRShOWzNdLDQpLEwud3JpdGVVSW50MzJCRShOWzJdLDgpLEwud3JpdGVVSW50MzJCRShOWzFdLDEyKSxMfSxGLnByb3RvdHlwZS5zY3J1Yj1mdW5jdGlvbigpe2codGhpcy5fa2V5U2NoZWR1bGUp''@;'; put 'put ''LGcodGhpcy5faW52S2V5U2NoZWR1bGUpLGcodGhpcy5fa2V5KX0sdWUuZXhwb3J0cy5BRVM9Rn0sNDg0ODoodWUscSxfKT0+e3ZhciBJPV8oNDQ5NykseT1fKDk1MDkpLkJ1ZmZlcixnPV8oMTAyNyksQj1fKDU3MTcpLHc9XygzMjg4KSxQPV8oNzI5NSksRj1fKDY4NSk7ZnVuY3Rpb24gTihM''@;'; put 'put ''LEssVSxXKXtnLmNhbGwodGhpcyk7dmFyIFk9eS5hbGxvYyg0LDApO3RoaXMuX2NpcGhlcj1uZXcgSS5BRVMoSyk7dmFyIFg9dGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayhZKTt0aGlzLl9naGFzaD1uZXcgdyhYKSxVPWZ1bmN0aW9uIHooTCxLLFUpe2lmKDEyPT09Sy5sZW5ndGgpcmV0dXJu''@;'; put 'put ''IEwuX2ZpbklEPXkuY29uY2F0KFtLLHkuZnJvbShbMCwwLDAsMV0pXSkseS5jb25jYXQoW0sseS5mcm9tKFswLDAsMCwyXSldKTt2YXIgVz1uZXcgdyhVKSxZPUsubGVuZ3RoLFg9WSUxNjtXLnVwZGF0ZShLKSxYJiZXLnVwZGF0ZSh5LmFsbG9jKFg9MTYtWCwwKSksVy51cGRhdGUoeS5hbGxv''@;'; put 'put ''Yyg4LDApKTt2YXIgZWU9OCpZLEo9eS5hbGxvYyg4KTtKLndyaXRlVUludEJFKGVlLDAsOCksVy51cGRhdGUoSiksTC5fZmluSUQ9Vy5zdGF0ZTt2YXIgcmU9eS5mcm9tKEwuX2ZpbklEKTtyZXR1cm4gRihyZSkscmV9KHRoaXMsVSxYKSx0aGlzLl9wcmV2PXkuZnJvbShVKSx0aGlzLl9jYWNo''@;'; put 'put ''ZT15LmFsbG9jVW5zYWZlKDApLHRoaXMuX3NlY0NhY2hlPXkuYWxsb2NVbnNhZmUoMCksdGhpcy5fZGVjcnlwdD1XLHRoaXMuX2FsZW49MCx0aGlzLl9sZW49MCx0aGlzLl9tb2RlPUwsdGhpcy5fYXV0aFRhZz1udWxsLHRoaXMuX2NhbGxlZD0hMX1CKE4sZyksTi5wcm90b3R5cGUuX3VwZGF0''@;'; put 'put ''ZT1mdW5jdGlvbihMKXtpZighdGhpcy5fY2FsbGVkJiZ0aGlzLl9hbGVuKXt2YXIgSz0xNi10aGlzLl9hbGVuJTE2O0s8MTYmJihLPXkuYWxsb2MoSywwKSx0aGlzLl9naGFzaC51cGRhdGUoSykpfXRoaXMuX2NhbGxlZD0hMDt2YXIgVT10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxMKTtyZXR1''@;'; put 'put ''cm4gdGhpcy5fZ2hhc2gudXBkYXRlKHRoaXMuX2RlY3J5cHQ/TDpVKSx0aGlzLl9sZW4rPUwubGVuZ3RoLFV9LE4ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe2lmKHRoaXMuX2RlY3J5cHQmJiF0aGlzLl9hdXRoVGFnKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgc3RhdGUgb3Ig''@;'; put 'put ''dW5hYmxlIHRvIGF1dGhlbnRpY2F0ZSBkYXRhIik7dmFyIEw9UCh0aGlzLl9naGFzaC5maW5hbCg4KnRoaXMuX2FsZW4sOCp0aGlzLl9sZW4pLHRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2sodGhpcy5fZmluSUQpKTtpZih0aGlzLl9kZWNyeXB0JiZmdW5jdGlvbiBPKEwsSyl7dmFyIFU9MDtM''@;'; put 'put ''Lmxlbmd0aCE9PUsubGVuZ3RoJiZVKys7Zm9yKHZhciBXPU1hdGgubWluKEwubGVuZ3RoLEsubGVuZ3RoKSxZPTA7WTxXOysrWSlVKz1MW1ldXktbWV07cmV0dXJuIFV9KEwsdGhpcy5fYXV0aFRhZykpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0''@;'; put 'put ''aGVudGljYXRlIGRhdGEiKTt0aGlzLl9hdXRoVGFnPUwsdGhpcy5fY2lwaGVyLnNjcnViKCl9LE4ucHJvdG90eXBlLmdldEF1dGhUYWc9ZnVuY3Rpb24oKXtpZih0aGlzLl9kZWNyeXB0fHwheS5pc0J1ZmZlcih0aGlzLl9hdXRoVGFnKSl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8g''@;'; put 'put ''Z2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7cmV0dXJuIHRoaXMuX2F1dGhUYWd9LE4ucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24oSyl7aWYoIXRoaXMuX2RlY3J5cHQpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBv''@;'; put 'put ''cnRlZCBzdGF0ZSIpO3RoaXMuX2F1dGhUYWc9S30sTi5wcm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKEspe2lmKHRoaXMuX2NhbGxlZCl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gc2V0IEFBRCBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpO3RoaXMuX2doYXNoLnVwZGF0ZShLKSx0aGlz''@;'; put 'put ''Ll9hbGVuKz1LLmxlbmd0aH0sdWUuZXhwb3J0cz1OfSw0Njk2Oih1ZSxxLF8pPT57dmFyIEk9XygxNDk0KSx5PV8oNjE5MyksZz1fKDQ5NDYpO3EuY3JlYXRlQ2lwaGVyPXEuQ2lwaGVyPUkuY3JlYXRlQ2lwaGVyLHEuY3JlYXRlQ2lwaGVyaXY9cS5DaXBoZXJpdj1JLmNyZWF0ZUNpcGhlcml2''@;'; put 'put ''LHEuY3JlYXRlRGVjaXBoZXI9cS5EZWNpcGhlcj15LmNyZWF0ZURlY2lwaGVyLHEuY3JlYXRlRGVjaXBoZXJpdj1xLkRlY2lwaGVyaXY9eS5jcmVhdGVEZWNpcGhlcml2LHEubGlzdENpcGhlcnM9cS5nZXRDaXBoZXJzPWZ1bmN0aW9uIEIoKXtyZXR1cm4gT2JqZWN0LmtleXMoZyl9fSw2MTkz''@;'; put 'put ''Oih1ZSxxLF8pPT57dmFyIEk9Xyg0ODQ4KSx5PV8oOTUwOSkuQnVmZmVyLGc9Xyg0NSksQj1fKDU5NjkpLHc9XygxMDI3KSxQPV8oNDQ5NyksRj1fKDMwNDgpO2Z1bmN0aW9uIHooVyxZLFgpe3cuY2FsbCh0aGlzKSx0aGlzLl9jYWNoZT1uZXcgTix0aGlzLl9sYXN0PXZvaWQgMCx0aGlzLl9j''@;'; put 'put ''aXBoZXI9bmV3IFAuQUVTKFkpLHRoaXMuX3ByZXY9eS5mcm9tKFgpLHRoaXMuX21vZGU9Vyx0aGlzLl9hdXRvcGFkZGluZz0hMH1mdW5jdGlvbiBOKCl7dGhpcy5jYWNoZT15LmFsbG9jVW5zYWZlKDApfWZ1bmN0aW9uIEsoVyxZLFgpe3ZhciBlZT1nW1cudG9Mb3dlckNhc2UoKV07aWYoIWVl''@;'; put 'put ''KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgWCYmKFg9eS5mcm9tKFgpKSwiR0NNIiE9PWVlLm1vZGUmJlgubGVuZ3RoIT09ZWUuaXYpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBpdiBsZW5ndGggIitYLmxlbmd0aCk7''@;'; put 'put ''aWYoInN0cmluZyI9PXR5cGVvZiBZJiYoWT15LmZyb20oWSkpLFkubGVuZ3RoIT09ZWUua2V5LzgpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBrZXkgbGVuZ3RoICIrWS5sZW5ndGgpO3JldHVybiJzdHJlYW0iPT09ZWUudHlwZT9uZXcgQihlZS5tb2R1bGUsWSxYLCEwKToiYXV0aCI9''@;'; put 'put ''PT1lZS50eXBlP25ldyBJKGVlLm1vZHVsZSxZLFgsITApOm5ldyB6KGVlLm1vZHVsZSxZLFgpfV8oNTcxNykoeix3KSx6LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFcpe3RoaXMuX2NhY2hlLmFkZChXKTtmb3IodmFyIFksWCxlZT1bXTtZPXRoaXMuX2NhY2hlLmdldCh0aGlzLl9hdXRv''@;'; put 'put ''cGFkZGluZyk7KVg9dGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsWSksZWUucHVzaChYKTtyZXR1cm4geS5jb25jYXQoZWUpfSx6LnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgVz10aGlzLl9jYWNoZS5mbHVzaCgpO2lmKHRoaXMuX2F1dG9wYWRkaW5nKXJldHVybiBmdW5jdGlvbiBM''@;'; put 'put ''KFcpe3ZhciBZPVdbMTVdO2lmKFk8MXx8WT4xNil0aHJvdyBuZXcgRXJyb3IoInVuYWJsZSB0byBkZWNyeXB0IGRhdGEiKTtmb3IodmFyIFg9LTE7KytYPFk7KWlmKFdbWCsoMTYtWSldIT09WSl0aHJvdyBuZXcgRXJyb3IoInVuYWJsZSB0byBkZWNyeXB0IGRhdGEiKTtpZigxNiE9PVkpcmV0''@;'; put 'put ''dXJuIFcuc2xpY2UoMCwxNi1ZKX0odGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsVykpO2lmKFcpdGhyb3cgbmV3IEVycm9yKCJkYXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGgiKX0sei5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oVyl7cmV0dXJuIHRoaXMuX2F1dG9w''@;'; put 'put ''YWRkaW5nPSEhVyx0aGlzfSxOLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oVyl7dGhpcy5jYWNoZT15LmNvbmNhdChbdGhpcy5jYWNoZSxXXSl9LE4ucHJvdG90eXBlLmdldD1mdW5jdGlvbihXKXt2YXIgWTtpZihXKXtpZih0aGlzLmNhY2hlLmxlbmd0aD4xNilyZXR1cm4gWT10aGlzLmNhY2hl''@;'; put 'put ''LnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksWX1lbHNlIGlmKHRoaXMuY2FjaGUubGVuZ3RoPj0xNilyZXR1cm4gWT10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksWTtyZXR1cm4gbnVsbH0sTi5wcm90b3R5''@;'; put 'put ''cGUuZmx1c2g9ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlLmxlbmd0aClyZXR1cm4gdGhpcy5jYWNoZX0scS5jcmVhdGVEZWNpcGhlcj1mdW5jdGlvbiBVKFcsWSl7dmFyIFg9Z1tXLnRvTG93ZXJDYXNlKCldO2lmKCFYKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIp''@;'; put 'put ''O3ZhciBlZT1GKFksITEsWC5rZXksWC5pdik7cmV0dXJuIEsoVyxlZS5rZXksZWUuaXYpfSxxLmNyZWF0ZURlY2lwaGVyaXY9S30sMTQ5NDoodWUscSxfKT0+e3ZhciBJPV8oNDUpLHk9Xyg0ODQ4KSxnPV8oOTUwOSkuQnVmZmVyLEI9Xyg1OTY5KSx3PV8oMTAyNyksUD1fKDQ0OTcpLEY9Xygz''@;'; put 'put ''MDQ4KTtmdW5jdGlvbiB6KFcsWSxYKXt3LmNhbGwodGhpcyksdGhpcy5fY2FjaGU9bmV3IEwsdGhpcy5fY2lwaGVyPW5ldyBQLkFFUyhZKSx0aGlzLl9wcmV2PWcuZnJvbShYKSx0aGlzLl9tb2RlPVcsdGhpcy5fYXV0b3BhZGRpbmc9ITB9Xyg1NzE3KSh6LHcpLHoucHJvdG90eXBlLl91cGRh''@;'; put 'put ''dGU9ZnVuY3Rpb24oVyl7dGhpcy5fY2FjaGUuYWRkKFcpO2Zvcih2YXIgWSxYLGVlPVtdO1k9dGhpcy5fY2FjaGUuZ2V0KCk7KVg9dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsWSksZWUucHVzaChYKTtyZXR1cm4gZy5jb25jYXQoZWUpfTt2YXIgTj1nLmFsbG9jKDE2LDE2KTtmdW5jdGlvbiBM''@;'; put 'put ''KCl7dGhpcy5jYWNoZT1nLmFsbG9jVW5zYWZlKDApfWZ1bmN0aW9uIEsoVyxZLFgpe3ZhciBlZT1JW1cudG9Mb3dlckNhc2UoKV07aWYoIWVlKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgWSYmKFk9Zy5mcm9tKFkpKSxZLmxl''@;'; put 'put ''bmd0aCE9PWVlLmtleS84KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQga2V5IGxlbmd0aCAiK1kubGVuZ3RoKTtpZigic3RyaW5nIj09dHlwZW9mIFgmJihYPWcuZnJvbShYKSksIkdDTSIhPT1lZS5tb2RlJiZYLmxlbmd0aCE9PWVlLml2KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFs''@;'; put 'put ''aWQgaXYgbGVuZ3RoICIrWC5sZW5ndGgpO3JldHVybiJzdHJlYW0iPT09ZWUudHlwZT9uZXcgQihlZS5tb2R1bGUsWSxYKToiYXV0aCI9PT1lZS50eXBlP25ldyB5KGVlLm1vZHVsZSxZLFgpOm5ldyB6KGVlLm1vZHVsZSxZLFgpfXoucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBX''@;'; put 'put ''PXRoaXMuX2NhY2hlLmZsdXNoKCk7aWYodGhpcy5fYXV0b3BhZGRpbmcpcmV0dXJuIFc9dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsVyksdGhpcy5fY2lwaGVyLnNjcnViKCksVztpZighVy5lcXVhbHMoTikpdGhyb3cgdGhpcy5fY2lwaGVyLnNjcnViKCksbmV3IEVycm9yKCJkYXRhIG5vdCBt''@;'; put 'put ''dWx0aXBsZSBvZiBibG9jayBsZW5ndGgiKX0sei5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oVyl7cmV0dXJuIHRoaXMuX2F1dG9wYWRkaW5nPSEhVyx0aGlzfSxMLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oVyl7dGhpcy5jYWNoZT1nLmNvbmNhdChbdGhpcy5jYWNoZSxXXSl9''@;'; put 'put ''LEwucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE1KXt2YXIgVz10aGlzLmNhY2hlLnNsaWNlKDAsMTYpO3JldHVybiB0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLFd9cmV0dXJuIG51bGx9LEwucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7''@;'; put 'put ''Zm9yKHZhciBXPTE2LXRoaXMuY2FjaGUubGVuZ3RoLFk9Zy5hbGxvY1Vuc2FmZShXKSxYPS0xOysrWDxXOylZLndyaXRlVUludDgoVyxYKTtyZXR1cm4gZy5jb25jYXQoW3RoaXMuY2FjaGUsWV0pfSxxLmNyZWF0ZUNpcGhlcml2PUsscS5jcmVhdGVDaXBoZXI9ZnVuY3Rpb24gVShXLFkpe3Zh''@;'; put 'put ''ciBYPUlbVy50b0xvd2VyQ2FzZSgpXTtpZighWCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTt2YXIgZWU9RihZLCExLFgua2V5LFguaXYpO3JldHVybiBLKFcsZWUua2V5LGVlLml2KX19LDMyODg6KHVlLHEsXyk9Pnt2YXIgST1fKDk1MDkpLkJ1ZmZlcix5PUku''@;'; put 'put ''YWxsb2MoMTYsMCk7ZnVuY3Rpb24gQihQKXt2YXIgRj1JLmFsbG9jVW5zYWZlKDE2KTtyZXR1cm4gRi53cml0ZVVJbnQzMkJFKFBbMF0+Pj4wLDApLEYud3JpdGVVSW50MzJCRShQWzFdPj4+MCw0KSxGLndyaXRlVUludDMyQkUoUFsyXT4+PjAsOCksRi53cml0ZVVJbnQzMkJFKFBbM10+Pj4w''@;'; put 'put ''LDEyKSxGfWZ1bmN0aW9uIHcoUCl7dGhpcy5oPVAsdGhpcy5zdGF0ZT1JLmFsbG9jKDE2LDApLHRoaXMuY2FjaGU9SS5hbGxvY1Vuc2FmZSgwKX13LnByb3RvdHlwZS5naGFzaD1mdW5jdGlvbihQKXtmb3IodmFyIEY9LTE7KytGPFAubGVuZ3RoOyl0aGlzLnN0YXRlW0ZdXj1QW0ZdO3RoaXMu''@;'; put 'put ''X211bHRpcGx5KCl9LHcucHJvdG90eXBlLl9tdWx0aXBseT1mdW5jdGlvbigpe2Zvcih2YXIgTyxOLFA9ZnVuY3Rpb24gZyhQKXtyZXR1cm5bUC5yZWFkVUludDMyQkUoMCksUC5yZWFkVUludDMyQkUoNCksUC5yZWFkVUludDMyQkUoOCksUC5yZWFkVUludDMyQkUoMTIpXX0odGhpcy5oKSxG''@;'; put 'put ''PVswLDAsMCwwXSxMPS0xOysrTDwxMjg7KXtmb3IoISEodGhpcy5zdGF0ZVt+fihMLzgpXSYxPDw3LUwlOCkmJihGWzBdXj1QWzBdLEZbMV1ePVBbMV0sRlsyXV49UFsyXSxGWzNdXj1QWzNdKSxOPSEhKDEmUFszXSksTz0zO08+MDtPLS0pUFtPXT1QW09dPj4+MXwoMSZQW08tMV0pPDwzMTtQ''@;'; put 'put ''WzBdPVBbMF0+Pj4xLE4mJihQWzBdPS01MjAwOTM2OTZeUFswXSl9dGhpcy5zdGF0ZT1CKEYpfSx3LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oUCl7dGhpcy5jYWNoZT1JLmNvbmNhdChbdGhpcy5jYWNoZSxQXSk7Zm9yKHZhciBGO3RoaXMuY2FjaGUubGVuZ3RoPj0xNjspRj10aGlzLmNh''@;'; put 'put ''Y2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksdGhpcy5naGFzaChGKX0sdy5wcm90b3R5cGUuZmluYWw9ZnVuY3Rpb24oUCxGKXtyZXR1cm4gdGhpcy5jYWNoZS5sZW5ndGgmJnRoaXMuZ2hhc2goSS5jb25jYXQoW3RoaXMuY2FjaGUseV0sMTYpKSx0aGlz''@;'; put 'put ''LmdoYXNoKEIoWzAsUCwwLEZdKSksdGhpcy5zdGF0ZX0sdWUuZXhwb3J0cz13fSw2ODU6dWU9Pnt1ZS5leHBvcnRzPWZ1bmN0aW9uIHEoXyl7Zm9yKHZhciB5LEk9Xy5sZW5ndGg7SS0tOyl7aWYoMjU1IT09KHk9Xy5yZWFkVUludDgoSSkpKXt5KyssXy53cml0ZVVJbnQ4KHksSSk7YnJlYWt9''@;'; put 'put ''Xy53cml0ZVVJbnQ4KDAsSSl9fX0sNTI5MjoodWUscSxfKT0+e3ZhciBJPV8oNzI5NSk7cS5lbmNyeXB0PWZ1bmN0aW9uKHksZyl7dmFyIEI9SShnLHkuX3ByZXYpO3JldHVybiB5Ll9wcmV2PXkuX2NpcGhlci5lbmNyeXB0QmxvY2soQikseS5fcHJldn0scS5kZWNyeXB0PWZ1bmN0aW9uKHks''@;'; put 'put ''Zyl7dmFyIEI9eS5fcHJldjt5Ll9wcmV2PWc7dmFyIHc9eS5fY2lwaGVyLmRlY3J5cHRCbG9jayhnKTtyZXR1cm4gSSh3LEIpfX0sNjMxMToodWUscSxfKT0+e3ZhciBJPV8oOTUwOSkuQnVmZmVyLHk9Xyg3Mjk1KTtmdW5jdGlvbiBnKEIsdyxQKXt2YXIgRj13Lmxlbmd0aCxPPXkodyxCLl9j''@;'; put 'put ''YWNoZSk7cmV0dXJuIEIuX2NhY2hlPUIuX2NhY2hlLnNsaWNlKEYpLEIuX3ByZXY9SS5jb25jYXQoW0IuX3ByZXYsUD93Ok9dKSxPfXEuZW5jcnlwdD1mdW5jdGlvbihCLHcsUCl7Zm9yKHZhciBPLEY9SS5hbGxvY1Vuc2FmZSgwKTt3Lmxlbmd0aDspe2lmKDA9PT1CLl9jYWNoZS5sZW5ndGgm''@;'; put 'put ''JihCLl9jYWNoZT1CLl9jaXBoZXIuZW5jcnlwdEJsb2NrKEIuX3ByZXYpLEIuX3ByZXY9SS5hbGxvY1Vuc2FmZSgwKSksIShCLl9jYWNoZS5sZW5ndGg8PXcubGVuZ3RoKSl7Rj1JLmNvbmNhdChbRixnKEIsdyxQKV0pO2JyZWFrfUY9SS5jb25jYXQoW0YsZyhCLHcuc2xpY2UoMCxPPUIuX2Nh''@;'; put 'put ''Y2hlLmxlbmd0aCksUCldKSx3PXcuc2xpY2UoTyl9cmV0dXJuIEZ9fSwxNTEwOih1ZSxxLF8pPT57dmFyIEk9Xyg5NTA5KS5CdWZmZXI7ZnVuY3Rpb24geShCLHcsUCl7Zm9yKHZhciBMLEssTz0tMSxOPTA7KytPPDg7KU4rPSgxMjgmKEs9Qi5fY2lwaGVyLmVuY3J5cHRCbG9jayhCLl9wcmV2''@;'; put 'put ''KVswXV4oTD13JjE8PDctTz8xMjg6MCkpKT4+TyU4LEIuX3ByZXY9ZyhCLl9wcmV2LFA/TDpLKTtyZXR1cm4gTn1mdW5jdGlvbiBnKEIsdyl7dmFyIFA9Qi5sZW5ndGgsRj0tMSxPPUkuYWxsb2NVbnNhZmUoQi5sZW5ndGgpO2ZvcihCPUkuY29uY2F0KFtCLEkuZnJvbShbd10pXSk7KytGPFA7''@;'; put 'put ''KU9bRl09QltGXTw8MXxCW0YrMV0+Pjc7cmV0dXJuIE99cS5lbmNyeXB0PWZ1bmN0aW9uKEIsdyxQKXtmb3IodmFyIEY9dy5sZW5ndGgsTz1JLmFsbG9jVW5zYWZlKEYpLHo9LTE7Kyt6PEY7KU9bel09eShCLHdbel0sUCk7cmV0dXJuIE99fSwxOTY0Oih1ZSxxLF8pPT57dmFyIEk9Xyg5NTA5''@;'; put 'put ''KS5CdWZmZXI7ZnVuY3Rpb24geShnLEIsdyl7dmFyIEY9Zy5fY2lwaGVyLmVuY3J5cHRCbG9jayhnLl9wcmV2KVswXV5CO3JldHVybiBnLl9wcmV2PUkuY29uY2F0KFtnLl9wcmV2LnNsaWNlKDEpLEkuZnJvbShbdz9COkZdKV0pLEZ9cS5lbmNyeXB0PWZ1bmN0aW9uKGcsQix3KXtmb3IodmFy''@;'; put 'put ''IFA9Qi5sZW5ndGgsRj1JLmFsbG9jVW5zYWZlKFApLE89LTE7KytPPFA7KUZbT109eShnLEJbT10sdyk7cmV0dXJuIEZ9fSw2MDA5Oih1ZSxxLF8pPT57dmFyIEk9Xyg3Mjk1KSx5PV8oOTUwOSkuQnVmZmVyLGc9Xyg2ODUpO2Z1bmN0aW9uIEIoUCl7dmFyIEY9UC5fY2lwaGVyLmVuY3J5cHRC''@;'; put 'put ''bG9ja1JhdyhQLl9wcmV2KTtyZXR1cm4gZyhQLl9wcmV2KSxGfXEuZW5jcnlwdD1mdW5jdGlvbihQLEYpe3ZhciBPPU1hdGguY2VpbChGLmxlbmd0aC8xNiksej1QLl9jYWNoZS5sZW5ndGg7UC5fY2FjaGU9eS5jb25jYXQoW1AuX2NhY2hlLHkuYWxsb2NVbnNhZmUoMTYqTyldKTtmb3IodmFy''@;'; put 'put ''IE49MDtOPE87TisrKXt2YXIgTD1CKFApLEs9eisxNipOO1AuX2NhY2hlLndyaXRlVUludDMyQkUoTFswXSxLKzApLFAuX2NhY2hlLndyaXRlVUludDMyQkUoTFsxXSxLKzQpLFAuX2NhY2hlLndyaXRlVUludDMyQkUoTFsyXSxLKzgpLFAuX2NhY2hlLndyaXRlVUludDMyQkUoTFszXSxLKzEy''@;'; put 'put ''KX12YXIgVT1QLl9jYWNoZS5zbGljZSgwLEYubGVuZ3RoKTtyZXR1cm4gUC5fY2FjaGU9UC5fY2FjaGUuc2xpY2UoRi5sZW5ndGgpLEkoRixVKX19LDEwODQ6KHVlLHEpPT57cS5lbmNyeXB0PWZ1bmN0aW9uKF8sSSl7cmV0dXJuIF8uX2NpcGhlci5lbmNyeXB0QmxvY2soSSl9LHEuZGVjcnlw''@;'; put 'put ''dD1mdW5jdGlvbihfLEkpe3JldHVybiBfLl9jaXBoZXIuZGVjcnlwdEJsb2NrKEkpfX0sNDU6KHVlLHEsXyk9Pnt2YXIgST17RUNCOl8oMTA4NCksQ0JDOl8oNTI5MiksQ0ZCOl8oNjMxMSksQ0ZCODpfKDE5NjQpLENGQjE6XygxNTEwKSxPRkI6Xyg4ODYxKSxDVFI6Xyg2MDA5KSxHQ006Xyg2''@;'; put 'put ''MDA5KX0seT1fKDQ5NDYpO2Zvcih2YXIgZyBpbiB5KXlbZ10ubW9kdWxlPUlbeVtnXS5tb2RlXTt1ZS5leHBvcnRzPXl9LDg4NjE6KHVlLHEsXyk9Pnt2YXIgST1fKDg3NjQpLkJ1ZmZlcix5PV8oNzI5NSk7ZnVuY3Rpb24gZyhCKXtyZXR1cm4gQi5fcHJldj1CLl9jaXBoZXIuZW5jcnlwdEJs''@;'; put 'put ''b2NrKEIuX3ByZXYpLEIuX3ByZXZ9cS5lbmNyeXB0PWZ1bmN0aW9uKEIsdyl7Zm9yKDtCLl9jYWNoZS5sZW5ndGg8dy5sZW5ndGg7KUIuX2NhY2hlPUkuY29uY2F0KFtCLl9jYWNoZSxnKEIpXSk7dmFyIFA9Qi5fY2FjaGUuc2xpY2UoMCx3Lmxlbmd0aCk7cmV0dXJuIEIuX2NhY2hlPUIuX2Nh''@;'; put 'put ''Y2hlLnNsaWNlKHcubGVuZ3RoKSx5KHcsUCl9fSw1OTY5Oih1ZSxxLF8pPT57dmFyIEk9Xyg0NDk3KSx5PV8oOTUwOSkuQnVmZmVyLGc9XygxMDI3KTtmdW5jdGlvbiB3KFAsRixPLHope2cuY2FsbCh0aGlzKSx0aGlzLl9jaXBoZXI9bmV3IEkuQUVTKEYpLHRoaXMuX3ByZXY9eS5mcm9tKE8p''@;'; put 'put ''LHRoaXMuX2NhY2hlPXkuYWxsb2NVbnNhZmUoMCksdGhpcy5fc2VjQ2FjaGU9eS5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9kZWNyeXB0PXosdGhpcy5fbW9kZT1QfV8oNTcxNykodyxnKSx3LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFApe3JldHVybiB0aGlzLl9tb2RlLmVuY3J5cHQodGhp''@;'; put 'put ''cyxQLHRoaXMuX2RlY3J5cHQpfSx3LnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt0aGlzLl9jaXBoZXIuc2NydWIoKX0sdWUuZXhwb3J0cz13fSwzNjE0Oih1ZSxxLF8pPT57dmFyIEk9Xyg3NjY3KSx5PV8oNDY5NiksZz1fKDQ1KSxCPV8oOTcxNSksdz1fKDMwNDgpO2Z1bmN0aW9uIE8o''@;'; put 'put ''TCxLLFUpe2lmKEw9TC50b0xvd2VyQ2FzZSgpLGdbTF0pcmV0dXJuIHkuY3JlYXRlQ2lwaGVyaXYoTCxLLFUpO2lmKEJbTF0pcmV0dXJuIG5ldyBJKHtrZXk6SyxpdjpVLG1vZGU6TH0pO3Rocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpfWZ1bmN0aW9uIHooTCxLLFUp''@;'; put 'put ''e2lmKEw9TC50b0xvd2VyQ2FzZSgpLGdbTF0pcmV0dXJuIHkuY3JlYXRlRGVjaXBoZXJpdihMLEssVSk7aWYoQltMXSlyZXR1cm4gbmV3IEkoe2tleTpLLGl2OlUsbW9kZTpMLGRlY3J5cHQ6ITB9KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKX1xLmNyZWF0ZUNp''@;'; put 'put ''cGhlcj1xLkNpcGhlcj1mdW5jdGlvbiBQKEwsSyl7dmFyIFUsVztpZihMPUwudG9Mb3dlckNhc2UoKSxnW0xdKVU9Z1tMXS5rZXksVz1nW0xdLml2O2Vsc2V7aWYoIUJbTF0pdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIik7VT04KkJbTF0ua2V5LFc9QltMXS5pdn12''@;'; put 'put ''YXIgWT13KEssITEsVSxXKTtyZXR1cm4gTyhMLFkua2V5LFkuaXYpfSxxLmNyZWF0ZUNpcGhlcml2PXEuQ2lwaGVyaXY9TyxxLmNyZWF0ZURlY2lwaGVyPXEuRGVjaXBoZXI9ZnVuY3Rpb24gRihMLEspe3ZhciBVLFc7aWYoTD1MLnRvTG93ZXJDYXNlKCksZ1tMXSlVPWdbTF0ua2V5LFc9Z1tM''@;'; put 'put ''XS5pdjtlbHNle2lmKCFCW0xdKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO1U9OCpCW0xdLmtleSxXPUJbTF0uaXZ9dmFyIFk9dyhLLCExLFUsVyk7cmV0dXJuIHooTCxZLmtleSxZLml2KX0scS5jcmVhdGVEZWNpcGhlcml2PXEuRGVjaXBoZXJpdj16LHEubGlz''@;'; put 'put ''dENpcGhlcnM9cS5nZXRDaXBoZXJzPWZ1bmN0aW9uIE4oKXtyZXR1cm4gT2JqZWN0LmtleXMoQikuY29uY2F0KHkuZ2V0Q2lwaGVycygpKX19LDc2Njc6KHVlLHEsXyk9Pnt2YXIgST1fKDEwMjcpLHk9Xyg1MjUxKSxnPV8oNTcxNyksQj1fKDk1MDkpLkJ1ZmZlcix3PXsiZGVzLWVkZTMtY2Jj''@;'; put 'put ''Ijp5LkNCQy5pbnN0YW50aWF0ZSh5LkVERSksImRlcy1lZGUzIjp5LkVERSwiZGVzLWVkZS1jYmMiOnkuQ0JDLmluc3RhbnRpYXRlKHkuRURFKSwiZGVzLWVkZSI6eS5FREUsImRlcy1jYmMiOnkuQ0JDLmluc3RhbnRpYXRlKHkuREVTKSwiZGVzLWVjYiI6eS5ERVN9O2Z1bmN0aW9uIFAoRil7''@;'; put 'put ''SS5jYWxsKHRoaXMpO3ZhciBOLE89Ri5tb2RlLnRvTG93ZXJDYXNlKCksej13W09dO049Ri5kZWNyeXB0PyJkZWNyeXB0IjoiZW5jcnlwdCI7dmFyIEw9Ri5rZXk7Qi5pc0J1ZmZlcihMKXx8KEw9Qi5mcm9tKEwpKSwoImRlcy1lZGUiPT09T3x8ImRlcy1lZGUtY2JjIj09PU8pJiYoTD1CLmNv''@;'; put 'put ''bmNhdChbTCxMLnNsaWNlKDAsOCldKSk7dmFyIEs9Ri5pdjtCLmlzQnVmZmVyKEspfHwoSz1CLmZyb20oSykpLHRoaXMuX2Rlcz16LmNyZWF0ZSh7a2V5OkwsaXY6Syx0eXBlOk59KX13LmRlcz13WyJkZXMtY2JjIl0sdy5kZXMzPXdbImRlcy1lZGUzLWNiYyJdLHVlLmV4cG9ydHM9UCxnKFAs''@;'; put 'put ''SSksUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihGKXtyZXR1cm4gQi5mcm9tKHRoaXMuX2Rlcy51cGRhdGUoRikpfSxQLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXtyZXR1cm4gQi5mcm9tKHRoaXMuX2Rlcy5maW5hbCgpKX19LDk3MTU6KHVlLHEpPT57cVsiZGVzLWVjYiJdPXtr''@;'; put 'put ''ZXk6OCxpdjowfSxxWyJkZXMtY2JjIl09cS5kZXM9e2tleTo4LGl2Ojh9LHFbImRlcy1lZGUzLWNiYyJdPXEuZGVzMz17a2V5OjI0LGl2Ojh9LHFbImRlcy1lZGUzIl09e2tleToyNCxpdjowfSxxWyJkZXMtZWRlLWNiYyJdPXtrZXk6MTYsaXY6OH0scVsiZGVzLWVkZSJdPXtrZXk6MTYsaXY6''@;'; put 'put ''MH19LDM2NjM6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9XygzNTUwKSx5PV8oMTc5OCksZz1fKDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBCKEYpe3ZhciB6LE89Ri5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtkb3t6PW5ldyBJKHkoTykpfXdoaWxlKHouY21wKEYubW9kdWx1cyk+PTB8fCF6''@;'; put 'put ''LnVtb2QoRi5wcmltZTEpfHwhei51bW9kKEYucHJpbWUyKSk7cmV0dXJuIHp9ZnVuY3Rpb24gUChGLE8pe3ZhciB6PWZ1bmN0aW9uIHcoRil7dmFyIE89QihGKTtyZXR1cm57YmxpbmRlcjpPLnRvUmVkKEkubW9udChGLm1vZHVsdXMpKS5yZWRQb3cobmV3IEkoRi5wdWJsaWNFeHBvbmVudCkp''@;'; put 'put ''LmZyb21SZWQoKSx1bmJsaW5kZXI6Ty5pbnZtKEYubW9kdWx1cyl9fShPKSxOPU8ubW9kdWx1cy5ieXRlTGVuZ3RoKCksTD1uZXcgSShGKS5tdWwoei5ibGluZGVyKS51bW9kKE8ubW9kdWx1cyksSz1MLnRvUmVkKEkubW9udChPLnByaW1lMSkpLFU9TC50b1JlZChJLm1vbnQoTy5wcmltZTIp''@;'; put 'put ''KSxXPU8uY29lZmZpY2llbnQsWT1PLnByaW1lMSxYPU8ucHJpbWUyLGVlPUsucmVkUG93KE8uZXhwb25lbnQxKS5mcm9tUmVkKCksSj1VLnJlZFBvdyhPLmV4cG9uZW50MikuZnJvbVJlZCgpLHJlPWVlLmlzdWIoSikuaW11bChXKS51bW9kKFkpLmltdWwoWCk7cmV0dXJuIEouaWFkZChyZSku''@;'; put 'put ''aW11bCh6LnVuYmxpbmRlcikudW1vZChPLm1vZHVsdXMpLnRvQXJyYXlMaWtlKGcsImJlIixOKX1QLmdldHI9Qix1ZS5leHBvcnRzPVB9LDYwNDI6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1fKDUyMDcpfSw0NzQzOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8o''@;'; put 'put ''OTUwOSkuQnVmZmVyLHk9XygzNDgyKSxnPV8oMzg3MiksQj1fKDU3MTcpLHc9XygyOTU3KSxQPV8oNzc1MyksRj1fKDUyMDcpO2Z1bmN0aW9uIE8oSyl7Zy5Xcml0YWJsZS5jYWxsKHRoaXMpO3ZhciBVPUZbS107aWYoIVUpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG1lc3NhZ2UgZGlnZXN0''@;'; put 'put ''Iik7dGhpcy5faGFzaFR5cGU9VS5oYXNoLHRoaXMuX2hhc2g9eShVLmhhc2gpLHRoaXMuX3RhZz1VLmlkLHRoaXMuX3NpZ25UeXBlPVUuc2lnbn1mdW5jdGlvbiB6KEspe2cuV3JpdGFibGUuY2FsbCh0aGlzKTt2YXIgVT1GW0tdO2lmKCFVKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBtZXNz''@;'; put 'put ''YWdlIGRpZ2VzdCIpO3RoaXMuX2hhc2g9eShVLmhhc2gpLHRoaXMuX3RhZz1VLmlkLHRoaXMuX3NpZ25UeXBlPVUuc2lnbn1mdW5jdGlvbiBOKEspe3JldHVybiBuZXcgTyhLKX1mdW5jdGlvbiBMKEspe3JldHVybiBuZXcgeihLKX1PYmplY3Qua2V5cyhGKS5mb3JFYWNoKGZ1bmN0aW9uKEsp''@;'; put 'put ''e0ZbS10uaWQ9SS5mcm9tKEZbS10uaWQsImhleCIpLEZbSy50b0xvd2VyQ2FzZSgpXT1GW0tdfSksQihPLGcuV3JpdGFibGUpLE8ucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihVLFcsWSl7dGhpcy5faGFzaC51cGRhdGUoVSksWSgpfSxPLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oVSxX''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5faGFzaC51cGRhdGUoInN0cmluZyI9PXR5cGVvZiBVP0kuZnJvbShVLFcpOlUpLHRoaXN9LE8ucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oVSxXKXt0aGlzLmVuZCgpO3ZhciBZPXRoaXMuX2hhc2guZGlnZXN0KCksWD13KFksVSx0aGlzLl9oYXNoVHlwZSx0aGlzLl9z''@;'; put 'put ''aWduVHlwZSx0aGlzLl90YWcpO3JldHVybiBXP1gudG9TdHJpbmcoVyk6WH0sQih6LGcuV3JpdGFibGUpLHoucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihVLFcsWSl7dGhpcy5faGFzaC51cGRhdGUoVSksWSgpfSx6LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24oVSxXKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5faGFzaC51cGRhdGUoInN0cmluZyI9PXR5cGVvZiBVP0kuZnJvbShVLFcpOlUpLHRoaXN9LHoucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihVLFcsWSl7dmFyIFg9InN0cmluZyI9PXR5cGVvZiBXP0kuZnJvbShXLFkpOlc7dGhpcy5lbmQoKTt2YXIgZWU9dGhpcy5faGFzaC5kaWdlc3Qo''@;'; put 'put ''KTtyZXR1cm4gUChYLGVlLFUsdGhpcy5fc2lnblR5cGUsdGhpcy5fdGFnKX0sdWUuZXhwb3J0cz17U2lnbjpOLFZlcmlmeTpMLGNyZWF0ZVNpZ246TixjcmVhdGVWZXJpZnk6TH19LDI5NTc6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg5NTA5KS5CdWZmZXIseT1fKDgzNTUpLGc9''@;'; put 'put ''XygzNjYzKSxCPV8oNjk0OCkuZWMsdz1fKDM1NTApLFA9Xyg5ODApLEY9XygxMzA4KTtmdW5jdGlvbiBVKEoscmUsaWUsbGUpe2lmKChKPUkuZnJvbShKLnRvQXJyYXkoKSkpLmxlbmd0aDxyZS5ieXRlTGVuZ3RoKCkpe3ZhciBtZT1JLmFsbG9jKHJlLmJ5dGVMZW5ndGgoKS1KLmxlbmd0aCk7''@;'; put 'put ''Sj1JLmNvbmNhdChbbWUsSl0pfXZhciBfZT1pZS5sZW5ndGgsVGU9ZnVuY3Rpb24gWShKLHJlKXtKPShKPVcoSixyZSkpLm1vZChyZSk7dmFyIGllPUkuZnJvbShKLnRvQXJyYXkoKSk7aWYoaWUubGVuZ3RoPHJlLmJ5dGVMZW5ndGgoKSl7dmFyIGxlPUkuYWxsb2MocmUuYnl0ZUxlbmd0aCgp''@;'; put 'put ''LWllLmxlbmd0aCk7aWU9SS5jb25jYXQoW2xlLGllXSl9cmV0dXJuIGllfShpZSxyZSksU2U9SS5hbGxvYyhfZSk7U2UuZmlsbCgxKTt2YXIgemU9SS5hbGxvYyhfZSk7cmV0dXJuIHplPXkobGUsemUpLnVwZGF0ZShTZSkudXBkYXRlKEkuZnJvbShbMF0pKS51cGRhdGUoSikudXBkYXRlKFRl''@;'; put 'put ''KS5kaWdlc3QoKSxTZT15KGxlLHplKS51cGRhdGUoU2UpLmRpZ2VzdCgpLHtrOnplPXkobGUsemUpLnVwZGF0ZShTZSkudXBkYXRlKEkuZnJvbShbMV0pKS51cGRhdGUoSikudXBkYXRlKFRlKS5kaWdlc3QoKSx2OlNlPXkobGUsemUpLnVwZGF0ZShTZSkuZGlnZXN0KCl9fWZ1bmN0aW9uIFco''@;'; put 'put ''SixyZSl7dmFyIGllPW5ldyB3KEopLGxlPShKLmxlbmd0aDw8MyktcmUuYml0TGVuZ3RoKCk7cmV0dXJuIGxlPjAmJmllLmlzaHJuKGxlKSxpZX1mdW5jdGlvbiBYKEoscmUsaWUpe3ZhciBsZSxtZTtkb3tmb3IobGU9SS5hbGxvYygwKTs4KmxlLmxlbmd0aDxKLmJpdExlbmd0aCgpOylyZS52''@;'; put 'put ''PXkoaWUscmUuaykudXBkYXRlKHJlLnYpLmRpZ2VzdCgpLGxlPUkuY29uY2F0KFtsZSxyZS52XSk7bWU9VyhsZSxKKSxyZS5rPXkoaWUscmUuaykudXBkYXRlKHJlLnYpLnVwZGF0ZShJLmZyb20oWzBdKSkuZGlnZXN0KCkscmUudj15KGllLHJlLmspLnVwZGF0ZShyZS52KS5kaWdlc3QoKX13''@;'; put 'put ''aGlsZSgtMSE9PW1lLmNtcChKKSk7cmV0dXJuIG1lfWZ1bmN0aW9uIGVlKEoscmUsaWUsbGUpe3JldHVybiBKLnRvUmVkKHcubW9udChpZSkpLnJlZFBvdyhyZSkuZnJvbVJlZCgpLm1vZChsZSl9dWUuZXhwb3J0cz1mdW5jdGlvbiB6KEoscmUsaWUsbGUsbWUpe3ZhciBfZT1QKHJlKTtpZihf''@;'; put 'put ''ZS5jdXJ2ZSl7aWYoImVjZHNhIiE9PWxlJiYiZWNkc2EvcnNhIiE9PWxlKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBOKEoscmUpe3ZhciBpZT1GW3JlLmN1cnZlLmpvaW4oIi4iKV07aWYoIWllKXRocm93IG5ldyBFcnJvcigidW5r''@;'; put 'put ''bm93biBjdXJ2ZSAiK3JlLmN1cnZlLmpvaW4oIi4iKSk7dmFyIF9lPW5ldyBCKGllKS5rZXlGcm9tUHJpdmF0ZShyZS5wcml2YXRlS2V5KS5zaWduKEopO3JldHVybiBJLmZyb20oX2UudG9ERVIoKSl9KEosX2UpfWlmKCJkc2EiPT09X2UudHlwZSl7aWYoImRzYSIhPT1sZSl0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24gTChKLHJlLGllKXtmb3IodmFyIHplLGxlPXJlLnBhcmFtcy5wcml2X2tleSxtZT1yZS5wYXJhbXMucCxfZT1yZS5wYXJhbXMucSxUZT1yZS5wYXJhbXMuZyxTZT1uZXcgdygwKSxWPVcoSixfZSkubW9kKF9l''@;'; put 'put ''KSxwPSExLGI9VShsZSxfZSxKLGllKTshMT09PXA7KVNlPWVlKFRlLHplPVgoX2UsYixpZSksbWUsX2UpLDA9PT0ocD16ZS5pbnZtKF9lKS5pbXVsKFYuYWRkKGxlLm11bChTZSkpKS5tb2QoX2UpKS5jbXBuKDApJiYocD0hMSxTZT1uZXcgdygwKSk7cmV0dXJuIGZ1bmN0aW9uIEsoSixyZSl7''@;'; put 'put ''Sj1KLnRvQXJyYXkoKSxyZT1yZS50b0FycmF5KCksMTI4JkpbMF0mJihKPVswXS5jb25jYXQoSikpLDEyOCZyZVswXSYmKHJlPVswXS5jb25jYXQocmUpKTt2YXIgbGU9WzQ4LEoubGVuZ3RoK3JlLmxlbmd0aCs0LDIsSi5sZW5ndGhdO3JldHVybiBsZT1sZS5jb25jYXQoSixbMixyZS5sZW5n''@;'; put 'put ''dGhdLHJlKSxJLmZyb20obGUpfShTZSxwKX0oSixfZSxpZSl9aWYoInJzYSIhPT1sZSYmImVjZHNhL3JzYSIhPT1sZSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUiKTtpZih2b2lkIDAhPT1yZS5wYWRkaW5nJiYxIT09cmUucGFkZGluZyl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''ImlsbGVnYWwgb3IgdW5zdXBwb3J0ZWQgcGFkZGluZyBtb2RlIik7Sj1JLmNvbmNhdChbbWUsSl0pO2Zvcih2YXIgVGU9X2UubW9kdWx1cy5ieXRlTGVuZ3RoKCksU2U9WzAsMV07Si5sZW5ndGgrU2UubGVuZ3RoKzE8VGU7KVNlLnB1c2goMjU1KTtTZS5wdXNoKDApO2Zvcih2YXIgemU9LTE7''@;'; put 'put ''Kyt6ZTxKLmxlbmd0aDspU2UucHVzaChKW3plXSk7cmV0dXJuIGcoU2UsX2UpfSx1ZS5leHBvcnRzLmdldEtleT1VLHVlLmV4cG9ydHMubWFrZUtleT1YfSw3NzUzOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oOTUwOSkuQnVmZmVyLHk9XygzNTUwKSxnPV8oNjk0OCkuZWMsQj1f''@;'; put 'put ''KDk4MCksdz1fKDEzMDgpO2Z1bmN0aW9uIHooTixMKXtpZihOLmNtcG4oMCk8PTApdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpZyIpO2lmKE4uY21wKEwpPj0wKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBzaWciKX11ZS5leHBvcnRzPWZ1bmN0aW9uIFAoTixMLEssVSxXKXt2YXIgWT1C''@;'; put 'put ''KEspO2lmKCJlYyI9PT1ZLnR5cGUpe2lmKCJlY2RzYSIhPT1VJiYiZWNkc2EvcnNhIiE9PVUpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24gRihOLEwsSyl7dmFyIFU9d1tLLmRhdGEuYWxnb3JpdGhtLmN1cnZlLmpvaW4oIi4iKV07aWYo''@;'; put 'put ''IVUpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGN1cnZlICIrSy5kYXRhLmFsZ29yaXRobS5jdXJ2ZS5qb2luKCIuIikpO3JldHVybiBuZXcgZyhVKS52ZXJpZnkoTCxOLEsuZGF0YS5zdWJqZWN0UHJpdmF0ZUtleS5kYXRhKX0oTixMLFkpfWlmKCJkc2EiPT09WS50eXBlKXtpZigiZHNhIiE9''@;'; put 'put ''PVUpdGhyb3cgbmV3IEVycm9yKCJ3cm9uZyBwdWJsaWMga2V5IHR5cGUiKTtyZXR1cm4gZnVuY3Rpb24gTyhOLEwsSyl7dmFyIFU9Sy5kYXRhLnAsVz1LLmRhdGEucSxZPUsuZGF0YS5nLFg9Sy5kYXRhLnB1Yl9rZXksZWU9Qi5zaWduYXR1cmUuZGVjb2RlKE4sImRlciIpLEo9ZWUucyxyZT1l''@;'; put 'put ''ZS5yO3ooSixXKSx6KHJlLFcpO3ZhciBpZT15Lm1vbnQoVSksbGU9Si5pbnZtKFcpO3JldHVybiAwPT09WS50b1JlZChpZSkucmVkUG93KG5ldyB5KEwpLm11bChsZSkubW9kKFcpKS5mcm9tUmVkKCkubXVsKFgudG9SZWQoaWUpLnJlZFBvdyhyZS5tdWwobGUpLm1vZChXKSkuZnJvbVJlZCgp''@;'; put 'put ''KS5tb2QoVSkubW9kKFcpLmNtcChyZSl9KE4sTCxZKX1pZigicnNhIiE9PVUmJiJlY2RzYS9yc2EiIT09VSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIpO0w9SS5jb25jYXQoW1csTF0pO2Zvcih2YXIgWD1ZLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLGVlPVsxXSxKPTA7''@;'; put 'put ''TC5sZW5ndGgrZWUubGVuZ3RoKzI8WDspZWUucHVzaCgyNTUpLEorPTE7ZWUucHVzaCgwKTtmb3IodmFyIHJlPS0xOysrcmU8TC5sZW5ndGg7KWVlLnB1c2goTFtyZV0pO2VlPUkuZnJvbShlZSk7dmFyIGllPXkubW9udChZLm1vZHVsdXMpO049KE49bmV3IHkoTikudG9SZWQoaWUpKS5yZWRQ''@;'; put 'put ''b3cobmV3IHkoWS5wdWJsaWNFeHBvbmVudCkpLE49SS5mcm9tKE4uZnJvbVJlZCgpLnRvQXJyYXkoKSk7dmFyIGxlPUo8OD8xOjA7Zm9yKFg9TWF0aC5taW4oTi5sZW5ndGgsZWUubGVuZ3RoKSxOLmxlbmd0aCE9PWVlLmxlbmd0aCYmKGxlPTEpLHJlPS0xOysrcmU8WDspbGV8PU5bcmVdXmVl''@;'; put 'put ''W3JlXTtyZXR1cm4gMD09PWxlfX0sNDM5MDoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDgyMTIpLHk9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKEspe3ZhciBVPVtdO2Zvcih2YXIgVyBpbiBLKVUucHVzaChXKTtyZXR1cm4gVX07dWUuZXhwb3J0cz16O3ZhciBnPU9iamVjdC5jcmVh''@;'; put 'put ''dGUoXyg2NDk3KSk7Zy5pbmhlcml0cz1fKDU3MTcpO3ZhciBCPV8oNDk2MCksdz1fKDIwMTApO2cuaW5oZXJpdHMoeixCKTtmb3IodmFyIFA9eSh3LnByb3RvdHlwZSksRj0wO0Y8UC5sZW5ndGg7RisrKXt2YXIgTz1QW0ZdO3oucHJvdG90eXBlW09dfHwoei5wcm90b3R5cGVbT109dy5wcm90''@;'; put 'put ''b3R5cGVbT10pfWZ1bmN0aW9uIHooSyl7aWYoISh0aGlzIGluc3RhbmNlb2YgeikpcmV0dXJuIG5ldyB6KEspO0IuY2FsbCh0aGlzLEspLHcuY2FsbCh0aGlzLEspLEsmJiExPT09Sy5yZWFkYWJsZSYmKHRoaXMucmVhZGFibGU9ITEpLEsmJiExPT09Sy53cml0YWJsZSYmKHRoaXMud3JpdGFi''@;'; put 'put ''bGU9ITEpLHRoaXMuYWxsb3dIYWxmT3Blbj0hMCxLJiYhMT09PUsuYWxsb3dIYWxmT3BlbiYmKHRoaXMuYWxsb3dIYWxmT3Blbj0hMSksdGhpcy5vbmNlKCJlbmQiLE4pfWZ1bmN0aW9uIE4oKXt0aGlzLmFsbG93SGFsZk9wZW58fHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWR8fEkubmV4dFRp''@;'; put 'put ''Y2soTCx0aGlzKX1mdW5jdGlvbiBMKEspe0suZW5kKCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHoucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSks''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KHoucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQmJnRoaXMu''@;'; put 'put ''X3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oSyl7dm9pZCAwPT09dGhpcy5fcmVhZGFibGVTdGF0ZXx8dm9pZCAwPT09dGhpcy5fd3JpdGFibGVTdGF0ZXx8KHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPUssdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9''@;'; put 'put ''Syl9fSksei5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oSyxVKXt0aGlzLnB1c2gobnVsbCksdGhpcy5lbmQoKSxJLm5leHRUaWNrKFUsSyl9fSwxMjk0Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9Zzt2YXIgST1fKDM5MTIpLHk9T2JqZWN0LmNyZWF0ZShfKDY0OTcp''@;'; put 'put ''KTtmdW5jdGlvbiBnKEIpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGcpKXJldHVybiBuZXcgZyhCKTtJLmNhbGwodGhpcyxCKX15LmluaGVyaXRzPV8oNTcxNykseS5pbmhlcml0cyhnLEkpLGcucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oQix3LFApe1AobnVsbCxCKX19LDQ5NjA6KHVl''@;'; put 'put ''LHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg0MTU1KSx5PV8oODIxMik7dWUuZXhwb3J0cz1sZTt2YXIgQixnPV8oNTgyNik7bGUuUmVhZGFibGVTdGF0ZT1pZSxfKDcxODcpO3ZhciBQPWZ1bmN0aW9uKHZlLFhlKXtyZXR1cm4gdmUubGlzdGVuZXJzKFhlKS5sZW5ndGh9LEY9Xyg5ODE5''@;'; put 'put ''KSxPPV8oMTU3MikuQnVmZmVyLHo9KHR5cGVvZiBfLmc8InUiP18uZzp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9mIHNlbGY8InUiP3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxLPU9iamVjdC5jcmVhdGUoXyg2NDk3KSk7Sy5pbmhlcml0cz1fKDU3MTcpO3ZhciBV''@;'; put 'put ''PV8oNjM1MyksVz12b2lkIDA7Vz1VJiZVLmRlYnVnbG9nP1UuZGVidWdsb2coInN0cmVhbSIpOmZ1bmN0aW9uKCl7fTt2YXIgZWUsWT1fKDIyNjcpLFg9Xyg1OTk3KTtLLmluaGVyaXRzKGxlLEYpO3ZhciBKPVsiZXJyb3IiLCJjbG9zZSIsImRlc3Ryb3kiLCJwYXVzZSIsInJlc3VtZSJdO2Z1''@;'; put 'put ''bmN0aW9uIGllKHZlLFhlKXt2YXIgamU9WGUgaW5zdGFuY2VvZihCPUJ8fF8oNDM5MCkpO3RoaXMub2JqZWN0TW9kZT0hISh2ZT12ZXx8e30pLm9iamVjdE1vZGUsamUmJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIXZlLnJlYWRhYmxlT2JqZWN0TW9kZSk7dmFyIERlPXZl''@;'; put 'put ''LmhpZ2hXYXRlck1hcmssRmU9dmUucmVhZGFibGVIaWdoV2F0ZXJNYXJrO3RoaXMuaGlnaFdhdGVyTWFyaz1EZXx8MD09PURlP0RlOmplJiYoRmV8fDA9PT1GZSk/RmU6dGhpcy5vYmplY3RNb2RlPzE2OjE2Mzg0LHRoaXMuaGlnaFdhdGVyTWFyaz1NYXRoLmZsb29yKHRoaXMuaGlnaFdhdGVy''@;'; put 'put ''TWFyayksdGhpcy5idWZmZXI9bmV3IFksdGhpcy5sZW5ndGg9MCx0aGlzLnBpcGVzPW51bGwsdGhpcy5waXBlc0NvdW50PTAsdGhpcy5mbG93aW5nPW51bGwsdGhpcy5lbmRlZD0hMSx0aGlzLmVuZEVtaXR0ZWQ9ITEsdGhpcy5yZWFkaW5nPSExLHRoaXMuc3luYz0hMCx0aGlzLm5lZWRSZWFk''@;'; put 'put ''YWJsZT0hMSx0aGlzLmVtaXR0ZWRSZWFkYWJsZT0hMSx0aGlzLnJlYWRhYmxlTGlzdGVuaW5nPSExLHRoaXMucmVzdW1lU2NoZWR1bGVkPSExLHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVmYXVsdEVuY29kaW5nPXZlLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMuYXdhaXREcmFpbj0w''@;'; put 'put ''LHRoaXMucmVhZGluZ01vcmU9ITEsdGhpcy5kZWNvZGVyPW51bGwsdGhpcy5lbmNvZGluZz1udWxsLHZlLmVuY29kaW5nJiYoZWV8fChlZT1fKDIyMjEpLnMpLHRoaXMuZGVjb2Rlcj1uZXcgZWUodmUuZW5jb2RpbmcpLHRoaXMuZW5jb2Rpbmc9dmUuZW5jb2RpbmcpfWZ1bmN0aW9uIGxlKHZl''@;'; put 'put ''KXtpZihCPUJ8fF8oNDM5MCksISh0aGlzIGluc3RhbmNlb2YgbGUpKXJldHVybiBuZXcgbGUodmUpO3RoaXMuX3JlYWRhYmxlU3RhdGU9bmV3IGllKHZlLHRoaXMpLHRoaXMucmVhZGFibGU9ITAsdmUmJigiZnVuY3Rpb24iPT10eXBlb2YgdmUucmVhZCYmKHRoaXMuX3JlYWQ9dmUucmVhZCks''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIHZlLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PXZlLmRlc3Ryb3kpKSxGLmNhbGwodGhpcyl9ZnVuY3Rpb24gbWUodmUsWGUsamUsRGUsRmUpe3ZhciBJZSxSZT12ZS5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gbnVsbD09PVhlPyhSZS5yZWFkaW5nPSExLGZ1bmN0''@;'; put 'put ''aW9uIGIodmUsWGUpe2lmKCFYZS5lbmRlZCl7aWYoWGUuZGVjb2Rlcil7dmFyIGplPVhlLmRlY29kZXIuZW5kKCk7amUmJmplLmxlbmd0aCYmKFhlLmJ1ZmZlci5wdXNoKGplKSxYZS5sZW5ndGgrPVhlLm9iamVjdE1vZGU/MTpqZS5sZW5ndGgpfVhlLmVuZGVkPSEwLHgodmUpfX0odmUsUmUp''@;'; put 'put ''KTooRmV8fChJZT1mdW5jdGlvbiBUZSh2ZSxYZSl7dmFyIGplO3JldHVybiFmdW5jdGlvbiBMKHZlKXtyZXR1cm4gTy5pc0J1ZmZlcih2ZSl8fHZlIGluc3RhbmNlb2Ygen0oWGUpJiYic3RyaW5nIiE9dHlwZW9mIFhlJiZ2b2lkIDAhPT1YZSYmIXZlLm9iamVjdE1vZGUmJihqZT1uZXcgVHlw''@;'; put 'put ''ZUVycm9yKCJJbnZhbGlkIG5vbi1zdHJpbmcvYnVmZmVyIGNodW5rIikpLGplfShSZSxYZSkpLEllP3ZlLmVtaXQoImVycm9yIixJZSk6UmUub2JqZWN0TW9kZXx8WGUmJlhlLmxlbmd0aD4wPygic3RyaW5nIiE9dHlwZW9mIFhlJiYhUmUub2JqZWN0TW9kZSYmT2JqZWN0LmdldFByb3RvdHlw''@;'; put 'put ''ZU9mKFhlKSE9PU8ucHJvdG90eXBlJiYoWGU9ZnVuY3Rpb24gTih2ZSl7cmV0dXJuIE8uZnJvbSh2ZSl9KFhlKSksRGU/UmUuZW5kRW1pdHRlZD92ZS5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudCIpKTpfZSh2ZSxSZSxYZSwhMCk6UmUu''@;'; put 'put ''ZW5kZWQ/dmUuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigic3RyZWFtLnB1c2goKSBhZnRlciBFT0YiKSk6KFJlLnJlYWRpbmc9ITEsUmUuZGVjb2RlciYmIWplPyhYZT1SZS5kZWNvZGVyLndyaXRlKFhlKSxSZS5vYmplY3RNb2RlfHwwIT09WGUubGVuZ3RoP19lKHZlLFJlLFhlLCExKTpUKHZl''@;'; put 'put ''LFJlKSk6X2UodmUsUmUsWGUsITEpKSk6RGV8fChSZS5yZWFkaW5nPSExKSksZnVuY3Rpb24gU2UodmUpe3JldHVybiF2ZS5lbmRlZCYmKHZlLm5lZWRSZWFkYWJsZXx8dmUubGVuZ3RoPHZlLmhpZ2hXYXRlck1hcmt8fDA9PT12ZS5sZW5ndGgpfShSZSl9ZnVuY3Rpb24gX2UodmUsWGUsamUs''@;'; put 'put ''RGUpe1hlLmZsb3dpbmcmJjA9PT1YZS5sZW5ndGgmJiFYZS5zeW5jPyh2ZS5lbWl0KCJkYXRhIixqZSksdmUucmVhZCgwKSk6KFhlLmxlbmd0aCs9WGUub2JqZWN0TW9kZT8xOmplLmxlbmd0aCxEZT9YZS5idWZmZXIudW5zaGlmdChqZSk6WGUuYnVmZmVyLnB1c2goamUpLFhlLm5lZWRSZWFk''@;'; put 'put ''YWJsZSYmeCh2ZSkpLFQodmUsWGUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShsZS5wcm90b3R5cGUsImRlc3Ryb3llZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9u''@;'; put 'put ''KHZlKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9dmUpfX0pLGxlLnByb3RvdHlwZS5kZXN0cm95PVguZGVzdHJveSxsZS5wcm90b3R5cGUuX3VuZGVzdHJveT1YLnVuZGVzdHJveSxsZS5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24odmUs''@;'; put 'put ''WGUpe3RoaXMucHVzaChudWxsKSxYZSh2ZSl9LGxlLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKHZlLFhlKXt2YXIgRGUsamU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gamUub2JqZWN0TW9kZT9EZT0hMDoic3RyaW5nIj09dHlwZW9mIHZlJiYoKFhlPVhlfHxqZS5kZWZhdWx0RW5jb2Rp''@;'; put 'put ''bmcpIT09amUuZW5jb2RpbmcmJih2ZT1PLmZyb20odmUsWGUpLFhlPSIiKSxEZT0hMCksbWUodGhpcyx2ZSxYZSwhMSxEZSl9LGxlLnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKHZlKXtyZXR1cm4gbWUodGhpcyx2ZSxudWxsLCEwLCExKX0sbGUucHJvdG90eXBlLmlzUGF1c2VkPWZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuITE9PT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmd9LGxlLnByb3RvdHlwZS5zZXRFbmNvZGluZz1mdW5jdGlvbih2ZSl7cmV0dXJuIGVlfHwoZWU9XygyMjIxKS5zKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXI9bmV3IGVlKHZlKSx0aGlzLl9yZWFkYWJsZVN0''@;'; put 'put ''YXRlLmVuY29kaW5nPXZlLHRoaXN9O2Z1bmN0aW9uIHAodmUsWGUpe3JldHVybiB2ZTw9MHx8MD09PVhlLmxlbmd0aCYmWGUuZW5kZWQ/MDpYZS5vYmplY3RNb2RlPzE6dmUhPXZlP1hlLmZsb3dpbmcmJlhlLmxlbmd0aD9YZS5idWZmZXIuaGVhZC5kYXRhLmxlbmd0aDpYZS5sZW5ndGg6KHZl''@;'; put 'put ''PlhlLmhpZ2hXYXRlck1hcmsmJihYZS5oaWdoV2F0ZXJNYXJrPWZ1bmN0aW9uIFYodmUpe3JldHVybiB2ZT49ODM4ODYwOD92ZT04Mzg4NjA4Oih2ZS0tLHZlfD12ZT4+PjEsdmV8PXZlPj4+Mix2ZXw9dmU+Pj40LHZlfD12ZT4+PjgsdmV8PXZlPj4+MTYsdmUrKyksdmV9KHZlKSksdmU8PVhl''@;'; put 'put ''Lmxlbmd0aD92ZTpYZS5lbmRlZD9YZS5sZW5ndGg6KFhlLm5lZWRSZWFkYWJsZT0hMCwwKSl9ZnVuY3Rpb24geCh2ZSl7dmFyIFhlPXZlLl9yZWFkYWJsZVN0YXRlO1hlLm5lZWRSZWFkYWJsZT0hMSxYZS5lbWl0dGVkUmVhZGFibGV8fChXKCJlbWl0UmVhZGFibGUiLFhlLmZsb3dpbmcpLFhl''@;'; put 'put ''LmVtaXR0ZWRSZWFkYWJsZT0hMCxYZS5zeW5jP3kubmV4dFRpY2soQyx2ZSk6Qyh2ZSkpfWZ1bmN0aW9uIEModmUpe1coImVtaXQgcmVhZGFibGUiKSx2ZS5lbWl0KCJyZWFkYWJsZSIpLG9lKHZlKX1mdW5jdGlvbiBUKHZlLFhlKXtYZS5yZWFkaW5nTW9yZXx8KFhlLnJlYWRpbmdNb3JlPSEw''@;'; put 'put ''LHkubmV4dFRpY2soSCx2ZSxYZSkpfWZ1bmN0aW9uIEgodmUsWGUpe2Zvcih2YXIgamU9WGUubGVuZ3RoOyFYZS5yZWFkaW5nJiYhWGUuZmxvd2luZyYmIVhlLmVuZGVkJiZYZS5sZW5ndGg8WGUuaGlnaFdhdGVyTWFyayYmKFcoIm1heWJlUmVhZE1vcmUgcmVhZCAwIiksdmUucmVhZCgwKSxq''@;'; put 'put ''ZSE9PVhlLmxlbmd0aCk7KWplPVhlLmxlbmd0aDtYZS5yZWFkaW5nTW9yZT0hMX1mdW5jdGlvbiBFKHZlKXtXKCJyZWFkYWJsZSBuZXh0dGljayByZWFkIDAiKSx2ZS5yZWFkKDApfWZ1bmN0aW9uIEEodmUsWGUpe1hlLnJlYWRpbmd8fChXKCJyZXN1bWUgcmVhZCAwIiksdmUucmVhZCgwKSks''@;'; put 'put ''WGUucmVzdW1lU2NoZWR1bGVkPSExLFhlLmF3YWl0RHJhaW49MCx2ZS5lbWl0KCJyZXN1bWUiKSxvZSh2ZSksWGUuZmxvd2luZyYmIVhlLnJlYWRpbmcmJnZlLnJlYWQoMCl9ZnVuY3Rpb24gb2UodmUpe3ZhciBYZT12ZS5fcmVhZGFibGVTdGF0ZTtmb3IoVygiZmxvdyIsWGUuZmxvd2luZyk7''@;'; put 'put ''WGUuZmxvd2luZyYmbnVsbCE9PXZlLnJlYWQoKTspO31mdW5jdGlvbiB0ZSh2ZSxYZSl7cmV0dXJuIDA9PT1YZS5sZW5ndGg/bnVsbDooWGUub2JqZWN0TW9kZT9qZT1YZS5idWZmZXIuc2hpZnQoKTohdmV8fHZlPj1YZS5sZW5ndGg/KGplPVhlLmRlY29kZXI/WGUuYnVmZmVyLmpvaW4oIiIp''@;'; put 'put ''OjE9PT1YZS5idWZmZXIubGVuZ3RoP1hlLmJ1ZmZlci5oZWFkLmRhdGE6WGUuYnVmZmVyLmNvbmNhdChYZS5sZW5ndGgpLFhlLmJ1ZmZlci5jbGVhcigpKTpqZT1mdW5jdGlvbiBzZSh2ZSxYZSxqZSl7dmFyIERlO3JldHVybiB2ZTxYZS5oZWFkLmRhdGEubGVuZ3RoPyhEZT1YZS5oZWFkLmRh''@;'; put 'put ''dGEuc2xpY2UoMCx2ZSksWGUuaGVhZC5kYXRhPVhlLmhlYWQuZGF0YS5zbGljZSh2ZSkpOkRlPXZlPT09WGUuaGVhZC5kYXRhLmxlbmd0aD9YZS5zaGlmdCgpOmplP2Z1bmN0aW9uIHdlKHZlLFhlKXt2YXIgamU9WGUuaGVhZCxEZT0xLEZlPWplLmRhdGE7Zm9yKHZlLT1GZS5sZW5ndGg7amU9''@;'; put 'put ''amUubmV4dDspe3ZhciBSZT1qZS5kYXRhLEllPXZlPlJlLmxlbmd0aD9SZS5sZW5ndGg6dmU7aWYoRmUrPUllPT09UmUubGVuZ3RoP1JlOlJlLnNsaWNlKDAsdmUpLDA9PSh2ZS09SWUpKXtJZT09PVJlLmxlbmd0aD8oKytEZSxYZS5oZWFkPWplLm5leHQ/amUubmV4dDpYZS50YWlsPW51bGwp''@;'; put 'put ''OihYZS5oZWFkPWplLGplLmRhdGE9UmUuc2xpY2UoSWUpKTticmVha30rK0RlfXJldHVybiBYZS5sZW5ndGgtPURlLEZlfSh2ZSxYZSk6ZnVuY3Rpb24gVWUodmUsWGUpe3ZhciBqZT1PLmFsbG9jVW5zYWZlKHZlKSxEZT1YZS5oZWFkLEZlPTE7Zm9yKERlLmRhdGEuY29weShqZSksdmUtPURl''@;'; put 'put ''LmRhdGEubGVuZ3RoO0RlPURlLm5leHQ7KXt2YXIgUmU9RGUuZGF0YSxJZT12ZT5SZS5sZW5ndGg/UmUubGVuZ3RoOnZlO2lmKFJlLmNvcHkoamUsamUubGVuZ3RoLXZlLDAsSWUpLDA9PSh2ZS09SWUpKXtJZT09PVJlLmxlbmd0aD8oKytGZSxYZS5oZWFkPURlLm5leHQ/RGUubmV4dDpYZS50''@;'; put 'put ''YWlsPW51bGwpOihYZS5oZWFkPURlLERlLmRhdGE9UmUuc2xpY2UoSWUpKTticmVha30rK0ZlfXJldHVybiBYZS5sZW5ndGgtPUZlLGplfSh2ZSxYZSksRGV9KHZlLFhlLmJ1ZmZlcixYZS5kZWNvZGVyKSxqZSk7dmFyIGplfWZ1bmN0aW9uIEplKHZlKXt2YXIgWGU9dmUuX3JlYWRhYmxlU3Rh''@;'; put 'put ''dGU7aWYoWGUubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCciZW5kUmVhZGFibGUoKSIgY2FsbGVkIG9uIG5vbi1lbXB0eSBzdHJlYW0nKTtYZS5lbmRFbWl0dGVkfHwoWGUuZW5kZWQ9ITAseS5uZXh0VGljayhhdCxYZSx2ZSkpfWZ1bmN0aW9uIGF0KHZlLFhlKXshdmUuZW5kRW1pdHRlZCYm''@;'; put 'put ''MD09PXZlLmxlbmd0aCYmKHZlLmVuZEVtaXR0ZWQ9ITAsWGUucmVhZGFibGU9ITEsWGUuZW1pdCgiZW5kIikpfWZ1bmN0aW9uIE1lKHZlLFhlKXtmb3IodmFyIGplPTAsRGU9dmUubGVuZ3RoO2plPERlO2plKyspaWYodmVbamVdPT09WGUpcmV0dXJuIGplO3JldHVybi0xfWxlLnByb3RvdHlw''@;'; put 'put ''ZS5yZWFkPWZ1bmN0aW9uKHZlKXtXKCJyZWFkIix2ZSksdmU9cGFyc2VJbnQodmUsMTApO3ZhciBYZT10aGlzLl9yZWFkYWJsZVN0YXRlLGplPXZlO2lmKDAhPT12ZSYmKFhlLmVtaXR0ZWRSZWFkYWJsZT0hMSksMD09PXZlJiZYZS5uZWVkUmVhZGFibGUmJihYZS5sZW5ndGg+PVhlLmhpZ2hX''@;'; put 'put ''YXRlck1hcmt8fFhlLmVuZGVkKSlyZXR1cm4gVygicmVhZDogZW1pdFJlYWRhYmxlIixYZS5sZW5ndGgsWGUuZW5kZWQpLDA9PT1YZS5sZW5ndGgmJlhlLmVuZGVkP0plKHRoaXMpOngodGhpcyksbnVsbDtpZigwPT09KHZlPXAodmUsWGUpKSYmWGUuZW5kZWQpcmV0dXJuIDA9PT1YZS5sZW5n''@;'; put 'put ''dGgmJkplKHRoaXMpLG51bGw7dmFyIEZlLERlPVhlLm5lZWRSZWFkYWJsZTtyZXR1cm4gVygibmVlZCByZWFkYWJsZSIsRGUpLCgwPT09WGUubGVuZ3RofHxYZS5sZW5ndGgtdmU8WGUuaGlnaFdhdGVyTWFyaykmJlcoImxlbmd0aCBsZXNzIHRoYW4gd2F0ZXJtYXJrIixEZT0hMCksWGUuZW5k''@;'; put 'put ''ZWR8fFhlLnJlYWRpbmc/VygicmVhZGluZyBvciBlbmRlZCIsRGU9ITEpOkRlJiYoVygiZG8gcmVhZCIpLFhlLnJlYWRpbmc9ITAsWGUuc3luYz0hMCwwPT09WGUubGVuZ3RoJiYoWGUubmVlZFJlYWRhYmxlPSEwKSx0aGlzLl9yZWFkKFhlLmhpZ2hXYXRlck1hcmspLFhlLnN5bmM9ITEsWGUu''@;'; put 'put ''cmVhZGluZ3x8KHZlPXAoamUsWGUpKSksbnVsbD09PShGZT12ZT4wP3RlKHZlLFhlKTpudWxsKT8oWGUubmVlZFJlYWRhYmxlPSEwLHZlPTApOlhlLmxlbmd0aC09dmUsMD09PVhlLmxlbmd0aCYmKFhlLmVuZGVkfHwoWGUubmVlZFJlYWRhYmxlPSEwKSxqZSE9PXZlJiZYZS5lbmRlZCYmSmUo''@;'; put 'put ''dGhpcykpLG51bGwhPT1GZSYmdGhpcy5lbWl0KCJkYXRhIixGZSksRmV9LGxlLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbih2ZSl7dGhpcy5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJfcmVhZCgpIGlzIG5vdCBpbXBsZW1lbnRlZCIpKX0sbGUucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24odmUs''@;'; put 'put ''WGUpe3ZhciBqZT10aGlzLERlPXRoaXMuX3JlYWRhYmxlU3RhdGU7c3dpdGNoKERlLnBpcGVzQ291bnQpe2Nhc2UgMDpEZS5waXBlcz12ZTticmVhaztjYXNlIDE6RGUucGlwZXM9W0RlLnBpcGVzLHZlXTticmVhaztkZWZhdWx0OkRlLnBpcGVzLnB1c2godmUpfURlLnBpcGVzQ291bnQrPTEs''@;'; put 'put ''VygicGlwZSBjb3VudD0lZCBvcHRzPSVqIixEZS5waXBlc0NvdW50LFhlKTt2YXIgUmU9WGUmJiExPT09WGUuZW5kfHx2ZT09PUkuc3Rkb3V0fHx2ZT09PUkuc3RkZXJyP0R0OlZlO2Z1bmN0aW9uIFZlKCl7Vygib25lbmQiKSx2ZS5lbmQoKX1EZS5lbmRFbWl0dGVkP3kubmV4dFRpY2soUmUp''@;'; put 'put ''OmplLm9uY2UoImVuZCIsUmUpLHZlLm9uKCJ1bnBpcGUiLGZ1bmN0aW9uIEllKGl0LCRlKXtXKCJvbnVucGlwZSIpLGl0PT09amUmJiRlJiYhMT09PSRlLmhhc1VucGlwZWQmJigkZS5oYXNVbnBpcGVkPSEwLGZ1bmN0aW9uIF90KCl7VygiY2xlYW51cCIpLHZlLnJlbW92ZUxpc3RlbmVyKCJj''@;'; put 'put ''bG9zZSIseXQpLHZlLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLE10KSx2ZS5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLGtlKSx2ZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLGRuKSx2ZS5yZW1vdmVMaXN0ZW5lcigidW5waXBlIixJZSksamUucmVtb3ZlTGlzdGVuZXIoImVuZCIsVmUpLGplLnJl''@;'; put 'put ''bW92ZUxpc3RlbmVyKCJlbmQiLER0KSxqZS5yZW1vdmVMaXN0ZW5lcigiZGF0YSIsUWUpLEFlPSEwLERlLmF3YWl0RHJhaW4mJighdmUuX3dyaXRhYmxlU3RhdGV8fHZlLl93cml0YWJsZVN0YXRlLm5lZWREcmFpbikmJmtlKCl9KCkpfSk7dmFyIGtlPWZ1bmN0aW9uIGoodmUpe3JldHVybiBm''@;'; put 'put ''dW5jdGlvbigpe3ZhciBYZT12ZS5fcmVhZGFibGVTdGF0ZTtXKCJwaXBlT25EcmFpbiIsWGUuYXdhaXREcmFpbiksWGUuYXdhaXREcmFpbiYmWGUuYXdhaXREcmFpbi0tLDA9PT1YZS5hd2FpdERyYWluJiZQKHZlLCJkYXRhIikmJihYZS5mbG93aW5nPSEwLG9lKHZlKSl9fShqZSk7dmUub24o''@;'; put 'put ''ImRyYWluIixrZSk7dmFyIEFlPSExLHJ0PSExO2Z1bmN0aW9uIFFlKGl0KXtXKCJvbmRhdGEiKSxydD0hMSwhMT09PXZlLndyaXRlKGl0KSYmIXJ0JiYoKDE9PT1EZS5waXBlc0NvdW50JiZEZS5waXBlcz09PXZlfHxEZS5waXBlc0NvdW50PjEmJi0xIT09TWUoRGUucGlwZXMsdmUpKSYmIUFl''@;'; put 'put ''JiYoVygiZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlIixEZS5hd2FpdERyYWluKSxEZS5hd2FpdERyYWluKysscnQ9ITApLGplLnBhdXNlKCkpfWZ1bmN0aW9uIGRuKGl0KXtXKCJvbmVycm9yIixpdCksRHQoKSx2ZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLGRuKSwwPT09UCh2ZSwiZXJy''@;'; put 'put ''b3IiKSYmdmUuZW1pdCgiZXJyb3IiLGl0KX1mdW5jdGlvbiB5dCgpe3ZlLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLE10KSxEdCgpfWZ1bmN0aW9uIE10KCl7Vygib25maW5pc2giKSx2ZS5yZW1vdmVMaXN0ZW5lcigiY2xvc2UiLHl0KSxEdCgpfWZ1bmN0aW9uIER0KCl7VygidW5waXBlIiks''@;'; put 'put ''amUudW5waXBlKHZlKX1yZXR1cm4gamUub24oImRhdGEiLFFlKSxmdW5jdGlvbiByZSh2ZSxYZSxqZSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHZlLnByZXBlbmRMaXN0ZW5lcilyZXR1cm4gdmUucHJlcGVuZExpc3RlbmVyKFhlLGplKTt2ZS5fZXZlbnRzJiZ2ZS5fZXZlbnRzW1hlXT9nKHZl''@;'; put 'put ''Ll9ldmVudHNbWGVdKT92ZS5fZXZlbnRzW1hlXS51bnNoaWZ0KGplKTp2ZS5fZXZlbnRzW1hlXT1bamUsdmUuX2V2ZW50c1tYZV1dOnZlLm9uKFhlLGplKX0odmUsImVycm9yIixkbiksdmUub25jZSgiY2xvc2UiLHl0KSx2ZS5vbmNlKCJmaW5pc2giLE10KSx2ZS5lbWl0KCJwaXBlIixqZSks''@;'; put 'put ''RGUuZmxvd2luZ3x8KFcoInBpcGUgcmVzdW1lIiksamUucmVzdW1lKCkpLHZlfSxsZS5wcm90b3R5cGUudW5waXBlPWZ1bmN0aW9uKHZlKXt2YXIgWGU9dGhpcy5fcmVhZGFibGVTdGF0ZSxqZT17aGFzVW5waXBlZDohMX07aWYoMD09PVhlLnBpcGVzQ291bnQpcmV0dXJuIHRoaXM7aWYoMT09''@;'; put 'put ''PVhlLnBpcGVzQ291bnQpcmV0dXJuIHZlJiZ2ZSE9PVhlLnBpcGVzfHwodmV8fCh2ZT1YZS5waXBlcyksWGUucGlwZXM9bnVsbCxYZS5waXBlc0NvdW50PTAsWGUuZmxvd2luZz0hMSx2ZSYmdmUuZW1pdCgidW5waXBlIix0aGlzLGplKSksdGhpcztpZighdmUpe3ZhciBEZT1YZS5waXBlcyxG''@;'; put 'put ''ZT1YZS5waXBlc0NvdW50O1hlLnBpcGVzPW51bGwsWGUucGlwZXNDb3VudD0wLFhlLmZsb3dpbmc9ITE7Zm9yKHZhciBSZT0wO1JlPEZlO1JlKyspRGVbUmVdLmVtaXQoInVucGlwZSIsdGhpcyx7aGFzVW5waXBlZDohMX0pO3JldHVybiB0aGlzfXZhciBJZT1NZShYZS5waXBlcyx2ZSk7cmV0''@;'; put 'put ''dXJuLTE9PT1JZXx8KFhlLnBpcGVzLnNwbGljZShJZSwxKSxYZS5waXBlc0NvdW50LT0xLDE9PT1YZS5waXBlc0NvdW50JiYoWGUucGlwZXM9WGUucGlwZXNbMF0pLHZlLmVtaXQoInVucGlwZSIsdGhpcyxqZSkpLHRoaXN9LGxlLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1sZS5wcm90b3R5cGUu''@;'; put 'put ''b249ZnVuY3Rpb24odmUsWGUpe3ZhciBqZT1GLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsdmUsWGUpO2lmKCJkYXRhIj09PXZlKSExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nJiZ0aGlzLnJlc3VtZSgpO2Vsc2UgaWYoInJlYWRhYmxlIj09PXZlKXt2YXIgRGU9dGhpcy5fcmVhZGFi''@;'; put 'put ''bGVTdGF0ZTshRGUuZW5kRW1pdHRlZCYmIURlLnJlYWRhYmxlTGlzdGVuaW5nJiYoRGUucmVhZGFibGVMaXN0ZW5pbmc9RGUubmVlZFJlYWRhYmxlPSEwLERlLmVtaXR0ZWRSZWFkYWJsZT0hMSxEZS5yZWFkaW5nP0RlLmxlbmd0aCYmeCh0aGlzKTp5Lm5leHRUaWNrKEUsdGhpcykpfXJldHVy''@;'; put 'put ''biBqZX0sbGUucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe3ZhciB2ZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiB2ZS5mbG93aW5nfHwoVygicmVzdW1lIiksdmUuZmxvd2luZz0hMCxmdW5jdGlvbiBtKHZlLFhlKXtYZS5yZXN1bWVTY2hlZHVsZWR8fChYZS5yZXN1bWVTY2hlZHVs''@;'; put 'put ''ZWQ9ITAseS5uZXh0VGljayhBLHZlLFhlKSl9KHRoaXMsdmUpKSx0aGlzfSxsZS5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4gVygiY2FsbCBwYXVzZSBmbG93aW5nPSVqIix0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpLCExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93''@;'; put 'put ''aW5nJiYoVygicGF1c2UiKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9ITEsdGhpcy5lbWl0KCJwYXVzZSIpKSx0aGlzfSxsZS5wcm90b3R5cGUud3JhcD1mdW5jdGlvbih2ZSl7dmFyIFhlPXRoaXMsamU9dGhpcy5fcmVhZGFibGVTdGF0ZSxEZT0hMTtmb3IodmFyIEZlIGluIHZlLm9u''@;'; put 'put ''KCJlbmQiLGZ1bmN0aW9uKCl7aWYoVygid3JhcHBlZCBlbmQiKSxqZS5kZWNvZGVyJiYhamUuZW5kZWQpe3ZhciBJZT1qZS5kZWNvZGVyLmVuZCgpO0llJiZJZS5sZW5ndGgmJlhlLnB1c2goSWUpfVhlLnB1c2gobnVsbCl9KSx2ZS5vbigiZGF0YSIsZnVuY3Rpb24oSWUpe1coIndyYXBwZWQg''@;'; put 'put ''ZGF0YSIpLGplLmRlY29kZXImJihJZT1qZS5kZWNvZGVyLndyaXRlKEllKSksamUub2JqZWN0TW9kZSYmbnVsbD09SWV8fCEoamUub2JqZWN0TW9kZXx8SWUmJkllLmxlbmd0aCl8fFhlLnB1c2goSWUpfHwoRGU9ITAsdmUucGF1c2UoKSl9KSx2ZSl2b2lkIDA9PT10aGlzW0ZlXSYmImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIHZlW0ZlXSYmKHRoaXNbRmVdPWZ1bmN0aW9uKEllKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdmVbSWVdLmFwcGx5KHZlLGFyZ3VtZW50cyl9fShGZSkpO2Zvcih2YXIgUmU9MDtSZTxKLmxlbmd0aDtSZSsrKXZlLm9uKEpbUmVdLHRoaXMuZW1pdC5iaW5kKHRoaXMs''@;'; put 'put ''SltSZV0pKTtyZXR1cm4gdGhpcy5fcmVhZD1mdW5jdGlvbihJZSl7Vygid3JhcHBlZCBfcmVhZCIsSWUpLERlJiYoRGU9ITEsdmUucmVzdW1lKCkpfSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkobGUucHJvdG90eXBlLCJyZWFkYWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiEx''@;'; put 'put ''LGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksbGUuX2Zyb21MaXN0PXRlfSwzOTEyOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9Qjt2YXIgST1fKDQzOTApLHk9T2JqZWN0LmNyZWF0ZShfKDY0OTcpKTtmdW5jdGlv''@;'; put 'put ''biBnKEYsTyl7dmFyIHo9dGhpcy5fdHJhbnNmb3JtU3RhdGU7ei50cmFuc2Zvcm1pbmc9ITE7dmFyIE49ei53cml0ZWNiO2lmKCFOKXJldHVybiB0aGlzLmVtaXQoImVycm9yIixuZXcgRXJyb3IoIndyaXRlIGNhbGxiYWNrIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyIpKTt6LndyaXRlY2h1bms9''@;'; put 'put ''bnVsbCx6LndyaXRlY2I9bnVsbCxudWxsIT1PJiZ0aGlzLnB1c2goTyksTihGKTt2YXIgTD10aGlzLl9yZWFkYWJsZVN0YXRlO0wucmVhZGluZz0hMSwoTC5uZWVkUmVhZGFibGV8fEwubGVuZ3RoPEwuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoTC5oaWdoV2F0ZXJNYXJrKX1mdW5jdGlv''@;'; put 'put ''biBCKEYpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEIpKXJldHVybiBuZXcgQihGKTtJLmNhbGwodGhpcyxGKSx0aGlzLl90cmFuc2Zvcm1TdGF0ZT17YWZ0ZXJUcmFuc2Zvcm06Zy5iaW5kKHRoaXMpLG5lZWRUcmFuc2Zvcm06ITEsdHJhbnNmb3JtaW5nOiExLHdyaXRlY2I6bnVsbCx3cml0ZWNo''@;'; put 'put ''dW5rOm51bGwsd3JpdGVlbmNvZGluZzpudWxsfSx0aGlzLl9yZWFkYWJsZVN0YXRlLm5lZWRSZWFkYWJsZT0hMCx0aGlzLl9yZWFkYWJsZVN0YXRlLnN5bmM9ITEsRiYmKCJmdW5jdGlvbiI9PXR5cGVvZiBGLnRyYW5zZm9ybSYmKHRoaXMuX3RyYW5zZm9ybT1GLnRyYW5zZm9ybSksImZ1bmN0''@;'; put 'put ''aW9uIj09dHlwZW9mIEYuZmx1c2gmJih0aGlzLl9mbHVzaD1GLmZsdXNoKSksdGhpcy5vbigicHJlZmluaXNoIix3KX1mdW5jdGlvbiB3KCl7dmFyIEY9dGhpczsiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5fZmx1c2g/dGhpcy5fZmx1c2goZnVuY3Rpb24oTyx6KXtQKEYsTyx6KX0pOlAodGhp''@;'; put 'put ''cyxudWxsLG51bGwpfWZ1bmN0aW9uIFAoRixPLHope2lmKE8pcmV0dXJuIEYuZW1pdCgiZXJyb3IiLE8pO2lmKG51bGwhPXomJkYucHVzaCh6KSxGLl93cml0YWJsZVN0YXRlLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkNhbGxpbmcgdHJhbnNmb3JtIGRvbmUgd2hlbiB3cy5sZW5ndGggIT0g''@;'; put 'put ''MCIpO2lmKEYuX3RyYW5zZm9ybVN0YXRlLnRyYW5zZm9ybWluZyl0aHJvdyBuZXcgRXJyb3IoIkNhbGxpbmcgdHJhbnNmb3JtIGRvbmUgd2hlbiBzdGlsbCB0cmFuc2Zvcm1pbmciKTtyZXR1cm4gRi5wdXNoKG51bGwpfXkuaW5oZXJpdHM9Xyg1NzE3KSx5LmluaGVyaXRzKEIsSSksQi5wcm90''@;'; put 'put ''b3R5cGUucHVzaD1mdW5jdGlvbihGLE8pe3JldHVybiB0aGlzLl90cmFuc2Zvcm1TdGF0ZS5uZWVkVHJhbnNmb3JtPSExLEkucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLEYsTyl9LEIucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oRixPLHope3Rocm93IG5ldyBFcnJvcigiX3RyYW5z''@;'; put 'put ''Zm9ybSgpIGlzIG5vdCBpbXBsZW1lbnRlZCIpfSxCLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oRixPLHope3ZhciBOPXRoaXMuX3RyYW5zZm9ybVN0YXRlO2lmKE4ud3JpdGVjYj16LE4ud3JpdGVjaHVuaz1GLE4ud3JpdGVlbmNvZGluZz1PLCFOLnRyYW5zZm9ybWluZyl7dmFyIEw9dGhp''@;'; put 'put ''cy5fcmVhZGFibGVTdGF0ZTsoTi5uZWVkVHJhbnNmb3JtfHxMLm5lZWRSZWFkYWJsZXx8TC5sZW5ndGg8TC5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChMLmhpZ2hXYXRlck1hcmspfX0sQi5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24oRil7dmFyIE89dGhpcy5fdHJhbnNmb3JtU3RhdGU7''@;'; put 'put ''bnVsbCE9PU8ud3JpdGVjaHVuayYmTy53cml0ZWNiJiYhTy50cmFuc2Zvcm1pbmc/KE8udHJhbnNmb3JtaW5nPSEwLHRoaXMuX3RyYW5zZm9ybShPLndyaXRlY2h1bmssTy53cml0ZWVuY29kaW5nLE8uYWZ0ZXJUcmFuc2Zvcm0pKTpPLm5lZWRUcmFuc2Zvcm09ITB9LEIucHJvdG90eXBlLl9k''@;'; put 'put ''ZXN0cm95PWZ1bmN0aW9uKEYsTyl7dmFyIHo9dGhpcztJLnByb3RvdHlwZS5fZGVzdHJveS5jYWxsKHRoaXMsRixmdW5jdGlvbihOKXtPKE4pLHouZW1pdCgiY2xvc2UiKX0pfX0sMjAxMDoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDQxNTUpLHk9Xyg4MjEyKTtmdW5jdGlvbiBC''@;'; put 'put ''KG0pe3ZhciBBPXRoaXM7dGhpcy5uZXh0PW51bGwsdGhpcy5lbnRyeT1udWxsLHRoaXMuZmluaXNoPWZ1bmN0aW9uKCl7IWZ1bmN0aW9uIEUobSxBLG9lKXt2YXIgdGU9bS5lbnRyeTtmb3IobS5lbnRyeT1udWxsO3RlOyl7dmFyIHNlPXRlLmNhbGxiYWNrO0EucGVuZGluZ2NiLS0sc2Uob2Up''@;'; put 'put ''LHRlPXRlLm5leHR9QS5jb3JrZWRSZXF1ZXN0c0ZyZWUubmV4dD1tfShBLG0pfX11ZS5leHBvcnRzPUo7dmFyIFAsdz0hSS5icm93c2VyJiZbInYwLjEwIiwidjAuOS4iXS5pbmRleE9mKEkudmVyc2lvbi5zbGljZSgwLDUpKT4tMT9zZXRJbW1lZGlhdGU6eS5uZXh0VGljaztKLldyaXRhYmxl''@;'; put 'put ''U3RhdGU9WDt2YXIgRj1PYmplY3QuY3JlYXRlKF8oNjQ5NykpO0YuaW5oZXJpdHM9Xyg1NzE3KTt2YXIgZWUsTz17ZGVwcmVjYXRlOl8oNDkyNyl9LHo9Xyg5ODE5KSxOPV8oMTU3MikuQnVmZmVyLEw9KHR5cGVvZiBfLmc8InUiP18uZzp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6dHlwZW9m''@;'; put 'put ''IHNlbGY8InUiP3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxXPV8oNTk5Nyk7ZnVuY3Rpb24gWSgpe31mdW5jdGlvbiBYKG0sQSl7UD1QfHxfKDQzOTApO3ZhciBvZT1BIGluc3RhbmNlb2YgUDt0aGlzLm9iamVjdE1vZGU9ISEobT1tfHx7fSkub2JqZWN0TW9kZSxvZSYmKHRo''@;'; put 'put ''aXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhbS53cml0YWJsZU9iamVjdE1vZGUpO3ZhciB0ZT1tLmhpZ2hXYXRlck1hcmssc2U9bS53cml0YWJsZUhpZ2hXYXRlck1hcms7dGhpcy5oaWdoV2F0ZXJNYXJrPXRlfHwwPT09dGU/dGU6b2UmJihzZXx8MD09PXNlKT9zZTp0aGlzLm9i''@;'; put 'put ''amVjdE1vZGU/MTY6MTYzODQsdGhpcy5oaWdoV2F0ZXJNYXJrPU1hdGguZmxvb3IodGhpcy5oaWdoV2F0ZXJNYXJrKSx0aGlzLmZpbmFsQ2FsbGVkPSExLHRoaXMubmVlZERyYWluPSExLHRoaXMuZW5kaW5nPSExLHRoaXMuZW5kZWQ9ITEsdGhpcy5maW5pc2hlZD0hMSx0aGlzLmRlc3Ryb3ll''@;'; put 'put ''ZD0hMSx0aGlzLmRlY29kZVN0cmluZ3M9ISghMT09PW0uZGVjb2RlU3RyaW5ncyksdGhpcy5kZWZhdWx0RW5jb2Rpbmc9bS5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGY4Iix0aGlzLmxlbmd0aD0wLHRoaXMud3JpdGluZz0hMSx0aGlzLmNvcmtlZD0wLHRoaXMuc3luYz0hMCx0aGlzLmJ1ZmZlclBy''@;'; put 'put ''b2Nlc3Npbmc9ITEsdGhpcy5vbndyaXRlPWZ1bmN0aW9uKEplKXshZnVuY3Rpb24gemUobSxBKXt2YXIgb2U9bS5fd3JpdGFibGVTdGF0ZSx0ZT1vZS5zeW5jLHNlPW9lLndyaXRlY2I7aWYoZnVuY3Rpb24gU2UobSl7bS53cml0aW5nPSExLG0ud3JpdGVjYj1udWxsLG0ubGVuZ3RoLT1tLndy''@;'; put 'put ''aXRlbGVuLG0ud3JpdGVsZW49MH0ob2UpLEEpIWZ1bmN0aW9uIFRlKG0sQSxvZSx0ZSxzZSl7LS1BLnBlbmRpbmdjYixvZT8oeS5uZXh0VGljayhzZSx0ZSkseS5uZXh0VGljayhILG0sQSksbS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsbS5lbWl0KCJlcnJvciIsdGUpKTooc2Uo''@;'; put 'put ''dGUpLG0uX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLG0uZW1pdCgiZXJyb3IiLHRlKSxIKG0sQSkpfShtLG9lLHRlLEEsc2UpO2Vsc2V7dmFyIHdlPXgob2UpOyF3ZSYmIW9lLmNvcmtlZCYmIW9lLmJ1ZmZlclByb2Nlc3NpbmcmJm9lLmJ1ZmZlcmVkUmVxdWVzdCYmYihtLG9lKSx0''@;'; put 'put ''ZT93KFYsbSxvZSx3ZSxzZSk6VihtLG9lLHdlLHNlKX19KEEsSmUpfSx0aGlzLndyaXRlY2I9bnVsbCx0aGlzLndyaXRlbGVuPTAsdGhpcy5idWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLnBlbmRpbmdjYj0wLHRoaXMucHJlZmluaXNoZWQ9''@;'; put 'put ''ITEsdGhpcy5lcnJvckVtaXR0ZWQ9ITEsdGhpcy5idWZmZXJlZFJlcXVlc3RDb3VudD0wLHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBCKHRoaXMpfWZ1bmN0aW9uIEoobSl7aWYoUD1QfHxfKDQzOTApLCEoZWUuY2FsbChKLHRoaXMpfHx0aGlzIGluc3RhbmNlb2YgUCkpcmV0dXJuIG5l''@;'; put 'put ''dyBKKG0pO3RoaXMuX3dyaXRhYmxlU3RhdGU9bmV3IFgobSx0aGlzKSx0aGlzLndyaXRhYmxlPSEwLG0mJigiZnVuY3Rpb24iPT10eXBlb2YgbS53cml0ZSYmKHRoaXMuX3dyaXRlPW0ud3JpdGUpLCJmdW5jdGlvbiI9PXR5cGVvZiBtLndyaXRldiYmKHRoaXMuX3dyaXRldj1tLndyaXRldiks''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIG0uZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9bS5kZXN0cm95KSwiZnVuY3Rpb24iPT10eXBlb2YgbS5maW5hbCYmKHRoaXMuX2ZpbmFsPW0uZmluYWwpKSx6LmNhbGwodGhpcyl9ZnVuY3Rpb24gX2UobSxBLG9lLHRlLHNlLHdlLFVlKXtBLndyaXRlbGVuPXRl''@;'; put 'put ''LEEud3JpdGVjYj1VZSxBLndyaXRpbmc9ITAsQS5zeW5jPSEwLG9lP20uX3dyaXRldihzZSxBLm9ud3JpdGUpOm0uX3dyaXRlKHNlLHdlLEEub253cml0ZSksQS5zeW5jPSExfWZ1bmN0aW9uIFYobSxBLG9lLHRlKXtvZXx8ZnVuY3Rpb24gcChtLEEpezA9PT1BLmxlbmd0aCYmQS5uZWVkRHJh''@;'; put 'put ''aW4mJihBLm5lZWREcmFpbj0hMSxtLmVtaXQoImRyYWluIikpfShtLEEpLEEucGVuZGluZ2NiLS0sdGUoKSxIKG0sQSl9ZnVuY3Rpb24gYihtLEEpe0EuYnVmZmVyUHJvY2Vzc2luZz0hMDt2YXIgb2U9QS5idWZmZXJlZFJlcXVlc3Q7aWYobS5fd3JpdGV2JiZvZSYmb2UubmV4dCl7dmFyIHNl''@;'; put 'put ''PW5ldyBBcnJheShBLmJ1ZmZlcmVkUmVxdWVzdENvdW50KSx3ZT1BLmNvcmtlZFJlcXVlc3RzRnJlZTt3ZS5lbnRyeT1vZTtmb3IodmFyIFVlPTAsSmU9ITA7b2U7KXNlW1VlXT1vZSxvZS5pc0J1Znx8KEplPSExKSxvZT1vZS5uZXh0LFVlKz0xO3NlLmFsbEJ1ZmZlcnM9SmUsX2UobSxBLCEw''@;'; put 'put ''LEEubGVuZ3RoLHNlLCIiLHdlLmZpbmlzaCksQS5wZW5kaW5nY2IrKyxBLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx3ZS5uZXh0PyhBLmNvcmtlZFJlcXVlc3RzRnJlZT13ZS5uZXh0LHdlLm5leHQ9bnVsbCk6QS5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IEIoQSksQS5idWZmZXJlZFJlcXVl''@;'; put 'put ''c3RDb3VudD0wfWVsc2V7Zm9yKDtvZTspe3ZhciBhdD1vZS5jaHVuaztpZihfZShtLEEsITEsQS5vYmplY3RNb2RlPzE6YXQubGVuZ3RoLGF0LG9lLmVuY29kaW5nLG9lLmNhbGxiYWNrKSxvZT1vZS5uZXh0LEEuYnVmZmVyZWRSZXF1ZXN0Q291bnQtLSxBLndyaXRpbmcpYnJlYWt9bnVsbD09''@;'; put 'put ''PW9lJiYoQS5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwpfUEuYnVmZmVyZWRSZXF1ZXN0PW9lLEEuYnVmZmVyUHJvY2Vzc2luZz0hMX1mdW5jdGlvbiB4KG0pe3JldHVybiBtLmVuZGluZyYmMD09PW0ubGVuZ3RoJiZudWxsPT09bS5idWZmZXJlZFJlcXVlc3QmJiFtLmZpbmlzaGVkJiYhbS53''@;'; put 'put ''cml0aW5nfWZ1bmN0aW9uIEMobSxBKXttLl9maW5hbChmdW5jdGlvbihvZSl7QS5wZW5kaW5nY2ItLSxvZSYmbS5lbWl0KCJlcnJvciIsb2UpLEEucHJlZmluaXNoZWQ9ITAsbS5lbWl0KCJwcmVmaW5pc2giKSxIKG0sQSl9KX1mdW5jdGlvbiBIKG0sQSl7dmFyIG9lPXgoQSk7cmV0dXJuIG9l''@;'; put 'put ''JiYoZnVuY3Rpb24gVChtLEEpeyFBLnByZWZpbmlzaGVkJiYhQS5maW5hbENhbGxlZCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBtLl9maW5hbD8oQS5wZW5kaW5nY2IrKyxBLmZpbmFsQ2FsbGVkPSEwLHkubmV4dFRpY2soQyxtLEEpKTooQS5wcmVmaW5pc2hlZD0hMCxtLmVtaXQoInByZWZpbmlz''@;'; put 'put ''aCIpKSl9KG0sQSksMD09PUEucGVuZGluZ2NiJiYoQS5maW5pc2hlZD0hMCxtLmVtaXQoImZpbmlzaCIpKSksb2V9Ri5pbmhlcml0cyhKLHopLFgucHJvdG90eXBlLmdldEJ1ZmZlcj1mdW5jdGlvbigpe2Zvcih2YXIgQT10aGlzLmJ1ZmZlcmVkUmVxdWVzdCxvZT1bXTtBOylvZS5wdXNoKEEp''@;'; put 'put ''LEE9QS5uZXh0O3JldHVybiBvZX0sZnVuY3Rpb24oKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFgucHJvdG90eXBlLCJidWZmZXIiLHtnZXQ6Ty5kZXByZWNhdGUoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRCdWZmZXIoKX0sIl93cml0YWJsZVN0YXRlLmJ1ZmZlciBpcyBkZXByZWNh''@;'; put 'put ''dGVkLiBVc2UgX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyIGluc3RlYWQuIiwiREVQMDAwMyIpfSl9Y2F0Y2h7fX0oKSwiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaGFzSW5zdGFuY2UmJiJmdW5jdGlvbiI9PXR5cGVvZiBGdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0lu''@;'; put 'put ''c3RhbmNlXT8oZWU9RnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0sT2JqZWN0LmRlZmluZVByb3BlcnR5KEosU3ltYm9sLmhhc0luc3RhbmNlLHt2YWx1ZTpmdW5jdGlvbihtKXtyZXR1cm4hIWVlLmNhbGwodGhpcyxtKXx8dGhpcz09PUomJm0mJm0uX3dyaXRhYmxlU3Rh''@;'; put 'put ''dGUgaW5zdGFuY2VvZiBYfX0pKTplZT1mdW5jdGlvbihtKXtyZXR1cm4gbSBpbnN0YW5jZW9mIHRoaXN9LEoucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oKXt0aGlzLmVtaXQoImVycm9yIixuZXcgRXJyb3IoIkNhbm5vdCBwaXBlLCBub3QgcmVhZGFibGUiKSl9LEoucHJvdG90eXBlLndyaXRl''@;'; put 'put ''PWZ1bmN0aW9uKG0sQSxvZSl7dmFyIHRlPXRoaXMuX3dyaXRhYmxlU3RhdGUsc2U9ITEsd2U9IXRlLm9iamVjdE1vZGUmJmZ1bmN0aW9uIFUobSl7cmV0dXJuIE4uaXNCdWZmZXIobSl8fG0gaW5zdGFuY2VvZiBMfShtKTtyZXR1cm4gd2UmJiFOLmlzQnVmZmVyKG0pJiYobT1mdW5jdGlvbiBL''@;'; put 'put ''KG0pe3JldHVybiBOLmZyb20obSl9KG0pKSwiZnVuY3Rpb24iPT10eXBlb2YgQSYmKG9lPUEsQT1udWxsKSx3ZT9BPSJidWZmZXIiOkF8fChBPXRlLmRlZmF1bHRFbmNvZGluZyksImZ1bmN0aW9uIiE9dHlwZW9mIG9lJiYob2U9WSksdGUuZW5kZWQ/ZnVuY3Rpb24gcmUobSxBKXt2YXIgb2U9''@;'; put 'put ''bmV3IEVycm9yKCJ3cml0ZSBhZnRlciBlbmQiKTttLmVtaXQoImVycm9yIixvZSkseS5uZXh0VGljayhBLG9lKX0odGhpcyxvZSk6KHdlfHxmdW5jdGlvbiBpZShtLEEsb2UsdGUpe3ZhciBzZT0hMCx3ZT0hMTtyZXR1cm4gbnVsbD09PW9lP3dlPW5ldyBUeXBlRXJyb3IoIk1heSBub3Qgd3Jp''@;'; put 'put ''dGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtIik6InN0cmluZyIhPXR5cGVvZiBvZSYmdm9pZCAwIT09b2UmJiFBLm9iamVjdE1vZGUmJih3ZT1uZXcgVHlwZUVycm9yKCJJbnZhbGlkIG5vbi1zdHJpbmcvYnVmZmVyIGNodW5rIikpLHdlJiYobS5lbWl0KCJlcnJvciIsd2UpLHkubmV4dFRpY2so''@;'; put 'put ''dGUsd2UpLHNlPSExKSxzZX0odGhpcyx0ZSxtLG9lKSkmJih0ZS5wZW5kaW5nY2IrKyxzZT1mdW5jdGlvbiBtZShtLEEsb2UsdGUsc2Usd2Upe2lmKCFvZSl7dmFyIFVlPWZ1bmN0aW9uIGxlKG0sQSxvZSl7cmV0dXJuIW0ub2JqZWN0TW9kZSYmITEhPT1tLmRlY29kZVN0cmluZ3MmJiJzdHJp''@;'; put 'put ''bmciPT10eXBlb2YgQSYmKEE9Ti5mcm9tKEEsb2UpKSxBfShBLHRlLHNlKTt0ZSE9PVVlJiYob2U9ITAsc2U9ImJ1ZmZlciIsdGU9VWUpfXZhciBKZT1BLm9iamVjdE1vZGU/MTp0ZS5sZW5ndGg7QS5sZW5ndGgrPUplO3ZhciBhdD1BLmxlbmd0aDxBLmhpZ2hXYXRlck1hcms7aWYoYXR8fChB''@;'; put 'put ''Lm5lZWREcmFpbj0hMCksQS53cml0aW5nfHxBLmNvcmtlZCl7dmFyIE1lPUEubGFzdEJ1ZmZlcmVkUmVxdWVzdDtBLmxhc3RCdWZmZXJlZFJlcXVlc3Q9e2NodW5rOnRlLGVuY29kaW5nOnNlLGlzQnVmOm9lLGNhbGxiYWNrOndlLG5leHQ6bnVsbH0sTWU/TWUubmV4dD1BLmxhc3RCdWZmZXJl''@;'; put 'put ''ZFJlcXVlc3Q6QS5idWZmZXJlZFJlcXVlc3Q9QS5sYXN0QnVmZmVyZWRSZXF1ZXN0LEEuYnVmZmVyZWRSZXF1ZXN0Q291bnQrPTF9ZWxzZSBfZShtLEEsITEsSmUsdGUsc2Usd2UpO3JldHVybiBhdH0odGhpcyx0ZSx3ZSxtLEEsb2UpKSxzZX0sSi5wcm90b3R5cGUuY29yaz1mdW5jdGlvbigp''@;'; put 'put ''e3RoaXMuX3dyaXRhYmxlU3RhdGUuY29ya2VkKyt9LEoucHJvdG90eXBlLnVuY29yaz1mdW5jdGlvbigpe3ZhciBtPXRoaXMuX3dyaXRhYmxlU3RhdGU7bS5jb3JrZWQmJihtLmNvcmtlZC0tLCFtLndyaXRpbmcmJiFtLmNvcmtlZCYmIW0uYnVmZmVyUHJvY2Vzc2luZyYmbS5idWZmZXJlZFJl''@;'; put 'put ''cXVlc3QmJmIodGhpcyxtKSl9LEoucHJvdG90eXBlLnNldERlZmF1bHRFbmNvZGluZz1mdW5jdGlvbihBKXtpZigic3RyaW5nIj09dHlwZW9mIEEmJihBPUEudG9Mb3dlckNhc2UoKSksIShbImhleCIsInV0ZjgiLCJ1dGYtOCIsImFzY2lpIiwiYmluYXJ5IiwiYmFzZTY0IiwidWNzMiIsInVj''@;'; put 'put ''cy0yIiwidXRmMTZsZSIsInV0Zi0xNmxlIiwicmF3Il0uaW5kZXhPZigoQSsiIikudG9Mb3dlckNhc2UoKSk+LTEpKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrQSk7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nPUEsdGhpc30sT2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KEoucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksSi5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKG0sQSxvZSl7''@;'; put 'put ''b2UobmV3IEVycm9yKCJfd3JpdGUoKSBpcyBub3QgaW1wbGVtZW50ZWQiKSl9LEoucHJvdG90eXBlLl93cml0ZXY9bnVsbCxKLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24obSxBLG9lKXt2YXIgdGU9dGhpcy5fd3JpdGFibGVTdGF0ZTsiZnVuY3Rpb24iPT10eXBlb2YgbT8ob2U9bSxtPW51bGws''@;'; put 'put ''QT1udWxsKToiZnVuY3Rpb24iPT10eXBlb2YgQSYmKG9lPUEsQT1udWxsKSxudWxsIT1tJiZ0aGlzLndyaXRlKG0sQSksdGUuY29ya2VkJiYodGUuY29ya2VkPTEsdGhpcy51bmNvcmsoKSksdGUuZW5kaW5nfHxmdW5jdGlvbiBqKG0sQSxvZSl7QS5lbmRpbmc9ITAsSChtLEEpLG9lJiYoQS5m''@;'; put 'put ''aW5pc2hlZD95Lm5leHRUaWNrKG9lKTptLm9uY2UoImZpbmlzaCIsb2UpKSxBLmVuZGVkPSEwLG0ud3JpdGFibGU9ITF9KHRoaXMsdGUsb2UpfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSi5wcm90b3R5cGUsImRlc3Ryb3llZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlz''@;'; put 'put ''Ll93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKG0pe3RoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1tKX19KSxKLnByb3RvdHlwZS5kZXN0cm95PVcuZGVzdHJveSxKLnByb3RvdHlwZS5f''@;'; put 'put ''dW5kZXN0cm95PVcudW5kZXN0cm95LEoucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKG0sQSl7dGhpcy5lbmQoKSxBKG0pfX0sMjI2NzoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeT1fKDE1NzIpLkJ1ZmZlcixnPV8oNjQxOSk7ZnVuY3Rpb24gQih3LFAsRil7dy5jb3B5KFAsRil9''@;'; put 'put ''dWUuZXhwb3J0cz1mdW5jdGlvbigpe2Z1bmN0aW9uIHcoKXsoZnVuY3Rpb24gSSh3LFApe2lmKCEodyBpbnN0YW5jZW9mIFApKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSkodGhpcyx3KSx0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9''@;'; put 'put ''bnVsbCx0aGlzLmxlbmd0aD0wfXJldHVybiB3LnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKEYpe3ZhciBPPXtkYXRhOkYsbmV4dDpudWxsfTt0aGlzLmxlbmd0aD4wP3RoaXMudGFpbC5uZXh0PU86dGhpcy5oZWFkPU8sdGhpcy50YWlsPU8sKyt0aGlzLmxlbmd0aH0sdy5wcm90b3R5cGUudW5z''@;'; put 'put ''aGlmdD1mdW5jdGlvbihGKXt2YXIgTz17ZGF0YTpGLG5leHQ6dGhpcy5oZWFkfTswPT09dGhpcy5sZW5ndGgmJih0aGlzLnRhaWw9TyksdGhpcy5oZWFkPU8sKyt0aGlzLmxlbmd0aH0sdy5wcm90b3R5cGUuc2hpZnQ9ZnVuY3Rpb24oKXtpZigwIT09dGhpcy5sZW5ndGgpe3ZhciBGPXRoaXMu''@;'; put 'put ''aGVhZC5kYXRhO3JldHVybiB0aGlzLmhlYWQ9MT09PXRoaXMubGVuZ3RoP3RoaXMudGFpbD1udWxsOnRoaXMuaGVhZC5uZXh0LC0tdGhpcy5sZW5ndGgsRn19LHcucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9LHcucHJv''@;'; put 'put ''dG90eXBlLmpvaW49ZnVuY3Rpb24oRil7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgTz10aGlzLmhlYWQsej0iIitPLmRhdGE7Tz1PLm5leHQ7KXorPUYrTy5kYXRhO3JldHVybiB6fSx3LnByb3RvdHlwZS5jb25jYXQ9ZnVuY3Rpb24oRil7aWYoMD09PXRoaXMubGVuZ3Ro''@;'; put 'put ''KXJldHVybiB5LmFsbG9jKDApO2Zvcih2YXIgTz15LmFsbG9jVW5zYWZlKEY+Pj4wKSx6PXRoaXMuaGVhZCxOPTA7ejspQih6LmRhdGEsTyxOKSxOKz16LmRhdGEubGVuZ3RoLHo9ei5uZXh0O3JldHVybiBPfSx3fSgpLGcmJmcuaW5zcGVjdCYmZy5pbnNwZWN0LmN1c3RvbSYmKHVlLmV4cG9y''@;'; put 'put ''dHMucHJvdG90eXBlW2cuaW5zcGVjdC5jdXN0b21dPWZ1bmN0aW9uKCl7dmFyIHc9Zy5pbnNwZWN0KHtsZW5ndGg6dGhpcy5sZW5ndGh9KTtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lKyIgIit3fSl9LDU5OTc6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg4MjEyKTtmdW5j''@;'; put 'put ''dGlvbiBCKHcsUCl7dy5lbWl0KCJlcnJvciIsUCl9dWUuZXhwb3J0cz17ZGVzdHJveTpmdW5jdGlvbiB5KHcsUCl7dmFyIEY9dGhpcztyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR8fHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dy''@;'; put 'put ''aXRhYmxlU3RhdGUuZGVzdHJveWVkPyhQP1Aodyk6dyYmKHRoaXMuX3dyaXRhYmxlU3RhdGU/dGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWR8fCh0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxJLm5leHRUaWNrKEIsdGhpcyx3KSk6SS5uZXh0VGljayhCLHRoaXMs''@;'; put 'put ''dykpLHRoaXMpOih0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fZGVzdHJveSh3fHxudWxsLGZ1bmN0aW9uKE4peyFQJiZOP0Yu''@;'; put 'put ''X3dyaXRhYmxlU3RhdGU/Ri5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWR8fChGLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxJLm5leHRUaWNrKEIsRixOKSk6SS5uZXh0VGljayhCLEYsTik6UCYmUChOKX0pLHRoaXMpfSx1bmRlc3Ryb3k6ZnVuY3Rpb24gZygpe3RoaXMuX3Jl''@;'; put 'put ''YWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRpbmc9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQ9ITEpLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0''@;'; put 'put ''aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluYWxDYWxsZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5wcmVmaW5pc2hlZD0hMSx0aGlz''@;'; put 'put ''Ll93cml0YWJsZVN0YXRlLmZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSExKX19fSw5ODE5Oih1ZSxxLF8pPT57dWUuZXhwb3J0cz1fKDcxODcpLkV2ZW50RW1pdHRlcn0sMTU3MjoodWUscSxfKT0+e3ZhciBJPV8oODc2NCkseT1JLkJ1ZmZlcjtmdW5jdGlv''@;'; put 'put ''biBnKHcsUCl7Zm9yKHZhciBGIGluIHcpUFtGXT13W0ZdfWZ1bmN0aW9uIEIodyxQLEYpe3JldHVybiB5KHcsUCxGKX15LmZyb20mJnkuYWxsb2MmJnkuYWxsb2NVbnNhZmUmJnkuYWxsb2NVbnNhZmVTbG93P3VlLmV4cG9ydHM9STooZyhJLHEpLHEuQnVmZmVyPUIpLGcoeSxCKSxCLmZyb209''@;'; put 'put ''ZnVuY3Rpb24odyxQLEYpe2lmKCJudW1iZXIiPT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiB5KHcsUCxGKX0sQi5hbGxvYz1mdW5jdGlvbih3LFAsRil7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBU''@;'; put 'put ''eXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgTz15KHcpO3JldHVybiB2b2lkIDAhPT1QPyJzdHJpbmciPT10eXBlb2YgRj9PLmZpbGwoUCxGKTpPLmZpbGwoUCk6Ty5maWxsKDApLE99LEIuYWxsb2NVbnNhZmU9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVv''@;'; put 'put ''ZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4geSh3KX0sQi5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIi''@;'; put 'put ''KTtyZXR1cm4gSS5TbG93QnVmZmVyKHcpfX0sMzg3MjoodWUscSxfKT0+eyhxPXVlLmV4cG9ydHM9Xyg0OTYwKSkuU3RyZWFtPXEscS5SZWFkYWJsZT1xLHEuV3JpdGFibGU9XygyMDEwKSxxLkR1cGxleD1fKDQzOTApLHEuVHJhbnNmb3JtPV8oMzkxMikscS5QYXNzVGhyb3VnaD1fKDEyOTQp''@;'; put 'put ''fSwyMjIxOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMzM2NCkuQnVmZmVyLHk9SS5pc0VuY29kaW5nfHxmdW5jdGlvbihKKXtzd2l0Y2goKEo9IiIrSikmJkoudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJi''@;'; put 'put ''aW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6Y2FzZSJyYXciOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fTtmdW5jdGlvbiB3KEope3ZhciByZTtzd2l0Y2godGhpcy5lbmNvZGluZz1mdW5jdGlvbiBCKEop''@;'; put 'put ''e3ZhciByZT1mdW5jdGlvbiBnKEope2lmKCFKKXJldHVybiJ1dGY4Ijtmb3IodmFyIHJlOzspc3dpdGNoKEope2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuInV0ZjgiO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4idXRmMTZs''@;'; put 'put ''ZSI7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4ibGF0aW4xIjtjYXNlImJhc2U2NCI6Y2FzZSJhc2NpaSI6Y2FzZSJoZXgiOnJldHVybiBKO2RlZmF1bHQ6aWYocmUpcmV0dXJuO0o9KCIiK0opLnRvTG93ZXJDYXNlKCkscmU9ITB9fShKKTtpZigic3RyaW5nIiE9dHlwZW9mIHJl''@;'; put 'put ''JiYoSS5pc0VuY29kaW5nPT09eXx8IXkoSikpKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitKKTtyZXR1cm4gcmV8fEp9KEopLHRoaXMuZW5jb2Rpbmcpe2Nhc2UidXRmMTZsZSI6dGhpcy50ZXh0PUssdGhpcy5lbmQ9VSxyZT00O2JyZWFrO2Nhc2UidXRmOCI6dGhpcy5m''@;'; put 'put ''aWxsTGFzdD16LHJlPTQ7YnJlYWs7Y2FzZSJiYXNlNjQiOnRoaXMudGV4dD1XLHRoaXMuZW5kPVkscmU9MzticmVhaztkZWZhdWx0OnJldHVybiB0aGlzLndyaXRlPVgsdm9pZCh0aGlzLmVuZD1lZSl9dGhpcy5sYXN0TmVlZD0wLHRoaXMubGFzdFRvdGFsPTAsdGhpcy5sYXN0Q2hhcj1JLmFs''@;'; put 'put ''bG9jVW5zYWZlKHJlKX1mdW5jdGlvbiBQKEope3JldHVybiBKPD0xMjc/MDpKPj41PT02PzI6Sj4+ND09MTQ/MzpKPj4zPT0zMD80Oko+PjY9PTI/LTE6LTJ9ZnVuY3Rpb24geihKKXt2YXIgcmU9dGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCxpZT1mdW5jdGlvbiBPKEoscmUsaWUpe2lm''@;'; put 'put ''KDEyOCE9KDE5MiZyZVswXSkpcmV0dXJuIEoubGFzdE5lZWQ9MCwiXHVmZmZkIjtpZihKLmxhc3ROZWVkPjEmJnJlLmxlbmd0aD4xKXtpZigxMjghPSgxOTImcmVbMV0pKXJldHVybiBKLmxhc3ROZWVkPTEsIlx1ZmZmZCI7aWYoSi5sYXN0TmVlZD4yJiZyZS5sZW5ndGg+MiYmMTI4IT0oMTky''@;'; put 'put ''JnJlWzJdKSlyZXR1cm4gSi5sYXN0TmVlZD0yLCJcdWZmZmQifX0odGhpcyxKKTtyZXR1cm4gdm9pZCAwIT09aWU/aWU6dGhpcy5sYXN0TmVlZDw9Si5sZW5ndGg/KEouY29weSh0aGlzLmxhc3RDaGFyLHJlLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVu''@;'; put 'put ''Y29kaW5nLDAsdGhpcy5sYXN0VG90YWwpKTooSi5jb3B5KHRoaXMubGFzdENoYXIscmUsMCxKLmxlbmd0aCksdm9pZCh0aGlzLmxhc3ROZWVkLT1KLmxlbmd0aCkpfWZ1bmN0aW9uIEsoSixyZSl7aWYoKEoubGVuZ3RoLXJlKSUyPT0wKXt2YXIgaWU9Si50b1N0cmluZygidXRmMTZsZSIscmUp''@;'; put 'put ''O2lmKGllKXt2YXIgbGU9aWUuY2hhckNvZGVBdChpZS5sZW5ndGgtMSk7aWYobGU+PTU1Mjk2JiZsZTw9NTYzMTkpcmV0dXJuIHRoaXMubGFzdE5lZWQ9Mix0aGlzLmxhc3RUb3RhbD00LHRoaXMubGFzdENoYXJbMF09SltKLmxlbmd0aC0yXSx0aGlzLmxhc3RDaGFyWzFdPUpbSi5sZW5ndGgt''@;'; put 'put ''MV0saWUuc2xpY2UoMCwtMSl9cmV0dXJuIGllfXJldHVybiB0aGlzLmxhc3ROZWVkPTEsdGhpcy5sYXN0VG90YWw9Mix0aGlzLmxhc3RDaGFyWzBdPUpbSi5sZW5ndGgtMV0sSi50b1N0cmluZygidXRmMTZsZSIscmUsSi5sZW5ndGgtMSl9ZnVuY3Rpb24gVShKKXt2YXIgcmU9SiYmSi5sZW5n''@;'; put 'put ''dGg/dGhpcy53cml0ZShKKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9yZSt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCJ1dGYxNmxlIiwwLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQpOnJlfWZ1bmN0aW9uIFcoSixyZSl7dmFyIGllPShKLmxlbmd0aC1yZSklMztyZXR1cm4gMD09PWll''@;'; put 'put ''P0oudG9TdHJpbmcoImJhc2U2NCIscmUpOih0aGlzLmxhc3ROZWVkPTMtaWUsdGhpcy5sYXN0VG90YWw9MywxPT09aWU/dGhpcy5sYXN0Q2hhclswXT1KW0oubGVuZ3RoLTFdOih0aGlzLmxhc3RDaGFyWzBdPUpbSi5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1KW0oubGVuZ3RoLTFdKSxK''@;'; put 'put ''LnRvU3RyaW5nKCJiYXNlNjQiLHJlLEoubGVuZ3RoLWllKSl9ZnVuY3Rpb24gWShKKXt2YXIgcmU9SiYmSi5sZW5ndGg/dGhpcy53cml0ZShKKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9yZSt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCJiYXNlNjQiLDAsMy10aGlzLmxhc3ROZWVkKTpyZX1m''@;'; put 'put ''dW5jdGlvbiBYKEope3JldHVybiBKLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcpfWZ1bmN0aW9uIGVlKEope3JldHVybiBKJiZKLmxlbmd0aD90aGlzLndyaXRlKEopOiIifXEucz13LHcucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEope2lmKDA9PT1KLmxlbmd0aClyZXR1cm4iIjt2YXIgcmUs''@;'; put 'put ''aWU7aWYodGhpcy5sYXN0TmVlZCl7aWYodm9pZCAwPT09KHJlPXRoaXMuZmlsbExhc3QoSikpKXJldHVybiIiO2llPXRoaXMubGFzdE5lZWQsdGhpcy5sYXN0TmVlZD0wfWVsc2UgaWU9MDtyZXR1cm4gaWU8Si5sZW5ndGg/cmU/cmUrdGhpcy50ZXh0KEosaWUpOnRoaXMudGV4dChKLGllKTpy''@;'; put 'put ''ZXx8IiJ9LHcucHJvdG90eXBlLmVuZD1mdW5jdGlvbiBMKEope3ZhciByZT1KJiZKLmxlbmd0aD90aGlzLndyaXRlKEopOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP3JlKyJcdWZmZmQiOnJlfSx3LnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uIE4oSixyZSl7dmFyIGllPWZ1bmN0aW9uIEYoSixy''@;'; put 'put ''ZSxpZSl7dmFyIGxlPXJlLmxlbmd0aC0xO2lmKGxlPGllKXJldHVybiAwO3ZhciBtZT1QKHJlW2xlXSk7cmV0dXJuIG1lPj0wPyhtZT4wJiYoSi5sYXN0TmVlZD1tZS0xKSxtZSk6LS1sZTxpZXx8LTI9PT1tZT8wOihtZT1QKHJlW2xlXSkpPj0wPyhtZT4wJiYoSi5sYXN0TmVlZD1tZS0yKSxt''@;'; put 'put ''ZSk6LS1sZTxpZXx8LTI9PT1tZT8wOihtZT1QKHJlW2xlXSkpPj0wPyhtZT4wJiYoMj09PW1lP21lPTA6Si5sYXN0TmVlZD1tZS0zKSxtZSk6MH0odGhpcyxKLHJlKTtpZighdGhpcy5sYXN0TmVlZClyZXR1cm4gSi50b1N0cmluZygidXRmOCIscmUpO3RoaXMubGFzdFRvdGFsPWllO3ZhciBs''@;'; put 'put ''ZT1KLmxlbmd0aC0oaWUtdGhpcy5sYXN0TmVlZCk7cmV0dXJuIEouY29weSh0aGlzLmxhc3RDaGFyLDAsbGUpLEoudG9TdHJpbmcoInV0ZjgiLHJlLGxlKX0sdy5wcm90b3R5cGUuZmlsbExhc3Q9ZnVuY3Rpb24oSil7aWYodGhpcy5sYXN0TmVlZDw9Si5sZW5ndGgpcmV0dXJuIEouY29weSh0''@;'; put 'put ''aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCk7Si5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCww''@;'; put 'put ''LEoubGVuZ3RoKSx0aGlzLmxhc3ROZWVkLT1KLmxlbmd0aH19LDMzNjQ6KHVlLHEsXyk9Pnt2YXIgST1fKDg3NjQpLHk9SS5CdWZmZXI7ZnVuY3Rpb24gZyh3LFApe2Zvcih2YXIgRiBpbiB3KVBbRl09d1tGXX1mdW5jdGlvbiBCKHcsUCxGKXtyZXR1cm4geSh3LFAsRil9eS5mcm9tJiZ5LmFs''@;'; put 'put ''bG9jJiZ5LmFsbG9jVW5zYWZlJiZ5LmFsbG9jVW5zYWZlU2xvdz91ZS5leHBvcnRzPUk6KGcoSSxxKSxxLkJ1ZmZlcj1CKSxnKHksQiksQi5mcm9tPWZ1bmN0aW9uKHcsUCxGKXtpZigibnVtYmVyIj09dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUg''@;'; put 'put ''YSBudW1iZXIiKTtyZXR1cm4geSh3LFAsRil9LEIuYWxsb2M9ZnVuY3Rpb24odyxQLEYpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7dmFyIE89eSh3KTtyZXR1cm4gdm9pZCAwIT09UD8ic3RyaW5nIj09dHlw''@;'; put 'put ''ZW9mIEY/Ty5maWxsKFAsRik6Ty5maWxsKFApOk8uZmlsbCgwKSxPfSxCLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHcpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIHkodyl9LEIuYWxsb2NVbnNhZmVT''@;'; put 'put ''bG93PWZ1bmN0aW9uKHcpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIEkuU2xvd0J1ZmZlcih3KX19LDcyOTU6KHVlLHEsXyk9Pnt2YXIgST1fKDg3NjQpLkJ1ZmZlcjt1ZS5leHBvcnRzPWZ1bmN0''@;'; put 'put ''aW9uKGcsQil7Zm9yKHZhciB3PU1hdGgubWluKGcubGVuZ3RoLEIubGVuZ3RoKSxQPW5ldyBJKHcpLEY9MDtGPHc7KytGKVBbRl09Z1tGXV5CW0ZdO3JldHVybiBQfX0sODc2NDoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDUxMDgpO2NvbnN0IHk9Xyg5NzQyKSxnPV8oNjQ1KSxC''@;'; put 'put ''PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wuZm9yP1N5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIik6bnVsbDtxLkJ1ZmZlcj1PLHEuU2xvd0J1ZmZlcj1mdW5jdGlvbiByZSgkZSl7cmV0dXJuKyRlIT0kZSYmKCRlPTAp''@;'; put 'put ''LE8uYWxsb2MoKyRlKX0scS5JTlNQRUNUX01BWF9CWVRFUz01MDtjb25zdCB3PTIxNDc0ODM2NDc7ZnVuY3Rpb24gRigkZSl7aWYoJGU+dyl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInKyRlKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAic2l6ZSInKTtjb25zdCB0dD1uZXcg''@;'; put 'put ''VWludDhBcnJheSgkZSk7cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZih0dCxPLnByb3RvdHlwZSksdHR9ZnVuY3Rpb24gTygkZSx0dCxIZSl7aWYoIm51bWJlciI9PXR5cGVvZiAkZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0dCl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInN0cmluZyIg''@;'; put 'put ''YXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtyZXR1cm4gSygkZSl9cmV0dXJuIHooJGUsdHQsSGUpfWZ1bmN0aW9uIHooJGUsdHQsSGUpe2lmKCJzdHJpbmciPT10eXBlb2YgJGUpcmV0dXJuIGZ1bmN0aW9uIFUoJGUsdHQpe2lmKCgic3Ry''@;'; put 'put ''aW5nIiE9dHlwZW9mIHR0fHwiIj09PXR0KSYmKHR0PSJ1dGY4IiksIU8uaXNFbmNvZGluZyh0dCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIit0dCk7Y29uc3QgSGU9MHxpZSgkZSx0dCk7bGV0IGR0PUYoSGUpO2NvbnN0IHF0PWR0LndyaXRlKCRlLHR0KTtyZXR1''@;'; put 'put ''cm4gcXQhPT1IZSYmKGR0PWR0LnNsaWNlKDAscXQpKSxkdH0oJGUsdHQpO2lmKEFycmF5QnVmZmVyLmlzVmlldygkZSkpcmV0dXJuIGZ1bmN0aW9uIFkoJGUpe2lmKGRuKCRlLFVpbnQ4QXJyYXkpKXtjb25zdCB0dD1uZXcgVWludDhBcnJheSgkZSk7cmV0dXJuIFgodHQuYnVmZmVyLHR0LmJ5''@;'; put 'put ''dGVPZmZzZXQsdHQuYnl0ZUxlbmd0aCl9cmV0dXJuIFcoJGUpfSgkZSk7aWYobnVsbD09JGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBP''@;'; put 'put ''YmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgJGUpO2lmKGRuKCRlLEFycmF5QnVmZmVyKXx8JGUmJmRuKCRlLmJ1ZmZlcixBcnJheUJ1ZmZlcil8fHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcjwidSImJihkbigkZSxTaGFyZWRBcnJheUJ1ZmZlcil8fCRlJiZkbigkZS5idWZmZXIsU2hh''@;'; put 'put ''cmVkQXJyYXlCdWZmZXIpKSlyZXR1cm4gWCgkZSx0dCxIZSk7aWYoIm51bWJlciI9PXR5cGVvZiAkZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTtjb25zdCBkdD0kZS52''@;'; put 'put ''YWx1ZU9mJiYkZS52YWx1ZU9mKCk7aWYobnVsbCE9ZHQmJmR0IT09JGUpcmV0dXJuIE8uZnJvbShkdCx0dCxIZSk7Y29uc3QgcXQ9ZnVuY3Rpb24gZWUoJGUpe2lmKE8uaXNCdWZmZXIoJGUpKXtjb25zdCB0dD0wfEooJGUubGVuZ3RoKSxIZT1GKHR0KTtyZXR1cm4gMD09PUhlLmxlbmd0aHx8''@;'; put 'put ''JGUuY29weShIZSwwLDAsdHQpLEhlfXJldHVybiB2b2lkIDAhPT0kZS5sZW5ndGg/Im51bWJlciIhPXR5cGVvZiAkZS5sZW5ndGh8fHl0KCRlLmxlbmd0aCk/RigwKTpXKCRlKToiQnVmZmVyIj09PSRlLnR5cGUmJkFycmF5LmlzQXJyYXkoJGUuZGF0YSk/VygkZS5kYXRhKTp2b2lkIDB9KCRl''@;'; put 'put ''KTtpZihxdClyZXR1cm4gcXQ7aWYodHlwZW9mIFN5bWJvbDwidSImJm51bGwhPVN5bWJvbC50b1ByaW1pdGl2ZSYmImZ1bmN0aW9uIj09dHlwZW9mICRlW1N5bWJvbC50b1ByaW1pdGl2ZV0pcmV0dXJuIE8uZnJvbSgkZVtTeW1ib2wudG9QcmltaXRpdmVdKCJzdHJpbmciKSx0dCxIZSk7dGhy''@;'; put 'put ''b3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgJGUpfWZ1bmN0aW9uIE4oJGUpe2lmKCJudW1i''@;'; put 'put ''ZXIiIT10eXBlb2YgJGUpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKTtpZigkZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrJGUrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpfWZ1bmN0aW9u''@;'; put 'put ''IEsoJGUpe3JldHVybiBOKCRlKSxGKCRlPDA/MDowfEooJGUpKX1mdW5jdGlvbiBXKCRlKXtjb25zdCB0dD0kZS5sZW5ndGg8MD8wOjB8SigkZS5sZW5ndGgpLEhlPUYodHQpO2ZvcihsZXQgZHQ9MDtkdDx0dDtkdCs9MSlIZVtkdF09MjU1JiRlW2R0XTtyZXR1cm4gSGV9ZnVuY3Rpb24gWCgk''@;'; put 'put ''ZSx0dCxIZSl7aWYodHQ8MHx8JGUuYnl0ZUxlbmd0aDx0dCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignIm9mZnNldCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJyk7aWYoJGUuYnl0ZUxlbmd0aDx0dCsoSGV8fDApKXRocm93IG5ldyBSYW5nZUVycm9yKCcibGVuZ3RoIiBpcyBvdXRzaWRl''@;'; put 'put ''IG9mIGJ1ZmZlciBib3VuZHMnKTtsZXQgZHQ7cmV0dXJuIGR0PXZvaWQgMD09PXR0JiZ2b2lkIDA9PT1IZT9uZXcgVWludDhBcnJheSgkZSk6dm9pZCAwPT09SGU/bmV3IFVpbnQ4QXJyYXkoJGUsdHQpOm5ldyBVaW50OEFycmF5KCRlLHR0LEhlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoZHQs''@;'; put 'put ''Ty5wcm90b3R5cGUpLGR0fWZ1bmN0aW9uIEooJGUpe2lmKCRlPj13KXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4Iit3LnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIDB8JGV9ZnVuY3Rpb24g''@;'; put 'put ''aWUoJGUsdHQpe2lmKE8uaXNCdWZmZXIoJGUpKXJldHVybiAkZS5sZW5ndGg7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KCRlKXx8ZG4oJGUsQXJyYXlCdWZmZXIpKXJldHVybiAkZS5ieXRlTGVuZ3RoO2lmKCJzdHJpbmciIT10eXBlb2YgJGUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJzdHJp''@;'; put 'put ''bmciIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIG9yIEFycmF5QnVmZmVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mICRlKTtjb25zdCBIZT0kZS5sZW5ndGgsZHQ9YXJndW1lbnRzLmxlbmd0aD4yJiYhMD09PWFyZ3VtZW50c1syXTtpZighZHQmJjA9PT1I''@;'; put 'put ''ZSlyZXR1cm4gMDtsZXQgcXQ9ITE7Zm9yKDs7KXN3aXRjaCh0dCl7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gSGU7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4ga2UoJGUpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZs''@;'; put 'put ''ZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqSGU7Y2FzZSJoZXgiOnJldHVybiBIZT4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiBydCgkZSkubGVuZ3RoO2RlZmF1bHQ6aWYocXQpcmV0dXJuIGR0Py0xOmtlKCRlKS5sZW5ndGg7dHQ9KCIiK3R0KS50b0xvd2VyQ2FzZSgpLHF0PSEwfX1mdW5j''@;'; put 'put ''dGlvbiBsZSgkZSx0dCxIZSl7bGV0IGR0PSExO2lmKCh2b2lkIDA9PT10dHx8dHQ8MCkmJih0dD0wKSx0dD50aGlzLmxlbmd0aHx8KCh2b2lkIDA9PT1IZXx8SGU+dGhpcy5sZW5ndGgpJiYoSGU9dGhpcy5sZW5ndGgpLEhlPD0wKXx8KEhlPj4+PTApPD0odHQ+Pj49MCkpcmV0dXJuIiI7Zm9y''@;'; put 'put ''KCRlfHwoJGU9InV0ZjgiKTs7KXN3aXRjaCgkZSl7Y2FzZSJoZXgiOnJldHVybiBtKHRoaXMsdHQsSGUpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIEModGhpcyx0dCxIZSk7Y2FzZSJhc2NpaSI6cmV0dXJuIGoodGhpcyx0dCxIZSk7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5Ijpy''@;'; put 'put ''ZXR1cm4gRSh0aGlzLHR0LEhlKTtjYXNlImJhc2U2NCI6cmV0dXJuIHgodGhpcyx0dCxIZSk7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBBKHRoaXMsdHQsSGUpO2RlZmF1bHQ6aWYoZHQpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5r''@;'; put 'put ''bm93biBlbmNvZGluZzogIiskZSk7JGU9KCRlKyIiKS50b0xvd2VyQ2FzZSgpLGR0PSEwfX1mdW5jdGlvbiBtZSgkZSx0dCxIZSl7Y29uc3QgZHQ9JGVbdHRdOyRlW3R0XT0kZVtIZV0sJGVbSGVdPWR0fWZ1bmN0aW9uIF9lKCRlLHR0LEhlLGR0LHF0KXtpZigwPT09JGUubGVuZ3RoKXJldHVy''@;'; put 'put ''bi0xO2lmKCJzdHJpbmciPT10eXBlb2YgSGU/KGR0PUhlLEhlPTApOkhlPjIxNDc0ODM2NDc/SGU9MjE0NzQ4MzY0NzpIZTwtMjE0NzQ4MzY0OCYmKEhlPS0yMTQ3NDgzNjQ4KSx5dChIZT0rSGUpJiYoSGU9cXQ/MDokZS5sZW5ndGgtMSksSGU8MCYmKEhlPSRlLmxlbmd0aCtIZSksSGU+PSRl''@;'; put 'put ''Lmxlbmd0aCl7aWYocXQpcmV0dXJuLTE7SGU9JGUubGVuZ3RoLTF9ZWxzZSBpZihIZTwwKXtpZighcXQpcmV0dXJuLTE7SGU9MH1pZigic3RyaW5nIj09dHlwZW9mIHR0JiYodHQ9Ty5mcm9tKHR0LGR0KSksTy5pc0J1ZmZlcih0dCkpcmV0dXJuIDA9PT10dC5sZW5ndGg/LTE6VGUoJGUsdHQs''@;'; put 'put ''SGUsZHQscXQpO2lmKCJudW1iZXIiPT10eXBlb2YgdHQpcmV0dXJuIHR0Jj0yNTUsImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y/cXQ/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKCRlLHR0LEhlKTpVaW50OEFycmF5LnByb3RvdHlwZS5s''@;'; put 'put ''YXN0SW5kZXhPZi5jYWxsKCRlLHR0LEhlKTpUZSgkZSxbdHRdLEhlLGR0LHF0KTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiBUZSgkZSx0dCxIZSxkdCxxdCl7bGV0IHNuLFJ0PTEsUHQ9JGUubGVuZ3RoLGFpPXR0''@;'; put 'put ''Lmxlbmd0aDtpZih2b2lkIDAhPT1kdCYmKCJ1Y3MyIj09PShkdD1TdHJpbmcoZHQpLnRvTG93ZXJDYXNlKCkpfHwidWNzLTIiPT09ZHR8fCJ1dGYxNmxlIj09PWR0fHwidXRmLTE2bGUiPT09ZHQpKXtpZigkZS5sZW5ndGg8Mnx8dHQubGVuZ3RoPDIpcmV0dXJuLTE7UnQ9MixQdC89MixhaS89''@;'; put 'put ''MixIZS89Mn1mdW5jdGlvbiBRdChSaSxmbil7cmV0dXJuIDE9PT1SdD9SaVtmbl06UmkucmVhZFVJbnQxNkJFKGZuKlJ0KX1pZihxdCl7bGV0IFJpPS0xO2Zvcihzbj1IZTtzbjxQdDtzbisrKWlmKFF0KCRlLHNuKT09PVF0KHR0LC0xPT09Umk/MDpzbi1SaSkpe2lmKC0xPT09UmkmJihSaT1z''@;'; put 'put ''biksc24tUmkrMT09PWFpKXJldHVybiBSaSpSdH1lbHNlLTEhPT1SaSYmKHNuLT1zbi1SaSksUmk9LTF9ZWxzZSBmb3IoSGUrYWk+UHQmJihIZT1QdC1haSksc249SGU7c24+PTA7c24tLSl7bGV0IFJpPSEwO2ZvcihsZXQgZm49MDtmbjxhaTtmbisrKWlmKFF0KCRlLHNuK2ZuKSE9PVF0KHR0''@;'; put 'put ''LGZuKSl7Umk9ITE7YnJlYWt9aWYoUmkpcmV0dXJuIHNufXJldHVybi0xfWZ1bmN0aW9uIFNlKCRlLHR0LEhlLGR0KXtIZT1OdW1iZXIoSGUpfHwwO2NvbnN0IHF0PSRlLmxlbmd0aC1IZTtkdD8oZHQ9TnVtYmVyKGR0KSk+cXQmJihkdD1xdCk6ZHQ9cXQ7Y29uc3QgUnQ9dHQubGVuZ3RoO2xl''@;'; put 'put ''dCBQdDtmb3IoZHQ+UnQvMiYmKGR0PVJ0LzIpLFB0PTA7UHQ8ZHQ7KytQdCl7Y29uc3QgYWk9cGFyc2VJbnQodHQuc3Vic3RyKDIqUHQsMiksMTYpO2lmKHl0KGFpKSlyZXR1cm4gUHQ7JGVbSGUrUHRdPWFpfXJldHVybiBQdH1mdW5jdGlvbiB6ZSgkZSx0dCxIZSxkdCl7cmV0dXJuIFFlKGtl''@;'; put 'put ''KHR0LCRlLmxlbmd0aC1IZSksJGUsSGUsZHQpfWZ1bmN0aW9uIFYoJGUsdHQsSGUsZHQpe3JldHVybiBRZShmdW5jdGlvbiBBZSgkZSl7Y29uc3QgdHQ9W107Zm9yKGxldCBIZT0wO0hlPCRlLmxlbmd0aDsrK0hlKXR0LnB1c2goMjU1JiRlLmNoYXJDb2RlQXQoSGUpKTtyZXR1cm4gdHR9KHR0''@;'; put 'put ''KSwkZSxIZSxkdCl9ZnVuY3Rpb24gcCgkZSx0dCxIZSxkdCl7cmV0dXJuIFFlKHJ0KHR0KSwkZSxIZSxkdCl9ZnVuY3Rpb24gYigkZSx0dCxIZSxkdCl7cmV0dXJuIFFlKGZ1bmN0aW9uIF90KCRlLHR0KXtsZXQgSGUsZHQscXQ7Y29uc3QgUnQ9W107Zm9yKGxldCBQdD0wO1B0PCRlLmxlbmd0''@;'; put 'put ''aCYmISgodHQtPTIpPDApOysrUHQpSGU9JGUuY2hhckNvZGVBdChQdCksZHQ9SGU+PjgscXQ9SGUlMjU2LFJ0LnB1c2gocXQpLFJ0LnB1c2goZHQpO3JldHVybiBSdH0odHQsJGUubGVuZ3RoLUhlKSwkZSxIZSxkdCl9ZnVuY3Rpb24geCgkZSx0dCxIZSl7cmV0dXJuIHkuZnJvbUJ5dGVBcnJh''@;'; put 'put ''eSgwPT09dHQmJkhlPT09JGUubGVuZ3RoPyRlOiRlLnNsaWNlKHR0LEhlKSl9ZnVuY3Rpb24gQygkZSx0dCxIZSl7SGU9TWF0aC5taW4oJGUubGVuZ3RoLEhlKTtjb25zdCBkdD1bXTtsZXQgcXQ9dHQ7Zm9yKDtxdDxIZTspe2NvbnN0IFJ0PSRlW3F0XTtsZXQgUHQ9bnVsbCxhaT1SdD4yMzk/''@;'; put 'put ''NDpSdD4yMjM/MzpSdD4xOTE/MjoxO2lmKHF0K2FpPD1IZSl7bGV0IFF0LHNuLFJpLGZuO3N3aXRjaChhaSl7Y2FzZSAxOlJ0PDEyOCYmKFB0PVJ0KTticmVhaztjYXNlIDI6UXQ9JGVbcXQrMV0sMTI4PT0oMTkyJlF0KSYmKGZuPSgzMSZSdCk8PDZ8NjMmUXQsZm4+MTI3JiYoUHQ9Zm4pKTti''@;'; put 'put ''cmVhaztjYXNlIDM6UXQ9JGVbcXQrMV0sc249JGVbcXQrMl0sMTI4PT0oMTkyJlF0KSYmMTI4PT0oMTkyJnNuKSYmKGZuPSgxNSZSdCk8PDEyfCg2MyZRdCk8PDZ8NjMmc24sZm4+MjA0NyYmKGZuPDU1Mjk2fHxmbj41NzM0MykmJihQdD1mbikpO2JyZWFrO2Nhc2UgNDpRdD0kZVtxdCsxXSxz''@;'; put 'put ''bj0kZVtxdCsyXSxSaT0kZVtxdCszXSwxMjg9PSgxOTImUXQpJiYxMjg9PSgxOTImc24pJiYxMjg9PSgxOTImUmkpJiYoZm49KDE1JlJ0KTw8MTh8KDYzJlF0KTw8MTJ8KDYzJnNuKTw8Nnw2MyZSaSxmbj42NTUzNSYmZm48MTExNDExMiYmKFB0PWZuKSl9fW51bGw9PT1QdD8oUHQ9NjU1MzMs''@;'; put 'put ''YWk9MSk6UHQ+NjU1MzUmJihQdC09NjU1MzYsZHQucHVzaChQdD4+PjEwJjEwMjN8NTUyOTYpLFB0PTU2MzIwfDEwMjMmUHQpLGR0LnB1c2goUHQpLHF0Kz1haX1yZXR1cm4gZnVuY3Rpb24gSCgkZSl7Y29uc3QgdHQ9JGUubGVuZ3RoO2lmKHR0PD1UKXJldHVybiBTdHJpbmcuZnJvbUNoYXJD''@;'; put 'put ''b2RlLmFwcGx5KFN0cmluZywkZSk7bGV0IEhlPSIiLGR0PTA7Zm9yKDtkdDx0dDspSGUrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCRlLnNsaWNlKGR0LGR0Kz1UKSk7cmV0dXJuIEhlfShkdCl9cS5rTWF4TGVuZ3RoPXcsIShPLlRZUEVEX0FSUkFZX1NVUFBPUlQ9ZnVuY3Rp''@;'; put 'put ''b24gUCgpe3RyeXtjb25zdCAkZT1uZXcgVWludDhBcnJheSgxKSx0dD17Zm9vOmZ1bmN0aW9uKCl7cmV0dXJuIDQyfX07cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZih0dCxVaW50OEFycmF5LnByb3RvdHlwZSksT2JqZWN0LnNldFByb3RvdHlwZU9mKCRlLHR0KSw0Mj09PSRlLmZvbygp''@;'; put 'put ''fWNhdGNoe3JldHVybiExfX0oKSkmJnR5cGVvZiBJPCJ1IiYmImZ1bmN0aW9uIj09dHlwZW9mIEkuZXJyb3ImJkkuZXJyb3IoIlRoaXMgYnJvd3NlciBsYWNrcyB0eXBlZCBhcnJheSAoVWludDhBcnJheSkgc3VwcG9ydCB3aGljaCBpcyByZXF1aXJlZCBieSBgYnVmZmVyYCB2NS54LiBVc2Ug''@;'; put 'put ''YGJ1ZmZlcmAgdjQueCBpZiB5b3UgcmVxdWlyZSBvbGQgYnJvd3NlciBzdXBwb3J0LiIpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLnByb3RvdHlwZSwicGFyZW50Iix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtpZihPLmlzQnVmZmVyKHRoaXMpKXJldHVybiB0aGlzLmJ1ZmZlcn19''@;'; put 'put ''KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoTy5wcm90b3R5cGUsIm9mZnNldCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoTy5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5ieXRlT2Zmc2V0fX0pLE8ucG9vbFNpemU9ODE5MixPLmZyb209ZnVuY3Rpb24oJGUsdHQsSGUpe3Jl''@;'; put 'put ''dHVybiB6KCRlLHR0LEhlKX0sT2JqZWN0LnNldFByb3RvdHlwZU9mKE8ucHJvdG90eXBlLFVpbnQ4QXJyYXkucHJvdG90eXBlKSxPYmplY3Quc2V0UHJvdG90eXBlT2YoTyxVaW50OEFycmF5KSxPLmFsbG9jPWZ1bmN0aW9uKCRlLHR0LEhlKXtyZXR1cm4gZnVuY3Rpb24gTCgkZSx0dCxIZSl7''@;'; put 'put ''cmV0dXJuIE4oJGUpLCRlPD0wP0YoJGUpOnZvaWQgMCE9PXR0PyJzdHJpbmciPT10eXBlb2YgSGU/RigkZSkuZmlsbCh0dCxIZSk6RigkZSkuZmlsbCh0dCk6RigkZSl9KCRlLHR0LEhlKX0sTy5hbGxvY1Vuc2FmZT1mdW5jdGlvbigkZSl7cmV0dXJuIEsoJGUpfSxPLmFsbG9jVW5zYWZlU2xv''@;'; put 'put ''dz1mdW5jdGlvbigkZSl7cmV0dXJuIEsoJGUpfSxPLmlzQnVmZmVyPWZ1bmN0aW9uKHR0KXtyZXR1cm4gbnVsbCE9dHQmJiEwPT09dHQuX2lzQnVmZmVyJiZ0dCE9PU8ucHJvdG90eXBlfSxPLmNvbXBhcmU9ZnVuY3Rpb24odHQsSGUpe2lmKGRuKHR0LFVpbnQ4QXJyYXkpJiYodHQ9Ty5mcm9t''@;'; put 'put ''KHR0LHR0Lm9mZnNldCx0dC5ieXRlTGVuZ3RoKSksZG4oSGUsVWludDhBcnJheSkmJihIZT1PLmZyb20oSGUsSGUub2Zmc2V0LEhlLmJ5dGVMZW5ndGgpKSwhTy5pc0J1ZmZlcih0dCl8fCFPLmlzQnVmZmVyKEhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImJ1ZjEiLCAiYnVmMiIgYXJn''@;'; put 'put ''dW1lbnRzIG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtpZih0dD09PUhlKXJldHVybiAwO2xldCBkdD10dC5sZW5ndGgscXQ9SGUubGVuZ3RoO2ZvcihsZXQgUnQ9MCxQdD1NYXRoLm1pbihkdCxxdCk7UnQ8UHQ7KytSdClpZih0dFtSdF0hPT1IZVtSdF0pe2R0''@;'; put 'put ''PXR0W1J0XSxxdD1IZVtSdF07YnJlYWt9cmV0dXJuIGR0PHF0Py0xOnF0PGR0PzE6MH0sTy5pc0VuY29kaW5nPWZ1bmN0aW9uKHR0KXtzd2l0Y2goU3RyaW5nKHR0KS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImxhdGlu''@;'; put 'put ''MSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LE8uY29uY2F0PWZ1bmN0aW9uKHR0LEhlKXtpZighQXJyYXkuaXNBcnJheSh0dCkpdGhyb3cgbmV3''@;'; put 'put ''IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKDA9PT10dC5sZW5ndGgpcmV0dXJuIE8uYWxsb2MoMCk7bGV0IGR0O2lmKHZvaWQgMD09PUhlKWZvcihIZT0wLGR0PTA7ZHQ8dHQubGVuZ3RoOysrZHQpSGUrPXR0W2R0XS5sZW5ndGg7''@;'; put 'put ''Y29uc3QgcXQ9Ty5hbGxvY1Vuc2FmZShIZSk7bGV0IFJ0PTA7Zm9yKGR0PTA7ZHQ8dHQubGVuZ3RoOysrZHQpe2xldCBQdD10dFtkdF07aWYoZG4oUHQsVWludDhBcnJheSkpUnQrUHQubGVuZ3RoPnF0Lmxlbmd0aD8oTy5pc0J1ZmZlcihQdCl8fChQdD1PLmZyb20oUHQpKSxQdC5jb3B5KHF0''@;'; put 'put ''LFJ0KSk6VWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwocXQsUHQsUnQpO2Vsc2V7aWYoIU8uaXNCdWZmZXIoUHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJsaXN0IiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtQdC5jb3B5KHF0LFJ0KX1SdCs9UHQubGVuZ3Ro''@;'; put 'put ''fXJldHVybiBxdH0sTy5ieXRlTGVuZ3RoPWllLE8ucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCxPLnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXtjb25zdCB0dD10aGlzLmxlbmd0aDtpZih0dCUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlw''@;'; put 'put ''bGUgb2YgMTYtYml0cyIpO2ZvcihsZXQgSGU9MDtIZTx0dDtIZSs9MiltZSh0aGlzLEhlLEhlKzEpO3JldHVybiB0aGlzfSxPLnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXtjb25zdCB0dD10aGlzLmxlbmd0aDtpZih0dCU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6''@;'; put 'put ''ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2ZvcihsZXQgSGU9MDtIZTx0dDtIZSs9NCltZSh0aGlzLEhlLEhlKzMpLG1lKHRoaXMsSGUrMSxIZSsyKTtyZXR1cm4gdGhpc30sTy5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7Y29uc3QgdHQ9dGhpcy5sZW5ndGg7aWYodHQl''@;'; put 'put ''OCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMiKTtmb3IobGV0IEhlPTA7SGU8dHQ7SGUrPTgpbWUodGhpcyxIZSxIZSs3KSxtZSh0aGlzLEhlKzEsSGUrNiksbWUodGhpcyxIZSsyLEhlKzUpLG1lKHRoaXMsSGUrMyxI''@;'; put 'put ''ZSs0KTtyZXR1cm4gdGhpc30sTy5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmc9Ty5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtjb25zdCB0dD10aGlzLmxlbmd0aDtyZXR1cm4gMD09PXR0PyIiOjA9PT1hcmd1bWVudHMubGVuZ3RoP0ModGhpcywwLHR0KTpsZS5hcHBseSh0aGlzLGFy''@;'; put 'put ''Z3VtZW50cyl9LE8ucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbih0dCl7aWYoIU8uaXNCdWZmZXIodHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PXR0fHwwPT09Ty5jb21wYXJlKHRoaXMsdHQpfSxPLnByb3RvdHlwZS5p''@;'; put 'put ''bnNwZWN0PWZ1bmN0aW9uKCl7bGV0IHR0PSIiO2NvbnN0IEhlPXEuSU5TUEVDVF9NQVhfQllURVM7cmV0dXJuIHR0PXRoaXMudG9TdHJpbmcoImhleCIsMCxIZSkucmVwbGFjZSgvKC57Mn0pL2csIiQxICIpLnRyaW0oKSx0aGlzLmxlbmd0aD5IZSYmKHR0Kz0iIC4uLiAiKSwiPEJ1ZmZlciAi''@;'; put 'put ''K3R0KyI+In0sQiYmKE8ucHJvdG90eXBlW0JdPU8ucHJvdG90eXBlLmluc3BlY3QpLE8ucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24odHQsSGUsZHQscXQsUnQpe2lmKGRuKHR0LFVpbnQ4QXJyYXkpJiYodHQ9Ty5mcm9tKHR0LHR0Lm9mZnNldCx0dC5ieXRlTGVuZ3RoKSksIU8uaXNCdWZm''@;'; put 'put ''ZXIodHQpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAidGFyZ2V0IiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5LiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIHR0KTtpZih2b2lkIDA9PT1IZSYmKEhlPTApLHZvaWQgMD09PWR0JiYoZHQ9dHQ/dHQu''@;'; put 'put ''bGVuZ3RoOjApLHZvaWQgMD09PXF0JiYocXQ9MCksdm9pZCAwPT09UnQmJihSdD10aGlzLmxlbmd0aCksSGU8MHx8ZHQ+dHQubGVuZ3RofHxxdDwwfHxSdD50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib3V0IG9mIHJhbmdlIGluZGV4Iik7aWYocXQ+PVJ0JiZIZT49ZHQpcmV0''@;'; put 'put ''dXJuIDA7aWYocXQ+PVJ0KXJldHVybi0xO2lmKEhlPj1kdClyZXR1cm4gMTtpZih0aGlzPT09dHQpcmV0dXJuIDA7bGV0IFB0PShSdD4+Pj0wKS0ocXQ+Pj49MCksYWk9KGR0Pj4+PTApLShIZT4+Pj0wKTtjb25zdCBRdD1NYXRoLm1pbihQdCxhaSksc249dGhpcy5zbGljZShxdCxSdCksUmk9''@;'; put 'put ''dHQuc2xpY2UoSGUsZHQpO2ZvcihsZXQgZm49MDtmbjxRdDsrK2ZuKWlmKHNuW2ZuXSE9PVJpW2ZuXSl7UHQ9c25bZm5dLGFpPVJpW2ZuXTticmVha31yZXR1cm4gUHQ8YWk/LTE6YWk8UHQ/MTowfSxPLnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbih0dCxIZSxkdCl7cmV0dXJuLTEhPT10''@;'; put 'put ''aGlzLmluZGV4T2YodHQsSGUsZHQpfSxPLnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKHR0LEhlLGR0KXtyZXR1cm4gX2UodGhpcyx0dCxIZSxkdCwhMCl9LE8ucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKHR0LEhlLGR0KXtyZXR1cm4gX2UodGhpcyx0dCxIZSxkdCwhMSl9LE8u''@;'; put 'put ''cHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHR0LEhlLGR0LHF0KXtpZih2b2lkIDA9PT1IZSlxdD0idXRmOCIsZHQ9dGhpcy5sZW5ndGgsSGU9MDtlbHNlIGlmKHZvaWQgMD09PWR0JiYic3RyaW5nIj09dHlwZW9mIEhlKXF0PUhlLGR0PXRoaXMubGVuZ3RoLEhlPTA7ZWxzZXtpZighaXNGaW5p''@;'; put 'put ''dGUoSGUpKXRocm93IG5ldyBFcnJvcigiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTtIZT4+Pj0wLGlzRmluaXRlKGR0KT8oZHQ+Pj49MCx2b2lkIDA9PT1xdCYmKHF0PSJ1dGY4IikpOihxdD1kdCxkdD12''@;'; put 'put ''b2lkIDApfWNvbnN0IFJ0PXRoaXMubGVuZ3RoLUhlO2lmKCh2b2lkIDA9PT1kdHx8ZHQ+UnQpJiYoZHQ9UnQpLHR0Lmxlbmd0aD4wJiYoZHQ8MHx8SGU8MCl8fEhlPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5k''@;'; put 'put ''cyIpO3F0fHwocXQ9InV0ZjgiKTtsZXQgUHQ9ITE7Zm9yKDs7KXN3aXRjaChxdCl7Y2FzZSJoZXgiOnJldHVybiBTZSh0aGlzLHR0LEhlLGR0KTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiB6ZSh0aGlzLHR0LEhlLGR0KTtjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5h''@;'; put 'put ''cnkiOnJldHVybiBWKHRoaXMsdHQsSGUsZHQpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gcCh0aGlzLHR0LEhlLGR0KTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIGIodGhpcyx0dCxIZSxkdCk7ZGVmYXVsdDppZihQdCl0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK3F0KTtxdD0oIiIrcXQpLnRvTG93ZXJDYXNlKCksUHQ9ITB9fSxPLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhp''@;'; put 'put ''cywwKX19O2NvbnN0IFQ9NDA5NjtmdW5jdGlvbiBqKCRlLHR0LEhlKXtsZXQgZHQ9IiI7SGU9TWF0aC5taW4oJGUubGVuZ3RoLEhlKTtmb3IobGV0IHF0PXR0O3F0PEhlOysrcXQpZHQrPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JiRlW3F0XSk7cmV0dXJuIGR0fWZ1bmN0aW9uIEUoJGUsdHQs''@;'; put 'put ''SGUpe2xldCBkdD0iIjtIZT1NYXRoLm1pbigkZS5sZW5ndGgsSGUpO2ZvcihsZXQgcXQ9dHQ7cXQ8SGU7KytxdClkdCs9U3RyaW5nLmZyb21DaGFyQ29kZSgkZVtxdF0pO3JldHVybiBkdH1mdW5jdGlvbiBtKCRlLHR0LEhlKXtjb25zdCBkdD0kZS5sZW5ndGg7KCF0dHx8dHQ8MCkmJih0dD0w''@;'; put 'put ''KSwoIUhlfHxIZTwwfHxIZT5kdCkmJihIZT1kdCk7bGV0IHF0PSIiO2ZvcihsZXQgUnQ9dHQ7UnQ8SGU7KytSdClxdCs9TXRbJGVbUnRdXTtyZXR1cm4gcXR9ZnVuY3Rpb24gQSgkZSx0dCxIZSl7Y29uc3QgZHQ9JGUuc2xpY2UodHQsSGUpO2xldCBxdD0iIjtmb3IobGV0IFJ0PTA7UnQ8ZHQu''@;'; put 'put ''bGVuZ3RoLTE7UnQrPTIpcXQrPVN0cmluZy5mcm9tQ2hhckNvZGUoZHRbUnRdKzI1NipkdFtSdCsxXSk7cmV0dXJuIHF0fWZ1bmN0aW9uIG9lKCRlLHR0LEhlKXtpZigkZSUxIT0wfHwkZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJvZmZzZXQgaXMgbm90IHVpbnQiKTtpZigkZSt0dD5IZSl0''@;'; put 'put ''aHJvdyBuZXcgUmFuZ2VFcnJvcigiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aCIpfWZ1bmN0aW9uIHRlKCRlLHR0LEhlLGR0LHF0LFJ0KXtpZighTy5pc0J1ZmZlcigkZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZmZlciIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZl''@;'; put 'put ''ciBpbnN0YW5jZScpO2lmKHR0PnF0fHx0dDxSdCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInZhbHVlIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYoSGUrZHQ+JGUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKX1mdW5jdGlvbiBzZSgkZSx0''@;'; put 'put ''dCxIZSxkdCxxdCl7RGUodHQsZHQscXQsJGUsSGUsNyk7bGV0IFJ0PU51bWJlcih0dCZCaWdJbnQoNDI5NDk2NzI5NSkpOyRlW0hlKytdPVJ0LFJ0Pj49OCwkZVtIZSsrXT1SdCxSdD4+PTgsJGVbSGUrK109UnQsUnQ+Pj04LCRlW0hlKytdPVJ0O2xldCBQdD1OdW1iZXIodHQ+PkJpZ0ludCgz''@;'; put 'put ''MikmQmlnSW50KDQyOTQ5NjcyOTUpKTtyZXR1cm4gJGVbSGUrK109UHQsUHQ+Pj04LCRlW0hlKytdPVB0LFB0Pj49OCwkZVtIZSsrXT1QdCxQdD4+PTgsJGVbSGUrK109UHQsSGV9ZnVuY3Rpb24gd2UoJGUsdHQsSGUsZHQscXQpe0RlKHR0LGR0LHF0LCRlLEhlLDcpO2xldCBSdD1OdW1iZXIo''@;'; put 'put ''dHQmQmlnSW50KDQyOTQ5NjcyOTUpKTskZVtIZSs3XT1SdCxSdD4+PTgsJGVbSGUrNl09UnQsUnQ+Pj04LCRlW0hlKzVdPVJ0LFJ0Pj49OCwkZVtIZSs0XT1SdDtsZXQgUHQ9TnVtYmVyKHR0Pj5CaWdJbnQoMzIpJkJpZ0ludCg0Mjk0OTY3Mjk1KSk7cmV0dXJuICRlW0hlKzNdPVB0LFB0Pj49''@;'; put 'put ''OCwkZVtIZSsyXT1QdCxQdD4+PTgsJGVbSGUrMV09UHQsUHQ+Pj04LCRlW0hlXT1QdCxIZSs4fWZ1bmN0aW9uIFVlKCRlLHR0LEhlLGR0LHF0LFJ0KXtpZihIZStkdD4kZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpO2lmKEhlPDApdGhyb3cgbmV3''@;'; put 'put ''IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIEplKCRlLHR0LEhlLGR0LHF0KXtyZXR1cm4gdHQ9K3R0LEhlPj4+PTAscXR8fFVlKCRlLDAsSGUsNCksZy53cml0ZSgkZSx0dCxIZSxkdCwyMyw0KSxIZSs0fWZ1bmN0aW9uIGF0KCRlLHR0LEhlLGR0LHF0KXtyZXR1''@;'; put 'put ''cm4gdHQ9K3R0LEhlPj4+PTAscXR8fFVlKCRlLDAsSGUsOCksZy53cml0ZSgkZSx0dCxIZSxkdCw1Miw4KSxIZSs4fU8ucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKHR0LEhlKXtjb25zdCBkdD10aGlzLmxlbmd0aDsodHQ9fn50dCk8MD8odHQrPWR0KTwwJiYodHQ9MCk6dHQ+ZHQmJih0dD1k''@;'; put 'put ''dCksKEhlPXZvaWQgMD09PUhlP2R0On5+SGUpPDA/KEhlKz1kdCk8MCYmKEhlPTApOkhlPmR0JiYoSGU9ZHQpLEhlPHR0JiYoSGU9dHQpO2NvbnN0IHF0PXRoaXMuc3ViYXJyYXkodHQsSGUpO3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2YocXQsTy5wcm90b3R5cGUpLHF0fSxPLnByb3Rv''@;'; put 'put ''dHlwZS5yZWFkVWludExFPU8ucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24odHQsSGUsZHQpe3R0Pj4+PTAsSGU+Pj49MCxkdHx8b2UodHQsSGUsdGhpcy5sZW5ndGgpO2xldCBxdD10aGlzW3R0XSxSdD0xLFB0PTA7Zm9yKDsrK1B0PEhlJiYoUnQqPTI1Nik7KXF0Kz10aGlzW3R0K1B0''@;'; put 'put ''XSpSdDtyZXR1cm4gcXR9LE8ucHJvdG90eXBlLnJlYWRVaW50QkU9Ty5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbih0dCxIZSxkdCl7dHQ+Pj49MCxIZT4+Pj0wLGR0fHxvZSh0dCxIZSx0aGlzLmxlbmd0aCk7bGV0IHF0PXRoaXNbdHQrLS1IZV0sUnQ9MTtmb3IoO0hlPjAmJihSdCo9''@;'; put 'put ''MjU2KTspcXQrPXRoaXNbdHQrLS1IZV0qUnQ7cmV0dXJuIHF0fSxPLnByb3RvdHlwZS5yZWFkVWludDg9Ty5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKHR0LEhlKXtyZXR1cm4gdHQ+Pj49MCxIZXx8b2UodHQsMSx0aGlzLmxlbmd0aCksdGhpc1t0dF19LE8ucHJvdG90eXBlLnJlYWRV''@;'; put 'put ''aW50MTZMRT1PLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24odHQsSGUpe3JldHVybiB0dD4+Pj0wLEhlfHxvZSh0dCwyLHRoaXMubGVuZ3RoKSx0aGlzW3R0XXx0aGlzW3R0KzFdPDw4fSxPLnByb3RvdHlwZS5yZWFkVWludDE2QkU9Ty5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1''@;'; put 'put ''bmN0aW9uKHR0LEhlKXtyZXR1cm4gdHQ+Pj49MCxIZXx8b2UodHQsMix0aGlzLmxlbmd0aCksdGhpc1t0dF08PDh8dGhpc1t0dCsxXX0sTy5wcm90b3R5cGUucmVhZFVpbnQzMkxFPU8ucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbih0dCxIZSl7cmV0dXJuIHR0Pj4+PTAsSGV8fG9l''@;'; put 'put ''KHR0LDQsdGhpcy5sZW5ndGgpLCh0aGlzW3R0XXx0aGlzW3R0KzFdPDw4fHRoaXNbdHQrMl08PDE2KSsxNjc3NzIxNip0aGlzW3R0KzNdfSxPLnByb3RvdHlwZS5yZWFkVWludDMyQkU9Ty5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKHR0LEhlKXtyZXR1cm4gdHQ+Pj49MCxIZXx8''@;'; put 'put ''b2UodHQsNCx0aGlzLmxlbmd0aCksMTY3NzcyMTYqdGhpc1t0dF0rKHRoaXNbdHQrMV08PDE2fHRoaXNbdHQrMl08PDh8dGhpc1t0dCszXSl9LE8ucHJvdG90eXBlLnJlYWRCaWdVSW50NjRMRT1EdChmdW5jdGlvbih0dCl7RmUodHQ+Pj49MCwib2Zmc2V0Iik7Y29uc3QgSGU9dGhpc1t0dF0s''@;'; put 'put ''ZHQ9dGhpc1t0dCs3XTsodm9pZCAwPT09SGV8fHZvaWQgMD09PWR0KSYmUmUodHQsdGhpcy5sZW5ndGgtOCk7Y29uc3QgcXQ9SGUrMjU2KnRoaXNbKyt0dF0rNjU1MzYqdGhpc1srK3R0XSt0aGlzWysrdHRdKjIqKjI0LFJ0PXRoaXNbKyt0dF0rMjU2KnRoaXNbKyt0dF0rNjU1MzYqdGhpc1sr''@;'; put 'put ''K3R0XStkdCoyKioyNDtyZXR1cm4gQmlnSW50KHF0KSsoQmlnSW50KFJ0KTw8QmlnSW50KDMyKSl9KSxPLnByb3RvdHlwZS5yZWFkQmlnVUludDY0QkU9RHQoZnVuY3Rpb24odHQpe0ZlKHR0Pj4+PTAsIm9mZnNldCIpO2NvbnN0IEhlPXRoaXNbdHRdLGR0PXRoaXNbdHQrN107KHZvaWQgMD09''@;'; put 'put ''PUhlfHx2b2lkIDA9PT1kdCkmJlJlKHR0LHRoaXMubGVuZ3RoLTgpO2NvbnN0IHF0PUhlKjIqKjI0KzY1NTM2KnRoaXNbKyt0dF0rMjU2KnRoaXNbKyt0dF0rdGhpc1srK3R0XSxSdD10aGlzWysrdHRdKjIqKjI0KzY1NTM2KnRoaXNbKyt0dF0rMjU2KnRoaXNbKyt0dF0rZHQ7cmV0dXJuKEJp''@;'; put 'put ''Z0ludChxdCk8PEJpZ0ludCgzMikpK0JpZ0ludChSdCl9KSxPLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24odHQsSGUsZHQpe3R0Pj4+PTAsSGU+Pj49MCxkdHx8b2UodHQsSGUsdGhpcy5sZW5ndGgpO2xldCBxdD10aGlzW3R0XSxSdD0xLFB0PTA7Zm9yKDsrK1B0PEhlJiYoUnQqPTI1''@;'; put 'put ''Nik7KXF0Kz10aGlzW3R0K1B0XSpSdDtyZXR1cm4gUnQqPTEyOCxxdD49UnQmJihxdC09TWF0aC5wb3coMiw4KkhlKSkscXR9LE8ucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbih0dCxIZSxkdCl7dHQ+Pj49MCxIZT4+Pj0wLGR0fHxvZSh0dCxIZSx0aGlzLmxlbmd0aCk7bGV0IHF0PUhl''@;'; put 'put ''LFJ0PTEsUHQ9dGhpc1t0dCstLXF0XTtmb3IoO3F0PjAmJihSdCo9MjU2KTspUHQrPXRoaXNbdHQrLS1xdF0qUnQ7cmV0dXJuIFJ0Kj0xMjgsUHQ+PVJ0JiYoUHQtPU1hdGgucG93KDIsOCpIZSkpLFB0fSxPLnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbih0dCxIZSl7cmV0dXJuIHR0Pj4+''@;'; put 'put ''PTAsSGV8fG9lKHR0LDEsdGhpcy5sZW5ndGgpLDEyOCZ0aGlzW3R0XT8tMSooMjU1LXRoaXNbdHRdKzEpOnRoaXNbdHRdfSxPLnByb3RvdHlwZS5yZWFkSW50MTZMRT1mdW5jdGlvbih0dCxIZSl7dHQ+Pj49MCxIZXx8b2UodHQsMix0aGlzLmxlbmd0aCk7Y29uc3QgZHQ9dGhpc1t0dF18dGhp''@;'; put 'put ''c1t0dCsxXTw8ODtyZXR1cm4gMzI3NjgmZHQ/NDI5NDkwMTc2MHxkdDpkdH0sTy5wcm90b3R5cGUucmVhZEludDE2QkU9ZnVuY3Rpb24odHQsSGUpe3R0Pj4+PTAsSGV8fG9lKHR0LDIsdGhpcy5sZW5ndGgpO2NvbnN0IGR0PXRoaXNbdHQrMV18dGhpc1t0dF08PDg7cmV0dXJuIDMyNzY4JmR0''@;'; put 'put ''PzQyOTQ5MDE3NjB8ZHQ6ZHR9LE8ucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uKHR0LEhlKXtyZXR1cm4gdHQ+Pj49MCxIZXx8b2UodHQsNCx0aGlzLmxlbmd0aCksdGhpc1t0dF18dGhpc1t0dCsxXTw8OHx0aGlzW3R0KzJdPDwxNnx0aGlzW3R0KzNdPDwyNH0sTy5wcm90b3R5cGUu''@;'; put 'put ''cmVhZEludDMyQkU9ZnVuY3Rpb24odHQsSGUpe3JldHVybiB0dD4+Pj0wLEhlfHxvZSh0dCw0LHRoaXMubGVuZ3RoKSx0aGlzW3R0XTw8MjR8dGhpc1t0dCsxXTw8MTZ8dGhpc1t0dCsyXTw8OHx0aGlzW3R0KzNdfSxPLnByb3RvdHlwZS5yZWFkQmlnSW50NjRMRT1EdChmdW5jdGlvbih0dCl7''@;'; put 'put ''RmUodHQ+Pj49MCwib2Zmc2V0Iik7Y29uc3QgSGU9dGhpc1t0dF0sZHQ9dGhpc1t0dCs3XTtyZXR1cm4odm9pZCAwPT09SGV8fHZvaWQgMD09PWR0KSYmUmUodHQsdGhpcy5sZW5ndGgtOCksKEJpZ0ludCh0aGlzW3R0KzRdKzI1Nip0aGlzW3R0KzVdKzY1NTM2KnRoaXNbdHQrNl0rKGR0PDwy''@;'; put 'put ''NCkpPDxCaWdJbnQoMzIpKStCaWdJbnQoSGUrMjU2KnRoaXNbKyt0dF0rNjU1MzYqdGhpc1srK3R0XSsxNjc3NzIxNip0aGlzWysrdHRdKX0pLE8ucHJvdG90eXBlLnJlYWRCaWdJbnQ2NEJFPUR0KGZ1bmN0aW9uKHR0KXtGZSh0dD4+Pj0wLCJvZmZzZXQiKTtjb25zdCBIZT10aGlzW3R0XSxk''@;'; put 'put ''dD10aGlzW3R0KzddOyh2b2lkIDA9PT1IZXx8dm9pZCAwPT09ZHQpJiZSZSh0dCx0aGlzLmxlbmd0aC04KTtjb25zdCBxdD0oSGU8PDI0KSs2NTUzNip0aGlzWysrdHRdKzI1Nip0aGlzWysrdHRdK3RoaXNbKyt0dF07cmV0dXJuKEJpZ0ludChxdCk8PEJpZ0ludCgzMikpK0JpZ0ludCgxNjc3''@;'; put 'put ''NzIxNip0aGlzWysrdHRdKzY1NTM2KnRoaXNbKyt0dF0rMjU2KnRoaXNbKyt0dF0rZHQpfSksTy5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24odHQsSGUpe3JldHVybiB0dD4+Pj0wLEhlfHxvZSh0dCw0LHRoaXMubGVuZ3RoKSxnLnJlYWQodGhpcyx0dCwhMCwyMyw0KX0sTy5wcm90''@;'; put 'put ''b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24odHQsSGUpe3JldHVybiB0dD4+Pj0wLEhlfHxvZSh0dCw0LHRoaXMubGVuZ3RoKSxnLnJlYWQodGhpcyx0dCwhMSwyMyw0KX0sTy5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKHR0LEhlKXtyZXR1cm4gdHQ+Pj49MCxIZXx8b2UodHQs''@;'; put 'put ''OCx0aGlzLmxlbmd0aCksZy5yZWFkKHRoaXMsdHQsITAsNTIsOCl9LE8ucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbih0dCxIZSl7cmV0dXJuIHR0Pj4+PTAsSGV8fG9lKHR0LDgsdGhpcy5sZW5ndGgpLGcucmVhZCh0aGlzLHR0LCExLDUyLDgpfSxPLnByb3RvdHlwZS53cml0ZVVp''@;'; put 'put ''bnRMRT1PLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbih0dCxIZSxkdCxxdCl7dHQ9K3R0LEhlPj4+PTAsZHQ+Pj49MCxxdHx8dGUodGhpcyx0dCxIZSxkdCxNYXRoLnBvdygyLDgqZHQpLTEsMCk7bGV0IFJ0PTEsUHQ9MDtmb3IodGhpc1tIZV09MjU1JnR0OysrUHQ8ZHQmJihSdCo9''@;'; put 'put ''MjU2KTspdGhpc1tIZStQdF09dHQvUnQmMjU1O3JldHVybiBIZStkdH0sTy5wcm90b3R5cGUud3JpdGVVaW50QkU9Ty5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24odHQsSGUsZHQscXQpe3R0PSt0dCxIZT4+Pj0wLGR0Pj4+PTAscXR8fHRlKHRoaXMsdHQsSGUsZHQsTWF0aC5wb3co''@;'; put 'put ''Miw4KmR0KS0xLDApO2xldCBSdD1kdC0xLFB0PTE7Zm9yKHRoaXNbSGUrUnRdPTI1NSZ0dDstLVJ0Pj0wJiYoUHQqPTI1Nik7KXRoaXNbSGUrUnRdPXR0L1B0JjI1NTtyZXR1cm4gSGUrZHR9LE8ucHJvdG90eXBlLndyaXRlVWludDg9Ty5wcm90b3R5cGUud3JpdGVVSW50OD1mdW5jdGlvbih0''@;'; put 'put ''dCxIZSxkdCl7cmV0dXJuIHR0PSt0dCxIZT4+Pj0wLGR0fHx0ZSh0aGlzLHR0LEhlLDEsMjU1LDApLHRoaXNbSGVdPTI1NSZ0dCxIZSsxfSxPLnByb3RvdHlwZS53cml0ZVVpbnQxNkxFPU8ucHJvdG90eXBlLndyaXRlVUludDE2TEU9ZnVuY3Rpb24odHQsSGUsZHQpe3JldHVybiB0dD0rdHQs''@;'; put 'put ''SGU+Pj49MCxkdHx8dGUodGhpcyx0dCxIZSwyLDY1NTM1LDApLHRoaXNbSGVdPTI1NSZ0dCx0aGlzW0hlKzFdPXR0Pj4+OCxIZSsyfSxPLnByb3RvdHlwZS53cml0ZVVpbnQxNkJFPU8ucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24odHQsSGUsZHQpe3JldHVybiB0dD0rdHQsSGU+''@;'; put 'put ''Pj49MCxkdHx8dGUodGhpcyx0dCxIZSwyLDY1NTM1LDApLHRoaXNbSGVdPXR0Pj4+OCx0aGlzW0hlKzFdPTI1NSZ0dCxIZSsyfSxPLnByb3RvdHlwZS53cml0ZVVpbnQzMkxFPU8ucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24odHQsSGUsZHQpe3JldHVybiB0dD0rdHQsSGU+Pj49''@;'; put 'put ''MCxkdHx8dGUodGhpcyx0dCxIZSw0LDQyOTQ5NjcyOTUsMCksdGhpc1tIZSszXT10dD4+PjI0LHRoaXNbSGUrMl09dHQ+Pj4xNix0aGlzW0hlKzFdPXR0Pj4+OCx0aGlzW0hlXT0yNTUmdHQsSGUrNH0sTy5wcm90b3R5cGUud3JpdGVVaW50MzJCRT1PLnByb3RvdHlwZS53cml0ZVVJbnQzMkJF''@;'; put 'put ''PWZ1bmN0aW9uKHR0LEhlLGR0KXtyZXR1cm4gdHQ9K3R0LEhlPj4+PTAsZHR8fHRlKHRoaXMsdHQsSGUsNCw0Mjk0OTY3Mjk1LDApLHRoaXNbSGVdPXR0Pj4+MjQsdGhpc1tIZSsxXT10dD4+PjE2LHRoaXNbSGUrMl09dHQ+Pj44LHRoaXNbSGUrM109MjU1JnR0LEhlKzR9LE8ucHJvdG90eXBl''@;'; put 'put ''LndyaXRlQmlnVUludDY0TEU9RHQoZnVuY3Rpb24odHQsSGU9MCl7cmV0dXJuIHNlKHRoaXMsdHQsSGUsQmlnSW50KDApLEJpZ0ludCgiMHhmZmZmZmZmZmZmZmZmZmZmIikpfSksTy5wcm90b3R5cGUud3JpdGVCaWdVSW50NjRCRT1EdChmdW5jdGlvbih0dCxIZT0wKXtyZXR1cm4gd2UodGhp''@;'; put 'put ''cyx0dCxIZSxCaWdJbnQoMCksQmlnSW50KCIweGZmZmZmZmZmZmZmZmZmZmYiKSl9KSxPLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKHR0LEhlLGR0LHF0KXtpZih0dD0rdHQsSGU+Pj49MCwhcXQpe2NvbnN0IFF0PU1hdGgucG93KDIsOCpkdC0xKTt0ZSh0aGlzLHR0LEhlLGR0LFF0''@;'; put 'put ''LTEsLVF0KX1sZXQgUnQ9MCxQdD0xLGFpPTA7Zm9yKHRoaXNbSGVdPTI1NSZ0dDsrK1J0PGR0JiYoUHQqPTI1Nik7KXR0PDAmJjA9PT1haSYmMCE9PXRoaXNbSGUrUnQtMV0mJihhaT0xKSx0aGlzW0hlK1J0XT0odHQvUHR8MCktYWkmMjU1O3JldHVybiBIZStkdH0sTy5wcm90b3R5cGUud3Jp''@;'; put 'put ''dGVJbnRCRT1mdW5jdGlvbih0dCxIZSxkdCxxdCl7aWYodHQ9K3R0LEhlPj4+PTAsIXF0KXtjb25zdCBRdD1NYXRoLnBvdygyLDgqZHQtMSk7dGUodGhpcyx0dCxIZSxkdCxRdC0xLC1RdCl9bGV0IFJ0PWR0LTEsUHQ9MSxhaT0wO2Zvcih0aGlzW0hlK1J0XT0yNTUmdHQ7LS1SdD49MCYmKFB0''@;'; put 'put ''Kj0yNTYpOyl0dDwwJiYwPT09YWkmJjAhPT10aGlzW0hlK1J0KzFdJiYoYWk9MSksdGhpc1tIZStSdF09KHR0L1B0fDApLWFpJjI1NTtyZXR1cm4gSGUrZHR9LE8ucHJvdG90eXBlLndyaXRlSW50OD1mdW5jdGlvbih0dCxIZSxkdCl7cmV0dXJuIHR0PSt0dCxIZT4+Pj0wLGR0fHx0ZSh0aGlz''@;'; put 'put ''LHR0LEhlLDEsMTI3LC0xMjgpLHR0PDAmJih0dD0yNTUrdHQrMSksdGhpc1tIZV09MjU1JnR0LEhlKzF9LE8ucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbih0dCxIZSxkdCl7cmV0dXJuIHR0PSt0dCxIZT4+Pj0wLGR0fHx0ZSh0aGlzLHR0LEhlLDIsMzI3NjcsLTMyNzY4KSx0aGlz''@;'; put 'put ''W0hlXT0yNTUmdHQsdGhpc1tIZSsxXT10dD4+PjgsSGUrMn0sTy5wcm90b3R5cGUud3JpdGVJbnQxNkJFPWZ1bmN0aW9uKHR0LEhlLGR0KXtyZXR1cm4gdHQ9K3R0LEhlPj4+PTAsZHR8fHRlKHRoaXMsdHQsSGUsMiwzMjc2NywtMzI3NjgpLHRoaXNbSGVdPXR0Pj4+OCx0aGlzW0hlKzFdPTI1''@;'; put 'put ''NSZ0dCxIZSsyfSxPLnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24odHQsSGUsZHQpe3JldHVybiB0dD0rdHQsSGU+Pj49MCxkdHx8dGUodGhpcyx0dCxIZSw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHRoaXNbSGVdPTI1NSZ0dCx0aGlzW0hlKzFdPXR0Pj4+OCx0aGlzW0hlKzJd''@;'; put 'put ''PXR0Pj4+MTYsdGhpc1tIZSszXT10dD4+PjI0LEhlKzR9LE8ucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbih0dCxIZSxkdCl7cmV0dXJuIHR0PSt0dCxIZT4+Pj0wLGR0fHx0ZSh0aGlzLHR0LEhlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdHQ8MCYmKHR0PTQyOTQ5NjcyOTUr''@;'; put 'put ''dHQrMSksdGhpc1tIZV09dHQ+Pj4yNCx0aGlzW0hlKzFdPXR0Pj4+MTYsdGhpc1tIZSsyXT10dD4+PjgsdGhpc1tIZSszXT0yNTUmdHQsSGUrNH0sTy5wcm90b3R5cGUud3JpdGVCaWdJbnQ2NExFPUR0KGZ1bmN0aW9uKHR0LEhlPTApe3JldHVybiBzZSh0aGlzLHR0LEhlLC1CaWdJbnQoIjB4''@;'; put 'put ''ODAwMDAwMDAwMDAwMDAwMCIpLEJpZ0ludCgiMHg3ZmZmZmZmZmZmZmZmZmZmIikpfSksTy5wcm90b3R5cGUud3JpdGVCaWdJbnQ2NEJFPUR0KGZ1bmN0aW9uKHR0LEhlPTApe3JldHVybiB3ZSh0aGlzLHR0LEhlLC1CaWdJbnQoIjB4ODAwMDAwMDAwMDAwMDAwMCIpLEJpZ0ludCgiMHg3ZmZm''@;'; put 'put ''ZmZmZmZmZmZmZmZmIikpfSksTy5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKHR0LEhlLGR0KXtyZXR1cm4gSmUodGhpcyx0dCxIZSwhMCxkdCl9LE8ucHJvdG90eXBlLndyaXRlRmxvYXRCRT1mdW5jdGlvbih0dCxIZSxkdCl7cmV0dXJuIEplKHRoaXMsdHQsSGUsITEsZHQpfSxP''@;'; put 'put ''LnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKHR0LEhlLGR0KXtyZXR1cm4gYXQodGhpcyx0dCxIZSwhMCxkdCl9LE8ucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24odHQsSGUsZHQpe3JldHVybiBhdCh0aGlzLHR0LEhlLCExLGR0KX0sTy5wcm90b3R5cGUuY29weT1m''@;'; put 'put ''dW5jdGlvbih0dCxIZSxkdCxxdCl7aWYoIU8uaXNCdWZmZXIodHQpKXRocm93IG5ldyBUeXBlRXJyb3IoImFyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlciIpO2lmKGR0fHwoZHQ9MCksIXF0JiYwIT09cXQmJihxdD10aGlzLmxlbmd0aCksSGU+PXR0Lmxlbmd0aCYmKEhlPXR0Lmxlbmd0aCks''@;'; put 'put ''SGV8fChIZT0wKSxxdD4wJiZxdDxkdCYmKHF0PWR0KSxxdD09PWR0fHwwPT09dHQubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYoSGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKGR0PDB8fGR0Pj10aGlzLmxlbmd0aCl0''@;'; put 'put ''aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYocXQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtxdD50aGlzLmxlbmd0aCYmKHF0PXRoaXMubGVuZ3RoKSx0dC5sZW5ndGgtSGU8cXQtZHQmJihxdD10dC5sZW5ndGgt''@;'; put 'put ''SGUrZHQpO2NvbnN0IFJ0PXF0LWR0O3JldHVybiB0aGlzPT09dHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluP3RoaXMuY29weVdpdGhpbihIZSxkdCxxdCk6VWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwodHQsdGhpcy5zdWJhcnJheShk''@;'; put 'put ''dCxxdCksSGUpLFJ0fSxPLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKHR0LEhlLGR0LHF0KXtpZigic3RyaW5nIj09dHlwZW9mIHR0KXtpZigic3RyaW5nIj09dHlwZW9mIEhlPyhxdD1IZSxIZT0wLGR0PXRoaXMubGVuZ3RoKToic3RyaW5nIj09dHlwZW9mIGR0JiYocXQ9ZHQsZHQ9dGhpcy5s''@;'; put 'put ''ZW5ndGgpLHZvaWQgMCE9PXF0JiYic3RyaW5nIiE9dHlwZW9mIHF0KXRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5nIj09dHlwZW9mIHF0JiYhTy5pc0VuY29kaW5nKHF0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29k''@;'; put 'put ''aW5nOiAiK3F0KTtpZigxPT09dHQubGVuZ3RoKXtjb25zdCBQdD10dC5jaGFyQ29kZUF0KDApOygidXRmOCI9PT1xdCYmUHQ8MTI4fHwibGF0aW4xIj09PXF0KSYmKHR0PVB0KX19ZWxzZSJudW1iZXIiPT10eXBlb2YgdHQ/dHQmPTI1NToiYm9vbGVhbiI9PXR5cGVvZiB0dCYmKHR0PU51bWJl''@;'; put 'put ''cih0dCkpO2lmKEhlPDB8fHRoaXMubGVuZ3RoPEhlfHx0aGlzLmxlbmd0aDxkdCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiT3V0IG9mIHJhbmdlIGluZGV4Iik7aWYoZHQ8PUhlKXJldHVybiB0aGlzO2xldCBSdDtpZihIZT4+Pj0wLGR0PXZvaWQgMD09PWR0P3RoaXMubGVuZ3RoOmR0Pj4+MCx0''@;'; put 'put ''dHx8KHR0PTApLCJudW1iZXIiPT10eXBlb2YgdHQpZm9yKFJ0PUhlO1J0PGR0OysrUnQpdGhpc1tSdF09dHQ7ZWxzZXtjb25zdCBQdD1PLmlzQnVmZmVyKHR0KT90dDpPLmZyb20odHQscXQpLGFpPVB0Lmxlbmd0aDtpZigwPT09YWkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHZhbHVlICIn''@;'; put 'put ''K3R0KyciIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50ICJ2YWx1ZSInKTtmb3IoUnQ9MDtSdDxkdC1IZTsrK1J0KXRoaXNbUnQrSGVdPVB0W1J0JWFpXX1yZXR1cm4gdGhpc307Y29uc3QgTWU9e307ZnVuY3Rpb24gdmUoJGUsdHQsSGUpe01lWyRlXT1jbGFzcyBleHRlbmRzIEhle2NvbnN0cnVj''@;'; put 'put ''dG9yKCl7c3VwZXIoKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywibWVzc2FnZSIse3ZhbHVlOnR0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9KSx0aGlzLm5hbWU9YCR7dGhpcy5uYW1lfSBbJHskZX1dYCxkZWxldGUgdGhpcy5uYW1lfWdl''@;'; put 'put ''dCBjb2RlKCl7cmV0dXJuICRlfXNldCBjb2RlKHF0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywiY29kZSIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLHZhbHVlOnF0LHdyaXRhYmxlOiEwfSl9dG9TdHJpbmcoKXtyZXR1cm5gJHt0aGlzLm5hbWV9IFskeyRlfV06ICR7dGhp''@;'; put 'put ''cy5tZXNzYWdlfWB9fX1mdW5jdGlvbiBYZSgkZSl7bGV0IHR0PSIiLEhlPSRlLmxlbmd0aDtjb25zdCBkdD0iLSI9PT0kZVswXT8xOjA7Zm9yKDtIZT49ZHQrNDtIZS09Myl0dD1gXyR7JGUuc2xpY2UoSGUtMyxIZSl9JHt0dH1gO3JldHVybmAkeyRlLnNsaWNlKDAsSGUpfSR7dHR9YH1mdW5j''@;'; put 'put ''dGlvbiBEZSgkZSx0dCxIZSxkdCxxdCxSdCl7aWYoJGU+SGV8fCRlPHR0KXtjb25zdCBQdD0iYmlnaW50Ij09dHlwZW9mIHR0PyJuIjoiIjtsZXQgYWk7dGhyb3cgYWk9UnQ+Mz8wPT09dHR8fHR0PT09QmlnSW50KDApP2A+PSAwJHtQdH0gYW5kIDwgMiR7UHR9ICoqICR7OCooUnQrMSl9JHtQ''@;'; put 'put ''dH1gOmA+PSAtKDIke1B0fSAqKiAkezgqKFJ0KzEpLTF9JHtQdH0pIGFuZCA8IDIgKiogJHs4KihSdCsxKS0xfSR7UHR9YDpgPj0gJHt0dH0ke1B0fSBhbmQgPD0gJHtIZX0ke1B0fWAsbmV3IE1lLkVSUl9PVVRfT0ZfUkFOR0UoInZhbHVlIixhaSwkZSl9IWZ1bmN0aW9uIGplKCRlLHR0LEhl''@;'; put 'put ''KXtGZSh0dCwib2Zmc2V0IiksKHZvaWQgMD09PSRlW3R0XXx8dm9pZCAwPT09JGVbdHQrSGVdKSYmUmUodHQsJGUubGVuZ3RoLShIZSsxKSl9KGR0LHF0LFJ0KX1mdW5jdGlvbiBGZSgkZSx0dCl7aWYoIm51bWJlciIhPXR5cGVvZiAkZSl0aHJvdyBuZXcgTWUuRVJSX0lOVkFMSURfQVJHX1RZ''@;'; put 'put ''UEUodHQsIm51bWJlciIsJGUpfWZ1bmN0aW9uIFJlKCRlLHR0LEhlKXt0aHJvdyBNYXRoLmZsb29yKCRlKSE9PSRlPyhGZSgkZSxIZSksbmV3IE1lLkVSUl9PVVRfT0ZfUkFOR0UoSGV8fCJvZmZzZXQiLCJhbiBpbnRlZ2VyIiwkZSkpOnR0PDA/bmV3IE1lLkVSUl9CVUZGRVJfT1VUX09GX0JP''@;'; put 'put ''VU5EUzpuZXcgTWUuRVJSX09VVF9PRl9SQU5HRShIZXx8Im9mZnNldCIsYD49ICR7SGU/MTowfSBhbmQgPD0gJHt0dH1gLCRlKX12ZSgiRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTIixmdW5jdGlvbigkZSl7cmV0dXJuICRlP2AkeyRlfSBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHNgOiJB''@;'; put 'put ''dHRlbXB0IHRvIGFjY2VzcyBtZW1vcnkgb3V0c2lkZSBidWZmZXIgYm91bmRzIn0sUmFuZ2VFcnJvciksdmUoIkVSUl9JTlZBTElEX0FSR19UWVBFIixmdW5jdGlvbigkZSx0dCl7cmV0dXJuYFRoZSAiJHskZX0iIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5''@;'; put 'put ''cGUgJHt0eXBlb2YgdHR9YH0sVHlwZUVycm9yKSx2ZSgiRVJSX09VVF9PRl9SQU5HRSIsZnVuY3Rpb24oJGUsdHQsSGUpe2xldCBkdD1gVGhlIHZhbHVlIG9mICIkeyRlfSIgaXMgb3V0IG9mIHJhbmdlLmAscXQ9SGU7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoSGUpJiZNYXRoLmFicyhIZSk+''@;'; put 'put ''NDI5NDk2NzI5Nj9xdD1YZShTdHJpbmcoSGUpKToiYmlnaW50Ij09dHlwZW9mIEhlJiYocXQ9U3RyaW5nKEhlKSwoSGU+QmlnSW50KDIpKipCaWdJbnQoMzIpfHxIZTwtKEJpZ0ludCgyKSoqQmlnSW50KDMyKSkpJiYocXQ9WGUocXQpKSxxdCs9Im4iKSxkdCs9YCBJdCBtdXN0IGJlICR7dHR9''@;'; put 'put ''LiBSZWNlaXZlZCAke3F0fWAsZHR9LFJhbmdlRXJyb3IpO2NvbnN0IEllPS9bXisvMC05QS1aYS16LV9dL2c7ZnVuY3Rpb24ga2UoJGUsdHQpe2xldCBIZTt0dD10dHx8MS8wO2NvbnN0IGR0PSRlLmxlbmd0aDtsZXQgcXQ9bnVsbDtjb25zdCBSdD1bXTtmb3IobGV0IFB0PTA7UHQ8ZHQ7KytQ''@;'; put 'put ''dCl7aWYoSGU9JGUuY2hhckNvZGVBdChQdCksSGU+NTUyOTUmJkhlPDU3MzQ0KXtpZighcXQpe2lmKEhlPjU2MzE5KXsodHQtPTMpPi0xJiZSdC5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pZihQdCsxPT09ZHQpeyh0dC09Myk+LTEmJlJ0LnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVl''@;'; put 'put ''fXF0PUhlO2NvbnRpbnVlfWlmKEhlPDU2MzIwKXsodHQtPTMpPi0xJiZSdC5wdXNoKDIzOSwxOTEsMTg5KSxxdD1IZTtjb250aW51ZX1IZT02NTUzNisocXQtNTUyOTY8PDEwfEhlLTU2MzIwKX1lbHNlIHF0JiYodHQtPTMpPi0xJiZSdC5wdXNoKDIzOSwxOTEsMTg5KTtpZihxdD1udWxsLEhl''@;'; put 'put ''PDEyOCl7aWYoKHR0LT0xKTwwKWJyZWFrO1J0LnB1c2goSGUpfWVsc2UgaWYoSGU8MjA0OCl7aWYoKHR0LT0yKTwwKWJyZWFrO1J0LnB1c2goSGU+PjZ8MTkyLDYzJkhlfDEyOCl9ZWxzZSBpZihIZTw2NTUzNil7aWYoKHR0LT0zKTwwKWJyZWFrO1J0LnB1c2goSGU+PjEyfDIyNCxIZT4+NiY2''@;'; put 'put ''M3wxMjgsNjMmSGV8MTI4KX1lbHNle2lmKCEoSGU8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIGNvZGUgcG9pbnQiKTtpZigodHQtPTQpPDApYnJlYWs7UnQucHVzaChIZT4+MTh8MjQwLEhlPj4xMiY2M3wxMjgsSGU+PjYmNjN8MTI4LDYzJkhlfDEyOCl9fXJldHVybiBSdH1m''@;'; put 'put ''dW5jdGlvbiBydCgkZSl7cmV0dXJuIHkudG9CeXRlQXJyYXkoZnVuY3Rpb24gVmUoJGUpe2lmKCgkZT0oJGU9JGUuc3BsaXQoIj0iKVswXSkudHJpbSgpLnJlcGxhY2UoSWUsIiIpKS5sZW5ndGg8MilyZXR1cm4iIjtmb3IoOyRlLmxlbmd0aCU0IT0wOykkZSs9Ij0iO3JldHVybiAkZX0oJGUp''@;'; put 'put ''KX1mdW5jdGlvbiBRZSgkZSx0dCxIZSxkdCl7bGV0IHF0O2ZvcihxdD0wO3F0PGR0JiYhKHF0K0hlPj10dC5sZW5ndGh8fHF0Pj0kZS5sZW5ndGgpOysrcXQpdHRbcXQrSGVdPSRlW3F0XTtyZXR1cm4gcXR9ZnVuY3Rpb24gZG4oJGUsdHQpe3JldHVybiAkZSBpbnN0YW5jZW9mIHR0fHxudWxs''@;'; put 'put ''IT0kZSYmbnVsbCE9JGUuY29uc3RydWN0b3ImJm51bGwhPSRlLmNvbnN0cnVjdG9yLm5hbWUmJiRlLmNvbnN0cnVjdG9yLm5hbWU9PT10dC5uYW1lfWZ1bmN0aW9uIHl0KCRlKXtyZXR1cm4gJGUhPSRlfWNvbnN0IE10PWZ1bmN0aW9uKCl7Y29uc3QgJGU9IjAxMjM0NTY3ODlhYmNkZWYiLHR0''@;'; put 'put ''PW5ldyBBcnJheSgyNTYpO2ZvcihsZXQgSGU9MDtIZTwxNjsrK0hlKXtjb25zdCBkdD0xNipIZTtmb3IobGV0IHF0PTA7cXQ8MTY7KytxdCl0dFtkdCtxdF09JGVbSGVdKyRlW3F0XX1yZXR1cm4gdHR9KCk7ZnVuY3Rpb24gRHQoJGUpe3JldHVybiB0eXBlb2YgQmlnSW50PiJ1Ij9pdDokZX1m''@;'; put 'put ''dW5jdGlvbiBpdCgpe3Rocm93IG5ldyBFcnJvcigiQmlnSW50IG5vdCBzdXBwb3J0ZWQiKX19LDUxMTY6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg4NjEyKSx5PV8oMTc2OCksZz1fKDg5MjgpLEI9Xyg5NzcwKTt1ZS5leHBvcnRzPUJ8fEkuY2FsbChnLHkpfSwzMTkyOih1ZSxx''@;'; put 'put ''LF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oODYxMikseT1fKDE3NjgpLGc9Xyg1MTE2KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIGcoSSx5LGFyZ3VtZW50cyl9fSwxNzY4OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9RnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5fSw4OTI4''@;'; put 'put ''OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGx9LDMxOToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDg2MTIpLHk9Xyg0NDUzKSxnPV8oODkyOCksQj1fKDUxMTYpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oUCl7aWYoUC5sZW5ndGg8MXx8''@;'; put 'put ''ImZ1bmN0aW9uIiE9dHlwZW9mIFBbMF0pdGhyb3cgbmV3IHkoImEgZnVuY3Rpb24gaXMgcmVxdWlyZWQiKTtyZXR1cm4gQihJLGcsUCl9fSw5NzcwOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9dHlwZW9mIFJlZmxlY3Q8InUiJiZSZWZsZWN0JiZSZWZsZWN0LmFwcGx5fSwxOTI0Oih1''@;'; put 'put ''ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMjEwKSx5PV8oNTU1OSksZz15KEkoIlN0cmluZy5wcm90b3R5cGUuaW5kZXhPZiIpKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKHcsUCl7dmFyIEY9SSh3LCEhUCk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEYmJmcodywiLnByb3RvdHlwZS4i''@;'; put 'put ''KT4tMT95KEYpOkZ9fSw1NTU5Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNzc3MSkseT1fKDQ0MjkpLGc9XygzMTkpLEI9XygzMTkyKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKFApe3ZhciBGPWcoYXJndW1lbnRzKSxPPVAubGVuZ3RoLShhcmd1bWVudHMubGVuZ3RoLTEpO3JldHVy''@;'; put 'put ''biBJKEYsMSsoTz4wP086MCksITApfSx5P3kodWUuZXhwb3J0cywiYXBwbHkiLHt2YWx1ZTpCfSk6dWUuZXhwb3J0cy5hcHBseT1CfSw3Mzc5Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMjEwKSx5PV8oMzE5KSxnPXkoW0koIiVTdHJpbmcucHJvdG90eXBlLmluZGV4T2YlIild''@;'; put 'put ''KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKHcsUCl7dmFyIEY9SSh3LCEhUCk7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEYmJmcodywiLnByb3RvdHlwZS4iKT4tMT95KFtGXSk6Rn19LDEwMjc6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg5NTA5KS5CdWZmZXIseT1fKDI4MzApLlRy''@;'; put 'put ''YW5zZm9ybSxnPV8oMjU1MykucztmdW5jdGlvbiB3KHope3kuY2FsbCh0aGlzKSx0aGlzLmhhc2hNb2RlPSJzdHJpbmciPT10eXBlb2Ygeix0aGlzLmhhc2hNb2RlP3RoaXNbel09dGhpcy5fZmluYWxPckRpZ2VzdDp0aGlzLmZpbmFsPXRoaXMuX2ZpbmFsT3JEaWdlc3QsdGhpcy5fZmluYWwm''@;'; put 'put ''Jih0aGlzLl9fZmluYWw9dGhpcy5fZmluYWwsdGhpcy5fZmluYWw9bnVsbCksdGhpcy5fZGVjb2Rlcj1udWxsLHRoaXMuX2VuY29kaW5nPW51bGx9Xyg1NzE3KSh3LHkpO3ZhciBQPXR5cGVvZiBVaW50OEFycmF5PCJ1IixGPXR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJnR5cGVvZiBVaW50OEFy''@;'; put 'put ''cmF5PCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3JiYoSS5wcm90b3R5cGUgaW5zdGFuY2VvZiBVaW50OEFycmF5fHxJLlRZUEVEX0FSUkFZX1NVUFBPUlQpO3cucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih6LE4sTCl7dmFyIEs9ZnVuY3Rpb24gTyh6LE4pe2lmKHogaW5zdGFuY2VvZiBJKXJl''@;'; put 'put ''dHVybiB6O2lmKCJzdHJpbmciPT10eXBlb2YgeilyZXR1cm4gSS5mcm9tKHosTik7aWYoRiYmQXJyYXlCdWZmZXIuaXNWaWV3KHopKXtpZigwPT09ei5ieXRlTGVuZ3RoKXJldHVybiBJLmFsbG9jKDApO3ZhciBMPUkuZnJvbSh6LmJ1ZmZlcix6LmJ5dGVPZmZzZXQsei5ieXRlTGVuZ3RoKTtp''@;'; put 'put ''ZihMLmJ5dGVMZW5ndGg9PT16LmJ5dGVMZW5ndGgpcmV0dXJuIEx9aWYoUCYmeiBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fEkuaXNCdWZmZXIoeikmJnouY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiB6LmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZ6LmNvbnN0cnVjdG9yLmlzQnVmZmVy''@;'; put 'put ''KHopKXJldHVybiBJLmZyb20oeik7dGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJkYXRhIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nIG9yIGFuIGluc3RhbmNlIG9mIEJ1ZmZlciwgVHlwZWRBcnJheSwgb3IgRGF0YVZpZXcuJyl9KHosTiksVT10aGlzLl91cGRhdGUoSyk7cmV0''@;'; put 'put ''dXJuIHRoaXMuaGFzaE1vZGU/dGhpczooTCYmKFU9dGhpcy5fdG9TdHJpbmcoVSxMKSksVSl9LHcucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKCl7fSx3LnByb3RvdHlwZS5nZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJ0cnlpbmcgdG8gZ2V0IGF1dGgg''@;'; put 'put ''dGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIil9LHcucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKX0sdy5wcm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKCl7dGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJ0cnlpbmcgdG8gc2V0IGFhZCBpbiB1bnN1cHBvcnRlZCBzdGF0ZSIpfSx3LnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKHosTixMKXt2YXIgSzt0cnl7dGhpcy5oYXNoTW9kZT90aGlzLl91cGRhdGUoeik6dGhpcy5wdXNoKHRoaXMuX3VwZGF0ZSh6KSl9Y2F0Y2goVSl7''@;'; put 'put ''Sz1VfWZpbmFsbHl7TChLKX19LHcucHJvdG90eXBlLl9mbHVzaD1mdW5jdGlvbih6KXt2YXIgTjt0cnl7dGhpcy5wdXNoKHRoaXMuX19maW5hbCgpKX1jYXRjaChMKXtOPUx9eihOKX0sdy5wcm90b3R5cGUuX2ZpbmFsT3JEaWdlc3Q9ZnVuY3Rpb24oeil7dmFyIE49dGhpcy5fX2ZpbmFsKCl8''@;'; put 'put ''fEkuYWxsb2MoMCk7cmV0dXJuIHomJihOPXRoaXMuX3RvU3RyaW5nKE4seiwhMCkpLE59LHcucHJvdG90eXBlLl90b1N0cmluZz1mdW5jdGlvbih6LE4sTCl7aWYodGhpcy5fZGVjb2Rlcnx8KHRoaXMuX2RlY29kZXI9bmV3IGcoTiksdGhpcy5fZW5jb2Rpbmc9TiksdGhpcy5fZW5jb2Rpbmch''@;'; put 'put ''PT1OKXRocm93IG5ldyBFcnJvcigiY2FuXHUyMDE5dCBzd2l0Y2ggZW5jb2RpbmdzIik7dmFyIEs9dGhpcy5fZGVjb2Rlci53cml0ZSh6KTtyZXR1cm4gTCYmKEsrPXRoaXMuX2RlY29kZXIuZW5kKCkpLEt9LHVlLmV4cG9ydHM9d30sNTEwODoodWUscSxfKT0+e3ZhciBJPV8oOTUzOSkseT1f''@;'; put 'put ''KDkyODIpO2Z1bmN0aW9uIGcoKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX12YXIgdyxCPUFycmF5LnByb3RvdHlwZS5zbGljZSxQPXt9O3c9dHlwZW9mIF8uZzwidSImJl8uZy5jb25zb2xlP18uZy5jb25zb2xlOnR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuY29uc29sZT93aW5kb3cu''@;'; put 'put ''Y29uc29sZTp7fTtmb3IodmFyIEY9W1tmdW5jdGlvbiBLKCl7fSwibG9nIl0sW2Z1bmN0aW9uIFUoKXt3LmxvZy5hcHBseSh3LGFyZ3VtZW50cyl9LCJpbmZvIl0sW2Z1bmN0aW9uIFcoKXt3LmxvZy5hcHBseSh3LGFyZ3VtZW50cyl9LCJ3YXJuIl0sW2Z1bmN0aW9uIFkoKXt3Lndhcm4uYXBw''@;'; put 'put ''bHkodyxhcmd1bWVudHMpfSwiZXJyb3IiXSxbZnVuY3Rpb24gWChsZSl7UFtsZV09ZygpfSwidGltZSJdLFtmdW5jdGlvbiBlZShsZSl7dmFyIG1lPVBbbGVdO2lmKCFtZSl0aHJvdyBuZXcgRXJyb3IoIk5vIHN1Y2ggbGFiZWw6ICIrbGUpO2RlbGV0ZSBQW2xlXTt2YXIgX2U9ZygpLW1lO3cu''@;'; put 'put ''bG9nKGxlKyI6ICIrX2UrIm1zIil9LCJ0aW1lRW5kIl0sW2Z1bmN0aW9uIEooKXt2YXIgbGU9bmV3IEVycm9yO2xlLm5hbWU9IlRyYWNlIixsZS5tZXNzYWdlPUkuZm9ybWF0LmFwcGx5KG51bGwsYXJndW1lbnRzKSx3LmVycm9yKGxlLnN0YWNrKX0sInRyYWNlIl0sW2Z1bmN0aW9uIHJlKGxl''@;'; put 'put ''KXt3LmxvZyhJLmluc3BlY3QobGUpKyJcbiIpfSwiZGlyIl0sW2Z1bmN0aW9uIGllKGxlKXtpZighbGUpe3ZhciBtZT1CLmNhbGwoYXJndW1lbnRzLDEpO3kub2soITEsSS5mb3JtYXQuYXBwbHkobnVsbCxtZSkpfX0sImFzc2VydCJdXSxPPTA7TzxGLmxlbmd0aDtPKyspe3ZhciB6PUZbT10s''@;'; put 'put ''TD16WzFdO3dbTF18fCh3W0xdPXpbMF0pfXVlLmV4cG9ydHM9d30sNjQ5NzoodWUscSxfKT0+e3ZhciBJPV8oODc2NCkuQnVmZmVyO2Z1bmN0aW9uIFgoZWUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZWUpfXEuaXNBcnJheT1mdW5jdGlvbiB5KGVlKXtyZXR1cm4g''@;'; put 'put ''QXJyYXkuaXNBcnJheT9BcnJheS5pc0FycmF5KGVlKToiW29iamVjdCBBcnJheV0iPT09WChlZSl9LHEuaXNCb29sZWFuPWZ1bmN0aW9uIGcoZWUpe3JldHVybiJib29sZWFuIj09dHlwZW9mIGVlfSxxLmlzTnVsbD1mdW5jdGlvbiBCKGVlKXtyZXR1cm4gbnVsbD09PWVlfSxxLmlzTnVsbE9y''@;'; put 'put ''VW5kZWZpbmVkPWZ1bmN0aW9uIHcoZWUpe3JldHVybiBudWxsPT1lZX0scS5pc051bWJlcj1mdW5jdGlvbiBQKGVlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGVlfSxxLmlzU3RyaW5nPWZ1bmN0aW9uIEYoZWUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZWV9LHEuaXNTeW1ib2w9ZnVuY3Rp''@;'; put 'put ''b24gTyhlZSl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBlZX0scS5pc1VuZGVmaW5lZD1mdW5jdGlvbiB6KGVlKXtyZXR1cm4gdm9pZCAwPT09ZWV9LHEuaXNSZWdFeHA9ZnVuY3Rpb24gTihlZSl7cmV0dXJuIltvYmplY3QgUmVnRXhwXSI9PT1YKGVlKX0scS5pc09iamVjdD1mdW5jdGlvbiBM''@;'; put 'put ''KGVlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGVlJiZudWxsIT09ZWV9LHEuaXNEYXRlPWZ1bmN0aW9uIEsoZWUpe3JldHVybiJbb2JqZWN0IERhdGVdIj09PVgoZWUpfSxxLmlzRXJyb3I9ZnVuY3Rpb24gVShlZSl7cmV0dXJuIltvYmplY3QgRXJyb3JdIj09PVgoZWUpfHxlZSBpbnN0YW5j''@;'; put 'put ''ZW9mIEVycm9yfSxxLmlzRnVuY3Rpb249ZnVuY3Rpb24gVyhlZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGVlfSxxLmlzUHJpbWl0aXZlPWZ1bmN0aW9uIFkoZWUpe3JldHVybiBudWxsPT09ZWV8fCJib29sZWFuIj09dHlwZW9mIGVlfHwibnVtYmVyIj09dHlwZW9mIGVlfHwic3RyaW5n''@;'; put 'put ''Ij09dHlwZW9mIGVlfHwic3ltYm9sIj09dHlwZW9mIGVlfHx0eXBlb2YgZWU+InUifSxxLmlzQnVmZmVyPUkuaXNCdWZmZXJ9LDYzOTM6KHVlLHEsXyk9Pnt2YXIgST1fKDg3NjQpLkJ1ZmZlcix5PV8oNjk0OCksZz1fKDY0MjYpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oTyl7cmV0dXJuIG5ldyB3''@;'; put 'put ''KE8pfTt2YXIgQj17c2VjcDI1NmsxOntuYW1lOiJzZWNwMjU2azEiLGJ5dGVMZW5ndGg6MzJ9LHNlY3AyMjRyMTp7bmFtZToicDIyNCIsYnl0ZUxlbmd0aDoyOH0scHJpbWUyNTZ2MTp7bmFtZToicDI1NiIsYnl0ZUxlbmd0aDozMn0scHJpbWUxOTJ2MTp7bmFtZToicDE5MiIsYnl0ZUxlbmd0''@;'; put 'put ''aDoyNH0sZWQyNTUxOTp7bmFtZToiZWQyNTUxOSIsYnl0ZUxlbmd0aDozMn0sc2VjcDM4NHIxOntuYW1lOiJwMzg0IixieXRlTGVuZ3RoOjQ4fSxzZWNwNTIxcjE6e25hbWU6InA1MjEiLGJ5dGVMZW5ndGg6NjZ9fTtmdW5jdGlvbiB3KEYpe3RoaXMuY3VydmVUeXBlPUJbRl0sdGhpcy5jdXJ2''@;'; put 'put ''ZVR5cGV8fCh0aGlzLmN1cnZlVHlwZT17bmFtZTpGfSksdGhpcy5jdXJ2ZT1uZXcgeS5lYyh0aGlzLmN1cnZlVHlwZS5uYW1lKSx0aGlzLmtleXM9dm9pZCAwfWZ1bmN0aW9uIFAoRixPLHope0FycmF5LmlzQXJyYXkoRil8fChGPUYudG9BcnJheSgpKTt2YXIgTj1uZXcgSShGKTtpZih6JiZO''@;'; put 'put ''Lmxlbmd0aDx6KXt2YXIgTD1uZXcgSSh6LU4ubGVuZ3RoKTtMLmZpbGwoMCksTj1JLmNvbmNhdChbTCxOXSl9cmV0dXJuIE8/Ti50b1N0cmluZyhPKTpOfUIucDIyND1CLnNlY3AyMjRyMSxCLnAyNTY9Qi5zZWNwMjU2cjE9Qi5wcmltZTI1NnYxLEIucDE5Mj1CLnNlY3AxOTJyMT1CLnByaW1l''@;'; put 'put ''MTkydjEsQi5wMzg0PUIuc2VjcDM4NHIxLEIucDUyMT1CLnNlY3A1MjFyMSx3LnByb3RvdHlwZS5nZW5lcmF0ZUtleXM9ZnVuY3Rpb24oRixPKXtyZXR1cm4gdGhpcy5rZXlzPXRoaXMuY3VydmUuZ2VuS2V5UGFpcigpLHRoaXMuZ2V0UHVibGljS2V5KEYsTyl9LHcucHJvdG90eXBlLmNvbXB1''@;'; put 'put ''dGVTZWNyZXQ9ZnVuY3Rpb24oRixPLHope3JldHVybiBPPU98fCJ1dGY4IixJLmlzQnVmZmVyKEYpfHwoRj1uZXcgSShGLE8pKSxQKHRoaXMuY3VydmUua2V5RnJvbVB1YmxpYyhGKS5nZXRQdWJsaWMoKS5tdWwodGhpcy5rZXlzLmdldFByaXZhdGUoKSkuZ2V0WCgpLHosdGhpcy5jdXJ2ZVR5''@;'; put 'put ''cGUuYnl0ZUxlbmd0aCl9LHcucHJvdG90eXBlLmdldFB1YmxpY0tleT1mdW5jdGlvbihGLE8pe3ZhciB6PXRoaXMua2V5cy5nZXRQdWJsaWMoImNvbXByZXNzZWQiPT09TywhMCk7cmV0dXJuImh5YnJpZCI9PT1PJiYoelswXT16W3oubGVuZ3RoLTFdJTI/Nzo2KSxQKHosRil9LHcucHJvdG90''@;'; put 'put ''eXBlLmdldFByaXZhdGVLZXk9ZnVuY3Rpb24oRil7cmV0dXJuIFAodGhpcy5rZXlzLmdldFByaXZhdGUoKSxGKX0sdy5wcm90b3R5cGUuc2V0UHVibGljS2V5PWZ1bmN0aW9uKEYsTyl7cmV0dXJuIE89T3x8InV0ZjgiLEkuaXNCdWZmZXIoRil8fChGPW5ldyBJKEYsTykpLHRoaXMua2V5cy5f''@;'; put 'put ''aW1wb3J0UHVibGljKEYpLHRoaXN9LHcucHJvdG90eXBlLnNldFByaXZhdGVLZXk9ZnVuY3Rpb24oRixPKXtPPU98fCJ1dGY4IixJLmlzQnVmZmVyKEYpfHwoRj1uZXcgSShGLE8pKTt2YXIgej1uZXcgZyhGKTtyZXR1cm4gej16LnRvU3RyaW5nKDE2KSx0aGlzLmtleXM9dGhpcy5jdXJ2ZS5n''@;'; put 'put ''ZW5LZXlQYWlyKCksdGhpcy5rZXlzLl9pbXBvcnRQcml2YXRlKHopLHRoaXN9fSw2NDI2OmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkseSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGcoVixwKXtpZighVil0aHJvdyBuZXcgRXJyb3IocHx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlv''@;'; put 'put ''biBCKFYscCl7Vi5zdXBlcl89cDt2YXIgYj1mdW5jdGlvbigpe307Yi5wcm90b3R5cGU9cC5wcm90b3R5cGUsVi5wcm90b3R5cGU9bmV3IGIsVi5wcm90b3R5cGUuY29uc3RydWN0b3I9Vn1mdW5jdGlvbiB3KFYscCxiKXtpZih3LmlzQk4oVikpcmV0dXJuIFY7dGhpcy5uZWdhdGl2ZT0wLHRo''@;'; put 'put ''aXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PVYmJigoImxlIj09PXB8fCJiZSI9PT1wKSYmKGI9cCxwPTEwKSx0aGlzLl9pbml0KFZ8fDAscHx8MTAsYnx8ImJlIikpfXZhciBQOyJvYmplY3QiPT10eXBlb2YgST9JLmV4cG9ydHM9dzp5LkJOPXcsdy5C''@;'; put 'put ''Tj13LHcud29yZFNpemU9MjY7dHJ5e1A9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOl8oODYyMykuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKFYscCl7dmFyIGI9Vi5jaGFyQ29kZUF0KHApO3JldHVybiBiPj02NSYmYjw9NzA/Yi01''@;'; put 'put ''NTpiPj05NyYmYjw9MTAyP2ItODc6Yi00OCYxNX1mdW5jdGlvbiBPKFYscCxiKXt2YXIgeD1GKFYsYik7cmV0dXJuIGItMT49cCYmKHh8PUYoVixiLTEpPDw0KSx4fWZ1bmN0aW9uIHooVixwLGIseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1pbihWLmxlbmd0aCxiKSxIPXA7SDxUO0grKyl7dmFy''@;'; put 'put ''IGo9Vi5jaGFyQ29kZUF0KEgpLTQ4O0MqPXgsQys9aj49NDk/ai00OSsxMDpqPj0xNz9qLTE3KzEwOmp9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9uKHApe3JldHVybiBwIGluc3RhbmNlb2Ygd3x8bnVsbCE9PXAmJiJvYmplY3QiPT10eXBlb2YgcCYmcC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09''@;'; put 'put ''PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkocC53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPjA/cDpifSx3Lm1pbj1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKTwwP3A6Yn0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24ocCxiLHgpe2lmKCJudW1i''@;'; put 'put ''ZXIiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5pdE51bWJlcihwLGIseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0QXJyYXkocCxiLHgpOyJoZXgiPT09YiYmKGI9MTYpLGcoYj09PSgwfGIpJiZiPj0yJiZiPD0zNik7dmFyIEM9MDsiLSI9PT0ocD1wLnRvU3Ry''@;'; put 'put ''aW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8cC5sZW5ndGgmJigxNj09PWI/dGhpcy5fcGFyc2VIZXgocCxDLHgpOih0aGlzLl9wYXJzZUJhc2UocCxiLEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KSkp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihwLGIseCl7cDwwJiYodGhpcy5uZWdhdGl2ZT0xLHA9LXApLHA8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnBdLHRoaXMubGVuZ3RoPTEpOnA8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxw''@;'; put 'put ''LzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooZyhwPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnAscC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCl9''@;'; put 'put ''LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24ocCxiLHgpe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwLmxlbmd0aCkscC5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwocC5sZW5ndGgvMyksdGhpcy53''@;'; put 'put ''b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxILGo9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MtMV08PDh8cFtD''@;'; put 'put ''LTJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtlbHNlIGlmKCJsZSI9PT14KWZvcihDPTAsVD0wO0M8cC5sZW5ndGg7Qys9Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQysxXTw8OHxwW0MrMl08''@;'; put 'put ''PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihwLGIseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChwLmxlbmd0''@;'; put 'put ''aC1iKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBqLFQ9MCxIPTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMTtDPj1iO0MtPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRz''@;'; put 'put ''W0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0ocC5sZW5ndGgtYiklMj09MD9iKzE6YjtDPHAubGVuZ3RoO0MrPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0''@;'; put 'put ''aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHAsYix4KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEwODg2MztUKj1iKUMrKztDLS0sVD1UL2J8MDtmb3Io''@;'; put 'put ''dmFyIEg9cC5sZW5ndGgteCxqPUglQyxFPU1hdGgubWluKEgsSC1qKSt4LG09MCxBPXg7QTxFO0ErPUMpbT16KHAsQSxBK0MsYiksdGhpcy5pbXVsbihUKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKTtpZigwIT09ail7dmFyIG9lPTE7''@;'; put 'put ''Zm9yKG09eihwLEEscC5sZW5ndGgsYiksQT0wO0E8ajtBKyspb2UqPWI7dGhpcy5pbXVsbihvZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHApe3Aud29yZHM9''@;'; put 'put ''bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoO2IrKylwLndvcmRzW2JdPXRoaXMud29yZHNbYl07cC5sZW5ndGg9dGhpcy5sZW5ndGgscC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHAucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlv''@;'; put 'put ''bigpe3ZhciBwPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkocCkscH0sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHA7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24o''@;'; put 'put ''KXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1sw''@;'; put 'put ''XSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgTj1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIs''@;'; put 'put ''IjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIs''@;'; put 'put ''IjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxMPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEs9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3''@;'; put 'put ''Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3''@;'; put 'put ''NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVyhWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmU7dmFyIHg9Vi5sZW5ndGgrcC5sZW5ndGh8''@;'; put 'put ''MDtiLmxlbmd0aD14LHg9eC0xfDA7dmFyIEM9MHxWLndvcmRzWzBdLFQ9MHxwLndvcmRzWzBdLEg9QypULEU9SC82NzEwODg2NHwwO2Iud29yZHNbMF09NjcxMDg4NjMmSDtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2LG9lPTY3MTA4ODYzJkUsdGU9TWF0aC5taW4obSxw''@;'; put 'put ''Lmxlbmd0aC0xKSxzZT1NYXRoLm1heCgwLG0tVi5sZW5ndGgrMSk7c2U8PXRlO3NlKyspQSs9KEg9KEM9MHxWLndvcmRzW20tc2V8MF0pKihUPTB8cC53b3Jkc1tzZV0pK29lKS82NzEwODg2NHwwLG9lPTY3MTA4ODYzJkg7Yi53b3Jkc1ttXT0wfG9lLEU9MHxBfXJldHVybiAwIT09RT9iLndv''@;'; put 'put ''cmRzW21dPTB8RTpiLmxlbmd0aC0tLGIuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihwLGIpe3ZhciB4O2lmKGI9MHxifHwxLDE2PT09KHA9cHx8MTApfHwiaGV4Ij09PXApe3g9IiI7Zm9yKHZhciBDPTAsVD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9dGhp''@;'; put 'put ''cy53b3Jkc1tIXSxFPSgxNjc3NzIxNSYoajw8Q3xUKSkudG9TdHJpbmcoMTYpO1Q9aj4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2LEgtLSkseD0wIT09VHx8SCE9PXRoaXMubGVuZ3RoLTE/Tls2LUUubGVuZ3RoXStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygx''@;'; put 'put ''NikreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKHA9PT0oMHxwKSYmcD49MiYmcDw9MzYpe3ZhciBtPUxbcF0sQT1LW3BdO3g9IiI7dmFyIG9lPXRoaXMuY2xvbmUoKTtmb3Iob2UubmVnYXRpdmU9MDshb2UuaXNaZXJv''@;'; put 'put ''KCk7KXt2YXIgdGU9b2UubW9kbihBKS50b1N0cmluZyhwKTt4PShvZT1vZS5pZGl2bihBKSkuaXNaZXJvKCk/dGUreDpOW20tdGUubGVuZ3RoXSt0ZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUm''@;'; put 'put ''Jih4PSItIit4KSx4fWcoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgcD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/cCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5s''@;'; put 'put ''ZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3ArPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZnKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tcDpwfSx3LnByb3Rv''@;'; put 'put ''dHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHAsYil7cmV0dXJuIGcodHlwZW9mIFA8InUiKSx0aGlzLnRvQXJyYXlMaWtlKFAscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihwLGIp''@;'; put 'put ''e3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz10aGlzLmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7ZyhDPD1ULCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3Ro''@;'; put 'put ''IiksZyhUPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRSxtLEg9ImxlIj09PWIsaj1uZXcgcChUKSxBPXRoaXMuY2xvbmUoKTtpZihIKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW21dPUU7Zm9y''@;'; put 'put ''KDttPFQ7bSsrKWpbbV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsrKWpbbV09MDtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW1QtbS0xXT1FfXJldHVybiBqfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24ocCl7''@;'; put 'put ''cmV0dXJuIDMyLU1hdGguY2x6MzIocCl9OmZ1bmN0aW9uKHApe3ZhciBiPXAseD0wO3JldHVybiBiPj00MDk2JiYoeCs9MTMsYj4+Pj0xMyksYj49NjQmJih4Kz03LGI+Pj49NyksYj49OCYmKHgrPTQsYj4+Pj00KSxiPj0yJiYoeCs9MixiPj4+PTIpLHgrYn0sdy5wcm90b3R5cGUuX3plcm9C''@;'; put 'put ''aXRzPWZ1bmN0aW9uKHApe2lmKDA9PT1wKXJldHVybiAyNjt2YXIgYj1wLHg9MDtyZXR1cm4gODE5MSZifHwoeCs9MTMsYj4+Pj0xMyksMTI3JmJ8fCh4Kz03LGI+Pj49NyksMTUmYnx8KHgrPTQsYj4+Pj00KSwzJmJ8fCh4Kz0yLGI+Pj49MiksMSZifHx4KysseH0sdy5wcm90b3R5cGUuYml0''@;'; put 'put ''TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrYn0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgcD0w''@;'; put 'put ''LGI9MDtiPHRoaXMubGVuZ3RoO2IrKyl7dmFyIHg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tiXSk7aWYocCs9eCwyNiE9PXgpYnJlYWt9cmV0dXJuIHB9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcu''@;'; put 'put ''cHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihwKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnRlc3RuKHAtMSk/dGhpcy5ub3RuKHAp''@;'; put 'put ''LmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHAubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBiPTA7YjxwLmxlbmd0aDtiKyspdGhp''@;'; put 'put ''cy53b3Jkc1tiXT10aGlzLndvcmRzW2JdfHAud29yZHNbYl07cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdW9yKHApfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihwKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihwKTpwLmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHApOnAuY2xvbmUoKS5pdW9yKHRoaXMp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihwKXt2YXIgYjtiPXRoaXMubGVuZ3RoPnAubGVuZ3RoP3A6dGhpcztmb3IodmFyIHg9MDt4PGIubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPXRoaXMud29yZHNbeF0mcC53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhp''@;'; put 'put ''cy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChwKX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFu''@;'; put 'put ''ZChwKTpwLmNsb25lKCkuaWFuZCh0aGlzKX0sdy5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHApOnAuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24ocCl7dmFyIGIs''@;'; put 'put ''eDt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oYj10aGlzLHg9cCk6KGI9cCx4PXRoaXMpO2Zvcih2YXIgQz0wO0M8eC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109Yi53b3Jkc1tDXV54LndvcmRzW0NdO2lmKHRoaXMhPT1iKWZvcig7QzxiLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRz''@;'; put 'put ''W0NdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1eG9yKHApfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRo''@;'; put 'put ''aXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHApOnAuY2xvbmUoKS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IocCk6cC5jbG9uZSgpLml1eG9yKHRoaXMpfSx3''@;'; put 'put ''LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9MHxNYXRoLmNlaWwocC8yNikseD1wJTI2O3RoaXMuX2V4cGFuZChiKSx4PjAmJmItLTtmb3IodmFyIEM9MDtDPGI7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmfnRoaXMud29y''@;'; put 'put ''ZHNbQ107cmV0dXJuIHg+MCYmKHRoaXMud29yZHNbQ109fnRoaXMud29yZHNbQ10mNjcxMDg4NjM+PjI2LXgpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHApfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHAs''@;'; put 'put ''Yil7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciB4PXAvMjZ8MCxDPXAlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF09Yj90aGlzLndvcmRzW3hdfDE8PEM6dGhpcy53b3Jkc1t4XSZ+KDE8PEMpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFkZD1m''@;'; put 'put ''dW5jdGlvbihwKXt2YXIgYix4LEM7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2''@;'; put 'put ''ZSlyZXR1cm4gcC5uZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKHApLHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPnAubGVuZ3RoPyh4PXRoaXMsQz1wKTooeD1wLEM9dGhpcyk7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMm''@;'; put 'put ''KGI9KDB8eC53b3Jkc1tIXSkrKDB8Qy53b3Jkc1tIXSkrVCksVD1iPj4+MjY7Zm9yKDswIT09VCYmSDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKStUKSxUPWI+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0aGlzLndvcmRz''@;'; put 'put ''W3RoaXMubGVuZ3RoXT1ULHRoaXMubGVuZ3RoKys7ZWxzZSBpZih4IT09dGhpcylmb3IoO0g8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09eC53b3Jkc1tIXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHApe3ZhciBiO3JldHVybiAwIT09cC5uZWdhdGl2ZSYmMD09''@;'; put 'put ''PXRoaXMubmVnYXRpdmU/KHAubmVnYXRpdmU9MCxiPXRoaXMuc3ViKHApLHAubmVnYXRpdmVePTEsYik6MD09PXAubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsYj1wLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsYik6dGhpcy5sZW5ndGg+cC5sZW5ndGg/''@;'; put 'put ''dGhpcy5jbG9uZSgpLmlhZGQocCk6cC5jbG9uZSgpLmlhZGQodGhpcyl9LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCl7aWYoMCE9PXAubmVnYXRpdmUpe3AubmVnYXRpdmU9MDt2YXIgYj10aGlzLmlhZGQocCk7cmV0dXJuIHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpfWlmKDAhPT10''@;'; put 'put ''aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBDLFQseD10aGlzLmNtcChwKTtpZigwPT09eClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0w''@;'; put 'put ''LHRoaXM7eD4wPyhDPXRoaXMsVD1wKTooQz1wLFQ9dGhpcyk7Zm9yKHZhciBIPTAsaj0wO2o8VC5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSktKDB8VC53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtmb3IoOzAhPT1IJiZqPEMubGVuZ3RoO2orKylIPShi''@;'; put 'put ''PSgwfEMud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJmI7aWYoMD09PUgmJmo8Qy5sZW5ndGgmJkMhPT10aGlzKWZvcig7ajxDLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1DLndvcmRzW2pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxq''@;'; put 'put ''KSxDIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHApfTt2YXIgWT1mdW5jdGlvbihwLGIseCl7dmFyIEUsbSxBLEM9cC53b3JkcyxUPWIud29yZHMsSD14LndvcmRzLGo9''@;'; put 'put ''MCxvZT0wfENbMF0sdGU9ODE5MSZvZSxzZT1vZT4+PjEzLHdlPTB8Q1sxXSxVZT04MTkxJndlLEplPXdlPj4+MTMsYXQ9MHxDWzJdLE1lPTgxOTEmYXQsdmU9YXQ+Pj4xMyxYZT0wfENbM10samU9ODE5MSZYZSxEZT1YZT4+PjEzLEZlPTB8Q1s0XSxSZT04MTkxJkZlLEllPUZlPj4+MTMsVmU9''@;'; put 'put ''MHxDWzVdLGtlPTgxOTEmVmUsQWU9VmU+Pj4xMyxfdD0wfENbNl0scnQ9ODE5MSZfdCxRZT1fdD4+PjEzLGRuPTB8Q1s3XSx5dD04MTkxJmRuLE10PWRuPj4+MTMsRHQ9MHxDWzhdLGl0PTgxOTEmRHQsJGU9RHQ+Pj4xMyx0dD0wfENbOV0sSGU9ODE5MSZ0dCxkdD10dD4+PjEzLHF0PTB8VFsw''@;'; put 'put ''XSxSdD04MTkxJnF0LFB0PXF0Pj4+MTMsYWk9MHxUWzFdLFF0PTgxOTEmYWksc249YWk+Pj4xMyxSaT0wfFRbMl0sZm49ODE5MSZSaSxmdD1SaT4+PjEzLFByPTB8VFszXSxadD04MTkxJlByLEF0PVByPj4+MTMsTG49MHxUWzRdLHN0PTgxOTEmTG4senQ9TG4+Pj4xMyxuaT0wfFRbNV0sV2U9''@;'; put 'put ''ODE5MSZuaSxUdD1uaT4+PjEzLHJyPTB8VFs2XSxodD04MTkxJnJyLHh0PXJyPj4+MTMsQm49MHxUWzddLG9uPTgxOTEmQm4sanQ9Qm4+Pj4xMyxkaT0wfFRbOF0sY249ODE5MSZkaSxwbj1kaT4+PjEzLElpPTB8VFs5XSxYdD04MTkxJklpLGVuPUlpPj4+MTM7eC5uZWdhdGl2ZT1wLm5lZ2F0''@;'; put 'put ''aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9MTk7dmFyIGhvPShqKyhFPU1hdGguaW11bCh0ZSxSdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwodGUsUHQpKStNYXRoLmltdWwoc2UsUnQpfDApKTw8MTMpfDA7aj0oKEE9TWF0aC5pbXVsKHNlLFB0KSkrKG0+Pj4xMyl8MCkrKGhvPj4+MjYp''@;'; put 'put ''fDAsaG8mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFVlLFJ0KSxtPShtPU1hdGguaW11bChVZSxQdCkpK01hdGguaW11bChKZSxSdCl8MCxBPU1hdGguaW11bChKZSxQdCk7dmFyIE1pPShqKyhFPUUrTWF0aC5pbXVsKHRlLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsc24p''@;'; put 'put ''fDApK01hdGguaW11bChzZSxRdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxzbil8MCkrKG0+Pj4xMyl8MCkrKE1pPj4+MjYpfDAsTWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE1lLFJ0KSxtPShtPU1hdGguaW11bChNZSxQdCkpK01hdGguaW11bCh2ZSxSdCl8MCxBPU1hdGgu''@;'; put 'put ''aW11bCh2ZSxQdCksRT1FK01hdGguaW11bChVZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHNuKXwwKStNYXRoLmltdWwoSmUsUXQpfDAsQT1BK01hdGguaW11bChKZSxzbil8MDt2YXIgcHI9KGorKEU9RStNYXRoLmltdWwodGUsZm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11''@;'; put 'put ''bCh0ZSxmdCl8MCkrTWF0aC5pbXVsKHNlLGZuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZ0KXwwKSsobT4+PjEzKXwwKSsocHI+Pj4yNil8MCxwciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoamUsUnQpLG09KG09TWF0aC5pbXVsKGplLFB0KSkrTWF0aC5pbXVsKERlLFJ0KXww''@;'; put 'put ''LEE9TWF0aC5pbXVsKERlLFB0KSxFPUUrTWF0aC5pbXVsKE1lLFF0KXwwLG09KG09bStNYXRoLmltdWwoTWUsc24pfDApK01hdGguaW11bCh2ZSxRdCl8MCxBPUErTWF0aC5pbXVsKHZlLHNuKXwwLEU9RStNYXRoLmltdWwoVWUsZm4pfDAsbT0obT1tK01hdGguaW11bChVZSxmdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKEplLGZuKXwwLEE9QStNYXRoLmltdWwoSmUsZnQpfDA7dmFyIFduPShqKyhFPUUrTWF0aC5pbXVsKHRlLFp0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsQXQpfDApK01hdGguaW11bChzZSxadCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxBdCl8''@;'; put 'put ''MCkrKG0+Pj4xMyl8MCkrKFduPj4+MjYpfDAsV24mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFJlLFJ0KSxtPShtPU1hdGguaW11bChSZSxQdCkpK01hdGguaW11bChJZSxSdCl8MCxBPU1hdGguaW11bChJZSxQdCksRT1FK01hdGguaW11bChqZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLHNu''@;'; put 'put ''KXwwKStNYXRoLmltdWwoRGUsUXQpfDAsQT1BK01hdGguaW11bChEZSxzbil8MCxFPUUrTWF0aC5pbXVsKE1lLGZuKXwwLG09KG09bStNYXRoLmltdWwoTWUsZnQpfDApK01hdGguaW11bCh2ZSxmbil8MCxBPUErTWF0aC5pbXVsKHZlLGZ0KXwwLEU9RStNYXRoLmltdWwoVWUsWnQpfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChVZSxBdCl8MCkrTWF0aC5pbXVsKEplLFp0KXwwLEE9QStNYXRoLmltdWwoSmUsQXQpfDA7dmFyIEtpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHN0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsenQpfDApK01hdGguaW11bChzZSxzdCl8MCkpPDwxMyl8''@;'; put 'put ''MDtqPSgoQT1BK01hdGguaW11bChzZSx6dCl8MCkrKG0+Pj4xMyl8MCkrKEtpPj4+MjYpfDAsS2kmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGtlLFJ0KSxtPShtPU1hdGguaW11bChrZSxQdCkpK01hdGguaW11bChBZSxSdCl8MCxBPU1hdGguaW11bChBZSxQdCksRT1FK01hdGguaW11bChSZSxR''@;'; put 'put ''dCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHNuKXwwKStNYXRoLmltdWwoSWUsUXQpfDAsQT1BK01hdGguaW11bChJZSxzbil8MCxFPUUrTWF0aC5pbXVsKGplLGZuKXwwLG09KG09bStNYXRoLmltdWwoamUsZnQpfDApK01hdGguaW11bChEZSxmbil8MCxBPUErTWF0aC5pbXVsKERlLGZ0KXww''@;'; put 'put ''LEU9RStNYXRoLmltdWwoTWUsWnQpfDAsbT0obT1tK01hdGguaW11bChNZSxBdCl8MCkrTWF0aC5pbXVsKHZlLFp0KXwwLEE9QStNYXRoLmltdWwodmUsQXQpfDAsRT1FK01hdGguaW11bChVZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoSmUsc3QpfDAsQT1B''@;'; put 'put ''K01hdGguaW11bChKZSx6dCl8MDt2YXIgUXI9KGorKEU9RStNYXRoLmltdWwodGUsV2UpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxUdCl8MCkrTWF0aC5pbXVsKHNlLFdlKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFR0KXwwKSsobT4+PjEzKXwwKSsoUXI+''@;'; put 'put ''Pj4yNil8MCxRciY9NjcxMDg4NjMsRT1NYXRoLmltdWwocnQsUnQpLG09KG09TWF0aC5pbXVsKHJ0LFB0KSkrTWF0aC5pbXVsKFFlLFJ0KXwwLEE9TWF0aC5pbXVsKFFlLFB0KSxFPUUrTWF0aC5pbXVsKGtlLFF0KXwwLG09KG09bStNYXRoLmltdWwoa2Usc24pfDApK01hdGguaW11bChBZSxR''@;'; put 'put ''dCl8MCxBPUErTWF0aC5pbXVsKEFlLHNuKXwwLEU9RStNYXRoLmltdWwoUmUsZm4pfDAsbT0obT1tK01hdGguaW11bChSZSxmdCl8MCkrTWF0aC5pbXVsKEllLGZuKXwwLEE9QStNYXRoLmltdWwoSWUsZnQpfDAsRT1FK01hdGguaW11bChqZSxadCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLEF0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoRGUsWnQpfDAsQT1BK01hdGguaW11bChEZSxBdCl8MCxFPUUrTWF0aC5pbXVsKE1lLHN0KXwwLG09KG09bStNYXRoLmltdWwoTWUsenQpfDApK01hdGguaW11bCh2ZSxzdCl8MCxBPUErTWF0aC5pbXVsKHZlLHp0KXwwLEU9RStNYXRoLmltdWwoVWUsV2UpfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChVZSxUdCl8MCkrTWF0aC5pbXVsKEplLFdlKXwwLEE9QStNYXRoLmltdWwoSmUsVHQpfDA7dmFyIEpyPShqKyhFPUUrTWF0aC5pbXVsKHRlLGh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUseHQpfDApK01hdGguaW11bChzZSxodCl8MCkpPDwxMyl8''@;'; put 'put ''MDtqPSgoQT1BK01hdGguaW11bChzZSx4dCl8MCkrKG0+Pj4xMyl8MCkrKEpyPj4+MjYpfDAsSnImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHl0LFJ0KSxtPShtPU1hdGguaW11bCh5dCxQdCkpK01hdGguaW11bChNdCxSdCl8MCxBPU1hdGguaW11bChNdCxQdCksRT1FK01hdGguaW11bChydCxR''@;'; put 'put ''dCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LHNuKXwwKStNYXRoLmltdWwoUWUsUXQpfDAsQT1BK01hdGguaW11bChRZSxzbil8MCxFPUUrTWF0aC5pbXVsKGtlLGZuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZnQpfDApK01hdGguaW11bChBZSxmbil8MCxBPUErTWF0aC5pbXVsKEFlLGZ0KXww''@;'; put 'put ''LEU9RStNYXRoLmltdWwoUmUsWnQpfDAsbT0obT1tK01hdGguaW11bChSZSxBdCl8MCkrTWF0aC5pbXVsKEllLFp0KXwwLEE9QStNYXRoLmltdWwoSWUsQXQpfDAsRT1FK01hdGguaW11bChqZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLHp0KXwwKStNYXRoLmltdWwoRGUsc3QpfDAsQT1B''@;'; put 'put ''K01hdGguaW11bChEZSx6dCl8MCxFPUUrTWF0aC5pbXVsKE1lLFdlKXwwLG09KG09bStNYXRoLmltdWwoTWUsVHQpfDApK01hdGguaW11bCh2ZSxXZSl8MCxBPUErTWF0aC5pbXVsKHZlLFR0KXwwLEU9RStNYXRoLmltdWwoVWUsaHQpfDAsbT0obT1tK01hdGguaW11bChVZSx4dCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKEplLGh0KXwwLEE9QStNYXRoLmltdWwoSmUseHQpfDA7dmFyIEJpPShqKyhFPUUrTWF0aC5pbXVsKHRlLG9uKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsanQpfDApK01hdGguaW11bChzZSxvbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxqdCl8''@;'; put 'put ''MCkrKG0+Pj4xMyl8MCkrKEJpPj4+MjYpfDAsQmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGl0LFJ0KSxtPShtPU1hdGguaW11bChpdCxQdCkpK01hdGguaW11bCgkZSxSdCl8MCxBPU1hdGguaW11bCgkZSxQdCksRT1FK01hdGguaW11bCh5dCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHNu''@;'; put 'put ''KXwwKStNYXRoLmltdWwoTXQsUXQpfDAsQT1BK01hdGguaW11bChNdCxzbil8MCxFPUUrTWF0aC5pbXVsKHJ0LGZuKXwwLG09KG09bStNYXRoLmltdWwocnQsZnQpfDApK01hdGguaW11bChRZSxmbil8MCxBPUErTWF0aC5pbXVsKFFlLGZ0KXwwLEU9RStNYXRoLmltdWwoa2UsWnQpfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChrZSxBdCl8MCkrTWF0aC5pbXVsKEFlLFp0KXwwLEE9QStNYXRoLmltdWwoQWUsQXQpfDAsRT1FK01hdGguaW11bChSZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHp0KXwwKStNYXRoLmltdWwoSWUsc3QpfDAsQT1BK01hdGguaW11bChJZSx6dCl8MCxFPUUrTWF0''@;'; put 'put ''aC5pbXVsKGplLFdlKXwwLG09KG09bStNYXRoLmltdWwoamUsVHQpfDApK01hdGguaW11bChEZSxXZSl8MCxBPUErTWF0aC5pbXVsKERlLFR0KXwwLEU9RStNYXRoLmltdWwoTWUsaHQpfDAsbT0obT1tK01hdGguaW11bChNZSx4dCl8MCkrTWF0aC5pbXVsKHZlLGh0KXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwodmUseHQpfDAsRT1FK01hdGguaW11bChVZSxvbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGp0KXwwKStNYXRoLmltdWwoSmUsb24pfDAsQT1BK01hdGguaW11bChKZSxqdCl8MDt2YXIgVmk9KGorKEU9RStNYXRoLmltdWwodGUsY24pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11''@;'; put 'put ''bCh0ZSxwbil8MCkrTWF0aC5pbXVsKHNlLGNuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHBuKXwwKSsobT4+PjEzKXwwKSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUnQpLG09KG09TWF0aC5pbXVsKEhlLFB0KSkrTWF0aC5pbXVsKGR0LFJ0KXww''@;'; put 'put ''LEE9TWF0aC5pbXVsKGR0LFB0KSxFPUUrTWF0aC5pbXVsKGl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoaXQsc24pfDApK01hdGguaW11bCgkZSxRdCl8MCxBPUErTWF0aC5pbXVsKCRlLHNuKXwwLEU9RStNYXRoLmltdWwoeXQsZm4pfDAsbT0obT1tK01hdGguaW11bCh5dCxmdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKE10LGZuKXwwLEE9QStNYXRoLmltdWwoTXQsZnQpfDAsRT1FK01hdGguaW11bChydCxadCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LEF0KXwwKStNYXRoLmltdWwoUWUsWnQpfDAsQT1BK01hdGguaW11bChRZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGtlLHN0KXwwLG09KG09bStNYXRo''@;'; put 'put ''LmltdWwoa2UsenQpfDApK01hdGguaW11bChBZSxzdCl8MCxBPUErTWF0aC5pbXVsKEFlLHp0KXwwLEU9RStNYXRoLmltdWwoUmUsV2UpfDAsbT0obT1tK01hdGguaW11bChSZSxUdCl8MCkrTWF0aC5pbXVsKEllLFdlKXwwLEE9QStNYXRoLmltdWwoSWUsVHQpfDAsRT1FK01hdGguaW11bChq''@;'; put 'put ''ZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLHh0KXwwKStNYXRoLmltdWwoRGUsaHQpfDAsQT1BK01hdGguaW11bChEZSx4dCl8MCxFPUUrTWF0aC5pbXVsKE1lLG9uKXwwLG09KG09bStNYXRoLmltdWwoTWUsanQpfDApK01hdGguaW11bCh2ZSxvbil8MCxBPUErTWF0aC5pbXVsKHZlLGp0''@;'; put 'put ''KXwwLEU9RStNYXRoLmltdWwoVWUsY24pfDAsbT0obT1tK01hdGguaW11bChVZSxwbil8MCkrTWF0aC5pbXVsKEplLGNuKXwwLEE9QStNYXRoLmltdWwoSmUscG4pfDA7dmFyIElvPShqKyhFPUUrTWF0aC5pbXVsKHRlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZW4p''@;'; put 'put ''fDApK01hdGguaW11bChzZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxlbil8MCkrKG0+Pj4xMyl8MCkrKElvPj4+MjYpfDAsSW8mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFF0KSxtPShtPU1hdGguaW11bChIZSxzbikpK01hdGguaW11bChkdCxRdCl8MCxBPU1hdGgu''@;'; put 'put ''aW11bChkdCxzbiksRT1FK01hdGguaW11bChpdCxmbil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZ0KXwwKStNYXRoLmltdWwoJGUsZm4pfDAsQT1BK01hdGguaW11bCgkZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFp0KXwwLG09KG09bStNYXRoLmltdWwoeXQsQXQpfDApK01hdGguaW11bChN''@;'; put 'put ''dCxadCl8MCxBPUErTWF0aC5pbXVsKE10LEF0KXwwLEU9RStNYXRoLmltdWwocnQsc3QpfDAsbT0obT1tK01hdGguaW11bChydCx6dCl8MCkrTWF0aC5pbXVsKFFlLHN0KXwwLEE9QStNYXRoLmltdWwoUWUsenQpfDAsRT1FK01hdGguaW11bChrZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGtl''@;'; put 'put ''LFR0KXwwKStNYXRoLmltdWwoQWUsV2UpfDAsQT1BK01hdGguaW11bChBZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFJlLGh0KXwwLG09KG09bStNYXRoLmltdWwoUmUseHQpfDApK01hdGguaW11bChJZSxodCl8MCxBPUErTWF0aC5pbXVsKEllLHh0KXwwLEU9RStNYXRoLmltdWwoamUsb24pfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bChqZSxqdCl8MCkrTWF0aC5pbXVsKERlLG9uKXwwLEE9QStNYXRoLmltdWwoRGUsanQpfDAsRT1FK01hdGguaW11bChNZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHBuKXwwKStNYXRoLmltdWwodmUsY24pfDAsQT1BK01hdGguaW11bCh2ZSxwbil8MDt2YXIg''@;'; put 'put ''T3I9KGorKEU9RStNYXRoLmltdWwoVWUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChVZSxlbil8MCkrTWF0aC5pbXVsKEplLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEplLGVuKXwwKSsobT4+PjEzKXwwKSsoT3I+Pj4yNil8MCxPciY9NjcxMDg4NjMsRT1N''@;'; put 'put ''YXRoLmltdWwoSGUsZm4pLG09KG09TWF0aC5pbXVsKEhlLGZ0KSkrTWF0aC5pbXVsKGR0LGZuKXwwLEE9TWF0aC5pbXVsKGR0LGZ0KSxFPUUrTWF0aC5pbXVsKGl0LFp0KXwwLG09KG09bStNYXRoLmltdWwoaXQsQXQpfDApK01hdGguaW11bCgkZSxadCl8MCxBPUErTWF0aC5pbXVsKCRlLEF0''@;'; put 'put ''KXwwLEU9RStNYXRoLmltdWwoeXQsc3QpfDAsbT0obT1tK01hdGguaW11bCh5dCx6dCl8MCkrTWF0aC5pbXVsKE10LHN0KXwwLEE9QStNYXRoLmltdWwoTXQsenQpfDAsRT1FK01hdGguaW11bChydCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LFR0KXwwKStNYXRoLmltdWwoUWUsV2UpfDAs''@;'; put 'put ''QT1BK01hdGguaW11bChRZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGtlLGh0KXwwLG09KG09bStNYXRoLmltdWwoa2UseHQpfDApK01hdGguaW11bChBZSxodCl8MCxBPUErTWF0aC5pbXVsKEFlLHh0KXwwLEU9RStNYXRoLmltdWwoUmUsb24pfDAsbT0obT1tK01hdGguaW11bChSZSxqdCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKEllLG9uKXwwLEE9QStNYXRoLmltdWwoSWUsanQpfDAsRT1FK01hdGguaW11bChqZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGplLHBuKXwwKStNYXRoLmltdWwoRGUsY24pfDAsQT1BK01hdGguaW11bChEZSxwbil8MDt2YXIgWWk9KGorKEU9RStNYXRoLmltdWwoTWUsWHQp''@;'; put 'put ''fDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChNZSxlbil8MCkrTWF0aC5pbXVsKHZlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHZlLGVuKXwwKSsobT4+PjEzKXwwKSsoWWk+Pj4yNil8MCxZaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsWnQpLG09KG09TWF0aC5p''@;'; put 'put ''bXVsKEhlLEF0KSkrTWF0aC5pbXVsKGR0LFp0KXwwLEE9TWF0aC5pbXVsKGR0LEF0KSxFPUUrTWF0aC5pbXVsKGl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCgkZSxzdCl8MCxBPUErTWF0aC5pbXVsKCRlLHp0KXwwLEU9RStNYXRoLmltdWwoeXQsV2UpfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bCh5dCxUdCl8MCkrTWF0aC5pbXVsKE10LFdlKXwwLEE9QStNYXRoLmltdWwoTXQsVHQpfDAsRT1FK01hdGguaW11bChydCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LHh0KXwwKStNYXRoLmltdWwoUWUsaHQpfDAsQT1BK01hdGguaW11bChRZSx4dCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKGtlLG9uKXwwLG09KG09bStNYXRoLmltdWwoa2UsanQpfDApK01hdGguaW11bChBZSxvbil8MCxBPUErTWF0aC5pbXVsKEFlLGp0KXwwLEU9RStNYXRoLmltdWwoUmUsY24pfDAsbT0obT1tK01hdGguaW11bChSZSxwbil8MCkrTWF0aC5pbXVsKEllLGNuKXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoSWUscG4pfDA7dmFyIGdvPShqKyhFPUUrTWF0aC5pbXVsKGplLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoamUsZW4pfDApK01hdGguaW11bChEZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChEZSxlbil8MCkrKG0+Pj4xMyl8MCkrKGdvPj4+MjYp''@;'; put 'put ''fDAsZ28mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHN0KSxtPShtPU1hdGguaW11bChIZSx6dCkpK01hdGguaW11bChkdCxzdCl8MCxBPU1hdGguaW11bChkdCx6dCksRT1FK01hdGguaW11bChpdCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFR0KXwwKStNYXRoLmltdWwoJGUsV2UpfDAs''@;'; put 'put ''QT1BK01hdGguaW11bCgkZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoeXQseHQpfDApK01hdGguaW11bChNdCxodCl8MCxBPUErTWF0aC5pbXVsKE10LHh0KXwwLEU9RStNYXRoLmltdWwocnQsb24pfDAsbT0obT1tK01hdGguaW11bChydCxqdCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKFFlLG9uKXwwLEE9QStNYXRoLmltdWwoUWUsanQpfDAsRT1FK01hdGguaW11bChrZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHBuKXwwKStNYXRoLmltdWwoQWUsY24pfDAsQT1BK01hdGguaW11bChBZSxwbil8MDt2YXIgZXI9KGorKEU9RStNYXRoLmltdWwoUmUsWHQp''@;'; put 'put ''fDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChSZSxlbil8MCkrTWF0aC5pbXVsKEllLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEllLGVuKXwwKSsobT4+PjEzKXwwKSsoZXI+Pj4yNil8MCxlciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV2UpLG09KG09TWF0aC5p''@;'; put 'put ''bXVsKEhlLFR0KSkrTWF0aC5pbXVsKGR0LFdlKXwwLEE9TWF0aC5pbXVsKGR0LFR0KSxFPUUrTWF0aC5pbXVsKGl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoaXQseHQpfDApK01hdGguaW11bCgkZSxodCl8MCxBPUErTWF0aC5pbXVsKCRlLHh0KXwwLEU9RStNYXRoLmltdWwoeXQsb24pfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bCh5dCxqdCl8MCkrTWF0aC5pbXVsKE10LG9uKXwwLEE9QStNYXRoLmltdWwoTXQsanQpfDAsRT1FK01hdGguaW11bChydCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LHBuKXwwKStNYXRoLmltdWwoUWUsY24pfDAsQT1BK01hdGguaW11bChRZSxwbil8MDt2YXIg''@;'; put 'put ''Y289KGorKEU9RStNYXRoLmltdWwoa2UsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChrZSxlbil8MCkrTWF0aC5pbXVsKEFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEFlLGVuKXwwKSsobT4+PjEzKXwwKSsoY28+Pj4yNil8MCxjbyY9NjcxMDg4NjMsRT1N''@;'; put 'put ''YXRoLmltdWwoSGUsaHQpLG09KG09TWF0aC5pbXVsKEhlLHh0KSkrTWF0aC5pbXVsKGR0LGh0KXwwLEE9TWF0aC5pbXVsKGR0LHh0KSxFPUUrTWF0aC5pbXVsKGl0LG9uKXwwLG09KG09bStNYXRoLmltdWwoaXQsanQpfDApK01hdGguaW11bCgkZSxvbil8MCxBPUErTWF0aC5pbXVsKCRlLGp0''@;'; put 'put ''KXwwLEU9RStNYXRoLmltdWwoeXQsY24pfDAsbT0obT1tK01hdGguaW11bCh5dCxwbil8MCkrTWF0aC5pbXVsKE10LGNuKXwwLEE9QStNYXRoLmltdWwoTXQscG4pfDA7dmFyIF9vPShqKyhFPUUrTWF0aC5pbXVsKHJ0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwocnQsZW4p''@;'; put 'put ''fDApK01hdGguaW11bChRZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChRZSxlbil8MCkrKG0+Pj4xMyl8MCkrKF9vPj4+MjYpfDAsX28mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLG9uKSxtPShtPU1hdGguaW11bChIZSxqdCkpK01hdGguaW11bChkdCxvbil8MCxBPU1hdGgu''@;'; put 'put ''aW11bChkdCxqdCksRT1FK01hdGguaW11bChpdCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHBuKXwwKStNYXRoLmltdWwoJGUsY24pfDAsQT1BK01hdGguaW11bCgkZSxwbil8MDt2YXIgT289KGorKEU9RStNYXRoLmltdWwoeXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11''@;'; put 'put ''bCh5dCxlbil8MCkrTWF0aC5pbXVsKE10LFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKE10LGVuKXwwKSsobT4+PjEzKXwwKSsoT28+Pj4yNil8MCxPbyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsY24pLG09KG09TWF0aC5pbXVsKEhlLHBuKSkrTWF0aC5pbXVsKGR0LGNuKXww''@;'; put 'put ''LEE9TWF0aC5pbXVsKGR0LHBuKTt2YXIgSG89KGorKEU9RStNYXRoLmltdWwoaXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChpdCxlbil8MCkrTWF0aC5pbXVsKCRlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKCRlLGVuKXwwKSsobT4+PjEzKXwwKSsoSG8+''@;'; put 'put ''Pj4yNil8MCxIbyY9NjcxMDg4NjM7dmFyIGVpPShqKyhFPU1hdGguaW11bChIZSxYdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwoSGUsZW4pKStNYXRoLmltdWwoZHQsWHQpfDApKTw8MTMpfDA7cmV0dXJuIGo9KChBPU1hdGguaW11bChkdCxlbikpKyhtPj4+MTMpfDApKyhlaT4+PjI2''@;'; put 'put ''KXwwLGVpJj02NzEwODg2MyxIWzBdPWhvLEhbMV09TWksSFsyXT1wcixIWzNdPVduLEhbNF09S2ksSFs1XT1RcixIWzZdPUpyLEhbN109QmksSFs4XT1WaSxIWzldPUlvLEhbMTBdPU9yLEhbMTFdPVlpLEhbMTJdPWdvLEhbMTNdPWVyLEhbMTRdPWNvLEhbMTVdPV9vLEhbMTZdPU9vLEhbMTdd''@;'; put 'put ''PUhvLEhbMThdPWVpLDAhPT1qJiYoSFsxOV09aix4Lmxlbmd0aCsrKSx4fTtmdW5jdGlvbiBlZShWLHAsYil7cmV0dXJuKG5ldyBKKS5tdWxwKFYscCxiKX1mdW5jdGlvbiBKKFYscCl7dGhpcy54PVYsdGhpcy55PXB9TWF0aC5pbXVsfHwoWT1XKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlv''@;'; put 'put ''bihwLGIpe3ZhciB4LEM9dGhpcy5sZW5ndGgrcC5sZW5ndGg7cmV0dXJuIHg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1wLmxlbmd0aD9ZKHRoaXMscCxiKTpDPDYzP1codGhpcyxwLGIpOkM8MTAyND9mdW5jdGlvbiBYKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZSxi''@;'; put 'put ''Lmxlbmd0aD1WLmxlbmd0aCtwLmxlbmd0aDtmb3IodmFyIHg9MCxDPTAsVD0wO1Q8Yi5sZW5ndGgtMTtUKyspe3ZhciBIPUM7Qz0wO2Zvcih2YXIgaj02NzEwODg2MyZ4LEU9TWF0aC5taW4oVCxwLmxlbmd0aC0xKSxtPU1hdGgubWF4KDAsVC1WLmxlbmd0aCsxKTttPD1FO20rKyl7dmFyIHNl''@;'; put 'put ''PSgwfFYud29yZHNbVC1tXSkqKDB8cC53b3Jkc1ttXSksd2U9NjcxMDg4NjMmc2U7aj02NzEwODg2MyYod2U9d2UranwwKSxDKz0oSD0oSD1IKyhzZS82NzEwODg2NHwwKXwwKSsod2U+Pj4yNil8MCk+Pj4yNixIJj02NzEwODg2M31iLndvcmRzW1RdPWoseD1ILEg9Q31yZXR1cm4gMCE9PXg/''@;'; put 'put ''Yi53b3Jkc1tUXT14OmIubGVuZ3RoLS0sYi5zdHJpcCgpfSh0aGlzLHAsYik6ZWUodGhpcyxwLGIpLHh9LEoucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PXcucHJvdG90eXBlLl9jb3VudEJpdHMocCktMSxDPTA7QzxwO0MrKyliW0NdPXRo''@;'; put 'put ''aXMucmV2QmluKEMseCxwKTtyZXR1cm4gYn0sSi5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHAsYix4KXtpZigwPT09cHx8cD09PXgtMSlyZXR1cm4gcDtmb3IodmFyIEM9MCxUPTA7VDxiO1QrKylDfD0oMSZwKTw8Yi1ULTEscD4+PTE7cmV0dXJuIEN9LEoucHJvdG90eXBlLnBlcm11dGU9''@;'; put 'put ''ZnVuY3Rpb24ocCxiLHgsQyxULEgpe2Zvcih2YXIgaj0wO2o8SDtqKyspQ1tqXT1iW3Bbal1dLFRbal09eFtwW2pdXX0sSi5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXt0aGlzLnBlcm11dGUoSCxwLGIseCxDLFQpO2Zvcih2YXIgaj0xO2o8VDtqPDw9MSlmb3Io''@;'; put 'put ''dmFyIEU9ajw8MSxtPU1hdGguY29zKDIqTWF0aC5QSS9FKSxBPU1hdGguc2luKDIqTWF0aC5QSS9FKSxvZT0wO29lPFQ7b2UrPUUpZm9yKHZhciB0ZT1tLHNlPUEsd2U9MDt3ZTxqO3dlKyspe3ZhciBVZT14W29lK3dlXSxKZT1DW29lK3dlXSxhdD14W29lK3dlK2pdLE1lPUNbb2Urd2Ural0s''@;'; put 'put ''dmU9dGUqYXQtc2UqTWU7TWU9dGUqTWUrc2UqYXQseFtvZSt3ZV09VWUrKGF0PXZlKSxDW29lK3dlXT1KZStNZSx4W29lK3dlK2pdPVVlLWF0LENbb2Urd2Ural09SmUtTWUsd2UhPT1FJiYodmU9bSp0ZS1BKnNlLHNlPW0qc2UrQSp0ZSx0ZT12ZSl9fSxKLnByb3RvdHlwZS5ndWVzc0xlbjEz''@;'; put 'put ''Yj1mdW5jdGlvbihwLGIpe3ZhciB4PTF8TWF0aC5tYXgoYixwKSxDPTEmeCxUPTA7Zm9yKHg9eC8yfDA7eDt4Pj4+PTEpVCsrO3JldHVybiAxPDxUKzErQ30sSi5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHAsYix4KXtpZighKHg8PTEpKWZvcih2YXIgQz0wO0M8eC8yO0MrKyl7dmFy''@;'; put 'put ''IFQ9cFtDXTtwW0NdPXBbeC1DLTFdLHBbeC1DLTFdPVQsVD1iW0NdLGJbQ109LWJbeC1DLTFdLGJbeC1DLTFdPS1UfX0sSi5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTAsQz0wO0M8Yi8yO0MrKyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5kKHBbMipDKzFd''@;'; put 'put ''L2IpK01hdGgucm91bmQocFsyKkNdL2IpK3g7cFtDXT02NzEwODg2MyZULHg9VDw2NzEwODg2ND8wOlQvNjcxMDg4NjR8MH1yZXR1cm4gcH0sSi5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihwLGIseCxDKXtmb3IodmFyIFQ9MCxIPTA7SDxiO0grKyl4WzIqSF09ODE5MSYoVCs9MHxw''@;'; put 'put ''W0hdKSx4WzIqSCsxXT04MTkxJihUPj4+PTEzKSxUPj4+PTEzO2ZvcihIPTIqYjtIPEM7KytIKXhbSF09MDtnKDA9PT1UKSxnKCEoLTgxOTImVCkpfSxKLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD0wO3g8cDt4KyspYlt4XT0wO3JldHVybiBi''@;'; put 'put ''fSxKLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz0yKnRoaXMuZ3Vlc3NMZW4xM2IocC5sZW5ndGgsYi5sZW5ndGgpLFQ9dGhpcy5tYWtlUkJUKEMpLEg9dGhpcy5zdHViKEMpLGo9bmV3IEFycmF5KEMpLEU9bmV3IEFycmF5KEMpLG09bmV3IEFycmF5KEMpLEE9bmV3IEFy''@;'; put 'put ''cmF5KEMpLG9lPW5ldyBBcnJheShDKSx0ZT1uZXcgQXJyYXkoQyksc2U9eC53b3JkcztzZS5sZW5ndGg9Qyx0aGlzLmNvbnZlcnQxM2IocC53b3JkcyxwLmxlbmd0aCxqLEMpLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLEEsQyksdGhpcy50cmFuc2Zvcm0oaixILEUsbSxDLFQp''@;'; put 'put ''LHRoaXMudHJhbnNmb3JtKEEsSCxvZSx0ZSxDLFQpO2Zvcih2YXIgd2U9MDt3ZTxDO3dlKyspe3ZhciBVZT1FW3dlXSpvZVt3ZV0tbVt3ZV0qdGVbd2VdO21bd2VdPUVbd2VdKnRlW3dlXSttW3dlXSpvZVt3ZV0sRVt3ZV09VWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKEUsbSxDKSx0aGlzLnRy''@;'; put 'put ''YW5zZm9ybShFLG0sc2UsSCxDLFQpLHRoaXMuY29uanVnYXRlKHNlLEgsQyksdGhpcy5ub3JtYWxpemUxM2Ioc2UsQykseC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9cC5sZW5ndGgrYi5sZW5ndGgseC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24o''@;'; put 'put ''cCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSx0aGlzLm11bFRvKHAsYil9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVu''@;'; put 'put ''Z3RoK3AubGVuZ3RoKSxlZSh0aGlzLHAsYil9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhwLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KTtmb3IodmFy''@;'; put 'put ''IGI9MCx4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKnAsVD0oNjcxMDg4NjMmQykrKDY3MTA4ODYzJmIpO2I+Pj0yNixiKz1DLzY3MTA4ODY0fDAsYis9VD4+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PWImJih0aGlzLndvcmRz''@;'; put 'put ''W3hdPWIsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHApfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwKXt2YXIgYj1mdW5jdGlvbiBVKFYpe2Zvcih2YXIgcD1uZXcgQXJyYXkoVi5iaXRMZW5ndGgoKSksYj0wO2I8cC5sZW5ndGg7YisrKXt2YXIgQz1iJTI2O3BbYl09KFYud29yZHNbYi8yNnww''@;'; put 'put ''XSYxPDxDKT4+PkN9cmV0dXJuIHB9KHApO2lmKDA9PT1iLmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciB4PXRoaXMsQz0wO0M8Yi5sZW5ndGgmJjA9PT1iW0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzxiLmxlbmd0aClmb3IodmFyIFQ9eC5zcXIoKTtDPGIubGVuZ3RoO0MrKyxUPVQu''@;'; put 'put ''c3FyKCkpMCE9PWJbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgVCxiPXAlMjYseD0ocC1iKS8yNixDPTY3MTA4ODYzPj4+MjYtYjw8MjYtYjtpZigwIT09Yil7dmFyIEg9MDtm''@;'; put 'put ''b3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgaj10aGlzLndvcmRzW1RdJkM7dGhpcy53b3Jkc1tUXT0oMHx0aGlzLndvcmRzW1RdKS1qPDxifEgsSD1qPj4+MjYtYn1IJiYodGhpcy53b3Jkc1tUXT1ILHRoaXMubGVuZ3RoKyspfWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+''@;'; put 'put ''PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4O1QrKyl0aGlzLndvcmRzW1RdPTA7dGhpcy5sZW5ndGgrPXh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRo''@;'; put 'put ''aXMuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24ocCxiLHgpe3ZhciBDO2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKSxDPWI/KGItYiUyNikvMjY6MDt2YXIgVD1wJTI2LEg9TWF0aC5taW4oKHAtVCkvMjYsdGhpcy5sZW5ndGgpLGo9NjcxMDg4NjNeNjcxMDg4NjM+''@;'; put 'put ''Pj5UPDxULEU9eDtpZihDLT1ILEM9TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09MDttPEg7bSsrKUUud29yZHNbbV09dGhpcy53b3Jkc1ttXTtFLmxlbmd0aD1IfWlmKDAhPT1IKWlmKHRoaXMubGVuZ3RoPkgpZm9yKHRoaXMubGVuZ3RoLT1ILG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlz''@;'; put 'put ''LndvcmRzW21dPXRoaXMud29yZHNbbStIXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBBPTA7Zm9yKG09dGhpcy5sZW5ndGgtMTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIG9lPTB8dGhpcy53b3Jkc1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8b2U+Pj5U''@;'; put 'put ''LEE9b2Uman1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZygwPT09dGhpcy5u''@;'; put 'put ''ZWdhdGl2ZSksdGhpcy5pdXNocm4ocCxiLHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4ocCl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5zaHJu''@;'; put 'put ''PWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4ocCl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHApfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFy''@;'; put 'put ''IGI9cCUyNix4PShwLWIpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhpcy53b3Jkc1t4XSYxPDxiKSl9LHcucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiBnKDA9PT10aGlz''@;'; put 'put ''Lm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9eD90aGlzOigwIT09YiYmeCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT1iJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNe''@;'; put 'put ''NjcxMDg4NjM+Pj5iPDxiKSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihwKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQp''@;'; put 'put ''LHA8MD90aGlzLmlzdWJuKC1wKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHA/KHRoaXMud29yZHNbMF09cC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHApLHRo''@;'; put 'put ''aXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihwKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHApe3RoaXMud29yZHNbMF0rPXA7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXT49NjcxMDg4NjQ7YisrKXRoaXMud29yZHNbYl0tPTY3MTA4ODY0LGI9''@;'; put 'put ''PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbYisxXT0xOnRoaXMud29yZHNbYisxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxiKzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHApe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8Njcx''@;'; put 'put ''MDg4NjQpLHA8MClyZXR1cm4gdGhpcy5pYWRkbigtcCk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXAsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDAp''@;'; put 'put ''dGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPDA7YisrKXRoaXMud29yZHNbYl0rPTY3MTA4ODY0LHRoaXMud29yZHNbYisxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4ocCl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihwKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAs''@;'; put 'put ''dGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihwLGIseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKHAubGVuZ3RoK3gpO3ZhciBILGo9MDtmb3IoVD0wO1Q8cC5sZW5ndGg7VCsr''@;'; put 'put ''KXtIPSgwfHRoaXMud29yZHNbVCt4XSkrajt2YXIgRT0oMHxwLndvcmRzW1RdKSpiO2o9KChILT02NzEwODg2MyZFKT4+MjYpLShFLzY3MTA4ODY0fDApLHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIfWZvcig7VDx0aGlzLmxlbmd0aC14O1QrKylqPShIPSgwfHRoaXMud29yZHNbVCt4XSkr''@;'; put 'put ''aik+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIO2lmKDA9PT1qKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKGcoLTE9PT1qKSxqPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKWo9KEg9LSgwfHRoaXMud29yZHNbVF0pK2opPj4yNix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJkg7cmV0dXJu''@;'; put 'put ''IHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmNsb25lKCksVD1wLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRoaXMuX2NvdW50Qml0cyhIKSkmJihUPVQudXNobG4oeCksQy5pdXNo''@;'; put 'put ''bG4oeCksSD0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgtVC5sZW5ndGg7aWYoIm1vZCIhPT1iKXsobT1uZXcgdyhudWxsKSkubGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0aCk7Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0w''@;'; put 'put ''fXZhciBvZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09b2UubmVnYXRpdmUmJihDPW9lLG0mJihtLndvcmRzW0VdPTEpKTtmb3IodmFyIHRlPUUtMTt0ZT49MDt0ZS0tKXt2YXIgc2U9NjcxMDg4NjQqKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZV0pKygwfEMud29yZHNbVC5sZW5n''@;'; put 'put ''dGgrdGUtMV0pO2ZvcihzZT1NYXRoLm1pbihzZS9IfDAsNjcxMDg4NjMpLEMuX2lzaGxuc3VibXVsKFQsc2UsdGUpOzAhPT1DLm5lZ2F0aXZlOylzZS0tLEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsdGUpLEMuaXNaZXJvKCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1t0''@;'; put 'put ''ZV09c2UpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09YiYmMCE9PXgmJkMuaXVzaHJuKHgpLHtkaXY6bXx8bnVsbCxtb2Q6Q319LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGcoIXAuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2Rpdjpu''@;'; put 'put ''ZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLGIpLCJtb2QiIT09YiYmKEM9SC5kaXYubmVnKCkpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChwKSks''@;'; put 'put ''e2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlPyhIPXRoaXMuZGl2bW9kKHAubmVnKCksYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSkse2RpdjpDLG1vZDpILm1vZH0pOnRoaXMubmVnYXRpdmUmcC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1v''@;'; put 'put ''ZChwLm5lZygpLGIpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaXN1YihwKSkse2RpdjpILmRpdixtb2Q6VH0pOnAubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChwKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1wLmxlbmd0aD8iZGl2''@;'; put 'put ''Ij09PWI/e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09Yj97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp0aGlzLl93''@;'; put 'put ''b3JkRGl2KHAsYik7dmFyIEMsVCxIfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVt''@;'; put 'put ''b2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5kaXZtb2QocCk7aWYoYi5tb2QuaXNaZXJvKCkpcmV0dXJuIGIuZGl2O3ZhciB4PTAhPT1iLmRpdi5uZWdhdGl2ZT9iLm1v''@;'; put 'put ''ZC5pc3ViKHApOmIubW9kLEM9cC51c2hybigxKSxUPXAuYW5kbG4oMSksSD14LmNtcChDKTtyZXR1cm4gSDwwfHwxPT09VCYmMD09PUg/Yi5kaXY6MCE9PWIuZGl2Lm5lZ2F0aXZlP2IuZGl2LmlzdWJuKDEpOmIuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHApe2co''@;'; put 'put ''cDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0oMTw8MjYpJXAseD0wLEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl4PShiKngrKDB8dGhpcy53b3Jkc1tDXSkpJXA7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0wLHg9dGhpcy5s''@;'; put 'put ''ZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQqYjt0aGlzLndvcmRzW3hdPUMvcHwwLGI9QyVwfXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihwKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuZWdjZD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPW5ldyB3KDApLGo9bmV3IHco''@;'; put 'put ''MSksRT0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7KWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpLCsrRTtmb3IodmFyIG09eC5jbG9uZSgpLEE9Yi5jbG9uZSgpOyFiLmlzWmVybygpOyl7Zm9yKHZhciBvZT0wLHRlPTE7IShiLndvcmRzWzBdJnRlKSYmb2U8MjY7KytvZSx0ZTw8PTEpO2lmKG9l''@;'; put 'put ''PjApZm9yKGIuaXVzaHJuKG9lKTtvZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2RkKCkpJiYoQy5pYWRkKG0pLFQuaXN1YihBKSksQy5pdXNocm4oMSksVC5pdXNocm4oMSk7Zm9yKHZhciBzZT0wLHdlPTE7ISh4LndvcmRzWzBdJndlKSYmc2U8MjY7KytzZSx3ZTw8PTEpO2lmKHNlPjApZm9y''@;'; put 'put ''KHguaXVzaHJuKHNlKTtzZS0tID4wOykoSC5pc09kZCgpfHxqLmlzT2RkKCkpJiYoSC5pYWRkKG0pLGouaXN1YihBKSksSC5pdXNocm4oMSksai5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoSCksVC5pc3ViKGopKTooeC5pc3ViKGIpLEguaXN1YihDKSxqLmlzdWIo''@;'; put 'put ''VCkpfXJldHVybnthOkgsYjpqLGdjZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgb2UsYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtm''@;'; put 'put ''b3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPXguY2xvbmUoKTtiLmNtcG4oMSk+MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFyIGo9MCxFPTE7IShiLndvcmRzWzBdJkUpJiZqPDI2OysraixFPDw9MSk7aWYoaj4wKWZvcihiLml1c2hybihqKTtqLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRk''@;'; put 'put ''KEgpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkmJm08MjY7KyttLEE8PD0xKTtpZihtPjApZm9yKHguaXVzaHJuKG0pO20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoSCksVC5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoVCkpOih4''@;'; put 'put ''LmlzdWIoYiksVC5pc3ViKEMpKX1yZXR1cm4ob2U9MD09PWIuY21wbigxKT9DOlQpLmNtcG4oMCk8MCYmb2UuaWFkZChwKSxvZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHApe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHAuYWJzKCk7aWYocC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMo''@;'; put 'put ''KTt2YXIgYj10aGlzLmNsb25lKCkseD1wLmNsb25lKCk7Yi5uZWdhdGl2ZT0wLHgubmVnYXRpdmU9MDtmb3IodmFyIEM9MDtiLmlzRXZlbigpJiZ4LmlzRXZlbigpO0MrKyliLml1c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zvcig7Yi5pc0V2ZW4oKTspYi5pdXNocm4oMSk7Zm9yKDt4''@;'; put 'put ''LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD1iLmNtcCh4KTtpZihUPDApe3ZhciBIPWI7Yj14LHg9SH1lbHNlIGlmKDA9PT1UfHwwPT09eC5jbXBuKDEpKWJyZWFrO2IuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuZWdjZChwKS5hLnVtb2QocCl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihwKXty''@;'; put 'put ''ZXR1cm4gdGhpcy53b3Jkc1swXSZwfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCk7dmFyIGI9cCUyNix4PShwLWIpLzI2LEM9MTw8YjtpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0''@;'; put 'put ''aGlzO2Zvcih2YXIgVD1DLEg9eDswIT09VCYmSDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPTB8dGhpcy53b3Jkc1tIXTtUPShqKz1UKT4+PjI2LHRoaXMud29yZHNbSF09aiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYodGhpcy53b3Jkc1tIXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJv''@;'; put 'put ''dG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhYilyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYm''@;'; put 'put ''YilyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxzZXtiJiYocD0tcCksZyhwPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09cD8wOkM8cD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14''@;'; put 'put ''Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihwKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBiPXRoaXMudWNtcChwKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRp''@;'; put 'put ''dmU/MHwtYjpifSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHApe2lmKHRoaXMubGVuZ3RoPnAubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHAubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hd''@;'; put 'put ''LFQ9MHxwLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/Yj0tMTpDPlQmJihiPTEpO2JyZWFrfX1yZXR1cm4gYn0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wKHAp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wbihwKX0sdy5wcm90''@;'; put 'put ''b3R5cGUubHQ9ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcChwKX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXBuKHApPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPD0wfSx3LnByb3RvdHlwZS5lcW49''@;'; put 'put ''ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5jbXAocCl9LHcucmVkPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgU2UocCl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0''@;'; put 'put ''aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLGcoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIGcodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnJlZD1wLHRoaXN9LHcucHJv''@;'; put 'put ''dG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEFkZCB3''@;'; put 'put ''b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMscCl9LHcu''@;'; put 'put ''cHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3Vi''@;'; put 'put ''IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMscCl9LHcu''@;'; put 'put ''cHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQubXVsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24ocCl7''@;'; put 'put ''cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHApLHRoaXMucmVkLmltdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxciB3b3Jr''@;'; put 'put ''cyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJl''@;'; put 'put ''ZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0''@;'; put 'put ''aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiBnKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQmJiFwLnJlZCwicmVk''@;'; put 'put ''UG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxwKX07dmFyIHJlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gaWUoVixwKXt0aGlzLm5hbWU9Vix0aGlzLnA9bmV3IHcocCwxNiksdGhp''@;'; put 'put ''cy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGxlKCl7aWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBtZSgpe2llLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gX2UoKXtpZS5jYWxsKHRoaXMsInAxOTIi''@;'; put 'put ''LCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFRlKCl7aWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1m''@;'; put 'put ''dW5jdGlvbiBTZShWKXtpZigic3RyaW5nIj09dHlwZW9mIFYpe3ZhciBwPXcuX3ByaW1lKFYpO3RoaXMubT1wLnAsdGhpcy5wcmltZT1wfWVsc2UgZyhWLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPVYsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIHpl''@;'; put 'put ''KFYpe1NlLmNhbGwodGhpcyxWKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkp''@;'; put 'put ''LHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWllLnByb3RvdHlwZS5f''@;'; put 'put ''dG1wPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHAud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxwfSxpZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihwKXt2YXIgeCxiPXA7ZG97dGhpcy5zcGxpdChiLHRoaXMudG1wKSx4PShiPShiPXRoaXMu''@;'; put 'put ''aW11bEsoYikpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRoaXMubik7dmFyIEM9eDx0aGlzLm4/LTE6Yi51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1DPyhiLndvcmRzWzBdPTAsYi5sZW5ndGg9MSk6Qz4wP2IuaXN1Yih0aGlzLnApOnZvaWQgMCE9PWIuc3RyaXA/Yi5z''@;'; put 'put ''dHJpcCgpOmIuX3N0cmlwKCksYn0saWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7cC5pdXNocm4odGhpcy5uLDAsYil9LGllLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pbXVsKHRoaXMuayl9LEIobGUsaWUpLGxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlv''@;'; put 'put ''bihwLGIpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4ocC5sZW5ndGgsOSksVD0wO1Q8QztUKyspYi53b3Jkc1tUXT1wLndvcmRzW1RdO2lmKGIubGVuZ3RoPUMscC5sZW5ndGg8PTkpcmV0dXJuIHAud29yZHNbMF09MCx2b2lkKHAubGVuZ3RoPTEpO3ZhciBIPXAud29yZHNbOV07Zm9y''@;'; put 'put ''KGIud29yZHNbYi5sZW5ndGgrK109SCZ4LFQ9MTA7VDxwLmxlbmd0aDtUKyspe3ZhciBqPTB8cC53b3Jkc1tUXTtwLndvcmRzW1QtMTBdPShqJngpPDw0fEg+Pj4yMixIPWp9cC53b3Jkc1tULTEwXT1IPj4+PTIyLHAubGVuZ3RoLT0wPT09SCYmcC5sZW5ndGg+MTA/MTA6OX0sbGUucHJvdG90''@;'; put 'put ''eXBlLmltdWxLPWZ1bmN0aW9uKHApe3Aud29yZHNbcC5sZW5ndGhdPTAscC53b3Jkc1twLmxlbmd0aCsxXT0wLHAubGVuZ3RoKz0yO2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MHxwLndvcmRzW3hdO3Aud29yZHNbeF09NjcxMDg4NjMmKGIrPTk3NypDKSxiPTY0KkMr''@;'; put 'put ''KGIvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiYocC5sZW5ndGgtLSwwPT09cC53b3Jkc1twLmxlbmd0aC0xXSYmcC5sZW5ndGgtLSkscH0sQihtZSxpZSksQihfZSxpZSksQihUZSxpZSksVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe2Zvcih2YXIg''@;'; put 'put ''Yj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8cC53b3Jkc1t4XSkrYixUPTY3MTA4ODYzJkM7Qz4+Pj0yNixwLndvcmRzW3hdPVQsYj1DfXJldHVybiAwIT09YiYmKHAud29yZHNbcC5sZW5ndGgrK109YikscH0sdy5fcHJpbWU9ZnVuY3Rpb24ocCl7aWYocmVbcF0pcmV0dXJu''@;'; put 'put ''IHJlW3BdO3ZhciBiO2lmKCJrMjU2Ij09PXApYj1uZXcgbGU7ZWxzZSBpZigicDIyNCI9PT1wKWI9bmV3IG1lO2Vsc2UgaWYoInAxOTIiPT09cCliPW5ldyBfZTtlbHNle2lmKCJwMjU1MTkiIT09cCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitwKTtiPW5ldyBUZX1yZXR1cm4g''@;'; put 'put ''cmVbcF09YixifSxTZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKHAucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5j''@;'; put 'put ''dGlvbihwLGIpe2coIShwLm5lZ2F0aXZlfGIubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQmJnAucmVkPT09Yi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24ocCl7cmV0dXJu''@;'; put 'put ''IHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHApLl9mb3JjZVJlZCh0aGlzKTpwLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaXNaZXJvKCk/cC5jbG9uZSgpOnRoaXMubS5zdWIocCkuX2ZvcmNlUmVkKHRo''@;'; put 'put ''aXMpfSxTZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCxiKXt0aGlz''@;'; put 'put ''Ll92ZXJpZnkyKHAsYik7dmFyIHg9cC5pYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRk''@;'; put 'put ''KHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuaXN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24ocCxiKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5fdmVyaWZ5MShwKSx0aGlzLmltb2QocC51c2hsbihiKSl9LFNlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5pbXVsKGIpKX0sU2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0''@;'; put 'put ''aGlzLl92ZXJpZnkyKHAsYiksdGhpcy5pbW9kKHAubXVsKGIpKX0sU2UucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW11bChwLHAuY2xvbmUoKSl9LFNlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubXVsKHAscCl9LFNlLnByb3RvdHlwZS5z''@;'; put 'put ''cXJ0PWZ1bmN0aW9uKHApe2lmKHAuaXNaZXJvKCkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgYj10aGlzLm0uYW5kbG4oMyk7aWYoZyhiJTI9PTEpLDM9PT1iKXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHAseCl9Zm9yKHZhciBDPXRoaXMubS5z''@;'; put 'put ''dWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1c2hybigxKTtnKCFDLmlzWmVybygpKTt2YXIgSD1uZXcgdygxKS50b1JlZCh0aGlzKSxqPUgucmVkTmVnKCksRT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09''@;'; put 'put ''bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChqKTspbS5yZWRJQWRkKGopO2Zvcih2YXIgQT10aGlzLnBvdyhtLEMpLG9lPXRoaXMucG93KHAsQy5hZGRuKDEpLml1c2hybigxKSksdGU9dGhpcy5wb3cocCxDKSxzZT1UOzAhPT10ZS5jbXAoSCk7KXtmb3Io''@;'; put 'put ''dmFyIHdlPXRlLFVlPTA7MCE9PXdlLmNtcChIKTtVZSsrKXdlPXdlLnJlZFNxcigpO2coVWU8c2UpO3ZhciBKZT10aGlzLnBvdyhBLG5ldyB3KDEpLml1c2hsbihzZS1VZS0xKSk7b2U9b2UucmVkTXVsKEplKSxBPUplLnJlZFNxcigpLHRlPXRlLnJlZE11bChBKSxzZT1VZX1yZXR1cm4gb2V9''@;'; put 'put ''LFNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3ZhciBiPXAuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1iLm5lZ2F0aXZlPyhiLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKGIpLnJlZE5lZygpKTp0aGlzLmltb2QoYil9LFNlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCxiKXtpZihiLmlz''@;'; put 'put ''WmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09Yi5jbXBuKDEpKXJldHVybiBwLmNsb25lKCk7dmFyIEM9bmV3IEFycmF5KDE2KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09cDtmb3IodmFyIFQ9MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENb''@;'; put 'put ''VC0xXSxwKTt2YXIgSD1DWzBdLGo9MCxFPTAsbT1iLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bSYmKG09MjYpLFQ9Yi5sZW5ndGgtMTtUPj0wO1QtLSl7Zm9yKHZhciBBPWIud29yZHNbVF0sb2U9bS0xO29lPj0wO29lLS0pe3ZhciB0ZT1BPj5vZSYxO0ghPT1DWzBdJiYoSD10aGlzLnNxcihI''@;'; put 'put ''KSksMCE9PXRlfHwwIT09aj8oajw8PTEsanw9dGUsKDQ9PSsrRXx8MD09PVQmJjA9PT1vZSkmJihIPXRoaXMubXVsKEgsQ1tqXSksRT0wLGo9MCkpOkU9MH1tPTI2fXJldHVybiBIfSxTZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3ZhciBiPXAudW1vZCh0aGlzLm0pO3JldHVy''@;'; put 'put ''biBiPT09cD9iLmNsb25lKCk6Yn0sU2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHApe3ZhciBiPXAuY2xvbmUoKTtyZXR1cm4gYi5yZWQ9bnVsbCxifSx3Lm1vbnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyB6ZShwKX0sQih6ZSxTZSksemUucHJvdG90eXBlLmNvbnZlcnRUbz1m''@;'; put 'put ''dW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAudXNobG4odGhpcy5zaGlmdCkpfSx6ZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5pbW9kKHAubXVsKHRoaXMucmludikpO3JldHVybiBiLnJlZD1udWxsLGJ9LHplLnByb3RvdHlwZS5pbXVsPWZ1bmN0''@;'; put 'put ''aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gcC53b3Jkc1swXT0wLHAubGVuZ3RoPTEscDt2YXIgeD1wLmltdWwoYiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5p''@;'; put 'put ''dXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0semUucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNa''@;'; put 'put ''ZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1wLm11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQu''@;'; put 'put ''Y21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSx6ZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9y''@;'; put 'put ''Y2VSZWQodGhpcyl9fSh1ZT1fLm5tZCh1ZSksdGhpcyl9LDM0ODI6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg1NzE3KSx5PV8oMjMxOCksZz1fKDk3ODUpLEI9Xyg5MDcyKSx3PV8oMTAyNyk7ZnVuY3Rpb24gUChGKXt3LmNhbGwodGhpcywiZGlnZXN0IiksdGhpcy5faGFzaD1G''@;'; put 'put ''fUkoUCx3KSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEYpe3RoaXMuX2hhc2gudXBkYXRlKEYpfSxQLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGFzaC5kaWdlc3QoKX0sdWUuZXhwb3J0cz1mdW5jdGlvbihPKXtyZXR1cm4ibWQ1Ij09PShPPU8udG9M''@;'; put 'put ''b3dlckNhc2UoKSk/bmV3IHk6InJtZDE2MCI9PT1PfHwicmlwZW1kMTYwIj09PU8/bmV3IGc6bmV3IFAoQihPKSl9fSw4MDI4Oih1ZSxxLF8pPT57dmFyIEk9XygyMzE4KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKHkpe3JldHVybihuZXcgSSkudXBkYXRlKHkpLmRpZ2VzdCgpfX0sODM1NToodWUs''@;'; put 'put ''cSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDU3MTcpLHk9XygxMDMxKSxnPV8oMTAyNyksQj1fKDk1MDkpLkJ1ZmZlcix3PV8oODAyOCksUD1fKDk3ODUpLEY9Xyg5MDcyKSxPPUIuYWxsb2MoMTI4KTtmdW5jdGlvbiB6KE4sTCl7Zy5jYWxsKHRoaXMsImRpZ2VzdCIpLCJzdHJpbmciPT10''@;'; put 'put ''eXBlb2YgTCYmKEw9Qi5mcm9tKEwpKTt2YXIgSz0ic2hhNTEyIj09PU58fCJzaGEzODQiPT09Tj8xMjg6NjQ7dGhpcy5fYWxnPU4sdGhpcy5fa2V5PUwsTC5sZW5ndGg+Sz9MPSgicm1kMTYwIj09PU4/bmV3IFA6RihOKSkudXBkYXRlKEwpLmRpZ2VzdCgpOkwubGVuZ3RoPEsmJihMPUIuY29u''@;'; put 'put ''Y2F0KFtMLE9dLEspKTtmb3IodmFyIFc9dGhpcy5faXBhZD1CLmFsbG9jVW5zYWZlKEspLFk9dGhpcy5fb3BhZD1CLmFsbG9jVW5zYWZlKEspLFg9MDtYPEs7WCsrKVdbWF09NTReTFtYXSxZW1hdPTkyXkxbWF07dGhpcy5faGFzaD0icm1kMTYwIj09PU4/bmV3IFA6RihOKSx0aGlzLl9oYXNo''@;'; put 'put ''LnVwZGF0ZShXKX1JKHosZyksei5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihOKXt0aGlzLl9oYXNoLnVwZGF0ZShOKX0sei5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIE49dGhpcy5faGFzaC5kaWdlc3QoKTtyZXR1cm4oInJtZDE2MCI9PT10aGlzLl9hbGc/bmV3IFA6Rih0''@;'; put 'put ''aGlzLl9hbGcpKS51cGRhdGUodGhpcy5fb3BhZCkudXBkYXRlKE4pLmRpZ2VzdCgpfSx1ZS5leHBvcnRzPWZ1bmN0aW9uKEwsSyl7cmV0dXJuInJtZDE2MCI9PT0oTD1MLnRvTG93ZXJDYXNlKCkpfHwicmlwZW1kMTYwIj09PUw/bmV3IHooInJtZDE2MCIsSyk6Im1kNSI9PT1MP25ldyB5KHcs''@;'; put 'put ''Syk6bmV3IHooTCxLKX19LDEwMzE6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg1NzE3KSx5PV8oOTUwOSkuQnVmZmVyLGc9XygxMDI3KSxCPXkuYWxsb2MoMTI4KSx3PTY0O2Z1bmN0aW9uIFAoRixPKXtnLmNhbGwodGhpcywiZGlnZXN0IiksInN0cmluZyI9PXR5cGVvZiBPJiYo''@;'; put 'put ''Tz15LmZyb20oTykpLHRoaXMuX2FsZz1GLHRoaXMuX2tleT1PLE8ubGVuZ3RoPnc/Tz1GKE8pOk8ubGVuZ3RoPHcmJihPPXkuY29uY2F0KFtPLEJdLHcpKTtmb3IodmFyIHo9dGhpcy5faXBhZD15LmFsbG9jVW5zYWZlKHcpLE49dGhpcy5fb3BhZD15LmFsbG9jVW5zYWZlKHcpLEw9MDtMPHc7''@;'; put 'put ''TCsrKXpbTF09NTReT1tMXSxOW0xdPTkyXk9bTF07dGhpcy5faGFzaD1bel19SShQLGcpLFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oRil7dGhpcy5faGFzaC5wdXNoKEYpfSxQLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgRj10aGlzLl9hbGcoeS5jb25jYXQodGhpcy5f''@;'; put 'put ''aGFzaCkpO3JldHVybiB0aGlzLl9hbGcoeS5jb25jYXQoW3RoaXMuX29wYWQsRl0pKX0sdWUuZXhwb3J0cz1QfSw1ODM1Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3EucmFuZG9tQnl0ZXM9cS5ybmc9cS5wc2V1ZG9SYW5kb21CeXRlcz1xLnBybmc9XygxNzk4KSxxLmNyZWF0ZUhhc2g9cS5I''@;'; put 'put ''YXNoPV8oMzQ4MikscS5jcmVhdGVIbWFjPXEuSG1hYz1fKDgzNTUpO3ZhciBJPV8oNjA0MikseT1PYmplY3Qua2V5cyhJKSxnPVsic2hhMSIsInNoYTIyNCIsInNoYTI1NiIsInNoYTM4NCIsInNoYTUxMiIsIm1kNSIsInJtZDE2MCJdLmNvbmNhdCh5KTtxLmdldEhhc2hlcz1mdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBnfTt2YXIgQj1fKDU2MzIpO3EucGJrZGYyPUIucGJrZGYyLHEucGJrZGYyU3luYz1CLnBia2RmMlN5bmM7dmFyIHc9XygzNjE0KTtxLkNpcGhlcj13LkNpcGhlcixxLmNyZWF0ZUNpcGhlcj13LmNyZWF0ZUNpcGhlcixxLkNpcGhlcml2PXcuQ2lwaGVyaXYscS5jcmVhdGVDaXBo''@;'; put 'put ''ZXJpdj13LmNyZWF0ZUNpcGhlcml2LHEuRGVjaXBoZXI9dy5EZWNpcGhlcixxLmNyZWF0ZURlY2lwaGVyPXcuY3JlYXRlRGVjaXBoZXIscS5EZWNpcGhlcml2PXcuRGVjaXBoZXJpdixxLmNyZWF0ZURlY2lwaGVyaXY9dy5jcmVhdGVEZWNpcGhlcml2LHEuZ2V0Q2lwaGVycz13LmdldENpcGhl''@;'; put 'put ''cnMscS5saXN0Q2lwaGVycz13Lmxpc3RDaXBoZXJzO3ZhciBQPV8oMjYwNyk7cS5EaWZmaWVIZWxsbWFuR3JvdXA9UC5EaWZmaWVIZWxsbWFuR3JvdXAscS5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXA9UC5jcmVhdGVEaWZmaWVIZWxsbWFuR3JvdXAscS5nZXREaWZmaWVIZWxsbWFuPVAuZ2V0''@;'; put 'put ''RGlmZmllSGVsbG1hbixxLmNyZWF0ZURpZmZpZUhlbGxtYW49UC5jcmVhdGVEaWZmaWVIZWxsbWFuLHEuRGlmZmllSGVsbG1hbj1QLkRpZmZpZUhlbGxtYW47dmFyIEY9Xyg0NzQzKTtxLmNyZWF0ZVNpZ249Ri5jcmVhdGVTaWduLHEuU2lnbj1GLlNpZ24scS5jcmVhdGVWZXJpZnk9Ri5jcmVh''@;'; put 'put ''dGVWZXJpZnkscS5WZXJpZnk9Ri5WZXJpZnkscS5jcmVhdGVFQ0RIPV8oNjM5Myk7dmFyIE89Xyg3OTAwKTtxLnB1YmxpY0VuY3J5cHQ9Ty5wdWJsaWNFbmNyeXB0LHEucHJpdmF0ZUVuY3J5cHQ9Ty5wcml2YXRlRW5jcnlwdCxxLnB1YmxpY0RlY3J5cHQ9Ty5wdWJsaWNEZWNyeXB0LHEucHJp''@;'; put 'put ''dmF0ZURlY3J5cHQ9Ty5wcml2YXRlRGVjcnlwdDt2YXIgej1fKDc5NjMpO3EucmFuZG9tRmlsbD16LnJhbmRvbUZpbGwscS5yYW5kb21GaWxsU3luYz16LnJhbmRvbUZpbGxTeW5jLHEuY3JlYXRlQ3JlZGVudGlhbHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInNvcnJ5LCBjcmVhdGVD''@;'; put 'put ''cmVkZW50aWFscyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0XG53ZSBhY2NlcHQgcHVsbCByZXF1ZXN0c1xuaHR0cHM6Ly9naXRodWIuY29tL2Jyb3dzZXJpZnkvY3J5cHRvLWJyb3dzZXJpZnkiKX0scS5jb25zdGFudHM9e0RIX0NIRUNLX1BfTk9UX1NBRkVfUFJJTUU6MixESF9DSEVDS19QX05P''@;'; put 'put ''VF9QUklNRToxLERIX1VOQUJMRV9UT19DSEVDS19HRU5FUkFUT1I6NCxESF9OT1RfU1VJVEFCTEVfR0VORVJBVE9SOjgsTlBOX0VOQUJMRUQ6MSxBTFBOX0VOQUJMRUQ6MSxSU0FfUEtDUzFfUEFERElORzoxLFJTQV9TU0xWMjNfUEFERElORzoyLFJTQV9OT19QQURESU5HOjMsUlNBX1BLQ1Mx''@;'; put 'put ''X09BRVBfUEFERElORzo0LFJTQV9YOTMxX1BBRERJTkc6NSxSU0FfUEtDUzFfUFNTX1BBRERJTkc6NixQT0lOVF9DT05WRVJTSU9OX0NPTVBSRVNTRUQ6MixQT0lOVF9DT05WRVJTSU9OX1VOQ09NUFJFU1NFRDo0LFBPSU5UX0NPTlZFUlNJT05fSFlCUklEOjZ9fSwyMjk2Oih1ZSxxLF8pPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBJPV8oNDQyOSkseT1fKDM0NjQpLGc9Xyg0NDUzKSxCPV8oNzI5Nik7dWUuZXhwb3J0cz1mdW5jdGlvbihQLEYsTyl7aWYoIVB8fCJvYmplY3QiIT10eXBlb2YgUCYmImZ1bmN0aW9uIiE9dHlwZW9mIFApdGhyb3cgbmV3IGcoImBvYmpgIG11c3QgYmUgYW4gb2Jq''@;'; put 'put ''ZWN0IG9yIGEgZnVuY3Rpb25gIik7aWYoInN0cmluZyIhPXR5cGVvZiBGJiYic3ltYm9sIiE9dHlwZW9mIEYpdGhyb3cgbmV3IGcoImBwcm9wZXJ0eWAgbXVzdCBiZSBhIHN0cmluZyBvciBhIHN5bWJvbGAiKTtpZihhcmd1bWVudHMubGVuZ3RoPjMmJiJib29sZWFuIiE9dHlwZW9mIGFyZ3Vt''@;'; put 'put ''ZW50c1szXSYmbnVsbCE9PWFyZ3VtZW50c1szXSl0aHJvdyBuZXcgZygiYG5vbkVudW1lcmFibGVgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIGJvb2xlYW4gb3IgbnVsbCIpO2lmKGFyZ3VtZW50cy5sZW5ndGg+NCYmImJvb2xlYW4iIT10eXBlb2YgYXJndW1lbnRzWzRdJiZudWxsIT09YXJn''@;'; put 'put ''dW1lbnRzWzRdKXRocm93IG5ldyBnKCJgbm9uV3JpdGFibGVgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIGJvb2xlYW4gb3IgbnVsbCIpO2lmKGFyZ3VtZW50cy5sZW5ndGg+NSYmImJvb2xlYW4iIT10eXBlb2YgYXJndW1lbnRzWzVdJiZudWxsIT09YXJndW1lbnRzWzVdKXRocm93IG5ldyBn''@;'; put 'put ''KCJgbm9uQ29uZmlndXJhYmxlYCwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYSBib29sZWFuIG9yIG51bGwiKTtpZihhcmd1bWVudHMubGVuZ3RoPjYmJiJib29sZWFuIiE9dHlwZW9mIGFyZ3VtZW50c1s2XSl0aHJvdyBuZXcgZygiYGxvb3NlYCwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYSBib29s''@;'; put 'put ''ZWFuIik7dmFyIHo9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTpudWxsLE49YXJndW1lbnRzLmxlbmd0aD40P2FyZ3VtZW50c1s0XTpudWxsLEw9YXJndW1lbnRzLmxlbmd0aD41P2FyZ3VtZW50c1s1XTpudWxsLEs9YXJndW1lbnRzLmxlbmd0aD42JiZhcmd1bWVudHNbNl0sVT0h''@;'; put 'put ''IUImJkIoUCxGKTtpZihJKUkoUCxGLHtjb25maWd1cmFibGU6bnVsbD09PUwmJlU/VS5jb25maWd1cmFibGU6IUwsZW51bWVyYWJsZTpudWxsPT09eiYmVT9VLmVudW1lcmFibGU6IXosdmFsdWU6Tyx3cml0YWJsZTpudWxsPT09TiYmVT9VLndyaXRhYmxlOiFOfSk7ZWxzZXtpZighSyYmKHp8''@;'; put 'put ''fE58fEwpKXRocm93IG5ldyB5KCJUaGlzIGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgZGVmaW5pbmcgYSBwcm9wZXJ0eSBhcyBub24tY29uZmlndXJhYmxlLCBub24td3JpdGFibGUsIG9yIG5vbi1lbnVtZXJhYmxlLiIpO1BbRl09T319fSw0Mjg5Oih1ZSxxLF8pPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBJPV8oMjIxNSkseT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbCgiZm9vIiksZz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLEI9QXJyYXkucHJvdG90eXBlLmNvbmNhdCx3PV8oMjI5NiksRj1fKDEwNDQpKCksTz1mdW5jdGlvbihO''@;'; put 'put ''LEwsSyxVKXtpZihMIGluIE4paWYoITA9PT1VKXtpZihOW0xdPT09SylyZXR1cm59ZWxzZSBpZighZnVuY3Rpb24oTil7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIE4mJiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1nLmNhbGwoTil9KFUpfHwhVSgpKXJldHVybjtGP3coTixMLEssITApOncoTixM''@;'; put 'put ''LEspfSx6PWZ1bmN0aW9uKE4sTCl7dmFyIEs9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp7fSxVPUkoTCk7eSYmKFU9Qi5jYWxsKFUsT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhMKSkpO2Zvcih2YXIgVz0wO1c8VS5sZW5ndGg7Vys9MSlPKE4sVVtXXSxMW1VbV11dLEtb''@;'; put 'put ''VVtXXV0pfTt6LnN1cHBvcnRzRGVzY3JpcHRvcnM9ISFGLHVlLmV4cG9ydHM9en0sNTI1MToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0IjtxLnV0aWxzPV8oMTI3OCkscS5DaXBoZXI9Xyg1NzU2KSxxLkRFUz1fKDc3OCkscS5DQkM9Xyg5MDUxKSxxLkVERT1fKDY1MSl9LDkwNTE6KHVlLHEsXyk9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg5NzQ2KSx5PV8oNTcxNyksZz17fTtmdW5jdGlvbiBCKFApe0kuZXF1YWwoUC5sZW5ndGgsOCwiSW52YWxpZCBJViBsZW5ndGgiKSx0aGlzLml2PW5ldyBBcnJheSg4KTtmb3IodmFyIEY9MDtGPHRoaXMuaXYubGVuZ3RoO0YrKyl0aGlzLml2W0ZdPVBb''@;'; put 'put ''Rl19cS5pbnN0YW50aWF0ZT1mdW5jdGlvbiB3KFApe2Z1bmN0aW9uIEYoTCl7UC5jYWxsKHRoaXMsTCksdGhpcy5fY2JjSW5pdCgpfXkoRixQKTtmb3IodmFyIE89T2JqZWN0LmtleXMoZyksej0wO3o8Ty5sZW5ndGg7eisrKXt2YXIgTj1PW3pdO0YucHJvdG90eXBlW05dPWdbTl19cmV0dXJu''@;'; put 'put ''IEYuY3JlYXRlPWZ1bmN0aW9uKEspe3JldHVybiBuZXcgRihLKX0sRn0sZy5fY2JjSW5pdD1mdW5jdGlvbigpe3ZhciBGPW5ldyBCKHRoaXMub3B0aW9ucy5pdik7dGhpcy5fY2JjU3RhdGU9Rn0sZy5fdXBkYXRlPWZ1bmN0aW9uKEYsTyx6LE4pe3ZhciBLPXRoaXMuY29uc3RydWN0b3Iuc3Vw''@;'; put 'put ''ZXJfLnByb3RvdHlwZSxVPXRoaXMuX2NiY1N0YXRlLml2O2lmKCJlbmNyeXB0Ij09PXRoaXMudHlwZSl7Zm9yKHZhciBXPTA7Vzx0aGlzLmJsb2NrU2l6ZTtXKyspVVtXXV49RltPK1ddO2ZvcihLLl91cGRhdGUuY2FsbCh0aGlzLFUsMCx6LE4pLFc9MDtXPHRoaXMuYmxvY2tTaXplO1crKylV''@;'; put 'put ''W1ddPXpbTitXXX1lbHNle2ZvcihLLl91cGRhdGUuY2FsbCh0aGlzLEYsTyx6LE4pLFc9MDtXPHRoaXMuYmxvY2tTaXplO1crKyl6W04rV11ePVVbV107Zm9yKFc9MDtXPHRoaXMuYmxvY2tTaXplO1crKylVW1ddPUZbTytXXX19fSw1NzU2Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJ''@;'; put 'put ''PV8oOTc0Nik7ZnVuY3Rpb24geShnKXt0aGlzLm9wdGlvbnM9Zyx0aGlzLnR5cGU9dGhpcy5vcHRpb25zLnR5cGUsdGhpcy5ibG9ja1NpemU9OCx0aGlzLl9pbml0KCksdGhpcy5idWZmZXI9bmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKSx0aGlzLmJ1ZmZlck9mZj0wLHRoaXMucGFkZGluZz0h''@;'; put 'put ''MSE9PWcucGFkZGluZ311ZS5leHBvcnRzPXkseS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oKXt9LHkucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihCKXtyZXR1cm4gMD09PUIubGVuZ3RoP1tdOiJkZWNyeXB0Ij09PXRoaXMudHlwZT90aGlzLl91cGRhdGVEZWNyeXB0KEIpOnRoaXMuX3Vw''@;'; put 'put ''ZGF0ZUVuY3J5cHQoQil9LHkucHJvdG90eXBlLl9idWZmZXI9ZnVuY3Rpb24oQix3KXtmb3IodmFyIFA9TWF0aC5taW4odGhpcy5idWZmZXIubGVuZ3RoLXRoaXMuYnVmZmVyT2ZmLEIubGVuZ3RoLXcpLEY9MDtGPFA7RisrKXRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyT2ZmK0ZdPUJbdytGXTty''@;'; put 'put ''ZXR1cm4gdGhpcy5idWZmZXJPZmYrPVAsUH0seS5wcm90b3R5cGUuX2ZsdXNoQnVmZmVyPWZ1bmN0aW9uKEIsdyl7cmV0dXJuIHRoaXMuX3VwZGF0ZSh0aGlzLmJ1ZmZlciwwLEIsdyksdGhpcy5idWZmZXJPZmY9MCx0aGlzLmJsb2NrU2l6ZX0seS5wcm90b3R5cGUuX3VwZGF0ZUVuY3J5cHQ9''@;'; put 'put ''ZnVuY3Rpb24oQil7dmFyIHc9MCxQPTAsTz1uZXcgQXJyYXkoKCh0aGlzLmJ1ZmZlck9mZitCLmxlbmd0aCkvdGhpcy5ibG9ja1NpemV8MCkqdGhpcy5ibG9ja1NpemUpOzAhPT10aGlzLmJ1ZmZlck9mZiYmKHcrPXRoaXMuX2J1ZmZlcihCLHcpLHRoaXMuYnVmZmVyT2ZmPT09dGhpcy5idWZm''@;'; put 'put ''ZXIubGVuZ3RoJiYoUCs9dGhpcy5fZmx1c2hCdWZmZXIoTyxQKSkpO2Zvcih2YXIgej1CLmxlbmd0aC0oQi5sZW5ndGgtdykldGhpcy5ibG9ja1NpemU7dzx6O3crPXRoaXMuYmxvY2tTaXplKXRoaXMuX3VwZGF0ZShCLHcsTyxQKSxQKz10aGlzLmJsb2NrU2l6ZTtmb3IoO3c8Qi5sZW5ndGg7''@;'; put 'put ''dysrLHRoaXMuYnVmZmVyT2ZmKyspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJPZmZdPUJbd107cmV0dXJuIE99LHkucHJvdG90eXBlLl91cGRhdGVEZWNyeXB0PWZ1bmN0aW9uKEIpe2Zvcih2YXIgdz0wLFA9MCxGPU1hdGguY2VpbCgodGhpcy5idWZmZXJPZmYrQi5sZW5ndGgpL3RoaXMuYmxv''@;'; put 'put ''Y2tTaXplKS0xLE89bmV3IEFycmF5KEYqdGhpcy5ibG9ja1NpemUpO0Y+MDtGLS0pdys9dGhpcy5fYnVmZmVyKEIsdyksUCs9dGhpcy5fZmx1c2hCdWZmZXIoTyxQKTtyZXR1cm4gdys9dGhpcy5fYnVmZmVyKEIsdyksT30seS5wcm90b3R5cGUuZmluYWw9ZnVuY3Rpb24oQil7dmFyIHcsUDty''@;'; put 'put ''ZXR1cm4gQiYmKHc9dGhpcy51cGRhdGUoQikpLFA9ImVuY3J5cHQiPT09dGhpcy50eXBlP3RoaXMuX2ZpbmFsRW5jcnlwdCgpOnRoaXMuX2ZpbmFsRGVjcnlwdCgpLHc/dy5jb25jYXQoUCk6UH0seS5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbihCLHcpe2lmKDA9PT13KXJldHVybiExO2Zvcig7''@;'; put 'put ''dzxCLmxlbmd0aDspQlt3KytdPTA7cmV0dXJuITB9LHkucHJvdG90eXBlLl9maW5hbEVuY3J5cHQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fcGFkKHRoaXMuYnVmZmVyLHRoaXMuYnVmZmVyT2ZmKSlyZXR1cm5bXTt2YXIgQj1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpO3JldHVybiB0aGlzLl91''@;'; put 'put ''cGRhdGUodGhpcy5idWZmZXIsMCxCLDApLEJ9LHkucHJvdG90eXBlLl91bnBhZD1mdW5jdGlvbihCKXtyZXR1cm4gQn0seS5wcm90b3R5cGUuX2ZpbmFsRGVjcnlwdD1mdW5jdGlvbigpe0kuZXF1YWwodGhpcy5idWZmZXJPZmYsdGhpcy5ibG9ja1NpemUsIk5vdCBlbm91Z2ggZGF0YSB0byBk''@;'; put 'put ''ZWNyeXB0Iik7dmFyIEI9bmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKTtyZXR1cm4gdGhpcy5fZmx1c2hCdWZmZXIoQiwwKSx0aGlzLl91bnBhZChCKX19LDc3ODoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDk3NDYpLHk9Xyg1NzE3KSxnPV8oMTI3OCksQj1fKDU3NTYpO2Z1bmN0''@;'; put 'put ''aW9uIHcoKXt0aGlzLnRtcD1uZXcgQXJyYXkoMiksdGhpcy5rZXlzPW51bGx9ZnVuY3Rpb24gUChPKXtCLmNhbGwodGhpcyxPKTt2YXIgej1uZXcgdzt0aGlzLl9kZXNTdGF0ZT16LHRoaXMuZGVyaXZlS2V5cyh6LE8ua2V5KX15KFAsQiksdWUuZXhwb3J0cz1QLFAuY3JlYXRlPWZ1bmN0aW9u''@;'; put 'put ''KHope3JldHVybiBuZXcgUCh6KX07dmFyIEY9WzEsMSwyLDIsMiwyLDIsMiwxLDIsMiwyLDIsMiwyLDFdO1AucHJvdG90eXBlLmRlcml2ZUtleXM9ZnVuY3Rpb24oeixOKXt6LmtleXM9bmV3IEFycmF5KDMyKSxJLmVxdWFsKE4ubGVuZ3RoLHRoaXMuYmxvY2tTaXplLCJJbnZhbGlkIGtleSBs''@;'; put 'put ''ZW5ndGgiKTt2YXIgTD1nLnJlYWRVSW50MzJCRShOLDApLEs9Zy5yZWFkVUludDMyQkUoTiw0KTtnLnBjMShMLEssei50bXAsMCksTD16LnRtcFswXSxLPXoudG1wWzFdO2Zvcih2YXIgVT0wO1U8ei5rZXlzLmxlbmd0aDtVKz0yKXt2YXIgVz1GW1U+Pj4xXTtMPWcucjI4c2hsKEwsVyksSz1n''@;'; put 'put ''LnIyOHNobChLLFcpLGcucGMyKEwsSyx6LmtleXMsVSl9fSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHosTixMLEspe3ZhciBVPXRoaXMuX2Rlc1N0YXRlLFc9Zy5yZWFkVUludDMyQkUoeixOKSxZPWcucmVhZFVJbnQzMkJFKHosTis0KTtnLmlwKFcsWSxVLnRtcCwwKSxXPVUudG1w''@;'; put 'put ''WzBdLFk9VS50bXBbMV0sImVuY3J5cHQiPT09dGhpcy50eXBlP3RoaXMuX2VuY3J5cHQoVSxXLFksVS50bXAsMCk6dGhpcy5fZGVjcnlwdChVLFcsWSxVLnRtcCwwKSxZPVUudG1wWzFdLGcud3JpdGVVSW50MzJCRShMLFc9VS50bXBbMF0sSyksZy53cml0ZVVJbnQzMkJFKEwsWSxLKzQpfSxQ''@;'; put 'put ''LnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKHosTil7aWYoITE9PT10aGlzLnBhZGRpbmcpcmV0dXJuITE7Zm9yKHZhciBMPXoubGVuZ3RoLU4sSz1OO0s8ei5sZW5ndGg7SysrKXpbS109TDtyZXR1cm4hMH0sUC5wcm90b3R5cGUuX3VucGFkPWZ1bmN0aW9uKHope2lmKCExPT09dGhpcy5wYWRk''@;'; put 'put ''aW5nKXJldHVybiB6O2Zvcih2YXIgTj16W3oubGVuZ3RoLTFdLEw9ei5sZW5ndGgtTjtMPHoubGVuZ3RoO0wrKylJLmVxdWFsKHpbTF0sTik7cmV0dXJuIHouc2xpY2UoMCx6Lmxlbmd0aC1OKX0sUC5wcm90b3R5cGUuX2VuY3J5cHQ9ZnVuY3Rpb24oeixOLEwsSyxVKXtmb3IodmFyIFc9TixZ''@;'; put 'put ''PUwsWD0wO1g8ei5rZXlzLmxlbmd0aDtYKz0yKXt2YXIgZWU9ei5rZXlzW1hdLEo9ei5rZXlzW1grMV07Zy5leHBhbmQoWSx6LnRtcCwwKTt2YXIgcmU9Zy5zdWJzdGl0dXRlKGVlXj16LnRtcFswXSxKXj16LnRtcFsxXSksbGU9WTtZPShXXmcucGVybXV0ZShyZSkpPj4+MCxXPWxlfWcucmlw''@;'; put 'put ''KFksVyxLLFUpfSxQLnByb3RvdHlwZS5fZGVjcnlwdD1mdW5jdGlvbih6LE4sTCxLLFUpe2Zvcih2YXIgVz1MLFk9TixYPXoua2V5cy5sZW5ndGgtMjtYPj0wO1gtPTIpe3ZhciBlZT16LmtleXNbWF0sSj16LmtleXNbWCsxXTtnLmV4cGFuZChXLHoudG1wLDApO3ZhciByZT1nLnN1YnN0aXR1''@;'; put 'put ''dGUoZWVePXoudG1wWzBdLEpePXoudG1wWzFdKSxsZT1XO1c9KFleZy5wZXJtdXRlKHJlKSk+Pj4wLFk9bGV9Zy5yaXAoVyxZLEssVSl9fSw2NTE6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg5NzQ2KSx5PV8oNTcxNyksZz1fKDU3NTYpLEI9Xyg3NzgpO2Z1bmN0aW9uIHcoRixP''@;'; put 'put ''KXtJLmVxdWFsKE8ubGVuZ3RoLDI0LCJJbnZhbGlkIGtleSBsZW5ndGgiKTt2YXIgej1PLnNsaWNlKDAsOCksTj1PLnNsaWNlKDgsMTYpLEw9Ty5zbGljZSgxNiwyNCk7dGhpcy5jaXBoZXJzPSJlbmNyeXB0Ij09PUY/W0IuY3JlYXRlKHt0eXBlOiJlbmNyeXB0IixrZXk6en0pLEIuY3JlYXRl''@;'; put 'put ''KHt0eXBlOiJkZWNyeXB0IixrZXk6Tn0pLEIuY3JlYXRlKHt0eXBlOiJlbmNyeXB0IixrZXk6TH0pXTpbQi5jcmVhdGUoe3R5cGU6ImRlY3J5cHQiLGtleTpMfSksQi5jcmVhdGUoe3R5cGU6ImVuY3J5cHQiLGtleTpOfSksQi5jcmVhdGUoe3R5cGU6ImRlY3J5cHQiLGtleTp6fSldfWZ1bmN0''@;'; put 'put ''aW9uIFAoRil7Zy5jYWxsKHRoaXMsRik7dmFyIE89bmV3IHcodGhpcy50eXBlLHRoaXMub3B0aW9ucy5rZXkpO3RoaXMuX2VkZVN0YXRlPU99eShQLGcpLHVlLmV4cG9ydHM9UCxQLmNyZWF0ZT1mdW5jdGlvbihPKXtyZXR1cm4gbmV3IFAoTyl9LFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rp''@;'; put 'put ''b24oTyx6LE4sTCl7dmFyIEs9dGhpcy5fZWRlU3RhdGU7Sy5jaXBoZXJzWzBdLl91cGRhdGUoTyx6LE4sTCksSy5jaXBoZXJzWzFdLl91cGRhdGUoTixMLE4sTCksSy5jaXBoZXJzWzJdLl91cGRhdGUoTixMLE4sTCl9LFAucHJvdG90eXBlLl9wYWQ9Qi5wcm90b3R5cGUuX3BhZCxQLnByb3Rv''@;'; put 'put ''dHlwZS5fdW5wYWQ9Qi5wcm90b3R5cGUuX3VucGFkfSwxMjc4Oih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtxLnJlYWRVSW50MzJCRT1mdW5jdGlvbihCLHcpe3JldHVybihCWzArd108PDI0fEJbMSt3XTw8MTZ8QlsyK3ddPDw4fEJbMyt3XSk+Pj4wfSxxLndyaXRlVUludDMyQkU9ZnVuY3Rpb24o''@;'; put 'put ''Qix3LFApe0JbMCtQXT13Pj4+MjQsQlsxK1BdPXc+Pj4xNiYyNTUsQlsyK1BdPXc+Pj44JjI1NSxCWzMrUF09MjU1Jnd9LHEuaXA9ZnVuY3Rpb24oQix3LFAsRil7Zm9yKHZhciBPPTAsej0wLE49NjtOPj0wO04tPTIpe2Zvcih2YXIgTD0wO0w8PTI0O0wrPTgpTzw8PTEsT3w9dz4+PkwrTiYx''@;'; put 'put ''O2ZvcihMPTA7TDw9MjQ7TCs9OClPPDw9MSxPfD1CPj4+TCtOJjF9Zm9yKE49NjtOPj0wO04tPTIpe2ZvcihMPTE7TDw9MjU7TCs9OCl6PDw9MSx6fD13Pj4+TCtOJjE7Zm9yKEw9MTtMPD0yNTtMKz04KXo8PD0xLHp8PUI+Pj5MK04mMX1QW0YrMF09Tz4+PjAsUFtGKzFdPXo+Pj4wfSxxLnJp''@;'; put 'put ''cD1mdW5jdGlvbihCLHcsUCxGKXtmb3IodmFyIE89MCx6PTAsTj0wO048NDtOKyspZm9yKHZhciBMPTI0O0w+PTA7TC09OClPPDw9MSxPfD13Pj4+TCtOJjEsTzw8PTEsT3w9Qj4+PkwrTiYxO2ZvcihOPTQ7Tjw4O04rKylmb3IoTD0yNDtMPj0wO0wtPTgpejw8PTEsenw9dz4+PkwrTiYxLHo8''@;'; put 'put ''PD0xLHp8PUI+Pj5MK04mMTtQW0YrMF09Tz4+PjAsUFtGKzFdPXo+Pj4wfSxxLnBjMT1mdW5jdGlvbihCLHcsUCxGKXtmb3IodmFyIE89MCx6PTAsTj03O04+PTU7Ti0tKXtmb3IodmFyIEw9MDtMPD0yNDtMKz04KU88PD0xLE98PXc+PkwrTiYxO2ZvcihMPTA7TDw9MjQ7TCs9OClPPDw9MSxP''@;'; put 'put ''fD1CPj5MK04mMX1mb3IoTD0wO0w8PTI0O0wrPTgpTzw8PTEsT3w9dz4+TCtOJjE7Zm9yKE49MTtOPD0zO04rKyl7Zm9yKEw9MDtMPD0yNDtMKz04KXo8PD0xLHp8PXc+PkwrTiYxO2ZvcihMPTA7TDw9MjQ7TCs9OCl6PDw9MSx6fD1CPj5MK04mMX1mb3IoTD0wO0w8PTI0O0wrPTgpejw8PTEs''@;'; put 'put ''enw9Qj4+TCtOJjE7UFtGKzBdPU8+Pj4wLFBbRisxXT16Pj4+MH0scS5yMjhzaGw9ZnVuY3Rpb24oQix3KXtyZXR1cm4gQjw8dyYyNjg0MzU0NTV8Qj4+PjI4LXd9O3ZhciBfPVsxNCwxMSwxNyw0LDI3LDIzLDI1LDAsMTMsMjIsNywxOCw1LDksMTYsMjQsMiwyMCwxMiwyMSwxLDgsMTUsMjYs''@;'; put 'put ''MTUsNCwyNSwxOSw5LDEsMjYsMTYsNSwxMSwyMyw4LDEyLDcsMTcsMCwyMiwzLDEwLDE0LDYsMjAsMjcsMjRdO3EucGMyPWZ1bmN0aW9uKEIsdyxQLEYpe2Zvcih2YXIgTz0wLHo9MCxOPV8ubGVuZ3RoPj4+MSxMPTA7TDxOO0wrKylPPDw9MSxPfD1CPj4+X1tMXSYxO2ZvcihMPU47TDxfLmxl''@;'; put 'put ''bmd0aDtMKyspejw8PTEsenw9dz4+Pl9bTF0mMTtQW0YrMF09Tz4+PjAsUFtGKzFdPXo+Pj4wfSxxLmV4cGFuZD1mdW5jdGlvbihCLHcsUCl7dmFyIEY9MCxPPTA7Rj0oMSZCKTw8NXxCPj4+Mjc7Zm9yKHZhciB6PTIzO3o+PTE1O3otPTQpRjw8PTYsRnw9Qj4+PnomNjM7Zm9yKHo9MTE7ej49''@;'; put 'put ''Mzt6LT00KU98PUI+Pj56JjYzLE88PD02O098PSgzMSZCKTw8MXxCPj4+MzEsd1tQKzBdPUY+Pj4wLHdbUCsxXT1PPj4+MH07dmFyIEk9WzE0LDAsNCwxNSwxMyw3LDEsNCwyLDE0LDE1LDIsMTEsMTMsOCwxLDMsMTAsMTAsNiw2LDEyLDEyLDExLDUsOSw5LDUsMCwzLDcsOCw0LDE1LDEsMTIs''@;'; put 'put ''MTQsOCw4LDIsMTMsNCw2LDksMiwxLDExLDcsMTUsNSwxMiwxMSw5LDMsNywxNCwzLDEwLDEwLDAsNSw2LDAsMTMsMTUsMywxLDEzLDgsNCwxNCw3LDYsMTUsMTEsMiwzLDgsNCwxNCw5LDEyLDcsMCwyLDEsMTMsMTAsMTIsNiwwLDksNSwxMSwxMCw1LDAsMTMsMTQsOCw3LDEwLDExLDEsMTAs''@;'; put 'put ''Myw0LDE1LDEzLDQsMSwyLDUsMTEsOCw2LDEyLDcsNiwxMiw5LDAsMyw1LDIsMTQsMTUsOSwxMCwxMywwLDcsOSwwLDE0LDksNiwzLDMsNCwxNSw2LDUsMTAsMSwyLDEzLDgsMTIsNSw3LDE0LDExLDEyLDQsMTEsMiwxNSw4LDEsMTMsMSw2LDEwLDQsMTMsOSwwLDgsNiwxNSw5LDMsOCwwLDcs''@;'; put 'put ''MTEsNCwxLDE1LDIsMTQsMTIsMyw1LDExLDEwLDUsMTQsMiw3LDEyLDcsMTMsMTMsOCwxNCwxMSwzLDUsMCw2LDYsMTUsOSwwLDEwLDMsMSw0LDIsNyw4LDIsNSwxMiwxMSwxLDEyLDEwLDQsMTQsMTUsOSwxMCwzLDYsMTUsOSwwLDAsNiwxMiwxMCwxMSwxLDcsMTMsMTMsOCwxNSw5LDEsNCwz''@;'; put 'put ''LDUsMTQsMTEsNSwxMiwyLDcsOCwyLDQsMTQsMiwxNCwxMiwxMSw0LDIsMSwxMiw3LDQsMTAsNywxMSwxMyw2LDEsOCw1LDUsMCwzLDE1LDE1LDEwLDEzLDMsMCw5LDE0LDgsOSw2LDQsMTEsMiw4LDEsMTIsMTEsNywxMCwxLDEzLDE0LDcsMiw4LDEzLDE1LDYsOSwxNSwxMiwwLDUsOSw2LDEw''@;'; put 'put ''LDMsNCwwLDUsMTQsMywxMiwxMCwxLDE1LDEwLDQsMTUsMiw5LDcsMiwxMiw2LDksOCw1LDAsNiwxMywxLDMsMTMsNCwxNCwxNCwwLDcsMTEsNSwzLDExLDgsOSw0LDE0LDMsMTUsMiw1LDEyLDIsOSw4LDUsMTIsMTUsMywxMCw3LDExLDAsMTQsNCwxLDEwLDcsMSw2LDEzLDAsMTEsOCw2LDEz''@;'; put 'put ''LDQsMTMsMTEsMCwyLDExLDE0LDcsMTUsNCwwLDksOCwxLDEzLDEwLDMsMTQsMTIsMyw5LDUsNywxMiw1LDIsMTAsMTUsNiw4LDEsNiwxLDYsNCwxMSwxMSwxMywxMyw4LDEyLDEsMyw0LDcsMTAsMTQsNywxMCw5LDE1LDUsNiwwLDgsMTUsMCwxNCw1LDIsOSwzLDIsMTIsMTMsMSwyLDE1LDgs''@;'; put 'put ''MTMsNCw4LDYsMTAsMTUsMywxMSw3LDEsNCwxMCwxMiw5LDUsMyw2LDE0LDExLDUsMCwwLDE0LDEyLDksNywyLDcsMiwxMSwxLDQsMTQsMSw3LDksNCwxMiwxMCwxNCw4LDIsMTMsMCwxNSw2LDEyLDEwLDksMTMsMCwxNSwzLDMsNSw1LDYsOCwxMV07cS5zdWJzdGl0dXRlPWZ1bmN0aW9uKEIs''@;'; put 'put ''dyl7Zm9yKHZhciBQPTAsRj0wO0Y8NDtGKyspUDw8PTQsUHw9SVs2NCpGKyhCPj4+MTgtNipGJjYzKV07Zm9yKEY9MDtGPDQ7RisrKVA8PD00LFB8PUlbMjU2KzY0KkYrKHc+Pj4xOC02KkYmNjMpXTtyZXR1cm4gUD4+PjB9O3ZhciB5PVsxNiwyNSwxMiwxMSwzLDIwLDQsMTUsMzEsMTcsOSw2''@;'; put 'put ''LDI3LDE0LDEsMjIsMzAsMjQsOCwxOCwwLDUsMjksMjMsMTMsMTksMiwyNiwxMCwyMSwyOCw3XTtxLnBlcm11dGU9ZnVuY3Rpb24oQil7Zm9yKHZhciB3PTAsUD0wO1A8eS5sZW5ndGg7UCsrKXc8PD0xLHd8PUI+Pj55W1BdJjE7cmV0dXJuIHc+Pj4wfSxxLnBhZFNwbGl0PWZ1bmN0aW9uKEIs''@;'; put 'put ''dyxQKXtmb3IodmFyIEY9Qi50b1N0cmluZygyKTtGLmxlbmd0aDx3OylGPSIwIitGO2Zvcih2YXIgTz1bXSx6PTA7ejx3O3orPVApTy5wdXNoKEYuc2xpY2Uoeix6K1ApKTtyZXR1cm4gTy5qb2luKCIgIil9fSwyNjA3Oih1ZSxxLF8pPT57dmFyIEk9Xyg4NzY0KS5CdWZmZXIseT1fKDM1OTAp''@;'; put 'put ''LGc9Xyg5Nzk5KSxCPV8oNzQyNiksUD17YmluYXJ5OiEwLGhleDohMCxiYXNlNjQ6ITB9O3EuRGlmZmllSGVsbG1hbkdyb3VwPXEuY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwPXEuZ2V0RGlmZmllSGVsbG1hbj1mdW5jdGlvbiB3KE8pe3ZhciB6PW5ldyBJKGdbT10ucHJpbWUsImhleCIpLE49''@;'; put 'put ''bmV3IEkoZ1tPXS5nZW4sImhleCIpO3JldHVybiBuZXcgQih6LE4pfSxxLmNyZWF0ZURpZmZpZUhlbGxtYW49cS5EaWZmaWVIZWxsbWFuPWZ1bmN0aW9uIEYoTyx6LE4sTCl7cmV0dXJuIEkuaXNCdWZmZXIoeil8fHZvaWQgMD09PVBbel0/RihPLCJiaW5hcnkiLHosTik6KHo9enx8ImJpbmFy''@;'; put 'put ''eSIsTD1MfHwiYmluYXJ5IixOPU58fG5ldyBJKFsyXSksSS5pc0J1ZmZlcihOKXx8KE49bmV3IEkoTixMKSksIm51bWJlciI9PXR5cGVvZiBPP25ldyBCKHkoTyxOKSxOLCEwKTooSS5pc0J1ZmZlcihPKXx8KE89bmV3IEkoTyx6KSksbmV3IEIoTyxOLCEwKSkpfX0sNzQyNjoodWUscSxfKT0+''@;'; put 'put ''e3ZhciBJPV8oODc2NCkuQnVmZmVyLHk9XygzNjIwKSxCPW5ldyhfKDMwNDcpKSx3PW5ldyB5KDI0KSxQPW5ldyB5KDExKSxGPW5ldyB5KDEwKSxPPW5ldyB5KDMpLHo9bmV3IHkoNyksTj1fKDM1OTApLEw9XygxNzk4KTtmdW5jdGlvbiBLKEoscmUpe3JldHVybiByZT1yZXx8InV0ZjgiLEku''@;'; put 'put ''aXNCdWZmZXIoSil8fChKPW5ldyBJKEoscmUpKSx0aGlzLl9wdWI9bmV3IHkoSiksdGhpc31mdW5jdGlvbiBVKEoscmUpe3JldHVybiByZT1yZXx8InV0ZjgiLEkuaXNCdWZmZXIoSil8fChKPW5ldyBJKEoscmUpKSx0aGlzLl9wcml2PW5ldyB5KEopLHRoaXN9dWUuZXhwb3J0cz1YO3ZhciBX''@;'; put 'put ''PXt9O2Z1bmN0aW9uIFgoSixyZSxpZSl7dGhpcy5zZXRHZW5lcmF0b3IocmUpLHRoaXMuX19wcmltZT1uZXcgeShKKSx0aGlzLl9wcmltZT15Lm1vbnQodGhpcy5fX3ByaW1lKSx0aGlzLl9wcmltZUxlbj1KLmxlbmd0aCx0aGlzLl9wdWI9dm9pZCAwLHRoaXMuX3ByaXY9dm9pZCAwLHRoaXMu''@;'; put 'put ''X3ByaW1lQ29kZT12b2lkIDAsaWU/KHRoaXMuc2V0UHVibGljS2V5PUssdGhpcy5zZXRQcml2YXRlS2V5PVUpOnRoaXMuX3ByaW1lQ29kZT04fWZ1bmN0aW9uIGVlKEoscmUpe3ZhciBpZT1uZXcgSShKLnRvQXJyYXkoKSk7cmV0dXJuIHJlP2llLnRvU3RyaW5nKHJlKTppZX1PYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoWC5wcm90b3R5cGUsInZlcmlmeUVycm9yIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIHRoaXMuX3ByaW1lQ29kZSYmKHRoaXMuX3ByaW1lQ29kZT1mdW5jdGlvbiBZKEoscmUpe3ZhciBpZT1yZS50b1N0cmluZygiaGV4''@;'; put 'put ''IiksbGU9W2llLEoudG9TdHJpbmcoMTYpXS5qb2luKCJfIik7aWYobGUgaW4gVylyZXR1cm4gV1tsZV07dmFyIF9lLG1lPTA7aWYoSi5pc0V2ZW4oKXx8IU4uc2ltcGxlU2lldmV8fCFOLmZlcm1hdFRlc3QoSil8fCFCLnRlc3QoSikpcmV0dXJuIG1lKz0xLFdbbGVdPW1lKz0iMDIiPT09aWV8''@;'; put 'put ''fCIwNSI9PT1pZT84OjQsbWU7c3dpdGNoKEIudGVzdChKLnNocm4oMSkpfHwobWUrPTIpLGllKXtjYXNlIjAyIjpKLm1vZCh3KS5jbXAoUCkmJihtZSs9OCk7YnJlYWs7Y2FzZSIwNSI6KF9lPUoubW9kKEYpKS5jbXAoTykmJl9lLmNtcCh6KSYmKG1lKz04KTticmVhaztkZWZhdWx0Om1lKz00''@;'; put 'put ''fXJldHVybiBXW2xlXT1tZSxtZX0odGhpcy5fX3ByaW1lLHRoaXMuX19nZW4pKSx0aGlzLl9wcmltZUNvZGV9fSksWC5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ByaXZ8fCh0aGlzLl9wcml2PW5ldyB5KEwodGhpcy5fcHJpbWVMZW4pKSksdGhpcy5f''@;'; put 'put ''cHViPXRoaXMuX2dlbi50b1JlZCh0aGlzLl9wcmltZSkucmVkUG93KHRoaXMuX3ByaXYpLmZyb21SZWQoKSx0aGlzLmdldFB1YmxpY0tleSgpfSxYLnByb3RvdHlwZS5jb21wdXRlU2VjcmV0PWZ1bmN0aW9uKEope3ZhciByZT0oSj0oSj1uZXcgeShKKSkudG9SZWQodGhpcy5fcHJpbWUpKS5y''@;'; put 'put ''ZWRQb3codGhpcy5fcHJpdikuZnJvbVJlZCgpLGllPW5ldyBJKHJlLnRvQXJyYXkoKSksbGU9dGhpcy5nZXRQcmltZSgpO2lmKGllLmxlbmd0aDxsZS5sZW5ndGgpe3ZhciBtZT1uZXcgSShsZS5sZW5ndGgtaWUubGVuZ3RoKTttZS5maWxsKDApLGllPUkuY29uY2F0KFttZSxpZV0pfXJldHVy''@;'; put 'put ''biBpZX0sWC5wcm90b3R5cGUuZ2V0UHVibGljS2V5PWZ1bmN0aW9uKHJlKXtyZXR1cm4gZWUodGhpcy5fcHViLHJlKX0sWC5wcm90b3R5cGUuZ2V0UHJpdmF0ZUtleT1mdW5jdGlvbihyZSl7cmV0dXJuIGVlKHRoaXMuX3ByaXYscmUpfSxYLnByb3RvdHlwZS5nZXRQcmltZT1mdW5jdGlvbihK''@;'; put 'put ''KXtyZXR1cm4gZWUodGhpcy5fX3ByaW1lLEopfSxYLnByb3RvdHlwZS5nZXRHZW5lcmF0b3I9ZnVuY3Rpb24oSil7cmV0dXJuIGVlKHRoaXMuX2dlbixKKX0sWC5wcm90b3R5cGUuc2V0R2VuZXJhdG9yPWZ1bmN0aW9uKEoscmUpe3JldHVybiByZT1yZXx8InV0ZjgiLEkuaXNCdWZmZXIoSil8''@;'; put 'put ''fChKPW5ldyBJKEoscmUpKSx0aGlzLl9fZ2VuPUosdGhpcy5fZ2VuPW5ldyB5KEopLHRoaXN9fSwzNTkwOih1ZSxxLF8pPT57dmFyIEk9XygxNzk4KTt1ZS5leHBvcnRzPWxlLGxlLnNpbXBsZVNpZXZlPXJlLGxlLmZlcm1hdFRlc3Q9aWU7dmFyIHk9XygzNjIwKSxnPW5ldyB5KDI0KSx3PW5l''@;'; put 'put ''dyhfKDMwNDcpKSxQPW5ldyB5KDEpLEY9bmV3IHkoMiksTz1uZXcgeSg1KSxMPShuZXcgeSgxNiksbmV3IHkoOCksbmV3IHkoMTApKSxLPW5ldyB5KDMpLFc9KG5ldyB5KDcpLG5ldyB5KDExKSksWT1uZXcgeSg0KSxlZT0obmV3IHkoMTIpLG51bGwpO2Z1bmN0aW9uIHJlKG1lKXtmb3IodmFy''@;'; put 'put ''IF9lPWZ1bmN0aW9uIEooKXtpZihudWxsIT09ZWUpcmV0dXJuIGVlO3ZhciBfZT1bXTtfZVswXT0yO2Zvcih2YXIgVGU9MSxTZT0zO1NlPDEwNDg1NzY7U2UrPTIpe2Zvcih2YXIgemU9TWF0aC5jZWlsKE1hdGguc3FydChTZSkpLFY9MDtWPFRlJiZfZVtWXTw9emUmJlNlJV9lW1ZdIT0wO1Yr''@;'; put 'put ''Kyk7VGUhPT1WJiZfZVtWXTw9emV8fChfZVtUZSsrXT1TZSl9cmV0dXJuIGVlPV9lLF9lfSgpLFRlPTA7VGU8X2UubGVuZ3RoO1RlKyspaWYoMD09PW1lLm1vZG4oX2VbVGVdKSlyZXR1cm4gMD09PW1lLmNtcG4oX2VbVGVdKTtyZXR1cm4hMH1mdW5jdGlvbiBpZShtZSl7dmFyIF9lPXkubW9u''@;'; put 'put ''dChtZSk7cmV0dXJuIDA9PT1GLnRvUmVkKF9lKS5yZWRQb3cobWUuc3VibigxKSkuZnJvbVJlZCgpLmNtcG4oMSl9ZnVuY3Rpb24gbGUobWUsX2Upe2lmKG1lPDE2KXJldHVybiBuZXcgeSgyPT09X2V8fDU9PT1fZT9bMTQwLDEyM106WzE0MCwzOV0pO19lPW5ldyB5KF9lKTtmb3IodmFyIFRl''@;'; put 'put ''LFNlOzspe2ZvcihUZT1uZXcgeShJKE1hdGguY2VpbChtZS84KSkpO1RlLmJpdExlbmd0aCgpPm1lOylUZS5pc2hybigxKTtpZihUZS5pc0V2ZW4oKSYmVGUuaWFkZChQKSxUZS50ZXN0bigxKXx8VGUuaWFkZChGKSxfZS5jbXAoRikpe2lmKCFfZS5jbXAoTykpZm9yKDtUZS5tb2QoTCkuY21w''@;'; put 'put ''KEspOylUZS5pYWRkKFkpfWVsc2UgZm9yKDtUZS5tb2QoZykuY21wKFcpOylUZS5pYWRkKFkpO2lmKHJlKFNlPVRlLnNocm4oMSkpJiZyZShUZSkmJmllKFNlKSYmaWUoVGUpJiZ3LnRlc3QoU2UpJiZ3LnRlc3QoVGUpKXJldHVybiBUZX19fSwzNjIwOmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0''@;'; put 'put ''aW9uKEkseSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGcoVixwKXtpZighVil0aHJvdyBuZXcgRXJyb3IocHx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBCKFYscCl7Vi5zdXBlcl89cDt2YXIgYj1mdW5jdGlvbigpe307Yi5wcm90b3R5cGU9cC5wcm90b3R5cGUsVi5wcm90b3R5cGU9''@;'; put 'put ''bmV3IGIsVi5wcm90b3R5cGUuY29uc3RydWN0b3I9Vn1mdW5jdGlvbiB3KFYscCxiKXtpZih3LmlzQk4oVikpcmV0dXJuIFY7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PVYmJigoImxlIj09PXB8fCJiZSI9PT1wKSYm''@;'; put 'put ''KGI9cCxwPTEwKSx0aGlzLl9pbml0KFZ8fDAscHx8MTAsYnx8ImJlIikpfXZhciBQOyJvYmplY3QiPT10eXBlb2YgST9JLmV4cG9ydHM9dzp5LkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e1A9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cu''@;'; put 'put ''QnVmZmVyOl8oNzc0OCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKFYscCl7dmFyIGI9Vi5jaGFyQ29kZUF0KHApO3JldHVybiBiPj02NSYmYjw9NzA/Yi01NTpiPj05NyYmYjw9MTAyP2ItODc6Yi00OCYxNX1mdW5jdGlvbiBPKFYscCxiKXt2YXIgeD1GKFYsYik7cmV0dXJuIGItMT49cCYm''@;'; put 'put ''KHh8PUYoVixiLTEpPDw0KSx4fWZ1bmN0aW9uIHooVixwLGIseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1pbihWLmxlbmd0aCxiKSxIPXA7SDxUO0grKyl7dmFyIGo9Vi5jaGFyQ29kZUF0KEgpLTQ4O0MqPXgsQys9aj49NDk/ai00OSsxMDpqPj0xNz9qLTE3KzEwOmp9cmV0dXJuIEN9dy5pc0JO''@;'; put 'put ''PWZ1bmN0aW9uKHApe3JldHVybiBwIGluc3RhbmNlb2Ygd3x8bnVsbCE9PXAmJiJvYmplY3QiPT10eXBlb2YgcCYmcC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkocC53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPjA/''@;'; put 'put ''cDpifSx3Lm1pbj1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKTwwP3A6Yn0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24ocCxiLHgpe2lmKCJudW1iZXIiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5pdE51bWJlcihwLGIseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBwKXJldHVybiB0''@;'; put 'put ''aGlzLl9pbml0QXJyYXkocCxiLHgpOyJoZXgiPT09YiYmKGI9MTYpLGcoYj09PSgwfGIpJiZiPj0yJiZiPD0zNik7dmFyIEM9MDsiLSI9PT0ocD1wLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8cC5sZW5ndGgmJigxNj09PWI/dGhp''@;'; put 'put ''cy5fcGFyc2VIZXgocCxDLHgpOih0aGlzLl9wYXJzZUJhc2UocCxiLEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihwLGIseCl7cDwwJiYodGhpcy5uZWdhdGl2ZT0xLHA9LXApLHA8Njcx''@;'; put 'put ''MDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnBdLHRoaXMubGVuZ3RoPTEpOnA8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooZyhwPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4''@;'; put 'put ''ODYzJnAscC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24ocCxiLHgpe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwLmxlbmd0aCkscC5s''@;'; put 'put ''ZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwocC5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2''@;'; put 'put ''YXIgVCxILGo9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MtMV08PDh8cFtDLTJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYs''@;'; put 'put ''VCsrKTtlbHNlIGlmKCJsZSI9PT14KWZvcihDPTAsVD0wO0M8cC5sZW5ndGg7Qys9Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQysxXTw8OHxwW0MrMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKysp''@;'; put 'put ''O3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihwLGIseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChwLmxlbmd0aC1iKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhp''@;'; put 'put ''cy53b3Jkc1tDXT0wO3ZhciBqLFQ9MCxIPTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMTtDPj1iO0MtPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0ocC5s''@;'; put 'put ''ZW5ndGgtYiklMj09MD9iKzE6YjtDPHAubGVuZ3RoO0MrPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9u''@;'; put 'put ''KHAsYix4KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEwODg2MztUKj1iKUMrKztDLS0sVD1UL2J8MDtmb3IodmFyIEg9cC5sZW5ndGgteCxqPUglQyxFPU1hdGgubWluKEgsSC1qKSt4LG09MCxBPXg7QTxFO0ErPUMpbT16KHAsQSxBK0MsYiks''@;'; put 'put ''dGhpcy5pbXVsbihUKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKTtpZigwIT09ail7dmFyIG9lPTE7Zm9yKG09eihwLEEscC5sZW5ndGgsYiksQT0wO0E8ajtBKyspb2UqPWI7dGhpcy5pbXVsbihvZSksdGhpcy53b3Jkc1swXSttPDY3''@;'; put 'put ''MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHApe3Aud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoO2IrKylwLndvcmRzW2JdPXRoaXMud29yZHNb''@;'; put 'put ''Yl07cC5sZW5ndGg9dGhpcy5sZW5ndGgscC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHAucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkocCkscH0sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihw''@;'; put 'put ''KXtmb3IoO3RoaXMubGVuZ3RoPHA7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0''@;'; put 'put ''aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8i''@;'; put 'put ''PEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgTj1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIs''@;'; put 'put ''IjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxMPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2''@;'; put 'put ''LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEs9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYy''@;'; put 'put ''NSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUy''@;'; put 'put ''MTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVyhWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmU7dmFyIHg9Vi5sZW5ndGgrcC5sZW5ndGh8MDtiLmxlbmd0aD14LHg9eC0xfDA7dmFyIEM9MHxWLndvcmRzWzBdLFQ9MHxwLndvcmRzWzBdLEg9QypULEU9SC82NzEwODg2NHww''@;'; put 'put ''O2Iud29yZHNbMF09NjcxMDg4NjMmSDtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2LG9lPTY3MTA4ODYzJkUsdGU9TWF0aC5taW4obSxwLmxlbmd0aC0xKSxzZT1NYXRoLm1heCgwLG0tVi5sZW5ndGgrMSk7c2U8PXRlO3NlKyspQSs9KEg9KEM9MHxWLndvcmRzW20tc2V8''@;'; put 'put ''MF0pKihUPTB8cC53b3Jkc1tzZV0pK29lKS82NzEwODg2NHwwLG9lPTY3MTA4ODYzJkg7Yi53b3Jkc1ttXT0wfG9lLEU9MHxBfXJldHVybiAwIT09RT9iLndvcmRzW21dPTB8RTpiLmxlbmd0aC0tLGIuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihwLGIpe3ZhciB4O2lm''@;'; put 'put ''KGI9MHxifHwxLDE2PT09KHA9cHx8MTApfHwiaGV4Ij09PXApe3g9IiI7Zm9yKHZhciBDPTAsVD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9dGhpcy53b3Jkc1tIXSxFPSgxNjc3NzIxNSYoajw8Q3xUKSkudG9TdHJpbmcoMTYpO1Q9aj4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0y''@;'; put 'put ''NiYmKEMtPTI2LEgtLSkseD0wIT09VHx8SCE9PXRoaXMubGVuZ3RoLTE/Tls2LUUubGVuZ3RoXStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygxNikreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKHA9PT0o''@;'; put 'put ''MHxwKSYmcD49MiYmcDw9MzYpe3ZhciBtPUxbcF0sQT1LW3BdO3g9IiI7dmFyIG9lPXRoaXMuY2xvbmUoKTtmb3Iob2UubmVnYXRpdmU9MDshb2UuaXNaZXJvKCk7KXt2YXIgdGU9b2UubW9kbihBKS50b1N0cmluZyhwKTt4PShvZT1vZS5pZGl2bihBKSkuaXNaZXJvKCk/dGUreDpOW20tdGUu''@;'; put 'put ''bGVuZ3RoXSt0ZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWcoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9''@;'; put 'put ''ZnVuY3Rpb24oKXt2YXIgcD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/cCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3ArPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxl''@;'; put 'put ''bmd0aD4yJiZnKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tcDpwfSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0''@;'; put 'put ''aW9uKHAsYil7cmV0dXJuIGcodHlwZW9mIFA8InUiKSx0aGlzLnRvQXJyYXlMaWtlKFAscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHAsYix4''@;'; put 'put ''KXt2YXIgQz10aGlzLmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7ZyhDPD1ULCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksZyhUPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRSxtLEg9ImxlIj09PWIsaj1u''@;'; put 'put ''ZXcgcChUKSxBPXRoaXMuY2xvbmUoKTtpZihIKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW21dPUU7Zm9yKDttPFQ7bSsrKWpbbV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsrKWpbbV09MDtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEu''@;'; put 'put ''YW5kbG4oMjU1KSxBLml1c2hybig4KSxqW1QtbS0xXT1FfXJldHVybiBqfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24ocCl7cmV0dXJuIDMyLU1hdGguY2x6MzIocCl9OmZ1bmN0aW9uKHApe3ZhciBiPXAseD0wO3JldHVybiBiPj00MDk2JiYoeCs9MTMsYj4+''@;'; put 'put ''Pj0xMyksYj49NjQmJih4Kz03LGI+Pj49NyksYj49OCYmKHgrPTQsYj4+Pj00KSxiPj0yJiYoeCs9MixiPj4+PTIpLHgrYn0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHApe2lmKDA9PT1wKXJldHVybiAyNjt2YXIgYj1wLHg9MDtyZXR1cm4gODE5MSZifHwoeCs9MTMsYj4+Pj0x''@;'; put 'put ''MyksMTI3JmJ8fCh4Kz03LGI+Pj49NyksMTUmYnx8KHgrPTQsYj4+Pj00KSwzJmJ8fCh4Kz0yLGI+Pj49MiksMSZifHx4KysseH0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAy''@;'; put 'put ''NioodGhpcy5sZW5ndGgtMSkrYn0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgcD0wLGI9MDtiPHRoaXMubGVuZ3RoO2IrKyl7dmFyIHg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tiXSk7aWYocCs9eCwyNiE9PXgp''@;'; put 'put ''YnJlYWt9cmV0dXJuIHB9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihwKS5p''@;'; put 'put ''YWRkbigxKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnRlc3RuKHAtMSk/dGhpcy5ub3RuKHApLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlz''@;'; put 'put ''Lm5lZ2F0aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlv''@;'; put 'put ''bihwKXtmb3IoO3RoaXMubGVuZ3RoPHAubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBiPTA7YjxwLmxlbmd0aDtiKyspdGhpcy53b3Jkc1tiXT10aGlzLndvcmRzW2JdfHAud29yZHNbYl07cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1''@;'; put 'put ''bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdW9yKHApfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihwKTpwLmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS51b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHApOnAuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihwKXt2YXIgYjtiPXRoaXMubGVuZ3RoPnAubGVuZ3RoP3A6dGhpcztmb3IodmFy''@;'; put 'put ''IHg9MDt4PGIubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPXRoaXMud29yZHNbeF0mcC53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZl''@;'; put 'put ''KSksdGhpcy5pdWFuZChwKX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChwKTpwLmNsb25lKCkuaWFuZCh0aGlzKX0sdy5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+''@;'; put 'put ''cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHApOnAuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24ocCl7dmFyIGIseDt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oYj10aGlzLHg9cCk6KGI9cCx4PXRoaXMpO2Zvcih2YXIgQz0wO0M8eC5sZW5ndGg7Qysr''@;'; put 'put ''KXRoaXMud29yZHNbQ109Yi53b3Jkc1tDXV54LndvcmRzW0NdO2lmKHRoaXMhPT1iKWZvcig7QzxiLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24ocCl7''@;'; put 'put ''cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1eG9yKHApfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHApOnAuY2xvbmUoKS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51''@;'; put 'put ''eG9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IocCk6cC5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9MHxNYXRoLmNlaWwo''@;'; put 'put ''cC8yNikseD1wJTI2O3RoaXMuX2V4cGFuZChiKSx4PjAmJmItLTtmb3IodmFyIEM9MDtDPGI7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmfnRoaXMud29yZHNbQ107cmV0dXJuIHg+MCYmKHRoaXMud29yZHNbQ109fnRoaXMud29yZHNbQ10mNjcxMDg4NjM+PjI2LXgpLHRoaXMuc3RyaXAo''@;'; put 'put ''KX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHApfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHAsYil7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciB4PXAvMjZ8MCxDPXAlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEp''@;'; put 'put ''LHRoaXMud29yZHNbeF09Yj90aGlzLndvcmRzW3hdfDE8PEM6dGhpcy53b3Jkc1t4XSZ+KDE8PEMpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwKXt2YXIgYix4LEM7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0''@;'; put 'put ''aXZlPTAsYj10aGlzLmlzdWIocCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZSlyZXR1cm4gcC5uZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKHApLHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpO3RoaXMubGVuZ3Ro''@;'; put 'put ''PnAubGVuZ3RoPyh4PXRoaXMsQz1wKTooeD1wLEM9dGhpcyk7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKGI9KDB8eC53b3Jkc1tIXSkrKDB8Qy53b3Jkc1tIXSkrVCksVD1iPj4+MjY7Zm9yKDswIT09VCYmSDx4Lmxlbmd0aDtIKyspdGhp''@;'; put 'put ''cy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKStUKSxUPWI+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1ULHRoaXMubGVuZ3RoKys7ZWxzZSBpZih4IT09dGhpcylmb3IoO0g8eC5sZW5ndGg7SCsrKXRoaXMud29y''@;'; put 'put ''ZHNbSF09eC53b3Jkc1tIXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHApe3ZhciBiO3JldHVybiAwIT09cC5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHAubmVnYXRpdmU9MCxiPXRoaXMuc3ViKHApLHAubmVnYXRpdmVePTEsYik6MD09PXAubmVnYXRpdmUm''@;'; put 'put ''JjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsYj1wLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsYik6dGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQocCk6cC5jbG9uZSgpLmlhZGQodGhpcyl9LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCl7aWYo''@;'; put 'put ''MCE9PXAubmVnYXRpdmUpe3AubmVnYXRpdmU9MDt2YXIgYj10aGlzLmlhZGQocCk7cmV0dXJuIHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3Jt''@;'; put 'put ''U2lnbigpO3ZhciBDLFQseD10aGlzLmNtcChwKTtpZigwPT09eClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7eD4wPyhDPXRoaXMsVD1wKTooQz1wLFQ9dGhpcyk7Zm9yKHZhciBIPTAsaj0wO2o8VC5sZW5ndGg7aisrKUg9KGI9KDB8''@;'; put 'put ''Qy53b3Jkc1tqXSktKDB8VC53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtmb3IoOzAhPT1IJiZqPEMubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJmI7aWYoMD09PUgmJmo8Qy5sZW5ndGgmJkMhPT10''@;'; put 'put ''aGlzKWZvcig7ajxDLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1DLndvcmRzW2pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxqKSxDIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHApfTt2YXIgWT1mdW5jdGlvbihwLGIseCl7dmFyIEUsbSxBLEM9cC53b3JkcyxUPWIud29yZHMsSD14LndvcmRzLGo9MCxvZT0wfENbMF0sdGU9ODE5MSZvZSxzZT1vZT4+PjEzLHdlPTB8Q1sxXSxVZT04MTkxJndlLEplPXdlPj4+MTMsYXQ9MHxDWzJd''@;'; put 'put ''LE1lPTgxOTEmYXQsdmU9YXQ+Pj4xMyxYZT0wfENbM10samU9ODE5MSZYZSxEZT1YZT4+PjEzLEZlPTB8Q1s0XSxSZT04MTkxJkZlLEllPUZlPj4+MTMsVmU9MHxDWzVdLGtlPTgxOTEmVmUsQWU9VmU+Pj4xMyxfdD0wfENbNl0scnQ9ODE5MSZfdCxRZT1fdD4+PjEzLGRuPTB8Q1s3XSx5dD04''@;'; put 'put ''MTkxJmRuLE10PWRuPj4+MTMsRHQ9MHxDWzhdLGl0PTgxOTEmRHQsJGU9RHQ+Pj4xMyx0dD0wfENbOV0sSGU9ODE5MSZ0dCxkdD10dD4+PjEzLHF0PTB8VFswXSxSdD04MTkxJnF0LFB0PXF0Pj4+MTMsYWk9MHxUWzFdLFF0PTgxOTEmYWksc249YWk+Pj4xMyxSaT0wfFRbMl0sZm49ODE5MSZS''@;'; put 'put ''aSxmdD1SaT4+PjEzLFByPTB8VFszXSxadD04MTkxJlByLEF0PVByPj4+MTMsTG49MHxUWzRdLHN0PTgxOTEmTG4senQ9TG4+Pj4xMyxuaT0wfFRbNV0sV2U9ODE5MSZuaSxUdD1uaT4+PjEzLHJyPTB8VFs2XSxodD04MTkxJnJyLHh0PXJyPj4+MTMsQm49MHxUWzddLG9uPTgxOTEmQm4sanQ9''@;'; put 'put ''Qm4+Pj4xMyxkaT0wfFRbOF0sY249ODE5MSZkaSxwbj1kaT4+PjEzLElpPTB8VFs5XSxYdD04MTkxJklpLGVuPUlpPj4+MTM7eC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9MTk7dmFyIGhvPShqKyhFPU1hdGguaW11bCh0ZSxSdCkpfDApKygoODE5MSYobT0obT1N''@;'; put 'put ''YXRoLmltdWwodGUsUHQpKStNYXRoLmltdWwoc2UsUnQpfDApKTw8MTMpfDA7aj0oKEE9TWF0aC5pbXVsKHNlLFB0KSkrKG0+Pj4xMyl8MCkrKGhvPj4+MjYpfDAsaG8mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFVlLFJ0KSxtPShtPU1hdGguaW11bChVZSxQdCkpK01hdGguaW11bChKZSxSdCl8''@;'; put 'put ''MCxBPU1hdGguaW11bChKZSxQdCk7dmFyIE1pPShqKyhFPUUrTWF0aC5pbXVsKHRlLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsc24pfDApK01hdGguaW11bChzZSxRdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxzbil8MCkrKG0+Pj4xMyl8MCkrKE1p''@;'; put 'put ''Pj4+MjYpfDAsTWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE1lLFJ0KSxtPShtPU1hdGguaW11bChNZSxQdCkpK01hdGguaW11bCh2ZSxSdCl8MCxBPU1hdGguaW11bCh2ZSxQdCksRT1FK01hdGguaW11bChVZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHNuKXwwKStNYXRoLmltdWwoSmUs''@;'; put 'put ''UXQpfDAsQT1BK01hdGguaW11bChKZSxzbil8MDt2YXIgcHI9KGorKEU9RStNYXRoLmltdWwodGUsZm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmdCl8MCkrTWF0aC5pbXVsKHNlLGZuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZ0KXwwKSsobT4+PjEz''@;'; put 'put ''KXwwKSsocHI+Pj4yNil8MCxwciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoamUsUnQpLG09KG09TWF0aC5pbXVsKGplLFB0KSkrTWF0aC5pbXVsKERlLFJ0KXwwLEE9TWF0aC5pbXVsKERlLFB0KSxFPUUrTWF0aC5pbXVsKE1lLFF0KXwwLG09KG09bStNYXRoLmltdWwoTWUsc24pfDApK01hdGgu''@;'; put 'put ''aW11bCh2ZSxRdCl8MCxBPUErTWF0aC5pbXVsKHZlLHNuKXwwLEU9RStNYXRoLmltdWwoVWUsZm4pfDAsbT0obT1tK01hdGguaW11bChVZSxmdCl8MCkrTWF0aC5pbXVsKEplLGZuKXwwLEE9QStNYXRoLmltdWwoSmUsZnQpfDA7dmFyIFduPShqKyhFPUUrTWF0aC5pbXVsKHRlLFp0KXwwKXww''@;'; put 'put ''KSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsQXQpfDApK01hdGguaW11bChzZSxadCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxBdCl8MCkrKG0+Pj4xMyl8MCkrKFduPj4+MjYpfDAsV24mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFJlLFJ0KSxtPShtPU1hdGguaW11bChS''@;'; put 'put ''ZSxQdCkpK01hdGguaW11bChJZSxSdCl8MCxBPU1hdGguaW11bChJZSxQdCksRT1FK01hdGguaW11bChqZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLHNuKXwwKStNYXRoLmltdWwoRGUsUXQpfDAsQT1BK01hdGguaW11bChEZSxzbil8MCxFPUUrTWF0aC5pbXVsKE1lLGZuKXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwoTWUsZnQpfDApK01hdGguaW11bCh2ZSxmbil8MCxBPUErTWF0aC5pbXVsKHZlLGZ0KXwwLEU9RStNYXRoLmltdWwoVWUsWnQpfDAsbT0obT1tK01hdGguaW11bChVZSxBdCl8MCkrTWF0aC5pbXVsKEplLFp0KXwwLEE9QStNYXRoLmltdWwoSmUsQXQpfDA7dmFyIEtpPShq''@;'; put 'put ''KyhFPUUrTWF0aC5pbXVsKHRlLHN0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsenQpfDApK01hdGguaW11bChzZSxzdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx6dCl8MCkrKG0+Pj4xMyl8MCkrKEtpPj4+MjYpfDAsS2kmPTY3MTA4ODYzLEU9TWF0aC5p''@;'; put 'put ''bXVsKGtlLFJ0KSxtPShtPU1hdGguaW11bChrZSxQdCkpK01hdGguaW11bChBZSxSdCl8MCxBPU1hdGguaW11bChBZSxQdCksRT1FK01hdGguaW11bChSZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHNuKXwwKStNYXRoLmltdWwoSWUsUXQpfDAsQT1BK01hdGguaW11bChJZSxzbil8MCxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKGplLGZuKXwwLG09KG09bStNYXRoLmltdWwoamUsZnQpfDApK01hdGguaW11bChEZSxmbil8MCxBPUErTWF0aC5pbXVsKERlLGZ0KXwwLEU9RStNYXRoLmltdWwoTWUsWnQpfDAsbT0obT1tK01hdGguaW11bChNZSxBdCl8MCkrTWF0aC5pbXVsKHZlLFp0KXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwodmUsQXQpfDAsRT1FK01hdGguaW11bChVZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoSmUsc3QpfDAsQT1BK01hdGguaW11bChKZSx6dCl8MDt2YXIgUXI9KGorKEU9RStNYXRoLmltdWwodGUsV2UpfDApfDApKygoODE5MSYobT0obT1tK01h''@;'; put 'put ''dGguaW11bCh0ZSxUdCl8MCkrTWF0aC5pbXVsKHNlLFdlKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFR0KXwwKSsobT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxRciY9NjcxMDg4NjMsRT1NYXRoLmltdWwocnQsUnQpLG09KG09TWF0aC5pbXVsKHJ0LFB0KSkrTWF0aC5pbXVsKFFl''@;'; put 'put ''LFJ0KXwwLEE9TWF0aC5pbXVsKFFlLFB0KSxFPUUrTWF0aC5pbXVsKGtlLFF0KXwwLG09KG09bStNYXRoLmltdWwoa2Usc24pfDApK01hdGguaW11bChBZSxRdCl8MCxBPUErTWF0aC5pbXVsKEFlLHNuKXwwLEU9RStNYXRoLmltdWwoUmUsZm4pfDAsbT0obT1tK01hdGguaW11bChSZSxmdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKEllLGZuKXwwLEE9QStNYXRoLmltdWwoSWUsZnQpfDAsRT1FK01hdGguaW11bChqZSxadCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLEF0KXwwKStNYXRoLmltdWwoRGUsWnQpfDAsQT1BK01hdGguaW11bChEZSxBdCl8MCxFPUUrTWF0aC5pbXVsKE1lLHN0KXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwoTWUsenQpfDApK01hdGguaW11bCh2ZSxzdCl8MCxBPUErTWF0aC5pbXVsKHZlLHp0KXwwLEU9RStNYXRoLmltdWwoVWUsV2UpfDAsbT0obT1tK01hdGguaW11bChVZSxUdCl8MCkrTWF0aC5pbXVsKEplLFdlKXwwLEE9QStNYXRoLmltdWwoSmUsVHQpfDA7dmFyIEpyPShq''@;'; put 'put ''KyhFPUUrTWF0aC5pbXVsKHRlLGh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUseHQpfDApK01hdGguaW11bChzZSxodCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx4dCl8MCkrKG0+Pj4xMyl8MCkrKEpyPj4+MjYpfDAsSnImPTY3MTA4ODYzLEU9TWF0aC5p''@;'; put 'put ''bXVsKHl0LFJ0KSxtPShtPU1hdGguaW11bCh5dCxQdCkpK01hdGguaW11bChNdCxSdCl8MCxBPU1hdGguaW11bChNdCxQdCksRT1FK01hdGguaW11bChydCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LHNuKXwwKStNYXRoLmltdWwoUWUsUXQpfDAsQT1BK01hdGguaW11bChRZSxzbil8MCxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKGtlLGZuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZnQpfDApK01hdGguaW11bChBZSxmbil8MCxBPUErTWF0aC5pbXVsKEFlLGZ0KXwwLEU9RStNYXRoLmltdWwoUmUsWnQpfDAsbT0obT1tK01hdGguaW11bChSZSxBdCl8MCkrTWF0aC5pbXVsKEllLFp0KXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoSWUsQXQpfDAsRT1FK01hdGguaW11bChqZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLHp0KXwwKStNYXRoLmltdWwoRGUsc3QpfDAsQT1BK01hdGguaW11bChEZSx6dCl8MCxFPUUrTWF0aC5pbXVsKE1lLFdlKXwwLG09KG09bStNYXRoLmltdWwoTWUsVHQpfDApK01hdGgu''@;'; put 'put ''aW11bCh2ZSxXZSl8MCxBPUErTWF0aC5pbXVsKHZlLFR0KXwwLEU9RStNYXRoLmltdWwoVWUsaHQpfDAsbT0obT1tK01hdGguaW11bChVZSx4dCl8MCkrTWF0aC5pbXVsKEplLGh0KXwwLEE9QStNYXRoLmltdWwoSmUseHQpfDA7dmFyIEJpPShqKyhFPUUrTWF0aC5pbXVsKHRlLG9uKXwwKXww''@;'; put 'put ''KSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsanQpfDApK01hdGguaW11bChzZSxvbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxqdCl8MCkrKG0+Pj4xMyl8MCkrKEJpPj4+MjYpfDAsQmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGl0LFJ0KSxtPShtPU1hdGguaW11bChp''@;'; put 'put ''dCxQdCkpK01hdGguaW11bCgkZSxSdCl8MCxBPU1hdGguaW11bCgkZSxQdCksRT1FK01hdGguaW11bCh5dCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHNuKXwwKStNYXRoLmltdWwoTXQsUXQpfDAsQT1BK01hdGguaW11bChNdCxzbil8MCxFPUUrTWF0aC5pbXVsKHJ0LGZuKXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwocnQsZnQpfDApK01hdGguaW11bChRZSxmbil8MCxBPUErTWF0aC5pbXVsKFFlLGZ0KXwwLEU9RStNYXRoLmltdWwoa2UsWnQpfDAsbT0obT1tK01hdGguaW11bChrZSxBdCl8MCkrTWF0aC5pbXVsKEFlLFp0KXwwLEE9QStNYXRoLmltdWwoQWUsQXQpfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bChSZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHp0KXwwKStNYXRoLmltdWwoSWUsc3QpfDAsQT1BK01hdGguaW11bChJZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGplLFdlKXwwLG09KG09bStNYXRoLmltdWwoamUsVHQpfDApK01hdGguaW11bChEZSxXZSl8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KERlLFR0KXwwLEU9RStNYXRoLmltdWwoTWUsaHQpfDAsbT0obT1tK01hdGguaW11bChNZSx4dCl8MCkrTWF0aC5pbXVsKHZlLGh0KXwwLEE9QStNYXRoLmltdWwodmUseHQpfDAsRT1FK01hdGguaW11bChVZSxvbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGp0KXwwKStNYXRoLmltdWwoSmUs''@;'; put 'put ''b24pfDAsQT1BK01hdGguaW11bChKZSxqdCl8MDt2YXIgVmk9KGorKEU9RStNYXRoLmltdWwodGUsY24pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxwbil8MCkrTWF0aC5pbXVsKHNlLGNuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHBuKXwwKSsobT4+PjEz''@;'; put 'put ''KXwwKSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUnQpLG09KG09TWF0aC5pbXVsKEhlLFB0KSkrTWF0aC5pbXVsKGR0LFJ0KXwwLEE9TWF0aC5pbXVsKGR0LFB0KSxFPUUrTWF0aC5pbXVsKGl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoaXQsc24pfDApK01hdGgu''@;'; put 'put ''aW11bCgkZSxRdCl8MCxBPUErTWF0aC5pbXVsKCRlLHNuKXwwLEU9RStNYXRoLmltdWwoeXQsZm4pfDAsbT0obT1tK01hdGguaW11bCh5dCxmdCl8MCkrTWF0aC5pbXVsKE10LGZuKXwwLEE9QStNYXRoLmltdWwoTXQsZnQpfDAsRT1FK01hdGguaW11bChydCxadCl8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKHJ0LEF0KXwwKStNYXRoLmltdWwoUWUsWnQpfDAsQT1BK01hdGguaW11bChRZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGtlLHN0KXwwLG09KG09bStNYXRoLmltdWwoa2UsenQpfDApK01hdGguaW11bChBZSxzdCl8MCxBPUErTWF0aC5pbXVsKEFlLHp0KXwwLEU9RStNYXRoLmltdWwoUmUs''@;'; put 'put ''V2UpfDAsbT0obT1tK01hdGguaW11bChSZSxUdCl8MCkrTWF0aC5pbXVsKEllLFdlKXwwLEE9QStNYXRoLmltdWwoSWUsVHQpfDAsRT1FK01hdGguaW11bChqZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLHh0KXwwKStNYXRoLmltdWwoRGUsaHQpfDAsQT1BK01hdGguaW11bChEZSx4dCl8''@;'; put 'put ''MCxFPUUrTWF0aC5pbXVsKE1lLG9uKXwwLG09KG09bStNYXRoLmltdWwoTWUsanQpfDApK01hdGguaW11bCh2ZSxvbil8MCxBPUErTWF0aC5pbXVsKHZlLGp0KXwwLEU9RStNYXRoLmltdWwoVWUsY24pfDAsbT0obT1tK01hdGguaW11bChVZSxwbil8MCkrTWF0aC5pbXVsKEplLGNuKXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoSmUscG4pfDA7dmFyIElvPShqKyhFPUUrTWF0aC5pbXVsKHRlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZW4pfDApK01hdGguaW11bChzZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxlbil8MCkrKG0+Pj4xMyl8MCkrKElv''@;'; put 'put ''Pj4+MjYpfDAsSW8mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFF0KSxtPShtPU1hdGguaW11bChIZSxzbikpK01hdGguaW11bChkdCxRdCl8MCxBPU1hdGguaW11bChkdCxzbiksRT1FK01hdGguaW11bChpdCxmbil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZ0KXwwKStNYXRoLmltdWwoJGUs''@;'; put 'put ''Zm4pfDAsQT1BK01hdGguaW11bCgkZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFp0KXwwLG09KG09bStNYXRoLmltdWwoeXQsQXQpfDApK01hdGguaW11bChNdCxadCl8MCxBPUErTWF0aC5pbXVsKE10LEF0KXwwLEU9RStNYXRoLmltdWwocnQsc3QpfDAsbT0obT1tK01hdGguaW11bChydCx6''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKFFlLHN0KXwwLEE9QStNYXRoLmltdWwoUWUsenQpfDAsRT1FK01hdGguaW11bChrZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLFR0KXwwKStNYXRoLmltdWwoQWUsV2UpfDAsQT1BK01hdGguaW11bChBZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFJlLGh0KXwwLG09''@;'; put 'put ''KG09bStNYXRoLmltdWwoUmUseHQpfDApK01hdGguaW11bChJZSxodCl8MCxBPUErTWF0aC5pbXVsKEllLHh0KXwwLEU9RStNYXRoLmltdWwoamUsb24pfDAsbT0obT1tK01hdGguaW11bChqZSxqdCl8MCkrTWF0aC5pbXVsKERlLG9uKXwwLEE9QStNYXRoLmltdWwoRGUsanQpfDAsRT1FK01h''@;'; put 'put ''dGguaW11bChNZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHBuKXwwKStNYXRoLmltdWwodmUsY24pfDAsQT1BK01hdGguaW11bCh2ZSxwbil8MDt2YXIgT3I9KGorKEU9RStNYXRoLmltdWwoVWUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChVZSxlbil8MCkrTWF0aC5p''@;'; put 'put ''bXVsKEplLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEplLGVuKXwwKSsobT4+PjEzKXwwKSsoT3I+Pj4yNil8MCxPciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsZm4pLG09KG09TWF0aC5pbXVsKEhlLGZ0KSkrTWF0aC5pbXVsKGR0LGZuKXwwLEE9TWF0aC5pbXVsKGR0LGZ0''@;'; put 'put ''KSxFPUUrTWF0aC5pbXVsKGl0LFp0KXwwLG09KG09bStNYXRoLmltdWwoaXQsQXQpfDApK01hdGguaW11bCgkZSxadCl8MCxBPUErTWF0aC5pbXVsKCRlLEF0KXwwLEU9RStNYXRoLmltdWwoeXQsc3QpfDAsbT0obT1tK01hdGguaW11bCh5dCx6dCl8MCkrTWF0aC5pbXVsKE10LHN0KXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoTXQsenQpfDAsRT1FK01hdGguaW11bChydCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LFR0KXwwKStNYXRoLmltdWwoUWUsV2UpfDAsQT1BK01hdGguaW11bChRZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGtlLGh0KXwwLG09KG09bStNYXRoLmltdWwoa2UseHQpfDApK01h''@;'; put 'put ''dGguaW11bChBZSxodCl8MCxBPUErTWF0aC5pbXVsKEFlLHh0KXwwLEU9RStNYXRoLmltdWwoUmUsb24pfDAsbT0obT1tK01hdGguaW11bChSZSxqdCl8MCkrTWF0aC5pbXVsKEllLG9uKXwwLEE9QStNYXRoLmltdWwoSWUsanQpfDAsRT1FK01hdGguaW11bChqZSxjbil8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKGplLHBuKXwwKStNYXRoLmltdWwoRGUsY24pfDAsQT1BK01hdGguaW11bChEZSxwbil8MDt2YXIgWWk9KGorKEU9RStNYXRoLmltdWwoTWUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChNZSxlbil8MCkrTWF0aC5pbXVsKHZlLFh0KXwwKSk8PDEzKXwwO2o9KChB''@;'; put 'put ''PUErTWF0aC5pbXVsKHZlLGVuKXwwKSsobT4+PjEzKXwwKSsoWWk+Pj4yNil8MCxZaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsWnQpLG09KG09TWF0aC5pbXVsKEhlLEF0KSkrTWF0aC5pbXVsKGR0LFp0KXwwLEE9TWF0aC5pbXVsKGR0LEF0KSxFPUUrTWF0aC5pbXVsKGl0LHN0KXwwLG09''@;'; put 'put ''KG09bStNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCgkZSxzdCl8MCxBPUErTWF0aC5pbXVsKCRlLHp0KXwwLEU9RStNYXRoLmltdWwoeXQsV2UpfDAsbT0obT1tK01hdGguaW11bCh5dCxUdCl8MCkrTWF0aC5pbXVsKE10LFdlKXwwLEE9QStNYXRoLmltdWwoTXQsVHQpfDAsRT1FK01h''@;'; put 'put ''dGguaW11bChydCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LHh0KXwwKStNYXRoLmltdWwoUWUsaHQpfDAsQT1BK01hdGguaW11bChRZSx4dCl8MCxFPUUrTWF0aC5pbXVsKGtlLG9uKXwwLG09KG09bStNYXRoLmltdWwoa2UsanQpfDApK01hdGguaW11bChBZSxvbil8MCxBPUErTWF0aC5p''@;'; put 'put ''bXVsKEFlLGp0KXwwLEU9RStNYXRoLmltdWwoUmUsY24pfDAsbT0obT1tK01hdGguaW11bChSZSxwbil8MCkrTWF0aC5pbXVsKEllLGNuKXwwLEE9QStNYXRoLmltdWwoSWUscG4pfDA7dmFyIGdvPShqKyhFPUUrTWF0aC5pbXVsKGplLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmlt''@;'; put 'put ''dWwoamUsZW4pfDApK01hdGguaW11bChEZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChEZSxlbil8MCkrKG0+Pj4xMyl8MCkrKGdvPj4+MjYpfDAsZ28mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHN0KSxtPShtPU1hdGguaW11bChIZSx6dCkpK01hdGguaW11bChkdCxzdCl8''@;'; put 'put ''MCxBPU1hdGguaW11bChkdCx6dCksRT1FK01hdGguaW11bChpdCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFR0KXwwKStNYXRoLmltdWwoJGUsV2UpfDAsQT1BK01hdGguaW11bCgkZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoeXQseHQpfDApK01h''@;'; put 'put ''dGguaW11bChNdCxodCl8MCxBPUErTWF0aC5pbXVsKE10LHh0KXwwLEU9RStNYXRoLmltdWwocnQsb24pfDAsbT0obT1tK01hdGguaW11bChydCxqdCl8MCkrTWF0aC5pbXVsKFFlLG9uKXwwLEE9QStNYXRoLmltdWwoUWUsanQpfDAsRT1FK01hdGguaW11bChrZSxjbil8MCxtPShtPW0rTWF0''@;'; put 'put ''aC5pbXVsKGtlLHBuKXwwKStNYXRoLmltdWwoQWUsY24pfDAsQT1BK01hdGguaW11bChBZSxwbil8MDt2YXIgZXI9KGorKEU9RStNYXRoLmltdWwoUmUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChSZSxlbil8MCkrTWF0aC5pbXVsKEllLFh0KXwwKSk8PDEzKXwwO2o9KChB''@;'; put 'put ''PUErTWF0aC5pbXVsKEllLGVuKXwwKSsobT4+PjEzKXwwKSsoZXI+Pj4yNil8MCxlciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV2UpLG09KG09TWF0aC5pbXVsKEhlLFR0KSkrTWF0aC5pbXVsKGR0LFdlKXwwLEE9TWF0aC5pbXVsKGR0LFR0KSxFPUUrTWF0aC5pbXVsKGl0LGh0KXwwLG09''@;'; put 'put ''KG09bStNYXRoLmltdWwoaXQseHQpfDApK01hdGguaW11bCgkZSxodCl8MCxBPUErTWF0aC5pbXVsKCRlLHh0KXwwLEU9RStNYXRoLmltdWwoeXQsb24pfDAsbT0obT1tK01hdGguaW11bCh5dCxqdCl8MCkrTWF0aC5pbXVsKE10LG9uKXwwLEE9QStNYXRoLmltdWwoTXQsanQpfDAsRT1FK01h''@;'; put 'put ''dGguaW11bChydCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LHBuKXwwKStNYXRoLmltdWwoUWUsY24pfDAsQT1BK01hdGguaW11bChRZSxwbil8MDt2YXIgY289KGorKEU9RStNYXRoLmltdWwoa2UsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChrZSxlbil8MCkrTWF0aC5p''@;'; put 'put ''bXVsKEFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEFlLGVuKXwwKSsobT4+PjEzKXwwKSsoY28+Pj4yNil8MCxjbyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaHQpLG09KG09TWF0aC5pbXVsKEhlLHh0KSkrTWF0aC5pbXVsKGR0LGh0KXwwLEE9TWF0aC5pbXVsKGR0LHh0''@;'; put 'put ''KSxFPUUrTWF0aC5pbXVsKGl0LG9uKXwwLG09KG09bStNYXRoLmltdWwoaXQsanQpfDApK01hdGguaW11bCgkZSxvbil8MCxBPUErTWF0aC5pbXVsKCRlLGp0KXwwLEU9RStNYXRoLmltdWwoeXQsY24pfDAsbT0obT1tK01hdGguaW11bCh5dCxwbil8MCkrTWF0aC5pbXVsKE10LGNuKXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoTXQscG4pfDA7dmFyIF9vPShqKyhFPUUrTWF0aC5pbXVsKHJ0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwocnQsZW4pfDApK01hdGguaW11bChRZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChRZSxlbil8MCkrKG0+Pj4xMyl8MCkrKF9v''@;'; put 'put ''Pj4+MjYpfDAsX28mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLG9uKSxtPShtPU1hdGguaW11bChIZSxqdCkpK01hdGguaW11bChkdCxvbil8MCxBPU1hdGguaW11bChkdCxqdCksRT1FK01hdGguaW11bChpdCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHBuKXwwKStNYXRoLmltdWwoJGUs''@;'; put 'put ''Y24pfDAsQT1BK01hdGguaW11bCgkZSxwbil8MDt2YXIgT289KGorKEU9RStNYXRoLmltdWwoeXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh5dCxlbil8MCkrTWF0aC5pbXVsKE10LFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKE10LGVuKXwwKSsobT4+PjEz''@;'; put 'put ''KXwwKSsoT28+Pj4yNil8MCxPbyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsY24pLG09KG09TWF0aC5pbXVsKEhlLHBuKSkrTWF0aC5pbXVsKGR0LGNuKXwwLEE9TWF0aC5pbXVsKGR0LHBuKTt2YXIgSG89KGorKEU9RStNYXRoLmltdWwoaXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01h''@;'; put 'put ''dGguaW11bChpdCxlbil8MCkrTWF0aC5pbXVsKCRlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKCRlLGVuKXwwKSsobT4+PjEzKXwwKSsoSG8+Pj4yNil8MCxIbyY9NjcxMDg4NjM7dmFyIGVpPShqKyhFPU1hdGguaW11bChIZSxYdCkpfDApKygoODE5MSYobT0obT1NYXRoLmlt''@;'; put 'put ''dWwoSGUsZW4pKStNYXRoLmltdWwoZHQsWHQpfDApKTw8MTMpfDA7cmV0dXJuIGo9KChBPU1hdGguaW11bChkdCxlbikpKyhtPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxIWzBdPWhvLEhbMV09TWksSFsyXT1wcixIWzNdPVduLEhbNF09S2ksSFs1XT1RcixIWzZdPUpyLEhb''@;'; put 'put ''N109QmksSFs4XT1WaSxIWzldPUlvLEhbMTBdPU9yLEhbMTFdPVlpLEhbMTJdPWdvLEhbMTNdPWVyLEhbMTRdPWNvLEhbMTVdPV9vLEhbMTZdPU9vLEhbMTddPUhvLEhbMThdPWVpLDAhPT1qJiYoSFsxOV09aix4Lmxlbmd0aCsrKSx4fTtmdW5jdGlvbiBlZShWLHAsYil7cmV0dXJuKG5ldyBK''@;'; put 'put ''KS5tdWxwKFYscCxiKX1mdW5jdGlvbiBKKFYscCl7dGhpcy54PVYsdGhpcy55PXB9TWF0aC5pbXVsfHwoWT1XKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5sZW5ndGgrcC5sZW5ndGg7cmV0dXJuIHg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1wLmxlbmd0''@;'; put 'put ''aD9ZKHRoaXMscCxiKTpDPDYzP1codGhpcyxwLGIpOkM8MTAyND9mdW5jdGlvbiBYKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZSxiLmxlbmd0aD1WLmxlbmd0aCtwLmxlbmd0aDtmb3IodmFyIHg9MCxDPTAsVD0wO1Q8Yi5sZW5ndGgtMTtUKyspe3ZhciBIPUM7Qz0w''@;'; put 'put ''O2Zvcih2YXIgaj02NzEwODg2MyZ4LEU9TWF0aC5taW4oVCxwLmxlbmd0aC0xKSxtPU1hdGgubWF4KDAsVC1WLmxlbmd0aCsxKTttPD1FO20rKyl7dmFyIHNlPSgwfFYud29yZHNbVC1tXSkqKDB8cC53b3Jkc1ttXSksd2U9NjcxMDg4NjMmc2U7aj02NzEwODg2MyYod2U9d2UranwwKSxDKz0o''@;'; put 'put ''SD0oSD1IKyhzZS82NzEwODg2NHwwKXwwKSsod2U+Pj4yNil8MCk+Pj4yNixIJj02NzEwODg2M31iLndvcmRzW1RdPWoseD1ILEg9Q31yZXR1cm4gMCE9PXg/Yi53b3Jkc1tUXT14OmIubGVuZ3RoLS0sYi5zdHJpcCgpfSh0aGlzLHAsYik6ZWUodGhpcyxwLGIpLHh9LEoucHJvdG90eXBlLm1h''@;'; put 'put ''a2VSQlQ9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PXcucHJvdG90eXBlLl9jb3VudEJpdHMocCktMSxDPTA7QzxwO0MrKyliW0NdPXRoaXMucmV2QmluKEMseCxwKTtyZXR1cm4gYn0sSi5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHAsYix4KXtpZigwPT09cHx8cD09''@;'; put 'put ''PXgtMSlyZXR1cm4gcDtmb3IodmFyIEM9MCxUPTA7VDxiO1QrKylDfD0oMSZwKTw8Yi1ULTEscD4+PTE7cmV0dXJuIEN9LEoucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24ocCxiLHgsQyxULEgpe2Zvcih2YXIgaj0wO2o8SDtqKyspQ1tqXT1iW3Bbal1dLFRbal09eFtwW2pdXX0sSi5wcm90''@;'; put 'put ''b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXt0aGlzLnBlcm11dGUoSCxwLGIseCxDLFQpO2Zvcih2YXIgaj0xO2o8VDtqPDw9MSlmb3IodmFyIEU9ajw8MSxtPU1hdGguY29zKDIqTWF0aC5QSS9FKSxBPU1hdGguc2luKDIqTWF0aC5QSS9FKSxvZT0wO29lPFQ7b2UrPUUp''@;'; put 'put ''Zm9yKHZhciB0ZT1tLHNlPUEsd2U9MDt3ZTxqO3dlKyspe3ZhciBVZT14W29lK3dlXSxKZT1DW29lK3dlXSxhdD14W29lK3dlK2pdLE1lPUNbb2Urd2Ural0sdmU9dGUqYXQtc2UqTWU7TWU9dGUqTWUrc2UqYXQseFtvZSt3ZV09VWUrKGF0PXZlKSxDW29lK3dlXT1KZStNZSx4W29lK3dlK2pd''@;'; put 'put ''PVVlLWF0LENbb2Urd2Ural09SmUtTWUsd2UhPT1FJiYodmU9bSp0ZS1BKnNlLHNlPW0qc2UrQSp0ZSx0ZT12ZSl9fSxKLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihwLGIpe3ZhciB4PTF8TWF0aC5tYXgoYixwKSxDPTEmeCxUPTA7Zm9yKHg9eC8yfDA7eDt4Pj4+PTEpVCsrO3Jl''@;'; put 'put ''dHVybiAxPDxUKzErQ30sSi5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHAsYix4KXtpZighKHg8PTEpKWZvcih2YXIgQz0wO0M8eC8yO0MrKyl7dmFyIFQ9cFtDXTtwW0NdPXBbeC1DLTFdLHBbeC1DLTFdPVQsVD1iW0NdLGJbQ109LWJbeC1DLTFdLGJbeC1DLTFdPS1UfX0sSi5wcm90''@;'; put 'put ''b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTAsQz0wO0M8Yi8yO0MrKyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5kKHBbMipDKzFdL2IpK01hdGgucm91bmQocFsyKkNdL2IpK3g7cFtDXT02NzEwODg2MyZULHg9VDw2NzEwODg2ND8wOlQvNjcxMDg4NjR8MH1yZXR1''@;'; put 'put ''cm4gcH0sSi5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihwLGIseCxDKXtmb3IodmFyIFQ9MCxIPTA7SDxiO0grKyl4WzIqSF09ODE5MSYoVCs9MHxwW0hdKSx4WzIqSCsxXT04MTkxJihUPj4+PTEzKSxUPj4+PTEzO2ZvcihIPTIqYjtIPEM7KytIKXhbSF09MDtnKDA9PT1UKSxnKCEo''@;'; put 'put ''LTgxOTImVCkpfSxKLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD0wO3g8cDt4KyspYlt4XT0wO3JldHVybiBifSxKLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz0yKnRoaXMuZ3Vlc3NMZW4xM2IocC5sZW5ndGgsYi5sZW5n''@;'; put 'put ''dGgpLFQ9dGhpcy5tYWtlUkJUKEMpLEg9dGhpcy5zdHViKEMpLGo9bmV3IEFycmF5KEMpLEU9bmV3IEFycmF5KEMpLG09bmV3IEFycmF5KEMpLEE9bmV3IEFycmF5KEMpLG9lPW5ldyBBcnJheShDKSx0ZT1uZXcgQXJyYXkoQyksc2U9eC53b3JkcztzZS5sZW5ndGg9Qyx0aGlzLmNvbnZlcnQx''@;'; put 'put ''M2IocC53b3JkcyxwLmxlbmd0aCxqLEMpLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLEEsQyksdGhpcy50cmFuc2Zvcm0oaixILEUsbSxDLFQpLHRoaXMudHJhbnNmb3JtKEEsSCxvZSx0ZSxDLFQpO2Zvcih2YXIgd2U9MDt3ZTxDO3dlKyspe3ZhciBVZT1FW3dlXSpvZVt3ZV0t''@;'; put 'put ''bVt3ZV0qdGVbd2VdO21bd2VdPUVbd2VdKnRlW3dlXSttW3dlXSpvZVt3ZV0sRVt3ZV09VWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKEUsbSxDKSx0aGlzLnRyYW5zZm9ybShFLG0sc2UsSCxDLFQpLHRoaXMuY29uanVnYXRlKHNlLEgsQyksdGhpcy5ub3JtYWxpemUxM2Ioc2UsQykseC5uZWdh''@;'; put 'put ''dGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9cC5sZW5ndGgrYi5sZW5ndGgseC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSx0aGlzLm11''@;'; put 'put ''bFRvKHAsYil9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSxlZSh0aGlzLHAsYil9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUo''@;'; put 'put ''KS5tdWxUbyhwLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KTtmb3IodmFyIGI9MCx4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKnAsVD0oNjcxMDg4NjMmQykrKDY3MTA4''@;'; put 'put ''ODYzJmIpO2I+Pj0yNixiKz1DLzY3MTA4ODY0fDAsYis9VD4+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PWImJih0aGlzLndvcmRzW3hdPWIsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgp''@;'; put 'put ''LmltdWxuKHApfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwKXt2YXIgYj1mdW5jdGlvbiBV''@;'; put 'put ''KFYpe2Zvcih2YXIgcD1uZXcgQXJyYXkoVi5iaXRMZW5ndGgoKSksYj0wO2I8cC5sZW5ndGg7YisrKXt2YXIgQz1iJTI2O3BbYl09KFYud29yZHNbYi8yNnwwXSYxPDxDKT4+PkN9cmV0dXJuIHB9KHApO2lmKDA9PT1iLmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciB4PXRoaXMsQz0w''@;'; put 'put ''O0M8Yi5sZW5ndGgmJjA9PT1iW0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzxiLmxlbmd0aClmb3IodmFyIFQ9eC5zcXIoKTtDPGIubGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PWJbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHApe2coIm51''@;'; put 'put ''bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgVCxiPXAlMjYseD0ocC1iKS8yNixDPTY3MTA4ODYzPj4+MjYtYjw8MjYtYjtpZigwIT09Yil7dmFyIEg9MDtmb3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgaj10aGlzLndvcmRzW1RdJkM7dGhpcy53b3Jkc1tUXT0oMHx0aGlzLndvcmRz''@;'; put 'put ''W1RdKS1qPDxifEgsSD1qPj4+MjYtYn1IJiYodGhpcy53b3Jkc1tUXT1ILHRoaXMubGVuZ3RoKyspfWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4O1QrKyl0aGlzLndvcmRzW1RdPTA7dGhpcy5s''@;'; put 'put ''ZW5ndGgrPXh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24ocCxiLHgpe3ZhciBDO2coIm51bWJlciI9PXR5cGVvZiBw''@;'; put 'put ''JiZwPj0wKSxDPWI/KGItYiUyNikvMjY6MDt2YXIgVD1wJTI2LEg9TWF0aC5taW4oKHAtVCkvMjYsdGhpcy5sZW5ndGgpLGo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtpZihDLT1ILEM9TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09MDttPEg7bSsrKUUud29yZHNbbV09dGhpcy53''@;'; put 'put ''b3Jkc1ttXTtFLmxlbmd0aD1IfWlmKDAhPT1IKWlmKHRoaXMubGVuZ3RoPkgpZm9yKHRoaXMubGVuZ3RoLT1ILG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRoaXMud29yZHNbbStIXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBBPTA7Zm9yKG09''@;'; put 'put ''dGhpcy5sZW5ndGgtMTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIG9lPTB8dGhpcy53b3Jkc1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8b2U+Pj5ULEE9b2Uman1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29y''@;'; put 'put ''ZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4ocCxiLHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25l''@;'; put 'put ''KCkuaXNobG4ocCl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4ocCl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHApe3Jl''@;'; put 'put ''dHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHApfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhpcy53b3Jkc1t4XSYxPDxiKSl9LHcucHJvdG90''@;'; put 'put ''eXBlLmltYXNrbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9eD90aGlzOigw''@;'; put 'put ''IT09YiYmeCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT1iJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5iPDxiKSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5j''@;'; put 'put ''bG9uZSgpLmltYXNrbihwKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MD90aGlzLmlzdWJuKC1wKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHA/''@;'; put 'put ''KHRoaXMud29yZHNbMF09cC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihwKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHApe3RoaXMud29y''@;'; put 'put ''ZHNbMF0rPXA7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXT49NjcxMDg4NjQ7YisrKXRoaXMud29yZHNbYl0tPTY3MTA4ODY0LGI9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbYisxXT0xOnRoaXMud29yZHNbYisxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRo''@;'; put 'put ''Lm1heCh0aGlzLmxlbmd0aCxiKzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHApe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MClyZXR1cm4gdGhpcy5pYWRkbigtcCk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9''@;'; put 'put ''MCx0aGlzLmlhZGRuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXAsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3Ro''@;'; put 'put ''JiZ0aGlzLndvcmRzW2JdPDA7YisrKXRoaXMud29yZHNbYl0rPTY3MTA4ODY0LHRoaXMud29yZHNbYisxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4ocCl9LHcucHJvdG90eXBlLnN1Ym49ZnVu''@;'; put 'put ''Y3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihwKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9p''@;'; put 'put ''c2hsbnN1Ym11bD1mdW5jdGlvbihwLGIseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKHAubGVuZ3RoK3gpO3ZhciBILGo9MDtmb3IoVD0wO1Q8cC5sZW5ndGg7VCsrKXtIPSgwfHRoaXMud29yZHNbVCt4XSkrajt2YXIgRT0oMHxwLndvcmRzW1RdKSpiO2o9KChILT02NzEwODg2MyZFKT4+MjYpLShF''@;'; put 'put ''LzY3MTA4ODY0fDApLHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIfWZvcig7VDx0aGlzLmxlbmd0aC14O1QrKylqPShIPSgwfHRoaXMud29yZHNbVCt4XSkraik+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIO2lmKDA9PT1qKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKGcoLTE9PT1q''@;'; put 'put ''KSxqPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKWo9KEg9LSgwfHRoaXMud29yZHNbVF0pK2opPj4yNix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJkg7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10''@;'; put 'put ''aGlzLmNsb25lKCksVD1wLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRoaXMuX2NvdW50Qml0cyhIKSkmJihUPVQudXNobG4oeCksQy5pdXNobG4oeCksSD0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgtVC5sZW5ndGg7aWYoIm1vZCIhPT1iKXsobT1u''@;'; put 'put ''ZXcgdyhudWxsKSkubGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0aCk7Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0wfXZhciBvZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09b2UubmVnYXRpdmUmJihDPW9lLG0mJihtLndvcmRzW0Vd''@;'; put 'put ''PTEpKTtmb3IodmFyIHRlPUUtMTt0ZT49MDt0ZS0tKXt2YXIgc2U9NjcxMDg4NjQqKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZV0pKygwfEMud29yZHNbVC5sZW5ndGgrdGUtMV0pO2ZvcihzZT1NYXRoLm1pbihzZS9IfDAsNjcxMDg4NjMpLEMuX2lzaGxuc3VibXVsKFQsc2UsdGUpOzAhPT1DLm5l''@;'; put 'put ''Z2F0aXZlOylzZS0tLEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsdGUpLEMuaXNaZXJvKCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1t0ZV09c2UpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09YiYmMCE9PXgmJkMuaXVzaHJuKHgpLHtkaXY6bXx8''@;'; put 'put ''bnVsbCxtb2Q6Q319LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGcoIXAuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1v''@;'; put 'put ''ZChwLGIpLCJtb2QiIT09YiYmKEM9SC5kaXYubmVnKCkpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChwKSkse2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlPyhIPXRoaXMuZGl2bW9kKHAubmVnKCksYiks''@;'; put 'put ''Im1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSkse2RpdjpDLG1vZDpILm1vZH0pOnRoaXMubmVnYXRpdmUmcC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLm5lZygpLGIpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaXN1YihwKSkse2RpdjpI''@;'; put 'put ''LmRpdixtb2Q6VH0pOnAubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChwKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1wLmxlbmd0aD8iZGl2Ij09PWI/e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09Yj97ZGl2Om51bGwsbW9kOm5ldyB3KHRo''@;'; put 'put ''aXMubW9kbihwLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHAsYik7dmFyIEMsVCxIfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsImRp''@;'; put 'put ''diIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVu''@;'; put 'put ''Y3Rpb24ocCl7dmFyIGI9dGhpcy5kaXZtb2QocCk7aWYoYi5tb2QuaXNaZXJvKCkpcmV0dXJuIGIuZGl2O3ZhciB4PTAhPT1iLmRpdi5uZWdhdGl2ZT9iLm1vZC5pc3ViKHApOmIubW9kLEM9cC51c2hybigxKSxUPXAuYW5kbG4oMSksSD14LmNtcChDKTtyZXR1cm4gSDwwfHwxPT09VCYmMD09''@;'; put 'put ''PUg/Yi5kaXY6MCE9PWIuZGl2Lm5lZ2F0aXZlP2IuZGl2LmlzdWJuKDEpOmIuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0oMTw8MjYpJXAseD0wLEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl4PShiKngrKDB8dGhp''@;'; put 'put ''cy53b3Jkc1tDXSkpJXA7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQqYjt0aGlzLndvcmRzW3hdPUMvcHwwLGI9''@;'; put 'put ''QyVwfXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihwKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgYj10aGlzLHg9cC5jbG9u''@;'; put 'put ''ZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPW5ldyB3KDApLGo9bmV3IHcoMSksRT0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7KWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpLCsrRTtmb3IodmFyIG09eC5jbG9u''@;'; put 'put ''ZSgpLEE9Yi5jbG9uZSgpOyFiLmlzWmVybygpOyl7Zm9yKHZhciBvZT0wLHRlPTE7IShiLndvcmRzWzBdJnRlKSYmb2U8MjY7KytvZSx0ZTw8PTEpO2lmKG9lPjApZm9yKGIuaXVzaHJuKG9lKTtvZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2RkKCkpJiYoQy5pYWRkKG0pLFQuaXN1YihBKSks''@;'; put 'put ''Qy5pdXNocm4oMSksVC5pdXNocm4oMSk7Zm9yKHZhciBzZT0wLHdlPTE7ISh4LndvcmRzWzBdJndlKSYmc2U8MjY7KytzZSx3ZTw8PTEpO2lmKHNlPjApZm9yKHguaXVzaHJuKHNlKTtzZS0tID4wOykoSC5pc09kZCgpfHxqLmlzT2RkKCkpJiYoSC5pYWRkKG0pLGouaXN1YihBKSksSC5pdXNo''@;'; put 'put ''cm4oMSksai5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoSCksVC5pc3ViKGopKTooeC5pc3ViKGIpLEguaXN1YihDKSxqLmlzdWIoVCkpfXJldHVybnthOkgsYjpqLGdjZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihwKXtnKDA9PT1w''@;'; put 'put ''Lm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgb2UsYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPXguY2xvbmUoKTtiLmNtcG4oMSk+MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFy''@;'; put 'put ''IGo9MCxFPTE7IShiLndvcmRzWzBdJkUpJiZqPDI2OysraixFPDw9MSk7aWYoaj4wKWZvcihiLml1c2hybihqKTtqLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKEgpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkmJm08MjY7KyttLEE8PD0xKTtpZihtPjApZm9y''@;'; put 'put ''KHguaXVzaHJuKG0pO20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoSCksVC5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoVCkpOih4LmlzdWIoYiksVC5pc3ViKEMpKX1yZXR1cm4ob2U9MD09PWIuY21wbigxKT9DOlQpLmNtcG4oMCk8MCYmb2UuaWFkZChwKSxvZX0s''@;'; put 'put ''dy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHApe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHAuYWJzKCk7aWYocC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgYj10aGlzLmNsb25lKCkseD1wLmNsb25lKCk7Yi5uZWdhdGl2ZT0wLHgubmVnYXRpdmU9MDtmb3IodmFyIEM9MDtiLmlz''@;'; put 'put ''RXZlbigpJiZ4LmlzRXZlbigpO0MrKyliLml1c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zvcig7Yi5pc0V2ZW4oKTspYi5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD1iLmNtcCh4KTtpZihUPDApe3ZhciBIPWI7Yj14LHg9SH1lbHNlIGlmKDA9PT1U''@;'; put 'put ''fHwwPT09eC5jbXBuKDEpKWJyZWFrO2IuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZWdjZChwKS5hLnVtb2QocCl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBd''@;'; put 'put ''KX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZwfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCk7''@;'; put 'put ''dmFyIGI9cCUyNix4PShwLWIpLzI2LEM9MTw8YjtpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIgVD1DLEg9eDswIT09VCYmSDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPTB8dGhpcy53b3Jkc1tIXTtUPShqKz1U''@;'; put 'put ''KT4+PjI2LHRoaXMud29yZHNbSF09aiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYodGhpcy53b3Jkc1tIXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5jbXBuPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhYilyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmYilyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxzZXtiJiYocD0tcCksZyhwPD02NzEwODg2Mywi''@;'; put 'put ''TnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09cD8wOkM8cD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihwKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJu''@;'; put 'put ''LTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBiPXRoaXMudWNtcChwKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtYjpifSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHApe2lmKHRoaXMubGVuZ3RoPnAubGVuZ3RoKXJldHVybiAxO2lm''@;'; put 'put ''KHRoaXMubGVuZ3RoPHAubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9MHxwLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/Yj0tMTpDPlQmJihiPTEpO2JyZWFrfX1yZXR1cm4gYn0sdy5wcm90b3R5cGUu''@;'; put 'put ''Z3RuPWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5j''@;'; put 'put ''dGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcChwKX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihwKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5jbXBuKHApPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHApe3JldHVybiAwPT09''@;'; put 'put ''dGhpcy5jbXAocCl9LHcucmVkPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgU2UocCl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLGcoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3''@;'; put 'put ''b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0''@;'; put 'put ''aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnJlZD1wLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rp''@;'; put 'put ''b24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5j''@;'; put 'put ''dGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQg''@;'; put 'put ''bnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1''@;'; put 'put ''bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQg''@;'; put 'put ''bnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQubXVsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0''@;'; put 'put ''aGlzLHApLHRoaXMucmVkLmltdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJv''@;'; put 'put ''dG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IGcodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkg''@;'; put 'put ''d2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3Zlcmlm''@;'; put 'put ''eTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQmJiFwLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxwKX07dmFyIHJlPXtrMjU2''@;'; put 'put ''Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gaWUoVixwKXt0aGlzLm5hbWU9Vix0aGlzLnA9bmV3IHcocCwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1w''@;'; put 'put ''PXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGxlKCl7aWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBtZSgpe2llLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZm''@;'; put 'put ''IGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gX2UoKXtpZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFRlKCl7aWUu''@;'; put 'put ''Y2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBTZShWKXtpZigic3RyaW5nIj09dHlwZW9mIFYpe3ZhciBwPXcuX3ByaW1lKFYpO3RoaXMubT1wLnAsdGhpcy5wcmlt''@;'; put 'put ''ZT1wfWVsc2UgZyhWLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPVYsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIHplKFYpe1NlLmNhbGwodGhpcyxWKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5z''@;'; put 'put ''aGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5k''@;'; put 'put ''aXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWllLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHAud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4v''@;'; put 'put ''MTMpKSxwfSxpZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihwKXt2YXIgeCxiPXA7ZG97dGhpcy5zcGxpdChiLHRoaXMudG1wKSx4PShiPShiPXRoaXMuaW11bEsoYikpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRoaXMubik7dmFyIEM9eDx0aGlzLm4/LTE6Yi51''@;'; put 'put ''Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1DPyhiLndvcmRzWzBdPTAsYi5sZW5ndGg9MSk6Qz4wP2IuaXN1Yih0aGlzLnApOnZvaWQgMCE9PWIuc3RyaXA/Yi5zdHJpcCgpOmIuX3N0cmlwKCksYn0saWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7cC5pdXNocm4odGhpcy5uLDAsYil9''@;'; put 'put ''LGllLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pbXVsKHRoaXMuayl9LEIobGUsaWUpLGxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4ocC5sZW5ndGgsOSksVD0wO1Q8QztUKyspYi53b3Jkc1tUXT1wLndv''@;'; put 'put ''cmRzW1RdO2lmKGIubGVuZ3RoPUMscC5sZW5ndGg8PTkpcmV0dXJuIHAud29yZHNbMF09MCx2b2lkKHAubGVuZ3RoPTEpO3ZhciBIPXAud29yZHNbOV07Zm9yKGIud29yZHNbYi5sZW5ndGgrK109SCZ4LFQ9MTA7VDxwLmxlbmd0aDtUKyspe3ZhciBqPTB8cC53b3Jkc1tUXTtwLndvcmRzW1Qt''@;'; put 'put ''MTBdPShqJngpPDw0fEg+Pj4yMixIPWp9cC53b3Jkc1tULTEwXT1IPj4+PTIyLHAubGVuZ3RoLT0wPT09SCYmcC5sZW5ndGg+MTA/MTA6OX0sbGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3Aud29yZHNbcC5sZW5ndGhdPTAscC53b3Jkc1twLmxlbmd0aCsxXT0wLHAubGVuZ3RoKz0y''@;'; put 'put ''O2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MHxwLndvcmRzW3hdO3Aud29yZHNbeF09NjcxMDg4NjMmKGIrPTk3NypDKSxiPTY0KkMrKGIvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiYocC5sZW5ndGgtLSwwPT09cC53b3Jkc1twLmxl''@;'; put 'put ''bmd0aC0xXSYmcC5sZW5ndGgtLSkscH0sQihtZSxpZSksQihfZSxpZSksQihUZSxpZSksVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8cC53b3Jkc1t4XSkrYixUPTY3MTA4ODYzJkM7Qz4+Pj0yNixwLndv''@;'; put 'put ''cmRzW3hdPVQsYj1DfXJldHVybiAwIT09YiYmKHAud29yZHNbcC5sZW5ndGgrK109YikscH0sdy5fcHJpbWU9ZnVuY3Rpb24ocCl7aWYocmVbcF0pcmV0dXJuIHJlW3BdO3ZhciBiO2lmKCJrMjU2Ij09PXApYj1uZXcgbGU7ZWxzZSBpZigicDIyNCI9PT1wKWI9bmV3IG1lO2Vsc2UgaWYoInAx''@;'; put 'put ''OTIiPT09cCliPW5ldyBfZTtlbHNle2lmKCJwMjU1MTkiIT09cCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitwKTtiPW5ldyBUZX1yZXR1cm4gcmVbcF09YixifSxTZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSwicmVkIHdvcmtzIG9u''@;'; put 'put ''bHkgd2l0aCBwb3NpdGl2ZXMiKSxnKHAucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihwLGIpe2coIShwLm5lZ2F0aXZlfGIubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5y''@;'; put 'put ''ZWQmJnAucmVkPT09Yi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHApLl9mb3JjZVJlZCh0aGlzKTpwLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQo''@;'; put 'put ''dGhpcyl9LFNlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaXNaZXJvKCk/cC5jbG9uZSgpOnRoaXMubS5zdWIocCkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuYWRkKGIpO3JldHVy''@;'; put 'put ''biB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxT''@;'; put 'put ''ZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5Mihw''@;'; put 'put ''LGIpO3ZhciB4PXAuaXN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShwKSx0aGlzLmltb2QocC51c2hsbihiKSl9LFNlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAs''@;'; put 'put ''Yil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5pbXVsKGIpKX0sU2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAsYiksdGhpcy5pbW9kKHAubXVsKGIpKX0sU2UucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24ocCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuaW11bChwLHAuY2xvbmUoKSl9LFNlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubXVsKHAscCl9LFNlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHApe2lmKHAuaXNaZXJvKCkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgYj10aGlzLm0uYW5kbG4oMyk7aWYoZyhi''@;'; put 'put ''JTI9PTEpLDM9PT1iKXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHAseCl9Zm9yKHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1c2hybigxKTtnKCFDLmlzWmVybygpKTt2YXIg''@;'; put 'put ''SD1uZXcgdygxKS50b1JlZCh0aGlzKSxqPUgucmVkTmVnKCksRT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChqKTspbS5yZWRJQWRkKGopO2Zvcih2YXIgQT10''@;'; put 'put ''aGlzLnBvdyhtLEMpLG9lPXRoaXMucG93KHAsQy5hZGRuKDEpLml1c2hybigxKSksdGU9dGhpcy5wb3cocCxDKSxzZT1UOzAhPT10ZS5jbXAoSCk7KXtmb3IodmFyIHdlPXRlLFVlPTA7MCE9PXdlLmNtcChIKTtVZSsrKXdlPXdlLnJlZFNxcigpO2coVWU8c2UpO3ZhciBKZT10aGlzLnBvdyhB''@;'; put 'put ''LG5ldyB3KDEpLml1c2hsbihzZS1VZS0xKSk7b2U9b2UucmVkTXVsKEplKSxBPUplLnJlZFNxcigpLHRlPXRlLnJlZE11bChBKSxzZT1VZX1yZXR1cm4gb2V9LFNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3ZhciBiPXAuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1iLm5lZ2F0aXZl''@;'; put 'put ''PyhiLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKGIpLnJlZE5lZygpKTp0aGlzLmltb2QoYil9LFNlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCxiKXtpZihiLmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09Yi5jbXBuKDEpKXJldHVybiBwLmNsb25lKCk7dmFyIEM9''@;'; put 'put ''bmV3IEFycmF5KDE2KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09cDtmb3IodmFyIFQ9MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENbVC0xXSxwKTt2YXIgSD1DWzBdLGo9MCxFPTAsbT1iLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bSYmKG09MjYpLFQ9Yi5sZW5ndGgt''@;'; put 'put ''MTtUPj0wO1QtLSl7Zm9yKHZhciBBPWIud29yZHNbVF0sb2U9bS0xO29lPj0wO29lLS0pe3ZhciB0ZT1BPj5vZSYxO0ghPT1DWzBdJiYoSD10aGlzLnNxcihIKSksMCE9PXRlfHwwIT09aj8oajw8PTEsanw9dGUsKDQ9PSsrRXx8MD09PVQmJjA9PT1vZSkmJihIPXRoaXMubXVsKEgsQ1tqXSks''@;'; put 'put ''RT0wLGo9MCkpOkU9MH1tPTI2fXJldHVybiBIfSxTZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3ZhciBiPXAudW1vZCh0aGlzLm0pO3JldHVybiBiPT09cD9iLmNsb25lKCk6Yn0sU2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHApe3ZhciBiPXAuY2xvbmUoKTty''@;'; put 'put ''ZXR1cm4gYi5yZWQ9bnVsbCxifSx3Lm1vbnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyB6ZShwKX0sQih6ZSxTZSksemUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAudXNobG4odGhpcy5zaGlmdCkpfSx6ZS5wcm90b3R5cGUuY29udmVydEZyb209''@;'; put 'put ''ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5pbW9kKHAubXVsKHRoaXMucmludikpO3JldHVybiBiLnJlZD1udWxsLGJ9LHplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gcC53b3Jkc1swXT0wLHAubGVuZ3RoPTEscDt2YXIgeD1w''@;'; put 'put ''LmltdWwoYiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAm''@;'; put 'put ''JihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0semUucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1wLm11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCku''@;'; put 'put ''bXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVk''@;'; put 'put ''KHRoaXMpfSx6ZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSh1ZT1fLm5tZCh1ZSksdGhpcyl9LDY1MDQ6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIGcsST1fKDMx''@;'; put 'put ''OSkseT1fKDcyOTYpO3RyeXtnPVtdLl9fcHJvdG9fXz09PUFycmF5LnByb3RvdHlwZX1jYXRjaChGKXtpZighRnx8Im9iamVjdCIhPXR5cGVvZiBGfHwhKCJjb2RlImluIEYpfHwiRVJSX1BST1RPX0FDQ0VTUyIhPT1GLmNvZGUpdGhyb3cgRn12YXIgQj0hIWcmJnkmJnkoT2JqZWN0LnByb3Rv''@;'; put 'put ''dHlwZSwiX19wcm90b19fIiksdz1PYmplY3QsUD13LmdldFByb3RvdHlwZU9mO3VlLmV4cG9ydHM9QiYmImZ1bmN0aW9uIj09dHlwZW9mIEIuZ2V0P0koW0IuZ2V0XSk6ImZ1bmN0aW9uIj09dHlwZW9mIFAmJmZ1bmN0aW9uKE8pe3JldHVybiBQKG51bGw9PU8/Tzp3KE8pKX19LDY5NDg6KHVl''@;'; put 'put ''LHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9cTtJLnZlcnNpb249Xyg4NTk3KS5pOCxJLnV0aWxzPV8oOTUzKSxJLnJhbmQ9Xyg5OTMxKSxJLmN1cnZlPV8oODI1NCksSS5jdXJ2ZXM9Xyg1NDI3KSxJLmVjPV8oNzk1NCksSS5lZGRzYT1fKDU5ODApfSw0OTE4Oih1ZSxxLF8pPT57InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciBJPV8oMzc4NSkseT1fKDk1MyksZz15LmdldE5BRixCPXkuZ2V0SlNGLHc9eS5hc3NlcnQ7ZnVuY3Rpb24gUChPLHope3RoaXMudHlwZT1PLHRoaXMucD1uZXcgSSh6LnAsMTYpLHRoaXMucmVkPXoucHJpbWU/SS5yZWQoei5wcmltZSk6SS5tb250KHRoaXMucCksdGhpcy56''@;'; put 'put ''ZXJvPW5ldyBJKDApLnRvUmVkKHRoaXMucmVkKSx0aGlzLm9uZT1uZXcgSSgxKS50b1JlZCh0aGlzLnJlZCksdGhpcy50d289bmV3IEkoMikudG9SZWQodGhpcy5yZWQpLHRoaXMubj16Lm4mJm5ldyBJKHoubiwxNiksdGhpcy5nPXouZyYmdGhpcy5wb2ludEZyb21KU09OKHouZyx6LmdSZWQp''@;'; put 'put ''LHRoaXMuX3duYWZUMT1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQyPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDM9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUND1uZXcgQXJyYXkoNCksdGhpcy5fYml0TGVuZ3RoPXRoaXMubj90aGlzLm4uYml0TGVuZ3RoKCk6MDt2YXIgTj10aGlzLm4mJnRo''@;'; put 'put ''aXMucC5kaXYodGhpcy5uKTshTnx8Ti5jbXBuKDEwMCk+MD90aGlzLnJlZE49bnVsbDoodGhpcy5fbWF4d2VsbFRyaWNrPSEwLHRoaXMucmVkTj10aGlzLm4udG9SZWQodGhpcy5yZWQpKX1mdW5jdGlvbiBGKE8seil7dGhpcy5jdXJ2ZT1PLHRoaXMudHlwZT16LHRoaXMucHJlY29tcHV0ZWQ9''@;'; put 'put ''bnVsbH11ZS5leHBvcnRzPVAsUC5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZCIpfSxQLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9LFAucHJvdG90eXBlLl9m''@;'; put 'put ''aXhlZE5hZk11bD1mdW5jdGlvbih6LE4pe3coei5wcmVjb21wdXRlZCk7dmFyIEw9ei5fZ2V0RG91YmxlcygpLEs9ZyhOLDEsdGhpcy5fYml0TGVuZ3RoKSxVPSgxPDxMLnN0ZXArMSktKEwuc3RlcCUyPT0wPzI6MSk7VS89Mzt2YXIgWSxYLFc9W107Zm9yKFk9MDtZPEsubGVuZ3RoO1krPUwu''@;'; put 'put ''c3RlcCl7WD0wO2Zvcih2YXIgZWU9WStMLnN0ZXAtMTtlZT49WTtlZS0tKVg9KFg8PDEpK0tbZWVdO1cucHVzaChYKX1mb3IodmFyIEo9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLHJlPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxpZT1VO2llPjA7aWUtLSl7Zm9yKFk9MDtZPFcu''@;'; put 'put ''bGVuZ3RoO1krKykoWD1XW1ldKT09PWllP3JlPXJlLm1peGVkQWRkKEwucG9pbnRzW1ldKTpYPT09LWllJiYocmU9cmUubWl4ZWRBZGQoTC5wb2ludHNbWV0ubmVnKCkpKTtKPUouYWRkKHJlKX1yZXR1cm4gSi50b1AoKX0sUC5wcm90b3R5cGUuX3duYWZNdWw9ZnVuY3Rpb24oeixOKXtmb3Io''@;'; put 'put ''dmFyIEw9NCxLPXouX2dldE5BRlBvaW50cyhMKSxVPUsucG9pbnRzLFc9ZyhOLEw9Sy53bmQsdGhpcy5fYml0TGVuZ3RoKSxZPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxYPVcubGVuZ3RoLTE7WD49MDtYLS0pe2Zvcih2YXIgZWU9MDtYPj0wJiYwPT09V1tYXTtYLS0pZWUrKztpZihY''@;'; put 'put ''Pj0wJiZlZSsrLFk9WS5kYmxwKGVlKSxYPDApYnJlYWs7dmFyIEo9V1tYXTt3KDAhPT1KKSxZPSJhZmZpbmUiPT09ei50eXBlP1kubWl4ZWRBZGQoSj4wP1VbSi0xPj4xXTpVWy1KLTE+PjFdLm5lZygpKTpZLmFkZChKPjA/VVtKLTE+PjFdOlVbLUotMT4+MV0ubmVnKCkpfXJldHVybiJhZmZp''@;'; put 'put ''bmUiPT09ei50eXBlP1kudG9QKCk6WX0sUC5wcm90b3R5cGUuX3duYWZNdWxBZGQ9ZnVuY3Rpb24oeixOLEwsSyxVKXt2YXIgSixyZSxpZSxXPXRoaXMuX3duYWZUMSxZPXRoaXMuX3duYWZUMixYPXRoaXMuX3duYWZUMyxlZT0wO2ZvcihKPTA7SjxLO0orKyl7dmFyIGxlPShpZT1OW0pdKS5f''@;'; put 'put ''Z2V0TkFGUG9pbnRzKHopO1dbSl09bGUud25kLFlbSl09bGUucG9pbnRzfWZvcihKPUstMTtKPj0xO0otPTIpe3ZhciBtZT1KLTEsX2U9SjtpZigxPT09V1ttZV0mJjE9PT1XW19lXSl7dmFyIFRlPVtOW21lXSxudWxsLG51bGwsTltfZV1dOzA9PT1OW21lXS55LmNtcChOW19lXS55KT8oVGVb''@;'; put 'put ''MV09TlttZV0uYWRkKE5bX2VdKSxUZVsyXT1OW21lXS50b0ooKS5taXhlZEFkZChOW19lXS5uZWcoKSkpOjA9PT1OW21lXS55LmNtcChOW19lXS55LnJlZE5lZygpKT8oVGVbMV09TlttZV0udG9KKCkubWl4ZWRBZGQoTltfZV0pLFRlWzJdPU5bbWVdLmFkZChOW19lXS5uZWcoKSkpOihUZVsx''@;'; put 'put ''XT1OW21lXS50b0ooKS5taXhlZEFkZChOW19lXSksVGVbMl09TlttZV0udG9KKCkubWl4ZWRBZGQoTltfZV0ubmVnKCkpKTt2YXIgU2U9Wy0zLC0xLC01LC03LDAsNyw1LDEsM10semU9QihMW21lXSxMW19lXSk7Zm9yKGVlPU1hdGgubWF4KHplWzBdLmxlbmd0aCxlZSksWFttZV09bmV3IEFy''@;'; put 'put ''cmF5KGVlKSxYW19lXT1uZXcgQXJyYXkoZWUpLHJlPTA7cmU8ZWU7cmUrKylYW21lXVtyZV09U2VbMyooMSsoMHx6ZVswXVtyZV0pKSsoMSsoMHx6ZVsxXVtyZV0pKV0sWFtfZV1bcmVdPTAsWVttZV09VGV9ZWxzZSBYW21lXT1nKExbbWVdLFdbbWVdLHRoaXMuX2JpdExlbmd0aCksWFtfZV09''@;'; put 'put ''ZyhMW19lXSxXW19lXSx0aGlzLl9iaXRMZW5ndGgpLGVlPU1hdGgubWF4KFhbbWVdLmxlbmd0aCxlZSksZWU9TWF0aC5tYXgoWFtfZV0ubGVuZ3RoLGVlKX12YXIgYj10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCkseD10aGlzLl93bmFmVDQ7Zm9yKEo9ZWU7Sj49MDtKLS0pe2Zvcih2YXIg''@;'; put 'put ''Qz0wO0o+PTA7KXt2YXIgVD0hMDtmb3IocmU9MDtyZTxLO3JlKyspeFtyZV09MHxYW3JlXVtKXSwwIT09eFtyZV0mJihUPSExKTtpZighVClicmVhaztDKyssSi0tfWlmKEo+PTAmJkMrKyxiPWIuZGJscChDKSxKPDApYnJlYWs7Zm9yKHJlPTA7cmU8SztyZSsrKXt2YXIgSD14W3JlXTswIT09''@;'; put 'put ''SCYmKEg+MD9pZT1ZW3JlXVtILTE+PjFdOkg8MCYmKGllPVlbcmVdWy1ILTE+PjFdLm5lZygpKSxiPSJhZmZpbmUiPT09aWUudHlwZT9iLm1peGVkQWRkKGllKTpiLmFkZChpZSkpfX1mb3IoSj0wO0o8SztKKyspWVtKXT1udWxsO3JldHVybiBVP2I6Yi50b1AoKX0sUC5CYXNlUG9pbnQ9RixG''@;'; put 'put ''LnByb3RvdHlwZS5lcT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9LEYucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUudmFsaWRhdGUodGhpcyl9LFAucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKHosTil7''@;'; put 'put ''ej15LnRvQXJyYXkoeixOKTt2YXIgTD10aGlzLnAuYnl0ZUxlbmd0aCgpO2lmKCg0PT09elswXXx8Nj09PXpbMF18fDc9PT16WzBdKSYmei5sZW5ndGgtMT09MipMKXJldHVybiA2PT09elswXT93KHpbei5sZW5ndGgtMV0lMj09MCk6Nz09PXpbMF0mJncoelt6Lmxlbmd0aC0xXSUyPT0xKSx0''@;'; put 'put ''aGlzLnBvaW50KHouc2xpY2UoMSwxK0wpLHouc2xpY2UoMStMLDErMipMKSk7aWYoKDI9PT16WzBdfHwzPT09elswXSkmJnoubGVuZ3RoLTE9PT1MKXJldHVybiB0aGlzLnBvaW50RnJvbVgoei5zbGljZSgxLDErTCksMz09PXpbMF0pO3Rocm93IG5ldyBFcnJvcigiVW5rbm93biBwb2ludCBm''@;'; put 'put ''b3JtYXQiKX0sRi5wcm90b3R5cGUuZW5jb2RlQ29tcHJlc3NlZD1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5lbmNvZGUoeiwhMCl9LEYucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oeil7dmFyIE49dGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSxMPXRoaXMuZ2V0WCgpLnRvQXJyYXkoImJl''@;'; put 'put ''IixOKTtyZXR1cm4gej9bdGhpcy5nZXRZKCkuaXNFdmVuKCk/MjozXS5jb25jYXQoTCk6WzRdLmNvbmNhdChMLHRoaXMuZ2V0WSgpLnRvQXJyYXkoImJlIixOKSl9LEYucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbih6LE4pe3JldHVybiB5LmVuY29kZSh0aGlzLl9lbmNvZGUoTikseil9LEYu''@;'; put 'put ''cHJvdG90eXBlLnByZWNvbXB1dGU9ZnVuY3Rpb24oeil7aWYodGhpcy5wcmVjb21wdXRlZClyZXR1cm4gdGhpczt2YXIgTj17ZG91YmxlczpudWxsLG5hZjpudWxsLGJldGE6bnVsbH07cmV0dXJuIE4ubmFmPXRoaXMuX2dldE5BRlBvaW50cyg4KSxOLmRvdWJsZXM9dGhpcy5fZ2V0RG91Ymxl''@;'; put 'put ''cyg0LHopLE4uYmV0YT10aGlzLl9nZXRCZXRhKCksdGhpcy5wcmVjb21wdXRlZD1OLHRoaXN9LEYucHJvdG90eXBlLl9oYXNEb3VibGVzPWZ1bmN0aW9uKHope2lmKCF0aGlzLnByZWNvbXB1dGVkKXJldHVybiExO3ZhciBOPXRoaXMucHJlY29tcHV0ZWQuZG91YmxlcztyZXR1cm4hIU4mJk4u''@;'; put 'put ''cG9pbnRzLmxlbmd0aD49TWF0aC5jZWlsKCh6LmJpdExlbmd0aCgpKzEpL04uc3RlcCl9LEYucHJvdG90eXBlLl9nZXREb3VibGVzPWZ1bmN0aW9uKHosTil7aWYodGhpcy5wcmVjb21wdXRlZCYmdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzKXJldHVybiB0aGlzLnByZWNvbXB1dGVkLmRvdWJs''@;'; put 'put ''ZXM7Zm9yKHZhciBMPVt0aGlzXSxLPXRoaXMsVT0wO1U8TjtVKz16KXtmb3IodmFyIFc9MDtXPHo7VysrKUs9Sy5kYmwoKTtMLnB1c2goSyl9cmV0dXJue3N0ZXA6eixwb2ludHM6TH19LEYucHJvdG90eXBlLl9nZXROQUZQb2ludHM9ZnVuY3Rpb24oeil7aWYodGhpcy5wcmVjb21wdXRlZCYm''@;'; put 'put ''dGhpcy5wcmVjb21wdXRlZC5uYWYpcmV0dXJuIHRoaXMucHJlY29tcHV0ZWQubmFmO2Zvcih2YXIgTj1bdGhpc10sTD0oMTw8eiktMSxLPTE9PT1MP251bGw6dGhpcy5kYmwoKSxVPTE7VTxMO1UrKylOW1VdPU5bVS0xXS5hZGQoSyk7cmV0dXJue3duZDp6LHBvaW50czpOfX0sRi5wcm90b3R5''@;'; put 'put ''cGUuX2dldEJldGE9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sRi5wcm90b3R5cGUuZGJscD1mdW5jdGlvbih6KXtmb3IodmFyIE49dGhpcyxMPTA7TDx6O0wrKylOPU4uZGJsKCk7cmV0dXJuIE59fSwxMTM4Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oOTUzKSx5PV8oMzc4NSks''@;'; put 'put ''Zz1fKDU3MTcpLEI9Xyg0OTE4KSx3PUkuYXNzZXJ0O2Z1bmN0aW9uIFAoTyl7dGhpcy50d2lzdGVkPTEhPSgwfE8uYSksdGhpcy5tT25lQT10aGlzLnR3aXN0ZWQmJi0xPT0oMHxPLmEpLHRoaXMuZXh0ZW5kZWQ9dGhpcy5tT25lQSxCLmNhbGwodGhpcywiZWR3YXJkcyIsTyksdGhpcy5hPW5l''@;'; put 'put ''dyB5KE8uYSwxNikudW1vZCh0aGlzLnJlZC5tKSx0aGlzLmE9dGhpcy5hLnRvUmVkKHRoaXMucmVkKSx0aGlzLmM9bmV3IHkoTy5jLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5jMj10aGlzLmMucmVkU3FyKCksdGhpcy5kPW5ldyB5KE8uZCwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuZGQ9''@;'; put 'put ''dGhpcy5kLnJlZEFkZCh0aGlzLmQpLHcoIXRoaXMudHdpc3RlZHx8MD09PXRoaXMuYy5mcm9tUmVkKCkuY21wbigxKSksdGhpcy5vbmVDPTE9PSgwfE8uYyl9ZnVuY3Rpb24gRihPLHosTixMLEspe0IuQmFzZVBvaW50LmNhbGwodGhpcyxPLCJwcm9qZWN0aXZlIiksbnVsbD09PXomJm51bGw9''@;'; put 'put ''PT1OJiZudWxsPT09TD8odGhpcy54PXRoaXMuY3VydmUuemVybyx0aGlzLnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXMudD10aGlzLmN1cnZlLnplcm8sdGhpcy56T25lPSEwKToodGhpcy54PW5ldyB5KHosMTYpLHRoaXMueT1uZXcgeShOLDE2KSx0aGlzLno9''@;'; put 'put ''TD9uZXcgeShMLDE2KTp0aGlzLmN1cnZlLm9uZSx0aGlzLnQ9SyYmbmV3IHkoSywxNiksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0''@;'; put 'put ''aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy50JiYhdGhpcy50LnJlZCYmKHRoaXMudD10aGlzLnQudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnpPbmU9dGhpcy56PT09dGhpcy5jdXJ2ZS5vbmUsdGhpcy5jdXJ2ZS5leHRlbmRlZCYmIXRoaXMudCYmKHRoaXMu''@;'; put 'put ''dD10aGlzLngucmVkTXVsKHRoaXMueSksdGhpcy56T25lfHwodGhpcy50PXRoaXMudC5yZWRNdWwodGhpcy56LnJlZEludm0oKSkpKSl9ZyhQLEIpLHVlLmV4cG9ydHM9UCxQLnByb3RvdHlwZS5fbXVsQT1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5tT25lQT96LnJlZE5lZygpOnRoaXMuYS5y''@;'; put 'put ''ZWRNdWwoeil9LFAucHJvdG90eXBlLl9tdWxDPWZ1bmN0aW9uKHope3JldHVybiB0aGlzLm9uZUM/ejp0aGlzLmMucmVkTXVsKHopfSxQLnByb3RvdHlwZS5qcG9pbnQ9ZnVuY3Rpb24oeixOLEwsSyl7cmV0dXJuIHRoaXMucG9pbnQoeixOLEwsSyl9LFAucHJvdG90eXBlLnBvaW50RnJvbVg9''@;'; put 'put ''ZnVuY3Rpb24oeixOKXsoej1uZXcgeSh6LDE2KSkucmVkfHwoej16LnRvUmVkKHRoaXMucmVkKSk7dmFyIEw9ei5yZWRTcXIoKSxLPXRoaXMuYzIucmVkU3ViKHRoaXMuYS5yZWRNdWwoTCkpLFU9dGhpcy5vbmUucmVkU3ViKHRoaXMuYzIucmVkTXVsKHRoaXMuZCkucmVkTXVsKEwpKSxXPUsu''@;'; put 'put ''cmVkTXVsKFUucmVkSW52bSgpKSxZPVcucmVkU3FydCgpO2lmKDAhPT1ZLnJlZFNxcigpLnJlZFN1YihXKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTt2YXIgWD1ZLmZyb21SZWQoKS5pc09kZCgpO3JldHVybihOJiYhWHx8IU4mJlgpJiYoWT1ZLnJl''@;'; put 'put ''ZE5lZygpKSx0aGlzLnBvaW50KHosWSl9LFAucHJvdG90eXBlLnBvaW50RnJvbVk9ZnVuY3Rpb24oeixOKXsoej1uZXcgeSh6LDE2KSkucmVkfHwoej16LnRvUmVkKHRoaXMucmVkKSk7dmFyIEw9ei5yZWRTcXIoKSxLPUwucmVkU3ViKHRoaXMuYzIpLFU9TC5yZWRNdWwodGhpcy5kKS5yZWRN''@;'; put 'put ''dWwodGhpcy5jMikucmVkU3ViKHRoaXMuYSksVz1LLnJlZE11bChVLnJlZEludm0oKSk7aWYoMD09PVcuY21wKHRoaXMuemVybykpe2lmKE4pdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7cmV0dXJuIHRoaXMucG9pbnQodGhpcy56ZXJvLHopfXZhciBZPVcucmVkU3FydCgpO2lm''@;'; put 'put ''KDAhPT1ZLnJlZFNxcigpLnJlZFN1YihXKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgcG9pbnQiKTtyZXR1cm4gWS5mcm9tUmVkKCkuaXNPZGQoKSE9PU4mJihZPVkucmVkTmVnKCkpLHRoaXMucG9pbnQoWSx6KX0sUC5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rp''@;'; put 'put ''b24oeil7aWYoei5pc0luZmluaXR5KCkpcmV0dXJuITA7ei5ub3JtYWxpemUoKTt2YXIgTj16LngucmVkU3FyKCksTD16LnkucmVkU3FyKCksSz1OLnJlZE11bCh0aGlzLmEpLnJlZEFkZChMKSxVPXRoaXMuYzIucmVkTXVsKHRoaXMub25lLnJlZEFkZCh0aGlzLmQucmVkTXVsKE4pLnJlZE11''@;'; put 'put ''bChMKSkpO3JldHVybiAwPT09Sy5jbXAoVSl9LGcoRixCLkJhc2VQb2ludCksUC5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbih6KXtyZXR1cm4gRi5mcm9tSlNPTih0aGlzLHopfSxQLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbih6LE4sTCxLKXtyZXR1cm4gbmV3IEYodGhpcyx6''@;'; put 'put ''LE4sTCxLKX0sRi5mcm9tSlNPTj1mdW5jdGlvbih6LE4pe3JldHVybiBuZXcgRih6LE5bMF0sTlsxXSxOWzJdKX0sRi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMu''@;'; put 'put ''eC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB6OiAiK3RoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxGLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnguY21w''@;'; put 'put ''bigwKSYmKDA9PT10aGlzLnkuY21wKHRoaXMueil8fHRoaXMuek9uZSYmMD09PXRoaXMueS5jbXAodGhpcy5jdXJ2ZS5jKSl9LEYucHJvdG90eXBlLl9leHREYmw9ZnVuY3Rpb24oKXt2YXIgej10aGlzLngucmVkU3FyKCksTj10aGlzLnkucmVkU3FyKCksTD10aGlzLnoucmVkU3FyKCk7TD1M''@;'; put 'put ''LnJlZElBZGQoTCk7dmFyIEs9dGhpcy5jdXJ2ZS5fbXVsQSh6KSxVPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKS5yZWRJU3ViKHopLnJlZElTdWIoTiksVz1LLnJlZEFkZChOKSxZPVcucmVkU3ViKEwpLFg9Sy5yZWRTdWIoTiksZWU9VS5yZWRNdWwoWSksSj1XLnJlZE11bChYKSxy''@;'; put 'put ''ZT1VLnJlZE11bChYKSxpZT1ZLnJlZE11bChXKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChlZSxKLGllLHJlKX0sRi5wcm90b3R5cGUuX3Byb2pEYmw9ZnVuY3Rpb24oKXt2YXIgSyxVLFcsWSxYLGVlLHo9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZFNxcigpLE49dGhpcy54LnJlZFNxcigp''@;'; put 'put ''LEw9dGhpcy55LnJlZFNxcigpO2lmKHRoaXMuY3VydmUudHdpc3RlZCl7dmFyIEo9KFk9dGhpcy5jdXJ2ZS5fbXVsQShOKSkucmVkQWRkKEwpO3RoaXMuek9uZT8oSz16LnJlZFN1YihOKS5yZWRTdWIoTCkucmVkTXVsKEoucmVkU3ViKHRoaXMuY3VydmUudHdvKSksVT1KLnJlZE11bChZLnJl''@;'; put 'put ''ZFN1YihMKSksVz1KLnJlZFNxcigpLnJlZFN1YihKKS5yZWRTdWIoSikpOihYPXRoaXMuei5yZWRTcXIoKSxlZT1KLnJlZFN1YihYKS5yZWRJU3ViKFgpLEs9ei5yZWRTdWIoTikucmVkSVN1YihMKS5yZWRNdWwoZWUpLFU9Si5yZWRNdWwoWS5yZWRTdWIoTCkpLFc9Si5yZWRNdWwoZWUpKX1l''@;'; put 'put ''bHNlIFk9Ti5yZWRBZGQoTCksWD10aGlzLmN1cnZlLl9tdWxDKHRoaXMueikucmVkU3FyKCksZWU9WS5yZWRTdWIoWCkucmVkU3ViKFgpLEs9dGhpcy5jdXJ2ZS5fbXVsQyh6LnJlZElTdWIoWSkpLnJlZE11bChlZSksVT10aGlzLmN1cnZlLl9tdWxDKFkpLnJlZE11bChOLnJlZElTdWIoTCkp''@;'; put 'put ''LFc9WS5yZWRNdWwoZWUpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEssVSxXKX0sRi5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS5leHRlbmRlZD90aGlzLl9leHREYmwoKTp0aGlzLl9wcm9qRGJsKCl9LEYucHJvdG90''@;'; put 'put ''eXBlLl9leHRBZGQ9ZnVuY3Rpb24oeil7dmFyIE49dGhpcy55LnJlZFN1Yih0aGlzLngpLnJlZE11bCh6LnkucmVkU3ViKHoueCkpLEw9dGhpcy55LnJlZEFkZCh0aGlzLngpLnJlZE11bCh6LnkucmVkQWRkKHoueCkpLEs9dGhpcy50LnJlZE11bCh0aGlzLmN1cnZlLmRkKS5yZWRNdWwoei50''@;'; put 'put ''KSxVPXRoaXMuei5yZWRNdWwoei56LnJlZEFkZCh6LnopKSxXPUwucmVkU3ViKE4pLFk9VS5yZWRTdWIoSyksWD1VLnJlZEFkZChLKSxlZT1MLnJlZEFkZChOKSxKPVcucmVkTXVsKFkpLHJlPVgucmVkTXVsKGVlKSxpZT1XLnJlZE11bChlZSksbGU9WS5yZWRNdWwoWCk7cmV0dXJuIHRoaXMu''@;'; put 'put ''Y3VydmUucG9pbnQoSixyZSxsZSxpZSl9LEYucHJvdG90eXBlLl9wcm9qQWRkPWZ1bmN0aW9uKHope3ZhciByZSxpZSxOPXRoaXMuei5yZWRNdWwoei56KSxMPU4ucmVkU3FyKCksSz10aGlzLngucmVkTXVsKHoueCksVT10aGlzLnkucmVkTXVsKHoueSksVz10aGlzLmN1cnZlLmQucmVkTXVs''@;'; put 'put ''KEspLnJlZE11bChVKSxZPUwucmVkU3ViKFcpLFg9TC5yZWRBZGQoVyksZWU9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZE11bCh6LngucmVkQWRkKHoueSkpLnJlZElTdWIoSykucmVkSVN1YihVKSxKPU4ucmVkTXVsKFkpLnJlZE11bChlZSk7cmV0dXJuIHRoaXMuY3VydmUudHdpc3RlZD8o''@;'; put 'put ''cmU9Ti5yZWRNdWwoWCkucmVkTXVsKFUucmVkU3ViKHRoaXMuY3VydmUuX211bEEoSykpKSxpZT1ZLnJlZE11bChYKSk6KHJlPU4ucmVkTXVsKFgpLnJlZE11bChVLnJlZFN1YihLKSksaWU9dGhpcy5jdXJ2ZS5fbXVsQyhZKS5yZWRNdWwoWCkpLHRoaXMuY3VydmUucG9pbnQoSixyZSxpZSl9''@;'; put 'put ''LEYucHJvdG90eXBlLmFkZD1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/ejp6LmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuZXh0ZW5kZWQ/dGhpcy5fZXh0QWRkKHopOnRoaXMuX3Byb2pBZGQoeil9LEYucHJvdG90eXBlLm11bD1mdW5jdGlvbih6KXtyZXR1cm4g''@;'; put 'put ''dGhpcy5faGFzRG91Ymxlcyh6KT90aGlzLmN1cnZlLl9maXhlZE5hZk11bCh0aGlzLHopOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyx6KX0sRi5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKHosTixMKXtyZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFt0aGlzLE5dLFt6LExdLDIs''@;'; put 'put ''ITEpfSxGLnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKHosTixMKXtyZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFt0aGlzLE5dLFt6LExdLDIsITApfSxGLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtpZih0aGlzLnpPbmUpcmV0dXJuIHRoaXM7dmFyIHo9dGhpcy56''@;'; put 'put ''LnJlZEludm0oKTtyZXR1cm4gdGhpcy54PXRoaXMueC5yZWRNdWwoeiksdGhpcy55PXRoaXMueS5yZWRNdWwoeiksdGhpcy50JiYodGhpcy50PXRoaXMudC5yZWRNdWwoeikpLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzLnpPbmU9ITAsdGhpc30sRi5wcm90b3R5cGUubmVnPWZ1bmN0aW9u''@;'; put 'put ''KCl7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE5lZygpLHRoaXMueSx0aGlzLnosdGhpcy50JiZ0aGlzLnQucmVkTmVnKCkpfSxGLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy54LmZyb21SZWQoKX0sRi5wcm90b3R5cGUu''@;'; put 'put ''Z2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueS5mcm9tUmVkKCl9LEYucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHope3JldHVybiB0aGlzPT09enx8MD09PXRoaXMuZ2V0WCgpLmNtcCh6LmdldFgoKSkmJjA9PT10aGlzLmdldFkoKS5jbXAoei5nZXRZKCkpfSxG''@;'; put 'put ''LnByb3RvdHlwZS5lcVhUb1A9ZnVuY3Rpb24oeil7dmFyIE49ei50b1JlZCh0aGlzLmN1cnZlLnJlZCkucmVkTXVsKHRoaXMueik7aWYoMD09PXRoaXMueC5jbXAoTikpcmV0dXJuITA7Zm9yKHZhciBMPXouY2xvbmUoKSxLPXRoaXMuY3VydmUucmVkTi5yZWRNdWwodGhpcy56KTs7KXtpZihM''@;'; put 'put ''LmlhZGQodGhpcy5jdXJ2ZS5uKSxMLmNtcCh0aGlzLmN1cnZlLnApPj0wKXJldHVybiExO2lmKE4ucmVkSUFkZChLKSwwPT09dGhpcy54LmNtcChOKSlyZXR1cm4hMH19LEYucHJvdG90eXBlLnRvUD1GLnByb3RvdHlwZS5ub3JtYWxpemUsRi5wcm90b3R5cGUubWl4ZWRBZGQ9Ri5wcm90b3R5''@;'; put 'put ''cGUuYWRkfSw4MjU0Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPXE7SS5iYXNlPV8oNDkxOCksSS5zaG9ydD1fKDY2NzMpLEkubW9udD1fKDI4ODEpLEkuZWR3YXJkcz1fKDExMzgpfSwyODgxOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMzc4NSkseT1fKDU3MTcpLGc9''@;'; put 'put ''Xyg0OTE4KSxCPV8oOTUzKTtmdW5jdGlvbiB3KEYpe2cuY2FsbCh0aGlzLCJtb250IixGKSx0aGlzLmE9bmV3IEkoRi5hLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5iPW5ldyBJKEYuYiwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuaTQ9bmV3IEkoNCkudG9SZWQodGhpcy5yZWQpLnJlZElu''@;'; put 'put ''dm0oKSx0aGlzLnR3bz1uZXcgSSgyKS50b1JlZCh0aGlzLnJlZCksdGhpcy5hMjQ9dGhpcy5pNC5yZWRNdWwodGhpcy5hLnJlZEFkZCh0aGlzLnR3bykpfWZ1bmN0aW9uIFAoRixPLHope2cuQmFzZVBvaW50LmNhbGwodGhpcyxGLCJwcm9qZWN0aXZlIiksbnVsbD09PU8mJm51bGw9PT16Pyh0''@;'; put 'put ''aGlzLng9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PXRoaXMuY3VydmUuemVybyk6KHRoaXMueD1uZXcgSShPLDE2KSx0aGlzLno9bmV3IEkoeiwxNiksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1Jl''@;'; put 'put ''ZCh0aGlzLmN1cnZlLnJlZCkpKX15KHcsZyksdWUuZXhwb3J0cz13LHcucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKE8pe3ZhciB6PU8ubm9ybWFsaXplKCkueCxOPXoucmVkU3FyKCksTD1OLnJlZE11bCh6KS5yZWRBZGQoTi5yZWRNdWwodGhpcy5hKSkucmVkQWRkKHopO3JldHVybiAw''@;'; put 'put ''PT09TC5yZWRTcXJ0KCkucmVkU3FyKCkuY21wKEwpfSx5KFAsZy5CYXNlUG9pbnQpLHcucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKE8seil7cmV0dXJuIHRoaXMucG9pbnQoQi50b0FycmF5KE8seiksMSl9LHcucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKE8seil7cmV0dXJuIG5l''@;'; put 'put ''dyBQKHRoaXMsTyx6KX0sdy5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihPKXtyZXR1cm4gUC5mcm9tSlNPTih0aGlzLE8pfSxQLnByb3RvdHlwZS5wcmVjb21wdXRlPWZ1bmN0aW9uKCl7fSxQLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WCgp''@;'; put 'put ''LnRvQXJyYXkoImJlIix0aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpKX0sUC5mcm9tSlNPTj1mdW5jdGlvbihPLHope3JldHVybiBuZXcgUChPLHpbMF0selsxXXx8Ty5vbmUpfSxQLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgUG9p''@;'; put 'put ''bnQgSW5maW5pdHk+IjoiPEVDIFBvaW50IHg6ICIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LmZyb21SZWQoKS50b1N0cmluZygxNiwyKSsiPiJ9LFAucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuei5jbXBuKDAp''@;'; put 'put ''fSxQLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXt2YXIgej10aGlzLngucmVkQWRkKHRoaXMueikucmVkU3FyKCksTD10aGlzLngucmVkU3ViKHRoaXMueikucmVkU3FyKCksSz16LnJlZFN1YihMKSxVPXoucmVkTXVsKEwpLFc9Sy5yZWRNdWwoTC5yZWRBZGQodGhpcy5jdXJ2ZS5hMjQucmVk''@;'; put 'put ''TXVsKEspKSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoVSxXKX0sUC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sUC5wcm90b3R5cGUuZGlmZkFkZD1mdW5jdGlvbihPLHope3ZhciBOPXRoaXMu''@;'; put 'put ''eC5yZWRBZGQodGhpcy56KSxMPXRoaXMueC5yZWRTdWIodGhpcy56KSxLPU8ueC5yZWRBZGQoTy56KSxXPU8ueC5yZWRTdWIoTy56KS5yZWRNdWwoTiksWT1LLnJlZE11bChMKSxYPXouei5yZWRNdWwoVy5yZWRBZGQoWSkucmVkU3FyKCkpLGVlPXoueC5yZWRNdWwoVy5yZWRJU3ViKFkpLnJl''@;'; put 'put ''ZFNxcigpKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChYLGVlKX0sUC5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKE8pe2Zvcih2YXIgej1PLmNsb25lKCksTj10aGlzLEw9dGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpLFU9W107MCE9PXouY21wbigwKTt6Lml1c2hybigxKSlVLnB1c2goei5h''@;'; put 'put ''bmRsbigxKSk7Zm9yKHZhciBXPVUubGVuZ3RoLTE7Vz49MDtXLS0pMD09PVVbV10/KE49Ti5kaWZmQWRkKEwsdGhpcyksTD1MLmRibCgpKTooTD1OLmRpZmZBZGQoTCx0aGlzKSxOPU4uZGJsKCkpO3JldHVybiBMfSxQLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZSIpfSxQLnByb3RvdHlwZS5qdW1sQWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sUC5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oTyl7cmV0dXJuIDA9PT10''@;'; put 'put ''aGlzLmdldFgoKS5jbXAoTy5nZXRYKCkpfSxQLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PXRoaXMueC5yZWRNdWwodGhpcy56LnJlZEludm0oKSksdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXN9LFAucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnguZnJvbVJlZCgpfX0sNjY3MzoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDk1MykseT1fKDM3ODUpLGc9Xyg1NzE3KSxCPV8oNDkxOCksdz1JLmFzc2VydDtmdW5jdGlvbiBQKHope0IuY2FsbCh0aGlzLCJzaG9ydCIseiksdGhpcy5h''@;'; put 'put ''PW5ldyB5KHouYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgeSh6LmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLnRpbnY9dGhpcy50d28ucmVkSW52bSgpLHRoaXMuemVyb0E9MD09PXRoaXMuYS5mcm9tUmVkKCkuY21wbigwKSx0aGlzLnRocmVlQT0wPT09dGhpcy5hLmZyb21S''@;'; put 'put ''ZWQoKS5zdWIodGhpcy5wKS5jbXBuKC0zKSx0aGlzLmVuZG89dGhpcy5fZ2V0RW5kb21vcnBoaXNtKHopLHRoaXMuX2VuZG9XbmFmVDE9bmV3IEFycmF5KDQpLHRoaXMuX2VuZG9XbmFmVDI9bmV3IEFycmF5KDQpfWZ1bmN0aW9uIEYoeixOLEwsSyl7Qi5CYXNlUG9pbnQuY2FsbCh0aGlzLHos''@;'; put 'put ''ImFmZmluZSIpLG51bGw9PT1OJiZudWxsPT09TD8odGhpcy54PW51bGwsdGhpcy55PW51bGwsdGhpcy5pbmY9ITApOih0aGlzLng9bmV3IHkoTiwxNiksdGhpcy55PW5ldyB5KEwsMTYpLEsmJih0aGlzLnguZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpLHRoaXMueS5mb3JjZVJlZCh0aGlzLmN1''@;'; put 'put ''cnZlLnJlZCkpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLmluZj0hMSl9ZnVuY3Rpb24gTyh6LE4sTCxLKXtCLkJhc2VQb2ludC5jYWxsKHRoaXMs''@;'; put 'put ''eiwiamFjb2JpYW4iKSxudWxsPT09TiYmbnVsbD09PUwmJm51bGw9PT1LPyh0aGlzLng9dGhpcy5jdXJ2ZS5vbmUsdGhpcy55PXRoaXMuY3VydmUub25lLHRoaXMuej1uZXcgeSgwKSk6KHRoaXMueD1uZXcgeShOLDE2KSx0aGlzLnk9bmV3IHkoTCwxNiksdGhpcy56PW5ldyB5KEssMTYpKSx0''@;'; put 'put ''aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnpPbmU9dGhpcy56''@;'; put 'put ''PT09dGhpcy5jdXJ2ZS5vbmV9ZyhQLEIpLHVlLmV4cG9ydHM9UCxQLnByb3RvdHlwZS5fZ2V0RW5kb21vcnBoaXNtPWZ1bmN0aW9uKE4pe2lmKHRoaXMuemVyb0EmJnRoaXMuZyYmdGhpcy5uJiYxPT09dGhpcy5wLm1vZG4oMykpe3ZhciBMLEs7aWYoTi5iZXRhKUw9bmV3IHkoTi5iZXRhLDE2''@;'; put 'put ''KS50b1JlZCh0aGlzLnJlZCk7ZWxzZXt2YXIgVT10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5wKTtMPShMPVVbMF0uY21wKFVbMV0pPDA/VVswXTpVWzFdKS50b1JlZCh0aGlzLnJlZCl9aWYoTi5sYW1iZGEpSz1uZXcgeShOLmxhbWJkYSwxNik7ZWxzZXt2YXIgVz10aGlzLl9nZXRFbmRvUm9v''@;'; put 'put ''dHModGhpcy5uKTswPT09dGhpcy5nLm11bChXWzBdKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoTCkpP0s9V1swXTp3KDA9PT10aGlzLmcubXVsKEs9V1sxXSkueC5jbXAodGhpcy5nLngucmVkTXVsKEwpKSl9cmV0dXJue2JldGE6TCxsYW1iZGE6SyxiYXNpczpOLmJhc2lzP04uYmFzaXMubWFw''@;'; put 'put ''KGZ1bmN0aW9uKFgpe3JldHVybnthOm5ldyB5KFguYSwxNiksYjpuZXcgeShYLmIsMTYpfX0pOnRoaXMuX2dldEVuZG9CYXNpcyhLKX19fSxQLnByb3RvdHlwZS5fZ2V0RW5kb1Jvb3RzPWZ1bmN0aW9uKE4pe3ZhciBMPU49PT10aGlzLnA/dGhpcy5yZWQ6eS5tb250KE4pLEs9bmV3IHkoMiku''@;'; put 'put ''dG9SZWQoTCkucmVkSW52bSgpLFU9Sy5yZWROZWcoKSxXPW5ldyB5KDMpLnRvUmVkKEwpLnJlZE5lZygpLnJlZFNxcnQoKS5yZWRNdWwoSyk7cmV0dXJuW1UucmVkQWRkKFcpLmZyb21SZWQoKSxVLnJlZFN1YihXKS5mcm9tUmVkKCldfSxQLnByb3RvdHlwZS5fZ2V0RW5kb0Jhc2lzPWZ1bmN0''@;'; put 'put ''aW9uKE4pe2Zvcih2YXIgSixyZSxpZSxsZSxtZSxfZSxUZSx6ZSxWLEw9dGhpcy5uLnVzaHJuKE1hdGguZmxvb3IodGhpcy5uLmJpdExlbmd0aCgpLzIpKSxLPU4sVT10aGlzLm4uY2xvbmUoKSxXPW5ldyB5KDEpLFk9bmV3IHkoMCksWD1uZXcgeSgwKSxlZT1uZXcgeSgxKSxTZT0wOzAhPT1L''@;'; put 'put ''LmNtcG4oMCk7KXt2YXIgcD1VLmRpdihLKTt6ZT1VLnN1YihwLm11bChLKSksVj1YLnN1YihwLm11bChXKSk7dmFyIGI9ZWUuc3ViKHAubXVsKFkpKTtpZighaWUmJnplLmNtcChMKTwwKUo9VGUubmVnKCkscmU9VyxpZT16ZS5uZWcoKSxsZT1WO2Vsc2UgaWYoaWUmJjI9PSsrU2UpYnJlYWs7''@;'; put 'put ''VGU9emUsVT1LLEs9emUsWD1XLFc9VixlZT1ZLFk9Yn1tZT16ZS5uZWcoKSxfZT1WO3ZhciB4PWllLnNxcigpLmFkZChsZS5zcXIoKSk7cmV0dXJuIG1lLnNxcigpLmFkZChfZS5zcXIoKSkuY21wKHgpPj0wJiYobWU9SixfZT1yZSksaWUubmVnYXRpdmUmJihpZT1pZS5uZWcoKSxsZT1sZS5u''@;'; put 'put ''ZWcoKSksbWUubmVnYXRpdmUmJihtZT1tZS5uZWcoKSxfZT1fZS5uZWcoKSksW3thOmllLGI6bGV9LHthOm1lLGI6X2V9XX0sUC5wcm90b3R5cGUuX2VuZG9TcGxpdD1mdW5jdGlvbihOKXt2YXIgTD10aGlzLmVuZG8uYmFzaXMsSz1MWzBdLFU9TFsxXSxXPVUuYi5tdWwoTikuZGl2Um91bmQo''@;'; put 'put ''dGhpcy5uKSxZPUsuYi5uZWcoKS5tdWwoTikuZGl2Um91bmQodGhpcy5uKSxYPVcubXVsKEsuYSksZWU9WS5tdWwoVS5hKSxKPVcubXVsKEsuYikscmU9WS5tdWwoVS5iKTtyZXR1cm57azE6Ti5zdWIoWCkuc3ViKGVlKSxrMjpKLmFkZChyZSkubmVnKCl9fSxQLnByb3RvdHlwZS5wb2ludEZy''@;'; put 'put ''b21YPWZ1bmN0aW9uKE4sTCl7KE49bmV3IHkoTiwxNikpLnJlZHx8KE49Ti50b1JlZCh0aGlzLnJlZCkpO3ZhciBLPU4ucmVkU3FyKCkucmVkTXVsKE4pLnJlZElBZGQoTi5yZWRNdWwodGhpcy5hKSkucmVkSUFkZCh0aGlzLmIpLFU9Sy5yZWRTcXJ0KCk7aWYoMCE9PVUucmVkU3FyKCkucmVk''@;'; put 'put ''U3ViKEspLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3ZhciBXPVUuZnJvbVJlZCgpLmlzT2RkKCk7cmV0dXJuKEwmJiFXfHwhTCYmVykmJihVPVUucmVkTmVnKCkpLHRoaXMucG9pbnQoTixVKX0sUC5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24o''@;'; put 'put ''Til7aWYoTi5pbmYpcmV0dXJuITA7dmFyIEw9Ti54LEs9Ti55LFU9dGhpcy5hLnJlZE11bChMKSxXPUwucmVkU3FyKCkucmVkTXVsKEwpLnJlZElBZGQoVSkucmVkSUFkZCh0aGlzLmIpO3JldHVybiAwPT09Sy5yZWRTcXIoKS5yZWRJU3ViKFcpLmNtcG4oMCl9LFAucHJvdG90eXBlLl9lbmRv''@;'; put 'put ''V25hZk11bEFkZD1mdW5jdGlvbihOLEwsSyl7Zm9yKHZhciBVPXRoaXMuX2VuZG9XbmFmVDEsVz10aGlzLl9lbmRvV25hZlQyLFk9MDtZPE4ubGVuZ3RoO1krKyl7dmFyIFg9dGhpcy5fZW5kb1NwbGl0KExbWV0pLGVlPU5bWV0sSj1lZS5fZ2V0QmV0YSgpO1guazEubmVnYXRpdmUmJihYLmsx''@;'; put 'put ''LmluZWcoKSxlZT1lZS5uZWcoITApKSxYLmsyLm5lZ2F0aXZlJiYoWC5rMi5pbmVnKCksSj1KLm5lZyghMCkpLFVbMipZXT1lZSxVWzIqWSsxXT1KLFdbMipZXT1YLmsxLFdbMipZKzFdPVguazJ9Zm9yKHZhciByZT10aGlzLl93bmFmTXVsQWRkKDEsVSxXLDIqWSxLKSxpZT0wO2llPDIqWTtp''@;'; put 'put ''ZSsrKVVbaWVdPW51bGwsV1tpZV09bnVsbDtyZXR1cm4gcmV9LGcoRixCLkJhc2VQb2ludCksUC5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oTixMLEspe3JldHVybiBuZXcgRih0aGlzLE4sTCxLKX0sUC5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihOLEwpe3JldHVybiBGLmZy''@;'; put 'put ''b21KU09OKHRoaXMsTixMKX0sRi5wcm90b3R5cGUuX2dldEJldGE9ZnVuY3Rpb24oKXtpZih0aGlzLmN1cnZlLmVuZG8pe3ZhciBOPXRoaXMucHJlY29tcHV0ZWQ7aWYoTiYmTi5iZXRhKXJldHVybiBOLmJldGE7dmFyIEw9dGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngucmVkTXVsKHRoaXMuY3Vy''@;'; put 'put ''dmUuZW5kby5iZXRhKSx0aGlzLnkpO2lmKE4pe3ZhciBLPXRoaXMuY3VydmUsVT1mdW5jdGlvbihXKXtyZXR1cm4gSy5wb2ludChXLngucmVkTXVsKEsuZW5kby5iZXRhKSxXLnkpfTtOLmJldGE9TCxMLnByZWNvbXB1dGVkPXtiZXRhOm51bGwsbmFmOk4ubmFmJiZ7d25kOk4ubmFmLnduZCxw''@;'; put 'put ''b2ludHM6Ti5uYWYucG9pbnRzLm1hcChVKX0sZG91YmxlczpOLmRvdWJsZXMmJntzdGVwOk4uZG91Ymxlcy5zdGVwLHBvaW50czpOLmRvdWJsZXMucG9pbnRzLm1hcChVKX19fXJldHVybiBMfX0sRi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJlY29tcHV0ZWQ/''@;'; put 'put ''W3RoaXMueCx0aGlzLnksdGhpcy5wcmVjb21wdXRlZCYme2RvdWJsZXM6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzJiZ7c3RlcDp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMuc3RlcCxwb2ludHM6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnBvaW50cy5zbGljZSgxKX0sbmFmOnRoaXMucHJl''@;'; put 'put ''Y29tcHV0ZWQubmFmJiZ7d25kOnRoaXMucHJlY29tcHV0ZWQubmFmLnduZCxwb2ludHM6dGhpcy5wcmVjb21wdXRlZC5uYWYucG9pbnRzLnNsaWNlKDEpfX1dOlt0aGlzLngsdGhpcy55XX0sRi5mcm9tSlNPTj1mdW5jdGlvbihOLEwsSyl7InN0cmluZyI9PXR5cGVvZiBMJiYoTD1KU09OLnBh''@;'; put 'put ''cnNlKEwpKTt2YXIgVT1OLnBvaW50KExbMF0sTFsxXSxLKTtpZighTFsyXSlyZXR1cm4gVTtmdW5jdGlvbiBXKFgpe3JldHVybiBOLnBvaW50KFhbMF0sWFsxXSxLKX12YXIgWT1MWzJdO3JldHVybiBVLnByZWNvbXB1dGVkPXtiZXRhOm51bGwsZG91YmxlczpZLmRvdWJsZXMmJntzdGVwOlku''@;'; put 'put ''ZG91Ymxlcy5zdGVwLHBvaW50czpbVV0uY29uY2F0KFkuZG91Ymxlcy5wb2ludHMubWFwKFcpKX0sbmFmOlkubmFmJiZ7d25kOlkubmFmLnduZCxwb2ludHM6W1VdLmNvbmNhdChZLm5hZi5wb2ludHMubWFwKFcpKX19LFV9LEYucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5pc0luZmluaXR5KCk/IjxFQyBQb2ludCBJbmZpbml0eT4iOiI8RUMgUG9pbnQgeDogIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgeTogIit0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyI+In0sRi5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiB0aGlzLmluZn0sRi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKE4pe2lmKHRoaXMuaW5mKXJldHVybiBOO2lmKE4uaW5mKXJldHVybiB0aGlzO2lmKHRoaXMuZXEoTikpcmV0dXJuIHRoaXMuZGJsKCk7aWYodGhpcy5uZWcoKS5lcShOKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChu''@;'; put 'put ''dWxsLG51bGwpO2lmKDA9PT10aGlzLnguY21wKE4ueCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgTD10aGlzLnkucmVkU3ViKE4ueSk7MCE9PUwuY21wbigwKSYmKEw9TC5yZWRNdWwodGhpcy54LnJlZFN1YihOLngpLnJlZEludm0oKSkpO3ZhciBLPUwucmVkU3Fy''@;'; put 'put ''KCkucmVkSVN1Yih0aGlzLngpLnJlZElTdWIoTi54KSxVPUwucmVkTXVsKHRoaXMueC5yZWRTdWIoSykpLnJlZElTdWIodGhpcy55KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChLLFUpfSxGLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgTj10''@;'; put 'put ''aGlzLnkucmVkQWRkKHRoaXMueSk7aWYoMD09PU4uY21wbigwKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBMPXRoaXMuY3VydmUuYSxLPXRoaXMueC5yZWRTcXIoKSxVPU4ucmVkSW52bSgpLFc9Sy5yZWRBZGQoSykucmVkSUFkZChLKS5yZWRJQWRkKEwpLnJlZE11''@;'; put 'put ''bChVKSxZPVcucmVkU3FyKCkucmVkSVN1Yih0aGlzLngucmVkQWRkKHRoaXMueCkpLFg9Vy5yZWRNdWwodGhpcy54LnJlZFN1YihZKSkucmVkSVN1Yih0aGlzLnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFksWCl9LEYucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54''@;'; put 'put ''LmZyb21SZWQoKX0sRi5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnkuZnJvbVJlZCgpfSxGLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oTil7cmV0dXJuIE49bmV3IHkoTiwxNiksdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLl9oYXNEb3VibGVzKE4pP3RoaXMuY3Vy''@;'; put 'put ''dmUuX2ZpeGVkTmFmTXVsKHRoaXMsTik6dGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKFt0aGlzXSxbTl0pOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyxOKX0sRi5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKE4sTCxLKXt2YXIgVT1bdGhpcyxMXSxXPVtOLEtd''@;'; put 'put ''O3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoVSxXKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsVSxXLDIpfSxGLnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKE4sTCxLKXt2YXIgVT1bdGhpcyxMXSxXPVtOLEtdO3JldHVybiB0aGlzLmN1cnZl''@;'; put 'put ''LmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoVSxXLCEwKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsVSxXLDIsITApfSxGLnByb3RvdHlwZS5lcT1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcz09PU58fHRoaXMuaW5mPT09Ti5pbmYmJih0aGlzLmluZnx8MD09PXRoaXMueC5jbXAo''@;'; put 'put ''Ti54KSYmMD09PXRoaXMueS5jbXAoTi55KSl9LEYucHJvdG90eXBlLm5lZz1mdW5jdGlvbihOKXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgTD10aGlzLmN1cnZlLnBvaW50KHRoaXMueCx0aGlzLnkucmVkTmVnKCkpO2lmKE4mJnRoaXMucHJlY29tcHV0ZWQpe3ZhciBLPXRoaXMucHJl''@;'; put 'put ''Y29tcHV0ZWQsVT1mdW5jdGlvbihXKXtyZXR1cm4gVy5uZWcoKX07TC5wcmVjb21wdXRlZD17bmFmOksubmFmJiZ7d25kOksubmFmLnduZCxwb2ludHM6Sy5uYWYucG9pbnRzLm1hcChVKX0sZG91YmxlczpLLmRvdWJsZXMmJntzdGVwOksuZG91Ymxlcy5zdGVwLHBvaW50czpLLmRvdWJsZXMu''@;'; put 'put ''cG9pbnRzLm1hcChVKX19fXJldHVybiBMfSxGLnByb3RvdHlwZS50b0o9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmY/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuY3VydmUuanBvaW50KHRoaXMueCx0aGlzLnksdGhpcy5jdXJ2ZS5vbmUpfSxnKE8sQi5CYXNlUG9p''@;'; put 'put ''bnQpLFAucHJvdG90eXBlLmpwb2ludD1mdW5jdGlvbihOLEwsSyl7cmV0dXJuIG5ldyBPKHRoaXMsTixMLEspfSxPLnByb3RvdHlwZS50b1A9ZnVuY3Rpb24oKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBOPXRoaXMuei5yZWRJ''@;'; put 'put ''bnZtKCksTD1OLnJlZFNxcigpLEs9dGhpcy54LnJlZE11bChMKSxVPXRoaXMueS5yZWRNdWwoTCkucmVkTXVsKE4pO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEssVSl9LE8ucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsdGhpcy55LnJl''@;'; put 'put ''ZE5lZygpLHRoaXMueil9LE8ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihOKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gTjtpZihOLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpczt2YXIgTD1OLnoucmVkU3FyKCksSz10aGlzLnoucmVkU3FyKCksVT10aGlzLngucmVkTXVsKEwpLFc9Ti54''@;'; put 'put ''LnJlZE11bChLKSxZPXRoaXMueS5yZWRNdWwoTC5yZWRNdWwoTi56KSksWD1OLnkucmVkTXVsKEsucmVkTXVsKHRoaXMueikpLGVlPVUucmVkU3ViKFcpLEo9WS5yZWRTdWIoWCk7aWYoMD09PWVlLmNtcG4oMCkpcmV0dXJuIDAhPT1KLmNtcG4oMCk/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxu''@;'; put 'put ''dWxsLG51bGwpOnRoaXMuZGJsKCk7dmFyIHJlPWVlLnJlZFNxcigpLGllPXJlLnJlZE11bChlZSksbGU9VS5yZWRNdWwocmUpLG1lPUoucmVkU3FyKCkucmVkSUFkZChpZSkucmVkSVN1YihsZSkucmVkSVN1YihsZSksX2U9Si5yZWRNdWwobGUucmVkSVN1YihtZSkpLnJlZElTdWIoWS5yZWRN''@;'; put 'put ''dWwoaWUpKSxUZT10aGlzLnoucmVkTXVsKE4ueikucmVkTXVsKGVlKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobWUsX2UsVGUpfSxPLnByb3RvdHlwZS5taXhlZEFkZD1mdW5jdGlvbihOKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gTi50b0ooKTtpZihOLmlzSW5maW5pdHkoKSly''@;'; put 'put ''ZXR1cm4gdGhpczt2YXIgTD10aGlzLnoucmVkU3FyKCksSz10aGlzLngsVT1OLngucmVkTXVsKEwpLFc9dGhpcy55LFk9Ti55LnJlZE11bChMKS5yZWRNdWwodGhpcy56KSxYPUsucmVkU3ViKFUpLGVlPVcucmVkU3ViKFkpO2lmKDA9PT1YLmNtcG4oMCkpcmV0dXJuIDAhPT1lZS5jbXBuKDAp''@;'; put 'put ''P3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciBKPVgucmVkU3FyKCkscmU9Si5yZWRNdWwoWCksaWU9Sy5yZWRNdWwoSiksbGU9ZWUucmVkU3FyKCkucmVkSUFkZChyZSkucmVkSVN1YihpZSkucmVkSVN1YihpZSksbWU9ZWUucmVkTXVsKGllLnJlZElT''@;'; put 'put ''dWIobGUpKS5yZWRJU3ViKFcucmVkTXVsKHJlKSksX2U9dGhpcy56LnJlZE11bChYKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobGUsbWUsX2UpfSxPLnByb3RvdHlwZS5kYmxwPWZ1bmN0aW9uKE4pe2lmKDA9PT1OKXJldHVybiB0aGlzO2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiB0''@;'; put 'put ''aGlzO2lmKCFOKXJldHVybiB0aGlzLmRibCgpO3ZhciBMO2lmKHRoaXMuY3VydmUuemVyb0F8fHRoaXMuY3VydmUudGhyZWVBKXt2YXIgSz10aGlzO2ZvcihMPTA7TDxOO0wrKylLPUsuZGJsKCk7cmV0dXJuIEt9dmFyIFU9dGhpcy5jdXJ2ZS5hLFc9dGhpcy5jdXJ2ZS50aW52LFk9dGhpcy54''@;'; put 'put ''LFg9dGhpcy55LGVlPXRoaXMueixKPWVlLnJlZFNxcigpLnJlZFNxcigpLHJlPVgucmVkQWRkKFgpO2ZvcihMPTA7TDxOO0wrKyl7dmFyIGllPVkucmVkU3FyKCksbGU9cmUucmVkU3FyKCksbWU9bGUucmVkU3FyKCksX2U9aWUucmVkQWRkKGllKS5yZWRJQWRkKGllKS5yZWRJQWRkKFUucmVk''@;'; put 'put ''TXVsKEopKSxUZT1ZLnJlZE11bChsZSksU2U9X2UucmVkU3FyKCkucmVkSVN1YihUZS5yZWRBZGQoVGUpKSx6ZT1UZS5yZWRJU3ViKFNlKSxWPV9lLnJlZE11bCh6ZSk7Vj1WLnJlZElBZGQoVikucmVkSVN1YihtZSk7dmFyIHA9cmUucmVkTXVsKGVlKTtMKzE8TiYmKEo9Si5yZWRNdWwobWUp''@;'; put 'put ''KSxZPVNlLGVlPXAscmU9Vn1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoWSxyZS5yZWRNdWwoVyksZWUpfSxPLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLnplcm9BP3RoaXMuX3plcm9EYmwoKTp0aGlzLmN1cnZlLnRo''@;'; put 'put ''cmVlQT90aGlzLl90aHJlZURibCgpOnRoaXMuX2RibCgpfSxPLnByb3RvdHlwZS5femVyb0RibD1mdW5jdGlvbigpe3ZhciBOLEwsSztpZih0aGlzLnpPbmUpe3ZhciBVPXRoaXMueC5yZWRTcXIoKSxXPXRoaXMueS5yZWRTcXIoKSxZPVcucmVkU3FyKCksWD10aGlzLngucmVkQWRkKFcpLnJl''@;'; put 'put ''ZFNxcigpLnJlZElTdWIoVSkucmVkSVN1YihZKTtYPVgucmVkSUFkZChYKTt2YXIgZWU9VS5yZWRBZGQoVSkucmVkSUFkZChVKSxKPWVlLnJlZFNxcigpLnJlZElTdWIoWCkucmVkSVN1YihYKSxyZT1ZLnJlZElBZGQoWSk7cmU9KHJlPXJlLnJlZElBZGQocmUpKS5yZWRJQWRkKHJlKSxOPUos''@;'; put 'put ''TD1lZS5yZWRNdWwoWC5yZWRJU3ViKEopKS5yZWRJU3ViKHJlKSxLPXRoaXMueS5yZWRBZGQodGhpcy55KX1lbHNle3ZhciBpZT10aGlzLngucmVkU3FyKCksbGU9dGhpcy55LnJlZFNxcigpLG1lPWxlLnJlZFNxcigpLF9lPXRoaXMueC5yZWRBZGQobGUpLnJlZFNxcigpLnJlZElTdWIoaWUp''@;'; put 'put ''LnJlZElTdWIobWUpO19lPV9lLnJlZElBZGQoX2UpO3ZhciBUZT1pZS5yZWRBZGQoaWUpLnJlZElBZGQoaWUpLFNlPVRlLnJlZFNxcigpLHplPW1lLnJlZElBZGQobWUpO3plPSh6ZT16ZS5yZWRJQWRkKHplKSkucmVkSUFkZCh6ZSksTj1TZS5yZWRJU3ViKF9lKS5yZWRJU3ViKF9lKSxMPVRl''@;'; put 'put ''LnJlZE11bChfZS5yZWRJU3ViKE4pKS5yZWRJU3ViKHplKSxLPShLPXRoaXMueS5yZWRNdWwodGhpcy56KSkucmVkSUFkZChLKX1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoTixMLEspfSxPLnByb3RvdHlwZS5fdGhyZWVEYmw9ZnVuY3Rpb24oKXt2YXIgTixMLEs7aWYodGhpcy56T25lKXt2''@;'; put 'put ''YXIgVT10aGlzLngucmVkU3FyKCksVz10aGlzLnkucmVkU3FyKCksWT1XLnJlZFNxcigpLFg9dGhpcy54LnJlZEFkZChXKS5yZWRTcXIoKS5yZWRJU3ViKFUpLnJlZElTdWIoWSk7WD1YLnJlZElBZGQoWCk7dmFyIGVlPVUucmVkQWRkKFUpLnJlZElBZGQoVSkucmVkSUFkZCh0aGlzLmN1cnZl''@;'; put 'put ''LmEpLEo9ZWUucmVkU3FyKCkucmVkSVN1YihYKS5yZWRJU3ViKFgpO049Sjt2YXIgcmU9WS5yZWRJQWRkKFkpO3JlPShyZT1yZS5yZWRJQWRkKHJlKSkucmVkSUFkZChyZSksTD1lZS5yZWRNdWwoWC5yZWRJU3ViKEopKS5yZWRJU3ViKHJlKSxLPXRoaXMueS5yZWRBZGQodGhpcy55KX1lbHNl''@;'; put 'put ''e3ZhciBpZT10aGlzLnoucmVkU3FyKCksbGU9dGhpcy55LnJlZFNxcigpLG1lPXRoaXMueC5yZWRNdWwobGUpLF9lPXRoaXMueC5yZWRTdWIoaWUpLnJlZE11bCh0aGlzLngucmVkQWRkKGllKSk7X2U9X2UucmVkQWRkKF9lKS5yZWRJQWRkKF9lKTt2YXIgVGU9bWUucmVkSUFkZChtZSksU2U9''@;'; put 'put ''KFRlPVRlLnJlZElBZGQoVGUpKS5yZWRBZGQoVGUpO049X2UucmVkU3FyKCkucmVkSVN1YihTZSksSz10aGlzLnkucmVkQWRkKHRoaXMueikucmVkU3FyKCkucmVkSVN1YihsZSkucmVkSVN1YihpZSk7dmFyIHplPWxlLnJlZFNxcigpO3plPSh6ZT0oemU9emUucmVkSUFkZCh6ZSkpLnJlZElB''@;'; put 'put ''ZGQoemUpKS5yZWRJQWRkKHplKSxMPV9lLnJlZE11bChUZS5yZWRJU3ViKE4pKS5yZWRJU3ViKHplKX1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoTixMLEspfSxPLnByb3RvdHlwZS5fZGJsPWZ1bmN0aW9uKCl7dmFyIE49dGhpcy5jdXJ2ZS5hLEw9dGhpcy54LEs9dGhpcy55LFU9dGhpcy56''@;'; put 'put ''LFc9VS5yZWRTcXIoKS5yZWRTcXIoKSxZPUwucmVkU3FyKCksWD1LLnJlZFNxcigpLGVlPVkucmVkQWRkKFkpLnJlZElBZGQoWSkucmVkSUFkZChOLnJlZE11bChXKSksSj1MLnJlZEFkZChMKSxyZT0oSj1KLnJlZElBZGQoSikpLnJlZE11bChYKSxpZT1lZS5yZWRTcXIoKS5yZWRJU3ViKHJl''@;'; put 'put ''LnJlZEFkZChyZSkpLGxlPXJlLnJlZElTdWIoaWUpLG1lPVgucmVkU3FyKCk7bWU9KG1lPShtZT1tZS5yZWRJQWRkKG1lKSkucmVkSUFkZChtZSkpLnJlZElBZGQobWUpO3ZhciBfZT1lZS5yZWRNdWwobGUpLnJlZElTdWIobWUpLFRlPUsucmVkQWRkKEspLnJlZE11bChVKTtyZXR1cm4gdGhp''@;'; put 'put ''cy5jdXJ2ZS5qcG9pbnQoaWUsX2UsVGUpfSxPLnByb3RvdHlwZS50cnBsPWZ1bmN0aW9uKCl7aWYoIXRoaXMuY3VydmUuemVyb0EpcmV0dXJuIHRoaXMuZGJsKCkuYWRkKHRoaXMpO3ZhciBOPXRoaXMueC5yZWRTcXIoKSxMPXRoaXMueS5yZWRTcXIoKSxLPXRoaXMuei5yZWRTcXIoKSxVPUwu''@;'; put 'put ''cmVkU3FyKCksVz1OLnJlZEFkZChOKS5yZWRJQWRkKE4pLFk9Vy5yZWRTcXIoKSxYPXRoaXMueC5yZWRBZGQoTCkucmVkU3FyKCkucmVkSVN1YihOKS5yZWRJU3ViKFUpLGVlPShYPShYPShYPVgucmVkSUFkZChYKSkucmVkQWRkKFgpLnJlZElBZGQoWCkpLnJlZElTdWIoWSkpLnJlZFNxcigp''@;'; put 'put ''LEo9VS5yZWRJQWRkKFUpO0o9KEo9KEo9Si5yZWRJQWRkKEopKS5yZWRJQWRkKEopKS5yZWRJQWRkKEopO3ZhciByZT1XLnJlZElBZGQoWCkucmVkU3FyKCkucmVkSVN1YihZKS5yZWRJU3ViKGVlKS5yZWRJU3ViKEopLGllPUwucmVkTXVsKHJlKTtpZT0oaWU9aWUucmVkSUFkZChpZSkpLnJl''@;'; put 'put ''ZElBZGQoaWUpO3ZhciBsZT10aGlzLngucmVkTXVsKGVlKS5yZWRJU3ViKGllKTtsZT0obGU9bGUucmVkSUFkZChsZSkpLnJlZElBZGQobGUpO3ZhciBtZT10aGlzLnkucmVkTXVsKHJlLnJlZE11bChKLnJlZElTdWIocmUpKS5yZWRJU3ViKFgucmVkTXVsKGVlKSkpO21lPShtZT0obWU9bWUu''@;'; put 'put ''cmVkSUFkZChtZSkpLnJlZElBZGQobWUpKS5yZWRJQWRkKG1lKTt2YXIgX2U9dGhpcy56LnJlZEFkZChYKS5yZWRTcXIoKS5yZWRJU3ViKEspLnJlZElTdWIoZWUpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChsZSxtZSxfZSl9LE8ucHJvdG90eXBlLm11bD1mdW5jdGlvbihOLEwpe3JldHVy''@;'; put 'put ''biBOPW5ldyB5KE4sTCksdGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLE4pfSxPLnByb3RvdHlwZS5lcT1mdW5jdGlvbihOKXtpZigiYWZmaW5lIj09PU4udHlwZSlyZXR1cm4gdGhpcy5lcShOLnRvSigpKTtpZih0aGlzPT09TilyZXR1cm4hMDt2YXIgTD10aGlzLnoucmVkU3FyKCksSz1OLnou''@;'; put 'put ''cmVkU3FyKCk7aWYoMCE9PXRoaXMueC5yZWRNdWwoSykucmVkSVN1YihOLngucmVkTXVsKEwpKS5jbXBuKDApKXJldHVybiExO3ZhciBVPUwucmVkTXVsKHRoaXMueiksVz1LLnJlZE11bChOLnopO3JldHVybiAwPT09dGhpcy55LnJlZE11bChXKS5yZWRJU3ViKE4ueS5yZWRNdWwoVSkpLmNt''@;'; put 'put ''cG4oMCl9LE8ucHJvdG90eXBlLmVxWFRvUD1mdW5jdGlvbihOKXt2YXIgTD10aGlzLnoucmVkU3FyKCksSz1OLnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRNdWwoTCk7aWYoMD09PXRoaXMueC5jbXAoSykpcmV0dXJuITA7Zm9yKHZhciBVPU4uY2xvbmUoKSxXPXRoaXMuY3VydmUucmVkTi5y''@;'; put 'put ''ZWRNdWwoTCk7Oyl7aWYoVS5pYWRkKHRoaXMuY3VydmUubiksVS5jbXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4hMTtpZihLLnJlZElBZGQoVyksMD09PXRoaXMueC5jbXAoSykpcmV0dXJuITB9fSxPLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0''@;'; put 'put ''eSgpPyI8RUMgSlBvaW50IEluZmluaXR5PiI6IjxFQyBKUG9pbnQgeDogIit0aGlzLngudG9TdHJpbmcoMTYsMikrIiB5OiAiK3RoaXMueS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LnRvU3RyaW5nKDE2LDIpKyI+In0sTy5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiAwPT09dGhpcy56LmNtcG4oMCl9fSw1NDI3Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBPLEk9cSx5PV8oMzcxNSksZz1fKDgyNTQpLHc9Xyg5NTMpLmFzc2VydDtmdW5jdGlvbiBQKHope3RoaXMuY3VydmU9InNob3J0Ij09PXoudHlwZT9uZXcgZy5zaG9ydCh6KToiZWR3YXJk''@;'; put 'put ''cyI9PT16LnR5cGU/bmV3IGcuZWR3YXJkcyh6KTpuZXcgZy5tb250KHopLHRoaXMuZz10aGlzLmN1cnZlLmcsdGhpcy5uPXRoaXMuY3VydmUubix0aGlzLmhhc2g9ei5oYXNoLHcodGhpcy5nLnZhbGlkYXRlKCksIkludmFsaWQgY3VydmUiKSx3KHRoaXMuZy5tdWwodGhpcy5uKS5pc0luZmlu''@;'; put 'put ''aXR5KCksIkludmFsaWQgY3VydmUsIEcqTiAhPSBPIil9ZnVuY3Rpb24gRih6LE4pe09iamVjdC5kZWZpbmVQcm9wZXJ0eShJLHose2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciBMPW5ldyBQKE4pO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''SSx6LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpMfSksTH19KX1JLlByZXNldEN1cnZlPVAsRigicDE5MiIse3R5cGU6InNob3J0IixwcmltZToicDE5MiIscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiLGE6ImZm''@;'; put 'put ''ZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZjIixiOiI2NDIxMDUxOSBlNTljODBlNyAwZmE3ZTlhYiA3MjI0MzA0OSBmZWI4ZGVlYyBjMTQ2YjliMSIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgOTlkZWY4MzYgMTQ2YmM5YjEgYjRkMjI4''@;'; put 'put ''MzEiLGhhc2g6eS5zaGEyNTYsZ1JlZDohMSxnOlsiMTg4ZGE4MGUgYjAzMDkwZjYgN2NiZjIwZWIgNDNhMTg4MDAgZjRmZjBhZmQgODJmZjEwMTIiLCIwNzE5MmI5NSBmZmM4ZGE3OCA2MzEwMTFlZCA2YjI0Y2RkNSA3M2Y5NzdhMSAxZTc5NDgxMSJdfSksRigicDIyNCIse3R5cGU6InNob3J0''@;'; put 'put ''IixwcmltZToicDIyNCIscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiLGE6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIixiOiJiNDA1MGE4NSAwYzA0''@;'; put 'put ''YjNhYiBmNTQxMzI1NiA1MDQ0YjBiNyBkN2JmZDhiYSAyNzBiMzk0MyAyMzU1ZmZiNCIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZjE2YTIgZTBiOGYwM2UgMTNkZDI5NDUgNWM1YzJhM2QiLGhhc2g6eS5zaGEyNTYsZ1JlZDohMSxnOlsiYjcwZTBjYmQgNmJiNGJmN2YgMzIx''@;'; put 'put ''MzkwYjkgNGEwM2MxZDMgNTZjMjExMjIgMzQzMjgwZDYgMTE1YzFkMjEiLCJiZDM3NjM4OCBiNWY3MjNmYiA0YzIyZGZlNiBjZDQzNzVhMCA1YTA3NDc2NCA0NGQ1ODE5OSA4NTAwN2UzNCJdfSksRigicDI1NiIse3R5cGU6InNob3J0IixwcmltZTpudWxsLHA6ImZmZmZmZmZmIDAwMDAwMDAx''@;'; put 'put ''IDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIixhOiJmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYyIsYjoiNWFjNjM1ZDggYWEzYTkzZTcgYjNlYmJkNTUgNzY5''@;'; put 'put ''ODg2YmMgNjUxZDA2YjAgY2M1M2IwZjYgM2JjZTNjM2UgMjdkMjYwNGIiLG46ImZmZmZmZmZmIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGJjZTZmYWFkIGE3MTc5ZTg0IGYzYjljYWMyIGZjNjMyNTUxIixoYXNoOnkuc2hhMjU2LGdSZWQ6ITEsZzpbIjZiMTdkMWYyIGUxMmM0MjQ3IGY4''@;'; put 'put ''YmNlNmU1IDYzYTQ0MGYyIDc3MDM3ZDgxIDJkZWIzM2EwIGY0YTEzOTQ1IGQ4OThjMjk2IiwiNGZlMzQyZTIgZmUxYTdmOWIgOGVlN2ViNGEgN2MwZjllMTYgMmJjZTMzNTcgNmIzMTVlY2UgY2JiNjQwNjggMzdiZjUxZjUiXX0pLEYoInAzODQiLHt0eXBlOiJzaG9ydCIscHJpbWU6bnVsbCxw''@;'; put 'put ''OiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiIsYToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmMiLGI6ImIzMzEyZmE3IGUyM2VlN2U0IDk4OGUwNTZiIGUzZjgyZDE5IDE4MWQ5YzZlIGZlODE0MTEyIDAzMTQwODhmIDUwMTM4NzVhIGM2NTYzOThkIDhhMmVkMTlkIDJhODVjOGVkIGQzZWMy''@;'; put 'put ''YWVmIixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBjNzYzNGQ4MSBmNDM3MmRkZiA1ODFhMGRiMiA0OGIwYTc3YSBlY2VjMTk2YSBjY2M1Mjk3MyIsaGFzaDp5LnNoYTM4NCxnUmVkOiExLGc6WyJhYTg3Y2EyMiBiZThiMDUzNyA4ZWIx''@;'; put 'put ''YzcxZSBmMzIwYWQ3NCA2ZTFkM2I2MiA4YmE3OWI5OCA1OWY3NDFlMCA4MjU0MmEzOCA1NTAyZjI1ZCBiZjU1Mjk2YyAzYTU0NWUzOCA3Mjc2MGFiNyIsIjM2MTdkZTRhIDk2MjYyYzZmIDVkOWU5OGJmIDkyOTJkYzI5IGY4ZjQxZGJkIDI4OWExNDdjIGU5ZGEzMTEzIGI1ZjBiOGMwIDBhNjBi''@;'; put 'put ''MWNlIDFkN2U4MTlkIDdhNDMxZDdjIDkwZWEwZTVmIl19KSxGKCJwNTIxIix7dHlwZToic2hvcnQiLHByaW1lOm51bGwscDoiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZm''@;'; put 'put ''ZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYiLGE6IjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZm''@;'; put 'put ''ZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjIixiOiIwMDAwMDA1MSA5NTNlYjk2MSA4ZTFjOWExZiA5MjlhMjFhMCBiNjg1NDBlZSBhMmRhNzI1YiA5OWIzMTVmMyBiOGI0ODk5MSA4ZWYxMDllMSA1NjE5Mzk1MSBlYzdlOTM3YiAxNjUyYzBiZCAz''@;'; put 'put ''YmIxYmYwNyAzNTczZGY4OCAzZDJjMzRmMSBlZjQ1MWZkNCA2YjUwM2YwMCIsbjoiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmEgNTE4Njg3ODMgYmYyZjk2NmIgN2ZjYzAxNDggZjcwOWE1ZDAg''@;'; put 'put ''M2JiNWM5YjggODk5YzQ3YWUgYmI2ZmI3MWUgOTEzODY0MDkiLGhhc2g6eS5zaGE1MTIsZ1JlZDohMSxnOlsiMDAwMDAwYzYgODU4ZTA2YjcgMDQwNGU5Y2QgOWUzZWNiNjYgMjM5NWI0NDIgOWM2NDgxMzkgMDUzZmI1MjEgZjgyOGFmNjAgNmI0ZDNkYmEgYTE0YjVlNzcgZWZlNzU5MjggZmUx''@;'; put 'put ''ZGMxMjcgYTJmZmE4ZGUgMzM0OGIzYzEgODU2YTQyOWIgZjk3ZTdlMzEgYzJlNWJkNjYiLCIwMDAwMDExOCAzOTI5NmE3OCA5YTNiYzAwNCA1YzhhNWZiNCAyYzdkMWJkOSA5OGY1NDQ0OSA1NzliNDQ2OCAxN2FmYmQxNyAyNzNlNjYyYyA5N2VlNzI5OSA1ZWY0MjY0MCBjNTUwYjkwMSAzZmFk''@;'; put 'put ''MDc2MSAzNTNjNzA4NiBhMjcyYzI0MCA4OGJlOTQ3NiA5ZmQxNjY1MCJdfSksRigiY3VydmUyNTUxOSIse3R5cGU6Im1vbnQiLHByaW1lOiJwMjU1MTkiLHA6IjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiLGE6Ijc2''@;'; put 'put ''ZDA2IixiOiIxIixuOiIxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVkM2VkIixoYXNoOnkuc2hhMjU2LGdSZWQ6ITEsZzpbIjkiXX0pLEYoImVkMjU1MTkiLHt0eXBlOiJlZHdhcmRzIixwcmltZToicDI1NTE5IixwOiI3ZmZm''@;'; put 'put ''ZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIixhOiItMSIsYzoiMSIsZDoiNTIwMzZjZWUyYjZmZmU3MyA4Y2M3NDA3OTc3NzllODk4IDAwNzAwYTRkNDE0MWQ4YWIgNzVlYjRkY2ExMzU5NzhhMyIsbjoiMTAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMCAwMDAwMDAwMDAwMDAwMDAwIDE0ZGVmOWRlYTJmNzljZDYgNTgxMjYzMWE1Y2Y1ZDNlZCIsaGFzaDp5LnNoYTI1NixnUmVkOiExLGc6WyIyMTY5MzZkM2NkNmU1M2ZlYzBhNGUyMzFmZGQ2ZGM1YzY5MmNjNzYwOTUyNWE3YjJjOTU2MmQ2MDhmMjVkNTFhIiwiNjY2NjY2NjY2NjY2NjY2''@;'; put 'put ''NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY1OCJdfSk7dHJ5e089XygxMDM3KX1jYXRjaHtPPXZvaWQgMH1GKCJzZWNwMjU2azEiLHt0eXBlOiJzaG9ydCIscHJpbWU6ImsyNTYiLHA6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZm''@;'; put 'put ''ZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIixhOiIwIixiOiI3IixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBiYWFlZGNlNiBhZjQ4YTAzYiBiZmQyNWU4YyBkMDM2NDE0MSIsaDoiMSIsaGFzaDp5LnNoYTI1NixiZXRhOiI3YWU5NmEyYjY1N2MwNzEw''@;'; put 'put ''NmU2NDQ3OWVhYzM0MzRlOTljZjA0OTc1MTJmNTg5OTVjMTM5NmMyODcxOTUwMWVlIixsYW1iZGE6IjUzNjNhZDRjYzA1YzMwZTBhNTI2MWMwMjg4MTI2NDVhMTIyZTIyZWEyMDgxNjY3OGRmMDI5NjdjMWIyM2JkNzIiLGJhc2lzOlt7YToiMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGVi''@;'; put 'put ''MTUiLGI6Ii1lNDQzN2VkNjAxMGU4ODI4NmY1NDdmYTkwYWJmZTRjMyJ9LHthOiIxMTRjYTUwZjdhOGUyZjNmNjU3YzExMDhkOWQ0NGNmZDgiLGI6IjMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1In1dLGdSZWQ6ITEsZzpbIjc5YmU2NjdlZjlkY2JiYWM1NWEwNjI5NWNlODcwYjA3''@;'; put 'put ''MDI5YmZjZGIyZGNlMjhkOTU5ZjI4MTViMTZmODE3OTgiLCI0ODNhZGE3NzI2YTNjNDY1NWRhNGZiZmMwZTExMDhhOGZkMTdiNDQ4YTY4NTU0MTk5YzQ3ZDA4ZmZiMTBkNGI4IixPXX0pfSw3OTU0Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMzc4NSkseT1fKDIxNTYpLGc9Xyg5''@;'; put 'put ''NTMpLEI9Xyg1NDI3KSx3PV8oOTkzMSksUD1nLmFzc2VydCxGPV8oMTI1MSksTz1fKDYxMSk7ZnVuY3Rpb24geihOKXtpZighKHRoaXMgaW5zdGFuY2VvZiB6KSlyZXR1cm4gbmV3IHooTik7InN0cmluZyI9PXR5cGVvZiBOJiYoUChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNh''@;'; put 'put ''bGwoQixOKSwiVW5rbm93biBjdXJ2ZSAiK04pLE49QltOXSksTiBpbnN0YW5jZW9mIEIuUHJlc2V0Q3VydmUmJihOPXtjdXJ2ZTpOfSksdGhpcy5jdXJ2ZT1OLmN1cnZlLmN1cnZlLHRoaXMubj10aGlzLmN1cnZlLm4sdGhpcy5uaD10aGlzLm4udXNocm4oMSksdGhpcy5nPXRoaXMuY3VydmUu''@;'; put 'put ''Zyx0aGlzLmc9Ti5jdXJ2ZS5nLHRoaXMuZy5wcmVjb21wdXRlKE4uY3VydmUubi5iaXRMZW5ndGgoKSsxKSx0aGlzLmhhc2g9Ti5oYXNofHxOLmN1cnZlLmhhc2h9dWUuZXhwb3J0cz16LHoucHJvdG90eXBlLmtleVBhaXI9ZnVuY3Rpb24oTCl7cmV0dXJuIG5ldyBGKHRoaXMsTCl9LHoucHJv''@;'; put 'put ''dG90eXBlLmtleUZyb21Qcml2YXRlPWZ1bmN0aW9uKEwsSyl7cmV0dXJuIEYuZnJvbVByaXZhdGUodGhpcyxMLEspfSx6LnByb3RvdHlwZS5rZXlGcm9tUHVibGljPWZ1bmN0aW9uKEwsSyl7cmV0dXJuIEYuZnJvbVB1YmxpYyh0aGlzLEwsSyl9LHoucHJvdG90eXBlLmdlbktleVBhaXI9ZnVu''@;'; put 'put ''Y3Rpb24oTCl7THx8KEw9e30pO2Zvcih2YXIgSz1uZXcgeSh7aGFzaDp0aGlzLmhhc2gscGVyczpMLnBlcnMscGVyc0VuYzpMLnBlcnNFbmN8fCJ1dGY4IixlbnRyb3B5OkwuZW50cm9weXx8dyh0aGlzLmhhc2guaG1hY1N0cmVuZ3RoKSxlbnRyb3B5RW5jOkwuZW50cm9weSYmTC5lbnRyb3B5''@;'; put 'put ''RW5jfHwidXRmOCIsbm9uY2U6dGhpcy5uLnRvQXJyYXkoKX0pLFU9dGhpcy5uLmJ5dGVMZW5ndGgoKSxXPXRoaXMubi5zdWIobmV3IEkoMikpOzspe3ZhciBZPW5ldyBJKEsuZ2VuZXJhdGUoVSkpO2lmKCEoWS5jbXAoVyk+MCkpcmV0dXJuIFkuaWFkZG4oMSksdGhpcy5rZXlGcm9tUHJpdmF0''@;'; put 'put ''ZShZKX19LHoucHJvdG90eXBlLl90cnVuY2F0ZVRvTj1mdW5jdGlvbihMLEssVSl7dmFyIFc7aWYoSS5pc0JOKEwpfHwibnVtYmVyIj09dHlwZW9mIEwpVz0oTD1uZXcgSShMLDE2KSkuYnl0ZUxlbmd0aCgpO2Vsc2UgaWYoIm9iamVjdCI9PXR5cGVvZiBMKVc9TC5sZW5ndGgsTD1uZXcgSShM''@;'; put 'put ''LDE2KTtlbHNle3ZhciBZPUwudG9TdHJpbmcoKTtXPVkubGVuZ3RoKzE+Pj4xLEw9bmV3IEkoWSwxNil9Im51bWJlciIhPXR5cGVvZiBVJiYoVT04KlcpO3ZhciBYPVUtdGhpcy5uLmJpdExlbmd0aCgpO3JldHVybiBYPjAmJihMPUwudXNocm4oWCkpLCFLJiZMLmNtcCh0aGlzLm4pPj0wP0wu''@;'; put 'put ''c3ViKHRoaXMubik6TH0sei5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihMLEssVSxXKXtpZigib2JqZWN0Ij09dHlwZW9mIFUmJihXPVUsVT1udWxsKSxXfHwoVz17fSksInN0cmluZyIhPXR5cGVvZiBMJiYibnVtYmVyIiE9dHlwZW9mIEwmJiFJLmlzQk4oTCkpe1AoIm9iamVjdCI9PXR5cGVv''@;'; put 'put ''ZiBMJiZMJiYibnVtYmVyIj09dHlwZW9mIEwubGVuZ3RoLCJFeHBlY3RlZCBtZXNzYWdlIHRvIGJlIGFuIGFycmF5LWxpa2UsIGEgaGV4IHN0cmluZywgb3IgYSBCTiBpbnN0YW5jZSIpLFAoTC5sZW5ndGg+Pj4wPT09TC5sZW5ndGgpO2Zvcih2YXIgWT0wO1k8TC5sZW5ndGg7WSsrKVAoKDI1''@;'; put 'put ''NSZMW1ldKT09PUxbWV0pfUs9dGhpcy5rZXlGcm9tUHJpdmF0ZShLLFUpLEw9dGhpcy5fdHJ1bmNhdGVUb04oTCwhMSxXLm1zZ0JpdExlbmd0aCksUCghTC5pc05lZygpLCJDYW4gbm90IHNpZ24gYSBuZWdhdGl2ZSBtZXNzYWdlIik7dmFyIFg9dGhpcy5uLmJ5dGVMZW5ndGgoKSxlZT1LLmdl''@;'; put 'put ''dFByaXZhdGUoKS50b0FycmF5KCJiZSIsWCksSj1MLnRvQXJyYXkoImJlIixYKTtQKG5ldyBJKEopLmVxKEwpLCJDYW4gbm90IHNpZ24gbWVzc2FnZSIpO2Zvcih2YXIgcmU9bmV3IHkoe2hhc2g6dGhpcy5oYXNoLGVudHJvcHk6ZWUsbm9uY2U6SixwZXJzOlcucGVycyxwZXJzRW5jOlcucGVy''@;'; put 'put ''c0VuY3x8InV0ZjgifSksaWU9dGhpcy5uLnN1YihuZXcgSSgxKSksbGU9MDs7bGUrKyl7dmFyIG1lPVcuaz9XLmsobGUpOm5ldyBJKHJlLmdlbmVyYXRlKHRoaXMubi5ieXRlTGVuZ3RoKCkpKTtpZighKChtZT10aGlzLl90cnVuY2F0ZVRvTihtZSwhMCkpLmNtcG4oMSk8PTB8fG1lLmNtcChp''@;'; put 'put ''ZSk+PTApKXt2YXIgX2U9dGhpcy5nLm11bChtZSk7aWYoIV9lLmlzSW5maW5pdHkoKSl7dmFyIFRlPV9lLmdldFgoKSxTZT1UZS51bW9kKHRoaXMubik7aWYoMCE9PVNlLmNtcG4oMCkpe3ZhciB6ZT1tZS5pbnZtKHRoaXMubikubXVsKFNlLm11bChLLmdldFByaXZhdGUoKSkuaWFkZChMKSk7''@;'; put 'put ''aWYoMCE9PSh6ZT16ZS51bW9kKHRoaXMubikpLmNtcG4oMCkpe3ZhciBWPShfZS5nZXRZKCkuaXNPZGQoKT8xOjApfCgwIT09VGUuY21wKFNlKT8yOjApO3JldHVybiBXLmNhbm9uaWNhbCYmemUuY21wKHRoaXMubmgpPjAmJih6ZT10aGlzLm4uc3ViKHplKSxWXj0xKSxuZXcgTyh7cjpTZSxz''@;'; put 'put ''OnplLHJlY292ZXJ5UGFyYW06Vn0pfX19fX19LHoucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihMLEssVSxXLFkpe1l8fChZPXt9KSxMPXRoaXMuX3RydW5jYXRlVG9OKEwsITEsWS5tc2dCaXRMZW5ndGgpLFU9dGhpcy5rZXlGcm9tUHVibGljKFUsVyk7dmFyIFg9KEs9bmV3IE8oSywiaGV4''@;'; put 'put ''IikpLnIsZWU9Sy5zO2lmKFguY21wbigxKTwwfHxYLmNtcCh0aGlzLm4pPj0wfHxlZS5jbXBuKDEpPDB8fGVlLmNtcCh0aGlzLm4pPj0wKXJldHVybiExO3ZhciBsZSxKPWVlLmludm0odGhpcy5uKSxyZT1KLm11bChMKS51bW9kKHRoaXMubiksaWU9Si5tdWwoWCkudW1vZCh0aGlzLm4pO3Jl''@;'; put 'put ''dHVybiB0aGlzLmN1cnZlLl9tYXh3ZWxsVHJpY2s/IShsZT10aGlzLmcuam11bEFkZChyZSxVLmdldFB1YmxpYygpLGllKSkuaXNJbmZpbml0eSgpJiZsZS5lcVhUb1AoWCk6IShsZT10aGlzLmcubXVsQWRkKHJlLFUuZ2V0UHVibGljKCksaWUpKS5pc0luZmluaXR5KCkmJjA9PT1sZS5nZXRY''@;'; put 'put ''KCkudW1vZCh0aGlzLm4pLmNtcChYKX0sei5wcm90b3R5cGUucmVjb3ZlclB1YktleT1mdW5jdGlvbihOLEwsSyxVKXtQKCgzJkspPT09SywiVGhlIHJlY292ZXJ5IHBhcmFtIGlzIG1vcmUgdGhhbiB0d28gYml0cyIpLEw9bmV3IE8oTCxVKTt2YXIgVz10aGlzLm4sWT1uZXcgSShOKSxYPUwu''@;'; put 'put ''cixlZT1MLnMsSj0xJksscmU9Sz4+MTtpZihYLmNtcCh0aGlzLmN1cnZlLnAudW1vZCh0aGlzLmN1cnZlLm4pKT49MCYmcmUpdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gZmluZCBzZW5jb25kIGtleSBjYW5kaW5hdGUiKTtYPXRoaXMuY3VydmUucG9pbnRGcm9tWChyZT9YLmFkZCh0aGlz''@;'; put 'put ''LmN1cnZlLm4pOlgsSik7dmFyIGllPUwuci5pbnZtKFcpLGxlPVcuc3ViKFkpLm11bChpZSkudW1vZChXKSxtZT1lZS5tdWwoaWUpLnVtb2QoVyk7cmV0dXJuIHRoaXMuZy5tdWxBZGQobGUsWCxtZSl9LHoucHJvdG90eXBlLmdldEtleVJlY292ZXJ5UGFyYW09ZnVuY3Rpb24oTixMLEssVSl7''@;'; put 'put ''aWYobnVsbCE9PShMPW5ldyBPKEwsVSkpLnJlY292ZXJ5UGFyYW0pcmV0dXJuIEwucmVjb3ZlcnlQYXJhbTtmb3IodmFyIFc9MDtXPDQ7VysrKXt2YXIgWTt0cnl7WT10aGlzLnJlY292ZXJQdWJLZXkoTixMLFcpfWNhdGNoe2NvbnRpbnVlfWlmKFkuZXEoSykpcmV0dXJuIFd9dGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJVbmFibGUgdG8gZmluZCB2YWxpZCByZWNvdmVyeSBmYWN0b3IiKX19LDEyNTE6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9XygzNzg1KSxnPV8oOTUzKS5hc3NlcnQ7ZnVuY3Rpb24gQih3LFApe3RoaXMuZWM9dyx0aGlzLnByaXY9bnVsbCx0aGlzLnB1Yj1udWxsLFAu''@;'; put 'put ''cHJpdiYmdGhpcy5faW1wb3J0UHJpdmF0ZShQLnByaXYsUC5wcml2RW5jKSxQLnB1YiYmdGhpcy5faW1wb3J0UHVibGljKFAucHViLFAucHViRW5jKX11ZS5leHBvcnRzPUIsQi5mcm9tUHVibGljPWZ1bmN0aW9uKFAsRixPKXtyZXR1cm4gRiBpbnN0YW5jZW9mIEI/RjpuZXcgQihQLHtwdWI6''@;'; put 'put ''RixwdWJFbmM6T30pfSxCLmZyb21Qcml2YXRlPWZ1bmN0aW9uKFAsRixPKXtyZXR1cm4gRiBpbnN0YW5jZW9mIEI/RjpuZXcgQihQLHtwcml2OkYscHJpdkVuYzpPfSl9LEIucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7dmFyIFA9dGhpcy5nZXRQdWJsaWMoKTtyZXR1cm4gUC5pc0lu''@;'; put 'put ''ZmluaXR5KCk/e3Jlc3VsdDohMSxyZWFzb246IkludmFsaWQgcHVibGljIGtleSJ9OlAudmFsaWRhdGUoKT9QLm11bCh0aGlzLmVjLmN1cnZlLm4pLmlzSW5maW5pdHkoKT97cmVzdWx0OiEwLHJlYXNvbjpudWxsfTp7cmVzdWx0OiExLHJlYXNvbjoiUHVibGljIGtleSAqIE4gIT0gTyJ9Onty''@;'; put 'put ''ZXN1bHQ6ITEscmVhc29uOiJQdWJsaWMga2V5IGlzIG5vdCBhIHBvaW50In19LEIucHJvdG90eXBlLmdldFB1YmxpYz1mdW5jdGlvbihQLEYpe3JldHVybiJzdHJpbmciPT10eXBlb2YgUCYmKEY9UCxQPW51bGwpLHRoaXMucHVifHwodGhpcy5wdWI9dGhpcy5lYy5nLm11bCh0aGlzLnByaXYp''@;'; put 'put ''KSxGP3RoaXMucHViLmVuY29kZShGLFApOnRoaXMucHVifSxCLnByb3RvdHlwZS5nZXRQcml2YXRlPWZ1bmN0aW9uKFApe3JldHVybiJoZXgiPT09UD90aGlzLnByaXYudG9TdHJpbmcoMTYsMik6dGhpcy5wcml2fSxCLnByb3RvdHlwZS5faW1wb3J0UHJpdmF0ZT1mdW5jdGlvbihQLEYpe3Ro''@;'; put 'put ''aXMucHJpdj1uZXcgSShQLEZ8fDE2KSx0aGlzLnByaXY9dGhpcy5wcml2LnVtb2QodGhpcy5lYy5jdXJ2ZS5uKX0sQi5wcm90b3R5cGUuX2ltcG9ydFB1YmxpYz1mdW5jdGlvbihQLEYpe2lmKFAueHx8UC55KXJldHVybiJtb250Ij09PXRoaXMuZWMuY3VydmUudHlwZT9nKFAueCwiTmVlZCB4''@;'; put 'put ''IGNvb3JkaW5hdGUiKTooInNob3J0Ij09PXRoaXMuZWMuY3VydmUudHlwZXx8ImVkd2FyZHMiPT09dGhpcy5lYy5jdXJ2ZS50eXBlKSYmZyhQLngmJlAueSwiTmVlZCBib3RoIHggYW5kIHkgY29vcmRpbmF0ZSIpLHZvaWQodGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5wb2ludChQLngsUC55KSk7''@;'; put 'put ''dGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5kZWNvZGVQb2ludChQLEYpfSxCLnByb3RvdHlwZS5kZXJpdmU9ZnVuY3Rpb24oUCl7cmV0dXJuIFAudmFsaWRhdGUoKXx8ZyhQLnZhbGlkYXRlKCksInB1YmxpYyBwb2ludCBub3QgdmFsaWRhdGVkIiksUC5tdWwodGhpcy5wcml2KS5nZXRYKCl9LEIu''@;'; put 'put ''cHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oUCxGLE8pe3JldHVybiB0aGlzLmVjLnNpZ24oUCx0aGlzLEYsTyl9LEIucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihQLEYsTyl7cmV0dXJuIHRoaXMuZWMudmVyaWZ5KFAsRix0aGlzLHZvaWQgMCxPKX0sQi5wcm90b3R5cGUuaW5zcGVjdD1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiI8S2V5IHByaXY6ICIrKHRoaXMucHJpdiYmdGhpcy5wcml2LnRvU3RyaW5nKDE2LDIpKSsiIHB1YjogIisodGhpcy5wdWImJnRoaXMucHViLmluc3BlY3QoKSkrIiA+In19LDYxMToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDM3ODUpLHk9Xyg5NTMpLGc9''@;'; put 'put ''eS5hc3NlcnQ7ZnVuY3Rpb24gQih6LE4pe2lmKHogaW5zdGFuY2VvZiBCKXJldHVybiB6O3RoaXMuX2ltcG9ydERFUih6LE4pfHwoZyh6LnImJnoucywiU2lnbmF0dXJlIHdpdGhvdXQgciBvciBzIiksdGhpcy5yPW5ldyBJKHouciwxNiksdGhpcy5zPW5ldyBJKHoucywxNiksdGhpcy5yZWNv''@;'; put 'put ''dmVyeVBhcmFtPXZvaWQgMD09PXoucmVjb3ZlcnlQYXJhbT9udWxsOnoucmVjb3ZlcnlQYXJhbSl9ZnVuY3Rpb24gdygpe3RoaXMucGxhY2U9MH1mdW5jdGlvbiBQKHosTil7dmFyIEw9eltOLnBsYWNlKytdO2lmKCEoMTI4JkwpKXJldHVybiBMO3ZhciBLPTE1Jkw7aWYoMD09PUt8fEs+NHx8''@;'; put 'put ''MD09PXpbTi5wbGFjZV0pcmV0dXJuITE7Zm9yKHZhciBVPTAsVz0wLFk9Ti5wbGFjZTtXPEs7VysrLFkrKylVPDw9OCxVfD16W1ldLFU+Pj49MDtyZXR1cm4hKFU8PTEyNykmJihOLnBsYWNlPVksVSl9ZnVuY3Rpb24gRih6KXtmb3IodmFyIE49MCxMPXoubGVuZ3RoLTE7IXpbTl0mJiEoMTI4''@;'; put 'put ''JnpbTisxXSkmJk48TDspTisrO3JldHVybiAwPT09Tj96Onouc2xpY2UoTil9ZnVuY3Rpb24gTyh6LE4pe2lmKE48MTI4KXoucHVzaChOKTtlbHNle3ZhciBMPTErKE1hdGgubG9nKE4pL01hdGguTE4yPj4+Myk7Zm9yKHoucHVzaCgxMjh8TCk7LS1MOyl6LnB1c2goTj4+PihMPDwzKSYyNTUp''@;'; put 'put ''O3oucHVzaChOKX19dWUuZXhwb3J0cz1CLEIucHJvdG90eXBlLl9pbXBvcnRERVI9ZnVuY3Rpb24oTixMKXtOPXkudG9BcnJheShOLEwpO3ZhciBLPW5ldyB3O2lmKDQ4IT09TltLLnBsYWNlKytdKXJldHVybiExO3ZhciBVPVAoTixLKTtpZighMT09PVV8fFUrSy5wbGFjZSE9PU4ubGVuZ3Ro''@;'; put 'put ''fHwyIT09TltLLnBsYWNlKytdKXJldHVybiExO3ZhciBXPVAoTixLKTtpZighMT09PVd8fDEyOCZOW0sucGxhY2VdKXJldHVybiExO3ZhciBZPU4uc2xpY2UoSy5wbGFjZSxXK0sucGxhY2UpO2lmKEsucGxhY2UrPVcsMiE9PU5bSy5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgWD1QKE4sSyk7aWYo''@;'; put 'put ''ITE9PT1YfHxOLmxlbmd0aCE9PVgrSy5wbGFjZXx8MTI4Jk5bSy5wbGFjZV0pcmV0dXJuITE7dmFyIGVlPU4uc2xpY2UoSy5wbGFjZSxYK0sucGxhY2UpO2lmKDA9PT1ZWzBdKXtpZighKDEyOCZZWzFdKSlyZXR1cm4hMTtZPVkuc2xpY2UoMSl9aWYoMD09PWVlWzBdKXtpZighKDEyOCZlZVsx''@;'; put 'put ''XSkpcmV0dXJuITE7ZWU9ZWUuc2xpY2UoMSl9cmV0dXJuIHRoaXMucj1uZXcgSShZKSx0aGlzLnM9bmV3IEkoZWUpLHRoaXMucmVjb3ZlcnlQYXJhbT1udWxsLCEwfSxCLnByb3RvdHlwZS50b0RFUj1mdW5jdGlvbihOKXt2YXIgTD10aGlzLnIudG9BcnJheSgpLEs9dGhpcy5zLnRvQXJyYXko''@;'; put 'put ''KTtmb3IoMTI4JkxbMF0mJihMPVswXS5jb25jYXQoTCkpLDEyOCZLWzBdJiYoSz1bMF0uY29uY2F0KEspKSxMPUYoTCksSz1GKEspOyEoS1swXXx8MTI4JktbMV0pOylLPUsuc2xpY2UoMSk7dmFyIFU9WzJdO08oVSxMLmxlbmd0aCksKFU9VS5jb25jYXQoTCkpLnB1c2goMiksTyhVLEsubGVu''@;'; put 'put ''Z3RoKTt2YXIgVz1VLmNvbmNhdChLKSxZPVs0OF07cmV0dXJuIE8oWSxXLmxlbmd0aCksWT1ZLmNvbmNhdChXKSx5LmVuY29kZShZLE4pfX0sNTk4MDoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDM3MTUpLHk9Xyg1NDI3KSxnPV8oOTUzKSxCPWcuYXNzZXJ0LHc9Zy5wYXJzZUJ5''@;'; put 'put ''dGVzLFA9Xyg5MDg3KSxGPV8oMzYyMik7ZnVuY3Rpb24gTyh6KXtpZihCKCJlZDI1NTE5Ij09PXosIm9ubHkgdGVzdGVkIHdpdGggZWQyNTUxOSBzbyBmYXIiKSwhKHRoaXMgaW5zdGFuY2VvZiBPKSlyZXR1cm4gbmV3IE8oeik7dGhpcy5jdXJ2ZT16PXlbel0uY3VydmUsdGhpcy5nPXouZyx0''@;'; put 'put ''aGlzLmcucHJlY29tcHV0ZSh6Lm4uYml0TGVuZ3RoKCkrMSksdGhpcy5wb2ludENsYXNzPXoucG9pbnQoKS5jb25zdHJ1Y3Rvcix0aGlzLmVuY29kaW5nTGVuZ3RoPU1hdGguY2VpbCh6Lm4uYml0TGVuZ3RoKCkvOCksdGhpcy5oYXNoPUkuc2hhNTEyfXVlLmV4cG9ydHM9TyxPLnByb3RvdHlw''@;'; put 'put ''ZS5zaWduPWZ1bmN0aW9uKE4sTCl7Tj13KE4pO3ZhciBLPXRoaXMua2V5RnJvbVNlY3JldChMKSxVPXRoaXMuaGFzaEludChLLm1lc3NhZ2VQcmVmaXgoKSxOKSxXPXRoaXMuZy5tdWwoVSksWT10aGlzLmVuY29kZVBvaW50KFcpLFg9dGhpcy5oYXNoSW50KFksSy5wdWJCeXRlcygpLE4pLm11''@;'; put 'put ''bChLLnByaXYoKSksZWU9VS5hZGQoWCkudW1vZCh0aGlzLmN1cnZlLm4pO3JldHVybiB0aGlzLm1ha2VTaWduYXR1cmUoe1I6VyxTOmVlLFJlbmNvZGVkOll9KX0sTy5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKE4sTCxLKXtpZihOPXcoTiksKEw9dGhpcy5tYWtlU2lnbmF0dXJlKEwpKS5T''@;'; put 'put ''KCkuZ3RlKEwuZWRkc2EuY3VydmUubil8fEwuUygpLmlzTmVnKCkpcmV0dXJuITE7dmFyIFU9dGhpcy5rZXlGcm9tUHVibGljKEspLFc9dGhpcy5oYXNoSW50KEwuUmVuY29kZWQoKSxVLnB1YkJ5dGVzKCksTiksWT10aGlzLmcubXVsKEwuUygpKTtyZXR1cm4gTC5SKCkuYWRkKFUucHViKCku''@;'; put 'put ''bXVsKFcpKS5lcShZKX0sTy5wcm90b3R5cGUuaGFzaEludD1mdW5jdGlvbigpe2Zvcih2YXIgTj10aGlzLmhhc2goKSxMPTA7TDxhcmd1bWVudHMubGVuZ3RoO0wrKylOLnVwZGF0ZShhcmd1bWVudHNbTF0pO3JldHVybiBnLmludEZyb21MRShOLmRpZ2VzdCgpKS51bW9kKHRoaXMuY3VydmUu''@;'; put 'put ''bil9LE8ucHJvdG90eXBlLmtleUZyb21QdWJsaWM9ZnVuY3Rpb24oTil7cmV0dXJuIFAuZnJvbVB1YmxpYyh0aGlzLE4pfSxPLnByb3RvdHlwZS5rZXlGcm9tU2VjcmV0PWZ1bmN0aW9uKE4pe3JldHVybiBQLmZyb21TZWNyZXQodGhpcyxOKX0sTy5wcm90b3R5cGUubWFrZVNpZ25hdHVyZT1m''@;'; put 'put ''dW5jdGlvbihOKXtyZXR1cm4gTiBpbnN0YW5jZW9mIEY/TjpuZXcgRih0aGlzLE4pfSxPLnByb3RvdHlwZS5lbmNvZGVQb2ludD1mdW5jdGlvbihOKXt2YXIgTD1OLmdldFkoKS50b0FycmF5KCJsZSIsdGhpcy5lbmNvZGluZ0xlbmd0aCk7cmV0dXJuIExbdGhpcy5lbmNvZGluZ0xlbmd0aC0x''@;'; put 'put ''XXw9Ti5nZXRYKCkuaXNPZGQoKT8xMjg6MCxMfSxPLnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbihOKXt2YXIgTD0oTj1nLnBhcnNlQnl0ZXMoTikpLmxlbmd0aC0xLEs9Ti5zbGljZSgwLEwpLmNvbmNhdCgtMTI5Jk5bTF0pLFU9ISEoMTI4Jk5bTF0pLFc9Zy5pbnRGcm9tTEUoSyk7''@;'; put 'put ''cmV0dXJuIHRoaXMuY3VydmUucG9pbnRGcm9tWShXLFUpfSxPLnByb3RvdHlwZS5lbmNvZGVJbnQ9ZnVuY3Rpb24oTil7cmV0dXJuIE4udG9BcnJheSgibGUiLHRoaXMuZW5jb2RpbmdMZW5ndGgpfSxPLnByb3RvdHlwZS5kZWNvZGVJbnQ9ZnVuY3Rpb24oTil7cmV0dXJuIGcuaW50RnJvbUxF''@;'; put 'put ''KE4pfSxPLnByb3RvdHlwZS5pc1BvaW50PWZ1bmN0aW9uKE4pe3JldHVybiBOIGluc3RhbmNlb2YgdGhpcy5wb2ludENsYXNzfX0sOTA4NzoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDk1MykseT1JLmFzc2VydCxnPUkucGFyc2VCeXRlcyxCPUkuY2FjaGVkUHJvcGVydHk7ZnVu''@;'; put 'put ''Y3Rpb24gdyhQLEYpe3RoaXMuZWRkc2E9UCx0aGlzLl9zZWNyZXQ9ZyhGLnNlY3JldCksUC5pc1BvaW50KEYucHViKT90aGlzLl9wdWI9Ri5wdWI6dGhpcy5fcHViQnl0ZXM9ZyhGLnB1Yil9dy5mcm9tUHVibGljPWZ1bmN0aW9uKEYsTyl7cmV0dXJuIE8gaW5zdGFuY2VvZiB3P086bmV3IHco''@;'; put 'put ''Rix7cHViOk99KX0sdy5mcm9tU2VjcmV0PWZ1bmN0aW9uKEYsTyl7cmV0dXJuIE8gaW5zdGFuY2VvZiB3P086bmV3IHcoRix7c2VjcmV0Ok99KX0sdy5wcm90b3R5cGUuc2VjcmV0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlY3JldH0sQih3LCJwdWJCeXRlcyIsZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLnB1YigpKX0pLEIodywicHViIixmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wdWJCeXRlcz90aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuX3B1YkJ5dGVzKTp0aGlzLmVkZHNhLmcubXVsKHRoaXMucHJpdigpKX0pLEIodywicHJpdkJ5''@;'; put 'put ''dGVzIixmdW5jdGlvbigpe3ZhciBGPXRoaXMuZWRkc2EsTz10aGlzLmhhc2goKSx6PUYuZW5jb2RpbmdMZW5ndGgtMSxOPU8uc2xpY2UoMCxGLmVuY29kaW5nTGVuZ3RoKTtyZXR1cm4gTlswXSY9MjQ4LE5bel0mPTEyNyxOW3pdfD02NCxOfSksQih3LCJwcml2IixmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLnByaXZCeXRlcygpKX0pLEIodywiaGFzaCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5oYXNoKCkudXBkYXRlKHRoaXMuc2VjcmV0KCkpLmRpZ2VzdCgpfSksQih3LCJtZXNzYWdlUHJlZml4IixmdW5jdGlvbigpe3JldHVybiB0aGlz''@;'; put 'put ''Lmhhc2goKS5zbGljZSh0aGlzLmVkZHNhLmVuY29kaW5nTGVuZ3RoKX0pLHcucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oRil7cmV0dXJuIHkodGhpcy5fc2VjcmV0LCJLZXlQYWlyIGNhbiBvbmx5IHZlcmlmeSIpLHRoaXMuZWRkc2Euc2lnbihGLHRoaXMpfSx3LnByb3RvdHlwZS52ZXJpZnk9''@;'; put 'put ''ZnVuY3Rpb24oRixPKXtyZXR1cm4gdGhpcy5lZGRzYS52ZXJpZnkoRixPLHRoaXMpfSx3LnByb3RvdHlwZS5nZXRTZWNyZXQ9ZnVuY3Rpb24oRil7cmV0dXJuIHkodGhpcy5fc2VjcmV0LCJLZXlQYWlyIGlzIHB1YmxpYyBvbmx5IiksSS5lbmNvZGUodGhpcy5zZWNyZXQoKSxGKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuZ2V0UHVibGljPWZ1bmN0aW9uKEYpe3JldHVybiBJLmVuY29kZSh0aGlzLnB1YkJ5dGVzKCksRil9LHVlLmV4cG9ydHM9d30sMzYyMjoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDM3ODUpLHk9Xyg5NTMpLGc9eS5hc3NlcnQsQj15LmNhY2hlZFByb3BlcnR5LHc9eS5w''@;'; put 'put ''YXJzZUJ5dGVzO2Z1bmN0aW9uIFAoRixPKXt0aGlzLmVkZHNhPUYsIm9iamVjdCIhPXR5cGVvZiBPJiYoTz13KE8pKSxBcnJheS5pc0FycmF5KE8pJiYoZyhPLmxlbmd0aD09PTIqRi5lbmNvZGluZ0xlbmd0aCwiU2lnbmF0dXJlIGhhcyBpbnZhbGlkIHNpemUiKSxPPXtSOk8uc2xpY2UoMCxG''@;'; put 'put ''LmVuY29kaW5nTGVuZ3RoKSxTOk8uc2xpY2UoRi5lbmNvZGluZ0xlbmd0aCl9KSxnKE8uUiYmTy5TLCJTaWduYXR1cmUgd2l0aG91dCBSIG9yIFMiKSxGLmlzUG9pbnQoTy5SKSYmKHRoaXMuX1I9Ty5SKSxPLlMgaW5zdGFuY2VvZiBJJiYodGhpcy5fUz1PLlMpLHRoaXMuX1JlbmNvZGVkPUFy''@;'; put 'put ''cmF5LmlzQXJyYXkoTy5SKT9PLlI6Ty5SZW5jb2RlZCx0aGlzLl9TZW5jb2RlZD1BcnJheS5pc0FycmF5KE8uUyk/Ty5TOk8uU2VuY29kZWR9QihQLCJTIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLlNlbmNvZGVkKCkpfSksQihQLCJSIixmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiB0aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuUmVuY29kZWQoKSl9KSxCKFAsIlJlbmNvZGVkIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMuUigpKX0pLEIoUCwiU2VuY29kZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5j''@;'; put 'put ''b2RlSW50KHRoaXMuUygpKX0pLFAucHJvdG90eXBlLnRvQnl0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5SZW5jb2RlZCgpLmNvbmNhdCh0aGlzLlNlbmNvZGVkKCkpfSxQLnByb3RvdHlwZS50b0hleD1mdW5jdGlvbigpe3JldHVybiB5LmVuY29kZSh0aGlzLnRvQnl0ZXMoKSwiaGV4Iiku''@;'; put 'put ''dG9VcHBlckNhc2UoKX0sdWUuZXhwb3J0cz1QfSwxMDM3OnVlPT57dWUuZXhwb3J0cz17ZG91Ymxlczp7c3RlcDo0LHBvaW50czpbWyJlNjBmY2U5M2I1OWU5ZWM1MzAxMWFhYmMyMWMyM2U5N2IyYTMxMzY5Yjg3YTVhZTljNDRlZTg5ZTJhNmRlYzBhIiwiZjdlMzUwNzM5OWU1OTU5MjlkYjk5''@;'; put 'put ''ZjM0ZjU3OTM3MTAxMjk2ODkxZTQ0ZDIzZjBiZTFmMzJjY2U2OTYxNjgyMSJdLFsiODI4MjI2MzIxMmM2MDlkOWVhMmE2ZTNlMTcyZGUyMzhkOGMzOWNhYmQ1YWMxY2ExMDY0NmUyM2ZkNWY1MTUwOCIsIjExZjhhODA5ODU1N2RmZTQ1ZTgyNTZlODMwYjYwYWNlNjJkNjEzYWMyZjdiMTdiZWQz''@;'; put 'put ''MWI2ZWFmZjZlMjZjYWYiXSxbIjE3NWUxNTlmNzI4Yjg2NWE3MmY5OWNjNmM2ZmM4NDZkZTBiOTM4MzNmZDIyMjJlZDczZmNlNWI1NTFlNWI3MzkiLCJkMzUwNmUwZDllM2M3OWViYTRlZjk3YTUxZmY3MWY1ZWFjYjU5NTVhZGQyNDM0NWM2ZWZhNmZmZWU5ZmVkNjk1Il0sWyIzNjNkOTBkNDQ3''@;'; put 'put ''YjAwYzljOTljZWFjMDViNjI2MmVlMDUzNDQxYzdlNTU1NTJmZmU1MjZiYWQ4ZjgzZmY0NjQwIiwiNGUyNzNhZGZjNzMyMjIxOTUzYjQ0NTM5N2YzMzYzMTQ1YjlhODkwMDgxOTllY2I2MjAwM2M3ZjNiZWU5ZGU5Il0sWyI4YjRiNWYxNjVkZjNjMmJlOGM2MjQ0YjViNzQ1NjM4ODQzZTRhNzgx''@;'; put 'put ''YTE1YmNkMWI2OWY3OWE1NWRmZmRmODBjIiwiNGFhZDBhNmY2OGQzMDhiNGIzZmJkNzgxM2FiMGRhMDRmOWUzMzY1NDYxNjJlZTU2YjNlZmYwYzY1ZmQ0ZmQzNiJdLFsiNzIzY2JhYTZlNWRiOTk2ZDZiZjc3MWMwMGJkNTQ4YzdiNzAwZGJmZmE2YzBlNzdiY2I2MTE1OTI1MjMyZmNkYSIsIjk2''@;'; put 'put ''ZTg2N2I1NTk1Y2M0OThhOTIxMTM3NDg4ODI0ZDZlMjY2MGEwNjUzNzc5NDk0ODAxZGMwNjlkOWViMzlmNWYiXSxbImVlYmZhNGQ0OTNiZWJmOThiYTVmZWVjODEyYzJkM2I1MDk0Nzk2MTIzN2E5MTk4MzlhNTMzZWNhMGU3ZGQ3ZmEiLCI1ZDlhOGNhMzk3MGVmMGYyNjllZTdlZGFmMTc4MDg5''@;'; put 'put ''ZDlhZTRjZGMzYTcxMWY3MTJkZGZkNGZkYWUxZGU4OTk5Il0sWyIxMDBmNDRkYTY5NmU3MTY3Mjc5MWQwYTA5YjdiZGU0NTlmMTIxNWEyOWIzYzAzYmZlZmQ3ODM1YjM5YTQ4ZGIwIiwiY2RkOWUxMzE5MmEwMGI3NzJlYzhmMzMwMGMwOTA2NjZiN2ZmNGExOGZmNTE5NWFjMGZiZDVjZDYyYmM2''@;'; put 'put ''NWEwOSJdLFsiZTEwMzFiZTI2MmM3ZWQxYjFkYzkyMjdhNGEwNGMwMTdhNzdmOGQ0NDY0ZjNiMzg1MmM4YWNkZTZlNTM0ZmQyZCIsIjlkNzA2MTkyODk0MDQwNWU2YmI2YTQxNzY1OTc1MzVhZjI5MmRkNDE5ZTFjZWQ3OWE0NGYxOGYyOTQ1NmEwMGQiXSxbImZlZWE2Y2FlNDZkNTViNTMwYWMy''@;'; put 'put ''ODM5ZjE0M2JkN2VjNWNmOGIyNjZhNDFkNmFmNTJkNWU2ODhkOTA5NDY5NmQiLCJlNTdjNmI2Yzk3ZGNlMWJhYjA2ZTRlMTJiZjNlY2Q1Yzk4MWM4OTU3Y2M0MTQ0MmQzMTU1ZGViZjE4MDkwMDg4Il0sWyJkYTY3YTkxZDkxMDQ5Y2RjYjM2N2JlNGJlNmZmY2EzY2ZlZWQ2NTdkODA4NTgzZGUz''@;'; put 'put ''M2ZhOTc4YmMxZWM2Y2IxIiwiOWJhY2FhMzU0ODE2NDJiYzQxZjQ2M2Y3ZWM5NzgwZTVkZWM3YWRjNTA4Zjc0MGExN2U5ZWE4ZTI3YTY4YmUxZCJdLFsiNTM5MDRmYWEwYjMzNGNkZGE2ZTAwMDkzNWVmMjIxNTFlYzA4ZDBmN2JiMTEwNjlmNTc1NDVjY2MxYTM3YjdjMCIsIjViYzA4N2QwYmM4''@;'; put 'put ''MDEwNmQ4OGM5ZWNjYWMyMGQzYzFjMTM5OTk5ODFlMTQ0MzQ2OTlkY2IwOTZiMDIyNzcxYzgiXSxbIjhlN2JjZDBiZDM1OTgzYTc3MTljY2E3NzY0Y2E5MDY3NzliNTNhMDQzYTliOGJjYWVmZjk1OWY0M2FkODYwNDciLCIxMGI3NzcwYjJhM2RhNGIzOTQwMzEwNDIwY2E5NTE0NTc5ZTg4ZTJl''@;'; put 'put ''NDdmZDY4YjNlYTEwMDQ3ZTg0NjAzNzJhIl0sWyIzODVlZWQzNGMxY2RmZjIxZTZkMDgxODY4OWI4MWJkZTcxYTdmNGYxODM5N2U2NjkwYTg0MWUxNTk5YzQzODYyIiwiMjgzYmViYzNlOGVhMjNmNTY3MDFkZTE5ZTllYmY0NTc2YjMwNGVlYzIwODZkYzhjYzA0NThmZTU1NDJlNTQ1MyJdLFsi''@;'; put 'put ''NmY5ZDliODAzZWNmMTkxNjM3YzczYTQ0MTNkZmExODBmZGRmODRhNTk0N2ZiYzljNjA2ZWQ4NmMzZmFjM2E3IiwiN2M4MGM2OGU2MDMwNTliYTY5YjhlMmEzMGU0NWM0ZDQ3ZWE0ZGQyZjVjMjgxMDAyZDg2ODkwNjAzYTg0MjE2MCJdLFsiMzMyMmQ0MDEyNDNjNGUyNTgyYTIxNDdjMTA0ZDZl''@;'; put 'put ''Y2JmNzc0ZDE2M2RiMGY1ZTUzMTNiN2UwZTc0MmQwZTZiZCIsIjU2ZTcwNzk3ZTk2NjRlZjViZmIwMTliYzRkZGFmOWI3MjgwNWY2M2VhMjg3M2FmNjI0ZjNhMmU5NmMyOGIyYTAiXSxbIjg1NjcyYzdkMmRlMGI3ZGEyYmQxNzcwZDg5NjY1ODY4NzQxYjNmOWFmNzY0MzM5NzcyMWQ3NGQyODEz''@;'; put 'put ''NGFiODMiLCI3YzQ4MWI5YjViNDNiMmViNjM3NDA0OWJmYTYyYzJlNWU3N2YxN2ZjYzUyOThmNDRjOGUzMDk0Zjc5MDMxM2E2Il0sWyI5NDhiZjgwOWIxOTg4YTQ2YjA2YzlmMTkxOTQxM2IxMGY5MjI2YzYwZjY2ODgzMmZmZDk1OWFmNjBjODJhMGEiLCI1M2E1NjI4NTZkY2I2NjQ2ZGM2Yjc0''@;'; put 'put ''YzVkMWMzNDE4YzZkNGRmZjA4Yzk3Y2QyYmVkNGNiN2Y4OGQ4YzhlNTg5Il0sWyI2MjYwY2U3ZjQ2MTgwMWMzNGYwNjdjZTBmMDI4NzNhOGYxYjBlNDRkZmM2OTc1MmFjY2VjZDgxOWYzOGZkOGU4IiwiYmMyZGE4MmI2ZmE1YjU3MWE3ZjA5MDQ5Nzc2YTFlZjdlY2QyOTIyMzgwNTFjMTk4YzFh''@;'; put 'put ''ODRlOTViMmI0YWUxNyJdLFsiZTUwMzdkZTBhZmMxZDhkNDNkODM0ODQxNGJiZjQxMDMwNDNlYzhmNTc1YmZkYzQzMjk1M2NjOGQyMDM3ZmEyZCIsIjQ1NzE1MzRiYWE5NGQzYjVmOWY5OGQwOWZiOTkwYmRkYmQ1ZjViMDNlYzQ4MWYxMGUwZTVkYzg0MWQ3NTViZGEiXSxbImUwNjM3MmIwZjRh''@;'; put 'put ''MjA3YWRmNWVhOTA1ZThmMTc3MWI0ZTdlOGRiZDFjNmE2YzViNzI1ODY2YTBhZTRmY2U3MjUiLCI3YTkwODk3NGJjZTE4Y2ZlMTJhMjdiYjJhZDVhNDg4Y2Q3NDg0YTc3ODcxMDQ4NzBiMjcwMzRmOTRlZWUzMWRkIl0sWyIyMTNjN2E3MTVjZDVkNDUzNThkMGJiZjlkYzBjZTAyMjA0YjEwYmRk''@;'; put 'put ''ZTJhM2Y1ODU0MGFkNjkwOGQwNTU5NzU0IiwiNGI2ZGFkMGI1YWU0NjI1MDcwMTNhZDA2MjQ1YmExOTBiYjQ4NTBmNWYzNmE3ZWVkZGZmMmMyNzUzNGI0NThmMiJdLFsiNGU3YzI3MmE3YWY0YjM0ZThkYmI5MzUyYTU0MTlhODdlMjgzOGM3MGFkYzYyY2RkZjBjYzNhM2IwOGZiZDUzYyIsIjE3''@;'; put 'put ''NzQ5Yzc2NmM5ZDBiMThlMTZmZDA5ZjZkZWY2ODFiNTMwYjk2MTRiZmY3ZGQzM2UwYjM5NDE4MTdkY2FhZTYiXSxbImZlYTc0ZTNkYmU3NzhiMWIxMGYyMzhhZDYxNjg2YWE1Yzc2ZTNkYjJiZTQzMDU3NjMyNDI3ZTI4NDBmYjI3YjYiLCI2ZTA1NjhkYjliMGIxMzI5N2NmNjc0ZGVjY2I2YWY5''@;'; put 'put ''MzEyNmI1OTZiOTczZjdiNzc3MDFkM2RiN2YyM2NiOTZmIl0sWyI3NmU2NDExM2Y2NzdjZjBlMTBhMjU3MGQ1OTk5NjhkMzE1NDRlMTc5Yjc2MDQzMjk1MmMwMmE0NDE3YmRkZTM5IiwiYzkwZGRmOGRlZTRlOTVjZjU3NzA2NmQ3MDY4MWYwZDM1ZTJhMzNkMmI1NmQyMDMyYjRiMTc1MmQxOTAx''@;'; put 'put ''YWMwMSJdLFsiYzczOGM1NmIwM2IyYWJlMWU4MjgxYmFhNzQzZjhmOWE4ZjdjYzY0M2RmMjZjYmVlM2FiMTUwMjQyYmNiYjg5MSIsIjg5M2ZiNTc4OTUxYWQyNTM3ZjcxOGYyZWFjYmZiYmJiODIzMTRlZWY3ODgwY2ZlOTE3ZTczNWQ5Njk5YTg0YzMiXSxbImQ4OTU2MjY1NDhiNjViODFlMjY0''@;'; put 'put ''Yzc2MzdjOTcyODc3ZDFkNzJlNWYzYTkyNTAxNDM3MmU5ZjY1ODhmNmMxNGIiLCJmZWJmYWEzOGYyYmM3ZWFlNzI4ZWM2MDgxOGMzNDBlYjAzNDI4ZDYzMmJiMDY3ZTE3OTM2M2VkNzVkN2Q5OTFmIl0sWyJiOGRhOTQwMzJhOTU3NTE4ZWIwZjY0MzM1NzFlODc2MWNlZmZjNzM2OTNlODRlZGQ0''@;'; put 'put ''OTE1MGE1NjRmNjc2ZTAzIiwiMjgwNGRmYTQ0ODA1YTFlNGQ3Yzk5Y2M5NzYyODA4YjA5MmNjNTg0ZDk1ZmYzYjUxMTQ4OGU0ZTc0ZWZkZjZlNyJdLFsiZTgwZmVhMTQ0NDFmYjMzYTdkOGFkYWI5NDc1ZDdmYWIyMDE5ZWZmYjUxNTZhNzkyZjFhMTE3NzhlM2MwZGY1ZCIsImVlZDFkZTdmNjM4''@;'; put 'put ''ZTAwNzcxZTg5NzY4Y2EzY2E5NDQ3MmQxNTVlODBhZjMyMmVhOWZjYjQyOTFiNmFjOWVjNzgiXSxbImEzMDE2OTdiZGZjZDcwNDMxM2JhNDhlNTFkNTY3NTQzZjJhMTgyMDMxZWZkNjkxNWRkYzA3YmJjYzRlMTYwNzAiLCI3MzcwZjkxY2ZiNjdlNGY1MDgxODA5ZmEyNWQ0MGY5YjE3MzVkYmY3''@;'; put 'put ''YzBhMTFhMTMwYzBkMWEwNDFlMTc3ZWExIl0sWyI5MGFkODViMzg5ZDZiOTM2NDYzZjlkMDUxMjY3OGRlMjA4Y2MzMzBiMTEzMDdmZmZhYjdhYzYzZTNmYjA0ZWQ0IiwiZTUwN2EzNjIwYTM4MjYxYWZmZGNiZDk0MjcyMjJiODM5YWVmYWJlMTU4Mjg5NGQ5OTFkNGQ0OGNiNmVmMTUwIl0sWyI4''@;'; put 'put ''ZjY4YjlkMmY2M2I1ZjMzOTIzOWMxYWQ5ODFmMTYyZWU4OGM1Njc4NzIzZWEzMzUxYjdiNDQ0YzllYzRjMGRhIiwiNjYyYTlmMmRiYTA2Mzk4NmRlMWQ5MGMyYjZiZTIxNWRiYmVhMmNmZTk1NTEwYmZkZjIzY2JmNzk1MDFmZmY4MiJdLFsiZTRmM2ZiMDE3NmFmODVkNjVmZjk5ZmY5MTk4YzM2''@;'; put 'put ''MDkxZjQ4ZTg2NTAzNjgxZTNlNjY4NmZkNTA1MzIzMWUxMSIsIjFlNjM2MzNhZDBlZjRmMWMxNjYxYTZkMGVhMDJiNzI4NmNjN2U3NGVjOTUxZDFjOTgyMmMzODU3NmZlYjczYmMiXSxbIjhjMDBmYTliMThlYmYzMzFlYjk2MTUzN2E0NWE0MjY2YzcwMzRmMmYwZDRlMWQwNzE2ZmI2ZWFlMjBl''@;'; put 'put ''YWUyOWUiLCJlZmE0NzI2N2ZlYTUyMWExYTlkYzM0M2EzNzM2Yzk3NGMyZmFkYWZhODFlMzZjNTRlN2QyYTRjNjY3MDI0MTRiIl0sWyJlN2EyNmNlNjlkZDQ4MjlmM2UxMGNlYzBhOWU5OGVkMzE0M2QwODRmMzA4YjkyYzA5OTdmZGRmYzYwY2IzZTQxIiwiMmE3NThlMzAwZmE3OTg0YjQ3MWIw''@;'; put 'put ''MDZhMWFhZmJiMThkMGE2YjJjMDQyMGU4M2UyMGU4YTk0MjFjZjJjZmQ1MSJdLFsiYjY0NTllMGVlMzY2MmVjOGQyMzU0MGMyMjNiY2JkYzU3MWNiY2I5NjdkNzk0MjRmM2NmMjllYjNkZTZiODBlZiIsIjY3Yzg3NmQwNmYzZTA2ZGUxZGFkZjE2ZTU2NjFkYjNjNGIzYWU2ZDQ4ZTM1YjJmZjMw''@;'; put 'put ''YmYwYjYxYTcxYmE0NSJdLFsiZDY4YTgwYzgyODBiYjg0MDc5MzIzNGFhMTE4ZjA2MjMxZDZmMWZjNjdlNzNjNWE1ZGVkYTBmNWI0OTY5NDNlOCIsImRiOGJhOWZmZjRiNTg2ZDAwYzRiMWY5MTc3YjBlMjhiNWIwZTdiOGY3ODQ1Mjk1YTI5NGM4NDI2NmIxMzMxMjAiXSxbIjMyNGFlZDdkZjY1''@;'; put 'put ''YzgwNDI1MmRjMDI3MDkwN2EzMGIwOTYxMmFlYjk3MzQ0OWNlYTQwOTU5ODBmYzI4ZDNkNWQiLCI2NDhhMzY1Nzc0YjYxZjJmZjEzMGMwYzM1YWVjMWY0ZjE5MjEzYjBjN2UzMzI4NDM5NjcyMjRhZjk2YWI3Yzg0Il0sWyI0ZGY5YzE0OTE5Y2RlNjFmNmQ1MWRmZGJlNWZlZTVkY2VlYzQxNDNi''@;'; put 'put ''YThkMWNhODg4ZThiZDM3M2ZkMDU0Yzk2IiwiMzVlYzUxMDkyZDg3MjgwNTA5NzRjMjNhMWQ4NWQ0YjVkNTA2Y2RjMjg4NDkwMTkyZWJhYzA2Y2FkMTBkNWQiXSxbIjljMzkxOWE4NGE0NzQ4NzBmYWVkOGE5YzFjYzY2MDIxNTIzNDg5MDU0ZDdmMDMwOGNiZmM5OWM4YWMxZjk4Y2QiLCJkZGI4''@;'; put 'put ''NGYwZjRhNGRkZDU3NTg0ZjA0NGJmMjYwZTY0MTkwNTMyNmY3NmM2NGM4ZTZiZTdlNWUwM2Q0ZmM1OTlkIl0sWyI2MDU3MTcwYjFkZDEyZmRmOGRlMDVmMjgxZDhlMDZiYjkxZTE0OTNhOGI5MWQ0Y2M1YTIxMzgyMTIwYTk1OWU1IiwiOWExYWYwYjI2YTZhNDgwN2FkZDlhMmRhZjcxZGYyNjI0''@;'; put 'put ''NjUxNTJiYzNlZTI0YzY1ZTg5OWJlOTMyMzg1YTJhOCJdLFsiYTU3NmRmOGUyM2EwODQxMTQyMTQzOWE0NTE4ZGEzMTg4MGNlZjBmYmE3ZDRkZjEyYjFhNjk3M2VlY2I5NDI2NiIsIjQwYTZiZjIwZTc2NjQwYjJjOTJiOTdhZmU1OGNkODJjNDMyZTEwYTdmNTE0ZDlmM2VlOGJlMTFhZTFiMjhl''@;'; put 'put ''YzgiXSxbIjc3NzhhNzhjMjhkZWMzZTMwYTA1ZmU5NjI5ZGU4YzM4YmIzMGQxZjVjZjlhM2EyMDhmNzYzODg5YmU1OGFkNzEiLCIzNDYyNmQ5YWI1YTViMjJmZjcwOThlMTJmMmZmNTgwMDg3YjM4NDExZmYyNGFjNTYzYjUxM2ZjMWZkOWY0M2FjIl0sWyI5Mjg5NTVlZTYzN2E4NDQ2MzcyOWZk''@;'; put 'put ''MzBlN2FmZDJlZDVmOTYyNzRlNWFkN2U1Y2IwOWVkYTljMDZkOTAzYWMiLCJjMjU2MjEwMDNkM2Y0MmE4MjdiNzhhMTMwOTNhOTVlZWFjM2QyNmVmYThhOGQ4M2ZjNTE4MGU5MzViY2QwOTFmIl0sWyI4NWQwZmVmM2VjNmRiMTA5Mzk5MDY0ZjNhMGUzYjI4NTU2NDViNGE5MDdhZDM1NDUyN2Fh''@;'; put 'put ''ZTc1MTYzZDgyNzUxIiwiMWYwMzY0ODQxM2EzOGMwYmUyOWQ0OTZlNTgyY2Y1NjYzZTg3NTFlOTY4NzczMzE1ODJjMjM3YTI0ZWIxZjk2MiJdLFsiZmYyYjBkY2U5N2VlY2U5N2MxYzliNjA0MTc5OGI4NWRmZGZiNmQ4ODgyZGEyMDMwOGY1NDA0ODI0NTI2MDg3ZSIsIjQ5M2QxM2ZlZjUyNGJh''@;'; put 'put ''MTg4YWY0YzRkYzU0ZDA3OTM2YzdiN2VkNmZiOTBlMmNlYjJjOTUxZTAxZjBjMjk5MDciXSxbIjgyN2ZiYmU0YjFlODgwZWE5ZWQyYjJlNjMwMWIyMTJiNTdmMWVlMTQ4Y2Q2ZGQyODc4MGU1ZTJjZjg1NmUyNDEiLCJjNjBmOWM5MjNjNzI3YjBiNzFiZWYyYzY3ZDFkMTI2ODdmZjdhNjMxODY5''@;'; put 'put ''MDMxNjZkNjA1YjY4YmFlYzI5M2VjIl0sWyJlYWE2NDlmMjFmNTFiZGJhZTdiZTRhZTM0Y2U2ZTUyMTdhNThmZGNlN2Y0N2Y5YWE3ZjNiNThmYTIxMjBlMmIzIiwiYmUzMjc5ZWQ1YmJiYjAzYWM2OWE4MGY4OTg3OWFhNWEwMWE2Yjk2NWYxM2Y3ZTU5ZDQ3YTUzMDViYTVhZDkzZCJdLFsiZTRh''@;'; put 'put ''NDJkNDNjNWNmMTY5ZDkzOTFkZjZkZWNmNDJlZTU0MWI2ZDhmMGM5YTEzNzQwMWUyMzYzMmRkYTM0ZDI0ZiIsIjRkOWY5MmU3MTZkMWM3MzUyNmZjOTljY2ZiOGFkMzRjZTg4NmVlZGZhOGQ4ZTRmMTNhN2Y3MTMxZGViYTk0MTQiXSxbIjFlYzgwZmVmMzYwY2JkZDk1NDE2MGZhZGFiMzUyYjZi''@;'; put 'put ''OTJiNTM1NzZhODhmZWE0OTQ3MTczYjlkNDMwMGJmMTkiLCJhZWVmZTkzNzU2YjUzNDBkMmYzYTQ5NThhN2FiYmY1ZTAxNDZlNzdmNjI5NWEwN2I2NzFjZGMxY2MxMDdjZWZkIl0sWyIxNDZhNzc4YzA0NjcwYzJmOTFiMDBhZjQ2ODBkZmE4YmNlMzQ5MDcxN2Q1OGJhODg5ZGRiNTkyODM2NjY0''@;'; put 'put ''MmJlIiwiYjMxOGUwZWMzMzU0MDI4YWRkNjY5ODI3ZjlkNGIyODcwYWFhOTcxZDJmN2U1ZWQxZDBiMjk3NDgzZDgzZWZkMCJdLFsiZmE1MGMwZjYxZDIyZTVmMDdlM2FjZWJiMWFhMDdiMTI4ZDAwMTIyMDlhMjhiOTc3NmQ3NmE4NzkzMTgwZWVmOSIsIjZiODRjNjkyMjM5N2ViYTliNzJjZDI4''@;'; put 'put ''NzIyODFhNjhhNWU2ODMyOTNhNTdhMjEzYjM4Y2Q4ZDdkM2Y0ZjI4MTEiXSxbImRhMWQ2MWQwY2E3MjFhMTFiMWE1YmY2YjdkODhlODQyMWEyODhhYjVkNWJiYTUyMjBlNTNkMzJiNWYwNjdlYzIiLCI4MTU3ZjU1YTdjOTkzMDZjNzljMDc2NjE2MWM5MWUyOTY2YTczODk5ZDI3OWI0OGE2NTVm''@;'; put 'put ''YmEwZjFhZDgzNmYxIl0sWyJhOGUyODJmZjBjOTcwNjkwNzIxNWZmOThlOGZkNDE2NjE1MzExZGUwNDQ2ZjFlMDYyYTczYjA2MTBkMDY0ZTEzIiwiN2Y5NzM1NWI4ZGI4MWMwOWFiZmI3ZjNjNWIyNTE1ODg4YjY3OWEzZTUwZGQ2YmQ2Y2VmN2M3MzExMWY0Y2MwYyJdLFsiMTc0YTUzYjljOWEy''@;'; put 'put ''ODU4NzJkMzllNTZlNjkxM2NhYjE1ZDU5YjFmYTUxMjUwOGMwMjJmMzgyZGU4MzE5NDk3YyIsImNjYzlkYzM3YWJmYzljMTY1N2I0MTU1ZjJjNDdmOWU2NjQ2YjNhMWQ4Y2I5ODU0MzgzZGExM2FjMDc5YWZhNzMiXSxbIjk1OTM5Njk4MTk0Mzc4NWMzZDNlNTdlZGY1MDE4Y2RiZTAzOWU3MzBl''@;'; put 'put ''NDkxOGIzZDg4NGZkZmYwOTQ3NWI3YmEiLCIyZTdlNTUyODg4YzMzMWRkOGJhMDM4NmE0YjljZDY4NDljNjUzZjY0Yzg3MDkzODVlOWI4YWJmODc1MjRmMmZkIl0sWyJkMmE2M2E1MGFlNDAxZTU2ZDY0NWExMTUzYjEwOWE4ZmNjYTBhNDNkNTYxZmJhMmRiYjUxMzQwYzlkODJiMTUxIiwiZTgy''@;'; put 'put ''ZDg2ZmI2NDQzZmNiNzU2NWFlZTU4YjI5NDgyMjBhNzBmNzUwYWY0ODRjYTUyZDQxNDIxNzRkY2Y4OTQwNSJdLFsiNjQ1ODdlMjMzNTQ3MWViODkwZWU3ODk2ZDdjZmRjODY2YmFjYmRiZDM4MzkzMTdiMzQzNmY5YjQ1NjE3ZTA3MyIsImQ5OWZjZGQ1YmY2OTAyZTJhZTk2ZGQ2NDQ3YzI5OWEx''@;'; put 'put ''ODViOTBhMzkxMzNhZWFiMzU4Mjk5ZTVlOWZhZjY1ODkiXSxbIjg0ODFiZGUwZTRlNGQ4ODViM2E1NDZkM2U1NDlkZTA0MmYwYWE2Y2VhMjUwZTdmZDM1OGQ2Yzg2ZGQ0NWU0NTgiLCIzOGVlN2I4Y2JhNTQwNGRkODRhMjViZjM5Y2VjYjJjYTkwMGE3OWM0MmIyNjJlNTU2ZDY0YjFiNTk3Nzkw''@;'; put 'put ''NTdlIl0sWyIxMzQ2NGE1N2E3ODEwMmFhNjJiNjk3OWFlODE3ZjQ2MzdmZmNmZWQzYzRiMWNlMzBiY2Q2MzAzZjZjYWY2NjZiIiwiNjliZTE1OTAwNDYxNDU4MGVmN2U0MzM0NTNjY2IwY2E0OGYzMDBhODFkMDk0MmUxM2Y0OTVhOTA3ZjZlY2MyNyJdLFsiYmM0YTlkZjViNzEzZmUyZTlhZWY0''@;'; put 'put ''MzBiY2MxZGM5N2EwY2Q5Y2NlZGUyZjI4NTg4Y2FkYTNhMGQyZDgzZjM2NiIsImQzYTgxY2E2ZTc4NWMwNjM4MzkzN2FkZjRiNzk4Y2FhNmU4YTlmYmZhNTQ3YjE2ZDc1OGQ2NjY1ODFmMzNjMSJdLFsiOGMyOGE5N2JmODI5OGJjMGQyM2Q4Yzc0OTQ1MmEzMmU2OTRiNjVlMzBhOTQ3MmEzOTU0''@;'; put 'put ''YWIzMGZlNTMyNGNhYSIsIjQwYTMwNDYzYTMzMDUxOTMzNzhmZWRmMzFmN2NjMGViN2FlNzg0ZjA0NTFjYjk0NTllNzFkYzczY2JlZjk0ODIiXSxbIjhlYTk2NjYxMzk1MjdhOGMxZGQ5NGNlNGYwNzFmZDIzYzhiMzUwYzVhNGJiMzM3NDhjNGJhMTExZmFjY2FlMCIsIjYyMGVmYWJiYzhlZTI3''@;'; put 'put ''ODJlMjRlN2MwY2ZiOTVjNWQ3MzViNzgzYmU5Y2YwZjhlOTU1YWYzNGEzMGU2MmI5NDUiXSxbImRkMzYyNWZhZWY1YmEwNjA3NDY2OTcxNmJiZDM3ODhkODliZGRlODE1OTU5OTY4MDkyZjc2Y2M0ZWI5YTk3ODciLCI3YTE4OGZhMzUyMGUzMGQ0NjFkYTI1MDEwNDU3MzFjYTk0MTQ2MTk4Mjg4''@;'; put 'put ''MzM5NTkzN2Y2OGQwMGM2NDRhNTczIl0sWyJmNzEwZDc5ZDllYjk2MjI5N2U0ZjYyMzJiNDBlOGY3ZmViMmJjNjM4MTQ2MTRkNjkyYzEyZGU3NTI0MDgyMjFlIiwiZWE5OGU2NzIzMmQzYjMyOTVkM2I1MzU1MzIxMTVjY2FjODYxMmM3MjE4NTE2MTc1MjZhZTQ3YTljNzdiZmM4MiJdXX0sbmFm''@;'; put 'put ''Ont3bmQ6Nyxwb2ludHM6W1siZjkzMDhhMDE5MjU4YzMxMDQ5MzQ0Zjg1Zjg5ZDUyMjliNTMxYzg0NTgzNmY5OWIwODYwMWYxMTNiY2UwMzZmOSIsIjM4OGY3YjBmNjMyZGU4MTQwZmUzMzdlNjJhMzdmMzU2NjUwMGE5OTkzNGMyMjMxYjZjYjlmZDc1ODRiOGU2NzIiXSxbIjJmOGJkZTRkMWEw''@;'; put 'put ''NzIwOTM1NWI0YTcyNTBhNWM1MTI4ZTg4Yjg0YmRkYzYxOWFiN2NiYThkNTY5YjI0MGVmZTQiLCJkOGFjMjIyNjM2ZTVlM2Q2ZDRkYmE5ZGRhNmM5YzQyNmY3ODgyNzFiYWIwZDY4NDBkY2E4N2QzYWE2YWM2MmQ2Il0sWyI1Y2JkZjA2NDZlNWRiNGVhYTM5OGYzNjVmMmVhN2EwZTNkNDE5Yjdl''@;'; put 'put ''MDMzMGUzOWNlOTJiZGRlZGNhYzRmOWJjIiwiNmFlYmNhNDBiYTI1NTk2MGEzMTc4ZDZkODYxYTU0ZGJhODEzZDBiODEzZmRlN2I1YTUwODI2MjgwODcyNjRkYSJdLFsiYWNkNDg0ZTJmMGM3ZjY1MzA5YWQxNzhhOWY1NTlhYmRlMDk3OTY5NzRjNTdlNzE0YzM1ZjExMGRmYzI3Y2NiZSIsImNj''@;'; put 'put ''MzM4OTIxYjBhN2Q5ZmQ2NDM4MDk3MTc2M2I2MWU5YWRkODg4YTQzNzVmOGUwZjA1Y2MyNjJhYzY0ZjljMzciXSxbIjc3NGFlN2Y4NThhOTQxMWU1ZWY0MjQ2YjcwYzY1YWFjNTY0OTk4MGJlNWMxNzg5MWJiZWMxNzg5NWRhMDA4Y2IiLCJkOTg0YTAzMmViNmI1ZTE5MDI0M2RkNTZkN2I3YjM2''@;'; put 'put ''NTM3MmRiMWUyZGZmOWQ2YTgzMDFkNzRjOWM5NTNjNjFiIl0sWyJmMjg3NzNjMmQ5NzUyODhiYzdkMWQyMDVjMzc0ODY1MWIwNzVmYmM2NjEwZTU4Y2RkZWVkZGY4ZjE5NDA1YWE4IiwiYWIwOTAyZThkODgwYTg5NzU4MjEyZWI2NWNkYWY0NzNhMWEwNmRhNTIxZmE5MWYyOWI1Y2I1MmRiMDNl''@;'; put 'put ''ZDgxIl0sWyJkNzkyNGQ0ZjdkNDNlYTk2NWE0NjVhZTMwOTVmZjQxMTMxZTU5NDZmM2M4NWY3OWU0NGFkYmNmOGUyN2UwODBlIiwiNTgxZTI4NzJhODZjNzJhNjgzODQyZWMyMjhjYzZkZWZlYTQwYWYyYmQ4OTZkM2E1YzUwNGRjOWZmNmEyNmI1OCJdLFsiZGVmZGVhNGNkYjY3Nzc1MGE0MjBm''@;'; put 'put ''ZWU4MDdlYWNmMjFlYjk4OThhZTc5Yjk3Njg3NjZlNGZhYTA0YTJkNGEzNCIsIjQyMTFhYjA2OTQ2MzUxNjhlOTk3YjBlYWQyYTkzZGFlY2VkMWY0YTA0YTk1YzBmNmNmYjE5OWY2OWU1NmViNzciXSxbIjJiNGVhMGE3OTdhNDQzZDI5M2VmNWNmZjQ0NGY0OTc5ZjA2YWNmZWJkN2U4NmQyNzc0''@;'; put 'put ''NzU2NTYxMzgzODViNmMiLCI4NWU4OWJjMDM3OTQ1ZDkzYjM0MzA4M2I1YTFjODYxMzFhMDFmNjBjNTAyNjk3NjNiNTcwYzg1NGU1YzA5YjdhIl0sWyIzNTJiYmY0YTRjZGQxMjU2NGY5M2ZhMzMyY2UzMzMzMDFkOWFkNDAyNzFmODEwNzE4MTM0MGFlZjI1YmU1OWQ1IiwiMzIxZWI0MDc1MzQ4''@;'; put 'put ''ZjUzNGQ1OWMxODI1OWRkYTNlMWY0YTFiM2IyZTcxYjEwMzljNjdiZDNkOGJjZjgxOTk4YyJdLFsiMmZhMjEwNGQ2YjM4ZDExYjAyMzAwMTA1NTk4NzkxMjRlNDJhYjhkZmVmZjVmZjI5ZGM5Y2RhZGQ0ZWNhY2MzZiIsIjJkZTEwNjgyOTVkZDg2NWI2NDU2OTMzNWJkNWRkODAxODFkNzBlY2Zj''@;'; put 'put ''ODgyNjQ4NDIzYmE3NmI1MzJiN2Q2NyJdLFsiOTI0ODI3OWIwOWI0ZDY4ZGFiMjFhOWIwNjZlZGRhODMyNjNjM2Q4NGUwOTU3MmUyNjljYTBjZDdmNTQ1MzcxNCIsIjczMDE2ZjdiZjIzNGFhZGU1ZDFhYTcxYmRlYTJiMWZmM2ZjMGRlMmE4ODc5MTJmZmU1NGEzMmNlOTdjYjM0MDIiXSxbImRh''@;'; put 'put ''ZWQ0ZjJiZTNhOGJmMjc4ZTcwMTMyZmIwYmViNzUyMmY1NzBlMTQ0YmY2MTVjMDdlOTk2ZDQ0M2RlZTg3MjkiLCJhNjlkY2U0YTdkNmM5OGU4ZDRhMWFjYTg3ZWY4ZDcwMDNmODNjMjMwZjNhZmE3MjZhYjQwZTUyMjkwYmUxYzU1Il0sWyJjNDRkMTJjNzA2NWQ4MTJlOGFjZjI4ZDdjYmIxOWY5''@;'; put 'put ''MDExZWNkOWU5ZmRmMjgxYjBlNmEzYjVlODdkMjJlN2RiIiwiMjExOWE0NjBjZTMyNmNkYzc2YzQ1OTI2Yzk4MmZkYWMwZTEwNmU4NjFlZGY2MWM1YTAzOTA2M2YwZTBlNjQ4MiJdLFsiNmEyNDViZjZkYzY5ODUwNGM4OWEyMGNmZGVkNjA4NTMxNTJiNjk1MzM2YzI4MDYzYjYxYzY1Y2JkMjY5''@;'; put 'put ''ZTZiNCIsImUwMjJjZjQyYzJiZDRhNzA4YjNmNTEyNmYxNmEyNGFkOGIzM2JhNDhkMDQyM2I2ZWZkNWU2MzQ4MTAwZDhhODIiXSxbIjE2OTdmZmE2ZmQ5ZGU2MjdjMDc3ZTNkMmZlNTQxMDg0Y2UxMzMwMGIwYmVjMTE0NmY5NWFlNTdmMGQwYmQ2YTUiLCJiOWMzOThmMTg2ODA2ZjVkMjc1NjE1''@;'; put 'put ''MDZlNDU1NzQzM2EyY2YxNTAwOWU0OThhZTdhZGVlOWQ2M2QwMWIyMzk2Il0sWyI2MDViZGIwMTk5ODE3MThiOTg2ZDBmMDdlODM0Y2IwZDlkZWI4MzYwZmZiN2Y2MWRmOTgyMzQ1ZWYyN2E3NDc5IiwiMjk3MmQyZGU0ZjhkMjA2ODFhNzhkOTNlYzk2ZmUyM2MyNmJmYWU4NGZiMTRkYjQzYjAx''@;'; put 'put ''ZTFlOTA1NmI4YzQ5Il0sWyI2MmQxNGRhYjQxNTBiZjQ5NzQwMmZkYzQ1YTIxNWUxMGRjYjAxYzM1NDk1OWIxMGNmZTMxYzdlOWQ4N2ZmMzNkIiwiODBmYzA2YmQ4Y2M1YjAxMDk4MDg4YTE5NTBlZWQwZGIwMWFhMTMyOTY3YWI0NzIyMzVmNTY0MjQ4M2IyNWVhZiJdLFsiODBjNjBhZDAwNDBm''@;'; put 'put ''MjdkYWRlNWI0YjA2YzQwOGU1NmIyYzUwZTlmNTZiOWI4YjQyNWU1NTVjMmY4NjMwOGI2ZiIsIjFjMzgzMDNmMWNjNWMzMGYyNmU2NmJhZDdmZTcyZjcwYTY1ZWVkNGNiZTcwMjRlYjFhYTAxZjU2NDMwYmQ1N2EiXSxbIjdhOTM3NWFkNjE2N2FkNTRhYTc0YzYzNDhjYzU0ZDM0NGNjNWRjOTQ4''@;'; put 'put ''N2Q4NDcwNDlkNWVhYmIwZmEwM2M4ZmIiLCJkMGUzZmE5ZWNhODcyNjkwOTU1OWUwZDc5MjY5MDQ2YmRjNTllYTEwYzcwY2UyYjAyZDQ5OWVjMjI0ZGM3ZjciXSxbImQ1MjhlY2Q5YjY5NmI1NGM5MDdhOWVkMDQ1NDQ3YTc5YmI0MDhlYzM5YjY4ZGY1MDRiYjUxZjQ1OWJjM2ZmYzkiLCJlZWNm''@;'; put 'put ''NDEyNTMxMzZlNWY5OTk2NmYyMTg4MWZkNjU2ZWJjNDM0NTQwNWM1MjBkYmMwNjM0NjViNTIxNDA5OTMzIl0sWyI0OTM3MGE0YjVmNDM0MTJlYTI1ZjUxNGU4ZWNkYWQwNTI2NjExNWU0YTdlY2IxMzg3MjMxODA4ZjhiNDU5NjMiLCI3NThmM2Y0MWFmZDZlZDQyOGIzMDgxYjA1MTJmZDYyYTU0''@;'; put 'put ''YzNmM2FmYmI1YjY3NjRiNjUzMDUyYTEyOTQ5YzlhIl0sWyI3N2YyMzA5MzZlZTg4Y2JiZDczZGY5MzBkNjQ3MDJlZjg4MWQ4MTFlMGUxNDk4ZTJmMWMxM2ViMWZjMzQ1ZDc0IiwiOTU4ZWY0MmE3ODg2YjY0MDBhMDgyNjZlOWJhMWIzNzg5NmM5NTMzMGQ5NzA3N2NiYmU4ZWIzYzc2NzFjNjBk''@;'; put 'put ''NiJdLFsiZjJkYWM5OTFjYzRjZTRiOWVhNDQ4ODdlNWM3YzBiY2U1OGM4MDA3NGFiOWQ0ZGJhZWIyODUzMWI3NzM5ZjUzMCIsImUwZGVkYzliM2IyZjhkYWQ0ZGExZjMyZGVjMjUzMWRmOWViNWZiZWIwNTk4ZTRmZDFhMTE3ZGJhNzAzYTNjMzciXSxbIjQ2M2IzZDlmNjYyNjIxZmIxYjRiZThm''@;'; put 'put ''YmJlMjUyMDEyNWEyMTZjZGZjOWRhZTNkZWJjYmE0ODUwYzY5MGQ0NWIiLCI1ZWQ0MzBkNzhjMjk2YzM1NDMxMTQzMDZkZDg2MjJkN2M2MjJlMjdjOTcwYTFkZTMxY2IzNzdiMDFhZjczMDdlIl0sWyJmMTZmODA0MjQ0ZTQ2ZTJhMDkyMzJkNGFmZjNiNTk5NzZiOThmYWMxNDMyOGEyZDFhMzI0''@;'; put 'put ''OTZiNDk5OThmMjQ3IiwiY2VkYWJkOWI4MjIwM2Y3ZTEzZDIwNmZjZGY0ZTMzZDkyYTZjNTNjMjZlNWNjZTI2ZDY1Nzk5NjJjNGUzMWRmNiJdLFsiY2FmNzU0MjcyZGM4NDU2M2IwMzUyYjdhMTQzMTFhZjU1ZDI0NTMxNWFjZTI3YzY1MzY5ZTE1ZjcxNTFkNDFkMSIsImNiNDc0NjYwZWYzNWY1''@;'; put 'put ''ZjJhNDFiNjQzZmE1ZTQ2MDU3NWY0ZmE5Yjc5NjIyMzJhNWMzMmY5MDgzMThhMDQ0NzYiXSxbIjI2MDBjYTRiMjgyY2I5ODZmODVkMGYxNzA5OTc5ZDhiNDRhMDljMDdjYjg2ZDdjMTI0NDk3YmM4NmYwODIxMjAiLCI0MTE5Yjg4NzUzYzE1YmQ2YTY5M2IwM2ZjZGRiYjQ1ZDVhYzZiZTc0YWI1''@;'; put 'put ''ZjBlZjQ0YjBiZTk0NzVhN2U0YjQwIl0sWyI3NjM1Y2E3MmQ3ZTg0MzJjMzM4ZWM1M2NkMTIyMjBiYzAxYzQ4Njg1ZTI0ZjdkYzhjNjAyYTc3NDY5OThlNDM1IiwiOTFiNjQ5NjA5NDg5ZDYxM2QxZDVlNTkwZjc4ZTZkNzRlY2ZjMDYxZDU3MDQ4YmFkOWU3NmYzMDJjNWI5YzYxIl0sWyI3NTRl''@;'; put 'put ''MzIzOWYzMjU1NzBjZGJiZjRhODdkZWVlOGE2NmI3ZjJiMzM0NzlkNDY4ZmJjMWE1MDc0M2JmNTZjYzE4IiwiNjczZmI4NmU1YmRhMzBmYjNjZDBlZDMwNGVhNDlhMDIzZWUzM2QwMTk3YTY5NWQwYzVkOTgwOTNjNTM2NjgzIl0sWyJlM2U2YmQxMDcxYTFlOTZhZmY1Nzg1OWM4MmQ1NzBmMDMz''@;'; put 'put ''MDgwMDY2MWQxYzk1MmY5ZmUyNjk0NjkxZDliOWU4IiwiNTljOWUwYmJhMzk0ZTc2ZjQwYzBhYTU4Mzc5YTNjYjZhNWEyMjgzOTkzZTkwYzQxNjcwMDJhZjQ5MjBlMzdmNSJdLFsiMTg2YjQ4M2QwNTZhMDMzODI2YWU3M2Q4OGY3MzI5ODVjNGNjYjFmMzJiYTM1ZjRiNGNjNDdmZGNmMDRhYTZl''@;'; put 'put ''YiIsIjNiOTUyZDMyYzY3Y2Y3N2UyZTE3NDQ2ZTIwNDE4MGFiMjFmYjgwOTA4OTUxMzhiNGE0YTc5N2Y4NmU4MDg4OGIiXSxbImRmOWQ3MGE2Yjk4NzZjZTU0NGM5ODU2MWY0YmU0ZjcyNTQ0MmU2ZDJiNzM3ZDljOTFhODMyMTcyNGNlMDk2M2YiLCI1NWViMmRhZmQ4NGQ2Y2NkNWY4NjJiNzg1''@;'; put 'put ''ZGMzOWQ0YWIxNTcyMjI3MjBlZjlkYTIxN2I4YzQ1Y2YyYmEyNDE3Il0sWyI1ZWRkNWNjMjNjNTFlODdhNDk3Y2E4MTVkNWRjZTBmOGFiNTI1NTRmODQ5ZWQ4OTk1ZGU2NGM1ZjM0Y2U3MTQzIiwiZWZhZTljOGRiYzE0MTMwNjYxZThjZWMwMzBjODlhZDBjMTNjNjZjMGQxN2EyOTA1Y2RjNzA2''@;'; put 'put ''YWI3Mzk5YTg2OCJdLFsiMjkwNzk4YzJiNjQ3NjgzMGRhMTJmZTAyMjg3ZTllNzc3YWEzZmJhMWMzNTViMTdhNzIyZDM2MmY4NDYxNGZiYSIsImUzOGRhNzZkY2Q0NDA2MjE5ODhkMDBiY2Y3OWFmMjVkNWIyOWMwOTRkYjJhMjMxNDZkMDAzYWZkNDE5NDNlN2EiXSxbImFmM2M0MjNhOTVkOWY1''@;'; put 'put ''YjMwNTQ3NTRlZmExNTBhYzM5Y2QyOTU1MmZlMzYwMjU3MzYyZGZkZWNlZjQwNTNiNDUiLCJmOThhM2ZkODMxZWIyYjc0OWE5M2IwZTZmMzVjZmI0MGM4Y2Q1YWE2NjdhMTU1ODFiYzJmZWRlZDQ5OGZkOWM2Il0sWyI3NjZkYmIyNGQxMzRlNzQ1Y2NjYWEyOGM5OWJmMjc0OTA2YmI2NmIyNmRj''@;'; put 'put ''Zjk4ZGY4ZDJmZWQ1MGQ4ODQyNDlhIiwiNzQ0YjExNTJlYWNiZTVlMzhkY2M4ODc5ODBkYTM4Yjg5NzU4NGE2NWZhMDZjZWRkMmM5MjRmOTdjYmFjNTk5NiJdLFsiNTlkYmY0NmY4Yzk0NzU5YmEyMTI3N2MzMzc4NGY0MTY0NWY3YjQ0ZjZjNTk2YTU4Y2U5MmU2NjYxOTFhYmUzZSIsImM1MzRh''@;'; put 'put ''ZDQ0MTc1ZmJjMzAwZjRlYTZjZTY0ODMwOWEwNDJjZTczOWE3OTE5Nzk4Y2Q4NWUyMTZjNGEzMDdmNmUiXSxbImYxM2FkYTk1MTAzYzQ1MzczMDVlNjkxZTc0ZTlhNGE4ZGQ2NDdlNzExYTk1ZTczY2I2MmRjNjAxOGNmZDg3YjgiLCJlMTM4MTdiNDRlZTE0ZGU2NjNiZjRiYzgwODM0MWYzMjY5''@;'; put 'put ''NDllMjFhNmE3NWMyNTcwNzc4NDE5YmRhZjU3MzNkIl0sWyI3NzU0YjRmYTBlOGFjZWQwNmQ0MTY3YTJjNTljY2E0Y2RhMTg2OWMwNmViYWRmYjY0ODg1NTAwMTVhODg1MjJjIiwiMzBlOTNlODY0ZTY2OWQ4MjIyNGI5NjdjMzAyMGI4ZmE4ZDFlNGUzNTBiNmNiY2M1MzdhNDhiNTc4NDExNjNh''@;'; put 'put ''MiJdLFsiOTQ4ZGNhZGY1OTkwZTA0OGFhMzg3NGQ0NmFiZWY5ZDcwMTg1OGY5NWRlODA0MWQyYTY4MjhjOTllMjI2MjUxOSIsImU0OTFhNDI1MzdmNmU1OTdkNWQyOGEzMjI0YjFiYzI1ZGY5MTU0ZWZiZDJlZjFkMmNiYmEyY2FlNTM0N2Q1N2UiXSxbIjc5NjI0MTQ0NTBjNzZjMTY4OWM3YjQ4''@;'; put 'put ''ZjgyMDJlYzM3ZmIyMjRjZjVhYzBiZmExNTcwMzI4YThhM2Q3Yzc3YWIiLCIxMDBiNjEwZWM0ZmZiNDc2MGQ1YzFmYzEzM2VmNmY2YjEyNTA3YTA1MWYwNGFjNTc2MGFmYTViMjlkYjgzNDM3Il0sWyIzNTE0MDg3ODM0OTY0YjU0YjE1YjE2MDY0NGQ5MTU0ODVhMTY5NzcyMjViODg0N2JiMGRk''@;'; put 'put ''MDg1MTM3ZWM0N2NhIiwiZWYwYWZiYjIwNTYyMDU0NDhlMTY1MmM0OGU4MTI3ZmM2MDM5ZTc3YzE1YzIzNzhiN2U3ZDE1YTBkZTI5MzMxMSJdLFsiZDNjYzMwYWQ2YjQ4M2U0YmM3OWNlMmM5ZGQ4YmM1NDk5M2U5NDdlYjhkZjc4N2I0NDI5NDNkM2Y3YjUyN2VhZiIsIjhiMzc4YTIyZDgyNzI3''@;'; put 'put ''OGQ4OWM1ZTliZThmOTUwOGFlM2MyYWQ0NjI5MDM1ODYzMGFmYjM0ZGIwNGVlZGUwYTQiXSxbIjE2MjRkODQ3ODA3MzI4NjBjZTFjNzhmY2JmZWZlMDhiMmIyOTgyM2RiOTEzZjY0OTM5NzViYTBmZjQ4NDc2MTAiLCI2ODY1MWNmOWI2ZGE5MDNlMDkxNDQ0OGM2Y2Q5ZDRjYTg5Njg3OGY1Mjgy''@;'; put 'put ''YmU0YzhjYzA2ZTJhNDA0MDc4NTc1Il0sWyI3MzNjZTgwZGE5NTVhOGEyNjkwMmM5NTYzM2U2MmE5ODUxOTI0NzRiNWFmMjA3ZGE2ZGY3YjRmZDVmYzYxY2Q0IiwiZjU0MzVhMmJkMmJhZGY3ZDQ4NWE0ZDhiOGRiOWZjY2UzZTFlZjhlMDIwMWU0NTc4YzU0NjczYmMxZGM1ZWExZCJdLFsiMTVk''@;'; put 'put ''OTQ0MTI1NDk0NTA2NGNmMWExYzMzYmJkM2I0OWY4OTY2YzUwOTIxNzFlNjk5ZWYyNThkZmFiODFjMDQ1YyIsImQ1NmViMzBiNjk0NjNlNzIzNGY1MTM3YjczYjg0MTc3NDM0ODAwYmFjZWJmYzY4NWZjMzdiYmU5ZWZlNDA3MGQiXSxbImExZDBmY2YyZWM5ZGU2NzViNjEyMTM2ZTVjZTcwZDI3''@;'; put 'put ''MWMyMTQxN2M5ZDJiOGFhYWFjMTM4NTk5ZDA3MTc5NDAiLCJlZGQ3N2Y1MGJjYjVhM2NhYjJlOTA3MzczMDk2NjdmMjY0MTQ2MmE1NDA3MGYzZDUxOTIxMmQzOWMxOTdhNjI5Il0sWyJlMjJmYmUxNWMwYWY4Y2NjNTc4MGMwNzM1Zjg0ZGJlOWE3OTBiYWRlZTgyNDVjMDZjN2NhMzczMzFjYjM2''@;'; put 'put ''OTgwIiwiYTg1NWJhYmFkNWNkNjBjODhiNDMwYTY5ZjUzYTFhN2EzODI4OTE1NDk2NDc5OWJlNDNkMDZkNzdkMzFkYTA2Il0sWyIzMTEwOTFkZDk4NjBlOGUyMGVlMTM0NzNjMTE1NWY1ZjY5NjM1ZTM5NDcwNGVhYTc0MDA5NDUyMjQ2Y2ZhOWIzIiwiNjZkYjY1NmY4N2QxZjA0ZmZmZDFmMDQ3''@;'; put 'put ''ODhjMDY4MzA4NzFlYzVhNjRmZWVlNjg1YmQ4MGYwYjEyODZkODM3NCJdLFsiMzRjMWZkMDRkMzAxYmU4OWIzMWMwNDQyZDNlNmFjMjQ4ODM5MjhiNDVhOTM0MDc4MTg2N2Q0MjMyZWMyZGJkZiIsIjk0MTQ2ODVlOTdiMWI1OTU0YmQ0NmY3MzAxNzQxMzZkNTdmMWNlZWI0ODc0NDNkYzUzMjE4''@;'; put 'put ''NTdiYTczYWJlZSJdLFsiZjIxOWVhNWQ2YjU0NzAxYzFjMTRkZTViNTU3ZWI0MmE4ZDEzZjNhYmJjZDA4YWZmY2MyYTVlNmIwNDliOGQ2MyIsIjRjYjk1OTU3ZTgzZDQwYjBmNzNhZjQ1NDRjY2NmNmIxZjRiMDhkM2MwN2IyN2ZiOGQ4YzI5NjJhNDAwNzY2ZDEiXSxbImQ3Yjg3NDBmNzRhOGZi''@;'; put 'put ''YWFiMWY2ODNkYjhmNDVkZTI2NTQzYTU0OTBiY2E2MjcwODcyMzY5MTI0NjlhMGI0NDgiLCJmYTc3OTY4MTI4ZDljOTJlZTEwMTBmMzM3YWQ0NzE3ZWZmMTVkYjVlZDNjMDQ5YjM0MTFlMDMxNWVhYTQ1OTNiIl0sWyIzMmQzMWMyMjJmOGY2ZjBlZjg2ZjdjOThkM2EzMzM1ZWFkNWJjZDMyYWJk''@;'; put 'put ''ZDk0Mjg5ZmU0ZDMwOTFhYTgyNGJmIiwiNWYzMDMyZjU4OTIxNTZlMzljY2QzZDc5MTViOWUxZGEyZTZkYWM5ZTZmMjZlOTYxMTE4ZDE0Yjg0NjJlMTY2MSJdLFsiNzQ2MWYzNzE5MTRhYjMyNjcxMDQ1YTE1NWQ5ODMxZWE4NzkzZDc3Y2Q1OTU5MmM0MzQwZjg2Y2JjMTgzNDdiNSIsIjhlYzBi''@;'; put 'put ''YTIzOGI5NmJlYzBjYmRkZGNhZTBhYTQ0MjU0MmVlZTFmZjUwYzk4NmVhNmIzOTg0N2IzY2MwOTJmZjYiXSxbImVlMDc5YWRiMWRmMTg2MDA3NDM1NmEyNWFhMzgyMDZhNmQ3MTZiMmMzZTY3NDUzZDI4NzY5OGJhZDdiMmIyZDYiLCI4ZGMyNDEyYWFmZTNiZTVjNGM1ZjM3ZTBlY2M1ZjlmNmE0''@;'; put 'put ''NDY5ODlhZjA0YzRlMjVlYmFhYzQ3OWVjMWM4YzFlIl0sWyIxNmVjOTNlNDQ3ZWM4M2YwNDY3YjE4MzAyZWU2MjBmN2U2NWRlMzMxODc0YzlkYzcyYmZkODYxNmJhOWRhNmI1IiwiNWU0NjMxMTUwZTYyZmI0MGQwZThjMmE3Y2E1ODA0YTM5ZDU4MTg2YTUwZTQ5NzEzOTYyNjc3OGUyNWIwNjc0''@;'; put 'put ''ZCJdLFsiZWFhNWY5ODBjMjQ1ZjZmMDM4OTc4MjkwYWZhNzBiNmJkODg1NTg5N2Y5OGI2YWE0ODViOTYwNjVkNTM3YmQ5OSIsImY2NWY1ZDNlMjkyYzJlMDgxOWE1MjgzOTFjOTk0NjI0ZDc4NDg2OWQ3ZTZlYTY3ZmIxODA0MTAyNGVkYzA3ZGMiXSxbIjc4Yzk0MDc1NDRhYzEzMjY5MmVlMTkx''@;'; put 'put ''MGEwMjQzOTk1OGFlMDQ4NzcxNTEzNDJlYTk2YzRiNmIzNWE0OWY1MSIsImYzZTAzMTkxNjllYjliODVkNTQwNDc5NTUzOWE1ZTY4ZmExZmJkNTgzYzA2NGQyNDYyYjY3NWYxOTRhM2RkYjQiXSxbIjQ5NGY0YmUyMTlhMWE3NzAxNmRjZDgzODQzMWFlYTAwMDFjZGM4YWU3YTZmYzY4ODcyNjU3''@;'; put 'put ''OGQ5NzAyODU3YTUiLCI0MjI0MmE5NjkyODNhNWYzMzliYTdmMDc1ZTM2YmEyYWY5MjVjZTMwZDc2N2VkNmU1NWY0YjAzMTg4MGQ1NjJjIl0sWyJhNTk4YTgwMzBkYTZkODZjNmJjN2YyZjUxNDRlYTU0OWQyODIxMWVhNThmYWE3MGViZjRjMWU2NjVjMWZlOWI1IiwiMjA0YjVkNmY4NDgyMmMz''@;'; put 'put ''MDdlNGI0YTcxNDA3MzdhZWMyM2ZjNjNiNjViMzVmODZhMTAwMjZkYmQyZDg2NGU2YiJdLFsiYzQxOTE2MzY1YWJiMmI1ZDA5MTkyZjVmMmRiZWFmZWMyMDhmMDIwZjEyNTcwYTE4NGRiYWRjM2U1ODU5NTk5NyIsIjRmMTQzNTFkMDA4N2VmYTQ5ZDI0NWIzMjg5ODQ5ODlkNWNhZjk0NTBmMzRi''@;'; put 'put ''ZmMwZWQxNmU5NmI1OGZhOTkxMyJdLFsiODQxZDYwNjNhNTg2ZmE0NzVhNzI0NjA0ZGEwM2JjNWI5MmEyZTBkMmUwYTM2YWNmZTRjNzNhNTUxNDc0Mjg4MSIsIjczODY3ZjU5YzA2NTllODE5MDRmOWExYzc1NDM2OThlNjI1NjJkNjc0NGMxNjljZTdhMzZkZTAxYThkNjE1NCJdLFsiNWU5NWJi''@;'; put 'put ''Mzk5YTY5NzFkMzc2MDI2OTQ3Zjg5YmRlMmYyODJiMzM4MTA5MjhiZTRkZWQxMTJhYzRkNzBlMjBkNSIsIjM5ZjIzZjM2NjgwOTA4NWJlZWJmYzcxMTgxMzEzNzc1YTk5YzlhZWQ3ZDhiYTM4YjE2MTM4NGM3NDYwMTI4NjUiXSxbIjM2ZTQ2NDFhNTM5NDhmZDQ3NmMzOWY4YTk5ZmQ5NzRlNWVj''@;'; put 'put ''MDc1NjRiNTMxNWQ4YmY5OTQ3MWJjYTBlZjJmNjYiLCJkMjQyNGIxYjFhYmU0ZWI4MTY0MjI3YjA4NWM5YWE5NDU2ZWExMzQ5M2ZkNTYzZTA2ZmQ1MWNmNTY5NGM3OGZjIl0sWyIzMzY1ODFlYTdiZmJiYjI5MGMxOTFhMmY1MDdhNDFjZjU2NDM4NDIxNzBlOTE0ZmFlYWIyN2MyYzU3OWY3MjYi''@;'; put 'put ''LCJlYWQxMjE2ODU5NWZlMWJlOTkyNTIxMjliNmU1NmIzMzkxZjdhYjE0MTBjZDFlMGVmM2RjZGNhYmQyZmRhMjI0Il0sWyI4YWI4OTgxNmRhZGZkNmI2YTFmMjYzNGZjZjAwZWM4NDAzNzgxMDI1ZWQ2ODkwYzQ4NDk3NDI3MDZiZDQzZWRlIiwiNmZkY2VmMDlmMmY2ZDBhMDQ0ZTY1NGFlZjYy''@;'; put 'put ''NDEzNmY1MDNkNDU5YzNlODk4NDU4NThhNDdhOTEyOWNkZDI0ZSJdLFsiMWUzM2YxYTc0NmM5YzU3NzgxMzMzNDRkOTI5OWZjYWEyMGIwOTM4ZThhY2ZmMjU0NGJiNDAyODRiOGM1ZmI5NCIsIjYwNjYwMjU3ZGQxMWIzYWE5YzhlZDYxOGQyNGVkZmYyMzA2ZDMyMGYxZDAzMDEwZTMzYTdkMjA1''@;'; put 'put ''N2YzYjNiNiJdLFsiODViN2MxZGNiM2NlYzFiN2VlN2YzMGRlZDc5ZGQyMGEwZWQxZjRjYzE4Y2JjZmNmYTQxMDM2MWZkOGYwOGYzMSIsIjNkOThhOWNkZDAyNmRkNDNmMzkwNDhmMjVhODg0N2Y0ZmNhZmFkMTg5NWQ3YTYzM2M2ZmVkM2MzNWU5OTk1MTEiXSxbIjI5ZGY5ZmJkOGQ5ZTQ2NTA5''@;'; put 'put ''Mjc1ZjRiMTI1ZDZkNDVkN2ZiZTlhM2I4NzhhN2FmODcyYTI4MDA2NjFhYzVmNTEiLCJiNGM0ZmU5OWM3NzVhNjA2ZTJkODg2MjE3OTEzOWZmZGE2MWRjODYxYzAxOWU1NWNkMjg3NmViMmEyN2Q4NGIiXSxbImEwYjFjYWUwNmIwYTg0N2EzZmVhNmU2NzFhYWY4YWRmZGZlNThjYTJmNzY4MTA1''@;'; put 'put ''YzgwODJiMmU0NDlmY2UyNTIiLCJhZTQzNDEwMmVkZGUwOTU4ZWM0YjE5ZDkxN2E2YTI4ZTZiNzJkYTE4MzRhZmYwZTY1MGYwNDk1MDNhMjk2Y2YyIl0sWyI0ZThjZWFmYjliM2U5YTEzNmRjN2ZmNjdlODQwMjk1YjQ5OWRmYjNiMjEzM2U0YmExMTNmMmU0YzBlMTIxZTUiLCJjZjIxNzQxMThj''@;'; put 'put ''OGI2ZDdhNGI0OGY2ZDUzNGNlNWM3OTQyMmMwODZhNjM0NjA1MDJiODI3Y2U2MmEzMjY2ODNjIl0sWyJkMjRhNDRlMDQ3ZTE5YjZmNWFmYjgxYzdjYTJmNjkwODBhNTA3NjY4OWEwMTA5MTlmNDI3MjVjMmI3ODlhMzNiIiwiNmZiOGQ1NTkxYjQ2NmY4ZmM2M2RiNTBmMWMwZjFjNjkwMTNmOTk2''@;'; put 'put ''ODg3YjgyNDRkMmNkZWM0MTdhZmVhOGZhMyJdLFsiZWEwMTYwNmE3YTZjOWNkZDI0OWZkZmNmYWNiOTk1ODQwMDFlZGQyOGFiYmFiNzdiNTEwNGU5OGU4ZTNiMzVkNCIsIjMyMmFmNDkwOGM3MzEyYjBjZmJmZTM2OWY3YTdiM2NkYjdkNDQ5NGJjMjgyMzcwMGNmZDY1MjE4OGEzZWE5OGQiXSxb''@;'; put 'put ''ImFmOGFkZGJmMmI2NjFjOGE2YzYzMjg2NTVlYjk2NjUxMjUyMDA3ZDhjNWVhMzFiZTRhZDE5NmRlOGNlMjEzMWYiLCI2NzQ5ZTY3YzAyOWI4NWY1MmEwMzRlYWZkMDk2ODM2YjI1MjA4MTg2ODBlMjZhYzhmM2RmYmNkYjcxNzQ5NzAwIl0sWyJlM2FlMTk3NDU2NmNhMDZjYzUxNmQ0N2UwZmIx''@;'; put 'put ''NjVhNjc0YTNkYWJjZmNhMTVlNzIyZjBlMzQ1MGY0NTg4OSIsIjJhZWFiZTdlNDUzMTUxMDExNjIxN2YwN2JmNGQwNzMwMGRlOTdlNDg3NGY4MWY1MzM0MjBhNzJlZWIwYmQ2YTQiXSxbIjU5MWVlMzU1MzEzZDk5NzIxY2Y2OTkzZmZlZDFlM2UzMDE5OTNmZjNlZDI1ODgwMjA3NWVhOGNlZDM5''@;'; put 'put ''N2UyNDYiLCJiMGVhNTU4YTExM2MzMGJlYTYwZmM0Nzc1NDYwYzc5MDFmZjBiMDUzZDI1Y2EyYmRlZWU5OGYxYTRiZTVkMTk2Il0sWyIxMTM5NmQ1NWZkYTU0YzQ5ZjE5YWE5NzMxOGQ4ZGE2MWZhODU4NGU0N2IwODQ5NDUwNzdjZjAzMjU1YjUyOTg0IiwiOTk4Yzc0YThjZDQ1YWMwMTI4OWQ1''@;'; put 'put ''ODMzYTdiZWI0NzQ0ZmY1MzZiMDFiMjU3YmU0YzU3NjdiZWE5M2VhNTdhNCJdLFsiM2M1ZDJhMWJhMzljNWExNzkwMDAwNzM4YzllMGM0MGI4ZGNkZmQ1NDY4NzU0YjY0MDU1NDAxNTdlMDE3YWE3YSIsImIyMjg0Mjc5OTk1YTM0ZTJmOWQ0ZGU3Mzk2ZmMxOGI4MGY5YjhiOWZkZDI3MGY2NjYx''@;'; put 'put ''Zjc5Y2E0YzgxYmQyNTciXSxbImNjODcwNGI4YTYwYTBkZWZhM2E5OWE3Mjk5ZjJlOWMzZmJjMzk1YWZiMDRhYzA3ODQyNWVmOGExNzkzY2MwMzAiLCJiZGQ0NjAzOWZlZWQxNzg4MWQxZTA4NjJkYjM0N2Y4Y2YzOTViNzRmYzRiY2RjNGU5NDBiNzRlM2FjMWYxYjEzIl0sWyJjNTMzZTRmN2Vh''@;'; put 'put ''ODU1NWFhY2Q5Nzc3YWM1Y2FkMjliOTdkZDRkZWZjY2M1M2VlN2VhMjA0MTE5YjI4ODliMTk3IiwiNmYwYTI1NmJjNWVmZGY0MjlhMmZiNjI0MmYxYTQzYTJkOWI5MjViYjRhNGIzYTI2YmI4ZTBmNDVlYjU5NjA5NiJdLFsiYzE0ZjhmMmNjYjI3ZDZmMTA5ZjZkMDhkMDNjYzk2YTY5YmE4YzM0''@;'; put 'put ''ZWVjMDdiYmNmNTY2ZDQ4ZTMzZGE2NTkzIiwiYzM1OWQ2OTIzYmIzOThmN2ZkNDQ3M2UxNmZlMWMyODQ3NWI3NDBkZDA5ODA3NWU2YzBlODY0OTExM2RjM2EzOCJdLFsiYTZjYmMzMDQ2YmM2YTQ1MGJhYzI0Nzg5ZmExNzExNWE0Yzk3MzllZDc1ZjhmMjFjZTQ0MWY3MmUwYjkwZTZlZiIsIjIx''@;'; put 'put ''YWU3ZjQ2ODBlODg5YmIxMzA2MTllMmMwZjk1YTM2MGNlYjU3M2M3MDYwMzEzOTg2MmFmZDYxN2ZhOWI5ZiJdLFsiMzQ3ZDZkOWEwMmM0ODkyN2ViZmI4NmMxMzU5YjFjYWYxMzBhM2MwMjY3ZDExY2U2MzQ0YjM5Zjk5ZDQzY2MzOCIsIjYwZWE3ZjYxYTM1MzUyNGQxYzk4N2Y2ZWNlYzkyZjA4''@;'; put 'put ''NmQ1NjVhYjY4Nzg3MGNiMTI2ODlmZjFlMzFjNzQ0NDgiXSxbImRhNjU0NWQyMTgxZGI4ZDk4M2Y3ZGNiMzc1ZWY1ODY2ZDQ3YzY3YjFiZjMxYzhjZjg1NWVmNzQzN2I3MjY1NmEiLCI0OWI5NjcxNWFiNjg3OGE3OWU3OGYwN2NlNTY4MGM1ZDY2NzMwNTFiNDkzNWJkODk3ZmVhODI0Yjc3ZGMy''@;'; put 'put ''MDhhIl0sWyJjNDA3NDdjYzlkMDEyY2IxYTEzYjgxNDgzMDljNmRlN2VjMjVkNjk0NWQ2NTcxNDZiOWQ1OTk0YjhmZWIxMTExIiwiNWNhNTYwNzUzYmUyYTEyZmM2ZGU2Y2FmMmNiNDg5NTY1ZGI5MzYxNTZiOTUxNGUxYmI1ZTgzMDM3ZTBmYTJkNCJdLFsiNGU0MmM4ZWM4MmM5OTc5OGNjZjNh''@;'; put 'put ''NjEwYmU4NzBlNzgzMzhjN2Y3MTMzNDhiZDM0YzgyMDNlZjQwMzdmMzUwMiIsIjc1NzFkNzRlZTVlMGZiOTJhN2E4YjMzYTA3NzgzMzQxYTU0OTIxNDRjYzU0YmNjNDBhOTQ0NzM2OTM2MDY0MzciXSxbIjM3NzVhYjcwODliYzZhZjgyM2FiYTJlMWFmNzBiMjM2ZDI1MWNhZGIwYzg2NzQzMjg3''@;'; put 'put ''NTIyYTFiM2IwZGVkZWEiLCJiZTUyZDEwN2JjZmEwOWQ4YmNiOTczNmE4MjhjZmE3ZmFjOGRiMTdiZjdhNzZhMmM0MmFkOTYxNDA5MDE4Y2Y3Il0sWyJjZWUzMWNiZjdlMzRlYzM3OWQ5NGZiODE0ZDNkNzc1YWQ5NTQ1OTVkMTMxNGJhODg0Njk1OWUzZTgyZjc0ZTI2IiwiOGZkNjRhMTRjMDZi''@;'; put 'put ''NTg5YzI2Yjk0N2FlMmJjZjZiZmEwMTQ5ZWYwYmUxNGVkNGQ4MGY0NDhhMDFjNDNiMWM2ZCJdLFsiYjRmOWVhZWEwOWI2OTE3NjE5ZjZlYTZhNGViNTQ2NGVmZGRiNThmZDQ1YjFlYmVmY2RjMWEwMWQwOGI0Nzk4NiIsIjM5ZTVjOTkyNWI1YTU0YjA3NDMzYTRmMThjNjE3MjZmOGJiMTMxYzAx''@;'; put 'put ''MmNhNTQyZWIyNGE4YWMwNzIwMDY4MmEiXSxbImQ0MjYzZGZjM2QyZGY5MjNhMDE3OWE0ODk2NmQzMGNlODRlMjUxNWFmYzNkY2NjMWI3NzkwNzc5MmViY2M2MGUiLCI2MmRmYWYwN2EwZjc4ZmViMzBlMzBkNjI5NTg1M2NlMTg5ZTEyNzc2MGFkNmNmN2ZhZTE2NGUxMjJhMjA4ZDU0Il0sWyI0''@;'; put 'put ''ODQ1NzUyNDgyMGZhNjVhNGY4ZDM1ZWI2OTMwODU3YzAwMzJhY2MwYTRhMmRlNDIyMjMzZWVkYTg5NzYxMmM0IiwiMjVhNzQ4YWIzNjc5NzlkOTg3MzNjMzhhMWZhMWMyZTdkYzZjYzA3ZGIyZDYwYTlhZTdhNzZhYWE0OWJkMGY3NyJdLFsiZGZlZWVmMTg4MTEwMWYyY2IxMTY0NGYzYTJhZmRm''@;'; put 'put ''YzIwNDVlMTk5MTkxNTI5MjNmMzY3YTE3NjdjMTFjY2VkYSIsImVjZmI3MDU2Y2YxZGUwNDJmOTQyMGJhYjM5Njc5M2MwYzM5MGJkZTc0YjRiYmRmZjE2YTgzYWUwOWE5YTc1MTciXSxbIjZkN2VmNmIxNzU0M2Y4MzczYzU3M2Y0NGUxZjM4OTgzNWQ4OWJjYmM2MDYyY2VkMzZjODJkZjgzYjhm''@;'; put 'put ''YWU4NTkiLCJjZDQ1MGVjMzM1NDM4OTg2ZGZlZmExMGM1N2ZlYTliY2M1MjFhMDk1OWIyZDgwYmJmNzRiMTkwZGNhNzEyZDEwIl0sWyJlNzU2MDVkNTkxMDJhNWEyNjg0NTAwZDNiOTkxZjJlM2YzYzg4YjkzMjI1NTQ3MDM1YWYyNWFmNjZlMDQ1NDFmIiwiZjVjNTQ3NTRhOGY3MWVlNTQwYjli''@;'; put 'put ''NDg3Mjg0NzNlMzE0ZjcyOWFjNTMwOGIwNjkzODM2MDk5MGUyYmZhZDEyNSJdLFsiZWI5ODY2MGY0YzRkZmFhMDZhMmJlNDUzZDUwMjBiYzk5YTBjMmU2MGFiZTM4ODQ1N2RkNDNmZWZiMWVkNjIwYyIsIjZjYjlhODg3NmQ5Y2I4NTIwNjA5YWYzYWRkMjZjZDIwYTBhN2NkOGE5NDExMTMxY2U4''@;'; put 'put ''NWY0NDEwMDA5OTIyM2UiXSxbIjEzZTg3YjAyN2Q4NTE0ZDM1OTM5ZjJlNjg5MmIxOTkyMjE1NDU5Njk0MTg4ODMzNmRjMzU2M2UzYjhkYmE5NDIiLCJmZWY1YTNjNjgwNTlhNmRlYzVkNjI0MTE0YmYxZTkxYWFjMmI5ZGE1NjhkNmFiZWIyNTcwZDU1NjQ2YjhhZGYxIl0sWyJlZTE2MzAyNmU5''@;'; put 'put ''ZmQ2ZmUwMTdjMzhmMDZhNWJlNmZjMTI1NDI0YjM3MWNlMjcwOGU3YmY0NDkxNjkxZTU3NjRhIiwiMWFjYjI1MGYyNTVkZDYxYzQzZDk0Y2NjNjcwZDBmNThmNDlhZTNmYTE1Yjk2NjIzZTU0MzBkYTBhZDZjNjJiMiJdLFsiYjI2OGY1ZWY5YWQ1MWU0ZDc4ZGUzYTc1MGMyZGM4OWIxZTYyNmQ0''@;'; put 'put ''MzUwNTg2Nzk5OTkzMmU1ZGIzM2FmM2Q4MCIsIjVmMzEwZDRiM2M5OWI5ZWJiMTlmNzdkNDFjMWRlZTAxOGNmMGQzNGZkNDE5MTYxNDAwM2U5NDVhMTIxNmU0MjMiXSxbImZmMDdmMzExOGE5ZGYwMzVlOWZhZDg1ZWI2YzdiZmU0MmIwMmYwMWNhOTljZWVhM2JmN2ZmZGJhOTNjNDc1MGQiLCI0''@;'; put 'put ''MzgxMzZkNjAzZTg1OGEzYTVjNDQwYzM4ZWNjYmFkZGMxZDI5NDIxMTRlMmVkZGQ0NzQwZDA5OGNlZDFmMGQ4Il0sWyI4ZDhiOTg1NWM3YzA1MmEzNDE0NmZkMjBmZmI2NThiZWE0YjlmNjllMGQ4MjVlYmVjMTZlOGMzY2UyYjUyNmExIiwiY2RiNTU5ZWVkYzJkNzlmOTI2YmFmNDRmYjg0ZWE0''@;'; put 'put ''ZDQ0YmNmNTBmZWU1MWQ3Y2ViMzBlMmU3ZjQ2MzAzNjc1OCJdLFsiNTJkYjBiNTM4NGRmYmYwNWJmYTlkNDcyZDdhZTI2ZGZlNGI4NTFjZWNhOTFiMWViYTU0MjYzMTgwZGEzMmI2MyIsImMzYjk5N2QwNTBlZTVkNDIzZWJhZjY2YTZkYjlmNTdiMzE4MGM5MDI4NzU2NzlkZTkyNGI2OWQ4NGE3''@;'; put 'put ''YjM3NSJdLFsiZTYyZjk0OTBkM2Q1MWRhNjM5NWVmZDI0ZTgwOTE5Y2M3ZDBmMjljM2YzZmE0OGM2ZmZmNTQzYmVjYmQ0MzM1MiIsIjZkODlhZDdiYTQ4NzZiMGIyMmMyY2EyODBjNjgyODYyZjM0MmM4NTkxZjFkYWY1MTcwZTA3YmZkOWNjYWZhN2QiXSxbIjdmMzBlYTI0NzZiMzk5YjQ5NTc1''@;'; put 'put ''MDljODhmNzdkMDE5MWFmYTJmZjVjYjdiMTRmZDZkOGU3ZDY1YWFhYjExOTMiLCJjYTVlZjdkNGIyMzFjOTRjM2IxNTM4OWE1ZjYzMTFlOWRhZmY3YmI2N2IxMDNlOTg4MGVmNGJmZjYzN2FjYWVjIl0sWyI1MDk4ZmYxZTFkOWYxNGZiNDZhMjEwZmFkYTZjOTAzZmVmMGZiN2I0YTFkZDFkOWFj''@;'; put 'put ''NjBhMDM2MTgwMGI3YTAwIiwiOTczMTE0MWQ4MWZjOGY4MDg0ZDM3YzZlNzU0MjAwNmIzZWUxYjQwZDYwZGZlNTM2MmE1YjEzMmZkMTdkZGMwIl0sWyIzMmI3OGM3ZGU5ZWU1MTJhNzI4OTViZTZiOWNiZWZhNmUyZjNjNGNjY2U0NDVjOTZiOWYyYzgxZTI3NzhhZDU4IiwiZWUxODQ5ZjUxM2Rm''@;'; put 'put ''NzFlMzJlZmMzODk2ZWUyODI2MGM3M2JiODA1NDdhZTIyNzViYTQ5NzIzNzc5NGM4NzUzYyJdLFsiZTJjYjc0ZmRkYzhlOWZiY2QwNzZlZWYyYTdjNzJiMGNlMzdkNTBmMDgyNjlkZmMwNzRiNTgxNTUwNTQ3YTRmNyIsImQzYWEyZWQ3MWM5ZGQyMjQ3YTYyZGYwNjI3MzZlYjBiYWRkZWE5ZTM2''@;'; put 'put ''MTIyZDJiZTg2NDFhYmNiMDA1Y2M0YTQiXSxbIjg0Mzg0NDc1NjZkNGQ3YmVkYWRjMjk5NDk2YWIzNTc0MjYwMDlhMzVmMjM1Y2IxNDFiZTBkOTljZDEwYWUzYTgiLCJjNGUxMDIwOTE2OTgwYTRkYTVkMDFhYzVlNmFkMzMwNzM0ZWYwZDc5MDY2MzFjNGYyMzkwNDI2YjJlZGQ3OTFmIl0sWyI0''@;'; put 'put ''MTYyZDQ4OGI4OTQwMjAzOWI1ODRjNmZjNmMzMDg4NzA1ODdkOWM0NmY2NjBiODc4YWI2NWM4MmM3MTFkNjdlIiwiNjcxNjNlOTAzMjM2Mjg5Zjc3NmYyMmMyNWZiOGEzYWZjMTczMmYyYjg0YjRlOTVkYmRhNDdhZTVhMDg1MjY0OSJdLFsiM2ZhZDNmYTg0Y2FmMGYzNGYwZjg5YmZkMmRjZjU0''@;'; put 'put ''ZmMxNzVkNzY3YWVjM2U1MDY4NGYzYmE0YTRiZjVmNjgzZCIsImNkMWJjN2NiNmNjNDA3YmIyZjBjYTY0N2M3MThhNzMwY2Y3MTg3MmU3ZDBkMmE1M2ZhMjBlZmNkZmU2MTgyNiJdLFsiNjc0ZjI2MDBhMzAwN2EwMDU2OGMxYTdjZTA1ZDA4MTZjMWZiODRiZjEzNzA3OThmMWM2OTUzMmZhZWIx''@;'; put 'put ''YTg2YiIsIjI5OWQyMWY5NDEzZjMzYjNlZGY0M2IyNTcwMDQ1ODBiNzBkYjU3ZGEwYjE4MjI1OWUwOWVlY2M2OWUwZDM4YTUiXSxbImQzMmY0ZGE1NGFkZTc0YWJiODFiODE1YWQxZmIzYjI2M2Q4MmQ2YzY5MjcxNGJjZmY4N2QyOWJkNWVlOWYwOGYiLCJmOTQyOWU3MzhiOGU1M2I5NjhlOTkw''@;'; put 'put ''MTZjMDU5NzA3NzgyZTE0ZjQ1MzUzNTlkNTgyZmM0MTY5MTBiM2VlYTg3Il0sWyIzMGU0ZTY3MDQzNTM4NTU1NmU1OTM2NTcxMzU4NDVkMzZmYmI2OTMxZjcyYjA4Y2IxZWQ5NTRmMWUzY2UzZmY2IiwiNDYyZjliY2U2MTk4OTg2Mzg0OTkzNTAxMTNiYmM5YjEwYTg3OGQzNWRhNzA3NDBkYzY5''@;'; put 'put ''NWE1NTllYjg4ZGI3YiJdLFsiYmUyMDYyMDAzYzUxY2MzMDA0NjgyOTA0MzMwZTRkZWU3ZjNkY2QxMGIwMWU1ODBiZjE5NzFiMDRkNGNhZDI5NyIsIjYyMTg4YmM0OWQ2MWU1NDI4NTczZDQ4YTc0ZTFjNjU1YjFjNjEwOTA5MDU2ODJhMGQ1NTU4ZWQ3MmRjY2I5YmMiXSxbIjkzMTQ0NDIzYWNl''@;'; put 'put ''MzQ1MWVkMjllMGZiOWFjMmFmMjExY2I2ZTg0YTYwMWRmNTk5M2M0MTk4NTlmZmY1ZGYwNGEiLCI3YzEwZGZiMTY0YzM0MjVmNWM3MWEzZjlkNzk5MjAzOGYxMDY1MjI0ZjcyYmI5ZDFkOTAyYTZkMTMwMzdiNDdjIl0sWyJiMDE1ZjgwNDRmNWZjYmRjZjIxY2EyNmQ2YzM0ZmI4MTk3ODI5MjA1''@;'; put 'put ''YzdiN2QyYTdjYjY2NDE4YzE1N2IxMTJjIiwiYWI4YzFlMDg2ZDA0ZTgxMzc0NGE2NTViMmRmOGQ1ZjgzYjNjZGM2ZmFhMzA4OGMxZDNhZWExNDU0ZTNhMWQ1ZiJdLFsiZDVlOWUxZGE2NDlkOTdkODllNDg2ODExN2E0NjVhM2E0ZjhhMThkZTU3YTE0MGQzNmIzZjJhZjM0MWEyMWI1MiIsIjRj''@;'; put 'put ''YjA0NDM3ZjM5MWVkNzMxMTFhMTNjYzFkNGRkMGRiMTY5MzQ2NWMyMjQwNDgwZDg5NTVlODU5MmYyNzQ0N2EiXSxbImQzYWU0MTA0N2RkN2NhMDY1ZGJmOGVkNzdiOTkyNDM5OTgzMDA1Y2Q3MmUxNmQ2Zjk5NmE1MzE2ZDM2OTY2YmIiLCJiZDFhZWIyMWFkMjJlYmIyMmExMGYwMzAzNDE3YzZk''@;'; put 'put ''OTY0ZjhjZGQ3ZGYwYWNhNjE0YjEwZGMxNGQxMjVhYzQ2Il0sWyI0NjNlMjc2M2Q4ODVmOTU4ZmM2NmNkZDIyODAwZjBhNDg3MTk3ZDBhODJlMzc3YjQ5ZjgwYWY4N2M4OTdiMDY1IiwiYmZlZmFjZGIwZTVkMGZkN2RmM2EzMTFhOTRkZTA2MmIyNmI4MGM2MWZiYzk3NTA4Yjc5OTkyNjcxZWY3''@;'; put 'put ''Y2E3ZiJdLFsiNzk4NWZkZmQxMjdjMDU2N2M2ZjUzZWMxYmI2M2VjMzE1OGU1OTdjNDBiZmU3NDdjODNjZGRmYzkxMDY0MTkxNyIsIjYwM2MxMmRhZjNkOTg2MmVmMmIyNWZlMWRlMjg5YWVkMjRlZDI5MWUwZWM2NzA4NzAzYTViZDU2N2YzMmVkMDMiXSxbIjc0YTFhZDZiNWY3NmUzOWRiMmRk''@;'; put 'put ''MjQ5NDEwZWFjN2Y5OWU3NGM1OWNiODNkMmQwZWQ1ZmYxNTQzZGE3NzAzZTkiLCJjYzYxNTdlZjE4YzljNjNjZDYxOTNkODM2MzFiYmVhMDA5M2UwOTY4OTQyZThjMzNkNTczN2ZkNzkwZTBkYjA4Il0sWyIzMDY4MmE1MDcwMzM3NWY2MDJkNDE2NjY0YmExOWI3ZmM5YmFiNDJjNzI3NDc0NjNh''@;'; put 'put ''NzFkMDg5NmIyMmY2ZGEzIiwiNTUzZTA0ZjZiMDE4YjRmYTZjOGYzOWU3ZjMxMWQzMTc2MjkwZDBlMGYxOWNhNzNmMTc3MTRkOTk3N2EyMmZmOCJdLFsiOWUyMTU4ZjBkN2MwZDVmMjZjMzc5MWVmZWZhNzk1OTc2NTRlN2EyYjI0NjRmNTJiMWVlNmMxMzQ3NzY5ZWY1NyIsIjcxMmZjZGQxYjkw''@;'; put 'put ''NTNmMDkwMDNhMzQ4MWZhNzc2MmU5ZmZkN2M4ZWYzNWEzODUwOWUyZmJmMjYyOTAwODM3MyJdLFsiMTc2ZTI2OTg5YTQzYzljZmViYTQwMjljMjAyNTM4YzI4MTcyZTU2NmUzYzRmY2U3MzIyODU3ZjNiZTMyN2Q2NiIsImVkOGNjOWQwNGIyOWViODc3ZDI3MGI0ODc4ZGM0M2MxOWFlZmQzMWY0''@;'; put 'put ''ZWVlMDllZTdiNDc4MzRjMWZhNGIxYzMiXSxbIjc1ZDQ2ZWZlYTM3NzFlNmU2OGFiYjg5YTEzYWQ3NDdlY2YxODkyMzkzZGZjNGYxYjcwMDQ3ODhjNTAzNzRkYTgiLCI5ODUyMzkwYTk5NTA3Njc5ZmQwYjg2ZmQyYjM5YTg2OGQ3ZWZjMjIxNTEzNDZlMWEzY2E0NzI2NTg2YTZiZWQ4Il0sWyI4''@;'; put 'put ''MDlhMjBjNjdkNjQ5MDBmZmI2OThjNGM4MjVmNmQ1ZjIzMTBmYjA0NTFjODY5MzQ1YjczMTlmNjQ1NjA1NzIxIiwiOWU5OTQ5ODBkOTkxN2UyMmI3NmIwNjE5MjdmYTA0MTQzZDA5NmNjYzU0OTYzZTZhNWViZmE1ZjNmOGUyODZjMSJdLFsiMWIzODkwM2E0M2Y3ZjExNGVkNDUwMGI0ZWFjNzA4''@;'; put 'put ''M2ZkZWZlY2UxY2YyOWM2MzUyOGQ1NjM0NDZmOTcyYzE4MCIsIjQwMzZlZGM5MzFhNjBhZTg4OTM1M2Y3N2ZkNTNkZTRhMjcwOGIyNmI2ZjVkYTcyYWQzMzk0MTE5ZGFmNDA4ZjkiXV19fX0sOTUzOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPXEseT1fKDM3ODUpLGc9Xyg5NzQ2KSxC''@;'; put 'put ''PV8oNDUwNCk7SS5hc3NlcnQ9ZyxJLnRvQXJyYXk9Qi50b0FycmF5LEkuemVybzI9Qi56ZXJvMixJLnRvSGV4PUIudG9IZXgsSS5lbmNvZGU9Qi5lbmNvZGUsSS5nZXROQUY9ZnVuY3Rpb24gdyhOLEwsSyl7dmFyIFcsVT1uZXcgQXJyYXkoTWF0aC5tYXgoTi5iaXRMZW5ndGgoKSxLKSsxKTtm''@;'; put 'put ''b3IoVz0wO1c8VS5sZW5ndGg7Vys9MSlVW1ddPTA7dmFyIFk9MTw8TCsxLFg9Ti5jbG9uZSgpO2ZvcihXPTA7VzxVLmxlbmd0aDtXKyspe3ZhciBlZSxKPVguYW5kbG4oWS0xKTtYLmlzT2RkKCk/WC5pc3VibihlZT1KPihZPj4xKS0xPyhZPj4xKS1KOkopOmVlPTAsVVtXXT1lZSxYLml1c2hy''@;'; put 'put ''bigxKX1yZXR1cm4gVX0sSS5nZXRKU0Y9ZnVuY3Rpb24gUChOLEwpe3ZhciBLPVtbXSxbXV07Tj1OLmNsb25lKCksTD1MLmNsb25lKCk7Zm9yKHZhciBZLFU9MCxXPTA7Ti5jbXBuKC1VKT4wfHxMLmNtcG4oLVcpPjA7KXt2YXIgSixyZSxYPU4uYW5kbG4oMykrVSYzLGVlPUwuYW5kbG4oMykr''@;'; put 'put ''VyYzOzM9PT1YJiYoWD0tMSksMz09PWVlJiYoZWU9LTEpLEo9MSZYPzMhPShZPU4uYW5kbG4oNykrVSY3KSYmNSE9PVl8fDIhPT1lZT9YOi1YOjAsS1swXS5wdXNoKEopLHJlPTEmZWU/MyE9KFk9TC5hbmRsbig3KStXJjcpJiY1IT09WXx8MiE9PVg/ZWU6LWVlOjAsS1sxXS5wdXNoKHJlKSwy''@;'; put 'put ''KlU9PT1KKzEmJihVPTEtVSksMipXPT09cmUrMSYmKFc9MS1XKSxOLml1c2hybigxKSxMLml1c2hybigxKX1yZXR1cm4gS30sSS5jYWNoZWRQcm9wZXJ0eT1mdW5jdGlvbiBGKE4sTCxLKXt2YXIgVT0iXyIrTDtOLnByb3RvdHlwZVtMXT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlz''@;'; put 'put ''W1VdP3RoaXNbVV06dGhpc1tVXT1LLmNhbGwodGhpcyl9fSxJLnBhcnNlQnl0ZXM9ZnVuY3Rpb24gTyhOKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIE4/SS50b0FycmF5KE4sImhleCIpOk59LEkuaW50RnJvbUxFPWZ1bmN0aW9uIHooTil7cmV0dXJuIG5ldyB5KE4sImhleCIsImxlIil9fSwz''@;'; put 'put ''Nzg1OmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkseSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGcoVixwKXtpZighVil0aHJvdyBuZXcgRXJyb3IocHx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBCKFYscCl7Vi5zdXBlcl89cDt2YXIgYj1mdW5jdGlvbigpe307Yi5wcm90b3R5''@;'; put 'put ''cGU9cC5wcm90b3R5cGUsVi5wcm90b3R5cGU9bmV3IGIsVi5wcm90b3R5cGUuY29uc3RydWN0b3I9Vn1mdW5jdGlvbiB3KFYscCxiKXtpZih3LmlzQk4oVikpcmV0dXJuIFY7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9''@;'; put 'put ''PVYmJigoImxlIj09PXB8fCJiZSI9PT1wKSYmKGI9cCxwPTEwKSx0aGlzLl9pbml0KFZ8fDAscHx8MTAsYnx8ImJlIikpfXZhciBQOyJvYmplY3QiPT10eXBlb2YgST9JLmV4cG9ydHM9dzp5LkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e1A9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVv''@;'; put 'put ''ZiB3aW5kb3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOl8oNTU2OCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKFYscCl7dmFyIGI9Vi5jaGFyQ29kZUF0KHApO3JldHVybiBiPj02NSYmYjw9NzA/Yi01NTpiPj05NyYmYjw9MTAyP2ItODc6Yi00OCYxNX1mdW5jdGlvbiBPKFYscCxiKXt2''@;'; put 'put ''YXIgeD1GKFYsYik7cmV0dXJuIGItMT49cCYmKHh8PUYoVixiLTEpPDw0KSx4fWZ1bmN0aW9uIHooVixwLGIseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1pbihWLmxlbmd0aCxiKSxIPXA7SDxUO0grKyl7dmFyIGo9Vi5jaGFyQ29kZUF0KEgpLTQ4O0MqPXgsQys9aj49NDk/ai00OSsxMDpqPj0x''@;'; put 'put ''Nz9qLTE3KzEwOmp9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9uKHApe3JldHVybiBwIGluc3RhbmNlb2Ygd3x8bnVsbCE9PXAmJiJvYmplY3QiPT10eXBlb2YgcCYmcC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkocC53b3Jkcyl9LHcubWF4PWZ1bmN0''@;'; put 'put ''aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPjA/cDpifSx3Lm1pbj1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKTwwP3A6Yn0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24ocCxiLHgpe2lmKCJudW1iZXIiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5pdE51bWJlcihwLGIseCk7aWYo''@;'; put 'put ''Im9iamVjdCI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0QXJyYXkocCxiLHgpOyJoZXgiPT09YiYmKGI9MTYpLGcoYj09PSgwfGIpJiZiPj0yJiZiPD0zNik7dmFyIEM9MDsiLSI9PT0ocD1wLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlzLm5lZ2F0aXZl''@;'; put 'put ''PTEpLEM8cC5sZW5ndGgmJigxNj09PWI/dGhpcy5fcGFyc2VIZXgocCxDLHgpOih0aGlzLl9wYXJzZUJhc2UocCxiLEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihwLGIseCl7cDwwJiYo''@;'; put 'put ''dGhpcy5uZWdhdGl2ZT0xLHA9LXApLHA8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnBdLHRoaXMubGVuZ3RoPTEpOnA8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooZyhwPDkwMDcxOTky''@;'; put 'put ''NTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnAscC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24ocCxiLHgpe2lmKGcoIm51''@;'; put 'put ''bWJlciI9PXR5cGVvZiBwLmxlbmd0aCkscC5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwocC5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5s''@;'; put 'put ''ZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxILGo9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MtMV08PDh8cFtDLTJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3''@;'; put 'put ''MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtlbHNlIGlmKCJsZSI9PT14KWZvcihDPTAsVD0wO0M8cC5sZW5ndGg7Qys9Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQysxXTw8OHxwW0MrMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4''@;'; put 'put ''NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihwLGIseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChwLmxlbmd0aC1iKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZh''@;'; put 'put ''ciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBqLFQ9MCxIPTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMTtDPj1iO0MtPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1q''@;'; put 'put ''Pj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0ocC5sZW5ndGgtYiklMj09MD9iKzE6YjtDPHAubGVuZ3RoO0MrPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7dGhpcy5zdHJpcCgpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHAsYix4KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEwODg2MztUKj1iKUMrKztDLS0sVD1UL2J8MDtmb3IodmFyIEg9cC5sZW5ndGgteCxqPUglQyxFPU1hdGgubWluKEgsSC1qKSt4LG09MCxB''@;'; put 'put ''PXg7QTxFO0ErPUMpbT16KHAsQSxBK0MsYiksdGhpcy5pbXVsbihUKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKTtpZigwIT09ail7dmFyIG9lPTE7Zm9yKG09eihwLEEscC5sZW5ndGgsYiksQT0wO0E8ajtBKyspb2UqPWI7dGhpcy5p''@;'; put 'put ''bXVsbihvZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHApe3Aud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3Ro''@;'; put 'put ''O2IrKylwLndvcmRzW2JdPXRoaXMud29yZHNbYl07cC5sZW5ndGg9dGhpcy5sZW5ndGgscC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHAucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkocCkscH0sdy5w''@;'; put 'put ''cm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHA7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3Ro''@;'; put 'put ''LTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUuaW5zcGVjdD1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgTj1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIw''@;'; put 'put ''MDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxMPVswLDAsMjUsMTYsMTIs''@;'; put 'put ''MTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEs9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4''@;'; put 'put ''MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1''@;'; put 'put ''NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVyhWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmU7dmFyIHg9Vi5sZW5ndGgrcC5sZW5ndGh8MDtiLmxlbmd0aD14LHg9eC0xfDA7dmFyIEM9MHxWLndvcmRzWzBdLFQ9MHxwLndv''@;'; put 'put ''cmRzWzBdLEg9QypULEU9SC82NzEwODg2NHwwO2Iud29yZHNbMF09NjcxMDg4NjMmSDtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2LG9lPTY3MTA4ODYzJkUsdGU9TWF0aC5taW4obSxwLmxlbmd0aC0xKSxzZT1NYXRoLm1heCgwLG0tVi5sZW5ndGgrMSk7c2U8PXRlO3Nl''@;'; put 'put ''KyspQSs9KEg9KEM9MHxWLndvcmRzW20tc2V8MF0pKihUPTB8cC53b3Jkc1tzZV0pK29lKS82NzEwODg2NHwwLG9lPTY3MTA4ODYzJkg7Yi53b3Jkc1ttXT0wfG9lLEU9MHxBfXJldHVybiAwIT09RT9iLndvcmRzW21dPTB8RTpiLmxlbmd0aC0tLGIuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0''@;'; put 'put ''cmluZz1mdW5jdGlvbihwLGIpe3ZhciB4O2lmKGI9MHxifHwxLDE2PT09KHA9cHx8MTApfHwiaGV4Ij09PXApe3g9IiI7Zm9yKHZhciBDPTAsVD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9dGhpcy53b3Jkc1tIXSxFPSgxNjc3NzIxNSYoajw8Q3xUKSkudG9TdHJpbmcoMTYpO1Q9''@;'; put 'put ''aj4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2LEgtLSkseD0wIT09VHx8SCE9PXRoaXMubGVuZ3RoLTE/Tls2LUUubGVuZ3RoXStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygxNikreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVn''@;'; put 'put ''YXRpdmUmJih4PSItIit4KSx4fWlmKHA9PT0oMHxwKSYmcD49MiYmcDw9MzYpe3ZhciBtPUxbcF0sQT1LW3BdO3g9IiI7dmFyIG9lPXRoaXMuY2xvbmUoKTtmb3Iob2UubmVnYXRpdmU9MDshb2UuaXNaZXJvKCk7KXt2YXIgdGU9b2UubW9kbihBKS50b1N0cmluZyhwKTt4PShvZT1vZS5pZGl2''@;'; put 'put ''bihBKSkuaXNaZXJvKCk/dGUreDpOW20tdGUubGVuZ3RoXSt0ZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWcoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQg''@;'; put 'put ''MzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgcD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/cCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3ArPTQ1MDM1OTk2MjczNzA0OTYrNjcx''@;'; put 'put ''MDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZnKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tcDpwfSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9''@;'; put 'put ''LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHAsYil7cmV0dXJuIGcodHlwZW9mIFA8InUiKSx0aGlzLnRvQXJyYXlMaWtlKFAscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LHAsYil9LHcucHJvdG90eXBl''@;'; put 'put ''LnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz10aGlzLmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7ZyhDPD1ULCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksZyhUPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3Ry''@;'; put 'put ''aXAoKTt2YXIgRSxtLEg9ImxlIj09PWIsaj1uZXcgcChUKSxBPXRoaXMuY2xvbmUoKTtpZihIKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW21dPUU7Zm9yKDttPFQ7bSsrKWpbbV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsrKWpbbV09MDtm''@;'; put 'put ''b3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW1QtbS0xXT1FfXJldHVybiBqfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24ocCl7cmV0dXJuIDMyLU1hdGguY2x6MzIocCl9OmZ1bmN0aW9uKHApe3ZhciBiPXAseD0w''@;'; put 'put ''O3JldHVybiBiPj00MDk2JiYoeCs9MTMsYj4+Pj0xMyksYj49NjQmJih4Kz03LGI+Pj49NyksYj49OCYmKHgrPTQsYj4+Pj00KSxiPj0yJiYoeCs9MixiPj4+PTIpLHgrYn0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHApe2lmKDA9PT1wKXJldHVybiAyNjt2YXIgYj1wLHg9MDty''@;'; put 'put ''ZXR1cm4gODE5MSZifHwoeCs9MTMsYj4+Pj0xMyksMTI3JmJ8fCh4Kz03LGI+Pj49NyksMTUmYnx8KHgrPTQsYj4+Pj00KSwzJmJ8fCh4Kz0yLGI+Pj49MiksMSZifHx4KysseH0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5fY291bnRCaXRzKHRoaXMud29y''@;'; put 'put ''ZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrYn0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgcD0wLGI9MDtiPHRoaXMubGVuZ3RoO2IrKyl7dmFyIHg9dGhpcy5femVyb0JpdHModGhp''@;'; put 'put ''cy53b3Jkc1tiXSk7aWYocCs9eCwyNiE9PXgpYnJlYWt9cmV0dXJuIHB9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gMCE9PXRoaXMubmVn''@;'; put 'put ''YXRpdmU/dGhpcy5hYnMoKS5pbm90bihwKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnRlc3RuKHAtMSk/dGhpcy5ub3RuKHApLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVn''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhp''@;'; put 'put ''c30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHAubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBiPTA7YjxwLmxlbmd0aDtiKyspdGhpcy53b3Jkc1tiXT10aGlzLndvcmRzW2JdfHAud29yZHNbYl07cmV0dXJuIHRoaXMu''@;'; put 'put ''c3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdW9yKHApfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihwKTpw''@;'; put 'put ''LmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHApOnAuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihwKXt2YXIgYjtiPXRoaXMubGVu''@;'; put 'put ''Z3RoPnAubGVuZ3RoP3A6dGhpcztmb3IodmFyIHg9MDt4PGIubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPXRoaXMud29yZHNbeF0mcC53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHApe3JldHVybiBn''@;'; put 'put ''KCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChwKX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChwKTpwLmNsb25lKCkuaWFuZCh0aGlzKX0sdy5wcm90b3R5cGUudWFuZD1mdW5j''@;'; put 'put ''dGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHApOnAuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24ocCl7dmFyIGIseDt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oYj10aGlzLHg9cCk6KGI9cCx4PXRoaXMp''@;'; put 'put ''O2Zvcih2YXIgQz0wO0M8eC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109Yi53b3Jkc1tDXV54LndvcmRzW0NdO2lmKHRoaXMhPT1iKWZvcig7QzxiLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcu''@;'; put 'put ''cHJvdG90eXBlLml4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1eG9yKHApfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHApOnAuY2xvbmUo''@;'; put 'put ''KS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IocCk6cC5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2Yg''@;'; put 'put ''cCYmcD49MCk7dmFyIGI9MHxNYXRoLmNlaWwocC8yNikseD1wJTI2O3RoaXMuX2V4cGFuZChiKSx4PjAmJmItLTtmb3IodmFyIEM9MDtDPGI7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmfnRoaXMud29yZHNbQ107cmV0dXJuIHg+MCYmKHRoaXMud29yZHNbQ109fnRoaXMud29yZHNbQ10m''@;'; put 'put ''NjcxMDg4NjM+PjI2LXgpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHApfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHAsYil7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciB4PXAvMjZ8MCxDPXAl''@;'; put 'put ''MjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF09Yj90aGlzLndvcmRzW3hdfDE8PEM6dGhpcy53b3Jkc1t4XSZ+KDE8PEMpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwKXt2YXIgYix4LEM7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1w''@;'; put 'put ''Lm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZSlyZXR1cm4gcC5uZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKHApLHAubmVnYXRpdmU9''@;'; put 'put ''MSxiLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPnAubGVuZ3RoPyh4PXRoaXMsQz1wKTooeD1wLEM9dGhpcyk7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKGI9KDB8eC53b3Jkc1tIXSkrKDB8Qy53b3Jkc1tIXSkrVCksVD1iPj4+MjY7Zm9y''@;'; put 'put ''KDswIT09VCYmSDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKStUKSxUPWI+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1ULHRoaXMubGVuZ3RoKys7ZWxzZSBpZih4IT09dGhpcylm''@;'; put 'put ''b3IoO0g8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09eC53b3Jkc1tIXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHApe3ZhciBiO3JldHVybiAwIT09cC5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHAubmVnYXRpdmU9MCxiPXRoaXMuc3ViKHApLHAubmVn''@;'; put 'put ''YXRpdmVePTEsYik6MD09PXAubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsYj1wLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsYik6dGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQocCk6cC5jbG9uZSgpLmlhZGQodGhpcyl9LHcucHJv''@;'; put 'put ''dG90eXBlLmlzdWI9ZnVuY3Rpb24ocCl7aWYoMCE9PXAubmVnYXRpdmUpe3AubmVnYXRpdmU9MDt2YXIgYj10aGlzLmlhZGQocCk7cmV0dXJuIHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHAp''@;'; put 'put ''LHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBDLFQseD10aGlzLmNtcChwKTtpZigwPT09eClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7eD4wPyhDPXRoaXMsVD1wKTooQz1wLFQ9dGhpcyk7Zm9yKHZhciBIPTAs''@;'; put 'put ''aj0wO2o8VC5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSktKDB8VC53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtmb3IoOzAhPT1IJiZqPEMubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJmI7''@;'; put 'put ''aWYoMD09PUgmJmo8Qy5sZW5ndGgmJkMhPT10aGlzKWZvcig7ajxDLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1DLndvcmRzW2pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxqKSxDIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHApfTt2YXIgWT1mdW5jdGlvbihwLGIseCl7dmFyIEUsbSxBLEM9cC53b3JkcyxUPWIud29yZHMsSD14LndvcmRzLGo9MCxvZT0wfENbMF0sdGU9ODE5MSZvZSxzZT1vZT4+PjEzLHdlPTB8Q1sxXSxVZT04''@;'; put 'put ''MTkxJndlLEplPXdlPj4+MTMsYXQ9MHxDWzJdLE1lPTgxOTEmYXQsdmU9YXQ+Pj4xMyxYZT0wfENbM10samU9ODE5MSZYZSxEZT1YZT4+PjEzLEZlPTB8Q1s0XSxSZT04MTkxJkZlLEllPUZlPj4+MTMsVmU9MHxDWzVdLGtlPTgxOTEmVmUsQWU9VmU+Pj4xMyxfdD0wfENbNl0scnQ9ODE5MSZf''@;'; put 'put ''dCxRZT1fdD4+PjEzLGRuPTB8Q1s3XSx5dD04MTkxJmRuLE10PWRuPj4+MTMsRHQ9MHxDWzhdLGl0PTgxOTEmRHQsJGU9RHQ+Pj4xMyx0dD0wfENbOV0sSGU9ODE5MSZ0dCxkdD10dD4+PjEzLHF0PTB8VFswXSxSdD04MTkxJnF0LFB0PXF0Pj4+MTMsYWk9MHxUWzFdLFF0PTgxOTEmYWksc249''@;'; put 'put ''YWk+Pj4xMyxSaT0wfFRbMl0sZm49ODE5MSZSaSxmdD1SaT4+PjEzLFByPTB8VFszXSxadD04MTkxJlByLEF0PVByPj4+MTMsTG49MHxUWzRdLHN0PTgxOTEmTG4senQ9TG4+Pj4xMyxuaT0wfFRbNV0sV2U9ODE5MSZuaSxUdD1uaT4+PjEzLHJyPTB8VFs2XSxodD04MTkxJnJyLHh0PXJyPj4+''@;'; put 'put ''MTMsQm49MHxUWzddLG9uPTgxOTEmQm4sanQ9Qm4+Pj4xMyxkaT0wfFRbOF0sY249ODE5MSZkaSxwbj1kaT4+PjEzLElpPTB8VFs5XSxYdD04MTkxJklpLGVuPUlpPj4+MTM7eC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9MTk7dmFyIGhvPShqKyhFPU1hdGguaW11''@;'; put 'put ''bCh0ZSxSdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwodGUsUHQpKStNYXRoLmltdWwoc2UsUnQpfDApKTw8MTMpfDA7aj0oKEE9TWF0aC5pbXVsKHNlLFB0KSkrKG0+Pj4xMyl8MCkrKGhvPj4+MjYpfDAsaG8mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFVlLFJ0KSxtPShtPU1hdGguaW11''@;'; put 'put ''bChVZSxQdCkpK01hdGguaW11bChKZSxSdCl8MCxBPU1hdGguaW11bChKZSxQdCk7dmFyIE1pPShqKyhFPUUrTWF0aC5pbXVsKHRlLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsc24pfDApK01hdGguaW11bChzZSxRdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11''@;'; put 'put ''bChzZSxzbil8MCkrKG0+Pj4xMyl8MCkrKE1pPj4+MjYpfDAsTWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE1lLFJ0KSxtPShtPU1hdGguaW11bChNZSxQdCkpK01hdGguaW11bCh2ZSxSdCl8MCxBPU1hdGguaW11bCh2ZSxQdCksRT1FK01hdGguaW11bChVZSxRdCl8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKFVlLHNuKXwwKStNYXRoLmltdWwoSmUsUXQpfDAsQT1BK01hdGguaW11bChKZSxzbil8MDt2YXIgcHI9KGorKEU9RStNYXRoLmltdWwodGUsZm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmdCl8MCkrTWF0aC5pbXVsKHNlLGZuKXwwKSk8PDEzKXwwO2o9KChBPUEr''@;'; put 'put ''TWF0aC5pbXVsKHNlLGZ0KXwwKSsobT4+PjEzKXwwKSsocHI+Pj4yNil8MCxwciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoamUsUnQpLG09KG09TWF0aC5pbXVsKGplLFB0KSkrTWF0aC5pbXVsKERlLFJ0KXwwLEE9TWF0aC5pbXVsKERlLFB0KSxFPUUrTWF0aC5pbXVsKE1lLFF0KXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwoTWUsc24pfDApK01hdGguaW11bCh2ZSxRdCl8MCxBPUErTWF0aC5pbXVsKHZlLHNuKXwwLEU9RStNYXRoLmltdWwoVWUsZm4pfDAsbT0obT1tK01hdGguaW11bChVZSxmdCl8MCkrTWF0aC5pbXVsKEplLGZuKXwwLEE9QStNYXRoLmltdWwoSmUsZnQpfDA7dmFyIFduPShq''@;'; put 'put ''KyhFPUUrTWF0aC5pbXVsKHRlLFp0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsQXQpfDApK01hdGguaW11bChzZSxadCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxBdCl8MCkrKG0+Pj4xMyl8MCkrKFduPj4+MjYpfDAsV24mPTY3MTA4ODYzLEU9TWF0aC5p''@;'; put 'put ''bXVsKFJlLFJ0KSxtPShtPU1hdGguaW11bChSZSxQdCkpK01hdGguaW11bChJZSxSdCl8MCxBPU1hdGguaW11bChJZSxQdCksRT1FK01hdGguaW11bChqZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLHNuKXwwKStNYXRoLmltdWwoRGUsUXQpfDAsQT1BK01hdGguaW11bChEZSxzbil8MCxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKE1lLGZuKXwwLG09KG09bStNYXRoLmltdWwoTWUsZnQpfDApK01hdGguaW11bCh2ZSxmbil8MCxBPUErTWF0aC5pbXVsKHZlLGZ0KXwwLEU9RStNYXRoLmltdWwoVWUsWnQpfDAsbT0obT1tK01hdGguaW11bChVZSxBdCl8MCkrTWF0aC5pbXVsKEplLFp0KXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoSmUsQXQpfDA7dmFyIEtpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHN0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsenQpfDApK01hdGguaW11bChzZSxzdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx6dCl8MCkrKG0+Pj4xMyl8MCkrKEtpPj4+''@;'; put 'put ''MjYpfDAsS2kmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGtlLFJ0KSxtPShtPU1hdGguaW11bChrZSxQdCkpK01hdGguaW11bChBZSxSdCl8MCxBPU1hdGguaW11bChBZSxQdCksRT1FK01hdGguaW11bChSZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHNuKXwwKStNYXRoLmltdWwoSWUsUXQp''@;'; put 'put ''fDAsQT1BK01hdGguaW11bChJZSxzbil8MCxFPUUrTWF0aC5pbXVsKGplLGZuKXwwLG09KG09bStNYXRoLmltdWwoamUsZnQpfDApK01hdGguaW11bChEZSxmbil8MCxBPUErTWF0aC5pbXVsKERlLGZ0KXwwLEU9RStNYXRoLmltdWwoTWUsWnQpfDAsbT0obT1tK01hdGguaW11bChNZSxBdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKHZlLFp0KXwwLEE9QStNYXRoLmltdWwodmUsQXQpfDAsRT1FK01hdGguaW11bChVZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoSmUsc3QpfDAsQT1BK01hdGguaW11bChKZSx6dCl8MDt2YXIgUXI9KGorKEU9RStNYXRoLmltdWwodGUs''@;'; put 'put ''V2UpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxUdCl8MCkrTWF0aC5pbXVsKHNlLFdlKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFR0KXwwKSsobT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxRciY9NjcxMDg4NjMsRT1NYXRoLmltdWwocnQsUnQpLG09KG09TWF0''@;'; put 'put ''aC5pbXVsKHJ0LFB0KSkrTWF0aC5pbXVsKFFlLFJ0KXwwLEE9TWF0aC5pbXVsKFFlLFB0KSxFPUUrTWF0aC5pbXVsKGtlLFF0KXwwLG09KG09bStNYXRoLmltdWwoa2Usc24pfDApK01hdGguaW11bChBZSxRdCl8MCxBPUErTWF0aC5pbXVsKEFlLHNuKXwwLEU9RStNYXRoLmltdWwoUmUsZm4p''@;'; put 'put ''fDAsbT0obT1tK01hdGguaW11bChSZSxmdCl8MCkrTWF0aC5pbXVsKEllLGZuKXwwLEE9QStNYXRoLmltdWwoSWUsZnQpfDAsRT1FK01hdGguaW11bChqZSxadCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLEF0KXwwKStNYXRoLmltdWwoRGUsWnQpfDAsQT1BK01hdGguaW11bChEZSxBdCl8MCxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKE1lLHN0KXwwLG09KG09bStNYXRoLmltdWwoTWUsenQpfDApK01hdGguaW11bCh2ZSxzdCl8MCxBPUErTWF0aC5pbXVsKHZlLHp0KXwwLEU9RStNYXRoLmltdWwoVWUsV2UpfDAsbT0obT1tK01hdGguaW11bChVZSxUdCl8MCkrTWF0aC5pbXVsKEplLFdlKXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoSmUsVHQpfDA7dmFyIEpyPShqKyhFPUUrTWF0aC5pbXVsKHRlLGh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUseHQpfDApK01hdGguaW11bChzZSxodCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx4dCl8MCkrKG0+Pj4xMyl8MCkrKEpyPj4+''@;'; put 'put ''MjYpfDAsSnImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHl0LFJ0KSxtPShtPU1hdGguaW11bCh5dCxQdCkpK01hdGguaW11bChNdCxSdCl8MCxBPU1hdGguaW11bChNdCxQdCksRT1FK01hdGguaW11bChydCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LHNuKXwwKStNYXRoLmltdWwoUWUsUXQp''@;'; put 'put ''fDAsQT1BK01hdGguaW11bChRZSxzbil8MCxFPUUrTWF0aC5pbXVsKGtlLGZuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZnQpfDApK01hdGguaW11bChBZSxmbil8MCxBPUErTWF0aC5pbXVsKEFlLGZ0KXwwLEU9RStNYXRoLmltdWwoUmUsWnQpfDAsbT0obT1tK01hdGguaW11bChSZSxBdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKEllLFp0KXwwLEE9QStNYXRoLmltdWwoSWUsQXQpfDAsRT1FK01hdGguaW11bChqZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLHp0KXwwKStNYXRoLmltdWwoRGUsc3QpfDAsQT1BK01hdGguaW11bChEZSx6dCl8MCxFPUUrTWF0aC5pbXVsKE1lLFdlKXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwoTWUsVHQpfDApK01hdGguaW11bCh2ZSxXZSl8MCxBPUErTWF0aC5pbXVsKHZlLFR0KXwwLEU9RStNYXRoLmltdWwoVWUsaHQpfDAsbT0obT1tK01hdGguaW11bChVZSx4dCl8MCkrTWF0aC5pbXVsKEplLGh0KXwwLEE9QStNYXRoLmltdWwoSmUseHQpfDA7dmFyIEJpPShq''@;'; put 'put ''KyhFPUUrTWF0aC5pbXVsKHRlLG9uKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsanQpfDApK01hdGguaW11bChzZSxvbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxqdCl8MCkrKG0+Pj4xMyl8MCkrKEJpPj4+MjYpfDAsQmkmPTY3MTA4ODYzLEU9TWF0aC5p''@;'; put 'put ''bXVsKGl0LFJ0KSxtPShtPU1hdGguaW11bChpdCxQdCkpK01hdGguaW11bCgkZSxSdCl8MCxBPU1hdGguaW11bCgkZSxQdCksRT1FK01hdGguaW11bCh5dCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHNuKXwwKStNYXRoLmltdWwoTXQsUXQpfDAsQT1BK01hdGguaW11bChNdCxzbil8MCxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKHJ0LGZuKXwwLG09KG09bStNYXRoLmltdWwocnQsZnQpfDApK01hdGguaW11bChRZSxmbil8MCxBPUErTWF0aC5pbXVsKFFlLGZ0KXwwLEU9RStNYXRoLmltdWwoa2UsWnQpfDAsbT0obT1tK01hdGguaW11bChrZSxBdCl8MCkrTWF0aC5pbXVsKEFlLFp0KXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoQWUsQXQpfDAsRT1FK01hdGguaW11bChSZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHp0KXwwKStNYXRoLmltdWwoSWUsc3QpfDAsQT1BK01hdGguaW11bChJZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGplLFdlKXwwLG09KG09bStNYXRoLmltdWwoamUsVHQpfDApK01hdGgu''@;'; put 'put ''aW11bChEZSxXZSl8MCxBPUErTWF0aC5pbXVsKERlLFR0KXwwLEU9RStNYXRoLmltdWwoTWUsaHQpfDAsbT0obT1tK01hdGguaW11bChNZSx4dCl8MCkrTWF0aC5pbXVsKHZlLGh0KXwwLEE9QStNYXRoLmltdWwodmUseHQpfDAsRT1FK01hdGguaW11bChVZSxvbil8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKFVlLGp0KXwwKStNYXRoLmltdWwoSmUsb24pfDAsQT1BK01hdGguaW11bChKZSxqdCl8MDt2YXIgVmk9KGorKEU9RStNYXRoLmltdWwodGUsY24pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxwbil8MCkrTWF0aC5pbXVsKHNlLGNuKXwwKSk8PDEzKXwwO2o9KChBPUEr''@;'; put 'put ''TWF0aC5pbXVsKHNlLHBuKXwwKSsobT4+PjEzKXwwKSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUnQpLG09KG09TWF0aC5pbXVsKEhlLFB0KSkrTWF0aC5pbXVsKGR0LFJ0KXwwLEE9TWF0aC5pbXVsKGR0LFB0KSxFPUUrTWF0aC5pbXVsKGl0LFF0KXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwoaXQsc24pfDApK01hdGguaW11bCgkZSxRdCl8MCxBPUErTWF0aC5pbXVsKCRlLHNuKXwwLEU9RStNYXRoLmltdWwoeXQsZm4pfDAsbT0obT1tK01hdGguaW11bCh5dCxmdCl8MCkrTWF0aC5pbXVsKE10LGZuKXwwLEE9QStNYXRoLmltdWwoTXQsZnQpfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bChydCxadCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LEF0KXwwKStNYXRoLmltdWwoUWUsWnQpfDAsQT1BK01hdGguaW11bChRZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGtlLHN0KXwwLG09KG09bStNYXRoLmltdWwoa2UsenQpfDApK01hdGguaW11bChBZSxzdCl8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KEFlLHp0KXwwLEU9RStNYXRoLmltdWwoUmUsV2UpfDAsbT0obT1tK01hdGguaW11bChSZSxUdCl8MCkrTWF0aC5pbXVsKEllLFdlKXwwLEE9QStNYXRoLmltdWwoSWUsVHQpfDAsRT1FK01hdGguaW11bChqZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLHh0KXwwKStNYXRoLmltdWwoRGUs''@;'; put 'put ''aHQpfDAsQT1BK01hdGguaW11bChEZSx4dCl8MCxFPUUrTWF0aC5pbXVsKE1lLG9uKXwwLG09KG09bStNYXRoLmltdWwoTWUsanQpfDApK01hdGguaW11bCh2ZSxvbil8MCxBPUErTWF0aC5pbXVsKHZlLGp0KXwwLEU9RStNYXRoLmltdWwoVWUsY24pfDAsbT0obT1tK01hdGguaW11bChVZSxw''@;'; put 'put ''bil8MCkrTWF0aC5pbXVsKEplLGNuKXwwLEE9QStNYXRoLmltdWwoSmUscG4pfDA7dmFyIElvPShqKyhFPUUrTWF0aC5pbXVsKHRlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZW4pfDApK01hdGguaW11bChzZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11''@;'; put 'put ''bChzZSxlbil8MCkrKG0+Pj4xMyl8MCkrKElvPj4+MjYpfDAsSW8mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFF0KSxtPShtPU1hdGguaW11bChIZSxzbikpK01hdGguaW11bChkdCxRdCl8MCxBPU1hdGguaW11bChkdCxzbiksRT1FK01hdGguaW11bChpdCxmbil8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKGl0LGZ0KXwwKStNYXRoLmltdWwoJGUsZm4pfDAsQT1BK01hdGguaW11bCgkZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFp0KXwwLG09KG09bStNYXRoLmltdWwoeXQsQXQpfDApK01hdGguaW11bChNdCxadCl8MCxBPUErTWF0aC5pbXVsKE10LEF0KXwwLEU9RStNYXRoLmltdWwocnQs''@;'; put 'put ''c3QpfDAsbT0obT1tK01hdGguaW11bChydCx6dCl8MCkrTWF0aC5pbXVsKFFlLHN0KXwwLEE9QStNYXRoLmltdWwoUWUsenQpfDAsRT1FK01hdGguaW11bChrZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLFR0KXwwKStNYXRoLmltdWwoQWUsV2UpfDAsQT1BK01hdGguaW11bChBZSxUdCl8''@;'; put 'put ''MCxFPUUrTWF0aC5pbXVsKFJlLGh0KXwwLG09KG09bStNYXRoLmltdWwoUmUseHQpfDApK01hdGguaW11bChJZSxodCl8MCxBPUErTWF0aC5pbXVsKEllLHh0KXwwLEU9RStNYXRoLmltdWwoamUsb24pfDAsbT0obT1tK01hdGguaW11bChqZSxqdCl8MCkrTWF0aC5pbXVsKERlLG9uKXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoRGUsanQpfDAsRT1FK01hdGguaW11bChNZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHBuKXwwKStNYXRoLmltdWwodmUsY24pfDAsQT1BK01hdGguaW11bCh2ZSxwbil8MDt2YXIgT3I9KGorKEU9RStNYXRoLmltdWwoVWUsWHQpfDApfDApKygoODE5MSYobT0obT1t''@;'; put 'put ''K01hdGguaW11bChVZSxlbil8MCkrTWF0aC5pbXVsKEplLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEplLGVuKXwwKSsobT4+PjEzKXwwKSsoT3I+Pj4yNil8MCxPciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsZm4pLG09KG09TWF0aC5pbXVsKEhlLGZ0KSkrTWF0aC5pbXVs''@;'; put 'put ''KGR0LGZuKXwwLEE9TWF0aC5pbXVsKGR0LGZ0KSxFPUUrTWF0aC5pbXVsKGl0LFp0KXwwLG09KG09bStNYXRoLmltdWwoaXQsQXQpfDApK01hdGguaW11bCgkZSxadCl8MCxBPUErTWF0aC5pbXVsKCRlLEF0KXwwLEU9RStNYXRoLmltdWwoeXQsc3QpfDAsbT0obT1tK01hdGguaW11bCh5dCx6''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKE10LHN0KXwwLEE9QStNYXRoLmltdWwoTXQsenQpfDAsRT1FK01hdGguaW11bChydCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LFR0KXwwKStNYXRoLmltdWwoUWUsV2UpfDAsQT1BK01hdGguaW11bChRZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGtlLGh0KXwwLG09''@;'; put 'put ''KG09bStNYXRoLmltdWwoa2UseHQpfDApK01hdGguaW11bChBZSxodCl8MCxBPUErTWF0aC5pbXVsKEFlLHh0KXwwLEU9RStNYXRoLmltdWwoUmUsb24pfDAsbT0obT1tK01hdGguaW11bChSZSxqdCl8MCkrTWF0aC5pbXVsKEllLG9uKXwwLEE9QStNYXRoLmltdWwoSWUsanQpfDAsRT1FK01h''@;'; put 'put ''dGguaW11bChqZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGplLHBuKXwwKStNYXRoLmltdWwoRGUsY24pfDAsQT1BK01hdGguaW11bChEZSxwbil8MDt2YXIgWWk9KGorKEU9RStNYXRoLmltdWwoTWUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChNZSxlbil8MCkrTWF0aC5p''@;'; put 'put ''bXVsKHZlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHZlLGVuKXwwKSsobT4+PjEzKXwwKSsoWWk+Pj4yNil8MCxZaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsWnQpLG09KG09TWF0aC5pbXVsKEhlLEF0KSkrTWF0aC5pbXVsKGR0LFp0KXwwLEE9TWF0aC5pbXVsKGR0LEF0''@;'; put 'put ''KSxFPUUrTWF0aC5pbXVsKGl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCgkZSxzdCl8MCxBPUErTWF0aC5pbXVsKCRlLHp0KXwwLEU9RStNYXRoLmltdWwoeXQsV2UpfDAsbT0obT1tK01hdGguaW11bCh5dCxUdCl8MCkrTWF0aC5pbXVsKE10LFdlKXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoTXQsVHQpfDAsRT1FK01hdGguaW11bChydCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LHh0KXwwKStNYXRoLmltdWwoUWUsaHQpfDAsQT1BK01hdGguaW11bChRZSx4dCl8MCxFPUUrTWF0aC5pbXVsKGtlLG9uKXwwLG09KG09bStNYXRoLmltdWwoa2UsanQpfDApK01h''@;'; put 'put ''dGguaW11bChBZSxvbil8MCxBPUErTWF0aC5pbXVsKEFlLGp0KXwwLEU9RStNYXRoLmltdWwoUmUsY24pfDAsbT0obT1tK01hdGguaW11bChSZSxwbil8MCkrTWF0aC5pbXVsKEllLGNuKXwwLEE9QStNYXRoLmltdWwoSWUscG4pfDA7dmFyIGdvPShqKyhFPUUrTWF0aC5pbXVsKGplLFh0KXww''@;'; put 'put ''KXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoamUsZW4pfDApK01hdGguaW11bChEZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChEZSxlbil8MCkrKG0+Pj4xMyl8MCkrKGdvPj4+MjYpfDAsZ28mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHN0KSxtPShtPU1hdGguaW11''@;'; put 'put ''bChIZSx6dCkpK01hdGguaW11bChkdCxzdCl8MCxBPU1hdGguaW11bChkdCx6dCksRT1FK01hdGguaW11bChpdCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFR0KXwwKStNYXRoLmltdWwoJGUsV2UpfDAsQT1BK01hdGguaW11bCgkZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHl0LGh0KXwwLG09''@;'; put 'put ''KG09bStNYXRoLmltdWwoeXQseHQpfDApK01hdGguaW11bChNdCxodCl8MCxBPUErTWF0aC5pbXVsKE10LHh0KXwwLEU9RStNYXRoLmltdWwocnQsb24pfDAsbT0obT1tK01hdGguaW11bChydCxqdCl8MCkrTWF0aC5pbXVsKFFlLG9uKXwwLEE9QStNYXRoLmltdWwoUWUsanQpfDAsRT1FK01h''@;'; put 'put ''dGguaW11bChrZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHBuKXwwKStNYXRoLmltdWwoQWUsY24pfDAsQT1BK01hdGguaW11bChBZSxwbil8MDt2YXIgZXI9KGorKEU9RStNYXRoLmltdWwoUmUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChSZSxlbil8MCkrTWF0aC5p''@;'; put 'put ''bXVsKEllLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEllLGVuKXwwKSsobT4+PjEzKXwwKSsoZXI+Pj4yNil8MCxlciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV2UpLG09KG09TWF0aC5pbXVsKEhlLFR0KSkrTWF0aC5pbXVsKGR0LFdlKXwwLEE9TWF0aC5pbXVsKGR0LFR0''@;'; put 'put ''KSxFPUUrTWF0aC5pbXVsKGl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoaXQseHQpfDApK01hdGguaW11bCgkZSxodCl8MCxBPUErTWF0aC5pbXVsKCRlLHh0KXwwLEU9RStNYXRoLmltdWwoeXQsb24pfDAsbT0obT1tK01hdGguaW11bCh5dCxqdCl8MCkrTWF0aC5pbXVsKE10LG9uKXwwLEE9''@;'; put 'put ''QStNYXRoLmltdWwoTXQsanQpfDAsRT1FK01hdGguaW11bChydCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LHBuKXwwKStNYXRoLmltdWwoUWUsY24pfDAsQT1BK01hdGguaW11bChRZSxwbil8MDt2YXIgY289KGorKEU9RStNYXRoLmltdWwoa2UsWHQpfDApfDApKygoODE5MSYobT0obT1t''@;'; put 'put ''K01hdGguaW11bChrZSxlbil8MCkrTWF0aC5pbXVsKEFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEFlLGVuKXwwKSsobT4+PjEzKXwwKSsoY28+Pj4yNil8MCxjbyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaHQpLG09KG09TWF0aC5pbXVsKEhlLHh0KSkrTWF0aC5pbXVs''@;'; put 'put ''KGR0LGh0KXwwLEE9TWF0aC5pbXVsKGR0LHh0KSxFPUUrTWF0aC5pbXVsKGl0LG9uKXwwLG09KG09bStNYXRoLmltdWwoaXQsanQpfDApK01hdGguaW11bCgkZSxvbil8MCxBPUErTWF0aC5pbXVsKCRlLGp0KXwwLEU9RStNYXRoLmltdWwoeXQsY24pfDAsbT0obT1tK01hdGguaW11bCh5dCxw''@;'; put 'put ''bil8MCkrTWF0aC5pbXVsKE10LGNuKXwwLEE9QStNYXRoLmltdWwoTXQscG4pfDA7dmFyIF9vPShqKyhFPUUrTWF0aC5pbXVsKHJ0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwocnQsZW4pfDApK01hdGguaW11bChRZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11''@;'; put 'put ''bChRZSxlbil8MCkrKG0+Pj4xMyl8MCkrKF9vPj4+MjYpfDAsX28mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLG9uKSxtPShtPU1hdGguaW11bChIZSxqdCkpK01hdGguaW11bChkdCxvbil8MCxBPU1hdGguaW11bChkdCxqdCksRT1FK01hdGguaW11bChpdCxjbil8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKGl0LHBuKXwwKStNYXRoLmltdWwoJGUsY24pfDAsQT1BK01hdGguaW11bCgkZSxwbil8MDt2YXIgT289KGorKEU9RStNYXRoLmltdWwoeXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh5dCxlbil8MCkrTWF0aC5pbXVsKE10LFh0KXwwKSk8PDEzKXwwO2o9KChBPUEr''@;'; put 'put ''TWF0aC5pbXVsKE10LGVuKXwwKSsobT4+PjEzKXwwKSsoT28+Pj4yNil8MCxPbyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsY24pLG09KG09TWF0aC5pbXVsKEhlLHBuKSkrTWF0aC5pbXVsKGR0LGNuKXwwLEE9TWF0aC5pbXVsKGR0LHBuKTt2YXIgSG89KGorKEU9RStNYXRoLmltdWwoaXQs''@;'; put 'put ''WHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChpdCxlbil8MCkrTWF0aC5pbXVsKCRlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKCRlLGVuKXwwKSsobT4+PjEzKXwwKSsoSG8+Pj4yNil8MCxIbyY9NjcxMDg4NjM7dmFyIGVpPShqKyhFPU1hdGguaW11bChIZSxY''@;'; put 'put ''dCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwoSGUsZW4pKStNYXRoLmltdWwoZHQsWHQpfDApKTw8MTMpfDA7cmV0dXJuIGo9KChBPU1hdGguaW11bChkdCxlbikpKyhtPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxIWzBdPWhvLEhbMV09TWksSFsyXT1wcixIWzNdPVdu''@;'; put 'put ''LEhbNF09S2ksSFs1XT1RcixIWzZdPUpyLEhbN109QmksSFs4XT1WaSxIWzldPUlvLEhbMTBdPU9yLEhbMTFdPVlpLEhbMTJdPWdvLEhbMTNdPWVyLEhbMTRdPWNvLEhbMTVdPV9vLEhbMTZdPU9vLEhbMTddPUhvLEhbMThdPWVpLDAhPT1qJiYoSFsxOV09aix4Lmxlbmd0aCsrKSx4fTtmdW5j''@;'; put 'put ''dGlvbiBlZShWLHAsYil7cmV0dXJuKG5ldyBKKS5tdWxwKFYscCxiKX1mdW5jdGlvbiBKKFYscCl7dGhpcy54PVYsdGhpcy55PXB9TWF0aC5pbXVsfHwoWT1XKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5sZW5ndGgrcC5sZW5ndGg7cmV0dXJuIHg9MTA9''@;'; put 'put ''PT10aGlzLmxlbmd0aCYmMTA9PT1wLmxlbmd0aD9ZKHRoaXMscCxiKTpDPDYzP1codGhpcyxwLGIpOkM8MTAyND9mdW5jdGlvbiBYKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZSxiLmxlbmd0aD1WLmxlbmd0aCtwLmxlbmd0aDtmb3IodmFyIHg9MCxDPTAsVD0wO1Q8''@;'; put 'put ''Yi5sZW5ndGgtMTtUKyspe3ZhciBIPUM7Qz0wO2Zvcih2YXIgaj02NzEwODg2MyZ4LEU9TWF0aC5taW4oVCxwLmxlbmd0aC0xKSxtPU1hdGgubWF4KDAsVC1WLmxlbmd0aCsxKTttPD1FO20rKyl7dmFyIHNlPSgwfFYud29yZHNbVC1tXSkqKDB8cC53b3Jkc1ttXSksd2U9NjcxMDg4NjMmc2U7''@;'; put 'put ''aj02NzEwODg2MyYod2U9d2UranwwKSxDKz0oSD0oSD1IKyhzZS82NzEwODg2NHwwKXwwKSsod2U+Pj4yNil8MCk+Pj4yNixIJj02NzEwODg2M31iLndvcmRzW1RdPWoseD1ILEg9Q31yZXR1cm4gMCE9PXg/Yi53b3Jkc1tUXT14OmIubGVuZ3RoLS0sYi5zdHJpcCgpfSh0aGlzLHAsYik6ZWUo''@;'; put 'put ''dGhpcyxwLGIpLHh9LEoucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PXcucHJvdG90eXBlLl9jb3VudEJpdHMocCktMSxDPTA7QzxwO0MrKyliW0NdPXRoaXMucmV2QmluKEMseCxwKTtyZXR1cm4gYn0sSi5wcm90b3R5cGUucmV2QmluPWZ1''@;'; put 'put ''bmN0aW9uKHAsYix4KXtpZigwPT09cHx8cD09PXgtMSlyZXR1cm4gcDtmb3IodmFyIEM9MCxUPTA7VDxiO1QrKylDfD0oMSZwKTw8Yi1ULTEscD4+PTE7cmV0dXJuIEN9LEoucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24ocCxiLHgsQyxULEgpe2Zvcih2YXIgaj0wO2o8SDtqKyspQ1tqXT1i''@;'; put 'put ''W3Bbal1dLFRbal09eFtwW2pdXX0sSi5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXt0aGlzLnBlcm11dGUoSCxwLGIseCxDLFQpO2Zvcih2YXIgaj0xO2o8VDtqPDw9MSlmb3IodmFyIEU9ajw8MSxtPU1hdGguY29zKDIqTWF0aC5QSS9FKSxBPU1hdGguc2luKDIq''@;'; put 'put ''TWF0aC5QSS9FKSxvZT0wO29lPFQ7b2UrPUUpZm9yKHZhciB0ZT1tLHNlPUEsd2U9MDt3ZTxqO3dlKyspe3ZhciBVZT14W29lK3dlXSxKZT1DW29lK3dlXSxhdD14W29lK3dlK2pdLE1lPUNbb2Urd2Ural0sdmU9dGUqYXQtc2UqTWU7TWU9dGUqTWUrc2UqYXQseFtvZSt3ZV09VWUrKGF0PXZl''@;'; put 'put ''KSxDW29lK3dlXT1KZStNZSx4W29lK3dlK2pdPVVlLWF0LENbb2Urd2Ural09SmUtTWUsd2UhPT1FJiYodmU9bSp0ZS1BKnNlLHNlPW0qc2UrQSp0ZSx0ZT12ZSl9fSxKLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihwLGIpe3ZhciB4PTF8TWF0aC5tYXgoYixwKSxDPTEmeCxUPTA7''@;'; put 'put ''Zm9yKHg9eC8yfDA7eDt4Pj4+PTEpVCsrO3JldHVybiAxPDxUKzErQ30sSi5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHAsYix4KXtpZighKHg8PTEpKWZvcih2YXIgQz0wO0M8eC8yO0MrKyl7dmFyIFQ9cFtDXTtwW0NdPXBbeC1DLTFdLHBbeC1DLTFdPVQsVD1iW0NdLGJbQ109LWJb''@;'; put 'put ''eC1DLTFdLGJbeC1DLTFdPS1UfX0sSi5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTAsQz0wO0M8Yi8yO0MrKyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5kKHBbMipDKzFdL2IpK01hdGgucm91bmQocFsyKkNdL2IpK3g7cFtDXT02NzEwODg2MyZULHg9VDw2''@;'; put 'put ''NzEwODg2ND8wOlQvNjcxMDg4NjR8MH1yZXR1cm4gcH0sSi5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihwLGIseCxDKXtmb3IodmFyIFQ9MCxIPTA7SDxiO0grKyl4WzIqSF09ODE5MSYoVCs9MHxwW0hdKSx4WzIqSCsxXT04MTkxJihUPj4+PTEzKSxUPj4+PTEzO2ZvcihIPTIqYjtI''@;'; put 'put ''PEM7KytIKXhbSF09MDtnKDA9PT1UKSxnKCEoLTgxOTImVCkpfSxKLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD0wO3g8cDt4KyspYlt4XT0wO3JldHVybiBifSxKLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz0yKnRoaXMu''@;'; put 'put ''Z3Vlc3NMZW4xM2IocC5sZW5ndGgsYi5sZW5ndGgpLFQ9dGhpcy5tYWtlUkJUKEMpLEg9dGhpcy5zdHViKEMpLGo9bmV3IEFycmF5KEMpLEU9bmV3IEFycmF5KEMpLG09bmV3IEFycmF5KEMpLEE9bmV3IEFycmF5KEMpLG9lPW5ldyBBcnJheShDKSx0ZT1uZXcgQXJyYXkoQyksc2U9eC53b3Jk''@;'; put 'put ''cztzZS5sZW5ndGg9Qyx0aGlzLmNvbnZlcnQxM2IocC53b3JkcyxwLmxlbmd0aCxqLEMpLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLEEsQyksdGhpcy50cmFuc2Zvcm0oaixILEUsbSxDLFQpLHRoaXMudHJhbnNmb3JtKEEsSCxvZSx0ZSxDLFQpO2Zvcih2YXIgd2U9MDt3ZTxD''@;'; put 'put ''O3dlKyspe3ZhciBVZT1FW3dlXSpvZVt3ZV0tbVt3ZV0qdGVbd2VdO21bd2VdPUVbd2VdKnRlW3dlXSttW3dlXSpvZVt3ZV0sRVt3ZV09VWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKEUsbSxDKSx0aGlzLnRyYW5zZm9ybShFLG0sc2UsSCxDLFQpLHRoaXMuY29uanVnYXRlKHNlLEgsQyksdGhp''@;'; put 'put ''cy5ub3JtYWxpemUxM2Ioc2UsQykseC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9cC5sZW5ndGgrYi5sZW5ndGgseC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRo''@;'; put 'put ''aXMubGVuZ3RoK3AubGVuZ3RoKSx0aGlzLm11bFRvKHAsYil9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSxlZSh0aGlzLHAsYil9LHcucHJvdG90eXBlLmltdWw9ZnVu''@;'; put 'put ''Y3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhwLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KTtmb3IodmFyIGI9MCx4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBDPSgwfHRoaXMud29yZHNb''@;'; put 'put ''eF0pKnAsVD0oNjcxMDg4NjMmQykrKDY3MTA4ODYzJmIpO2I+Pj0yNixiKz1DLzY3MTA4ODY0fDAsYis9VD4+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PWImJih0aGlzLndvcmRzW3hdPWIsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5j''@;'; put 'put ''dGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHApfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1m''@;'; put 'put ''dW5jdGlvbihwKXt2YXIgYj1mdW5jdGlvbiBVKFYpe2Zvcih2YXIgcD1uZXcgQXJyYXkoVi5iaXRMZW5ndGgoKSksYj0wO2I8cC5sZW5ndGg7YisrKXt2YXIgQz1iJTI2O3BbYl09KFYud29yZHNbYi8yNnwwXSYxPDxDKT4+PkN9cmV0dXJuIHB9KHApO2lmKDA9PT1iLmxlbmd0aClyZXR1cm4g''@;'; put 'put ''bmV3IHcoMSk7Zm9yKHZhciB4PXRoaXMsQz0wO0M8Yi5sZW5ndGgmJjA9PT1iW0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzxiLmxlbmd0aClmb3IodmFyIFQ9eC5zcXIoKTtDPGIubGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PWJbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5''@;'; put 'put ''cGUuaXVzaGxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgVCxiPXAlMjYseD0ocC1iKS8yNixDPTY3MTA4ODYzPj4+MjYtYjw8MjYtYjtpZigwIT09Yil7dmFyIEg9MDtmb3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgaj10aGlzLndvcmRzW1RdJkM7''@;'; put 'put ''dGhpcy53b3Jkc1tUXT0oMHx0aGlzLndvcmRzW1RdKS1qPDxifEgsSD1qPj4+MjYtYn1IJiYodGhpcy53b3Jkc1tUXT1ILHRoaXMubGVuZ3RoKyspfWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4''@;'; put 'put ''O1QrKyl0aGlzLndvcmRzW1RdPTA7dGhpcy5sZW5ndGgrPXh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24ocCxiLHgp''@;'; put 'put ''e3ZhciBDO2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKSxDPWI/KGItYiUyNikvMjY6MDt2YXIgVD1wJTI2LEg9TWF0aC5taW4oKHAtVCkvMjYsdGhpcy5sZW5ndGgpLGo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtpZihDLT1ILEM9TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09''@;'; put 'put ''MDttPEg7bSsrKUUud29yZHNbbV09dGhpcy53b3Jkc1ttXTtFLmxlbmd0aD1IfWlmKDAhPT1IKWlmKHRoaXMubGVuZ3RoPkgpZm9yKHRoaXMubGVuZ3RoLT1ILG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRoaXMud29yZHNbbStIXTtlbHNlIHRoaXMud29yZHNbMF09MCx0''@;'; put 'put ''aGlzLmxlbmd0aD0xO3ZhciBBPTA7Zm9yKG09dGhpcy5sZW5ndGgtMTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIG9lPTB8dGhpcy53b3Jkc1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8b2U+Pj5ULEE9b2Uman1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEp''@;'; put 'put ''LDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4ocCxiLHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1''@;'; put 'put ''bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4ocCl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4ocCl9LHcucHJv''@;'; put 'put ''dG90eXBlLnVzaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHApfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhp''@;'; put 'put ''cy53b3Jkc1t4XSYxPDxiKSl9LHcucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJl''@;'; put 'put ''cnMiKSx0aGlzLmxlbmd0aDw9eD90aGlzOigwIT09YiYmeCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT1iJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5iPDxiKSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNr''@;'; put 'put ''bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihwKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MD90aGlzLmlzdWJuKC1wKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5s''@;'; put 'put ''ZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHA/KHRoaXMud29yZHNbMF09cC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihwKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''X2lhZGRuPWZ1bmN0aW9uKHApe3RoaXMud29yZHNbMF0rPXA7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXT49NjcxMDg4NjQ7YisrKXRoaXMud29yZHNbYl0tPTY3MTA4ODY0LGI9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbYisxXT0xOnRoaXMud29yZHNbYisx''@;'; put 'put ''XSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxiKzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHApe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MClyZXR1cm4gdGhpcy5pYWRkbigtcCk7aWYoMCE9PXRoaXMubmVn''@;'; put 'put ''YXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXAsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxz''@;'; put 'put ''ZSBmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPDA7YisrKXRoaXMud29yZHNbYl0rPTY3MTA4ODY0LHRoaXMud29yZHNbYisxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaWFk''@;'; put 'put ''ZG4ocCl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihwKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xv''@;'; put 'put ''bmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihwLGIseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKHAubGVuZ3RoK3gpO3ZhciBILGo9MDtmb3IoVD0wO1Q8cC5sZW5ndGg7VCsrKXtIPSgwfHRoaXMud29yZHNbVCt4XSkrajt2YXIgRT0oMHxwLndvcmRzW1RdKSpi''@;'; put 'put ''O2o9KChILT02NzEwODg2MyZFKT4+MjYpLShFLzY3MTA4ODY0fDApLHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIfWZvcig7VDx0aGlzLmxlbmd0aC14O1QrKylqPShIPSgwfHRoaXMud29yZHNbVCt4XSkraik+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIO2lmKDA9PT1qKXJldHVy''@;'; put 'put ''biB0aGlzLnN0cmlwKCk7Zm9yKGcoLTE9PT1qKSxqPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKWo9KEg9LSgwfHRoaXMud29yZHNbVF0pK2opPj4yNix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJkg7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3Jk''@;'; put 'put ''RGl2PWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmNsb25lKCksVD1wLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRoaXMuX2NvdW50Qml0cyhIKSkmJihUPVQudXNobG4oeCksQy5pdXNobG4oeCksSD0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgt''@;'; put 'put ''VC5sZW5ndGg7aWYoIm1vZCIhPT1iKXsobT1uZXcgdyhudWxsKSkubGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0aCk7Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0wfXZhciBvZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09b2UubmVn''@;'; put 'put ''YXRpdmUmJihDPW9lLG0mJihtLndvcmRzW0VdPTEpKTtmb3IodmFyIHRlPUUtMTt0ZT49MDt0ZS0tKXt2YXIgc2U9NjcxMDg4NjQqKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZV0pKygwfEMud29yZHNbVC5sZW5ndGgrdGUtMV0pO2ZvcihzZT1NYXRoLm1pbihzZS9IfDAsNjcxMDg4NjMpLEMuX2lz''@;'; put 'put ''aGxuc3VibXVsKFQsc2UsdGUpOzAhPT1DLm5lZ2F0aXZlOylzZS0tLEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsdGUpLEMuaXNaZXJvKCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1t0ZV09c2UpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09YiYm''@;'; put 'put ''MCE9PXgmJkMuaXVzaHJuKHgpLHtkaXY6bXx8bnVsbCxtb2Q6Q319LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGcoIXAuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5u''@;'; put 'put ''ZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLGIpLCJtb2QiIT09YiYmKEM9SC5kaXYubmVnKCkpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChwKSkse2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZl''@;'; put 'put ''PyhIPXRoaXMuZGl2bW9kKHAubmVnKCksYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSkse2RpdjpDLG1vZDpILm1vZH0pOnRoaXMubmVnYXRpdmUmcC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLm5lZygpLGIpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQu''@;'; put 'put ''bmVnYXRpdmUmJlQuaXN1YihwKSkse2RpdjpILmRpdixtb2Q6VH0pOnAubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChwKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1wLmxlbmd0aD8iZGl2Ij09PWI/e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm51bGx9OiJtb2Qi''@;'; put 'put ''PT09Yj97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHAsYik7dmFyIEMsVCxIfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24o''@;'; put 'put ''cCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITApLm1v''@;'; put 'put ''ZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5kaXZtb2QocCk7aWYoYi5tb2QuaXNaZXJvKCkpcmV0dXJuIGIuZGl2O3ZhciB4PTAhPT1iLmRpdi5uZWdhdGl2ZT9iLm1vZC5pc3ViKHApOmIubW9kLEM9cC51c2hybigxKSxUPXAuYW5kbG4oMSksSD14LmNt''@;'; put 'put ''cChDKTtyZXR1cm4gSDwwfHwxPT09VCYmMD09PUg/Yi5kaXY6MCE9PWIuZGl2Lm5lZ2F0aXZlP2IuZGl2LmlzdWJuKDEpOmIuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0oMTw8MjYpJXAseD0wLEM9dGhpcy5sZW5n''@;'; put 'put ''dGgtMTtDPj0wO0MtLSl4PShiKngrKDB8dGhpcy53b3Jkc1tDXSkpJXA7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4''@;'; put 'put ''NjQqYjt0aGlzLndvcmRzW3hdPUMvcHwwLGI9QyVwfXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihwKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlz''@;'; put 'put ''WmVybygpKTt2YXIgYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPW5ldyB3KDApLGo9bmV3IHcoMSksRT0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7KWIuaXVzaHJuKDEpLHguaXVz''@;'; put 'put ''aHJuKDEpLCsrRTtmb3IodmFyIG09eC5jbG9uZSgpLEE9Yi5jbG9uZSgpOyFiLmlzWmVybygpOyl7Zm9yKHZhciBvZT0wLHRlPTE7IShiLndvcmRzWzBdJnRlKSYmb2U8MjY7KytvZSx0ZTw8PTEpO2lmKG9lPjApZm9yKGIuaXVzaHJuKG9lKTtvZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2Rk''@;'; put 'put ''KCkpJiYoQy5pYWRkKG0pLFQuaXN1YihBKSksQy5pdXNocm4oMSksVC5pdXNocm4oMSk7Zm9yKHZhciBzZT0wLHdlPTE7ISh4LndvcmRzWzBdJndlKSYmc2U8MjY7KytzZSx3ZTw8PTEpO2lmKHNlPjApZm9yKHguaXVzaHJuKHNlKTtzZS0tID4wOykoSC5pc09kZCgpfHxqLmlzT2RkKCkpJiYo''@;'; put 'put ''SC5pYWRkKG0pLGouaXN1YihBKSksSC5pdXNocm4oMSksai5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoSCksVC5pc3ViKGopKTooeC5pc3ViKGIpLEguaXN1YihDKSxqLmlzdWIoVCkpfXJldHVybnthOkgsYjpqLGdjZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBl''@;'; put 'put ''Ll9pbnZtcD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgb2UsYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPXguY2xvbmUoKTtiLmNtcG4o''@;'; put 'put ''MSk+MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFyIGo9MCxFPTE7IShiLndvcmRzWzBdJkUpJiZqPDI2OysraixFPDw9MSk7aWYoaj4wKWZvcihiLml1c2hybihqKTtqLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKEgpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkm''@;'; put 'put ''Jm08MjY7KyttLEE8PD0xKTtpZihtPjApZm9yKHguaXVzaHJuKG0pO20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoSCksVC5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoVCkpOih4LmlzdWIoYiksVC5pc3ViKEMpKX1yZXR1cm4ob2U9MD09PWIuY21wbigxKT9DOlQp''@;'; put 'put ''LmNtcG4oMCk8MCYmb2UuaWFkZChwKSxvZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHApe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHAuYWJzKCk7aWYocC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgYj10aGlzLmNsb25lKCkseD1wLmNsb25lKCk7Yi5uZWdhdGl2ZT0wLHgu''@;'; put 'put ''bmVnYXRpdmU9MDtmb3IodmFyIEM9MDtiLmlzRXZlbigpJiZ4LmlzRXZlbigpO0MrKyliLml1c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zvcig7Yi5pc0V2ZW4oKTspYi5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD1iLmNtcCh4KTtpZihUPDApe3Zh''@;'; put 'put ''ciBIPWI7Yj14LHg9SH1lbHNlIGlmKDA9PT1UfHwwPT09eC5jbXBuKDEpKWJyZWFrO2IuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZWdjZChwKS5hLnVtb2QocCl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZwfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlv''@;'; put 'put ''bihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCk7dmFyIGI9cCUyNix4PShwLWIpLzI2LEM9MTw8YjtpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIgVD1DLEg9eDswIT09VCYmSDx0aGlzLmxlbmd0aDtIKyspe3Zh''@;'; put 'put ''ciBqPTB8dGhpcy53b3Jkc1tIXTtUPShqKz1UKT4+PjI2LHRoaXMud29yZHNbSF09aiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYodGhpcy53b3Jkc1tIXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgm''@;'; put 'put ''JjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhYilyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmYilyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxz''@;'; put 'put ''ZXtiJiYocD0tcCksZyhwPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09cD8wOkM8cD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihwKXtpZigwIT09dGhpcy5uZWdh''@;'; put 'put ''dGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBiPXRoaXMudWNtcChwKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtYjpifSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHApe2lmKHRoaXMu''@;'; put 'put ''bGVuZ3RoPnAubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHAubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9MHxwLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/Yj0tMTpDPlQmJihiPTEpO2Jy''@;'; put 'put ''ZWFrfX1yZXR1cm4gYn0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4o''@;'; put 'put ''cCk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcChwKX0sdy5w''@;'; put 'put ''cm90b3R5cGUubHRlbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXBuKHApPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBl''@;'; put 'put ''LmVxPWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5jbXAocCl9LHcucmVkPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgU2UocCl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIp''@;'; put 'put ''LGcoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJl''@;'; put 'put ''cnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnJlZD1wLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwi''@;'; put 'put ''QWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxw''@;'; put 'put ''KX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwi''@;'; put 'put ''cmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhp''@;'; put 'put ''cyxwKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwi''@;'; put 'put ''cmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQubXVsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51''@;'; put 'put ''bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHApLHRoaXMucmVkLmltdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlz''@;'; put 'put ''KSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBnKHRo''@;'; put 'put ''aXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJl''@;'; put 'put ''ZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQmJiFwLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJl''@;'; put 'put ''ZC5wb3codGhpcyxwKX07dmFyIHJlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gaWUoVixwKXt0aGlzLm5hbWU9Vix0aGlzLnA9bmV3IHcocCwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRo''@;'; put 'put ''aXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGxlKCl7aWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBtZSgpe2ll''@;'; put 'put ''LmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gX2UoKXtpZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBm''@;'; put 'put ''ZmZmZmZmZiIpfWZ1bmN0aW9uIFRlKCl7aWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBTZShWKXtpZigic3RyaW5nIj09dHlwZW9mIFYpe3ZhciBwPXcuX3By''@;'; put 'put ''aW1lKFYpO3RoaXMubT1wLnAsdGhpcy5wcmltZT1wfWVsc2UgZyhWLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPVYsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIHplKFYpe1NlLmNhbGwodGhpcyxWKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgo''@;'; put 'put ''KSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMu''@;'; put 'put ''cmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWllLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHAud29yZHM9''@;'; put 'put ''bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxwfSxpZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihwKXt2YXIgeCxiPXA7ZG97dGhpcy5zcGxpdChiLHRoaXMudG1wKSx4PShiPShiPXRoaXMuaW11bEsoYikpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRo''@;'; put 'put ''aXMubik7dmFyIEM9eDx0aGlzLm4/LTE6Yi51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1DPyhiLndvcmRzWzBdPTAsYi5sZW5ndGg9MSk6Qz4wP2IuaXN1Yih0aGlzLnApOnZvaWQgMCE9PWIuc3RyaXA/Yi5zdHJpcCgpOmIuX3N0cmlwKCksYn0saWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9u''@;'; put 'put ''KHAsYil7cC5pdXNocm4odGhpcy5uLDAsYil9LGllLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pbXVsKHRoaXMuayl9LEIobGUsaWUpLGxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4ocC5sZW5ndGgsOSks''@;'; put 'put ''VD0wO1Q8QztUKyspYi53b3Jkc1tUXT1wLndvcmRzW1RdO2lmKGIubGVuZ3RoPUMscC5sZW5ndGg8PTkpcmV0dXJuIHAud29yZHNbMF09MCx2b2lkKHAubGVuZ3RoPTEpO3ZhciBIPXAud29yZHNbOV07Zm9yKGIud29yZHNbYi5sZW5ndGgrK109SCZ4LFQ9MTA7VDxwLmxlbmd0aDtUKyspe3Zh''@;'; put 'put ''ciBqPTB8cC53b3Jkc1tUXTtwLndvcmRzW1QtMTBdPShqJngpPDw0fEg+Pj4yMixIPWp9cC53b3Jkc1tULTEwXT1IPj4+PTIyLHAubGVuZ3RoLT0wPT09SCYmcC5sZW5ndGg+MTA/MTA6OX0sbGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3Aud29yZHNbcC5sZW5ndGhdPTAscC53b3Jk''@;'; put 'put ''c1twLmxlbmd0aCsxXT0wLHAubGVuZ3RoKz0yO2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MHxwLndvcmRzW3hdO3Aud29yZHNbeF09NjcxMDg4NjMmKGIrPTk3NypDKSxiPTY0KkMrKGIvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiYo''@;'; put 'put ''cC5sZW5ndGgtLSwwPT09cC53b3Jkc1twLmxlbmd0aC0xXSYmcC5sZW5ndGgtLSkscH0sQihtZSxpZSksQihfZSxpZSksQihUZSxpZSksVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8cC53b3Jkc1t4XSkr''@;'; put 'put ''YixUPTY3MTA4ODYzJkM7Qz4+Pj0yNixwLndvcmRzW3hdPVQsYj1DfXJldHVybiAwIT09YiYmKHAud29yZHNbcC5sZW5ndGgrK109YikscH0sdy5fcHJpbWU9ZnVuY3Rpb24ocCl7aWYocmVbcF0pcmV0dXJuIHJlW3BdO3ZhciBiO2lmKCJrMjU2Ij09PXApYj1uZXcgbGU7ZWxzZSBpZigicDIy''@;'; put 'put ''NCI9PT1wKWI9bmV3IG1lO2Vsc2UgaWYoInAxOTIiPT09cCliPW5ldyBfZTtlbHNle2lmKCJwMjU1MTkiIT09cCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitwKTtiPW5ldyBUZX1yZXR1cm4gcmVbcF09YixifSxTZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24ocCl7Zygw''@;'; put 'put ''PT09cC5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKHAucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihwLGIpe2coIShwLm5lZ2F0aXZlfGIubmVnYXRpdmUpLCJyZWQgd29ya3Mg''@;'; put 'put ''b25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQmJnAucmVkPT09Yi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHApLl9mb3JjZVJlZCh0aGlz''@;'; put 'put ''KTpwLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaXNaZXJvKCk/cC5jbG9uZSgpOnRoaXMubS5zdWIocCkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5''@;'; put 'put ''MihwLGIpO3ZhciB4PXAuYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pYWRkKGIpO3JldHVybiB4LmNtcCh0aGlz''@;'; put 'put ''Lm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pc3ViPWZ1''@;'; put 'put ''bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuaXN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShwKSx0aGlzLmltb2QocC51c2hsbihiKSl9LFNl''@;'; put 'put ''LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5pbXVsKGIpKX0sU2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAsYiksdGhpcy5pbW9kKHAubXVsKGIpKX0sU2UucHJvdG90''@;'; put 'put ''eXBlLmlzcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW11bChwLHAuY2xvbmUoKSl9LFNlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubXVsKHAscCl9LFNlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHApe2lmKHAuaXNaZXJvKCkpcmV0dXJuIHAuY2xvbmUoKTt2''@;'; put 'put ''YXIgYj10aGlzLm0uYW5kbG4oMyk7aWYoZyhiJTI9PTEpLDM9PT1iKXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHAseCl9Zm9yKHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1''@;'; put 'put ''c2hybigxKTtnKCFDLmlzWmVybygpKTt2YXIgSD1uZXcgdygxKS50b1JlZCh0aGlzKSxqPUgucmVkTmVnKCksRT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChq''@;'; put 'put ''KTspbS5yZWRJQWRkKGopO2Zvcih2YXIgQT10aGlzLnBvdyhtLEMpLG9lPXRoaXMucG93KHAsQy5hZGRuKDEpLml1c2hybigxKSksdGU9dGhpcy5wb3cocCxDKSxzZT1UOzAhPT10ZS5jbXAoSCk7KXtmb3IodmFyIHdlPXRlLFVlPTA7MCE9PXdlLmNtcChIKTtVZSsrKXdlPXdlLnJlZFNxcigp''@;'; put 'put ''O2coVWU8c2UpO3ZhciBKZT10aGlzLnBvdyhBLG5ldyB3KDEpLml1c2hsbihzZS1VZS0xKSk7b2U9b2UucmVkTXVsKEplKSxBPUplLnJlZFNxcigpLHRlPXRlLnJlZE11bChBKSxzZT1VZX1yZXR1cm4gb2V9LFNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3ZhciBiPXAuX2ludm1wKHRo''@;'; put 'put ''aXMubSk7cmV0dXJuIDAhPT1iLm5lZ2F0aXZlPyhiLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKGIpLnJlZE5lZygpKTp0aGlzLmltb2QoYil9LFNlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCxiKXtpZihiLmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09Yi5jbXBu''@;'; put 'put ''KDEpKXJldHVybiBwLmNsb25lKCk7dmFyIEM9bmV3IEFycmF5KDE2KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09cDtmb3IodmFyIFQ9MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENbVC0xXSxwKTt2YXIgSD1DWzBdLGo9MCxFPTAsbT1iLmJpdExlbmd0aCgpJTI2O2Zv''@;'; put 'put ''cigwPT09bSYmKG09MjYpLFQ9Yi5sZW5ndGgtMTtUPj0wO1QtLSl7Zm9yKHZhciBBPWIud29yZHNbVF0sb2U9bS0xO29lPj0wO29lLS0pe3ZhciB0ZT1BPj5vZSYxO0ghPT1DWzBdJiYoSD10aGlzLnNxcihIKSksMCE9PXRlfHwwIT09aj8oajw8PTEsanw9dGUsKDQ9PSsrRXx8MD09PVQmJjA9''@;'; put 'put ''PT1vZSkmJihIPXRoaXMubXVsKEgsQ1tqXSksRT0wLGo9MCkpOkU9MH1tPTI2fXJldHVybiBIfSxTZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3ZhciBiPXAudW1vZCh0aGlzLm0pO3JldHVybiBiPT09cD9iLmNsb25lKCk6Yn0sU2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1''@;'; put 'put ''bmN0aW9uKHApe3ZhciBiPXAuY2xvbmUoKTtyZXR1cm4gYi5yZWQ9bnVsbCxifSx3Lm1vbnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyB6ZShwKX0sQih6ZSxTZSksemUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAudXNobG4odGhpcy5zaGlmdCkp''@;'; put 'put ''fSx6ZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5pbW9kKHAubXVsKHRoaXMucmludikpO3JldHVybiBiLnJlZD1udWxsLGJ9LHplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gcC53b3Jk''@;'; put 'put ''c1swXT0wLHAubGVuZ3RoPTEscDt2YXIgeD1wLmltdWwoYiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9''@;'; put 'put ''VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0semUucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1wLm11''@;'; put 'put ''bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9''@;'; put 'put ''VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSx6ZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSh1ZT1fLm5tZCh1ZSksdGhpcyl9LDQ0Mjk6dWU9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIHE9T2JqZWN0LmRlZmluZVByb3BlcnR5fHwhMTtpZihxKXRyeXtxKHt9LCJhIix7dmFsdWU6MX0pfWNhdGNoe3E9ITF9dWUuZXhwb3J0cz1xfSwzOTgxOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9RXZhbEVycm9yfSwxNjQ4OnVlPT57InVzZSBzdHJpY3QiO3Vl''@;'; put 'put ''LmV4cG9ydHM9RXJyb3J9LDQ3MjY6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1SYW5nZUVycm9yfSw2NzEyOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9UmVmZXJlbmNlRXJyb3J9LDM0NjQ6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1TeW50YXhFcnJvcn0sNDQ1Mzp1''@;'; put 'put ''ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPVR5cGVFcnJvcn0sMzkxNTp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPVVSSUVycm9yfSw4ODkyOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9T2JqZWN0fSw3MTg3Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBCLEk9Xyg1''@;'; put 'put ''MTA4KSx5PSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdD9SZWZsZWN0Om51bGwsZz15JiYiZnVuY3Rpb24iPT10eXBlb2YgeS5hcHBseT95LmFwcGx5OmZ1bmN0aW9uKF9lLFRlLFNlKXtyZXR1cm4gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoX2UsVGUsU2UpfTtCPXkmJiJmdW5jdGlv''@;'; put 'put ''biI9PXR5cGVvZiB5Lm93bktleXM/eS5vd25LZXlzOk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM/ZnVuY3Rpb24oX2Upe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhfZSkuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoX2UpKX06ZnVuY3Rpb24oX2Up''@;'; put 'put ''e3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhfZSl9O3ZhciBQPU51bWJlci5pc05hTnx8ZnVuY3Rpb24oX2Upe3JldHVybiBfZSE9X2V9O2Z1bmN0aW9uIEYoKXtGLmluaXQuY2FsbCh0aGlzKX11ZS5leHBvcnRzPUYsdWUuZXhwb3J0cy5vbmNlPWZ1bmN0aW9uIHJlKG1lLF9l''@;'; put 'put ''KXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oVGUsU2Upe2Z1bmN0aW9uIHplKHApe21lLnJlbW92ZUxpc3RlbmVyKF9lLFYpLFNlKHApfWZ1bmN0aW9uIFYoKXsiZnVuY3Rpb24iPT10eXBlb2YgbWUucmVtb3ZlTGlzdGVuZXImJm1lLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsemUpLFRl''@;'; put 'put ''KFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSl9bGUobWUsX2UsVix7b25jZTohMH0pLCJlcnJvciIhPT1fZSYmZnVuY3Rpb24gaWUobWUsX2UsVGUpeyJmdW5jdGlvbiI9PXR5cGVvZiBtZS5vbiYmbGUobWUsImVycm9yIixfZSxUZSl9KG1lLHplLHtvbmNlOiEwfSl9KX0sRi5FdmVudEVtaXR0''@;'; put 'put ''ZXI9RixGLnByb3RvdHlwZS5fZXZlbnRzPXZvaWQgMCxGLnByb3RvdHlwZS5fZXZlbnRzQ291bnQ9MCxGLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzPXZvaWQgMDt2YXIgTz0xMDtmdW5jdGlvbiB6KG1lKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgbWUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhl''@;'; put 'put ''ICJsaXN0ZW5lciIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIG1lKX1mdW5jdGlvbiBOKG1lKXtyZXR1cm4gdm9pZCAwPT09bWUuX21heExpc3RlbmVycz9GLmRlZmF1bHRNYXhMaXN0ZW5lcnM6bWUuX21heExpc3RlbmVyc31mdW5j''@;'; put 'put ''dGlvbiBMKG1lLF9lLFRlLFNlKXt2YXIgemUsVixwO2lmKHooVGUpLHZvaWQgMD09PShWPW1lLl9ldmVudHMpPyhWPW1lLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSxtZS5fZXZlbnRzQ291bnQ9MCk6KHZvaWQgMCE9PVYubmV3TGlzdGVuZXImJihtZS5lbWl0KCJuZXdMaXN0ZW5lciIs''@;'; put 'put ''X2UsVGUubGlzdGVuZXI/VGUubGlzdGVuZXI6VGUpLFY9bWUuX2V2ZW50cykscD1WW19lXSksdm9pZCAwPT09cClwPVZbX2VdPVRlLCsrbWUuX2V2ZW50c0NvdW50O2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIHA/cD1WW19lXT1TZT9bVGUscF06W3AsVGVdOlNlP3AudW5zaGlmdChUZSk6''@;'; put 'put ''cC5wdXNoKFRlKSwoemU9TihtZSkpPjAmJnAubGVuZ3RoPnplJiYhcC53YXJuZWQpe3Aud2FybmVkPSEwO3ZhciBiPW5ldyBFcnJvcigiUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAiK3AubGVuZ3RoKyIgIitTdHJpbmcoX2UpKyIgbGlzdGVuZXJzIGFkZGVk''@;'; put 'put ''LiBVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1pdCIpO2IubmFtZT0iTWF4TGlzdGVuZXJzRXhjZWVkZWRXYXJuaW5nIixiLmVtaXR0ZXI9bWUsYi50eXBlPV9lLGIuY291bnQ9cC5sZW5ndGgsZnVuY3Rpb24gdyhtZSl7SSYmSS53YXJuJiZJLndhcm4obWUp''@;'; put 'put ''fShiKX1yZXR1cm4gbWV9ZnVuY3Rpb24gSygpe2lmKCF0aGlzLmZpcmVkKXJldHVybiB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsdGhpcy53cmFwRm4pLHRoaXMuZmlyZWQ9ITAsMD09PWFyZ3VtZW50cy5sZW5ndGg/dGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0''@;'; put 'put ''KTp0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gVShtZSxfZSxUZSl7dmFyIFNlPXtmaXJlZDohMSx3cmFwRm46dm9pZCAwLHRhcmdldDptZSx0eXBlOl9lLGxpc3RlbmVyOlRlfSx6ZT1LLmJpbmQoU2UpO3JldHVybiB6ZS5saXN0ZW5lcj1UZSxT''@;'; put 'put ''ZS53cmFwRm49emUsemV9ZnVuY3Rpb24gVyhtZSxfZSxUZSl7dmFyIFNlPW1lLl9ldmVudHM7aWYodm9pZCAwPT09U2UpcmV0dXJuW107dmFyIHplPVNlW19lXTtyZXR1cm4gdm9pZCAwPT09emU/W106ImZ1bmN0aW9uIj09dHlwZW9mIHplP1RlP1t6ZS5saXN0ZW5lcnx8emVdOlt6ZV06VGU/''@;'; put 'put ''ZnVuY3Rpb24gSihtZSl7Zm9yKHZhciBfZT1uZXcgQXJyYXkobWUubGVuZ3RoKSxUZT0wO1RlPF9lLmxlbmd0aDsrK1RlKV9lW1RlXT1tZVtUZV0ubGlzdGVuZXJ8fG1lW1RlXTtyZXR1cm4gX2V9KHplKTpYKHplLHplLmxlbmd0aCl9ZnVuY3Rpb24gWShtZSl7dmFyIF9lPXRoaXMuX2V2ZW50''@;'; put 'put ''cztpZih2b2lkIDAhPT1fZSl7dmFyIFRlPV9lW21lXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgVGUpcmV0dXJuIDE7aWYodm9pZCAwIT09VGUpcmV0dXJuIFRlLmxlbmd0aH1yZXR1cm4gMH1mdW5jdGlvbiBYKG1lLF9lKXtmb3IodmFyIFRlPW5ldyBBcnJheShfZSksU2U9MDtTZTxfZTsrK1Nl''@;'; put 'put ''KVRlW1NlXT1tZVtTZV07cmV0dXJuIFRlfWZ1bmN0aW9uIGxlKG1lLF9lLFRlLFNlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgbWUub24pU2Uub25jZT9tZS5vbmNlKF9lLFRlKTptZS5vbihfZSxUZSk7ZWxzZXtpZigiZnVuY3Rpb24iIT10eXBlb2YgbWUuYWRkRXZlbnRMaXN0ZW5lcil0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCdUaGUgImVtaXR0ZXIiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBFdmVudEVtaXR0ZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgbWUpO21lLmFkZEV2ZW50TGlzdGVuZXIoX2UsZnVuY3Rpb24gemUoVil7U2Uub25jZSYmbWUucmVtb3ZlRXZlbnRMaXN0ZW5l''@;'; put 'put ''cihfZSx6ZSksVGUoVil9KX19T2JqZWN0LmRlZmluZVByb3BlcnR5KEYsImRlZmF1bHRNYXhMaXN0ZW5lcnMiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBPfSxzZXQ6ZnVuY3Rpb24obWUpe2lmKCJudW1iZXIiIT10eXBlb2YgbWV8fG1lPDB8fFAobWUpKXRocm93IG5l''@;'; put 'put ''dyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgb2YgImRlZmF1bHRNYXhMaXN0ZW5lcnMiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcrbWUrIi4iKTtPPW1lfX0pLEYuaW5pdD1mdW5jdGlvbigpeyh2b2lkIDA9PT10aGlzLl9ldmVu''@;'; put 'put ''dHN8fHRoaXMuX2V2ZW50cz09PU9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKS5fZXZlbnRzKSYmKHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTApLHRoaXMuX21heExpc3RlbmVycz10aGlzLl9tYXhMaXN0ZW5lcnN8fHZvaWQgMH0sRi5wcm90''@;'; put 'put ''b3R5cGUuc2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKF9lKXtpZigibnVtYmVyIiE9dHlwZW9mIF9lfHxfZTwwfHxQKF9lKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mICJuIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNl''@;'; put 'put ''aXZlZCAnK19lKyIuIik7cmV0dXJuIHRoaXMuX21heExpc3RlbmVycz1fZSx0aGlzfSxGLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24oKXtyZXR1cm4gTih0aGlzKX0sRi5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbihfZSl7Zm9yKHZhciBUZT1bXSxTZT0xO1NlPGFyZ3VtZW50''@;'; put 'put ''cy5sZW5ndGg7U2UrKylUZS5wdXNoKGFyZ3VtZW50c1tTZV0pO3ZhciB6ZT0iZXJyb3IiPT09X2UsVj10aGlzLl9ldmVudHM7aWYodm9pZCAwIT09Vil6ZT16ZSYmdm9pZCAwPT09Vi5lcnJvcjtlbHNlIGlmKCF6ZSlyZXR1cm4hMTtpZih6ZSl7dmFyIHA7aWYoVGUubGVuZ3RoPjAmJihwPVRl''@;'; put 'put ''WzBdKSxwIGluc3RhbmNlb2YgRXJyb3IpdGhyb3cgcDt2YXIgYj1uZXcgRXJyb3IoIlVuaGFuZGxlZCBlcnJvci4iKyhwPyIgKCIrcC5tZXNzYWdlKyIpIjoiIikpO3Rocm93IGIuY29udGV4dD1wLGJ9dmFyIHg9VltfZV07aWYodm9pZCAwPT09eClyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2YgeClnKHgsdGhpcyxUZSk7ZWxzZXt2YXIgQz14Lmxlbmd0aCxUPVgoeCxDKTtmb3IoU2U9MDtTZTxDOysrU2UpZyhUW1NlXSx0aGlzLFRlKX1yZXR1cm4hMH0sRi5wcm90b3R5cGUub249Ri5wcm90b3R5cGUuYWRkTGlzdGVuZXI9ZnVuY3Rpb24oX2UsVGUpe3JldHVybiBMKHRoaXMs''@;'; put 'put ''X2UsVGUsITEpfSxGLnByb3RvdHlwZS5wcmVwZW5kTGlzdGVuZXI9ZnVuY3Rpb24oX2UsVGUpe3JldHVybiBMKHRoaXMsX2UsVGUsITApfSxGLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKF9lLFRlKXtyZXR1cm4geihUZSksdGhpcy5vbihfZSxVKHRoaXMsX2UsVGUpKSx0aGlzfSxGLnByb3Rv''@;'; put 'put ''dHlwZS5wcmVwZW5kT25jZUxpc3RlbmVyPWZ1bmN0aW9uKF9lLFRlKXtyZXR1cm4geihUZSksdGhpcy5wcmVwZW5kTGlzdGVuZXIoX2UsVSh0aGlzLF9lLFRlKSksdGhpc30sRi5wcm90b3R5cGUub2ZmPUYucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKF9lLFRlKXt2YXIgU2Us''@;'; put 'put ''emUsVixwLGI7aWYoeihUZSksdm9pZCAwPT09KHplPXRoaXMuX2V2ZW50cykpcmV0dXJuIHRoaXM7aWYodm9pZCAwPT09KFNlPXplW19lXSkpcmV0dXJuIHRoaXM7aWYoU2U9PT1UZXx8U2UubGlzdGVuZXI9PT1UZSkwPT0tLXRoaXMuX2V2ZW50c0NvdW50P3RoaXMuX2V2ZW50cz1PYmplY3Qu''@;'; put 'put ''Y3JlYXRlKG51bGwpOihkZWxldGUgemVbX2VdLHplLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIixfZSxTZS5saXN0ZW5lcnx8VGUpKTtlbHNlIGlmKCJmdW5jdGlvbiIhPXR5cGVvZiBTZSl7Zm9yKFY9LTEscD1TZS5sZW5ndGgtMTtwPj0wO3AtLSlpZihTZVtw''@;'; put 'put ''XT09PVRlfHxTZVtwXS5saXN0ZW5lcj09PVRlKXtiPVNlW3BdLmxpc3RlbmVyLFY9cDticmVha31pZihWPDApcmV0dXJuIHRoaXM7MD09PVY/U2Uuc2hpZnQoKTpmdW5jdGlvbiBlZShtZSxfZSl7Zm9yKDtfZSsxPG1lLmxlbmd0aDtfZSsrKW1lW19lXT1tZVtfZSsxXTttZS5wb3AoKX0oU2Us''@;'; put 'put ''ViksMT09PVNlLmxlbmd0aCYmKHplW19lXT1TZVswXSksdm9pZCAwIT09emUucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLF9lLGJ8fFRlKX1yZXR1cm4gdGhpc30sRi5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKF9lKXt2YXIgVGUsU2Us''@;'; put 'put ''emU7aWYodm9pZCAwPT09KFNlPXRoaXMuX2V2ZW50cykpcmV0dXJuIHRoaXM7aWYodm9pZCAwPT09U2UucmVtb3ZlTGlzdGVuZXIpcmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoPyh0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKTp2b2lkIDAh''@;'; put 'put ''PT1TZVtfZV0mJigwPT0tLXRoaXMuX2V2ZW50c0NvdW50P3RoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpOmRlbGV0ZSBTZVtfZV0pLHRoaXM7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpe3ZhciBwLFY9T2JqZWN0LmtleXMoU2UpO2Zvcih6ZT0wO3plPFYubGVuZ3RoOysremUpInJl''@;'; put 'put ''bW92ZUxpc3RlbmVyIiE9PShwPVZbemVdKSYmdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMocCk7cmV0dXJuIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCJyZW1vdmVMaXN0ZW5lciIpLHRoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuX2V2ZW50c0NvdW50PTAsdGhpc31pZigi''@;'; put 'put ''ZnVuY3Rpb24iPT10eXBlb2YoVGU9U2VbX2VdKSl0aGlzLnJlbW92ZUxpc3RlbmVyKF9lLFRlKTtlbHNlIGlmKHZvaWQgMCE9PVRlKWZvcih6ZT1UZS5sZW5ndGgtMTt6ZT49MDt6ZS0tKXRoaXMucmVtb3ZlTGlzdGVuZXIoX2UsVGVbemVdKTtyZXR1cm4gdGhpc30sRi5wcm90b3R5cGUubGlz''@;'; put 'put ''dGVuZXJzPWZ1bmN0aW9uKF9lKXtyZXR1cm4gVyh0aGlzLF9lLCEwKX0sRi5wcm90b3R5cGUucmF3TGlzdGVuZXJzPWZ1bmN0aW9uKF9lKXtyZXR1cm4gVyh0aGlzLF9lLCExKX0sRi5saXN0ZW5lckNvdW50PWZ1bmN0aW9uKG1lLF9lKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgbWUubGlz''@;'; put 'put ''dGVuZXJDb3VudD9tZS5saXN0ZW5lckNvdW50KF9lKTpZLmNhbGwobWUsX2UpfSxGLnByb3RvdHlwZS5saXN0ZW5lckNvdW50PVksRi5wcm90b3R5cGUuZXZlbnROYW1lcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9ldmVudHNDb3VudD4wP0IodGhpcy5fZXZlbnRzKTpbXX19LDMwNDg6KHVl''@;'; put 'put ''LHEsXyk9Pnt2YXIgST1fKDk1MDkpLkJ1ZmZlcix5PV8oMjMxOCk7dWUuZXhwb3J0cz1mdW5jdGlvbiBnKEIsdyxQLEYpe2lmKEkuaXNCdWZmZXIoQil8fChCPUkuZnJvbShCLCJiaW5hcnkiKSksdyYmKEkuaXNCdWZmZXIodyl8fCh3PUkuZnJvbSh3LCJiaW5hcnkiKSksOCE9PXcubGVuZ3Ro''@;'; put 'put ''KSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic2FsdCBzaG91bGQgYmUgQnVmZmVyIHdpdGggOCBieXRlIGxlbmd0aCIpO2Zvcih2YXIgTz1QLzgsej1JLmFsbG9jKE8pLE49SS5hbGxvYyhGfHwwKSxMPUkuYWxsb2MoMCk7Tz4wfHxGPjA7KXt2YXIgSz1uZXcgeTtLLnVwZGF0ZShMKSxLLnVwZGF0''@;'; put 'put ''ZShCKSx3JiZLLnVwZGF0ZSh3KSxMPUsuZGlnZXN0KCk7dmFyIFU9MDtpZihPPjApe3ZhciBXPXoubGVuZ3RoLU87VT1NYXRoLm1pbihPLEwubGVuZ3RoKSxMLmNvcHkoeixXLDAsVSksTy09VX1pZihVPEwubGVuZ3RoJiZGPjApe3ZhciBZPU4ubGVuZ3RoLUYsWD1NYXRoLm1pbihGLEwubGVu''@;'; put 'put ''Z3RoLVUpO0wuY29weShOLFksVSxVK1gpLEYtPVh9fXJldHVybiBMLmZpbGwoMCkse2tleTp6LGl2Ok59fX0sNDAyOToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDUzMjApLHk9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxnPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVy''@;'; put 'put ''dHk7dWUuZXhwb3J0cz1mdW5jdGlvbih6LE4sTCl7aWYoIUkoTikpdGhyb3cgbmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7dmFyIEs7YXJndW1lbnRzLmxlbmd0aD49MyYmKEs9TCksZnVuY3Rpb24gRihPKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT09eS5j''@;'; put 'put ''YWxsKE8pfSh6KT9mdW5jdGlvbih6LE4sTCl7Zm9yKHZhciBLPTAsVT16Lmxlbmd0aDtLPFU7SysrKWcuY2FsbCh6LEspJiYobnVsbD09TD9OKHpbS10sSyx6KTpOLmNhbGwoTCx6W0tdLEsseikpfSh6LE4sSyk6InN0cmluZyI9PXR5cGVvZiB6P2Z1bmN0aW9uKHosTixMKXtmb3IodmFyIEs9''@;'; put 'put ''MCxVPXoubGVuZ3RoO0s8VTtLKyspbnVsbD09TD9OKHouY2hhckF0KEspLEsseik6Ti5jYWxsKEwsei5jaGFyQXQoSyksSyx6KX0oeixOLEspOmZ1bmN0aW9uKHosTixMKXtmb3IodmFyIEsgaW4geilnLmNhbGwoeixLKSYmKG51bGw9PUw/Tih6W0tdLEsseik6Ti5jYWxsKEwseltLXSxLLHop''@;'; put 'put ''KX0oeixOLEspfX0sNjIzMDp1ZT0+e3VlLmV4cG9ydHM9Im9iamVjdCI9PXR5cGVvZiBzZWxmP3NlbGYuRm9ybURhdGE6d2luZG93LkZvcm1EYXRhfSwzODczOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNDE1NSk7Y29uc3QgeT1fKDc3KSxnPV8oMjUyMCksQj1fKDEzODEpLm1r''@;'; put 'put ''ZGlyc1N5bmMsdz1fKDMxOCkudXRpbWVzTWlsbGlzU3luYyxQPV8oMjczMyk7ZnVuY3Rpb24gTyhfZSxUZSxTZSx6ZSl7Y29uc3QgcD0oemUuZGVyZWZlcmVuY2U/eS5zdGF0U3luYzp5LmxzdGF0U3luYykoVGUpO2lmKHAuaXNEaXJlY3RvcnkoKSlyZXR1cm4gZnVuY3Rpb24gZWUoX2UsVGUs''@;'; put 'put ''U2UsemUsVil7cmV0dXJuIFRlP3JlKFNlLHplLFYpOmZ1bmN0aW9uIEooX2UsVGUsU2UsemUpe3JldHVybiB5Lm1rZGlyU3luYyhTZSkscmUoVGUsU2UsemUpLFkoU2UsX2UpfShfZS5tb2RlLFNlLHplLFYpfShwLF9lLFRlLFNlLHplKTtpZihwLmlzRmlsZSgpfHxwLmlzQ2hhcmFjdGVyRGV2''@;'; put 'put ''aWNlKCl8fHAuaXNCbG9ja0RldmljZSgpKXJldHVybiBmdW5jdGlvbiB6KF9lLFRlLFNlLHplLFYpe3JldHVybiBUZT9mdW5jdGlvbiBOKF9lLFRlLFNlLHplKXtpZih6ZS5vdmVyd3JpdGUpcmV0dXJuIHkudW5saW5rU3luYyhTZSksTChfZSxUZSxTZSx6ZSk7aWYoemUuZXJyb3JPbkV4aXN0''@;'; put 'put ''KXRocm93IG5ldyBFcnJvcihgJyR7U2V9JyBhbHJlYWR5IGV4aXN0c2ApfShfZSxTZSx6ZSxWKTpMKF9lLFNlLHplLFYpfShwLF9lLFRlLFNlLHplKTtpZihwLmlzU3ltYm9saWNMaW5rKCkpcmV0dXJuIGZ1bmN0aW9uIGxlKF9lLFRlLFNlLHplKXtsZXQgVj15LnJlYWRsaW5rU3luYyhUZSk7''@;'; put 'put ''aWYoemUuZGVyZWZlcmVuY2UmJihWPWcucmVzb2x2ZShJLmN3ZCgpLFYpKSxfZSl7bGV0IHA7dHJ5e3A9eS5yZWFkbGlua1N5bmMoU2UpfWNhdGNoKGIpe2lmKCJFSU5WQUwiPT09Yi5jb2RlfHwiVU5LTk9XTiI9PT1iLmNvZGUpcmV0dXJuIHkuc3ltbGlua1N5bmMoVixTZSk7dGhyb3cgYn1p''@;'; put 'put ''Zih6ZS5kZXJlZmVyZW5jZSYmKHA9Zy5yZXNvbHZlKEkuY3dkKCkscCkpLFAuaXNTcmNTdWJkaXIoVixwKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb3B5ICcke1Z9JyB0byBhIHN1YmRpcmVjdG9yeSBvZiBpdHNlbGYsICcke3B9Jy5gKTtpZihQLmlzU3JjU3ViZGlyKHAsVikpdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlICcke3B9JyB3aXRoICcke1Z9Jy5gKTtyZXR1cm4gZnVuY3Rpb24gbWUoX2UsVGUpe3JldHVybiB5LnVubGlua1N5bmMoVGUpLHkuc3ltbGlua1N5bmMoX2UsVGUpfShWLFNlKX1yZXR1cm4geS5zeW1saW5rU3luYyhWLFNlKX0oX2UsVGUsU2Us''@;'; put 'put ''emUpO3Rocm93IHAuaXNTb2NrZXQoKT9uZXcgRXJyb3IoYENhbm5vdCBjb3B5IGEgc29ja2V0IGZpbGU6ICR7VGV9YCk6cC5pc0ZJRk8oKT9uZXcgRXJyb3IoYENhbm5vdCBjb3B5IGEgRklGTyBwaXBlOiAke1RlfWApOm5ldyBFcnJvcihgVW5rbm93biBmaWxlOiAke1RlfWApfWZ1bmN0aW9u''@;'; put 'put ''IEwoX2UsVGUsU2UsemUpe3JldHVybiB5LmNvcHlGaWxlU3luYyhUZSxTZSksemUucHJlc2VydmVUaW1lc3RhbXBzJiZmdW5jdGlvbiBLKF9lLFRlLFNlKXsoZnVuY3Rpb24gVShfZSl7cmV0dXJuISgxMjgmX2UpfSkoX2UpJiZmdW5jdGlvbiBXKF9lLFRlKXtZKF9lLDEyOHxUZSl9KFNlLF9l''@;'; put 'put ''KSxmdW5jdGlvbiBYKF9lLFRlKXtjb25zdCBTZT15LnN0YXRTeW5jKF9lKTt3KFRlLFNlLmF0aW1lLFNlLm10aW1lKX0oVGUsU2UpfShfZS5tb2RlLFRlLFNlKSxZKFNlLF9lLm1vZGUpfWZ1bmN0aW9uIFkoX2UsVGUpe3JldHVybiB5LmNobW9kU3luYyhfZSxUZSl9ZnVuY3Rpb24gcmUoX2Us''@;'; put 'put ''VGUsU2Upe2NvbnN0IHplPXkub3BlbmRpclN5bmMoX2UpO3RyeXtsZXQgVjtmb3IoO251bGwhPT0oVj16ZS5yZWFkU3luYygpKTspaWUoVi5uYW1lLF9lLFRlLFNlKX1maW5hbGx5e3plLmNsb3NlU3luYygpfX1mdW5jdGlvbiBpZShfZSxUZSxTZSx6ZSl7Y29uc3QgVj1nLmpvaW4oVGUsX2Up''@;'; put 'put ''LHA9Zy5qb2luKFNlLF9lKTtpZih6ZS5maWx0ZXImJiF6ZS5maWx0ZXIoVixwKSlyZXR1cm47Y29uc3R7ZGVzdFN0YXQ6Yn09UC5jaGVja1BhdGhzU3luYyhWLHAsImNvcHkiLHplKTtyZXR1cm4gTyhiLFYscCx6ZSl9dWUuZXhwb3J0cz1mdW5jdGlvbiBGKF9lLFRlLFNlKXsiZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2YgU2UmJihTZT17ZmlsdGVyOlNlfSksKFNlPVNlfHx7fSkuY2xvYmJlcj0hKCJjbG9iYmVyImluIFNlKXx8ISFTZS5jbG9iYmVyLFNlLm92ZXJ3cml0ZT0ib3ZlcndyaXRlImluIFNlPyEhU2Uub3ZlcndyaXRlOlNlLmNsb2JiZXIsU2UucHJlc2VydmVUaW1lc3RhbXBzJiYiaWEz''@;'; put 'put ''MiI9PT1JLmFyY2gmJkkuZW1pdFdhcm5pbmcoIlVzaW5nIHRoZSBwcmVzZXJ2ZVRpbWVzdGFtcHMgb3B0aW9uIGluIDMyLWJpdCBub2RlIGlzIG5vdCByZWNvbW1lbmRlZDtcblxuXHRzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pwcmljaGFyZHNvbi9ub2RlLWZzLWV4dHJhL2lzc3Vlcy8yNjki''@;'; put 'put ''LCJXYXJuaW5nIiwiZnMtZXh0cmEtV0FSTjAwMDIiKTtjb25zdHtzcmNTdGF0OnplLGRlc3RTdGF0OlZ9PVAuY2hlY2tQYXRoc1N5bmMoX2UsVGUsImNvcHkiLFNlKTtpZihQLmNoZWNrUGFyZW50UGF0aHNTeW5jKF9lLHplLFRlLCJjb3B5IiksU2UuZmlsdGVyJiYhU2UuZmlsdGVyKF9lLFRl''@;'; put 'put ''KSlyZXR1cm47Y29uc3QgcD1nLmRpcm5hbWUoVGUpO3JldHVybiB5LmV4aXN0c1N5bmMocCl8fEIocCksTyhWLF9lLFRlLFNlKX19LDcxODk6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg0MTU1KTtjb25zdCB5PV8oNzc0OSksZz1fKDI1MjApLHtta2RpcnM6Qn09XygxMzgxKSx7''@;'; put 'put ''cGF0aEV4aXN0czp3fT1fKDkyNTcpLHt1dGltZXNNaWxsaXM6UH09XygzMTgpLEY9XygyNzMzKTtmdW5jdGlvbiB6KCl7cmV0dXJuKHo9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFRlLFNlLHplPXt9KXsiZnVuY3Rpb24iPT10eXBlb2YgemUmJih6ZT17ZmlsdGVyOnplfSksemUuY2xv''@;'; put 'put ''YmJlcj0hKCJjbG9iYmVyImluIHplKXx8ISF6ZS5jbG9iYmVyLHplLm92ZXJ3cml0ZT0ib3ZlcndyaXRlImluIHplPyEhemUub3ZlcndyaXRlOnplLmNsb2JiZXIsemUucHJlc2VydmVUaW1lc3RhbXBzJiYiaWEzMiI9PT1JLmFyY2gmJkkuZW1pdFdhcm5pbmcoIlVzaW5nIHRoZSBwcmVzZXJ2''@;'; put 'put ''ZVRpbWVzdGFtcHMgb3B0aW9uIGluIDMyLWJpdCBub2RlIGlzIG5vdCByZWNvbW1lbmRlZDtcblxuXHRzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pwcmljaGFyZHNvbi9ub2RlLWZzLWV4dHJhL2lzc3Vlcy8yNjkiLCJXYXJuaW5nIiwiZnMtZXh0cmEtV0FSTjAwMDEiKTtjb25zdHtzcmNTdGF0''@;'; put 'put ''OlYsZGVzdFN0YXQ6cH09eWllbGQgRi5jaGVja1BhdGhzKFRlLFNlLCJjb3B5Iix6ZSk7aWYoeWllbGQgRi5jaGVja1BhcmVudFBhdGhzKFRlLFYsU2UsImNvcHkiKSwhKHlpZWxkIE4oVGUsU2UsemUpKSlyZXR1cm47Y29uc3QgeD1nLmRpcm5hbWUoU2UpOyh5aWVsZCB3KHgpKXx8KHlpZWxk''@;'; put 'put ''IEIoeCkpLHlpZWxkIEsocCxUZSxTZSx6ZSl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIE4oVGUsU2UsemUpe3JldHVybiBMLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBMKCl7cmV0dXJuKEw9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFRlLFNlLHplKXty''@;'; put 'put ''ZXR1cm4hemUuZmlsdGVyfHx6ZS5maWx0ZXIoVGUsU2UpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBLKFRlLFNlLHplLFYpe3JldHVybiBVLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBVKCl7cmV0dXJuIFU9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFRl''@;'; put 'put ''LFNlLHplLFYpe2NvbnN0IGI9eWllbGQoVi5kZXJlZmVyZW5jZT95LnN0YXQ6eS5sc3RhdCkoU2UpO2lmKGIuaXNEaXJlY3RvcnkoKSlyZXR1cm4gZnVuY3Rpb24gaWUoVGUsU2UsemUsVixwKXtyZXR1cm4gbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfShiLFRlLFNlLHplLFYpO2lmKGIuaXNG''@;'; put 'put ''aWxlKCl8fGIuaXNDaGFyYWN0ZXJEZXZpY2UoKXx8Yi5pc0Jsb2NrRGV2aWNlKCkpcmV0dXJuIGZ1bmN0aW9uIFcoVGUsU2UsemUsVixwKXtyZXR1cm4gWS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KGIsVGUsU2UsemUsVik7aWYoYi5pc1N5bWJvbGljTGluaygpKXJldHVybiBmdW5jdGlvbiBt''@;'; put 'put ''ZShUZSxTZSx6ZSxWKXtyZXR1cm4gX2UuYXBwbHkodGhpcyxhcmd1bWVudHMpfShUZSxTZSx6ZSxWKTt0aHJvdyBiLmlzU29ja2V0KCk/bmV3IEVycm9yKGBDYW5ub3QgY29weSBhIHNvY2tldCBmaWxlOiAke1NlfWApOmIuaXNGSUZPKCk/bmV3IEVycm9yKGBDYW5ub3QgY29weSBhIEZJRk8g''@;'; put 'put ''cGlwZTogJHtTZX1gKTpuZXcgRXJyb3IoYFVua25vd24gZmlsZTogJHtTZX1gKX0pLFUuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFkoKXtyZXR1cm4oWT1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVGUsU2UsemUsVixwKXtpZighU2UpcmV0dXJuIFgoVGUsemUsVixwKTtp''@;'; put 'put ''ZihwLm92ZXJ3cml0ZSlyZXR1cm4geWllbGQgeS51bmxpbmsoViksWChUZSx6ZSxWLHApO2lmKHAuZXJyb3JPbkV4aXN0KXRocm93IG5ldyBFcnJvcihgJyR7Vn0nIGFscmVhZHkgZXhpc3RzYCl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIFgoVGUsU2UsemUsVil7cmV0dXJu''@;'; put 'put ''IGVlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBlZSgpe3JldHVybihlZT1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVGUsU2UsemUsVil7aWYoeWllbGQgeS5jb3B5RmlsZShTZSx6ZSksVi5wcmVzZXJ2ZVRpbWVzdGFtcHMpeyhmdW5jdGlvbiBKKFRlKXtyZXR1cm4hKDEy''@;'; put 'put ''OCZUZSl9KShUZS5tb2RlKSYmKHlpZWxkIGZ1bmN0aW9uIHJlKFRlLFNlKXtyZXR1cm4geS5jaG1vZChUZSwxMjh8U2UpfSh6ZSxUZS5tb2RlKSk7Y29uc3QgcD15aWVsZCB5LnN0YXQoU2UpO3lpZWxkIFAoemUscC5hdGltZSxwLm10aW1lKX1yZXR1cm4geS5jaG1vZCh6ZSxUZS5tb2RlKX0p''@;'; put 'put ''KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gbGUoKXtyZXR1cm4obGU9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFRlLFNlLHplLFYscCl7U2V8fCh5aWVsZCB5Lm1rZGlyKFYpKTtjb25zdCBiPVtdO3ZhciBULHg9ITEsQz0hMTt0cnl7Zm9yKHZhciBqLEg9X2FzeW5jSXRl''@;'; put 'put ''cmF0b3IoeWllbGQgeS5vcGVuZGlyKHplKSk7eD0hKGo9eWllbGQgSC5uZXh0KCkpLmRvbmU7eD0hMSl7Y29uc3QgRT1qLnZhbHVlO3tjb25zdCBtPWcuam9pbih6ZSxFLm5hbWUpLEE9Zy5qb2luKFYsRS5uYW1lKTtiLnB1c2goTihtLEEscCkudGhlbihvZT0+e2lmKG9lKXJldHVybiBGLmNo''@;'; put 'put ''ZWNrUGF0aHMobSxBLCJjb3B5IixwKS50aGVuKCh7ZGVzdFN0YXQ6dGV9KT0+Syh0ZSxtLEEscCkpfSkpfX19Y2F0Y2goRSl7Qz0hMCxUPUV9ZmluYWxseXt0cnl7eCYmbnVsbCE9SC5yZXR1cm4mJih5aWVsZCBILnJldHVybigpKX1maW5hbGx5e2lmKEMpdGhyb3cgVH19eWllbGQgUHJvbWlz''@;'; put 'put ''ZS5hbGwoYiksU2V8fCh5aWVsZCB5LmNobW9kKFYsVGUubW9kZSkpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBfZSgpe3JldHVybihfZT1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVGUsU2UsemUsVil7bGV0IHA9eWllbGQgeS5yZWFkbGluayhTZSk7aWYoVi5kZXJl''@;'; put 'put ''ZmVyZW5jZSYmKHA9Zy5yZXNvbHZlKEkuY3dkKCkscCkpLCFUZSlyZXR1cm4geS5zeW1saW5rKHAsemUpO2xldCBiPW51bGw7dHJ5e2I9eWllbGQgeS5yZWFkbGluayh6ZSl9Y2F0Y2goeCl7aWYoIkVJTlZBTCI9PT14LmNvZGV8fCJVTktOT1dOIj09PXguY29kZSlyZXR1cm4geS5zeW1saW5r''@;'; put 'put ''KHAsemUpO3Rocm93IHh9aWYoVi5kZXJlZmVyZW5jZSYmKGI9Zy5yZXNvbHZlKEkuY3dkKCksYikpLEYuaXNTcmNTdWJkaXIocCxiKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb3B5ICcke3B9JyB0byBhIHN1YmRpcmVjdG9yeSBvZiBpdHNlbGYsICcke2J9Jy5gKTtpZihGLmlzU3JjU3Vi''@;'; put 'put ''ZGlyKGIscCkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlICcke2J9JyB3aXRoICcke3B9Jy5gKTtyZXR1cm4geWllbGQgeS51bmxpbmsoemUpLHkuc3ltbGluayhwLHplKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dWUuZXhwb3J0cz1mdW5jdGlvbiBPKFRlLFNlKXtyZXR1''@;'; put 'put ''cm4gei5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSw2NDY0Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9Xyg4OTgxKS5mcm9tUHJvbWlzZTt1ZS5leHBvcnRzPXtjb3B5OkkoXyg3MTg5KSksY29weVN5bmM6XygzODczKX19LDU1OTA6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7Y29u''@;'; put 'put ''c3QgST1fKDg5ODEpLmZyb21Qcm9taXNlLHk9Xyg3NzQ5KSxnPV8oMjUyMCksQj1fKDEzODEpLHc9Xyg0NTQyKSxQPUkoZnVuY3Rpb24oKXt2YXIgTz1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooTil7bGV0IEw7dHJ5e0w9eWllbGQgeS5yZWFkZGlyKE4pfWNhdGNoe3JldHVybiBCLm1r''@;'; put 'put ''ZGlycyhOKX1yZXR1cm4gUHJvbWlzZS5hbGwoTC5tYXAoSz0+dy5yZW1vdmUoZy5qb2luKE4sSykpKSl9KTtyZXR1cm4gZnVuY3Rpb24geihOKXtyZXR1cm4gTy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKTtmdW5jdGlvbiBGKE8pe2xldCB6O3RyeXt6PXkucmVhZGRpclN5bmMoTyl9Y2F0''@;'; put 'put ''Y2h7cmV0dXJuIEIubWtkaXJzU3luYyhPKX16LmZvckVhY2goTj0+e049Zy5qb2luKE8sTiksdy5yZW1vdmVTeW5jKE4pfSl9dWUuZXhwb3J0cz17ZW1wdHlEaXJTeW5jOkYsZW1wdHlkaXJTeW5jOkYsZW1wdHlEaXI6UCxlbXB0eWRpcjpQfX0sNjUzMDoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijtjb25zdCBJPV8oODk4MSkuZnJvbVByb21pc2UseT1fKDI1MjApLGc9Xyg3NzQ5KSxCPV8oMTM4MSk7ZnVuY3Rpb24gUCgpe3JldHVybihQPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihPKXtsZXQgejt0cnl7ej15aWVsZCBnLnN0YXQoTyl9Y2F0Y2h7fWlmKHomJnouaXNGaWxlKCkp''@;'; put 'put ''cmV0dXJuO2NvbnN0IE49eS5kaXJuYW1lKE8pO2xldCBMPW51bGw7dHJ5e0w9eWllbGQgZy5zdGF0KE4pfWNhdGNoKEspe2lmKCJFTk9FTlQiPT09Sy5jb2RlKXJldHVybiB5aWVsZCBCLm1rZGlycyhOKSx2b2lkKHlpZWxkIGcud3JpdGVGaWxlKE8sIiIpKTt0aHJvdyBLfUwuaXNEaXJlY3Rv''@;'; put 'put ''cnkoKT95aWVsZCBnLndyaXRlRmlsZShPLCIiKTp5aWVsZCBnLnJlYWRkaXIoTil9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXVlLmV4cG9ydHM9e2NyZWF0ZUZpbGU6SShmdW5jdGlvbiB3KE8pe3JldHVybiBQLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGNyZWF0ZUZpbGVTeW5jOmZ1bmN0''@;'; put 'put ''aW9uIEYoTyl7bGV0IHo7dHJ5e3o9Zy5zdGF0U3luYyhPKX1jYXRjaHt9aWYoeiYmei5pc0ZpbGUoKSlyZXR1cm47Y29uc3QgTj15LmRpcm5hbWUoTyk7dHJ5e2cuc3RhdFN5bmMoTikuaXNEaXJlY3RvcnkoKXx8Zy5yZWFkZGlyU3luYyhOKX1jYXRjaChMKXtpZighTHx8IkVOT0VOVCIhPT1M''@;'; put 'put ''LmNvZGUpdGhyb3cgTDtCLm1rZGlyc1N5bmMoTil9Zy53cml0ZUZpbGVTeW5jKE8sIiIpfX19LDE3MjA6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7Y29uc3R7Y3JlYXRlRmlsZTpJLGNyZWF0ZUZpbGVTeW5jOnl9PV8oNjUzMCkse2NyZWF0ZUxpbms6ZyxjcmVhdGVMaW5rU3luYzpCfT1fKDQx''@;'; put 'put ''NDcpLHtjcmVhdGVTeW1saW5rOncsY3JlYXRlU3ltbGlua1N5bmM6UH09XygzNjM1KTt1ZS5leHBvcnRzPXtjcmVhdGVGaWxlOkksY3JlYXRlRmlsZVN5bmM6eSxlbnN1cmVGaWxlOkksZW5zdXJlRmlsZVN5bmM6eSxjcmVhdGVMaW5rOmcsY3JlYXRlTGlua1N5bmM6QixlbnN1cmVMaW5rOmcs''@;'; put 'put ''ZW5zdXJlTGlua1N5bmM6QixjcmVhdGVTeW1saW5rOncsY3JlYXRlU3ltbGlua1N5bmM6UCxlbnN1cmVTeW1saW5rOncsZW5zdXJlU3ltbGlua1N5bmM6UH19LDQxNDc6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7Y29uc3QgST1fKDg5ODEpLmZyb21Qcm9taXNlLHk9XygyNTIwKSxnPV8oNzc0''@;'; put 'put ''OSksQj1fKDEzODEpLHtwYXRoRXhpc3RzOnd9PV8oOTI1Nykse2FyZUlkZW50aWNhbDpQfT1fKDI3MzMpO2Z1bmN0aW9uIE8oKXtyZXR1cm4oTz1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooTixMKXtsZXQgSyxVO3RyeXtLPXlpZWxkIGcubHN0YXQoTCl9Y2F0Y2h7fXRyeXtVPXlpZWxk''@;'; put 'put ''IGcubHN0YXQoTil9Y2F0Y2goWCl7dGhyb3cgWC5tZXNzYWdlPVgubWVzc2FnZS5yZXBsYWNlKCJsc3RhdCIsImVuc3VyZUxpbmsiKSxYfWlmKEsmJlAoVSxLKSlyZXR1cm47Y29uc3QgVz15LmRpcm5hbWUoTCk7KHlpZWxkIHcoVykpfHwoeWllbGQgQi5ta2RpcnMoVykpLHlpZWxkIGcubGlu''@;'; put 'put ''ayhOLEwpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX11ZS5leHBvcnRzPXtjcmVhdGVMaW5rOkkoZnVuY3Rpb24gRihOLEwpe3JldHVybiBPLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGNyZWF0ZUxpbmtTeW5jOmZ1bmN0aW9uIHooTixMKXtsZXQgSzt0cnl7Sz1nLmxzdGF0U3luYyhMKX1j''@;'; put 'put ''YXRjaHt9dHJ5e2NvbnN0IFk9Zy5sc3RhdFN5bmMoTik7aWYoSyYmUChZLEspKXJldHVybn1jYXRjaChZKXt0aHJvdyBZLm1lc3NhZ2U9WS5tZXNzYWdlLnJlcGxhY2UoImxzdGF0IiwiZW5zdXJlTGluayIpLFl9Y29uc3QgVT15LmRpcm5hbWUoTCk7cmV0dXJuIGcuZXhpc3RzU3luYyhVKXx8''@;'; put 'put ''Qi5ta2RpcnNTeW5jKFUpLGcubGlua1N5bmMoTixMKX19fSw2MDcyOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9XygyNTIwKSx5PV8oNzc0OSkse3BhdGhFeGlzdHM6Z309Xyg5MjU3KSxCPV8oODk4MSkuZnJvbVByb21pc2U7ZnVuY3Rpb24gUCgpe3JldHVybihQPV9hc3luY1Rv''@;'; put 'put ''R2VuZXJhdG9yKGZ1bmN0aW9uKihPLHope2lmKEkuaXNBYnNvbHV0ZShPKSl7dHJ5e3lpZWxkIHkubHN0YXQoTyl9Y2F0Y2goVSl7dGhyb3cgVS5tZXNzYWdlPVUubWVzc2FnZS5yZXBsYWNlKCJsc3RhdCIsImVuc3VyZVN5bWxpbmsiKSxVfXJldHVybnt0b0N3ZDpPLHRvRHN0Ok99fWNvbnN0''@;'; put 'put ''IE49SS5kaXJuYW1lKHopLEw9SS5qb2luKE4sTyk7aWYoeWllbGQgZyhMKSlyZXR1cm57dG9Dd2Q6TCx0b0RzdDpPfTt0cnl7eWllbGQgeS5sc3RhdChPKX1jYXRjaChVKXt0aHJvdyBVLm1lc3NhZ2U9VS5tZXNzYWdlLnJlcGxhY2UoImxzdGF0IiwiZW5zdXJlU3ltbGluayIpLFV9cmV0dXJu''@;'; put 'put ''e3RvQ3dkOk8sdG9Ec3Q6SS5yZWxhdGl2ZShOLE8pfX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dWUuZXhwb3J0cz17c3ltbGlua1BhdGhzOkIoZnVuY3Rpb24gdyhPLHope3JldHVybiBQLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLHN5bWxpbmtQYXRoc1N5bmM6ZnVuY3Rpb24gRihPLHop''@;'; put 'put ''e2lmKEkuaXNBYnNvbHV0ZShPKSl7aWYoIXkuZXhpc3RzU3luYyhPKSl0aHJvdyBuZXcgRXJyb3IoImFic29sdXRlIHNyY3BhdGggZG9lcyBub3QgZXhpc3QiKTtyZXR1cm57dG9Dd2Q6Tyx0b0RzdDpPfX1jb25zdCBOPUkuZGlybmFtZSh6KSxMPUkuam9pbihOLE8pO2lmKHkuZXhpc3RzU3lu''@;'; put 'put ''YyhMKSlyZXR1cm57dG9Dd2Q6TCx0b0RzdDpPfTtpZigheS5leGlzdHNTeW5jKE8pKXRocm93IG5ldyBFcnJvcigicmVsYXRpdmUgc3JjcGF0aCBkb2VzIG5vdCBleGlzdCIpO3JldHVybnt0b0N3ZDpPLHRvRHN0OkkucmVsYXRpdmUoTixPKX19fX0sOTI1OToodWUscSxfKT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijtjb25zdCBJPV8oNzc0OSkseT1fKDg5ODEpLmZyb21Qcm9taXNlO2Z1bmN0aW9uIEIoKXtyZXR1cm4oQj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooUCxGKXtpZihGKXJldHVybiBGO2xldCBPO3RyeXtPPXlpZWxkIEkubHN0YXQoUCl9Y2F0Y2h7cmV0dXJuImZpbGUifXJldHVy''@;'; put 'put ''biBPJiZPLmlzRGlyZWN0b3J5KCk/ImRpciI6ImZpbGUifSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX11ZS5leHBvcnRzPXtzeW1saW5rVHlwZTp5KGZ1bmN0aW9uIGcoUCxGKXtyZXR1cm4gQi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxzeW1saW5rVHlwZVN5bmM6ZnVuY3Rpb24gdyhQLEYp''@;'; put 'put ''e2lmKEYpcmV0dXJuIEY7bGV0IE87dHJ5e089SS5sc3RhdFN5bmMoUCl9Y2F0Y2h7cmV0dXJuImZpbGUifXJldHVybiBPJiZPLmlzRGlyZWN0b3J5KCk/ImRpciI6ImZpbGUifX19LDM2MzU6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7Y29uc3QgST1fKDg5ODEpLmZyb21Qcm9taXNlLHk9Xygy''@;'; put 'put ''NTIwKSxnPV8oNzc0OSkse21rZGlyczpCLG1rZGlyc1N5bmM6d309XygxMzgxKSx7c3ltbGlua1BhdGhzOlAsc3ltbGlua1BhdGhzU3luYzpGfT1fKDYwNzIpLHtzeW1saW5rVHlwZTpPLHN5bWxpbmtUeXBlU3luYzp6fT1fKDkyNTkpLHtwYXRoRXhpc3RzOk59PV8oOTI1Nykse2FyZUlkZW50''@;'; put 'put ''aWNhbDpMfT1fKDI3MzMpO2Z1bmN0aW9uIFUoKXtyZXR1cm4oVT1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooWSxYLGVlKXtsZXQgSjt0cnl7Sj15aWVsZCBnLmxzdGF0KFgpfWNhdGNoe31pZihKJiZKLmlzU3ltYm9saWNMaW5rKCkpe2NvbnN0W21lLF9lXT15aWVsZCBQcm9taXNlLmFs''@;'; put 'put ''bChbZy5zdGF0KFkpLGcuc3RhdChYKV0pO2lmKEwobWUsX2UpKXJldHVybn1jb25zdCByZT15aWVsZCBQKFksWCk7WT1yZS50b0RzdDtjb25zdCBpZT15aWVsZCBPKHJlLnRvQ3dkLGVlKSxsZT15LmRpcm5hbWUoWCk7cmV0dXJuKHlpZWxkIE4obGUpKXx8KHlpZWxkIEIobGUpKSxnLnN5bWxp''@;'; put 'put ''bmsoWSxYLGllKX0pKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9dWUuZXhwb3J0cz17Y3JlYXRlU3ltbGluazpJKGZ1bmN0aW9uIEsoWSxYLGVlKXtyZXR1cm4gVS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxjcmVhdGVTeW1saW5rU3luYzpmdW5jdGlvbiBXKFksWCxlZSl7bGV0IEo7dHJ5e0o9''@;'; put 'put ''Zy5sc3RhdFN5bmMoWCl9Y2F0Y2h7fWlmKEomJkouaXNTeW1ib2xpY0xpbmsoKSl7Y29uc3QgbWU9Zy5zdGF0U3luYyhZKSxfZT1nLnN0YXRTeW5jKFgpO2lmKEwobWUsX2UpKXJldHVybn1jb25zdCByZT1GKFksWCk7WT1yZS50b0RzdCxlZT16KHJlLnRvQ3dkLGVlKTtjb25zdCBpZT15LmRp''@;'; put 'put ''cm5hbWUoWCk7cmV0dXJuIGcuZXhpc3RzU3luYyhpZSl8fHcoaWUpLGcuc3ltbGlua1N5bmMoWSxYLGVlKX19fSw3NzQ5Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNDE1NSk7Y29uc3QgeT1fKDg5ODEpLmZyb21DYWxsYmFjayxnPV8oNzcpLEI9WyJhY2Nlc3MiLCJhcHBlbmRG''@;'; put 'put ''aWxlIiwiY2htb2QiLCJjaG93biIsImNsb3NlIiwiY29weUZpbGUiLCJjcCIsImZjaG1vZCIsImZjaG93biIsImZkYXRhc3luYyIsImZzdGF0IiwiZnN5bmMiLCJmdHJ1bmNhdGUiLCJmdXRpbWVzIiwiZ2xvYiIsImxjaG1vZCIsImxjaG93biIsImx1dGltZXMiLCJsaW5rIiwibHN0YXQiLCJt''@;'; put 'put ''a2RpciIsIm1rZHRlbXAiLCJvcGVuIiwib3BlbmRpciIsInJlYWRkaXIiLCJyZWFkRmlsZSIsInJlYWRsaW5rIiwicmVhbHBhdGgiLCJyZW5hbWUiLCJybSIsInJtZGlyIiwic3RhdCIsInN0YXRmcyIsInN5bWxpbmsiLCJ0cnVuY2F0ZSIsInVubGluayIsInV0aW1lcyIsIndyaXRlRmlsZSJd''@;'; put 'put ''LmZpbHRlcih3PT4iZnVuY3Rpb24iPT10eXBlb2YgZ1t3XSk7T2JqZWN0LmFzc2lnbihxLGcpLEIuZm9yRWFjaCh3PT57cVt3XT15KGdbd10pfSkscS5leGlzdHM9ZnVuY3Rpb24odyxQKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgUD9nLmV4aXN0cyh3LFApOm5ldyBQcm9taXNlKEY9Pmcu''@;'; put 'put ''ZXhpc3RzKHcsRikpfSxxLnJlYWQ9ZnVuY3Rpb24odyxQLEYsTyx6LE4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBOP2cucmVhZCh3LFAsRixPLHosTik6bmV3IFByb21pc2UoKEwsSyk9PntnLnJlYWQodyxQLEYsTyx6LChVLFcsWSk9PntpZihVKXJldHVybiBLKFUpO0woe2J5dGVzUmVh''@;'; put 'put ''ZDpXLGJ1ZmZlcjpZfSl9KX0pfSxxLndyaXRlPWZ1bmN0aW9uKHcsUCwuLi5GKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgRltGLmxlbmd0aC0xXT9nLndyaXRlKHcsUCwuLi5GKTpuZXcgUHJvbWlzZSgoTyx6KT0+e2cud3JpdGUodyxQLC4uLkYsKE4sTCxLKT0+e2lmKE4pcmV0dXJuIHoo''@;'; put 'put ''Tik7Tyh7Ynl0ZXNXcml0dGVuOkwsYnVmZmVyOkt9KX0pfSl9LHEucmVhZHY9ZnVuY3Rpb24odyxQLC4uLkYpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBGW0YubGVuZ3RoLTFdP2cucmVhZHYodyxQLC4uLkYpOm5ldyBQcm9taXNlKChPLHopPT57Zy5yZWFkdih3LFAsLi4uRiwoTixMLEsp''@;'; put 'put ''PT57aWYoTilyZXR1cm4geihOKTtPKHtieXRlc1JlYWQ6TCxidWZmZXJzOkt9KX0pfSl9LHEud3JpdGV2PWZ1bmN0aW9uKHcsUCwuLi5GKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgRltGLmxlbmd0aC0xXT9nLndyaXRldih3LFAsLi4uRik6bmV3IFByb21pc2UoKE8seik9PntnLndyaXRl''@;'; put 'put ''dih3LFAsLi4uRiwoTixMLEspPT57aWYoTilyZXR1cm4geihOKTtPKHtieXRlc1dyaXR0ZW46TCxidWZmZXJzOkt9KX0pfSl9LCJmdW5jdGlvbiI9PXR5cGVvZiBnLnJlYWxwYXRoLm5hdGl2ZT9xLnJlYWxwYXRoLm5hdGl2ZT15KGcucmVhbHBhdGgubmF0aXZlKTpJLmVtaXRXYXJuaW5nKCJm''@;'; put 'put ''cy5yZWFscGF0aC5uYXRpdmUgaXMgbm90IGEgZnVuY3Rpb24uIElzIGZzIGJlaW5nIG1vbmtleS1wYXRjaGVkPyIsIldhcm5pbmciLCJmcy1leHRyYS1XQVJOMDAwMyIpfSw1Njc0Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9ey4uLl8oNzc0OSksLi4uXyg2NDY0KSwuLi5f''@;'; put 'put ''KDU1OTApLC4uLl8oMTcyMCksLi4uXyg2NTczKSwuLi5fKDEzODEpLC4uLl8oNTMwKSwuLi5fKDQ2NzApLC4uLl8oOTI1NyksLi4uXyg0NTQyKX19LDY1NzM6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7Y29uc3QgST1fKDg5ODEpLmZyb21Qcm9taXNlLHk9Xyg3MTgzKTt5Lm91dHB1dEpzb249''@;'; put 'put ''SShfKDM1MDgpKSx5Lm91dHB1dEpzb25TeW5jPV8oOTU3OCkseS5vdXRwdXRKU09OPXkub3V0cHV0SnNvbix5Lm91dHB1dEpTT05TeW5jPXkub3V0cHV0SnNvblN5bmMseS53cml0ZUpTT049eS53cml0ZUpzb24seS53cml0ZUpTT05TeW5jPXkud3JpdGVKc29uU3luYyx5LnJlYWRKU09OPXku''@;'; put 'put ''cmVhZEpzb24seS5yZWFkSlNPTlN5bmM9eS5yZWFkSnNvblN5bmMsdWUuZXhwb3J0cz15fSw3MTgzOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9Xyg2ODEzKTt1ZS5leHBvcnRzPXtyZWFkSnNvbjpJLnJlYWRGaWxlLHJlYWRKc29uU3luYzpJLnJlYWRGaWxlU3luYyx3cml0ZUpz''@;'; put 'put ''b246SS53cml0ZUZpbGUsd3JpdGVKc29uU3luYzpJLndyaXRlRmlsZVN5bmN9fSw5NTc4Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO2NvbnN0e3N0cmluZ2lmeTpJfT1fKDY3ODApLHtvdXRwdXRGaWxlU3luYzp5fT1fKDQ2NzApO3VlLmV4cG9ydHM9ZnVuY3Rpb24gZyhCLHcsUCl7Y29uc3Qg''@;'; put 'put ''Rj1JKHcsUCk7eShCLEYsUCl9fSwzNTA4Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO2NvbnN0e3N0cmluZ2lmeTpJfT1fKDY3ODApLHtvdXRwdXRGaWxlOnl9PV8oNDY3MCk7ZnVuY3Rpb24gQigpe3JldHVybihCPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKih3LFAsRj17fSl7Y29uc3Qg''@;'; put 'put ''Tz1JKFAsRik7eWllbGQgeSh3LE8sRil9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXVlLmV4cG9ydHM9ZnVuY3Rpb24gZyh3LFApe3JldHVybiBCLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LDEzODE6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7Y29uc3QgST1fKDg5ODEpLmZyb21Qcm9taXNl''@;'; put 'put ''LHttYWtlRGlyOnksbWFrZURpclN5bmM6Z309Xyg4MjMzKSxCPUkoeSk7dWUuZXhwb3J0cz17bWtkaXJzOkIsbWtkaXJzU3luYzpnLG1rZGlycDpCLG1rZGlycFN5bmM6ZyxlbnN1cmVEaXI6QixlbnN1cmVEaXJTeW5jOmd9fSw4MjMzOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9''@;'; put 'put ''Xyg3NzQ5KSx7Y2hlY2tQYXRoOnl9PV8oMzQ2OCksZz1CPT4ibnVtYmVyIj09dHlwZW9mIEI/Qjp7bW9kZTo1MTEsLi4uQn0ubW9kZTt1ZS5leHBvcnRzLm1ha2VEaXI9ZnVuY3Rpb24oKXt2YXIgQj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbioodyxQKXtyZXR1cm4geSh3KSxJLm1rZGly''@;'; put 'put ''KHcse21vZGU6ZyhQKSxyZWN1cnNpdmU6ITB9KX0pO3JldHVybiBmdW5jdGlvbih3LFApe3JldHVybiBCLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksdWUuZXhwb3J0cy5tYWtlRGlyU3luYz0oQix3KT0+KHkoQiksSS5ta2RpclN5bmMoQix7bW9kZTpnKHcpLHJlY3Vyc2l2ZTohMH0pKX0s''@;'; put 'put ''MzQ2ODoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDQxNTUpO2NvbnN0IHk9XygyNTIwKTt1ZS5leHBvcnRzLmNoZWNrUGF0aD1mdW5jdGlvbihCKXtpZigid2luMzIiPT09SS5wbGF0Zm9ybSYmL1s8PjoifD8qXS8udGVzdChCLnJlcGxhY2UoeS5wYXJzZShCKS5yb290LCIiKSkp''@;'; put 'put ''e2NvbnN0IFA9bmV3IEVycm9yKGBQYXRoIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyczogJHtCfWApO3Rocm93IFAuY29kZT0iRUlOVkFMIixQfX19LDUzMDoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdCBJPV8oODk4MSkuZnJvbVByb21pc2U7dWUuZXhwb3J0cz17bW92ZTpJKF8o''@;'; put 'put ''NDM2KSksbW92ZVN5bmM6XygzNzM2KX19LDM3MzY6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7Y29uc3QgST1fKDc3KSx5PV8oMjUyMCksZz1fKDY0NjQpLmNvcHlTeW5jLEI9Xyg0NTQyKS5yZW1vdmVTeW5jLHc9XygxMzgxKS5ta2RpcnBTeW5jLFA9XygyNzMzKTtmdW5jdGlvbiBOKEssVSxX''@;'; put 'put ''KXt0cnl7SS5yZW5hbWVTeW5jKEssVSl9Y2F0Y2goWSl7aWYoIkVYREVWIiE9PVkuY29kZSl0aHJvdyBZO3JldHVybiBmdW5jdGlvbiBMKEssVSxXKXtyZXR1cm4gZyhLLFUse292ZXJ3cml0ZTpXLGVycm9yT25FeGlzdDohMCxwcmVzZXJ2ZVRpbWVzdGFtcHM6ITB9KSxCKEspfShLLFUsVyl9''@;'; put 'put ''fXVlLmV4cG9ydHM9ZnVuY3Rpb24gRihLLFUsVyl7Y29uc3QgWT0oVz1XfHx7fSkub3ZlcndyaXRlfHxXLmNsb2JiZXJ8fCExLHtzcmNTdGF0OlgsaXNDaGFuZ2luZ0Nhc2U6ZWU9ITF9PVAuY2hlY2tQYXRoc1N5bmMoSyxVLCJtb3ZlIixXKTtyZXR1cm4gUC5jaGVja1BhcmVudFBhdGhzU3lu''@;'; put 'put ''YyhLLFgsVSwibW92ZSIpLGZ1bmN0aW9uIE8oSyl7Y29uc3QgVT15LmRpcm5hbWUoSyk7cmV0dXJuIHkucGFyc2UoVSkucm9vdD09PVV9KFUpfHx3KHkuZGlybmFtZShVKSksZnVuY3Rpb24geihLLFUsVyxZKXtpZihZKXJldHVybiBOKEssVSxXKTtpZihXKXJldHVybiBCKFUpLE4oSyxVLFcp''@;'; put 'put ''O2lmKEkuZXhpc3RzU3luYyhVKSl0aHJvdyBuZXcgRXJyb3IoImRlc3QgYWxyZWFkeSBleGlzdHMuIik7cmV0dXJuIE4oSyxVLFcpfShLLFUsWSxlZSl9fSw0MzY6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7Y29uc3QgST1fKDc3NDkpLHk9XygyNTIwKSx7Y29weTpnfT1fKDY0NjQpLHtyZW1v''@;'; put 'put ''dmU6Qn09Xyg0NTQyKSx7bWtkaXJwOnd9PV8oMTM4MSkse3BhdGhFeGlzdHM6UH09Xyg5MjU3KSxGPV8oMjczMyk7ZnVuY3Rpb24geigpe3JldHVybiB6PV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihXLFksWD17fSl7Y29uc3QgZWU9WC5vdmVyd3JpdGV8fFguY2xvYmJlcnx8ITEse3Ny''@;'; put 'put ''Y1N0YXQ6Sixpc0NoYW5naW5nQ2FzZTpyZT0hMX09eWllbGQgRi5jaGVja1BhdGhzKFcsWSwibW92ZSIsWCk7eWllbGQgRi5jaGVja1BhcmVudFBhdGhzKFcsSixZLCJtb3ZlIik7Y29uc3QgaWU9eS5kaXJuYW1lKFkpO3JldHVybiB5LnBhcnNlKGllKS5yb290IT09aWUmJih5aWVsZCB3KGll''@;'; put 'put ''KSksZnVuY3Rpb24gTihXLFksWCxlZSl7cmV0dXJuIEwuYXBwbHkodGhpcyxhcmd1bWVudHMpfShXLFksZWUscmUpfSksei5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gTCgpe3JldHVybiBMPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihXLFksWCxlZSl7aWYoIWVlKWlmKFgp''@;'; put 'put ''eWllbGQgQihZKTtlbHNlIGlmKHlpZWxkIFAoWSkpdGhyb3cgbmV3IEVycm9yKCJkZXN0IGFscmVhZHkgZXhpc3RzLiIpO3RyeXt5aWVsZCBJLnJlbmFtZShXLFkpfWNhdGNoKEope2lmKCJFWERFViIhPT1KLmNvZGUpdGhyb3cgSjt5aWVsZCBmdW5jdGlvbiBLKFcsWSxYKXtyZXR1cm4gVS5h''@;'; put 'put ''cHBseSh0aGlzLGFyZ3VtZW50cyl9KFcsWSxYKX19KSxMLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBVKCl7cmV0dXJuKFU9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFcsWSxYKXtyZXR1cm4geWllbGQgZyhXLFkse292ZXJ3cml0ZTpYLGVycm9yT25FeGlzdDohMCxwcmVz''@;'; put 'put ''ZXJ2ZVRpbWVzdGFtcHM6ITB9KSxCKFcpfSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX11ZS5leHBvcnRzPWZ1bmN0aW9uIE8oVyxZKXtyZXR1cm4gei5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSw0NjcwOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9Xyg4OTgxKS5mcm9tUHJvbWlz''@;'; put 'put ''ZSx5PV8oNzc0OSksZz1fKDI1MjApLEI9XygxMzgxKSx3PV8oOTI1NykucGF0aEV4aXN0cztmdW5jdGlvbiBGKCl7cmV0dXJuKEY9X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKHosTixMPSJ1dGYtOCIpe2NvbnN0IEs9Zy5kaXJuYW1lKHopO3JldHVybih5aWVsZCB3KEspKXx8KHlpZWxk''@;'; put 'put ''IEIubWtkaXJzKEspKSx5LndyaXRlRmlsZSh6LE4sTCl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXVlLmV4cG9ydHM9e291dHB1dEZpbGU6SShmdW5jdGlvbiBQKHosTil7cmV0dXJuIEYuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksb3V0cHV0RmlsZVN5bmM6ZnVuY3Rpb24gTyh6LC4uLk4p''@;'; put 'put ''e2NvbnN0IEw9Zy5kaXJuYW1lKHopO3kuZXhpc3RzU3luYyhMKXx8Qi5ta2RpcnNTeW5jKEwpLHkud3JpdGVGaWxlU3luYyh6LC4uLk4pfX19LDkyNTc6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7Y29uc3QgST1fKDg5ODEpLmZyb21Qcm9taXNlLHk9Xyg3NzQ5KTt1ZS5leHBvcnRzPXtwYXRo''@;'; put 'put ''RXhpc3RzOkkoZnVuY3Rpb24gZyhCKXtyZXR1cm4geS5hY2Nlc3MoQikudGhlbigoKT0+ITApLmNhdGNoKCgpPT4hMSl9KSxwYXRoRXhpc3RzU3luYzp5LmV4aXN0c1N5bmN9fSw0NTQyOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9Xyg3NykseT1fKDg5ODEpLmZyb21DYWxsYmFj''@;'; put 'put ''azt1ZS5leHBvcnRzPXtyZW1vdmU6eShmdW5jdGlvbiBnKHcsUCl7SS5ybSh3LHtyZWN1cnNpdmU6ITAsZm9yY2U6ITB9LFApfSkscmVtb3ZlU3luYzpmdW5jdGlvbiBCKHcpe0kucm1TeW5jKHcse3JlY3Vyc2l2ZTohMCxmb3JjZTohMH0pfX19LDI3MzM6KHVlLHEsXyk9PnsidXNlIHN0cmlj''@;'; put 'put ''dCI7Y29uc3QgST1fKDc3NDkpLHk9XygyNTIwKSxnPV8oODk4MSkuZnJvbVByb21pc2U7ZnVuY3Rpb24gRigpe3JldHVybihGPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihZLFgsZWUsSil7Y29uc3R7c3JjU3RhdDpyZSxkZXN0U3RhdDppZX09eWllbGQgZnVuY3Rpb24gQihZLFgsZWUp''@;'; put 'put ''e2NvbnN0IEo9ZWUuZGVyZWZlcmVuY2U/cmU9Pkkuc3RhdChyZSx7YmlnaW50OiEwfSk6cmU9PkkubHN0YXQocmUse2JpZ2ludDohMH0pO3JldHVybiBQcm9taXNlLmFsbChbSihZKSxKKFgpLmNhdGNoKHJlPT57aWYoIkVOT0VOVCI9PT1yZS5jb2RlKXJldHVybiBudWxsO3Rocm93IHJlfSld''@;'; put 'put ''KS50aGVuKChbcmUsaWVdKT0+KHtzcmNTdGF0OnJlLGRlc3RTdGF0OmllfSkpfShZLFgsSik7aWYoaWUpe2lmKEsocmUsaWUpKXtjb25zdCBsZT15LmJhc2VuYW1lKFkpLG1lPXkuYmFzZW5hbWUoWCk7aWYoIm1vdmUiPT09ZWUmJmxlIT09bWUmJmxlLnRvTG93ZXJDYXNlKCk9PT1tZS50b0xv''@;'; put 'put ''d2VyQ2FzZSgpKXJldHVybntzcmNTdGF0OnJlLGRlc3RTdGF0OmllLGlzQ2hhbmdpbmdDYXNlOiEwfTt0aHJvdyBuZXcgRXJyb3IoIlNvdXJjZSBhbmQgZGVzdGluYXRpb24gbXVzdCBub3QgYmUgdGhlIHNhbWUuIil9aWYocmUuaXNEaXJlY3RvcnkoKSYmIWllLmlzRGlyZWN0b3J5KCkpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlIG5vbi1kaXJlY3RvcnkgJyR7WH0nIHdpdGggZGlyZWN0b3J5ICcke1l9Jy5gKTtpZighcmUuaXNEaXJlY3RvcnkoKSYmaWUuaXNEaXJlY3RvcnkoKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgZGlyZWN0b3J5ICcke1h9''@;'; put 'put ''JyB3aXRoIG5vbi1kaXJlY3RvcnkgJyR7WX0nLmApfWlmKHJlLmlzRGlyZWN0b3J5KCkmJlUoWSxYKSl0aHJvdyBuZXcgRXJyb3IoVyhZLFgsZWUpKTtyZXR1cm57c3JjU3RhdDpyZSxkZXN0U3RhdDppZX19KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIHooWSxYLGVlLEope3Jl''@;'; put 'put ''dHVybiBOLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBOKCl7cmV0dXJuKE49X2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qKFksWCxlZSxKKXtjb25zdCByZT15LnJlc29sdmUoeS5kaXJuYW1lKFkpKSxpZT15LnJlc29sdmUoeS5kaXJuYW1lKGVlKSk7aWYoaWU9PT1yZXx8aWU9''@;'; put 'put ''PT15LnBhcnNlKGllKS5yb290KXJldHVybjtsZXQgbGU7dHJ5e2xlPXlpZWxkIEkuc3RhdChpZSx7YmlnaW50OiEwfSl9Y2F0Y2gobWUpe2lmKCJFTk9FTlQiPT09bWUuY29kZSlyZXR1cm47dGhyb3cgbWV9aWYoSyhYLGxlKSl0aHJvdyBuZXcgRXJyb3IoVyhZLGVlLEopKTtyZXR1cm4geihZ''@;'; put 'put ''LFgsaWUsSil9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEsoWSxYKXtyZXR1cm4gWC5pbm8mJlguZGV2JiZYLmlubz09PVkuaW5vJiZYLmRldj09PVkuZGV2fWZ1bmN0aW9uIFUoWSxYKXtjb25zdCBlZT15LnJlc29sdmUoWSkuc3BsaXQoeS5zZXApLmZpbHRlcihyZT0+cmUp''@;'; put 'put ''LEo9eS5yZXNvbHZlKFgpLnNwbGl0KHkuc2VwKS5maWx0ZXIocmU9PnJlKTtyZXR1cm4gZWUuZXZlcnkoKHJlLGllKT0+SltpZV09PT1yZSl9ZnVuY3Rpb24gVyhZLFgsZWUpe3JldHVybmBDYW5ub3QgJHtlZX0gJyR7WX0nIHRvIGEgc3ViZGlyZWN0b3J5IG9mIGl0c2VsZiwgJyR7WH0nLmB9''@;'; put 'put ''dWUuZXhwb3J0cz17Y2hlY2tQYXRoczpnKGZ1bmN0aW9uIFAoWSxYLGVlLEope3JldHVybiBGLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGNoZWNrUGF0aHNTeW5jOmZ1bmN0aW9uIE8oWSxYLGVlLEope2NvbnN0e3NyY1N0YXQ6cmUsZGVzdFN0YXQ6aWV9PWZ1bmN0aW9uIHcoWSxYLGVlKXts''@;'; put 'put ''ZXQgSjtjb25zdCByZT1lZS5kZXJlZmVyZW5jZT9sZT0+SS5zdGF0U3luYyhsZSx7YmlnaW50OiEwfSk6bGU9PkkubHN0YXRTeW5jKGxlLHtiaWdpbnQ6ITB9KSxpZT1yZShZKTt0cnl7Sj1yZShYKX1jYXRjaChsZSl7aWYoIkVOT0VOVCI9PT1sZS5jb2RlKXJldHVybntzcmNTdGF0OmllLGRl''@;'; put 'put ''c3RTdGF0Om51bGx9O3Rocm93IGxlfXJldHVybntzcmNTdGF0OmllLGRlc3RTdGF0Okp9fShZLFgsSik7aWYoaWUpe2lmKEsocmUsaWUpKXtjb25zdCBsZT15LmJhc2VuYW1lKFkpLG1lPXkuYmFzZW5hbWUoWCk7aWYoIm1vdmUiPT09ZWUmJmxlIT09bWUmJmxlLnRvTG93ZXJDYXNlKCk9PT1t''@;'; put 'put ''ZS50b0xvd2VyQ2FzZSgpKXJldHVybntzcmNTdGF0OnJlLGRlc3RTdGF0OmllLGlzQ2hhbmdpbmdDYXNlOiEwfTt0aHJvdyBuZXcgRXJyb3IoIlNvdXJjZSBhbmQgZGVzdGluYXRpb24gbXVzdCBub3QgYmUgdGhlIHNhbWUuIil9aWYocmUuaXNEaXJlY3RvcnkoKSYmIWllLmlzRGlyZWN0b3J5''@;'; put 'put ''KCkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3Qgb3ZlcndyaXRlIG5vbi1kaXJlY3RvcnkgJyR7WH0nIHdpdGggZGlyZWN0b3J5ICcke1l9Jy5gKTtpZighcmUuaXNEaXJlY3RvcnkoKSYmaWUuaXNEaXJlY3RvcnkoKSl0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBvdmVyd3JpdGUgZGlyZWN0b3J5''@;'; put 'put ''ICcke1h9JyB3aXRoIG5vbi1kaXJlY3RvcnkgJyR7WX0nLmApfWlmKHJlLmlzRGlyZWN0b3J5KCkmJlUoWSxYKSl0aHJvdyBuZXcgRXJyb3IoVyhZLFgsZWUpKTtyZXR1cm57c3JjU3RhdDpyZSxkZXN0U3RhdDppZX19LGNoZWNrUGFyZW50UGF0aHM6Zyh6KSxjaGVja1BhcmVudFBhdGhzU3lu''@;'; put 'put ''YzpmdW5jdGlvbiBMKFksWCxlZSxKKXtjb25zdCByZT15LnJlc29sdmUoeS5kaXJuYW1lKFkpKSxpZT15LnJlc29sdmUoeS5kaXJuYW1lKGVlKSk7aWYoaWU9PT1yZXx8aWU9PT15LnBhcnNlKGllKS5yb290KXJldHVybjtsZXQgbGU7dHJ5e2xlPUkuc3RhdFN5bmMoaWUse2JpZ2ludDohMH0p''@;'; put 'put ''fWNhdGNoKG1lKXtpZigiRU5PRU5UIj09PW1lLmNvZGUpcmV0dXJuO3Rocm93IG1lfWlmKEsoWCxsZSkpdGhyb3cgbmV3IEVycm9yKFcoWSxlZSxKKSk7cmV0dXJuIEwoWSxYLGllLEopfSxpc1NyY1N1YmRpcjpVLGFyZUlkZW50aWNhbDpLfX0sMzE4Oih1ZSxxLF8pPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O2NvbnN0IEk9Xyg3NzQ5KSx5PV8oODk4MSkuZnJvbVByb21pc2U7ZnVuY3Rpb24gQigpe3JldHVybihCPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihQLEYsTyl7Y29uc3Qgej15aWVsZCBJLm9wZW4oUCwicisiKTtsZXQgTj1udWxsO3RyeXt5aWVsZCBJLmZ1dGltZXMoeixGLE8pfWZp''@;'; put 'put ''bmFsbHl7dHJ5e3lpZWxkIEkuY2xvc2Uoeil9Y2F0Y2goTCl7Tj1MfX1pZihOKXRocm93IE59KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfXVlLmV4cG9ydHM9e3V0aW1lc01pbGxpczp5KGZ1bmN0aW9uIGcoUCxGLE8pe3JldHVybiBCLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLHV0aW1lc01p''@;'; put 'put ''bGxpc1N5bmM6ZnVuY3Rpb24gdyhQLEYsTyl7Y29uc3Qgej1JLm9wZW5TeW5jKFAsInIrIik7cmV0dXJuIEkuZnV0aW1lc1N5bmMoeixGLE8pLEkuY2xvc2VTeW5jKHopfX19LDc2NDg6dWU9PnsidXNlIHN0cmljdCI7dmFyIF89T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxJPU1hdGgubWF4''@;'; put 'put ''LGc9ZnVuY3Rpb24oRixPKXtmb3IodmFyIHo9W10sTj0wO048Ri5sZW5ndGg7Tis9MSl6W05dPUZbTl07Zm9yKHZhciBMPTA7TDxPLmxlbmd0aDtMKz0xKXpbTCtGLmxlbmd0aF09T1tMXTtyZXR1cm4gen07dWUuZXhwb3J0cz1mdW5jdGlvbihGKXt2YXIgTz10aGlzO2lmKCJmdW5jdGlvbiIh''@;'; put 'put ''PXR5cGVvZiBPfHwiW29iamVjdCBGdW5jdGlvbl0iIT09Xy5hcHBseShPKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICIrTyk7Zm9yKHZhciBOLHo9ZnVuY3Rpb24oRixPKXtmb3IodmFyIHo9W10sTj0xLEw9MDtO''@;'; put 'put ''PEYubGVuZ3RoO04rPTEsTCs9MSl6W0xdPUZbTl07cmV0dXJuIHp9KGFyZ3VtZW50cyksSz1JKDAsTy5sZW5ndGgtei5sZW5ndGgpLFU9W10sVz0wO1c8SztXKyspVVtXXT0iJCIrVztpZihOPUZ1bmN0aW9uKCJiaW5kZXIiLCJyZXR1cm4gZnVuY3Rpb24gKCIrZnVuY3Rpb24oUCxGKXtmb3Io''@;'; put 'put ''dmFyIE89IiIsej0wO3o8UC5sZW5ndGg7eis9MSlPKz1QW3pdLHorMTxQLmxlbmd0aCYmKE8rPSIsIik7cmV0dXJuIE99KFUpKyIpeyByZXR1cm4gYmluZGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTsgfSIpKGZ1bmN0aW9uKCl7aWYodGhpcyBpbnN0YW5jZW9mIE4pe3ZhciBYPU8uYXBwbHko''@;'; put 'put ''dGhpcyxnKHosYXJndW1lbnRzKSk7cmV0dXJuIE9iamVjdChYKT09PVg/WDp0aGlzfXJldHVybiBPLmFwcGx5KEYsZyh6LGFyZ3VtZW50cykpfSksTy5wcm90b3R5cGUpe3ZhciBZPWZ1bmN0aW9uKCl7fTtZLnByb3RvdHlwZT1PLnByb3RvdHlwZSxOLnByb3RvdHlwZT1uZXcgWSxZLnByb3Rv''@;'; put 'put ''dHlwZT1udWxsfXJldHVybiBOfX0sODYxMjoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDc2NDgpO3VlLmV4cG9ydHM9RnVuY3Rpb24ucHJvdG90eXBlLmJpbmR8fEl9LDIxMDoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSSx5PV8oODg5MiksZz1fKDE2NDgpLEI9XygzOTgx''@;'; put 'put ''KSx3PV8oNDcyNiksUD1fKDY3MTIpLEY9XygzNDY0KSxPPV8oNDQ1Myksej1fKDM5MTUpLE49Xyg5NzM4KSxMPV8oNjMyOSksSz1fKDIyNjQpLFU9Xyg1NzMwKSxXPV8oNzA3KSxZPV8oMzg2MiksWD1fKDk1NTApLGVlPUZ1bmN0aW9uLEo9ZnVuY3Rpb24odmUpe3RyeXtyZXR1cm4gZWUoJyJ1''@;'; put 'put ''c2Ugc3RyaWN0IjsgcmV0dXJuICgnK3ZlKyIpLmNvbnN0cnVjdG9yOyIpKCl9Y2F0Y2h7fX0scmU9Xyg3Mjk2KSxpZT1fKDQ0MjkpLGxlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IE99LG1lPXJlP2Z1bmN0aW9uKCl7dHJ5e3JldHVybiBsZX1jYXRjaHt0cnl7cmV0dXJuIHJlKGFyZ3VtZW50cywi''@;'; put 'put ''Y2FsbGVlIikuZ2V0fWNhdGNoe3JldHVybiBsZX19fSgpOmxlLF9lPV8oMTQwNSkoKSxUZT1fKDE2MTgpLFNlPV8oODg5OSksemU9Xyg0NDMpLFY9XygxNzY4KSxwPV8oODkyOCksYj17fSx4PXR5cGVvZiBVaW50OEFycmF5PiJ1Inx8IVRlP0k6VGUoVWludDhBcnJheSksQz17X19wcm90b19f''@;'; put 'put ''Om51bGwsIiVBZ2dyZWdhdGVFcnJvciUiOnR5cGVvZiBBZ2dyZWdhdGVFcnJvcj4idSI/STpBZ2dyZWdhdGVFcnJvciwiJUFycmF5JSI6QXJyYXksIiVBcnJheUJ1ZmZlciUiOnR5cGVvZiBBcnJheUJ1ZmZlcj4idSI/STpBcnJheUJ1ZmZlciwiJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlIjpf''@;'; put 'put ''ZSYmVGU/VGUoW11bU3ltYm9sLml0ZXJhdG9yXSgpKTpJLCIlQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSI6SSwiJUFzeW5jRnVuY3Rpb24lIjpiLCIlQXN5bmNHZW5lcmF0b3IlIjpiLCIlQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUiOmIsIiVBc3luY0l0ZXJhdG9yUHJvdG90eXBl''@;'; put 'put ''JSI6YiwiJUF0b21pY3MlIjp0eXBlb2YgQXRvbWljcz4idSI/STpBdG9taWNzLCIlQmlnSW50JSI6dHlwZW9mIEJpZ0ludD4idSI/STpCaWdJbnQsIiVCaWdJbnQ2NEFycmF5JSI6dHlwZW9mIEJpZ0ludDY0QXJyYXk+InUiP0k6QmlnSW50NjRBcnJheSwiJUJpZ1VpbnQ2NEFycmF5JSI6dHlw''@;'; put 'put ''ZW9mIEJpZ1VpbnQ2NEFycmF5PiJ1Ij9JOkJpZ1VpbnQ2NEFycmF5LCIlQm9vbGVhbiUiOkJvb2xlYW4sIiVEYXRhVmlldyUiOnR5cGVvZiBEYXRhVmlldz4idSI/STpEYXRhVmlldywiJURhdGUlIjpEYXRlLCIlZGVjb2RlVVJJJSI6ZGVjb2RlVVJJLCIlZGVjb2RlVVJJQ29tcG9uZW50JSI6''@;'; put 'put ''ZGVjb2RlVVJJQ29tcG9uZW50LCIlZW5jb2RlVVJJJSI6ZW5jb2RlVVJJLCIlZW5jb2RlVVJJQ29tcG9uZW50JSI6ZW5jb2RlVVJJQ29tcG9uZW50LCIlRXJyb3IlIjpnLCIlZXZhbCUiOmV2YWwsIiVFdmFsRXJyb3IlIjpCLCIlRmxvYXQxNkFycmF5JSI6dHlwZW9mIEZsb2F0MTZBcnJheT4i''@;'; put 'put ''dSI/STpGbG9hdDE2QXJyYXksIiVGbG9hdDMyQXJyYXklIjp0eXBlb2YgRmxvYXQzMkFycmF5PiJ1Ij9JOkZsb2F0MzJBcnJheSwiJUZsb2F0NjRBcnJheSUiOnR5cGVvZiBGbG9hdDY0QXJyYXk+InUiP0k6RmxvYXQ2NEFycmF5LCIlRmluYWxpemF0aW9uUmVnaXN0cnklIjp0eXBlb2YgRmlu''@;'; put 'put ''YWxpemF0aW9uUmVnaXN0cnk+InUiP0k6RmluYWxpemF0aW9uUmVnaXN0cnksIiVGdW5jdGlvbiUiOmVlLCIlR2VuZXJhdG9yRnVuY3Rpb24lIjpiLCIlSW50OEFycmF5JSI6dHlwZW9mIEludDhBcnJheT4idSI/STpJbnQ4QXJyYXksIiVJbnQxNkFycmF5JSI6dHlwZW9mIEludDE2QXJyYXk+''@;'; put 'put ''InUiP0k6SW50MTZBcnJheSwiJUludDMyQXJyYXklIjp0eXBlb2YgSW50MzJBcnJheT4idSI/STpJbnQzMkFycmF5LCIlaXNGaW5pdGUlIjppc0Zpbml0ZSwiJWlzTmFOJSI6aXNOYU4sIiVJdGVyYXRvclByb3RvdHlwZSUiOl9lJiZUZT9UZShUZShbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKTpJ''@;'; put 'put ''LCIlSlNPTiUiOiJvYmplY3QiPT10eXBlb2YgSlNPTj9KU09OOkksIiVNYXAlIjp0eXBlb2YgTWFwPiJ1Ij9JOk1hcCwiJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSI6dHlwZW9mIE1hcD4idSJ8fCFfZXx8IVRlP0k6VGUoKG5ldyBNYXApW1N5bWJvbC5pdGVyYXRvcl0oKSksIiVNYXRoJSI6TWF0''@;'; put 'put ''aCwiJU51bWJlciUiOk51bWJlciwiJU9iamVjdCUiOnksIiVPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJSI6cmUsIiVwYXJzZUZsb2F0JSI6cGFyc2VGbG9hdCwiJXBhcnNlSW50JSI6cGFyc2VJbnQsIiVQcm9taXNlJSI6dHlwZW9mIFByb21pc2U+InUiP0k6UHJvbWlzZSwiJVBy''@;'; put 'put ''b3h5JSI6dHlwZW9mIFByb3h5PiJ1Ij9JOlByb3h5LCIlUmFuZ2VFcnJvciUiOncsIiVSZWZlcmVuY2VFcnJvciUiOlAsIiVSZWZsZWN0JSI6dHlwZW9mIFJlZmxlY3Q+InUiP0k6UmVmbGVjdCwiJVJlZ0V4cCUiOlJlZ0V4cCwiJVNldCUiOnR5cGVvZiBTZXQ+InUiP0k6U2V0LCIlU2V0SXRl''@;'; put 'put ''cmF0b3JQcm90b3R5cGUlIjp0eXBlb2YgU2V0PiJ1Inx8IV9lfHwhVGU/STpUZSgobmV3IFNldClbU3ltYm9sLml0ZXJhdG9yXSgpKSwiJVNoYXJlZEFycmF5QnVmZmVyJSI6dHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyPiJ1Ij9JOlNoYXJlZEFycmF5QnVmZmVyLCIlU3RyaW5nJSI6U3RyaW5n''@;'; put 'put ''LCIlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlIjpfZSYmVGU/VGUoIiJbU3ltYm9sLml0ZXJhdG9yXSgpKTpJLCIlU3ltYm9sJSI6X2U/U3ltYm9sOkksIiVTeW50YXhFcnJvciUiOkYsIiVUaHJvd1R5cGVFcnJvciUiOm1lLCIlVHlwZWRBcnJheSUiOngsIiVUeXBlRXJyb3IlIjpPLCIlVWlu''@;'; put 'put ''dDhBcnJheSUiOnR5cGVvZiBVaW50OEFycmF5PiJ1Ij9JOlVpbnQ4QXJyYXksIiVVaW50OENsYW1wZWRBcnJheSUiOnR5cGVvZiBVaW50OENsYW1wZWRBcnJheT4idSI/STpVaW50OENsYW1wZWRBcnJheSwiJVVpbnQxNkFycmF5JSI6dHlwZW9mIFVpbnQxNkFycmF5PiJ1Ij9JOlVpbnQxNkFy''@;'; put 'put ''cmF5LCIlVWludDMyQXJyYXklIjp0eXBlb2YgVWludDMyQXJyYXk+InUiP0k6VWludDMyQXJyYXksIiVVUklFcnJvciUiOnosIiVXZWFrTWFwJSI6dHlwZW9mIFdlYWtNYXA+InUiP0k6V2Vha01hcCwiJVdlYWtSZWYlIjp0eXBlb2YgV2Vha1JlZj4idSI/STpXZWFrUmVmLCIlV2Vha1NldCUi''@;'; put 'put ''OnR5cGVvZiBXZWFrU2V0PiJ1Ij9JOldlYWtTZXQsIiVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUiOnAsIiVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklIjpWLCIlT2JqZWN0LmRlZmluZVByb3BlcnR5JSI6aWUsIiVPYmplY3QuZ2V0UHJvdG90eXBlT2YlIjpTZSwiJU1hdGguYWJzJSI6Tiwi''@;'; put 'put ''JU1hdGguZmxvb3IlIjpMLCIlTWF0aC5tYXglIjpLLCIlTWF0aC5taW4lIjpVLCIlTWF0aC5wb3clIjpXLCIlTWF0aC5yb3VuZCUiOlksIiVNYXRoLnNpZ24lIjpYLCIlUmVmbGVjdC5nZXRQcm90b3R5cGVPZiUiOnplfTtpZihUZSl0cnl7bnVsbC5lcnJvcn1jYXRjaCh2ZSl7dmFyIFQ9VGUo''@;'; put 'put ''VGUodmUpKTtDWyIlRXJyb3IucHJvdG90eXBlJSJdPVR9dmFyIEg9ZnVuY3Rpb24gdmUoWGUpe3ZhciBqZTtpZigiJUFzeW5jRnVuY3Rpb24lIj09PVhlKWplPUooImFzeW5jIGZ1bmN0aW9uICgpIHt9Iik7ZWxzZSBpZigiJUdlbmVyYXRvckZ1bmN0aW9uJSI9PT1YZSlqZT1KKCJmdW5jdGlv''@;'; put 'put ''biogKCkge30iKTtlbHNlIGlmKCIlQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUiPT09WGUpamU9SigiYXN5bmMgZnVuY3Rpb24qICgpIHt9Iik7ZWxzZSBpZigiJUFzeW5jR2VuZXJhdG9yJSI9PT1YZSl7dmFyIERlPXZlKCIlQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUiKTtEZSYmKGplPURlLnBy''@;'; put 'put ''b3RvdHlwZSl9ZWxzZSBpZigiJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlIj09PVhlKXt2YXIgRmU9dmUoIiVBc3luY0dlbmVyYXRvciUiKTtGZSYmVGUmJihqZT1UZShGZS5wcm90b3R5cGUpKX1yZXR1cm4gQ1tYZV09amUsamV9LGo9e19fcHJvdG9fXzpudWxsLCIlQXJyYXlCdWZmZXJQcm90''@;'; put 'put ''b3R5cGUlIjpbIkFycmF5QnVmZmVyIiwicHJvdG90eXBlIl0sIiVBcnJheVByb3RvdHlwZSUiOlsiQXJyYXkiLCJwcm90b3R5cGUiXSwiJUFycmF5UHJvdG9fZW50cmllcyUiOlsiQXJyYXkiLCJwcm90b3R5cGUiLCJlbnRyaWVzIl0sIiVBcnJheVByb3RvX2ZvckVhY2glIjpbIkFycmF5Iiwi''@;'; put 'put ''cHJvdG90eXBlIiwiZm9yRWFjaCJdLCIlQXJyYXlQcm90b19rZXlzJSI6WyJBcnJheSIsInByb3RvdHlwZSIsImtleXMiXSwiJUFycmF5UHJvdG9fdmFsdWVzJSI6WyJBcnJheSIsInByb3RvdHlwZSIsInZhbHVlcyJdLCIlQXN5bmNGdW5jdGlvblByb3RvdHlwZSUiOlsiQXN5bmNGdW5jdGlv''@;'; put 'put ''biIsInByb3RvdHlwZSJdLCIlQXN5bmNHZW5lcmF0b3IlIjpbIkFzeW5jR2VuZXJhdG9yRnVuY3Rpb24iLCJwcm90b3R5cGUiXSwiJUFzeW5jR2VuZXJhdG9yUHJvdG90eXBlJSI6WyJBc3luY0dlbmVyYXRvckZ1bmN0aW9uIiwicHJvdG90eXBlIiwicHJvdG90eXBlIl0sIiVCb29sZWFuUHJv''@;'; put 'put ''dG90eXBlJSI6WyJCb29sZWFuIiwicHJvdG90eXBlIl0sIiVEYXRhVmlld1Byb3RvdHlwZSUiOlsiRGF0YVZpZXciLCJwcm90b3R5cGUiXSwiJURhdGVQcm90b3R5cGUlIjpbIkRhdGUiLCJwcm90b3R5cGUiXSwiJUVycm9yUHJvdG90eXBlJSI6WyJFcnJvciIsInByb3RvdHlwZSJdLCIlRXZh''@;'; put 'put ''bEVycm9yUHJvdG90eXBlJSI6WyJFdmFsRXJyb3IiLCJwcm90b3R5cGUiXSwiJUZsb2F0MzJBcnJheVByb3RvdHlwZSUiOlsiRmxvYXQzMkFycmF5IiwicHJvdG90eXBlIl0sIiVGbG9hdDY0QXJyYXlQcm90b3R5cGUlIjpbIkZsb2F0NjRBcnJheSIsInByb3RvdHlwZSJdLCIlRnVuY3Rpb25Q''@;'; put 'put ''cm90b3R5cGUlIjpbIkZ1bmN0aW9uIiwicHJvdG90eXBlIl0sIiVHZW5lcmF0b3IlIjpbIkdlbmVyYXRvckZ1bmN0aW9uIiwicHJvdG90eXBlIl0sIiVHZW5lcmF0b3JQcm90b3R5cGUlIjpbIkdlbmVyYXRvckZ1bmN0aW9uIiwicHJvdG90eXBlIiwicHJvdG90eXBlIl0sIiVJbnQ4QXJyYXlQ''@;'; put 'put ''cm90b3R5cGUlIjpbIkludDhBcnJheSIsInByb3RvdHlwZSJdLCIlSW50MTZBcnJheVByb3RvdHlwZSUiOlsiSW50MTZBcnJheSIsInByb3RvdHlwZSJdLCIlSW50MzJBcnJheVByb3RvdHlwZSUiOlsiSW50MzJBcnJheSIsInByb3RvdHlwZSJdLCIlSlNPTlBhcnNlJSI6WyJKU09OIiwicGFy''@;'; put 'put ''c2UiXSwiJUpTT05TdHJpbmdpZnklIjpbIkpTT04iLCJzdHJpbmdpZnkiXSwiJU1hcFByb3RvdHlwZSUiOlsiTWFwIiwicHJvdG90eXBlIl0sIiVOdW1iZXJQcm90b3R5cGUlIjpbIk51bWJlciIsInByb3RvdHlwZSJdLCIlT2JqZWN0UHJvdG90eXBlJSI6WyJPYmplY3QiLCJwcm90b3R5cGUi''@;'; put 'put ''XSwiJU9ialByb3RvX3RvU3RyaW5nJSI6WyJPYmplY3QiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyJdLCIlT2JqUHJvdG9fdmFsdWVPZiUiOlsiT2JqZWN0IiwicHJvdG90eXBlIiwidmFsdWVPZiJdLCIlUHJvbWlzZVByb3RvdHlwZSUiOlsiUHJvbWlzZSIsInByb3RvdHlwZSJdLCIlUHJvbWlz''@;'; put 'put ''ZVByb3RvX3RoZW4lIjpbIlByb21pc2UiLCJwcm90b3R5cGUiLCJ0aGVuIl0sIiVQcm9taXNlX2FsbCUiOlsiUHJvbWlzZSIsImFsbCJdLCIlUHJvbWlzZV9yZWplY3QlIjpbIlByb21pc2UiLCJyZWplY3QiXSwiJVByb21pc2VfcmVzb2x2ZSUiOlsiUHJvbWlzZSIsInJlc29sdmUiXSwiJVJh''@;'; put 'put ''bmdlRXJyb3JQcm90b3R5cGUlIjpbIlJhbmdlRXJyb3IiLCJwcm90b3R5cGUiXSwiJVJlZmVyZW5jZUVycm9yUHJvdG90eXBlJSI6WyJSZWZlcmVuY2VFcnJvciIsInByb3RvdHlwZSJdLCIlUmVnRXhwUHJvdG90eXBlJSI6WyJSZWdFeHAiLCJwcm90b3R5cGUiXSwiJVNldFByb3RvdHlwZSUi''@;'; put 'put ''OlsiU2V0IiwicHJvdG90eXBlIl0sIiVTaGFyZWRBcnJheUJ1ZmZlclByb3RvdHlwZSUiOlsiU2hhcmVkQXJyYXlCdWZmZXIiLCJwcm90b3R5cGUiXSwiJVN0cmluZ1Byb3RvdHlwZSUiOlsiU3RyaW5nIiwicHJvdG90eXBlIl0sIiVTeW1ib2xQcm90b3R5cGUlIjpbIlN5bWJvbCIsInByb3Rv''@;'; put 'put ''dHlwZSJdLCIlU3ludGF4RXJyb3JQcm90b3R5cGUlIjpbIlN5bnRheEVycm9yIiwicHJvdG90eXBlIl0sIiVUeXBlZEFycmF5UHJvdG90eXBlJSI6WyJUeXBlZEFycmF5IiwicHJvdG90eXBlIl0sIiVUeXBlRXJyb3JQcm90b3R5cGUlIjpbIlR5cGVFcnJvciIsInByb3RvdHlwZSJdLCIlVWlu''@;'; put 'put ''dDhBcnJheVByb3RvdHlwZSUiOlsiVWludDhBcnJheSIsInByb3RvdHlwZSJdLCIlVWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGUlIjpbIlVpbnQ4Q2xhbXBlZEFycmF5IiwicHJvdG90eXBlIl0sIiVVaW50MTZBcnJheVByb3RvdHlwZSUiOlsiVWludDE2QXJyYXkiLCJwcm90b3R5cGUiXSwi''@;'; put 'put ''JVVpbnQzMkFycmF5UHJvdG90eXBlJSI6WyJVaW50MzJBcnJheSIsInByb3RvdHlwZSJdLCIlVVJJRXJyb3JQcm90b3R5cGUlIjpbIlVSSUVycm9yIiwicHJvdG90eXBlIl0sIiVXZWFrTWFwUHJvdG90eXBlJSI6WyJXZWFrTWFwIiwicHJvdG90eXBlIl0sIiVXZWFrU2V0UHJvdG90eXBlJSI6''@;'; put 'put ''WyJXZWFrU2V0IiwicHJvdG90eXBlIl19LEU9Xyg4NjEyKSxtPV8oODgyNCksQT1FLmNhbGwocCxBcnJheS5wcm90b3R5cGUuY29uY2F0KSxvZT1FLmNhbGwoVixBcnJheS5wcm90b3R5cGUuc3BsaWNlKSx0ZT1FLmNhbGwocCxTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpLHNlPUUuY2FsbChw''@;'; put 'put ''LFN0cmluZy5wcm90b3R5cGUuc2xpY2UpLHdlPUUuY2FsbChwLFJlZ0V4cC5wcm90b3R5cGUuZXhlYyksVWU9L1teJS5bXF1dK3xcWyg/OigtP1xkKyg/OlwuXGQrKT8pfChbIiddKSgoPzooPyFcMilbXlxcXXxcXC4pKj8pXDIpXF18KD89KD86XC58XFtcXSkoPzpcLnxcW1xdfCUkKSkvZyxK''@;'; put 'put ''ZT0vXFwoXFwpPy9nLE1lPWZ1bmN0aW9uKFhlLGplKXt2YXIgRmUsRGU9WGU7aWYobShqLERlKSYmKERlPSIlIisoRmU9altEZV0pWzBdKyIlIiksbShDLERlKSl7dmFyIFJlPUNbRGVdO2lmKFJlPT09YiYmKFJlPUgoRGUpKSx0eXBlb2YgUmU+InUiJiYhamUpdGhyb3cgbmV3IE8oImludHJp''@;'; put 'put ''bnNpYyAiK1hlKyIgZXhpc3RzLCBidXQgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGZpbGUgYW4gaXNzdWUhIik7cmV0dXJue2FsaWFzOkZlLG5hbWU6RGUsdmFsdWU6UmV9fXRocm93IG5ldyBGKCJpbnRyaW5zaWMgIitYZSsiIGRvZXMgbm90IGV4aXN0ISIpfTt1ZS5leHBvcnRzPWZ1bmN0''@;'; put 'put ''aW9uKFhlLGplKXtpZigic3RyaW5nIiE9dHlwZW9mIFhlfHwwPT09WGUubGVuZ3RoKXRocm93IG5ldyBPKCJpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSYmImJvb2xlYW4iIT10eXBlb2YgamUpdGhyb3cgbmV3IE8oJyJh''@;'; put 'put ''bGxvd01pc3NpbmciIGFyZ3VtZW50IG11c3QgYmUgYSBib29sZWFuJyk7aWYobnVsbD09PXdlKC9eJT9bXiVdKiU/JC8sWGUpKXRocm93IG5ldyBGKCJgJWAgbWF5IG5vdCBiZSBwcmVzZW50IGFueXdoZXJlIGJ1dCBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhlIGludHJpbnNpYyBu''@;'; put 'put ''YW1lIik7dmFyIERlPWZ1bmN0aW9uKFhlKXt2YXIgamU9c2UoWGUsMCwxKSxEZT1zZShYZSwtMSk7aWYoIiUiPT09amUmJiIlIiE9PURlKXRocm93IG5ldyBGKCJpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgIik7aWYoIiUiPT09RGUmJiIlIiE9PWplKXRo''@;'; put 'put ''cm93IG5ldyBGKCJpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgIik7dmFyIEZlPVtdO3JldHVybiB0ZShYZSxVZSxmdW5jdGlvbihSZSxJZSxWZSxrZSl7RmVbRmUubGVuZ3RoXT1WZT90ZShrZSxKZSwiJDEiKTpJZXx8UmV9KSxGZX0oWGUpLEZlPURlLmxl''@;'; put 'put ''bmd0aD4wP0RlWzBdOiIiLFJlPU1lKCIlIitGZSsiJSIsamUpLEllPVJlLm5hbWUsVmU9UmUudmFsdWUsa2U9ITEsQWU9UmUuYWxpYXM7QWUmJihGZT1BZVswXSxvZShEZSxBKFswLDFdLEFlKSkpO2Zvcih2YXIgX3Q9MSxydD0hMDtfdDxEZS5sZW5ndGg7X3QrPTEpe3ZhciBRZT1EZVtfdF0s''@;'; put 'put ''ZG49c2UoUWUsMCwxKSx5dD1zZShRZSwtMSk7aWYoKCciJz09PWRufHwiJyI9PT1kbnx8ImAiPT09ZG58fCciJz09PXl0fHwiJyI9PT15dHx8ImAiPT09eXQpJiZkbiE9PXl0KXRocm93IG5ldyBGKCJwcm9wZXJ0eSBuYW1lcyB3aXRoIHF1b3RlcyBtdXN0IGhhdmUgbWF0Y2hpbmcgcXVvdGVz''@;'; put 'put ''Iik7aWYoKCJjb25zdHJ1Y3RvciI9PT1RZXx8IXJ0KSYmKGtlPSEwKSxtKEMsSWU9IiUiKyhGZSs9Ii4iK1FlKSsiJSIpKVZlPUNbSWVdO2Vsc2UgaWYobnVsbCE9VmUpe2lmKCEoUWUgaW4gVmUpKXtpZighamUpdGhyb3cgbmV3IE8oImJhc2UgaW50cmluc2ljIGZvciAiK1hlKyIgZXhpc3Rz''@;'; put 'put ''LCBidXQgdGhlIHByb3BlcnR5IGlzIG5vdCBhdmFpbGFibGUuIik7cmV0dXJufWlmKHJlJiZfdCsxPj1EZS5sZW5ndGgpe3ZhciBNdD1yZShWZSxRZSk7VmU9KHJ0PSEhTXQpJiYiZ2V0ImluIE10JiYhKCJvcmlnaW5hbFZhbHVlImluIE10LmdldCk/TXQuZ2V0OlZlW1FlXX1lbHNlIHJ0PW0o''@;'; put 'put ''VmUsUWUpLFZlPVZlW1FlXTtydCYmIWtlJiYoQ1tJZV09VmUpfX1yZXR1cm4gVmV9fSw4ODk5Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oODg5Mik7dWUuZXhwb3J0cz1JLmdldFByb3RvdHlwZU9mfHxudWxsfSw0NDM6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz10eXBl''@;'; put 'put ''b2YgUmVmbGVjdDwidSImJlJlZmxlY3QuZ2V0UHJvdG90eXBlT2Z8fG51bGx9LDE2MTg6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg0NDMpLHk9Xyg4ODk5KSxnPV8oNjUwNCk7dWUuZXhwb3J0cz1JP2Z1bmN0aW9uKHcpe3JldHVybiBJKHcpfTp5P2Z1bmN0aW9uKHcpe2lmKCF3''@;'; put 'put ''fHwib2JqZWN0IiE9dHlwZW9mIHcmJiJmdW5jdGlvbiIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoImdldFByb3RvOiBub3QgYW4gb2JqZWN0Iik7cmV0dXJuIHkodyl9Omc/ZnVuY3Rpb24odyl7cmV0dXJuIGcodyl9Om51bGx9LDY5MDp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBv''@;'; put 'put ''cnRzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3J9LDcyOTY6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg2OTApO2lmKEkpdHJ5e0koW10sImxlbmd0aCIpfWNhdGNoe0k9bnVsbH11ZS5leHBvcnRzPUl9LDY0NTg6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1m''@;'; put 'put ''dW5jdGlvbiBfKEkpe2lmKG51bGw9PT1JfHwib2JqZWN0IiE9dHlwZW9mIEkpcmV0dXJuIEk7aWYoSSBpbnN0YW5jZW9mIE9iamVjdCl2YXIgeT17X19wcm90b19fOnEoSSl9O2Vsc2UgeT1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhJKS5m''@;'; put 'put ''b3JFYWNoKGZ1bmN0aW9uKGcpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh5LGcsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihJLGcpKX0pLHl9O3ZhciBxPU9iamVjdC5nZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oSSl7cmV0dXJuIEkuX19wcm90b19ffX0sNzc6KHVlLHEsXyk9Pnt2''@;'; put 'put ''YXIgTyx6LEk9Xyg0MTU1KSx5PV8oNTEwOCksZz1fKDU0NDMpLEI9XygyMTYxKSx3PV8oODUyMCksUD1fKDY0NTgpLEY9Xyg5NTM5KTtmdW5jdGlvbiBMKHJlLGllKXtPYmplY3QuZGVmaW5lUHJvcGVydHkocmUsTyx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGllfX0pfSJmdW5jdGlvbiI9PXR5''@;'; put 'put ''cGVvZiBTeW1ib2wmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wuZm9yPyhPPVN5bWJvbC5mb3IoImdyYWNlZnVsLWZzLnF1ZXVlIiksej1TeW1ib2wuZm9yKCJncmFjZWZ1bC1mcy5wcmV2aW91cyIpKTooTz0iX19fZ3JhY2VmdWwtZnMucXVldWUiLHo9Il9fX2dyYWNlZnVsLWZzLnByZXZp''@;'; put 'put ''b3VzIik7dmFyIFgsSz1mdW5jdGlvbiBOKCl7fTtmdW5jdGlvbiBXKHJlKXtCKHJlKSxyZS5ncmFjZWZ1bGlmeT1XLHJlLmNyZWF0ZVJlYWRTdHJlYW09ZnVuY3Rpb24gc2UoYXQsTWUpe3JldHVybiBuZXcgcmUuUmVhZFN0cmVhbShhdCxNZSl9LHJlLmNyZWF0ZVdyaXRlU3RyZWFtPWZ1bmN0''@;'; put 'put ''aW9uIHdlKGF0LE1lKXtyZXR1cm4gbmV3IHJlLldyaXRlU3RyZWFtKGF0LE1lKX07dmFyIGllPXJlLnJlYWRGaWxlO3JlLnJlYWRGaWxlPWZ1bmN0aW9uIGxlKGF0LE1lLHZlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTWUmJih2ZT1NZSxNZT1udWxsKSxmdW5jdGlvbiBYZShqZSxEZSxG''@;'; put 'put ''ZSxSZSl7cmV0dXJuIGllKGplLERlLGZ1bmN0aW9uKEllKXshSWV8fCJFTUZJTEUiIT09SWUuY29kZSYmIkVORklMRSIhPT1JZS5jb2RlPyJmdW5jdGlvbiI9PXR5cGVvZiBGZSYmRmUuYXBwbHkodGhpcyxhcmd1bWVudHMpOlkoW1hlLFtqZSxEZSxGZV0sSWUsUmV8fERhdGUubm93KCksRGF0''@;'; put 'put ''ZS5ub3coKV0pfSl9KGF0LE1lLHZlKX07dmFyIG1lPXJlLndyaXRlRmlsZTtyZS53cml0ZUZpbGU9ZnVuY3Rpb24gX2UoYXQsTWUsdmUsWGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB2ZSYmKFhlPXZlLHZlPW51bGwpLGZ1bmN0aW9uIGplKERlLEZlLFJlLEllLFZlKXtyZXR1cm4gbWUo''@;'; put 'put ''RGUsRmUsUmUsZnVuY3Rpb24oa2UpeyFrZXx8IkVNRklMRSIhPT1rZS5jb2RlJiYiRU5GSUxFIiE9PWtlLmNvZGU/ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6WShbamUsW0RlLEZlLFJlLEllXSxrZSxWZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9''@;'; put 'put ''KX0oYXQsTWUsdmUsWGUpfTt2YXIgVGU9cmUuYXBwZW5kRmlsZTtUZSYmKHJlLmFwcGVuZEZpbGU9ZnVuY3Rpb24gU2UoYXQsTWUsdmUsWGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB2ZSYmKFhlPXZlLHZlPW51bGwpLGZ1bmN0aW9uIGplKERlLEZlLFJlLEllLFZlKXtyZXR1cm4gVGUo''@;'; put 'put ''RGUsRmUsUmUsZnVuY3Rpb24oa2UpeyFrZXx8IkVNRklMRSIhPT1rZS5jb2RlJiYiRU5GSUxFIiE9PWtlLmNvZGU/ImZ1bmN0aW9uIj09dHlwZW9mIEllJiZJZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6WShbamUsW0RlLEZlLFJlLEllXSxrZSxWZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9''@;'; put 'put ''KX0oYXQsTWUsdmUsWGUpfSk7dmFyIHplPXJlLmNvcHlGaWxlO3plJiYocmUuY29weUZpbGU9ZnVuY3Rpb24gVihhdCxNZSx2ZSxYZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHZlJiYoWGU9dmUsdmU9MCksZnVuY3Rpb24gamUoRGUsRmUsUmUsSWUsVmUpe3JldHVybiB6ZShEZSxGZSxS''@;'; put 'put ''ZSxmdW5jdGlvbihrZSl7IWtlfHwiRU1GSUxFIiE9PWtlLmNvZGUmJiJFTkZJTEUiIT09a2UuY29kZT8iZnVuY3Rpb24iPT10eXBlb2YgSWUmJkllLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpZKFtqZSxbRGUsRmUsUmUsSWVdLGtlLFZlfHxEYXRlLm5vdygpLERhdGUubm93KCldKX0pfShhdCxN''@;'; put 'put ''ZSx2ZSxYZSl9KTt2YXIgcD1yZS5yZWFkZGlyO3JlLnJlYWRkaXI9ZnVuY3Rpb24geChhdCxNZSx2ZSl7ImZ1bmN0aW9uIj09dHlwZW9mIE1lJiYodmU9TWUsTWU9bnVsbCk7dmFyIFhlPWIudGVzdChJLnZlcnNpb24pP2Z1bmN0aW9uKEZlLFJlLEllLFZlKXtyZXR1cm4gcChGZSxqZShGZSxS''@;'; put 'put ''ZSxJZSxWZSkpfTpmdW5jdGlvbihGZSxSZSxJZSxWZSl7cmV0dXJuIHAoRmUsUmUsamUoRmUsUmUsSWUsVmUpKX07cmV0dXJuIFhlKGF0LE1lLHZlKTtmdW5jdGlvbiBqZShEZSxGZSxSZSxJZSl7cmV0dXJuIGZ1bmN0aW9uKFZlLGtlKXshVmV8fCJFTUZJTEUiIT09VmUuY29kZSYmIkVORklM''@;'; put 'put ''RSIhPT1WZS5jb2RlPyhrZSYma2Uuc29ydCYma2Uuc29ydCgpLCJmdW5jdGlvbiI9PXR5cGVvZiBSZSYmUmUuY2FsbCh0aGlzLFZlLGtlKSk6WShbWGUsW0RlLEZlLFJlXSxWZSxJZXx8RGF0ZS5ub3coKSxEYXRlLm5vdygpXSl9fX07dmFyIGI9L152WzAtNV1cLi87aWYoInYwLjgiPT09SS52''@;'; put 'put ''ZXJzaW9uLnN1YnN0cigwLDQpKXt2YXIgQz13KHJlKTttPUMuUmVhZFN0cmVhbSxvZT1DLldyaXRlU3RyZWFtfXZhciBUPXJlLlJlYWRTdHJlYW07VCYmKG0ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoVC5wcm90b3R5cGUpLG0ucHJvdG90eXBlLm9wZW49ZnVuY3Rpb24gQSgpe3ZhciBhdD10''@;'; put 'put ''aGlzO0plKGF0LnBhdGgsYXQuZmxhZ3MsYXQubW9kZSxmdW5jdGlvbihNZSx2ZSl7TWU/KGF0LmF1dG9DbG9zZSYmYXQuZGVzdHJveSgpLGF0LmVtaXQoImVycm9yIixNZSkpOihhdC5mZD12ZSxhdC5lbWl0KCJvcGVuIix2ZSksYXQucmVhZCgpKX0pfSk7dmFyIEg9cmUuV3JpdGVTdHJlYW07''@;'; put 'put ''SCYmKG9lLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEgucHJvdG90eXBlKSxvZS5wcm90b3R5cGUub3Blbj1mdW5jdGlvbiB0ZSgpe3ZhciBhdD10aGlzO0plKGF0LnBhdGgsYXQuZmxhZ3MsYXQubW9kZSxmdW5jdGlvbihNZSx2ZSl7TWU/KGF0LmRlc3Ryb3koKSxhdC5lbWl0KCJlcnJvciIs''@;'; put 'put ''TWUpKTooYXQuZmQ9dmUsYXQuZW1pdCgib3BlbiIsdmUpKX0pfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlLCJSZWFkU3RyZWFtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG19LHNldDpmdW5jdGlvbihhdCl7bT1hdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkocmUsIldyaXRlU3RyZWFtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG9lfSxzZXQ6ZnVuY3Rpb24oYXQpe29lPWF0fSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pO3ZhciBqPW07T2JqZWN0LmRlZmluZVByb3BlcnR5KHJlLCJGaWxlUmVhZFN0cmVhbSIs''@;'; put 'put ''e2dldDpmdW5jdGlvbigpe3JldHVybiBqfSxzZXQ6ZnVuY3Rpb24oYXQpe2o9YXR9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSk7dmFyIEU9b2U7ZnVuY3Rpb24gbShhdCxNZSl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBtPyhULmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzKTpt''@;'; put 'put ''LmFwcGx5KE9iamVjdC5jcmVhdGUobS5wcm90b3R5cGUpLGFyZ3VtZW50cyl9ZnVuY3Rpb24gb2UoYXQsTWUpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygb2U/KEguYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMpOm9lLmFwcGx5KE9iamVjdC5jcmVhdGUob2UucHJvdG90eXBlKSxhcmd1bWVu''@;'; put 'put ''dHMpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZSwiRmlsZVdyaXRlU3RyZWFtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEV9LHNldDpmdW5jdGlvbihhdCl7RT1hdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KTt2YXIgVWU9cmUub3BlbjtmdW5jdGlvbiBKZShhdCxNZSx2ZSxY''@;'; put 'put ''ZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHZlJiYoWGU9dmUsdmU9bnVsbCksZnVuY3Rpb24gamUoRGUsRmUsUmUsSWUsVmUpe3JldHVybiBVZShEZSxGZSxSZSxmdW5jdGlvbihrZSxBZSl7IWtlfHwiRU1GSUxFIiE9PWtlLmNvZGUmJiJFTkZJTEUiIT09a2UuY29kZT8iZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2YgSWUmJkllLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpZKFtqZSxbRGUsRmUsUmUsSWVdLGtlLFZlfHxEYXRlLm5vdygpLERhdGUubm93KCldKX0pfShhdCxNZSx2ZSxYZSl9cmV0dXJuIHJlLm9wZW49SmUscmV9ZnVuY3Rpb24gWShyZSl7SygiRU5RVUVVRSIscmVbMF0ubmFtZSxy''@;'; put 'put ''ZVsxXSksZ1tPXS5wdXNoKHJlKSxKKCl9ZnVuY3Rpb24gZWUoKXtmb3IodmFyIHJlPURhdGUubm93KCksaWU9MDtpZTxnW09dLmxlbmd0aDsrK2llKWdbT11baWVdLmxlbmd0aD4yJiYoZ1tPXVtpZV1bM109cmUsZ1tPXVtpZV1bNF09cmUpO0ooKX1mdW5jdGlvbiBKKCl7aWYoY2xlYXJUaW1l''@;'; put 'put ''b3V0KFgpLFg9dm9pZCAwLDAhPT1nW09dLmxlbmd0aCl7dmFyIHJlPWdbT10uc2hpZnQoKSxpZT1yZVswXSxsZT1yZVsxXSxtZT1yZVsyXSxfZT1yZVszXSxUZT1yZVs0XTtpZih2b2lkIDA9PT1fZSlLKCJSRVRSWSIsaWUubmFtZSxsZSksaWUuYXBwbHkobnVsbCxsZSk7ZWxzZSBpZihEYXRl''@;'; put 'put ''Lm5vdygpLV9lPj02ZTQpe0soIlRJTUVPVVQiLGllLm5hbWUsbGUpO3ZhciBTZT1sZS5wb3AoKTsiZnVuY3Rpb24iPT10eXBlb2YgU2UmJlNlLmNhbGwobnVsbCxtZSl9ZWxzZXt2YXIgemU9RGF0ZS5ub3coKS1UZSxWPU1hdGgubWF4KFRlLV9lLDEpO3plPj1NYXRoLm1pbigxLjIqViwxMDAp''@;'; put 'put ''PyhLKCJSRVRSWSIsaWUubmFtZSxsZSksaWUuYXBwbHkobnVsbCxsZS5jb25jYXQoW19lXSkpKTpnW09dLnB1c2gocmUpfXZvaWQgMD09PVgmJihYPXNldFRpbWVvdXQoSiwwKSl9fUYuZGVidWdsb2c/Sz1GLmRlYnVnbG9nKCJnZnM0Iik6L1xiZ2ZzNFxiL2kudGVzdChJLmVudi5OT0RFX0RF''@;'; put 'put ''QlVHfHwiIikmJihLPWZ1bmN0aW9uKCl7dmFyIHJlPUYuZm9ybWF0LmFwcGx5KEYsYXJndW1lbnRzKTtyZT0iR0ZTNDogIityZS5zcGxpdCgvXG4vKS5qb2luKCJcbkdGUzQ6ICIpLHkuZXJyb3IocmUpfSksZ1tPXXx8KEwoZyxfLmdbT118fFtdKSxnLmNsb3NlPWZ1bmN0aW9uKHJlKXtmdW5j''@;'; put 'put ''dGlvbiBpZShsZSxtZSl7cmV0dXJuIHJlLmNhbGwoZyxsZSxmdW5jdGlvbihfZSl7X2V8fGVlKCksImZ1bmN0aW9uIj09dHlwZW9mIG1lJiZtZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX1yZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGllLHose3ZhbHVlOnJlfSksaWV9KGcuY2xvc2Up''@;'; put 'put ''LGcuY2xvc2VTeW5jPWZ1bmN0aW9uKHJlKXtmdW5jdGlvbiBpZShsZSl7cmUuYXBwbHkoZyxhcmd1bWVudHMpLGVlKCl9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpZSx6LHt2YWx1ZTpyZX0pLGllfShnLmNsb3NlU3luYyksL1xiZ2ZzNFxiL2kudGVzdChJLmVudi5OT0RFX0RFQlVH''@;'; put 'put ''fHwiIikmJkkub24oImV4aXQiLGZ1bmN0aW9uKCl7SyhnW09dKSxfKDkyODIpLmVxdWFsKGdbT10ubGVuZ3RoLDApfSkpLF8uZ1tPXXx8TChfLmcsZ1tPXSksdWUuZXhwb3J0cz1XKFAoZykpLEkuZW52LlRFU1RfR1JBQ0VGVUxfRlNfR0xPQkFMX1BBVENIJiYhZy5fX3BhdGNoZWQmJih1ZS5l''@;'; put 'put ''eHBvcnRzPVcoZyksZy5fX3BhdGNoZWQ9ITApfSw4NTIwOih1ZSxxLF8pPT57dmFyIEk9Xyg0MTU1KSx5PV8oMjgzMCkuU3RyZWFtO3VlLmV4cG9ydHM9ZnVuY3Rpb24gZyhCKXtyZXR1cm57UmVhZFN0cmVhbTpmdW5jdGlvbiB3KEYsTyl7aWYoISh0aGlzIGluc3RhbmNlb2YgdykpcmV0dXJu''@;'; put 'put ''IG5ldyB3KEYsTyk7eS5jYWxsKHRoaXMpO3ZhciB6PXRoaXM7dGhpcy5wYXRoPUYsdGhpcy5mZD1udWxsLHRoaXMucmVhZGFibGU9ITAsdGhpcy5wYXVzZWQ9ITEsdGhpcy5mbGFncz0iciIsdGhpcy5tb2RlPTQzOCx0aGlzLmJ1ZmZlclNpemU9NjU1MzYsTz1PfHx7fTtmb3IodmFyIE49T2Jq''@;'; put 'put ''ZWN0LmtleXMoTyksTD0wLEs9Ti5sZW5ndGg7TDxLO0wrKyl7dmFyIFU9TltMXTt0aGlzW1VdPU9bVV19aWYodGhpcy5lbmNvZGluZyYmdGhpcy5zZXRFbmNvZGluZyh0aGlzLmVuY29kaW5nKSx2b2lkIDAhPT10aGlzLnN0YXJ0KXtpZigibnVtYmVyIiE9dHlwZW9mIHRoaXMuc3RhcnQpdGhy''@;'; put 'put ''b3cgVHlwZUVycm9yKCJzdGFydCBtdXN0IGJlIGEgTnVtYmVyIik7aWYodm9pZCAwPT09dGhpcy5lbmQpdGhpcy5lbmQ9MS8wO2Vsc2UgaWYoIm51bWJlciIhPXR5cGVvZiB0aGlzLmVuZCl0aHJvdyBUeXBlRXJyb3IoImVuZCBtdXN0IGJlIGEgTnVtYmVyIik7aWYodGhpcy5zdGFydD50aGlz''@;'; put 'put ''LmVuZCl0aHJvdyBuZXcgRXJyb3IoInN0YXJ0IG11c3QgYmUgPD0gZW5kIik7dGhpcy5wb3M9dGhpcy5zdGFydH1udWxsPT09dGhpcy5mZD9CLm9wZW4odGhpcy5wYXRoLHRoaXMuZmxhZ3MsdGhpcy5tb2RlLGZ1bmN0aW9uKFcsWSl7aWYoVylyZXR1cm4gei5lbWl0KCJlcnJvciIsVyksdm9p''@;'; put 'put ''ZCh6LnJlYWRhYmxlPSExKTt6LmZkPVksei5lbWl0KCJvcGVuIixZKSx6Ll9yZWFkKCl9KTpJLm5leHRUaWNrKGZ1bmN0aW9uKCl7ei5fcmVhZCgpfSl9LFdyaXRlU3RyZWFtOmZ1bmN0aW9uIFAoRixPKXtpZighKHRoaXMgaW5zdGFuY2VvZiBQKSlyZXR1cm4gbmV3IFAoRixPKTt5LmNhbGwo''@;'; put 'put ''dGhpcyksdGhpcy5wYXRoPUYsdGhpcy5mZD1udWxsLHRoaXMud3JpdGFibGU9ITAsdGhpcy5mbGFncz0idyIsdGhpcy5lbmNvZGluZz0iYmluYXJ5Iix0aGlzLm1vZGU9NDM4LHRoaXMuYnl0ZXNXcml0dGVuPTAsTz1PfHx7fTtmb3IodmFyIHo9T2JqZWN0LmtleXMoTyksTj0wLEw9ei5sZW5n''@;'; put 'put ''dGg7TjxMO04rKyl7dmFyIEs9eltOXTt0aGlzW0tdPU9bS119aWYodm9pZCAwIT09dGhpcy5zdGFydCl7aWYoIm51bWJlciIhPXR5cGVvZiB0aGlzLnN0YXJ0KXRocm93IFR5cGVFcnJvcigic3RhcnQgbXVzdCBiZSBhIE51bWJlciIpO2lmKHRoaXMuc3RhcnQ8MCl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''InN0YXJ0IG11c3QgYmUgPj0gemVybyIpO3RoaXMucG9zPXRoaXMuc3RhcnR9dGhpcy5idXN5PSExLHRoaXMuX3F1ZXVlPVtdLG51bGw9PT10aGlzLmZkJiYodGhpcy5fb3Blbj1CLm9wZW4sdGhpcy5fcXVldWUucHVzaChbdGhpcy5fb3Blbix0aGlzLnBhdGgsdGhpcy5mbGFncyx0aGlzLm1v''@;'; put 'put ''ZGUsdm9pZCAwXSksdGhpcy5mbHVzaCgpKX19fX0sMjE2MToodWUscSxfKT0+e3ZhciBJPV8oNDE1NSkseT1fKDMyMDgpLGc9SS5jd2QsQj1udWxsLHc9SS5lbnYuR1JBQ0VGVUxfRlNfUExBVEZPUk18fEkucGxhdGZvcm07SS5jd2Q9ZnVuY3Rpb24oKXtyZXR1cm4gQnx8KEI9Zy5jYWxsKEkp''@;'; put 'put ''KSxCfTt0cnl7SS5jd2QoKX1jYXRjaHt9aWYoImZ1bmN0aW9uIj09dHlwZW9mIEkuY2hkaXIpe3ZhciBQPUkuY2hkaXI7SS5jaGRpcj1mdW5jdGlvbihPKXtCPW51bGwsUC5jYWxsKEksTyl9LE9iamVjdC5zZXRQcm90b3R5cGVPZiYmT2JqZWN0LnNldFByb3RvdHlwZU9mKEkuY2hkaXIsUCl9''@;'; put 'put ''dWUuZXhwb3J0cz1mdW5jdGlvbiBGKE8pe2Z1bmN0aW9uIEwoSil7cmV0dXJuIEomJmZ1bmN0aW9uKHJlLGllLGxlKXtyZXR1cm4gSi5jYWxsKE8scmUsaWUsZnVuY3Rpb24obWUpe2VlKG1lKSYmKG1lPW51bGwpLGxlJiZsZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX19ZnVuY3Rpb24gSyhK''@;'; put 'put ''KXtyZXR1cm4gSiYmZnVuY3Rpb24ocmUsaWUpe3RyeXtyZXR1cm4gSi5jYWxsKE8scmUsaWUpfWNhdGNoKGxlKXtpZighZWUobGUpKXRocm93IGxlfX19ZnVuY3Rpb24gVShKKXtyZXR1cm4gSiYmZnVuY3Rpb24ocmUsaWUsbGUsbWUpe3JldHVybiBKLmNhbGwoTyxyZSxpZSxsZSxmdW5jdGlv''@;'; put 'put ''bihfZSl7ZWUoX2UpJiYoX2U9bnVsbCksbWUmJm1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfX1mdW5jdGlvbiBXKEope3JldHVybiBKJiZmdW5jdGlvbihyZSxpZSxsZSl7dHJ5e3JldHVybiBKLmNhbGwoTyxyZSxpZSxsZSl9Y2F0Y2gobWUpe2lmKCFlZShtZSkpdGhyb3cgbWV9fX1mdW5j''@;'; put 'put ''dGlvbiBZKEope3JldHVybiBKJiZmdW5jdGlvbihyZSxpZSxsZSl7ZnVuY3Rpb24gbWUoX2UsVGUpe1RlJiYoVGUudWlkPDAmJihUZS51aWQrPTQyOTQ5NjcyOTYpLFRlLmdpZDwwJiYoVGUuZ2lkKz00Mjk0OTY3Mjk2KSksbGUmJmxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1yZXR1cm4iZnVu''@;'; put 'put ''Y3Rpb24iPT10eXBlb2YgaWUmJihsZT1pZSxpZT1udWxsKSxpZT9KLmNhbGwoTyxyZSxpZSxtZSk6Si5jYWxsKE8scmUsbWUpfX1mdW5jdGlvbiBYKEope3JldHVybiBKJiZmdW5jdGlvbihyZSxpZSl7dmFyIGxlPWllP0ouY2FsbChPLHJlLGllKTpKLmNhbGwoTyxyZSk7cmV0dXJuIGxlJiYo''@;'; put 'put ''bGUudWlkPDAmJihsZS51aWQrPTQyOTQ5NjcyOTYpLGxlLmdpZDwwJiYobGUuZ2lkKz00Mjk0OTY3Mjk2KSksbGV9fWZ1bmN0aW9uIGVlKEope3JldHVybiFKfHwiRU5PU1lTIj09PUouY29kZXx8IShJLmdldHVpZCYmMD09PUkuZ2V0dWlkKCl8fCJFSU5WQUwiIT09Si5jb2RlJiYiRVBFUk0i''@;'; put 'put ''IT09Si5jb2RlKX15Lmhhc093blByb3BlcnR5KCJPX1NZTUxJTksiKSYmSS52ZXJzaW9uLm1hdGNoKC9edjBcLjZcLlswLTJdfF52MFwuNVwuLykmJmZ1bmN0aW9uIHooSil7Si5sY2htb2Q9ZnVuY3Rpb24ocmUsaWUsbGUpe0oub3BlbihyZSx5Lk9fV1JPTkxZfHkuT19TWU1MSU5LLGllLGZ1''@;'; put 'put ''bmN0aW9uKG1lLF9lKXttZT9sZSYmbGUobWUpOkouZmNobW9kKF9lLGllLGZ1bmN0aW9uKFRlKXtKLmNsb3NlKF9lLGZ1bmN0aW9uKFNlKXtsZSYmbGUoVGV8fFNlKX0pfSl9KX0sSi5sY2htb2RTeW5jPWZ1bmN0aW9uKHJlLGllKXt2YXIgX2UsbGU9Si5vcGVuU3luYyhyZSx5Lk9fV1JPTkxZ''@;'; put 'put ''fHkuT19TWU1MSU5LLGllKSxtZT0hMDt0cnl7X2U9Si5mY2htb2RTeW5jKGxlLGllKSxtZT0hMX1maW5hbGx5e2lmKG1lKXRyeXtKLmNsb3NlU3luYyhsZSl9Y2F0Y2h7fWVsc2UgSi5jbG9zZVN5bmMobGUpfXJldHVybiBfZX19KE8pLE8ubHV0aW1lc3x8ZnVuY3Rpb24gTihKKXt5Lmhhc093''@;'; put 'put ''blByb3BlcnR5KCJPX1NZTUxJTksiKSYmSi5mdXRpbWVzPyhKLmx1dGltZXM9ZnVuY3Rpb24ocmUsaWUsbGUsbWUpe0oub3BlbihyZSx5Lk9fU1lNTElOSyxmdW5jdGlvbihfZSxUZSl7X2U/bWUmJm1lKF9lKTpKLmZ1dGltZXMoVGUsaWUsbGUsZnVuY3Rpb24oU2Upe0ouY2xvc2UoVGUsZnVu''@;'; put 'put ''Y3Rpb24oemUpe21lJiZtZShTZXx8emUpfSl9KX0pfSxKLmx1dGltZXNTeW5jPWZ1bmN0aW9uKHJlLGllLGxlKXt2YXIgX2UsbWU9Si5vcGVuU3luYyhyZSx5Lk9fU1lNTElOSyksVGU9ITA7dHJ5e19lPUouZnV0aW1lc1N5bmMobWUsaWUsbGUpLFRlPSExfWZpbmFsbHl7aWYoVGUpdHJ5e0ou''@;'; put 'put ''Y2xvc2VTeW5jKG1lKX1jYXRjaHt9ZWxzZSBKLmNsb3NlU3luYyhtZSl9cmV0dXJuIF9lfSk6Si5mdXRpbWVzJiYoSi5sdXRpbWVzPWZ1bmN0aW9uKHJlLGllLGxlLG1lKXttZSYmSS5uZXh0VGljayhtZSl9LEoubHV0aW1lc1N5bmM9ZnVuY3Rpb24oKXt9KX0oTyksTy5jaG93bj1VKE8uY2hv''@;'; put 'put ''d24pLE8uZmNob3duPVUoTy5mY2hvd24pLE8ubGNob3duPVUoTy5sY2hvd24pLE8uY2htb2Q9TChPLmNobW9kKSxPLmZjaG1vZD1MKE8uZmNobW9kKSxPLmxjaG1vZD1MKE8ubGNobW9kKSxPLmNob3duU3luYz1XKE8uY2hvd25TeW5jKSxPLmZjaG93blN5bmM9VyhPLmZjaG93blN5bmMpLE8u''@;'; put 'put ''bGNob3duU3luYz1XKE8ubGNob3duU3luYyksTy5jaG1vZFN5bmM9SyhPLmNobW9kU3luYyksTy5mY2htb2RTeW5jPUsoTy5mY2htb2RTeW5jKSxPLmxjaG1vZFN5bmM9SyhPLmxjaG1vZFN5bmMpLE8uc3RhdD1ZKE8uc3RhdCksTy5mc3RhdD1ZKE8uZnN0YXQpLE8ubHN0YXQ9WShPLmxzdGF0''@;'; put 'put ''KSxPLnN0YXRTeW5jPVgoTy5zdGF0U3luYyksTy5mc3RhdFN5bmM9WChPLmZzdGF0U3luYyksTy5sc3RhdFN5bmM9WChPLmxzdGF0U3luYyksTy5jaG1vZCYmIU8ubGNobW9kJiYoTy5sY2htb2Q9ZnVuY3Rpb24oSixyZSxpZSl7aWUmJkkubmV4dFRpY2soaWUpfSxPLmxjaG1vZFN5bmM9ZnVu''@;'; put 'put ''Y3Rpb24oKXt9KSxPLmNob3duJiYhTy5sY2hvd24mJihPLmxjaG93bj1mdW5jdGlvbihKLHJlLGllLGxlKXtsZSYmSS5uZXh0VGljayhsZSl9LE8ubGNob3duU3luYz1mdW5jdGlvbigpe30pLCJ3aW4zMiI9PT13JiYoTy5yZW5hbWU9ImZ1bmN0aW9uIiE9dHlwZW9mIE8ucmVuYW1lP08ucmVu''@;'; put 'put ''YW1lOmZ1bmN0aW9uKEope2Z1bmN0aW9uIHJlKGllLGxlLG1lKXt2YXIgX2U9RGF0ZS5ub3coKSxUZT0wO0ooaWUsbGUsZnVuY3Rpb24gU2UoemUpe2lmKHplJiYoIkVBQ0NFUyI9PT16ZS5jb2RlfHwiRVBFUk0iPT09emUuY29kZXx8IkVCVVNZIj09PXplLmNvZGUpJiZEYXRlLm5vdygpLV9l''@;'; put 'put ''PDZlNClyZXR1cm4gc2V0VGltZW91dChmdW5jdGlvbigpe08uc3RhdChsZSxmdW5jdGlvbihWLHApe1YmJiJFTk9FTlQiPT09Vi5jb2RlP0ooaWUsbGUsU2UpOm1lKHplKX0pfSxUZSksdm9pZChUZTwxMDAmJihUZSs9MTApKTttZSYmbWUoemUpfSl9cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5''@;'; put 'put ''cGVPZiYmT2JqZWN0LnNldFByb3RvdHlwZU9mKHJlLEopLHJlfShPLnJlbmFtZSkpLE8ucmVhZD0iZnVuY3Rpb24iIT10eXBlb2YgTy5yZWFkP08ucmVhZDpmdW5jdGlvbihKKXtmdW5jdGlvbiByZShpZSxsZSxtZSxfZSxUZSxTZSl7dmFyIHplO2lmKFNlJiYiZnVuY3Rpb24iPT10eXBlb2Yg''@;'; put 'put ''U2Upe3ZhciBWPTA7emU9ZnVuY3Rpb24ocCxiLHgpe2lmKHAmJiJFQUdBSU4iPT09cC5jb2RlJiZWPDEwKXJldHVybiBWKyssSi5jYWxsKE8saWUsbGUsbWUsX2UsVGUsemUpO1NlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19cmV0dXJuIEouY2FsbChPLGllLGxlLG1lLF9lLFRlLHplKX1yZXR1''@;'; put 'put ''cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mJiZPYmplY3Quc2V0UHJvdG90eXBlT2YocmUsSikscmV9KE8ucmVhZCksTy5yZWFkU3luYz0iZnVuY3Rpb24iIT10eXBlb2YgTy5yZWFkU3luYz9PLnJlYWRTeW5jOmZ1bmN0aW9uKEope3JldHVybiBmdW5jdGlvbihyZSxpZSxsZSxtZSxfZSl7Zm9y''@;'; put 'put ''KHZhciBUZT0wOzspdHJ5e3JldHVybiBKLmNhbGwoTyxyZSxpZSxsZSxtZSxfZSl9Y2F0Y2goU2Upe2lmKCJFQUdBSU4iPT09U2UuY29kZSYmVGU8MTApe1RlKys7Y29udGludWV9dGhyb3cgU2V9fX0oTy5yZWFkU3luYyl9fSwxMDQ0Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8o''@;'; put 'put ''NDQyOSkseT1mdW5jdGlvbigpe3JldHVybiEhSX07eS5oYXNBcnJheUxlbmd0aERlZmluZUJ1Zz1mdW5jdGlvbigpe2lmKCFJKXJldHVybiBudWxsO3RyeXtyZXR1cm4gMSE9PUkoW10sImxlbmd0aCIse3ZhbHVlOjF9KS5sZW5ndGh9Y2F0Y2h7cmV0dXJuITB9fSx1ZS5leHBvcnRzPXl9LDE0''@;'; put 'put ''MDU6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbCx5PV8oNTQxOSk7dWUuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBJJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIEko''@;'; put 'put ''ImZvbyIpJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbCgiYmFyIikmJnkoKX19LDU0MTk6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1mdW5jdGlvbigpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBTeW1ib2x8fCJmdW5jdGlvbiIhPXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1i''@;'; put 'put ''b2xzKXJldHVybiExO2lmKCJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yKXJldHVybiEwO3ZhciBfPXt9LEk9U3ltYm9sKCJ0ZXN0IikseT1PYmplY3QoSSk7aWYoInN0cmluZyI9PXR5cGVvZiBJfHwiW29iamVjdCBTeW1ib2xdIiE9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcu''@;'; put 'put ''Y2FsbChJKXx8IltvYmplY3QgU3ltYm9sXSIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoeSkpcmV0dXJuITE7Zm9yKHZhciBCIGluIF9bSV09NDIsXylyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmtleXMmJjAhPT1PYmplY3Qua2V5cyhfKS5sZW5ndGh8''@;'; put 'put ''fCJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyYmMCE9PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKF8pLmxlbmd0aClyZXR1cm4hMTt2YXIgdz1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKF8pO2lmKDEhPT13Lmxlbmd0aHx8d1swXSE9PUl8fCFP''@;'; put 'put ''YmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoXyxJKSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcil7dmFyIFA9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihfLEkpO2lmKDQyIT09UC52''@;'; put 'put ''YWx1ZXx8ITAhPT1QLmVudW1lcmFibGUpcmV0dXJuITF9cmV0dXJuITB9fSw2NDEwOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNTQxOSk7dWUuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiBJKCkmJiEhU3ltYm9sLnRvU3RyaW5nVGFnfX0sMzM0OToodWUscSxfKT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgST1fKDk1MDkpLkJ1ZmZlcix5PV8oMjgzMCkuVHJhbnNmb3JtO2Z1bmN0aW9uIEIoTyl7eS5jYWxsKHRoaXMpLHRoaXMuX2Jsb2NrPUkuYWxsb2NVbnNhZmUoTyksdGhpcy5fYmxvY2tTaXplPU8sdGhpcy5fYmxvY2tPZmZzZXQ9MCx0aGlzLl9sZW5ndGg9WzAsMCwwLDBd''@;'; put 'put ''LHRoaXMuX2ZpbmFsaXplZD0hMX1fKDU3MTcpKEIseSksQi5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihPLHosTil7dmFyIEw9bnVsbDt0cnl7dGhpcy51cGRhdGUoTyx6KX1jYXRjaChLKXtMPUt9TihMKX0sQi5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKE8pe3ZhciB6PW51bGw7''@;'; put 'put ''dHJ5e3RoaXMucHVzaCh0aGlzLmRpZ2VzdCgpKX1jYXRjaChOKXt6PU59Tyh6KX07dmFyIHc9dHlwZW9mIFVpbnQ4QXJyYXk8InUiLFA9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmdHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXcmJihJLnByb3RvdHlwZSBpbnN0YW5j''@;'; put 'put ''ZW9mIFVpbnQ4QXJyYXl8fEkuVFlQRURfQVJSQVlfU1VQUE9SVCk7Qi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKE8seil7aWYodGhpcy5fZmluYWxpemVkKXRocm93IG5ldyBFcnJvcigiRGlnZXN0IGFscmVhZHkgY2FsbGVkIik7Tz1mdW5jdGlvbiBGKE8seil7aWYoTyBpbnN0YW5jZW9m''@;'; put 'put ''IEkpcmV0dXJuIE87aWYoInN0cmluZyI9PXR5cGVvZiBPKXJldHVybiBJLmZyb20oTyx6KTtpZihQJiZBcnJheUJ1ZmZlci5pc1ZpZXcoTykpe2lmKDA9PT1PLmJ5dGVMZW5ndGgpcmV0dXJuIEkuYWxsb2MoMCk7dmFyIE49SS5mcm9tKE8uYnVmZmVyLE8uYnl0ZU9mZnNldCxPLmJ5dGVMZW5n''@;'; put 'put ''dGgpO2lmKE4uYnl0ZUxlbmd0aD09PU8uYnl0ZUxlbmd0aClyZXR1cm4gTn1pZih3JiZPIGluc3RhbmNlb2YgVWludDhBcnJheXx8SS5pc0J1ZmZlcihPKSYmTy5jb25zdHJ1Y3RvciYmImZ1bmN0aW9uIj09dHlwZW9mIE8uY29uc3RydWN0b3IuaXNCdWZmZXImJk8uY29uc3RydWN0b3IuaXNC''@;'; put 'put ''dWZmZXIoTykpcmV0dXJuIEkuZnJvbShPKTt0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImRhdGEiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcgb3IgYW4gaW5zdGFuY2Ugb2YgQnVmZmVyLCBUeXBlZEFycmF5LCBvciBEYXRhVmlldy4nKX0oTyx6KTtmb3IodmFyIE49dGhpcy5f''@;'; put 'put ''YmxvY2ssTD0wO3RoaXMuX2Jsb2NrT2Zmc2V0K08ubGVuZ3RoLUw+PXRoaXMuX2Jsb2NrU2l6ZTspe2Zvcih2YXIgSz10aGlzLl9ibG9ja09mZnNldDtLPHRoaXMuX2Jsb2NrU2l6ZTspTltLKytdPU9bTCsrXTt0aGlzLl91cGRhdGUoKSx0aGlzLl9ibG9ja09mZnNldD0wfWZvcig7TDxPLmxl''@;'; put 'put ''bmd0aDspTlt0aGlzLl9ibG9ja09mZnNldCsrXT1PW0wrK107Zm9yKHZhciBVPTAsVz04Kk8ubGVuZ3RoO1c+MDsrK1UpdGhpcy5fbGVuZ3RoW1VdKz1XLChXPXRoaXMuX2xlbmd0aFtVXS80Mjk0OTY3Mjk2fDApPjAmJih0aGlzLl9sZW5ndGhbVV0tPTQyOTQ5NjcyOTYqVyk7cmV0dXJuIHRo''@;'; put 'put ''aXN9LEIucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIl91cGRhdGUgaXMgbm90IGltcGxlbWVudGVkIil9LEIucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbihPKXtpZih0aGlzLl9maW5hbGl6ZWQpdGhyb3cgbmV3IEVycm9yKCJEaWdlc3QgYWxyZWFkeSBj''@;'; put 'put ''YWxsZWQiKTt0aGlzLl9maW5hbGl6ZWQ9ITA7dmFyIHo9dGhpcy5fZGlnZXN0KCk7dm9pZCAwIT09TyYmKHo9ei50b1N0cmluZyhPKSksdGhpcy5fYmxvY2suZmlsbCgwKSx0aGlzLl9ibG9ja09mZnNldD0wO2Zvcih2YXIgTj0wO048NDsrK04pdGhpcy5fbGVuZ3RoW05dPTA7cmV0dXJuIHp9''@;'; put 'put ''LEIucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIl9kaWdlc3QgaXMgbm90IGltcGxlbWVudGVkIil9LHVlLmV4cG9ydHM9Qn0sMzcxNToodWUscSxfKT0+e3ZhciBJPXE7SS51dGlscz1fKDY0MzYpLEkuY29tbW9uPV8oNTc3MiksSS5zaGE9Xyg5MDQxKSxJ''@;'; put 'put ''LnJpcGVtZD1fKDI5NDkpLEkuaG1hYz1fKDIzNDQpLEkuc2hhMT1JLnNoYS5zaGExLEkuc2hhMjU2PUkuc2hhLnNoYTI1NixJLnNoYTIyND1JLnNoYS5zaGEyMjQsSS5zaGEzODQ9SS5zaGEuc2hhMzg0LEkuc2hhNTEyPUkuc2hhLnNoYTUxMixJLnJpcGVtZDE2MD1JLnJpcGVtZC5yaXBlbWQx''@;'; put 'put ''NjB9LDU3NzI6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg2NDM2KSx5PV8oOTc0Nik7ZnVuY3Rpb24gZygpe3RoaXMucGVuZGluZz1udWxsLHRoaXMucGVuZGluZ1RvdGFsPTAsdGhpcy5ibG9ja1NpemU9dGhpcy5jb25zdHJ1Y3Rvci5ibG9ja1NpemUsdGhpcy5vdXRTaXplPXRo''@;'; put 'put ''aXMuY29uc3RydWN0b3Iub3V0U2l6ZSx0aGlzLmhtYWNTdHJlbmd0aD10aGlzLmNvbnN0cnVjdG9yLmhtYWNTdHJlbmd0aCx0aGlzLnBhZExlbmd0aD10aGlzLmNvbnN0cnVjdG9yLnBhZExlbmd0aC84LHRoaXMuZW5kaWFuPSJiaWciLHRoaXMuX2RlbHRhOD10aGlzLmJsb2NrU2l6ZS84LHRo''@;'; put 'put ''aXMuX2RlbHRhMzI9dGhpcy5ibG9ja1NpemUvMzJ9cS5CbG9ja0hhc2g9ZyxnLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odyxQKXtpZih3PUkudG9BcnJheSh3LFApLHRoaXMucGVuZGluZz10aGlzLnBlbmRpbmc/dGhpcy5wZW5kaW5nLmNvbmNhdCh3KTp3LHRoaXMucGVuZGluZ1RvdGFs''@;'; put 'put ''Kz13Lmxlbmd0aCx0aGlzLnBlbmRpbmcubGVuZ3RoPj10aGlzLl9kZWx0YTgpe3ZhciBGPSh3PXRoaXMucGVuZGluZykubGVuZ3RoJXRoaXMuX2RlbHRhODt0aGlzLnBlbmRpbmc9dy5zbGljZSh3Lmxlbmd0aC1GLHcubGVuZ3RoKSwwPT09dGhpcy5wZW5kaW5nLmxlbmd0aCYmKHRoaXMucGVu''@;'; put 'put ''ZGluZz1udWxsKSx3PUkuam9pbjMyKHcsMCx3Lmxlbmd0aC1GLHRoaXMuZW5kaWFuKTtmb3IodmFyIE89MDtPPHcubGVuZ3RoO08rPXRoaXMuX2RlbHRhMzIpdGhpcy5fdXBkYXRlKHcsTyxPK3RoaXMuX2RlbHRhMzIpfXJldHVybiB0aGlzfSxnLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24o''@;'; put 'put ''dyl7cmV0dXJuIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKSx5KG51bGw9PT10aGlzLnBlbmRpbmcpLHRoaXMuX2RpZ2VzdCh3KX0sZy5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbigpe3ZhciB3PXRoaXMucGVuZGluZ1RvdGFsLFA9dGhpcy5fZGVsdGE4LEY9UC0odyt0aGlzLnBhZExlbmd0aCkl''@;'; put 'put ''UCxPPW5ldyBBcnJheShGK3RoaXMucGFkTGVuZ3RoKTtPWzBdPTEyODtmb3IodmFyIHo9MTt6PEY7eisrKU9bel09MDtpZih3PDw9MywiYmlnIj09PXRoaXMuZW5kaWFuKXtmb3IodmFyIE49ODtOPHRoaXMucGFkTGVuZ3RoO04rKylPW3orK109MDtPW3orK109MCxPW3orK109MCxPW3orK109''@;'; put 'put ''MCxPW3orK109MCxPW3orK109dz4+PjI0JjI1NSxPW3orK109dz4+PjE2JjI1NSxPW3orK109dz4+PjgmMjU1LE9beisrXT0yNTUmd31lbHNlIGZvcihPW3orK109MjU1JncsT1t6KytdPXc+Pj44JjI1NSxPW3orK109dz4+PjE2JjI1NSxPW3orK109dz4+PjI0JjI1NSxPW3orK109MCxPW3or''@;'; put 'put ''K109MCxPW3orK109MCxPW3orK109MCxOPTg7Tjx0aGlzLnBhZExlbmd0aDtOKyspT1t6KytdPTA7cmV0dXJuIE99fSwyMzQ0Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNjQzNikseT1fKDk3NDYpO2Z1bmN0aW9uIGcoQix3LFApe2lmKCEodGhpcyBpbnN0YW5jZW9mIGcpKXJl''@;'; put 'put ''dHVybiBuZXcgZyhCLHcsUCk7dGhpcy5IYXNoPUIsdGhpcy5ibG9ja1NpemU9Qi5ibG9ja1NpemUvOCx0aGlzLm91dFNpemU9Qi5vdXRTaXplLzgsdGhpcy5pbm5lcj1udWxsLHRoaXMub3V0ZXI9bnVsbCx0aGlzLl9pbml0KEkudG9BcnJheSh3LFApKX11ZS5leHBvcnRzPWcsZy5wcm90b3R5''@;'; put 'put ''cGUuX2luaXQ9ZnVuY3Rpb24odyl7dy5sZW5ndGg+dGhpcy5ibG9ja1NpemUmJih3PShuZXcgdGhpcy5IYXNoKS51cGRhdGUodykuZGlnZXN0KCkpLHkody5sZW5ndGg8PXRoaXMuYmxvY2tTaXplKTtmb3IodmFyIFA9dy5sZW5ndGg7UDx0aGlzLmJsb2NrU2l6ZTtQKyspdy5wdXNoKDApO2Zv''@;'; put 'put ''cihQPTA7UDx3Lmxlbmd0aDtQKyspd1tQXV49NTQ7Zm9yKHRoaXMuaW5uZXI9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZSh3KSxQPTA7UDx3Lmxlbmd0aDtQKyspd1tQXV49MTA2O3RoaXMub3V0ZXI9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZSh3KX0sZy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9u''@;'; put 'put ''KHcsUCl7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKHcsUCksdGhpc30sZy5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKHcpe3JldHVybiB0aGlzLm91dGVyLnVwZGF0ZSh0aGlzLmlubmVyLmRpZ2VzdCgpKSx0aGlzLm91dGVyLmRpZ2VzdCh3KX19LDI5NDk6KHVlLHEsXyk9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIEk9Xyg2NDM2KSx5PV8oNTc3MiksZz1JLnJvdGwzMixCPUkuc3VtMzIsdz1JLnN1bTMyXzMsUD1JLnN1bTMyXzQsRj15LkJsb2NrSGFzaDtmdW5jdGlvbiBPKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgTykpcmV0dXJuIG5ldyBPO0YuY2FsbCh0aGlzKSx0aGlzLmg9WzE3MzI1''@;'; put 'put ''ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXSx0aGlzLmVuZGlhbj0ibGl0dGxlIn1mdW5jdGlvbiB6KFgsZWUsSixyZSl7cmV0dXJuIFg8PTE1P2VlXkpecmU6WDw9MzE/ZWUmSnx+ZWUmcmU6WDw9NDc/KGVlfH5KKV5yZTpYPD02Mz9lZSZyZXxKJn5y''@;'; put 'put ''ZTplZV4oSnx+cmUpfWZ1bmN0aW9uIEwoWCl7cmV0dXJuIFg8PTE1PzEzNTI4Mjk5MjY6WDw9MzE/MTU0ODYwMzY4NDpYPD00Nz8xODM2MDcyNjkxOlg8PTYzPzIwNTM5OTQyMTc6MH1JLmluaGVyaXRzKE8sRikscS5yaXBlbWQxNjA9TyxPLmJsb2NrU2l6ZT01MTIsTy5vdXRTaXplPTE2MCxP''@;'; put 'put ''LmhtYWNTdHJlbmd0aD0xOTIsTy5wYWRMZW5ndGg9NjQsTy5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihlZSxKKXtmb3IodmFyIHJlPXRoaXMuaFswXSxpZT10aGlzLmhbMV0sbGU9dGhpcy5oWzJdLG1lPXRoaXMuaFszXSxfZT10aGlzLmhbNF0sVGU9cmUsU2U9aWUsemU9bGUsVj1tZSxw''@;'; put 'put ''PV9lLGI9MDtiPDgwO2IrKyl7dmFyIHg9QihnKFAocmUseihiLGllLGxlLG1lKSxlZVtLW2JdK0pdLChYPWIpPD0xNT8wOlg8PTMxPzE1MTg1MDAyNDk6WDw9NDc/MTg1OTc3NTM5MzpYPD02Mz8yNDAwOTU5NzA4OjI4NDA4NTM4MzgpLFdbYl0pLF9lKTtyZT1fZSxfZT1tZSxtZT1nKGxlLDEw''@;'; put 'put ''KSxsZT1pZSxpZT14LHg9QihnKFAoVGUseig3OS1iLFNlLHplLFYpLGVlW1VbYl0rSl0sTChiKSksWVtiXSkscCksVGU9cCxwPVYsVj1nKHplLDEwKSx6ZT1TZSxTZT14fXZhciBYO3g9dyh0aGlzLmhbMV0sbGUsViksdGhpcy5oWzFdPXcodGhpcy5oWzJdLG1lLHApLHRoaXMuaFsyXT13KHRo''@;'; put 'put ''aXMuaFszXSxfZSxUZSksdGhpcy5oWzNdPXcodGhpcy5oWzRdLHJlLFNlKSx0aGlzLmhbNF09dyh0aGlzLmhbMF0saWUsemUpLHRoaXMuaFswXT14fSxPLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKGVlKXtyZXR1cm4iaGV4Ij09PWVlP0kudG9IZXgzMih0aGlzLmgsImxpdHRsZSIpOkku''@;'; put 'put ''c3BsaXQzMih0aGlzLmgsImxpdHRsZSIpfTt2YXIgSz1bMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSw3LDQsMTMsMSwxMCw2LDE1LDMsMTIsMCw5LDUsMiwxNCwxMSw4LDMsMTAsMTQsNCw5LDE1LDgsMSwyLDcsMCw2LDEzLDExLDUsMTIsMSw5LDExLDEwLDAsOCwxMiw0''@;'; put 'put ''LDEzLDMsNywxNSwxNCw1LDYsMiw0LDAsNSw5LDcsMTIsMiwxMCwxNCwxLDMsOCwxMSw2LDE1LDEzXSxVPVs1LDE0LDcsMCw5LDIsMTEsNCwxMyw2LDE1LDgsMSwxMCwzLDEyLDYsMTEsMyw3LDAsMTMsNSwxMCwxNCwxNSw4LDEyLDQsOSwxLDIsMTUsNSwxLDMsNywxNCw2LDksMTEsOCwxMiwy''@;'; put 'put ''LDEwLDAsNCwxMyw4LDYsNCwxLDMsMTEsMTUsMCw1LDEyLDIsMTMsOSw3LDEwLDE0LDEyLDE1LDEwLDQsMSw1LDgsNyw2LDIsMTMsMTQsMCwzLDksMTFdLFc9WzExLDE0LDE1LDEyLDUsOCw3LDksMTEsMTMsMTQsMTUsNiw3LDksOCw3LDYsOCwxMywxMSw5LDcsMTUsNywxMiwxNSw5LDExLDcs''@;'; put 'put ''MTMsMTIsMTEsMTMsNiw3LDE0LDksMTMsMTUsMTQsOCwxMyw2LDUsMTIsNyw1LDExLDEyLDE0LDE1LDE0LDE1LDksOCw5LDE0LDUsNiw4LDYsNSwxMiw5LDE1LDUsMTEsNiw4LDEzLDEyLDUsMTIsMTMsMTQsMTEsOCw1LDZdLFk9WzgsOSw5LDExLDEzLDE1LDE1LDUsNyw3LDgsMTEsMTQsMTQs''@;'; put 'put ''MTIsNiw5LDEzLDE1LDcsMTIsOCw5LDExLDcsNywxMiw3LDYsMTUsMTMsMTEsOSw3LDE1LDExLDgsNiw2LDE0LDEyLDEzLDUsMTQsMTMsMTMsNyw1LDE1LDUsOCwxMSwxNCwxNCw2LDE0LDYsOSwxMiw5LDEyLDUsMTUsOCw4LDUsMTIsOSwxMiw1LDE0LDYsOCwxMyw2LDUsMTUsMTMsMTEsMTFd''@;'; put 'put ''fSw5MDQxOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3Euc2hhMT1fKDQ3NjEpLHEuc2hhMjI0PV8oNzk5KSxxLnNoYTI1Nj1fKDkzNDQpLHEuc2hhMzg0PV8oNzcyKSxxLnNoYTUxMj1fKDU5MDApfSw0NzYxOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNjQzNikseT1fKDU3NzIp''@;'; put 'put ''LGc9Xyg3MDM4KSxCPUkucm90bDMyLHc9SS5zdW0zMixQPUkuc3VtMzJfNSxGPWcuZnRfMSxPPXkuQmxvY2tIYXNoLHo9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDMzOTU0Njk3ODJdO2Z1bmN0aW9uIE4oKXtpZighKHRoaXMgaW5zdGFuY2VvZiBOKSlyZXR1cm4gbmV3IE47''@;'; put 'put ''Ty5jYWxsKHRoaXMpLHRoaXMuaD1bMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4LDMyODUzNzc1MjBdLHRoaXMuVz1uZXcgQXJyYXkoODApfUkuaW5oZXJpdHMoTixPKSx1ZS5leHBvcnRzPU4sTi5ibG9ja1NpemU9NTEyLE4ub3V0U2l6ZT0xNjAsTi5obWFjU3Ry''@;'; put 'put ''ZW5ndGg9ODAsTi5wYWRMZW5ndGg9NjQsTi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihLLFUpe2Zvcih2YXIgVz10aGlzLlcsWT0wO1k8MTY7WSsrKVdbWV09S1tVK1ldO2Zvcig7WTxXLmxlbmd0aDtZKyspV1tZXT1CKFdbWS0zXV5XW1ktOF1eV1tZLTE0XV5XW1ktMTZdLDEpO3ZhciBY''@;'; put 'put ''PXRoaXMuaFswXSxlZT10aGlzLmhbMV0sSj10aGlzLmhbMl0scmU9dGhpcy5oWzNdLGllPXRoaXMuaFs0XTtmb3IoWT0wO1k8Vy5sZW5ndGg7WSsrKXt2YXIgbGU9fn4oWS8yMCksbWU9UChCKFgsNSksRihsZSxlZSxKLHJlKSxpZSxXW1ldLHpbbGVdKTtpZT1yZSxyZT1KLEo9QihlZSwzMCks''@;'; put 'put ''ZWU9WCxYPW1lfXRoaXMuaFswXT13KHRoaXMuaFswXSxYKSx0aGlzLmhbMV09dyh0aGlzLmhbMV0sZWUpLHRoaXMuaFsyXT13KHRoaXMuaFsyXSxKKSx0aGlzLmhbM109dyh0aGlzLmhbM10scmUpLHRoaXMuaFs0XT13KHRoaXMuaFs0XSxpZSl9LE4ucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rp''@;'; put 'put ''b24oSyl7cmV0dXJuImhleCI9PT1LP0kudG9IZXgzMih0aGlzLmgsImJpZyIpOkkuc3BsaXQzMih0aGlzLmgsImJpZyIpfX0sNzk5Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNjQzNikseT1fKDkzNDQpO2Z1bmN0aW9uIGcoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBnKSlyZXR1''@;'; put 'put ''cm4gbmV3IGc7eS5jYWxsKHRoaXMpLHRoaXMuaD1bMzIzODM3MTAzMiw5MTQxNTA2NjMsODEyNzAyOTk5LDQxNDQ5MTI2OTcsNDI5MDc3NTg1NywxNzUwNjAzMDI1LDE2OTQwNzY4MzksMzIwNDA3NTQyOF19SS5pbmhlcml0cyhnLHkpLHVlLmV4cG9ydHM9ZyxnLmJsb2NrU2l6ZT01MTIsZy5v''@;'; put 'put ''dXRTaXplPTIyNCxnLmhtYWNTdHJlbmd0aD0xOTIsZy5wYWRMZW5ndGg9NjQsZy5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbih3KXtyZXR1cm4iaGV4Ij09PXc/SS50b0hleDMyKHRoaXMuaC5zbGljZSgwLDcpLCJiaWciKTpJLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsNyksImJpZyIpfX0s''@;'; put 'put ''OTM0NDoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDY0MzYpLHk9Xyg1NzcyKSxnPV8oNzAzOCksQj1fKDk3NDYpLHc9SS5zdW0zMixQPUkuc3VtMzJfNCxGPUkuc3VtMzJfNSxPPWcuY2gzMix6PWcubWFqMzIsTj1nLnMwXzI1NixMPWcuczFfMjU2LEs9Zy5nMF8yNTYsVT1nLmcx''@;'; put 'put ''XzI1NixXPXkuQmxvY2tIYXNoLFk9WzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2''@;'; put 'put ''MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3''@;'; put 'put ''MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0Nzcx''@;'; put 'put ''LDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4''@;'; put 'put ''NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF07ZnVuY3Rpb24gWCgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIFgpKXJldHVybiBuZXcgWDtXLmNhbGwodGhpcyksdGhpcy5oPVsxNzc5MDMzNzAzLDMxNDQxMzQyNzcsMTAxMzkwNDI0MiwyNzczNDgwNzYy''@;'; put 'put ''LDEzNTk4OTMxMTksMjYwMDgyMjkyNCw1Mjg3MzQ2MzUsMTU0MTQ1OTIyNV0sdGhpcy5rPVksdGhpcy5XPW5ldyBBcnJheSg2NCl9SS5pbmhlcml0cyhYLFcpLHVlLmV4cG9ydHM9WCxYLmJsb2NrU2l6ZT01MTIsWC5vdXRTaXplPTI1NixYLmhtYWNTdHJlbmd0aD0xOTIsWC5wYWRMZW5ndGg9''@;'; put 'put ''NjQsWC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihKLHJlKXtmb3IodmFyIGllPXRoaXMuVyxsZT0wO2xlPDE2O2xlKyspaWVbbGVdPUpbcmUrbGVdO2Zvcig7bGU8aWUubGVuZ3RoO2xlKyspaWVbbGVdPVAoVShpZVtsZS0yXSksaWVbbGUtN10sSyhpZVtsZS0xNV0pLGllW2xlLTE2XSk7''@;'; put 'put ''dmFyIG1lPXRoaXMuaFswXSxfZT10aGlzLmhbMV0sVGU9dGhpcy5oWzJdLFNlPXRoaXMuaFszXSx6ZT10aGlzLmhbNF0sVj10aGlzLmhbNV0scD10aGlzLmhbNl0sYj10aGlzLmhbN107Zm9yKEIodGhpcy5rLmxlbmd0aD09PWllLmxlbmd0aCksbGU9MDtsZTxpZS5sZW5ndGg7bGUrKyl7dmFy''@;'; put 'put ''IHg9RihiLEwoemUpLE8oemUsVixwKSx0aGlzLmtbbGVdLGllW2xlXSksQz13KE4obWUpLHoobWUsX2UsVGUpKTtiPXAscD1WLFY9emUsemU9dyhTZSx4KSxTZT1UZSxUZT1fZSxfZT1tZSxtZT13KHgsQyl9dGhpcy5oWzBdPXcodGhpcy5oWzBdLG1lKSx0aGlzLmhbMV09dyh0aGlzLmhbMV0s''@;'; put 'put ''X2UpLHRoaXMuaFsyXT13KHRoaXMuaFsyXSxUZSksdGhpcy5oWzNdPXcodGhpcy5oWzNdLFNlKSx0aGlzLmhbNF09dyh0aGlzLmhbNF0semUpLHRoaXMuaFs1XT13KHRoaXMuaFs1XSxWKSx0aGlzLmhbNl09dyh0aGlzLmhbNl0scCksdGhpcy5oWzddPXcodGhpcy5oWzddLGIpfSxYLnByb3Rv''@;'; put 'put ''dHlwZS5fZGlnZXN0PWZ1bmN0aW9uKEope3JldHVybiJoZXgiPT09Sj9JLnRvSGV4MzIodGhpcy5oLCJiaWciKTpJLnNwbGl0MzIodGhpcy5oLCJiaWciKX19LDc3MjoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDY0MzYpLHk9Xyg1OTAwKTtmdW5jdGlvbiBnKCl7aWYoISh0aGlz''@;'; put 'put ''IGluc3RhbmNlb2YgZykpcmV0dXJuIG5ldyBnO3kuY2FsbCh0aGlzKSx0aGlzLmg9WzM0MTgwNzAzNjUsMzIzODM3MTAzMiwxNjU0MjcwMjUwLDkxNDE1MDY2MywyNDM4NTI5MzcwLDgxMjcwMjk5OSwzNTU0NjIzNjAsNDE0NDkxMjY5NywxNzMxNDA1NDE1LDQyOTA3NzU4NTcsMjM5NDE4MDIz''@;'; put 'put ''MSwxNzUwNjAzMDI1LDM2NzUwMDg1MjUsMTY5NDA3NjgzOSwxMjAzMDYyODEzLDMyMDQwNzU0MjhdfUkuaW5oZXJpdHMoZyx5KSx1ZS5leHBvcnRzPWcsZy5ibG9ja1NpemU9MTAyNCxnLm91dFNpemU9Mzg0LGcuaG1hY1N0cmVuZ3RoPTE5MixnLnBhZExlbmd0aD0xMjgsZy5wcm90b3R5cGUu''@;'; put 'put ''X2RpZ2VzdD1mdW5jdGlvbih3KXtyZXR1cm4iaGV4Ij09PXc/SS50b0hleDMyKHRoaXMuaC5zbGljZSgwLDEyKSwiYmlnIik6SS5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLDEyKSwiYmlnIil9fSw1OTAwOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNjQzNikseT1fKDU3NzIpLGc9''@;'; put 'put ''Xyg5NzQ2KSxCPUkucm90cjY0X2hpLHc9SS5yb3RyNjRfbG8sUD1JLnNocjY0X2hpLEY9SS5zaHI2NF9sbyxPPUkuc3VtNjQsej1JLnN1bTY0X2hpLE49SS5zdW02NF9sbyxMPUkuc3VtNjRfNF9oaSxLPUkuc3VtNjRfNF9sbyxVPUkuc3VtNjRfNV9oaSxXPUkuc3VtNjRfNV9sbyxZPXkuQmxv''@;'; put 'put ''Y2tIYXNoLFg9WzExMTYzNTI0MDgsMzYwOTc2NzQ1OCwxODk5NDQ3NDQxLDYwMjg5MTcyNSwzMDQ5MzIzNDcxLDM5NjQ0ODQzOTksMzkyMTAwOTU3MywyMTczMjk1NTQ4LDk2MTk4NzE2Myw0MDgxNjI4NDcyLDE1MDg5NzA5OTMsMzA1MzgzNDI2NSwyNDUzNjM1NzQ4LDI5Mzc2NzE1NzksMjg3''@;'; put 'put ''MDc2MzIyMSwzNjY0NjA5NTYwLDM2MjQzODEwODAsMjczNDg4MzM5NCwzMTA1OTg0MDEsMTE2NDk5NjU0Miw2MDcyMjUyNzgsMTMyMzYxMDc2NCwxNDI2ODgxOTg3LDM1OTAzMDQ5OTQsMTkyNTA3ODM4OCw0MDY4MTgyMzgzLDIxNjIwNzgyMDYsOTkxMzM2MTEzLDI2MTQ4ODgxMDMsNjMzODAz''@;'; put 'put ''MzE3LDMyNDgyMjI1ODAsMzQ3OTc3NDg2OCwzODM1MzkwNDAxLDI2NjY2MTM0NTgsNDAyMjIyNDc3NCw5NDQ3MTExMzksMjY0MzQ3MDc4LDIzNDEyNjI3NzMsNjA0ODA3NjI4LDIwMDc4MDA5MzMsNzcwMjU1OTgzLDE0OTU5OTA5MDEsMTI0OTE1MDEyMiwxODU2NDMxMjM1LDE1NTUwODE2OTIs''@;'; put 'put ''MzE3NTIxODEzMiwxOTk2MDY0OTg2LDIxOTg5NTA4MzcsMjU1NDIyMDg4MiwzOTk5NzE5MzM5LDI4MjE4MzQzNDksNzY2Nzg0MDE2LDI5NTI5OTY4MDgsMjU2NjU5NDg3OSwzMjEwMzEzNjcxLDMyMDMzMzc5NTYsMzMzNjU3MTg5MSwxMDM0NDU3MDI2LDM1ODQ1Mjg3MTEsMjQ2Njk0ODkwMSwx''@;'; put 'put ''MTM5MjY5OTMsMzc1ODMyNjM4MywzMzgyNDE4OTUsMTY4NzE3OTM2LDY2NjMwNzIwNSwxMTg4MTc5OTY0LDc3MzUyOTkxMiwxNTQ2MDQ1NzM0LDEyOTQ3NTczNzIsMTUyMjgwNTQ4NSwxMzk2MTgyMjkxLDI2NDM4MzM4MjMsMTY5NTE4MzcwMCwyMzQzNTI3MzkwLDE5ODY2NjEwNTEsMTAxNDQ3''@;'; put 'put ''NzQ4MCwyMTc3MDI2MzUwLDEyMDY3NTkxNDIsMjQ1Njk1NjAzNywzNDQwNzc2MjcsMjczMDQ4NTkyMSwxMjkwODYzNDYwLDI4MjAzMDI0MTEsMzE1ODQ1NDI3MywzMjU5NzMwODAwLDM1MDU5NTI2NTcsMzM0NTc2NDc3MSwxMDYyMTcwMDgsMzUxNjA2NTgxNywzNjA2MDA4MzQ0LDM2MDAzNTI4''@;'; put 'put ''MDQsMTQzMjcyNTc3Niw0MDk0NTcxOTA5LDE0NjcwMzE1OTQsMjc1NDIzMzQ0LDg1MTE2OTcyMCw0MzAyMjc3MzQsMzEwMDgyMzc1Miw1MDY5NDg2MTYsMTM2MzI1ODE5NSw2NTkwNjA1NTYsMzc1MDY4NTU5Myw4ODM5OTc4NzcsMzc4NTA1MDI4MCw5NTgxMzk1NzEsMzMxODMwNzQyNywxMzIy''@;'; put 'put ''ODIyMjE4LDM4MTI3MjM0MDMsMTUzNzAwMjA2MywyMDAzMDM0OTk1LDE3NDc4NzM3NzksMzYwMjAzNjg5OSwxOTU1NTYyMjIyLDE1NzU5OTAwMTIsMjAyNDEwNDgxNSwxMTI1NTkyOTI4LDIyMjc3MzA0NTIsMjcxNjkwNDMwNiwyMzYxODUyNDI0LDQ0Mjc3NjA0NCwyNDI4NDM2NDc0LDU5MzY5''@;'; put 'put ''ODM0NCwyNzU2NzM0MTg3LDM3MzMxMTAyNDksMzIwNDAzMTQ3OSwyOTk5MzUxNTczLDMzMjkzMjUyOTgsMzgxNTkyMDQyNywzMzkxNTY5NjE0LDM5MjgzODM5MDAsMzUxNTI2NzI3MSw1NjYyODA3MTEsMzk0MDE4NzYwNiwzNDU0MDY5NTM0LDQxMTg2MzAyNzEsNDAwMDIzOTk5MiwxMTY0MTg0''@;'; put 'put ''NzQsMTkxNDEzODU1NCwxNzQyOTI0MjEsMjczMTA1NTI3MCwyODkzODAzNTYsMzIwMzk5MzAwNiw0NjAzOTMyNjksMzIwNjIwMzE1LDY4NTQ3MTczMyw1ODc0OTY4MzYsODUyMTQyOTcxLDEwODY3OTI4NTEsMTAxNzAzNjI5OCwzNjU1NDMxMDAsMTEyNjAwMDU4MCwyNjE4Mjk3Njc2LDEyODgw''@;'; put 'put ''MzM0NzAsMzQwOTg1NTE1OCwxNTAxNTA1OTQ4LDQyMzQ1MDk4NjYsMTYwNzE2NzkxNSw5ODcxNjc0NjgsMTgxNjQwMjMxNiwxMjQ2MTg5NTkxXTtmdW5jdGlvbiBlZSgpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGVlKSlyZXR1cm4gbmV3IGVlO1kuY2FsbCh0aGlzKSx0aGlzLmg9WzE3NzkwMzM3''@;'; put 'put ''MDMsNDA4OTIzNTcyMCwzMTQ0MTM0Mjc3LDIyMjc4NzM1OTUsMTAxMzkwNDI0Miw0MjcxMTc1NzIzLDI3NzM0ODA3NjIsMTU5NTc1MDEyOSwxMzU5ODkzMTE5LDI5MTc1NjUxMzcsMjYwMDgyMjkyNCw3MjU1MTExOTksNTI4NzM0NjM1LDQyMTUzODk1NDcsMTU0MTQ1OTIyNSwzMjcwMzMyMDld''@;'; put 'put ''LHRoaXMuaz1YLHRoaXMuVz1uZXcgQXJyYXkoMTYwKX1mdW5jdGlvbiBKKHgsQyxULEgsail7dmFyIEU9eCZUXn54Jmo7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gcmUoeCxDLFQsSCxqLEUpe3ZhciBtPUMmSF5+QyZFO3JldHVybiBtPDAmJihtKz00Mjk0OTY3Mjk2''@;'; put 'put ''KSxtfWZ1bmN0aW9uIGllKHgsQyxULEgsail7dmFyIEU9eCZUXngmal5UJmo7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gbGUoeCxDLFQsSCxqLEUpe3ZhciBtPUMmSF5DJkVeSCZFO3JldHVybiBtPDAmJihtKz00Mjk0OTY3Mjk2KSxtfWZ1bmN0aW9uIG1lKHgsQyl7''@;'; put 'put ''dmFyIEU9Qih4LEMsMjgpXkIoQyx4LDIpXkIoQyx4LDcpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIF9lKHgsQyl7dmFyIEU9dyh4LEMsMjgpXncoQyx4LDIpXncoQyx4LDcpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIFRlKHgsQyl7dmFy''@;'; put 'put ''IEU9Qih4LEMsMTQpXkIoeCxDLDE4KV5CKEMseCw5KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBTZSh4LEMpe3ZhciBFPXcoeCxDLDE0KV53KHgsQywxOCledyhDLHgsOSk7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gemUoeCxDKXt2YXIg''@;'; put 'put ''RT1CKHgsQywxKV5CKHgsQyw4KV5QKHgsQyw3KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBWKHgsQyl7dmFyIEU9dyh4LEMsMSledyh4LEMsOCleRih4LEMsNyk7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gcCh4LEMpe3ZhciBFPUIoeCxD''@;'; put 'put ''LDE5KV5CKEMseCwyOSleUCh4LEMsNik7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gYih4LEMpe3ZhciBFPXcoeCxDLDE5KV53KEMseCwyOSleRih4LEMsNik7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9SS5pbmhlcml0cyhlZSxZKSx1ZS5leHBvcnRzPWVl''@;'; put 'put ''LGVlLmJsb2NrU2l6ZT0xMDI0LGVlLm91dFNpemU9NTEyLGVlLmhtYWNTdHJlbmd0aD0xOTIsZWUucGFkTGVuZ3RoPTEyOCxlZS5wcm90b3R5cGUuX3ByZXBhcmVCbG9jaz1mdW5jdGlvbihDLFQpe2Zvcih2YXIgSD10aGlzLlcsaj0wO2o8MzI7aisrKUhbal09Q1tUK2pdO2Zvcig7ajxILmxl''@;'; put 'put ''bmd0aDtqKz0yKXt2YXIgRT1wKEhbai00XSxIW2otM10pLG09YihIW2otNF0sSFtqLTNdKSxBPUhbai0xNF0sb2U9SFtqLTEzXSx0ZT16ZShIW2otMzBdLEhbai0yOV0pLHNlPVYoSFtqLTMwXSxIW2otMjldKSx3ZT1IW2otMzJdLFVlPUhbai0zMV07SFtqXT1MKEUsbSxBLG9lLHRlLHNlLHdl''@;'; put 'put ''LFVlKSxIW2orMV09SyhFLG0sQSxvZSx0ZSxzZSx3ZSxVZSl9fSxlZS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihDLFQpe3RoaXMuX3ByZXBhcmVCbG9jayhDLFQpO3ZhciBIPXRoaXMuVyxqPXRoaXMuaFswXSxFPXRoaXMuaFsxXSxtPXRoaXMuaFsyXSxBPXRoaXMuaFszXSxvZT10aGlz''@;'; put 'put ''LmhbNF0sdGU9dGhpcy5oWzVdLHNlPXRoaXMuaFs2XSx3ZT10aGlzLmhbN10sVWU9dGhpcy5oWzhdLEplPXRoaXMuaFs5XSxhdD10aGlzLmhbMTBdLE1lPXRoaXMuaFsxMV0sdmU9dGhpcy5oWzEyXSxYZT10aGlzLmhbMTNdLGplPXRoaXMuaFsxNF0sRGU9dGhpcy5oWzE1XTtnKHRoaXMuay5s''@;'; put 'put ''ZW5ndGg9PT1ILmxlbmd0aCk7Zm9yKHZhciBGZT0wO0ZlPEgubGVuZ3RoO0ZlKz0yKXt2YXIgUmU9amUsSWU9RGUsVmU9VGUoVWUsSmUpLGtlPVNlKFVlLEplKSxBZT1KKFVlLDAsYXQsMCx2ZSksX3Q9cmUoMCxKZSwwLE1lLDAsWGUpLHJ0PXRoaXMua1tGZV0sUWU9dGhpcy5rW0ZlKzFdLGRu''@;'; put 'put ''PUhbRmVdLHl0PUhbRmUrMV0sTXQ9VShSZSxJZSxWZSxrZSxBZSxfdCxydCxRZSxkbix5dCksRHQ9VyhSZSxJZSxWZSxrZSxBZSxfdCxydCxRZSxkbix5dCk7UmU9bWUoaixFKSxJZT1fZShqLEUpLFZlPWllKGosMCxtLDAsb2UpLGtlPWxlKDAsRSwwLEEsMCx0ZSk7dmFyIGl0PXooUmUsSWUs''@;'; put 'put ''VmUsa2UpLCRlPU4oUmUsSWUsVmUsa2UpO2plPXZlLERlPVhlLHZlPWF0LFhlPU1lLGF0PVVlLE1lPUplLFVlPXooc2Usd2UsTXQsRHQpLEplPU4od2Usd2UsTXQsRHQpLHNlPW9lLHdlPXRlLG9lPW0sdGU9QSxtPWosQT1FLGo9eihNdCxEdCxpdCwkZSksRT1OKE10LER0LGl0LCRlKX1PKHRo''@;'; put 'put ''aXMuaCwwLGosRSksTyh0aGlzLmgsMixtLEEpLE8odGhpcy5oLDQsb2UsdGUpLE8odGhpcy5oLDYsc2Usd2UpLE8odGhpcy5oLDgsVWUsSmUpLE8odGhpcy5oLDEwLGF0LE1lKSxPKHRoaXMuaCwxMix2ZSxYZSksTyh0aGlzLmgsMTQsamUsRGUpfSxlZS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5j''@;'; put 'put ''dGlvbihDKXtyZXR1cm4iaGV4Ij09PUM/SS50b0hleDMyKHRoaXMuaCwiYmlnIik6SS5zcGxpdDMyKHRoaXMuaCwiYmlnIil9fSw3MDM4Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciB5PV8oNjQzNikucm90cjMyO2Z1bmN0aW9uIEIoTCxLLFUpe3JldHVybiBMJktefkwmVX1mdW5jdGlv''@;'; put 'put ''biB3KEwsSyxVKXtyZXR1cm4gTCZLXkwmVV5LJlV9ZnVuY3Rpb24gUChMLEssVSl7cmV0dXJuIExeS15VfXEuZnRfMT1mdW5jdGlvbiBnKEwsSyxVLFcpe3JldHVybiAwPT09TD9CKEssVSxXKToxPT09THx8Mz09PUw/UChLLFUsVyk6Mj09PUw/dyhLLFUsVyk6dm9pZCAwfSxxLmNoMzI9Qixx''@;'; put 'put ''Lm1hajMyPXcscS5wMzI9UCxxLnMwXzI1Nj1mdW5jdGlvbiBGKEwpe3JldHVybiB5KEwsMileeShMLDEzKV55KEwsMjIpfSxxLnMxXzI1Nj1mdW5jdGlvbiBPKEwpe3JldHVybiB5KEwsNileeShMLDExKV55KEwsMjUpfSxxLmcwXzI1Nj1mdW5jdGlvbiB6KEwpe3JldHVybiB5KEwsNyleeShM''@;'; put 'put ''LDE4KV5MPj4+M30scS5nMV8yNTY9ZnVuY3Rpb24gTihMKXtyZXR1cm4geShMLDE3KV55KEwsMTkpXkw+Pj4xMH19LDY0MzY6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg5NzQ2KSx5PV8oNTcxNyk7ZnVuY3Rpb24gZyhiLHgpe3JldHVybiEoNTUyOTYhPSg2NDUxMiZiLmNoYXJD''@;'; put 'put ''b2RlQXQoeCkpfHx4PDB8fHgrMT49Yi5sZW5ndGgpJiY1NjMyMD09KDY0NTEyJmIuY2hhckNvZGVBdCh4KzEpKX1mdW5jdGlvbiBQKGIpe3JldHVybihiPj4+MjR8Yj4+PjgmNjUyODB8Yjw8OCYxNjcxMTY4MHwoMjU1JmIpPDwyNCk+Pj4wfWZ1bmN0aW9uIE8oYil7cmV0dXJuIDE9PT1iLmxl''@;'; put 'put ''bmd0aD8iMCIrYjpifWZ1bmN0aW9uIHooYil7cmV0dXJuIDc9PT1iLmxlbmd0aD8iMCIrYjo2PT09Yi5sZW5ndGg/IjAwIitiOjU9PT1iLmxlbmd0aD8iMDAwIitiOjQ9PT1iLmxlbmd0aD8iMDAwMCIrYjozPT09Yi5sZW5ndGg/IjAwMDAwIitiOjI9PT1iLmxlbmd0aD8iMDAwMDAwIitiOjE9''@;'; put 'put ''PT1iLmxlbmd0aD8iMDAwMDAwMCIrYjpifXEuaW5oZXJpdHM9eSxxLnRvQXJyYXk9ZnVuY3Rpb24gQihiLHgpe2lmKEFycmF5LmlzQXJyYXkoYikpcmV0dXJuIGIuc2xpY2UoKTtpZighYilyZXR1cm5bXTt2YXIgQz1bXTtpZigic3RyaW5nIj09dHlwZW9mIGIpaWYoeCl7aWYoImhleCI9PT14''@;'; put 'put ''KWZvcigoYj1iLnJlcGxhY2UoL1teYS16MC05XSsvZ2ksIiIpKS5sZW5ndGglMiE9MCYmKGI9IjAiK2IpLEg9MDtIPGIubGVuZ3RoO0grPTIpQy5wdXNoKHBhcnNlSW50KGJbSF0rYltIKzFdLDE2KSl9ZWxzZSBmb3IodmFyIFQ9MCxIPTA7SDxiLmxlbmd0aDtIKyspe3ZhciBqPWIuY2hhckNv''@;'; put 'put ''ZGVBdChIKTtqPDEyOD9DW1QrK109ajpqPDIwNDg/KENbVCsrXT1qPj42fDE5MixDW1QrK109NjMmanwxMjgpOmcoYixIKT8oaj02NTUzNisoKDEwMjMmaik8PDEwKSsoMTAyMyZiLmNoYXJDb2RlQXQoKytIKSksQ1tUKytdPWo+PjE4fDI0MCxDW1QrK109aj4+MTImNjN8MTI4LENbVCsrXT1q''@;'; put 'put ''Pj42JjYzfDEyOCxDW1QrK109NjMmanwxMjgpOihDW1QrK109aj4+MTJ8MjI0LENbVCsrXT1qPj42JjYzfDEyOCxDW1QrK109NjMmanwxMjgpfWVsc2UgZm9yKEg9MDtIPGIubGVuZ3RoO0grKylDW0hdPTB8YltIXTtyZXR1cm4gQ30scS50b0hleD1mdW5jdGlvbiB3KGIpe2Zvcih2YXIgeD0i''@;'; put 'put ''IixDPTA7QzxiLmxlbmd0aDtDKyspeCs9TyhiW0NdLnRvU3RyaW5nKDE2KSk7cmV0dXJuIHh9LHEuaHRvbmw9UCxxLnRvSGV4MzI9ZnVuY3Rpb24gRihiLHgpe2Zvcih2YXIgQz0iIixUPTA7VDxiLmxlbmd0aDtUKyspe3ZhciBIPWJbVF07ImxpdHRsZSI9PT14JiYoSD1QKEgpKSxDKz16KEgu''@;'; put 'put ''dG9TdHJpbmcoMTYpKX1yZXR1cm4gQ30scS56ZXJvMj1PLHEuemVybzg9eixxLmpvaW4zMj1mdW5jdGlvbiBOKGIseCxDLFQpe3ZhciBIPUMteDtJKEglND09MCk7Zm9yKHZhciBqPW5ldyBBcnJheShILzQpLEU9MCxtPXg7RTxqLmxlbmd0aDtFKyssbSs9NClqW0VdPSgiYmlnIj09PVQ/Yltt''@;'; put 'put ''XTw8MjR8YlttKzFdPDwxNnxiW20rMl08PDh8YlttKzNdOmJbbSszXTw8MjR8YlttKzJdPDwxNnxiW20rMV08PDh8YlttXSk+Pj4wO3JldHVybiBqfSxxLnNwbGl0MzI9ZnVuY3Rpb24gTChiLHgpe2Zvcih2YXIgQz1uZXcgQXJyYXkoNCpiLmxlbmd0aCksVD0wLEg9MDtUPGIubGVuZ3RoO1Qr''@;'; put 'put ''KyxIKz00KXt2YXIgaj1iW1RdOyJiaWciPT09eD8oQ1tIXT1qPj4+MjQsQ1tIKzFdPWo+Pj4xNiYyNTUsQ1tIKzJdPWo+Pj44JjI1NSxDW0grM109MjU1JmopOihDW0grM109aj4+PjI0LENbSCsyXT1qPj4+MTYmMjU1LENbSCsxXT1qPj4+OCYyNTUsQ1tIXT0yNTUmail9cmV0dXJuIEN9LHEu''@;'; put 'put ''cm90cjMyPWZ1bmN0aW9uIEsoYix4KXtyZXR1cm4gYj4+Pnh8Yjw8MzIteH0scS5yb3RsMzI9ZnVuY3Rpb24gVShiLHgpe3JldHVybiBiPDx4fGI+Pj4zMi14fSxxLnN1bTMyPWZ1bmN0aW9uIFcoYix4KXtyZXR1cm4gYit4Pj4+MH0scS5zdW0zMl8zPWZ1bmN0aW9uIFkoYix4LEMpe3JldHVy''@;'; put 'put ''biBiK3grQz4+PjB9LHEuc3VtMzJfND1mdW5jdGlvbiBYKGIseCxDLFQpe3JldHVybiBiK3grQytUPj4+MH0scS5zdW0zMl81PWZ1bmN0aW9uIGVlKGIseCxDLFQsSCl7cmV0dXJuIGIreCtDK1QrSD4+PjB9LHEuc3VtNjQ9ZnVuY3Rpb24gSihiLHgsQyxUKXt2YXIgRT1UK2JbeCsxXT4+PjA7''@;'; put 'put ''Ylt4XT0oRTxUPzE6MCkrQytiW3hdPj4+MCxiW3grMV09RX0scS5zdW02NF9oaT1mdW5jdGlvbiByZShiLHgsQyxUKXtyZXR1cm4oeCtUPj4+MDx4PzE6MCkrYitDPj4+MH0scS5zdW02NF9sbz1mdW5jdGlvbiBpZShiLHgsQyxUKXtyZXR1cm4geCtUPj4+MH0scS5zdW02NF80X2hpPWZ1bmN0''@;'; put 'put ''aW9uIGxlKGIseCxDLFQsSCxqLEUsbSl7dmFyIEE9MCxvZT14O3JldHVybiBBKz0ob2U9b2UrVD4+PjApPHg/MTowLEErPShvZT1vZStqPj4+MCk8aj8xOjAsYitDK0grRSsoQSs9KG9lPW9lK20+Pj4wKTxtPzE6MCk+Pj4wfSxxLnN1bTY0XzRfbG89ZnVuY3Rpb24gbWUoYix4LEMsVCxILGos''@;'; put 'put ''RSxtKXtyZXR1cm4geCtUK2orbT4+PjB9LHEuc3VtNjRfNV9oaT1mdW5jdGlvbiBfZShiLHgsQyxULEgsaixFLG0sQSxvZSl7dmFyIHRlPTAsc2U9eDtyZXR1cm4gdGUrPShzZT1zZStUPj4+MCk8eD8xOjAsdGUrPShzZT1zZStqPj4+MCk8aj8xOjAsdGUrPShzZT1zZSttPj4+MCk8bT8xOjAs''@;'; put 'put ''YitDK0grRStBKyh0ZSs9KHNlPXNlK29lPj4+MCk8b2U/MTowKT4+PjB9LHEuc3VtNjRfNV9sbz1mdW5jdGlvbiBUZShiLHgsQyxULEgsaixFLG0sQSxvZSl7cmV0dXJuIHgrVCtqK20rb2U+Pj4wfSxxLnJvdHI2NF9oaT1mdW5jdGlvbiBTZShiLHgsQyl7cmV0dXJuKHg8PDMyLUN8Yj4+PkMp''@;'; put 'put ''Pj4+MH0scS5yb3RyNjRfbG89ZnVuY3Rpb24gemUoYix4LEMpe3JldHVybihiPDwzMi1DfHg+Pj5DKT4+PjB9LHEuc2hyNjRfaGk9ZnVuY3Rpb24gVihiLHgsQyl7cmV0dXJuIGI+Pj5DfSxxLnNocjY0X2xvPWZ1bmN0aW9uIHAoYix4LEMpe3JldHVybihiPDwzMi1DfHg+Pj5DKT4+PjB9fSw4''@;'; put 'put ''ODI0Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLHk9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxnPV8oODYxMik7dWUuZXhwb3J0cz1nLmNhbGwoSSx5KX0sMjE1NjoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDM3''@;'; put 'put ''MTUpLHk9Xyg0NTA0KSxnPV8oOTc0Nik7ZnVuY3Rpb24gQih3KXtpZighKHRoaXMgaW5zdGFuY2VvZiBCKSlyZXR1cm4gbmV3IEIodyk7dGhpcy5oYXNoPXcuaGFzaCx0aGlzLnByZWRSZXNpc3Q9ISF3LnByZWRSZXNpc3QsdGhpcy5vdXRMZW49dGhpcy5oYXNoLm91dFNpemUsdGhpcy5taW5F''@;'; put 'put ''bnRyb3B5PXcubWluRW50cm9weXx8dGhpcy5oYXNoLmhtYWNTdHJlbmd0aCx0aGlzLl9yZXNlZWQ9bnVsbCx0aGlzLnJlc2VlZEludGVydmFsPW51bGwsdGhpcy5LPW51bGwsdGhpcy5WPW51bGw7dmFyIFA9eS50b0FycmF5KHcuZW50cm9weSx3LmVudHJvcHlFbmN8fCJoZXgiKSxGPXkudG9B''@;'; put 'put ''cnJheSh3Lm5vbmNlLHcubm9uY2VFbmN8fCJoZXgiKSxPPXkudG9BcnJheSh3LnBlcnMsdy5wZXJzRW5jfHwiaGV4Iik7ZyhQLmxlbmd0aD49dGhpcy5taW5FbnRyb3B5LzgsIk5vdCBlbm91Z2ggZW50cm9weS4gTWluaW11bSBpczogIit0aGlzLm1pbkVudHJvcHkrIiBiaXRzIiksdGhpcy5f''@;'; put 'put ''aW5pdChQLEYsTyl9dWUuZXhwb3J0cz1CLEIucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKFAsRixPKXt2YXIgej1QLmNvbmNhdChGKS5jb25jYXQoTyk7dGhpcy5LPW5ldyBBcnJheSh0aGlzLm91dExlbi84KSx0aGlzLlY9bmV3IEFycmF5KHRoaXMub3V0TGVuLzgpO2Zvcih2YXIgTj0wO048''@;'; put 'put ''dGhpcy5WLmxlbmd0aDtOKyspdGhpcy5LW05dPTAsdGhpcy5WW05dPTE7dGhpcy5fdXBkYXRlKHopLHRoaXMuX3Jlc2VlZD0xLHRoaXMucmVzZWVkSW50ZXJ2YWw9MjgxNDc0OTc2NzEwNjU2fSxCLnByb3RvdHlwZS5faG1hYz1mdW5jdGlvbigpe3JldHVybiBuZXcgSS5obWFjKHRoaXMuaGFz''@;'; put 'put ''aCx0aGlzLkspfSxCLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFApe3ZhciBGPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS51cGRhdGUoWzBdKTtQJiYoRj1GLnVwZGF0ZShQKSksdGhpcy5LPUYuZGlnZXN0KCksdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdl''@;'; put 'put ''c3QoKSxQJiYodGhpcy5LPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS51cGRhdGUoWzFdKS51cGRhdGUoUCkuZGlnZXN0KCksdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSl9LEIucHJvdG90eXBlLnJlc2VlZD1mdW5jdGlvbihQLEYsTyx6KXsic3RyaW5n''@;'; put 'put ''IiE9dHlwZW9mIEYmJih6PU8sTz1GLEY9bnVsbCksUD15LnRvQXJyYXkoUCxGKSxPPXkudG9BcnJheShPLHopLGcoUC5sZW5ndGg+PXRoaXMubWluRW50cm9weS84LCJOb3QgZW5vdWdoIGVudHJvcHkuIE1pbmltdW0gaXM6ICIrdGhpcy5taW5FbnRyb3B5KyIgYml0cyIpLHRoaXMuX3VwZGF0''@;'; put 'put ''ZShQLmNvbmNhdChPfHxbXSkpLHRoaXMuX3Jlc2VlZD0xfSxCLnByb3RvdHlwZS5nZW5lcmF0ZT1mdW5jdGlvbihQLEYsTyx6KXtpZih0aGlzLl9yZXNlZWQ+dGhpcy5yZXNlZWRJbnRlcnZhbCl0aHJvdyBuZXcgRXJyb3IoIlJlc2VlZCBpcyByZXF1aXJlZCIpOyJzdHJpbmciIT10eXBlb2Yg''@;'; put 'put ''RiYmKHo9TyxPPUYsRj1udWxsKSxPJiYoTz15LnRvQXJyYXkoTyx6fHwiaGV4IiksdGhpcy5fdXBkYXRlKE8pKTtmb3IodmFyIE49W107Ti5sZW5ndGg8UDspdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSxOPU4uY29uY2F0KHRoaXMuVik7dmFyIEw9Ti5zbGlj''@;'; put 'put ''ZSgwLFApO3JldHVybiB0aGlzLl91cGRhdGUoTyksdGhpcy5fcmVzZWVkKysseS5lbmNvZGUoTCxGKX19LDY0NToodWUscSk9PntxLnJlYWQ9ZnVuY3Rpb24oXyxJLHksZyxCKXt2YXIgdyxQLEY9OCpCLWctMSxPPSgxPDxGKS0xLHo9Tz4+MSxOPS03LEw9eT9CLTE6MCxLPXk/LTE6MSxVPV9b''@;'; put 'put ''SStMXTtmb3IoTCs9Syx3PVUmKDE8PC1OKS0xLFU+Pj0tTixOKz1GO04+MDt3PTI1Nip3K19bSStMXSxMKz1LLE4tPTgpO2ZvcihQPXcmKDE8PC1OKS0xLHc+Pj0tTixOKz1nO04+MDtQPTI1NipQK19bSStMXSxMKz1LLE4tPTgpO2lmKDA9PT13KXc9MS16O2Vsc2V7aWYodz09PU8pcmV0dXJu''@;'; put 'put ''IFA/TmFOOjEvMCooVT8tMToxKTtQKz1NYXRoLnBvdygyLGcpLHctPXp9cmV0dXJuKFU/LTE6MSkqUCpNYXRoLnBvdygyLHctZyl9LHEud3JpdGU9ZnVuY3Rpb24oXyxJLHksZyxCLHcpe3ZhciBQLEYsTyx6PTgqdy1CLTEsTj0oMTw8eiktMSxMPU4+PjEsSz0yMz09PUI/TWF0aC5wb3coMiwt''@;'; put 'put ''MjQpLU1hdGgucG93KDIsLTc3KTowLFU9Zz8wOnctMSxXPWc/MTotMSxZPUk8MHx8MD09PUkmJjEvSTwwPzE6MDtmb3IoST1NYXRoLmFicyhJKSxpc05hTihJKXx8ST09PTEvMD8oRj1pc05hTihJKT8xOjAsUD1OKTooUD1NYXRoLmZsb29yKE1hdGgubG9nKEkpL01hdGguTE4yKSxJKihPPU1h''@;'; put 'put ''dGgucG93KDIsLVApKTwxJiYoUC0tLE8qPTIpLChJKz1QK0w+PTE/Sy9POksqTWF0aC5wb3coMiwxLUwpKSpPPj0yJiYoUCsrLE8vPTIpLFArTD49Tj8oRj0wLFA9Tik6UCtMPj0xPyhGPShJKk8tMSkqTWF0aC5wb3coMixCKSxQKz1MKTooRj1JKk1hdGgucG93KDIsTC0xKSpNYXRoLnBvdygy''@;'; put 'put ''LEIpLFA9MCkpO0I+PTg7X1t5K1VdPTI1NSZGLFUrPVcsRi89MjU2LEItPTgpO2ZvcihQPVA8PEJ8Rix6Kz1CO3o+MDtfW3krVV09MjU1JlAsVSs9VyxQLz0yNTYsei09OCk7X1t5K1UtV118PTEyOCpZfX0sNTcxNzp1ZT0+e3VlLmV4cG9ydHM9ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5j''@;'; put 'put ''cmVhdGU/ZnVuY3Rpb24oXyxJKXtJJiYoXy5zdXBlcl89SSxfLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEkucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6XyxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSl9OmZ1bmN0aW9uKF8sSSl7aWYoSSl7Xy5z''@;'; put 'put ''dXBlcl89STt2YXIgeT1mdW5jdGlvbigpe307eS5wcm90b3R5cGU9SS5wcm90b3R5cGUsXy5wcm90b3R5cGU9bmV3IHksXy5wcm90b3R5cGUuY29uc3RydWN0b3I9X319fSwyNTg0Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNjQxMCkoKSxnPV8oNzM3OSkoIk9iamVjdC5wcm90''@;'; put 'put ''b3R5cGUudG9TdHJpbmciKSxCPWZ1bmN0aW9uKE8pe3JldHVybiEoSSYmTyYmIm9iamVjdCI9PXR5cGVvZiBPJiZTeW1ib2wudG9TdHJpbmdUYWcgaW4gTykmJiJbb2JqZWN0IEFyZ3VtZW50c10iPT09ZyhPKX0sdz1mdW5jdGlvbihPKXtyZXR1cm4hIUIoTyl8fG51bGwhPT1PJiYib2JqZWN0''@;'; put 'put ''Ij09dHlwZW9mIE8mJiJsZW5ndGgiaW4gTyYmIm51bWJlciI9PXR5cGVvZiBPLmxlbmd0aCYmTy5sZW5ndGg+PTAmJiJbb2JqZWN0IEFycmF5XSIhPT1nKE8pJiYiY2FsbGVlImluIE8mJiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1nKE8uY2FsbGVlKX0sUD1mdW5jdGlvbigpe3JldHVybiBCKGFy''@;'; put 'put ''Z3VtZW50cyl9KCk7Qi5pc0xlZ2FjeUFyZ3VtZW50cz13LHVlLmV4cG9ydHM9UD9COnd9LDUzMjA6dWU9PnsidXNlIHN0cmljdCI7dmFyIEkseSxxPUZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyxfPSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmbnVsbCE9PVJlZmxlY3QmJlJlZmxlY3Qu''@;'; put 'put ''YXBwbHk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIF8mJiJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkpdHJ5e0k9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJsZW5ndGgiLHtnZXQ6ZnVuY3Rpb24oKXt0aHJvdyB5fX0pLHk9e30sXyhmdW5jdGlvbigpe3Rocm93IDQy''@;'; put 'put ''fSxudWxsLEkpfWNhdGNoKGVlKXtlZSE9PXkmJihfPW51bGwpfWVsc2UgXz1udWxsO3ZhciBnPS9eXHMqY2xhc3NcYi8sQj1mdW5jdGlvbihKKXt0cnl7dmFyIHJlPXEuY2FsbChKKTtyZXR1cm4gZy50ZXN0KHJlKX1jYXRjaHtyZXR1cm4hMX19LHc9ZnVuY3Rpb24oSil7dHJ5e3JldHVybiFC''@;'; put 'put ''KEopJiYocS5jYWxsKEopLCEwKX1jYXRjaHtyZXR1cm4hMX19LFA9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxVPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiEhU3ltYm9sLnRvU3RyaW5nVGFnLFc9ISgwIGluWyxdKSxZPWZ1bmN0aW9uKCl7cmV0dXJuITF9O2lmKCJvYmplY3QiPT10''@;'; put 'put ''eXBlb2YgZG9jdW1lbnQpe3ZhciBYPWRvY3VtZW50LmFsbDtQLmNhbGwoWCk9PT1QLmNhbGwoZG9jdW1lbnQuYWxsKSYmKFk9ZnVuY3Rpb24oSil7aWYoKFd8fCFKKSYmKHR5cGVvZiBKPiJ1Inx8Im9iamVjdCI9PXR5cGVvZiBKKSl0cnl7dmFyIHJlPVAuY2FsbChKKTtyZXR1cm4oIltvYmpl''@;'; put 'put ''Y3QgSFRNTEFsbENvbGxlY3Rpb25dIj09PXJlfHwiW29iamVjdCBIVE1MIGRvY3VtZW50LmFsbCBjbGFzc10iPT09cmV8fCJbb2JqZWN0IEhUTUxDb2xsZWN0aW9uXSI9PT1yZXx8IltvYmplY3QgT2JqZWN0XSI9PT1yZSkmJm51bGw9PUooIiIpfWNhdGNoe31yZXR1cm4hMX0pfXVlLmV4cG9y''@;'; put 'put ''dHM9Xz9mdW5jdGlvbihKKXtpZihZKEopKXJldHVybiEwO2lmKCFKfHwiZnVuY3Rpb24iIT10eXBlb2YgSiYmIm9iamVjdCIhPXR5cGVvZiBKKXJldHVybiExO3RyeXtfKEosbnVsbCxJKX1jYXRjaChyZSl7aWYocmUhPT15KXJldHVybiExfXJldHVybiFCKEopJiZ3KEopfTpmdW5jdGlvbihK''@;'; put 'put ''KXtpZihZKEopKXJldHVybiEwO2lmKCFKfHwiZnVuY3Rpb24iIT10eXBlb2YgSiYmIm9iamVjdCIhPXR5cGVvZiBKKXJldHVybiExO2lmKFUpcmV0dXJuIHcoSik7aWYoQihKKSlyZXR1cm4hMTt2YXIgcmU9UC5jYWxsKEopO3JldHVybiEoIltvYmplY3QgRnVuY3Rpb25dIiE9PXJlJiYiW29i''@;'; put 'put ''amVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iIT09cmUmJiEvXlxbb2JqZWN0IEhUTUwvLnRlc3QocmUpKSYmdyhKKX19LDg2NjI6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIHosST1fKDczNzkpLGc9Xyg5MjQ2KSgvXlxzKig/OmZ1bmN0aW9uKT9cKi8pLEI9Xyg2NDEwKSgpLHc9XygxNjE4''@;'; put 'put ''KSxQPUkoIk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmciKSxGPUkoIkZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZyIpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oTCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEwpcmV0dXJuITE7aWYoZyhGKEwpKSlyZXR1cm4hMDtpZighQilyZXR1cm4iW29iamVj''@;'; put 'put ''dCBHZW5lcmF0b3JGdW5jdGlvbl0iPT09UChMKTtpZighdylyZXR1cm4hMTtpZih0eXBlb2Ygej4idSIpe3ZhciBVPWZ1bmN0aW9uKCl7aWYoIUIpcmV0dXJuITE7dHJ5e3JldHVybiBGdW5jdGlvbigicmV0dXJuIGZ1bmN0aW9uKigpIHt9IikoKX1jYXRjaHt9fSgpO3o9ISFVJiZ3KFUpfXJl''@;'; put 'put ''dHVybiB3KEwpPT09en19LDg2MTE6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1mdW5jdGlvbihfKXtyZXR1cm4gXyE9X319LDM2MDoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDU1NTkpLHk9Xyg0Mjg5KSxnPV8oODYxMSksQj1fKDk0MTUpLHc9XygzMTk0KSxQPUkoQigp''@;'; put 'put ''LE51bWJlcik7eShQLHtnZXRQb2x5ZmlsbDpCLGltcGxlbWVudGF0aW9uOmcsc2hpbTp3fSksdWUuZXhwb3J0cz1QfSw5NDE1Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oODYxMSk7dWUuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiBOdW1iZXIuaXNOYU4mJk51bWJlci5pc05h''@;'; put 'put ''TihOYU4pJiYhTnVtYmVyLmlzTmFOKCJhIik/TnVtYmVyLmlzTmFOOkl9fSwzMTk0Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNDI4OSkseT1fKDk0MTUpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgQj15KCk7cmV0dXJuIEkoTnVtYmVyLHtpc05hTjpCfSx7aXNOYU46ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gTnVtYmVyLmlzTmFOIT09Qn19KSxCfX0sODQyMDoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgdyxJPV8oNzM3OSkseT1fKDY0MTApKCksZz1fKDg4MjQpLEI9Xyg3Mjk2KTtpZih5KXt2YXIgUD1JKCJSZWdFeHAucHJvdG90eXBlLmV4ZWMiKSxGPXt9LE89ZnVu''@;'; put 'put ''Y3Rpb24oKXt0aHJvdyBGfSx6PXt0b1N0cmluZzpPLHZhbHVlT2Y6T307InN5bWJvbCI9PXR5cGVvZiBTeW1ib2wudG9QcmltaXRpdmUmJih6W1N5bWJvbC50b1ByaW1pdGl2ZV09Tyksdz1mdW5jdGlvbihVKXtpZighVXx8Im9iamVjdCIhPXR5cGVvZiBVKXJldHVybiExO3ZhciBXPUIoVSwi''@;'; put 'put ''bGFzdEluZGV4Iik7aWYoIVd8fCFnKFcsInZhbHVlIikpcmV0dXJuITE7dHJ5e1AoVSx6KX1jYXRjaChYKXtyZXR1cm4gWD09PUZ9fX1lbHNle3ZhciBOPUkoIk9iamVjdC5wcm90b3R5cGUudG9TdHJpbmciKTt3PWZ1bmN0aW9uKFUpe3JldHVybiEoIVV8fCJvYmplY3QiIT10eXBlb2YgVSYm''@;'; put 'put ''ImZ1bmN0aW9uIiE9dHlwZW9mIFUpJiYiW29iamVjdCBSZWdFeHBdIj09PU4oVSl9fXVlLmV4cG9ydHM9d30sNTY5MjoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDY0MzApO3VlLmV4cG9ydHM9ZnVuY3Rpb24oZyl7cmV0dXJuISFJKGcpfX0sNTgyNjp1ZT0+e3ZhciBxPXt9LnRv''@;'; put 'put ''U3RyaW5nO3VlLmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oXyl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09cS5jYWxsKF8pfX0sNjgxMzoodWUscSxfKT0+e2xldCBJO3RyeXtJPV8oNzcpfWNhdGNoe0k9Xyg0MTI5KX1jb25zdCB5PV8oODk4MSkse3N0cmluZ2lmeTpnLHN0cmlw''@;'; put 'put ''Qm9tOkJ9PV8oNjc4MCk7ZnVuY3Rpb24gUCgpe3JldHVybihQPV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihXLFk9e30peyJzdHJpbmciPT10eXBlb2YgWSYmKFk9e2VuY29kaW5nOll9KTtjb25zdCBYPVkuZnN8fEksZWU9ISgidGhyb3dzImluIFkpfHxZLnRocm93cztsZXQgcmUsSj15''@;'; put 'put ''aWVsZCB5LmZyb21DYWxsYmFjayhYLnJlYWRGaWxlKShXLFkpO0o9QihKKTt0cnl7cmU9SlNPTi5wYXJzZShKLFk/WS5yZXZpdmVyOm51bGwpfWNhdGNoKGllKXtpZihlZSl0aHJvdyBpZS5tZXNzYWdlPWAke1d9OiAke2llLm1lc3NhZ2V9YCxpZTtyZXR1cm4gbnVsbH1yZXR1cm4gcmV9KSku''@;'; put 'put ''YXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IEY9eS5mcm9tUHJvbWlzZShmdW5jdGlvbiB3KFcpe3JldHVybiBQLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pO2Z1bmN0aW9uIE4oKXtyZXR1cm4oTj1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVyxZLFg9e30pe2NvbnN0IGVlPVguZnN8''@;'; put 'put ''fEksSj1nKFksWCk7eWllbGQgeS5mcm9tQ2FsbGJhY2soZWUud3JpdGVGaWxlKShXLEosWCl9KSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWNvbnN0IEw9eS5mcm9tUHJvbWlzZShmdW5jdGlvbiB6KFcsWSl7cmV0dXJuIE4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSk7dWUuZXhwb3J0cz17cmVh''@;'; put 'put ''ZEZpbGU6RixyZWFkRmlsZVN5bmM6ZnVuY3Rpb24gTyhXLFk9e30peyJzdHJpbmciPT10eXBlb2YgWSYmKFk9e2VuY29kaW5nOll9KTtjb25zdCBYPVkuZnN8fEksZWU9ISgidGhyb3dzImluIFkpfHxZLnRocm93czt0cnl7bGV0IEo9WC5yZWFkRmlsZVN5bmMoVyxZKTtyZXR1cm4gSj1CKEop''@;'; put 'put ''LEpTT04ucGFyc2UoSixZLnJldml2ZXIpfWNhdGNoKEope2lmKGVlKXRocm93IEoubWVzc2FnZT1gJHtXfTogJHtKLm1lc3NhZ2V9YCxKO3JldHVybiBudWxsfX0sd3JpdGVGaWxlOkwsd3JpdGVGaWxlU3luYzpmdW5jdGlvbiBLKFcsWSxYPXt9KXtjb25zdCBlZT1YLmZzfHxJLEo9ZyhZLFgp''@;'; put 'put ''O3JldHVybiBlZS53cml0ZUZpbGVTeW5jKFcsSixYKX19fSw2NzgwOih1ZSxxLF8pPT57dmFyIEk9Xyg4NzY0KS5CdWZmZXI7dWUuZXhwb3J0cz17c3RyaW5naWZ5OmZ1bmN0aW9uIHkoQix7RU9MOnc9IlxuIixmaW5hbEVPTDpQPSEwLHJlcGxhY2VyOkY9bnVsbCxzcGFjZXM6T309e30pe2Nv''@;'; put 'put ''bnN0IHo9UD93OiIiO3JldHVybiBKU09OLnN0cmluZ2lmeShCLEYsTykucmVwbGFjZSgvXG4vZyx3KSt6fSxzdHJpcEJvbTpmdW5jdGlvbiBnKEIpe3JldHVybiBJLmlzQnVmZmVyKEIpJiYoQj1CLnRvU3RyaW5nKCJ1dGY4IikpLEIucmVwbGFjZSgvXlx1RkVGRi8sIiIpfX19LDYyNDU6KHVl''@;'; put 'put ''LHEsXyk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSShGKXt0aGlzLm1lc3NhZ2U9Rn1fLnIocSksXy5kKHEse0ludmFsaWRUb2tlbkVycm9yOigpPT5CLGRlZmF1bHQ6KCk9PlB9KSwoSS5wcm90b3R5cGU9bmV3IEVycm9yKS5uYW1lPSJJbnZhbGlkQ2hhcmFjdGVyRXJyb3IiO3ZhciB5PXR5''@;'; put 'put ''cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuYXRvYiYmd2luZG93LmF0b2IuYmluZCh3aW5kb3cpfHxmdW5jdGlvbihGKXt2YXIgTz1TdHJpbmcoRikucmVwbGFjZSgvPSskLywiIik7aWYoTy5sZW5ndGglND09MSl0aHJvdyBuZXcgSSgiJ2F0b2InIGZhaWxlZDogVGhlIHN0cmluZyB0byBiZSBk''@;'; put 'put ''ZWNvZGVkIGlzIG5vdCBjb3JyZWN0bHkgZW5jb2RlZC4iKTtmb3IodmFyIHosTixMPTAsSz0wLFU9IiI7Tj1PLmNoYXJBdChLKyspO35OJiYoej1MJTQ/NjQqeitOOk4sTCsrJTQpP1UrPVN0cmluZy5mcm9tQ2hhckNvZGUoMjU1Jno+PigtMipMJjYpKTowKU49IkFCQ0RFRkdISUpLTE1OT1BR''@;'; put 'put ''UlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Ii5pbmRleE9mKE4pO3JldHVybiBVfTtmdW5jdGlvbiBCKEYpe3RoaXMubWVzc2FnZT1GfShCLnByb3RvdHlwZT1uZXcgRXJyb3IpLm5hbWU9IkludmFsaWRUb2tlbkVycm9yIjtjb25zdCBQPWZ1bmN0aW9u''@;'; put 'put ''IHcoRixPKXtpZigic3RyaW5nIiE9dHlwZW9mIEYpdGhyb3cgbmV3IEIoIkludmFsaWQgdG9rZW4gc3BlY2lmaWVkIik7dmFyIHo9ITA9PT0oTz1PfHx7fSkuaGVhZGVyPzA6MTt0cnl7cmV0dXJuIEpTT04ucGFyc2UoZnVuY3Rpb24gZyhGKXt2YXIgTz1GLnJlcGxhY2UoLy0vZywiKyIpLnJl''@;'; put 'put ''cGxhY2UoL18vZywiLyIpO3N3aXRjaChPLmxlbmd0aCU0KXtjYXNlIDA6YnJlYWs7Y2FzZSAyOk8rPSI9PSI7YnJlYWs7Y2FzZSAzOk8rPSI9IjticmVhaztkZWZhdWx0OnRocm93IklsbGVnYWwgYmFzZTY0dXJsIHN0cmluZyEifXRyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHkoTyku''@;'; put 'put ''cmVwbGFjZSgvKC4pL2csZnVuY3Rpb24oTixMKXt2YXIgSz1MLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7cmV0dXJuIEsubGVuZ3RoPDImJihLPSIwIitLKSwiJSIrS30pKX1jYXRjaHtyZXR1cm4geShPKX19KEYuc3BsaXQoIi4iKVt6XSkpfWNhdGNoKE4pe3Ro''@;'; put 'put ''cm93IG5ldyBCKCJJbnZhbGlkIHRva2VuIHNwZWNpZmllZDogIitOLm1lc3NhZ2UpfX19LDE2NTg6KHVlLHEsXyk9Pnt2YXIgZz0vW1xcXiQuKis/KClbXF17fXxdL2csQj1SZWdFeHAoZy5zb3VyY2UpLFA9Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVj''@;'; put 'put ''dCYmc2VsZixGPSJvYmplY3QiPT10eXBlb2YgXy5nJiZfLmcmJl8uZy5PYmplY3Q9PT1PYmplY3QmJl8uZ3x8UHx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSx6PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsTj1GLlN5bWJvbCxMPU4/Ti5wcm90b3R5cGU6dm9pZCAwLEs9TD9MLnRvU3Ry''@;'; put 'put ''aW5nOnZvaWQgMDt1ZS5leHBvcnRzPWZ1bmN0aW9uIGVlKEope3JldHVybihKPWZ1bmN0aW9uIFgoSil7cmV0dXJuIG51bGw9PUo/IiI6ZnVuY3Rpb24gVShKKXtpZigic3RyaW5nIj09dHlwZW9mIEopcmV0dXJuIEo7aWYoZnVuY3Rpb24gWShKKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIEp8''@;'; put 'put ''fGZ1bmN0aW9uIFcoSil7cmV0dXJuISFKJiYib2JqZWN0Ij09dHlwZW9mIEp9KEopJiYiW29iamVjdCBTeW1ib2xdIj09ei5jYWxsKEopfShKKSlyZXR1cm4gSz9LLmNhbGwoSik6IiI7dmFyIHJlPUorIiI7cmV0dXJuIjAiPT1yZSYmMS9KPT0tMS8wPyItMCI6cmV9KEopfShKKSkmJkIudGVz''@;'; put 'put ''dChKKT9KLnJlcGxhY2UoZywiXFwkJiIpOkp9fSw4MDk0OnVlPT57dmFyIEk9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzt1ZS5leHBvcnRzPWZ1bmN0aW9uIHkoQil7cmV0dXJuITA9PT1CfHwhMT09PUJ8fGZ1bmN0aW9uIGcoQil7cmV0dXJuISFCJiYib2JqZWN0Ij09dHlwZW9mIEJ9KEIp''@;'; put 'put ''JiYiW29iamVjdCBCb29sZWFuXSI9PUkuY2FsbChCKX19LDIzMDc6KHVlLHEsXyk9Pnt1ZT1fLm5tZCh1ZSk7dmFyIHk9Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iLGc9MSxCPTIsdz05MDA3MTk5MjU0NzQwOTkxLFA9IltvYmplY3QgQXJndW1lbnRzXSIsRj0iW29iamVjdCBBcnJheV0i''@;'; put 'put ''LE89IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iLHo9IltvYmplY3QgQm9vbGVhbl0iLE49IltvYmplY3QgRGF0ZV0iLEw9IltvYmplY3QgRXJyb3JdIixLPSJbb2JqZWN0IEZ1bmN0aW9uXSIsVT0iW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0iLFc9IltvYmplY3QgTWFwXSIsWT0iW29iamVj''@;'; put 'put ''dCBOdW1iZXJdIixYPSJbb2JqZWN0IE51bGxdIixlZT0iW29iamVjdCBPYmplY3RdIixKPSJbb2JqZWN0IFByb21pc2VdIixyZT0iW29iamVjdCBQcm94eV0iLGllPSJbb2JqZWN0IFJlZ0V4cF0iLGxlPSJbb2JqZWN0IFNldF0iLG1lPSJbb2JqZWN0IFN0cmluZ10iLFRlPSJbb2JqZWN0IFVu''@;'; put 'put ''ZGVmaW5lZF0iLFNlPSJbb2JqZWN0IFdlYWtNYXBdIix6ZT0iW29iamVjdCBBcnJheUJ1ZmZlcl0iLFY9IltvYmplY3QgRGF0YVZpZXddIixvZT0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyx0ZT0vXig/OjB8WzEtOV1cZCopJC8sc2U9e307c2VbIltvYmplY3QgRmxvYXQzMkFycmF5''@;'; put 'put ''XSJdPXNlWyJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXT1zZVsiW29iamVjdCBJbnQ4QXJyYXldIl09c2VbIltvYmplY3QgSW50MTZBcnJheV0iXT1zZVsiW29iamVjdCBJbnQzMkFycmF5XSJdPXNlWyJbb2JqZWN0IFVpbnQ4QXJyYXldIl09c2VbIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXld''@;'; put 'put ''Il09c2VbIltvYmplY3QgVWludDE2QXJyYXldIl09c2VbIltvYmplY3QgVWludDMyQXJyYXldIl09ITAsc2VbUF09c2VbRl09c2VbemVdPXNlW3pdPXNlW1ZdPXNlW05dPXNlW0xdPXNlW0tdPXNlW1ddPXNlW1ldPXNlW2VlXT1zZVtpZV09c2VbbGVdPXNlW21lXT1zZVtTZV09ITE7dmFyIHdl''@;'; put 'put ''PSJvYmplY3QiPT10eXBlb2YgXy5nJiZfLmcmJl8uZy5PYmplY3Q9PT1PYmplY3QmJl8uZyxVZT0ib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYmJnNlbGYuT2JqZWN0PT09T2JqZWN0JiZzZWxmLEplPXdlfHxVZXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxhdD1xJiYhcS5ub2RlVHlw''@;'; put 'put ''ZSYmcSxNZT1hdCYmdWUmJiF1ZS5ub2RlVHlwZSYmdWUsdmU9TWUmJk1lLmV4cG9ydHM9PT1hdCxYZT12ZSYmd2UucHJvY2VzcyxqZT1mdW5jdGlvbigpe3RyeXtyZXR1cm4gWGUmJlhlLmJpbmRpbmcmJlhlLmJpbmRpbmcoInV0aWwiKX1jYXRjaHt9fSgpLERlPWplJiZqZS5pc1R5cGVkQXJy''@;'; put 'put ''YXk7ZnVuY3Rpb24gSWUoQW4sYW4pe2Zvcih2YXIgZ2k9LTEsQXI9bnVsbD09QW4/MDpBbi5sZW5ndGg7KytnaTxBcjspaWYoYW4oQW5bZ2ldLGdpLEFuKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBBZShBbixhbil7cmV0dXJuIEFuLmhhcyhhbil9ZnVuY3Rpb24gcnQoQW4pe3ZhciBh''@;'; put 'put ''bj0tMSxnaT1BcnJheShBbi5zaXplKTtyZXR1cm4gQW4uZm9yRWFjaChmdW5jdGlvbihBcixPYSl7Z2lbKythbl09W09hLEFyXX0pLGdpfWZ1bmN0aW9uIGRuKEFuKXt2YXIgYW49LTEsZ2k9QXJyYXkoQW4uc2l6ZSk7cmV0dXJuIEFuLmZvckVhY2goZnVuY3Rpb24oQXIpe2dpWysrYW5dPUFy''@;'; put 'put ''fSksZ2l9dmFyIEFuLHl0PUFycmF5LnByb3RvdHlwZSxEdD1PYmplY3QucHJvdG90eXBlLGl0PUplWyJfX2NvcmUtanNfc2hhcmVkX18iXSwkZT1GdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcsdHQ9RHQuaGFzT3duUHJvcGVydHksSGU9KEFuPS9bXi5dKyQvLmV4ZWMoaXQmJml0LmtleXMm''@;'; put 'put ''Jml0LmtleXMuSUVfUFJPVE98fCIiKSk/IlN5bWJvbChzcmMpXzEuIitBbjoiIixkdD1EdC50b1N0cmluZyxxdD1SZWdFeHAoIl4iKyRlLmNhbGwodHQpLnJlcGxhY2UoL1tcXF4kLiorPygpW1xde318XS9nLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/''@;'; put 'put ''PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpLFJ0PXZlP0plLkJ1ZmZlcjp2b2lkIDAsUHQ9SmUuU3ltYm9sLGFpPUplLlVpbnQ4QXJyYXksUXQ9RHQucHJvcGVydHlJc0VudW1lcmFibGUsc249eXQuc3BsaWNlLFJpPVB0P1B0LnRvU3RyaW5nVGFnOnZvaWQgMCxmbj1P''@;'; put 'put ''YmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGZ0PVJ0P1J0LmlzQnVmZmVyOnZvaWQgMCxQcj1mdW5jdGlvbiBRZShBbixhbil7cmV0dXJuIGZ1bmN0aW9uKGdpKXtyZXR1cm4gQW4oYW4oZ2kpKX19KE9iamVjdC5rZXlzLE9iamVjdCksWnQ9amgoSmUsIkRhdGFWaWV3IiksQXQ9amgoSmUs''@;'; put 'put ''Ik1hcCIpLExuPWpoKEplLCJQcm9taXNlIiksc3Q9amgoSmUsIlNldCIpLHp0PWpoKEplLCJXZWFrTWFwIiksbmk9amgoT2JqZWN0LCJjcmVhdGUiKSxXZT1SbChadCksVHQ9UmwoQXQpLHJyPVJsKExuKSxodD1SbChzdCkseHQ9UmwoenQpLEJuPVB0P1B0LnByb3RvdHlwZTp2b2lkIDAsb249''@;'; put 'put ''Qm4/Qm4udmFsdWVPZjp2b2lkIDA7ZnVuY3Rpb24ganQoQW4pe3ZhciBhbj0tMSxnaT1udWxsPT1Bbj8wOkFuLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrYW48Z2k7KXt2YXIgQXI9QW5bYW5dO3RoaXMuc2V0KEFyWzBdLEFyWzFdKX19ZnVuY3Rpb24gZW4oQW4pe3ZhciBhbj0tMSxnaT1u''@;'; put 'put ''dWxsPT1Bbj8wOkFuLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrYW48Z2k7KXt2YXIgQXI9QW5bYW5dO3RoaXMuc2V0KEFyWzBdLEFyWzFdKX19ZnVuY3Rpb24gUXIoQW4pe3ZhciBhbj0tMSxnaT1udWxsPT1Bbj8wOkFuLmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrYW48Z2k7KXt2YXIg''@;'; put 'put ''QXI9QW5bYW5dO3RoaXMuc2V0KEFyWzBdLEFyWzFdKX19ZnVuY3Rpb24gWWkoQW4pe3ZhciBhbj0tMSxnaT1udWxsPT1Bbj8wOkFuLmxlbmd0aDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgUXI7KythbjxnaTspdGhpcy5hZGQoQW5bYW5dKX1mdW5jdGlvbiBjbyhBbil7dmFyIGFuPXRoaXMuX19k''@;'; put 'put ''YXRhX189bmV3IGVuKEFuKTt0aGlzLnNpemU9YW4uc2l6ZX1mdW5jdGlvbiBtbChBbixhbil7Zm9yKHZhciBnaT1Bbi5sZW5ndGg7Z2ktLTspaWYobmYoQW5bZ2ldWzBdLGFuKSlyZXR1cm4gZ2k7cmV0dXJuLTF9ZnVuY3Rpb24gUmMoQW4pe3JldHVybiBudWxsPT1Bbj92b2lkIDA9PT1Bbj9U''@;'; put 'put ''ZTpYOlJpJiZSaSBpbiBPYmplY3QoQW4pP2Z1bmN0aW9uIHRmKEFuKXt2YXIgYW49dHQuY2FsbChBbixSaSksZ2k9QW5bUmldO3RyeXtBbltSaV09dm9pZCAwO3ZhciBBcj0hMH1jYXRjaHt9dmFyIE9hPWR0LmNhbGwoQW4pO3JldHVybiBBciYmKGFuP0FuW1JpXT1naTpkZWxldGUgQW5bUmld''@;'; put 'put ''KSxPYX0oQW4pOmZ1bmN0aW9uIGU1KEFuKXtyZXR1cm4gZHQuY2FsbChBbil9KEFuKX1mdW5jdGlvbiBEMChBbil7cmV0dXJuIFZvKEFuKSYmUmMoQW4pPT1QfWZ1bmN0aW9uIG9yKEFuLGFuLGdpLEFyLE9hKXtyZXR1cm4gQW49PT1hbnx8KG51bGw9PUFufHxudWxsPT1hbnx8IVZvKEFuKSYm''@;'; put 'put ''IVZvKGFuKT9BbiE9QW4mJmFuIT1hbjpmdW5jdGlvbiB4byhBbixhbixnaSxBcixPYSxlYSl7dmFyIGlsPXJmKEFuKSx6YT1yZihhbiksVnM9aWw/RjpHaShBbiksQ3M9emE/RjpHaShhbiksTmw9KFZzPVZzPT1QP2VlOlZzKT09ZWUsSGE9KENzPUNzPT1QP2VlOkNzKT09ZWUsa2E9VnM9PUNz''@;'; put 'put ''O2lmKGthJiZhZihBbikpe2lmKCFhZihhbikpcmV0dXJuITE7aWw9ITAsTmw9ITF9aWYoa2EmJiFObClyZXR1cm4gZWF8fChlYT1uZXcgY28pLGlsfHx4MyhBbik/YjAoQW4sYW4sZ2ksQXIsT2EsZWEpOmZ1bmN0aW9uIE5vKEFuLGFuLGdpLEFyLE9hLGVhLGlsKXtzd2l0Y2goZ2kpe2Nhc2Ug''@;'; put 'put ''VjppZihBbi5ieXRlTGVuZ3RoIT1hbi5ieXRlTGVuZ3RofHxBbi5ieXRlT2Zmc2V0IT1hbi5ieXRlT2Zmc2V0KXJldHVybiExO0FuPUFuLmJ1ZmZlcixhbj1hbi5idWZmZXI7Y2FzZSB6ZTpyZXR1cm4hKEFuLmJ5dGVMZW5ndGghPWFuLmJ5dGVMZW5ndGh8fCFlYShuZXcgYWkoQW4pLG5ldyBh''@;'; put 'put ''aShhbikpKTtjYXNlIHo6Y2FzZSBOOmNhc2UgWTpyZXR1cm4gbmYoK0FuLCthbik7Y2FzZSBMOnJldHVybiBBbi5uYW1lPT1hbi5uYW1lJiZBbi5tZXNzYWdlPT1hbi5tZXNzYWdlO2Nhc2UgaWU6Y2FzZSBtZTpyZXR1cm4gQW49PWFuKyIiO2Nhc2UgVzp2YXIgemE9cnQ7Y2FzZSBsZTppZih6''@;'; put 'put ''YXx8KHphPWRuKSxBbi5zaXplIT1hbi5zaXplJiYhKEFyJmcpKXJldHVybiExO3ZhciBDcz1pbC5nZXQoQW4pO2lmKENzKXJldHVybiBDcz09YW47QXJ8PUIsaWwuc2V0KEFuLGFuKTt2YXIgTmw9YjAoemEoQW4pLHphKGFuKSxBcixPYSxlYSxpbCk7cmV0dXJuIGlsLmRlbGV0ZShBbiksTmw7''@;'; put 'put ''Y2FzZSJbb2JqZWN0IFN5bWJvbF0iOmlmKG9uKXJldHVybiBvbi5jYWxsKEFuKT09b24uY2FsbChhbil9cmV0dXJuITF9KEFuLGFuLFZzLGdpLEFyLE9hLGVhKTtpZighKGdpJmcpKXt2YXIgU3Q9TmwmJnR0LmNhbGwoQW4sIl9fd3JhcHBlZF9fIiksVnQ9SGEmJnR0LmNhbGwoYW4sIl9fd3Jh''@;'; put 'put ''cHBlZF9fIik7aWYoU3R8fFZ0KXt2YXIgX249U3Q/QW4udmFsdWUoKTpBbix2bj1WdD9hbi52YWx1ZSgpOmFuO3JldHVybiBlYXx8KGVhPW5ldyBjbyksT2EoX24sdm4sZ2ksQXIsZWEpfX1yZXR1cm4hIWthJiYoZWF8fChlYT1uZXcgY28pLGZ1bmN0aW9uIFJ1KEFuLGFuLGdpLEFyLE9hLGVh''@;'; put 'put ''KXt2YXIgaWw9Z2kmZyx6YT1GcihBbiksVnM9emEubGVuZ3RoO2lmKFZzIT1GcihhbikubGVuZ3RoJiYhaWwpcmV0dXJuITE7Zm9yKHZhciBIYT1WcztIYS0tOyl7dmFyIGthPXphW0hhXTtpZighKGlsP2thIGluIGFuOnR0LmNhbGwoYW4sa2EpKSlyZXR1cm4hMX12YXIgU3Q9ZWEuZ2V0KEFu''@;'; put 'put ''KTtpZihTdCYmZWEuZ2V0KGFuKSlyZXR1cm4gU3Q9PWFuO3ZhciBWdD0hMDtlYS5zZXQoQW4sYW4pLGVhLnNldChhbixBbik7Zm9yKHZhciBfbj1pbDsrK0hhPFZzOyl7dmFyIHZuPUFuW2thPXphW0hhXV0sUm49YW5ba2FdO2lmKEFyKXZhciBibj1pbD9BcihSbix2bixrYSxhbixBbixlYSk6''@;'; put 'put ''QXIodm4sUm4sa2EsQW4sYW4sZWEpO2lmKCEodm9pZCAwPT09Ym4/dm49PT1Sbnx8T2Eodm4sUm4sZ2ksQXIsZWEpOmJuKSl7VnQ9ITE7YnJlYWt9X258fChfbj0iY29uc3RydWN0b3IiPT1rYSl9aWYoVnQmJiFfbil7dmFyIGNyPUFuLmNvbnN0cnVjdG9yLG1pPWFuLmNvbnN0cnVjdG9yO2Ny''@;'; put 'put ''IT1taSYmImNvbnN0cnVjdG9yImluIEFuJiYiY29uc3RydWN0b3IiaW4gYW4mJiEoImZ1bmN0aW9uIj09dHlwZW9mIGNyJiZjciBpbnN0YW5jZW9mIGNyJiYiZnVuY3Rpb24iPT10eXBlb2YgbWkmJm1pIGluc3RhbmNlb2YgbWkpJiYoVnQ9ITEpfXJldHVybiBlYS5kZWxldGUoQW4pLGVhLmRl''@;'; put 'put ''bGV0ZShhbiksVnR9KEFuLGFuLGdpLEFyLE9hLGVhKSl9KEFuLGFuLGdpLEFyLG9yLE9hKSl9ZnVuY3Rpb24gYjAoQW4sYW4sZ2ksQXIsT2EsZWEpe3ZhciBpbD1naSZnLHphPUFuLmxlbmd0aCxWcz1hbi5sZW5ndGg7aWYoemEhPVZzJiYhKGlsJiZWcz56YSkpcmV0dXJuITE7dmFyIENzPWVh''@;'; put 'put ''LmdldChBbik7aWYoQ3MmJmVhLmdldChhbikpcmV0dXJuIENzPT1hbjt2YXIgTmw9LTEsSGE9ITAsa2E9Z2kmQj9uZXcgWWk6dm9pZCAwO2ZvcihlYS5zZXQoQW4sYW4pLGVhLnNldChhbixBbik7KytObDx6YTspe3ZhciBTdD1BbltObF0sVnQ9YW5bTmxdO2lmKEFyKXZhciBfbj1pbD9BcihW''@;'; put 'put ''dCxTdCxObCxhbixBbixlYSk6QXIoU3QsVnQsTmwsQW4sYW4sZWEpO2lmKHZvaWQgMCE9PV9uKXtpZihfbiljb250aW51ZTtIYT0hMTticmVha31pZihrYSl7aWYoIUllKGFuLGZ1bmN0aW9uKHZuLFJuKXtpZighQWUoa2EsUm4pJiYoU3Q9PT12bnx8T2EoU3Qsdm4sZ2ksQXIsZWEpKSlyZXR1''@;'; put 'put ''cm4ga2EucHVzaChSbil9KSl7SGE9ITE7YnJlYWt9fWVsc2UgaWYoU3QhPT1WdCYmIU9hKFN0LFZ0LGdpLEFyLGVhKSl7SGE9ITE7YnJlYWt9fXJldHVybiBlYS5kZWxldGUoQW4pLGVhLmRlbGV0ZShhbiksSGF9ZnVuY3Rpb24gRnIoQW4pe3JldHVybiBmdW5jdGlvbiBmdShBbixhbixnaSl7''@;'; put 'put ''dmFyIEFyPWFuKEFuKTtyZXR1cm4gcmYoQW4pP0FyOmZ1bmN0aW9uIFJlKEFuLGFuKXtmb3IodmFyIGdpPS0xLEFyPWFuLmxlbmd0aCxPYT1Bbi5sZW5ndGg7KytnaTxBcjspQW5bT2ErZ2ldPWFuW2dpXTtyZXR1cm4gQW59KEFyLGdpKEFuKSl9KEFuLFVoLGtzKX1mdW5jdGlvbiBhZChBbixh''@;'; put 'put ''bil7dmFyIGdpPUFuLl9fZGF0YV9fO3JldHVybiBmdW5jdGlvbiBKYyhBbil7dmFyIGFuPXR5cGVvZiBBbjtyZXR1cm4ic3RyaW5nIj09YW58fCJudW1iZXIiPT1hbnx8InN5bWJvbCI9PWFufHwiYm9vbGVhbiI9PWFuPyJfX3Byb3RvX18iIT09QW46bnVsbD09PUFufShhbik/Z2lbInN0cmlu''@;'; put 'put ''ZyI9PXR5cGVvZiBhbj8ic3RyaW5nIjoiaGFzaCJdOmdpLm1hcH1mdW5jdGlvbiBqaChBbixhbil7dmFyIGdpPWZ1bmN0aW9uIF90KEFuLGFuKXtyZXR1cm4gQW4/Llthbl19KEFuLGFuKTtyZXR1cm4gZnVuY3Rpb24gc2koQW4pe3JldHVybiEoIUxjKEFuKXx8ZnVuY3Rpb24gUWcoQW4pe3Jl''@;'; put 'put ''dHVybiEhSGUmJkhlIGluIEFufShBbikpJiYoc2YoQW4pP3F0Om9lKS50ZXN0KFJsKEFuKSl9KGdpKT9naTp2b2lkIDB9anQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uIGRpKCl7dGhpcy5fX2RhdGFfXz1uaT9uaShudWxsKTp7fSx0aGlzLnNpemU9MH0sanQucHJvdG90eXBlLmRlbGV0ZT1m''@;'; put 'put ''dW5jdGlvbiBjbihBbil7dmFyIGFuPXRoaXMuaGFzKEFuKSYmZGVsZXRlIHRoaXMuX19kYXRhX19bQW5dO3JldHVybiB0aGlzLnNpemUtPWFuPzE6MCxhbn0sanQucHJvdG90eXBlLmdldD1mdW5jdGlvbiBwbihBbil7dmFyIGFuPXRoaXMuX19kYXRhX187aWYobmkpe3ZhciBnaT1hbltBbl07''@;'; put 'put ''cmV0dXJuIGdpPT09eT92b2lkIDA6Z2l9cmV0dXJuIHR0LmNhbGwoYW4sQW4pP2FuW0FuXTp2b2lkIDB9LGp0LnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gSWkoQW4pe3ZhciBhbj10aGlzLl9fZGF0YV9fO3JldHVybiBuaT92b2lkIDAhPT1hbltBbl06dHQuY2FsbChhbixBbil9LGp0LnByb3Rv''@;'; put 'put ''dHlwZS5zZXQ9ZnVuY3Rpb24gWHQoQW4sYW4pe3ZhciBnaT10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKEFuKT8wOjEsZ2lbQW5dPW5pJiZ2b2lkIDA9PT1hbj95OmFuLHRoaXN9LGVuLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBobygpe3RoaXMuX19kYXRhX189''@;'; put 'put ''W10sdGhpcy5zaXplPTB9LGVuLnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24gTWkoQW4pe3ZhciBhbj10aGlzLl9fZGF0YV9fLGdpPW1sKGFuLEFuKTtyZXR1cm4hKGdpPDB8fChnaT09YW4ubGVuZ3RoLTE/YW4ucG9wKCk6c24uY2FsbChhbixnaSwxKSwtLXRoaXMuc2l6ZSwwKSl9LGVuLnBy''@;'; put 'put ''b3RvdHlwZS5nZXQ9ZnVuY3Rpb24gcHIoQW4pe3ZhciBhbj10aGlzLl9fZGF0YV9fLGdpPW1sKGFuLEFuKTtyZXR1cm4gZ2k8MD92b2lkIDA6YW5bZ2ldWzFdfSxlbi5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uIFduKEFuKXtyZXR1cm4gbWwodGhpcy5fX2RhdGFfXyxBbik+LTF9LGVuLnByb3Rv''@;'; put 'put ''dHlwZS5zZXQ9ZnVuY3Rpb24gS2koQW4sYW4pe3ZhciBnaT10aGlzLl9fZGF0YV9fLEFyPW1sKGdpLEFuKTtyZXR1cm4gQXI8MD8oKyt0aGlzLnNpemUsZ2kucHVzaChbQW4sYW5dKSk6Z2lbQXJdWzFdPWFuLHRoaXN9LFFyLnByb3RvdHlwZS5jbGVhcj1mdW5jdGlvbiBKcigpe3RoaXMuc2l6''@;'; put 'put ''ZT0wLHRoaXMuX19kYXRhX189e2hhc2g6bmV3IGp0LG1hcDpuZXcoQXR8fGVuKSxzdHJpbmc6bmV3IGp0fX0sUXIucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBCaShBbil7dmFyIGFuPWFkKHRoaXMsQW4pLmRlbGV0ZShBbik7cmV0dXJuIHRoaXMuc2l6ZS09YW4/MTowLGFufSxRci5wcm90''@;'; put 'put ''b3R5cGUuZ2V0PWZ1bmN0aW9uIFZpKEFuKXtyZXR1cm4gYWQodGhpcyxBbikuZ2V0KEFuKX0sUXIucHJvdG90eXBlLmhhcz1mdW5jdGlvbiBJbyhBbil7cmV0dXJuIGFkKHRoaXMsQW4pLmhhcyhBbil9LFFyLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gT3IoQW4sYW4pe3ZhciBnaT1hZCh0aGlz''@;'; put 'put ''LEFuKSxBcj1naS5zaXplO3JldHVybiBnaS5zZXQoQW4sYW4pLHRoaXMuc2l6ZSs9Z2kuc2l6ZT09QXI/MDoxLHRoaXN9LFlpLnByb3RvdHlwZS5hZGQ9WWkucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24gZ28oQW4pe3JldHVybiB0aGlzLl9fZGF0YV9fLnNldChBbix5KSx0aGlzfSxZaS5wcm90''@;'; put 'put ''b3R5cGUuaGFzPWZ1bmN0aW9uIGVyKEFuKXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXMoQW4pfSxjby5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24gX28oKXt0aGlzLl9fZGF0YV9fPW5ldyBlbix0aGlzLnNpemU9MH0sY28ucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbiBPbyhBbil7dmFyIGFu''@;'; put 'put ''PXRoaXMuX19kYXRhX18sZ2k9YW4uZGVsZXRlKEFuKTtyZXR1cm4gdGhpcy5zaXplPWFuLnNpemUsZ2l9LGNvLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24gSG8oQW4pe3JldHVybiB0aGlzLl9fZGF0YV9fLmdldChBbil9LGNvLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24gZWkoQW4pe3JldHVybiB0''@;'; put 'put ''aGlzLl9fZGF0YV9fLmhhcyhBbil9LGNvLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24gZ2EoQW4sYW4pe3ZhciBnaT10aGlzLl9fZGF0YV9fO2lmKGdpIGluc3RhbmNlb2YgZW4pe3ZhciBBcj1naS5fX2RhdGFfXztpZighQXR8fEFyLmxlbmd0aDwxOTkpcmV0dXJuIEFyLnB1c2goW0FuLGFuXSks''@;'; put 'put ''dGhpcy5zaXplPSsrZ2kuc2l6ZSx0aGlzO2dpPXRoaXMuX19kYXRhX189bmV3IFFyKEFyKX1yZXR1cm4gZ2kuc2V0KEFuLGFuKSx0aGlzLnNpemU9Z2kuc2l6ZSx0aGlzfTt2YXIga3M9Zm4/ZnVuY3Rpb24oQW4pe3JldHVybiBudWxsPT1Bbj9bXTooQW49T2JqZWN0KEFuKSxmdW5jdGlvbiBG''@;'; put 'put ''ZShBbixhbil7Zm9yKHZhciBnaT0tMSxBcj1udWxsPT1Bbj8wOkFuLmxlbmd0aCxPYT0wLGVhPVtdOysrZ2k8QXI7KXt2YXIgaWw9QW5bZ2ldO2FuKGlsLGdpLEFuKSYmKGVhW09hKytdPWlsKX1yZXR1cm4gZWF9KGZuKEFuKSxmdW5jdGlvbihhbil7cmV0dXJuIFF0LmNhbGwoQW4sYW4pfSkp''@;'; put 'put ''fTpmdW5jdGlvbiBaaCgpe3JldHVybltdfSxHaT1SYztmdW5jdGlvbiB2bChBbixhbil7cmV0dXJuISEoYW49YW4/P3cpJiYoIm51bWJlciI9PXR5cGVvZiBBbnx8dGUudGVzdChBbikpJiZBbj4tMSYmQW4lMT09MCYmQW48YW59ZnVuY3Rpb24gUmwoQW4pe2lmKG51bGwhPUFuKXt0cnl7cmV0''@;'; put 'put ''dXJuICRlLmNhbGwoQW4pfWNhdGNoe310cnl7cmV0dXJuIEFuKyIifWNhdGNoe319cmV0dXJuIiJ9ZnVuY3Rpb24gbmYoQW4sYW4pe3JldHVybiBBbj09PWFufHxBbiE9QW4mJmFuIT1hbn0oWnQmJkdpKG5ldyBadChuZXcgQXJyYXlCdWZmZXIoMSkpKSE9Vnx8QXQmJkdpKG5ldyBBdCkhPVd8''@;'; put 'put ''fExuJiZHaShMbi5yZXNvbHZlKCkpIT1KfHxzdCYmR2kobmV3IHN0KSE9bGV8fHp0JiZHaShuZXcgenQpIT1TZSkmJihHaT1mdW5jdGlvbihBbil7dmFyIGFuPVJjKEFuKSxnaT1hbj09ZWU/QW4uY29uc3RydWN0b3I6dm9pZCAwLEFyPWdpP1JsKGdpKToiIjtpZihBcilzd2l0Y2goQXIpe2Nh''@;'; put 'put ''c2UgV2U6cmV0dXJuIFY7Y2FzZSBUdDpyZXR1cm4gVztjYXNlIHJyOnJldHVybiBKO2Nhc2UgaHQ6cmV0dXJuIGxlO2Nhc2UgeHQ6cmV0dXJuIFNlfXJldHVybiBhbn0pO3ZhciBzZD1EMChmdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHN9KCkpP0QwOmZ1bmN0aW9uKEFuKXtyZXR1cm4gVm8o''@;'; put 'put ''QW4pJiZ0dC5jYWxsKEFuLCJjYWxsZWUiKSYmIVF0LmNhbGwoQW4sImNhbGxlZSIpfSxyZj1BcnJheS5pc0FycmF5LGFmPWZ0fHxmdW5jdGlvbiBXaCgpe3JldHVybiExfTtmdW5jdGlvbiBzZihBbil7aWYoIUxjKEFuKSlyZXR1cm4hMTt2YXIgYW49UmMoQW4pO3JldHVybiBhbj09S3x8YW49''@;'; put 'put ''PVV8fGFuPT1PfHxhbj09cmV9ZnVuY3Rpb24gemgoQW4pe3JldHVybiJudW1iZXIiPT10eXBlb2YgQW4mJkFuPi0xJiZBbiUxPT0wJiZBbjw9d31mdW5jdGlvbiBMYyhBbil7dmFyIGFuPXR5cGVvZiBBbjtyZXR1cm4gbnVsbCE9QW4mJigib2JqZWN0Ij09YW58fCJmdW5jdGlvbiI9PWFuKX1m''@;'; put 'put ''dW5jdGlvbiBWbyhBbil7cmV0dXJuIG51bGwhPUFuJiYib2JqZWN0Ij09dHlwZW9mIEFufXZhciB4Mz1EZT9mdW5jdGlvbiBrZShBbil7cmV0dXJuIGZ1bmN0aW9uKGFuKXtyZXR1cm4gQW4oYW4pfX0oRGUpOmZ1bmN0aW9uIEh0KEFuKXtyZXR1cm4gVm8oQW4pJiZ6aChBbi5sZW5ndGgpJiYh''@;'; put 'put ''IXNlW1JjKEFuKV19O2Z1bmN0aW9uIFVoKEFuKXtyZXR1cm4gZnVuY3Rpb24gazEoQW4pe3JldHVybiBudWxsIT1BbiYmemgoQW4ubGVuZ3RoKSYmIXNmKEFuKX0oQW4pP2Z1bmN0aW9uIE5zKEFuLGFuKXt2YXIgZ2k9cmYoQW4pLEFyPSFnaSYmc2QoQW4pLE9hPSFnaSYmIUFyJiZhZihBbiks''@;'; put 'put ''ZWE9IWdpJiYhQXImJiFPYSYmeDMoQW4pLGlsPWdpfHxBcnx8T2F8fGVhLHphPWlsP2Z1bmN0aW9uIFZlKEFuLGFuKXtmb3IodmFyIGdpPS0xLEFyPUFycmF5KEFuKTsrK2dpPEFuOylBcltnaV09YW4oZ2kpO3JldHVybiBBcn0oQW4ubGVuZ3RoLFN0cmluZyk6W10sVnM9emEubGVuZ3RoO2Zv''@;'; put 'put ''cih2YXIgQ3MgaW4gQW4pKGFufHx0dC5jYWxsKEFuLENzKSkmJighaWx8fCEoImxlbmd0aCI9PUNzfHxPYSYmKCJvZmZzZXQiPT1Dc3x8InBhcmVudCI9PUNzKXx8ZWEmJigiYnVmZmVyIj09Q3N8fCJieXRlTGVuZ3RoIj09Q3N8fCJieXRlT2Zmc2V0Ij09Q3MpfHx2bChDcyxWcykpKSYmemEu''@;'; put 'put ''cHVzaChDcyk7cmV0dXJuIHphfShBbik6ZnVuY3Rpb24gWHIoQW4pe2lmKCFmdW5jdGlvbiB5MChBbil7dmFyIGFuPUFuJiZBbi5jb25zdHJ1Y3RvcjtyZXR1cm4gQW49PT0oImZ1bmN0aW9uIj09dHlwZW9mIGFuJiZhbi5wcm90b3R5cGV8fER0KX0oQW4pKXJldHVybiBQcihBbik7dmFyIGFu''@;'; put 'put ''PVtdO2Zvcih2YXIgZ2kgaW4gT2JqZWN0KEFuKSl0dC5jYWxsKEFuLGdpKSYmImNvbnN0cnVjdG9yIiE9Z2kmJmFuLnB1c2goZ2kpO3JldHVybiBhbn0oQW4pfXVlLmV4cG9ydHM9ZnVuY3Rpb24gWGQoQW4sYW4pe3JldHVybiBvcihBbixhbil9fSw4NDIzOih1ZSxxLF8pPT57dmFyIE89Im9i''@;'; put 'put ''amVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZix6PSJvYmplY3QiPT10eXBlb2YgXy5nJiZfLmcmJl8uZy5PYmplY3Q9PT1PYmplY3QmJl8uZ3x8T3x8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxOPU9iamVjdC5wcm90b3R5cGUsTD1OLmhhc093''@;'; put 'put ''blByb3BlcnR5LEs9Ti50b1N0cmluZyxVPXouU3ltYm9sLFc9VT9VLnRvU3RyaW5nVGFnOnZvaWQgMDt1ZS5leHBvcnRzPWZ1bmN0aW9uIEooaWUpe2lmKCFmdW5jdGlvbiByZShpZSl7dmFyIGxlPXR5cGVvZiBpZTtyZXR1cm4gbnVsbCE9aWUmJigib2JqZWN0Ij09bGV8fCJmdW5jdGlvbiI9''@;'; put 'put ''PWxlKX0oaWUpKXJldHVybiExO3ZhciBsZT1mdW5jdGlvbiBZKGllKXtyZXR1cm4gbnVsbD09aWU/dm9pZCAwPT09aWU/IltvYmplY3QgVW5kZWZpbmVkXSI6IltvYmplY3QgTnVsbF0iOlcmJlcgaW4gT2JqZWN0KGllKT9mdW5jdGlvbiBYKGllKXt2YXIgbGU9TC5jYWxsKGllLFcpLG1lPWll''@;'; put 'put ''W1ddO3RyeXtpZVtXXT12b2lkIDA7dmFyIF9lPSEwfWNhdGNoe312YXIgVGU9Sy5jYWxsKGllKTtyZXR1cm4gX2UmJihsZT9pZVtXXT1tZTpkZWxldGUgaWVbV10pLFRlfShpZSk6ZnVuY3Rpb24gZWUoaWUpe3JldHVybiBLLmNhbGwoaWUpfShpZSl9KGllKTtyZXR1cm4iW29iamVjdCBGdW5j''@;'; put 'put ''dGlvbl0iPT1sZXx8IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIj09bGV8fCJbb2JqZWN0IEFzeW5jRnVuY3Rpb25dIj09bGV8fCJbb2JqZWN0IFByb3h5XSI9PWxlfX0sOTcyMjp1ZT0+e3VlLmV4cG9ydHM9ZnVuY3Rpb24gcShfKXtyZXR1cm4gbnVsbD09X319LDk3Mzg6dWU9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7dWUuZXhwb3J0cz1NYXRoLmFic30sNjMyOTp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPU1hdGguZmxvb3J9LDM2Nzg6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1OdW1iZXIuaXNOYU58fGZ1bmN0aW9uKF8pe3JldHVybiBfIT1ffX0sMjI2NDp1ZT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt1ZS5leHBvcnRzPU1hdGgubWF4fSw1NzMwOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9TWF0aC5taW59LDcwNzp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPU1hdGgucG93fSwzODYyOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9TWF0aC5yb3VuZH0sOTU1''@;'; put 'put ''MDoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDM2NzgpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoZyl8fDA9PT1nP2c6ZzwwPy0xOjF9fSwyMzE4Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNTcxNykseT1fKDMzNDkpLGc9Xyg5NTA5KS5CdWZmZXIs''@;'; put 'put ''Qj1uZXcgQXJyYXkoMTYpO2Z1bmN0aW9uIHcoKXt5LmNhbGwodGhpcyw2NCksdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4Nzh9ZnVuY3Rpb24gUChMLEspe3JldHVybiBMPDxLfEw+Pj4zMi1LfWZ1bmN0aW9u''@;'; put 'put ''IEYoTCxLLFUsVyxZLFgsZWUpe3JldHVybiBQKEwrKEsmVXx+SyZXKStZK1h8MCxlZSkrS3wwfWZ1bmN0aW9uIE8oTCxLLFUsVyxZLFgsZWUpe3JldHVybiBQKEwrKEsmV3xVJn5XKStZK1h8MCxlZSkrS3wwfWZ1bmN0aW9uIHooTCxLLFUsVyxZLFgsZWUpe3JldHVybiBQKEwrKEteVV5XKStZ''@;'; put 'put ''K1h8MCxlZSkrS3wwfWZ1bmN0aW9uIE4oTCxLLFUsVyxZLFgsZWUpe3JldHVybiBQKEwrKFVeKEt8flcpKStZK1h8MCxlZSkrS3wwfUkodyx5KSx3LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciBMPUIsSz0wO0s8MTY7KytLKUxbS109dGhpcy5fYmxvY2sucmVhZEludDMy''@;'; put 'put ''TEUoNCpLKTt2YXIgVT10aGlzLl9hLFc9dGhpcy5fYixZPXRoaXMuX2MsWD10aGlzLl9kO1U9RihVLFcsWSxYLExbMF0sMzYxNDA5MDM2MCw3KSxYPUYoWCxVLFcsWSxMWzFdLDM5MDU0MDI3MTAsMTIpLFk9RihZLFgsVSxXLExbMl0sNjA2MTA1ODE5LDE3KSxXPUYoVyxZLFgsVSxMWzNdLDMy''@;'; put 'put ''NTA0NDE5NjYsMjIpLFU9RihVLFcsWSxYLExbNF0sNDExODU0ODM5OSw3KSxYPUYoWCxVLFcsWSxMWzVdLDEyMDAwODA0MjYsMTIpLFk9RihZLFgsVSxXLExbNl0sMjgyMTczNTk1NSwxNyksVz1GKFcsWSxYLFUsTFs3XSw0MjQ5MjYxMzEzLDIyKSxVPUYoVSxXLFksWCxMWzhdLDE3NzAwMzU0''@;'; put 'put ''MTYsNyksWD1GKFgsVSxXLFksTFs5XSwyMzM2NTUyODc5LDEyKSxZPUYoWSxYLFUsVyxMWzEwXSw0Mjk0OTI1MjMzLDE3KSxXPUYoVyxZLFgsVSxMWzExXSwyMzA0NTYzMTM0LDIyKSxVPUYoVSxXLFksWCxMWzEyXSwxODA0NjAzNjgyLDcpLFg9RihYLFUsVyxZLExbMTNdLDQyNTQ2MjYxOTUs''@;'; put 'put ''MTIpLFk9RihZLFgsVSxXLExbMTRdLDI3OTI5NjUwMDYsMTcpLFU9TyhVLFc9RihXLFksWCxVLExbMTVdLDEyMzY1MzUzMjksMjIpLFksWCxMWzFdLDQxMjkxNzA3ODYsNSksWD1PKFgsVSxXLFksTFs2XSwzMjI1NDY1NjY0LDkpLFk9TyhZLFgsVSxXLExbMTFdLDY0MzcxNzcxMywxNCksVz1P''@;'; put 'put ''KFcsWSxYLFUsTFswXSwzOTIxMDY5OTk0LDIwKSxVPU8oVSxXLFksWCxMWzVdLDM1OTM0MDg2MDUsNSksWD1PKFgsVSxXLFksTFsxMF0sMzgwMTYwODMsOSksWT1PKFksWCxVLFcsTFsxNV0sMzYzNDQ4ODk2MSwxNCksVz1PKFcsWSxYLFUsTFs0XSwzODg5NDI5NDQ4LDIwKSxVPU8oVSxXLFks''@;'; put 'put ''WCxMWzldLDU2ODQ0NjQzOCw1KSxYPU8oWCxVLFcsWSxMWzE0XSwzMjc1MTYzNjA2LDkpLFk9TyhZLFgsVSxXLExbM10sNDEwNzYwMzMzNSwxNCksVz1PKFcsWSxYLFUsTFs4XSwxMTYzNTMxNTAxLDIwKSxVPU8oVSxXLFksWCxMWzEzXSwyODUwMjg1ODI5LDUpLFg9TyhYLFUsVyxZLExbMl0s''@;'; put 'put ''NDI0MzU2MzUxMiw5KSxZPU8oWSxYLFUsVyxMWzddLDE3MzUzMjg0NzMsMTQpLFU9eihVLFc9TyhXLFksWCxVLExbMTJdLDIzNjgzNTk1NjIsMjApLFksWCxMWzVdLDQyOTQ1ODg3MzgsNCksWD16KFgsVSxXLFksTFs4XSwyMjcyMzkyODMzLDExKSxZPXooWSxYLFUsVyxMWzExXSwxODM5MDMw''@;'; put 'put ''NTYyLDE2KSxXPXooVyxZLFgsVSxMWzE0XSw0MjU5NjU3NzQwLDIzKSxVPXooVSxXLFksWCxMWzFdLDI3NjM5NzUyMzYsNCksWD16KFgsVSxXLFksTFs0XSwxMjcyODkzMzUzLDExKSxZPXooWSxYLFUsVyxMWzddLDQxMzk0Njk2NjQsMTYpLFc9eihXLFksWCxVLExbMTBdLDMyMDAyMzY2NTYs''@;'; put 'put ''MjMpLFU9eihVLFcsWSxYLExbMTNdLDY4MTI3OTE3NCw0KSxYPXooWCxVLFcsWSxMWzBdLDM5MzY0MzAwNzQsMTEpLFk9eihZLFgsVSxXLExbM10sMzU3MjQ0NTMxNywxNiksVz16KFcsWSxYLFUsTFs2XSw3NjAyOTE4OSwyMyksVT16KFUsVyxZLFgsTFs5XSwzNjU0NjAyODA5LDQpLFg9eihY''@;'; put 'put ''LFUsVyxZLExbMTJdLDM4NzMxNTE0NjEsMTEpLFk9eihZLFgsVSxXLExbMTVdLDUzMDc0MjUyMCwxNiksVT1OKFUsVz16KFcsWSxYLFUsTFsyXSwzMjk5NjI4NjQ1LDIzKSxZLFgsTFswXSw0MDk2MzM2NDUyLDYpLFg9TihYLFUsVyxZLExbN10sMTEyNjg5MTQxNSwxMCksWT1OKFksWCxVLFcs''@;'; put 'put ''TFsxNF0sMjg3ODYxMjM5MSwxNSksVz1OKFcsWSxYLFUsTFs1XSw0MjM3NTMzMjQxLDIxKSxVPU4oVSxXLFksWCxMWzEyXSwxNzAwNDg1NTcxLDYpLFg9TihYLFUsVyxZLExbM10sMjM5OTk4MDY5MCwxMCksWT1OKFksWCxVLFcsTFsxMF0sNDI5MzkxNTc3MywxNSksVz1OKFcsWSxYLFUsTFsx''@;'; put 'put ''XSwyMjQwMDQ0NDk3LDIxKSxVPU4oVSxXLFksWCxMWzhdLDE4NzMzMTMzNTksNiksWD1OKFgsVSxXLFksTFsxNV0sNDI2NDM1NTU1MiwxMCksWT1OKFksWCxVLFcsTFs2XSwyNzM0NzY4OTE2LDE1KSxXPU4oVyxZLFgsVSxMWzEzXSwxMzA5MTUxNjQ5LDIxKSxVPU4oVSxXLFksWCxMWzRdLDQx''@;'; put 'put ''NDk0NDQyMjYsNiksWD1OKFgsVSxXLFksTFsxMV0sMzE3NDc1NjkxNywxMCksWT1OKFksWCxVLFcsTFsyXSw3MTg3ODcyNTksMTUpLFc9TihXLFksWCxVLExbOV0sMzk1MTQ4MTc0NSwyMSksdGhpcy5fYT10aGlzLl9hK1V8MCx0aGlzLl9iPXRoaXMuX2IrV3wwLHRoaXMuX2M9dGhpcy5fYytZ''@;'; put 'put ''fDAsdGhpcy5fZD10aGlzLl9kK1h8MH0sdy5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3RoaXMuX2Jsb2NrW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPTEyOCx0aGlzLl9ibG9ja09mZnNldD41NiYmKHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw2NCksdGhpcy5fdXBk''@;'; put 'put ''YXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MCksdGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFswXSw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMV0sNjApLHRoaXMu''@;'; put 'put ''X3VwZGF0ZSgpO3ZhciBMPWcuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBMLndyaXRlSW50MzJMRSh0aGlzLl9hLDApLEwud3JpdGVJbnQzMkxFKHRoaXMuX2IsNCksTC53cml0ZUludDMyTEUodGhpcy5fYyw4KSxMLndyaXRlSW50MzJMRSh0aGlzLl9kLDEyKSxMfSx1ZS5leHBvcnRzPXd9LDMw''@;'; put 'put ''NDc6KHVlLHEsXyk9Pnt2YXIgST1fKDYyNDApLHk9Xyg5OTMxKTtmdW5jdGlvbiBnKEIpe3RoaXMucmFuZD1CfHxuZXcgeS5SYW5kfXVlLmV4cG9ydHM9ZyxnLmNyZWF0ZT1mdW5jdGlvbih3KXtyZXR1cm4gbmV3IGcodyl9LGcucHJvdG90eXBlLl9yYW5kYmVsb3c9ZnVuY3Rpb24odyl7dmFy''@;'; put 'put ''IFA9dy5iaXRMZW5ndGgoKSxGPU1hdGguY2VpbChQLzgpO2Rve3ZhciBPPW5ldyBJKHRoaXMucmFuZC5nZW5lcmF0ZShGKSl9d2hpbGUoTy5jbXAodyk+PTApO3JldHVybiBPfSxnLnByb3RvdHlwZS5fcmFuZHJhbmdlPWZ1bmN0aW9uKHcsUCl7dmFyIEY9UC5zdWIodyk7cmV0dXJuIHcuYWRk''@;'; put 'put ''KHRoaXMuX3JhbmRiZWxvdyhGKSl9LGcucHJvdG90eXBlLnRlc3Q9ZnVuY3Rpb24odyxQLEYpe3ZhciBPPXcuYml0TGVuZ3RoKCksej1JLm1vbnQodyksTj1uZXcgSSgxKS50b1JlZCh6KTtQfHwoUD1NYXRoLm1heCgxLE8vNDh8MCkpO2Zvcih2YXIgTD13LnN1Ym4oMSksSz0wOyFMLnRlc3Ru''@;'; put 'put ''KEspO0srKyk7Zm9yKHZhciBVPXcuc2hybihLKSxXPUwudG9SZWQoeik7UD4wO1AtLSl7dmFyIFg9dGhpcy5fcmFuZHJhbmdlKG5ldyBJKDIpLEwpO0YmJkYoWCk7dmFyIGVlPVgudG9SZWQoeikucmVkUG93KFUpO2lmKDAhPT1lZS5jbXAoTikmJjAhPT1lZS5jbXAoVykpe2Zvcih2YXIgSj0x''@;'; put 'put ''O0o8SztKKyspe2lmKDA9PT0oZWU9ZWUucmVkU3FyKCkpLmNtcChOKSlyZXR1cm4hMTtpZigwPT09ZWUuY21wKFcpKWJyZWFrfWlmKEo9PT1LKXJldHVybiExfX1yZXR1cm4hMH0sZy5wcm90b3R5cGUuZ2V0RGl2aXNvcj1mdW5jdGlvbih3LFApe3ZhciBGPXcuYml0TGVuZ3RoKCksTz1JLm1v''@;'; put 'put ''bnQodyksej1uZXcgSSgxKS50b1JlZChPKTtQfHwoUD1NYXRoLm1heCgxLEYvNDh8MCkpO2Zvcih2YXIgTj13LnN1Ym4oMSksTD0wOyFOLnRlc3RuKEwpO0wrKyk7Zm9yKHZhciBLPXcuc2hybihMKSxVPU4udG9SZWQoTyk7UD4wO1AtLSl7dmFyIFc9dGhpcy5fcmFuZHJhbmdlKG5ldyBJKDIp''@;'; put 'put ''LE4pLFk9dy5nY2QoVyk7aWYoMCE9PVkuY21wbigxKSlyZXR1cm4gWTt2YXIgWD1XLnRvUmVkKE8pLnJlZFBvdyhLKTtpZigwIT09WC5jbXAoeikmJjAhPT1YLmNtcChVKSl7Zm9yKHZhciBlZT0xO2VlPEw7ZWUrKyl7aWYoMD09PShYPVgucmVkU3FyKCkpLmNtcCh6KSlyZXR1cm4gWC5mcm9t''@;'; put 'put ''UmVkKCkuc3VibigxKS5nY2Qodyk7aWYoMD09PVguY21wKFUpKWJyZWFrfWlmKGVlPT09TClyZXR1cm4oWD1YLnJlZFNxcigpKS5mcm9tUmVkKCkuc3VibigxKS5nY2Qodyl9fXJldHVybiExfX0sNjI0MDpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJLHkpeyJ1c2Ugc3RyaWN0IjtmdW5j''@;'; put 'put ''dGlvbiBnKFYscCl7aWYoIVYpdGhyb3cgbmV3IEVycm9yKHB8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gQihWLHApe1Yuc3VwZXJfPXA7dmFyIGI9ZnVuY3Rpb24oKXt9O2IucHJvdG90eXBlPXAucHJvdG90eXBlLFYucHJvdG90eXBlPW5ldyBiLFYucHJvdG90eXBlLmNvbnN0cnVj''@;'; put 'put ''dG9yPVZ9ZnVuY3Rpb24gdyhWLHAsYil7aWYody5pc0JOKFYpKXJldHVybiBWO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1WJiYoKCJsZSI9PT1wfHwiYmUiPT09cCkmJihiPXAscD0xMCksdGhpcy5faW5pdChWfHww''@;'; put 'put ''LHB8fDEwLGJ8fCJiZSIpKX12YXIgUDsib2JqZWN0Ij09dHlwZW9mIEk/SS5leHBvcnRzPXc6eS5CTj13LHcuQk49dyx3LndvcmRTaXplPTI2O3RyeXtQPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpfKDY2MTkpLkJ1ZmZlcn1jYXRj''@;'; put 'put ''aHt9ZnVuY3Rpb24gRihWLHApe3ZhciBiPVYuY2hhckNvZGVBdChwKTtyZXR1cm4gYj49NjUmJmI8PTcwP2ItNTU6Yj49OTcmJmI8PTEwMj9iLTg3OmItNDgmMTV9ZnVuY3Rpb24gTyhWLHAsYil7dmFyIHg9RihWLGIpO3JldHVybiBiLTE+PXAmJih4fD1GKFYsYi0xKTw8NCkseH1mdW5jdGlv''@;'; put 'put ''biB6KFYscCxiLHgpe2Zvcih2YXIgQz0wLFQ9TWF0aC5taW4oVi5sZW5ndGgsYiksSD1wO0g8VDtIKyspe3ZhciBqPVYuY2hhckNvZGVBdChIKS00ODtDKj14LEMrPWo+PTQ5P2otNDkrMTA6aj49MTc/ai0xNysxMDpqfXJldHVybiBDfXcuaXNCTj1mdW5jdGlvbihwKXtyZXR1cm4gcCBpbnN0''@;'; put 'put ''YW5jZW9mIHd8fG51bGwhPT1wJiYib2JqZWN0Ij09dHlwZW9mIHAmJnAuY29uc3RydWN0b3Iud29yZFNpemU9PT13LndvcmRTaXplJiZBcnJheS5pc0FycmF5KHAud29yZHMpfSx3Lm1heD1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKT4wP3A6Yn0sdy5taW49ZnVuY3Rpb24ocCxiKXty''@;'; put 'put ''ZXR1cm4gcC5jbXAoYik8MD9wOmJ9LHcucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHAsYix4KXtpZigibnVtYmVyIj09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXROdW1iZXIocCxiLHgpO2lmKCJvYmplY3QiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5pdEFycmF5KHAsYix4KTsiaGV4''@;'; put 'put ''Ij09PWImJihiPTE2KSxnKGI9PT0oMHxiKSYmYj49MiYmYjw9MzYpO3ZhciBDPTA7Ii0iPT09KHA9cC50b1N0cmluZygpLnJlcGxhY2UoL1xzKy9nLCIiKSlbMF0mJihDKyssdGhpcy5uZWdhdGl2ZT0xKSxDPHAubGVuZ3RoJiYoMTY9PT1iP3RoaXMuX3BhcnNlSGV4KHAsQyx4KToodGhpcy5f''@;'; put 'put ''cGFyc2VCYXNlKHAsYixDKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCkpKX0sdy5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24ocCxiLHgpe3A8MCYmKHRoaXMubmVnYXRpdmU9MSxwPS1wKSxwPDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2''@;'; put 'put ''MyZwXSx0aGlzLmxlbmd0aD0xKTpwPDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJnAscC82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KGcocDw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZwLHAvNjcxMDg4NjQmNjcxMDg4NjMs''@;'; put 'put ''MV0sdGhpcy5sZW5ndGg9MyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiLHgpfSx3LnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKHAsYix4KXtpZihnKCJudW1iZXIiPT10eXBlb2YgcC5sZW5ndGgpLHAubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRz''@;'; put 'put ''PVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHAubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIFQsSCxqPTA7aWYoImJlIj09PXgpZm9y''@;'; put 'put ''KEM9cC5sZW5ndGgtMSxUPTA7Qz49MDtDLT0zKXRoaXMud29yZHNbVF18PShIPXBbQ118cFtDLTFdPDw4fHBbQy0yXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7ZWxzZSBpZigibGUiPT09eClmb3Io''@;'; put 'put ''Qz0wLFQ9MDtDPHAubGVuZ3RoO0MrPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MrMV08PDh8cFtDKzJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24ocCxiLHgpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgocC5sZW5ndGgtYikvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgaixUPTAsSD0w''@;'; put 'put ''O2lmKCJiZSI9PT14KWZvcihDPXAubGVuZ3RoLTE7Qz49YjtDLT0yKWo9TyhwLGIsQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O2Vsc2UgZm9yKEM9KHAubGVuZ3RoLWIpJTI9PTA/YisxOmI7QzxwLmxl''@;'; put 'put ''bmd0aDtDKz0yKWo9TyhwLGIsQyk8PFQsdGhpcy53b3Jkc1tIXXw9NjcxMDg4NjMmaixUPj0xOD8oVC09MTgsdGhpcy53b3Jkc1tIKz0xXXw9aj4+PjI2KTpUKz04O3RoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihwLGIseCl7dGhpcy53b3Jkcz1bMF0sdGhp''@;'; put 'put ''cy5sZW5ndGg9MTtmb3IodmFyIEM9MCxUPTE7VDw9NjcxMDg4NjM7VCo9YilDKys7Qy0tLFQ9VC9ifDA7Zm9yKHZhciBIPXAubGVuZ3RoLXgsaj1IJUMsRT1NYXRoLm1pbihILEgtaikreCxtPTAsQT14O0E8RTtBKz1DKW09eihwLEEsQStDLGIpLHRoaXMuaW11bG4oVCksdGhpcy53b3Jkc1sw''@;'; put 'put ''XSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSk7aWYoMCE9PWope3ZhciBvZT0xO2ZvcihtPXoocCxBLHAubGVuZ3RoLGIpLEE9MDtBPGo7QSsrKW9lKj1iO3RoaXMuaW11bG4ob2UpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRo''@;'; put 'put ''aXMuX2lhZGRuKG0pfXRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuY29weT1mdW5jdGlvbihwKXtwLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aDtiKyspcC53b3Jkc1tiXT10aGlzLndvcmRzW2JdO3AubGVuZ3RoPXRoaXMubGVuZ3RoLHAu''@;'; put 'put ''bmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxwLnJlZD10aGlzLnJlZH0sdy5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHApLHB9LHcucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24ocCl7Zm9yKDt0aGlzLmxlbmd0aDxwOyl0aGlz''@;'; put 'put ''LndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sdy5wcm90b3R5''@;'; put 'put ''cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHcucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/IjxCTi1SOiAiOiI8Qk46ICIpK3RoaXMudG9T''@;'; put 'put ''dHJpbmcoMTYpKyI+In07dmFyIE49WyIiLCIwIiwiMDAiLCIwMDAiLCIwMDAwIiwiMDAwMDAiLCIwMDAwMDAiLCIwMDAwMDAwIiwiMDAwMDAwMDAiLCIwMDAwMDAwMDAiLCIwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIl0sTD1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1''@;'; put 'put ''LDUsNSw1LDUsNSw1XSxLPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIy''@;'; put 'put ''MjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO2Z1bmN0aW9uIFco''@;'; put 'put ''VixwLGIpe2IubmVnYXRpdmU9cC5uZWdhdGl2ZV5WLm5lZ2F0aXZlO3ZhciB4PVYubGVuZ3RoK3AubGVuZ3RofDA7Yi5sZW5ndGg9eCx4PXgtMXwwO3ZhciBDPTB8Vi53b3Jkc1swXSxUPTB8cC53b3Jkc1swXSxIPUMqVCxFPUgvNjcxMDg4NjR8MDtiLndvcmRzWzBdPTY3MTA4ODYzJkg7Zm9y''@;'; put 'put ''KHZhciBtPTE7bTx4O20rKyl7Zm9yKHZhciBBPUU+Pj4yNixvZT02NzEwODg2MyZFLHRlPU1hdGgubWluKG0scC5sZW5ndGgtMSksc2U9TWF0aC5tYXgoMCxtLVYubGVuZ3RoKzEpO3NlPD10ZTtzZSsrKUErPShIPShDPTB8Vi53b3Jkc1ttLXNlfDBdKSooVD0wfHAud29yZHNbc2VdKStvZSkv''@;'; put 'put ''NjcxMDg4NjR8MCxvZT02NzEwODg2MyZIO2Iud29yZHNbbV09MHxvZSxFPTB8QX1yZXR1cm4gMCE9PUU/Yi53b3Jkc1ttXT0wfEU6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9dy5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24ocCxiKXt2YXIgeDtpZihiPTB8Ynx8MSwxNj09PShwPXB8fDEwKXx8''@;'; put 'put ''ImhleCI9PT1wKXt4PSIiO2Zvcih2YXIgQz0wLFQ9MCxIPTA7SDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPXRoaXMud29yZHNbSF0sRT0oMTY3NzcyMTUmKGo8PEN8VCkpLnRvU3RyaW5nKDE2KTtUPWo+Pj4yNC1DJjE2Nzc3MjE1LChDKz0yKT49MjYmJihDLT0yNixILS0pLHg9MCE9PVR8fEgh''@;'; put 'put ''PT10aGlzLmxlbmd0aC0xP05bNi1FLmxlbmd0aF0rRSt4OkUreH1mb3IoMCE9PVQmJih4PVQudG9TdHJpbmcoMTYpK3gpO3gubGVuZ3RoJWIhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1pZihwPT09KDB8cCkmJnA+PTImJnA8PTM2KXt2YXIgbT1M''@;'; put 'put ''W3BdLEE9S1twXTt4PSIiO3ZhciBvZT10aGlzLmNsb25lKCk7Zm9yKG9lLm5lZ2F0aXZlPTA7IW9lLmlzWmVybygpOyl7dmFyIHRlPW9lLm1vZG4oQSkudG9TdHJpbmcocCk7eD0ob2U9b2UuaWRpdm4oQSkpLmlzWmVybygpP3RlK3g6TlttLXRlLmxlbmd0aF0rdGUreH1mb3IodGhpcy5pc1pl''@;'; put 'put ''cm8oKSYmKHg9IjAiK3gpO3gubGVuZ3RoJWIhPTA7KXg9IjAiK3g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoeD0iLSIreCkseH1nKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LHcucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHA9dGhpcy53b3Jk''@;'; put 'put ''c1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3ArPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9wKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmZyghMSwiTnVtYmVyIGNhbiBv''@;'; put 'put ''bmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LXA6cH0sdy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSx3LnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihwLGIpe3JldHVybiBnKHR5cGVvZiBQ''@;'; put 'put ''PCJ1IiksdGhpcy50b0FycmF5TGlrZShQLHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxwLGIpfSx3LnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihwLGIseCl7dmFyIEM9dGhpcy5ieXRlTGVuZ3RoKCks''@;'; put 'put ''VD14fHxNYXRoLm1heCgxLEMpO2coQzw9VCwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aCIpLGcoVD4wLCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDAiKSx0aGlzLnN0cmlwKCk7dmFyIEUsbSxIPSJsZSI9PT1iLGo9bmV3IHAoVCksQT10aGlzLmNsb25lKCk7aWYo''@;'; put 'put ''SCl7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksalttXT1FO2Zvcig7bTxUO20rKylqW21dPTB9ZWxzZXtmb3IobT0wO208VC1DO20rKylqW21dPTA7Zm9yKG09MDshQS5pc1plcm8oKTttKyspRT1BLmFuZGxuKDI1NSksQS5pdXNocm4oOCksaltU''@;'; put 'put ''LW0tMV09RX1yZXR1cm4gan0sdy5wcm90b3R5cGUuX2NvdW50Qml0cz1NYXRoLmNsejMyP2Z1bmN0aW9uKHApe3JldHVybiAzMi1NYXRoLmNsejMyKHApfTpmdW5jdGlvbihwKXt2YXIgYj1wLHg9MDtyZXR1cm4gYj49NDA5NiYmKHgrPTEzLGI+Pj49MTMpLGI+PTY0JiYoeCs9NyxiPj4+PTcp''@;'; put 'put ''LGI+PTgmJih4Kz00LGI+Pj49NCksYj49MiYmKHgrPTIsYj4+Pj0yKSx4K2J9LHcucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbihwKXtpZigwPT09cClyZXR1cm4gMjY7dmFyIGI9cCx4PTA7cmV0dXJuIDgxOTEmYnx8KHgrPTEzLGI+Pj49MTMpLDEyNyZifHwoeCs9NyxiPj4+PTcpLDE1''@;'; put 'put ''JmJ8fCh4Kz00LGI+Pj49NCksMyZifHwoeCs9MixiPj4+PTIpLDEmYnx8eCsrLHh9LHcucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciBiPXRoaXMuX2NvdW50Qml0cyh0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdKTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK2J9LHcucHJv''@;'; put 'put ''dG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIHA9MCxiPTA7Yjx0aGlzLmxlbmd0aDtiKyspe3ZhciB4PXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbYl0pO2lmKHArPXgsMjYhPT14KWJyZWFrfXJldHVybiBwfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSx3LnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4ocCkuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy50ZXN0bihwLTEpP3RoaXMubm90bihwKS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSx3LnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sdy5wcm90b3R5cGUubmVn''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LHcucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LHcucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24ocCl7Zm9yKDt0aGlzLmxlbmd0aDxwLmxl''@;'; put 'put ''bmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgYj0wO2I8cC5sZW5ndGg7YisrKXRoaXMud29yZHNbYl09dGhpcy53b3Jkc1tiXXxwLndvcmRzW2JdO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlvcj1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMu''@;'; put 'put ''bmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXVvcihwKX0sdy5wcm90b3R5cGUub3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IocCk6cC5jbG9uZSgpLmlvcih0aGlzKX0sdy5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKHApe3JldHVy''@;'; put 'put ''biB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcihwKTpwLmNsb25lKCkuaXVvcih0aGlzKX0sdy5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24ocCl7dmFyIGI7Yj10aGlzLmxlbmd0aD5wLmxlbmd0aD9wOnRoaXM7Zm9yKHZhciB4PTA7eDxiLmxlbmd0aDt4KyspdGhpcy53''@;'; put 'put ''b3Jkc1t4XT10aGlzLndvcmRzW3hdJnAud29yZHNbeF07cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQocCl9LHcucHJvdG90''@;'; put 'put ''eXBlLmFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQocCk6cC5jbG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFu''@;'; put 'put ''ZChwKTpwLmNsb25lKCkuaXVhbmQodGhpcyl9LHcucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKHApe3ZhciBiLHg7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KGI9dGhpcyx4PXApOihiPXAseD10aGlzKTtmb3IodmFyIEM9MDtDPHgubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPWIud29yZHNbQ11e''@;'; put 'put ''eC53b3Jkc1tDXTtpZih0aGlzIT09Yilmb3IoO0M8Yi5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109Yi53b3Jkc1tDXTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxw''@;'; put 'put ''Lm5lZ2F0aXZlKSksdGhpcy5pdXhvcihwKX0sdy5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcihwKTpwLmNsb25lKCkuaXhvcih0aGlzKX0sdy5wcm90b3R5cGUudXhvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKHApOnAuY2xvbmUoKS5pdXhvcih0aGlzKX0sdy5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPTB8TWF0aC5jZWlsKHAvMjYpLHg9cCUyNjt0aGlzLl9leHBhbmQo''@;'; put 'put ''YikseD4wJiZiLS07Zm9yKHZhciBDPTA7QzxiO0MrKyl0aGlzLndvcmRzW0NdPTY3MTA4ODYzJn50aGlzLndvcmRzW0NdO3JldHVybiB4PjAmJih0aGlzLndvcmRzW0NdPX50aGlzLndvcmRzW0NdJjY3MTA4ODYzPj4yNi14KSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLm5vdG49ZnVuY3Rp''@;'; put 'put ''b24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bihwKX0sdy5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbihwLGIpe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgeD1wLzI2fDAsQz1wJTI2O3JldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdPWI/dGhpcy53b3Jk''@;'; put 'put ''c1t4XXwxPDxDOnRoaXMud29yZHNbeF0mfigxPDxDKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCl7dmFyIGIseCxDO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKHApLHRoaXMu''@;'; put 'put ''bmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIHAubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihwKSxwLm5lZ2F0aXZlPTEsYi5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oeD10aGlzLEM9cCk6KHg9''@;'; put 'put ''cCxDPXRoaXMpO2Zvcih2YXIgVD0wLEg9MDtIPEMubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJihiPSgwfHgud29yZHNbSF0pKygwfEMud29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2Zvcig7MCE9PVQmJkg8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKGI9KDB8''@;'; put 'put ''eC53b3Jkc1tIXSkrVCksVD1iPj4+MjY7aWYodGhpcy5sZW5ndGg9eC5sZW5ndGgsMCE9PVQpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09VCx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoeCE9PXRoaXMpZm9yKDtIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXgud29yZHNbSF07cmV0dXJuIHRo''@;'; put 'put ''aXN9LHcucHJvdG90eXBlLmFkZD1mdW5jdGlvbihwKXt2YXIgYjtyZXR1cm4gMCE9PXAubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhwLm5lZ2F0aXZlPTAsYj10aGlzLnN1YihwKSxwLm5lZ2F0aXZlXj0xLGIpOjA9PT1wLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5u''@;'; put 'put ''ZWdhdGl2ZT0wLGI9cC5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLGIpOnRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHApOnAuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHApe2lmKDAhPT1wLm5lZ2F0aXZlKXtwLm5lZ2F0aXZl''@;'; put 'put ''PTA7dmFyIGI9dGhpcy5pYWRkKHApO3JldHVybiBwLm5lZ2F0aXZlPTEsYi5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgQyxULHg9dGhpcy5jbXAo''@;'; put 'put ''cCk7aWYoMD09PXgpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3g+MD8oQz10aGlzLFQ9cCk6KEM9cCxUPXRoaXMpO2Zvcih2YXIgSD0wLGo9MDtqPFQubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNbal0pLSgwfFQud29yZHNbal0p''@;'; put 'put ''K0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJmI7Zm9yKDswIT09SCYmajxDLmxlbmd0aDtqKyspSD0oYj0oMHxDLndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2lmKDA9PT1IJiZqPEMubGVuZ3RoJiZDIT09dGhpcylmb3IoO2o8Qy5sZW5ndGg7aisrKXRo''@;'; put 'put ''aXMud29yZHNbal09Qy53b3Jkc1tqXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsaiksQyE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXN1YihwKX07''@;'; put 'put ''dmFyIFk9ZnVuY3Rpb24ocCxiLHgpe3ZhciBFLG0sQSxDPXAud29yZHMsVD1iLndvcmRzLEg9eC53b3JkcyxqPTAsb2U9MHxDWzBdLHRlPTgxOTEmb2Usc2U9b2U+Pj4xMyx3ZT0wfENbMV0sVWU9ODE5MSZ3ZSxKZT13ZT4+PjEzLGF0PTB8Q1syXSxNZT04MTkxJmF0LHZlPWF0Pj4+MTMsWGU9''@;'; put 'put ''MHxDWzNdLGplPTgxOTEmWGUsRGU9WGU+Pj4xMyxGZT0wfENbNF0sUmU9ODE5MSZGZSxJZT1GZT4+PjEzLFZlPTB8Q1s1XSxrZT04MTkxJlZlLEFlPVZlPj4+MTMsX3Q9MHxDWzZdLHJ0PTgxOTEmX3QsUWU9X3Q+Pj4xMyxkbj0wfENbN10seXQ9ODE5MSZkbixNdD1kbj4+PjEzLER0PTB8Q1s4''@;'; put 'put ''XSxpdD04MTkxJkR0LCRlPUR0Pj4+MTMsdHQ9MHxDWzldLEhlPTgxOTEmdHQsZHQ9dHQ+Pj4xMyxxdD0wfFRbMF0sUnQ9ODE5MSZxdCxQdD1xdD4+PjEzLGFpPTB8VFsxXSxRdD04MTkxJmFpLHNuPWFpPj4+MTMsUmk9MHxUWzJdLGZuPTgxOTEmUmksZnQ9Umk+Pj4xMyxQcj0wfFRbM10sWnQ9''@;'; put 'put ''ODE5MSZQcixBdD1Qcj4+PjEzLExuPTB8VFs0XSxzdD04MTkxJkxuLHp0PUxuPj4+MTMsbmk9MHxUWzVdLFdlPTgxOTEmbmksVHQ9bmk+Pj4xMyxycj0wfFRbNl0saHQ9ODE5MSZycix4dD1ycj4+PjEzLEJuPTB8VFs3XSxvbj04MTkxJkJuLGp0PUJuPj4+MTMsZGk9MHxUWzhdLGNuPTgxOTEm''@;'; put 'put ''ZGkscG49ZGk+Pj4xMyxJaT0wfFRbOV0sWHQ9ODE5MSZJaSxlbj1JaT4+PjEzO3gubmVnYXRpdmU9cC5uZWdhdGl2ZV5iLm5lZ2F0aXZlLHgubGVuZ3RoPTE5O3ZhciBobz0oaisoRT1NYXRoLmltdWwodGUsUnQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKHRlLFB0KSkrTWF0aC5pbXVs''@;'; put 'put ''KHNlLFJ0KXwwKSk8PDEzKXwwO2o9KChBPU1hdGguaW11bChzZSxQdCkpKyhtPj4+MTMpfDApKyhobz4+PjI2KXwwLGhvJj02NzEwODg2MyxFPU1hdGguaW11bChVZSxSdCksbT0obT1NYXRoLmltdWwoVWUsUHQpKStNYXRoLmltdWwoSmUsUnQpfDAsQT1NYXRoLmltdWwoSmUsUHQpO3ZhciBN''@;'; put 'put ''aT0oaisoRT1FK01hdGguaW11bCh0ZSxRdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHNuKXwwKStNYXRoLmltdWwoc2UsUXQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2Usc24pfDApKyhtPj4+MTMpfDApKyhNaT4+PjI2KXwwLE1pJj02NzEwODg2MyxFPU1h''@;'; put 'put ''dGguaW11bChNZSxSdCksbT0obT1NYXRoLmltdWwoTWUsUHQpKStNYXRoLmltdWwodmUsUnQpfDAsQT1NYXRoLmltdWwodmUsUHQpLEU9RStNYXRoLmltdWwoVWUsUXQpfDAsbT0obT1tK01hdGguaW11bChVZSxzbil8MCkrTWF0aC5pbXVsKEplLFF0KXwwLEE9QStNYXRoLmltdWwoSmUsc24p''@;'; put 'put ''fDA7dmFyIHByPShqKyhFPUUrTWF0aC5pbXVsKHRlLGZuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZnQpfDApK01hdGguaW11bChzZSxmbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxmdCl8MCkrKG0+Pj4xMyl8MCkrKHByPj4+MjYpfDAscHImPTY3MTA4''@;'; put 'put ''ODYzLEU9TWF0aC5pbXVsKGplLFJ0KSxtPShtPU1hdGguaW11bChqZSxQdCkpK01hdGguaW11bChEZSxSdCl8MCxBPU1hdGguaW11bChEZSxQdCksRT1FK01hdGguaW11bChNZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHNuKXwwKStNYXRoLmltdWwodmUsUXQpfDAsQT1BK01hdGguaW11''@;'; put 'put ''bCh2ZSxzbil8MCxFPUUrTWF0aC5pbXVsKFVlLGZuKXwwLG09KG09bStNYXRoLmltdWwoVWUsZnQpfDApK01hdGguaW11bChKZSxmbil8MCxBPUErTWF0aC5pbXVsKEplLGZ0KXwwO3ZhciBXbj0oaisoRT1FK01hdGguaW11bCh0ZSxadCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVs''@;'; put 'put ''KHRlLEF0KXwwKStNYXRoLmltdWwoc2UsWnQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsQXQpfDApKyhtPj4+MTMpfDApKyhXbj4+PjI2KXwwLFduJj02NzEwODg2MyxFPU1hdGguaW11bChSZSxSdCksbT0obT1NYXRoLmltdWwoUmUsUHQpKStNYXRoLmltdWwoSWUsUnQpfDAs''@;'; put 'put ''QT1NYXRoLmltdWwoSWUsUHQpLEU9RStNYXRoLmltdWwoamUsUXQpfDAsbT0obT1tK01hdGguaW11bChqZSxzbil8MCkrTWF0aC5pbXVsKERlLFF0KXwwLEE9QStNYXRoLmltdWwoRGUsc24pfDAsRT1FK01hdGguaW11bChNZSxmbil8MCxtPShtPW0rTWF0aC5pbXVsKE1lLGZ0KXwwKStNYXRo''@;'; put 'put ''LmltdWwodmUsZm4pfDAsQT1BK01hdGguaW11bCh2ZSxmdCl8MCxFPUUrTWF0aC5pbXVsKFVlLFp0KXwwLG09KG09bStNYXRoLmltdWwoVWUsQXQpfDApK01hdGguaW11bChKZSxadCl8MCxBPUErTWF0aC5pbXVsKEplLEF0KXwwO3ZhciBLaT0oaisoRT1FK01hdGguaW11bCh0ZSxzdCl8MCl8''@;'; put 'put ''MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHp0KXwwKStNYXRoLmltdWwoc2Usc3QpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsenQpfDApKyhtPj4+MTMpfDApKyhLaT4+PjI2KXwwLEtpJj02NzEwODg2MyxFPU1hdGguaW11bChrZSxSdCksbT0obT1NYXRoLmltdWwo''@;'; put 'put ''a2UsUHQpKStNYXRoLmltdWwoQWUsUnQpfDAsQT1NYXRoLmltdWwoQWUsUHQpLEU9RStNYXRoLmltdWwoUmUsUXQpfDAsbT0obT1tK01hdGguaW11bChSZSxzbil8MCkrTWF0aC5pbXVsKEllLFF0KXwwLEE9QStNYXRoLmltdWwoSWUsc24pfDAsRT1FK01hdGguaW11bChqZSxmbil8MCxtPSht''@;'; put 'put ''PW0rTWF0aC5pbXVsKGplLGZ0KXwwKStNYXRoLmltdWwoRGUsZm4pfDAsQT1BK01hdGguaW11bChEZSxmdCl8MCxFPUUrTWF0aC5pbXVsKE1lLFp0KXwwLG09KG09bStNYXRoLmltdWwoTWUsQXQpfDApK01hdGguaW11bCh2ZSxadCl8MCxBPUErTWF0aC5pbXVsKHZlLEF0KXwwLEU9RStNYXRo''@;'; put 'put ''LmltdWwoVWUsc3QpfDAsbT0obT1tK01hdGguaW11bChVZSx6dCl8MCkrTWF0aC5pbXVsKEplLHN0KXwwLEE9QStNYXRoLmltdWwoSmUsenQpfDA7dmFyIFFyPShqKyhFPUUrTWF0aC5pbXVsKHRlLFdlKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsVHQpfDApK01hdGguaW11''@;'; put 'put ''bChzZSxXZSl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxUdCl8MCkrKG0+Pj4xMyl8MCkrKFFyPj4+MjYpfDAsUXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHJ0LFJ0KSxtPShtPU1hdGguaW11bChydCxQdCkpK01hdGguaW11bChRZSxSdCl8MCxBPU1hdGguaW11bChRZSxQdCks''@;'; put 'put ''RT1FK01hdGguaW11bChrZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHNuKXwwKStNYXRoLmltdWwoQWUsUXQpfDAsQT1BK01hdGguaW11bChBZSxzbil8MCxFPUUrTWF0aC5pbXVsKFJlLGZuKXwwLG09KG09bStNYXRoLmltdWwoUmUsZnQpfDApK01hdGguaW11bChJZSxmbil8MCxBPUEr''@;'; put 'put ''TWF0aC5pbXVsKEllLGZ0KXwwLEU9RStNYXRoLmltdWwoamUsWnQpfDAsbT0obT1tK01hdGguaW11bChqZSxBdCl8MCkrTWF0aC5pbXVsKERlLFp0KXwwLEE9QStNYXRoLmltdWwoRGUsQXQpfDAsRT1FK01hdGguaW11bChNZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHp0KXwwKStNYXRo''@;'; put 'put ''LmltdWwodmUsc3QpfDAsQT1BK01hdGguaW11bCh2ZSx6dCl8MCxFPUUrTWF0aC5pbXVsKFVlLFdlKXwwLG09KG09bStNYXRoLmltdWwoVWUsVHQpfDApK01hdGguaW11bChKZSxXZSl8MCxBPUErTWF0aC5pbXVsKEplLFR0KXwwO3ZhciBKcj0oaisoRT1FK01hdGguaW11bCh0ZSxodCl8MCl8''@;'; put 'put ''MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHh0KXwwKStNYXRoLmltdWwoc2UsaHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UseHQpfDApKyhtPj4+MTMpfDApKyhKcj4+PjI2KXwwLEpyJj02NzEwODg2MyxFPU1hdGguaW11bCh5dCxSdCksbT0obT1NYXRoLmltdWwo''@;'; put 'put ''eXQsUHQpKStNYXRoLmltdWwoTXQsUnQpfDAsQT1NYXRoLmltdWwoTXQsUHQpLEU9RStNYXRoLmltdWwocnQsUXQpfDAsbT0obT1tK01hdGguaW11bChydCxzbil8MCkrTWF0aC5pbXVsKFFlLFF0KXwwLEE9QStNYXRoLmltdWwoUWUsc24pfDAsRT1FK01hdGguaW11bChrZSxmbil8MCxtPSht''@;'; put 'put ''PW0rTWF0aC5pbXVsKGtlLGZ0KXwwKStNYXRoLmltdWwoQWUsZm4pfDAsQT1BK01hdGguaW11bChBZSxmdCl8MCxFPUUrTWF0aC5pbXVsKFJlLFp0KXwwLG09KG09bStNYXRoLmltdWwoUmUsQXQpfDApK01hdGguaW11bChJZSxadCl8MCxBPUErTWF0aC5pbXVsKEllLEF0KXwwLEU9RStNYXRo''@;'; put 'put ''LmltdWwoamUsc3QpfDAsbT0obT1tK01hdGguaW11bChqZSx6dCl8MCkrTWF0aC5pbXVsKERlLHN0KXwwLEE9QStNYXRoLmltdWwoRGUsenQpfDAsRT1FK01hdGguaW11bChNZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLFR0KXwwKStNYXRoLmltdWwodmUsV2UpfDAsQT1BK01hdGguaW11''@;'; put 'put ''bCh2ZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFVlLGh0KXwwLG09KG09bStNYXRoLmltdWwoVWUseHQpfDApK01hdGguaW11bChKZSxodCl8MCxBPUErTWF0aC5pbXVsKEplLHh0KXwwO3ZhciBCaT0oaisoRT1FK01hdGguaW11bCh0ZSxvbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVs''@;'; put 'put ''KHRlLGp0KXwwKStNYXRoLmltdWwoc2Usb24pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsanQpfDApKyhtPj4+MTMpfDApKyhCaT4+PjI2KXwwLEJpJj02NzEwODg2MyxFPU1hdGguaW11bChpdCxSdCksbT0obT1NYXRoLmltdWwoaXQsUHQpKStNYXRoLmltdWwoJGUsUnQpfDAs''@;'; put 'put ''QT1NYXRoLmltdWwoJGUsUHQpLEU9RStNYXRoLmltdWwoeXQsUXQpfDAsbT0obT1tK01hdGguaW11bCh5dCxzbil8MCkrTWF0aC5pbXVsKE10LFF0KXwwLEE9QStNYXRoLmltdWwoTXQsc24pfDAsRT1FK01hdGguaW11bChydCxmbil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LGZ0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoUWUsZm4pfDAsQT1BK01hdGguaW11bChRZSxmdCl8MCxFPUUrTWF0aC5pbXVsKGtlLFp0KXwwLG09KG09bStNYXRoLmltdWwoa2UsQXQpfDApK01hdGguaW11bChBZSxadCl8MCxBPUErTWF0aC5pbXVsKEFlLEF0KXwwLEU9RStNYXRoLmltdWwoUmUsc3QpfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bChSZSx6dCl8MCkrTWF0aC5pbXVsKEllLHN0KXwwLEE9QStNYXRoLmltdWwoSWUsenQpfDAsRT1FK01hdGguaW11bChqZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGplLFR0KXwwKStNYXRoLmltdWwoRGUsV2UpfDAsQT1BK01hdGguaW11bChEZSxUdCl8MCxFPUUrTWF0aC5pbXVsKE1l''@;'; put 'put ''LGh0KXwwLG09KG09bStNYXRoLmltdWwoTWUseHQpfDApK01hdGguaW11bCh2ZSxodCl8MCxBPUErTWF0aC5pbXVsKHZlLHh0KXwwLEU9RStNYXRoLmltdWwoVWUsb24pfDAsbT0obT1tK01hdGguaW11bChVZSxqdCl8MCkrTWF0aC5pbXVsKEplLG9uKXwwLEE9QStNYXRoLmltdWwoSmUsanQp''@;'; put 'put ''fDA7dmFyIFZpPShqKyhFPUUrTWF0aC5pbXVsKHRlLGNuKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUscG4pfDApK01hdGguaW11bChzZSxjbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxwbil8MCkrKG0+Pj4xMyl8MCkrKFZpPj4+MjYpfDAsVmkmPTY3MTA4''@;'; put 'put ''ODYzLEU9TWF0aC5pbXVsKEhlLFJ0KSxtPShtPU1hdGguaW11bChIZSxQdCkpK01hdGguaW11bChkdCxSdCl8MCxBPU1hdGguaW11bChkdCxQdCksRT1FK01hdGguaW11bChpdCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHNuKXwwKStNYXRoLmltdWwoJGUsUXQpfDAsQT1BK01hdGguaW11''@;'; put 'put ''bCgkZSxzbil8MCxFPUUrTWF0aC5pbXVsKHl0LGZuKXwwLG09KG09bStNYXRoLmltdWwoeXQsZnQpfDApK01hdGguaW11bChNdCxmbil8MCxBPUErTWF0aC5pbXVsKE10LGZ0KXwwLEU9RStNYXRoLmltdWwocnQsWnQpfDAsbT0obT1tK01hdGguaW11bChydCxBdCl8MCkrTWF0aC5pbXVsKFFl''@;'; put 'put ''LFp0KXwwLEE9QStNYXRoLmltdWwoUWUsQXQpfDAsRT1FK01hdGguaW11bChrZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHp0KXwwKStNYXRoLmltdWwoQWUsc3QpfDAsQT1BK01hdGguaW11bChBZSx6dCl8MCxFPUUrTWF0aC5pbXVsKFJlLFdlKXwwLG09KG09bStNYXRoLmltdWwoUmUs''@;'; put 'put ''VHQpfDApK01hdGguaW11bChJZSxXZSl8MCxBPUErTWF0aC5pbXVsKEllLFR0KXwwLEU9RStNYXRoLmltdWwoamUsaHQpfDAsbT0obT1tK01hdGguaW11bChqZSx4dCl8MCkrTWF0aC5pbXVsKERlLGh0KXwwLEE9QStNYXRoLmltdWwoRGUseHQpfDAsRT1FK01hdGguaW11bChNZSxvbil8MCxt''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKE1lLGp0KXwwKStNYXRoLmltdWwodmUsb24pfDAsQT1BK01hdGguaW11bCh2ZSxqdCl8MCxFPUUrTWF0aC5pbXVsKFVlLGNuKXwwLG09KG09bStNYXRoLmltdWwoVWUscG4pfDApK01hdGguaW11bChKZSxjbil8MCxBPUErTWF0aC5pbXVsKEplLHBuKXwwO3ZhciBJ''@;'; put 'put ''bz0oaisoRT1FK01hdGguaW11bCh0ZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGVuKXwwKStNYXRoLmltdWwoc2UsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZW4pfDApKyhtPj4+MTMpfDApKyhJbz4+PjI2KXwwLElvJj02NzEwODg2MyxFPU1h''@;'; put 'put ''dGguaW11bChIZSxRdCksbT0obT1NYXRoLmltdWwoSGUsc24pKStNYXRoLmltdWwoZHQsUXQpfDAsQT1NYXRoLmltdWwoZHQsc24pLEU9RStNYXRoLmltdWwoaXQsZm4pfDAsbT0obT1tK01hdGguaW11bChpdCxmdCl8MCkrTWF0aC5pbXVsKCRlLGZuKXwwLEE9QStNYXRoLmltdWwoJGUsZnQp''@;'; put 'put ''fDAsRT1FK01hdGguaW11bCh5dCxadCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LEF0KXwwKStNYXRoLmltdWwoTXQsWnQpfDAsQT1BK01hdGguaW11bChNdCxBdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LHN0KXwwLG09KG09bStNYXRoLmltdWwocnQsenQpfDApK01hdGguaW11bChRZSxzdCl8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKFFlLHp0KXwwLEU9RStNYXRoLmltdWwoa2UsV2UpfDAsbT0obT1tK01hdGguaW11bChrZSxUdCl8MCkrTWF0aC5pbXVsKEFlLFdlKXwwLEE9QStNYXRoLmltdWwoQWUsVHQpfDAsRT1FK01hdGguaW11bChSZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHh0KXwwKStN''@;'; put 'put ''YXRoLmltdWwoSWUsaHQpfDAsQT1BK01hdGguaW11bChJZSx4dCl8MCxFPUUrTWF0aC5pbXVsKGplLG9uKXwwLG09KG09bStNYXRoLmltdWwoamUsanQpfDApK01hdGguaW11bChEZSxvbil8MCxBPUErTWF0aC5pbXVsKERlLGp0KXwwLEU9RStNYXRoLmltdWwoTWUsY24pfDAsbT0obT1tK01h''@;'; put 'put ''dGguaW11bChNZSxwbil8MCkrTWF0aC5pbXVsKHZlLGNuKXwwLEE9QStNYXRoLmltdWwodmUscG4pfDA7dmFyIE9yPShqKyhFPUUrTWF0aC5pbXVsKFVlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoVWUsZW4pfDApK01hdGguaW11bChKZSxYdCl8MCkpPDwxMyl8MDtqPSgo''@;'; put 'put ''QT1BK01hdGguaW11bChKZSxlbil8MCkrKG0+Pj4xMyl8MCkrKE9yPj4+MjYpfDAsT3ImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGZuKSxtPShtPU1hdGguaW11bChIZSxmdCkpK01hdGguaW11bChkdCxmbil8MCxBPU1hdGguaW11bChkdCxmdCksRT1FK01hdGguaW11bChpdCxadCl8MCxt''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKGl0LEF0KXwwKStNYXRoLmltdWwoJGUsWnQpfDAsQT1BK01hdGguaW11bCgkZSxBdCl8MCxFPUUrTWF0aC5pbXVsKHl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoeXQsenQpfDApK01hdGguaW11bChNdCxzdCl8MCxBPUErTWF0aC5pbXVsKE10LHp0KXwwLEU9RStN''@;'; put 'put ''YXRoLmltdWwocnQsV2UpfDAsbT0obT1tK01hdGguaW11bChydCxUdCl8MCkrTWF0aC5pbXVsKFFlLFdlKXwwLEE9QStNYXRoLmltdWwoUWUsVHQpfDAsRT1FK01hdGguaW11bChrZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHh0KXwwKStNYXRoLmltdWwoQWUsaHQpfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bChBZSx4dCl8MCxFPUUrTWF0aC5pbXVsKFJlLG9uKXwwLG09KG09bStNYXRoLmltdWwoUmUsanQpfDApK01hdGguaW11bChJZSxvbil8MCxBPUErTWF0aC5pbXVsKEllLGp0KXwwLEU9RStNYXRoLmltdWwoamUsY24pfDAsbT0obT1tK01hdGguaW11bChqZSxwbil8MCkrTWF0aC5pbXVs''@;'; put 'put ''KERlLGNuKXwwLEE9QStNYXRoLmltdWwoRGUscG4pfDA7dmFyIFlpPShqKyhFPUUrTWF0aC5pbXVsKE1lLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoTWUsZW4pfDApK01hdGguaW11bCh2ZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCh2ZSxlbil8MCkrKG0+''@;'; put 'put ''Pj4xMyl8MCkrKFlpPj4+MjYpfDAsWWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFp0KSxtPShtPU1hdGguaW11bChIZSxBdCkpK01hdGguaW11bChkdCxadCl8MCxBPU1hdGguaW11bChkdCxBdCksRT1FK01hdGguaW11bChpdCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHp0KXwwKStN''@;'; put 'put ''YXRoLmltdWwoJGUsc3QpfDAsQT1BK01hdGguaW11bCgkZSx6dCl8MCxFPUUrTWF0aC5pbXVsKHl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoeXQsVHQpfDApK01hdGguaW11bChNdCxXZSl8MCxBPUErTWF0aC5pbXVsKE10LFR0KXwwLEU9RStNYXRoLmltdWwocnQsaHQpfDAsbT0obT1tK01h''@;'; put 'put ''dGguaW11bChydCx4dCl8MCkrTWF0aC5pbXVsKFFlLGh0KXwwLEE9QStNYXRoLmltdWwoUWUseHQpfDAsRT1FK01hdGguaW11bChrZSxvbil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLGp0KXwwKStNYXRoLmltdWwoQWUsb24pfDAsQT1BK01hdGguaW11bChBZSxqdCl8MCxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KFJlLGNuKXwwLG09KG09bStNYXRoLmltdWwoUmUscG4pfDApK01hdGguaW11bChJZSxjbil8MCxBPUErTWF0aC5pbXVsKEllLHBuKXwwO3ZhciBnbz0oaisoRT1FK01hdGguaW11bChqZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGplLGVuKXwwKStNYXRoLmltdWwoRGUs''@;'; put 'put ''WHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoRGUsZW4pfDApKyhtPj4+MTMpfDApKyhnbz4+PjI2KXwwLGdvJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxzdCksbT0obT1NYXRoLmltdWwoSGUsenQpKStNYXRoLmltdWwoZHQsc3QpfDAsQT1NYXRoLmltdWwoZHQsenQpLEU9RStN''@;'; put 'put ''YXRoLmltdWwoaXQsV2UpfDAsbT0obT1tK01hdGguaW11bChpdCxUdCl8MCkrTWF0aC5pbXVsKCRlLFdlKXwwLEE9QStNYXRoLmltdWwoJGUsVHQpfDAsRT1FK01hdGguaW11bCh5dCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHh0KXwwKStNYXRoLmltdWwoTXQsaHQpfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bChNdCx4dCl8MCxFPUUrTWF0aC5pbXVsKHJ0LG9uKXwwLG09KG09bStNYXRoLmltdWwocnQsanQpfDApK01hdGguaW11bChRZSxvbil8MCxBPUErTWF0aC5pbXVsKFFlLGp0KXwwLEU9RStNYXRoLmltdWwoa2UsY24pfDAsbT0obT1tK01hdGguaW11bChrZSxwbil8MCkrTWF0aC5pbXVs''@;'; put 'put ''KEFlLGNuKXwwLEE9QStNYXRoLmltdWwoQWUscG4pfDA7dmFyIGVyPShqKyhFPUUrTWF0aC5pbXVsKFJlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoUmUsZW4pfDApK01hdGguaW11bChJZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChJZSxlbil8MCkrKG0+''@;'; put 'put ''Pj4xMyl8MCkrKGVyPj4+MjYpfDAsZXImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFdlKSxtPShtPU1hdGguaW11bChIZSxUdCkpK01hdGguaW11bChkdCxXZSl8MCxBPU1hdGguaW11bChkdCxUdCksRT1FK01hdGguaW11bChpdCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHh0KXwwKStN''@;'; put 'put ''YXRoLmltdWwoJGUsaHQpfDAsQT1BK01hdGguaW11bCgkZSx4dCl8MCxFPUUrTWF0aC5pbXVsKHl0LG9uKXwwLG09KG09bStNYXRoLmltdWwoeXQsanQpfDApK01hdGguaW11bChNdCxvbil8MCxBPUErTWF0aC5pbXVsKE10LGp0KXwwLEU9RStNYXRoLmltdWwocnQsY24pfDAsbT0obT1tK01h''@;'; put 'put ''dGguaW11bChydCxwbil8MCkrTWF0aC5pbXVsKFFlLGNuKXwwLEE9QStNYXRoLmltdWwoUWUscG4pfDA7dmFyIGNvPShqKyhFPUUrTWF0aC5pbXVsKGtlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoa2UsZW4pfDApK01hdGguaW11bChBZSxYdCl8MCkpPDwxMyl8MDtqPSgo''@;'; put 'put ''QT1BK01hdGguaW11bChBZSxlbil8MCkrKG0+Pj4xMyl8MCkrKGNvPj4+MjYpfDAsY28mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLGh0KSxtPShtPU1hdGguaW11bChIZSx4dCkpK01hdGguaW11bChkdCxodCl8MCxBPU1hdGguaW11bChkdCx4dCksRT1FK01hdGguaW11bChpdCxvbil8MCxt''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKGl0LGp0KXwwKStNYXRoLmltdWwoJGUsb24pfDAsQT1BK01hdGguaW11bCgkZSxqdCl8MCxFPUUrTWF0aC5pbXVsKHl0LGNuKXwwLG09KG09bStNYXRoLmltdWwoeXQscG4pfDApK01hdGguaW11bChNdCxjbil8MCxBPUErTWF0aC5pbXVsKE10LHBuKXwwO3ZhciBf''@;'; put 'put ''bz0oaisoRT1FK01hdGguaW11bChydCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHJ0LGVuKXwwKStNYXRoLmltdWwoUWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoUWUsZW4pfDApKyhtPj4+MTMpfDApKyhfbz4+PjI2KXwwLF9vJj02NzEwODg2MyxFPU1h''@;'; put 'put ''dGguaW11bChIZSxvbiksbT0obT1NYXRoLmltdWwoSGUsanQpKStNYXRoLmltdWwoZHQsb24pfDAsQT1NYXRoLmltdWwoZHQsanQpLEU9RStNYXRoLmltdWwoaXQsY24pfDAsbT0obT1tK01hdGguaW11bChpdCxwbil8MCkrTWF0aC5pbXVsKCRlLGNuKXwwLEE9QStNYXRoLmltdWwoJGUscG4p''@;'; put 'put ''fDA7dmFyIE9vPShqKyhFPUUrTWF0aC5pbXVsKHl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoeXQsZW4pfDApK01hdGguaW11bChNdCxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChNdCxlbil8MCkrKG0+Pj4xMyl8MCkrKE9vPj4+MjYpfDAsT28mPTY3MTA4''@;'; put 'put ''ODYzLEU9TWF0aC5pbXVsKEhlLGNuKSxtPShtPU1hdGguaW11bChIZSxwbikpK01hdGguaW11bChkdCxjbil8MCxBPU1hdGguaW11bChkdCxwbik7dmFyIEhvPShqKyhFPUUrTWF0aC5pbXVsKGl0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoaXQsZW4pfDApK01hdGguaW11''@;'; put 'put ''bCgkZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bCgkZSxlbil8MCkrKG0+Pj4xMyl8MCkrKEhvPj4+MjYpfDAsSG8mPTY3MTA4ODYzO3ZhciBlaT0oaisoRT1NYXRoLmltdWwoSGUsWHQpKXwwKSsoKDgxOTEmKG09KG09TWF0aC5pbXVsKEhlLGVuKSkrTWF0aC5pbXVsKGR0LFh0''@;'; put 'put ''KXwwKSk8PDEzKXwwO3JldHVybiBqPSgoQT1NYXRoLmltdWwoZHQsZW4pKSsobT4+PjEzKXwwKSsoZWk+Pj4yNil8MCxlaSY9NjcxMDg4NjMsSFswXT1obyxIWzFdPU1pLEhbMl09cHIsSFszXT1XbixIWzRdPUtpLEhbNV09UXIsSFs2XT1KcixIWzddPUJpLEhbOF09VmksSFs5XT1JbyxIWzEw''@;'; put 'put ''XT1PcixIWzExXT1ZaSxIWzEyXT1nbyxIWzEzXT1lcixIWzE0XT1jbyxIWzE1XT1fbyxIWzE2XT1PbyxIWzE3XT1IbyxIWzE4XT1laSwwIT09aiYmKEhbMTldPWoseC5sZW5ndGgrKykseH07ZnVuY3Rpb24gZWUoVixwLGIpe3JldHVybihuZXcgSikubXVscChWLHAsYil9ZnVuY3Rpb24gSihW''@;'; put 'put ''LHApe3RoaXMueD1WLHRoaXMueT1wfU1hdGguaW11bHx8KFk9Vyksdy5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMubGVuZ3RoK3AubGVuZ3RoO3JldHVybiB4PTEwPT09dGhpcy5sZW5ndGgmJjEwPT09cC5sZW5ndGg/WSh0aGlzLHAsYik6Qzw2Mz9XKHRoaXMs''@;'; put 'put ''cCxiKTpDPDEwMjQ/ZnVuY3Rpb24gWChWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmUsYi5sZW5ndGg9Vi5sZW5ndGgrcC5sZW5ndGg7Zm9yKHZhciB4PTAsQz0wLFQ9MDtUPGIubGVuZ3RoLTE7VCsrKXt2YXIgSD1DO0M9MDtmb3IodmFyIGo9NjcxMDg4NjMmeCxFPU1h''@;'; put 'put ''dGgubWluKFQscC5sZW5ndGgtMSksbT1NYXRoLm1heCgwLFQtVi5sZW5ndGgrMSk7bTw9RTttKyspe3ZhciBzZT0oMHxWLndvcmRzW1QtbV0pKigwfHAud29yZHNbbV0pLHdlPTY3MTA4ODYzJnNlO2o9NjcxMDg4NjMmKHdlPXdlK2p8MCksQys9KEg9KEg9SCsoc2UvNjcxMDg4NjR8MCl8MCkr''@;'; put 'put ''KHdlPj4+MjYpfDApPj4+MjYsSCY9NjcxMDg4NjN9Yi53b3Jkc1tUXT1qLHg9SCxIPUN9cmV0dXJuIDAhPT14P2Iud29yZHNbVF09eDpiLmxlbmd0aC0tLGIuc3RyaXAoKX0odGhpcyxwLGIpOmVlKHRoaXMscCxiKSx4fSxKLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKHApe2Zvcih2YXIg''@;'; put 'put ''Yj1uZXcgQXJyYXkocCkseD13LnByb3RvdHlwZS5fY291bnRCaXRzKHApLTEsQz0wO0M8cDtDKyspYltDXT10aGlzLnJldkJpbihDLHgscCk7cmV0dXJuIGJ9LEoucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbihwLGIseCl7aWYoMD09PXB8fHA9PT14LTEpcmV0dXJuIHA7Zm9yKHZhciBDPTAs''@;'; put 'put ''VD0wO1Q8YjtUKyspQ3w9KDEmcCk8PGItVC0xLHA+Pj0xO3JldHVybiBDfSxKLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXtmb3IodmFyIGo9MDtqPEg7aisrKUNbal09YltwW2pdXSxUW2pdPXhbcFtqXV19LEoucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihw''@;'; put 'put ''LGIseCxDLFQsSCl7dGhpcy5wZXJtdXRlKEgscCxiLHgsQyxUKTtmb3IodmFyIGo9MTtqPFQ7ajw8PTEpZm9yKHZhciBFPWo8PDEsbT1NYXRoLmNvcygyKk1hdGguUEkvRSksQT1NYXRoLnNpbigyKk1hdGguUEkvRSksb2U9MDtvZTxUO29lKz1FKWZvcih2YXIgdGU9bSxzZT1BLHdlPTA7d2U8''@;'; put 'put ''ajt3ZSsrKXt2YXIgVWU9eFtvZSt3ZV0sSmU9Q1tvZSt3ZV0sYXQ9eFtvZSt3ZStqXSxNZT1DW29lK3dlK2pdLHZlPXRlKmF0LXNlKk1lO01lPXRlKk1lK3NlKmF0LHhbb2Urd2VdPVVlKyhhdD12ZSksQ1tvZSt3ZV09SmUrTWUseFtvZSt3ZStqXT1VZS1hdCxDW29lK3dlK2pdPUplLU1lLHdl''@;'; put 'put ''IT09RSYmKHZlPW0qdGUtQSpzZSxzZT1tKnNlK0EqdGUsdGU9dmUpfX0sSi5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24ocCxiKXt2YXIgeD0xfE1hdGgubWF4KGIscCksQz0xJngsVD0wO2Zvcih4PXgvMnwwO3g7eD4+Pj0xKVQrKztyZXR1cm4gMTw8VCsxK0N9LEoucHJvdG90eXBl''@;'; put 'put ''LmNvbmp1Z2F0ZT1mdW5jdGlvbihwLGIseCl7aWYoISh4PD0xKSlmb3IodmFyIEM9MDtDPHgvMjtDKyspe3ZhciBUPXBbQ107cFtDXT1wW3gtQy0xXSxwW3gtQy0xXT1ULFQ9YltDXSxiW0NdPS1iW3gtQy0xXSxiW3gtQy0xXT0tVH19LEoucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlv''@;'; put 'put ''bihwLGIpe2Zvcih2YXIgeD0wLEM9MDtDPGIvMjtDKyspe3ZhciBUPTgxOTIqTWF0aC5yb3VuZChwWzIqQysxXS9iKStNYXRoLnJvdW5kKHBbMipDXS9iKSt4O3BbQ109NjcxMDg4NjMmVCx4PVQ8NjcxMDg4NjQ/MDpULzY3MTA4ODY0fDB9cmV0dXJuIHB9LEoucHJvdG90eXBlLmNvbnZlcnQx''@;'; put 'put ''M2I9ZnVuY3Rpb24ocCxiLHgsQyl7Zm9yKHZhciBUPTAsSD0wO0g8YjtIKyspeFsyKkhdPTgxOTEmKFQrPTB8cFtIXSkseFsyKkgrMV09ODE5MSYoVD4+Pj0xMyksVD4+Pj0xMztmb3IoSD0yKmI7SDxDOysrSCl4W0hdPTA7ZygwPT09VCksZyghKC04MTkyJlQpKX0sSi5wcm90b3R5cGUuc3R1''@;'; put 'put ''Yj1mdW5jdGlvbihwKXtmb3IodmFyIGI9bmV3IEFycmF5KHApLHg9MDt4PHA7eCsrKWJbeF09MDtyZXR1cm4gYn0sSi5wcm90b3R5cGUubXVscD1mdW5jdGlvbihwLGIseCl7dmFyIEM9Mip0aGlzLmd1ZXNzTGVuMTNiKHAubGVuZ3RoLGIubGVuZ3RoKSxUPXRoaXMubWFrZVJCVChDKSxIPXRo''@;'; put 'put ''aXMuc3R1YihDKSxqPW5ldyBBcnJheShDKSxFPW5ldyBBcnJheShDKSxtPW5ldyBBcnJheShDKSxBPW5ldyBBcnJheShDKSxvZT1uZXcgQXJyYXkoQyksdGU9bmV3IEFycmF5KEMpLHNlPXgud29yZHM7c2UubGVuZ3RoPUMsdGhpcy5jb252ZXJ0MTNiKHAud29yZHMscC5sZW5ndGgsaixDKSx0''@;'; put 'put ''aGlzLmNvbnZlcnQxM2IoYi53b3JkcyxiLmxlbmd0aCxBLEMpLHRoaXMudHJhbnNmb3JtKGosSCxFLG0sQyxUKSx0aGlzLnRyYW5zZm9ybShBLEgsb2UsdGUsQyxUKTtmb3IodmFyIHdlPTA7d2U8Qzt3ZSsrKXt2YXIgVWU9RVt3ZV0qb2Vbd2VdLW1bd2VdKnRlW3dlXTttW3dlXT1FW3dlXSp0''@;'; put 'put ''ZVt3ZV0rbVt3ZV0qb2Vbd2VdLEVbd2VdPVVlfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShFLG0sQyksdGhpcy50cmFuc2Zvcm0oRSxtLHNlLEgsQyxUKSx0aGlzLmNvbmp1Z2F0ZShzZSxILEMpLHRoaXMubm9ybWFsaXplMTNiKHNlLEMpLHgubmVnYXRpdmU9cC5uZWdhdGl2ZV5iLm5lZ2F0aXZl''@;'; put 'put ''LHgubGVuZ3RoPXAubGVuZ3RoK2IubGVuZ3RoLHguc3RyaXAoKX0sdy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHApe3ZhciBiPW5ldyB3KG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtwLmxlbmd0aCksdGhpcy5tdWxUbyhwLGIpfSx3LnByb3RvdHlwZS5tdWxm''@;'; put 'put ''PWZ1bmN0aW9uKHApe3ZhciBiPW5ldyB3KG51bGwpO3JldHVybiBiLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCtwLmxlbmd0aCksZWUodGhpcyxwLGIpfSx3LnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8ocCx0aGlzKX0sdy5wcm90b3R5''@;'; put 'put ''cGUuaW11bG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCk7Zm9yKHZhciBiPTAseD0wO3g8dGhpcy5sZW5ndGg7eCsrKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSpwLFQ9KDY3MTA4ODYzJkMpKyg2NzEwODg2MyZiKTtiPj49MjYsYis9Qy82NzEwODg2''@;'; put 'put ''NHwwLGIrPVQ+Pj4yNix0aGlzLndvcmRzW3hdPTY3MTA4ODYzJlR9cmV0dXJuIDAhPT1iJiYodGhpcy53b3Jkc1t4XT1iLHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLm11bG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbihwKX0sdy5wcm90b3R5cGUuc3Fy''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSx3LnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSx3LnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCl7dmFyIGI9ZnVuY3Rpb24gVShWKXtmb3IodmFyIHA9bmV3IEFycmF5KFYu''@;'; put 'put ''Yml0TGVuZ3RoKCkpLGI9MDtiPHAubGVuZ3RoO2IrKyl7dmFyIEM9YiUyNjtwW2JdPShWLndvcmRzW2IvMjZ8MF0mMTw8Qyk+Pj5DfXJldHVybiBwfShwKTtpZigwPT09Yi5sZW5ndGgpcmV0dXJuIG5ldyB3KDEpO2Zvcih2YXIgeD10aGlzLEM9MDtDPGIubGVuZ3RoJiYwPT09YltDXTtDKyss''@;'; put 'put ''eD14LnNxcigpKTtpZigrK0M8Yi5sZW5ndGgpZm9yKHZhciBUPXguc3FyKCk7QzxiLmxlbmd0aDtDKyssVD1ULnNxcigpKTAhPT1iW0NdJiYoeD14Lm11bChUKSk7cmV0dXJuIHh9LHcucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFy''@;'; put 'put ''IFQsYj1wJTI2LHg9KHAtYikvMjYsQz02NzEwODg2Mz4+PjI2LWI8PDI2LWI7aWYoMCE9PWIpe3ZhciBIPTA7Zm9yKFQ9MDtUPHRoaXMubGVuZ3RoO1QrKyl7dmFyIGo9dGhpcy53b3Jkc1tUXSZDO3RoaXMud29yZHNbVF09KDB8dGhpcy53b3Jkc1tUXSktajw8YnxILEg9aj4+PjI2LWJ9SCYm''@;'; put 'put ''KHRoaXMud29yZHNbVF09SCx0aGlzLmxlbmd0aCsrKX1pZigwIT09eCl7Zm9yKFQ9dGhpcy5sZW5ndGgtMTtUPj0wO1QtLSl0aGlzLndvcmRzW1QreF09dGhpcy53b3Jkc1tUXTtmb3IoVD0wO1Q8eDtUKyspdGhpcy53b3Jkc1tUXT0wO3RoaXMubGVuZ3RoKz14fXJldHVybiB0aGlzLnN0cmlw''@;'; put 'put ''KCl9LHcucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKHApe3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbihwKX0sdy5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKHAsYix4KXt2YXIgQztnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCksQz1iPyhiLWIlMjYpLzI2OjA7''@;'; put 'put ''dmFyIFQ9cCUyNixIPU1hdGgubWluKChwLVQpLzI2LHRoaXMubGVuZ3RoKSxqPTY3MTA4ODYzXjY3MTA4ODYzPj4+VDw8VCxFPXg7aWYoQy09SCxDPU1hdGgubWF4KDAsQyksRSl7Zm9yKHZhciBtPTA7bTxIO20rKylFLndvcmRzW21dPXRoaXMud29yZHNbbV07RS5sZW5ndGg9SH1pZigwIT09''@;'; put 'put ''SClpZih0aGlzLmxlbmd0aD5IKWZvcih0aGlzLmxlbmd0aC09SCxtPTA7bTx0aGlzLmxlbmd0aDttKyspdGhpcy53b3Jkc1ttXT10aGlzLndvcmRzW20rSF07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgQT0wO2ZvcihtPXRoaXMubGVuZ3RoLTE7bT49MCYmKDAhPT1B''@;'; put 'put ''fHxtPj1DKTttLS0pe3ZhciBvZT0wfHRoaXMud29yZHNbbV07dGhpcy53b3Jkc1ttXT1BPDwyNi1UfG9lPj4+VCxBPW9lJmp9cmV0dXJuIEUmJjAhPT1BJiYoRS53b3Jkc1tFLmxlbmd0aCsrXT1BKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhp''@;'; put 'put ''cy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKHAsYix4KX0sdy5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKHApfSx3LnByb3RvdHlwZS51''@;'; put 'put ''c2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbihwKX0sdy5wcm90b3R5cGUuc2hybj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKHApfSx3LnByb3RvdHlwZS51c2hybj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybihw''@;'; put 'put ''KX0sdy5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPXAlMjYseD0ocC1iKS8yNjtyZXR1cm4hKHRoaXMubGVuZ3RoPD14fHwhKHRoaXMud29yZHNbeF0mMTw8YikpfSx3LnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24ocCl7Zygi''@;'; put 'put ''bnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBiPXAlMjYseD0ocC1iKS8yNjtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzIiksdGhpcy5sZW5ndGg8PXg/dGhpczooMCE9PWImJngrKyx0aGlzLmxlbmd0aD1NYXRo''@;'; put 'put ''Lm1pbih4LHRoaXMubGVuZ3RoKSwwIT09YiYmKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPTY3MTA4ODYzXjY3MTA4ODYzPj4+Yjw8YiksdGhpcy5zdHJpcCgpKX0sdy5wcm90b3R5cGUubWFza249ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24ocCl9LHcucHJvdG90''@;'; put 'put ''eXBlLmlhZGRuPWZ1bmN0aW9uKHApe3JldHVybiBnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KSxwPDA/dGhpcy5pc3VibigtcCk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTxwPyh0aGlzLndvcmRzWzBdPXAtKDB8dGhpcy53''@;'; put 'put ''b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihwKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4ocCl9LHcucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihwKXt0aGlzLndvcmRzWzBdKz1wO2Zvcih2YXIgYj0wO2I8dGhp''@;'; put 'put ''cy5sZW5ndGgmJnRoaXMud29yZHNbYl0+PTY3MTA4ODY0O2IrKyl0aGlzLndvcmRzW2JdLT02NzEwODg2NCxiPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW2IrMV09MTp0aGlzLndvcmRzW2IrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsYisxKSx0aGlz''@;'; put 'put ''fSx3LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihwKXtpZihnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KSxwPDApcmV0dXJuIHRoaXMuaWFkZG4oLXApO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihwKSx0aGlzLm5lZ2F0''@;'; put 'put ''aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1wLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXTwwO2IrKyl0aGlz''@;'; put 'put ''LndvcmRzW2JdKz02NzEwODg2NCx0aGlzLndvcmRzW2IrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKHApfSx3LnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25l''@;'; put 'put ''KCkuaXN1Ym4ocCl9LHcucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LHcucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSx3LnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24ocCxiLHgp''@;'; put 'put ''e3ZhciBUO3RoaXMuX2V4cGFuZChwLmxlbmd0aCt4KTt2YXIgSCxqPTA7Zm9yKFQ9MDtUPHAubGVuZ3RoO1QrKyl7SD0oMHx0aGlzLndvcmRzW1QreF0pK2o7dmFyIEU9KDB8cC53b3Jkc1tUXSkqYjtqPSgoSC09NjcxMDg4NjMmRSk+PjI2KS0oRS82NzEwODg2NHwwKSx0aGlzLndvcmRzW1Qr''@;'; put 'put ''eF09NjcxMDg4NjMmSH1mb3IoO1Q8dGhpcy5sZW5ndGgteDtUKyspaj0oSD0oMHx0aGlzLndvcmRzW1QreF0pK2opPj4yNix0aGlzLndvcmRzW1QreF09NjcxMDg4NjMmSDtpZigwPT09ailyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihnKC0xPT09aiksaj0wLFQ9MDtUPHRoaXMubGVuZ3RoO1Qr''@;'; put 'put ''KylqPShIPS0oMHx0aGlzLndvcmRzW1RdKStqKT4+MjYsdGhpcy53b3Jkc1tUXT02NzEwODg2MyZIO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5jbG9uZSgpLFQ9cCxIPTB8VC53b3Jk''@;'; put 'put ''c1tULmxlbmd0aC0xXTswIT0oeD0yNi10aGlzLl9jb3VudEJpdHMoSCkpJiYoVD1ULnVzaGxuKHgpLEMuaXVzaGxuKHgpLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdKTt2YXIgbSxFPUMubGVuZ3RoLVQubGVuZ3RoO2lmKCJtb2QiIT09Yil7KG09bmV3IHcobnVsbCkpLmxlbmd0aD1FKzEsbS53''@;'; put 'put ''b3Jkcz1uZXcgQXJyYXkobS5sZW5ndGgpO2Zvcih2YXIgQT0wO0E8bS5sZW5ndGg7QSsrKW0ud29yZHNbQV09MH12YXIgb2U9Qy5jbG9uZSgpLl9pc2hsbnN1Ym11bChULDEsRSk7MD09PW9lLm5lZ2F0aXZlJiYoQz1vZSxtJiYobS53b3Jkc1tFXT0xKSk7Zm9yKHZhciB0ZT1FLTE7dGU+PTA7''@;'; put 'put ''dGUtLSl7dmFyIHNlPTY3MTA4ODY0KigwfEMud29yZHNbVC5sZW5ndGgrdGVdKSsoMHxDLndvcmRzW1QubGVuZ3RoK3RlLTFdKTtmb3Ioc2U9TWF0aC5taW4oc2UvSHwwLDY3MTA4ODYzKSxDLl9pc2hsbnN1Ym11bChULHNlLHRlKTswIT09Qy5uZWdhdGl2ZTspc2UtLSxDLm5lZ2F0aXZlPTAs''@;'; put 'put ''Qy5faXNobG5zdWJtdWwoVCwxLHRlKSxDLmlzWmVybygpfHwoQy5uZWdhdGl2ZV49MSk7bSYmKG0ud29yZHNbdGVdPXNlKX1yZXR1cm4gbSYmbS5zdHJpcCgpLEMuc3RyaXAoKSwiZGl2IiE9PWImJjAhPT14JiZDLml1c2hybih4KSx7ZGl2Om18fG51bGwsbW9kOkN9fSx3LnByb3RvdHlwZS5k''@;'; put 'put ''aXZtb2Q9ZnVuY3Rpb24ocCxiLHgpe3JldHVybiBnKCFwLmlzWmVybygpKSx0aGlzLmlzWmVybygpP3tkaXY6bmV3IHcoMCksbW9kOm5ldyB3KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QocCxiKSwibW9kIiE9PWImJihDPUguZGl2''@;'; put 'put ''Lm5lZygpKSwiZGl2IiE9PWImJihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlhZGQocCkpLHtkaXY6Qyxtb2Q6VH0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZT8oSD10aGlzLmRpdm1vZChwLm5lZygpLGIpLCJtb2QiIT09YiYmKEM9SC5kaXYubmVnKCkp''@;'; put 'put ''LHtkaXY6Qyxtb2Q6SC5tb2R9KTp0aGlzLm5lZ2F0aXZlJnAubmVnYXRpdmU/KEg9dGhpcy5uZWcoKS5kaXZtb2QocC5uZWcoKSxiKSwiZGl2IiE9PWImJihUPUgubW9kLm5lZygpLHgmJjAhPT1ULm5lZ2F0aXZlJiZULmlzdWIocCkpLHtkaXY6SC5kaXYsbW9kOlR9KTpwLmxlbmd0aD50aGlz''@;'; put 'put ''Lmxlbmd0aHx8dGhpcy5jbXAocCk8MD97ZGl2Om5ldyB3KDApLG1vZDp0aGlzfToxPT09cC5sZW5ndGg/ImRpdiI9PT1iP3tkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PWI/e2RpdjpudWxsLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp7ZGl2''@;'; put 'put ''OnRoaXMuZGl2bihwLndvcmRzWzBdKSxtb2Q6bmV3IHcodGhpcy5tb2RuKHAud29yZHNbMF0pKX06dGhpcy5fd29yZERpdihwLGIpO3ZhciBDLFQsSH0sdy5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJkaXYiLCExKS5kaXZ9LHcucHJvdG90eXBlLm1v''@;'; put 'put ''ZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwibW9kIiwhMSkubW9kfSx3LnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCEwKS5tb2R9LHcucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHApe3ZhciBiPXRoaXMuZGl2bW9k''@;'; put 'put ''KHApO2lmKGIubW9kLmlzWmVybygpKXJldHVybiBiLmRpdjt2YXIgeD0wIT09Yi5kaXYubmVnYXRpdmU/Yi5tb2QuaXN1YihwKTpiLm1vZCxDPXAudXNocm4oMSksVD1wLmFuZGxuKDEpLEg9eC5jbXAoQyk7cmV0dXJuIEg8MHx8MT09PVQmJjA9PT1IP2IuZGl2OjAhPT1iLmRpdi5uZWdhdGl2''@;'; put 'put ''ZT9iLmRpdi5pc3VibigxKTpiLmRpdi5pYWRkbigxKX0sdy5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihwKXtnKHA8PTY3MTA4ODYzKTtmb3IodmFyIGI9KDE8PDI2KSVwLHg9MCxDPXRoaXMubGVuZ3RoLTE7Qz49MDtDLS0peD0oYip4KygwfHRoaXMud29yZHNbQ10pKSVwO3JldHVybiB4fSx3''@;'; put 'put ''LnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbihwKXtnKHA8PTY3MTA4ODYzKTtmb3IodmFyIGI9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKzY3MTA4ODY0KmI7dGhpcy53b3Jkc1t4XT1DL3B8MCxiPUMlcH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3''@;'; put 'put ''LnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4ocCl9LHcucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSksZyghcC5pc1plcm8oKSk7dmFyIGI9dGhpcyx4PXAuY2xvbmUoKTtiPTAhPT1iLm5lZ2F0aXZlP2IudW1v''@;'; put 'put ''ZChwKTpiLmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD1uZXcgdygwKSxqPW5ldyB3KDEpLEU9MDtiLmlzRXZlbigpJiZ4LmlzRXZlbigpOyliLml1c2hybigxKSx4Lml1c2hybigxKSwrK0U7Zm9yKHZhciBtPXguY2xvbmUoKSxBPWIuY2xvbmUoKTshYi5pc1plcm8o''@;'; put 'put ''KTspe2Zvcih2YXIgb2U9MCx0ZT0xOyEoYi53b3Jkc1swXSZ0ZSkmJm9lPDI2Oysrb2UsdGU8PD0xKTtpZihvZT4wKWZvcihiLml1c2hybihvZSk7b2UtLSA+MDspKEMuaXNPZGQoKXx8VC5pc09kZCgpKSYmKEMuaWFkZChtKSxULmlzdWIoQSkpLEMuaXVzaHJuKDEpLFQuaXVzaHJuKDEpO2Zv''@;'; put 'put ''cih2YXIgc2U9MCx3ZT0xOyEoeC53b3Jkc1swXSZ3ZSkmJnNlPDI2Oysrc2Usd2U8PD0xKTtpZihzZT4wKWZvcih4Lml1c2hybihzZSk7c2UtLSA+MDspKEguaXNPZGQoKXx8ai5pc09kZCgpKSYmKEguaWFkZChtKSxqLmlzdWIoQSkpLEguaXVzaHJuKDEpLGouaXVzaHJuKDEpO2IuY21wKHgp''@;'; put 'put ''Pj0wPyhiLmlzdWIoeCksQy5pc3ViKEgpLFQuaXN1YihqKSk6KHguaXN1YihiKSxILmlzdWIoQyksai5pc3ViKFQpKX1yZXR1cm57YTpILGI6aixnY2Q6eC5pdXNobG4oRSl9fSx3LnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSksZyghcC5pc1plcm8oKSk7''@;'; put 'put ''dmFyIG9lLGI9dGhpcyx4PXAuY2xvbmUoKTtiPTAhPT1iLm5lZ2F0aXZlP2IudW1vZChwKTpiLmNsb25lKCk7Zm9yKHZhciBDPW5ldyB3KDEpLFQ9bmV3IHcoMCksSD14LmNsb25lKCk7Yi5jbXBuKDEpPjAmJnguY21wbigxKT4wOyl7Zm9yKHZhciBqPTAsRT0xOyEoYi53b3Jkc1swXSZFKSYm''@;'; put 'put ''ajwyNjsrK2osRTw8PTEpO2lmKGo+MClmb3IoYi5pdXNocm4oaik7ai0tID4wOylDLmlzT2RkKCkmJkMuaWFkZChIKSxDLml1c2hybigxKTtmb3IodmFyIG09MCxBPTE7ISh4LndvcmRzWzBdJkEpJiZtPDI2OysrbSxBPDw9MSk7aWYobT4wKWZvcih4Lml1c2hybihtKTttLS0gPjA7KVQuaXNP''@;'; put 'put ''ZGQoKSYmVC5pYWRkKEgpLFQuaXVzaHJuKDEpO2IuY21wKHgpPj0wPyhiLmlzdWIoeCksQy5pc3ViKFQpKTooeC5pc3ViKGIpLFQuaXN1YihDKSl9cmV0dXJuKG9lPTA9PT1iLmNtcG4oMSk/QzpUKS5jbXBuKDApPDAmJm9lLmlhZGQocCksb2V9LHcucHJvdG90eXBlLmdjZD1mdW5jdGlvbihw''@;'; put 'put ''KXtpZih0aGlzLmlzWmVybygpKXJldHVybiBwLmFicygpO2lmKHAuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIGI9dGhpcy5jbG9uZSgpLHg9cC5jbG9uZSgpO2IubmVnYXRpdmU9MCx4Lm5lZ2F0aXZlPTA7Zm9yKHZhciBDPTA7Yi5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTtDKyspYi5p''@;'; put 'put ''dXNocm4oMSkseC5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO2IuaXNFdmVuKCk7KWIuaXVzaHJuKDEpO2Zvcig7eC5pc0V2ZW4oKTspeC5pdXNocm4oMSk7dmFyIFQ9Yi5jbXAoeCk7aWYoVDwwKXt2YXIgSD1iO2I9eCx4PUh9ZWxzZSBpZigwPT09VHx8MD09PXguY21wbigxKSlicmVhaztiLmlz''@;'; put 'put ''dWIoeCl9cmV0dXJuIHguaXVzaGxuKEMpfSx3LnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmVnY2QocCkuYS51bW9kKHApfSx3LnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4hKDEmdGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmlzT2RkPWZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuISgxJn50aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMud29yZHNbMF0mcH0sdy5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHApO3ZhciBiPXAlMjYseD0ocC1iKS8yNixDPTE8''@;'; put 'put ''PGI7aWYodGhpcy5sZW5ndGg8PXgpcmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF18PUMsdGhpcztmb3IodmFyIFQ9QyxIPXg7MCE9PVQmJkg8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj0wfHRoaXMud29yZHNbSF07VD0oais9VCk+Pj4yNix0aGlzLndvcmRzW0hdPWomPTY3''@;'; put 'put ''MTA4ODYzfXJldHVybiAwIT09VCYmKHRoaXMud29yZHNbSF09VCx0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sdy5wcm90b3R5cGUuY21wbj1mdW5jdGlvbihwKXt2YXIg''@;'; put 'put ''eCxiPXA8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIWIpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJmIpcmV0dXJuIDE7aWYodGhpcy5zdHJpcCgpLHRoaXMubGVuZ3RoPjEpeD0xO2Vsc2V7YiYmKHA9LXApLGcocDw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIEM9''@;'; put 'put ''MHx0aGlzLndvcmRzWzBdO3g9Qz09PXA/MDpDPHA/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwteDp4fSx3LnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24ocCl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYw''@;'; put 'put ''IT09cC5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgYj10aGlzLnVjbXAocCk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWI6Yn0sdy5wcm90b3R5cGUudWNtcD1mdW5jdGlvbihwKXtpZih0aGlzLmxlbmd0aD5wLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxwLmxlbmd0aClyZXR1''@;'; put 'put ''cm4tMTtmb3IodmFyIGI9MCx4PXRoaXMubGVuZ3RoLTE7eD49MDt4LS0pe3ZhciBDPTB8dGhpcy53b3Jkc1t4XSxUPTB8cC53b3Jkc1t4XTtpZihDIT09VCl7QzxUP2I9LTE6Qz5UJiYoYj0xKTticmVha319cmV0dXJuIGJ9LHcucHJvdG90eXBlLmd0bj1mdW5jdGlvbihwKXtyZXR1cm4gMT09''@;'; put 'put ''PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24ocCl7cmV0dXJuIDE9PT10aGlzLmNtcChwKX0sdy5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXBuKHApPj0wfSx3LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHAp''@;'; put 'put ''Pj0wfSx3LnByb3RvdHlwZS5sdG49ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHApe3JldHVybi0xPT09dGhpcy5jbXAocCl9LHcucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wbihwKTw9MH0sdy5w''@;'; put 'put ''cm90b3R5cGUubHRlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcChwKTw9MH0sdy5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5lcT1mdW5jdGlvbihwKXtyZXR1cm4gMD09PXRoaXMuY21wKHApfSx3LnJlZD1mdW5jdGlv''@;'; put 'put ''bihwKXtyZXR1cm4gbmV3IFNlKHApfSx3LnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSxnKDA9PT10aGlzLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIp''@;'; put 'put ''LHAuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZChwKX0sdy5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9''@;'; put 'put ''LHcucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5yZWQ9cCx0aGlzfSx3LnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbihwKXtyZXR1cm4gZyghdGhpcy5yZWQsIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLl9mb3JjZVJl''@;'; put 'put ''ZChwKX0sdy5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQs''@;'; put 'put ''InJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaWFkZCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zdWIodGhp''@;'; put 'put ''cyxwKX0sdy5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pc3ViKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJl''@;'; put 'put ''ZCwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnNobCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5''@;'; put 'put ''Mih0aGlzLHApLHRoaXMucmVkLm11bCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5pbXVsKHRoaXMs''@;'; put 'put ''cCl9LHcucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIGcodGhpcy5yZWQsInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTcXJ0IHdvcmtz''@;'; put 'put ''IG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LHcucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJl''@;'; put 'put ''ZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSx3LnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlz''@;'; put 'put ''KX0sdy5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkJiYhcC5yZWQsInJlZFBvdyhub3JtYWxOdW0pIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMscCl9O3ZhciByZT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGws''@;'; put 'put ''cDI1NTE5Om51bGx9O2Z1bmN0aW9uIGllKFYscCl7dGhpcy5uYW1lPVYsdGhpcy5wPW5ldyB3KHAsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyB3KDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBsZSgp''@;'; put 'put ''e2llLmNhbGwodGhpcywiazI1NiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmIil9ZnVuY3Rpb24gbWUoKXtpZS5jYWxsKHRoaXMsInAyMjQiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZm''@;'; put 'put ''ZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMSIpfWZ1bmN0aW9uIF9lKCl7aWUuY2FsbCh0aGlzLCJwMTkyIiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiKX1mdW5jdGlvbiBUZSgpe2llLmNhbGwodGhpcywiMjU1MTkiLCI3ZmZmZmZm''@;'; put 'put ''ZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkIil9ZnVuY3Rpb24gU2UoVil7aWYoInN0cmluZyI9PXR5cGVvZiBWKXt2YXIgcD13Ll9wcmltZShWKTt0aGlzLm09cC5wLHRoaXMucHJpbWU9cH1lbHNlIGcoVi5ndG4oMSksIm1vZHVs''@;'; put 'put ''dXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT1WLHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiB6ZShWKXtTZS5jYWxsKHRoaXMsViksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRo''@;'; put 'put ''aXMucj1uZXcgdygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMu''@;'; put 'put ''bWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1pZS5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwpO3JldHVybiBwLndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSkscH0saWUucHJvdG90eXBlLmlyZWR1''@;'; put 'put ''Y2U9ZnVuY3Rpb24ocCl7dmFyIHgsYj1wO2Rve3RoaXMuc3BsaXQoYix0aGlzLnRtcCkseD0oYj0oYj10aGlzLmltdWxLKGIpKS5pYWRkKHRoaXMudG1wKSkuYml0TGVuZ3RoKCl9d2hpbGUoeD50aGlzLm4pO3ZhciBDPXg8dGhpcy5uPy0xOmIudWNtcCh0aGlzLnApO3JldHVybiAwPT09Qz8o''@;'; put 'put ''Yi53b3Jkc1swXT0wLGIubGVuZ3RoPTEpOkM+MD9iLmlzdWIodGhpcy5wKTp2b2lkIDAhPT1iLnN0cmlwP2Iuc3RyaXAoKTpiLl9zdHJpcCgpLGJ9LGllLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe3AuaXVzaHJuKHRoaXMubiwwLGIpfSxpZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rp''@;'; put 'put ''b24ocCl7cmV0dXJuIHAuaW11bCh0aGlzLmspfSxCKGxlLGllKSxsZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxiKXtmb3IodmFyIHg9NDE5NDMwMyxDPU1hdGgubWluKHAubGVuZ3RoLDkpLFQ9MDtUPEM7VCsrKWIud29yZHNbVF09cC53b3Jkc1tUXTtpZihiLmxlbmd0aD1DLHAubGVu''@;'; put 'put ''Z3RoPD05KXJldHVybiBwLndvcmRzWzBdPTAsdm9pZChwLmxlbmd0aD0xKTt2YXIgSD1wLndvcmRzWzldO2ZvcihiLndvcmRzW2IubGVuZ3RoKytdPUgmeCxUPTEwO1Q8cC5sZW5ndGg7VCsrKXt2YXIgaj0wfHAud29yZHNbVF07cC53b3Jkc1tULTEwXT0oaiZ4KTw8NHxIPj4+MjIsSD1qfXAu''@;'; put 'put ''d29yZHNbVC0xMF09SD4+Pj0yMixwLmxlbmd0aC09MD09PUgmJnAubGVuZ3RoPjEwPzEwOjl9LGxlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtwLndvcmRzW3AubGVuZ3RoXT0wLHAud29yZHNbcC5sZW5ndGgrMV09MCxwLmxlbmd0aCs9Mjtmb3IodmFyIGI9MCx4PTA7eDxwLmxlbmd0''@;'; put 'put ''aDt4Kyspe3ZhciBDPTB8cC53b3Jkc1t4XTtwLndvcmRzW3hdPTY3MTA4ODYzJihiKz05NzcqQyksYj02NCpDKyhiLzY3MTA4ODY0fDApfXJldHVybiAwPT09cC53b3Jkc1twLmxlbmd0aC0xXSYmKHAubGVuZ3RoLS0sMD09PXAud29yZHNbcC5sZW5ndGgtMV0mJnAubGVuZ3RoLS0pLHB9LEIo''@;'; put 'put ''bWUsaWUpLEIoX2UsaWUpLEIoVGUsaWUpLFRlLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtmb3IodmFyIGI9MCx4PTA7eDxwLmxlbmd0aDt4Kyspe3ZhciBDPTE5KigwfHAud29yZHNbeF0pK2IsVD02NzEwODg2MyZDO0M+Pj49MjYscC53b3Jkc1t4XT1ULGI9Q31yZXR1cm4gMCE9PWIm''@;'; put 'put ''JihwLndvcmRzW3AubGVuZ3RoKytdPWIpLHB9LHcuX3ByaW1lPWZ1bmN0aW9uKHApe2lmKHJlW3BdKXJldHVybiByZVtwXTt2YXIgYjtpZigiazI1NiI9PT1wKWI9bmV3IGxlO2Vsc2UgaWYoInAyMjQiPT09cCliPW5ldyBtZTtlbHNlIGlmKCJwMTkyIj09PXApYj1uZXcgX2U7ZWxzZXtpZigi''@;'; put 'put ''cDI1NTE5IiE9PXApdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHByaW1lICIrcCk7Yj1uZXcgVGV9cmV0dXJuIHJlW3BdPWIsYn0sU2UucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhwLnJl''@;'; put 'put ''ZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24ocCxiKXtnKCEocC5uZWdhdGl2ZXxiLm5lZ2F0aXZlKSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKHAucmVkJiZwLnJlZD09PWIucmVkLCJyZWQgd29y''@;'; put 'put ''a3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZShwKS5fZm9yY2VSZWQodGhpcyk6cC51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUubmVnPWZ1''@;'; put 'put ''bmN0aW9uKHApe3JldHVybiBwLmlzWmVybygpP3AuY2xvbmUoKTp0aGlzLm0uc3ViKHApLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmFkZD1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmFkZChiKTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3Vi''@;'; put 'put ''KHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuaWFkZChiKTtyZXR1cm4geC5jbXAodGhpcy5tKT49MCYmeC5pc3ViKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihw''@;'; put 'put ''LGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLnN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmlzdWIoYik7cmV0dXJu''@;'; put 'put ''IHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTEocCksdGhpcy5pbW9kKHAudXNobG4oYikpfSxTZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAs''@;'; put 'put ''YiksdGhpcy5pbW9kKHAuaW11bChiKSl9LFNlLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIpLHRoaXMuaW1vZChwLm11bChiKSl9LFNlLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltdWwocCxwLmNsb25lKCkpfSxT''@;'; put 'put ''ZS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLm11bChwLHApfSxTZS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbihwKXtpZihwLmlzWmVybygpKXJldHVybiBwLmNsb25lKCk7dmFyIGI9dGhpcy5tLmFuZGxuKDMpO2lmKGcoYiUyPT0xKSwzPT09Yil7dmFyIHg9dGhpcy5t''@;'; put 'put ''LmFkZChuZXcgdygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyhwLHgpfWZvcih2YXIgQz10aGlzLm0uc3VibigxKSxUPTA7IUMuaXNaZXJvKCkmJjA9PT1DLmFuZGxuKDEpOylUKyssQy5pdXNocm4oMSk7ZyghQy5pc1plcm8oKSk7dmFyIEg9bmV3IHcoMSkudG9SZWQodGhpcyksaj1I''@;'; put 'put ''LnJlZE5lZygpLEU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLG09dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihtPW5ldyB3KDIqbSptKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3cobSxFKS5jbXAoaik7KW0ucmVkSUFkZChqKTtmb3IodmFyIEE9dGhpcy5wb3cobSxDKSxvZT10aGlzLnBvdyhw''@;'; put 'put ''LEMuYWRkbigxKS5pdXNocm4oMSkpLHRlPXRoaXMucG93KHAsQyksc2U9VDswIT09dGUuY21wKEgpOyl7Zm9yKHZhciB3ZT10ZSxVZT0wOzAhPT13ZS5jbXAoSCk7VWUrKyl3ZT13ZS5yZWRTcXIoKTtnKFVlPHNlKTt2YXIgSmU9dGhpcy5wb3coQSxuZXcgdygxKS5pdXNobG4oc2UtVWUtMSkp''@;'; put 'put ''O29lPW9lLnJlZE11bChKZSksQT1KZS5yZWRTcXIoKSx0ZT10ZS5yZWRNdWwoQSksc2U9VWV9cmV0dXJuIG9lfSxTZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXt2YXIgYj1wLl9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09Yi5uZWdhdGl2ZT8oYi5uZWdhdGl2ZT0wLHRoaXMuaW1vZChi''@;'; put 'put ''KS5yZWROZWcoKSk6dGhpcy5pbW9kKGIpfSxTZS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHAsYil7aWYoYi5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMSkudG9SZWQodGhpcyk7aWYoMD09PWIuY21wbigxKSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBDPW5ldyBBcnJheSgxNik7Q1swXT1uZXcgdygx''@;'; put 'put ''KS50b1JlZCh0aGlzKSxDWzFdPXA7Zm9yKHZhciBUPTI7VDxDLmxlbmd0aDtUKyspQ1tUXT10aGlzLm11bChDW1QtMV0scCk7dmFyIEg9Q1swXSxqPTAsRT0wLG09Yi5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PW0mJihtPTI2KSxUPWIubGVuZ3RoLTE7VD49MDtULS0pe2Zvcih2YXIgQT1iLndv''@;'; put 'put ''cmRzW1RdLG9lPW0tMTtvZT49MDtvZS0tKXt2YXIgdGU9QT4+b2UmMTtIIT09Q1swXSYmKEg9dGhpcy5zcXIoSCkpLDAhPT10ZXx8MCE9PWo/KGo8PD0xLGp8PXRlLCg0PT0rK0V8fDA9PT1UJiYwPT09b2UpJiYoSD10aGlzLm11bChILENbal0pLEU9MCxqPTApKTpFPTB9bT0yNn1yZXR1cm4g''@;'; put 'put ''SH0sU2UucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXt2YXIgYj1wLnVtb2QodGhpcy5tKTtyZXR1cm4gYj09PXA/Yi5jbG9uZSgpOmJ9LFNlLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj1wLmNsb25lKCk7cmV0dXJuIGIucmVkPW51bGwsYn0sdy5tb250''@;'; put 'put ''PWZ1bmN0aW9uKHApe3JldHVybiBuZXcgemUocCl9LEIoemUsU2UpLHplLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW1vZChwLnVzaGxuKHRoaXMuc2hpZnQpKX0semUucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHApe3ZhciBiPXRoaXMuaW1v''@;'; put 'put ''ZChwLm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gYi5yZWQ9bnVsbCxifSx6ZS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIHAud29yZHNbMF09MCxwLmxlbmd0aD0xLHA7dmFyIHg9cC5pbXVsKGIpLEM9eC5tYXNrbih0aGlzLnNo''@;'; put 'put ''aWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9y''@;'; put 'put ''Y2VSZWQodGhpcyl9LHplLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCxiKXtpZihwLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBuZXcgdygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHg9cC5tdWwoYiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlz''@;'; put 'put ''LnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0semUucHJvdG90eXBlLmludm09''@;'; put 'put ''ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW1vZChwLl9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSkuX2ZvcmNlUmVkKHRoaXMpfX0odWU9Xy5ubWQodWUpLHRoaXMpfSw5NzQ2OnVlPT57ZnVuY3Rpb24gcShfLEkpe2lmKCFfKXRocm93IG5ldyBFcnJvcihJfHwiQXNzZXJ0aW9uIGZhaWxl''@;'; put 'put ''ZCIpfXVlLmV4cG9ydHM9cSxxLmVxdWFsPWZ1bmN0aW9uKEkseSxnKXtpZihJIT15KXRocm93IG5ldyBFcnJvcihnfHwiQXNzZXJ0aW9uIGZhaWxlZDogIitJKyIgIT0gIit5KX19LDQ1MDQ6KHVlLHEpPT57InVzZSBzdHJpY3QiO3ZhciBfPXE7ZnVuY3Rpb24geShCKXtyZXR1cm4gMT09PUIu''@;'; put 'put ''bGVuZ3RoPyIwIitCOkJ9ZnVuY3Rpb24gZyhCKXtmb3IodmFyIHc9IiIsUD0wO1A8Qi5sZW5ndGg7UCsrKXcrPXkoQltQXS50b1N0cmluZygxNikpO3JldHVybiB3fV8udG9BcnJheT1mdW5jdGlvbiBJKEIsdyl7aWYoQXJyYXkuaXNBcnJheShCKSlyZXR1cm4gQi5zbGljZSgpO2lmKCFCKXJl''@;'; put 'put ''dHVybltdO3ZhciBQPVtdO2lmKCJzdHJpbmciIT10eXBlb2YgQil7Zm9yKHZhciBGPTA7RjxCLmxlbmd0aDtGKyspUFtGXT0wfEJbRl07cmV0dXJuIFB9aWYoImhleCI9PT13KWZvcigoQj1CLnJlcGxhY2UoL1teYS16MC05XSsvZ2ksIiIpKS5sZW5ndGglMiE9MCYmKEI9IjAiK0IpLEY9MDtG''@;'; put 'put ''PEIubGVuZ3RoO0YrPTIpUC5wdXNoKHBhcnNlSW50KEJbRl0rQltGKzFdLDE2KSk7ZWxzZSBmb3IoRj0wO0Y8Qi5sZW5ndGg7RisrKXt2YXIgTz1CLmNoYXJDb2RlQXQoRiksej1PPj44LE49MjU1Jk87ej9QLnB1c2goeixOKTpQLnB1c2goTil9cmV0dXJuIFB9LF8uemVybzI9eSxfLnRvSGV4''@;'; put 'put ''PWcsXy5lbmNvZGU9ZnVuY3Rpb24odyxQKXtyZXR1cm4iaGV4Ij09PVA/Zyh3KTp3fX0sNDI0NDp1ZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgcT1mdW5jdGlvbihfKXtyZXR1cm4gXyE9X307dWUuZXhwb3J0cz1mdW5jdGlvbihJLHkpe3JldHVybiAwPT09SSYmMD09PXk/MS9JPT0xL3k6ISEoST09''@;'; put 'put ''PXl8fHEoSSkmJnEoeSkpfX0sNjA5Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNDI4OSkseT1fKDU1NTkpLGc9Xyg0MjQ0KSxCPV8oNTYyNCksdz1fKDIyODEpLFA9eShCKCksT2JqZWN0KTtJKFAse2dldFBvbHlmaWxsOkIsaW1wbGVtZW50YXRpb246ZyxzaGltOnd9KSx1ZS5l''@;'; put 'put ''eHBvcnRzPVB9LDU2MjQ6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg0MjQ0KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6SX19LDIyODE6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg1NjI0''@;'; put 'put ''KSx5PV8oNDI4OSk7dWUuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciBCPUkoKTtyZXR1cm4geShPYmplY3Qse2lzOkJ9LHtpczpmdW5jdGlvbigpe3JldHVybiBPYmplY3QuaXMhPT1CfX0pLEJ9fSw4OTg3Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJO2lmKCFPYmplY3Qua2V5cyl7dmFy''@;'; put 'put ''IHk9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxnPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsQj1fKDE0MTQpLHc9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxQPSF3LmNhbGwoe3RvU3RyaW5nOm51bGx9LCJ0b1N0cmluZyIpLEY9dy5jYWxsKGZ1bmN0''@;'; put 'put ''aW9uKCl7fSwicHJvdG90eXBlIiksTz1bInRvU3RyaW5nIiwidG9Mb2NhbGVTdHJpbmciLCJ2YWx1ZU9mIiwiaGFzT3duUHJvcGVydHkiLCJpc1Byb3RvdHlwZU9mIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJjb25zdHJ1Y3RvciJdLHo9ZnVuY3Rpb24oVSl7dmFyIFc9VS5jb25zdHJ1Y3Rv''@;'; put 'put ''cjtyZXR1cm4gVyYmVy5wcm90b3R5cGU9PT1VfSxOPXskYXBwbGljYXRpb25DYWNoZTohMCwkY29uc29sZTohMCwkZXh0ZXJuYWw6ITAsJGZyYW1lOiEwLCRmcmFtZUVsZW1lbnQ6ITAsJGZyYW1lczohMCwkaW5uZXJIZWlnaHQ6ITAsJGlubmVyV2lkdGg6ITAsJG9ubW96ZnVsbHNjcmVlbmNo''@;'; put 'put ''YW5nZTohMCwkb25tb3pmdWxsc2NyZWVuZXJyb3I6ITAsJG91dGVySGVpZ2h0OiEwLCRvdXRlcldpZHRoOiEwLCRwYWdlWE9mZnNldDohMCwkcGFnZVlPZmZzZXQ6ITAsJHBhcmVudDohMCwkc2Nyb2xsTGVmdDohMCwkc2Nyb2xsVG9wOiEwLCRzY3JvbGxYOiEwLCRzY3JvbGxZOiEwLCRzZWxm''@;'; put 'put ''OiEwLCR3ZWJraXRJbmRleGVkREI6ITAsJHdlYmtpdFN0b3JhZ2VJbmZvOiEwLCR3aW5kb3c6ITB9LEw9ZnVuY3Rpb24oKXtpZih0eXBlb2Ygd2luZG93PiJ1IilyZXR1cm4hMTtmb3IodmFyIFUgaW4gd2luZG93KXRyeXtpZighTlsiJCIrVV0mJnkuY2FsbCh3aW5kb3csVSkmJm51bGwhPT13''@;'; put 'put ''aW5kb3dbVV0mJiJvYmplY3QiPT10eXBlb2Ygd2luZG93W1VdKXRyeXt6KHdpbmRvd1tVXSl9Y2F0Y2h7cmV0dXJuITB9fWNhdGNoe3JldHVybiEwfXJldHVybiExfSgpO0k9ZnVuY3Rpb24oVyl7dmFyIFk9bnVsbCE9PVcmJiJvYmplY3QiPT10eXBlb2YgVyxYPSJbb2JqZWN0IEZ1bmN0aW9u''@;'; put 'put ''XSI9PT1nLmNhbGwoVyksZWU9QihXKSxKPVkmJiJbb2JqZWN0IFN0cmluZ10iPT09Zy5jYWxsKFcpLHJlPVtdO2lmKCFZJiYhWCYmIWVlKXRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdC5rZXlzIGNhbGxlZCBvbiBhIG5vbi1vYmplY3QiKTt2YXIgaWU9RiYmWDtpZihKJiZXLmxlbmd0aD4w''@;'; put 'put ''JiYheS5jYWxsKFcsMCkpZm9yKHZhciBsZT0wO2xlPFcubGVuZ3RoOysrbGUpcmUucHVzaChTdHJpbmcobGUpKTtpZihlZSYmVy5sZW5ndGg+MClmb3IodmFyIG1lPTA7bWU8Vy5sZW5ndGg7KyttZSlyZS5wdXNoKFN0cmluZyhtZSkpO2Vsc2UgZm9yKHZhciBfZSBpbiBXKSghaWV8fCJwcm90''@;'; put 'put ''b3R5cGUiIT09X2UpJiZ5LmNhbGwoVyxfZSkmJnJlLnB1c2goU3RyaW5nKF9lKSk7aWYoUClmb3IodmFyIFRlPWZ1bmN0aW9uKFUpe2lmKHR5cGVvZiB3aW5kb3c+InUifHwhTClyZXR1cm4geihVKTt0cnl7cmV0dXJuIHooVSl9Y2F0Y2h7cmV0dXJuITF9fShXKSxTZT0wO1NlPE8ubGVuZ3Ro''@;'; put 'put ''OysrU2UpKCFUZXx8ImNvbnN0cnVjdG9yIiE9PU9bU2VdKSYmeS5jYWxsKFcsT1tTZV0pJiZyZS5wdXNoKE9bU2VdKTtyZXR1cm4gcmV9fXVlLmV4cG9ydHM9SX0sMjIxNToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1BcnJheS5wcm90b3R5cGUuc2xpY2UseT1fKDE0MTQpLGc9T2Jq''@;'; put 'put ''ZWN0LmtleXMsQj1nP2Z1bmN0aW9uKEYpe3JldHVybiBnKEYpfTpfKDg5ODcpLHc9T2JqZWN0LmtleXM7Qi5zaGltPWZ1bmN0aW9uKCl7aWYoT2JqZWN0LmtleXMpe3ZhciBGPWZ1bmN0aW9uKCl7dmFyIE89T2JqZWN0LmtleXMoYXJndW1lbnRzKTtyZXR1cm4gTyYmTy5sZW5ndGg9PT1hcmd1''@;'; put 'put ''bWVudHMubGVuZ3RofSgxLDIpO0Z8fChPYmplY3Qua2V5cz1mdW5jdGlvbih6KXtyZXR1cm4geSh6KT93KEkuY2FsbCh6KSk6dyh6KX0pfWVsc2UgT2JqZWN0LmtleXM9QjtyZXR1cm4gT2JqZWN0LmtleXN8fEJ9LHVlLmV4cG9ydHM9Qn0sMTQxNDp1ZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgcT1P''@;'; put 'put ''YmplY3QucHJvdG90eXBlLnRvU3RyaW5nO3VlLmV4cG9ydHM9ZnVuY3Rpb24oSSl7dmFyIHk9cS5jYWxsKEkpLGc9IltvYmplY3QgQXJndW1lbnRzXSI9PT15O3JldHVybiBnfHwoZz0iW29iamVjdCBBcnJheV0iIT09eSYmbnVsbCE9PUkmJiJvYmplY3QiPT10eXBlb2YgSSYmIm51bWJlciI9''@;'; put 'put ''PXR5cGVvZiBJLmxlbmd0aCYmSS5sZW5ndGg+PTAmJiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1xLmNhbGwoSS5jYWxsZWUpKSxnfX0sMjgzNzoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDIyMTUpLHk9Xyg1NDE5KSgpLGc9Xyg3Mzc5KSxCPV8oODg5Miksdz1nKCJBcnJheS5wcm90''@;'; put 'put ''b3R5cGUucHVzaCIpLFA9ZygiT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSIpLEY9eT9CLmdldE93blByb3BlcnR5U3ltYm9sczpudWxsO3VlLmV4cG9ydHM9ZnVuY3Rpb24oeixOKXtpZihudWxsPT16KXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFu''@;'; put 'put ''IG9iamVjdCIpO3ZhciBMPUIoeik7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIEw7Zm9yKHZhciBLPTE7Szxhcmd1bWVudHMubGVuZ3RoOysrSyl7dmFyIFU9Qihhcmd1bWVudHNbS10pLFc9SShVKSxZPXkmJihCLmdldE93blByb3BlcnR5U3ltYm9sc3x8Rik7aWYoWSlmb3IodmFy''@;'; put 'put ''IFg9WShVKSxlZT0wO2VlPFgubGVuZ3RoOysrZWUpe3ZhciBKPVhbZWVdO1AoVSxKKSYmdyhXLEopfWZvcih2YXIgcmU9MDtyZTxXLmxlbmd0aDsrK3JlKXt2YXIgaWU9V1tyZV07UChVLGllKSYmKExbaWVdPVVbaWVdKX19cmV0dXJuIEx9fSw4MTYyOih1ZSxxLF8pPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBJPV8oMjgzNyk7dWUuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiFPYmplY3QuYXNzaWdufHxmdW5jdGlvbigpe2lmKCFPYmplY3QuYXNzaWduKXJldHVybiExO2Zvcih2YXIgQj0iYWJjZGVmZ2hpamtsbW5vcHFyc3QiLHc9Qi5zcGxpdCgiIiksUD17fSxGPTA7Rjx3Lmxlbmd0aDsr''@;'; put 'put ''K0YpUFt3W0ZdXT13W0ZdO3ZhciBPPU9iamVjdC5hc3NpZ24oe30sUCksej0iIjtmb3IodmFyIE4gaW4gTyl6Kz1OO3JldHVybiBCIT09en0oKXx8ZnVuY3Rpb24oKXtpZighT2JqZWN0LmFzc2lnbnx8IU9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucylyZXR1cm4hMTt2YXIgQj1PYmplY3QucHJl''@;'; put 'put ''dmVudEV4dGVuc2lvbnMoezE6Mn0pO3RyeXtPYmplY3QuYXNzaWduKEIsInh5Iil9Y2F0Y2h7cmV0dXJuInkiPT09QlsxXX1yZXR1cm4hMX0oKT9JOk9iamVjdC5hc3NpZ259fSw3NDM1Oih1ZSxxKT0+e3EuZW5kaWFubmVzcz1mdW5jdGlvbigpe3JldHVybiJMRSJ9LHEuaG9zdG5hbWU9ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gdHlwZW9mIGxvY2F0aW9uPCJ1Ij9sb2NhdGlvbi5ob3N0bmFtZToiIn0scS5sb2FkYXZnPWZ1bmN0aW9uKCl7cmV0dXJuW119LHEudXB0aW1lPWZ1bmN0aW9uKCl7cmV0dXJuIDB9LHEuZnJlZW1lbT1mdW5jdGlvbigpe3JldHVybiBOdW1iZXIuTUFYX1ZBTFVFfSxx''@;'; put 'put ''LnRvdGFsbWVtPWZ1bmN0aW9uKCl7cmV0dXJuIE51bWJlci5NQVhfVkFMVUV9LHEuY3B1cz1mdW5jdGlvbigpe3JldHVybltdfSxxLnR5cGU9ZnVuY3Rpb24oKXtyZXR1cm4iQnJvd3NlciJ9LHEucmVsZWFzZT1mdW5jdGlvbigpe3JldHVybiB0eXBlb2YgbmF2aWdhdG9yPCJ1Ij9uYXZpZ2F0''@;'; put 'put ''b3IuYXBwVmVyc2lvbjoiIn0scS5uZXR3b3JrSW50ZXJmYWNlcz1xLmdldE5ldHdvcmtJbnRlcmZhY2VzPWZ1bmN0aW9uKCl7cmV0dXJue319LHEuYXJjaD1mdW5jdGlvbigpe3JldHVybiJqYXZhc2NyaXB0In0scS5wbGF0Zm9ybT1mdW5jdGlvbigpe3JldHVybiJicm93c2VyIn0scS50bXBk''@;'; put 'put ''aXI9cS50bXBEaXI9ZnVuY3Rpb24oKXtyZXR1cm4iL3RtcCJ9LHEuRU9MPSJcbiIscS5ob21lZGlyPWZ1bmN0aW9uKCl7cmV0dXJuIi8ifX0sMjgxODoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDk4MDkpO3EuY2VydGlmaWNhdGU9XygxOTM0KTt2YXIgeT1JLmRlZmluZSgiUlNB''@;'; put 'put ''UHJpdmF0ZUtleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJtb2R1bHVzIikuaW50KCksdGhpcy5rZXkoInB1YmxpY0V4cG9uZW50IikuaW50KCksdGhpcy5rZXkoInByaXZhdGVFeHBvbmVudCIpLmludCgpLHRoaXMua2V5''@;'; put 'put ''KCJwcmltZTEiKS5pbnQoKSx0aGlzLmtleSgicHJpbWUyIikuaW50KCksdGhpcy5rZXkoImV4cG9uZW50MSIpLmludCgpLHRoaXMua2V5KCJleHBvbmVudDIiKS5pbnQoKSx0aGlzLmtleSgiY29lZmZpY2llbnQiKS5pbnQoKSl9KTtxLlJTQVByaXZhdGVLZXk9eTt2YXIgZz1JLmRlZmluZSgi''@;'; put 'put ''UlNBUHVibGljS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJtb2R1bHVzIikuaW50KCksdGhpcy5rZXkoInB1YmxpY0V4cG9uZW50IikuaW50KCkpfSk7cS5SU0FQdWJsaWNLZXk9Zzt2YXIgQj1JLmRlZmluZSgiQWxnb3JpdGhtSWRlbnRpZmllciIsZnVuY3Rpb24o''@;'; put 'put ''KXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikub2JqaWQoKSx0aGlzLmtleSgibm9uZSIpLm51bGxfKCkub3B0aW9uYWwoKSx0aGlzLmtleSgiY3VydmUiKS5vYmppZCgpLm9wdGlvbmFsKCksdGhpcy5rZXkoInBhcmFtcyIpLnNlcSgpLm9iaih0aGlzLmtleSgicCIpLmlu''@;'; put 'put ''dCgpLHRoaXMua2V5KCJxIikuaW50KCksdGhpcy5rZXkoImciKS5pbnQoKSkub3B0aW9uYWwoKSl9KSx3PUkuZGVmaW5lKCJTdWJqZWN0UHVibGljS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikudXNlKEIpLHRoaXMua2V5KCJzdWJqZWN0''@;'; put 'put ''UHVibGljS2V5IikuYml0c3RyKCkpfSk7cS5QdWJsaWNLZXk9dzt2YXIgUD1JLmRlZmluZSgiUHJpdmF0ZUtleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgiYWxnb3JpdGhtIikudXNlKEIpLHRoaXMua2V5KCJzdWJq''@;'; put 'put ''ZWN0UHJpdmF0ZUtleSIpLm9jdHN0cigpKX0pO3EuUHJpdmF0ZUtleT1QO3ZhciBGPUkuZGVmaW5lKCJFbmNyeXB0ZWRQcml2YXRlS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikuc2VxKCkub2JqKHRoaXMua2V5KCJpZCIpLm9iamlkKCks''@;'; put 'put ''dGhpcy5rZXkoImRlY3J5cHQiKS5zZXEoKS5vYmoodGhpcy5rZXkoImtkZSIpLnNlcSgpLm9iaih0aGlzLmtleSgiaWQiKS5vYmppZCgpLHRoaXMua2V5KCJrZGVwYXJhbXMiKS5zZXEoKS5vYmoodGhpcy5rZXkoInNhbHQiKS5vY3RzdHIoKSx0aGlzLmtleSgiaXRlcnMiKS5pbnQoKSkpLHRo''@;'; put 'put ''aXMua2V5KCJjaXBoZXIiKS5zZXEoKS5vYmoodGhpcy5rZXkoImFsZ28iKS5vYmppZCgpLHRoaXMua2V5KCJpdiIpLm9jdHN0cigpKSkpLHRoaXMua2V5KCJzdWJqZWN0UHJpdmF0ZUtleSIpLm9jdHN0cigpKX0pO3EuRW5jcnlwdGVkUHJpdmF0ZUtleT1GO3ZhciBPPUkuZGVmaW5lKCJEU0FQ''@;'; put 'put ''cml2YXRlS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoInAiKS5pbnQoKSx0aGlzLmtleSgicSIpLmludCgpLHRoaXMua2V5KCJnIikuaW50KCksdGhpcy5rZXkoInB1Yl9rZXkiKS5pbnQoKSx0aGlzLmtleSgicHJpdl9r''@;'; put 'put ''ZXkiKS5pbnQoKSl9KTtxLkRTQVByaXZhdGVLZXk9TyxxLkRTQXBhcmFtPUkuZGVmaW5lKCJEU0FwYXJhbSIsZnVuY3Rpb24oKXt0aGlzLmludCgpfSk7dmFyIHo9SS5kZWZpbmUoIkVDUGFyYW1ldGVycyIsZnVuY3Rpb24oKXt0aGlzLmNob2ljZSh7bmFtZWRDdXJ2ZTp0aGlzLm9iamlkKCl9''@;'; put 'put ''KX0pLE49SS5kZWZpbmUoIkVDUHJpdmF0ZUtleSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJwcml2YXRlS2V5Iikub2N0c3RyKCksdGhpcy5rZXkoInBhcmFtZXRlcnMiKS5vcHRpb25hbCgpLmV4cGxpY2l0KDApLnVzZSh6''@;'; put 'put ''KSx0aGlzLmtleSgicHVibGljS2V5Iikub3B0aW9uYWwoKS5leHBsaWNpdCgxKS5iaXRzdHIoKSl9KTtxLkVDUHJpdmF0ZUtleT1OLHEuc2lnbmF0dXJlPUkuZGVmaW5lKCJzaWduYXR1cmUiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInIiKS5pbnQoKSx0aGlzLmtleSgi''@;'; put 'put ''cyIpLmludCgpKX0pfSwxOTM0Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oOTgwOSkseT1JLmRlZmluZSgiVGltZSIsZnVuY3Rpb24oKXt0aGlzLmNob2ljZSh7dXRjVGltZTp0aGlzLnV0Y3RpbWUoKSxnZW5lcmFsVGltZTp0aGlzLmdlbnRpbWUoKX0pfSksZz1JLmRlZmluZSgi''@;'; put 'put ''QXR0cmlidXRlVHlwZVZhbHVlIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ0eXBlIikub2JqaWQoKSx0aGlzLmtleSgidmFsdWUiKS5hbnkoKSl9KSxCPUkuZGVmaW5lKCJBbGdvcml0aG1JZGVudGlmaWVyIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5''@;'; put 'put ''KCJhbGdvcml0aG0iKS5vYmppZCgpLHRoaXMua2V5KCJwYXJhbWV0ZXJzIikub3B0aW9uYWwoKSx0aGlzLmtleSgiY3VydmUiKS5vYmppZCgpLm9wdGlvbmFsKCkpfSksdz1JLmRlZmluZSgiU3ViamVjdFB1YmxpY0tleUluZm8iLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXko''@;'; put 'put ''ImFsZ29yaXRobSIpLnVzZShCKSx0aGlzLmtleSgic3ViamVjdFB1YmxpY0tleSIpLmJpdHN0cigpKX0pLFA9SS5kZWZpbmUoIlJlbGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWUiLGZ1bmN0aW9uKCl7dGhpcy5zZXRvZihnKX0pLEY9SS5kZWZpbmUoIlJETlNlcXVlbmNlIixmdW5jdGlvbigpe3Ro''@;'; put 'put ''aXMuc2Vxb2YoUCl9KSxPPUkuZGVmaW5lKCJOYW1lIixmdW5jdGlvbigpe3RoaXMuY2hvaWNlKHtyZG5TZXF1ZW5jZTp0aGlzLnVzZShGKX0pfSksej1JLmRlZmluZSgiVmFsaWRpdHkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoIm5vdEJlZm9yZSIpLnVzZSh5KSx0aGlz''@;'; put 'put ''LmtleSgibm90QWZ0ZXIiKS51c2UoeSkpfSksTj1JLmRlZmluZSgiRXh0ZW5zaW9uIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJleHRuSUQiKS5vYmppZCgpLHRoaXMua2V5KCJjcml0aWNhbCIpLmJvb2woKS5kZWYoITEpLHRoaXMua2V5KCJleHRuVmFsdWUiKS5vY3Rz''@;'; put 'put ''dHIoKSl9KSxMPUkuZGVmaW5lKCJUQlNDZXJ0aWZpY2F0ZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmV4cGxpY2l0KDApLmludCgpLm9wdGlvbmFsKCksdGhpcy5rZXkoInNlcmlhbE51bWJlciIpLmludCgpLHRoaXMua2V5KCJzaWduYXR1cmUiKS51''@;'; put 'put ''c2UoQiksdGhpcy5rZXkoImlzc3VlciIpLnVzZShPKSx0aGlzLmtleSgidmFsaWRpdHkiKS51c2UoeiksdGhpcy5rZXkoInN1YmplY3QiKS51c2UoTyksdGhpcy5rZXkoInN1YmplY3RQdWJsaWNLZXlJbmZvIikudXNlKHcpLHRoaXMua2V5KCJpc3N1ZXJVbmlxdWVJRCIpLmltcGxpY2l0KDEp''@;'; put 'put ''LmJpdHN0cigpLm9wdGlvbmFsKCksdGhpcy5rZXkoInN1YmplY3RVbmlxdWVJRCIpLmltcGxpY2l0KDIpLmJpdHN0cigpLm9wdGlvbmFsKCksdGhpcy5rZXkoImV4dGVuc2lvbnMiKS5leHBsaWNpdCgzKS5zZXFvZihOKS5vcHRpb25hbCgpKX0pLEs9SS5kZWZpbmUoIlg1MDlDZXJ0aWZpY2F0''@;'; put 'put ''ZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidGJzQ2VydGlmaWNhdGUiKS51c2UoTCksdGhpcy5rZXkoInNpZ25hdHVyZUFsZ29yaXRobSIpLnVzZShCKSx0aGlzLmtleSgic2lnbmF0dXJlVmFsdWUiKS5iaXRzdHIoKSl9KTt1ZS5leHBvcnRzPUt9LDc2MzE6KHVlLHEs''@;'; put 'put ''Xyk9PnsidXNlIHN0cmljdCI7dmFyIEk9L1Byb2MtVHlwZTogNCxFTkNSWVBURURbXG5ccl0rREVLLUluZm86IEFFUy0oKD86MTI4KXwoPzoxOTIpfCg/OjI1NikpLUNCQywoWzAtOUEtSF0rKVtcblxyXSsoWzAtOUEtelxuXHIrLz1dKylbXG5ccl0rL20seT0vXi0tLS0tQkVHSU4gKCg/Oi4q''@;'; put 'put ''PyBLRVkpfENFUlRJRklDQVRFKS0tLS0tL20sZz0vXi0tLS0tQkVHSU4gKCg/Oi4qPyBLRVkpfENFUlRJRklDQVRFKS0tLS0tKFswLTlBLXpcblxyKy89XSspLS0tLS1FTkQgXDEtLS0tLSQvbSxCPV8oMzA0OCksdz1fKDQ2OTYpLFA9Xyg5NTA5KS5CdWZmZXI7dWUuZXhwb3J0cz1mdW5jdGlv''@;'; put 'put ''bihGLE8pe3ZhciBMLHo9Ri50b1N0cmluZygpLE49ei5tYXRjaChJKTtpZihOKXt2YXIgVT0iYWVzIitOWzFdLFc9UC5mcm9tKE5bMl0sImhleCIpLFk9UC5mcm9tKE5bM10ucmVwbGFjZSgvW1xyXG5dL2csIiIpLCJiYXNlNjQiKSxYPUIoTyxXLnNsaWNlKDAsOCkscGFyc2VJbnQoTlsxXSwx''@;'; put 'put ''MCkpLmtleSxlZT1bXSxKPXcuY3JlYXRlRGVjaXBoZXJpdihVLFgsVyk7ZWUucHVzaChKLnVwZGF0ZShZKSksZWUucHVzaChKLmZpbmFsKCkpLEw9UC5jb25jYXQoZWUpfWVsc2V7dmFyIEs9ei5tYXRjaChnKTtMPVAuZnJvbShLWzJdLnJlcGxhY2UoL1tcclxuXS9nLCIiKSwiYmFzZTY0Iil9''@;'; put 'put ''cmV0dXJue3RhZzp6Lm1hdGNoKHkpWzFdLGRhdGE6TH19fSw5ODA6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9XygyODE4KSx5PV8oMjU2MiksZz1fKDc2MzEpLEI9Xyg0Njk2KSx3PV8oNTYzMiksUD1fKDk1MDkpLkJ1ZmZlcjtmdW5jdGlvbiBPKHope3ZhciBOOyJvYmplY3QiPT10''@;'; put 'put ''eXBlb2YgeiYmIVAuaXNCdWZmZXIoeikmJihOPXoucGFzc3BocmFzZSx6PXoua2V5KSwic3RyaW5nIj09dHlwZW9mIHomJih6PVAuZnJvbSh6KSk7dmFyIFcsWSxMPWcoeixOKSxLPUwudGFnLFU9TC5kYXRhO3N3aXRjaChLKXtjYXNlIkNFUlRJRklDQVRFIjpZPUkuY2VydGlmaWNhdGUuZGVj''@;'; put 'put ''b2RlKFUsImRlciIpLnRic0NlcnRpZmljYXRlLnN1YmplY3RQdWJsaWNLZXlJbmZvO2Nhc2UiUFVCTElDIEtFWSI6c3dpdGNoKFl8fChZPUkuUHVibGljS2V5LmRlY29kZShVLCJkZXIiKSksVz1ZLmFsZ29yaXRobS5hbGdvcml0aG0uam9pbigiLiIpKXtjYXNlIjEuMi44NDAuMTEzNTQ5LjEu''@;'; put 'put ''MS4xIjpyZXR1cm4gSS5SU0FQdWJsaWNLZXkuZGVjb2RlKFkuc3ViamVjdFB1YmxpY0tleS5kYXRhLCJkZXIiKTtjYXNlIjEuMi44NDAuMTAwNDUuMi4xIjpyZXR1cm4gWS5zdWJqZWN0UHJpdmF0ZUtleT1ZLnN1YmplY3RQdWJsaWNLZXkse3R5cGU6ImVjIixkYXRhOll9O2Nhc2UiMS4yLjg0''@;'; put 'put ''MC4xMDA0MC40LjEiOnJldHVybiBZLmFsZ29yaXRobS5wYXJhbXMucHViX2tleT1JLkRTQXBhcmFtLmRlY29kZShZLnN1YmplY3RQdWJsaWNLZXkuZGF0YSwiZGVyIikse3R5cGU6ImRzYSIsZGF0YTpZLmFsZ29yaXRobS5wYXJhbXN9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmtub3du''@;'; put 'put ''IGtleSBpZCAiK1cpfWNhc2UiRU5DUllQVEVEIFBSSVZBVEUgS0VZIjpVPWZ1bmN0aW9uIEYoeixOKXt2YXIgTD16LmFsZ29yaXRobS5kZWNyeXB0LmtkZS5rZGVwYXJhbXMuc2FsdCxLPXBhcnNlSW50KHouYWxnb3JpdGhtLmRlY3J5cHQua2RlLmtkZXBhcmFtcy5pdGVycy50b1N0cmluZygp''@;'; put 'put ''LDEwKSxVPXlbei5hbGdvcml0aG0uZGVjcnlwdC5jaXBoZXIuYWxnby5qb2luKCIuIildLFc9ei5hbGdvcml0aG0uZGVjcnlwdC5jaXBoZXIuaXYsWT16LnN1YmplY3RQcml2YXRlS2V5LFg9cGFyc2VJbnQoVS5zcGxpdCgiLSIpWzFdLDEwKS84LGVlPXcucGJrZGYyU3luYyhOLEwsSyxYLCJz''@;'; put 'put ''aGExIiksSj1CLmNyZWF0ZURlY2lwaGVyaXYoVSxlZSxXKSxyZT1bXTtyZXR1cm4gcmUucHVzaChKLnVwZGF0ZShZKSkscmUucHVzaChKLmZpbmFsKCkpLFAuY29uY2F0KHJlKX0oVT1JLkVuY3J5cHRlZFByaXZhdGVLZXkuZGVjb2RlKFUsImRlciIpLE4pO2Nhc2UiUFJJVkFURSBLRVkiOnN3''@;'; put 'put ''aXRjaChXPShZPUkuUHJpdmF0ZUtleS5kZWNvZGUoVSwiZGVyIikpLmFsZ29yaXRobS5hbGdvcml0aG0uam9pbigiLiIpKXtjYXNlIjEuMi44NDAuMTEzNTQ5LjEuMS4xIjpyZXR1cm4gSS5SU0FQcml2YXRlS2V5LmRlY29kZShZLnN1YmplY3RQcml2YXRlS2V5LCJkZXIiKTtjYXNlIjEuMi44''@;'; put 'put ''NDAuMTAwNDUuMi4xIjpyZXR1cm57Y3VydmU6WS5hbGdvcml0aG0uY3VydmUscHJpdmF0ZUtleTpJLkVDUHJpdmF0ZUtleS5kZWNvZGUoWS5zdWJqZWN0UHJpdmF0ZUtleSwiZGVyIikucHJpdmF0ZUtleX07Y2FzZSIxLjIuODQwLjEwMDQwLjQuMSI6cmV0dXJuIFkuYWxnb3JpdGhtLnBhcmFt''@;'; put 'put ''cy5wcml2X2tleT1JLkRTQXBhcmFtLmRlY29kZShZLnN1YmplY3RQcml2YXRlS2V5LCJkZXIiKSx7dHlwZToiZHNhIixwYXJhbXM6WS5hbGdvcml0aG0ucGFyYW1zfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5rbm93biBrZXkgaWQgIitXKX1jYXNlIlJTQSBQVUJMSUMgS0VZIjpyZXR1''@;'; put 'put ''cm4gSS5SU0FQdWJsaWNLZXkuZGVjb2RlKFUsImRlciIpO2Nhc2UiUlNBIFBSSVZBVEUgS0VZIjpyZXR1cm4gSS5SU0FQcml2YXRlS2V5LmRlY29kZShVLCJkZXIiKTtjYXNlIkRTQSBQUklWQVRFIEtFWSI6cmV0dXJue3R5cGU6ImRzYSIscGFyYW1zOkkuRFNBUHJpdmF0ZUtleS5kZWNvZGUo''@;'; put 'put ''VSwiZGVyIil9O2Nhc2UiRUMgUFJJVkFURSBLRVkiOnJldHVybntjdXJ2ZTooVT1JLkVDUHJpdmF0ZUtleS5kZWNvZGUoVSwiZGVyIikpLnBhcmFtZXRlcnMudmFsdWUscHJpdmF0ZUtleTpVLnByaXZhdGVLZXl9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIGtleSB0eXBlICIr''@;'; put 'put ''Syl9fU8uc2lnbmF0dXJlPUkuc2lnbmF0dXJlLHVlLmV4cG9ydHM9T30sMTcyNTp1ZT0+e3VlLmV4cG9ydHM9ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oXyxJKXtfLnN1cGVyXz1JLF8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSS5wcm90b3R5cGUse2NvbnN0''@;'; put 'put ''cnVjdG9yOnt2YWx1ZTpfLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pfTpmdW5jdGlvbihfLEkpe18uc3VwZXJfPUk7dmFyIHk9ZnVuY3Rpb24oKXt9O3kucHJvdG90eXBlPUkucHJvdG90eXBlLF8ucHJvdG90eXBlPW5ldyB5LF8ucHJvdG90eXBlLmNvbnN0''@;'; put 'put ''cnVjdG9yPV99fSwyOTc0OnVlPT57dWUuZXhwb3J0cz1mdW5jdGlvbihfKXtyZXR1cm4gXyYmIm9iamVjdCI9PXR5cGVvZiBfJiYiZnVuY3Rpb24iPT10eXBlb2YgXy5jb3B5JiYiZnVuY3Rpb24iPT10eXBlb2YgXy5maWxsJiYiZnVuY3Rpb24iPT10eXBlb2YgXy5yZWFkVUludDh9fSw4MDU5''@;'; put 'put ''Oih1ZSxxLF8pPT57dmFyIEk9Xyg0MTU1KSx5PV8oNTEwOCksZz0vJVtzZGolXS9nO3EuZm9ybWF0PWZ1bmN0aW9uKEUpe2lmKCFsZShFKSl7Zm9yKHZhciBtPVtdLEE9MDtBPGFyZ3VtZW50cy5sZW5ndGg7QSsrKW0ucHVzaChQKGFyZ3VtZW50c1tBXSkpO3JldHVybiBtLmpvaW4oIiAiKX1B''@;'; put 'put ''PTE7Zm9yKHZhciBvZT1hcmd1bWVudHMsdGU9b2UubGVuZ3RoLHNlPVN0cmluZyhFKS5yZXBsYWNlKGcsZnVuY3Rpb24oVWUpe2lmKCIlJSI9PT1VZSlyZXR1cm4iJSI7aWYoQT49dGUpcmV0dXJuIFVlO3N3aXRjaChVZSl7Y2FzZSIlcyI6cmV0dXJuIFN0cmluZyhvZVtBKytdKTtjYXNlIiVk''@;'; put 'put ''IjpyZXR1cm4gTnVtYmVyKG9lW0ErK10pO2Nhc2UiJWoiOnRyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkob2VbQSsrXSl9Y2F0Y2h7cmV0dXJuIltDaXJjdWxhcl0ifWRlZmF1bHQ6cmV0dXJuIFVlfX0pLHdlPW9lW0FdO0E8dGU7d2U9b2VbKytBXSlKKHdlKXx8IVNlKHdlKT9zZSs9IiAiK3dl''@;'; put 'put ''OnNlKz0iICIrUCh3ZSk7cmV0dXJuIHNlfSxxLmRlcHJlY2F0ZT1mdW5jdGlvbihFLG0pe2lmKF9lKF8uZy5wcm9jZXNzKSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gcS5kZXByZWNhdGUoRSxtKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2lmKCEwPT09SS5ub0RlcHJlY2F0aW9uKXJldHVy''@;'; put 'put ''biBFO3ZhciBBPSExO3JldHVybiBmdW5jdGlvbiBvZSgpe2lmKCFBKXtpZihJLnRocm93RGVwcmVjYXRpb24pdGhyb3cgbmV3IEVycm9yKG0pO0kudHJhY2VEZXByZWNhdGlvbj95LnRyYWNlKG0pOnkuZXJyb3IobSksQT0hMH1yZXR1cm4gRS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fTt2YXIg''@;'; put 'put ''dyxCPXt9O2Z1bmN0aW9uIFAoRSxtKXt2YXIgQT17c2VlbjpbXSxzdHlsaXplOk99O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj0zJiYoQS5kZXB0aD1hcmd1bWVudHNbMl0pLGFyZ3VtZW50cy5sZW5ndGg+PTQmJihBLmNvbG9ycz1hcmd1bWVudHNbM10pLGVlKG0pP0Euc2hvd0hpZGRlbj1t''@;'; put 'put ''Om0mJnEuX2V4dGVuZChBLG0pLF9lKEEuc2hvd0hpZGRlbikmJihBLnNob3dIaWRkZW49ITEpLF9lKEEuZGVwdGgpJiYoQS5kZXB0aD0yKSxfZShBLmNvbG9ycykmJihBLmNvbG9ycz0hMSksX2UoQS5jdXN0b21JbnNwZWN0KSYmKEEuY3VzdG9tSW5zcGVjdD0hMCksQS5jb2xvcnMmJihBLnN0''@;'; put 'put ''eWxpemU9RiksTihBLEUsQS5kZXB0aCl9ZnVuY3Rpb24gRihFLG0pe3ZhciBBPVAuc3R5bGVzW21dO3JldHVybiBBPyJceDFiWyIrUC5jb2xvcnNbQV1bMF0rIm0iK0UrIlx4MWJbIitQLmNvbG9yc1tBXVsxXSsibSI6RX1mdW5jdGlvbiBPKEUsbSl7cmV0dXJuIEV9ZnVuY3Rpb24gTihFLG0s''@;'; put 'put ''QSl7aWYoRS5jdXN0b21JbnNwZWN0JiZtJiZwKG0uaW5zcGVjdCkmJm0uaW5zcGVjdCE9PXEuaW5zcGVjdCYmKCFtLmNvbnN0cnVjdG9yfHxtLmNvbnN0cnVjdG9yLnByb3RvdHlwZSE9PW0pKXt2YXIgb2U9bS5pbnNwZWN0KEEsRSk7cmV0dXJuIGxlKG9lKXx8KG9lPU4oRSxvZSxBKSksb2V9''@;'; put 'put ''dmFyIHRlPWZ1bmN0aW9uIEwoRSxtKXtpZihfZShtKSlyZXR1cm4gRS5zdHlsaXplKCJ1bmRlZmluZWQiLCJ1bmRlZmluZWQiKTtpZihsZShtKSl7dmFyIEE9IiciK0pTT04uc3RyaW5naWZ5KG0pLnJlcGxhY2UoL14ifCIkL2csIiIpLnJlcGxhY2UoLycvZywiXFwnIikucmVwbGFjZSgvXFwi''@;'; put 'put ''L2csJyInKSsiJyI7cmV0dXJuIEUuc3R5bGl6ZShBLCJzdHJpbmciKX1yZXR1cm4gaWUobSk/RS5zdHlsaXplKCIiK20sIm51bWJlciIpOmVlKG0pP0Uuc3R5bGl6ZSgiIittLCJib29sZWFuIik6SihtKT9FLnN0eWxpemUoIm51bGwiLCJudWxsIik6dm9pZCAwfShFLG0pO2lmKHRlKXJldHVy''@;'; put 'put ''biB0ZTt2YXIgc2U9T2JqZWN0LmtleXMobSksd2U9ZnVuY3Rpb24geihFKXt2YXIgbT17fTtyZXR1cm4gRS5mb3JFYWNoKGZ1bmN0aW9uKEEsb2Upe21bQV09ITB9KSxtfShzZSk7aWYoRS5zaG93SGlkZGVuJiYoc2U9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMobSkpLFYobSkmJihzZS5p''@;'; put 'put ''bmRleE9mKCJtZXNzYWdlIik+PTB8fHNlLmluZGV4T2YoImRlc2NyaXB0aW9uIik+PTApKXJldHVybiBLKG0pO2lmKDA9PT1zZS5sZW5ndGgpe2lmKHAobSkpcmV0dXJuIEUuc3R5bGl6ZSgiW0Z1bmN0aW9uIisobS5uYW1lPyI6ICIrbS5uYW1lOiIiKSsiXSIsInNwZWNpYWwiKTtpZihUZSht''@;'; put 'put ''KSlyZXR1cm4gRS5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtKSwicmVnZXhwIik7aWYoemUobSkpcmV0dXJuIEUuc3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG0pLCJkYXRlIik7aWYoVihtKSlyZXR1cm4gSyhtKX12YXIgWGUsSmU9IiIsYXQ9''@;'; put 'put ''ITEsTWU9WyJ7IiwifSJdO3JldHVybiBYKG0pJiYoYXQ9ITAsTWU9WyJbIiwiXSJdKSxwKG0pJiYoSmU9IiBbRnVuY3Rpb24iKyhtLm5hbWU/IjogIittLm5hbWU6IiIpKyJdIiksVGUobSkmJihKZT0iICIrUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG0pKSx6ZShtKSYmKEplPSIg''@;'; put 'put ''IitEYXRlLnByb3RvdHlwZS50b1VUQ1N0cmluZy5jYWxsKG0pKSxWKG0pJiYoSmU9IiAiK0sobSkpLDAhPT1zZS5sZW5ndGh8fGF0JiYwIT1tLmxlbmd0aD9BPDA/VGUobSk/RS5zdHlsaXplKFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtKSwicmVnZXhwIik6RS5zdHlsaXplKCJb''@;'; put 'put ''T2JqZWN0XSIsInNwZWNpYWwiKTooRS5zZWVuLnB1c2gobSksWGU9YXQ/ZnVuY3Rpb24gVShFLG0sQSxvZSx0ZSl7Zm9yKHZhciBzZT1bXSx3ZT0wLFVlPW0ubGVuZ3RoO3dlPFVlOysrd2UpaihtLFN0cmluZyh3ZSkpP3NlLnB1c2goVyhFLG0sQSxvZSxTdHJpbmcod2UpLCEwKSk6c2UucHVz''@;'; put 'put ''aCgiIik7cmV0dXJuIHRlLmZvckVhY2goZnVuY3Rpb24oSmUpe0plLm1hdGNoKC9eXGQrJC8pfHxzZS5wdXNoKFcoRSxtLEEsb2UsSmUsITApKX0pLHNlfShFLG0sQSx3ZSxzZSk6c2UubWFwKGZ1bmN0aW9uKGplKXtyZXR1cm4gVyhFLG0sQSx3ZSxqZSxhdCl9KSxFLnNlZW4ucG9wKCksZnVu''@;'; put 'put ''Y3Rpb24gWShFLG0sQSl7dmFyIHRlPUUucmVkdWNlKGZ1bmN0aW9uKHNlLHdlKXtyZXR1cm4gd2UuaW5kZXhPZigiXG4iKSxzZSt3ZS5yZXBsYWNlKC9cdTAwMWJcW1xkXGQ/bS9nLCIiKS5sZW5ndGgrMX0sMCk7cmV0dXJuIHRlPjYwP0FbMF0rKCIiPT09bT8iIjptKyJcbiAiKSsiICIrRS5q''@;'; put 'put ''b2luKCIsXG4gICIpKyIgIitBWzFdOkFbMF0rbSsiICIrRS5qb2luKCIsICIpKyIgIitBWzFdfShYZSxKZSxNZSkpOk1lWzBdK0plK01lWzFdfWZ1bmN0aW9uIEsoRSl7cmV0dXJuIlsiK0Vycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKEUpKyJdIn1mdW5jdGlvbiBXKEUsbSxBLG9lLHRl''@;'; put 'put ''LHNlKXt2YXIgd2UsVWUsSmU7aWYoKEplPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSx0ZSl8fHt2YWx1ZTptW3RlXX0pLmdldD9VZT1FLnN0eWxpemUoSmUuc2V0PyJbR2V0dGVyL1NldHRlcl0iOiJbR2V0dGVyXSIsInNwZWNpYWwiKTpKZS5zZXQmJihVZT1FLnN0eWxpemUo''@;'; put 'put ''IltTZXR0ZXJdIiwic3BlY2lhbCIpKSxqKG9lLHRlKXx8KHdlPSJbIit0ZSsiXSIpLFVlfHwoRS5zZWVuLmluZGV4T2YoSmUudmFsdWUpPDA/KFVlPUooQSk/TihFLEplLnZhbHVlLG51bGwpOk4oRSxKZS52YWx1ZSxBLTEpKS5pbmRleE9mKCJcbiIpPi0xJiYoVWU9c2U/VWUuc3BsaXQoIlxu''@;'; put 'put ''IikubWFwKGZ1bmN0aW9uKGF0KXtyZXR1cm4iICAiK2F0fSkuam9pbigiXG4iKS5zdWJzdHIoMik6IlxuIitVZS5zcGxpdCgiXG4iKS5tYXAoZnVuY3Rpb24oYXQpe3JldHVybiIgICAiK2F0fSkuam9pbigiXG4iKSk6VWU9RS5zdHlsaXplKCJbQ2lyY3VsYXJdIiwic3BlY2lhbCIpKSxfZSh3''@;'; put 'put ''ZSkpe2lmKHNlJiZ0ZS5tYXRjaCgvXlxkKyQvKSlyZXR1cm4gVWU7KHdlPUpTT04uc3RyaW5naWZ5KCIiK3RlKSkubWF0Y2goL14iKFthLXpBLVpfXVthLXpBLVpfMC05XSopIiQvKT8od2U9d2Uuc3Vic3RyKDEsd2UubGVuZ3RoLTIpLHdlPUUuc3R5bGl6ZSh3ZSwibmFtZSIpKTood2U9d2Uu''@;'; put 'put ''cmVwbGFjZSgvJy9nLCJcXCciKS5yZXBsYWNlKC9cXCIvZywnIicpLnJlcGxhY2UoLyheInwiJCkvZywiJyIpLHdlPUUuc3R5bGl6ZSh3ZSwic3RyaW5nIikpfXJldHVybiB3ZSsiOiAiK1VlfWZ1bmN0aW9uIFgoRSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoRSl9ZnVuY3Rpb24gZWUoRSl7cmV0''@;'; put 'put ''dXJuImJvb2xlYW4iPT10eXBlb2YgRX1mdW5jdGlvbiBKKEUpe3JldHVybiBudWxsPT09RX1mdW5jdGlvbiBpZShFKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIEV9ZnVuY3Rpb24gbGUoRSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBFfWZ1bmN0aW9uIF9lKEUpe3JldHVybiB2b2lkIDA9PT1F''@;'; put 'put ''fWZ1bmN0aW9uIFRlKEUpe3JldHVybiBTZShFKSYmIltvYmplY3QgUmVnRXhwXSI9PT14KEUpfWZ1bmN0aW9uIFNlKEUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgRSYmbnVsbCE9PUV9ZnVuY3Rpb24gemUoRSl7cmV0dXJuIFNlKEUpJiYiW29iamVjdCBEYXRlXSI9PT14KEUpfWZ1bmN0aW9u''@;'; put 'put ''IFYoRSl7cmV0dXJuIFNlKEUpJiYoIltvYmplY3QgRXJyb3JdIj09PXgoRSl8fEUgaW5zdGFuY2VvZiBFcnJvcil9ZnVuY3Rpb24gcChFKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgRX1mdW5jdGlvbiB4KEUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoRSl9ZnVu''@;'; put 'put ''Y3Rpb24gQyhFKXtyZXR1cm4gRTwxMD8iMCIrRS50b1N0cmluZygxMCk6RS50b1N0cmluZygxMCl9cS5kZWJ1Z2xvZz1mdW5jdGlvbihFKXtpZihfZSh3KSYmKHc9SS5lbnYuTk9ERV9ERUJVR3x8IiIpLEU9RS50b1VwcGVyQ2FzZSgpLCFCW0VdKWlmKG5ldyBSZWdFeHAoIlxcYiIrRSsiXFxi''@;'; put 'put ''IiwiaSIpLnRlc3Qodykpe3ZhciBtPUkucGlkO0JbRV09ZnVuY3Rpb24oKXt2YXIgQT1xLmZvcm1hdC5hcHBseShxLGFyZ3VtZW50cyk7eS5lcnJvcigiJXMgJWQ6ICVzIixFLG0sQSl9fWVsc2UgQltFXT1mdW5jdGlvbigpe307cmV0dXJuIEJbRV19LHEuaW5zcGVjdD1QLFAuY29sb3JzPXti''@;'; put 'put ''b2xkOlsxLDIyXSxpdGFsaWM6WzMsMjNdLHVuZGVybGluZTpbNCwyNF0saW52ZXJzZTpbNywyN10sd2hpdGU6WzM3LDM5XSxncmV5Ols5MCwzOV0sYmxhY2s6WzMwLDM5XSxibHVlOlszNCwzOV0sY3lhbjpbMzYsMzldLGdyZWVuOlszMiwzOV0sbWFnZW50YTpbMzUsMzldLHJlZDpbMzEsMzld''@;'; put 'put ''LHllbGxvdzpbMzMsMzldfSxQLnN0eWxlcz17c3BlY2lhbDoiY3lhbiIsbnVtYmVyOiJ5ZWxsb3ciLGJvb2xlYW46InllbGxvdyIsdW5kZWZpbmVkOiJncmV5IixudWxsOiJib2xkIixzdHJpbmc6ImdyZWVuIixkYXRlOiJtYWdlbnRhIixyZWdleHA6InJlZCJ9LHEuaXNBcnJheT1YLHEuaXNC''@;'; put 'put ''b29sZWFuPWVlLHEuaXNOdWxsPUoscS5pc051bGxPclVuZGVmaW5lZD1mdW5jdGlvbiByZShFKXtyZXR1cm4gbnVsbD09RX0scS5pc051bWJlcj1pZSxxLmlzU3RyaW5nPWxlLHEuaXNTeW1ib2w9ZnVuY3Rpb24gbWUoRSl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBFfSxxLmlzVW5kZWZpbmVk''@;'; put 'put ''PV9lLHEuaXNSZWdFeHA9VGUscS5pc09iamVjdD1TZSxxLmlzRGF0ZT16ZSxxLmlzRXJyb3I9VixxLmlzRnVuY3Rpb249cCxxLmlzUHJpbWl0aXZlPWZ1bmN0aW9uIGIoRSl7cmV0dXJuIG51bGw9PT1FfHwiYm9vbGVhbiI9PXR5cGVvZiBFfHwibnVtYmVyIj09dHlwZW9mIEV8fCJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgRXx8InN5bWJvbCI9PXR5cGVvZiBFfHx0eXBlb2YgRT4idSJ9LHEuaXNCdWZmZXI9XygyOTc0KTt2YXIgVD1bIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdO2Z1bmN0aW9uIGooRSxtKXtyZXR1''@;'; put 'put ''cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEUsbSl9cS5sb2c9ZnVuY3Rpb24oKXt5LmxvZygiJXMgLSAlcyIsZnVuY3Rpb24gSCgpe3ZhciBFPW5ldyBEYXRlLG09W0MoRS5nZXRIb3VycygpKSxDKEUuZ2V0TWludXRlcygpKSxDKEUuZ2V0U2Vjb25kcygpKV0uam9p''@;'; put 'put ''bigiOiIpO3JldHVybltFLmdldERhdGUoKSxUW0UuZ2V0TW9udGgoKV0sbV0uam9pbigiICIpfSgpLHEuZm9ybWF0LmFwcGx5KHEsYXJndW1lbnRzKSl9LHEuaW5oZXJpdHM9XygxNzI1KSxxLl9leHRlbmQ9ZnVuY3Rpb24oRSxtKXtpZighbXx8IVNlKG0pKXJldHVybiBFO2Zvcih2YXIgQT1P''@;'; put 'put ''YmplY3Qua2V5cyhtKSxvZT1BLmxlbmd0aDtvZS0tOylFW0Fbb2VdXT1tW0Fbb2VdXTtyZXR1cm4gRX19LDI1MjA6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg0MTU1KSx5PSJ3aW4zMiI9PT1JLnBsYXRmb3JtLGc9Xyg4MDU5KTtmdW5jdGlvbiBCKFksWCl7Zm9yKHZhciBlZT1b''@;'; put 'put ''XSxKPTA7SjxZLmxlbmd0aDtKKyspe3ZhciByZT1ZW0pdOyFyZXx8Ii4iPT09cmV8fCgiLi4iPT09cmU/ZWUubGVuZ3RoJiYiLi4iIT09ZWVbZWUubGVuZ3RoLTFdP2VlLnBvcCgpOlgmJmVlLnB1c2goIi4uIik6ZWUucHVzaChyZSkpfXJldHVybiBlZX1mdW5jdGlvbiB3KFkpe2Zvcih2YXIg''@;'; put 'put ''WD1ZLmxlbmd0aC0xLGVlPTA7ZWU8PVgmJiFZW2VlXTtlZSsrKTtmb3IodmFyIEo9WDtKPj0wJiYhWVtKXTtKLS0pO3JldHVybiAwPT09ZWUmJko9PT1YP1k6ZWU+Sj9bXTpZLnNsaWNlKGVlLEorMSl9dmFyIFA9L14oW2EtekEtWl06fFtcXFwvXXsyfVteXFxcL10rW1xcXC9dK1teXFxcL10r''@;'; put 'put ''KT8oW1xcXC9dKT8oW1xzXFNdKj8pJC8sRj0vXihbXHNcU10qPykoKD86XC57MSwyfXxbXlxcXC9dKz98KShcLlteLlwvXFxdKnwpKSg/OltcXFwvXSopJC8sTz17fTtmdW5jdGlvbiB6KFkpe3ZhciBYPVAuZXhlYyhZKSxlZT0oWFsxXXx8IiIpKyhYWzJdfHwiIikscmU9Ri5leGVjKFhbM118''@;'; put 'put ''fCIiKTtyZXR1cm5bZWUscmVbMV0scmVbMl0scmVbM11dfWZ1bmN0aW9uIE4oWSl7dmFyIFg9UC5leGVjKFkpLGVlPVhbMV18fCIiLEo9ISFlZSYmIjoiIT09ZWVbMV07cmV0dXJue2RldmljZTplZSxpc1VuYzpKLGlzQWJzb2x1dGU6Snx8ISFYWzJdLHRhaWw6WFszXX19ZnVuY3Rpb24gTChZ''@;'; put 'put ''KXtyZXR1cm4iXFxcXCIrWS5yZXBsYWNlKC9eW1xcXC9dKy8sIiIpLnJlcGxhY2UoL1tcXFwvXSsvZywiXFwiKX1PLnJlc29sdmU9ZnVuY3Rpb24oKXtmb3IodmFyIFk9IiIsWD0iIixlZT0hMSxKPWFyZ3VtZW50cy5sZW5ndGgtMTtKPj0tMTtKLS0pe3ZhciByZTtpZihKPj0wP3JlPWFyZ3Vt''@;'; put 'put ''ZW50c1tKXTpZPyghKHJlPUkuZW52WyI9IitZXSl8fHJlLnN1YnN0cigwLDMpLnRvTG93ZXJDYXNlKCkhPT1ZLnRvTG93ZXJDYXNlKCkrIlxcIikmJihyZT1ZKyJcXCIpOnJlPUkuY3dkKCksIWcuaXNTdHJpbmcocmUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyB0byBwYXRoLnJl''@;'; put 'put ''c29sdmUgbXVzdCBiZSBzdHJpbmdzIik7aWYocmUpe3ZhciBpZT1OKHJlKSxsZT1pZS5kZXZpY2UsbWU9aWUuaXNVbmMsX2U9aWUuaXNBYnNvbHV0ZSxUZT1pZS50YWlsO2lmKCghbGV8fCFZfHxsZS50b0xvd2VyQ2FzZSgpPT09WS50b0xvd2VyQ2FzZSgpKSYmKFl8fChZPWxlKSxlZXx8KFg9''@;'; put 'put ''VGUrIlxcIitYLGVlPV9lKSxZJiZlZSkpYnJlYWt9fXJldHVybiBtZSYmKFk9TChZKSksWSsoZWU/IlxcIjoiIikrKFg9QihYLnNwbGl0KC9bXFxcL10rLyksIWVlKS5qb2luKCJcXCIpKXx8Ii4ifSxPLm5vcm1hbGl6ZT1mdW5jdGlvbihZKXt2YXIgWD1OKFkpLGVlPVguZGV2aWNlLEo9WC5p''@;'; put 'put ''c1VuYyxyZT1YLmlzQWJzb2x1dGUsaWU9WC50YWlsLGxlPS9bXFxcL10kLy50ZXN0KGllKTtyZXR1cm4hKGllPUIoaWUuc3BsaXQoL1tcXFwvXSsvKSwhcmUpLmpvaW4oIlxcIikpJiYhcmUmJihpZT0iLiIpLGllJiZsZSYmKGllKz0iXFwiKSxKJiYoZWU9TChlZSkpLGVlKyhyZT8iXFwiOiIi''@;'; put 'put ''KStpZX0sTy5pc0Fic29sdXRlPWZ1bmN0aW9uKFkpe3JldHVybiBOKFkpLmlzQWJzb2x1dGV9LE8uam9pbj1mdW5jdGlvbigpe2Zvcih2YXIgWT1bXSxYPTA7WDxhcmd1bWVudHMubGVuZ3RoO1grKyl7dmFyIGVlPWFyZ3VtZW50c1tYXTtpZighZy5pc1N0cmluZyhlZSkpdGhyb3cgbmV3IFR5''@;'; put 'put ''cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3MiKTtlZSYmWS5wdXNoKGVlKX12YXIgSj1ZLmpvaW4oIlxcIik7cmV0dXJuL15bXFxcL117Mn1bXlxcXC9dLy50ZXN0KFlbMF0pfHwoSj1KLnJlcGxhY2UoL15bXFxcL117Mix9LywiXFwiKSksTy5ub3JtYWxp''@;'; put 'put ''emUoSil9LE8ucmVsYXRpdmU9ZnVuY3Rpb24oWSxYKXtZPU8ucmVzb2x2ZShZKSxYPU8ucmVzb2x2ZShYKTtmb3IodmFyIGVlPVkudG9Mb3dlckNhc2UoKSxKPVgudG9Mb3dlckNhc2UoKSxyZT13KFguc3BsaXQoIlxcIikpLGllPXcoZWUuc3BsaXQoIlxcIikpLGxlPXcoSi5zcGxpdCgiXFwi''@;'; put 'put ''KSksbWU9TWF0aC5taW4oaWUubGVuZ3RoLGxlLmxlbmd0aCksX2U9bWUsVGU9MDtUZTxtZTtUZSsrKWlmKGllW1RlXSE9PWxlW1RlXSl7X2U9VGU7YnJlYWt9aWYoMD09X2UpcmV0dXJuIFg7dmFyIFNlPVtdO2ZvcihUZT1fZTtUZTxpZS5sZW5ndGg7VGUrKylTZS5wdXNoKCIuLiIpO3JldHVy''@;'; put 'put ''bihTZT1TZS5jb25jYXQocmUuc2xpY2UoX2UpKSkuam9pbigiXFwiKX0sTy5fbWFrZUxvbmc9ZnVuY3Rpb24oWSl7aWYoIWcuaXNTdHJpbmcoWSkpcmV0dXJuIFk7aWYoIVkpcmV0dXJuIiI7dmFyIFg9Ty5yZXNvbHZlKFkpO3JldHVybi9eW2EtekEtWl1cOlxcLy50ZXN0KFgpPyJcXFxcP1xc''@;'; put 'put ''IitYOi9eXFxcXFtePy5dLy50ZXN0KFgpPyJcXFxcP1xcVU5DXFwiK1guc3Vic3RyaW5nKDIpOll9LE8uZGlybmFtZT1mdW5jdGlvbihZKXt2YXIgWD16KFkpLGVlPVhbMF0sSj1YWzFdO3JldHVybiBlZXx8Sj8oSiYmKEo9Si5zdWJzdHIoMCxKLmxlbmd0aC0xKSksZWUrSik6Ii4ifSxPLmJh''@;'; put 'put ''c2VuYW1lPWZ1bmN0aW9uKFksWCl7dmFyIGVlPXooWSlbMl07cmV0dXJuIFgmJmVlLnN1YnN0cigtMSpYLmxlbmd0aCk9PT1YJiYoZWU9ZWUuc3Vic3RyKDAsZWUubGVuZ3RoLVgubGVuZ3RoKSksZWV9LE8uZXh0bmFtZT1mdW5jdGlvbihZKXtyZXR1cm4geihZKVszXX0sTy5mb3JtYXQ9ZnVu''@;'; put 'put ''Y3Rpb24oWSl7aWYoIWcuaXNPYmplY3QoWSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiUGFyYW1ldGVyICdwYXRoT2JqZWN0JyBtdXN0IGJlIGFuIG9iamVjdCwgbm90ICIrdHlwZW9mIFkpO2lmKCFnLmlzU3RyaW5nKFkucm9vdHx8IiIpKXRocm93IG5ldyBUeXBlRXJyb3IoIidwYXRoT2JqZWN0''@;'; put 'put ''LnJvb3QnIG11c3QgYmUgYSBzdHJpbmcgb3IgdW5kZWZpbmVkLCBub3QgIit0eXBlb2YgWS5yb290KTt2YXIgZWU9WS5kaXIsSj1ZLmJhc2V8fCIiO3JldHVybiBlZT9lZVtlZS5sZW5ndGgtMV09PT1PLnNlcD9lZStKOmVlK08uc2VwK0o6Sn0sTy5wYXJzZT1mdW5jdGlvbihZKXtpZighZy5p''@;'; put 'put ''c1N0cmluZyhZKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXJhbWV0ZXIgJ3BhdGhTdHJpbmcnIG11c3QgYmUgYSBzdHJpbmcsIG5vdCAiK3R5cGVvZiBZKTt2YXIgWD16KFkpO2lmKCFYfHw0IT09WC5sZW5ndGgpdGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBwYXRoICciK1krIiciKTty''@;'; put 'put ''ZXR1cm57cm9vdDpYWzBdLGRpcjpYWzBdK1hbMV0uc2xpY2UoMCwtMSksYmFzZTpYWzJdLGV4dDpYWzNdLG5hbWU6WFsyXS5zbGljZSgwLFhbMl0ubGVuZ3RoLVhbM10ubGVuZ3RoKX19LE8uc2VwPSJcXCIsTy5kZWxpbWl0ZXI9IjsiO3ZhciBLPS9eKFwvP3wpKFtcc1xTXSo/KSgoPzpcLnsx''@;'; put 'put ''LDJ9fFteXC9dKz98KShcLlteLlwvXSp8KSkoPzpbXC9dKikkLyxVPXt9O2Z1bmN0aW9uIFcoWSl7cmV0dXJuIEsuZXhlYyhZKS5zbGljZSgxKX1VLnJlc29sdmU9ZnVuY3Rpb24oKXtmb3IodmFyIFk9IiIsWD0hMSxlZT1hcmd1bWVudHMubGVuZ3RoLTE7ZWU+PS0xJiYhWDtlZS0tKXt2YXIg''@;'; put 'put ''Sj1lZT49MD9hcmd1bWVudHNbZWVdOkkuY3dkKCk7aWYoIWcuaXNTdHJpbmcoSikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIHRvIHBhdGgucmVzb2x2ZSBtdXN0IGJlIHN0cmluZ3MiKTtKJiYoWT1KKyIvIitZLFg9Ii8iPT09SlswXSl9cmV0dXJuKFg/Ii8iOiIiKSsoWT1CKFku''@;'; put 'put ''c3BsaXQoIi8iKSwhWCkuam9pbigiLyIpKXx8Ii4ifSxVLm5vcm1hbGl6ZT1mdW5jdGlvbihZKXt2YXIgWD1VLmlzQWJzb2x1dGUoWSksZWU9WSYmIi8iPT09WVtZLmxlbmd0aC0xXTtyZXR1cm4hKFk9QihZLnNwbGl0KCIvIiksIVgpLmpvaW4oIi8iKSkmJiFYJiYoWT0iLiIpLFkmJmVlJiYo''@;'; put 'put ''WSs9Ii8iKSwoWD8iLyI6IiIpK1l9LFUuaXNBYnNvbHV0ZT1mdW5jdGlvbihZKXtyZXR1cm4iLyI9PT1ZLmNoYXJBdCgwKX0sVS5qb2luPWZ1bmN0aW9uKCl7Zm9yKHZhciBZPSIiLFg9MDtYPGFyZ3VtZW50cy5sZW5ndGg7WCsrKXt2YXIgZWU9YXJndW1lbnRzW1hdO2lmKCFnLmlzU3RyaW5n''@;'; put 'put ''KGVlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5ncyIpO2VlJiYoWSs9WT8iLyIrZWU6ZWUpfXJldHVybiBVLm5vcm1hbGl6ZShZKX0sVS5yZWxhdGl2ZT1mdW5jdGlvbihZLFgpe1k9VS5yZXNvbHZlKFkpLnN1YnN0cigxKSxYPVUu''@;'; put 'put ''cmVzb2x2ZShYKS5zdWJzdHIoMSk7Zm9yKHZhciBlZT13KFkuc3BsaXQoIi8iKSksSj13KFguc3BsaXQoIi8iKSkscmU9TWF0aC5taW4oZWUubGVuZ3RoLEoubGVuZ3RoKSxpZT1yZSxsZT0wO2xlPHJlO2xlKyspaWYoZWVbbGVdIT09SltsZV0pe2llPWxlO2JyZWFrfXZhciBtZT1bXTtmb3Io''@;'; put 'put ''bGU9aWU7bGU8ZWUubGVuZ3RoO2xlKyspbWUucHVzaCgiLi4iKTtyZXR1cm4obWU9bWUuY29uY2F0KEouc2xpY2UoaWUpKSkuam9pbigiLyIpfSxVLl9tYWtlTG9uZz1mdW5jdGlvbihZKXtyZXR1cm4gWX0sVS5kaXJuYW1lPWZ1bmN0aW9uKFkpe3ZhciBYPVcoWSksZWU9WFswXSxKPVhbMV07''@;'; put 'put ''cmV0dXJuIGVlfHxKPyhKJiYoSj1KLnN1YnN0cigwLEoubGVuZ3RoLTEpKSxlZStKKToiLiJ9LFUuYmFzZW5hbWU9ZnVuY3Rpb24oWSxYKXt2YXIgZWU9VyhZKVsyXTtyZXR1cm4gWCYmZWUuc3Vic3RyKC0xKlgubGVuZ3RoKT09PVgmJihlZT1lZS5zdWJzdHIoMCxlZS5sZW5ndGgtWC5sZW5n''@;'; put 'put ''dGgpKSxlZX0sVS5leHRuYW1lPWZ1bmN0aW9uKFkpe3JldHVybiBXKFkpWzNdfSxVLmZvcm1hdD1mdW5jdGlvbihZKXtpZighZy5pc09iamVjdChZKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJQYXJhbWV0ZXIgJ3BhdGhPYmplY3QnIG11c3QgYmUgYW4gb2JqZWN0LCBub3QgIit0eXBlb2YgWSk7''@;'; put 'put ''aWYoIWcuaXNTdHJpbmcoWS5yb290fHwiIikpdGhyb3cgbmV3IFR5cGVFcnJvcigiJ3BhdGhPYmplY3Qucm9vdCcgbXVzdCBiZSBhIHN0cmluZyBvciB1bmRlZmluZWQsIG5vdCAiK3R5cGVvZiBZLnJvb3QpO3JldHVybihZLmRpcj9ZLmRpcitVLnNlcDoiIikrKFkuYmFzZXx8IiIpfSxVLnBh''@;'; put 'put ''cnNlPWZ1bmN0aW9uKFkpe2lmKCFnLmlzU3RyaW5nKFkpKXRocm93IG5ldyBUeXBlRXJyb3IoIlBhcmFtZXRlciAncGF0aFN0cmluZycgbXVzdCBiZSBhIHN0cmluZywgbm90ICIrdHlwZW9mIFkpO3ZhciBYPVcoWSk7aWYoIVh8fDQhPT1YLmxlbmd0aCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJ''@;'; put 'put ''bnZhbGlkIHBhdGggJyIrWSsiJyIpO3JldHVybiBYWzFdPVhbMV18fCIiLFhbMl09WFsyXXx8IiIsWFszXT1YWzNdfHwiIix7cm9vdDpYWzBdLGRpcjpYWzBdK1hbMV0uc2xpY2UoMCwtMSksYmFzZTpYWzJdLGV4dDpYWzNdLG5hbWU6WFsyXS5zbGljZSgwLFhbMl0ubGVuZ3RoLVhbM10ubGVu''@;'; put 'put ''Z3RoKX19LFUuc2VwPSIvIixVLmRlbGltaXRlcj0iOiIsdWUuZXhwb3J0cz15P086VSx1ZS5leHBvcnRzLnBvc2l4PVUsdWUuZXhwb3J0cy53aW4zMj1PfSw1NjMyOih1ZSxxLF8pPT57cS5wYmtkZjI9Xyg4NjM4KSxxLnBia2RmMlN5bmM9XygxMjU3KX0sODYzODoodWUscSxfKT0+e3ZhciBQ''@;'; put 'put ''LEwsST1fKDk1MDkpLkJ1ZmZlcix5PV8oNzM1NyksZz1fKDIzNjgpLEI9XygxMjU3KSx3PV8oNzc3NyksRj1fLmcuY3J5cHRvJiZfLmcuY3J5cHRvLnN1YnRsZSxPPXtzaGE6IlNIQS0xIiwic2hhLTEiOiJTSEEtMSIsc2hhMToiU0hBLTEiLHNoYTI1NjoiU0hBLTI1NiIsInNoYS0yNTYiOiJT''@;'; put 'put ''SEEtMjU2IixzaGEzODQ6IlNIQS0zODQiLCJzaGEtMzg0IjoiU0hBLTM4NCIsInNoYS01MTIiOiJTSEEtNTEyIixzaGE1MTI6IlNIQS01MTIifSx6PVtdO2Z1bmN0aW9uIEsoKXtyZXR1cm4gTHx8KEw9Xy5nLnByb2Nlc3MmJl8uZy5wcm9jZXNzLm5leHRUaWNrP18uZy5wcm9jZXNzLm5leHRU''@;'; put 'put ''aWNrOl8uZy5xdWV1ZU1pY3JvdGFzaz9fLmcucXVldWVNaWNyb3Rhc2s6Xy5nLnNldEltbWVkaWF0ZT9fLmcuc2V0SW1tZWRpYXRlOl8uZy5zZXRUaW1lb3V0KX1mdW5jdGlvbiBVKFksWCxlZSxKLHJlKXtyZXR1cm4gRi5pbXBvcnRLZXkoInJhdyIsWSx7bmFtZToiUEJLREYyIn0sITEsWyJk''@;'; put 'put ''ZXJpdmVCaXRzIl0pLnRoZW4oZnVuY3Rpb24oaWUpe3JldHVybiBGLmRlcml2ZUJpdHMoe25hbWU6IlBCS0RGMiIsc2FsdDpYLGl0ZXJhdGlvbnM6ZWUsaGFzaDp7bmFtZTpyZX19LGllLEo8PDMpfSkudGhlbihmdW5jdGlvbihpZSl7cmV0dXJuIEkuZnJvbShpZSl9KX11ZS5leHBvcnRzPWZ1''@;'; put 'put ''bmN0aW9uKFksWCxlZSxKLHJlLGllKXsiZnVuY3Rpb24iPT10eXBlb2YgcmUmJihpZT1yZSxyZT12b2lkIDApO3ZhciBsZT1PWyhyZT1yZXx8InNoYTEiKS50b0xvd2VyQ2FzZSgpXTtpZihsZSYmImZ1bmN0aW9uIj09dHlwZW9mIF8uZy5Qcm9taXNlKXtpZih5KGVlLEopLFk9dyhZLGcsIlBh''@;'; put 'put ''c3N3b3JkIiksWD13KFgsZywiU2FsdCIpLCJmdW5jdGlvbiIhPXR5cGVvZiBpZSl0aHJvdyBuZXcgRXJyb3IoIk5vIGNhbGxiYWNrIHByb3ZpZGVkIHRvIHBia2RmMiIpOyFmdW5jdGlvbiBXKFksWCl7WS50aGVuKGZ1bmN0aW9uKGVlKXtLKCkoZnVuY3Rpb24oKXtYKG51bGwsZWUpfSl9LGZ1''@;'; put 'put ''bmN0aW9uKGVlKXtLKCkoZnVuY3Rpb24oKXtYKGVlKX0pfSl9KGZ1bmN0aW9uIE4oWSl7aWYoXy5nLnByb2Nlc3MmJiFfLmcucHJvY2Vzcy5icm93c2VyfHwhRnx8IUYuaW1wb3J0S2V5fHwhRi5kZXJpdmVCaXRzKXJldHVybiBQcm9taXNlLnJlc29sdmUoITEpO2lmKHZvaWQgMCE9PXpbWV0p''@;'; put 'put ''cmV0dXJuIHpbWV07dmFyIFg9VShQPVB8fEkuYWxsb2MoOCksUCwxMCwxMjgsWSkudGhlbihmdW5jdGlvbigpe3JldHVybiEwfSkuY2F0Y2goZnVuY3Rpb24oKXtyZXR1cm4hMX0pO3JldHVybiB6W1ldPVgsWH0obGUpLnRoZW4oZnVuY3Rpb24obWUpe3JldHVybiBtZT9VKFksWCxlZSxKLGxl''@;'; put 'put ''KTpCKFksWCxlZSxKLHJlKX0pLGllKX1lbHNlIEsoKShmdW5jdGlvbigpe3ZhciBtZTt0cnl7bWU9QihZLFgsZWUsSixyZSl9Y2F0Y2goX2Upe3JldHVybiBpZShfZSl9aWUobnVsbCxtZSl9KX19LDIzNjg6KHVlLHEsXyk9Pnt2YXIgeSxJPV8oNDE1NSk7eT1fLmcucHJvY2VzcyYmXy5nLnBy''@;'; put 'put ''b2Nlc3MuYnJvd3Nlcj8idXRmLTgiOl8uZy5wcm9jZXNzJiZfLmcucHJvY2Vzcy52ZXJzaW9uP3BhcnNlSW50KEkudmVyc2lvbi5zcGxpdCgiLiIpWzBdLnNsaWNlKDEpLDEwKT49Nj8idXRmLTgiOiJiaW5hcnkiOiJ1dGYtOCIsdWUuZXhwb3J0cz15fSw3MzU3OnVlPT57dmFyIHE9TWF0aC5w''@;'; put 'put ''b3coMiwzMCktMTt1ZS5leHBvcnRzPWZ1bmN0aW9uKF8sSSl7aWYoIm51bWJlciIhPXR5cGVvZiBfKXRocm93IG5ldyBUeXBlRXJyb3IoIkl0ZXJhdGlvbnMgbm90IGEgbnVtYmVyIik7aWYoXzwwKXRocm93IG5ldyBUeXBlRXJyb3IoIkJhZCBpdGVyYXRpb25zIik7aWYoIm51bWJlciIhPXR5''@;'; put 'put ''cGVvZiBJKXRocm93IG5ldyBUeXBlRXJyb3IoIktleSBsZW5ndGggbm90IGEgbnVtYmVyIik7aWYoSTwwfHxJPnF8fEkhPUkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQmFkIGtleSBsZW5ndGgiKX19LDEyNTc6KHVlLHEsXyk9Pnt2YXIgST1fKDgwMjgpLHk9Xyg5Nzg1KSxnPV8oOTA3MiksQj1f''@;'; put 'put ''KDk1MDkpLkJ1ZmZlcix3PV8oNzM1NyksUD1fKDIzNjgpLEY9Xyg3Nzc3KSxPPUIuYWxsb2MoMTI4KSx6PXttZDU6MTYsc2hhMToyMCxzaGEyMjQ6Mjgsc2hhMjU2OjMyLHNoYTM4NDo0OCxzaGE1MTI6NjQscm1kMTYwOjIwLHJpcGVtZDE2MDoyMH07ZnVuY3Rpb24gTihVLFcsWSl7dmFyIFg9''@;'; put 'put ''ZnVuY3Rpb24gTChVKXtyZXR1cm4icm1kMTYwIj09PVV8fCJyaXBlbWQxNjAiPT09VT9mdW5jdGlvbiBZKFgpe3JldHVybihuZXcgeSkudXBkYXRlKFgpLmRpZ2VzdCgpfToibWQ1Ij09PVU/STpmdW5jdGlvbiBXKFgpe3JldHVybiBnKFUpLnVwZGF0ZShYKS5kaWdlc3QoKX19KFUpLGVlPSJz''@;'; put 'put ''aGE1MTIiPT09VXx8InNoYTM4NCI9PT1VPzEyODo2NDtXLmxlbmd0aD5lZT9XPVgoVyk6Vy5sZW5ndGg8ZWUmJihXPUIuY29uY2F0KFtXLE9dLGVlKSk7Zm9yKHZhciBKPUIuYWxsb2NVbnNhZmUoZWUreltVXSkscmU9Qi5hbGxvY1Vuc2FmZShlZSt6W1VdKSxpZT0wO2llPGVlO2llKyspSltp''@;'; put 'put ''ZV09NTReV1tpZV0scmVbaWVdPTkyXldbaWVdO3ZhciBsZT1CLmFsbG9jVW5zYWZlKGVlK1krNCk7Si5jb3B5KGxlLDAsMCxlZSksdGhpcy5pcGFkMT1sZSx0aGlzLmlwYWQyPUosdGhpcy5vcGFkPXJlLHRoaXMuYWxnPVUsdGhpcy5ibG9ja3NpemU9ZWUsdGhpcy5oYXNoPVgsdGhpcy5zaXpl''@;'; put 'put ''PXpbVV19Ti5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKFUsVyl7cmV0dXJuIFUuY29weShXLHRoaXMuYmxvY2tzaXplKSx0aGlzLmhhc2goVykuY29weSh0aGlzLm9wYWQsdGhpcy5ibG9ja3NpemUpLHRoaXMuaGFzaCh0aGlzLm9wYWQpfSx1ZS5leHBvcnRzPWZ1bmN0aW9uIEsoVSxXLFksWCxl''@;'; put 'put ''ZSl7dyhZLFgpO3ZhciBKPW5ldyBOKGVlPWVlfHwic2hhMSIsVT1GKFUsUCwiUGFzc3dvcmQiKSwoVz1GKFcsUCwiU2FsdCIpKS5sZW5ndGgpLHJlPUIuYWxsb2NVbnNhZmUoWCksaWU9Qi5hbGxvY1Vuc2FmZShXLmxlbmd0aCs0KTtXLmNvcHkoaWUsMCwwLFcubGVuZ3RoKTtmb3IodmFyIGxl''@;'; put 'put ''PTAsbWU9eltlZV0sX2U9TWF0aC5jZWlsKFgvbWUpLFRlPTE7VGU8PV9lO1RlKyspe2llLndyaXRlVUludDMyQkUoVGUsVy5sZW5ndGgpO2Zvcih2YXIgU2U9Si5ydW4oaWUsSi5pcGFkMSksemU9U2UsVj0xO1Y8WTtWKyspe3plPUoucnVuKHplLEouaXBhZDIpO2Zvcih2YXIgcD0wO3A8bWU7''@;'; put 'put ''cCsrKVNlW3BdXj16ZVtwXX1TZS5jb3B5KHJlLGxlKSxsZSs9bWV9cmV0dXJuIHJlfX0sNzc3NzoodWUscSxfKT0+e3ZhciBJPV8oOTUwOSkuQnVmZmVyO3VlLmV4cG9ydHM9ZnVuY3Rpb24oeSxnLEIpe2lmKEkuaXNCdWZmZXIoeSkpcmV0dXJuIHk7aWYoInN0cmluZyI9PXR5cGVvZiB5KXJl''@;'; put 'put ''dHVybiBJLmZyb20oeSxnKTtpZihBcnJheUJ1ZmZlci5pc1ZpZXcoeSkpcmV0dXJuIEkuZnJvbSh5LmJ1ZmZlcik7dGhyb3cgbmV3IFR5cGVFcnJvcihCKyIgbXVzdCBiZSBhIHN0cmluZywgYSBCdWZmZXIsIGEgdHlwZWQgYXJyYXkgb3IgYSBEYXRhVmlldyIpfX0sOTkwODp1ZT0+eyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt1ZS5leHBvcnRzPVsiRmxvYXQxNkFycmF5IiwiRmxvYXQzMkFycmF5IiwiRmxvYXQ2NEFycmF5IiwiSW50OEFycmF5IiwiSW50MTZBcnJheSIsIkludDMyQXJyYXkiLCJVaW50OEFycmF5IiwiVWludDhDbGFtcGVkQXJyYXkiLCJVaW50MTZBcnJheSIsIlVpbnQzMkFycmF5Iiwi''@;'; put 'put ''QmlnSW50NjRBcnJheSIsIkJpZ1VpbnQ2NEFycmF5Il19LDgyMTI6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg0MTU1KTt1ZS5leHBvcnRzPXR5cGVvZiBJPiJ1Inx8IUkudmVyc2lvbnx8MD09PUkudmVyc2lvbi5pbmRleE9mKCJ2MC4iKXx8MD09PUkudmVyc2lvbi5pbmRleE9m''@;'; put 'put ''KCJ2MS4iKSYmMCE9PUkudmVyc2lvbi5pbmRleE9mKCJ2MS44LiIpP3tuZXh0VGljazpmdW5jdGlvbiB5KGcsQix3LFApe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBnKXRocm93IG5ldyBUeXBlRXJyb3IoJyJjYWxsYmFjayIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7dmFyIE8seixG''@;'; put 'put ''PWFyZ3VtZW50cy5sZW5ndGg7c3dpdGNoKEYpe2Nhc2UgMDpjYXNlIDE6cmV0dXJuIEkubmV4dFRpY2soZyk7Y2FzZSAyOnJldHVybiBJLm5leHRUaWNrKGZ1bmN0aW9uKCl7Zy5jYWxsKG51bGwsQil9KTtjYXNlIDM6cmV0dXJuIEkubmV4dFRpY2soZnVuY3Rpb24oKXtnLmNhbGwobnVsbCxC''@;'; put 'put ''LHcpfSk7Y2FzZSA0OnJldHVybiBJLm5leHRUaWNrKGZ1bmN0aW9uKCl7Zy5jYWxsKG51bGwsQix3LFApfSk7ZGVmYXVsdDpmb3IoTz1uZXcgQXJyYXkoRi0xKSx6PTA7ejxPLmxlbmd0aDspT1t6KytdPWFyZ3VtZW50c1t6XTtyZXR1cm4gSS5uZXh0VGljayhmdW5jdGlvbigpe2cuYXBwbHko''@;'; put 'put ''bnVsbCxPKX0pfX19Okl9LDQxNTU6dWU9Pnt2YXIgXyxJLHE9dWUuZXhwb3J0cz17fTtmdW5jdGlvbiB5KCl7dGhyb3cgbmV3IEVycm9yKCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gZygpe3Rocm93IG5ldyBFcnJvcigiY2xlYXJUaW1lb3V0IGhhcyBub3Qg''@;'; put 'put ''YmVlbiBkZWZpbmVkIil9ZnVuY3Rpb24gQihXKXtpZihfPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dChXLDApO2lmKChfPT09eXx8IV8pJiZzZXRUaW1lb3V0KXJldHVybiBfPXNldFRpbWVvdXQsc2V0VGltZW91dChXLDApO3RyeXtyZXR1cm4gXyhXLDApfWNhdGNoe3RyeXtyZXR1''@;'; put 'put ''cm4gXy5jYWxsKG51bGwsVywwKX1jYXRjaHtyZXR1cm4gXy5jYWxsKHRoaXMsVywwKX19fSFmdW5jdGlvbigpe3RyeXtfPSJmdW5jdGlvbiI9PXR5cGVvZiBzZXRUaW1lb3V0P3NldFRpbWVvdXQ6eX1jYXRjaHtfPXl9dHJ5e0k9ImZ1bmN0aW9uIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVh''@;'; put 'put ''clRpbWVvdXQ6Z31jYXRjaHtJPWd9fSgpO3ZhciBPLFA9W10sRj0hMSx6PS0xO2Z1bmN0aW9uIE4oKXshRnx8IU98fChGPSExLE8ubGVuZ3RoP1A9Ty5jb25jYXQoUCk6ej0tMSxQLmxlbmd0aCYmTCgpKX1mdW5jdGlvbiBMKCl7aWYoIUYpe3ZhciBXPUIoTik7Rj0hMDtmb3IodmFyIFk9UC5s''@;'; put 'put ''ZW5ndGg7WTspe2ZvcihPPVAsUD1bXTsrK3o8WTspTyYmT1t6XS5ydW4oKTt6PS0xLFk9UC5sZW5ndGh9Tz1udWxsLEY9ITEsZnVuY3Rpb24gdyhXKXtpZihJPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQoVyk7aWYoKEk9PT1nfHwhSSkmJmNsZWFyVGltZW91dClyZXR1cm4g''@;'; put 'put ''ST1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KFcpO3RyeXtyZXR1cm4gSShXKX1jYXRjaHt0cnl7cmV0dXJuIEkuY2FsbChudWxsLFcpfWNhdGNoe3JldHVybiBJLmNhbGwodGhpcyxXKX19fShXKX19ZnVuY3Rpb24gSyhXLFkpe3RoaXMuZnVuPVcsdGhpcy5hcnJheT1ZfWZ1bmN0aW9uIFUo''@;'; put 'put ''KXt9cS5uZXh0VGljaz1mdW5jdGlvbihXKXt2YXIgWT1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciBYPTE7WDxhcmd1bWVudHMubGVuZ3RoO1grKylZW1gtMV09YXJndW1lbnRzW1hdO1AucHVzaChuZXcgSyhXLFkpKSwxPT09UC5s''@;'; put 'put ''ZW5ndGgmJiFGJiZCKEwpfSxLLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfSxxLnRpdGxlPSJicm93c2VyIixxLmJyb3dzZXI9ITAscS5lbnY9e30scS5hcmd2PVtdLHEudmVyc2lvbj0iIixxLnZlcnNpb25zPXt9LHEub249VSxxLmFk''@;'; put 'put ''ZExpc3RlbmVyPVUscS5vbmNlPVUscS5vZmY9VSxxLnJlbW92ZUxpc3RlbmVyPVUscS5yZW1vdmVBbGxMaXN0ZW5lcnM9VSxxLmVtaXQ9VSxxLnByZXBlbmRMaXN0ZW5lcj1VLHEucHJlcGVuZE9uY2VMaXN0ZW5lcj1VLHEubGlzdGVuZXJzPWZ1bmN0aW9uKFcpe3JldHVybltdfSxxLmJpbmRp''@;'; put 'put ''bmc9ZnVuY3Rpb24oVyl7dGhyb3cgbmV3IEVycm9yKCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCIpfSxxLmN3ZD1mdW5jdGlvbigpe3JldHVybiIvIn0scS5jaGRpcj1mdW5jdGlvbihXKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCIp''@;'; put 'put ''fSxxLnVtYXNrPWZ1bmN0aW9uKCl7cmV0dXJuIDB9fSw3OTAwOih1ZSxxLF8pPT57cS5wdWJsaWNFbmNyeXB0PV8oNjU1OSkscS5wcml2YXRlRGVjcnlwdD1fKDYxMzgpLHEucHJpdmF0ZUVuY3J5cHQ9ZnVuY3Rpb24oeSxnKXtyZXR1cm4gcS5wdWJsaWNFbmNyeXB0KHksZywhMCl9LHEucHVi''@;'; put 'put ''bGljRGVjcnlwdD1mdW5jdGlvbih5LGcpe3JldHVybiBxLnByaXZhdGVEZWNyeXB0KHksZywhMCl9fSw5MTk5Oih1ZSxxLF8pPT57dmFyIEk9XygzNDgyKSx5PV8oOTUwOSkuQnVmZmVyO2Z1bmN0aW9uIGcoQil7dmFyIHc9eS5hbGxvY1Vuc2FmZSg0KTtyZXR1cm4gdy53cml0ZVVJbnQzMkJF''@;'; put 'put ''KEIsMCksd311ZS5leHBvcnRzPWZ1bmN0aW9uKEIsdyl7Zm9yKHZhciBPLFA9eS5hbGxvYygwKSxGPTA7UC5sZW5ndGg8dzspTz1nKEYrKyksUD15LmNvbmNhdChbUCxJKCJzaGExIikudXBkYXRlKEIpLnVwZGF0ZShPKS5kaWdlc3QoKV0pO3JldHVybiBQLnNsaWNlKDAsdyl9fSwyMTQ0OmZ1''@;'; put 'put ''bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkseSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGcoVixwKXtpZighVil0aHJvdyBuZXcgRXJyb3IocHx8IkFzc2VydGlvbiBmYWlsZWQiKX1mdW5jdGlvbiBCKFYscCl7Vi5zdXBlcl89cDt2YXIgYj1mdW5jdGlvbigpe307Yi5wcm90b3R5cGU9cC5w''@;'; put 'put ''cm90b3R5cGUsVi5wcm90b3R5cGU9bmV3IGIsVi5wcm90b3R5cGUuY29uc3RydWN0b3I9Vn1mdW5jdGlvbiB3KFYscCxiKXtpZih3LmlzQk4oVikpcmV0dXJuIFY7dGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsbnVsbCE9PVYmJigo''@;'; put 'put ''ImxlIj09PXB8fCJiZSI9PT1wKSYmKGI9cCxwPTEwKSx0aGlzLl9pbml0KFZ8fDAscHx8MTAsYnx8ImJlIikpfXZhciBQOyJvYmplY3QiPT10eXBlb2YgST9JLmV4cG9ydHM9dzp5LkJOPXcsdy5CTj13LHcud29yZFNpemU9MjY7dHJ5e1A9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiB3aW5k''@;'; put 'put ''b3cuQnVmZmVyPCJ1Ij93aW5kb3cuQnVmZmVyOl8oNzEwOCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKFYscCl7dmFyIGI9Vi5jaGFyQ29kZUF0KHApO3JldHVybiBiPj02NSYmYjw9NzA/Yi01NTpiPj05NyYmYjw9MTAyP2ItODc6Yi00OCYxNX1mdW5jdGlvbiBPKFYscCxiKXt2YXIgeD1G''@;'; put 'put ''KFYsYik7cmV0dXJuIGItMT49cCYmKHh8PUYoVixiLTEpPDw0KSx4fWZ1bmN0aW9uIHooVixwLGIseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1pbihWLmxlbmd0aCxiKSxIPXA7SDxUO0grKyl7dmFyIGo9Vi5jaGFyQ29kZUF0KEgpLTQ4O0MqPXgsQys9aj49NDk/ai00OSsxMDpqPj0xNz9qLTE3''@;'; put 'put ''KzEwOmp9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9uKHApe3JldHVybiBwIGluc3RhbmNlb2Ygd3x8bnVsbCE9PXAmJiJvYmplY3QiPT10eXBlb2YgcCYmcC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkocC53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKHAs''@;'; put 'put ''Yil7cmV0dXJuIHAuY21wKGIpPjA/cDpifSx3Lm1pbj1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKTwwP3A6Yn0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24ocCxiLHgpe2lmKCJudW1iZXIiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5pdE51bWJlcihwLGIseCk7aWYoIm9iamVj''@;'; put 'put ''dCI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0QXJyYXkocCxiLHgpOyJoZXgiPT09YiYmKGI9MTYpLGcoYj09PSgwfGIpJiZiPj0yJiZiPD0zNik7dmFyIEM9MDsiLSI9PT0ocD1wLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8''@;'; put 'put ''cC5sZW5ndGgmJigxNj09PWI/dGhpcy5fcGFyc2VIZXgocCxDLHgpOih0aGlzLl9wYXJzZUJhc2UocCxiLEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihwLGIseCl7cDwwJiYodGhpcy5u''@;'; put 'put ''ZWdhdGl2ZT0xLHA9LXApLHA8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnBdLHRoaXMubGVuZ3RoPTEpOnA8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooZyhwPDkwMDcxOTkyNTQ3NDA5''@;'; put 'put ''OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnAscC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24ocCxiLHgpe2lmKGcoIm51bWJlciI9''@;'; put 'put ''PXR5cGVvZiBwLmxlbmd0aCkscC5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwocC5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7''@;'; put 'put ''QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxILGo9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MtMV08PDh8cFtDLTJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYz''@;'; put 'put ''LChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtlbHNlIGlmKCJsZSI9PT14KWZvcihDPTAsVD0wO0M8cC5sZW5ndGg7Qys9Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQysxXTw8OHxwW0MrMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGor''@;'; put 'put ''PTI0KT49MjYmJihqLT0yNixUKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihwLGIseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChwLmxlbmd0aC1iKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7''@;'; put 'put ''Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBqLFQ9MCxIPTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMTtDPj1iO0MtPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYp''@;'; put 'put ''OlQrPTg7ZWxzZSBmb3IoQz0ocC5sZW5ndGgtYiklMj09MD9iKzE6YjtDPHAubGVuZ3RoO0MrPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHAsYix4KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEwODg2MztUKj1iKUMrKztDLS0sVD1UL2J8MDtmb3IodmFyIEg9cC5sZW5ndGgteCxqPUglQyxFPU1hdGgubWluKEgsSC1qKSt4LG09MCxBPXg7QTxF''@;'; put 'put ''O0ErPUMpbT16KHAsQSxBK0MsYiksdGhpcy5pbXVsbihUKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKTtpZigwIT09ail7dmFyIG9lPTE7Zm9yKG09eihwLEEscC5sZW5ndGgsYiksQT0wO0E8ajtBKyspb2UqPWI7dGhpcy5pbXVsbihv''@;'; put 'put ''ZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHApe3Aud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoO2IrKylw''@;'; put 'put ''LndvcmRzW2JdPXRoaXMud29yZHNbYl07cC5sZW5ndGg9dGhpcy5sZW5ndGgscC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHAucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkocCkscH0sdy5wcm90b3R5''@;'; put 'put ''cGUuX2V4cGFuZD1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHA7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0''@;'; put 'put ''aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgTj1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAw''@;'; put 'put ''MDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxMPVswLDAsMjUsMTYsMTIsMTEsMTAs''@;'; put 'put ''OSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEs9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3''@;'; put 'put ''NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwz''@;'; put 'put ''OTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVyhWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmU7dmFyIHg9Vi5sZW5ndGgrcC5sZW5ndGh8MDtiLmxlbmd0aD14LHg9eC0xfDA7dmFyIEM9MHxWLndvcmRzWzBdLFQ9MHxwLndvcmRzWzBd''@;'; put 'put ''LEg9QypULEU9SC82NzEwODg2NHwwO2Iud29yZHNbMF09NjcxMDg4NjMmSDtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2LG9lPTY3MTA4ODYzJkUsdGU9TWF0aC5taW4obSxwLmxlbmd0aC0xKSxzZT1NYXRoLm1heCgwLG0tVi5sZW5ndGgrMSk7c2U8PXRlO3NlKyspQSs9''@;'; put 'put ''KEg9KEM9MHxWLndvcmRzW20tc2V8MF0pKihUPTB8cC53b3Jkc1tzZV0pK29lKS82NzEwODg2NHwwLG9lPTY3MTA4ODYzJkg7Yi53b3Jkc1ttXT0wfG9lLEU9MHxBfXJldHVybiAwIT09RT9iLndvcmRzW21dPTB8RTpiLmxlbmd0aC0tLGIuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1m''@;'; put 'put ''dW5jdGlvbihwLGIpe3ZhciB4O2lmKGI9MHxifHwxLDE2PT09KHA9cHx8MTApfHwiaGV4Ij09PXApe3g9IiI7Zm9yKHZhciBDPTAsVD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9dGhpcy53b3Jkc1tIXSxFPSgxNjc3NzIxNSYoajw8Q3xUKSkudG9TdHJpbmcoMTYpO1Q9aj4+PjI0''@;'; put 'put ''LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2LEgtLSkseD0wIT09VHx8SCE9PXRoaXMubGVuZ3RoLTE/Tls2LUUubGVuZ3RoXStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygxNikreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUm''@;'; put 'put ''Jih4PSItIit4KSx4fWlmKHA9PT0oMHxwKSYmcD49MiYmcDw9MzYpe3ZhciBtPUxbcF0sQT1LW3BdO3g9IiI7dmFyIG9lPXRoaXMuY2xvbmUoKTtmb3Iob2UubmVnYXRpdmU9MDshb2UuaXNaZXJvKCk7KXt2YXIgdGU9b2UubW9kbihBKS50b1N0cmluZyhwKTt4PShvZT1vZS5pZGl2bihBKSku''@;'; put 'put ''aXNaZXJvKCk/dGUreDpOW20tdGUubGVuZ3RoXSt0ZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWcoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0s''@;'; put 'put ''dy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgcD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/cCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3ArPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQq''@;'; put 'put ''dGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZnKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tcDpwfSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHcucHJv''@;'; put 'put ''dG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHAsYil7cmV0dXJuIGcodHlwZW9mIFA8InUiKSx0aGlzLnRvQXJyYXlMaWtlKFAscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LHAsYil9LHcucHJvdG90eXBlLnRvQXJy''@;'; put 'put ''YXlMaWtlPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz10aGlzLmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7ZyhDPD1ULCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksZyhUPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2''@;'; put 'put ''YXIgRSxtLEg9ImxlIj09PWIsaj1uZXcgcChUKSxBPXRoaXMuY2xvbmUoKTtpZihIKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW21dPUU7Zm9yKDttPFQ7bSsrKWpbbV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsrKWpbbV09MDtmb3IobT0w''@;'; put 'put ''OyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW1QtbS0xXT1FfXJldHVybiBqfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24ocCl7cmV0dXJuIDMyLU1hdGguY2x6MzIocCl9OmZ1bmN0aW9uKHApe3ZhciBiPXAseD0wO3JldHVy''@;'; put 'put ''biBiPj00MDk2JiYoeCs9MTMsYj4+Pj0xMyksYj49NjQmJih4Kz03LGI+Pj49NyksYj49OCYmKHgrPTQsYj4+Pj00KSxiPj0yJiYoeCs9MixiPj4+PTIpLHgrYn0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHApe2lmKDA9PT1wKXJldHVybiAyNjt2YXIgYj1wLHg9MDtyZXR1cm4g''@;'; put 'put ''ODE5MSZifHwoeCs9MTMsYj4+Pj0xMyksMTI3JmJ8fCh4Kz03LGI+Pj49NyksMTUmYnx8KHgrPTQsYj4+Pj00KSwzJmJ8fCh4Kz0yLGI+Pj49MiksMSZifHx4KysseH0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhp''@;'; put 'put ''cy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrYn0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgcD0wLGI9MDtiPHRoaXMubGVuZ3RoO2IrKyl7dmFyIHg9dGhpcy5femVyb0JpdHModGhpcy53b3Jk''@;'; put 'put ''c1tiXSk7aWYocCs9eCwyNiE9PXgpYnJlYWt9cmV0dXJuIHB9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/''@;'; put 'put ''dGhpcy5hYnMoKS5pbm90bihwKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnRlc3RuKHAtMSk/dGhpcy5ub3RuKHApLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5w''@;'; put 'put ''cm90b3R5cGUuaXVvcj1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHAubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBiPTA7YjxwLmxlbmd0aDtiKyspdGhpcy53b3Jkc1tiXT10aGlzLndvcmRzW2JdfHAud29yZHNbYl07cmV0dXJuIHRoaXMuc3RyaXAo''@;'; put 'put ''KX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdW9yKHApfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihwKTpwLmNsb25l''@;'; put 'put ''KCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHApOnAuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihwKXt2YXIgYjtiPXRoaXMubGVuZ3RoPnAu''@;'; put 'put ''bGVuZ3RoP3A6dGhpcztmb3IodmFyIHg9MDt4PGIubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPXRoaXMud29yZHNbeF0mcC53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhp''@;'; put 'put ''cy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChwKX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChwKTpwLmNsb25lKCkuaWFuZCh0aGlzKX0sdy5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihw''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHApOnAuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24ocCl7dmFyIGIseDt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oYj10aGlzLHg9cCk6KGI9cCx4PXRoaXMpO2Zvcih2''@;'; put 'put ''YXIgQz0wO0M8eC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109Yi53b3Jkc1tDXV54LndvcmRzW0NdO2lmKHRoaXMhPT1iKWZvcig7QzxiLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90''@;'; put 'put ''eXBlLml4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1eG9yKHApfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHApOnAuY2xvbmUoKS5peG9y''@;'; put 'put ''KHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IocCk6cC5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49''@;'; put 'put ''MCk7dmFyIGI9MHxNYXRoLmNlaWwocC8yNikseD1wJTI2O3RoaXMuX2V4cGFuZChiKSx4PjAmJmItLTtmb3IodmFyIEM9MDtDPGI7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmfnRoaXMud29yZHNbQ107cmV0dXJuIHg+MCYmKHRoaXMud29yZHNbQ109fnRoaXMud29yZHNbQ10mNjcxMDg4''@;'; put 'put ''NjM+PjI2LXgpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHApfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHAsYil7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciB4PXAvMjZ8MCxDPXAlMjY7cmV0''@;'; put 'put ''dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF09Yj90aGlzLndvcmRzW3hdfDE8PEM6dGhpcy53b3Jkc1t4XSZ+KDE8PEMpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwKXt2YXIgYix4LEM7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0''@;'; put 'put ''aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZSlyZXR1cm4gcC5uZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKHApLHAubmVnYXRpdmU9MSxiLl9u''@;'; put 'put ''b3JtU2lnbigpO3RoaXMubGVuZ3RoPnAubGVuZ3RoPyh4PXRoaXMsQz1wKTooeD1wLEM9dGhpcyk7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKGI9KDB8eC53b3Jkc1tIXSkrKDB8Qy53b3Jkc1tIXSkrVCksVD1iPj4+MjY7Zm9yKDswIT09''@;'; put 'put ''VCYmSDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKStUKSxUPWI+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1ULHRoaXMubGVuZ3RoKys7ZWxzZSBpZih4IT09dGhpcylmb3IoO0g8''@;'; put 'put ''eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09eC53b3Jkc1tIXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHApe3ZhciBiO3JldHVybiAwIT09cC5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHAubmVnYXRpdmU9MCxiPXRoaXMuc3ViKHApLHAubmVnYXRpdmVe''@;'; put 'put ''PTEsYik6MD09PXAubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsYj1wLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsYik6dGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQocCk6cC5jbG9uZSgpLmlhZGQodGhpcyl9LHcucHJvdG90eXBl''@;'; put 'put ''LmlzdWI9ZnVuY3Rpb24ocCl7aWYoMCE9PXAubmVnYXRpdmUpe3AubmVnYXRpdmU9MDt2YXIgYj10aGlzLmlhZGQocCk7cmV0dXJuIHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHApLHRoaXMu''@;'; put 'put ''bmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBDLFQseD10aGlzLmNtcChwKTtpZigwPT09eClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7eD4wPyhDPXRoaXMsVD1wKTooQz1wLFQ9dGhpcyk7Zm9yKHZhciBIPTAsaj0wO2o8''@;'; put 'put ''VC5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSktKDB8VC53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtmb3IoOzAhPT1IJiZqPEMubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJmI7aWYoMD09''@;'; put 'put ''PUgmJmo8Qy5sZW5ndGgmJkMhPT10aGlzKWZvcig7ajxDLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1DLndvcmRzW2pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxqKSxDIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5zdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHApfTt2YXIgWT1mdW5jdGlvbihwLGIseCl7dmFyIEUsbSxBLEM9cC53b3JkcyxUPWIud29yZHMsSD14LndvcmRzLGo9MCxvZT0wfENbMF0sdGU9ODE5MSZvZSxzZT1vZT4+PjEzLHdlPTB8Q1sxXSxVZT04MTkxJndl''@;'; put 'put ''LEplPXdlPj4+MTMsYXQ9MHxDWzJdLE1lPTgxOTEmYXQsdmU9YXQ+Pj4xMyxYZT0wfENbM10samU9ODE5MSZYZSxEZT1YZT4+PjEzLEZlPTB8Q1s0XSxSZT04MTkxJkZlLEllPUZlPj4+MTMsVmU9MHxDWzVdLGtlPTgxOTEmVmUsQWU9VmU+Pj4xMyxfdD0wfENbNl0scnQ9ODE5MSZfdCxRZT1f''@;'; put 'put ''dD4+PjEzLGRuPTB8Q1s3XSx5dD04MTkxJmRuLE10PWRuPj4+MTMsRHQ9MHxDWzhdLGl0PTgxOTEmRHQsJGU9RHQ+Pj4xMyx0dD0wfENbOV0sSGU9ODE5MSZ0dCxkdD10dD4+PjEzLHF0PTB8VFswXSxSdD04MTkxJnF0LFB0PXF0Pj4+MTMsYWk9MHxUWzFdLFF0PTgxOTEmYWksc249YWk+Pj4x''@;'; put 'put ''MyxSaT0wfFRbMl0sZm49ODE5MSZSaSxmdD1SaT4+PjEzLFByPTB8VFszXSxadD04MTkxJlByLEF0PVByPj4+MTMsTG49MHxUWzRdLHN0PTgxOTEmTG4senQ9TG4+Pj4xMyxuaT0wfFRbNV0sV2U9ODE5MSZuaSxUdD1uaT4+PjEzLHJyPTB8VFs2XSxodD04MTkxJnJyLHh0PXJyPj4+MTMsQm49''@;'; put 'put ''MHxUWzddLG9uPTgxOTEmQm4sanQ9Qm4+Pj4xMyxkaT0wfFRbOF0sY249ODE5MSZkaSxwbj1kaT4+PjEzLElpPTB8VFs5XSxYdD04MTkxJklpLGVuPUlpPj4+MTM7eC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9MTk7dmFyIGhvPShqKyhFPU1hdGguaW11bCh0ZSxS''@;'; put 'put ''dCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwodGUsUHQpKStNYXRoLmltdWwoc2UsUnQpfDApKTw8MTMpfDA7aj0oKEE9TWF0aC5pbXVsKHNlLFB0KSkrKG0+Pj4xMyl8MCkrKGhvPj4+MjYpfDAsaG8mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFVlLFJ0KSxtPShtPU1hdGguaW11bChVZSxQ''@;'; put 'put ''dCkpK01hdGguaW11bChKZSxSdCl8MCxBPU1hdGguaW11bChKZSxQdCk7dmFyIE1pPShqKyhFPUUrTWF0aC5pbXVsKHRlLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsc24pfDApK01hdGguaW11bChzZSxRdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxz''@;'; put 'put ''bil8MCkrKG0+Pj4xMyl8MCkrKE1pPj4+MjYpfDAsTWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE1lLFJ0KSxtPShtPU1hdGguaW11bChNZSxQdCkpK01hdGguaW11bCh2ZSxSdCl8MCxBPU1hdGguaW11bCh2ZSxQdCksRT1FK01hdGguaW11bChVZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVl''@;'; put 'put ''LHNuKXwwKStNYXRoLmltdWwoSmUsUXQpfDAsQT1BK01hdGguaW11bChKZSxzbil8MDt2YXIgcHI9KGorKEU9RStNYXRoLmltdWwodGUsZm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmdCl8MCkrTWF0aC5pbXVsKHNlLGZuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5p''@;'; put 'put ''bXVsKHNlLGZ0KXwwKSsobT4+PjEzKXwwKSsocHI+Pj4yNil8MCxwciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoamUsUnQpLG09KG09TWF0aC5pbXVsKGplLFB0KSkrTWF0aC5pbXVsKERlLFJ0KXwwLEE9TWF0aC5pbXVsKERlLFB0KSxFPUUrTWF0aC5pbXVsKE1lLFF0KXwwLG09KG09bStNYXRo''@;'; put 'put ''LmltdWwoTWUsc24pfDApK01hdGguaW11bCh2ZSxRdCl8MCxBPUErTWF0aC5pbXVsKHZlLHNuKXwwLEU9RStNYXRoLmltdWwoVWUsZm4pfDAsbT0obT1tK01hdGguaW11bChVZSxmdCl8MCkrTWF0aC5pbXVsKEplLGZuKXwwLEE9QStNYXRoLmltdWwoSmUsZnQpfDA7dmFyIFduPShqKyhFPUUr''@;'; put 'put ''TWF0aC5pbXVsKHRlLFp0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsQXQpfDApK01hdGguaW11bChzZSxadCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxBdCl8MCkrKG0+Pj4xMyl8MCkrKFduPj4+MjYpfDAsV24mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFJl''@;'; put 'put ''LFJ0KSxtPShtPU1hdGguaW11bChSZSxQdCkpK01hdGguaW11bChJZSxSdCl8MCxBPU1hdGguaW11bChJZSxQdCksRT1FK01hdGguaW11bChqZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLHNuKXwwKStNYXRoLmltdWwoRGUsUXQpfDAsQT1BK01hdGguaW11bChEZSxzbil8MCxFPUUrTWF0''@;'; put 'put ''aC5pbXVsKE1lLGZuKXwwLG09KG09bStNYXRoLmltdWwoTWUsZnQpfDApK01hdGguaW11bCh2ZSxmbil8MCxBPUErTWF0aC5pbXVsKHZlLGZ0KXwwLEU9RStNYXRoLmltdWwoVWUsWnQpfDAsbT0obT1tK01hdGguaW11bChVZSxBdCl8MCkrTWF0aC5pbXVsKEplLFp0KXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwoSmUsQXQpfDA7dmFyIEtpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHN0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsenQpfDApK01hdGguaW11bChzZSxzdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx6dCl8MCkrKG0+Pj4xMyl8MCkrKEtpPj4+MjYpfDAs''@;'; put 'put ''S2kmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGtlLFJ0KSxtPShtPU1hdGguaW11bChrZSxQdCkpK01hdGguaW11bChBZSxSdCl8MCxBPU1hdGguaW11bChBZSxQdCksRT1FK01hdGguaW11bChSZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHNuKXwwKStNYXRoLmltdWwoSWUsUXQpfDAsQT1B''@;'; put 'put ''K01hdGguaW11bChJZSxzbil8MCxFPUUrTWF0aC5pbXVsKGplLGZuKXwwLG09KG09bStNYXRoLmltdWwoamUsZnQpfDApK01hdGguaW11bChEZSxmbil8MCxBPUErTWF0aC5pbXVsKERlLGZ0KXwwLEU9RStNYXRoLmltdWwoTWUsWnQpfDAsbT0obT1tK01hdGguaW11bChNZSxBdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKHZlLFp0KXwwLEE9QStNYXRoLmltdWwodmUsQXQpfDAsRT1FK01hdGguaW11bChVZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoSmUsc3QpfDAsQT1BK01hdGguaW11bChKZSx6dCl8MDt2YXIgUXI9KGorKEU9RStNYXRoLmltdWwodGUsV2UpfDAp''@;'; put 'put ''fDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxUdCl8MCkrTWF0aC5pbXVsKHNlLFdlKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFR0KXwwKSsobT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxRciY9NjcxMDg4NjMsRT1NYXRoLmltdWwocnQsUnQpLG09KG09TWF0aC5pbXVs''@;'; put 'put ''KHJ0LFB0KSkrTWF0aC5pbXVsKFFlLFJ0KXwwLEE9TWF0aC5pbXVsKFFlLFB0KSxFPUUrTWF0aC5pbXVsKGtlLFF0KXwwLG09KG09bStNYXRoLmltdWwoa2Usc24pfDApK01hdGguaW11bChBZSxRdCl8MCxBPUErTWF0aC5pbXVsKEFlLHNuKXwwLEU9RStNYXRoLmltdWwoUmUsZm4pfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChSZSxmdCl8MCkrTWF0aC5pbXVsKEllLGZuKXwwLEE9QStNYXRoLmltdWwoSWUsZnQpfDAsRT1FK01hdGguaW11bChqZSxadCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLEF0KXwwKStNYXRoLmltdWwoRGUsWnQpfDAsQT1BK01hdGguaW11bChEZSxBdCl8MCxFPUUrTWF0''@;'; put 'put ''aC5pbXVsKE1lLHN0KXwwLG09KG09bStNYXRoLmltdWwoTWUsenQpfDApK01hdGguaW11bCh2ZSxzdCl8MCxBPUErTWF0aC5pbXVsKHZlLHp0KXwwLEU9RStNYXRoLmltdWwoVWUsV2UpfDAsbT0obT1tK01hdGguaW11bChVZSxUdCl8MCkrTWF0aC5pbXVsKEplLFdlKXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwoSmUsVHQpfDA7dmFyIEpyPShqKyhFPUUrTWF0aC5pbXVsKHRlLGh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUseHQpfDApK01hdGguaW11bChzZSxodCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx4dCl8MCkrKG0+Pj4xMyl8MCkrKEpyPj4+MjYpfDAs''@;'; put 'put ''SnImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHl0LFJ0KSxtPShtPU1hdGguaW11bCh5dCxQdCkpK01hdGguaW11bChNdCxSdCl8MCxBPU1hdGguaW11bChNdCxQdCksRT1FK01hdGguaW11bChydCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LHNuKXwwKStNYXRoLmltdWwoUWUsUXQpfDAsQT1B''@;'; put 'put ''K01hdGguaW11bChRZSxzbil8MCxFPUUrTWF0aC5pbXVsKGtlLGZuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZnQpfDApK01hdGguaW11bChBZSxmbil8MCxBPUErTWF0aC5pbXVsKEFlLGZ0KXwwLEU9RStNYXRoLmltdWwoUmUsWnQpfDAsbT0obT1tK01hdGguaW11bChSZSxBdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKEllLFp0KXwwLEE9QStNYXRoLmltdWwoSWUsQXQpfDAsRT1FK01hdGguaW11bChqZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLHp0KXwwKStNYXRoLmltdWwoRGUsc3QpfDAsQT1BK01hdGguaW11bChEZSx6dCl8MCxFPUUrTWF0aC5pbXVsKE1lLFdlKXwwLG09KG09bStNYXRo''@;'; put 'put ''LmltdWwoTWUsVHQpfDApK01hdGguaW11bCh2ZSxXZSl8MCxBPUErTWF0aC5pbXVsKHZlLFR0KXwwLEU9RStNYXRoLmltdWwoVWUsaHQpfDAsbT0obT1tK01hdGguaW11bChVZSx4dCl8MCkrTWF0aC5pbXVsKEplLGh0KXwwLEE9QStNYXRoLmltdWwoSmUseHQpfDA7dmFyIEJpPShqKyhFPUUr''@;'; put 'put ''TWF0aC5pbXVsKHRlLG9uKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsanQpfDApK01hdGguaW11bChzZSxvbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxqdCl8MCkrKG0+Pj4xMyl8MCkrKEJpPj4+MjYpfDAsQmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGl0''@;'; put 'put ''LFJ0KSxtPShtPU1hdGguaW11bChpdCxQdCkpK01hdGguaW11bCgkZSxSdCl8MCxBPU1hdGguaW11bCgkZSxQdCksRT1FK01hdGguaW11bCh5dCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHNuKXwwKStNYXRoLmltdWwoTXQsUXQpfDAsQT1BK01hdGguaW11bChNdCxzbil8MCxFPUUrTWF0''@;'; put 'put ''aC5pbXVsKHJ0LGZuKXwwLG09KG09bStNYXRoLmltdWwocnQsZnQpfDApK01hdGguaW11bChRZSxmbil8MCxBPUErTWF0aC5pbXVsKFFlLGZ0KXwwLEU9RStNYXRoLmltdWwoa2UsWnQpfDAsbT0obT1tK01hdGguaW11bChrZSxBdCl8MCkrTWF0aC5pbXVsKEFlLFp0KXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwoQWUsQXQpfDAsRT1FK01hdGguaW11bChSZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHp0KXwwKStNYXRoLmltdWwoSWUsc3QpfDAsQT1BK01hdGguaW11bChJZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGplLFdlKXwwLG09KG09bStNYXRoLmltdWwoamUsVHQpfDApK01hdGguaW11bChE''@;'; put 'put ''ZSxXZSl8MCxBPUErTWF0aC5pbXVsKERlLFR0KXwwLEU9RStNYXRoLmltdWwoTWUsaHQpfDAsbT0obT1tK01hdGguaW11bChNZSx4dCl8MCkrTWF0aC5pbXVsKHZlLGh0KXwwLEE9QStNYXRoLmltdWwodmUseHQpfDAsRT1FK01hdGguaW11bChVZSxvbil8MCxtPShtPW0rTWF0aC5pbXVsKFVl''@;'; put 'put ''LGp0KXwwKStNYXRoLmltdWwoSmUsb24pfDAsQT1BK01hdGguaW11bChKZSxqdCl8MDt2YXIgVmk9KGorKEU9RStNYXRoLmltdWwodGUsY24pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxwbil8MCkrTWF0aC5pbXVsKHNlLGNuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5p''@;'; put 'put ''bXVsKHNlLHBuKXwwKSsobT4+PjEzKXwwKSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUnQpLG09KG09TWF0aC5pbXVsKEhlLFB0KSkrTWF0aC5pbXVsKGR0LFJ0KXwwLEE9TWF0aC5pbXVsKGR0LFB0KSxFPUUrTWF0aC5pbXVsKGl0LFF0KXwwLG09KG09bStNYXRo''@;'; put 'put ''LmltdWwoaXQsc24pfDApK01hdGguaW11bCgkZSxRdCl8MCxBPUErTWF0aC5pbXVsKCRlLHNuKXwwLEU9RStNYXRoLmltdWwoeXQsZm4pfDAsbT0obT1tK01hdGguaW11bCh5dCxmdCl8MCkrTWF0aC5pbXVsKE10LGZuKXwwLEE9QStNYXRoLmltdWwoTXQsZnQpfDAsRT1FK01hdGguaW11bChy''@;'; put 'put ''dCxadCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LEF0KXwwKStNYXRoLmltdWwoUWUsWnQpfDAsQT1BK01hdGguaW11bChRZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGtlLHN0KXwwLG09KG09bStNYXRoLmltdWwoa2UsenQpfDApK01hdGguaW11bChBZSxzdCl8MCxBPUErTWF0aC5pbXVsKEFlLHp0''@;'; put 'put ''KXwwLEU9RStNYXRoLmltdWwoUmUsV2UpfDAsbT0obT1tK01hdGguaW11bChSZSxUdCl8MCkrTWF0aC5pbXVsKEllLFdlKXwwLEE9QStNYXRoLmltdWwoSWUsVHQpfDAsRT1FK01hdGguaW11bChqZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLHh0KXwwKStNYXRoLmltdWwoRGUsaHQpfDAs''@;'; put 'put ''QT1BK01hdGguaW11bChEZSx4dCl8MCxFPUUrTWF0aC5pbXVsKE1lLG9uKXwwLG09KG09bStNYXRoLmltdWwoTWUsanQpfDApK01hdGguaW11bCh2ZSxvbil8MCxBPUErTWF0aC5pbXVsKHZlLGp0KXwwLEU9RStNYXRoLmltdWwoVWUsY24pfDAsbT0obT1tK01hdGguaW11bChVZSxwbil8MCkr''@;'; put 'put ''TWF0aC5pbXVsKEplLGNuKXwwLEE9QStNYXRoLmltdWwoSmUscG4pfDA7dmFyIElvPShqKyhFPUUrTWF0aC5pbXVsKHRlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZW4pfDApK01hdGguaW11bChzZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxl''@;'; put 'put ''bil8MCkrKG0+Pj4xMyl8MCkrKElvPj4+MjYpfDAsSW8mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFF0KSxtPShtPU1hdGguaW11bChIZSxzbikpK01hdGguaW11bChkdCxRdCl8MCxBPU1hdGguaW11bChkdCxzbiksRT1FK01hdGguaW11bChpdCxmbil8MCxtPShtPW0rTWF0aC5pbXVsKGl0''@;'; put 'put ''LGZ0KXwwKStNYXRoLmltdWwoJGUsZm4pfDAsQT1BK01hdGguaW11bCgkZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFp0KXwwLG09KG09bStNYXRoLmltdWwoeXQsQXQpfDApK01hdGguaW11bChNdCxadCl8MCxBPUErTWF0aC5pbXVsKE10LEF0KXwwLEU9RStNYXRoLmltdWwocnQsc3QpfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bChydCx6dCl8MCkrTWF0aC5pbXVsKFFlLHN0KXwwLEE9QStNYXRoLmltdWwoUWUsenQpfDAsRT1FK01hdGguaW11bChrZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLFR0KXwwKStNYXRoLmltdWwoQWUsV2UpfDAsQT1BK01hdGguaW11bChBZSxUdCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKFJlLGh0KXwwLG09KG09bStNYXRoLmltdWwoUmUseHQpfDApK01hdGguaW11bChJZSxodCl8MCxBPUErTWF0aC5pbXVsKEllLHh0KXwwLEU9RStNYXRoLmltdWwoamUsb24pfDAsbT0obT1tK01hdGguaW11bChqZSxqdCl8MCkrTWF0aC5pbXVsKERlLG9uKXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoRGUsanQpfDAsRT1FK01hdGguaW11bChNZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHBuKXwwKStNYXRoLmltdWwodmUsY24pfDAsQT1BK01hdGguaW11bCh2ZSxwbil8MDt2YXIgT3I9KGorKEU9RStNYXRoLmltdWwoVWUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGgu''@;'; put 'put ''aW11bChVZSxlbil8MCkrTWF0aC5pbXVsKEplLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEplLGVuKXwwKSsobT4+PjEzKXwwKSsoT3I+Pj4yNil8MCxPciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsZm4pLG09KG09TWF0aC5pbXVsKEhlLGZ0KSkrTWF0aC5pbXVsKGR0LGZu''@;'; put 'put ''KXwwLEE9TWF0aC5pbXVsKGR0LGZ0KSxFPUUrTWF0aC5pbXVsKGl0LFp0KXwwLG09KG09bStNYXRoLmltdWwoaXQsQXQpfDApK01hdGguaW11bCgkZSxadCl8MCxBPUErTWF0aC5pbXVsKCRlLEF0KXwwLEU9RStNYXRoLmltdWwoeXQsc3QpfDAsbT0obT1tK01hdGguaW11bCh5dCx6dCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKE10LHN0KXwwLEE9QStNYXRoLmltdWwoTXQsenQpfDAsRT1FK01hdGguaW11bChydCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LFR0KXwwKStNYXRoLmltdWwoUWUsV2UpfDAsQT1BK01hdGguaW11bChRZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGtlLGh0KXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoa2UseHQpfDApK01hdGguaW11bChBZSxodCl8MCxBPUErTWF0aC5pbXVsKEFlLHh0KXwwLEU9RStNYXRoLmltdWwoUmUsb24pfDAsbT0obT1tK01hdGguaW11bChSZSxqdCl8MCkrTWF0aC5pbXVsKEllLG9uKXwwLEE9QStNYXRoLmltdWwoSWUsanQpfDAsRT1FK01hdGguaW11''@;'; put 'put ''bChqZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGplLHBuKXwwKStNYXRoLmltdWwoRGUsY24pfDAsQT1BK01hdGguaW11bChEZSxwbil8MDt2YXIgWWk9KGorKEU9RStNYXRoLmltdWwoTWUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChNZSxlbil8MCkrTWF0aC5pbXVsKHZl''@;'; put 'put ''LFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHZlLGVuKXwwKSsobT4+PjEzKXwwKSsoWWk+Pj4yNil8MCxZaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsWnQpLG09KG09TWF0aC5pbXVsKEhlLEF0KSkrTWF0aC5pbXVsKGR0LFp0KXwwLEE9TWF0aC5pbXVsKGR0LEF0KSxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKGl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCgkZSxzdCl8MCxBPUErTWF0aC5pbXVsKCRlLHp0KXwwLEU9RStNYXRoLmltdWwoeXQsV2UpfDAsbT0obT1tK01hdGguaW11bCh5dCxUdCl8MCkrTWF0aC5pbXVsKE10LFdlKXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoTXQsVHQpfDAsRT1FK01hdGguaW11bChydCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LHh0KXwwKStNYXRoLmltdWwoUWUsaHQpfDAsQT1BK01hdGguaW11bChRZSx4dCl8MCxFPUUrTWF0aC5pbXVsKGtlLG9uKXwwLG09KG09bStNYXRoLmltdWwoa2UsanQpfDApK01hdGguaW11''@;'; put 'put ''bChBZSxvbil8MCxBPUErTWF0aC5pbXVsKEFlLGp0KXwwLEU9RStNYXRoLmltdWwoUmUsY24pfDAsbT0obT1tK01hdGguaW11bChSZSxwbil8MCkrTWF0aC5pbXVsKEllLGNuKXwwLEE9QStNYXRoLmltdWwoSWUscG4pfDA7dmFyIGdvPShqKyhFPUUrTWF0aC5pbXVsKGplLFh0KXwwKXwwKSso''@;'; put 'put ''KDgxOTEmKG09KG09bStNYXRoLmltdWwoamUsZW4pfDApK01hdGguaW11bChEZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChEZSxlbil8MCkrKG0+Pj4xMyl8MCkrKGdvPj4+MjYpfDAsZ28mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHN0KSxtPShtPU1hdGguaW11bChIZSx6''@;'; put 'put ''dCkpK01hdGguaW11bChkdCxzdCl8MCxBPU1hdGguaW11bChkdCx6dCksRT1FK01hdGguaW11bChpdCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFR0KXwwKStNYXRoLmltdWwoJGUsV2UpfDAsQT1BK01hdGguaW11bCgkZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHl0LGh0KXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoeXQseHQpfDApK01hdGguaW11bChNdCxodCl8MCxBPUErTWF0aC5pbXVsKE10LHh0KXwwLEU9RStNYXRoLmltdWwocnQsb24pfDAsbT0obT1tK01hdGguaW11bChydCxqdCl8MCkrTWF0aC5pbXVsKFFlLG9uKXwwLEE9QStNYXRoLmltdWwoUWUsanQpfDAsRT1FK01hdGguaW11''@;'; put 'put ''bChrZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHBuKXwwKStNYXRoLmltdWwoQWUsY24pfDAsQT1BK01hdGguaW11bChBZSxwbil8MDt2YXIgZXI9KGorKEU9RStNYXRoLmltdWwoUmUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChSZSxlbil8MCkrTWF0aC5pbXVsKEll''@;'; put 'put ''LFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEllLGVuKXwwKSsobT4+PjEzKXwwKSsoZXI+Pj4yNil8MCxlciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV2UpLG09KG09TWF0aC5pbXVsKEhlLFR0KSkrTWF0aC5pbXVsKGR0LFdlKXwwLEE9TWF0aC5pbXVsKGR0LFR0KSxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKGl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoaXQseHQpfDApK01hdGguaW11bCgkZSxodCl8MCxBPUErTWF0aC5pbXVsKCRlLHh0KXwwLEU9RStNYXRoLmltdWwoeXQsb24pfDAsbT0obT1tK01hdGguaW11bCh5dCxqdCl8MCkrTWF0aC5pbXVsKE10LG9uKXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoTXQsanQpfDAsRT1FK01hdGguaW11bChydCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LHBuKXwwKStNYXRoLmltdWwoUWUsY24pfDAsQT1BK01hdGguaW11bChRZSxwbil8MDt2YXIgY289KGorKEU9RStNYXRoLmltdWwoa2UsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGgu''@;'; put 'put ''aW11bChrZSxlbil8MCkrTWF0aC5pbXVsKEFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEFlLGVuKXwwKSsobT4+PjEzKXwwKSsoY28+Pj4yNil8MCxjbyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaHQpLG09KG09TWF0aC5pbXVsKEhlLHh0KSkrTWF0aC5pbXVsKGR0LGh0''@;'; put 'put ''KXwwLEE9TWF0aC5pbXVsKGR0LHh0KSxFPUUrTWF0aC5pbXVsKGl0LG9uKXwwLG09KG09bStNYXRoLmltdWwoaXQsanQpfDApK01hdGguaW11bCgkZSxvbil8MCxBPUErTWF0aC5pbXVsKCRlLGp0KXwwLEU9RStNYXRoLmltdWwoeXQsY24pfDAsbT0obT1tK01hdGguaW11bCh5dCxwbil8MCkr''@;'; put 'put ''TWF0aC5pbXVsKE10LGNuKXwwLEE9QStNYXRoLmltdWwoTXQscG4pfDA7dmFyIF9vPShqKyhFPUUrTWF0aC5pbXVsKHJ0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwocnQsZW4pfDApK01hdGguaW11bChRZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChRZSxl''@;'; put 'put ''bil8MCkrKG0+Pj4xMyl8MCkrKF9vPj4+MjYpfDAsX28mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLG9uKSxtPShtPU1hdGguaW11bChIZSxqdCkpK01hdGguaW11bChkdCxvbil8MCxBPU1hdGguaW11bChkdCxqdCksRT1FK01hdGguaW11bChpdCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGl0''@;'; put 'put ''LHBuKXwwKStNYXRoLmltdWwoJGUsY24pfDAsQT1BK01hdGguaW11bCgkZSxwbil8MDt2YXIgT289KGorKEU9RStNYXRoLmltdWwoeXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh5dCxlbil8MCkrTWF0aC5pbXVsKE10LFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5p''@;'; put 'put ''bXVsKE10LGVuKXwwKSsobT4+PjEzKXwwKSsoT28+Pj4yNil8MCxPbyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsY24pLG09KG09TWF0aC5pbXVsKEhlLHBuKSkrTWF0aC5pbXVsKGR0LGNuKXwwLEE9TWF0aC5pbXVsKGR0LHBuKTt2YXIgSG89KGorKEU9RStNYXRoLmltdWwoaXQsWHQpfDAp''@;'; put 'put ''fDApKygoODE5MSYobT0obT1tK01hdGguaW11bChpdCxlbil8MCkrTWF0aC5pbXVsKCRlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKCRlLGVuKXwwKSsobT4+PjEzKXwwKSsoSG8+Pj4yNil8MCxIbyY9NjcxMDg4NjM7dmFyIGVpPShqKyhFPU1hdGguaW11bChIZSxYdCkpfDAp''@;'; put 'put ''KygoODE5MSYobT0obT1NYXRoLmltdWwoSGUsZW4pKStNYXRoLmltdWwoZHQsWHQpfDApKTw8MTMpfDA7cmV0dXJuIGo9KChBPU1hdGguaW11bChkdCxlbikpKyhtPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxIWzBdPWhvLEhbMV09TWksSFsyXT1wcixIWzNdPVduLEhbNF09''@;'; put 'put ''S2ksSFs1XT1RcixIWzZdPUpyLEhbN109QmksSFs4XT1WaSxIWzldPUlvLEhbMTBdPU9yLEhbMTFdPVlpLEhbMTJdPWdvLEhbMTNdPWVyLEhbMTRdPWNvLEhbMTVdPV9vLEhbMTZdPU9vLEhbMTddPUhvLEhbMThdPWVpLDAhPT1qJiYoSFsxOV09aix4Lmxlbmd0aCsrKSx4fTtmdW5jdGlvbiBl''@;'; put 'put ''ZShWLHAsYil7cmV0dXJuKG5ldyBKKS5tdWxwKFYscCxiKX1mdW5jdGlvbiBKKFYscCl7dGhpcy54PVYsdGhpcy55PXB9TWF0aC5pbXVsfHwoWT1XKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5sZW5ndGgrcC5sZW5ndGg7cmV0dXJuIHg9MTA9PT10aGlz''@;'; put 'put ''Lmxlbmd0aCYmMTA9PT1wLmxlbmd0aD9ZKHRoaXMscCxiKTpDPDYzP1codGhpcyxwLGIpOkM8MTAyND9mdW5jdGlvbiBYKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZSxiLmxlbmd0aD1WLmxlbmd0aCtwLmxlbmd0aDtmb3IodmFyIHg9MCxDPTAsVD0wO1Q8Yi5sZW5n''@;'; put 'put ''dGgtMTtUKyspe3ZhciBIPUM7Qz0wO2Zvcih2YXIgaj02NzEwODg2MyZ4LEU9TWF0aC5taW4oVCxwLmxlbmd0aC0xKSxtPU1hdGgubWF4KDAsVC1WLmxlbmd0aCsxKTttPD1FO20rKyl7dmFyIHNlPSgwfFYud29yZHNbVC1tXSkqKDB8cC53b3Jkc1ttXSksd2U9NjcxMDg4NjMmc2U7aj02NzEw''@;'; put 'put ''ODg2MyYod2U9d2UranwwKSxDKz0oSD0oSD1IKyhzZS82NzEwODg2NHwwKXwwKSsod2U+Pj4yNil8MCk+Pj4yNixIJj02NzEwODg2M31iLndvcmRzW1RdPWoseD1ILEg9Q31yZXR1cm4gMCE9PXg/Yi53b3Jkc1tUXT14OmIubGVuZ3RoLS0sYi5zdHJpcCgpfSh0aGlzLHAsYik6ZWUodGhpcyxw''@;'; put 'put ''LGIpLHh9LEoucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PXcucHJvdG90eXBlLl9jb3VudEJpdHMocCktMSxDPTA7QzxwO0MrKyliW0NdPXRoaXMucmV2QmluKEMseCxwKTtyZXR1cm4gYn0sSi5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9u''@;'; put 'put ''KHAsYix4KXtpZigwPT09cHx8cD09PXgtMSlyZXR1cm4gcDtmb3IodmFyIEM9MCxUPTA7VDxiO1QrKylDfD0oMSZwKTw8Yi1ULTEscD4+PTE7cmV0dXJuIEN9LEoucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24ocCxiLHgsQyxULEgpe2Zvcih2YXIgaj0wO2o8SDtqKyspQ1tqXT1iW3Bbal1d''@;'; put 'put ''LFRbal09eFtwW2pdXX0sSi5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXt0aGlzLnBlcm11dGUoSCxwLGIseCxDLFQpO2Zvcih2YXIgaj0xO2o8VDtqPDw9MSlmb3IodmFyIEU9ajw8MSxtPU1hdGguY29zKDIqTWF0aC5QSS9FKSxBPU1hdGguc2luKDIqTWF0aC5Q''@;'; put 'put ''SS9FKSxvZT0wO29lPFQ7b2UrPUUpZm9yKHZhciB0ZT1tLHNlPUEsd2U9MDt3ZTxqO3dlKyspe3ZhciBVZT14W29lK3dlXSxKZT1DW29lK3dlXSxhdD14W29lK3dlK2pdLE1lPUNbb2Urd2Ural0sdmU9dGUqYXQtc2UqTWU7TWU9dGUqTWUrc2UqYXQseFtvZSt3ZV09VWUrKGF0PXZlKSxDW29l''@;'; put 'put ''K3dlXT1KZStNZSx4W29lK3dlK2pdPVVlLWF0LENbb2Urd2Ural09SmUtTWUsd2UhPT1FJiYodmU9bSp0ZS1BKnNlLHNlPW0qc2UrQSp0ZSx0ZT12ZSl9fSxKLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihwLGIpe3ZhciB4PTF8TWF0aC5tYXgoYixwKSxDPTEmeCxUPTA7Zm9yKHg9''@;'; put 'put ''eC8yfDA7eDt4Pj4+PTEpVCsrO3JldHVybiAxPDxUKzErQ30sSi5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHAsYix4KXtpZighKHg8PTEpKWZvcih2YXIgQz0wO0M8eC8yO0MrKyl7dmFyIFQ9cFtDXTtwW0NdPXBbeC1DLTFdLHBbeC1DLTFdPVQsVD1iW0NdLGJbQ109LWJbeC1DLTFd''@;'; put 'put ''LGJbeC1DLTFdPS1UfX0sSi5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTAsQz0wO0M8Yi8yO0MrKyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5kKHBbMipDKzFdL2IpK01hdGgucm91bmQocFsyKkNdL2IpK3g7cFtDXT02NzEwODg2MyZULHg9VDw2NzEwODg2''@;'; put 'put ''ND8wOlQvNjcxMDg4NjR8MH1yZXR1cm4gcH0sSi5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihwLGIseCxDKXtmb3IodmFyIFQ9MCxIPTA7SDxiO0grKyl4WzIqSF09ODE5MSYoVCs9MHxwW0hdKSx4WzIqSCsxXT04MTkxJihUPj4+PTEzKSxUPj4+PTEzO2ZvcihIPTIqYjtIPEM7KytI''@;'; put 'put ''KXhbSF09MDtnKDA9PT1UKSxnKCEoLTgxOTImVCkpfSxKLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD0wO3g8cDt4KyspYlt4XT0wO3JldHVybiBifSxKLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz0yKnRoaXMuZ3Vlc3NM''@;'; put 'put ''ZW4xM2IocC5sZW5ndGgsYi5sZW5ndGgpLFQ9dGhpcy5tYWtlUkJUKEMpLEg9dGhpcy5zdHViKEMpLGo9bmV3IEFycmF5KEMpLEU9bmV3IEFycmF5KEMpLG09bmV3IEFycmF5KEMpLEE9bmV3IEFycmF5KEMpLG9lPW5ldyBBcnJheShDKSx0ZT1uZXcgQXJyYXkoQyksc2U9eC53b3JkcztzZS5s''@;'; put 'put ''ZW5ndGg9Qyx0aGlzLmNvbnZlcnQxM2IocC53b3JkcyxwLmxlbmd0aCxqLEMpLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLEEsQyksdGhpcy50cmFuc2Zvcm0oaixILEUsbSxDLFQpLHRoaXMudHJhbnNmb3JtKEEsSCxvZSx0ZSxDLFQpO2Zvcih2YXIgd2U9MDt3ZTxDO3dlKysp''@;'; put 'put ''e3ZhciBVZT1FW3dlXSpvZVt3ZV0tbVt3ZV0qdGVbd2VdO21bd2VdPUVbd2VdKnRlW3dlXSttW3dlXSpvZVt3ZV0sRVt3ZV09VWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKEUsbSxDKSx0aGlzLnRyYW5zZm9ybShFLG0sc2UsSCxDLFQpLHRoaXMuY29uanVnYXRlKHNlLEgsQyksdGhpcy5ub3Jt''@;'; put 'put ''YWxpemUxM2Ioc2UsQykseC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9cC5sZW5ndGgrYi5sZW5ndGgseC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVu''@;'; put 'put ''Z3RoK3AubGVuZ3RoKSx0aGlzLm11bFRvKHAsYil9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSxlZSh0aGlzLHAsYil9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24o''@;'; put 'put ''cCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhwLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KTtmb3IodmFyIGI9MCx4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKnAs''@;'; put 'put ''VD0oNjcxMDg4NjMmQykrKDY3MTA4ODYzJmIpO2I+Pj0yNixiKz1DLzY3MTA4ODY0fDAsYis9VD4+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PWImJih0aGlzLndvcmRzW3hdPWIsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihw''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHApfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlv''@;'; put 'put ''bihwKXt2YXIgYj1mdW5jdGlvbiBVKFYpe2Zvcih2YXIgcD1uZXcgQXJyYXkoVi5iaXRMZW5ndGgoKSksYj0wO2I8cC5sZW5ndGg7YisrKXt2YXIgQz1iJTI2O3BbYl09KFYud29yZHNbYi8yNnwwXSYxPDxDKT4+PkN9cmV0dXJuIHB9KHApO2lmKDA9PT1iLmxlbmd0aClyZXR1cm4gbmV3IHco''@;'; put 'put ''MSk7Zm9yKHZhciB4PXRoaXMsQz0wO0M8Yi5sZW5ndGgmJjA9PT1iW0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzxiLmxlbmd0aClmb3IodmFyIFQ9eC5zcXIoKTtDPGIubGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PWJbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5cGUuaXVz''@;'; put 'put ''aGxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgVCxiPXAlMjYseD0ocC1iKS8yNixDPTY3MTA4ODYzPj4+MjYtYjw8MjYtYjtpZigwIT09Yil7dmFyIEg9MDtmb3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgaj10aGlzLndvcmRzW1RdJkM7dGhpcy53''@;'; put 'put ''b3Jkc1tUXT0oMHx0aGlzLndvcmRzW1RdKS1qPDxifEgsSD1qPj4+MjYtYn1IJiYodGhpcy53b3Jkc1tUXT1ILHRoaXMubGVuZ3RoKyspfWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4O1QrKyl0''@;'; put 'put ''aGlzLndvcmRzW1RdPTA7dGhpcy5sZW5ndGgrPXh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24ocCxiLHgpe3ZhciBD''@;'; put 'put ''O2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKSxDPWI/KGItYiUyNikvMjY6MDt2YXIgVD1wJTI2LEg9TWF0aC5taW4oKHAtVCkvMjYsdGhpcy5sZW5ndGgpLGo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtpZihDLT1ILEM9TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09MDttPEg7''@;'; put 'put ''bSsrKUUud29yZHNbbV09dGhpcy53b3Jkc1ttXTtFLmxlbmd0aD1IfWlmKDAhPT1IKWlmKHRoaXMubGVuZ3RoPkgpZm9yKHRoaXMubGVuZ3RoLT1ILG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRoaXMud29yZHNbbStIXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxl''@;'; put 'put ''bmd0aD0xO3ZhciBBPTA7Zm9yKG09dGhpcy5sZW5ndGgtMTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIG9lPTB8dGhpcy53b3Jkc1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8b2U+Pj5ULEE9b2Uman1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEpLDA9PT10''@;'; put 'put ''aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4ocCxiLHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9u''@;'; put 'put ''KHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4ocCl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4ocCl9LHcucHJvdG90eXBl''@;'; put 'put ''LnVzaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHApfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhpcy53b3Jk''@;'; put 'put ''c1t4XSYxPDxiKSl9LHcucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0''@;'; put 'put ''aGlzLmxlbmd0aDw9eD90aGlzOigwIT09YiYmeCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT1iJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5iPDxiKSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5j''@;'; put 'put ''dGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihwKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MD90aGlzLmlzdWJuKC1wKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgm''@;'; put 'put ''JigwfHRoaXMud29yZHNbMF0pPHA/KHRoaXMud29yZHNbMF09cC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihwKX0sdy5wcm90b3R5cGUuX2lhZGRu''@;'; put 'put ''PWZ1bmN0aW9uKHApe3RoaXMud29yZHNbMF0rPXA7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXT49NjcxMDg4NjQ7YisrKXRoaXMud29yZHNbYl0tPTY3MTA4ODY0LGI9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbYisxXT0xOnRoaXMud29yZHNbYisxXSsrO3Jl''@;'; put 'put ''dHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxiKzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHApe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MClyZXR1cm4gdGhpcy5pYWRkbigtcCk7aWYoMCE9PXRoaXMubmVnYXRpdmUp''@;'; put 'put ''cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXAsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3Io''@;'; put 'put ''dmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPDA7YisrKXRoaXMud29yZHNbYl0rPTY3MTA4ODY0LHRoaXMud29yZHNbYisxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4ocCl9''@;'; put 'put ''LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihwKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5p''@;'; put 'put ''YWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihwLGIseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKHAubGVuZ3RoK3gpO3ZhciBILGo9MDtmb3IoVD0wO1Q8cC5sZW5ndGg7VCsrKXtIPSgwfHRoaXMud29yZHNbVCt4XSkrajt2YXIgRT0oMHxwLndvcmRzW1RdKSpiO2o9KChI''@;'; put 'put ''LT02NzEwODg2MyZFKT4+MjYpLShFLzY3MTA4ODY0fDApLHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIfWZvcig7VDx0aGlzLmxlbmd0aC14O1QrKylqPShIPSgwfHRoaXMud29yZHNbVCt4XSkraik+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIO2lmKDA9PT1qKXJldHVybiB0aGlz''@;'; put 'put ''LnN0cmlwKCk7Zm9yKGcoLTE9PT1qKSxqPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKWo9KEg9LSgwfHRoaXMud29yZHNbVF0pK2opPj4yNix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJkg7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1''@;'; put 'put ''bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmNsb25lKCksVD1wLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRoaXMuX2NvdW50Qml0cyhIKSkmJihUPVQudXNobG4oeCksQy5pdXNobG4oeCksSD0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgtVC5sZW5n''@;'; put 'put ''dGg7aWYoIm1vZCIhPT1iKXsobT1uZXcgdyhudWxsKSkubGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0aCk7Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0wfXZhciBvZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09b2UubmVnYXRpdmUm''@;'; put 'put ''JihDPW9lLG0mJihtLndvcmRzW0VdPTEpKTtmb3IodmFyIHRlPUUtMTt0ZT49MDt0ZS0tKXt2YXIgc2U9NjcxMDg4NjQqKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZV0pKygwfEMud29yZHNbVC5sZW5ndGgrdGUtMV0pO2ZvcihzZT1NYXRoLm1pbihzZS9IfDAsNjcxMDg4NjMpLEMuX2lzaGxuc3Vi''@;'; put 'put ''bXVsKFQsc2UsdGUpOzAhPT1DLm5lZ2F0aXZlOylzZS0tLEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsdGUpLEMuaXNaZXJvKCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1t0ZV09c2UpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09YiYmMCE9PXgm''@;'; put 'put ''JkMuaXVzaHJuKHgpLHtkaXY6bXx8bnVsbCxtb2Q6Q319LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGcoIXAuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2''@;'; put 'put ''ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLGIpLCJtb2QiIT09YiYmKEM9SC5kaXYubmVnKCkpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChwKSkse2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlPyhIPXRo''@;'; put 'put ''aXMuZGl2bW9kKHAubmVnKCksYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSkse2RpdjpDLG1vZDpILm1vZH0pOnRoaXMubmVnYXRpdmUmcC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLm5lZygpLGIpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRp''@;'; put 'put ''dmUmJlQuaXN1YihwKSkse2RpdjpILmRpdixtb2Q6VH0pOnAubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChwKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1wLmxlbmd0aD8iZGl2Ij09PWI/e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09Yj97''@;'; put 'put ''ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHAsYik7dmFyIEMsVCxIfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24ocCl7cmV0''@;'; put 'put ''dXJuIHRoaXMuZGl2bW9kKHAsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITApLm1vZH0sdy5w''@;'; put 'put ''cm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5kaXZtb2QocCk7aWYoYi5tb2QuaXNaZXJvKCkpcmV0dXJuIGIuZGl2O3ZhciB4PTAhPT1iLmRpdi5uZWdhdGl2ZT9iLm1vZC5pc3ViKHApOmIubW9kLEM9cC51c2hybigxKSxUPXAuYW5kbG4oMSksSD14LmNtcChDKTty''@;'; put 'put ''ZXR1cm4gSDwwfHwxPT09VCYmMD09PUg/Yi5kaXY6MCE9PWIuZGl2Lm5lZ2F0aXZlP2IuZGl2LmlzdWJuKDEpOmIuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0oMTw8MjYpJXAseD0wLEM9dGhpcy5sZW5ndGgtMTtD''@;'; put 'put ''Pj0wO0MtLSl4PShiKngrKDB8dGhpcy53b3Jkc1tDXSkpJXA7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQqYjt0''@;'; put 'put ''aGlzLndvcmRzW3hdPUMvcHwwLGI9QyVwfXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihwKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygp''@;'; put 'put ''KTt2YXIgYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPW5ldyB3KDApLGo9bmV3IHcoMSksRT0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7KWIuaXVzaHJuKDEpLHguaXVzaHJuKDEp''@;'; put 'put ''LCsrRTtmb3IodmFyIG09eC5jbG9uZSgpLEE9Yi5jbG9uZSgpOyFiLmlzWmVybygpOyl7Zm9yKHZhciBvZT0wLHRlPTE7IShiLndvcmRzWzBdJnRlKSYmb2U8MjY7KytvZSx0ZTw8PTEpO2lmKG9lPjApZm9yKGIuaXVzaHJuKG9lKTtvZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2RkKCkpJiYo''@;'; put 'put ''Qy5pYWRkKG0pLFQuaXN1YihBKSksQy5pdXNocm4oMSksVC5pdXNocm4oMSk7Zm9yKHZhciBzZT0wLHdlPTE7ISh4LndvcmRzWzBdJndlKSYmc2U8MjY7KytzZSx3ZTw8PTEpO2lmKHNlPjApZm9yKHguaXVzaHJuKHNlKTtzZS0tID4wOykoSC5pc09kZCgpfHxqLmlzT2RkKCkpJiYoSC5pYWRk''@;'; put 'put ''KG0pLGouaXN1YihBKSksSC5pdXNocm4oMSksai5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoSCksVC5pc3ViKGopKTooeC5pc3ViKGIpLEguaXN1YihDKSxqLmlzdWIoVCkpfXJldHVybnthOkgsYjpqLGdjZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBlLl9pbnZt''@;'; put 'put ''cD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgb2UsYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPXguY2xvbmUoKTtiLmNtcG4oMSk+MCYm''@;'; put 'put ''eC5jbXBuKDEpPjA7KXtmb3IodmFyIGo9MCxFPTE7IShiLndvcmRzWzBdJkUpJiZqPDI2OysraixFPDw9MSk7aWYoaj4wKWZvcihiLml1c2hybihqKTtqLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKEgpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkmJm08MjY7''@;'; put 'put ''KyttLEE8PD0xKTtpZihtPjApZm9yKHguaXVzaHJuKG0pO20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoSCksVC5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoVCkpOih4LmlzdWIoYiksVC5pc3ViKEMpKX1yZXR1cm4ob2U9MD09PWIuY21wbigxKT9DOlQpLmNtcG4o''@;'; put 'put ''MCk8MCYmb2UuaWFkZChwKSxvZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHApe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHAuYWJzKCk7aWYocC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgYj10aGlzLmNsb25lKCkseD1wLmNsb25lKCk7Yi5uZWdhdGl2ZT0wLHgubmVnYXRp''@;'; put 'put ''dmU9MDtmb3IodmFyIEM9MDtiLmlzRXZlbigpJiZ4LmlzRXZlbigpO0MrKyliLml1c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zvcig7Yi5pc0V2ZW4oKTspYi5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD1iLmNtcCh4KTtpZihUPDApe3ZhciBIPWI7''@;'; put 'put ''Yj14LHg9SH1lbHNlIGlmKDA9PT1UfHwwPT09eC5jbXBuKDEpKWJyZWFrO2IuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZWdjZChwKS5hLnVtb2QocCl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZwfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihwKXtn''@;'; put 'put ''KCJudW1iZXIiPT10eXBlb2YgcCk7dmFyIGI9cCUyNix4PShwLWIpLzI2LEM9MTw8YjtpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIgVD1DLEg9eDswIT09VCYmSDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPTB8''@;'; put 'put ''dGhpcy53b3Jkc1tIXTtUPShqKz1UKT4+PjI2LHRoaXMud29yZHNbSF09aiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYodGhpcy53b3Jkc1tIXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10''@;'; put 'put ''aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhYilyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmYilyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxzZXtiJiYo''@;'; put 'put ''cD0tcCksZyhwPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09cD8wOkM8cD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihwKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYm''@;'; put 'put ''MD09PXAubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBiPXRoaXMudWNtcChwKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtYjpifSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHApe2lmKHRoaXMubGVuZ3Ro''@;'; put 'put ''PnAubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHAubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9MHxwLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/Yj0tMTpDPlQmJihiPTEpO2JyZWFrfX1y''@;'; put 'put ''ZXR1cm4gYn0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk+PTB9''@;'; put 'put ''LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcChwKX0sdy5wcm90b3R5''@;'; put 'put ''cGUubHRlbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXBuKHApPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmVxPWZ1''@;'; put 'put ''bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5jbXAocCl9LHcucmVkPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgU2UocCl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLGcoMD09''@;'; put 'put ''PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4g''@;'; put 'put ''cmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnJlZD1wLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFk''@;'; put 'put ''eSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxwKX0sdy5w''@;'; put 'put ''cm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3Vi''@;'; put 'put ''IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxwKX0s''@;'; put 'put ''dy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVs''@;'; put 'put ''IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQubXVsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMi''@;'; put 'put ''KSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHApLHRoaXMucmVkLmltdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlz''@;'; put 'put ''LnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRT''@;'; put 'put ''cXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVk''@;'; put 'put ''LCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1i''@;'; put 'put ''ZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQmJiFwLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3co''@;'; put 'put ''dGhpcyxwKX07dmFyIHJlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gaWUoVixwKXt0aGlzLm5hbWU9Vix0aGlzLnA9bmV3IHcocCwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubiku''@;'; put 'put ''aXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGxlKCl7aWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBtZSgpe2llLmNhbGwo''@;'; put 'put ''dGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gX2UoKXtpZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZm''@;'; put 'put ''ZiIpfWZ1bmN0aW9uIFRlKCl7aWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBTZShWKXtpZigic3RyaW5nIj09dHlwZW9mIFYpe3ZhciBwPXcuX3ByaW1lKFYp''@;'; put 'put ''O3RoaXMubT1wLnAsdGhpcy5wcmltZT1wfWVsc2UgZyhWLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPVYsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIHplKFYpe1NlLmNhbGwodGhpcyxWKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlz''@;'; put 'put ''LnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5t''@;'; put 'put ''dWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWllLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHAud29yZHM9bmV3IEFy''@;'; put 'put ''cmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxwfSxpZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihwKXt2YXIgeCxiPXA7ZG97dGhpcy5zcGxpdChiLHRoaXMudG1wKSx4PShiPShiPXRoaXMuaW11bEsoYikpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRoaXMubik7''@;'; put 'put ''dmFyIEM9eDx0aGlzLm4/LTE6Yi51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1DPyhiLndvcmRzWzBdPTAsYi5sZW5ndGg9MSk6Qz4wP2IuaXN1Yih0aGlzLnApOnZvaWQgMCE9PWIuc3RyaXA/Yi5zdHJpcCgpOmIuX3N0cmlwKCksYn0saWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7''@;'; put 'put ''cC5pdXNocm4odGhpcy5uLDAsYil9LGllLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pbXVsKHRoaXMuayl9LEIobGUsaWUpLGxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4ocC5sZW5ndGgsOSksVD0wO1Q8''@;'; put 'put ''QztUKyspYi53b3Jkc1tUXT1wLndvcmRzW1RdO2lmKGIubGVuZ3RoPUMscC5sZW5ndGg8PTkpcmV0dXJuIHAud29yZHNbMF09MCx2b2lkKHAubGVuZ3RoPTEpO3ZhciBIPXAud29yZHNbOV07Zm9yKGIud29yZHNbYi5sZW5ndGgrK109SCZ4LFQ9MTA7VDxwLmxlbmd0aDtUKyspe3ZhciBqPTB8''@;'; put 'put ''cC53b3Jkc1tUXTtwLndvcmRzW1QtMTBdPShqJngpPDw0fEg+Pj4yMixIPWp9cC53b3Jkc1tULTEwXT1IPj4+PTIyLHAubGVuZ3RoLT0wPT09SCYmcC5sZW5ndGg+MTA/MTA6OX0sbGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3Aud29yZHNbcC5sZW5ndGhdPTAscC53b3Jkc1twLmxl''@;'; put 'put ''bmd0aCsxXT0wLHAubGVuZ3RoKz0yO2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MHxwLndvcmRzW3hdO3Aud29yZHNbeF09NjcxMDg4NjMmKGIrPTk3NypDKSxiPTY0KkMrKGIvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiYocC5sZW5n''@;'; put 'put ''dGgtLSwwPT09cC53b3Jkc1twLmxlbmd0aC0xXSYmcC5sZW5ndGgtLSkscH0sQihtZSxpZSksQihfZSxpZSksQihUZSxpZSksVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8cC53b3Jkc1t4XSkrYixUPTY3''@;'; put 'put ''MTA4ODYzJkM7Qz4+Pj0yNixwLndvcmRzW3hdPVQsYj1DfXJldHVybiAwIT09YiYmKHAud29yZHNbcC5sZW5ndGgrK109YikscH0sdy5fcHJpbWU9ZnVuY3Rpb24ocCl7aWYocmVbcF0pcmV0dXJuIHJlW3BdO3ZhciBiO2lmKCJrMjU2Ij09PXApYj1uZXcgbGU7ZWxzZSBpZigicDIyNCI9PT1w''@;'; put 'put ''KWI9bmV3IG1lO2Vsc2UgaWYoInAxOTIiPT09cCliPW5ldyBfZTtlbHNle2lmKCJwMjU1MTkiIT09cCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitwKTtiPW5ldyBUZX1yZXR1cm4gcmVbcF09YixifSxTZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24ocCl7ZygwPT09cC5u''@;'; put 'put ''ZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKHAucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihwLGIpe2coIShwLm5lZ2F0aXZlfGIubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3''@;'; put 'put ''aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQmJnAucmVkPT09Yi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHApLl9mb3JjZVJlZCh0aGlzKTpwLnVt''@;'; put 'put ''b2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaXNaZXJvKCk/cC5jbG9uZSgpOnRoaXMubS5zdWIocCkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIp''@;'; put 'put ''O3ZhciB4PXAuYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0w''@;'; put 'put ''JiZ4LmlzdWIodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9u''@;'; put 'put ''KHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuaXN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShwKSx0aGlzLmltb2QocC51c2hsbihiKSl9LFNlLnByb3Rv''@;'; put 'put ''dHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5pbXVsKGIpKX0sU2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAsYiksdGhpcy5pbW9kKHAubXVsKGIpKX0sU2UucHJvdG90eXBlLmlz''@;'; put 'put ''cXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW11bChwLHAuY2xvbmUoKSl9LFNlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubXVsKHAscCl9LFNlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHApe2lmKHAuaXNaZXJvKCkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgYj10''@;'; put 'put ''aGlzLm0uYW5kbG4oMyk7aWYoZyhiJTI9PTEpLDM9PT1iKXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHAseCl9Zm9yKHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1c2hybigx''@;'; put 'put ''KTtnKCFDLmlzWmVybygpKTt2YXIgSD1uZXcgdygxKS50b1JlZCh0aGlzKSxqPUgucmVkTmVnKCksRT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChqKTspbS5y''@;'; put 'put ''ZWRJQWRkKGopO2Zvcih2YXIgQT10aGlzLnBvdyhtLEMpLG9lPXRoaXMucG93KHAsQy5hZGRuKDEpLml1c2hybigxKSksdGU9dGhpcy5wb3cocCxDKSxzZT1UOzAhPT10ZS5jbXAoSCk7KXtmb3IodmFyIHdlPXRlLFVlPTA7MCE9PXdlLmNtcChIKTtVZSsrKXdlPXdlLnJlZFNxcigpO2coVWU8''@;'; put 'put ''c2UpO3ZhciBKZT10aGlzLnBvdyhBLG5ldyB3KDEpLml1c2hsbihzZS1VZS0xKSk7b2U9b2UucmVkTXVsKEplKSxBPUplLnJlZFNxcigpLHRlPXRlLnJlZE11bChBKSxzZT1VZX1yZXR1cm4gb2V9LFNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3ZhciBiPXAuX2ludm1wKHRoaXMubSk7''@;'; put 'put ''cmV0dXJuIDAhPT1iLm5lZ2F0aXZlPyhiLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKGIpLnJlZE5lZygpKTp0aGlzLmltb2QoYil9LFNlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCxiKXtpZihiLmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09Yi5jbXBuKDEpKXJl''@;'; put 'put ''dHVybiBwLmNsb25lKCk7dmFyIEM9bmV3IEFycmF5KDE2KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09cDtmb3IodmFyIFQ9MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENbVC0xXSxwKTt2YXIgSD1DWzBdLGo9MCxFPTAsbT1iLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09''@;'; put 'put ''bSYmKG09MjYpLFQ9Yi5sZW5ndGgtMTtUPj0wO1QtLSl7Zm9yKHZhciBBPWIud29yZHNbVF0sb2U9bS0xO29lPj0wO29lLS0pe3ZhciB0ZT1BPj5vZSYxO0ghPT1DWzBdJiYoSD10aGlzLnNxcihIKSksMCE9PXRlfHwwIT09aj8oajw8PTEsanw9dGUsKDQ9PSsrRXx8MD09PVQmJjA9PT1vZSkm''@;'; put 'put ''JihIPXRoaXMubXVsKEgsQ1tqXSksRT0wLGo9MCkpOkU9MH1tPTI2fXJldHVybiBIfSxTZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3ZhciBiPXAudW1vZCh0aGlzLm0pO3JldHVybiBiPT09cD9iLmNsb25lKCk6Yn0sU2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9u''@;'; put 'put ''KHApe3ZhciBiPXAuY2xvbmUoKTtyZXR1cm4gYi5yZWQ9bnVsbCxifSx3Lm1vbnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyB6ZShwKX0sQih6ZSxTZSksemUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAudXNobG4odGhpcy5zaGlmdCkpfSx6ZS5w''@;'; put 'put ''cm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5pbW9kKHAubXVsKHRoaXMucmludikpO3JldHVybiBiLnJlZD1udWxsLGJ9LHplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gcC53b3Jkc1swXT0w''@;'; put 'put ''LHAubGVuZ3RoPTEscDt2YXIgeD1wLmltdWwoYiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3Vi''@;'; put 'put ''KHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0semUucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1wLm11bChiKSxD''@;'; put 'put ''PXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRk''@;'; put 'put ''KHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSx6ZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSh1ZT1fLm5tZCh1ZSksdGhpcyl9LDYxMzg6KHVlLHEsXyk9Pnt2YXIg''@;'; put 'put ''ST1fKDk4MCkseT1fKDkxOTkpLGc9Xyg3ODU5KSxCPV8oMjE0NCksdz1fKDM2NjMpLFA9XygzNDgyKSxGPV8oNDgxOCksTz1fKDk1MDkpLkJ1ZmZlcjt1ZS5leHBvcnRzPWZ1bmN0aW9uKFUsVyxZKXt2YXIgWDtYPVUucGFkZGluZz9VLnBhZGRpbmc6WT8xOjQ7dmFyIHJlLGVlPUkoVSksSj1l''@;'; put 'put ''ZS5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtpZihXLmxlbmd0aD5KfHxuZXcgQihXKS5jbXAoZWUubW9kdWx1cyk+PTApdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7cmU9WT9GKG5ldyBCKFcpLGVlKTp3KFcsZWUpO3ZhciBpZT1PLmFsbG9jKEotcmUubGVuZ3RoKTtpZihyZT1P''@;'; put 'put ''LmNvbmNhdChbaWUscmVdLEopLDQ9PT1YKXJldHVybiBmdW5jdGlvbiB6KEssVSl7dmFyIFc9Sy5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxZPVAoInNoYTEiKS51cGRhdGUoTy5hbGxvYygwKSkuZGlnZXN0KCksWD1ZLmxlbmd0aDtpZigwIT09VVswXSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRp''@;'; put 'put ''b24gZXJyb3IiKTt2YXIgZWU9VS5zbGljZSgxLFgrMSksSj1VLnNsaWNlKFgrMSkscmU9ZyhlZSx5KEosWCkpLGllPWcoSix5KHJlLFctWC0xKSk7aWYoZnVuY3Rpb24gTChLLFUpe0s9Ty5mcm9tKEspLFU9Ty5mcm9tKFUpO3ZhciBXPTAsWT1LLmxlbmd0aDtLLmxlbmd0aCE9PVUubGVuZ3Ro''@;'; put 'put ''JiYoVysrLFk9TWF0aC5taW4oSy5sZW5ndGgsVS5sZW5ndGgpKTtmb3IodmFyIFg9LTE7KytYPFk7KVcrPUtbWF1eVVtYXTtyZXR1cm4gV30oWSxpZS5zbGljZSgwLFgpKSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTtmb3IodmFyIGxlPVg7MD09PWllW2xlXTspbGUrKztp''@;'; put 'put ''ZigxIT09aWVbbGUrK10pdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7cmV0dXJuIGllLnNsaWNlKGxlKX0oZWUscmUpO2lmKDE9PT1YKXJldHVybiBmdW5jdGlvbiBOKEssVSxXKXtmb3IodmFyIFk9VS5zbGljZSgwLDIpLFg9MixlZT0wOzAhPT1VW1grK107KWlmKFg+PVUu''@;'; put 'put ''bGVuZ3RoKXtlZSsrO2JyZWFrfXZhciBKPVUuc2xpY2UoMixYLTEpO2lmKCgiMDAwMiIhPT1ZLnRvU3RyaW5nKCJoZXgiKSYmIVd8fCIwMDAxIiE9PVkudG9TdHJpbmcoImhleCIpJiZXKSYmZWUrKyxKLmxlbmd0aDw4JiZlZSsrLGVlKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJv''@;'; put 'put ''ciIpO3JldHVybiBVLnNsaWNlKFgpfSgwLHJlLFkpO2lmKDM9PT1YKXJldHVybiByZTt0aHJvdyBuZXcgRXJyb3IoInVua25vd24gcGFkZGluZyIpfX0sNjU1OToodWUscSxfKT0+e3ZhciBJPV8oOTgwKSx5PV8oMTc5OCksZz1fKDM0ODIpLEI9Xyg5MTk5KSx3PV8oNzg1OSksUD1fKDIxNDQp''@;'; put 'put ''LEY9Xyg0ODE4KSxPPV8oMzY2Myksej1fKDk1MDkpLkJ1ZmZlcjt1ZS5leHBvcnRzPWZ1bmN0aW9uKFcsWSxYKXt2YXIgZWU7ZWU9Vy5wYWRkaW5nP1cucGFkZGluZzpYPzE6NDt2YXIgcmUsSj1JKFcpO2lmKDQ9PT1lZSlyZT1mdW5jdGlvbiBOKFUsVyl7dmFyIFk9VS5tb2R1bHVzLmJ5dGVM''@;'; put 'put ''ZW5ndGgoKSxYPVcubGVuZ3RoLGVlPWcoInNoYTEiKS51cGRhdGUoei5hbGxvYygwKSkuZGlnZXN0KCksSj1lZS5sZW5ndGgscmU9MipKO2lmKFg+WS1yZS0yKXRocm93IG5ldyBFcnJvcigibWVzc2FnZSB0b28gbG9uZyIpO3ZhciBpZT16LmFsbG9jKFktWC1yZS0yKSxsZT1ZLUotMSxtZT15''@;'; put 'put ''KEopLF9lPXcoei5jb25jYXQoW2VlLGllLHouYWxsb2MoMSwxKSxXXSxsZSksQihtZSxsZSkpLFRlPXcobWUsQihfZSxKKSk7cmV0dXJuIG5ldyBQKHouY29uY2F0KFt6LmFsbG9jKDEpLFRlLF9lXSxZKSl9KEosWSk7ZWxzZSBpZigxPT09ZWUpcmU9ZnVuY3Rpb24gTChVLFcsWSl7dmFyIEos''@;'; put 'put ''WD1XLmxlbmd0aCxlZT1VLm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2lmKFg+ZWUtMTEpdGhyb3cgbmV3IEVycm9yKCJtZXNzYWdlIHRvbyBsb25nIik7cmV0dXJuIEo9WT96LmFsbG9jKGVlLVgtMywyNTUpOmZ1bmN0aW9uIEsoVSl7Zm9yKHZhciBKLFc9ei5hbGxvY1Vuc2FmZShVKSxZPTAsWD15''@;'; put 'put ''KDIqVSksZWU9MDtZPFU7KWVlPT09WC5sZW5ndGgmJihYPXkoMipVKSxlZT0wKSwoSj1YW2VlKytdKSYmKFdbWSsrXT1KKTtyZXR1cm4gV30oZWUtWC0zKSxuZXcgUCh6LmNvbmNhdChbei5mcm9tKFswLFk/MToyXSksSix6LmFsbG9jKDEpLFddLGVlKSl9KEosWSxYKTtlbHNle2lmKDMhPT1l''@;'; put 'put ''ZSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24gcGFkZGluZyIpO2lmKChyZT1uZXcgUChZKSkuY21wKEoubW9kdWx1cyk+PTApdGhyb3cgbmV3IEVycm9yKCJkYXRhIHRvbyBsb25nIGZvciBtb2R1bHVzIil9cmV0dXJuIFg/TyhyZSxKKTpGKHJlLEopfX0sNDgxODoodWUscSxfKT0+e3ZhciBJ''@;'; put 'put ''PV8oMjE0NCkseT1fKDk1MDkpLkJ1ZmZlcjt1ZS5leHBvcnRzPWZ1bmN0aW9uIGcoQix3KXtyZXR1cm4geS5mcm9tKEIudG9SZWQoSS5tb250KHcubW9kdWx1cykpLnJlZFBvdyhuZXcgSSh3LnB1YmxpY0V4cG9uZW50KSkuZnJvbVJlZCgpLnRvQXJyYXkoKSl9fSw3ODU5OnVlPT57dWUuZXhw''@;'; put 'put ''b3J0cz1mdW5jdGlvbihfLEkpe2Zvcih2YXIgeT1fLmxlbmd0aCxnPS0xOysrZzx5OylfW2ddXj1JW2ddO3JldHVybiBffX0sMzY4OToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0IjtfLnIocSksXy5kKHEse2RlY29kZTooKT0+U2UsZGVmYXVsdDooKT0+eCxlbmNvZGU6KCk9PnplLHRvQVNDSUk6''@;'; put 'put ''KCk9PnAsdG9Vbmljb2RlOigpPT5WLHVjczJkZWNvZGU6KCk9PmllLHVjczJlbmNvZGU6KCk9PmxlfSk7Y29uc3QgST0yMTQ3NDgzNjQ3LHk9MzYsTj0vXnhuLS0vLEw9L1teXDAtXHg3Rl0vLEs9L1tceDJFXHUzMDAyXHVGRjBFXHVGRjYxXS9nLFU9e292ZXJmbG93OiJPdmVyZmxvdzogaW5w''@;'; put 'put ''dXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2VzcyIsIm5vdC1iYXNpYyI6IklsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90IGEgYmFzaWMgY29kZSBwb2ludCkiLCJpbnZhbGlkLWlucHV0IjoiSW52YWxpZCBpbnB1dCJ9LFk9TWF0aC5mbG9vcixYPVN0cmluZy5mcm9tQ2hhckNvZGU7''@;'; put 'put ''ZnVuY3Rpb24gZWUoQyl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoVVtDXSl9ZnVuY3Rpb24gcmUoQyxUKXtjb25zdCBIPUMuc3BsaXQoIkAiKTtsZXQgaj0iIjtILmxlbmd0aD4xJiYoaj1IWzBdKyJAIixDPUhbMV0pO2NvbnN0IG09ZnVuY3Rpb24gSihDLFQpe2NvbnN0IEg9W107bGV0IGo9Qy5s''@;'; put 'put ''ZW5ndGg7Zm9yKDtqLS07KUhbal09VChDW2pdKTtyZXR1cm4gSH0oKEM9Qy5yZXBsYWNlKEssIi4iKSkuc3BsaXQoIi4iKSxUKS5qb2luKCIuIik7cmV0dXJuIGorbX1mdW5jdGlvbiBpZShDKXtjb25zdCBUPVtdO2xldCBIPTA7Y29uc3Qgaj1DLmxlbmd0aDtmb3IoO0g8ajspe2NvbnN0IEU9''@;'; put 'put ''Qy5jaGFyQ29kZUF0KEgrKyk7aWYoRT49NTUyOTYmJkU8PTU2MzE5JiZIPGope2NvbnN0IG09Qy5jaGFyQ29kZUF0KEgrKyk7NTYzMjA9PSg2NDUxMiZtKT9ULnB1c2goKCgxMDIzJkUpPDwxMCkrKDEwMjMmbSkrNjU1MzYpOihULnB1c2goRSksSC0tKX1lbHNlIFQucHVzaChFKX1yZXR1cm4g''@;'; put 'put ''VH1jb25zdCBsZT1DPT5TdHJpbmcuZnJvbUNvZGVQb2ludCguLi5DKSxtZT1mdW5jdGlvbihDKXtyZXR1cm4gQz49NDgmJkM8NTg/Qy00OCsyNjpDPj02NSYmQzw5MT9DLTY1OkM+PTk3JiZDPDEyMz9DLTk3Onl9LF9lPWZ1bmN0aW9uKEMsVCl7cmV0dXJuIEMrMjIrNzUqKEM8MjYpLSgoMCE9''@;'; put 'put ''VCk8PDUpfSxUZT1mdW5jdGlvbihDLFQsSCl7bGV0IGo9MDtmb3IoQz1IP1koQy83MDApOkM+PjEsQys9WShDL1QpO0M+NDU1O2orPXkpQz1ZKEMvMzUpO3JldHVybiBZKGorMzYqQy8oQyszOCkpfSxTZT1mdW5jdGlvbihDKXtjb25zdCBUPVtdLEg9Qy5sZW5ndGg7bGV0IGo9MCxFPTEyOCxt''@;'; put 'put ''PTcyLEE9Qy5sYXN0SW5kZXhPZigiLSIpO0E8MCYmKEE9MCk7Zm9yKGxldCBvZT0wO29lPEE7KytvZSlDLmNoYXJDb2RlQXQob2UpPj0xMjgmJmVlKCJub3QtYmFzaWMiKSxULnB1c2goQy5jaGFyQ29kZUF0KG9lKSk7Zm9yKGxldCBvZT1BPjA/QSsxOjA7b2U8SDspe2NvbnN0IHRlPWo7Zm9y''@;'; put 'put ''KGxldCB3ZT0xLFVlPXk7O1VlKz15KXtvZT49SCYmZWUoImludmFsaWQtaW5wdXQiKTtjb25zdCBKZT1tZShDLmNoYXJDb2RlQXQob2UrKykpO0plPj15JiZlZSgiaW52YWxpZC1pbnB1dCIpLEplPlkoKEktaikvd2UpJiZlZSgib3ZlcmZsb3ciKSxqKz1KZSp3ZTtjb25zdCBhdD1VZTw9bT8x''@;'; put 'put ''OlVlPj1tKzI2PzI2OlVlLW07aWYoSmU8YXQpYnJlYWs7Y29uc3QgTWU9eS1hdDt3ZT5ZKEkvTWUpJiZlZSgib3ZlcmZsb3ciKSx3ZSo9TWV9Y29uc3Qgc2U9VC5sZW5ndGgrMTttPVRlKGotdGUsc2UsMD09dGUpLFkoai9zZSk+SS1FJiZlZSgib3ZlcmZsb3ciKSxFKz1ZKGovc2UpLGolPXNl''@;'; put 'put ''LFQuc3BsaWNlKGorKywwLEUpfXJldHVybiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5UKX0semU9ZnVuY3Rpb24oQyl7Y29uc3QgVD1bXSxIPShDPWllKEMpKS5sZW5ndGg7bGV0IGo9MTI4LEU9MCxtPTcyO2Zvcihjb25zdCB0ZSBvZiBDKXRlPDEyOCYmVC5wdXNoKFgodGUpKTtjb25zdCBB''@;'; put 'put ''PVQubGVuZ3RoO2xldCBvZT1BO2ZvcihBJiZULnB1c2goIi0iKTtvZTxIOyl7bGV0IHRlPUk7Zm9yKGNvbnN0IHdlIG9mIEMpd2U+PWomJndlPHRlJiYodGU9d2UpO2NvbnN0IHNlPW9lKzE7dGUtaj5ZKChJLUUpL3NlKSYmZWUoIm92ZXJmbG93IiksRSs9KHRlLWopKnNlLGo9dGU7Zm9yKGNv''@;'; put 'put ''bnN0IHdlIG9mIEMpaWYod2U8aiYmKytFPkkmJmVlKCJvdmVyZmxvdyIpLHdlPT09ail7bGV0IFVlPUU7Zm9yKGxldCBKZT15OztKZSs9eSl7Y29uc3QgYXQ9SmU8PW0/MTpKZT49bSsyNj8yNjpKZS1tO2lmKFVlPGF0KWJyZWFrO2NvbnN0IE1lPVVlLWF0LHZlPXktYXQ7VC5wdXNoKFgoX2Uo''@;'; put 'put ''YXQrTWUldmUsMCkpKSxVZT1ZKE1lL3ZlKX1ULnB1c2goWChfZShVZSwwKSkpLG09VGUoRSxzZSxvZT09PUEpLEU9MCwrK29lfSsrRSwrK2p9cmV0dXJuIFQuam9pbigiIil9LFY9ZnVuY3Rpb24oQyl7cmV0dXJuIHJlKEMsZnVuY3Rpb24oVCl7cmV0dXJuIE4udGVzdChUKT9TZShULnNsaWNl''@;'; put 'put ''KDQpLnRvTG93ZXJDYXNlKCkpOlR9KX0scD1mdW5jdGlvbihDKXtyZXR1cm4gcmUoQyxmdW5jdGlvbihUKXtyZXR1cm4gTC50ZXN0KFQpPyJ4bi0tIit6ZShUKTpUfSl9LHg9e3ZlcnNpb246IjIuMy4xIix1Y3MyOntkZWNvZGU6aWUsZW5jb2RlOmxlfSxkZWNvZGU6U2UsZW5jb2RlOnplLHRv''@;'; put 'put ''QVNDSUk6cCx0b1VuaWNvZGU6Vn19LDcxMjk6KHVlLHEpPT57InVzZSBzdHJpY3QiO3ZhciBfPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24geShQKXt0cnl7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChQLnJlcGxhY2UoL1wrL2csIiAiKSl9Y2F0Y2h7cmV0dXJu''@;'; put 'put ''IG51bGx9fWZ1bmN0aW9uIGcoUCl7dHJ5e3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoUCl9Y2F0Y2h7cmV0dXJuIG51bGx9fXEuc3RyaW5naWZ5PWZ1bmN0aW9uIHcoUCxGKXtGPUZ8fCIiO3ZhciB6LE4sTz1bXTtmb3IoTiBpbiJzdHJpbmciIT10eXBlb2YgRiYmKEY9Ij8iKSxQKWlmKF8u''@;'; put 'put ''Y2FsbChQLE4pKXtpZighKHo9UFtOXSkmJihudWxsPT16fHxpc05hTih6KSkmJih6PSIiKSxOPWcoTiksej1nKHopLG51bGw9PT1OfHxudWxsPT09eiljb250aW51ZTtPLnB1c2goTisiPSIreil9cmV0dXJuIE8ubGVuZ3RoP0YrTy5qb2luKCImIik6IiJ9LHEucGFyc2U9ZnVuY3Rpb24gQihQ''@;'; put 'put ''KXtmb3IodmFyIHosRj0vKFtePT8jJl0rKT0/KFteJl0qKS9nLE89e307ej1GLmV4ZWMoUCk7KXt2YXIgTj15KHpbMV0pLEw9eSh6WzJdKTtudWxsPT09Tnx8bnVsbD09PUx8fE4gaW4gT3x8KE9bTl09TCl9cmV0dXJuIE99fSwxNzk4Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8o''@;'; put 'put ''NDE1NSkseT02NTUzNix3PV8oOTUwOSkuQnVmZmVyLFA9Xy5nLmNyeXB0b3x8Xy5nLm1zQ3J5cHRvO3VlLmV4cG9ydHM9UCYmUC5nZXRSYW5kb21WYWx1ZXM/ZnVuY3Rpb24gRihPLHope2lmKE8+NDI5NDk2NzI5NSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigicmVxdWVzdGVkIHRvbyBtYW55IHJh''@;'; put 'put ''bmRvbSBieXRlcyIpO3ZhciBOPXcuYWxsb2NVbnNhZmUoTyk7aWYoTz4wKWlmKE8+eSlmb3IodmFyIEw9MDtMPE87TCs9eSlQLmdldFJhbmRvbVZhbHVlcyhOLnNsaWNlKEwsTCt5KSk7ZWxzZSBQLmdldFJhbmRvbVZhbHVlcyhOKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygej9JLm5leHRU''@;'; put 'put ''aWNrKGZ1bmN0aW9uKCl7eihudWxsLE4pfSk6Tn06ZnVuY3Rpb24gQigpe3Rocm93IG5ldyBFcnJvcigiU2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3Nlci5cblVzZSBDaHJvbWUsIEZpcmVmb3ggb3IgSW50ZXJuZXQgRXhwbG9y''@;'; put 'put ''ZXIgMTEiKX19LDc5NjM6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg0MTU1KTtmdW5jdGlvbiB5KCl7dGhyb3cgbmV3IEVycm9yKCJzZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyXG51c2UgY2hyb21lLCBGaXJlRm94''@;'; put 'put ''IG9yIEludGVybmV0IEV4cGxvcmVyIDExIil9dmFyIGc9Xyg5NTA5KSxCPV8oMTc5OCksdz1nLkJ1ZmZlcixQPWcua01heExlbmd0aCxGPV8uZy5jcnlwdG98fF8uZy5tc0NyeXB0byxPPU1hdGgucG93KDIsMzIpLTE7ZnVuY3Rpb24geihXLFkpe2lmKCJudW1iZXIiIT10eXBlb2YgV3x8VyE9''@;'; put 'put ''Vyl0aHJvdyBuZXcgVHlwZUVycm9yKCJvZmZzZXQgbXVzdCBiZSBhIG51bWJlciIpO2lmKFc+T3x8VzwwKXRocm93IG5ldyBUeXBlRXJyb3IoIm9mZnNldCBtdXN0IGJlIGEgdWludDMyIik7aWYoVz5QfHxXPlkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBvdXQgb2YgcmFuZ2UiKX1m''@;'; put 'put ''dW5jdGlvbiBOKFcsWSxYKXtpZigibnVtYmVyIiE9dHlwZW9mIFd8fFchPVcpdGhyb3cgbmV3IFR5cGVFcnJvcigic2l6ZSBtdXN0IGJlIGEgbnVtYmVyIik7aWYoVz5PfHxXPDApdGhyb3cgbmV3IFR5cGVFcnJvcigic2l6ZSBtdXN0IGJlIGEgdWludDMyIik7aWYoVytZPlh8fFc+UCl0aHJv''@;'; put 'put ''dyBuZXcgUmFuZ2VFcnJvcigiYnVmZmVyIHRvbyBzbWFsbCIpfWZ1bmN0aW9uIEsoVyxZLFgsZWUpe2lmKEkuYnJvd3Nlcil7dmFyIHJlPW5ldyBVaW50OEFycmF5KFcuYnVmZmVyLFksWCk7cmV0dXJuIEYuZ2V0UmFuZG9tVmFsdWVzKHJlKSxlZT92b2lkIEkubmV4dFRpY2soZnVuY3Rpb24o''@;'; put 'put ''KXtlZShudWxsLFcpfSk6V31pZighZWUpcmV0dXJuIEIoWCkuY29weShXLFkpLFc7QihYLGZ1bmN0aW9uKGxlLG1lKXtpZihsZSlyZXR1cm4gZWUobGUpO21lLmNvcHkoVyxZKSxlZShudWxsLFcpfSl9RiYmRi5nZXRSYW5kb21WYWx1ZXN8fCFJLmJyb3dzZXI/KHEucmFuZG9tRmlsbD1mdW5j''@;'; put 'put ''dGlvbiBMKFcsWSxYLGVlKXtpZighKHcuaXNCdWZmZXIoVyl8fFcgaW5zdGFuY2VvZiBfLmcuVWludDhBcnJheSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZiIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIFkpZWU9WSxZ''@;'; put 'put ''PTAsWD1XLmxlbmd0aDtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBYKWVlPVgsWD1XLmxlbmd0aC1ZO2Vsc2UgaWYoImZ1bmN0aW9uIiE9dHlwZW9mIGVlKXRocm93IG5ldyBUeXBlRXJyb3IoJyJjYiIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7cmV0dXJuIHooWSxXLmxlbmd0''@;'; put 'put ''aCksTihYLFksVy5sZW5ndGgpLEsoVyxZLFgsZWUpfSxxLnJhbmRvbUZpbGxTeW5jPWZ1bmN0aW9uIFUoVyxZLFgpe2lmKHR5cGVvZiBZPiJ1IiYmKFk9MCksISh3LmlzQnVmZmVyKFcpfHxXIGluc3RhbmNlb2YgXy5nLlVpbnQ4QXJyYXkpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWYiIGFy''@;'; put 'put ''Z3VtZW50IG11c3QgYmUgYSBCdWZmZXIgb3IgVWludDhBcnJheScpO3JldHVybiB6KFksVy5sZW5ndGgpLHZvaWQgMD09PVgmJihYPVcubGVuZ3RoLVkpLE4oWCxZLFcubGVuZ3RoKSxLKFcsWSxYKX0pOihxLnJhbmRvbUZpbGw9eSxxLnJhbmRvbUZpbGxTeW5jPXkpfSw0MjgxOnVlPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciBfPXt9O2Z1bmN0aW9uIEkoUCxGLE8pe098fChPPUVycm9yKTt2YXIgTj1mdW5jdGlvbihMKXtmdW5jdGlvbiBLKFUsVyxZKXtyZXR1cm4gTC5jYWxsKHRoaXMsZnVuY3Rpb24geihMLEssVSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBGP0Y6RihMLEssVSl9KFUsVyxZ''@;'; put 'put ''KSl8fHRoaXN9cmV0dXJuIGZ1bmN0aW9uIHEoUCxGKXtQLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEYucHJvdG90eXBlKSxQLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1QLFAuX19wcm90b19fPUZ9KEssTCksS30oTyk7Ti5wcm90b3R5cGUubmFtZT1PLm5hbWUsTi5wcm90b3R5cGUuY29kZT1Q''@;'; put 'put ''LF9bUF09Tn1mdW5jdGlvbiB5KFAsRil7aWYoQXJyYXkuaXNBcnJheShQKSl7dmFyIE89UC5sZW5ndGg7cmV0dXJuIFA9UC5tYXAoZnVuY3Rpb24oeil7cmV0dXJuIFN0cmluZyh6KX0pLE8+Mj8ib25lIG9mICIuY29uY2F0KEYsIiAiKS5jb25jYXQoUC5zbGljZSgwLE8tMSkuam9pbigiLCAi''@;'; put 'put ''KSwiLCBvciAiKStQW08tMV06Mj09PU8/Im9uZSBvZiAiLmNvbmNhdChGLCIgIikuY29uY2F0KFBbMF0sIiBvciAiKS5jb25jYXQoUFsxXSk6Im9mICIuY29uY2F0KEYsIiAiKS5jb25jYXQoUFswXSl9cmV0dXJuIm9mICIuY29uY2F0KEYsIiAiKS5jb25jYXQoU3RyaW5nKFApKX1JKCJFUlJf''@;'; put 'put ''SU5WQUxJRF9PUFRfVkFMVUUiLGZ1bmN0aW9uKFAsRil7cmV0dXJuJ1RoZSB2YWx1ZSAiJytGKyciIGlzIGludmFsaWQgZm9yIG9wdGlvbiAiJytQKyciJ30sVHlwZUVycm9yKSxJKCJFUlJfSU5WQUxJRF9BUkdfVFlQRSIsZnVuY3Rpb24oUCxGLE8pe3ZhciB6LE47aWYoInN0cmluZyI9PXR5''@;'; put 'put ''cGVvZiBGJiZmdW5jdGlvbiBnKFAsRixPKXtyZXR1cm4gUC5zdWJzdHIoIU98fE88MD8wOitPLEYubGVuZ3RoKT09PUZ9KEYsIm5vdCAiKT8oej0ibXVzdCBub3QgYmUiLEY9Ri5yZXBsYWNlKC9ebm90IC8sIiIpKTp6PSJtdXN0IGJlIixmdW5jdGlvbiBCKFAsRixPKXtyZXR1cm4odm9pZCAw''@;'; put 'put ''PT09T3x8Tz5QLmxlbmd0aCkmJihPPVAubGVuZ3RoKSxQLnN1YnN0cmluZyhPLUYubGVuZ3RoLE8pPT09Rn0oUCwiIGFyZ3VtZW50IikpTj0iVGhlICIuY29uY2F0KFAsIiAiKS5jb25jYXQoeiwiICIpLmNvbmNhdCh5KEYsInR5cGUiKSk7ZWxzZXt2YXIgTD1mdW5jdGlvbiB3KFAsRixPKXty''@;'; put 'put ''ZXR1cm4ibnVtYmVyIiE9dHlwZW9mIE8mJihPPTApLCEoTytGLmxlbmd0aD5QLmxlbmd0aCkmJi0xIT09UC5pbmRleE9mKEYsTyl9KFAsIi4iKT8icHJvcGVydHkiOiJhcmd1bWVudCI7Tj0nVGhlICInLmNvbmNhdChQLCciICcpLmNvbmNhdChMLCIgIikuY29uY2F0KHosIiAiKS5jb25jYXQo''@;'; put 'put ''eShGLCJ0eXBlIikpfXJldHVybiBOKyIuIFJlY2VpdmVkIHR5cGUgIi5jb25jYXQodHlwZW9mIE8pfSxUeXBlRXJyb3IpLEkoIkVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YiLCJzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRiIpLEkoIkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVEIixmdW5jdGlv''@;'; put 'put ''bihQKXtyZXR1cm4iVGhlICIrUCsiIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQifSksSSgiRVJSX1NUUkVBTV9QUkVNQVRVUkVfQ0xPU0UiLCJQcmVtYXR1cmUgY2xvc2UiKSxJKCJFUlJfU1RSRUFNX0RFU1RST1lFRCIsZnVuY3Rpb24oUCl7cmV0dXJuIkNhbm5vdCBjYWxsICIrUCsiIGFm''@;'; put 'put ''dGVyIGEgc3RyZWFtIHdhcyBkZXN0cm95ZWQifSksSSgiRVJSX01VTFRJUExFX0NBTExCQUNLIiwiQ2FsbGJhY2sgY2FsbGVkIG11bHRpcGxlIHRpbWVzIiksSSgiRVJSX1NUUkVBTV9DQU5OT1RfUElQRSIsIkNhbm5vdCBwaXBlLCBub3QgcmVhZGFibGUiKSxJKCJFUlJfU1RSRUFNX1dSSVRF''@;'; put 'put ''X0FGVEVSX0VORCIsIndyaXRlIGFmdGVyIGVuZCIpLEkoIkVSUl9TVFJFQU1fTlVMTF9WQUxVRVMiLCJNYXkgbm90IHdyaXRlIG51bGwgdmFsdWVzIHRvIHN0cmVhbSIsVHlwZUVycm9yKSxJKCJFUlJfVU5LTk9XTl9FTkNPRElORyIsZnVuY3Rpb24oUCl7cmV0dXJuIlVua25vd24gZW5jb2Rp''@;'; put 'put ''bmc6ICIrUH0sVHlwZUVycm9yKSxJKCJFUlJfU1RSRUFNX1VOU0hJRlRfQUZURVJfRU5EX0VWRU5UIiwic3RyZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnQiKSx1ZS5leHBvcnRzLnE9X30sNjc1MzoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDQxNTUpLHk9T2JqZWN0Lmtl''@;'; put 'put ''eXN8fGZ1bmN0aW9uKEwpe3ZhciBLPVtdO2Zvcih2YXIgVSBpbiBMKUsucHVzaChVKTtyZXR1cm4gS307dWUuZXhwb3J0cz1PO3ZhciBnPV8oOTQ4MSksQj1fKDQyMjkpO18oNTcxNykoTyxnKTtmb3IodmFyIHc9eShCLnByb3RvdHlwZSksUD0wO1A8dy5sZW5ndGg7UCsrKXt2YXIgRj13W1Bd''@;'; put 'put ''O08ucHJvdG90eXBlW0ZdfHwoTy5wcm90b3R5cGVbRl09Qi5wcm90b3R5cGVbRl0pfWZ1bmN0aW9uIE8oTCl7aWYoISh0aGlzIGluc3RhbmNlb2YgTykpcmV0dXJuIG5ldyBPKEwpO2cuY2FsbCh0aGlzLEwpLEIuY2FsbCh0aGlzLEwpLHRoaXMuYWxsb3dIYWxmT3Blbj0hMCxMJiYoITE9PT1M''@;'; put 'put ''LnJlYWRhYmxlJiYodGhpcy5yZWFkYWJsZT0hMSksITE9PT1MLndyaXRhYmxlJiYodGhpcy53cml0YWJsZT0hMSksITE9PT1MLmFsbG93SGFsZk9wZW4mJih0aGlzLmFsbG93SGFsZk9wZW49ITEsdGhpcy5vbmNlKCJlbmQiLHopKSl9ZnVuY3Rpb24geigpe3RoaXMuX3dyaXRhYmxlU3RhdGUu''@;'; put 'put ''ZW5kZWR8fEkubmV4dFRpY2soTix0aGlzKX1mdW5jdGlvbiBOKEwpe0wuZW5kKCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KE8ucHJvdG90eXBlLCJ3cml0YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhp''@;'; put 'put ''Z2hXYXRlck1hcmt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE8ucHJvdG90eXBlLCJ3cml0YWJsZUJ1ZmZlciIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyKCl9fSksT2JqZWN0''@;'; put 'put ''LmRlZmluZVByb3BlcnR5KE8ucHJvdG90eXBlLCJ3cml0YWJsZUxlbmd0aCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUubGVuZ3RofX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLnByb3RvdHlwZSwiZGVzdHJveWVkIix7ZW51bWVy''@;'; put 'put ''YWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdm9pZCAwIT09dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24o''@;'; put 'put ''Syl7dm9pZCAwPT09dGhpcy5fcmVhZGFibGVTdGF0ZXx8dm9pZCAwPT09dGhpcy5fd3JpdGFibGVTdGF0ZXx8KHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPUssdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9Syl9fSl9LDI3MjU6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dWUu''@;'; put 'put ''ZXhwb3J0cz15O3ZhciBJPV8oNDYwNSk7ZnVuY3Rpb24geShnKXtpZighKHRoaXMgaW5zdGFuY2VvZiB5KSlyZXR1cm4gbmV3IHkoZyk7SS5jYWxsKHRoaXMsZyl9Xyg1NzE3KSh5LEkpLHkucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oZyxCLHcpe3cobnVsbCxnKX19LDk0ODE6KHVl''@;'; put 'put ''LHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIHksST1fKDQxNTUpO3VlLmV4cG9ydHM9cCxwLlJlYWRhYmxlU3RhdGU9VixfKDcxODcpO3ZhciBMLEI9ZnVuY3Rpb24oUmUsSWUpe3JldHVybiBSZS5saXN0ZW5lcnMoSWUpLmxlbmd0aH0sdz1fKDI1MDMpLFA9Xyg4NzY0KS5CdWZmZXIsRj0odHlw''@;'; put 'put ''ZW9mIF8uZzwidSI/Xy5nOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9LE49Xyg0NjE2KTtMPU4mJk4uZGVidWdsb2c/Ti5kZWJ1Z2xvZygic3RyZWFtIik6ZnVuY3Rpb24oKXt9O3ZhciBsZSxtZSxfZSxL''@;'; put 'put ''PV8oNzMyNyksVT1fKDExOTUpLFk9XygyNDU3KS5nZXRIaWdoV2F0ZXJNYXJrLFg9Xyg0MjgxKS5xLGVlPVguRVJSX0lOVkFMSURfQVJHX1RZUEUsSj1YLkVSUl9TVFJFQU1fUFVTSF9BRlRFUl9FT0YscmU9WC5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxpZT1YLkVSUl9TVFJFQU1fVU5T''@;'; put 'put ''SElGVF9BRlRFUl9FTkRfRVZFTlQ7Xyg1NzE3KShwLHcpO3ZhciBUZT1VLmVycm9yT3JEZXN0cm95LFNlPVsiZXJyb3IiLCJjbG9zZSIsImRlc3Ryb3kiLCJwYXVzZSIsInJlc3VtZSJdO2Z1bmN0aW9uIFYoRmUsUmUsSWUpe3k9eXx8Xyg2NzUzKSwiYm9vbGVhbiIhPXR5cGVvZiBJZSYmKEll''@;'; put 'put ''PVJlIGluc3RhbmNlb2YgeSksdGhpcy5vYmplY3RNb2RlPSEhKEZlPUZlfHx7fSkub2JqZWN0TW9kZSxJZSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhRmUucmVhZGFibGVPYmplY3RNb2RlKSx0aGlzLmhpZ2hXYXRlck1hcms9WSh0aGlzLEZlLCJyZWFkYWJsZUhpZ2hX''@;'; put 'put ''YXRlck1hcmsiLEllKSx0aGlzLmJ1ZmZlcj1uZXcgSyx0aGlzLmxlbmd0aD0wLHRoaXMucGlwZXM9bnVsbCx0aGlzLnBpcGVzQ291bnQ9MCx0aGlzLmZsb3dpbmc9bnVsbCx0aGlzLmVuZGVkPSExLHRoaXMuZW5kRW1pdHRlZD0hMSx0aGlzLnJlYWRpbmc9ITEsdGhpcy5zeW5jPSEwLHRoaXMu''@;'; put 'put ''bmVlZFJlYWRhYmxlPSExLHRoaXMuZW1pdHRlZFJlYWRhYmxlPSExLHRoaXMucmVhZGFibGVMaXN0ZW5pbmc9ITEsdGhpcy5yZXN1bWVTY2hlZHVsZWQ9ITEsdGhpcy5wYXVzZWQ9ITAsdGhpcy5lbWl0Q2xvc2U9ITEhPT1GZS5lbWl0Q2xvc2UsdGhpcy5hdXRvRGVzdHJveT0hIUZlLmF1dG9E''@;'; put 'put ''ZXN0cm95LHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVmYXVsdEVuY29kaW5nPUZlLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMuYXdhaXREcmFpbj0wLHRoaXMucmVhZGluZ01vcmU9ITEsdGhpcy5kZWNvZGVyPW51bGwsdGhpcy5lbmNvZGluZz1udWxsLEZlLmVuY29kaW5nJiYobGV8''@;'; put 'put ''fChsZT1fKDI1NTMpLnMpLHRoaXMuZGVjb2Rlcj1uZXcgbGUoRmUuZW5jb2RpbmcpLHRoaXMuZW5jb2Rpbmc9RmUuZW5jb2RpbmcpfWZ1bmN0aW9uIHAoRmUpe2lmKHk9eXx8Xyg2NzUzKSwhKHRoaXMgaW5zdGFuY2VvZiBwKSlyZXR1cm4gbmV3IHAoRmUpO3RoaXMuX3JlYWRhYmxlU3RhdGU9''@;'; put 'put ''bmV3IFYoRmUsdGhpcyx0aGlzIGluc3RhbmNlb2YgeSksdGhpcy5yZWFkYWJsZT0hMCxGZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBGZS5yZWFkJiYodGhpcy5fcmVhZD1GZS5yZWFkKSwiZnVuY3Rpb24iPT10eXBlb2YgRmUuZGVzdHJveSYmKHRoaXMuX2Rlc3Ryb3k9RmUuZGVzdHJveSkpLHcu''@;'; put 'put ''Y2FsbCh0aGlzKX1mdW5jdGlvbiBiKEZlLFJlLEllLFZlLGtlKXtMKCJyZWFkYWJsZUFkZENodW5rIixSZSk7dmFyIF90LEFlPUZlLl9yZWFkYWJsZVN0YXRlO2lmKG51bGw9PT1SZSlBZS5yZWFkaW5nPSExLGZ1bmN0aW9uIEUoRmUsUmUpe2lmKEwoIm9uRW9mQ2h1bmsiKSwhUmUuZW5kZWQp''@;'; put 'put ''e2lmKFJlLmRlY29kZXIpe3ZhciBJZT1SZS5kZWNvZGVyLmVuZCgpO0llJiZJZS5sZW5ndGgmJihSZS5idWZmZXIucHVzaChJZSksUmUubGVuZ3RoKz1SZS5vYmplY3RNb2RlPzE6SWUubGVuZ3RoKX1SZS5lbmRlZD0hMCxSZS5zeW5jP20oRmUpOihSZS5uZWVkUmVhZGFibGU9ITEsUmUuZW1p''@;'; put 'put ''dHRlZFJlYWRhYmxlfHwoUmUuZW1pdHRlZFJlYWRhYmxlPSEwLEEoRmUpKSl9fShGZSxBZSk7ZWxzZSBpZihrZXx8KF90PWZ1bmN0aW9uIEMoRmUsUmUpe3ZhciBJZTtyZXR1cm4hZnVuY3Rpb24geihGZSl7cmV0dXJuIFAuaXNCdWZmZXIoRmUpfHxGZSBpbnN0YW5jZW9mIEZ9KFJlKSYmInN0''@;'; put 'put ''cmluZyIhPXR5cGVvZiBSZSYmdm9pZCAwIT09UmUmJiFGZS5vYmplY3RNb2RlJiYoSWU9bmV3IGVlKCJjaHVuayIsWyJzdHJpbmciLCJCdWZmZXIiLCJVaW50OEFycmF5Il0sUmUpKSxJZX0oQWUsUmUpKSxfdClUZShGZSxfdCk7ZWxzZSBpZihBZS5vYmplY3RNb2RlfHxSZSYmUmUubGVuZ3Ro''@;'; put 'put ''PjApaWYoInN0cmluZyIhPXR5cGVvZiBSZSYmIUFlLm9iamVjdE1vZGUmJk9iamVjdC5nZXRQcm90b3R5cGVPZihSZSkhPT1QLnByb3RvdHlwZSYmKFJlPWZ1bmN0aW9uIE8oRmUpe3JldHVybiBQLmZyb20oRmUpfShSZSkpLFZlKUFlLmVuZEVtaXR0ZWQ/VGUoRmUsbmV3IGllKTp4KEZlLEFl''@;'; put 'put ''LFJlLCEwKTtlbHNlIGlmKEFlLmVuZGVkKVRlKEZlLG5ldyBKKTtlbHNle2lmKEFlLmRlc3Ryb3llZClyZXR1cm4hMTtBZS5yZWFkaW5nPSExLEFlLmRlY29kZXImJiFJZT8oUmU9QWUuZGVjb2Rlci53cml0ZShSZSksQWUub2JqZWN0TW9kZXx8MCE9PVJlLmxlbmd0aD94KEZlLEFlLFJlLCEx''@;'; put 'put ''KTpvZShGZSxBZSkpOngoRmUsQWUsUmUsITEpfWVsc2UgVmV8fChBZS5yZWFkaW5nPSExLG9lKEZlLEFlKSk7cmV0dXJuIUFlLmVuZGVkJiYoQWUubGVuZ3RoPEFlLmhpZ2hXYXRlck1hcmt8fDA9PT1BZS5sZW5ndGgpfWZ1bmN0aW9uIHgoRmUsUmUsSWUsVmUpe1JlLmZsb3dpbmcmJjA9PT1S''@;'; put 'put ''ZS5sZW5ndGgmJiFSZS5zeW5jPyhSZS5hd2FpdERyYWluPTAsRmUuZW1pdCgiZGF0YSIsSWUpKTooUmUubGVuZ3RoKz1SZS5vYmplY3RNb2RlPzE6SWUubGVuZ3RoLFZlP1JlLmJ1ZmZlci51bnNoaWZ0KEllKTpSZS5idWZmZXIucHVzaChJZSksUmUubmVlZFJlYWRhYmxlJiZtKEZlKSksb2Uo''@;'; put 'put ''RmUsUmUpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLnByb3RvdHlwZSwiZGVzdHJveWVkIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihS''@;'; put 'put ''ZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPVJlKX19KSxwLnByb3RvdHlwZS5kZXN0cm95PVUuZGVzdHJveSxwLnByb3RvdHlwZS5fdW5kZXN0cm95PVUudW5kZXN0cm95LHAucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKEZlLFJlKXtS''@;'; put 'put ''ZShGZSl9LHAucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oRmUsUmUpe3ZhciBWZSxJZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBJZS5vYmplY3RNb2RlP1ZlPSEwOiJzdHJpbmciPT10eXBlb2YgRmUmJigoUmU9UmV8fEllLmRlZmF1bHRFbmNvZGluZykhPT1JZS5lbmNvZGluZyYmKEZl''@;'; put 'put ''PVAuZnJvbShGZSxSZSksUmU9IiIpLFZlPSEwKSxiKHRoaXMsRmUsUmUsITEsVmUpfSxwLnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKEZlKXtyZXR1cm4gYih0aGlzLEZlLG51bGwsITAsITEpfSxwLnByb3RvdHlwZS5pc1BhdXNlZD1mdW5jdGlvbigpe3JldHVybiExPT09dGhpcy5fcmVh''@;'; put 'put ''ZGFibGVTdGF0ZS5mbG93aW5nfSxwLnByb3RvdHlwZS5zZXRFbmNvZGluZz1mdW5jdGlvbihGZSl7bGV8fChsZT1fKDI1NTMpLnMpO3ZhciBSZT1uZXcgbGUoRmUpO3RoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlcj1SZSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nPXRoaXMuX3JlYWRh''@;'; put 'put ''YmxlU3RhdGUuZGVjb2Rlci5lbmNvZGluZztmb3IodmFyIEllPXRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLmhlYWQsVmU9IiI7bnVsbCE9PUllOylWZSs9UmUud3JpdGUoSWUuZGF0YSksSWU9SWUubmV4dDtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuY2xlYXIoKSwiIiE9''@;'; put 'put ''PVZlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5wdXNoKFZlKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmxlbmd0aD1WZS5sZW5ndGgsdGhpc307dmFyIFQ9MTA3Mzc0MTgyNDtmdW5jdGlvbiBqKEZlLFJlKXtyZXR1cm4gRmU8PTB8fDA9PT1SZS5sZW5ndGgmJlJlLmVuZGVkPzA6UmUub2Jq''@;'; put 'put ''ZWN0TW9kZT8xOkZlIT1GZT9SZS5mbG93aW5nJiZSZS5sZW5ndGg/UmUuYnVmZmVyLmhlYWQuZGF0YS5sZW5ndGg6UmUubGVuZ3RoOihGZT5SZS5oaWdoV2F0ZXJNYXJrJiYoUmUuaGlnaFdhdGVyTWFyaz1mdW5jdGlvbiBIKEZlKXtyZXR1cm4gRmU+PVQ/RmU9VDooRmUtLSxGZXw9RmU+Pj4x''@;'; put 'put ''LEZlfD1GZT4+PjIsRmV8PUZlPj4+NCxGZXw9RmU+Pj44LEZlfD1GZT4+PjE2LEZlKyspLEZlfShGZSkpLEZlPD1SZS5sZW5ndGg/RmU6UmUuZW5kZWQ/UmUubGVuZ3RoOihSZS5uZWVkUmVhZGFibGU9ITAsMCkpfWZ1bmN0aW9uIG0oRmUpe3ZhciBSZT1GZS5fcmVhZGFibGVTdGF0ZTtMKCJl''@;'; put 'put ''bWl0UmVhZGFibGUiLFJlLm5lZWRSZWFkYWJsZSxSZS5lbWl0dGVkUmVhZGFibGUpLFJlLm5lZWRSZWFkYWJsZT0hMSxSZS5lbWl0dGVkUmVhZGFibGV8fChMKCJlbWl0UmVhZGFibGUiLFJlLmZsb3dpbmcpLFJlLmVtaXR0ZWRSZWFkYWJsZT0hMCxJLm5leHRUaWNrKEEsRmUpKX1mdW5jdGlv''@;'; put 'put ''biBBKEZlKXt2YXIgUmU9RmUuX3JlYWRhYmxlU3RhdGU7TCgiZW1pdFJlYWRhYmxlXyIsUmUuZGVzdHJveWVkLFJlLmxlbmd0aCxSZS5lbmRlZCksIVJlLmRlc3Ryb3llZCYmKFJlLmxlbmd0aHx8UmUuZW5kZWQpJiYoRmUuZW1pdCgicmVhZGFibGUiKSxSZS5lbWl0dGVkUmVhZGFibGU9ITEp''@;'; put 'put ''LFJlLm5lZWRSZWFkYWJsZT0hUmUuZmxvd2luZyYmIVJlLmVuZGVkJiZSZS5sZW5ndGg8PVJlLmhpZ2hXYXRlck1hcmssTWUoRmUpfWZ1bmN0aW9uIG9lKEZlLFJlKXtSZS5yZWFkaW5nTW9yZXx8KFJlLnJlYWRpbmdNb3JlPSEwLEkubmV4dFRpY2sodGUsRmUsUmUpKX1mdW5jdGlvbiB0ZShG''@;'; put 'put ''ZSxSZSl7Zm9yKDshUmUucmVhZGluZyYmIVJlLmVuZGVkJiYoUmUubGVuZ3RoPFJlLmhpZ2hXYXRlck1hcmt8fFJlLmZsb3dpbmcmJjA9PT1SZS5sZW5ndGgpOyl7dmFyIEllPVJlLmxlbmd0aDtpZihMKCJtYXliZVJlYWRNb3JlIHJlYWQgMCIpLEZlLnJlYWQoMCksSWU9PT1SZS5sZW5ndGgp''@;'; put 'put ''YnJlYWt9UmUucmVhZGluZ01vcmU9ITF9ZnVuY3Rpb24gd2UoRmUpe3ZhciBSZT1GZS5fcmVhZGFibGVTdGF0ZTtSZS5yZWFkYWJsZUxpc3RlbmluZz1GZS5saXN0ZW5lckNvdW50KCJyZWFkYWJsZSIpPjAsUmUucmVzdW1lU2NoZWR1bGVkJiYhUmUucGF1c2VkP1JlLmZsb3dpbmc9ITA6RmUu''@;'; put 'put ''bGlzdGVuZXJDb3VudCgiZGF0YSIpPjAmJkZlLnJlc3VtZSgpfWZ1bmN0aW9uIFVlKEZlKXtMKCJyZWFkYWJsZSBuZXh0dGljayByZWFkIDAiKSxGZS5yZWFkKDApfWZ1bmN0aW9uIGF0KEZlLFJlKXtMKCJyZXN1bWUiLFJlLnJlYWRpbmcpLFJlLnJlYWRpbmd8fEZlLnJlYWQoMCksUmUucmVz''@;'; put 'put ''dW1lU2NoZWR1bGVkPSExLEZlLmVtaXQoInJlc3VtZSIpLE1lKEZlKSxSZS5mbG93aW5nJiYhUmUucmVhZGluZyYmRmUucmVhZCgwKX1mdW5jdGlvbiBNZShGZSl7dmFyIFJlPUZlLl9yZWFkYWJsZVN0YXRlO2ZvcihMKCJmbG93IixSZS5mbG93aW5nKTtSZS5mbG93aW5nJiZudWxsIT09RmUu''@;'; put 'put ''cmVhZCgpOyk7fWZ1bmN0aW9uIHZlKEZlLFJlKXtyZXR1cm4gMD09PVJlLmxlbmd0aD9udWxsOihSZS5vYmplY3RNb2RlP0llPVJlLmJ1ZmZlci5zaGlmdCgpOiFGZXx8RmU+PVJlLmxlbmd0aD8oSWU9UmUuZGVjb2Rlcj9SZS5idWZmZXIuam9pbigiIik6MT09PVJlLmJ1ZmZlci5sZW5ndGg/''@;'; put 'put ''UmUuYnVmZmVyLmZpcnN0KCk6UmUuYnVmZmVyLmNvbmNhdChSZS5sZW5ndGgpLFJlLmJ1ZmZlci5jbGVhcigpKTpJZT1SZS5idWZmZXIuY29uc3VtZShGZSxSZS5kZWNvZGVyKSxJZSk7dmFyIEllfWZ1bmN0aW9uIFhlKEZlKXt2YXIgUmU9RmUuX3JlYWRhYmxlU3RhdGU7TCgiZW5kUmVhZGFi''@;'; put 'put ''bGUiLFJlLmVuZEVtaXR0ZWQpLFJlLmVuZEVtaXR0ZWR8fChSZS5lbmRlZD0hMCxJLm5leHRUaWNrKGplLFJlLEZlKSl9ZnVuY3Rpb24gamUoRmUsUmUpe2lmKEwoImVuZFJlYWRhYmxlTlQiLEZlLmVuZEVtaXR0ZWQsRmUubGVuZ3RoKSwhRmUuZW5kRW1pdHRlZCYmMD09PUZlLmxlbmd0aCYm''@;'; put 'put ''KEZlLmVuZEVtaXR0ZWQ9ITAsUmUucmVhZGFibGU9ITEsUmUuZW1pdCgiZW5kIiksRmUuYXV0b0Rlc3Ryb3kpKXt2YXIgSWU9UmUuX3dyaXRhYmxlU3RhdGU7KCFJZXx8SWUuYXV0b0Rlc3Ryb3kmJkllLmZpbmlzaGVkKSYmUmUuZGVzdHJveSgpfX1mdW5jdGlvbiBEZShGZSxSZSl7Zm9yKHZh''@;'; put 'put ''ciBJZT0wLFZlPUZlLmxlbmd0aDtJZTxWZTtJZSsrKWlmKEZlW0llXT09PVJlKXJldHVybiBJZTtyZXR1cm4tMX1wLnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKEZlKXtMKCJyZWFkIixGZSksRmU9cGFyc2VJbnQoRmUsMTApO3ZhciBSZT10aGlzLl9yZWFkYWJsZVN0YXRlLEllPUZlO2lmKDAh''@;'; put 'put ''PT1GZSYmKFJlLmVtaXR0ZWRSZWFkYWJsZT0hMSksMD09PUZlJiZSZS5uZWVkUmVhZGFibGUmJigoMCE9PVJlLmhpZ2hXYXRlck1hcms/UmUubGVuZ3RoPj1SZS5oaWdoV2F0ZXJNYXJrOlJlLmxlbmd0aD4wKXx8UmUuZW5kZWQpKXJldHVybiBMKCJyZWFkOiBlbWl0UmVhZGFibGUiLFJlLmxl''@;'; put 'put ''bmd0aCxSZS5lbmRlZCksMD09PVJlLmxlbmd0aCYmUmUuZW5kZWQ/WGUodGhpcyk6bSh0aGlzKSxudWxsO2lmKDA9PT0oRmU9aihGZSxSZSkpJiZSZS5lbmRlZClyZXR1cm4gMD09PVJlLmxlbmd0aCYmWGUodGhpcyksbnVsbDt2YXIga2UsVmU9UmUubmVlZFJlYWRhYmxlO3JldHVybiBMKCJu''@;'; put 'put ''ZWVkIHJlYWRhYmxlIixWZSksKDA9PT1SZS5sZW5ndGh8fFJlLmxlbmd0aC1GZTxSZS5oaWdoV2F0ZXJNYXJrKSYmTCgibGVuZ3RoIGxlc3MgdGhhbiB3YXRlcm1hcmsiLFZlPSEwKSxSZS5lbmRlZHx8UmUucmVhZGluZz9MKCJyZWFkaW5nIG9yIGVuZGVkIixWZT0hMSk6VmUmJihMKCJkbyBy''@;'; put 'put ''ZWFkIiksUmUucmVhZGluZz0hMCxSZS5zeW5jPSEwLDA9PT1SZS5sZW5ndGgmJihSZS5uZWVkUmVhZGFibGU9ITApLHRoaXMuX3JlYWQoUmUuaGlnaFdhdGVyTWFyayksUmUuc3luYz0hMSxSZS5yZWFkaW5nfHwoRmU9aihJZSxSZSkpKSxudWxsPT09KGtlPUZlPjA/dmUoRmUsUmUpOm51bGwp''@;'; put 'put ''PyhSZS5uZWVkUmVhZGFibGU9UmUubGVuZ3RoPD1SZS5oaWdoV2F0ZXJNYXJrLEZlPTApOihSZS5sZW5ndGgtPUZlLFJlLmF3YWl0RHJhaW49MCksMD09PVJlLmxlbmd0aCYmKFJlLmVuZGVkfHwoUmUubmVlZFJlYWRhYmxlPSEwKSxJZSE9PUZlJiZSZS5lbmRlZCYmWGUodGhpcykpLG51bGwh''@;'; put 'put ''PT1rZSYmdGhpcy5lbWl0KCJkYXRhIixrZSksa2V9LHAucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKEZlKXtUZSh0aGlzLG5ldyByZSgiX3JlYWQoKSIpKX0scC5wcm90b3R5cGUucGlwZT1mdW5jdGlvbihGZSxSZSl7dmFyIEllPXRoaXMsVmU9dGhpcy5fcmVhZGFibGVTdGF0ZTtzd2l0Y2go''@;'; put 'put ''VmUucGlwZXNDb3VudCl7Y2FzZSAwOlZlLnBpcGVzPUZlO2JyZWFrO2Nhc2UgMTpWZS5waXBlcz1bVmUucGlwZXMsRmVdO2JyZWFrO2RlZmF1bHQ6VmUucGlwZXMucHVzaChGZSl9VmUucGlwZXNDb3VudCs9MSxMKCJwaXBlIGNvdW50PSVkIG9wdHM9JWoiLFZlLnBpcGVzQ291bnQsUmUpO3Zh''@;'; put 'put ''ciBBZT1SZSYmITE9PT1SZS5lbmR8fEZlPT09SS5zdGRvdXR8fEZlPT09SS5zdGRlcnI/dHQ6cnQ7ZnVuY3Rpb24gcnQoKXtMKCJvbmVuZCIpLEZlLmVuZCgpfVZlLmVuZEVtaXR0ZWQ/SS5uZXh0VGljayhBZSk6SWUub25jZSgiZW5kIixBZSksRmUub24oInVucGlwZSIsZnVuY3Rpb24gX3Qo''@;'; put 'put ''SGUsZHQpe0woIm9udW5waXBlIiksSGU9PT1JZSYmZHQmJiExPT09ZHQuaGFzVW5waXBlZCYmKGR0Lmhhc1VucGlwZWQ9ITAsZnVuY3Rpb24geXQoKXtMKCJjbGVhbnVwIiksRmUucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixpdCksRmUucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsJGUpLEZlLnJl''@;'; put 'put ''bW92ZUxpc3RlbmVyKCJkcmFpbiIsUWUpLEZlLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsRHQpLEZlLnJlbW92ZUxpc3RlbmVyKCJ1bnBpcGUiLF90KSxJZS5yZW1vdmVMaXN0ZW5lcigiZW5kIixydCksSWUucmVtb3ZlTGlzdGVuZXIoImVuZCIsdHQpLEllLnJlbW92ZUxpc3RlbmVyKCJkYXRh''@;'; put 'put ''IixNdCksZG49ITAsVmUuYXdhaXREcmFpbiYmKCFGZS5fd3JpdGFibGVTdGF0ZXx8RmUuX3dyaXRhYmxlU3RhdGUubmVlZERyYWluKSYmUWUoKX0oKSl9KTt2YXIgUWU9ZnVuY3Rpb24gc2UoRmUpe3JldHVybiBmdW5jdGlvbigpe3ZhciBJZT1GZS5fcmVhZGFibGVTdGF0ZTtMKCJwaXBlT25E''@;'; put 'put ''cmFpbiIsSWUuYXdhaXREcmFpbiksSWUuYXdhaXREcmFpbiYmSWUuYXdhaXREcmFpbi0tLDA9PT1JZS5hd2FpdERyYWluJiZCKEZlLCJkYXRhIikmJihJZS5mbG93aW5nPSEwLE1lKEZlKSl9fShJZSk7RmUub24oImRyYWluIixRZSk7dmFyIGRuPSExO2Z1bmN0aW9uIE10KEhlKXtMKCJvbmRh''@;'; put 'put ''dGEiKTt2YXIgZHQ9RmUud3JpdGUoSGUpO0woImRlc3Qud3JpdGUiLGR0KSwhMT09PWR0JiYoKDE9PT1WZS5waXBlc0NvdW50JiZWZS5waXBlcz09PUZlfHxWZS5waXBlc0NvdW50PjEmJi0xIT09RGUoVmUucGlwZXMsRmUpKSYmIWRuJiYoTCgiZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNl''@;'; put 'put ''IixWZS5hd2FpdERyYWluKSxWZS5hd2FpdERyYWluKyspLEllLnBhdXNlKCkpfWZ1bmN0aW9uIER0KEhlKXtMKCJvbmVycm9yIixIZSksdHQoKSxGZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLER0KSwwPT09QihGZSwiZXJyb3IiKSYmVGUoRmUsSGUpfWZ1bmN0aW9uIGl0KCl7RmUucmVtb3Zl''@;'; put 'put ''TGlzdGVuZXIoImZpbmlzaCIsJGUpLHR0KCl9ZnVuY3Rpb24gJGUoKXtMKCJvbmZpbmlzaCIpLEZlLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsaXQpLHR0KCl9ZnVuY3Rpb24gdHQoKXtMKCJ1bnBpcGUiKSxJZS51bnBpcGUoRmUpfXJldHVybiBJZS5vbigiZGF0YSIsTXQpLGZ1bmN0aW9uIHpl''@;'; put 'put ''KEZlLFJlLEllKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgRmUucHJlcGVuZExpc3RlbmVyKXJldHVybiBGZS5wcmVwZW5kTGlzdGVuZXIoUmUsSWUpO0ZlLl9ldmVudHMmJkZlLl9ldmVudHNbUmVdP0FycmF5LmlzQXJyYXkoRmUuX2V2ZW50c1tSZV0pP0ZlLl9ldmVudHNbUmVdLnVuc2hpZnQo''@;'; put 'put ''SWUpOkZlLl9ldmVudHNbUmVdPVtJZSxGZS5fZXZlbnRzW1JlXV06RmUub24oUmUsSWUpfShGZSwiZXJyb3IiLER0KSxGZS5vbmNlKCJjbG9zZSIsaXQpLEZlLm9uY2UoImZpbmlzaCIsJGUpLEZlLmVtaXQoInBpcGUiLEllKSxWZS5mbG93aW5nfHwoTCgicGlwZSByZXN1bWUiKSxJZS5yZXN1''@;'; put 'put ''bWUoKSksRmV9LHAucHJvdG90eXBlLnVucGlwZT1mdW5jdGlvbihGZSl7dmFyIFJlPXRoaXMuX3JlYWRhYmxlU3RhdGUsSWU9e2hhc1VucGlwZWQ6ITF9O2lmKDA9PT1SZS5waXBlc0NvdW50KXJldHVybiB0aGlzO2lmKDE9PT1SZS5waXBlc0NvdW50KXJldHVybiBGZSYmRmUhPT1SZS5waXBl''@;'; put 'put ''c3x8KEZlfHwoRmU9UmUucGlwZXMpLFJlLnBpcGVzPW51bGwsUmUucGlwZXNDb3VudD0wLFJlLmZsb3dpbmc9ITEsRmUmJkZlLmVtaXQoInVucGlwZSIsdGhpcyxJZSkpLHRoaXM7aWYoIUZlKXt2YXIgVmU9UmUucGlwZXMsa2U9UmUucGlwZXNDb3VudDtSZS5waXBlcz1udWxsLFJlLnBpcGVz''@;'; put 'put ''Q291bnQ9MCxSZS5mbG93aW5nPSExO2Zvcih2YXIgQWU9MDtBZTxrZTtBZSsrKVZlW0FlXS5lbWl0KCJ1bnBpcGUiLHRoaXMse2hhc1VucGlwZWQ6ITF9KTtyZXR1cm4gdGhpc312YXIgX3Q9RGUoUmUucGlwZXMsRmUpO3JldHVybi0xPT09X3R8fChSZS5waXBlcy5zcGxpY2UoX3QsMSksUmUu''@;'; put 'put ''cGlwZXNDb3VudC09MSwxPT09UmUucGlwZXNDb3VudCYmKFJlLnBpcGVzPVJlLnBpcGVzWzBdKSxGZS5lbWl0KCJ1bnBpcGUiLHRoaXMsSWUpKSx0aGlzfSxwLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1wLnByb3RvdHlwZS5vbj1mdW5jdGlvbihGZSxSZSl7dmFyIEllPXcucHJvdG90eXBlLm9u''@;'; put 'put ''LmNhbGwodGhpcyxGZSxSZSksVmU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4iZGF0YSI9PT1GZT8oVmUucmVhZGFibGVMaXN0ZW5pbmc9dGhpcy5saXN0ZW5lckNvdW50KCJyZWFkYWJsZSIpPjAsITEhPT1WZS5mbG93aW5nJiZ0aGlzLnJlc3VtZSgpKToicmVhZGFibGUiPT09RmUmJiFW''@;'; put 'put ''ZS5lbmRFbWl0dGVkJiYhVmUucmVhZGFibGVMaXN0ZW5pbmcmJihWZS5yZWFkYWJsZUxpc3RlbmluZz1WZS5uZWVkUmVhZGFibGU9ITAsVmUuZmxvd2luZz0hMSxWZS5lbWl0dGVkUmVhZGFibGU9ITEsTCgib24gcmVhZGFibGUiLFZlLmxlbmd0aCxWZS5yZWFkaW5nKSxWZS5sZW5ndGg/bSh0''@;'; put 'put ''aGlzKTpWZS5yZWFkaW5nfHxJLm5leHRUaWNrKFVlLHRoaXMpKSxJZX0scC5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oRmUsUmUpe3ZhciBJZT13LnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lci5jYWxsKHRoaXMsRmUsUmUpO3JldHVybiJyZWFkYWJsZSI9PT1GZSYmSS5uZXh0''@;'; put 'put ''VGljayh3ZSx0aGlzKSxJZX0scC5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKEZlKXt2YXIgUmU9dy5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4oInJlYWRhYmxlIj09PUZlfHx2b2lkIDA9PT1GZSkmJkkubmV4''@;'; put 'put ''dFRpY2sod2UsdGhpcyksUmV9LHAucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe3ZhciBGZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBGZS5mbG93aW5nfHwoTCgicmVzdW1lIiksRmUuZmxvd2luZz0hRmUucmVhZGFibGVMaXN0ZW5pbmcsZnVuY3Rpb24gSmUoRmUsUmUpe1JlLnJl''@;'; put 'put ''c3VtZVNjaGVkdWxlZHx8KFJlLnJlc3VtZVNjaGVkdWxlZD0hMCxJLm5leHRUaWNrKGF0LEZlLFJlKSl9KHRoaXMsRmUpKSxGZS5wYXVzZWQ9ITEsdGhpc30scC5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4gTCgiY2FsbCBwYXVzZSBmbG93aW5nPSVqIix0aGlzLl9yZWFkYWJs''@;'; put 'put ''ZVN0YXRlLmZsb3dpbmcpLCExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nJiYoTCgicGF1c2UiKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9ITEsdGhpcy5lbWl0KCJwYXVzZSIpKSx0aGlzLl9yZWFkYWJsZVN0YXRlLnBhdXNlZD0hMCx0aGlzfSxwLnByb3RvdHlwZS53cmFw''@;'; put 'put ''PWZ1bmN0aW9uKEZlKXt2YXIgUmU9dGhpcyxJZT10aGlzLl9yZWFkYWJsZVN0YXRlLFZlPSExO2Zvcih2YXIga2UgaW4gRmUub24oImVuZCIsZnVuY3Rpb24oKXtpZihMKCJ3cmFwcGVkIGVuZCIpLEllLmRlY29kZXImJiFJZS5lbmRlZCl7dmFyIF90PUllLmRlY29kZXIuZW5kKCk7X3QmJl90''@;'; put 'put ''Lmxlbmd0aCYmUmUucHVzaChfdCl9UmUucHVzaChudWxsKX0pLEZlLm9uKCJkYXRhIixmdW5jdGlvbihfdCl7TCgid3JhcHBlZCBkYXRhIiksSWUuZGVjb2RlciYmKF90PUllLmRlY29kZXIud3JpdGUoX3QpKSxJZS5vYmplY3RNb2RlJiZudWxsPT1fdHx8IShJZS5vYmplY3RNb2RlfHxfdCYm''@;'; put 'put ''X3QubGVuZ3RoKXx8UmUucHVzaChfdCl8fChWZT0hMCxGZS5wYXVzZSgpKX0pLEZlKXZvaWQgMD09PXRoaXNba2VdJiYiZnVuY3Rpb24iPT10eXBlb2YgRmVba2VdJiYodGhpc1trZV09ZnVuY3Rpb24ocnQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBGZVtydF0uYXBwbHkoRmUsYXJndW1l''@;'; put 'put ''bnRzKX19KGtlKSk7Zm9yKHZhciBBZT0wO0FlPFNlLmxlbmd0aDtBZSsrKUZlLm9uKFNlW0FlXSx0aGlzLmVtaXQuYmluZCh0aGlzLFNlW0FlXSkpO3JldHVybiB0aGlzLl9yZWFkPWZ1bmN0aW9uKF90KXtMKCJ3cmFwcGVkIF9yZWFkIixfdCksVmUmJihWZT0hMSxGZS5yZXN1bWUoKSl9LHRo''@;'; put 'put ''aXN9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihwLnByb3RvdHlwZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09bWUmJihtZT1fKDU4NTApKSxtZSh0aGlzKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLnByb3RvdHlwZSwicmVhZGFibGVI''@;'; put 'put ''aWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwLnByb3RvdHlwZSwicmVhZGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlcn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkocC5wcm90b3R5cGUsInJlYWRhYmxlRmxvd2luZyIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxl''@;'; put 'put ''U3RhdGUuZmxvd2luZ30sc2V0OmZ1bmN0aW9uKFJlKXt0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPVJlKX19KSxwLl9mcm9tTGlzdD12ZSxPYmplY3QuZGVmaW5lUHJvcGVydHkocC5wcm90b3R5cGUsInJlYWRhYmxlTGVuZ3RoIix7ZW51bWVyYWJs''@;'; put 'put ''ZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5sZW5ndGh9fSksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmKHAuZnJvbT1mdW5jdGlvbihGZSxSZSl7cmV0dXJuIHZvaWQgMD09PV9lJiYoX2U9Xyg1MTY3KSksX2UocCxGZSxSZSl9KX0sNDYwNToodWUs''@;'; put 'put ''cSxfKT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPU87dmFyIEk9Xyg0MjgxKS5xLHk9SS5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxnPUkuRVJSX01VTFRJUExFX0NBTExCQUNLLEI9SS5FUlJfVFJBTlNGT1JNX0FMUkVBRFlfVFJBTlNGT1JNSU5HLHc9SS5FUlJfVFJBTlNGT1JNX1dJ''@;'; put 'put ''VEhfTEVOR1RIXzAsUD1fKDY3NTMpO2Z1bmN0aW9uIEYoTCxLKXt2YXIgVT10aGlzLl90cmFuc2Zvcm1TdGF0ZTtVLnRyYW5zZm9ybWluZz0hMTt2YXIgVz1VLndyaXRlY2I7aWYobnVsbD09PVcpcmV0dXJuIHRoaXMuZW1pdCgiZXJyb3IiLG5ldyBnKTtVLndyaXRlY2h1bms9bnVsbCxVLndy''@;'; put 'put ''aXRlY2I9bnVsbCxudWxsIT1LJiZ0aGlzLnB1c2goSyksVyhMKTt2YXIgWT10aGlzLl9yZWFkYWJsZVN0YXRlO1kucmVhZGluZz0hMSwoWS5uZWVkUmVhZGFibGV8fFkubGVuZ3RoPFkuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoWS5oaWdoV2F0ZXJNYXJrKX1mdW5jdGlvbiBPKEwpe2lm''@;'; put 'put ''KCEodGhpcyBpbnN0YW5jZW9mIE8pKXJldHVybiBuZXcgTyhMKTtQLmNhbGwodGhpcyxMKSx0aGlzLl90cmFuc2Zvcm1TdGF0ZT17YWZ0ZXJUcmFuc2Zvcm06Ri5iaW5kKHRoaXMpLG5lZWRUcmFuc2Zvcm06ITEsdHJhbnNmb3JtaW5nOiExLHdyaXRlY2I6bnVsbCx3cml0ZWNodW5rOm51bGws''@;'; put 'put ''d3JpdGVlbmNvZGluZzpudWxsfSx0aGlzLl9yZWFkYWJsZVN0YXRlLm5lZWRSZWFkYWJsZT0hMCx0aGlzLl9yZWFkYWJsZVN0YXRlLnN5bmM9ITEsTCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBMLnRyYW5zZm9ybSYmKHRoaXMuX3RyYW5zZm9ybT1MLnRyYW5zZm9ybSksImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIEwuZmx1c2gmJih0aGlzLl9mbHVzaD1MLmZsdXNoKSksdGhpcy5vbigicHJlZmluaXNoIix6KX1mdW5jdGlvbiB6KCl7dmFyIEw9dGhpczsiZnVuY3Rpb24iIT10eXBlb2YgdGhpcy5fZmx1c2h8fHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkP04odGhpcyxudWxsLG51bGwpOnRo''@;'; put 'put ''aXMuX2ZsdXNoKGZ1bmN0aW9uKEssVSl7TihMLEssVSl9KX1mdW5jdGlvbiBOKEwsSyxVKXtpZihLKXJldHVybiBMLmVtaXQoImVycm9yIixLKTtpZihudWxsIT1VJiZMLnB1c2goVSksTC5fd3JpdGFibGVTdGF0ZS5sZW5ndGgpdGhyb3cgbmV3IHc7aWYoTC5fdHJhbnNmb3JtU3RhdGUudHJh''@;'; put 'put ''bnNmb3JtaW5nKXRocm93IG5ldyBCO3JldHVybiBMLnB1c2gobnVsbCl9Xyg1NzE3KShPLFApLE8ucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oTCxLKXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybT0hMSxQLnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyxMLEspfSxP''@;'; put 'put ''LnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKEwsSyxVKXtVKG5ldyB5KCJfdHJhbnNmb3JtKCkiKSl9LE8ucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihMLEssVSl7dmFyIFc9dGhpcy5fdHJhbnNmb3JtU3RhdGU7aWYoVy53cml0ZWNiPVUsVy53cml0ZWNodW5rPUwsVy53cml0ZWVu''@;'; put 'put ''Y29kaW5nPUssIVcudHJhbnNmb3JtaW5nKXt2YXIgWT10aGlzLl9yZWFkYWJsZVN0YXRlOyhXLm5lZWRUcmFuc2Zvcm18fFkubmVlZFJlYWRhYmxlfHxZLmxlbmd0aDxZLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKFkuaGlnaFdhdGVyTWFyayl9fSxPLnByb3RvdHlwZS5fcmVhZD1mdW5j''@;'; put 'put ''dGlvbihMKXt2YXIgSz10aGlzLl90cmFuc2Zvcm1TdGF0ZTtudWxsPT09Sy53cml0ZWNodW5rfHxLLnRyYW5zZm9ybWluZz9LLm5lZWRUcmFuc2Zvcm09ITA6KEsudHJhbnNmb3JtaW5nPSEwLHRoaXMuX3RyYW5zZm9ybShLLndyaXRlY2h1bmssSy53cml0ZWVuY29kaW5nLEsuYWZ0ZXJUcmFu''@;'; put 'put ''c2Zvcm0pKX0sTy5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rpb24oTCxLKXtQLnByb3RvdHlwZS5fZGVzdHJveS5jYWxsKHRoaXMsTCxmdW5jdGlvbihVKXtLKFUpfSl9fSw0MjI5Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBCLEk9Xyg0MTU1KTtmdW5jdGlvbiBnKE1lKXt2YXIgdmU9''@;'; put 'put ''dGhpczt0aGlzLm5leHQ9bnVsbCx0aGlzLmVudHJ5PW51bGwsdGhpcy5maW5pc2g9ZnVuY3Rpb24oKXshZnVuY3Rpb24gYXQoTWUsdmUsWGUpe3ZhciBqZT1NZS5lbnRyeTtmb3IoTWUuZW50cnk9bnVsbDtqZTspe3ZhciBEZT1qZS5jYWxsYmFjazt2ZS5wZW5kaW5nY2ItLSxEZShYZSksamU9''@;'; put 'put ''amUubmV4dH12ZS5jb3JrZWRSZXF1ZXN0c0ZyZWUubmV4dD1NZX0odmUsTWUpfX11ZS5leHBvcnRzPVYsVi5Xcml0YWJsZVN0YXRlPVNlO3ZhciB6ZSx3PXtkZXByZWNhdGU6Xyg0OTI3KX0sUD1fKDI1MDMpLEY9Xyg4NzY0KS5CdWZmZXIsTz0odHlwZW9mIF8uZzwidSI/Xy5nOnR5cGVvZiB3''@;'; put 'put ''aW5kb3c8InUiP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9LEw9XygxMTk1KSxVPV8oMjQ1NykuZ2V0SGlnaFdhdGVyTWFyayxXPV8oNDI4MSkucSxZPVcuRVJSX0lOVkFMSURfQVJHX1RZUEUsWD1XLkVSUl9NRVRIT0RfTk9UX0lNUExF''@;'; put 'put ''TUVOVEVELGVlPVcuRVJSX01VTFRJUExFX0NBTExCQUNLLEo9Vy5FUlJfU1RSRUFNX0NBTk5PVF9QSVBFLHJlPVcuRVJSX1NUUkVBTV9ERVNUUk9ZRUQsaWU9Vy5FUlJfU1RSRUFNX05VTExfVkFMVUVTLGxlPVcuRVJSX1NUUkVBTV9XUklURV9BRlRFUl9FTkQsbWU9Vy5FUlJfVU5LTk9XTl9F''@;'; put 'put ''TkNPRElORyxfZT1MLmVycm9yT3JEZXN0cm95O2Z1bmN0aW9uIFRlKCl7fWZ1bmN0aW9uIFNlKE1lLHZlLFhlKXtCPUJ8fF8oNjc1MyksImJvb2xlYW4iIT10eXBlb2YgWGUmJihYZT12ZSBpbnN0YW5jZW9mIEIpLHRoaXMub2JqZWN0TW9kZT0hIShNZT1NZXx8e30pLm9iamVjdE1vZGUsWGUm''@;'; put 'put ''Jih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIU1lLndyaXRhYmxlT2JqZWN0TW9kZSksdGhpcy5oaWdoV2F0ZXJNYXJrPVUodGhpcyxNZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIixYZSksdGhpcy5maW5hbENhbGxlZD0hMSx0aGlzLm5lZWREcmFpbj0hMSx0aGlzLmVuZGlu''@;'; put 'put ''Zz0hMSx0aGlzLmVuZGVkPSExLHRoaXMuZmluaXNoZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWNvZGVTdHJpbmdzPSEoITE9PT1NZS5kZWNvZGVTdHJpbmdzKSx0aGlzLmRlZmF1bHRFbmNvZGluZz1NZS5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGY4Iix0aGlzLmxlbmd0aD0wLHRoaXMu''@;'; put 'put ''d3JpdGluZz0hMSx0aGlzLmNvcmtlZD0wLHRoaXMuc3luYz0hMCx0aGlzLmJ1ZmZlclByb2Nlc3Npbmc9ITEsdGhpcy5vbndyaXRlPWZ1bmN0aW9uKERlKXshZnVuY3Rpb24gRShNZSx2ZSl7dmFyIFhlPU1lLl93cml0YWJsZVN0YXRlLGplPVhlLnN5bmMsRGU9WGUud3JpdGVjYjtpZigiZnVu''@;'; put 'put ''Y3Rpb24iIT10eXBlb2YgRGUpdGhyb3cgbmV3IGVlO2lmKGZ1bmN0aW9uIGooTWUpe01lLndyaXRpbmc9ITEsTWUud3JpdGVjYj1udWxsLE1lLmxlbmd0aC09TWUud3JpdGVsZW4sTWUud3JpdGVsZW49MH0oWGUpLHZlKSFmdW5jdGlvbiBIKE1lLHZlLFhlLGplLERlKXstLXZlLnBlbmRpbmdj''@;'; put 'put ''YixYZT8oSS5uZXh0VGljayhEZSxqZSksSS5uZXh0VGljayhVZSxNZSx2ZSksTWUuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLF9lKE1lLGplKSk6KERlKGplKSxNZS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsX2UoTWUsamUpLFVlKE1lLHZlKSl9KE1lLFhlLGplLHZl''@;'; put 'put ''LERlKTtlbHNle3ZhciBGZT10ZShYZSl8fE1lLmRlc3Ryb3llZDshRmUmJiFYZS5jb3JrZWQmJiFYZS5idWZmZXJQcm9jZXNzaW5nJiZYZS5idWZmZXJlZFJlcXVlc3QmJm9lKE1lLFhlKSxqZT9JLm5leHRUaWNrKG0sTWUsWGUsRmUsRGUpOm0oTWUsWGUsRmUsRGUpfX0odmUsRGUpfSx0aGlz''@;'; put 'put ''LndyaXRlY2I9bnVsbCx0aGlzLndyaXRlbGVuPTAsdGhpcy5idWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLnBlbmRpbmdjYj0wLHRoaXMucHJlZmluaXNoZWQ9ITEsdGhpcy5lcnJvckVtaXR0ZWQ9ITEsdGhpcy5lbWl0Q2xvc2U9ITEhPT1N''@;'; put 'put ''ZS5lbWl0Q2xvc2UsdGhpcy5hdXRvRGVzdHJveT0hIU1lLmF1dG9EZXN0cm95LHRoaXMuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MCx0aGlzLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgZyh0aGlzKX1mdW5jdGlvbiBWKE1lKXt2YXIgdmU9dGhpcyBpbnN0YW5jZW9mKEI9Qnx8Xyg2NzUzKSk7aWYo''@;'; put 'put ''IXZlJiYhemUuY2FsbChWLHRoaXMpKXJldHVybiBuZXcgVihNZSk7dGhpcy5fd3JpdGFibGVTdGF0ZT1uZXcgU2UoTWUsdGhpcyx2ZSksdGhpcy53cml0YWJsZT0hMCxNZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBNZS53cml0ZSYmKHRoaXMuX3dyaXRlPU1lLndyaXRlKSwiZnVuY3Rpb24iPT10''@;'; put 'put ''eXBlb2YgTWUud3JpdGV2JiYodGhpcy5fd3JpdGV2PU1lLndyaXRldiksImZ1bmN0aW9uIj09dHlwZW9mIE1lLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PU1lLmRlc3Ryb3kpLCJmdW5jdGlvbiI9PXR5cGVvZiBNZS5maW5hbCYmKHRoaXMuX2ZpbmFsPU1lLmZpbmFsKSksUC5jYWxsKHRoaXMp''@;'; put 'put ''fWZ1bmN0aW9uIFQoTWUsdmUsWGUsamUsRGUsRmUsUmUpe3ZlLndyaXRlbGVuPWplLHZlLndyaXRlY2I9UmUsdmUud3JpdGluZz0hMCx2ZS5zeW5jPSEwLHZlLmRlc3Ryb3llZD92ZS5vbndyaXRlKG5ldyByZSgid3JpdGUiKSk6WGU/TWUuX3dyaXRldihEZSx2ZS5vbndyaXRlKTpNZS5fd3Jp''@;'; put 'put ''dGUoRGUsRmUsdmUub253cml0ZSksdmUuc3luYz0hMX1mdW5jdGlvbiBtKE1lLHZlLFhlLGplKXtYZXx8ZnVuY3Rpb24gQShNZSx2ZSl7MD09PXZlLmxlbmd0aCYmdmUubmVlZERyYWluJiYodmUubmVlZERyYWluPSExLE1lLmVtaXQoImRyYWluIikpfShNZSx2ZSksdmUucGVuZGluZ2NiLS0s''@;'; put 'put ''amUoKSxVZShNZSx2ZSl9ZnVuY3Rpb24gb2UoTWUsdmUpe3ZlLmJ1ZmZlclByb2Nlc3Npbmc9ITA7dmFyIFhlPXZlLmJ1ZmZlcmVkUmVxdWVzdDtpZihNZS5fd3JpdGV2JiZYZSYmWGUubmV4dCl7dmFyIERlPW5ldyBBcnJheSh2ZS5idWZmZXJlZFJlcXVlc3RDb3VudCksRmU9dmUuY29ya2Vk''@;'; put 'put ''UmVxdWVzdHNGcmVlO0ZlLmVudHJ5PVhlO2Zvcih2YXIgUmU9MCxJZT0hMDtYZTspRGVbUmVdPVhlLFhlLmlzQnVmfHwoSWU9ITEpLFhlPVhlLm5leHQsUmUrPTE7RGUuYWxsQnVmZmVycz1JZSxUKE1lLHZlLCEwLHZlLmxlbmd0aCxEZSwiIixGZS5maW5pc2gpLHZlLnBlbmRpbmdjYisrLHZl''@;'; put 'put ''Lmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCxGZS5uZXh0Pyh2ZS5jb3JrZWRSZXF1ZXN0c0ZyZWU9RmUubmV4dCxGZS5uZXh0PW51bGwpOnZlLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgZyh2ZSksdmUuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MH1lbHNle2Zvcig7WGU7KXt2YXIgVmU9WGUuY2h1''@;'; put 'put ''bms7aWYoVChNZSx2ZSwhMSx2ZS5vYmplY3RNb2RlPzE6VmUubGVuZ3RoLFZlLFhlLmVuY29kaW5nLFhlLmNhbGxiYWNrKSxYZT1YZS5uZXh0LHZlLmJ1ZmZlcmVkUmVxdWVzdENvdW50LS0sdmUud3JpdGluZylicmVha31udWxsPT09WGUmJih2ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwp''@;'; put 'put ''fXZlLmJ1ZmZlcmVkUmVxdWVzdD1YZSx2ZS5idWZmZXJQcm9jZXNzaW5nPSExfWZ1bmN0aW9uIHRlKE1lKXtyZXR1cm4gTWUuZW5kaW5nJiYwPT09TWUubGVuZ3RoJiZudWxsPT09TWUuYnVmZmVyZWRSZXF1ZXN0JiYhTWUuZmluaXNoZWQmJiFNZS53cml0aW5nfWZ1bmN0aW9uIHNlKE1lLHZl''@;'; put 'put ''KXtNZS5fZmluYWwoZnVuY3Rpb24oWGUpe3ZlLnBlbmRpbmdjYi0tLFhlJiZfZShNZSxYZSksdmUucHJlZmluaXNoZWQ9ITAsTWUuZW1pdCgicHJlZmluaXNoIiksVWUoTWUsdmUpfSl9ZnVuY3Rpb24gVWUoTWUsdmUpe3ZhciBYZT10ZSh2ZSk7aWYoWGUmJihmdW5jdGlvbiB3ZShNZSx2ZSl7''@;'; put 'put ''IXZlLnByZWZpbmlzaGVkJiYhdmUuZmluYWxDYWxsZWQmJigiZnVuY3Rpb24iIT10eXBlb2YgTWUuX2ZpbmFsfHx2ZS5kZXN0cm95ZWQ/KHZlLnByZWZpbmlzaGVkPSEwLE1lLmVtaXQoInByZWZpbmlzaCIpKToodmUucGVuZGluZ2NiKyssdmUuZmluYWxDYWxsZWQ9ITAsSS5uZXh0VGljayhz''@;'; put 'put ''ZSxNZSx2ZSkpKX0oTWUsdmUpLDA9PT12ZS5wZW5kaW5nY2ImJih2ZS5maW5pc2hlZD0hMCxNZS5lbWl0KCJmaW5pc2giKSx2ZS5hdXRvRGVzdHJveSkpKXt2YXIgamU9TWUuX3JlYWRhYmxlU3RhdGU7KCFqZXx8amUuYXV0b0Rlc3Ryb3kmJmplLmVuZEVtaXR0ZWQpJiZNZS5kZXN0cm95KCl9''@;'; put 'put ''cmV0dXJuIFhlfV8oNTcxNykoVixQKSxTZS5wcm90b3R5cGUuZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciB2ZT10aGlzLmJ1ZmZlcmVkUmVxdWVzdCxYZT1bXTt2ZTspWGUucHVzaCh2ZSksdmU9dmUubmV4dDtyZXR1cm4gWGV9LGZ1bmN0aW9uKCl7dHJ5e09iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eShTZS5wcm90b3R5cGUsImJ1ZmZlciIse2dldDp3LmRlcHJlY2F0ZShmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJ1ZmZlcigpfSwiX3dyaXRhYmxlU3RhdGUuYnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBfd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIgaW5zdGVhZC4iLCJERVAwMDAz''@;'; put 'put ''Iil9KX1jYXRjaHt9fSgpLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5oYXNJbnN0YW5jZSYmImZ1bmN0aW9uIj09dHlwZW9mIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdPyh6ZT1GdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXSxP''@;'; put 'put ''YmplY3QuZGVmaW5lUHJvcGVydHkoVixTeW1ib2wuaGFzSW5zdGFuY2Use3ZhbHVlOmZ1bmN0aW9uKHZlKXtyZXR1cm4hIXplLmNhbGwodGhpcyx2ZSl8fHRoaXM9PT1WJiZ2ZSYmdmUuX3dyaXRhYmxlU3RhdGUgaW5zdGFuY2VvZiBTZX19KSk6emU9ZnVuY3Rpb24odmUpe3JldHVybiB2ZSBp''@;'; put 'put ''bnN0YW5jZW9mIHRoaXN9LFYucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oKXtfZSh0aGlzLG5ldyBKKX0sVi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oTWUsdmUsWGUpe3ZhciBqZT10aGlzLl93cml0YWJsZVN0YXRlLERlPSExLEZlPSFqZS5vYmplY3RNb2RlJiZmdW5jdGlvbiBOKE1lKXty''@;'; put 'put ''ZXR1cm4gRi5pc0J1ZmZlcihNZSl8fE1lIGluc3RhbmNlb2YgT30oTWUpO3JldHVybiBGZSYmIUYuaXNCdWZmZXIoTWUpJiYoTWU9ZnVuY3Rpb24geihNZSl7cmV0dXJuIEYuZnJvbShNZSl9KE1lKSksImZ1bmN0aW9uIj09dHlwZW9mIHZlJiYoWGU9dmUsdmU9bnVsbCksRmU/dmU9ImJ1ZmZl''@;'; put 'put ''ciI6dmV8fCh2ZT1qZS5kZWZhdWx0RW5jb2RpbmcpLCJmdW5jdGlvbiIhPXR5cGVvZiBYZSYmKFhlPVRlKSxqZS5lbmRpbmc/ZnVuY3Rpb24gcChNZSx2ZSl7dmFyIFhlPW5ldyBsZTtfZShNZSxYZSksSS5uZXh0VGljayh2ZSxYZSl9KHRoaXMsWGUpOihGZXx8ZnVuY3Rpb24gYihNZSx2ZSxY''@;'; put 'put ''ZSxqZSl7dmFyIERlO3JldHVybiBudWxsPT09WGU/RGU9bmV3IGllOiJzdHJpbmciIT10eXBlb2YgWGUmJiF2ZS5vYmplY3RNb2RlJiYoRGU9bmV3IFkoImNodW5rIixbInN0cmluZyIsIkJ1ZmZlciJdLFhlKSksIURlfHwoX2UoTWUsRGUpLEkubmV4dFRpY2soamUsRGUpLCExKX0odGhpcyxq''@;'; put 'put ''ZSxNZSxYZSkpJiYoamUucGVuZGluZ2NiKyssRGU9ZnVuY3Rpb24gQyhNZSx2ZSxYZSxqZSxEZSxGZSl7aWYoIVhlKXt2YXIgUmU9ZnVuY3Rpb24geChNZSx2ZSxYZSl7cmV0dXJuIU1lLm9iamVjdE1vZGUmJiExIT09TWUuZGVjb2RlU3RyaW5ncyYmInN0cmluZyI9PXR5cGVvZiB2ZSYmKHZl''@;'; put 'put ''PUYuZnJvbSh2ZSxYZSkpLHZlfSh2ZSxqZSxEZSk7amUhPT1SZSYmKFhlPSEwLERlPSJidWZmZXIiLGplPVJlKX12YXIgSWU9dmUub2JqZWN0TW9kZT8xOmplLmxlbmd0aDt2ZS5sZW5ndGgrPUllO3ZhciBWZT12ZS5sZW5ndGg8dmUuaGlnaFdhdGVyTWFyaztpZihWZXx8KHZlLm5lZWREcmFp''@;'; put 'put ''bj0hMCksdmUud3JpdGluZ3x8dmUuY29ya2VkKXt2YXIga2U9dmUubGFzdEJ1ZmZlcmVkUmVxdWVzdDt2ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PXtjaHVuazpqZSxlbmNvZGluZzpEZSxpc0J1ZjpYZSxjYWxsYmFjazpGZSxuZXh0Om51bGx9LGtlP2tlLm5leHQ9dmUubGFzdEJ1ZmZlcmVkUmVx''@;'; put 'put ''dWVzdDp2ZS5idWZmZXJlZFJlcXVlc3Q9dmUubGFzdEJ1ZmZlcmVkUmVxdWVzdCx2ZS5idWZmZXJlZFJlcXVlc3RDb3VudCs9MX1lbHNlIFQoTWUsdmUsITEsSWUsamUsRGUsRmUpO3JldHVybiBWZX0odGhpcyxqZSxGZSxNZSx2ZSxYZSkpLERlfSxWLnByb3RvdHlwZS5jb3JrPWZ1bmN0aW9u''@;'; put 'put ''KCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQrK30sVi5wcm90b3R5cGUudW5jb3JrPWZ1bmN0aW9uKCl7dmFyIE1lPXRoaXMuX3dyaXRhYmxlU3RhdGU7TWUuY29ya2VkJiYoTWUuY29ya2VkLS0sIU1lLndyaXRpbmcmJiFNZS5jb3JrZWQmJiFNZS5idWZmZXJQcm9jZXNzaW5nJiZNZS5i''@;'; put 'put ''dWZmZXJlZFJlcXVlc3QmJm9lKHRoaXMsTWUpKX0sVi5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nPWZ1bmN0aW9uKHZlKXtpZigic3RyaW5nIj09dHlwZW9mIHZlJiYodmU9dmUudG9Mb3dlckNhc2UoKSksIShbImhleCIsInV0ZjgiLCJ1dGYtOCIsImFzY2lpIiwiYmluYXJ5IiwiYmFz''@;'; put 'put ''ZTY0IiwidWNzMiIsInVjcy0yIiwidXRmMTZsZSIsInV0Zi0xNmxlIiwicmF3Il0uaW5kZXhPZigodmUrIiIpLnRvTG93ZXJDYXNlKCkpPi0xKSl0aHJvdyBuZXcgbWUodmUpO3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmRlZmF1bHRFbmNvZGluZz12ZSx0aGlzfSxPYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkoVi5wcm90b3R5cGUsIndyaXRhYmxlQnVmZmVyIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIoKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVi5wcm90b3R5cGUs''@;'; put 'put ''IndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxWLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24oTWUsdmUsWGUpe1hlKG5ldyBYKCJfd3JpdGUoKSIpKX0sVi5wcm90''@;'; put 'put ''b3R5cGUuX3dyaXRldj1udWxsLFYucHJvdG90eXBlLmVuZD1mdW5jdGlvbihNZSx2ZSxYZSl7dmFyIGplPXRoaXMuX3dyaXRhYmxlU3RhdGU7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIE1lPyhYZT1NZSxNZT1udWxsLHZlPW51bGwpOiJmdW5jdGlvbiI9PXR5cGVvZiB2ZSYmKFhlPXZlLHZl''@;'; put 'put ''PW51bGwpLG51bGwhPU1lJiZ0aGlzLndyaXRlKE1lLHZlKSxqZS5jb3JrZWQmJihqZS5jb3JrZWQ9MSx0aGlzLnVuY29yaygpKSxqZS5lbmRpbmd8fGZ1bmN0aW9uIEplKE1lLHZlLFhlKXt2ZS5lbmRpbmc9ITAsVWUoTWUsdmUpLFhlJiYodmUuZmluaXNoZWQ/SS5uZXh0VGljayhYZSk6TWUu''@;'; put 'put ''b25jZSgiZmluaXNoIixYZSkpLHZlLmVuZGVkPSEwLE1lLndyaXRhYmxlPSExfSh0aGlzLGplLFhlKSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVi5wcm90b3R5cGUsIndyaXRhYmxlTGVuZ3RoIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFi''@;'; put 'put ''bGVTdGF0ZS5sZW5ndGh9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFYucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0''@;'; put 'put ''OmZ1bmN0aW9uKHZlKXt0aGlzLl93cml0YWJsZVN0YXRlJiYodGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ9dmUpfX0pLFYucHJvdG90eXBlLmRlc3Ryb3k9TC5kZXN0cm95LFYucHJvdG90eXBlLl91bmRlc3Ryb3k9TC51bmRlc3Ryb3ksVi5wcm90b3R5cGUuX2Rlc3Ryb3k9ZnVuY3Rp''@;'; put 'put ''b24oTWUsdmUpe3ZlKE1lKX19LDU4NTA6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIHksST1fKDQxNTUpO2Z1bmN0aW9uIGcobGUsbWUsX2Upe3JldHVybiBtZT1mdW5jdGlvbiBCKGxlKXt2YXIgbWU9ZnVuY3Rpb24gdyhsZSxtZSl7aWYoIm9iamVjdCIhPXR5cGVvZiBsZXx8bnVsbD09''@;'; put 'put ''PWxlKXJldHVybiBsZTt2YXIgX2U9bGVbU3ltYm9sLnRvUHJpbWl0aXZlXTtpZih2b2lkIDAhPT1fZSl7dmFyIFRlPV9lLmNhbGwobGUsbWV8fCJkZWZhdWx0Iik7aWYoIm9iamVjdCIhPXR5cGVvZiBUZSlyZXR1cm4gVGU7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0''@;'; put 'put ''IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1tZT9TdHJpbmc6TnVtYmVyKShsZSl9KGxlLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIG1lP21lOlN0cmluZyhtZSl9KG1lKSxtZSBpbiBsZT9PYmplY3QuZGVmaW5lUHJvcGVydHkobGUsbWUs''@;'; put 'put ''e3ZhbHVlOl9lLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6bGVbbWVdPV9lLGxlfXZhciBQPV8oODYxMCksRj1TeW1ib2woImxhc3RSZXNvbHZlIiksTz1TeW1ib2woImxhc3RSZWplY3QiKSx6PVN5bWJvbCgiZXJyb3IiKSxOPVN5bWJvbCgiZW5kZWQiKSxM''@;'; put 'put ''PVN5bWJvbCgibGFzdFByb21pc2UiKSxLPVN5bWJvbCgiaGFuZGxlUHJvbWlzZSIpLFU9U3ltYm9sKCJzdHJlYW0iKTtmdW5jdGlvbiBXKGxlLG1lKXtyZXR1cm57dmFsdWU6bGUsZG9uZTptZX19ZnVuY3Rpb24gWShsZSl7dmFyIG1lPWxlW0ZdO2lmKG51bGwhPT1tZSl7dmFyIF9lPWxlW1Vd''@;'; put 'put ''LnJlYWQoKTtudWxsIT09X2UmJihsZVtMXT1udWxsLGxlW0ZdPW51bGwsbGVbT109bnVsbCxtZShXKF9lLCExKSkpfX1mdW5jdGlvbiBYKGxlKXtJLm5leHRUaWNrKFksbGUpfXZhciBKPU9iamVjdC5nZXRQcm90b3R5cGVPZihmdW5jdGlvbigpe30pLHJlPU9iamVjdC5zZXRQcm90b3R5cGVP''@;'; put 'put ''ZigoZyh5PXtnZXQgc3RyZWFtKCl7cmV0dXJuIHRoaXNbVV19LG5leHQ6ZnVuY3Rpb24oKXt2YXIgbWU9dGhpcyxfZT10aGlzW3pdO2lmKG51bGwhPT1fZSlyZXR1cm4gUHJvbWlzZS5yZWplY3QoX2UpO2lmKHRoaXNbTl0pcmV0dXJuIFByb21pc2UucmVzb2x2ZShXKHZvaWQgMCwhMCkpO2lm''@;'; put 'put ''KHRoaXNbVV0uZGVzdHJveWVkKXJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihWLHApe0kubmV4dFRpY2soZnVuY3Rpb24oKXttZVt6XT9wKG1lW3pdKTpWKFcodm9pZCAwLCEwKSl9KX0pO3ZhciBTZSxUZT10aGlzW0xdO2lmKFRlKVNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uIGVlKGxlLG1l''@;'; put 'put ''KXtyZXR1cm4gZnVuY3Rpb24oX2UsVGUpe2xlLnRoZW4oZnVuY3Rpb24oKXttZVtOXT9fZShXKHZvaWQgMCwhMCkpOm1lW0tdKF9lLFRlKX0sVGUpfX0oVGUsdGhpcykpO2Vsc2V7dmFyIHplPXRoaXNbVV0ucmVhZCgpO2lmKG51bGwhPT16ZSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFcoemUs''@;'; put 'put ''ITEpKTtTZT1uZXcgUHJvbWlzZSh0aGlzW0tdKX1yZXR1cm4gdGhpc1tMXT1TZSxTZX19LFN5bWJvbC5hc3luY0l0ZXJhdG9yLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxnKHksInJldHVybiIsZnVuY3Rpb24oKXt2YXIgbWU9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oX2Us''@;'; put 'put ''VGUpe21lW1VdLmRlc3Ryb3kobnVsbCxmdW5jdGlvbihTZSl7U2U/VGUoU2UpOl9lKFcodm9pZCAwLCEwKSl9KX0pfSkseSksSik7dWUuZXhwb3J0cz1mdW5jdGlvbihtZSl7dmFyIF9lLFRlPU9iamVjdC5jcmVhdGUocmUsKGcoX2U9e30sVSx7dmFsdWU6bWUsd3JpdGFibGU6ITB9KSxnKF9l''@;'; put 'put ''LEYse3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KSxnKF9lLE8se3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KSxnKF9lLHose3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KSxnKF9lLE4se3ZhbHVlOm1lLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQsd3JpdGFibGU6ITB9KSxnKF9lLEsse3ZhbHVl''@;'; put 'put ''OmZ1bmN0aW9uKHplLFYpe3ZhciBwPVRlW1VdLnJlYWQoKTtwPyhUZVtMXT1udWxsLFRlW0ZdPW51bGwsVGVbT109bnVsbCx6ZShXKHAsITEpKSk6KFRlW0ZdPXplLFRlW09dPVYpfSx3cml0YWJsZTohMH0pLF9lKSk7cmV0dXJuIFRlW0xdPW51bGwsUChtZSxmdW5jdGlvbihTZSl7aWYoU2Um''@;'; put 'put ''JiJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSIhPT1TZS5jb2RlKXt2YXIgemU9VGVbT107cmV0dXJuIG51bGwhPT16ZSYmKFRlW0xdPW51bGwsVGVbRl09bnVsbCxUZVtPXT1udWxsLHplKFNlKSksdm9pZChUZVt6XT1TZSl9dmFyIFY9VGVbRl07bnVsbCE9PVYmJihUZVtMXT1udWxsLFRl''@;'; put 'put ''W0ZdPW51bGwsVGVbT109bnVsbCxWKFcodm9pZCAwLCEwKSkpLFRlW05dPSEwfSksbWUub24oInJlYWRhYmxlIixYLmJpbmQobnVsbCxUZSkpLFRlfX0sNzMyNzoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBJKFksWCl7dmFyIGVlPU9iamVjdC5rZXlzKFkpO2lmKE9iamVjdC5n''@;'; put 'put ''ZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBKPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoWSk7WCYmKEo9Si5maWx0ZXIoZnVuY3Rpb24ocmUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFkscmUpLmVudW1lcmFibGV9KSksZWUucHVzaC5hcHBseShlZSxK''@;'; put 'put ''KX1yZXR1cm4gZWV9ZnVuY3Rpb24geShZKXtmb3IodmFyIFg9MTtYPGFyZ3VtZW50cy5sZW5ndGg7WCsrKXt2YXIgZWU9bnVsbCE9YXJndW1lbnRzW1hdP2FyZ3VtZW50c1tYXTp7fTtYJTI/SShPYmplY3QoZWUpLCEwKS5mb3JFYWNoKGZ1bmN0aW9uKEope2coWSxKLGVlW0pdKX0pOk9iamVj''@;'; put 'put ''dC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFksT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoZWUpKTpJKE9iamVjdChlZSkpLmZvckVhY2goZnVuY3Rpb24oSil7T2JqZWN0LmRlZmluZVByb3BlcnR5KFksSixPYmplY3QuZ2V0T3du''@;'; put 'put ''UHJvcGVydHlEZXNjcmlwdG9yKGVlLEopKX0pfXJldHVybiBZfWZ1bmN0aW9uIGcoWSxYLGVlKXtyZXR1cm4oWD1GKFgpKWluIFk/T2JqZWN0LmRlZmluZVByb3BlcnR5KFksWCx7dmFsdWU6ZWUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITB9KTpZW1hdPWVlLFl9''@;'; put 'put ''ZnVuY3Rpb24gdyhZLFgpe2Zvcih2YXIgZWU9MDtlZTxYLmxlbmd0aDtlZSsrKXt2YXIgSj1YW2VlXTtKLmVudW1lcmFibGU9Si5lbnVtZXJhYmxlfHwhMSxKLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gSiYmKEoud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShZLEYoSi5r''@;'; put 'put ''ZXkpLEopfX1mdW5jdGlvbiBGKFkpe3ZhciBYPWZ1bmN0aW9uIE8oWSxYKXtpZigib2JqZWN0IiE9dHlwZW9mIFl8fG51bGw9PT1ZKXJldHVybiBZO3ZhciBlZT1ZW1N5bWJvbC50b1ByaW1pdGl2ZV07aWYodm9pZCAwIT09ZWUpe3ZhciBKPWVlLmNhbGwoWSxYfHwiZGVmYXVsdCIpO2lmKCJv''@;'; put 'put ''YmplY3QiIT10eXBlb2YgSilyZXR1cm4gSjt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3RyaW5nIj09PVg/U3RyaW5nOk51bWJlcikoWSl9KFksInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBl''@;'; put 'put ''b2YgWD9YOlN0cmluZyhYKX12YXIgTj1fKDg3NjQpLkJ1ZmZlcixLPV8oMjM2MSkuaW5zcGVjdCxVPUsmJksuY3VzdG9tfHwiaW5zcGVjdCI7ZnVuY3Rpb24gVyhZLFgsZWUpe04ucHJvdG90eXBlLmNvcHkuY2FsbChZLFgsZWUpfXVlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBZKCl7''@;'; put 'put ''KGZ1bmN0aW9uIEIoWSxYKXtpZighKFkgaW5zdGFuY2VvZiBYKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsWSksdGhpcy5oZWFkPW51bGwsdGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH1yZXR1cm4gZnVuY3Rpb24g''@;'; put 'put ''UChZLFgsZWUpe1gmJncoWS5wcm90b3R5cGUsWCksZWUmJncoWSxlZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFksInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KFksW3trZXk6InB1c2giLHZhbHVlOmZ1bmN0aW9uKGVlKXt2YXIgSj17ZGF0YTplZSxuZXh0Om51bGx9O3RoaXMubGVuZ3Ro''@;'; put 'put ''PjA/dGhpcy50YWlsLm5leHQ9Sjp0aGlzLmhlYWQ9Six0aGlzLnRhaWw9SiwrK3RoaXMubGVuZ3RofX0se2tleToidW5zaGlmdCIsdmFsdWU6ZnVuY3Rpb24oZWUpe3ZhciBKPXtkYXRhOmVlLG5leHQ6dGhpcy5oZWFkfTswPT09dGhpcy5sZW5ndGgmJih0aGlzLnRhaWw9SiksdGhpcy5oZWFk''@;'; put 'put ''PUosKyt0aGlzLmxlbmd0aH19LHtrZXk6InNoaWZ0Iix2YWx1ZTpmdW5jdGlvbigpe2lmKDAhPT10aGlzLmxlbmd0aCl7dmFyIGVlPXRoaXMuaGVhZC5kYXRhO3JldHVybiB0aGlzLmhlYWQ9MT09PXRoaXMubGVuZ3RoP3RoaXMudGFpbD1udWxsOnRoaXMuaGVhZC5uZXh0LC0tdGhpcy5sZW5n''@;'; put 'put ''dGgsZWV9fX0se2tleToiY2xlYXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9fSx7a2V5OiJqb2luIix2YWx1ZTpmdW5jdGlvbihlZSl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgSj10aGlzLmhlYWQscmU9IiIr''@;'; put 'put ''Si5kYXRhO0o9Si5uZXh0OylyZSs9ZWUrSi5kYXRhO3JldHVybiByZX19LHtrZXk6ImNvbmNhdCIsdmFsdWU6ZnVuY3Rpb24oZWUpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4gTi5hbGxvYygwKTtmb3IodmFyIEo9Ti5hbGxvY1Vuc2FmZShlZT4+PjApLHJlPXRoaXMuaGVhZCxpZT0wO3Jl''@;'; put 'put ''OylXKHJlLmRhdGEsSixpZSksaWUrPXJlLmRhdGEubGVuZ3RoLHJlPXJlLm5leHQ7cmV0dXJuIEp9fSx7a2V5OiJjb25zdW1lIix2YWx1ZTpmdW5jdGlvbihlZSxKKXt2YXIgcmU7cmV0dXJuIGVlPHRoaXMuaGVhZC5kYXRhLmxlbmd0aD8ocmU9dGhpcy5oZWFkLmRhdGEuc2xpY2UoMCxlZSks''@;'; put 'put ''dGhpcy5oZWFkLmRhdGE9dGhpcy5oZWFkLmRhdGEuc2xpY2UoZWUpKTpyZT1lZT09PXRoaXMuaGVhZC5kYXRhLmxlbmd0aD90aGlzLnNoaWZ0KCk6Sj90aGlzLl9nZXRTdHJpbmcoZWUpOnRoaXMuX2dldEJ1ZmZlcihlZSkscmV9fSx7a2V5OiJmaXJzdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5oZWFkLmRhdGF9fSx7a2V5OiJfZ2V0U3RyaW5nIix2YWx1ZTpmdW5jdGlvbihlZSl7dmFyIEo9dGhpcy5oZWFkLHJlPTEsaWU9Si5kYXRhO2ZvcihlZS09aWUubGVuZ3RoO0o9Si5uZXh0Oyl7dmFyIGxlPUouZGF0YSxtZT1lZT5sZS5sZW5ndGg/bGUubGVuZ3RoOmVlO2lmKGll''@;'; put 'put ''Kz1tZT09PWxlLmxlbmd0aD9sZTpsZS5zbGljZSgwLGVlKSwwPT0oZWUtPW1lKSl7bWU9PT1sZS5sZW5ndGg/KCsrcmUsdGhpcy5oZWFkPUoubmV4dD9KLm5leHQ6dGhpcy50YWlsPW51bGwpOih0aGlzLmhlYWQ9SixKLmRhdGE9bGUuc2xpY2UobWUpKTticmVha30rK3JlfXJldHVybiB0aGlz''@;'; put 'put ''Lmxlbmd0aC09cmUsaWV9fSx7a2V5OiJfZ2V0QnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlZSl7dmFyIEo9Ti5hbGxvY1Vuc2FmZShlZSkscmU9dGhpcy5oZWFkLGllPTE7Zm9yKHJlLmRhdGEuY29weShKKSxlZS09cmUuZGF0YS5sZW5ndGg7cmU9cmUubmV4dDspe3ZhciBsZT1yZS5kYXRhLG1l''@;'; put 'put ''PWVlPmxlLmxlbmd0aD9sZS5sZW5ndGg6ZWU7aWYobGUuY29weShKLEoubGVuZ3RoLWVlLDAsbWUpLDA9PShlZS09bWUpKXttZT09PWxlLmxlbmd0aD8oKytpZSx0aGlzLmhlYWQ9cmUubmV4dD9yZS5uZXh0OnRoaXMudGFpbD1udWxsKToodGhpcy5oZWFkPXJlLHJlLmRhdGE9bGUuc2xpY2Uo''@;'; put 'put ''bWUpKTticmVha30rK2llfXJldHVybiB0aGlzLmxlbmd0aC09aWUsSn19LHtrZXk6VSx2YWx1ZTpmdW5jdGlvbihlZSxKKXtyZXR1cm4gSyh0aGlzLHkoeSh7fSxKKSx7fSx7ZGVwdGg6MCxjdXN0b21JbnNwZWN0OiExfSkpfX1dKSxZfSgpfSwxMTk1Oih1ZSxxLF8pPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBJPV8oNDE1NSk7ZnVuY3Rpb24gZyhPLHope1AoTyx6KSxCKE8pfWZ1bmN0aW9uIEIoTyl7Ty5fd3JpdGFibGVTdGF0ZSYmIU8uX3dyaXRhYmxlU3RhdGUuZW1pdENsb3NlfHxPLl9yZWFkYWJsZVN0YXRlJiYhTy5fcmVhZGFibGVTdGF0ZS5lbWl0Q2xvc2V8fE8uZW1pdCgiY2xvc2Ui''@;'; put 'put ''KX1mdW5jdGlvbiBQKE8seil7Ty5lbWl0KCJlcnJvciIseil9dWUuZXhwb3J0cz17ZGVzdHJveTpmdW5jdGlvbiB5KE8seil7dmFyIE49dGhpcztyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR8fHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRo''@;'; put 'put ''aXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPyh6P3ooTyk6TyYmKHRoaXMuX3dyaXRhYmxlU3RhdGU/dGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWR8fCh0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxJLm5leHRUaWNrKFAsdGhpcyxPKSk6SS5uZXh0VGljayhQ''@;'; put 'put ''LHRoaXMsTykpLHRoaXMpOih0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fZGVzdHJveShPfHxudWxsLGZ1bmN0aW9uKFUpeyF6''@;'; put 'put ''JiZVP04uX3dyaXRhYmxlU3RhdGU/Ti5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ/SS5uZXh0VGljayhCLE4pOihOLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxJLm5leHRUaWNrKGcsTixVKSk6SS5uZXh0VGljayhnLE4sVSk6ej8oSS5uZXh0VGljayhCLE4pLHooVSkpOkku''@;'; put 'put ''bmV4dFRpY2soQixOKX0pLHRoaXMpfSx1bmRlc3Ryb3k6ZnVuY3Rpb24gdygpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRpbmc9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlz''@;'; put 'put ''Ll9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQ9ITEpLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUu''@;'; put 'put ''ZmluYWxDYWxsZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5wcmVmaW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSExKX0sZXJyb3JPckRlc3Ryb3k6ZnVuY3Rpb24gRihPLHope3ZhciBOPU8uX3JlYWRh''@;'; put 'put ''YmxlU3RhdGUsTD1PLl93cml0YWJsZVN0YXRlO04mJk4uYXV0b0Rlc3Ryb3l8fEwmJkwuYXV0b0Rlc3Ryb3k/Ty5kZXN0cm95KHopOk8uZW1pdCgiZXJyb3IiLHopfX19LDg2MTA6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg0MjgxKS5xLkVSUl9TVFJFQU1fUFJFTUFUVVJFX0NM''@;'; put 'put ''T1NFO2Z1bmN0aW9uIGcoKXt9dWUuZXhwb3J0cz1mdW5jdGlvbiB3KFAsRixPKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgRilyZXR1cm4gdyhQLG51bGwsRik7Rnx8KEY9e30pLE89ZnVuY3Rpb24geShQKXt2YXIgRj0hMTtyZXR1cm4gZnVuY3Rpb24oKXtpZighRil7Rj0hMDtmb3IodmFyIE89''@;'; put 'put ''YXJndW1lbnRzLmxlbmd0aCx6PW5ldyBBcnJheShPKSxOPTA7TjxPO04rKyl6W05dPWFyZ3VtZW50c1tOXTtQLmFwcGx5KHRoaXMseil9fX0oT3x8Zyk7dmFyIHo9Ri5yZWFkYWJsZXx8ITEhPT1GLnJlYWRhYmxlJiZQLnJlYWRhYmxlLE49Ri53cml0YWJsZXx8ITEhPT1GLndyaXRhYmxlJiZQ''@;'; put 'put ''LndyaXRhYmxlLEw9ZnVuY3Rpb24oKXtQLndyaXRhYmxlfHxVKCl9LEs9UC5fd3JpdGFibGVTdGF0ZSYmUC5fd3JpdGFibGVTdGF0ZS5maW5pc2hlZCxVPWZ1bmN0aW9uKCl7Tj0hMSxLPSEwLHp8fE8uY2FsbChQKX0sVz1QLl9yZWFkYWJsZVN0YXRlJiZQLl9yZWFkYWJsZVN0YXRlLmVuZEVt''@;'; put 'put ''aXR0ZWQsWT1mdW5jdGlvbigpe3o9ITEsVz0hMCxOfHxPLmNhbGwoUCl9LFg9ZnVuY3Rpb24oaWUpe08uY2FsbChQLGllKX0sZWU9ZnVuY3Rpb24oKXt2YXIgaWU7cmV0dXJuIHomJiFXPygoIVAuX3JlYWRhYmxlU3RhdGV8fCFQLl9yZWFkYWJsZVN0YXRlLmVuZGVkKSYmKGllPW5ldyBJKSxP''@;'; put 'put ''LmNhbGwoUCxpZSkpOk4mJiFLPygoIVAuX3dyaXRhYmxlU3RhdGV8fCFQLl93cml0YWJsZVN0YXRlLmVuZGVkKSYmKGllPW5ldyBJKSxPLmNhbGwoUCxpZSkpOnZvaWQgMH0sSj1mdW5jdGlvbigpe1AucmVxLm9uKCJmaW5pc2giLFUpfTtyZXR1cm4gZnVuY3Rpb24gQihQKXtyZXR1cm4gUC5z''@;'; put 'put ''ZXRIZWFkZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBQLmFib3J0fShQKT8oUC5vbigiY29tcGxldGUiLFUpLFAub24oImFib3J0IixlZSksUC5yZXE/SigpOlAub24oInJlcXVlc3QiLEopKTpOJiYhUC5fd3JpdGFibGVTdGF0ZSYmKFAub24oImVuZCIsTCksUC5vbigiY2xvc2UiLEwpKSxQLm9u''@;'; put 'put ''KCJlbmQiLFkpLFAub24oImZpbmlzaCIsVSksITEhPT1GLmVycm9yJiZQLm9uKCJlcnJvciIsWCksUC5vbigiY2xvc2UiLGVlKSxmdW5jdGlvbigpe1AucmVtb3ZlTGlzdGVuZXIoImNvbXBsZXRlIixVKSxQLnJlbW92ZUxpc3RlbmVyKCJhYm9ydCIsZWUpLFAucmVtb3ZlTGlzdGVuZXIoInJl''@;'; put 'put ''cXVlc3QiLEopLFAucmVxJiZQLnJlcS5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixVKSxQLnJlbW92ZUxpc3RlbmVyKCJlbmQiLEwpLFAucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixMKSxQLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLFUpLFAucmVtb3ZlTGlzdGVuZXIoImVuZCIsWSksUC5yZW1v''@;'; put 'put ''dmVMaXN0ZW5lcigiZXJyb3IiLFgpLFAucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixlZSl9fX0sNTE2Nzp1ZT0+e3VlLmV4cG9ydHM9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIlJlYWRhYmxlLmZyb20gaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnJvd3NlciIpfX0sOTk0NjoodWUscSxf''@;'; put 'put ''KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSSxnPV8oNDI4MSkucSxCPWcuRVJSX01JU1NJTkdfQVJHUyx3PWcuRVJSX1NUUkVBTV9ERVNUUk9ZRUQ7ZnVuY3Rpb24gUChVKXtpZihVKXRocm93IFV9ZnVuY3Rpb24geihVKXtVKCl9ZnVuY3Rpb24gTihVLFcpe3JldHVybiBVLnBpcGUoVyl9dWUuZXhw''@;'; put 'put ''b3J0cz1mdW5jdGlvbiBLKCl7Zm9yKHZhciBVPWFyZ3VtZW50cy5sZW5ndGgsVz1uZXcgQXJyYXkoVSksWT0wO1k8VTtZKyspV1tZXT1hcmd1bWVudHNbWV07dmFyIFg9ZnVuY3Rpb24gTChVKXtyZXR1cm4gVS5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBVW1UubGVuZ3RoLTFdP1UucG9w''@;'; put 'put ''KCk6UH0oVyk7aWYoQXJyYXkuaXNBcnJheShXWzBdKSYmKFc9V1swXSksVy5sZW5ndGg8Mil0aHJvdyBuZXcgQigic3RyZWFtcyIpO3ZhciBlZSxKPVcubWFwKGZ1bmN0aW9uKHJlLGllKXt2YXIgbGU9aWU8Vy5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24gTyhVLFcsWSxYKXtYPWZ1bmN0aW9u''@;'; put 'put ''IHkoVSl7dmFyIFc9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7V3x8KFc9ITAsVS5hcHBseSh2b2lkIDAsYXJndW1lbnRzKSl9fShYKTt2YXIgZWU9ITE7VS5vbigiY2xvc2UiLGZ1bmN0aW9uKCl7ZWU9ITB9KSx2b2lkIDA9PT1JJiYoST1fKDg2MTApKSxJKFUse3JlYWRhYmxlOlcsd3JpdGFibGU6''@;'; put 'put ''WX0sZnVuY3Rpb24ocmUpe2lmKHJlKXJldHVybiBYKHJlKTtlZT0hMCxYKCl9KTt2YXIgSj0hMTtyZXR1cm4gZnVuY3Rpb24ocmUpe2lmKCFlZSYmIUope2lmKEo9ITAsZnVuY3Rpb24gRihVKXtyZXR1cm4gVS5zZXRIZWFkZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBVLmFib3J0fShVKSlyZXR1''@;'; put 'put ''cm4gVS5hYm9ydCgpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBVLmRlc3Ryb3kpcmV0dXJuIFUuZGVzdHJveSgpO1gocmV8fG5ldyB3KCJwaXBlIikpfX19KHJlLGxlLGllPjAsZnVuY3Rpb24oX2Upe2VlfHwoZWU9X2UpLF9lJiZKLmZvckVhY2goeiksIWxlJiYoSi5mb3JFYWNoKHopLFgoZWUp''@;'; put 'put ''KX0pfSk7cmV0dXJuIFcucmVkdWNlKE4pfX0sMjQ1NzoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDQyODEpLnEuRVJSX0lOVkFMSURfT1BUX1ZBTFVFO3VlLmV4cG9ydHM9e2dldEhpZ2hXYXRlck1hcms6ZnVuY3Rpb24gZyhCLHcsUCxGKXt2YXIgTz1mdW5jdGlvbiB5KEIsdyxQ''@;'; put 'put ''KXtyZXR1cm4gbnVsbCE9Qi5oaWdoV2F0ZXJNYXJrP0IuaGlnaFdhdGVyTWFyazp3P0JbUF06bnVsbH0odyxGLFApO2lmKG51bGwhPU8pe2lmKCFpc0Zpbml0ZShPKXx8TWF0aC5mbG9vcihPKSE9PU98fE88MCl0aHJvdyBuZXcgSShGP1A6ImhpZ2hXYXRlck1hcmsiLE8pO3JldHVybiBNYXRo''@;'; put 'put ''LmZsb29yKE8pfXJldHVybiBCLm9iamVjdE1vZGU/MTY6MTYzODR9fX0sMjUwMzoodWUscSxfKT0+e3VlLmV4cG9ydHM9Xyg3MTg3KS5FdmVudEVtaXR0ZXJ9LDc0MTg6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1mdW5jdGlvbihfLEkpe2lmKEk9SS5zcGxpdCgiOiIpWzBdLCEoXz0r''@;'; put 'put ''XykpcmV0dXJuITE7c3dpdGNoKEkpe2Nhc2UiaHR0cCI6Y2FzZSJ3cyI6cmV0dXJuIDgwIT09XztjYXNlImh0dHBzIjpjYXNlIndzcyI6cmV0dXJuIDQ0MyE9PV87Y2FzZSJmdHAiOnJldHVybiAyMSE9PV87Y2FzZSJnb3BoZXIiOnJldHVybiA3MCE9PV87Y2FzZSJmaWxlIjpyZXR1cm4hMX1y''@;'; put 'put ''ZXR1cm4gMCE9PV99fSw5Nzg1Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oODc2NCkuQnVmZmVyLHk9Xyg1NzE3KSxnPV8oMzM0OSksQj1uZXcgQXJyYXkoMTYpLHc9WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsNyw0LDEzLDEsMTAsNiwxNSwzLDEyLDAs''@;'; put 'put ''OSw1LDIsMTQsMTEsOCwzLDEwLDE0LDQsOSwxNSw4LDEsMiw3LDAsNiwxMywxMSw1LDEyLDEsOSwxMSwxMCwwLDgsMTIsNCwxMywzLDcsMTUsMTQsNSw2LDIsNCwwLDUsOSw3LDEyLDIsMTAsMTQsMSwzLDgsMTEsNiwxNSwxM10sUD1bNSwxNCw3LDAsOSwyLDExLDQsMTMsNiwxNSw4LDEsMTAs''@;'; put 'put ''MywxMiw2LDExLDMsNywwLDEzLDUsMTAsMTQsMTUsOCwxMiw0LDksMSwyLDE1LDUsMSwzLDcsMTQsNiw5LDExLDgsMTIsMiwxMCwwLDQsMTMsOCw2LDQsMSwzLDExLDE1LDAsNSwxMiwyLDEzLDksNywxMCwxNCwxMiwxNSwxMCw0LDEsNSw4LDcsNiwyLDEzLDE0LDAsMyw5LDExXSxGPVsxMSwx''@;'; put 'put ''NCwxNSwxMiw1LDgsNyw5LDExLDEzLDE0LDE1LDYsNyw5LDgsNyw2LDgsMTMsMTEsOSw3LDE1LDcsMTIsMTUsOSwxMSw3LDEzLDEyLDExLDEzLDYsNywxNCw5LDEzLDE1LDE0LDgsMTMsNiw1LDEyLDcsNSwxMSwxMiwxNCwxNSwxNCwxNSw5LDgsOSwxNCw1LDYsOCw2LDUsMTIsOSwxNSw1LDEx''@;'; put 'put ''LDYsOCwxMywxMiw1LDEyLDEzLDE0LDExLDgsNSw2XSxPPVs4LDksOSwxMSwxMywxNSwxNSw1LDcsNyw4LDExLDE0LDE0LDEyLDYsOSwxMywxNSw3LDEyLDgsOSwxMSw3LDcsMTIsNyw2LDE1LDEzLDExLDksNywxNSwxMSw4LDYsNiwxNCwxMiwxMyw1LDE0LDEzLDEzLDcsNSwxNSw1LDgsMTEs''@;'; put 'put ''MTQsMTQsNiwxNCw2LDksMTIsOSwxMiw1LDE1LDgsOCw1LDEyLDksMTIsNSwxNCw2LDgsMTMsNiw1LDE1LDEzLDExLDExXSx6PVswLDE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDI4NDA4NTM4MzhdLE49WzEzNTI4Mjk5MjYsMTU0ODYwMzY4NCwxODM2MDcyNjkxLDIwNTM5OTQy''@;'; put 'put ''MTcsMF07ZnVuY3Rpb24gTCgpe2cuY2FsbCh0aGlzLDY0KSx0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OCx0aGlzLl9lPTMyODUzNzc1MjB9ZnVuY3Rpb24gSyhKLHJlKXtyZXR1cm4gSjw8cmV8Sj4+PjMy''@;'; put 'put ''LXJlfWZ1bmN0aW9uIFUoSixyZSxpZSxsZSxtZSxfZSxUZSxTZSl7cmV0dXJuIEsoSisocmVeaWVebGUpK19lK1RlfDAsU2UpK21lfDB9ZnVuY3Rpb24gVyhKLHJlLGllLGxlLG1lLF9lLFRlLFNlKXtyZXR1cm4gSyhKKyhyZSZpZXx+cmUmbGUpK19lK1RlfDAsU2UpK21lfDB9ZnVuY3Rpb24g''@;'; put 'put ''WShKLHJlLGllLGxlLG1lLF9lLFRlLFNlKXtyZXR1cm4gSyhKKygocmV8fmllKV5sZSkrX2UrVGV8MCxTZSkrbWV8MH1mdW5jdGlvbiBYKEoscmUsaWUsbGUsbWUsX2UsVGUsU2Upe3JldHVybiBLKEorKHJlJmxlfGllJn5sZSkrX2UrVGV8MCxTZSkrbWV8MH1mdW5jdGlvbiBlZShKLHJlLGll''@;'; put 'put ''LGxlLG1lLF9lLFRlLFNlKXtyZXR1cm4gSyhKKyhyZV4oaWV8fmxlKSkrX2UrVGV8MCxTZSkrbWV8MH15KEwsZyksTC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe2Zvcih2YXIgSj1CLHJlPTA7cmU8MTY7KytyZSlKW3JlXT10aGlzLl9ibG9jay5yZWFkSW50MzJMRSg0KnJlKTtmb3Io''@;'; put 'put ''dmFyIGllPTB8dGhpcy5fYSxsZT0wfHRoaXMuX2IsbWU9MHx0aGlzLl9jLF9lPTB8dGhpcy5fZCxUZT0wfHRoaXMuX2UsU2U9MHx0aGlzLl9hLHplPTB8dGhpcy5fYixWPTB8dGhpcy5fYyxwPTB8dGhpcy5fZCxiPTB8dGhpcy5fZSx4PTA7eDw4MDt4Kz0xKXt2YXIgQyxUO3g8MTY/KEM9VShp''@;'; put 'put ''ZSxsZSxtZSxfZSxUZSxKW3dbeF1dLHpbMF0sRlt4XSksVD1lZShTZSx6ZSxWLHAsYixKW1BbeF1dLE5bMF0sT1t4XSkpOng8MzI/KEM9VyhpZSxsZSxtZSxfZSxUZSxKW3dbeF1dLHpbMV0sRlt4XSksVD1YKFNlLHplLFYscCxiLEpbUFt4XV0sTlsxXSxPW3hdKSk6eDw0OD8oQz1ZKGllLGxl''@;'; put 'put ''LG1lLF9lLFRlLEpbd1t4XV0selsyXSxGW3hdKSxUPVkoU2UsemUsVixwLGIsSltQW3hdXSxOWzJdLE9beF0pKTp4PDY0PyhDPVgoaWUsbGUsbWUsX2UsVGUsSlt3W3hdXSx6WzNdLEZbeF0pLFQ9VyhTZSx6ZSxWLHAsYixKW1BbeF1dLE5bM10sT1t4XSkpOihDPWVlKGllLGxlLG1lLF9lLFRl''@;'; put 'put ''LEpbd1t4XV0sels0XSxGW3hdKSxUPVUoU2UsemUsVixwLGIsSltQW3hdXSxOWzRdLE9beF0pKSxpZT1UZSxUZT1fZSxfZT1LKG1lLDEwKSxtZT1sZSxsZT1DLFNlPWIsYj1wLHA9SyhWLDEwKSxWPXplLHplPVR9dmFyIEg9dGhpcy5fYittZStwfDA7dGhpcy5fYj10aGlzLl9jK19lK2J8MCx0''@;'; put 'put ''aGlzLl9jPXRoaXMuX2QrVGUrU2V8MCx0aGlzLl9kPXRoaXMuX2UraWUremV8MCx0aGlzLl9lPXRoaXMuX2ErbGUrVnwwLHRoaXMuX2E9SH0sTC5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbigpe3RoaXMuX2Jsb2NrW3RoaXMuX2Jsb2NrT2Zmc2V0KytdPTEyOCx0aGlzLl9ibG9ja09mZnNl''@;'; put 'put ''dD41NiYmKHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9ibG9ja09mZnNldCw2NCksdGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MCksdGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2NrT2Zmc2V0LDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMuX2xlbmd0aFsw''@;'; put 'put ''XSw1NiksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJMRSh0aGlzLl9sZW5ndGhbMV0sNjApLHRoaXMuX3VwZGF0ZSgpO3ZhciBKPUkuYWxsb2M/SS5hbGxvYygyMCk6bmV3IEkoMjApO3JldHVybiBKLndyaXRlSW50MzJMRSh0aGlzLl9hLDApLEoud3JpdGVJbnQzMkxFKHRoaXMuX2IsNCksSi53''@;'; put 'put ''cml0ZUludDMyTEUodGhpcy5fYyw4KSxKLndyaXRlSW50MzJMRSh0aGlzLl9kLDEyKSxKLndyaXRlSW50MzJMRSh0aGlzLl9lLDE2KSxKfSx1ZS5leHBvcnRzPUx9LDk1MDk6KHVlLHEsXyk9Pnt2YXIgST1fKDg3NjQpLHk9SS5CdWZmZXI7ZnVuY3Rpb24gZyh3LFApe2Zvcih2YXIgRiBpbiB3''@;'; put 'put ''KVBbRl09d1tGXX1mdW5jdGlvbiBCKHcsUCxGKXtyZXR1cm4geSh3LFAsRil9eS5mcm9tJiZ5LmFsbG9jJiZ5LmFsbG9jVW5zYWZlJiZ5LmFsbG9jVW5zYWZlU2xvdz91ZS5leHBvcnRzPUk6KGcoSSxxKSxxLkJ1ZmZlcj1CKSxCLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHkucHJvdG90eXBl''@;'; put 'put ''KSxnKHksQiksQi5mcm9tPWZ1bmN0aW9uKHcsUCxGKXtpZigibnVtYmVyIj09dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXIiKTtyZXR1cm4geSh3LFAsRil9LEIuYWxsb2M9ZnVuY3Rpb24odyxQLEYpe2lmKCJudW1iZXIiIT10eXBl''@;'; put 'put ''b2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7dmFyIE89eSh3KTtyZXR1cm4gdm9pZCAwIT09UD8ic3RyaW5nIj09dHlwZW9mIEY/Ty5maWxsKFAsRik6Ty5maWxsKFApOk8uZmlsbCgwKSxPfSxCLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHcpe2lm''@;'; put 'put ''KCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIHkodyl9LEIuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKHcpe2lmKCJudW1iZXIiIT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBt''@;'; put 'put ''dXN0IGJlIGEgbnVtYmVyIik7cmV0dXJuIEkuU2xvd0J1ZmZlcih3KX19LDkyNDY6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg3Mzc5KSx5PV8oODQyMCksZz1JKCJSZWdFeHAucHJvdG90eXBlLmV4ZWMiKSxCPV8oNDQ1Myk7dWUuZXhwb3J0cz1mdW5jdGlvbihQKXtpZigheShQ''@;'; put 'put ''KSl0aHJvdyBuZXcgQigiYHJlZ2V4YCBtdXN0IGJlIGEgUmVnRXhwIik7cmV0dXJuIGZ1bmN0aW9uKE8pe3JldHVybiBudWxsIT09ZyhQLE8pfX19LDc3NzE6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9XygyMTApLHk9XygyMjk2KSxnPV8oMTA0NCkoKSxCPV8oNzI5Niksdz1fKDQ0''@;'; put 'put ''NTMpLFA9SSgiJU1hdGguZmxvb3IlIik7dWUuZXhwb3J0cz1mdW5jdGlvbihPLHope2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBPKXRocm93IG5ldyB3KCJgZm5gIGlzIG5vdCBhIGZ1bmN0aW9uIik7aWYoIm51bWJlciIhPXR5cGVvZiB6fHx6PDB8fHo+NDI5NDk2NzI5NXx8UCh6KSE9PXopdGhy''@;'; put 'put ''b3cgbmV3IHcoImBsZW5ndGhgIG11c3QgYmUgYSBwb3NpdGl2ZSAzMi1iaXQgaW50ZWdlciIpO3ZhciBOPWFyZ3VtZW50cy5sZW5ndGg+MiYmISFhcmd1bWVudHNbMl0sTD0hMCxLPSEwO2lmKCJsZW5ndGgiaW4gTyYmQil7dmFyIFU9QihPLCJsZW5ndGgiKTtVJiYhVS5jb25maWd1cmFibGUm''@;'; put 'put ''JihMPSExKSxVJiYhVS53cml0YWJsZSYmKEs9ITEpfXJldHVybihMfHxLfHwhTikmJihnP3koTywibGVuZ3RoIix6LCEwLCEwKTp5KE8sImxlbmd0aCIseikpLE99fSw0MTg5Oih1ZSxxLF8pPT57dmFyIEk9Xyg5NTA5KS5CdWZmZXI7ZnVuY3Rpb24geShnLEIpe3RoaXMuX2Jsb2NrPUkuYWxs''@;'; put 'put ''b2MoZyksdGhpcy5fZmluYWxTaXplPUIsdGhpcy5fYmxvY2tTaXplPWcsdGhpcy5fbGVuPTB9eS5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKGcsQil7InN0cmluZyI9PXR5cGVvZiBnJiYoZz1JLmZyb20oZyxCPUJ8fCJ1dGY4IikpO2Zvcih2YXIgdz10aGlzLl9ibG9jayxQPXRoaXMuX2Js''@;'; put 'put ''b2NrU2l6ZSxGPWcubGVuZ3RoLE89dGhpcy5fbGVuLHo9MDt6PEY7KXtmb3IodmFyIE49TyVQLEw9TWF0aC5taW4oRi16LFAtTiksSz0wO0s8TDtLKyspd1tOK0tdPWdbeitLXTt6Kz1MLChPKz1MKSVQPT0wJiZ0aGlzLl91cGRhdGUodyl9cmV0dXJuIHRoaXMuX2xlbis9Rix0aGlzfSx5LnBy''@;'; put 'put ''b3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oZyl7dmFyIEI9dGhpcy5fbGVuJXRoaXMuX2Jsb2NrU2l6ZTt0aGlzLl9ibG9ja1tCXT0xMjgsdGhpcy5fYmxvY2suZmlsbCgwLEIrMSksQj49dGhpcy5fZmluYWxTaXplJiYodGhpcy5fdXBkYXRlKHRoaXMuX2Jsb2NrKSx0aGlzLl9ibG9jay5maWxs''@;'; put 'put ''KDApKTt2YXIgdz04KnRoaXMuX2xlbjtpZih3PD00Mjk0OTY3Mjk1KXRoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUodyx0aGlzLl9ibG9ja1NpemUtNCk7ZWxzZXt2YXIgUD0oNDI5NDk2NzI5NSZ3KT4+PjA7dGhpcy5fYmxvY2sud3JpdGVVSW50MzJCRSgody1QKS80Mjk0OTY3Mjk2LHRoaXMu''@;'; put 'put ''X2Jsb2NrU2l6ZS04KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkJFKFAsdGhpcy5fYmxvY2tTaXplLTQpfXRoaXMuX3VwZGF0ZSh0aGlzLl9ibG9jayk7dmFyIE89dGhpcy5faGFzaCgpO3JldHVybiBnP08udG9TdHJpbmcoZyk6T30seS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe3Ro''@;'; put 'put ''cm93IG5ldyBFcnJvcigiX3VwZGF0ZSBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzIil9LHVlLmV4cG9ydHM9eX0sOTA3MjoodWUscSxfKT0+e3ZhciBJPXVlLmV4cG9ydHM9ZnVuY3Rpb24oZyl7Zz1nLnRvTG93ZXJDYXNlKCk7dmFyIEI9SVtnXTtpZighQil0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoZysiIGlzIG5vdCBzdXBwb3J0ZWQgKHdlIGFjY2VwdCBwdWxsIHJlcXVlc3RzKSIpO3JldHVybiBuZXcgQn07SS5zaGE9Xyg0NDQ4KSxJLnNoYTE9Xyg4MzM2KSxJLnNoYTIyND1fKDg0MzIpLEkuc2hhMjU2PV8oNzQ5OSksSS5zaGEzODQ9XygxNjg2KSxJLnNoYTUxMj1fKDc4MTYpfSw0''@;'; put 'put ''NDQ4Oih1ZSxxLF8pPT57dmFyIEk9Xyg1NzE3KSx5PV8oNDE4OSksZz1fKDk1MDkpLkJ1ZmZlcixCPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsLTE4OTQwMDc1ODgsLTg5OTQ5NzUxNF0sdz1uZXcgQXJyYXkoODApO2Z1bmN0aW9uIFAoKXt0aGlzLmluaXQoKSx0aGlzLl93PXcseS5jYWxsKHRo''@;'; put 'put ''aXMsNjQsNTYpfWZ1bmN0aW9uIEYoTil7cmV0dXJuIE48PDV8Tj4+PjI3fWZ1bmN0aW9uIE8oTil7cmV0dXJuIE48PDMwfE4+Pj4yfWZ1bmN0aW9uIHooTixMLEssVSl7cmV0dXJuIDA9PT1OP0wmS3x+TCZVOjI9PT1OP0wmS3xMJlV8SyZVOkxeS15VfUkoUCx5KSxQLnByb3RvdHlwZS5pbml0''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMCx0aGlzfSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKE4pe2Zvcih2YXIgTD10aGlz''@;'; put 'put ''Ll93LEs9MHx0aGlzLl9hLFU9MHx0aGlzLl9iLFc9MHx0aGlzLl9jLFk9MHx0aGlzLl9kLFg9MHx0aGlzLl9lLGVlPTA7ZWU8MTY7KytlZSlMW2VlXT1OLnJlYWRJbnQzMkJFKDQqZWUpO2Zvcig7ZWU8ODA7KytlZSlMW2VlXT1MW2VlLTNdXkxbZWUtOF1eTFtlZS0xNF1eTFtlZS0xNl07Zm9y''@;'; put 'put ''KHZhciBKPTA7Sjw4MDsrK0ope3ZhciByZT1+fihKLzIwKSxpZT1GKEspK3oocmUsVSxXLFkpK1grTFtKXStCW3JlXXwwO1g9WSxZPVcsVz1PKFUpLFU9SyxLPWllfXRoaXMuX2E9Syt0aGlzLl9hfDAsdGhpcy5fYj1VK3RoaXMuX2J8MCx0aGlzLl9jPVcrdGhpcy5fY3wwLHRoaXMuX2Q9WSt0''@;'; put 'put ''aGlzLl9kfDAsdGhpcy5fZT1YK3RoaXMuX2V8MH0sUC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgTj1nLmFsbG9jVW5zYWZlKDIwKTtyZXR1cm4gTi53cml0ZUludDMyQkUoMHx0aGlzLl9hLDApLE4ud3JpdGVJbnQzMkJFKDB8dGhpcy5fYiw0KSxOLndyaXRlSW50MzJCRSgwfHRo''@;'; put 'put ''aXMuX2MsOCksTi53cml0ZUludDMyQkUoMHx0aGlzLl9kLDEyKSxOLndyaXRlSW50MzJCRSgwfHRoaXMuX2UsMTYpLE59LHVlLmV4cG9ydHM9UH0sODMzNjoodWUscSxfKT0+e3ZhciBJPV8oNTcxNykseT1fKDQxODkpLGc9Xyg5NTA5KS5CdWZmZXIsQj1bMTUxODUwMDI0OSwxODU5Nzc1Mzkz''@;'; put 'put ''LC0xODk0MDA3NTg4LC04OTk0OTc1MTRdLHc9bmV3IEFycmF5KDgwKTtmdW5jdGlvbiBQKCl7dGhpcy5pbml0KCksdGhpcy5fdz13LHkuY2FsbCh0aGlzLDY0LDU2KX1mdW5jdGlvbiBGKEwpe3JldHVybiBMPDwxfEw+Pj4zMX1mdW5jdGlvbiBPKEwpe3JldHVybiBMPDw1fEw+Pj4yN31mdW5j''@;'; put 'put ''dGlvbiB6KEwpe3JldHVybiBMPDwzMHxMPj4+Mn1mdW5jdGlvbiBOKEwsSyxVLFcpe3JldHVybiAwPT09TD9LJlV8fksmVzoyPT09TD9LJlV8SyZXfFUmVzpLXlVeV31JKFAseSksUC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00''@;'; put 'put ''MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OCx0aGlzLl9lPTMyODUzNzc1MjAsdGhpc30sUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihMKXtmb3IodmFyIEs9dGhpcy5fdyxVPTB8dGhpcy5fYSxXPTB8dGhpcy5fYixZPTB8dGhpcy5fYyxYPTB8dGhp''@;'; put 'put ''cy5fZCxlZT0wfHRoaXMuX2UsSj0wO0o8MTY7KytKKUtbSl09TC5yZWFkSW50MzJCRSg0KkopO2Zvcig7Sjw4MDsrK0opS1tKXT1GKEtbSi0zXV5LW0otOF1eS1tKLTE0XV5LW0otMTZdKTtmb3IodmFyIHJlPTA7cmU8ODA7KytyZSl7dmFyIGllPX5+KHJlLzIwKSxsZT1PKFUpK04oaWUsVyxZ''@;'; put 'put ''LFgpK2VlK0tbcmVdK0JbaWVdfDA7ZWU9WCxYPVksWT16KFcpLFc9VSxVPWxlfXRoaXMuX2E9VSt0aGlzLl9hfDAsdGhpcy5fYj1XK3RoaXMuX2J8MCx0aGlzLl9jPVkrdGhpcy5fY3wwLHRoaXMuX2Q9WCt0aGlzLl9kfDAsdGhpcy5fZT1lZSt0aGlzLl9lfDB9LFAucHJvdG90eXBlLl9oYXNo''@;'; put 'put ''PWZ1bmN0aW9uKCl7dmFyIEw9Zy5hbGxvY1Vuc2FmZSgyMCk7cmV0dXJuIEwud3JpdGVJbnQzMkJFKDB8dGhpcy5fYSwwKSxMLndyaXRlSW50MzJCRSgwfHRoaXMuX2IsNCksTC53cml0ZUludDMyQkUoMHx0aGlzLl9jLDgpLEwud3JpdGVJbnQzMkJFKDB8dGhpcy5fZCwxMiksTC53cml0ZUlu''@;'; put 'put ''dDMyQkUoMHx0aGlzLl9lLDE2KSxMfSx1ZS5leHBvcnRzPVB9LDg0MzI6KHVlLHEsXyk9Pnt2YXIgST1fKDU3MTcpLHk9Xyg3NDk5KSxnPV8oNDE4OSksQj1fKDk1MDkpLkJ1ZmZlcix3PW5ldyBBcnJheSg2NCk7ZnVuY3Rpb24gUCgpe3RoaXMuaW5pdCgpLHRoaXMuX3c9dyxnLmNhbGwodGhp''@;'; put 'put ''cyw2NCw1Nil9SShQLHkpLFAucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0zMjM4MzcxMDMyLHRoaXMuX2I9OTE0MTUwNjYzLHRoaXMuX2M9ODEyNzAyOTk5LHRoaXMuX2Q9NDE0NDkxMjY5Nyx0aGlzLl9lPTQyOTA3NzU4NTcsdGhpcy5fZj0xNzUwNjAzMDI1LHRo''@;'; put 'put ''aXMuX2c9MTY5NDA3NjgzOSx0aGlzLl9oPTMyMDQwNzU0MjgsdGhpc30sUC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgRj1CLmFsbG9jVW5zYWZlKDI4KTtyZXR1cm4gRi53cml0ZUludDMyQkUodGhpcy5fYSwwKSxGLndyaXRlSW50MzJCRSh0aGlzLl9iLDQpLEYud3JpdGVJbnQz''@;'; put 'put ''MkJFKHRoaXMuX2MsOCksRi53cml0ZUludDMyQkUodGhpcy5fZCwxMiksRi53cml0ZUludDMyQkUodGhpcy5fZSwxNiksRi53cml0ZUludDMyQkUodGhpcy5fZiwyMCksRi53cml0ZUludDMyQkUodGhpcy5fZywyNCksRn0sdWUuZXhwb3J0cz1QfSw3NDk5Oih1ZSxxLF8pPT57dmFyIEk9Xyg1''@;'; put 'put ''NzE3KSx5PV8oNDE4OSksZz1fKDk1MDkpLkJ1ZmZlcixCPVsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4Nywx''@;'; put 'put ''OTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEw''@;'; put 'put ''MzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4''@;'; put 'put ''MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIy''@;'; put 'put ''NzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdLHc9bmV3IEFycmF5KDY0KTtmdW5jdGlvbiBQKCl7dGhpcy5pbml0KCksdGhpcy5fdz13LHkuY2FsbCh0aGlzLDY0LDU2KX1mdW5jdGlvbiBGKFUsVyxZKXtyZXR1cm4gWV5VJihX''@;'; put 'put ''XlkpfWZ1bmN0aW9uIE8oVSxXLFkpe3JldHVybiBVJld8WSYoVXxXKX1mdW5jdGlvbiB6KFUpe3JldHVybihVPj4+MnxVPDwzMCleKFU+Pj4xM3xVPDwxOSleKFU+Pj4yMnxVPDwxMCl9ZnVuY3Rpb24gTihVKXtyZXR1cm4oVT4+PjZ8VTw8MjYpXihVPj4+MTF8VTw8MjEpXihVPj4+MjV8VTw8''@;'; put 'put ''Nyl9ZnVuY3Rpb24gTChVKXtyZXR1cm4oVT4+Pjd8VTw8MjUpXihVPj4+MTh8VTw8MTQpXlU+Pj4zfWZ1bmN0aW9uIEsoVSl7cmV0dXJuKFU+Pj4xN3xVPDwxNSleKFU+Pj4xOXxVPDwxMyleVT4+PjEwfUkoUCx5KSxQLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9''@;'; put 'put ''MTc3OTAzMzcwMyx0aGlzLl9iPTMxNDQxMzQyNzcsdGhpcy5fYz0xMDEzOTA0MjQyLHRoaXMuX2Q9Mjc3MzQ4MDc2Mix0aGlzLl9lPTEzNTk4OTMxMTksdGhpcy5fZj0yNjAwODIyOTI0LHRoaXMuX2c9NTI4NzM0NjM1LHRoaXMuX2g9MTU0MTQ1OTIyNSx0aGlzfSxQLnByb3RvdHlwZS5fdXBk''@;'; put 'put ''YXRlPWZ1bmN0aW9uKFUpe2Zvcih2YXIgVz10aGlzLl93LFk9MHx0aGlzLl9hLFg9MHx0aGlzLl9iLGVlPTB8dGhpcy5fYyxKPTB8dGhpcy5fZCxyZT0wfHRoaXMuX2UsaWU9MHx0aGlzLl9mLGxlPTB8dGhpcy5fZyxtZT0wfHRoaXMuX2gsX2U9MDtfZTwxNjsrK19lKVdbX2VdPVUucmVhZElu''@;'; put 'put ''dDMyQkUoNCpfZSk7Zm9yKDtfZTw2NDsrK19lKVdbX2VdPUsoV1tfZS0yXSkrV1tfZS03XStMKFdbX2UtMTVdKStXW19lLTE2XXwwO2Zvcih2YXIgVGU9MDtUZTw2NDsrK1RlKXt2YXIgU2U9bWUrTihyZSkrRihyZSxpZSxsZSkrQltUZV0rV1tUZV18MCx6ZT16KFkpK08oWSxYLGVlKXwwO21l''@;'; put 'put ''PWxlLGxlPWllLGllPXJlLHJlPUorU2V8MCxKPWVlLGVlPVgsWD1ZLFk9U2UremV8MH10aGlzLl9hPVkrdGhpcy5fYXwwLHRoaXMuX2I9WCt0aGlzLl9ifDAsdGhpcy5fYz1lZSt0aGlzLl9jfDAsdGhpcy5fZD1KK3RoaXMuX2R8MCx0aGlzLl9lPXJlK3RoaXMuX2V8MCx0aGlzLl9mPWllK3Ro''@;'; put 'put ''aXMuX2Z8MCx0aGlzLl9nPWxlK3RoaXMuX2d8MCx0aGlzLl9oPW1lK3RoaXMuX2h8MH0sUC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgVT1nLmFsbG9jVW5zYWZlKDMyKTtyZXR1cm4gVS53cml0ZUludDMyQkUodGhpcy5fYSwwKSxVLndyaXRlSW50MzJCRSh0aGlzLl9iLDQpLFUu''@;'; put 'put ''d3JpdGVJbnQzMkJFKHRoaXMuX2MsOCksVS53cml0ZUludDMyQkUodGhpcy5fZCwxMiksVS53cml0ZUludDMyQkUodGhpcy5fZSwxNiksVS53cml0ZUludDMyQkUodGhpcy5fZiwyMCksVS53cml0ZUludDMyQkUodGhpcy5fZywyNCksVS53cml0ZUludDMyQkUodGhpcy5faCwyOCksVX0sdWUu''@;'; put 'put ''ZXhwb3J0cz1QfSwxNjg2Oih1ZSxxLF8pPT57dmFyIEk9Xyg1NzE3KSx5PV8oNzgxNiksZz1fKDQxODkpLEI9Xyg5NTA5KS5CdWZmZXIsdz1uZXcgQXJyYXkoMTYwKTtmdW5jdGlvbiBQKCl7dGhpcy5pbml0KCksdGhpcy5fdz13LGcuY2FsbCh0aGlzLDEyOCwxMTIpfUkoUCx5KSxQLnByb3Rv''@;'; put 'put ''dHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FoPTM0MTgwNzAzNjUsdGhpcy5fYmg9MTY1NDI3MDI1MCx0aGlzLl9jaD0yNDM4NTI5MzcwLHRoaXMuX2RoPTM1NTQ2MjM2MCx0aGlzLl9laD0xNzMxNDA1NDE1LHRoaXMuX2ZoPTIzOTQxODAyMzEsdGhpcy5fZ2g9MzY3NTAwODUy''@;'; put 'put ''NSx0aGlzLl9oaD0xMjAzMDYyODEzLHRoaXMuX2FsPTMyMzgzNzEwMzIsdGhpcy5fYmw9OTE0MTUwNjYzLHRoaXMuX2NsPTgxMjcwMjk5OSx0aGlzLl9kbD00MTQ0OTEyNjk3LHRoaXMuX2VsPTQyOTA3NzU4NTcsdGhpcy5fZmw9MTc1MDYwMzAyNSx0aGlzLl9nbD0xNjk0MDc2ODM5LHRoaXMu''@;'; put 'put ''X2hsPTMyMDQwNzU0MjgsdGhpc30sUC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgRj1CLmFsbG9jVW5zYWZlKDQ4KTtmdW5jdGlvbiBPKHosTixMKXtGLndyaXRlSW50MzJCRSh6LEwpLEYud3JpdGVJbnQzMkJFKE4sTCs0KX1yZXR1cm4gTyh0aGlzLl9haCx0aGlzLl9hbCwwKSxP''@;'; put 'put ''KHRoaXMuX2JoLHRoaXMuX2JsLDgpLE8odGhpcy5fY2gsdGhpcy5fY2wsMTYpLE8odGhpcy5fZGgsdGhpcy5fZGwsMjQpLE8odGhpcy5fZWgsdGhpcy5fZWwsMzIpLE8odGhpcy5fZmgsdGhpcy5fZmwsNDApLEZ9LHVlLmV4cG9ydHM9UH0sNzgxNjoodWUscSxfKT0+e3ZhciBJPV8oNTcxNyks''@;'; put 'put ''eT1fKDQxODkpLGc9Xyg5NTA5KS5CdWZmZXIsQj1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2Mjg0NzIsMTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2''@;'; put 'put ''MzU3NDgsMjkzNzY3MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMxMDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIyNTI3OCwxMzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5NCwxOTI1MDc4Mzg4LDQwNjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYx''@;'; put 'put ''MTMsMjYxNDg4ODEwMyw2MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEzOSwyNjQzNDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAwNzgwMDkzMyw3NzAyNTU5ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4''@;'; put 'put ''NTY0MzEyMzUsMTU1NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgyLDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3NjY3ODQwMTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAzMTM2NzEsMzIwMzMzNzk1NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4''@;'; put 'put ''NDUyODcxMSwyNDY2OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2MzA3MjA1LDExODgxNzk5NjQsNzczNTI5OTEyLDE1NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1LDEzOTYxODIyOTEsMjY0MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1Mjcz''@;'; put 'put ''OTAsMTk4NjY2MTA1MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0NjAsMjgyMDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAsMzUwNTk1MjY1NywzMzQ1NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3''@;'; put 'put ''LDM2MDYwMDgzNDQsMzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMzNDQsODUxMTY5NzIwLDQzMDIyNzczNCwzMTAwODIzNzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2MDU1NiwzNzUwNjg1NTkzLDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEz''@;'; put 'put ''OTU3MSwzMzE4MzA3NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1NjIyMjIsMTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5MjgsMjIyNzczMDQ1MiwyNzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2''@;'; put 'put ''MDQ0LDI0Mjg0MzY0NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkzNTE1NzMsMzMyOTMyNTI5OCwzODE1OTIwNDI3LDMzOTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3MjcxLDU2NjI4MDcxMSwzOTQwMTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3''@;'; put 'put ''MSw0MDAwMjM5OTkyLDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwzMjA2MjAzMTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5NzEsMTA4Njc5Mjg1MSwxMDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAw''@;'; put 'put ''NTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAyMzE2LDEyNDYxODk1OTFdLHc9bmV3IEFycmF5KDE2MCk7ZnVuY3Rpb24gUCgpe3RoaXMuaW5pdCgpLHRoaXMuX3c9dyx5LmNhbGwodGhp''@;'; put 'put ''cywxMjgsMTEyKX1mdW5jdGlvbiBGKFgsZWUsSil7cmV0dXJuIEpeWCYoZWVeSil9ZnVuY3Rpb24gTyhYLGVlLEope3JldHVybiBYJmVlfEomKFh8ZWUpfWZ1bmN0aW9uIHooWCxlZSl7cmV0dXJuKFg+Pj4yOHxlZTw8NCleKGVlPj4+MnxYPDwzMCleKGVlPj4+N3xYPDwyNSl9ZnVuY3Rpb24g''@;'; put 'put ''TihYLGVlKXtyZXR1cm4oWD4+PjE0fGVlPDwxOCleKFg+Pj4xOHxlZTw8MTQpXihlZT4+Pjl8WDw8MjMpfWZ1bmN0aW9uIEwoWCxlZSl7cmV0dXJuKFg+Pj4xfGVlPDwzMSleKFg+Pj44fGVlPDwyNCleWD4+Pjd9ZnVuY3Rpb24gSyhYLGVlKXtyZXR1cm4oWD4+PjF8ZWU8PDMxKV4oWD4+Pjh8''@;'; put 'put ''ZWU8PDI0KV4oWD4+Pjd8ZWU8PDI1KX1mdW5jdGlvbiBVKFgsZWUpe3JldHVybihYPj4+MTl8ZWU8PDEzKV4oZWU+Pj4yOXxYPDwzKV5YPj4+Nn1mdW5jdGlvbiBXKFgsZWUpe3JldHVybihYPj4+MTl8ZWU8PDEzKV4oZWU+Pj4yOXxYPDwzKV4oWD4+PjZ8ZWU8PDI2KX1mdW5jdGlvbiBZKFgs''@;'; put 'put ''ZWUpe3JldHVybiBYPj4+MDxlZT4+PjA/MTowfUkoUCx5KSxQLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FoPTE3NzkwMzM3MDMsdGhpcy5fYmg9MzE0NDEzNDI3Nyx0aGlzLl9jaD0xMDEzOTA0MjQyLHRoaXMuX2RoPTI3NzM0ODA3NjIsdGhpcy5fZWg9MTM1OTg5''@;'; put 'put ''MzExOSx0aGlzLl9maD0yNjAwODIyOTI0LHRoaXMuX2doPTUyODczNDYzNSx0aGlzLl9oaD0xNTQxNDU5MjI1LHRoaXMuX2FsPTQwODkyMzU3MjAsdGhpcy5fYmw9MjIyNzg3MzU5NSx0aGlzLl9jbD00MjcxMTc1NzIzLHRoaXMuX2RsPTE1OTU3NTAxMjksdGhpcy5fZWw9MjkxNzU2NTEzNyx0''@;'; put 'put ''aGlzLl9mbD03MjU1MTExOTksdGhpcy5fZ2w9NDIxNTM4OTU0Nyx0aGlzLl9obD0zMjcwMzMyMDksdGhpc30sUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihYKXtmb3IodmFyIGVlPXRoaXMuX3csSj0wfHRoaXMuX2FoLHJlPTB8dGhpcy5fYmgsaWU9MHx0aGlzLl9jaCxsZT0wfHRoaXMu''@;'; put 'put ''X2RoLG1lPTB8dGhpcy5fZWgsX2U9MHx0aGlzLl9maCxUZT0wfHRoaXMuX2doLFNlPTB8dGhpcy5faGgsemU9MHx0aGlzLl9hbCxWPTB8dGhpcy5fYmwscD0wfHRoaXMuX2NsLGI9MHx0aGlzLl9kbCx4PTB8dGhpcy5fZWwsQz0wfHRoaXMuX2ZsLFQ9MHx0aGlzLl9nbCxIPTB8dGhpcy5faGws''@;'; put 'put ''aj0wO2o8MzI7ais9MillZVtqXT1YLnJlYWRJbnQzMkJFKDQqaiksZWVbaisxXT1YLnJlYWRJbnQzMkJFKDQqais0KTtmb3IoO2o8MTYwO2orPTIpe3ZhciBFPWVlW2otMzBdLG09ZWVbai0zMCsxXSxBPUwoRSxtKSxvZT1LKG0sRSksdGU9VShFPWVlW2otNF0sbT1lZVtqLTQrMV0pLHNlPVco''@;'; put 'put ''bSxFKSxKZT1lZVtqLTMyXSxhdD1lZVtqLTMyKzFdLE1lPW9lK2VlW2otMTQrMV18MCx2ZT1BK2VlW2otMTRdK1koTWUsb2UpfDA7dmU9KHZlPXZlK3RlK1koTWU9TWUrc2V8MCxzZSl8MCkrSmUrWShNZT1NZSthdHwwLGF0KXwwLGVlW2pdPXZlLGVlW2orMV09TWV9Zm9yKHZhciBYZT0wO1hl''@;'; put 'put ''PDE2MDtYZSs9Mil7dmU9ZWVbWGVdLE1lPWVlW1hlKzFdO3ZhciBqZT1PKEoscmUsaWUpLERlPU8oemUsVixwKSxGZT16KEosemUpLFJlPXooemUsSiksSWU9TihtZSx4KSxWZT1OKHgsbWUpLGtlPUJbWGVdLEFlPUJbWGUrMV0sX3Q9RihtZSxfZSxUZSkscnQ9Rih4LEMsVCksUWU9SCtWZXww''@;'; put 'put ''LGRuPVNlK0llK1koUWUsSCl8MDtkbj0oZG49KGRuPWRuK190K1koUWU9UWUrcnR8MCxydCl8MCkra2UrWShRZT1RZStBZXwwLEFlKXwwKSt2ZStZKFFlPVFlK01lfDAsTWUpfDA7dmFyIHl0PVJlK0RlfDAsTXQ9RmUramUrWSh5dCxSZSl8MDtTZT1UZSxIPVQsVGU9X2UsVD1DLF9lPW1lLEM9''@;'; put 'put ''eCxtZT1sZStkbitZKHg9YitRZXwwLGIpfDAsbGU9aWUsYj1wLGllPXJlLHA9VixyZT1KLFY9emUsSj1kbitNdCtZKHplPVFlK3l0fDAsUWUpfDB9dGhpcy5fYWw9dGhpcy5fYWwremV8MCx0aGlzLl9ibD10aGlzLl9ibCtWfDAsdGhpcy5fY2w9dGhpcy5fY2wrcHwwLHRoaXMuX2RsPXRoaXMu''@;'; put 'put ''X2RsK2J8MCx0aGlzLl9lbD10aGlzLl9lbCt4fDAsdGhpcy5fZmw9dGhpcy5fZmwrQ3wwLHRoaXMuX2dsPXRoaXMuX2dsK1R8MCx0aGlzLl9obD10aGlzLl9obCtIfDAsdGhpcy5fYWg9dGhpcy5fYWgrSitZKHRoaXMuX2FsLHplKXwwLHRoaXMuX2JoPXRoaXMuX2JoK3JlK1kodGhpcy5fYmws''@;'; put 'put ''Vil8MCx0aGlzLl9jaD10aGlzLl9jaCtpZStZKHRoaXMuX2NsLHApfDAsdGhpcy5fZGg9dGhpcy5fZGgrbGUrWSh0aGlzLl9kbCxiKXwwLHRoaXMuX2VoPXRoaXMuX2VoK21lK1kodGhpcy5fZWwseCl8MCx0aGlzLl9maD10aGlzLl9maCtfZStZKHRoaXMuX2ZsLEMpfDAsdGhpcy5fZ2g9dGhp''@;'; put 'put ''cy5fZ2grVGUrWSh0aGlzLl9nbCxUKXwwLHRoaXMuX2hoPXRoaXMuX2hoK1NlK1kodGhpcy5faGwsSCl8MH0sUC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgWD1nLmFsbG9jVW5zYWZlKDY0KTtmdW5jdGlvbiBlZShKLHJlLGllKXtYLndyaXRlSW50MzJCRShKLGllKSxYLndyaXRl''@;'; put 'put ''SW50MzJCRShyZSxpZSs0KX1yZXR1cm4gZWUodGhpcy5fYWgsdGhpcy5fYWwsMCksZWUodGhpcy5fYmgsdGhpcy5fYmwsOCksZWUodGhpcy5fY2gsdGhpcy5fY2wsMTYpLGVlKHRoaXMuX2RoLHRoaXMuX2RsLDI0KSxlZSh0aGlzLl9laCx0aGlzLl9lbCwzMiksZWUodGhpcy5fZmgsdGhpcy5f''@;'; put 'put ''ZmwsNDApLGVlKHRoaXMuX2doLHRoaXMuX2dsLDQ4KSxlZSh0aGlzLl9oaCx0aGlzLl9obCw1NiksWH0sdWUuZXhwb3J0cz1QfSwyODMwOih1ZSxxLF8pPT57dWUuZXhwb3J0cz1nO3ZhciBJPV8oNzE4NykuRXZlbnRFbWl0dGVyO2Z1bmN0aW9uIGcoKXtJLmNhbGwodGhpcyl9Xyg1NzE3KShn''@;'; put 'put ''LEkpLGcuUmVhZGFibGU9Xyg5NDgxKSxnLldyaXRhYmxlPV8oNDIyOSksZy5EdXBsZXg9Xyg2NzUzKSxnLlRyYW5zZm9ybT1fKDQ2MDUpLGcuUGFzc1Rocm91Z2g9XygyNzI1KSxnLmZpbmlzaGVkPV8oODYxMCksZy5waXBlbGluZT1fKDk5NDYpLGcuU3RyZWFtPWcsZy5wcm90b3R5cGUucGlw''@;'; put 'put ''ZT1mdW5jdGlvbihCLHcpe3ZhciBQPXRoaXM7ZnVuY3Rpb24gRihXKXtCLndyaXRhYmxlJiYhMT09PUIud3JpdGUoVykmJlAucGF1c2UmJlAucGF1c2UoKX1mdW5jdGlvbiBPKCl7UC5yZWFkYWJsZSYmUC5yZXN1bWUmJlAucmVzdW1lKCl9UC5vbigiZGF0YSIsRiksQi5vbigiZHJhaW4iLE8p''@;'; put 'put ''LCFCLl9pc1N0ZGlvJiYoIXd8fCExIT09dy5lbmQpJiYoUC5vbigiZW5kIixOKSxQLm9uKCJjbG9zZSIsTCkpO3ZhciB6PSExO2Z1bmN0aW9uIE4oKXt6fHwoej0hMCxCLmVuZCgpKX1mdW5jdGlvbiBMKCl7enx8KHo9ITAsImZ1bmN0aW9uIj09dHlwZW9mIEIuZGVzdHJveSYmQi5kZXN0cm95''@;'; put 'put ''KCkpfWZ1bmN0aW9uIEsoVyl7aWYoVSgpLDA9PT1JLmxpc3RlbmVyQ291bnQodGhpcywiZXJyb3IiKSl0aHJvdyBXfWZ1bmN0aW9uIFUoKXtQLnJlbW92ZUxpc3RlbmVyKCJkYXRhIixGKSxCLnJlbW92ZUxpc3RlbmVyKCJkcmFpbiIsTyksUC5yZW1vdmVMaXN0ZW5lcigiZW5kIixOKSxQLnJl''@;'; put 'put ''bW92ZUxpc3RlbmVyKCJjbG9zZSIsTCksUC5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLEspLEIucmVtb3ZlTGlzdGVuZXIoImVycm9yIixLKSxQLnJlbW92ZUxpc3RlbmVyKCJlbmQiLFUpLFAucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixVKSxCLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsVSl9cmV0''@;'; put 'put ''dXJuIFAub24oImVycm9yIixLKSxCLm9uKCJlcnJvciIsSyksUC5vbigiZW5kIixVKSxQLm9uKCJjbG9zZSIsVSksQi5vbigiY2xvc2UiLFUpLEIuZW1pdCgicGlwZSIsUCksQn19LDI1NTM6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg5NTA5KS5CdWZmZXIseT1JLmlzRW5jb2Rp''@;'; put 'put ''bmd8fGZ1bmN0aW9uKEope3N3aXRjaCgoSj0iIitKKSYmSi50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0''@;'; put 'put ''Zi0xNmxlIjpjYXNlInJhdyI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19O2Z1bmN0aW9uIHcoSil7dmFyIHJlO3N3aXRjaCh0aGlzLmVuY29kaW5nPWZ1bmN0aW9uIEIoSil7dmFyIHJlPWZ1bmN0aW9uIGcoSil7aWYoIUopcmV0dXJuInV0ZjgiO2Zvcih2YXIgcmU7Oylzd2l0Y2goSil7''@;'; put 'put ''Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4idXRmOCI7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiJ1dGYxNmxlIjtjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOnJldHVybiJsYXRpbjEiO2Nhc2UiYmFzZTY0IjpjYXNlImFz''@;'; put 'put ''Y2lpIjpjYXNlImhleCI6cmV0dXJuIEo7ZGVmYXVsdDppZihyZSlyZXR1cm47Sj0oIiIrSikudG9Mb3dlckNhc2UoKSxyZT0hMH19KEopO2lmKCJzdHJpbmciIT10eXBlb2YgcmUmJihJLmlzRW5jb2Rpbmc9PT15fHwheShKKSkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGVuY29kaW5nOiAi''@;'; put 'put ''K0opO3JldHVybiByZXx8Sn0oSiksdGhpcy5lbmNvZGluZyl7Y2FzZSJ1dGYxNmxlIjp0aGlzLnRleHQ9Syx0aGlzLmVuZD1VLHJlPTQ7YnJlYWs7Y2FzZSJ1dGY4Ijp0aGlzLmZpbGxMYXN0PXoscmU9NDticmVhaztjYXNlImJhc2U2NCI6dGhpcy50ZXh0PVcsdGhpcy5lbmQ9WSxyZT0zO2Jy''@;'; put 'put ''ZWFrO2RlZmF1bHQ6cmV0dXJuIHRoaXMud3JpdGU9WCx2b2lkKHRoaXMuZW5kPWVlKX10aGlzLmxhc3ROZWVkPTAsdGhpcy5sYXN0VG90YWw9MCx0aGlzLmxhc3RDaGFyPUkuYWxsb2NVbnNhZmUocmUpfWZ1bmN0aW9uIFAoSil7cmV0dXJuIEo8PTEyNz8wOko+PjU9PTY/MjpKPj40PT0xND8z''@;'; put 'put ''Oko+PjM9PTMwPzQ6Sj4+Nj09Mj8tMTotMn1mdW5jdGlvbiB6KEope3ZhciByZT10aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLGllPWZ1bmN0aW9uIE8oSixyZSxpZSl7aWYoMTI4IT0oMTkyJnJlWzBdKSlyZXR1cm4gSi5sYXN0TmVlZD0wLCJcdWZmZmQiO2lmKEoubGFzdE5lZWQ+MSYm''@;'; put 'put ''cmUubGVuZ3RoPjEpe2lmKDEyOCE9KDE5MiZyZVsxXSkpcmV0dXJuIEoubGFzdE5lZWQ9MSwiXHVmZmZkIjtpZihKLmxhc3ROZWVkPjImJnJlLmxlbmd0aD4yJiYxMjghPSgxOTImcmVbMl0pKXJldHVybiBKLmxhc3ROZWVkPTIsIlx1ZmZmZCJ9fSh0aGlzLEopO3JldHVybiB2b2lkIDAhPT1p''@;'; put 'put ''ZT9pZTp0aGlzLmxhc3ROZWVkPD1KLmxlbmd0aD8oSi5jb3B5KHRoaXMubGFzdENoYXIscmUsMCx0aGlzLmxhc3ROZWVkKSx0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCkpOihKLmNvcHkodGhpcy5sYXN0Q2hhcixyZSwwLEoubGVuZ3RoKSx2''@;'; put 'put ''b2lkKHRoaXMubGFzdE5lZWQtPUoubGVuZ3RoKSl9ZnVuY3Rpb24gSyhKLHJlKXtpZigoSi5sZW5ndGgtcmUpJTI9PTApe3ZhciBpZT1KLnRvU3RyaW5nKCJ1dGYxNmxlIixyZSk7aWYoaWUpe3ZhciBsZT1pZS5jaGFyQ29kZUF0KGllLmxlbmd0aC0xKTtpZihsZT49NTUyOTYmJmxlPD01NjMx''@;'; put 'put ''OSlyZXR1cm4gdGhpcy5sYXN0TmVlZD0yLHRoaXMubGFzdFRvdGFsPTQsdGhpcy5sYXN0Q2hhclswXT1KW0oubGVuZ3RoLTJdLHRoaXMubGFzdENoYXJbMV09SltKLmxlbmd0aC0xXSxpZS5zbGljZSgwLC0xKX1yZXR1cm4gaWV9cmV0dXJuIHRoaXMubGFzdE5lZWQ9MSx0aGlzLmxhc3RUb3Rh''@;'; put 'put ''bD0yLHRoaXMubGFzdENoYXJbMF09SltKLmxlbmd0aC0xXSxKLnRvU3RyaW5nKCJ1dGYxNmxlIixyZSxKLmxlbmd0aC0xKX1mdW5jdGlvbiBVKEope3ZhciByZT1KJiZKLmxlbmd0aD90aGlzLndyaXRlKEopOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP3JlK3RoaXMubGFzdENoYXIudG9TdHJp''@;'; put 'put ''bmcoInV0ZjE2bGUiLDAsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCk6cmV9ZnVuY3Rpb24gVyhKLHJlKXt2YXIgaWU9KEoubGVuZ3RoLXJlKSUzO3JldHVybiAwPT09aWU/Si50b1N0cmluZygiYmFzZTY0IixyZSk6KHRoaXMubGFzdE5lZWQ9My1pZSx0aGlzLmxhc3RUb3RhbD0zLDE9''@;'; put 'put ''PT1pZT90aGlzLmxhc3RDaGFyWzBdPUpbSi5sZW5ndGgtMV06KHRoaXMubGFzdENoYXJbMF09SltKLmxlbmd0aC0yXSx0aGlzLmxhc3RDaGFyWzFdPUpbSi5sZW5ndGgtMV0pLEoudG9TdHJpbmcoImJhc2U2NCIscmUsSi5sZW5ndGgtaWUpKX1mdW5jdGlvbiBZKEope3ZhciByZT1KJiZKLmxl''@;'; put 'put ''bmd0aD90aGlzLndyaXRlKEopOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP3JlK3RoaXMubGFzdENoYXIudG9TdHJpbmcoImJhc2U2NCIsMCwzLXRoaXMubGFzdE5lZWQpOnJlfWZ1bmN0aW9uIFgoSil7cmV0dXJuIEoudG9TdHJpbmcodGhpcy5lbmNvZGluZyl9ZnVuY3Rpb24gZWUoSil7cmV0''@;'; put 'put ''dXJuIEomJkoubGVuZ3RoP3RoaXMud3JpdGUoSik6IiJ9cS5zPXcsdy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oSil7aWYoMD09PUoubGVuZ3RoKXJldHVybiIiO3ZhciByZSxpZTtpZih0aGlzLmxhc3ROZWVkKXtpZih2b2lkIDA9PT0ocmU9dGhpcy5maWxsTGFzdChKKSkpcmV0dXJuIiI7''@;'; put 'put ''aWU9dGhpcy5sYXN0TmVlZCx0aGlzLmxhc3ROZWVkPTB9ZWxzZSBpZT0wO3JldHVybiBpZTxKLmxlbmd0aD9yZT9yZSt0aGlzLnRleHQoSixpZSk6dGhpcy50ZXh0KEosaWUpOnJlfHwiIn0sdy5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uIEwoSil7dmFyIHJlPUomJkoubGVuZ3RoP3RoaXMud3Jp''@;'; put 'put ''dGUoSik6IiI7cmV0dXJuIHRoaXMubGFzdE5lZWQ/cmUrIlx1ZmZmZCI6cmV9LHcucHJvdG90eXBlLnRleHQ9ZnVuY3Rpb24gTihKLHJlKXt2YXIgaWU9ZnVuY3Rpb24gRihKLHJlLGllKXt2YXIgbGU9cmUubGVuZ3RoLTE7aWYobGU8aWUpcmV0dXJuIDA7dmFyIG1lPVAocmVbbGVdKTtyZXR1''@;'; put 'put ''cm4gbWU+PTA/KG1lPjAmJihKLmxhc3ROZWVkPW1lLTEpLG1lKTotLWxlPGllfHwtMj09PW1lPzA6KG1lPVAocmVbbGVdKSk+PTA/KG1lPjAmJihKLmxhc3ROZWVkPW1lLTIpLG1lKTotLWxlPGllfHwtMj09PW1lPzA6KG1lPVAocmVbbGVdKSk+PTA/KG1lPjAmJigyPT09bWU/bWU9MDpKLmxh''@;'; put 'put ''c3ROZWVkPW1lLTMpLG1lKTowfSh0aGlzLEoscmUpO2lmKCF0aGlzLmxhc3ROZWVkKXJldHVybiBKLnRvU3RyaW5nKCJ1dGY4IixyZSk7dGhpcy5sYXN0VG90YWw9aWU7dmFyIGxlPUoubGVuZ3RoLShpZS10aGlzLmxhc3ROZWVkKTtyZXR1cm4gSi5jb3B5KHRoaXMubGFzdENoYXIsMCxsZSks''@;'; put 'put ''Si50b1N0cmluZygidXRmOCIscmUsbGUpfSx3LnByb3RvdHlwZS5maWxsTGFzdD1mdW5jdGlvbihKKXtpZih0aGlzLmxhc3ROZWVkPD1KLmxlbmd0aClyZXR1cm4gSi5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLHRoaXMubGFzdE5lZWQpLHRoaXMu''@;'; put 'put ''bGFzdENoYXIudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLHRoaXMubGFzdFRvdGFsKTtKLmNvcHkodGhpcy5sYXN0Q2hhcix0aGlzLmxhc3RUb3RhbC10aGlzLmxhc3ROZWVkLDAsSi5sZW5ndGgpLHRoaXMubGFzdE5lZWQtPUoubGVuZ3RofX0sNzg1NzoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijtjb25zdCBJPV8oMzY4OSkseT1fKDQ1NjQpLGc9Xyg3NTIpLEI9XygyMjI0KS55LHc9Xyg1NzYxKS5tLFA9Xyg4OTcxKS5VLEY9Xyg3NjUyKSxPPV8oNDU2KSx7ZnJvbUNhbGxiYWNrOnp9PV8oNzA0MSkse2dldEN1c3RvbUluc3BlY3RTeW1ib2w6Tn09XygxMjY5KSxMPS9eW1x4MjFceDIz''@;'; put 'put ''LVx4MkJceDJELVx4M0FceDNDLVx4NUJceDVELVx4N0VdKyQvLEs9L1tceDAwLVx4MUZdLyxVPVsiXG4iLCJcciIsIlwwIl0sVz0vW1x4MjAtXHgzQVx4M0MtXHg3RV0rLyxZPS9bXHgwOVx4MjAtXHgyRlx4M0ItXHg0MFx4NUItXHg2MFx4N0ItXHg3RV0vLFg9e2phbjowLGZlYjoxLG1hcjoy''@;'; put 'put ''LGFwcjozLG1heTo0LGp1bjo1LGp1bDo2LGF1Zzo3LHNlcDo4LG9jdDo5LG5vdjoxMCxkZWM6MTF9LGVlPTIxNDc0ODM2NDdlMyxyZT0nSW52YWxpZCBzYW1lU2l0ZUNvbnRleHQgb3B0aW9uIGZvciBnZXRDb29raWVzKCk7IGV4cGVjdGVkIG9uZSBvZiAic3RyaWN0IiwgImxheCIsIG9yICJu''@;'; put 'put ''b25lIic7ZnVuY3Rpb24gaWUoamUpe0YudmFsaWRhdGUoRi5pc05vbkVtcHR5U3RyaW5nKGplKSxqZSk7Y29uc3QgRGU9U3RyaW5nKGplKS50b0xvd2VyQ2FzZSgpO3JldHVybiJub25lIj09PURlfHwibGF4Ij09PURlfHwic3RyaWN0Ij09PURlP0RlOm51bGx9Y29uc3QgbGU9T2JqZWN0LmZy''@;'; put 'put ''ZWV6ZSh7U0lMRU5UOiJzaWxlbnQiLFNUUklDVDoic3RyaWN0IixESVNBQkxFRDoidW5zYWZlLWRpc2FibGVkIn0pLG1lPS8oPzpeKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M30kKXwoPzpe''@;'; put 'put ''KD86KD86W2EtZlxkXXsxLDR9Oil7N30oPzpbYS1mXGRdezEsNH18Oil8KD86W2EtZlxkXXsxLDR9Oil7Nn0oPzooPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKD86XC4oPzoyNVswLTVdfDJbMC00XVxkfDFcZFxkfFsxLTldXGR8XGQpKXszfXw6W2EtZlxkXXsxLDR9fDop''@;'; put 'put ''fCg/OlthLWZcZF17MSw0fTopezV9KD86Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fCg/OjpbYS1mXGRdezEsNH0pezEsMn18Oil8KD86W2EtZlxkXXsxLDR9Oil7NH0oPzooPzo6W2Et''@;'; put 'put ''ZlxkXXsxLDR9KXswLDF9Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fCg/OjpbYS1mXGRdezEsNH0pezEsM318Oil8KD86W2EtZlxkXXsxLDR9Oil7M30oPzooPzo6W2EtZlxkXXsxLDR9''@;'; put 'put ''KXswLDJ9Oig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fCg/OjpbYS1mXGRdezEsNH0pezEsNH18Oil8KD86W2EtZlxkXXsxLDR9Oil7Mn0oPzooPzo6W2EtZlxkXXsxLDR9KXswLDN9Oig/''@;'; put 'put ''OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fCg/OjpbYS1mXGRdezEsNH0pezEsNX18Oil8KD86W2EtZlxkXXsxLDR9Oil7MX0oPzooPzo6W2EtZlxkXXsxLDR9KXswLDR9Oig/OjI1WzAtNV18''@;'; put 'put ''MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkoPzpcLig/OjI1WzAtNV18MlswLTRdXGR8MVxkXGR8WzEtOV1cZHxcZCkpezN9fCg/OjpbYS1mXGRdezEsNH0pezEsNn18Oil8KD86Oig/Oig/OjpbYS1mXGRdezEsNH0pezAsNX06KD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxk''@;'; put 'put ''KSg/OlwuKD86MjVbMC01XXwyWzAtNF1cZHwxXGRcZHxbMS05XVxkfFxkKSl7M318KD86OlthLWZcZF17MSw0fSl7MSw3fXw6KSkpJCkvLF9lPSJcblxcWz8oPzpcbig/OlthLWZBLUZcXGRdezEsNH06KXs3fSg/OlthLWZBLUZcXGRdezEsNH18Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7''@;'; put 'put ''Nn0oPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fDpbYS1mQS1GXFxkXXsxLDR9fDopfFxuKD86W2EtZkEtRlxcZF17MSw0fTopezV9KD86Oig/OjI1WzAtNV18Mlsw''@;'; put 'put ''LTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsMn18Oil8XG4oPzpbYS1mQS1GXFxkXXsxLDR9Oil7NH0oPzooPzo6W2EtZkEtRlxcZF17MSw0fSl7MCwx''@;'; put 'put ''fTooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9KXsxLDN9fDopfFxuKD86W2EtZkEtRlxcZF17MSw0fTopezN9KD86KD86OlthLWZB''@;'; put 'put ''LUZcXGRdezEsNH0pezAsMn06KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKXszfXwoPzo6W2EtZkEtRlxcZF17MSw0fSl7MSw0fXw6KXxcbig/OlthLWZBLUZcXGRdezEsNH06''@;'; put 'put ''KXsyfSg/Oig/OjpbYS1mQS1GXFxkXXsxLDR9KXswLDN9Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEsNX18Oil8XG4oPzpb''@;'; put 'put ''YS1mQS1GXFxkXXsxLDR9Oil7MX0oPzooPzo6W2EtZkEtRlxcZF17MSw0fSl7MCw0fTooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZCkpezN9fCg/OjpbYS1mQS1GXFxkXXsxLDR9''@;'; put 'put ''KXsxLDZ9fDopfFxuKD86Oig/Oig/OjpbYS1mQS1GXFxkXXsxLDR9KXswLDV9Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSl7M318KD86OlthLWZBLUZcXGRdezEsNH0pezEs''@;'; put 'put ''N318OikpXG4pKD86JVswLTlhLXpBLVpdezEsfSk/XFxdP1xuIi5yZXBsYWNlKC9ccypcL1wvLiokL2dtLCIiKS5yZXBsYWNlKC9cbi9nLCIiKS50cmltKCksVGU9bmV3IFJlZ0V4cChgXiR7X2V9JGApO2Z1bmN0aW9uIFNlKGplLERlLEZlLFJlKXtsZXQgSWU9MDtmb3IoO0llPGplLmxlbmd0''@;'; put 'put ''aDspe2NvbnN0IFZlPWplLmNoYXJDb2RlQXQoSWUpO2lmKFZlPD00N3x8VmU+PTU4KWJyZWFrO0llKyt9cmV0dXJuIEllPERlfHxJZT5GZXx8IVJlJiZJZSE9amUubGVuZ3RoP251bGw6cGFyc2VJbnQoamUuc3Vic3RyKDAsSWUpLDEwKX1mdW5jdGlvbiB6ZShqZSl7Y29uc3QgRGU9amUuc3Bs''@;'; put 'put ''aXQoIjoiKSxGZT1bMCwwLDBdO2lmKDMhPT1EZS5sZW5ndGgpcmV0dXJuIG51bGw7Zm9yKGxldCBSZT0wO1JlPDM7UmUrKyl7Y29uc3QgVmU9U2UoRGVbUmVdLDEsMiwyPT1SZSk7aWYobnVsbD09PVZlKXJldHVybiBudWxsO0ZlW1JlXT1WZX1yZXR1cm4gRmV9ZnVuY3Rpb24gVihqZSl7amU9''@;'; put 'put ''U3RyaW5nKGplKS5zdWJzdHIoMCwzKS50b0xvd2VyQ2FzZSgpO2NvbnN0IERlPVhbamVdO3JldHVybiBEZT49MD9EZTpudWxsfWZ1bmN0aW9uIHAoamUpe2lmKCFqZSlyZXR1cm47Y29uc3QgRGU9amUuc3BsaXQoWSk7aWYoIURlKXJldHVybjtsZXQgRmU9bnVsbCxSZT1udWxsLEllPW51bGws''@;'; put 'put ''VmU9bnVsbCxrZT1udWxsLEFlPW51bGw7Zm9yKGxldCBfdD0wO190PERlLmxlbmd0aDtfdCsrKXtjb25zdCBydD1EZVtfdF0udHJpbSgpO2lmKCFydC5sZW5ndGgpY29udGludWU7bGV0IFFlO251bGw9PT1JZSYmKFFlPXplKHJ0KSxRZSk/KEZlPVFlWzBdLFJlPVFlWzFdLEllPVFlWzJdKTpu''@;'; put 'put ''dWxsIT09VmV8fChRZT1TZShydCwxLDIsITApLG51bGw9PT1RZSk/bnVsbCE9PWtlfHwoUWU9VihydCksbnVsbD09PVFlKT9udWxsPT09QWUmJihRZT1TZShydCwyLDQsITApLG51bGwhPT1RZSYmKEFlPVFlLEFlPj03MCYmQWU8PTk5P0FlKz0xOTAwOkFlPj0wJiZBZTw9NjkmJihBZSs9MmUz''@;'; put 'put ''KSkpOmtlPVFlOlZlPVFlfXJldHVybiBudWxsPT09VmV8fG51bGw9PT1rZXx8bnVsbD09PUFlfHxudWxsPT09SWV8fFZlPDF8fFZlPjMxfHxBZTwxNjAxfHxGZT4yM3x8UmU+NTl8fEllPjU5P3ZvaWQgMDpuZXcgRGF0ZShEYXRlLlVUQyhBZSxrZSxWZSxGZSxSZSxJZSkpfWZ1bmN0aW9uIGIo''@;'; put 'put ''amUpe3JldHVybiBGLnZhbGlkYXRlKEYuaXNEYXRlKGplKSxqZSksamUudG9VVENTdHJpbmcoKX1mdW5jdGlvbiB4KGplKXtyZXR1cm4gbnVsbD09amU/bnVsbDooamU9amUudHJpbSgpLnJlcGxhY2UoL15cLi8sIiIpLFRlLnRlc3QoamUpJiYoamU9amUucmVwbGFjZSgiWyIsIiIpLnJlcGxh''@;'; put 'put ''Y2UoIl0iLCIiKSksSSYmL1teXHUwMDAxLVx1MDA3Zl0vLnRlc3QoamUpJiYoamU9SS50b0FTQ0lJKGplKSksamUudG9Mb3dlckNhc2UoKSl9ZnVuY3Rpb24gQyhqZSxEZSxGZSl7aWYobnVsbD09amV8fG51bGw9PURlKXJldHVybiBudWxsO2lmKCExIT09RmUmJihqZT14KGplKSxEZT14KERl''@;'; put 'put ''KSksamU9PURlKXJldHVybiEwO2NvbnN0IFJlPWplLmxhc3RJbmRleE9mKERlKTtyZXR1cm4hKFJlPD0wfHxqZS5sZW5ndGghPT1EZS5sZW5ndGgrUmV8fCIuIiE9PWplLnN1YnN0cihSZS0xLDEpfHxtZS50ZXN0KGplKSl9ZnVuY3Rpb24gVChqZSl7aWYoIWplfHwiLyIhPT1qZS5zdWJzdHIo''@;'; put 'put ''MCwxKSlyZXR1cm4iLyI7aWYoIi8iPT09amUpcmV0dXJuIGplO2NvbnN0IERlPWplLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuIDA9PT1EZT8iLyI6amUuc2xpY2UoMCxEZSl9ZnVuY3Rpb24gRShqZSxEZSl7aWYoKCFEZXx8Im9iamVjdCIhPXR5cGVvZiBEZSkmJihEZT17fSksRi5pc0VtcHR5''@;'; put 'put ''U3RyaW5nKGplKXx8IUYuaXNTdHJpbmcoamUpKXJldHVybiBudWxsO2NvbnN0IEZlPShqZT1qZS50cmltKCkpLmluZGV4T2YoIjsiKSxJZT1mdW5jdGlvbiBqKGplLERlKXtqZT1mdW5jdGlvbiBIKGplKXtpZihGLmlzRW1wdHlTdHJpbmcoamUpKXJldHVybiBqZTtmb3IobGV0IERlPTA7RGU8''@;'; put 'put ''VS5sZW5ndGg7RGUrKyl7Y29uc3QgRmU9amUuaW5kZXhPZihVW0RlXSk7LTEhPT1GZSYmKGplPWplLnN1YnN0cigwLEZlKSl9cmV0dXJuIGplfShqZSksRi52YWxpZGF0ZShGLmlzU3RyaW5nKGplKSxqZSk7bGV0IFJlLEllLEZlPWplLmluZGV4T2YoIj0iKTtpZihEZSkwPT09RmUmJihGZT0o''@;'; put 'put ''amU9amUuc3Vic3RyKDEpKS5pbmRleE9mKCI9IikpO2Vsc2UgaWYoRmU8PTApcmV0dXJuO2lmKEZlPD0wPyhSZT0iIixJZT1qZS50cmltKCkpOihSZT1qZS5zdWJzdHIoMCxGZSkudHJpbSgpLEllPWplLnN1YnN0cihGZSsxKS50cmltKCkpLEsudGVzdChSZSl8fEsudGVzdChJZSkpcmV0dXJu''@;'; put 'put ''O2NvbnN0IFZlPW5ldyBhdDtyZXR1cm4gVmUua2V5PVJlLFZlLnZhbHVlPUllLFZlfSgtMT09PUZlP2plOmplLnN1YnN0cigwLEZlKSwhIURlLmxvb3NlKTtpZighSWUpcmV0dXJuO2lmKC0xPT09RmUpcmV0dXJuIEllO2NvbnN0IFZlPWplLnNsaWNlKEZlKzEpLnRyaW0oKTtpZigwPT09VmUu''@;'; put 'put ''bGVuZ3RoKXJldHVybiBJZTtjb25zdCBrZT1WZS5zcGxpdCgiOyIpO2Zvcig7a2UubGVuZ3RoOyl7Y29uc3QgQWU9a2Uuc2hpZnQoKS50cmltKCk7aWYoMD09PUFlLmxlbmd0aCljb250aW51ZTtjb25zdCBfdD1BZS5pbmRleE9mKCI9Iik7bGV0IHJ0LFFlO3N3aXRjaCgtMT09PV90PyhydD1B''@;'; put 'put ''ZSxRZT1udWxsKToocnQ9QWUuc3Vic3RyKDAsX3QpLFFlPUFlLnN1YnN0cihfdCsxKSkscnQ9cnQudHJpbSgpLnRvTG93ZXJDYXNlKCksUWUmJihRZT1RZS50cmltKCkpLHJ0KXtjYXNlImV4cGlyZXMiOmlmKFFlKXtjb25zdCB5dD1wKFFlKTt5dCYmKEllLmV4cGlyZXM9eXQpfWJyZWFrO2Nh''@;'; put 'put ''c2UibWF4LWFnZSI6aWYoUWUmJi9eLT9bMC05XSskLy50ZXN0KFFlKSl7Y29uc3QgeXQ9cGFyc2VJbnQoUWUsMTApO0llLnNldE1heEFnZSh5dCl9YnJlYWs7Y2FzZSJkb21haW4iOmlmKFFlKXtjb25zdCB5dD1RZS50cmltKCkucmVwbGFjZSgvXlwuLywiIik7eXQmJihJZS5kb21haW49eXQu''@;'; put 'put ''dG9Mb3dlckNhc2UoKSl9YnJlYWs7Y2FzZSJwYXRoIjpJZS5wYXRoPVFlJiYiLyI9PT1RZVswXT9RZTpudWxsO2JyZWFrO2Nhc2Uic2VjdXJlIjpJZS5zZWN1cmU9ITA7YnJlYWs7Y2FzZSJodHRwb25seSI6SWUuaHR0cE9ubHk9ITA7YnJlYWs7Y2FzZSJzYW1lc2l0ZSI6c3dpdGNoKFFlP1Fl''@;'; put 'put ''LnRvTG93ZXJDYXNlKCk6IiIpe2Nhc2Uic3RyaWN0IjpJZS5zYW1lU2l0ZT0ic3RyaWN0IjticmVhaztjYXNlImxheCI6SWUuc2FtZVNpdGU9ImxheCI7YnJlYWs7Y2FzZSJub25lIjpJZS5zYW1lU2l0ZT0ibm9uZSI7YnJlYWs7ZGVmYXVsdDpJZS5zYW1lU2l0ZT12b2lkIDB9YnJlYWs7ZGVm''@;'; put 'put ''YXVsdDpJZS5leHRlbnNpb25zPUllLmV4dGVuc2lvbnN8fFtdLEllLmV4dGVuc2lvbnMucHVzaChBZSl9fXJldHVybiBJZX1mdW5jdGlvbiBvZShqZSl7bGV0IERlO3RyeXtEZT1KU09OLnBhcnNlKGplKX1jYXRjaChGZSl7cmV0dXJuIEZlfXJldHVybiBEZX1mdW5jdGlvbiB0ZShqZSl7aWYo''@;'; put 'put ''IWplfHxGLmlzRW1wdHlTdHJpbmcoamUpKXJldHVybiBudWxsO2xldCBEZTtpZigic3RyaW5nIj09dHlwZW9mIGplKXtpZihEZT1vZShqZSksRGUgaW5zdGFuY2VvZiBFcnJvcilyZXR1cm4gbnVsbH1lbHNlIERlPWplO2NvbnN0IEZlPW5ldyBhdDtmb3IobGV0IFJlPTA7UmU8YXQuc2VyaWFs''@;'; put 'put ''aXphYmxlUHJvcGVydGllcy5sZW5ndGg7UmUrKyl7Y29uc3QgSWU9YXQuc2VyaWFsaXphYmxlUHJvcGVydGllc1tSZV07dm9pZCAwPT09RGVbSWVdfHxEZVtJZV09PT1KZVtJZV18fChGZVtJZV09ImV4cGlyZXMiPT09SWV8fCJjcmVhdGlvbiI9PT1JZXx8Imxhc3RBY2Nlc3NlZCI9PT1JZT9u''@;'; put 'put ''dWxsPT09RGVbSWVdP251bGw6IkluZmluaXR5Ij09RGVbSWVdPyJJbmZpbml0eSI6bmV3IERhdGUoRGVbSWVdKTpEZVtJZV0pfXJldHVybiBGZX1mdW5jdGlvbiBzZShqZSxEZSl7Ri52YWxpZGF0ZShGLmlzT2JqZWN0KGplKSxqZSksRi52YWxpZGF0ZShGLmlzT2JqZWN0KERlKSxEZSk7bGV0''@;'; put 'put ''IEZlPTA7cmV0dXJuIEZlPShEZS5wYXRoP0RlLnBhdGgubGVuZ3RoOjApLShqZS5wYXRoP2plLnBhdGgubGVuZ3RoOjApLDAhPT1GZXx8KEZlPShqZS5jcmVhdGlvbj9qZS5jcmVhdGlvbi5nZXRUaW1lKCk6ZWUpLShEZS5jcmVhdGlvbj9EZS5jcmVhdGlvbi5nZXRUaW1lKCk6ZWUpLDAhPT1G''@;'; put 'put ''ZXx8KEZlPWplLmNyZWF0aW9uSW5kZXgtRGUuY3JlYXRpb25JbmRleCkpLEZlfWZ1bmN0aW9uIFVlKGplKXtpZihqZSBpbnN0YW5jZW9mIE9iamVjdClyZXR1cm4gamU7dHJ5e2plPWRlY29kZVVSSShqZSl9Y2F0Y2h7fXJldHVybiB5KGplKX1jb25zdCBKZT17a2V5OiIiLHZhbHVlOiIiLGV4''@;'; put 'put ''cGlyZXM6IkluZmluaXR5IixtYXhBZ2U6bnVsbCxkb21haW46bnVsbCxwYXRoOm51bGwsc2VjdXJlOiExLGh0dHBPbmx5OiExLGV4dGVuc2lvbnM6bnVsbCxob3N0T25seTpudWxsLHBhdGhJc0RlZmF1bHQ6bnVsbCxjcmVhdGlvbjpudWxsLGxhc3RBY2Nlc3NlZDpudWxsLHNhbWVTaXRlOnZv''@;'; put 'put ''aWQgMH07Y2xhc3MgYXR7Y29uc3RydWN0b3IoRGU9e30pe2NvbnN0IEZlPU4oKTtGZSYmKHRoaXNbRmVdPXRoaXMuaW5zcGVjdCksT2JqZWN0LmFzc2lnbih0aGlzLEplLERlKSx0aGlzLmNyZWF0aW9uPXRoaXMuY3JlYXRpb258fG5ldyBEYXRlLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlz''@;'; put 'put ''LCJjcmVhdGlvbkluZGV4Iix7Y29uZmlndXJhYmxlOiExLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsdmFsdWU6KythdC5jb29raWVzQ3JlYXRlZH0pfWluc3BlY3QoKXtjb25zdCBEZT1EYXRlLm5vdygpLEZlPW51bGwhPXRoaXMuaG9zdE9ubHk/dGhpcy5ob3N0T25seToiPyIsUmU9dGhp''@;'; put 'put ''cy5jcmVhdGlvbj9EZS10aGlzLmNyZWF0aW9uLmdldFRpbWUoKSsibXMiOiI/IixJZT10aGlzLmxhc3RBY2Nlc3NlZD9EZS10aGlzLmxhc3RBY2Nlc3NlZC5nZXRUaW1lKCkrIm1zIjoiPyI7cmV0dXJuYENvb2tpZT0iJHt0aGlzLnRvU3RyaW5nKCl9OyBob3N0T25seT0ke0ZlfTsgYUFnZT0k''@;'; put 'put ''e0llfTsgY0FnZT0ke1JlfSJgfXRvSlNPTigpe2NvbnN0IERlPXt9O2Zvcihjb25zdCBGZSBvZiBhdC5zZXJpYWxpemFibGVQcm9wZXJ0aWVzKXRoaXNbRmVdIT09SmVbRmVdJiYoImV4cGlyZXMiPT09RmV8fCJjcmVhdGlvbiI9PT1GZXx8Imxhc3RBY2Nlc3NlZCI9PT1GZT9EZVtGZV09bnVs''@;'; put 'put ''bD09PXRoaXNbRmVdP251bGw6IkluZmluaXR5Ij09dGhpc1tGZV0/IkluZmluaXR5Ijp0aGlzW0ZlXS50b0lTT1N0cmluZygpOiJtYXhBZ2UiPT09RmU/bnVsbCE9PXRoaXNbRmVdJiYoRGVbRmVdPXRoaXNbRmVdPT0xLzB8fHRoaXNbRmVdPT0tMS8wP3RoaXNbRmVdLnRvU3RyaW5nKCk6dGhp''@;'; put 'put ''c1tGZV0pOnRoaXNbRmVdIT09SmVbRmVdJiYoRGVbRmVdPXRoaXNbRmVdKSk7cmV0dXJuIERlfWNsb25lKCl7cmV0dXJuIHRlKHRoaXMudG9KU09OKCkpfXZhbGlkYXRlKCl7aWYoIUwudGVzdCh0aGlzLnZhbHVlKXx8dGhpcy5leHBpcmVzIT0xLzAmJiEodGhpcy5leHBpcmVzIGluc3RhbmNl''@;'; put 'put ''b2YgRGF0ZSkmJiFwKHRoaXMuZXhwaXJlcyl8fG51bGwhPXRoaXMubWF4QWdlJiZ0aGlzLm1heEFnZTw9MHx8bnVsbCE9dGhpcy5wYXRoJiYhVy50ZXN0KHRoaXMucGF0aCkpcmV0dXJuITE7Y29uc3QgRGU9dGhpcy5jZG9tYWluKCk7cmV0dXJuIShEZSYmKERlLm1hdGNoKC9cLiQvKXx8bnVs''@;'; put 'put ''bD09Zy5nZXRQdWJsaWNTdWZmaXgoRGUpKSl9c2V0RXhwaXJlcyhEZSl7dGhpcy5leHBpcmVzPURlIGluc3RhbmNlb2YgRGF0ZT9EZTpwKERlKXx8IkluZmluaXR5In1zZXRNYXhBZ2UoRGUpe3RoaXMubWF4QWdlPURlPT09MS8wfHxEZT09PS0xLzA/RGUudG9TdHJpbmcoKTpEZX1jb29raWVT''@;'; put 'put ''dHJpbmcoKXtsZXQgRGU9dGhpcy52YWx1ZTtyZXR1cm4gbnVsbD09RGUmJihEZT0iIiksIiI9PT10aGlzLmtleT9EZTpgJHt0aGlzLmtleX09JHtEZX1gfXRvU3RyaW5nKCl7bGV0IERlPXRoaXMuY29va2llU3RyaW5nKCk7aWYodGhpcy5leHBpcmVzIT0xLzAmJih0aGlzLmV4cGlyZXMgaW5z''@;'; put 'put ''dGFuY2VvZiBEYXRlP0RlKz1gOyBFeHBpcmVzPSR7Yih0aGlzLmV4cGlyZXMpfWA6RGUrPWA7IEV4cGlyZXM9JHt0aGlzLmV4cGlyZXN9YCksbnVsbCE9dGhpcy5tYXhBZ2UmJnRoaXMubWF4QWdlIT0xLzAmJihEZSs9YDsgTWF4LUFnZT0ke3RoaXMubWF4QWdlfWApLHRoaXMuZG9tYWluJiYh''@;'; put 'put ''dGhpcy5ob3N0T25seSYmKERlKz1gOyBEb21haW49JHt0aGlzLmRvbWFpbn1gKSx0aGlzLnBhdGgmJihEZSs9YDsgUGF0aD0ke3RoaXMucGF0aH1gKSx0aGlzLnNlY3VyZSYmKERlKz0iOyBTZWN1cmUiKSx0aGlzLmh0dHBPbmx5JiYoRGUrPSI7IEh0dHBPbmx5IiksdGhpcy5zYW1lU2l0ZSYm''@;'; put 'put ''Im5vbmUiIT09dGhpcy5zYW1lU2l0ZSl7Y29uc3QgRmU9YXQuc2FtZVNpdGVDYW5vbmljYWxbdGhpcy5zYW1lU2l0ZS50b0xvd2VyQ2FzZSgpXTtEZSs9YDsgU2FtZVNpdGU9JHtGZXx8dGhpcy5zYW1lU2l0ZX1gfXJldHVybiB0aGlzLmV4dGVuc2lvbnMmJnRoaXMuZXh0ZW5zaW9ucy5mb3JF''@;'; put 'put ''YWNoKEZlPT57RGUrPWA7ICR7RmV9YH0pLERlfVRUTChEZSl7aWYobnVsbCE9dGhpcy5tYXhBZ2UpcmV0dXJuIHRoaXMubWF4QWdlPD0wPzA6MWUzKnRoaXMubWF4QWdlO2xldCBGZT10aGlzLmV4cGlyZXM7cmV0dXJuIEZlIT0xLzA/KEZlIGluc3RhbmNlb2YgRGF0ZXx8KEZlPXAoRmUpfHwx''@;'; put 'put ''LzApLEZlPT0xLzA/MS8wOkZlLmdldFRpbWUoKS0oRGV8fERhdGUubm93KCkpKToxLzB9ZXhwaXJ5VGltZShEZSl7aWYobnVsbCE9dGhpcy5tYXhBZ2Upe2NvbnN0IFJlPXRoaXMubWF4QWdlPD0wPy0xLzA6MWUzKnRoaXMubWF4QWdlO3JldHVybihEZXx8dGhpcy5jcmVhdGlvbnx8bmV3IERh''@;'; put 'put ''dGUpLmdldFRpbWUoKStSZX1yZXR1cm4gdGhpcy5leHBpcmVzPT0xLzA/MS8wOnRoaXMuZXhwaXJlcy5nZXRUaW1lKCl9ZXhwaXJ5RGF0ZShEZSl7Y29uc3QgRmU9dGhpcy5leHBpcnlUaW1lKERlKTtyZXR1cm4gRmU9PTEvMD9uZXcgRGF0ZShlZSk6RmU9PS0xLzA/bmV3IERhdGUoMCk6bmV3''@;'; put 'put ''IERhdGUoRmUpfWlzUGVyc2lzdGVudCgpe3JldHVybiBudWxsIT10aGlzLm1heEFnZXx8dGhpcy5leHBpcmVzIT0xLzB9Y2Fub25pY2FsaXplZERvbWFpbigpe3JldHVybiBudWxsPT10aGlzLmRvbWFpbj9udWxsOngodGhpcy5kb21haW4pfWNkb21haW4oKXtyZXR1cm4gdGhpcy5jYW5vbmlj''@;'; put 'put ''YWxpemVkRG9tYWluKCl9fWZ1bmN0aW9uIE1lKGplKXtpZihudWxsIT1qZSl7Y29uc3QgRGU9amUudG9Mb3dlckNhc2UoKTtzd2l0Y2goRGUpe2Nhc2UgbGUuU1RSSUNUOmNhc2UgbGUuU0lMRU5UOmNhc2UgbGUuRElTQUJMRUQ6cmV0dXJuIERlfX1yZXR1cm4gbGUuU0lMRU5UfWF0LmNvb2tp''@;'; put 'put ''ZXNDcmVhdGVkPTAsYXQucGFyc2U9RSxhdC5mcm9tSlNPTj10ZSxhdC5zZXJpYWxpemFibGVQcm9wZXJ0aWVzPU9iamVjdC5rZXlzKEplKSxhdC5zYW1lU2l0ZUxldmVsPXtzdHJpY3Q6MyxsYXg6Mixub25lOjF9LGF0LnNhbWVTaXRlQ2Fub25pY2FsPXtzdHJpY3Q6IlN0cmljdCIsbGF4OiJM''@;'; put 'put ''YXgifTtjbGFzcyB2ZXtjb25zdHJ1Y3RvcihEZSxGZT17cmVqZWN0UHVibGljU3VmZml4ZXM6ITB9KXsiYm9vbGVhbiI9PXR5cGVvZiBGZSYmKEZlPXtyZWplY3RQdWJsaWNTdWZmaXhlczpGZX0pLEYudmFsaWRhdGUoRi5pc09iamVjdChGZSksRmUpLHRoaXMucmVqZWN0UHVibGljU3VmZml4''@;'; put 'put ''ZXM9RmUucmVqZWN0UHVibGljU3VmZml4ZXMsdGhpcy5lbmFibGVMb29zZU1vZGU9ISFGZS5sb29zZU1vZGUsdGhpcy5hbGxvd1NwZWNpYWxVc2VEb21haW49ImJvb2xlYW4iIT10eXBlb2YgRmUuYWxsb3dTcGVjaWFsVXNlRG9tYWlufHxGZS5hbGxvd1NwZWNpYWxVc2VEb21haW4sdGhpcy5z''@;'; put 'put ''dG9yZT1EZXx8bmV3IHcsdGhpcy5wcmVmaXhTZWN1cml0eT1NZShGZS5wcmVmaXhTZWN1cml0eSksdGhpcy5fY2xvbmVTeW5jPVhlKCJjbG9uZSIpLHRoaXMuX2ltcG9ydENvb2tpZXNTeW5jPVhlKCJfaW1wb3J0Q29va2llcyIpLHRoaXMuZ2V0Q29va2llc1N5bmM9WGUoImdldENvb2tpZXMi''@;'; put 'put ''KSx0aGlzLmdldENvb2tpZVN0cmluZ1N5bmM9WGUoImdldENvb2tpZVN0cmluZyIpLHRoaXMuZ2V0U2V0Q29va2llU3RyaW5nc1N5bmM9WGUoImdldFNldENvb2tpZVN0cmluZ3MiKSx0aGlzLnJlbW92ZUFsbENvb2tpZXNTeW5jPVhlKCJyZW1vdmVBbGxDb29raWVzIiksdGhpcy5zZXRDb29r''@;'; put 'put ''aWVTeW5jPVhlKCJzZXRDb29raWUiKSx0aGlzLnNlcmlhbGl6ZVN5bmM9WGUoInNlcmlhbGl6ZSIpfXNldENvb2tpZShEZSxGZSxSZSxJZSl7bGV0IFZlO2lmKEYudmFsaWRhdGUoRi5pc05vbkVtcHR5U3RyaW5nKEZlKSxJZSxSZSksRi5pc0Z1bmN0aW9uKEZlKSlyZXR1cm4oSWU9RmUpKG5l''@;'; put 'put ''dyBFcnJvcigiTm8gVVJMIHdhcyBzcGVjaWZpZWQiKSk7Y29uc3Qga2U9VWUoRmUpO2lmKEYuaXNGdW5jdGlvbihSZSkmJihJZT1SZSxSZT17fSksRi52YWxpZGF0ZShGLmlzRnVuY3Rpb24oSWUpLEllKSwhRi5pc05vbkVtcHR5U3RyaW5nKERlKSYmIUYuaXNPYmplY3QoRGUpJiZEZSBpbnN0''@;'; put 'put ''YW5jZW9mIFN0cmluZyYmMD09RGUubGVuZ3RoKXJldHVybiBJZShudWxsKTtjb25zdCBBZT14KGtlLmhvc3RuYW1lKSxfdD1SZS5sb29zZXx8dGhpcy5lbmFibGVMb29zZU1vZGU7bGV0IHJ0PW51bGw7aWYoUmUuc2FtZVNpdGVDb250ZXh0JiYocnQ9aWUoUmUuc2FtZVNpdGVDb250ZXh0KSwh''@;'; put 'put ''cnQpKXJldHVybiBJZShuZXcgRXJyb3IocmUpKTtpZigic3RyaW5nIj09dHlwZW9mIERlfHxEZSBpbnN0YW5jZW9mIFN0cmluZyl7aWYoIShEZT1hdC5wYXJzZShEZSx7bG9vc2U6X3R9KSkpcmV0dXJuIFZlPW5ldyBFcnJvcigiQ29va2llIGZhaWxlZCB0byBwYXJzZSIpLEllKFJlLmlnbm9y''@;'; put 'put ''ZUVycm9yP251bGw6VmUpfWVsc2UgaWYoIShEZSBpbnN0YW5jZW9mIGF0KSlyZXR1cm4gVmU9bmV3IEVycm9yKCJGaXJzdCBhcmd1bWVudCB0byBzZXRDb29raWUgbXVzdCBiZSBhIENvb2tpZSBvYmplY3Qgb3Igc3RyaW5nIiksSWUoUmUuaWdub3JlRXJyb3I/bnVsbDpWZSk7Y29uc3QgUWU9''@;'; put 'put ''UmUubm93fHxuZXcgRGF0ZTtpZih0aGlzLnJlamVjdFB1YmxpY1N1ZmZpeGVzJiZEZS5kb21haW4mJm51bGw9PWcuZ2V0UHVibGljU3VmZml4KERlLmNkb21haW4oKSx7YWxsb3dTcGVjaWFsVXNlRG9tYWluOnRoaXMuYWxsb3dTcGVjaWFsVXNlRG9tYWluLGlnbm9yZUVycm9yOlJlLmlnbm9y''@;'; put 'put ''ZUVycm9yfSkmJiFUZS50ZXN0KERlLmRvbWFpbikpcmV0dXJuIFZlPW5ldyBFcnJvcigiQ29va2llIGhhcyBkb21haW4gc2V0IHRvIGEgcHVibGljIHN1ZmZpeCIpLEllKFJlLmlnbm9yZUVycm9yP251bGw6VmUpO2lmKERlLmRvbWFpbil7aWYoIUMoQWUsRGUuY2RvbWFpbigpLCExKSlyZXR1''@;'; put 'put ''cm4gVmU9bmV3IEVycm9yKGBDb29raWUgbm90IGluIHRoaXMgaG9zdCdzIGRvbWFpbi4gQ29va2llOiR7RGUuY2RvbWFpbigpfSBSZXF1ZXN0OiR7QWV9YCksSWUoUmUuaWdub3JlRXJyb3I/bnVsbDpWZSk7bnVsbD09RGUuaG9zdE9ubHkmJihEZS5ob3N0T25seT0hMSl9ZWxzZSBEZS5ob3N0''@;'; put 'put ''T25seT0hMCxEZS5kb21haW49QWU7aWYoKCFEZS5wYXRofHwiLyIhPT1EZS5wYXRoWzBdKSYmKERlLnBhdGg9VChrZS5wYXRobmFtZSksRGUucGF0aElzRGVmYXVsdD0hMCksITE9PT1SZS5odHRwJiZEZS5odHRwT25seSlyZXR1cm4gVmU9bmV3IEVycm9yKCJDb29raWUgaXMgSHR0cE9ubHkg''@;'; put 'put ''YW5kIHRoaXMgaXNuJ3QgYW4gSFRUUCBBUEkiKSxJZShSZS5pZ25vcmVFcnJvcj9udWxsOlZlKTtpZigibm9uZSIhPT1EZS5zYW1lU2l0ZSYmdm9pZCAwIT09RGUuc2FtZVNpdGUmJnJ0JiYibm9uZSI9PT1ydClyZXR1cm4gVmU9bmV3IEVycm9yKCJDb29raWUgaXMgU2FtZVNpdGUgYnV0IHRo''@;'; put 'put ''aXMgaXMgYSBjcm9zcy1vcmlnaW4gcmVxdWVzdCIpLEllKFJlLmlnbm9yZUVycm9yP251bGw6VmUpO2NvbnN0IGRuPXRoaXMucHJlZml4U2VjdXJpdHk9PT1sZS5TSUxFTlQ7aWYodGhpcy5wcmVmaXhTZWN1cml0eSE9PWxlLkRJU0FCTEVEKXtsZXQgJGUsaXQ9ITE7aWYoZnVuY3Rpb24gbShq''@;'; put 'put ''ZSl7cmV0dXJuIEYudmFsaWRhdGUoRi5pc09iamVjdChqZSksamUpLCFqZS5rZXkuc3RhcnRzV2l0aCgiX19TZWN1cmUtIil8fGplLnNlY3VyZX0oRGUpP2Z1bmN0aW9uIEEoamUpe3JldHVybiBGLnZhbGlkYXRlKEYuaXNPYmplY3QoamUpKSwhamUua2V5LnN0YXJ0c1dpdGgoIl9fSG9zdC0i''@;'; put 'put ''KXx8amUuc2VjdXJlJiZqZS5ob3N0T25seSYmbnVsbCE9amUucGF0aCYmIi8iPT09amUucGF0aH0oRGUpfHwoaXQ9ITAsJGU9IkNvb2tpZSBoYXMgX19Ib3N0IHByZWZpeCBidXQgZWl0aGVyIFNlY3VyZSBvciBIb3N0T25seSBhdHRyaWJ1dGUgaXMgbm90IHNldCBvciBQYXRoIGlzIG5vdCAn''@;'; put 'put ''LyciKTooaXQ9ITAsJGU9IkNvb2tpZSBoYXMgX19TZWN1cmUgcHJlZml4IGJ1dCBTZWN1cmUgYXR0cmlidXRlIGlzIG5vdCBzZXQiKSxpdClyZXR1cm4gSWUoUmUuaWdub3JlRXJyb3J8fGRuP251bGw6bmV3IEVycm9yKCRlKSl9Y29uc3QgTXQ9dGhpcy5zdG9yZTtNdC51cGRhdGVDb29raWV8''@;'; put 'put ''fChNdC51cGRhdGVDb29raWU9ZnVuY3Rpb24oaXQsJGUsdHQpe3RoaXMucHV0Q29va2llKCRlLHR0KX0pLE10LmZpbmRDb29raWUoRGUuZG9tYWluLERlLnBhdGgsRGUua2V5LGZ1bmN0aW9uIER0KGl0LCRlKXtpZihpdClyZXR1cm4gSWUoaXQpO2NvbnN0IHR0PWZ1bmN0aW9uKEhlKXtpZihI''@;'; put 'put ''ZSlyZXR1cm4gSWUoSGUpO0llKG51bGwsRGUpfTtpZigkZSl7aWYoITE9PT1SZS5odHRwJiYkZS5odHRwT25seSlyZXR1cm4gaXQ9bmV3IEVycm9yKCJvbGQgQ29va2llIGlzIEh0dHBPbmx5IGFuZCB0aGlzIGlzbid0IGFuIEhUVFAgQVBJIiksSWUoUmUuaWdub3JlRXJyb3I/bnVsbDppdCk7''@;'; put 'put ''RGUuY3JlYXRpb249JGUuY3JlYXRpb24sRGUuY3JlYXRpb25JbmRleD0kZS5jcmVhdGlvbkluZGV4LERlLmxhc3RBY2Nlc3NlZD1RZSxNdC51cGRhdGVDb29raWUoJGUsRGUsdHQpfWVsc2UgRGUuY3JlYXRpb249RGUubGFzdEFjY2Vzc2VkPVFlLE10LnB1dENvb2tpZShEZSx0dCl9KX1nZXRD''@;'; put 'put ''b29raWVzKERlLEZlLFJlKXtGLnZhbGlkYXRlKEYuaXNOb25FbXB0eVN0cmluZyhEZSksUmUsRGUpO2NvbnN0IEllPVVlKERlKTtGLmlzRnVuY3Rpb24oRmUpJiYoUmU9RmUsRmU9e30pLEYudmFsaWRhdGUoRi5pc09iamVjdChGZSksUmUsRmUpLEYudmFsaWRhdGUoRi5pc0Z1bmN0aW9uKFJl''@;'; put 'put ''KSxSZSk7Y29uc3QgVmU9eChJZS5ob3N0bmFtZSksa2U9SWUucGF0aG5hbWV8fCIvIjtsZXQgQWU9RmUuc2VjdXJlO251bGw9PUFlJiZJZS5wcm90b2NvbCYmKCJodHRwczoiPT1JZS5wcm90b2NvbHx8IndzczoiPT1JZS5wcm90b2NvbCkmJihBZT0hMCk7bGV0IF90PTA7aWYoRmUuc2FtZVNp''@;'; put 'put ''dGVDb250ZXh0KXtjb25zdCBpdD1pZShGZS5zYW1lU2l0ZUNvbnRleHQpO2lmKF90PWF0LnNhbWVTaXRlTGV2ZWxbaXRdLCFfdClyZXR1cm4gUmUobmV3IEVycm9yKHJlKSl9bGV0IHJ0PUZlLmh0dHA7bnVsbD09cnQmJihydD0hMCk7Y29uc3QgUWU9RmUubm93fHxEYXRlLm5vdygpLGRuPSEx''@;'; put 'put ''IT09RmUuZXhwaXJlLHl0PSEhRmUuYWxsUGF0aHMsTXQ9dGhpcy5zdG9yZTtmdW5jdGlvbiBEdChpdCl7aWYoaXQuaG9zdE9ubHkpe2lmKGl0LmRvbWFpbiE9VmUpcmV0dXJuITF9ZWxzZSBpZighQyhWZSxpdC5kb21haW4sITEpKXJldHVybiExO3JldHVybiEoIXl0JiYhUChrZSxpdC5wYXRo''@;'; put 'put ''KXx8aXQuc2VjdXJlJiYhQWV8fGl0Lmh0dHBPbmx5JiYhcnR8fF90JiZhdC5zYW1lU2l0ZUxldmVsW2l0LnNhbWVTaXRlfHwibm9uZSJdPl90fHxkbiYmaXQuZXhwaXJ5VGltZSgpPD1RZSYmKE10LnJlbW92ZUNvb2tpZShpdC5kb21haW4saXQucGF0aCxpdC5rZXksKCk9Pnt9KSwxKSl9TXQu''@;'; put 'put ''ZmluZENvb2tpZXMoVmUseXQ/bnVsbDprZSx0aGlzLmFsbG93U3BlY2lhbFVzZURvbWFpbiwoaXQsJGUpPT57aWYoaXQpcmV0dXJuIFJlKGl0KTskZT0kZS5maWx0ZXIoRHQpLCExIT09RmUuc29ydCYmKCRlPSRlLnNvcnQoc2UpKTtjb25zdCB0dD1uZXcgRGF0ZTtmb3IoY29uc3QgSGUgb2Yg''@;'; put 'put ''JGUpSGUubGFzdEFjY2Vzc2VkPXR0O1JlKG51bGwsJGUpfSl9Z2V0Q29va2llU3RyaW5nKC4uLkRlKXtjb25zdCBGZT1EZS5wb3AoKTtGLnZhbGlkYXRlKEYuaXNGdW5jdGlvbihGZSksRmUpLERlLnB1c2goZnVuY3Rpb24oSWUsVmUpe0llP0ZlKEllKTpGZShudWxsLFZlLnNvcnQoc2UpLm1h''@;'; put 'put ''cChrZT0+a2UuY29va2llU3RyaW5nKCkpLmpvaW4oIjsgIikpfSksdGhpcy5nZXRDb29raWVzLmFwcGx5KHRoaXMsRGUpfWdldFNldENvb2tpZVN0cmluZ3MoLi4uRGUpe2NvbnN0IEZlPURlLnBvcCgpO0YudmFsaWRhdGUoRi5pc0Z1bmN0aW9uKEZlKSxGZSksRGUucHVzaChmdW5jdGlvbihJ''@;'; put 'put ''ZSxWZSl7SWU/RmUoSWUpOkZlKG51bGwsVmUubWFwKGtlPT5rZS50b1N0cmluZygpKSl9KSx0aGlzLmdldENvb2tpZXMuYXBwbHkodGhpcyxEZSl9c2VyaWFsaXplKERlKXtGLnZhbGlkYXRlKEYuaXNGdW5jdGlvbihEZSksRGUpO2xldCBGZT10aGlzLnN0b3JlLmNvbnN0cnVjdG9yLm5hbWU7''@;'; put 'put ''Ri5pc09iamVjdChGZSkmJihGZT1udWxsKTtjb25zdCBSZT17dmVyc2lvbjpgdG91Z2gtY29va2llQCR7T31gLHN0b3JlVHlwZTpGZSxyZWplY3RQdWJsaWNTdWZmaXhlczohIXRoaXMucmVqZWN0UHVibGljU3VmZml4ZXMsZW5hYmxlTG9vc2VNb2RlOiEhdGhpcy5lbmFibGVMb29zZU1vZGUs''@;'; put 'put ''YWxsb3dTcGVjaWFsVXNlRG9tYWluOiEhdGhpcy5hbGxvd1NwZWNpYWxVc2VEb21haW4scHJlZml4U2VjdXJpdHk6TWUodGhpcy5wcmVmaXhTZWN1cml0eSksY29va2llczpbXX07aWYoIXRoaXMuc3RvcmUuZ2V0QWxsQ29va2llc3x8ImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXMuc3RvcmUuZ2V0''@;'; put 'put ''QWxsQ29va2llcylyZXR1cm4gRGUobmV3IEVycm9yKCJzdG9yZSBkb2VzIG5vdCBzdXBwb3J0IGdldEFsbENvb2tpZXMgYW5kIGNhbm5vdCBiZSBzZXJpYWxpemVkIikpO3RoaXMuc3RvcmUuZ2V0QWxsQ29va2llcygoSWUsVmUpPT5JZT9EZShJZSk6KFJlLmNvb2tpZXM9VmUubWFwKGtlPT4o''@;'; put 'put ''ZGVsZXRlKGtlPWtlIGluc3RhbmNlb2YgYXQ/a2UudG9KU09OKCk6a2UpLmNyZWF0aW9uSW5kZXgsa2UpKSxEZShudWxsLFJlKSkpfXRvSlNPTigpe3JldHVybiB0aGlzLnNlcmlhbGl6ZVN5bmMoKX1faW1wb3J0Q29va2llcyhEZSxGZSl7bGV0IFJlPURlLmNvb2tpZXM7aWYoIVJlfHwhQXJy''@;'; put 'put ''YXkuaXNBcnJheShSZSkpcmV0dXJuIEZlKG5ldyBFcnJvcigic2VyaWFsaXplZCBqYXIgaGFzIG5vIGNvb2tpZXMgYXJyYXkiKSk7UmU9UmUuc2xpY2UoKTtjb25zdCBJZT1WZT0+e2lmKFZlKXJldHVybiBGZShWZSk7aWYoIVJlLmxlbmd0aClyZXR1cm4gRmUoVmUsdGhpcyk7bGV0IGtlO3Ry''@;'; put 'put ''eXtrZT10ZShSZS5zaGlmdCgpKX1jYXRjaChBZSl7cmV0dXJuIEZlKEFlKX1pZihudWxsPT09a2UpcmV0dXJuIEllKG51bGwpO3RoaXMuc3RvcmUucHV0Q29va2llKGtlLEllKX07SWUoKX1jbG9uZShEZSxGZSl7MT09PWFyZ3VtZW50cy5sZW5ndGgmJihGZT1EZSxEZT1udWxsKSx0aGlzLnNl''@;'; put 'put ''cmlhbGl6ZSgoUmUsSWUpPT57aWYoUmUpcmV0dXJuIEZlKFJlKTt2ZS5kZXNlcmlhbGl6ZShJZSxEZSxGZSl9KX1jbG9uZVN5bmMoRGUpe2lmKDA9PT1hcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlzLl9jbG9uZVN5bmMoKTtpZighRGUuc3luY2hyb25vdXMpdGhyb3cgbmV3IEVycm9yKCJD''@;'; put 'put ''b29raWVKYXIgY2xvbmUgZGVzdGluYXRpb24gc3RvcmUgaXMgbm90IHN5bmNocm9ub3VzOyB1c2UgYXN5bmMgQVBJIGluc3RlYWQuIik7cmV0dXJuIHRoaXMuX2Nsb25lU3luYyhEZSl9cmVtb3ZlQWxsQ29va2llcyhEZSl7Ri52YWxpZGF0ZShGLmlzRnVuY3Rpb24oRGUpLERlKTtjb25zdCBG''@;'; put 'put ''ZT10aGlzLnN0b3JlO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBGZS5yZW1vdmVBbGxDb29raWVzJiZGZS5yZW1vdmVBbGxDb29raWVzIT09Qi5wcm90b3R5cGUucmVtb3ZlQWxsQ29va2llcylyZXR1cm4gRmUucmVtb3ZlQWxsQ29va2llcyhEZSk7RmUuZ2V0QWxsQ29va2llcygoUmUsSWUpPT57''@;'; put 'put ''aWYoUmUpcmV0dXJuIERlKFJlKTtpZigwPT09SWUubGVuZ3RoKXJldHVybiBEZShudWxsKTtsZXQgVmU9MDtjb25zdCBrZT1bXTtmdW5jdGlvbiBBZShfdCl7aWYoX3QmJmtlLnB1c2goX3QpLFZlKyssVmU9PT1JZS5sZW5ndGgpcmV0dXJuIERlKGtlLmxlbmd0aD9rZVswXTpudWxsKX1JZS5m''@;'; put 'put ''b3JFYWNoKF90PT57RmUucmVtb3ZlQ29va2llKF90LmRvbWFpbixfdC5wYXRoLF90LmtleSxBZSl9KX0pfXN0YXRpYyBkZXNlcmlhbGl6ZShEZSxGZSxSZSl7bGV0IEllO2lmKDMhPT1hcmd1bWVudHMubGVuZ3RoJiYoUmU9RmUsRmU9bnVsbCksRi52YWxpZGF0ZShGLmlzRnVuY3Rpb24oUmUp''@;'; put 'put ''LFJlKSwic3RyaW5nIj09dHlwZW9mIERlKXtpZihJZT1vZShEZSksSWUgaW5zdGFuY2VvZiBFcnJvcilyZXR1cm4gUmUoSWUpfWVsc2UgSWU9RGU7Y29uc3QgVmU9bmV3IHZlKEZlLHtyZWplY3RQdWJsaWNTdWZmaXhlczpJZS5yZWplY3RQdWJsaWNTdWZmaXhlcyxsb29zZU1vZGU6SWUuZW5h''@;'; put 'put ''YmxlTG9vc2VNb2RlLGFsbG93U3BlY2lhbFVzZURvbWFpbjpJZS5hbGxvd1NwZWNpYWxVc2VEb21haW4scHJlZml4U2VjdXJpdHk6SWUucHJlZml4U2VjdXJpdHl9KTtWZS5faW1wb3J0Q29va2llcyhJZSxrZT0+e2lmKGtlKXJldHVybiBSZShrZSk7UmUobnVsbCxWZSl9KX1zdGF0aWMgZGVz''@;'; put 'put ''ZXJpYWxpemVTeW5jKERlLEZlKXtjb25zdCBSZT0ic3RyaW5nIj09dHlwZW9mIERlP0pTT04ucGFyc2UoRGUpOkRlLEllPW5ldyB2ZShGZSx7cmVqZWN0UHVibGljU3VmZml4ZXM6UmUucmVqZWN0UHVibGljU3VmZml4ZXMsbG9vc2VNb2RlOlJlLmVuYWJsZUxvb3NlTW9kZX0pO2lmKCFJZS5z''@;'; put 'put ''dG9yZS5zeW5jaHJvbm91cyl0aHJvdyBuZXcgRXJyb3IoIkNvb2tpZUphciBzdG9yZSBpcyBub3Qgc3luY2hyb25vdXM7IHVzZSBhc3luYyBBUEkgaW5zdGVhZC4iKTtyZXR1cm4gSWUuX2ltcG9ydENvb2tpZXNTeW5jKFJlKSxJZX19ZnVuY3Rpb24gWGUoamUpe3JldHVybiBmdW5jdGlvbigu''@;'; put 'put ''Li5EZSl7aWYoIXRoaXMuc3RvcmUuc3luY2hyb25vdXMpdGhyb3cgbmV3IEVycm9yKCJDb29raWVKYXIgc3RvcmUgaXMgbm90IHN5bmNocm9ub3VzOyB1c2UgYXN5bmMgQVBJIGluc3RlYWQuIik7bGV0IEZlLFJlO2lmKHRoaXNbamVdKC4uLkRlLChJZSxWZSk9PntGZT1JZSxSZT1WZX0pLEZl''@;'; put 'put ''KXRocm93IEZlO3JldHVybiBSZX19dmUuZnJvbUpTT049dmUuZGVzZXJpYWxpemVTeW5jLFsiX2ltcG9ydENvb2tpZXMiLCJjbG9uZSIsImdldENvb2tpZXMiLCJnZXRDb29raWVTdHJpbmciLCJnZXRTZXRDb29raWVTdHJpbmdzIiwicmVtb3ZlQWxsQ29va2llcyIsInNlcmlhbGl6ZSIsInNl''@;'; put 'put ''dENvb2tpZSJdLmZvckVhY2goamU9Pnt2ZS5wcm90b3R5cGVbamVdPXoodmUucHJvdG90eXBlW2plXSl9KSx2ZS5kZXNlcmlhbGl6ZT16KHZlLmRlc2VyaWFsaXplKSxxLnZlcnNpb249TyxxLkNvb2tpZUphcj12ZSxxLkNvb2tpZT1hdCxxLlN0b3JlPUIscS5NZW1vcnlDb29raWVTdG9yZT13''@;'; put 'put ''LHEucGFyc2VEYXRlPXAscS5mb3JtYXREYXRlPWIscS5wYXJzZT1FLHEuZnJvbUpTT049dGUscS5kb21haW5NYXRjaD1DLHEuZGVmYXVsdFBhdGg9VCxxLnBhdGhNYXRjaD1QLHEuZ2V0UHVibGljU3VmZml4PWcuZ2V0UHVibGljU3VmZml4LHEuY29va2llQ29tcGFyZT1zZSxxLnBlcm11dGVE''@;'; put 'put ''b21haW49Xyg3MzI0KS5wZXJtdXRlRG9tYWluLHEucGVybXV0ZVBhdGg9ZnVuY3Rpb24gd2UoamUpe2lmKEYudmFsaWRhdGUoRi5pc1N0cmluZyhqZSkpLCIvIj09PWplKXJldHVyblsiLyJdO2NvbnN0IERlPVtqZV07Zm9yKDtqZS5sZW5ndGg+MTspe2NvbnN0IEZlPWplLmxhc3RJbmRleE9m''@;'; put 'put ''KCIvIik7aWYoMD09PUZlKWJyZWFrO2plPWplLnN1YnN0cigwLEZlKSxEZS5wdXNoKGplKX1yZXR1cm4gRGUucHVzaCgiLyIpLERlfSxxLmNhbm9uaWNhbERvbWFpbj14LHEuUHJlZml4U2VjdXJpdHlFbnVtPWxlLHEuUGFyYW1ldGVyRXJyb3I9Ri5QYXJhbWV0ZXJFcnJvcn0sNTc2MToodWUs''@;'; put 'put ''cSxfKT0+eyJ1c2Ugc3RyaWN0Ijtjb25zdHtmcm9tQ2FsbGJhY2s6eX09Xyg3MDQxKSxnPV8oMjIyNCkueSxCPV8oNzMyNCkucGVybXV0ZURvbWFpbix3PV8oODk3MSkuVSx7Z2V0Q3VzdG9tSW5zcGVjdFN5bWJvbDpQLGdldFV0aWxJbnNwZWN0OkZ9PV8oMTI2OSk7Y2xhc3MgTyBleHRlbmRz''@;'; put 'put ''IGd7Y29uc3RydWN0b3IoKXtzdXBlcigpLHRoaXMuc3luY2hyb25vdXM9ITAsdGhpcy5pZHg9T2JqZWN0LmNyZWF0ZShudWxsKTtjb25zdCBVPVAoKTtVJiYodGhpc1tVXT10aGlzLmluc3BlY3QpfWluc3BlY3QoKXtyZXR1cm5geyBpZHg6ICR7Rih6KSh0aGlzLmlkeCwhMSwyKX0gfWB9Zmlu''@;'; put 'put ''ZENvb2tpZShVLFcsWSxYKXtyZXR1cm4gWChudWxsLHRoaXMuaWR4W1VdJiZ0aGlzLmlkeFtVXVtXXT90aGlzLmlkeFtVXVtXXVtZXXx8bnVsbDp2b2lkIDApfWZpbmRDb29raWVzKFUsVyxZLFgpe2NvbnN0IGVlPVtdO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBZJiYoWD1ZLFk9ITApLCFVKXJl''@;'; put 'put ''dHVybiBYKG51bGwsW10pO2xldCBKO0o9Vz9mdW5jdGlvbihtZSl7T2JqZWN0LmtleXMobWUpLmZvckVhY2goX2U9PntpZih3KFcsX2UpKXtjb25zdCBUZT1tZVtfZV07Zm9yKGNvbnN0IFNlIGluIFRlKWVlLnB1c2goVGVbU2VdKX19KX06ZnVuY3Rpb24obWUpe2Zvcihjb25zdCBfZSBpbiBt''@;'; put 'put ''ZSl7Y29uc3QgVGU9bWVbX2VdO2Zvcihjb25zdCBTZSBpbiBUZSllZS5wdXNoKFRlW1NlXSl9fTtjb25zdCByZT1CKFUsWSl8fFtVXSxpZT10aGlzLmlkeDtyZS5mb3JFYWNoKGxlPT57Y29uc3QgbWU9aWVbbGVdO21lJiZKKG1lKX0pLFgobnVsbCxlZSl9cHV0Q29va2llKFUsVyl7dGhpcy5p''@;'; put 'put ''ZHhbVS5kb21haW5dfHwodGhpcy5pZHhbVS5kb21haW5dPU9iamVjdC5jcmVhdGUobnVsbCkpLHRoaXMuaWR4W1UuZG9tYWluXVtVLnBhdGhdfHwodGhpcy5pZHhbVS5kb21haW5dW1UucGF0aF09T2JqZWN0LmNyZWF0ZShudWxsKSksdGhpcy5pZHhbVS5kb21haW5dW1UucGF0aF1bVS5rZXld''@;'; put 'put ''PVUsVyhudWxsKX11cGRhdGVDb29raWUoVSxXLFkpe3RoaXMucHV0Q29va2llKFcsWSl9cmVtb3ZlQ29va2llKFUsVyxZLFgpe3RoaXMuaWR4W1VdJiZ0aGlzLmlkeFtVXVtXXSYmdGhpcy5pZHhbVV1bV11bWV0mJmRlbGV0ZSB0aGlzLmlkeFtVXVtXXVtZXSxYKG51bGwpfXJlbW92ZUNvb2tp''@;'; put 'put ''ZXMoVSxXLFkpe3JldHVybiB0aGlzLmlkeFtVXSYmKFc/ZGVsZXRlIHRoaXMuaWR4W1VdW1ddOmRlbGV0ZSB0aGlzLmlkeFtVXSksWShudWxsKX1yZW1vdmVBbGxDb29raWVzKFUpe3JldHVybiB0aGlzLmlkeD1PYmplY3QuY3JlYXRlKG51bGwpLFUobnVsbCl9Z2V0QWxsQ29va2llcyhVKXtj''@;'; put 'put ''b25zdCBXPVtdLFk9dGhpcy5pZHg7T2JqZWN0LmtleXMoWSkuZm9yRWFjaChlZT0+e09iamVjdC5rZXlzKFlbZWVdKS5mb3JFYWNoKHJlPT57T2JqZWN0LmtleXMoWVtlZV1bcmVdKS5mb3JFYWNoKGxlPT57bnVsbCE9PWxlJiZXLnB1c2goWVtlZV1bcmVdW2xlXSl9KX0pfSksVy5zb3J0KChl''@;'; put 'put ''ZSxKKT0+KGVlLmNyZWF0aW9uSW5kZXh8fDApLShKLmNyZWF0aW9uSW5kZXh8fDApKSxVKG51bGwsVyl9fWZ1bmN0aW9uIHooSyl7Y29uc3QgVT1PYmplY3Qua2V5cyhLKTtpZigwPT09VS5sZW5ndGgpcmV0dXJuIltPYmplY3Q6IG51bGwgcHJvdG90eXBlXSB7fSI7bGV0IFc9IltPYmplY3Q6''@;'; put 'put ''IG51bGwgcHJvdG90eXBlXSB7XG4iO3JldHVybiBPYmplY3Qua2V5cyhLKS5mb3JFYWNoKChZLFgpPT57Vys9ZnVuY3Rpb24gTihLLFUpe2xldCBZPWAgICcke0t9JzogW09iamVjdDogbnVsbCBwcm90b3R5cGVdIHtcbmA7cmV0dXJuIE9iamVjdC5rZXlzKFUpLmZvckVhY2goKFgsZWUsSik9''@;'; put 'put ''PntZKz1mdW5jdGlvbiBMKEssVSl7Y29uc3QgVz0iICAgICI7bGV0IFk9YCR7V30nJHtLfSc6IFtPYmplY3Q6IG51bGwgcHJvdG90eXBlXSB7XG5gO3JldHVybiBPYmplY3Qua2V5cyhVKS5mb3JFYWNoKChYLGVlLEopPT57WSs9YCAgICAgICR7WH06ICR7VVtYXS5pbnNwZWN0KCl9YCxlZTxK''@;'; put 'put ''Lmxlbmd0aC0xJiYoWSs9IiwiKSxZKz0iXG4ifSksWSs9YCR7V319YCxZfShYLFVbWF0pLGVlPEoubGVuZ3RoLTEmJihZKz0iLCIpLFkrPSJcbiJ9KSxZKz0iICB9IixZfShZLEtbWV0pLFg8VS5sZW5ndGgtMSYmKFcrPSIsIiksVys9IlxuIn0pLFcrPSJ9IixXfVsiZmluZENvb2tpZSIsImZp''@;'; put 'put ''bmRDb29raWVzIiwicHV0Q29va2llIiwidXBkYXRlQ29va2llIiwicmVtb3ZlQ29va2llIiwicmVtb3ZlQ29va2llcyIsInJlbW92ZUFsbENvb2tpZXMiLCJnZXRBbGxDb29raWVzIl0uZm9yRWFjaChLPT57Ty5wcm90b3R5cGVbS109eShPLnByb3RvdHlwZVtLXSl9KSxxLm09T30sODk3MToo''@;'; put 'put ''dWUscSk9PnsidXNlIHN0cmljdCI7cS5VPWZ1bmN0aW9uIF8oSSx5KXtyZXR1cm4geT09PUl8fDA9PT1JLmluZGV4T2YoeSkmJigiLyI9PT15LnN1YnN0cigtMSl8fCIvIj09PUkuc3Vic3RyKHkubGVuZ3RoLDEpKX19LDczMjQ6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7Y29uc3QgST1fKDc1''@;'; put 'put ''Mik7cS5wZXJtdXRlRG9tYWluPWZ1bmN0aW9uIHkoZyxCKXtjb25zdCB3PUkuZ2V0UHVibGljU3VmZml4KGcse2FsbG93U3BlY2lhbFVzZURvbWFpbjpCfSk7aWYoIXcpcmV0dXJuIG51bGw7aWYodz09ZylyZXR1cm5bZ107Ii4iPT1nLnNsaWNlKC0xKSYmKGc9Zy5zbGljZSgwLC0xKSk7Y29u''@;'; put 'put ''c3QgRj1nLnNsaWNlKDAsLSh3Lmxlbmd0aCsxKSkuc3BsaXQoIi4iKS5yZXZlcnNlKCk7bGV0IE89dztjb25zdCB6PVtPXTtmb3IoO0YubGVuZ3RoOylPPWAke0Yuc2hpZnQoKX0uJHtPfWAsei5wdXNoKE8pO3JldHVybiB6fX0sNzUyOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO2NvbnN0IEk9''@;'; put 'put ''Xyg4NTY2KSx5PVsibG9jYWwiLCJleGFtcGxlIiwiaW52YWxpZCIsImxvY2FsaG9zdCIsInRlc3QiXSxnPVsibG9jYWxob3N0IiwiaW52YWxpZCJdO3EuZ2V0UHVibGljU3VmZml4PWZ1bmN0aW9uIEIodyxQPXt9KXtjb25zdCBGPXcuc3BsaXQoIi4iKSxPPUZbRi5sZW5ndGgtMV0sTj0hIVAu''@;'; put 'put ''aWdub3JlRXJyb3I7aWYoUC5hbGxvd1NwZWNpYWxVc2VEb21haW4mJnkuaW5jbHVkZXMoTykpe2lmKEYubGVuZ3RoPjEpcmV0dXJuYCR7RltGLmxlbmd0aC0yXX0uJHtPfWA7aWYoZy5pbmNsdWRlcyhPKSlyZXR1cm5gJHtPfWB9aWYoIU4mJnkuaW5jbHVkZXMoTykpdGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KGBDb29raWUgaGFzIGRvbWFpbiBzZXQgdG8gdGhlIHB1YmxpYyBzdWZmaXggIiR7T30iIHdoaWNoIGlzIGEgc3BlY2lhbCB1c2UgZG9tYWluLiBUbyBhbGxvdyB0aGlzLCBjb25maWd1cmUgeW91ciBDb29raWVKYXIgd2l0aCB7YWxsb3dTcGVjaWFsVXNlRG9tYWluOnRydWUsIHJlamVjdFB1''@;'; put 'put ''YmxpY1N1ZmZpeGVzOiBmYWxzZX0uYCk7cmV0dXJuIEkuZ2V0KHcpfX0sMjIyNDoodWUscSk9PnsidXNlIHN0cmljdCI7cS55PWNsYXNzIF97Y29uc3RydWN0b3IoKXt0aGlzLnN5bmNocm9ub3VzPSExfWZpbmRDb29raWUoeSxnLEIsdyl7dGhyb3cgbmV3IEVycm9yKCJmaW5kQ29va2llIGlz''@;'; put 'put ''IG5vdCBpbXBsZW1lbnRlZCIpfWZpbmRDb29raWVzKHksZyxCLHcpe3Rocm93IG5ldyBFcnJvcigiZmluZENvb2tpZXMgaXMgbm90IGltcGxlbWVudGVkIil9cHV0Q29va2llKHksZyl7dGhyb3cgbmV3IEVycm9yKCJwdXRDb29raWUgaXMgbm90IGltcGxlbWVudGVkIil9dXBkYXRlQ29va2ll''@;'; put 'put ''KHksZyxCKXt0aHJvdyBuZXcgRXJyb3IoInVwZGF0ZUNvb2tpZSBpcyBub3QgaW1wbGVtZW50ZWQiKX1yZW1vdmVDb29raWUoeSxnLEIsdyl7dGhyb3cgbmV3IEVycm9yKCJyZW1vdmVDb29raWUgaXMgbm90IGltcGxlbWVudGVkIil9cmVtb3ZlQ29va2llcyh5LGcsQil7dGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJyZW1vdmVDb29raWVzIGlzIG5vdCBpbXBsZW1lbnRlZCIpfXJlbW92ZUFsbENvb2tpZXMoeSl7dGhyb3cgbmV3IEVycm9yKCJyZW1vdmVBbGxDb29raWVzIGlzIG5vdCBpbXBsZW1lbnRlZCIpfWdldEFsbENvb2tpZXMoeSl7dGhyb3cgbmV3IEVycm9yKCJnZXRBbGxDb29raWVzIGlz''@;'; put 'put ''IG5vdCBpbXBsZW1lbnRlZCAodGhlcmVmb3JlIGphciBjYW5ub3QgYmUgc2VyaWFsaXplZCkiKX19fSwxMjY5Oih1ZSxxLF8pPT57ZnVuY3Rpb24gSSgpe3RyeXtyZXR1cm4gXyg5NTM5KX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24geSgpe3JldHVybiBTeW1ib2wuZm9yKCJub2RlanMu''@;'; put 'put ''dXRpbC5pbnNwZWN0LmN1c3RvbSIpfXEuZ2V0VXRpbEluc3BlY3Q9ZnVuY3Rpb24odyxQPXt9KXtjb25zdCBPPShQLnJlcXVpcmVVdGlsfHxJKSgpO3JldHVybiBmdW5jdGlvbihOLEwsSyl7cmV0dXJuIE8/Ty5pbnNwZWN0KE4sTCxLKTp3KE4pfX0scS5nZXRDdXN0b21JbnNwZWN0U3ltYm9s''@;'; put 'put ''PWZ1bmN0aW9uKHc9e30pe3JldHVybih3Lmxvb2t1cEN1c3RvbUluc3BlY3RTeW1ib2x8fHkpKCl8fGZ1bmN0aW9uIGcoQil7Y29uc3QgUD0oQi5yZXF1aXJlVXRpbHx8SSkoKTtyZXR1cm4gUD9QLmluc3BlY3QuY3VzdG9tOm51bGx9KHcpfX0sNzY1MjoodWUscSk9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''ZnVuY3Rpb24gXyhOKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTn1mdW5jdGlvbiBCKE4pe3JldHVybiJzdHJpbmciPT10eXBlb2YgTnx8TiBpbnN0YW5jZW9mIFN0cmluZ31mdW5jdGlvbiB3KE4pe3JldHVybiJbb2JqZWN0IE9iamVjdF0iPT09dG9TdHJpbmcuY2FsbChOKX1jbGFzcyB6''@;'; put 'put ''IGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoLi4uTCl7c3VwZXIoLi4uTCl9fXEuUGFyYW1ldGVyRXJyb3I9eixxLmlzRnVuY3Rpb249XyxxLmlzTm9uRW1wdHlTdHJpbmc9ZnVuY3Rpb24gSShOKXtyZXR1cm4gQihOKSYmIiIhPT1OfSxxLmlzRGF0ZT1mdW5jdGlvbiB5KE4pe3JldHVybiBm''@;'; put 'put ''dW5jdGlvbiBQKE4sTCl7dHJ5e3JldHVybiBOIGluc3RhbmNlb2YgTH1jYXRjaHtyZXR1cm4hMX19KE4sRGF0ZSkmJmZ1bmN0aW9uIEYoTil7cmV0dXJuIm51bWJlciI9PXR5cGVvZiBOJiZOJTE9PTB9KE4uZ2V0VGltZSgpKX0scS5pc0VtcHR5U3RyaW5nPWZ1bmN0aW9uIGcoTil7cmV0dXJu''@;'; put 'put ''IiI9PT1OfHxOIGluc3RhbmNlb2YgU3RyaW5nJiYiIj09PU4udG9TdHJpbmcoKX0scS5pc1N0cmluZz1CLHEuaXNPYmplY3Q9dyxxLnZhbGlkYXRlPWZ1bmN0aW9uIE8oTixMLEspe2lmKF8oTCl8fChLPUwsTD1udWxsKSx3KEspfHwoSz17RXJyb3I6IkZhaWxlZCBDaGVjayJ9KSwhTil7aWYo''@;'; put 'put ''IUwpdGhyb3cgbmV3IHooSyk7TChuZXcgeihLKSl9fX0sNDU2OnVlPT57dWUuZXhwb3J0cz0iNC4xLjMifSw3MDQxOih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtxLmZyb21DYWxsYmFjaz1mdW5jdGlvbihfKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKCl7aWYoImZ1bmN0''@;'; put 'put ''aW9uIiE9dHlwZW9mIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoLTFdKXJldHVybiBuZXcgUHJvbWlzZSgoSSx5KT0+e2FyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoXT0oZyxCKT0+e2lmKGcpcmV0dXJuIHkoZyk7SShCKX0sYXJndW1lbnRzLmxlbmd0aCsrLF8uYXBwbHkodGhpcyxhcmd1''@;'; put 'put ''bWVudHMpfSk7Xy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LCJuYW1lIix7dmFsdWU6Xy5uYW1lfSl9LHEuZnJvbVByb21pc2U9ZnVuY3Rpb24oXyl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmdW5jdGlvbigpe2NvbnN0IEk9YXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGgtMV07aWYo''@;'; put 'put ''ImZ1bmN0aW9uIiE9dHlwZW9mIEkpcmV0dXJuIF8uYXBwbHkodGhpcyxhcmd1bWVudHMpO2RlbGV0ZSBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aC0xXSxhcmd1bWVudHMubGVuZ3RoLS0sXy5hcHBseSh0aGlzLGFyZ3VtZW50cykudGhlbih5PT5JKG51bGwseSksSSl9LCJuYW1lIix7dmFs''@;'; put 'put ''dWU6Xy5uYW1lfSl9fSw2NzI6ZnVuY3Rpb24odWUscSxfKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHcsUCxGLE8pe3JldHVybiBuZXcoRnx8KEY9UHJvbWlzZSkpKGZ1bmN0aW9uKE4sTCl7ZnVuY3Rpb24gSyhZKXt0cnl7VyhPLm5leHQoWSkp''@;'; put 'put ''fWNhdGNoKFgpe0woWCl9fWZ1bmN0aW9uIFUoWSl7dHJ5e1coTy50aHJvdyhZKSl9Y2F0Y2goWCl7TChYKX19ZnVuY3Rpb24gVyhZKXtZLmRvbmU/TihZLnZhbHVlKTpmdW5jdGlvbiB6KE4pe3JldHVybiBOIGluc3RhbmNlb2YgRj9OOm5ldyBGKGZ1bmN0aW9uKEwpe0woTil9KX0oWS52YWx1''@;'; put 'put ''ZSkudGhlbihLLFUpfVcoKE89Ty5hcHBseSh3LFB8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5Db250ZXh0TWFuYWdlcj12b2lkIDA7Y29uc3QgeT1fKDU5MjgpLGc9Xyg5Nzc4KTtxLkNvbnRleHRNYW5hZ2VyPWNs''@;'; put 'put ''YXNzIEJ7Z2V0IGdldERlZmF1bHRDb21wdXRlQ29udGV4dHMoKXtyZXR1cm4gdGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzfWdldCBnZXREZWZhdWx0TGF1bmNoZXJDb250ZXh0cygpe3JldHVybiB0aGlzLmRlZmF1bHRMYXVuY2hlckNvbnRleHRzfWNvbnN0cnVjdG9yKFAsRil7dGhpcy5z''@;'; put 'put ''ZXJ2ZXJVcmw9UCx0aGlzLnJlcXVlc3RDbGllbnQ9Rix0aGlzLmRlZmF1bHRDb21wdXRlQ29udGV4dHM9WyJDQVMgRm9ybWF0cyBzZXJ2aWNlIGNvbXB1dGUgY29udGV4dCIsIkRhdGEgTWluaW5nIGNvbXB1dGUgY29udGV4dCIsIkltcG9ydCA5IHNlcnZpY2UgY29tcHV0ZSBjb250ZXh0Iiwi''@;'; put 'put ''U0FTIEpvYiBFeGVjdXRpb24gY29tcHV0ZSBjb250ZXh0IiwiU0FTIE1vZGVsIE1hbmFnZXIgY29tcHV0ZSBjb250ZXh0IiwiU0FTIFN0dWRpbyBjb21wdXRlIGNvbnRleHQiLCJTQVMgVmlzdWFsIEZvcmVjYXN0aW5nIGNvbXB1dGUgY29udGV4dCJdLHRoaXMuZGVmYXVsdExhdW5jaGVyQ29u''@;'; put 'put ''dGV4dHM9WyJDQVMgRm9ybWF0cyBzZXJ2aWNlIGxhdW5jaGVyIGNvbnRleHQiLCJEYXRhIE1pbmluZyBsYXVuY2hlciBjb250ZXh0IiwiSW1wb3J0IDkgc2VydmljZSBsYXVuY2hlciBjb250ZXh0IiwiSm9iIEZsb3cgRXhlY3V0aW9uIGxhdW5jaGVyIGNvbnRleHQiLCJTQVMgSm9iIEV4ZWN1''@;'; put 'put ''dGlvbiBsYXVuY2hlciBjb250ZXh0IiwiU0FTIE1vZGVsIE1hbmFnZXIgbGF1bmNoZXIgY29udGV4dCIsIlNBUyBTdHVkaW8gbGF1bmNoZXIgY29udGV4dCIsIlNBUyBWaXN1YWwgRm9yZWNhc3RpbmcgbGF1bmNoZXIgY29udGV4dCJdLFAmJigwLHkuaXNVcmwpKFApfWdldENvbXB1dGVDb250''@;'; put 'put ''ZXh0cyhQKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7cmVzdWx0OkZ9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2NvbXB1dGUvY29udGV4dHM/bGltaXQ9MTAwMDBgLFApLmNhdGNoKHo9Pnt0aHJvdygwLGcu''@;'; put 'put ''cHJlZml4TWVzc2FnZSkoeiwiRXJyb3Igd2hpbGUgZ2V0dGluZyBjb21wdXRlIGNvbnRleHRzLiAiKX0pO3JldHVybihGJiZGLml0ZW1zP0YuaXRlbXM6W10pLm1hcCh6PT4oe2NyZWF0ZWRCeTp6LmNyZWF0ZWRCeSxpZDp6LmlkLG5hbWU6ei5uYW1lLHZlcnNpb246ei52ZXJzaW9uLGF0dHJp''@;'; put 'put ''YnV0ZXM6e319KSl9KX1nZXRMYXVuY2hlckNvbnRleHRzKFApe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtyZXN1bHQ6Rn09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0vbGF1bmNoZXIvY29udGV4dHM/bGltaXQ9''@;'; put 'put ''MTAwMDBgLFApLmNhdGNoKHo9Pnt0aHJvdygwLGcucHJlZml4TWVzc2FnZSkoeiwiRXJyb3Igd2hpbGUgZ2V0dGluZyBsYXVuY2hlciBjb250ZXh0cy4gIil9KTtyZXR1cm4oRiYmRi5pdGVtcz9GLml0ZW1zOltdKS5tYXAoej0+KHtjcmVhdGVkQnk6ei5jcmVhdGVkQnksaWQ6ei5pZCxuYW1l''@;'; put 'put ''OnoubmFtZSx2ZXJzaW9uOnoudmVyc2lvbixhdHRyaWJ1dGVzOnt9fSkpfSl9Y3JlYXRlQ29tcHV0ZUNvbnRleHQoUCxGLE8seixOLEwpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZih0aGlzLnZhbGlkYXRlQ29udGV4dE5hbWUoUCksdGhpcy5pc0RlZmF1bHRD''@;'; put 'put ''b250ZXh0KFAsdGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzLGBDb21wdXRlIGNvbnRleHQgJyR7UH0nIGFscmVhZHkgZXhpc3RzLmApLCh5aWVsZCB0aGlzLmdldENvbXB1dGVDb250ZXh0cyhOKSkuZmluZChlZT0+ZWUubmFtZT09PVApKXRocm93IG5ldyBFcnJvcihgQ29tcHV0ZSBjb250''@;'; put 'put ''ZXh0ICcke1B9JyBhbHJlYWR5IGV4aXN0cy5gKTtpZihGJiYhdGhpcy5kZWZhdWx0TGF1bmNoZXJDb250ZXh0cy5pbmNsdWRlcyhGKSYmISh5aWVsZCB0aGlzLmdldExhdW5jaGVyQ29udGV4dHMoTikpLmZpbmQoSj0+Si5uYW1lPT09Rikpe2NvbnN0IEo9YFRoZSBsYXVuY2hlciBjb250ZXh0''@;'; put 'put ''IGZvciAke0Z9YCxpZT15aWVsZCB0aGlzLmNyZWF0ZUxhdW5jaGVyQ29udGV4dChGLEosImRpcmVjdCIsTikuY2F0Y2gobGU9Pnt0aHJvdyBuZXcgRXJyb3IoYEVycm9yIHdoaWxlIGNyZWF0aW5nIGxhdW5jaGVyIGNvbnRleHQuICR7bGV9YCl9KTtpZighaWV8fCFpZS5uYW1lKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiRXJyb3Igd2hpbGUgY3JlYXRpbmcgbGF1bmNoZXIgY29udGV4dC4iKTtGPWllLm5hbWV9bGV0IFc9e3JldXNlU2VydmVyUHJvY2Vzc2VzOiEwfTtPJiYoVz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sVykse3J1blNlcnZlckFzOk99KSk7Y29uc3QgWT17bmFtZTpQ''@;'; put 'put ''LGxhdW5jaENvbnRleHQ6e2NvbnRleHROYW1lOkZ8fCIifSxhdHRyaWJ1dGVzOld9O0wmJkwubGVuZ3RoP1kuYXV0aG9yaXplZFVzZXJzPUw6WS5hdXRob3JpemVBbGxBdXRoZW50aWNhdGVkVXNlcnM9ITAseiYmKFkuZW52aXJvbm1lbnQ9e2F1dG9FeGVjTGluZXM6en0pO2NvbnN0e3Jlc3Vs''@;'; put 'put ''dDpYfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdChgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0c2AsWSxOKS5jYXRjaChlZT0+e3Rocm93KDAsZy5wcmVmaXhNZXNzYWdlKShlZSwiRXJyb3Igd2hpbGUgY3JlYXRpbmcgY29tcHV0ZSBjb250ZXh0LiAiKX0pO3JldHVy''@;'; put 'put ''biBYfSl9Y3JlYXRlTGF1bmNoZXJDb250ZXh0KFAsRixPPSJkaXJlY3QiLHope3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZighUCl0aHJvdyBuZXcgRXJyb3IoIkNvbnRleHQgbmFtZSBpcyByZXF1aXJlZC4iKTtpZih0aGlzLmlzRGVmYXVsdENvbnRleHQoUCx0''@;'; put 'put ''aGlzLmRlZmF1bHRMYXVuY2hlckNvbnRleHRzLGBMYXVuY2hlciBjb250ZXh0ICcke1B9JyBhbHJlYWR5IGV4aXN0cy5gKSwoeWllbGQgdGhpcy5nZXRMYXVuY2hlckNvbnRleHRzKHopKS5maW5kKFc9PlcubmFtZT09PVApKXRocm93IG5ldyBFcnJvcihgTGF1bmNoZXIgY29udGV4dCAnJHtQ''@;'; put 'put ''fScgYWxyZWFkeSBleGlzdHMuYCk7Y29uc3QgSz17bmFtZTpQLGRlc2NyaXB0aW9uOkYsbGF1bmNoVHlwZTpPfSx7cmVzdWx0OlV9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KGAke3RoaXMuc2VydmVyVXJsfS9sYXVuY2hlci9jb250ZXh0c2AsSyx6KS5jYXRjaChXPT57dGhyb3co''@;'; put 'put ''MCxnLnByZWZpeE1lc3NhZ2UpKFcsIkVycm9yIHdoaWxlIGNyZWF0aW5nIGxhdW5jaGVyIGNvbnRleHQuICIpfSk7cmV0dXJuIFV9KX1lZGl0Q29tcHV0ZUNvbnRleHQoUCxGLE8pe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgejt0aGlzLnZhbGlkYXRlQ29u''@;'; put 'put ''dGV4dE5hbWUoUCksdGhpcy5pc0RlZmF1bHRDb250ZXh0KFAsdGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzLCJFZGl0aW5nIGRlZmF1bHQgU0FTIGNvbXB1dGUgY29udGV4dHMgaXMgbm90IGFsbG93ZWQuIiwhMCksej15aWVsZCB0aGlzLmdldENvbXB1dGVDb250ZXh0QnlOYW1lKFAsTyks''@;'; put 'put ''enx8KHo9eWllbGQgdGhpcy5nZXRDb21wdXRlQ29udGV4dEJ5SWQoRi5pZCxPKSk7Y29uc3R7cmVzdWx0Ok4sZXRhZzpMfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfS9jb21wdXRlL2NvbnRleHRzLyR7ei5pZH1gLE8pLmNhdGNoKEs9Pnt0aHJvdyBL''@;'; put 'put ''JiY0MDQ9PT1LLnN0YXR1cz9uZXcgRXJyb3IoYFRoZSBjb250ZXh0ICcke1B9JyB3YXMgbm90IGZvdW5kIG9uIHRoaXMgc2VydmVyLmApOkt9KTtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnB1dChgL2NvbXB1dGUvY29udGV4dHMvJHtOLmlkfWAsT2JqZWN0LmFzc2lnbihPYmpl''@;'; put 'put ''Y3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sTiksRikse2F0dHJpYnV0ZXM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LE4uYXR0cmlidXRlcyksRi5hdHRyaWJ1dGVzKX0pLE8seyJJZi1NYXRjaCI6TH0pfSl9Z2V0Q29tcHV0ZUNvbnRleHRCeU5hbWUoUCxGKXtyZXR1cm4gSSh0''@;'; put 'put ''aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7cmVzdWx0Ok99PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2NvbXB1dGUvY29udGV4dHM/ZmlsdGVyPWVxKG5hbWUsICIke1B9IilgLEYpLmNhdGNoKHo9Pnt0aHJvdygwLGcucHJlZml4''@;'; put 'put ''TWVzc2FnZSkoeiwiRXJyb3Igd2hpbGUgZ2V0dGluZyBjb21wdXRlIGNvbnRleHQgYnkgbmFtZS4gIil9KTtpZighT3x8IU8uaXRlbXN8fCFPLml0ZW1zLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBjb250ZXh0ICcke1B9JyB3YXMgbm90IGZvdW5kIGF0ICcke3RoaXMuc2VydmVyVXJs''@;'; put 'put ''fScuYCk7cmV0dXJuIE8uaXRlbXNbMF19KX1nZXRDb21wdXRlQ29udGV4dEJ5SWQoUCxGKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7cmVzdWx0Ok99PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2NvbXB1dGUv''@;'; put 'put ''Y29udGV4dHMvJHtQfWAsRikuY2F0Y2goej0+e3Rocm93KDAsZy5wcmVmaXhNZXNzYWdlKSh6LCJFcnJvciB3aGlsZSBnZXR0aW5nIGNvbXB1dGUgY29udGV4dCBieSBpZC4gIil9KTtyZXR1cm4gT30pfWdldEV4ZWN1dGFibGVDb250ZXh0cyhQLEYpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZv''@;'; put 'put ''aWQgMCxmdW5jdGlvbiooKXtjb25zdHtyZXN1bHQ6T309eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0cz9saW1pdD0xMDAwMGAsRj8uYWNjZXNzX3Rva2VuKS5jYXRjaChVPT57dGhyb3coMCxnLnByZWZpeE1lc3NhZ2UpKFUs''@;'; put 'put ''IkVycm9yIHdoaWxlIGZldGNoaW5nIGNvbXB1dGUgY29udGV4dHMuIil9KSx6PU8uaXRlbXN8fFtdLE49W10sTD16Lm1hcChVPT57Y29uc3QgVz1bIiVwdXQgJj1zeXN1c2VyaWQ7Il07cmV0dXJuKCk9PlAoYHRlc3QtJHtVLm5hbWV9YCxXLFUubmFtZSxGLG51bGwsITEsITAsITApLmNhdGNo''@;'; put 'put ''KFk9PlkpfSk7bGV0IEs9W107Zm9yKGNvbnN0IFUgb2YgTClLLnB1c2goeWllbGQgVSgpKTtyZXR1cm4gSy5mb3JFYWNoKChVLFcpPT57aWYoVSYmVS5sb2cpdHJ5e2xldCBYPSIiO2NvbnN0IGVlPVUubG9nLnNwbGl0KCJcbiIpLmZpbmQoSj0+Si5zdGFydHNXaXRoKCJTWVNVU0VSSUQ9Iikp''@;'; put 'put ''O2VlJiYoWD1lZS5yZXBsYWNlKCJTWVNVU0VSSUQ9IiwiIiksTi5wdXNoKHtjcmVhdGVkQnk6eltXXS5jcmVhdGVkQnksaWQ6eltXXS5pZCxuYW1lOnpbV10ubmFtZSx2ZXJzaW9uOnpbV10udmVyc2lvbixhdHRyaWJ1dGVzOntzeXNVc2VySWQ6WH19KSl9Y2F0Y2goWSl7dGhyb3cgWX19KSxO''@;'; put 'put ''fSl9ZGVsZXRlQ29tcHV0ZUNvbnRleHQoUCxGKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dGhpcy52YWxpZGF0ZUNvbnRleHROYW1lKFApLHRoaXMuaXNEZWZhdWx0Q29udGV4dChQLHRoaXMuZGVmYXVsdENvbXB1dGVDb250ZXh0cywiRGVsZXRpbmcgZGVmYXVs''@;'; put 'put ''dCBTQVMgY29tcHV0ZSBjb250ZXh0cyBpcyBub3QgYWxsb3dlZC4iLCEwKTtjb25zdCB6PXlpZWxkIHRoaXMuZ2V0Q29tcHV0ZUNvbnRleHRCeU5hbWUoUCxGKTtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmRlbGV0ZShgJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0''@;'; put 'put ''cy8ke3ouaWR9YCxGKX0pfXZhbGlkYXRlQ29udGV4dE5hbWUoUCl7aWYoIVApdGhyb3cgbmV3IEVycm9yKCJDb250ZXh0IG5hbWUgaXMgcmVxdWlyZWQuIil9aXNEZWZhdWx0Q29udGV4dChQLEY9dGhpcy5kZWZhdWx0Q29tcHV0ZUNvbnRleHRzLE89IiIsej0hMSl7aWYoRi5pbmNsdWRlcyhQ''@;'; put 'put ''KSl0aHJvdyBuZXcgRXJyb3IoYCR7T30ke3o/IlxuRGVmYXVsdCBjb250ZXh0czoiK0YubWFwKChOLEwpPT5gXG4ke0wrMX0uICR7Tn1gKToiIn1gKX19fSw4MzA2OmZ1bmN0aW9uKHVlLHEsXyl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbih6LE4s''@;'; put 'put ''TCxLKXtyZXR1cm4gbmV3KEx8fChMPVByb21pc2UpKShmdW5jdGlvbihXLFkpe2Z1bmN0aW9uIFgocmUpe3RyeXtKKEsubmV4dChyZSkpfWNhdGNoKGllKXtZKGllKX19ZnVuY3Rpb24gZWUocmUpe3RyeXtKKEsudGhyb3cocmUpKX1jYXRjaChpZSl7WShpZSl9fWZ1bmN0aW9uIEoocmUpe3Jl''@;'; put 'put ''LmRvbmU/VyhyZS52YWx1ZSk6ZnVuY3Rpb24gVShXKXtyZXR1cm4gVyBpbnN0YW5jZW9mIEw/VzpuZXcgTChmdW5jdGlvbihZKXtZKFcpfSl9KHJlLnZhbHVlKS50aGVuKFgsZWUpfUooKEs9Sy5hcHBseSh6LE58fFtdKSkubmV4dCgpKX0pfSx5PXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0''@;'; put 'put ''fHxmdW5jdGlvbih6KXtyZXR1cm4geiYmei5fX2VzTW9kdWxlP3o6e2RlZmF1bHQ6en19O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLlNBUzlBcGlDbGllbnQ9dm9pZCAwO2NvbnN0IGc9Xyg3NzU3KSxCPXkoXyg2MjMwKSksdz1fKDc5NSksUD1f''@;'; put 'put ''KDU5MjgpO3EuU0FTOUFwaUNsaWVudD1jbGFzcyBGe2NvbnN0cnVjdG9yKE4sTCxLKXt0aGlzLnNlcnZlclVybD1OLHRoaXMuam9ic1BhdGg9TCxOJiYoMCxQLmlzVXJsKShOKSx0aGlzLnJlcXVlc3RDbGllbnQ9bmV3IHcuU2FzOVJlcXVlc3RDbGllbnQoTixLKX1nZXRDb25maWcoKXtyZXR1''@;'; put 'put ''cm57c2VydmVyVXJsOnRoaXMuc2VydmVyVXJsfX1zZXRDb25maWcoTil7TiYmKHRoaXMuc2VydmVyVXJsPU4pfWV4ZWN1dGVTY3JpcHQoTixMLEspe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQubG9naW4oTCxLLHRoaXMu''@;'; put 'put ''am9ic1BhdGgpO2NvbnN0IFc9TyhbLi4uTiwiZGF0YSBfbnVsbF87IiwiZmlsZSBfd2Vib3V0OyIsInB1dCAnRXhlY3V0ZWQgc2FzanMgcnVuJzsiLCJydW47Il0uam9pbigiXG4iKSksWT1gL1VzZXIgRm9sZGVycy8ke0x9L015IEZvbGRlci9zYXNqcy9ydW5uZXJgLFg9Im11bHRpcGFydC9m''@;'; put 'put ''b3JtLWRhdGE7IGJvdW5kYXJ5PSIrVy5nZXRCb3VuZGFyeSgpLEo9eyJjYWNoZS1jb250cm9sIjoibm8tY2FjaGUiLEFjY2VwdDoiKi8qIiwiQ29udGVudC1UeXBlIjpYLCJDb250ZW50LUxlbmd0aCI6Vy5nZXRMZW5ndGhTeW5jKCksQ29ubmVjdGlvbjoia2VlcC1hbGl2ZSJ9LHJlPWAke3Ro''@;'; put 'put ''aXMuam9ic1BhdGh9Lz8keyJfcHJvZ3JhbT0iK1krIiZfZGVidWc9bG9nIn1gO3JldHVybih5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdChyZSxXLHZvaWQgMCxYLEopKS5yZXN1bHR9KX19O2NvbnN0IE89ej0+e2NvbnN0IE49bmV3IEIuZGVmYXVsdCxMPWBzYXNqcy1leGVjdXRlLXNh''@;'; put 'put ''czktJHsoMCxnLmdlbmVyYXRlVGltZXN0YW1wKSgiIil9LnNhc2A7cmV0dXJuIE4uYXBwZW5kKEwseix7ZmlsZW5hbWU6TCxjb250ZW50VHlwZToidGV4dC9wbGFpbiJ9KSxOfX0sOTgyMTpmdW5jdGlvbih1ZSxxLF8peyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDQxNTUpLHk9Xyg1MTA4KSxnPXRo''@;'; put 'put ''aXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihyZSxpZSxsZSxtZSl7cmV0dXJuIG5ldyhsZXx8KGxlPVByb21pc2UpKShmdW5jdGlvbihUZSxTZSl7ZnVuY3Rpb24gemUoYil7dHJ5e3AobWUubmV4dChiKSl9Y2F0Y2goeCl7U2UoeCl9fWZ1bmN0aW9uIFYoYil7dHJ5e3AobWUudGhyb3co''@;'; put 'put ''YikpfWNhdGNoKHgpe1NlKHgpfX1mdW5jdGlvbiBwKGIpe2IuZG9uZT9UZShiLnZhbHVlKTpmdW5jdGlvbiBfZShUZSl7cmV0dXJuIFRlIGluc3RhbmNlb2YgbGU/VGU6bmV3IGxlKGZ1bmN0aW9uKFNlKXtTZShUZSl9KX0oYi52YWx1ZSkudGhlbih6ZSxWKX1wKChtZT1tZS5hcHBseShyZSxp''@;'; put 'put ''ZXx8W10pKS5uZXh0KCkpfSl9LEI9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKHJlKXtyZXR1cm4gcmUmJnJlLl9fZXNNb2R1bGU/cmU6e2RlZmF1bHQ6cmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5TQVNWaXlhQXBp''@;'; put 'put ''Q2xpZW50PXZvaWQgMDtjb25zdCB3PV8oNTkyOCksUD1CKF8oNjIzMCkpLEY9XygxMzk1KSxPPV8oNjkwMyksej1fKDY3MiksTj1fKDkwOTcpLEw9Xyg5Nzc4KSxLPV8oMTM0MyksVT1fKDcwNCksVz1fKDY0OTYpLFk9XygxNjIyKSxYPV8oMzU2OSksZWU9XygzNjYpO3EuU0FTVml5YUFwaUNs''@;'; put 'put ''aWVudD1jbGFzcyBKe2NvbnN0cnVjdG9yKGllLGxlLG1lLF9lKXt0aGlzLnNlcnZlclVybD1pZSx0aGlzLnJvb3RGb2xkZXJOYW1lPWxlLHRoaXMuY29udGV4dE5hbWU9bWUsdGhpcy5yZXF1ZXN0Q2xpZW50PV9lLHRoaXMuX2RlYnVnPSExLHRoaXMuc2Vzc2lvbk1hbmFnZXI9bmV3IE8uU2Vz''@;'; put 'put ''c2lvbk1hbmFnZXIodGhpcy5zZXJ2ZXJVcmwsdGhpcy5jb250ZXh0TmFtZSx0aGlzLnJlcXVlc3RDbGllbnQpLHRoaXMuY29udGV4dE1hbmFnZXI9bmV3IHouQ29udGV4dE1hbmFnZXIodGhpcy5zZXJ2ZXJVcmwsdGhpcy5yZXF1ZXN0Q2xpZW50KSx0aGlzLmZvbGRlck1hcD1uZXcgTWFwLGll''@;'; put 'put ''JiYoMCx3LmlzVXJsKShpZSl9YXBwZW5kUmVxdWVzdChpZSxsZSxtZSl7dGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoaWUsbGUsbWUpfWdldCBkZWJ1Zygpe3JldHVybiB0aGlzLl9kZWJ1Z31zZXQgZGVidWcoaWUpe3RoaXMuX2RlYnVnPWllLHRoaXMuc2Vzc2lvbk1hbmFnZXIm''@;'; put 'put ''Jih0aGlzLnNlc3Npb25NYW5hZ2VyLmRlYnVnPWllKX1nZXRKb2JzSW5Gb2xkZXIoaWUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBsZT0oMCx3LmlzUmVsYXRpdmVQYXRoKShpZSk/YCR7dGhpcy5yb290Rm9sZGVyTmFtZX0vJHtpZX1gOmllO3JldHVy''@;'; put 'put ''biB0aGlzLmZvbGRlck1hcC5nZXQobGUpfHwoeWllbGQgdGhpcy5wb3B1bGF0ZUZvbGRlck1hcChsZSkpLHRoaXMuZm9sZGVyTWFwLmdldChsZSl9KX1nZXRDb25maWcoKXtyZXR1cm57c2VydmVyVXJsOnRoaXMuc2VydmVyVXJsLHJvb3RGb2xkZXJOYW1lOnRoaXMucm9vdEZvbGRlck5hbWV9''@;'; put 'put ''fXNldENvbmZpZyhpZSxsZSl7aWUmJih0aGlzLnNlcnZlclVybD1pZSksbGUmJih0aGlzLnJvb3RGb2xkZXJOYW1lPWxlKX1nZXRDb21wdXRlQ29udGV4dHMoaWUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdl''@;'; put 'put ''ci5nZXRDb21wdXRlQ29udGV4dHMoaWUpfSl9Z2V0RGVmYXVsdENvbXB1dGVDb250ZXh0cygpe3JldHVybiB0aGlzLmNvbnRleHRNYW5hZ2VyLmdldERlZmF1bHRDb21wdXRlQ29udGV4dHN9Z2V0TGF1bmNoZXJDb250ZXh0cyhpZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0''@;'; put 'put ''aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNvbnRleHRNYW5hZ2VyLmdldExhdW5jaGVyQ29udGV4dHMoaWUpfSl9Z2V0RXhlY3V0YWJsZUNvbnRleHRzKGllKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgbGU9dGhpcy5leGVjdXRlU2NyaXB0LmJpbmQo''@;'; put 'put ''dGhpcyk7cmV0dXJuIHlpZWxkIHRoaXMuY29udGV4dE1hbmFnZXIuZ2V0RXhlY3V0YWJsZUNvbnRleHRzKGxlLGllKX0pfWNyZWF0ZVNlc3Npb24oaWUsbGUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtyZXN1bHQ6X2V9PXlpZWxkIHRoaXMucmVxdWVz''@;'; put 'put ''dENsaWVudC5nZXQoIi9jb21wdXRlL2NvbnRleHRzP2xpbWl0PTEwMDAwIixsZSksVGU9X2UuaXRlbXMmJl9lLml0ZW1zLmxlbmd0aD9fZS5pdGVtcy5maW5kKHplPT56ZS5uYW1lPT09aWUpOm51bGw7aWYoIVRlKXRocm93IG5ldyBFcnJvcihgRXhlY3V0aW9uIGNvbnRleHQgJHtpZX0gbm90''@;'; put 'put ''IGZvdW5kLmApO2NvbnN0e3Jlc3VsdDpTZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoYC9jb21wdXRlL2NvbnRleHRzLyR7VGUuaWR9L3Nlc3Npb25zYCx7fSxsZSk7cmV0dXJuIFNlfSl9Y3JlYXRlQ29tcHV0ZUNvbnRleHQoaWUsbGUsbWUsX2UsVGUsU2Upe3JldHVybiBnKHRo''@;'; put 'put ''aXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5jcmVhdGVDb21wdXRlQ29udGV4dChpZSxsZSxtZSxfZSxUZSxTZSl9KX1jcmVhdGVMYXVuY2hlckNvbnRleHQoaWUsbGUsbWU9ImRpcmVjdCIsX2Upe3JldHVybiBnKHRoaXMsdm9p''@;'; put 'put ''ZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5jb250ZXh0TWFuYWdlci5jcmVhdGVMYXVuY2hlckNvbnRleHQoaWUsbGUsbWUsX2UpfSl9ZWRpdENvbXB1dGVDb250ZXh0KGllLGxlLG1lKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0''@;'; put 'put ''dXJuIHlpZWxkIHRoaXMuY29udGV4dE1hbmFnZXIuZWRpdENvbXB1dGVDb250ZXh0KGllLGxlLG1lKX0pfWRlbGV0ZUNvbXB1dGVDb250ZXh0KGllLGxlKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuY29udGV4dE1hbmFnZXIuZGVs''@;'; put 'put ''ZXRlQ29tcHV0ZUNvbnRleHQoaWUsbGUpfSl9ZXhlY3V0ZVNjcmlwdChpZSxsZSxtZSxfZSxUZT1udWxsLFNlPSExLHplPSExLFY9ITAscCxiPSExLHgpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oMCxZLmV4ZWN1dGVPbkNvbXB1dGVBcGkpKHRoaXMu''@;'; put 'put ''cmVxdWVzdENsaWVudCx0aGlzLnNlc3Npb25NYW5hZ2VyLHRoaXMucm9vdEZvbGRlck5hbWUsaWUsbGUsbWUsX2UsVGUsU2UsemUsVixwLGIseCl9KX1nZXRGb2xkZXIoaWUsbGUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5yZXF1''@;'; put 'put ''ZXN0Q2xpZW50LmdldChgL2ZvbGRlcnMvZm9sZGVycy9AaXRlbT9wYXRoPSR7aWV9YCxsZSkudGhlbihtZT0+bWUucmVzdWx0KX0pfWNyZWF0ZUZpbGUoaWUsbGUsbWUsX2UsVGUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZighbWUmJiFfZSl0aHJvdyBuZXcg''@;'; put 'put ''RXJyb3IoIlBhdGggb3IgVVJJIG9mIHRoZSBwYXJlbnQgZm9sZGVyIGlzIHJlcXVpcmVkLiIpOyFfZSYmbWUmJihfZT15aWVsZCB0aGlzLmdldEZvbGRlclVyaShtZSxUZSkpO2NvbnN0IFNlPXtBY2NlcHQ6ImFwcGxpY2F0aW9uL3ZuZC5zYXMuZmlsZStqc29uIiwiQ29udGVudC1EaXNwb3Np''@;'; put 'put ''dGlvbiI6YGZpbGVuYW1lPSIke2llfSI7YH0semU9bmV3IFAuZGVmYXVsdDtyZXR1cm4gemUuYXBwZW5kKCJmaWxlIixsZSxpZSksKHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KGAvZmlsZXMvZmlsZXM/cGFyZW50Rm9sZGVyVXJpPSR7X2V9JnR5cGVEZWZOYW1lPWZpbGUjcmF3VXBs''@;'; put 'put ''b2FkYCx6ZSxUZSwibXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9Iit6ZS5fYm91bmRhcnksU2UpKS5yZXN1bHR9KX1jcmVhdGVGb2xkZXIoaWUsbGUsbWUsX2UsVGUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBTZT1JLmxvZ2dlcnx8eTtpZigh''@;'; put 'put ''bGUmJiFtZSl0aHJvdyBuZXcgRXJyb3IoIlBhdGggb3IgVVJJIG9mIHRoZSBwYXJlbnQgZm9sZGVyIGlzIHJlcXVpcmVkLiIpO2lmKCFtZSYmbGUpaWYobWU9eWllbGQgdGhpcy5nZXRGb2xkZXJVcmkobGUsX2UpKXtpZihUZSl7Y29uc3QgVj1sZSsiLyIraWU7KHlpZWxkIHRoaXMuZ2V0Rm9s''@;'; put 'put ''ZGVyVXJpKFYsX2UpKSYmKHlpZWxkIHRoaXMuZGVsZXRlRm9sZGVyKGxlKyIvIitpZSxfZSkpfX1lbHNle1NlLmluZm8oYFBhcmVudCBmb2xkZXIgYXQgcGF0aCAnJHtsZX0nIGlzIG5vdCBwcmVzZW50LmApO2NvbnN0IFY9bGUuc3Vic3RyaW5nKDAsbGUubGFzdEluZGV4T2YoIi8iKSkscD1g''@;'; put 'put ''JHtsZS5zcGxpdCgiLyIpLnBvcCgpfWA7aWYoIiI9PT1WKXRocm93IG5ldyBGLlJvb3RGb2xkZXJOb3RGb3VuZEVycm9yKGxlLHRoaXMuc2VydmVyVXJsLF9lKTtTZS5pbmZvKGBDcmVhdGluZyBwYXJlbnQgZm9sZGVyOlxuJyR7cH0nIGluICcke1Z9J2ApO2NvbnN0IGI9eWllbGQgdGhpcy5j''@;'; put 'put ''cmVhdGVGb2xkZXIocCxWLHZvaWQgMCxfZSk7U2UuaW5mbyhgUGFyZW50IGZvbGRlciAnJHtwfScgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQuYCksbWU9YC9mb2xkZXJzL2ZvbGRlcnMvJHtiLmlkfWB9Y29uc3R7cmVzdWx0OnplfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9z''@;'; put 'put ''dChgL2ZvbGRlcnMvZm9sZGVycz9wYXJlbnRGb2xkZXJVcmk9JHttZX1gLHtuYW1lOmllLHR5cGU6ImZvbGRlciJ9LF9lKS5jYXRjaChWPT57Y29uc3R7bWVzc2FnZTpwLHJlc3BvbnNlOmJ9PVY7aWYocCYmYiYmYi5kYXRhJiZiLmRhdGEubWVzc2FnZSl7Y29uc3R7c3RhdHVzOnh9PWIse21l''@;'; put 'put ''c3NhZ2U6Q309Yi5kYXRhLFQ9W3AsQ10ubWFwKGo9Pi9cLiQvLnRlc3Qoaik/ajpgJHtqfS5gKTt0aHJvdyFUZSYmNDA5PT09eCYmVC5wdXNoKCdUbyBvdmVycmlkZSwgcGxlYXNlIHNldCAiaXNGb3JjZWQiIHRvICJ0cnVlIi4nKSxULmpvaW4oIiAiKX10aHJvdyBWfSk7cmV0dXJuIHlpZWxk''@;'; put 'put ''IHRoaXMucG9wdWxhdGVGb2xkZXJNYXAoYCR7bGV9LyR7aWV9YCxfZSksemV9KX1jcmVhdGVKb2JEZWZpbml0aW9uKGllLGxlLG1lLF9lLFRlKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoIW1lJiYhX2UpdGhyb3cgbmV3IEVycm9yKCJQYXRoIHRvIG9yIFVS''@;'; put 'put ''SSBvZiB0aGUgcGFyZW50IGZvbGRlciBpcyByZXF1aXJlZC4iKTtyZXR1cm4hX2UmJm1lJiYoX2U9eWllbGQgdGhpcy5nZXRGb2xkZXJVcmkobWUsVGUpKSx5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdChgJHt0aGlzLnNlcnZlclVybH0vam9iRGVmaW5pdGlvbnMvZGVmaW5pdGlvbnM/''@;'; put 'put ''cGFyZW50Rm9sZGVyVXJpPSR7X2V9YCx7bmFtZTppZSxwYXJhbWV0ZXJzOlt7bmFtZToiX2FkZGplc2JlZ2luZW5kbWFjcm9zIix0eXBlOiJDSEFSQUNURVIiLGRlZmF1bHRWYWx1ZToiZmFsc2UifV0sdHlwZToiQ29tcHV0ZSIsY29kZTpsZX0sVGUpfSl9Z2V0QXV0aENvZGUoaWUpe3JldHVy''@;'; put 'put ''biBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBsZT1gJHt0aGlzLnNlcnZlclVybH0vU0FTTG9nb24vb2F1dGgvYXV0aG9yaXplP2NsaWVudF9pZD0ke2llfSZyZXNwb25zZV90eXBlPWNvZGVgO3JldHVybiB5aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGxlLHZv''@;'; put 'put ''aWQgMCwidGV4dC9wbGFpbiIpLnRoZW4oX2U9Pl9lLnJlc3VsdCkudGhlbihfZT0+Zyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IFRlPSIiO2lmKCgwLE4uaXNBdXRob3JpemVGb3JtUmVxdWlyZWQpKF9lKSl7Y29uc3QgemU9KHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5h''@;'; put 'put ''dXRob3JpemUoX2UpKS5zcGxpdCgiPGJvZHk+IilbMV0uc3BsaXQoIjwvYm9keT4iKVswXSxWPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBWLmlubmVySFRNTD16ZSxUZT1WLnF1ZXJ5U2VsZWN0b3IoIi5pbmZvYm94IGg0IikuaW5uZXJUZXh0LFRlfXtjb25zdCBTZT1f''@;'; put 'put ''ZS5zcGxpdCgiPGJvZHk+IilbMV0uc3BsaXQoIjwvYm9keT4iKVswXSx6ZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtyZXR1cm4gemUuaW5uZXJIVE1MPVNlLHplJiYoVGU9emUucXVlcnlTZWxlY3RvcigiLmluZm9ib3ggaDQiKS5pbm5lclRleHQpLFRlfX0pKS5jYXRjaCgoKT0+''@;'; put 'put ''bnVsbCl9KX1nZXRBY2Nlc3NUb2tlbihpZSxsZSxtZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybigwLFguZ2V0QWNjZXNzVG9rZW5Gb3JWaXlhKSh0aGlzLnJlcXVlc3RDbGllbnQsaWUsbGUsbWUpfSl9cmVmcmVzaFRva2VucyhpZSxsZSxtZSl7cmV0''@;'; put 'put ''dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybigwLGVlLnJlZnJlc2hUb2tlbnNGb3JWaXlhKSh0aGlzLnJlcXVlc3RDbGllbnQsaWUsbGUsbWUpfSl9ZGVsZXRlQ2xpZW50KGllLGxlKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29u''@;'; put 'put ''c3QgbWU9dGhpcy5zZXJ2ZXJVcmwrYC9vYXV0aC9jbGllbnRzLyR7aWV9YDtyZXR1cm4oeWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmRlbGV0ZShtZSxsZSkpLnJlc3VsdH0pfWV4ZWN1dGVDb21wdXRlSm9iKGllLGxlLG1lLF9lLFRlLFNlPSEwLHplPSExLFYscD0hMSxiKXtyZXR1cm4gZyh0''@;'; put 'put ''aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IHg9KFRlfHx7fSkuYWNjZXNzX3Rva2VuO2lmKFRlJiYoe2FjY2Vzc190b2tlbjp4fT15aWVsZCgwLFUuZ2V0VG9rZW5zKSh0aGlzLnJlcXVlc3RDbGllbnQsVGUpKSwoMCx3LmlzUmVsYXRpdmVQYXRoKShpZSkmJiF0aGlzLnJvb3RG''@;'; put 'put ''b2xkZXJOYW1lKXRocm93IG5ldyBFcnJvcigiUmVsYXRpdmUgcGF0aHMgY2Fubm90IGJlIHVzZWQgd2l0aG91dCBzcGVjaWZ5aW5nIGEgcm9vdCBmb2xkZXIgbmFtZSIpO2NvbnN0IEM9aWUuc3BsaXQoIi8iKSxUPUMucG9wKCksSD1DLmpvaW4oIi8iKSxqPSgwLHcuaXNSZWxhdGl2ZVBhdGgp''@;'; put 'put ''KGllKT9gJHt0aGlzLnJvb3RGb2xkZXJOYW1lfS8ke0h9YDpIO3lpZWxkIHRoaXMucG9wdWxhdGVGb2xkZXJNYXAoaix4KS5jYXRjaCh0ZT0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKSh0ZSwiRXJyb3Igd2hpbGUgcG9wdWxhdGluZyBmb2xkZXIgbWFwLiAiKX0pO2NvbnN0IEU9dGhpcy5m''@;'; put 'put ''b2xkZXJNYXAuZ2V0KGopO2lmKCFFKXRocm93IG5ldyBFcnJvcihgVGhlIGZvbGRlciAnJHtqfScgd2FzIG5vdCBmb3VuZCBvbiAnJHt0aGlzLnNlcnZlclVybH0nYCk7Y29uc3QgbT1FPy5maW5kKHRlPT50ZS5uYW1lPT09VCk7aWYoIW0pdGhyb3cgbmV3IEVycm9yKCJKb2Igd2FzIG5vdCBm''@;'; put 'put ''b3VuZC4iKTtsZXQgQT1tPy5jb2RlO2lmKCFBKXtjb25zdCB0ZT1tPy5saW5rcy5maW5kKHdlPT4iZ2V0UmVzb3VyY2UiPT09d2UucmVsKTtpZighdGUpdGhyb3cgbmV3IEVycm9yKCJVUkkgb2Ygam9iIGRlZmluaXRpb24gd2FzIG5vdCBmb3VuZC4iKTtjb25zdHtyZXN1bHQ6c2V9PXlpZWxk''@;'; put 'put ''IHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHt0ZS5ocmVmfWAseCkuY2F0Y2god2U9Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSkod2UsIkVycm9yIHdoaWxlIGdldHRpbmcgam9iIGRlZmluaXRpb24uICIpfSk7QT1zZS5jb2RlLG0uY29kZT1BfUF8fChBPSIi''@;'; put 'put ''KTtjb25zdCBvZT1BLnJlcGxhY2UoL1xyXG4vZywiXG4iKS5zcGxpdCgiXG4iKTtyZXR1cm4geWllbGQgdGhpcy5leGVjdXRlU2NyaXB0KGllLG9lLGxlLFRlLF9lLG1lLHplLFNlLFYscCxiKX0pfWV4ZWN1dGVKb2IoaWUsbGUsbWUsX2UsVGUpe3ZhciBTZSx6ZSxWO3JldHVybiBnKHRoaXMs''@;'; put 'put ''dm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgcD0oVGV8fHt9KS5hY2Nlc3NfdG9rZW47aWYoVGUmJih7YWNjZXNzX3Rva2VuOnB9PXlpZWxkKDAsVS5nZXRUb2tlbnMpKHRoaXMucmVxdWVzdENsaWVudCxUZSkpLCgwLHcuaXNSZWxhdGl2ZVBhdGgpKGllKSYmIXRoaXMucm9vdEZvbGRl''@;'; put 'put ''ck5hbWUpdGhyb3cgbmV3IEVycm9yKCJSZWxhdGl2ZSBwYXRocyBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IHNwZWNpZnlpbmcgYSByb290IGZvbGRlciBuYW1lLiIpO2NvbnN0IGI9aWUuc3BsaXQoIi8iKSx4PWIucG9wKCksQz1iLmpvaW4oIi8iKSxUPSgwLHcuaXNSZWxhdGl2ZVBhdGgpKGll''@;'; put 'put ''KT9gJHt0aGlzLnJvb3RGb2xkZXJOYW1lfS8ke0N9YDpDO3lpZWxkIHRoaXMucG9wdWxhdGVGb2xkZXJNYXAoVCxwKTtjb25zdCBIPXRoaXMuZm9sZGVyTWFwLmdldChUKTtpZighSCl0aHJvdyBuZXcgRXJyb3IoYFRoZSBmb2xkZXIgJyR7VH0nIHdhcyBub3QgZm91bmQgb24gJyR7dGhpcy5z''@;'; put 'put ''ZXJ2ZXJVcmx9Jy5gKTtjb25zdCBqPUg/LmZpbmQoRGU9PkRlLm5hbWU9PT14KTtsZXQgRT1bXTtpZihfZSYmT2JqZWN0LmtleXMoX2UpLmxlbmd0aCYmKEU9eWllbGQgdGhpcy51cGxvYWRUYWJsZXMoX2UscCkpLCFqKXRocm93IG5ldyBFcnJvcigiSm9iIHdhcyBub3QgZm91bmQuIik7Y29u''@;'; put 'put ''c3QgbT1udWxsPT09KFNlPWo/LmxpbmtzLmZpbmQoRGU9PiJnZXRSZXNvdXJjZSI9PT1EZS5yZWwpKXx8dm9pZCAwPT09U2U/dm9pZCAwOlNlLmhyZWYse3Jlc3VsdDpBfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfSR7bX1gLHApLG9lPXtfY29udGV4''@;'; put 'put ''dE5hbWU6bGUsX3Byb2dyYW06YCR7VH0vJHt4fWAsX3dlYmluX2ZpbGVfY291bnQ6RS5sZW5ndGgsX09NSVRKU09OTElTVElORzohMCxfT01JVEpTT05MT0c6ITAsX09NSVRTRVNTSU9OUkVTVUxUUzohMCxfT01JVFRFWFRMSVNUSU5HOiEwLF9PTUlUVEVYVExPRzohMH07bWUmJihvZS5fT01J''@;'; put 'put ''VFRFWFRMT0c9ImZhbHNlIixvZS5fT01JVFNFU1NJT05SRVNVTFRTPSJmYWxzZSIsb2UuX0RFQlVHPTEzMSksRS5mb3JFYWNoKChEZSxGZSk9PntvZVtgX3dlYmluX2ZpbGV1cmkke0ZlKzF9YF09YC9maWxlcy9maWxlcy8ke0RlLmZpbGUuaWR9YCxvZVtgX3dlYmluX25hbWUke0ZlKzF9YF09''@;'; put 'put ''RGUudGFibGVOYW1lfSk7Y29uc3QgdGU9e25hbWU6YGV4ZWMtJHt4fWAsZGVzY3JpcHRpb246IlBvd2VyZWQgYnkgU0FTanMiLGpvYkRlZmluaXRpb246QSxhcmd1bWVudHM6b2V9LHtyZXN1bHQ6c2V9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KGAke3RoaXMuc2VydmVyVXJsfS9q''@;'; put 'put ''b2JFeGVjdXRpb24vam9icz9fYWN0aW9uPXdhaXRgLHRlLHApLHdlPXlpZWxkIHRoaXMucG9sbEpvYlN0YXRlKHNlLFRlKS5jYXRjaChEZT0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKShEZSwiRXJyb3Igd2hpbGUgcG9sbGluZyBqb2Igc3RhdHVzLiAiKX0pLHtyZXN1bHQ6VWV9PXlpZWxk''@;'; put 'put ''IHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9L2pvYkV4ZWN1dGlvbi9qb2JzLyR7c2UuaWR9YCxwKTtsZXQgSmUsYXQ7Y29uc3QgTWU9VWUucmVzdWx0c1siX3dlYm91dC5qc29uIl0sdmU9VWUubGlua3MuZmluZChEZT0+ImxvZyI9PT1EZS5yZWwpO2lmKE1lJiYo''@;'; put 'put ''SmU9eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0ke01lfS9jb250ZW50YCxwLCJ0ZXh0L3BsYWluIikpLG1lJiZ2ZSYmKGF0PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYCR7dGhpcy5zZXJ2ZXJVcmx9JHt2ZS5ocmVmfS9jb250ZW50YCxwKS50''@;'; put 'put ''aGVuKERlPT5EZS5yZXN1bHQuaXRlbXMubWFwKEZlPT5GZS5saW5lKS5qb2luKCJcbiIpKSksImZhaWxlZCI9PT13ZSl0aHJvdyBuZXcgRi5Kb2JFeGVjdXRpb25FcnJvcihudWxsPT09KHplPVVlLmVycm9yKXx8dm9pZCAwPT09emU/dm9pZCAwOnplLmVycm9yQ29kZSxudWxsPT09KFY9VWUu''@;'; put 'put ''ZXJyb3IpfHx2b2lkIDA9PT1WP3ZvaWQgMDpWLm1lc3NhZ2UsYXQpO2NvbnN0IFhlPXtyZXN1bHQ6SmU/LnJlc3VsdCxsb2c6YXR9LHtlcnJvcjpqZX09VWU7cmV0dXJuIGplJiYoWGUuZXJyb3I9amUpLFhlfSl9cG9wdWxhdGVGb2xkZXJNYXAoaWUsbGUpe3JldHVybiBnKHRoaXMsdm9pZCAw''@;'; put 'put ''LHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBtZT0oMCx3LmlzUmVsYXRpdmVQYXRoKShpZSk/YCR7dGhpcy5yb290Rm9sZGVyTmFtZX0vJHtpZX1gOmllO2lmKHRoaXMuZm9sZGVyTWFwLmdldChtZSkpcmV0dXJuO2NvbnN0IF9lPSIvZm9sZGVycy9mb2xkZXJzL0BpdGVtP3BhdGg9IittZSx7''@;'; put 'put ''cmVzdWx0OlRlfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke19lfWAsbGUpLmNhdGNoKFY9Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSkoViwiRXJyb3Igd2hpbGUgZ2V0dGluZyBmb2xkZXIuICIpfSk7aWYoIVRlKXRocm93IG5ldyBFcnJvcihgVGhlIHBhdGggJHttZX0gZG9l''@;'; put 'put ''cyBub3QgZXhpc3Qgb24gJHt0aGlzLnNlcnZlclVybH1gKTtjb25zdHtyZXN1bHQ6U2V9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoYC9mb2xkZXJzL2ZvbGRlcnMvJHtUZS5pZH0vbWVtYmVycz9saW1pdD0ke1RlLm1lbWJlckNvdW50PDUwMD81MDA6VGUubWVtYmVyQ291bnR9YCxs''@;'; put 'put ''ZSkuY2F0Y2goVj0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKShWLCJFcnJvciB3aGlsZSBnZXR0aW5nIG1lbWJlcnMuICIpfSk7dGhpcy5mb2xkZXJNYXAuc2V0KG1lLFNlLml0ZW1zKX0pfXBvbGxKb2JTdGF0ZShpZSxsZSxtZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0''@;'; put 'put ''aW9uKigpe3JldHVybigwLEsucG9sbEpvYlN0YXRlKSh0aGlzLnJlcXVlc3RDbGllbnQsaWUsdGhpcy5kZWJ1ZyxsZSxtZSl9KX11cGxvYWRUYWJsZXMoaWUsbGUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oMCxXLnVwbG9hZFRhYmxlcykodGhpcy5y''@;'; put 'put ''ZXF1ZXN0Q2xpZW50LGllLGxlKX0pfWdldEZvbGRlckRldGFpbHMoaWUsbGUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBtZT0oMCx3LmlzVXJpKShpZSk/aWU6YC9mb2xkZXJzL2ZvbGRlcnMvQGl0ZW0/cGF0aD0ke2llfWAse3Jlc3VsdDpfZX09eWll''@;'; put 'put ''bGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0ke21lfWAsbGUpLmNhdGNoKFRlPT57aWYoVGUgaW5zdGFuY2VvZiBGLkNlcnRpZmljYXRlRXJyb3IpdGhyb3cgVGU7cmV0dXJue3Jlc3VsdDpudWxsfX0pO2lmKF9lKXJldHVybiBfZX0pfWdldEZvbGRlclVyaShp''@;'; put 'put ''ZSxsZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IG1lPXlpZWxkIHRoaXMuZ2V0Rm9sZGVyRGV0YWlscyhpZSxsZSk7aWYobWUpcmV0dXJuYC9mb2xkZXJzL2ZvbGRlcnMvJHttZS5pZH1gfSl9Z2V0UmVjeWNsZUJpblVyaShpZSl7cmV0dXJuIGcodGhp''@;'; put 'put ''cyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e3Jlc3VsdDptZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChgJHt0aGlzLnNlcnZlclVybH0vZm9sZGVycy9mb2xkZXJzL0BteVJlY3ljbGVCaW5gLGllKS5jYXRjaChfZT0+e2lmKF9lIGluc3RhbmNlb2YgRi5DZXJ0aWZp''@;'; put 'put ''Y2F0ZUVycm9yKXRocm93IF9lO3JldHVybntyZXN1bHQ6bnVsbH19KTtpZihtZSlyZXR1cm5gL2ZvbGRlcnMvZm9sZGVycy8ke21lLmlkfWB9KX1nZXRDb21wdXRlQ29udGV4dEJ5TmFtZShpZSxsZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVs''@;'; put 'put ''ZCB0aGlzLmNvbnRleHRNYW5hZ2VyLmdldENvbXB1dGVDb250ZXh0QnlOYW1lKGllLGxlKX0pfWdldENvbXB1dGVDb250ZXh0QnlJZChpZSxsZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmNvbnRleHRNYW5hZ2VyLmdldENvbXB1''@;'; put 'put ''dGVDb250ZXh0QnlJZChpZSxsZSl9KX1saXN0Rm9sZGVyKGllLGxlLG1lPTIwKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgX2U9KDAsdy5pc1VyaSkoaWUpP2llOnlpZWxkIHRoaXMuZ2V0Rm9sZGVyVXJpKGllLGxlKSx7cmVzdWx0OlRlfT15aWVsZCB0''@;'; put 'put ''aGlzLnJlcXVlc3RDbGllbnQuZ2V0KGAke3RoaXMuc2VydmVyVXJsfSR7X2V9L21lbWJlcnM/bGltaXQ9JHttZX1gLGxlKTtyZXR1cm4gVGUmJlRlLml0ZW1zP1RlLml0ZW1zLm1hcChTZT0+U2UubmFtZSk6W119KX1tb3ZlRm9sZGVyKGllLGxlLG1lLF9lKXtyZXR1cm4gZyh0aGlzLHZvaWQg''@;'; put 'put ''MCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVGU9aWUuc3BsaXQoIi8iKS5wb3AoKTtpZih5aWVsZCB0aGlzLmdldEZvbGRlckRldGFpbHMobGUsX2UpKW1lPVRlO2Vsc2V7bGV0IHg9bGUuc3BsaXQoIi8iKTt4LnNwbGljZSh4Lmxlbmd0aC0xLDEpLGxlPXguam9pbigiLyIpfWNvbnN0IHpl''@;'; put 'put ''PXlpZWxkIHRoaXMuZ2V0Rm9sZGVyVXJpKGllLF9lKSxWPXlpZWxkIHRoaXMuZ2V0Rm9sZGVyVXJpKGxlLF9lKTtpZighemUpcmV0dXJuO2NvbnN0IHA9emU/LnNwbGl0KCIvIikucG9wKCkse3Jlc3VsdDpifT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucGF0Y2goYCR7dGhpcy5zZXJ2ZXJV''@;'; put 'put ''cmx9JHt6ZX1gLHtpZDpwLG5hbWU6bWUscGFyZW50Rm9sZGVyVXJpOlZ9LF9lKS5jYXRjaCh4PT57dGhyb3cgeC5jb2RlJiYiRU5PVEZPVU5EIj09PXguY29kZT97Ym9keTp7bWVzc2FnZTpgRm9sZGVyICcke2llLnNwbGl0KCIvIikucG9wKCl9JyB3YXMgbm90IGZvdW5kLmB9fTp4fSk7cmV0''@;'; put 'put ''dXJuIGJ8fHZvaWQgMH0pfWRlbGV0ZUZvbGRlcihpZSxsZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IG1lPXlpZWxkIHRoaXMuZ2V0UmVjeWNsZUJpblVyaShsZSksX2U9aWUuc3BsaXQoIi8iKS5wb3AoKXx8IiIsVGU9bmV3IERhdGUsemU9X2UrIiAi''@;'; put 'put ''K1RlLnRvTG9jYWxlRGF0ZVN0cmluZygpKyIgIitUZS50b0xvY2FsZVRpbWVTdHJpbmcoKTtyZXR1cm4geWllbGQgdGhpcy5tb3ZlRm9sZGVyKGllLG1lLHplLGxlKX0pfX19LDU5NTY6ZnVuY3Rpb24odWUscSxfKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1''@;'; put 'put ''bmN0aW9uKFcsWSxYLGVlKXtyZXR1cm4gbmV3KFh8fChYPVByb21pc2UpKShmdW5jdGlvbihyZSxpZSl7ZnVuY3Rpb24gbGUoVGUpe3RyeXtfZShlZS5uZXh0KFRlKSl9Y2F0Y2goU2Upe2llKFNlKX19ZnVuY3Rpb24gbWUoVGUpe3RyeXtfZShlZS50aHJvdyhUZSkpfWNhdGNoKFNlKXtpZShT''@;'; put 'put ''ZSl9fWZ1bmN0aW9uIF9lKFRlKXtUZS5kb25lP3JlKFRlLnZhbHVlKTpmdW5jdGlvbiBKKHJlKXtyZXR1cm4gcmUgaW5zdGFuY2VvZiBYP3JlOm5ldyBYKGZ1bmN0aW9uKGllKXtpZShyZSl9KX0oVGUudmFsdWUpLnRoZW4obGUsbWUpfV9lKChlZT1lZS5hcHBseShXLFl8fFtdKSkubmV4dCgp''@;'; put 'put ''KX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3QgeT1fKDU5MjgpLGc9XygxMjMwKSxCPV8oOTgyMSksdz1fKDgzMDYpLFA9XygzNDY3KSxGPV8oMTUyNyksTz1fKDM5MDApLHo9Xyg0NTg4KSxOPV8oMzYwMiksTD1fKDgyMTcpLEs9e3Nl''@;'; put 'put ''cnZlclVybDoiIixwYXRoU0FTSlM6Ii9TQVNqc0FwaS9zdHAvZXhlY3V0ZSIscGF0aFNBUzk6Ii9TQVNTdG9yZWRQcm9jZXNzL2RvIixwYXRoU0FTVml5YToiL1NBU0pvYkV4ZWN1dGlvbiIsYXBwTG9jOiIvUHVibGljL3NlZWRhcHAiLHNlcnZlclR5cGU6Ty5TZXJ2ZXJUeXBlLlNhc1ZpeWEs''@;'; put 'put ''ZGVidWc6ITEsY29udGV4dE5hbWU6IlNBUyBKb2IgRXhlY3V0aW9uIGNvbXB1dGUgY29udGV4dCIsdXNlQ29tcHV0ZUFwaTpudWxsLGxvZ2luTWVjaGFuaXNtOmcuTG9naW5NZWNoYW5pc20uRGVmYXVsdH07cS5kZWZhdWx0PWNsYXNzIFV7Y29uc3RydWN0b3IoWSl7dGhpcy5zYXNqc0NvbmZp''@;'; put 'put ''Zz1uZXcgZy5TQVNqc0NvbmZpZyx0aGlzLmpvYnNQYXRoPSIiLHRoaXMuc2FzVml5YUFwaUNsaWVudD1udWxsLHRoaXMuc2FzOUFwaUNsaWVudD1udWxsLHRoaXMuc2FzSlNBcGlDbGllbnQ9bnVsbCx0aGlzLmZpbGVVcGxvYWRlcj1udWxsLHRoaXMuYXV0aE1hbmFnZXI9bnVsbCx0aGlzLnJl''@;'; put 'put ''cXVlc3RDbGllbnQ9bnVsbCx0aGlzLndlYkpvYkV4ZWN1dG9yPW51bGwsdGhpcy5zYXNqc0pvYkV4ZWN1dG9yPW51bGwsdGhpcy5jb21wdXRlSm9iRXhlY3V0b3I9bnVsbCx0aGlzLmplc0pvYkV4ZWN1dG9yPW51bGwsdGhpcy5zYXM5Sm9iRXhlY3V0b3I9bnVsbCx0aGlzLnJlc2VuZFdhaXRp''@;'; put 'put ''bmdSZXF1ZXN0cz0oKT0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dmFyIFgsZWUsSixyZSxpZTt5aWVsZCBudWxsPT09KFg9dGhpcy53ZWJKb2JFeGVjdXRvcil8fHZvaWQgMD09PVg/dm9pZCAwOlgucmVzZW5kV2FpdGluZ1JlcXVlc3RzKCkseWllbGQgbnVsbD09PShlZT10''@;'; put 'put ''aGlzLmNvbXB1dGVKb2JFeGVjdXRvcil8fHZvaWQgMD09PWVlP3ZvaWQgMDplZS5yZXNlbmRXYWl0aW5nUmVxdWVzdHMoKSx5aWVsZCBudWxsPT09KEo9dGhpcy5qZXNKb2JFeGVjdXRvcil8fHZvaWQgMD09PUo/dm9pZCAwOkoucmVzZW5kV2FpdGluZ1JlcXVlc3RzKCkseWllbGQgbnVsbD09''@;'; put 'put ''PShyZT10aGlzLmZpbGVVcGxvYWRlcil8fHZvaWQgMD09PXJlP3ZvaWQgMDpyZS5yZXNlbmRXYWl0aW5nUmVxdWVzdHMoKSx5aWVsZCBudWxsPT09KGllPXRoaXMuc2FzanNKb2JFeGVjdXRvcil8fHZvaWQgMD09PWllP3ZvaWQgMDppZS5yZXNlbmRXYWl0aW5nUmVxdWVzdHMoKX0pLHRoaXMu''@;'; put 'put ''c2V0VmVyYm9zZU1vZGU9WD0+e3ZhciBlZTtudWxsPT09KGVlPXRoaXMucmVxdWVzdENsaWVudCl8fHZvaWQgMD09PWVlfHxlZS5zZXRWZXJib3NlTW9kZShYKX0sdGhpcy5zYXNqc0NvbmZpZz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sSyksWSksdGhpcy5zZXR1cENvbmZpZ3Vy''@;'; put 'put ''YXRpb24oKX1nZXRDc3JmVG9rZW4oWT0iZ2VuZXJhbCIpe3ZhciBYO3JldHVybiBudWxsPT09KFg9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09WD92b2lkIDA6WC5nZXRDc3JmVG9rZW4oWSl9ZXhlY3V0ZVNjcmlwdCh7bGluZXNPZkNvZGU6WSxmaWxlTmFtZTpYLGNvbnRleHROYW1l''@;'; put 'put ''OmVlLHJ1blRpbWU6SixhdXRoQ29uZmlnOnJlLGF1dGhDb25maWdTYXM5OmllLGRlYnVnOmxlfSl7dmFyIG1lLF9lO3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZih0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJleGVjdXRlU2NyaXB0IixbTy5TZXJ2ZXJUeXBlLlNh''@;'; put 'put ''czksTy5TZXJ2ZXJUeXBlLlNhc2pzLE8uU2VydmVyVHlwZS5TYXNWaXlhXSksdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Ty5TZXJ2ZXJUeXBlLlNhczkpe2lmKCFpZSl0aHJvdyBuZXcgRXJyb3IoIkF1dGggY29uZmlnIGZvciBzYXM5IGlzIG5vdCBwcm92aWRlZCIpO3JldHVybiB5''@;'; put 'put ''aWVsZCBudWxsPT09KG1lPXRoaXMuc2FzOUFwaUNsaWVudCl8fHZvaWQgMD09PW1lP3ZvaWQgMDptZS5leGVjdXRlU2NyaXB0KFksaWUudXNlck5hbWUsaWUucGFzc3dvcmQpfWlmKHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXNqcylyZXR1cm4geWllbGQg''@;'; put 'put ''bnVsbD09PShfZT10aGlzLnNhc0pTQXBpQ2xpZW50KXx8dm9pZCAwPT09X2U/dm9pZCAwOl9lLmV4ZWN1dGVTY3JpcHQoWS5qb2luKCJcbiIpLEoscmUpO2lmKHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXNWaXlhKXtpZighKGVlPWVlfHx0aGlzLnNhc2pz''@;'; put 'put ''Q29uZmlnLmNvbnRleHROYW1lKSl0aHJvdyBuZXcgRXJyb3IoIkNvbnRleHQgbmFtZSBpcyB1bmRlZmluZWQuIFBsZWFzZSBzZXQgYSBgY29udGV4dE5hbWVgIGluIHlvdXIgU0FTanMgb3Igb3ZlcnJpZGUgY29uZmlnLiIpO2lmKCFYKXRocm93IG5ldyBFcnJvcigiRmlsZSBuYW1lIGlzIHJl''@;'; put 'put ''cXVpcmVkIGluIGNhc2Ugb2YgU0FTIFZJWUEuIFBsZWFzZSBwcm92aWRlIGEgYGZpbGVOYW1lYC4iKTtyZXR1cm4geWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmV4ZWN1dGVTY3JpcHQoWCxZLGVlLHJlLG51bGwsbGV8fHRoaXMuc2FzanNDb25maWcuZGVidWcpfX0pfWV4ZWN1dGVKb2Io''@;'; put 'put ''WSxYLGVlKXt2YXIgSjtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImV4ZWN1dGVTY3JpcHQiLFtPLlNlcnZlclR5cGUuU2FzanNdKSx5aWVsZCBudWxsPT09KEo9dGhpcy5zYXNKU0FwaUNsaWVudCl8fHZvaWQg''@;'; put 'put ''MD09PUo/dm9pZCAwOkouZXhlY3V0ZUpvYihZLFgsZWUpfSl9Z2V0Q29tcHV0ZUNvbnRleHRzKFkpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0Q29tcHV0ZUNvbnRleHRzIixbTy5TZXJ2ZXJUeXBlLlNh''@;'; put 'put ''c1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0Q29tcHV0ZUNvbnRleHRzKFkpfSl9Z2V0TGF1bmNoZXJDb250ZXh0cyhZKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldExhdW5jaGVy''@;'; put 'put ''Q29udGV4dHMiLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRMYXVuY2hlckNvbnRleHRzKFkpfSl9Z2V0RGVmYXVsdENvbXB1dGVDb250ZXh0cygpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXREZWZhdWx0Q29tcHV0ZUNv''@;'; put 'put ''bnRleHRzIixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0RGVmYXVsdENvbXB1dGVDb250ZXh0cygpfWdldEV4ZWN1dGFibGVDb250ZXh0cyhZKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRo''@;'; put 'put ''b2RTdXBwb3J0ZWQoImdldEV4ZWN1dGFibGVDb250ZXh0cyIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldEV4ZWN1dGFibGVDb250ZXh0cyhZKX0pfWNyZWF0ZUNvbXB1dGVDb250ZXh0KFksWCxlZSxKLHJlLGllKXtyZXR1cm4gSSh0aGlz''@;'; put 'put ''LHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImNyZWF0ZUNvbXB1dGVDb250ZXh0IixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuY3JlYXRlQ29tcHV0ZUNvbnRleHQoWSxYLGVlLEoscmUs''@;'; put 'put ''aWUpfSl9Y3JlYXRlTGF1bmNoZXJDb250ZXh0KFksWCxlZSxKKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImNyZWF0ZUxhdW5jaGVyQ29udGV4dCIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhp''@;'; put 'put ''cy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZUxhdW5jaGVyQ29udGV4dChZLFgsZWUsSil9KX1lZGl0Q29tcHV0ZUNvbnRleHQoWSxYLGVlKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImVkaXRDb21wdXRlQ29u''@;'; put 'put ''dGV4dCIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmVkaXRDb21wdXRlQ29udGV4dChZLFgsZWUpfSl9ZGVsZXRlQ29tcHV0ZUNvbnRleHQoWSxYKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''aXNNZXRob2RTdXBwb3J0ZWQoImRlbGV0ZUNvbXB1dGVDb250ZXh0IixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZGVsZXRlQ29tcHV0ZUNvbnRleHQoWSxYKX0pfWdldENvbXB1dGVDb250ZXh0QnlOYW1lKFksWCl7cmV0dXJuIEkodGhpcyx2''@;'; put 'put ''b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJnZXRDb21wdXRlQ29udGV4dEJ5TmFtZSIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldENvbXB1dGVDb250ZXh0QnlOYW1lKFksWCl9KX1n''@;'; put 'put ''ZXRDb21wdXRlQ29udGV4dEJ5SWQoWSxYKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldENvbXB1dGVDb250ZXh0QnlJZCIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBp''@;'; put 'put ''Q2xpZW50LmdldENvbXB1dGVDb250ZXh0QnlJZChZLFgpfSl9Y3JlYXRlU2Vzc2lvbihZLFgpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiY3JlYXRlU2Vzc2lvbiIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSks''@;'; put 'put ''eWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmNyZWF0ZVNlc3Npb24oWSxYKX0pfWNyZWF0ZUZvbGRlcihZLFgsZWUsSixyZSxpZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiByZT95aWVsZCByZS5jcmVhdGVGb2xkZXIoWSxYLGVlLEosaWUpOnlp''@;'; put 'put ''ZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5jcmVhdGVGb2xkZXIoWSxYLGVlLEosaWUpfSl9Y3JlYXRlRmlsZShZLFgsZWUsSixyZSxpZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBpZT95aWVsZCBpZS5jcmVhdGVGaWxlKFksWCxlZSxKLHJlKTp5''@;'; put 'put ''aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuY3JlYXRlRmlsZShZLFgsZWUsSixyZSl9KX1nZXRGb2xkZXIoWSxYKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldEZvbGRlciIsW08uU2VydmVyVHlwZS5T''@;'; put 'put ''YXNWaXlhXSkseWllbGQgdGhpcy5zYXNWaXlhQXBpQ2xpZW50LmdldEZvbGRlcihZLFgpfSl9ZGVsZXRlRm9sZGVyKFksWCl7dmFyIGVlO3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZGVsZXRlRm9sZGVyIixb''@;'; put 'put ''Ty5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCBudWxsPT09KGVlPXRoaXMuc2FzVml5YUFwaUNsaWVudCl8fHZvaWQgMD09PWVlP3ZvaWQgMDplZS5kZWxldGVGb2xkZXIoWSxYKX0pfWxpc3RGb2xkZXIoWSxYLGVlKXt2YXIgSjtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rp''@;'; put 'put ''b24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImxpc3RGb2xkZXIiLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIG51bGw9PT0oSj10aGlzLnNhc1ZpeWFBcGlDbGllbnQpfHx2b2lkIDA9PT1KP3ZvaWQgMDpKLmxpc3RGb2xkZXIoWSxYLGVlKX0pfW1vdmVGb2xkZXIo''@;'; put 'put ''WSxYLGVlLEope3ZhciByZTtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoIm1vdmVGb2xkZXIiLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIG51bGw9PT0ocmU9dGhpcy5zYXNWaXlhQXBpQ2xpZW50KXx8''@;'; put 'put ''dm9pZCAwPT09cmU/dm9pZCAwOnJlLm1vdmVGb2xkZXIoWSxYLGVlLEopfSl9Y3JlYXRlSm9iRGVmaW5pdGlvbihZLFgsZWUsSixyZSxpZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJjcmVhdGVKb2JEZWZp''@;'; put 'put ''bml0aW9uIixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSxpZT95aWVsZCBpZS5jcmVhdGVKb2JEZWZpbml0aW9uKFksWCxlZSxKLHJlKTp5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuY3JlYXRlSm9iRGVmaW5pdGlvbihZLFgsZWUsSixyZSl9KX1nZXRBdXRoQ29kZShZKXtyZXR1cm4gSSh0''@;'; put 'put ''aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoImdldEF1dGhDb2RlIixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSx5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0QXV0aENvZGUoWSl9KX1nZXRBY2Nlc3NUb2tlbihZLFgsZWUp''@;'; put 'put ''e3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgiZ2V0QWNjZXNzVG9rZW4iLFtPLlNlcnZlclR5cGUuU2FzVml5YSxPLlNlcnZlclR5cGUuU2FzanNdKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1PLlNl''@;'; put 'put ''cnZlclR5cGUuU2FzanM/eWllbGQgdGhpcy5zYXNKU0FwaUNsaWVudC5nZXRBY2Nlc3NUb2tlbihZLGVlKTp5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQuZ2V0QWNjZXNzVG9rZW4oWSxYLGVlKX0pfXJlZnJlc2hUb2tlbnMoWSxYLGVlKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAs''@;'; put 'put ''ZnVuY3Rpb24qKCl7cmV0dXJuIHRoaXMuaXNNZXRob2RTdXBwb3J0ZWQoInJlZnJlc2hUb2tlbnMiLFtPLlNlcnZlclR5cGUuU2FzVml5YSxPLlNlcnZlclR5cGUuU2FzanNdKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1PLlNlcnZlclR5cGUuU2FzanM/eWllbGQgdGhpcy5zYXNK''@;'; put 'put ''U0FwaUNsaWVudC5yZWZyZXNoVG9rZW5zKGVlKTp5aWVsZCB0aGlzLnNhc1ZpeWFBcGlDbGllbnQucmVmcmVzaFRva2VucyhZLFgsZWUpfSl9ZGVsZXRlQ2xpZW50KFksWCl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLmlzTWV0aG9kU3VwcG9y''@;'; put 'put ''dGVkKCJkZWxldGVDbGllbnQiLFtPLlNlcnZlclR5cGUuU2FzVml5YV0pLHlpZWxkIHRoaXMuc2FzVml5YUFwaUNsaWVudC5kZWxldGVDbGllbnQoWSxYKX0pfWdldFNhc2pzQ29uZmlnKCl7cmV0dXJuIHRoaXMuc2FzanNDb25maWd9Z2V0VXNlck5hbWUoKXtyZXR1cm4gdGhpcy5hdXRoTWFu''@;'; put 'put ''YWdlci51c2VyTmFtZX1zZXRTQVNqc0NvbmZpZyhZKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dGhpcy5zYXNqc0NvbmZpZz1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5zYXNqc0NvbmZpZyksWSksdGhpcy5zZXR1cENvbmZpZ3VyYXRpb24o''@;'; put 'put ''KX0pfXNldERlYnVnU3RhdGUoWSl7dGhpcy5zYXNqc0NvbmZpZy5kZWJ1Zz1ZLHRoaXMuc2FzVml5YUFwaUNsaWVudCYmKHRoaXMuc2FzVml5YUFwaUNsaWVudC5kZWJ1Zz1ZKX1jaGVja1Nlc3Npb24oKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuYXV0aE1hbmFnZXIuY2hlY2tTZXNzaW9uKCl9KX1sb2dJbihZLFgsZWUsSj17fSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKHRoaXMuc2FzanNDb25maWcubG9naW5NZWNoYW5pc209PT1nLkxvZ2luTWVjaGFuaXNtLkRlZmF1bHQpe2lmKCFZfHwhWCl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIkEgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGFyZSByZXF1aXJlZCB3aGVuIHVzaW5nIHRoZSBkZWZhdWx0IGxvZ2luIG1lY2hhbmlzbS4iKTtyZXR1cm4gdGhpcy5hdXRoTWFuYWdlci5sb2dJbihZLFgpfWlmKHR5cGVvZiB3aW5kb3c+InUiKXRocm93IG5ldyBFcnJv''@;'; put 'put ''cigiVGhlIHJlZGlyZWN0ZWQgbG9naW4gbWVjaGFuaXNtIGlzIG9ubHkgYXZhaWxhYmxlIGZvciB1c2UgaW4gdGhlIGJyb3dzZXIuIik7cmV0dXJuIHRoaXMuYXV0aE1hbmFnZXIucmVkaXJlY3RlZExvZ0luKEopfSl9bG9nT3V0KCl7cmV0dXJuIHRoaXMuYXV0aE1hbmFnZXIubG9nT3V0KCl9''@;'; put 'put ''dXBsb2FkRmlsZShZLFgsZWUsSj17fSxyZSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe0o9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuc2FzanNDb25maWcpLEopO2NvbnN0IGllPXtmaWxlczpYLHBhcmFtczplZX07cmV0dXJuIHlpZWxkIHRo''@;'; put 'put ''aXMuZmlsZVVwbG9hZGVyLmV4ZWN1dGUoWSxpZSxKLHJlKX0pfXJlcXVlc3QoWSxYLGVlPXt9LEoscmUsaWU9W10pe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtlZT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5zYXNqc0NvbmZpZyksZWUpO2Nv''@;'; put 'put ''bnN0IGxlPSgwLHkudmFsaWRhdGVJbnB1dCkoWCk7cmV0dXJuIGxlLnN0YXR1cz9lZS5zZXJ2ZXJUeXBlPT09Ty5TZXJ2ZXJUeXBlLlNhc2pzP3lpZWxkIHRoaXMuc2FzanNKb2JFeGVjdXRvci5leGVjdXRlKFksWCxlZSxKLHJlLGllKTplZS5zZXJ2ZXJUeXBlPT09Ty5TZXJ2ZXJUeXBlLlNh''@;'; put 'put ''c1ZpeWEmJm51bGwhPWVlLnVzZUNvbXB1dGVBcGk/ZWUudXNlQ29tcHV0ZUFwaT95aWVsZCB0aGlzLmNvbXB1dGVKb2JFeGVjdXRvci5leGVjdXRlKFksWCxlZSxKLHJlKTooZWUuY29udGV4dE5hbWV8fChlZT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZWUpLHtjb250ZXh0TmFt''@;'; put 'put ''ZToiU0FTIEpvYiBFeGVjdXRpb24gY29tcHV0ZSBjb250ZXh0In0pKSx5aWVsZCB0aGlzLmplc0pvYkV4ZWN1dG9yLmV4ZWN1dGUoWSxYLGVlLEoscmUsaWUpKTplZS5zZXJ2ZXJUeXBlPT09Ty5TZXJ2ZXJUeXBlLlNhczkmJmVlLnVzZXJuYW1lJiZlZS5wYXNzd29yZD95aWVsZCB0aGlzLnNh''@;'; put 'put ''czlKb2JFeGVjdXRvci5leGVjdXRlKFksWCxlZSk6eWllbGQgdGhpcy53ZWJKb2JFeGVjdXRvci5leGVjdXRlKFksWCxlZSxKLHJlLGllKTpQcm9taXNlLnJlamVjdChuZXcgZy5FcnJvclJlc3BvbnNlKGxlLm1zZykpfSl9ZGVwbG95U2VydmljZVBhY2soWSxYLGVlLEoscmU9ITEpe3JldHVy''@;'; put 'put ''biBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXt0aGlzLmlzTWV0aG9kU3VwcG9ydGVkKCJkZXBsb3lTZXJ2aWNlUGFjayIsW08uU2VydmVyVHlwZS5TYXNWaXlhXSk7bGV0IGllPW51bGw7aWYoZWV8fFgpZWV8fChlZT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCksWHx8KFg9''@;'; put 'put ''dGhpcy5zYXNqc0NvbmZpZy5hcHBMb2MpLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXNWaXlhPyhpZT1uZXcgQi5TQVNWaXlhQXBpQ2xpZW50KGVlLFgsdGhpcy5zYXNqc0NvbmZpZy5jb250ZXh0TmFtZSx0aGlzLnJlcXVlc3RDbGllbnQpLGllLmRlYnVn''@;'; put 'put ''PXRoaXMuc2FzanNDb25maWcuZGVidWcpOnRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXM5JiYoaWU9bmV3IHcuU0FTOUFwaUNsaWVudChlZSx0aGlzLmpvYnNQYXRoLHRoaXMuc2FzanNDb25maWcuaHR0cHNBZ2VudE9wdGlvbnMpKTtlbHNle2xldCBtZT1u''@;'; put 'put ''dWxsO3RoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZT09PU8uU2VydmVyVHlwZS5TYXNWaXlhP21lPXRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRDb25maWcoKTp0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1PLlNlcnZlclR5cGUuU2FzOSYmKG1lPXRoaXMuc2FzOUFwaUNsaWVudC5n''@;'; put 'put ''ZXRDb25maWcoKSksZWU9bWUuc2VydmVyVXJsLFg9bWUucm9vdEZvbGRlck5hbWV9WS5tZW1iZXJzWzBdLm1lbWJlcnMmJlkubWVtYmVyc1swXS5tZW1iZXJzLnNvcnQobWU9PiJmb2xkZXIiPT09bWUudHlwZT8tMToxKTtjb25zdCBsZT1ZLm1lbWJlcnM7eWllbGQgdGhpcy5jcmVhdGVGb2xk''@;'; put 'put ''ZXJzQW5kU2VydmljZXMoWCxsZSxKLGllLHJlKX0pfXN0YXJ0Q29tcHV0ZUpvYihZLFgsZWU9e30sSixyZSxpZSxsZT0hMSxtZSxfZSl7dmFyIFRlLFNlLHplLFY7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lmKGVlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2ln''@;'; put 'put ''bih7fSx0aGlzLnNhc2pzQ29uZmlnKSxlZSksdGhpcy5pc01ldGhvZFN1cHBvcnRlZCgic3RhcnRDb21wdXRlSm9iIixbTy5TZXJ2ZXJUeXBlLlNhc1ZpeWFdKSwhZWUuY29udGV4dE5hbWUpdGhyb3cgbmV3IEVycm9yKCJDb250ZXh0IG5hbWUgaXMgdW5kZWZpbmVkLiBQbGVhc2Ugc2V0IGEg''@;'; put 'put ''YGNvbnRleHROYW1lYCBpbiB5b3VyIFNBU2pzIG9yIG92ZXJyaWRlIGNvbmZpZy4iKTtyZXR1cm4gX2U/KG51bGw9PT0oVGU9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09VGV8fFRlLnNldFZlcmJvc2VNb2RlKF9lKSxudWxsPT09KFNlPXRoaXMucmVxdWVzdENsaWVudCl8fHZvaWQg''@;'; put 'put ''MD09PVNlfHxTZS5lbmFibGVWZXJib3NlTW9kZSgpKTohMT09PV9lJiYobnVsbD09PSh6ZT10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT16ZXx8emUuZGlzYWJsZVZlcmJvc2VNb2RlKCkpLG51bGw9PT0oVj10aGlzLnNhc1ZpeWFBcGlDbGllbnQpfHx2b2lkIDA9PT1WP3ZvaWQgMDpW''@;'; put 'put ''LmV4ZWN1dGVDb21wdXRlSm9iKFksZWUuY29udGV4dE5hbWUsZWUuZGVidWcsWCxKLCEhcmUsITEsaWUsbGUsbWUpfSl9ZmV0Y2hMb2dGaWxlQ29udGVudChZLFgpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50''@;'; put 'put ''LmdldChZLFgpLnRoZW4oZWU9PntpZighZWUpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBnLkVycm9yUmVzcG9uc2UoIkVycm9yIHdoaWxlIGZldGNoaW5nIGxvZy4gUmVzcG9uc2Ugd2FzIG5vdCBwcm92aWRlZC4iKSk7dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeShlZS5yZXN1bHQpfWNh''@;'; put 'put ''dGNoKEope3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgZy5FcnJvclJlc3BvbnNlKCJFcnJvciB3aGlsZSBmZXRjaGluZyBsb2cuIFRoZSByZXN1bHQgaXMgbm90IHZhbGlkLiIsSikpfX0pfSl9Z2V0U2FzUmVxdWVzdHMoKXtyZXR1cm5bLi4udGhpcy5yZXF1ZXN0Q2xpZW50LmdldFJlcXVl''@;'; put 'put ''c3RzKCldLnNvcnQoeS5jb21wYXJlVGltZXN0YW1wcyl9Y2xlYXJTYXNSZXF1ZXN0cygpe3RoaXMucmVxdWVzdENsaWVudC5jbGVhclJlcXVlc3RzKCl9c2V0dXBDb25maWd1cmF0aW9uKCl7aWYodm9pZCAwPT09dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmx8fCIiPT09dGhpcy5zYXNqc0Nv''@;'; put 'put ''bmZpZy5zZXJ2ZXJVcmwpaWYodHlwZW9mIGxvY2F0aW9uPCJ1Iil7bGV0IFk9YCR7bG9jYXRpb24ucHJvdG9jb2x9Ly8ke2xvY2F0aW9uLmhvc3RuYW1lfWA7bG9jYXRpb24ucG9ydCYmKFk9YCR7WX06JHtsb2NhdGlvbi5wb3J0fWApLHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsPVl9ZWxz''@;'; put 'put ''ZSB0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybD0iIjsiLyI9PT10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybC5zbGljZSgtMSkmJih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybD10aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybC5zbGljZSgwLC0xKSksdGhpcy5yZXF1ZXN0Q2xpZW50P3Ro''@;'; put 'put ''aXMucmVxdWVzdENsaWVudC5zZXRDb25maWcodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5odHRwc0FnZW50T3B0aW9ucyk6dGhpcy5yZXF1ZXN0Q2xpZW50PW5ldyh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1PLlNlcnZlclR5cGUuU2FzanM/Ti5T''@;'; put 'put ''YXNqc1JlcXVlc3RDbGllbnQ6ei5SZXF1ZXN0Q2xpZW50KSh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLmh0dHBzQWdlbnRPcHRpb25zLHRoaXMuc2FzanNDb25maWcucmVxdWVzdEhpc3RvcnlMaW1pdCx0aGlzLnNhc2pzQ29uZmlnLnZlcmJvc2UpLHRoaXMu''@;'; put 'put ''am9ic1BhdGg9dGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Ty5TZXJ2ZXJUeXBlLlNhc1ZpeWE/dGhpcy5zYXNqc0NvbmZpZy5wYXRoU0FTVml5YTp0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1PLlNlcnZlclR5cGUuU2FzOT90aGlzLnNhc2pzQ29uZmlnLnBhdGhTQVM5OnRo''@;'; put 'put ''aXMuc2FzanNDb25maWcucGF0aFNBU0pTLHRoaXMuYXV0aE1hbmFnZXI9bmV3IEYuQXV0aE1hbmFnZXIodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlLHRoaXMucmVxdWVzdENsaWVudCx0aGlzLnJlc2VuZFdhaXRpbmdSZXF1ZXN0cyksdGhp''@;'; put 'put ''cy5zYXNqc0NvbmZpZy5zZXJ2ZXJUeXBlPT09Ty5TZXJ2ZXJUeXBlLlNhc1ZpeWEmJih0aGlzLnNhc1ZpeWFBcGlDbGllbnQ/dGhpcy5zYXNWaXlhQXBpQ2xpZW50LnNldENvbmZpZyh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLmFwcExvYyk6dGhpcy5zYXNW''@;'; put 'put ''aXlhQXBpQ2xpZW50PW5ldyBCLlNBU1ZpeWFBcGlDbGllbnQodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNqc0NvbmZpZy5hcHBMb2MsdGhpcy5zYXNqc0NvbmZpZy5jb250ZXh0TmFtZSx0aGlzLnJlcXVlc3RDbGllbnQpLHRoaXMuc2FzVml5YUFwaUNsaWVudC5kZWJ1Zz10''@;'; put 'put ''aGlzLnNhc2pzQ29uZmlnLmRlYnVnKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1PLlNlcnZlclR5cGUuU2FzOSYmKHRoaXMuc2FzOUFwaUNsaWVudD90aGlzLnNhczlBcGlDbGllbnQuc2V0Q29uZmlnKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsKTp0aGlzLnNhczlBcGlDbGll''@;'; put 'put ''bnQ9bmV3IHcuU0FTOUFwaUNsaWVudCh0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLmpvYnNQYXRoLHRoaXMuc2FzanNDb25maWcuaHR0cHNBZ2VudE9wdGlvbnMpKSx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGU9PT1PLlNlcnZlclR5cGUuU2FzanMmJih0aGlzLnNhc0pTQXBp''@;'; put 'put ''Q2xpZW50fHwodGhpcy5zYXNKU0FwaUNsaWVudD1uZXcgUC5TQVNqc0FwaUNsaWVudCh0aGlzLnJlcXVlc3RDbGllbnQpKSksdGhpcy5maWxlVXBsb2FkZXI9bmV3IEwuRmlsZVVwbG9hZGVyKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSx0''@;'; put 'put ''aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy53ZWJKb2JFeGVjdXRvcj1uZXcgTC5XZWJKb2JFeGVjdXRvcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclR5cGUsdGhpcy5qb2JzUGF0aCx0aGlzLnJlcXVlc3RDbGllbnQsdGhp''@;'; put 'put ''cy5zYXNWaXlhQXBpQ2xpZW50KSx0aGlzLnNhc2pzSm9iRXhlY3V0b3I9bmV3IEwuU2FzanNKb2JFeGVjdXRvcih0aGlzLnNhc2pzQ29uZmlnLnNlcnZlclVybCx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCksdGhpcy5zYXM5Sm9iRXhlY3V0b3I9bmV3IEwuU2FzOUpvYkV4ZWN1''@;'; put 'put ''dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZSx0aGlzLmpvYnNQYXRoLHRoaXMucmVxdWVzdENsaWVudCx0aGlzLnNhc2pzQ29uZmlnLmh0dHBzQWdlbnRPcHRpb25zKSx0aGlzLmNvbXB1dGVKb2JFeGVjdXRvcj1uZXcgTC5Db21wdXRl''@;'; put 'put ''Sm9iRXhlY3V0b3IodGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJVcmwsdGhpcy5zYXNWaXlhQXBpQ2xpZW50KSx0aGlzLmplc0pvYkV4ZWN1dG9yPW5ldyBMLkplc0pvYkV4ZWN1dG9yKHRoaXMuc2FzanNDb25maWcuc2VydmVyVXJsLHRoaXMuc2FzVml5YUFwaUNsaWVudCl9Y3JlYXRlRm9sZGVy''@;'; put 'put ''c0FuZFNlcnZpY2VzKFksWCxlZSxKLHJlKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7eWllbGQoMCx5LmFzeW5jRm9yRWFjaCkoWCxpZT0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7c3dpdGNoKGllLnR5cGUpe2Nhc2UiZm9sZGVyIjp5aWVsZCB0''@;'; put 'put ''aGlzLmNyZWF0ZUZvbGRlcihpZS5uYW1lLFksdm9pZCAwLGVlLEoscmUpO2JyZWFrO2Nhc2UiZmlsZSI6eWllbGQgdGhpcy5jcmVhdGVGaWxlKGllLm5hbWUsaWUuY29kZSxZLHZvaWQgMCxlZSxKKTticmVhaztjYXNlInNlcnZpY2UiOnlpZWxkIHRoaXMuY3JlYXRlSm9iRGVmaW5pdGlvbihp''@;'; put 'put ''ZS5uYW1lLGllLmNvZGUsWSx2b2lkIDAsZWUsSik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYFVuaWRlbnRpZmllZCBtZW1iZXIgJyR7aWUubmFtZX0nIHByb3ZpZGVkLmApfSJmb2xkZXIiPT09aWUudHlwZSYmaWUubWVtYmVycyYmaWUubWVtYmVycy5sZW5ndGgmJih5aWVsZCB0''@;'; put 'put ''aGlzLmNyZWF0ZUZvbGRlcnNBbmRTZXJ2aWNlcyhgJHtZfS8ke2llLm5hbWV9YCxpZS5tZW1iZXJzLGVlLEoscmUpKX0pKX0pfWlzTWV0aG9kU3VwcG9ydGVkKFksWCl7aWYoIXRoaXMuc2FzanNDb25maWcuc2VydmVyVHlwZXx8IVguaW5jbHVkZXModGhpcy5zYXNqc0NvbmZpZy5zZXJ2ZXJU''@;'; put 'put ''eXBlKSl0aHJvdyBuZXcgRXJyb3IoYE1ldGhvZCAnJHtZfScgaXMgb25seSBzdXBwb3J0ZWQgb24gJHtYLmpvaW4oIiwgIil9IHNlcnZlcnMuYCl9ZW5hYmxlVmVyYm9zZU1vZGUoWSxYKXt2YXIgZWU7bnVsbD09PShlZT10aGlzLnJlcXVlc3RDbGllbnQpfHx2b2lkIDA9PT1lZXx8ZWUuZW5h''@;'; put 'put ''YmxlVmVyYm9zZU1vZGUoWSxYKX1kaXNhYmxlVmVyYm9zZU1vZGUoKXt2YXIgWTtudWxsPT09KFk9dGhpcy5yZXF1ZXN0Q2xpZW50KXx8dm9pZCAwPT09WXx8WS5kaXNhYmxlVmVyYm9zZU1vZGUoKX19fSwzNDY3OmZ1bmN0aW9uKHVlLHEsXyl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRo''@;'; put 'put ''aXMuX19hd2FpdGVyfHxmdW5jdGlvbihOLEwsSyxVKXtyZXR1cm4gbmV3KEt8fChLPVByb21pc2UpKShmdW5jdGlvbihZLFgpe2Z1bmN0aW9uIGVlKGllKXt0cnl7cmUoVS5uZXh0KGllKSl9Y2F0Y2gobGUpe1gobGUpfX1mdW5jdGlvbiBKKGllKXt0cnl7cmUoVS50aHJvdyhpZSkpfWNhdGNo''@;'; put 'put ''KGxlKXtYKGxlKX19ZnVuY3Rpb24gcmUoaWUpe2llLmRvbmU/WShpZS52YWx1ZSk6ZnVuY3Rpb24gVyhZKXtyZXR1cm4gWSBpbnN0YW5jZW9mIEs/WTpuZXcgSyhmdW5jdGlvbihYKXtYKFkpfSl9KGllLnZhbHVlKS50aGVuKGVlLEopfXJlKChVPVUuYXBwbHkoTixMfHxbXSkpLm5leHQoKSl9''@;'; put 'put ''KX0seT10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oTil7cmV0dXJuIE4mJk4uX19lc01vZHVsZT9OOntkZWZhdWx0Ok59fTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5TQVNqc0FwaUNsaWVudD12b2lkIDA7Y29uc3QgZz15''@;'; put 'put ''KF8oNjIzMCkpLEI9XygzOTAwKSx3PV8oOTc3OCksUD1fKDU3KSxGPV8oMjQ5KSxPPV8oNzA0KTtxLlNBU2pzQXBpQ2xpZW50PWNsYXNzIHp7Y29uc3RydWN0b3IoTCl7dGhpcy5yZXF1ZXN0Q2xpZW50PUx9Z2V0QWNjZXNzVG9rZW5Gb3JSZXF1ZXN0KEwpe3JldHVybiBJKHRoaXMsdm9pZCAw''@;'; put 'put ''LHZvaWQgMCxmdW5jdGlvbiooKXtpZihMKXtjb25zdHthY2Nlc3NfdG9rZW46S309eWllbGQoMCxPLmdldFRva2VucykodGhpcy5yZXF1ZXN0Q2xpZW50LEwsQi5TZXJ2ZXJUeXBlLlNhc2pzKTtyZXR1cm4gS319KX1kZXBsb3koTCxLLFUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxm''@;'; put 'put ''dW5jdGlvbiooKXtjb25zdCBXPXlpZWxkIHRoaXMuZ2V0QWNjZXNzVG9rZW5Gb3JSZXF1ZXN0KFUpO0wuYXBwTG9jPUwuYXBwTG9jfHxLO2NvbnN0e3Jlc3VsdDpZfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdCgiU0FTanNBcGkvZHJpdmUvZGVwbG95IixMLFcsdm9pZCAwLHt9LHtt''@;'; put 'put ''YXhDb250ZW50TGVuZ3RoOjEvMCxtYXhCb2R5TGVuZ3RoOjEvMH0pO3JldHVybiBQcm9taXNlLnJlc29sdmUoWSl9KX1kZXBsb3laaXBGaWxlKEwsSyl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e2NyZWF0ZVJlYWRTdHJlYW06VX09XygyOTc1KSxXPXlp''@;'; put 'put ''ZWxkIHRoaXMuZ2V0QWNjZXNzVG9rZW5Gb3JSZXF1ZXN0KEspLFk9eWllbGQgVShMKSxYPW5ldyBnLmRlZmF1bHQ7WC5hcHBlbmQoImZpbGUiLFkpO2NvbnN0IGVlPWBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0ke1guZ2V0Qm91bmRhcnkoKX1gLHtyZXN1bHQ6Sn09eWllbGQgdGhp''@;'; put 'put ''cy5yZXF1ZXN0Q2xpZW50LnBvc3QoIlNBU2pzQXBpL2RyaXZlL2RlcGxveS91cGxvYWQiLFgsVyxlZSx7fSx7bWF4Q29udGVudExlbmd0aDoxLzAsbWF4Qm9keUxlbmd0aDoxLzB9KTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKEopfSl9ZXhlY3V0ZUpvYihMLEssVSl7cmV0dXJuIEkodGhpcyx2''@;'; put 'put ''b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFc9VT9VLmFjY2Vzc190b2tlbjp2b2lkIDA7bGV0IFk7WT1MLl9wcm9ncmFtLnN0YXJ0c1dpdGgoIi8iKT9MLl9wcm9ncmFtOmAke0t9LyR7TC5fcHJvZ3JhbX1gO2NvbnN0IFg9eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIlNB''@;'; put 'put ''U2pzQXBpL3N0cC9leGVjdXRlIixPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe19kZWJ1ZzoxMzF9LEwpLHtfcHJvZ3JhbTpZfSksVyk7cmV0dXJue3Jlc3VsdDpYLnJlc3VsdCxsb2c6WC5sb2d9fSl9ZXhlY3V0ZVNjcmlwdChMLEs9InNhcyIsVSl7cmV0dXJuIEkodGhpcyx2b2lkIDAs''@;'; put 'put ''dm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFc9eWllbGQgdGhpcy5nZXRBY2Nlc3NUb2tlbkZvclJlcXVlc3QoVSksWT17bG9nOiIifTtyZXR1cm4geWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoIlNBU2pzQXBpL2NvZGUvZXhlY3V0ZSIse2NvZGU6TCxydW5UaW1lOkt9LFcpLnRoZW4o''@;'; put 'put ''WD0+e2NvbnN0e2xvZzplZSxwcmludE91dHB1dDpKLHJlc3VsdDpyZX09WDtZLmxvZz1lZSxKJiYoWS5wcmludE91dHB1dD1KKSxyZSYmKFkud2Vib3V0PXJlKX0pLmNhdGNoKFg9Pnt0aHJvdygwLHcucHJlZml4TWVzc2FnZSkoWCwiRXJyb3Igd2hpbGUgc2VuZGluZyBQT1NUIHJlcXVlc3Qg''@;'; put 'put ''dG8gZXhlY3V0ZSBjb2RlLiAiKX0pLFl9KX1nZXRBY2Nlc3NUb2tlbihMLEspe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4oMCxQLmdldEFjY2Vzc1Rva2VuRm9yU2FzanMpKHRoaXMucmVxdWVzdENsaWVudCxMLEspfSl9cmVmcmVzaFRva2VucyhMKXty''@;'; put 'put ''ZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuKDAsRi5yZWZyZXNoVG9rZW5zRm9yU2FzanMpKHRoaXMucmVxdWVzdENsaWVudCxMKX0pfX19LDY5MDM6ZnVuY3Rpb24odWUscSxfKXsidXNlIHN0cmljdCI7dmFyIEk9Xyg0MTU1KSx5PV8oNTEwOCksZz10aGlz''@;'; put 'put ''JiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oTixMLEssVSl7cmV0dXJuIG5ldyhLfHwoSz1Qcm9taXNlKSkoZnVuY3Rpb24oWSxYKXtmdW5jdGlvbiBlZShpZSl7dHJ5e3JlKFUubmV4dChpZSkpfWNhdGNoKGxlKXtYKGxlKX19ZnVuY3Rpb24gSihpZSl7dHJ5e3JlKFUudGhyb3coaWUpKX1j''@;'; put 'put ''YXRjaChsZSl7WChsZSl9fWZ1bmN0aW9uIHJlKGllKXtpZS5kb25lP1koaWUudmFsdWUpOmZ1bmN0aW9uIFcoWSl7cmV0dXJuIFkgaW5zdGFuY2VvZiBLP1k6bmV3IEsoZnVuY3Rpb24oWCl7WChZKX0pfShpZS52YWx1ZSkudGhlbihlZSxKKX1yZSgoVT1VLmFwcGx5KE4sTHx8W10pKS5uZXh0''@;'; put 'put ''KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLlNlc3Npb25NYW5hZ2VyPXZvaWQgMDtjb25zdCBCPV8oMTIzMCksdz1fKDEzOTUpLFA9Xyg1OTI4KSxGPV8oOTc3OCk7cS5TZXNzaW9uTWFuYWdlcj1jbGFzcyB6e2NvbnN0cnVjdG9yKEws''@;'; put 'put ''SyxVKXt0aGlzLnNlcnZlclVybD1MLHRoaXMuY29udGV4dE5hbWU9Syx0aGlzLnJlcXVlc3RDbGllbnQ9VSx0aGlzLmxvZ2dlZEVycm9ycz1bXSx0aGlzLnNlc3Npb25TdGF0ZUxpbmtFcnJvcj0iRXJyb3Igd2hpbGUgZ2V0dGluZyBzZXNzaW9uIHN0YXRlIGxpbmsuICIsdGhpcy5zZXNzaW9u''@;'; put 'put ''cz1bXSx0aGlzLmN1cnJlbnRDb250ZXh0PW51bGwsdGhpcy5zZXR0aW5nQ29udGV4dD0hMSx0aGlzLl9kZWJ1Zz0hMSx0aGlzLnByaW50ZWRTZXNzaW9uU3RhdGU9e3ByaW50ZWQ6ITEsc3RhdGU6Qi5TZXNzaW9uU3RhdGUuTm9TdGF0ZX0sTCYmKDAsUC5pc1VybCkoTCl9Z2V0IGRlYnVnKCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuX2RlYnVnfXNldCBkZWJ1ZyhMKXt0aGlzLl9kZWJ1Zz1MfWlzU2Vzc2lvblZhbGlkKEwpe2lmKCFMKXJldHVybiExO2NvbnN0IEs9KChuZXcgRGF0ZSkuZ2V0VGltZSgpLW5ldyBEYXRlKEwuY3JlYXRpb25UaW1lU3RhbXApLmdldFRpbWUoKSkvMWUzO3JldHVybiEoIUwu''@;'; put 'put ''YXR0cmlidXRlc3x8Sz49TC5hdHRyaWJ1dGVzLnNlc3Npb25JbmFjdGl2ZVRpbWVvdXQpfXJlbW92ZVNlc3Npb25Gcm9tUG9vbChMKXt0aGlzLnNlc3Npb25zPXRoaXMuc2Vzc2lvbnMuZmlsdGVyKEs9PksuaWQhPT1MLmlkKX1yZW1vdmVFeHBpcmVkU2Vzc2lvbnMoKXt0aGlzLnNlc3Npb25z''@;'; put 'put ''PXRoaXMuc2Vzc2lvbnMuZmlsdGVyKEw9PnRoaXMuaXNTZXNzaW9uVmFsaWQoTCkpfXRocm93RXJyb3JzKEwsSyl7dGhyb3cgSz8oMCxGLnByZWZpeE1lc3NhZ2UpKG5ldyBFcnJvcihMLmpvaW4oIi4gIikpLEspOm5ldyBFcnJvcihMLm1hcChVPT5VLm1lc3NhZ2U/VS5tZXNzYWdlOlUpLmpv''@;'; put 'put ''aW4oIi4gIikpfWdldFNlc3Npb24oTCl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEs9W107bGV0IFU9ITE7Y29uc3QgVz0oKT0+e0subGVuZ3RoJiYhVSYmKFU9ITAsdGhpcy50aHJvd0Vycm9ycyhLKSl9O2lmKHRoaXMucmVtb3ZlRXhwaXJlZFNlc3Np''@;'; put 'put ''b25zKCksdGhpcy5zZXNzaW9ucy5sZW5ndGgpe2NvbnN0IFk9dGhpcy5zZXNzaW9uc1swXTtyZXR1cm4gdGhpcy5yZW1vdmVTZXNzaW9uRnJvbVBvb2woWSksdGhpcy5jcmVhdGVTZXNzaW9ucyhMKS5jYXRjaChYPT57Sy5wdXNoKFgpfSksdGhpcy5jcmVhdGVBbmRXYWl0Rm9yU2Vzc2lvbihM''@;'; put 'put ''KS5jYXRjaChYPT57Sy5wdXNoKFgpfSksVygpLFl9e3RoaXMuY3JlYXRlU2Vzc2lvbnMoTCkuY2F0Y2goWD0+e0sucHVzaChYKX0pLHlpZWxkIHRoaXMuY3JlYXRlQW5kV2FpdEZvclNlc3Npb24oTCkuY2F0Y2goWD0+e0sucHVzaChYKX0pLHRoaXMucmVtb3ZlRXhwaXJlZFNlc3Npb25zKCk7''@;'; put 'put ''Y29uc3QgWT10aGlzLnNlc3Npb25zLnBvcCgpO3JldHVybiB0aGlzLnJlbW92ZVNlc3Npb25Gcm9tUG9vbChZKSxXKCksWX19KX1nZXRFcnJvck1lc3NhZ2UoTCxLLFUpe3JldHVybmAke1V9IHJlcXVlc3QgdG8gJHtLfSBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAke0wucmVzcG9uc2Uuc3Rh''@;'; put 'put ''dHVzfHwidW5rbm93biJ9LiBgK0wucmVzcG9uc2UuZGF0YS5tZXNzYWdlfHwiIn1jbGVhclNlc3Npb24oTCxLKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVT1gL2NvbXB1dGUvc2Vzc2lvbnMvJHtMfWA7cmV0dXJuIHlpZWxkIHRoaXMucmVxdWVzdENs''@;'; put 'put ''aWVudC5kZWxldGUoVSxLKS50aGVuKCgpPT57dGhpcy5zZXNzaW9ucz10aGlzLnNlc3Npb25zLmZpbHRlcihXPT5XLmlkIT09TCl9KS5jYXRjaChXPT57dGhyb3coMCxGLnByZWZpeE1lc3NhZ2UpKHRoaXMuZ2V0RXJyb3JNZXNzYWdlKFcsVSwiREVMRVRFIiksIkVycm9yIHdoaWxlIGRlbGV0''@;'; put 'put ''aW5nIHNlc3Npb24uICIpfSl9KX1jcmVhdGVTZXNzaW9ucyhMKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgSz1bXTt0aGlzLnNlc3Npb25zLmxlbmd0aHx8KHlpZWxkKDAsUC5hc3luY0ZvckVhY2gpKG5ldyBBcnJheSgxKSwoKT0+Zyh0aGlzLHZvaWQg''@;'; put 'put ''MCx2b2lkIDAsZnVuY3Rpb24qKCl7eWllbGQgdGhpcy5jcmVhdGVBbmRXYWl0Rm9yU2Vzc2lvbihMKS5jYXRjaChVPT57Sy5wdXNoKFUpfSl9KSkpLEsubGVuZ3RoJiZ0aGlzLnRocm93RXJyb3JzKEssIkVycm9yIHdoaWxlIGNyZWF0aW5nIHNlc3Npb24uICIpfSl9d2FpdEZvckN1cnJlbnRD''@;'; put 'put ''b250ZXh0KCl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiBuZXcgUHJvbWlzZShMPT57Y29uc3QgSz1zZXRJbnRlcnZhbCgoKT0+e3RoaXMuY3VycmVudENvbnRleHQmJih0aGlzLnNldHRpbmdDb250ZXh0PSExLGNsZWFySW50ZXJ2YWwoSyksTCgpKX0s''@;'; put 'put ''MTAwKX0pfSl9Y3JlYXRlQW5kV2FpdEZvclNlc3Npb24oTCl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3RoaXMuY3VycmVudENvbnRleHR8fCh0aGlzLnNldHRpbmdDb250ZXh0P3lpZWxkIHRoaXMud2FpdEZvckN1cnJlbnRDb250ZXh0KCk6eWllbGQgdGhpcy5z''@;'; put 'put ''ZXRDdXJyZW50Q29udGV4dChMKSk7Y29uc3QgSz1gJHt0aGlzLnNlcnZlclVybH0vY29tcHV0ZS9jb250ZXh0cy8ke3RoaXMuY3VycmVudENvbnRleHQuaWR9L3Nlc3Npb25zYCx7cmVzdWx0OlUsZXRhZzpXfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQucG9zdChLLHt9LEwpLmNhdGNoKFg9''@;'; put 'put ''Pnt0aHJvdygwLEYucHJlZml4TWVzc2FnZSkodGhpcy5nZXRFcnJvck1lc3NhZ2UoWCxLLCJQT1NUIiksIkVycm9yIHdoaWxlIGNyZWF0aW5nIHNlc3Npb24uICIpfSk7VS5ldGFnPVc7Y29uc3QgWT1VLmxpbmtzLmZpbmQoWD0+InN0YXRlIj09PVgucmVsKTtpZighWSl0aHJvdyB0aGlzLnNl''@;'; put 'put ''c3Npb25TdGF0ZUxpbmtFcnJvcjtyZXR1cm4gVS5zdGF0ZVVybD1ZLmhyZWYseWllbGQgdGhpcy53YWl0Rm9yU2Vzc2lvbihVLFcsTCksdGhpcy5zZXNzaW9ucy5wdXNoKFUpLFV9KX1zZXRDdXJyZW50Q29udGV4dChMKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7''@;'; put 'put ''aWYoIXRoaXMuY3VycmVudENvbnRleHQpe2NvbnN0IEs9YCR7dGhpcy5zZXJ2ZXJVcmx9L2NvbXB1dGUvY29udGV4dHM/bGltaXQ9MTAwMDBgO3RoaXMuc2V0dGluZ0NvbnRleHQ9ITA7Y29uc3R7cmVzdWx0OlV9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoSyxMKS5jYXRjaChYPT57''@;'; put 'put ''dGhyb3coMCxGLnByZWZpeE1lc3NhZ2UpKHRoaXMuZ2V0RXJyb3JNZXNzYWdlKFgsSywiR0VUIiksIkVycm9yIHdoaWxlIGdldHRpbmcgbGlzdCBvZiBjb250ZXh0cy4gIil9KSxZPShVJiZVLml0ZW1zJiZVLml0ZW1zLmxlbmd0aD9VLml0ZW1zOltdKS5maW5kKFg9PlgubmFtZT09PXRoaXMu''@;'; put 'put ''Y29udGV4dE5hbWUpO2lmKCFZKXRocm93IG5ldyBFcnJvcihgVGhlIGNvbnRleHQgJyR7dGhpcy5jb250ZXh0TmFtZX0nIHdhcyBub3QgZm91bmQgb24gdGhlIHNlcnZlciAke3RoaXMuc2VydmVyVXJsfS5gKTt0aGlzLmN1cnJlbnRDb250ZXh0PVksUHJvbWlzZS5yZXNvbHZlKCl9fSl9d2Fp''@;'; put 'put ''dEZvclNlc3Npb24oTCxLLFUpe3ZhciBXO3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXR7c3RhdGU6WX09TDtjb25zdHtzdGF0ZVVybDpYfT1MLGVlPUkubG9nZ2VyfHx5O2lmKFk9PT1CLlNlc3Npb25TdGF0ZS5QZW5kaW5nfHxZPT09Qi5TZXNzaW9uU3RhdGUu''@;'; put 'put ''UnVubmluZ3x8WT09PUIuU2Vzc2lvblN0YXRlLk5vU3RhdGUpe2lmKFgpe3RoaXMuZGVidWcmJiF0aGlzLnByaW50ZWRTZXNzaW9uU3RhdGUucHJpbnRlZCYmKGVlLmluZm8oYFBvbGxpbmc6ICR7dGhpcy5zZXJ2ZXJVcmwrWH1gKSx0aGlzLnByaW50ZWRTZXNzaW9uU3RhdGUucHJpbnRlZD0h''@;'; put 'put ''MCk7Y29uc3QgSj1gJHt0aGlzLnNlcnZlclVybH0ke1h9P3dhaXQ9MzBgLHtyZXN1bHQ6cmUscmVzcG9uc2VTdGF0dXM6aWV9PXlpZWxkIHRoaXMuZ2V0U2Vzc2lvblN0YXRlKEosSyxVKS5jYXRjaChsZT0+e3Rocm93KDAsRi5wcmVmaXhNZXNzYWdlKShsZSwiRXJyb3Igd2hpbGUgd2FpdGlu''@;'; put 'put ''ZyBmb3Igc2Vzc2lvbi4gIil9KTtpZihZPXJlLnRyaW0oKSx0aGlzLmRlYnVnJiZ0aGlzLnByaW50ZWRTZXNzaW9uU3RhdGUuc3RhdGUhPT1ZJiYoZWUuaW5mbyhgQ3VycmVudCBzZXNzaW9uIHN0YXRlIGlzICcke1l9J2ApLHRoaXMucHJpbnRlZFNlc3Npb25TdGF0ZS5zdGF0ZT1ZLHRoaXMu''@;'; put 'put ''cHJpbnRlZFNlc3Npb25TdGF0ZS5wcmludGVkPSExKSwhWSl7Y29uc3QgbGU9bmV3IHcuTm9TZXNzaW9uU3RhdGVFcnJvcihpZSx0aGlzLnNlcnZlclVybCtYLG51bGw9PT0oVz1MLmxpbmtzLmZpbmQobWU9PiJsb2ciPT09bWUucmVsKSl8fHZvaWQgMD09PVc/dm9pZCAwOlcuaHJlZik7cmV0''@;'; put 'put ''dXJuIHRoaXMubG9nZ2VkRXJyb3JzLmZpbmQobWU9Pm1lLnNlcnZlclJlc3BvbnNlU3RhdHVzPT09bGUuc2VydmVyUmVzcG9uc2VTdGF0dXMpfHwodGhpcy5sb2dnZWRFcnJvcnMucHVzaChsZSksZWUuaW5mbyhsZS5tZXNzYWdlKSkseWllbGQgdGhpcy53YWl0Rm9yU2Vzc2lvbihMLEssVSl9''@;'; put 'put ''cmV0dXJuIHRoaXMubG9nZ2VkRXJyb3JzPVtdLFl9dGhyb3cgdGhpcy5zZXNzaW9uU3RhdGVMaW5rRXJyb3J9cmV0dXJuIHRoaXMubG9nZ2VkRXJyb3JzPVtdLFl9KX1nZXRTZXNzaW9uU3RhdGUoTCxLLFUpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4g''@;'; put 'put ''eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LmdldChMLFUsInRleHQvcGxhaW4iLHsiSWYtTm9uZS1NYXRjaCI6S30pLnRoZW4oVz0+KHtyZXN1bHQ6Vy5yZXN1bHQscmVzcG9uc2VTdGF0dXM6Vy5zdGF0dXN9KSkuY2F0Y2goVz0+e3Rocm93KDAsRi5wcmVmaXhNZXNzYWdlKSh0aGlzLmdldEVy''@;'; put 'put ''cm9yTWVzc2FnZShXLEwsIkdFVCIpLCJFcnJvciB3aGlsZSBnZXR0aW5nIHNlc3Npb24gc3RhdGUuICIpfSl9KX1nZXRWYXJpYWJsZShMLEssVSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFc9YCR7dGhpcy5zZXJ2ZXJVcmx9L2NvbXB1dGUvc2Vzc2lv''@;'; put 'put ''bnMvJHtMfS92YXJpYWJsZXMvJHtLfWA7cmV0dXJuIHlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoVyxVKS5jYXRjaChZPT57dGhyb3coMCxGLnByZWZpeE1lc3NhZ2UpKHRoaXMuZ2V0RXJyb3JNZXNzYWdlKFksVywiR0VUIiksYEVycm9yIHdoaWxlIGZldGNoaW5nIHNlc3Npb24gdmFy''@;'; put 'put ''aWFibGUgJyR7S30nLiBgKX0pfSl9fX0sMTYyMjpmdW5jdGlvbih1ZSxxLF8peyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDQxNTUpLHk9Xyg1MTA4KSxnPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihVLFcsWSxYKXtyZXR1cm4gbmV3KFl8fChZPVByb21pc2UpKShmdW5jdGlvbihKLHJl''@;'; put 'put ''KXtmdW5jdGlvbiBpZShfZSl7dHJ5e21lKFgubmV4dChfZSkpfWNhdGNoKFRlKXtyZShUZSl9fWZ1bmN0aW9uIGxlKF9lKXt0cnl7bWUoWC50aHJvdyhfZSkpfWNhdGNoKFRlKXtyZShUZSl9fWZ1bmN0aW9uIG1lKF9lKXtfZS5kb25lP0ooX2UudmFsdWUpOmZ1bmN0aW9uIGVlKEope3JldHVy''@;'; put 'put ''biBKIGluc3RhbmNlb2YgWT9KOm5ldyBZKGZ1bmN0aW9uKHJlKXtyZShKKX0pfShfZS52YWx1ZSkudGhlbihpZSxsZSl9bWUoKFg9WC5hcHBseShVLFd8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5leGVjdXRlT25D''@;'; put 'put ''b21wdXRlQXBpPXZvaWQgMDtjb25zdCBCPV8oNzc1Nyksdz1fKDk3NzgpLFA9XygzNjA3KSxGPV8oNzA0KSxPPV8oNTkyOCksej1fKDcxNCksTj1fKDEzNDMpLEw9Xyg2NDk2KTtxLmV4ZWN1dGVPbkNvbXB1dGVBcGk9ZnVuY3Rpb24gSyhVLFcsWSxYLGVlLEoscmUsaWU9bnVsbCxsZT0hMSxt''@;'; put 'put ''ZT0hMSxfZT0hMCxUZSxTZT0hMSx6ZSl7dmFyIFYscDtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7bGV0IGI9KHJlfHx7fSkuYWNjZXNzX3Rva2VuO3JlJiYoe2FjY2Vzc190b2tlbjpifT15aWVsZCgwLEYuZ2V0VG9rZW5zKShVLHJlKSk7Y29uc3QgeD1JLmxvZ2dl''@;'; put 'put ''cnx8eTt0cnl7bGV0IEM7Y29uc3QgVD15aWVsZCBXLmdldFNlc3Npb24oYikuY2F0Y2goTWU9Pnt0aHJvdygwLHcucHJlZml4TWVzc2FnZSkoTWUsIkVycm9yIHdoaWxlIGdldHRpbmcgc2Vzc2lvbi4gIil9KTtpZihDPVQuaWQsU2Upe2NvbnN0e3Jlc3VsdDpNZX09eWllbGQgVy5nZXRWYXJp''@;'; put 'put ''YWJsZShDLCJTWVNKT0JJRCIsYikuY2F0Y2godmU9Pnt0aHJvdygwLHcucHJlZml4TWVzc2FnZSkodmUsIkVycm9yIHdoaWxlIGdldHRpbmcgc2Vzc2lvbiB2YXJpYWJsZS4gIil9KTtpZihNZSYmTWUudmFsdWUpe2NvbnN0IHZlPVk/WC5zcGxpdChZKS5qb2luKCIiKS5yZXBsYWNlKC9eXC8v''@;'; put 'put ''LCIiKTpYOyhJLmxvZ2dlcnx8eSkuaW5mbyhgVHJpZ2dlcmluZyAnJHt2ZX0nIHdpdGggUElEICR7TWUudmFsdWV9IGF0ICR7KDAsQi50aW1lc3RhbXBUb1lZWVlNTURESEhNTVNTKSgpfWApfX1sZXQgSDtIPSgwLE8uaXNSZWxhdGl2ZVBhdGgpKFgpP2BleGVjLSR7WC5pbmNsdWRlcygiLyIp''@;'; put 'put ''P1guc3BsaXQoIi8iKVsxXTpYfWA6WC5zcGxpdCgiLyIpLnBvcCgpO2xldCBqPXtTWVNfSkVTX0pPQl9VUkk6IiIsX3Byb2dyYW06KDAsTy5pc1JlbGF0aXZlUGF0aCkoWCk/WSsiLyIrWDpYfTt6ZSYmKGo9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGopLHplKSksbGUmJihqPU9i''@;'; put 'put ''amVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxqKSx7X0RFQlVHOjEzMX0pKTtsZXQgRT1bXTtpZSYmKEpTT04uc3RyaW5naWZ5KGllKS5pbmNsdWRlcygiOyIpPyhFPXlpZWxkKDAsTC51cGxvYWRUYWJsZXMpKFUsaWUsYikuY2F0Y2goTWU9Pnt0aHJvdygwLHcucHJlZml4TWVzc2FnZSko''@;'; put 'put ''TWUsIkVycm9yIHdoaWxlIHVwbG9hZGluZyB0YWJsZXMuICIpfSksai5fd2ViaW5fZmlsZV9jb3VudD1FLmxlbmd0aCxFLmZvckVhY2goKE1lLHZlKT0+e2pbYF93ZWJpbl9maWxldXJpJHt2ZSsxfWBdPWAvZmlsZXMvZmlsZXMvJHtNZS5maWxlLmlkfWAsaltgX3dlYmluX25hbWUke3ZlKzF9''@;'; put 'put ''YF09TWUudGFibGVOYW1lfSkpOmo9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LGopLCgwLHouZm9ybWF0RGF0YUZvclJlcXVlc3QpKGllKSkpO2NvbnN0IG09e25hbWU6SHx8IkRlZmF1bHQgSm9iIE5hbWUiLGRlc2NyaXB0aW9uOiJQb3dlcmVkIGJ5IFNBU2pzIixjb2RlOmVlLHZh''@;'; put 'put ''cmlhYmxlczpqLHZlcnNpb246Mn0se3Jlc3VsdDpBfT15aWVsZCBVLnBvc3QoYC9jb21wdXRlL3Nlc3Npb25zLyR7Q30vam9ic2AsbSxiKS5jYXRjaChNZT0+e3Rocm93KDAsdy5wcmVmaXhNZXNzYWdlKShNZSwiRXJyb3Igd2hpbGUgcG9zdGluZyBqb2IuICIpfSk7aWYoIV9lKXJldHVybiBU''@;'; put 'put ''O2xlJiYoeC5pbmZvKGBKb2IgaGFzIGJlZW4gc3VibWl0dGVkIGZvciAnJHtIfScuYCkseC5pbmZvKGBZb3UgY2FuIG1vbml0b3IgdGhlIGpvYiBwcm9ncmVzcyBhdCAnJHtVLmdldEJhc2VVcmwoKX0ke0EubGlua3MuZmluZChNZT0+InN0YXRlIj09PU1lLnJlbCkuaHJlZn0nLmApKTtjb25z''@;'; put 'put ''dCB0ZT15aWVsZCgwLE4ucG9sbEpvYlN0YXRlKShVLEEsbGUscmUsVGUse3Nlc3Npb246VCxzZXNzaW9uTWFuYWdlcjpXfSkuY2F0Y2goTWU9PmcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3ZhciB2ZSxYZTtjb25zdCBqZT1udWxsPT09KHZlPU1lPy5yZXNwb25zZSl8fHZvaWQg''@;'; put 'put ''MD09PXZlP3ZvaWQgMDp2ZS5kYXRhLERlPS9lcnI9WzAtOV0qLC8uZXhlYyhqZSk7aWYoIjUxMTMiPT09KG51bGw9PT0oWGU9RGU/LlswXSl8fHZvaWQgMD09PVhlP3ZvaWQgMDpYZS5zbGljZSg0LC0xKSkpe2NvbnN0IEllPUEubGlua3MuZmluZChWZT0+InVwIj09PVZlLnJlbCkuaHJlZisi''@;'; put 'put ''L2xvZyI7TWUubG9nPXlpZWxkKDAsTy5mZXRjaExvZ0J5Q2h1bmtzKShVLGIsSWUsMWU2KX10aHJvdygwLHcucHJlZml4TWVzc2FnZSkoTWUsIkVycm9yIHdoaWxlIHBvbGxpbmcgam9iIHN0YXR1cy4gIil9KSk7cmUmJih7YWNjZXNzX3Rva2VuOmJ9PXlpZWxkKDAsRi5nZXRUb2tlbnMpKFUs''@;'; put 'put ''cmUpKTtjb25zdHtyZXN1bHQ6c2V9PXlpZWxkIFUuZ2V0KGAvY29tcHV0ZS9zZXNzaW9ucy8ke0N9L2pvYnMvJHtBLmlkfWAsYikuY2F0Y2goTWU9Pnt0aHJvdygwLHcucHJlZml4TWVzc2FnZSkoTWUsIkVycm9yIHdoaWxlIGdldHRpbmcgam9iLiAiKX0pO2xldCB3ZSxVZT0iIjtjb25zdCBK''@;'; put 'put ''ZT1zZS5saW5rcy5maW5kKE1lPT4ibG9nIj09PU1lLnJlbCk7aWYobGUmJkplKXtjb25zdCBNZT1gJHtKZS5ocmVmfS9jb250ZW50YCx2ZT1udWxsIT09KHA9bnVsbD09PShWPXNlLmxvZ1N0YXRpc3RpY3MpfHx2b2lkIDA9PT1WP3ZvaWQgMDpWLmxpbmVDb3VudCkmJnZvaWQgMCE9PXA/cDox''@;'; put 'put ''ZTY7VWU9eWllbGQoMCxPLmZldGNoTG9nQnlDaHVua3MpKFUsYixNZSx2ZSl9aWYodGU9PT1OLkpvYlN0YXRlLkZhaWxlZHx8dGU9PT1OLkpvYlN0YXRlLkVycm9yKXRocm93IG5ldyBQLkNvbXB1dGVKb2JFeGVjdXRpb25FcnJvcihzZSxVZSk7aWYoIW1lKXJldHVybntqb2I6c2UsbG9nOlVl''@;'; put 'put ''fTtjb25zdCBhdD1gL2NvbXB1dGUvc2Vzc2lvbnMvJHtDfS9maWxlcmVmcy9fd2Vib3V0L2NvbnRlbnRgO3JldHVybiB3ZT15aWVsZCBVLmdldChhdCxiLCJ0ZXh0L3BsYWluIikuY2F0Y2goTWU9PmcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3ZhciB2ZSxYZTtpZihNZSBpbnN0''@;'; put 'put ''YW5jZW9mIFAuTm90Rm91bmRFcnJvciYmSmUpe2NvbnN0IGplPWAke0plLmhyZWZ9L2NvbnRlbnRgLERlPW51bGwhPT0oWGU9bnVsbD09PSh2ZT1zZS5sb2dTdGF0aXN0aWNzKXx8dm9pZCAwPT09dmU/dm9pZCAwOnZlLmxpbmVDb3VudCkmJnZvaWQgMCE9PVhlP1hlOjFlNjtyZXR1cm4gVWU9''@;'; put 'put ''eWllbGQoMCxPLmZldGNoTG9nQnlDaHVua3MpKFUsYixqZSxEZSksUHJvbWlzZS5yZWplY3Qoe3N0YXR1czo1MDAsbG9nOlVlfSl9cmV0dXJue3Jlc3VsdDpKU09OLnN0cmluZ2lmeShNZSl9fSkpLHlpZWxkIFcuY2xlYXJTZXNzaW9uKEMsYikuY2F0Y2goTWU9Pnt0aHJvdygwLHcucHJlZml4''@;'; put 'put ''TWVzc2FnZSkoTWUsIkVycm9yIHdoaWxlIGNsZWFyaW5nIHNlc3Npb24uICIpfSkse3Jlc3VsdDp3ZT8ucmVzdWx0LGxvZzpVZX19Y2F0Y2goQyl7aWYoNDA0PT09Qy5zdGF0dXMpcmV0dXJuIEsoVSxXLFksWCxlZSxKLHJlLGllLGxlLCExLCEwKTt0aHJvdygwLHcucHJlZml4TWVzc2FnZSko''@;'; put 'put ''QywiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIHNjcmlwdC4gIil9fSl9fSw3NDU4OmZ1bmN0aW9uKHVlLHEsXyl7InVzZSBzdHJpY3QiO3ZhciBJPV8oNDE1NSkseT10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oUCxGLE8seil7cmV0dXJuIG5ldyhPfHwoTz1Qcm9taXNlKSkoZnVuY3Rp''@;'; put 'put ''b24oTCxLKXtmdW5jdGlvbiBVKFgpe3RyeXtZKHoubmV4dChYKSl9Y2F0Y2goZWUpe0soZWUpfX1mdW5jdGlvbiBXKFgpe3RyeXtZKHoudGhyb3coWCkpfWNhdGNoKGVlKXtLKGVlKX19ZnVuY3Rpb24gWShYKXtYLmRvbmU/TChYLnZhbHVlKTpmdW5jdGlvbiBOKEwpe3JldHVybiBMIGluc3Rh''@;'; put 'put ''bmNlb2YgTz9MOm5ldyBPKGZ1bmN0aW9uKEspe0soTCl9KX0oWC52YWx1ZSkudGhlbihVLFcpfVkoKHo9ei5hcHBseShQLEZ8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5nZXRGaWxlU3RyZWFtPXZvaWQgMDtjb25z''@;'; put 'put ''dCBnPV8oMjk3NSksQj1fKDc3NTcpO3EuZ2V0RmlsZVN0cmVhbT0oUCxGKT0+eSh2b2lkIDAsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtjcmVhdGVXcml0ZVN0cmVhbTpPfT1fKDI5NzUpLHo9Rnx8SS5jd2QoKTtpZih5aWVsZCgwLGcuaXNGb2xkZXIpKHopKXtjb25zdCBMPWAk''@;'; put 'put ''e1AubmFtZXx8ImpvYiJ9LSR7KDAsQi5nZW5lcmF0ZVRpbWVzdGFtcCkoKX0ubG9nYCxVPV8oMjUyMCkuam9pbihGfHxJLmN3ZCgpLEwpO3JldHVybiB5aWVsZCBPKFUpfXJldHVybiB5aWVsZCBPKHopfSl9LDEzNDM6ZnVuY3Rpb24odWUscSxfKXsidXNlIHN0cmljdCI7dmFyIEk9Xyg0MTU1''@;'; put 'put ''KSx5PV8oNTEwOCksZz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oVyxZLFgsZWUpe3JldHVybiBuZXcoWHx8KFg9UHJvbWlzZSkpKGZ1bmN0aW9uKHJlLGllKXtmdW5jdGlvbiBsZShUZSl7dHJ5e19lKGVlLm5leHQoVGUpKX1jYXRjaChTZSl7aWUoU2UpfX1mdW5jdGlvbiBtZShU''@;'; put 'put ''ZSl7dHJ5e19lKGVlLnRocm93KFRlKSl9Y2F0Y2goU2Upe2llKFNlKX19ZnVuY3Rpb24gX2UoVGUpe1RlLmRvbmU/cmUoVGUudmFsdWUpOmZ1bmN0aW9uIEoocmUpe3JldHVybiByZSBpbnN0YW5jZW9mIFg/cmU6bmV3IFgoZnVuY3Rpb24oaWUpe2llKHJlKX0pfShUZS52YWx1ZSkudGhlbihs''@;'; put 'put ''ZSxtZSl9X2UoKGVlPWVlLmFwcGx5KFcsWXx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLmRvUG9sbD1xLnBvbGxKb2JTdGF0ZT1xLkpvYlN0YXRlPXZvaWQgMDtjb25zdCBCPV8oNzA0KSx3PV8oMTM5NSksUD1fKDEy''@;'; put 'put ''MzApLEY9Xyg1OTI4KTt2YXIgTyxXOyhXPU89cS5Kb2JTdGF0ZXx8KHEuSm9iU3RhdGU9e30pKS5Db21wbGV0ZWQ9ImNvbXBsZXRlZCIsVy5SdW5uaW5nPSJydW5uaW5nIixXLlBlbmRpbmc9InBlbmRpbmciLFcuVW5hdmFpbGFibGU9InVuYXZhaWxhYmxlIixXLk5vU3RhdGU9IiIsVy5GYWls''@;'; put 'put ''ZWQ9ImZhaWxlZCIsVy5FcnJvcj0iZXJyb3IiLHEucG9sbEpvYlN0YXRlPWZ1bmN0aW9uIHooVyxZLFgsZWUsSixyZSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IGllPUkubG9nZ2VyfHx5LGxlPUo/LnN0cmVhbUxvZ3x8ITEsbWU9W3ttYXhQb2xsQ291''@;'; put 'put ''bnQ6MjAwLHBvbGxJbnRlcnZhbDozMDB9LHttYXhQb2xsQ291bnQ6MzAwLHBvbGxJbnRlcnZhbDozZTN9LHttYXhQb2xsQ291bnQ6NTAwLHBvbGxJbnRlcnZhbDozZTR9LHttYXhQb2xsQ291bnQ6MzQwMCxwb2xsSW50ZXJ2YWw6NmU0fV07bGV0IF9lO2lmKHZvaWQgMCE9PUope19lPVtKXTts''@;'; put 'put ''ZXR7cG9sbFN0cmF0ZWd5Onh9PUo7dm9pZCAwIT09eD8oVSh4KSx4PXguc29ydCgoQyxUKT0+Qy5tYXhQb2xsQ291bnQtVC5tYXhQb2xsQ291bnQpLF9lPVsuLi5fZSwuLi54XSk6X2U9Wy4uLl9lLC4uLm1lXX1lbHNlIF9lPW1lO2xldCBUZT1fZS5zcGxpY2UoMCwxKVswXTtKPU9iamVjdC5h''@;'; put 'put ''c3NpZ24oT2JqZWN0LmFzc2lnbih7fSxUZSksSnx8e30pO2NvbnN0IFNlPVkubGlua3MuZmluZCh4PT4ic3RhdGUiPT09eC5yZWwpO2lmKCFTZSl0aHJvdyBuZXcgRXJyb3IoIkpvYiBzdGF0ZSBsaW5rIHdhcyBub3QgZm91bmQuIik7bGV0IHAsemU9eWllbGQgTihXLFksTy5Ob1N0YXRlLFgs''@;'; put 'put ''ZWUpLmNhdGNoKHg9PihpZS5lcnJvcihgRXJyb3IgZmV0Y2hpbmcgam9iIHN0YXRlIGZyb20gJHtTZS5ocmVmfS4gU3RhcnRpbmcgcG9sbCwgYXNzdW1pbmcgam9iIHRvIGJlIHJ1bm5pbmcuYCx4KSxPLlVuYXZhaWxhYmxlKSksVj0wO2lmKHplPT09Ty5Db21wbGV0ZWQpcmV0dXJuIFByb21p''@;'; put 'put ''c2UucmVzb2x2ZSh6ZSk7aWYobGUmJigwLEYuaXNOb2RlKSgpKXtjb25zdHtnZXRGaWxlU3RyZWFtOnh9PV8oNzQ1OCk7cD15aWVsZCB4KFksSi5sb2dGb2xkZXJQYXRoKX1sZXQgYj15aWVsZCgwLHEuZG9Qb2xsKShXLFksemUsWCxWLEosZWUsbGUscCxyZSk7aWYoemU9Yi5zdGF0ZSxWPWIu''@;'; put 'put ''cG9sbENvdW50LCFMKHplKXx8Vj49Si5tYXhQb2xsQ291bnQmJiFfZS5sZW5ndGgpcmV0dXJuIHplO2Zvcig7X2UubGVuZ3RoJiZMKHplKTspVGU9X2Uuc3BsaWNlKDAsMSlbMF0sSiYmKFRlLmxvZ0ZvbGRlclBhdGg9Si5sb2dGb2xkZXJQYXRoKSxiPXlpZWxkKDAscS5kb1BvbGwpKFcsWSx6''@;'; put 'put ''ZSxYLFYsVGUsZWUsbGUscCxyZSksemU9Yi5zdGF0ZSxWPWIucG9sbENvdW50O3JldHVybiBwJiZwLmVuZCgpLHplfSl9O2NvbnN0IE49KFcsWSxYLGVlLEopPT5nKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IHJlPVkubGlua3MuZmluZChpZT0+InN0YXRlIj09PWll''@;'; put 'put ''LnJlbCk7aWYoTChYKSl7bGV0IGllO0omJihpZT15aWVsZCgwLEIuZ2V0VG9rZW5zKShXLEopKTtjb25zdHtyZXN1bHQ6bGV9PXlpZWxkIFcuZ2V0KGAke3JlLmhyZWZ9P19hY3Rpb249d2FpdCZ3YWl0PTMwMGAsaWU/LmFjY2Vzc190b2tlbiwidGV4dC9wbGFpbiIse30sZWUpLmNhdGNoKG1l''@;'; put 'put ''PT57dGhyb3cgbmV3IHcuSm9iU3RhdGVQb2xsRXJyb3IoWS5pZCxtZSl9KTtyZXR1cm4gbGUudHJpbSgpfXJldHVybiBYfSksTD1XPT5XPT09Ty5SdW5uaW5nfHxXPT09Ty5Ob1N0YXRlfHxXPT09Ty5QZW5kaW5nfHxXPT09Ty5VbmF2YWlsYWJsZTtxLmRvUG9sbD0oVyxZLFgsZWUsSixyZSxp''@;'; put 'put ''ZSxsZSxtZSxfZSk9Pmcodm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7dmFyIFRlLFNlO2NvbnN0e21heFBvbGxDb3VudDp6ZSxwb2xsSW50ZXJ2YWw6Vn09cmUscD1JLmxvZ2dlcnx8eSxiPVkubGlua3MuZmluZChFPT4ic3RhdGUiPT09RS5yZWwpO2xldCBDPTAsVD1YLEg9Ty5O''@;'; put 'put ''b1N0YXRlLGo9MDtmb3IoO0woVCkmJko8PXplOyl7aWYoX2UmJkomJkolMTA9PTAmJmllKXtjb25zdHtzZXNzaW9uOm0sc2Vzc2lvbk1hbmFnZXI6QX09X2Use3N0YXRlVXJsOm9lLGV0YWc6dGUsaWQ6c2V9PW0se2FjY2Vzc190b2tlbjp3ZX09aWUse2lkOlVlfT1ZLHtyZXN1bHQ6SmUscmVz''@;'; put 'put ''cG9uc2VTdGF0dXM6YXR9PXlpZWxkIEEuZ2V0U2Vzc2lvblN0YXRlKG9lLHRlLHdlKS5jYXRjaCh2ZT0+e3Rocm93IG5ldyB3LkpvYlN0YXRlUG9sbEVycm9yKFVlLHZlKX0pLE1lPXZlPT5bUC5TZXNzaW9uU3RhdGUuUnVubmluZyxQLlNlc3Npb25TdGF0ZS5JZGxlXS5pbmNsdWRlcyh2ZSk7''@;'; put 'put ''aWYoIU1lKEplKXx8MjAwIT09YXQpe0EuY2xlYXJTZXNzaW9uKHNlLHdlKTtjb25zdCB2ZT1NZShKZSk/YFNlc3Npb24gcmVzcG9uc2Ugc3RhdHVzIGlzIG5vdCAyMDAuIFNlc3Npb24gcmVzcG9uc2Ugc3RhdHVzIGlzICR7YXR9LmA6YFNlc3Npb24gc3RhdGUgb2YgdGhlIGpvYiBpcyBub3Qg''@;'; put 'put ''J3J1bm5pbmcnIG9yICdpZGxlJy4gU2Vzc2lvbiBzdGF0ZSBpcyAnJHtKZX0nYDt0aHJvdyBuZXcgdy5Kb2JTdGF0ZVBvbGxFcnJvcihVZSxuZXcgRXJyb3IodmUpKX19VD15aWVsZCBOKFcsWSxULGVlLGllKS5jYXRjaChtPT57aWYoQysrLEo+PXplfHxDPj01KXRocm93IG07cmV0dXJuIHAu''@;'; put 'put ''ZXJyb3IoYEVycm9yIGZldGNoaW5nIGpvYiBzdGF0ZSBmcm9tICR7Yi5ocmVmfS4gUmVzdW1pbmcgcG9sbCwgYXNzdW1pbmcgam9iIHRvIGJlIHJ1bm5pbmcuYCxtKSxPLlVuYXZhaWxhYmxlfSksSisrO2NvbnN0IEU9WS5saW5rcy5maW5kKG09PiJzZWxmIj09PW0ucmVsKS5ocmVmO2lmKGxl''@;'; put 'put ''KXtjb25zdHtyZXN1bHQ6bX09eWllbGQgVy5nZXQoRSxpZT8uYWNjZXNzX3Rva2VuKSxBPW51bGwhPT0oU2U9bnVsbD09PShUZT1tLmxvZ1N0YXRpc3RpY3MpfHx2b2lkIDA9PT1UZT92b2lkIDA6VGUubGluZUNvdW50KSYmdm9pZCAwIT09U2U/U2U6MWU2LHtzYXZlTG9nOm9lfT0oMCxGLmlz''@;'; put 'put ''Tm9kZSkoKT9fKDIwODApOntzYXZlTG9nOm51bGx9O29lJiYoeWllbGQgb2UoWSxXLGosQSxtZSxpZT8uYWNjZXNzX3Rva2VuKSksais9QX1lZSYmSCE9PVQmJihwLmluZm8oYFBvbGxpbmc6ICR7Vy5nZXRCYXNlVXJsKCkrRX0vc3RhdGVgKSxwLmluZm8oYEN1cnJlbnQgam9iIHN0YXRlOiAk''@;'; put 'put ''e1R9YCksSD1UKSxUIT09Ty5VbmF2YWlsYWJsZSYmQz4wJiYoQz0wKSxUIT09Ty5Db21wbGV0ZWQmJih5aWVsZCgwLEYuZGVsYXkpKFYpKX1yZXR1cm57c3RhdGU6VCxwb2xsQ291bnQ6Sn19KTtjb25zdCBVPVc9Pntjb25zdCBZPShYLGVlKT0+e3Rocm93IG5ldyBFcnJvcihgUG9sbCBzdHJh''@;'; put 'put ''dGVnaWVzIGFyZSBub3QgdmFsaWQuJHtYP2AgJHtYfWA6IiJ9JHtlZT9gIEludmFsaWQgcG9sbCBzdHJhdGVneTogXG4ke0pTT04uc3RyaW5naWZ5KGVlLG51bGwsMil9YDoiIn1gKX07Vy5mb3JFYWNoKChYLGVlKT0+e2NvbnN0e21heFBvbGxDb3VudDpKLHBvbGxJbnRlcnZhbDpyZX09WDtK''@;'; put 'put ''PDE/WSgiJ21heFBvbGxDb3VudCcgaGFzIHRvIGJlIGdyZWF0ZXIgdGhhbiAwLiIsWCk6MCE9PWVlP0o8PVdbZWUtMV0ubWF4UG9sbENvdW50JiZZKCInbWF4UG9sbENvdW50JyBoYXMgdG8gYmUgZ3JlYXRlciB0aGFuICdtYXhQb2xsQ291bnQnIGluIHByZXZpb3VzIHBvbGwgc3RyYXRlZ3ku''@;'; put 'put ''IixYKTpyZTwxJiZZKCIncG9sbEludGVydmFsJyBoYXMgdG8gYmUgZ3JlYXRlciB0aGFuIDAuIixYKX0pfX0sMjA4MDpmdW5jdGlvbih1ZSxxLF8peyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDQxNTUpLHk9Xyg1MTA4KSxnPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihGLE8seixOKXty''@;'; put 'put ''ZXR1cm4gbmV3KHp8fCh6PVByb21pc2UpKShmdW5jdGlvbihLLFUpe2Z1bmN0aW9uIFcoZWUpe3RyeXtYKE4ubmV4dChlZSkpfWNhdGNoKEope1UoSil9fWZ1bmN0aW9uIFkoZWUpe3RyeXtYKE4udGhyb3coZWUpKX1jYXRjaChKKXtVKEopfX1mdW5jdGlvbiBYKGVlKXtlZS5kb25lP0soZWUu''@;'; put 'put ''dmFsdWUpOmZ1bmN0aW9uIEwoSyl7cmV0dXJuIEsgaW5zdGFuY2VvZiB6P0s6bmV3IHooZnVuY3Rpb24oVSl7VShLKX0pfShlZS52YWx1ZSkudGhlbihXLFkpfVgoKE49Ti5hcHBseShGLE98fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3Zh''@;'; put 'put ''bHVlOiEwfSkscS5zYXZlTG9nPXZvaWQgMDtjb25zdCBCPV8oNTkyOCksdz1fKDYxMzEpO3Euc2F2ZUxvZz1mdW5jdGlvbiBQKEYsTyx6LE4sTCxLKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYoIUspdGhyb3cgbmV3IEVycm9yKGBMb2dzIGZvciBqb2IgJHtG''@;'; put 'put ''LmlkfSBjYW5ub3QgYmUgZmV0Y2hlZCB3aXRob3V0IGEgdmFsaWQgYWNjZXNzIHRva2VuLmApO2lmKCFMKXRocm93IG5ldyBFcnJvcihgTG9ncyBmb3Igam9iICR7Ri5pZH0gY2Fubm90IGJlIHdyaXR0ZW4gd2l0aG91dCBhIHZhbGlkIHdyaXRlIHN0cmVhbS5gKTtjb25zdCBVPUkubG9nZ2Vy''@;'; put 'put ''fHx5LFc9Ri5saW5rcy5maW5kKFg9PiJsb2ciPT09WC5yZWwpO2lmKCFXKXRocm93IG5ldyBFcnJvcihgTG9nIFVSTCBmb3Igam9iICR7Ri5pZH0gd2FzIG5vdCBmb3VuZC5gKTtjb25zdCBZPXlpZWxkKDAsQi5mZXRjaExvZykoTyxLLGAke1cuaHJlZn0vY29udGVudGAseixOKTtVLmluZm8o''@;'; put 'put ''YFdyaXRpbmcgbG9ncyB0byAke0wucGF0aH1gKSx5aWVsZCgwLHcud3JpdGVTdHJlYW0pKEwsWXx8IiIpfSl9fSw2NDk2OmZ1bmN0aW9uKHVlLHEsXyl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbih3LFAsRixPKXtyZXR1cm4gbmV3KEZ8fChGPVBy''@;'; put 'put ''b21pc2UpKShmdW5jdGlvbihOLEwpe2Z1bmN0aW9uIEsoWSl7dHJ5e1coTy5uZXh0KFkpKX1jYXRjaChYKXtMKFgpfX1mdW5jdGlvbiBVKFkpe3RyeXtXKE8udGhyb3coWSkpfWNhdGNoKFgpe0woWCl9fWZ1bmN0aW9uIFcoWSl7WS5kb25lP04oWS52YWx1ZSk6ZnVuY3Rpb24geihOKXtyZXR1''@;'; put 'put ''cm4gTiBpbnN0YW5jZW9mIEY/TjpuZXcgRihmdW5jdGlvbihMKXtMKE4pfSl9KFkudmFsdWUpLnRoZW4oSyxVKX1XKChPPU8uYXBwbHkodyxQfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEudXBsb2FkVGFibGVzPXZv''@;'; put 'put ''aWQgMDtjb25zdCB5PV8oOTc3OCksZz1fKDI0MDIpO3EudXBsb2FkVGFibGVzPWZ1bmN0aW9uIEIodyxQLEYpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBPPVtdO2Zvcihjb25zdCB6IGluIFApe2NvbnN0IE49KDAsZy5jb252ZXJ0VG9DU1YpKFAseik7''@;'; put 'put ''aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIj09PU4pdGhyb3cgbmV3IEVycm9yKCJUaGUgbWF4IGxlbmd0aCBvZiBhIHN0cmluZyB2YWx1ZSBpbiBTQVNqcyBpcyAzMjc2NSBjaGFyYWN0ZXJzLiIpO2NvbnN0IEw9eWllbGQgdy51cGxvYWRGaWxlKCIvZmlsZXMvZmlsZXMjcmF3VXBs''@;'; put 'put ''b2FkIixOLEYpLmNhdGNoKEs9Pnt0aHJvdygwLHkucHJlZml4TWVzc2FnZSkoSywiRXJyb3Igd2hpbGUgdXBsb2FkaW5nIGZpbGUuICIpfSk7Ty5wdXNoKHt0YWJsZU5hbWU6eixmaWxlOkwucmVzdWx0fSl9cmV0dXJuIE99KX19LDYxMzE6ZnVuY3Rpb24odWUscSl7InVzZSBzdHJpY3QiO3Zh''@;'; put 'put ''ciBfPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbih5LGcsQix3KXtyZXR1cm4gbmV3KEJ8fChCPVByb21pc2UpKShmdW5jdGlvbihGLE8pe2Z1bmN0aW9uIHooSyl7dHJ5e0wody5uZXh0KEspKX1jYXRjaChVKXtPKFUpfX1mdW5jdGlvbiBOKEspe3RyeXtMKHcudGhyb3coSykpfWNh''@;'; put 'put ''dGNoKFUpe08oVSl9fWZ1bmN0aW9uIEwoSyl7Sy5kb25lP0YoSy52YWx1ZSk6ZnVuY3Rpb24gUChGKXtyZXR1cm4gRiBpbnN0YW5jZW9mIEI/RjpuZXcgQihmdW5jdGlvbihPKXtPKEYpfSl9KEsudmFsdWUpLnRoZW4oeixOKX1MKCh3PXcuYXBwbHkoeSxnfHxbXSkpLm5leHQoKSl9KX07T2Jq''@;'; put 'put ''ZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEud3JpdGVTdHJlYW09dm9pZCAwLHEud3JpdGVTdHJlYW09KHksZyk9Pl8odm9pZCAwLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIG5ldyBQcm9taXNlKChCLHcpPT57eS53cml0ZShnKyJcbiIs''@;'; put 'put ''UD0+e1A/dyhQKTpCKCEwKX0pfSl9KX0sMjg1MTpmdW5jdGlvbih1ZSxxLF8peyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDUxMDgpLHk9Xyg0MTU1KSxnPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihXLFksWCxlZSl7cmV0dXJuIG5ldyhYfHwoWD1Qcm9taXNlKSkoZnVuY3Rpb24ocmUs''@;'; put 'put ''aWUpe2Z1bmN0aW9uIGxlKFRlKXt0cnl7X2UoZWUubmV4dChUZSkpfWNhdGNoKFNlKXtpZShTZSl9fWZ1bmN0aW9uIG1lKFRlKXt0cnl7X2UoZWUudGhyb3coVGUpKX1jYXRjaChTZSl7aWUoU2UpfX1mdW5jdGlvbiBfZShUZSl7VGUuZG9uZT9yZShUZS52YWx1ZSk6ZnVuY3Rpb24gSihyZSl7''@;'; put 'put ''cmV0dXJuIHJlIGluc3RhbmNlb2YgWD9yZTpuZXcgWChmdW5jdGlvbihpZSl7aWUocmUpfSl9KFRlLnZhbHVlKS50aGVuKGxlLG1lKX1fZSgoZWU9ZWUuYXBwbHkoVyxZfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEu''@;'; put 'put ''QXV0aE1hbmFnZXI9dm9pZCAwO2NvbnN0IEI9XygzOTAwKSx3PV8oMTM5NSksUD1fKDU5MjgpLEY9XygxMTcwKSxPPV8oNTQxOCksej1fKDQ1ODIpLE49Xyg2NTQ3KSxMPV8oMTUyNyk7cS5BdXRoTWFuYWdlcj1jbGFzcyBLe2NvbnN0cnVjdG9yKFksWCxlZSxKKXt0aGlzLnNlcnZlclVybD1Z''@;'; put 'put ''LHRoaXMuc2VydmVyVHlwZT1YLHRoaXMucmVxdWVzdENsaWVudD1lZSx0aGlzLmxvZ2luQ2FsbGJhY2s9Six0aGlzLnVzZXJOYW1lPSIiLHRoaXMudXNlckxvbmdOYW1lPSIiLHRoaXMucmVkaXJlY3RlZExvZ2luVXJsPSIvU0FTTG9nb24iLHRoaXMuZXh0cmFjdFVzZXJOYW1lPXJlPT57c3dp''@;'; put 'put ''dGNoKHRoaXMuc2VydmVyVHlwZSl7Y2FzZSBCLlNlcnZlclR5cGUuU2FzVml5YTpyZXR1cm4gcmU/LmlkO2Nhc2UgQi5TZXJ2ZXJUeXBlLlNhczk6cmV0dXJuIiI7Y2FzZSBCLlNlcnZlclR5cGUuU2FzanM6cmV0dXJuIHJlPy51c2VybmFtZTtkZWZhdWx0OnJldHVybiBJLmVycm9yKCJTZXJ2''@;'; put 'put ''ZXIgVHlwZSBub3QgZm91bmQgaW4gZXh0cmFjdFVzZXJOYW1lIGZ1bmN0aW9uIiksIiJ9fSx0aGlzLmV4dHJhY3RVc2VyTG9uZ05hbWU9cmU9Pntzd2l0Y2godGhpcy5zZXJ2ZXJUeXBlKXtjYXNlIEIuU2VydmVyVHlwZS5TYXNWaXlhOnJldHVybiByZT8ubmFtZTtjYXNlIEIuU2VydmVyVHlw''@;'; put 'put ''ZS5TYXM5OnJldHVybigwLEYuZXh0cmFjdFVzZXJMb25nTmFtZVNhczkpKHJlKTtjYXNlIEIuU2VydmVyVHlwZS5TYXNqczpyZXR1cm4gcmU/LmRpc3BsYXlOYW1lO2RlZmF1bHQ6cmV0dXJuIEkuZXJyb3IoIlNlcnZlciBUeXBlIG5vdCBmb3VuZCBpbiBleHRyYWN0VXNlck5hbWUgZnVuY3Rp''@;'; put 'put ''b24iKSwiIn19LHRoaXMuc2V0TG9naW5Vcmw9cmU9PntsZXQgaWU9cmVbMV0ucmVwbGFjZSgvXD8uKi8sIiIpO2lmKCIvIj09PWllWzBdKXtpZT1pZS5zdWJzdHIoMSk7Y29uc3QgbGU9dGhpcy5zZXJ2ZXJVcmw/YCR7dGhpcy5zZXJ2ZXJVcmx9LyR7aWV9YDpgJHtpZX1gO3RoaXMubG9naW5V''@;'; put 'put ''cmw9dGhpcy5zZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJUeXBlLlNhc1ZpeWE/bGU6bGUucmVwbGFjZSgiL1NBU0xvZ29uL2xvZ2luLmRvIiwiL1NBU0xvZ29uL2xvZ2luIil9fSx0aGlzLmxvZ2luVXJsPSIvU0FTTG9nb24vbG9naW4iLHRoaXMubG9nb3V0VXJsPXRoaXMuc2VydmVyVHlwZT09PUIu''@;'; put 'put ''U2VydmVyVHlwZS5TYXM5PyIvU0FTTG9nb24vbG9nb3V0PyI6dGhpcy5zZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJUeXBlLlNhc1ZpeWE/Ii9TQVNMb2dvbi9sb2dvdXQuZG8/IjoiL1NBU0xvZ29uL2xvZ291dCIsdGhpcy5yZWRpcmVjdGVkTG9naW5Vcmw9dGhpcy5zZXJ2ZXJVcmwrdGhpcy5yZWRp''@;'; put 'put ''cmVjdGVkTG9naW5Vcmx9cmVkaXJlY3RlZExvZ0luKHtvbkxvZ2dlZE91dDpZfSl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0e2lzTG9nZ2VkSW46WCx1c2VyTmFtZTplZSx1c2VyTG9uZ05hbWU6Sn09eWllbGQgdGhpcy5mZXRjaFVzZXJOYW1lKCk7aWYo''@;'; put 'put ''WClyZXR1cm4oeS5sb2dnZXJ8fEkpLmxvZygibG9naW4gd2FzIG5vdCBhdHRlbXB0ZWQgYXMgYSB2YWxpZCBzZXNzaW9uIGFscmVhZHkgZXhpc3RzIikseWllbGQgdGhpcy5sb2dpbkNhbGxiYWNrKCkse2lzTG9nZ2VkSW46ITAsdXNlck5hbWU6ZWUsdXNlckxvbmdOYW1lOkp9O2NvbnN0IHJl''@;'; put 'put ''PXlpZWxkKDAsTy5vcGVuV2ViUGFnZSkodGhpcy5yZWRpcmVjdGVkTG9naW5VcmwsIlNBU0xvZ29uIix7d2lkdGg6NTAwLGhlaWdodDo2MDB9LFkpO2lmKCFyZSlyZXR1cm57aXNMb2dnZWRJbjohMSx1c2VyTmFtZToiIix1c2VyTG9uZ05hbWU6IiJ9O2NvbnN0e2lzTG9nZ2VkSW46aWV9PXRo''@;'; put 'put ''aXMuc2VydmVyVHlwZT09PUIuU2VydmVyVHlwZS5TYXNWaXlhP3lpZWxkKDAsTi52ZXJpZnlTYXNWaXlhTG9naW4pKHJlKTp5aWVsZCgwLHoudmVyaWZ5U2FzOUxvZ2luKShyZSk7aWYocmUuY2xvc2UoKSxpZSl7dGhpcy5zZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJUeXBlLlNhczkmJih5aWVsZCB0''@;'; put 'put ''aGlzLnBlcmZvcm1DQVNTZWN1cml0eUNoZWNrKCkpO2NvbnN0e3VzZXJOYW1lOmxlLHVzZXJMb25nTmFtZTptZX09eWllbGQgdGhpcy5mZXRjaFVzZXJOYW1lKCk7cmV0dXJuIHlpZWxkIHRoaXMubG9naW5DYWxsYmFjaygpLHtpc0xvZ2dlZEluOiEwLHVzZXJOYW1lOmxlLHVzZXJMb25nTmFt''@;'; put 'put ''ZTptZX19cmV0dXJue2lzTG9nZ2VkSW46ITEsdXNlck5hbWU6IiIsdXNlckxvbmdOYW1lOiIifX0pfWxvZ0luKFksWCl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IGVlPXtfc2VydmljZToiZGVmYXVsdCIsdXNlcm5hbWU6WSxwYXNzd29yZDpYfTt0aGlz''@;'; put 'put ''LnVzZXJOYW1lPSIiLHRoaXMudXNlckxvbmdOYW1lPSIiO2xldHtpc0xvZ2dlZEluOkosbG9naW5Gb3JtOnJlLHVzZXJMb25nTmFtZTppZX09eWllbGQgdGhpcy5jaGVja1Nlc3Npb24oKTtpZihKKXJldHVybih5LmxvZ2dlcnx8SSkubG9nKCJsb2dpbiB3YXMgbm90IGF0dGVtcHRlZCBhcyBh''@;'; put 'put ''IHZhbGlkIHNlc3Npb24gYWxyZWFkeSBleGlzdHMiKSx5aWVsZCB0aGlzLmxvZ2luQ2FsbGJhY2soKSx0aGlzLnVzZXJOYW1lPWVlLnVzZXJuYW1lLHRoaXMudXNlckxvbmdOYW1lPWllLHtpc0xvZ2dlZEluOiEwLHVzZXJOYW1lOnRoaXMudXNlck5hbWUsdXNlckxvbmdOYW1lOnRoaXMudXNl''@;'; put 'put ''ckxvbmdOYW1lfTtsZXQgbGU9eWllbGQgdGhpcy5zZW5kTG9naW5SZXF1ZXN0KHJlLGVlKSxtZT0oMCxMLmlzTG9nSW5TdWNjZXNzSGVhZGVyUHJlc2VudCkodGhpcy5zZXJ2ZXJUeXBlLGxlKTtpZighbWUpe2lmKFUobGUpKXtjb25zdCBUZT15aWVsZCB0aGlzLmdldExvZ2luRm9ybShsZSk7''@;'; put 'put ''bGU9eWllbGQgdGhpcy5zZW5kTG9naW5SZXF1ZXN0KFRlLGVlKX1jb25zdCBfZT15aWVsZCB0aGlzLmNoZWNrU2Vzc2lvbigpO21lPV9lLmlzTG9nZ2VkSW4sdGhpcy51c2VyTG9uZ05hbWU9X2UudXNlckxvbmdOYW1lfXJldHVybiBtZSYmKHRoaXMuc2VydmVyVHlwZT09PUIuU2VydmVyVHlw''@;'; put 'put ''ZS5TYXM5JiYoeWllbGQgdGhpcy5wZXJmb3JtQ0FTU2VjdXJpdHlDaGVjaygpKSx0aGlzLmxvZ2luQ2FsbGJhY2soKSx0aGlzLnVzZXJOYW1lPWVlLnVzZXJuYW1lKSx7aXNMb2dnZWRJbjptZSx1c2VyTmFtZTp0aGlzLnVzZXJOYW1lLHVzZXJMb25nTmFtZTp0aGlzLnVzZXJMb25nTmFtZX19''@;'; put 'put ''KX1wZXJmb3JtQ0FTU2VjdXJpdHlDaGVjaygpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBZPWAke3RoaXMuc2VydmVyVXJsfS9TQVNTdG9yZWRQcm9jZXNzL2pfc3ByaW5nX2Nhc19zZWN1cml0eV9jaGVja2A7eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50''@;'; put 'put ''LmdldChgL1NBU0xvZ29uL2xvZ2luP3NlcnZpY2U9JHtZfWAsdm9pZCAwKS5jYXRjaChYPT57aWYoIShYIGluc3RhbmNlb2Ygdy5Ob3RGb3VuZEVycm9yKSl0aHJvdyBYfSl9KX1zZW5kTG9naW5SZXF1ZXN0KFksWCl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2lm''@;'; put 'put ''KHRoaXMuc2VydmVyVHlwZT09PUIuU2VydmVyVHlwZS5TYXNqcyl7Y29uc3R7dXNlcm5hbWU6cmUscGFzc3dvcmQ6aWV9PVgse3Jlc3VsdDpsZX09eWllbGQgdGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QodGhpcy5sb2dpblVybCx7dXNlcm5hbWU6cmUscGFzc3dvcmQ6aWV9LHZvaWQgMCk7cmV0''@;'; put 'put ''dXJuIGxlfWZvcihjb25zdCByZSBpbiBZKVhbcmVdPVlbcmVdO2NvbnN0IGVlPSgwLFAuc2VyaWFsaXplKShYKSx7cmVzdWx0Okp9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5wb3N0KHRoaXMubG9naW5VcmwsZWUsdm9pZCAwLCJ0ZXh0L3BsYWluIix7IkNvbnRlbnQtVHlwZSI6ImFwcGxp''@;'; put 'put ''Y2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsQWNjZXB0OiIqLyoifSk7cmV0dXJuIEp9KX1jaGVja1Nlc3Npb24oKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3R7aXNMb2dnZWRJbjpZLHVzZXJOYW1lOlgsdXNlckxvbmdOYW1lOmVlfT15aWVsZCB0''@;'; put 'put ''aGlzLmZldGNoVXNlck5hbWUoKTtsZXQgSj1udWxsO3JldHVybiBZfHwoeWllbGQgdGhpcy5sb2dPdXQoKSxKPXlpZWxkIHRoaXMuZ2V0TmV3TG9naW5Gb3JtKCkpLFByb21pc2UucmVzb2x2ZSh7aXNMb2dnZWRJbjpZLHVzZXJOYW1lOlgsdXNlckxvbmdOYW1lOmVlLGxvZ2luRm9ybTpKfSl9''@;'; put 'put ''KX1nZXROZXdMb2dpbkZvcm0oKXtyZXR1cm4gZyh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7aWYodGhpcy5zZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJUeXBlLlNhc2pzKXJldHVybiB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KCIvIix2b2lkIDApLnRoZW4oKHtyZXN1bHQ6WH0pPT57dmFy''@;'; put 'put ''IGVlO2NvbnN0IEo9bnVsbD09PShlZT0vPHNjcmlwdD5kb2N1bWVudC5jb29raWUgPSAnKFhTUkYtVE9LRU49Lio7IE1heC1BZ2U9ODY0MDA7IFNhbWVTaXRlPVN0cmljdDsgUGF0aD1cLzspJzxcL3NjcmlwdD4vLmV4ZWMoWCkpfHx2b2lkIDA9PT1lZT92b2lkIDA6ZWVbMV07SiYmKGRvY3Vt''@;'; put 'put ''ZW50LmNvb2tpZT1KKX0pO2NvbnN0e3Jlc3VsdDpZfT15aWVsZCB0aGlzLnJlcXVlc3RDbGllbnQuZ2V0KHRoaXMubG9naW5VcmwucmVwbGFjZSgiL1NBU0xvZ29uL2xvZ2luLmRvIiwiL1NBU0xvZ29uL2xvZ2luIiksdm9pZCAwLCJ0ZXh0L3BsYWluIik7cmV0dXJuIHlpZWxkIHRoaXMuZ2V0''@;'; put 'put ''TG9naW5Gb3JtKFkpfSl9ZmV0Y2hVc2VyTmFtZSgpe3JldHVybiBnKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBZPXRoaXMuc2VydmVyVHlwZT09PUIuU2VydmVyVHlwZS5TYXNWaXlhP2Ake3RoaXMuc2VydmVyVXJsfS9pZGVudGl0aWVzL3VzZXJzL0BjdXJyZW50VXNl''@;'; put 'put ''cmA6dGhpcy5zZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJUeXBlLlNhczk/YCR7dGhpcy5zZXJ2ZXJVcmx9L1NBU1N0b3JlZFByb2Nlc3NgOmAke3RoaXMuc2VydmVyVXJsfS9TQVNqc0FwaS9zZXNzaW9uYCx7cmVzdWx0Olh9PXlpZWxkIHRoaXMucmVxdWVzdENsaWVudC5nZXQoWSx2b2lkIDAsInRl''@;'; put 'put ''eHQvcGxhaW4iKS5jYXRjaChKPT4oe3Jlc3VsdDoiYXV0aEVyciJ9KSksZWU9ImF1dGhFcnIiIT09WDtyZXR1cm4gZWU/e2lzTG9nZ2VkSW46ZWUsdXNlck5hbWU6dGhpcy5leHRyYWN0VXNlck5hbWUoWCksdXNlckxvbmdOYW1lOnRoaXMuZXh0cmFjdFVzZXJMb25nTmFtZShYKX06KHlpZWxk''@;'; put 'put ''IHRoaXMubG9nT3V0KCkse2lzTG9nZ2VkSW46ZWUsdXNlck5hbWU6IiIsdXNlckxvbmdOYW1lOiIifSl9KX1nZXRMb2dpbkZvcm0oWSl7Y29uc3QgZWU9Lzxmb3JtLithY3Rpb249IiguKihMb2dvbnxsb2dpbilbXiJdKikuKj4vLmV4ZWMoWSksSj17fTtpZihlZSYmZWUubGVuZ3RoKXt0aGlz''@;'; put 'put ''LnNldExvZ2luVXJsKGVlKTtjb25zdCByZT0oWT1ZLnJlcGxhY2UoLzxpbnB1dC9nLCJcbjxpbnB1dCIpKS5tYXRjaCgvPGlucHV0LioiaGlkZGVuIltePl0qPi9nKTtyZSYmcmUuZm9yRWFjaChpZT0+e2NvbnN0IGxlPWllLm1hdGNoKC9uYW1lPSIoW14iXSopIlxzdmFsdWU9IihbXiJdKikv''@;'; put 'put ''KTtsZSYmbGUubGVuZ3RoJiYoSltsZVsxXV09bGVbMl0pfSl9cmV0dXJuIE9iamVjdC5rZXlzKEopLmxlbmd0aD9KOm51bGx9bG9nT3V0KCl7cmV0dXJuIGcodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB0aGlzLnJlcXVlc3RDbGllbnQuY2xlYXJDc3JmVG9rZW5zKCks''@;'; put 'put ''dGhpcy5yZXF1ZXN0Q2xpZW50LmdldCh0aGlzLmxvZ291dFVybCx2b2lkIDApLnRoZW4oKCk9PiEwKX0pfX07Y29uc3QgVT1XPT4vQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdGhlIHN5c3RlbSB3YXMgdmVyaWZ5aW5nIHlvdXIgY3JlZGVudGlhbHMuIFBsZWFzZSBlbnRlciB5b3VyIGNyZWRl''@;'; put 'put ''bnRpYWxzIGFnYWluLi9nbS50ZXN0KFcpfSw1NzpmdW5jdGlvbih1ZSxxLF8peyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oUCxGLE8seil7cmV0dXJuIG5ldyhPfHwoTz1Qcm9taXNlKSkoZnVuY3Rpb24oTCxLKXtmdW5jdGlvbiBVKFgpe3RyeXtZ''@;'; put 'put ''KHoubmV4dChYKSl9Y2F0Y2goZWUpe0soZWUpfX1mdW5jdGlvbiBXKFgpe3RyeXtZKHoudGhyb3coWCkpfWNhdGNoKGVlKXtLKGVlKX19ZnVuY3Rpb24gWShYKXtYLmRvbmU/TChYLnZhbHVlKTpmdW5jdGlvbiBOKEwpe3JldHVybiBMIGluc3RhbmNlb2YgTz9MOm5ldyBPKGZ1bmN0aW9uKEsp''@;'; put 'put ''e0soTCl9KX0oWC52YWx1ZSkudGhlbihVLFcpfVkoKHo9ei5hcHBseShQLEZ8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5nZXRBY2Nlc3NUb2tlbkZvclNhc2pzPXZvaWQgMDtjb25zdCB5PV8oOTc3OCksZz1fKDkw''@;'; put 'put ''MTcpLEI9XygzOTAwKTtxLmdldEFjY2Vzc1Rva2VuRm9yU2FzanM9ZnVuY3Rpb24gdyhQLEYsTyl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IHo9Ii9TQVNqc0FwaS9hdXRoL3Rva2VuIixOPXtjbGllbnRJZDpGLGNvZGU6T307cmV0dXJuIHlpZWxkIFAu''@;'; put 'put ''cG9zdCh6LE4sdm9pZCAwKS50aGVuKEw9Pntjb25zdCBLPUwucmVzdWx0O3JldHVybnthY2Nlc3NfdG9rZW46Sy5hY2Nlc3NUb2tlbixyZWZyZXNoX3Rva2VuOksucmVmcmVzaFRva2VufX0pLmNhdGNoKEw9Pnt0aHJvdygwLHkucHJlZml4TWVzc2FnZSkoTCwoMCxnLmdldFRva2VuUmVxdWVz''@;'; put 'put ''dEVycm9yUHJlZml4KSgiZmV0Y2hpbmcgYWNjZXNzIHRva2VuIiwiZ2V0QWNjZXNzVG9rZW5Gb3JTYXNqcyIsQi5TZXJ2ZXJUeXBlLlNhc2pzLHosTixGKSl9KX0pfX0sMzU2OTpmdW5jdGlvbih1ZSxxLF8peyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDg3NjQpLkJ1ZmZlcix5PXRoaXMmJnRoaXMu''@;'; put 'put ''X19hd2FpdGVyfHxmdW5jdGlvbihPLHosTixMKXtyZXR1cm4gbmV3KE58fChOPVByb21pc2UpKShmdW5jdGlvbihVLFcpe2Z1bmN0aW9uIFkoSil7dHJ5e2VlKEwubmV4dChKKSl9Y2F0Y2gocmUpe1cocmUpfX1mdW5jdGlvbiBYKEope3RyeXtlZShMLnRocm93KEopKX1jYXRjaChyZSl7Vyhy''@;'; put 'put ''ZSl9fWZ1bmN0aW9uIGVlKEope0ouZG9uZT9VKEoudmFsdWUpOmZ1bmN0aW9uIEsoVSl7cmV0dXJuIFUgaW5zdGFuY2VvZiBOP1U6bmV3IE4oZnVuY3Rpb24oVyl7VyhVKX0pfShKLnZhbHVlKS50aGVuKFksWCl9ZWUoKEw9TC5hcHBseShPLHp8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5nZXRBY2Nlc3NUb2tlbkZvclZpeWE9dm9pZCAwO2NvbnN0IGc9XygzOTAwKSxCPV8oOTc3OCksdz1fKDEzOTUpLFA9Xyg5MDE3KTtxLmdldEFjY2Vzc1Rva2VuRm9yVml5YT1mdW5jdGlvbiBGKE8seixOLEwpe3JldHVy''@;'; put 'put ''biB5KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgSztLPXR5cGVvZiBJPiJ1Ij9idG9hKHorIjoiK04pOkkuZnJvbSh6KyI6IitOKS50b1N0cmluZygiYmFzZTY0Iik7Y29uc3QgVT0iL1NBU0xvZ29uL29hdXRoL3Rva2VuIixXPXtBdXRob3JpemF0aW9uOiJCYXNpYyAiK0ss''@;'; put 'put ''QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uIn0sWT1uZXcgVVJMU2VhcmNoUGFyYW1zKHtncmFudF90eXBlOiJhdXRob3JpemF0aW9uX2NvZGUiLGNvZGU6TH0pLFg9bmV3IFVSTFNlYXJjaFBhcmFtcyhZKTtyZXR1cm4geWllbGQgTy5wb3N0KFUsWCx2b2lkIDAsImFwcGxpY2F0aW9uL3gtd3d3''@;'; put 'put ''LWZvcm0tdXJsZW5jb2RlZCIsVykudGhlbihKPT5KLnJlc3VsdCkuY2F0Y2goSj0+e3Rocm93IEogaW5zdGFuY2VvZiB3LkNlcnRpZmljYXRlRXJyb3I/SjooMCxCLnByZWZpeE1lc3NhZ2UpKEosKDAsUC5nZXRUb2tlblJlcXVlc3RFcnJvclByZWZpeCkoImZldGNoaW5nIGFjY2VzcyB0b2tl''@;'; put 'put ''biIsImdldEFjY2Vzc1Rva2VuRm9yVml5YSIsZy5TZXJ2ZXJUeXBlLlNhc1ZpeWEsVSxZLFcseixOKSl9KX0pfX0sOTAxNzoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5nZXRUb2tlblJlcXVlc3RFcnJv''@;'; put 'put ''clByZWZpeFJlc3BvbnNlPXEuZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXg9dm9pZCAwO2NvbnN0IEk9XygzOTAwKSxnPVA9PmBSZXNwb25zZSBmcm9tICR7KFA9PlA9PT1JLlNlcnZlclR5cGUuU2FzVml5YT8iVml5YSI6IlNhc2pzIikoUCl9IGlzIGJlbG93LmA7cS5nZXRUb2tlblJlcXVl''@;'; put 'put ''c3RFcnJvclByZWZpeD0oUCxGLE8seixOLEwsSyxVKT0+e2NvbnN0IFc9WD0+SlNPTi5zdHJpbmdpZnkoWCxudWxsLDIpLFk9W2BFcnJvciB3aGlsZSAke1B9IGZyb20gJHt6fWAsYFRocm93biBieSB0aGUgQHNhc2pzL2FkYXB0ZXIgJHtGfSBmdW5jdGlvbi5gXTtyZXR1cm4gTiYmKFkucHVz''@;'; put 'put ''aCgiUGF5bG9hZDoiKSxZLnB1c2goVyhOKSkpLEwmJihZLnB1c2goIkhlYWRlcnM6IiksWS5wdXNoKFcoTCkpKSxLJiZZLnB1c2goYENsaWVudElkOiAke0t9YCksVSYmWS5wdXNoKGBDbGllbnRTZWNyZXQ6ICR7VX1gKSxZLnB1c2goIiIpLFkucHVzaChgJHtnKE8pfWApLFkucHVzaCgiIiks''@;'; put 'put ''WS5qb2luKCJcbiIpfSxxLmdldFRva2VuUmVxdWVzdEVycm9yUHJlZml4UmVzcG9uc2U9KFAsRik9PlAuc3BsaXQoYCR7ZyhGKX1cbmApLnBvcCgpfSw3MDQ6ZnVuY3Rpb24odWUscSxfKXsidXNlIHN0cmljdCI7dmFyIEk9Xyg0MTU1KSx5PV8oNTEwOCksZz10aGlzJiZ0aGlzLl9fYXdhaXRl''@;'; put 'put ''cnx8ZnVuY3Rpb24oeixOLEwsSyl7cmV0dXJuIG5ldyhMfHwoTD1Qcm9taXNlKSkoZnVuY3Rpb24oVyxZKXtmdW5jdGlvbiBYKHJlKXt0cnl7SihLLm5leHQocmUpKX1jYXRjaChpZSl7WShpZSl9fWZ1bmN0aW9uIGVlKHJlKXt0cnl7SihLLnRocm93KHJlKSl9Y2F0Y2goaWUpe1koaWUpfX1m''@;'; put 'put ''dW5jdGlvbiBKKHJlKXtyZS5kb25lP1cocmUudmFsdWUpOmZ1bmN0aW9uIFUoVyl7cmV0dXJuIFcgaW5zdGFuY2VvZiBMP1c6bmV3IEwoZnVuY3Rpb24oWSl7WShXKX0pfShyZS52YWx1ZSkudGhlbihYLGVlKX1KKChLPUsuYXBwbHkoeixOfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuZ2V0VG9rZW5zPXZvaWQgMDtjb25zdCBCPV8oNjc5OSksdz1fKDM5MDApLFA9XygzNjYpLEY9XygyNDkpO3EuZ2V0VG9rZW5zPWZ1bmN0aW9uIE8oeixOLEw9dy5TZXJ2ZXJUeXBlLlNhc1ZpeWEpe3JldHVybiBnKHRoaXMs''@;'; put 'put ''dm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBLPUkubG9nZ2VyfHx5O2xldHthY2Nlc3NfdG9rZW46VSxyZWZyZXNoX3Rva2VuOlcsY2xpZW50Olksc2VjcmV0Olh9PU47aWYoKDAsQi5pc0FjY2Vzc1Rva2VuRXhwaXJpbmcpKFUpfHwoMCxCLmlzUmVmcmVzaFRva2VuRXhwaXJpbmcp''@;'; put 'put ''KFcpKXtpZigoMCxCLmhhc1Rva2VuRXhwaXJlZCkoVykpe2NvbnN0IEo9IlVuYWJsZSB0byBvYnRhaW4gbmV3IGFjY2VzcyB0b2tlbi4gWW91ciByZWZyZXNoIHRva2VuIGhhcyBleHBpcmVkLiI7dGhyb3cgSy5lcnJvcihKKSxuZXcgRXJyb3IoSil9Sy5pbmZvKCJSZWZyZXNoaW5nIGFjY2Vz''@;'; put 'put ''cyBhbmQgcmVmcmVzaCB0b2tlbnMuIiksKHthY2Nlc3NfdG9rZW46VSxyZWZyZXNoX3Rva2VuOld9PUw9PT13LlNlcnZlclR5cGUuU2FzVml5YT95aWVsZCgwLFAucmVmcmVzaFRva2Vuc0ZvclZpeWEpKHosWSxYLFcpOnlpZWxkKDAsRi5yZWZyZXNoVG9rZW5zRm9yU2FzanMpKHosVykpfXJl''@;'; put 'put ''dHVybnthY2Nlc3NfdG9rZW46VSxyZWZyZXNoX3Rva2VuOlcsY2xpZW50Olksc2VjcmV0Olh9fSl9fSwxNTI3OmZ1bmN0aW9uKHVlLHEsXyl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihnLEIsdyxQKXt2b2lk''@;'; put 'put ''IDA9PT1QJiYoUD13KTt2YXIgRj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEIsdyk7KCFGfHwoImdldCJpbiBGPyFCLl9fZXNNb2R1bGU6Ri53cml0YWJsZXx8Ri5jb25maWd1cmFibGUpKSYmKEY9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEJbd119fSks''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KGcsUCxGKX06ZnVuY3Rpb24oZyxCLHcsUCl7dm9pZCAwPT09UCYmKFA9dyksZ1tQXT1CW3ddfSkseT10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZyxCKXtmb3IodmFyIHcgaW4gZykiZGVmYXVsdCIhPT13JiYhT2JqZWN0LnByb3RvdHlw''@;'; put 'put ''ZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEIsdykmJkkoQixnLHcpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkseShfKDI4NTEpLHEpLHkoXyg5MDk3KSxxKSx5KF8oOTE2NikscSkseShfKDY2NDMpLHEpfSw5MDk3Oih1ZSxxKT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZD12b2lkIDAscS5pc0F1dGhvcml6ZUZvcm1SZXF1aXJlZD1JPT4vPGZvcm0uK2FjdGlvbj0iKC4qTG9nb25cL29hdXRoXC9hdXRob3JpemVbXiJdKikuKj4v''@;'; put 'put ''Z20udGVzdChJKX0sOTE2NjoodWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuaXNMb2dJblJlcXVpcmVkPXZvaWQgMCxxLmlzTG9nSW5SZXF1aXJlZD1JPT4vPGZvcm0uK2FjdGlvbj0iKC4qKExvZ29uKXwobG9n''@;'; put 'put ''aW4pW14iXSopLio+L2dtLnRlc3QoSSl9LDY2NDM6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuaXNMb2dJblN1Y2Nlc3NIZWFkZXJQcmVzZW50PXEuZ2V0RXhwZWN0ZWRMb2dJblN1Y2Nlc3NIZWFkZXI9''@;'; put 'put ''cS5sb2dpblN1Y2Nlc3NIZWFkZXJzPXEuZGVmYXVsdFN1Y2Nlc3NIZWFkZXJLZXk9dm9pZCAwO2NvbnN0IEk9XygzOTAwKSx5PV8oNTkyOCksZz0iWW91IGhhdmUgc2lnbmVkIGluLiI7cS5kZWZhdWx0U3VjY2Vzc0hlYWRlcktleT0iZGVmYXVsdCIscS5sb2dpblN1Y2Nlc3NIZWFkZXJzPXtl''@;'; put 'put ''czoiWWEgc2UgaGEgaW5pY2lhZG8gbGEgc2VzaVx4ZjNuLiIsdGg6Ilx1MGUwNFx1MGUzOFx1MGUxM1x1MGUyNVx1MGUwN1x1MGUwYVx1MGUzN1x1MGU0OFx1MGUyZFx1MGU0MFx1MGUwMlx1MGU0OVx1MGUzMlx1MGU0M1x1MGUwYVx1MGU0OVx1MGU0MVx1MGUyNVx1MGU0OVx1MGUyNyIsamE6''@;'; put 'put ''Ilx1MzBiNVx1MzBhNFx1MzBmM1x1MzBhNFx1MzBmM1x1MzA1N1x1MzA3ZVx1MzA1N1x1MzA1Zlx1MzAwMiIsbmI6IkR1IGhhciBsb2dnZXQgZGVnIHBceGU1LiIsc2w6IlByaWphdmlsaSBzdGUgc2UuIixhcjoiXHUwNjQ0XHUwNjQyXHUwNjJmIFx1MDY0Mlx1MDY0NVx1MDYyYSAiLHNrOiJQ''@;'; put 'put ''cmlobFx4ZTFzaWxpIHN0ZSBzYS4iLHpoX0hLOiJcdTYwYThcdTVkZjJcdTc2N2JcdTUxNjVcdTMwMDIiLHpoX0NOOiJcdTYwYThcdTVkZjJcdTc2N2JcdTVmNTVcdTMwMDIiLGl0OiJMJ3V0ZW50ZSBzaSBceGU4IGNvbm5lc3NvLiIsc3Y6IkR1IGhhciBsb2dnYXQgaW4uIixoZToiXHUwNWUw''@;'; put 'put ''XHUwNWRiXHUwNWUwXHUwNWUxXHUwNWVhICIsbmw6IlUgaGVidCB6aWNoIGFhbmdlbWVsZC4iLHBsOiJab3N0YVx1MDE0MmVcdTAxNWIgemFsb2dvd2FueS4iLGtvOiJcdWI4NWNcdWFkZjhcdWM3NzhcdWQ1ODhcdWMyYjVcdWIyYzhcdWIyZTQuIix6aF9UVzoiXHU2MGE4XHU1ZGYyXHU3Njdi''@;'; put 'put ''XHU1MTY1XHUzMDAyIix0cjoiT3R1cnVtIGFceGU3dFx1MDEzMW5cdTAxMzF6LiIsaXc6Ilx1MDVlMFx1MDVkYlx1MDVlMFx1MDVlMVx1MDVlYSAiLGZyOiJWb3VzIFx4ZWF0ZXMgY29ubmVjdFx4ZTkuIix1azoiXHUwNDEyXHUwNDM4IFx1MDQzMlx1MDQzMlx1MDQ1Nlx1MDQzOVx1MDQ0OFx1''@;'; put 'put ''MDQzYlx1MDQzOCBcdTA0MzIgXHUwNDNlXHUwNDMxXHUwNDNiXHUwNDU2XHUwNDNhXHUwNDNlXHUwNDMyXHUwNDM4XHUwNDM5IFx1MDQzN1x1MDQzMFx1MDQzZlx1MDQzOFx1MDQ0MS4iLHB0X0JSOiJWb2NceGVhIHNlIGNvbmVjdG91LiIsbm86IkR1IGhhciBsb2dnZXQgZGVnIHBceGU1LiIs''@;'; put 'put ''Y3M6IkpzdGUgcFx1MDE1OWlobFx4ZTFcdTAxNjFlbmkuIixmaToiT2xldCBraXJqYXV0dW51dCBzaXNceGU0XHhlNG4uIixydToiXHUwNDEyXHUwNDRiIFx1MDQzMlx1MDQ0Ylx1MDQzZlx1MDQzZVx1MDQzYlx1MDQzZFx1MDQzOFx1MDQzYlx1MDQzOCBcdTA0MzJcdTA0NDVcdTA0M2VcdTA0''@;'; put 'put ''MzQgXHUwNDMyIFx1MDQ0MVx1MDQzOFx1MDQ0MVx1MDQ0Mlx1MDQzNVx1MDQzY1x1MDQ0My4iLGVsOiJcdTAzODhcdTAzYzdcdTAzYjVcdTAzYzRcdTAzYjUgXHUwM2MzXHUwM2M1XHUwM2JkXHUwM2I0XHUwM2I1XHUwM2I4XHUwM2I1XHUwM2FmLiIsaHI6IlByaWphdmlsaSBzdGUgc2UuIixk''@;'; put 'put ''YToiRHUgZXIgbG9nZ2V0IHBceGU1LiIsZGU6IlNpZSBzaW5kIGpldHp0IGFuZ2VtZWxkZXQuIixzaDoiUHJpamF2bGplbmkgc3RlLiIscHQ6IkluaWNpb3Ugc2Vzc1x4ZTNvLiIsaHU6IkJlamVsZW50a2V6ZXR0LiIsc3I6IlByaWphdmxqZW5pIHN0ZS4iLGVuOmcsW3EuZGVmYXVsdFN1Y2Nl''@;'; put 'put ''c3NIZWFkZXJLZXldOmd9LHEuZ2V0RXhwZWN0ZWRMb2dJblN1Y2Nlc3NIZWFkZXI9KCk9PntsZXQgUD1xLmxvZ2luU3VjY2Vzc0hlYWRlcnNbcS5kZWZhdWx0U3VjY2Vzc0hlYWRlcktleV07Y29uc3QgRj0oMCx5LmdldFVzZXJMYW5ndWFnZSkoKTtpZihGKXtsZXQgTz1xLmxvZ2luU3VjY2Vz''@;'; put 'put ''c0hlYWRlcnNbRl07aWYoTylQPU87ZWxzZXtjb25zdCBOPU9iamVjdC5rZXlzKHEubG9naW5TdWNjZXNzSGVhZGVycykuZmluZChMPT5uZXcgUmVnRXhwKEwsImkiKS50ZXN0KEYpKTtOJiYoUD1xLmxvZ2luU3VjY2Vzc0hlYWRlcnNbTl0pfX1yZXR1cm4gUH0scS5pc0xvZ0luU3VjY2Vzc0hl''@;'; put 'put ''YWRlclByZXNlbnQ9KFAsRik9PlA9PT1JLlNlcnZlclR5cGUuU2FzanM/Rj8ubG9nZ2VkSW46bmV3IFJlZ0V4cCgoMCxxLmdldEV4cGVjdGVkTG9nSW5TdWNjZXNzSGVhZGVyKSgpLCJnbSIpLnRlc3QoRil9LDU0MTg6ZnVuY3Rpb24odWUscSxfKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYm''@;'; put 'put ''dGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKHcsUCxGLE8pe3JldHVybiBuZXcoRnx8KEY9UHJvbWlzZSkpKGZ1bmN0aW9uKE4sTCl7ZnVuY3Rpb24gSyhZKXt0cnl7VyhPLm5leHQoWSkpfWNhdGNoKFgpe0woWCl9fWZ1bmN0aW9uIFUoWSl7dHJ5e1coTy50aHJvdyhZKSl9Y2F0Y2goWCl7TChY''@;'; put 'put ''KX19ZnVuY3Rpb24gVyhZKXtZLmRvbmU/TihZLnZhbHVlKTpmdW5jdGlvbiB6KE4pe3JldHVybiBOIGluc3RhbmNlb2YgRj9OOm5ldyBGKGZ1bmN0aW9uKEwpe0woTil9KX0oWS52YWx1ZSkudGhlbihLLFUpfVcoKE89Ty5hcHBseSh3LFB8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5vcGVuV2ViUGFnZT12b2lkIDA7Y29uc3QgeT1fKDEyMTApLGc9e3dpZHRoOjUwMCxoZWlnaHQ6NjAwfTtxLm9wZW5XZWJQYWdlPWZ1bmN0aW9uIEIodyxQPSIiLEY9ZyxPKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAs''@;'; put 'put ''ZnVuY3Rpb24qKCl7Y29uc3R7d2lkdGg6eixoZWlnaHQ6Tn09RixMPXNjcmVlbi53aWR0aC8yLXovMixLPXNjcmVlbi5oZWlnaHQvMi1OLzI7cmV0dXJuIHdpbmRvdy5vcGVuKHcsUCxgdG9vbGJhcj0wLGxvY2F0aW9uPTAsbWVudWJhcj0wLHdpZHRoPSR7en0saGVpZ2h0PSR7Tn0sbGVmdD0k''@;'; put 'put ''e0x9LHRvcD0ke0t9YCl8fCgoeWllbGQoTz8/eS5vcGVuTG9naW5Qcm9tcHQpKCkpP3dpbmRvdy5vcGVuKHcsUCxgdG9vbGJhcj0wLGxvY2F0aW9uPTAsbWVudWJhcj0wLHdpZHRoPSR7en0saGVpZ2h0PSR7Tn0sbGVmdD0ke0x9LHRvcD0ke0t9YCk6bnVsbCl9KX19LDI0OTpmdW5jdGlvbih1''@;'; put 'put ''ZSxxLF8peyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oUCxGLE8seil7cmV0dXJuIG5ldyhPfHwoTz1Qcm9taXNlKSkoZnVuY3Rpb24oTCxLKXtmdW5jdGlvbiBVKFgpe3RyeXtZKHoubmV4dChYKSl9Y2F0Y2goZWUpe0soZWUpfX1mdW5jdGlvbiBX''@;'; put 'put ''KFgpe3RyeXtZKHoudGhyb3coWCkpfWNhdGNoKGVlKXtLKGVlKX19ZnVuY3Rpb24gWShYKXtYLmRvbmU/TChYLnZhbHVlKTpmdW5jdGlvbiBOKEwpe3JldHVybiBMIGluc3RhbmNlb2YgTz9MOm5ldyBPKGZ1bmN0aW9uKEspe0soTCl9KX0oWC52YWx1ZSkudGhlbihVLFcpfVkoKHo9ei5hcHBs''@;'; put 'put ''eShQLEZ8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5yZWZyZXNoVG9rZW5zRm9yU2FzanM9dm9pZCAwO2NvbnN0IHk9Xyg5Nzc4KSxnPV8oOTAxNyksQj1fKDM5MDApO3EucmVmcmVzaFRva2Vuc0ZvclNhc2pzPWZ1''@;'; put 'put ''bmN0aW9uIHcoUCxGKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgTz0iL1NBU2pzQXBpL2F1dGgvcmVmcmVzaCIsej17QXV0aG9yaXphdGlvbjoiQmVhcmVyICIrRn07cmV0dXJuIHlpZWxkIFAucG9zdChPLHZvaWQgMCx2b2lkIDAsdm9pZCAwLHopLnRo''@;'; put 'put ''ZW4oTD0+e2NvbnN0IEs9TC5yZXN1bHQ7cmV0dXJue2FjY2Vzc190b2tlbjpLLmFjY2Vzc1Rva2VuLHJlZnJlc2hfdG9rZW46Sy5yZWZyZXNoVG9rZW59fSkuY2F0Y2goTD0+e3Rocm93KDAseS5wcmVmaXhNZXNzYWdlKShMLCgwLGcuZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXgpKCJyZWZy''@;'; put 'put ''ZXNoaW5nIHRva2VucyIsInJlZnJlc2hUb2tlbnNGb3JTYXNqcyIsQi5TZXJ2ZXJUeXBlLlNhc2pzLE8pKX0pfSl9fSwzNjY6ZnVuY3Rpb24odWUscSxfKXsidXNlIHN0cmljdCI7dmFyIEk9Xyg4NzY0KS5CdWZmZXIseT10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oTixMLEssVSl7''@;'; put 'put ''cmV0dXJuIG5ldyhLfHwoSz1Qcm9taXNlKSkoZnVuY3Rpb24oWSxYKXtmdW5jdGlvbiBlZShpZSl7dHJ5e3JlKFUubmV4dChpZSkpfWNhdGNoKGxlKXtYKGxlKX19ZnVuY3Rpb24gSihpZSl7dHJ5e3JlKFUudGhyb3coaWUpKX1jYXRjaChsZSl7WChsZSl9fWZ1bmN0aW9uIHJlKGllKXtpZS5k''@;'; put 'put ''b25lP1koaWUudmFsdWUpOmZ1bmN0aW9uIFcoWSl7cmV0dXJuIFkgaW5zdGFuY2VvZiBLP1k6bmV3IEsoZnVuY3Rpb24oWCl7WChZKX0pfShpZS52YWx1ZSkudGhlbihlZSxKKX1yZSgoVT1VLmFwcGx5KE4sTHx8W10pKS5uZXh0KCkpfSl9LGc9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8''@;'; put 'put ''fGZ1bmN0aW9uKE4pe3JldHVybiBOJiZOLl9fZXNNb2R1bGU/Tjp7ZGVmYXVsdDpOfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEucmVmcmVzaFRva2Vuc0ZvclZpeWE9dm9pZCAwO2NvbnN0IEI9XygzOTAwKSx3PV8oOTc3OCksUD1nKF8oNjIz''@;'; put 'put ''MCkpLEY9Xyg1OTI4KSxPPV8oOTAxNyk7cS5yZWZyZXNoVG9rZW5zRm9yVml5YT1mdW5jdGlvbiB6KE4sTCxLLFUpe3JldHVybiB5KHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZighKDAsRi5pc05vZGUpKCkpdGhyb3cgbmV3IEVycm9yKCJNZXRob2QgJ3JlZnJlc2hUb2tlbnNG''@;'; put 'put ''b3JWaXlhJyBjYW4gb25seSBiZSB1c2VkIGJ5IE5vZGUuIik7Y29uc3QgVz0iL1NBU0xvZ29uL29hdXRoL3Rva2VuIixYPXtBdXRob3JpemF0aW9uOiJCYXNpYyAiKyh0eXBlb2YgST4idSI/YnRvYShMKyI6IitLKTpJLmZyb20oTCsiOiIrSykudG9TdHJpbmcoImJhc2U2NCIpKX0sZWU9bmV3''@;'; put 'put ''IFAuZGVmYXVsdDtyZXR1cm4gZWUuYXBwZW5kKCJncmFudF90eXBlIiwicmVmcmVzaF90b2tlbiIpLGVlLmFwcGVuZCgicmVmcmVzaF90b2tlbiIsVSkseWllbGQgTi5wb3N0KFcsZWUsdm9pZCAwLCJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iK2VlLl9ib3VuZGFyeSxYKS50aGVu''@;'; put 'put ''KHJlPT5yZS5yZXN1bHQpLmNhdGNoKHJlPT57dGhyb3coMCx3LnByZWZpeE1lc3NhZ2UpKHJlLCgwLE8uZ2V0VG9rZW5SZXF1ZXN0RXJyb3JQcmVmaXgpKCJyZWZyZXNoaW5nIHRva2VucyIsInJlZnJlc2hUb2tlbnNGb3JWaXlhIixCLlNlcnZlclR5cGUuU2FzVml5YSxXLGVlLFgsTCxLKSl9''@;'; put 'put ''KX0pfX0sNDU4MjpmdW5jdGlvbih1ZSxxLF8peyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24odyxQLEYsTyl7cmV0dXJuIG5ldyhGfHwoRj1Qcm9taXNlKSkoZnVuY3Rpb24oTixMKXtmdW5jdGlvbiBLKFkpe3RyeXtXKE8ubmV4dChZKSl9Y2F0Y2go''@;'; put 'put ''WCl7TChYKX19ZnVuY3Rpb24gVShZKXt0cnl7VyhPLnRocm93KFkpKX1jYXRjaChYKXtMKFgpfX1mdW5jdGlvbiBXKFkpe1kuZG9uZT9OKFkudmFsdWUpOmZ1bmN0aW9uIHooTil7cmV0dXJuIE4gaW5zdGFuY2VvZiBGP046bmV3IEYoZnVuY3Rpb24oTCl7TChOKX0pfShZLnZhbHVlKS50aGVu''@;'; put 'put ''KEssVSl9VygoTz1PLmFwcGx5KHcsUHx8W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLnZlcmlmeVNhczlMb2dpbj12b2lkIDA7Y29uc3QgeT1fKDU5MjgpLGc9XygxNTI3KTtxLnZlcmlmeVNhczlMb2dpbj1mdW5jdGlv''@;'; put 'put ''biBCKHcpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgUD0hMSxGPW5ldyBEYXRlLE89MDtkb3tpZih5aWVsZCgwLHkuZGVsYXkpKDFlMyksdy5jbG9zZWQpYnJlYWs7UD13LndpbmRvdy5sb2NhdGlvbi5ocmVmLmluY2x1ZGVzKCJTQVNMb2dvbiIpJiZ3Lndp''@;'; put 'put ''bmRvdy5kb2N1bWVudC5ib2R5LmlubmVyVGV4dC5pbmNsdWRlcygoMCxnLmdldEV4cGVjdGVkTG9nSW5TdWNjZXNzSGVhZGVyKSgpKSxPPSgobmV3IERhdGUpLnZhbHVlT2YoKS1GLnZhbHVlT2YoKSkvMWUzfXdoaWxlKCFQJiZPPDMwMCk7cmV0dXJue2lzTG9nZ2VkSW46UH19KX19LDY1NDc6''@;'; put 'put ''ZnVuY3Rpb24odWUscSxfKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFAsRixPLHope3JldHVybiBuZXcoT3x8KE89UHJvbWlzZSkpKGZ1bmN0aW9uKEwsSyl7ZnVuY3Rpb24gVShYKXt0cnl7WSh6Lm5leHQoWCkpfWNhdGNoKGVlKXtLKGVlKX19''@;'; put 'put ''ZnVuY3Rpb24gVyhYKXt0cnl7WSh6LnRocm93KFgpKX1jYXRjaChlZSl7SyhlZSl9fWZ1bmN0aW9uIFkoWCl7WC5kb25lP0woWC52YWx1ZSk6ZnVuY3Rpb24gTihMKXtyZXR1cm4gTCBpbnN0YW5jZW9mIE8/TDpuZXcgTyhmdW5jdGlvbihLKXtLKEwpfSl9KFgudmFsdWUpLnRoZW4oVSxXKX1Z''@;'; put 'put ''KCh6PXouYXBwbHkoUCxGfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuaXNMb2dnZWRJblNBU1ZJWUE9cS52ZXJpZnlTYXNWaXlhTG9naW49dm9pZCAwO2NvbnN0IHk9Xyg1OTI4KSxnPV8oMTUyNyk7cS52ZXJpZnlT''@;'; put 'put ''YXNWaXlhTG9naW49ZnVuY3Rpb24gQihQKXt2YXIgRixPO3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgej0hMSxOPW5ldyBEYXRlLEw9MDtkb3tpZih5aWVsZCgwLHkuZGVsYXkpKDFlMyksUC5jbG9zZWQpYnJlYWs7ej0oMCxxLmlzTG9nZ2VkSW5TQVNWSVlB''@;'; put 'put ''KSgpLEw9KChuZXcgRGF0ZSkudmFsdWVPZigpLU4udmFsdWVPZigpKS8xZTN9d2hpbGUoIXomJkw8MzAwKTtsZXQgSz0hMTtOPW5ldyBEYXRlO2Rve2lmKHlpZWxkKDAseS5kZWxheSkoMWUzKSxQLmNsb3NlZClicmVhaztLPVAud2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoIlNBU0xv''@;'; put 'put ''Z29uIil8fChudWxsPT09KE89bnVsbD09PShGPVAud2luZG93LmRvY3VtZW50LmJvZHkpfHx2b2lkIDA9PT1GP3ZvaWQgMDpGLmlubmVyVGV4dCl8fHZvaWQgMD09PU8/dm9pZCAwOk8uaW5jbHVkZXMoKDAsZy5nZXRFeHBlY3RlZExvZ0luU3VjY2Vzc0hlYWRlcikoKSkpLEw9KChuZXcgRGF0''@;'; put 'put ''ZSkudmFsdWVPZigpLU4udmFsdWVPZigpKS8xZTN9d2hpbGUoIUsmJkw8MzAwKTtyZXR1cm57aXNMb2dnZWRJbjp6JiZLfX0pfSxxLmlzTG9nZ2VkSW5TQVNWSVlBPSgpPT5kb2N1bWVudC5jb29raWUuaW5jbHVkZXMoIkN1cnJlbnQtVXNlciIpJiZkb2N1bWVudC5jb29raWUuaW5jbHVkZXMo''@;'; put 'put ''InVzZXJJZCIpfSw0MDM3Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLmdlbmVyYXRlRmlsZVVwbG9hZEZvcm09dm9pZCAwO2NvbnN0IEk9XygyNDAyKSx5PV8oNTkyOCk7cS5nZW5lcmF0ZUZpbGVVcGxv''@;'; put 'put ''YWRGb3JtPShCLHcpPT57Zm9yKGNvbnN0IFAgaW4gdyl7aWYoIUFycmF5LmlzQXJyYXkod1tQXSkpY29udGludWU7Y29uc3QgRj1QLE89KDAsSS5jb252ZXJ0VG9DU1YpKHcsUCk7aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RIIj09PU8pdGhyb3cgbmV3IEVycm9yKCJUaGUgbWF4IGxl''@;'; put 'put ''bmd0aCBvZiBhIHN0cmluZyB2YWx1ZSBpbiBTQVNqcyBpcyAzMjc2NSBjaGFyYWN0ZXJzLiIpO2lmKCgwLHkuaXNOb2RlKSgpKUIuYXBwZW5kKEYsTyx7ZmlsZW5hbWU6YCR7Rn0uY3N2YCxjb250ZW50VHlwZToiYXBwbGljYXRpb24vY3N2In0pO2Vsc2V7Y29uc3Qgej1uZXcgQmxvYihbT10s''@;'; put 'put ''e3R5cGU6ImFwcGxpY2F0aW9uL2NzdiJ9KTtCLmFwcGVuZChGLHosYCR7Rn0uY3N2YCl9fXJldHVybiBCfX0sMjE3MDoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5nZW5lcmF0ZVRhYmxlVXBsb2FkRm9y''@;'; put 'put ''bT12b2lkIDA7Y29uc3QgST1fKDI0MDIpLHk9Xyg0Nzk5KTtxLmdlbmVyYXRlVGFibGVVcGxvYWRGb3JtPShCLHcpPT57Y29uc3QgUD1bXSxGPXt9O2xldCBPPTA7Zm9yKGNvbnN0IHogaW4gdyl7TysrLCgwLEkuaXNGb3JtYXRzVGFibGUpKHopfHxQLnB1c2goeik7Y29uc3QgTj0oMCxJLmNv''@;'; put 'put ''bnZlcnRUb0NTVikodyx6KTtpZigiRVJST1I6IExBUkdFIFNUUklORyBMRU5HVEgiPT09Til0aHJvdyBuZXcgRXJyb3IoIlRoZSBtYXggbGVuZ3RoIG9mIGEgc3RyaW5nIHZhbHVlIGluIFNBU2pzIGlzIDMyNzY1IGNoYXJhY3RlcnMuIik7Ti5sZW5ndGg+MTZlMz8oMCx5LnNwbGl0Q2h1bmtz''@;'; put 'put ''KShOKS5tYXAoSz0+e0IuYXBwZW5kKGBzYXNqcyR7T31kYXRhYCxLKX0pOkZbYHNhc2pzJHtPfWRhdGFgXT1OfXJldHVybiBGLnNhc2pzX3RhYmxlcz1QLmpvaW4oIiAiKSx7Zm9ybURhdGE6QixyZXF1ZXN0UGFyYW1zOkZ9fX0sMzYwNzpmdW5jdGlvbih1ZSxxLF8peyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgST10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24odyxQLEYsTyl7dm9pZCAwPT09TyYmKE89Rik7dmFyIHo9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihQLEYpOyghenx8KCJnZXQiaW4gej8hUC5fX2VzTW9kdWxlOnoud3JpdGFi''@;'; put 'put ''bGV8fHouY29uZmlndXJhYmxlKSkmJih6PXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBQW0ZdfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3LE8seil9OmZ1bmN0aW9uKHcsUCxGLE8pe3ZvaWQgMD09PU8mJihPPUYpLHdbT109UFtGXX0pLHk9dGhpcyYmdGhpcy5fX2V4''@;'; put 'put ''cG9ydFN0YXJ8fGZ1bmN0aW9uKHcsUCl7Zm9yKHZhciBGIGluIHcpImRlZmF1bHQiIT09RiYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChQLEYpJiZJKFAsdyxGKX0sZz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24odyl7cmV0dXJuIHcmJncuX19l''@;'; put 'put ''c01vZHVsZT93OntkZWZhdWx0Ond9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7Y29uc3QgQj1nKF8oNTk1NikpO3koXygxMjMwKSxxKSx5KF8oMTM5NSkscSkseShfKDk4MjEpLHEpLHkoXyg4MzA2KSxxKSx5KF8oMzQ2NykscSkseShfKDM2MDIp''@;'; put 'put ''LHEpLHEuZGVmYXVsdD1CLmRlZmF1bHR9LDE1NzA6ZnVuY3Rpb24odWUscSxfKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKFAsRixPLHope3JldHVybiBuZXcoT3x8KE89UHJvbWlzZSkpKGZ1bmN0aW9uKEwsSyl7ZnVuY3Rpb24gVShYKXt0cnl7''@;'; put 'put ''WSh6Lm5leHQoWCkpfWNhdGNoKGVlKXtLKGVlKX19ZnVuY3Rpb24gVyhYKXt0cnl7WSh6LnRocm93KFgpKX1jYXRjaChlZSl7SyhlZSl9fWZ1bmN0aW9uIFkoWCl7WC5kb25lP0woWC52YWx1ZSk6ZnVuY3Rpb24gTihMKXtyZXR1cm4gTCBpbnN0YW5jZW9mIE8/TDpuZXcgTyhmdW5jdGlvbihL''@;'; put 'put ''KXtLKEwpfSl9KFgudmFsdWUpLnRoZW4oVSxXKX1ZKCh6PXouYXBwbHkoUCxGfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuQ29tcHV0ZUpvYkV4ZWN1dG9yPXZvaWQgMDtjb25zdCB5PV8oMzkwMCksZz1fKDEzOTUp''@;'; put 'put ''LEI9Xyg2MTE4KTtxLkNvbXB1dGVKb2JFeGVjdXRvcj1jbGFzcyB3IGV4dGVuZHMgQi5CYXNlSm9iRXhlY3V0b3J7Y29uc3RydWN0b3IoRixPKXtzdXBlcihGLHkuU2VydmVyVHlwZS5TYXNWaXlhKSx0aGlzLnNhc1ZpeWFBcGlDbGllbnQ9T31leGVjdXRlKEYsTyx6LE4sTCl7cmV0dXJuIEko''@;'; put 'put ''dGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEs9Tnx8KCgpPT5Qcm9taXNlLnJlc29sdmUoKSk7cmV0dXJuIG5ldyBQcm9taXNlKChYLGVlKT0+e3ZhciBKO251bGw9PT0oSj10aGlzLnNhc1ZpeWFBcGlDbGllbnQpfHx2b2lkIDA9PT1KfHxKLmV4ZWN1dGVDb21wdXRlSm9i''@;'; put 'put ''KEYsei5jb250ZXh0TmFtZSx6LmRlYnVnLE8sTCwhMCwhMCkudGhlbihyZT0+e3RoaXMuc2FzVml5YUFwaUNsaWVudC5hcHBlbmRSZXF1ZXN0KHJlLEYsei5kZWJ1ZyksWChyZS5yZXN1bHQpfSkuY2F0Y2gocmU9PkkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JlIGluc3RhbmNl''@;'; put 'put ''b2YgZy5Db21wdXRlSm9iRXhlY3V0aW9uRXJyb3ImJih0aGlzLnNhc1ZpeWFBcGlDbGllbnQuYXBwZW5kUmVxdWVzdChyZSxGLHouZGVidWcpLGVlKG5ldyBnLkVycm9yUmVzcG9uc2UocmU/Lm1lc3NhZ2UscmUpKSkscmUgaW5zdGFuY2VvZiBnLkxvZ2luUmVxdWlyZWRFcnJvcj8odGhpcy5h''@;'; put 'put ''cHBlbmRXYWl0aW5nUmVxdWVzdCgoKT0+dGhpcy5leGVjdXRlKEYsTyx6LE4pLnRoZW4oaWU9PntYKGllKX0saWU9PntlZShpZSl9KSkseWllbGQgSygpKTplZShuZXcgZy5FcnJvclJlc3BvbnNlKHJlPy5tZXNzYWdlLHJlKSl9KSl9KX0pfX19LDM0OTE6ZnVuY3Rpb24odWUscSxfKXsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEYsTyx6LE4pe3JldHVybiBuZXcoenx8KHo9UHJvbWlzZSkpKGZ1bmN0aW9uKEssVSl7ZnVuY3Rpb24gVyhlZSl7dHJ5e1goTi5uZXh0KGVlKSl9Y2F0Y2goSil7VShKKX19ZnVuY3Rpb24gWShlZSl7dHJ5e1go''@;'; put 'put ''Ti50aHJvdyhlZSkpfWNhdGNoKEope1UoSil9fWZ1bmN0aW9uIFgoZWUpe2VlLmRvbmU/SyhlZS52YWx1ZSk6ZnVuY3Rpb24gTChLKXtyZXR1cm4gSyBpbnN0YW5jZW9mIHo/SzpuZXcgeihmdW5jdGlvbihVKXtVKEspfSl9KGVlLnZhbHVlKS50aGVuKFcsWSl9WCgoTj1OLmFwcGx5KEYsT3x8''@;'; put 'put ''W10pKS5uZXh0KCkpfSl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLkZpbGVVcGxvYWRlcj12b2lkIDA7Y29uc3QgeT1fKDU5MjgpLGc9XygxMzk1KSxCPV8oMzkwMCksdz1fKDYxMTgpO3EuRmlsZVVwbG9hZGVyPWNsYXNzIFAgZXh0ZW5kcyB3''@;'; put 'put ''LkJhc2VKb2JFeGVjdXRvcntjb25zdHJ1Y3RvcihPLHosTixMKXtzdXBlcihPLHopLHRoaXMuam9ic1BhdGg9Tix0aGlzLnJlcXVlc3RDbGllbnQ9TH1leGVjdXRlKE8seixOLEwpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdHtmaWxlczpLLHBhcmFtczpV''@;'; put 'put ''fT16LFc9THx8KCgpPT5Qcm9taXNlLnJlc29sdmUoKSk7aWYoIUs/Lmxlbmd0aCl0aHJvdyBuZXcgZy5FcnJvclJlc3BvbnNlKCJBdCBsZWFzdCBvbmUgZmlsZSBtdXN0IGJlIHByb3ZpZGVkLiIpO2lmKCFPfHwiIj09PU8pdGhyb3cgbmV3IGcuRXJyb3JSZXNwb25zZSgic2FzSm9iIG11c3Qg''@;'; put 'put ''YmUgcHJvdmlkZWQuIik7bGV0IFk9IiI7Zm9yKGxldCBtZSBpbiBVKVUuaGFzT3duUHJvcGVydHkobWUpJiYoWSs9YCYke21lfT0ke1VbbWVdfWApO2NvbnN0IFg9Ti5hcHBMb2M/Ti5hcHBMb2MucmVwbGFjZSgvXC8/JC8sIi8iKStPLnJlcGxhY2UoL15cLy8sIiIpOk8sZWU9YCR7dGhpcy5q''@;'; put 'put ''b2JzUGF0aH0vPyR7Il9wcm9ncmFtPSIrWH0ke1l9YCxKPW5ldyBGb3JtRGF0YTtmb3IobGV0IG1lIG9mIEspSi5hcHBlbmQoImZpbGUiLG1lLmZpbGUsbWUuZmlsZU5hbWUpO2NvbnN0IHJlPXRoaXMucmVxdWVzdENsaWVudC5nZXRDc3JmVG9rZW4oImZpbGUiKTtyZSYmSi5hcHBlbmQoIl9j''@;'; put 'put ''c3JmIixyZS52YWx1ZSksTi5kZWJ1ZyYmSi5hcHBlbmQoIl9kZWJ1ZyIsIjEzMSIpLE4uc2VydmVyVHlwZT09PUIuU2VydmVyVHlwZS5TYXNWaXlhJiZOLmNvbnRleHROYW1lJiZKLmFwcGVuZCgiX2NvbnRleHRuYW1lIixOLmNvbnRleHROYW1lKTtjb25zdCBpZT17ImNhY2hlLWNvbnRyb2wi''@;'; put 'put ''OiJuby1jYWNoZSIsQWNjZXB0OiIqLyoiLCJDb250ZW50LVR5cGUiOiJ0ZXh0L3BsYWluIn07cmV0dXJuIG5ldyBQcm9taXNlKChtZSxfZSk9Pnt0aGlzLnJlcXVlc3RDbGllbnQucG9zdChlZSxKLHZvaWQgMCwiYXBwbGljYXRpb24vanNvbiIsaWUpLnRoZW4oVGU9PkkodGhpcyx2b2lkIDAs''@;'; put 'put ''dm9pZCAwLGZ1bmN0aW9uKigpe3RoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KFRlLE8sTi5kZWJ1Zyk7bGV0IFNlPVRlLnJlc3VsdDtpZihOLmRlYnVnKXN3aXRjaCh0aGlzLnNlcnZlclR5cGUpe2Nhc2UgQi5TZXJ2ZXJUeXBlLlNhc1ZpeWE6U2U9eWllbGQoMCx5LnBhcnNlU2Fz''@;'; put 'put ''Vml5YURlYnVnUmVzcG9uc2UpKFRlLnJlc3VsdCx0aGlzLnJlcXVlc3RDbGllbnQsTi5zZXJ2ZXJVcmwpO2JyZWFrO2Nhc2UgQi5TZXJ2ZXJUeXBlLlNhczk6U2U9InN0cmluZyI9PXR5cGVvZiBUZS5yZXN1bHQ/KDAseS5wYXJzZVdlYm91dFJlc3BvbnNlKShUZS5yZXN1bHQsZWUpOlRlLnJl''@;'; put 'put ''c3VsdDticmVhaztjYXNlIEIuU2VydmVyVHlwZS5TYXNqczpTZT0ic3RyaW5nIj09dHlwZW9mIFRlLnJlc3VsdD8oMCx5LmdldFZhbGlkSnNvbikoVGUucmVzdWx0KTpUZS5yZXN1bHR9ZWxzZSBTZT0ic3RyaW5nIj09dHlwZW9mIFRlLnJlc3VsdD8oMCx5LmdldFZhbGlkSnNvbikoVGUucmVz''@;'; put 'put ''dWx0KTpUZS5yZXN1bHQ7bWUoU2UpfSkpLmNhdGNoKFRlPT5JKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtUZSBpbnN0YW5jZW9mIGcuSm9iRXhlY3V0aW9uRXJyb3ImJih0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChUZSxPLE4uZGVidWcpLF9lKG5ldyBnLkVycm9y''@;'; put 'put ''UmVzcG9uc2UoVGU/Lm1lc3NhZ2UsVGUpKSksVGUgaW5zdGFuY2VvZiBnLkxvZ2luUmVxdWlyZWRFcnJvcj8odGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdCgoKT0+dGhpcy5leGVjdXRlKE8seixOLEwpLnRoZW4oU2U9PnttZShTZSl9LFNlPT57X2UoU2UpfSkpLHlpZWxkIFcoKSk6X2UobmV3''@;'; put 'put ''IGcuRXJyb3JSZXNwb25zZSgiRmlsZSB1cGxvYWQgcmVxdWVzdCBmYWlsZWQuIixUZSkpfSkpfSl9KX19fSw0NDQ2OmZ1bmN0aW9uKHVlLHEsXyl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihGLE8seixOKXtyZXR1cm4gbmV3KHp8fCh6PVByb21p''@;'; put 'put ''c2UpKShmdW5jdGlvbihLLFUpe2Z1bmN0aW9uIFcoZWUpe3RyeXtYKE4ubmV4dChlZSkpfWNhdGNoKEope1UoSil9fWZ1bmN0aW9uIFkoZWUpe3RyeXtYKE4udGhyb3coZWUpKX1jYXRjaChKKXtVKEopfX1mdW5jdGlvbiBYKGVlKXtlZS5kb25lP0soZWUudmFsdWUpOmZ1bmN0aW9uIEwoSyl7''@;'; put 'put ''cmV0dXJuIEsgaW5zdGFuY2VvZiB6P0s6bmV3IHooZnVuY3Rpb24oVSl7VShLKX0pfShlZS52YWx1ZSkudGhlbihXLFkpfVgoKE49Ti5hcHBseShGLE98fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5KZXNKb2JFeGVj''@;'; put 'put ''dXRvcj12b2lkIDA7Y29uc3QgeT1fKDM5MDApLGc9XygxMzk1KSxCPV8oNjExOCksdz1fKDU5MjgpO3EuSmVzSm9iRXhlY3V0b3I9Y2xhc3MgUCBleHRlbmRzIEIuQmFzZUpvYkV4ZWN1dG9ye2NvbnN0cnVjdG9yKE8seil7c3VwZXIoTyx5LlNlcnZlclR5cGUuU2FzVml5YSksdGhpcy5zYXNW''@;'; put 'put ''aXlhQXBpQ2xpZW50PXp9ZXhlY3V0ZShPLHosTixMLEssVT1bXSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFc9THx8KCgpPT5Qcm9taXNlLnJlc29sdmUoKSk7cmV0dXJuIG5ldyBQcm9taXNlKChYLGVlKT0+e3ZhciBKO251bGw9PT0oSj10aGlzLnNh''@;'; put 'put ''c1ZpeWFBcGlDbGllbnQpfHx2b2lkIDA9PT1KfHxKLmV4ZWN1dGVKb2IoTyxOLmNvbnRleHROYW1lLE4uZGVidWcseixLKS50aGVuKHJlPT57dGhpcy5zYXNWaXlhQXBpQ2xpZW50LmFwcGVuZFJlcXVlc3QocmUsTyxOLmRlYnVnKTtjb25zdCBpZT0oMCx3LmFwcGVuZEV4dHJhUmVzcG9uc2VB''@;'; put 'put ''dHRyaWJ1dGVzKShyZSxVKTtYKGllKX0pLmNhdGNoKHJlPT5JKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZSBpbnN0YW5jZW9mIGcuSm9iRXhlY3V0aW9uRXJyb3ImJih0aGlzLnNhc1ZpeWFBcGlDbGllbnQuYXBwZW5kUmVxdWVzdChyZSxPLE4uZGVidWcpLGVlKG5ldyBnLkVy''@;'; put 'put ''cm9yUmVzcG9uc2UocmU/Lm1lc3NhZ2UscmUpKSkscmUgaW5zdGFuY2VvZiBnLkxvZ2luUmVxdWlyZWRFcnJvcj8odGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdCgoKT0+dGhpcy5leGVjdXRlKE8seixOLEwsSyxVKS50aGVuKGllPT57WChpZSl9LGllPT57ZWUoaWUpfSkpLHlpZWxkIFcoKSk6''@;'; put 'put ''ZWUobmV3IGcuRXJyb3JSZXNwb25zZShyZT8ubWVzc2FnZSxyZSkpfSkpfSl9KX19fSw2MTE4OmZ1bmN0aW9uKHVlLHEsXyl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihCLHcsUCxGKXtyZXR1cm4gbmV3KFB8fChQPVByb21pc2UpKShmdW5jdGlv''@;'; put 'put ''bih6LE4pe2Z1bmN0aW9uIEwoVyl7dHJ5e1UoRi5uZXh0KFcpKX1jYXRjaChZKXtOKFkpfX1mdW5jdGlvbiBLKFcpe3RyeXtVKEYudGhyb3coVykpfWNhdGNoKFkpe04oWSl9fWZ1bmN0aW9uIFUoVyl7Vy5kb25lP3ooVy52YWx1ZSk6ZnVuY3Rpb24gTyh6KXtyZXR1cm4geiBpbnN0YW5jZW9m''@;'; put 'put ''IFA/ejpuZXcgUChmdW5jdGlvbihOKXtOKHopfSl9KFcudmFsdWUpLnRoZW4oTCxLKX1VKChGPUYuYXBwbHkoQix3fHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuQmFzZUpvYkV4ZWN1dG9yPXZvaWQgMDtjb25zdCB5''@;'; put 'put ''PV8oNTkyOCk7cS5CYXNlSm9iRXhlY3V0b3I9Y2xhc3MgZ3tjb25zdHJ1Y3Rvcih3LFApe3RoaXMuc2VydmVyVXJsPXcsdGhpcy5zZXJ2ZXJUeXBlPVAsdGhpcy53YWl0aW5nUmVxdWVzdHM9W10sdGhpcy5yZXNlbmRXYWl0aW5nUmVxdWVzdHM9KCk9PkkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1''@;'; put 'put ''bmN0aW9uKigpe3lpZWxkKDAseS5hc3luY0ZvckVhY2gpKHRoaXMud2FpdGluZ1JlcXVlc3RzLEY9PkkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3lpZWxkIEYoKX0pKSx0aGlzLndhaXRpbmdSZXF1ZXN0cz1bXX0pfWFwcGVuZFdhaXRpbmdSZXF1ZXN0KHcpe3RoaXMud2FpdGlu''@;'; put 'put ''Z1JlcXVlc3RzLnB1c2godyl9Z2V0UmVxdWVzdFBhcmFtcyh3KXtjb25zdCBQPXt9O3JldHVybiB3LmRlYnVnJiYoUC5fb21pdHRleHRsb2c9ImZhbHNlIixQLl9vbWl0c2Vzc2lvbnJlc3VsdHM9ImZhbHNlIixQLl9kZWJ1Zz0xMzEpLFB9fX0sMjY5MzpmdW5jdGlvbih1ZSxxLF8peyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oTixMLEssVSl7cmV0dXJuIG5ldyhLfHwoSz1Qcm9taXNlKSkoZnVuY3Rpb24oWSxYKXtmdW5jdGlvbiBlZShpZSl7dHJ5e3JlKFUubmV4dChpZSkpfWNhdGNoKGxlKXtYKGxlKX19ZnVuY3Rpb24gSihpZSl7dHJ5''@;'; put 'put ''e3JlKFUudGhyb3coaWUpKX1jYXRjaChsZSl7WChsZSl9fWZ1bmN0aW9uIHJlKGllKXtpZS5kb25lP1koaWUudmFsdWUpOmZ1bmN0aW9uIFcoWSl7cmV0dXJuIFkgaW5zdGFuY2VvZiBLP1k6bmV3IEsoZnVuY3Rpb24oWCl7WChZKX0pfShpZS52YWx1ZSkudGhlbihlZSxKKX1yZSgoVT1VLmFw''@;'; put 'put ''cGx5KE4sTHx8W10pKS5uZXh0KCkpfSl9LHk9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKE4pe3JldHVybiBOJiZOLl9fZXNNb2R1bGU/Tjp7ZGVmYXVsdDpOfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuU2FzOUpvYkV4''@;'; put 'put ''ZWN1dG9yPXZvaWQgMDtjb25zdCBnPXkoXyg2MjMwKSksQj1fKDEzOTUpLHc9Xyg1OTI4KSxQPV8oNjExOCksRj1fKDc5NSk7cS5TYXM5Sm9iRXhlY3V0b3I9Y2xhc3MgTyBleHRlbmRzIFAuQmFzZUpvYkV4ZWN1dG9ye2NvbnN0cnVjdG9yKEwsSyxVLFcsWSl7c3VwZXIoTCxLKSx0aGlzLmpv''@;'; put 'put ''YnNQYXRoPVUsdGhpcy5yZXF1ZXN0Q2xpZW50PVcsdGhpcy5zYXM5UmVxdWVzdENsaWVudD1uZXcgRi5TYXM5UmVxdWVzdENsaWVudChMLFkpfWV4ZWN1dGUoTCxLLFUpe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtjb25zdCBXPSgwLHcuaXNSZWxhdGl2ZVBhdGgp''@;'; put 'put ''KEwpJiZVLmFwcExvYz9VLmFwcExvYy5yZXBsYWNlKC9cLz8kLywiLyIpK0wucmVwbGFjZSgvXlwvLywiIik6TDtsZXQgWT1gJHtVLnNlcnZlclVybH0ke3RoaXMuam9ic1BhdGh9PyR7Il9wcm9ncmFtPSIrV31gO1k9YCR7WX0ke1UudXNlcm5hbWUmJlUucGFzc3dvcmQ/IiZfdXNlcm5hbWU9''@;'; put 'put ''IitVLnVzZXJuYW1lKyImX3Bhc3N3b3JkPSIrVS5wYXNzd29yZDoiIn1gLFk9YCR7WX0ke1UuZGVidWc/IiZfZGVidWc9MTMxIjoiIn1gO2xldCBYPU9iamVjdC5hc3NpZ24oe30sdGhpcy5nZXRSZXF1ZXN0UGFyYW1zKFUpKSxlZT1uZXcgZy5kZWZhdWx0O2lmKEspdHJ5e2VlPXooZWUsSyl9''@;'; put 'put ''Y2F0Y2goaWUpe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgQi5FcnJvclJlc3BvbnNlKGllPy5tZXNzYWdlLGllKSl9ZWxzZSBLPSIiO2Zvcihjb25zdCBpZSBpbiBYKVguaGFzT3duUHJvcGVydHkoaWUpJiZlZS5hcHBlbmQoaWUsWFtpZV0pO3lpZWxkIHRoaXMuc2FzOVJlcXVlc3RDbGll''@;'; put 'put ''bnQubG9naW4oVS51c2VybmFtZSxVLnBhc3N3b3JkLHRoaXMuam9ic1BhdGgpO2NvbnN0IEo9SyYmT2JqZWN0LmtleXMoSykubGVuZ3RoPyJtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0iK2VlLl9ib3VuZGFyeToidGV4dC9wbGFpbiI7cmV0dXJuIG5ldyBQcm9taXNlKChpZSxsZSk9''@;'; put 'put ''PnRoaXMuc2FzOVJlcXVlc3RDbGllbnQucG9zdChZLGVlLHZvaWQgMCxKLHtBY2NlcHQ6IiovKiIsQ29ubmVjdGlvbjoiS2VlcC1BbGl2ZSJ9KS50aGVuKG1lPT57dGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QobWUsTCxVLmRlYnVnKSxpZShtZSl9KS5jYXRjaChtZT0+e2xldCBf''@;'; put 'put ''ZT1tZTttZS5yZXN1bHQmJiIiIT09bWUucmVzdWx0P19lPW1lLnJlc3VsdDptZS5tZXNzYWdlJiYoX2U9bWUubWVzc2FnZSksdGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoX2UsTCxVLmRlYnVnKSxsZShuZXcgQi5FcnJvclJlc3BvbnNlKG1lPy5tZXNzYWdlLG1lKSl9KSl9KX1n''@;'; put 'put ''ZXRSZXF1ZXN0UGFyYW1zKEwpe2NvbnN0IEs9e307cmV0dXJuIEwuZGVidWcmJihLLl9kZWJ1Zz0xMzEpLEt9fTtjb25zdCB6PShOLEwpPT57Zm9yKGNvbnN0IEsgaW4gTCl7Y29uc3QgVT1LLFc9KDAsdy5jb252ZXJ0VG9DU1YpKEwsSyk7aWYoIkVSUk9SOiBMQVJHRSBTVFJJTkcgTEVOR1RI''@;'; put 'put ''Ij09PVcpdGhyb3cgbmV3IEVycm9yKCJUaGUgbWF4IGxlbmd0aCBvZiBhIHN0cmluZyB2YWx1ZSBpbiBTQVNqcyBpcyAzMjc2NSBjaGFyYWN0ZXJzLiIpO04uYXBwZW5kKFUsVyx7ZmlsZW5hbWU6YCR7VX0uY3N2YCxjb250ZW50VHlwZToiYXBwbGljYXRpb24vY3N2In0pfXJldHVybiBOfX0s''@;'; put 'put ''MTA2NTpmdW5jdGlvbih1ZSxxLF8peyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oTCxLLFUsVyl7cmV0dXJuIG5ldyhVfHwoVT1Qcm9taXNlKSkoZnVuY3Rpb24oWCxlZSl7ZnVuY3Rpb24gSihsZSl7dHJ5e2llKFcubmV4dChsZSkpfWNhdGNoKG1l''@;'; put 'put ''KXtlZShtZSl9fWZ1bmN0aW9uIHJlKGxlKXt0cnl7aWUoVy50aHJvdyhsZSkpfWNhdGNoKG1lKXtlZShtZSl9fWZ1bmN0aW9uIGllKGxlKXtsZS5kb25lP1gobGUudmFsdWUpOmZ1bmN0aW9uIFkoWCl7cmV0dXJuIFggaW5zdGFuY2VvZiBVP1g6bmV3IFUoZnVuY3Rpb24oZWUpe2VlKFgpfSl9''@;'; put 'put ''KGxlLnZhbHVlKS50aGVuKEoscmUpfWllKChXPVcuYXBwbHkoTCxLfHxbXSkpLm5leHQoKSl9KX0seT10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oTCl7cmV0dXJuIEwmJkwuX19lc01vZHVsZT9MOntkZWZhdWx0Okx9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19l''@;'; put 'put ''c01vZHVsZSIse3ZhbHVlOiEwfSkscS5TYXNqc0pvYkV4ZWN1dG9yPXZvaWQgMDtjb25zdCBnPXkoXyg2MjMwKSksQj1fKDM5MDApLHc9XygxMzk1KSxQPV8oNDAzNyksRj1fKDU5MjgpLE89Xyg1OTI4KSx6PV8oNjExOCk7cS5TYXNqc0pvYkV4ZWN1dG9yPWNsYXNzIE4gZXh0ZW5kcyB6LkJh''@;'; put 'put ''c2VKb2JFeGVjdXRvcntjb25zdHJ1Y3RvcihLLFUsVyl7c3VwZXIoSyxCLlNlcnZlclR5cGUuU2FzanMpLHRoaXMuam9ic1BhdGg9VSx0aGlzLnJlcXVlc3RDbGllbnQ9V31leGVjdXRlKEssVSxXLFksWCxlZT1bXSl7cmV0dXJuIEkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2Nv''@;'; put 'put ''bnN0IEo9WSxyZT0oMCxPLmlzUmVsYXRpdmVQYXRoKShLKSYmVy5hcHBMb2M/Vy5hcHBMb2MucmVwbGFjZSgvXC8/JC8sIi8iKStLLnJlcGxhY2UoL15cLy8sIiIpOks7bGV0IGllPWAke1cuc2VydmVyVXJsfSR7dGhpcy5qb2JzUGF0aH0vPyR7Il9wcm9ncmFtPSIrcmV9YCxsZT1PYmplY3Qu''@;'; put 'put ''YXNzaWduKHt9LHRoaXMuZ2V0UmVxdWVzdFBhcmFtcyhXKSksbWU9KDAsRi5nZXRGb3JtRGF0YSkoKTtpZihVKXRyeXttZT0oMCxQLmdlbmVyYXRlRmlsZVVwbG9hZEZvcm0pKG1lLFUpfWNhdGNoKFNlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IHcuRXJyb3JSZXNwb25zZShTZT8ubWVz''@;'; put 'put ''c2FnZSxTZSkpfWZvcihjb25zdCBTZSBpbiBsZSlsZS5oYXNPd25Qcm9wZXJ0eShTZSkmJm1lLmFwcGVuZChTZSxsZVtTZV0pO2NvbnN0IF9lPW1lIGluc3RhbmNlb2YgZy5kZWZhdWx0JiZ0eXBlb2YgRm9ybURhdGE+InUiP2BtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0ke21lLmdl''@;'; put 'put ''dEhlYWRlcnMoKVsiY29udGVudC10eXBlIl19YDoibXVsdGlwYXJ0L2Zvcm0tZGF0YSI7cmV0dXJuIG5ldyBQcm9taXNlKChTZSx6ZSk9Pnt0aGlzLnJlcXVlc3RDbGllbnQucG9zdChpZSxtZSxYPy5hY2Nlc3NfdG9rZW4sX2UpLnRoZW4oVj0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rp''@;'; put 'put ''b24qKCl7aWYoT2JqZWN0LmVudHJpZXMoVi5yZXN1bHQpLmxlbmd0aDwxKXRocm93IG5ldyB3LkpvYkV4ZWN1dGlvbkVycm9yKDAsYE5vIHdlYm91dCB3YXMgcmV0dXJuZWQgYnkgam9iICR7cmV9LiAgUGxlYXNlIGNoZWNrIHRoZSBTQVMgbG9nIGZvciBtb3JlIGluZm8uYCxWLmxvZyk7Y29u''@;'; put 'put ''c3R7cmVzdWx0OnB9PVY7cCYmInN0cmluZyI9PXR5cGVvZiBwJiZwLnRyaW0oKSYmKFYucmVzdWx0PSgwLE8uZ2V0VmFsaWRKc29uKShwKSksdGhpcy5yZXF1ZXN0Q2xpZW50LmFwcGVuZFJlcXVlc3QoVixLLFcuZGVidWcpO2NvbnN0IGI9KDAsTy5hcHBlbmRFeHRyYVJlc3BvbnNlQXR0cmli''@;'; put 'put ''dXRlcykoVixlZSk7U2UoYil9KSkuY2F0Y2goVj0+SSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7ViBpbnN0YW5jZW9mIHcuSm9iRXhlY3V0aW9uRXJyb3ImJih0aGlzLnJlcXVlc3RDbGllbnQuYXBwZW5kUmVxdWVzdChWLEssVy5kZWJ1ZyksemUobmV3IHcuRXJyb3JSZXNwb25z''@;'; put 'put ''ZShWPy5tZXNzYWdlLFYpKSksViBpbnN0YW5jZW9mIHcuTG9naW5SZXF1aXJlZEVycm9yPyhZfHx6ZShuZXcgdy5FcnJvclJlc3BvbnNlKCJSZXF1ZXN0IGlzIG5vdCBhdXRoZW50aWNhdGVkLiBNYWtlIHN1cmUgLmVudiBmaWxlIGV4aXN0cyB3aXRoIHZhbGlkIGNyZWRlbnRpYWxzLiIsVikp''@;'; put 'put ''LHRoaXMuYXBwZW5kV2FpdGluZ1JlcXVlc3QoKCk9PnRoaXMuZXhlY3V0ZShLLFUsVyxZLFgsZWUpLnRoZW4ocD0+e1NlKHApfSxwPT57emUocCl9KSksSiYmKHlpZWxkIEooKSkpOnplKG5ldyB3LkVycm9yUmVzcG9uc2UoVj8ubWVzc2FnZSxWKSl9KSl9KX0pfX19LDYwODQ6ZnVuY3Rpb24o''@;'; put 'put ''dWUscSxfKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2F3YWl0ZXJ8fGZ1bmN0aW9uKEwsSyxVLFcpe3JldHVybiBuZXcoVXx8KFU9UHJvbWlzZSkpKGZ1bmN0aW9uKFgsZWUpe2Z1bmN0aW9uIEoobGUpe3RyeXtpZShXLm5leHQobGUpKX1jYXRjaChtZSl7ZWUobWUpfX1mdW5j''@;'; put 'put ''dGlvbiByZShsZSl7dHJ5e2llKFcudGhyb3cobGUpKX1jYXRjaChtZSl7ZWUobWUpfX1mdW5jdGlvbiBpZShsZSl7bGUuZG9uZT9YKGxlLnZhbHVlKTpmdW5jdGlvbiBZKFgpe3JldHVybiBYIGluc3RhbmNlb2YgVT9YOm5ldyBVKGZ1bmN0aW9uKGVlKXtlZShYKX0pfShsZS52YWx1ZSkudGhl''@;'; put 'put ''bihKLHJlKX1pZSgoVz1XLmFwcGx5KEwsS3x8W10pKS5uZXh0KCkpfSl9LHk9dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKEwpe3JldHVybiBMJiZMLl9fZXNNb2R1bGU/TDp7ZGVmYXVsdDpMfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1''@;'; put 'put ''ZTohMH0pLHEuV2ViSm9iRXhlY3V0b3I9dm9pZCAwO2NvbnN0IGc9eShfKDYyMzApKSxCPV8oMzkwMCksdz1fKDEzOTUpLFA9Xyg0MDM3KSxGPV8oMjE3MCksTz1fKDU5MjgpLHo9Xyg2MTE4KTtxLldlYkpvYkV4ZWN1dG9yPWNsYXNzIE4gZXh0ZW5kcyB6LkJhc2VKb2JFeGVjdXRvcntjb25z''@;'; put 'put ''dHJ1Y3RvcihLLFUsVyxZLFgpe3N1cGVyKEssVSksdGhpcy5qb2JzUGF0aD1XLHRoaXMucmVxdWVzdENsaWVudD1ZLHRoaXMuc2FzVml5YUFwaUNsaWVudD1YfWV4ZWN1dGUoSyxVLFcsWSxYLGVlPVtdKXtyZXR1cm4gSSh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgSj1Z''@;'; put 'put ''LHJlPSgwLE8uaXNSZWxhdGl2ZVBhdGgpKEspJiZXLmFwcExvYz9XLmFwcExvYy5yZXBsYWNlKC9cLz8kLywiLyIpK0sucmVwbGFjZSgvXlwvLywiIik6SztsZXQgaWU9YCR7Vy5zZXJ2ZXJVcmx9JHt0aGlzLmpvYnNQYXRofS8/JHsiX3Byb2dyYW09IityZX1gO2lmKFcuc2VydmVyVHlwZT09''@;'; put 'put ''PUIuU2VydmVyVHlwZS5TYXNWaXlhKXtsZXQgU2U7dHJ5e1NlPXlpZWxkIHRoaXMuZ2V0Sm9iVXJpKEspfWNhdGNoKHplKXtyZXR1cm4gbmV3IFByb21pc2UoKFYscCk9PkkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3plIGluc3RhbmNlb2Ygdy5Mb2dpblJlcXVpcmVkRXJyb3I/''@;'; put 'put ''KHRoaXMuYXBwZW5kV2FpdGluZ1JlcXVlc3QoKCk9PnRoaXMuZXhlY3V0ZShLLFUsVyxZLFgsZWUpLnRoZW4oYj0+e1YoYil9LGI9PntwKGIpfSkpLEomJih5aWVsZCBKKCkpKTpwKG5ldyB3LkVycm9yUmVzcG9uc2UoemU/Lm1lc3NhZ2UsemUpKX0pKX1pZSs9U2UubGVuZ3RoPjA/IiZfam9i''@;'; put 'put ''PSIrU2U6IiIsU2UubGVuZ3RoPjAmJihpZSs9IiZfam9iPSIrU2UsaWU9aWUucmVwbGFjZSgiX3Byb2dyYW09IiwiX19wcm9ncmFtPSIpKSxpZSs9Vy5jb250ZXh0TmFtZSYmIS9ccy8udGVzdChXLmNvbnRleHROYW1lKT9gJl9jb250ZXh0bmFtZT0ke1cuY29udGV4dE5hbWV9YDoiIn1sZXQg''@;'; put 'put ''bGU9T2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldFJlcXVlc3RQYXJhbXMoVykpLG1lPSgwLE8uZ2V0Rm9ybURhdGEpKCk7aWYoVSl7Y29uc3QgU2U9SlNPTi5zdHJpbmdpZnkoVSk7aWYoVy5zZXJ2ZXJUeXBlPT09Qi5TZXJ2ZXJUeXBlLlNhczl8fFNlLmxlbmd0aD41ZTV8fFNlLmluY2x1ZGVz''@;'; put 'put ''KCI7IikpdHJ5e21lPSgwLFAuZ2VuZXJhdGVGaWxlVXBsb2FkRm9ybSkobWUsVSl9Y2F0Y2goemUpe3JldHVybiBQcm9taXNlLnJlamVjdChuZXcgdy5FcnJvclJlc3BvbnNlKHplPy5tZXNzYWdlLHplKSl9ZWxzZSB0cnl7Y29uc3R7Zm9ybURhdGE6emUscmVxdWVzdFBhcmFtczpWfT0oMCxG''@;'; put 'put ''LmdlbmVyYXRlVGFibGVVcGxvYWRGb3JtKShtZSxVKTttZT16ZSxsZT1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbGUpLFYpfWNhdGNoKHplKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IHcuRXJyb3JSZXNwb25zZSh6ZT8ubWVzc2FnZSx6ZSkpfX1mb3IoY29uc3QgU2UgaW4g''@;'; put 'put ''bGUpbGUuaGFzT3duUHJvcGVydHkoU2UpJiZtZS5hcHBlbmQoU2UsbGVbU2VdKTtjb25zdCBfZT1tZSBpbnN0YW5jZW9mIGcuZGVmYXVsdCYmdHlwZW9mIEZvcm1EYXRhPiJ1Ij9gbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JHttZS5nZXRIZWFkZXJzKClbImNvbnRlbnQtdHlwZSJd''@;'; put 'put ''fWA6Im11bHRpcGFydC9mb3JtLWRhdGEiO3JldHVybiBuZXcgUHJvbWlzZSgoU2UsemUpPT57dGhpcy5yZXF1ZXN0Q2xpZW50LnBvc3QoaWUsbWUsWD8uYWNjZXNzX3Rva2VuLF9lKS50aGVuKFY9PkkodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3RoaXMucmVxdWVzdENsaWVudC5h''@;'; put 'put ''cHBlbmRSZXF1ZXN0KFYsSyxXLmRlYnVnKTtsZXQgcD1WLnJlc3VsdDtpZihXLmRlYnVnKXN3aXRjaCh0aGlzLnNlcnZlclR5cGUpe2Nhc2UgQi5TZXJ2ZXJUeXBlLlNhc1ZpeWE6cD15aWVsZCgwLE8ucGFyc2VTYXNWaXlhRGVidWdSZXNwb25zZSkoVi5yZXN1bHQsdGhpcy5yZXF1ZXN0Q2xp''@;'; put 'put ''ZW50LHRoaXMuc2VydmVyVXJsKTticmVhaztjYXNlIEIuU2VydmVyVHlwZS5TYXM5OnA9InN0cmluZyI9PXR5cGVvZiBWLnJlc3VsdD8oMCxPLnBhcnNlV2Vib3V0UmVzcG9uc2UpKFYucmVzdWx0LGllKTpWLnJlc3VsdH1jb25zdCBiPSgwLE8uYXBwZW5kRXh0cmFSZXNwb25zZUF0dHJpYnV0''@;'; put 'put ''ZXMpKHtyZXN1bHQ6cCxsb2c6Vi5sb2d9LGVlKTtTZShiKX0pKS5jYXRjaChWPT5JKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtWIGluc3RhbmNlb2Ygdy5Kb2JFeGVjdXRpb25FcnJvciYmKHRoaXMucmVxdWVzdENsaWVudC5hcHBlbmRSZXF1ZXN0KFYsSyxXLmRlYnVnKSx6ZShu''@;'; put 'put ''ZXcgdy5FcnJvclJlc3BvbnNlKFY/Lm1lc3NhZ2UsVikpKSxWIGluc3RhbmNlb2Ygdy5Mb2dpblJlcXVpcmVkRXJyb3I/KFl8fHplKG5ldyB3LkVycm9yUmVzcG9uc2UoIlJlcXVlc3QgaXMgbm90IGF1dGhlbnRpY2F0ZWQuIE1ha2Ugc3VyZSAuZW52IGZpbGUgZXhpc3RzIHdpdGggdmFsaWQg''@;'; put 'put ''Y3JlZGVudGlhbHMuIixWKSksdGhpcy5hcHBlbmRXYWl0aW5nUmVxdWVzdCgoKT0+dGhpcy5leGVjdXRlKEssVSxXLFksWCxlZSkudGhlbihwPT57U2UocCl9LHA9Pnt6ZShwKX0pKSxKJiYoeWllbGQgSigpKSk6emUobmV3IHcuRXJyb3JSZXNwb25zZShWPy5tZXNzYWdlLFYpKX0pKX0pfSl9''@;'; put 'put ''Z2V0Sm9iVXJpKEspe3JldHVybiBJKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZighdGhpcy5zYXNWaXlhQXBpQ2xpZW50KXJldHVybiIiO2xldCBXLFksVT0iIjtpZigoMCxPLmlzUmVsYXRpdmVQYXRoKShLKSl7Y29uc3QgZWU9Sy5zcGxpdCgiLyIpO1c9ZWUubGVuZ3RoPjE/''@;'; put 'put ''ZWVbMF06IiIsWT1lZS5sZW5ndGg+MT9lZVsxXToiIn1lbHNle2NvbnN0IGVlPUsuc3BsaXQoIi8iKTtZPWVlLnBvcCgpfHwiIixXPWVlLmpvaW4oIi8iKX1pZighWSl0aHJvdyBuZXcgRXJyb3IoIkpvYiBuYW1lIGlzIGVtcHR5LCBudWxsIG9yIHVuZGVmaW5lZC4iKTtjb25zdCBYPXlpZWxk''@;'; put 'put ''IHRoaXMuc2FzVml5YUFwaUNsaWVudC5nZXRKb2JzSW5Gb2xkZXIoVyk7aWYoWCl7Y29uc3QgZWU9WC5maW5kKEo9PkoubmFtZT09PVkmJiJqb2JEZWZpbml0aW9uIj09PUouY29udGVudFR5cGUpO2VlJiYoVT1lZS51cmkpfXJldHVybiBVfSl9fX0sODIxNzpmdW5jdGlvbih1ZSxxLF8peyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZyxCLHcsUCl7dm9pZCAwPT09UCYmKFA9dyk7dmFyIEY9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihCLHcpOyghRnx8KCJnZXQiaW4gRj8hQi5fX2VzTW9k''@;'; put 'put ''dWxlOkYud3JpdGFibGV8fEYuY29uZmlndXJhYmxlKSkmJihGPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBCW3ddfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnLFAsRil9OmZ1bmN0aW9uKGcsQix3LFApe3ZvaWQgMD09PVAmJihQPXcpLGdbUF09Qlt3XX0pLHk9dGhp''@;'; put 'put ''cyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGcsQil7Zm9yKHZhciB3IGluIGcpImRlZmF1bHQiIT09dyYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChCLHcpJiZJKEIsZyx3KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZToh''@;'; put 'put ''MH0pLHkoXygxNTcwKSxxKSx5KF8oMzQ5MSkscSkseShfKDQ0NDYpLHEpLHkoXyg2MTE4KSxxKSx5KF8oMjY5MykscSkseShfKDYwODQpLHEpLHkoXygxMDY1KSxxKX0sNDU4ODpmdW5jdGlvbih1ZSxxLF8peyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDQxNTUpLHk9Xyg1MTA4KSxnPXRoaXMmJnRo''@;'; put 'put ''aXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihyZSxpZSxsZSxtZSl7dm9pZCAwPT09bWUmJihtZT1sZSk7dmFyIF9lPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaWUsbGUpOyghX2V8fCgiZ2V0ImluIF9lPyFpZS5fX2VzTW9kdWxlOl9lLndyaXRh''@;'; put 'put ''YmxlfHxfZS5jb25maWd1cmFibGUpKSYmKF9lPXtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpZVtsZV19fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlLG1lLF9lKX06ZnVuY3Rpb24ocmUsaWUsbGUsbWUpe3ZvaWQgMD09PW1lJiYobWU9bGUpLHJlW21lXT1pZVtsZV19''@;'; put 'put ''KSxCPXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihyZSxpZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHJlLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTppZX0pfTpmdW5jdGlvbihyZSxpZSl7cmUuZGVmYXVsdD1pZX0pLHc9dGhp''@;'; put 'put ''cyYmdGhpcy5fX2ltcG9ydFN0YXJ8fGZ1bmN0aW9uKHJlKXtpZihyZSYmcmUuX19lc01vZHVsZSlyZXR1cm4gcmU7dmFyIGllPXt9O2lmKG51bGwhPXJlKWZvcih2YXIgbGUgaW4gcmUpImRlZmF1bHQiIT09bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZSxsZSkm''@;'; put 'put ''JmcoaWUscmUsbGUpO3JldHVybiBCKGllLHJlKSxpZX0sUD10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24ocmUsaWUsbGUsbWUpe3JldHVybiBuZXcobGV8fChsZT1Qcm9taXNlKSkoZnVuY3Rpb24oVGUsU2Upe2Z1bmN0aW9uIHplKGIpe3RyeXtwKG1lLm5leHQoYikpfWNhdGNoKHgp''@;'; put 'put ''e1NlKHgpfX1mdW5jdGlvbiBWKGIpe3RyeXtwKG1lLnRocm93KGIpKX1jYXRjaCh4KXtTZSh4KX19ZnVuY3Rpb24gcChiKXtiLmRvbmU/VGUoYi52YWx1ZSk6ZnVuY3Rpb24gX2UoVGUpe3JldHVybiBUZSBpbnN0YW5jZW9mIGxlP1RlOm5ldyBsZShmdW5jdGlvbihTZSl7U2UoVGUpfSl9KGIu''@;'; put 'put ''dmFsdWUpLnRoZW4oemUsVil9cCgobWU9bWUuYXBwbHkocmUsaWV8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS50aHJvd0lmRXJyb3I9cS5SZXF1ZXN0Q2xpZW50PXZvaWQgMDtjb25zdCBGPXcoXyg4MzczKSksTz1f''@;'; put 'put ''KDE1MjcpLHo9XygxMzk1KSxOPV8oMjgxMyksTD1fKDk3NzgpLEs9Xyg5NTI2KSxVPV8oNTkyOCksVz1fKDEwMDUpLFk9Xyg5NTM5KTtxLlJlcXVlc3RDbGllbnQ9Y2xhc3MgWHtjb25zdHJ1Y3RvcihpZSxsZSxtZSxfZSl7dGhpcy5iYXNlVXJsPWllLHRoaXMucmVxdWVzdHM9W10sdGhpcy5y''@;'; put 'put ''ZXF1ZXN0c0xpbWl0PTEwLHRoaXMudmVyYm9zZU1vZGU9ITEsdGhpcy5jc3JmVG9rZW49e2hlYWRlck5hbWU6IiIsdmFsdWU6IiJ9LHRoaXMuZ2V0UmVxdWVzdHM9KCk9PnRoaXMucmVxdWVzdHMsdGhpcy5jbGVhclJlcXVlc3RzPSgpPT57dGhpcy5yZXF1ZXN0cz1bXX0sdGhpcy5hdXRob3Jp''@;'; put 'put ''emU9VGU9PlAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2xldCBTZT1udWxsO2NvbnN0IHplPXt9LFY9VGUuc3BsaXQoIjxib2R5PiIpWzFdLnNwbGl0KCI8L2JvZHk+IilbMF0scD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTtwLmlubmVySFRNTD1WO2NvbnN0IGI9cC5x''@;'; put 'put ''dWVyeVNlbGVjdG9yKCIjYXBwbGljYXRpb25fYXV0aG9yaXphdGlvbiIpO1NlPWI/dGhpcy5iYXNlVXJsK2IuZ2V0QXR0cmlidXRlKCJhY3Rpb24iKTpudWxsO2NvbnN0IHg9Yj8ucXVlcnlTZWxlY3RvckFsbCgiaW5wdXQiKTtmb3IoY29uc3QgSCBvZiB4KSJ1c2VyX29hdXRoX2FwcHJvdmFs''@;'; put 'put ''Ij09PUgubmFtZSYmKEgudmFsdWU9InRydWUiKSx6ZVtILm5hbWVdPUgudmFsdWU7Y29uc3QgQz1PYmplY3Qua2V5cyh6ZSkuZmluZChIPT5IPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCJjc3JmIikpO0MmJih0aGlzLmNzcmZUb2tlbi52YWx1ZT16ZVtDXSx0aGlzLmNzcmZUb2tlbi5oZWFk''@;'; put 'put ''ZXJOYW1lPXRoaXMuY3NyZlRva2VuLmhlYWRlck5hbWV8fCJ4LWNzcmYtdG9rZW4iKTtjb25zdCBUPW5ldyBGb3JtRGF0YTtmb3IoY29uc3QgSCBpbiB6ZSl6ZS5oYXNPd25Qcm9wZXJ0eShIKSYmVC5hcHBlbmQoSCx6ZVtIXSk7aWYoIVNlKXRocm93IG5ldyBFcnJvcigiQXV0aCBGb3JtIFVS''@;'; put 'put ''TCBpcyBudWxsIG9yIHVuZGVmaW5lZC4iKTtyZXR1cm4geWllbGQgdGhpcy5odHRwQ2xpZW50LnBvc3QoU2UsVCx7cmVzcG9uc2VUeXBlOiJ0ZXh0IixoZWFkZXJzOntBY2NlcHQ6IiovKiIsIkNvbnRlbnQtVHlwZSI6InRleHQvcGxhaW4ifX0pLnRoZW4oSD0+SC5kYXRhKS5jYXRjaChIPT57''@;'; put 'put ''KEkubG9nZ2VyfHx5KS5lcnJvcihIKX0pfSksdGhpcy5wcmV0dGlmeVN0cmluZz1UZT0+KDAsWS5pbnNwZWN0KShUZSx7Y29sb3JzOiJibGVhY2hlZCIhPT10aGlzLnZlcmJvc2VNb2RlfSksdGhpcy5wYXJzZUludGVyY2VwdGVkQm9keT1UZT0+e2lmKCFUZSlyZXR1cm4iIjtsZXQgU2U7aWYo''@;'; put 'put ''InN0cmluZyI9PXR5cGVvZiBUZSl0cnl7U2U9SlNPTi5wYXJzZShUZSl9Y2F0Y2h7U2U9VGV9ZWxzZSBTZT1UZTtjb25zdCB6ZT10aGlzLnByZXR0aWZ5U3RyaW5nKFNlKS5zcGxpdCgiXG4iKTtyZXR1cm4gemUubGVuZ3RoPjUxJiYoemUuc3BsaWNlKDUwKSx6ZS5wdXNoKCIuLi4iKSksemUu''@;'; put 'put ''am9pbigiXG4iKX0sdGhpcy5oYW5kbGVBeGlvc1Jlc3BvbnNlPVRlPT57dmFyIFNlLHplLFYscDtjb25zdHtzdGF0dXM6Yixjb25maWc6eCxyZXF1ZXN0OkMsZGF0YTpUfT1UZSxIPW51bGwhPT0oU2U9Qz8uX2hlYWRlcikmJnZvaWQgMCE9PVNlP1NlOiJOb3QgcHJvdmlkZWRcbiIsaj1udWxs''@;'; put 'put ''IT09KFY9bnVsbD09PSh6ZT1DPy5yZXMpfHx2b2lkIDA9PT16ZT92b2lkIDA6emUucmF3SGVhZGVycykmJnZvaWQgMCE9PVY/VjpbIk5vdCBwcm92aWRlZCJdLEU9dGhpcy5mb3JtYXRIZWFkZXJzKGopLG09dGhpcy5wYXJzZUludGVyY2VwdGVkQm9keShUKTtyZXR1cm4gbnVsbD09PShwPUku''@;'; put 'put ''bG9nZ2VyKXx8dm9pZCAwPT09cHx8cC5pbmZvKGBIVFRQIFJlcXVlc3QgKGZpcnN0IDUwIGxpbmVzKTpcbiR7SH0ke3RoaXMucGFyc2VJbnRlcmNlcHRlZEJvZHkoeC5kYXRhKX1cblxuSFRUUCBSZXNwb25zZSBDb2RlOiAke3RoaXMucHJldHRpZnlTdHJpbmcoYil9XG5cbkhUVFAgUmVzcG9u''@;'; put 'put ''c2UgKGZpcnN0IDUwIGxpbmVzKTpcbiR7RX0ke20/YFxuXG4ke219YDoiIn1cbmApLFRlfSx0aGlzLmhhbmRsZUF4aW9zRXJyb3I9VGU9Pnt2YXIgU2UsemUsVixwLGIseDtjb25zdCBDPSJOb3QgcHJvdmlkZWQiLHtyZXNwb25zZTpULHJlcXVlc3Q6SCxjb25maWc6an09VGU7bGV0IEU9e19o''@;'; put 'put ''ZWFkZXI6YCR7Q31cbmAscmVzOntyYXdIZWFkZXJzOltDXX19O0gmJihFPXtfaGVhZGVyOm51bGwhPT0oVj1udWxsIT09KFNlPUguX2hlYWRlcikmJnZvaWQgMCE9PVNlP1NlOm51bGw9PT0oemU9SC5fY3VycmVudFJlcXVlc3QpfHx2b2lkIDA9PT16ZT92b2lkIDA6emUuX2hlYWRlcikmJnZv''@;'; put 'put ''aWQgMCE9PVY/VjpDLHJlczp7cmF3SGVhZGVyczpudWxsIT09KGI9bnVsbD09PShwPUgucmVzKXx8dm9pZCAwPT09cD92b2lkIDA6cC5yYXdIZWFkZXJzKSYmdm9pZCAwIT09Yj9iOltDXX19KTtsZXQgbT1UfHx7c3RhdHVzOkMscmVxdWVzdDpFLGNvbmZpZzpqfHx7ZGF0YTpDLGhlYWRlcnM6''@;'; put 'put ''e319LGRhdGE6Q307Y29uc3R7c3RhdHVzOkEscmVxdWVzdDpvZSxkYXRhOnRlfT1tLHtfaGVhZGVyOnNlLHJlczp3ZX09b2UsVWU9dGhpcy5mb3JtYXRIZWFkZXJzKHdlLnJhd0hlYWRlcnMpLEplPXRoaXMucGFyc2VJbnRlcmNlcHRlZEJvZHkodGUpO3JldHVybiBudWxsPT09KHg9SS5sb2dn''@;'; put 'put ''ZXIpfHx2b2lkIDA9PT14fHx4LmluZm8oYEhUVFAgUmVxdWVzdCAoZmlyc3QgNTAgbGluZXMpOlxuJHtzZX0ke3RoaXMucGFyc2VJbnRlcmNlcHRlZEJvZHkoaj8uZGF0YSl9XG5cbkhUVFAgUmVzcG9uc2UgQ29kZTogJHt0aGlzLnByZXR0aWZ5U3RyaW5nKEEpfVxuXG5IVFRQIFJlc3BvbnNl''@;'; put 'put ''IChmaXJzdCA1MCBsaW5lcyk6XG4ke1VlfSR7SmU/YFxuXG4ke0plfWA6IiJ9XG5gKSxUZX0sdGhpcy5mb3JtYXRIZWFkZXJzPVRlPT5UZS5yZWR1Y2UoKFNlLHplLFYpPT5TZSsoViUyPT0wP2AkezA9PT1WPyIiOiJcbiJ9JHt6ZX1gOmA6ICR7emV9YCksIiIpLHRoaXMuc2V0VmVyYm9zZU1v''@;'; put 'put ''ZGU9VGU9Pnt0aGlzLnZlcmJvc2VNb2RlPVRlLHRoaXMudmVyYm9zZU1vZGU/dGhpcy5lbmFibGVWZXJib3NlTW9kZSgpOnRoaXMuZGlzYWJsZVZlcmJvc2VNb2RlKCl9LHRoaXMuZW5hYmxlVmVyYm9zZU1vZGU9KFRlPXRoaXMuaGFuZGxlQXhpb3NSZXNwb25zZSxTZT10aGlzLmhhbmRsZUF4''@;'; put 'put ''aW9zRXJyb3IpPT57dGhpcy5odHRwSW50ZXJjZXB0b3I9dGhpcy5odHRwQ2xpZW50LmludGVyY2VwdG9ycy5yZXNwb25zZS51c2UoVGUsU2UpfSx0aGlzLmRpc2FibGVWZXJib3NlTW9kZT0oKT0+e3RoaXMuaHR0cEludGVyY2VwdG9yJiZ0aGlzLmh0dHBDbGllbnQuaW50ZXJjZXB0b3JzLnJl''@;'; put 'put ''c3BvbnNlLmVqZWN0KHRoaXMuaHR0cEludGVyY2VwdG9yKX0sdGhpcy5nZXRIZWFkZXJzPShUZSxTZSk9Pntjb25zdCB6ZT17fTtyZXR1cm4iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiE9PVNlJiYoemVbIkNvbnRlbnQtVHlwZSJdPVNlKSx6ZS5BY2NlcHQ9ImFwcGxpY2F0''@;'; put 'put ''aW9uL2pzb24iPT09U2U/ImFwcGxpY2F0aW9uL2pzb24iOiIqLyoiLFRlJiYoemUuQXV0aG9yaXphdGlvbj1gQmVhcmVyICR7VGV9YCksdGhpcy5jc3JmVG9rZW4uaGVhZGVyTmFtZSYmdGhpcy5jc3JmVG9rZW4udmFsdWUmJih6ZVt0aGlzLmNzcmZUb2tlbi5oZWFkZXJOYW1lXT10aGlzLmNz''@;'; put 'put ''cmZUb2tlbi52YWx1ZSksemV9LHRoaXMucGFyc2VBbmRTZXRGaWxlVXBsb2FkQ3NyZlRva2VuPVRlPT57Y29uc3QgU2U9dGhpcy5wYXJzZUNzcmZUb2tlbihUZSk7U2UmJih0aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW49U2UpfSx0aGlzLnBhcnNlQW5kU2V0Q3NyZlRva2VuPVRlPT57Y29uc3Qg''@;'; put 'put ''U2U9dGhpcy5wYXJzZUNzcmZUb2tlbihUZSk7U2UmJih0aGlzLmNzcmZUb2tlbj1TZSl9LHRoaXMucGFyc2VDc3JmVG9rZW49VGU9Pnt2YXIgU2U7Y29uc3QgemU9bnVsbD09PShTZT1UZS5oZWFkZXJzWyJ4LWNzcmYtaGVhZGVyIl0pfHx2b2lkIDA9PT1TZT92b2lkIDA6U2UudG9Mb3dlckNh''@;'; put 'put ''c2UoKTtpZih6ZSlyZXR1cm57aGVhZGVyTmFtZTp6ZSx2YWx1ZTpUZS5oZWFkZXJzW3plXXx8IiJ9fSx0aGlzLmhhbmRsZUVycm9yPShUZSxTZSx6ZT0hMSk9PlAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFY9VGUucmVzcG9uc2U7aWYoVGUgaW5zdGFuY2VvZiB6LkF1''@;'; put 'put ''dGhvcml6ZUVycm9yKXtjb25zdCBwPXlpZWxkIHRoaXMuaHR0cENsaWVudC5nZXQoVGUuY29uZmlybVVybCx7cmVzcG9uc2VUeXBlOiJ0ZXh0IixoZWFkZXJzOnsiQ29udGVudC1UeXBlIjoidGV4dC9wbGFpbiIsQWNjZXB0OiIqLyoifX0pLmNhdGNoKGI9Pnt0aHJvdygwLEwucHJlZml4TWVz''@;'; put 'put ''c2FnZSkoYiwiRXJyb3Igd2hpbGUgZ2V0dGluZyBlcnJvciBjb25maXJtVXJsLiAiKX0pO3JldHVybigwLE8uaXNBdXRob3JpemVGb3JtUmVxdWlyZWQpKHA/LmRhdGEpJiYoeWllbGQgdGhpcy5hdXRob3JpemUocC5kYXRhKS5jYXRjaChiPT57dGhyb3coMCxMLnByZWZpeE1lc3NhZ2UpKGIs''@;'; put 'put ''IkVycm9yIHdoaWxlIGF1dGhvcml6aW5nIHJlcXVlc3QuICIpfSkpLHlpZWxkIFNlKCkuY2F0Y2goYj0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKShiLCJFcnJvciB3aGlsZSBleGVjdXRpbmcgY2FsbGJhY2sgaW4gaGFuZGxlRXJyb3IuICIpfSl9aWYoVGUgaW5zdGFuY2VvZiB6LkxvZ2lu''@;'; put 'put ''UmVxdWlyZWRFcnJvcil0aHJvdyB0aGlzLmNsZWFyQ3NyZlRva2VucygpLFRlO2lmKFRlIGluc3RhbmNlb2YgVy5JbnZhbGlkU0FTanNDc3JmRXJyb3IpcmV0dXJuIHlpZWxkIHRoaXMuaHR0cENsaWVudC5nZXQoIi8iLHt3aXRoWFNSRlRva2VuOiEwfSkudGhlbihwPT57dmFyIGI7Y29uc3Qg''@;'; put 'put ''eD1udWxsPT09KGI9LzxzY3JpcHQ+ZG9jdW1lbnQuY29va2llID0gJyhYU1JGLVRPS0VOPS4qOyBNYXgtQWdlPTg2NDAwOyBTYW1lU2l0ZT1TdHJpY3Q7IFBhdGg9XC87KSc8XC9zY3JpcHQ+Ly5leGVjKHAuZGF0YSkpfHx2b2lkIDA9PT1iP3ZvaWQgMDpiWzFdO3gmJihkb2N1bWVudC5jb29r''@;'; put 'put ''aWU9eCl9KS5jYXRjaChwPT57dGhyb3coMCxMLnByZWZpeE1lc3NhZ2UpKHAsIkVycm9yIHdoaWxlIHJlLWZldGNoaW5nIENTUkYgdG9rZW4uIil9KSx5aWVsZCBTZSgpLmNhdGNoKHA9Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSkocCwiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGNhbGxiYWNr''@;'; put 'put ''IGluIGhhbmRsZUVycm9yLiAiKX0pO2lmKDQwMz09PVY/LnN0YXR1c3x8NDQ5PT09Vj8uc3RhdHVzKXtpZih0aGlzLnBhcnNlQW5kU2V0Q3NyZlRva2VuKFYpLHRoaXMuY3NyZlRva2VuLmhlYWRlck5hbWUmJnRoaXMuY3NyZlRva2VuLnZhbHVlKXJldHVybiB5aWVsZCBTZSgpLmNhdGNoKHA9''@;'; put 'put ''Pnt0aHJvdygwLEwucHJlZml4TWVzc2FnZSkocCwiRXJyb3Igd2hpbGUgZXhlY3V0aW5nIGNhbGxiYWNrIGluIGhhbmRsZUVycm9yLiAiKX0pO3Rocm93IFRlfWlmKDQwND09PVY/LnN0YXR1cyl0aHJvdyBuZXcgei5Ob3RGb3VuZEVycm9yKFYuY29uZmlnLnVybCk7aWYoNTAyIT09Vj8uc3Rh''@;'; put 'put ''dHVzKXRocm93IFRlLmlzQXhpb3NFcnJvciYmIlVOQUJMRV9UT19WRVJJRllfTEVBRl9TSUdOQVRVUkUiPT09VGUuY29kZT9uZXcgei5DZXJ0aWZpY2F0ZUVycm9yKFRlLm1lc3NhZ2UpOlRlLm1lc3NhZ2U/VGU6KDAsTC5wcmVmaXhNZXNzYWdlKShUZSwiRXJyb3Igd2hpbGUgaGFuZGxpbmcg''@;'; put 'put ''ZXJyb3IuICIpO2lmKHplKXRocm93IG5ldyB6LkludGVybmFsU2VydmVyRXJyb3J9KSx0aGlzLmNyZWF0ZUh0dHBDbGllbnQoaWUsbGUpLG1lJiYodGhpcy5yZXF1ZXN0c0xpbWl0PW1lKSxfZSYmKHRoaXMuc2V0VmVyYm9zZU1vZGUoX2UpLHRoaXMuZW5hYmxlVmVyYm9zZU1vZGUoKSl9c2V0''@;'; put 'put ''Q29uZmlnKGllLGxlKXt0aGlzLmNyZWF0ZUh0dHBDbGllbnQoaWUsbGUpfXNhdmVMb2NhbFN0b3JhZ2VUb2tlbihpZSxsZSl7bG9jYWxTdG9yYWdlLnNldEl0ZW0oImFjY2Vzc1Rva2VuIixpZSksbG9jYWxTdG9yYWdlLnNldEl0ZW0oInJlZnJlc2hUb2tlbiIsbGUpfWdldENzcmZUb2tlbihp''@;'; put 'put ''ZT0iZ2VuZXJhbCIpe3JldHVybiJmaWxlIj09PWllP3RoaXMuZmlsZVVwbG9hZENzcmZUb2tlbjp0aGlzLmNzcmZUb2tlbn1jbGVhckNzcmZUb2tlbnMoKXt0aGlzLmNzcmZUb2tlbj17aGVhZGVyTmFtZToiIix2YWx1ZToiIn0sdGhpcy5maWxlVXBsb2FkQ3NyZlRva2VuPXtoZWFkZXJOYW1l''@;'; put 'put ''OiIiLHZhbHVlOiIifX1jbGVhckxvY2FsU3RvcmFnZVRva2Vucygpe2xvY2FsU3RvcmFnZS5zZXRJdGVtKCJhY2Nlc3NUb2tlbiIsIiIpLGxvY2FsU3RvcmFnZS5zZXRJdGVtKCJyZWZyZXNoVG9rZW4iLCIiKX1nZXRCYXNlVXJsKCl7cmV0dXJuIHRoaXMuaHR0cENsaWVudC5kZWZhdWx0cy5i''@;'; put 'put ''YXNlVVJMfHwiIn1hcHBlbmRSZXF1ZXN0KGllLGxlLG1lKXtsZXQgX2U9IiIsVGU9IiIsU2U9bnVsbDttZSYmKGllPy5sb2c/KF9lPSgwLFUucGFyc2VTb3VyY2VDb2RlKShpZS5sb2cpLFRlPSgwLFUucGFyc2VHZW5lcmF0ZWRDb2RlKShpZS5sb2cpLFNlPWllPy5yZXN1bHQ/aWUucmVzdWx0''@;'; put 'put ''LldPUks6aWUubG9nKTppZT8ucmVzdWx0JiYoInN0cmluZyI9PXR5cGVvZiBpZS5yZXN1bHQmJihfZT0oMCxVLnBhcnNlU291cmNlQ29kZSkoaWUucmVzdWx0KSxUZT0oMCxVLnBhcnNlR2VuZXJhdGVkQ29kZSkoaWUucmVzdWx0KSksU2U9aWUucmVzdWx0LldPUkspKTtjb25zdCB6ZT0ic3Ry''@;'; put 'put ''aW5nIj09dHlwZW9mIGllPy5yZXN1bHQ/aWU/LnJlc3VsdDpKU09OLnN0cmluZ2lmeShpZT8ucmVzdWx0LG51bGwsMik7dGhpcy5yZXF1ZXN0cy5wdXNoKHtsb2dGaWxlOmllPy5sb2d8fHplfHxpZSxzZXJ2aWNlTGluazpsZSx0aW1lc3RhbXA6bmV3IERhdGUsc291cmNlQ29kZTpfZSxnZW5l''@;'; put 'put ''cmF0ZWRDb2RlOlRlLFNBU1dPUks6U2V9KSx0aGlzLnJlcXVlc3RzLmxlbmd0aD50aGlzLnJlcXVlc3RzTGltaXQmJnRoaXMucmVxdWVzdHMuc3BsaWNlKDAsMSl9Z2V0KGllLGxlLG1lPSJhcHBsaWNhdGlvbi9qc29uIixfZT17fSxUZT0hMSl7cmV0dXJuIFAodGhpcyx2b2lkIDAsdm9pZCAw''@;'; put 'put ''LGZ1bmN0aW9uKigpe2NvbnN0IHplPXtoZWFkZXJzOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldEhlYWRlcnMobGUsbWUpKSxfZSkscmVzcG9uc2VUeXBlOiJ0ZXh0L3BsYWluIj09PW1lPyJ0ZXh0IjoianNvbiIsd2l0aFhTUkZUb2tlbjohMH07cmV0dXJuInRleHQv''@;'; put 'put ''cGxhaW4iPT09bWUmJih6ZS50cmFuc2Zvcm1SZXNwb25zZT12b2lkIDApLHRoaXMuaHR0cENsaWVudC5nZXQoaWUsemUpLnRoZW4oVj0+KCgwLHEudGhyb3dJZkVycm9yKShWKSx0aGlzLnBhcnNlUmVzcG9uc2UoVikpKS5jYXRjaChWPT5QKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbioo''@;'; put 'put ''KXtyZXR1cm4geWllbGQgdGhpcy5oYW5kbGVFcnJvcihWLCgpPT50aGlzLmdldChpZSxsZSxtZSxfZSkuY2F0Y2gocD0+e3Rocm93KDAsTC5wcmVmaXhNZXNzYWdlKShwLCJFcnJvciB3aGlsZSBleGVjdXRpbmcgaGFuZGxlIGVycm9yIGNhbGxiYWNrLiAiKX0pLFRlKX0pKX0pfXBvc3QoaWUs''@;'; put 'put ''bGUsbWUsX2U9ImFwcGxpY2F0aW9uL2pzb24iLFRlPXt9LFNlPXt9KXtyZXR1cm4gUCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgemU9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuZ2V0SGVhZGVycyhtZSxfZSkpLFRlKTtyZXR1cm4gdGhpcy5odHRw''@;'; put 'put ''Q2xpZW50LnBvc3QoaWUsbGUsT2JqZWN0LmFzc2lnbih7aGVhZGVyczp6ZSx3aXRoWFNSRlRva2VuOiEwfSxTZSkpLnRoZW4oVj0+KCgwLHEudGhyb3dJZkVycm9yKShWKSx0aGlzLnBhcnNlUmVzcG9uc2UoVikpKS5jYXRjaChWPT5QKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXty''@;'; put 'put ''ZXR1cm4geWllbGQgdGhpcy5oYW5kbGVFcnJvcihWLCgpPT50aGlzLnBvc3QoaWUsbGUsbWUsX2UsVGUpKX0pKX0pfXB1dChpZSxsZSxtZSxfZT17fSl7cmV0dXJuIFAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IFRlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7''@;'; put 'put ''fSx0aGlzLmdldEhlYWRlcnMobWUsImFwcGxpY2F0aW9uL2pzb24iKSksX2UpO3JldHVybiB0aGlzLmh0dHBDbGllbnQucHV0KGllLGxlLHtoZWFkZXJzOlRlLHdpdGhYU1JGVG9rZW46ITB9KS50aGVuKFNlPT4oKDAscS50aHJvd0lmRXJyb3IpKFNlKSx0aGlzLnBhcnNlUmVzcG9uc2UoU2Up''@;'; put 'put ''KSkuY2F0Y2goU2U9PlAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCB0aGlzLmhhbmRsZUVycm9yKFNlLCgpPT50aGlzLnB1dChpZSxsZSxtZSxfZSkpfSkpfSl9ZGVsZXRlKGllLGxlKXtyZXR1cm4gUCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7''@;'; put 'put ''Y29uc3QgbWU9dGhpcy5nZXRIZWFkZXJzKGxlLCJhcHBsaWNhdGlvbi9qc29uIik7cmV0dXJuIHRoaXMuaHR0cENsaWVudC5kZWxldGUoaWUse2hlYWRlcnM6bWUsd2l0aFhTUkZUb2tlbjohMH0pLnRoZW4oX2U9PigoMCxxLnRocm93SWZFcnJvcikoX2UpLHRoaXMucGFyc2VSZXNwb25zZShf''@;'; put 'put ''ZSkpKS5jYXRjaChfZT0+UCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuaGFuZGxlRXJyb3IoX2UsKCk9PnRoaXMuZGVsZXRlKGllLGxlKSl9KSl9KX1wYXRjaChpZSxsZT17fSxtZSl7cmV0dXJuIFAodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9u''@;'; put 'put ''Kigpe2NvbnN0IF9lPXRoaXMuZ2V0SGVhZGVycyhtZSwiYXBwbGljYXRpb24vanNvbiIpO3JldHVybiB0aGlzLmh0dHBDbGllbnQucGF0Y2goaWUsbGUse2hlYWRlcnM6X2Usd2l0aFhTUkZUb2tlbjohMH0pLnRoZW4oVGU9PigoMCxxLnRocm93SWZFcnJvcikoVGUpLHRoaXMucGFyc2VSZXNw''@;'; put 'put ''b25zZShUZSkpKS5jYXRjaChUZT0+UCh0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7cmV0dXJuIHlpZWxkIHRoaXMuaGFuZGxlRXJyb3IoVGUsKCk9PnRoaXMucGF0Y2goaWUsbGUsbWUpKX0pKX0pfXVwbG9hZEZpbGUoaWUsbGUsbWUpe3ZhciBfZTtyZXR1cm4gUCh0aGlzLHZvaWQg''@;'; put 'put ''MCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgVGU9dGhpcy5nZXRIZWFkZXJzKG1lLCJhcHBsaWNhdGlvbi9qc29uIik7bnVsbCE9PShfZT10aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW4pJiZ2b2lkIDAhPT1fZSYmX2UudmFsdWUmJihUZVt0aGlzLmZpbGVVcGxvYWRDc3JmVG9rZW4uaGVhZGVy''@;'; put 'put ''TmFtZV09dGhpcy5maWxlVXBsb2FkQ3NyZlRva2VuLnZhbHVlKTt0cnl7Y29uc3QgU2U9eWllbGQgdGhpcy5odHRwQ2xpZW50LnBvc3QoaWUsbGUse2hlYWRlcnM6VGUsdHJhbnNmb3JtUmVxdWVzdDp6ZT0+emV9KTtyZXR1cm57cmVzdWx0OlNlLmRhdGEsZXRhZzpTZS5oZWFkZXJzLmV0YWd9''@;'; put 'put ''fWNhdGNoKFNlKXtjb25zdCB6ZT1TZS5yZXNwb25zZTtpZig0MDM9PT16ZT8uc3RhdHVzfHw0NDk9PT16ZT8uc3RhdHVzKXtpZih0aGlzLnBhcnNlQW5kU2V0RmlsZVVwbG9hZENzcmZUb2tlbih6ZSksdGhpcy5maWxlVXBsb2FkQ3NyZlRva2VuKXJldHVybiB0aGlzLnVwbG9hZEZpbGUoaWUs''@;'; put 'put ''bGUsbWUpO3Rocm93IFNlfXRocm93IFNlfX0pfXBhcnNlUmVzcG9uc2UoaWUpe2NvbnN0IGxlPWllPy5oZWFkZXJzP2llLmhlYWRlcnMuZXRhZzoiIjtsZXQgbWUsX2U9ITE7dHJ5e21lPSJzdHJpbmciPT10eXBlb2YgaWUuZGF0YT9KU09OLnBhcnNlKGllLmRhdGEpOmllLmRhdGF9Y2F0Y2h7''@;'; put 'put ''dHJ5e21lPUpTT04ucGFyc2UoKDAsTi5wYXJzZVdlYm91dFJlc3BvbnNlKShpZS5kYXRhKSl9Y2F0Y2h7bWU9aWUuZGF0YX1fZT0hMH1sZXQgVGU9e3Jlc3VsdDptZSxldGFnOmxlLHN0YXR1czppZS5zdGF0dXN9O3JldHVybiBfZSYmKFRlLmxvZz1pZS5kYXRhKSxUZX1jcmVhdGVIdHRwQ2xp''@;'; put 'put ''ZW50KGllLGxlKXtjb25zdCBtZT1sZT9uZXcgRi5BZ2VudChsZSk6dm9pZCAwO3RoaXMuaHR0cENsaWVudD0oMCxVLmNyZWF0ZUF4aW9zSW5zdGFuY2UpKGllLG1lKSx0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMudmFsaWRhdGVTdGF0dXM9X2U9Pl9lPj0yMDAmJl9lPD00MDF9fSxxLnRocm93''@;'; put 'put ''SWZFcnJvcj1yZT0+e3ZhciBpZSxsZSxtZSxfZSxUZSxTZSx6ZTtzd2l0Y2gocmUuc3RhdHVzKXtjYXNlIDQwMDppZigib2JqZWN0Ij09dHlwZW9mIHJlLmRhdGEmJiJpbnZhbGlkX2dyYW50Ij09PXJlLmRhdGEuZXJyb3IpdGhyb3cgbmV3IHouTG9naW5SZXF1aXJlZEVycm9yKHJlLmRhdGEp''@;'; put 'put ''O2lmKCJzdHJpbmciPT10eXBlb2YgcmUuZGF0YSYmImludmFsaWQgY3NyZiB0b2tlbiEiPT09cmUuZGF0YS50b0xvd2VyQ2FzZSgpKXRocm93IG5ldyBXLkludmFsaWRTQVNqc0NzcmZFcnJvcjticmVhaztjYXNlIDQwMTp0aHJvdyJvYmplY3QiPT10eXBlb2YgcmUuZGF0YT9uZXcgei5Mb2dp''@;'; put 'put ''blJlcXVpcmVkRXJyb3IocmUuZGF0YSk6bmV3IHouTG9naW5SZXF1aXJlZEVycm9yfWlmKG51bGwhPT0obGU9bnVsbD09PShpZT1yZS5kYXRhKXx8dm9pZCAwPT09aWU/dm9pZCAwOmllLmVudGl0eUlEKSYmdm9pZCAwIT09bGUmJmxlLmluY2x1ZGVzKCJsb2dpbiIpKXRocm93IG5ldyB6Lkxv''@;'; put 'put ''Z2luUmVxdWlyZWRFcnJvcjtpZigic3RyaW5nIj09dHlwZW9mIHJlLmRhdGEmJigwLE8uaXNBdXRob3JpemVGb3JtUmVxdWlyZWQpKHJlLmRhdGEpKXRocm93IG5ldyB6LkF1dGhvcml6ZUVycm9yKCJBdXRob3JpemF0aW9uIHJlcXVpcmVkIixyZS5yZXF1ZXN0LnJlc3BvbnNlVVJMKTtpZigi''@;'; put 'put ''c3RyaW5nIj09dHlwZW9mIHJlLmRhdGEmJigwLE8uaXNMb2dJblJlcXVpcmVkKShyZS5kYXRhKSYmKG51bGw9PT0oX2U9bnVsbD09PShtZT1yZS5jb25maWcpfHx2b2lkIDA9PT1tZT92b2lkIDA6bWUudXJsKXx8dm9pZCAwPT09X2V8fCFfZS5pbmNsdWRlcygiL1NBU0xvZ29uL2xvZ2luIikp''@;'; put 'put ''KXRocm93IG5ldyB6LkxvZ2luUmVxdWlyZWRFcnJvcjtpZihudWxsIT09KFRlPXJlLmRhdGEpJiZ2b2lkIDAhPT1UZSYmVGUuYXV0aF9yZXF1ZXN0KXRocm93IG5ldyB6LkF1dGhvcml6ZUVycm9yKHJlLmRhdGEubWVzc2FnZSxyZS5yZXF1ZXN0LnJlc3BvbnNlVVJMKTtpZihudWxsIT09KHpl''@;'; put 'put ''PW51bGw9PT0oU2U9cmUuY29uZmlnKXx8dm9pZCAwPT09U2U/dm9pZCAwOlNlLnVybCkmJnZvaWQgMCE9PXplJiZ6ZS5pbmNsdWRlcygic2FzQXV0aEVycm9yIikpdGhyb3cgbmV3IEsuU0FTOUF1dGhFcnJvcjtjb25zdCBWPUoocmUuZGF0YSk7aWYoVil0aHJvdyBWfTtjb25zdCBKPXJlPT57''@;'; put 'put ''aWYoIXJlKXJldHVybiBudWxsO3RyeXtjb25zdCBpZT1KU09OLnBhcnNlKHJlPy5yZXBsYWNlKC9bXG5ccl0vZywiICIpKTtpZihpZS5lcnJvckNvZGUmJmllLm1lc3NhZ2UpcmV0dXJuIG5ldyB6LkpvYkV4ZWN1dGlvbkVycm9yKGllLmVycm9yQ29kZSxpZS5tZXNzYWdlLHJlPy5yZXBsYWNl''@;'; put 'put ''KC9bXG5ccl0vZywiICIpKX1jYXRjaHt9dHJ5e2lmKHJlPy5pbmNsdWRlcygneyJlcnJvckNvZGUnKSl7Y29uc3QgbGU9cmUuc3BsaXQoJ3siZXJyb3JDb2RlJyk7aWYobGUubGVuZ3RoPjEpe2NvbnN0IG1lPSd7ImVycm9yQ29kZScrbGVbMV0uc3BsaXQoJyJ9JylbMF0rJyJ9JyxfZT1KU09O''@;'; put 'put ''LnBhcnNlKG1lLnJlcGxhY2UoL1tcblxyXS9nLCIgIikpO3JldHVybiBuZXcgei5Kb2JFeGVjdXRpb25FcnJvcihfZS5lcnJvckNvZGUsX2UubWVzc2FnZSxyZT8ucmVwbGFjZSgvW1xuXHJdL2csIlxuIikpfX19Y2F0Y2h7fXRyeXtpZihyZT8ubWF0Y2goL3N0b3JlZCBwcm9jZXNzIG5vdCBm''@;'; put 'put ''b3VuZDogL2kpKXtjb25zdCBsZT1yZS5zcGxpdCgvc3RvcmVkIHByb2Nlc3Mgbm90IGZvdW5kOiAvaSk7aWYobGUubGVuZ3RoPjEpe2NvbnN0IG1lPWxlWzFdLnNwbGl0KCI8aT4iKVsxXS5zcGxpdCgiPC9pPiIpWzBdLF9lPW1lLmVuZHNXaXRoKCJydW5uZXIiKT8iU0FTSlMgcnVubmVyIG5v''@;'; put 'put ''dCBmb3VuZC4gSGVyZSdzIHRoZSBsaW5rIChodHRwczovL2NsaS5zYXNqcy5pby9hdXRoLyNzYXNqcy1ydW5uZXIpIHRvIHRoZSBTQVMgY29kZSBmb3IgcmVnaXN0ZXJpbmcgdGhlIFNBU2pzIHJ1bm5lciI6YFN0b3JlZCBwcm9jZXNzIG5vdCBmb3VuZDogJHttZX1gO3JldHVybiBuZXcgei5K''@;'; put 'put ''b2JFeGVjdXRpb25FcnJvcig1MDAsX2UsIiIpfX19Y2F0Y2h7fXRyeXtpZighcmU/Lm1hdGNoKC8+PndlYm91dEJFR0lOPDwvKSYmcmU/Lm1hdGNoKC9TdG9yZWQgUHJvY2VzcyBFcnJvci9pKSYmcmU/Lm1hdGNoKC9UaGlzIHJlcXVlc3QgY29tcGxldGVkIHdpdGggZXJyb3JzLi9pKSl7Y29u''@;'; put 'put ''c3QgbGU9cmUuc3BsaXQoIjxoMj5TQVMgTG9nPC9oMj4iKTtpZihsZS5sZW5ndGg+MSl7Y29uc3QgbWU9bGVbMV0uc3BsaXQoIjxwcmU+IilbMV0uc3BsaXQoIjwvcHJlPiIpWzBdO3JldHVybiBuZXcgei5Kb2JFeGVjdXRpb25FcnJvcig1MDAsIlRoaXMgcmVxdWVzdCBjb21wbGV0ZWQgd2l0''@;'; put 'put ''aCBlcnJvcnMuIixtZSl9fX1jYXRjaHt9cmV0dXJuIG51bGx9fSw3OTU6ZnVuY3Rpb24odWUscSxfKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKEwsSyxVLFcpe3ZvaWQgMD09PVcmJihXPVUpO3ZhciBZPU9i''@;'; put 'put ''amVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSyxVKTsoIVl8fCgiZ2V0ImluIFk/IUsuX19lc01vZHVsZTpZLndyaXRhYmxlfHxZLmNvbmZpZ3VyYWJsZSkpJiYoWT17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gS1tVXX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHko''@;'; put 'put ''TCxXLFkpfTpmdW5jdGlvbihMLEssVSxXKXt2b2lkIDA9PT1XJiYoVz1VKSxMW1ddPUtbVV19KSx5PXRoaXMmJnRoaXMuX19zZXRNb2R1bGVEZWZhdWx0fHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihMLEspe09iamVjdC5kZWZpbmVQcm9wZXJ0eShMLCJkZWZhdWx0Iix7ZW51bWVyYWJsZToh''@;'; put 'put ''MCx2YWx1ZTpLfSl9OmZ1bmN0aW9uKEwsSyl7TC5kZWZhdWx0PUt9KSxnPXRoaXMmJnRoaXMuX19pbXBvcnRTdGFyfHxmdW5jdGlvbihMKXtpZihMJiZMLl9fZXNNb2R1bGUpcmV0dXJuIEw7dmFyIEs9e307aWYobnVsbCE9TClmb3IodmFyIFUgaW4gTCkiZGVmYXVsdCIhPT1VJiZPYmplY3Qu''@;'; put 'put ''cHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoTCxVKSYmSShLLEwsVSk7cmV0dXJuIHkoSyxMKSxLfSxCPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihMLEssVSxXKXtyZXR1cm4gbmV3KFV8fChVPVByb21pc2UpKShmdW5jdGlvbihYLGVlKXtmdW5jdGlvbiBKKGxlKXt0cnl7''@;'; put 'put ''aWUoVy5uZXh0KGxlKSl9Y2F0Y2gobWUpe2VlKG1lKX19ZnVuY3Rpb24gcmUobGUpe3RyeXtpZShXLnRocm93KGxlKSl9Y2F0Y2gobWUpe2VlKG1lKX19ZnVuY3Rpb24gaWUobGUpe2xlLmRvbmU/WChsZS52YWx1ZSk6ZnVuY3Rpb24gWShYKXtyZXR1cm4gWCBpbnN0YW5jZW9mIFU/WDpuZXcg''@;'; put 'put ''VShmdW5jdGlvbihlZSl7ZWUoWCl9KX0obGUudmFsdWUpLnRoZW4oSixyZSl9aWUoKFc9Vy5hcHBseShMLEt8fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5TYXM5UmVxdWVzdENsaWVudD12b2lkIDA7Y29uc3Qgdz1f''@;'; put 'put ''KDgyMjQpLFA9ZyhfKDc4NTcpKSxGPV8oOTc3OCksTz1fKDQ1ODgpLHo9XygxMzk1KTtxLlNhczlSZXF1ZXN0Q2xpZW50PWNsYXNzIE4gZXh0ZW5kcyBPLlJlcXVlc3RDbGllbnR7Y29uc3RydWN0b3IoSyxVKXtzdXBlcihLLFUpLHRoaXMuaHR0cENsaWVudC5kZWZhdWx0cy5tYXhSZWRpcmVj''@;'; put 'put ''dHM9MCx0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMudmFsaWRhdGVTdGF0dXM9Vz0+Vz49MjAwJiZXPDMwMyx3LndyYXBwZXImJigoMCx3LndyYXBwZXIpKHRoaXMuaHR0cENsaWVudCksdGhpcy5odHRwQ2xpZW50LmRlZmF1bHRzLmphcj1uZXcgUC5Db29raWVKYXIpfWxvZ2luKEssVSxXKXty''@;'; put 'put ''ZXR1cm4gQih0aGlzLHZvaWQgMCx2b2lkIDAsZnVuY3Rpb24qKCl7Y29uc3QgWT1gL1VzZXIgRm9sZGVycy8ke0t9L015IEZvbGRlci9zYXNqcy9ydW5uZXJgO3RoaXMuaHR0cENsaWVudC5kZWZhdWx0cy5qYXImJih0aGlzLmh0dHBDbGllbnQuZGVmYXVsdHMuamFyLnJlbW92ZUFsbENvb2tp''@;'; put 'put ''ZXMoKSx5aWVsZCB0aGlzLmdldChgJHtXfT9fcHJvZ3JhbT0ke1l9Jl91c2VybmFtZT0ke0t9Jl9wYXNzd29yZD0ke1V9YCx2b2lkIDAsInRleHQvcGxhaW4iKSl9KX1nZXQoSyxVLFc9ImFwcGxpY2F0aW9uL2pzb24iLFk9e30sWD0hMSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1''@;'; put 'put ''bmN0aW9uKigpe2NvbnN0IEo9e2hlYWRlcnM6T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHRoaXMuZ2V0SGVhZGVycyhVLFcpKSxZKSxyZXNwb25zZVR5cGU6InRleHQvcGxhaW4iPT09Vz8idGV4dCI6Impzb24iLHdpdGhYU1JGVG9rZW46ITB9O3JldHVybiJ0ZXh0L3BsYWluIj09''@;'; put 'put ''PVcmJihKLnRyYW5zZm9ybVJlc3BvbnNlPXZvaWQgMCksdGhpcy5odHRwQ2xpZW50LmdldChLLEopLnRoZW4ocmU9PjMwMj09PXJlLnN0YXR1cz90aGlzLmdldChyZS5oZWFkZXJzLmxvY2F0aW9uLFUsVyk6KCgwLE8udGhyb3dJZkVycm9yKShyZSksdGhpcy5wYXJzZVJlc3BvbnNlKHJlKSkp''@;'; put 'put ''LmNhdGNoKHJlPT5CKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtpZihyZSBpbnN0YW5jZW9mIHouSm9iRXhlY3V0aW9uRXJyb3IpdGhyb3cgcmU7cmV0dXJuIHlpZWxkIHRoaXMuaGFuZGxlRXJyb3IocmUsKCk9PnRoaXMuZ2V0KEssVSxXLFkpLmNhdGNoKGllPT57dGhyb3coMCxG''@;'; put 'put ''LnByZWZpeE1lc3NhZ2UpKGllLCJFcnJvciB3aGlsZSBleGVjdXRpbmcgaGFuZGxlIGVycm9yIGNhbGxiYWNrLiAiKX0pLFgpLmNhdGNoKGllPT57dGhyb3coMCxGLnByZWZpeE1lc3NhZ2UpKGllLCJFcnJvciB3aGlsZSBoYW5kbGluZyBlcnJvci4gIil9KX0pKX0pfXBvc3QoSyxVLFcsWT0i''@;'; put 'put ''YXBwbGljYXRpb24vanNvbiIsWD17fSl7cmV0dXJuIEIodGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IGVlPU9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSx0aGlzLmdldEhlYWRlcnMoVyxZKSksWCk7cmV0dXJuIHRoaXMuaHR0cENsaWVudC5wb3N0KEssVSx7aGVh''@;'; put 'put ''ZGVyczplZSx3aXRoWFNSRlRva2VuOiEwfSkudGhlbihKPT5CKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4gMzAyPT09Si5zdGF0dXM/eWllbGQgdGhpcy5nZXQoSi5oZWFkZXJzLmxvY2F0aW9uLHZvaWQgMCxZLFgpOigoMCxPLnRocm93SWZFcnJvcikoSiksdGhpcy5w''@;'; put 'put ''YXJzZVJlc3BvbnNlKEopKX0pKS5jYXRjaChKPT5CKHRoaXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtyZXR1cm4geWllbGQgdGhpcy5oYW5kbGVFcnJvcihKLCgpPT50aGlzLnBvc3QoSyxVLFcsWSxYKSl9KSl9KX19fSwzNjAyOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO09iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLlNBU0pTX0xPR1NfU0VQQVJBVE9SPXEuU2FzanNSZXF1ZXN0Q2xpZW50PXZvaWQgMDtjb25zdCBJPV8oNDU4OCk7cS5TYXNqc1JlcXVlc3RDbGllbnQ9Y2xhc3MgeSBleHRlbmRzIEkuUmVxdWVzdENsaWVudHtjb25z''@;'; put 'put ''dHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksdGhpcy5nZXRIZWFkZXJzPShCLHcpPT57dmFyIFA7Y29uc3QgRj17fTtyZXR1cm4iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiE9PXcmJihGWyJDb250ZW50LVR5cGUiXT13KSxGLkFjY2VwdD0iYXBwbGljYXRpb24vanNv''@;'; put 'put ''biI9PT13P3c6IiovKiIsIUImJnR5cGVvZiB3aW5kb3c8InUiJiYoQj1udWxsIT09KFA9bG9jYWxTdG9yYWdlLmdldEl0ZW0oImFjY2Vzc1Rva2VuIikpJiZ2b2lkIDAhPT1QP1A6dm9pZCAwKSxCJiYoRi5BdXRob3JpemF0aW9uPWBCZWFyZXIgJHtCfWApLEZ9fXBhcnNlUmVzcG9uc2UoQil7''@;'; put 'put ''Y29uc3Qgdz1CPy5oZWFkZXJzP0IuaGVhZGVycy5ldGFnOiIiO2xldCBGLE8seixQPXt9O3RyeXtQPSJzdHJpbmciPT10eXBlb2YgQi5kYXRhP0pTT04ucGFyc2UoQi5kYXRhKTpCLmRhdGF9Y2F0Y2h7aWYoQi5kYXRhLmluY2x1ZGVzKHEuU0FTSlNfTE9HU19TRVBBUkFUT1IpKXtjb25zdHtk''@;'; put 'put ''YXRhOkt9PUIsVT1LLnNwbGl0KHEuU0FTSlNfTE9HU19TRVBBUkFUT1IpO0Y9VS5zcGxpY2UoMCwxKVswXSx2b2lkIDAhPT1GJiYoUD1GKTtjb25zdCBXPVUuc3BsaWNlKDAsVS5sZW5ndGgtMSksWT1uZXcgUmVnRXhwKGAke3EuU0FTSlNfTE9HU19TRVBBUkFUT1J9JGApLFg9VVswXTtYJiYo''@;'; put 'put ''WS50ZXN0KEspP1cubGVuZ3RoPjEmJlcucHVzaChYKTp6PVgpLE89Vy5qb2luKHEuU0FTSlNfTE9HU19TRVBBUkFUT1IpfWVsc2UgUD1CLmRhdGF9Y29uc3QgTj17cmVzdWx0OlAsbG9nOk98fCIiLGV0YWc6dyxzdGF0dXM6Qi5zdGF0dXN9O3JldHVybiB6JiYoTi5wcmludE91dHB1dD16KSxO''@;'; put 'put ''fX0scS5TQVNKU19MT0dTX1NFUEFSQVRPUj0iU0FTSlNfTE9HU19TRVBBUkFUT1JfMTYzZWUxN2I2ZmYyNGYwMjg5Mjg5NzJkODBhMjY3ODQifSw0NzA6KHVlLHEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNDY2Njoo''@;'; put 'put ''dWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw2MTc3Oih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDU3NjY6KHVlLHEpPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNDk3NToodWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwyMTU6KHVlLHEpPT57InVzZSBzdHJpY3QiO09i''@;'; put 'put ''amVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sNDc4MjoodWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSw0MTY4Oih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDg1MTY6KHVlLHEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMzg0MDoodWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEs''@;'; put 'put ''Il9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSwzMTUzOih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDE0Mjg6KHVlLHEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxl''@;'; put 'put ''Iix7dmFsdWU6ITB9KX0sNTg0MToodWUscSk9PnsidXNlIHN0cmljdCI7dmFyIEkseTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5Mb2dpbk1lY2hhbmlzbT1xLlNBU2pzQ29uZmlnPXZvaWQgMCxxLlNBU2pzQ29uZmlnPWNsYXNzIF97Y29uc3Ry''@;'; put 'put ''dWN0b3IoKXt0aGlzLnNlcnZlclVybD0iIix0aGlzLnBhdGhTQVNKUz0iIix0aGlzLnBhdGhTQVM5PSIiLHRoaXMucGF0aFNBU1ZpeWE9IiIsdGhpcy5hcHBMb2M9IiIsdGhpcy5zZXJ2ZXJUeXBlPW51bGwsdGhpcy5kZWJ1Zz0hMCx0aGlzLnZlcmJvc2U9ITAsdGhpcy5jb250ZXh0TmFtZT0i''@;'; put 'put ''Iix0aGlzLnVzZUNvbXB1dGVBcGk9bnVsbCx0aGlzLmxvZ2luTWVjaGFuaXNtPUkuRGVmYXVsdCx0aGlzLnJlcXVlc3RIaXN0b3J5TGltaXQ9MTB9fSwoeT1JPXEuTG9naW5NZWNoYW5pc218fChxLkxvZ2luTWVjaGFuaXNtPXt9KSkuRGVmYXVsdD0iRGVmYXVsdCIseS5SZWRpcmVjdGVkPSJS''@;'; put 'put ''ZWRpcmVjdGVkIn0sNjAzODoodWUscSk9PnsidXNlIHN0cmljdCI7dmFyIEk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuU2Vzc2lvblN0YXRlPXZvaWQgMCwoST1xLlNlc3Npb25TdGF0ZXx8KHEuU2Vzc2lvblN0YXRlPXt9KSkuQ29tcGxldGVk''@;'; put 'put ''PSJjb21wbGV0ZWQiLEkuUnVubmluZz0icnVubmluZyIsSS5QZW5kaW5nPSJwZW5kaW5nIixJLklkbGU9ImlkbGUiLEkuVW5hdmFpbGFibGU9InVuYXZhaWxhYmxlIixJLk5vU3RhdGU9IiIsSS5GYWlsZWQ9ImZhaWxlZCIsSS5FcnJvcj0iZXJyb3IifSw5NDkzOih1ZSxxKT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LDg2NTA6KHVlLHEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KX0sMTI0Oih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3Qu''@;'; put 'put ''ZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5BdXRob3JpemVFcnJvcj12b2lkIDA7Y2xhc3MgXyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHksZyl7c3VwZXIoeSksdGhpcy5tZXNzYWdlPXksdGhpcy5jb25maXJtVXJsPWcsdGhpcy5uYW1lPSJBdXRob3Jp''@;'; put 'put ''emVFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsXy5wcm90b3R5cGUpfX1xLkF1dGhvcml6ZUVycm9yPV99LDk0NjU6KHVlLHEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLkNlcnRpZmljYXRlRXJyb3I9''@;'; put 'put ''dm9pZCAwO2NsYXNzIEkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihnKXtzdXBlcihgJHtnfVxuUGxlYXNlIHZpc2l0IHRoZSBsaW5rIGJlbG93IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIG9uIHRoaXMgaXNzdWU6XG4tIGh0dHBzOi8vZ2l0aHViLmNvbS9zYXNqcy9jbGkvaXNzdWVzLzEx''@;'; put 'put ''ODEjaXNzdWVjb21tZW50LTEwOTA2Mzg1ODRcbmApLHRoaXMubmFtZT0iQ2VydGlmaWNhdGVFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsSS5wcm90b3R5cGUpfX1xLkNlcnRpZmljYXRlRXJyb3I9SX0sNTI2NzoodWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuQ29tcHV0ZUpvYkV4ZWN1dGlvbkVycm9yPXZvaWQgMDtjbGFzcyBfIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoeSxnKXtzdXBlcigiRXJyb3I6IEpvYiBleGVjdXRpb24gZmFpbGVkIiksdGhpcy5qb2I9eSx0aGlzLmxvZz1n''@;'; put 'put ''LHRoaXMubmFtZT0iQ29tcHV0ZUpvYkV4ZWN1dGlvbkVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxfLnByb3RvdHlwZSl9fXEuQ29tcHV0ZUpvYkV4ZWN1dGlvbkVycm9yPV99LDkyMzI6KHVlLHEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2Vz''@;'; put 'put ''TW9kdWxlIix7dmFsdWU6ITB9KSxxLkVycm9yUmVzcG9uc2U9dm9pZCAwLHEuRXJyb3JSZXNwb25zZT1jbGFzcyBfe2NvbnN0cnVjdG9yKHksZyxCKXtsZXQgdz1nO2lmKCJvYmplY3QiIT10eXBlb2YgZyl0cnl7dz1KU09OLnBhcnNlKGcpfWNhdGNoe0I9Zyx3PSIifXRoaXMuZXJyb3I9e21l''@;'; put 'put ''c3NhZ2U6eSxkZXRhaWxzOncscmF3OkJ9fX19LDUxMDk6KHVlLHEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLkludGVybmFsU2VydmVyRXJyb3I9dm9pZCAwO2NsYXNzIF8gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rv''@;'; put 'put ''cigpe3N1cGVyKCJFcnJvcjogSW50ZXJuYWwgc2VydmVyIGVycm9yLiIpLHRoaXMubmFtZT0iSW50ZXJuYWxTZXJ2ZXJFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsXy5wcm90b3R5cGUpfX1xLkludGVybmFsU2VydmVyRXJyb3I9X30sNTUxODoodWUscSk9PnsidXNlIHN0cmlj''@;'; put 'put ''dCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuSW52YWxpZEpzb25FcnJvcj12b2lkIDA7Y2xhc3MgXyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKCl7c3VwZXIoIkVycm9yOiBpbnZhbGlkIEpzb24gc3RyaW5nIiksdGhpcy5uYW1lPSJJbnZh''@;'; put 'put ''bGlkSnNvbkVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxfLnByb3RvdHlwZSl9fXEuSW52YWxpZEpzb25FcnJvcj1ffSwxMDA1Oih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5JbnZhbGlkU0FT''@;'; put 'put ''anNDc3JmRXJyb3I9dm9pZCAwO2NsYXNzIF8gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJBdXRoIGVycm9yOiBJbnZhbGlkIENTUkYgdG9rZW4hIiksdGhpcy5uYW1lPSJJbnZhbGlkU0FTanNDc3JmRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLF8ucHJvdG90''@;'; put 'put ''eXBlKX19cS5JbnZhbGlkU0FTanNDc3JmRXJyb3I9X30sODUzMToodWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuSm9iRXhlY3V0aW9uRXJyb3I9dm9pZCAwO2NsYXNzIF8gZXh0ZW5kcyBFcnJvcntjb25zdHJ1''@;'; put 'put ''Y3Rvcih5LGcsQil7c3VwZXIoYEVycm9yIENvZGUgJHt5fTogJHtnfWApLHRoaXMuZXJyb3JDb2RlPXksdGhpcy5lcnJvck1lc3NhZ2U9Zyx0aGlzLnJlc3VsdD1CLHRoaXMubmFtZT0iSm9iRXhlY3V0aW9uRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLF8ucHJvdG90eXBlKX19''@;'; put 'put ''cS5Kb2JFeGVjdXRpb25FcnJvcj1ffSw5MDc5Oih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5Kb2JTdGF0ZVBvbGxFcnJvcj12b2lkIDA7Y2xhc3MgXyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHksZyl7''@;'; put 'put ''c3VwZXIoYEVycm9yIHdoaWxlIHBvbGxpbmcgam9iIHN0YXRlIGZvciBqb2IgJHt5fTogJHtnLm1lc3NhZ2V8fGd9YCksdGhpcy5vcmlnaW5hbEVycm9yPWcsdGhpcy5uYW1lPSJKb2JTdGF0ZVBvbGxFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsXy5wcm90b3R5cGUpfX1xLkpv''@;'; put 'put ''YlN0YXRlUG9sbEVycm9yPV99LDMwOTY6KHVlLHEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLkpzb25QYXJzZUFycmF5RXJyb3I9dm9pZCAwO2NsYXNzIF8gZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVy''@;'; put 'put ''KCJDYW4gbm90IHBhcnNlIGFycmF5IG9iamVjdCB0byBqc29uLiIpLHRoaXMubmFtZT0iSnNvblBhcnNlQXJyYXlFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsXy5wcm90b3R5cGUpfX1xLkpzb25QYXJzZUFycmF5RXJyb3I9X30sNjc0MzoodWUscSk9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuTG9naW5SZXF1aXJlZEVycm9yPXZvaWQgMDtjbGFzcyBfIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IoeSl7c3VwZXIoYEF1dGggZXJyb3I6ICR7eT9KU09OLnN0cmluZ2lmeSh5LG51bGwsMik6Illv''@;'; put 'put ''dSBtdXN0IGJlIGxvZ2dlZCBpbiB0byBhY2Nlc3MgdGhpcyByZXNvdXJjZSJ9YCksdGhpcy5uYW1lPSJMb2dpblJlcXVpcmVkRXJyb3IiLE9iamVjdC5zZXRQcm90b3R5cGVPZih0aGlzLF8ucHJvdG90eXBlKX19cS5Mb2dpblJlcXVpcmVkRXJyb3I9X30sNzg2NDoodWUscSk9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuTm9TZXNzaW9uU3RhdGVFcnJvcj12b2lkIDA7Y2xhc3MgXyBleHRlbmRzIEVycm9ye2NvbnN0cnVjdG9yKHksZyxCKXtzdXBlcihgQ291bGQgbm90IGdldCBzZXNzaW9uIHN0YXRlLiBTZXJ2''@;'; put 'put ''ZXIgcmVzcG9uZGVkIHdpdGggJHt5fSB3aGlsc3QgY2hlY2tpbmcgc3RhdGU6ICR7Z31gKSx0aGlzLnNlcnZlclJlc3BvbnNlU3RhdHVzPXksdGhpcy5zZXNzaW9uU3RhdGVVcmw9Zyx0aGlzLmxvZ1VybD1CLHRoaXMubmFtZT0iTm9TZXNzaW9uU3RhdHVzIixPYmplY3Quc2V0UHJvdG90eXBl''@;'; put 'put ''T2YodGhpcyxfLnByb3RvdHlwZSl9fXEuTm9TZXNzaW9uU3RhdGVFcnJvcj1ffSw5NTc3Oih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5Ob3RGb3VuZEVycm9yPXZvaWQgMDtjbGFzcyBfIGV4dGVuZHMgRXJy''@;'; put 'put ''b3J7Y29uc3RydWN0b3IoeSl7c3VwZXIoYEVycm9yOiBSZXNvdXJjZSBhdCAke3l9IHdhcyBub3QgZm91bmRgKSx0aGlzLnVybD15LHRoaXMubmFtZT0iTm90Rm91bmRFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9mKHRoaXMsXy5wcm90b3R5cGUpfX1xLk5vdEZvdW5kRXJyb3I9X30sOTI3''@;'; put 'put ''OToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5Sb290Rm9sZGVyTm90Rm91bmRFcnJvcj12b2lkIDA7Y29uc3QgST1fKDY3OTkpO2NsYXNzIHkgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihCLHcsUCl7''@;'; put 'put ''bGV0IEY9YFJvb3QgZm9sZGVyICR7Qn0gd2FzIG5vdCBmb3VuZC5cblBsZWFzZSBjaGVjayAke3d9L1NBU0RyaXZlLlxuSWYgdGhlIGZvbGRlciBET0VTIGV4aXN0IHRoZW4gaXQgaXMgbGlrZWx5IGEgcGVybWlzc2lvbiBwcm9ibGVtLlxuYDtpZihQKXtsZXQgej0oMCxJLmRlY29kZVRva2Vu''@;'; put 'put ''KShQKS5zY29wZTt6PXoubWFwKE49PiIqICIrTiksRis9IllvdXIgYWNjZXNzIHRva2VuIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgc2NvcGVzOlxuIit6LmpvaW4oIlxuIil9c3VwZXIoRiksdGhpcy5uYW1lPSJSb290Rm9sZGVyTm90Rm91bmRFcnJvciIsT2JqZWN0LnNldFByb3RvdHlwZU9m''@;'; put 'put ''KHRoaXMseS5wcm90b3R5cGUpfX1xLlJvb3RGb2xkZXJOb3RGb3VuZEVycm9yPXl9LDk1MjY6KHVlLHEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLlNBUzlBdXRoRXJyb3I9dm9pZCAwO2NsYXNzIF8gZXh0ZW5kcyBF''@;'; put 'put ''cnJvcntjb25zdHJ1Y3Rvcigpe3N1cGVyKCJUaGUgY3JlZGVudGlhbHMgeW91IHByb3ZpZGVkIGNhbm5vdCBiZSBhdXRoZW50aWNhdGVkLiBQbGVhc2UgcHJvdmlkZSBhIHZhbGlkIHNldCBvZiBjcmVkZW50aWFscy4iKSx0aGlzLm5hbWU9IkF1dGhvcml6ZUVycm9yIixPYmplY3Quc2V0UHJv''@;'; put 'put ''dG90eXBlT2YodGhpcyxfLnByb3RvdHlwZSl9fXEuU0FTOUF1dGhFcnJvcj1ffSw4ODc1Oih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5XZWJvdXRSZXNwb25zZUVycm9yPXZvaWQgMDtjbGFzcyBfIGV4dGVu''@;'; put 'put ''ZHMgRXJyb3J7Y29uc3RydWN0b3IoeSl7c3VwZXIoYEVycm9yOiBlcnJvciB3aGlsZSBwYXJzaW5nIHJlc3BvbnNlIGZyb20gJHt5fWApLHRoaXMudXJsPXksdGhpcy5uYW1lPSJXZWJvdXRSZXNwb25zZUVycm9yIixPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcyxfLnByb3RvdHlwZSl9fXEu''@;'; put 'put ''V2Vib3V0UmVzcG9uc2VFcnJvcj1ffSwxMzk1OmZ1bmN0aW9uKHVlLHEsXyl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihnLEIsdyxQKXt2b2lkIDA9PT1QJiYoUD13KTt2YXIgRj1PYmplY3QuZ2V0T3duUHJv''@;'; put 'put ''cGVydHlEZXNjcmlwdG9yKEIsdyk7KCFGfHwoImdldCJpbiBGPyFCLl9fZXNNb2R1bGU6Ri53cml0YWJsZXx8Ri5jb25maWd1cmFibGUpKSYmKEY9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEJbd119fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGcsUCxGKX06ZnVuY3Rp''@;'; put 'put ''b24oZyxCLHcsUCl7dm9pZCAwPT09UCYmKFA9dyksZ1tQXT1CW3ddfSkseT10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZyxCKXtmb3IodmFyIHcgaW4gZykiZGVmYXVsdCIhPT13JiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEIsdykmJkkoQixnLHcp''@;'; put 'put ''fTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkseShfKDEyNCkscSkseShfKDk0NjUpLHEpLHkoXyg1MjY3KSxxKSx5KF8oOTIzMikscSkseShfKDUxMDkpLHEpLHkoXyg1NTE4KSxxKSx5KF8oODUzMSkscSkseShfKDkwNzkpLHEpLHkoXygzMDk2KSxx''@;'; put 'put ''KSx5KF8oNjc0MykscSkseShfKDc4NjQpLHEpLHkoXyg5NTc3KSxxKSx5KF8oOTI3OSkscSkseShfKDg4NzUpLHEpfSwxMjMwOmZ1bmN0aW9uKHVlLHEsXyl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihnLEIs''@;'; put 'put ''dyxQKXt2b2lkIDA9PT1QJiYoUD13KTt2YXIgRj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEIsdyk7KCFGfHwoImdldCJpbiBGPyFCLl9fZXNNb2R1bGU6Ri53cml0YWJsZXx8Ri5jb25maWd1cmFibGUpKSYmKEY9e2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IEJbd119fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGcsUCxGKX06ZnVuY3Rpb24oZyxCLHcsUCl7dm9pZCAwPT09UCYmKFA9dyksZ1tQXT1CW3ddfSkseT10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZyxCKXtmb3IodmFyIHcgaW4gZykiZGVmYXVsdCIhPT13JiYhT2JqZWN0''@;'; put 'put ''LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEIsdykmJkkoQixnLHcpfTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkseShfKDQ3MCkscSkseShfKDQ2NjYpLHEpLHkoXyg0OTc1KSxxKSx5KF8oNTc2NikscSkseShfKDIxNSkscSkseShfKDQ3''@;'; put 'put ''ODIpLHEpLHkoXyg0MTY4KSxxKSx5KF8oODUxNikscSkseShfKDM4NDApLHEpLHkoXyg1ODQxKSxxKSx5KF8oMTQyOCkscSkseShfKDYwMzgpLHEpLHkoXyg5NDkzKSxxKSx5KF8oMzE1MykscSkseShfKDg2NTApLHEpLHkoXyg2MTc3KSxxKSx5KF8oMTM5NSkscSl9LDMzMDI6ZnVuY3Rpb24o''@;'; put 'put ''dWUscSl7InVzZSBzdHJpY3QiO3ZhciBfPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbih5LGcsQix3KXtyZXR1cm4gbmV3KEJ8fChCPVByb21pc2UpKShmdW5jdGlvbihGLE8pe2Z1bmN0aW9uIHooSyl7dHJ5e0wody5uZXh0KEspKX1jYXRjaChVKXtPKFUpfX1mdW5jdGlvbiBOKEsp''@;'; put 'put ''e3RyeXtMKHcudGhyb3coSykpfWNhdGNoKFUpe08oVSl9fWZ1bmN0aW9uIEwoSyl7Sy5kb25lP0YoSy52YWx1ZSk6ZnVuY3Rpb24gUChGKXtyZXR1cm4gRiBpbnN0YW5jZW9mIEI/RjpuZXcgQihmdW5jdGlvbihPKXtPKEYpfSl9KEsudmFsdWUpLnRoZW4oeixOKX1MKCh3PXcuYXBwbHkoeSxn''@;'; put 'put ''fHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuYXBwZW5kRXh0cmFSZXNwb25zZUF0dHJpYnV0ZXM9dm9pZCAwLHEuYXBwZW5kRXh0cmFSZXNwb25zZUF0dHJpYnV0ZXM9ZnVuY3Rpb24gSSh5LGcpe3JldHVybiBfKHRo''@;'; put 'put ''aXMsdm9pZCAwLHZvaWQgMCxmdW5jdGlvbiooKXtsZXQgQj17fTtpZihnPy5sZW5ndGgpe2NvbnN0IHc9Zy5yZWR1Y2UoKFAsRik9PihQW0ZdPXlbRl0sUCkse30pO0I9T2JqZWN0LmFzc2lnbih7cmVzdWx0OnkucmVzdWx0fSx3KX1lbHNlIEI9eS5yZXN1bHQ7cmV0dXJuIEJ9KX19LDc5MjI6''@;'; put 'put ''ZnVuY3Rpb24odWUscSl7InVzZSBzdHJpY3QiO3ZhciBfPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbih5LGcsQix3KXtyZXR1cm4gbmV3KEJ8fChCPVByb21pc2UpKShmdW5jdGlvbihGLE8pe2Z1bmN0aW9uIHooSyl7dHJ5e0wody5uZXh0KEspKX1jYXRjaChVKXtPKFUpfX1mdW5j''@;'; put 'put ''dGlvbiBOKEspe3RyeXtMKHcudGhyb3coSykpfWNhdGNoKFUpe08oVSl9fWZ1bmN0aW9uIEwoSyl7Sy5kb25lP0YoSy52YWx1ZSk6ZnVuY3Rpb24gUChGKXtyZXR1cm4gRiBpbnN0YW5jZW9mIEI/RjpuZXcgQihmdW5jdGlvbihPKXtPKEYpfSl9KEsudmFsdWUpLnRoZW4oeixOKX1MKCh3PXcu''@;'; put 'put ''YXBwbHkoeSxnfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuYXN5bmNGb3JFYWNoPXZvaWQgMCxxLmFzeW5jRm9yRWFjaD1mdW5jdGlvbiBJKHksZyl7cmV0dXJuIF8odGhpcyx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9u''@;'; put 'put ''Kigpe2ZvcihsZXQgQj0wO0I8eS5sZW5ndGg7QisrKXlpZWxkIGcoeVtCXSxCLHkpfSl9fSwzNzkzOih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5jb21wYXJlVGltZXN0YW1wcz12b2lkIDAscS5jb21wYXJl''@;'; put 'put ''VGltZXN0YW1wcz0oSSx5KT0+eS50aW1lc3RhbXAuZ2V0VGltZSgpLUkudGltZXN0YW1wLmdldFRpbWUoKX0sMjQwMjoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDUxMDgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLmlzRm9ybWF0''@;'; put 'put ''c1RhYmxlPXEuY29udmVydFRvQ1NWPXZvaWQgMDtjb25zdCB5PV8oNjQ2NyksZz1fKDk3NzgpO3EuY29udmVydFRvQ1NWPShGLE8pPT57dmFyIHo7aWYoIUZbT10pe2NvbnN0IGVlPSgwLGcucHJlZml4TWVzc2FnZSkoIk5vIHRhYmxlIHByb3ZpZGVkIHRvIGJlIGNvbnZlcnRlZCB0byBDU1Yu''@;'; put 'put ''IiwiRXJyb3Igd2hpbGUgY29udmVydGluZyB0byBDU1YuICIpO3Rocm93InN0cmluZyI9PXR5cGVvZiBlZT9uZXcgRXJyb3IoZWUpOmVlfWNvbnN0IE49RltPXTtpZighQXJyYXkuaXNBcnJheShOKSlyZXR1cm4iIjtsZXQgVSxMPW51bGw9PT0oej1GW2AkJHtPfWBdKXx8dm9pZCAwPT09ej92''@;'; put 'put ''b2lkIDA6ei5mb3JtYXRzLEs9W10sVz0hMTtMJiYoSz1PYmplY3Qua2V5cyhMKS5tYXAoZWU9PmAke2VlfToke0xbZWVdfWApKTtjb25zdCBZPU9iamVjdC5rZXlzKE5bMF0pO3JldHVybiBZLmZvckVhY2goZWU9PntpZighTHx8IU9iamVjdC5rZXlzKEwpLmluY2x1ZGVzKGVlKSl7bGV0IEo9''@;'; put 'put ''ITEscmU9ITE7aWYoTi5mb3JFYWNoKGllPT57bnVsbD09PWllW2VlXXx8Im51bWJlciI9PXR5cGVvZiBpZVtlZV0/Sj0hMDoic3RyaW5nIj09dHlwZW9mIGllW2VlXSYmKDAseS5pc1NwZWNpYWxNaXNzaW5nKShpZVtlZV0pJiYocmU9ITApfSksSiYmcmUpSy5wdXNoKGAke2VlfTpiZXN0LmAp''@;'; put 'put ''LEx8fChMPXt9KSxMW2VlXT0iYmVzdC4iO2Vsc2V7bGV0IGllPW51bGwsbGU9ITEsbWU9LTE7Y29uc3QgX2U9Ti5tYXAoKFRlLFNlKT0+e2lmKFRlW2VlXXx8IiI9PT1UZVtlZV0pe2xldCB6ZTtyZXR1cm4gaWU/bGV8fChsZT0oIiI9PT1UZVtlZV18fCJzdHJpbmciPT10eXBlb2YgVGVbZWVd''@;'; put 'put ''PyJjaGFycyI6Im51bWJlciIpIT09aWUsbWU9bGU/U2UrMTotMSk6aWU9IiI9PT1UZVtlZV18fCJzdHJpbmciPT10eXBlb2YgVGVbZWVdPyJjaGFycyI6Im51bWJlciIsInN0cmluZyI9PXR5cGVvZiBUZVtlZV0mJih6ZT1QKFRlW2VlXSkpLHplfX0pLnNvcnQoKFRlLFNlKT0+U2UtVGUpWzBd''@;'; put 'put ''O19lJiZfZT4zMjc2NSYmKFc9ITApLGxlJiZJLmVycm9yKGBSb3cgKCR7bWV9KSwgQ29sdW1uICgke2VlfSkgaGFzIG1peGVkIHR5cGVzOiBFUlJPUmApLEsucHVzaChgJHtlZX06JHsiY2hhcnMiPT09aWU/IiRjaGFyIjoiIn0ke19lfHwoImNoYXJzIj09PWllPyIxIjoiYmVzdCIpfS5gKX19''@;'; put 'put ''fSksTCYmKEs9Sy5zb3J0KChlZSxKKT0+WS5pbmRleE9mKGVlLnJlcGxhY2UoLzouKi8sIiIpKS1ZLmluZGV4T2YoSi5yZXBsYWNlKC86LiovLCIiKSkpKSxXPyJFUlJPUjogTEFSR0UgU1RSSU5HIExFTkdUSCI6KFU9Ti5tYXAoZWU9Pk9iamVjdC5rZXlzKGVlKS5tYXAoKHJlLGllKT0+e2xl''@;'; put 'put ''dCBsZTtjb25zdCBtZT1lZVtyZV07aWYoIm51bWJlciI9PXR5cGVvZiBtZSlyZXR1cm4gbWU7aWYobGU9bnVsbD09PW1lPyIiOm1lLEwmJiJiZXN0LiI9PT1MW3JlXSl7aWYobGUmJiEoMCx5LmlzU3BlY2lhbE1pc3NpbmcpKGxlKSl0aHJvdyBuZXcgRXJyb3IoIkEgU3BlY2lhbCBtaXNzaW5n''@;'; put 'put ''IHZhbHVlIGNhbiBvbmx5IGJlIGEgc2luZ2xlIGNoYXJhY3RlciBmcm9tICdBJyB0byAnWicsICdfJywgJy5bYS16XScsICcuXyciKTtyZXR1cm5gJHtsZS5pbmNsdWRlcygiLiIpPyIiOiIuIn0ke2xlLnRvTG93ZXJDYXNlKCl9YH1yZXR1cm4gbGU9bGUucmVwbGFjZSgvIi9nLCciIicpLGxl''@;'; put 'put ''PWAiJHtsZX0iYCxsZS5zdWJzdHJpbmcoMSxsZS5sZW5ndGgtMSkuc2VhcmNoKC8oXHR8XG58XHJ8LHxcJ3xcIikvZ20pPDAmJihsZT1sZS5zdWJzdHJpbmcoMSxsZS5sZW5ndGgtMSkpLGxlPWxlLnJlcGxhY2UoL1xyXG4vZ20sIlxuIiksIiI9PT1sZSYmS1tpZV0uaW5jbHVkZXMoImJlc3Qi''@;'; put 'put ''KSYmKGxlPSIuIiksbGV9KS5qb2luKCIsIikpLEsuam9pbigiLCIpLnJlcGxhY2UoLywvZywiICIpKyJcclxuIitVLmpvaW4oIlxyXG4iKSl9LHEuaXNGb3JtYXRzVGFibGU9Rj0+L15cJC4qLy50ZXN0KEYpO2NvbnN0IFA9Rj0+e2xldCBPPUYubGVuZ3RoO2ZvcihsZXQgej1GLmxlbmd0aC0x''@;'; put 'put ''O3o+PTA7ei0tKXtjb25zdCBOPUYuY2hhckNvZGVBdCh6KTtOPjEyNyYmTjw9MjA0Nz9PKys6Tj4yMDQ3JiZOPD02NTUzNSYmKE8rPTIpLE4+PTU2MzIwJiZOPD01NzM0MyYmei0tfXJldHVybiBPfX0sNjExNjpmdW5jdGlvbih1ZSxxLF8peyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlz''@;'; put 'put ''Ll9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oQil7cmV0dXJuIEImJkIuX19lc01vZHVsZT9COntkZWZhdWx0OkJ9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5jcmVhdGVBeGlvc0luc3RhbmNlPXZvaWQgMDtjb25zdCB5PUkoXyg3MjE4KSk7''@;'; put 'put ''cS5jcmVhdGVBeGlvc0luc3RhbmNlPShCLHcpPT55LmRlZmF1bHQuY3JlYXRlKHtiYXNlVVJMOkIsaHR0cHNBZ2VudDp3fSl9LDk4MjU6KHVlLHEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLmRlbGF5PXZvaWQgMCxx''@;'; put 'put ''LmRlbGF5PUk9Pm5ldyBQcm9taXNlKHk9PnNldFRpbWVvdXQoeSxJKSl9LDk5MDpmdW5jdGlvbih1ZSxxLF8peyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDQxNTUpLHk9Xyg1MTA4KSxnPXRoaXMmJnRoaXMuX19hd2FpdGVyfHxmdW5jdGlvbihGLE8seixOKXtyZXR1cm4gbmV3KHp8fCh6PVByb21p''@;'; put 'put ''c2UpKShmdW5jdGlvbihLLFUpe2Z1bmN0aW9uIFcoZWUpe3RyeXtYKE4ubmV4dChlZSkpfWNhdGNoKEope1UoSil9fWZ1bmN0aW9uIFkoZWUpe3RyeXtYKE4udGhyb3coZWUpKX1jYXRjaChKKXtVKEopfX1mdW5jdGlvbiBYKGVlKXtlZS5kb25lP0soZWUudmFsdWUpOmZ1bmN0aW9uIEwoSyl7''@;'; put 'put ''cmV0dXJuIEsgaW5zdGFuY2VvZiB6P0s6bmV3IHooZnVuY3Rpb24oVSl7VShLKX0pfShlZS52YWx1ZSkudGhlbihXLFkpfVgoKE49Ti5hcHBseShGLE98fFtdKSkubmV4dCgpKX0pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5mZXRjaExvZz1x''@;'; put 'put ''LmZldGNoTG9nQnlDaHVua3M9dm9pZCAwO2NvbnN0IEI9Xyg5Nzc4KTtxLmZldGNoTG9nQnlDaHVua3M9KEYsTyx6LE4pPT5nKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe3JldHVybiB5aWVsZCgwLHEuZmV0Y2hMb2cpKEYsTyx6LDAsTil9KSxxLmZldGNoTG9nPShGLE8seixO''@;'; put 'put ''LEwpPT5nKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEs9SS5sb2dnZXJ8fHk7bGV0IFU9IiI7Y29uc3QgVz1MPDFlND9MOjFlNDtkb3tLLmluZm8oYEZldGNoaW5nIGxvZ3MgZnJvbSBsaW5lIG5vOiAke04rMX0gdG8gJHtOK1d9IG9mICR7TH0uYCk7Y29uc3QgWT15''@;'; put 'put ''aWVsZCBGLmdldChgJHt6fT9zdGFydD0ke059JmxpbWl0PSR7V31gLE8pLnRoZW4oZWU9PmVlLnJlc3VsdCkuY2F0Y2goZWU9Pnt0aHJvdygwLEIucHJlZml4TWVzc2FnZSkoZWUsIkVycm9yIHdoaWxlIGdldHRpbmcgbG9nLiAiKX0pO2lmKDA9PT1ZLml0ZW1zLmxlbmd0aClicmVhaztVKz1Z''@;'; put 'put ''Lml0ZW1zLm1hcChlZT0+ZWUubGluZSkuam9pbigiXG4iKSxOKz1XfXdoaWxlKE48TCk7cmV0dXJuIFV9KX0sNzE0Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLmZvcm1hdERhdGFGb3JSZXF1ZXN0PXZv''@;'; put 'put ''aWQgMDtjb25zdCBJPV8oMjQwMikseT1fKDQ3OTkpO3EuZm9ybWF0RGF0YUZvclJlcXVlc3Q9Qj0+e2NvbnN0IHc9W107bGV0IFA9MDtjb25zdCBGPXt9O2Zvcihjb25zdCBPIGluIEIpe2lmKCgwLEkuaXNGb3JtYXRzVGFibGUpKE8pJiZPYmplY3Qua2V5cyhCKS5pbmNsdWRlcyhPLnJlcGxh''@;'; put 'put ''Y2UoL15cJC8sIiIpKSljb250aW51ZTtQKyssKDAsSS5pc0Zvcm1hdHNUYWJsZSkoTyl8fHcucHVzaChPKTtjb25zdCB6PSgwLEkuY29udmVydFRvQ1NWKShCLE8pO2lmKCJFUlJPUjogTEFSR0UgU1RSSU5HIExFTkdUSCI9PT16KXRocm93IG5ldyBFcnJvcigiVGhlIG1heCBsZW5ndGggb2Yg''@;'; put 'put ''YSBzdHJpbmcgdmFsdWUgaW4gU0FTanMgaXMgMzI3NjUgY2hhcmFjdGVycy4iKTtpZih6Lmxlbmd0aD4xNmUzKXtjb25zdCBOPSgwLHkuc3BsaXRDaHVua3MpKHopO0ZbYHNhc2pzJHtQfWRhdGEwYF09Ti5sZW5ndGgsTi5mb3JFYWNoKChMLEspPT57Rltgc2FzanMke1B9ZGF0YSR7SysxfWBd''@;'; put 'put ''PUx9KX1lbHNlIEZbYHNhc2pzJHtQfWRhdGFgXT16fXJldHVybiBGLnNhc2pzX3RhYmxlcz13LmpvaW4oIiAiKSxGfX0sODQ1ODpmdW5jdGlvbih1ZSxxLF8peyJ1c2Ugc3RyaWN0Ijt2YXIgST10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24odyl7cmV0dXJuIHcmJncuX19l''@;'; put 'put ''c01vZHVsZT93OntkZWZhdWx0Ond9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5nZXRGb3JtRGF0YT12b2lkIDA7Y29uc3QgeT1fKDU5MjgpLGc9SShfKDYyMzApKTtxLmdldEZvcm1EYXRhPSgpPT4oMCx5LmlzTm9kZSkoKT9uZXcgZy5kZWZh''@;'; put 'put ''dWx0Om5ldyBGb3JtRGF0YX0sMzI2MDoodWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuZ2V0VXNlckxhbmd1YWdlPXZvaWQgMCxxLmdldFVzZXJMYW5ndWFnZT0oKT0+d2luZG93Lm5hdmlnYXRvci5sYW5ndWFn''@;'; put 'put ''ZXx8d2luZG93Lm5hdmlnYXRvci51c2VyTGFuZ3VhZ2V9LDE4ODQ6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuZ2V0VmFsaWRKc29uPXZvaWQgMDtjb25zdCBJPV8oMTM5NSk7cS5nZXRWYWxpZEpzb249''@;'; put 'put ''Zz0+e3RyeXtpZihudWxsPT1nKXRocm93IG5ldyBJLkludmFsaWRKc29uRXJyb3I7aWYoQXJyYXkuaXNBcnJheShnKSl0aHJvdyBuZXcgSS5Kc29uUGFyc2VBcnJheUVycm9yO3JldHVybiJvYmplY3QiPT10eXBlb2YgZz9nOiIiPT09Zz97fTpKU09OLnBhcnNlKGcpfWNhdGNoKEIpe3Rocm93''@;'; put 'put ''IEIgaW5zdGFuY2VvZiBJLkpzb25QYXJzZUFycmF5RXJyb3I/QjpuZXcgSS5JbnZhbGlkSnNvbkVycm9yfX19LDU5Mjg6ZnVuY3Rpb24odWUscSxfKXsidXNlIHN0cmljdCI7dmFyIEk9dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGcsQix3LFAp''@;'; put 'put ''e3ZvaWQgMD09PVAmJihQPXcpO3ZhciBGPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoQix3KTsoIUZ8fCgiZ2V0ImluIEY/IUIuX19lc01vZHVsZTpGLndyaXRhYmxlfHxGLmNvbmZpZ3VyYWJsZSkpJiYoRj17ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gQlt3''@;'; put 'put ''XX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZyxQLEYpfTpmdW5jdGlvbihnLEIsdyxQKXt2b2lkIDA9PT1QJiYoUD13KSxnW1BdPUJbd119KSx5PXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihnLEIpe2Zvcih2YXIgdyBpbiBnKSJkZWZhdWx0IiE9PXcmJiFPYmplY3QucHJv''@;'; put 'put ''dG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoQix3KSYmSShCLGcsdyl9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx5KF8oMzMwMikscSkseShfKDc5MjIpLHEpLHkoXygzNzkzKSxxKSx5KF8oMjQwMikscSkseShfKDYxMTYpLHEpLHkoXyg5ODI1''@;'; put 'put ''KSxxKSx5KF8oOTkwKSxxKSx5KF8oMTg4NCkscSkseShfKDQyNDMpLHEpLHkoXygyNTcpLHEpLHkoXygyKSxxKSx5KF8oMjYxNSkscSkseShfKDI5MjApLHEpLHkoXygyNDIyKSxxKSx5KF8oMzEpLHEpLHkoXyg2NTE1KSxxKSx5KF8oNjQxNikscSkseShfKDI4MTMpLHEpLHkoXyg5ODk2KSxx''@;'; put 'put ''KSx5KF8oNDc5OSkscSkseShfKDQ1MTYpLHEpLHkoXyg4NDU4KSxxKSx5KF8oMzI2MCkscSl9LDQyNDM6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg0MTU1KTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5pc05vZGU9dm9pZCAwLHEu''@;'; put 'put ''aXNOb2RlPSgpPT50eXBlb2YgSTwidSImJm51bGwhPUkudmVyc2lvbnMmJm51bGwhPUkudmVyc2lvbnMubm9kZX0sMjU3Oih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5pc1JlbGF0aXZlUGF0aD12b2lkIDAs''@;'; put 'put ''cS5pc1JlbGF0aXZlUGF0aD1JPT4hIUkmJiFJLnN0YXJ0c1dpdGgoIi8iKX0sMjoodWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuaXNVcmk9dm9pZCAwLHEuaXNVcmk9ST0+L15cL2ZvbGRlcnNcL2ZvbGRlcnNc''@;'; put 'put ''Ly8udGVzdChJKX0sMjYxNToodWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuaXNVcmw9dm9pZCAwLHEuaXNVcmw9ST0+e2NvbnN0IHk9WyJodHRwOiIsImh0dHBzOiJdO3RyeXtjb25zdCBnPW5ldyBVUkwoSSk7''@;'; put 'put ''aWYoIXkuaW5jbHVkZXMoZy5wcm90b2NvbCkpcmV0dXJuITF9Y2F0Y2h7cmV0dXJuITF9cmV0dXJuITB9fSwxMjEwOmZ1bmN0aW9uKHVlLHEpeyJ1c2Ugc3RyaWN0Ijt2YXIgXz10aGlzJiZ0aGlzLl9fYXdhaXRlcnx8ZnVuY3Rpb24oRixPLHosTil7cmV0dXJuIG5ldyh6fHwoej1Qcm9taXNl''@;'; put 'put ''KSkoZnVuY3Rpb24oSyxVKXtmdW5jdGlvbiBXKGVlKXt0cnl7WChOLm5leHQoZWUpKX1jYXRjaChKKXtVKEopfX1mdW5jdGlvbiBZKGVlKXt0cnl7WChOLnRocm93KGVlKSl9Y2F0Y2goSil7VShKKX19ZnVuY3Rpb24gWChlZSl7ZWUuZG9uZT9LKGVlLnZhbHVlKTpmdW5jdGlvbiBMKEspe3Jl''@;'; put 'put ''dHVybiBLIGluc3RhbmNlb2Ygej9LOm5ldyB6KGZ1bmN0aW9uKFUpe1UoSyl9KX0oZWUudmFsdWUpLnRoZW4oVyxZKX1YKChOPU4uYXBwbHkoRixPfHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEub3BlbkxvZ2luUHJv''@;'; put 'put ''bXB0PXZvaWQgMDt2YXIgST1mdW5jdGlvbihGKXtyZXR1cm4gRi5zdHlsZXM9InNhc2pzQWRhcHRlclN0eWxlcyIsRi5vdmVybGF5PSJzYXNqc0FkYXB0ZXJMb2dpblByb21wdEJHIixGLmRpYWxvZz0ic2FzanNBZGFwdGVyTG9naW5Qcm9tcHQiLEZ9KEl8fHt9KTtjb25zdCB5PSJzYXNqcy1h''@;'; put 'put ''ZGFwdGVyIixnPXtwb3BVcDpgJHt5fXBvcFVwYCxwb3BVcEJHOmAke3l9cG9wVXBCR2B9O3Eub3BlbkxvZ2luUHJvbXB0PSgpPT5uZXcgUHJvbWlzZShGPT5fKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IE89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtP''@;'; put 'put ''LmlkPUkuc3R5bGVzLE8uaW5uZXJUZXh0PVA7Y29uc3Qgej1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt6LmlkPUkub3ZlcmxheSx6LmNsYXNzTGlzdC5hZGQoZy5wb3BVcEJHKTtjb25zdCBOPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO04uaWQ9SS5kaWFsb2csTi5jbGFz''@;'; put 'put ''c0xpc3QuYWRkKGcucG9wVXApO2NvbnN0IEw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaDEiKTtMLmlubmVyVGV4dD0iU2Vzc2lvbiBFeHBpcmVkISIsTi5hcHBlbmRDaGlsZChMKTtjb25zdCBLPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpLFU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVu''@;'; put 'put ''dCgic3BhbiIpO1UuaW5uZXJUZXh0PSJZb3UgbmVlZCB0byByZWxvZ2luLCBjbGljayBPSyB0byBsb2dpbi4iLEsuYXBwZW5kQ2hpbGQoVSksTi5hcHBlbmRDaGlsZChLKTtjb25zdCBXPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJ1dHRvbiIpO1cuY2xhc3NMaXN0LmFkZCgiY2FuY2VsIiks''@;'; put 'put ''Vy5pbm5lclRleHQ9IkNhbmNlbCIsVy5vbmNsaWNrPSgpPT57dygpLEYoITEpfSxOLmFwcGVuZENoaWxkKFcpO2NvbnN0IFk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnV0dG9uIik7WS5jbGFzc0xpc3QuYWRkKCJjb25maXJtIiksWS5pbm5lclRleHQ9Ik9rIixZLm9uY2xpY2s9KCk9Pnt3''@;'; put 'put ''KCksRighMCl9LE4uYXBwZW5kQ2hpbGQoWSksZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz0iaGlkZGVuIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKE8pLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoeiksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChOKX0pKTtjb25zdCB3PSgp''@;'; put 'put ''PT57T2JqZWN0LnZhbHVlcyhJKS5mb3JFYWNoKEY9Pnt2YXIgTztjb25zdCB6PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKEYpO251bGw9PT0oTz16Py5wYXJlbnROb2RlKXx8dm9pZCAwPT09T3x8Ty5yZW1vdmVDaGlsZCh6KX0pLGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9ImF1dG8i''@;'; put 'put ''fSxQPWBcbi4ke2cucG9wVXBCR30gLFxuLiR7Zy5wb3BVcH0ge1xuICB6LWluZGV4OiAxMDAwMDtcbn1cbi4ke2cucG9wVXB9IHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1i''@;'; put 'put ''b3g7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogNDAlO1xuICBsZWZ0OiA1MCU7XG4gIHBhZGRpbmc6IDA7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgZm9udC1mYW1pbHk6ICdQVCBTYW5zJywgc2Fucy1zZXJpZjtcbiAgY29sb3I6ICNmZmY7XG4gIGJv''@;'; put 'put ''cmRlci1zdHlsZTogbm9uZTtcbiAgei1pbmRleDogOTk5O1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7XG4gIG1hcmdpbjogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC13aWR0aDogMzAwcHg7XG4gIGhlaWdodDogYXV0bztcbiAgbWF4''@;'; put 'put ''LWhlaWdodDogMzAwcHg7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xufVxuLiR7Zy5wb3BVcH0gPiBoMSB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXIt''@;'; put 'put ''Ym94O1xuICBwYWRkaW5nOiA1cHg7XG4gIG1pbi1oZWlnaHQ6IDQwcHg7XG4gIGZvbnQtc2l6ZTogMS4yZW07XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIGNvbG9yOiAjZmZmO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgYm9y''@;'; put 'put ''ZGVyLXN0eWxlOiBub25lO1xuICBib3JkZXItd2lkdGg6IDVweDtcbiAgYm9yZGVyLWNvbG9yOiBibGFjaztcbn1cbi4ke2cucG9wVXB9ID4gZGl2IHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogY2FsYygxMDAlIC0xMDhweCk7XG4gIG1hcmdpbjogMDtcbiAgZGlzcGxheTogYmxvY2s7''@;'; put 'put ''XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBwYWRkaW5nOiA1JTtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBib3JkZXItd2lkdGg6IDFweDtcbiAgYm9yZGVy''@;'; put 'put ''LWNvbG9yOiAjY2NjO1xuICBib3JkZXItc3R5bGU6IG5vbmUgbm9uZSBzb2xpZCBub25lO1xuICBvdmVyZmxvdzogYXV0bztcbn1cbi4ke2cucG9wVXB9ID4gZGl2ID4gc3BhbiB7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGw7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQt''@;'; put 'put ''Ym94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIHdpZHRoOiAzMDBweDtcbiAgaGVpZ2h0OiAxMDhweDtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgYm9yZGVyLXN0eWxlOiBu''@;'; put 'put ''b25lO1xufVxuLiR7Zy5wb3BVcH0gLmNhbmNlbCB7XG4gIGZsb2F0OiBsZWZ0O1xufVxuLiR7Zy5wb3BVcH0gLmNvbmZpcm0ge1xuICBmbG9hdDogcmlnaHQ7XG59XG4uJHtnLnBvcFVwfSA+IGJ1dHRvbiB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC13ZWJraXQtYm94LXNpemlu''@;'; put 'put ''ZzogYm9yZGVyLWJveDtcbiAgLW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDEwcHg7XG4gIHdpZHRoOiA1MCU7XG4gIGJvcmRlcjogMXB4IG5vbmUgI2NjYztcbiAgY29sb3I6ICNmZmY7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICBj''@;'; put 'put ''dXJzb3I6IHBvaW50ZXI7XG4gIGhlaWdodDogNTBweDtcbiAgYmFja2dyb3VuZDogcmdiYSgxLCAxLCAxLCAwLjIpO1xufVxuLiR7Zy5wb3BVcH0gPiBidXR0b246aG92ZXIge1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7XG59XG4uJHtnLnBvcFVwQkd9IHtcbiAgZGlzcGxh''@;'; put 'put ''eTogYmxvY2s7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIG9wYWNpdHk6IDAuOTU7XG4gIHotaW5kZXg6IDUwO1xuICBiYWNrZ3JvdW5kLWlt''@;'; put 'put ''YWdlOiByYWRpYWwtZ3JhZGllbnQoIzAzNzhjZCwgIzAxMjAzNik7XG59XG5gfSwyOTIwOih1ZSxxKT0+eyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5uZWVkc1JldHJ5PXZvaWQgMCxxLm5lZWRzUmV0cnk9ST0+ISFJJiYo''@;'; put 'put ''SS5pbmNsdWRlcygnImVycm9yQ29kZSI6NDAzJykmJkkuaW5jbHVkZXMoIl9jc3JmIikmJkkuaW5jbHVkZXMoIlgtQ1NSRi1UT0tFTiIpfHxJLmluY2x1ZGVzKCcic3RhdHVzIjo0MDMnKSYmSS5pbmNsdWRlcygnImVycm9yIjoiRm9yYmlkZGVuIicpfHxJLmluY2x1ZGVzKCcic3RhdHVzIjo0''@;'; put 'put ''NDknKSYmSS5pbmNsdWRlcygiQXV0aGVudGljYXRpb24gc3VjY2VzcywgcmV0cnkgb3JpZ2luYWwgcmVxdWVzdCIpKX0sMjQyMjoodWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEucGFyc2VHZW5lcmF0ZWRDb2Rl''@;'; put 'put ''PXZvaWQgMCxxLnBhcnNlR2VuZXJhdGVkQ29kZT1JPT5JLnNwbGl0KCJcbiIpLmZpbHRlcih3PT53LnRyaW0oKS5zdGFydHNXaXRoKCJNUFJJTlQiKSkuam9pbigiXHJcbiIpfSwzMToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDUxMDgpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShx''@;'; put 'put ''LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLnBhcnNlU2FzVml5YUxvZz12b2lkIDAscS5wYXJzZVNhc1ZpeWFMb2c9Zz0+e2xldCBCO3RyeXtCPWcuaXRlbXM/Zy5pdGVtcy5tYXAodz0+dy5saW5lKS5qb2luKCJcbiIpOkpTT04uc3RyaW5naWZ5KGcpfWNhdGNoKHcpe0kuZXJyb3IoIkFu''@;'; put 'put ''IGVycm9yIGhhcyBvY2N1cnJlZCB3aGlsZSBwYXJzaW5nIHRoZSBsb2cgcmVzcG9uc2UiLHcpLEI9Z31yZXR1cm4gQn19LDY1MTU6KHVlLHEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLnBhcnNlU291cmNlQ29kZT12''@;'; put 'put ''b2lkIDAscS5wYXJzZVNvdXJjZUNvZGU9ST0+SS5zcGxpdCgiXG4iKS5maWx0ZXIoQj0+Qi50cmltKCkuc3Vic3RyaW5nKDAsMTApLnRyaW1TdGFydCgpLm1hdGNoKC9eXGQvKSkuam9pbigiXHJcbiIpfSw2NDE2OmZ1bmN0aW9uKHVlLHEsXyl7InVzZSBzdHJpY3QiO3ZhciBJPXRoaXMmJnRo''@;'; put 'put ''aXMuX19hd2FpdGVyfHxmdW5jdGlvbihCLHcsUCxGKXtyZXR1cm4gbmV3KFB8fChQPVByb21pc2UpKShmdW5jdGlvbih6LE4pe2Z1bmN0aW9uIEwoVyl7dHJ5e1UoRi5uZXh0KFcpKX1jYXRjaChZKXtOKFkpfX1mdW5jdGlvbiBLKFcpe3RyeXtVKEYudGhyb3coVykpfWNhdGNoKFkpe04oWSl9''@;'; put 'put ''fWZ1bmN0aW9uIFUoVyl7Vy5kb25lP3ooVy52YWx1ZSk6ZnVuY3Rpb24gTyh6KXtyZXR1cm4geiBpbnN0YW5jZW9mIFA/ejpuZXcgUChmdW5jdGlvbihOKXtOKHopfSl9KFcudmFsdWUpLnRoZW4oTCxLKX1VKChGPUYuYXBwbHkoQix3fHxbXSkpLm5leHQoKSl9KX07T2JqZWN0LmRlZmluZVBy''@;'; put 'put ''b3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEucGFyc2VTYXNWaXlhRGVidWdSZXNwb25zZT12b2lkIDA7Y29uc3QgeT1fKDU5MjgpO3EucGFyc2VTYXNWaXlhRGVidWdSZXNwb25zZT0oQix3LFApPT5JKHZvaWQgMCx2b2lkIDAsdm9pZCAwLGZ1bmN0aW9uKigpe2NvbnN0IEY9''@;'; put 'put ''Qi5zcGxpdCgvPGlmcmFtZSBzdHlsZT0id2lkdGg6IDk5JTsgaGVpZ2h0OiA1MDBweCIgc3JjPSJ8PGlmcmFtZSBzdHlsZT0id2lkdGg6IDk5JTsgaGVpZ2h0OiA1MDBweDsgYmFja2dyb3VuZC1jb2xvcjpDYW52YXM7IiBzcmM9LylbMV0sTz1GP0Yuc3BsaXQoLyI+PFwvaWZyYW1lPnw+PFwv''@;'; put 'put ''aWZyYW1lPi8pWzBdOm51bGw7aWYoIU8pdGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gZmluZCB3ZWJvdXQgZmlsZSBVUkwuIik7cmV0dXJuIHcuZ2V0KFArTyx2b2lkIDAsInRleHQvcGxhaW4iKS50aGVuKHo9PigwLHkuZ2V0VmFsaWRKc29uKSh6LnJlc3VsdCkpfSl9LDI4MTM6KHVlLHEs''@;'; put 'put ''Xyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg1MTA4KTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5wYXJzZVdlYm91dFJlc3BvbnNlPXZvaWQgMDtjb25zdCB5PV8oMTM5NSk7cS5wYXJzZVdlYm91dFJlc3BvbnNlPShCLHcpPT57bGV0IFA9IiI7''@;'; put 'put ''aWYoQi5pbmNsdWRlcygiPj53ZWJvdXRCRUdJTjw8IikpdHJ5e1A9Qi5zcGxpdCgiPj53ZWJvdXRCRUdJTjw8IilbMV0uc3BsaXQoIj4+d2Vib3V0RU5EPDwiKVswXX1jYXRjaChGKXtpZih3KXRocm93IG5ldyB5LldlYm91dFJlc3BvbnNlRXJyb3Iodyk7UD0iIixJLmVycm9yKEYpfXJldHVy''@;'; put 'put ''biBQfX0sMTE3MDoodWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuZXh0cmFjdFVzZXJMb25nTmFtZVNhczk9dm9pZCAwO2NvbnN0IF89WyJMb2cgT2ZmIl07cS5leHRyYWN0VXNlckxvbmdOYW1lU2FzOT15PT57''@;'; put 'put ''Y29uc3QgQj15Py5tYXRjaCgvInRpdGxlIjpccz8iLio/Ii8pO2xldCB3PUI/LlswXS5zcGxpdCgiOiIpWzFdLnRyaW0oKSxQPXc/LmluZGV4T2YoIiAiKTtyZXR1cm4gdz8oXy5tYXAoRj0+e2NvbnN0IE89dz8uaW5kZXhPZihGKXx8LTE7Tz4tMSYmKFA9TytGLmxlbmd0aCl9KSx3LnNsaWNl''@;'; put 'put ''KFAsLTEpLnRyaW0oKSk6InVua25vd24ifX0sOTg5NjoodWUscSk9PnsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHEsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHEuc2VyaWFsaXplPXZvaWQgMCxxLnNlcmlhbGl6ZT1JPT57Y29uc3QgeT1bXTtmb3IoY29uc3QgZyBpbiBJ''@;'; put 'put ''KWlmKEkuaGFzT3duUHJvcGVydHkoZykpaWYoSVtnXWluc3RhbmNlb2YgQXJyYXkpZm9yKGxldCBCPTAsdz1JW2ddLmxlbmd0aDtCPHc7QisrKXkucHVzaChlbmNvZGVVUklDb21wb25lbnQoZykrIj0iK2VuY29kZVVSSUNvbXBvbmVudChJW2ddW0JdKSk7ZWxzZSB5LnB1c2goZW5jb2RlVVJJ''@;'; put 'put ''Q29tcG9uZW50KGcpKyI9IitlbmNvZGVVUklDb21wb25lbnQoSVtnXSkpO3JldHVybiB5LmpvaW4oIiYiKX19LDQ3OTk6KHVlLHEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLnNwbGl0Q2h1bmtzPXZvaWQgMCxxLnNw''@;'; put 'put ''bGl0Q2h1bmtzPUk9Pntjb25zdCBnPU1hdGguY2VpbChJLmxlbmd0aC8xNmUzKSxCPW5ldyBBcnJheShnKTtmb3IobGV0IHc9MCxQPTA7dzxnOysrdyxQKz0xNmUzKUJbd109SS5zdWJzdHIoUCwxNmUzKTtyZXR1cm4gQn19LDQ1MTY6KHVlLHEpPT57InVzZSBzdHJpY3QiO09iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eShxLCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxxLnZhbGlkYXRlSW5wdXQ9cS5JTlZBTElEX1RBQkxFX1NUUlVDVFVSRT1xLk1PUkVfSU5GTz12b2lkIDAscS5NT1JFX0lORk89IkZvciBtb3JlIGluZm8gc2VlIGh0dHBzOi8vc2FzanMuaW8vc2FzanMtYWRhcHRlci8jcmVx''@;'; put 'put ''dWVzdC1yZXNwb25zZSIscS5JTlZBTElEX1RBQkxFX1NUUlVDVFVSRT1gUGFyYW1ldGVyIGRhdGEgY29udGFpbnMgaW52YWxpZCB0YWJsZSBzdHJ1Y3R1cmUuICR7cS5NT1JFX0lORk99YCxxLnZhbGlkYXRlSW5wdXQ9eT0+e2lmKG51bGw9PT15KXJldHVybntzdGF0dXM6ITAsbXNnOiIifTtp''@;'; put 'put ''Zigib2JqZWN0IiE9PUkoeSkpcmV0dXJue3N0YXR1czohMSxtc2c6cS5JTlZBTElEX1RBQkxFX1NUUlVDVFVSRX07Y29uc3QgZz1CPT5CLm1hdGNoKC9eXCQuKi8pJiZPYmplY3Qua2V5cyh5KS5pbmNsdWRlcyhCLnJlcGxhY2UoL15cJC8sIiIpKTtmb3IoY29uc3QgQiBpbiB5KXtpZighQi5t''@;'; put 'put ''YXRjaCgvXlthLXpBLVpfXS8pJiYhZyhCKSlyZXR1cm57c3RhdHVzOiExLG1zZzoiRmlyc3QgbGV0dGVyIG9mIHRhYmxlIHNob3VsZCBiZSBhbHBoYWJldCBvciB1bmRlcnNjb3JlLiJ9O2lmKCFCLm1hdGNoKC9eW2EtekEtWl9dW2EtekEtWjAtOV9dKiQvKSYmIWcoQikpcmV0dXJue3N0YXR1''@;'; put 'put ''czohMSxtc2c6IlRhYmxlIG5hbWUgc2hvdWxkIGJlIGFscGhhbnVtZXJpYy4ifTtpZihCLmxlbmd0aD4zMilyZXR1cm57c3RhdHVzOiExLG1zZzoiTWF4aW11bSBsZW5ndGggZm9yIHRhYmxlIG5hbWUgY291bGQgYmUgMzIgY2hhcmFjdGVycy4ifTtpZigiQXJyYXkiIT09SSh5W0JdKSYmIWco''@;'; put 'put ''QikpcmV0dXJue3N0YXR1czohMSxtc2c6cS5JTlZBTElEX1RBQkxFX1NUUlVDVFVSRX07aWYoQXJyYXkuaXNBcnJheSh5W0JdKSlmb3IoY29uc3QgdyBvZiB5W0JdKXtpZigib2JqZWN0IiE9PUkodykpcmV0dXJue3N0YXR1czohMSxtc2c6YFRhYmxlICR7Qn0gY29udGFpbnMgaW52YWxpZCBz''@;'; put 'put ''dHJ1Y3R1cmUuICR7cS5NT1JFX0lORk99YH07e2NvbnN0IFA9T2JqZWN0LmtleXModyk7Zm9yKGNvbnN0IEYgb2YgUClpZih2b2lkIDA9PT13W0ZdKXJldHVybntzdGF0dXM6ITEsbXNnOmBBIHJvdyBpbiB0YWJsZSAke0J9IGNvbnRhaW5zIGludmFsaWQgdmFsdWUuIENhbid0IGFzc2lnbiB1''@;'; put 'put ''bmRlZmluZWQgdG8gJHtGfS5gfX19fXJldHVybntzdGF0dXM6ITAsbXNnOiIifX07Y29uc3QgST15PT5BcnJheS5pc0FycmF5KHkpPyJBcnJheSI6dHlwZW9mIHl9LDg5ODE6KHVlLHEpPT57InVzZSBzdHJpY3QiO3EuZnJvbUNhbGxiYWNrPWZ1bmN0aW9uKF8pe3JldHVybiBPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoZnVuY3Rpb24oLi4uSSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIElbSS5sZW5ndGgtMV0pcmV0dXJuIG5ldyBQcm9taXNlKCh5LGcpPT57SS5wdXNoKChCLHcpPT5udWxsIT1CP2coQik6eSh3KSksXy5hcHBseSh0aGlzLEkpfSk7Xy5hcHBseSh0aGlzLEkpfSwibmFtZSIs''@;'; put 'put ''e3ZhbHVlOl8ubmFtZX0pfSxxLmZyb21Qcm9taXNlPWZ1bmN0aW9uKF8pe3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuY3Rpb24oLi4uSSl7Y29uc3QgeT1JW0kubGVuZ3RoLTFdO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB5KXJldHVybiBfLmFwcGx5KHRoaXMsSSk7SS5wb3AoKSxf''@;'; put 'put ''LmFwcGx5KHRoaXMsSSkudGhlbihnPT55KG51bGwsZykseSl9LCJuYW1lIix7dmFsdWU6Xy5uYW1lfSl9fSw0NTY0Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNzQxOCkseT1fKDcxMjkpLGc9L15bXHgwMC1ceDIwXHUwMGEwXHUxNjgwXHUyMDAwLVx1MjAwYVx1MjAyOFx1MjAy''@;'; put 'put ''OVx1MjAyZlx1MjA1Zlx1MzAwMFx1ZmVmZl0rLyxCPS9bXG5cclx0XS9nLHc9L15bQS1aYS16XVtBLVphLXowLTkrLS5dKjpcL1wvLyxQPS86XGQrJC8sRj0vXihbYS16XVthLXowLTkuKy1dKjopPyhcL1wvKT8oW1xcL10rKT8oW1xTXHNdKikvaSxPPS9eW2EtekEtWl06LztmdW5jdGlvbiB6''@;'; put 'put ''KHJlKXtyZXR1cm4ocmV8fCIiKS50b1N0cmluZygpLnJlcGxhY2UoZywiIil9dmFyIE49W1siIyIsImhhc2giXSxbIj8iLCJxdWVyeSJdLGZ1bmN0aW9uKGllLGxlKXtyZXR1cm4gVShsZS5wcm90b2NvbCk/aWUucmVwbGFjZSgvXFwvZywiLyIpOmllfSxbIi8iLCJwYXRobmFtZSJdLFsiQCIs''@;'; put 'put ''ImF1dGgiLDFdLFtOYU4sImhvc3QiLHZvaWQgMCwxLDFdLFsvOihcZCopJC8sInBvcnQiLHZvaWQgMCwxXSxbTmFOLCJob3N0bmFtZSIsdm9pZCAwLDEsMV1dLEw9e2hhc2g6MSxxdWVyeToxfTtmdW5jdGlvbiBLKHJlKXt2YXIgaWU7aWU9dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVv''@;'; put 'put ''ZiBfLmc8InUiP18uZzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fTt2YXIgVGUsbWU9e30sX2U9dHlwZW9mKHJlPXJlfHxpZS5sb2NhdGlvbnx8e30pO2lmKCJibG9iOiI9PT1yZS5wcm90b2NvbCltZT1uZXcgWCh1bmVzY2FwZShyZS5wYXRobmFtZSkse30pO2Vsc2UgaWYoInN0cmluZyI9PT1f''@;'; put 'put ''ZSlmb3IoVGUgaW4gbWU9bmV3IFgocmUse30pLEwpZGVsZXRlIG1lW1RlXTtlbHNlIGlmKCJvYmplY3QiPT09X2Upe2ZvcihUZSBpbiByZSlUZSBpbiBMfHwobWVbVGVdPXJlW1RlXSk7dm9pZCAwPT09bWUuc2xhc2hlcyYmKG1lLnNsYXNoZXM9dy50ZXN0KHJlLmhyZWYpKX1yZXR1cm4gbWV9''@;'; put 'put ''ZnVuY3Rpb24gVShyZSl7cmV0dXJuImZpbGU6Ij09PXJlfHwiZnRwOiI9PT1yZXx8Imh0dHA6Ij09PXJlfHwiaHR0cHM6Ij09PXJlfHwid3M6Ij09PXJlfHwid3NzOiI9PT1yZX1mdW5jdGlvbiBXKHJlLGllKXtyZT0ocmU9eihyZSkpLnJlcGxhY2UoQiwiIiksaWU9aWV8fHt9O3ZhciB6ZSxs''@;'; put 'put ''ZT1GLmV4ZWMocmUpLG1lPWxlWzFdP2xlWzFdLnRvTG93ZXJDYXNlKCk6IiIsX2U9ISFsZVsyXSxUZT0hIWxlWzNdLFNlPTA7cmV0dXJuIF9lP1RlPyh6ZT1sZVsyXStsZVszXStsZVs0XSxTZT1sZVsyXS5sZW5ndGgrbGVbM10ubGVuZ3RoKTooemU9bGVbMl0rbGVbNF0sU2U9bGVbMl0ubGVu''@;'; put 'put ''Z3RoKTpUZT8oemU9bGVbM10rbGVbNF0sU2U9bGVbM10ubGVuZ3RoKTp6ZT1sZVs0XSwiZmlsZToiPT09bWU/U2U+PTImJih6ZT16ZS5zbGljZSgyKSk6VShtZSk/emU9bGVbNF06bWU/X2UmJih6ZT16ZS5zbGljZSgyKSk6U2U+PTImJlUoaWUucHJvdG9jb2wpJiYoemU9bGVbNF0pLHtwcm90''@;'; put 'put ''b2NvbDptZSxzbGFzaGVzOl9lfHxVKG1lKSxzbGFzaGVzQ291bnQ6U2UscmVzdDp6ZX19ZnVuY3Rpb24gWChyZSxpZSxsZSl7aWYocmU9KHJlPXoocmUpKS5yZXBsYWNlKEIsIiIpLCEodGhpcyBpbnN0YW5jZW9mIFgpKXJldHVybiBuZXcgWChyZSxpZSxsZSk7dmFyIG1lLF9lLFRlLFNlLHpl''@;'; put 'put ''LFYscD1OLnNsaWNlKCksYj10eXBlb2YgaWUseD10aGlzLEM9MDtmb3IoIm9iamVjdCIhPT1iJiYic3RyaW5nIiE9PWImJihsZT1pZSxpZT1udWxsKSxsZSYmImZ1bmN0aW9uIiE9dHlwZW9mIGxlJiYobGU9eS5wYXJzZSksbWU9IShfZT1XKHJlfHwiIixpZT1LKGllKSkpLnByb3RvY29sJiYh''@;'; put 'put ''X2Uuc2xhc2hlcyx4LnNsYXNoZXM9X2Uuc2xhc2hlc3x8bWUmJmllLnNsYXNoZXMseC5wcm90b2NvbD1fZS5wcm90b2NvbHx8aWUucHJvdG9jb2x8fCIiLHJlPV9lLnJlc3QsKCJmaWxlOiI9PT1fZS5wcm90b2NvbCYmKDIhPT1fZS5zbGFzaGVzQ291bnR8fE8udGVzdChyZSkpfHwhX2Uuc2xh''@;'; put 'put ''c2hlcyYmKF9lLnByb3RvY29sfHxfZS5zbGFzaGVzQ291bnQ8Mnx8IVUoeC5wcm90b2NvbCkpKSYmKHBbM109Wy8oLiopLywicGF0aG5hbWUiXSk7QzxwLmxlbmd0aDtDKyspImZ1bmN0aW9uIiE9dHlwZW9mKFNlPXBbQ10pPyhWPVNlWzFdLChUZT1TZVswXSkhPVRlP3hbVl09cmU6InN0cmlu''@;'; put 'put ''ZyI9PXR5cGVvZiBUZT9+KHplPSJAIj09PVRlP3JlLmxhc3RJbmRleE9mKFRlKTpyZS5pbmRleE9mKFRlKSkmJigibnVtYmVyIj09dHlwZW9mIFNlWzJdPyh4W1ZdPXJlLnNsaWNlKDAsemUpLHJlPXJlLnNsaWNlKHplK1NlWzJdKSk6KHhbVl09cmUuc2xpY2UoemUpLHJlPXJlLnNsaWNlKDAs''@;'; put 'put ''emUpKSk6KHplPVRlLmV4ZWMocmUpKSYmKHhbVl09emVbMV0scmU9cmUuc2xpY2UoMCx6ZS5pbmRleCkpLHhbVl09eFtWXXx8bWUmJlNlWzNdJiZpZVtWXXx8IiIsU2VbNF0mJih4W1ZdPXhbVl0udG9Mb3dlckNhc2UoKSkpOnJlPVNlKHJlLHgpO2xlJiYoeC5xdWVyeT1sZSh4LnF1ZXJ5KSks''@;'; put 'put ''bWUmJmllLnNsYXNoZXMmJiIvIiE9PXgucGF0aG5hbWUuY2hhckF0KDApJiYoIiIhPT14LnBhdGhuYW1lfHwiIiE9PWllLnBhdGhuYW1lKSYmKHgucGF0aG5hbWU9ZnVuY3Rpb24gWShyZSxpZSl7aWYoIiI9PT1yZSlyZXR1cm4gaWU7Zm9yKHZhciBsZT0oaWV8fCIvIikuc3BsaXQoIi8iKS5z''@;'; put 'put ''bGljZSgwLC0xKS5jb25jYXQocmUuc3BsaXQoIi8iKSksbWU9bGUubGVuZ3RoLF9lPWxlW21lLTFdLFRlPSExLFNlPTA7bWUtLTspIi4iPT09bGVbbWVdP2xlLnNwbGljZShtZSwxKToiLi4iPT09bGVbbWVdPyhsZS5zcGxpY2UobWUsMSksU2UrKyk6U2UmJigwPT09bWUmJihUZT0hMCksbGUu''@;'; put 'put ''c3BsaWNlKG1lLDEpLFNlLS0pO3JldHVybiBUZSYmbGUudW5zaGlmdCgiIiksKCIuIj09PV9lfHwiLi4iPT09X2UpJiZsZS5wdXNoKCIiKSxsZS5qb2luKCIvIil9KHgucGF0aG5hbWUsaWUucGF0aG5hbWUpKSwiLyIhPT14LnBhdGhuYW1lLmNoYXJBdCgwKSYmVSh4LnByb3RvY29sKSYmKHgu''@;'; put 'put ''cGF0aG5hbWU9Ii8iK3gucGF0aG5hbWUpLEkoeC5wb3J0LHgucHJvdG9jb2wpfHwoeC5ob3N0PXguaG9zdG5hbWUseC5wb3J0PSIiKSx4LnVzZXJuYW1lPXgucGFzc3dvcmQ9IiIseC5hdXRoJiYofih6ZT14LmF1dGguaW5kZXhPZigiOiIpKT8oeC51c2VybmFtZT14LmF1dGguc2xpY2UoMCx6''@;'; put 'put ''ZSkseC51c2VybmFtZT1lbmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KHgudXNlcm5hbWUpKSx4LnBhc3N3b3JkPXguYXV0aC5zbGljZSh6ZSsxKSx4LnBhc3N3b3JkPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQoeC5wYXNzd29yZCkpKTp4LnVzZXJu''@;'; put 'put ''YW1lPWVuY29kZVVSSUNvbXBvbmVudChkZWNvZGVVUklDb21wb25lbnQoeC5hdXRoKSkseC5hdXRoPXgucGFzc3dvcmQ/eC51c2VybmFtZSsiOiIreC5wYXNzd29yZDp4LnVzZXJuYW1lKSx4Lm9yaWdpbj0iZmlsZToiIT09eC5wcm90b2NvbCYmVSh4LnByb3RvY29sKSYmeC5ob3N0P3gucHJv''@;'; put 'put ''dG9jb2wrIi8vIit4Lmhvc3Q6Im51bGwiLHguaHJlZj14LnRvU3RyaW5nKCl9WC5wcm90b3R5cGU9e3NldDpmdW5jdGlvbiBlZShyZSxpZSxsZSl7dmFyIG1lPXRoaXM7c3dpdGNoKHJlKXtjYXNlInF1ZXJ5Ijoic3RyaW5nIj09dHlwZW9mIGllJiZpZS5sZW5ndGgmJihpZT0obGV8fHkucGFy''@;'; put 'put ''c2UpKGllKSksbWVbcmVdPWllO2JyZWFrO2Nhc2UicG9ydCI6bWVbcmVdPWllLEkoaWUsbWUucHJvdG9jb2wpP2llJiYobWUuaG9zdD1tZS5ob3N0bmFtZSsiOiIraWUpOihtZS5ob3N0PW1lLmhvc3RuYW1lLG1lW3JlXT0iIik7YnJlYWs7Y2FzZSJob3N0bmFtZSI6bWVbcmVdPWllLG1lLnBv''@;'; put 'put ''cnQmJihpZSs9IjoiK21lLnBvcnQpLG1lLmhvc3Q9aWU7YnJlYWs7Y2FzZSJob3N0IjptZVtyZV09aWUsUC50ZXN0KGllKT8oaWU9aWUuc3BsaXQoIjoiKSxtZS5wb3J0PWllLnBvcCgpLG1lLmhvc3RuYW1lPWllLmpvaW4oIjoiKSk6KG1lLmhvc3RuYW1lPWllLG1lLnBvcnQ9IiIpO2JyZWFr''@;'; put 'put ''O2Nhc2UicHJvdG9jb2wiOm1lLnByb3RvY29sPWllLnRvTG93ZXJDYXNlKCksbWUuc2xhc2hlcz0hbGU7YnJlYWs7Y2FzZSJwYXRobmFtZSI6Y2FzZSJoYXNoIjppZihpZSl7dmFyIF9lPSJwYXRobmFtZSI9PT1yZT8iLyI6IiMiO21lW3JlXT1pZS5jaGFyQXQoMCkhPT1fZT9fZStpZTppZX1l''@;'; put 'put ''bHNlIG1lW3JlXT1pZTticmVhaztjYXNlInVzZXJuYW1lIjpjYXNlInBhc3N3b3JkIjptZVtyZV09ZW5jb2RlVVJJQ29tcG9uZW50KGllKTticmVhaztjYXNlImF1dGgiOnZhciBUZT1pZS5pbmRleE9mKCI6Iik7flRlPyhtZS51c2VybmFtZT1pZS5zbGljZSgwLFRlKSxtZS51c2VybmFtZT1l''@;'; put 'put ''bmNvZGVVUklDb21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KG1lLnVzZXJuYW1lKSksbWUucGFzc3dvcmQ9aWUuc2xpY2UoVGUrMSksbWUucGFzc3dvcmQ9ZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZVVSSUNvbXBvbmVudChtZS5wYXNzd29yZCkpKTptZS51c2VybmFtZT1lbmNvZGVVUklD''@;'; put 'put ''b21wb25lbnQoZGVjb2RlVVJJQ29tcG9uZW50KGllKSl9Zm9yKHZhciBTZT0wO1NlPE4ubGVuZ3RoO1NlKyspe3ZhciB6ZT1OW1NlXTt6ZVs0XSYmKG1lW3plWzFdXT1tZVt6ZVsxXV0udG9Mb3dlckNhc2UoKSl9cmV0dXJuIG1lLmF1dGg9bWUucGFzc3dvcmQ/bWUudXNlcm5hbWUrIjoiK21l''@;'; put 'put ''LnBhc3N3b3JkOm1lLnVzZXJuYW1lLG1lLm9yaWdpbj0iZmlsZToiIT09bWUucHJvdG9jb2wmJlUobWUucHJvdG9jb2wpJiZtZS5ob3N0P21lLnByb3RvY29sKyIvLyIrbWUuaG9zdDoibnVsbCIsbWUuaHJlZj1tZS50b1N0cmluZygpLG1lfSx0b1N0cmluZzpmdW5jdGlvbiBKKHJlKXsoIXJl''@;'; put 'put ''fHwiZnVuY3Rpb24iIT10eXBlb2YgcmUpJiYocmU9eS5zdHJpbmdpZnkpO3ZhciBpZSxsZT10aGlzLG1lPWxlLmhvc3QsX2U9bGUucHJvdG9jb2w7X2UmJiI6IiE9PV9lLmNoYXJBdChfZS5sZW5ndGgtMSkmJihfZSs9IjoiKTt2YXIgVGU9X2UrKGxlLnByb3RvY29sJiZsZS5zbGFzaGVzfHxV''@;'; put 'put ''KGxlLnByb3RvY29sKT8iLy8iOiIiKTtyZXR1cm4gbGUudXNlcm5hbWU/KFRlKz1sZS51c2VybmFtZSxsZS5wYXNzd29yZCYmKFRlKz0iOiIrbGUucGFzc3dvcmQpLFRlKz0iQCIpOmxlLnBhc3N3b3JkPyhUZSs9IjoiK2xlLnBhc3N3b3JkLFRlKz0iQCIpOiJmaWxlOiIhPT1sZS5wcm90b2Nv''@;'; put 'put ''bCYmVShsZS5wcm90b2NvbCkmJiFtZSYmIi8iIT09bGUucGF0aG5hbWUmJihUZSs9IkAiKSwoIjoiPT09bWVbbWUubGVuZ3RoLTFdfHxQLnRlc3QobGUuaG9zdG5hbWUpJiYhbGUucG9ydCkmJihtZSs9IjoiKSxUZSs9bWUrbGUucGF0aG5hbWUsKGllPSJvYmplY3QiPT10eXBlb2YgbGUucXVl''@;'; put 'put ''cnk/cmUobGUucXVlcnkpOmxlLnF1ZXJ5KSYmKFRlKz0iPyIhPT1pZS5jaGFyQXQoMCk/Ij8iK2llOmllKSxsZS5oYXNoJiYoVGUrPWxlLmhhc2gpLFRlfX0sWC5leHRyYWN0UHJvdG9jb2w9VyxYLmxvY2F0aW9uPUssWC50cmltTGVmdD16LFgucXM9eSx1ZS5leHBvcnRzPVh9LDQ5Mjc6KHVl''@;'; put 'put ''LHEsXyk9Pnt2YXIgST1fKDUxMDgpO2Z1bmN0aW9uIGcoQil7dHJ5e2lmKCFfLmcubG9jYWxTdG9yYWdlKXJldHVybiExfWNhdGNoe3JldHVybiExfXZhciB3PV8uZy5sb2NhbFN0b3JhZ2VbQl07cmV0dXJuIG51bGwhPXcmJiJ0cnVlIj09PVN0cmluZyh3KS50b0xvd2VyQ2FzZSgpfXVlLmV4''@;'; put 'put ''cG9ydHM9ZnVuY3Rpb24geShCLHcpe2lmKGcoIm5vRGVwcmVjYXRpb24iKSlyZXR1cm4gQjt2YXIgUD0hMTtyZXR1cm4gZnVuY3Rpb24gRigpe2lmKCFQKXtpZihnKCJ0aHJvd0RlcHJlY2F0aW9uIikpdGhyb3cgbmV3IEVycm9yKHcpO2coInRyYWNlRGVwcmVjYXRpb24iKT9JLnRyYWNlKHcp''@;'; put 'put ''Okkud2Fybih3KSxQPSEwfXJldHVybiBCLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fSwzODQ6dWU9Pnt1ZS5leHBvcnRzPWZ1bmN0aW9uKF8pe3JldHVybiBfJiYib2JqZWN0Ij09dHlwZW9mIF8mJiJmdW5jdGlvbiI9PXR5cGVvZiBfLmNvcHkmJiJmdW5jdGlvbiI9PXR5cGVvZiBfLmZpbGwm''@;'; put 'put ''JiJmdW5jdGlvbiI9PXR5cGVvZiBfLnJlYWRVSW50OH19LDU5NTU6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9XygyNTg0KSx5PV8oODY2MiksZz1fKDY0MzApLEI9Xyg1NjkyKTtmdW5jdGlvbiB3KEFlKXtyZXR1cm4gQWUuY2FsbC5iaW5kKEFlKX12YXIgUD10eXBlb2YgQmlnSW50''@;'; put 'put ''PCJ1IixGPXR5cGVvZiBTeW1ib2w8InUiLE89dyhPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKSx6PXcoTnVtYmVyLnByb3RvdHlwZS52YWx1ZU9mKSxOPXcoU3RyaW5nLnByb3RvdHlwZS52YWx1ZU9mKSxMPXcoQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZik7aWYoUCl2YXIgSz13KEJpZ0lu''@;'; put 'put ''dC5wcm90b3R5cGUudmFsdWVPZik7aWYoRil2YXIgVT13KFN5bWJvbC5wcm90b3R5cGUudmFsdWVPZik7ZnVuY3Rpb24gVyhBZSxfdCl7aWYoIm9iamVjdCIhPXR5cGVvZiBBZSlyZXR1cm4hMTt0cnl7cmV0dXJuIF90KEFlKSwhMH1jYXRjaHtyZXR1cm4hMX19ZnVuY3Rpb24gcChBZSl7cmV0''@;'; put 'put ''dXJuIltvYmplY3QgTWFwXSI9PT1PKEFlKX1mdW5jdGlvbiB4KEFlKXtyZXR1cm4iW29iamVjdCBTZXRdIj09PU8oQWUpfWZ1bmN0aW9uIFQoQWUpe3JldHVybiJbb2JqZWN0IFdlYWtNYXBdIj09PU8oQWUpfWZ1bmN0aW9uIGooQWUpe3JldHVybiJbb2JqZWN0IFdlYWtTZXRdIj09PU8oQWUp''@;'; put 'put ''fWZ1bmN0aW9uIG0oQWUpe3JldHVybiJbb2JqZWN0IEFycmF5QnVmZmVyXSI9PT1PKEFlKX1mdW5jdGlvbiBBKEFlKXtyZXR1cm4hKHR5cGVvZiBBcnJheUJ1ZmZlcj4idSIpJiYobS53b3JraW5nP20oQWUpOkFlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpfWZ1bmN0aW9uIG9lKEFlKXtyZXR1''@;'; put 'put ''cm4iW29iamVjdCBEYXRhVmlld10iPT09TyhBZSl9ZnVuY3Rpb24gdGUoQWUpe3JldHVybiEodHlwZW9mIERhdGFWaWV3PiJ1IikmJihvZS53b3JraW5nP29lKEFlKTpBZSBpbnN0YW5jZW9mIERhdGFWaWV3KX1xLmlzQXJndW1lbnRzT2JqZWN0PUkscS5pc0dlbmVyYXRvckZ1bmN0aW9uPXks''@;'; put 'put ''cS5pc1R5cGVkQXJyYXk9QixxLmlzUHJvbWlzZT1mdW5jdGlvbiBZKEFlKXtyZXR1cm4gdHlwZW9mIFByb21pc2U8InUiJiZBZSBpbnN0YW5jZW9mIFByb21pc2V8fG51bGwhPT1BZSYmIm9iamVjdCI9PXR5cGVvZiBBZSYmImZ1bmN0aW9uIj09dHlwZW9mIEFlLnRoZW4mJiJmdW5jdGlvbiI9''@;'; put 'put ''PXR5cGVvZiBBZS5jYXRjaH0scS5pc0FycmF5QnVmZmVyVmlldz1mdW5jdGlvbiBYKEFlKXtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyLmlzVmlldyhBZSk6QihBZSl8fHRlKEFlKX0scS5pc1VpbnQ4QXJyYXk9ZnVuY3Rpb24g''@;'; put 'put ''ZWUoQWUpe3JldHVybiJVaW50OEFycmF5Ij09PWcoQWUpfSxxLmlzVWludDhDbGFtcGVkQXJyYXk9ZnVuY3Rpb24gSihBZSl7cmV0dXJuIlVpbnQ4Q2xhbXBlZEFycmF5Ij09PWcoQWUpfSxxLmlzVWludDE2QXJyYXk9ZnVuY3Rpb24gcmUoQWUpe3JldHVybiJVaW50MTZBcnJheSI9PT1nKEFl''@;'; put 'put ''KX0scS5pc1VpbnQzMkFycmF5PWZ1bmN0aW9uIGllKEFlKXtyZXR1cm4iVWludDMyQXJyYXkiPT09ZyhBZSl9LHEuaXNJbnQ4QXJyYXk9ZnVuY3Rpb24gbGUoQWUpe3JldHVybiJJbnQ4QXJyYXkiPT09ZyhBZSl9LHEuaXNJbnQxNkFycmF5PWZ1bmN0aW9uIG1lKEFlKXtyZXR1cm4iSW50MTZB''@;'; put 'put ''cnJheSI9PT1nKEFlKX0scS5pc0ludDMyQXJyYXk9ZnVuY3Rpb24gX2UoQWUpe3JldHVybiJJbnQzMkFycmF5Ij09PWcoQWUpfSxxLmlzRmxvYXQzMkFycmF5PWZ1bmN0aW9uIFRlKEFlKXtyZXR1cm4iRmxvYXQzMkFycmF5Ij09PWcoQWUpfSxxLmlzRmxvYXQ2NEFycmF5PWZ1bmN0aW9uIFNl''@;'; put 'put ''KEFlKXtyZXR1cm4iRmxvYXQ2NEFycmF5Ij09PWcoQWUpfSxxLmlzQmlnSW50NjRBcnJheT1mdW5jdGlvbiB6ZShBZSl7cmV0dXJuIkJpZ0ludDY0QXJyYXkiPT09ZyhBZSl9LHEuaXNCaWdVaW50NjRBcnJheT1mdW5jdGlvbiBWKEFlKXtyZXR1cm4iQmlnVWludDY0QXJyYXkiPT09ZyhBZSl9''@;'; put 'put ''LHAud29ya2luZz10eXBlb2YgTWFwPCJ1IiYmcChuZXcgTWFwKSxxLmlzTWFwPWZ1bmN0aW9uIGIoQWUpe3JldHVybiEodHlwZW9mIE1hcD4idSIpJiYocC53b3JraW5nP3AoQWUpOkFlIGluc3RhbmNlb2YgTWFwKX0seC53b3JraW5nPXR5cGVvZiBTZXQ8InUiJiZ4KG5ldyBTZXQpLHEuaXNT''@;'; put 'put ''ZXQ9ZnVuY3Rpb24gQyhBZSl7cmV0dXJuISh0eXBlb2YgU2V0PiJ1IikmJih4Lndvcmtpbmc/eChBZSk6QWUgaW5zdGFuY2VvZiBTZXQpfSxULndvcmtpbmc9dHlwZW9mIFdlYWtNYXA8InUiJiZUKG5ldyBXZWFrTWFwKSxxLmlzV2Vha01hcD1mdW5jdGlvbiBIKEFlKXtyZXR1cm4hKHR5cGVv''@;'; put 'put ''ZiBXZWFrTWFwPiJ1IikmJihULndvcmtpbmc/VChBZSk6QWUgaW5zdGFuY2VvZiBXZWFrTWFwKX0sai53b3JraW5nPXR5cGVvZiBXZWFrU2V0PCJ1IiYmaihuZXcgV2Vha1NldCkscS5pc1dlYWtTZXQ9ZnVuY3Rpb24gRShBZSl7cmV0dXJuIGooQWUpfSxtLndvcmtpbmc9dHlwZW9mIEFycmF5''@;'; put 'put ''QnVmZmVyPCJ1IiYmbShuZXcgQXJyYXlCdWZmZXIpLHEuaXNBcnJheUJ1ZmZlcj1BLG9lLndvcmtpbmc9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmdHlwZW9mIERhdGFWaWV3PCJ1IiYmb2UobmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcigxKSwwLDEpKSxxLmlzRGF0YVZpZXc9dGU7dmFy''@;'; put 'put ''IHNlPXR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcjwidSI/U2hhcmVkQXJyYXlCdWZmZXI6dm9pZCAwO2Z1bmN0aW9uIHdlKEFlKXtyZXR1cm4iW29iamVjdCBTaGFyZWRBcnJheUJ1ZmZlcl0iPT09TyhBZSl9ZnVuY3Rpb24gVWUoQWUpe3JldHVybiEodHlwZW9mIHNlPiJ1IikmJih0eXBlb2Yg''@;'; put 'put ''d2Uud29ya2luZz4idSImJih3ZS53b3JraW5nPXdlKG5ldyBzZSkpLHdlLndvcmtpbmc/d2UoQWUpOkFlIGluc3RhbmNlb2Ygc2UpfWZ1bmN0aW9uIGplKEFlKXtyZXR1cm4gVyhBZSx6KX1mdW5jdGlvbiBEZShBZSl7cmV0dXJuIFcoQWUsTil9ZnVuY3Rpb24gRmUoQWUpe3JldHVybiBXKEFl''@;'; put 'put ''LEwpfWZ1bmN0aW9uIFJlKEFlKXtyZXR1cm4gUCYmVyhBZSxLKX1mdW5jdGlvbiBJZShBZSl7cmV0dXJuIEYmJlcoQWUsVSl9cS5pc1NoYXJlZEFycmF5QnVmZmVyPVVlLHEuaXNBc3luY0Z1bmN0aW9uPWZ1bmN0aW9uIEplKEFlKXtyZXR1cm4iW29iamVjdCBBc3luY0Z1bmN0aW9uXSI9PT1P''@;'; put 'put ''KEFlKX0scS5pc01hcEl0ZXJhdG9yPWZ1bmN0aW9uIGF0KEFlKXtyZXR1cm4iW29iamVjdCBNYXAgSXRlcmF0b3JdIj09PU8oQWUpfSxxLmlzU2V0SXRlcmF0b3I9ZnVuY3Rpb24gTWUoQWUpe3JldHVybiJbb2JqZWN0IFNldCBJdGVyYXRvcl0iPT09TyhBZSl9LHEuaXNHZW5lcmF0b3JPYmpl''@;'; put 'put ''Y3Q9ZnVuY3Rpb24gdmUoQWUpe3JldHVybiJbb2JqZWN0IEdlbmVyYXRvcl0iPT09TyhBZSl9LHEuaXNXZWJBc3NlbWJseUNvbXBpbGVkTW9kdWxlPWZ1bmN0aW9uIFhlKEFlKXtyZXR1cm4iW29iamVjdCBXZWJBc3NlbWJseS5Nb2R1bGVdIj09PU8oQWUpfSxxLmlzTnVtYmVyT2JqZWN0PWpl''@;'; put 'put ''LHEuaXNTdHJpbmdPYmplY3Q9RGUscS5pc0Jvb2xlYW5PYmplY3Q9RmUscS5pc0JpZ0ludE9iamVjdD1SZSxxLmlzU3ltYm9sT2JqZWN0PUllLHEuaXNCb3hlZFByaW1pdGl2ZT1mdW5jdGlvbiBWZShBZSl7cmV0dXJuIGplKEFlKXx8RGUoQWUpfHxGZShBZSl8fFJlKEFlKXx8SWUoQWUpfSxx''@;'; put 'put ''LmlzQW55QXJyYXlCdWZmZXI9ZnVuY3Rpb24ga2UoQWUpe3JldHVybiB0eXBlb2YgVWludDhBcnJheTwidSImJihBKEFlKXx8VWUoQWUpKX0sWyJpc1Byb3h5IiwiaXNFeHRlcm5hbCIsImlzTW9kdWxlTmFtZXNwYWNlT2JqZWN0Il0uZm9yRWFjaChmdW5jdGlvbihBZSl7T2JqZWN0LmRlZmlu''@;'; put 'put ''ZVByb3BlcnR5KHEsQWUse2VudW1lcmFibGU6ITEsdmFsdWU6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoQWUrIiBpcyBub3Qgc3VwcG9ydGVkIGluIHVzZXJsYW5kIil9fSl9KX0sOTUzOToodWUscSxfKT0+e3ZhciBJPV8oNDE1NSkseT1fKDUxMDgpLGc9T2JqZWN0LmdldE93blByb3Bl''@;'; put 'put ''cnR5RGVzY3JpcHRvcnN8fGZ1bmN0aW9uKHdlKXtmb3IodmFyIFVlPU9iamVjdC5rZXlzKHdlKSxKZT17fSxhdD0wO2F0PFVlLmxlbmd0aDthdCsrKUplW1VlW2F0XV09T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3ZSxVZVthdF0pO3JldHVybiBKZX0sQj0vJVtzZGolXS9nO3Eu''@;'; put 'put ''Zm9ybWF0PWZ1bmN0aW9uKHNlKXtpZighX2Uoc2UpKXtmb3IodmFyIHdlPVtdLFVlPTA7VWU8YXJndW1lbnRzLmxlbmd0aDtVZSsrKXdlLnB1c2goTyhhcmd1bWVudHNbVWVdKSk7cmV0dXJuIHdlLmpvaW4oIiAiKX1VZT0xO2Zvcih2YXIgSmU9YXJndW1lbnRzLGF0PUplLmxlbmd0aCxNZT1T''@;'; put 'put ''dHJpbmcoc2UpLnJlcGxhY2UoQixmdW5jdGlvbihYZSl7aWYoIiUlIj09PVhlKXJldHVybiIlIjtpZihVZT49YXQpcmV0dXJuIFhlO3N3aXRjaChYZSl7Y2FzZSIlcyI6cmV0dXJuIFN0cmluZyhKZVtVZSsrXSk7Y2FzZSIlZCI6cmV0dXJuIE51bWJlcihKZVtVZSsrXSk7Y2FzZSIlaiI6dHJ5''@;'; put 'put ''e3JldHVybiBKU09OLnN0cmluZ2lmeShKZVtVZSsrXSl9Y2F0Y2h7cmV0dXJuIltDaXJjdWxhcl0ifWRlZmF1bHQ6cmV0dXJuIFhlfX0pLHZlPUplW1VlXTtVZTxhdDt2ZT1KZVsrK1VlXSlpZSh2ZSl8fCFWKHZlKT9NZSs9IiAiK3ZlOk1lKz0iICIrTyh2ZSk7cmV0dXJuIE1lfSxxLmRlcHJl''@;'; put 'put ''Y2F0ZT1mdW5jdGlvbihzZSx3ZSl7aWYodHlwZW9mIEk8InUiJiYhMD09PUkubm9EZXByZWNhdGlvbilyZXR1cm4gc2U7aWYodHlwZW9mIEk+InUiKXJldHVybiBmdW5jdGlvbigpe3JldHVybiBxLmRlcHJlY2F0ZShzZSx3ZSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfTt2YXIgVWU9ITE7cmV0''@;'; put 'put ''dXJuIGZ1bmN0aW9uIEplKCl7aWYoIVVlKXtpZihJLnRocm93RGVwcmVjYXRpb24pdGhyb3cgbmV3IEVycm9yKHdlKTtJLnRyYWNlRGVwcmVjYXRpb24/eS50cmFjZSh3ZSk6eS5lcnJvcih3ZSksVWU9ITB9cmV0dXJuIHNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19O3ZhciB3PXt9LFA9L14k''@;'; put 'put ''LztpZihJLmVudi5OT0RFX0RFQlVHKXt2YXIgRj1JLmVudi5OT0RFX0RFQlVHO0Y9Ri5yZXBsYWNlKC9bfFxce30oKVtcXV4kKz8uXS9nLCJcXCQmIikucmVwbGFjZSgvXCovZywiLioiKS5yZXBsYWNlKC8sL2csIiR8XiIpLnRvVXBwZXJDYXNlKCksUD1uZXcgUmVnRXhwKCJeIitGKyIkIiwi''@;'; put 'put ''aSIpfWZ1bmN0aW9uIE8oc2Usd2Upe3ZhciBVZT17c2VlbjpbXSxzdHlsaXplOk59O3JldHVybiBhcmd1bWVudHMubGVuZ3RoPj0zJiYoVWUuZGVwdGg9YXJndW1lbnRzWzJdKSxhcmd1bWVudHMubGVuZ3RoPj00JiYoVWUuY29sb3JzPWFyZ3VtZW50c1szXSkscmUod2UpP1VlLnNob3dIaWRk''@;'; put 'put ''ZW49d2U6d2UmJnEuX2V4dGVuZChVZSx3ZSksU2UoVWUuc2hvd0hpZGRlbikmJihVZS5zaG93SGlkZGVuPSExKSxTZShVZS5kZXB0aCkmJihVZS5kZXB0aD0yKSxTZShVZS5jb2xvcnMpJiYoVWUuY29sb3JzPSExKSxTZShVZS5jdXN0b21JbnNwZWN0KSYmKFVlLmN1c3RvbUluc3BlY3Q9ITAp''@;'; put 'put ''LFVlLmNvbG9ycyYmKFVlLnN0eWxpemU9eiksSyhVZSxzZSxVZS5kZXB0aCl9ZnVuY3Rpb24geihzZSx3ZSl7dmFyIFVlPU8uc3R5bGVzW3dlXTtyZXR1cm4gVWU/Ilx4MWJbIitPLmNvbG9yc1tVZV1bMF0rIm0iK3NlKyJceDFiWyIrTy5jb2xvcnNbVWVdWzFdKyJtIjpzZX1mdW5jdGlvbiBO''@;'; put 'put ''KHNlLHdlKXtyZXR1cm4gc2V9ZnVuY3Rpb24gSyhzZSx3ZSxVZSl7aWYoc2UuY3VzdG9tSW5zcGVjdCYmd2UmJngod2UuaW5zcGVjdCkmJndlLmluc3BlY3QhPT1xLmluc3BlY3QmJighd2UuY29uc3RydWN0b3J8fHdlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSE9PXdlKSl7dmFyIEplPXdlLmlu''@;'; put 'put ''c3BlY3QoVWUsc2UpO3JldHVybiBfZShKZSl8fChKZT1LKHNlLEplLFVlKSksSmV9dmFyIGF0PWZ1bmN0aW9uIFUoc2Usd2Upe2lmKFNlKHdlKSlyZXR1cm4gc2Uuc3R5bGl6ZSgidW5kZWZpbmVkIiwidW5kZWZpbmVkIik7aWYoX2Uod2UpKXt2YXIgVWU9IiciK0pTT04uc3RyaW5naWZ5KHdl''@;'; put 'put ''KS5yZXBsYWNlKC9eInwiJC9nLCIiKS5yZXBsYWNlKC8nL2csIlxcJyIpLnJlcGxhY2UoL1xcIi9nLCciJykrIiciO3JldHVybiBzZS5zdHlsaXplKFVlLCJzdHJpbmciKX1yZXR1cm4gbWUod2UpP3NlLnN0eWxpemUoIiIrd2UsIm51bWJlciIpOnJlKHdlKT9zZS5zdHlsaXplKCIiK3dlLCJi''@;'; put 'put ''b29sZWFuIik6aWUod2UpP3NlLnN0eWxpemUoIm51bGwiLCJudWxsIik6dm9pZCAwfShzZSx3ZSk7aWYoYXQpcmV0dXJuIGF0O3ZhciBNZT1PYmplY3Qua2V5cyh3ZSksdmU9ZnVuY3Rpb24gTChzZSl7dmFyIHdlPXt9O3JldHVybiBzZS5mb3JFYWNoKGZ1bmN0aW9uKFVlLEplKXt3ZVtVZV09''@;'; put 'put ''ITB9KSx3ZX0oTWUpO2lmKHNlLnNob3dIaWRkZW4mJihNZT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3ZSkpLGIod2UpJiYoTWUuaW5kZXhPZigibWVzc2FnZSIpPj0wfHxNZS5pbmRleE9mKCJkZXNjcmlwdGlvbiIpPj0wKSlyZXR1cm4gVyh3ZSk7aWYoMD09PU1lLmxlbmd0aCl7aWYo''@;'; put 'put ''eCh3ZSkpcmV0dXJuIHNlLnN0eWxpemUoIltGdW5jdGlvbiIrKHdlLm5hbWU/IjogIit3ZS5uYW1lOiIiKSsiXSIsInNwZWNpYWwiKTtpZih6ZSh3ZSkpcmV0dXJuIHNlLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdlKSwicmVnZXhwIik7aWYocCh3ZSkpcmV0dXJu''@;'; put 'put ''IHNlLnN0eWxpemUoRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh3ZSksImRhdGUiKTtpZihiKHdlKSlyZXR1cm4gVyh3ZSl9dmFyIEllLGplPSIiLERlPSExLEZlPVsieyIsIn0iXTtyZXR1cm4gSih3ZSkmJihEZT0hMCxGZT1bIlsiLCJdIl0pLHgod2UpJiYoamU9IiBbRnVuY3Rpb24i''@;'; put 'put ''Kyh3ZS5uYW1lPyI6ICIrd2UubmFtZToiIikrIl0iKSx6ZSh3ZSkmJihqZT0iICIrUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdlKSkscCh3ZSkmJihqZT0iICIrRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2FsbCh3ZSkpLGIod2UpJiYoamU9IiAiK1cod2UpKSwwIT09TWUu''@;'; put 'put ''bGVuZ3RofHxEZSYmMCE9d2UubGVuZ3RoP1VlPDA/emUod2UpP3NlLnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdlKSwicmVnZXhwIik6c2Uuc3R5bGl6ZSgiW09iamVjdF0iLCJzcGVjaWFsIik6KHNlLnNlZW4ucHVzaCh3ZSksSWU9RGU/ZnVuY3Rpb24gWShzZSx3''@;'; put 'put ''ZSxVZSxKZSxhdCl7Zm9yKHZhciBNZT1bXSx2ZT0wLFhlPXdlLmxlbmd0aDt2ZTxYZTsrK3ZlKW0od2UsU3RyaW5nKHZlKSk/TWUucHVzaChYKHNlLHdlLFVlLEplLFN0cmluZyh2ZSksITApKTpNZS5wdXNoKCIiKTtyZXR1cm4gYXQuZm9yRWFjaChmdW5jdGlvbihqZSl7amUubWF0Y2goL15c''@;'; put 'put ''ZCskLyl8fE1lLnB1c2goWChzZSx3ZSxVZSxKZSxqZSwhMCkpfSksTWV9KHNlLHdlLFVlLHZlLE1lKTpNZS5tYXAoZnVuY3Rpb24oVmUpe3JldHVybiBYKHNlLHdlLFVlLHZlLFZlLERlKX0pLHNlLnNlZW4ucG9wKCksZnVuY3Rpb24gZWUoc2Usd2UsVWUpe3ZhciBhdD1zZS5yZWR1Y2UoZnVu''@;'; put 'put ''Y3Rpb24oTWUsdmUpe3JldHVybiB2ZS5pbmRleE9mKCJcbiIpLE1lK3ZlLnJlcGxhY2UoL1x1MDAxYlxbXGRcZD9tL2csIiIpLmxlbmd0aCsxfSwwKTtyZXR1cm4gYXQ+NjA/VWVbMF0rKCIiPT09d2U/IiI6d2UrIlxuICIpKyIgIitzZS5qb2luKCIsXG4gICIpKyIgIitVZVsxXTpVZVswXSt3''@;'; put 'put ''ZSsiICIrc2Uuam9pbigiLCAiKSsiICIrVWVbMV19KEllLGplLEZlKSk6RmVbMF0ramUrRmVbMV19ZnVuY3Rpb24gVyhzZSl7cmV0dXJuIlsiK0Vycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHNlKSsiXSJ9ZnVuY3Rpb24gWChzZSx3ZSxVZSxKZSxhdCxNZSl7dmFyIHZlLFhlLGplO2lm''@;'; put 'put ''KChqZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHdlLGF0KXx8e3ZhbHVlOndlW2F0XX0pLmdldD9YZT1zZS5zdHlsaXplKGplLnNldD8iW0dldHRlci9TZXR0ZXJdIjoiW0dldHRlcl0iLCJzcGVjaWFsIik6amUuc2V0JiYoWGU9c2Uuc3R5bGl6ZSgiW1NldHRlcl0iLCJzcGVj''@;'; put 'put ''aWFsIikpLG0oSmUsYXQpfHwodmU9IlsiK2F0KyJdIiksWGV8fChzZS5zZWVuLmluZGV4T2YoamUudmFsdWUpPDA/KFhlPWllKFVlKT9LKHNlLGplLnZhbHVlLG51bGwpOksoc2UsamUudmFsdWUsVWUtMSkpLmluZGV4T2YoIlxuIik+LTEmJihYZT1NZT9YZS5zcGxpdCgiXG4iKS5tYXAoZnVu''@;'; put 'put ''Y3Rpb24oRGUpe3JldHVybiIgICIrRGV9KS5qb2luKCJcbiIpLnNsaWNlKDIpOiJcbiIrWGUuc3BsaXQoIlxuIikubWFwKGZ1bmN0aW9uKERlKXtyZXR1cm4iICAgIitEZX0pLmpvaW4oIlxuIikpOlhlPXNlLnN0eWxpemUoIltDaXJjdWxhcl0iLCJzcGVjaWFsIikpLFNlKHZlKSl7aWYoTWUm''@;'; put 'put ''JmF0Lm1hdGNoKC9eXGQrJC8pKXJldHVybiBYZTsodmU9SlNPTi5zdHJpbmdpZnkoIiIrYXQpKS5tYXRjaCgvXiIoW2EtekEtWl9dW2EtekEtWl8wLTldKikiJC8pPyh2ZT12ZS5zbGljZSgxLC0xKSx2ZT1zZS5zdHlsaXplKHZlLCJuYW1lIikpOih2ZT12ZS5yZXBsYWNlKC8nL2csIlxcJyIp''@;'; put 'put ''LnJlcGxhY2UoL1xcIi9nLCciJykucmVwbGFjZSgvKF4ifCIkKS9nLCInIiksdmU9c2Uuc3R5bGl6ZSh2ZSwic3RyaW5nIikpfXJldHVybiB2ZSsiOiAiK1hlfWZ1bmN0aW9uIEooc2Upe3JldHVybiBBcnJheS5pc0FycmF5KHNlKX1mdW5jdGlvbiByZShzZSl7cmV0dXJuImJvb2xlYW4iPT10''@;'; put 'put ''eXBlb2Ygc2V9ZnVuY3Rpb24gaWUoc2Upe3JldHVybiBudWxsPT09c2V9ZnVuY3Rpb24gbWUoc2Upe3JldHVybiJudW1iZXIiPT10eXBlb2Ygc2V9ZnVuY3Rpb24gX2Uoc2Upe3JldHVybiJzdHJpbmciPT10eXBlb2Ygc2V9ZnVuY3Rpb24gU2Uoc2Upe3JldHVybiB2b2lkIDA9PT1zZX1mdW5j''@;'; put 'put ''dGlvbiB6ZShzZSl7cmV0dXJuIFYoc2UpJiYiW29iamVjdCBSZWdFeHBdIj09PVQoc2UpfWZ1bmN0aW9uIFYoc2Upe3JldHVybiJvYmplY3QiPT10eXBlb2Ygc2UmJm51bGwhPT1zZX1mdW5jdGlvbiBwKHNlKXtyZXR1cm4gVihzZSkmJiJbb2JqZWN0IERhdGVdIj09PVQoc2UpfWZ1bmN0aW9u''@;'; put 'put ''IGIoc2Upe3JldHVybiBWKHNlKSYmKCJbb2JqZWN0IEVycm9yXSI9PT1UKHNlKXx8c2UgaW5zdGFuY2VvZiBFcnJvcil9ZnVuY3Rpb24geChzZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHNlfWZ1bmN0aW9uIFQoc2Upe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwo''@;'; put 'put ''c2UpfWZ1bmN0aW9uIEgoc2Upe3JldHVybiBzZTwxMD8iMCIrc2UudG9TdHJpbmcoMTApOnNlLnRvU3RyaW5nKDEwKX1xLmRlYnVnbG9nPWZ1bmN0aW9uKHNlKXtpZihzZT1zZS50b1VwcGVyQ2FzZSgpLCF3W3NlXSlpZihQLnRlc3Qoc2UpKXt2YXIgd2U9SS5waWQ7d1tzZV09ZnVuY3Rpb24o''@;'; put 'put ''KXt2YXIgVWU9cS5mb3JtYXQuYXBwbHkocSxhcmd1bWVudHMpO3kuZXJyb3IoIiVzICVkOiAlcyIsc2Usd2UsVWUpfX1lbHNlIHdbc2VdPWZ1bmN0aW9uKCl7fTtyZXR1cm4gd1tzZV19LHEuaW5zcGVjdD1PLE8uY29sb3JzPXtib2xkOlsxLDIyXSxpdGFsaWM6WzMsMjNdLHVuZGVybGluZTpb''@;'; put 'put ''NCwyNF0saW52ZXJzZTpbNywyN10sd2hpdGU6WzM3LDM5XSxncmV5Ols5MCwzOV0sYmxhY2s6WzMwLDM5XSxibHVlOlszNCwzOV0sY3lhbjpbMzYsMzldLGdyZWVuOlszMiwzOV0sbWFnZW50YTpbMzUsMzldLHJlZDpbMzEsMzldLHllbGxvdzpbMzMsMzldfSxPLnN0eWxlcz17c3BlY2lhbDoi''@;'; put 'put ''Y3lhbiIsbnVtYmVyOiJ5ZWxsb3ciLGJvb2xlYW46InllbGxvdyIsdW5kZWZpbmVkOiJncmV5IixudWxsOiJib2xkIixzdHJpbmc6ImdyZWVuIixkYXRlOiJtYWdlbnRhIixyZWdleHA6InJlZCJ9LHEudHlwZXM9Xyg1OTU1KSxxLmlzQXJyYXk9SixxLmlzQm9vbGVhbj1yZSxxLmlzTnVsbD1p''@;'; put 'put ''ZSxxLmlzTnVsbE9yVW5kZWZpbmVkPWZ1bmN0aW9uIGxlKHNlKXtyZXR1cm4gbnVsbD09c2V9LHEuaXNOdW1iZXI9bWUscS5pc1N0cmluZz1fZSxxLmlzU3ltYm9sPWZ1bmN0aW9uIFRlKHNlKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHNlfSxxLmlzVW5kZWZpbmVkPVNlLHEuaXNSZWdFeHA9''@;'; put 'put ''emUscS50eXBlcy5pc1JlZ0V4cD16ZSxxLmlzT2JqZWN0PVYscS5pc0RhdGU9cCxxLnR5cGVzLmlzRGF0ZT1wLHEuaXNFcnJvcj1iLHEudHlwZXMuaXNOYXRpdmVFcnJvcj1iLHEuaXNGdW5jdGlvbj14LHEuaXNQcmltaXRpdmU9ZnVuY3Rpb24gQyhzZSl7cmV0dXJuIG51bGw9PT1zZXx8ImJv''@;'; put 'put ''b2xlYW4iPT10eXBlb2Ygc2V8fCJudW1iZXIiPT10eXBlb2Ygc2V8fCJzdHJpbmciPT10eXBlb2Ygc2V8fCJzeW1ib2wiPT10eXBlb2Ygc2V8fHR5cGVvZiBzZT4idSJ9LHEuaXNCdWZmZXI9XygzODQpO3ZhciBqPVsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwi''@;'; put 'put ''QXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl07ZnVuY3Rpb24gbShzZSx3ZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzZSx3ZSl9cS5sb2c9ZnVuY3Rpb24oKXt5LmxvZygiJXMgLSAlcyIsZnVuY3Rpb24gRSgpe3ZhciBzZT1uZXcgRGF0ZSx3ZT1b''@;'; put 'put ''SChzZS5nZXRIb3VycygpKSxIKHNlLmdldE1pbnV0ZXMoKSksSChzZS5nZXRTZWNvbmRzKCkpXS5qb2luKCI6Iik7cmV0dXJuW3NlLmdldERhdGUoKSxqW3NlLmdldE1vbnRoKCldLHdlXS5qb2luKCIgIil9KCkscS5mb3JtYXQuYXBwbHkocSxhcmd1bWVudHMpKX0scS5pbmhlcml0cz1fKDU3''@;'; put 'put ''MTcpLHEuX2V4dGVuZD1mdW5jdGlvbihzZSx3ZSl7aWYoIXdlfHwhVih3ZSkpcmV0dXJuIHNlO2Zvcih2YXIgVWU9T2JqZWN0LmtleXMod2UpLEplPVVlLmxlbmd0aDtKZS0tOylzZVtVZVtKZV1dPXdlW1VlW0plXV07cmV0dXJuIHNlfTt2YXIgQT10eXBlb2YgU3ltYm9sPCJ1Ij9TeW1ib2wo''@;'; put 'put ''InV0aWwucHJvbWlzaWZ5LmN1c3RvbSIpOnZvaWQgMDtmdW5jdGlvbiBvZShzZSx3ZSl7aWYoIXNlKXt2YXIgVWU9bmV3IEVycm9yKCJQcm9taXNlIHdhcyByZWplY3RlZCB3aXRoIGEgZmFsc3kgdmFsdWUiKTtVZS5yZWFzb249c2Usc2U9VWV9cmV0dXJuIHdlKHNlKX1xLnByb21pc2lmeT1m''@;'; put 'put ''dW5jdGlvbih3ZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHdlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAib3JpZ2luYWwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbicpO2lmKEEmJndlW0FdKXt2YXIgVWU7aWYoImZ1bmN0aW9uIiE9dHlwZW9mKFVlPXdlW0FdKSl0aHJv''@;'; put 'put ''dyBuZXcgVHlwZUVycm9yKCdUaGUgInV0aWwucHJvbWlzaWZ5LmN1c3RvbSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEZ1bmN0aW9uJyk7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShVZSxBLHt2YWx1ZTpVZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiExLGNvbmZpZ3VyYWJsZToh''@;'; put 'put ''MH0pLFVlfWZ1bmN0aW9uIFVlKCl7Zm9yKHZhciBKZSxhdCxNZT1uZXcgUHJvbWlzZShmdW5jdGlvbihqZSxEZSl7SmU9amUsYXQ9RGV9KSx2ZT1bXSxYZT0wO1hlPGFyZ3VtZW50cy5sZW5ndGg7WGUrKyl2ZS5wdXNoKGFyZ3VtZW50c1tYZV0pO3ZlLnB1c2goZnVuY3Rpb24oamUsRGUpe2pl''@;'; put 'put ''P2F0KGplKTpKZShEZSl9KTt0cnl7d2UuYXBwbHkodGhpcyx2ZSl9Y2F0Y2goamUpe2F0KGplKX1yZXR1cm4gTWV9cmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZihVZSxPYmplY3QuZ2V0UHJvdG90eXBlT2Yod2UpKSxBJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoVWUsQSx7dmFsdWU6VWUs''@;'; put 'put ''ZW51bWVyYWJsZTohMSx3cml0YWJsZTohMSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhVZSxnKHdlKSl9LHEucHJvbWlzaWZ5LmN1c3RvbT1BLHEuY2FsbGJhY2tpZnk9ZnVuY3Rpb24gdGUoc2Upe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBzZSl0aHJvdyBuZXcg''@;'; put 'put ''VHlwZUVycm9yKCdUaGUgIm9yaWdpbmFsIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgRnVuY3Rpb24nKTtmdW5jdGlvbiB3ZSgpe2Zvcih2YXIgVWU9W10sSmU9MDtKZTxhcmd1bWVudHMubGVuZ3RoO0plKyspVWUucHVzaChhcmd1bWVudHNbSmVdKTt2YXIgYXQ9VWUucG9wKCk7aWYoImZ1''@;'; put 'put ''bmN0aW9uIiE9dHlwZW9mIGF0KXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBsYXN0IGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbiIpO3ZhciBNZT10aGlzLHZlPWZ1bmN0aW9uKCl7cmV0dXJuIGF0LmFwcGx5KE1lLGFyZ3VtZW50cyl9O3NlLmFwcGx5KHRoaXMsVWUpLnRoZW4o''@;'; put 'put ''ZnVuY3Rpb24oWGUpe0kubmV4dFRpY2sodmUuYmluZChudWxsLG51bGwsWGUpKX0sZnVuY3Rpb24oWGUpe0kubmV4dFRpY2sob2UuYmluZChudWxsLFhlLHZlKSl9KX1yZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHdlLE9iamVjdC5nZXRQcm90b3R5cGVPZihzZSkpLE9iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0aWVzKHdlLGcoc2UpKSx3ZX19LDQ4MToodWUscSxfKT0+eyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5leHBvcnRzLmlzX3VyaT1nLEkuZXhwb3J0cy5pc19odHRwX3VyaT1CLEkuZXhwb3J0cy5pc19odHRwc191cmk9dyxJLmV4cG9ydHMuaXNfd2ViX3VyaT1QLEkuZXhw''@;'; put 'put ''b3J0cy5pc1VyaT1nLEkuZXhwb3J0cy5pc0h0dHBVcmk9QixJLmV4cG9ydHMuaXNIdHRwc1VyaT13LEkuZXhwb3J0cy5pc1dlYlVyaT1QO3ZhciB5PWZ1bmN0aW9uKEYpe3JldHVybiBGLm1hdGNoKC8oPzooW146XC8/I10rKTopPyg/OlwvXC8oW15cLz8jXSopKT8oW14/I10qKSg/Olw/KFte''@;'; put 'put ''I10qKSk/KD86IyguKikpPy8pfTtmdW5jdGlvbiBnKEYpe2lmKEYmJiEvW15hLXowLTlcOlwvXD9cI1xbXF1cQFwhXCRcJlwnXChcKVwqXCtcLFw7XD1cLlwtXF9cflwlXS9pLnRlc3QoRikmJiEvJVteMC05YS1mXS9pLnRlc3QoRikmJiEvJVswLTlhLWZdKDo/W14wLTlhLWZdfCQpL2kudGVz''@;'; put 'put ''dChGKSl7dmFyIE8sTixMLEssVSx6PSIiLFc9IiI7aWYoTj0oTz15KEYpKVsyXSxMPU9bM10sSz1PWzRdLFU9T1s1XSwoej1PWzFdKSYmei5sZW5ndGgmJkwubGVuZ3RoPj0wKXtpZihOJiZOLmxlbmd0aCl7aWYoMCE9PUwubGVuZ3RoJiYhL15cLy8udGVzdChMKSlyZXR1cm59ZWxzZSBpZigv''@;'; put 'put ''XlwvXC8vLnRlc3QoTCkpcmV0dXJuO2lmKC9eW2Etel1bYS16MC05XCtcLVwuXSokLy50ZXN0KHoudG9Mb3dlckNhc2UoKSkpcmV0dXJuIFcrPXorIjoiLE4mJk4ubGVuZ3RoJiYoVys9Ii8vIitOKSxXKz1MLEsmJksubGVuZ3RoJiYoVys9Ij8iK0spLFUmJlUubGVuZ3RoJiYoVys9IiMiK1Up''@;'; put 'put ''LFd9fX1mdW5jdGlvbiBCKEYsTyl7aWYoZyhGKSl7dmFyIHosSyxXLFksTj0iIixMPSIiLFU9IiIsWD0iIjtpZihMPSh6PXkoRikpWzJdLEs9elszXSxXPXpbNF0sWT16WzVdLE49elsxXSl7aWYoTyl7aWYoImh0dHBzIiE9Ti50b0xvd2VyQ2FzZSgpKXJldHVybn1lbHNlIGlmKCJodHRwIiE9''@;'; put 'put ''Ti50b0xvd2VyQ2FzZSgpKXJldHVybjtpZihMKXJldHVybi86KFxkKykkLy50ZXN0KEwpJiYoVT1MLm1hdGNoKC86KFxkKykkLylbMF0sTD1MLnJlcGxhY2UoLzpcZCskLywiIikpLFgrPU4rIjoiLFgrPSIvLyIrTCxVJiYoWCs9VSksWCs9SyxXJiZXLmxlbmd0aCYmKFgrPSI/IitXKSxZJiZZ''@;'; put 'put ''Lmxlbmd0aCYmKFgrPSIjIitZKSxYfX19ZnVuY3Rpb24gdyhGKXtyZXR1cm4gQihGLCEwKX1mdW5jdGlvbiBQKEYpe3JldHVybiBCKEYpfHx3KEYpfX0odWU9Xy5ubWQodWUpKX0sNTE0MDooX191bnVzZWRfd2VicGFja19tb2R1bGUsZXhwb3J0cyk9Pnt2YXIgaW5kZXhPZj1mdW5jdGlvbih1''@;'; put 'put ''ZSxxKXtpZih1ZS5pbmRleE9mKXJldHVybiB1ZS5pbmRleE9mKHEpO2Zvcih2YXIgXz0wO188dWUubGVuZ3RoO18rKylpZih1ZVtfXT09PXEpcmV0dXJuIF87cmV0dXJuLTF9LE9iamVjdF9rZXlzPWZ1bmN0aW9uKHVlKXtpZihPYmplY3Qua2V5cylyZXR1cm4gT2JqZWN0LmtleXModWUpO3Zh''@;'; put 'put ''ciBxPVtdO2Zvcih2YXIgXyBpbiB1ZSlxLnB1c2goXyk7cmV0dXJuIHF9LGZvckVhY2g9ZnVuY3Rpb24odWUscSl7aWYodWUuZm9yRWFjaClyZXR1cm4gdWUuZm9yRWFjaChxKTtmb3IodmFyIF89MDtfPHVlLmxlbmd0aDtfKyspcSh1ZVtfXSxfLHVlKX0sZGVmaW5lUHJvcD1mdW5jdGlvbigp''@;'; put 'put ''e3RyeXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJfIix7fSksZnVuY3Rpb24odWUscSxfKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodWUscSx7d3JpdGFibGU6ITAsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITAsdmFsdWU6X30pfX1jYXRjaHtyZXR1cm4gZnVuY3Rpb24o''@;'; put 'put ''cSxfLEkpe3FbX109SX19fSgpLGdsb2JhbHM9WyJBcnJheSIsIkJvb2xlYW4iLCJEYXRlIiwiRXJyb3IiLCJFdmFsRXJyb3IiLCJGdW5jdGlvbiIsIkluZmluaXR5IiwiSlNPTiIsIk1hdGgiLCJOYU4iLCJOdW1iZXIiLCJPYmplY3QiLCJSYW5nZUVycm9yIiwiUmVmZXJlbmNlRXJyb3IiLCJS''@;'; put 'put ''ZWdFeHAiLCJTdHJpbmciLCJTeW50YXhFcnJvciIsIlR5cGVFcnJvciIsIlVSSUVycm9yIiwiZGVjb2RlVVJJIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZW5jb2RlVVJJIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZXNjYXBlIiwiZXZhbCIsImlzRmluaXRlIiwiaXNOYU4iLCJwYXJzZUZsb2F0''@;'; put 'put ''IiwicGFyc2VJbnQiLCJ1bmRlZmluZWQiLCJ1bmVzY2FwZSJdO2Z1bmN0aW9uIENvbnRleHQoKXt9Q29udGV4dC5wcm90b3R5cGU9e307dmFyIFNjcmlwdD1leHBvcnRzLlNjcmlwdD1mdW5jdGlvbihxKXtpZighKHRoaXMgaW5zdGFuY2VvZiBTY3JpcHQpKXJldHVybiBuZXcgU2NyaXB0KHEp''@;'; put 'put ''O3RoaXMuY29kZT1xfTtTY3JpcHQucHJvdG90eXBlLnJ1bkluQ29udGV4dD1mdW5jdGlvbih1ZSl7aWYoISh1ZSBpbnN0YW5jZW9mIENvbnRleHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIm5lZWRzIGEgJ2NvbnRleHQnIGFyZ3VtZW50LiIpO3ZhciBxPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo''@;'; put 'put ''ImlmcmFtZSIpO3Euc3R5bGV8fChxLnN0eWxlPXt9KSxxLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocSk7dmFyIF89cS5jb250ZW50V2luZG93LEk9Xy5ldmFsLHk9Xy5leGVjU2NyaXB0OyFJJiZ5JiYoeS5jYWxsKF8sIm51bGwiKSxJPV8uZXZhbCks''@;'; put 'put ''Zm9yRWFjaChPYmplY3Rfa2V5cyh1ZSksZnVuY3Rpb24odyl7X1t3XT11ZVt3XX0pLGZvckVhY2goZ2xvYmFscyxmdW5jdGlvbih3KXt1ZVt3XSYmKF9bd109dWVbd10pfSk7dmFyIGc9T2JqZWN0X2tleXMoXyksQj1JLmNhbGwoXyx0aGlzLmNvZGUpO3JldHVybiBmb3JFYWNoKE9iamVjdF9r''@;'; put 'put ''ZXlzKF8pLGZ1bmN0aW9uKHcpeyh3IGluIHVlfHwtMT09PWluZGV4T2YoZyx3KSkmJih1ZVt3XT1fW3ddKX0pLGZvckVhY2goZ2xvYmFscyxmdW5jdGlvbih3KXt3IGluIHVlfHxkZWZpbmVQcm9wKHVlLHcsX1t3XSl9KSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHEpLEJ9LFNjcmlwdC5w''@;'; put 'put ''cm90b3R5cGUucnVuSW5UaGlzQ29udGV4dD1mdW5jdGlvbigpe3JldHVybiBldmFsKHRoaXMuY29kZSl9LFNjcmlwdC5wcm90b3R5cGUucnVuSW5OZXdDb250ZXh0PWZ1bmN0aW9uKHVlKXt2YXIgcT1TY3JpcHQuY3JlYXRlQ29udGV4dCh1ZSksXz10aGlzLnJ1bkluQ29udGV4dChxKTtyZXR1''@;'; put 'put ''cm4gdWUmJmZvckVhY2goT2JqZWN0X2tleXMocSksZnVuY3Rpb24oSSl7dWVbSV09cVtJXX0pLF99LGZvckVhY2goT2JqZWN0X2tleXMoU2NyaXB0LnByb3RvdHlwZSksZnVuY3Rpb24odWUpe2V4cG9ydHNbdWVdPVNjcmlwdFt1ZV09ZnVuY3Rpb24ocSl7dmFyIF89U2NyaXB0KHEpO3JldHVy''@;'; put 'put ''biBfW3VlXS5hcHBseShfLFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpKX19KSxleHBvcnRzLmlzQ29udGV4dD1mdW5jdGlvbih1ZSl7cmV0dXJuIHVlIGluc3RhbmNlb2YgQ29udGV4dH0sZXhwb3J0cy5jcmVhdGVTY3JpcHQ9ZnVuY3Rpb24odWUpe3JldHVybiBleHBvcnRzLlNjcmlwdCh1''@;'; put 'put ''ZSl9LGV4cG9ydHMuY3JlYXRlQ29udGV4dD1TY3JpcHQuY3JlYXRlQ29udGV4dD1mdW5jdGlvbih1ZSl7dmFyIHE9bmV3IENvbnRleHQ7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB1ZSYmZm9yRWFjaChPYmplY3Rfa2V5cyh1ZSksZnVuY3Rpb24oXyl7cVtfXT11ZVtfXX0pLHF9fSw2NDMwOih1''@;'; put 'put ''ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNDAyOSkseT1fKDMwODMpLGc9Xyg1NTU5KSxCPV8oNzM3OSksdz1fKDcyOTYpLFA9QigiT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyIpLEY9Xyg2NDEwKSgpLE89dHlwZW9mIGdsb2JhbFRoaXM+InUiP18uZzpnbG9iYWxUaGlzLHo9eSgp''@;'; put 'put ''LE49QigiU3RyaW5nLnByb3RvdHlwZS5zbGljZSIpLEw9T2JqZWN0LmdldFByb3RvdHlwZU9mLEs9QigiQXJyYXkucHJvdG90eXBlLmluZGV4T2YiLCEwKXx8ZnVuY3Rpb24oZWUsSil7Zm9yKHZhciByZT0wO3JlPGVlLmxlbmd0aDtyZSs9MSlpZihlZVtyZV09PT1KKXJldHVybiByZTtyZXR1''@;'; put 'put ''cm4tMX0sVT17X19wcm90b19fOm51bGx9O0koeixGJiZ3JiZMP2Z1bmN0aW9uKFgpe3ZhciBlZT1uZXcgT1tYXTtpZihTeW1ib2wudG9TdHJpbmdUYWcgaW4gZWUpe3ZhciBKPUwoZWUpLHJlPXcoSixTeW1ib2wudG9TdHJpbmdUYWcpO2lmKCFyZSl7dmFyIGllPUwoSik7cmU9dyhpZSxTeW1i''@;'; put 'put ''b2wudG9TdHJpbmdUYWcpfVVbIiQiK1hdPWcocmUuZ2V0KX19OmZ1bmN0aW9uKFgpe3ZhciBlZT1uZXcgT1tYXSxKPWVlLnNsaWNlfHxlZS5zZXQ7SiYmKFVbIiQiK1hdPWcoSikpfSksdWUuZXhwb3J0cz1mdW5jdGlvbihlZSl7aWYoIWVlfHwib2JqZWN0IiE9dHlwZW9mIGVlKXJldHVybiEx''@;'; put 'put ''O2lmKCFGKXt2YXIgSj1OKFAoZWUpLDgsLTEpO3JldHVybiBLKHosSik+LTE/SjoiT2JqZWN0Ij09PUomJmZ1bmN0aW9uKGVlKXt2YXIgSj0hMTtyZXR1cm4gSShVLGZ1bmN0aW9uKHJlLGllKXtpZighSil0cnl7cmUoZWUpLEo9TihpZSwxKX1jYXRjaHt9fSksSn0oZWUpfXJldHVybiB3P2Z1''@;'; put 'put ''bmN0aW9uKGVlKXt2YXIgSj0hMTtyZXR1cm4gSShVLGZ1bmN0aW9uKHJlLGllKXtpZighSil0cnl7IiQiK3JlKGVlKT09PWllJiYoSj1OKGllLDEpKX1jYXRjaHt9fSksSn0oZWUpOm51bGx9fSw4NjQ2OigpPT57fSw5NTA6KCk9Pnt9LDY2MDE6KCk9Pnt9LDkyMTQ6KCk9Pnt9LDY0MTk6KCk9''@;'; put 'put ''Pnt9LDYzNTM6KCk9Pnt9LDg2MjM6KCk9Pnt9LDc3NDg6KCk9Pnt9LDU1Njg6KCk9Pnt9LDU0NDM6KCk9Pnt9LDQxMjk6KCk9Pnt9LDY2MTk6KCk9Pnt9LDcxMDg6KCk9Pnt9LDIzNjE6KCk9Pnt9LDQ2MTY6KCk9Pnt9LDgzNzM6KCk9Pnt9LDMwODM6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIEk9Xyg5OTA4KSx5PXR5cGVvZiBnbG9iYWxUaGlzPiJ1Ij9fLmc6Z2xvYmFsVGhpczt1ZS5leHBvcnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciBCPVtdLHc9MDt3PEkubGVuZ3RoO3crKykiZnVuY3Rpb24iPT10eXBlb2YgeVtJW3ddXSYmKEJbQi5sZW5ndGhdPUlbd10pO3JldHVybiBCfX0s''@;'; put 'put ''NzIxODoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDQxNTUpLHk9Xyg4NzY0KS5CdWZmZXIsZz1fKDUxMDgpO2Z1bmN0aW9uIEIoU3QsVnQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBTdC5hcHBseShWdCxhcmd1bWVudHMpfX1jb25zdHt0b1N0cmluZzp3fT1PYmplY3QucHJv''@;'; put 'put ''dG90eXBlLHtnZXRQcm90b3R5cGVPZjpQfT1PYmplY3QsRj0oU3Q9PlZ0PT57Y29uc3QgX249dy5jYWxsKFZ0KTtyZXR1cm4gU3RbX25dfHwoU3RbX25dPV9uLnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSkoT2JqZWN0LmNyZWF0ZShudWxsKSksTz1TdD0+KFN0PVN0LnRvTG93ZXJDYXNl''@;'; put 'put ''KCksVnQ9PkYoVnQpPT09U3QpLHo9U3Q9PlZ0PT50eXBlb2YgVnQ9PT1TdCx7aXNBcnJheTpOfT1BcnJheSxMPXooInVuZGVmaW5lZCIpLFU9TygiQXJyYXlCdWZmZXIiKSxZPXooInN0cmluZyIpLFg9eigiZnVuY3Rpb24iKSxlZT16KCJudW1iZXIiKSxKPVN0PT5udWxsIT09U3QmJiJvYmpl''@;'; put 'put ''Y3QiPT10eXBlb2YgU3QsaWU9U3Q9PntpZigib2JqZWN0IiE9PUYoU3QpKXJldHVybiExO2NvbnN0IFZ0PVAoU3QpO3JldHVybiEobnVsbCE9PVZ0JiZWdCE9PU9iamVjdC5wcm90b3R5cGUmJm51bGwhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoVnQpfHxTeW1ib2wudG9TdHJpbmdUYWcgaW4g''@;'; put 'put ''U3R8fFN5bWJvbC5pdGVyYXRvciBpbiBTdCl9LGxlPU8oIkRhdGUiKSxtZT1PKCJGaWxlIiksX2U9TygiQmxvYiIpLFRlPU8oIkZpbGVMaXN0IiksVj1PKCJVUkxTZWFyY2hQYXJhbXMiKSxbcCxiLHgsQ109WyJSZWFkYWJsZVN0cmVhbSIsIlJlcXVlc3QiLCJSZXNwb25zZSIsIkhlYWRlcnMi''@;'; put 'put ''XS5tYXAoTyk7ZnVuY3Rpb24gSChTdCxWdCx7YWxsT3duS2V5czpfbj0hMX09e30pe2lmKG51bGw9PT1TdHx8dHlwZW9mIFN0PiJ1IilyZXR1cm47bGV0IHZuLFJuO2lmKCJvYmplY3QiIT10eXBlb2YgU3QmJihTdD1bU3RdKSxOKFN0KSlmb3Iodm49MCxSbj1TdC5sZW5ndGg7dm48Um47dm4r''@;'; put 'put ''KylWdC5jYWxsKG51bGwsU3Rbdm5dLHZuLFN0KTtlbHNle2NvbnN0IGJuPV9uP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKFN0KTpPYmplY3Qua2V5cyhTdCksY3I9Ym4ubGVuZ3RoO2xldCBtaTtmb3Iodm49MDt2bjxjcjt2bisrKW1pPWJuW3ZuXSxWdC5jYWxsKG51bGwsU3RbbWldLG1p''@;'; put 'put ''LFN0KX19ZnVuY3Rpb24gaihTdCxWdCl7VnQ9VnQudG9Mb3dlckNhc2UoKTtjb25zdCBfbj1PYmplY3Qua2V5cyhTdCk7bGV0IFJuLHZuPV9uLmxlbmd0aDtmb3IoO3ZuLS0gPjA7KWlmKFJuPV9uW3ZuXSxWdD09PVJuLnRvTG93ZXJDYXNlKCkpcmV0dXJuIFJuO3JldHVybiBudWxsfWNvbnN0''@;'; put 'put ''IEU9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Ol8uZyxtPVN0PT4hTChTdCkmJlN0IT09RSxhdD0oU3Q9PlZ0PT5TdCYmVnQgaW5zdGFuY2VvZiBTdCkodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZQ''@;'; put 'put ''KFVpbnQ4QXJyYXkpKSxYZT1PKCJIVE1MRm9ybUVsZW1lbnQiKSxEZT0oKHtoYXNPd25Qcm9wZXJ0eTpTdH0pPT4oVnQsX24pPT5TdC5jYWxsKFZ0LF9uKSkoT2JqZWN0LnByb3RvdHlwZSksRmU9TygiUmVnRXhwIiksUmU9KFN0LFZ0KT0+e2NvbnN0IF9uPU9iamVjdC5nZXRPd25Qcm9wZXJ0''@;'; put 'put ''eURlc2NyaXB0b3JzKFN0KSx2bj17fTtIKF9uLChSbixibik9PntsZXQgY3I7ITEhPT0oY3I9VnQoUm4sYm4sU3QpKSYmKHZuW2JuXT1jcnx8Um4pfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoU3Qsdm4pfSxRZT1PKCJBc3luY0Z1bmN0aW9uIikseXQ9KFN0PSJmdW5jdGlvbiI9PXR5cGVv''@;'; put 'put ''ZiBzZXRJbW1lZGlhdGUsVnQ9WChFLnBvc3RNZXNzYWdlKSxTdD9zZXRJbW1lZGlhdGU6VnQ/KF9uPWBheGlvc0Ake01hdGgucmFuZG9tKCl9YCx2bj1bXSxFLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCh7c291cmNlOlJuLGRhdGE6Ym59KT0+e1JuPT09RSYmYm49PT1fbiYmdm4ubGVu''@;'; put 'put ''Z3RoJiZ2bi5zaGlmdCgpKCl9LCExKSxSbj0+e3ZuLnB1c2goUm4pLEUucG9zdE1lc3NhZ2UoX24sIioiKX0pOl9uPT5zZXRUaW1lb3V0KF9uKSksTXQ9dHlwZW9mIHF1ZXVlTWljcm90YXNrPCJ1Ij9xdWV1ZU1pY3JvdGFzay5iaW5kKEUpOnR5cGVvZiBJPCJ1IiYmSS5uZXh0VGlja3x8eXQ7''@;'; put 'put ''dmFyIFN0LFZ0LF9uLHZuLER0PXtpc0FycmF5Ok4saXNBcnJheUJ1ZmZlcjpVLGlzQnVmZmVyOmZ1bmN0aW9uIEsoU3Qpe3JldHVybiBudWxsIT09U3QmJiFMKFN0KSYmbnVsbCE9PVN0LmNvbnN0cnVjdG9yJiYhTChTdC5jb25zdHJ1Y3RvcikmJlgoU3QuY29uc3RydWN0b3IuaXNCdWZmZXIp''@;'; put 'put ''JiZTdC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihTdCl9LGlzRm9ybURhdGE6U3Q9PntsZXQgVnQ7cmV0dXJuIFN0JiYoImZ1bmN0aW9uIj09dHlwZW9mIEZvcm1EYXRhJiZTdCBpbnN0YW5jZW9mIEZvcm1EYXRhfHxYKFN0LmFwcGVuZCkmJigiZm9ybWRhdGEiPT09KFZ0PUYoU3QpKXx8Im9iamVj''@;'; put 'put ''dCI9PT1WdCYmWChTdC50b1N0cmluZykmJiJbb2JqZWN0IEZvcm1EYXRhXSI9PT1TdC50b1N0cmluZygpKSl9LGlzQXJyYXlCdWZmZXJWaWV3OmZ1bmN0aW9uIFcoU3Qpe2xldCBWdDtyZXR1cm4gVnQ9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVm''@;'; put 'put ''ZmVyLmlzVmlldyhTdCk6U3QmJlN0LmJ1ZmZlciYmVShTdC5idWZmZXIpLFZ0fSxpc1N0cmluZzpZLGlzTnVtYmVyOmVlLGlzQm9vbGVhbjpTdD0+ITA9PT1TdHx8ITE9PT1TdCxpc09iamVjdDpKLGlzUGxhaW5PYmplY3Q6aWUsaXNSZWFkYWJsZVN0cmVhbTpwLGlzUmVxdWVzdDpiLGlzUmVz''@;'; put 'put ''cG9uc2U6eCxpc0hlYWRlcnM6Qyxpc1VuZGVmaW5lZDpMLGlzRGF0ZTpsZSxpc0ZpbGU6bWUsaXNCbG9iOl9lLGlzUmVnRXhwOkZlLGlzRnVuY3Rpb246WCxpc1N0cmVhbTpTdD0+SihTdCkmJlgoU3QucGlwZSksaXNVUkxTZWFyY2hQYXJhbXM6Vixpc1R5cGVkQXJyYXk6YXQsaXNGaWxlTGlz''@;'; put 'put ''dDpUZSxmb3JFYWNoOkgsbWVyZ2U6ZnVuY3Rpb24gQSgpe2NvbnN0e2Nhc2VsZXNzOlN0fT1tKHRoaXMpJiZ0aGlzfHx7fSxWdD17fSxfbj0odm4sUm4pPT57Y29uc3QgYm49U3QmJmooVnQsUm4pfHxSbjtWdFtibl09aWUoVnRbYm5dKSYmaWUodm4pP0EoVnRbYm5dLHZuKTppZSh2bik/QSh7''@;'; put 'put ''fSx2bik6Tih2bik/dm4uc2xpY2UoKTp2bn07Zm9yKGxldCB2bj0wLFJuPWFyZ3VtZW50cy5sZW5ndGg7dm48Um47dm4rKylhcmd1bWVudHNbdm5dJiZIKGFyZ3VtZW50c1t2bl0sX24pO3JldHVybiBWdH0sZXh0ZW5kOihTdCxWdCxfbix7YWxsT3duS2V5czp2bn09e30pPT4oSChWdCwoUm4s''@;'; put 'put ''Ym4pPT57U3RbYm5dPV9uJiZYKFJuKT9CKFJuLF9uKTpSbn0se2FsbE93bktleXM6dm59KSxTdCksdHJpbTpTdD0+U3QudHJpbT9TdC50cmltKCk6U3QucmVwbGFjZSgvXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csIiIpLHN0cmlwQk9NOlN0PT4oNjUyNzk9PT1TdC5jaGFy''@;'; put 'put ''Q29kZUF0KDApJiYoU3Q9U3Quc2xpY2UoMSkpLFN0KSxpbmhlcml0czooU3QsVnQsX24sdm4pPT57U3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoVnQucHJvdG90eXBlLHZuKSxTdC5wcm90b3R5cGUuY29uc3RydWN0b3I9U3QsT2JqZWN0LmRlZmluZVByb3BlcnR5KFN0LCJzdXBlciIse3Zh''@;'; put 'put ''bHVlOlZ0LnByb3RvdHlwZX0pLF9uJiZPYmplY3QuYXNzaWduKFN0LnByb3RvdHlwZSxfbil9LHRvRmxhdE9iamVjdDooU3QsVnQsX24sdm4pPT57bGV0IFJuLGJuLGNyO2NvbnN0IG1pPXt9O2lmKFZ0PVZ0fHx7fSxudWxsPT1TdClyZXR1cm4gVnQ7ZG97Zm9yKFJuPU9iamVjdC5nZXRPd25Q''@;'; put 'put ''cm9wZXJ0eU5hbWVzKFN0KSxibj1Sbi5sZW5ndGg7Ym4tLSA+MDspY3I9Um5bYm5dLCghdm58fHZuKGNyLFN0LFZ0KSkmJiFtaVtjcl0mJihWdFtjcl09U3RbY3JdLG1pW2NyXT0hMCk7U3Q9ITEhPT1fbiYmUChTdCl9d2hpbGUoU3QmJighX258fF9uKFN0LFZ0KSkmJlN0IT09T2JqZWN0LnBy''@;'; put 'put ''b3RvdHlwZSk7cmV0dXJuIFZ0fSxraW5kT2Y6RixraW5kT2ZUZXN0Ok8sZW5kc1dpdGg6KFN0LFZ0LF9uKT0+e1N0PVN0cmluZyhTdCksKHZvaWQgMD09PV9ufHxfbj5TdC5sZW5ndGgpJiYoX249U3QubGVuZ3RoKTtjb25zdCB2bj1TdC5pbmRleE9mKFZ0LF9uLT1WdC5sZW5ndGgpO3JldHVy''@;'; put 'put ''bi0xIT09dm4mJnZuPT09X259LHRvQXJyYXk6U3Q9PntpZighU3QpcmV0dXJuIG51bGw7aWYoTihTdCkpcmV0dXJuIFN0O2xldCBWdD1TdC5sZW5ndGg7aWYoIWVlKFZ0KSlyZXR1cm4gbnVsbDtjb25zdCBfbj1uZXcgQXJyYXkoVnQpO2Zvcig7VnQtLSA+MDspX25bVnRdPVN0W1Z0XTtyZXR1''@;'; put 'put ''cm4gX259LGZvckVhY2hFbnRyeTooU3QsVnQpPT57Y29uc3Qgdm49KFN0JiZTdFtTeW1ib2wuaXRlcmF0b3JdKS5jYWxsKFN0KTtsZXQgUm47Zm9yKDsoUm49dm4ubmV4dCgpKSYmIVJuLmRvbmU7KXtjb25zdCBibj1Sbi52YWx1ZTtWdC5jYWxsKFN0LGJuWzBdLGJuWzFdKX19LG1hdGNoQWxs''@;'; put 'put ''OihTdCxWdCk9PntsZXQgX247Y29uc3Qgdm49W107Zm9yKDtudWxsIT09KF9uPVN0LmV4ZWMoVnQpKTspdm4ucHVzaChfbik7cmV0dXJuIHZufSxpc0hUTUxGb3JtOlhlLGhhc093blByb3BlcnR5OkRlLGhhc093blByb3A6RGUscmVkdWNlRGVzY3JpcHRvcnM6UmUsZnJlZXplTWV0aG9kczpT''@;'; put 'put ''dD0+e1JlKFN0LChWdCxfbik9PntpZihYKFN0KSYmLTEhPT1bImFyZ3VtZW50cyIsImNhbGxlciIsImNhbGxlZSJdLmluZGV4T2YoX24pKXJldHVybiExO2lmKFgoU3RbX25dKSl7aWYoVnQuZW51bWVyYWJsZT0hMSwid3JpdGFibGUiaW4gVnQpcmV0dXJuIHZvaWQoVnQud3JpdGFibGU9ITEp''@;'; put 'put ''O1Z0LnNldHx8KFZ0LnNldD0oKT0+e3Rocm93IEVycm9yKCJDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCAnIitfbisiJyIpfSl9fSl9LHRvT2JqZWN0U2V0OihTdCxWdCk9Pntjb25zdCBfbj17fSx2bj1Sbj0+e1JuLmZvckVhY2goYm49Pntfbltibl09ITB9KX07cmV0dXJuIE4o''@;'; put 'put ''U3QpP3ZuKFN0KTp2bihTdHJpbmcoU3QpLnNwbGl0KFZ0KSksX259LHRvQ2FtZWxDYXNlOlN0PT5TdC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xzXShbYS16XGRdKShcdyopL2csZnVuY3Rpb24oX24sdm4sUm4pe3JldHVybiB2bi50b1VwcGVyQ2FzZSgpK1JufSksbm9vcDooKT0+e30s''@;'; put 'put ''dG9GaW5pdGVOdW1iZXI6KFN0LFZ0KT0+bnVsbCE9U3QmJk51bWJlci5pc0Zpbml0ZShTdD0rU3QpP1N0OlZ0LGZpbmRLZXk6aixnbG9iYWw6RSxpc0NvbnRleHREZWZpbmVkOm0saXNTcGVjQ29tcGxpYW50Rm9ybTpmdW5jdGlvbiBfdChTdCl7cmV0dXJuISEoU3QmJlgoU3QuYXBwZW5kKSYm''@;'; put 'put ''IkZvcm1EYXRhIj09PVN0W1N5bWJvbC50b1N0cmluZ1RhZ10mJlN0W1N5bWJvbC5pdGVyYXRvcl0pfSx0b0pTT05PYmplY3Q6U3Q9Pntjb25zdCBWdD1uZXcgQXJyYXkoMTApLF9uPSh2bixSbik9PntpZihKKHZuKSl7aWYoVnQuaW5kZXhPZih2bik+PTApcmV0dXJuO2lmKCEoInRvSlNPTiJp''@;'; put 'put ''biB2bikpe1Z0W1JuXT12bjtjb25zdCBibj1OKHZuKT9bXTp7fTtyZXR1cm4gSCh2biwoY3IsbWkpPT57Y29uc3QgSHI9X24oY3IsUm4rMSk7IUwoSHIpJiYoYm5bbWldPUhyKX0pLFZ0W1JuXT12b2lkIDAsYm59fXJldHVybiB2bn07cmV0dXJuIF9uKFN0LDApfSxpc0FzeW5jRm46UWUsaXNU''@;'; put 'put ''aGVuYWJsZTpTdD0+U3QmJihKKFN0KXx8WChTdCkpJiZYKFN0LnRoZW4pJiZYKFN0LmNhdGNoKSxzZXRJbW1lZGlhdGU6eXQsYXNhcDpNdH07ZnVuY3Rpb24gaXQoU3QsVnQsX24sdm4sUm4pe0Vycm9yLmNhbGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0''@;'; put 'put ''YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPShuZXcgRXJyb3IpLnN0YWNrLHRoaXMubWVzc2FnZT1TdCx0aGlzLm5hbWU9IkF4aW9zRXJyb3IiLFZ0JiYodGhpcy5jb2RlPVZ0KSxfbiYmKHRoaXMuY29uZmlnPV9uKSx2biYmKHRoaXMucmVxdWVzdD12biksUm4m''@;'; put 'put ''Jih0aGlzLnJlc3BvbnNlPVJuLHRoaXMuc3RhdHVzPVJuLnN0YXR1cz9Sbi5zdGF0dXM6bnVsbCl9RHQuaW5oZXJpdHMoaXQsRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0''@;'; put 'put ''aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzpEdC50b0pTT05PYmplY3QodGhpcy5jb25maWcpLGNvZGU6dGhp''@;'; put 'put ''cy5jb2RlLHN0YXR1czp0aGlzLnN0YXR1c319fSk7Y29uc3QgJGU9aXQucHJvdG90eXBlLHR0PXt9O2Z1bmN0aW9uIGR0KFN0KXtyZXR1cm4gRHQuaXNQbGFpbk9iamVjdChTdCl8fER0LmlzQXJyYXkoU3QpfWZ1bmN0aW9uIHF0KFN0KXtyZXR1cm4gRHQuZW5kc1dpdGgoU3QsIltdIik/U3Qu''@;'; put 'put ''c2xpY2UoMCwtMik6U3R9ZnVuY3Rpb24gUnQoU3QsVnQsX24pe3JldHVybiBTdD9TdC5jb25jYXQoVnQpLm1hcChmdW5jdGlvbihSbixibil7cmV0dXJuIFJuPXF0KFJuKSwhX24mJmJuPyJbIitSbisiXSI6Um59KS5qb2luKF9uPyIuIjoiIik6VnR9WyJFUlJfQkFEX09QVElPTl9WQUxVRSIs''@;'; put 'put ''IkVSUl9CQURfT1BUSU9OIiwiRUNPTk5BQk9SVEVEIiwiRVRJTUVET1VUIiwiRVJSX05FVFdPUksiLCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTIiwiRVJSX0RFUFJFQ0FURUQiLCJFUlJfQkFEX1JFU1BPTlNFIiwiRVJSX0JBRF9SRVFVRVNUIiwiRVJSX0NBTkNFTEVEIiwiRVJSX05PVF9T''@;'; put 'put ''VVBQT1JUIiwiRVJSX0lOVkFMSURfVVJMIl0uZm9yRWFjaChTdD0+e3R0W1N0XT17dmFsdWU6U3R9fSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoaXQsdHQpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSgkZSwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KSxpdC5mcm9tPShTdCxWdCxfbix2bixS''@;'; put 'put ''bixibik9Pntjb25zdCBjcj1PYmplY3QuY3JlYXRlKCRlKTtyZXR1cm4gRHQudG9GbGF0T2JqZWN0KFN0LGNyLGZ1bmN0aW9uKEhyKXtyZXR1cm4gSHIhPT1FcnJvci5wcm90b3R5cGV9LG1pPT4iaXNBeGlvc0Vycm9yIiE9PW1pKSxpdC5jYWxsKGNyLFN0Lm1lc3NhZ2UsVnQsX24sdm4sUm4p''@;'; put 'put ''LGNyLmNhdXNlPVN0LGNyLm5hbWU9U3QubmFtZSxibiYmT2JqZWN0LmFzc2lnbihjcixibiksY3J9O2NvbnN0IGFpPUR0LnRvRmxhdE9iamVjdChEdCx7fSxudWxsLGZ1bmN0aW9uKFZ0KXtyZXR1cm4vXmlzW0EtWl0vLnRlc3QoVnQpfSk7ZnVuY3Rpb24gUXQoU3QsVnQsX24pe2lmKCFEdC5p''@;'; put 'put ''c09iamVjdChTdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigidGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Iik7VnQ9VnR8fG5ldyBGb3JtRGF0YTtjb25zdCB2bj0oX249RHQudG9GbGF0T2JqZWN0KF9uLHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24oX2Esemkp''@;'; put 'put ''e3JldHVybiFEdC5pc1VuZGVmaW5lZCh6aVtfYV0pfSkpLm1ldGFUb2tlbnMsUm49X24udmlzaXRvcnx8c28sYm49X24uZG90cyxjcj1fbi5pbmRleGVzLEhyPShfbi5CbG9ifHx0eXBlb2YgQmxvYjwidSImJkJsb2IpJiZEdC5pc1NwZWNDb21wbGlhbnRGb3JtKFZ0KTtpZighRHQuaXNGdW5j''@;'; put 'put ''dGlvbihSbikpdGhyb3cgbmV3IFR5cGVFcnJvcigidmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24iKTtmdW5jdGlvbiBybyh0YSl7aWYobnVsbD09PXRhKXJldHVybiIiO2lmKER0LmlzRGF0ZSh0YSkpcmV0dXJuIHRhLnRvSVNPU3RyaW5nKCk7aWYoIUhyJiZEdC5pc0Jsb2IodGEpKXRocm93''@;'; put 'put ''IG5ldyBpdCgiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gRHQuaXNBcnJheUJ1ZmZlcih0YSl8fER0LmlzVHlwZWRBcnJheSh0YSk/SHImJiJmdW5jdGlvbiI9PXR5cGVvZiBCbG9iP25ldyBCbG9iKFt0YV0pOnkuZnJvbSh0YSk6dGF9ZnVu''@;'; put 'put ''Y3Rpb24gc28odGEsX2Esemkpe2xldCBPYz10YTtpZih0YSYmIXppJiYib2JqZWN0Ij09dHlwZW9mIHRhKWlmKER0LmVuZHNXaXRoKF9hLCJ7fSIpKV9hPXZuP19hOl9hLnNsaWNlKDAsLTIpLHRhPUpTT04uc3RyaW5naWZ5KHRhKTtlbHNlIGlmKER0LmlzQXJyYXkodGEpJiZmdW5jdGlvbiBQ''@;'; put 'put ''dChTdCl7cmV0dXJuIER0LmlzQXJyYXkoU3QpJiYhU3Quc29tZShkdCl9KHRhKXx8KER0LmlzRmlsZUxpc3QodGEpfHxEdC5lbmRzV2l0aChfYSwiW10iKSkmJihPYz1EdC50b0FycmF5KHRhKSkpcmV0dXJuIF9hPXF0KF9hKSxPYy5mb3JFYWNoKGZ1bmN0aW9uKFNvLFRvKXshRHQuaXNVbmRl''@;'; put 'put ''ZmluZWQoU28pJiZudWxsIT09U28mJlZ0LmFwcGVuZCghMD09PWNyP1J0KFtfYV0sVG8sYm4pOm51bGw9PT1jcj9fYTpfYSsiW10iLHJvKFNvKSl9KSwhMTtyZXR1cm4hIWR0KHRhKXx8KFZ0LmFwcGVuZChSdCh6aSxfYSxibikscm8odGEpKSwhMSl9Y29uc3QgQm89W10sR2E9T2JqZWN0LmFz''@;'; put 'put ''c2lnbihhaSx7ZGVmYXVsdFZpc2l0b3I6c28sY29udmVydFZhbHVlOnJvLGlzVmlzaXRhYmxlOmR0fSk7aWYoIUR0LmlzT2JqZWN0KFN0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkYXRhIG11c3QgYmUgYW4gb2JqZWN0Iik7cmV0dXJuIGZ1bmN0aW9uICRsKHRhLF9hKXtpZighRHQuaXNVbmRl''@;'; put 'put ''ZmluZWQodGEpKXtpZigtMSE9PUJvLmluZGV4T2YodGEpKXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gIitfYS5qb2luKCIuIikpO0JvLnB1c2godGEpLER0LmZvckVhY2godGEsZnVuY3Rpb24oT2MsVmwpeyEwPT09KCEoRHQuaXNVbmRlZmluZWQoT2MpfHxu''@;'; put 'put ''dWxsPT09T2MpJiZSbi5jYWxsKFZ0LE9jLER0LmlzU3RyaW5nKFZsKT9WbC50cmltKCk6VmwsX2EsR2EpKSYmJGwoT2MsX2E/X2EuY29uY2F0KFZsKTpbVmxdKX0pLEJvLnBvcCgpfX0oU3QpLFZ0fWZ1bmN0aW9uIHNuKFN0KXtjb25zdCBWdD17IiEiOiIlMjEiLCInIjoiJTI3IiwiKCI6IiUy''@;'; put 'put ''OCIsIikiOiIlMjkiLCJ+IjoiJTdFIiwiJTIwIjoiKyIsIiUwMCI6IlwwIn07cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChTdCkucmVwbGFjZSgvWyEnKCl+XXwlMjB8JTAwL2csZnVuY3Rpb24odm4pe3JldHVybiBWdFt2bl19KX1mdW5jdGlvbiBSaShTdCxWdCl7dGhpcy5fcGFpcnM9W10s''@;'; put 'put ''U3QmJlF0KFN0LHRoaXMsVnQpfWNvbnN0IGZuPVJpLnByb3RvdHlwZTtmdW5jdGlvbiBmdChTdCl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChTdCkucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywi''@;'; put 'put ''KyIpLnJlcGxhY2UoLyU1Qi9naSwiWyIpLnJlcGxhY2UoLyU1RC9naSwiXSIpfWZ1bmN0aW9uIFByKFN0LFZ0LF9uKXtpZighVnQpcmV0dXJuIFN0O2NvbnN0IHZuPV9uJiZfbi5lbmNvZGV8fGZ0O0R0LmlzRnVuY3Rpb24oX24pJiYoX249e3NlcmlhbGl6ZTpfbn0pO2NvbnN0IFJuPV9uJiZf''@;'; put 'put ''bi5zZXJpYWxpemU7bGV0IGJuO2lmKGJuPVJuP1JuKFZ0LF9uKTpEdC5pc1VSTFNlYXJjaFBhcmFtcyhWdCk/VnQudG9TdHJpbmcoKTpuZXcgUmkoVnQsX24pLnRvU3RyaW5nKHZuKSxibil7Y29uc3QgY3I9U3QuaW5kZXhPZigiIyIpOy0xIT09Y3ImJihTdD1TdC5zbGljZSgwLGNyKSksU3Qr''@;'; put 'put ''PSgtMT09PVN0LmluZGV4T2YoIj8iKT8iPyI6IiYiKStibn1yZXR1cm4gU3R9Zm4uYXBwZW5kPWZ1bmN0aW9uKFZ0LF9uKXt0aGlzLl9wYWlycy5wdXNoKFtWdCxfbl0pfSxmbi50b1N0cmluZz1mdW5jdGlvbihWdCl7Y29uc3QgX249VnQ/ZnVuY3Rpb24odm4pe3JldHVybiBWdC5jYWxsKHRo''@;'; put 'put ''aXMsdm4sc24pfTpzbjtyZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uKFJuKXtyZXR1cm4gX24oUm5bMF0pKyI9IitfbihSblsxXSl9LCIiKS5qb2luKCImIil9O3ZhciBBdD1jbGFzcyBadHtjb25zdHJ1Y3Rvcigpe3RoaXMuaGFuZGxlcnM9W119dXNlKFZ0LF9uLHZuKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6VnQscmVqZWN0ZWQ6X24sc3luY2hyb25vdXM6ISF2biYmdm4uc3luY2hyb25vdXMscnVuV2hlbjp2bj92bi5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfWVqZWN0KFZ0KXt0aGlzLmhhbmRsZXJzW1Z0XSYmKHRoaXMu''@;'; put 'put ''aGFuZGxlcnNbVnRdPW51bGwpfWNsZWFyKCl7dGhpcy5oYW5kbGVycyYmKHRoaXMuaGFuZGxlcnM9W10pfWZvckVhY2goVnQpe0R0LmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbih2bil7bnVsbCE9PXZuJiZWdCh2bil9KX19LExuPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRK''@;'; put 'put ''U09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfSxXZT17aXNCcm93c2VyOiEwLGNsYXNzZXM6e1VSTFNlYXJjaFBhcmFtczp0eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1Ij9VUkxTZWFyY2hQYXJhbXM6UmksRm9ybURhdGE6dHlwZW9mIEZvcm1EYXRhPCJ1Ij9Gb3JtRGF0YTpu''@;'; put 'put ''dWxsLEJsb2I6dHlwZW9mIEJsb2I8InUiP0Jsb2I6bnVsbH0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19O2NvbnN0IFR0PXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiLHJyPSJvYmplY3QiPT10eXBlb2YgbmF2aWdh''@;'; put 'put ''dG9yJiZuYXZpZ2F0b3J8fHZvaWQgMCxodD1UdCYmKCFycnx8WyJSZWFjdE5hdGl2ZSIsIk5hdGl2ZVNjcmlwdCIsIk5TIl0uaW5kZXhPZihyci5wcm9kdWN0KTwwKSx4dD10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJiJm''@;'; put 'put ''dW5jdGlvbiI9PXR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHMsQm49VHQmJndpbmRvdy5sb2NhdGlvbi5ocmVmfHwiaHR0cDovL2xvY2FsaG9zdCI7dmFyIGp0PXsuLi5PYmplY3QuZnJlZXplKHtfX3Byb3RvX186bnVsbCxoYXNCcm93c2VyRW52OlR0LGhhc1N0YW5kYXJkQnJvd3NlcldlYldv''@;'; put 'put ''cmtlckVudjp4dCxoYXNTdGFuZGFyZEJyb3dzZXJFbnY6aHQsbmF2aWdhdG9yOnJyLG9yaWdpbjpCbn0pLC4uLldlfTtmdW5jdGlvbiBJaShTdCl7ZnVuY3Rpb24gVnQoX24sdm4sUm4sYm4pe2xldCBjcj1fbltibisrXTtpZigiX19wcm90b19fIj09PWNyKXJldHVybiEwO2NvbnN0IG1pPU51''@;'; put 'put ''bWJlci5pc0Zpbml0ZSgrY3IpLEhyPWJuPj1fbi5sZW5ndGg7cmV0dXJuIGNyPSFjciYmRHQuaXNBcnJheShSbik/Um4ubGVuZ3RoOmNyLEhyPyhSbltjcl09RHQuaGFzT3duUHJvcChSbixjcik/W1JuW2NyXSx2bl06dm4sIW1pKTooKCFSbltjcl18fCFEdC5pc09iamVjdChSbltjcl0pKSYm''@;'; put 'put ''KFJuW2NyXT1bXSksVnQoX24sdm4sUm5bY3JdLGJuKSYmRHQuaXNBcnJheShSbltjcl0pJiYoUm5bY3JdPWZ1bmN0aW9uIHBuKFN0KXtjb25zdCBWdD17fSxfbj1PYmplY3Qua2V5cyhTdCk7bGV0IHZuO2NvbnN0IFJuPV9uLmxlbmd0aDtsZXQgYm47Zm9yKHZuPTA7dm48Um47dm4rKylibj1f''@;'; put 'put ''blt2bl0sVnRbYm5dPVN0W2JuXTtyZXR1cm4gVnR9KFJuW2NyXSkpLCFtaSl9aWYoRHQuaXNGb3JtRGF0YShTdCkmJkR0LmlzRnVuY3Rpb24oU3QuZW50cmllcykpe2NvbnN0IF9uPXt9O3JldHVybiBEdC5mb3JFYWNoRW50cnkoU3QsKHZuLFJuKT0+e1Z0KGZ1bmN0aW9uIGNuKFN0KXtyZXR1''@;'; put 'put ''cm4gRHQubWF0Y2hBbGwoL1x3K3xcWyhcdyopXS9nLFN0KS5tYXAoVnQ9PiJbXSI9PT1WdFswXT8iIjpWdFsxXXx8VnRbMF0pfSh2biksUm4sX24sMCl9KSxfbn1yZXR1cm4gbnVsbH1jb25zdCBlbj17dHJhbnNpdGlvbmFsOkxuLGFkYXB0ZXI6WyJ4aHIiLCJodHRwIiwiZmV0Y2giXSx0cmFu''@;'; put 'put ''c2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihWdCxfbil7Y29uc3Qgdm49X24uZ2V0Q29udGVudFR5cGUoKXx8IiIsUm49dm4uaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLGJuPUR0LmlzT2JqZWN0KFZ0KTtpZihibiYmRHQuaXNIVE1MRm9ybShWdCkmJihWdD1uZXcgRm9ybURhdGEoVnQp''@;'; put 'put ''KSxEdC5pc0Zvcm1EYXRhKFZ0KSlyZXR1cm4gUm4/SlNPTi5zdHJpbmdpZnkoSWkoVnQpKTpWdDtpZihEdC5pc0FycmF5QnVmZmVyKFZ0KXx8RHQuaXNCdWZmZXIoVnQpfHxEdC5pc1N0cmVhbShWdCl8fER0LmlzRmlsZShWdCl8fER0LmlzQmxvYihWdCl8fER0LmlzUmVhZGFibGVTdHJlYW0o''@;'; put 'put ''VnQpKXJldHVybiBWdDtpZihEdC5pc0FycmF5QnVmZmVyVmlldyhWdCkpcmV0dXJuIFZ0LmJ1ZmZlcjtpZihEdC5pc1VSTFNlYXJjaFBhcmFtcyhWdCkpcmV0dXJuIF9uLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIsITEp''@;'; put 'put ''LFZ0LnRvU3RyaW5nKCk7bGV0IG1pO2lmKGJuKXtpZih2bi5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKT4tMSlyZXR1cm4gZnVuY3Rpb24gZGkoU3QsVnQpe3JldHVybiBRdChTdCxuZXcganQuY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMsT2JqZWN0LmFzc2ln''@;'; put 'put ''bih7dmlzaXRvcjpmdW5jdGlvbihfbix2bixSbixibil7cmV0dXJuIGp0LmlzTm9kZSYmRHQuaXNCdWZmZXIoX24pPyh0aGlzLmFwcGVuZCh2bixfbi50b1N0cmluZygiYmFzZTY0IikpLCExKTpibi5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSxWdCkpfShWdCx0aGlz''@;'; put 'put ''LmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO2lmKChtaT1EdC5pc0ZpbGVMaXN0KFZ0KSl8fHZuLmluZGV4T2YoIm11bHRpcGFydC9mb3JtLWRhdGEiKT4tMSl7Y29uc3QgSHI9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1EYXRhO3JldHVybiBRdChtaT97ImZpbGVzW10iOlZ0fTpWdCxIciYm''@;'; put 'put ''bmV3IEhyLHRoaXMuZm9ybVNlcmlhbGl6ZXIpfX1yZXR1cm4gYm58fFJuPyhfbi5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLGZ1bmN0aW9uIFh0KFN0LFZ0LF9uKXtpZihEdC5pc1N0cmluZyhTdCkpdHJ5e3JldHVybihWdHx8SlNPTi5wYXJzZSkoU3QpLER0LnRyaW0o''@;'; put 'put ''U3QpfWNhdGNoKHZuKXtpZigiU3ludGF4RXJyb3IiIT09dm4ubmFtZSl0aHJvdyB2bn1yZXR1cm4oX258fEpTT04uc3RyaW5naWZ5KShTdCl9KFZ0KSk6VnR9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24oVnQpe2NvbnN0IF9uPXRoaXMudHJhbnNpdGlvbmFsfHxlbi50cmFuc2l0aW9u''@;'; put 'put ''YWwsdm49X24mJl9uLmZvcmNlZEpTT05QYXJzaW5nLFJuPSJqc29uIj09PXRoaXMucmVzcG9uc2VUeXBlO2lmKER0LmlzUmVzcG9uc2UoVnQpfHxEdC5pc1JlYWRhYmxlU3RyZWFtKFZ0KSlyZXR1cm4gVnQ7aWYoVnQmJkR0LmlzU3RyaW5nKFZ0KSYmKHZuJiYhdGhpcy5yZXNwb25zZVR5cGV8''@;'; put 'put ''fFJuKSl7Y29uc3QgY3I9IShfbiYmX24uc2lsZW50SlNPTlBhcnNpbmcpJiZSbjt0cnl7cmV0dXJuIEpTT04ucGFyc2UoVnQpfWNhdGNoKG1pKXtpZihjcil0aHJvdyJTeW50YXhFcnJvciI9PT1taS5uYW1lP2l0LmZyb20obWksaXQuRVJSX0JBRF9SRVNQT05TRSx0aGlzLG51bGwsdGhpcy5y''@;'; put 'put ''ZXNwb25zZSk6bWl9fXJldHVybiBWdH1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6anQuY2xhc3Nlcy5Gb3JtRGF0YSxC''@;'; put 'put ''bG9iOmp0LmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oVnQpe3JldHVybiBWdD49MjAwJiZWdDwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOnZvaWQgMH19fTtEdC5mb3JF''@;'; put 'put ''YWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCJdLFN0PT57ZW4uaGVhZGVyc1tTdF09e319KTt2YXIgaG89ZW47Y29uc3QgTWk9RHQudG9PYmplY3RTZXQoWyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJl''@;'; put 'put ''dGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXIt''@;'; put 'put ''YWdlbnQiXSksV249U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiBLaShTdCl7cmV0dXJuIFN0JiZTdHJpbmcoU3QpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIFFyKFN0KXtyZXR1cm4hMT09PVN0fHxudWxsPT1TdD9TdDpEdC5pc0FycmF5KFN0KT9TdC5tYXAoUXIpOlN0cmlu''@;'; put 'put ''ZyhTdCl9ZnVuY3Rpb24gVmkoU3QsVnQsX24sdm4sUm4pe2lmKER0LmlzRnVuY3Rpb24odm4pKXJldHVybiB2bi5jYWxsKHRoaXMsVnQsX24pO2lmKFJuJiYoVnQ9X24pLER0LmlzU3RyaW5nKFZ0KSl7aWYoRHQuaXNTdHJpbmcodm4pKXJldHVybi0xIT09VnQuaW5kZXhPZih2bik7aWYoRHQu''@;'; put 'put ''aXNSZWdFeHAodm4pKXJldHVybiB2bi50ZXN0KFZ0KX19Y2xhc3MgWWl7Y29uc3RydWN0b3IoVnQpe1Z0JiZ0aGlzLnNldChWdCl9c2V0KFZ0LF9uLHZuKXtjb25zdCBSbj10aGlzO2Z1bmN0aW9uIGJuKG1pLEhyLHJvKXtjb25zdCBzbz1LaShIcik7aWYoIXNvKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''aGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtjb25zdCBCbz1EdC5maW5kS2V5KFJuLHNvKTsoIUJvfHx2b2lkIDA9PT1SbltCb118fCEwPT09cm98fHZvaWQgMD09PXJvJiYhMSE9PVJuW0JvXSkmJihSbltCb3x8SHJdPVFyKG1pKSl9Y29uc3QgY3I9KG1pLEhyKT0+''@;'; put 'put ''RHQuZm9yRWFjaChtaSwocm8sc28pPT5ibihybyxzbyxIcikpO2lmKER0LmlzUGxhaW5PYmplY3QoVnQpfHxWdCBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpY3IoVnQsX24pO2Vsc2UgaWYoRHQuaXNTdHJpbmcoVnQpJiYoVnQ9VnQudHJpbSgpKSYmIShTdD0+L15bLV9hLXpBLVowLTle''@;'; put 'put ''YHx+LCEjJCUmJyorLl0rJC8udGVzdChTdC50cmltKCkpKShWdCkpY3IoKFN0PT57Y29uc3QgVnQ9e307bGV0IF9uLHZuLFJuO3JldHVybiBTdCYmU3Quc3BsaXQoIlxuIikuZm9yRWFjaChmdW5jdGlvbihjcil7Um49Y3IuaW5kZXhPZigiOiIpLF9uPWNyLnN1YnN0cmluZygwLFJuKS50cmlt''@;'; put 'put ''KCkudG9Mb3dlckNhc2UoKSx2bj1jci5zdWJzdHJpbmcoUm4rMSkudHJpbSgpLCEoIV9ufHxWdFtfbl0mJk1pW19uXSkmJigic2V0LWNvb2tpZSI9PT1fbj9WdFtfbl0/VnRbX25dLnB1c2godm4pOlZ0W19uXT1bdm5dOlZ0W19uXT1WdFtfbl0/VnRbX25dKyIsICIrdm46dm4pfSksVnR9KShW''@;'; put 'put ''dCksX24pO2Vsc2UgaWYoRHQuaXNIZWFkZXJzKFZ0KSlmb3IoY29uc3RbbWksSHJdb2YgVnQuZW50cmllcygpKWJuKEhyLG1pLHZuKTtlbHNlIG51bGwhPVZ0JiZibihfbixWdCx2bik7cmV0dXJuIHRoaXN9Z2V0KFZ0LF9uKXtpZihWdD1LaShWdCkpe2NvbnN0IHZuPUR0LmZpbmRLZXkodGhp''@;'; put 'put ''cyxWdCk7aWYodm4pe2NvbnN0IFJuPXRoaXNbdm5dO2lmKCFfbilyZXR1cm4gUm47aWYoITA9PT1fbilyZXR1cm4gZnVuY3Rpb24gSnIoU3Qpe2NvbnN0IFZ0PU9iamVjdC5jcmVhdGUobnVsbCksX249LyhbXlxzLDs9XSspXHMqKD86PVxzKihbXiw7XSspKT8vZztsZXQgdm47Zm9yKDt2bj1f''@;'; put 'put ''bi5leGVjKFN0KTspVnRbdm5bMV1dPXZuWzJdO3JldHVybiBWdH0oUm4pO2lmKER0LmlzRnVuY3Rpb24oX24pKXJldHVybiBfbi5jYWxsKHRoaXMsUm4sdm4pO2lmKER0LmlzUmVnRXhwKF9uKSlyZXR1cm4gX24uZXhlYyhSbik7dGhyb3cgbmV3IFR5cGVFcnJvcigicGFyc2VyIG11c3QgYmUg''@;'; put 'put ''Ym9vbGVhbnxyZWdleHB8ZnVuY3Rpb24iKX19fWhhcyhWdCxfbil7aWYoVnQ9S2koVnQpKXtjb25zdCB2bj1EdC5maW5kS2V5KHRoaXMsVnQpO3JldHVybiEoIXZufHx2b2lkIDA9PT10aGlzW3ZuXXx8X24mJiFWaSgwLHRoaXNbdm5dLHZuLF9uKSl9cmV0dXJuITF9ZGVsZXRlKFZ0LF9uKXtj''@;'; put 'put ''b25zdCB2bj10aGlzO2xldCBSbj0hMTtmdW5jdGlvbiBibihjcil7aWYoY3I9S2koY3IpKXtjb25zdCBtaT1EdC5maW5kS2V5KHZuLGNyKTttaSYmKCFfbnx8VmkoMCx2blttaV0sbWksX24pKSYmKGRlbGV0ZSB2blttaV0sUm49ITApfX1yZXR1cm4gRHQuaXNBcnJheShWdCk/VnQuZm9yRWFj''@;'; put 'put ''aChibik6Ym4oVnQpLFJufWNsZWFyKFZ0KXtjb25zdCBfbj1PYmplY3Qua2V5cyh0aGlzKTtsZXQgdm49X24ubGVuZ3RoLFJuPSExO2Zvcig7dm4tLTspe2NvbnN0IGJuPV9uW3ZuXTsoIVZ0fHxWaSgwLHRoaXNbYm5dLGJuLFZ0LCEwKSkmJihkZWxldGUgdGhpc1tibl0sUm49ITApfXJldHVy''@;'; put 'put ''biBSbn1ub3JtYWxpemUoVnQpe2NvbnN0IF9uPXRoaXMsdm49e307cmV0dXJuIER0LmZvckVhY2godGhpcywoUm4sYm4pPT57Y29uc3QgY3I9RHQuZmluZEtleSh2bixibik7aWYoY3IpcmV0dXJuIF9uW2NyXT1RcihSbiksdm9pZCBkZWxldGUgX25bYm5dO2NvbnN0IG1pPVZ0P2Z1bmN0aW9u''@;'; put 'put ''IElvKFN0KXtyZXR1cm4gU3QudHJpbSgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcZF0pKFx3KikvZywoVnQsX24sdm4pPT5fbi50b1VwcGVyQ2FzZSgpK3ZuKX0oYm4pOlN0cmluZyhibikudHJpbSgpO21pIT09Ym4mJmRlbGV0ZSBfbltibl0sX25bbWldPVFyKFJuKSx2blttaV09''@;'; put 'put ''ITB9KSx0aGlzfWNvbmNhdCguLi5WdCl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsLi4uVnQpfXRvSlNPTihWdCl7Y29uc3QgX249T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gRHQuZm9yRWFjaCh0aGlzLCh2bixSbik9PntudWxsIT12biYmITEhPT12biYmKF9uW1Ju''@;'; put 'put ''XT1WdCYmRHQuaXNBcnJheSh2bik/dm4uam9pbigiLCAiKTp2bil9KSxfbn1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCl9dG9TdHJpbmcoKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04o''@;'; put 'put ''KSkubWFwKChbVnQsX25dKT0+VnQrIjogIitfbikuam9pbigiXG4iKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKFZ0KXtyZXR1cm4gVnQgaW5zdGFuY2VvZiB0aGlzP1Z0Om5ldyB0aGlzKFZ0KX1zdGF0aWMgY29uY2F0KFZ0LC4u''@;'; put 'put ''Ll9uKXtjb25zdCB2bj1uZXcgdGhpcyhWdCk7cmV0dXJuIF9uLmZvckVhY2goUm49PnZuLnNldChSbikpLHZufXN0YXRpYyBhY2Nlc3NvcihWdCl7Y29uc3Qgdm49KHRoaXNbV25dPXRoaXNbV25dPXthY2Nlc3NvcnM6e319KS5hY2Nlc3NvcnMsUm49dGhpcy5wcm90b3R5cGU7ZnVuY3Rpb24g''@;'; put 'put ''Ym4oY3Ipe2NvbnN0IG1pPUtpKGNyKTt2blttaV18fChmdW5jdGlvbiBPcihTdCxWdCl7Y29uc3QgX249RHQudG9DYW1lbENhc2UoIiAiK1Z0KTtbImdldCIsInNldCIsImhhcyJdLmZvckVhY2godm49PntPYmplY3QuZGVmaW5lUHJvcGVydHkoU3Qsdm4rX24se3ZhbHVlOmZ1bmN0aW9uKFJu''@;'; put 'put ''LGJuLGNyKXtyZXR1cm4gdGhpc1t2bl0uY2FsbCh0aGlzLFZ0LFJuLGJuLGNyKX0sY29uZmlndXJhYmxlOiEwfSl9KX0oUm4sY3IpLHZuW21pXT0hMCl9cmV0dXJuIER0LmlzQXJyYXkoVnQpP1Z0LmZvckVhY2goYm4pOmJuKFZ0KSx0aGlzfX1ZaS5hY2Nlc3NvcihbIkNvbnRlbnQtVHlwZSIs''@;'; put 'put ''IkNvbnRlbnQtTGVuZ3RoIiwiQWNjZXB0IiwiQWNjZXB0LUVuY29kaW5nIiwiVXNlci1BZ2VudCIsIkF1dGhvcml6YXRpb24iXSksRHQucmVkdWNlRGVzY3JpcHRvcnMoWWkucHJvdG90eXBlLCh7dmFsdWU6U3R9LFZ0KT0+e2xldCBfbj1WdFswXS50b1VwcGVyQ2FzZSgpK1Z0LnNsaWNlKDEp''@;'; put 'put ''O3JldHVybntnZXQ6KCk9PlN0LHNldCh2bil7dGhpc1tfbl09dm59fX0pLER0LmZyZWV6ZU1ldGhvZHMoWWkpO3ZhciBnbz1ZaTtmdW5jdGlvbiBlcihTdCxWdCl7Y29uc3QgX249dGhpc3x8aG8sdm49VnR8fF9uLFJuPWdvLmZyb20odm4uaGVhZGVycyk7bGV0IGJuPXZuLmRhdGE7cmV0dXJu''@;'; put 'put ''IER0LmZvckVhY2goU3QsZnVuY3Rpb24obWkpe2JuPW1pLmNhbGwoX24sYm4sUm4ubm9ybWFsaXplKCksVnQ/VnQuc3RhdHVzOnZvaWQgMCl9KSxSbi5ub3JtYWxpemUoKSxibn1mdW5jdGlvbiBjbyhTdCl7cmV0dXJuISghU3R8fCFTdC5fX0NBTkNFTF9fKX1mdW5jdGlvbiBfbyhTdCxWdCxf''@;'; put 'put ''bil7aXQuY2FsbCh0aGlzLFN0Pz8iY2FuY2VsZWQiLGl0LkVSUl9DQU5DRUxFRCxWdCxfbiksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1mdW5jdGlvbiBPbyhTdCxWdCxfbil7Y29uc3Qgdm49X24uY29uZmlnLnZhbGlkYXRlU3RhdHVzO19uLnN0YXR1cyYmdm4mJiF2bihfbi5zdGF0dXMp''@;'; put 'put ''P1Z0KG5ldyBpdCgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK19uLnN0YXR1cyxbaXQuRVJSX0JBRF9SRVFVRVNULGl0LkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IoX24uc3RhdHVzLzEwMCktNF0sX24uY29uZmlnLF9uLnJlcXVlc3QsX24pKTpTdChfbil9RHQuaW5o''@;'; put 'put ''ZXJpdHMoX28saXQse19fQ0FOQ0VMX186ITB9KTtjb25zdCBOcz0oU3QsVnQsX249Myk9PntsZXQgdm49MDtjb25zdCBSbj1mdW5jdGlvbiBlaShTdCxWdCl7U3Q9U3R8fDEwO2NvbnN0IF9uPW5ldyBBcnJheShTdCksdm49bmV3IEFycmF5KFN0KTtsZXQgY3IsUm49MCxibj0wO3JldHVybiBW''@;'; put 'put ''dD12b2lkIDAhPT1WdD9WdDoxZTMsZnVuY3Rpb24oSHIpe2NvbnN0IHJvPURhdGUubm93KCksc289dm5bYm5dO2NyfHwoY3I9cm8pLF9uW1JuXT1Icix2bltSbl09cm87bGV0IEJvPWJuLEdhPTA7Zm9yKDtCbyE9PVJuOylHYSs9X25bQm8rK10sQm8lPVN0O2lmKFJuPShSbisxKSVTdCxSbj09''@;'; put 'put ''PWJuJiYoYm49KGJuKzEpJVN0KSxyby1jcjxWdClyZXR1cm47Y29uc3QgJGw9c28mJnJvLXNvO3JldHVybiAkbD9NYXRoLnJvdW5kKDFlMypHYS8kbCk6dm9pZCAwfX0oNTAsMjUwKTtyZXR1cm4gZnVuY3Rpb24gZ2EoU3QsVnQpe2xldCBSbixibixfbj0wLHZuPTFlMy9WdDtjb25zdCBjcj0o''@;'; put 'put ''cm8sc289RGF0ZS5ub3coKSk9Pntfbj1zbyxSbj1udWxsLGJuJiYoY2xlYXJUaW1lb3V0KGJuKSxibj1udWxsKSxTdC5hcHBseShudWxsLHJvKX07cmV0dXJuWyguLi5ybyk9Pntjb25zdCBzbz1EYXRlLm5vdygpLEJvPXNvLV9uO0JvPj12bj9jcihybyxzbyk6KFJuPXJvLGJufHwoYm49c2V0''@;'; put 'put ''VGltZW91dCgoKT0+e2JuPW51bGwsY3IoUm4pfSx2bi1CbykpKX0sKCk9PlJuJiZjcihSbildfShibj0+e2NvbnN0IGNyPWJuLmxvYWRlZCxtaT1ibi5sZW5ndGhDb21wdXRhYmxlP2JuLnRvdGFsOnZvaWQgMCxIcj1jci12bixybz1SbihIcik7dm49Y3IsU3Qoe2xvYWRlZDpjcix0b3RhbDpt''@;'; put 'put ''aSxwcm9ncmVzczptaT9jci9taTp2b2lkIDAsYnl0ZXM6SHIscmF0ZTpyb3x8dm9pZCAwLGVzdGltYXRlZDpybyYmbWkmJmNyPD1taT8obWktY3IpL3JvOnZvaWQgMCxldmVudDpibixsZW5ndGhDb21wdXRhYmxlOm51bGwhPW1pLFtWdD8iZG93bmxvYWQiOiJ1cGxvYWQiXTohMH0pfSxfbil9''@;'; put 'put ''LG1sPShTdCxWdCk9Pntjb25zdCBfbj1udWxsIT1TdDtyZXR1cm5bdm49PlZ0WzBdKHtsZW5ndGhDb21wdXRhYmxlOl9uLHRvdGFsOlN0LGxvYWRlZDp2bn0pLFZ0WzFdXX0sZnU9U3Q9PiguLi5WdCk9PkR0LmFzYXAoKCk9PlN0KC4uLlZ0KSk7dmFyIFJjPWp0Lmhhc1N0YW5kYXJkQnJvd3Nl''@;'; put 'put ''ckVudj8oKFN0LFZ0KT0+X249Pihfbj1uZXcgVVJMKF9uLGp0Lm9yaWdpbiksU3QucHJvdG9jb2w9PT1fbi5wcm90b2NvbCYmU3QuaG9zdD09PV9uLmhvc3QmJihWdHx8U3QucG9ydD09PV9uLnBvcnQpKSkobmV3IFVSTChqdC5vcmlnaW4pLGp0Lm5hdmlnYXRvciYmLyhtc2llfHRyaWRlbnQp''@;'; put 'put ''L2kudGVzdChqdC5uYXZpZ2F0b3IudXNlckFnZW50KSk6KCk9PiEwLEQwPWp0Lmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGUoU3QsVnQsX24sdm4sUm4sYm4pe2NvbnN0IGNyPVtTdCsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KFZ0KV07RHQuaXNOdW1iZXIoX24pJiZjci5wdXNoKCJleHBp''@;'; put 'put ''cmVzPSIrbmV3IERhdGUoX24pLnRvR01UU3RyaW5nKCkpLER0LmlzU3RyaW5nKHZuKSYmY3IucHVzaCgicGF0aD0iK3ZuKSxEdC5pc1N0cmluZyhSbikmJmNyLnB1c2goImRvbWFpbj0iK1JuKSwhMD09PWJuJiZjci5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9Y3Iuam9pbigiOyAi''@;'; put 'put ''KX0scmVhZChTdCl7Y29uc3QgVnQ9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK1N0KyIpPShbXjtdKikiKSk7cmV0dXJuIFZ0P2RlY29kZVVSSUNvbXBvbmVudChWdFszXSk6bnVsbH0scmVtb3ZlKFN0KXt0aGlzLndyaXRlKFN0LCIiLERhdGUubm93KCkt''@;'; put 'put ''ODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkOigpPT5udWxsLHJlbW92ZSgpe319O2Z1bmN0aW9uIHNpKFN0LFZ0LF9uKXtsZXQgdm49IWZ1bmN0aW9uIG9yKFN0KXtyZXR1cm4vXihbYS16XVthLXpcZCtcLS5dKjopP1wvXC8vaS50ZXN0KFN0KX0oVnQpO3JldHVybiBTdCYmdm58fDA9PV9uP2Z1''@;'; put 'put ''bmN0aW9uIHhvKFN0LFZ0KXtyZXR1cm4gVnQ/U3QucmVwbGFjZSgvXC8/XC8kLywiIikrIi8iK1Z0LnJlcGxhY2UoL15cLysvLCIiKTpTdH0oU3QsVnQpOlZ0fWNvbnN0IEh0PVN0PT5TdCBpbnN0YW5jZW9mIGdvP3suLi5TdH06U3Q7ZnVuY3Rpb24gWHIoU3QsVnQpe1Z0PVZ0fHx7fTtjb25z''@;'; put 'put ''dCBfbj17fTtmdW5jdGlvbiB2bihybyxzbyxCbyxHYSl7cmV0dXJuIER0LmlzUGxhaW5PYmplY3Qocm8pJiZEdC5pc1BsYWluT2JqZWN0KHNvKT9EdC5tZXJnZS5jYWxsKHtjYXNlbGVzczpHYX0scm8sc28pOkR0LmlzUGxhaW5PYmplY3Qoc28pP0R0Lm1lcmdlKHt9LHNvKTpEdC5pc0FycmF5''@;'; put 'put ''KHNvKT9zby5zbGljZSgpOnNvfWZ1bmN0aW9uIFJuKHJvLHNvLEJvLEdhKXtyZXR1cm4gRHQuaXNVbmRlZmluZWQoc28pP0R0LmlzVW5kZWZpbmVkKHJvKT92b2lkIDA6dm4odm9pZCAwLHJvLDAsR2EpOnZuKHJvLHNvLDAsR2EpfWZ1bmN0aW9uIGJuKHJvLHNvKXtpZighRHQuaXNVbmRlZmlu''@;'; put 'put ''ZWQoc28pKXJldHVybiB2bih2b2lkIDAsc28pfWZ1bmN0aW9uIGNyKHJvLHNvKXtyZXR1cm4gRHQuaXNVbmRlZmluZWQoc28pP0R0LmlzVW5kZWZpbmVkKHJvKT92b2lkIDA6dm4odm9pZCAwLHJvKTp2bih2b2lkIDAsc28pfWZ1bmN0aW9uIG1pKHJvLHNvLEJvKXtyZXR1cm4gQm8gaW4gVnQ/''@;'; put 'put ''dm4ocm8sc28pOkJvIGluIFN0P3ZuKHZvaWQgMCxybyk6dm9pZCAwfWNvbnN0IEhyPXt1cmw6Ym4sbWV0aG9kOmJuLGRhdGE6Ym4sYmFzZVVSTDpjcix0cmFuc2Zvcm1SZXF1ZXN0OmNyLHRyYW5zZm9ybVJlc3BvbnNlOmNyLHBhcmFtc1NlcmlhbGl6ZXI6Y3IsdGltZW91dDpjcix0aW1lb3V0''@;'; put 'put ''TWVzc2FnZTpjcix3aXRoQ3JlZGVudGlhbHM6Y3Isd2l0aFhTUkZUb2tlbjpjcixhZGFwdGVyOmNyLHJlc3BvbnNlVHlwZTpjcix4c3JmQ29va2llTmFtZTpjcix4c3JmSGVhZGVyTmFtZTpjcixvblVwbG9hZFByb2dyZXNzOmNyLG9uRG93bmxvYWRQcm9ncmVzczpjcixkZWNvbXByZXNzOmNy''@;'; put 'put ''LG1heENvbnRlbnRMZW5ndGg6Y3IsbWF4Qm9keUxlbmd0aDpjcixiZWZvcmVSZWRpcmVjdDpjcix0cmFuc3BvcnQ6Y3IsaHR0cEFnZW50OmNyLGh0dHBzQWdlbnQ6Y3IsY2FuY2VsVG9rZW46Y3Isc29ja2V0UGF0aDpjcixyZXNwb25zZUVuY29kaW5nOmNyLHZhbGlkYXRlU3RhdHVzOm1pLGhl''@;'; put 'put ''YWRlcnM6KHJvLHNvLEJvKT0+Um4oSHQocm8pLEh0KHNvKSwwLCEwKX07cmV0dXJuIER0LmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxTdCxWdCkpLGZ1bmN0aW9uKHNvKXtjb25zdCBCbz1Icltzb118fFJuLEdhPUJvKFN0W3NvXSxWdFtzb10sc28pO0R0LmlzVW5kZWZp''@;'; put 'put ''bmVkKEdhKSYmQm8hPT1taXx8KF9uW3NvXT1HYSl9KSxfbn12YXIgYjA9U3Q9Pntjb25zdCBWdD1Ycih7fSxTdCk7bGV0IEhyLHtkYXRhOl9uLHdpdGhYU1JGVG9rZW46dm4seHNyZkhlYWRlck5hbWU6Um4seHNyZkNvb2tpZU5hbWU6Ym4saGVhZGVyczpjcixhdXRoOm1pfT1WdDtpZihWdC5o''@;'; put 'put ''ZWFkZXJzPWNyPWdvLmZyb20oY3IpLFZ0LnVybD1QcihzaShWdC5iYXNlVVJMLFZ0LnVybCksU3QucGFyYW1zLFN0LnBhcmFtc1NlcmlhbGl6ZXIpLG1pJiZjci5zZXQoIkF1dGhvcml6YXRpb24iLCJCYXNpYyAiK2J0b2EoKG1pLnVzZXJuYW1lfHwiIikrIjoiKyhtaS5wYXNzd29yZD91bmVz''@;'; put 'put ''Y2FwZShlbmNvZGVVUklDb21wb25lbnQobWkucGFzc3dvcmQpKToiIikpKSxEdC5pc0Zvcm1EYXRhKF9uKSlpZihqdC5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fGp0Lmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiljci5zZXRDb250ZW50VHlwZSh2b2lkIDApO2Vsc2UgaWYoITEhPT0o''@;'; put 'put ''SHI9Y3IuZ2V0Q29udGVudFR5cGUoKSkpe2NvbnN0W3JvLC4uLnNvXT1Icj9Ici5zcGxpdCgiOyIpLm1hcChCbz0+Qm8udHJpbSgpKS5maWx0ZXIoQm9vbGVhbik6W107Y3Iuc2V0Q29udGVudFR5cGUoW3JvfHwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsLi4uc29dLmpvaW4oIjsgIikpfWlmKGp0''@;'; put 'put ''Lmhhc1N0YW5kYXJkQnJvd3NlckVudiYmKHZuJiZEdC5pc0Z1bmN0aW9uKHZuKSYmKHZuPXZuKFZ0KSksdm58fCExIT09dm4mJlJjKFZ0LnVybCkpKXtjb25zdCBybz1SbiYmYm4mJkQwLnJlYWQoYm4pO3JvJiZjci5zZXQoUm4scm8pfXJldHVybiBWdH0sUnU9dHlwZW9mIFhNTEh0dHBSZXF1''@;'; put 'put ''ZXN0PCJ1IiYmZnVuY3Rpb24oU3Qpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihfbix2bil7Y29uc3QgUm49YjAoU3QpO2xldCBibj1Sbi5kYXRhO2NvbnN0IGNyPWdvLmZyb20oUm4uaGVhZGVycykubm9ybWFsaXplKCk7bGV0IHNvLEJvLEdhLCRsLHRhLHtyZXNwb25zZVR5cGU6bWks''@;'; put 'put ''b25VcGxvYWRQcm9ncmVzczpIcixvbkRvd25sb2FkUHJvZ3Jlc3M6cm99PVJuO2Z1bmN0aW9uIF9hKCl7JGwmJiRsKCksdGEmJnRhKCksUm4uY2FuY2VsVG9rZW4mJlJuLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKHNvKSxSbi5zaWduYWwmJlJuLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVy''@;'; put 'put ''KCJhYm9ydCIsc28pfWxldCB6aT1uZXcgWE1MSHR0cFJlcXVlc3Q7ZnVuY3Rpb24gT2MoKXtpZighemkpcmV0dXJuO2NvbnN0IFNvPWdvLmZyb20oImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiB6aSYmemkuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpO09vKGZ1bmN0aW9uKEswKXtfbihLMCks''@;'; put 'put ''X2EoKX0sZnVuY3Rpb24oSzApe3ZuKEswKSxfYSgpfSx7ZGF0YTptaSYmInRleHQiIT09bWkmJiJqc29uIiE9PW1pP3ppLnJlc3BvbnNlOnppLnJlc3BvbnNlVGV4dCxzdGF0dXM6emkuc3RhdHVzLHN0YXR1c1RleHQ6emkuc3RhdHVzVGV4dCxoZWFkZXJzOlNvLGNvbmZpZzpTdCxyZXF1ZXN0''@;'; put 'put ''OnppfSksemk9bnVsbH16aS5vcGVuKFJuLm1ldGhvZC50b1VwcGVyQ2FzZSgpLFJuLnVybCwhMCksemkudGltZW91dD1Sbi50aW1lb3V0LCJvbmxvYWRlbmQiaW4gemk/emkub25sb2FkZW5kPU9jOnppLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyF6aXx8NCE9PXppLnJlYWR5U3Rh''@;'; put 'put ''dGV8fDA9PT16aS5zdGF0dXMmJighemkucmVzcG9uc2VVUkx8fDAhPT16aS5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpKXx8c2V0VGltZW91dChPYyl9LHppLm9uYWJvcnQ9ZnVuY3Rpb24oKXt6aSYmKHZuKG5ldyBpdCgiUmVxdWVzdCBhYm9ydGVkIixpdC5FQ09OTkFCT1JURUQsU3Qs''@;'; put 'put ''emkpKSx6aT1udWxsKX0semkub25lcnJvcj1mdW5jdGlvbigpe3ZuKG5ldyBpdCgiTmV0d29yayBFcnJvciIsaXQuRVJSX05FVFdPUkssU3QsemkpKSx6aT1udWxsfSx6aS5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtsZXQgVG89Um4udGltZW91dD8idGltZW91dCBvZiAiK1JuLnRpbWVvdXQrIm1z''@;'; put 'put ''IGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCI7Um4udGltZW91dEVycm9yTWVzc2FnZSYmKFRvPVJuLnRpbWVvdXRFcnJvck1lc3NhZ2UpLHZuKG5ldyBpdChUbywoUm4udHJhbnNpdGlvbmFsfHxMbikuY2xhcmlmeVRpbWVvdXRFcnJvcj9pdC5FVElNRURPVVQ6aXQuRUNPTk5BQk9SVEVE''@;'; put 'put ''LFN0LHppKSksemk9bnVsbH0sdm9pZCAwPT09Ym4mJmNyLnNldENvbnRlbnRUeXBlKG51bGwpLCJzZXRSZXF1ZXN0SGVhZGVyImluIHppJiZEdC5mb3JFYWNoKGNyLnRvSlNPTigpLGZ1bmN0aW9uKFRvLFloKXt6aS5zZXRSZXF1ZXN0SGVhZGVyKFloLFRvKX0pLER0LmlzVW5kZWZpbmVkKFJu''@;'; put 'put ''LndpdGhDcmVkZW50aWFscyl8fCh6aS53aXRoQ3JlZGVudGlhbHM9ISFSbi53aXRoQ3JlZGVudGlhbHMpLG1pJiYianNvbiIhPT1taSYmKHppLnJlc3BvbnNlVHlwZT1Sbi5yZXNwb25zZVR5cGUpLHJvJiYoW0dhLHRhXT1OcyhybywhMCksemkuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3Mi''@;'; put 'put ''LEdhKSksSHImJnppLnVwbG9hZCYmKFtCbywkbF09TnMoSHIpLHppLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsQm8pLHppLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJsb2FkZW5kIiwkbCkpLChSbi5jYW5jZWxUb2tlbnx8Um4uc2lnbmFsKSYmKHNvPVNvPT57emkmJih2''@;'; put 'put ''bighU298fFNvLnR5cGU/bmV3IF9vKG51bGwsU3QsemkpOlNvKSx6aS5hYm9ydCgpLHppPW51bGwpfSxSbi5jYW5jZWxUb2tlbiYmUm4uY2FuY2VsVG9rZW4uc3Vic2NyaWJlKHNvKSxSbi5zaWduYWwmJihSbi5zaWduYWwuYWJvcnRlZD9zbygpOlJuLnNpZ25hbC5hZGRFdmVudExpc3RlbmVy''@;'; put 'put ''KCJhYm9ydCIsc28pKSk7Y29uc3QgVmw9ZnVuY3Rpb24gSG8oU3Qpe2NvbnN0IFZ0PS9eKFstK1x3XXsxLDI1fSkoOj9cL1wvfDopLy5leGVjKFN0KTtyZXR1cm4gVnQmJlZ0WzFdfHwiIn0oUm4udXJsKTtWbCYmLTE9PT1qdC5wcm90b2NvbHMuaW5kZXhPZihWbCk/dm4obmV3IGl0KCJVbnN1''@;'; put 'put ''cHBvcnRlZCBwcm90b2NvbCAiK1ZsKyI6IixpdC5FUlJfQkFEX1JFUVVFU1QsU3QpKTp6aS5zZW5kKGJufHxudWxsKX0pfSxhZD0oU3QsVnQpPT57Y29uc3R7bGVuZ3RoOl9ufT1TdD1TdD9TdC5maWx0ZXIoQm9vbGVhbik6W107aWYoVnR8fF9uKXtsZXQgUm4sdm49bmV3IEFib3J0Q29udHJv''@;'; put 'put ''bGxlcjtjb25zdCBibj1mdW5jdGlvbihybyl7aWYoIVJuKXtSbj0hMCxtaSgpO2NvbnN0IHNvPXJvIGluc3RhbmNlb2YgRXJyb3I/cm86dGhpcy5yZWFzb247dm4uYWJvcnQoc28gaW5zdGFuY2VvZiBpdD9zbzpuZXcgX28oc28gaW5zdGFuY2VvZiBFcnJvcj9zby5tZXNzYWdlOnNvKSl9fTts''@;'; put 'put ''ZXQgY3I9VnQmJnNldFRpbWVvdXQoKCk9Pntjcj1udWxsLGJuKG5ldyBpdChgdGltZW91dCAke1Z0fSBvZiBtcyBleGNlZWRlZGAsaXQuRVRJTUVET1VUKSl9LFZ0KTtjb25zdCBtaT0oKT0+e1N0JiYoY3ImJmNsZWFyVGltZW91dChjciksY3I9bnVsbCxTdC5mb3JFYWNoKHJvPT57cm8udW5z''@;'; put 'put ''dWJzY3JpYmU/cm8udW5zdWJzY3JpYmUoYm4pOnJvLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0Iixibil9KSxTdD1udWxsKX07U3QuZm9yRWFjaChybz0+cm8uYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGJuKSk7Y29uc3R7c2lnbmFsOkhyfT12bjtyZXR1cm4gSHIudW5zdWJzY3JpYmU9''@;'; put 'put ''KCk9PkR0LmFzYXAobWkpLEhyfX07Y29uc3Qgamg9ZnVuY3Rpb24qKFN0LFZ0KXtsZXQgX249U3QuYnl0ZUxlbmd0aDtpZighVnR8fF9uPFZ0KXJldHVybiB2b2lkKHlpZWxkIFN0KTtsZXQgUm4sdm49MDtmb3IoO3ZuPF9uOylSbj12bitWdCx5aWVsZCBTdC5zbGljZSh2bixSbiksdm49Um59''@;'; put 'put ''LHRmPWZ1bmN0aW9uKCl7dmFyIFN0PV93cmFwQXN5bmNHZW5lcmF0b3IoZnVuY3Rpb24qKFZ0LF9uKXt2YXIgYm4sdm49ITEsUm49ITE7dHJ5e2Zvcih2YXIgbWksY3I9X2FzeW5jSXRlcmF0b3Ioa3MoVnQpKTt2bj0hKG1pPXlpZWxkIF9hd2FpdEFzeW5jR2VuZXJhdG9yKGNyLm5leHQoKSkp''@;'; put 'put ''LmRvbmU7dm49ITEpe2NvbnN0IEhyPW1pLnZhbHVlO3lpZWxkKl9hc3luY0dlbmVyYXRvckRlbGVnYXRlKF9hc3luY0l0ZXJhdG9yKGpoKEhyLF9uKSksX2F3YWl0QXN5bmNHZW5lcmF0b3IpfX1jYXRjaChIcil7Um49ITAsYm49SHJ9ZmluYWxseXt0cnl7dm4mJm51bGwhPWNyLnJldHVybiYm''@;'; put 'put ''KHlpZWxkIF9hd2FpdEFzeW5jR2VuZXJhdG9yKGNyLnJldHVybigpKSl9ZmluYWxseXtpZihSbil0aHJvdyBibn19fSk7cmV0dXJuIGZ1bmN0aW9uKF9uLHZuKXtyZXR1cm4gU3QuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSxrcz1mdW5jdGlvbigpe3ZhciBTdD1fd3JhcEFzeW5jR2VuZXJh''@;'; put 'put ''dG9yKGZ1bmN0aW9uKihWdCl7aWYoVnRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKXJldHVybiB2b2lkKHlpZWxkKl9hc3luY0dlbmVyYXRvckRlbGVnYXRlKF9hc3luY0l0ZXJhdG9yKFZ0KSxfYXdhaXRBc3luY0dlbmVyYXRvcikpO2NvbnN0IF9uPVZ0LmdldFJlYWRlcigpO3RyeXtmb3IoOzsp''@;'; put 'put ''e2NvbnN0e2RvbmU6dm4sdmFsdWU6Um59PXlpZWxkIF9hd2FpdEFzeW5jR2VuZXJhdG9yKF9uLnJlYWQoKSk7aWYodm4pYnJlYWs7eWllbGQgUm59fWZpbmFsbHl7eWllbGQgX2F3YWl0QXN5bmNHZW5lcmF0b3IoX24uY2FuY2VsKCkpfX0pO3JldHVybiBmdW5jdGlvbihfbil7cmV0dXJuIFN0''@;'; put 'put ''LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCksR2k9KFN0LFZ0LF9uLHZuKT0+e2NvbnN0IFJuPXRmKFN0LFZ0KTtsZXQgY3IsYm49MCxtaT1Icj0+e2NyfHwoY3I9ITAsdm4mJnZuKEhyKSl9O3JldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe3B1bGw6SHI9Pl9hc3luY1RvR2VuZXJhdG9yKGZ1''@;'; put 'put ''bmN0aW9uKigpe3RyeXtjb25zdHtkb25lOnJvLHZhbHVlOnNvfT15aWVsZCBSbi5uZXh0KCk7aWYocm8pcmV0dXJuIG1pKCksdm9pZCBIci5jbG9zZSgpO2lmKF9uKXtsZXQgR2E9Ym4rPXNvLmJ5dGVMZW5ndGg7X24oR2EpfUhyLmVucXVldWUobmV3IFVpbnQ4QXJyYXkoc28pKX1jYXRjaChy''@;'; put 'put ''byl7dGhyb3cgbWkocm8pLHJvfX0pKCksY2FuY2VsOkhyPT4obWkoSHIpLFJuLnJldHVybigpKX0se2hpZ2hXYXRlck1hcms6Mn0pfSx2bD0iZnVuY3Rpb24iPT10eXBlb2YgZmV0Y2gmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZXF1ZXN0JiYiZnVuY3Rpb24iPT10eXBlb2YgUmVzcG9uc2UsSmM9''@;'; put 'put ''dmwmJiJmdW5jdGlvbiI9PXR5cGVvZiBSZWFkYWJsZVN0cmVhbSxRZz12bCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBUZXh0RW5jb2Rlcj8oU3Q9PlZ0PT5TdC5lbmNvZGUoVnQpKShuZXcgVGV4dEVuY29kZXIpOmZ1bmN0aW9uKCl7dmFyIFN0PV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihW''@;'; put 'put ''dCl7cmV0dXJuIG5ldyBVaW50OEFycmF5KHlpZWxkIG5ldyBSZXNwb25zZShWdCkuYXJyYXlCdWZmZXIoKSl9KTtyZXR1cm4gZnVuY3Rpb24oVnQpe3JldHVybiBTdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpKSx5MD0oU3QsLi4uVnQpPT57dHJ5e3JldHVybiEhU3QoLi4uVnQpfWNhdGNo''@;'; put 'put ''e3JldHVybiExfX0sZTU9SmMmJnkwKCgpPT57bGV0IFN0PSExO2NvbnN0IFZ0PW5ldyBSZXF1ZXN0KGp0Lm9yaWdpbix7Ym9keTpuZXcgUmVhZGFibGVTdHJlYW0sbWV0aG9kOiJQT1NUIixnZXQgZHVwbGV4KCl7cmV0dXJuIFN0PSEwLCJoYWxmIn19KS5oZWFkZXJzLmhhcygiQ29udGVudC1U''@;'; put 'put ''eXBlIik7cmV0dXJuIFN0JiYhVnR9KSxuZj1KYyYmeTAoKCk9PkR0LmlzUmVhZGFibGVTdHJlYW0obmV3IFJlc3BvbnNlKCIiKS5ib2R5KSksc2Q9e3N0cmVhbTpuZiYmKFN0PT5TdC5ib2R5KX07dmwmJihTdD0+e1sidGV4dCIsImFycmF5QnVmZmVyIiwiYmxvYiIsImZvcm1EYXRhIiwic3Ry''@;'; put 'put ''ZWFtIl0uZm9yRWFjaChWdD0+eyFzZFtWdF0mJihzZFtWdF09RHQuaXNGdW5jdGlvbihTdFtWdF0pP19uPT5fbltWdF0oKTooX24sdm4pPT57dGhyb3cgbmV3IGl0KGBSZXNwb25zZSB0eXBlICcke1Z0fScgaXMgbm90IHN1cHBvcnRlZGAsaXQuRVJSX05PVF9TVVBQT1JULHZuKX0pfSl9KShu''@;'; put 'put ''ZXcgUmVzcG9uc2UpO2NvbnN0IHJmPWZ1bmN0aW9uKCl7dmFyIFN0PV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihWdCl7cmV0dXJuIG51bGw9PVZ0PzA6RHQuaXNCbG9iKFZ0KT9WdC5zaXplOkR0LmlzU3BlY0NvbXBsaWFudEZvcm0oVnQpPyh5aWVsZCBuZXcgUmVxdWVzdChqdC5vcmln''@;'; put 'put ''aW4se21ldGhvZDoiUE9TVCIsYm9keTpWdH0pLmFycmF5QnVmZmVyKCkpLmJ5dGVMZW5ndGg6RHQuaXNBcnJheUJ1ZmZlclZpZXcoVnQpfHxEdC5pc0FycmF5QnVmZmVyKFZ0KT9WdC5ieXRlTGVuZ3RoOihEdC5pc1VSTFNlYXJjaFBhcmFtcyhWdCkmJihWdCs9IiIpLER0LmlzU3RyaW5nKFZ0''@;'; put 'put ''KT8oeWllbGQgUWcoVnQpKS5ieXRlTGVuZ3RoOnZvaWQgMCl9KTtyZXR1cm4gZnVuY3Rpb24oX24pe3JldHVybiBTdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSgpLGsxPWZ1bmN0aW9uKCl7dmFyIFN0PV9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKihWdCxfbil7cmV0dXJuIER0LnRvRmlu''@;'; put 'put ''aXRlTnVtYmVyKFZ0LmdldENvbnRlbnRMZW5ndGgoKSk/P3JmKF9uKX0pO3JldHVybiBmdW5jdGlvbihfbix2bil7cmV0dXJuIFN0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCk7dmFyIGFmPXZsJiZmdW5jdGlvbigpe3ZhciBTdD1fYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooVnQpe2xl''@;'; put 'put ''dHt1cmw6X24sbWV0aG9kOnZuLGRhdGE6Um4sc2lnbmFsOmJuLGNhbmNlbFRva2VuOmNyLHRpbWVvdXQ6bWksb25Eb3dubG9hZFByb2dyZXNzOkhyLG9uVXBsb2FkUHJvZ3Jlc3M6cm8scmVzcG9uc2VUeXBlOnNvLGhlYWRlcnM6Qm8sd2l0aENyZWRlbnRpYWxzOkdhPSJzYW1lLW9yaWdpbiIs''@;'; put 'put ''ZmV0Y2hPcHRpb25zOiRsfT1iMChWdCk7c289c28/KHNvKyIiKS50b0xvd2VyQ2FzZSgpOiJ0ZXh0IjtsZXQgX2EsdGE9YWQoW2JuLGNyJiZjci50b0Fib3J0U2lnbmFsKCldLG1pKTtjb25zdCB6aT10YSYmdGEudW5zdWJzY3JpYmUmJigoKT0+e3RhLnVuc3Vic2NyaWJlKCl9KTtsZXQgT2M7''@;'; put 'put ''dHJ5e2lmKHJvJiZlNSYmImdldCIhPT12biYmImhlYWQiIT09dm4mJjAhPT0oT2M9eWllbGQgazEoQm8sUm4pKSl7bGV0IEswLCQwPW5ldyBSZXF1ZXN0KF9uLHttZXRob2Q6IlBPU1QiLGJvZHk6Um4sZHVwbGV4OiJoYWxmIn0pO2lmKER0LmlzRm9ybURhdGEoUm4pJiYoSzA9JDAuaGVhZGVy''@;'; put 'put ''cy5nZXQoImNvbnRlbnQtdHlwZSIpKSYmQm8uc2V0Q29udGVudFR5cGUoSzApLCQwLmJvZHkpe2NvbnN0W05hLFhpXT1tbChPYyxOcyhmdShybykpKTtSbj1HaSgkMC5ib2R5LDY1NTM2LE5hLFhpKX19RHQuaXNTdHJpbmcoR2EpfHwoR2E9R2E/ImluY2x1ZGUiOiJvbWl0Iik7Y29uc3QgVmw9''@;'; put 'put ''ImNyZWRlbnRpYWxzImluIFJlcXVlc3QucHJvdG90eXBlO19hPW5ldyBSZXF1ZXN0KF9uLHsuLi4kbCxzaWduYWw6dGEsbWV0aG9kOnZuLnRvVXBwZXJDYXNlKCksaGVhZGVyczpCby5ub3JtYWxpemUoKS50b0pTT04oKSxib2R5OlJuLGR1cGxleDoiaGFsZiIsY3JlZGVudGlhbHM6Vmw/R2E6''@;'; put 'put ''dm9pZCAwfSk7bGV0IFNvPXlpZWxkIGZldGNoKF9hKTtjb25zdCBUbz1uZiYmKCJzdHJlYW0iPT09c298fCJyZXNwb25zZSI9PT1zbyk7aWYobmYmJihIcnx8VG8mJnppKSl7Y29uc3QgJDA9e307WyJzdGF0dXMiLCJzdGF0dXNUZXh0IiwiaGVhZGVycyJdLmZvckVhY2goU3M9PnskMFtTc109''@;'; put 'put ''U29bU3NdfSk7Y29uc3QgSzA9RHQudG9GaW5pdGVOdW1iZXIoU28uaGVhZGVycy5nZXQoImNvbnRlbnQtbGVuZ3RoIikpLFtOYSxYaV09SHImJm1sKEswLE5zKGZ1KEhyKSwhMCkpfHxbXTtTbz1uZXcgUmVzcG9uc2UoR2koU28uYm9keSw2NTUzNixOYSwoKT0+e1hpJiZYaSgpLHppJiZ6aSgp''@;'; put 'put ''fSksJDApfXNvPXNvfHwidGV4dCI7bGV0IFloPXlpZWxkIHNkW0R0LmZpbmRLZXkoc2Qsc28pfHwidGV4dCJdKFNvLFZ0KTtyZXR1cm4hVG8mJnppJiZ6aSgpLHlpZWxkIG5ldyBQcm9taXNlKCgkMCxLMCk9PntPbygkMCxLMCx7ZGF0YTpZaCxoZWFkZXJzOmdvLmZyb20oU28uaGVhZGVycyks''@;'; put 'put ''c3RhdHVzOlNvLnN0YXR1cyxzdGF0dXNUZXh0OlNvLnN0YXR1c1RleHQsY29uZmlnOlZ0LHJlcXVlc3Q6X2F9KX0pfWNhdGNoKFZsKXt0aHJvdyB6aSYmemkoKSxWbCYmIlR5cGVFcnJvciI9PT1WbC5uYW1lJiYvZmV0Y2gvaS50ZXN0KFZsLm1lc3NhZ2UpP09iamVjdC5hc3NpZ24obmV3IGl0''@;'; put 'put ''KCJOZXR3b3JrIEVycm9yIixpdC5FUlJfTkVUV09SSyxWdCxfYSkse2NhdXNlOlZsLmNhdXNlfHxWbH0pOml0LmZyb20oVmwsVmwmJlZsLmNvZGUsVnQsX2EpfX0pO3JldHVybiBmdW5jdGlvbihWdCl7cmV0dXJuIFN0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KCk7Y29uc3QgWGQ9e2h0dHA6''@;'; put 'put ''bnVsbCx4aHI6UnUsZmV0Y2g6YWZ9O0R0LmZvckVhY2goWGQsKFN0LFZ0KT0+e2lmKFN0KXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFN0LCJuYW1lIix7dmFsdWU6VnR9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KFN0LCJhZGFwdGVyTmFtZSIse3ZhbHVlOlZ0fSl9fSk7Y29u''@;'; put 'put ''c3Qgc2Y9U3Q9PmAtICR7U3R9YCx6aD1TdD0+RHQuaXNGdW5jdGlvbihTdCl8fG51bGw9PT1TdHx8ITE9PT1TdDt2YXIgTGNfZ2V0QWRhcHRlcj1TdD0+e1N0PUR0LmlzQXJyYXkoU3QpP1N0OltTdF07Y29uc3R7bGVuZ3RoOlZ0fT1TdDtsZXQgX24sdm47Y29uc3QgUm49e307Zm9yKGxldCBi''@;'; put 'put ''bj0wO2JuPFZ0O2JuKyspe2xldCBjcjtpZihfbj1TdFtibl0sdm49X24sIXpoKF9uKSYmKHZuPVhkWyhjcj1TdHJpbmcoX24pKS50b0xvd2VyQ2FzZSgpXSx2b2lkIDA9PT12bikpdGhyb3cgbmV3IGl0KGBVbmtub3duIGFkYXB0ZXIgJyR7Y3J9J2ApO2lmKHZuKWJyZWFrO1JuW2NyfHwiIyIr''@;'; put 'put ''Ym5dPXZufWlmKCF2bil7Y29uc3QgYm49T2JqZWN0LmVudHJpZXMoUm4pLm1hcCgoW21pLEhyXSk9PmBhZGFwdGVyICR7bWl9IGArKCExPT09SHI/ImlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50IjoiaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQiKSk7dGhyb3cgbmV3''@;'; put 'put ''IGl0KCJUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0ICIrKFZ0P2JuLmxlbmd0aD4xPyJzaW5jZSA6XG4iK2JuLm1hcChzZikuam9pbigiXG4iKToiICIrc2YoYm5bMF0pOiJhcyBubyBhZGFwdGVyIHNwZWNpZmllZCIpLCJFUlJfTk9UX1NVUFBP''@;'; put 'put ''UlQiKX1yZXR1cm4gdm59O2Z1bmN0aW9uIFZvKFN0KXtpZihTdC5jYW5jZWxUb2tlbiYmU3QuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLFN0LnNpZ25hbCYmU3Quc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IF9vKG51bGwsU3QpfWZ1bmN0aW9uIHgzKFN0KXtyZXR1cm4gVm8oU3Qp''@;'; put 'put ''LFN0LmhlYWRlcnM9Z28uZnJvbShTdC5oZWFkZXJzKSxTdC5kYXRhPWVyLmNhbGwoU3QsU3QudHJhbnNmb3JtUmVxdWVzdCksLTEhPT1bInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoU3QubWV0aG9kKSYmU3QuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ct''@;'; put 'put ''Zm9ybS11cmxlbmNvZGVkIiwhMSksTGNfZ2V0QWRhcHRlcihTdC5hZGFwdGVyfHxoby5hZGFwdGVyKShTdCkudGhlbihmdW5jdGlvbih2bil7cmV0dXJuIFZvKFN0KSx2bi5kYXRhPWVyLmNhbGwoU3QsU3QudHJhbnNmb3JtUmVzcG9uc2Usdm4pLHZuLmhlYWRlcnM9Z28uZnJvbSh2bi5oZWFk''@;'; put 'put ''ZXJzKSx2bn0sZnVuY3Rpb24odm4pe3JldHVybiBjbyh2bil8fChWbyhTdCksdm4mJnZuLnJlc3BvbnNlJiYodm4ucmVzcG9uc2UuZGF0YT1lci5jYWxsKFN0LFN0LnRyYW5zZm9ybVJlc3BvbnNlLHZuLnJlc3BvbnNlKSx2bi5yZXNwb25zZS5oZWFkZXJzPWdvLmZyb20odm4ucmVzcG9uc2Uu''@;'; put 'put ''aGVhZGVycykpKSxQcm9taXNlLnJlamVjdCh2bil9KX1jb25zdCBaaD17fTtbIm9iamVjdCIsImJvb2xlYW4iLCJudW1iZXIiLCJmdW5jdGlvbiIsInN0cmluZyIsInN5bWJvbCJdLmZvckVhY2goKFN0LFZ0KT0+e1poW1N0XT1mdW5jdGlvbih2bil7cmV0dXJuIHR5cGVvZiB2bj09PVN0fHwi''@;'; put 'put ''YSIrKFZ0PDE/Im4gIjoiICIpK1N0fX0pO2NvbnN0IFdoPXt9O1poLnRyYW5zaXRpb25hbD1mdW5jdGlvbihWdCxfbix2bil7ZnVuY3Rpb24gUm4oYm4sY3Ipe3JldHVybiJbQXhpb3MgdjEuOC4yXSBUcmFuc2l0aW9uYWwgb3B0aW9uICciK2JuKyInIitjcisodm4/Ii4gIit2bjoiIil9cmV0''@;'; put 'put ''dXJuKGJuLGNyLG1pKT0+e2lmKCExPT09VnQpdGhyb3cgbmV3IGl0KFJuKGNyLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKF9uPyIgaW4gIitfbjoiIikpLGl0LkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gX24mJiFXaFtjcl0mJihXaFtjcl09ITAsZy53YXJuKFJuKGNyLCIgaGFzIGJlZW4gZGVwcmVj''@;'; put 'put ''YXRlZCBzaW5jZSB2IitfbisiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSwhVnR8fFZ0KGJuLGNyLG1pKX19LFpoLnNwZWxsaW5nPWZ1bmN0aW9uKFZ0KXtyZXR1cm4oX24sdm4pPT4oZy53YXJuKGAke3ZufSBpcyBsaWtlbHkgYSBtaXNzcGVsbGluZyBvZiAk''@;'; put 'put ''e1Z0fWApLCEwKX07dmFyIGFuPXthc3NlcnRPcHRpb25zOmZ1bmN0aW9uIEFuKFN0LFZ0LF9uKXtpZigib2JqZWN0IiE9dHlwZW9mIFN0KXRocm93IG5ldyBpdCgib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIsaXQuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnN0IHZuPU9iamVjdC5rZXlz''@;'; put 'put ''KFN0KTtsZXQgUm49dm4ubGVuZ3RoO2Zvcig7Um4tLSA+MDspe2NvbnN0IGJuPXZuW1JuXSxjcj1WdFtibl07aWYoY3Ipe2NvbnN0IG1pPVN0W2JuXSxIcj12b2lkIDA9PT1taXx8Y3IobWksYm4sU3QpO2lmKCEwIT09SHIpdGhyb3cgbmV3IGl0KCJvcHRpb24gIitibisiIG11c3QgYmUgIitI''@;'; put 'put ''cixpdC5FUlJfQkFEX09QVElPTl9WQUxVRSl9ZWxzZSBpZighMCE9PV9uKXRocm93IG5ldyBpdCgiVW5rbm93biBvcHRpb24gIitibixpdC5FUlJfQkFEX09QVElPTil9fSx2YWxpZGF0b3JzOlpofTtjb25zdCBnaT1hbi52YWxpZGF0b3JzO2NsYXNzIEFye2NvbnN0cnVjdG9yKFZ0KXt0aGlz''@;'; put 'put ''LmRlZmF1bHRzPVZ0LHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBBdCxyZXNwb25zZTpuZXcgQXR9fXJlcXVlc3QoVnQsX24pe3ZhciB2bj10aGlzO3JldHVybiBfYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiooKXt0cnl7cmV0dXJuIHlpZWxkIHZuLl9yZXF1ZXN0KFZ0LF9uKX1j''@;'; put 'put ''YXRjaChSbil7aWYoUm4gaW5zdGFuY2VvZiBFcnJvcil7bGV0IGJuPXt9O0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKGJuKTpibj1uZXcgRXJyb3I7Y29uc3QgY3I9Ym4uc3RhY2s/Ym4uc3RhY2sucmVwbGFjZSgvXi4rXG4vLCIiKToiIjt0cnl7Um4u''@;'; put 'put ''c3RhY2s/Y3ImJiFTdHJpbmcoUm4uc3RhY2spLmVuZHNXaXRoKGNyLnJlcGxhY2UoL14uK1xuLitcbi8sIiIpKSYmKFJuLnN0YWNrKz0iXG4iK2NyKTpSbi5zdGFjaz1jcn1jYXRjaHt9fXRocm93IFJufX0pKCl9X3JlcXVlc3QoVnQsX24peyJzdHJpbmciPT10eXBlb2YgVnQ/KF9uPV9ufHx7''@;'; put 'put ''fSkudXJsPVZ0Ol9uPVZ0fHx7fSxfbj1Ycih0aGlzLmRlZmF1bHRzLF9uKTtjb25zdHt0cmFuc2l0aW9uYWw6dm4scGFyYW1zU2VyaWFsaXplcjpSbixoZWFkZXJzOmJufT1fbjt2b2lkIDAhPT12biYmYW4uYXNzZXJ0T3B0aW9ucyh2bix7c2lsZW50SlNPTlBhcnNpbmc6Z2kudHJhbnNpdGlv''@;'; put 'put ''bmFsKGdpLmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOmdpLnRyYW5zaXRpb25hbChnaS5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOmdpLnRyYW5zaXRpb25hbChnaS5ib29sZWFuKX0sITEpLG51bGwhPVJuJiYoRHQuaXNGdW5jdGlvbihSbik/X24ucGFyYW1zU2VyaWFsaXplcj17''@;'; put 'put ''c2VyaWFsaXplOlJufTphbi5hc3NlcnRPcHRpb25zKFJuLHtlbmNvZGU6Z2kuZnVuY3Rpb24sc2VyaWFsaXplOmdpLmZ1bmN0aW9ufSwhMCkpLHZvaWQgMCE9PV9uLmFsbG93QWJzb2x1dGVVcmxzfHwoX24uYWxsb3dBYnNvbHV0ZVVybHM9dm9pZCAwPT09dGhpcy5kZWZhdWx0cy5hbGxvd0Fi''@;'; put 'put ''c29sdXRlVXJsc3x8dGhpcy5kZWZhdWx0cy5hbGxvd0Fic29sdXRlVXJscyksYW4uYXNzZXJ0T3B0aW9ucyhfbix7YmFzZVVybDpnaS5zcGVsbGluZygiYmFzZVVSTCIpLHdpdGhYc3JmVG9rZW46Z2kuc3BlbGxpbmcoIndpdGhYU1JGVG9rZW4iKX0sITApLF9uLm1ldGhvZD0oX24ubWV0aG9k''@;'; put 'put ''fHx0aGlzLmRlZmF1bHRzLm1ldGhvZHx8ImdldCIpLnRvTG93ZXJDYXNlKCk7bGV0IGNyPWJuJiZEdC5tZXJnZShibi5jb21tb24sYm5bX24ubWV0aG9kXSk7Ym4mJkR0LmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sdGE9Pntk''@;'; put 'put ''ZWxldGUgYm5bdGFdfSksX24uaGVhZGVycz1nby5jb25jYXQoY3IsYm4pO2NvbnN0IG1pPVtdO2xldCBIcj0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24oX2EpeyJmdW5jdGlvbiI9PXR5cGVvZiBfYS5ydW5XaGVuJiYhMT09PV9hLnJ1bldoZW4oX24pfHwo''@;'; put 'put ''SHI9SHImJl9hLnN5bmNocm9ub3VzLG1pLnVuc2hpZnQoX2EuZnVsZmlsbGVkLF9hLnJlamVjdGVkKSl9KTtjb25zdCBybz1bXTt0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uKF9hKXtyby5wdXNoKF9hLmZ1bGZpbGxlZCxfYS5yZWplY3RlZCl9KTtsZXQgc28s''@;'; put 'put ''R2EsQm89MDtpZighSHIpe2NvbnN0IHRhPVt4My5iaW5kKHRoaXMpLHZvaWQgMF07Zm9yKHRhLnVuc2hpZnQuYXBwbHkodGEsbWkpLHRhLnB1c2guYXBwbHkodGEscm8pLEdhPXRhLmxlbmd0aCxzbz1Qcm9taXNlLnJlc29sdmUoX24pO0JvPEdhOylzbz1zby50aGVuKHRhW0JvKytdLHRhW0Jv''@;'; put 'put ''KytdKTtyZXR1cm4gc299R2E9bWkubGVuZ3RoO2xldCAkbD1fbjtmb3IoQm89MDtCbzxHYTspe2NvbnN0IHRhPW1pW0JvKytdLF9hPW1pW0JvKytdO3RyeXskbD10YSgkbCl9Y2F0Y2goemkpe19hLmNhbGwodGhpcyx6aSk7YnJlYWt9fXRyeXtzbz14My5jYWxsKHRoaXMsJGwpfWNhdGNoKHRh''@;'; put 'put ''KXtyZXR1cm4gUHJvbWlzZS5yZWplY3QodGEpfWZvcihCbz0wLEdhPXJvLmxlbmd0aDtCbzxHYTspc289c28udGhlbihyb1tCbysrXSxyb1tCbysrXSk7cmV0dXJuIHNvfWdldFVyaShWdCl7cmV0dXJuIFByKHNpKChWdD1Ycih0aGlzLmRlZmF1bHRzLFZ0KSkuYmFzZVVSTCxWdC51cmwsVnQu''@;'; put 'put ''YWxsb3dBYnNvbHV0ZVVybHMpLFZ0LnBhcmFtcyxWdC5wYXJhbXNTZXJpYWxpemVyKX19RHQuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sZnVuY3Rpb24oVnQpe0FyLnByb3RvdHlwZVtWdF09ZnVuY3Rpb24oX24sdm4pe3JldHVybiB0aGlzLnJlcXVlc3QoWHIo''@;'; put 'put ''dm58fHt9LHttZXRob2Q6VnQsdXJsOl9uLGRhdGE6KHZufHx7fSkuZGF0YX0pKX19KSxEdC5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24oVnQpe2Z1bmN0aW9uIF9uKHZuKXtyZXR1cm4gZnVuY3Rpb24oYm4sY3IsbWkpe3JldHVybiB0aGlzLnJlcXVlc3QoWHIobWl8''@;'; put 'put ''fHt9LHttZXRob2Q6VnQsaGVhZGVyczp2bj97IkNvbnRlbnQtVHlwZSI6Im11bHRpcGFydC9mb3JtLWRhdGEifTp7fSx1cmw6Ym4sZGF0YTpjcn0pKX19QXIucHJvdG90eXBlW1Z0XT1fbigpLEFyLnByb3RvdHlwZVtWdCsiRm9ybSJdPV9uKCEwKX0pO3ZhciBPYT1BcjtjbGFzcyBlYXtjb25z''@;'; put 'put ''dHJ1Y3RvcihWdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIFZ0KXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTtsZXQgX247dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKGJuKXtfbj1ibn0pO2NvbnN0IHZuPXRoaXM7dGhpcy5wcm9t''@;'; put 'put ''aXNlLnRoZW4oUm49PntpZighdm4uX2xpc3RlbmVycylyZXR1cm47bGV0IGJuPXZuLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7Ym4tLSA+MDspdm4uX2xpc3RlbmVyc1tibl0oUm4pO3ZuLl9saXN0ZW5lcnM9bnVsbH0pLHRoaXMucHJvbWlzZS50aGVuPVJuPT57bGV0IGJuO2NvbnN0IGNyPW5l''@;'; put 'put ''dyBQcm9taXNlKG1pPT57dm4uc3Vic2NyaWJlKG1pKSxibj1taX0pLnRoZW4oUm4pO3JldHVybiBjci5jYW5jZWw9ZnVuY3Rpb24oKXt2bi51bnN1YnNjcmliZShibil9LGNyfSxWdChmdW5jdGlvbihibixjcixtaSl7dm4ucmVhc29ufHwodm4ucmVhc29uPW5ldyBfbyhibixjcixtaSksX24o''@;'; put 'put ''dm4ucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKFZ0KXt0aGlzLnJlYXNvbj9WdCh0aGlzLnJlYXNvbik6dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKFZ0KTp0aGlzLl9saXN0ZW5lcnM9''@;'; put 'put ''W1Z0XX11bnN1YnNjcmliZShWdCl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47Y29uc3QgX249dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoVnQpOy0xIT09X24mJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UoX24sMSl9dG9BYm9ydFNpZ25hbCgpe2NvbnN0IFZ0PW5ldyBBYm9ydENvbnRyb2xs''@;'; put 'put ''ZXIsX249dm49PntWdC5hYm9ydCh2bil9O3JldHVybiB0aGlzLnN1YnNjcmliZShfbiksVnQuc2lnbmFsLnVuc3Vic2NyaWJlPSgpPT50aGlzLnVuc3Vic2NyaWJlKF9uKSxWdC5zaWduYWx9c3RhdGljIHNvdXJjZSgpe2xldCBWdDtyZXR1cm57dG9rZW46bmV3IGVhKGZ1bmN0aW9uKFJuKXtW''@;'; put 'put ''dD1Sbn0pLGNhbmNlbDpWdH19fXZhciBpbD1lYTtjb25zdCBDcz17Q29udGludWU6MTAwLFN3aXRjaGluZ1Byb3RvY29sczoxMDEsUHJvY2Vzc2luZzoxMDIsRWFybHlIaW50czoxMDMsT2s6MjAwLENyZWF0ZWQ6MjAxLEFjY2VwdGVkOjIwMixOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246''@;'; put 'put ''MjAzLE5vQ29udGVudDoyMDQsUmVzZXRDb250ZW50OjIwNSxQYXJ0aWFsQ29udGVudDoyMDYsTXVsdGlTdGF0dXM6MjA3LEFscmVhZHlSZXBvcnRlZDoyMDgsSW1Vc2VkOjIyNixNdWx0aXBsZUNob2ljZXM6MzAwLE1vdmVkUGVybWFuZW50bHk6MzAxLEZvdW5kOjMwMixTZWVPdGhlcjozMDMs''@;'; put 'put ''Tm90TW9kaWZpZWQ6MzA0LFVzZVByb3h5OjMwNSxVbnVzZWQ6MzA2LFRlbXBvcmFyeVJlZGlyZWN0OjMwNyxQZXJtYW5lbnRSZWRpcmVjdDozMDgsQmFkUmVxdWVzdDo0MDAsVW5hdXRob3JpemVkOjQwMSxQYXltZW50UmVxdWlyZWQ6NDAyLEZvcmJpZGRlbjo0MDMsTm90Rm91bmQ6NDA0LE1l''@;'; put 'put ''dGhvZE5vdEFsbG93ZWQ6NDA1LE5vdEFjY2VwdGFibGU6NDA2LFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDo0MDcsUmVxdWVzdFRpbWVvdXQ6NDA4LENvbmZsaWN0OjQwOSxHb25lOjQxMCxMZW5ndGhSZXF1aXJlZDo0MTEsUHJlY29uZGl0aW9uRmFpbGVkOjQxMixQYXlsb2FkVG9vTGFy''@;'; put 'put ''Z2U6NDEzLFVyaVRvb0xvbmc6NDE0LFVuc3VwcG9ydGVkTWVkaWFUeXBlOjQxNSxSYW5nZU5vdFNhdGlzZmlhYmxlOjQxNixFeHBlY3RhdGlvbkZhaWxlZDo0MTcsSW1BVGVhcG90OjQxOCxNaXNkaXJlY3RlZFJlcXVlc3Q6NDIxLFVucHJvY2Vzc2FibGVFbnRpdHk6NDIyLExvY2tlZDo0MjMs''@;'; put 'put ''RmFpbGVkRGVwZW5kZW5jeTo0MjQsVG9vRWFybHk6NDI1LFVwZ3JhZGVSZXF1aXJlZDo0MjYsUHJlY29uZGl0aW9uUmVxdWlyZWQ6NDI4LFRvb01hbnlSZXF1ZXN0czo0MjksUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOjQzMSxVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczo0NTEsSW50''@;'; put 'put ''ZXJuYWxTZXJ2ZXJFcnJvcjo1MDAsTm90SW1wbGVtZW50ZWQ6NTAxLEJhZEdhdGV3YXk6NTAyLFNlcnZpY2VVbmF2YWlsYWJsZTo1MDMsR2F0ZXdheVRpbWVvdXQ6NTA0LEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOjUwNSxWYXJpYW50QWxzb05lZ290aWF0ZXM6NTA2LEluc3VmZmljaWVudFN0''@;'; put 'put ''b3JhZ2U6NTA3LExvb3BEZXRlY3RlZDo1MDgsTm90RXh0ZW5kZWQ6NTEwLE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOjUxMX07T2JqZWN0LmVudHJpZXMoQ3MpLmZvckVhY2goKFtTdCxWdF0pPT57Q3NbVnRdPVN0fSk7dmFyIE5sPUNzO2NvbnN0IGthPWZ1bmN0aW9uIEhhKFN0KXtj''@;'; put 'put ''b25zdCBWdD1uZXcgT2EoU3QpLF9uPUIoT2EucHJvdG90eXBlLnJlcXVlc3QsVnQpO3JldHVybiBEdC5leHRlbmQoX24sT2EucHJvdG90eXBlLFZ0LHthbGxPd25LZXlzOiEwfSksRHQuZXh0ZW5kKF9uLFZ0LG51bGwse2FsbE93bktleXM6ITB9KSxfbi5jcmVhdGU9ZnVuY3Rpb24oUm4pe3Jl''@;'; put 'put ''dHVybiBIYShYcihTdCxSbikpfSxfbn0oaG8pO2thLkF4aW9zPU9hLGthLkNhbmNlbGVkRXJyb3I9X28sa2EuQ2FuY2VsVG9rZW49aWwsa2EuaXNDYW5jZWw9Y28sa2EuVkVSU0lPTj0iMS44LjIiLGthLnRvRm9ybURhdGE9UXQsa2EuQXhpb3NFcnJvcj1pdCxrYS5DYW5jZWw9a2EuQ2FuY2Vs''@;'; put 'put ''ZWRFcnJvcixrYS5hbGw9ZnVuY3Rpb24oVnQpe3JldHVybiBQcm9taXNlLmFsbChWdCl9LGthLnNwcmVhZD1mdW5jdGlvbiB6YShTdCl7cmV0dXJuIGZ1bmN0aW9uKF9uKXtyZXR1cm4gU3QuYXBwbHkobnVsbCxfbil9fSxrYS5pc0F4aW9zRXJyb3I9ZnVuY3Rpb24gVnMoU3Qpe3JldHVybiBE''@;'; put 'put ''dC5pc09iamVjdChTdCkmJiEwPT09U3QuaXNBeGlvc0Vycm9yfSxrYS5tZXJnZUNvbmZpZz1YcixrYS5BeGlvc0hlYWRlcnM9Z28sa2EuZm9ybVRvSlNPTj1TdD0+SWkoRHQuaXNIVE1MRm9ybShTdCk/bmV3IEZvcm1EYXRhKFN0KTpTdCksa2EuZ2V0QWRhcHRlcj1MY19nZXRBZGFwdGVyLGth''@;'; put 'put ''Lkh0dHBTdGF0dXNDb2RlPU5sLGthLmRlZmF1bHQ9a2EsdWUuZXhwb3J0cz1rYX0sODU2NjoodWUscSk9PnsidXNlIHN0cmljdCI7dmFyIEkseTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhxLHtfX2VzTW9kdWxlOnt2YWx1ZTohMH0sW1N5bWJvbC50b1N0cmluZ1RhZ106e3ZhbHVlOiJNb2R1''@;'; put 'put ''bGUifX0pO2NvbnN0IHc9ZnVuY3Rpb24gXyhZKXtyZXR1cm4gWSYmWS5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoWSwiZGVmYXVsdCIpP1kuZGVmYXVsdDpZfShmdW5jdGlvbiBnKCl7aWYoeSlyZXR1cm4gSTt5PTE7Y29uc3QgWT0yMTQ3NDgzNjQ3''@;'; put 'put ''LFg9MzYsVGU9L154bi0tLyxTZT0vW15cMC1ceDdGXS8semU9L1tceDJFXHUzMDAyXHVGRjBFXHVGRjYxXS9nLFY9e292ZXJmbG93OiJPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2VzcyIsIm5vdC1iYXNpYyI6IklsbGVnYWwgaW5wdXQgPj0gMHg4MCAobm90''@;'; put 'put ''IGEgYmFzaWMgY29kZSBwb2ludCkiLCJpbnZhbGlkLWlucHV0IjoiSW52YWxpZCBpbnB1dCJ9LGI9TWF0aC5mbG9vcix4PVN0cmluZy5mcm9tQ2hhckNvZGU7ZnVuY3Rpb24gQyh3ZSl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoVlt3ZV0pfWZ1bmN0aW9uIEgod2UsVWUpe2NvbnN0IEplPXdlLnNw''@;'; put 'put ''bGl0KCJAIik7bGV0IGF0PSIiO0plLmxlbmd0aD4xJiYoYXQ9SmVbMF0rIkAiLHdlPUplWzFdKTtjb25zdCB2ZT1mdW5jdGlvbiBUKHdlLFVlKXtjb25zdCBKZT1bXTtsZXQgYXQ9d2UubGVuZ3RoO2Zvcig7YXQtLTspSmVbYXRdPVVlKHdlW2F0XSk7cmV0dXJuIEplfSgod2U9d2UucmVwbGFj''@;'; put 'put ''ZSh6ZSwiLiIpKS5zcGxpdCgiLiIpLFVlKS5qb2luKCIuIik7cmV0dXJuIGF0K3ZlfWZ1bmN0aW9uIGood2Upe2NvbnN0IFVlPVtdO2xldCBKZT0wO2NvbnN0IGF0PXdlLmxlbmd0aDtmb3IoO0plPGF0Oyl7Y29uc3QgTWU9d2UuY2hhckNvZGVBdChKZSsrKTtpZihNZT49NTUyOTYmJk1lPD01''@;'; put 'put ''NjMxOSYmSmU8YXQpe2NvbnN0IHZlPXdlLmNoYXJDb2RlQXQoSmUrKyk7NTYzMjA9PSg2NDUxMiZ2ZSk/VWUucHVzaCgoKDEwMjMmTWUpPDwxMCkrKDEwMjMmdmUpKzY1NTM2KTooVWUucHVzaChNZSksSmUtLSl9ZWxzZSBVZS5wdXNoKE1lKX1yZXR1cm4gVWV9Y29uc3QgbT1mdW5jdGlvbih3''@;'; put 'put ''ZSl7cmV0dXJuIHdlPj00OCYmd2U8NTg/d2UtNDgrMjY6d2U+PTY1JiZ3ZTw5MT93ZS02NTp3ZT49OTcmJndlPDEyMz93ZS05NzpYfSxBPWZ1bmN0aW9uKHdlLFVlKXtyZXR1cm4gd2UrMjIrNzUqKHdlPDI2KS0oKDAhPVVlKTw8NSl9LG9lPWZ1bmN0aW9uKHdlLFVlLEplKXtsZXQgYXQ9MDtm''@;'; put 'put ''b3Iod2U9SmU/Yih3ZS83MDApOndlPj4xLHdlKz1iKHdlL1VlKTt3ZT40NTU7YXQrPVgpd2U9Yih3ZS8zNSk7cmV0dXJuIGIoYXQrMzYqd2UvKHdlKzM4KSl9LHRlPWZ1bmN0aW9uKHdlKXtjb25zdCBVZT1bXSxKZT13ZS5sZW5ndGg7bGV0IGF0PTAsTWU9MTI4LHZlPTcyLFhlPXdlLmxhc3RJ''@;'; put 'put ''bmRleE9mKCItIik7WGU8MCYmKFhlPTApO2ZvcihsZXQgamU9MDtqZTxYZTsrK2plKXdlLmNoYXJDb2RlQXQoamUpPj0xMjgmJkMoIm5vdC1iYXNpYyIpLFVlLnB1c2god2UuY2hhckNvZGVBdChqZSkpO2ZvcihsZXQgamU9WGU+MD9YZSsxOjA7amU8SmU7KXtjb25zdCBEZT1hdDtmb3IobGV0''@;'; put 'put ''IFJlPTEsSWU9WDs7SWUrPVgpe2plPj1KZSYmQygiaW52YWxpZC1pbnB1dCIpO2NvbnN0IFZlPW0od2UuY2hhckNvZGVBdChqZSsrKSk7VmU+PVgmJkMoImludmFsaWQtaW5wdXQiKSxWZT5iKChZLWF0KS9SZSkmJkMoIm92ZXJmbG93IiksYXQrPVZlKlJlO2NvbnN0IGtlPUllPD12ZT8xOkll''@;'; put 'put ''Pj12ZSsyNj8yNjpJZS12ZTtpZihWZTxrZSlicmVhaztjb25zdCBBZT1YLWtlO1JlPmIoWS9BZSkmJkMoIm92ZXJmbG93IiksUmUqPUFlfWNvbnN0IEZlPVVlLmxlbmd0aCsxO3ZlPW9lKGF0LURlLEZlLDA9PURlKSxiKGF0L0ZlKT5ZLU1lJiZDKCJvdmVyZmxvdyIpLE1lKz1iKGF0L0ZlKSxh''@;'; put 'put ''dCU9RmUsVWUuc3BsaWNlKGF0KyssMCxNZSl9cmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KC4uLlVlKX0sc2U9ZnVuY3Rpb24od2Upe2NvbnN0IFVlPVtdLEplPSh3ZT1qKHdlKSkubGVuZ3RoO2xldCBhdD0xMjgsTWU9MCx2ZT03Mjtmb3IoY29uc3QgRGUgb2Ygd2UpRGU8MTI4JiZVZS5w''@;'; put 'put ''dXNoKHgoRGUpKTtjb25zdCBYZT1VZS5sZW5ndGg7bGV0IGplPVhlO2ZvcihYZSYmVWUucHVzaCgiLSIpO2plPEplOyl7bGV0IERlPVk7Zm9yKGNvbnN0IFJlIG9mIHdlKVJlPj1hdCYmUmU8RGUmJihEZT1SZSk7Y29uc3QgRmU9amUrMTtEZS1hdD5iKChZLU1lKS9GZSkmJkMoIm92ZXJmbG93''@;'; put 'put ''IiksTWUrPShEZS1hdCkqRmUsYXQ9RGU7Zm9yKGNvbnN0IFJlIG9mIHdlKWlmKFJlPGF0JiYrK01lPlkmJkMoIm92ZXJmbG93IiksUmU9PT1hdCl7bGV0IEllPU1lO2ZvcihsZXQgVmU9WDs7VmUrPVgpe2NvbnN0IGtlPVZlPD12ZT8xOlZlPj12ZSsyNj8yNjpWZS12ZTtpZihJZTxrZSlicmVh''@;'; put 'put ''aztjb25zdCBBZT1JZS1rZSxfdD1YLWtlO1VlLnB1c2goeChBKGtlK0FlJV90LDApKSksSWU9YihBZS9fdCl9VWUucHVzaCh4KEEoSWUsMCkpKSx2ZT1vZShNZSxGZSxqZT09PVhlKSxNZT0wLCsramV9KytNZSwrK2F0fXJldHVybiBVZS5qb2luKCIiKX07cmV0dXJuIEk9e3ZlcnNpb246IjIu''@;'; put 'put ''My4xIix1Y3MyOntkZWNvZGU6aixlbmNvZGU6d2U9PlN0cmluZy5mcm9tQ29kZVBvaW50KC4uLndlKX0sZGVjb2RlOnRlLGVuY29kZTpzZSx0b0FTQ0lJOmZ1bmN0aW9uKHdlKXtyZXR1cm4gSCh3ZSxmdW5jdGlvbihVZSl7cmV0dXJuIFNlLnRlc3QoVWUpPyJ4bi0tIitzZShVZSk6VWV9KX0s''@;'; put 'put ''dG9Vbmljb2RlOmZ1bmN0aW9uKHdlKXtyZXR1cm4gSCh3ZSxmdW5jdGlvbihVZSl7cmV0dXJuIFRlLnRlc3QoVWUpP3RlKFVlLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCkpOlVlfSl9fX0oKSksRj1bImFjIiwiY29tLmFjIiwiZWR1LmFjIiwiZ292LmFjIiwibWlsLmFjIiwibmV0LmFjIiwib3Jn''@;'; put 'put ''LmFjIiwiYWQiLCJhZSIsImFjLmFlIiwiY28uYWUiLCJnb3YuYWUiLCJtaWwuYWUiLCJuZXQuYWUiLCJvcmcuYWUiLCJzY2guYWUiLCJhZXJvIiwiYWlybGluZS5hZXJvIiwiYWlycG9ydC5hZXJvIiwiYWNjaWRlbnQtaW52ZXN0aWdhdGlvbi5hZXJvIiwiYWNjaWRlbnQtcHJldmVudGlvbi5h''@;'; put 'put ''ZXJvIiwiYWVyb2JhdGljLmFlcm8iLCJhZXJvY2x1Yi5hZXJvIiwiYWVyb2Ryb21lLmFlcm8iLCJhZ2VudHMuYWVybyIsImFpci1zdXJ2ZWlsbGFuY2UuYWVybyIsImFpci10cmFmZmljLWNvbnRyb2wuYWVybyIsImFpcmNyYWZ0LmFlcm8iLCJhaXJ0cmFmZmljLmFlcm8iLCJhbWJ1bGFuY2Uu''@;'; put 'put ''YWVybyIsImFzc29jaWF0aW9uLmFlcm8iLCJhdXRob3IuYWVybyIsImJhbGxvb25pbmcuYWVybyIsImJyb2tlci5hZXJvIiwiY2FhLmFlcm8iLCJjYXJnby5hZXJvIiwiY2F0ZXJpbmcuYWVybyIsImNlcnRpZmljYXRpb24uYWVybyIsImNoYW1waW9uc2hpcC5hZXJvIiwiY2hhcnRlci5hZXJv''@;'; put 'put ''IiwiY2l2aWxhdmlhdGlvbi5hZXJvIiwiY2x1Yi5hZXJvIiwiY29uZmVyZW5jZS5hZXJvIiwiY29uc3VsdGFudC5hZXJvIiwiY29uc3VsdGluZy5hZXJvIiwiY29udHJvbC5hZXJvIiwiY291bmNpbC5hZXJvIiwiY3Jldy5hZXJvIiwiZGVzaWduLmFlcm8iLCJkZ2NhLmFlcm8iLCJlZHVjYXRv''@;'; put 'put ''ci5hZXJvIiwiZW1lcmdlbmN5LmFlcm8iLCJlbmdpbmUuYWVybyIsImVuZ2luZWVyLmFlcm8iLCJlbnRlcnRhaW5tZW50LmFlcm8iLCJlcXVpcG1lbnQuYWVybyIsImV4Y2hhbmdlLmFlcm8iLCJleHByZXNzLmFlcm8iLCJmZWRlcmF0aW9uLmFlcm8iLCJmbGlnaHQuYWVybyIsImZyZWlnaHQu''@;'; put 'put ''YWVybyIsImZ1ZWwuYWVybyIsImdsaWRpbmcuYWVybyIsImdvdmVybm1lbnQuYWVybyIsImdyb3VuZGhhbmRsaW5nLmFlcm8iLCJncm91cC5hZXJvIiwiaGFuZ2dsaWRpbmcuYWVybyIsImhvbWVidWlsdC5hZXJvIiwiaW5zdXJhbmNlLmFlcm8iLCJqb3VybmFsLmFlcm8iLCJqb3VybmFsaXN0''@;'; put 'put ''LmFlcm8iLCJsZWFzaW5nLmFlcm8iLCJsb2dpc3RpY3MuYWVybyIsIm1hZ2F6aW5lLmFlcm8iLCJtYWludGVuYW5jZS5hZXJvIiwibWFya2V0cGxhY2UuYWVybyIsIm1lZGlhLmFlcm8iLCJtaWNyb2xpZ2h0LmFlcm8iLCJtb2RlbGxpbmcuYWVybyIsIm5hdmlnYXRpb24uYWVybyIsInBhcmFj''@;'; put 'put ''aHV0aW5nLmFlcm8iLCJwYXJhZ2xpZGluZy5hZXJvIiwicGFzc2VuZ2VyLWFzc29jaWF0aW9uLmFlcm8iLCJwaWxvdC5hZXJvIiwicHJlc3MuYWVybyIsInByb2R1Y3Rpb24uYWVybyIsInJlY3JlYXRpb24uYWVybyIsInJlcGJvZHkuYWVybyIsInJlcy5hZXJvIiwicmVzZWFyY2guYWVybyIs''@;'; put 'put ''InJvdG9yY3JhZnQuYWVybyIsInNhZmV0eS5hZXJvIiwic2NpZW50aXN0LmFlcm8iLCJzZXJ2aWNlcy5hZXJvIiwic2hvdy5hZXJvIiwic2t5ZGl2aW5nLmFlcm8iLCJzb2Z0d2FyZS5hZXJvIiwic3R1ZGVudC5hZXJvIiwidGF4aS5hZXJvIiwidHJhZGVyLmFlcm8iLCJ0cmFkaW5nLmFlcm8i''@;'; put 'put ''LCJ0cmFpbmVyLmFlcm8iLCJ1bmlvbi5hZXJvIiwid29ya2luZ2dyb3VwLmFlcm8iLCJ3b3Jrcy5hZXJvIiwiYWYiLCJjb20uYWYiLCJlZHUuYWYiLCJnb3YuYWYiLCJuZXQuYWYiLCJvcmcuYWYiLCJhZyIsImNvLmFnIiwiY29tLmFnIiwibmV0LmFnIiwibm9tLmFnIiwib3JnLmFnIiwiYWki''@;'; put 'put ''LCJjb20uYWkiLCJuZXQuYWkiLCJvZmYuYWkiLCJvcmcuYWkiLCJhbCIsImNvbS5hbCIsImVkdS5hbCIsImdvdi5hbCIsIm1pbC5hbCIsIm5ldC5hbCIsIm9yZy5hbCIsImFtIiwiY28uYW0iLCJjb20uYW0iLCJjb21tdW5lLmFtIiwibmV0LmFtIiwib3JnLmFtIiwiYW8iLCJjby5hbyIsImVk''@;'; put 'put ''LmFvIiwiZWR1LmFvIiwiZ292LmFvIiwiZ3YuYW8iLCJpdC5hbyIsIm9nLmFvIiwib3JnLmFvIiwicGIuYW8iLCJhcSIsImFyIiwiYmV0LmFyIiwiY29tLmFyIiwiY29vcC5hciIsImVkdS5hciIsImdvYi5hciIsImdvdi5hciIsImludC5hciIsIm1pbC5hciIsIm11c2ljYS5hciIsIm11dHVh''@;'; put 'put ''bC5hciIsIm5ldC5hciIsIm9yZy5hciIsInNlbmFzYS5hciIsInR1ci5hciIsImFycGEiLCJlMTY0LmFycGEiLCJob21lLmFycGEiLCJpbi1hZGRyLmFycGEiLCJpcDYuYXJwYSIsImlyaXMuYXJwYSIsInVyaS5hcnBhIiwidXJuLmFycGEiLCJhcyIsImdvdi5hcyIsImFzaWEiLCJhdCIsImFj''@;'; put 'put ''LmF0Iiwic3RoLmFjLmF0IiwiY28uYXQiLCJndi5hdCIsIm9yLmF0IiwiYXUiLCJhc24uYXUiLCJjb20uYXUiLCJlZHUuYXUiLCJnb3YuYXUiLCJpZC5hdSIsIm5ldC5hdSIsIm9yZy5hdSIsImNvbmYuYXUiLCJvei5hdSIsImFjdC5hdSIsIm5zdy5hdSIsIm50LmF1IiwicWxkLmF1Iiwic2Eu''@;'; put 'put ''YXUiLCJ0YXMuYXUiLCJ2aWMuYXUiLCJ3YS5hdSIsImFjdC5lZHUuYXUiLCJjYXRob2xpYy5lZHUuYXUiLCJuc3cuZWR1LmF1IiwibnQuZWR1LmF1IiwicWxkLmVkdS5hdSIsInNhLmVkdS5hdSIsInRhcy5lZHUuYXUiLCJ2aWMuZWR1LmF1Iiwid2EuZWR1LmF1IiwicWxkLmdvdi5hdSIsInNh''@;'; put 'put ''Lmdvdi5hdSIsInRhcy5nb3YuYXUiLCJ2aWMuZ292LmF1Iiwid2EuZ292LmF1Iiwic2Nob29scy5uc3cuZWR1LmF1IiwiYXciLCJjb20uYXciLCJheCIsImF6IiwiYml6LmF6IiwiY29tLmF6IiwiZWR1LmF6IiwiZ292LmF6IiwiaW5mby5heiIsImludC5heiIsIm1pbC5heiIsIm5hbWUuYXoi''@;'; put 'put ''LCJuZXQuYXoiLCJvcmcuYXoiLCJwcC5heiIsInByby5heiIsImJhIiwiY29tLmJhIiwiZWR1LmJhIiwiZ292LmJhIiwibWlsLmJhIiwibmV0LmJhIiwib3JnLmJhIiwiYmIiLCJiaXouYmIiLCJjby5iYiIsImNvbS5iYiIsImVkdS5iYiIsImdvdi5iYiIsImluZm8uYmIiLCJuZXQuYmIiLCJv''@;'; put 'put ''cmcuYmIiLCJzdG9yZS5iYiIsInR2LmJiIiwiKi5iZCIsImJlIiwiYWMuYmUiLCJiZiIsImdvdi5iZiIsImJnIiwiMC5iZyIsIjEuYmciLCIyLmJnIiwiMy5iZyIsIjQuYmciLCI1LmJnIiwiNi5iZyIsIjcuYmciLCI4LmJnIiwiOS5iZyIsImEuYmciLCJiLmJnIiwiYy5iZyIsImQuYmciLCJl''@;'; put 'put ''LmJnIiwiZi5iZyIsImcuYmciLCJoLmJnIiwiaS5iZyIsImouYmciLCJrLmJnIiwibC5iZyIsIm0uYmciLCJuLmJnIiwiby5iZyIsInAuYmciLCJxLmJnIiwici5iZyIsInMuYmciLCJ0LmJnIiwidS5iZyIsInYuYmciLCJ3LmJnIiwieC5iZyIsInkuYmciLCJ6LmJnIiwiYmgiLCJjb20uYmgi''@;'; put 'put ''LCJlZHUuYmgiLCJnb3YuYmgiLCJuZXQuYmgiLCJvcmcuYmgiLCJiaSIsImNvLmJpIiwiY29tLmJpIiwiZWR1LmJpIiwib3IuYmkiLCJvcmcuYmkiLCJiaXoiLCJiaiIsImFmcmljYS5iaiIsImFncm8uYmoiLCJhcmNoaXRlY3Rlcy5iaiIsImFzc3VyLmJqIiwiYXZvY2F0cy5iaiIsImNvLmJq''@;'; put 'put ''IiwiY29tLmJqIiwiZWNvLmJqIiwiZWNvbm8uYmoiLCJlZHUuYmoiLCJpbmZvLmJqIiwibG9pc2lycy5iaiIsIm1vbmV5LmJqIiwibmV0LmJqIiwib3JnLmJqIiwib3RlLmJqIiwicmVzdGF1cmFudC5iaiIsInJlc3RvLmJqIiwidG91cmlzbS5iaiIsInVuaXYuYmoiLCJibSIsImNvbS5ibSIs''@;'; put 'put ''ImVkdS5ibSIsImdvdi5ibSIsIm5ldC5ibSIsIm9yZy5ibSIsImJuIiwiY29tLmJuIiwiZWR1LmJuIiwiZ292LmJuIiwibmV0LmJuIiwib3JnLmJuIiwiYm8iLCJjb20uYm8iLCJlZHUuYm8iLCJnb2IuYm8iLCJpbnQuYm8iLCJtaWwuYm8iLCJuZXQuYm8iLCJvcmcuYm8iLCJ0di5ibyIsIndl''@;'; put 'put ''Yi5ibyIsImFjYWRlbWlhLmJvIiwiYWdyby5ibyIsImFydGUuYm8iLCJibG9nLmJvIiwiYm9saXZpYS5ibyIsImNpZW5jaWEuYm8iLCJjb29wZXJhdGl2YS5ibyIsImRlbW9jcmFjaWEuYm8iLCJkZXBvcnRlLmJvIiwiZWNvbG9naWEuYm8iLCJlY29ub21pYS5ibyIsImVtcHJlc2EuYm8iLCJp''@;'; put 'put ''bmRpZ2VuYS5ibyIsImluZHVzdHJpYS5ibyIsImluZm8uYm8iLCJtZWRpY2luYS5ibyIsIm1vdmltaWVudG8uYm8iLCJtdXNpY2EuYm8iLCJuYXR1cmFsLmJvIiwibm9tYnJlLmJvIiwibm90aWNpYXMuYm8iLCJwYXRyaWEuYm8iLCJwbHVyaW5hY2lvbmFsLmJvIiwicG9saXRpY2EuYm8iLCJw''@;'; put 'put ''cm9mZXNpb25hbC5ibyIsInB1ZWJsby5ibyIsInJldmlzdGEuYm8iLCJzYWx1ZC5ibyIsInRlY25vbG9naWEuYm8iLCJ0a3NhdC5ibyIsInRyYW5zcG9ydGUuYm8iLCJ3aWtpLmJvIiwiYnIiLCI5Z3VhY3UuYnIiLCJhYmMuYnIiLCJhZG0uYnIiLCJhZHYuYnIiLCJhZ3IuYnIiLCJhanUuYnIi''@;'; put 'put ''LCJhbS5iciIsImFuYW5pLmJyIiwiYXBhcmVjaWRhLmJyIiwiYXBwLmJyIiwiYXJxLmJyIiwiYXJ0LmJyIiwiYXRvLmJyIiwiYi5iciIsImJhcnVlcmkuYnIiLCJiZWxlbS5iciIsImJldC5iciIsImJoei5iciIsImJpYi5iciIsImJpby5iciIsImJsb2cuYnIiLCJibWQuYnIiLCJib2F2aXN0''@;'; put 'put ''YS5iciIsImJzYi5iciIsImNhbXBpbmFncmFuZGUuYnIiLCJjYW1waW5hcy5iciIsImNheGlhcy5iciIsImNpbS5iciIsImNuZy5iciIsImNudC5iciIsImNvbS5iciIsImNvbnRhZ2VtLmJyIiwiY29vcC5iciIsImNvei5iciIsImNyaS5iciIsImN1aWFiYS5iciIsImN1cml0aWJhLmJyIiwi''@;'; put 'put ''ZGVmLmJyIiwiZGVzLmJyIiwiZGV0LmJyIiwiZGV2LmJyIiwiZWNuLmJyIiwiZWNvLmJyIiwiZWR1LmJyIiwiZW1wLmJyIiwiZW5mLmJyIiwiZW5nLmJyIiwiZXNwLmJyIiwiZXRjLmJyIiwiZXRpLmJyIiwiZmFyLmJyIiwiZmVpcmEuYnIiLCJmbG9nLmJyIiwiZmxvcmlwYS5iciIsImZtLmJy''@;'; put 'put ''IiwiZm5kLmJyIiwiZm9ydGFsLmJyIiwiZm90LmJyIiwiZm96LmJyIiwiZnN0LmJyIiwiZzEyLmJyIiwiZ2VvLmJyIiwiZ2dmLmJyIiwiZ29pYW5pYS5iciIsImdvdi5iciIsImFjLmdvdi5iciIsImFsLmdvdi5iciIsImFtLmdvdi5iciIsImFwLmdvdi5iciIsImJhLmdvdi5iciIsImNlLmdv''@;'; put 'put ''di5iciIsImRmLmdvdi5iciIsImVzLmdvdi5iciIsImdvLmdvdi5iciIsIm1hLmdvdi5iciIsIm1nLmdvdi5iciIsIm1zLmdvdi5iciIsIm10Lmdvdi5iciIsInBhLmdvdi5iciIsInBiLmdvdi5iciIsInBlLmdvdi5iciIsInBpLmdvdi5iciIsInByLmdvdi5iciIsInJqLmdvdi5iciIsInJu''@;'; put 'put ''Lmdvdi5iciIsInJvLmdvdi5iciIsInJyLmdvdi5iciIsInJzLmdvdi5iciIsInNjLmdvdi5iciIsInNlLmdvdi5iciIsInNwLmdvdi5iciIsInRvLmdvdi5iciIsImdydS5iciIsImltYi5iciIsImluZC5iciIsImluZi5iciIsImphYi5iciIsImphbXBhLmJyIiwiamRmLmJyIiwiam9pbnZp''@;'; put 'put ''bGxlLmJyIiwiam9yLmJyIiwianVzLmJyIiwibGVnLmJyIiwibGVpbGFvLmJyIiwibGVsLmJyIiwibG9nLmJyIiwibG9uZHJpbmEuYnIiLCJtYWNhcGEuYnIiLCJtYWNlaW8uYnIiLCJtYW5hdXMuYnIiLCJtYXJpbmdhLmJyIiwibWF0LmJyIiwibWVkLmJyIiwibWlsLmJyIiwibW9yZW5hLmJy''@;'; put 'put ''IiwibXAuYnIiLCJtdXMuYnIiLCJuYXRhbC5iciIsIm5ldC5iciIsIm5pdGVyb2kuYnIiLCIqLm5vbS5iciIsIm5vdC5iciIsIm50ci5iciIsIm9kby5iciIsIm9uZy5iciIsIm9yZy5iciIsIm9zYXNjby5iciIsInBhbG1hcy5iciIsInBvYS5iciIsInBwZy5iciIsInByby5iciIsInBzYy5i''@;'; put 'put ''ciIsInBzaS5iciIsInB2aC5iciIsInFzbC5iciIsInJhZGlvLmJyIiwicmVjLmJyIiwicmVjaWZlLmJyIiwicmVwLmJyIiwicmliZWlyYW8uYnIiLCJyaW8uYnIiLCJyaW9icmFuY28uYnIiLCJyaW9wcmV0by5iciIsInNhbHZhZG9yLmJyIiwic2FtcGEuYnIiLCJzYW50YW1hcmlhLmJyIiwi''@;'; put 'put ''c2FudG9hbmRyZS5iciIsInNhb2Jlcm5hcmRvLmJyIiwic2FvZ29uY2EuYnIiLCJzZWcuYnIiLCJzamMuYnIiLCJzbGcuYnIiLCJzbHouYnIiLCJzb3JvY2FiYS5iciIsInNydi5iciIsInRheGkuYnIiLCJ0Yy5iciIsInRlYy5iciIsInRlby5iciIsInRoZS5iciIsInRtcC5iciIsInRyZC5i''@;'; put 'put ''ciIsInR1ci5iciIsInR2LmJyIiwidWRpLmJyIiwidmV0LmJyIiwidml4LmJyIiwidmxvZy5iciIsIndpa2kuYnIiLCJ6bGcuYnIiLCJicyIsImNvbS5icyIsImVkdS5icyIsImdvdi5icyIsIm5ldC5icyIsIm9yZy5icyIsImJ0IiwiY29tLmJ0IiwiZWR1LmJ0IiwiZ292LmJ0IiwibmV0LmJ0''@;'; put 'put ''Iiwib3JnLmJ0IiwiYnYiLCJidyIsImNvLmJ3Iiwib3JnLmJ3IiwiYnkiLCJnb3YuYnkiLCJtaWwuYnkiLCJjb20uYnkiLCJvZi5ieSIsImJ6IiwiY28uYnoiLCJjb20uYnoiLCJlZHUuYnoiLCJnb3YuYnoiLCJuZXQuYnoiLCJvcmcuYnoiLCJjYSIsImFiLmNhIiwiYmMuY2EiLCJtYi5jYSIs''@;'; put 'put ''Im5iLmNhIiwibmYuY2EiLCJubC5jYSIsIm5zLmNhIiwibnQuY2EiLCJudS5jYSIsIm9uLmNhIiwicGUuY2EiLCJxYy5jYSIsInNrLmNhIiwieWsuY2EiLCJnYy5jYSIsImNhdCIsImNjIiwiY2QiLCJnb3YuY2QiLCJjZiIsImNnIiwiY2giLCJjaSIsImFjLmNpIiwiYVx4ZTlyb3BvcnQuY2ki''@;'; put 'put ''LCJhc3NvLmNpIiwiY28uY2kiLCJjb20uY2kiLCJlZC5jaSIsImVkdS5jaSIsImdvLmNpIiwiZ291di5jaSIsImludC5jaSIsIm5ldC5jaSIsIm9yLmNpIiwib3JnLmNpIiwiKi5jayIsIiF3d3cuY2siLCJjbCIsImNvLmNsIiwiZ29iLmNsIiwiZ292LmNsIiwibWlsLmNsIiwiY20iLCJjby5j''@;'; put 'put ''bSIsImNvbS5jbSIsImdvdi5jbSIsIm5ldC5jbSIsImNuIiwiYWMuY24iLCJjb20uY24iLCJlZHUuY24iLCJnb3YuY24iLCJtaWwuY24iLCJuZXQuY24iLCJvcmcuY24iLCJcdTUxNmNcdTUzZjguY24iLCJcdTdkYjJcdTdkNjEuY24iLCJcdTdmNTFcdTdlZGMuY24iLCJhaC5jbiIsImJqLmNu''@;'; put 'put ''IiwiY3EuY24iLCJmai5jbiIsImdkLmNuIiwiZ3MuY24iLCJneC5jbiIsImd6LmNuIiwiaGEuY24iLCJoYi5jbiIsImhlLmNuIiwiaGkuY24iLCJoay5jbiIsImhsLmNuIiwiaG4uY24iLCJqbC5jbiIsImpzLmNuIiwianguY24iLCJsbi5jbiIsIm1vLmNuIiwibm0uY24iLCJueC5jbiIsInFo''@;'; put 'put ''LmNuIiwic2MuY24iLCJzZC5jbiIsInNoLmNuIiwic24uY24iLCJzeC5jbiIsInRqLmNuIiwidHcuY24iLCJ4ai5jbiIsInh6LmNuIiwieW4uY24iLCJ6ai5jbiIsImNvIiwiY29tLmNvIiwiZWR1LmNvIiwiZ292LmNvIiwibWlsLmNvIiwibmV0LmNvIiwibm9tLmNvIiwib3JnLmNvIiwiY29t''@;'; put 'put ''IiwiY29vcCIsImNyIiwiYWMuY3IiLCJjby5jciIsImVkLmNyIiwiZmkuY3IiLCJnby5jciIsIm9yLmNyIiwic2EuY3IiLCJjdSIsImNvbS5jdSIsImVkdS5jdSIsImdvYi5jdSIsImluZi5jdSIsIm5hdC5jdSIsIm5ldC5jdSIsIm9yZy5jdSIsImN2IiwiY29tLmN2IiwiZWR1LmN2IiwiaWQu''@;'; put 'put ''Y3YiLCJpbnQuY3YiLCJuZXQuY3YiLCJub21lLmN2Iiwib3JnLmN2IiwicHVibC5jdiIsImN3IiwiY29tLmN3IiwiZWR1LmN3IiwibmV0LmN3Iiwib3JnLmN3IiwiY3giLCJnb3YuY3giLCJjeSIsImFjLmN5IiwiYml6LmN5IiwiY29tLmN5IiwiZWtsb2dlcy5jeSIsImdvdi5jeSIsImx0ZC5j''@;'; put 'put ''eSIsIm1pbC5jeSIsIm5ldC5jeSIsIm9yZy5jeSIsInByZXNzLmN5IiwicHJvLmN5IiwidG0uY3kiLCJjeiIsImRlIiwiZGoiLCJkayIsImRtIiwiY28uZG0iLCJjb20uZG0iLCJlZHUuZG0iLCJnb3YuZG0iLCJuZXQuZG0iLCJvcmcuZG0iLCJkbyIsImFydC5kbyIsImNvbS5kbyIsImVkdS5k''@;'; put 'put ''byIsImdvYi5kbyIsImdvdi5kbyIsIm1pbC5kbyIsIm5ldC5kbyIsIm9yZy5kbyIsInNsZC5kbyIsIndlYi5kbyIsImR6IiwiYXJ0LmR6IiwiYXNzby5keiIsImNvbS5keiIsImVkdS5keiIsImdvdi5keiIsIm5ldC5keiIsIm9yZy5keiIsInBvbC5keiIsInNvYy5keiIsInRtLmR6IiwiZWMi''@;'; put 'put ''LCJjb20uZWMiLCJlZHUuZWMiLCJmaW4uZWMiLCJnb2IuZWMiLCJnb3YuZWMiLCJpbmZvLmVjIiwiazEyLmVjIiwibWVkLmVjIiwibWlsLmVjIiwibmV0LmVjIiwib3JnLmVjIiwicHJvLmVjIiwiZWR1IiwiZWUiLCJhaXAuZWUiLCJjb20uZWUiLCJlZHUuZWUiLCJmaWUuZWUiLCJnb3YuZWUi''@;'; put 'put ''LCJsaWIuZWUiLCJtZWQuZWUiLCJvcmcuZWUiLCJwcmkuZWUiLCJyaWlrLmVlIiwiZWciLCJhYy5lZyIsImNvbS5lZyIsImVkdS5lZyIsImV1bi5lZyIsImdvdi5lZyIsImluZm8uZWciLCJtZS5lZyIsIm1pbC5lZyIsIm5hbWUuZWciLCJuZXQuZWciLCJvcmcuZWciLCJzY2kuZWciLCJzcG9y''@;'; put 'put ''dC5lZyIsInR2LmVnIiwiKi5lciIsImVzIiwiY29tLmVzIiwiZWR1LmVzIiwiZ29iLmVzIiwibm9tLmVzIiwib3JnLmVzIiwiZXQiLCJiaXouZXQiLCJjb20uZXQiLCJlZHUuZXQiLCJnb3YuZXQiLCJpbmZvLmV0IiwibmFtZS5ldCIsIm5ldC5ldCIsIm9yZy5ldCIsImV1IiwiZmkiLCJhbGFu''@;'; put 'put ''ZC5maSIsImZqIiwiYWMuZmoiLCJiaXouZmoiLCJjb20uZmoiLCJnb3YuZmoiLCJpbmZvLmZqIiwibWlsLmZqIiwibmFtZS5maiIsIm5ldC5maiIsIm9yZy5maiIsInByby5maiIsIiouZmsiLCJmbSIsImNvbS5mbSIsImVkdS5mbSIsIm5ldC5mbSIsIm9yZy5mbSIsImZvIiwiZnIiLCJhc3Nv''@;'; put 'put ''LmZyIiwiY29tLmZyIiwiZ291di5mciIsIm5vbS5mciIsInByZC5mciIsInRtLmZyIiwiYXZvdWVzLmZyIiwiY2NpLmZyIiwiZ3JldGEuZnIiLCJodWlzc2llci1qdXN0aWNlLmZyIiwiZ2EiLCJnYiIsImdkIiwiZWR1LmdkIiwiZ292LmdkIiwiZ2UiLCJjb20uZ2UiLCJlZHUuZ2UiLCJnb3Yu''@;'; put 'put ''Z2UiLCJuZXQuZ2UiLCJvcmcuZ2UiLCJwdnQuZ2UiLCJzY2hvb2wuZ2UiLCJnZiIsImdnIiwiY28uZ2ciLCJuZXQuZ2ciLCJvcmcuZ2ciLCJnaCIsImNvbS5naCIsImVkdS5naCIsImdvdi5naCIsIm1pbC5naCIsIm9yZy5naCIsImdpIiwiY29tLmdpIiwiZWR1LmdpIiwiZ292LmdpIiwibHRk''@;'; put 'put ''LmdpIiwibW9kLmdpIiwib3JnLmdpIiwiZ2wiLCJjby5nbCIsImNvbS5nbCIsImVkdS5nbCIsIm5ldC5nbCIsIm9yZy5nbCIsImdtIiwiZ24iLCJhYy5nbiIsImNvbS5nbiIsImVkdS5nbiIsImdvdi5nbiIsIm5ldC5nbiIsIm9yZy5nbiIsImdvdiIsImdwIiwiYXNzby5ncCIsImNvbS5ncCIs''@;'; put 'put ''ImVkdS5ncCIsIm1vYmkuZ3AiLCJuZXQuZ3AiLCJvcmcuZ3AiLCJncSIsImdyIiwiY29tLmdyIiwiZWR1LmdyIiwiZ292LmdyIiwibmV0LmdyIiwib3JnLmdyIiwiZ3MiLCJndCIsImNvbS5ndCIsImVkdS5ndCIsImdvYi5ndCIsImluZC5ndCIsIm1pbC5ndCIsIm5ldC5ndCIsIm9yZy5ndCIs''@;'; put 'put ''Imd1IiwiY29tLmd1IiwiZWR1Lmd1IiwiZ292Lmd1IiwiZ3VhbS5ndSIsImluZm8uZ3UiLCJuZXQuZ3UiLCJvcmcuZ3UiLCJ3ZWIuZ3UiLCJndyIsImd5IiwiY28uZ3kiLCJjb20uZ3kiLCJlZHUuZ3kiLCJnb3YuZ3kiLCJuZXQuZ3kiLCJvcmcuZ3kiLCJoayIsImNvbS5oayIsImVkdS5oayIs''@;'; put 'put ''Imdvdi5oayIsImlkdi5oayIsIm5ldC5oayIsIm9yZy5oayIsIlx1NGUyYVx1NGViYS5oayIsIlx1NTAwYlx1NGViYS5oayIsIlx1NTE2Y1x1NTNmOC5oayIsIlx1NjUzZlx1NWU5Yy5oayIsIlx1NjU0ZVx1ODBiMi5oayIsIlx1NjU1OVx1ODBiMi5oayIsIlx1N2I4N1x1NGViYS5oayIsIlx1''@;'; put 'put ''N2Q0NFx1N2U1NC5oayIsIlx1N2Q0NFx1N2VjNy5oayIsIlx1N2RiMlx1N2Q2MS5oayIsIlx1N2RiMlx1N2VkYy5oayIsIlx1N2VjNFx1N2U1NC5oayIsIlx1N2VjNFx1N2VjNy5oayIsIlx1N2Y1MVx1N2Q2MS5oayIsIlx1N2Y1MVx1N2VkYy5oayIsImhtIiwiaG4iLCJjb20uaG4iLCJlZHUu''@;'; put 'put ''aG4iLCJnb2IuaG4iLCJtaWwuaG4iLCJuZXQuaG4iLCJvcmcuaG4iLCJociIsImNvbS5ociIsImZyb20uaHIiLCJpei5ociIsIm5hbWUuaHIiLCJodCIsImFkdWx0Lmh0IiwiYXJ0Lmh0IiwiYXNzby5odCIsImNvbS5odCIsImNvb3AuaHQiLCJlZHUuaHQiLCJmaXJtLmh0IiwiZ291di5odCIs''@;'; put 'put ''ImluZm8uaHQiLCJtZWQuaHQiLCJuZXQuaHQiLCJvcmcuaHQiLCJwZXJzby5odCIsInBvbC5odCIsInByby5odCIsInJlbC5odCIsInNob3AuaHQiLCJodSIsIjIwMDAuaHUiLCJhZ3Jhci5odSIsImJvbHQuaHUiLCJjYXNpbm8uaHUiLCJjaXR5Lmh1IiwiY28uaHUiLCJlcm90aWNhLmh1Iiwi''@;'; put 'put ''ZXJvdGlrYS5odSIsImZpbG0uaHUiLCJmb3J1bS5odSIsImdhbWVzLmh1IiwiaG90ZWwuaHUiLCJpbmZvLmh1IiwiaW5nYXRsYW4uaHUiLCJqb2dhc3ouaHUiLCJrb255dmVsby5odSIsImxha2FzLmh1IiwibWVkaWEuaHUiLCJuZXdzLmh1Iiwib3JnLmh1IiwicHJpdi5odSIsInJla2xhbS5o''@;'; put 'put ''dSIsInNleC5odSIsInNob3AuaHUiLCJzcG9ydC5odSIsInN1bGkuaHUiLCJzemV4Lmh1IiwidG0uaHUiLCJ0b3pzZGUuaHUiLCJ1dGF6YXMuaHUiLCJ2aWRlby5odSIsImlkIiwiYWMuaWQiLCJiaXouaWQiLCJjby5pZCIsImRlc2EuaWQiLCJnby5pZCIsIm1pbC5pZCIsIm15LmlkIiwibmV0''@;'; put 'put ''LmlkIiwib3IuaWQiLCJwb25wZXMuaWQiLCJzY2guaWQiLCJ3ZWIuaWQiLCJpZSIsImdvdi5pZSIsImlsIiwiYWMuaWwiLCJjby5pbCIsImdvdi5pbCIsImlkZi5pbCIsImsxMi5pbCIsIm11bmkuaWwiLCJuZXQuaWwiLCJvcmcuaWwiLCJcdTA1ZDlcdTA1ZTlcdTA1ZThcdTA1ZDBcdTA1ZGMi''@;'; put 'put ''LCJcdTA1ZDBcdTA1ZTdcdTA1ZDNcdTA1ZGVcdTA1ZDlcdTA1ZDQuXHUwNWQ5XHUwNWU5XHUwNWU4XHUwNWQwXHUwNWRjIiwiXHUwNWQ5XHUwNWU5XHUwNWQ1XHUwNWQxLlx1MDVkOVx1MDVlOVx1MDVlOFx1MDVkMFx1MDVkYyIsIlx1MDVlNlx1MDVkNFx1MDVkYy5cdTA1ZDlcdTA1ZTlcdTA1''@;'; put 'put ''ZThcdTA1ZDBcdTA1ZGMiLCJcdTA1ZGVcdTA1ZGVcdTA1ZTlcdTA1ZGMuXHUwNWQ5XHUwNWU5XHUwNWU4XHUwNWQwXHUwNWRjIiwiaW0iLCJhYy5pbSIsImNvLmltIiwibHRkLmNvLmltIiwicGxjLmNvLmltIiwiY29tLmltIiwibmV0LmltIiwib3JnLmltIiwidHQuaW0iLCJ0di5pbSIsImlu''@;'; put 'put ''IiwiNWcuaW4iLCI2Zy5pbiIsImFjLmluIiwiYWkuaW4iLCJhbS5pbiIsImJpaGFyLmluIiwiYml6LmluIiwiYnVzaW5lc3MuaW4iLCJjYS5pbiIsImNuLmluIiwiY28uaW4iLCJjb20uaW4iLCJjb29wLmluIiwiY3MuaW4iLCJkZWxoaS5pbiIsImRyLmluIiwiZWR1LmluIiwiZXIuaW4iLCJm''@;'; put 'put ''aXJtLmluIiwiZ2VuLmluIiwiZ292LmluIiwiZ3VqYXJhdC5pbiIsImluZC5pbiIsImluZm8uaW4iLCJpbnQuaW4iLCJpbnRlcm5ldC5pbiIsImlvLmluIiwibWUuaW4iLCJtaWwuaW4iLCJuZXQuaW4iLCJuaWMuaW4iLCJvcmcuaW4iLCJwZy5pbiIsInBvc3QuaW4iLCJwcm8uaW4iLCJyZXMu''@;'; put 'put ''aW4iLCJ0cmF2ZWwuaW4iLCJ0di5pbiIsInVrLmluIiwidXAuaW4iLCJ1cy5pbiIsImluZm8iLCJpbnQiLCJldS5pbnQiLCJpbyIsImNvLmlvIiwiY29tLmlvIiwiZWR1LmlvIiwiZ292LmlvIiwibWlsLmlvIiwibmV0LmlvIiwibm9tLmlvIiwib3JnLmlvIiwiaXEiLCJjb20uaXEiLCJlZHUu''@;'; put 'put ''aXEiLCJnb3YuaXEiLCJtaWwuaXEiLCJuZXQuaXEiLCJvcmcuaXEiLCJpciIsImFjLmlyIiwiY28uaXIiLCJnb3YuaXIiLCJpZC5pciIsIm5ldC5pciIsIm9yZy5pciIsInNjaC5pciIsIlx1MDYyN1x1MDZjY1x1MDYzMVx1MDYyN1x1MDY0Ni5pciIsIlx1MDYyN1x1MDY0YVx1MDYzMVx1MDYy''@;'; put 'put ''N1x1MDY0Ni5pciIsImlzIiwiaXQiLCJlZHUuaXQiLCJnb3YuaXQiLCJhYnIuaXQiLCJhYnJ1enpvLml0IiwiYW9zdGEtdmFsbGV5Lml0IiwiYW9zdGF2YWxsZXkuaXQiLCJiYXMuaXQiLCJiYXNpbGljYXRhLml0IiwiY2FsLml0IiwiY2FsYWJyaWEuaXQiLCJjYW0uaXQiLCJjYW1wYW5pYS5p''@;'; put 'put ''dCIsImVtaWxpYS1yb21hZ25hLml0IiwiZW1pbGlhcm9tYWduYS5pdCIsImVtci5pdCIsImZyaXVsaS12LWdpdWxpYS5pdCIsImZyaXVsaS12ZS1naXVsaWEuaXQiLCJmcml1bGktdmVnaXVsaWEuaXQiLCJmcml1bGktdmVuZXppYS1naXVsaWEuaXQiLCJmcml1bGktdmVuZXppYWdpdWxpYS5p''@;'; put 'put ''dCIsImZyaXVsaS12Z2l1bGlhLml0IiwiZnJpdWxpdi1naXVsaWEuaXQiLCJmcml1bGl2ZS1naXVsaWEuaXQiLCJmcml1bGl2ZWdpdWxpYS5pdCIsImZyaXVsaXZlbmV6aWEtZ2l1bGlhLml0IiwiZnJpdWxpdmVuZXppYWdpdWxpYS5pdCIsImZyaXVsaXZnaXVsaWEuaXQiLCJmdmcuaXQiLCJs''@;'; put 'put ''YXouaXQiLCJsYXppby5pdCIsImxpZy5pdCIsImxpZ3VyaWEuaXQiLCJsb20uaXQiLCJsb21iYXJkaWEuaXQiLCJsb21iYXJkeS5pdCIsImx1Y2FuaWEuaXQiLCJtYXIuaXQiLCJtYXJjaGUuaXQiLCJtb2wuaXQiLCJtb2xpc2UuaXQiLCJwaWVkbW9udC5pdCIsInBpZW1vbnRlLml0IiwicG1u''@;'; put 'put ''Lml0IiwicHVnLml0IiwicHVnbGlhLml0Iiwic2FyLml0Iiwic2FyZGVnbmEuaXQiLCJzYXJkaW5pYS5pdCIsInNpYy5pdCIsInNpY2lsaWEuaXQiLCJzaWNpbHkuaXQiLCJ0YWEuaXQiLCJ0b3MuaXQiLCJ0b3NjYW5hLml0IiwidHJlbnRpbi1zdWQtdGlyb2wuaXQiLCJ0cmVudGluLXNceGZj''@;'; put 'put ''ZC10aXJvbC5pdCIsInRyZW50aW4tc3VkdGlyb2wuaXQiLCJ0cmVudGluLXNceGZjZHRpcm9sLml0IiwidHJlbnRpbi1zdWVkLXRpcm9sLml0IiwidHJlbnRpbi1zdWVkdGlyb2wuaXQiLCJ0cmVudGluby5pdCIsInRyZW50aW5vLWEtYWRpZ2UuaXQiLCJ0cmVudGluby1hYWRpZ2UuaXQiLCJ0''@;'; put 'put ''cmVudGluby1hbHRvLWFkaWdlLml0IiwidHJlbnRpbm8tYWx0b2FkaWdlLml0IiwidHJlbnRpbm8tcy10aXJvbC5pdCIsInRyZW50aW5vLXN0aXJvbC5pdCIsInRyZW50aW5vLXN1ZC10aXJvbC5pdCIsInRyZW50aW5vLXNceGZjZC10aXJvbC5pdCIsInRyZW50aW5vLXN1ZHRpcm9sLml0Iiwi''@;'; put 'put ''dHJlbnRpbm8tc1x4ZmNkdGlyb2wuaXQiLCJ0cmVudGluby1zdWVkLXRpcm9sLml0IiwidHJlbnRpbm8tc3VlZHRpcm9sLml0IiwidHJlbnRpbm9hLWFkaWdlLml0IiwidHJlbnRpbm9hYWRpZ2UuaXQiLCJ0cmVudGlub2FsdG8tYWRpZ2UuaXQiLCJ0cmVudGlub2FsdG9hZGlnZS5pdCIsInRy''@;'; put 'put ''ZW50aW5vcy10aXJvbC5pdCIsInRyZW50aW5vc3Rpcm9sLml0IiwidHJlbnRpbm9zdWQtdGlyb2wuaXQiLCJ0cmVudGlub3NceGZjZC10aXJvbC5pdCIsInRyZW50aW5vc3VkdGlyb2wuaXQiLCJ0cmVudGlub3NceGZjZHRpcm9sLml0IiwidHJlbnRpbm9zdWVkLXRpcm9sLml0IiwidHJlbnRp''@;'; put 'put ''bm9zdWVkdGlyb2wuaXQiLCJ0cmVudGluc3VkLXRpcm9sLml0IiwidHJlbnRpbnNceGZjZC10aXJvbC5pdCIsInRyZW50aW5zdWR0aXJvbC5pdCIsInRyZW50aW5zXHhmY2R0aXJvbC5pdCIsInRyZW50aW5zdWVkLXRpcm9sLml0IiwidHJlbnRpbnN1ZWR0aXJvbC5pdCIsInR1c2NhbnkuaXQi''@;'; put 'put ''LCJ1bWIuaXQiLCJ1bWJyaWEuaXQiLCJ2YWwtZC1hb3N0YS5pdCIsInZhbC1kYW9zdGEuaXQiLCJ2YWxkLWFvc3RhLml0IiwidmFsZGFvc3RhLml0IiwidmFsbGUtYW9zdGEuaXQiLCJ2YWxsZS1kLWFvc3RhLml0IiwidmFsbGUtZGFvc3RhLml0IiwidmFsbGVhb3N0YS5pdCIsInZhbGxlZC1h''@;'; put 'put ''b3N0YS5pdCIsInZhbGxlZGFvc3RhLml0IiwidmFsbGVlLWFvc3RlLml0IiwidmFsbFx4ZTllLWFvc3RlLml0IiwidmFsbGVlLWQtYW9zdGUuaXQiLCJ2YWxsXHhlOWUtZC1hb3N0ZS5pdCIsInZhbGxlZWFvc3RlLml0IiwidmFsbFx4ZTllYW9zdGUuaXQiLCJ2YWxsZWVkYW9zdGUuaXQiLCJ2''@;'; put 'put ''YWxsXHhlOWVkYW9zdGUuaXQiLCJ2YW8uaXQiLCJ2ZGEuaXQiLCJ2ZW4uaXQiLCJ2ZW5ldG8uaXQiLCJhZy5pdCIsImFncmlnZW50by5pdCIsImFsLml0IiwiYWxlc3NhbmRyaWEuaXQiLCJhbHRvLWFkaWdlLml0IiwiYWx0b2FkaWdlLml0IiwiYW4uaXQiLCJhbmNvbmEuaXQiLCJhbmRyaWEt''@;'; put 'put ''YmFybGV0dGEtdHJhbmkuaXQiLCJhbmRyaWEtdHJhbmktYmFybGV0dGEuaXQiLCJhbmRyaWFiYXJsZXR0YXRyYW5pLml0IiwiYW5kcmlhdHJhbmliYXJsZXR0YS5pdCIsImFvLml0IiwiYW9zdGEuaXQiLCJhb3N0ZS5pdCIsImFwLml0IiwiYXEuaXQiLCJhcXVpbGEuaXQiLCJhci5pdCIsImFy''@;'; put 'put ''ZXp6by5pdCIsImFzY29saS1waWNlbm8uaXQiLCJhc2NvbGlwaWNlbm8uaXQiLCJhc3RpLml0IiwiYXQuaXQiLCJhdi5pdCIsImF2ZWxsaW5vLml0IiwiYmEuaXQiLCJiYWxzYW4uaXQiLCJiYWxzYW4tc3VkdGlyb2wuaXQiLCJiYWxzYW4tc1x4ZmNkdGlyb2wuaXQiLCJiYWxzYW4tc3VlZHRp''@;'; put 'put ''cm9sLml0IiwiYmFyaS5pdCIsImJhcmxldHRhLXRyYW5pLWFuZHJpYS5pdCIsImJhcmxldHRhdHJhbmlhbmRyaWEuaXQiLCJiZWxsdW5vLml0IiwiYmVuZXZlbnRvLml0IiwiYmVyZ2Ftby5pdCIsImJnLml0IiwiYmkuaXQiLCJiaWVsbGEuaXQiLCJibC5pdCIsImJuLml0IiwiYm8uaXQiLCJi''@;'; put 'put ''b2xvZ25hLml0IiwiYm9semFuby5pdCIsImJvbHphbm8tYWx0b2FkaWdlLml0IiwiYm96ZW4uaXQiLCJib3plbi1zdWR0aXJvbC5pdCIsImJvemVuLXNceGZjZHRpcm9sLml0IiwiYm96ZW4tc3VlZHRpcm9sLml0IiwiYnIuaXQiLCJicmVzY2lhLml0IiwiYnJpbmRpc2kuaXQiLCJicy5pdCIs''@;'; put 'put ''ImJ0Lml0IiwiYnVsc2FuLml0IiwiYnVsc2FuLXN1ZHRpcm9sLml0IiwiYnVsc2FuLXNceGZjZHRpcm9sLml0IiwiYnVsc2FuLXN1ZWR0aXJvbC5pdCIsImJ6Lml0IiwiY2EuaXQiLCJjYWdsaWFyaS5pdCIsImNhbHRhbmlzc2V0dGEuaXQiLCJjYW1waWRhbm8tbWVkaW8uaXQiLCJjYW1waWRh''@;'; put 'put ''bm9tZWRpby5pdCIsImNhbXBvYmFzc28uaXQiLCJjYXJib25pYS1pZ2xlc2lhcy5pdCIsImNhcmJvbmlhaWdsZXNpYXMuaXQiLCJjYXJyYXJhLW1hc3NhLml0IiwiY2FycmFyYW1hc3NhLml0IiwiY2FzZXJ0YS5pdCIsImNhdGFuaWEuaXQiLCJjYXRhbnphcm8uaXQiLCJjYi5pdCIsImNlLml0''@;'; put 'put ''IiwiY2VzZW5hLWZvcmxpLml0IiwiY2VzZW5hLWZvcmxceGVjLml0IiwiY2VzZW5hZm9ybGkuaXQiLCJjZXNlbmFmb3JsXHhlYy5pdCIsImNoLml0IiwiY2hpZXRpLml0IiwiY2kuaXQiLCJjbC5pdCIsImNuLml0IiwiY28uaXQiLCJjb21vLml0IiwiY29zZW56YS5pdCIsImNyLml0IiwiY3Jl''@;'; put 'put ''bW9uYS5pdCIsImNyb3RvbmUuaXQiLCJjcy5pdCIsImN0Lml0IiwiY3VuZW8uaXQiLCJjei5pdCIsImRlbGwtb2dsaWFzdHJhLml0IiwiZGVsbG9nbGlhc3RyYS5pdCIsImVuLml0IiwiZW5uYS5pdCIsImZjLml0IiwiZmUuaXQiLCJmZXJtby5pdCIsImZlcnJhcmEuaXQiLCJmZy5pdCIsImZp''@;'; put 'put ''Lml0IiwiZmlyZW56ZS5pdCIsImZsb3JlbmNlLml0IiwiZm0uaXQiLCJmb2dnaWEuaXQiLCJmb3JsaS1jZXNlbmEuaXQiLCJmb3JsXHhlYy1jZXNlbmEuaXQiLCJmb3JsaWNlc2VuYS5pdCIsImZvcmxceGVjY2VzZW5hLml0IiwiZnIuaXQiLCJmcm9zaW5vbmUuaXQiLCJnZS5pdCIsImdlbm9h''@;'; put 'put ''Lml0IiwiZ2Vub3ZhLml0IiwiZ28uaXQiLCJnb3JpemlhLml0IiwiZ3IuaXQiLCJncm9zc2V0by5pdCIsImlnbGVzaWFzLWNhcmJvbmlhLml0IiwiaWdsZXNpYXNjYXJib25pYS5pdCIsImltLml0IiwiaW1wZXJpYS5pdCIsImlzLml0IiwiaXNlcm5pYS5pdCIsImtyLml0IiwibGEtc3Blemlh''@;'; put 'put ''Lml0IiwibGFxdWlsYS5pdCIsImxhc3BlemlhLml0IiwibGF0aW5hLml0IiwibGMuaXQiLCJsZS5pdCIsImxlY2NlLml0IiwibGVjY28uaXQiLCJsaS5pdCIsImxpdm9ybm8uaXQiLCJsby5pdCIsImxvZGkuaXQiLCJsdC5pdCIsImx1Lml0IiwibHVjY2EuaXQiLCJtYWNlcmF0YS5pdCIsIm1h''@;'; put 'put ''bnRvdmEuaXQiLCJtYXNzYS1jYXJyYXJhLml0IiwibWFzc2FjYXJyYXJhLml0IiwibWF0ZXJhLml0IiwibWIuaXQiLCJtYy5pdCIsIm1lLml0IiwibWVkaW8tY2FtcGlkYW5vLml0IiwibWVkaW9jYW1waWRhbm8uaXQiLCJtZXNzaW5hLml0IiwibWkuaXQiLCJtaWxhbi5pdCIsIm1pbGFuby5p''@;'; put 'put ''dCIsIm1uLml0IiwibW8uaXQiLCJtb2RlbmEuaXQiLCJtb256YS5pdCIsIm1vbnphLWJyaWFuemEuaXQiLCJtb256YS1lLWRlbGxhLWJyaWFuemEuaXQiLCJtb256YWJyaWFuemEuaXQiLCJtb256YWVicmlhbnphLml0IiwibW9uemFlZGVsbGFicmlhbnphLml0IiwibXMuaXQiLCJtdC5pdCIs''@;'; put 'put ''Im5hLml0IiwibmFwbGVzLml0IiwibmFwb2xpLml0Iiwibm8uaXQiLCJub3ZhcmEuaXQiLCJudS5pdCIsIm51b3JvLml0Iiwib2cuaXQiLCJvZ2xpYXN0cmEuaXQiLCJvbGJpYS10ZW1waW8uaXQiLCJvbGJpYXRlbXBpby5pdCIsIm9yLml0Iiwib3Jpc3Rhbm8uaXQiLCJvdC5pdCIsInBhLml0''@;'; put 'put ''IiwicGFkb3ZhLml0IiwicGFkdWEuaXQiLCJwYWxlcm1vLml0IiwicGFybWEuaXQiLCJwYXZpYS5pdCIsInBjLml0IiwicGQuaXQiLCJwZS5pdCIsInBlcnVnaWEuaXQiLCJwZXNhcm8tdXJiaW5vLml0IiwicGVzYXJvdXJiaW5vLml0IiwicGVzY2FyYS5pdCIsInBnLml0IiwicGkuaXQiLCJw''@;'; put 'put ''aWFjZW56YS5pdCIsInBpc2EuaXQiLCJwaXN0b2lhLml0IiwicG4uaXQiLCJwby5pdCIsInBvcmRlbm9uZS5pdCIsInBvdGVuemEuaXQiLCJwci5pdCIsInByYXRvLml0IiwicHQuaXQiLCJwdS5pdCIsInB2Lml0IiwicHouaXQiLCJyYS5pdCIsInJhZ3VzYS5pdCIsInJhdmVubmEuaXQiLCJy''@;'; put 'put ''Yy5pdCIsInJlLml0IiwicmVnZ2lvLWNhbGFicmlhLml0IiwicmVnZ2lvLWVtaWxpYS5pdCIsInJlZ2dpb2NhbGFicmlhLml0IiwicmVnZ2lvZW1pbGlhLml0IiwicmcuaXQiLCJyaS5pdCIsInJpZXRpLml0IiwicmltaW5pLml0Iiwicm0uaXQiLCJybi5pdCIsInJvLml0Iiwicm9tYS5pdCIs''@;'; put 'put ''InJvbWUuaXQiLCJyb3ZpZ28uaXQiLCJzYS5pdCIsInNhbGVybm8uaXQiLCJzYXNzYXJpLml0Iiwic2F2b25hLml0Iiwic2kuaXQiLCJzaWVuYS5pdCIsInNpcmFjdXNhLml0Iiwic28uaXQiLCJzb25kcmlvLml0Iiwic3AuaXQiLCJzci5pdCIsInNzLml0Iiwic1x4ZmNkdGlyb2wuaXQiLCJz''@;'; put 'put ''dWVkdGlyb2wuaXQiLCJzdi5pdCIsInRhLml0IiwidGFyYW50by5pdCIsInRlLml0IiwidGVtcGlvLW9sYmlhLml0IiwidGVtcGlvb2xiaWEuaXQiLCJ0ZXJhbW8uaXQiLCJ0ZXJuaS5pdCIsInRuLml0IiwidG8uaXQiLCJ0b3Jpbm8uaXQiLCJ0cC5pdCIsInRyLml0IiwidHJhbmktYW5kcmlh''@;'; put 'put ''LWJhcmxldHRhLml0IiwidHJhbmktYmFybGV0dGEtYW5kcmlhLml0IiwidHJhbmlhbmRyaWFiYXJsZXR0YS5pdCIsInRyYW5pYmFybGV0dGFhbmRyaWEuaXQiLCJ0cmFwYW5pLml0IiwidHJlbnRvLml0IiwidHJldmlzby5pdCIsInRyaWVzdGUuaXQiLCJ0cy5pdCIsInR1cmluLml0IiwidHYu''@;'; put 'put ''aXQiLCJ1ZC5pdCIsInVkaW5lLml0IiwidXJiaW5vLXBlc2Fyby5pdCIsInVyYmlub3Blc2Fyby5pdCIsInZhLml0IiwidmFyZXNlLml0IiwidmIuaXQiLCJ2Yy5pdCIsInZlLml0IiwidmVuZXppYS5pdCIsInZlbmljZS5pdCIsInZlcmJhbmlhLml0IiwidmVyY2VsbGkuaXQiLCJ2ZXJvbmEu''@;'; put 'put ''aXQiLCJ2aS5pdCIsInZpYm8tdmFsZW50aWEuaXQiLCJ2aWJvdmFsZW50aWEuaXQiLCJ2aWNlbnphLml0Iiwidml0ZXJiby5pdCIsInZyLml0IiwidnMuaXQiLCJ2dC5pdCIsInZ2Lml0IiwiamUiLCJjby5qZSIsIm5ldC5qZSIsIm9yZy5qZSIsIiouam0iLCJqbyIsImFncmkuam8iLCJhaS5q''@;'; put 'put ''byIsImNvbS5qbyIsImVkdS5qbyIsImVuZy5qbyIsImZtLmpvIiwiZ292LmpvIiwibWlsLmpvIiwibmV0LmpvIiwib3JnLmpvIiwicGVyLmpvIiwicGhkLmpvIiwic2NoLmpvIiwidHYuam8iLCJqb2JzIiwianAiLCJhYy5qcCIsImFkLmpwIiwiY28uanAiLCJlZC5qcCIsImdvLmpwIiwiZ3Iu''@;'; put 'put ''anAiLCJsZy5qcCIsIm5lLmpwIiwib3IuanAiLCJhaWNoaS5qcCIsImFraXRhLmpwIiwiYW9tb3JpLmpwIiwiY2hpYmEuanAiLCJlaGltZS5qcCIsImZ1a3VpLmpwIiwiZnVrdW9rYS5qcCIsImZ1a3VzaGltYS5qcCIsImdpZnUuanAiLCJndW5tYS5qcCIsImhpcm9zaGltYS5qcCIsImhva2th''@;'; put 'put ''aWRvLmpwIiwiaHlvZ28uanAiLCJpYmFyYWtpLmpwIiwiaXNoaWthd2EuanAiLCJpd2F0ZS5qcCIsImthZ2F3YS5qcCIsImthZ29zaGltYS5qcCIsImthbmFnYXdhLmpwIiwia29jaGkuanAiLCJrdW1hbW90by5qcCIsImt5b3RvLmpwIiwibWllLmpwIiwibWl5YWdpLmpwIiwibWl5YXpha2ku''@;'; put 'put ''anAiLCJuYWdhbm8uanAiLCJuYWdhc2FraS5qcCIsIm5hcmEuanAiLCJuaWlnYXRhLmpwIiwib2l0YS5qcCIsIm9rYXlhbWEuanAiLCJva2luYXdhLmpwIiwib3Nha2EuanAiLCJzYWdhLmpwIiwic2FpdGFtYS5qcCIsInNoaWdhLmpwIiwic2hpbWFuZS5qcCIsInNoaXp1b2thLmpwIiwidG9j''@;'; put 'put ''aGlnaS5qcCIsInRva3VzaGltYS5qcCIsInRva3lvLmpwIiwidG90dG9yaS5qcCIsInRveWFtYS5qcCIsIndha2F5YW1hLmpwIiwieWFtYWdhdGEuanAiLCJ5YW1hZ3VjaGkuanAiLCJ5YW1hbmFzaGkuanAiLCJcdTRlMDlcdTkxY2QuanAiLCJcdTRlYWNcdTkwZmQuanAiLCJcdTRmNTBcdThj''@;'; put 'put ''YzAuanAiLCJcdTUxNzVcdTVlYWIuanAiLCJcdTUzMTdcdTZkNzdcdTkwNTMuanAiLCJcdTUzNDNcdTg0NDkuanAiLCJcdTU0OGNcdTZiNGNcdTVjNzEuanAiLCJcdTU3ZmNcdTczODkuanAiLCJcdTU5MjdcdTUyMDYuanAiLCJcdTU5MjdcdTk2MmEuanAiLCJcdTU5NDhcdTgyNmYuanAiLCJc''@;'; put 'put ''dTViYWVcdTU3Y2UuanAiLCJcdTViYWVcdTVkMGUuanAiLCJcdTViY2NcdTVjNzEuanAiLCJcdTVjNzFcdTUzZTMuanAiLCJcdTVjNzFcdTVmNjIuanAiLCJcdTVjNzFcdTY4YTguanAiLCJcdTVjOTBcdTk2MWMuanAiLCJcdTVjYTFcdTVjNzEuanAiLCJcdTVjYTlcdTYyNGIuanAiLCJcdTVj''@;'; put 'put ''ZjZcdTY4MzkuanAiLCJcdTVlODNcdTVjZjYuanAiLCJcdTVmYjNcdTVjZjYuanAiLCJcdTYxMWJcdTVhOWIuanAiLCJcdTYxMWJcdTc3ZTUuanAiLCJcdTY1YjBcdTZmNWYuanAiLCJcdTY3NzFcdTRlYWMuanAiLCJcdTY4MDNcdTY3MjguanAiLCJcdTZjOTZcdTdlMDQuanAiLCJcdTZlY2Jc''@;'; put 'put ''dThjYzAuanAiLCJcdTcxOGFcdTY3MmMuanAiLCJcdTc3ZjNcdTVkZGQuanAiLCJcdTc5NWVcdTU5NDhcdTVkZGQuanAiLCJcdTc5OGZcdTRlOTUuanAiLCJcdTc5OGZcdTVjYTEuanAiLCJcdTc5OGZcdTVjZjYuanAiLCJcdTc5Y2JcdTc1MzAuanAiLCJcdTdmYTRcdTk5YWMuanAiLCJcdTgz''@;'; put 'put ''MjhcdTU3Y2UuanAiLCJcdTk1NzdcdTVkMGUuanAiLCJcdTk1NzdcdTkxY2UuanAiLCJcdTk3NTJcdTY4ZWUuanAiLCJcdTk3NTlcdTVjYTEuanAiLCJcdTk5OTlcdTVkZGQuanAiLCJcdTlhZDhcdTc3ZTUuanAiLCJcdTljZTVcdTUzZDYuanAiLCJcdTllN2ZcdTUxNTBcdTVjZjYuanAiLCIq''@;'; put 'put ''Lmthd2FzYWtpLmpwIiwiIWNpdHkua2F3YXNha2kuanAiLCIqLmtpdGFreXVzaHUuanAiLCIhY2l0eS5raXRha3l1c2h1LmpwIiwiKi5rb2JlLmpwIiwiIWNpdHkua29iZS5qcCIsIioubmFnb3lhLmpwIiwiIWNpdHkubmFnb3lhLmpwIiwiKi5zYXBwb3JvLmpwIiwiIWNpdHkuc2FwcG9yby5q''@;'; put 'put ''cCIsIiouc2VuZGFpLmpwIiwiIWNpdHkuc2VuZGFpLmpwIiwiKi55b2tvaGFtYS5qcCIsIiFjaXR5Lnlva29oYW1hLmpwIiwiYWlzYWkuYWljaGkuanAiLCJhbWEuYWljaGkuanAiLCJhbmpvLmFpY2hpLmpwIiwiYXN1a2UuYWljaGkuanAiLCJjaGlyeXUuYWljaGkuanAiLCJjaGl0YS5haWNo''@;'; put 'put ''aS5qcCIsImZ1c28uYWljaGkuanAiLCJnYW1hZ29yaS5haWNoaS5qcCIsImhhbmRhLmFpY2hpLmpwIiwiaGF6dS5haWNoaS5qcCIsImhla2luYW4uYWljaGkuanAiLCJoaWdhc2hpdXJhLmFpY2hpLmpwIiwiaWNoaW5vbWl5YS5haWNoaS5qcCIsImluYXphd2EuYWljaGkuanAiLCJpbnV5YW1h''@;'; put 'put ''LmFpY2hpLmpwIiwiaXNzaGlraS5haWNoaS5qcCIsIml3YWt1cmEuYWljaGkuanAiLCJrYW5pZS5haWNoaS5qcCIsImthcml5YS5haWNoaS5qcCIsImthc3VnYWkuYWljaGkuanAiLCJraXJhLmFpY2hpLmpwIiwia2l5b3N1LmFpY2hpLmpwIiwia29tYWtpLmFpY2hpLmpwIiwia29uYW4uYWlj''@;'; put 'put ''aGkuanAiLCJrb3RhLmFpY2hpLmpwIiwibWloYW1hLmFpY2hpLmpwIiwibWl5b3NoaS5haWNoaS5qcCIsIm5pc2hpby5haWNoaS5qcCIsIm5pc3NoaW4uYWljaGkuanAiLCJvYnUuYWljaGkuanAiLCJvZ3VjaGkuYWljaGkuanAiLCJvaGFydS5haWNoaS5qcCIsIm9rYXpha2kuYWljaGkuanAi''@;'; put 'put ''LCJvd2FyaWFzYWhpLmFpY2hpLmpwIiwic2V0by5haWNoaS5qcCIsInNoaWthdHN1LmFpY2hpLmpwIiwic2hpbnNoaXJvLmFpY2hpLmpwIiwic2hpdGFyYS5haWNoaS5qcCIsInRhaGFyYS5haWNoaS5qcCIsInRha2FoYW1hLmFpY2hpLmpwIiwidG9iaXNoaW1hLmFpY2hpLmpwIiwidG9laS5h''@;'; put 'put ''aWNoaS5qcCIsInRvZ28uYWljaGkuanAiLCJ0b2thaS5haWNoaS5qcCIsInRva29uYW1lLmFpY2hpLmpwIiwidG95b2FrZS5haWNoaS5qcCIsInRveW9oYXNoaS5haWNoaS5qcCIsInRveW9rYXdhLmFpY2hpLmpwIiwidG95b25lLmFpY2hpLmpwIiwidG95b3RhLmFpY2hpLmpwIiwidHN1c2hp''@;'; put 'put ''bWEuYWljaGkuanAiLCJ5YXRvbWkuYWljaGkuanAiLCJha2l0YS5ha2l0YS5qcCIsImRhaXNlbi5ha2l0YS5qcCIsImZ1amlzYXRvLmFraXRhLmpwIiwiZ29qb21lLmFraXRhLmpwIiwiaGFjaGlyb2dhdGEuYWtpdGEuanAiLCJoYXBwb3UuYWtpdGEuanAiLCJoaWdhc2hpbmFydXNlLmFraXRh''@;'; put 'put ''LmpwIiwiaG9uam8uYWtpdGEuanAiLCJob25qeW8uYWtpdGEuanAiLCJpa2F3YS5ha2l0YS5qcCIsImthbWlrb2FuaS5ha2l0YS5qcCIsImthbWlva2EuYWtpdGEuanAiLCJrYXRhZ2FtaS5ha2l0YS5qcCIsImthenVuby5ha2l0YS5qcCIsImtpdGFha2l0YS5ha2l0YS5qcCIsImtvc2FrYS5h''@;'; put 'put ''a2l0YS5qcCIsImt5b3dhLmFraXRhLmpwIiwibWlzYXRvLmFraXRhLmpwIiwibWl0YW5lLmFraXRhLmpwIiwibW9yaXlvc2hpLmFraXRhLmpwIiwibmlrYWhvLmFraXRhLmpwIiwibm9zaGlyby5ha2l0YS5qcCIsIm9kYXRlLmFraXRhLmpwIiwib2dhLmFraXRhLmpwIiwib2dhdGEuYWtpdGEu''@;'; put 'put ''anAiLCJzZW1ib2t1LmFraXRhLmpwIiwieW9rb3RlLmFraXRhLmpwIiwieXVyaWhvbmpvLmFraXRhLmpwIiwiYW9tb3JpLmFvbW9yaS5qcCIsImdvbm9oZS5hb21vcmkuanAiLCJoYWNoaW5vaGUuYW9tb3JpLmpwIiwiaGFzaGlrYW1pLmFvbW9yaS5qcCIsImhpcmFuYWkuYW9tb3JpLmpwIiwi''@;'; put 'put ''aGlyb3Nha2kuYW9tb3JpLmpwIiwiaXRheWFuYWdpLmFvbW9yaS5qcCIsImt1cm9pc2hpLmFvbW9yaS5qcCIsIm1pc2F3YS5hb21vcmkuanAiLCJtdXRzdS5hb21vcmkuanAiLCJuYWthZG9tYXJpLmFvbW9yaS5qcCIsIm5vaGVqaS5hb21vcmkuanAiLCJvaXJhc2UuYW9tb3JpLmpwIiwib3dh''@;'; put 'put ''bmkuYW9tb3JpLmpwIiwicm9rdW5vaGUuYW9tb3JpLmpwIiwic2Fubm9oZS5hb21vcmkuanAiLCJzaGljaGlub2hlLmFvbW9yaS5qcCIsInNoaW5nby5hb21vcmkuanAiLCJ0YWtrby5hb21vcmkuanAiLCJ0b3dhZGEuYW9tb3JpLmpwIiwidHN1Z2FydS5hb21vcmkuanAiLCJ0c3VydXRhLmFv''@;'; put 'put ''bW9yaS5qcCIsImFiaWtvLmNoaWJhLmpwIiwiYXNhaGkuY2hpYmEuanAiLCJjaG9uYW4uY2hpYmEuanAiLCJjaG9zZWkuY2hpYmEuanAiLCJjaG9zaGkuY2hpYmEuanAiLCJjaHVvLmNoaWJhLmpwIiwiZnVuYWJhc2hpLmNoaWJhLmpwIiwiZnV0dHN1LmNoaWJhLmpwIiwiaGFuYW1pZ2F3YS5j''@;'; put 'put ''aGliYS5qcCIsImljaGloYXJhLmNoaWJhLmpwIiwiaWNoaWthd2EuY2hpYmEuanAiLCJpY2hpbm9taXlhLmNoaWJhLmpwIiwiaW56YWkuY2hpYmEuanAiLCJpc3VtaS5jaGliYS5qcCIsImthbWFnYXlhLmNoaWJhLmpwIiwia2Ftb2dhd2EuY2hpYmEuanAiLCJrYXNoaXdhLmNoaWJhLmpwIiwi''@;'; put 'put ''a2F0b3JpLmNoaWJhLmpwIiwia2F0c3V1cmEuY2hpYmEuanAiLCJraW1pdHN1LmNoaWJhLmpwIiwia2lzYXJhenUuY2hpYmEuanAiLCJrb3pha2kuY2hpYmEuanAiLCJrdWp1a3VyaS5jaGliYS5qcCIsImt5b25hbi5jaGliYS5qcCIsIm1hdHN1ZG8uY2hpYmEuanAiLCJtaWRvcmkuY2hpYmEu''@;'; put 'put ''anAiLCJtaWhhbWEuY2hpYmEuanAiLCJtaW5hbWlib3NvLmNoaWJhLmpwIiwibW9iYXJhLmNoaWJhLmpwIiwibXV0c3V6YXdhLmNoaWJhLmpwIiwibmFnYXJhLmNoaWJhLmpwIiwibmFnYXJleWFtYS5jaGliYS5qcCIsIm5hcmFzaGluby5jaGliYS5qcCIsIm5hcml0YS5jaGliYS5qcCIsIm5v''@;'; put 'put ''ZGEuY2hpYmEuanAiLCJvYW1pc2hpcmFzYXRvLmNoaWJhLmpwIiwib21pZ2F3YS5jaGliYS5qcCIsIm9uanVrdS5jaGliYS5qcCIsIm90YWtpLmNoaWJhLmpwIiwic2FrYWUuY2hpYmEuanAiLCJzYWt1cmEuY2hpYmEuanAiLCJzaGltb2Z1c2EuY2hpYmEuanAiLCJzaGlyYWtvLmNoaWJhLmpw''@;'; put 'put ''Iiwic2hpcm9pLmNoaWJhLmpwIiwic2hpc3VpLmNoaWJhLmpwIiwic29kZWdhdXJhLmNoaWJhLmpwIiwic29zYS5jaGliYS5qcCIsInRha28uY2hpYmEuanAiLCJ0YXRleWFtYS5jaGliYS5qcCIsInRvZ2FuZS5jaGliYS5qcCIsInRvaG5vc2hvLmNoaWJhLmpwIiwidG9taXNhdG8uY2hpYmEu''@;'; put 'put ''anAiLCJ1cmF5YXN1LmNoaWJhLmpwIiwieWFjaGltYXRhLmNoaWJhLmpwIiwieWFjaGl5by5jaGliYS5qcCIsInlva2FpY2hpYmEuY2hpYmEuanAiLCJ5b2tvc2hpYmFoaWthcmkuY2hpYmEuanAiLCJ5b3RzdWthaWRvLmNoaWJhLmpwIiwiYWluYW4uZWhpbWUuanAiLCJob25haS5laGltZS5q''@;'; put 'put ''cCIsImlrYXRhLmVoaW1lLmpwIiwiaW1hYmFyaS5laGltZS5qcCIsIml5by5laGltZS5qcCIsImthbWlqaW1hLmVoaW1lLmpwIiwia2lob2t1LmVoaW1lLmpwIiwia3VtYWtvZ2VuLmVoaW1lLmpwIiwibWFzYWtpLmVoaW1lLmpwIiwibWF0c3Vuby5laGltZS5qcCIsIm1hdHN1eWFtYS5laGlt''@;'; put 'put ''ZS5qcCIsIm5hbWlrYXRhLmVoaW1lLmpwIiwibmlpaGFtYS5laGltZS5qcCIsIm96dS5laGltZS5qcCIsInNhaWpvLmVoaW1lLmpwIiwic2VpeW8uZWhpbWUuanAiLCJzaGlrb2t1Y2h1by5laGltZS5qcCIsInRvYmUuZWhpbWUuanAiLCJ0b29uLmVoaW1lLmpwIiwidWNoaWtvLmVoaW1lLmpw''@;'; put 'put ''IiwidXdhamltYS5laGltZS5qcCIsInlhd2F0YWhhbWEuZWhpbWUuanAiLCJlY2hpemVuLmZ1a3VpLmpwIiwiZWloZWlqaS5mdWt1aS5qcCIsImZ1a3VpLmZ1a3VpLmpwIiwiaWtlZGEuZnVrdWkuanAiLCJrYXRzdXlhbWEuZnVrdWkuanAiLCJtaWhhbWEuZnVrdWkuanAiLCJtaW5hbWllY2hp''@;'; put 'put ''emVuLmZ1a3VpLmpwIiwib2JhbWEuZnVrdWkuanAiLCJvaGkuZnVrdWkuanAiLCJvbm8uZnVrdWkuanAiLCJzYWJhZS5mdWt1aS5qcCIsInNha2FpLmZ1a3VpLmpwIiwidGFrYWhhbWEuZnVrdWkuanAiLCJ0c3VydWdhLmZ1a3VpLmpwIiwid2FrYXNhLmZ1a3VpLmpwIiwiYXNoaXlhLmZ1a3Vv''@;'; put 'put ''a2EuanAiLCJidXplbi5mdWt1b2thLmpwIiwiY2hpa3Vnby5mdWt1b2thLmpwIiwiY2hpa3Voby5mdWt1b2thLmpwIiwiY2hpa3Vqby5mdWt1b2thLmpwIiwiY2hpa3VzaGluby5mdWt1b2thLmpwIiwiY2hpa3V6ZW4uZnVrdW9rYS5qcCIsImNodW8uZnVrdW9rYS5qcCIsImRhemFpZnUuZnVr''@;'; put 'put ''dW9rYS5qcCIsImZ1a3VjaGkuZnVrdW9rYS5qcCIsImhha2F0YS5mdWt1b2thLmpwIiwiaGlnYXNoaS5mdWt1b2thLmpwIiwiaGlyb2thd2EuZnVrdW9rYS5qcCIsImhpc2F5YW1hLmZ1a3Vva2EuanAiLCJpaXp1a2EuZnVrdW9rYS5qcCIsImluYXRzdWtpLmZ1a3Vva2EuanAiLCJrYWhvLmZ1''@;'; put 'put ''a3Vva2EuanAiLCJrYXN1Z2EuZnVrdW9rYS5qcCIsImthc3V5YS5mdWt1b2thLmpwIiwia2F3YXJhLmZ1a3Vva2EuanAiLCJrZWlzZW4uZnVrdW9rYS5qcCIsImtvZ2EuZnVrdW9rYS5qcCIsImt1cmF0ZS5mdWt1b2thLmpwIiwia3Vyb2dpLmZ1a3Vva2EuanAiLCJrdXJ1bWUuZnVrdW9rYS5q''@;'; put 'put ''cCIsIm1pbmFtaS5mdWt1b2thLmpwIiwibWl5YWtvLmZ1a3Vva2EuanAiLCJtaXlhbWEuZnVrdW9rYS5qcCIsIm1peWF3YWthLmZ1a3Vva2EuanAiLCJtaXp1bWFraS5mdWt1b2thLmpwIiwibXVuYWthdGEuZnVrdW9rYS5qcCIsIm5ha2FnYXdhLmZ1a3Vva2EuanAiLCJuYWthbWEuZnVrdW9r''@;'; put 'put ''YS5qcCIsIm5pc2hpLmZ1a3Vva2EuanAiLCJub2dhdGEuZnVrdW9rYS5qcCIsIm9nb3JpLmZ1a3Vva2EuanAiLCJva2FnYWtpLmZ1a3Vva2EuanAiLCJva2F3YS5mdWt1b2thLmpwIiwib2tpLmZ1a3Vva2EuanAiLCJvbXV0YS5mdWt1b2thLmpwIiwib25nYS5mdWt1b2thLmpwIiwib25vam8u''@;'; put 'put ''ZnVrdW9rYS5qcCIsIm90by5mdWt1b2thLmpwIiwic2FpZ2F3YS5mdWt1b2thLmpwIiwic2FzYWd1cmkuZnVrdW9rYS5qcCIsInNoaW5ndS5mdWt1b2thLmpwIiwic2hpbnlvc2hpdG9taS5mdWt1b2thLmpwIiwic2hvbmFpLmZ1a3Vva2EuanAiLCJzb2VkYS5mdWt1b2thLmpwIiwic3VlLmZ1''@;'; put 'put ''a3Vva2EuanAiLCJ0YWNoaWFyYWkuZnVrdW9rYS5qcCIsInRhZ2F3YS5mdWt1b2thLmpwIiwidGFrYXRhLmZ1a3Vva2EuanAiLCJ0b2hvLmZ1a3Vva2EuanAiLCJ0b3lvdHN1LmZ1a3Vva2EuanAiLCJ0c3Vpa2kuZnVrdW9rYS5qcCIsInVraWhhLmZ1a3Vva2EuanAiLCJ1bWkuZnVrdW9rYS5q''@;'; put 'put ''cCIsInVzdWkuZnVrdW9rYS5qcCIsInlhbWFkYS5mdWt1b2thLmpwIiwieWFtZS5mdWt1b2thLmpwIiwieWFuYWdhd2EuZnVrdW9rYS5qcCIsInl1a3VoYXNoaS5mdWt1b2thLmpwIiwiYWl6dWJhbmdlLmZ1a3VzaGltYS5qcCIsImFpenVtaXNhdG8uZnVrdXNoaW1hLmpwIiwiYWl6dXdha2Ft''@;'; put 'put ''YXRzdS5mdWt1c2hpbWEuanAiLCJhc2FrYXdhLmZ1a3VzaGltYS5qcCIsImJhbmRhaS5mdWt1c2hpbWEuanAiLCJkYXRlLmZ1a3VzaGltYS5qcCIsImZ1a3VzaGltYS5mdWt1c2hpbWEuanAiLCJmdXJ1ZG9uby5mdWt1c2hpbWEuanAiLCJmdXRhYmEuZnVrdXNoaW1hLmpwIiwiaGFuYXdhLmZ1''@;'; put 'put ''a3VzaGltYS5qcCIsImhpZ2FzaGkuZnVrdXNoaW1hLmpwIiwiaGlyYXRhLmZ1a3VzaGltYS5qcCIsImhpcm9uby5mdWt1c2hpbWEuanAiLCJpaXRhdGUuZnVrdXNoaW1hLmpwIiwiaW5hd2FzaGlyby5mdWt1c2hpbWEuanAiLCJpc2hpa2F3YS5mdWt1c2hpbWEuanAiLCJpd2FraS5mdWt1c2hp''@;'; put 'put ''bWEuanAiLCJpenVtaXpha2kuZnVrdXNoaW1hLmpwIiwia2FnYW1paXNoaS5mdWt1c2hpbWEuanAiLCJrYW5leWFtYS5mdWt1c2hpbWEuanAiLCJrYXdhbWF0YS5mdWt1c2hpbWEuanAiLCJraXRha2F0YS5mdWt1c2hpbWEuanAiLCJraXRhc2hpb2JhcmEuZnVrdXNoaW1hLmpwIiwia29vcmku''@;'; put 'put ''ZnVrdXNoaW1hLmpwIiwia29yaXlhbWEuZnVrdXNoaW1hLmpwIiwia3VuaW1pLmZ1a3VzaGltYS5qcCIsIm1paGFydS5mdWt1c2hpbWEuanAiLCJtaXNoaW1hLmZ1a3VzaGltYS5qcCIsIm5hbWllLmZ1a3VzaGltYS5qcCIsIm5hbmdvLmZ1a3VzaGltYS5qcCIsIm5pc2hpYWl6dS5mdWt1c2hp''@;'; put 'put ''bWEuanAiLCJuaXNoaWdvLmZ1a3VzaGltYS5qcCIsIm9rdW1hLmZ1a3VzaGltYS5qcCIsIm9tb3RlZ28uZnVrdXNoaW1hLmpwIiwib25vLmZ1a3VzaGltYS5qcCIsIm90YW1hLmZ1a3VzaGltYS5qcCIsInNhbWVnYXdhLmZ1a3VzaGltYS5qcCIsInNoaW1vZ28uZnVrdXNoaW1hLmpwIiwic2hp''@;'; put 'put ''cmFrYXdhLmZ1a3VzaGltYS5qcCIsInNob3dhLmZ1a3VzaGltYS5qcCIsInNvbWEuZnVrdXNoaW1hLmpwIiwic3VrYWdhd2EuZnVrdXNoaW1hLmpwIiwidGFpc2hpbi5mdWt1c2hpbWEuanAiLCJ0YW1ha2F3YS5mdWt1c2hpbWEuanAiLCJ0YW5hZ3VyYS5mdWt1c2hpbWEuanAiLCJ0ZW5laS5m''@;'; put 'put ''dWt1c2hpbWEuanAiLCJ5YWJ1a2kuZnVrdXNoaW1hLmpwIiwieWFtYXRvLmZ1a3VzaGltYS5qcCIsInlhbWF0c3VyaS5mdWt1c2hpbWEuanAiLCJ5YW5haXp1LmZ1a3VzaGltYS5qcCIsInl1Z2F3YS5mdWt1c2hpbWEuanAiLCJhbnBhY2hpLmdpZnUuanAiLCJlbmEuZ2lmdS5qcCIsImdpZnUu''@;'; put 'put ''Z2lmdS5qcCIsImdpbmFuLmdpZnUuanAiLCJnb2RvLmdpZnUuanAiLCJndWpvLmdpZnUuanAiLCJoYXNoaW1hLmdpZnUuanAiLCJoaWNoaXNvLmdpZnUuanAiLCJoaWRhLmdpZnUuanAiLCJoaWdhc2hpc2hpcmFrYXdhLmdpZnUuanAiLCJpYmlnYXdhLmdpZnUuanAiLCJpa2VkYS5naWZ1Lmpw''@;'; put 'put ''Iiwia2FrYW1pZ2FoYXJhLmdpZnUuanAiLCJrYW5pLmdpZnUuanAiLCJrYXNhaGFyYS5naWZ1LmpwIiwia2FzYW1hdHN1LmdpZnUuanAiLCJrYXdhdWUuZ2lmdS5qcCIsImtpdGFnYXRhLmdpZnUuanAiLCJtaW5vLmdpZnUuanAiLCJtaW5va2Ftby5naWZ1LmpwIiwibWl0YWtlLmdpZnUuanAi''@;'; put 'put ''LCJtaXp1bmFtaS5naWZ1LmpwIiwibW90b3N1LmdpZnUuanAiLCJuYWthdHN1Z2F3YS5naWZ1LmpwIiwib2dha2kuZ2lmdS5qcCIsInNha2Fob2dpLmdpZnUuanAiLCJzZWtpLmdpZnUuanAiLCJzZWtpZ2FoYXJhLmdpZnUuanAiLCJzaGlyYWthd2EuZ2lmdS5qcCIsInRhamltaS5naWZ1Lmpw''@;'; put 'put ''IiwidGFrYXlhbWEuZ2lmdS5qcCIsInRhcnVpLmdpZnUuanAiLCJ0b2tpLmdpZnUuanAiLCJ0b21pa2EuZ2lmdS5qcCIsIndhbm91Y2hpLmdpZnUuanAiLCJ5YW1hZ2F0YS5naWZ1LmpwIiwieWFvdHN1LmdpZnUuanAiLCJ5b3JvLmdpZnUuanAiLCJhbm5ha2EuZ3VubWEuanAiLCJjaGl5b2Rh''@;'; put 'put ''Lmd1bm1hLmpwIiwiZnVqaW9rYS5ndW5tYS5qcCIsImhpZ2FzaGlhZ2F0c3VtYS5ndW5tYS5qcCIsImlzZXNha2kuZ3VubWEuanAiLCJpdGFrdXJhLmd1bm1hLmpwIiwia2FubmEuZ3VubWEuanAiLCJrYW5yYS5ndW5tYS5qcCIsImthdGFzaGluYS5ndW5tYS5qcCIsImthd2FiYS5ndW5tYS5q''@;'; put 'put ''cCIsImtpcnl1Lmd1bm1hLmpwIiwia3VzYXRzdS5ndW5tYS5qcCIsIm1hZWJhc2hpLmd1bm1hLmpwIiwibWVpd2EuZ3VubWEuanAiLCJtaWRvcmkuZ3VubWEuanAiLCJtaW5ha2FtaS5ndW5tYS5qcCIsIm5hZ2Fub2hhcmEuZ3VubWEuanAiLCJuYWthbm9qby5ndW5tYS5qcCIsIm5hbm1va3Uu''@;'; put 'put ''Z3VubWEuanAiLCJudW1hdGEuZ3VubWEuanAiLCJvaXp1bWkuZ3VubWEuanAiLCJvcmEuZ3VubWEuanAiLCJvdGEuZ3VubWEuanAiLCJzaGlidWthd2EuZ3VubWEuanAiLCJzaGltb25pdGEuZ3VubWEuanAiLCJzaGludG8uZ3VubWEuanAiLCJzaG93YS5ndW5tYS5qcCIsInRha2FzYWtpLmd1''@;'; put 'put ''bm1hLmpwIiwidGFrYXlhbWEuZ3VubWEuanAiLCJ0YW1hbXVyYS5ndW5tYS5qcCIsInRhdGViYXlhc2hpLmd1bm1hLmpwIiwidG9taW9rYS5ndW5tYS5qcCIsInRzdWtpeW9uby5ndW5tYS5qcCIsInRzdW1hZ29pLmd1bm1hLmpwIiwidWVuby5ndW5tYS5qcCIsInlvc2hpb2thLmd1bm1hLmpw''@;'; put 'put ''IiwiYXNhbWluYW1pLmhpcm9zaGltYS5qcCIsImRhaXdhLmhpcm9zaGltYS5qcCIsImV0YWppbWEuaGlyb3NoaW1hLmpwIiwiZnVjaHUuaGlyb3NoaW1hLmpwIiwiZnVrdXlhbWEuaGlyb3NoaW1hLmpwIiwiaGF0c3VrYWljaGkuaGlyb3NoaW1hLmpwIiwiaGlnYXNoaWhpcm9zaGltYS5oaXJv''@;'; put 'put ''c2hpbWEuanAiLCJob25nby5oaXJvc2hpbWEuanAiLCJqaW5zZWtpa29nZW4uaGlyb3NoaW1hLmpwIiwia2FpdGEuaGlyb3NoaW1hLmpwIiwia3VpLmhpcm9zaGltYS5qcCIsImt1bWFuby5oaXJvc2hpbWEuanAiLCJrdXJlLmhpcm9zaGltYS5qcCIsIm1paGFyYS5oaXJvc2hpbWEuanAiLCJt''@;'; put 'put ''aXlvc2hpLmhpcm9zaGltYS5qcCIsIm5ha2EuaGlyb3NoaW1hLmpwIiwib25vbWljaGkuaGlyb3NoaW1hLmpwIiwib3Nha2lrYW1pamltYS5oaXJvc2hpbWEuanAiLCJvdGFrZS5oaXJvc2hpbWEuanAiLCJzYWthLmhpcm9zaGltYS5qcCIsInNlcmEuaGlyb3NoaW1hLmpwIiwic2VyYW5pc2hp''@;'; put 'put ''Lmhpcm9zaGltYS5qcCIsInNoaW5pY2hpLmhpcm9zaGltYS5qcCIsInNob2JhcmEuaGlyb3NoaW1hLmpwIiwidGFrZWhhcmEuaGlyb3NoaW1hLmpwIiwiYWJhc2hpcmkuaG9ra2FpZG8uanAiLCJhYmlyYS5ob2trYWlkby5qcCIsImFpYmV0c3UuaG9ra2FpZG8uanAiLCJha2FiaXJhLmhva2th''@;'; put 'put ''aWRvLmpwIiwiYWtrZXNoaS5ob2trYWlkby5qcCIsImFzYWhpa2F3YS5ob2trYWlkby5qcCIsImFzaGliZXRzdS5ob2trYWlkby5qcCIsImFzaG9yby5ob2trYWlkby5qcCIsImFzc2FidS5ob2trYWlkby5qcCIsImF0c3VtYS5ob2trYWlkby5qcCIsImJpYmFpLmhva2thaWRvLmpwIiwiYmll''@;'; put 'put ''aS5ob2trYWlkby5qcCIsImJpZnVrYS5ob2trYWlkby5qcCIsImJpaG9yby5ob2trYWlkby5qcCIsImJpcmF0b3JpLmhva2thaWRvLmpwIiwiY2hpcHB1YmV0c3UuaG9ra2FpZG8uanAiLCJjaGl0b3NlLmhva2thaWRvLmpwIiwiZGF0ZS5ob2trYWlkby5qcCIsImViZXRzdS5ob2trYWlkby5q''@;'; put 'put ''cCIsImVtYmV0c3UuaG9ra2FpZG8uanAiLCJlbml3YS5ob2trYWlkby5qcCIsImVyaW1vLmhva2thaWRvLmpwIiwiZXNhbi5ob2trYWlkby5qcCIsImVzYXNoaS5ob2trYWlkby5qcCIsImZ1a2FnYXdhLmhva2thaWRvLmpwIiwiZnVrdXNoaW1hLmhva2thaWRvLmpwIiwiZnVyYW5vLmhva2th''@;'; put 'put ''aWRvLmpwIiwiZnVydWJpcmEuaG9ra2FpZG8uanAiLCJoYWJvcm8uaG9ra2FpZG8uanAiLCJoYWtvZGF0ZS5ob2trYWlkby5qcCIsImhhbWF0b25iZXRzdS5ob2trYWlkby5qcCIsImhpZGFrYS5ob2trYWlkby5qcCIsImhpZ2FzaGlrYWd1cmEuaG9ra2FpZG8uanAiLCJoaWdhc2hpa2F3YS5o''@;'; put 'put ''b2trYWlkby5qcCIsImhpcm9vLmhva2thaWRvLmpwIiwiaG9rdXJ5dS5ob2trYWlkby5qcCIsImhva3V0by5ob2trYWlkby5qcCIsImhvbmJldHN1Lmhva2thaWRvLmpwIiwiaG9yb2thbmFpLmhva2thaWRvLmpwIiwiaG9yb25vYmUuaG9ra2FpZG8uanAiLCJpa2VkYS5ob2trYWlkby5qcCIs''@;'; put 'put ''ImltYWthbmUuaG9ra2FpZG8uanAiLCJpc2hpa2FyaS5ob2trYWlkby5qcCIsIml3YW1pemF3YS5ob2trYWlkby5qcCIsIml3YW5haS5ob2trYWlkby5qcCIsImthbWlmdXJhbm8uaG9ra2FpZG8uanAiLCJrYW1pa2F3YS5ob2trYWlkby5qcCIsImthbWlzaGlob3JvLmhva2thaWRvLmpwIiwi''@;'; put 'put ''a2FtaXN1bmFnYXdhLmhva2thaWRvLmpwIiwia2Ftb2VuYWkuaG9ra2FpZG8uanAiLCJrYXlhYmUuaG9ra2FpZG8uanAiLCJrZW1idWNoaS5ob2trYWlkby5qcCIsImtpa29uYWkuaG9ra2FpZG8uanAiLCJraW1vYmV0c3UuaG9ra2FpZG8uanAiLCJraXRhaGlyb3NoaW1hLmhva2thaWRvLmpw''@;'; put 'put ''Iiwia2l0YW1pLmhva2thaWRvLmpwIiwia2l5b3NhdG8uaG9ra2FpZG8uanAiLCJrb3NoaW1penUuaG9ra2FpZG8uanAiLCJrdW5uZXBwdS5ob2trYWlkby5qcCIsImt1cml5YW1hLmhva2thaWRvLmpwIiwia3Vyb21hdHN1bmFpLmhva2thaWRvLmpwIiwia3VzaGlyby5ob2trYWlkby5qcCIs''@;'; put 'put ''Imt1dGNoYW4uaG9ra2FpZG8uanAiLCJreW93YS5ob2trYWlkby5qcCIsIm1hc2hpa2UuaG9ra2FpZG8uanAiLCJtYXRzdW1hZS5ob2trYWlkby5qcCIsIm1pa2FzYS5ob2trYWlkby5qcCIsIm1pbmFtaWZ1cmFuby5ob2trYWlkby5qcCIsIm1vbWJldHN1Lmhva2thaWRvLmpwIiwibW9zZXVz''@;'; put 'put ''aGkuaG9ra2FpZG8uanAiLCJtdWthd2EuaG9ra2FpZG8uanAiLCJtdXJvcmFuLmhva2thaWRvLmpwIiwibmFpZS5ob2trYWlkby5qcCIsIm5ha2FnYXdhLmhva2thaWRvLmpwIiwibmFrYXNhdHN1bmFpLmhva2thaWRvLmpwIiwibmFrYXRvbWJldHN1Lmhva2thaWRvLmpwIiwibmFuYWUuaG9r''@;'; put 'put ''a2FpZG8uanAiLCJuYW5wb3JvLmhva2thaWRvLmpwIiwibmF5b3JvLmhva2thaWRvLmpwIiwibmVtdXJvLmhva2thaWRvLmpwIiwibmlpa2FwcHUuaG9ra2FpZG8uanAiLCJuaWtpLmhva2thaWRvLmpwIiwibmlzaGlva29wcGUuaG9ra2FpZG8uanAiLCJub2JvcmliZXRzdS5ob2trYWlkby5q''@;'; put 'put ''cCIsIm51bWF0YS5ob2trYWlkby5qcCIsIm9iaWhpcm8uaG9ra2FpZG8uanAiLCJvYmlyYS5ob2trYWlkby5qcCIsIm9rZXRvLmhva2thaWRvLmpwIiwib2tvcHBlLmhva2thaWRvLmpwIiwib3RhcnUuaG9ra2FpZG8uanAiLCJvdG9iZS5ob2trYWlkby5qcCIsIm90b2Z1a2UuaG9ra2FpZG8u''@;'; put 'put ''anAiLCJvdG9pbmVwcHUuaG9ra2FpZG8uanAiLCJvdW11Lmhva2thaWRvLmpwIiwib3pvcmEuaG9ra2FpZG8uanAiLCJwaXBwdS5ob2trYWlkby5qcCIsInJhbmtvc2hpLmhva2thaWRvLmpwIiwicmVidW4uaG9ra2FpZG8uanAiLCJyaWt1YmV0c3UuaG9ra2FpZG8uanAiLCJyaXNoaXJpLmhv''@;'; put 'put ''a2thaWRvLmpwIiwicmlzaGlyaWZ1amkuaG9ra2FpZG8uanAiLCJzYXJvbWEuaG9ra2FpZG8uanAiLCJzYXJ1ZnV0c3UuaG9ra2FpZG8uanAiLCJzaGFrb3Rhbi5ob2trYWlkby5qcCIsInNoYXJpLmhva2thaWRvLmpwIiwic2hpYmVjaGEuaG9ra2FpZG8uanAiLCJzaGliZXRzdS5ob2trYWlk''@;'; put 'put ''by5qcCIsInNoaWthYmUuaG9ra2FpZG8uanAiLCJzaGlrYW9pLmhva2thaWRvLmpwIiwic2hpbWFtYWtpLmhva2thaWRvLmpwIiwic2hpbWl6dS5ob2trYWlkby5qcCIsInNoaW1va2F3YS5ob2trYWlkby5qcCIsInNoaW5zaGlub3RzdS5ob2trYWlkby5qcCIsInNoaW50b2t1Lmhva2thaWRv''@;'; put 'put ''LmpwIiwic2hpcmFudWthLmhva2thaWRvLmpwIiwic2hpcmFvaS5ob2trYWlkby5qcCIsInNoaXJpdWNoaS5ob2trYWlkby5qcCIsInNvYmV0c3UuaG9ra2FpZG8uanAiLCJzdW5hZ2F3YS5ob2trYWlkby5qcCIsInRhaWtpLmhva2thaWRvLmpwIiwidGFrYXN1Lmhva2thaWRvLmpwIiwidGFr''@;'; put 'put ''aWthd2EuaG9ra2FpZG8uanAiLCJ0YWtpbm91ZS5ob2trYWlkby5qcCIsInRlc2hpa2FnYS5ob2trYWlkby5qcCIsInRvYmV0c3UuaG9ra2FpZG8uanAiLCJ0b2htYS5ob2trYWlkby5qcCIsInRvbWFrb21haS5ob2trYWlkby5qcCIsInRvbWFyaS5ob2trYWlkby5qcCIsInRveWEuaG9ra2Fp''@;'; put 'put ''ZG8uanAiLCJ0b3lha28uaG9ra2FpZG8uanAiLCJ0b3lvdG9taS5ob2trYWlkby5qcCIsInRveW91cmEuaG9ra2FpZG8uanAiLCJ0c3ViZXRzdS5ob2trYWlkby5qcCIsInRzdWtpZ2F0YS5ob2trYWlkby5qcCIsInVyYWthd2EuaG9ra2FpZG8uanAiLCJ1cmF1c3UuaG9ra2FpZG8uanAiLCJ1''@;'; put 'put ''cnl1Lmhva2thaWRvLmpwIiwidXRhc2hpbmFpLmhva2thaWRvLmpwIiwid2Fra2FuYWkuaG9ra2FpZG8uanAiLCJ3YXNzYW11Lmhva2thaWRvLmpwIiwieWFrdW1vLmhva2thaWRvLmpwIiwieW9pY2hpLmhva2thaWRvLmpwIiwiYWlvaS5oeW9nby5qcCIsImFrYXNoaS5oeW9nby5qcCIsImFr''@;'; put 'put ''by5oeW9nby5qcCIsImFtYWdhc2FraS5oeW9nby5qcCIsImFvZ2FraS5oeW9nby5qcCIsImFzYWdvLmh5b2dvLmpwIiwiYXNoaXlhLmh5b2dvLmpwIiwiYXdhamkuaHlvZ28uanAiLCJmdWt1c2FraS5oeW9nby5qcCIsImdvc2hpa2kuaHlvZ28uanAiLCJoYXJpbWEuaHlvZ28uanAiLCJoaW1l''@;'; put 'put ''amkuaHlvZ28uanAiLCJpY2hpa2F3YS5oeW9nby5qcCIsImluYWdhd2EuaHlvZ28uanAiLCJpdGFtaS5oeW9nby5qcCIsImtha29nYXdhLmh5b2dvLmpwIiwia2FtaWdvcmkuaHlvZ28uanAiLCJrYW1pa2F3YS5oeW9nby5qcCIsImthc2FpLmh5b2dvLmpwIiwia2FzdWdhLmh5b2dvLmpwIiwi''@;'; put 'put ''a2F3YW5pc2hpLmh5b2dvLmpwIiwibWlraS5oeW9nby5qcCIsIm1pbmFtaWF3YWppLmh5b2dvLmpwIiwibmlzaGlub21peWEuaHlvZ28uanAiLCJuaXNoaXdha2kuaHlvZ28uanAiLCJvbm8uaHlvZ28uanAiLCJzYW5kYS5oeW9nby5qcCIsInNhbm5hbi5oeW9nby5qcCIsInNhc2F5YW1hLmh5''@;'; put 'put ''b2dvLmpwIiwic2F5by5oeW9nby5qcCIsInNoaW5ndS5oeW9nby5qcCIsInNoaW5vbnNlbi5oeW9nby5qcCIsInNoaXNvLmh5b2dvLmpwIiwic3Vtb3RvLmh5b2dvLmpwIiwidGFpc2hpLmh5b2dvLmpwIiwidGFrYS5oeW9nby5qcCIsInRha2FyYXp1a2EuaHlvZ28uanAiLCJ0YWthc2Fnby5o''@;'; put 'put ''eW9nby5qcCIsInRha2luby5oeW9nby5qcCIsInRhbWJhLmh5b2dvLmpwIiwidGF0c3Vuby5oeW9nby5qcCIsInRveW9va2EuaHlvZ28uanAiLCJ5YWJ1Lmh5b2dvLmpwIiwieWFzaGlyby5oeW9nby5qcCIsInlva2EuaHlvZ28uanAiLCJ5b2thd2EuaHlvZ28uanAiLCJhbWkuaWJhcmFraS5q''@;'; put 'put ''cCIsImFzYWhpLmliYXJha2kuanAiLCJiYW5kby5pYmFyYWtpLmpwIiwiY2hpa3VzZWkuaWJhcmFraS5qcCIsImRhaWdvLmliYXJha2kuanAiLCJmdWppc2hpcm8uaWJhcmFraS5qcCIsImhpdGFjaGkuaWJhcmFraS5qcCIsImhpdGFjaGluYWthLmliYXJha2kuanAiLCJoaXRhY2hpb21peWEu''@;'; put 'put ''aWJhcmFraS5qcCIsImhpdGFjaGlvdGEuaWJhcmFraS5qcCIsImliYXJha2kuaWJhcmFraS5qcCIsImluYS5pYmFyYWtpLmpwIiwiaW5hc2hpa2kuaWJhcmFraS5qcCIsIml0YWtvLmliYXJha2kuanAiLCJpd2FtYS5pYmFyYWtpLmpwIiwiam9zby5pYmFyYWtpLmpwIiwia2FtaXN1LmliYXJh''@;'; put 'put ''a2kuanAiLCJrYXNhbWEuaWJhcmFraS5qcCIsImthc2hpbWEuaWJhcmFraS5qcCIsImthc3VtaWdhdXJhLmliYXJha2kuanAiLCJrb2dhLmliYXJha2kuanAiLCJtaWhvLmliYXJha2kuanAiLCJtaXRvLmliYXJha2kuanAiLCJtb3JpeWEuaWJhcmFraS5qcCIsIm5ha2EuaWJhcmFraS5qcCIs''@;'; put 'put ''Im5hbWVnYXRhLmliYXJha2kuanAiLCJvYXJhaS5pYmFyYWtpLmpwIiwib2dhd2EuaWJhcmFraS5qcCIsIm9taXRhbWEuaWJhcmFraS5qcCIsInJ5dWdhc2FraS5pYmFyYWtpLmpwIiwic2FrYWkuaWJhcmFraS5qcCIsInNha3VyYWdhd2EuaWJhcmFraS5qcCIsInNoaW1vZGF0ZS5pYmFyYWtp''@;'; put 'put ''LmpwIiwic2hpbW90c3VtYS5pYmFyYWtpLmpwIiwic2hpcm9zYXRvLmliYXJha2kuanAiLCJzb3dhLmliYXJha2kuanAiLCJzdWlmdS5pYmFyYWtpLmpwIiwidGFrYWhhZ2kuaWJhcmFraS5qcCIsInRhbWF0c3VrdXJpLmliYXJha2kuanAiLCJ0b2thaS5pYmFyYWtpLmpwIiwidG9tb2JlLmli''@;'; put 'put ''YXJha2kuanAiLCJ0b25lLmliYXJha2kuanAiLCJ0b3JpZGUuaWJhcmFraS5qcCIsInRzdWNoaXVyYS5pYmFyYWtpLmpwIiwidHN1a3ViYS5pYmFyYWtpLmpwIiwidWNoaWhhcmEuaWJhcmFraS5qcCIsInVzaGlrdS5pYmFyYWtpLmpwIiwieWFjaGl5by5pYmFyYWtpLmpwIiwieWFtYWdhdGEu''@;'; put 'put ''aWJhcmFraS5qcCIsInlhd2FyYS5pYmFyYWtpLmpwIiwieXVraS5pYmFyYWtpLmpwIiwiYW5hbWl6dS5pc2hpa2F3YS5qcCIsImhha3VpLmlzaGlrYXdhLmpwIiwiaGFrdXNhbi5pc2hpa2F3YS5qcCIsImthZ2EuaXNoaWthd2EuanAiLCJrYWhva3UuaXNoaWthd2EuanAiLCJrYW5hemF3YS5p''@;'; put 'put ''c2hpa2F3YS5qcCIsImthd2FraXRhLmlzaGlrYXdhLmpwIiwia29tYXRzdS5pc2hpa2F3YS5qcCIsIm5ha2Fub3RvLmlzaGlrYXdhLmpwIiwibmFuYW8uaXNoaWthd2EuanAiLCJub21pLmlzaGlrYXdhLmpwIiwibm9ub2ljaGkuaXNoaWthd2EuanAiLCJub3RvLmlzaGlrYXdhLmpwIiwic2hp''@;'; put 'put ''a2EuaXNoaWthd2EuanAiLCJzdXp1LmlzaGlrYXdhLmpwIiwidHN1YmF0YS5pc2hpa2F3YS5qcCIsInRzdXJ1Z2kuaXNoaWthd2EuanAiLCJ1Y2hpbmFkYS5pc2hpa2F3YS5qcCIsIndhamltYS5pc2hpa2F3YS5qcCIsImZ1ZGFpLml3YXRlLmpwIiwiZnVqaXNhd2EuaXdhdGUuanAiLCJoYW5h''@;'; put 'put ''bWFraS5pd2F0ZS5qcCIsImhpcmFpenVtaS5pd2F0ZS5qcCIsImhpcm9uby5pd2F0ZS5qcCIsImljaGlub2hlLml3YXRlLmpwIiwiaWNoaW5vc2VraS5pd2F0ZS5qcCIsIml3YWl6dW1pLml3YXRlLmpwIiwiaXdhdGUuaXdhdGUuanAiLCJqb2JvamkuaXdhdGUuanAiLCJrYW1haXNoaS5pd2F0''@;'; put 'put ''ZS5qcCIsImthbmVnYXNha2kuaXdhdGUuanAiLCJrYXJ1bWFpLml3YXRlLmpwIiwia2F3YWkuaXdhdGUuanAiLCJraXRha2FtaS5pd2F0ZS5qcCIsImt1amkuaXdhdGUuanAiLCJrdW5vaGUuaXdhdGUuanAiLCJrdXp1bWFraS5pd2F0ZS5qcCIsIm1peWFrby5pd2F0ZS5qcCIsIm1penVzYXdh''@;'; put 'put ''Lml3YXRlLmpwIiwibW9yaW9rYS5pd2F0ZS5qcCIsIm5pbm9oZS5pd2F0ZS5qcCIsIm5vZGEuaXdhdGUuanAiLCJvZnVuYXRvLml3YXRlLmpwIiwib3NodS5pd2F0ZS5qcCIsIm90c3VjaGkuaXdhdGUuanAiLCJyaWt1emVudGFrYXRhLml3YXRlLmpwIiwic2hpd2EuaXdhdGUuanAiLCJzaGl6''@;'; put 'put ''dWt1aXNoaS5pd2F0ZS5qcCIsInN1bWl0YS5pd2F0ZS5qcCIsInRhbm9oYXRhLml3YXRlLmpwIiwidG9uby5pd2F0ZS5qcCIsInlhaGFiYS5pd2F0ZS5qcCIsInlhbWFkYS5pd2F0ZS5qcCIsImF5YWdhd2Eua2FnYXdhLmpwIiwiaGlnYXNoaWthZ2F3YS5rYWdhd2EuanAiLCJrYW5vbmppLmth''@;'; put 'put ''Z2F3YS5qcCIsImtvdG9oaXJhLmthZ2F3YS5qcCIsIm1hbm5vLmthZ2F3YS5qcCIsIm1hcnVnYW1lLmthZ2F3YS5qcCIsIm1pdG95by5rYWdhd2EuanAiLCJuYW9zaGltYS5rYWdhd2EuanAiLCJzYW51a2kua2FnYXdhLmpwIiwidGFkb3RzdS5rYWdhd2EuanAiLCJ0YWthbWF0c3Uua2FnYXdh''@;'; put 'put ''LmpwIiwidG9ub3Noby5rYWdhd2EuanAiLCJ1Y2hpbm9taS5rYWdhd2EuanAiLCJ1dGF6dS5rYWdhd2EuanAiLCJ6ZW50c3VqaS5rYWdhd2EuanAiLCJha3VuZS5rYWdvc2hpbWEuanAiLCJhbWFtaS5rYWdvc2hpbWEuanAiLCJoaW9raS5rYWdvc2hpbWEuanAiLCJpc2Eua2Fnb3NoaW1hLmpw''@;'; put 'put ''IiwiaXNlbi5rYWdvc2hpbWEuanAiLCJpenVtaS5rYWdvc2hpbWEuanAiLCJrYWdvc2hpbWEua2Fnb3NoaW1hLmpwIiwia2Fub3lhLmthZ29zaGltYS5qcCIsImthd2FuYWJlLmthZ29zaGltYS5qcCIsImtpbmtvLmthZ29zaGltYS5qcCIsImtvdXlhbWEua2Fnb3NoaW1hLmpwIiwibWFrdXJh''@;'; put 'put ''emFraS5rYWdvc2hpbWEuanAiLCJtYXRzdW1vdG8ua2Fnb3NoaW1hLmpwIiwibWluYW1pdGFuZS5rYWdvc2hpbWEuanAiLCJuYWthdGFuZS5rYWdvc2hpbWEuanAiLCJuaXNoaW5vb21vdGUua2Fnb3NoaW1hLmpwIiwic2F0c3VtYXNlbmRhaS5rYWdvc2hpbWEuanAiLCJzb28ua2Fnb3NoaW1h''@;'; put 'put ''LmpwIiwidGFydW1penUua2Fnb3NoaW1hLmpwIiwieXVzdWkua2Fnb3NoaW1hLmpwIiwiYWlrYXdhLmthbmFnYXdhLmpwIiwiYXRzdWdpLmthbmFnYXdhLmpwIiwiYXlhc2Uua2FuYWdhd2EuanAiLCJjaGlnYXNha2kua2FuYWdhd2EuanAiLCJlYmluYS5rYW5hZ2F3YS5qcCIsImZ1amlzYXdh''@;'; put 'put ''LmthbmFnYXdhLmpwIiwiaGFkYW5vLmthbmFnYXdhLmpwIiwiaGFrb25lLmthbmFnYXdhLmpwIiwiaGlyYXRzdWthLmthbmFnYXdhLmpwIiwiaXNlaGFyYS5rYW5hZ2F3YS5qcCIsImthaXNlaS5rYW5hZ2F3YS5qcCIsImthbWFrdXJhLmthbmFnYXdhLmpwIiwia2l5b2thd2Eua2FuYWdhd2Eu''@;'; put 'put ''anAiLCJtYXRzdWRhLmthbmFnYXdhLmpwIiwibWluYW1pYXNoaWdhcmEua2FuYWdhd2EuanAiLCJtaXVyYS5rYW5hZ2F3YS5qcCIsIm5ha2FpLmthbmFnYXdhLmpwIiwibmlub21peWEua2FuYWdhd2EuanAiLCJvZGF3YXJhLmthbmFnYXdhLmpwIiwib2kua2FuYWdhd2EuanAiLCJvaXNvLmth''@;'; put 'put ''bmFnYXdhLmpwIiwic2FnYW1paGFyYS5rYW5hZ2F3YS5qcCIsInNhbXVrYXdhLmthbmFnYXdhLmpwIiwidHN1a3VpLmthbmFnYXdhLmpwIiwieWFtYWtpdGEua2FuYWdhd2EuanAiLCJ5YW1hdG8ua2FuYWdhd2EuanAiLCJ5b2tvc3VrYS5rYW5hZ2F3YS5qcCIsInl1Z2F3YXJhLmthbmFnYXdh''@;'; put 'put ''LmpwIiwiemFtYS5rYW5hZ2F3YS5qcCIsInp1c2hpLmthbmFnYXdhLmpwIiwiYWtpLmtvY2hpLmpwIiwiZ2Vpc2VpLmtvY2hpLmpwIiwiaGlkYWthLmtvY2hpLmpwIiwiaGlnYXNoaXRzdW5vLmtvY2hpLmpwIiwiaW5vLmtvY2hpLmpwIiwia2FnYW1pLmtvY2hpLmpwIiwia2FtaS5rb2NoaS5q''@;'; put 'put ''cCIsImtpdGFnYXdhLmtvY2hpLmpwIiwia29jaGkua29jaGkuanAiLCJtaWhhcmEua29jaGkuanAiLCJtb3RveWFtYS5rb2NoaS5qcCIsIm11cm90by5rb2NoaS5qcCIsIm5haGFyaS5rb2NoaS5qcCIsIm5ha2FtdXJhLmtvY2hpLmpwIiwibmFua29rdS5rb2NoaS5qcCIsIm5pc2hpdG9zYS5r''@;'; put 'put ''b2NoaS5qcCIsIm5peW9kb2dhd2Eua29jaGkuanAiLCJvY2hpLmtvY2hpLmpwIiwib2thd2Eua29jaGkuanAiLCJvdG95by5rb2NoaS5qcCIsIm90c3VraS5rb2NoaS5qcCIsInNha2F3YS5rb2NoaS5qcCIsInN1a3Vtby5rb2NoaS5qcCIsInN1c2FraS5rb2NoaS5qcCIsInRvc2Eua29jaGku''@;'; put 'put ''anAiLCJ0b3Nhc2hpbWl6dS5rb2NoaS5qcCIsInRveW8ua29jaGkuanAiLCJ0c3Vuby5rb2NoaS5qcCIsInVtYWppLmtvY2hpLmpwIiwieWFzdWRhLmtvY2hpLmpwIiwieXVzdWhhcmEua29jaGkuanAiLCJhbWFrdXNhLmt1bWFtb3RvLmpwIiwiYXJhby5rdW1hbW90by5qcCIsImFzby5rdW1h''@;'; put 'put ''bW90by5qcCIsImNob3lvLmt1bWFtb3RvLmpwIiwiZ3lva3V0by5rdW1hbW90by5qcCIsImthbWlhbWFrdXNhLmt1bWFtb3RvLmpwIiwia2lrdWNoaS5rdW1hbW90by5qcCIsImt1bWFtb3RvLmt1bWFtb3RvLmpwIiwibWFzaGlraS5rdW1hbW90by5qcCIsIm1pZnVuZS5rdW1hbW90by5qcCIs''@;'; put 'put ''Im1pbmFtYXRhLmt1bWFtb3RvLmpwIiwibWluYW1pb2d1bmkua3VtYW1vdG8uanAiLCJuYWdhc3Uua3VtYW1vdG8uanAiLCJuaXNoaWhhcmEua3VtYW1vdG8uanAiLCJvZ3VuaS5rdW1hbW90by5qcCIsIm96dS5rdW1hbW90by5qcCIsInN1bW90by5rdW1hbW90by5qcCIsInRha2Ftb3JpLmt1''@;'; put 'put ''bWFtb3RvLmpwIiwidWtpLmt1bWFtb3RvLmpwIiwidXRvLmt1bWFtb3RvLmpwIiwieWFtYWdhLmt1bWFtb3RvLmpwIiwieWFtYXRvLmt1bWFtb3RvLmpwIiwieWF0c3VzaGlyby5rdW1hbW90by5qcCIsImF5YWJlLmt5b3RvLmpwIiwiZnVrdWNoaXlhbWEua3lvdG8uanAiLCJoaWdhc2hpeWFt''@;'; put 'put ''YS5reW90by5qcCIsImlkZS5reW90by5qcCIsImluZS5reW90by5qcCIsImpveW8ua3lvdG8uanAiLCJrYW1lb2thLmt5b3RvLmpwIiwia2Ftby5reW90by5qcCIsImtpdGEua3lvdG8uanAiLCJraXp1Lmt5b3RvLmpwIiwia3VtaXlhbWEua3lvdG8uanAiLCJreW90YW1iYS5reW90by5qcCIs''@;'; put 'put ''Imt5b3RhbmFiZS5reW90by5qcCIsImt5b3RhbmdvLmt5b3RvLmpwIiwibWFpenVydS5reW90by5qcCIsIm1pbmFtaS5reW90by5qcCIsIm1pbmFtaXlhbWFzaGlyby5reW90by5qcCIsIm1peWF6dS5reW90by5qcCIsIm11a28ua3lvdG8uanAiLCJuYWdhb2tha3lvLmt5b3RvLmpwIiwibmFr''@;'; put 'put ''YWd5by5reW90by5qcCIsIm5hbnRhbi5reW90by5qcCIsIm95YW1hemFraS5reW90by5qcCIsInNha3lvLmt5b3RvLmpwIiwic2Vpa2Eua3lvdG8uanAiLCJ0YW5hYmUua3lvdG8uanAiLCJ1amkua3lvdG8uanAiLCJ1aml0YXdhcmEua3lvdG8uanAiLCJ3YXp1a2Eua3lvdG8uanAiLCJ5YW1h''@;'; put 'put ''c2hpbmEua3lvdG8uanAiLCJ5YXdhdGEua3lvdG8uanAiLCJhc2FoaS5taWUuanAiLCJpbmFiZS5taWUuanAiLCJpc2UubWllLmpwIiwia2FtZXlhbWEubWllLmpwIiwia2F3YWdvZS5taWUuanAiLCJraWhvLm1pZS5qcCIsImtpc29zYWtpLm1pZS5qcCIsImtpd2EubWllLmpwIiwia29tb25v''@;'; put 'put ''Lm1pZS5qcCIsImt1bWFuby5taWUuanAiLCJrdXdhbmEubWllLmpwIiwibWF0c3VzYWthLm1pZS5qcCIsIm1laXdhLm1pZS5qcCIsIm1paGFtYS5taWUuanAiLCJtaW5hbWlpc2UubWllLmpwIiwibWlzdWdpLm1pZS5qcCIsIm1peWFtYS5taWUuanAiLCJuYWJhcmkubWllLmpwIiwic2hpbWEu''@;'; put 'put ''bWllLmpwIiwic3V6dWthLm1pZS5qcCIsInRhZG8ubWllLmpwIiwidGFpa2kubWllLmpwIiwidGFraS5taWUuanAiLCJ0YW1ha2kubWllLmpwIiwidG9iYS5taWUuanAiLCJ0c3UubWllLmpwIiwidWRvbm8ubWllLmpwIiwidXJlc2hpbm8ubWllLmpwIiwid2F0YXJhaS5taWUuanAiLCJ5b2tr''@;'; put 'put ''YWljaGkubWllLmpwIiwiZnVydWthd2EubWl5YWdpLmpwIiwiaGlnYXNoaW1hdHN1c2hpbWEubWl5YWdpLmpwIiwiaXNoaW5vbWFraS5taXlhZ2kuanAiLCJpd2FudW1hLm1peWFnaS5qcCIsImtha3VkYS5taXlhZ2kuanAiLCJrYW1pLm1peWFnaS5qcCIsImthd2FzYWtpLm1peWFnaS5qcCIs''@;'; put 'put ''Im1hcnVtb3JpLm1peWFnaS5qcCIsIm1hdHN1c2hpbWEubWl5YWdpLmpwIiwibWluYW1pc2FucmlrdS5taXlhZ2kuanAiLCJtaXNhdG8ubWl5YWdpLmpwIiwibXVyYXRhLm1peWFnaS5qcCIsIm5hdG9yaS5taXlhZ2kuanAiLCJvZ2F3YXJhLm1peWFnaS5qcCIsIm9oaXJhLm1peWFnaS5qcCIs''@;'; put 'put ''Im9uYWdhd2EubWl5YWdpLmpwIiwib3Nha2kubWl5YWdpLmpwIiwicmlmdS5taXlhZ2kuanAiLCJzZW1pbmUubWl5YWdpLmpwIiwic2hpYmF0YS5taXlhZ2kuanAiLCJzaGljaGlrYXNodWt1Lm1peWFnaS5qcCIsInNoaWthbWEubWl5YWdpLmpwIiwic2hpb2dhbWEubWl5YWdpLmpwIiwic2hp''@;'; put 'put ''cm9pc2hpLm1peWFnaS5qcCIsInRhZ2Fqby5taXlhZ2kuanAiLCJ0YWl3YS5taXlhZ2kuanAiLCJ0b21lLm1peWFnaS5qcCIsInRvbWl5YS5taXlhZ2kuanAiLCJ3YWt1eWEubWl5YWdpLmpwIiwid2F0YXJpLm1peWFnaS5qcCIsInlhbWFtb3RvLm1peWFnaS5qcCIsInphby5taXlhZ2kuanAi''@;'; put 'put ''LCJheWEubWl5YXpha2kuanAiLCJlYmluby5taXlhemFraS5qcCIsImdva2FzZS5taXlhemFraS5qcCIsImh5dWdhLm1peWF6YWtpLmpwIiwia2Fkb2dhd2EubWl5YXpha2kuanAiLCJrYXdhbWluYW1pLm1peWF6YWtpLmpwIiwia2lqby5taXlhemFraS5qcCIsImtpdGFnYXdhLm1peWF6YWtp''@;'; put 'put ''LmpwIiwia2l0YWthdGEubWl5YXpha2kuanAiLCJraXRhdXJhLm1peWF6YWtpLmpwIiwia29iYXlhc2hpLm1peWF6YWtpLmpwIiwia3VuaXRvbWkubWl5YXpha2kuanAiLCJrdXNoaW1hLm1peWF6YWtpLmpwIiwibWltYXRhLm1peWF6YWtpLmpwIiwibWl5YWtvbm9qby5taXlhemFraS5qcCIs''@;'; put 'put ''Im1peWF6YWtpLm1peWF6YWtpLmpwIiwibW9yb3RzdWthLm1peWF6YWtpLmpwIiwibmljaGluYW4ubWl5YXpha2kuanAiLCJuaXNoaW1lcmEubWl5YXpha2kuanAiLCJub2Jlb2thLm1peWF6YWtpLmpwIiwic2FpdG8ubWl5YXpha2kuanAiLCJzaGlpYmEubWl5YXpha2kuanAiLCJzaGludG9t''@;'; put 'put ''aS5taXlhemFraS5qcCIsInRha2FoYXJ1Lm1peWF6YWtpLmpwIiwidGFrYW5hYmUubWl5YXpha2kuanAiLCJ0YWthemFraS5taXlhemFraS5qcCIsInRzdW5vLm1peWF6YWtpLmpwIiwiYWNoaS5uYWdhbm8uanAiLCJhZ2VtYXRzdS5uYWdhbm8uanAiLCJhbmFuLm5hZ2Fuby5qcCIsImFva2ku''@;'; put 'put ''bmFnYW5vLmpwIiwiYXNhaGkubmFnYW5vLmpwIiwiYXp1bWluby5uYWdhbm8uanAiLCJjaGlrdWhva3UubmFnYW5vLmpwIiwiY2hpa3VtYS5uYWdhbm8uanAiLCJjaGluby5uYWdhbm8uanAiLCJmdWppbWkubmFnYW5vLmpwIiwiaGFrdWJhLm5hZ2Fuby5qcCIsImhhcmEubmFnYW5vLmpwIiwi''@;'; put 'put ''aGlyYXlhLm5hZ2Fuby5qcCIsImlpZGEubmFnYW5vLmpwIiwiaWlqaW1hLm5hZ2Fuby5qcCIsImlpeWFtYS5uYWdhbm8uanAiLCJpaXp1bmEubmFnYW5vLmpwIiwiaWtlZGEubmFnYW5vLmpwIiwiaWt1c2FrYS5uYWdhbm8uanAiLCJpbmEubmFnYW5vLmpwIiwia2FydWl6YXdhLm5hZ2Fuby5q''@;'; put 'put ''cCIsImthd2FrYW1pLm5hZ2Fuby5qcCIsImtpc28ubmFnYW5vLmpwIiwia2lzb2Z1a3VzaGltYS5uYWdhbm8uanAiLCJraXRhYWlraS5uYWdhbm8uanAiLCJrb21hZ2FuZS5uYWdhbm8uanAiLCJrb21vcm8ubmFnYW5vLmpwIiwibWF0c3VrYXdhLm5hZ2Fuby5qcCIsIm1hdHN1bW90by5uYWdh''@;'; put 'put ''bm8uanAiLCJtaWFzYS5uYWdhbm8uanAiLCJtaW5hbWlhaWtpLm5hZ2Fuby5qcCIsIm1pbmFtaW1ha2kubmFnYW5vLmpwIiwibWluYW1pbWlub3dhLm5hZ2Fuby5qcCIsIm1pbm93YS5uYWdhbm8uanAiLCJtaXlhZGEubmFnYW5vLmpwIiwibWl5b3RhLm5hZ2Fuby5qcCIsIm1vY2hpenVraS5u''@;'; put 'put ''YWdhbm8uanAiLCJuYWdhbm8ubmFnYW5vLmpwIiwibmFnYXdhLm5hZ2Fuby5qcCIsIm5hZ2lzby5uYWdhbm8uanAiLCJuYWthZ2F3YS5uYWdhbm8uanAiLCJuYWthbm8ubmFnYW5vLmpwIiwibm96YXdhb25zZW4ubmFnYW5vLmpwIiwib2J1c2UubmFnYW5vLmpwIiwib2dhd2EubmFnYW5vLmpw''@;'; put 'put ''Iiwib2theWEubmFnYW5vLmpwIiwib21hY2hpLm5hZ2Fuby5qcCIsIm9taS5uYWdhbm8uanAiLCJvb2t1d2EubmFnYW5vLmpwIiwib29zaGlrYS5uYWdhbm8uanAiLCJvdGFraS5uYWdhbm8uanAiLCJvdGFyaS5uYWdhbm8uanAiLCJzYWthZS5uYWdhbm8uanAiLCJzYWtha2kubmFnYW5vLmpw''@;'; put 'put ''Iiwic2FrdS5uYWdhbm8uanAiLCJzYWt1aG8ubmFnYW5vLmpwIiwic2hpbW9zdXdhLm5hZ2Fuby5qcCIsInNoaW5hbm9tYWNoaS5uYWdhbm8uanAiLCJzaGlvamlyaS5uYWdhbm8uanAiLCJzdXdhLm5hZ2Fuby5qcCIsInN1emFrYS5uYWdhbm8uanAiLCJ0YWthZ2kubmFnYW5vLmpwIiwidGFr''@;'; put 'put ''YW1vcmkubmFnYW5vLmpwIiwidGFrYXlhbWEubmFnYW5vLmpwIiwidGF0ZXNoaW5hLm5hZ2Fuby5qcCIsInRhdHN1bm8ubmFnYW5vLmpwIiwidG9nYWt1c2hpLm5hZ2Fuby5qcCIsInRvZ3VyYS5uYWdhbm8uanAiLCJ0b21pLm5hZ2Fuby5qcCIsInVlZGEubmFnYW5vLmpwIiwid2FkYS5uYWdh''@;'; put 'put ''bm8uanAiLCJ5YW1hZ2F0YS5uYWdhbm8uanAiLCJ5YW1hbm91Y2hpLm5hZ2Fuby5qcCIsInlhc2FrYS5uYWdhbm8uanAiLCJ5YXN1b2thLm5hZ2Fuby5qcCIsImNoaWppd2EubmFnYXNha2kuanAiLCJmdXRzdS5uYWdhc2FraS5qcCIsImdvdG8ubmFnYXNha2kuanAiLCJoYXNhbWkubmFnYXNh''@;'; put 'put ''a2kuanAiLCJoaXJhZG8ubmFnYXNha2kuanAiLCJpa2kubmFnYXNha2kuanAiLCJpc2FoYXlhLm5hZ2FzYWtpLmpwIiwia2F3YXRhbmEubmFnYXNha2kuanAiLCJrdWNoaW5vdHN1Lm5hZ2FzYWtpLmpwIiwibWF0c3V1cmEubmFnYXNha2kuanAiLCJuYWdhc2FraS5uYWdhc2FraS5qcCIsIm9i''@;'; put 'put ''YW1hLm5hZ2FzYWtpLmpwIiwib211cmEubmFnYXNha2kuanAiLCJvc2V0by5uYWdhc2FraS5qcCIsInNhaWthaS5uYWdhc2FraS5qcCIsInNhc2Viby5uYWdhc2FraS5qcCIsInNlaWhpLm5hZ2FzYWtpLmpwIiwic2hpbWFiYXJhLm5hZ2FzYWtpLmpwIiwic2hpbmthbWlnb3RvLm5hZ2FzYWtp''@;'; put 'put ''LmpwIiwidG9naXRzdS5uYWdhc2FraS5qcCIsInRzdXNoaW1hLm5hZ2FzYWtpLmpwIiwidW56ZW4ubmFnYXNha2kuanAiLCJhbmRvLm5hcmEuanAiLCJnb3NlLm5hcmEuanAiLCJoZWd1cmkubmFyYS5qcCIsImhpZ2FzaGl5b3NoaW5vLm5hcmEuanAiLCJpa2FydWdhLm5hcmEuanAiLCJpa29t''@;'; put 'put ''YS5uYXJhLmpwIiwia2FtaWtpdGF5YW1hLm5hcmEuanAiLCJrYW5tYWtpLm5hcmEuanAiLCJrYXNoaWJhLm5hcmEuanAiLCJrYXNoaWhhcmEubmFyYS5qcCIsImthdHN1cmFnaS5uYXJhLmpwIiwia2F3YWkubmFyYS5qcCIsImthd2FrYW1pLm5hcmEuanAiLCJrYXdhbmlzaGkubmFyYS5qcCIs''@;'; put 'put ''ImtvcnlvLm5hcmEuanAiLCJrdXJvdGFraS5uYXJhLmpwIiwibWl0c3VlLm5hcmEuanAiLCJtaXlha2UubmFyYS5qcCIsIm5hcmEubmFyYS5qcCIsIm5vc2VnYXdhLm5hcmEuanAiLCJvamkubmFyYS5qcCIsIm91ZGEubmFyYS5qcCIsIm95b2RvLm5hcmEuanAiLCJzYWt1cmFpLm5hcmEuanAi''@;'; put 'put ''LCJzYW5nby5uYXJhLmpwIiwic2hpbW9pY2hpLm5hcmEuanAiLCJzaGltb2tpdGF5YW1hLm5hcmEuanAiLCJzaGluam8ubmFyYS5qcCIsInNvbmkubmFyYS5qcCIsInRha2F0b3JpLm5hcmEuanAiLCJ0YXdhcmFtb3RvLm5hcmEuanAiLCJ0ZW5rYXdhLm5hcmEuanAiLCJ0ZW5yaS5uYXJhLmpw''@;'; put 'put ''IiwidWRhLm5hcmEuanAiLCJ5YW1hdG9rb3JpeWFtYS5uYXJhLmpwIiwieWFtYXRvdGFrYWRhLm5hcmEuanAiLCJ5YW1hem9lLm5hcmEuanAiLCJ5b3NoaW5vLm5hcmEuanAiLCJhZ2EubmlpZ2F0YS5qcCIsImFnYW5vLm5paWdhdGEuanAiLCJnb3Nlbi5uaWlnYXRhLmpwIiwiaXRvaWdhd2Eu''@;'; put 'put ''bmlpZ2F0YS5qcCIsIml6dW1vemFraS5uaWlnYXRhLmpwIiwiam9ldHN1Lm5paWdhdGEuanAiLCJrYW1vLm5paWdhdGEuanAiLCJrYXJpd2EubmlpZ2F0YS5qcCIsImthc2hpd2F6YWtpLm5paWdhdGEuanAiLCJtaW5hbWl1b251bWEubmlpZ2F0YS5qcCIsIm1pdHN1a2UubmlpZ2F0YS5qcCIs''@;'; put 'put ''Im11aWthLm5paWdhdGEuanAiLCJtdXJha2FtaS5uaWlnYXRhLmpwIiwibXlva28ubmlpZ2F0YS5qcCIsIm5hZ2Fva2EubmlpZ2F0YS5qcCIsIm5paWdhdGEubmlpZ2F0YS5qcCIsIm9qaXlhLm5paWdhdGEuanAiLCJvbWkubmlpZ2F0YS5qcCIsInNhZG8ubmlpZ2F0YS5qcCIsInNhbmpvLm5p''@;'; put 'put ''aWdhdGEuanAiLCJzZWlyby5uaWlnYXRhLmpwIiwic2Vpcm91Lm5paWdhdGEuanAiLCJzZWtpa2F3YS5uaWlnYXRhLmpwIiwic2hpYmF0YS5uaWlnYXRhLmpwIiwidGFnYW1pLm5paWdhdGEuanAiLCJ0YWluYWkubmlpZ2F0YS5qcCIsInRvY2hpby5uaWlnYXRhLmpwIiwidG9rYW1hY2hpLm5p''@;'; put 'put ''aWdhdGEuanAiLCJ0c3ViYW1lLm5paWdhdGEuanAiLCJ0c3VuYW4ubmlpZ2F0YS5qcCIsInVvbnVtYS5uaWlnYXRhLmpwIiwieWFoaWtvLm5paWdhdGEuanAiLCJ5b2l0YS5uaWlnYXRhLmpwIiwieXV6YXdhLm5paWdhdGEuanAiLCJiZXBwdS5vaXRhLmpwIiwiYnVuZ29vbm8ub2l0YS5qcCIs''@;'; put 'put ''ImJ1bmdvdGFrYWRhLm9pdGEuanAiLCJoYXNhbWEub2l0YS5qcCIsImhpamkub2l0YS5qcCIsImhpbWVzaGltYS5vaXRhLmpwIiwiaGl0YS5vaXRhLmpwIiwia2FtaXRzdWUub2l0YS5qcCIsImtva29ub2Uub2l0YS5qcCIsImt1anUub2l0YS5qcCIsImt1bmlzYWtpLm9pdGEuanAiLCJrdXN1''@;'; put 'put ''Lm9pdGEuanAiLCJvaXRhLm9pdGEuanAiLCJzYWlraS5vaXRhLmpwIiwidGFrZXRhLm9pdGEuanAiLCJ0c3VrdW1pLm9pdGEuanAiLCJ1c2Eub2l0YS5qcCIsInVzdWtpLm9pdGEuanAiLCJ5dWZ1Lm9pdGEuanAiLCJha2Fpd2Eub2theWFtYS5qcCIsImFzYWt1Y2hpLm9rYXlhbWEuanAiLCJi''@;'; put 'put ''aXplbi5va2F5YW1hLmpwIiwiaGF5YXNoaW1hLm9rYXlhbWEuanAiLCJpYmFyYS5va2F5YW1hLmpwIiwia2FnYW1pbm8ub2theWFtYS5qcCIsImthc2Fva2Eub2theWFtYS5qcCIsImtpYmljaHVvLm9rYXlhbWEuanAiLCJrdW1lbmFuLm9rYXlhbWEuanAiLCJrdXJhc2hpa2kub2theWFtYS5q''@;'; put 'put ''cCIsIm1hbml3YS5va2F5YW1hLmpwIiwibWlzYWtpLm9rYXlhbWEuanAiLCJuYWdpLm9rYXlhbWEuanAiLCJuaWltaS5va2F5YW1hLmpwIiwibmlzaGlhd2FrdXJhLm9rYXlhbWEuanAiLCJva2F5YW1hLm9rYXlhbWEuanAiLCJzYXRvc2hvLm9rYXlhbWEuanAiLCJzZXRvdWNoaS5va2F5YW1h''@;'; put 'put ''LmpwIiwic2hpbmpvLm9rYXlhbWEuanAiLCJzaG9vLm9rYXlhbWEuanAiLCJzb2phLm9rYXlhbWEuanAiLCJ0YWthaGFzaGkub2theWFtYS5qcCIsInRhbWFuby5va2F5YW1hLmpwIiwidHN1eWFtYS5va2F5YW1hLmpwIiwid2FrZS5va2F5YW1hLmpwIiwieWFrYWdlLm9rYXlhbWEuanAiLCJh''@;'; put 'put ''Z3VuaS5va2luYXdhLmpwIiwiZ2lub3dhbi5va2luYXdhLmpwIiwiZ2lub3phLm9raW5hd2EuanAiLCJndXNoaWthbWkub2tpbmF3YS5qcCIsImhhZWJhcnUub2tpbmF3YS5qcCIsImhpZ2FzaGkub2tpbmF3YS5qcCIsImhpcmFyYS5va2luYXdhLmpwIiwiaWhleWEub2tpbmF3YS5qcCIsImlz''@;'; put 'put ''aGlnYWtpLm9raW5hd2EuanAiLCJpc2hpa2F3YS5va2luYXdhLmpwIiwiaXRvbWFuLm9raW5hd2EuanAiLCJpemVuYS5va2luYXdhLmpwIiwia2FkZW5hLm9raW5hd2EuanAiLCJraW4ub2tpbmF3YS5qcCIsImtpdGFkYWl0by5va2luYXdhLmpwIiwia2l0YW5ha2FndXN1a3Uub2tpbmF3YS5q''@;'; put 'put ''cCIsImt1bWVqaW1hLm9raW5hd2EuanAiLCJrdW5pZ2FtaS5va2luYXdhLmpwIiwibWluYW1pZGFpdG8ub2tpbmF3YS5qcCIsIm1vdG9idS5va2luYXdhLmpwIiwibmFnby5va2luYXdhLmpwIiwibmFoYS5va2luYXdhLmpwIiwibmFrYWd1c3VrdS5va2luYXdhLmpwIiwibmFraWppbi5va2lu''@;'; put 'put ''YXdhLmpwIiwibmFuam8ub2tpbmF3YS5qcCIsIm5pc2hpaGFyYS5va2luYXdhLmpwIiwib2dpbWkub2tpbmF3YS5qcCIsIm9raW5hd2Eub2tpbmF3YS5qcCIsIm9ubmEub2tpbmF3YS5qcCIsInNoaW1vamkub2tpbmF3YS5qcCIsInRha2V0b21pLm9raW5hd2EuanAiLCJ0YXJhbWEub2tpbmF3''@;'; put 'put ''YS5qcCIsInRva2FzaGlraS5va2luYXdhLmpwIiwidG9taWd1c3VrdS5va2luYXdhLmpwIiwidG9uYWtpLm9raW5hd2EuanAiLCJ1cmFzb2Uub2tpbmF3YS5qcCIsInVydW1hLm9raW5hd2EuanAiLCJ5YWVzZS5va2luYXdhLmpwIiwieW9taXRhbi5va2luYXdhLmpwIiwieW9uYWJhcnUub2tp''@;'; put 'put ''bmF3YS5qcCIsInlvbmFndW5pLm9raW5hd2EuanAiLCJ6YW1hbWkub2tpbmF3YS5qcCIsImFiZW5vLm9zYWthLmpwIiwiY2hpaGF5YWFrYXNha2Eub3Nha2EuanAiLCJjaHVvLm9zYWthLmpwIiwiZGFpdG8ub3Nha2EuanAiLCJmdWppaWRlcmEub3Nha2EuanAiLCJoYWJpa2luby5vc2FrYS5q''@;'; put 'put ''cCIsImhhbm5hbi5vc2FrYS5qcCIsImhpZ2FzaGlvc2FrYS5vc2FrYS5qcCIsImhpZ2FzaGlzdW1peW9zaGkub3Nha2EuanAiLCJoaWdhc2hpeW9kb2dhd2Eub3Nha2EuanAiLCJoaXJha2F0YS5vc2FrYS5qcCIsImliYXJha2kub3Nha2EuanAiLCJpa2VkYS5vc2FrYS5qcCIsIml6dW1pLm9z''@;'; put 'put ''YWthLmpwIiwiaXp1bWlvdHN1Lm9zYWthLmpwIiwiaXp1bWlzYW5vLm9zYWthLmpwIiwia2Fkb21hLm9zYWthLmpwIiwia2FpenVrYS5vc2FrYS5qcCIsImthbmFuLm9zYWthLmpwIiwia2FzaGl3YXJhLm9zYWthLmpwIiwia2F0YW5vLm9zYWthLmpwIiwia2F3YWNoaW5hZ2Fuby5vc2FrYS5q''@;'; put 'put ''cCIsImtpc2hpd2FkYS5vc2FrYS5qcCIsImtpdGEub3Nha2EuanAiLCJrdW1hdG9yaS5vc2FrYS5qcCIsIm1hdHN1YmFyYS5vc2FrYS5qcCIsIm1pbmF0by5vc2FrYS5qcCIsIm1pbm9oLm9zYWthLmpwIiwibWlzYWtpLm9zYWthLmpwIiwibW9yaWd1Y2hpLm9zYWthLmpwIiwibmV5YWdhd2Eu''@;'; put 'put ''b3Nha2EuanAiLCJuaXNoaS5vc2FrYS5qcCIsIm5vc2Uub3Nha2EuanAiLCJvc2FrYXNheWFtYS5vc2FrYS5qcCIsInNha2FpLm9zYWthLmpwIiwic2F5YW1hLm9zYWthLmpwIiwic2VubmFuLm9zYWthLmpwIiwic2V0dHN1Lm9zYWthLmpwIiwic2hpam9uYXdhdGUub3Nha2EuanAiLCJzaGlt''@;'; put 'put ''YW1vdG8ub3Nha2EuanAiLCJzdWl0YS5vc2FrYS5qcCIsInRhZGFva2Eub3Nha2EuanAiLCJ0YWlzaGkub3Nha2EuanAiLCJ0YWppcmkub3Nha2EuanAiLCJ0YWthaXNoaS5vc2FrYS5qcCIsInRha2F0c3VraS5vc2FrYS5qcCIsInRvbmRhYmF5YXNoaS5vc2FrYS5qcCIsInRveW9uYWthLm9z''@;'; put 'put ''YWthLmpwIiwidG95b25vLm9zYWthLmpwIiwieWFvLm9zYWthLmpwIiwiYXJpYWtlLnNhZ2EuanAiLCJhcml0YS5zYWdhLmpwIiwiZnVrdWRvbWkuc2FnYS5qcCIsImdlbmthaS5zYWdhLmpwIiwiaGFtYXRhbWEuc2FnYS5qcCIsImhpemVuLnNhZ2EuanAiLCJpbWFyaS5zYWdhLmpwIiwia2Ft''@;'; put 'put ''aW1pbmUuc2FnYS5qcCIsImthbnpha2kuc2FnYS5qcCIsImthcmF0c3Uuc2FnYS5qcCIsImthc2hpbWEuc2FnYS5qcCIsImtpdGFnYXRhLnNhZ2EuanAiLCJraXRhaGF0YS5zYWdhLmpwIiwia2l5YW1hLnNhZ2EuanAiLCJrb3Vob2t1LnNhZ2EuanAiLCJreXVyYWdpLnNhZ2EuanAiLCJuaXNo''@;'; put 'put ''aWFyaXRhLnNhZ2EuanAiLCJvZ2kuc2FnYS5qcCIsIm9tYWNoaS5zYWdhLmpwIiwib3VjaGkuc2FnYS5qcCIsInNhZ2Euc2FnYS5qcCIsInNoaXJvaXNoaS5zYWdhLmpwIiwidGFrdS5zYWdhLmpwIiwidGFyYS5zYWdhLmpwIiwidG9zdS5zYWdhLmpwIiwieW9zaGlub2dhcmkuc2FnYS5qcCIs''@;'; put 'put ''ImFyYWthd2Euc2FpdGFtYS5qcCIsImFzYWthLnNhaXRhbWEuanAiLCJjaGljaGlidS5zYWl0YW1hLmpwIiwiZnVqaW1pLnNhaXRhbWEuanAiLCJmdWppbWluby5zYWl0YW1hLmpwIiwiZnVrYXlhLnNhaXRhbWEuanAiLCJoYW5uby5zYWl0YW1hLmpwIiwiaGFueXUuc2FpdGFtYS5qcCIsImhh''@;'; put 'put ''c3VkYS5zYWl0YW1hLmpwIiwiaGF0b2dheWEuc2FpdGFtYS5qcCIsImhhdG95YW1hLnNhaXRhbWEuanAiLCJoaWRha2Euc2FpdGFtYS5qcCIsImhpZ2FzaGljaGljaGlidS5zYWl0YW1hLmpwIiwiaGlnYXNoaW1hdHN1eWFtYS5zYWl0YW1hLmpwIiwiaG9uam8uc2FpdGFtYS5qcCIsImluYS5z''@;'; put 'put ''YWl0YW1hLmpwIiwiaXJ1bWEuc2FpdGFtYS5qcCIsIml3YXRzdWtpLnNhaXRhbWEuanAiLCJrYW1paXp1bWkuc2FpdGFtYS5qcCIsImthbWlrYXdhLnNhaXRhbWEuanAiLCJrYW1pc2F0by5zYWl0YW1hLmpwIiwia2FzdWthYmUuc2FpdGFtYS5qcCIsImthd2Fnb2Uuc2FpdGFtYS5qcCIsImth''@;'; put 'put ''d2FndWNoaS5zYWl0YW1hLmpwIiwia2F3YWppbWEuc2FpdGFtYS5qcCIsImthem8uc2FpdGFtYS5qcCIsImtpdGFtb3RvLnNhaXRhbWEuanAiLCJrb3NoaWdheWEuc2FpdGFtYS5qcCIsImtvdW5vc3Uuc2FpdGFtYS5qcCIsImt1a2kuc2FpdGFtYS5qcCIsImt1bWFnYXlhLnNhaXRhbWEuanAi''@;'; put 'put ''LCJtYXRzdWJ1c2hpLnNhaXRhbWEuanAiLCJtaW5hbm8uc2FpdGFtYS5qcCIsIm1pc2F0by5zYWl0YW1hLmpwIiwibWl5YXNoaXJvLnNhaXRhbWEuanAiLCJtaXlvc2hpLnNhaXRhbWEuanAiLCJtb3JveWFtYS5zYWl0YW1hLmpwIiwibmFnYXRvcm8uc2FpdGFtYS5qcCIsIm5hbWVnYXdhLnNh''@;'; put 'put ''aXRhbWEuanAiLCJuaWl6YS5zYWl0YW1hLmpwIiwib2dhbm8uc2FpdGFtYS5qcCIsIm9nYXdhLnNhaXRhbWEuanAiLCJvZ29zZS5zYWl0YW1hLmpwIiwib2tlZ2F3YS5zYWl0YW1hLmpwIiwib21peWEuc2FpdGFtYS5qcCIsIm90YWtpLnNhaXRhbWEuanAiLCJyYW56YW4uc2FpdGFtYS5qcCIs''@;'; put 'put ''InJ5b2thbWkuc2FpdGFtYS5qcCIsInNhaXRhbWEuc2FpdGFtYS5qcCIsInNha2Fkby5zYWl0YW1hLmpwIiwic2F0dGUuc2FpdGFtYS5qcCIsInNheWFtYS5zYWl0YW1hLmpwIiwic2hpa2kuc2FpdGFtYS5qcCIsInNoaXJhb2thLnNhaXRhbWEuanAiLCJzb2thLnNhaXRhbWEuanAiLCJzdWdp''@;'; put 'put ''dG8uc2FpdGFtYS5qcCIsInRvZGEuc2FpdGFtYS5qcCIsInRva2lnYXdhLnNhaXRhbWEuanAiLCJ0b2tvcm96YXdhLnNhaXRhbWEuanAiLCJ0c3VydWdhc2hpbWEuc2FpdGFtYS5qcCIsInVyYXdhLnNhaXRhbWEuanAiLCJ3YXJhYmkuc2FpdGFtYS5qcCIsInlhc2hpby5zYWl0YW1hLmpwIiwi''@;'; put 'put ''eW9rb3plLnNhaXRhbWEuanAiLCJ5b25vLnNhaXRhbWEuanAiLCJ5b3JpaS5zYWl0YW1hLmpwIiwieW9zaGlkYS5zYWl0YW1hLmpwIiwieW9zaGlrYXdhLnNhaXRhbWEuanAiLCJ5b3NoaW1pLnNhaXRhbWEuanAiLCJhaXNoby5zaGlnYS5qcCIsImdhbW8uc2hpZ2EuanAiLCJoaWdhc2hpb21p''@;'; put 'put ''LnNoaWdhLmpwIiwiaGlrb25lLnNoaWdhLmpwIiwia29rYS5zaGlnYS5qcCIsImtvbmFuLnNoaWdhLmpwIiwia29zZWkuc2hpZ2EuanAiLCJrb3RvLnNoaWdhLmpwIiwia3VzYXRzdS5zaGlnYS5qcCIsIm1haWJhcmEuc2hpZ2EuanAiLCJtb3JpeWFtYS5zaGlnYS5qcCIsIm5hZ2FoYW1hLnNo''@;'; put 'put ''aWdhLmpwIiwibmlzaGlhemFpLnNoaWdhLmpwIiwibm90b2dhd2Euc2hpZ2EuanAiLCJvbWloYWNoaW1hbi5zaGlnYS5qcCIsIm90c3Uuc2hpZ2EuanAiLCJyaXR0by5zaGlnYS5qcCIsInJ5dW9oLnNoaWdhLmpwIiwidGFrYXNoaW1hLnNoaWdhLmpwIiwidGFrYXRzdWtpLnNoaWdhLmpwIiwi''@;'; put 'put ''dG9yYWhpbWUuc2hpZ2EuanAiLCJ0b3lvc2F0by5zaGlnYS5qcCIsInlhc3Uuc2hpZ2EuanAiLCJha2FnaS5zaGltYW5lLmpwIiwiYW1hLnNoaW1hbmUuanAiLCJnb3RzdS5zaGltYW5lLmpwIiwiaGFtYWRhLnNoaW1hbmUuanAiLCJoaWdhc2hpaXp1bW8uc2hpbWFuZS5qcCIsImhpa2F3YS5z''@;'; put 'put ''aGltYW5lLmpwIiwiaGlraW1pLnNoaW1hbmUuanAiLCJpenVtby5zaGltYW5lLmpwIiwia2FraW5va2kuc2hpbWFuZS5qcCIsIm1hc3VkYS5zaGltYW5lLmpwIiwibWF0c3VlLnNoaW1hbmUuanAiLCJtaXNhdG8uc2hpbWFuZS5qcCIsIm5pc2hpbm9zaGltYS5zaGltYW5lLmpwIiwib2hkYS5z''@;'; put 'put ''aGltYW5lLmpwIiwib2tpbm9zaGltYS5zaGltYW5lLmpwIiwib2t1aXp1bW8uc2hpbWFuZS5qcCIsInNoaW1hbmUuc2hpbWFuZS5qcCIsInRhbWF5dS5zaGltYW5lLmpwIiwidHN1d2Fuby5zaGltYW5lLmpwIiwidW5uYW4uc2hpbWFuZS5qcCIsInlha3Vtby5zaGltYW5lLmpwIiwieWFzdWdp''@;'; put 'put ''LnNoaW1hbmUuanAiLCJ5YXRzdWthLnNoaW1hbmUuanAiLCJhcmFpLnNoaXp1b2thLmpwIiwiYXRhbWkuc2hpenVva2EuanAiLCJmdWppLnNoaXp1b2thLmpwIiwiZnVqaWVkYS5zaGl6dW9rYS5qcCIsImZ1amlrYXdhLnNoaXp1b2thLmpwIiwiZnVqaW5vbWl5YS5zaGl6dW9rYS5qcCIsImZ1''@;'; put 'put ''a3Vyb2kuc2hpenVva2EuanAiLCJnb3RlbWJhLnNoaXp1b2thLmpwIiwiaGFpYmFyYS5zaGl6dW9rYS5qcCIsImhhbWFtYXRzdS5zaGl6dW9rYS5qcCIsImhpZ2FzaGlpenUuc2hpenVva2EuanAiLCJpdG8uc2hpenVva2EuanAiLCJpd2F0YS5zaGl6dW9rYS5qcCIsIml6dS5zaGl6dW9rYS5q''@;'; put 'put ''cCIsIml6dW5va3VuaS5zaGl6dW9rYS5qcCIsImtha2VnYXdhLnNoaXp1b2thLmpwIiwia2FubmFtaS5zaGl6dW9rYS5qcCIsImthd2FuZWhvbi5zaGl6dW9rYS5qcCIsImthd2F6dS5zaGl6dW9rYS5qcCIsImtpa3VnYXdhLnNoaXp1b2thLmpwIiwia29zYWkuc2hpenVva2EuanAiLCJtYWtp''@;'; put 'put ''bm9oYXJhLnNoaXp1b2thLmpwIiwibWF0c3V6YWtpLnNoaXp1b2thLmpwIiwibWluYW1paXp1LnNoaXp1b2thLmpwIiwibWlzaGltYS5zaGl6dW9rYS5qcCIsIm1vcmltYWNoaS5zaGl6dW9rYS5qcCIsIm5pc2hpaXp1LnNoaXp1b2thLmpwIiwibnVtYXp1LnNoaXp1b2thLmpwIiwib21hZXph''@;'; put 'put ''a2kuc2hpenVva2EuanAiLCJzaGltYWRhLnNoaXp1b2thLmpwIiwic2hpbWl6dS5zaGl6dW9rYS5qcCIsInNoaW1vZGEuc2hpenVva2EuanAiLCJzaGl6dW9rYS5zaGl6dW9rYS5qcCIsInN1c29uby5zaGl6dW9rYS5qcCIsInlhaXp1LnNoaXp1b2thLmpwIiwieW9zaGlkYS5zaGl6dW9rYS5q''@;'; put 'put ''cCIsImFzaGlrYWdhLnRvY2hpZ2kuanAiLCJiYXRvLnRvY2hpZ2kuanAiLCJoYWdhLnRvY2hpZ2kuanAiLCJpY2hpa2FpLnRvY2hpZ2kuanAiLCJpd2FmdW5lLnRvY2hpZ2kuanAiLCJrYW1pbm9rYXdhLnRvY2hpZ2kuanAiLCJrYW51bWEudG9jaGlnaS5qcCIsImthcmFzdXlhbWEudG9jaGln''@;'; put 'put ''aS5qcCIsImt1cm9pc28udG9jaGlnaS5qcCIsIm1hc2hpa28udG9jaGlnaS5qcCIsIm1pYnUudG9jaGlnaS5qcCIsIm1va2EudG9jaGlnaS5qcCIsIm1vdGVnaS50b2NoaWdpLmpwIiwibmFzdS50b2NoaWdpLmpwIiwibmFzdXNoaW9iYXJhLnRvY2hpZ2kuanAiLCJuaWtrby50b2NoaWdpLmpw''@;'; put 'put ''IiwibmlzaGlrYXRhLnRvY2hpZ2kuanAiLCJub2dpLnRvY2hpZ2kuanAiLCJvaGlyYS50b2NoaWdpLmpwIiwib2h0YXdhcmEudG9jaGlnaS5qcCIsIm95YW1hLnRvY2hpZ2kuanAiLCJzYWt1cmEudG9jaGlnaS5qcCIsInNhbm8udG9jaGlnaS5qcCIsInNoaW1vdHN1a2UudG9jaGlnaS5qcCIs''@;'; put 'put ''InNoaW95YS50b2NoaWdpLmpwIiwidGFrYW5lemF3YS50b2NoaWdpLmpwIiwidG9jaGlnaS50b2NoaWdpLmpwIiwidHN1Z2EudG9jaGlnaS5qcCIsInVqaWllLnRvY2hpZ2kuanAiLCJ1dHN1bm9taXlhLnRvY2hpZ2kuanAiLCJ5YWl0YS50b2NoaWdpLmpwIiwiYWl6dW1pLnRva3VzaGltYS5q''@;'; put 'put ''cCIsImFuYW4udG9rdXNoaW1hLmpwIiwiaWNoaWJhLnRva3VzaGltYS5qcCIsIml0YW5vLnRva3VzaGltYS5qcCIsImthaW5hbi50b2t1c2hpbWEuanAiLCJrb21hdHN1c2hpbWEudG9rdXNoaW1hLmpwIiwibWF0c3VzaGlnZS50b2t1c2hpbWEuanAiLCJtaW1hLnRva3VzaGltYS5qcCIsIm1p''@;'; put 'put ''bmFtaS50b2t1c2hpbWEuanAiLCJtaXlvc2hpLnRva3VzaGltYS5qcCIsIm11Z2kudG9rdXNoaW1hLmpwIiwibmFrYWdhd2EudG9rdXNoaW1hLmpwIiwibmFydXRvLnRva3VzaGltYS5qcCIsInNhbmFnb2NoaS50b2t1c2hpbWEuanAiLCJzaGlzaGlrdWkudG9rdXNoaW1hLmpwIiwidG9rdXNo''@;'; put 'put ''aW1hLnRva3VzaGltYS5qcCIsIndhamlraS50b2t1c2hpbWEuanAiLCJhZGFjaGkudG9reW8uanAiLCJha2lydW5vLnRva3lvLmpwIiwiYWtpc2hpbWEudG9reW8uanAiLCJhb2dhc2hpbWEudG9reW8uanAiLCJhcmFrYXdhLnRva3lvLmpwIiwiYnVua3lvLnRva3lvLmpwIiwiY2hpeW9kYS50''@;'; put 'put ''b2t5by5qcCIsImNob2Z1LnRva3lvLmpwIiwiY2h1by50b2t5by5qcCIsImVkb2dhd2EudG9reW8uanAiLCJmdWNodS50b2t5by5qcCIsImZ1c3NhLnRva3lvLmpwIiwiaGFjaGlqby50b2t5by5qcCIsImhhY2hpb2ppLnRva3lvLmpwIiwiaGFtdXJhLnRva3lvLmpwIiwiaGlnYXNoaWt1cnVt''@;'; put 'put ''ZS50b2t5by5qcCIsImhpZ2FzaGltdXJheWFtYS50b2t5by5qcCIsImhpZ2FzaGl5YW1hdG8udG9reW8uanAiLCJoaW5vLnRva3lvLmpwIiwiaGlub2RlLnRva3lvLmpwIiwiaGlub2hhcmEudG9reW8uanAiLCJpbmFnaS50b2t5by5qcCIsIml0YWJhc2hpLnRva3lvLmpwIiwia2F0c3VzaGlr''@;'; put 'put ''YS50b2t5by5qcCIsImtpdGEudG9reW8uanAiLCJraXlvc2UudG9reW8uanAiLCJrb2RhaXJhLnRva3lvLmpwIiwia29nYW5laS50b2t5by5qcCIsImtva3VidW5qaS50b2t5by5qcCIsImtvbWFlLnRva3lvLmpwIiwia290by50b2t5by5qcCIsImtvdXp1c2hpbWEudG9reW8uanAiLCJrdW5p''@;'; put 'put ''dGFjaGkudG9reW8uanAiLCJtYWNoaWRhLnRva3lvLmpwIiwibWVndXJvLnRva3lvLmpwIiwibWluYXRvLnRva3lvLmpwIiwibWl0YWthLnRva3lvLmpwIiwibWl6dWhvLnRva3lvLmpwIiwibXVzYXNoaW11cmF5YW1hLnRva3lvLmpwIiwibXVzYXNoaW5vLnRva3lvLmpwIiwibmFrYW5vLnRv''@;'; put 'put ''a3lvLmpwIiwibmVyaW1hLnRva3lvLmpwIiwib2dhc2F3YXJhLnRva3lvLmpwIiwib2t1dGFtYS50b2t5by5qcCIsIm9tZS50b2t5by5qcCIsIm9zaGltYS50b2t5by5qcCIsIm90YS50b2t5by5qcCIsInNldGFnYXlhLnRva3lvLmpwIiwic2hpYnV5YS50b2t5by5qcCIsInNoaW5hZ2F3YS50''@;'; put 'put ''b2t5by5qcCIsInNoaW5qdWt1LnRva3lvLmpwIiwic3VnaW5hbWkudG9reW8uanAiLCJzdW1pZGEudG9reW8uanAiLCJ0YWNoaWthd2EudG9reW8uanAiLCJ0YWl0by50b2t5by5qcCIsInRhbWEudG9reW8uanAiLCJ0b3NoaW1hLnRva3lvLmpwIiwiY2hpenUudG90dG9yaS5qcCIsImhpbm8u''@;'; put 'put ''dG90dG9yaS5qcCIsImthd2FoYXJhLnRvdHRvcmkuanAiLCJrb2dlLnRvdHRvcmkuanAiLCJrb3RvdXJhLnRvdHRvcmkuanAiLCJtaXNhc2EudG90dG9yaS5qcCIsIm5hbmJ1LnRvdHRvcmkuanAiLCJuaWNoaW5hbi50b3R0b3JpLmpwIiwic2FrYWltaW5hdG8udG90dG9yaS5qcCIsInRvdHRv''@;'; put 'put ''cmkudG90dG9yaS5qcCIsIndha2FzYS50b3R0b3JpLmpwIiwieWF6dS50b3R0b3JpLmpwIiwieW9uYWdvLnRvdHRvcmkuanAiLCJhc2FoaS50b3lhbWEuanAiLCJmdWNodS50b3lhbWEuanAiLCJmdWt1bWl0c3UudG95YW1hLmpwIiwiZnVuYWhhc2hpLnRveWFtYS5qcCIsImhpbWkudG95YW1h''@;'; put 'put ''LmpwIiwiaW1penUudG95YW1hLmpwIiwiaW5hbWkudG95YW1hLmpwIiwiam9oYW5hLnRveWFtYS5qcCIsImthbWlpY2hpLnRveWFtYS5qcCIsImt1cm9iZS50b3lhbWEuanAiLCJuYWthbmlpa2F3YS50b3lhbWEuanAiLCJuYW1lcmlrYXdhLnRveWFtYS5qcCIsIm5hbnRvLnRveWFtYS5qcCIs''@;'; put 'put ''Im55dXplbi50b3lhbWEuanAiLCJveWFiZS50b3lhbWEuanAiLCJ0YWlyYS50b3lhbWEuanAiLCJ0YWthb2thLnRveWFtYS5qcCIsInRhdGV5YW1hLnRveWFtYS5qcCIsInRvZ2EudG95YW1hLmpwIiwidG9uYW1pLnRveWFtYS5qcCIsInRveWFtYS50b3lhbWEuanAiLCJ1bmF6dWtpLnRveWFt''@;'; put 'put ''YS5qcCIsInVvenUudG95YW1hLmpwIiwieWFtYWRhLnRveWFtYS5qcCIsImFyaWRhLndha2F5YW1hLmpwIiwiYXJpZGFnYXdhLndha2F5YW1hLmpwIiwiZ29iby53YWtheWFtYS5qcCIsImhhc2hpbW90by53YWtheWFtYS5qcCIsImhpZGFrYS53YWtheWFtYS5qcCIsImhpcm9nYXdhLndha2F5''@;'; put 'put ''YW1hLmpwIiwiaW5hbWkud2FrYXlhbWEuanAiLCJpd2FkZS53YWtheWFtYS5qcCIsImthaW5hbi53YWtheWFtYS5qcCIsImthbWl0b25kYS53YWtheWFtYS5qcCIsImthdHN1cmFnaS53YWtheWFtYS5qcCIsImtpbWluby53YWtheWFtYS5qcCIsImtpbm9rYXdhLndha2F5YW1hLmpwIiwia2l0''@;'; put 'put ''YXlhbWEud2FrYXlhbWEuanAiLCJrb3lhLndha2F5YW1hLmpwIiwia296YS53YWtheWFtYS5qcCIsImtvemFnYXdhLndha2F5YW1hLmpwIiwia3Vkb3lhbWEud2FrYXlhbWEuanAiLCJrdXNoaW1vdG8ud2FrYXlhbWEuanAiLCJtaWhhbWEud2FrYXlhbWEuanAiLCJtaXNhdG8ud2FrYXlhbWEu''@;'; put 'put ''anAiLCJuYWNoaWthdHN1dXJhLndha2F5YW1hLmpwIiwic2hpbmd1Lndha2F5YW1hLmpwIiwic2hpcmFoYW1hLndha2F5YW1hLmpwIiwidGFpamkud2FrYXlhbWEuanAiLCJ0YW5hYmUud2FrYXlhbWEuanAiLCJ3YWtheWFtYS53YWtheWFtYS5qcCIsInl1YXNhLndha2F5YW1hLmpwIiwieXVy''@;'; put 'put ''YS53YWtheWFtYS5qcCIsImFzYWhpLnlhbWFnYXRhLmpwIiwiZnVuYWdhdGEueWFtYWdhdGEuanAiLCJoaWdhc2hpbmUueWFtYWdhdGEuanAiLCJpaWRlLnlhbWFnYXRhLmpwIiwia2Fob2t1LnlhbWFnYXRhLmpwIiwia2FtaW5veWFtYS55YW1hZ2F0YS5qcCIsImthbmV5YW1hLnlhbWFnYXRh''@;'; put 'put ''LmpwIiwia2F3YW5pc2hpLnlhbWFnYXRhLmpwIiwibWFtdXJvZ2F3YS55YW1hZ2F0YS5qcCIsIm1pa2F3YS55YW1hZ2F0YS5qcCIsIm11cmF5YW1hLnlhbWFnYXRhLmpwIiwibmFnYWkueWFtYWdhdGEuanAiLCJuYWtheWFtYS55YW1hZ2F0YS5qcCIsIm5hbnlvLnlhbWFnYXRhLmpwIiwibmlz''@;'; put 'put ''aGlrYXdhLnlhbWFnYXRhLmpwIiwib2JhbmF6YXdhLnlhbWFnYXRhLmpwIiwib2UueWFtYWdhdGEuanAiLCJvZ3VuaS55YW1hZ2F0YS5qcCIsIm9oa3VyYS55YW1hZ2F0YS5qcCIsIm9pc2hpZGEueWFtYWdhdGEuanAiLCJzYWdhZS55YW1hZ2F0YS5qcCIsInNha2F0YS55YW1hZ2F0YS5qcCIs''@;'; put 'put ''InNha2VnYXdhLnlhbWFnYXRhLmpwIiwic2hpbmpvLnlhbWFnYXRhLmpwIiwic2hpcmF0YWthLnlhbWFnYXRhLmpwIiwic2hvbmFpLnlhbWFnYXRhLmpwIiwidGFrYWhhdGEueWFtYWdhdGEuanAiLCJ0ZW5kby55YW1hZ2F0YS5qcCIsInRvemF3YS55YW1hZ2F0YS5qcCIsInRzdXJ1b2thLnlh''@;'; put 'put ''bWFnYXRhLmpwIiwieWFtYWdhdGEueWFtYWdhdGEuanAiLCJ5YW1hbm9iZS55YW1hZ2F0YS5qcCIsInlvbmV6YXdhLnlhbWFnYXRhLmpwIiwieXV6YS55YW1hZ2F0YS5qcCIsImFidS55YW1hZ3VjaGkuanAiLCJoYWdpLnlhbWFndWNoaS5qcCIsImhpa2FyaS55YW1hZ3VjaGkuanAiLCJob2Z1''@;'; put 'put ''LnlhbWFndWNoaS5qcCIsIml3YWt1bmkueWFtYWd1Y2hpLmpwIiwia3VkYW1hdHN1LnlhbWFndWNoaS5qcCIsIm1pdG91LnlhbWFndWNoaS5qcCIsIm5hZ2F0by55YW1hZ3VjaGkuanAiLCJvc2hpbWEueWFtYWd1Y2hpLmpwIiwic2hpbW9ub3Nla2kueWFtYWd1Y2hpLmpwIiwic2h1bmFuLnlh''@;'; put 'put ''bWFndWNoaS5qcCIsInRhYnVzZS55YW1hZ3VjaGkuanAiLCJ0b2t1eWFtYS55YW1hZ3VjaGkuanAiLCJ0b3lvdGEueWFtYWd1Y2hpLmpwIiwidWJlLnlhbWFndWNoaS5qcCIsInl1dS55YW1hZ3VjaGkuanAiLCJjaHVvLnlhbWFuYXNoaS5qcCIsImRvc2hpLnlhbWFuYXNoaS5qcCIsImZ1ZWZ1''@;'; put 'put ''a2kueWFtYW5hc2hpLmpwIiwiZnVqaWthd2EueWFtYW5hc2hpLmpwIiwiZnVqaWthd2FndWNoaWtvLnlhbWFuYXNoaS5qcCIsImZ1aml5b3NoaWRhLnlhbWFuYXNoaS5qcCIsImhheWFrYXdhLnlhbWFuYXNoaS5qcCIsImhva3V0by55YW1hbmFzaGkuanAiLCJpY2hpa2F3YW1pc2F0by55YW1h''@;'; put 'put ''bmFzaGkuanAiLCJrYWkueWFtYW5hc2hpLmpwIiwia29mdS55YW1hbmFzaGkuanAiLCJrb3NodS55YW1hbmFzaGkuanAiLCJrb3N1Z2UueWFtYW5hc2hpLmpwIiwibWluYW1pLWFscHMueWFtYW5hc2hpLmpwIiwibWlub2J1LnlhbWFuYXNoaS5qcCIsIm5ha2FtaWNoaS55YW1hbmFzaGkuanAi''@;'; put 'put ''LCJuYW5idS55YW1hbmFzaGkuanAiLCJuYXJ1c2F3YS55YW1hbmFzaGkuanAiLCJuaXJhc2FraS55YW1hbmFzaGkuanAiLCJuaXNoaWthdHN1cmEueWFtYW5hc2hpLmpwIiwib3NoaW5vLnlhbWFuYXNoaS5qcCIsIm90c3VraS55YW1hbmFzaGkuanAiLCJzaG93YS55YW1hbmFzaGkuanAiLCJ0''@;'; put 'put ''YWJheWFtYS55YW1hbmFzaGkuanAiLCJ0c3VydS55YW1hbmFzaGkuanAiLCJ1ZW5vaGFyYS55YW1hbmFzaGkuanAiLCJ5YW1hbmFrYWtvLnlhbWFuYXNoaS5qcCIsInlhbWFuYXNoaS55YW1hbmFzaGkuanAiLCJrZSIsImFjLmtlIiwiY28ua2UiLCJnby5rZSIsImluZm8ua2UiLCJtZS5rZSIs''@;'; put 'put ''Im1vYmkua2UiLCJuZS5rZSIsIm9yLmtlIiwic2Mua2UiLCJrZyIsImNvbS5rZyIsImVkdS5rZyIsImdvdi5rZyIsIm1pbC5rZyIsIm5ldC5rZyIsIm9yZy5rZyIsIioua2giLCJraSIsImJpei5raSIsImNvbS5raSIsImVkdS5raSIsImdvdi5raSIsImluZm8ua2kiLCJuZXQua2kiLCJvcmcu''@;'; put 'put ''a2kiLCJrbSIsImFzcy5rbSIsImNvbS5rbSIsImVkdS5rbSIsImdvdi5rbSIsIm1pbC5rbSIsIm5vbS5rbSIsIm9yZy5rbSIsInByZC5rbSIsInRtLmttIiwiYXNzby5rbSIsImNvb3Aua20iLCJnb3V2LmttIiwibWVkZWNpbi5rbSIsIm5vdGFpcmVzLmttIiwicGhhcm1hY2llbnMua20iLCJw''@;'; put 'put ''cmVzc2Uua20iLCJ2ZXRlcmluYWlyZS5rbSIsImtuIiwiZWR1LmtuIiwiZ292LmtuIiwibmV0LmtuIiwib3JnLmtuIiwia3AiLCJjb20ua3AiLCJlZHUua3AiLCJnb3Yua3AiLCJvcmcua3AiLCJyZXAua3AiLCJ0cmEua3AiLCJrciIsImFjLmtyIiwiY28ua3IiLCJlcy5rciIsImdvLmtyIiwi''@;'; put 'put ''aHMua3IiLCJrZy5rciIsIm1pbC5rciIsIm1zLmtyIiwibmUua3IiLCJvci5rciIsInBlLmtyIiwicmUua3IiLCJzYy5rciIsImJ1c2FuLmtyIiwiY2h1bmdidWsua3IiLCJjaHVuZ25hbS5rciIsImRhZWd1LmtyIiwiZGFlamVvbi5rciIsImdhbmd3b24ua3IiLCJnd2FuZ2p1LmtyIiwiZ3ll''@;'; put 'put ''b25nYnVrLmtyIiwiZ3llb25nZ2kua3IiLCJneWVvbmduYW0ua3IiLCJpbmNoZW9uLmtyIiwiamVqdS5rciIsImplb25idWsua3IiLCJqZW9ubmFtLmtyIiwic2VvdWwua3IiLCJ1bHNhbi5rciIsImt3IiwiY29tLmt3IiwiZWR1Lmt3IiwiZW1iLmt3IiwiZ292Lmt3IiwiaW5kLmt3IiwibmV0''@;'; put 'put ''Lmt3Iiwib3JnLmt3Iiwia3kiLCJjb20ua3kiLCJlZHUua3kiLCJuZXQua3kiLCJvcmcua3kiLCJreiIsImNvbS5reiIsImVkdS5reiIsImdvdi5reiIsIm1pbC5reiIsIm5ldC5reiIsIm9yZy5reiIsImxhIiwiY29tLmxhIiwiZWR1LmxhIiwiZ292LmxhIiwiaW5mby5sYSIsImludC5sYSIs''@;'; put 'put ''Im5ldC5sYSIsIm9yZy5sYSIsInBlci5sYSIsImxiIiwiY29tLmxiIiwiZWR1LmxiIiwiZ292LmxiIiwibmV0LmxiIiwib3JnLmxiIiwibGMiLCJjby5sYyIsImNvbS5sYyIsImVkdS5sYyIsImdvdi5sYyIsIm5ldC5sYyIsIm9yZy5sYyIsImxpIiwibGsiLCJhYy5sayIsImFzc24ubGsiLCJj''@;'; put 'put ''b20ubGsiLCJlZHUubGsiLCJnb3YubGsiLCJncnAubGsiLCJob3RlbC5sayIsImludC5sayIsImx0ZC5sayIsIm5ldC5sayIsIm5nby5sayIsIm9yZy5sayIsInNjaC5sayIsInNvYy5sayIsIndlYi5sayIsImxyIiwiY29tLmxyIiwiZWR1LmxyIiwiZ292LmxyIiwibmV0LmxyIiwib3JnLmxy''@;'; put 'put ''IiwibHMiLCJhYy5scyIsImJpei5scyIsImNvLmxzIiwiZWR1LmxzIiwiZ292LmxzIiwiaW5mby5scyIsIm5ldC5scyIsIm9yZy5scyIsInNjLmxzIiwibHQiLCJnb3YubHQiLCJsdSIsImx2IiwiYXNuLmx2IiwiY29tLmx2IiwiY29uZi5sdiIsImVkdS5sdiIsImdvdi5sdiIsImlkLmx2Iiwi''@;'; put 'put ''bWlsLmx2IiwibmV0Lmx2Iiwib3JnLmx2IiwibHkiLCJjb20ubHkiLCJlZHUubHkiLCJnb3YubHkiLCJpZC5seSIsIm1lZC5seSIsIm5ldC5seSIsIm9yZy5seSIsInBsYy5seSIsInNjaC5seSIsIm1hIiwiYWMubWEiLCJjby5tYSIsImdvdi5tYSIsIm5ldC5tYSIsIm9yZy5tYSIsInByZXNz''@;'; put 'put ''Lm1hIiwibWMiLCJhc3NvLm1jIiwidG0ubWMiLCJtZCIsIm1lIiwiYWMubWUiLCJjby5tZSIsImVkdS5tZSIsImdvdi5tZSIsIml0cy5tZSIsIm5ldC5tZSIsIm9yZy5tZSIsInByaXYubWUiLCJtZyIsImNvLm1nIiwiY29tLm1nIiwiZWR1Lm1nIiwiZ292Lm1nIiwibWlsLm1nIiwibm9tLm1n''@;'; put 'put ''Iiwib3JnLm1nIiwicHJkLm1nIiwibWgiLCJtaWwiLCJtayIsImNvbS5tayIsImVkdS5tayIsImdvdi5tayIsImluZi5tayIsIm5hbWUubWsiLCJuZXQubWsiLCJvcmcubWsiLCJtbCIsImNvbS5tbCIsImVkdS5tbCIsImdvdXYubWwiLCJnb3YubWwiLCJuZXQubWwiLCJvcmcubWwiLCJwcmVz''@;'; put 'put ''c2UubWwiLCIqLm1tIiwibW4iLCJlZHUubW4iLCJnb3YubW4iLCJvcmcubW4iLCJtbyIsImNvbS5tbyIsImVkdS5tbyIsImdvdi5tbyIsIm5ldC5tbyIsIm9yZy5tbyIsIm1vYmkiLCJtcCIsIm1xIiwibXIiLCJnb3YubXIiLCJtcyIsImNvbS5tcyIsImVkdS5tcyIsImdvdi5tcyIsIm5ldC5t''@;'; put 'put ''cyIsIm9yZy5tcyIsIm10IiwiY29tLm10IiwiZWR1Lm10IiwibmV0Lm10Iiwib3JnLm10IiwibXUiLCJhYy5tdSIsImNvLm11IiwiY29tLm11IiwiZ292Lm11IiwibmV0Lm11Iiwib3IubXUiLCJvcmcubXUiLCJtdXNldW0iLCJtdiIsImFlcm8ubXYiLCJiaXoubXYiLCJjb20ubXYiLCJjb29w''@;'; put 'put ''Lm12IiwiZWR1Lm12IiwiZ292Lm12IiwiaW5mby5tdiIsImludC5tdiIsIm1pbC5tdiIsIm11c2V1bS5tdiIsIm5hbWUubXYiLCJuZXQubXYiLCJvcmcubXYiLCJwcm8ubXYiLCJtdyIsImFjLm13IiwiYml6Lm13IiwiY28ubXciLCJjb20ubXciLCJjb29wLm13IiwiZWR1Lm13IiwiZ292Lm13''@;'; put 'put ''IiwiaW50Lm13IiwibmV0Lm13Iiwib3JnLm13IiwibXgiLCJjb20ubXgiLCJlZHUubXgiLCJnb2IubXgiLCJuZXQubXgiLCJvcmcubXgiLCJteSIsImJpei5teSIsImNvbS5teSIsImVkdS5teSIsImdvdi5teSIsIm1pbC5teSIsIm5hbWUubXkiLCJuZXQubXkiLCJvcmcubXkiLCJteiIsImFj''@;'; put 'put ''Lm16IiwiYWR2Lm16IiwiY28ubXoiLCJlZHUubXoiLCJnb3YubXoiLCJtaWwubXoiLCJuZXQubXoiLCJvcmcubXoiLCJuYSIsImFsdC5uYSIsImNvLm5hIiwiY29tLm5hIiwiZ292Lm5hIiwibmV0Lm5hIiwib3JnLm5hIiwibmFtZSIsIm5jIiwiYXNzby5uYyIsIm5vbS5uYyIsIm5lIiwibmV0''@;'; put 'put ''IiwibmYiLCJhcnRzLm5mIiwiY29tLm5mIiwiZmlybS5uZiIsImluZm8ubmYiLCJuZXQubmYiLCJvdGhlci5uZiIsInBlci5uZiIsInJlYy5uZiIsInN0b3JlLm5mIiwid2ViLm5mIiwibmciLCJjb20ubmciLCJlZHUubmciLCJnb3YubmciLCJpLm5nIiwibWlsLm5nIiwibW9iaS5uZyIsIm5h''@;'; put 'put ''bWUubmciLCJuZXQubmciLCJvcmcubmciLCJzY2gubmciLCJuaSIsImFjLm5pIiwiYml6Lm5pIiwiY28ubmkiLCJjb20ubmkiLCJlZHUubmkiLCJnb2IubmkiLCJpbi5uaSIsImluZm8ubmkiLCJpbnQubmkiLCJtaWwubmkiLCJuZXQubmkiLCJub20ubmkiLCJvcmcubmkiLCJ3ZWIubmkiLCJu''@;'; put 'put ''bCIsIm5vIiwiZmhzLm5vIiwiZm9sa2ViaWJsLm5vIiwiZnlsa2VzYmlibC5ubyIsImlkcmV0dC5ubyIsIm11c2V1bS5ubyIsInByaXYubm8iLCJ2Z3Mubm8iLCJkZXAubm8iLCJoZXJhZC5ubyIsImtvbW11bmUubm8iLCJtaWwubm8iLCJzdGF0Lm5vIiwiYWEubm8iLCJhaC5ubyIsImJ1Lm5v''@;'; put 'put ''IiwiZm0ubm8iLCJobC5ubyIsImhtLm5vIiwiamFuLW1heWVuLm5vIiwibXIubm8iLCJubC5ubyIsIm50Lm5vIiwib2Yubm8iLCJvbC5ubyIsIm9zbG8ubm8iLCJybC5ubyIsInNmLm5vIiwic3Qubm8iLCJzdmFsYmFyZC5ubyIsInRtLm5vIiwidHIubm8iLCJ2YS5ubyIsInZmLm5vIiwiZ3Mu''@;'; put 'put ''YWEubm8iLCJncy5haC5ubyIsImdzLmJ1Lm5vIiwiZ3MuZm0ubm8iLCJncy5obC5ubyIsImdzLmhtLm5vIiwiZ3MuamFuLW1heWVuLm5vIiwiZ3MubXIubm8iLCJncy5ubC5ubyIsImdzLm50Lm5vIiwiZ3Mub2Yubm8iLCJncy5vbC5ubyIsImdzLm9zbG8ubm8iLCJncy5ybC5ubyIsImdzLnNm''@;'; put 'put ''Lm5vIiwiZ3Muc3Qubm8iLCJncy5zdmFsYmFyZC5ubyIsImdzLnRtLm5vIiwiZ3MudHIubm8iLCJncy52YS5ubyIsImdzLnZmLm5vIiwiYWtyZWhhbW4ubm8iLCJceGU1a3JlaGFtbi5ubyIsImFsZ2FyZC5ubyIsIlx4ZTVsZ1x4ZTVyZC5ubyIsImFybmEubm8iLCJicm9ubm95c3VuZC5ubyIs''@;'; put 'put ''ImJyXHhmOG5uXHhmOHlzdW5kLm5vIiwiYnJ1bXVuZGRhbC5ubyIsImJyeW5lLm5vIiwiZHJvYmFrLm5vIiwiZHJceGY4YmFrLm5vIiwiZWdlcnN1bmQubm8iLCJmZXRzdW5kLm5vIiwiZmxvcm8ubm8iLCJmbG9yXHhmOC5ubyIsImZyZWRyaWtzdGFkLm5vIiwiaG9ra3N1bmQubm8iLCJob25l''@;'; put 'put ''Zm9zcy5ubyIsImhceGY4bmVmb3NzLm5vIiwiamVzc2hlaW0ubm8iLCJqb3JwZWxhbmQubm8iLCJqXHhmOHJwZWxhbmQubm8iLCJraXJrZW5lcy5ubyIsImtvcGVydmlrLm5vIiwia3Jva3N0YWRlbHZhLm5vIiwibGFuZ2V2YWcubm8iLCJsYW5nZXZceGU1Zy5ubyIsImxlaXJ2aWsubm8iLCJt''@;'; put 'put ''am9uZGFsZW4ubm8iLCJtalx4ZjhuZGFsZW4ubm8iLCJtby1pLXJhbmEubm8iLCJtb3Nqb2VuLm5vIiwibW9zalx4Zjhlbi5ubyIsIm5lc29kZHRhbmdlbi5ubyIsIm9ya2FuZ2VyLm5vIiwib3NveXJvLm5vIiwib3NceGY4eXJvLm5vIiwicmFob2x0Lm5vIiwiclx4ZTVob2x0Lm5vIiwic2Fu''@;'; put 'put ''ZG5lc3Nqb2VuLm5vIiwic2FuZG5lc3NqXHhmOGVuLm5vIiwic2tlZHNtb2tvcnNldC5ubyIsInNsYXR0dW0ubm8iLCJzcGplbGthdmlrLm5vIiwic3RhdGhlbGxlLm5vIiwic3RhdmVybi5ubyIsInN0am9yZGFsc2hhbHNlbi5ubyIsInN0alx4ZjhyZGFsc2hhbHNlbi5ubyIsInRhbmFuZ2Vy''@;'; put 'put ''Lm5vIiwidHJhbmJ5Lm5vIiwidm9zc2V2YW5nZW4ubm8iLCJhYXJib3J0ZS5ubyIsImFlanJpZS5ubyIsImFmam9yZC5ubyIsIlx4ZTVmam9yZC5ubyIsImFnZGVuZXMubm8iLCJuZXMuYWtlcnNodXMubm8iLCJha25vbHVva3RhLm5vIiwiXHhlMWtcdTAxNGJvbHVva3RhLm5vIiwiYWwubm8i''@;'; put 'put ''LCJceGU1bC5ubyIsImFsYWhlYWRqdS5ubyIsIlx4ZTFsYWhlYWRqdS5ubyIsImFsZXN1bmQubm8iLCJceGU1bGVzdW5kLm5vIiwiYWxzdGFoYXVnLm5vIiwiYWx0YS5ubyIsIlx4ZTFsdFx4ZTEubm8iLCJhbHZkYWwubm8iLCJhbWxpLm5vIiwiXHhlNW1saS5ubyIsImFtb3Qubm8iLCJceGU1''@;'; put 'put ''bW90Lm5vIiwiYW5kYXN1b2xvLm5vIiwiYW5kZWJ1Lm5vIiwiYW5kb3kubm8iLCJhbmRceGY4eS5ubyIsImFyZGFsLm5vIiwiXHhlNXJkYWwubm8iLCJhcmVtYXJrLm5vIiwiYXJlbmRhbC5ubyIsIlx4ZTVzLm5vIiwiYXNlcmFsLm5vIiwiXHhlNXNlcmFsLm5vIiwiYXNrZXIubm8iLCJhc2tp''@;'; put 'put ''bS5ubyIsImFza295Lm5vIiwiYXNrXHhmOHkubm8iLCJhc2t2b2xsLm5vIiwiYXNuZXMubm8iLCJceGU1c25lcy5ubyIsImF1ZG5lZGFsbi5ubyIsImF1a3JhLm5vIiwiYXVyZS5ubyIsImF1cmxhbmQubm8iLCJhdXJza29nLWhvbGFuZC5ubyIsImF1cnNrb2ctaFx4ZjhsYW5kLm5vIiwiYXVz''@;'; put 'put ''dGV2b2xsLm5vIiwiYXVzdHJoZWltLm5vIiwiYXZlcm95Lm5vIiwiYXZlclx4Zjh5Lm5vIiwiYmFkYWRkamEubm8iLCJiXHhlNWRceGU1ZGRqXHhlNS5ubyIsImJceGU2cnVtLm5vIiwiYmFoY2F2dW90bmEubm8iLCJiXHhlMWhjYXZ1b3RuYS5ubyIsImJhaGNjYXZ1b3RuYS5ubyIsImJceGUx''@;'; put 'put ''aGNjYXZ1b3RuYS5ubyIsImJhaWRhci5ubyIsImJceGUxaWRceGUxci5ubyIsImJhamRkYXIubm8iLCJiXHhlMWpkZGFyLm5vIiwiYmFsYXQubm8iLCJiXHhlMWxceGUxdC5ubyIsImJhbGVzdHJhbmQubm8iLCJiYWxsYW5nZW4ubm8iLCJiYWxzZmpvcmQubm8iLCJiYW1ibGUubm8iLCJiYXJk''@;'; put 'put ''dS5ubyIsImJhcnVtLm5vIiwiYmF0c2Zqb3JkLm5vIiwiYlx4ZTV0c2Zqb3JkLm5vIiwiYmVhcmFsdmFoa2kubm8iLCJiZWFyYWx2XHhlMWhraS5ubyIsImJlYXJkdS5ubyIsImJlaWFybi5ubyIsImJlcmcubm8iLCJiZXJnZW4ubm8iLCJiZXJsZXZhZy5ubyIsImJlcmxldlx4ZTVnLm5vIiwi''@;'; put 'put ''YmlldmF0Lm5vIiwiYmlldlx4ZTF0Lm5vIiwiYmluZGFsLm5vIiwiYmlya2VuZXMubm8iLCJiamFya295Lm5vIiwiYmphcmtceGY4eS5ubyIsImJqZXJrcmVpbS5ubyIsImJqdWduLm5vIiwiYm9kby5ubyIsImJvZFx4Zjgubm8iLCJib2tuLm5vIiwiYm9tbG8ubm8iLCJiXHhmOG1sby5ubyIs''@;'; put 'put ''ImJyZW1hbmdlci5ubyIsImJyb25ub3kubm8iLCJiclx4Zjhublx4Zjh5Lm5vIiwiYnVkZWpqdS5ubyIsIm5lcy5idXNrZXJ1ZC5ubyIsImJ5Z2xhbmQubm8iLCJieWtsZS5ubyIsImNhaGNlc3VvbG8ubm8iLCJcdTAxMGRceGUxaGNlc3VvbG8ubm8iLCJkYXZ2ZW5qYXJnYS5ubyIsImRhdnZl''@;'; put 'put ''bmpceGUxcmdhLm5vIiwiZGF2dmVzaWlkYS5ubyIsImRlYXRudS5ubyIsImRpZWxkZGFudW9ycmkubm8iLCJkaXZ0YXN2dW9kbmEubm8iLCJkaXZ0dGFzdnVvdG5hLm5vIiwiZG9ubmEubm8iLCJkXHhmOG5uYS5ubyIsImRvdnJlLm5vIiwiZHJhbW1lbi5ubyIsImRyYW5nZWRhbC5ubyIsImR5''@;'; put 'put ''cm95Lm5vIiwiZHlyXHhmOHkubm8iLCJlaWQubm8iLCJlaWRmam9yZC5ubyIsImVpZHNiZXJnLm5vIiwiZWlkc2tvZy5ubyIsImVpZHN2b2xsLm5vIiwiZWlnZXJzdW5kLm5vIiwiZWx2ZXJ1bS5ubyIsImVuZWJha2subm8iLCJlbmdlcmRhbC5ubyIsImV0bmUubm8iLCJldG5lZGFsLm5vIiwi''@;'; put 'put ''ZXZlbmFzc2kubm8iLCJldmVuXHhlMVx1MDE2MVx1MDE2MWkubm8iLCJldmVuZXMubm8iLCJldmplLW9nLWhvcm5uZXMubm8iLCJmYXJzdW5kLm5vIiwiZmF1c2tlLm5vIiwiZmVkamUubm8iLCJmZXQubm8iLCJmaW5ub3kubm8iLCJmaW5uXHhmOHkubm8iLCJmaXRqYXIubm8iLCJmamFsZXIu''@;'; put 'put ''bm8iLCJmamVsbC5ubyIsImZsYS5ubyIsImZsXHhlNS5ubyIsImZsYWtzdGFkLm5vIiwiZmxhdGFuZ2VyLm5vIiwiZmxla2tlZmpvcmQubm8iLCJmbGVzYmVyZy5ubyIsImZsb3JhLm5vIiwiZm9sbGRhbC5ubyIsImZvcmRlLm5vIiwiZlx4ZjhyZGUubm8iLCJmb3JzYW5kLm5vIiwiZm9zbmVz''@;'; put 'put ''Lm5vIiwiZnJceGU2bmEubm8iLCJmcmFuYS5ubyIsImZyZWkubm8iLCJmcm9nbi5ubyIsImZyb2xhbmQubm8iLCJmcm9zdGEubm8iLCJmcm95YS5ubyIsImZyXHhmOHlhLm5vIiwiZnVvaXNrdS5ubyIsImZ1b3Nza28ubm8iLCJmdXNhLm5vIiwiZnlyZXNkYWwubm8iLCJnYWl2dW90bmEubm8i''@;'; put 'put ''LCJnXHhlMWl2dW90bmEubm8iLCJnYWxzYS5ubyIsImdceGUxbHNceGUxLm5vIiwiZ2FtdmlrLm5vIiwiZ2FuZ2F2aWlrYS5ubyIsImdceGUxXHUwMTRiZ2F2aWlrYS5ubyIsImdhdWxhci5ubyIsImdhdXNkYWwubm8iLCJnaWVodGF2dW9hdG5hLm5vIiwiZ2lsZGVza2FsLm5vIiwiZ2lsZGVz''@;'; put 'put ''a1x4ZTVsLm5vIiwiZ2lza2Uubm8iLCJnamVtbmVzLm5vIiwiZ2plcmRydW0ubm8iLCJnamVyc3RhZC5ubyIsImdqZXNkYWwubm8iLCJnam92aWsubm8iLCJnalx4Zjh2aWsubm8iLCJnbG9wcGVuLm5vIiwiZ29sLm5vIiwiZ3Jhbi5ubyIsImdyYW5lLm5vIiwiZ3JhbnZpbi5ubyIsImdyYXRh''@;'; put 'put ''bmdlbi5ubyIsImdyaW1zdGFkLm5vIiwiZ3Jvbmcubm8iLCJncnVlLm5vIiwiZ3VsZW4ubm8iLCJndW92ZGFnZWFpZG51Lm5vIiwiaGEubm8iLCJoXHhlNS5ubyIsImhhYm1lci5ubyIsImhceGUxYm1lci5ubyIsImhhZHNlbC5ubyIsImhceGU2Z2Vib3N0YWQubm8iLCJoYWdlYm9zdGFkLm5v''@;'; put 'put ''IiwiaGFsZGVuLm5vIiwiaGFsc2Eubm8iLCJoYW1hci5ubyIsImhhbWFyb3kubm8iLCJoYW1tYXJmZWFzdGEubm8iLCJoXHhlMW1tXHhlMXJmZWFzdGEubm8iLCJoYW1tZXJmZXN0Lm5vIiwiaGFwbWlyLm5vIiwiaFx4ZTFwbWlyLm5vIiwiaGFyYW0ubm8iLCJoYXJlaWQubm8iLCJoYXJzdGFk''@;'; put 'put ''Lm5vIiwiaGFzdmlrLm5vIiwiaGF0dGZqZWxsZGFsLm5vIiwiaGF1Z2VzdW5kLm5vIiwib3MuaGVkbWFyay5ubyIsInZhbGVyLmhlZG1hcmsubm8iLCJ2XHhlNWxlci5oZWRtYXJrLm5vIiwiaGVtbmUubm8iLCJoZW1uZXMubm8iLCJoZW1zZWRhbC5ubyIsImhpdHJhLm5vIiwiaGphcnRkYWwu''@;'; put 'put ''bm8iLCJoamVsbWVsYW5kLm5vIiwiaG9ib2wubm8iLCJob2JceGY4bC5ubyIsImhvZi5ubyIsImhvbC5ubyIsImhvbGUubm8iLCJob2xtZXN0cmFuZC5ubyIsImhvbHRhbGVuLm5vIiwiaG9sdFx4ZTVsZW4ubm8iLCJvcy5ob3JkYWxhbmQubm8iLCJob3JuaW5kYWwubm8iLCJob3J0ZW4ubm8i''@;'; put 'put ''LCJob3lhbmdlci5ubyIsImhceGY4eWFuZ2VyLm5vIiwiaG95bGFuZGV0Lm5vIiwiaFx4Zjh5bGFuZGV0Lm5vIiwiaHVyZGFsLm5vIiwiaHVydW0ubm8iLCJodmFsZXIubm8iLCJoeWxsZXN0YWQubm8iLCJpYmVzdGFkLm5vIiwiaW5kZXJveS5ubyIsImluZGVyXHhmOHkubm8iLCJpdmVsYW5k''@;'; put 'put ''Lm5vIiwiaXZndS5ubyIsImpldm5ha2VyLm5vIiwiam9sc3Rlci5ubyIsImpceGY4bHN0ZXIubm8iLCJqb25kYWwubm8iLCJrYWZqb3JkLm5vIiwia1x4ZTVmam9yZC5ubyIsImthcmFzam9oa2Eubm8iLCJrXHhlMXJceGUxXHUwMTYxam9oa2Eubm8iLCJrYXJhc2pvay5ubyIsImthcmxzb3ku''@;'; put 'put ''bm8iLCJrYXJtb3kubm8iLCJrYXJtXHhmOHkubm8iLCJrYXV0b2tlaW5vLm5vIiwia2xhYnUubm8iLCJrbFx4ZTZidS5ubyIsImtsZXBwLm5vIiwia29uZ3NiZXJnLm5vIiwia29uZ3N2aW5nZXIubm8iLCJrcmFhbmdoa2Uubm8iLCJrclx4ZTVhbmdoa2Uubm8iLCJrcmFnZXJvLm5vIiwia3Jh''@;'; put 'put ''Z2VyXHhmOC5ubyIsImtyaXN0aWFuc2FuZC5ubyIsImtyaXN0aWFuc3VuZC5ubyIsImtyb2RzaGVyYWQubm8iLCJrclx4Zjhkc2hlcmFkLm5vIiwia3ZceGU2ZmpvcmQubm8iLCJrdlx4ZTZuYW5nZW4ubm8iLCJrdmFmam9yZC5ubyIsImt2YWxzdW5kLm5vIiwia3ZhbS5ubyIsImt2YW5hbmdl''@;'; put 'put ''bi5ubyIsImt2aW5lc2RhbC5ubyIsImt2aW5uaGVyYWQubm8iLCJrdml0ZXNlaWQubm8iLCJrdml0c295Lm5vIiwia3ZpdHNceGY4eS5ubyIsImxhYWtlc3Z1ZW1pZS5ubyIsImxceGU2cmRhbC5ubyIsImxhaHBwaS5ubyIsImxceGUxaHBwaS5ubyIsImxhcmRhbC5ubyIsImxhcnZpay5ubyIs''@;'; put 'put ''ImxhdmFnaXMubm8iLCJsYXZhbmdlbi5ubyIsImxlYW5nYXZpaWthLm5vIiwibGVhXHUwMTRiZ2F2aWlrYS5ubyIsImxlYmVzYnkubm8iLCJsZWlrYW5nZXIubm8iLCJsZWlyZmpvcmQubm8iLCJsZWthLm5vIiwibGVrc3Zpay5ubyIsImxlbnZpay5ubyIsImxlcmRhbC5ubyIsImxlc2phLm5v''@;'; put 'put ''IiwibGV2YW5nZXIubm8iLCJsaWVyLm5vIiwibGllcm5lLm5vIiwibGlsbGVoYW1tZXIubm8iLCJsaWxsZXNhbmQubm8iLCJsaW5kYXMubm8iLCJsaW5kXHhlNXMubm8iLCJsaW5kZXNuZXMubm8iLCJsb2FiYXQubm8iLCJsb2FiXHhlMXQubm8iLCJsb2Rpbmdlbi5ubyIsImxceGY4ZGluZ2Vu''@;'; put 'put ''Lm5vIiwibG9tLm5vIiwibG9wcGEubm8iLCJsb3JlbnNrb2cubm8iLCJsXHhmOHJlbnNrb2cubm8iLCJsb3Rlbi5ubyIsImxceGY4dGVuLm5vIiwibHVuZC5ubyIsImx1bm5lci5ubyIsImx1cm95Lm5vIiwibHVyXHhmOHkubm8iLCJsdXN0ZXIubm8iLCJseW5nZGFsLm5vIiwibHluZ2VuLm5v''@;'; put 'put ''IiwibWFsYXR2dW9wbWkubm8iLCJtXHhlMWxhdHZ1b3BtaS5ubyIsIm1hbHNlbHYubm8iLCJtXHhlNWxzZWx2Lm5vIiwibWFsdmlrLm5vIiwibWFuZGFsLm5vIiwibWFya2VyLm5vIiwibWFybmFyZGFsLm5vIiwibWFzZmpvcmRlbi5ubyIsIm1hc295Lm5vIiwibVx4ZTVzXHhmOHkubm8iLCJt''@;'; put 'put ''YXR0YS12YXJqamF0Lm5vIiwibVx4ZTF0dGEtdlx4ZTFyamphdC5ubyIsIm1lbGFuZC5ubyIsIm1lbGRhbC5ubyIsIm1lbGh1cy5ubyIsIm1lbG95Lm5vIiwibWVsXHhmOHkubm8iLCJtZXJha2VyLm5vIiwibWVyXHhlNWtlci5ubyIsIm1pZHN1bmQubm8iLCJtaWR0cmUtZ2F1bGRhbC5ubyIs''@;'; put 'put ''Im1vYXJla2Uubm8iLCJtb1x4ZTVyZWtlLm5vIiwibW9kYWxlbi5ubyIsIm1vZHVtLm5vIiwibW9sZGUubm8iLCJoZXJveS5tb3JlLW9nLXJvbXNkYWwubm8iLCJzYW5kZS5tb3JlLW9nLXJvbXNkYWwubm8iLCJoZXJceGY4eS5tXHhmOHJlLW9nLXJvbXNkYWwubm8iLCJzYW5kZS5tXHhmOHJl''@;'; put 'put ''LW9nLXJvbXNkYWwubm8iLCJtb3NrZW5lcy5ubyIsIm1vc3Mubm8iLCJtb3N2aWsubm8iLCJtdW9zYXQubm8iLCJtdW9zXHhlMXQubm8iLCJuYWFtZXNqZXZ1ZW1pZS5ubyIsIm5ceGU1XHhlNW1lc2pldnVlbWllLm5vIiwiblx4ZTZyXHhmOHkubm8iLCJuYW1kYWxzZWlkLm5vIiwibmFtc29z''@;'; put 'put ''Lm5vIiwibmFtc3Nrb2dhbi5ubyIsIm5hbm5lc3RhZC5ubyIsIm5hcm95Lm5vIiwibmFydmlpa2Eubm8iLCJuYXJ2aWsubm8iLCJuYXVzdGRhbC5ubyIsIm5hdnVvdG5hLm5vIiwiblx4ZTF2dW90bmEubm8iLCJuZWRyZS1laWtlci5ubyIsIm5lc25hLm5vIiwibmVzb2RkZW4ubm8iLCJuZXNz''@;'; put 'put ''ZWJ5Lm5vIiwibmVzc2V0Lm5vIiwibmlzc2VkYWwubm8iLCJuaXR0ZWRhbC5ubyIsIm5vcmQtYXVyZGFsLm5vIiwibm9yZC1mcm9uLm5vIiwibm9yZC1vZGFsLm5vIiwibm9yZGRhbC5ubyIsIm5vcmRrYXBwLm5vIiwiYm8ubm9yZGxhbmQubm8iLCJiXHhmOC5ub3JkbGFuZC5ubyIsImhlcm95''@;'; put 'put ''Lm5vcmRsYW5kLm5vIiwiaGVyXHhmOHkubm9yZGxhbmQubm8iLCJub3JkcmUtbGFuZC5ubyIsIm5vcmRyZWlzYS5ubyIsIm5vcmUtb2ctdXZkYWwubm8iLCJub3RvZGRlbi5ubyIsIm5vdHRlcm95Lm5vIiwiblx4Zjh0dGVyXHhmOHkubm8iLCJvZGRhLm5vIiwib2tzbmVzLm5vIiwiXHhmOGtz''@;'; put 'put ''bmVzLm5vIiwib21hc3Z1b3RuYS5ubyIsIm9wcGRhbC5ubyIsIm9wcGVnYXJkLm5vIiwib3BwZWdceGU1cmQubm8iLCJvcmtkYWwubm8iLCJvcmxhbmQubm8iLCJceGY4cmxhbmQubm8iLCJvcnNrb2cubm8iLCJceGY4cnNrb2cubm8iLCJvcnN0YS5ubyIsIlx4Zjhyc3RhLm5vIiwib3Nlbi5u''@;'; put 'put ''byIsIm9zdGVyb3kubm8iLCJvc3Rlclx4Zjh5Lm5vIiwidmFsZXIub3N0Zm9sZC5ubyIsInZceGU1bGVyLlx4ZjhzdGZvbGQubm8iLCJvc3RyZS10b3Rlbi5ubyIsIlx4ZjhzdHJlLXRvdGVuLm5vIiwib3ZlcmhhbGxhLm5vIiwib3ZyZS1laWtlci5ubyIsIlx4Zjh2cmUtZWlrZXIubm8iLCJv''@;'; put 'put ''eWVyLm5vIiwiXHhmOHllci5ubyIsIm95Z2FyZGVuLm5vIiwiXHhmOHlnYXJkZW4ubm8iLCJveXN0cmUtc2xpZHJlLm5vIiwiXHhmOHlzdHJlLXNsaWRyZS5ubyIsInBvcnNhbmdlci5ubyIsInBvcnNhbmd1Lm5vIiwicG9yc1x4ZTFcdTAxNGJndS5ubyIsInBvcnNncnVubi5ubyIsInJhZGUu''@;'; put 'put ''bm8iLCJyXHhlNWRlLm5vIiwicmFkb3kubm8iLCJyYWRceGY4eS5ubyIsInJceGU2bGluZ2VuLm5vIiwicmFoa2tlcmF2anUubm8iLCJyXHhlMWhra2VyXHhlMXZqdS5ubyIsInJhaXNhLm5vIiwiclx4ZTFpc2Eubm8iLCJyYWtrZXN0YWQubm8iLCJyYWxpbmdlbi5ubyIsInJhbmEubm8iLCJy''@;'; put 'put ''YW5kYWJlcmcubm8iLCJyYXVtYS5ubyIsInJlbmRhbGVuLm5vIiwicmVubmVidS5ubyIsInJlbm5lc295Lm5vIiwicmVubmVzXHhmOHkubm8iLCJyaW5kYWwubm8iLCJyaW5nZWJ1Lm5vIiwicmluZ2VyaWtlLm5vIiwicmluZ3Nha2VyLm5vIiwicmlzb3Iubm8iLCJyaXNceGY4ci5ubyIsInJp''@;'; put 'put ''c3NhLm5vIiwicm9hbi5ubyIsInJvZG95Lm5vIiwiclx4ZjhkXHhmOHkubm8iLCJyb2xsYWcubm8iLCJyb21zYS5ubyIsInJvbXNrb2cubm8iLCJyXHhmOG1za29nLm5vIiwicm9yb3Mubm8iLCJyXHhmOHJvcy5ubyIsInJvc3Qubm8iLCJyXHhmOHN0Lm5vIiwicm95a2VuLm5vIiwiclx4Zjh5''@;'; put 'put ''a2VuLm5vIiwicm95cnZpay5ubyIsInJceGY4eXJ2aWsubm8iLCJydW92YXQubm8iLCJyeWdnZS5ubyIsInNhbGFuZ2VuLm5vIiwic2FsYXQubm8iLCJzXHhlMWxhdC5ubyIsInNceGUxbFx4ZTF0Lm5vIiwic2FsdGRhbC5ubyIsInNhbW5hbmdlci5ubyIsInNhbmRlZmpvcmQubm8iLCJzYW5k''@;'; put 'put ''bmVzLm5vIiwic2FuZG95Lm5vIiwic2FuZFx4Zjh5Lm5vIiwic2FycHNib3JnLm5vIiwic2F1ZGEubm8iLCJzYXVoZXJhZC5ubyIsInNlbC5ubyIsInNlbGJ1Lm5vIiwic2VsamUubm8iLCJzZWxqb3JkLm5vIiwic2llbGxhay5ubyIsInNpZ2RhbC5ubyIsInNpbGphbi5ubyIsInNpcmRhbC5u''@;'; put 'put ''byIsInNrYW5pdC5ubyIsInNrXHhlMW5pdC5ubyIsInNrYW5sYW5kLm5vIiwic2tceGU1bmxhbmQubm8iLCJza2F1bi5ubyIsInNrZWRzbW8ubm8iLCJza2kubm8iLCJza2llbi5ubyIsInNraWVydmEubm8iLCJza2llcnZceGUxLm5vIiwic2tpcHR2ZXQubm8iLCJza2phay5ubyIsInNralx4''@;'; put 'put ''ZTVrLm5vIiwic2tqZXJ2b3kubm8iLCJza2plcnZceGY4eS5ubyIsInNrb2RqZS5ubyIsInNtb2xhLm5vIiwic21ceGY4bGEubm8iLCJzbmFhc2Uubm8iLCJzblx4ZTVhc2Uubm8iLCJzbmFzYS5ubyIsInNuXHhlNXNhLm5vIiwic25pbGxmam9yZC5ubyIsInNub2FzYS5ubyIsInNvZ25kYWwu''@;'; put 'put ''bm8iLCJzb2duZS5ubyIsInNceGY4Z25lLm5vIiwic29rbmRhbC5ubyIsInNvbGEubm8iLCJzb2x1bmQubm8iLCJzb21uYS5ubyIsInNceGY4bW5hLm5vIiwic29uZHJlLWxhbmQubm8iLCJzXHhmOG5kcmUtbGFuZC5ubyIsInNvbmdkYWxlbi5ubyIsInNvci1hdXJkYWwubm8iLCJzXHhmOHIt''@;'; put 'put ''YXVyZGFsLm5vIiwic29yLWZyb24ubm8iLCJzXHhmOHItZnJvbi5ubyIsInNvci1vZGFsLm5vIiwic1x4ZjhyLW9kYWwubm8iLCJzb3ItdmFyYW5nZXIubm8iLCJzXHhmOHItdmFyYW5nZXIubm8iLCJzb3Jmb2xkLm5vIiwic1x4ZjhyZm9sZC5ubyIsInNvcnJlaXNhLm5vIiwic1x4ZjhycmVp''@;'; put 'put ''c2Eubm8iLCJzb3J0bGFuZC5ubyIsInNvcnVtLm5vIiwic1x4ZjhydW0ubm8iLCJzcHlkZWJlcmcubm8iLCJzdGFuZ2Uubm8iLCJzdGF2YW5nZXIubm8iLCJzdGVpZ2VuLm5vIiwic3RlaW5ramVyLm5vIiwic3Rqb3JkYWwubm8iLCJzdGpceGY4cmRhbC5ubyIsInN0b2trZS5ubyIsInN0b3It''@;'; put 'put ''ZWx2ZGFsLm5vIiwic3RvcmQubm8iLCJzdG9yZGFsLm5vIiwic3RvcmZqb3JkLm5vIiwic3RyYW5kLm5vIiwic3RyYW5kYS5ubyIsInN0cnluLm5vIiwic3VsYS5ubyIsInN1bGRhbC5ubyIsInN1bmQubm8iLCJzdW5uZGFsLm5vIiwic3VybmFkYWwubm8iLCJzdmVpby5ubyIsInN2ZWx2aWsu''@;'; put 'put ''bm8iLCJzeWtreWx2ZW4ubm8iLCJ0YW5hLm5vIiwiYm8udGVsZW1hcmsubm8iLCJiXHhmOC50ZWxlbWFyay5ubyIsInRpbWUubm8iLCJ0aW5ndm9sbC5ubyIsInRpbm4ubm8iLCJ0amVsZHN1bmQubm8iLCJ0am9tZS5ubyIsInRqXHhmOG1lLm5vIiwidG9ra2Uubm8iLCJ0b2xnYS5ubyIsInRv''@;'; put 'put ''bnNiZXJnLm5vIiwidFx4Zjhuc2Jlcmcubm8iLCJ0b3Jza2VuLm5vIiwidHJceGU2bmEubm8iLCJ0cmFuYS5ubyIsInRyYW5veS5ubyIsInRyYW5ceGY4eS5ubyIsInRyb2FuZGluLm5vIiwidHJvZ3N0YWQubm8iLCJ0clx4Zjhnc3RhZC5ubyIsInRyb21zYS5ubyIsInRyb21zby5ubyIsInRy''@;'; put 'put ''b21zXHhmOC5ubyIsInRyb25kaGVpbS5ubyIsInRyeXNpbC5ubyIsInR2ZWRlc3RyYW5kLm5vIiwidHlkYWwubm8iLCJ0eW5zZXQubm8iLCJ0eXNmam9yZC5ubyIsInR5c25lcy5ubyIsInR5c3ZceGU2ci5ubyIsInR5c3Zhci5ubyIsInVsbGVuc2FrZXIubm8iLCJ1bGxlbnN2YW5nLm5vIiwi''@;'; put 'put ''dWx2aWsubm8iLCJ1bmphcmdhLm5vIiwidW5qXHhlMXJnYS5ubyIsInV0c2lyYS5ubyIsInZhYXBzdGUubm8iLCJ2YWRzby5ubyIsInZhZHNceGY4Lm5vIiwidlx4ZTZyXHhmOHkubm8iLCJ2YWdhLm5vIiwidlx4ZTVnXHhlNS5ubyIsInZhZ2FuLm5vIiwidlx4ZTVnYW4ubm8iLCJ2YWdzb3ku''@;'; put 'put ''bm8iLCJ2XHhlNWdzXHhmOHkubm8iLCJ2YWtzZGFsLm5vIiwidmFsbGUubm8iLCJ2YW5nLm5vIiwidmFueWx2ZW4ubm8iLCJ2YXJkby5ubyIsInZhcmRceGY4Lm5vIiwidmFyZ2dhdC5ubyIsInZceGUxcmdnXHhlMXQubm8iLCJ2YXJveS5ubyIsInZlZnNuLm5vIiwidmVnYS5ubyIsInZlZ2Fy''@;'; put 'put ''c2hlaS5ubyIsInZlZ1x4ZTVyc2hlaS5ubyIsInZlbm5lc2xhLm5vIiwidmVyZGFsLm5vIiwidmVycmFuLm5vIiwidmVzdGJ5Lm5vIiwic2FuZGUudmVzdGZvbGQubm8iLCJ2ZXN0bmVzLm5vIiwidmVzdHJlLXNsaWRyZS5ubyIsInZlc3RyZS10b3Rlbi5ubyIsInZlc3R2YWdveS5ubyIsInZl''@;'; put 'put ''c3R2XHhlNWdceGY4eS5ubyIsInZldmVsc3RhZC5ubyIsInZpay5ubyIsInZpa25hLm5vIiwidmluZGFmam9yZC5ubyIsInZvYWdhdC5ubyIsInZvbGRhLm5vIiwidm9zcy5ubyIsIioubnAiLCJuciIsImJpei5uciIsImNvbS5uciIsImVkdS5uciIsImdvdi5uciIsImluZm8ubnIiLCJuZXQu''@;'; put 'put ''bnIiLCJvcmcubnIiLCJudSIsIm56IiwiYWMubnoiLCJjby5ueiIsImNyaS5ueiIsImdlZWsubnoiLCJnZW4ubnoiLCJnb3Z0Lm56IiwiaGVhbHRoLm56IiwiaXdpLm56Iiwia2l3aS5ueiIsIm1hb3JpLm56IiwibVx1MDEwMW9yaS5ueiIsIm1pbC5ueiIsIm5ldC5ueiIsIm9yZy5ueiIsInBh''@;'; put 'put ''cmxpYW1lbnQubnoiLCJzY2hvb2wubnoiLCJvbSIsImNvLm9tIiwiY29tLm9tIiwiZWR1Lm9tIiwiZ292Lm9tIiwibWVkLm9tIiwibXVzZXVtLm9tIiwibmV0Lm9tIiwib3JnLm9tIiwicHJvLm9tIiwib25pb24iLCJvcmciLCJwYSIsImFiby5wYSIsImFjLnBhIiwiY29tLnBhIiwiZWR1LnBh''@;'; put 'put ''IiwiZ29iLnBhIiwiaW5nLnBhIiwibWVkLnBhIiwibmV0LnBhIiwibm9tLnBhIiwib3JnLnBhIiwic2xkLnBhIiwicGUiLCJjb20ucGUiLCJlZHUucGUiLCJnb2IucGUiLCJtaWwucGUiLCJuZXQucGUiLCJub20ucGUiLCJvcmcucGUiLCJwZiIsImNvbS5wZiIsImVkdS5wZiIsIm9yZy5wZiIs''@;'; put 'put ''IioucGciLCJwaCIsImNvbS5waCIsImVkdS5waCIsImdvdi5waCIsImkucGgiLCJtaWwucGgiLCJuZXQucGgiLCJuZ28ucGgiLCJvcmcucGgiLCJwayIsImFjLnBrIiwiYml6LnBrIiwiY29tLnBrIiwiZWR1LnBrIiwiZmFtLnBrIiwiZ2twLnBrIiwiZ29iLnBrIiwiZ29nLnBrIiwiZ29rLnBr''@;'; put 'put ''IiwiZ29uLnBrIiwiZ29wLnBrIiwiZ29zLnBrIiwiZ292LnBrIiwibmV0LnBrIiwib3JnLnBrIiwid2ViLnBrIiwicGwiLCJjb20ucGwiLCJuZXQucGwiLCJvcmcucGwiLCJhZ3JvLnBsIiwiYWlkLnBsIiwiYXRtLnBsIiwiYXV0by5wbCIsImJpei5wbCIsImVkdS5wbCIsImdtaW5hLnBsIiwi''@;'; put 'put ''Z3NtLnBsIiwiaW5mby5wbCIsIm1haWwucGwiLCJtZWRpYS5wbCIsIm1pYXN0YS5wbCIsIm1pbC5wbCIsIm5pZXJ1Y2hvbW9zY2kucGwiLCJub20ucGwiLCJwYy5wbCIsInBvd2lhdC5wbCIsInByaXYucGwiLCJyZWFsZXN0YXRlLnBsIiwicmVsLnBsIiwic2V4LnBsIiwic2hvcC5wbCIsInNr''@;'; put 'put ''bGVwLnBsIiwic29zLnBsIiwic3prb2xhLnBsIiwidGFyZ2kucGwiLCJ0bS5wbCIsInRvdXJpc20ucGwiLCJ0cmF2ZWwucGwiLCJ0dXJ5c3R5a2EucGwiLCJnb3YucGwiLCJhcC5nb3YucGwiLCJncml3Lmdvdi5wbCIsImljLmdvdi5wbCIsImlzLmdvdi5wbCIsImttcHNwLmdvdi5wbCIsImtv''@;'; put 'put ''bnN1bGF0Lmdvdi5wbCIsImtwcHNwLmdvdi5wbCIsImt3cC5nb3YucGwiLCJrd3BzcC5nb3YucGwiLCJtdXAuZ292LnBsIiwibXcuZ292LnBsIiwib2lhLmdvdi5wbCIsIm9pcm0uZ292LnBsIiwib2tlLmdvdi5wbCIsIm9vdy5nb3YucGwiLCJvc2Noci5nb3YucGwiLCJvdW0uZ292LnBsIiwi''@;'; put 'put ''cGEuZ292LnBsIiwicGluYi5nb3YucGwiLCJwaXcuZ292LnBsIiwicG8uZ292LnBsIiwicHIuZ292LnBsIiwicHNwLmdvdi5wbCIsInBzc2UuZ292LnBsIiwicHVwLmdvdi5wbCIsInJ6Z3cuZ292LnBsIiwic2EuZ292LnBsIiwic2RuLmdvdi5wbCIsInNrby5nb3YucGwiLCJzby5nb3YucGwi''@;'; put 'put ''LCJzci5nb3YucGwiLCJzdGFyb3N0d28uZ292LnBsIiwidWcuZ292LnBsIiwidWdpbS5nb3YucGwiLCJ1bS5nb3YucGwiLCJ1bWlnLmdvdi5wbCIsInVwb3cuZ292LnBsIiwidXBwby5nb3YucGwiLCJ1cy5nb3YucGwiLCJ1dy5nb3YucGwiLCJ1enMuZ292LnBsIiwid2lmLmdvdi5wbCIsIndp''@;'; put 'put ''aWguZ292LnBsIiwid2luYi5nb3YucGwiLCJ3aW9zLmdvdi5wbCIsIndpdGQuZ292LnBsIiwid2l3Lmdvdi5wbCIsIndrei5nb3YucGwiLCJ3c2EuZ292LnBsIiwid3Nrci5nb3YucGwiLCJ3c3NlLmdvdi5wbCIsInd1b3ouZ292LnBsIiwid3ptaXV3Lmdvdi5wbCIsInpwLmdvdi5wbCIsInpw''@;'; put 'put ''aXNkbi5nb3YucGwiLCJhdWd1c3Rvdy5wbCIsImJhYmlhLWdvcmEucGwiLCJiZWR6aW4ucGwiLCJiZXNraWR5LnBsIiwiYmlhbG93aWV6YS5wbCIsImJpYWx5c3Rvay5wbCIsImJpZWxhd2EucGwiLCJiaWVzemN6YWR5LnBsIiwiYm9sZXNsYXdpZWMucGwiLCJieWRnb3N6Y3oucGwiLCJieXRv''@;'; put 'put ''bS5wbCIsImNpZXN6eW4ucGwiLCJjemVsYWR6LnBsIiwiY3plc3QucGwiLCJkbHVnb2xla2EucGwiLCJlbGJsYWcucGwiLCJlbGsucGwiLCJnbG9nb3cucGwiLCJnbmllem5vLnBsIiwiZ29ybGljZS5wbCIsImdyYWpld28ucGwiLCJpbGF3YS5wbCIsImphd29yem5vLnBsIiwiamVsZW5pYS1n''@;'; put 'put ''b3JhLnBsIiwiamdvcmEucGwiLCJrYWxpc3oucGwiLCJrYXJwYWN6LnBsIiwia2FydHV6eS5wbCIsImthc3p1YnkucGwiLCJrYXRvd2ljZS5wbCIsImthemltaWVyei1kb2xueS5wbCIsImtlcG5vLnBsIiwia2V0cnp5bi5wbCIsImtsb2R6a28ucGwiLCJrb2JpZXJ6eWNlLnBsIiwia29sb2Jy''@;'; put 'put ''emVnLnBsIiwia29uaW4ucGwiLCJrb25za293b2xhLnBsIiwia3V0bm8ucGwiLCJsYXB5LnBsIiwibGVib3JrLnBsIiwibGVnbmljYS5wbCIsImxlemFqc2sucGwiLCJsaW1hbm93YS5wbCIsImxvbXphLnBsIiwibG93aWN6LnBsIiwibHViaW4ucGwiLCJsdWtvdy5wbCIsIm1hbGJvcmsucGwi''@;'; put 'put ''LCJtYWxvcG9sc2thLnBsIiwibWF6b3dzemUucGwiLCJtYXp1cnkucGwiLCJtaWVsZWMucGwiLCJtaWVsbm8ucGwiLCJtcmFnb3dvLnBsIiwibmFrbG8ucGwiLCJub3dhcnVkYS5wbCIsIm55c2EucGwiLCJvbGF3YS5wbCIsIm9sZWNrby5wbCIsIm9sa3Vzei5wbCIsIm9sc3p0eW4ucGwiLCJv''@;'; put 'put ''cG9jem5vLnBsIiwib3BvbGUucGwiLCJvc3Ryb2RhLnBsIiwib3N0cm9sZWthLnBsIiwib3N0cm93aWVjLnBsIiwib3N0cm93d2xrcC5wbCIsInBpbGEucGwiLCJwaXN6LnBsIiwicG9kaGFsZS5wbCIsInBvZGxhc2llLnBsIiwicG9sa293aWNlLnBsIiwicG9tb3Jza2llLnBsIiwicG9tb3J6''@;'; put 'put ''ZS5wbCIsInByb2Nob3dpY2UucGwiLCJwcnVzemtvdy5wbCIsInByemV3b3Jzay5wbCIsInB1bGF3eS5wbCIsInJhZG9tLnBsIiwicmF3YS1tYXoucGwiLCJyeWJuaWsucGwiLCJyemVzem93LnBsIiwic2Fub2sucGwiLCJzZWpueS5wbCIsInNrb2N6b3cucGwiLCJzbGFzay5wbCIsInNsdXBz''@;'; put 'put ''ay5wbCIsInNvc25vd2llYy5wbCIsInN0YWxvd2Etd29sYS5wbCIsInN0YXJhY2hvd2ljZS5wbCIsInN0YXJnYXJkLnBsIiwic3V3YWxraS5wbCIsInN3aWRuaWNhLnBsIiwic3dpZWJvZHppbi5wbCIsInN3aW5vdWpzY2llLnBsIiwic3pjemVjaW4ucGwiLCJzemN6eXRuby5wbCIsInRhcm5v''@;'; put 'put ''YnJ6ZWcucGwiLCJ0Z29yeS5wbCIsInR1cmVrLnBsIiwidHljaHkucGwiLCJ1c3RrYS5wbCIsIndhbGJyenljaC5wbCIsIndhcm1pYS5wbCIsIndhcnN6YXdhLnBsIiwid2F3LnBsIiwid2Vncm93LnBsIiwid2llbHVuLnBsIiwid2xvY2wucGwiLCJ3bG9jbGF3ZWsucGwiLCJ3b2R6aXNsYXcu''@;'; put 'put ''cGwiLCJ3b2xvbWluLnBsIiwid3JvY2xhdy5wbCIsInphY2hwb21vci5wbCIsInphZ2FuLnBsIiwiemFyb3cucGwiLCJ6Z29yYS5wbCIsInpnb3J6ZWxlYy5wbCIsInBtIiwicG4iLCJjby5wbiIsImVkdS5wbiIsImdvdi5wbiIsIm5ldC5wbiIsIm9yZy5wbiIsInBvc3QiLCJwciIsImJpei5w''@;'; put 'put ''ciIsImNvbS5wciIsImVkdS5wciIsImdvdi5wciIsImluZm8ucHIiLCJpc2xhLnByIiwibmFtZS5wciIsIm5ldC5wciIsIm9yZy5wciIsInByby5wciIsImFjLnByIiwiZXN0LnByIiwicHJvZi5wciIsInBybyIsImFhYS5wcm8iLCJhY2EucHJvIiwiYWNjdC5wcm8iLCJhdm9jYXQucHJvIiwi''@;'; put 'put ''YmFyLnBybyIsImNwYS5wcm8iLCJlbmcucHJvIiwianVyLnBybyIsImxhdy5wcm8iLCJtZWQucHJvIiwicmVjaHQucHJvIiwicHMiLCJjb20ucHMiLCJlZHUucHMiLCJnb3YucHMiLCJuZXQucHMiLCJvcmcucHMiLCJwbG8ucHMiLCJzZWMucHMiLCJwdCIsImNvbS5wdCIsImVkdS5wdCIsImdv''@;'; put 'put ''di5wdCIsImludC5wdCIsIm5ldC5wdCIsIm5vbWUucHQiLCJvcmcucHQiLCJwdWJsLnB0IiwicHciLCJiZWxhdS5wdyIsImNvLnB3IiwiZWQucHciLCJnby5wdyIsIm9yLnB3IiwicHkiLCJjb20ucHkiLCJjb29wLnB5IiwiZWR1LnB5IiwiZ292LnB5IiwibWlsLnB5IiwibmV0LnB5Iiwib3Jn''@;'; put 'put ''LnB5IiwicWEiLCJjb20ucWEiLCJlZHUucWEiLCJnb3YucWEiLCJtaWwucWEiLCJuYW1lLnFhIiwibmV0LnFhIiwib3JnLnFhIiwic2NoLnFhIiwicmUiLCJhc3NvLnJlIiwiY29tLnJlIiwicm8iLCJhcnRzLnJvIiwiY29tLnJvIiwiZmlybS5ybyIsImluZm8ucm8iLCJub20ucm8iLCJudC5y''@;'; put 'put ''byIsIm9yZy5ybyIsInJlYy5ybyIsInN0b3JlLnJvIiwidG0ucm8iLCJ3d3cucm8iLCJycyIsImFjLnJzIiwiY28ucnMiLCJlZHUucnMiLCJnb3YucnMiLCJpbi5ycyIsIm9yZy5ycyIsInJ1IiwicnciLCJhYy5ydyIsImNvLnJ3IiwiY29vcC5ydyIsImdvdi5ydyIsIm1pbC5ydyIsIm5ldC5y''@;'; put 'put ''dyIsIm9yZy5ydyIsInNhIiwiY29tLnNhIiwiZWR1LnNhIiwiZ292LnNhIiwibWVkLnNhIiwibmV0LnNhIiwib3JnLnNhIiwicHViLnNhIiwic2NoLnNhIiwic2IiLCJjb20uc2IiLCJlZHUuc2IiLCJnb3Yuc2IiLCJuZXQuc2IiLCJvcmcuc2IiLCJzYyIsImNvbS5zYyIsImVkdS5zYyIsImdv''@;'; put 'put ''di5zYyIsIm5ldC5zYyIsIm9yZy5zYyIsInNkIiwiY29tLnNkIiwiZWR1LnNkIiwiZ292LnNkIiwiaW5mby5zZCIsIm1lZC5zZCIsIm5ldC5zZCIsIm9yZy5zZCIsInR2LnNkIiwic2UiLCJhLnNlIiwiYWMuc2UiLCJiLnNlIiwiYmQuc2UiLCJicmFuZC5zZSIsImMuc2UiLCJkLnNlIiwiZS5z''@;'; put 'put ''ZSIsImYuc2UiLCJmaC5zZSIsImZoc2suc2UiLCJmaHYuc2UiLCJnLnNlIiwiaC5zZSIsImkuc2UiLCJrLnNlIiwia29tZm9yYi5zZSIsImtvbW11bmFsZm9yYnVuZC5zZSIsImtvbXZ1eC5zZSIsImwuc2UiLCJsYW5iaWIuc2UiLCJtLnNlIiwibi5zZSIsIm5hdHVyYnJ1a3NneW1uLnNlIiwi''@;'; put 'put ''by5zZSIsIm9yZy5zZSIsInAuc2UiLCJwYXJ0aS5zZSIsInBwLnNlIiwicHJlc3Muc2UiLCJyLnNlIiwicy5zZSIsInQuc2UiLCJ0bS5zZSIsInUuc2UiLCJ3LnNlIiwieC5zZSIsInkuc2UiLCJ6LnNlIiwic2ciLCJjb20uc2ciLCJlZHUuc2ciLCJnb3Yuc2ciLCJuZXQuc2ciLCJvcmcuc2ci''@;'; put 'put ''LCJzaCIsImNvbS5zaCIsImdvdi5zaCIsIm1pbC5zaCIsIm5ldC5zaCIsIm9yZy5zaCIsInNpIiwic2oiLCJzayIsInNsIiwiY29tLnNsIiwiZWR1LnNsIiwiZ292LnNsIiwibmV0LnNsIiwib3JnLnNsIiwic20iLCJzbiIsImFydC5zbiIsImNvbS5zbiIsImVkdS5zbiIsImdvdXYuc24iLCJv''@;'; put 'put ''cmcuc24iLCJwZXJzby5zbiIsInVuaXYuc24iLCJzbyIsImNvbS5zbyIsImVkdS5zbyIsImdvdi5zbyIsIm1lLnNvIiwibmV0LnNvIiwib3JnLnNvIiwic3IiLCJzcyIsImJpei5zcyIsImNvLnNzIiwiY29tLnNzIiwiZWR1LnNzIiwiZ292LnNzIiwibWUuc3MiLCJuZXQuc3MiLCJvcmcuc3Mi''@;'; put 'put ''LCJzY2guc3MiLCJzdCIsImNvLnN0IiwiY29tLnN0IiwiY29uc3VsYWRvLnN0IiwiZWR1LnN0IiwiZW1iYWl4YWRhLnN0IiwibWlsLnN0IiwibmV0LnN0Iiwib3JnLnN0IiwicHJpbmNpcGUuc3QiLCJzYW90b21lLnN0Iiwic3RvcmUuc3QiLCJzdSIsInN2IiwiY29tLnN2IiwiZWR1LnN2Iiwi''@;'; put 'put ''Z29iLnN2Iiwib3JnLnN2IiwicmVkLnN2Iiwic3giLCJnb3Yuc3giLCJzeSIsImNvbS5zeSIsImVkdS5zeSIsImdvdi5zeSIsIm1pbC5zeSIsIm5ldC5zeSIsIm9yZy5zeSIsInN6IiwiYWMuc3oiLCJjby5zeiIsIm9yZy5zeiIsInRjIiwidGQiLCJ0ZWwiLCJ0ZiIsInRnIiwidGgiLCJhYy50''@;'; put 'put ''aCIsImNvLnRoIiwiZ28udGgiLCJpbi50aCIsIm1pLnRoIiwibmV0LnRoIiwib3IudGgiLCJ0aiIsImFjLnRqIiwiYml6LnRqIiwiY28udGoiLCJjb20udGoiLCJlZHUudGoiLCJnby50aiIsImdvdi50aiIsImludC50aiIsIm1pbC50aiIsIm5hbWUudGoiLCJuZXQudGoiLCJuaWMudGoiLCJv''@;'; put 'put ''cmcudGoiLCJ0ZXN0LnRqIiwid2ViLnRqIiwidGsiLCJ0bCIsImdvdi50bCIsInRtIiwiY28udG0iLCJjb20udG0iLCJlZHUudG0iLCJnb3YudG0iLCJtaWwudG0iLCJuZXQudG0iLCJub20udG0iLCJvcmcudG0iLCJ0biIsImNvbS50biIsImVucy50biIsImZpbi50biIsImdvdi50biIsImlu''@;'; put 'put ''ZC50biIsImluZm8udG4iLCJpbnRsLnRuIiwibWluY29tLnRuIiwibmF0LnRuIiwibmV0LnRuIiwib3JnLnRuIiwicGVyc28udG4iLCJ0b3VyaXNtLnRuIiwidG8iLCJjb20udG8iLCJlZHUudG8iLCJnb3YudG8iLCJtaWwudG8iLCJuZXQudG8iLCJvcmcudG8iLCJ0ciIsImF2LnRyIiwiYmJz''@;'; put 'put ''LnRyIiwiYmVsLnRyIiwiYml6LnRyIiwiY29tLnRyIiwiZHIudHIiLCJlZHUudHIiLCJnZW4udHIiLCJnb3YudHIiLCJpbmZvLnRyIiwiazEyLnRyIiwia2VwLnRyIiwibWlsLnRyIiwibmFtZS50ciIsIm5ldC50ciIsIm9yZy50ciIsInBvbC50ciIsInRlbC50ciIsInRzay50ciIsInR2LnRy''@;'; put 'put ''Iiwid2ViLnRyIiwibmMudHIiLCJnb3YubmMudHIiLCJ0dCIsImJpei50dCIsImNvLnR0IiwiY29tLnR0IiwiZWR1LnR0IiwiZ292LnR0IiwiaW5mby50dCIsIm1pbC50dCIsIm5hbWUudHQiLCJuZXQudHQiLCJvcmcudHQiLCJwcm8udHQiLCJ0diIsInR3IiwiY2x1Yi50dyIsImNvbS50dyIs''@;'; put 'put ''ImViaXoudHciLCJlZHUudHciLCJnYW1lLnR3IiwiZ292LnR3IiwiaWR2LnR3IiwibWlsLnR3IiwibmV0LnR3Iiwib3JnLnR3IiwidHoiLCJhYy50eiIsImNvLnR6IiwiZ28udHoiLCJob3RlbC50eiIsImluZm8udHoiLCJtZS50eiIsIm1pbC50eiIsIm1vYmkudHoiLCJuZS50eiIsIm9yLnR6''@;'; put 'put ''Iiwic2MudHoiLCJ0di50eiIsInVhIiwiY29tLnVhIiwiZWR1LnVhIiwiZ292LnVhIiwiaW4udWEiLCJuZXQudWEiLCJvcmcudWEiLCJjaGVya2Fzc3kudWEiLCJjaGVya2FzeS51YSIsImNoZXJuaWdvdi51YSIsImNoZXJuaWhpdi51YSIsImNoZXJuaXZ0c2kudWEiLCJjaGVybm92dHN5LnVh''@;'; put 'put ''IiwiY2sudWEiLCJjbi51YSIsImNyLnVhIiwiY3JpbWVhLnVhIiwiY3YudWEiLCJkbi51YSIsImRuZXByb3BldHJvdnNrLnVhIiwiZG5pcHJvcGV0cm92c2sudWEiLCJkb25ldHNrLnVhIiwiZHAudWEiLCJpZi51YSIsIml2YW5vLWZyYW5raXZzay51YSIsImtoLnVhIiwia2hhcmtpdi51YSIs''@;'; put 'put ''ImtoYXJrb3YudWEiLCJraGVyc29uLnVhIiwia2htZWxuaXRza2l5LnVhIiwia2htZWxueXRza3lpLnVhIiwia2lldi51YSIsImtpcm92b2dyYWQudWEiLCJrbS51YSIsImtyLnVhIiwia3JvcHl2bnl0c2t5aS51YSIsImtyeW0udWEiLCJrcy51YSIsImt2LnVhIiwia3lpdi51YSIsImxnLnVh''@;'; put 'put ''IiwibHQudWEiLCJsdWdhbnNrLnVhIiwibHVoYW5zay51YSIsImx1dHNrLnVhIiwibHYudWEiLCJsdml2LnVhIiwibWsudWEiLCJteWtvbGFpdi51YSIsIm5pa29sYWV2LnVhIiwib2QudWEiLCJvZGVzYS51YSIsIm9kZXNzYS51YSIsInBsLnVhIiwicG9sdGF2YS51YSIsInJpdm5lLnVhIiwi''@;'; put 'put ''cm92bm8udWEiLCJydi51YSIsInNiLnVhIiwic2ViYXN0b3BvbC51YSIsInNldmFzdG9wb2wudWEiLCJzbS51YSIsInN1bXkudWEiLCJ0ZS51YSIsInRlcm5vcGlsLnVhIiwidXoudWEiLCJ1emhnb3JvZC51YSIsInV6aGhvcm9kLnVhIiwidmlubmljYS51YSIsInZpbm55dHNpYS51YSIsInZu''@;'; put 'put ''LnVhIiwidm9seW4udWEiLCJ5YWx0YS51YSIsInpha2FycGF0dGlhLnVhIiwiemFwb3Jpemh6aGUudWEiLCJ6YXBvcml6aHpoaWEudWEiLCJ6aGl0b21pci51YSIsInpoeXRvbXlyLnVhIiwienAudWEiLCJ6dC51YSIsInVnIiwiYWMudWciLCJjby51ZyIsImNvbS51ZyIsImdvLnVnIiwibmUu''@;'; put 'put ''dWciLCJvci51ZyIsIm9yZy51ZyIsInNjLnVnIiwidWsiLCJhYy51ayIsImNvLnVrIiwiZ292LnVrIiwibHRkLnVrIiwibWUudWsiLCJuZXQudWsiLCJuaHMudWsiLCJvcmcudWsiLCJwbGMudWsiLCJwb2xpY2UudWsiLCIqLnNjaC51ayIsInVzIiwiZG5pLnVzIiwiZmVkLnVzIiwiaXNhLnVz''@;'; put 'put ''Iiwia2lkcy51cyIsIm5zbi51cyIsImFrLnVzIiwiYWwudXMiLCJhci51cyIsImFzLnVzIiwiYXoudXMiLCJjYS51cyIsImNvLnVzIiwiY3QudXMiLCJkYy51cyIsImRlLnVzIiwiZmwudXMiLCJnYS51cyIsImd1LnVzIiwiaGkudXMiLCJpYS51cyIsImlkLnVzIiwiaWwudXMiLCJpbi51cyIs''@;'; put 'put ''ImtzLnVzIiwia3kudXMiLCJsYS51cyIsIm1hLnVzIiwibWQudXMiLCJtZS51cyIsIm1pLnVzIiwibW4udXMiLCJtby51cyIsIm1zLnVzIiwibXQudXMiLCJuYy51cyIsIm5kLnVzIiwibmUudXMiLCJuaC51cyIsIm5qLnVzIiwibm0udXMiLCJudi51cyIsIm55LnVzIiwib2gudXMiLCJvay51''@;'; put 'put ''cyIsIm9yLnVzIiwicGEudXMiLCJwci51cyIsInJpLnVzIiwic2MudXMiLCJzZC51cyIsInRuLnVzIiwidHgudXMiLCJ1dC51cyIsInZhLnVzIiwidmkudXMiLCJ2dC51cyIsIndhLnVzIiwid2kudXMiLCJ3di51cyIsInd5LnVzIiwiazEyLmFrLnVzIiwiazEyLmFsLnVzIiwiazEyLmFyLnVz''@;'; put 'put ''IiwiazEyLmFzLnVzIiwiazEyLmF6LnVzIiwiazEyLmNhLnVzIiwiazEyLmNvLnVzIiwiazEyLmN0LnVzIiwiazEyLmRjLnVzIiwiazEyLmZsLnVzIiwiazEyLmdhLnVzIiwiazEyLmd1LnVzIiwiazEyLmlhLnVzIiwiazEyLmlkLnVzIiwiazEyLmlsLnVzIiwiazEyLmluLnVzIiwiazEyLmtz''@;'; put 'put ''LnVzIiwiazEyLmt5LnVzIiwiazEyLmxhLnVzIiwiazEyLm1hLnVzIiwiazEyLm1kLnVzIiwiazEyLm1lLnVzIiwiazEyLm1pLnVzIiwiazEyLm1uLnVzIiwiazEyLm1vLnVzIiwiazEyLm1zLnVzIiwiazEyLm10LnVzIiwiazEyLm5jLnVzIiwiazEyLm5lLnVzIiwiazEyLm5oLnVzIiwiazEy''@;'; put 'put ''Lm5qLnVzIiwiazEyLm5tLnVzIiwiazEyLm52LnVzIiwiazEyLm55LnVzIiwiazEyLm9oLnVzIiwiazEyLm9rLnVzIiwiazEyLm9yLnVzIiwiazEyLnBhLnVzIiwiazEyLnByLnVzIiwiazEyLnNjLnVzIiwiazEyLnRuLnVzIiwiazEyLnR4LnVzIiwiazEyLnV0LnVzIiwiazEyLnZhLnVzIiwi''@;'; put 'put ''azEyLnZpLnVzIiwiazEyLnZ0LnVzIiwiazEyLndhLnVzIiwiazEyLndpLnVzIiwiY2MuYWsudXMiLCJsaWIuYWsudXMiLCJjYy5hbC51cyIsImxpYi5hbC51cyIsImNjLmFyLnVzIiwibGliLmFyLnVzIiwiY2MuYXMudXMiLCJsaWIuYXMudXMiLCJjYy5hei51cyIsImxpYi5hei51cyIsImNj''@;'; put 'put ''LmNhLnVzIiwibGliLmNhLnVzIiwiY2MuY28udXMiLCJsaWIuY28udXMiLCJjYy5jdC51cyIsImxpYi5jdC51cyIsImNjLmRjLnVzIiwibGliLmRjLnVzIiwiY2MuZGUudXMiLCJjYy5mbC51cyIsImNjLmdhLnVzIiwiY2MuZ3UudXMiLCJjYy5oaS51cyIsImNjLmlhLnVzIiwiY2MuaWQudXMi''@;'; put 'put ''LCJjYy5pbC51cyIsImNjLmluLnVzIiwiY2Mua3MudXMiLCJjYy5reS51cyIsImNjLmxhLnVzIiwiY2MubWEudXMiLCJjYy5tZC51cyIsImNjLm1lLnVzIiwiY2MubWkudXMiLCJjYy5tbi51cyIsImNjLm1vLnVzIiwiY2MubXMudXMiLCJjYy5tdC51cyIsImNjLm5jLnVzIiwiY2MubmQudXMi''@;'; put 'put ''LCJjYy5uZS51cyIsImNjLm5oLnVzIiwiY2MubmoudXMiLCJjYy5ubS51cyIsImNjLm52LnVzIiwiY2MubnkudXMiLCJjYy5vaC51cyIsImNjLm9rLnVzIiwiY2Mub3IudXMiLCJjYy5wYS51cyIsImNjLnByLnVzIiwiY2MucmkudXMiLCJjYy5zYy51cyIsImNjLnNkLnVzIiwiY2MudG4udXMi''@;'; put 'put ''LCJjYy50eC51cyIsImNjLnV0LnVzIiwiY2MudmEudXMiLCJjYy52aS51cyIsImNjLnZ0LnVzIiwiY2Mud2EudXMiLCJjYy53aS51cyIsImNjLnd2LnVzIiwiY2Mud3kudXMiLCJrMTIud3kudXMiLCJsaWIuZmwudXMiLCJsaWIuZ2EudXMiLCJsaWIuZ3UudXMiLCJsaWIuaGkudXMiLCJsaWIu''@;'; put 'put ''aWEudXMiLCJsaWIuaWQudXMiLCJsaWIuaWwudXMiLCJsaWIuaW4udXMiLCJsaWIua3MudXMiLCJsaWIua3kudXMiLCJsaWIubGEudXMiLCJsaWIubWEudXMiLCJsaWIubWQudXMiLCJsaWIubWUudXMiLCJsaWIubWkudXMiLCJsaWIubW4udXMiLCJsaWIubW8udXMiLCJsaWIubXMudXMiLCJs''@;'; put 'put ''aWIubXQudXMiLCJsaWIubmMudXMiLCJsaWIubmQudXMiLCJsaWIubmUudXMiLCJsaWIubmgudXMiLCJsaWIubmoudXMiLCJsaWIubm0udXMiLCJsaWIubnYudXMiLCJsaWIubnkudXMiLCJsaWIub2gudXMiLCJsaWIub2sudXMiLCJsaWIub3IudXMiLCJsaWIucGEudXMiLCJsaWIucHIudXMi''@;'; put 'put ''LCJsaWIucmkudXMiLCJsaWIuc2MudXMiLCJsaWIuc2QudXMiLCJsaWIudG4udXMiLCJsaWIudHgudXMiLCJsaWIudXQudXMiLCJsaWIudmEudXMiLCJsaWIudmkudXMiLCJsaWIudnQudXMiLCJsaWIud2EudXMiLCJsaWIud2kudXMiLCJsaWIud3kudXMiLCJjaHRyLmsxMi5tYS51cyIsInBh''@;'; put 'put ''cm9jaC5rMTIubWEudXMiLCJwdnQuazEyLm1hLnVzIiwiYW5uLWFyYm9yLm1pLnVzIiwiY29nLm1pLnVzIiwiZHN0Lm1pLnVzIiwiZWF0b24ubWkudXMiLCJnZW4ubWkudXMiLCJtdXMubWkudXMiLCJ0ZWMubWkudXMiLCJ3YXNodGVuYXcubWkudXMiLCJ1eSIsImNvbS51eSIsImVkdS51eSIs''@;'; put 'put ''Imd1Yi51eSIsIm1pbC51eSIsIm5ldC51eSIsIm9yZy51eSIsInV6IiwiY28udXoiLCJjb20udXoiLCJuZXQudXoiLCJvcmcudXoiLCJ2YSIsInZjIiwiY29tLnZjIiwiZWR1LnZjIiwiZ292LnZjIiwibWlsLnZjIiwibmV0LnZjIiwib3JnLnZjIiwidmUiLCJhcnRzLnZlIiwiYmliLnZlIiwi''@;'; put 'put ''Y28udmUiLCJjb20udmUiLCJlMTIudmUiLCJlZHUudmUiLCJmaXJtLnZlIiwiZ29iLnZlIiwiZ292LnZlIiwiaW5mby52ZSIsImludC52ZSIsIm1pbC52ZSIsIm5ldC52ZSIsIm5vbS52ZSIsIm9yZy52ZSIsInJhci52ZSIsInJlYy52ZSIsInN0b3JlLnZlIiwidGVjLnZlIiwid2ViLnZlIiwi''@;'; put 'put ''dmciLCJ2aSIsImNvLnZpIiwiY29tLnZpIiwiazEyLnZpIiwibmV0LnZpIiwib3JnLnZpIiwidm4iLCJhYy52biIsImFpLnZuIiwiYml6LnZuIiwiY29tLnZuIiwiZWR1LnZuIiwiZ292LnZuIiwiaGVhbHRoLnZuIiwiaWQudm4iLCJpbmZvLnZuIiwiaW50LnZuIiwiaW8udm4iLCJuYW1lLnZu''@;'; put 'put ''IiwibmV0LnZuIiwib3JnLnZuIiwicHJvLnZuIiwiYW5naWFuZy52biIsImJhY2dpYW5nLnZuIiwiYmFja2FuLnZuIiwiYmFjbGlldS52biIsImJhY25pbmgudm4iLCJiYXJpYS12dW5ndGF1LnZuIiwiYmVudHJlLnZuIiwiYmluaGRpbmgudm4iLCJiaW5oZHVvbmcudm4iLCJiaW5ocGh1b2Mu''@;'; put 'put ''dm4iLCJiaW5odGh1YW4udm4iLCJjYW1hdS52biIsImNhbnRoby52biIsImNhb2Jhbmcudm4iLCJkYWtsYWsudm4iLCJkYWtub25nLnZuIiwiZGFuYW5nLnZuIiwiZGllbmJpZW4udm4iLCJkb25nbmFpLnZuIiwiZG9uZ3RoYXAudm4iLCJnaWFsYWkudm4iLCJoYWdpYW5nLnZuIiwiaGFpZHVv''@;'; put 'put ''bmcudm4iLCJoYWlwaG9uZy52biIsImhhbmFtLnZuIiwiaGFub2kudm4iLCJoYXRpbmgudm4iLCJoYXVnaWFuZy52biIsImhvYWJpbmgudm4iLCJodW5neWVuLnZuIiwia2hhbmhob2Eudm4iLCJraWVuZ2lhbmcudm4iLCJrb250dW0udm4iLCJsYWljaGF1LnZuIiwibGFtZG9uZy52biIsImxh''@;'; put 'put ''bmdzb24udm4iLCJsYW9jYWkudm4iLCJsb25nYW4udm4iLCJuYW1kaW5oLnZuIiwibmdoZWFuLnZuIiwibmluaGJpbmgudm4iLCJuaW5odGh1YW4udm4iLCJwaHV0aG8udm4iLCJwaHV5ZW4udm4iLCJxdWFuZ2Jpbmgudm4iLCJxdWFuZ25hbS52biIsInF1YW5nbmdhaS52biIsInF1YW5nbmlu''@;'; put 'put ''aC52biIsInF1YW5ndHJpLnZuIiwic29jdHJhbmcudm4iLCJzb25sYS52biIsInRheW5pbmgudm4iLCJ0aGFpYmluaC52biIsInRoYWluZ3V5ZW4udm4iLCJ0aGFuaGhvYS52biIsInRoYW5ocGhvaG9jaGltaW5oLnZuIiwidGh1YXRoaWVuaHVlLnZuIiwidGllbmdpYW5nLnZuIiwidHJhdmlu''@;'; put 'put ''aC52biIsInR1eWVucXVhbmcudm4iLCJ2aW5obG9uZy52biIsInZpbmhwaHVjLnZuIiwieWVuYmFpLnZuIiwidnUiLCJjb20udnUiLCJlZHUudnUiLCJuZXQudnUiLCJvcmcudnUiLCJ3ZiIsIndzIiwiY29tLndzIiwiZWR1LndzIiwiZ292LndzIiwibmV0LndzIiwib3JnLndzIiwieXQiLCJc''@;'; put 'put ''dTA2MjdcdTA2NDVcdTA2MjdcdTA2MzFcdTA2MjdcdTA2MmEiLCJcdTA1NzBcdTA1NjFcdTA1NzUiLCJcdTA5YWNcdTA5YmVcdTA5ODJcdTA5YjJcdTA5YmUiLCJcdTA0MzFcdTA0MzMiLCJcdTA2MjdcdTA2NDRcdTA2MjhcdTA2MmRcdTA2MzFcdTA2NGFcdTA2NDYiLCJcdTA0MzFcdTA0MzVc''@;'; put 'put ''dTA0M2IiLCJcdTRlMmRcdTU2ZmQiLCJcdTRlMmRcdTU3MGIiLCJcdTA2MjdcdTA2NDRcdTA2MmNcdTA2MzJcdTA2MjdcdTA2MjZcdTA2MzEiLCJcdTA2NDVcdTA2MzVcdTA2MzEiLCJcdTA0MzVcdTA0NGUiLCJcdTAzYjVcdTAzYzUiLCJcdTA2NDVcdTA2NDhcdTA2MzFcdTA2NGFcdTA2MmFc''@;'; put 'put ''dTA2MjdcdTA2NDZcdTA2NGFcdTA2MjciLCJcdTEwZDJcdTEwZDQiLCJcdTAzYjVcdTAzYmIiLCJcdTk5OTlcdTZlMmYiLCJcdTUwMGJcdTRlYmEuXHU5OTk5XHU2ZTJmIiwiXHU1MTZjXHU1M2Y4Llx1OTk5OVx1NmUyZiIsIlx1NjUzZlx1NWU5Yy5cdTk5OTlcdTZlMmYiLCJcdTY1NTlcdTgw''@;'; put 'put ''YjIuXHU5OTk5XHU2ZTJmIiwiXHU3ZDQ0XHU3ZTU0Llx1OTk5OVx1NmUyZiIsIlx1N2RiMlx1N2Q2MS5cdTk5OTlcdTZlMmYiLCJcdTBjYWRcdTBjYmVcdTBjYjBcdTBjYTQiLCJcdTBiMmRcdTBiM2VcdTBiMzBcdTBiMjQiLCJcdTA5YWRcdTA5YmVcdTA5ZjBcdTA5YTQiLCJcdTA5MmRcdTA5''@;'; put 'put ''M2VcdTA5MzBcdTA5MjRcdTA5MmVcdTA5NGQiLCJcdTA5MmRcdTA5M2VcdTA5MzBcdTA5NGJcdTA5MjQiLCJcdTA2ODBcdTA2MjdcdTA2MzFcdTA2MmEiLCJcdTBkMmRcdTBkM2VcdTBkMzBcdTBkMjRcdTBkMDIiLCJcdTA5MmRcdTA5M2VcdTA5MzBcdTA5MjQiLCJcdTA2MjhcdTA2MjdcdTA2''@;'; put 'put ''MzFcdTA2MmEiLCJcdTA2MjhcdTA2YmVcdTA2MjdcdTA2MzFcdTA2MmEiLCJcdTBjMmRcdTBjM2VcdTBjMzBcdTBjMjRcdTBjNGQiLCJcdTBhYWRcdTBhYmVcdTBhYjBcdTBhYTQiLCJcdTBhMmRcdTBhM2VcdTBhMzBcdTBhMjQiLCJcdTA5YWRcdTA5YmVcdTA5YjBcdTA5YTQiLCJcdTBiODdc''@;'; put 'put ''dTBiYThcdTBiY2RcdTBiYTRcdTBiYmZcdTBiYWZcdTBiYmUiLCJcdTA2MjdcdTA2Y2NcdTA2MzFcdTA2MjdcdTA2NDYiLCJcdTA2MjdcdTA2NGFcdTA2MzFcdTA2MjdcdTA2NDYiLCJcdTA2MzlcdTA2MzFcdTA2MjdcdTA2NDIiLCJcdTA2MjdcdTA2NDRcdTA2MjdcdTA2MzFcdTA2MmZcdTA2''@;'; put 'put ''NDYiLCJcdWQ1NWNcdWFkNmQiLCJcdTA0OWJcdTA0MzBcdTA0MzciLCJcdTBlYTVcdTBlYjJcdTBlYTciLCJcdTBkYmRcdTBkODJcdTBkOWFcdTBkY2YiLCJcdTBiODdcdTBiYjJcdTBiOTlcdTBiY2RcdTBiOTVcdTBiYzgiLCJcdTA2MjdcdTA2NDRcdTA2NDVcdTA2M2FcdTA2MzFcdTA2Mjgi''@;'; put 'put ''LCJcdTA0M2NcdTA0M2FcdTA0MzQiLCJcdTA0M2NcdTA0M2VcdTA0M2QiLCJcdTZmYjNcdTk1ODAiLCJcdTZmYjNcdTk1ZTgiLCJcdTA2NDVcdTA2NDRcdTA2NGFcdTA2MzNcdTA2NGFcdTA2MjciLCJcdTA2MzlcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2N2VcdTA2MjdcdTA2YTlcdTA2MzNc''@;'; put 'put ''dTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2N2VcdTA2MjdcdTA2NDNcdTA2MzNcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2NDFcdTA2NDRcdTA2MzNcdTA2MzdcdTA2NGFcdTA2NDYiLCJcdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0MzBcdTA0M2EuXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDNl''@;'; put 'put ''XHUwNDMxXHUwNDQwLlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQzZVx1MDQzNC5cdTA0NDFcdTA0NDBcdTA0MzEiLCJcdTA0M2VcdTA0NDBcdTA0MzMuXHUwNDQxXHUwNDQwXHUwNDMxIiwiXHUwNDNmXHUwNDQwLlx1MDQ0MVx1MDQ0MFx1MDQzMSIsIlx1MDQ0M1x1MDQzZlx1MDQ0MC5cdTA0''@;'; put 'put ''NDFcdTA0NDBcdTA0MzEiLCJcdTA0NDBcdTA0NDQiLCJcdTA2NDJcdTA2MzdcdTA2MzEiLCJcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MzlcdTA2NDhcdTA2MmZcdTA2NGFcdTA2MjkiLCJcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MzlcdTA2NDhcdTA2MmZcdTA2Y2NcdTA2MjkiLCJcdTA2MjdcdTA2''@;'; put 'put ''NDRcdTA2MzNcdTA2MzlcdTA2NDhcdTA2MmZcdTA2Y2NcdTA2YzMiLCJcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MzlcdTA2NDhcdTA2MmZcdTA2NGFcdTA2NDciLCJcdTA2MzNcdTA2NDhcdTA2MmZcdTA2MjdcdTA2NDYiLCJcdTY1YjBcdTUyYTBcdTU3NjEiLCJcdTBiOWFcdTBiYmZcdTBiOTlc''@;'; put 'put ''dTBiY2RcdTBiOTVcdTBiYWFcdTBiY2RcdTBiYWFcdTBiYzJcdTBiYjBcdTBiY2QiLCJcdTA2MzNcdTA2NDhcdTA2MzFcdTA2NGFcdTA2MjkiLCJcdTA2MzNcdTA2NDhcdTA2MzFcdTA2NGFcdTA2MjciLCJcdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlMTdcdTBlMmJcdTBlMzJcdTBlMjMuXHUw''@;'; put 'put ''ZTQ0XHUwZTE3XHUwZTIyIiwiXHUwZTE4XHUwZTM4XHUwZTIzXHUwZTAxXHUwZTM0XHUwZTA4Llx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MGU0MFx1MGUxOVx1MGU0N1x1MGUxNS5cdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTBlMjNcdTBlMzFcdTBlMTBcdTBlMWFcdTBlMzJcdTBlMjUuXHUwZTQ0''@;'; put 'put ''XHUwZTE3XHUwZTIyIiwiXHUwZTI4XHUwZTM2XHUwZTAxXHUwZTI5XHUwZTMyLlx1MGU0NFx1MGUxN1x1MGUyMiIsIlx1MGUyZFx1MGUwN1x1MGUwNFx1MGU0Y1x1MGUwMVx1MGUyMy5cdTBlNDRcdTBlMTdcdTBlMjIiLCJcdTA2MmFcdTA2NDhcdTA2NDZcdTA2MzMiLCJcdTUzZjBcdTcwNjMi''@;'; put 'put ''LCJcdTUzZjBcdTZlN2UiLCJcdTgxZmFcdTcwNjMiLCJcdTA0NDNcdTA0M2FcdTA0NDAiLCJcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDVcdTA2NDYiLCJ4eHgiLCJ5ZSIsImNvbS55ZSIsImVkdS55ZSIsImdvdi55ZSIsIm1pbC55ZSIsIm5ldC55ZSIsIm9yZy55ZSIsImFjLnphIiwiYWdyaWMu''@;'; put 'put ''emEiLCJhbHQuemEiLCJjby56YSIsImVkdS56YSIsImdvdi56YSIsImdyb25kYXIuemEiLCJsYXcuemEiLCJtaWwuemEiLCJuZXQuemEiLCJuZ28uemEiLCJuaWMuemEiLCJuaXMuemEiLCJub20uemEiLCJvcmcuemEiLCJzY2hvb2wuemEiLCJ0bS56YSIsIndlYi56YSIsInptIiwiYWMuem0i''@;'; put 'put ''LCJiaXouem0iLCJjby56bSIsImNvbS56bSIsImVkdS56bSIsImdvdi56bSIsImluZm8uem0iLCJtaWwuem0iLCJuZXQuem0iLCJvcmcuem0iLCJzY2guem0iLCJ6dyIsImFjLnp3IiwiY28uenciLCJnb3YuenciLCJtaWwuenciLCJvcmcuenciLCJhYWEiLCJhYXJwIiwiYWJiIiwiYWJib3R0''@;'; put 'put ''IiwiYWJidmllIiwiYWJjIiwiYWJsZSIsImFib2dhZG8iLCJhYnVkaGFiaSIsImFjYWRlbXkiLCJhY2NlbnR1cmUiLCJhY2NvdW50YW50IiwiYWNjb3VudGFudHMiLCJhY28iLCJhY3RvciIsImFkcyIsImFkdWx0IiwiYWVnIiwiYWV0bmEiLCJhZmwiLCJhZnJpY2EiLCJhZ2FraGFuIiwiYWdl''@;'; put 'put ''bmN5IiwiYWlnIiwiYWlyYnVzIiwiYWlyZm9yY2UiLCJhaXJ0ZWwiLCJha2RuIiwiYWxpYmFiYSIsImFsaXBheSIsImFsbGZpbmFueiIsImFsbHN0YXRlIiwiYWxseSIsImFsc2FjZSIsImFsc3RvbSIsImFtYXpvbiIsImFtZXJpY2FuZXhwcmVzcyIsImFtZXJpY2FuZmFtaWx5IiwiYW1leCIs''@;'; put 'put ''ImFtZmFtIiwiYW1pY2EiLCJhbXN0ZXJkYW0iLCJhbmFseXRpY3MiLCJhbmRyb2lkIiwiYW5xdWFuIiwiYW56IiwiYW9sIiwiYXBhcnRtZW50cyIsImFwcCIsImFwcGxlIiwiYXF1YXJlbGxlIiwiYXJhYiIsImFyYW1jbyIsImFyY2hpIiwiYXJteSIsImFydCIsImFydGUiLCJhc2RhIiwiYXNz''@;'; put 'put ''b2NpYXRlcyIsImF0aGxldGEiLCJhdHRvcm5leSIsImF1Y3Rpb24iLCJhdWRpIiwiYXVkaWJsZSIsImF1ZGlvIiwiYXVzcG9zdCIsImF1dGhvciIsImF1dG8iLCJhdXRvcyIsImF3cyIsImF4YSIsImF6dXJlIiwiYmFieSIsImJhaWR1IiwiYmFuYW1leCIsImJhbmQiLCJiYW5rIiwiYmFyIiwi''@;'; put 'put ''YmFyY2Vsb25hIiwiYmFyY2xheWNhcmQiLCJiYXJjbGF5cyIsImJhcmVmb290IiwiYmFyZ2FpbnMiLCJiYXNlYmFsbCIsImJhc2tldGJhbGwiLCJiYXVoYXVzIiwiYmF5ZXJuIiwiYmJjIiwiYmJ0IiwiYmJ2YSIsImJjZyIsImJjbiIsImJlYXRzIiwiYmVhdXR5IiwiYmVlciIsImJlbnRsZXki''@;'; put 'put ''LCJiZXJsaW4iLCJiZXN0IiwiYmVzdGJ1eSIsImJldCIsImJoYXJ0aSIsImJpYmxlIiwiYmlkIiwiYmlrZSIsImJpbmciLCJiaW5nbyIsImJpbyIsImJsYWNrIiwiYmxhY2tmcmlkYXkiLCJibG9ja2J1c3RlciIsImJsb2ciLCJibG9vbWJlcmciLCJibHVlIiwiYm1zIiwiYm13IiwiYm5wcGFy''@;'; put 'put ''aWJhcyIsImJvYXRzIiwiYm9laHJpbmdlciIsImJvZmEiLCJib20iLCJib25kIiwiYm9vIiwiYm9vayIsImJvb2tpbmciLCJib3NjaCIsImJvc3RpayIsImJvc3RvbiIsImJvdCIsImJvdXRpcXVlIiwiYm94IiwiYnJhZGVzY28iLCJicmlkZ2VzdG9uZSIsImJyb2Fkd2F5IiwiYnJva2VyIiwi''@;'; put 'put ''YnJvdGhlciIsImJydXNzZWxzIiwiYnVpbGQiLCJidWlsZGVycyIsImJ1c2luZXNzIiwiYnV5IiwiYnV6eiIsImJ6aCIsImNhYiIsImNhZmUiLCJjYWwiLCJjYWxsIiwiY2Fsdmlua2xlaW4iLCJjYW0iLCJjYW1lcmEiLCJjYW1wIiwiY2Fub24iLCJjYXBldG93biIsImNhcGl0YWwiLCJjYXBp''@;'; put 'put ''dGFsb25lIiwiY2FyIiwiY2FyYXZhbiIsImNhcmRzIiwiY2FyZSIsImNhcmVlciIsImNhcmVlcnMiLCJjYXJzIiwiY2FzYSIsImNhc2UiLCJjYXNoIiwiY2FzaW5vIiwiY2F0ZXJpbmciLCJjYXRob2xpYyIsImNiYSIsImNibiIsImNicmUiLCJjZW50ZXIiLCJjZW8iLCJjZXJuIiwiY2ZhIiwi''@;'; put 'put ''Y2ZkIiwiY2hhbmVsIiwiY2hhbm5lbCIsImNoYXJpdHkiLCJjaGFzZSIsImNoYXQiLCJjaGVhcCIsImNoaW50YWkiLCJjaHJpc3RtYXMiLCJjaHJvbWUiLCJjaHVyY2giLCJjaXByaWFuaSIsImNpcmNsZSIsImNpc2NvIiwiY2l0YWRlbCIsImNpdGkiLCJjaXRpYyIsImNpdHkiLCJjbGFpbXMi''@;'; put 'put ''LCJjbGVhbmluZyIsImNsaWNrIiwiY2xpbmljIiwiY2xpbmlxdWUiLCJjbG90aGluZyIsImNsb3VkIiwiY2x1YiIsImNsdWJtZWQiLCJjb2FjaCIsImNvZGVzIiwiY29mZmVlIiwiY29sbGVnZSIsImNvbG9nbmUiLCJjb21tYmFuayIsImNvbW11bml0eSIsImNvbXBhbnkiLCJjb21wYXJlIiwi''@;'; put 'put ''Y29tcHV0ZXIiLCJjb21zZWMiLCJjb25kb3MiLCJjb25zdHJ1Y3Rpb24iLCJjb25zdWx0aW5nIiwiY29udGFjdCIsImNvbnRyYWN0b3JzIiwiY29va2luZyIsImNvb2wiLCJjb3JzaWNhIiwiY291bnRyeSIsImNvdXBvbiIsImNvdXBvbnMiLCJjb3Vyc2VzIiwiY3BhIiwiY3JlZGl0IiwiY3Jl''@;'; put 'put ''ZGl0Y2FyZCIsImNyZWRpdHVuaW9uIiwiY3JpY2tldCIsImNyb3duIiwiY3JzIiwiY3J1aXNlIiwiY3J1aXNlcyIsImN1aXNpbmVsbGEiLCJjeW1ydSIsImN5b3UiLCJkYWQiLCJkYW5jZSIsImRhdGEiLCJkYXRlIiwiZGF0aW5nIiwiZGF0c3VuIiwiZGF5IiwiZGNsayIsImRkcyIsImRlYWwi''@;'; put 'put ''LCJkZWFsZXIiLCJkZWFscyIsImRlZ3JlZSIsImRlbGl2ZXJ5IiwiZGVsbCIsImRlbG9pdHRlIiwiZGVsdGEiLCJkZW1vY3JhdCIsImRlbnRhbCIsImRlbnRpc3QiLCJkZXNpIiwiZGVzaWduIiwiZGV2IiwiZGhsIiwiZGlhbW9uZHMiLCJkaWV0IiwiZGlnaXRhbCIsImRpcmVjdCIsImRpcmVj''@;'; put 'put ''dG9yeSIsImRpc2NvdW50IiwiZGlzY292ZXIiLCJkaXNoIiwiZGl5IiwiZG5wIiwiZG9jcyIsImRvY3RvciIsImRvZyIsImRvbWFpbnMiLCJkb3QiLCJkb3dubG9hZCIsImRyaXZlIiwiZHR2IiwiZHViYWkiLCJkdW5sb3AiLCJkdXBvbnQiLCJkdXJiYW4iLCJkdmFnIiwiZHZyIiwiZWFydGgi''@;'; put 'put ''LCJlYXQiLCJlY28iLCJlZGVrYSIsImVkdWNhdGlvbiIsImVtYWlsIiwiZW1lcmNrIiwiZW5lcmd5IiwiZW5naW5lZXIiLCJlbmdpbmVlcmluZyIsImVudGVycHJpc2VzIiwiZXBzb24iLCJlcXVpcG1lbnQiLCJlcmljc3NvbiIsImVybmkiLCJlc3EiLCJlc3RhdGUiLCJldXJvdmlzaW9uIiwi''@;'; put 'put ''ZXVzIiwiZXZlbnRzIiwiZXhjaGFuZ2UiLCJleHBlcnQiLCJleHBvc2VkIiwiZXhwcmVzcyIsImV4dHJhc3BhY2UiLCJmYWdlIiwiZmFpbCIsImZhaXJ3aW5kcyIsImZhaXRoIiwiZmFtaWx5IiwiZmFuIiwiZmFucyIsImZhcm0iLCJmYXJtZXJzIiwiZmFzaGlvbiIsImZhc3QiLCJmZWRleCIs''@;'; put 'put ''ImZlZWRiYWNrIiwiZmVycmFyaSIsImZlcnJlcm8iLCJmaWRlbGl0eSIsImZpZG8iLCJmaWxtIiwiZmluYWwiLCJmaW5hbmNlIiwiZmluYW5jaWFsIiwiZmlyZSIsImZpcmVzdG9uZSIsImZpcm1kYWxlIiwiZmlzaCIsImZpc2hpbmciLCJmaXQiLCJmaXRuZXNzIiwiZmxpY2tyIiwiZmxpZ2h0''@;'; put 'put ''cyIsImZsaXIiLCJmbG9yaXN0IiwiZmxvd2VycyIsImZseSIsImZvbyIsImZvb2QiLCJmb290YmFsbCIsImZvcmQiLCJmb3JleCIsImZvcnNhbGUiLCJmb3J1bSIsImZvdW5kYXRpb24iLCJmb3giLCJmcmVlIiwiZnJlc2VuaXVzIiwiZnJsIiwiZnJvZ2FucyIsImZyb250aWVyIiwiZnRyIiwi''@;'; put 'put ''ZnVqaXRzdSIsImZ1biIsImZ1bmQiLCJmdXJuaXR1cmUiLCJmdXRib2wiLCJmeWkiLCJnYWwiLCJnYWxsZXJ5IiwiZ2FsbG8iLCJnYWxsdXAiLCJnYW1lIiwiZ2FtZXMiLCJnYXAiLCJnYXJkZW4iLCJnYXkiLCJnYml6IiwiZ2RuIiwiZ2VhIiwiZ2VudCIsImdlbnRpbmciLCJnZW9yZ2UiLCJn''@;'; put 'put ''Z2VlIiwiZ2lmdCIsImdpZnRzIiwiZ2l2ZXMiLCJnaXZpbmciLCJnbGFzcyIsImdsZSIsImdsb2JhbCIsImdsb2JvIiwiZ21haWwiLCJnbWJoIiwiZ21vIiwiZ214IiwiZ29kYWRkeSIsImdvbGQiLCJnb2xkcG9pbnQiLCJnb2xmIiwiZ29vIiwiZ29vZHllYXIiLCJnb29nIiwiZ29vZ2xlIiwi''@;'; put 'put ''Z29wIiwiZ290IiwiZ3JhaW5nZXIiLCJncmFwaGljcyIsImdyYXRpcyIsImdyZWVuIiwiZ3JpcGUiLCJncm9jZXJ5IiwiZ3JvdXAiLCJndWNjaSIsImd1Z2UiLCJndWlkZSIsImd1aXRhcnMiLCJndXJ1IiwiaGFpciIsImhhbWJ1cmciLCJoYW5nb3V0IiwiaGF1cyIsImhibyIsImhkZmMiLCJo''@;'; put 'put ''ZGZjYmFuayIsImhlYWx0aCIsImhlYWx0aGNhcmUiLCJoZWxwIiwiaGVsc2lua2kiLCJoZXJlIiwiaGVybWVzIiwiaGlwaG9wIiwiaGlzYW1pdHN1IiwiaGl0YWNoaSIsImhpdiIsImhrdCIsImhvY2tleSIsImhvbGRpbmdzIiwiaG9saWRheSIsImhvbWVkZXBvdCIsImhvbWVnb29kcyIsImhv''@;'; put 'put ''bWVzIiwiaG9tZXNlbnNlIiwiaG9uZGEiLCJob3JzZSIsImhvc3BpdGFsIiwiaG9zdCIsImhvc3RpbmciLCJob3QiLCJob3RlbHMiLCJob3RtYWlsIiwiaG91c2UiLCJob3ciLCJoc2JjIiwiaHVnaGVzIiwiaHlhdHQiLCJoeXVuZGFpIiwiaWJtIiwiaWNiYyIsImljZSIsImljdSIsImllZWUi''@;'; put 'put ''LCJpZm0iLCJpa2FubyIsImltYW1hdCIsImltZGIiLCJpbW1vIiwiaW1tb2JpbGllbiIsImluYyIsImluZHVzdHJpZXMiLCJpbmZpbml0aSIsImluZyIsImluayIsImluc3RpdHV0ZSIsImluc3VyYW5jZSIsImluc3VyZSIsImludGVybmF0aW9uYWwiLCJpbnR1aXQiLCJpbnZlc3RtZW50cyIs''@;'; put 'put ''ImlwaXJhbmdhIiwiaXJpc2giLCJpc21haWxpIiwiaXN0IiwiaXN0YW5idWwiLCJpdGF1IiwiaXR2IiwiamFndWFyIiwiamF2YSIsImpjYiIsImplZXAiLCJqZXR6dCIsImpld2VscnkiLCJqaW8iLCJqbGwiLCJqbXAiLCJqbmoiLCJqb2J1cmciLCJqb3QiLCJqb3kiLCJqcG1vcmdhbiIsImpw''@;'; put 'put ''cnMiLCJqdWVnb3MiLCJqdW5pcGVyIiwia2F1ZmVuIiwia2RkaSIsImtlcnJ5aG90ZWxzIiwia2Vycnlsb2dpc3RpY3MiLCJrZXJyeXByb3BlcnRpZXMiLCJrZmgiLCJraWEiLCJraWRzIiwia2ltIiwia2luZGxlIiwia2l0Y2hlbiIsImtpd2kiLCJrb2VsbiIsImtvbWF0c3UiLCJrb3NoZXIi''@;'; put 'put ''LCJrcG1nIiwia3BuIiwia3JkIiwia3JlZCIsImt1b2tncm91cCIsImt5b3RvIiwibGFjYWl4YSIsImxhbWJvcmdoaW5pIiwibGFtZXIiLCJsYW5jYXN0ZXIiLCJsYW5kIiwibGFuZHJvdmVyIiwibGFueGVzcyIsImxhc2FsbGUiLCJsYXQiLCJsYXRpbm8iLCJsYXRyb2JlIiwibGF3IiwibGF3''@;'; put 'put ''eWVyIiwibGRzIiwibGVhc2UiLCJsZWNsZXJjIiwibGVmcmFrIiwibGVnYWwiLCJsZWdvIiwibGV4dXMiLCJsZ2J0IiwibGlkbCIsImxpZmUiLCJsaWZlaW5zdXJhbmNlIiwibGlmZXN0eWxlIiwibGlnaHRpbmciLCJsaWtlIiwibGlsbHkiLCJsaW1pdGVkIiwibGltbyIsImxpbmNvbG4iLCJs''@;'; put 'put ''aW5rIiwibGlwc3kiLCJsaXZlIiwibGl2aW5nIiwibGxjIiwibGxwIiwibG9hbiIsImxvYW5zIiwibG9ja2VyIiwibG9jdXMiLCJsb2wiLCJsb25kb24iLCJsb3R0ZSIsImxvdHRvIiwibG92ZSIsImxwbCIsImxwbGZpbmFuY2lhbCIsImx0ZCIsImx0ZGEiLCJsdW5kYmVjayIsImx1eGUiLCJs''@;'; put 'put ''dXh1cnkiLCJtYWRyaWQiLCJtYWlmIiwibWFpc29uIiwibWFrZXVwIiwibWFuIiwibWFuYWdlbWVudCIsIm1hbmdvIiwibWFwIiwibWFya2V0IiwibWFya2V0aW5nIiwibWFya2V0cyIsIm1hcnJpb3R0IiwibWFyc2hhbGxzIiwibWF0dGVsIiwibWJhIiwibWNraW5zZXkiLCJtZWQiLCJtZWRp''@;'; put 'put ''YSIsIm1lZXQiLCJtZWxib3VybmUiLCJtZW1lIiwibWVtb3JpYWwiLCJtZW4iLCJtZW51IiwibWVyY2siLCJtZXJja21zZCIsIm1pYW1pIiwibWljcm9zb2Z0IiwibWluaSIsIm1pbnQiLCJtaXQiLCJtaXRzdWJpc2hpIiwibWxiIiwibWxzIiwibW1hIiwibW9iaWxlIiwibW9kYSIsIm1vZSIs''@;'; put 'put ''Im1vaSIsIm1vbSIsIm1vbmFzaCIsIm1vbmV5IiwibW9uc3RlciIsIm1vcm1vbiIsIm1vcnRnYWdlIiwibW9zY293IiwibW90byIsIm1vdG9yY3ljbGVzIiwibW92IiwibW92aWUiLCJtc2QiLCJtdG4iLCJtdHIiLCJtdXNpYyIsIm5hYiIsIm5hZ295YSIsIm5hdnkiLCJuYmEiLCJuZWMiLCJu''@;'; put 'put ''ZXRiYW5rIiwibmV0ZmxpeCIsIm5ldHdvcmsiLCJuZXVzdGFyIiwibmV3IiwibmV3cyIsIm5leHQiLCJuZXh0ZGlyZWN0IiwibmV4dXMiLCJuZmwiLCJuZ28iLCJuaGsiLCJuaWNvIiwibmlrZSIsIm5pa29uIiwibmluamEiLCJuaXNzYW4iLCJuaXNzYXkiLCJub2tpYSIsIm5vcnRvbiIsIm5v''@;'; put 'put ''dyIsIm5vd3J1eiIsIm5vd3R2IiwibnJhIiwibnJ3IiwibnR0IiwibnljIiwib2JpIiwib2JzZXJ2ZXIiLCJvZmZpY2UiLCJva2luYXdhIiwib2xheWFuIiwib2xheWFuZ3JvdXAiLCJvbGxvIiwib21lZ2EiLCJvbmUiLCJvbmciLCJvbmwiLCJvbmxpbmUiLCJvb28iLCJvcGVuIiwib3JhY2xl''@;'; put 'put ''Iiwib3JhbmdlIiwib3JnYW5pYyIsIm9yaWdpbnMiLCJvc2FrYSIsIm90c3VrYSIsIm90dCIsIm92aCIsInBhZ2UiLCJwYW5hc29uaWMiLCJwYXJpcyIsInBhcnMiLCJwYXJ0bmVycyIsInBhcnRzIiwicGFydHkiLCJwYXkiLCJwY2N3IiwicGV0IiwicGZpemVyIiwicGhhcm1hY3kiLCJwaGQi''@;'; put 'put ''LCJwaGlsaXBzIiwicGhvbmUiLCJwaG90byIsInBob3RvZ3JhcGh5IiwicGhvdG9zIiwicGh5c2lvIiwicGljcyIsInBpY3RldCIsInBpY3R1cmVzIiwicGlkIiwicGluIiwicGluZyIsInBpbmsiLCJwaW9uZWVyIiwicGl6emEiLCJwbGFjZSIsInBsYXkiLCJwbGF5c3RhdGlvbiIsInBsdW1i''@;'; put 'put ''aW5nIiwicGx1cyIsInBuYyIsInBvaGwiLCJwb2tlciIsInBvbGl0aWUiLCJwb3JuIiwicHJhbWVyaWNhIiwicHJheGkiLCJwcmVzcyIsInByaW1lIiwicHJvZCIsInByb2R1Y3Rpb25zIiwicHJvZiIsInByb2dyZXNzaXZlIiwicHJvbW8iLCJwcm9wZXJ0aWVzIiwicHJvcGVydHkiLCJwcm90''@;'; put 'put ''ZWN0aW9uIiwicHJ1IiwicHJ1ZGVudGlhbCIsInB1YiIsInB3YyIsInFwb24iLCJxdWViZWMiLCJxdWVzdCIsInJhY2luZyIsInJhZGlvIiwicmVhZCIsInJlYWxlc3RhdGUiLCJyZWFsdG9yIiwicmVhbHR5IiwicmVjaXBlcyIsInJlZCIsInJlZHN0b25lIiwicmVkdW1icmVsbGEiLCJyZWhh''@;'; put 'put ''YiIsInJlaXNlIiwicmVpc2VuIiwicmVpdCIsInJlbGlhbmNlIiwicmVuIiwicmVudCIsInJlbnRhbHMiLCJyZXBhaXIiLCJyZXBvcnQiLCJyZXB1YmxpY2FuIiwicmVzdCIsInJlc3RhdXJhbnQiLCJyZXZpZXciLCJyZXZpZXdzIiwicmV4cm90aCIsInJpY2giLCJyaWNoYXJkbGkiLCJyaWNv''@;'; put 'put ''aCIsInJpbCIsInJpbyIsInJpcCIsInJvY2tzIiwicm9kZW8iLCJyb2dlcnMiLCJyb29tIiwicnN2cCIsInJ1Z2J5IiwicnVociIsInJ1biIsInJ3ZSIsInJ5dWt5dSIsInNhYXJsYW5kIiwic2FmZSIsInNhZmV0eSIsInNha3VyYSIsInNhbGUiLCJzYWxvbiIsInNhbXNjbHViIiwic2Ftc3Vu''@;'; put 'put ''ZyIsInNhbmR2aWsiLCJzYW5kdmlrY29yb21hbnQiLCJzYW5vZmkiLCJzYXAiLCJzYXJsIiwic2FzIiwic2F2ZSIsInNheG8iLCJzYmkiLCJzYnMiLCJzY2IiLCJzY2hhZWZmbGVyIiwic2NobWlkdCIsInNjaG9sYXJzaGlwcyIsInNjaG9vbCIsInNjaHVsZSIsInNjaHdhcnoiLCJzY2llbmNl''@;'; put 'put ''Iiwic2NvdCIsInNlYXJjaCIsInNlYXQiLCJzZWN1cmUiLCJzZWN1cml0eSIsInNlZWsiLCJzZWxlY3QiLCJzZW5lciIsInNlcnZpY2VzIiwic2V2ZW4iLCJzZXciLCJzZXgiLCJzZXh5Iiwic2ZyIiwic2hhbmdyaWxhIiwic2hhcnAiLCJzaGVsbCIsInNoaWEiLCJzaGlrc2hhIiwic2hvZXMi''@;'; put 'put ''LCJzaG9wIiwic2hvcHBpbmciLCJzaG91amkiLCJzaG93Iiwic2lsayIsInNpbmEiLCJzaW5nbGVzIiwic2l0ZSIsInNraSIsInNraW4iLCJza3kiLCJza3lwZSIsInNsaW5nIiwic21hcnQiLCJzbWlsZSIsInNuY2YiLCJzb2NjZXIiLCJzb2NpYWwiLCJzb2Z0YmFuayIsInNvZnR3YXJlIiwi''@;'; put 'put ''c29odSIsInNvbGFyIiwic29sdXRpb25zIiwic29uZyIsInNvbnkiLCJzb3kiLCJzcGEiLCJzcGFjZSIsInNwb3J0Iiwic3BvdCIsInNybCIsInN0YWRhIiwic3RhcGxlcyIsInN0YXIiLCJzdGF0ZWJhbmsiLCJzdGF0ZWZhcm0iLCJzdGMiLCJzdGNncm91cCIsInN0b2NraG9sbSIsInN0b3Jh''@;'; put 'put ''Z2UiLCJzdG9yZSIsInN0cmVhbSIsInN0dWRpbyIsInN0dWR5Iiwic3R5bGUiLCJzdWNrcyIsInN1cHBsaWVzIiwic3VwcGx5Iiwic3VwcG9ydCIsInN1cmYiLCJzdXJnZXJ5Iiwic3V6dWtpIiwic3dhdGNoIiwic3dpc3MiLCJzeWRuZXkiLCJzeXN0ZW1zIiwidGFiIiwidGFpcGVpIiwidGFs''@;'; put 'put ''ayIsInRhb2JhbyIsInRhcmdldCIsInRhdGFtb3RvcnMiLCJ0YXRhciIsInRhdHRvbyIsInRheCIsInRheGkiLCJ0Y2kiLCJ0ZGsiLCJ0ZWFtIiwidGVjaCIsInRlY2hub2xvZ3kiLCJ0ZW1hc2VrIiwidGVubmlzIiwidGV2YSIsInRoZCIsInRoZWF0ZXIiLCJ0aGVhdHJlIiwidGlhYSIsInRp''@;'; put 'put ''Y2tldHMiLCJ0aWVuZGEiLCJ0aXBzIiwidGlyZXMiLCJ0aXJvbCIsInRqbWF4eCIsInRqeCIsInRrbWF4eCIsInRtYWxsIiwidG9kYXkiLCJ0b2t5byIsInRvb2xzIiwidG9wIiwidG9yYXkiLCJ0b3NoaWJhIiwidG90YWwiLCJ0b3VycyIsInRvd24iLCJ0b3lvdGEiLCJ0b3lzIiwidHJhZGUi''@;'; put 'put ''LCJ0cmFkaW5nIiwidHJhaW5pbmciLCJ0cmF2ZWwiLCJ0cmF2ZWxlcnMiLCJ0cmF2ZWxlcnNpbnN1cmFuY2UiLCJ0cnVzdCIsInRydiIsInR1YmUiLCJ0dWkiLCJ0dW5lcyIsInR1c2h1IiwidHZzIiwidWJhbmsiLCJ1YnMiLCJ1bmljb20iLCJ1bml2ZXJzaXR5IiwidW5vIiwidW9sIiwidXBz''@;'; put 'put ''IiwidmFjYXRpb25zIiwidmFuYSIsInZhbmd1YXJkIiwidmVnYXMiLCJ2ZW50dXJlcyIsInZlcmlzaWduIiwidmVyc2ljaGVydW5nIiwidmV0IiwidmlhamVzIiwidmlkZW8iLCJ2aWciLCJ2aWtpbmciLCJ2aWxsYXMiLCJ2aW4iLCJ2aXAiLCJ2aXJnaW4iLCJ2aXNhIiwidmlzaW9uIiwidml2''@;'; put 'put ''YSIsInZpdm8iLCJ2bGFhbmRlcmVuIiwidm9ka2EiLCJ2b2x2byIsInZvdGUiLCJ2b3RpbmciLCJ2b3RvIiwidm95YWdlIiwid2FsZXMiLCJ3YWxtYXJ0Iiwid2FsdGVyIiwid2FuZyIsIndhbmdnb3UiLCJ3YXRjaCIsIndhdGNoZXMiLCJ3ZWF0aGVyIiwid2VhdGhlcmNoYW5uZWwiLCJ3ZWJj''@;'; put 'put ''YW0iLCJ3ZWJlciIsIndlYnNpdGUiLCJ3ZWQiLCJ3ZWRkaW5nIiwid2VpYm8iLCJ3ZWlyIiwid2hvc3dobyIsIndpZW4iLCJ3aWtpIiwid2lsbGlhbWhpbGwiLCJ3aW4iLCJ3aW5kb3dzIiwid2luZSIsIndpbm5lcnMiLCJ3bWUiLCJ3b2x0ZXJza2x1d2VyIiwid29vZHNpZGUiLCJ3b3JrIiwi''@;'; put 'put ''d29ya3MiLCJ3b3JsZCIsIndvdyIsInd0YyIsInd0ZiIsInhib3giLCJ4ZXJveCIsInhpaHVhbiIsInhpbiIsIlx1MDkxNVx1MDk0OVx1MDkyZSIsIlx1MzBiYlx1MzBmY1x1MzBlYiIsIlx1NGY1Ylx1NWM3MSIsIlx1NjE0OFx1NTU4NCIsIlx1OTZjNlx1NTZlMiIsIlx1NTcyOFx1N2ViZiIs''@;'; put 'put ''Ilx1NzBiOVx1NzcwYiIsIlx1MGUwNFx1MGUyZFx1MGUyMSIsIlx1NTE2Ylx1NTM2NiIsIlx1MDY0NVx1MDY0OFx1MDY0Mlx1MDYzOSIsIlx1NTE2Y1x1NzZjYSIsIlx1NTE2Y1x1NTNmOCIsIlx1OTk5OVx1NjgzY1x1OTFjY1x1NjJjOSIsIlx1N2Y1MVx1N2FkOSIsIlx1NzlmYlx1NTJhOCIs''@;'; put 'put ''Ilx1NjIxMVx1NzIzMVx1NGY2MCIsIlx1MDQzY1x1MDQzZVx1MDQ0MVx1MDQzYVx1MDQzMlx1MDQzMCIsIlx1MDQzYVx1MDQzMFx1MDQ0Mlx1MDQzZVx1MDQzYlx1MDQzOFx1MDQzYSIsIlx1MDQzZVx1MDQzZFx1MDQzYlx1MDQzMFx1MDQzOVx1MDQzZCIsIlx1MDQ0MVx1MDQzMFx1MDQzOVx1''@;'; put 'put ''MDQ0MiIsIlx1ODA1NFx1OTAxYSIsIlx1MDVlN1x1MDVkNVx1MDVkZCIsIlx1NjVmNlx1NWMxYSIsIlx1NWZhZVx1NTM1YSIsIlx1NmRlMVx1OWE2Y1x1OTUyMSIsIlx1MzBkNVx1MzBhMVx1MzBjM1x1MzBiN1x1MzBlN1x1MzBmMyIsIlx1MDQzZVx1MDQ0MFx1MDQzMyIsIlx1MDkyOFx1MDk0''@;'; put 'put ''N1x1MDkxZiIsIlx1MzBiOVx1MzBjOFx1MzBhMiIsIlx1MzBhMlx1MzBkZVx1MzBiZVx1MzBmMyIsIlx1YzBiY1x1YzEzMSIsIlx1NTU0Nlx1NjgwNyIsIlx1NTU0Nlx1NWU5NyIsIlx1NTU0Nlx1NTdjZSIsIlx1MDQzNFx1MDQzNVx1MDQ0Mlx1MDQzOCIsIlx1MzBkZFx1MzBhNFx1MzBmM1x1''@;'; put 'put ''MzBjOCIsIlx1NjViMFx1OTVmYiIsIlx1NWJiNlx1OTZmYiIsIlx1MDY0M1x1MDY0OFx1MDY0NSIsIlx1NGUyZFx1NjU4N1x1N2Y1MSIsIlx1NGUyZFx1NGZlMSIsIlx1NWEzMVx1NGU1MCIsIlx1OGMzN1x1NmI0YyIsIlx1OTZmYlx1OGEwYVx1NzZjOFx1NzlkMSIsIlx1OGQyZFx1NzI2OSIs''@;'; put 'put ''Ilx1MzBhZlx1MzBlOVx1MzBhNlx1MzBjOSIsIlx1OTAxYVx1OGNhOSIsIlx1N2Y1MVx1NWU5NyIsIlx1MDkzOFx1MDkwMlx1MDkxN1x1MDkyMFx1MDkyOCIsIlx1OTkxMFx1NTM4NSIsIlx1N2Y1MVx1N2VkYyIsIlx1MDQzYVx1MDQzZVx1MDQzYyIsIlx1NGU5YVx1OWE2Y1x1OTAwYSIsIlx1''@;'; put 'put ''OThkZlx1NTRjMSIsIlx1OThkZVx1NTIyOVx1NmQ2NiIsIlx1NjI0Ylx1NjczYSIsIlx1MDYyN1x1MDYzMVx1MDYyN1x1MDY0NVx1MDY0M1x1MDY0OCIsIlx1MDYyN1x1MDY0NFx1MDYzOVx1MDY0NFx1MDY0YVx1MDYyN1x1MDY0NiIsIlx1MDYyOFx1MDYyN1x1MDYzMlx1MDYyN1x1MDYzMSIs''@;'; put 'put ''Ilx1MDYyN1x1MDYyOFx1MDY0OFx1MDYzOFx1MDYyOFx1MDY0YSIsIlx1MDY0M1x1MDYyN1x1MDYyYlx1MDY0OFx1MDY0NFx1MDY0YVx1MDY0MyIsIlx1MDY0N1x1MDY0NVx1MDYzMVx1MDYyN1x1MDY0NyIsIlx1YjJmN1x1Y2VmNCIsIlx1NjUzZlx1NWU5YyIsIlx1MDYzNFx1MDYyOFx1MDY0''@;'; put 'put ''M1x1MDYyOSIsIlx1MDYyOFx1MDY0YVx1MDYyYVx1MDY0MyIsIlx1MDYzOVx1MDYzMVx1MDYyOCIsIlx1NjczYVx1Njc4NCIsIlx1N2VjNFx1N2VjN1x1NjczYVx1Njc4NCIsIlx1NTA2NVx1NWViNyIsIlx1NjJkYlx1ODA1OCIsIlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1NTkyN1x1NjJmZiIs''@;'; put 'put ''Ilx1MzA3Zlx1MzA5M1x1MzA2YSIsIlx1MzBiMFx1MzBmY1x1MzBiMFx1MzBlYiIsIlx1NGUxNlx1NzU0YyIsIlx1NjZmOFx1N2M0ZCIsIlx1N2Y1MVx1NTc0MCIsIlx1YjJmN1x1YjEzNyIsIlx1MzBiM1x1MzBlMCIsIlx1NTkyOVx1NGUzYlx1NjU1OSIsIlx1NmUzOFx1NjIwZiIsInZlcm1c''@;'; put 'put ''eGY2Z2Vuc2JlcmF0ZXIiLCJ2ZXJtXHhmNmdlbnNiZXJhdHVuZyIsIlx1NGYwMVx1NGUxYSIsIlx1NGZlMVx1NjA2ZiIsIlx1NTYwOVx1OTFjY1x1NTkyN1x1OTE1Mlx1NWU5NyIsIlx1NTYwOVx1OTFjYyIsIlx1NWU3Zlx1NGUxYyIsIlx1NjUzZlx1NTJhMSIsInh5eiIsInlhY2h0cyIsInlh''@;'; put 'put ''aG9vIiwieWFtYXh1biIsInlhbmRleCIsInlvZG9iYXNoaSIsInlvZ2EiLCJ5b2tvaGFtYSIsInlvdSIsInlvdXR1YmUiLCJ5dW4iLCJ6YXBwb3MiLCJ6YXJhIiwiemVybyIsInppcCIsInpvbmUiLCJ6dWVyaWNoIiwiY28ua3JkIiwiZWR1LmtyZCIsImFydC5wbCIsImdsaXdpY2UucGwiLCJr''@;'; put 'put ''cmFrb3cucGwiLCJwb3puYW4ucGwiLCJ3cm9jLnBsIiwiemFrb3BhbmUucGwiLCJsaWIuZGUudXMiLCIxMmNoYXJzLmRldiIsIjEyY2hhcnMuaXQiLCIxMmNoYXJzLnBybyIsImNjLnVhIiwiaW5mLnVhIiwibHRkLnVhIiwiNjExLnRvIiwiYTJob3N0ZWQuY29tIiwiY3BzZXJ2ZXIuY29tIiwi''@;'; put 'put ''YWFhLnZvZGthIiwiKi5vbi1hY29ybi5pbyIsImFjdGl2ZXRyYWlsLmJpeiIsImFkYXB0YWJsZS5hcHAiLCJhZG9iZWFlbWNsb3VkLmNvbSIsIiouZGV2LmFkb2JlYWVtY2xvdWQuY29tIiwiYWVtLmxpdmUiLCJobHgubGl2ZSIsImFkb2JlYWVtY2xvdWQubmV0IiwiYWVtLnBhZ2UiLCJobHgu''@;'; put 'put ''cGFnZSIsImhseDMucGFnZSIsImFkb2JlaW8tc3RhdGljLm5ldCIsImFkb2JlaW9ydW50aW1lLm5ldCIsImFmcmljYS5jb20iLCJiZWVwLnBsIiwiYWlya2l0YXBwcy5jb20iLCJhaXJraXRhcHBzLWF1LmNvbSIsImFpcmtpdGFwcHMuZXUiLCJhaXZlbmNsb3VkLmNvbSIsImFrYWRucy5uZXQi''@;'; put 'put ''LCJha2FtYWkubmV0IiwiYWthbWFpLXN0YWdpbmcubmV0IiwiYWthbWFpZWRnZS5uZXQiLCJha2FtYWllZGdlLXN0YWdpbmcubmV0IiwiYWthbWFpaGQubmV0IiwiYWthbWFpaGQtc3RhZ2luZy5uZXQiLCJha2FtYWlvcmlnaW4ubmV0IiwiYWthbWFpb3JpZ2luLXN0YWdpbmcubmV0IiwiYWth''@;'; put 'put ''bWFpemVkLm5ldCIsImFrYW1haXplZC1zdGFnaW5nLm5ldCIsImVkZ2VrZXkubmV0IiwiZWRnZWtleS1zdGFnaW5nLm5ldCIsImVkZ2VzdWl0ZS5uZXQiLCJlZGdlc3VpdGUtc3RhZ2luZy5uZXQiLCJiYXJzeS5jYSIsIiouY29tcHV0ZS5lc3RhdGUiLCIqLmFsY2VzLm5ldHdvcmsiLCJrYXNz''@;'; put 'put ''ZXJ2ZXIuY29tIiwiYWx0ZXJ2aXN0YS5vcmciLCJhbHdheXNkYXRhLm5ldCIsIm15YW1hemUubmV0IiwiZXhlY3V0ZS1hcGkuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiZXhlY3V0ZS1hcGkuY24tbm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsImV4ZWN1dGUtYXBpLmFmLXNv''@;'; put 'put ''dXRoLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5hcC1ub3J0''@;'; put 'put ''aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtc291dGgtMi5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLXNvdXRo''@;'; put 'put ''ZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5j''@;'; put 'put ''YS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmV1LW5v''@;'; put 'put ''cnRoLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmV1LXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkuZXUtd2VzdC0yLmFtYXpv''@;'; put 'put ''bmF3cy5jb20iLCJleGVjdXRlLWFwaS5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkubWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS5tZS1zb3V0aC0xLmFtYXpvbmF3cy5j''@;'; put 'put ''b20iLCJleGVjdXRlLWFwaS5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZXhlY3V0ZS1hcGkudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJleGVj''@;'; put 'put ''dXRlLWFwaS51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJleGVjdXRlLWFwaS51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImV4ZWN1dGUtYXBpLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiY2xvdWRmcm9udC5uZXQiLCJhdXRoLmFmLXNvdXRoLTEuYW1hem9uY29nbml0by5jb20i''@;'; put 'put ''LCJhdXRoLmFwLWVhc3QtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtbm9ydGhlYXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5hcC1ub3J0aGVhc3QtMy5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAt''@;'; put 'put ''c291dGgtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtc291dGgtMi5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtc291dGhlYXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5hcC1zb3V0aGVhc3QtMy5h''@;'; put 'put ''bWF6b25jb2duaXRvLmNvbSIsImF1dGguYXAtc291dGhlYXN0LTQuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmNhLWNlbnRyYWwtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguY2Etd2VzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5ldS1jZW50cmFsLTEuYW1hem9uY29nbml0by5j''@;'; put 'put ''b20iLCJhdXRoLmV1LWNlbnRyYWwtMi5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguZXUtbm9ydGgtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguZXUtc291dGgtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguZXUtc291dGgtMi5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguZXUtd2VzdC0x''@;'; put 'put ''LmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5ldS13ZXN0LTIuYW1hem9uY29nbml0by5jb20iLCJhdXRoLmV1LXdlc3QtMy5hbWF6b25jb2duaXRvLmNvbSIsImF1dGguaWwtY2VudHJhbC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC5tZS1jZW50cmFsLTEuYW1hem9uY29nbml0by5jb20i''@;'; put 'put ''LCJhdXRoLm1lLXNvdXRoLTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLnNhLWVhc3QtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgudXMtZWFzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC1maXBzLnVzLWVhc3QtMS5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgudXMtZWFzdC0yLmFt''@;'; put 'put ''YXpvbmNvZ25pdG8uY29tIiwiYXV0aC1maXBzLnVzLWVhc3QtMi5hbWF6b25jb2duaXRvLmNvbSIsImF1dGgtZmlwcy51cy1nb3Ytd2VzdC0xLmFtYXpvbmNvZ25pdG8uY29tIiwiYXV0aC51cy13ZXN0LTEuYW1hem9uY29nbml0by5jb20iLCJhdXRoLWZpcHMudXMtd2VzdC0xLmFtYXpvbmNv''@;'; put 'put ''Z25pdG8uY29tIiwiYXV0aC51cy13ZXN0LTIuYW1hem9uY29nbml0by5jb20iLCJhdXRoLWZpcHMudXMtd2VzdC0yLmFtYXpvbmNvZ25pdG8uY29tIiwiKi5jb21wdXRlLmFtYXpvbmF3cy5jb20uY24iLCIqLmNvbXB1dGUuYW1hem9uYXdzLmNvbSIsIiouY29tcHV0ZS0xLmFtYXpvbmF3cy5j''@;'; put 'put ''b20iLCJ1cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiZW1ybm90ZWJvb2tzLXByb2QuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiZW1yc3R1ZGlvLXByb2QuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNu''@;'; put 'put ''IiwiZW1yYXBwdWktcHJvZC5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiZW1ybm90ZWJvb2tzLXByb2QuY24tbm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsImVtcnN0dWRpby1wcm9kLmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5jb20uY24iLCJlbXJhcHB1aS1wcm9k''@;'; put 'put ''LmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9v''@;'; put 'put ''a3MtcHJvZC5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNv''@;'; put 'put ''bSIsImVtcnN0dWRpby1wcm9kLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuYXAtbm9y''@;'; put 'put ''dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwi''@;'; put 'put ''ZW1yYXBwdWktcHJvZC5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNv''@;'; put 'put ''bSIsImVtcm5vdGVib29rcy1wcm9kLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLXNvdXRoZWFz''@;'; put 'put ''dC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcnN0''@;'; put 'put ''dWRpby1wcm9kLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuYXAtc291dGhlYXN0LTMu''@;'; put 'put ''YW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmFwLXNvdXRoZWFzdC00LmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWkt''@;'; put 'put ''cHJvZC5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwi''@;'; put 'put ''ZW1ybm90ZWJvb2tzLXByb2QuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5ldS1jZW50cmFsLTEuYW1hem9u''@;'; put 'put ''YXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuZXUtY2Vu''@;'; put 'put ''dHJhbC0yLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2Qu''@;'; put 'put ''ZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9v''@;'; put 'put ''a3MtcHJvZC5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJz''@;'; put 'put ''dHVkaW8tcHJvZC5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiZW1y''@;'; put 'put ''YXBwdWktcHJvZC5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwi''@;'; put 'put ''ZW1ybm90ZWJvb2tzLXByb2QuaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QubWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5tZS1jZW50cmFsLTEu''@;'; put 'put ''YW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLm1lLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5tZS1z''@;'; put 'put ''b3V0aC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2Quc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QudXMt''@;'; put 'put ''ZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJub3RlYm9va3MtcHJvZC51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0dWRpby1wcm9kLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9k''@;'; put 'put ''LnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcnN0''@;'; put 'put ''dWRpby1wcm9kLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcmFwcHVpLXByb2QudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QudXMtZ292LXdlc3QtMS5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiZW1yYXBwdWktcHJvZC51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImVtcm5vdGVib29rcy1wcm9kLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiZW1yc3R1ZGlvLXByb2QudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJlbXJhcHB1aS1wcm9kLnVzLXdlc3QtMi5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiZW1ybm90ZWJvb2tzLXByb2QudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJlbXJzdHVkaW8tcHJvZC51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsIiouY24tbm9ydGgtMS5haXJmbG93LmFtYXpvbmF3cy5jb20uY24iLCIqLmNuLW5vcnRod2VzdC0xLmFpcmZsb3cuYW1h''@;'; put 'put ''em9uYXdzLmNvbS5jbiIsIiouYWYtc291dGgtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLWVhc3QtMS5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLW5vcnRoZWFzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouYXAtbm9ydGhlYXN0LTIuYWlyZmxvdy5hbWF6b25hd3Mu''@;'; put 'put ''Y29tIiwiKi5hcC1ub3J0aGVhc3QtMy5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLXNvdXRoLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5hcC1zb3V0aC0yLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouYXAtc291dGhlYXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5h''@;'; put 'put ''cC1zb3V0aGVhc3QtMi5haXJmbG93LmFtYXpvbmF3cy5jb20iLCIqLmFwLXNvdXRoZWFzdC0zLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouYXAtc291dGhlYXN0LTQuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5jYS1jZW50cmFsLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5jYS13''@;'; put 'put ''ZXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS1jZW50cmFsLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS1jZW50cmFsLTIuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS1ub3J0aC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouZXUtc291dGgtMS5haXJmbG93''@;'; put 'put ''LmFtYXpvbmF3cy5jb20iLCIqLmV1LXNvdXRoLTIuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS13ZXN0LTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS13ZXN0LTIuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5ldS13ZXN0LTMuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5p''@;'; put 'put ''bC1jZW50cmFsLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5tZS1jZW50cmFsLTEuYWlyZmxvdy5hbWF6b25hd3MuY29tIiwiKi5tZS1zb3V0aC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIiouc2EtZWFzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIioudXMtZWFzdC0xLmFpcmZs''@;'; put 'put ''b3cuYW1hem9uYXdzLmNvbSIsIioudXMtZWFzdC0yLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIioudXMtd2VzdC0xLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsIioudXMtd2VzdC0yLmFpcmZsb3cuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20u''@;'; put 'put ''Y24iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtYWNjZXNzcG9pbnQuY24tbm9y''@;'; put 'put ''dGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtZGVwcmVjYXRlZC5jbi1ub3J0aC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy1vYmplY3QtbGFtYmRhLmNuLW5vcnRoLTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLXdlYnNpdGUuY24tbm9ydGgtMS5hbWF6b25hd3MuY29tLmNuIiwiczMuZHVhbHN0''@;'; put 'put ''YWNrLmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suY24tbm9ydGh3ZXN0LTEuYW1hem9uYXdzLmNvbS5jbiIsInMzLmNuLW5vcnRod2VzdC0xLmFtYXpvbmF3cy5jb20uY24iLCJzMy1hY2Nlc3Nwb2ludC5jbi1ub3J0aHdlc3QtMS5h''@;'; put 'put ''bWF6b25hd3MuY29tLmNuIiwiczMtb2JqZWN0LWxhbWJkYS5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiczMtd2Vic2l0ZS5jbi1ub3J0aHdlc3QtMS5hbWF6b25hd3MuY29tLmNuIiwiczMuZHVhbHN0YWNrLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3Bv''@;'; put 'put ''aW50LmR1YWxzdGFjay5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1v''@;'; put 'put ''YmplY3QtbGFtYmRhLmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYWYtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLWVhc3QtMS5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwiczMuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNr''@;'; put 'put ''LmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1ub3J0aGVhc3QtMS5hbWF6b25h''@;'; put 'put ''d3MuY29tIiwiczMtYWNjZXNzcG9pbnQuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1ub3J0''@;'; put 'put ''aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIs''@;'; put 'put ''InMzLWFjY2Vzc3BvaW50LmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtbm9ydGhlYXN0LTMu''@;'; put 'put ''YW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nl''@;'; put 'put ''c3Nwb2ludC5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5hcC1ub3J0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNv''@;'; put 'put ''bSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1zb3V0aC0xLmFtYXpv''@;'; put 'put ''bmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLXNvdXRoLTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1zb3V0''@;'; put 'put ''aC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLXNvdXRo''@;'; put 'put ''LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNp''@;'; put 'put ''dGUuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtc291dGhlYXN0LTEuYW1hem9uYXdz''@;'; put 'put ''LmNvbSIsInMzLXdlYnNpdGUuYXAtc291dGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxz''@;'; put 'put ''dGFjay5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMuYXAtc291dGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJz''@;'; put 'put ''My13ZWJzaXRlLmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suYXAtc291dGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suYXAt''@;'; put 'put ''c291dGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLmFwLXNvdXRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0''@;'; put 'put ''ZS5hcC1zb3V0aGVhc3QtMy5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC00LmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmFwLXNvdXRoZWFz''@;'; put 'put ''dC00LmFtYXpvbmF3cy5jb20iLCJzMy5hcC1zb3V0aGVhc3QtNC5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuYXAtc291dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuYXAtc291''@;'; put 'put ''dGhlYXN0LTQuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtNS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5hcC1zb3V0aGVhc3QtNS5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiczMuYXAtc291dGhlYXN0LTUuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy1kZXByZWNhdGVkLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmFwLXNvdXRoZWFz''@;'; put 'put ''dC01LmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmFwLXNvdXRoZWFzdC01LmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nl''@;'; put 'put ''c3Nwb2ludC1maXBzLmR1YWxzdGFjay5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuZHVhbHN0YWNrLmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy5jYS1jZW50cmFsLTEu''@;'; put 'put ''YW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmNh''@;'; put 'put ''LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5jYS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vz''@;'; put 'put ''c3BvaW50LWZpcHMuZHVhbHN0YWNrLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5kdWFsc3RhY2suY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmNhLXdlc3QtMS5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwiczMtYWNjZXNzcG9pbnQuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5jYS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuY2Etd2VzdC0xLmFtYXpvbmF3cy5jb20i''@;'; put 'put ''LCJzMy13ZWJzaXRlLmNhLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suZXUtY2VudHJh''@;'; put 'put ''bC0xLmFtYXpvbmF3cy5jb20iLCJzMy5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmV1LWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZXUtY2VudHJhbC0x''@;'; put 'put ''LmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2suZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsInMz''@;'; put 'put ''LmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtY2VudHJhbC0yLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmV1LWNlbnRyYWwtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5ldS1jZW50cmFsLTIuYW1hem9uYXdzLmNvbSIsInMzLmR1''@;'; put 'put ''YWxzdGFjay5ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiczMuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwiczMtb2Jq''@;'; put 'put ''ZWN0LWxhbWJkYS5ldS1ub3J0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suZXUtc291dGgtMS5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20i''@;'; put 'put ''LCJzMy13ZWJzaXRlLmV1LXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2suZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suZXUtc291dGgtMi5h''@;'; put 'put ''bWF6b25hd3MuY29tIiwiczMuZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtc291dGgtMi5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5ldS1zb3V0aC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmV1LXNvdXRoLTIuYW1hem9uYXdzLmNv''@;'; put 'put ''bSIsInMzLmR1YWxzdGFjay5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVhbHN0YWNrLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZXUtd2VzdC0xLmFtYXpvbmF3cy5j''@;'; put 'put ''b20iLCJzMy1hY2Nlc3Nwb2ludC5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWRlcHJlY2F0ZWQuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLmV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIs''@;'; put 'put ''InMzLmR1YWxzdGFjay5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1v''@;'; put 'put ''YmplY3QtbGFtYmRhLmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFjay5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIs''@;'; put 'put ''InMzLXdlYnNpdGUuZHVhbHN0YWNrLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5ldS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJzMy13''@;'; put 'put ''ZWJzaXRlLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suaWwtY2VudHJhbC0xLmFt''@;'; put 'put ''YXpvbmF3cy5jb20iLCJzMy5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmlsLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuaWwtY2VudHJhbC0xLmFtYXpv''@;'; put 'put ''bmF3cy5jb20iLCJzMy5kdWFsc3RhY2subWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2subWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay5tZS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLm1lLWNl''@;'; put 'put ''bnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQubWUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLm1lLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5tZS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFj''@;'; put 'put ''ay5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2subWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMubWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQubWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxh''@;'; put 'put ''bWJkYS5tZS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLmFtYXpvbmF3cy5jb20iLCJzMy0xLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3''@;'; put 'put ''cy5jb20iLCJzMy1hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hcC1zb3V0aGVhc3QtMi5hbWF6b25h''@;'; put 'put ''d3MuY29tIiwiczMtY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJzMy1ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsInMzLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZXUtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1l''@;'; put 'put ''dS13ZXN0LTMuYW1hem9uYXdzLmNvbSIsInMzLWV4dGVybmFsLTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMtdXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy11cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJtcmFwLmFjY2Vzc3BvaW50LnMzLWdsb2JhbC5hbWF6b25h''@;'; put 'put ''d3MuY29tIiwiczMtbWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwiczMtc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy11cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMz''@;'; put 'put ''LXVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtdXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLWFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLWFwLXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLWFwLXNvdXRoZWFzdC0y''@;'; put 'put ''LmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLWV1LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS1zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUtdXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLXVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNv''@;'; put 'put ''bSIsInMzLXdlYnNpdGUtdXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLXVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLnNhLWVhc3QtMS5hbWF6b25hd3MuY29t''@;'; put 'put ''IiwiczMtd2Vic2l0ZS5kdWFsc3RhY2suc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS5zYS1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMz''@;'; put 'put ''LXdlYnNpdGUuc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2sudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2sudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmR1YWxzdGFjay51cy1lYXN0LTEu''@;'; put 'put ''YW1hem9uYXdzLmNvbSIsInMzLWZpcHMuZHVhbHN0YWNrLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2sudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LnVzLWVhc3QtMS5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWRlcHJlY2F0ZWQudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS51cy1lYXN0LTEuYW1hem9u''@;'; put 'put ''YXdzLmNvbSIsInMzLXdlYnNpdGUudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2sudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC5kdWFsc3RhY2sudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmR1YWxzdGFj''@;'; put 'put ''ay51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuZHVhbHN0YWNrLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtd2Vic2l0ZS5kdWFsc3RhY2sudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LnVz''@;'; put 'put ''LWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWRlcHJlY2F0ZWQudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS51cy1l''@;'; put 'put ''YXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy5kdWFsc3RhY2sudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vz''@;'; put 'put ''c3BvaW50LWZpcHMuZHVhbHN0YWNrLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMuZHVhbHN0YWNrLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LnVzLWdvdi1lYXN0LTEuYW1h''@;'; put 'put ''em9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMudXMtZ292LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy51cy1nb3YtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1vYmplY3QtbGFtYmRhLnVzLWdvdi1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUudXMtZ292''@;'; put 'put ''LWVhc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLmR1YWxzdGFjay51cy1nb3Ytd2VzdC0x''@;'; put 'put ''LmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLmR1YWxzdGFjay51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLnVz''@;'; put 'put ''LWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWZpcHMudXMtZ292LXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtb2JqZWN0LWxhbWJkYS51cy1nb3Ytd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLnVzLWdvdi13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLmR1YWxzdGFj''@;'; put 'put ''ay51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LmR1YWxzdGFjay51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMuZHVhbHN0YWNrLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtZmlwcy5kdWFsc3RhY2sudXMtd2VzdC0xLmFt''@;'; put 'put ''YXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLmR1YWxzdGFjay51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC1maXBzLnVzLXdlc3QtMS5hbWF6''@;'; put 'put ''b25hd3MuY29tIiwiczMtZmlwcy51cy13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwiczMuZHVhbHN0YWNrLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwi''@;'; put 'put ''czMtYWNjZXNzcG9pbnQuZHVhbHN0YWNrLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtYWNjZXNzcG9pbnQtZmlwcy5kdWFsc3RhY2sudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1maXBzLmR1YWxzdGFjay51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLXdlYnNpdGUuZHVh''@;'; put 'put ''bHN0YWNrLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1hY2Nlc3Nwb2ludC51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLWFjY2Vzc3BvaW50LWZpcHMudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy1kZXByZWNhdGVkLnVz''@;'; put 'put ''LXdlc3QtMi5hbWF6b25hd3MuY29tIiwiczMtZmlwcy51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsInMzLW9iamVjdC1sYW1iZGEudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJzMy13ZWJzaXRlLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwibGFiZWxpbmcuYXAtbm9ydGhlYXN0LTEuc2Fn''@;'; put 'put ''ZW1ha2VyLmF3cyIsImxhYmVsaW5nLmFwLW5vcnRoZWFzdC0yLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy5hcC1zb3V0aC0xLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy5hcC1zb3V0aGVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcuYXAtc291dGhlYXN0LTIuc2FnZW1ha2VyLmF3''@;'; put 'put ''cyIsImxhYmVsaW5nLmNhLWNlbnRyYWwtMS5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcuZXUtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy5ldS13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLmV1LXdlc3QtMi5zYWdlbWFrZXIuYXdzIiwibGFiZWxpbmcudXMtZWFz''@;'; put 'put ''dC0xLnNhZ2VtYWtlci5hd3MiLCJsYWJlbGluZy51cy1lYXN0LTIuc2FnZW1ha2VyLmF3cyIsImxhYmVsaW5nLnVzLXdlc3QtMi5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYWYtc291dGgtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYXAtZWFzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3Rl''@;'; put 'put ''Ym9vay5hcC1ub3J0aGVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYXAtbm9ydGhlYXN0LTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmFwLW5vcnRoZWFzdC0zLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1zb3V0aC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1z''@;'; put 'put ''b3V0aC0yLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1zb3V0aGVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suYXAtc291dGhlYXN0LTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmFwLXNvdXRoZWFzdC0zLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5hcC1zb3V0aGVhc3Qt''@;'; put 'put ''NC5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suY2EtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay1maXBzLmNhLWNlbnRyYWwtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suY2Etd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay1maXBzLmNhLXdlc3QtMS5zYWdlbWFr''@;'; put 'put ''ZXIuYXdzIiwibm90ZWJvb2suZXUtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5ldS1jZW50cmFsLTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmV1LW5vcnRoLTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmV1LXNvdXRoLTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29r''@;'; put 'put ''LmV1LXNvdXRoLTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmV1LXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2suZXUtd2VzdC0yLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5ldS13ZXN0LTMuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLmlsLWNlbnRyYWwtMS5zYWdlbWFrZXIu''@;'; put 'put ''YXdzIiwibm90ZWJvb2subWUtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5tZS1zb3V0aC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5zYS1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLnVzLWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2stZmlwcy51''@;'; put 'put ''cy1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLnVzLWVhc3QtMi5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2stZmlwcy51cy1lYXN0LTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLnVzLWdvdi1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLWZpcHMudXMtZ292LWVhc3Qt''@;'; put 'put ''MS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2sudXMtZ292LXdlc3QtMS5zYWdlbWFrZXIuYXdzIiwibm90ZWJvb2stZmlwcy51cy1nb3Ytd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay51cy13ZXN0LTEuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLWZpcHMudXMtd2VzdC0xLnNhZ2Vt''@;'; put 'put ''YWtlci5hd3MiLCJub3RlYm9vay51cy13ZXN0LTIuc2FnZW1ha2VyLmF3cyIsIm5vdGVib29rLWZpcHMudXMtd2VzdC0yLnNhZ2VtYWtlci5hd3MiLCJub3RlYm9vay5jbi1ub3J0aC0xLnNhZ2VtYWtlci5jb20uY24iLCJub3RlYm9vay5jbi1ub3J0aHdlc3QtMS5zYWdlbWFrZXIuY29tLmNu''@;'; put 'put ''Iiwic3R1ZGlvLmFmLXNvdXRoLTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5hcC1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5hcC1ub3J0aGVhc3QtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmFwLW5vcnRoZWFzdC0yLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uYXAtbm9ydGhlYXN0''@;'; put 'put ''LTMuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5hcC1zb3V0aC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uYXAtc291dGhlYXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5hcC1zb3V0aGVhc3QtMi5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmFwLXNvdXRoZWFzdC0zLnNhZ2VtYWtlci5hd3Mi''@;'; put 'put ''LCJzdHVkaW8uY2EtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uZXUtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uZXUtbm9ydGgtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLmV1LXNvdXRoLTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby5ldS1zb3V0aC0yLnNhZ2Vt''@;'; put 'put ''YWtlci5hd3MiLCJzdHVkaW8uZXUtd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uZXUtd2VzdC0yLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uZXUtd2VzdC0zLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uaWwtY2VudHJhbC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8ubWUtY2VudHJhbC0x''@;'; put 'put ''LnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8ubWUtc291dGgtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLnNhLWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLnVzLWVhc3QtMS5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLnVzLWVhc3QtMi5zYWdlbWFrZXIuYXdzIiwic3R1ZGlvLnVzLWdvdi1l''@;'; put 'put ''YXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby1maXBzLnVzLWdvdi1lYXN0LTEuc2FnZW1ha2VyLmF3cyIsInN0dWRpby51cy1nb3Ytd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8tZmlwcy51cy1nb3Ytd2VzdC0xLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8udXMtd2VzdC0xLnNhZ2Vt''@;'; put 'put ''YWtlci5hd3MiLCJzdHVkaW8udXMtd2VzdC0yLnNhZ2VtYWtlci5hd3MiLCJzdHVkaW8uY24tbm9ydGgtMS5zYWdlbWFrZXIuY29tLmNuIiwic3R1ZGlvLmNuLW5vcnRod2VzdC0xLnNhZ2VtYWtlci5jb20uY24iLCIqLmV4cGVyaW1lbnRzLnNhZ2VtYWtlci5hd3MiLCJhbmFseXRpY3MtZ2F0''@;'; put 'put ''ZXdheS5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwiYW5hbHl0aWNzLWdhdGV3YXkuYXAtbm9ydGhlYXN0LTIuYW1hem9uYXdzLmNvbSIsImFuYWx5dGljcy1nYXRld2F5LmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsImFuYWx5dGljcy1nYXRld2F5LmFwLXNvdXRoZWFzdC0xLmFt''@;'; put 'put ''YXpvbmF3cy5jb20iLCJhbmFseXRpY3MtZ2F0ZXdheS5hcC1zb3V0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwiYW5hbHl0aWNzLWdhdGV3YXkuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJhbmFseXRpY3MtZ2F0ZXdheS5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsImFuYWx5dGljcy1n''@;'; put 'put ''YXRld2F5LnVzLWVhc3QtMS5hbWF6b25hd3MuY29tIiwiYW5hbHl0aWNzLWdhdGV3YXkudXMtZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJhbmFseXRpY3MtZ2F0ZXdheS51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImFtcGxpZnlhcHAuY29tIiwiKi5hd3NhcHBydW5uZXIuY29tIiwid2Vidmll''@;'; put 'put ''dy1hc3NldHMuYXdzLWNsb3VkOS5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmFmLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5hZi1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmFwLWVh''@;'; put 'put ''c3QtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5hcC1lYXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsInZm''@;'; put 'put ''cy5jbG91ZDkuYXAtbm9ydGhlYXN0LTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS5hcC1ub3J0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5hcC1ub3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5hcC1u''@;'; put 'put ''b3J0aGVhc3QtMi5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmFwLW5vcnRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmFwLW5vcnRoZWFzdC0zLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmFwLW5vcnRoZWFzdC0zLmFt''@;'; put 'put ''YXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuYXAtbm9ydGhlYXN0LTMuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3''@;'; put 'put ''LWFzc2V0cy5jbG91ZDkuYXAtc291dGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5hcC1zb3V0aGVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmFw''@;'; put 'put ''LXNvdXRoZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmFwLXNvdXRoZWFzdC0yLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuYXAtc291dGhlYXN0LTIu''@;'; put 'put ''YW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuY2EtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmNhLWNlbnRyYWwtMS5hbWF6b25hd3MuY29tIiwid2Vi''@;'; put 'put ''dmlldy1hc3NldHMuYXdzLWNsb3VkOS5ldS1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuZXUtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xv''@;'; put 'put ''dWQ5LmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuZXUtbm9ydGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmV1LW5vcnRoLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuZXUtc291dGgtMS5hbWF6b25hd3Mu''@;'; put 'put ''Y29tIiwidmZzLmNsb3VkOS5ldS1zb3V0aC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuZXUtc291dGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5ldS13ZXN0LTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuZXUtd2VzdC0x''@;'; put 'put ''LmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkuZXUtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LmV1LXdlc3QtMi5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNz''@;'; put 'put ''ZXRzLmNsb3VkOS5ldS13ZXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LmV1LXdlc3QtMy5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LmV1LXdlc3QtMy5hbWF6b25h''@;'; put 'put ''d3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS5pbC1jZW50cmFsLTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkuaWwtY2VudHJhbC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5Lm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91''@;'; put 'put ''ZDkubWUtc291dGgtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5Lm1lLXNvdXRoLTEuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmF3cy1jbG91ZDkuc2EtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LnNhLWVhc3QtMS5hbWF6b25hd3MuY29t''@;'; put 'put ''Iiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LnNhLWVhc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS51cy1lYXN0LTEuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkudXMtZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkudXMt''@;'; put 'put ''ZWFzdC0xLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5hd3MtY2xvdWQ5LnVzLWVhc3QtMi5hbWF6b25hd3MuY29tIiwidmZzLmNsb3VkOS51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZpZXctYXNzZXRzLmNsb3VkOS51cy1lYXN0LTIuYW1hem9uYXdzLmNvbSIsIndlYnZp''@;'; put 'put ''ZXctYXNzZXRzLmF3cy1jbG91ZDkudXMtd2VzdC0xLmFtYXpvbmF3cy5jb20iLCJ2ZnMuY2xvdWQ5LnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuY2xvdWQ5LnVzLXdlc3QtMS5hbWF6b25hd3MuY29tIiwid2Vidmlldy1hc3NldHMuYXdzLWNsb3VkOS51cy13ZXN0''@;'; put 'put ''LTIuYW1hem9uYXdzLmNvbSIsInZmcy5jbG91ZDkudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJ3ZWJ2aWV3LWFzc2V0cy5jbG91ZDkudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJhd3NhcHBzLmNvbSIsImNuLW5vcnRoLTEuZWIuYW1hem9uYXdzLmNvbS5jbiIsImNuLW5vcnRod2VzdC0x''@;'; put 'put ''LmViLmFtYXpvbmF3cy5jb20uY24iLCJlbGFzdGljYmVhbnN0YWxrLmNvbSIsImFmLXNvdXRoLTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1lYXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1ub3J0aGVhc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImFwLW5vcnRoZWFzdC0y''@;'; put 'put ''LmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtbm9ydGhlYXN0LTMuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1zb3V0aC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiYXAtc291dGhlYXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJhcC1zb3V0aGVhc3QtMi5lbGFzdGljYmVhbnN0YWxr''@;'; put 'put ''LmNvbSIsImFwLXNvdXRoZWFzdC0zLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiY2EtY2VudHJhbC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiZXUtY2VudHJhbC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwiZXUtbm9ydGgtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsImV1LXNvdXRoLTEuZWxh''@;'; put 'put ''c3RpY2JlYW5zdGFsay5jb20iLCJldS13ZXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJldS13ZXN0LTIuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJldS13ZXN0LTMuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJpbC1jZW50cmFsLTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJtZS1zb3V0aC0x''@;'; put 'put ''LmVsYXN0aWNiZWFuc3RhbGsuY29tIiwic2EtZWFzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwidXMtZWFzdC0xLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwidXMtZWFzdC0yLmVsYXN0aWNiZWFuc3RhbGsuY29tIiwidXMtZ292LWVhc3QtMS5lbGFzdGljYmVhbnN0YWxrLmNvbSIsInVzLWdv''@;'; put 'put ''di13ZXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJ1cy13ZXN0LTEuZWxhc3RpY2JlYW5zdGFsay5jb20iLCJ1cy13ZXN0LTIuZWxhc3RpY2JlYW5zdGFsay5jb20iLCIqLmVsYi5hbWF6b25hd3MuY29tLmNuIiwiKi5lbGIuYW1hem9uYXdzLmNvbSIsImF3c2dsb2JhbGFjY2VsZXJhdG9y''@;'; put 'put ''LmNvbSIsIioucHJpdmF0ZS5yZXBvc3QuYXdzIiwiZWVyby5vbmxpbmUiLCJlZXJvLXN0YWdlLm9ubGluZSIsImFwaWdlZS5pbyIsInBhbmVsLmRldiIsInNpaWl0ZXMuY29tIiwiYXBwc3BhY2Vob3N0ZWQuY29tIiwiYXBwc3BhY2V1c2VyY29udGVudC5jb20iLCJhcHB1ZG8ubmV0Iiwib24t''@;'; put 'put ''YXB0aWJsZS5jb20iLCJmNS5zaSIsImFydmFuZWRnZS5pciIsInVzZXIuYXNlaW5ldC5uZS5qcCIsImd2LnZjIiwiZC5ndi52YyIsInVzZXIucGFydHkuZXVzIiwicGltaWVudGEub3JnIiwicG9pdnJvbi5vcmciLCJwb3RhZ2VyLm9yZyIsInN3ZWV0cGVwcGVyLm9yZyIsIm15YXN1c3Rvci5j''@;'; put 'put ''b20iLCJjZG4ucHJvZC5hdGxhc3NpYW4tZGV2Lm5ldCIsInRyYW5zbGF0ZWQucGFnZSIsIm15ZnJpdHoubGluayIsIm15ZnJpdHoubmV0Iiwib25hdnN0YWNrLm5ldCIsIiouYXdkZXYuY2EiLCIqLmFkdmlzb3Iud3MiLCJlY29tbWVyY2Utc2hvcC5wbCIsImItZGF0YS5pbyIsImJhbGVuYS1k''@;'; put 'put ''ZXZpY2VzLmNvbSIsImJhc2UuZWMiLCJvZmZpY2lhbC5lYyIsImJ1eXNob3AuanAiLCJmYXNoaW9uc3RvcmUuanAiLCJoYW5kY3JhZnRlZC5qcCIsImthd2FpaXNob3AuanAiLCJzdXBlcnNhbGUuanAiLCJ0aGVzaG9wLmpwIiwic2hvcHNlbGVjdC5uZXQiLCJiYXNlLnNob3AiLCJiZWFnbGVi''@;'; put 'put ''b2FyZC5pbyIsIiouYmVnZXQuYXBwIiwicGFnZXMuZ2F5IiwiYm5yLmxhIiwiYml0YnVja2V0LmlvIiwiYmxhY2tiYXVkY2RuLm5ldCIsIm9mLmplIiwiYmx1ZWJpdGUuaW8iLCJib29tbGEubmV0IiwiYm91dGlyLmNvbSIsImJveGZ1c2UuaW8iLCJzcXVhcmU3LmNoIiwiYnBsYWNlZC5jb20i''@;'; put 'put ''LCJicGxhY2VkLmRlIiwic3F1YXJlNy5kZSIsImJwbGFjZWQubmV0Iiwic3F1YXJlNy5uZXQiLCIqLnMuYnJhdmUuaW8iLCJzaG9wLmJyZW5kbHkuaHIiLCJzaG9wLmJyZW5kbHkucnMiLCJicm93c2Vyc2FmZXR5bWFyay5pbyIsInJhZGlvLmFtIiwicmFkaW8uZm0iLCJ1azAuYmlndi5pbyIs''@;'; put 'put ''ImRoLmJ5dGVtYXJrLmNvLnVrIiwidm0uYnl0ZW1hcmsuY28udWsiLCJjYWZqcy5jb20iLCJjYW52YS1hcHBzLmNuIiwiKi5teS5jYW52YXNpdGUuY24iLCJjYW52YS1hcHBzLmNvbSIsIioubXkuY2FudmEuc2l0ZSIsImRyci5hYyIsInV3dS5haSIsImNhcnJkLmNvIiwiY3JkLmNvIiwianUu''@;'; put 'put ''bXAiLCJhcGkuZ292LnVrIiwiY2RuNzctc3RvcmFnZS5jb20iLCJyc2MuY29udGVudHByb3h5OS5jeiIsInIuY2RuNzcubmV0IiwiY2RuNzctc3NsLm5ldCIsImMuY2RuNzcub3JnIiwicnNjLmNkbjc3Lm9yZyIsInNzbC5vcmlnaW4uY2RuNzctc2VjdXJlLm9yZyIsInphLmJ6IiwiYnIuY29t''@;'; put 'put ''IiwiY24uY29tIiwiZGUuY29tIiwiZXUuY29tIiwianBuLmNvbSIsIm1leC5jb20iLCJydS5jb20iLCJzYS5jb20iLCJ1ay5jb20iLCJ1cy5jb20iLCJ6YS5jb20iLCJjb20uZGUiLCJnYi5uZXQiLCJodS5uZXQiLCJqcC5uZXQiLCJzZS5uZXQiLCJ1ay5uZXQiLCJhZS5vcmciLCJjb20uc2Ui''@;'; put 'put ''LCJjeC51YSIsImRpc2NvdXJzZS5ncm91cCIsImRpc2NvdXJzZS50ZWFtIiwiY2xlcmsuYXBwIiwiY2xlcmtzdGFnZS5hcHAiLCIqLmxjbC5kZXYiLCIqLmxjbHN0YWdlLmRldiIsIiouc3RnLmRldiIsIiouc3Rnc3RhZ2UuZGV2IiwiY2xldmVyYXBwcy5jYyIsIiouc2VydmljZXMuY2xldmVy''@;'; put 'put ''LWNsb3VkLmNvbSIsImNsZXZlcmFwcHMuaW8iLCJjbGV2ZXJhcHBzLnRlY2giLCJjbGlja3Jpc2luZy5uZXQiLCJjbG91ZG5zLmFzaWEiLCJjbG91ZG5zLmJlIiwiY2xvdWQtaXAuYml6IiwiY2xvdWRucy5iaXoiLCJjbG91ZG5zLmNjIiwiY2xvdWRucy5jaCIsImNsb3VkbnMuY2wiLCJjbG91''@;'; put 'put ''ZG5zLmNsdWIiLCJkbnNhYnIuY29tIiwiaXAtZGRucy5jb20iLCJjbG91ZG5zLmN4IiwiY2xvdWRucy5ldSIsImNsb3VkbnMuaW4iLCJjbG91ZG5zLmluZm8iLCJkZG5zLWlwLm5ldCIsImRucy1jbG91ZC5uZXQiLCJkbnMtZHluYW1pYy5uZXQiLCJjbG91ZG5zLm56IiwiY2xvdWRucy5vcmci''@;'; put 'put ''LCJpcC1keW5hbWljLm9yZyIsImNsb3VkbnMucGgiLCJjbG91ZG5zLnBybyIsImNsb3VkbnMucHciLCJjbG91ZG5zLnVzIiwiYzY2Lm1lIiwiY2xvdWQ2Ni53cyIsImNsb3VkNjYuem9uZSIsImpkZXZjbG91ZC5jb20iLCJ3cGRldmNsb3VkLmNvbSIsImNsb3VkYWNjZXNzLmhvc3QiLCJmcmVl''@;'; put 'put ''c2l0ZS5ob3N0IiwiY2xvdWRhY2Nlc3MubmV0IiwiKi5jbG91ZGVyYS5zaXRlIiwiY2YtaXBmcy5jb20iLCJjbG91ZGZsYXJlLWlwZnMuY29tIiwidHJ5Y2xvdWRmbGFyZS5jb20iLCJwYWdlcy5kZXYiLCJyMi5kZXYiLCJ3b3JrZXJzLmRldiIsImNsb3VkZmxhcmUubmV0IiwiY2RuLmNsb3Vk''@;'; put 'put ''ZmxhcmUubmV0IiwiY2RuLmNsb3VkZmxhcmVhbnljYXN0Lm5ldCIsImNkbi5jbG91ZGZsYXJlY24ubmV0IiwiY2RuLmNsb3VkZmxhcmVnbG9iYWwubmV0IiwiY3VzdC5jbG91ZHNjYWxlLmNoIiwib2JqZWN0cy5scGcuY2xvdWRzY2FsZS5jaCIsIm9iamVjdHMucm1hLmNsb3Vkc2NhbGUuY2gi''@;'; put 'put ''LCJ3bmV4dC5hcHAiLCJjbnB5LmdkbiIsIioub3RhcC5jbyIsImNvLmNhIiwiY28uY29tIiwiY29kZWJlcmcucGFnZSIsImNzYi5hcHAiLCJwcmV2aWV3LmNzYi5hcHAiLCJjby5ubCIsImNvLm5vIiwid2ViaG9zdGluZy5iZSIsImhvc3RpbmctY2x1c3Rlci5ubCIsImN0ZmNsb3VkLm5ldCIs''@;'; put 'put ''ImNvbnZleC5zaXRlIiwiYWMucnUiLCJlZHUucnUiLCJnb3YucnUiLCJpbnQucnUiLCJtaWwucnUiLCJ0ZXN0LnJ1IiwiZHluLmNvc2lkbnMuZGUiLCJkbnN1cGRhdGVyLmRlIiwiZHluYW1pc2NoZXMtZG5zLmRlIiwiaW50ZXJuZXQtZG5zLmRlIiwibC1vLWctaS1uLmRlIiwiZHluYW1pYy1k''@;'; put 'put ''bnMuaW5mbyIsImZlc3RlLWlwLm5ldCIsImtueC1zZXJ2ZXIubmV0Iiwic3RhdGljLWFjY2Vzcy5uZXQiLCJjcmFmdC5tZSIsInJlYWxtLmN6Iiwib24uY3Jpc3AuZW1haWwiLCIqLmNyeXB0b25vbWljLm5ldCIsImN1cnYuZGV2IiwiY2ZvbGtzLnBsIiwiY3lvbi5saW5rIiwiY3lvbi5zaXRl''@;'; put 'put ''IiwicGxhdGZvcm0wLmFwcCIsImZud2suc2l0ZSIsImZvbGlvbmV0d29yay5zaXRlIiwiYml6LmRrIiwiY28uZGsiLCJmaXJtLmRrIiwicmVnLmRrIiwic3RvcmUuZGsiLCJkeW5kbnMuZGFwcG5vZGUuaW8iLCJidWlsdHdpdGhkYXJrLmNvbSIsImRhcmtsYW5nLmlvIiwiZGVtby5kYXRhZGV0''@;'; put 'put ''ZWN0LmNvbSIsImluc3RhbmNlLmRhdGFkZXRlY3QuY29tIiwiZWRnZXN0YWNrLm1lIiwiZGF0dG9sb2NhbC5jb20iLCJkYXR0b3JlbGF5LmNvbSIsImRhdHRvd2ViLmNvbSIsIm15ZGF0dG8uY29tIiwiZGF0dG9sb2NhbC5uZXQiLCJteWRhdHRvLm5ldCIsImRkbnNzLmRlIiwiZHluLmRkbnNz''@;'; put 'put ''LmRlIiwiZHluZG5zLmRkbnNzLmRlIiwiZHluLWlwMjQuZGUiLCJkeW5kbnMxLmRlIiwiaG9tZS13ZWJzZXJ2ZXIuZGUiLCJkeW4uaG9tZS13ZWJzZXJ2ZXIuZGUiLCJteWhvbWUtc2VydmVyLmRlIiwiZGRuc3Mub3JnIiwiZGViaWFuLm5ldCIsImRlZmluaW1hLmlvIiwiZGVmaW5pbWEubmV0''@;'; put 'put ''IiwiZGVuby5kZXYiLCJkZW5vLXN0YWdpbmcuZGV2IiwiZGVkeW4uaW8iLCJkZXRhLmFwcCIsImRldGEuZGV2IiwiZGZpcm1hLnBsIiwiZGtvbnRvLnBsIiwieW91Mi5wbCIsIm9uZGlnaXRhbG9jZWFuLmFwcCIsIiouZGlnaXRhbG9jZWFuc3BhY2VzLmNvbSIsInVzLmtnIiwicnNzLm15Lmlk''@;'; put 'put ''IiwiZGloZXIuc29sdXRpb25zIiwiZGlzY29yZHNheXMuY29tIiwiZGlzY29yZHNlei5jb20iLCJqb3ppLmJpeiIsImRuc2hvbWUuZGUiLCJvbmxpbmUudGgiLCJzaG9wLnRoIiwiZHJheWRkbnMuY29tIiwic2hvcGFyZW5hLnBsIiwiZHJlYW1ob3N0ZXJzLmNvbSIsImR1cnVtaXMuY29tIiwi''@;'; put 'put ''bXlkcm9iby5jb20iLCJkcnVkLmlvIiwiZHJ1ZC51cyIsImR1Y2tkbnMub3JnIiwiZHkuZmkiLCJ0dW5rLm9yZyIsImR5bmRucy5iaXoiLCJmb3ItYmV0dGVyLmJpeiIsImZvci1tb3JlLmJpeiIsImZvci1zb21lLmJpeiIsImZvci10aGUuYml6Iiwic2VsZmlwLmJpeiIsIndlYmhvcC5iaXoi''@;'; put 'put ''LCJmdHBhY2Nlc3MuY2MiLCJnYW1lLXNlcnZlci5jYyIsIm15cGhvdG9zLmNjIiwic2NyYXBwaW5nLmNjIiwiYmxvZ2Rucy5jb20iLCJjZWNoaXJlLmNvbSIsImRuc2FsaWFzLmNvbSIsImRuc2Rvam8uY29tIiwiZG9lc250ZXhpc3QuY29tIiwiZG9udGV4aXN0LmNvbSIsImRvb21kbnMuY29t''@;'; put 'put ''IiwiZHluLW8tc2F1ci5jb20iLCJkeW5hbGlhcy5jb20iLCJkeW5kbnMtYXQtaG9tZS5jb20iLCJkeW5kbnMtYXQtd29yay5jb20iLCJkeW5kbnMtYmxvZy5jb20iLCJkeW5kbnMtZnJlZS5jb20iLCJkeW5kbnMtaG9tZS5jb20iLCJkeW5kbnMtaXAuY29tIiwiZHluZG5zLW1haWwuY29tIiwi''@;'; put 'put ''ZHluZG5zLW9mZmljZS5jb20iLCJkeW5kbnMtcGljcy5jb20iLCJkeW5kbnMtcmVtb3RlLmNvbSIsImR5bmRucy1zZXJ2ZXIuY29tIiwiZHluZG5zLXdlYi5jb20iLCJkeW5kbnMtd2lraS5jb20iLCJkeW5kbnMtd29yay5jb20iLCJlc3QtYS1sYS1tYWlzb24uY29tIiwiZXN0LWEtbGEtbWFz''@;'; put 'put ''aW9uLmNvbSIsImVzdC1sZS1wYXRyb24uY29tIiwiZXN0LW1vbi1ibG9ndWV1ci5jb20iLCJmcm9tLWFrLmNvbSIsImZyb20tYWwuY29tIiwiZnJvbS1hci5jb20iLCJmcm9tLWNhLmNvbSIsImZyb20tY3QuY29tIiwiZnJvbS1kYy5jb20iLCJmcm9tLWRlLmNvbSIsImZyb20tZmwuY29tIiwi''@;'; put 'put ''ZnJvbS1nYS5jb20iLCJmcm9tLWhpLmNvbSIsImZyb20taWEuY29tIiwiZnJvbS1pZC5jb20iLCJmcm9tLWlsLmNvbSIsImZyb20taW4uY29tIiwiZnJvbS1rcy5jb20iLCJmcm9tLWt5LmNvbSIsImZyb20tbWEuY29tIiwiZnJvbS1tZC5jb20iLCJmcm9tLW1pLmNvbSIsImZyb20tbW4uY29t''@;'; put 'put ''IiwiZnJvbS1tby5jb20iLCJmcm9tLW1zLmNvbSIsImZyb20tbXQuY29tIiwiZnJvbS1uYy5jb20iLCJmcm9tLW5kLmNvbSIsImZyb20tbmUuY29tIiwiZnJvbS1uaC5jb20iLCJmcm9tLW5qLmNvbSIsImZyb20tbm0uY29tIiwiZnJvbS1udi5jb20iLCJmcm9tLW9oLmNvbSIsImZyb20tb2su''@;'; put 'put ''Y29tIiwiZnJvbS1vci5jb20iLCJmcm9tLXBhLmNvbSIsImZyb20tcHIuY29tIiwiZnJvbS1yaS5jb20iLCJmcm9tLXNjLmNvbSIsImZyb20tc2QuY29tIiwiZnJvbS10bi5jb20iLCJmcm9tLXR4LmNvbSIsImZyb20tdXQuY29tIiwiZnJvbS12YS5jb20iLCJmcm9tLXZ0LmNvbSIsImZyb20t''@;'; put 'put ''d2EuY29tIiwiZnJvbS13aS5jb20iLCJmcm9tLXd2LmNvbSIsImZyb20td3kuY29tIiwiZ2V0bXlpcC5jb20iLCJnb3RkbnMuY29tIiwiaG9iYnktc2l0ZS5jb20iLCJob21lbGludXguY29tIiwiaG9tZXVuaXguY29tIiwiaWFtYWxsYW1hLmNvbSIsImlzLWEtYW5hcmNoaXN0LmNvbSIsImlz''@;'; put 'put ''LWEtYmxvZ2dlci5jb20iLCJpcy1hLWJvb2trZWVwZXIuY29tIiwiaXMtYS1idWxscy1mYW4uY29tIiwiaXMtYS1jYXRlcmVyLmNvbSIsImlzLWEtY2hlZi5jb20iLCJpcy1hLWNvbnNlcnZhdGl2ZS5jb20iLCJpcy1hLWNwYS5jb20iLCJpcy1hLWN1YmljbGUtc2xhdmUuY29tIiwiaXMtYS1k''@;'; put 'put ''ZW1vY3JhdC5jb20iLCJpcy1hLWRlc2lnbmVyLmNvbSIsImlzLWEtZG9jdG9yLmNvbSIsImlzLWEtZmluYW5jaWFsYWR2aXNvci5jb20iLCJpcy1hLWdlZWsuY29tIiwiaXMtYS1ncmVlbi5jb20iLCJpcy1hLWd1cnUuY29tIiwiaXMtYS1oYXJkLXdvcmtlci5jb20iLCJpcy1hLWh1bnRlci5j''@;'; put 'put ''b20iLCJpcy1hLWxhbmRzY2FwZXIuY29tIiwiaXMtYS1sYXd5ZXIuY29tIiwiaXMtYS1saWJlcmFsLmNvbSIsImlzLWEtbGliZXJ0YXJpYW4uY29tIiwiaXMtYS1sbGFtYS5jb20iLCJpcy1hLW11c2ljaWFuLmNvbSIsImlzLWEtbmFzY2FyZmFuLmNvbSIsImlzLWEtbnVyc2UuY29tIiwiaXMt''@;'; put 'put ''YS1wYWludGVyLmNvbSIsImlzLWEtcGVyc29uYWx0cmFpbmVyLmNvbSIsImlzLWEtcGhvdG9ncmFwaGVyLmNvbSIsImlzLWEtcGxheWVyLmNvbSIsImlzLWEtcmVwdWJsaWNhbi5jb20iLCJpcy1hLXJvY2tzdGFyLmNvbSIsImlzLWEtc29jaWFsaXN0LmNvbSIsImlzLWEtc3R1ZGVudC5jb20i''@;'; put 'put ''LCJpcy1hLXRlYWNoZXIuY29tIiwiaXMtYS10ZWNoaWUuY29tIiwiaXMtYS10aGVyYXBpc3QuY29tIiwiaXMtYW4tYWNjb3VudGFudC5jb20iLCJpcy1hbi1hY3Rvci5jb20iLCJpcy1hbi1hY3RyZXNzLmNvbSIsImlzLWFuLWFuYXJjaGlzdC5jb20iLCJpcy1hbi1hcnRpc3QuY29tIiwiaXMt''@;'; put 'put ''YW4tZW5naW5lZXIuY29tIiwiaXMtYW4tZW50ZXJ0YWluZXIuY29tIiwiaXMtY2VydGlmaWVkLmNvbSIsImlzLWdvbmUuY29tIiwiaXMtaW50by1hbmltZS5jb20iLCJpcy1pbnRvLWNhcnMuY29tIiwiaXMtaW50by1jYXJ0b29ucy5jb20iLCJpcy1pbnRvLWdhbWVzLmNvbSIsImlzLWxlZXQu''@;'; put 'put ''Y29tIiwiaXMtbm90LWNlcnRpZmllZC5jb20iLCJpcy1zbGljay5jb20iLCJpcy11YmVybGVldC5jb20iLCJpcy13aXRoLXRoZWJhbmQuY29tIiwiaXNhLWdlZWsuY29tIiwiaXNhLWhvY2tleW51dC5jb20iLCJpc3NtYXJ0ZXJ0aGFueW91LmNvbSIsImxpa2VzLXBpZS5jb20iLCJsaWtlc2Nh''@;'; put 'put ''bmR5LmNvbSIsIm5lYXQtdXJsLmNvbSIsInNhdmVzLXRoZS13aGFsZXMuY29tIiwic2VsZmlwLmNvbSIsInNlbGxzLWZvci1sZXNzLmNvbSIsInNlbGxzLWZvci11LmNvbSIsInNlcnZlYmJzLmNvbSIsInNpbXBsZS11cmwuY29tIiwic3BhY2UtdG8tcmVudC5jb20iLCJ0ZWFjaGVzLXlvZ2Eu''@;'; put 'put ''Y29tIiwid3JpdGVzdGhpc2Jsb2cuY29tIiwiYXRoLmN4IiwiZnVldHRlcnRkYXNuZXR6LmRlIiwiaXN0ZWluZ2Vlay5kZSIsImlzdG1laW4uZGUiLCJsZWJ0aW1uZXR6LmRlIiwibGVpdHVuZ3Nlbi5kZSIsInRyYWV1bXRnZXJhZGUuZGUiLCJiYXJyZWwtb2Yta25vd2xlZGdlLmluZm8iLCJi''@;'; put 'put ''YXJyZWxsLW9mLWtub3dsZWRnZS5pbmZvIiwiZHluZG5zLmluZm8iLCJmb3Itb3VyLmluZm8iLCJncm9rcy10aGUuaW5mbyIsImdyb2tzLXRoaXMuaW5mbyIsImhlcmUtZm9yLW1vcmUuaW5mbyIsImtub3dzaXRhbGwuaW5mbyIsInNlbGZpcC5pbmZvIiwid2ViaG9wLmluZm8iLCJmb3Jnb3Qu''@;'; put 'put ''aGVyLm5hbWUiLCJmb3Jnb3QuaGlzLm5hbWUiLCJhdC1iYW5kLWNhbXAubmV0IiwiYmxvZ2Rucy5uZXQiLCJicm9rZS1pdC5uZXQiLCJidXlzaG91c2VzLm5ldCIsImRuc2FsaWFzLm5ldCIsImRuc2Rvam8ubmV0IiwiZG9lcy1pdC5uZXQiLCJkb250ZXhpc3QubmV0IiwiZHluYWxpYXMubmV0''@;'; put 'put ''IiwiZHluYXRob21lLm5ldCIsImVuZG9maW50ZXJuZXQubmV0IiwiZnJvbS1hei5uZXQiLCJmcm9tLWNvLm5ldCIsImZyb20tbGEubmV0IiwiZnJvbS1ueS5uZXQiLCJnZXRzLWl0Lm5ldCIsImhhbS1yYWRpby1vcC5uZXQiLCJob21lZnRwLm5ldCIsImhvbWVpcC5uZXQiLCJob21lbGludXgu''@;'; put 'put ''bmV0IiwiaG9tZXVuaXgubmV0IiwiaW4tdGhlLWJhbmQubmV0IiwiaXMtYS1jaGVmLm5ldCIsImlzLWEtZ2Vlay5uZXQiLCJpc2EtZ2Vlay5uZXQiLCJraWNrcy1hc3MubmV0Iiwib2ZmaWNlLW9uLXRoZS5uZXQiLCJwb2R6b25lLm5ldCIsInNjcmFwcGVyLXNpdGUubmV0Iiwic2VsZmlwLm5l''@;'; put 'put ''dCIsInNlbGxzLWl0Lm5ldCIsInNlcnZlYmJzLm5ldCIsInNlcnZlZnRwLm5ldCIsInRocnVoZXJlLm5ldCIsIndlYmhvcC5uZXQiLCJtZXJzZWluZS5udSIsIm1pbmUubnUiLCJzaGFja25ldC5udSIsImJsb2dkbnMub3JnIiwiYmxvZ3NpdGUub3JnIiwiYm9sZGx5Z29pbmdub3doZXJlLm9y''@;'; put 'put ''ZyIsImRuc2FsaWFzLm9yZyIsImRuc2Rvam8ub3JnIiwiZG9lc250ZXhpc3Qub3JnIiwiZG9udGV4aXN0Lm9yZyIsImRvb21kbnMub3JnIiwiZHZyZG5zLm9yZyIsImR5bmFsaWFzLm9yZyIsImR5bmRucy5vcmciLCJnby5keW5kbnMub3JnIiwiaG9tZS5keW5kbnMub3JnIiwiZW5kb2ZpbnRl''@;'; put 'put ''cm5ldC5vcmciLCJlbmRvZnRoZWludGVybmV0Lm9yZyIsImZyb20tbWUub3JnIiwiZ2FtZS1ob3N0Lm9yZyIsImdvdGRucy5vcmciLCJob2JieS1zaXRlLm9yZyIsImhvbWVkbnMub3JnIiwiaG9tZWZ0cC5vcmciLCJob21lbGludXgub3JnIiwiaG9tZXVuaXgub3JnIiwiaXMtYS1icnVpbnNm''@;'; put 'put ''YW4ub3JnIiwiaXMtYS1jYW5kaWRhdGUub3JnIiwiaXMtYS1jZWx0aWNzZmFuLm9yZyIsImlzLWEtY2hlZi5vcmciLCJpcy1hLWdlZWsub3JnIiwiaXMtYS1rbmlnaHQub3JnIiwiaXMtYS1saW51eC11c2VyLm9yZyIsImlzLWEtcGF0c2Zhbi5vcmciLCJpcy1hLXNveGZhbi5vcmciLCJpcy1m''@;'; put 'put ''b3VuZC5vcmciLCJpcy1sb3N0Lm9yZyIsImlzLXNhdmVkLm9yZyIsImlzLXZlcnktYmFkLm9yZyIsImlzLXZlcnktZXZpbC5vcmciLCJpcy12ZXJ5LWdvb2Qub3JnIiwiaXMtdmVyeS1uaWNlLm9yZyIsImlzLXZlcnktc3dlZXQub3JnIiwiaXNhLWdlZWsub3JnIiwia2lja3MtYXNzLm9yZyIs''@;'; put 'put ''Im1pc2NvbmZ1c2VkLm9yZyIsInBvZHpvbmUub3JnIiwicmVhZG15YmxvZy5vcmciLCJzZWxmaXAub3JnIiwic2VsbHN5b3VyaG9tZS5vcmciLCJzZXJ2ZWJicy5vcmciLCJzZXJ2ZWZ0cC5vcmciLCJzZXJ2ZWdhbWUub3JnIiwic3R1ZmYtNC1zYWxlLm9yZyIsIndlYmhvcC5vcmciLCJiZXR0''@;'; put 'put ''ZXItdGhhbi50diIsImR5bmRucy50diIsIm9uLXRoZS13ZWIudHYiLCJ3b3JzZS10aGFuLnR2IiwiaXMtYnkudXMiLCJsYW5kLTQtc2FsZS51cyIsInN0dWZmLTQtc2FsZS51cyIsImR5bmRucy53cyIsIm15cGV0cy53cyIsImRkbnNmcmVlLmNvbSIsImRkbnNnZWVrLmNvbSIsImdpaXplLmNv''@;'; put 'put ''bSIsImdsZWV6ZS5jb20iLCJrb3pvdy5jb20iLCJsb3NleW91cmlwLmNvbSIsIm9vZ3V5LmNvbSIsInRoZXdvcmtwYy5jb20iLCJjYXNhY2FtLm5ldCIsImR5bnUubmV0IiwiYWNjZXNzY2FtLm9yZyIsImNhbWR2ci5vcmciLCJmcmVlZGRucy5vcmciLCJteXdpcmUub3JnIiwid2VicmVkaXJl''@;'; put 'put ''Y3Qub3JnIiwibXlkZG5zLnJvY2tzIiwiZHludjYubmV0IiwiZTQuY3oiLCJlYXN5cGFuZWwuYXBwIiwiZWFzeXBhbmVsLmhvc3QiLCIqLmV3cC5saXZlIiwidHdtYWlsLmNjIiwidHdtYWlsLm5ldCIsInR3bWFpbC5vcmciLCJteW1haWxlci5jb20udHciLCJ1cmwudHciLCJhdC5lbWYuY2Ft''@;'; put 'put ''cCIsInJ0Lmh0IiwiZWxlbWVudG9yLmNsb3VkIiwiZWxlbWVudG9yLmNvb2wiLCJlbi1yb290LmZyIiwibXl0dWxlYXAuY29tIiwidHVsZWFwLXBhcnRuZXJzLmNvbSIsImVuY3IuYXBwIiwiZW5jb3JlYXBpLmNvbSIsImV1LmVuY293YXkuY2xvdWQiLCJldS5vcmciLCJhbC5ldS5vcmciLCJh''@;'; put 'put ''c3NvLmV1Lm9yZyIsImF0LmV1Lm9yZyIsImF1LmV1Lm9yZyIsImJlLmV1Lm9yZyIsImJnLmV1Lm9yZyIsImNhLmV1Lm9yZyIsImNkLmV1Lm9yZyIsImNoLmV1Lm9yZyIsImNuLmV1Lm9yZyIsImN5LmV1Lm9yZyIsImN6LmV1Lm9yZyIsImRlLmV1Lm9yZyIsImRrLmV1Lm9yZyIsImVkdS5ldS5v''@;'; put 'put ''cmciLCJlZS5ldS5vcmciLCJlcy5ldS5vcmciLCJmaS5ldS5vcmciLCJmci5ldS5vcmciLCJnci5ldS5vcmciLCJoci5ldS5vcmciLCJodS5ldS5vcmciLCJpZS5ldS5vcmciLCJpbC5ldS5vcmciLCJpbi5ldS5vcmciLCJpbnQuZXUub3JnIiwiaXMuZXUub3JnIiwiaXQuZXUub3JnIiwianAu''@;'; put 'put ''ZXUub3JnIiwia3IuZXUub3JnIiwibHQuZXUub3JnIiwibHUuZXUub3JnIiwibHYuZXUub3JnIiwibWUuZXUub3JnIiwibWsuZXUub3JnIiwibXQuZXUub3JnIiwibXkuZXUub3JnIiwibmV0LmV1Lm9yZyIsIm5nLmV1Lm9yZyIsIm5sLmV1Lm9yZyIsIm5vLmV1Lm9yZyIsIm56LmV1Lm9yZyIs''@;'; put 'put ''InBsLmV1Lm9yZyIsInB0LmV1Lm9yZyIsInJvLmV1Lm9yZyIsInJ1LmV1Lm9yZyIsInNlLmV1Lm9yZyIsInNpLmV1Lm9yZyIsInNrLmV1Lm9yZyIsInRyLmV1Lm9yZyIsInVrLmV1Lm9yZyIsInVzLmV1Lm9yZyIsImV1cm9kaXIucnUiLCJldS0xLmV2ZW5ub2RlLmNvbSIsImV1LTIuZXZlbm5v''@;'; put 'put ''ZGUuY29tIiwiZXUtMy5ldmVubm9kZS5jb20iLCJldS00LmV2ZW5ub2RlLmNvbSIsInVzLTEuZXZlbm5vZGUuY29tIiwidXMtMi5ldmVubm9kZS5jb20iLCJ1cy0zLmV2ZW5ub2RlLmNvbSIsInVzLTQuZXZlbm5vZGUuY29tIiwicmVsYXkuZXZlcnZhdWx0LmFwcCIsInJlbGF5LmV2ZXJ2YXVs''@;'; put 'put ''dC5kZXYiLCJleHBvLmFwcCIsInN0YWdpbmcuZXhwby5hcHAiLCJvbmZhYnJpY2EuY29tIiwicnUubmV0IiwiYWR5Z2V5YS5ydSIsImJhc2hraXJpYS5ydSIsImJpci5ydSIsImNiZy5ydSIsImNvbS5ydSIsImRhZ2VzdGFuLnJ1IiwiZ3Jvem55LnJ1Iiwia2FsbXlraWEucnUiLCJrdXN0YW5h''@;'; put 'put ''aS5ydSIsIm1hcmluZS5ydSIsIm1vcmRvdmlhLnJ1IiwibXNrLnJ1IiwibXl0aXMucnUiLCJuYWxjaGlrLnJ1Iiwibm92LnJ1IiwicHlhdGlnb3Jzay5ydSIsInNwYi5ydSIsInZsYWRpa2F2a2F6LnJ1IiwidmxhZGltaXIucnUiLCJhYmtoYXppYS5zdSIsImFkeWdleWEuc3UiLCJha3R5dWJp''@;'; put 'put ''bnNrLnN1IiwiYXJraGFuZ2Vsc2suc3UiLCJhcm1lbmlhLnN1IiwiYXNoZ2FiYWQuc3UiLCJhemVyYmFpamFuLnN1IiwiYmFsYXNob3Yuc3UiLCJiYXNoa2lyaWEuc3UiLCJicnlhbnNrLnN1IiwiYnVraGFyYS5zdSIsImNoaW1rZW50LnN1IiwiZGFnZXN0YW4uc3UiLCJlYXN0LWthemFraHN0''@;'; put 'put ''YW4uc3UiLCJleG5ldC5zdSIsImdlb3JnaWEuc3UiLCJncm96bnkuc3UiLCJpdmFub3ZvLnN1IiwiamFtYnlsLnN1Iiwia2FsbXlraWEuc3UiLCJrYWx1Z2Euc3UiLCJrYXJhY29sLnN1Iiwia2FyYWdhbmRhLnN1Iiwia2FyZWxpYS5zdSIsImtoYWthc3NpYS5zdSIsImtyYXNub2Rhci5zdSIs''@;'; put 'put ''Imt1cmdhbi5zdSIsImt1c3RhbmFpLnN1IiwibGVudWcuc3UiLCJtYW5neXNobGFrLnN1IiwibW9yZG92aWEuc3UiLCJtc2suc3UiLCJtdXJtYW5zay5zdSIsIm5hbGNoaWsuc3UiLCJuYXZvaS5zdSIsIm5vcnRoLWthemFraHN0YW4uc3UiLCJub3Yuc3UiLCJvYm5pbnNrLnN1IiwicGVuemEu''@;'; put 'put ''c3UiLCJwb2tyb3Zzay5zdSIsInNvY2hpLnN1Iiwic3BiLnN1IiwidGFzaGtlbnQuc3UiLCJ0ZXJtZXouc3UiLCJ0b2dsaWF0dGkuc3UiLCJ0cm9pdHNrLnN1IiwidHNlbGlub2dyYWQuc3UiLCJ0dWxhLnN1IiwidHV2YS5zdSIsInZsYWRpa2F2a2F6LnN1IiwidmxhZGltaXIuc3UiLCJ2b2xv''@;'; put 'put ''Z2RhLnN1IiwiY2hhbm5lbHNkdnIubmV0IiwidS5jaGFubmVsc2R2ci5uZXQiLCJlZGdlY29tcHV0ZS5hcHAiLCJmYXN0bHktZWRnZS5jb20iLCJmYXN0bHktdGVycmFyaXVtLmNvbSIsImZyZWV0bHMuZmFzdGx5Lm5ldCIsIm1hcC5mYXN0bHkubmV0IiwiYS5wcm9kLmZhc3RseS5uZXQiLCJn''@;'; put 'put ''bG9iYWwucHJvZC5mYXN0bHkubmV0IiwiYS5zc2wuZmFzdGx5Lm5ldCIsImIuc3NsLmZhc3RseS5uZXQiLCJnbG9iYWwuc3NsLmZhc3RseS5uZXQiLCJmYXN0bHlsYi5uZXQiLCJtYXAuZmFzdGx5bGIubmV0IiwiKi51c2VyLmZtIiwiZmFzdHZwcy1zZXJ2ZXIuY29tIiwiZmFzdHZwcy5ob3N0''@;'; put 'put ''IiwibXlmYXN0Lmhvc3QiLCJmYXN0dnBzLnNpdGUiLCJteWZhc3Quc3BhY2UiLCJjb25uLnVrIiwiY29wcm8udWsiLCJob3NwLnVrIiwiZmVkb3JhaW5mcmFjbG91ZC5vcmciLCJmZWRvcmFwZW9wbGUub3JnIiwiY2xvdWQuZmVkb3JhcHJvamVjdC5vcmciLCJhcHAub3MuZmVkb3JhcHJvamVj''@;'; put 'put ''dC5vcmciLCJhcHAub3Muc3RnLmZlZG9yYXByb2plY3Qub3JnIiwibXlkb2Jpc3MuY29tIiwiZmgtbXVlbnN0ZXIuaW8iLCJmaWxlZ2Vhci5tZSIsImZpcmViYXNlYXBwLmNvbSIsImZsZHJ2LmNvbSIsImZsdXR0ZXJmbG93LmFwcCIsImZseS5kZXYiLCJzaHcuaW8iLCJlZGdlYXBwLm5ldCIs''@;'; put 'put ''ImZvcmdlYmxvY2tzLmNvbSIsImlkLmZvcmdlcm9jay5pbyIsImZyYW1lci5haSIsImZyYW1lci5hcHAiLCJmcmFtZXJjYW52YXMuY29tIiwiZnJhbWVyLm1lZGlhIiwiZnJhbWVyLnBob3RvcyIsImZyYW1lci53ZWJzaXRlIiwiZnJhbWVyLndpa2kiLCIwZS52YyIsImZyZWVib3gtb3MuY29t''@;'; put 'put ''IiwiZnJlZWJveG9zLmNvbSIsImZieC1vcy5mciIsImZieG9zLmZyIiwiZnJlZWJveC1vcy5mciIsImZyZWVib3hvcy5mciIsImZyZWVkZXNrdG9wLm9yZyIsImZyZWVteWlwLmNvbSIsIiouZnJ1c2t5LmRlIiwid2llbi5mdW5rZmV1ZXIuYXQiLCJkYWVtb24uYXNpYSIsImRpeC5hc2lhIiwi''@;'; put 'put ''bXlkbnMuYnoiLCIwYW0uanAiLCIwZzAuanAiLCIwajAuanAiLCIwdDAuanAiLCJteWRucy5qcCIsInBndy5qcCIsIndqZy5qcCIsImtleXdvcmQtb24ubmV0IiwibGl2ZS1vbi5uZXQiLCJzZXJ2ZXItb24ubmV0IiwibXlkbnMudHciLCJteWRucy52YyIsIiouZnV0dXJlY21zLmF0IiwiKi5l''@;'; put 'put ''eC5mdXR1cmVjbXMuYXQiLCIqLmluLmZ1dHVyZWNtcy5hdCIsImZ1dHVyZWhvc3RpbmcuYXQiLCJmdXR1cmVtYWlsaW5nLmF0IiwiKi5leC5vcnRzaW5mby5hdCIsIioua3VuZGVuLm9ydHNpbmZvLmF0IiwiKi5zdGF0aWNzLmNsb3VkIiwiYWxpYXNlczEyMS5jb20iLCJjYW1wYWlnbi5nb3Yu''@;'; put 'put ''dWsiLCJzZXJ2aWNlLmdvdi51ayIsImluZGVwZW5kZW50LWNvbW1pc3Npb24udWsiLCJpbmRlcGVuZGVudC1pbnF1ZXN0LnVrIiwiaW5kZXBlbmRlbnQtaW5xdWlyeS51ayIsImluZGVwZW5kZW50LXBhbmVsLnVrIiwiaW5kZXBlbmRlbnQtcmV2aWV3LnVrIiwicHVibGljLWlucXVpcnkudWsi''@;'; put 'put ''LCJyb3lhbC1jb21taXNzaW9uLnVrIiwiZ2VoaXJuLm5lLmpwIiwidXNlcmNvbnRlbnQuanAiLCJnZW50YXBwcy5jb20iLCJnZW50bGVudGFwaXMuY29tIiwibGFiLm1zIiwiY2RuLWVkZ2VzLm5ldCIsImxvY2FsY2VydC5uZXQiLCJsb2NhbGhvc3RjZXJ0Lm5ldCIsImdzai5ieiIsImdpdGh1''@;'; put 'put ''YnVzZXJjb250ZW50LmNvbSIsImdpdGh1YnByZXZpZXcuZGV2IiwiZ2l0aHViLmlvIiwiZ2l0bGFiLmlvIiwiZ2l0YXBwLnNpIiwiZ2l0cGFnZS5zaSIsImdsaXRjaC5tZSIsIm5vZy5jb21tdW5pdHkiLCJjby5ybyIsInNob3Aucm8iLCJsb2xpcG9wLmlvIiwiYW5ncnkuanAiLCJiYWJ5Ymx1''@;'; put 'put ''ZS5qcCIsImJhYnltaWxrLmpwIiwiYmFja2Ryb3AuanAiLCJiYW1iaW5hLmpwIiwiYml0dGVyLmpwIiwiYmx1c2guanAiLCJib28uanAiLCJib3kuanAiLCJib3lmcmllbmQuanAiLCJidXQuanAiLCJjYW5keXBvcC5qcCIsImNhcG9vLmpwIiwiY2F0Zm9vZC5qcCIsImNoZWFwLmpwIiwiY2hp''@;'; put 'put ''Y2FwcGEuanAiLCJjaGlsbG91dC5qcCIsImNoaXBzLmpwIiwiY2hvd2Rlci5qcCIsImNodS5qcCIsImNpYW8uanAiLCJjb2NvdHRlLmpwIiwiY29vbGJsb2cuanAiLCJjcmFua3kuanAiLCJjdXRlZ2lybC5qcCIsImRhYS5qcCIsImRlY2EuanAiLCJkZWNpLmpwIiwiZGlnaWNrLmpwIiwiZWdv''@;'; put 'put ''aXNtLmpwIiwiZmFrZWZ1ci5qcCIsImZlbS5qcCIsImZsaWVyLmpwIiwiZmxvcHB5LmpwIiwiZm9vbC5qcCIsImZyZW5jaGtpc3MuanAiLCJnaXJsZnJpZW5kLmpwIiwiZ2lybHkuanAiLCJnbG9vbXkuanAiLCJnb25uYS5qcCIsImdyZWF0ZXIuanAiLCJoYWNjYS5qcCIsImhlYXZ5LmpwIiwi''@;'; put 'put ''aGVyLmpwIiwiaGloby5qcCIsImhpcHB5LmpwIiwiaG9seS5qcCIsImh1bmdyeS5qcCIsImljdXJ1cy5qcCIsIml0aWdvLmpwIiwiamVsbHliZWFuLmpwIiwia2lraXJhcmEuanAiLCJraWxsLmpwIiwia2lsby5qcCIsImt1cm9uLmpwIiwibGl0dGxlc3Rhci5qcCIsImxvbGlwb3BtYy5qcCIs''@;'; put 'put ''ImxvbGl0YXB1bmsuanAiLCJsb21vLmpwIiwibG92ZXBvcC5qcCIsImxvdmVzaWNrLmpwIiwibWFpbi5qcCIsIm1vZHMuanAiLCJtb25kLmpwIiwibW9uZ29saWFuLmpwIiwibW9vLmpwIiwibmFtYXN0ZS5qcCIsIm5pa2l0YS5qcCIsIm5vYnVzaGkuanAiLCJub29yLmpwIiwib29wcy5qcCIs''@;'; put 'put ''InBhcmFsbGVsLmpwIiwicGFyYXNpdGUuanAiLCJwZWNvcmkuanAiLCJwZWV3ZWUuanAiLCJwZW5uZS5qcCIsInBlcHBlci5qcCIsInBlcm1hLmpwIiwicGlnYm9hdC5qcCIsInBpbm9rby5qcCIsInB1bnl1LmpwIiwicHVwdS5qcCIsInB1c3N5Y2F0LmpwIiwicHlhLmpwIiwicmFpbmRyb3Au''@;'; put 'put ''anAiLCJyZWFkeW1hZGUuanAiLCJzYWRpc3QuanAiLCJzY2hvb2xidXMuanAiLCJzZWNyZXQuanAiLCJzdGFiYS5qcCIsInN0cmlwcGVyLmpwIiwic3ViLmpwIiwic3VubnlkYXkuanAiLCJ0aGljay5qcCIsInRvbmtvdHN1LmpwIiwidW5kZXIuanAiLCJ1cHBlci5qcCIsInZlbHZldC5qcCIs''@;'; put 'put ''InZlcnNlLmpwIiwidmVyc3VzLmpwIiwidml2aWFuLmpwIiwid2F0c29uLmpwIiwid2VibGlrZS5qcCIsIndoaXRlc25vdy5qcCIsInpvbWJpZS5qcCIsImhldGVtbC5uZXQiLCJncmFwaGljLmRlc2lnbiIsImdvaXAuZGUiLCJibG9nc3BvdC5hZSIsImJsb2dzcG90LmFsIiwiYmxvZ3Nwb3Qu''@;'; put 'put ''YW0iLCIqLmhvc3RlZC5hcHAiLCIqLnJ1bi5hcHAiLCJ3ZWIuYXBwIiwiYmxvZ3Nwb3QuY29tLmFyIiwiYmxvZ3Nwb3QuY28uYXQiLCJibG9nc3BvdC5jb20uYXUiLCJibG9nc3BvdC5iYSIsImJsb2dzcG90LmJlIiwiYmxvZ3Nwb3QuYmciLCJibG9nc3BvdC5iaiIsImJsb2dzcG90LmNvbS5i''@;'; put 'put ''ciIsImJsb2dzcG90LmNvbS5ieSIsImJsb2dzcG90LmNhIiwiYmxvZ3Nwb3QuY2YiLCJibG9nc3BvdC5jaCIsImJsb2dzcG90LmNsIiwiYmxvZ3Nwb3QuY29tLmNvIiwiKi4wZW1tLmNvbSIsImFwcHNwb3QuY29tIiwiKi5yLmFwcHNwb3QuY29tIiwiYmxvZ3Nwb3QuY29tIiwiY29kZXNwb3Qu''@;'; put 'put ''Y29tIiwiZ29vZ2xlYXBpcy5jb20iLCJnb29nbGVjb2RlLmNvbSIsInBhZ2VzcGVlZG1vYmlsaXplci5jb20iLCJ3aXRoZ29vZ2xlLmNvbSIsIndpdGh5b3V0dWJlLmNvbSIsImJsb2dzcG90LmN2IiwiYmxvZ3Nwb3QuY29tLmN5IiwiYmxvZ3Nwb3QuY3oiLCJibG9nc3BvdC5kZSIsIiouZ2F0''@;'; put 'put ''ZXdheS5kZXYiLCJibG9nc3BvdC5kayIsImJsb2dzcG90LmNvbS5lZSIsImJsb2dzcG90LmNvbS5lZyIsImJsb2dzcG90LmNvbS5lcyIsImJsb2dzcG90LmZpIiwiYmxvZ3Nwb3QuZnIiLCJjbG91ZC5nb29nIiwidHJhbnNsYXRlLmdvb2ciLCIqLnVzZXJjb250ZW50Lmdvb2ciLCJibG9nc3Bv''@;'; put 'put ''dC5nciIsImJsb2dzcG90LmhrIiwiYmxvZ3Nwb3QuaHIiLCJibG9nc3BvdC5odSIsImJsb2dzcG90LmNvLmlkIiwiYmxvZ3Nwb3QuaWUiLCJibG9nc3BvdC5jby5pbCIsImJsb2dzcG90LmluIiwiYmxvZ3Nwb3QuaXMiLCJibG9nc3BvdC5pdCIsImJsb2dzcG90LmpwIiwiYmxvZ3Nwb3QuY28u''@;'; put 'put ''a2UiLCJibG9nc3BvdC5rciIsImJsb2dzcG90LmxpIiwiYmxvZ3Nwb3QubHQiLCJibG9nc3BvdC5sdSIsImJsb2dzcG90Lm1kIiwiYmxvZ3Nwb3QubWsiLCJibG9nc3BvdC5jb20ubXQiLCJibG9nc3BvdC5teCIsImJsb2dzcG90Lm15IiwiY2xvdWRmdW5jdGlvbnMubmV0IiwiYmxvZ3Nwb3Qu''@;'; put 'put ''Y29tLm5nIiwiYmxvZ3Nwb3QubmwiLCJibG9nc3BvdC5ubyIsImJsb2dzcG90LmNvLm56IiwiYmxvZ3Nwb3QucGUiLCJibG9nc3BvdC5wdCIsImJsb2dzcG90LnFhIiwiYmxvZ3Nwb3QucmUiLCJibG9nc3BvdC5ybyIsImJsb2dzcG90LnJzIiwiYmxvZ3Nwb3QucnUiLCJibG9nc3BvdC5zZSIs''@;'; put 'put ''ImJsb2dzcG90LnNnIiwiYmxvZ3Nwb3Quc2kiLCJibG9nc3BvdC5zayIsImJsb2dzcG90LnNuIiwiYmxvZ3Nwb3QudGQiLCJibG9nc3BvdC5jb20udHIiLCJibG9nc3BvdC50dyIsImJsb2dzcG90LnVnIiwiYmxvZ3Nwb3QuY28udWsiLCJibG9nc3BvdC5jb20udXkiLCJibG9nc3BvdC52biIs''@;'; put 'put ''ImJsb2dzcG90LmNvLnphIiwiZ291cGlsZS5mciIsInB5bW50LnVrIiwiY2xvdWRhcHBzLmRpZ2l0YWwiLCJsb25kb24uY2xvdWRhcHBzLmRpZ2l0YWwiLCJnb3YubmwiLCJncmFmYW5hLWRldi5uZXQiLCJncmF5amF5bGVhZ3Vlcy5jb20iLCJnXHhmY25zdGlnYmVzdGVsbGVuLmRlIiwiZ1x4''@;'; put 'put ''ZmNuc3RpZ2xpZWZlcm4uZGUiLCJmaW4uY2kiLCJmcmVlLmhyIiwiY2FhLmxpIiwidWEucnMiLCJjb25mLnNlIiwiaFx4ZTRra2luZW4uZmkiLCJocnNuLmRldiIsImhhc2hiYW5nLnNoIiwiaGFzdXJhLmFwcCIsImhhc3VyYS1hcHAuaW8iLCJoYXRlbmFibG9nLmNvbSIsImhhdGVuYWRpYXJ5''@;'; put 'put ''LmNvbSIsImhhdGVibG8uanAiLCJoYXRlbmFibG9nLmpwIiwiaGF0ZW5hZGlhcnkuanAiLCJoYXRlbmFkaWFyeS5vcmciLCJwYWdlcy5pdC5ocy1oZWlsYnJvbm4uZGUiLCJwYWdlcy1yZXNlYXJjaC5pdC5ocy1oZWlsYnJvbm4uZGUiLCJoZWl5dS5zcGFjZSIsImhlbGlvaG8uc3QiLCJoZWxp''@;'; put 'put ''b2hvc3QudXMiLCJoZXBmb3JnZS5vcmciLCJoZXJva3VhcHAuY29tIiwiaGVyb2t1c3NsLmNvbSIsImhleWZsb3cucGFnZSIsImhleWZsb3cuc2l0ZSIsInJhdmVuZGIuY2xvdWQiLCJyYXZlbmRiLmNvbW11bml0eSIsImRldmVsb3BtZW50LnJ1biIsInJhdmVuZGIucnVuIiwiaG9tZXNrbGVw''@;'; put 'put ''LnBsIiwiKi5raW4ub25lIiwiKi5pZC5wdWIiLCIqLmtpbi5wdWIiLCJzZWNhYXMuaGsiLCJob3BsaXguc2hvcCIsIm9yeC5iaXoiLCJiaXouZ2wiLCJiaXoubmciLCJjby5iaXoubmciLCJkbC5iaXoubmciLCJnby5iaXoubmciLCJsZy5iaXoubmciLCJvbi5iaXoubmciLCJjb2wubmciLCJm''@;'; put 'put ''aXJtLm5nIiwiZ2VuLm5nIiwibHRkLm5nIiwibmdvLm5nIiwicGxjLm5nIiwiaWUudWEiLCJob3N0eWhvc3RpbmcuaW8iLCJoZi5zcGFjZSIsInN0YXRpYy5oZi5zcGFjZSIsImh5cGVybm9kZS5pbyIsImlvYmIubmV0IiwiY28uY3oiLCIqLm1vb25zY2FsZS5pbyIsIm1vb25zY2FsZS5uZXQi''@;'; put 'put ''LCJnci5jb20iLCJpa2kuZmkiLCJpYnhvcy5pdCIsImlsaWFkYm94b3MuaXQiLCJzbXVzaGNkbi5jb20iLCJ3cGhvc3RlZG1haWwuY29tIiwid3BtdWNkbi5jb20iLCJ0ZW1wdXJsLmhvc3QiLCJ3cG11ZGV2Lmhvc3QiLCJkeW4tYmVybGluLmRlIiwiaW4tYmVybGluLmRlIiwiaW4tYnJiLmRl''@;'; put 'put ''IiwiaW4tYnV0dGVyLmRlIiwiaW4tZHNsLmRlIiwiaW4tdnBuLmRlIiwiaW4tZHNsLm5ldCIsImluLXZwbi5uZXQiLCJpbi1kc2wub3JnIiwiaW4tdnBuLm9yZyIsImJpei5hdCIsImluZm8uYXQiLCJpbmZvLmN4IiwiYWMubGVnLmJyIiwiYWwubGVnLmJyIiwiYW0ubGVnLmJyIiwiYXAubGVn''@;'; put 'put ''LmJyIiwiYmEubGVnLmJyIiwiY2UubGVnLmJyIiwiZGYubGVnLmJyIiwiZXMubGVnLmJyIiwiZ28ubGVnLmJyIiwibWEubGVnLmJyIiwibWcubGVnLmJyIiwibXMubGVnLmJyIiwibXQubGVnLmJyIiwicGEubGVnLmJyIiwicGIubGVnLmJyIiwicGUubGVnLmJyIiwicGkubGVnLmJyIiwicHIu''@;'; put 'put ''bGVnLmJyIiwicmoubGVnLmJyIiwicm4ubGVnLmJyIiwicm8ubGVnLmJyIiwicnIubGVnLmJyIiwicnMubGVnLmJyIiwic2MubGVnLmJyIiwic2UubGVnLmJyIiwic3AubGVnLmJyIiwidG8ubGVnLmJyIiwicGl4b2xpbm8uY29tIiwibmE0dS5ydSIsImFwcHMtMWFuZDEuY29tIiwibGl2ZS13''@;'; put 'put ''ZWJzaXRlLmNvbSIsImFwcHMtMWFuZDEubmV0Iiwid2Vic2l0ZWJ1aWxkZXIub25saW5lIiwiYXBwLWlvbm9zLnNwYWNlIiwiaW9wc3lzLnNlIiwiKi5kd2ViLmxpbmsiLCJpcGlmb255Lm5ldCIsImlyLm1kIiwiaXMtYS1nb29kLmRldiIsImlzLWEuZGV2IiwiaXNlcnZzY2h1bGUuZGUiLCJt''@;'; put 'put ''ZWluLWlzZXJ2LmRlIiwic2NodWxwbGF0dGZvcm0uZGUiLCJzY2h1bHNlcnZlci5kZSIsInRlc3QtaXNlcnYuZGUiLCJpc2Vydi5kZXYiLCJtZWwuY2xvdWRsZXRzLmNvbS5hdSIsImNsb3VkLmludGVyaG9zdHNvbHV0aW9ucy5iZSIsImFscDEuYWUuZmxvdy5jaCIsImFwcGVuZ2luZS5mbG93''@;'; put 'put ''LmNoIiwiZXMtMS5heGFybmV0LmNsb3VkIiwiZGlhZGVtLmNsb3VkIiwidmlwLmplbGFzdGljLmNsb3VkIiwiamVsZS5jbG91ZCIsIml0MS5ldXIuYXJ1YmEuamVudi1hcnViYS5jbG91ZCIsIml0MS5qZW52LWFydWJhLmNsb3VkIiwia2VsaXdlYi5jbG91ZCIsImNzLmtlbGl3ZWIuY2xvdWQi''@;'; put 'put ''LCJveGEuY2xvdWQiLCJ0bi5veGEuY2xvdWQiLCJ1ay5veGEuY2xvdWQiLCJwcmltZXRlbC5jbG91ZCIsInVrLnByaW1ldGVsLmNsb3VkIiwiY2EucmVjbGFpbS5jbG91ZCIsInVrLnJlY2xhaW0uY2xvdWQiLCJ1cy5yZWNsYWltLmNsb3VkIiwiY2gudHJlbmRob3N0aW5nLmNsb3VkIiwiZGUu''@;'; put 'put ''dHJlbmRob3N0aW5nLmNsb3VkIiwiamVsZS5jbHViIiwiZG9wYWFzLmNvbSIsInBhYXMuaG9zdGVkLWJ5LXByZXZpZGVyLmNvbSIsInJhZy1jbG91ZC5ob3N0ZXVyLmNvbSIsInJhZy1jbG91ZC1jaC5ob3N0ZXVyLmNvbSIsImpjbG91ZC5pay1zZXJ2ZXIuY29tIiwiamNsb3VkLXZlci1qcGMu''@;'; put 'put ''aWstc2VydmVyLmNvbSIsImRlbW8uamVsYXN0aWMuY29tIiwicGFhcy5tYXNzaXZlZ3JpZC5jb20iLCJqZWQud2FmYWljbG91ZC5jb20iLCJyeWQud2FmYWljbG91ZC5jb20iLCJqLnNjYWxlZm9yY2UuY29tLmN5IiwiamVsYXN0aWMuZG9nYWRvLmV1IiwiZmkuY2xvdWRwbGF0Zm9ybS5maSIs''@;'; put 'put ''ImRlbW8uZGF0YWNlbnRlci5maSIsInBhYXMuZGF0YWNlbnRlci5maSIsImplbGUuaG9zdCIsIm1pcmNsb3VkLmhvc3QiLCJwYWFzLmJlZWJ5dGUuaW8iLCJzZWtkMS5iZWVieXRlYXBwLmlvIiwiamVsZS5pbyIsImpjLm5lZW4uaXQiLCJqY2xvdWQua3oiLCJjbG91ZGppZmZ5Lm5ldCIsImZy''@;'; put 'put ''YTEtZGUuY2xvdWRqaWZmeS5uZXQiLCJ3ZXN0MS11cy5jbG91ZGppZmZ5Lm5ldCIsImpscy1zdG8xLmVsYXN0eC5uZXQiLCJqbHMtc3RvMi5lbGFzdHgubmV0IiwiamxzLXN0bzMuZWxhc3R4Lm5ldCIsImZyLTEucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJsb24tMS5wYWFzLm1hc3NpdmVncmlk''@;'; put 'put ''Lm5ldCIsImxvbi0yLnBhYXMubWFzc2l2ZWdyaWQubmV0IiwibnktMS5wYWFzLm1hc3NpdmVncmlkLm5ldCIsIm55LTIucGFhcy5tYXNzaXZlZ3JpZC5uZXQiLCJzZy0xLnBhYXMubWFzc2l2ZWdyaWQubmV0IiwiamVsYXN0aWMuc2F2ZWluY2xvdWQubmV0Iiwibm9yZGVzdGUtaWRjLnNhdmVp''@;'; put 'put ''bmNsb3VkLm5ldCIsImouc2NhbGVmb3JjZS5uZXQiLCJzZHNjbG91ZC5wbCIsInVuaWNsb3VkLnBsIiwibWlyY2xvdWQucnUiLCJlbnNjYWxlZC5zZyIsImplbGUuc2l0ZSIsImplbGFzdGljLnRlYW0iLCJvcmFuZ2VjbG91ZC50biIsImoubGF5ZXJzaGlmdC5jby51ayIsInBoeC5lbnNjYWxl''@;'; put 'put ''ZC51cyIsIm1pcmNsb3VkLnVzIiwibXlqaW5vLnJ1IiwiKi5ob3N0aW5nLm15amluby5ydSIsIioubGFuZGluZy5teWppbm8ucnUiLCIqLnNwZWN0cnVtLm15amluby5ydSIsIioudnBzLm15amluby5ydSIsImpvdGVsdWx1LmNsb3VkIiwid2ViYWRvcnNpdGUuY29tIiwiam91d3dlYi5zaXRl''@;'; put 'put ''IiwiKi5jbnMuam95ZW50LmNvbSIsIioudHJpdG9uLnpvbmUiLCJqcy5vcmciLCJrYWFzLmdnIiwia2hwbGF5Lm5sIiwia2Fwc2kuZmkiLCJlenByb3h5Lmt1bGV1dmVuLmJlIiwia3VsZXV2ZW4uY2xvdWQiLCJrZXltYWNoaW5lLmRlIiwia2luZ2hvc3QubmV0IiwidW5pNS5uZXQiLCJrbmln''@;'; put 'put ''aHRwb2ludC5zeXN0ZW1zIiwia29vYmluLmV2ZW50cyIsIndlYnRoaW5ncy5pbyIsImtyZWxsaWFuLm5ldCIsIm95YS50byIsImdpdC1yZXBvcy5kZSIsImxjdWJlLXNlcnZlci5kZSIsInN2bi1yZXBvcy5kZSIsImxlYWRwYWdlcy5jbyIsImxwYWdlcy5jbyIsImxwdXNlcmNvbnRlbnQuY29t''@;'; put 'put ''IiwibGVsdXguc2l0ZSIsImxpYnAycC5kaXJlY3QiLCJydW5jb250YWluZXJzLmRldiIsImNvLmJ1c2luZXNzIiwiY28uZWR1Y2F0aW9uIiwiY28uZXZlbnRzIiwiY28uZmluYW5jaWFsIiwiY28ubmV0d29yayIsImNvLnBsYWNlIiwiY28udGVjaG5vbG9neSIsImxpbmt5YXJkLWNsb3VkLmNo''@;'; put 'put ''IiwibGlua3lhcmQuY2xvdWQiLCJtZW1iZXJzLmxpbm9kZS5jb20iLCIqLm5vZGViYWxhbmNlci5saW5vZGUuY29tIiwiKi5saW5vZGVvYmplY3RzLmNvbSIsImlwLmxpbm9kZXVzZXJjb250ZW50LmNvbSIsIndlLmJzIiwiZmlsZWdlYXItc2cubWUiLCJnZ2ZmLm5ldCIsIioudXNlci5sb2Nh''@;'; put 'put ''bGNlcnQuZGV2IiwibG9kei5wbCIsInBhYmlhbmljZS5wbCIsInBsb2NrLnBsIiwic2llcmFkei5wbCIsInNraWVybmlld2ljZS5wbCIsInpnaWVyei5wbCIsImxvZ2lubGluZS5hcHAiLCJsb2dpbmxpbmUuZGV2IiwibG9naW5saW5lLmlvIiwibG9naW5saW5lLnNlcnZpY2VzIiwibG9naW5s''@;'; put 'put ''aW5lLnNpdGUiLCJsb2htdXMubWUiLCJzZXJ2ZXJzLnJ1biIsImtyYXNuaWsucGwiLCJsZWN6bmEucGwiLCJsdWJhcnRvdy5wbCIsImx1Ymxpbi5wbCIsInBvbmlhdG93YS5wbCIsInN3aWRuaWsucGwiLCJnbHVnLm9yZy51ayIsImx1Zy5vcmcudWsiLCJsdWdzLm9yZy51ayIsImJhcnN5LmJn''@;'; put 'put ''IiwiYmFyc3kuY2x1YiIsImJhcnN5Y2VudGVyLmNvbSIsImJhcnN5b25saW5lLmNvbSIsImJhcnN5LmRlIiwiYmFyc3kuZGV2IiwiYmFyc3kuZXUiLCJiYXJzeS5nciIsImJhcnN5LmluIiwiYmFyc3kuaW5mbyIsImJhcnN5LmlvIiwiYmFyc3kubWUiLCJiYXJzeS5tZW51IiwiYmFyc3lvbmxp''@;'; put 'put ''bmUubWVudSIsImJhcnN5Lm1vYmkiLCJiYXJzeS5uZXQiLCJiYXJzeS5vbmxpbmUiLCJiYXJzeS5vcmciLCJiYXJzeS5wcm8iLCJiYXJzeS5wdWIiLCJiYXJzeS5ybyIsImJhcnN5LnJzIiwiYmFyc3kuc2hvcCIsImJhcnN5b25saW5lLnNob3AiLCJiYXJzeS5zaXRlIiwiYmFyc3kuc3RvcmUi''@;'; put 'put ''LCJiYXJzeS5zdXBwb3J0IiwiYmFyc3kudWsiLCJiYXJzeS5jby51ayIsImJhcnN5b25saW5lLmNvLnVrIiwiKi5tYWdlbnRvc2l0ZS5jbG91ZCIsImhiLmNsZG1haWwucnUiLCJtYXRsYWIuY2xvdWQiLCJtb2RlbHNjYXBlLmNvbSIsIm13Y2xvdWRub25wcm9kLmNvbSIsInBvbHlzcGFjZS5j''@;'; put 'put ''b20iLCJtYXlmaXJzdC5pbmZvIiwibWF5Zmlyc3Qub3JnIiwibWF6ZXBsYXkuY29tIiwibWNkaXIubWUiLCJtY2Rpci5ydSIsInZwcy5tY2Rpci5ydSIsIm1jcHJlLnJ1IiwibWVkaWF0ZWNoLmJ5IiwibWVkaWF0ZWNoLmRldiIsImhyYS5oZWFsdGgiLCJtZWR1c2Fqcy5hcHAiLCJtaW5pc2Vy''@;'; put 'put ''dmVyLmNvbSIsIm1lbXNldC5uZXQiLCJtZXNzZXJsaS5hcHAiLCJhdG1ldGEuY29tIiwiYXBwcy5mYnNieC5jb20iLCIqLmNsb3VkLm1ldGFjZW50cnVtLmN6IiwiY3VzdG9tLm1ldGFjZW50cnVtLmN6IiwiZmx0LmNsb3VkLm11bmkuY3oiLCJ1c3IuY2xvdWQubXVuaS5jeiIsIm1ldGVvcmFw''@;'; put 'put ''cC5jb20iLCJldS5tZXRlb3JhcHAuY29tIiwiY28ucGwiLCIqLmF6dXJlY29udGFpbmVyLmlvIiwiYXp1cmUtYXBpLm5ldCIsImF6dXJlLW1vYmlsZS5uZXQiLCJhenVyZWVkZ2UubmV0IiwiYXp1cmVmZC5uZXQiLCJhenVyZXN0YXRpY2FwcHMubmV0IiwiMS5henVyZXN0YXRpY2FwcHMubmV0''@;'; put 'put ''IiwiMi5henVyZXN0YXRpY2FwcHMubmV0IiwiMy5henVyZXN0YXRpY2FwcHMubmV0IiwiNC5henVyZXN0YXRpY2FwcHMubmV0IiwiNS5henVyZXN0YXRpY2FwcHMubmV0IiwiNi5henVyZXN0YXRpY2FwcHMubmV0IiwiNy5henVyZXN0YXRpY2FwcHMubmV0IiwiY2VudHJhbHVzLmF6dXJlc3Rh''@;'; put 'put ''dGljYXBwcy5uZXQiLCJlYXN0YXNpYS5henVyZXN0YXRpY2FwcHMubmV0IiwiZWFzdHVzMi5henVyZXN0YXRpY2FwcHMubmV0Iiwid2VzdGV1cm9wZS5henVyZXN0YXRpY2FwcHMubmV0Iiwid2VzdHVzMi5henVyZXN0YXRpY2FwcHMubmV0IiwiYXp1cmV3ZWJzaXRlcy5uZXQiLCJjbG91ZGFw''@;'; put 'put ''cC5uZXQiLCJ0cmFmZmljbWFuYWdlci5uZXQiLCJibG9iLmNvcmUud2luZG93cy5uZXQiLCJzZXJ2aWNlYnVzLndpbmRvd3MubmV0Iiwicm91dGluZ3RoZWNsb3VkLmNvbSIsInNuLm15bmV0bmFtZS5uZXQiLCJyb3V0aW5ndGhlY2xvdWQubmV0Iiwicm91dGluZ3RoZWNsb3VkLm9yZyIsImNz''@;'; put 'put ''eC5jYyIsIm15ZGJzZXJ2ZXIuY29tIiwid2Vic3BhY2Vjb25maWcuZGUiLCJtaXR0d2FsZC5pbmZvIiwibWl0dHdhbGRzZXJ2ZXIuaW5mbyIsInR5cG8zc2VydmVyLmluZm8iLCJwcm9qZWN0LnNwYWNlIiwibW9keC5kZXYiLCJibW9hdHRhY2htZW50cy5vcmciLCJuZXQucnUiLCJvcmcucnUi''@;'; put 'put ''LCJwcC5ydSIsImhvc3RlZHBpLmNvbSIsImNhcmFjYWwubXl0aGljLWJlYXN0cy5jb20iLCJjdXN0b21lci5teXRoaWMtYmVhc3RzLmNvbSIsImZlbnRpZ2VyLm15dGhpYy1iZWFzdHMuY29tIiwibHlueC5teXRoaWMtYmVhc3RzLmNvbSIsIm9jZWxvdC5teXRoaWMtYmVhc3RzLmNvbSIsIm9u''@;'; put 'put ''Y2lsbGEubXl0aGljLWJlYXN0cy5jb20iLCJvbnphLm15dGhpYy1iZWFzdHMuY29tIiwic3BoaW54Lm15dGhpYy1iZWFzdHMuY29tIiwidnMubXl0aGljLWJlYXN0cy5jb20iLCJ4Lm15dGhpYy1iZWFzdHMuY29tIiwieWFsaS5teXRoaWMtYmVhc3RzLmNvbSIsImN1c3QucmV0cm9zbnViLmNv''@;'; put 'put ''LnVrIiwidWkubmFidS5jYXNhIiwiY2xvdWQubm9zcGFtcHJveHkuY29tIiwibmV0ZnkuYXBwIiwibmV0bGlmeS5hcHAiLCI0dS5jb20iLCJuZnNob3N0LmNvbSIsImlwZnMubmZ0c3RvcmFnZS5saW5rIiwibmdvLnVzIiwibmdyb2suYXBwIiwibmdyb2stZnJlZS5hcHAiLCJuZ3Jvay5kZXYi''@;'; put 'put ''LCJuZ3Jvay1mcmVlLmRldiIsIm5ncm9rLmlvIiwiYXAubmdyb2suaW8iLCJhdS5uZ3Jvay5pbyIsImV1Lm5ncm9rLmlvIiwiaW4ubmdyb2suaW8iLCJqcC5uZ3Jvay5pbyIsInNhLm5ncm9rLmlvIiwidXMubmdyb2suaW8iLCJuZ3Jvay5waXp6YSIsIm5ncm9rLnBybyIsInRvcnVuLnBsIiwi''@;'; put 'put ''bmgtc2Vydi5jby51ayIsIm5pbXNpdGUudWsiLCJtbWFmYW4uYml6IiwibXlmdHAuYml6Iiwibm8taXAuYml6Iiwibm8taXAuY2EiLCJmYW50YXN5bGVhZ3VlLmNjIiwiZ290ZG5zLmNoIiwiM3V0aWxpdGllcy5jb20iLCJibG9nc3l0ZS5jb20iLCJjaXNjb2ZyZWFrLmNvbSIsImRhbW5zZXJ2''@;'; put 'put ''ZXIuY29tIiwiZGRuc2tpbmcuY29tIiwiZGl0Y2h5b3VyaXAuY29tIiwiZG5zaXNraW5reS5jb20iLCJkeW5ucy5jb20iLCJnZWVrZ2FsYXh5LmNvbSIsImhlYWx0aC1jYXJlcmVmb3JtLmNvbSIsImhvbWVzZWN1cml0eW1hYy5jb20iLCJob21lc2VjdXJpdHlwYy5jb20iLCJteWFjdGl2ZWRp''@;'; put 'put ''cmVjdG9yeS5jb20iLCJteXNlY3VyaXR5Y2FtZXJhLmNvbSIsIm15dm5jLmNvbSIsIm5ldC1mcmVha3MuY29tIiwib250aGV3aWZpLmNvbSIsInBvaW50MnRoaXMuY29tIiwicXVpY2tzeXRlcy5jb20iLCJzZWN1cml0eXRhY3RpY3MuY29tIiwic2VydmViZWVyLmNvbSIsInNlcnZlY291bnRl''@;'; put 'put ''cnN0cmlrZS5jb20iLCJzZXJ2ZWV4Y2hhbmdlLmNvbSIsInNlcnZlZnRwLmNvbSIsInNlcnZlZ2FtZS5jb20iLCJzZXJ2ZWhhbGZsaWZlLmNvbSIsInNlcnZlaHR0cC5jb20iLCJzZXJ2ZWh1bW91ci5jb20iLCJzZXJ2ZWlyYy5jb20iLCJzZXJ2ZW1wMy5jb20iLCJzZXJ2ZXAycC5jb20iLCJz''@;'; put 'put ''ZXJ2ZXBpY3MuY29tIiwic2VydmVxdWFrZS5jb20iLCJzZXJ2ZXNhcmNhc20uY29tIiwic3R1ZmZ0b3JlYWQuY29tIiwidW51c3VhbHBlcnNvbi5jb20iLCJ3b3JraXNib3JpbmcuY29tIiwiZHZyY2FtLmluZm8iLCJpbG92ZWNvbGxlZ2UuaW5mbyIsIm5vLWlwLmluZm8iLCJicmFzaWxpYS5t''@;'; put 'put ''ZSIsImRkbnMubWUiLCJkbnNmb3IubWUiLCJob3B0by5tZSIsImxvZ2ludG8ubWUiLCJub2lwLm1lIiwid2ViaG9wLm1lIiwiYm91bmNlbWUubmV0IiwiZGRucy5uZXQiLCJlYXRpbmctb3JnYW5pYy5uZXQiLCJteWRpc3NlbnQubmV0IiwibXllZmZlY3QubmV0IiwibXltZWRpYXBjLm5ldCIs''@;'; put 'put ''Im15cHN4Lm5ldCIsIm15c2VjdXJpdHljYW1lcmEubmV0IiwibmhsZmFuLm5ldCIsIm5vLWlwLm5ldCIsInBnYWZhbi5uZXQiLCJwcml2YXRpemVoZWFsdGhpbnN1cmFuY2UubmV0IiwicmVkaXJlY3RtZS5uZXQiLCJzZXJ2ZWJsb2cubmV0Iiwic2VydmVtaW5lY3JhZnQubmV0Iiwic3l0ZXMu''@;'; put 'put ''bmV0IiwiY2FibGUtbW9kZW0ub3JnIiwiY29sbGVnZWZhbi5vcmciLCJjb3VjaHBvdGF0b2ZyaWVzLm9yZyIsImhvcHRvLm9yZyIsIm1sYmZhbi5vcmciLCJteWZ0cC5vcmciLCJteXNlY3VyaXR5Y2FtZXJhLm9yZyIsIm5mbGZhbi5vcmciLCJuby1pcC5vcmciLCJyZWFkLWJvb2tzLm9yZyIs''@;'; put 'put ''InVmY2Zhbi5vcmciLCJ6YXB0by5vcmciLCJuby1pcC5jby51ayIsImdvbGZmYW4udXMiLCJub2lwLnVzIiwicG9pbnR0by51cyIsInN0YWdlLm5vZGVhcnQuaW8iLCIqLmRldmVsb3Blci5hcHAiLCJub29wLmFwcCIsIioubm9ydGhmbGFuay5hcHAiLCIqLmJ1aWxkLnJ1biIsIiouY29kZS5y''@;'; put 'put ''dW4iLCIqLmRhdGFiYXNlLnJ1biIsIioubWlncmF0aW9uLnJ1biIsIm5vdGljZWFibGUubmV3cyIsIm5vdGlvbi5zaXRlIiwiZG5za2luZy5jaCIsIm15cGkuY28iLCJuNHQuY28iLCIwMDF3d3cuY29tIiwibXlpcGhvc3QuY29tIiwiZm9ydW16LmluZm8iLCJzb3VuZGNhc3QubWUiLCJ0Y3A0''@;'; put 'put ''Lm1lIiwiZG5zdXAubmV0IiwiaGljYW0ubmV0Iiwibm93LWRucy5uZXQiLCJvd25pcC5uZXQiLCJ2cG5kbnMubmV0IiwiZHluc2Vydi5vcmciLCJub3ctZG5zLm9yZyIsIng0NDMucHciLCJub3ctZG5zLnRvcCIsIm50ZGxsLnRvcCIsImZyZWVkZG5zLnVzIiwibnN1cGRhdGUuaW5mbyIsIm5l''@;'; put 'put ''cmRwb2wub3ZoIiwibnljLm1uIiwicHJ2Y3kucGFnZSIsIm9ibC5vbmciLCJvYnNlcnZhYmxlaHEuY2xvdWQiLCJzdGF0aWMub2JzZXJ2YWJsZXVzZXJjb250ZW50LmNvbSIsIm9tZy5sb2wiLCJjbG91ZHljbHVzdGVyLm5ldCIsIm9tbml3ZS5zaXRlIiwiMTIzd2Vic2VpdGUuYXQiLCIxMjN3''@;'; put 'put ''ZWJzaXRlLmJlIiwic2ltcGxlc2l0ZS5jb20uYnIiLCIxMjN3ZWJzaXRlLmNoIiwic2ltcGxlc2l0ZS5jb20iLCIxMjN3ZWJzZWl0ZS5kZSIsIjEyM2hqZW1tZXNpZGUuZGsiLCIxMjNtaXdlYi5lcyIsIjEyM2tvdGlzaXZ1LmZpIiwiMTIzc2l0ZXdlYi5mciIsInNpbXBsZXNpdGUuZ3IiLCIx''@;'; put 'put ''MjNob21lcGFnZS5pdCIsIjEyM3dlYnNpdGUubHUiLCIxMjN3ZWJzaXRlLm5sIiwiMTIzaGplbW1lc2lkZS5ubyIsInNlcnZpY2Uub25lIiwic2ltcGxlc2l0ZS5wbCIsIjEyM3BhZ2luYXdlYi5wdCIsIjEyM21pbnNpZGEuc2UiLCJpcy1hLWZ1bGxzdGFjay5kZXYiLCJpcy1jb29sLmRldiIs''@;'; put 'put ''ImlzLW5vdC1hLmRldiIsImxvY2FscGxheWVyLmRldiIsImlzLWxvY2FsLm9yZyIsIm9wZW5zb2NpYWwuc2l0ZSIsIm9wZW5jcmFmdC5ob3N0aW5nIiwiMTYtYi5pdCIsIjMyLWIuaXQiLCI2NC1iLml0Iiwib3JzaXRlcy5jb20iLCJvcGVyYXVuaXRlLmNvbSIsIiouY3VzdG9tZXItb2NpLmNv''@;'; put 'put ''bSIsIioub2NpLmN1c3RvbWVyLW9jaS5jb20iLCIqLm9jcC5jdXN0b21lci1vY2kuY29tIiwiKi5vY3MuY3VzdG9tZXItb2NpLmNvbSIsIioub3JhY2xlY2xvdWRhcHBzLmNvbSIsIioub3JhY2xlZ292Y2xvdWRhcHBzLmNvbSIsIioub3JhY2xlZ292Y2xvdWRhcHBzLnVrIiwidGVjaC5vcmFu''@;'; put 'put ''Z2UiLCJjYW4ucmUiLCJhdXRoZ2Vhci1zdGFnaW5nLmNvbSIsImF1dGhnZWFyYXBwcy5jb20iLCJza3lnZWFyYXBwLmNvbSIsIm91dHN5c3RlbXNjbG91ZC5jb20iLCIqLmhvc3Rpbmcub3ZoLm5ldCIsIioud2VicGFhcy5vdmgubmV0Iiwib3ducHJvdmlkZXIuY29tIiwib3duLnBtIiwiKi5v''@;'; put 'put ''d28uY29kZXMiLCJveC5ycyIsIm95LmxjIiwicGdmb2cuY29tIiwicGFnZXhsLmNvbSIsImdvdHBhbnRoZW9uLmNvbSIsInBhbnRoZW9uc2l0ZS5pbyIsIioucGF5d2hpcmwuY29tIiwiKi54bWl0LmNvIiwieG1pdC5kZXYiLCJtYWRldGhpcy5zaXRlIiwic3J2LnVzIiwiZ2guc3J2LnVzIiwi''@;'; put 'put ''Z2wuc3J2LnVzIiwibGszLnJ1IiwibXlwZXAubGluayIsInBlcnNwZWN0YS5jbG91ZCIsIm9uLXdlYi5mciIsIioudXBzdW4uYXBwIiwidXBzdW5hcHAuY29tIiwiZW50LnBsYXRmb3JtLnNoIiwiZXUucGxhdGZvcm0uc2giLCJ1cy5wbGF0Zm9ybS5zaCIsIioucGxhdGZvcm1zaC5zaXRlIiwi''@;'; put 'put ''Ki50c3Quc2l0ZSIsInBsYXR0ZXItYXBwLmNvbSIsInBsYXR0ZXItYXBwLmRldiIsInBsYXR0ZXJwLnVzIiwicGxleS5nYW1lcyIsIm9ucG9ydGVyLnJ1biIsImNvLmJuIiwicG9zdG1hbi1lY2hvLmNvbSIsInBzdG1uLmlvIiwibW9jay5wc3Rtbi5pbyIsImh0dHBiaW4ub3JnIiwicHJlcXVh''@;'; put 'put ''bGlmeW1lLnRvZGF5IiwieGVuLnByZ21yLmNvbSIsInByaXYuYXQiLCJwcm90b25ldC5pbyIsImNoaXJ1cmdpZW5zLWRlbnRpc3Rlcy1lbi1mcmFuY2UuZnIiLCJieWVuLnNpdGUiLCJwdWJ0bHMub3JnIiwicHl0aG9uYW55d2hlcmUuY29tIiwiZXUucHl0aG9uYW55d2hlcmUuY29tIiwicWEy''@;'; put 'put ''LmNvbSIsInFjeC5pbyIsIiouc3lzLnFjeC5pbyIsIm15cW5hcGNsb3VkLmNuIiwiYWxwaGEtbXlxbmFwY2xvdWQuY29tIiwiZGV2LW15cW5hcGNsb3VkLmNvbSIsIm15Y2xvdWRuYXMuY29tIiwibXluYXNjbG91ZC5jb20iLCJteXFuYXBjbG91ZC5jb20iLCJxb3RvLmlvIiwicXVhbGlmaW9h''@;'; put 'put ''cHAuY29tIiwibGFkZXNrLmNvbSIsInFidXNlci5jb20iLCIqLnF1aXBlbGVtZW50cy5jb20iLCJ2YXBvci5jbG91ZCIsInZhcG9yY2xvdWQuaW8iLCJyYWNrbWF6ZS5jb20iLCJyYWNrbWF6ZS5uZXQiLCJjbG91ZHNpdGUuYnVpbGRlcnMiLCJteXJhZHdlYi5uZXQiLCJzZXJ2ZXJuYW1lLnVz''@;'; put 'put ''Iiwid2ViLmluIiwiaW4ubmV0IiwibXlyZGJ4LmlvIiwic2l0ZS5yYi1ob3N0aW5nLmlvIiwiKi5vbi1yYW5jaGVyLmNsb3VkIiwiKi5vbi1rM3MuaW8iLCIqLm9uLXJpby5pbyIsInJhdnBhZ2UuY28uaWwiLCJyZWFkdGhlZG9jcy1ob3N0ZWQuY29tIiwicmVhZHRoZWRvY3MuaW8iLCJyaGNs''@;'; put 'put ''b3VkLmNvbSIsImluc3RhbmNlcy5zcGF3bi5jYyIsIm9ucmVuZGVyLmNvbSIsImFwcC5yZW5kZXIuY29tIiwicmVwbGl0LmFwcCIsImlkLnJlcGxpdC5hcHAiLCJmaXJld2FsbGVkcmVwbGl0LmNvIiwiaWQuZmlyZXdhbGxlZHJlcGxpdC5jbyIsInJlcGwuY28iLCJpZC5yZXBsLmNvIiwicmVw''@;'; put 'put ''bGl0LmRldiIsImFyY2hlci5yZXBsaXQuZGV2IiwiYm9uZXMucmVwbGl0LmRldiIsImNhbmFyeS5yZXBsaXQuZGV2IiwiZ2xvYmFsLnJlcGxpdC5kZXYiLCJoYWNrZXIucmVwbGl0LmRldiIsImlkLnJlcGxpdC5kZXYiLCJqYW5ld2F5LnJlcGxpdC5kZXYiLCJraW0ucmVwbGl0LmRldiIsImtp''@;'; put 'put ''cmEucmVwbGl0LmRldiIsImtpcmsucmVwbGl0LmRldiIsIm9kby5yZXBsaXQuZGV2IiwicGFyaXMucmVwbGl0LmRldiIsInBpY2FyZC5yZXBsaXQuZGV2IiwicGlrZS5yZXBsaXQuZGV2IiwicHJlcmVsZWFzZS5yZXBsaXQuZGV2IiwicmVlZC5yZXBsaXQuZGV2IiwicmlrZXIucmVwbGl0LmRl''@;'; put 'put ''diIsInNpc2tvLnJlcGxpdC5kZXYiLCJzcG9jay5yZXBsaXQuZGV2Iiwic3RhZ2luZy5yZXBsaXQuZGV2Iiwic3VsdS5yZXBsaXQuZGV2IiwidGFycGl0LnJlcGxpdC5kZXYiLCJ0ZWFtcy5yZXBsaXQuZGV2IiwidHVja2VyLnJlcGxpdC5kZXYiLCJ3ZXNsZXkucmVwbGl0LmRldiIsIndvcmYu''@;'; put 'put ''cmVwbGl0LmRldiIsInJlcGwucnVuIiwicmVzaW5kZXZpY2UuaW8iLCJkZXZpY2VzLnJlc2luc3RhZ2luZy5pbyIsImh6Yy5pbyIsImFkaW1vLmNvLnVrIiwiaXRjb3VsZGJld29yLnNlIiwiYXVzLmJhc2tldGJhbGwiLCJuei5iYXNrZXRiYWxsIiwiZ2l0LXBhZ2VzLnJpdC5lZHUiLCJyb2Nr''@;'; put 'put ''eS5wYWdlIiwicnViLmRlIiwicnVoci11bmktYm9jaHVtLmRlIiwiaW8ubm9jLnJ1aHItdW5pLWJvY2h1bS5kZSIsIlx1MDQzMVx1MDQzOFx1MDQzNy5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0M2FcdTA0M2VcdTA0M2MuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDNhXHUwNDQwXHUwNDRi''@;'; put 'put ''XHUwNDNjLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQzY1x1MDQzOFx1MDQ0MC5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0M2NcdTA0NDFcdTA0M2EuXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDNlXHUwNDQwXHUwNDMzLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQ0MVx1MDQzMFx1MDQz''@;'; put 'put ''Y1x1MDQzMFx1MDQ0MFx1MDQzMC5cdTA0NDBcdTA0NDNcdTA0NDEiLCJcdTA0NDFcdTA0M2VcdTA0NDdcdTA0MzguXHUwNDQwXHUwNDQzXHUwNDQxIiwiXHUwNDQxXHUwNDNmXHUwNDMxLlx1MDQ0MFx1MDQ0M1x1MDQ0MSIsIlx1MDQ0Zi5cdTA0NDBcdTA0NDNcdTA0NDEiLCJyYXMucnUiLCJu''@;'; put 'put ''eWF0LmFwcCIsIjE4MHIuY29tIiwiZG9qaW4uY29tIiwic2FrdXJhdGFuLmNvbSIsInNha3VyYXdlYi5jb20iLCJ4MC5jb20iLCIyLWQuanAiLCJib25hLmpwIiwiY3JhcC5qcCIsImRheW5pZ2h0LmpwIiwiZWVrLmpwIiwiZmxvcC5qcCIsImhhbGZtb29uLmpwIiwiamVlei5qcCIsIm1hdHJp''@;'; put 'put ''eC5qcCIsIm1pbW96YS5qcCIsIml2b3J5Lm5lLmpwIiwibWFpbC1ib3gubmUuanAiLCJtaW50cy5uZS5qcCIsIm1va3VyZW4ubmUuanAiLCJvcGFsLm5lLmpwIiwic2FrdXJhLm5lLmpwIiwic3Vtb21vLm5lLmpwIiwidG9wYXoubmUuanAiLCJuZXRnYW1lcnMuanAiLCJueWFudGEuanAiLCJv''@;'; put 'put ''MG8wLmpwIiwicmR5LmpwIiwicmdyLmpwIiwicnVsZXouanAiLCJzMy5pc2swMS5zYWt1cmFzdG9yYWdlLmpwIiwiczMuaXNrMDIuc2FrdXJhc3RvcmFnZS5qcCIsInNhbG9vbi5qcCIsInNibG8uanAiLCJza3IuanAiLCJ0YW5rLmpwIiwidWgtb2guanAiLCJ1bmRvLmpwIiwicnMud2ViYWNj''@;'; put 'put ''ZWwuanAiLCJ1c2VyLndlYmFjY2VsLmpwIiwid2Vic296YWkuanAiLCJ4aWkuanAiLCJzcXVhcmVzLm5ldCIsImpwbi5vcmciLCJraXJhcmEuc3QiLCJ4MC50byIsImZyb20udHYiLCJzYWt1cmEudHYiLCIqLmJ1aWxkZXIuY29kZS5jb20iLCIqLmRldi1idWlsZGVyLmNvZGUuY29tIiwiKi5z''@;'; put 'put ''dGctYnVpbGRlci5jb2RlLmNvbSIsIiouMDAxLnRlc3QuY29kZS1idWlsZGVyLXN0Zy5wbGF0Zm9ybS5zYWxlc2ZvcmNlLmNvbSIsIiouZC5jcm0uZGV2IiwiKi53LmNybS5kZXYiLCIqLndhLmNybS5kZXYiLCIqLndiLmNybS5kZXYiLCIqLndjLmNybS5kZXYiLCIqLndkLmNybS5kZXYiLCIq''@;'; put 'put ''LndlLmNybS5kZXYiLCIqLndmLmNybS5kZXYiLCJzYW5kY2F0cy5pbyIsImxvZ29pcC5jb20iLCJsb2dvaXAuZGUiLCJmci1wYXItMS5iYXJlbWV0YWwuc2N3LmNsb3VkIiwiZnItcGFyLTIuYmFyZW1ldGFsLnNjdy5jbG91ZCIsIm5sLWFtcy0xLmJhcmVtZXRhbC5zY3cuY2xvdWQiLCJjb2Nr''@;'; put 'put ''cGl0LmZyLXBhci5zY3cuY2xvdWQiLCJmbmMuZnItcGFyLnNjdy5jbG91ZCIsImZ1bmN0aW9ucy5mbmMuZnItcGFyLnNjdy5jbG91ZCIsIms4cy5mci1wYXIuc2N3LmNsb3VkIiwibm9kZXMuazhzLmZyLXBhci5zY3cuY2xvdWQiLCJzMy5mci1wYXIuc2N3LmNsb3VkIiwiczMtd2Vic2l0ZS5m''@;'; put 'put ''ci1wYXIuc2N3LmNsb3VkIiwid2htLmZyLXBhci5zY3cuY2xvdWQiLCJwcml2Lmluc3RhbmNlcy5zY3cuY2xvdWQiLCJwdWIuaW5zdGFuY2VzLnNjdy5jbG91ZCIsIms4cy5zY3cuY2xvdWQiLCJjb2NrcGl0Lm5sLWFtcy5zY3cuY2xvdWQiLCJrOHMubmwtYW1zLnNjdy5jbG91ZCIsIm5vZGVz''@;'; put 'put ''Lms4cy5ubC1hbXMuc2N3LmNsb3VkIiwiczMubmwtYW1zLnNjdy5jbG91ZCIsInMzLXdlYnNpdGUubmwtYW1zLnNjdy5jbG91ZCIsIndobS5ubC1hbXMuc2N3LmNsb3VkIiwiY29ja3BpdC5wbC13YXcuc2N3LmNsb3VkIiwiazhzLnBsLXdhdy5zY3cuY2xvdWQiLCJub2Rlcy5rOHMucGwtd2F3''@;'; put 'put ''LnNjdy5jbG91ZCIsInMzLnBsLXdhdy5zY3cuY2xvdWQiLCJzMy13ZWJzaXRlLnBsLXdhdy5zY3cuY2xvdWQiLCJzY2FsZWJvb2suc2N3LmNsb3VkIiwic21hcnRsYWJlbGluZy5zY3cuY2xvdWQiLCJkZWRpYm94LmZyIiwic2Nob2tva2Vrcy5uZXQiLCJnb3Yuc2NvdCIsInNlcnZpY2UuZ292''@;'; put 'put ''LnNjb3QiLCJzY3J5c2VjLmNvbSIsImNsaWVudC5zY3J5cHRlZC5pbyIsImZpcmV3YWxsLWdhdGV3YXkuY29tIiwiZmlyZXdhbGwtZ2F0ZXdheS5kZSIsIm15LWdhdGV3YXkuZGUiLCJteS1yb3V0ZXIuZGUiLCJzcGRucy5kZSIsInNwZG5zLmV1IiwiZmlyZXdhbGwtZ2F0ZXdheS5uZXQiLCJt''@;'; put 'put ''eS1maXJld2FsbC5vcmciLCJteWZpcmV3YWxsLm9yZyIsInNwZG5zLm9yZyIsInNlaWRhdC5uZXQiLCJzZWxsZnkuc3RvcmUiLCJtaW5pc2l0ZS5tcyIsInNlbnNlZXJpbmcubmV0Iiwic2VydmVib2x0LmNsb3VkIiwiYml6LnVhIiwiY28udWEiLCJwcC51YSIsImFzLnNoLmNuIiwic2hlZXp5''@;'; put 'put ''LmdhbWVzIiwic2hpZnRlZGl0LmlvIiwibXlzaG9wYmxvY2tzLmNvbSIsIm15c2hvcGlmeS5jb20iLCJzaG9waXRzaXRlLmNvbSIsInNob3B3YXJlLnNob3AiLCJzaG9wd2FyZS5zdG9yZSIsIm1vLXNpZW1lbnMuaW8iLCIxa2FwcC5jb20iLCJhcHBjaGl6aS5jb20iLCJhcHBsaW56aS5jb20i''@;'; put 'put ''LCJzaW5hYXBwLmNvbSIsInZpcHNpbmFhcHAuY29tIiwic2l0ZWxlYWYubmV0Iiwic21hbGwtd2ViLm9yZyIsImFlcm9wb3J0LmZyIiwiYXZvY2F0LmZyIiwiY2hhbWJhZ3JpLmZyIiwiY2hpcnVyZ2llbnMtZGVudGlzdGVzLmZyIiwiZXhwZXJ0cy1jb21wdGFibGVzLmZyIiwibWVkZWNpbi5m''@;'; put 'put ''ciIsIm5vdGFpcmVzLmZyIiwicGhhcm1hY2llbi5mciIsInBvcnQuZnIiLCJ2ZXRlcmluYWlyZS5mciIsInZwNC5tZSIsIiouc25vd2ZsYWtlLmFwcCIsIioucHJpdmF0ZWxpbmsuc25vd2ZsYWtlLmFwcCIsInN0cmVhbWxpdC5hcHAiLCJzdHJlYW1saXRhcHAuY29tIiwidHJ5LXNub3dwbG93''@;'; put 'put ''LmNvbSIsIm1hZmVsby5uZXQiLCJwbGF5c3RhdGlvbi1jbG91ZC5jb20iLCJzcmh0LnNpdGUiLCJhcHBzLmxhaXIuaW8iLCIqLnN0b2xvcy5pbyIsInNwYWNla2l0LmlvIiwiaW5kLm1vbSIsImN1c3RvbWVyLnNwZWVkcGFydG5lci5kZSIsIm15c3ByZWFkc2hvcC5hdCIsIm15c3ByZWFkc2hv''@;'; put 'put ''cC5jb20uYXUiLCJteXNwcmVhZHNob3AuYmUiLCJteXNwcmVhZHNob3AuY2EiLCJteXNwcmVhZHNob3AuY2giLCJteXNwcmVhZHNob3AuY29tIiwibXlzcHJlYWRzaG9wLmRlIiwibXlzcHJlYWRzaG9wLmRrIiwibXlzcHJlYWRzaG9wLmVzIiwibXlzcHJlYWRzaG9wLmZpIiwibXlzcHJlYWRz''@;'; put 'put ''aG9wLmZyIiwibXlzcHJlYWRzaG9wLmllIiwibXlzcHJlYWRzaG9wLml0IiwibXlzcHJlYWRzaG9wLm5ldCIsIm15c3ByZWFkc2hvcC5ubCIsIm15c3ByZWFkc2hvcC5ubyIsIm15c3ByZWFkc2hvcC5wbCIsIm15c3ByZWFkc2hvcC5zZSIsIm15c3ByZWFkc2hvcC5jby51ayIsInctY29ycC1z''@;'; put 'put ''dGF0aWNibGl0ei5jb20iLCJ3LWNyZWRlbnRpYWxsZXNzLXN0YXRpY2JsaXR6LmNvbSIsInctc3RhdGljYmxpdHouY29tIiwic3RhY2toZXJvLW5ldHdvcmsuY29tIiwicnVucy5vbnN0YWNraXQuY2xvdWQiLCJzdGFja2l0LmdnIiwic3RhY2tpdC5yb2NrcyIsInN0YWNraXQucnVuIiwic3Rh''@;'; put 'put ''Y2tpdC56b25lIiwibXVzaWNpYW4uaW8iLCJub3ZlY29yZS5zaXRlIiwiYXBpLnN0ZGxpYi5jb20iLCJmZWVkYmFjay5hYyIsImZvcm1zLmFjIiwiYXNzZXNzbWVudHMuY3giLCJjYWxjdWxhdG9ycy5jeCIsImZ1bm5lbHMuY3giLCJwYXlub3cuY3giLCJxdWl6emVzLmN4IiwicmVzZWFyY2hl''@;'; put 'put ''ZC5jeCIsInRlc3RzLmN4Iiwic3VydmV5cy5zbyIsInN0b3JlYmFzZS5zdG9yZSIsInN0b3JpcHJlc3MuYXBwIiwic3RvcmouZmFybSIsInN0cmFwaWFwcC5jb20iLCJtZWRpYS5zdHJhcGlhcHAuY29tIiwidnBzLWhvc3QubmV0IiwiYXRsLmplbGFzdGljLnZwcy1ob3N0Lm5ldCIsIm5qcy5q''@;'; put 'put ''ZWxhc3RpYy52cHMtaG9zdC5uZXQiLCJyaWMuamVsYXN0aWMudnBzLWhvc3QubmV0Iiwic3RyZWFrLWxpbmsuY29tIiwic3RyZWFrbGlua3MuY29tIiwic3RyZWFrdXNlcmNvbnRlbnQuY29tIiwic29jLnNyY2YubmV0IiwidXNlci5zcmNmLm5ldCIsInV0d2VudGUuaW8iLCJ0ZW1wLWRucy5j''@;'; put 'put ''b20iLCJzdXBhYmFzZS5jbyIsInN1cGFiYXNlLmluIiwic3VwYWJhc2UubmV0Iiwic3luY2xvdWQuaXQiLCJkc2Nsb3VkLmJpeiIsImRpcmVjdC5xdWlja2Nvbm5lY3QuY24iLCJkc215bmFzLmNvbSIsImZhbWlseWRzLmNvbSIsImRpc2tzdGF0aW9uLm1lIiwiZHNjbG91ZC5tZSIsImkyMzQu''@;'; put 'put ''bWUiLCJteWRzLm1lIiwic3lub2xvZ3kubWUiLCJkc2Nsb3VkLm1vYmkiLCJkc215bmFzLm5ldCIsImZhbWlseWRzLm5ldCIsImRzbXluYXMub3JnIiwiZmFtaWx5ZHMub3JnIiwiZGlyZWN0LnF1aWNrY29ubmVjdC50byIsInZwbnBsdXMudG8iLCJteXRhYml0LmNvbSIsIm15dGFiaXQuY28u''@;'; put 'put ''aWwiLCJ0YWJpdG9yZGVyLmNvLmlsIiwidGFpZnVuLWRucy5kZSIsInRzLm5ldCIsIiouYy50cy5uZXQiLCJnZGEucGwiLCJnZGFuc2sucGwiLCJnZHluaWEucGwiLCJtZWQucGwiLCJzb3BvdC5wbCIsInRhdmV1c2VyY29udGVudC5jb20iLCJwLnRhd2suZW1haWwiLCJwLnRhd2t0by5lbWFp''@;'; put 'put ''bCIsInNpdGUudGItaG9zdGluZy5jb20iLCJlZHVnaXQuaW8iLCJzMy50ZWNraWRzLm9yZyIsInRlbGViaXQuYXBwIiwidGVsZWJpdC5pbyIsIioudGVsZWJpdC54eXoiLCIqLmZpcmVuZXQuY2giLCIqLnN2Yy5maXJlbmV0LmNoIiwicmVzZXJ2ZC5jb20iLCJ0aGluZ2R1c3RkYXRhLmNvbSIs''@;'; put 'put ''ImN1c3QuZGV2LnRoaW5nZHVzdC5pbyIsInJlc2VydmQuZGV2LnRoaW5nZHVzdC5pbyIsImN1c3QuZGlzcmVjLnRoaW5nZHVzdC5pbyIsInJlc2VydmQuZGlzcmVjLnRoaW5nZHVzdC5pbyIsImN1c3QucHJvZC50aGluZ2R1c3QuaW8iLCJjdXN0LnRlc3RpbmcudGhpbmdkdXN0LmlvIiwicmVz''@;'; put 'put ''ZXJ2ZC50ZXN0aW5nLnRoaW5nZHVzdC5pbyIsInRpY2tldHMuaW8iLCJhcnZvLm5ldHdvcmsiLCJhemltdXRoLm5ldHdvcmsiLCJ0bG9uLm5ldHdvcmsiLCJ0b3Jwcm9qZWN0Lm5ldCIsInBhZ2VzLnRvcnByb2plY3QubmV0IiwidG93bm5ld3Mtc3RhZ2luZy5jb20iLCIxMmhwLmF0IiwiMml4''@;'; put 'put ''LmF0IiwiNGxpbWEuYXQiLCJsaW1hLWNpdHkuYXQiLCIxMmhwLmNoIiwiMml4LmNoIiwiNGxpbWEuY2giLCJsaW1hLWNpdHkuY2giLCJ0cmFmZmljcGxleC5jbG91ZCIsImRlLmNvb2wiLCIxMmhwLmRlIiwiMml4LmRlIiwiNGxpbWEuZGUiLCJsaW1hLWNpdHkuZGUiLCIxMzM3LnBpY3R1cmVz''@;'; put 'put ''IiwiY2xhbi5yaXAiLCJsaW1hLWNpdHkucm9ja3MiLCJ3ZWJzcGFjZS5yb2NrcyIsImxpbWEuem9uZSIsIioudHJhbnN1cmwuYmUiLCIqLnRyYW5zdXJsLmV1Iiwic2l0ZS50cmFuc2lwLm1lIiwiKi50cmFuc3VybC5ubCIsInR1eGZhbWlseS5vcmciLCJkZC1kbnMuZGUiLCJkcmF5LWRucy5k''@;'; put 'put ''ZSIsImRyYXlkbnMuZGUiLCJkeW4tdnBuLmRlIiwiZHludnBuLmRlIiwibWVpbi12aWdvci5kZSIsIm15LXZpZ29yLmRlIiwibXktd2FuLmRlIiwic3luby1kcy5kZSIsInN5bm9sb2d5LWRpc2tzdGF0aW9uLmRlIiwic3lub2xvZ3ktZHMuZGUiLCJkaXNrc3RhdGlvbi5ldSIsImRpc2tzdGF0''@;'; put 'put ''aW9uLm9yZyIsInR5cGVkcmVhbS5hcHAiLCJwcm8udHlwZWZvcm0uY29tIiwiKi51YmVyc3BhY2UuZGUiLCJ1YmVyLnNwYWNlIiwiaGsuY29tIiwiaW5jLmhrIiwibHRkLmhrIiwiaGsub3JnIiwiaXQuY29tIiwidW5pc29uLXNlcnZpY2VzLmNsb3VkIiwidmlydHVhbC11c2VyLmRlIiwidmly''@;'; put 'put ''dHVhbHVzZXIuZGUiLCJuYW1lLnBtIiwic2NoLnRmIiwiYml6LndmIiwic2NoLndmIiwib3JnLnl0IiwicnMuYmEiLCJiaWVsc2tvLnBsIiwidXBsaS5pbyIsInVyb3duLmNsb3VkIiwiZG5zdXBkYXRlLmluZm8iLCJ1cy5vcmciLCJ2LnVhIiwiZXhwcmVzcy52YWwucnVuIiwid2ViLnZhbC5y''@;'; put 'put ''dW4iLCJ2ZXJjZWwuYXBwIiwidjAuYnVpbGQiLCJ2ZXJjZWwuZGV2IiwidnVzZXJjb250ZW50Lm5ldCIsIm5vdy5zaCIsIjIwMzguaW8iLCJyb3V0ZXIubWFuYWdlbWVudCIsInYtaW5mby5pbmZvIiwidm9vcmxvcGVyLmNsb3VkIiwiKi52dWx0cm9iamVjdHMuY29tIiwid2FmZmxlY2VsbC5j''@;'; put 'put ''b20iLCJ3ZWJmbG93LmlvIiwid2ViZmxvd3Rlc3QuaW8iLCIqLndlYmhhcmUuZGV2IiwiYm9va29ubGluZS5hcHAiLCJob3RlbHdpdGhmbGlnaHQuY29tIiwicmVzZXJ2ZS1vbmxpbmUuY29tIiwicmVzZXJ2ZS1vbmxpbmUubmV0IiwiY3ByYXBpZC5jb20iLCJwbGVza25zLmNvbSIsIndwMi5o''@;'; put 'put ''b3N0IiwicGRucy5wYWdlIiwicGxlc2sucGFnZSIsIndwc3F1YXJlZC5zaXRlIiwiKi53YWRsLnRvcCIsInJlbW90ZXdkLmNvbSIsImJveC5jYSIsInBhZ2VzLndpYXJkd2ViLmNvbSIsInRvb2xmb3JnZS5vcmciLCJ3bWNsb3VkLm9yZyIsIndtZmxhYnMub3JnIiwid2RoLmFwcCIsInBhbmVs''@;'; put 'put ''LmdnIiwiZGFlbW9uLnBhbmVsLmdnIiwid2l4c2l0ZS5jb20iLCJ3aXhzdHVkaW8uY29tIiwiZWRpdG9yeC5pbyIsIndpeHN0dWRpby5pbyIsIndpeC5ydW4iLCJtZXNzd2l0aGRucy5jb20iLCJ3b2x0bGFiLWRlbW8uY29tIiwibXlmb3J1bS5jb21tdW5pdHkiLCJjb21tdW5pdHktcHJvLmRl''@;'; put 'put ''IiwiZGlza3Vzc2lvbnNiZXJlaWNoLmRlIiwiY29tbXVuaXR5LXByby5uZXQiLCJtZWluZm9ydW0ubmV0IiwiYWZmaW5pdHlsb3R0ZXJ5Lm9yZy51ayIsInJhZmZsZWVudHJ5Lm9yZy51ayIsIndlZWtseWxvdHRlcnkub3JnLnVrIiwid3BlbmdpbmVwb3dlcmVkLmNvbSIsImpzLndwZW5naW5l''@;'; put 'put ''cG93ZXJlZC5jb20iLCJoYWxmLmhvc3QiLCJ4bmJheS5jb20iLCJ1Mi54bmJheS5jb20iLCJ1Mi1sb2NhbC54bmJheS5jb20iLCJjaXN0cm9uLm5sIiwiZGVtb24ubmwiLCJ4czRhbGwuc3BhY2UiLCJ5YW5kZXhjbG91ZC5uZXQiLCJzdG9yYWdlLnlhbmRleGNsb3VkLm5ldCIsIndlYnNpdGUu''@;'; put 'put ''eWFuZGV4Y2xvdWQubmV0Iiwib2ZmaWNpYWwuYWNhZGVteSIsInlvbGFzaXRlLmNvbSIsInlvbWJvLm1lIiwieW5oLmZyIiwibm9ob3N0Lm1lIiwibm9oby5zdCIsInphLm5ldCIsInphLm9yZyIsInphcC5jbG91ZCIsInplYWJ1ci5hcHAiLCJic3MuZGVzaWduIiwiYmFzaWNzZXJ2ZXIuaW8i''@;'; put 'put ''LCJ2aXJ0dWFsc2VydmVyLmlvIiwiZW50ZXJwcmlzZWNsb3VkLm51Il0ucmVkdWNlKChZLFgpPT57Y29uc3QgZWU9WC5yZXBsYWNlKC9eKFwqXC58XCEpLywiIiksSj13LnRvQVNDSUkoZWUpLHJlPVguY2hhckF0KDApO2lmKFkuaGFzKEopKXRocm93IG5ldyBFcnJvcihgTXVsdGlwbGUgcnVs''@;'; put 'put ''ZXMgZm91bmQgZm9yICR7WH0gKCR7Sn0pYCk7cmV0dXJuIFkuc2V0KEose3J1bGU6WCxzdWZmaXg6ZWUscHVueVN1ZmZpeDpKLHdpbGRjYXJkOiIqIj09PXJlLGV4Y2VwdGlvbjoiISI9PT1yZX0pLFl9LG5ldyBNYXApLHo9e0RPTUFJTl9UT09fU0hPUlQ6IkRvbWFpbiBuYW1lIHRvbyBzaG9y''@;'; put 'put ''dC4iLERPTUFJTl9UT09fTE9ORzoiRG9tYWluIG5hbWUgdG9vIGxvbmcuIEl0IHNob3VsZCBiZSBubyBtb3JlIHRoYW4gMjU1IGNoYXJzLiIsTEFCRUxfU1RBUlRTX1dJVEhfREFTSDoiRG9tYWluIG5hbWUgbGFiZWwgY2FuIG5vdCBzdGFydCB3aXRoIGEgZGFzaC4iLExBQkVMX0VORFNfV0lU''@;'; put 'put ''SF9EQVNIOiJEb21haW4gbmFtZSBsYWJlbCBjYW4gbm90IGVuZCB3aXRoIGEgZGFzaC4iLExBQkVMX1RPT19MT05HOiJEb21haW4gbmFtZSBsYWJlbCBzaG91bGQgYmUgYXQgbW9zdCA2MyBjaGFycyBsb25nLiIsTEFCRUxfVE9PX1NIT1JUOiJEb21haW4gbmFtZSBsYWJlbCBzaG91bGQgYmUg''@;'; put 'put ''YXQgbGVhc3QgMSBjaGFyYWN0ZXIgbG9uZy4iLExBQkVMX0lOVkFMSURfQ0hBUlM6IkRvbWFpbiBuYW1lIGxhYmVsIGNhbiBvbmx5IGNvbnRhaW4gYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgb3IgZGFzaGVzLiJ9LEw9WT0+e2lmKCJzdHJpbmciIT10eXBlb2YgWSl0aHJvdyBuZXcgVHlwZUVy''@;'; put 'put ''cm9yKCJEb21haW4gbmFtZSBtdXN0IGJlIGEgc3RyaW5nLiIpO2xldCBYPVkuc2xpY2UoMCkudG9Mb3dlckNhc2UoKTsiLiI9PT1YLmNoYXJBdChYLmxlbmd0aC0xKSYmKFg9WC5zbGljZSgwLFgubGVuZ3RoLTEpKTtjb25zdCBlZT0oWT0+e2NvbnN0IFg9dy50b0FTQ0lJKFkpO2lmKFgubGVu''@;'; put 'put ''Z3RoPDEpcmV0dXJuIkRPTUFJTl9UT09fU0hPUlQiO2lmKFgubGVuZ3RoPjI1NSlyZXR1cm4iRE9NQUlOX1RPT19MT05HIjtjb25zdCBlZT1YLnNwbGl0KCIuIik7bGV0IEo7Zm9yKGxldCByZT0wO3JlPGVlLmxlbmd0aDsrK3JlKXtpZihKPWVlW3JlXSwhSi5sZW5ndGgpcmV0dXJuIkxBQkVM''@;'; put 'put ''X1RPT19TSE9SVCI7aWYoSi5sZW5ndGg+NjMpcmV0dXJuIkxBQkVMX1RPT19MT05HIjtpZigiLSI9PT1KLmNoYXJBdCgwKSlyZXR1cm4iTEFCRUxfU1RBUlRTX1dJVEhfREFTSCI7aWYoIi0iPT09Si5jaGFyQXQoSi5sZW5ndGgtMSkpcmV0dXJuIkxBQkVMX0VORFNfV0lUSF9EQVNIIjtpZigh''@;'; put 'put ''L15bYS16MC05XC1fXSskLy50ZXN0KEopKXJldHVybiJMQUJFTF9JTlZBTElEX0NIQVJTIn19KShYKTtpZihlZSlyZXR1cm57aW5wdXQ6WSxlcnJvcjp7bWVzc2FnZTp6W2VlXSxjb2RlOmVlfX07Y29uc3QgSj17aW5wdXQ6WSx0bGQ6bnVsbCxzbGQ6bnVsbCxkb21haW46bnVsbCxzdWJkb21h''@;'; put 'put ''aW46bnVsbCxsaXN0ZWQ6ITF9LHJlPVguc3BsaXQoIi4iKTtpZigibG9jYWwiPT09cmVbcmUubGVuZ3RoLTFdKXJldHVybiBKO2NvbnN0IGllPSgpPT4oL3huLS0vLnRlc3QoWCkmJihKLmRvbWFpbiYmKEouZG9tYWluPXcudG9BU0NJSShKLmRvbWFpbikpLEouc3ViZG9tYWluJiYoSi5zdWJk''@;'; put 'put ''b21haW49dy50b0FTQ0lJKEouc3ViZG9tYWluKSkpLEopLGxlPShZPT57Y29uc3QgWD13LnRvQVNDSUkoWSkuc3BsaXQoIi4iKTtmb3IobGV0IGVlPTA7ZWU8WC5sZW5ndGg7ZWUrKyl7Y29uc3QgSj1YLnNsaWNlKGVlKS5qb2luKCIuIikscmU9Ri5nZXQoSik7aWYocmUpcmV0dXJuIHJlfXJl''@;'; put 'put ''dHVybiBudWxsfSkoWCk7aWYoIWxlKXJldHVybiByZS5sZW5ndGg8Mj9KOihKLnRsZD1yZS5wb3AoKSxKLnNsZD1yZS5wb3AoKSxKLmRvbWFpbj1bSi5zbGQsSi50bGRdLmpvaW4oIi4iKSxyZS5sZW5ndGgmJihKLnN1YmRvbWFpbj1yZS5wb3AoKSksaWUoKSk7Si5saXN0ZWQ9ITA7Y29uc3Qg''@;'; put 'put ''bWU9bGUuc3VmZml4LnNwbGl0KCIuIiksX2U9cmUuc2xpY2UoMCxyZS5sZW5ndGgtbWUubGVuZ3RoKTtyZXR1cm4gbGUuZXhjZXB0aW9uJiZfZS5wdXNoKG1lLnNoaWZ0KCkpLEoudGxkPW1lLmpvaW4oIi4iKSwhX2UubGVuZ3RofHwobGUud2lsZGNhcmQmJihtZS51bnNoaWZ0KF9lLnBvcCgp''@;'; put 'put ''KSxKLnRsZD1tZS5qb2luKCIuIikpLCFfZS5sZW5ndGgpfHwoSi5zbGQ9X2UucG9wKCksSi5kb21haW49W0ouc2xkLEoudGxkXS5qb2luKCIuIiksX2UubGVuZ3RoJiYoSi5zdWJkb21haW49X2Uuam9pbigiLiIpKSksaWUoKX0sSz1ZPT5ZJiZMKFkpLmRvbWFpbnx8bnVsbCxVPVk9Pntjb25z''@;'; put 'put ''dCBYPUwoWSk7cmV0dXJuISghWC5kb21haW58fCFYLmxpc3RlZCl9O3EuZGVmYXVsdD17cGFyc2U6TCxnZXQ6Syxpc1ZhbGlkOlV9LHEuZXJyb3JDb2Rlcz16LHEuZ2V0PUsscS5pc1ZhbGlkPVUscS5wYXJzZT1MfSw0OTQ2OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9SlNPTi5wYXJz''@;'; put 'put ''ZSgneyJhZXMtMTI4LWVjYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjAsIm1vZGUiOiJFQ0IiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTE5Mi1lY2IiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjowLCJtb2RlIjoiRUNCIiwidHlwZSI6ImJsb2NrIn0sImFlcy0yNTYt''@;'; put 'put ''ZWNiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MCwibW9kZSI6IkVDQiIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTI4LWNiYyI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xOTItY2JjIjp7ImNpcGhl''@;'; put 'put ''ciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTI1Ni1jYmMiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMxMjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5Ijox''@;'; put 'put ''MjgsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMxOTIiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMyNTYiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNC''@;'; put 'put ''QyIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTI4LWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0ZCIiwidHlwZSI6''@;'; put 'put ''InN0cmVhbSJ9LCJhZXMtMjU2LWNmYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWNmYjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNGQjgiLCJ0eXBlIjoic3RyZWFt''@;'; put 'put ''In0sImFlcy0xOTItY2ZiOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0ZCOCIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1Ni1jZmI4Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDRkI4IiwidHlwZSI6InN0cmVhbSJ9LCJh''@;'; put 'put ''ZXMtMTI4LWNmYjEiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxMjgsIml2IjoxNiwibW9kZSI6IkNGQjEiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItY2ZiMSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0ZCMSIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTI1''@;'; put 'put ''Ni1jZmIxIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDRkIxIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LW9mYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiT0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLW9mYiI6''@;'; put 'put ''eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiT0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LW9mYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiT0ZCIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWN0ciI6eyJjaXBoZXIi''@;'; put 'put ''OiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTkyLWN0ciI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWN0ciI6eyJjaXBoZXIiOiJBRVMiLCJr''@;'; put 'put ''ZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ1RSIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMTI4LWdjbSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjEyLCJtb2RlIjoiR0NNIiwidHlwZSI6ImF1dGgifSwiYWVzLTE5Mi1nY20iOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoxOTIsIml2''@;'; put 'put ''IjoxMiwibW9kZSI6IkdDTSIsInR5cGUiOiJhdXRoIn0sImFlcy0yNTYtZ2NtIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTIsIm1vZGUiOiJHQ00iLCJ0eXBlIjoiYXV0aCJ9fScpfSw1MjA3OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJzaGEy''@;'; put 'put ''MjRXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiMzAyZDMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjA0MDUwMDA0MWMifSwiUlNBLVNIQTIyNCI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiMzAyZDMwMGQwNjA5''@;'; put 'put ''NjA4NjQ4MDE2NTAzMDQwMjA0MDUwMDA0MWMifSwic2hhMjU2V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IjMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIwIn0sIlJTQS1TSEEyNTYiOnsic2lnbiI6ImVjZHNhL3JzYSIs''@;'; put 'put ''Imhhc2giOiJzaGEyNTYiLCJpZCI6IjMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIwIn0sInNoYTM4NFdpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIzMDQxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDIwNTAwMDQzMCJ9''@;'; put 'put ''LCJSU0EtU0hBMzg0Ijp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIzMDQxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDIwNTAwMDQzMCJ9LCJzaGE1MTJXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiMzA1MTMw''@;'; put 'put ''MGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAzMDUwMDA0NDAifSwiUlNBLVNIQTUxMiI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiMzA1MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAzMDUwMDA0NDAifSwiUlNBLVNIQTEiOnsic2lnbiI6InJzYSIsImhhc2giOiJz''@;'; put 'put ''aGExIiwiaWQiOiIzMDIxMzAwOTA2MDUyYjBlMDMwMjFhMDUwMDA0MTQifSwiZWNkc2Etd2l0aC1TSEExIjp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGExIiwiaWQiOiIifSwic2hhMjU2Ijp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IiJ9LCJzaGEyMjQiOnsic2ln''@;'; put 'put ''biI6ImVjZHNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiIn0sInNoYTM4NCI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIifSwic2hhNTEyIjp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IiJ9LCJEU0EtU0hBIjp7InNpZ24iOiJkc2EiLCJoYXNo''@;'; put 'put ''Ijoic2hhMSIsImlkIjoiIn0sIkRTQS1TSEExIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sIkRTQSI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEEyMjQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IiJ9''@;'; put 'put ''LCJEU0EtU0hBMjI0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBMjU2Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIifSwiRFNBLVNIQTI1NiI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiIn0sIkRT''@;'; put 'put ''QS1XSVRILVNIQTM4NCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiIn0sIkRTQS1TSEEzODQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEE1MTIiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IiJ9LCJE''@;'; put 'put ''U0EtU0hBNTEyIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIifSwiRFNBLVJJUEVNRDE2MCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InJtZDE2MCIsImlkIjoiIn0sInJpcGVtZDE2MFdpdGhSU0EiOnsic2lnbiI6InJzYSIsImhhc2giOiJybWQxNjAiLCJpZCI6IjMwMjEz''@;'; put 'put ''MDA5MDYwNTJiMjQwMzAyMDEwNTAwMDQxNCJ9LCJSU0EtUklQRU1EMTYwIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoicm1kMTYwIiwiaWQiOiIzMDIxMzAwOTA2MDUyYjI0MDMwMjAxMDUwMDA0MTQifSwibWQ1V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJtZDUiLCJp''@;'; put 'put ''ZCI6IjMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDUwNTAwMDQxMCJ9LCJSU0EtTUQ1Ijp7InNpZ24iOiJyc2EiLCJoYXNoIjoibWQ1IiwiaWQiOiIzMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjA1MDUwMDA0MTAifX0nKX0sMTMwODp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPUpT''@;'; put 'put ''T04ucGFyc2UoJ3siMS4zLjEzMi4wLjEwIjoic2VjcDI1NmsxIiwiMS4zLjEzMi4wLjMzIjoicDIyNCIsIjEuMi44NDAuMTAwNDUuMy4xLjEiOiJwMTkyIiwiMS4yLjg0MC4xMDA0NS4zLjEuNyI6InAyNTYiLCIxLjMuMTMyLjAuMzQiOiJwMzg0IiwiMS4zLjEzMi4wLjM1IjoicDUyMSJ9Jyl9''@;'; put 'put ''LDMyMDg6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1KU09OLnBhcnNlKCd7Ik9fUkRPTkxZIjowLCJPX1dST05MWSI6MSwiT19SRFdSIjoyLCJTX0lGTVQiOjYxNDQwLCJTX0lGUkVHIjozMjc2OCwiU19JRkRJUiI6MTYzODQsIlNfSUZDSFIiOjgxOTIsIlNfSUZCTEsiOjI0NTc2LCJT''@;'; put 'put ''X0lGSUZPIjo0MDk2LCJTX0lGTE5LIjo0MDk2MCwiU19JRlNPQ0siOjQ5MTUyLCJPX0NSRUFUIjo1MTIsIk9fRVhDTCI6MjA0OCwiT19OT0NUVFkiOjEzMTA3MiwiT19UUlVOQyI6MTAyNCwiT19BUFBFTkQiOjgsIk9fRElSRUNUT1JZIjoxMDQ4NTc2LCJPX05PRk9MTE9XIjoyNTYsIk9fU1lO''@;'; put 'put ''QyI6MTI4LCJPX1NZTUxJTksiOjIwOTcxNTIsIk9fTk9OQkxPQ0siOjQsIlNfSVJXWFUiOjQ0OCwiU19JUlVTUiI6MjU2LCJTX0lXVVNSIjoxMjgsIlNfSVhVU1IiOjY0LCJTX0lSV1hHIjo1NiwiU19JUkdSUCI6MzIsIlNfSVdHUlAiOjE2LCJTX0lYR1JQIjo4LCJTX0lSV1hPIjo3LCJTX0lS''@;'; put 'put ''T1RIIjo0LCJTX0lXT1RIIjoyLCJTX0lYT1RIIjoxLCJFMkJJRyI6NywiRUFDQ0VTIjoxMywiRUFERFJJTlVTRSI6NDgsIkVBRERSTk9UQVZBSUwiOjQ5LCJFQUZOT1NVUFBPUlQiOjQ3LCJFQUdBSU4iOjM1LCJFQUxSRUFEWSI6MzcsIkVCQURGIjo5LCJFQkFETVNHIjo5NCwiRUJVU1kiOjE2''@;'; put 'put ''LCJFQ0FOQ0VMRUQiOjg5LCJFQ0hJTEQiOjEwLCJFQ09OTkFCT1JURUQiOjUzLCJFQ09OTlJFRlVTRUQiOjYxLCJFQ09OTlJFU0VUIjo1NCwiRURFQURMSyI6MTEsIkVERVNUQUREUlJFUSI6MzksIkVET00iOjMzLCJFRFFVT1QiOjY5LCJFRVhJU1QiOjE3LCJFRkFVTFQiOjE0LCJFRkJJRyI6''@;'; put 'put ''MjcsIkVIT1NUVU5SRUFDSCI6NjUsIkVJRFJNIjo5MCwiRUlMU0VRIjo5MiwiRUlOUFJPR1JFU1MiOjM2LCJFSU5UUiI6NCwiRUlOVkFMIjoyMiwiRUlPIjo1LCJFSVNDT05OIjo1NiwiRUlTRElSIjoyMSwiRUxPT1AiOjYyLCJFTUZJTEUiOjI0LCJFTUxJTksiOjMxLCJFTVNHU0laRSI6NDAs''@;'; put 'put ''IkVNVUxUSUhPUCI6OTUsIkVOQU1FVE9PTE9ORyI6NjMsIkVORVRET1dOIjo1MCwiRU5FVFJFU0VUIjo1MiwiRU5FVFVOUkVBQ0giOjUxLCJFTkZJTEUiOjIzLCJFTk9CVUZTIjo1NSwiRU5PREFUQSI6OTYsIkVOT0RFViI6MTksIkVOT0VOVCI6MiwiRU5PRVhFQyI6OCwiRU5PTENLIjo3Nywi''@;'; put 'put ''RU5PTElOSyI6OTcsIkVOT01FTSI6MTIsIkVOT01TRyI6OTEsIkVOT1BST1RPT1BUIjo0MiwiRU5PU1BDIjoyOCwiRU5PU1IiOjk4LCJFTk9TVFIiOjk5LCJFTk9TWVMiOjc4LCJFTk9UQ09OTiI6NTcsIkVOT1RESVIiOjIwLCJFTk9URU1QVFkiOjY2LCJFTk9UU09DSyI6MzgsIkVOT1RTVVAi''@;'; put 'put ''OjQ1LCJFTk9UVFkiOjI1LCJFTlhJTyI6NiwiRU9QTk9UU1VQUCI6MTAyLCJFT1ZFUkZMT1ciOjg0LCJFUEVSTSI6MSwiRVBJUEUiOjMyLCJFUFJPVE8iOjEwMCwiRVBST1RPTk9TVVBQT1JUIjo0MywiRVBST1RPVFlQRSI6NDEsIkVSQU5HRSI6MzQsIkVST0ZTIjozMCwiRVNQSVBFIjoyOSwi''@;'; put 'put ''RVNSQ0giOjMsIkVTVEFMRSI6NzAsIkVUSU1FIjoxMDEsIkVUSU1FRE9VVCI6NjAsIkVUWFRCU1kiOjI2LCJFV09VTERCTE9DSyI6MzUsIkVYREVWIjoxOCwiU0lHSFVQIjoxLCJTSUdJTlQiOjIsIlNJR1FVSVQiOjMsIlNJR0lMTCI6NCwiU0lHVFJBUCI6NSwiU0lHQUJSVCI6NiwiU0lHSU9U''@;'; put 'put ''Ijo2LCJTSUdCVVMiOjEwLCJTSUdGUEUiOjgsIlNJR0tJTEwiOjksIlNJR1VTUjEiOjMwLCJTSUdTRUdWIjoxMSwiU0lHVVNSMiI6MzEsIlNJR1BJUEUiOjEzLCJTSUdBTFJNIjoxNCwiU0lHVEVSTSI6MTUsIlNJR0NITEQiOjIwLCJTSUdDT05UIjoxOSwiU0lHU1RPUCI6MTcsIlNJR1RTVFAi''@;'; put 'put ''OjE4LCJTSUdUVElOIjoyMSwiU0lHVFRPVSI6MjIsIlNJR1VSRyI6MTYsIlNJR1hDUFUiOjI0LCJTSUdYRlNaIjoyNSwiU0lHVlRBTFJNIjoyNiwiU0lHUFJPRiI6MjcsIlNJR1dJTkNIIjoyOCwiU0lHSU8iOjIzLCJTSUdTWVMiOjEyLCJTU0xfT1BfQUxMIjoyMTQ3NDg2NzE5LCJTU0xfT1Bf''@;'; put 'put ''QUxMT1dfVU5TQUZFX0xFR0FDWV9SRU5FR09USUFUSU9OIjoyNjIxNDQsIlNTTF9PUF9DSVBIRVJfU0VSVkVSX1BSRUZFUkVOQ0UiOjQxOTQzMDQsIlNTTF9PUF9DSVNDT19BTllDT05ORUNUIjozMjc2OCwiU1NMX09QX0NPT0tJRV9FWENIQU5HRSI6ODE5MiwiU1NMX09QX0NSWVBUT1BST19U''@;'; put 'put ''TFNFWFRfQlVHIjoyMTQ3NDgzNjQ4LCJTU0xfT1BfRE9OVF9JTlNFUlRfRU1QVFlfRlJBR01FTlRTIjoyMDQ4LCJTU0xfT1BfRVBIRU1FUkFMX1JTQSI6MCwiU1NMX09QX0xFR0FDWV9TRVJWRVJfQ09OTkVDVCI6NCwiU1NMX09QX01JQ1JPU09GVF9CSUdfU1NMVjNfQlVGRkVSIjozMiwiU1NM''@;'; put 'put ''X09QX01JQ1JPU09GVF9TRVNTX0lEX0JVRyI6MSwiU1NMX09QX01TSUVfU1NMVjJfUlNBX1BBRERJTkciOjAsIlNTTF9PUF9ORVRTQ0FQRV9DQV9ETl9CVUciOjUzNjg3MDkxMiwiU1NMX09QX05FVFNDQVBFX0NIQUxMRU5HRV9CVUciOjIsIlNTTF9PUF9ORVRTQ0FQRV9ERU1PX0NJUEhFUl9D''@;'; put 'put ''SEFOR0VfQlVHIjoxMDczNzQxODI0LCJTU0xfT1BfTkVUU0NBUEVfUkVVU0VfQ0lQSEVSX0NIQU5HRV9CVUciOjgsIlNTTF9PUF9OT19DT01QUkVTU0lPTiI6MTMxMDcyLCJTU0xfT1BfTk9fUVVFUllfTVRVIjo0MDk2LCJTU0xfT1BfTk9fU0VTU0lPTl9SRVNVTVBUSU9OX09OX1JFTkVHT1RJ''@;'; put 'put ''QVRJT04iOjY1NTM2LCJTU0xfT1BfTk9fU1NMdjIiOjE2Nzc3MjE2LCJTU0xfT1BfTk9fU1NMdjMiOjMzNTU0NDMyLCJTU0xfT1BfTk9fVElDS0VUIjoxNjM4NCwiU1NMX09QX05PX1RMU3YxIjo2NzEwODg2NCwiU1NMX09QX05PX1RMU3YxXzEiOjI2ODQzNTQ1NiwiU1NMX09QX05PX1RMU3Yx''@;'; put 'put ''XzIiOjEzNDIxNzcyOCwiU1NMX09QX1BLQ1MxX0NIRUNLXzEiOjAsIlNTTF9PUF9QS0NTMV9DSEVDS18yIjowLCJTU0xfT1BfU0lOR0xFX0RIX1VTRSI6MTA0ODU3NiwiU1NMX09QX1NJTkdMRV9FQ0RIX1VTRSI6NTI0Mjg4LCJTU0xfT1BfU1NMRUFZXzA4MF9DTElFTlRfREhfQlVHIjoxMjgs''@;'; put 'put ''IlNTTF9PUF9TU0xSRUYyX1JFVVNFX0NFUlRfVFlQRV9CVUciOjAsIlNTTF9PUF9UTFNfQkxPQ0tfUEFERElOR19CVUciOjUxMiwiU1NMX09QX1RMU19ENV9CVUciOjI1NiwiU1NMX09QX1RMU19ST0xMQkFDS19CVUciOjgzODg2MDgsIkVOR0lORV9NRVRIT0RfRFNBIjoyLCJFTkdJTkVfTUVU''@;'; put 'put ''SE9EX0RIIjo0LCJFTkdJTkVfTUVUSE9EX1JBTkQiOjgsIkVOR0lORV9NRVRIT0RfRUNESCI6MTYsIkVOR0lORV9NRVRIT0RfRUNEU0EiOjMyLCJFTkdJTkVfTUVUSE9EX0NJUEhFUlMiOjY0LCJFTkdJTkVfTUVUSE9EX0RJR0VTVFMiOjEyOCwiRU5HSU5FX01FVEhPRF9TVE9SRSI6MjU2LCJF''@;'; put 'put ''TkdJTkVfTUVUSE9EX1BLRVlfTUVUSFMiOjUxMiwiRU5HSU5FX01FVEhPRF9QS0VZX0FTTjFfTUVUSFMiOjEwMjQsIkVOR0lORV9NRVRIT0RfQUxMIjo2NTUzNSwiRU5HSU5FX01FVEhPRF9OT05FIjowLCJESF9DSEVDS19QX05PVF9TQUZFX1BSSU1FIjoyLCJESF9DSEVDS19QX05PVF9QUklN''@;'; put 'put ''RSI6MSwiREhfVU5BQkxFX1RPX0NIRUNLX0dFTkVSQVRPUiI6NCwiREhfTk9UX1NVSVRBQkxFX0dFTkVSQVRPUiI6OCwiTlBOX0VOQUJMRUQiOjEsIlJTQV9QS0NTMV9QQURESU5HIjoxLCJSU0FfU1NMVjIzX1BBRERJTkciOjIsIlJTQV9OT19QQURESU5HIjozLCJSU0FfUEtDUzFfT0FFUF9Q''@;'; put 'put ''QURESU5HIjo0LCJSU0FfWDkzMV9QQURESU5HIjo1LCJSU0FfUEtDUzFfUFNTX1BBRERJTkciOjYsIlBPSU5UX0NPTlZFUlNJT05fQ09NUFJFU1NFRCI6MiwiUE9JTlRfQ09OVkVSU0lPTl9VTkNPTVBSRVNTRUQiOjQsIlBPSU5UX0NPTlZFUlNJT05fSFlCUklEIjo2LCJGX09LIjowLCJSX09L''@;'; put 'put ''Ijo0LCJXX09LIjoyLCJYX09LIjoxLCJVVl9VRFBfUkVVU0VBRERSIjo0fScpfSw5Nzk5OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJtb2RwMSI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4Yjgw''@;'; put 'put ''ZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzYTM2MjBmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAyIjp7Imdl''@;'; put 'put ''biI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1''@;'; put 'put ''YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNjUzODFmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHA1Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIy''@;'; put 'put ''MTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3''@;'; put 'put ''ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3''@;'; put 'put ''NDZjMDhjYTIzNzMyN2ZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE0Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTli''@;'; put 'put ''M2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1''@;'; put 'put ''ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlk''@;'; put 'put ''ZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWNhYTY4ZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTUiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0''@;'; put 'put ''ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdj''@;'; put 'put ''NGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2Uz''@;'; put 'put ''YmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVh''@;'; put 'put ''NzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3''@;'; put 'put ''NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5M2FkMmNhZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMTYiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5''@;'; put 'put ''YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMy''@;'; put 'put ''MDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNh''@;'; put 'put ''MmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUx''@;'; put 'put ''ZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0''@;'; put 'put ''YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmEx''@;'; put 'put ''ODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDA2MzE5OWZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE3Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZm''@;'; put 'put ''ZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2''@;'; put 'put ''YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBj''@;'; put 'put ''MzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQw''@;'; put 'put ''NDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIw''@;'; put 'put ''MGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJi''@;'; put 'put ''YmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5''@;'; put 'put ''MzQwMjg0OTIzNmMzZmFiNGQyN2M3MDI2YzFkNGRjYjI2MDI2NDZkZWM5NzUxZTc2M2RiYTM3YmRmOGZmOTQwNmFkOWU1MzBlZTVkYjM4MmY0MTMwMDFhZWIwNmE1M2VkOTAyN2Q4MzExNzk3MjdiMDg2NWE4OTE4ZGEzZWRiZWJjZjliMTRlZDQ0Y2U2Y2JhY2VkNGJiMWJkYjdmMTQ0N2U2Y2My''@;'; put 'put ''NTRiMzMyMDUxNTEyYmQ3YWY0MjZmYjhmNDAxMzc4Y2QyYmY1OTgzY2EwMWM2NGI5MmVjZjAzMmVhMTVkMTcyMWQwM2Y0ODJkN2NlNmU3NGZlZjZkNTVlNzAyZjQ2OTgwYzgyYjVhODQwMzE5MDBiMWM5ZTU5ZTdjOTdmYmVjN2U4ZjMyM2E5N2E3ZTM2Y2M4OGJlMGYxZDQ1YjdmZjU4NWFjNTRi''@;'; put 'put ''ZDQwN2IyMmI0MTU0YWFjYzhmNmQ3ZWJmNDhlMWQ4MTRjYzVlZDIwZjgwMzdlMGE3OTcxNWVlZjI5YmUzMjgwNmExZDU4YmI3YzVkYTc2ZjU1MGFhM2Q4YTFmYmZmMGViMTljY2IxYTMxM2Q1NWNkYTU2YzllYzJlZjI5NjMyMzg3ZmU4ZDc2ZTNjMDQ2ODA0M2U4ZjY2M2Y0ODYwZWUxMmJmMmQ1''@;'; put 'put ''YjBiNzQ3NGQ2ZTY5NGY5MWU2ZGNjNDAyNGZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE4Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUz''@;'; put 'put ''NDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1''@;'; put 'put ''OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1''@;'; put 'put ''ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2Ri''@;'; put 'put ''MDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgw''@;'; put 'put ''MTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYx''@;'; put 'put ''Mjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwMjg0OTIzNmMzZmFiNGQyN2M3MDI2YzFkNGRjYjI2MDI2NDZkZWM5NzUxZTc2M2RiYTM3YmRmOGZmOTQwNmFkOWU1MzBlZTVkYjM4MmY0''@;'; put 'put ''MTMwMDFhZWIwNmE1M2VkOTAyN2Q4MzExNzk3MjdiMDg2NWE4OTE4ZGEzZWRiZWJjZjliMTRlZDQ0Y2U2Y2JhY2VkNGJiMWJkYjdmMTQ0N2U2Y2MyNTRiMzMyMDUxNTEyYmQ3YWY0MjZmYjhmNDAxMzc4Y2QyYmY1OTgzY2EwMWM2NGI5MmVjZjAzMmVhMTVkMTcyMWQwM2Y0ODJkN2NlNmU3NGZl''@;'; put 'put ''ZjZkNTVlNzAyZjQ2OTgwYzgyYjVhODQwMzE5MDBiMWM5ZTU5ZTdjOTdmYmVjN2U4ZjMyM2E5N2E3ZTM2Y2M4OGJlMGYxZDQ1YjdmZjU4NWFjNTRiZDQwN2IyMmI0MTU0YWFjYzhmNmQ3ZWJmNDhlMWQ4MTRjYzVlZDIwZjgwMzdlMGE3OTcxNWVlZjI5YmUzMjgwNmExZDU4YmI3YzVkYTc2ZjU1''@;'; put 'put ''MGFhM2Q4YTFmYmZmMGViMTljY2IxYTMxM2Q1NWNkYTU2YzllYzJlZjI5NjMyMzg3ZmU4ZDc2ZTNjMDQ2ODA0M2U4ZjY2M2Y0ODYwZWUxMmJmMmQ1YjBiNzQ3NGQ2ZTY5NGY5MWU2ZGJlMTE1OTc0YTM5MjZmMTJmZWU1ZTQzODc3N2NiNmE5MzJkZjhjZDhiZWM0ZDA3M2I5MzFiYTNiYzgzMmI2''@;'; put 'put ''OGQ5ZGQzMDA3NDFmYTdiZjhhZmM0N2VkMjU3NmY2OTM2YmE0MjQ2NjNhYWI2MzljNWFlNGY1NjgzNDIzYjQ3NDJiZjFjOTc4MjM4ZjE2Y2JlMzlkNjUyZGUzZmRiOGJlZmM4NDhhZDkyMjIyMmUwNGE0MDM3YzA3MTNlYjU3YTgxYTIzZjBjNzM0NzNmYzY0NmNlYTMwNmI0YmNiYzg4NjJmODM4''@;'; put 'put ''NWRkZmE5ZDRiN2ZhMmMwODdlODc5NjgzMzAzZWQ1YmRkM2EwNjJiM2NmNWIzYTI3OGE2NmQyYTEzZjgzZjQ0ZjgyZGRmMzEwZWUwNzRhYjZhMzY0NTk3ZTg5OWEwMjU1ZGMxNjRmMzFjYzUwODQ2ODUxZGY5YWI0ODE5NWRlZDdlYTFiMWQ1MTBiZDdlZTc0ZDczZmFmMzZiYzMxZWNmYTI2ODM1''@;'; put 'put ''OTA0NmY0ZWI4NzlmOTI0MDA5NDM4YjQ4MWM2Y2Q3ODg5YTAwMmVkNWVlMzgyYmM5MTkwZGE2ZmMwMjZlNDc5NTU4ZTQ0NzU2NzdlOWFhOWUzMDUwZTI3NjU2OTRkZmM4MWY1NmU4ODBiOTZlNzE2MGM5ODBkZDk4ZWRkM2RmZmZmZmZmZmZmZmZmZmZmZiJ9fScpfSw4NTk3OnVlPT57InVzZSBz''@;'; put 'put ''dHJpY3QiO3VlLmV4cG9ydHM9e2k4OiI2LjYuMSJ9fSwyNTYyOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4xIjoiYWVzLTEyOC1lY2IiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yIjoiYWVzLTEyOC1jYmMiLCIyLjE2Ljg0''@;'; put 'put ''MC4xLjEwMS4zLjQuMS4zIjoiYWVzLTEyOC1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40IjoiYWVzLTEyOC1jZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMSI6ImFlcy0xOTItZWNiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjIiOiJhZXMtMTkyLWNiYyIsIjIuMTYuODQwLjEuMTAx''@;'; put 'put ''LjMuNC4xLjIzIjoiYWVzLTE5Mi1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yNCI6ImFlcy0xOTItY2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDEiOiJhZXMtMjU2LWVjYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQyIjoiYWVzLTI1Ni1jYmMiLCIyLjE2Ljg0MC4xLjEwMS4zLjQu''@;'; put 'put ''MS40MyI6ImFlcy0yNTYtb2ZiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDQiOiJhZXMtMjU2LWNmYiJ9Jyl9fSxfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX189e307ZnVuY3Rpb24gX19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzI4ODkxNzRfXyh1ZSl7dmFyIHE9X193ZWJwYWNrX21vZHVsZV9j''@;'; put 'put ''YWNoZV9fW3VlXTtpZih2b2lkIDAhPT1xKXJldHVybiBxLmV4cG9ydHM7dmFyIF89X193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW3VlXT17aWQ6dWUsbG9hZGVkOiExLGV4cG9ydHM6e319O3JldHVybiBfX3dlYnBhY2tfbW9kdWxlc19fW3VlXS5jYWxsKF8uZXhwb3J0cyxfLF8uZXhwb3J0cyxf''@;'; put 'put ''X25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjg4OTE3NF9fKSxfLmxvYWRlZD0hMCxfLmV4cG9ydHN9X19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzI4ODkxNzRfXy5kPSh1ZSxxKT0+e2Zvcih2YXIgXyBpbiBxKV9fbmVzdGVkX3dlYnBhY2tfcmVxdWlyZV8yODg5MTc0X18ubyhxLF8pJiYhX19u''@;'; put 'put ''ZXN0ZWRfd2VicGFja19yZXF1aXJlXzI4ODkxNzRfXy5vKHVlLF8pJiZPYmplY3QuZGVmaW5lUHJvcGVydHkodWUsXyx7ZW51bWVyYWJsZTohMCxnZXQ6cVtfXX0pfSxfX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjg4OTE3NF9fLmc9ZnVuY3Rpb24oKXtpZigib2JqZWN0Ij09dHlwZW9mIGds''@;'; put 'put ''b2JhbFRoaXMpcmV0dXJuIGdsb2JhbFRoaXM7dHJ5e3JldHVybiB0aGlzfHxuZXcgRnVuY3Rpb24oInJldHVybiB0aGlzIikoKX1jYXRjaHtpZigib2JqZWN0Ij09dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93fX0oKSxfX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjg4OTE3NF9fLm89KHVl''@;'; put 'put ''LHEpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodWUscSksX19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzI4ODkxNzRfXy5yPXVlPT57dHlwZW9mIFN5bWJvbDwidSImJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHVlLFN5bWJvbC50b1N0''@;'; put 'put ''cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodWUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxfX25lc3RlZF93ZWJwYWNrX3JlcXVpcmVfMjg4OTE3NF9fLm5tZD11ZT0+KHVlLnBhdGhzPVtdLHVlLmNoaWxkcmVufHwodWUuY2hpbGRyZW49W10pLHVl''@;'; put 'put ''KTt2YXIgX19uZXN0ZWRfd2VicGFja19leHBvcnRzX189X19uZXN0ZWRfd2VicGFja19yZXF1aXJlXzI4ODkxNzRfXygzNjA3KTtyZXR1cm4gX19uZXN0ZWRfd2VicGFja19leHBvcnRzX199KSgpLG1vZHVsZS5leHBvcnRzPV8oKX0sNTk0ODpmdW5jdGlvbih1ZSxxLF8peyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgST10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oRil7cmV0dXJuIEYmJkYuX19lc01vZHVsZT9GOntkZWZhdWx0OkZ9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkocSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSkscS5pc1NwZWNpYWxNaXNzaW5nPXEuY2hvaWNlVmFs''@;'; put 'put ''aWRhdG9yPXEuY29uZmlybWF0aW9uVmFsaWRhdG9yPXEudXJsVmFsaWRhdG9yPXZvaWQgMDtjb25zdCB5PUkoXygxMjk1NCkpO3EudXJsVmFsaWRhdG9yPShGLE8pPT4hIXkuZGVmYXVsdC5pc0h0dHBVcmkoRil8fCEheS5kZWZhdWx0LmlzSHR0cHNVcmkoRil8fCIiPT09Rnx8TyxxLmNvbmZp''@;'; put 'put ''cm1hdGlvblZhbGlkYXRvcj1GPT4hMD09PUZ8fCExPT09RixxLmNob2ljZVZhbGlkYXRvcj0oRixPLHopPT5GPjAmJkY8PU98fHoscS5pc1NwZWNpYWxNaXNzaW5nPUY9Pigic3RyaW5nIiE9dHlwZW9mIEZ8fCFGLmluY2x1ZGVzKCIuLiIpKSYmbmV3IFJlZ0V4cCgiXihcXC4pP1thLXpfLl17''@;'; put 'put ''MX0kIiwiaSIpLnRlc3QoRil9LDEzMjQ3Oih1ZSxxKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeTtxLlk9dm9pZCAwLCh5PXEuWXx8KHEuWT17fSkpLlNhc1ZpeWE9IlNBU1ZJWUEiLHkuU2FzOT0iU0FTOSIseS5TYXNqcz0iU0FTSlMifSwyNTAwMToodWUscSk9PnsidXNlIHN0cmljdCI7cS5DPXZv''@;'; put 'put ''aWQgMCxxLkM9KHksZz0xLEI9MTA5OTUxMTYyNzc3Nik9PntpZigwPT09eSlyZXR1cm4iMCBCIjt5PXk+Qj9COnk7Y29uc3QgRj1nPDA/MDpnLE89TWF0aC5mbG9vcihNYXRoLmxvZyh5KS9NYXRoLmxvZygxMDI0KSk7cmV0dXJuKHkvTWF0aC5wb3coMTAyNCxPKSkudG9GaXhlZChGKSsiICIr''@;'; put 'put ''WyJCIiwiS0IiLCJNQiIsIkdCIiwiVEIiXVtPXX19LDQyOTI0OmZ1bmN0aW9uKHVlKXt2YXIgcT17dmVyc2lvbjoiMS4xNS4wIn07cVs0MzddPWZ1bmN0aW9uKCl7Zm9yKHZhciBfPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgx''@;'; put 'put ''Mlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhl''@;'; put 'put ''OVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4YTJceGEzXHhhNVx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx1MjMxMFx4''@;'; put 'put ''YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1''@;'; put 'put ''Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAz''@;'; put 'put ''YzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixJPVtdLHk9''@;'; put 'put ''e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT1fLmNoYXJDb2RlQXQoZykmJih5W18uY2hhckF0KGcpXT1nKSxJW2ddPV8uY2hhckF0KGcpO3JldHVybntlbmM6eSxkZWM6SX19KCkscVs2MjBdPWZ1bmN0aW9uKCl7Zm9yKHZhciBfPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0''@;'; put 'put ''XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFy''@;'; put 'put ''c3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx1MDEwNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx1MDEwN1x4YzRcdTAxMDRcdTAxMThcdTAxMTlcdTAxNDJceGY0XHhmNlx1MDEwNlx4ZmJceGY5XHUwMTVhXHhkNlx4ZGNceGEyXHUwMTQxXHhhNVx1MDE1Ylx1MDE5''@;'; put 'put ''Mlx1MDE3OVx1MDE3Ylx4ZjNceGQzXHUwMTQ0XHUwMTQzXHUwMTdhXHUwMTdjXHhiZlx1MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1''@;'; put 'put ''MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUx''@;'; put 'put ''OFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4''@;'; put 'put ''ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIixJPVtdLHk9e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT1fLmNoYXJDb2RlQXQoZykmJih5W18uY2hhckF0KGcpXT1nKSxJW2ddPV8uY2hhckF0KGcpO3JldHVybntlbmM6eSxkZWM6SX19KCkscVs3Mzdd''@;'; put 'put ''PWZ1bmN0aW9uKCl7Zm9yKHZhciBfPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6''@;'; put 'put ''Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1''@;'; put 'put ''MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1MDNj''@;'; put 'put ''Mlx1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1''@;'; put 'put ''MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNjOVx1MDNh''@;'; put 'put ''Y1x1MDNhZFx1MDNhZVx1MDNjYVx1MDNhZlx1MDNjY1x1MDNjZFx1MDNjYlx1MDNjZVx1MDM4Nlx1MDM4OFx1MDM4OVx1MDM4YVx1MDM4Y1x1MDM4ZVx1MDM4Zlx4YjFcdTIyNjVcdTIyNjRcdTAzYWFcdTAzYWJceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEw''@;'; put 'put ''XHhhMCIsST1bXSx5PXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09Xy5jaGFyQ29kZUF0KGcpJiYoeVtfLmNoYXJBdChnKV09ZyksSVtnXT1fLmNoYXJBdChnKTtyZXR1cm57ZW5jOnksZGVjOkl9fSgpLHFbODUwXT1mdW5jdGlvbigpe2Zvcih2YXIgXz0iXDBceDAxXHgwMlx4MDNceDA0XHgw''@;'; put 'put ''NVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2Rl''@;'; put 'put ''ZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHhlY1x4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhkNlx4ZGNceGY4XHhhM1x4ZDhceGQ3XHUwMTkyXHhlMVx4''@;'; put 'put ''ZWRceGYzXHhmYVx4ZjFceGQxXHhhYVx4YmFceGJmXHhhZVx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMyXHhjMFx4YTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUx''@;'; put 'put ''Y1x1MjUwMFx1MjUzY1x4ZTNceGMzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx4ZjBceGQwXHhjYVx4Y2JceGM4XHUwMTMxXHhjZFx4Y2VceGNmXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHhhNlx4Y2NcdTI1ODBceGQzXHhkZlx4ZDRceGQyXHhmNVx4''@;'; put 'put ''ZDVceGI1XHhmZVx4ZGVceGRhXHhkYlx4ZDlceGZkXHhkZFx4YWZceGI0XHhhZFx4YjFcdTIwMTdceGJlXHhiNlx4YTdceGY3XHhiOFx4YjBceGE4XHhiN1x4YjlceGIzXHhiMlx1MjVhMFx4YTAiLEk9W10seT17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PV8uY2hhckNvZGVBdChnKSYmKHlb''@;'; put 'put ''Xy5jaGFyQXQoZyldPWcpLElbZ109Xy5jaGFyQXQoZyk7cmV0dXJue2VuYzp5LGRlYzpJfX0oKSxxWzg1Ml09ZnVuY3Rpb24oKXtmb3IodmFyIF89IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4''@;'; put 'put ''MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjN1x4ZmNceGU5XHhlMlx4ZTRcdTAxNmZcdTAx''@;'; put 'put ''MDdceGU3XHUwMTQyXHhlYlx1MDE1MFx1MDE1MVx4ZWVcdTAxNzlceGM0XHUwMTA2XHhjOVx1MDEzOVx1MDEzYVx4ZjRceGY2XHUwMTNkXHUwMTNlXHUwMTVhXHUwMTViXHhkNlx4ZGNcdTAxNjRcdTAxNjVcdTAxNDFceGQ3XHUwMTBkXHhlMVx4ZWRceGYzXHhmYVx1MDEwNFx1MDEwNVx1MDE3''@;'; put 'put ''ZFx1MDE3ZVx1MDExOFx1MDExOVx4YWNcdTAxN2FcdTAxMGNcdTAxNWZceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMyXHUwMTFhXHUwMTVlXHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUwMTdiXHUwMTdjXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFj''@;'; put 'put ''XHUyNTAwXHUyNTNjXHUwMTAyXHUwMTAzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx1MDExMVx1MDExMFx1MDEwZVx4Y2JcdTAxMGZcdTAxNDdceGNkXHhjZVx1MDExYlx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MDE2Mlx1MDE2ZVx1MjU4MFx4ZDNc''@;'; put 'put ''eGRmXHhkNFx1MDE0M1x1MDE0NFx1MDE0OFx1MDE2MFx1MDE2MVx1MDE1NFx4ZGFcdTAxNTVcdTAxNzBceGZkXHhkZFx1MDE2M1x4YjRceGFkXHUwMmRkXHUwMmRiXHUwMmM3XHUwMmQ4XHhhN1x4ZjdceGI4XHhiMFx4YThcdTAyZDlcdTAxNzFcdTAxNThcdTAxNTlcdTI1YTBceGEwIixJPVtd''@;'; put 'put ''LHk9e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT1fLmNoYXJDb2RlQXQoZykmJih5W18uY2hhckF0KGcpXT1nKSxJW2ddPV8uY2hhckF0KGcpO3JldHVybntlbmM6eSxkZWM6SX19KCkscVs4NTddPWZ1bmN0aW9uKCl7Zm9yKHZhciBfPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdc''@;'; put 'put ''Ylx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5v''@;'; put 'put ''cHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVcdTAxMzFceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHUwMTMwXHhkNlx4ZGNceGY4XHhhM1x4ZDhcdTAxNWVcdTAxNWZceGUxXHhlZFx4''@;'; put 'put ''ZjNceGZhXHhmMVx4ZDFcdTAxMWVcdTAxMWZceGJmXHhhZVx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx4YzFceGMyXHhjMFx4YTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRceGEyXHhhNVx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUx''@;'; put 'put ''Y1x1MjUwMFx1MjUzY1x4ZTNceGMzXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx4YmFceGFhXHhjYVx4Y2JceGM4XHVmZmZkXHhjZFx4Y2VceGNmXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHhhNlx4Y2NcdTI1ODBceGQzXHhkZlx4ZDRceGQyXHhmNVx4''@;'; put 'put ''ZDVceGI1XHVmZmZkXHhkN1x4ZGFceGRiXHhkOVx4ZWNceGZmXHhhZlx4YjRceGFkXHhiMVx1ZmZmZFx4YmVceGI2XHhhN1x4ZjdceGI4XHhiMFx4YThceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCIsST1bXSx5PXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09Xy5jaGFyQ29kZUF0KGcpJiYo''@;'; put 'put ''eVtfLmNoYXJBdChnKV09ZyksSVtnXT1fLmNoYXJBdChnKTtyZXR1cm57ZW5jOnksZGVjOkl9fSgpLHFbODYxXT1mdW5jdGlvbigpe2Zvcih2YXIgXz0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2''@;'; put 'put ''XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1''@;'; put 'put ''XHhlN1x4ZWFceGViXHhlOFx4ZDBceGYwXHhkZVx4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGZlXHhmYlx4ZGRceGZkXHhkNlx4ZGNceGY4XHhhM1x4ZDhcdTIwYTdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhjMVx4Y2RceGQzXHhkYVx4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhh''@;'; put 'put ''Ylx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1''@;'; put 'put ''NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhi''@;'; put 'put ''NVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCIsST1bXSx5PXt9LGc9MDsyNTYhPWc7Kytn''@;'; put 'put ''KTY1NTMzIT09Xy5jaGFyQ29kZUF0KGcpJiYoeVtfLmNoYXJBdChnKV09ZyksSVtnXT1fLmNoYXJBdChnKTtyZXR1cm57ZW5jOnksZGVjOkl9fSgpLHFbODY1XT1mdW5jdGlvbigpe2Zvcih2YXIgXz0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZc''@;'; put 'put ''eDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2Zc''@;'; put 'put ''eGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHhlY1x4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhkNlx4ZGNceGY4XHhhM1x4ZDhcdTIwYTdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4''@;'; put 'put ''YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4YTRcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2Nc''@;'; put 'put ''dTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRm''@;'; put 'put ''XHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhh''@;'; put 'put ''MCIsST1bXSx5PXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09Xy5jaGFyQ29kZUF0KGcpJiYoeVtfLmNoYXJBdChnKV09ZyksSVtnXT1fLmNoYXJBdChnKTtyZXR1cm57ZW5jOnksZGVjOkl9fSgpLHFbODY2XT1mdW5jdGlvbigpe2Zvcih2YXIgXz0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4''@;'; put 'put ''MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdo''@;'; put 'put ''aWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZc''@;'; put 'put ''dTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTI1OTFcdTI1OTJcdTI1''@;'; put 'put ''OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBc''@;'; put 'put ''dTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0''@;'; put 'put ''NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdTA0MDFcdTA0NTFcdTA0MDRcdTA0NTRcdTA0MDdcdTA0NTdcdTA0MGVcdTA0NWVceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjExNlx4YTRcdTI1YTBceGEwIixJPVtdLHk9e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT1fLmNo''@;'; put 'put ''YXJDb2RlQXQoZykmJih5W18uY2hhckF0KGcpXT1nKSxJW2ddPV8uY2hhckF0KGcpO3JldHVybntlbmM6eSxkZWM6SX19KCkscVs4NzRdPWZ1bmN0aW9uKCl7Zm9yKHZhciBfPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4''@;'; put 'put ''MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAyNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx4YTBcdTBlMDFcdTBlMDJcdTBlMDNcdTBlMDRcdTBlMDVcdTBlMDZcdTBlMDdcdTBlMDhcdTBlMDlcdTBlMGFcdTBlMGJcdTBlMGNcdTBlMGRcdTBlMGVcdTBlMGZcdTBlMTBcdTBlMTFcdTBlMTJcdTBlMTNcdTBlMTRcdTBlMTVcdTBlMTZcdTBlMTdcdTBlMThcdTBl''@;'; put 'put ''MTlcdTBlMWFcdTBlMWJcdTBlMWNcdTBlMWRcdTBlMWVcdTBlMWZcdTBlMjBcdTBlMjFcdTBlMjJcdTBlMjNcdTBlMjRcdTBlMjVcdTBlMjZcdTBlMjdcdTBlMjhcdTBlMjlcdTBlMmFcdTBlMmJcdTBlMmNcdTBlMmRcdTBlMmVcdTBlMmZcdTBlMzBcdTBlMzFcdTBlMzJcdTBlMzNcdTBlMzRc''@;'; put 'put ''dTBlMzVcdTBlMzZcdTBlMzdcdTBlMzhcdTBlMzlcdTBlM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlM2ZcdTBlNDBcdTBlNDFcdTBlNDJcdTBlNDNcdTBlNDRcdTBlNDVcdTBlNDZcdTBlNDdcdTBlNDhcdTBlNDlcdTBlNGFcdTBlNGJcdTBlNGNcdTBlNGRcdTBlNGVcdTBlNGZcdTBl''@;'; put 'put ''NTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTlcdTBlNWFcdTBlNWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLEk9W10seT17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PV8uY2hhckNvZGVBdChnKSYmKHlbXy5jaGFyQXQoZyldPWcpLElb''@;'; put 'put ''Z109Xy5jaGFyQXQoZyk7cmV0dXJue2VuYzp5LGRlYzpJfX0oKSxxWzg5NV09ZnVuY3Rpb24oKXtmb3IodmFyIF89IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFi''@;'; put 'put ''XHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUwMTBjXHhmY1x4ZTlcdTAxMGZceGU0XHUwMTBlXHUwMTY0XHUwMTBkXHUwMTFi''@;'; put 'put ''XHUwMTFhXHUwMTM5XHhjZFx1MDEzZVx1MDFlYVx4YzRceGMxXHhjOVx1MDE3ZVx1MDE3ZFx4ZjRceGY2XHhkM1x1MDE2Zlx4ZGFceGZkXHhkNlx4ZGNcdTAxNjBcdTAxM2RceGRkXHUwMTU4XHUwMTY1XHhlMVx4ZWRceGYzXHhmYVx1MDE0OFx1MDE0N1x1MDE2ZVx4ZDRcdTAxNjFcdTAxNTlc''@;'; put 'put ''dTAxNTVcdTAxNTRceGJjXHhhN1x4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVl''@;'; put 'put ''XHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5''@;'; put 'put ''M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAiLEk9''@;'; put 'put ''W10seT17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PV8uY2hhckNvZGVBdChnKSYmKHlbXy5jaGFyQXQoZyldPWcpLElbZ109Xy5jaGFyQXQoZyk7cmV0dXJue2VuYzp5LGRlYzpJfX0oKSxxWzkzMl09ZnVuY3Rpb24oKXt2YXIgZyxfPVtdLEk9e30seT1bXTtmb3IoeVswXT0iXDBceDAxXHgw''@;'; put 'put ''Mlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFla''@;'; put 'put ''W1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmNjFcdWZmNjJcdWZmNjNcdWZmNjRcdWZmNjVcdWZmNjZcdWZmNjdcdWZmNjhcdWZmNjlcdWZmNmFcdWZmNmJcdWZmNmNcdWZmNmRcdWZmNmVcdWZmNmZc''@;'; put 'put ''dWZmNzBcdWZmNzFcdWZmNzJcdWZmNzNcdWZmNzRcdWZmNzVcdWZmNzZcdWZmNzdcdWZmNzhcdWZmNzlcdWZmN2FcdWZmN2JcdWZmN2NcdWZmN2RcdWZmN2VcdWZmN2ZcdWZmODBcdWZmODFcdWZmODJcdWZmODNcdWZmODRcdWZmODVcdWZmODZcdWZmODdcdWZmODhcdWZmODlcdWZmOGFcdWZm''@;'; put 'put ''OGJcdWZmOGNcdWZmOGRcdWZmOGVcdWZmOGZcdWZmOTBcdWZmOTFcdWZmOTJcdWZmOTNcdWZmOTRcdWZmOTVcdWZmOTZcdWZmOTdcdWZmOThcdWZmOTlcdWZmOWFcdWZmOWJcdWZmOWNcdWZmOWRcdWZmOWVcdWZmOWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7''@;'; put 'put ''ZyE9eVswXS5sZW5ndGg7KytnKTY1NTMzIT09eVswXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzBdW2ddXT0wK2csX1swK2ddPXlbMF1bZ10pO2Zvcih5WzEyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAwMFx1MzAwMVx1MzAw''@;'; put 'put ''Mlx1ZmYwY1x1ZmYwZVx1MzBmYlx1ZmYxYVx1ZmYxYlx1ZmYxZlx1ZmYwMVx1MzA5Ylx1MzA5Y1x4YjRcdWZmNDBceGE4XHVmZjNlXHVmZmUzXHVmZjNmXHUzMGZkXHUzMGZlXHUzMDlkXHUzMDllXHUzMDAzXHU0ZWRkXHUzMDA1XHUzMDA2XHUzMDA3XHUzMGZjXHUyMDE1XHUyMDEwXHVmZjBm''@;'; put 'put ''XHVmZjNjXHVmZjVlXHUyMjI1XHVmZjVjXHUyMDI2XHUyMDI1XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHVmZjA4XHVmZjA5XHUzMDE0XHUzMDE1XHVmZjNiXHVmZjNkXHVmZjViXHVmZjVkXHUzMDA4XHUzMDA5XHUzMDBhXHUzMDBiXHUzMDBjXHUzMDBkXHUzMDBlXHUzMDBmXHUzMDEwXHUz''@;'; put 'put ''MDExXHVmZjBiXHVmZjBkXHhiMVx4ZDdcdWZmZmRceGY3XHVmZjFkXHUyMjYwXHVmZjFjXHVmZjFlXHUyMjY2XHUyMjY3XHUyMjFlXHUyMjM0XHUyNjQyXHUyNjQwXHhiMFx1MjAzMlx1MjAzM1x1MjEwM1x1ZmZlNVx1ZmYwNFx1ZmZlMFx1ZmZlMVx1ZmYwNVx1ZmYwM1x1ZmYwNlx1ZmYwYVx1''@;'; put 'put ''ZmYyMFx4YTdcdTI2MDZcdTI2MDVcdTI1Y2JcdTI1Y2ZcdTI1Y2VcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJcdTI1YmRcdTI1YmNcdTIwM2JcdTMwMTJcdTIxOTJcdTIxOTBcdTIxOTFcdTIxOTNcdTMwMTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIyMDhcdTIyMGJcdTIyODZcdTIyODdcdTIyODJcdTIyODNcdTIyMmFcdTIyMjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIyMjdcdTIyMjhcdWZmZTJcdTIxZDJcdTIxZDRcdTIyMDBcdTIy''@;'; put 'put ''MDNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIyMjBcdTIyYTVcdTIzMTJcdTIyMDJcdTIyMDdcdTIyNjFcdTIyNTJcdTIyNmFcdTIyNmJcdTIyMWFcdTIyM2RcdTIyMWRcdTIyMzVcdTIyMmJcdTIyMmNcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIxMmJcdTIwMzBcdTI2NmZcdTI2NmRcdTI2NmFcdTIwMjBcdTIwMjFceGI2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNWVmXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTI5XS5sZW5ndGg7Kytn''@;'; put 'put ''KTY1NTMzIT09eVsxMjldW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTI5XVtnXV09MzMwMjQrZyxfWzMzMDI0K2ddPXlbMTI5XVtnXSk7Zm9yKHlbMTMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjEwXHVmZjExXHVmZjEyXHVmZjEzXHVmZjE0XHVmZjE1XHVmZjE2XHVmZjE3XHVmZjE4XHVmZjE5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZjIxXHVmZjIyXHVmZjIzXHVmZjI0XHVmZjI1XHVmZjI2XHVmZjI3XHVmZjI4XHVmZjI5XHVmZjJhXHVmZjJiXHVmZjJjXHVmZjJkXHVmZjJlXHVmZjJmXHVmZjMwXHVmZjMxXHVmZjMyXHVmZjMzXHVmZjM0XHVmZjM1XHVmZjM2XHVmZjM3XHVmZjM4XHVmZjM5XHVmZjNhXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjQxXHVmZjQyXHVmZjQzXHVmZjQ0XHVmZjQ1XHVmZjQ2XHVmZjQ3XHVmZjQ4XHVmZjQ5XHVmZjRhXHVmZjRiXHVmZjRjXHVmZjRkXHVmZjRlXHVmZjRmXHVmZjUwXHVmZjUxXHVmZjUyXHVmZjUzXHVmZjU0XHVmZjU1''@;'; put 'put ''XHVmZjU2XHVmZjU3XHVmZjU4XHVmZjU5XHVmZjVhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDQxXHUzMDQyXHUzMDQzXHUzMDQ0XHUzMDQ1XHUzMDQ2XHUzMDQ3XHUzMDQ4XHUzMDQ5XHUzMDRhXHUzMDRiXHUzMDRjXHUzMDRkXHUzMDRlXHUzMDRmXHUzMDUwXHUzMDUxXHUzMDUyXHUz''@;'; put 'put ''MDUzXHUzMDU0XHUzMDU1XHUzMDU2XHUzMDU3XHUzMDU4XHUzMDU5XHUzMDVhXHUzMDViXHUzMDVjXHUzMDVkXHUzMDVlXHUzMDVmXHUzMDYwXHUzMDYxXHUzMDYyXHUzMDYzXHUzMDY0XHUzMDY1XHUzMDY2XHUzMDY3XHUzMDY4XHUzMDY5XHUzMDZhXHUzMDZiXHUzMDZjXHUzMDZkXHUzMDZl''@;'; put 'put ''XHUzMDZmXHUzMDcwXHUzMDcxXHUzMDcyXHUzMDczXHUzMDc0XHUzMDc1XHUzMDc2XHUzMDc3XHUzMDc4XHUzMDc5XHUzMDdhXHUzMDdiXHUzMDdjXHUzMDdkXHUzMDdlXHUzMDdmXHUzMDgwXHUzMDgxXHUzMDgyXHUzMDgzXHUzMDg0XHUzMDg1XHUzMDg2XHUzMDg3XHUzMDg4XHUzMDg5XHUz''@;'; put 'put ''MDhhXHUzMDhiXHUzMDhjXHUzMDhkXHUzMDhlXHUzMDhmXHUzMDkwXHUzMDkxXHUzMDkyXHUzMDkzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTMw''@;'; put 'put ''XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxMzBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTMwXVtnXV09MzMyODArZyxfWzMzMjgwK2ddPXlbMTMwXVtnXSk7Zm9yKHlbMTMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMGExXHUz''@;'; put 'put ''MGEyXHUzMGEzXHUzMGE0XHUzMGE1XHUzMGE2XHUzMGE3XHUzMGE4XHUzMGE5XHUzMGFhXHUzMGFiXHUzMGFjXHUzMGFkXHUzMGFlXHUzMGFmXHUzMGIwXHUzMGIxXHUzMGIyXHUzMGIzXHUzMGI0XHUzMGI1XHUzMGI2XHUzMGI3XHUzMGI4XHUzMGI5XHUzMGJhXHUzMGJiXHUzMGJjXHUzMGJk''@;'; put 'put ''XHUzMGJlXHUzMGJmXHUzMGMwXHUzMGMxXHUzMGMyXHUzMGMzXHUzMGM0XHUzMGM1XHUzMGM2XHUzMGM3XHUzMGM4XHUzMGM5XHUzMGNhXHUzMGNiXHUzMGNjXHUzMGNkXHUzMGNlXHUzMGNmXHUzMGQwXHUzMGQxXHUzMGQyXHUzMGQzXHUzMGQ0XHUzMGQ1XHUzMGQ2XHUzMGQ3XHUzMGQ4XHUz''@;'; put 'put ''MGQ5XHUzMGRhXHUzMGRiXHUzMGRjXHUzMGRkXHUzMGRlXHUzMGRmXHVmZmZkXHUzMGUwXHUzMGUxXHUzMGUyXHUzMGUzXHUzMGU0XHUzMGU1XHUzMGU2XHUzMGU3XHUzMGU4XHUzMGU5XHUzMGVhXHUzMGViXHUzMGVjXHUzMGVkXHUzMGVlXHUzMGVmXHUzMGYwXHUzMGYxXHUzMGYyXHUzMGYz''@;'; put 'put ''XHUzMGY0XHUzMGY1XHUzMGY2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUw''@;'; put 'put ''M2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2Jj''@;'; put 'put ''XHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiks''@;'; put 'put ''Zz0wO2chPXlbMTMxXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxMzFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTMxXVtnXV09MzM1MzYrZyxfWzMzNTM2K2ddPXlbMTMxXVtnXSk7Zm9yKHlbMTMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDAxXHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5''@;'; put 'put ''XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUw''@;'; put 'put ''NDUxXHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHVmZmZkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRm''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNTAwXHUyNTAyXHUyNTBjXHUyNTEwXHUyNTE4XHUyNTE0XHUyNTFjXHUyNTJjXHUyNTI0XHUyNTM0XHUyNTNjXHUyNTAxXHUyNTAzXHUyNTBmXHUy''@;'; put 'put ''NTEzXHUyNTFiXHUyNTE3XHUyNTIzXHUyNTMzXHUyNTJiXHUyNTNiXHUyNTRiXHUyNTIwXHUyNTJmXHUyNTI4XHUyNTM3XHUyNTNmXHUyNTFkXHUyNTMwXHUyNTI1XHUyNTM4XHUyNTQyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''Ii5zcGxpdCgiIiksZz0wO2chPXlbMTMyXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxMzJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTMyXVtnXV09MzM3OTIrZyxfWzMzNzkyK2ddPXlbMTMyXVtnXSk7Zm9yKHlbMTM1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHUyNDYwXHUyNDYxXHUyNDYyXHUyNDYzXHUyNDY0XHUyNDY1XHUyNDY2XHUyNDY3XHUyNDY4XHUyNDY5XHUyNDZhXHUyNDZiXHUyNDZjXHUyNDZkXHUyNDZlXHUyNDZmXHUyNDcwXHUyNDcxXHUyNDcyXHUyNDczXHUyMTYwXHUyMTYxXHUyMTYyXHUyMTYzXHUyMTY0''@;'; put 'put ''XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4XHUyMTY5XHVmZmZkXHUzMzQ5XHUzMzE0XHUzMzIyXHUzMzRkXHUzMzE4XHUzMzI3XHUzMzAzXHUzMzM2XHUzMzUxXHUzMzU3XHUzMzBkXHUzMzI2XHUzMzIzXHUzMzJiXHUzMzRhXHUzMzNiXHUzMzljXHUzMzlkXHUzMzllXHUzMzhlXHUzMzhmXHUz''@;'; put 'put ''M2M0XHUzM2ExXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMzdiXHVmZmZkXHUzMDFkXHUzMDFmXHUyMTE2XHUzM2NkXHUyMTIxXHUzMmE0XHUzMmE1XHUzMmE2XHUzMmE3XHUzMmE4XHUzMjMxXHUzMjMyXHUzMjM5XHUzMzdlXHUzMzdkXHUzMzdj''@;'; put 'put ''XHUyMjUyXHUyMjYxXHUyMjJiXHUyMjJlXHUyMjExXHUyMjFhXHUyMmE1XHUyMjIwXHUyMjFmXHUyMmJmXHUyMjM1XHUyMjI5XHUyMjJhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTM1XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxMzVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTM1XVtnXV09MzQ1NjArZyxfWzM0NTYwK2ddPXlbMTM1XVtnXSk7Zm9yKHlbMTM2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTljXHU1NTE2XHU1YTAzXHU5NjNmXHU1NGMwXHU2MTFiXHU2MzI4XHU1OWY2XHU5MDIyXHU4NDc1XHU4''@;'; put 'put ''MzFjXHU3YTUwXHU2MGFhXHU2M2UxXHU2ZTI1XHU2NWVkXHU4NDY2XHU4MmE2XHU5YmY1XHU2ODkzXHU1NzI3XHU2NWExXHU2MjcxXHU1YjliXHU1OWQwXHU4NjdiXHU5OGY0XHU3ZDYyXHU3ZGJlXHU5YjhlXHU2MjE2XHU3YzlmXHU4OGI3XHU1Yjg5XHU1ZWI1XHU2MzA5XHU2Njk3XHU2ODQ4''@;'; put 'put ''XHU5NWM3XHU5NzhkXHU2NzRmXHU0ZWU1XHU0ZjBhXHU0ZjRkXHU0ZjlkXHU1MDQ5XHU1NmYyXHU1OTM3XHU1OWQ0XHU1YTAxXHU1YzA5XHU2MGRmXHU2MTBmXHU2MTcwXHU2NjEzXHU2OTA1XHU3MGJhXHU3NTRmXHU3NTcwXHU3OWZiXHU3ZGFkXHU3ZGVmXHU4MGMzXHU4NDBlXHU4ODYzXHU4''@;'; put 'put ''YjAyXHU5MDU1XHU5MDdhXHU1MzNiXHU0ZTk1XHU0ZWE1XHU1N2RmXHU4MGIyXHU5MGMxXHU3OGVmXHU0ZTAwXHU1OGYxXHU2ZWEyXHU5MDM4XHU3YTMyXHU4MzI4XHU4MjhiXHU5YzJmXHU1MTQxXHU1MzcwXHU1NGJkXHU1NGUxXHU1NmUwXHU1OWZiXHU1ZjE1XHU5OGYyXHU2ZGViXHU4MGU0''@;'; put 'put ''XHU4NTJkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTM2XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxMzZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTM2XVtnXV09MzQ4MTYrZyxfWzM0ODE2K2ddPXlbMTM2XVtnXSk7Zm9yKHlbMTM3XT0iXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NjYyXHU5NjcwXHU5NmEwXHU5N2ZiXHU1NDBiXHU1M2YzXHU1Yjg3XHU3MGNmXHU3ZmJkXHU4ZmMyXHU5NmU4XHU1MzZmXHU5ZDVjXHU3YWJhXHU0ZTExXHU3ODkzXHU4MWZjXHU2ZTI2XHU1NjE4XHU1NTA0XHU2YjFk''@;'; put 'put ''XHU4NTFhXHU5YzNiXHU1OWU1XHU1M2E5XHU2ZDY2XHU3NGRjXHU5NThmXHU1NjQyXHU0ZTkxXHU5MDRiXHU5NmYyXHU4MzRmXHU5OTBjXHU1M2UxXHU1NWI2XHU1YjMwXHU1ZjcxXHU2NjIwXHU2NmYzXHU2ODA0XHU2YzM4XHU2Y2YzXHU2ZDI5XHU3NDViXHU3NmM4XHU3YTRlXHU5ODM0XHU4''@;'; put 'put ''MmYxXHU4ODViXHU4YTYwXHU5MmVkXHU2ZGIyXHU3NWFiXHU3NmNhXHU5OWM1XHU2MGE2XHU4YjAxXHU4ZDhhXHU5NWIyXHU2OThlXHU1M2FkXHU1MTg2XHVmZmZkXHU1NzEyXHU1ODMwXHU1OTQ0XHU1YmI0XHU1ZWY2XHU2MDI4XHU2M2E5XHU2M2Y0XHU2Y2JmXHU2ZjE0XHU3MDhlXHU3MTE0''@;'; put 'put ''XHU3MTU5XHU3MWQ1XHU3MzNmXHU3ZTAxXHU4Mjc2XHU4MmQxXHU4NTk3XHU5MDYwXHU5MjViXHU5ZDFiXHU1ODY5XHU2NWJjXHU2YzVhXHU3NTI1XHU1MWY5XHU1OTJlXHU1OTY1XHU1ZjgwXHU1ZmRjXHU2MmJjXHU2NWZhXHU2YTJhXHU2YjI3XHU2YmI0XHU3MzhiXHU3ZmMxXHU4OTU2XHU5''@;'; put 'put ''ZDJjXHU5ZDBlXHU5ZWM0XHU1Y2ExXHU2Yzk2XHU4MzdiXHU1MTA0XHU1YzRiXHU2MWI2XHU4MWM2XHU2ODc2XHU3MjYxXHU0ZTU5XHU0ZmZhXHU1Mzc4XHU2MDY5XHU2ZTI5XHU3YTRmXHU5N2YzXHU0ZTBiXHU1MzE2XHU0ZWVlXHU0ZjU1XHU0ZjNkXHU0ZmExXHU0ZjczXHU1MmEwXHU1M2Vm''@;'; put 'put ''XHU1NjA5XHU1OTBmXHU1YWMxXHU1YmI2XHU1YmUxXHU3OWQxXHU2Njg3XHU2NzljXHU2N2I2XHU2YjRjXHU2Y2IzXHU3MDZiXHU3M2MyXHU3OThkXHU3OWJlXHU3YTNjXHU3Yjg3XHU4MmIxXHU4MmRiXHU4MzA0XHU4Mzc3XHU4M2VmXHU4M2QzXHU4NzY2XHU4YWIyXHU1NjI5XHU4Y2E4XHU4''@;'; put 'put ''ZmU2XHU5MDRlXHU5NzFlXHU4NjhhXHU0ZmM0XHU1Y2U4XHU2MjExXHU3MjU5XHU3NTNiXHU4MWU1XHU4MmJkXHU4NmZlXHU4Y2MwXHU5NmM1XHU5OTEzXHU5OWQ1XHU0ZWNiXHU0ZjFhXHU4OWUzXHU1NmRlXHU1ODRhXHU1OGNhXHU1ZWZiXHU1ZmViXHU2MDJhXHU2MDk0XHU2MDYyXHU2MWQw''@;'; put 'put ''XHU2MjEyXHU2MmQwXHU2NTM5XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTM3XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxMzddW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTM3XVtnXV09MzUwNzIrZyxfWzM1MDcyK2ddPXlbMTM3XVtnXSk7Zm9yKHlbMTM4XT0iXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YjQxXHU2NjY2XHU2OGIwXHU2ZDc3XHU3MDcwXHU3NTRjXHU3Njg2XHU3ZDc1XHU4MmE1XHU4N2Y5XHU5NThiXHU5NjhlXHU4YzlkXHU1MWYxXHU1MmJlXHU1OTE2XHU1NGIzXHU1YmIzXHU1ZDE2''@;'; put 'put ''XHU2MTY4XHU2OTgyXHU2ZGFmXHU3ODhkXHU4NGNiXHU4ODU3XHU4YTcyXHU5M2E3XHU5YWI4XHU2ZDZjXHU5OWE4XHU4NmQ5XHU1N2EzXHU2N2ZmXHU4NmNlXHU5MjBlXHU1MjgzXHU1Njg3XHU1NDA0XHU1ZWQzXHU2MmUxXHU2NGI5XHU2ODNjXHU2ODM4XHU2YmJiXHU3MzcyXHU3OGJhXHU3''@;'; put 'put ''YTZiXHU4OTlhXHU4OWQyXHU4ZDZiXHU4ZjAzXHU5MGVkXHU5NWEzXHU5Njk0XHU5NzY5XHU1YjY2XHU1Y2IzXHU2OTdkXHU5ODRkXHU5ODRlXHU2MzliXHU3YjIwXHU2YTJiXHVmZmZkXHU2YTdmXHU2OGI2XHU5YzBkXHU2ZjVmXHU1MjcyXHU1NTlkXHU2MDcwXHU2MmVjXHU2ZDNiXHU2ZTA3''@;'; put 'put ''XHU2ZWQxXHU4NDViXHU4OTEwXHU4ZjQ0XHU0ZTE0XHU5YzM5XHU1M2Y2XHU2OTFiXHU2YTNhXHU5Nzg0XHU2ODJhXHU1MTVjXHU3YWMzXHU4NGIyXHU5MWRjXHU5MzhjXHU1NjViXHU5ZDI4XHU2ODIyXHU4MzA1XHU4NDMxXHU3Y2E1XHU1MjA4XHU4MmM1XHU3NGU2XHU0ZTdlXHU0ZjgzXHU1''@;'; put 'put ''MWEwXHU1YmQyXHU1MjBhXHU1MmQ4XHU1MmU3XHU1ZGZiXHU1NTlhXHU1ODJhXHU1OWU2XHU1YjhjXHU1Yjk4XHU1YmRiXHU1ZTcyXHU1ZTc5XHU2MGEzXHU2MTFmXHU2MTYzXHU2MWJlXHU2M2RiXHU2NTYyXHU2N2QxXHU2ODUzXHU2OGZhXHU2YjNlXHU2YjUzXHU2YzU3XHU2ZjIyXHU2Zjk3''@;'; put 'put ''XHU2ZjQ1XHU3NGIwXHU3NTE4XHU3NmUzXHU3NzBiXHU3YWZmXHU3YmExXHU3YzIxXHU3ZGU5XHU3ZjM2XHU3ZmYwXHU4MDlkXHU4MjY2XHU4MzllXHU4OWIzXHU4YWNjXHU4Y2FiXHU5MDg0XHU5NDUxXHU5NTkzXHU5NTkxXHU5NWEyXHU5NjY1XHU5N2QzXHU5OTI4XHU4MjE4XHU0ZTM4XHU1''@;'; put 'put ''NDJiXHU1Y2I4XHU1ZGNjXHU3M2E5XHU3NjRjXHU3NzNjXHU1Y2E5XHU3ZmViXHU4ZDBiXHU5NmMxXHU5ODExXHU5ODU0XHU5ODU4XHU0ZjAxXHU0ZjBlXHU1MzcxXHU1NTljXHU1NjY4XHU1N2ZhXHU1OTQ3XHU1YjA5XHU1YmM0XHU1YzkwXHU1ZTBjXHU1ZTdlXHU1ZmNjXHU2M2VlXHU2NzNh''@;'; put 'put ''XHU2NWQ3XHU2NWUyXHU2NzFmXHU2OGNiXHU2OGM0XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTM4XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxMzhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTM4XVtnXV09MzUzMjgrZyxfWzM1MzI4K2ddPXlbMTM4XVtnXSk7Zm9y''@;'; put 'put ''KHlbMTM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YTVmXHU1ZTMwXHU2YmM1XHU2YzE3XHU2YzdkXHU3NTdmXHU3OTQ4XHU1YjYzXHU3YTAwXHU3ZDAwXHU1ZmJkXHU4OThmXHU4YTE4XHU4Y2I0XHU4ZDc3XHU4ZWNjXHU4ZjFk''@;'; put 'put ''XHU5OGUyXHU5YTBlXHU5YjNjXHU0ZTgwXHU1MDdkXHU1MTAwXHU1OTkzXHU1YjljXHU2MjJmXHU2MjgwXHU2NGVjXHU2YjNhXHU3MmEwXHU3NTkxXHU3OTQ3XHU3ZmE5XHU4N2ZiXHU4YWJjXHU4YjcwXHU2M2FjXHU4M2NhXHU5N2EwXHU1NDA5XHU1NDAzXHU1NWFiXHU2ODU0XHU2YTU4XHU4''@;'; put 'put ''YTcwXHU3ODI3XHU2Nzc1XHU5ZWNkXHU1Mzc0XHU1YmEyXHU4MTFhXHU4NjUwXHU5MDA2XHU0ZTE4XHU0ZTQ1XHU0ZWM3XHU0ZjExXHU1M2NhXHU1NDM4XHU1YmFlXHU1ZjEzXHU2MDI1XHU2NTUxXHVmZmZkXHU2NzNkXHU2YzQyXHU2YzcyXHU2Y2UzXHU3MDc4XHU3NDAzXHU3YTc2XHU3YWFl''@;'; put 'put ''XHU3YjA4XHU3ZDFhXHU3Y2ZlXHU3ZDY2XHU2NWU3XHU3MjViXHU1M2JiXHU1YzQ1XHU1ZGU4XHU2MmQyXHU2MmUwXHU2MzE5XHU2ZTIwXHU4NjVhXHU4YTMxXHU4ZGRkXHU5MmY4XHU2ZjAxXHU3OWE2XHU5YjVhXHU0ZWE4XHU0ZWFiXHU0ZWFjXHU0ZjliXHU0ZmEwXHU1MGQxXHU1MTQ3XHU3''@;'; put 'put ''YWY2XHU1MTcxXHU1MWY2XHU1MzU0XHU1MzIxXHU1MzdmXHU1M2ViXHU1NWFjXHU1ODgzXHU1Y2UxXHU1ZjM3XHU1ZjRhXHU2MDJmXHU2MDUwXHU2MDZkXHU2MzFmXHU2NTU5XHU2YTRiXHU2Y2MxXHU3MmMyXHU3MmVkXHU3N2VmXHU4MGY4XHU4MTA1XHU4MjA4XHU4NTRlXHU5MGY3XHU5M2Ux''@;'; put 'put ''XHU5N2ZmXHU5OTU3XHU5YTVhXHU0ZWYwXHU1MWRkXHU1YzJkXHU2NjgxXHU2OTZkXHU1YzQwXHU2NmYyXHU2OTc1XHU3Mzg5XHU2ODUwXHU3YzgxXHU1MGM1XHU1MmU0XHU1NzQ3XHU1ZGZlXHU5MzI2XHU2NWE0XHU2YjIzXHU2YjNkXHU3NDM0XHU3OTgxXHU3OWJkXHU3YjRiXHU3ZGNhXHU4''@;'; put 'put ''MmI5XHU4M2NjXHU4ODdmXHU4OTVmXHU4YjM5XHU4ZmQxXHU5MWQxXHU1NDFmXHU5MjgwXHU0ZTVkXHU1MDM2XHU1M2U1XHU1MzNhXHU3MmQ3XHU3Mzk2XHU3N2U5XHU4MmU2XHU4ZWFmXHU5OWM2XHU5OWM4XHU5OWQyXHU1MTc3XHU2MTFhXHU4NjVlXHU1NWIwXHU3YTdhXHU1MDc2XHU1YmQz''@;'; put 'put ''XHU5MDQ3XHU5Njg1XHU0ZTMyXHU2YWRiXHU5MWU3XHU1YzUxXHU1YzQ4XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTM5XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxMzldW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTM5XVtnXV09MzU1ODQrZyxfWzM1NTg0K2ddPXlb''@;'; put 'put ''MTM5XVtnXSk7Zm9yKHlbMTQwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2Mzk4XHU3YTlmXHU2YzkzXHU5Nzc0XHU4ZjYxXHU3YWFhXHU3MThhXHU5Njg4XHU3YzgyXHU2ODE3XHU3ZTcwXHU2ODUxXHU5MzZjXHU1MmYyXHU1NDFi''@;'; put 'put ''XHU4NWFiXHU4YTEzXHU3ZmE0XHU4ZWNkXHU5MGUxXHU1MzY2XHU4ODg4XHU3OTQxXHU0ZmMyXHU1MGJlXHU1MjExXHU1MTQ0XHU1NTUzXHU1NzJkXHU3M2VhXHU1NzhiXHU1OTUxXHU1ZjYyXHU1Zjg0XHU2MDc1XHU2MTc2XHU2MTY3XHU2MWE5XHU2M2IyXHU2NDNhXHU2NTZjXHU2NjZmXHU2''@;'; put 'put ''ODQyXHU2ZTEzXHU3NTY2XHU3YTNkXHU3Y2ZiXHU3ZDRjXHU3ZDk5XHU3ZTRiXHU3ZjZiXHU4MzBlXHU4MzRhXHU4NmNkXHU4YTA4XHU4YTYzXHU4YjY2XHU4ZWZkXHU5ODFhXHU5ZDhmXHU4MmI4XHU4ZmNlXHU5YmU4XHVmZmZkXHU1Mjg3XHU2MjFmXHU2NDgzXHU2ZmMwXHU5Njk5XHU2ODQx''@;'; put 'put ''XHU1MDkxXHU2YjIwXHU2YzdhXHU2ZjU0XHU3YTc0XHU3ZDUwXHU4ODQwXHU4YTIzXHU2NzA4XHU0ZWY2XHU1MDM5XHU1MDI2XHU1MDY1XHU1MTdjXHU1MjM4XHU1MjYzXHU1NWE3XHU1NzBmXHU1ODA1XHU1YWNjXHU1ZWZhXHU2MWIyXHU2MWY4XHU2MmYzXHU2MzcyXHU2OTFjXHU2YTI5XHU3''@;'; put 'put ''MjdkXHU3MmFjXHU3MzJlXHU3ODE0XHU3ODZmXHU3ZDc5XHU3NzBjXHU4MGE5XHU4OThiXHU4YjE5XHU4Y2UyXHU4ZWQyXHU5MDYzXHU5Mzc1XHU5NjdhXHU5ODU1XHU5YTEzXHU5ZTc4XHU1MTQzXHU1MzlmXHU1M2IzXHU1ZTdiXHU1ZjI2XHU2ZTFiXHU2ZTkwXHU3Mzg0XHU3M2ZlXHU3ZDQz''@;'; put 'put ''XHU4MjM3XHU4YTAwXHU4YWZhXHU5NjUwXHU0ZTRlXHU1MDBiXHU1M2U0XHU1NDdjXHU1NmZhXHU1OWQxXHU1YjY0XHU1ZGYxXHU1ZWFiXHU1ZjI3XHU2MjM4XHU2NTQ1XHU2N2FmXHU2ZTU2XHU3MmQwXHU3Y2NhXHU4OGI0XHU4MGExXHU4MGUxXHU4M2YwXHU4NjRlXHU4YTg3XHU4ZGU4XHU5''@;'; put 'put ''MjM3XHU5NmM3XHU5ODY3XHU5ZjEzXHU0ZTk0XHU0ZTkyXHU0ZjBkXHU1MzQ4XHU1NDQ5XHU1NDNlXHU1YTJmXHU1ZjhjXHU1ZmExXHU2MDlmXHU2OGE3XHU2YThlXHU3NDVhXHU3ODgxXHU4YTllXHU4YWE0XHU4Yjc3XHU5MTkwXHU0ZTVlXHU5YmM5XHU0ZWE0XHU0ZjdjXHU0ZmFmXHU1MDE5''@;'; put 'put ''XHU1MDE2XHU1MTQ5XHU1MTZjXHU1MjlmXHU1MmI5XHU1MmZlXHU1MzlhXHU1M2UzXHU1NDExXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTQwXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNDBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTQwXVtnXV09MzU4NDArZyxf''@;'; put 'put ''WzM1ODQwK2ddPXlbMTQwXVtnXSk7Zm9yKHlbMTQxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NDBlXHU1NTg5XHU1NzUxXHU1N2EyXHU1OTdkXHU1YjU0XHU1YjVkXHU1YjhmXHU1ZGU1XHU1ZGU3XHU1ZGY3XHU1ZTc4XHU1ZTgz''@;'; put 'put ''XHU1ZTlhXHU1ZWI3XHU1ZjE4XHU2MDUyXHU2MTRjXHU2Mjk3XHU2MmQ4XHU2M2E3XHU2NTNiXHU2NjAyXHU2NjQzXHU2NmY0XHU2NzZkXHU2ODIxXHU2ODk3XHU2OWNiXHU2YzVmXHU2ZDJhXHU2ZDY5XHU2ZTJmXHU2ZTlkXHU3NTMyXHU3Njg3XHU3ODZjXHU3YTNmXHU3Y2UwXHU3ZDA1XHU3''@;'; put 'put ''ZDE4XHU3ZDVlXHU3ZGIxXHU4MDE1XHU4MDAzXHU4MGFmXHU4MGIxXHU4MTU0XHU4MThmXHU4MjJhXHU4MzUyXHU4ODRjXHU4ODYxXHU4YjFiXHU4Y2EyXHU4Y2ZjXHU5MGNhXHU5MTc1XHU5MjcxXHU3ODNmXHU5MmZjXHU5NWE0XHU5NjRkXHVmZmZkXHU5ODA1XHU5OTk5XHU5YWQ4XHU5ZDNi''@;'; put 'put ''XHU1MjViXHU1MmFiXHU1M2Y3XHU1NDA4XHU1OGQ1XHU2MmY3XHU2ZmUwXHU4YzZhXHU4ZjVmXHU5ZWI5XHU1MTRiXHU1MjNiXHU1NDRhXHU1NmZkXHU3YTQwXHU5MTc3XHU5ZDYwXHU5ZWQyXHU3MzQ0XHU2ZjA5XHU4MTcwXHU3NTExXHU1ZmZkXHU2MGRhXHU5YWE4XHU3MmRiXHU4ZmJjXHU2''@;'; put 'put ''YjY0XHU5ODAzXHU0ZWNhXHU1NmYwXHU1NzY0XHU1OGJlXHU1YTVhXHU2MDY4XHU2MWM3XHU2NjBmXHU2NjA2XHU2ODM5XHU2OGIxXHU2ZGY3XHU3NWQ1XHU3ZDNhXHU4MjZlXHU5YjQyXHU0ZTliXHU0ZjUwXHU1M2M5XHU1NTA2XHU1ZDZmXHU1ZGU2XHU1ZGVlXHU2N2ZiXHU2Yzk5XHU3NDcz''@;'; put 'put ''XHU3ODAyXHU4YTUwXHU5Mzk2XHU4OGRmXHU1NzUwXHU1ZWE3XHU2MzJiXHU1MGI1XHU1MGFjXHU1MThkXHU2NzAwXHU1NGM5XHU1ODVlXHU1OWJiXHU1YmIwXHU1ZjY5XHU2MjRkXHU2M2ExXHU2ODNkXHU2YjczXHU2ZTA4XHU3MDdkXHU5MWM3XHU3MjgwXHU3ODE1XHU3ODI2XHU3OTZkXHU2''@;'; put 'put ''NThlXHU3ZDMwXHU4M2RjXHU4OGMxXHU4ZjA5XHU5NjliXHU1MjY0XHU1NzI4XHU2NzUwXHU3ZjZhXHU4Y2ExXHU1MWI0XHU1NzQyXHU5NjJhXHU1ODNhXHU2OThhXHU4MGI0XHU1NGIyXHU1ZDBlXHU1N2ZjXHU3ODk1XHU5ZGZhXHU0ZjVjXHU1MjRhXHU1NDhiXHU2NDNlXHU2NjI4XHU2NzE0''@;'; put 'put ''XHU2N2Y1XHU3YTg0XHU3YjU2XHU3ZDIyXHU5MzJmXHU2ODVjXHU5YmFkXHU3YjM5XHU1MzE5XHU1MThhXHU1MjM3XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTQxXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNDFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTQxXVtn''@;'; put 'put ''XV09MzYwOTYrZyxfWzM2MDk2K2ddPXlbMTQxXVtnXSk7Zm9yKHlbMTQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YmRmXHU2MmY2XHU2NGFlXHU2NGU2XHU2NzJkXHU2YmJhXHU4NWE5XHU5NmQxXHU3NjkwXHU5YmQ2XHU2MzRj''@;'; put 'put ''XHU5MzA2XHU5YmFiXHU3NmJmXHU2NjUyXHU0ZTA5XHU1MDk4XHU1M2MyXHU1YzcxXHU2MGU4XHU2NDkyXHU2NTYzXHU2ODVmXHU3MWU2XHU3M2NhXHU3NTIzXHU3Yjk3XHU3ZTgyXHU4Njk1XHU4YjgzXHU4Y2RiXHU5MTc4XHU5OTEwXHU2NWFjXHU2NmFiXHU2YjhiXHU0ZWQ1XHU0ZWQ0XHU0''@;'; put 'put ''ZjNhXHU0ZjdmXHU1MjNhXHU1M2Y4XHU1M2YyXHU1NWUzXHU1NmRiXHU1OGViXHU1OWNiXHU1OWM5XHU1OWZmXHU1YjUwXHU1YzRkXHU1ZTAyXHU1ZTJiXHU1ZmQ3XHU2MDFkXHU2MzA3XHU2NTJmXHU1YjVjXHU2NWFmXHU2NWJkXHU2NWU4XHU2NzlkXHU2YjYyXHVmZmZkXHU2YjdiXHU2YzBm''@;'; put 'put ''XHU3MzQ1XHU3OTQ5XHU3OWMxXHU3Y2Y4XHU3ZDE5XHU3ZDJiXHU4MGEyXHU4MTAyXHU4MWYzXHU4OTk2XHU4YTVlXHU4YTY5XHU4YTY2XHU4YThjXHU4YWVlXHU4Y2M3XHU4Y2RjXHU5NmNjXHU5OGZjXHU2YjZmXHU0ZThiXHU0ZjNjXHU0ZjhkXHU1MTUwXHU1YjU3XHU1YmZhXHU2MTQ4XHU2''@;'; put 'put ''MzAxXHU2NjQyXHU2YjIxXHU2ZWNiXHU2Y2JiXHU3MjNlXHU3NGJkXHU3NWQ0XHU3OGMxXHU3OTNhXHU4MDBjXHU4MDMzXHU4MWVhXHU4NDk0XHU4ZjllXHU2YzUwXHU5ZTdmXHU1ZjBmXHU4YjU4XHU5ZDJiXHU3YWZhXHU4ZWY4XHU1YjhkXHU5NmViXHU0ZTAzXHU1M2YxXHU1N2Y3XHU1OTMx''@;'; put 'put ''XHU1YWM5XHU1YmE0XHU2MDg5XHU2ZTdmXHU2ZjA2XHU3NWJlXHU4Y2VhXHU1YjlmXHU4NTAwXHU3YmUwXHU1MDcyXHU2N2Y0XHU4MjlkXHU1YzYxXHU4NTRhXHU3ZTFlXHU4MjBlXHU1MTk5XHU1YzA0XHU2MzY4XHU4ZDY2XHU2NTljXHU3MTZlXHU3OTNlXHU3ZDE3XHU4MDA1XHU4YjFkXHU4''@;'; put 'put ''ZWNhXHU5MDZlXHU4NmM3XHU5MGFhXHU1MDFmXHU1MmZhXHU1YzNhXHU2NzUzXHU3MDdjXHU3MjM1XHU5MTRjXHU5MWM4XHU5MzJiXHU4MmU1XHU1YmMyXHU1ZjMxXHU2MGY5XHU0ZTNiXHU1M2Q2XHU1Yjg4XHU2MjRiXHU2NzMxXHU2YjhhXHU3MmU5XHU3M2UwXHU3YTJlXHU4MTZiXHU4ZGEz''@;'; put 'put ''XHU5MTUyXHU5OTk2XHU1MTEyXHU1M2Q3XHU1NDZhXHU1YmZmXHU2Mzg4XHU2YTM5XHU3ZGFjXHU5NzAwXHU1NmRhXHU1M2NlXHU1NDY4XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTQyXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNDJdW2ddLmNoYXJDb2RlQXQoMCkm''@;'; put 'put ''JihJW3lbMTQyXVtnXV09MzYzNTIrZyxfWzM2MzUyK2ddPXlbMTQyXVtnXSk7Zm9yKHlbMTQzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1Yjk3XHU1YzMxXHU1ZGRlXHU0ZmVlXHU2MTAxXHU2MmZlXHU2ZDMyXHU3OWMwXHU3OWNi''@;'; put 'put ''XHU3ZDQyXHU3ZTRkXHU3ZmQyXHU4MWVkXHU4MjFmXHU4NDkwXHU4ODQ2XHU4OTcyXHU4YjkwXHU4ZTc0XHU4ZjJmXHU5MDMxXHU5MTRiXHU5MTZjXHU5NmM2XHU5MTljXHU0ZWMwXHU0ZjRmXHU1MTQ1XHU1MzQxXHU1ZjkzXHU2MjBlXHU2N2Q0XHU2YzQxXHU2ZTBiXHU3MzYzXHU3ZTI2XHU5''@;'; put 'put ''MWNkXHU5MjgzXHU1M2Q0XHU1OTE5XHU1YmJmXHU2ZGQxXHU3OTVkXHU3ZTJlXHU3YzliXHU1ODdlXHU3MTlmXHU1MWZhXHU4ODUzXHU4ZmYwXHU0ZmNhXHU1Y2ZiXHU2NjI1XHU3N2FjXHU3YWUzXHU4MjFjXHU5OWZmXHU1MWM2XHU1ZmFhXHU2NWVjXHU2OTZmXHU2Yjg5XHU2ZGYzXHVmZmZk''@;'; put 'put ''XHU2ZTk2XHU2ZjY0XHU3NmZlXHU3ZDE0XHU1ZGUxXHU5MDc1XHU5MTg3XHU5ODA2XHU1MWU2XHU1MjFkXHU2MjQwXHU2NjkxXHU2NmQ5XHU2ZTFhXHU1ZWI2XHU3ZGQyXHU3ZjcyXHU2NmY4XHU4NWFmXHU4NWY3XHU4YWY4XHU1MmE5XHU1M2Q5XHU1OTczXHU1ZThmXHU1ZjkwXHU2MDU1XHU5''@;'; put 'put ''MmU0XHU5NjY0XHU1MGI3XHU1MTFmXHU1MmRkXHU1MzIwXHU1MzQ3XHU1M2VjXHU1NGU4XHU1NTQ2XHU1NTMxXHU1NjE3XHU1OTY4XHU1OWJlXHU1YTNjXHU1YmI1XHU1YzA2XHU1YzBmXHU1YzExXHU1YzFhXHU1ZTg0XHU1ZThhXHU1ZWUwXHU1ZjcwXHU2MjdmXHU2Mjg0XHU2MmRiXHU2Mzhj''@;'; put 'put ''XHU2Mzc3XHU2NjA3XHU2NjBjXHU2NjJkXHU2Njc2XHU2NzdlXHU2OGEyXHU2YTFmXHU2YTM1XHU2Y2JjXHU2ZDg4XHU2ZTA5XHU2ZTU4XHU3MTNjXHU3MTI2XHU3MTY3XHU3NWM3XHU3NzAxXHU3ODVkXHU3OTAxXHU3OTY1XHU3OWYwXHU3YWUwXHU3YjExXHU3Y2E3XHU3ZDM5XHU4MDk2XHU4''@;'; put 'put ''M2Q2XHU4NDhiXHU4NTQ5XHU4ODVkXHU4OGYzXHU4YTFmXHU4YTNjXHU4YTU0XHU4YTczXHU4YzYxXHU4Y2RlXHU5MWE0XHU5MjY2XHU5MzdlXHU5NDE4XHU5NjljXHU5Nzk4XHU0ZTBhXHU0ZTA4XHU0ZTFlXHU0ZTU3XHU1MTk3XHU1MjcwXHU1N2NlXHU1ODM0XHU1OGNjXHU1YjIyXHU1ZTM4''@;'; put 'put ''XHU2MGM1XHU2NGZlXHU2NzYxXHU2NzU2XHU2ZDQ0XHU3MmI2XHU3NTczXHU3YTYzXHU4NGI4XHU4YjcyXHU5MWI4XHU5MzIwXHU1NjMxXHU1N2Y0XHU5OGZlXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTQzXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNDNdW2ddLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkmJihJW3lbMTQzXVtnXV09MzY2MDgrZyxfWzM2NjA4K2ddPXlbMTQzXVtnXSk7Zm9yKHlbMTQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MmVkXHU2OTBkXHU2Yjk2XHU3MWVkXHU3ZTU0XHU4MDc3XHU4Mjcy''@;'; put 'put ''XHU4OWU2XHU5OGRmXHU4NzU1XHU4ZmIxXHU1YzNiXHU0ZjM4XHU0ZmUxXHU0ZmI1XHU1NTA3XHU1YTIwXHU1YmRkXHU1YmU5XHU1ZmMzXHU2MTRlXHU2MzJmXHU2NWIwXHU2NjRiXHU2OGVlXHU2OTliXHU2ZDc4XHU2ZGYxXHU3NTMzXHU3NWI5XHU3NzFmXHU3OTVlXHU3OWU2XHU3ZDMzXHU4''@;'; put 'put ''MWUzXHU4MmFmXHU4NWFhXHU4OWFhXHU4YTNhXHU4ZWFiXHU4ZjliXHU5MDMyXHU5MWRkXHU5NzA3XHU0ZWJhXHU0ZWMxXHU1MjAzXHU1ODc1XHU1OGVjXHU1YzBiXHU3NTFhXHU1YzNkXHU4MTRlXHU4YTBhXHU4ZmM1XHU5NjYzXHU5NzZkXHU3YjI1XHU4YWNmXHU5ODA4XHU5MTYyXHU1NmYz''@;'; put 'put ''XHU1M2E4XHVmZmZkXHU5MDE3XHU1NDM5XHU1NzgyXHU1ZTI1XHU2M2E4XHU2YzM0XHU3MDhhXHU3NzYxXHU3YzhiXHU3ZmUwXHU4ODcwXHU5MDQyXHU5MTU0XHU5MzEwXHU5MzE4XHU5NjhmXHU3NDVlXHU5YWM0XHU1ZDA3XHU1ZDY5XHU2NTcwXHU2N2EyXHU4ZGE4XHU5NmRiXHU2MzZlXHU2''@;'; put 'put ''NzQ5XHU2OTE5XHU4M2M1XHU5ODE3XHU5NmMwXHU4OGZlXHU2Zjg0XHU2NDdhXHU1YmY4XHU0ZTE2XHU3MDJjXHU3NTVkXHU2NjJmXHU1MWM0XHU1MjM2XHU1MmUyXHU1OWQzXHU1ZjgxXHU2MDI3XHU2MjEwXHU2NTNmXHU2NTc0XHU2NjFmXHU2Njc0XHU2OGYyXHU2ODE2XHU2YjYzXHU2ZTA1''@;'; put 'put ''XHU3MjcyXHU3NTFmXHU3NmRiXHU3Y2JlXHU4MDU2XHU1OGYwXHU4OGZkXHU4OTdmXHU4YWEwXHU4YTkzXHU4YWNiXHU5MDFkXHU5MTkyXHU5NzUyXHU5NzU5XHU2NTg5XHU3YTBlXHU4MTA2XHU5NmJiXHU1ZTJkXHU2MGRjXHU2MjFhXHU2NWE1XHU2NjE0XHU2NzkwXHU3N2YzXHU3YTRkXHU3''@;'; put 'put ''YzRkXHU3ZTNlXHU4MTBhXHU4Y2FjXHU4ZDY0XHU4ZGUxXHU4ZTVmXHU3OGE5XHU1MjA3XHU2MmQ5XHU2M2E1XHU2NDQyXHU2Mjk4XHU4YTJkXHU3YTgzXHU3YmMwXHU4YWFjXHU5NmVhXHU3ZDc2XHU4MjBjXHU4NzQ5XHU0ZWQ5XHU1MTQ4XHU1MzQzXHU1MzYwXHU1YmEzXHU1YzAyXHU1YzE2''@;'; put 'put ''XHU1ZGRkXHU2MjI2XHU2MjQ3XHU2NGIwXHU2ODEzXHU2ODM0XHU2Y2M5XHU2ZDQ1XHU2ZDE3XHU2N2QzXHU2ZjVjXHU3MTRlXHU3MTdkXHU2NWNiXHU3YTdmXHU3YmFkXHU3ZGRhXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTQ0XS5sZW5ndGg7KytnKTY1NTMzIT09''@;'; put 'put ''eVsxNDRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTQ0XVtnXV09MzY4NjQrZyxfWzM2ODY0K2ddPXlbMTQ0XVtnXSk7Zm9yKHlbMTQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZTRhXHU3ZmE4XHU4MTdhXHU4MjFiXHU4MjM5''@;'; put 'put ''XHU4NWE2XHU4YTZlXHU4Y2NlXHU4ZGY1XHU5MDc4XHU5MDc3XHU5MmFkXHU5MjkxXHU5NTgzXHU5YmFlXHU1MjRkXHU1NTg0XHU2ZjM4XHU3MTM2XHU1MTY4XHU3OTg1XHU3ZTU1XHU4MWIzXHU3Y2NlXHU1NjRjXHU1ODUxXHU1Y2E4XHU2M2FhXHU2NmZlXHU2NmZkXHU2OTVhXHU3MmQ5XHU3''@;'; put 'put ''NThmXHU3NThlXHU3OTBlXHU3OTU2XHU3OWRmXHU3Yzk3XHU3ZDIwXHU3ZDQ0XHU4NjA3XHU4YTM0XHU5NjNiXHU5MDYxXHU5ZjIwXHU1MGU3XHU1Mjc1XHU1M2NjXHU1M2UyXHU1MDA5XHU1NWFhXHU1OGVlXHU1OTRmXHU3MjNkXHU1YjhiXHU1YzY0XHU1MzFkXHU2MGUzXHU2MGYzXHU2MzVj''@;'; put 'put ''XHU2MzgzXHU2MzNmXHU2M2JiXHVmZmZkXHU2NGNkXHU2NWU5XHU2NmY5XHU1ZGUzXHU2OWNkXHU2OWZkXHU2ZjE1XHU3MWU1XHU0ZTg5XHU3NWU5XHU3NmY4XHU3YTkzXHU3Y2RmXHU3ZGNmXHU3ZDljXHU4MDYxXHU4MzQ5XHU4MzU4XHU4NDZjXHU4NGJjXHU4NWZiXHU4OGM1XHU4ZDcwXHU5''@;'; put 'put ''MDAxXHU5MDZkXHU5Mzk3XHU5NzFjXHU5YTEyXHU1MGNmXHU1ODk3XHU2MThlXHU4MWQzXHU4NTM1XHU4ZDA4XHU5MDIwXHU0ZmMzXHU1MDc0XHU1MjQ3XHU1MzczXHU2MDZmXHU2MzQ5XHU2NzVmXHU2ZTJjXHU4ZGIzXHU5MDFmXHU0ZmQ3XHU1YzVlXHU4Y2NhXHU2NWNmXHU3ZDlhXHU1MzUy''@;'; put 'put ''XHU4ODk2XHU1MTc2XHU2M2MzXHU1YjU4XHU1YjZiXHU1YzBhXHU2NDBkXHU2NzUxXHU5MDVjXHU0ZWQ2XHU1OTFhXHU1OTJhXHU2YzcwXHU4YTUxXHU1NTNlXHU1ODE1XHU1OWE1XHU2MGYwXHU2MjUzXHU2N2MxXHU4MjM1XHU2OTU1XHU5NjQwXHU5OWM0XHU5YTI4XHU0ZjUzXHU1ODA2XHU1''@;'; put 'put ''YmZlXHU4MDEwXHU1Y2IxXHU1ZTJmXHU1Zjg1XHU2MDIwXHU2MTRiXHU2MjM0XHU2NmZmXHU2Y2YwXHU2ZWRlXHU4MGNlXHU4MTdmXHU4MmQ0XHU4ODhiXHU4Y2I4XHU5MDAwXHU5MDJlXHU5NjhhXHU5ZWRiXHU5YmRiXHU0ZWUzXHU1M2YwXHU1OTI3XHU3YjJjXHU5MThkXHU5ODRjXHU5ZGY5''@;'; put 'put ''XHU2ZWRkXHU3MDI3XHU1MzUzXHU1NTQ0XHU1Yjg1XHU2MjU4XHU2MjllXHU2MmQzXHU2Y2EyXHU2ZmVmXHU3NDIyXHU4YTE3XHU5NDM4XHU2ZmMxXHU4YWZlXHU4MzM4XHU1MWU3XHU4NmY4XHU1M2VhXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTQ1XS5sZW5ndGg7''@;'; put 'put ''KytnKTY1NTMzIT09eVsxNDVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTQ1XVtnXV09MzcxMjArZyxfWzM3MTIwK2ddPXlbMTQ1XVtnXSk7Zm9yKHlbMTQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1M2U5XHU0ZjQ2XHU5MDU0''@;'; put 'put ''XHU4ZmIwXHU1OTZhXHU4MTMxXHU1ZGZkXHU3YWVhXHU4ZmJmXHU2OGRhXHU4YzM3XHU3MmY4XHU5YzQ4XHU2YTNkXHU4YWIwXHU0ZTM5XHU1MzU4XHU1NjA2XHU1NzY2XHU2MmM1XHU2M2EyXHU2NWU2XHU2YjRlXHU2ZGUxXHU2ZTViXHU3MGFkXHU3N2VkXHU3YWVmXHU3YmFhXHU3ZGJiXHU4''@;'; put 'put ''MDNkXHU4MGM2XHU4NmNiXHU4YTk1XHU5MzViXHU1NmUzXHU1OGM3XHU1ZjNlXHU2NWFkXHU2Njk2XHU2YTgwXHU2YmI1XHU3NTM3XHU4YWM3XHU1MDI0XHU3N2U1XHU1NzMwXHU1ZjFiXHU2MDY1XHU2NjdhXHU2YzYwXHU3NWY0XHU3YTFhXHU3ZjZlXHU4MWY0XHU4NzE4XHU5MDQ1XHU5OWIz''@;'; put 'put ''XHU3YmM5XHU3NTVjXHU3YWY5XHU3YjUxXHU4NGM0XHVmZmZkXHU5MDEwXHU3OWU5XHU3YTkyXHU4MzM2XHU1YWUxXHU3NzQwXHU0ZTJkXHU0ZWYyXHU1Yjk5XHU1ZmUwXHU2MmJkXHU2NjNjXHU2N2YxXHU2Y2U4XHU4NjZiXHU4ODc3XHU4YTNiXHU5MTRlXHU5MmYzXHU5OWQwXHU2YTE3XHU3''@;'; put 'put ''MDI2XHU3MzJhXHU4MmU3XHU4NDU3XHU4Y2FmXHU0ZTAxXHU1MTQ2XHU1MWNiXHU1NThiXHU1YmY1XHU1ZTE2XHU1ZTMzXHU1ZTgxXHU1ZjE0XHU1ZjM1XHU1ZjZiXHU1ZmI0XHU2MWYyXHU2MzExXHU2NmEyXHU2NzFkXHU2ZjZlXHU3MjUyXHU3NTNhXHU3NzNhXHU4MDc0XHU4MTM5XHU4MTc4''@;'; put 'put ''XHU4Nzc2XHU4YWJmXHU4YWRjXHU4ZDg1XHU4ZGYzXHU5MjlhXHU5NTc3XHU5ODAyXHU5Y2U1XHU1MmM1XHU2MzU3XHU3NmY0XHU2NzE1XHU2Yzg4XHU3M2NkXHU4Y2MzXHU5M2FlXHU5NjczXHU2ZDI1XHU1ODljXHU2OTBlXHU2OWNjXHU4ZmZkXHU5MzlhXHU3NWRiXHU5MDFhXHU1ODVhXHU2''@;'; put 'put ''ODAyXHU2M2I0XHU2OWZiXHU0ZjQzXHU2ZjJjXHU2N2Q4XHU4ZmJiXHU4NTI2XHU3ZGI0XHU5MzU0XHU2OTNmXHU2ZjcwXHU1NzZhXHU1OGY3XHU1YjJjXHU3ZDJjXHU3MjJhXHU1NDBhXHU5MWUzXHU5ZGI0XHU0ZWFkXHU0ZjRlXHU1MDVjXHU1MDc1XHU1MjQzXHU4YzllXHU1NDQ4XHU1ODI0''@;'; put 'put ''XHU1YjlhXHU1ZTFkXHU1ZTk1XHU1ZWFkXHU1ZWY3XHU1ZjFmXHU2MDhjXHU2MmI1XHU2MzNhXHU2M2QwXHU2OGFmXHU2YzQwXHU3ODg3XHU3OThlXHU3YTBiXHU3ZGUwXHU4MjQ3XHU4YTAyXHU4YWU2XHU4ZTQ0XHU5MDEzXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlb''@;'; put 'put ''MTQ2XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNDZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTQ2XVtnXV09MzczNzYrZyxfWzM3Mzc2K2ddPXlbMTQ2XVtnXSk7Zm9yKHlbMTQ3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MGI4''@;'; put 'put ''XHU5MTJkXHU5MWQ4XHU5ZjBlXHU2Y2U1XHU2NDU4XHU2NGUyXHU2NTc1XHU2ZWY0XHU3Njg0XHU3YjFiXHU5MDY5XHU5M2QxXHU2ZWJhXHU1NGYyXHU1ZmI5XHU2NGE0XHU4ZjRkXHU4ZmVkXHU5MjQ0XHU1MTc4XHU1ODZiXHU1OTI5XHU1YzU1XHU1ZTk3XHU2ZGZiXHU3ZThmXHU3NTFjXHU4''@;'; put 'put ''Y2JjXHU4ZWUyXHU5ODViXHU3MGI5XHU0ZjFkXHU2YmJmXHU2ZmIxXHU3NTMwXHU5NmZiXHU1MTRlXHU1NDEwXHU1ODM1XHU1ODU3XHU1OWFjXHU1YzYwXHU1ZjkyXHU2NTk3XHU2NzVjXHU2ZTIxXHU3NjdiXHU4M2RmXHU4Y2VkXHU5MDE0XHU5MGZkXHU5MzRkXHU3ODI1XHU3ODNhXHU1MmFh''@;'; put 'put ''XHU1ZWE2XHU1NzFmXHU1OTc0XHU2MDEyXHU1MDEyXHU1MTVhXHU1MWFjXHVmZmZkXHU1MWNkXHU1MjAwXHU1NTEwXHU1ODU0XHU1ODU4XHU1OTU3XHU1Yjk1XHU1Y2Y2XHU1ZDhiXHU2MGJjXHU2Mjk1XHU2NDJkXHU2NzcxXHU2ODQzXHU2OGJjXHU2OGRmXHU3NmQ3XHU2ZGQ4XHU2ZTZmXHU2''@;'; put 'put ''ZDliXHU3MDZmXHU3MWM4XHU1ZjUzXHU3NWQ4XHU3OTc3XHU3YjQ5XHU3YjU0XHU3YjUyXHU3Y2Q2XHU3ZDcxXHU1MjMwXHU4NDYzXHU4NTY5XHU4NWU0XHU4YTBlXHU4YjA0XHU4YzQ2XHU4ZTBmXHU5MDAzXHU5MDBmXHU5NDE5XHU5Njc2XHU5ODJkXHU5YTMwXHU5NWQ4XHU1MGNkXHU1MmQ1''@;'; put 'put ''XHU1NDBjXHU1ODAyXHU1YzBlXHU2MWE3XHU2NDllXHU2ZDFlXHU3N2IzXHU3YWU1XHU4MGY0XHU4NDA0XHU5MDUzXHU5Mjg1XHU1Y2UwXHU5ZDA3XHU1MzNmXHU1Zjk3XHU1ZmIzXHU2ZDljXHU3Mjc5XHU3NzYzXHU3OWJmXHU3YmU0XHU2YmQyXHU3MmVjXHU4YWFkXHU2ODAzXHU2YTYxXHU1''@;'; put 'put ''MWY4XHU3YTgxXHU2OTM0XHU1YzRhXHU5Y2Y2XHU4MmViXHU1YmM1XHU5MTQ5XHU3MDFlXHU1Njc4XHU1YzZmXHU2MGM3XHU2NTY2XHU2YzhjXHU4YzVhXHU5MDQxXHU5ODEzXHU1NDUxXHU2NmM3XHU5MjBkXHU1OTQ4XHU5MGEzXHU1MTg1XHU0ZTRkXHU1MWVhXHU4NTk5XHU4YjBlXHU3MDU4''@;'; put 'put ''XHU2MzdhXHU5MzRiXHU2OTYyXHU5OWI0XHU3ZTA0XHU3NTc3XHU1MzU3XHU2OTYwXHU4ZWRmXHU5NmUzXHU2YzVkXHU0ZThjXHU1YzNjXHU1ZjEwXHU4ZmU5XHU1MzAyXHU4Y2QxXHU4MDg5XHU4Njc5XHU1ZWZmXHU2NWU1XHU0ZTczXHU1MTY1XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgi''@;'; put 'put ''IiksZz0wO2chPXlbMTQ3XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNDddW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTQ3XVtnXV09Mzc2MzIrZyxfWzM3NjMyK2ddPXlbMTQ3XVtnXSk7Zm9yKHlbMTQ4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHU1OTgyXHU1YzNmXHU5N2VlXHU0ZWZiXHU1OThhXHU1ZmNkXHU4YThkXHU2ZmUxXHU3OWIwXHU3OTYyXHU1YmU3XHU4NDcxXHU3MzJiXHU3MWIxXHU1ZTc0XHU1ZmY1XHU2MzdiXHU2NDlhXHU3MWMzXHU3Yzk4XHU0ZTQzXHU1ZWZjXHU0ZTRiXHU1N2RjXHU1NmEyXHU2MGE5XHU2''@;'; put 'put ''ZmMzXHU3ZDBkXHU4MGZkXHU4MTMzXHU4MWJmXHU4ZmIyXHU4OTk3XHU4NmE0XHU1ZGY0XHU2MjhhXHU2NGFkXHU4OTg3XHU2Nzc3XHU2Y2UyXHU2ZDNlXHU3NDM2XHU3ODM0XHU1YTQ2XHU3Zjc1XHU4MmFkXHU5OWFjXHU0ZmYzXHU1ZWMzXHU2MmRkXHU2MzkyXHU2NTU3XHU2NzZmXHU3NmMz''@;'; put 'put ''XHU3MjRjXHU4MGNjXHU4MGJhXHU4ZjI5XHU5MTRkXHU1MDBkXHU1N2Y5XHU1YTkyXHU2ODg1XHVmZmZkXHU2OTczXHU3MTY0XHU3MmZkXHU4Y2I3XHU1OGYyXHU4Y2UwXHU5NjZhXHU5MDE5XHU4NzdmXHU3OWU0XHU3N2U3XHU4NDI5XHU0ZjJmXHU1MjY1XHU1MzVhXHU2MmNkXHU2N2NmXHU2''@;'; put 'put ''Y2NhXHU3NjdkXHU3Yjk0XHU3Yzk1XHU4MjM2XHU4NTg0XHU4ZmViXHU2NmRkXHU2ZjIwXHU3MjA2XHU3ZTFiXHU4M2FiXHU5OWMxXHU5ZWE2XHU1MWZkXHU3YmIxXHU3ODcyXHU3YmI4XHU4MDg3XHU3YjQ4XHU2YWU4XHU1ZTYxXHU4MDhjXHU3NTUxXHU3NTYwXHU1MTZiXHU5MjYyXHU2ZThj''@;'; put 'put ''XHU3NjdhXHU5MTk3XHU5YWVhXHU0ZjEwXHU3ZjcwXHU2MjljXHU3YjRmXHU5NWE1XHU5Y2U5XHU1NjdhXHU1ODU5XHU4NmU0XHU5NmJjXHU0ZjM0XHU1MjI0XHU1MzRhXHU1M2NkXHU1M2RiXHU1ZTA2XHU2NDJjXHU2NTkxXHU2NzdmXHU2YzNlXHU2YzRlXHU3MjQ4XHU3MmFmXHU3M2VkXHU3''@;'; put 'put ''NTU0XHU3ZTQxXHU4MjJjXHU4NWU5XHU4Y2E5XHU3YmM0XHU5MWM2XHU3MTY5XHU5ODEyXHU5OGVmXHU2MzNkXHU2NjY5XHU3NTZhXHU3NmU0XHU3OGQwXHU4NTQzXHU4NmVlXHU1MzJhXHU1MzUxXHU1NDI2XHU1OTgzXHU1ZTg3XHU1ZjdjXHU2MGIyXHU2MjQ5XHU2Mjc5XHU2MmFiXHU2NTkw''@;'; put 'put ''XHU2YmQ0XHU2Y2NjXHU3NWIyXHU3NmFlXHU3ODkxXHU3OWQ4XHU3ZGNiXHU3Zjc3XHU4MGE1XHU4OGFiXHU4YWI5XHU4Y2JiXHU5MDdmXHU5NzVlXHU5OGRiXHU2YTBiXHU3YzM4XHU1MDk5XHU1YzNlXHU1ZmFlXHU2Nzg3XHU2YmQ4XHU3NDM1XHU3NzA5XHU3ZjhlXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTQ4XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNDhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTQ4XVtnXV09Mzc4ODgrZyxfWzM3ODg4K2ddPXlbMTQ4XVtnXSk7Zm9yKHlbMTQ5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHU5ZjNiXHU2N2NhXHU3YTE3XHU1MzM5XHU3NThiXHU5YWVkXHU1ZjY2XHU4MTlkXHU4M2YxXHU4MDk4XHU1ZjNjXHU1ZmM1XHU3NTYyXHU3YjQ2XHU5MDNjXHU2ODY3XHU1OWViXHU1YTliXHU3ZDEwXHU3NjdlXHU4YjJjXHU0ZmY1XHU1ZjZhXHU2YTE5XHU2''@;'; put 'put ''YzM3XHU2ZjAyXHU3NGUyXHU3OTY4XHU4ODY4XHU4YTU1XHU4Yzc5XHU1ZWRmXHU2M2NmXHU3NWM1XHU3OWQyXHU4MmQ3XHU5MzI4XHU5MmYyXHU4NDljXHU4NmVkXHU5YzJkXHU1NGMxXHU1ZjZjXHU2NThjXHU2ZDVjXHU3MDE1XHU4Y2E3XHU4Y2QzXHU5ODNiXHU2NTRmXHU3NGY2XHU0ZTBk''@;'; put 'put ''XHU0ZWQ4XHU1N2UwXHU1OTJiXHU1YTY2XHU1YmNjXHU1MWE4XHU1ZTAzXHU1ZTljXHU2MDE2XHU2Mjc2XHU2NTc3XHVmZmZkXHU2NWE3XHU2NjZlXHU2ZDZlXHU3MjM2XHU3YjI2XHU4MTUwXHU4MTlhXHU4Mjk5XHU4YjVjXHU4Y2EwXHU4Y2U2XHU4ZDc0XHU5NjFjXHU5NjQ0XHU0ZmFlXHU2''@;'; put 'put ''NGFiXHU2YjY2XHU4MjFlXHU4NDYxXHU4NTZhXHU5MGU4XHU1YzAxXHU2OTUzXHU5OGE4XHU4NDdhXHU4NTU3XHU0ZjBmXHU1MjZmXHU1ZmE5XHU1ZTQ1XHU2NzBkXHU3OThmXHU4MTc5XHU4OTA3XHU4OTg2XHU2ZGY1XHU1ZjE3XHU2MjU1XHU2Y2I4XHU0ZWNmXHU3MjY5XHU5YjkyXHU1MjA2''@;'; put 'put ''XHU1NDNiXHU1Njc0XHU1OGIzXHU2MWE0XHU2MjZlXHU3MTFhXHU1OTZlXHU3Yzg5XHU3Y2RlXHU3ZDFiXHU5NmYwXHU2NTg3XHU4MDVlXHU0ZTE5XHU0Zjc1XHU1MTc1XHU1ODQwXHU1ZTYzXHU1ZTczXHU1ZjBhXHU2N2M0XHU0ZTI2XHU4NTNkXHU5NTg5XHU5NjViXHU3YzczXHU5ODAxXHU1''@;'; put 'put ''MGZiXHU1OGMxXHU3NjU2XHU3OGE3XHU1MjI1XHU3N2E1XHU4NTExXHU3Yjg2XHU1MDRmXHU1OTA5XHU3MjQ3XHU3YmM3XHU3ZGU4XHU4ZmJhXHU4ZmQ0XHU5MDRkXHU0ZmJmXHU1MmM5XHU1YTI5XHU1ZjAxXHU5N2FkXHU0ZmRkXHU4MjE3XHU5MmVhXHU1NzAzXHU2MzU1XHU2YjY5XHU3NTJi''@;'; put 'put ''XHU4OGRjXHU4ZjE0XHU3YTQyXHU1MmRmXHU1ODkzXHU2MTU1XHU2MjBhXHU2NmFlXHU2YmNkXHU3YzNmXHU4M2U5XHU1MDIzXHU0ZmY4XHU1MzA1XHU1NDQ2XHU1ODMxXHU1OTQ5XHU1YjlkXHU1Y2YwXHU1Y2VmXHU1ZDI5XHU1ZTk2XHU2MmIxXHU2MzY3XHU2NTNlXHU2NWI5XHU2NzBiXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTQ5XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNDldW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTQ5XVtnXV09MzgxNDQrZyxfWzM4MTQ0K2ddPXlbMTQ5XVtnXSk7Zm9yKHlbMTUwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2Y2Q1XHU2Y2UxXHU3MGY5XHU3ODMyXHU3ZTJiXHU4MGRlXHU4MmIzXHU4NDBjXHU4NGVjXHU4NzAyXHU4OTEyXHU4YTJhXHU4YzRhXHU5MGE2XHU5MmQyXHU5OGZkXHU5Y2YzXHU5ZDZjXHU0ZTRmXHU0ZWExXHU1MDhkXHU1MjU2XHU1''@;'; put 'put ''NzRhXHU1OWE4XHU1ZTNkXHU1ZmQ4XHU1ZmQ5XHU2MjNmXHU2NmI0XHU2NzFiXHU2N2QwXHU2OGQyXHU1MTkyXHU3ZDIxXHU4MGFhXHU4MWE4XHU4YjAwXHU4YzhjXHU4Y2JmXHU5MjdlXHU5NjMyXHU1NDIwXHU5ODJjXHU1MzE3XHU1MGQ1XHU1MzVjXHU1OGE4XHU2NGIyXHU2NzM0XHU3MjY3''@;'; put 'put ''XHU3NzY2XHU3YTQ2XHU5MWU2XHU1MmMzXHU2Y2ExXHU2Yjg2XHU1ODAwXHU1ZTRjXHU1OTU0XHU2NzJjXHU3ZmZiXHU1MWUxXHU3NmM2XHVmZmZkXHU2NDY5XHU3OGU4XHU5YjU0XHU5ZWJiXHU1N2NiXHU1OWI5XHU2NjI3XHU2NzlhXHU2YmNlXHU1NGU5XHU2OWQ5XHU1ZTU1XHU4MTljXHU2''@;'; put 'put ''Nzk1XHU5YmFhXHU2N2ZlXHU5YzUyXHU2ODVkXHU0ZWE2XHU0ZmUzXHU1M2M4XHU2MmI5XHU2NzJiXHU2Y2FiXHU4ZmM0XHU0ZmFkXHU3ZTZkXHU5ZWJmXHU0ZTA3XHU2MTYyXHU2ZTgwXHU2ZjJiXHU4NTEzXHU1NDczXHU2NzJhXHU5YjQ1XHU1ZGYzXHU3Yjk1XHU1Y2FjXHU1YmM2XHU4NzFj''@;'; put 'put ''XHU2ZTRhXHU4NGQxXHU3YTE0XHU4MTA4XHU1OTk5XHU3YzhkXHU2YzExXHU3NzIwXHU1MmQ5XHU1OTIyXHU3MTIxXHU3MjVmXHU3N2RiXHU5NzI3XHU5ZDYxXHU2OTBiXHU1YTdmXHU1YTE4XHU1MWE1XHU1NDBkXHU1NDdkXHU2NjBlXHU3NmRmXHU4ZmY3XHU5Mjk4XHU5Y2Y0XHU1OWVhXHU3''@;'; put 'put ''MjVkXHU2ZWM1XHU1MTRkXHU2OGM5XHU3ZGJmXHU3ZGVjXHU5NzYyXHU5ZWJhXHU2NDc4XHU2YTIxXHU4MzAyXHU1OTg0XHU1YjVmXHU2YmRiXHU3MzFiXHU3NmYyXHU3ZGIyXHU4MDE3XHU4NDk5XHU1MTMyXHU2NzI4XHU5ZWQ5XHU3NmVlXHU2NzYyXHU1MmZmXHU5OTA1XHU1YzI0XHU2MjNi''@;'; put 'put ''XHU3YzdlXHU4Y2IwXHU1NTRmXHU2MGI2XHU3ZDBiXHU5NTgwXHU1MzAxXHU0ZTVmXHU1MWI2XHU1OTFjXHU3MjNhXHU4MDM2XHU5MWNlXHU1ZjI1XHU3N2UyXHU1Mzg0XHU1Zjc5XHU3ZDA0XHU4NWFjXHU4YTMzXHU4ZThkXHU5NzU2XHU2N2YzXHU4NWFlXHU5NDUzXHU2MTA5XHU2MTA4XHU2''@;'; put 'put ''Y2I5XHU3NjUyXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTUwXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNTBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTUwXVtnXV09Mzg0MDArZyxfWzM4NDAwK2ddPXlbMTUwXVtnXSk7Zm9yKHlbMTUxXT0iXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YWVkXHU4ZjM4XHU1NTJmXHU0ZjUxXHU1MTJhXHU1MmM3XHU1M2NiXHU1YmE1XHU1ZTdkXHU2MGEwXHU2MTgyXHU2M2Q2XHU2NzA5XHU2N2RhXHU2ZTY3XHU2ZDhjXHU3MzM2XHU3MzM3XHU3NTMxXHU3OTUwXHU4''@;'; put 'put ''OGQ1XHU4YTk4XHU5MDRhXHU5MDkxXHU5MGY1XHU5NmM0XHU4NzhkXHU1OTE1XHU0ZTg4XHU0ZjU5XHU0ZTBlXHU4YTg5XHU4ZjNmXHU5ODEwXHU1MGFkXHU1ZTdjXHU1OTk2XHU1YmI5XHU1ZWI4XHU2M2RhXHU2M2ZhXHU2NGMxXHU2NmRjXHU2OTRhXHU2OWQ4XHU2ZDBiXHU2ZWI2XHU3MTk0''@;'; put 'put ''XHU3NTI4XHU3YWFmXHU3ZjhhXHU4MDAwXHU4NDQ5XHU4NGM5XHU4OTgxXHU4YjIxXHU4ZTBhXHU5MDY1XHU5NjdkXHU5OTBhXHU2MTdlXHU2MjkxXHU2YjMyXHVmZmZkXHU2YzgzXHU2ZDc0XHU3ZmNjXHU3ZmZjXHU2ZGMwXHU3Zjg1XHU4N2JhXHU4OGY4XHU2NzY1XHU4M2IxXHU5ODNjXHU5''@;'; put 'put ''NmY3XHU2ZDFiXHU3ZDYxXHU4NDNkXHU5MTZhXHU0ZTcxXHU1Mzc1XHU1ZDUwXHU2YjA0XHU2ZmViXHU4NWNkXHU4NjJkXHU4OWE3XHU1MjI5XHU1NDBmXHU1YzY1XHU2NzRlXHU2OGE4XHU3NDA2XHU3NDgzXHU3NWUyXHU4OGNmXHU4OGUxXHU5MWNjXHU5NmUyXHU5Njc4XHU1ZjhiXHU3Mzg3''@;'; put 'put ''XHU3YWNiXHU4NDRlXHU2M2EwXHU3NTY1XHU1Mjg5XHU2ZDQxXHU2ZTljXHU3NDA5XHU3NTU5XHU3ODZiXHU3YzkyXHU5Njg2XHU3YWRjXHU5ZjhkXHU0ZmI2XHU2MTZlXHU2NWM1XHU4NjVjXHU0ZTg2XHU0ZWFlXHU1MGRhXHU0ZTIxXHU1MWNjXHU1YmVlXHU2NTk5XHU2ODgxXHU2ZGJjXHU3''@;'; put 'put ''MzFmXHU3NjQyXHU3N2FkXHU3YTFjXHU3Y2U3XHU4MjZmXHU4YWQyXHU5MDdjXHU5MWNmXHU5Njc1XHU5ODE4XHU1MjliXHU3ZGQxXHU1MDJiXHU1Mzk4XHU2Nzk3XHU2ZGNiXHU3MWQwXHU3NDMzXHU4MWU4XHU4ZjJhXHU5NmEzXHU5YzU3XHU5ZTlmXHU3NDYwXHU1ODQxXHU2ZDk5XHU3ZDJm''@;'; put 'put ''XHU5ODVlXHU0ZWU0XHU0ZjM2XHU0ZjhiXHU1MWI3XHU1MmIxXHU1ZGJhXHU2MDFjXHU3M2IyXHU3OTNjXHU4MmQzXHU5MjM0XHU5NmI3XHU5NmY2XHU5NzBhXHU5ZTk3XHU5ZjYyXHU2NmE2XHU2Yjc0XHU1MjE3XHU1MmEzXHU3MGM4XHU4OGMyXHU1ZWM5XHU2MDRiXHU2MTkwXHU2ZjIzXHU3''@;'; put 'put ''MTQ5XHU3YzNlXHU3ZGY0XHU4MDZmXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTUxXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNTFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTUxXVtnXV09Mzg2NTYrZyxfWzM4NjU2K2ddPXlbMTUxXVtnXSk7Zm9yKHlbMTUyXT0i''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NGVlXHU5MDIzXHU5MzJjXHU1NDQyXHU5YjZmXHU2YWQzXHU3MDg5XHU4Y2MyXHU4ZGVmXHU5NzMyXHU1MmI0XHU1YTQxXHU1ZWNhXHU1ZjA0XHU2NzE3XHU2OTdjXHU2OTk0XHU2ZDZhXHU2''@;'; put 'put ''ZjBmXHU3MjYyXHU3MmZjXHU3YmVkXHU4MDAxXHU4MDdlXHU4NzRiXHU5MGNlXHU1MTZkXHU5ZTkzXHU3OTg0XHU4MDhiXHU5MzMyXHU4YWQ2XHU1MDJkXHU1NDhjXHU4YTcxXHU2YjZhXHU4Y2M0XHU4MTA3XHU2MGQxXHU2N2EwXHU5ZGYyXHU0ZTk5XHU0ZTk4XHU5YzEwXHU4YTZiXHU4NWMx''@;'; put 'put ''XHU4NTY4XHU2OTAwXHU2ZTdlXHU3ODk3XHU4MTU1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZjBjXHU0ZTEwXHU0ZTE1XHU0ZTJhXHU0ZTMxXHU0ZTM2''@;'; put 'put ''XHU0ZTNjXHU0ZTNmXHU0ZTQyXHU0ZTU2XHU0ZTU4XHU0ZTgyXHU0ZTg1XHU4YzZiXHU0ZThhXHU4MjEyXHU1ZjBkXHU0ZThlXHU0ZTllXHU0ZTlmXHU0ZWEwXHU0ZWEyXHU0ZWIwXHU0ZWIzXHU0ZWI2XHU0ZWNlXHU0ZWNkXHU0ZWM0XHU0ZWM2XHU0ZWMyXHU0ZWQ3XHU0ZWRlXHU0ZWVkXHU0''@;'; put 'put ''ZWRmXHU0ZWY3XHU0ZjA5XHU0ZjVhXHU0ZjMwXHU0ZjViXHU0ZjVkXHU0ZjU3XHU0ZjQ3XHU0Zjc2XHU0Zjg4XHU0ZjhmXHU0Zjk4XHU0ZjdiXHU0ZjY5XHU0ZjcwXHU0ZjkxXHU0ZjZmXHU0Zjg2XHU0Zjk2XHU1MTE4XHU0ZmQ0XHU0ZmRmXHU0ZmNlXHU0ZmQ4XHU0ZmRiXHU0ZmQxXHU0ZmRh''@;'; put 'put ''XHU0ZmQwXHU0ZmU0XHU0ZmU1XHU1MDFhXHU1MDI4XHU1MDE0XHU1MDJhXHU1MDI1XHU1MDA1XHU0ZjFjXHU0ZmY2XHU1MDIxXHU1MDI5XHU1MDJjXHU0ZmZlXHU0ZmVmXHU1MDExXHU1MDA2XHU1MDQzXHU1MDQ3XHU2NzAzXHU1MDU1XHU1MDUwXHU1MDQ4XHU1MDVhXHU1MDU2XHU1MDZjXHU1''@;'; put 'put ''MDc4XHU1MDgwXHU1MDlhXHU1MDg1XHU1MGI0XHU1MGIyXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTUyXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNTJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTUyXVtnXV09Mzg5MTIrZyxfWzM4OTEyK2ddPXlbMTUyXVtnXSk7''@;'; put 'put ''Zm9yKHlbMTUzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MGM5XHU1MGNhXHU1MGIzXHU1MGMyXHU1MGQ2XHU1MGRlXHU1MGU1XHU1MGVkXHU1MGUzXHU1MGVlXHU1MGY5XHU1MGY1XHU1MTA5XHU1MTAxXHU1MTAyXHU1MTE2XHU1''@;'; put 'put ''MTE1XHU1MTE0XHU1MTFhXHU1MTIxXHU1MTNhXHU1MTM3XHU1MTNjXHU1MTNiXHU1MTNmXHU1MTQwXHU1MTUyXHU1MTRjXHU1MTU0XHU1MTYyXHU3YWY4XHU1MTY5XHU1MTZhXHU1MTZlXHU1MTgwXHU1MTgyXHU1NmQ4XHU1MThjXHU1MTg5XHU1MThmXHU1MTkxXHU1MTkzXHU1MTk1XHU1MTk2''@;'; put 'put ''XHU1MWE0XHU1MWE2XHU1MWEyXHU1MWE5XHU1MWFhXHU1MWFiXHU1MWIzXHU1MWIxXHU1MWIyXHU1MWIwXHU1MWI1XHU1MWJkXHU1MWM1XHU1MWM5XHU1MWRiXHU1MWUwXHU4NjU1XHU1MWU5XHU1MWVkXHVmZmZkXHU1MWYwXHU1MWY1XHU1MWZlXHU1MjA0XHU1MjBiXHU1MjE0XHU1MjBlXHU1''@;'; put 'put ''MjI3XHU1MjJhXHU1MjJlXHU1MjMzXHU1MjM5XHU1MjRmXHU1MjQ0XHU1MjRiXHU1MjRjXHU1MjVlXHU1MjU0XHU1MjZhXHU1Mjc0XHU1MjY5XHU1MjczXHU1MjdmXHU1MjdkXHU1MjhkXHU1Mjk0XHU1MjkyXHU1MjcxXHU1Mjg4XHU1MjkxXHU4ZmE4XHU4ZmE3XHU1MmFjXHU1MmFkXHU1MmJj''@;'; put 'put ''XHU1MmI1XHU1MmMxXHU1MmNkXHU1MmQ3XHU1MmRlXHU1MmUzXHU1MmU2XHU5OGVkXHU1MmUwXHU1MmYzXHU1MmY1XHU1MmY4XHU1MmY5XHU1MzA2XHU1MzA4XHU3NTM4XHU1MzBkXHU1MzEwXHU1MzBmXHU1MzE1XHU1MzFhXHU1MzIzXHU1MzJmXHU1MzMxXHU1MzMzXHU1MzM4XHU1MzQwXHU1''@;'; put 'put ''MzQ2XHU1MzQ1XHU0ZTE3XHU1MzQ5XHU1MzRkXHU1MWQ2XHU1MzVlXHU1MzY5XHU1MzZlXHU1OTE4XHU1MzdiXHU1Mzc3XHU1MzgyXHU1Mzk2XHU1M2EwXHU1M2E2XHU1M2E1XHU1M2FlXHU1M2IwXHU1M2I2XHU1M2MzXHU3YzEyXHU5NmQ5XHU1M2RmXHU2NmZjXHU3MWVlXHU1M2VlXHU1M2U4''@;'; put 'put ''XHU1M2VkXHU1M2ZhXHU1NDAxXHU1NDNkXHU1NDQwXHU1NDJjXHU1NDJkXHU1NDNjXHU1NDJlXHU1NDM2XHU1NDI5XHU1NDFkXHU1NDRlXHU1NDhmXHU1NDc1XHU1NDhlXHU1NDVmXHU1NDcxXHU1NDc3XHU1NDcwXHU1NDkyXHU1NDdiXHU1NDgwXHU1NDc2XHU1NDg0XHU1NDkwXHU1NDg2XHU1''@;'; put 'put ''NGM3XHU1NGEyXHU1NGI4XHU1NGE1XHU1NGFjXHU1NGM0XHU1NGM4XHU1NGE4XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTUzXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNTNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTUzXVtnXV09MzkxNjgrZyxfWzM5MTY4K2dd''@;'; put 'put ''PXlbMTUzXVtnXSk7Zm9yKHlbMTU0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NGFiXHU1NGMyXHU1NGE0XHU1NGJlXHU1NGJjXHU1NGQ4XHU1NGU1XHU1NGU2XHU1NTBmXHU1NTE0XHU1NGZkXHU1NGVlXHU1NGVkXHU1NGZhXHU1''@;'; put 'put ''NGUyXHU1NTM5XHU1NTQwXHU1NTYzXHU1NTRjXHU1NTJlXHU1NTVjXHU1NTQ1XHU1NTU2XHU1NTU3XHU1NTM4XHU1NTMzXHU1NTVkXHU1NTk5XHU1NTgwXHU1NGFmXHU1NThhXHU1NTlmXHU1NTdiXHU1NTdlXHU1NTk4XHU1NTllXHU1NWFlXHU1NTdjXHU1NTgzXHU1NWE5XHU1NTg3XHU1NWE4''@;'; put 'put ''XHU1NWRhXHU1NWM1XHU1NWRmXHU1NWM0XHU1NWRjXHU1NWU0XHU1NWQ0XHU1NjE0XHU1NWY3XHU1NjE2XHU1NWZlXHU1NWZkXHU1NjFiXHU1NWY5XHU1NjRlXHU1NjUwXHU3MWRmXHU1NjM0XHU1NjM2XHU1NjMyXHU1NjM4XHVmZmZkXHU1NjZiXHU1NjY0XHU1NjJmXHU1NjZjXHU1NjZhXHU1''@;'; put 'put ''Njg2XHU1NjgwXHU1NjhhXHU1NmEwXHU1Njk0XHU1NjhmXHU1NmE1XHU1NmFlXHU1NmI2XHU1NmI0XHU1NmMyXHU1NmJjXHU1NmMxXHU1NmMzXHU1NmMwXHU1NmM4XHU1NmNlXHU1NmQxXHU1NmQzXHU1NmQ3XHU1NmVlXHU1NmY5XHU1NzAwXHU1NmZmXHU1NzA0XHU1NzA5XHU1NzA4XHU1NzBi''@;'; put 'put ''XHU1NzBkXHU1NzEzXHU1NzE4XHU1NzE2XHU1NWM3XHU1NzFjXHU1NzI2XHU1NzM3XHU1NzM4XHU1NzRlXHU1NzNiXHU1NzQwXHU1NzRmXHU1NzY5XHU1N2MwXHU1Nzg4XHU1NzYxXHU1NzdmXHU1Nzg5XHU1NzkzXHU1N2EwXHU1N2IzXHU1N2E0XHU1N2FhXHU1N2IwXHU1N2MzXHU1N2M2XHU1''@;'; put 'put ''N2Q0XHU1N2QyXHU1N2QzXHU1ODBhXHU1N2Q2XHU1N2UzXHU1ODBiXHU1ODE5XHU1ODFkXHU1ODcyXHU1ODIxXHU1ODYyXHU1ODRiXHU1ODcwXHU2YmMwXHU1ODUyXHU1ODNkXHU1ODc5XHU1ODg1XHU1OGI5XHU1ODlmXHU1OGFiXHU1OGJhXHU1OGRlXHU1OGJiXHU1OGI4XHU1OGFlXHU1OGM1''@;'; put 'put ''XHU1OGQzXHU1OGQxXHU1OGQ3XHU1OGQ5XHU1OGQ4XHU1OGU1XHU1OGRjXHU1OGU0XHU1OGRmXHU1OGVmXHU1OGZhXHU1OGY5XHU1OGZiXHU1OGZjXHU1OGZkXHU1OTAyXHU1OTBhXHU1OTEwXHU1OTFiXHU2OGE2XHU1OTI1XHU1OTJjXHU1OTJkXHU1OTMyXHU1OTM4XHU1OTNlXHU3YWQyXHU1''@;'; put 'put ''OTU1XHU1OTUwXHU1OTRlXHU1OTVhXHU1OTU4XHU1OTYyXHU1OTYwXHU1OTY3XHU1OTZjXHU1OTY5XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTU0XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNTRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTU0XVtnXV09Mzk0MjQr''@;'; put 'put ''ZyxfWzM5NDI0K2ddPXlbMTU0XVtnXSk7Zm9yKHlbMTU1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1OTc4XHU1OTgxXHU1OTlkXHU0ZjVlXHU0ZmFiXHU1OWEzXHU1OWIyXHU1OWM2XHU1OWU4XHU1OWRjXHU1OThkXHU1OWQ5XHU1''@;'; put 'put ''OWRhXHU1YTI1XHU1YTFmXHU1YTExXHU1YTFjXHU1YTA5XHU1YTFhXHU1YTQwXHU1YTZjXHU1YTQ5XHU1YTM1XHU1YTM2XHU1YTYyXHU1YTZhXHU1YTlhXHU1YWJjXHU1YWJlXHU1YWNiXHU1YWMyXHU1YWJkXHU1YWUzXHU1YWQ3XHU1YWU2XHU1YWU5XHU1YWQ2XHU1YWZhXHU1YWZiXHU1YjBj''@;'; put 'put ''XHU1YjBiXHU1YjE2XHU1YjMyXHU1YWQwXHU1YjJhXHU1YjM2XHU1YjNlXHU1YjQzXHU1YjQ1XHU1YjQwXHU1YjUxXHU1YjU1XHU1YjVhXHU1YjViXHU1YjY1XHU1YjY5XHU1YjcwXHU1YjczXHU1Yjc1XHU1Yjc4XHU2NTg4XHU1YjdhXHU1YjgwXHVmZmZkXHU1YjgzXHU1YmE2XHU1YmI4XHU1''@;'; put 'put ''YmMzXHU1YmM3XHU1YmM5XHU1YmQ0XHU1YmQwXHU1YmU0XHU1YmU2XHU1YmUyXHU1YmRlXHU1YmU1XHU1YmViXHU1YmYwXHU1YmY2XHU1YmYzXHU1YzA1XHU1YzA3XHU1YzA4XHU1YzBkXHU1YzEzXHU1YzIwXHU1YzIyXHU1YzI4XHU1YzM4XHU1YzM5XHU1YzQxXHU1YzQ2XHU1YzRlXHU1YzUz''@;'; put 'put ''XHU1YzUwXHU1YzRmXHU1YjcxXHU1YzZjXHU1YzZlXHU0ZTYyXHU1Yzc2XHU1Yzc5XHU1YzhjXHU1YzkxXHU1Yzk0XHU1OTliXHU1Y2FiXHU1Y2JiXHU1Y2I2XHU1Y2JjXHU1Y2I3XHU1Y2M1XHU1Y2JlXHU1Y2M3XHU1Y2Q5XHU1Y2U5XHU1Y2ZkXHU1Y2ZhXHU1Y2VkXHU1ZDhjXHU1Y2VhXHU1''@;'; put 'put ''ZDBiXHU1ZDE1XHU1ZDE3XHU1ZDVjXHU1ZDFmXHU1ZDFiXHU1ZDExXHU1ZDE0XHU1ZDIyXHU1ZDFhXHU1ZDE5XHU1ZDE4XHU1ZDRjXHU1ZDUyXHU1ZDRlXHU1ZDRiXHU1ZDZjXHU1ZDczXHU1ZDc2XHU1ZDg3XHU1ZDg0XHU1ZDgyXHU1ZGEyXHU1ZDlkXHU1ZGFjXHU1ZGFlXHU1ZGJkXHU1ZDkw''@;'; put 'put ''XHU1ZGI3XHU1ZGJjXHU1ZGM5XHU1ZGNkXHU1ZGQzXHU1ZGQyXHU1ZGQ2XHU1ZGRiXHU1ZGViXHU1ZGYyXHU1ZGY1XHU1ZTBiXHU1ZTFhXHU1ZTE5XHU1ZTExXHU1ZTFiXHU1ZTM2XHU1ZTM3XHU1ZTQ0XHU1ZTQzXHU1ZTQwXHU1ZTRlXHU1ZTU3XHU1ZTU0XHU1ZTVmXHU1ZTYyXHU1ZTY0XHU1''@;'; put 'put ''ZTQ3XHU1ZTc1XHU1ZTc2XHU1ZTdhXHU5ZWJjXHU1ZTdmXHU1ZWEwXHU1ZWMxXHU1ZWMyXHU1ZWM4XHU1ZWQwXHU1ZWNmXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTU1XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNTVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTU1''@;'; put 'put ''XVtnXV09Mzk2ODArZyxfWzM5NjgwK2ddPXlbMTU1XVtnXSk7Zm9yKHlbMTU2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZWQ2XHU1ZWUzXHU1ZWRkXHU1ZWRhXHU1ZWRiXHU1ZWUyXHU1ZWUxXHU1ZWU4XHU1ZWU5XHU1ZWVjXHU1''@;'; put 'put ''ZWYxXHU1ZWYzXHU1ZWYwXHU1ZWY0XHU1ZWY4XHU1ZWZlXHU1ZjAzXHU1ZjA5XHU1ZjVkXHU1ZjVjXHU1ZjBiXHU1ZjExXHU1ZjE2XHU1ZjI5XHU1ZjJkXHU1ZjM4XHU1ZjQxXHU1ZjQ4XHU1ZjRjXHU1ZjRlXHU1ZjJmXHU1ZjUxXHU1ZjU2XHU1ZjU3XHU1ZjU5XHU1ZjYxXHU1ZjZkXHU1Zjcz''@;'; put 'put ''XHU1Zjc3XHU1ZjgzXHU1ZjgyXHU1ZjdmXHU1ZjhhXHU1Zjg4XHU1ZjkxXHU1Zjg3XHU1ZjllXHU1Zjk5XHU1Zjk4XHU1ZmEwXHU1ZmE4XHU1ZmFkXHU1ZmJjXHU1ZmQ2XHU1ZmZiXHU1ZmU0XHU1ZmY4XHU1ZmYxXHU1ZmRkXHU2MGIzXHU1ZmZmXHU2MDIxXHU2MDYwXHVmZmZkXHU2MDE5XHU2''@;'; put 'put ''MDEwXHU2MDI5XHU2MDBlXHU2MDMxXHU2MDFiXHU2MDE1XHU2MDJiXHU2MDI2XHU2MDBmXHU2MDNhXHU2MDVhXHU2MDQxXHU2MDZhXHU2MDc3XHU2MDVmXHU2MDRhXHU2MDQ2XHU2MDRkXHU2MDYzXHU2MDQzXHU2MDY0XHU2MDQyXHU2MDZjXHU2MDZiXHU2MDU5XHU2MDgxXHU2MDhkXHU2MGU3''@;'; put 'put ''XHU2MDgzXHU2MDlhXHU2MDg0XHU2MDliXHU2MDk2XHU2MDk3XHU2MDkyXHU2MGE3XHU2MDhiXHU2MGUxXHU2MGI4XHU2MGUwXHU2MGQzXHU2MGI0XHU1ZmYwXHU2MGJkXHU2MGM2XHU2MGI1XHU2MGQ4XHU2MTRkXHU2MTE1XHU2MTA2XHU2MGY2XHU2MGY3XHU2MTAwXHU2MGY0XHU2MGZhXHU2''@;'; put 'put ''MTAzXHU2MTIxXHU2MGZiXHU2MGYxXHU2MTBkXHU2MTBlXHU2MTQ3XHU2MTNlXHU2MTI4XHU2MTI3XHU2MTRhXHU2MTNmXHU2MTNjXHU2MTJjXHU2MTM0XHU2MTNkXHU2MTQyXHU2MTQ0XHU2MTczXHU2MTc3XHU2MTU4XHU2MTU5XHU2MTVhXHU2MTZiXHU2MTc0XHU2MTZmXHU2MTY1XHU2MTcx''@;'; put 'put ''XHU2MTVmXHU2MTVkXHU2MTUzXHU2MTc1XHU2MTk5XHU2MTk2XHU2MTg3XHU2MWFjXHU2MTk0XHU2MTlhXHU2MThhXHU2MTkxXHU2MWFiXHU2MWFlXHU2MWNjXHU2MWNhXHU2MWM5XHU2MWY3XHU2MWM4XHU2MWMzXHU2MWM2XHU2MWJhXHU2MWNiXHU3Zjc5XHU2MWNkXHU2MWU2XHU2MWUzXHU2''@;'; put 'put ''MWY2XHU2MWZhXHU2MWY0XHU2MWZmXHU2MWZkXHU2MWZjXHU2MWZlXHU2MjAwXHU2MjA4XHU2MjA5XHU2MjBkXHU2MjBjXHU2MjE0XHU2MjFiXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTU2XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNTZdW2ddLmNoYXJDb2RlQXQo''@;'; put 'put ''MCkmJihJW3lbMTU2XVtnXV09Mzk5MzYrZyxfWzM5OTM2K2ddPXlbMTU2XVtnXSk7Zm9yKHlbMTU3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MjFlXHU2MjIxXHU2MjJhXHU2MjJlXHU2MjMwXHU2MjMyXHU2MjMzXHU2MjQxXHU2''@;'; put 'put ''MjRlXHU2MjVlXHU2MjYzXHU2MjViXHU2MjYwXHU2MjY4XHU2MjdjXHU2MjgyXHU2Mjg5XHU2MjdlXHU2MjkyXHU2MjkzXHU2Mjk2XHU2MmQ0XHU2MjgzXHU2Mjk0XHU2MmQ3XHU2MmQxXHU2MmJiXHU2MmNmXHU2MmZmXHU2MmM2XHU2NGQ0XHU2MmM4XHU2MmRjXHU2MmNjXHU2MmNhXHU2MmMy''@;'; put 'put ''XHU2MmM3XHU2MjliXHU2MmM5XHU2MzBjXHU2MmVlXHU2MmYxXHU2MzI3XHU2MzAyXHU2MzA4XHU2MmVmXHU2MmY1XHU2MzUwXHU2MzNlXHU2MzRkXHU2NDFjXHU2MzRmXHU2Mzk2XHU2MzhlXHU2MzgwXHU2M2FiXHU2Mzc2XHU2M2EzXHU2MzhmXHU2Mzg5XHU2MzlmXHU2M2I1XHU2MzZiXHVm''@;'; put 'put ''ZmZkXHU2MzY5XHU2M2JlXHU2M2U5XHU2M2MwXHU2M2M2XHU2M2UzXHU2M2M5XHU2M2QyXHU2M2Y2XHU2M2M0XHU2NDE2XHU2NDM0XHU2NDA2XHU2NDEzXHU2NDI2XHU2NDM2XHU2NTFkXHU2NDE3XHU2NDI4XHU2NDBmXHU2NDY3XHU2NDZmXHU2NDc2XHU2NDRlXHU2NTJhXHU2NDk1XHU2NDkz''@;'; put 'put ''XHU2NGE1XHU2NGE5XHU2NDg4XHU2NGJjXHU2NGRhXHU2NGQyXHU2NGM1XHU2NGM3XHU2NGJiXHU2NGQ4XHU2NGMyXHU2NGYxXHU2NGU3XHU4MjA5XHU2NGUwXHU2NGUxXHU2MmFjXHU2NGUzXHU2NGVmXHU2NTJjXHU2NGY2XHU2NGY0XHU2NGYyXHU2NGZhXHU2NTAwXHU2NGZkXHU2NTE4XHU2''@;'; put 'put ''NTFjXHU2NTA1XHU2NTI0XHU2NTIzXHU2NTJiXHU2NTM0XHU2NTM1XHU2NTM3XHU2NTM2XHU2NTM4XHU3NTRiXHU2NTQ4XHU2NTU2XHU2NTU1XHU2NTRkXHU2NTU4XHU2NTVlXHU2NTVkXHU2NTcyXHU2NTc4XHU2NTgyXHU2NTgzXHU4YjhhXHU2NTliXHU2NTlmXHU2NWFiXHU2NWI3XHU2NWMz''@;'; put 'put ''XHU2NWM2XHU2NWMxXHU2NWM0XHU2NWNjXHU2NWQyXHU2NWRiXHU2NWQ5XHU2NWUwXHU2NWUxXHU2NWYxXHU2NzcyXHU2NjBhXHU2NjAzXHU2NWZiXHU2NzczXHU2NjM1XHU2NjM2XHU2NjM0XHU2NjFjXHU2NjRmXHU2NjQ0XHU2NjQ5XHU2NjQxXHU2NjVlXHU2NjVkXHU2NjY0XHU2NjY3XHU2''@;'; put 'put ''NjY4XHU2NjVmXHU2NjYyXHU2NjcwXHU2NjgzXHU2Njg4XHU2NjhlXHU2Njg5XHU2Njg0XHU2Njk4XHU2NjlkXHU2NmMxXHU2NmI5XHU2NmM5XHU2NmJlXHU2NmJjXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTU3XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNTddW2dd''@;'; put 'put ''LmNoYXJDb2RlQXQoMCkmJihJW3lbMTU3XVtnXV09NDAxOTIrZyxfWzQwMTkyK2ddPXlbMTU3XVtnXSk7Zm9yKHlbMTU4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NmM0XHU2NmI4XHU2NmQ2XHU2NmRhXHU2NmUwXHU2NjNmXHU2''@;'; put 'put ''NmU2XHU2NmU5XHU2NmYwXHU2NmY1XHU2NmY3XHU2NzBmXHU2NzE2XHU2NzFlXHU2NzI2XHU2NzI3XHU5NzM4XHU2NzJlXHU2NzNmXHU2NzM2XHU2NzQxXHU2NzM4XHU2NzM3XHU2NzQ2XHU2NzVlXHU2NzYwXHU2NzU5XHU2NzYzXHU2NzY0XHU2Nzg5XHU2NzcwXHU2N2E5XHU2NzdjXHU2NzZh''@;'; put 'put ''XHU2NzhjXHU2NzhiXHU2N2E2XHU2N2ExXHU2Nzg1XHU2N2I3XHU2N2VmXHU2N2I0XHU2N2VjXHU2N2IzXHU2N2U5XHU2N2I4XHU2N2U0XHU2N2RlXHU2N2RkXHU2N2UyXHU2N2VlXHU2N2I5XHU2N2NlXHU2N2M2XHU2N2U3XHU2YTljXHU2ODFlXHU2ODQ2XHU2ODI5XHU2ODQwXHU2ODRkXHU2''@;'; put 'put ''ODMyXHU2ODRlXHVmZmZkXHU2OGIzXHU2ODJiXHU2ODU5XHU2ODYzXHU2ODc3XHU2ODdmXHU2ODlmXHU2ODhmXHU2OGFkXHU2ODk0XHU2ODlkXHU2ODliXHU2ODgzXHU2YWFlXHU2OGI5XHU2ODc0XHU2OGI1XHU2OGEwXHU2OGJhXHU2OTBmXHU2ODhkXHU2ODdlXHU2OTAxXHU2OGNhXHU2OTA4''@;'; put 'put ''XHU2OGQ4XHU2OTIyXHU2OTI2XHU2OGUxXHU2OTBjXHU2OGNkXHU2OGQ0XHU2OGU3XHU2OGQ1XHU2OTM2XHU2OTEyXHU2OTA0XHU2OGQ3XHU2OGUzXHU2OTI1XHU2OGY5XHU2OGUwXHU2OGVmXHU2OTI4XHU2OTJhXHU2OTFhXHU2OTIzXHU2OTIxXHU2OGM2XHU2OTc5XHU2OTc3XHU2OTVjXHU2''@;'; put 'put ''OTc4XHU2OTZiXHU2OTU0XHU2OTdlXHU2OTZlXHU2OTM5XHU2OTc0XHU2OTNkXHU2OTU5XHU2OTMwXHU2OTYxXHU2OTVlXHU2OTVkXHU2OTgxXHU2OTZhXHU2OWIyXHU2OWFlXHU2OWQwXHU2OWJmXHU2OWMxXHU2OWQzXHU2OWJlXHU2OWNlXHU1YmU4XHU2OWNhXHU2OWRkXHU2OWJiXHU2OWMz''@;'; put 'put ''XHU2OWE3XHU2YTJlXHU2OTkxXHU2OWEwXHU2OTljXHU2OTk1XHU2OWI0XHU2OWRlXHU2OWU4XHU2YTAyXHU2YTFiXHU2OWZmXHU2YjBhXHU2OWY5XHU2OWYyXHU2OWU3XHU2YTA1XHU2OWIxXHU2YTFlXHU2OWVkXHU2YTE0XHU2OWViXHU2YTBhXHU2YTEyXHU2YWMxXHU2YTIzXHU2YTEzXHU2''@;'; put 'put ''YTQ0XHU2YTBjXHU2YTcyXHU2YTM2XHU2YTc4XHU2YTQ3XHU2YTYyXHU2YTU5XHU2YTY2XHU2YTQ4XHU2YTM4XHU2YTIyXHU2YTkwXHU2YThkXHU2YWEwXHU2YTg0XHU2YWEyXHU2YWEzXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTU4XS5sZW5ndGg7KytnKTY1NTMz''@;'; put 'put ''IT09eVsxNThdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTU4XVtnXV09NDA0NDgrZyxfWzQwNDQ4K2ddPXlbMTU4XVtnXSk7Zm9yKHlbMTU5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YTk3XHU4NjE3XHU2YWJiXHU2YWMzXHU2''@;'; put 'put ''YWMyXHU2YWI4XHU2YWIzXHU2YWFjXHU2YWRlXHU2YWQxXHU2YWRmXHU2YWFhXHU2YWRhXHU2YWVhXHU2YWZiXHU2YjA1XHU4NjE2XHU2YWZhXHU2YjEyXHU2YjE2XHU5YjMxXHU2YjFmXHU2YjM4XHU2YjM3XHU3NmRjXHU2YjM5XHU5OGVlXHU2YjQ3XHU2YjQzXHU2YjQ5XHU2YjUwXHU2YjU5''@;'; put 'put ''XHU2YjU0XHU2YjViXHU2YjVmXHU2YjYxXHU2Yjc4XHU2Yjc5XHU2YjdmXHU2YjgwXHU2Yjg0XHU2YjgzXHU2YjhkXHU2Yjk4XHU2Yjk1XHU2YjllXHU2YmE0XHU2YmFhXHU2YmFiXHU2YmFmXHU2YmIyXHU2YmIxXHU2YmIzXHU2YmI3XHU2YmJjXHU2YmM2XHU2YmNiXHU2YmQzXHU2YmRmXHU2''@;'; put 'put ''YmVjXHU2YmViXHU2YmYzXHU2YmVmXHVmZmZkXHU5ZWJlXHU2YzA4XHU2YzEzXHU2YzE0XHU2YzFiXHU2YzI0XHU2YzIzXHU2YzVlXHU2YzU1XHU2YzYyXHU2YzZhXHU2YzgyXHU2YzhkXHU2YzlhXHU2YzgxXHU2YzliXHU2YzdlXHU2YzY4XHU2YzczXHU2YzkyXHU2YzkwXHU2Y2M0XHU2Y2Yx''@;'; put 'put ''XHU2Y2QzXHU2Y2JkXHU2Y2Q3XHU2Y2M1XHU2Y2RkXHU2Y2FlXHU2Y2IxXHU2Y2JlXHU2Y2JhXHU2Y2RiXHU2Y2VmXHU2Y2Q5XHU2Y2VhXHU2ZDFmXHU4ODRkXHU2ZDM2XHU2ZDJiXHU2ZDNkXHU2ZDM4XHU2ZDE5XHU2ZDM1XHU2ZDMzXHU2ZDEyXHU2ZDBjXHU2ZDYzXHU2ZDkzXHU2ZDY0XHU2''@;'; put 'put ''ZDVhXHU2ZDc5XHU2ZDU5XHU2ZDhlXHU2ZDk1XHU2ZmU0XHU2ZDg1XHU2ZGY5XHU2ZTE1XHU2ZTBhXHU2ZGI1XHU2ZGM3XHU2ZGU2XHU2ZGI4XHU2ZGM2XHU2ZGVjXHU2ZGRlXHU2ZGNjXHU2ZGU4XHU2ZGQyXHU2ZGM1XHU2ZGZhXHU2ZGQ5XHU2ZGU0XHU2ZGQ1XHU2ZGVhXHU2ZGVlXHU2ZTJk''@;'; put 'put ''XHU2ZTZlXHU2ZTJlXHU2ZTE5XHU2ZTcyXHU2ZTVmXHU2ZTNlXHU2ZTIzXHU2ZTZiXHU2ZTJiXHU2ZTc2XHU2ZTRkXHU2ZTFmXHU2ZTQzXHU2ZTNhXHU2ZTRlXHU2ZTI0XHU2ZWZmXHU2ZTFkXHU2ZTM4XHU2ZTgyXHU2ZWFhXHU2ZTk4XHU2ZWM5XHU2ZWI3XHU2ZWQzXHU2ZWJkXHU2ZWFmXHU2''@;'; put 'put ''ZWM0XHU2ZWIyXHU2ZWQ0XHU2ZWQ1XHU2ZThmXHU2ZWE1XHU2ZWMyXHU2ZTlmXHU2ZjQxXHU2ZjExXHU3MDRjXHU2ZWVjXHU2ZWY4XHU2ZWZlXHU2ZjNmXHU2ZWYyXHU2ZjMxXHU2ZWVmXHU2ZjMyXHU2ZWNjXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTU5XS5sZW5n''@;'; put 'put ''dGg7KytnKTY1NTMzIT09eVsxNTldW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTU5XVtnXV09NDA3MDQrZyxfWzQwNzA0K2ddPXlbMTU5XVtnXSk7Zm9yKHlbMjI0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZjNlXHU2ZjEzXHU2''@;'; put 'put ''ZWY3XHU2Zjg2XHU2ZjdhXHU2Zjc4XHU2ZjgxXHU2ZjgwXHU2ZjZmXHU2ZjViXHU2ZmYzXHU2ZjZkXHU2ZjgyXHU2ZjdjXHU2ZjU4XHU2ZjhlXHU2ZjkxXHU2ZmMyXHU2ZjY2XHU2ZmIzXHU2ZmEzXHU2ZmExXHU2ZmE0XHU2ZmI5XHU2ZmM2XHU2ZmFhXHU2ZmRmXHU2ZmQ1XHU2ZmVjXHU2ZmQ0''@;'; put 'put ''XHU2ZmQ4XHU2ZmYxXHU2ZmVlXHU2ZmRiXHU3MDA5XHU3MDBiXHU2ZmZhXHU3MDExXHU3MDAxXHU3MDBmXHU2ZmZlXHU3MDFiXHU3MDFhXHU2Zjc0XHU3MDFkXHU3MDE4XHU3MDFmXHU3MDMwXHU3MDNlXHU3MDMyXHU3MDUxXHU3MDYzXHU3MDk5XHU3MDkyXHU3MGFmXHU3MGYxXHU3MGFjXHU3''@;'; put 'put ''MGI4XHU3MGIzXHU3MGFlXHU3MGRmXHU3MGNiXHU3MGRkXHVmZmZkXHU3MGQ5XHU3MTA5XHU3MGZkXHU3MTFjXHU3MTE5XHU3MTY1XHU3MTU1XHU3MTg4XHU3MTY2XHU3MTYyXHU3MTRjXHU3MTU2XHU3MTZjXHU3MThmXHU3MWZiXHU3MTg0XHU3MTk1XHU3MWE4XHU3MWFjXHU3MWQ3XHU3MWI5''@;'; put 'put ''XHU3MWJlXHU3MWQyXHU3MWM5XHU3MWQ0XHU3MWNlXHU3MWUwXHU3MWVjXHU3MWU3XHU3MWY1XHU3MWZjXHU3MWY5XHU3MWZmXHU3MjBkXHU3MjEwXHU3MjFiXHU3MjI4XHU3MjJkXHU3MjJjXHU3MjMwXHU3MjMyXHU3MjNiXHU3MjNjXHU3MjNmXHU3MjQwXHU3MjQ2XHU3MjRiXHU3MjU4XHU3''@;'; put 'put ''Mjc0XHU3MjdlXHU3MjgyXHU3MjgxXHU3Mjg3XHU3MjkyXHU3Mjk2XHU3MmEyXHU3MmE3XHU3MmI5XHU3MmIyXHU3MmMzXHU3MmM2XHU3MmM0XHU3MmNlXHU3MmQyXHU3MmUyXHU3MmUwXHU3MmUxXHU3MmY5XHU3MmY3XHU1MDBmXHU3MzE3XHU3MzBhXHU3MzFjXHU3MzE2XHU3MzFkXHU3MzM0''@;'; put 'put ''XHU3MzJmXHU3MzI5XHU3MzI1XHU3MzNlXHU3MzRlXHU3MzRmXHU5ZWQ4XHU3MzU3XHU3MzZhXHU3MzY4XHU3MzcwXHU3Mzc4XHU3Mzc1XHU3MzdiXHU3MzdhXHU3M2M4XHU3M2IzXHU3M2NlXHU3M2JiXHU3M2MwXHU3M2U1XHU3M2VlXHU3M2RlXHU3NGEyXHU3NDA1XHU3NDZmXHU3NDI1XHU3''@;'; put 'put ''M2Y4XHU3NDMyXHU3NDNhXHU3NDU1XHU3NDNmXHU3NDVmXHU3NDU5XHU3NDQxXHU3NDVjXHU3NDY5XHU3NDcwXHU3NDYzXHU3NDZhXHU3NDc2XHU3NDdlXHU3NDhiXHU3NDllXHU3NGE3XHU3NGNhXHU3NGNmXHU3NGQ0XHU3M2YxXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2ch''@;'; put 'put ''PXlbMjI0XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMjRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjI0XVtnXV09NTczNDQrZyxfWzU3MzQ0K2ddPXlbMjI0XVtnXSk7Zm9yKHlbMjI1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3''@;'; put 'put ''NGUwXHU3NGUzXHU3NGU3XHU3NGU5XHU3NGVlXHU3NGYyXHU3NGYwXHU3NGYxXHU3NGY4XHU3NGY3XHU3NTA0XHU3NTAzXHU3NTA1XHU3NTBjXHU3NTBlXHU3NTBkXHU3NTE1XHU3NTEzXHU3NTFlXHU3NTI2XHU3NTJjXHU3NTNjXHU3NTQ0XHU3NTRkXHU3NTRhXHU3NTQ5XHU3NTViXHU3NTQ2''@;'; put 'put ''XHU3NTVhXHU3NTY5XHU3NTY0XHU3NTY3XHU3NTZiXHU3NTZkXHU3NTc4XHU3NTc2XHU3NTg2XHU3NTg3XHU3NTc0XHU3NThhXHU3NTg5XHU3NTgyXHU3NTk0XHU3NTlhXHU3NTlkXHU3NWE1XHU3NWEzXHU3NWMyXHU3NWIzXHU3NWMzXHU3NWI1XHU3NWJkXHU3NWI4XHU3NWJjXHU3NWIxXHU3''@;'; put 'put ''NWNkXHU3NWNhXHU3NWQyXHU3NWQ5XHU3NWUzXHU3NWRlXHU3NWZlXHU3NWZmXHVmZmZkXHU3NWZjXHU3NjAxXHU3NWYwXHU3NWZhXHU3NWYyXHU3NWYzXHU3NjBiXHU3NjBkXHU3NjA5XHU3NjFmXHU3NjI3XHU3NjIwXHU3NjIxXHU3NjIyXHU3NjI0XHU3NjM0XHU3NjMwXHU3NjNiXHU3NjQ3''@;'; put 'put ''XHU3NjQ4XHU3NjQ2XHU3NjVjXHU3NjU4XHU3NjYxXHU3NjYyXHU3NjY4XHU3NjY5XHU3NjZhXHU3NjY3XHU3NjZjXHU3NjcwXHU3NjcyXHU3Njc2XHU3Njc4XHU3NjdjXHU3NjgwXHU3NjgzXHU3Njg4XHU3NjhiXHU3NjhlXHU3Njk2XHU3NjkzXHU3Njk5XHU3NjlhXHU3NmIwXHU3NmI0XHU3''@;'; put 'put ''NmI4XHU3NmI5XHU3NmJhXHU3NmMyXHU3NmNkXHU3NmQ2XHU3NmQyXHU3NmRlXHU3NmUxXHU3NmU1XHU3NmU3XHU3NmVhXHU4NjJmXHU3NmZiXHU3NzA4XHU3NzA3XHU3NzA0XHU3NzI5XHU3NzI0XHU3NzFlXHU3NzI1XHU3NzI2XHU3NzFiXHU3NzM3XHU3NzM4XHU3NzQ3XHU3NzVhXHU3NzY4''@;'; put 'put ''XHU3NzZiXHU3NzViXHU3NzY1XHU3NzdmXHU3NzdlXHU3Nzc5XHU3NzhlXHU3NzhiXHU3NzkxXHU3N2EwXHU3NzllXHU3N2IwXHU3N2I2XHU3N2I5XHU3N2JmXHU3N2JjXHU3N2JkXHU3N2JiXHU3N2M3XHU3N2NkXHU3N2Q3XHU3N2RhXHU3N2RjXHU3N2UzXHU3N2VlXHU3N2ZjXHU3ODBjXHU3''@;'; put 'put ''ODEyXHU3OTI2XHU3ODIwXHU3OTJhXHU3ODQ1XHU3ODhlXHU3ODc0XHU3ODg2XHU3ODdjXHU3ODlhXHU3ODhjXHU3OGEzXHU3OGI1XHU3OGFhXHU3OGFmXHU3OGQxXHU3OGM2XHU3OGNiXHU3OGQ0XHU3OGJlXHU3OGJjXHU3OGM1XHU3OGNhXHU3OGVjXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxp''@;'; put 'put ''dCgiIiksZz0wO2chPXlbMjI1XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMjVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjI1XVtnXV09NTc2MDArZyxfWzU3NjAwK2ddPXlbMjI1XVtnXSk7Zm9yKHlbMjI2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHU3OGU3XHU3OGRhXHU3OGZkXHU3OGY0XHU3OTA3XHU3OTEyXHU3OTExXHU3OTE5XHU3OTJjXHU3OTJiXHU3OTQwXHU3OTYwXHU3OTU3XHU3OTVmXHU3OTVhXHU3OTU1XHU3OTUzXHU3OTdhXHU3OTdmXHU3OThhXHU3OTlkXHU3OWE3XHU5ZjRiXHU3OWFhXHU3OWFlXHU3OWIz''@;'; put 'put ''XHU3OWI5XHU3OWJhXHU3OWM5XHU3OWQ1XHU3OWU3XHU3OWVjXHU3OWUxXHU3OWUzXHU3YTA4XHU3YTBkXHU3YTE4XHU3YTE5XHU3YTIwXHU3YTFmXHU3OTgwXHU3YTMxXHU3YTNiXHU3YTNlXHU3YTM3XHU3YTQzXHU3YTU3XHU3YTQ5XHU3YTYxXHU3YTYyXHU3YTY5XHU5ZjlkXHU3YTcwXHU3''@;'; put 'put ''YTc5XHU3YTdkXHU3YTg4XHU3YTk3XHU3YTk1XHU3YTk4XHU3YTk2XHU3YWE5XHU3YWM4XHU3YWIwXHVmZmZkXHU3YWI2XHU3YWM1XHU3YWM0XHU3YWJmXHU5MDgzXHU3YWM3XHU3YWNhXHU3YWNkXHU3YWNmXHU3YWQ1XHU3YWQzXHU3YWQ5XHU3YWRhXHU3YWRkXHU3YWUxXHU3YWUyXHU3YWU2''@;'; put 'put ''XHU3YWVkXHU3YWYwXHU3YjAyXHU3YjBmXHU3YjBhXHU3YjA2XHU3YjMzXHU3YjE4XHU3YjE5XHU3YjFlXHU3YjM1XHU3YjI4XHU3YjM2XHU3YjUwXHU3YjdhXHU3YjA0XHU3YjRkXHU3YjBiXHU3YjRjXHU3YjQ1XHU3Yjc1XHU3YjY1XHU3Yjc0XHU3YjY3XHU3YjcwXHU3YjcxXHU3YjZjXHU3''@;'; put 'put ''YjZlXHU3YjlkXHU3Yjk4XHU3YjlmXHU3YjhkXHU3YjljXHU3YjlhXHU3YjhiXHU3YjkyXHU3YjhmXHU3YjVkXHU3Yjk5XHU3YmNiXHU3YmMxXHU3YmNjXHU3YmNmXHU3YmI0XHU3YmM2XHU3YmRkXHU3YmU5XHU3YzExXHU3YzE0XHU3YmU2XHU3YmU1XHU3YzYwXHU3YzAwXHU3YzA3XHU3YzEz''@;'; put 'put ''XHU3YmYzXHU3YmY3XHU3YzE3XHU3YzBkXHU3YmY2XHU3YzIzXHU3YzI3XHU3YzJhXHU3YzFmXHU3YzM3XHU3YzJiXHU3YzNkXHU3YzRjXHU3YzQzXHU3YzU0XHU3YzRmXHU3YzQwXHU3YzUwXHU3YzU4XHU3YzVmXHU3YzY0XHU3YzU2XHU3YzY1XHU3YzZjXHU3Yzc1XHU3YzgzXHU3YzkwXHU3''@;'; put 'put ''Y2E0XHU3Y2FkXHU3Y2EyXHU3Y2FiXHU3Y2ExXHU3Y2E4XHU3Y2IzXHU3Y2IyXHU3Y2IxXHU3Y2FlXHU3Y2I5XHU3Y2JkXHU3Y2MwXHU3Y2M1XHU3Y2MyXHU3Y2Q4XHU3Y2QyXHU3Y2RjXHU3Y2UyXHU5YjNiXHU3Y2VmXHU3Y2YyXHU3Y2Y0XHU3Y2Y2XHU3Y2ZhXHU3ZDA2XHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjI2XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMjZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjI2XVtnXV09NTc4NTYrZyxfWzU3ODU2K2ddPXlbMjI2XVtnXSk7Zm9yKHlbMjI3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZDAyXHU3ZDFjXHU3ZDE1XHU3ZDBhXHU3ZDQ1XHU3ZDRiXHU3ZDJlXHU3ZDMyXHU3ZDNmXHU3ZDM1XHU3ZDQ2XHU3ZDczXHU3ZDU2XHU3ZDRlXHU3ZDcyXHU3ZDY4XHU3ZDZlXHU3ZDRmXHU3ZDYzXHU3ZDkzXHU3ZDg5XHU3ZDViXHU3ZDhmXHU3ZDdk''@;'; put 'put ''XHU3ZDliXHU3ZGJhXHU3ZGFlXHU3ZGEzXHU3ZGI1XHU3ZGM3XHU3ZGJkXHU3ZGFiXHU3ZTNkXHU3ZGEyXHU3ZGFmXHU3ZGRjXHU3ZGI4XHU3ZDlmXHU3ZGIwXHU3ZGQ4XHU3ZGRkXHU3ZGU0XHU3ZGRlXHU3ZGZiXHU3ZGYyXHU3ZGUxXHU3ZTA1XHU3ZTBhXHU3ZTIzXHU3ZTIxXHU3ZTEyXHU3''@;'; put 'put ''ZTMxXHU3ZTFmXHU3ZTA5XHU3ZTBiXHU3ZTIyXHU3ZTQ2XHU3ZTY2XHU3ZTNiXHU3ZTM1XHU3ZTM5XHU3ZTQzXHU3ZTM3XHVmZmZkXHU3ZTMyXHU3ZTNhXHU3ZTY3XHU3ZTVkXHU3ZTU2XHU3ZTVlXHU3ZTU5XHU3ZTVhXHU3ZTc5XHU3ZTZhXHU3ZTY5XHU3ZTdjXHU3ZTdiXHU3ZTgzXHU3ZGQ1''@;'; put 'put ''XHU3ZTdkXHU4ZmFlXHU3ZTdmXHU3ZTg4XHU3ZTg5XHU3ZThjXHU3ZTkyXHU3ZTkwXHU3ZTkzXHU3ZTk0XHU3ZTk2XHU3ZThlXHU3ZTliXHU3ZTljXHU3ZjM4XHU3ZjNhXHU3ZjQ1XHU3ZjRjXHU3ZjRkXHU3ZjRlXHU3ZjUwXHU3ZjUxXHU3ZjU1XHU3ZjU0XHU3ZjU4XHU3ZjVmXHU3ZjYwXHU3''@;'; put 'put ''ZjY4XHU3ZjY5XHU3ZjY3XHU3Zjc4XHU3ZjgyXHU3Zjg2XHU3ZjgzXHU3Zjg4XHU3Zjg3XHU3ZjhjXHU3Zjk0XHU3ZjllXHU3ZjlkXHU3ZjlhXHU3ZmEzXHU3ZmFmXHU3ZmIyXHU3ZmI5XHU3ZmFlXHU3ZmI2XHU3ZmI4XHU4YjcxXHU3ZmM1XHU3ZmM2XHU3ZmNhXHU3ZmQ1XHU3ZmQ0XHU3ZmUx''@;'; put 'put ''XHU3ZmU2XHU3ZmU5XHU3ZmYzXHU3ZmY5XHU5OGRjXHU4MDA2XHU4MDA0XHU4MDBiXHU4MDEyXHU4MDE4XHU4MDE5XHU4MDFjXHU4MDIxXHU4MDI4XHU4MDNmXHU4MDNiXHU4MDRhXHU4MDQ2XHU4MDUyXHU4MDU4XHU4MDVhXHU4MDVmXHU4MDYyXHU4MDY4XHU4MDczXHU4MDcyXHU4MDcwXHU4''@;'; put 'put ''MDc2XHU4MDc5XHU4MDdkXHU4MDdmXHU4MDg0XHU4MDg2XHU4MDg1XHU4MDliXHU4MDkzXHU4MDlhXHU4MGFkXHU1MTkwXHU4MGFjXHU4MGRiXHU4MGU1XHU4MGQ5XHU4MGRkXHU4MGM0XHU4MGRhXHU4MGQ2XHU4MTA5XHU4MGVmXHU4MGYxXHU4MTFiXHU4MTI5XHU4MTIzXHU4MTJmXHU4MTRi''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjI3XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMjddW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjI3XVtnXV09NTgxMTIrZyxfWzU4MTEyK2ddPXlbMjI3XVtnXSk7Zm9yKHlbMjI4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NjhiXHU4MTQ2XHU4MTNlXHU4MTUzXHU4MTUxXHU4MGZjXHU4MTcxXHU4MTZlXHU4MTY1XHU4MTY2XHU4MTc0XHU4MTgzXHU4MTg4XHU4MThhXHU4MTgwXHU4MTgyXHU4MWEwXHU4MTk1XHU4MWE0XHU4MWEzXHU4MTVmXHU4MTkz''@;'; put 'put ''XHU4MWE5XHU4MWIwXHU4MWI1XHU4MWJlXHU4MWI4XHU4MWJkXHU4MWMwXHU4MWMyXHU4MWJhXHU4MWM5XHU4MWNkXHU4MWQxXHU4MWQ5XHU4MWQ4XHU4MWM4XHU4MWRhXHU4MWRmXHU4MWUwXHU4MWU3XHU4MWZhXHU4MWZiXHU4MWZlXHU4MjAxXHU4MjAyXHU4MjA1XHU4MjA3XHU4MjBhXHU4''@;'; put 'put ''MjBkXHU4MjEwXHU4MjE2XHU4MjI5XHU4MjJiXHU4MjM4XHU4MjMzXHU4MjQwXHU4MjU5XHU4MjU4XHU4MjVkXHU4MjVhXHU4MjVmXHU4MjY0XHVmZmZkXHU4MjYyXHU4MjY4XHU4MjZhXHU4MjZiXHU4MjJlXHU4MjcxXHU4Mjc3XHU4Mjc4XHU4MjdlXHU4MjhkXHU4MjkyXHU4MmFiXHU4Mjlm''@;'; put 'put ''XHU4MmJiXHU4MmFjXHU4MmUxXHU4MmUzXHU4MmRmXHU4MmQyXHU4MmY0XHU4MmYzXHU4MmZhXHU4MzkzXHU4MzAzXHU4MmZiXHU4MmY5XHU4MmRlXHU4MzA2XHU4MmRjXHU4MzA5XHU4MmQ5XHU4MzM1XHU4MzM0XHU4MzE2XHU4MzMyXHU4MzMxXHU4MzQwXHU4MzM5XHU4MzUwXHU4MzQ1XHU4''@;'; put 'put ''MzJmXHU4MzJiXHU4MzE3XHU4MzE4XHU4Mzg1XHU4MzlhXHU4M2FhXHU4MzlmXHU4M2EyXHU4Mzk2XHU4MzIzXHU4MzhlXHU4Mzg3XHU4MzhhXHU4MzdjXHU4M2I1XHU4MzczXHU4Mzc1XHU4M2EwXHU4Mzg5XHU4M2E4XHU4M2Y0XHU4NDEzXHU4M2ViXHU4M2NlXHU4M2ZkXHU4NDAzXHU4M2Q4''@;'; put 'put ''XHU4NDBiXHU4M2MxXHU4M2Y3XHU4NDA3XHU4M2UwXHU4M2YyXHU4NDBkXHU4NDIyXHU4NDIwXHU4M2JkXHU4NDM4XHU4NTA2XHU4M2ZiXHU4NDZkXHU4NDJhXHU4NDNjXHU4NTVhXHU4NDg0XHU4NDc3XHU4NDZiXHU4NGFkXHU4NDZlXHU4NDgyXHU4NDY5XHU4NDQ2XHU4NDJjXHU4NDZmXHU4''@;'; put 'put ''NDc5XHU4NDM1XHU4NGNhXHU4NDYyXHU4NGI5XHU4NGJmXHU4NDlmXHU4NGQ5XHU4NGNkXHU4NGJiXHU4NGRhXHU4NGQwXHU4NGMxXHU4NGM2XHU4NGQ2XHU4NGExXHU4NTIxXHU4NGZmXHU4NGY0XHU4NTE3XHU4NTE4XHU4NTJjXHU4NTFmXHU4NTE1XHU4NTE0XHU4NGZjXHU4NTQwXHU4NTYz''@;'; put 'put ''XHU4NTU4XHU4NTQ4XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjI4XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMjhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjI4XVtnXV09NTgzNjgrZyxfWzU4MzY4K2ddPXlbMjI4XVtnXSk7Zm9yKHlbMjI5XT0iXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTQxXHU4NjAyXHU4NTRiXHU4NTU1XHU4NTgwXHU4NWE0XHU4NTg4XHU4NTkxXHU4NThhXHU4NWE4XHU4NTZkXHU4NTk0XHU4NTliXHU4NWVhXHU4NTg3XHU4NTljXHU4NTc3XHU4NTdlXHU4NTkwXHU4NWM5''@;'; put 'put ''XHU4NWJhXHU4NWNmXHU4NWI5XHU4NWQwXHU4NWQ1XHU4NWRkXHU4NWU1XHU4NWRjXHU4NWY5XHU4NjBhXHU4NjEzXHU4NjBiXHU4NWZlXHU4NWZhXHU4NjA2XHU4NjIyXHU4NjFhXHU4NjMwXHU4NjNmXHU4NjRkXHU0ZTU1XHU4NjU0XHU4NjVmXHU4NjY3XHU4NjcxXHU4NjkzXHU4NmEzXHU4''@;'; put 'put ''NmE5XHU4NmFhXHU4NjhiXHU4NjhjXHU4NmI2XHU4NmFmXHU4NmM0XHU4NmM2XHU4NmIwXHU4NmM5XHU4ODIzXHU4NmFiXHU4NmQ0XHU4NmRlXHU4NmU5XHU4NmVjXHVmZmZkXHU4NmRmXHU4NmRiXHU4NmVmXHU4NzEyXHU4NzA2XHU4NzA4XHU4NzAwXHU4NzAzXHU4NmZiXHU4NzExXHU4NzA5''@;'; put 'put ''XHU4NzBkXHU4NmY5XHU4NzBhXHU4NzM0XHU4NzNmXHU4NzM3XHU4NzNiXHU4NzI1XHU4NzI5XHU4NzFhXHU4NzYwXHU4NzVmXHU4Nzc4XHU4NzRjXHU4NzRlXHU4Nzc0XHU4NzU3XHU4NzY4XHU4NzZlXHU4NzU5XHU4NzUzXHU4NzYzXHU4NzZhXHU4ODA1XHU4N2EyXHU4NzlmXHU4NzgyXHU4''@;'; put 'put ''N2FmXHU4N2NiXHU4N2JkXHU4N2MwXHU4N2QwXHU5NmQ2XHU4N2FiXHU4N2M0XHU4N2IzXHU4N2M3XHU4N2M2XHU4N2JiXHU4N2VmXHU4N2YyXHU4N2UwXHU4ODBmXHU4ODBkXHU4N2ZlXHU4N2Y2XHU4N2Y3XHU4ODBlXHU4N2QyXHU4ODExXHU4ODE2XHU4ODE1XHU4ODIyXHU4ODIxXHU4ODMx''@;'; put 'put ''XHU4ODM2XHU4ODM5XHU4ODI3XHU4ODNiXHU4ODQ0XHU4ODQyXHU4ODUyXHU4ODU5XHU4ODVlXHU4ODYyXHU4ODZiXHU4ODgxXHU4ODdlXHU4ODllXHU4ODc1XHU4ODdkXHU4OGI1XHU4ODcyXHU4ODgyXHU4ODk3XHU4ODkyXHU4OGFlXHU4ODk5XHU4OGEyXHU4ODhkXHU4OGE0XHU4OGIwXHU4''@;'; put 'put ''OGJmXHU4OGIxXHU4OGMzXHU4OGM0XHU4OGQ0XHU4OGQ4XHU4OGQ5XHU4OGRkXHU4OGY5XHU4OTAyXHU4OGZjXHU4OGY0XHU4OGU4XHU4OGYyXHU4OTA0XHU4OTBjXHU4OTBhXHU4OTEzXHU4OTQzXHU4OTFlXHU4OTI1XHU4OTJhXHU4OTJiXHU4OTQxXHU4OTQ0XHU4OTNiXHU4OTM2XHU4OTM4''@;'; put 'put ''XHU4OTRjXHU4OTFkXHU4OTYwXHU4OTVlXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjI5XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMjldW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjI5XVtnXV09NTg2MjQrZyxfWzU4NjI0K2ddPXlbMjI5XVtnXSk7Zm9yKHlbMjMw''@;'; put 'put ''XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OTY2XHU4OTY0XHU4OTZkXHU4OTZhXHU4OTZmXHU4OTc0XHU4OTc3XHU4OTdlXHU4OTgzXHU4OTg4XHU4OThhXHU4OTkzXHU4OTk4XHU4OWExXHU4OWE5XHU4OWE2XHU4OWFjXHU4OWFm''@;'; put 'put ''XHU4OWIyXHU4OWJhXHU4OWJkXHU4OWJmXHU4OWMwXHU4OWRhXHU4OWRjXHU4OWRkXHU4OWU3XHU4OWY0XHU4OWY4XHU4YTAzXHU4YTE2XHU4YTEwXHU4YTBjXHU4YTFiXHU4YTFkXHU4YTI1XHU4YTM2XHU4YTQxXHU4YTViXHU4YTUyXHU4YTQ2XHU4YTQ4XHU4YTdjXHU4YTZkXHU4YTZjXHU4''@;'; put 'put ''YTYyXHU4YTg1XHU4YTgyXHU4YTg0XHU4YWE4XHU4YWExXHU4YTkxXHU4YWE1XHU4YWE2XHU4YTlhXHU4YWEzXHU4YWM0XHU4YWNkXHU4YWMyXHU4YWRhXHU4YWViXHU4YWYzXHU4YWU3XHVmZmZkXHU4YWU0XHU4YWYxXHU4YjE0XHU4YWUwXHU4YWUyXHU4YWY3XHU4YWRlXHU4YWRiXHU4YjBj''@;'; put 'put ''XHU4YjA3XHU4YjFhXHU4YWUxXHU4YjE2XHU4YjEwXHU4YjE3XHU4YjIwXHU4YjMzXHU5N2FiXHU4YjI2XHU4YjJiXHU4YjNlXHU4YjI4XHU4YjQxXHU4YjRjXHU4YjRmXHU4YjRlXHU4YjQ5XHU4YjU2XHU4YjViXHU4YjVhXHU4YjZiXHU4YjVmXHU4YjZjXHU4YjZmXHU4Yjc0XHU4YjdkXHU4''@;'; put 'put ''YjgwXHU4YjhjXHU4YjhlXHU4YjkyXHU4YjkzXHU4Yjk2XHU4Yjk5XHU4YjlhXHU4YzNhXHU4YzQxXHU4YzNmXHU4YzQ4XHU4YzRjXHU4YzRlXHU4YzUwXHU4YzU1XHU4YzYyXHU4YzZjXHU4Yzc4XHU4YzdhXHU4YzgyXHU4Yzg5XHU4Yzg1XHU4YzhhXHU4YzhkXHU4YzhlXHU4Yzk0XHU4Yzdj''@;'; put 'put ''XHU4Yzk4XHU2MjFkXHU4Y2FkXHU4Y2FhXHU4Y2JkXHU4Y2IyXHU4Y2IzXHU4Y2FlXHU4Y2I2XHU4Y2M4XHU4Y2MxXHU4Y2U0XHU4Y2UzXHU4Y2RhXHU4Y2ZkXHU4Y2ZhXHU4Y2ZiXHU4ZDA0XHU4ZDA1XHU4ZDBhXHU4ZDA3XHU4ZDBmXHU4ZDBkXHU4ZDEwXHU5ZjRlXHU4ZDEzXHU4Y2NkXHU4''@;'; put 'put ''ZDE0XHU4ZDE2XHU4ZDY3XHU4ZDZkXHU4ZDcxXHU4ZDczXHU4ZDgxXHU4ZDk5XHU4ZGMyXHU4ZGJlXHU4ZGJhXHU4ZGNmXHU4ZGRhXHU4ZGQ2XHU4ZGNjXHU4ZGRiXHU4ZGNiXHU4ZGVhXHU4ZGViXHU4ZGRmXHU4ZGUzXHU4ZGZjXHU4ZTA4XHU4ZTA5XHU4ZGZmXHU4ZTFkXHU4ZTFlXHU4ZTEw''@;'; put 'put ''XHU4ZTFmXHU4ZTQyXHU4ZTM1XHU4ZTMwXHU4ZTM0XHU4ZTRhXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjMwXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMzBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjMwXVtnXV09NTg4ODArZyxfWzU4ODgwK2ddPXlbMjMwXVtn''@;'; put 'put ''XSk7Zm9yKHlbMjMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZTQ3XHU4ZTQ5XHU4ZTRjXHU4ZTUwXHU4ZTQ4XHU4ZTU5XHU4ZTY0XHU4ZTYwXHU4ZTJhXHU4ZTYzXHU4ZTU1XHU4ZTc2XHU4ZTcyXHU4ZTdjXHU4ZTgxXHU4ZTg3''@;'; put 'put ''XHU4ZTg1XHU4ZTg0XHU4ZThiXHU4ZThhXHU4ZTkzXHU4ZTkxXHU4ZTk0XHU4ZTk5XHU4ZWFhXHU4ZWExXHU4ZWFjXHU4ZWIwXHU4ZWM2XHU4ZWIxXHU4ZWJlXHU4ZWM1XHU4ZWM4XHU4ZWNiXHU4ZWRiXHU4ZWUzXHU4ZWZjXHU4ZWZiXHU4ZWViXHU4ZWZlXHU4ZjBhXHU4ZjA1XHU4ZjE1XHU4''@;'; put 'put ''ZjEyXHU4ZjE5XHU4ZjEzXHU4ZjFjXHU4ZjFmXHU4ZjFiXHU4ZjBjXHU4ZjI2XHU4ZjMzXHU4ZjNiXHU4ZjM5XHU4ZjQ1XHU4ZjQyXHU4ZjNlXHU4ZjRjXHU4ZjQ5XHU4ZjQ2XHU4ZjRlXHU4ZjU3XHU4ZjVjXHVmZmZkXHU4ZjYyXHU4ZjYzXHU4ZjY0XHU4ZjljXHU4ZjlmXHU4ZmEzXHU4ZmFk''@;'; put 'put ''XHU4ZmFmXHU4ZmI3XHU4ZmRhXHU4ZmU1XHU4ZmUyXHU4ZmVhXHU4ZmVmXHU5MDg3XHU4ZmY0XHU5MDA1XHU4ZmY5XHU4ZmZhXHU5MDExXHU5MDE1XHU5MDIxXHU5MDBkXHU5MDFlXHU5MDE2XHU5MDBiXHU5MDI3XHU5MDM2XHU5MDM1XHU5MDM5XHU4ZmY4XHU5MDRmXHU5MDUwXHU5MDUxXHU5''@;'; put 'put ''MDUyXHU5MDBlXHU5MDQ5XHU5MDNlXHU5MDU2XHU5MDU4XHU5MDVlXHU5MDY4XHU5MDZmXHU5MDc2XHU5NmE4XHU5MDcyXHU5MDgyXHU5MDdkXHU5MDgxXHU5MDgwXHU5MDhhXHU5MDg5XHU5MDhmXHU5MGE4XHU5MGFmXHU5MGIxXHU5MGI1XHU5MGUyXHU5MGU0XHU2MjQ4XHU5MGRiXHU5MTAy''@;'; put 'put ''XHU5MTEyXHU5MTE5XHU5MTMyXHU5MTMwXHU5MTRhXHU5MTU2XHU5MTU4XHU5MTYzXHU5MTY1XHU5MTY5XHU5MTczXHU5MTcyXHU5MThiXHU5MTg5XHU5MTgyXHU5MWEyXHU5MWFiXHU5MWFmXHU5MWFhXHU5MWI1XHU5MWI0XHU5MWJhXHU5MWMwXHU5MWMxXHU5MWM5XHU5MWNiXHU5MWQwXHU5''@;'; put 'put ''MWQ2XHU5MWRmXHU5MWUxXHU5MWRiXHU5MWZjXHU5MWY1XHU5MWY2XHU5MjFlXHU5MWZmXHU5MjE0XHU5MjJjXHU5MjE1XHU5MjExXHU5MjVlXHU5MjU3XHU5MjQ1XHU5MjQ5XHU5MjY0XHU5MjQ4XHU5Mjk1XHU5MjNmXHU5MjRiXHU5MjUwXHU5MjljXHU5Mjk2XHU5MjkzXHU5MjliXHU5MjVh''@;'; put 'put ''XHU5MmNmXHU5MmI5XHU5MmI3XHU5MmU5XHU5MzBmXHU5MmZhXHU5MzQ0XHU5MzJlXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjMxXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMzFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjMxXVtnXV09NTkxMzYrZyxfWzU5MTM2''@;'; put 'put ''K2ddPXlbMjMxXVtnXSk7Zm9yKHlbMjMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MzE5XHU5MzIyXHU5MzFhXHU5MzIzXHU5MzNhXHU5MzM1XHU5MzNiXHU5MzVjXHU5MzYwXHU5MzdjXHU5MzZlXHU5MzU2XHU5M2IwXHU5M2Fj''@;'; put 'put ''XHU5M2FkXHU5Mzk0XHU5M2I5XHU5M2Q2XHU5M2Q3XHU5M2U4XHU5M2U1XHU5M2Q4XHU5M2MzXHU5M2RkXHU5M2QwXHU5M2M4XHU5M2U0XHU5NDFhXHU5NDE0XHU5NDEzXHU5NDAzXHU5NDA3XHU5NDEwXHU5NDM2XHU5NDJiXHU5NDM1XHU5NDIxXHU5NDNhXHU5NDQxXHU5NDUyXHU5NDQ0XHU5''@;'; put 'put ''NDViXHU5NDYwXHU5NDYyXHU5NDVlXHU5NDZhXHU5MjI5XHU5NDcwXHU5NDc1XHU5NDc3XHU5NDdkXHU5NDVhXHU5NDdjXHU5NDdlXHU5NDgxXHU5NDdmXHU5NTgyXHU5NTg3XHU5NThhXHU5NTk0XHU5NTk2XHU5NTk4XHU5NTk5XHVmZmZkXHU5NWEwXHU5NWE4XHU5NWE3XHU5NWFkXHU5NWJj''@;'; put 'put ''XHU5NWJiXHU5NWI5XHU5NWJlXHU5NWNhXHU2ZmY2XHU5NWMzXHU5NWNkXHU5NWNjXHU5NWQ1XHU5NWQ0XHU5NWQ2XHU5NWRjXHU5NWUxXHU5NWU1XHU5NWUyXHU5NjIxXHU5NjI4XHU5NjJlXHU5NjJmXHU5NjQyXHU5NjRjXHU5NjRmXHU5NjRiXHU5Njc3XHU5NjVjXHU5NjVlXHU5NjVkXHU5''@;'; put 'put ''NjVmXHU5NjY2XHU5NjcyXHU5NjZjXHU5NjhkXHU5Njk4XHU5Njk1XHU5Njk3XHU5NmFhXHU5NmE3XHU5NmIxXHU5NmIyXHU5NmIwXHU5NmI0XHU5NmI2XHU5NmI4XHU5NmI5XHU5NmNlXHU5NmNiXHU5NmM5XHU5NmNkXHU4OTRkXHU5NmRjXHU5NzBkXHU5NmQ1XHU5NmY5XHU5NzA0XHU5NzA2''@;'; put 'put ''XHU5NzA4XHU5NzEzXHU5NzBlXHU5NzExXHU5NzBmXHU5NzE2XHU5NzE5XHU5NzI0XHU5NzJhXHU5NzMwXHU5NzM5XHU5NzNkXHU5NzNlXHU5NzQ0XHU5NzQ2XHU5NzQ4XHU5NzQyXHU5NzQ5XHU5NzVjXHU5NzYwXHU5NzY0XHU5NzY2XHU5NzY4XHU1MmQyXHU5NzZiXHU5NzcxXHU5Nzc5XHU5''@;'; put 'put ''Nzg1XHU5NzdjXHU5NzgxXHU5NzdhXHU5Nzg2XHU5NzhiXHU5NzhmXHU5NzkwXHU5NzljXHU5N2E4XHU5N2E2XHU5N2EzXHU5N2IzXHU5N2I0XHU5N2MzXHU5N2M2XHU5N2M4XHU5N2NiXHU5N2RjXHU5N2VkXHU5ZjRmXHU5N2YyXHU3YWRmXHU5N2Y2XHU5N2Y1XHU5ODBmXHU5ODBjXHU5ODM4''@;'; put 'put ''XHU5ODI0XHU5ODIxXHU5ODM3XHU5ODNkXHU5ODQ2XHU5ODRmXHU5ODRiXHU5ODZiXHU5ODZmXHU5ODcwXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjMyXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMzJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjMyXVtnXV09NTkz''@;'; put 'put ''OTIrZyxfWzU5MzkyK2ddPXlbMjMyXVtnXSk7Zm9yKHlbMjMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ODcxXHU5ODc0XHU5ODczXHU5OGFhXHU5OGFmXHU5OGIxXHU5OGI2XHU5OGM0XHU5OGMzXHU5OGM2XHU5OGU5XHU5OGVi''@;'; put 'put ''XHU5OTAzXHU5OTA5XHU5OTEyXHU5OTE0XHU5OTE4XHU5OTIxXHU5OTFkXHU5OTFlXHU5OTI0XHU5OTIwXHU5OTJjXHU5OTJlXHU5OTNkXHU5OTNlXHU5OTQyXHU5OTQ5XHU5OTQ1XHU5OTUwXHU5OTRiXHU5OTUxXHU5OTUyXHU5OTRjXHU5OTU1XHU5OTk3XHU5OTk4XHU5OWE1XHU5OWFkXHU5''@;'; put 'put ''OWFlXHU5OWJjXHU5OWRmXHU5OWRiXHU5OWRkXHU5OWQ4XHU5OWQxXHU5OWVkXHU5OWVlXHU5OWYxXHU5OWYyXHU5OWZiXHU5OWY4XHU5YTAxXHU5YTBmXHU5YTA1XHU5OWUyXHU5YTE5XHU5YTJiXHU5YTM3XHU5YTQ1XHU5YTQyXHU5YTQwXHU5YTQzXHVmZmZkXHU5YTNlXHU5YTU1XHU5YTRk''@;'; put 'put ''XHU5YTViXHU5YTU3XHU5YTVmXHU5YTYyXHU5YTY1XHU5YTY0XHU5YTY5XHU5YTZiXHU5YTZhXHU5YWFkXHU5YWIwXHU5YWJjXHU5YWMwXHU5YWNmXHU5YWQxXHU5YWQzXHU5YWQ0XHU5YWRlXHU5YWRmXHU5YWUyXHU5YWUzXHU5YWU2XHU5YWVmXHU5YWViXHU5YWVlXHU5YWY0XHU5YWYxXHU5''@;'; put 'put ''YWY3XHU5YWZiXHU5YjA2XHU5YjE4XHU5YjFhXHU5YjFmXHU5YjIyXHU5YjIzXHU5YjI1XHU5YjI3XHU5YjI4XHU5YjI5XHU5YjJhXHU5YjJlXHU5YjJmXHU5YjMyXHU5YjQ0XHU5YjQzXHU5YjRmXHU5YjRkXHU5YjRlXHU5YjUxXHU5YjU4XHU5Yjc0XHU5YjkzXHU5YjgzXHU5YjkxXHU5Yjk2''@;'; put 'put ''XHU5Yjk3XHU5YjlmXHU5YmEwXHU5YmE4XHU5YmI0XHU5YmMwXHU5YmNhXHU5YmI5XHU5YmM2XHU5YmNmXHU5YmQxXHU5YmQyXHU5YmUzXHU5YmUyXHU5YmU0XHU5YmQ0XHU5YmUxXHU5YzNhXHU5YmYyXHU5YmYxXHU5YmYwXHU5YzE1XHU5YzE0XHU5YzA5XHU5YzEzXHU5YzBjXHU5YzA2XHU5''@;'; put 'put ''YzA4XHU5YzEyXHU5YzBhXHU5YzA0XHU5YzJlXHU5YzFiXHU5YzI1XHU5YzI0XHU5YzIxXHU5YzMwXHU5YzQ3XHU5YzMyXHU5YzQ2XHU5YzNlXHU5YzVhXHU5YzYwXHU5YzY3XHU5Yzc2XHU5Yzc4XHU5Y2U3XHU5Y2VjXHU5Y2YwXHU5ZDA5XHU5ZDA4XHU5Y2ViXHU5ZDAzXHU5ZDA2XHU5ZDJh''@;'; put 'put ''XHU5ZDI2XHU5ZGFmXHU5ZDIzXHU5ZDFmXHU5ZDQ0XHU5ZDE1XHU5ZDEyXHU5ZDQxXHU5ZDNmXHU5ZDNlXHU5ZDQ2XHU5ZDQ4XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjMzXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMzNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lb''@;'; put 'put ''MjMzXVtnXV09NTk2NDgrZyxfWzU5NjQ4K2ddPXlbMjMzXVtnXSk7Zm9yKHlbMjM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ZDVkXHU5ZDVlXHU5ZDY0XHU5ZDUxXHU5ZDUwXHU5ZDU5XHU5ZDcyXHU5ZDg5XHU5ZDg3XHU5ZGFi''@;'; put 'put ''XHU5ZDZmXHU5ZDdhXHU5ZDlhXHU5ZGE0XHU5ZGE5XHU5ZGIyXHU5ZGM0XHU5ZGMxXHU5ZGJiXHU5ZGI4XHU5ZGJhXHU5ZGM2XHU5ZGNmXHU5ZGMyXHU5ZGQ5XHU5ZGQzXHU5ZGY4XHU5ZGU2XHU5ZGVkXHU5ZGVmXHU5ZGZkXHU5ZTFhXHU5ZTFiXHU5ZTFlXHU5ZTc1XHU5ZTc5XHU5ZTdkXHU5''@;'; put 'put ''ZTgxXHU5ZTg4XHU5ZThiXHU5ZThjXHU5ZTkyXHU5ZTk1XHU5ZTkxXHU5ZTlkXHU5ZWE1XHU5ZWE5XHU5ZWI4XHU5ZWFhXHU5ZWFkXHU5NzYxXHU5ZWNjXHU5ZWNlXHU5ZWNmXHU5ZWQwXHU5ZWQ0XHU5ZWRjXHU5ZWRlXHU5ZWRkXHU5ZWUwXHU5ZWU1XHU5ZWU4XHU5ZWVmXHVmZmZkXHU5ZWY0''@;'; put 'put ''XHU5ZWY2XHU5ZWY3XHU5ZWY5XHU5ZWZiXHU5ZWZjXHU5ZWZkXHU5ZjA3XHU5ZjA4XHU3NmI3XHU5ZjE1XHU5ZjIxXHU5ZjJjXHU5ZjNlXHU5ZjRhXHU5ZjUyXHU5ZjU0XHU5ZjYzXHU5ZjVmXHU5ZjYwXHU5ZjYxXHU5ZjY2XHU5ZjY3XHU5ZjZjXHU5ZjZhXHU5Zjc3XHU5ZjcyXHU5Zjc2XHU5''@;'; put 'put ''Zjk1XHU5ZjljXHU5ZmEwXHU1ODJmXHU2OWM3XHU5MDU5XHU3NDY0XHU1MWRjXHU3MTk5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjM0XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMzRdW2ddLmNoYXJDb2Rl''@;'; put 'put ''QXQoMCkmJihJW3lbMjM0XVtnXV09NTk5MDQrZyxfWzU5OTA0K2ddPXlbMjM0XVtnXSk7Zm9yKHlbMjM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ZThhXHU4OTFjXHU5MzQ4XHU5Mjg4XHU4NGRjXHU0ZmM5XHU3MGJiXHU2NjMx''@;'; put 'put ''XHU2OGM4XHU5MmY5XHU2NmZiXHU1ZjQ1XHU0ZTI4XHU0ZWUxXHU0ZWZjXHU0ZjAwXHU0ZjAzXHU0ZjM5XHU0ZjU2XHU0ZjkyXHU0ZjhhXHU0ZjlhXHU0Zjk0XHU0ZmNkXHU1MDQwXHU1MDIyXHU0ZmZmXHU1MDFlXHU1MDQ2XHU1MDcwXHU1MDQyXHU1MDk0XHU1MGY0XHU1MGQ4XHU1MTRhXHU1''@;'; put 'put ''MTY0XHU1MTlkXHU1MWJlXHU1MWVjXHU1MjE1XHU1MjljXHU1MmE2XHU1MmMwXHU1MmRiXHU1MzAwXHU1MzA3XHU1MzI0XHU1MzcyXHU1MzkzXHU1M2IyXHU1M2RkXHVmYTBlXHU1NDljXHU1NDhhXHU1NGE5XHU1NGZmXHU1NTg2XHU1NzU5XHU1NzY1XHU1N2FjXHU1N2M4XHU1N2M3XHVmYTBm''@;'; put 'put ''XHVmZmZkXHVmYTEwXHU1ODllXHU1OGIyXHU1OTBiXHU1OTUzXHU1OTViXHU1OTVkXHU1OTYzXHU1OWE0XHU1OWJhXHU1YjU2XHU1YmMwXHU3NTJmXHU1YmQ4XHU1YmVjXHU1YzFlXHU1Y2E2XHU1Y2JhXHU1Y2Y1XHU1ZDI3XHU1ZDUzXHVmYTExXHU1ZDQyXHU1ZDZkXHU1ZGI4XHU1ZGI5XHU1''@;'; put 'put ''ZGQwXHU1ZjIxXHU1ZjM0XHU1ZjY3XHU1ZmI3XHU1ZmRlXHU2MDVkXHU2MDg1XHU2MDhhXHU2MGRlXHU2MGQ1XHU2MTIwXHU2MGYyXHU2MTExXHU2MTM3XHU2MTMwXHU2MTk4XHU2MjEzXHU2MmE2XHU2M2Y1XHU2NDYwXHU2NDlkXHU2NGNlXHU2NTRlXHU2NjAwXHU2NjE1XHU2NjNiXHU2NjA5''@;'; put 'put ''XHU2NjJlXHU2NjFlXHU2NjI0XHU2NjY1XHU2NjU3XHU2NjU5XHVmYTEyXHU2NjczXHU2Njk5XHU2NmEwXHU2NmIyXHU2NmJmXHU2NmZhXHU2NzBlXHVmOTI5XHU2NzY2XHU2N2JiXHU2ODUyXHU2N2MwXHU2ODAxXHU2ODQ0XHU2OGNmXHVmYTEzXHU2OTY4XHVmYTE0XHU2OTk4XHU2OWUyXHU2''@;'; put 'put ''YTMwXHU2YTZiXHU2YTQ2XHU2YTczXHU2YTdlXHU2YWUyXHU2YWU0XHU2YmQ2XHU2YzNmXHU2YzVjXHU2Yzg2XHU2YzZmXHU2Y2RhXHU2ZDA0XHU2ZDg3XHU2ZDZmXHU2ZDk2XHU2ZGFjXHU2ZGNmXHU2ZGY4XHU2ZGYyXHU2ZGZjXHU2ZTM5XHU2ZTVjXHU2ZTI3XHU2ZTNjXHU2ZWJmXHU2Zjg4''@;'; put 'put ''XHU2ZmI1XHU2ZmY1XHU3MDA1XHU3MDA3XHU3MDI4XHU3MDg1XHU3MGFiXHU3MTBmXHU3MTA0XHU3MTVjXHU3MTQ2XHU3MTQ3XHVmYTE1XHU3MWMxXHU3MWZlXHU3MmIxXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjM3XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMzdd''@;'; put 'put ''W2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjM3XVtnXV09NjA2NzIrZyxfWzYwNjcyK2ddPXlbMjM3XVtnXSk7Zm9yKHlbMjM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MmJlXHU3MzI0XHVmYTE2XHU3Mzc3XHU3M2JkXHU3M2M5''@;'; put 'put ''XHU3M2Q2XHU3M2UzXHU3M2QyXHU3NDA3XHU3M2Y1XHU3NDI2XHU3NDJhXHU3NDI5XHU3NDJlXHU3NDYyXHU3NDg5XHU3NDlmXHU3NTAxXHU3NTZmXHU3NjgyXHU3NjljXHU3NjllXHU3NjliXHU3NmE2XHVmYTE3XHU3NzQ2XHU1MmFmXHU3ODIxXHU3ODRlXHU3ODY0XHU3ODdhXHU3OTMwXHVm''@;'; put 'put ''YTE4XHVmYTE5XHVmYTFhXHU3OTk0XHVmYTFiXHU3OTliXHU3YWQxXHU3YWU3XHVmYTFjXHU3YWViXHU3YjllXHVmYTFkXHU3ZDQ4XHU3ZDVjXHU3ZGI3XHU3ZGEwXHU3ZGQ2XHU3ZTUyXHU3ZjQ3XHU3ZmExXHVmYTFlXHU4MzAxXHU4MzYyXHU4MzdmXHU4M2M3XHU4M2Y2XHU4NDQ4XHU4NGI0''@;'; put 'put ''XHU4NTUzXHU4NTU5XHVmZmZkXHU4NTZiXHVmYTFmXHU4NWIwXHVmYTIwXHVmYTIxXHU4ODA3XHU4OGY1XHU4YTEyXHU4YTM3XHU4YTc5XHU4YWE3XHU4YWJlXHU4YWRmXHVmYTIyXHU4YWY2XHU4YjUzXHU4YjdmXHU4Y2YwXHU4Y2Y0XHU4ZDEyXHU4ZDc2XHVmYTIzXHU4ZWNmXHVmYTI0XHVm''@;'; put 'put ''YTI1XHU5MDY3XHU5MGRlXHVmYTI2XHU5MTE1XHU5MTI3XHU5MWRhXHU5MWQ3XHU5MWRlXHU5MWVkXHU5MWVlXHU5MWU0XHU5MWU1XHU5MjA2XHU5MjEwXHU5MjBhXHU5MjNhXHU5MjQwXHU5MjNjXHU5MjRlXHU5MjU5XHU5MjUxXHU5MjM5XHU5MjY3XHU5MmE3XHU5Mjc3XHU5Mjc4XHU5MmU3''@;'; put 'put ''XHU5MmQ3XHU5MmQ5XHU5MmQwXHVmYTI3XHU5MmQ1XHU5MmUwXHU5MmQzXHU5MzI1XHU5MzIxXHU5MmZiXHVmYTI4XHU5MzFlXHU5MmZmXHU5MzFkXHU5MzAyXHU5MzcwXHU5MzU3XHU5M2E0XHU5M2M2XHU5M2RlXHU5M2Y4XHU5NDMxXHU5NDQ1XHU5NDQ4XHU5NTkyXHVmOWRjXHVmYTI5XHU5''@;'; put 'put ''NjlkXHU5NmFmXHU5NzMzXHU5NzNiXHU5NzQzXHU5NzRkXHU5NzRmXHU5NzUxXHU5NzU1XHU5ODU3XHU5ODY1XHVmYTJhXHVmYTJiXHU5OTI3XHVmYTJjXHU5OTllXHU5YTRlXHU5YWQ5XHU5YWRjXHU5Yjc1XHU5YjcyXHU5YjhmXHU5YmIxXHU5YmJiXHU5YzAwXHU5ZDcwXHU5ZDZiXHVmYTJk''@;'; put 'put ''XHU5ZTE5XHU5ZWQxXHVmZmZkXHVmZmZkXHUyMTcwXHUyMTcxXHUyMTcyXHUyMTczXHUyMTc0XHUyMTc1XHUyMTc2XHUyMTc3XHUyMTc4XHUyMTc5XHVmZmUyXHVmZmU0XHVmZjA3XHVmZjAyXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjM4XS5sZW5ndGg7KytnKTY1''@;'; put 'put ''NTMzIT09eVsyMzhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjM4XVtnXV09NjA5MjgrZyxfWzYwOTI4K2ddPXlbMjM4XVtnXSk7Zm9yKHlbMjUwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMTcwXHUyMTcxXHUyMTcyXHUyMTcz''@;'; put 'put ''XHUyMTc0XHUyMTc1XHUyMTc2XHUyMTc3XHUyMTc4XHUyMTc5XHUyMTYwXHUyMTYxXHUyMTYyXHUyMTYzXHUyMTY0XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4XHUyMTY5XHVmZmUyXHVmZmU0XHVmZjA3XHVmZjAyXHUzMjMxXHUyMTE2XHUyMTIxXHUyMjM1XHU3ZThhXHU4OTFjXHU5MzQ4XHU5''@;'; put 'put ''Mjg4XHU4NGRjXHU0ZmM5XHU3MGJiXHU2NjMxXHU2OGM4XHU5MmY5XHU2NmZiXHU1ZjQ1XHU0ZTI4XHU0ZWUxXHU0ZWZjXHU0ZjAwXHU0ZjAzXHU0ZjM5XHU0ZjU2XHU0ZjkyXHU0ZjhhXHU0ZjlhXHU0Zjk0XHU0ZmNkXHU1MDQwXHU1MDIyXHU0ZmZmXHU1MDFlXHU1MDQ2XHU1MDcwXHU1MDQy''@;'; put 'put ''XHU1MDk0XHU1MGY0XHU1MGQ4XHU1MTRhXHVmZmZkXHU1MTY0XHU1MTlkXHU1MWJlXHU1MWVjXHU1MjE1XHU1MjljXHU1MmE2XHU1MmMwXHU1MmRiXHU1MzAwXHU1MzA3XHU1MzI0XHU1MzcyXHU1MzkzXHU1M2IyXHU1M2RkXHVmYTBlXHU1NDljXHU1NDhhXHU1NGE5XHU1NGZmXHU1NTg2XHU1''@;'; put 'put ''NzU5XHU1NzY1XHU1N2FjXHU1N2M4XHU1N2M3XHVmYTBmXHVmYTEwXHU1ODllXHU1OGIyXHU1OTBiXHU1OTUzXHU1OTViXHU1OTVkXHU1OTYzXHU1OWE0XHU1OWJhXHU1YjU2XHU1YmMwXHU3NTJmXHU1YmQ4XHU1YmVjXHU1YzFlXHU1Y2E2XHU1Y2JhXHU1Y2Y1XHU1ZDI3XHU1ZDUzXHVmYTEx''@;'; put 'put ''XHU1ZDQyXHU1ZDZkXHU1ZGI4XHU1ZGI5XHU1ZGQwXHU1ZjIxXHU1ZjM0XHU1ZjY3XHU1ZmI3XHU1ZmRlXHU2MDVkXHU2MDg1XHU2MDhhXHU2MGRlXHU2MGQ1XHU2MTIwXHU2MGYyXHU2MTExXHU2MTM3XHU2MTMwXHU2MTk4XHU2MjEzXHU2MmE2XHU2M2Y1XHU2NDYwXHU2NDlkXHU2NGNlXHU2''@;'; put 'put ''NTRlXHU2NjAwXHU2NjE1XHU2NjNiXHU2NjA5XHU2NjJlXHU2NjFlXHU2NjI0XHU2NjY1XHU2NjU3XHU2NjU5XHVmYTEyXHU2NjczXHU2Njk5XHU2NmEwXHU2NmIyXHU2NmJmXHU2NmZhXHU2NzBlXHVmOTI5XHU2NzY2XHU2N2JiXHU2ODUyXHU2N2MwXHU2ODAxXHU2ODQ0XHU2OGNmXHVmYTEz''@;'; put 'put ''XHU2OTY4XHVmYTE0XHU2OTk4XHU2OWUyXHU2YTMwXHU2YTZiXHU2YTQ2XHU2YTczXHU2YTdlXHU2YWUyXHU2YWU0XHU2YmQ2XHU2YzNmXHU2YzVjXHU2Yzg2XHU2YzZmXHU2Y2RhXHU2ZDA0XHU2ZDg3XHU2ZDZmXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjUwXS5s''@;'; put 'put ''ZW5ndGg7KytnKTY1NTMzIT09eVsyNTBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjUwXVtnXV09NjRlMytnLF9bNjRlMytnXT15WzI1MF1bZ10pO2Zvcih5WzI1MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NmQ5Nlx1NmRhY1x1''@;'; put 'put ''NmRjZlx1NmRmOFx1NmRmMlx1NmRmY1x1NmUzOVx1NmU1Y1x1NmUyN1x1NmUzY1x1NmViZlx1NmY4OFx1NmZiNVx1NmZmNVx1NzAwNVx1NzAwN1x1NzAyOFx1NzA4NVx1NzBhYlx1NzEwZlx1NzEwNFx1NzE1Y1x1NzE0Nlx1NzE0N1x1ZmExNVx1NzFjMVx1NzFmZVx1NzJiMVx1NzJiZVx1NzMy''@;'; put 'put ''NFx1ZmExNlx1NzM3N1x1NzNiZFx1NzNjOVx1NzNkNlx1NzNlM1x1NzNkMlx1NzQwN1x1NzNmNVx1NzQyNlx1NzQyYVx1NzQyOVx1NzQyZVx1NzQ2Mlx1NzQ4OVx1NzQ5Zlx1NzUwMVx1NzU2Zlx1NzY4Mlx1NzY5Y1x1NzY5ZVx1NzY5Ylx1NzZhNlx1ZmExN1x1Nzc0Nlx1NTJhZlx1NzgyMVx1''@;'; put 'put ''Nzg0ZVx1Nzg2NFx1Nzg3YVx1NzkzMFx1ZmExOFx1ZmExOVx1ZmZmZFx1ZmExYVx1Nzk5NFx1ZmExYlx1Nzk5Ylx1N2FkMVx1N2FlN1x1ZmExY1x1N2FlYlx1N2I5ZVx1ZmExZFx1N2Q0OFx1N2Q1Y1x1N2RiN1x1N2RhMFx1N2RkNlx1N2U1Mlx1N2Y0N1x1N2ZhMVx1ZmExZVx1ODMwMVx1ODM2''@;'; put 'put ''Mlx1ODM3Zlx1ODNjN1x1ODNmNlx1ODQ0OFx1ODRiNFx1ODU1M1x1ODU1OVx1ODU2Ylx1ZmExZlx1ODViMFx1ZmEyMFx1ZmEyMVx1ODgwN1x1ODhmNVx1OGExMlx1OGEzN1x1OGE3OVx1OGFhN1x1OGFiZVx1OGFkZlx1ZmEyMlx1OGFmNlx1OGI1M1x1OGI3Zlx1OGNmMFx1OGNmNFx1OGQxMlx1''@;'; put 'put ''OGQ3Nlx1ZmEyM1x1OGVjZlx1ZmEyNFx1ZmEyNVx1OTA2N1x1OTBkZVx1ZmEyNlx1OTExNVx1OTEyN1x1OTFkYVx1OTFkN1x1OTFkZVx1OTFlZFx1OTFlZVx1OTFlNFx1OTFlNVx1OTIwNlx1OTIxMFx1OTIwYVx1OTIzYVx1OTI0MFx1OTIzY1x1OTI0ZVx1OTI1OVx1OTI1MVx1OTIzOVx1OTI2''@;'; put 'put ''N1x1OTJhN1x1OTI3N1x1OTI3OFx1OTJlN1x1OTJkN1x1OTJkOVx1OTJkMFx1ZmEyN1x1OTJkNVx1OTJlMFx1OTJkM1x1OTMyNVx1OTMyMVx1OTJmYlx1ZmEyOFx1OTMxZVx1OTJmZlx1OTMxZFx1OTMwMlx1OTM3MFx1OTM1N1x1OTNhNFx1OTNjNlx1OTNkZVx1OTNmOFx1OTQzMVx1OTQ0NVx1''@;'; put 'put ''OTQ0OFx1OTU5Mlx1ZjlkY1x1ZmEyOVx1OTY5ZFx1OTZhZlx1OTczM1x1OTczYlx1OTc0M1x1OTc0ZFx1OTc0Zlx1OTc1MVx1OTc1NVx1OTg1N1x1OTg2NVx1ZmEyYVx1ZmEyYlx1OTkyN1x1ZmEyY1x1OTk5ZVx1OWE0ZVx1OWFkOVx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtn''@;'; put 'put ''IT15WzI1MV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjUxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzI1MV1bZ11dPTY0MjU2K2csX1s2NDI1NitnXT15WzI1MV1bZ10pO2Zvcih5WzI1Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''OWFkY1x1OWI3NVx1OWI3Mlx1OWI4Zlx1OWJiMVx1OWJiYlx1OWMwMFx1OWQ3MFx1OWQ2Ylx1ZmEyZFx1OWUxOVx1OWVkMVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLGc9MDtnIT15WzI1Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjUyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzI1Ml1bZ11dPTY0NTEyK2csX1s2NDUxMitnXT15WzI1Ml1bZ10pO3JldHVybntlbmM6SSxkZWM6X319KCkscVs5MzZdPWZ1bmN0aW9uKCl7dmFyIGcsXz1bXSxJPXt9''@;'; put 'put ''LHk9W107Zm9yKHlbMF09IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BB''@;'; put 'put ''QkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVswXVtnXV09MCtnLF9bMCtnXT15WzBdW2ddKTtmb3IoeVsxMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTRlMDJcdTRlMDRcdTRlMDVcdTRlMDZcdTRlMGZcdTRlMTJcdTRlMTdcdTRlMWZcdTRlMjBcdTRlMjFcdTRlMjNcdTRlMjZcdTRlMjlcdTRlMmVcdTRlMmZcdTRlMzFcdTRlMzNcdTRlMzVcdTRlMzdcdTRlM2NcdTRlNDBcdTRlNDFcdTRlNDJcdTRlNDRcdTRlNDZcdTRlNGFc''@;'; put 'put ''dTRlNTFcdTRlNTVcdTRlNTdcdTRlNWFcdTRlNWJcdTRlNjJcdTRlNjNcdTRlNjRcdTRlNjVcdTRlNjdcdTRlNjhcdTRlNmFcdTRlNmJcdTRlNmNcdTRlNmRcdTRlNmVcdTRlNmZcdTRlNzJcdTRlNzRcdTRlNzVcdTRlNzZcdTRlNzdcdTRlNzhcdTRlNzlcdTRlN2FcdTRlN2JcdTRlN2NcdTRl''@;'; put 'put ''N2RcdTRlN2ZcdTRlODBcdTRlODFcdTRlODJcdTRlODNcdTRlODRcdTRlODVcdTRlODdcdTRlOGFcdWZmZmRcdTRlOTBcdTRlOTZcdTRlOTdcdTRlOTlcdTRlOWNcdTRlOWRcdTRlOWVcdTRlYTNcdTRlYWFcdTRlYWZcdTRlYjBcdTRlYjFcdTRlYjRcdTRlYjZcdTRlYjdcdTRlYjhcdTRlYjlc''@;'; put 'put ''dTRlYmNcdTRlYmRcdTRlYmVcdTRlYzhcdTRlY2NcdTRlY2ZcdTRlZDBcdTRlZDJcdTRlZGFcdTRlZGJcdTRlZGNcdTRlZTBcdTRlZTJcdTRlZTZcdTRlZTdcdTRlZTlcdTRlZWRcdTRlZWVcdTRlZWZcdTRlZjFcdTRlZjRcdTRlZjhcdTRlZjlcdTRlZmFcdTRlZmNcdTRlZmVcdTRmMDBcdTRm''@;'; put 'put ''MDJcdTRmMDNcdTRmMDRcdTRmMDVcdTRmMDZcdTRmMDdcdTRmMDhcdTRmMGJcdTRmMGNcdTRmMTJcdTRmMTNcdTRmMTRcdTRmMTVcdTRmMTZcdTRmMWNcdTRmMWRcdTRmMjFcdTRmMjNcdTRmMjhcdTRmMjlcdTRmMmNcdTRmMmRcdTRmMmVcdTRmMzFcdTRmMzNcdTRmMzVcdTRmMzdcdTRmMzlc''@;'; put 'put ''dTRmM2JcdTRmM2VcdTRmM2ZcdTRmNDBcdTRmNDFcdTRmNDJcdTRmNDRcdTRmNDVcdTRmNDdcdTRmNDhcdTRmNDlcdTRmNGFcdTRmNGJcdTRmNGNcdTRmNTJcdTRmNTRcdTRmNTZcdTRmNjFcdTRmNjJcdTRmNjZcdTRmNjhcdTRmNmFcdTRmNmJcdTRmNmRcdTRmNmVcdTRmNzFcdTRmNzJcdTRm''@;'; put 'put ''NzVcdTRmNzdcdTRmNzhcdTRmNzlcdTRmN2FcdTRmN2RcdTRmODBcdTRmODFcdTRmODJcdTRmODVcdTRmODZcdTRmODdcdTRmOGFcdTRmOGNcdTRmOGVcdTRmOTBcdTRmOTJcdTRmOTNcdTRmOTVcdTRmOTZcdTRmOThcdTRmOTlcdTRmOWFcdTRmOWNcdTRmOWVcdTRmOWZcdTRmYTFcdTRmYTJc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxMjldLmxlbmd0aDsrK2cpNjU1MzMhPT15WzEyOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxMjldW2ddXT0zMzAyNCtnLF9bMzMwMjQrZ109eVsxMjldW2ddKTtmb3IoeVsxMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmYTRcdTRmYWJcdTRmYWRcdTRmYjBcdTRmYjFcdTRmYjJcdTRmYjNcdTRmYjRcdTRmYjZcdTRmYjdcdTRmYjhcdTRmYjlcdTRmYmFcdTRmYmJcdTRmYmNcdTRmYmRcdTRmYmVcdTRmYzBcdTRmYzFcdTRmYzJcdTRmYzZcdTRmYzdcdTRmYzhcdTRmYzlc''@;'; put 'put ''dTRmY2JcdTRmY2NcdTRmY2RcdTRmZDJcdTRmZDNcdTRmZDRcdTRmZDVcdTRmZDZcdTRmZDlcdTRmZGJcdTRmZTBcdTRmZTJcdTRmZTRcdTRmZTVcdTRmZTdcdTRmZWJcdTRmZWNcdTRmZjBcdTRmZjJcdTRmZjRcdTRmZjVcdTRmZjZcdTRmZjdcdTRmZjlcdTRmZmJcdTRmZmNcdTRmZmRcdTRm''@;'; put 'put ''ZmZcdTUwMDBcdTUwMDFcdTUwMDJcdTUwMDNcdTUwMDRcdTUwMDVcdTUwMDZcdTUwMDdcdTUwMDhcdTUwMDlcdTUwMGFcdWZmZmRcdTUwMGJcdTUwMGVcdTUwMTBcdTUwMTFcdTUwMTNcdTUwMTVcdTUwMTZcdTUwMTdcdTUwMWJcdTUwMWRcdTUwMWVcdTUwMjBcdTUwMjJcdTUwMjNcdTUwMjRc''@;'; put 'put ''dTUwMjdcdTUwMmJcdTUwMmZcdTUwMzBcdTUwMzFcdTUwMzJcdTUwMzNcdTUwMzRcdTUwMzVcdTUwMzZcdTUwMzdcdTUwMzhcdTUwMzlcdTUwM2JcdTUwM2RcdTUwM2ZcdTUwNDBcdTUwNDFcdTUwNDJcdTUwNDRcdTUwNDVcdTUwNDZcdTUwNDlcdTUwNGFcdTUwNGJcdTUwNGRcdTUwNTBcdTUw''@;'; put 'put ''NTFcdTUwNTJcdTUwNTNcdTUwNTRcdTUwNTZcdTUwNTdcdTUwNThcdTUwNTlcdTUwNWJcdTUwNWRcdTUwNWVcdTUwNWZcdTUwNjBcdTUwNjFcdTUwNjJcdTUwNjNcdTUwNjRcdTUwNjZcdTUwNjdcdTUwNjhcdTUwNjlcdTUwNmFcdTUwNmJcdTUwNmRcdTUwNmVcdTUwNmZcdTUwNzBcdTUwNzFc''@;'; put 'put ''dTUwNzJcdTUwNzNcdTUwNzRcdTUwNzVcdTUwNzhcdTUwNzlcdTUwN2FcdTUwN2NcdTUwN2RcdTUwODFcdTUwODJcdTUwODNcdTUwODRcdTUwODZcdTUwODdcdTUwODlcdTUwOGFcdTUwOGJcdTUwOGNcdTUwOGVcdTUwOGZcdTUwOTBcdTUwOTFcdTUwOTJcdTUwOTNcdTUwOTRcdTUwOTVcdTUw''@;'; put 'put ''OTZcdTUwOTdcdTUwOThcdTUwOTlcdTUwOWFcdTUwOWJcdTUwOWNcdTUwOWRcdTUwOWVcdTUwOWZcdTUwYTBcdTUwYTFcdTUwYTJcdTUwYTRcdTUwYTZcdTUwYWFcdTUwYWJcdTUwYWRcdTUwYWVcdTUwYWZcdTUwYjBcdTUwYjFcdTUwYjNcdTUwYjRcdTUwYjVcdTUwYjZcdTUwYjdcdTUwYjhc''@;'; put 'put ''dTUwYjlcdTUwYmNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxMzBdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzEzMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxMzBdW2ddXT0zMzI4MCtnLF9bMzMyODArZ109eVsxMzBdW2ddKTtmb3IoeVsxMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUwYmRcdTUwYmVcdTUwYmZcdTUwYzBcdTUwYzFcdTUwYzJcdTUwYzNcdTUwYzRcdTUwYzVcdTUwYzZcdTUwYzdcdTUwYzhcdTUwYzlcdTUwY2FcdTUwY2JcdTUwY2NcdTUwY2RcdTUwY2VcdTUwZDBcdTUwZDFcdTUwZDJcdTUwZDNc''@;'; put 'put ''dTUwZDRcdTUwZDVcdTUwZDdcdTUwZDhcdTUwZDlcdTUwZGJcdTUwZGNcdTUwZGRcdTUwZGVcdTUwZGZcdTUwZTBcdTUwZTFcdTUwZTJcdTUwZTNcdTUwZTRcdTUwZTVcdTUwZThcdTUwZTlcdTUwZWFcdTUwZWJcdTUwZWZcdTUwZjBcdTUwZjFcdTUwZjJcdTUwZjRcdTUwZjZcdTUwZjdcdTUw''@;'; put 'put ''ZjhcdTUwZjlcdTUwZmFcdTUwZmNcdTUwZmRcdTUwZmVcdTUwZmZcdTUxMDBcdTUxMDFcdTUxMDJcdTUxMDNcdTUxMDRcdTUxMDVcdTUxMDhcdWZmZmRcdTUxMDlcdTUxMGFcdTUxMGNcdTUxMGRcdTUxMGVcdTUxMGZcdTUxMTBcdTUxMTFcdTUxMTNcdTUxMTRcdTUxMTVcdTUxMTZcdTUxMTdc''@;'; put 'put ''dTUxMThcdTUxMTlcdTUxMWFcdTUxMWJcdTUxMWNcdTUxMWRcdTUxMWVcdTUxMWZcdTUxMjBcdTUxMjJcdTUxMjNcdTUxMjRcdTUxMjVcdTUxMjZcdTUxMjdcdTUxMjhcdTUxMjlcdTUxMmFcdTUxMmJcdTUxMmNcdTUxMmRcdTUxMmVcdTUxMmZcdTUxMzBcdTUxMzFcdTUxMzJcdTUxMzNcdTUx''@;'; put 'put ''MzRcdTUxMzVcdTUxMzZcdTUxMzdcdTUxMzhcdTUxMzlcdTUxM2FcdTUxM2JcdTUxM2NcdTUxM2RcdTUxM2VcdTUxNDJcdTUxNDdcdTUxNGFcdTUxNGNcdTUxNGVcdTUxNGZcdTUxNTBcdTUxNTJcdTUxNTNcdTUxNTdcdTUxNThcdTUxNTlcdTUxNWJcdTUxNWRcdTUxNWVcdTUxNWZcdTUxNjBc''@;'; put 'put ''dTUxNjFcdTUxNjNcdTUxNjRcdTUxNjZcdTUxNjdcdTUxNjlcdTUxNmFcdTUxNmZcdTUxNzJcdTUxN2FcdTUxN2VcdTUxN2ZcdTUxODNcdTUxODRcdTUxODZcdTUxODdcdTUxOGFcdTUxOGJcdTUxOGVcdTUxOGZcdTUxOTBcdTUxOTFcdTUxOTNcdTUxOTRcdTUxOThcdTUxOWFcdTUxOWRcdTUx''@;'; put 'put ''OWVcdTUxOWZcdTUxYTFcdTUxYTNcdTUxYTZcdTUxYTdcdTUxYThcdTUxYTlcdTUxYWFcdTUxYWRcdTUxYWVcdTUxYjRcdTUxYjhcdTUxYjlcdTUxYmFcdTUxYmVcdTUxYmZcdTUxYzFcdTUxYzJcdTUxYzNcdTUxYzVcdTUxYzhcdTUxY2FcdTUxY2RcdTUxY2VcdTUxZDBcdTUxZDJcdTUxZDNc''@;'; put 'put ''dTUxZDRcdTUxZDVcdTUxZDZcdTUxZDdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxMzFdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzEzMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxMzFdW2ddXT0zMzUzNitnLF9bMzM1MzYrZ109eVsxMzFdW2ddKTtmb3IoeVsxMzJdPSJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUxZDhcdTUxZDlcdTUxZGFcdTUxZGNcdTUxZGVcdTUxZGZcdTUxZTJcdTUxZTNcdTUxZTVcdTUxZTZcdTUxZTdcdTUxZThcdTUxZTlcdTUxZWFcdTUxZWNcdTUxZWVcdTUxZjFcdTUxZjJcdTUxZjRcdTUxZjdc''@;'; put 'put ''dTUxZmVcdTUyMDRcdTUyMDVcdTUyMDlcdTUyMGJcdTUyMGNcdTUyMGZcdTUyMTBcdTUyMTNcdTUyMTRcdTUyMTVcdTUyMWNcdTUyMWVcdTUyMWZcdTUyMjFcdTUyMjJcdTUyMjNcdTUyMjVcdTUyMjZcdTUyMjdcdTUyMmFcdTUyMmNcdTUyMmZcdTUyMzFcdTUyMzJcdTUyMzRcdTUyMzVcdTUy''@;'; put 'put ''M2NcdTUyM2VcdTUyNDRcdTUyNDVcdTUyNDZcdTUyNDdcdTUyNDhcdTUyNDlcdTUyNGJcdTUyNGVcdTUyNGZcdTUyNTJcdTUyNTNcdTUyNTVcdTUyNTdcdTUyNThcdWZmZmRcdTUyNTlcdTUyNWFcdTUyNWJcdTUyNWRcdTUyNWZcdTUyNjBcdTUyNjJcdTUyNjNcdTUyNjRcdTUyNjZcdTUyNjhc''@;'; put 'put ''dTUyNmJcdTUyNmNcdTUyNmRcdTUyNmVcdTUyNzBcdTUyNzFcdTUyNzNcdTUyNzRcdTUyNzVcdTUyNzZcdTUyNzdcdTUyNzhcdTUyNzlcdTUyN2FcdTUyN2JcdTUyN2NcdTUyN2VcdTUyODBcdTUyODNcdTUyODRcdTUyODVcdTUyODZcdTUyODdcdTUyODlcdTUyOGFcdTUyOGJcdTUyOGNcdTUy''@;'; put 'put ''OGRcdTUyOGVcdTUyOGZcdTUyOTFcdTUyOTJcdTUyOTRcdTUyOTVcdTUyOTZcdTUyOTdcdTUyOThcdTUyOTlcdTUyOWFcdTUyOWNcdTUyYTRcdTUyYTVcdTUyYTZcdTUyYTdcdTUyYWVcdTUyYWZcdTUyYjBcdTUyYjRcdTUyYjVcdTUyYjZcdTUyYjdcdTUyYjhcdTUyYjlcdTUyYmFcdTUyYmJc''@;'; put 'put ''dTUyYmNcdTUyYmRcdTUyYzBcdTUyYzFcdTUyYzJcdTUyYzRcdTUyYzVcdTUyYzZcdTUyYzhcdTUyY2FcdTUyY2NcdTUyY2RcdTUyY2VcdTUyY2ZcdTUyZDFcdTUyZDNcdTUyZDRcdTUyZDVcdTUyZDdcdTUyZDlcdTUyZGFcdTUyZGJcdTUyZGNcdTUyZGRcdTUyZGVcdTUyZTBcdTUyZTFcdTUy''@;'; put 'put ''ZTJcdTUyZTNcdTUyZTVcdTUyZTZcdTUyZTdcdTUyZThcdTUyZTlcdTUyZWFcdTUyZWJcdTUyZWNcdTUyZWRcdTUyZWVcdTUyZWZcdTUyZjFcdTUyZjJcdTUyZjNcdTUyZjRcdTUyZjVcdTUyZjZcdTUyZjdcdTUyZjhcdTUyZmJcdTUyZmNcdTUyZmRcdTUzMDFcdTUzMDJcdTUzMDNcdTUzMDRc''@;'; put 'put ''dTUzMDdcdTUzMDlcdTUzMGFcdTUzMGJcdTUzMGNcdTUzMGVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxMzJdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzEzMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxMzJdW2ddXT0zMzc5MitnLF9bMzM3OTIrZ109eVsxMzJdW2ddKTtmb3IoeVsxMzNd''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzMTFcdTUzMTJcdTUzMTNcdTUzMTRcdTUzMThcdTUzMWJcdTUzMWNcdTUzMWVcdTUzMWZcdTUzMjJcdTUzMjRcdTUzMjVcdTUzMjdcdTUzMjhcdTUzMjlcdTUzMmJcdTUzMmNcdTUzMmRc''@;'; put 'put ''dTUzMmZcdTUzMzBcdTUzMzFcdTUzMzJcdTUzMzNcdTUzMzRcdTUzMzVcdTUzMzZcdTUzMzdcdTUzMzhcdTUzM2NcdTUzM2RcdTUzNDBcdTUzNDJcdTUzNDRcdTUzNDZcdTUzNGJcdTUzNGNcdTUzNGRcdTUzNTBcdTUzNTRcdTUzNThcdTUzNTlcdTUzNWJcdTUzNWRcdTUzNjVcdTUzNjhcdTUz''@;'; put 'put ''NmFcdTUzNmNcdTUzNmRcdTUzNzJcdTUzNzZcdTUzNzlcdTUzN2JcdTUzN2NcdTUzN2RcdTUzN2VcdTUzODBcdTUzODFcdTUzODNcdTUzODdcdTUzODhcdTUzOGFcdTUzOGVcdTUzOGZcdWZmZmRcdTUzOTBcdTUzOTFcdTUzOTJcdTUzOTNcdTUzOTRcdTUzOTZcdTUzOTdcdTUzOTlcdTUzOWJc''@;'; put 'put ''dTUzOWNcdTUzOWVcdTUzYTBcdTUzYTFcdTUzYTRcdTUzYTdcdTUzYWFcdTUzYWJcdTUzYWNcdTUzYWRcdTUzYWZcdTUzYjBcdTUzYjFcdTUzYjJcdTUzYjNcdTUzYjRcdTUzYjVcdTUzYjdcdTUzYjhcdTUzYjlcdTUzYmFcdTUzYmNcdTUzYmRcdTUzYmVcdTUzYzBcdTUzYzNcdTUzYzRcdTUz''@;'; put 'put ''YzVcdTUzYzZcdTUzYzdcdTUzY2VcdTUzY2ZcdTUzZDBcdTUzZDJcdTUzZDNcdTUzZDVcdTUzZGFcdTUzZGNcdTUzZGRcdTUzZGVcdTUzZTFcdTUzZTJcdTUzZTdcdTUzZjRcdTUzZmFcdTUzZmVcdTUzZmZcdTU0MDBcdTU0MDJcdTU0MDVcdTU0MDdcdTU0MGJcdTU0MTRcdTU0MThcdTU0MTlc''@;'; put 'put ''dTU0MWFcdTU0MWNcdTU0MjJcdTU0MjRcdTU0MjVcdTU0MmFcdTU0MzBcdTU0MzNcdTU0MzZcdTU0MzdcdTU0M2FcdTU0M2RcdTU0M2ZcdTU0NDFcdTU0NDJcdTU0NDRcdTU0NDVcdTU0NDdcdTU0NDlcdTU0NGNcdTU0NGRcdTU0NGVcdTU0NGZcdTU0NTFcdTU0NWFcdTU0NWRcdTU0NWVcdTU0''@;'; put 'put ''NWZcdTU0NjBcdTU0NjFcdTU0NjNcdTU0NjVcdTU0NjdcdTU0NjlcdTU0NmFcdTU0NmJcdTU0NmNcdTU0NmRcdTU0NmVcdTU0NmZcdTU0NzBcdTU0NzRcdTU0NzlcdTU0N2FcdTU0N2VcdTU0N2ZcdTU0ODFcdTU0ODNcdTU0ODVcdTU0ODdcdTU0ODhcdTU0ODlcdTU0OGFcdTU0OGRcdTU0OTFc''@;'; put 'put ''dTU0OTNcdTU0OTdcdTU0OThcdTU0OWNcdTU0OWVcdTU0OWZcdTU0YTBcdTU0YTFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxMzNdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzEzM11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxMzNdW2ddXT0zNDA0OCtnLF9bMzQwNDgrZ109eVsxMzNdW2dd''@;'; put 'put ''KTtmb3IoeVsxMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YTJcdTU0YTVcdTU0YWVcdTU0YjBcdTU0YjJcdTU0YjVcdTU0YjZcdTU0YjdcdTU0YjlcdTU0YmFcdTU0YmNcdTU0YmVcdTU0YzNcdTU0YzVcdTU0Y2FcdTU0Y2Jc''@;'; put 'put ''dTU0ZDZcdTU0ZDhcdTU0ZGJcdTU0ZTBcdTU0ZTFcdTU0ZTJcdTU0ZTNcdTU0ZTRcdTU0ZWJcdTU0ZWNcdTU0ZWZcdTU0ZjBcdTU0ZjFcdTU0ZjRcdTU0ZjVcdTU0ZjZcdTU0ZjdcdTU0ZjhcdTU0ZjlcdTU0ZmJcdTU0ZmVcdTU1MDBcdTU1MDJcdTU1MDNcdTU1MDRcdTU1MDVcdTU1MDhcdTU1''@;'; put 'put ''MGFcdTU1MGJcdTU1MGNcdTU1MGRcdTU1MGVcdTU1MTJcdTU1MTNcdTU1MTVcdTU1MTZcdTU1MTdcdTU1MThcdTU1MTlcdTU1MWFcdTU1MWNcdTU1MWRcdTU1MWVcdTU1MWZcdTU1MjFcdTU1MjVcdTU1MjZcdWZmZmRcdTU1MjhcdTU1MjlcdTU1MmJcdTU1MmRcdTU1MzJcdTU1MzRcdTU1MzVc''@;'; put 'put ''dTU1MzZcdTU1MzhcdTU1MzlcdTU1M2FcdTU1M2JcdTU1M2RcdTU1NDBcdTU1NDJcdTU1NDVcdTU1NDdcdTU1NDhcdTU1NGJcdTU1NGNcdTU1NGRcdTU1NGVcdTU1NGZcdTU1NTFcdTU1NTJcdTU1NTNcdTU1NTRcdTU1NTdcdTU1NThcdTU1NTlcdTU1NWFcdTU1NWJcdTU1NWRcdTU1NWVcdTU1''@;'; put 'put ''NWZcdTU1NjBcdTU1NjJcdTU1NjNcdTU1NjhcdTU1NjlcdTU1NmJcdTU1NmZcdTU1NzBcdTU1NzFcdTU1NzJcdTU1NzNcdTU1NzRcdTU1NzlcdTU1N2FcdTU1N2RcdTU1N2ZcdTU1ODVcdTU1ODZcdTU1OGNcdTU1OGRcdTU1OGVcdTU1OTBcdTU1OTJcdTU1OTNcdTU1OTVcdTU1OTZcdTU1OTdc''@;'; put 'put ''dTU1OWFcdTU1OWJcdTU1OWVcdTU1YTBcdTU1YTFcdTU1YTJcdTU1YTNcdTU1YTRcdTU1YTVcdTU1YTZcdTU1YThcdTU1YTlcdTU1YWFcdTU1YWJcdTU1YWNcdTU1YWRcdTU1YWVcdTU1YWZcdTU1YjBcdTU1YjJcdTU1YjRcdTU1YjZcdTU1YjhcdTU1YmFcdTU1YmNcdTU1YmZcdTU1YzBcdTU1''@;'; put 'put ''YzFcdTU1YzJcdTU1YzNcdTU1YzZcdTU1YzdcdTU1YzhcdTU1Y2FcdTU1Y2JcdTU1Y2VcdTU1Y2ZcdTU1ZDBcdTU1ZDVcdTU1ZDdcdTU1ZDhcdTU1ZDlcdTU1ZGFcdTU1ZGJcdTU1ZGVcdTU1ZTBcdTU1ZTJcdTU1ZTdcdTU1ZTlcdTU1ZWRcdTU1ZWVcdTU1ZjBcdTU1ZjFcdTU1ZjRcdTU1ZjZc''@;'; put 'put ''dTU1ZjhcdTU1ZjlcdTU1ZmFcdTU1ZmJcdTU1ZmNcdTU1ZmZcdTU2MDJcdTU2MDNcdTU2MDRcdTU2MDVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxMzRdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzEzNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxMzRdW2ddXT0zNDMwNCtnLF9bMzQzMDQr''@;'; put 'put ''Z109eVsxMzRdW2ddKTtmb3IoeVsxMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU2MDZcdTU2MDdcdTU2MGFcdTU2MGJcdTU2MGRcdTU2MTBcdTU2MTFcdTU2MTJcdTU2MTNcdTU2MTRcdTU2MTVcdTU2MTZcdTU2MTdcdTU2MTlc''@;'; put 'put ''dTU2MWFcdTU2MWNcdTU2MWRcdTU2MjBcdTU2MjFcdTU2MjJcdTU2MjVcdTU2MjZcdTU2MjhcdTU2MjlcdTU2MmFcdTU2MmJcdTU2MmVcdTU2MmZcdTU2MzBcdTU2MzNcdTU2MzVcdTU2MzdcdTU2MzhcdTU2M2FcdTU2M2NcdTU2M2RcdTU2M2VcdTU2NDBcdTU2NDFcdTU2NDJcdTU2NDNcdTU2''@;'; put 'put ''NDRcdTU2NDVcdTU2NDZcdTU2NDdcdTU2NDhcdTU2NDlcdTU2NGFcdTU2NGJcdTU2NGZcdTU2NTBcdTU2NTFcdTU2NTJcdTU2NTNcdTU2NTVcdTU2NTZcdTU2NWFcdTU2NWJcdTU2NWRcdTU2NWVcdTU2NWZcdTU2NjBcdTU2NjFcdWZmZmRcdTU2NjNcdTU2NjVcdTU2NjZcdTU2NjdcdTU2NmRc''@;'; put 'put ''dTU2NmVcdTU2NmZcdTU2NzBcdTU2NzJcdTU2NzNcdTU2NzRcdTU2NzVcdTU2NzdcdTU2NzhcdTU2NzlcdTU2N2FcdTU2N2RcdTU2N2VcdTU2N2ZcdTU2ODBcdTU2ODFcdTU2ODJcdTU2ODNcdTU2ODRcdTU2ODdcdTU2ODhcdTU2ODlcdTU2OGFcdTU2OGJcdTU2OGNcdTU2OGRcdTU2OTBcdTU2''@;'; put 'put ''OTFcdTU2OTJcdTU2OTRcdTU2OTVcdTU2OTZcdTU2OTdcdTU2OThcdTU2OTlcdTU2OWFcdTU2OWJcdTU2OWNcdTU2OWRcdTU2OWVcdTU2OWZcdTU2YTBcdTU2YTFcdTU2YTJcdTU2YTRcdTU2YTVcdTU2YTZcdTU2YTdcdTU2YThcdTU2YTlcdTU2YWFcdTU2YWJcdTU2YWNcdTU2YWRcdTU2YWVc''@;'; put 'put ''dTU2YjBcdTU2YjFcdTU2YjJcdTU2YjNcdTU2YjRcdTU2YjVcdTU2YjZcdTU2YjhcdTU2YjlcdTU2YmFcdTU2YmJcdTU2YmRcdTU2YmVcdTU2YmZcdTU2YzBcdTU2YzFcdTU2YzJcdTU2YzNcdTU2YzRcdTU2YzVcdTU2YzZcdTU2YzdcdTU2YzhcdTU2YzlcdTU2Y2JcdTU2Y2NcdTU2Y2RcdTU2''@;'; put 'put ''Y2VcdTU2Y2ZcdTU2ZDBcdTU2ZDFcdTU2ZDJcdTU2ZDNcdTU2ZDVcdTU2ZDZcdTU2ZDhcdTU2ZDlcdTU2ZGNcdTU2ZTNcdTU2ZTVcdTU2ZTZcdTU2ZTdcdTU2ZThcdTU2ZTlcdTU2ZWFcdTU2ZWNcdTU2ZWVcdTU2ZWZcdTU2ZjJcdTU2ZjNcdTU2ZjZcdTU2ZjdcdTU2ZjhcdTU2ZmJcdTU2ZmNc''@;'; put 'put ''dTU3MDBcdTU3MDFcdTU3MDJcdTU3MDVcdTU3MDdcdTU3MGJcdTU3MGNcdTU3MGRcdTU3MGVcdTU3MGZcdTU3MTBcdTU3MTFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxMzVdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzEzNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxMzVdW2ddXT0zNDU2''@;'; put 'put ''MCtnLF9bMzQ1NjArZ109eVsxMzVdW2ddKTtmb3IoeVsxMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU3MTJcdTU3MTNcdTU3MTRcdTU3MTVcdTU3MTZcdTU3MTdcdTU3MThcdTU3MTlcdTU3MWFcdTU3MWJcdTU3MWRcdTU3MWVc''@;'; put 'put ''dTU3MjBcdTU3MjFcdTU3MjJcdTU3MjRcdTU3MjVcdTU3MjZcdTU3MjdcdTU3MmJcdTU3MzFcdTU3MzJcdTU3MzRcdTU3MzVcdTU3MzZcdTU3MzdcdTU3MzhcdTU3M2NcdTU3M2RcdTU3M2ZcdTU3NDFcdTU3NDNcdTU3NDRcdTU3NDVcdTU3NDZcdTU3NDhcdTU3NDlcdTU3NGJcdTU3NTJcdTU3''@;'; put 'put ''NTNcdTU3NTRcdTU3NTVcdTU3NTZcdTU3NThcdTU3NTlcdTU3NjJcdTU3NjNcdTU3NjVcdTU3NjdcdTU3NmNcdTU3NmVcdTU3NzBcdTU3NzFcdTU3NzJcdTU3NzRcdTU3NzVcdTU3NzhcdTU3NzlcdTU3N2FcdTU3N2RcdTU3N2VcdTU3N2ZcdTU3ODBcdWZmZmRcdTU3ODFcdTU3ODdcdTU3ODhc''@;'; put 'put ''dTU3ODlcdTU3OGFcdTU3OGRcdTU3OGVcdTU3OGZcdTU3OTBcdTU3OTFcdTU3OTRcdTU3OTVcdTU3OTZcdTU3OTdcdTU3OThcdTU3OTlcdTU3OWFcdTU3OWNcdTU3OWRcdTU3OWVcdTU3OWZcdTU3YTVcdTU3YThcdTU3YWFcdTU3YWNcdTU3YWZcdTU3YjBcdTU3YjFcdTU3YjNcdTU3YjVcdTU3''@;'; put 'put ''YjZcdTU3YjdcdTU3YjlcdTU3YmFcdTU3YmJcdTU3YmNcdTU3YmRcdTU3YmVcdTU3YmZcdTU3YzBcdTU3YzFcdTU3YzRcdTU3YzVcdTU3YzZcdTU3YzdcdTU3YzhcdTU3YzlcdTU3Y2FcdTU3Y2NcdTU3Y2RcdTU3ZDBcdTU3ZDFcdTU3ZDNcdTU3ZDZcdTU3ZDdcdTU3ZGJcdTU3ZGNcdTU3ZGVc''@;'; put 'put ''dTU3ZTFcdTU3ZTJcdTU3ZTNcdTU3ZTVcdTU3ZTZcdTU3ZTdcdTU3ZThcdTU3ZTlcdTU3ZWFcdTU3ZWJcdTU3ZWNcdTU3ZWVcdTU3ZjBcdTU3ZjFcdTU3ZjJcdTU3ZjNcdTU3ZjVcdTU3ZjZcdTU3ZjdcdTU3ZmJcdTU3ZmNcdTU3ZmVcdTU3ZmZcdTU4MDFcdTU4MDNcdTU4MDRcdTU4MDVcdTU4''@;'; put 'put ''MDhcdTU4MDlcdTU4MGFcdTU4MGNcdTU4MGVcdTU4MGZcdTU4MTBcdTU4MTJcdTU4MTNcdTU4MTRcdTU4MTZcdTU4MTdcdTU4MThcdTU4MWFcdTU4MWJcdTU4MWNcdTU4MWRcdTU4MWZcdTU4MjJcdTU4MjNcdTU4MjVcdTU4MjZcdTU4MjdcdTU4MjhcdTU4MjlcdTU4MmJcdTU4MmNcdTU4MmRc''@;'; put 'put ''dTU4MmVcdTU4MmZcdTU4MzFcdTU4MzJcdTU4MzNcdTU4MzRcdTU4MzZcdTU4MzdcdTU4MzhcdTU4MzlcdTU4M2FcdTU4M2JcdTU4M2NcdTU4M2RcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxMzZdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzEzNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsx''@;'; put 'put ''MzZdW2ddXT0zNDgxNitnLF9bMzQ4MTYrZ109eVsxMzZdW2ddKTtmb3IoeVsxMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU4M2VcdTU4M2ZcdTU4NDBcdTU4NDFcdTU4NDJcdTU4NDNcdTU4NDVcdTU4NDZcdTU4NDdcdTU4NDhc''@;'; put 'put ''dTU4NDlcdTU4NGFcdTU4NGJcdTU4NGVcdTU4NGZcdTU4NTBcdTU4NTJcdTU4NTNcdTU4NTVcdTU4NTZcdTU4NTdcdTU4NTlcdTU4NWFcdTU4NWJcdTU4NWNcdTU4NWRcdTU4NWZcdTU4NjBcdTU4NjFcdTU4NjJcdTU4NjNcdTU4NjRcdTU4NjZcdTU4NjdcdTU4NjhcdTU4NjlcdTU4NmFcdTU4''@;'; put 'put ''NmRcdTU4NmVcdTU4NmZcdTU4NzBcdTU4NzFcdTU4NzJcdTU4NzNcdTU4NzRcdTU4NzVcdTU4NzZcdTU4NzdcdTU4NzhcdTU4NzlcdTU4N2FcdTU4N2JcdTU4N2NcdTU4N2RcdTU4N2ZcdTU4ODJcdTU4ODRcdTU4ODZcdTU4ODdcdTU4ODhcdTU4OGFcdTU4OGJcdTU4OGNcdWZmZmRcdTU4OGRc''@;'; put 'put ''dTU4OGVcdTU4OGZcdTU4OTBcdTU4OTFcdTU4OTRcdTU4OTVcdTU4OTZcdTU4OTdcdTU4OThcdTU4OWJcdTU4OWNcdTU4OWRcdTU4YTBcdTU4YTFcdTU4YTJcdTU4YTNcdTU4YTRcdTU4YTVcdTU4YTZcdTU4YTdcdTU4YWFcdTU4YWJcdTU4YWNcdTU4YWRcdTU4YWVcdTU4YWZcdTU4YjBcdTU4''@;'; put 'put ''YjFcdTU4YjJcdTU4YjNcdTU4YjRcdTU4YjVcdTU4YjZcdTU4YjdcdTU4YjhcdTU4YjlcdTU4YmFcdTU4YmJcdTU4YmRcdTU4YmVcdTU4YmZcdTU4YzBcdTU4YzJcdTU4YzNcdTU4YzRcdTU4YzZcdTU4YzdcdTU4YzhcdTU4YzlcdTU4Y2FcdTU4Y2JcdTU4Y2NcdTU4Y2RcdTU4Y2VcdTU4Y2Zc''@;'; put 'put ''dTU4ZDBcdTU4ZDJcdTU4ZDNcdTU4ZDRcdTU4ZDZcdTU4ZDdcdTU4ZDhcdTU4ZDlcdTU4ZGFcdTU4ZGJcdTU4ZGNcdTU4ZGRcdTU4ZGVcdTU4ZGZcdTU4ZTBcdTU4ZTFcdTU4ZTJcdTU4ZTNcdTU4ZTVcdTU4ZTZcdTU4ZTdcdTU4ZThcdTU4ZTlcdTU4ZWFcdTU4ZWRcdTU4ZWZcdTU4ZjFcdTU4''@;'; put 'put ''ZjJcdTU4ZjRcdTU4ZjVcdTU4ZjdcdTU4ZjhcdTU4ZmFcdTU4ZmJcdTU4ZmNcdTU4ZmRcdTU4ZmVcdTU4ZmZcdTU5MDBcdTU5MDFcdTU5MDNcdTU5MDVcdTU5MDZcdTU5MDhcdTU5MDlcdTU5MGFcdTU5MGJcdTU5MGNcdTU5MGVcdTU5MTBcdTU5MTFcdTU5MTJcdTU5MTNcdTU5MTdcdTU5MThc''@;'; put 'put ''dTU5MWJcdTU5MWRcdTU5MWVcdTU5MjBcdTU5MjFcdTU5MjJcdTU5MjNcdTU5MjZcdTU5MjhcdTU5MmNcdTU5MzBcdTU5MzJcdTU5MzNcdTU5MzVcdTU5MzZcdTU5M2JcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxMzddLmxlbmd0aDsrK2cpNjU1MzMhPT15WzEzN11bZ10uY2hhckNvZGVB''@;'; put 'put ''dCgwKSYmKElbeVsxMzddW2ddXT0zNTA3MitnLF9bMzUwNzIrZ109eVsxMzddW2ddKTtmb3IoeVsxMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5M2RcdTU5M2VcdTU5M2ZcdTU5NDBcdTU5NDNcdTU5NDVcdTU5NDZcdTU5NGFc''@;'; put 'put ''dTU5NGNcdTU5NGRcdTU5NTBcdTU5NTJcdTU5NTNcdTU5NTlcdTU5NWJcdTU5NWNcdTU5NWRcdTU5NWVcdTU5NWZcdTU5NjFcdTU5NjNcdTU5NjRcdTU5NjZcdTU5NjdcdTU5NjhcdTU5NjlcdTU5NmFcdTU5NmJcdTU5NmNcdTU5NmRcdTU5NmVcdTU5NmZcdTU5NzBcdTU5NzFcdTU5NzJcdTU5''@;'; put 'put ''NzVcdTU5NzdcdTU5N2FcdTU5N2JcdTU5N2NcdTU5N2VcdTU5N2ZcdTU5ODBcdTU5ODVcdTU5ODlcdTU5OGJcdTU5OGNcdTU5OGVcdTU5OGZcdTU5OTBcdTU5OTFcdTU5OTRcdTU5OTVcdTU5OThcdTU5OWFcdTU5OWJcdTU5OWNcdTU5OWRcdTU5OWZcdTU5YTBcdTU5YTFcdTU5YTJcdTU5YTZc''@;'; put 'put ''dWZmZmRcdTU5YTdcdTU5YWNcdTU5YWRcdTU5YjBcdTU5YjFcdTU5YjNcdTU5YjRcdTU5YjVcdTU5YjZcdTU5YjdcdTU5YjhcdTU5YmFcdTU5YmNcdTU5YmRcdTU5YmZcdTU5YzBcdTU5YzFcdTU5YzJcdTU5YzNcdTU5YzRcdTU5YzVcdTU5YzdcdTU5YzhcdTU5YzlcdTU5Y2NcdTU5Y2RcdTU5''@;'; put 'put ''Y2VcdTU5Y2ZcdTU5ZDVcdTU5ZDZcdTU5ZDlcdTU5ZGJcdTU5ZGVcdTU5ZGZcdTU5ZTBcdTU5ZTFcdTU5ZTJcdTU5ZTRcdTU5ZTZcdTU5ZTdcdTU5ZTlcdTU5ZWFcdTU5ZWJcdTU5ZWRcdTU5ZWVcdTU5ZWZcdTU5ZjBcdTU5ZjFcdTU5ZjJcdTU5ZjNcdTU5ZjRcdTU5ZjVcdTU5ZjZcdTU5Zjdc''@;'; put 'put ''dTU5ZjhcdTU5ZmFcdTU5ZmNcdTU5ZmRcdTU5ZmVcdTVhMDBcdTVhMDJcdTVhMGFcdTVhMGJcdTVhMGRcdTVhMGVcdTVhMGZcdTVhMTBcdTVhMTJcdTVhMTRcdTVhMTVcdTVhMTZcdTVhMTdcdTVhMTlcdTVhMWFcdTVhMWJcdTVhMWRcdTVhMWVcdTVhMjFcdTVhMjJcdTVhMjRcdTVhMjZcdTVh''@;'; put 'put ''MjdcdTVhMjhcdTVhMmFcdTVhMmJcdTVhMmNcdTVhMmRcdTVhMmVcdTVhMmZcdTVhMzBcdTVhMzNcdTVhMzVcdTVhMzdcdTVhMzhcdTVhMzlcdTVhM2FcdTVhM2JcdTVhM2RcdTVhM2VcdTVhM2ZcdTVhNDFcdTVhNDJcdTVhNDNcdTVhNDRcdTVhNDVcdTVhNDdcdTVhNDhcdTVhNGJcdTVhNGNc''@;'; put 'put ''dTVhNGRcdTVhNGVcdTVhNGZcdTVhNTBcdTVhNTFcdTVhNTJcdTVhNTNcdTVhNTRcdTVhNTZcdTVhNTdcdTVhNThcdTVhNTlcdTVhNWJcdTVhNWNcdTVhNWRcdTVhNWVcdTVhNWZcdTVhNjBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxMzhdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzEzOF1b''@;'; put 'put ''Z10uY2hhckNvZGVBdCgwKSYmKElbeVsxMzhdW2ddXT0zNTMyOCtnLF9bMzUzMjgrZ109eVsxMzhdW2ddKTtmb3IoeVsxMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVhNjFcdTVhNjNcdTVhNjRcdTVhNjVcdTVhNjZcdTVhNjhc''@;'; put 'put ''dTVhNjlcdTVhNmJcdTVhNmNcdTVhNmRcdTVhNmVcdTVhNmZcdTVhNzBcdTVhNzFcdTVhNzJcdTVhNzNcdTVhNzhcdTVhNzlcdTVhN2JcdTVhN2NcdTVhN2RcdTVhN2VcdTVhODBcdTVhODFcdTVhODJcdTVhODNcdTVhODRcdTVhODVcdTVhODZcdTVhODdcdTVhODhcdTVhODlcdTVhOGFcdTVh''@;'; put 'put ''OGJcdTVhOGNcdTVhOGRcdTVhOGVcdTVhOGZcdTVhOTBcdTVhOTFcdTVhOTNcdTVhOTRcdTVhOTVcdTVhOTZcdTVhOTdcdTVhOThcdTVhOTlcdTVhOWNcdTVhOWRcdTVhOWVcdTVhOWZcdTVhYTBcdTVhYTFcdTVhYTJcdTVhYTNcdTVhYTRcdTVhYTVcdTVhYTZcdTVhYTdcdTVhYThcdTVhYTlc''@;'; put 'put ''dTVhYWJcdTVhYWNcdWZmZmRcdTVhYWRcdTVhYWVcdTVhYWZcdTVhYjBcdTVhYjFcdTVhYjRcdTVhYjZcdTVhYjdcdTVhYjlcdTVhYmFcdTVhYmJcdTVhYmNcdTVhYmRcdTVhYmZcdTVhYzBcdTVhYzNcdTVhYzRcdTVhYzVcdTVhYzZcdTVhYzdcdTVhYzhcdTVhY2FcdTVhY2JcdTVhY2RcdTVh''@;'; put 'put ''Y2VcdTVhY2ZcdTVhZDBcdTVhZDFcdTVhZDNcdTVhZDVcdTVhZDdcdTVhZDlcdTVhZGFcdTVhZGJcdTVhZGRcdTVhZGVcdTVhZGZcdTVhZTJcdTVhZTRcdTVhZTVcdTVhZTdcdTVhZThcdTVhZWFcdTVhZWNcdTVhZWRcdTVhZWVcdTVhZWZcdTVhZjBcdTVhZjJcdTVhZjNcdTVhZjRcdTVhZjVc''@;'; put 'put ''dTVhZjZcdTVhZjdcdTVhZjhcdTVhZjlcdTVhZmFcdTVhZmJcdTVhZmNcdTVhZmRcdTVhZmVcdTVhZmZcdTViMDBcdTViMDFcdTViMDJcdTViMDNcdTViMDRcdTViMDVcdTViMDZcdTViMDdcdTViMDhcdTViMGFcdTViMGJcdTViMGNcdTViMGRcdTViMGVcdTViMGZcdTViMTBcdTViMTFcdTVi''@;'; put 'put ''MTJcdTViMTNcdTViMTRcdTViMTVcdTViMThcdTViMTlcdTViMWFcdTViMWJcdTViMWNcdTViMWRcdTViMWVcdTViMWZcdTViMjBcdTViMjFcdTViMjJcdTViMjNcdTViMjRcdTViMjVcdTViMjZcdTViMjdcdTViMjhcdTViMjlcdTViMmFcdTViMmJcdTViMmNcdTViMmRcdTViMmVcdTViMmZc''@;'; put 'put ''dTViMzBcdTViMzFcdTViMzNcdTViMzVcdTViMzZcdTViMzhcdTViMzlcdTViM2FcdTViM2JcdTViM2NcdTViM2RcdTViM2VcdTViM2ZcdTViNDFcdTViNDJcdTViNDNcdTViNDRcdTViNDVcdTViNDZcdTViNDdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxMzldLmxlbmd0aDsrK2cpNjU1''@;'; put 'put ''MzMhPT15WzEzOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxMzldW2ddXT0zNTU4NCtnLF9bMzU1ODQrZ109eVsxMzldW2ddKTtmb3IoeVsxNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTViNDhcdTViNDlcdTViNGFcdTViNGJc''@;'; put 'put ''dTViNGNcdTViNGRcdTViNGVcdTViNGZcdTViNTJcdTViNTZcdTViNWVcdTViNjBcdTViNjFcdTViNjdcdTViNjhcdTViNmJcdTViNmRcdTViNmVcdTViNmZcdTViNzJcdTViNzRcdTViNzZcdTViNzdcdTViNzhcdTViNzlcdTViN2JcdTViN2NcdTViN2VcdTViN2ZcdTViODJcdTViODZcdTVi''@;'; put 'put ''OGFcdTViOGRcdTViOGVcdTViOTBcdTViOTFcdTViOTJcdTViOTRcdTViOTZcdTViOWZcdTViYTdcdTViYThcdTViYTlcdTViYWNcdTViYWRcdTViYWVcdTViYWZcdTViYjFcdTViYjJcdTViYjdcdTViYmFcdTViYmJcdTViYmNcdTViYzBcdTViYzFcdTViYzNcdTViYzhcdTViYzlcdTViY2Fc''@;'; put 'put ''dTViY2JcdTViY2RcdTViY2VcdTViY2ZcdWZmZmRcdTViZDFcdTViZDRcdTViZDVcdTViZDZcdTViZDdcdTViZDhcdTViZDlcdTViZGFcdTViZGJcdTViZGNcdTViZTBcdTViZTJcdTViZTNcdTViZTZcdTViZTdcdTViZTlcdTViZWFcdTViZWJcdTViZWNcdTViZWRcdTViZWZcdTViZjFcdTVi''@;'; put 'put ''ZjJcdTViZjNcdTViZjRcdTViZjVcdTViZjZcdTViZjdcdTViZmRcdTViZmVcdTVjMDBcdTVjMDJcdTVjMDNcdTVjMDVcdTVjMDdcdTVjMDhcdTVjMGJcdTVjMGNcdTVjMGRcdTVjMGVcdTVjMTBcdTVjMTJcdTVjMTNcdTVjMTdcdTVjMTlcdTVjMWJcdTVjMWVcdTVjMWZcdTVjMjBcdTVjMjFc''@;'; put 'put ''dTVjMjNcdTVjMjZcdTVjMjhcdTVjMjlcdTVjMmFcdTVjMmJcdTVjMmRcdTVjMmVcdTVjMmZcdTVjMzBcdTVjMzJcdTVjMzNcdTVjMzVcdTVjMzZcdTVjMzdcdTVjNDNcdTVjNDRcdTVjNDZcdTVjNDdcdTVjNGNcdTVjNGRcdTVjNTJcdTVjNTNcdTVjNTRcdTVjNTZcdTVjNTdcdTVjNThcdTVj''@;'; put 'put ''NWFcdTVjNWJcdTVjNWNcdTVjNWRcdTVjNWZcdTVjNjJcdTVjNjRcdTVjNjdcdTVjNjhcdTVjNjlcdTVjNmFcdTVjNmJcdTVjNmNcdTVjNmRcdTVjNzBcdTVjNzJcdTVjNzNcdTVjNzRcdTVjNzVcdTVjNzZcdTVjNzdcdTVjNzhcdTVjN2JcdTVjN2NcdTVjN2RcdTVjN2VcdTVjODBcdTVjODNc''@;'; put 'put ''dTVjODRcdTVjODVcdTVjODZcdTVjODdcdTVjODlcdTVjOGFcdTVjOGJcdTVjOGVcdTVjOGZcdTVjOTJcdTVjOTNcdTVjOTVcdTVjOWRcdTVjOWVcdTVjOWZcdTVjYTBcdTVjYTFcdTVjYTRcdTVjYTVcdTVjYTZcdTVjYTdcdTVjYThcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNDBdLmxl''@;'; put 'put ''bmd0aDsrK2cpNjU1MzMhPT15WzE0MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNDBdW2ddXT0zNTg0MCtnLF9bMzU4NDArZ109eVsxNDBdW2ddKTtmb3IoeVsxNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVjYWFcdTVjYWVc''@;'; put 'put ''dTVjYWZcdTVjYjBcdTVjYjJcdTVjYjRcdTVjYjZcdTVjYjlcdTVjYmFcdTVjYmJcdTVjYmNcdTVjYmVcdTVjYzBcdTVjYzJcdTVjYzNcdTVjYzVcdTVjYzZcdTVjYzdcdTVjYzhcdTVjYzlcdTVjY2FcdTVjY2NcdTVjY2RcdTVjY2VcdTVjY2ZcdTVjZDBcdTVjZDFcdTVjZDNcdTVjZDRcdTVj''@;'; put 'put ''ZDVcdTVjZDZcdTVjZDdcdTVjZDhcdTVjZGFcdTVjZGJcdTVjZGNcdTVjZGRcdTVjZGVcdTVjZGZcdTVjZTBcdTVjZTJcdTVjZTNcdTVjZTdcdTVjZTlcdTVjZWJcdTVjZWNcdTVjZWVcdTVjZWZcdTVjZjFcdTVjZjJcdTVjZjNcdTVjZjRcdTVjZjVcdTVjZjZcdTVjZjdcdTVjZjhcdTVjZjlc''@;'; put 'put ''dTVjZmFcdTVjZmNcdTVjZmRcdTVjZmVcdTVjZmZcdTVkMDBcdWZmZmRcdTVkMDFcdTVkMDRcdTVkMDVcdTVkMDhcdTVkMDlcdTVkMGFcdTVkMGJcdTVkMGNcdTVkMGRcdTVkMGZcdTVkMTBcdTVkMTFcdTVkMTJcdTVkMTNcdTVkMTVcdTVkMTdcdTVkMThcdTVkMTlcdTVkMWFcdTVkMWNcdTVk''@;'; put 'put ''MWRcdTVkMWZcdTVkMjBcdTVkMjFcdTVkMjJcdTVkMjNcdTVkMjVcdTVkMjhcdTVkMmFcdTVkMmJcdTVkMmNcdTVkMmZcdTVkMzBcdTVkMzFcdTVkMzJcdTVkMzNcdTVkMzVcdTVkMzZcdTVkMzdcdTVkMzhcdTVkMzlcdTVkM2FcdTVkM2JcdTVkM2NcdTVkM2ZcdTVkNDBcdTVkNDFcdTVkNDJc''@;'; put 'put ''dTVkNDNcdTVkNDRcdTVkNDVcdTVkNDZcdTVkNDhcdTVkNDlcdTVkNGRcdTVkNGVcdTVkNGZcdTVkNTBcdTVkNTFcdTVkNTJcdTVkNTNcdTVkNTRcdTVkNTVcdTVkNTZcdTVkNTdcdTVkNTlcdTVkNWFcdTVkNWNcdTVkNWVcdTVkNWZcdTVkNjBcdTVkNjFcdTVkNjJcdTVkNjNcdTVkNjRcdTVk''@;'; put 'put ''NjVcdTVkNjZcdTVkNjdcdTVkNjhcdTVkNmFcdTVkNmRcdTVkNmVcdTVkNzBcdTVkNzFcdTVkNzJcdTVkNzNcdTVkNzVcdTVkNzZcdTVkNzdcdTVkNzhcdTVkNzlcdTVkN2FcdTVkN2JcdTVkN2NcdTVkN2RcdTVkN2VcdTVkN2ZcdTVkODBcdTVkODFcdTVkODNcdTVkODRcdTVkODVcdTVkODZc''@;'; put 'put ''dTVkODdcdTVkODhcdTVkODlcdTVkOGFcdTVkOGJcdTVkOGNcdTVkOGRcdTVkOGVcdTVkOGZcdTVkOTBcdTVkOTFcdTVkOTJcdTVkOTNcdTVkOTRcdTVkOTVcdTVkOTZcdTVkOTdcdTVkOThcdTVkOWFcdTVkOWJcdTVkOWNcdTVkOWVcdTVkOWZcdTVkYTBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7''@;'; put 'put ''ZyE9eVsxNDFdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE0MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNDFdW2ddXT0zNjA5NitnLF9bMzYwOTYrZ109eVsxNDFdW2ddKTtmb3IoeVsxNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTVkYTFcdTVkYTJcdTVkYTNcdTVkYTRcdTVkYTVcdTVkYTZcdTVkYTdcdTVkYThcdTVkYTlcdTVkYWFcdTVkYWJcdTVkYWNcdTVkYWRcdTVkYWVcdTVkYWZcdTVkYjBcdTVkYjFcdTVkYjJcdTVkYjNcdTVkYjRcdTVkYjVcdTVkYjZcdTVkYjhcdTVkYjlcdTVkYmFcdTVkYmJcdTVkYmNcdTVk''@;'; put 'put ''YmRcdTVkYmVcdTVkYmZcdTVkYzBcdTVkYzFcdTVkYzJcdTVkYzNcdTVkYzRcdTVkYzZcdTVkYzdcdTVkYzhcdTVkYzlcdTVkY2FcdTVkY2JcdTVkY2NcdTVkY2VcdTVkY2ZcdTVkZDBcdTVkZDFcdTVkZDJcdTVkZDNcdTVkZDRcdTVkZDVcdTVkZDZcdTVkZDdcdTVkZDhcdTVkZDlcdTVkZGFc''@;'; put 'put ''dTVkZGNcdTVkZGZcdTVkZTBcdTVkZTNcdTVkZTRcdTVkZWFcdTVkZWNcdTVkZWRcdWZmZmRcdTVkZjBcdTVkZjVcdTVkZjZcdTVkZjhcdTVkZjlcdTVkZmFcdTVkZmJcdTVkZmNcdTVkZmZcdTVlMDBcdTVlMDRcdTVlMDdcdTVlMDlcdTVlMGFcdTVlMGJcdTVlMGRcdTVlMGVcdTVlMTJcdTVl''@;'; put 'put ''MTNcdTVlMTdcdTVlMWVcdTVlMWZcdTVlMjBcdTVlMjFcdTVlMjJcdTVlMjNcdTVlMjRcdTVlMjVcdTVlMjhcdTVlMjlcdTVlMmFcdTVlMmJcdTVlMmNcdTVlMmZcdTVlMzBcdTVlMzJcdTVlMzNcdTVlMzRcdTVlMzVcdTVlMzZcdTVlMzlcdTVlM2FcdTVlM2VcdTVlM2ZcdTVlNDBcdTVlNDFc''@;'; put 'put ''dTVlNDNcdTVlNDZcdTVlNDdcdTVlNDhcdTVlNDlcdTVlNGFcdTVlNGJcdTVlNGRcdTVlNGVcdTVlNGZcdTVlNTBcdTVlNTFcdTVlNTJcdTVlNTNcdTVlNTZcdTVlNTdcdTVlNThcdTVlNTlcdTVlNWFcdTVlNWNcdTVlNWRcdTVlNWZcdTVlNjBcdTVlNjNcdTVlNjRcdTVlNjVcdTVlNjZcdTVl''@;'; put 'put ''NjdcdTVlNjhcdTVlNjlcdTVlNmFcdTVlNmJcdTVlNmNcdTVlNmRcdTVlNmVcdTVlNmZcdTVlNzBcdTVlNzFcdTVlNzVcdTVlNzdcdTVlNzlcdTVlN2VcdTVlODFcdTVlODJcdTVlODNcdTVlODVcdTVlODhcdTVlODlcdTVlOGNcdTVlOGRcdTVlOGVcdTVlOTJcdTVlOThcdTVlOWJcdTVlOWRc''@;'; put 'put ''dTVlYTFcdTVlYTJcdTVlYTNcdTVlYTRcdTVlYThcdTVlYTlcdTVlYWFcdTVlYWJcdTVlYWNcdTVlYWVcdTVlYWZcdTVlYjBcdTVlYjFcdTVlYjJcdTVlYjRcdTVlYmFcdTVlYmJcdTVlYmNcdTVlYmRcdTVlYmZcdTVlYzBcdTVlYzFcdTVlYzJcdTVlYzNcdTVlYzRcdTVlYzVcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxnPTA7ZyE9eVsxNDJdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE0Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNDJdW2ddXT0zNjM1MitnLF9bMzYzNTIrZ109eVsxNDJdW2ddKTtmb3IoeVsxNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTVlYzZcdTVlYzdcdTVlYzhcdTVlY2JcdTVlY2NcdTVlY2RcdTVlY2VcdTVlY2ZcdTVlZDBcdTVlZDRcdTVlZDVcdTVlZDdcdTVlZDhcdTVlZDlcdTVlZGFcdTVlZGNcdTVlZGRcdTVlZGVcdTVlZGZcdTVlZTBcdTVlZTFcdTVlZTJcdTVlZTNcdTVlZTRcdTVlZTVcdTVl''@;'; put 'put ''ZTZcdTVlZTdcdTVlZTlcdTVlZWJcdTVlZWNcdTVlZWRcdTVlZWVcdTVlZWZcdTVlZjBcdTVlZjFcdTVlZjJcdTVlZjNcdTVlZjVcdTVlZjhcdTVlZjlcdTVlZmJcdTVlZmNcdTVlZmRcdTVmMDVcdTVmMDZcdTVmMDdcdTVmMDlcdTVmMGNcdTVmMGRcdTVmMGVcdTVmMTBcdTVmMTJcdTVmMTRc''@;'; put 'put ''dTVmMTZcdTVmMTlcdTVmMWFcdTVmMWNcdTVmMWRcdTVmMWVcdTVmMjFcdTVmMjJcdTVmMjNcdTVmMjRcdWZmZmRcdTVmMjhcdTVmMmJcdTVmMmNcdTVmMmVcdTVmMzBcdTVmMzJcdTVmMzNcdTVmMzRcdTVmMzVcdTVmMzZcdTVmMzdcdTVmMzhcdTVmM2JcdTVmM2RcdTVmM2VcdTVmM2ZcdTVm''@;'; put 'put ''NDFcdTVmNDJcdTVmNDNcdTVmNDRcdTVmNDVcdTVmNDZcdTVmNDdcdTVmNDhcdTVmNDlcdTVmNGFcdTVmNGJcdTVmNGNcdTVmNGRcdTVmNGVcdTVmNGZcdTVmNTFcdTVmNTRcdTVmNTlcdTVmNWFcdTVmNWJcdTVmNWNcdTVmNWVcdTVmNWZcdTVmNjBcdTVmNjNcdTVmNjVcdTVmNjdcdTVmNjhc''@;'; put 'put ''dTVmNmJcdTVmNmVcdTVmNmZcdTVmNzJcdTVmNzRcdTVmNzVcdTVmNzZcdTVmNzhcdTVmN2FcdTVmN2RcdTVmN2VcdTVmN2ZcdTVmODNcdTVmODZcdTVmOGRcdTVmOGVcdTVmOGZcdTVmOTFcdTVmOTNcdTVmOTRcdTVmOTZcdTVmOWFcdTVmOWJcdTVmOWRcdTVmOWVcdTVmOWZcdTVmYTBcdTVm''@;'; put 'put ''YTJcdTVmYTNcdTVmYTRcdTVmYTVcdTVmYTZcdTVmYTdcdTVmYTlcdTVmYWJcdTVmYWNcdTVmYWZcdTVmYjBcdTVmYjFcdTVmYjJcdTVmYjNcdTVmYjRcdTVmYjZcdTVmYjhcdTVmYjlcdTVmYmFcdTVmYmJcdTVmYmVcdTVmYmZcdTVmYzBcdTVmYzFcdTVmYzJcdTVmYzdcdTVmYzhcdTVmY2Fc''@;'; put 'put ''dTVmY2JcdTVmY2VcdTVmZDNcdTVmZDRcdTVmZDVcdTVmZGFcdTVmZGJcdTVmZGNcdTVmZGVcdTVmZGZcdTVmZTJcdTVmZTNcdTVmZTVcdTVmZTZcdTVmZThcdTVmZTlcdTVmZWNcdTVmZWZcdTVmZjBcdTVmZjJcdTVmZjNcdTVmZjRcdTVmZjZcdTVmZjdcdTVmZjlcdTVmZmFcdTVmZmNcdTYw''@;'; put 'put ''MDdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNDNdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE0M11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNDNdW2ddXT0zNjYwOCtnLF9bMzY2MDgrZ109eVsxNDNdW2ddKTtmb3IoeVsxNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwMDhcdTYwMDlcdTYwMGJcdTYwMGNcdTYwMTBcdTYwMTFcdTYwMTNcdTYwMTdcdTYwMThcdTYwMWFcdTYwMWVcdTYwMWZcdTYwMjJcdTYwMjNcdTYwMjRcdTYwMmNcdTYwMmRcdTYwMmVcdTYwMzBcdTYwMzFcdTYwMzJcdTYwMzNcdTYwMzRcdTYw''@;'; put 'put ''MzZcdTYwMzdcdTYwMzhcdTYwMzlcdTYwM2FcdTYwM2RcdTYwM2VcdTYwNDBcdTYwNDRcdTYwNDVcdTYwNDZcdTYwNDdcdTYwNDhcdTYwNDlcdTYwNGFcdTYwNGNcdTYwNGVcdTYwNGZcdTYwNTFcdTYwNTNcdTYwNTRcdTYwNTZcdTYwNTdcdTYwNThcdTYwNWJcdTYwNWNcdTYwNWVcdTYwNWZc''@;'; put 'put ''dTYwNjBcdTYwNjFcdTYwNjVcdTYwNjZcdTYwNmVcdTYwNzFcdTYwNzJcdTYwNzRcdTYwNzVcdTYwNzdcdTYwN2VcdTYwODBcdWZmZmRcdTYwODFcdTYwODJcdTYwODVcdTYwODZcdTYwODdcdTYwODhcdTYwOGFcdTYwOGJcdTYwOGVcdTYwOGZcdTYwOTBcdTYwOTFcdTYwOTNcdTYwOTVcdTYw''@;'; put 'put ''OTdcdTYwOThcdTYwOTlcdTYwOWNcdTYwOWVcdTYwYTFcdTYwYTJcdTYwYTRcdTYwYTVcdTYwYTdcdTYwYTlcdTYwYWFcdTYwYWVcdTYwYjBcdTYwYjNcdTYwYjVcdTYwYjZcdTYwYjdcdTYwYjlcdTYwYmFcdTYwYmRcdTYwYmVcdTYwYmZcdTYwYzBcdTYwYzFcdTYwYzJcdTYwYzNcdTYwYzRc''@;'; put 'put ''dTYwYzdcdTYwYzhcdTYwYzlcdTYwY2NcdTYwY2RcdTYwY2VcdTYwY2ZcdTYwZDBcdTYwZDJcdTYwZDNcdTYwZDRcdTYwZDZcdTYwZDdcdTYwZDlcdTYwZGJcdTYwZGVcdTYwZTFcdTYwZTJcdTYwZTNcdTYwZTRcdTYwZTVcdTYwZWFcdTYwZjFcdTYwZjJcdTYwZjVcdTYwZjdcdTYwZjhcdTYw''@;'; put 'put ''ZmJcdTYwZmNcdTYwZmRcdTYwZmVcdTYwZmZcdTYxMDJcdTYxMDNcdTYxMDRcdTYxMDVcdTYxMDdcdTYxMGFcdTYxMGJcdTYxMGNcdTYxMTBcdTYxMTFcdTYxMTJcdTYxMTNcdTYxMTRcdTYxMTZcdTYxMTdcdTYxMThcdTYxMTlcdTYxMWJcdTYxMWNcdTYxMWRcdTYxMWVcdTYxMjFcdTYxMjJc''@;'; put 'put ''dTYxMjVcdTYxMjhcdTYxMjlcdTYxMmFcdTYxMmNcdTYxMmRcdTYxMmVcdTYxMmZcdTYxMzBcdTYxMzFcdTYxMzJcdTYxMzNcdTYxMzRcdTYxMzVcdTYxMzZcdTYxMzdcdTYxMzhcdTYxMzlcdTYxM2FcdTYxM2JcdTYxM2NcdTYxM2RcdTYxM2VcdTYxNDBcdTYxNDFcdTYxNDJcdTYxNDNcdTYx''@;'; put 'put ''NDRcdTYxNDVcdTYxNDZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNDRdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE0NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNDRdW2ddXT0zNjg2NCtnLF9bMzY4NjQrZ109eVsxNDRdW2ddKTtmb3IoeVsxNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYxNDdcdTYxNDlcdTYxNGJcdTYxNGRcdTYxNGZcdTYxNTBcdTYxNTJcdTYxNTNcdTYxNTRcdTYxNTZcdTYxNTdcdTYxNThcdTYxNTlcdTYxNWFcdTYxNWJcdTYxNWNcdTYxNWVcdTYxNWZcdTYxNjBcdTYxNjFcdTYxNjNcdTYx''@;'; put 'put ''NjRcdTYxNjVcdTYxNjZcdTYxNjlcdTYxNmFcdTYxNmJcdTYxNmNcdTYxNmRcdTYxNmVcdTYxNmZcdTYxNzFcdTYxNzJcdTYxNzNcdTYxNzRcdTYxNzZcdTYxNzhcdTYxNzlcdTYxN2FcdTYxN2JcdTYxN2NcdTYxN2RcdTYxN2VcdTYxN2ZcdTYxODBcdTYxODFcdTYxODJcdTYxODNcdTYxODRc''@;'; put 'put ''dTYxODVcdTYxODZcdTYxODdcdTYxODhcdTYxODlcdTYxOGFcdTYxOGNcdTYxOGRcdTYxOGZcdTYxOTBcdTYxOTFcdTYxOTJcdTYxOTNcdTYxOTVcdWZmZmRcdTYxOTZcdTYxOTdcdTYxOThcdTYxOTlcdTYxOWFcdTYxOWJcdTYxOWNcdTYxOWVcdTYxOWZcdTYxYTBcdTYxYTFcdTYxYTJcdTYx''@;'; put 'put ''YTNcdTYxYTRcdTYxYTVcdTYxYTZcdTYxYWFcdTYxYWJcdTYxYWRcdTYxYWVcdTYxYWZcdTYxYjBcdTYxYjFcdTYxYjJcdTYxYjNcdTYxYjRcdTYxYjVcdTYxYjZcdTYxYjhcdTYxYjlcdTYxYmFcdTYxYmJcdTYxYmNcdTYxYmRcdTYxYmZcdTYxYzBcdTYxYzFcdTYxYzNcdTYxYzRcdTYxYzVc''@;'; put 'put ''dTYxYzZcdTYxYzdcdTYxYzlcdTYxY2NcdTYxY2RcdTYxY2VcdTYxY2ZcdTYxZDBcdTYxZDNcdTYxZDVcdTYxZDZcdTYxZDdcdTYxZDhcdTYxZDlcdTYxZGFcdTYxZGJcdTYxZGNcdTYxZGRcdTYxZGVcdTYxZGZcdTYxZTBcdTYxZTFcdTYxZTJcdTYxZTNcdTYxZTRcdTYxZTVcdTYxZTdcdTYx''@;'; put 'put ''ZThcdTYxZTlcdTYxZWFcdTYxZWJcdTYxZWNcdTYxZWRcdTYxZWVcdTYxZWZcdTYxZjBcdTYxZjFcdTYxZjJcdTYxZjNcdTYxZjRcdTYxZjZcdTYxZjdcdTYxZjhcdTYxZjlcdTYxZmFcdTYxZmJcdTYxZmNcdTYxZmRcdTYxZmVcdTYyMDBcdTYyMDFcdTYyMDJcdTYyMDNcdTYyMDRcdTYyMDVc''@;'; put 'put ''dTYyMDdcdTYyMDlcdTYyMTNcdTYyMTRcdTYyMTlcdTYyMWNcdTYyMWRcdTYyMWVcdTYyMjBcdTYyMjNcdTYyMjZcdTYyMjdcdTYyMjhcdTYyMjlcdTYyMmJcdTYyMmRcdTYyMmZcdTYyMzBcdTYyMzFcdTYyMzJcdTYyMzVcdTYyMzZcdTYyMzhcdTYyMzlcdTYyM2FcdTYyM2JcdTYyM2NcdTYy''@;'; put 'put ''NDJcdTYyNDRcdTYyNDVcdTYyNDZcdTYyNGFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNDVdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE0NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNDVdW2ddXT0zNzEyMCtnLF9bMzcxMjArZ109eVsxNDVdW2ddKTtmb3IoeVsxNDZdPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyNGZcdTYyNTBcdTYyNTVcdTYyNTZcdTYyNTdcdTYyNTlcdTYyNWFcdTYyNWNcdTYyNWRcdTYyNWVcdTYyNWZcdTYyNjBcdTYyNjFcdTYyNjJcdTYyNjRcdTYyNjVcdTYyNjhcdTYyNzFcdTYyNzJcdTYy''@;'; put 'put ''NzRcdTYyNzVcdTYyNzdcdTYyNzhcdTYyN2FcdTYyN2JcdTYyN2RcdTYyODFcdTYyODJcdTYyODNcdTYyODVcdTYyODZcdTYyODdcdTYyODhcdTYyOGJcdTYyOGNcdTYyOGRcdTYyOGVcdTYyOGZcdTYyOTBcdTYyOTRcdTYyOTlcdTYyOWNcdTYyOWRcdTYyOWVcdTYyYTNcdTYyYTZcdTYyYTdc''@;'; put 'put ''dTYyYTlcdTYyYWFcdTYyYWRcdTYyYWVcdTYyYWZcdTYyYjBcdTYyYjJcdTYyYjNcdTYyYjRcdTYyYjZcdTYyYjdcdTYyYjhcdTYyYmFcdTYyYmVcdTYyYzBcdTYyYzFcdWZmZmRcdTYyYzNcdTYyY2JcdTYyY2ZcdTYyZDFcdTYyZDVcdTYyZGRcdTYyZGVcdTYyZTBcdTYyZTFcdTYyZTRcdTYy''@;'; put 'put ''ZWFcdTYyZWJcdTYyZjBcdTYyZjJcdTYyZjVcdTYyZjhcdTYyZjlcdTYyZmFcdTYyZmJcdTYzMDBcdTYzMDNcdTYzMDRcdTYzMDVcdTYzMDZcdTYzMGFcdTYzMGJcdTYzMGNcdTYzMGRcdTYzMGZcdTYzMTBcdTYzMTJcdTYzMTNcdTYzMTRcdTYzMTVcdTYzMTdcdTYzMThcdTYzMTlcdTYzMWNc''@;'; put 'put ''dTYzMjZcdTYzMjdcdTYzMjlcdTYzMmNcdTYzMmRcdTYzMmVcdTYzMzBcdTYzMzFcdTYzMzNcdTYzMzRcdTYzMzVcdTYzMzZcdTYzMzdcdTYzMzhcdTYzM2JcdTYzM2NcdTYzM2VcdTYzM2ZcdTYzNDBcdTYzNDFcdTYzNDRcdTYzNDdcdTYzNDhcdTYzNGFcdTYzNTFcdTYzNTJcdTYzNTNcdTYz''@;'; put 'put ''NTRcdTYzNTZcdTYzNTdcdTYzNThcdTYzNTlcdTYzNWFcdTYzNWJcdTYzNWNcdTYzNWRcdTYzNjBcdTYzNjRcdTYzNjVcdTYzNjZcdTYzNjhcdTYzNmFcdTYzNmJcdTYzNmNcdTYzNmZcdTYzNzBcdTYzNzJcdTYzNzNcdTYzNzRcdTYzNzVcdTYzNzhcdTYzNzlcdTYzN2NcdTYzN2RcdTYzN2Vc''@;'; put 'put ''dTYzN2ZcdTYzODFcdTYzODNcdTYzODRcdTYzODVcdTYzODZcdTYzOGJcdTYzOGRcdTYzOTFcdTYzOTNcdTYzOTRcdTYzOTVcdTYzOTdcdTYzOTlcdTYzOWFcdTYzOWJcdTYzOWNcdTYzOWRcdTYzOWVcdTYzOWZcdTYzYTFcdTYzYTRcdTYzYTZcdTYzYWJcdTYzYWZcdTYzYjFcdTYzYjJcdTYz''@;'; put 'put ''YjVcdTYzYjZcdTYzYjlcdTYzYmJcdTYzYmRcdTYzYmZcdTYzYzBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNDZdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE0Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNDZdW2ddXT0zNzM3NitnLF9bMzczNzYrZ109eVsxNDZdW2ddKTtmb3IoeVsx''@;'; put 'put ''NDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYzYzFcdTYzYzJcdTYzYzNcdTYzYzVcdTYzYzdcdTYzYzhcdTYzY2FcdTYzY2JcdTYzY2NcdTYzZDFcdTYzZDNcdTYzZDRcdTYzZDVcdTYzZDdcdTYzZDhcdTYzZDlcdTYzZGFcdTYz''@;'; put 'put ''ZGJcdTYzZGNcdTYzZGRcdTYzZGZcdTYzZTJcdTYzZTRcdTYzZTVcdTYzZTZcdTYzZTdcdTYzZThcdTYzZWJcdTYzZWNcdTYzZWVcdTYzZWZcdTYzZjBcdTYzZjFcdTYzZjNcdTYzZjVcdTYzZjdcdTYzZjlcdTYzZmFcdTYzZmJcdTYzZmNcdTYzZmVcdTY0MDNcdTY0MDRcdTY0MDZcdTY0MDdc''@;'; put 'put ''dTY0MDhcdTY0MDlcdTY0MGFcdTY0MGRcdTY0MGVcdTY0MTFcdTY0MTJcdTY0MTVcdTY0MTZcdTY0MTdcdTY0MThcdTY0MTlcdTY0MWFcdTY0MWRcdTY0MWZcdTY0MjJcdTY0MjNcdTY0MjRcdWZmZmRcdTY0MjVcdTY0MjdcdTY0MjhcdTY0MjlcdTY0MmJcdTY0MmVcdTY0MmZcdTY0MzBcdTY0''@;'; put 'put ''MzFcdTY0MzJcdTY0MzNcdTY0MzVcdTY0MzZcdTY0MzdcdTY0MzhcdTY0MzlcdTY0M2JcdTY0M2NcdTY0M2VcdTY0NDBcdTY0NDJcdTY0NDNcdTY0NDlcdTY0NGJcdTY0NGNcdTY0NGRcdTY0NGVcdTY0NGZcdTY0NTBcdTY0NTFcdTY0NTNcdTY0NTVcdTY0NTZcdTY0NTdcdTY0NTlcdTY0NWFc''@;'; put 'put ''dTY0NWJcdTY0NWNcdTY0NWRcdTY0NWZcdTY0NjBcdTY0NjFcdTY0NjJcdTY0NjNcdTY0NjRcdTY0NjVcdTY0NjZcdTY0NjhcdTY0NmFcdTY0NmJcdTY0NmNcdTY0NmVcdTY0NmZcdTY0NzBcdTY0NzFcdTY0NzJcdTY0NzNcdTY0NzRcdTY0NzVcdTY0NzZcdTY0NzdcdTY0N2JcdTY0N2NcdTY0''@;'; put 'put ''N2RcdTY0N2VcdTY0N2ZcdTY0ODBcdTY0ODFcdTY0ODNcdTY0ODZcdTY0ODhcdTY0ODlcdTY0OGFcdTY0OGJcdTY0OGNcdTY0OGRcdTY0OGVcdTY0OGZcdTY0OTBcdTY0OTNcdTY0OTRcdTY0OTdcdTY0OThcdTY0OWFcdTY0OWJcdTY0OWNcdTY0OWRcdTY0OWZcdTY0YTBcdTY0YTFcdTY0YTJc''@;'; put 'put ''dTY0YTNcdTY0YTVcdTY0YTZcdTY0YTdcdTY0YThcdTY0YWFcdTY0YWJcdTY0YWZcdTY0YjFcdTY0YjJcdTY0YjNcdTY0YjRcdTY0YjZcdTY0YjlcdTY0YmJcdTY0YmRcdTY0YmVcdTY0YmZcdTY0YzFcdTY0YzNcdTY0YzRcdTY0YzZcdTY0YzdcdTY0YzhcdTY0YzlcdTY0Y2FcdTY0Y2JcdTY0''@;'; put 'put ''Y2NcdTY0Y2ZcdTY0ZDFcdTY0ZDNcdTY0ZDRcdTY0ZDVcdTY0ZDZcdTY0ZDlcdTY0ZGFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNDddLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE0N11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNDddW2ddXT0zNzYzMitnLF9bMzc2MzIrZ109eVsxNDdd''@;'; put 'put ''W2ddKTtmb3IoeVsxNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0ZGJcdTY0ZGNcdTY0ZGRcdTY0ZGZcdTY0ZTBcdTY0ZTFcdTY0ZTNcdTY0ZTVcdTY0ZTdcdTY0ZThcdTY0ZTlcdTY0ZWFcdTY0ZWJcdTY0ZWNcdTY0ZWRcdTY0''@;'; put 'put ''ZWVcdTY0ZWZcdTY0ZjBcdTY0ZjFcdTY0ZjJcdTY0ZjNcdTY0ZjRcdTY0ZjVcdTY0ZjZcdTY0ZjdcdTY0ZjhcdTY0ZjlcdTY0ZmFcdTY0ZmJcdTY0ZmNcdTY0ZmRcdTY0ZmVcdTY0ZmZcdTY1MDFcdTY1MDJcdTY1MDNcdTY1MDRcdTY1MDVcdTY1MDZcdTY1MDdcdTY1MDhcdTY1MGFcdTY1MGJc''@;'; put 'put ''dTY1MGNcdTY1MGRcdTY1MGVcdTY1MGZcdTY1MTBcdTY1MTFcdTY1MTNcdTY1MTRcdTY1MTVcdTY1MTZcdTY1MTdcdTY1MTlcdTY1MWFcdTY1MWJcdTY1MWNcdTY1MWRcdTY1MWVcdTY1MWZcdTY1MjBcdTY1MjFcdWZmZmRcdTY1MjJcdTY1MjNcdTY1MjRcdTY1MjZcdTY1MjdcdTY1MjhcdTY1''@;'; put 'put ''MjlcdTY1MmFcdTY1MmNcdTY1MmRcdTY1MzBcdTY1MzFcdTY1MzJcdTY1MzNcdTY1MzdcdTY1M2FcdTY1M2NcdTY1M2RcdTY1NDBcdTY1NDFcdTY1NDJcdTY1NDNcdTY1NDRcdTY1NDZcdTY1NDdcdTY1NGFcdTY1NGJcdTY1NGRcdTY1NGVcdTY1NTBcdTY1NTJcdTY1NTNcdTY1NTRcdTY1NTdc''@;'; put 'put ''dTY1NThcdTY1NWFcdTY1NWNcdTY1NWZcdTY1NjBcdTY1NjFcdTY1NjRcdTY1NjVcdTY1NjdcdTY1NjhcdTY1NjlcdTY1NmFcdTY1NmRcdTY1NmVcdTY1NmZcdTY1NzFcdTY1NzNcdTY1NzVcdTY1NzZcdTY1NzhcdTY1NzlcdTY1N2FcdTY1N2JcdTY1N2NcdTY1N2RcdTY1N2VcdTY1N2ZcdTY1''@;'; put 'put ''ODBcdTY1ODFcdTY1ODJcdTY1ODNcdTY1ODRcdTY1ODVcdTY1ODZcdTY1ODhcdTY1ODlcdTY1OGFcdTY1OGRcdTY1OGVcdTY1OGZcdTY1OTJcdTY1OTRcdTY1OTVcdTY1OTZcdTY1OThcdTY1OWFcdTY1OWRcdTY1OWVcdTY1YTBcdTY1YTJcdTY1YTNcdTY1YTZcdTY1YThcdTY1YWFcdTY1YWNc''@;'; put 'put ''dTY1YWVcdTY1YjFcdTY1YjJcdTY1YjNcdTY1YjRcdTY1YjVcdTY1YjZcdTY1YjdcdTY1YjhcdTY1YmFcdTY1YmJcdTY1YmVcdTY1YmZcdTY1YzBcdTY1YzJcdTY1YzdcdTY1YzhcdTY1YzlcdTY1Y2FcdTY1Y2RcdTY1ZDBcdTY1ZDFcdTY1ZDNcdTY1ZDRcdTY1ZDVcdTY1ZDhcdTY1ZDlcdTY1''@;'; put 'put ''ZGFcdTY1ZGJcdTY1ZGNcdTY1ZGRcdTY1ZGVcdTY1ZGZcdTY1ZTFcdTY1ZTNcdTY1ZTRcdTY1ZWFcdTY1ZWJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNDhdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE0OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNDhdW2ddXT0zNzg4OCtnLF9bMzc4''@;'; put 'put ''ODgrZ109eVsxNDhdW2ddKTtmb3IoeVsxNDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY1ZjJcdTY1ZjNcdTY1ZjRcdTY1ZjVcdTY1ZjhcdTY1ZjlcdTY1ZmJcdTY1ZmNcdTY1ZmRcdTY1ZmVcdTY1ZmZcdTY2MDFcdTY2MDRcdTY2''@;'; put 'put ''MDVcdTY2MDdcdTY2MDhcdTY2MDlcdTY2MGJcdTY2MGRcdTY2MTBcdTY2MTFcdTY2MTJcdTY2MTZcdTY2MTdcdTY2MThcdTY2MWFcdTY2MWJcdTY2MWNcdTY2MWVcdTY2MjFcdTY2MjJcdTY2MjNcdTY2MjRcdTY2MjZcdTY2MjlcdTY2MmFcdTY2MmJcdTY2MmNcdTY2MmVcdTY2MzBcdTY2MzJc''@;'; put 'put ''dTY2MzNcdTY2MzdcdTY2MzhcdTY2MzlcdTY2M2FcdTY2M2JcdTY2M2RcdTY2M2ZcdTY2NDBcdTY2NDJcdTY2NDRcdTY2NDVcdTY2NDZcdTY2NDdcdTY2NDhcdTY2NDlcdTY2NGFcdTY2NGRcdTY2NGVcdTY2NTBcdTY2NTFcdTY2NThcdWZmZmRcdTY2NTlcdTY2NWJcdTY2NWNcdTY2NWRcdTY2''@;'; put 'put ''NWVcdTY2NjBcdTY2NjJcdTY2NjNcdTY2NjVcdTY2NjdcdTY2NjlcdTY2NmFcdTY2NmJcdTY2NmNcdTY2NmRcdTY2NzFcdTY2NzJcdTY2NzNcdTY2NzVcdTY2NzhcdTY2NzlcdTY2N2JcdTY2N2NcdTY2N2RcdTY2N2ZcdTY2ODBcdTY2ODFcdTY2ODNcdTY2ODVcdTY2ODZcdTY2ODhcdTY2ODlc''@;'; put 'put ''dTY2OGFcdTY2OGJcdTY2OGRcdTY2OGVcdTY2OGZcdTY2OTBcdTY2OTJcdTY2OTNcdTY2OTRcdTY2OTVcdTY2OThcdTY2OTlcdTY2OWFcdTY2OWJcdTY2OWNcdTY2OWVcdTY2OWZcdTY2YTBcdTY2YTFcdTY2YTJcdTY2YTNcdTY2YTRcdTY2YTVcdTY2YTZcdTY2YTlcdTY2YWFcdTY2YWJcdTY2''@;'; put 'put ''YWNcdTY2YWRcdTY2YWZcdTY2YjBcdTY2YjFcdTY2YjJcdTY2YjNcdTY2YjVcdTY2YjZcdTY2YjdcdTY2YjhcdTY2YmFcdTY2YmJcdTY2YmNcdTY2YmRcdTY2YmZcdTY2YzBcdTY2YzFcdTY2YzJcdTY2YzNcdTY2YzRcdTY2YzVcdTY2YzZcdTY2YzdcdTY2YzhcdTY2YzlcdTY2Y2FcdTY2Y2Jc''@;'; put 'put ''dTY2Y2NcdTY2Y2RcdTY2Y2VcdTY2Y2ZcdTY2ZDBcdTY2ZDFcdTY2ZDJcdTY2ZDNcdTY2ZDRcdTY2ZDVcdTY2ZDZcdTY2ZDdcdTY2ZDhcdTY2ZGFcdTY2ZGVcdTY2ZGZcdTY2ZTBcdTY2ZTFcdTY2ZTJcdTY2ZTNcdTY2ZTRcdTY2ZTVcdTY2ZTdcdTY2ZThcdTY2ZWFcdTY2ZWJcdTY2ZWNcdTY2''@;'; put 'put ''ZWRcdTY2ZWVcdTY2ZWZcdTY2ZjFcdTY2ZjVcdTY2ZjZcdTY2ZjhcdTY2ZmFcdTY2ZmJcdTY2ZmRcdTY3MDFcdTY3MDJcdTY3MDNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNDldLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE0OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNDldW2ddXT0z''@;'; put 'put ''ODE0NCtnLF9bMzgxNDQrZ109eVsxNDldW2ddKTtmb3IoeVsxNTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY3MDRcdTY3MDVcdTY3MDZcdTY3MDdcdTY3MGNcdTY3MGVcdTY3MGZcdTY3MTFcdTY3MTJcdTY3MTNcdTY3MTZcdTY3''@;'; put 'put ''MThcdTY3MTlcdTY3MWFcdTY3MWNcdTY3MWVcdTY3MjBcdTY3MjFcdTY3MjJcdTY3MjNcdTY3MjRcdTY3MjVcdTY3MjdcdTY3MjlcdTY3MmVcdTY3MzBcdTY3MzJcdTY3MzNcdTY3MzZcdTY3MzdcdTY3MzhcdTY3MzlcdTY3M2JcdTY3M2NcdTY3M2VcdTY3M2ZcdTY3NDFcdTY3NDRcdTY3NDVc''@;'; put 'put ''dTY3NDdcdTY3NGFcdTY3NGJcdTY3NGRcdTY3NTJcdTY3NTRcdTY3NTVcdTY3NTdcdTY3NThcdTY3NTlcdTY3NWFcdTY3NWJcdTY3NWRcdTY3NjJcdTY3NjNcdTY3NjRcdTY3NjZcdTY3NjdcdTY3NmJcdTY3NmNcdTY3NmVcdTY3NzFcdTY3NzRcdTY3NzZcdWZmZmRcdTY3NzhcdTY3NzlcdTY3''@;'; put 'put ''N2FcdTY3N2JcdTY3N2RcdTY3ODBcdTY3ODJcdTY3ODNcdTY3ODVcdTY3ODZcdTY3ODhcdTY3OGFcdTY3OGNcdTY3OGRcdTY3OGVcdTY3OGZcdTY3OTFcdTY3OTJcdTY3OTNcdTY3OTRcdTY3OTZcdTY3OTlcdTY3OWJcdTY3OWZcdTY3YTBcdTY3YTFcdTY3YTRcdTY3YTZcdTY3YTlcdTY3YWNc''@;'; put 'put ''dTY3YWVcdTY3YjFcdTY3YjJcdTY3YjRcdTY3YjlcdTY3YmFcdTY3YmJcdTY3YmNcdTY3YmRcdTY3YmVcdTY3YmZcdTY3YzBcdTY3YzJcdTY3YzVcdTY3YzZcdTY3YzdcdTY3YzhcdTY3YzlcdTY3Y2FcdTY3Y2JcdTY3Y2NcdTY3Y2RcdTY3Y2VcdTY3ZDVcdTY3ZDZcdTY3ZDdcdTY3ZGJcdTY3''@;'; put 'put ''ZGZcdTY3ZTFcdTY3ZTNcdTY3ZTRcdTY3ZTZcdTY3ZTdcdTY3ZThcdTY3ZWFcdTY3ZWJcdTY3ZWRcdTY3ZWVcdTY3ZjJcdTY3ZjVcdTY3ZjZcdTY3ZjdcdTY3ZjhcdTY3ZjlcdTY3ZmFcdTY3ZmJcdTY3ZmNcdTY3ZmVcdTY4MDFcdTY4MDJcdTY4MDNcdTY4MDRcdTY4MDZcdTY4MGRcdTY4MTBc''@;'; put 'put ''dTY4MTJcdTY4MTRcdTY4MTVcdTY4MThcdTY4MTlcdTY4MWFcdTY4MWJcdTY4MWNcdTY4MWVcdTY4MWZcdTY4MjBcdTY4MjJcdTY4MjNcdTY4MjRcdTY4MjVcdTY4MjZcdTY4MjdcdTY4MjhcdTY4MmJcdTY4MmNcdTY4MmRcdTY4MmVcdTY4MmZcdTY4MzBcdTY4MzFcdTY4MzRcdTY4MzVcdTY4''@;'; put 'put ''MzZcdTY4M2FcdTY4M2JcdTY4M2ZcdTY4NDdcdTY4NGJcdTY4NGRcdTY4NGZcdTY4NTJcdTY4NTZcdTY4NTdcdTY4NThcdTY4NTlcdTY4NWFcdTY4NWJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNTBdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE1MF1bZ10uY2hhckNvZGVBdCgwKSYmKElb''@;'; put 'put ''eVsxNTBdW2ddXT0zODQwMCtnLF9bMzg0MDArZ109eVsxNTBdW2ddKTtmb3IoeVsxNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY4NWNcdTY4NWRcdTY4NWVcdTY4NWZcdTY4NmFcdTY4NmNcdTY4NmRcdTY4NmVcdTY4NmZcdTY4''@;'; put 'put ''NzBcdTY4NzFcdTY4NzJcdTY4NzNcdTY4NzVcdTY4NzhcdTY4NzlcdTY4N2FcdTY4N2JcdTY4N2NcdTY4N2RcdTY4N2VcdTY4N2ZcdTY4ODBcdTY4ODJcdTY4ODRcdTY4ODdcdTY4ODhcdTY4ODlcdTY4OGFcdTY4OGJcdTY4OGNcdTY4OGRcdTY4OGVcdTY4OTBcdTY4OTFcdTY4OTJcdTY4OTRc''@;'; put 'put ''dTY4OTVcdTY4OTZcdTY4OThcdTY4OTlcdTY4OWFcdTY4OWJcdTY4OWNcdTY4OWRcdTY4OWVcdTY4OWZcdTY4YTBcdTY4YTFcdTY4YTNcdTY4YTRcdTY4YTVcdTY4YTlcdTY4YWFcdTY4YWJcdTY4YWNcdTY4YWVcdTY4YjFcdTY4YjJcdTY4YjRcdTY4YjZcdTY4YjdcdTY4YjhcdWZmZmRcdTY4''@;'; put 'put ''YjlcdTY4YmFcdTY4YmJcdTY4YmNcdTY4YmRcdTY4YmVcdTY4YmZcdTY4YzFcdTY4YzNcdTY4YzRcdTY4YzVcdTY4YzZcdTY4YzdcdTY4YzhcdTY4Y2FcdTY4Y2NcdTY4Y2VcdTY4Y2ZcdTY4ZDBcdTY4ZDFcdTY4ZDNcdTY4ZDRcdTY4ZDZcdTY4ZDdcdTY4ZDlcdTY4ZGJcdTY4ZGNcdTY4ZGRc''@;'; put 'put ''dTY4ZGVcdTY4ZGZcdTY4ZTFcdTY4ZTJcdTY4ZTRcdTY4ZTVcdTY4ZTZcdTY4ZTdcdTY4ZThcdTY4ZTlcdTY4ZWFcdTY4ZWJcdTY4ZWNcdTY4ZWRcdTY4ZWZcdTY4ZjJcdTY4ZjNcdTY4ZjRcdTY4ZjZcdTY4ZjdcdTY4ZjhcdTY4ZmJcdTY4ZmRcdTY4ZmVcdTY4ZmZcdTY5MDBcdTY5MDJcdTY5''@;'; put 'put ''MDNcdTY5MDRcdTY5MDZcdTY5MDdcdTY5MDhcdTY5MDlcdTY5MGFcdTY5MGNcdTY5MGZcdTY5MTFcdTY5MTNcdTY5MTRcdTY5MTVcdTY5MTZcdTY5MTdcdTY5MThcdTY5MTlcdTY5MWFcdTY5MWJcdTY5MWNcdTY5MWRcdTY5MWVcdTY5MjFcdTY5MjJcdTY5MjNcdTY5MjVcdTY5MjZcdTY5Mjdc''@;'; put 'put ''dTY5MjhcdTY5MjlcdTY5MmFcdTY5MmJcdTY5MmNcdTY5MmVcdTY5MmZcdTY5MzFcdTY5MzJcdTY5MzNcdTY5MzVcdTY5MzZcdTY5MzdcdTY5MzhcdTY5M2FcdTY5M2JcdTY5M2NcdTY5M2VcdTY5NDBcdTY5NDFcdTY5NDNcdTY5NDRcdTY5NDVcdTY5NDZcdTY5NDdcdTY5NDhcdTY5NDlcdTY5''@;'; put 'put ''NGFcdTY5NGJcdTY5NGNcdTY5NGRcdTY5NGVcdTY5NGZcdTY5NTBcdTY5NTFcdTY5NTJcdTY5NTNcdTY5NTVcdTY5NTZcdTY5NThcdTY5NTlcdTY5NWJcdTY5NWNcdTY5NWZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNTFdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE1MV1bZ10uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKElbeVsxNTFdW2ddXT0zODY1NitnLF9bMzg2NTYrZ109eVsxNTFdW2ddKTtmb3IoeVsxNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY5NjFcdTY5NjJcdTY5NjRcdTY5NjVcdTY5NjdcdTY5NjhcdTY5NjlcdTY5''@;'; put 'put ''NmFcdTY5NmNcdTY5NmRcdTY5NmZcdTY5NzBcdTY5NzJcdTY5NzNcdTY5NzRcdTY5NzVcdTY5NzZcdTY5N2FcdTY5N2JcdTY5N2RcdTY5N2VcdTY5N2ZcdTY5ODFcdTY5ODNcdTY5ODVcdTY5OGFcdTY5OGJcdTY5OGNcdTY5OGVcdTY5OGZcdTY5OTBcdTY5OTFcdTY5OTJcdTY5OTNcdTY5OTZc''@;'; put 'put ''dTY5OTdcdTY5OTlcdTY5OWFcdTY5OWRcdTY5OWVcdTY5OWZcdTY5YTBcdTY5YTFcdTY5YTJcdTY5YTNcdTY5YTRcdTY5YTVcdTY5YTZcdTY5YTlcdTY5YWFcdTY5YWNcdTY5YWVcdTY5YWZcdTY5YjBcdTY5YjJcdTY5YjNcdTY5YjVcdTY5YjZcdTY5YjhcdTY5YjlcdTY5YmFcdTY5YmNcdTY5''@;'; put 'put ''YmRcdWZmZmRcdTY5YmVcdTY5YmZcdTY5YzBcdTY5YzJcdTY5YzNcdTY5YzRcdTY5YzVcdTY5YzZcdTY5YzdcdTY5YzhcdTY5YzlcdTY5Y2JcdTY5Y2RcdTY5Y2ZcdTY5ZDFcdTY5ZDJcdTY5ZDNcdTY5ZDVcdTY5ZDZcdTY5ZDdcdTY5ZDhcdTY5ZDlcdTY5ZGFcdTY5ZGNcdTY5ZGRcdTY5ZGVc''@;'; put 'put ''dTY5ZTFcdTY5ZTJcdTY5ZTNcdTY5ZTRcdTY5ZTVcdTY5ZTZcdTY5ZTdcdTY5ZThcdTY5ZTlcdTY5ZWFcdTY5ZWJcdTY5ZWNcdTY5ZWVcdTY5ZWZcdTY5ZjBcdTY5ZjFcdTY5ZjNcdTY5ZjRcdTY5ZjVcdTY5ZjZcdTY5ZjdcdTY5ZjhcdTY5ZjlcdTY5ZmFcdTY5ZmJcdTY5ZmNcdTY5ZmVcdTZh''@;'; put 'put ''MDBcdTZhMDFcdTZhMDJcdTZhMDNcdTZhMDRcdTZhMDVcdTZhMDZcdTZhMDdcdTZhMDhcdTZhMDlcdTZhMGJcdTZhMGNcdTZhMGRcdTZhMGVcdTZhMGZcdTZhMTBcdTZhMTFcdTZhMTJcdTZhMTNcdTZhMTRcdTZhMTVcdTZhMTZcdTZhMTlcdTZhMWFcdTZhMWJcdTZhMWNcdTZhMWRcdTZhMWVc''@;'; put 'put ''dTZhMjBcdTZhMjJcdTZhMjNcdTZhMjRcdTZhMjVcdTZhMjZcdTZhMjdcdTZhMjlcdTZhMmJcdTZhMmNcdTZhMmRcdTZhMmVcdTZhMzBcdTZhMzJcdTZhMzNcdTZhMzRcdTZhMzZcdTZhMzdcdTZhMzhcdTZhMzlcdTZhM2FcdTZhM2JcdTZhM2NcdTZhM2ZcdTZhNDBcdTZhNDFcdTZhNDJcdTZh''@;'; put 'put ''NDNcdTZhNDVcdTZhNDZcdTZhNDhcdTZhNDlcdTZhNGFcdTZhNGJcdTZhNGNcdTZhNGRcdTZhNGVcdTZhNGZcdTZhNTFcdTZhNTJcdTZhNTNcdTZhNTRcdTZhNTVcdTZhNTZcdTZhNTdcdTZhNWFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNTJdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE1''@;'; put 'put ''Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNTJdW2ddXT0zODkxMitnLF9bMzg5MTIrZ109eVsxNTJdW2ddKTtmb3IoeVsxNTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZhNWNcdTZhNWRcdTZhNWVcdTZhNWZcdTZhNjBcdTZh''@;'; put 'put ''NjJcdTZhNjNcdTZhNjRcdTZhNjZcdTZhNjdcdTZhNjhcdTZhNjlcdTZhNmFcdTZhNmJcdTZhNmNcdTZhNmRcdTZhNmVcdTZhNmZcdTZhNzBcdTZhNzJcdTZhNzNcdTZhNzRcdTZhNzVcdTZhNzZcdTZhNzdcdTZhNzhcdTZhN2FcdTZhN2JcdTZhN2RcdTZhN2VcdTZhN2ZcdTZhODFcdTZhODJc''@;'; put 'put ''dTZhODNcdTZhODVcdTZhODZcdTZhODdcdTZhODhcdTZhODlcdTZhOGFcdTZhOGJcdTZhOGNcdTZhOGRcdTZhOGZcdTZhOTJcdTZhOTNcdTZhOTRcdTZhOTVcdTZhOTZcdTZhOThcdTZhOTlcdTZhOWFcdTZhOWJcdTZhOWNcdTZhOWRcdTZhOWVcdTZhOWZcdTZhYTFcdTZhYTJcdTZhYTNcdTZh''@;'; put 'put ''YTRcdTZhYTVcdTZhYTZcdWZmZmRcdTZhYTdcdTZhYThcdTZhYWFcdTZhYWRcdTZhYWVcdTZhYWZcdTZhYjBcdTZhYjFcdTZhYjJcdTZhYjNcdTZhYjRcdTZhYjVcdTZhYjZcdTZhYjdcdTZhYjhcdTZhYjlcdTZhYmFcdTZhYmJcdTZhYmNcdTZhYmRcdTZhYmVcdTZhYmZcdTZhYzBcdTZhYzFc''@;'; put 'put ''dTZhYzJcdTZhYzNcdTZhYzRcdTZhYzVcdTZhYzZcdTZhYzdcdTZhYzhcdTZhYzlcdTZhY2FcdTZhY2JcdTZhY2NcdTZhY2RcdTZhY2VcdTZhY2ZcdTZhZDBcdTZhZDFcdTZhZDJcdTZhZDNcdTZhZDRcdTZhZDVcdTZhZDZcdTZhZDdcdTZhZDhcdTZhZDlcdTZhZGFcdTZhZGJcdTZhZGNcdTZh''@;'; put 'put ''ZGRcdTZhZGVcdTZhZGZcdTZhZTBcdTZhZTFcdTZhZTJcdTZhZTNcdTZhZTRcdTZhZTVcdTZhZTZcdTZhZTdcdTZhZThcdTZhZTlcdTZhZWFcdTZhZWJcdTZhZWNcdTZhZWRcdTZhZWVcdTZhZWZcdTZhZjBcdTZhZjFcdTZhZjJcdTZhZjNcdTZhZjRcdTZhZjVcdTZhZjZcdTZhZjdcdTZhZjhc''@;'; put 'put ''dTZhZjlcdTZhZmFcdTZhZmJcdTZhZmNcdTZhZmRcdTZhZmVcdTZhZmZcdTZiMDBcdTZiMDFcdTZiMDJcdTZiMDNcdTZiMDRcdTZiMDVcdTZiMDZcdTZiMDdcdTZiMDhcdTZiMDlcdTZiMGFcdTZiMGJcdTZiMGNcdTZiMGRcdTZiMGVcdTZiMGZcdTZiMTBcdTZiMTFcdTZiMTJcdTZiMTNcdTZi''@;'; put 'put ''MTRcdTZiMTVcdTZiMTZcdTZiMTdcdTZiMThcdTZiMTlcdTZiMWFcdTZiMWJcdTZiMWNcdTZiMWRcdTZiMWVcdTZiMWZcdTZiMjVcdTZiMjZcdTZiMjhcdTZiMjlcdTZiMmFcdTZiMmJcdTZiMmNcdTZiMmRcdTZiMmVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNTNdLmxlbmd0aDsrK2cp''@;'; put 'put ''NjU1MzMhPT15WzE1M11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNTNdW2ddXT0zOTE2OCtnLF9bMzkxNjgrZ109eVsxNTNdW2ddKTtmb3IoeVsxNTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZiMmZcdTZiMzBcdTZiMzFcdTZi''@;'; put 'put ''MzNcdTZiMzRcdTZiMzVcdTZiMzZcdTZiMzhcdTZiM2JcdTZiM2NcdTZiM2RcdTZiM2ZcdTZiNDBcdTZiNDFcdTZiNDJcdTZiNDRcdTZiNDVcdTZiNDhcdTZiNGFcdTZiNGJcdTZiNGRcdTZiNGVcdTZiNGZcdTZiNTBcdTZiNTFcdTZiNTJcdTZiNTNcdTZiNTRcdTZiNTVcdTZiNTZcdTZiNTdc''@;'; put 'put ''dTZiNThcdTZiNWFcdTZiNWJcdTZiNWNcdTZiNWRcdTZiNWVcdTZiNWZcdTZiNjBcdTZiNjFcdTZiNjhcdTZiNjlcdTZiNmJcdTZiNmNcdTZiNmRcdTZiNmVcdTZiNmZcdTZiNzBcdTZiNzFcdTZiNzJcdTZiNzNcdTZiNzRcdTZiNzVcdTZiNzZcdTZiNzdcdTZiNzhcdTZiN2FcdTZiN2RcdTZi''@;'; put 'put ''N2VcdTZiN2ZcdTZiODBcdTZiODVcdTZiODhcdWZmZmRcdTZiOGNcdTZiOGVcdTZiOGZcdTZiOTBcdTZiOTFcdTZiOTRcdTZiOTVcdTZiOTdcdTZiOThcdTZiOTlcdTZiOWNcdTZiOWRcdTZiOWVcdTZiOWZcdTZiYTBcdTZiYTJcdTZiYTNcdTZiYTRcdTZiYTVcdTZiYTZcdTZiYTdcdTZiYThc''@;'; put 'put ''dTZiYTlcdTZiYWJcdTZiYWNcdTZiYWRcdTZiYWVcdTZiYWZcdTZiYjBcdTZiYjFcdTZiYjJcdTZiYjZcdTZiYjhcdTZiYjlcdTZiYmFcdTZiYmJcdTZiYmNcdTZiYmRcdTZiYmVcdTZiYzBcdTZiYzNcdTZiYzRcdTZiYzZcdTZiYzdcdTZiYzhcdTZiYzlcdTZiY2FcdTZiY2NcdTZiY2VcdTZi''@;'; put 'put ''ZDBcdTZiZDFcdTZiZDhcdTZiZGFcdTZiZGNcdTZiZGRcdTZiZGVcdTZiZGZcdTZiZTBcdTZiZTJcdTZiZTNcdTZiZTRcdTZiZTVcdTZiZTZcdTZiZTdcdTZiZThcdTZiZTlcdTZiZWNcdTZiZWRcdTZiZWVcdTZiZjBcdTZiZjFcdTZiZjJcdTZiZjRcdTZiZjZcdTZiZjdcdTZiZjhcdTZiZmFc''@;'; put 'put ''dTZiZmJcdTZiZmNcdTZiZmVcdTZiZmZcdTZjMDBcdTZjMDFcdTZjMDJcdTZjMDNcdTZjMDRcdTZjMDhcdTZjMDlcdTZjMGFcdTZjMGJcdTZjMGNcdTZjMGVcdTZjMTJcdTZjMTdcdTZjMWNcdTZjMWRcdTZjMWVcdTZjMjBcdTZjMjNcdTZjMjVcdTZjMmJcdTZjMmNcdTZjMmRcdTZjMzFcdTZj''@;'; put 'put ''MzNcdTZjMzZcdTZjMzdcdTZjMzlcdTZjM2FcdTZjM2JcdTZjM2NcdTZjM2VcdTZjM2ZcdTZjNDNcdTZjNDRcdTZjNDVcdTZjNDhcdTZjNGJcdTZjNGNcdTZjNGRcdTZjNGVcdTZjNGZcdTZjNTFcdTZjNTJcdTZjNTNcdTZjNTZcdTZjNThcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNTRd''@;'; put 'put ''Lmxlbmd0aDsrK2cpNjU1MzMhPT15WzE1NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNTRdW2ddXT0zOTQyNCtnLF9bMzk0MjQrZ109eVsxNTRdW2ddKTtmb3IoeVsxNTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjNTlcdTZj''@;'; put 'put ''NWFcdTZjNjJcdTZjNjNcdTZjNjVcdTZjNjZcdTZjNjdcdTZjNmJcdTZjNmNcdTZjNmRcdTZjNmVcdTZjNmZcdTZjNzFcdTZjNzNcdTZjNzVcdTZjNzdcdTZjNzhcdTZjN2FcdTZjN2JcdTZjN2NcdTZjN2ZcdTZjODBcdTZjODRcdTZjODdcdTZjOGFcdTZjOGJcdTZjOGRcdTZjOGVcdTZjOTFc''@;'; put 'put ''dTZjOTJcdTZjOTVcdTZjOTZcdTZjOTdcdTZjOThcdTZjOWFcdTZjOWNcdTZjOWRcdTZjOWVcdTZjYTBcdTZjYTJcdTZjYThcdTZjYWNcdTZjYWZcdTZjYjBcdTZjYjRcdTZjYjVcdTZjYjZcdTZjYjdcdTZjYmFcdTZjYzBcdTZjYzFcdTZjYzJcdTZjYzNcdTZjYzZcdTZjYzdcdTZjYzhcdTZj''@;'; put 'put ''Y2JcdTZjY2RcdTZjY2VcdTZjY2ZcdTZjZDFcdTZjZDJcdTZjZDhcdWZmZmRcdTZjZDlcdTZjZGFcdTZjZGNcdTZjZGRcdTZjZGZcdTZjZTRcdTZjZTZcdTZjZTdcdTZjZTlcdTZjZWNcdTZjZWRcdTZjZjJcdTZjZjRcdTZjZjlcdTZjZmZcdTZkMDBcdTZkMDJcdTZkMDNcdTZkMDVcdTZkMDZc''@;'; put 'put ''dTZkMDhcdTZkMDlcdTZkMGFcdTZkMGRcdTZkMGZcdTZkMTBcdTZkMTFcdTZkMTNcdTZkMTRcdTZkMTVcdTZkMTZcdTZkMThcdTZkMWNcdTZkMWRcdTZkMWZcdTZkMjBcdTZkMjFcdTZkMjJcdTZkMjNcdTZkMjRcdTZkMjZcdTZkMjhcdTZkMjlcdTZkMmNcdTZkMmRcdTZkMmZcdTZkMzBcdTZk''@;'; put 'put ''MzRcdTZkMzZcdTZkMzdcdTZkMzhcdTZkM2FcdTZkM2ZcdTZkNDBcdTZkNDJcdTZkNDRcdTZkNDlcdTZkNGNcdTZkNTBcdTZkNTVcdTZkNTZcdTZkNTdcdTZkNThcdTZkNWJcdTZkNWRcdTZkNWZcdTZkNjFcdTZkNjJcdTZkNjRcdTZkNjVcdTZkNjdcdTZkNjhcdTZkNmJcdTZkNmNcdTZkNmRc''@;'; put 'put ''dTZkNzBcdTZkNzFcdTZkNzJcdTZkNzNcdTZkNzVcdTZkNzZcdTZkNzlcdTZkN2FcdTZkN2JcdTZkN2RcdTZkN2VcdTZkN2ZcdTZkODBcdTZkODFcdTZkODNcdTZkODRcdTZkODZcdTZkODdcdTZkOGFcdTZkOGJcdTZkOGRcdTZkOGZcdTZkOTBcdTZkOTJcdTZkOTZcdTZkOTdcdTZkOThcdTZk''@;'; put 'put ''OTlcdTZkOWFcdTZkOWNcdTZkYTJcdTZkYTVcdTZkYWNcdTZkYWRcdTZkYjBcdTZkYjFcdTZkYjNcdTZkYjRcdTZkYjZcdTZkYjdcdTZkYjlcdTZkYmFcdTZkYmJcdTZkYmNcdTZkYmRcdTZkYmVcdTZkYzFcdTZkYzJcdTZkYzNcdTZkYzhcdTZkYzlcdTZkY2FcdWZmZmQiLnNwbGl0KCIiKSxn''@;'; put 'put ''PTA7ZyE9eVsxNTVdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE1NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNTVdW2ddXT0zOTY4MCtnLF9bMzk2ODArZ109eVsxNTVdW2ddKTtmb3IoeVsxNTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTZkY2RcdTZkY2VcdTZkY2ZcdTZkZDBcdTZkZDJcdTZkZDNcdTZkZDRcdTZkZDVcdTZkZDdcdTZkZGFcdTZkZGJcdTZkZGNcdTZkZGZcdTZkZTJcdTZkZTNcdTZkZTVcdTZkZTdcdTZkZThcdTZkZTlcdTZkZWFcdTZkZWRcdTZkZWZcdTZkZjBcdTZkZjJcdTZkZjRcdTZkZjVcdTZkZjZc''@;'; put 'put ''dTZkZjhcdTZkZmFcdTZkZmRcdTZkZmVcdTZkZmZcdTZlMDBcdTZlMDFcdTZlMDJcdTZlMDNcdTZlMDRcdTZlMDZcdTZlMDdcdTZlMDhcdTZlMDlcdTZlMGJcdTZlMGZcdTZlMTJcdTZlMTNcdTZlMTVcdTZlMThcdTZlMTlcdTZlMWJcdTZlMWNcdTZlMWVcdTZlMWZcdTZlMjJcdTZlMjZcdTZl''@;'; put 'put ''MjdcdTZlMjhcdTZlMmFcdTZlMmNcdTZlMmVcdTZlMzBcdTZlMzFcdTZlMzNcdTZlMzVcdWZmZmRcdTZlMzZcdTZlMzdcdTZlMzlcdTZlM2JcdTZlM2NcdTZlM2RcdTZlM2VcdTZlM2ZcdTZlNDBcdTZlNDFcdTZlNDJcdTZlNDVcdTZlNDZcdTZlNDdcdTZlNDhcdTZlNDlcdTZlNGFcdTZlNGJc''@;'; put 'put ''dTZlNGNcdTZlNGZcdTZlNTBcdTZlNTFcdTZlNTJcdTZlNTVcdTZlNTdcdTZlNTlcdTZlNWFcdTZlNWNcdTZlNWRcdTZlNWVcdTZlNjBcdTZlNjFcdTZlNjJcdTZlNjNcdTZlNjRcdTZlNjVcdTZlNjZcdTZlNjdcdTZlNjhcdTZlNjlcdTZlNmFcdTZlNmNcdTZlNmRcdTZlNmZcdTZlNzBcdTZl''@;'; put 'put ''NzFcdTZlNzJcdTZlNzNcdTZlNzRcdTZlNzVcdTZlNzZcdTZlNzdcdTZlNzhcdTZlNzlcdTZlN2FcdTZlN2JcdTZlN2NcdTZlN2RcdTZlODBcdTZlODFcdTZlODJcdTZlODRcdTZlODdcdTZlODhcdTZlOGFcdTZlOGJcdTZlOGNcdTZlOGRcdTZlOGVcdTZlOTFcdTZlOTJcdTZlOTNcdTZlOTRc''@;'; put 'put ''dTZlOTVcdTZlOTZcdTZlOTdcdTZlOTlcdTZlOWFcdTZlOWJcdTZlOWRcdTZlOWVcdTZlYTBcdTZlYTFcdTZlYTNcdTZlYTRcdTZlYTZcdTZlYThcdTZlYTlcdTZlYWJcdTZlYWNcdTZlYWRcdTZlYWVcdTZlYjBcdTZlYjNcdTZlYjVcdTZlYjhcdTZlYjlcdTZlYmNcdTZlYmVcdTZlYmZcdTZl''@;'; put 'put ''YzBcdTZlYzNcdTZlYzRcdTZlYzVcdTZlYzZcdTZlYzhcdTZlYzlcdTZlY2FcdTZlY2NcdTZlY2RcdTZlY2VcdTZlZDBcdTZlZDJcdTZlZDZcdTZlZDhcdTZlZDlcdTZlZGJcdTZlZGNcdTZlZGRcdTZlZTNcdTZlZTdcdTZlZWFcdTZlZWJcdTZlZWNcdTZlZWRcdTZlZWVcdTZlZWZcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxnPTA7ZyE9eVsxNTZdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE1Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNTZdW2ddXT0zOTkzNitnLF9bMzk5MzYrZ109eVsxNTZdW2ddKTtmb3IoeVsxNTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdTZlZjBcdTZlZjFcdTZlZjJcdTZlZjNcdTZlZjVcdTZlZjZcdTZlZjdcdTZlZjhcdTZlZmFcdTZlZmJcdTZlZmNcdTZlZmRcdTZlZmVcdTZlZmZcdTZmMDBcdTZmMDFcdTZmMDNcdTZmMDRcdTZmMDVcdTZmMDdcdTZmMDhcdTZmMGFcdTZmMGJcdTZmMGNcdTZmMGRc''@;'; put 'put ''dTZmMGVcdTZmMTBcdTZmMTFcdTZmMTJcdTZmMTZcdTZmMTdcdTZmMThcdTZmMTlcdTZmMWFcdTZmMWJcdTZmMWNcdTZmMWRcdTZmMWVcdTZmMWZcdTZmMjFcdTZmMjJcdTZmMjNcdTZmMjVcdTZmMjZcdTZmMjdcdTZmMjhcdTZmMmNcdTZmMmVcdTZmMzBcdTZmMzJcdTZmMzRcdTZmMzVcdTZm''@;'; put 'put ''MzdcdTZmMzhcdTZmMzlcdTZmM2FcdTZmM2JcdTZmM2NcdTZmM2RcdTZmM2ZcdTZmNDBcdTZmNDFcdTZmNDJcdWZmZmRcdTZmNDNcdTZmNDRcdTZmNDVcdTZmNDhcdTZmNDlcdTZmNGFcdTZmNGNcdTZmNGVcdTZmNGZcdTZmNTBcdTZmNTFcdTZmNTJcdTZmNTNcdTZmNTRcdTZmNTVcdTZmNTZc''@;'; put 'put ''dTZmNTdcdTZmNTlcdTZmNWFcdTZmNWJcdTZmNWRcdTZmNWZcdTZmNjBcdTZmNjFcdTZmNjNcdTZmNjRcdTZmNjVcdTZmNjdcdTZmNjhcdTZmNjlcdTZmNmFcdTZmNmJcdTZmNmNcdTZmNmZcdTZmNzBcdTZmNzFcdTZmNzNcdTZmNzVcdTZmNzZcdTZmNzdcdTZmNzlcdTZmN2JcdTZmN2RcdTZm''@;'; put 'put ''N2VcdTZmN2ZcdTZmODBcdTZmODFcdTZmODJcdTZmODNcdTZmODVcdTZmODZcdTZmODdcdTZmOGFcdTZmOGJcdTZmOGZcdTZmOTBcdTZmOTFcdTZmOTJcdTZmOTNcdTZmOTRcdTZmOTVcdTZmOTZcdTZmOTdcdTZmOThcdTZmOTlcdTZmOWFcdTZmOWJcdTZmOWRcdTZmOWVcdTZmOWZcdTZmYTBc''@;'; put 'put ''dTZmYTJcdTZmYTNcdTZmYTRcdTZmYTVcdTZmYTZcdTZmYThcdTZmYTlcdTZmYWFcdTZmYWJcdTZmYWNcdTZmYWRcdTZmYWVcdTZmYWZcdTZmYjBcdTZmYjFcdTZmYjJcdTZmYjRcdTZmYjVcdTZmYjdcdTZmYjhcdTZmYmFcdTZmYmJcdTZmYmNcdTZmYmRcdTZmYmVcdTZmYmZcdTZmYzFcdTZm''@;'; put 'put ''YzNcdTZmYzRcdTZmYzVcdTZmYzZcdTZmYzdcdTZmYzhcdTZmY2FcdTZmY2JcdTZmY2NcdTZmY2RcdTZmY2VcdTZmY2ZcdTZmZDBcdTZmZDNcdTZmZDRcdTZmZDVcdTZmZDZcdTZmZDdcdTZmZDhcdTZmZDlcdTZmZGFcdTZmZGJcdTZmZGNcdTZmZGRcdTZmZGZcdTZmZTJcdTZmZTNcdTZmZTRc''@;'; put 'put ''dTZmZTVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNTddLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE1N11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNTddW2ddXT00MDE5MitnLF9bNDAxOTIrZ109eVsxNTddW2ddKTtmb3IoeVsxNThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmZTZcdTZmZTdcdTZmZThcdTZmZTlcdTZmZWFcdTZmZWJcdTZmZWNcdTZmZWRcdTZmZjBcdTZmZjFcdTZmZjJcdTZmZjNcdTZmZjRcdTZmZjVcdTZmZjZcdTZmZjdcdTZmZjhcdTZmZjlcdTZmZmFcdTZmZmJcdTZmZmNcdTZmZmRcdTZmZmVc''@;'; put 'put ''dTZmZmZcdTcwMDBcdTcwMDFcdTcwMDJcdTcwMDNcdTcwMDRcdTcwMDVcdTcwMDZcdTcwMDdcdTcwMDhcdTcwMDlcdTcwMGFcdTcwMGJcdTcwMGNcdTcwMGRcdTcwMGVcdTcwMGZcdTcwMTBcdTcwMTJcdTcwMTNcdTcwMTRcdTcwMTVcdTcwMTZcdTcwMTdcdTcwMThcdTcwMTlcdTcwMWNcdTcw''@;'; put 'put ''MWRcdTcwMWVcdTcwMWZcdTcwMjBcdTcwMjFcdTcwMjJcdTcwMjRcdTcwMjVcdTcwMjZcdTcwMjdcdTcwMjhcdTcwMjlcdTcwMmFcdWZmZmRcdTcwMmJcdTcwMmNcdTcwMmRcdTcwMmVcdTcwMmZcdTcwMzBcdTcwMzFcdTcwMzJcdTcwMzNcdTcwMzRcdTcwMzZcdTcwMzdcdTcwMzhcdTcwM2Fc''@;'; put 'put ''dTcwM2JcdTcwM2NcdTcwM2RcdTcwM2VcdTcwM2ZcdTcwNDBcdTcwNDFcdTcwNDJcdTcwNDNcdTcwNDRcdTcwNDVcdTcwNDZcdTcwNDdcdTcwNDhcdTcwNDlcdTcwNGFcdTcwNGJcdTcwNGRcdTcwNGVcdTcwNTBcdTcwNTFcdTcwNTJcdTcwNTNcdTcwNTRcdTcwNTVcdTcwNTZcdTcwNTdcdTcw''@;'; put 'put ''NThcdTcwNTlcdTcwNWFcdTcwNWJcdTcwNWNcdTcwNWRcdTcwNWZcdTcwNjBcdTcwNjFcdTcwNjJcdTcwNjNcdTcwNjRcdTcwNjVcdTcwNjZcdTcwNjdcdTcwNjhcdTcwNjlcdTcwNmFcdTcwNmVcdTcwNzFcdTcwNzJcdTcwNzNcdTcwNzRcdTcwNzdcdTcwNzlcdTcwN2FcdTcwN2JcdTcwN2Rc''@;'; put 'put ''dTcwODFcdTcwODJcdTcwODNcdTcwODRcdTcwODZcdTcwODdcdTcwODhcdTcwOGJcdTcwOGNcdTcwOGRcdTcwOGZcdTcwOTBcdTcwOTFcdTcwOTNcdTcwOTdcdTcwOThcdTcwOWFcdTcwOWJcdTcwOWVcdTcwOWZcdTcwYTBcdTcwYTFcdTcwYTJcdTcwYTNcdTcwYTRcdTcwYTVcdTcwYTZcdTcw''@;'; put 'put ''YTdcdTcwYThcdTcwYTlcdTcwYWFcdTcwYjBcdTcwYjJcdTcwYjRcdTcwYjVcdTcwYjZcdTcwYmFcdTcwYmVcdTcwYmZcdTcwYzRcdTcwYzVcdTcwYzZcdTcwYzdcdTcwYzlcdTcwY2JcdTcwY2NcdTcwY2RcdTcwY2VcdTcwY2ZcdTcwZDBcdTcwZDFcdTcwZDJcdTcwZDNcdTcwZDRcdTcwZDVc''@;'; put 'put ''dTcwZDZcdTcwZDdcdTcwZGFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNThdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE1OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNThdW2ddXT00MDQ0OCtnLF9bNDA0NDgrZ109eVsxNThdW2ddKTtmb3IoeVsxNTldPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcwZGNcdTcwZGRcdTcwZGVcdTcwZTBcdTcwZTFcdTcwZTJcdTcwZTNcdTcwZTVcdTcwZWFcdTcwZWVcdTcwZjBcdTcwZjFcdTcwZjJcdTcwZjNcdTcwZjRcdTcwZjVcdTcwZjZcdTcwZjhcdTcwZmFcdTcwZmJcdTcwZmNc''@;'; put 'put ''dTcwZmVcdTcwZmZcdTcxMDBcdTcxMDFcdTcxMDJcdTcxMDNcdTcxMDRcdTcxMDVcdTcxMDZcdTcxMDdcdTcxMDhcdTcxMGJcdTcxMGNcdTcxMGRcdTcxMGVcdTcxMGZcdTcxMTFcdTcxMTJcdTcxMTRcdTcxMTdcdTcxMWJcdTcxMWNcdTcxMWRcdTcxMWVcdTcxMWZcdTcxMjBcdTcxMjFcdTcx''@;'; put 'put ''MjJcdTcxMjNcdTcxMjRcdTcxMjVcdTcxMjdcdTcxMjhcdTcxMjlcdTcxMmFcdTcxMmJcdTcxMmNcdTcxMmRcdTcxMmVcdTcxMzJcdTcxMzNcdTcxMzRcdWZmZmRcdTcxMzVcdTcxMzdcdTcxMzhcdTcxMzlcdTcxM2FcdTcxM2JcdTcxM2NcdTcxM2RcdTcxM2VcdTcxM2ZcdTcxNDBcdTcxNDFc''@;'; put 'put ''dTcxNDJcdTcxNDNcdTcxNDRcdTcxNDZcdTcxNDdcdTcxNDhcdTcxNDlcdTcxNGJcdTcxNGRcdTcxNGZcdTcxNTBcdTcxNTFcdTcxNTJcdTcxNTNcdTcxNTRcdTcxNTVcdTcxNTZcdTcxNTdcdTcxNThcdTcxNTlcdTcxNWFcdTcxNWJcdTcxNWRcdTcxNWZcdTcxNjBcdTcxNjFcdTcxNjJcdTcx''@;'; put 'put ''NjNcdTcxNjVcdTcxNjlcdTcxNmFcdTcxNmJcdTcxNmNcdTcxNmRcdTcxNmZcdTcxNzBcdTcxNzFcdTcxNzRcdTcxNzVcdTcxNzZcdTcxNzdcdTcxNzlcdTcxN2JcdTcxN2NcdTcxN2VcdTcxN2ZcdTcxODBcdTcxODFcdTcxODJcdTcxODNcdTcxODVcdTcxODZcdTcxODdcdTcxODhcdTcxODlc''@;'; put 'put ''dTcxOGJcdTcxOGNcdTcxOGRcdTcxOGVcdTcxOTBcdTcxOTFcdTcxOTJcdTcxOTNcdTcxOTVcdTcxOTZcdTcxOTdcdTcxOWFcdTcxOWJcdTcxOWNcdTcxOWRcdTcxOWVcdTcxYTFcdTcxYTJcdTcxYTNcdTcxYTRcdTcxYTVcdTcxYTZcdTcxYTdcdTcxYTlcdTcxYWFcdTcxYWJcdTcxYWRcdTcx''@;'; put 'put ''YWVcdTcxYWZcdTcxYjBcdTcxYjFcdTcxYjJcdTcxYjRcdTcxYjZcdTcxYjdcdTcxYjhcdTcxYmFcdTcxYmJcdTcxYmNcdTcxYmRcdTcxYmVcdTcxYmZcdTcxYzBcdTcxYzFcdTcxYzJcdTcxYzRcdTcxYzVcdTcxYzZcdTcxYzdcdTcxYzhcdTcxYzlcdTcxY2FcdTcxY2JcdTcxY2NcdTcxY2Rc''@;'; put 'put ''dTcxY2ZcdTcxZDBcdTcxZDFcdTcxZDJcdTcxZDNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNTldLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE1OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNTldW2ddXT00MDcwNCtnLF9bNDA3MDQrZ109eVsxNTldW2ddKTtmb3IoeVsxNjBdPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcxZDZcdTcxZDdcdTcxZDhcdTcxZDlcdTcxZGFcdTcxZGJcdTcxZGNcdTcxZGRcdTcxZGVcdTcxZGZcdTcxZTFcdTcxZTJcdTcxZTNcdTcxZTRcdTcxZTZcdTcxZThcdTcxZTlcdTcxZWFcdTcxZWJc''@;'; put 'put ''dTcxZWNcdTcxZWRcdTcxZWZcdTcxZjBcdTcxZjFcdTcxZjJcdTcxZjNcdTcxZjRcdTcxZjVcdTcxZjZcdTcxZjdcdTcxZjhcdTcxZmFcdTcxZmJcdTcxZmNcdTcxZmRcdTcxZmVcdTcxZmZcdTcyMDBcdTcyMDFcdTcyMDJcdTcyMDNcdTcyMDRcdTcyMDVcdTcyMDdcdTcyMDhcdTcyMDlcdTcy''@;'; put 'put ''MGFcdTcyMGJcdTcyMGNcdTcyMGRcdTcyMGVcdTcyMGZcdTcyMTBcdTcyMTFcdTcyMTJcdTcyMTNcdTcyMTRcdTcyMTVcdTcyMTZcdTcyMTdcdTcyMThcdTcyMTlcdTcyMWFcdWZmZmRcdTcyMWJcdTcyMWNcdTcyMWVcdTcyMWZcdTcyMjBcdTcyMjFcdTcyMjJcdTcyMjNcdTcyMjRcdTcyMjVc''@;'; put 'put ''dTcyMjZcdTcyMjdcdTcyMjlcdTcyMmJcdTcyMmRcdTcyMmVcdTcyMmZcdTcyMzJcdTcyMzNcdTcyMzRcdTcyM2FcdTcyM2NcdTcyM2VcdTcyNDBcdTcyNDFcdTcyNDJcdTcyNDNcdTcyNDRcdTcyNDVcdTcyNDZcdTcyNDlcdTcyNGFcdTcyNGJcdTcyNGVcdTcyNGZcdTcyNTBcdTcyNTFcdTcy''@;'; put 'put ''NTNcdTcyNTRcdTcyNTVcdTcyNTdcdTcyNThcdTcyNWFcdTcyNWNcdTcyNWVcdTcyNjBcdTcyNjNcdTcyNjRcdTcyNjVcdTcyNjhcdTcyNmFcdTcyNmJcdTcyNmNcdTcyNmRcdTcyNzBcdTcyNzFcdTcyNzNcdTcyNzRcdTcyNzZcdTcyNzdcdTcyNzhcdTcyN2JcdTcyN2NcdTcyN2RcdTcyODJc''@;'; put 'put ''dTcyODNcdTcyODVcdTcyODZcdTcyODdcdTcyODhcdTcyODlcdTcyOGNcdTcyOGVcdTcyOTBcdTcyOTFcdTcyOTNcdTcyOTRcdTcyOTVcdTcyOTZcdTcyOTdcdTcyOThcdTcyOTlcdTcyOWFcdTcyOWJcdTcyOWNcdTcyOWRcdTcyOWVcdTcyYTBcdTcyYTFcdTcyYTJcdTcyYTNcdTcyYTRcdTcy''@;'; put 'put ''YTVcdTcyYTZcdTcyYTdcdTcyYThcdTcyYTlcdTcyYWFcdTcyYWJcdTcyYWVcdTcyYjFcdTcyYjJcdTcyYjNcdTcyYjVcdTcyYmFcdTcyYmJcdTcyYmNcdTcyYmRcdTcyYmVcdTcyYmZcdTcyYzBcdTcyYzVcdTcyYzZcdTcyYzdcdTcyYzlcdTcyY2FcdTcyY2JcdTcyY2NcdTcyY2ZcdTcyZDFc''@;'; put 'put ''dTcyZDNcdTcyZDRcdTcyZDVcdTcyZDZcdTcyZDhcdTcyZGFcdTcyZGJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNjBdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE2MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNjBdW2ddXT00MDk2MCtnLF9bNDA5NjArZ109eVsxNjBdW2ddKTtmb3Io''@;'; put 'put ''eVsxNjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwMDBcdTMwMDFcdTMw''@;'; put 'put ''MDJceGI3XHUwMmM5XHUwMmM3XHhhOFx1MzAwM1x1MzAwNVx1MjAxNFx1ZmY1ZVx1MjAxNlx1MjAyNlx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MzAxNFx1MzAxNVx1MzAwOFx1MzAwOVx1MzAwYVx1MzAwYlx1MzAwY1x1MzAwZFx1MzAwZVx1MzAwZlx1MzAxNlx1MzAxN1x1MzAxMFx1MzAx''@;'; put 'put ''MVx4YjFceGQ3XHhmN1x1MjIzNlx1MjIyN1x1MjIyOFx1MjIxMVx1MjIwZlx1MjIyYVx1MjIyOVx1MjIwOFx1MjIzN1x1MjIxYVx1MjJhNVx1MjIyNVx1MjIyMFx1MjMxMlx1MjI5OVx1MjIyYlx1MjIyZVx1MjI2MVx1MjI0Y1x1MjI0OFx1MjIzZFx1MjIxZFx1MjI2MFx1MjI2ZVx1MjI2Zlx1''@;'; put 'put ''MjI2NFx1MjI2NVx1MjIxZVx1MjIzNVx1MjIzNFx1MjY0Mlx1MjY0MFx4YjBcdTIwMzJcdTIwMzNcdTIxMDNcdWZmMDRceGE0XHVmZmUwXHVmZmUxXHUyMDMwXHhhN1x1MjExNlx1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjVi''@;'; put 'put ''Mlx1MjAzYlx1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MzAxM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE2MV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTYxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE2MV1bZ11dPTQxMjE2K2csX1s0MTIxNitnXT15WzE2MV1bZ10pO2Zvcih5WzE2''@;'; put 'put ''Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjE3MFx1MjE3MVx1MjE3Mlx1''@;'; put 'put ''MjE3M1x1MjE3NFx1MjE3NVx1MjE3Nlx1MjE3N1x1MjE3OFx1MjE3OVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjQ4OFx1MjQ4OVx1MjQ4YVx1MjQ4Ylx1MjQ4Y1x1MjQ4ZFx1MjQ4ZVx1MjQ4Zlx1MjQ5MFx1MjQ5MVx1MjQ5Mlx1MjQ5M1x1MjQ5NFx1MjQ5NVx1MjQ5''@;'; put 'put ''Nlx1MjQ5N1x1MjQ5OFx1MjQ5OVx1MjQ5YVx1MjQ5Ylx1MjQ3NFx1MjQ3NVx1MjQ3Nlx1MjQ3N1x1MjQ3OFx1MjQ3OVx1MjQ3YVx1MjQ3Ylx1MjQ3Y1x1MjQ3ZFx1MjQ3ZVx1MjQ3Zlx1MjQ4MFx1MjQ4MVx1MjQ4Mlx1MjQ4M1x1MjQ4NFx1MjQ4NVx1MjQ4Nlx1MjQ4N1x1MjQ2MFx1MjQ2MVx1''@;'; put 'put ''MjQ2Mlx1MjQ2M1x1MjQ2NFx1MjQ2NVx1MjQ2Nlx1MjQ2N1x1MjQ2OFx1MjQ2OVx1ZmZmZFx1ZmZmZFx1MzIyMFx1MzIyMVx1MzIyMlx1MzIyM1x1MzIyNFx1MzIyNVx1MzIyNlx1MzIyN1x1MzIyOFx1MzIyOVx1ZmZmZFx1ZmZmZFx1MjE2MFx1MjE2MVx1MjE2Mlx1MjE2M1x1MjE2NFx1MjE2''@;'; put 'put ''NVx1MjE2Nlx1MjE2N1x1MjE2OFx1MjE2OVx1MjE2YVx1MjE2Ylx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE2Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTYyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE2Ml1bZ11dPTQxNDcyK2csX1s0MTQ3MitnXT15WzE2Ml1b''@;'; put 'put ''Z10pO2Zvcih5WzE2M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmYwMVx1''@;'; put 'put ''ZmYwMlx1ZmYwM1x1ZmZlNVx1ZmYwNVx1ZmYwNlx1ZmYwN1x1ZmYwOFx1ZmYwOVx1ZmYwYVx1ZmYwYlx1ZmYwY1x1ZmYwZFx1ZmYwZVx1ZmYwZlx1ZmYxMFx1ZmYxMVx1ZmYxMlx1ZmYxM1x1ZmYxNFx1ZmYxNVx1ZmYxNlx1ZmYxN1x1ZmYxOFx1ZmYxOVx1ZmYxYVx1ZmYxYlx1ZmYxY1x1ZmYx''@;'; put 'put ''ZFx1ZmYxZVx1ZmYxZlx1ZmYyMFx1ZmYyMVx1ZmYyMlx1ZmYyM1x1ZmYyNFx1ZmYyNVx1ZmYyNlx1ZmYyN1x1ZmYyOFx1ZmYyOVx1ZmYyYVx1ZmYyYlx1ZmYyY1x1ZmYyZFx1ZmYyZVx1ZmYyZlx1ZmYzMFx1ZmYzMVx1ZmYzMlx1ZmYzM1x1ZmYzNFx1ZmYzNVx1ZmYzNlx1ZmYzN1x1ZmYzOFx1''@;'; put 'put ''ZmYzOVx1ZmYzYVx1ZmYzYlx1ZmYzY1x1ZmYzZFx1ZmYzZVx1ZmYzZlx1ZmY0MFx1ZmY0MVx1ZmY0Mlx1ZmY0M1x1ZmY0NFx1ZmY0NVx1ZmY0Nlx1ZmY0N1x1ZmY0OFx1ZmY0OVx1ZmY0YVx1ZmY0Ylx1ZmY0Y1x1ZmY0ZFx1ZmY0ZVx1ZmY0Zlx1ZmY1MFx1ZmY1MVx1ZmY1Mlx1ZmY1M1x1ZmY1''@;'; put 'put ''NFx1ZmY1NVx1ZmY1Nlx1ZmY1N1x1ZmY1OFx1ZmY1OVx1ZmY1YVx1ZmY1Ylx1ZmY1Y1x1ZmY1ZFx1ZmZlM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE2M10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTYzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE2M11bZ11dPTQxNzI4K2csX1s0MTcy''@;'; put 'put ''OCtnXT15WzE2M11bZ10pO2Zvcih5WzE2NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1MzA0MVx1MzA0Mlx1MzA0M1x1MzA0NFx1MzA0NVx1MzA0Nlx1MzA0N1x1MzA0OFx1MzA0OVx1MzA0YVx1MzA0Ylx1MzA0Y1x1MzA0ZFx1MzA0ZVx1MzA0Zlx1MzA1MFx1MzA1MVx1MzA1Mlx1MzA1M1x1MzA1NFx1MzA1NVx1MzA1Nlx1MzA1N1x1MzA1OFx1MzA1OVx1MzA1YVx1MzA1''@;'; put 'put ''Ylx1MzA1Y1x1MzA1ZFx1MzA1ZVx1MzA1Zlx1MzA2MFx1MzA2MVx1MzA2Mlx1MzA2M1x1MzA2NFx1MzA2NVx1MzA2Nlx1MzA2N1x1MzA2OFx1MzA2OVx1MzA2YVx1MzA2Ylx1MzA2Y1x1MzA2ZFx1MzA2ZVx1MzA2Zlx1MzA3MFx1MzA3MVx1MzA3Mlx1MzA3M1x1MzA3NFx1MzA3NVx1MzA3Nlx1''@;'; put 'put ''MzA3N1x1MzA3OFx1MzA3OVx1MzA3YVx1MzA3Ylx1MzA3Y1x1MzA3ZFx1MzA3ZVx1MzA3Zlx1MzA4MFx1MzA4MVx1MzA4Mlx1MzA4M1x1MzA4NFx1MzA4NVx1MzA4Nlx1MzA4N1x1MzA4OFx1MzA4OVx1MzA4YVx1MzA4Ylx1MzA4Y1x1MzA4ZFx1MzA4ZVx1MzA4Zlx1MzA5MFx1MzA5MVx1MzA5''@;'; put 'put ''Mlx1MzA5M1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE2NF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTY0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE2NF1bZ11dPTQx''@;'; put 'put ''OTg0K2csX1s0MTk4NCtnXT15WzE2NF1bZ10pO2Zvcih5WzE2NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1MzBhMVx1MzBhMlx1MzBhM1x1MzBhNFx1MzBhNVx1MzBhNlx1MzBhN1x1MzBhOFx1MzBhOVx1MzBhYVx1MzBhYlx1MzBhY1x1MzBhZFx1MzBhZVx1MzBhZlx1MzBiMFx1MzBiMVx1MzBiMlx1MzBiM1x1MzBiNFx1MzBiNVx1MzBiNlx1MzBiN1x1MzBiOFx1MzBi''@;'; put 'put ''OVx1MzBiYVx1MzBiYlx1MzBiY1x1MzBiZFx1MzBiZVx1MzBiZlx1MzBjMFx1MzBjMVx1MzBjMlx1MzBjM1x1MzBjNFx1MzBjNVx1MzBjNlx1MzBjN1x1MzBjOFx1MzBjOVx1MzBjYVx1MzBjYlx1MzBjY1x1MzBjZFx1MzBjZVx1MzBjZlx1MzBkMFx1MzBkMVx1MzBkMlx1MzBkM1x1MzBkNFx1''@;'; put 'put ''MzBkNVx1MzBkNlx1MzBkN1x1MzBkOFx1MzBkOVx1MzBkYVx1MzBkYlx1MzBkY1x1MzBkZFx1MzBkZVx1MzBkZlx1MzBlMFx1MzBlMVx1MzBlMlx1MzBlM1x1MzBlNFx1MzBlNVx1MzBlNlx1MzBlN1x1MzBlOFx1MzBlOVx1MzBlYVx1MzBlYlx1MzBlY1x1MzBlZFx1MzBlZVx1MzBlZlx1MzBm''@;'; put 'put ''MFx1MzBmMVx1MzBmMlx1MzBmM1x1MzBmNFx1MzBmNVx1MzBmNlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE2NV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTY1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5''@;'; put 'put ''WzE2NV1bZ11dPTQyMjQwK2csX1s0MjI0MCtnXT15WzE2NV1bZ10pO2Zvcih5WzE2Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNh''@;'; put 'put ''OFx1MDNhOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjM1x1''@;'; put 'put ''MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmUzNVx1ZmUzNlx1ZmUzOVx1ZmUzYVx1ZmUzZlx1ZmU0MFx1ZmUzZFx1ZmUzZVx1ZmU0MVx1ZmU0Mlx1ZmU0M1x1ZmU0NFx1ZmZmZFx1ZmZmZFx1ZmUz''@;'; put 'put ''Ylx1ZmUzY1x1ZmUzN1x1ZmUzOFx1ZmUzMVx1ZmZmZFx1ZmUzM1x1ZmUzNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE2Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTY2XVtnXS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApJiYoSVt5WzE2Nl1bZ11dPTQyNDk2K2csX1s0MjQ5NitnXT15WzE2Nl1bZ10pO2Zvcih5WzE2N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQwMVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQy''@;'; put 'put ''M1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQ1MVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0''@;'; put 'put ''YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE2N10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTY3''@;'; put 'put ''XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE2N11bZ11dPTQyNzUyK2csX1s0Mjc1MitnXT15WzE2N11bZ10pO2Zvcih5WzE2OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDJjYVx1MDJjYlx1MDJkOVx1MjAxM1x1MjAxNVx1MjAy''@;'; put 'put ''NVx1MjAzNVx1MjEwNVx1MjEwOVx1MjE5Nlx1MjE5N1x1MjE5OFx1MjE5OVx1MjIxNVx1MjIxZlx1MjIyM1x1MjI1Mlx1MjI2Nlx1MjI2N1x1MjJiZlx1MjU1MFx1MjU1MVx1MjU1Mlx1MjU1M1x1MjU1NFx1MjU1NVx1MjU1Nlx1MjU1N1x1MjU1OFx1MjU1OVx1MjU1YVx1MjU1Ylx1MjU1Y1x1''@;'; put 'put ''MjU1ZFx1MjU1ZVx1MjU1Zlx1MjU2MFx1MjU2MVx1MjU2Mlx1MjU2M1x1MjU2NFx1MjU2NVx1MjU2Nlx1MjU2N1x1MjU2OFx1MjU2OVx1MjU2YVx1MjU2Ylx1MjU2Y1x1MjU2ZFx1MjU2ZVx1MjU2Zlx1MjU3MFx1MjU3MVx1MjU3Mlx1MjU3M1x1MjU4MVx1MjU4Mlx1MjU4M1x1MjU4NFx1MjU4''@;'; put 'put ''NVx1MjU4Nlx1MjU4N1x1ZmZmZFx1MjU4OFx1MjU4OVx1MjU4YVx1MjU4Ylx1MjU4Y1x1MjU4ZFx1MjU4ZVx1MjU4Zlx1MjU5M1x1MjU5NFx1MjU5NVx1MjViY1x1MjViZFx1MjVlMlx1MjVlM1x1MjVlNFx1MjVlNVx1MjYwOVx1MjI5NVx1MzAxMlx1MzAxZFx1MzAxZVx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDEwMVx4ZTFcdTAxY2VceGUwXHUwMTEzXHhlOVx1MDExYlx4ZThcdTAxMmJceGVkXHUwMWQwXHhlY1x1MDE0ZFx4ZjNcdTAxZDJceGYyXHUwMTZiXHhmYVx1MDFkNFx4ZjlcdTAxZDZcdTAxZDhc''@;'; put 'put ''dTAxZGFcdTAxZGNceGZjXHhlYVx1MDI1MVx1ZmZmZFx1MDE0NFx1MDE0OFx1ZmZmZFx1MDI2MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzEwNVx1MzEwNlx1MzEwN1x1MzEwOFx1MzEwOVx1MzEwYVx1MzEwYlx1MzEwY1x1MzEwZFx1MzEwZVx1MzEwZlx1MzExMFx1MzExMVx1MzExMlx1''@;'; put 'put ''MzExM1x1MzExNFx1MzExNVx1MzExNlx1MzExN1x1MzExOFx1MzExOVx1MzExYVx1MzExYlx1MzExY1x1MzExZFx1MzExZVx1MzExZlx1MzEyMFx1MzEyMVx1MzEyMlx1MzEyM1x1MzEyNFx1MzEyNVx1MzEyNlx1MzEyN1x1MzEyOFx1MzEyOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE2OF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTY4XVtnXS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApJiYoSVt5WzE2OF1bZ11dPTQzMDA4K2csX1s0MzAwOCtnXT15WzE2OF1bZ10pO2Zvcih5WzE2OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAyMVx1MzAyMlx1MzAyM1x1MzAyNFx1MzAyNVx1MzAyNlx1MzAyN1x1MzAy''@;'; put 'put ''OFx1MzAyOVx1MzJhM1x1MzM4ZVx1MzM4Zlx1MzM5Y1x1MzM5ZFx1MzM5ZVx1MzNhMVx1MzNjNFx1MzNjZVx1MzNkMVx1MzNkMlx1MzNkNVx1ZmUzMFx1ZmZlMlx1ZmZlNFx1ZmZmZFx1MjEyMVx1MzIzMVx1ZmZmZFx1MjAxMFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzBmY1x1MzA5Ylx1MzA5Y1x1''@;'; put 'put ''MzBmZFx1MzBmZVx1MzAwNlx1MzA5ZFx1MzA5ZVx1ZmU0OVx1ZmU0YVx1ZmU0Ylx1ZmU0Y1x1ZmU0ZFx1ZmU0ZVx1ZmU0Zlx1ZmU1MFx1ZmU1MVx1ZmU1Mlx1ZmU1NFx1ZmU1NVx1ZmU1Nlx1ZmU1N1x1ZmU1OVx1ZmU1YVx1ZmU1Ylx1ZmU1Y1x1ZmU1ZFx1ZmU1ZVx1ZmU1Zlx1ZmU2MFx1ZmU2''@;'; put 'put ''MVx1ZmZmZFx1ZmU2Mlx1ZmU2M1x1ZmU2NFx1ZmU2NVx1ZmU2Nlx1ZmU2OFx1ZmU2OVx1ZmU2YVx1ZmU2Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAwN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjUwMFx1MjUwMVx1MjUwMlx1MjUwM1x1MjUwNFx1MjUwNVx1MjUwNlx1MjUwN1x1MjUwOFx1MjUwOVx1MjUwYVx1MjUwYlx1MjUwY1x1MjUwZFx1MjUwZVx1MjUwZlx1MjUxMFx1MjUx''@;'; put 'put ''MVx1MjUxMlx1MjUxM1x1MjUxNFx1MjUxNVx1MjUxNlx1MjUxN1x1MjUxOFx1MjUxOVx1MjUxYVx1MjUxYlx1MjUxY1x1MjUxZFx1MjUxZVx1MjUxZlx1MjUyMFx1MjUyMVx1MjUyMlx1MjUyM1x1MjUyNFx1MjUyNVx1MjUyNlx1MjUyN1x1MjUyOFx1MjUyOVx1MjUyYVx1MjUyYlx1MjUyY1x1''@;'; put 'put ''MjUyZFx1MjUyZVx1MjUyZlx1MjUzMFx1MjUzMVx1MjUzMlx1MjUzM1x1MjUzNFx1MjUzNVx1MjUzNlx1MjUzN1x1MjUzOFx1MjUzOVx1MjUzYVx1MjUzYlx1MjUzY1x1MjUzZFx1MjUzZVx1MjUzZlx1MjU0MFx1MjU0MVx1MjU0Mlx1MjU0M1x1MjU0NFx1MjU0NVx1MjU0Nlx1MjU0N1x1MjU0''@;'; put 'put ''OFx1MjU0OVx1MjU0YVx1MjU0Ylx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE2OV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTY5''@;'; put 'put ''XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE2OV1bZ11dPTQzMjY0K2csX1s0MzI2NCtnXT15WzE2OV1bZ10pO2Zvcih5WzE3MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzJkY1x1NzJkZFx1NzJkZlx1NzJlMlx1NzJlM1x1NzJl''@;'; put 'put ''NFx1NzJlNVx1NzJlNlx1NzJlN1x1NzJlYVx1NzJlYlx1NzJmNVx1NzJmNlx1NzJmOVx1NzJmZFx1NzJmZVx1NzJmZlx1NzMwMFx1NzMwMlx1NzMwNFx1NzMwNVx1NzMwNlx1NzMwN1x1NzMwOFx1NzMwOVx1NzMwYlx1NzMwY1x1NzMwZFx1NzMwZlx1NzMxMFx1NzMxMVx1NzMxMlx1NzMxNFx1''@;'; put 'put ''NzMxOFx1NzMxOVx1NzMxYVx1NzMxZlx1NzMyMFx1NzMyM1x1NzMyNFx1NzMyNlx1NzMyN1x1NzMyOFx1NzMyZFx1NzMyZlx1NzMzMFx1NzMzMlx1NzMzM1x1NzMzNVx1NzMzNlx1NzMzYVx1NzMzYlx1NzMzY1x1NzMzZFx1NzM0MFx1NzM0MVx1NzM0Mlx1NzM0M1x1NzM0NFx1NzM0NVx1NzM0''@;'; put 'put ''Nlx1NzM0N1x1NzM0OFx1ZmZmZFx1NzM0OVx1NzM0YVx1NzM0Ylx1NzM0Y1x1NzM0ZVx1NzM0Zlx1NzM1MVx1NzM1M1x1NzM1NFx1NzM1NVx1NzM1Nlx1NzM1OFx1NzM1OVx1NzM1YVx1NzM1Ylx1NzM1Y1x1NzM1ZFx1NzM1ZVx1NzM1Zlx1NzM2MVx1NzM2Mlx1NzM2M1x1NzM2NFx1NzM2NVx1''@;'; put 'put ''NzM2Nlx1NzM2N1x1NzM2OFx1NzM2OVx1NzM2YVx1NzM2Ylx1NzM2ZVx1NzM3MFx1NzM3MVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE3MF0ubGVuZ3RoOysrZyk2''@;'; put 'put ''NTUzMyE9PXlbMTcwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE3MF1bZ11dPTQzNTIwK2csX1s0MzUyMCtnXT15WzE3MF1bZ10pO2Zvcih5WzE3MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzM3Mlx1NzM3M1x1NzM3NFx1NzM3''@;'; put 'put ''NVx1NzM3Nlx1NzM3N1x1NzM3OFx1NzM3OVx1NzM3YVx1NzM3Ylx1NzM3Y1x1NzM3ZFx1NzM3Zlx1NzM4MFx1NzM4MVx1NzM4Mlx1NzM4M1x1NzM4NVx1NzM4Nlx1NzM4OFx1NzM4YVx1NzM4Y1x1NzM4ZFx1NzM4Zlx1NzM5MFx1NzM5Mlx1NzM5M1x1NzM5NFx1NzM5NVx1NzM5N1x1NzM5OFx1''@;'; put 'put ''NzM5OVx1NzM5YVx1NzM5Y1x1NzM5ZFx1NzM5ZVx1NzNhMFx1NzNhMVx1NzNhM1x1NzNhNFx1NzNhNVx1NzNhNlx1NzNhN1x1NzNhOFx1NzNhYVx1NzNhY1x1NzNhZFx1NzNiMVx1NzNiNFx1NzNiNVx1NzNiNlx1NzNiOFx1NzNiOVx1NzNiY1x1NzNiZFx1NzNiZVx1NzNiZlx1NzNjMVx1NzNj''@;'; put 'put ''M1x1NzNjNFx1NzNjNVx1NzNjNlx1NzNjN1x1ZmZmZFx1NzNjYlx1NzNjY1x1NzNjZVx1NzNkMlx1NzNkM1x1NzNkNFx1NzNkNVx1NzNkNlx1NzNkN1x1NzNkOFx1NzNkYVx1NzNkYlx1NzNkY1x1NzNkZFx1NzNkZlx1NzNlMVx1NzNlMlx1NzNlM1x1NzNlNFx1NzNlNlx1NzNlOFx1NzNlYVx1''@;'; put 'put ''NzNlYlx1NzNlY1x1NzNlZVx1NzNlZlx1NzNmMFx1NzNmMVx1NzNmM1x1NzNmNFx1NzNmNVx1NzNmNlx1NzNmN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE3MV0u''@;'; put 'put ''bGVuZ3RoOysrZyk2NTUzMyE9PXlbMTcxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE3MV1bZ11dPTQzNzc2K2csX1s0Mzc3NitnXT15WzE3MV1bZ10pO2Zvcih5WzE3Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzNmOFx1NzNm''@;'; put 'put ''OVx1NzNmYVx1NzNmYlx1NzNmY1x1NzNmZFx1NzNmZVx1NzNmZlx1NzQwMFx1NzQwMVx1NzQwMlx1NzQwNFx1NzQwN1x1NzQwOFx1NzQwYlx1NzQwY1x1NzQwZFx1NzQwZVx1NzQxMVx1NzQxMlx1NzQxM1x1NzQxNFx1NzQxNVx1NzQxNlx1NzQxN1x1NzQxOFx1NzQxOVx1NzQxY1x1NzQxZFx1''@;'; put 'put ''NzQxZVx1NzQxZlx1NzQyMFx1NzQyMVx1NzQyM1x1NzQyNFx1NzQyN1x1NzQyOVx1NzQyYlx1NzQyZFx1NzQyZlx1NzQzMVx1NzQzMlx1NzQzN1x1NzQzOFx1NzQzOVx1NzQzYVx1NzQzYlx1NzQzZFx1NzQzZVx1NzQzZlx1NzQ0MFx1NzQ0Mlx1NzQ0M1x1NzQ0NFx1NzQ0NVx1NzQ0Nlx1NzQ0''@;'; put 'put ''N1x1NzQ0OFx1NzQ0OVx1NzQ0YVx1NzQ0Ylx1NzQ0Y1x1NzQ0ZFx1ZmZmZFx1NzQ0ZVx1NzQ0Zlx1NzQ1MFx1NzQ1MVx1NzQ1Mlx1NzQ1M1x1NzQ1NFx1NzQ1Nlx1NzQ1OFx1NzQ1ZFx1NzQ2MFx1NzQ2MVx1NzQ2Mlx1NzQ2M1x1NzQ2NFx1NzQ2NVx1NzQ2Nlx1NzQ2N1x1NzQ2OFx1NzQ2OVx1''@;'; put 'put ''NzQ2YVx1NzQ2Ylx1NzQ2Y1x1NzQ2ZVx1NzQ2Zlx1NzQ3MVx1NzQ3Mlx1NzQ3M1x1NzQ3NFx1NzQ3NVx1NzQ3OFx1NzQ3OVx1NzQ3YVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9''@;'; put 'put ''MDtnIT15WzE3Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTcyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE3Ml1bZ11dPTQ0MDMyK2csX1s0NDAzMitnXT15WzE3Ml1bZ10pO2Zvcih5WzE3M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1NzQ3Ylx1NzQ3Y1x1NzQ3ZFx1NzQ3Zlx1NzQ4Mlx1NzQ4NFx1NzQ4NVx1NzQ4Nlx1NzQ4OFx1NzQ4OVx1NzQ4YVx1NzQ4Y1x1NzQ4ZFx1NzQ4Zlx1NzQ5MVx1NzQ5Mlx1NzQ5M1x1NzQ5NFx1NzQ5NVx1NzQ5Nlx1NzQ5N1x1NzQ5OFx1NzQ5OVx1NzQ5YVx1NzQ5Ylx1NzQ5ZFx1NzQ5Zlx1''@;'; put 'put ''NzRhMFx1NzRhMVx1NzRhMlx1NzRhM1x1NzRhNFx1NzRhNVx1NzRhNlx1NzRhYVx1NzRhYlx1NzRhY1x1NzRhZFx1NzRhZVx1NzRhZlx1NzRiMFx1NzRiMVx1NzRiMlx1NzRiM1x1NzRiNFx1NzRiNVx1NzRiNlx1NzRiN1x1NzRiOFx1NzRiOVx1NzRiYlx1NzRiY1x1NzRiZFx1NzRiZVx1NzRi''@;'; put 'put ''Zlx1NzRjMFx1NzRjMVx1NzRjMlx1NzRjM1x1NzRjNFx1NzRjNVx1NzRjNlx1NzRjN1x1ZmZmZFx1NzRjOFx1NzRjOVx1NzRjYVx1NzRjYlx1NzRjY1x1NzRjZFx1NzRjZVx1NzRjZlx1NzRkMFx1NzRkMVx1NzRkM1x1NzRkNFx1NzRkNVx1NzRkNlx1NzRkN1x1NzRkOFx1NzRkOVx1NzRkYVx1''@;'; put 'put ''NzRkYlx1NzRkZFx1NzRkZlx1NzRlMVx1NzRlNVx1NzRlN1x1NzRlOFx1NzRlOVx1NzRlYVx1NzRlYlx1NzRlY1x1NzRlZFx1NzRmMFx1NzRmMVx1NzRmMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIu''@;'; put 'put ''c3BsaXQoIiIpLGc9MDtnIT15WzE3M10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTczXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE3M11bZ11dPTQ0Mjg4K2csX1s0NDI4OCtnXT15WzE3M11bZ10pO2Zvcih5WzE3NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1NzRmM1x1NzRmNVx1NzRmOFx1NzRmOVx1NzRmYVx1NzRmYlx1NzRmY1x1NzRmZFx1NzRmZVx1NzUwMFx1NzUwMVx1NzUwMlx1NzUwM1x1NzUwNVx1NzUwNlx1NzUwN1x1NzUwOFx1NzUwOVx1NzUwYVx1NzUwYlx1NzUwY1x1NzUwZVx1NzUxMFx1NzUxMlx1NzUxNFx1''@;'; put 'put ''NzUxNVx1NzUxNlx1NzUxN1x1NzUxYlx1NzUxZFx1NzUxZVx1NzUyMFx1NzUyMVx1NzUyMlx1NzUyM1x1NzUyNFx1NzUyNlx1NzUyN1x1NzUyYVx1NzUyZVx1NzUzNFx1NzUzNlx1NzUzOVx1NzUzY1x1NzUzZFx1NzUzZlx1NzU0MVx1NzU0Mlx1NzU0M1x1NzU0NFx1NzU0Nlx1NzU0N1x1NzU0''@;'; put 'put ''OVx1NzU0YVx1NzU0ZFx1NzU1MFx1NzU1MVx1NzU1Mlx1NzU1M1x1NzU1NVx1NzU1Nlx1NzU1N1x1NzU1OFx1ZmZmZFx1NzU1ZFx1NzU1ZVx1NzU1Zlx1NzU2MFx1NzU2MVx1NzU2Mlx1NzU2M1x1NzU2NFx1NzU2N1x1NzU2OFx1NzU2OVx1NzU2Ylx1NzU2Y1x1NzU2ZFx1NzU2ZVx1NzU2Zlx1''@;'; put 'put ''NzU3MFx1NzU3MVx1NzU3M1x1NzU3NVx1NzU3Nlx1NzU3N1x1NzU3YVx1NzU3Ylx1NzU3Y1x1NzU3ZFx1NzU3ZVx1NzU4MFx1NzU4MVx1NzU4Mlx1NzU4NFx1NzU4NVx1NzU4N1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE3NF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTc0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE3NF1bZ11dPTQ0NTQ0K2csX1s0NDU0NCtnXT15WzE3NF1bZ10pO2Zvcih5WzE3NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzU4OFx1NzU4OVx1NzU4YVx1NzU4Y1x1NzU4ZFx1NzU4ZVx1NzU5MFx1NzU5M1x1NzU5NVx1NzU5OFx1NzU5Ylx1NzU5Y1x1NzU5ZVx1NzVhMlx1NzVhNlx1NzVhN1x1NzVhOFx1NzVhOVx1NzVhYVx1NzVhZFx1NzViNlx1NzViN1x1NzViYVx1''@;'; put 'put ''NzViYlx1NzViZlx1NzVjMFx1NzVjMVx1NzVjNlx1NzVjYlx1NzVjY1x1NzVjZVx1NzVjZlx1NzVkMFx1NzVkMVx1NzVkM1x1NzVkN1x1NzVkOVx1NzVkYVx1NzVkY1x1NzVkZFx1NzVkZlx1NzVlMFx1NzVlMVx1NzVlNVx1NzVlOVx1NzVlY1x1NzVlZFx1NzVlZVx1NzVlZlx1NzVmMlx1NzVm''@;'; put 'put ''M1x1NzVmNVx1NzVmNlx1NzVmN1x1NzVmOFx1NzVmYVx1NzVmYlx1NzVmZFx1NzVmZVx1NzYwMlx1NzYwNFx1NzYwNlx1NzYwN1x1ZmZmZFx1NzYwOFx1NzYwOVx1NzYwYlx1NzYwZFx1NzYwZVx1NzYwZlx1NzYxMVx1NzYxMlx1NzYxM1x1NzYxNFx1NzYxNlx1NzYxYVx1NzYxY1x1NzYxZFx1''@;'; put 'put ''NzYxZVx1NzYyMVx1NzYyM1x1NzYyN1x1NzYyOFx1NzYyY1x1NzYyZVx1NzYyZlx1NzYzMVx1NzYzMlx1NzYzNlx1NzYzN1x1NzYzOVx1NzYzYVx1NzYzYlx1NzYzZFx1NzY0MVx1NzY0Mlx1NzY0NFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE3NV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTc1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE3NV1bZ11dPTQ0ODAwK2csX1s0NDgwMCtnXT15WzE3NV1bZ10pO2Zvcih5WzE3Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzY0NVx1NzY0Nlx1NzY0N1x1NzY0OFx1NzY0OVx1NzY0YVx1NzY0Ylx1NzY0ZVx1NzY0Zlx1NzY1MFx1NzY1MVx1NzY1Mlx1NzY1M1x1NzY1NVx1NzY1N1x1NzY1OFx1NzY1OVx1NzY1YVx1NzY1Ylx1NzY1ZFx1NzY1Zlx1''@;'; put 'put ''NzY2MFx1NzY2MVx1NzY2Mlx1NzY2NFx1NzY2NVx1NzY2Nlx1NzY2N1x1NzY2OFx1NzY2OVx1NzY2YVx1NzY2Y1x1NzY2ZFx1NzY2ZVx1NzY3MFx1NzY3MVx1NzY3Mlx1NzY3M1x1NzY3NFx1NzY3NVx1NzY3Nlx1NzY3N1x1NzY3OVx1NzY3YVx1NzY3Y1x1NzY3Zlx1NzY4MFx1NzY4MVx1NzY4''@;'; put 'put ''M1x1NzY4NVx1NzY4OVx1NzY4YVx1NzY4Y1x1NzY4ZFx1NzY4Zlx1NzY5MFx1NzY5Mlx1NzY5NFx1NzY5NVx1NzY5N1x1NzY5OFx1NzY5YVx1NzY5Ylx1ZmZmZFx1NzY5Y1x1NzY5ZFx1NzY5ZVx1NzY5Zlx1NzZhMFx1NzZhMVx1NzZhMlx1NzZhM1x1NzZhNVx1NzZhNlx1NzZhN1x1NzZhOFx1''@;'; put 'put ''NzZhOVx1NzZhYVx1NzZhYlx1NzZhY1x1NzZhZFx1NzZhZlx1NzZiMFx1NzZiM1x1NzZiNVx1NzZiNlx1NzZiN1x1NzZiOFx1NzZiOVx1NzZiYVx1NzZiYlx1NzZiY1x1NzZiZFx1NzZiZVx1NzZjMFx1NzZjMVx1NzZjM1x1NTU0YVx1OTYzZlx1NTdjM1x1NjMyOFx1NTRjZVx1NTUwOVx1NTRj''@;'; put 'put ''MFx1NzY5MVx1NzY0Y1x1ODUzY1x1NzdlZVx1ODI3ZVx1Nzg4ZFx1NzIzMVx1OTY5OFx1OTc4ZFx1NmMyOFx1NWI4OVx1NGZmYVx1NjMwOVx1NjY5N1x1NWNiOFx1ODBmYVx1Njg0OFx1ODBhZVx1NjYwMlx1NzZjZVx1NTFmOVx1NjU1Nlx1NzFhY1x1N2ZmMVx1ODg4NFx1NTBiMlx1NTk2NVx1''@;'; put 'put ''NjFjYVx1NmZiM1x1ODJhZFx1NjM0Y1x1NjI1Mlx1NTNlZFx1NTQyN1x1N2IwNlx1NTE2Ylx1NzVhNFx1NWRmNFx1NjJkNFx1OGRjYlx1OTc3Nlx1NjI4YVx1ODAxOVx1NTc1ZFx1OTczOFx1N2Y2Mlx1NzIzOFx1NzY3ZFx1NjdjZlx1NzY3ZVx1NjQ0Nlx1NGY3MFx1OGQyNVx1NjJkY1x1N2Ex''@;'; put 'put ''N1x1NjU5MVx1NzNlZFx1NjQyY1x1NjI3M1x1ODIyY1x1OTg4MVx1Njc3Zlx1NzI0OFx1NjI2ZVx1NjJjY1x1NGYzNFx1NzRlM1x1NTM0YVx1NTI5ZVx1N2VjYVx1OTBhNlx1NWUyZVx1Njg4Nlx1Njk5Y1x1ODE4MFx1N2VkMVx1NjhkMlx1NzhjNVx1ODY4Y1x1OTU1MVx1NTA4ZFx1OGMyNFx1''@;'; put 'put ''ODJkZVx1ODBkZVx1NTMwNVx1ODkxMlx1NTI2NVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE3Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTc2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE3Nl1bZ11dPTQ1MDU2K2csX1s0NTA1NitnXT15WzE3Nl1bZ10pO2Zvcih5WzE3N109Ilx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzZjNFx1NzZjN1x1NzZjOVx1NzZjYlx1NzZjY1x1NzZkM1x1NzZkNVx1NzZkOVx1NzZkYVx1NzZkY1x1NzZkZFx1NzZkZVx1NzZlMFx1NzZlMVx1NzZlMlx1NzZlM1x1NzZlNFx1NzZlNlx1NzZlN1x1''@;'; put 'put ''NzZlOFx1NzZlOVx1NzZlYVx1NzZlYlx1NzZlY1x1NzZlZFx1NzZmMFx1NzZmM1x1NzZmNVx1NzZmNlx1NzZmN1x1NzZmYVx1NzZmYlx1NzZmZFx1NzZmZlx1NzcwMFx1NzcwMlx1NzcwM1x1NzcwNVx1NzcwNlx1NzcwYVx1NzcwY1x1NzcwZVx1NzcwZlx1NzcxMFx1NzcxMVx1NzcxMlx1Nzcx''@;'; put 'put ''M1x1NzcxNFx1NzcxNVx1NzcxNlx1NzcxN1x1NzcxOFx1NzcxYlx1NzcxY1x1NzcxZFx1NzcxZVx1NzcyMVx1NzcyM1x1NzcyNFx1NzcyNVx1NzcyN1x1NzcyYVx1NzcyYlx1ZmZmZFx1NzcyY1x1NzcyZVx1NzczMFx1NzczMVx1NzczMlx1NzczM1x1NzczNFx1NzczOVx1NzczYlx1NzczZFx1''@;'; put 'put ''NzczZVx1NzczZlx1Nzc0Mlx1Nzc0NFx1Nzc0NVx1Nzc0Nlx1Nzc0OFx1Nzc0OVx1Nzc0YVx1Nzc0Ylx1Nzc0Y1x1Nzc0ZFx1Nzc0ZVx1Nzc0Zlx1Nzc1Mlx1Nzc1M1x1Nzc1NFx1Nzc1NVx1Nzc1Nlx1Nzc1N1x1Nzc1OFx1Nzc1OVx1Nzc1Y1x1ODU4NFx1OTZmOVx1NGZkZFx1NTgyMVx1OTk3''@;'; put 'put ''MVx1NWI5ZFx1NjJiMVx1NjJhNVx1NjZiNFx1OGM3OVx1OWM4ZFx1NzIwNlx1Njc2Zlx1Nzg5MVx1NjBiMlx1NTM1MVx1NTMxN1x1OGY4OFx1ODBjY1x1OGQxZFx1OTRhMVx1NTAwZFx1NzJjOFx1NTkwN1x1NjBlYlx1NzExOVx1ODhhYlx1NTk1NFx1ODJlZlx1NjcyY1x1N2IyOFx1NWQyOVx1''@;'; put 'put ''N2VmN1x1NzUyZFx1NmNmNVx1OGU2Nlx1OGZmOFx1OTAzY1x1OWYzYlx1NmJkNFx1OTExOVx1N2IxNFx1NWY3Y1x1NzhhN1x1ODRkNlx1ODUzZFx1NmJkNVx1NmJkOVx1NmJkNlx1NWUwMVx1NWU4N1x1NzVmOVx1OTVlZFx1NjU1ZFx1NWYwYVx1NWZjNVx1OGY5Zlx1NThjMVx1ODFjMlx1OTA3''@;'; put 'put ''Zlx1OTY1Ylx1OTdhZFx1OGZiOVx1N2YxNlx1OGQyY1x1NjI0MVx1NGZiZlx1NTNkOFx1NTM1ZVx1OGZhOFx1OGZhOVx1OGZhYlx1OTA0ZFx1NjgwN1x1NWY2YVx1ODE5OFx1ODg2OFx1OWNkNlx1NjE4Ylx1NTIyYlx1NzYyYVx1NWY2Y1x1NjU4Y1x1NmZkMlx1NmVlOFx1NWJiZVx1NjQ0OFx1''@;'; put 'put ''NTE3NVx1NTFiMFx1NjdjNFx1NGUxOVx1NzljOVx1OTk3Y1x1NzBiM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE3N10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTc3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE3N11bZ11dPTQ1MzEyK2csX1s0NTMxMitnXT15WzE3N11bZ10pO2Zvcih5''@;'; put 'put ''WzE3OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzc1ZFx1Nzc1ZVx1Nzc1Zlx1Nzc2MFx1Nzc2NFx1Nzc2N1x1Nzc2OVx1Nzc2YVx1Nzc2ZFx1Nzc2ZVx1Nzc2Zlx1Nzc3MFx1Nzc3MVx1Nzc3Mlx1Nzc3M1x1Nzc3NFx1Nzc3NVx1''@;'; put 'put ''Nzc3Nlx1Nzc3N1x1Nzc3OFx1Nzc3YVx1Nzc3Ylx1Nzc3Y1x1Nzc4MVx1Nzc4Mlx1Nzc4M1x1Nzc4Nlx1Nzc4N1x1Nzc4OFx1Nzc4OVx1Nzc4YVx1Nzc4Ylx1Nzc4Zlx1Nzc5MFx1Nzc5M1x1Nzc5NFx1Nzc5NVx1Nzc5Nlx1Nzc5N1x1Nzc5OFx1Nzc5OVx1Nzc5YVx1Nzc5Ylx1Nzc5Y1x1Nzc5''@;'; put 'put ''ZFx1Nzc5ZVx1NzdhMVx1NzdhM1x1NzdhNFx1NzdhNlx1NzdhOFx1NzdhYlx1NzdhZFx1NzdhZVx1NzdhZlx1NzdiMVx1NzdiMlx1NzdiNFx1NzdiNlx1NzdiN1x1NzdiOFx1NzdiOVx1NzdiYVx1ZmZmZFx1NzdiY1x1NzdiZVx1NzdjMFx1NzdjMVx1NzdjMlx1NzdjM1x1NzdjNFx1NzdjNVx1''@;'; put 'put ''NzdjNlx1NzdjN1x1NzdjOFx1NzdjOVx1NzdjYVx1NzdjYlx1NzdjY1x1NzdjZVx1NzdjZlx1NzdkMFx1NzdkMVx1NzdkMlx1NzdkM1x1NzdkNFx1NzdkNVx1NzdkNlx1NzdkOFx1NzdkOVx1NzdkYVx1NzdkZFx1NzdkZVx1NzdkZlx1NzdlMFx1NzdlMVx1NzdlNFx1NzVjNVx1NWU3Nlx1NzNi''@;'; put 'put ''Ylx1ODNlMFx1NjRhZFx1NjJlOFx1OTRiNVx1NmNlMlx1NTM1YVx1NTJjM1x1NjQwZlx1OTRjMlx1N2I5NFx1NGYyZlx1NWUxYlx1ODIzNlx1ODExNlx1ODE4YVx1NmUyNFx1NmNjYVx1OWE3M1x1NjM1NVx1NTM1Y1x1NTRmYVx1ODg2NVx1NTdlMFx1NGUwZFx1NWUwM1x1NmI2NVx1N2MzZlx1''@;'; put 'put ''OTBlOFx1NjAxNlx1NjRlNlx1NzMxY1x1ODhjMVx1Njc1MFx1NjI0ZFx1OGQyMlx1Nzc2Y1x1OGUyOVx1OTFjN1x1NWY2OVx1ODNkY1x1ODUyMVx1OTkxMFx1NTNjMlx1ODY5NVx1NmI4Ylx1NjBlZFx1NjBlOFx1NzA3Zlx1ODJjZFx1ODIzMVx1NGVkM1x1NmNhN1x1ODVjZlx1NjRjZFx1N2Nk''@;'; put 'put ''OVx1NjlmZFx1NjZmOVx1ODM0OVx1NTM5NVx1N2I1Nlx1NGZhN1x1NTE4Y1x1NmQ0Ylx1NWM0Mlx1OGU2ZFx1NjNkMlx1NTNjOVx1ODMyY1x1ODMzNlx1NjdlNVx1NzhiNFx1NjQzZFx1NWJkZlx1NWM5NFx1NWRlZVx1OGJlN1x1NjJjNlx1NjdmNFx1OGM3YVx1NjQwMFx1NjNiYVx1ODc0OVx1''@;'; put 'put ''OTk4Ylx1OGMxN1x1N2YyMFx1OTRmMlx1NGVhN1x1OTYxMFx1OThhNFx1NjYwY1x1NzMxNlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE3OF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTc4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE3OF1bZ11dPTQ1NTY4K2csX1s0NTU2OCtnXT15WzE3''@;'; put 'put ''OF1bZ10pO2Zvcih5WzE3OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzdlNlx1NzdlOFx1NzdlYVx1NzdlZlx1NzdmMFx1NzdmMVx1NzdmMlx1NzdmNFx1NzdmNVx1NzdmN1x1NzdmOVx1NzdmYVx1NzdmYlx1NzdmY1x1NzgwM1x1''@;'; put 'put ''NzgwNFx1NzgwNVx1NzgwNlx1NzgwN1x1NzgwOFx1NzgwYVx1NzgwYlx1NzgwZVx1NzgwZlx1NzgxMFx1NzgxM1x1NzgxNVx1NzgxOVx1NzgxYlx1NzgxZVx1NzgyMFx1NzgyMVx1NzgyMlx1NzgyNFx1NzgyOFx1NzgyYVx1NzgyYlx1NzgyZVx1NzgyZlx1NzgzMVx1NzgzMlx1NzgzM1x1Nzgz''@;'; put 'put ''NVx1NzgzNlx1NzgzZFx1NzgzZlx1Nzg0MVx1Nzg0Mlx1Nzg0M1x1Nzg0NFx1Nzg0Nlx1Nzg0OFx1Nzg0OVx1Nzg0YVx1Nzg0Ylx1Nzg0ZFx1Nzg0Zlx1Nzg1MVx1Nzg1M1x1Nzg1NFx1Nzg1OFx1Nzg1OVx1Nzg1YVx1ZmZmZFx1Nzg1Ylx1Nzg1Y1x1Nzg1ZVx1Nzg1Zlx1Nzg2MFx1Nzg2MVx1''@;'; put 'put ''Nzg2Mlx1Nzg2M1x1Nzg2NFx1Nzg2NVx1Nzg2Nlx1Nzg2N1x1Nzg2OFx1Nzg2OVx1Nzg2Zlx1Nzg3MFx1Nzg3MVx1Nzg3Mlx1Nzg3M1x1Nzg3NFx1Nzg3NVx1Nzg3Nlx1Nzg3OFx1Nzg3OVx1Nzg3YVx1Nzg3Ylx1Nzg3ZFx1Nzg3ZVx1Nzg3Zlx1Nzg4MFx1Nzg4MVx1Nzg4Mlx1Nzg4M1x1NTcz''@;'; put 'put ''YVx1NWMxZFx1NWUzOFx1OTU3Zlx1NTA3Zlx1ODBhMFx1NTM4Mlx1NjU1ZVx1NzU0NVx1NTUzMVx1NTAyMVx1OGQ4NVx1NjI4NFx1OTQ5ZVx1NjcxZFx1NTYzMlx1NmY2ZVx1NWRlMlx1NTQzNVx1NzA5Mlx1OGY2Nlx1NjI2Zlx1NjRhNFx1NjNhM1x1NWY3Ylx1NmY4OFx1OTBmNFx1ODFlM1x1''@;'; put 'put ''OGZiMFx1NWMxOFx1NjY2OFx1NWZmMVx1NmM4OVx1OTY0OFx1OGQ4MVx1ODg2Y1x1NjQ5MVx1NzlmMFx1NTdjZVx1NmE1OVx1NjIxMFx1NTQ0OFx1NGU1OFx1N2EwYlx1NjBlOVx1NmY4NFx1OGJkYVx1NjI3Zlx1OTAxZVx1OWE4Ylx1NzllNFx1NTQwM1x1NzVmNFx1NjMwMVx1NTMxOVx1NmM2''@;'; put 'put ''MFx1OGZkZlx1NWYxYlx1OWE3MFx1ODAzYlx1OWY3Zlx1NGY4OFx1NWMzYVx1OGQ2NFx1N2ZjNVx1NjVhNVx1NzBiZFx1NTE0NVx1NTFiMlx1ODY2Ylx1NWQwN1x1NWJhMFx1NjJiZFx1OTE2Y1x1NzU3NFx1OGUwY1x1N2EyMFx1NjEwMVx1N2I3OVx1NGVjN1x1N2VmOFx1Nzc4NVx1NGUxMVx1''@;'; put 'put ''ODFlZFx1NTIxZFx1NTFmYVx1NmE3MVx1NTNhOFx1OGU4N1x1OTUwNFx1OTZjZlx1NmVjMVx1OTY2NFx1Njk1YVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE3OV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTc5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE3OV1bZ11dPTQ1ODI0K2csX1s0''@;'; put 'put ''NTgyNCtnXT15WzE3OV1bZ10pO2Zvcih5WzE4MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzg4NFx1Nzg4NVx1Nzg4Nlx1Nzg4OFx1Nzg4YVx1Nzg4Ylx1Nzg4Zlx1Nzg5MFx1Nzg5Mlx1Nzg5NFx1Nzg5NVx1Nzg5Nlx1Nzg5OVx1''@;'; put 'put ''Nzg5ZFx1Nzg5ZVx1NzhhMFx1NzhhMlx1NzhhNFx1NzhhNlx1NzhhOFx1NzhhOVx1NzhhYVx1NzhhYlx1NzhhY1x1NzhhZFx1NzhhZVx1NzhhZlx1NzhiNVx1NzhiNlx1NzhiN1x1NzhiOFx1NzhiYVx1NzhiYlx1NzhiY1x1NzhiZFx1NzhiZlx1NzhjMFx1NzhjMlx1NzhjM1x1NzhjNFx1Nzhj''@;'; put 'put ''Nlx1NzhjN1x1NzhjOFx1NzhjY1x1NzhjZFx1NzhjZVx1NzhjZlx1NzhkMVx1NzhkMlx1NzhkM1x1NzhkNlx1NzhkN1x1NzhkOFx1NzhkYVx1NzhkYlx1NzhkY1x1NzhkZFx1NzhkZVx1NzhkZlx1NzhlMFx1NzhlMVx1NzhlMlx1NzhlM1x1ZmZmZFx1NzhlNFx1NzhlNVx1NzhlNlx1NzhlN1x1''@;'; put 'put ''NzhlOVx1NzhlYVx1NzhlYlx1NzhlZFx1NzhlZVx1NzhlZlx1NzhmMFx1NzhmMVx1NzhmM1x1NzhmNVx1NzhmNlx1NzhmOFx1NzhmOVx1NzhmYlx1NzhmY1x1NzhmZFx1NzhmZVx1NzhmZlx1NzkwMFx1NzkwMlx1NzkwM1x1NzkwNFx1NzkwNlx1NzkwN1x1NzkwOFx1NzkwOVx1NzkwYVx1Nzkw''@;'; put 'put ''Ylx1NzkwY1x1Nzg0MFx1NTBhOFx1NzdkN1x1NjQxMFx1ODllNlx1NTkwNFx1NjNlM1x1NWRkZFx1N2E3Zlx1NjkzZFx1NGYyMFx1ODIzOVx1NTU5OFx1NGUzMlx1NzVhZVx1N2E5N1x1NWU2Mlx1NWU4YVx1OTVlZlx1NTIxYlx1NTQzOVx1NzA4YVx1NjM3Nlx1OTUyNFx1NTc4Mlx1NjYyNVx1''@;'; put 'put ''NjkzZlx1OTE4N1x1NTUwN1x1NmRmM1x1N2VhZlx1ODgyMlx1NjIzM1x1N2VmMFx1NzViNVx1ODMyOFx1NzhjMVx1OTZjY1x1OGY5ZVx1NjE0OFx1NzRmN1x1OGJjZFx1NmI2NFx1NTIzYVx1OGQ1MFx1NmIyMVx1ODA2YVx1ODQ3MVx1NTZmMVx1NTMwNlx1NGVjZVx1NGUxYlx1NTFkMVx1N2M5''@;'; put 'put ''N1x1OTE4Ylx1N2MwN1x1NGZjM1x1OGU3Zlx1N2JlMVx1N2E5Y1x1NjQ2N1x1NWQxNFx1NTBhY1x1ODEwNlx1NzYwMVx1N2NiOVx1NmRlY1x1N2ZlMFx1Njc1MVx1NWI1OFx1NWJmOFx1NzhjYlx1NjRhZVx1NjQxM1x1NjNhYVx1NjMyYlx1OTUxOVx1NjQyZFx1OGZiZVx1N2I1NFx1NzYyOVx1''@;'; put 'put ''NjI1M1x1NTkyN1x1NTQ0Nlx1NmI3OVx1NTBhM1x1NjIzNFx1NWUyNlx1NmI4Nlx1NGVlM1x1OGQzN1x1ODg4Ylx1NWY4NVx1OTAyZVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE4MF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTgwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE4MF1bZ11d''@;'; put 'put ''PTQ2MDgwK2csX1s0NjA4MCtnXT15WzE4MF1bZ10pO2Zvcih5WzE4MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1NzkwZFx1NzkwZVx1NzkwZlx1NzkxMFx1NzkxMVx1NzkxMlx1NzkxNFx1NzkxNVx1NzkxNlx1NzkxN1x1NzkxOFx1''@;'; put 'put ''NzkxOVx1NzkxYVx1NzkxYlx1NzkxY1x1NzkxZFx1NzkxZlx1NzkyMFx1NzkyMVx1NzkyMlx1NzkyM1x1NzkyNVx1NzkyNlx1NzkyN1x1NzkyOFx1NzkyOVx1NzkyYVx1NzkyYlx1NzkyY1x1NzkyZFx1NzkyZVx1NzkyZlx1NzkzMFx1NzkzMVx1NzkzMlx1NzkzM1x1NzkzNVx1NzkzNlx1Nzkz''@;'; put 'put ''N1x1NzkzOFx1NzkzOVx1NzkzZFx1NzkzZlx1Nzk0Mlx1Nzk0M1x1Nzk0NFx1Nzk0NVx1Nzk0N1x1Nzk0YVx1Nzk0Ylx1Nzk0Y1x1Nzk0ZFx1Nzk0ZVx1Nzk0Zlx1Nzk1MFx1Nzk1MVx1Nzk1Mlx1Nzk1NFx1Nzk1NVx1Nzk1OFx1Nzk1OVx1Nzk2MVx1Nzk2M1x1ZmZmZFx1Nzk2NFx1Nzk2Nlx1''@;'; put 'put ''Nzk2OVx1Nzk2YVx1Nzk2Ylx1Nzk2Y1x1Nzk2ZVx1Nzk3MFx1Nzk3MVx1Nzk3Mlx1Nzk3M1x1Nzk3NFx1Nzk3NVx1Nzk3Nlx1Nzk3OVx1Nzk3Ylx1Nzk3Y1x1Nzk3ZFx1Nzk3ZVx1Nzk3Zlx1Nzk4Mlx1Nzk4M1x1Nzk4Nlx1Nzk4N1x1Nzk4OFx1Nzk4OVx1Nzk4Ylx1Nzk4Y1x1Nzk4ZFx1Nzk4''@;'; put 'put ''ZVx1Nzk5MFx1Nzk5MVx1Nzk5Mlx1NjAyMFx1ODAzZFx1NjJjNVx1NGUzOVx1NTM1NVx1OTBmOFx1NjNiOFx1ODBjNlx1NjVlNlx1NmMyZVx1NGY0Nlx1NjBlZVx1NmRlMVx1OGJkZVx1NWYzOVx1ODZjYlx1NWY1M1x1NjMyMVx1NTE1YVx1ODM2MVx1Njg2M1x1NTIwMFx1NjM2M1x1OGU0OFx1''@;'; put 'put ''NTAxMlx1NWM5Ylx1Nzk3N1x1NWJmY1x1NTIzMFx1N2EzYlx1NjBiY1x1OTA1M1x1NzZkN1x1NWZiN1x1NWY5N1x1NzY4NFx1OGU2Y1x1NzA2Zlx1NzY3Ylx1N2I0OVx1NzdhYVx1NTFmM1x1OTA5M1x1NTgyNFx1NGY0ZVx1NmVmNFx1OGZlYVx1NjU0Y1x1N2IxYlx1NzJjNFx1NmRhNFx1N2Zk''@;'; put 'put ''Zlx1NWFlMVx1NjJiNVx1NWU5NVx1NTczMFx1ODQ4Mlx1N2IyY1x1NWUxZFx1NWYxZlx1OTAxMlx1N2YxNFx1OThhMFx1NjM4Mlx1NmVjN1x1Nzg5OFx1NzBiOVx1NTE3OFx1OTc1Ylx1NTdhYlx1NzUzNVx1NGY0M1x1NzUzOFx1NWU5N1x1NjBlNlx1NTk2MFx1NmRjMFx1NmJiZlx1Nzg4OVx1''@;'; put 'put ''NTNmY1x1OTZkNVx1NTFjYlx1NTIwMVx1NjM4OVx1NTQwYVx1OTQ5M1x1OGMwM1x1OGRjY1x1NzIzOVx1Nzg5Zlx1ODc3Nlx1OGZlZFx1OGMwZFx1NTNlMFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE4MV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTgxXVtnXS5jaGFyQ29kZUF0KDApJiYo''@;'; put 'put ''SVt5WzE4MV1bZ11dPTQ2MzM2K2csX1s0NjMzNitnXT15WzE4MV1bZ10pO2Zvcih5WzE4Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1Nzk5M1x1Nzk5NFx1Nzk5NVx1Nzk5Nlx1Nzk5N1x1Nzk5OFx1Nzk5OVx1Nzk5Ylx1Nzk5Y1x1''@;'; put 'put ''Nzk5ZFx1Nzk5ZVx1Nzk5Zlx1NzlhMFx1NzlhMVx1NzlhMlx1NzlhM1x1NzlhNFx1NzlhNVx1NzlhNlx1NzlhOFx1NzlhOVx1NzlhYVx1NzlhYlx1NzlhY1x1NzlhZFx1NzlhZVx1NzlhZlx1NzliMFx1NzliMVx1NzliMlx1NzliNFx1NzliNVx1NzliNlx1NzliN1x1NzliOFx1NzliY1x1Nzli''@;'; put 'put ''Zlx1NzljMlx1NzljNFx1NzljNVx1NzljN1x1NzljOFx1NzljYVx1NzljY1x1NzljZVx1NzljZlx1NzlkMFx1NzlkM1x1NzlkNFx1NzlkNlx1NzlkN1x1NzlkOVx1NzlkYVx1NzlkYlx1NzlkY1x1NzlkZFx1NzlkZVx1NzllMFx1NzllMVx1NzllMlx1NzllNVx1NzllOFx1NzllYVx1ZmZmZFx1''@;'; put 'put ''NzllY1x1NzllZVx1NzlmMVx1NzlmMlx1NzlmM1x1NzlmNFx1NzlmNVx1NzlmNlx1NzlmN1x1NzlmOVx1NzlmYVx1NzlmY1x1NzlmZVx1NzlmZlx1N2EwMVx1N2EwNFx1N2EwNVx1N2EwN1x1N2EwOFx1N2EwOVx1N2EwYVx1N2EwY1x1N2EwZlx1N2ExMFx1N2ExMVx1N2ExMlx1N2ExM1x1N2Ex''@;'; put 'put ''NVx1N2ExNlx1N2ExOFx1N2ExOVx1N2ExYlx1N2ExY1x1NGUwMVx1NzZlZlx1NTNlZVx1OTQ4OVx1OTg3Nlx1OWYwZVx1OTUyZFx1NWI5YVx1OGJhMlx1NGUyMlx1NGUxY1x1NTFhY1x1ODQ2M1x1NjFjMlx1NTJhOFx1NjgwYlx1NGY5N1x1NjA2Ylx1NTFiYlx1NmQxZVx1NTE1Y1x1NjI5Nlx1''@;'; put 'put ''NjU5N1x1OTY2MVx1OGM0Nlx1OTAxN1x1NzVkOFx1OTBmZFx1Nzc2M1x1NmJkMlx1NzI4YVx1NzJlY1x1OGJmYlx1NTgzNVx1Nzc3OVx1OGQ0Y1x1Njc1Y1x1OTU0MFx1ODA5YVx1NWVhNlx1NmUyMVx1NTk5Mlx1N2FlZlx1NzdlZFx1OTUzYlx1NmJiNVx1NjVhZFx1N2YwZVx1NTgwNlx1NTE1''@;'; put 'put ''MVx1OTYxZlx1NWJmOVx1NThhOVx1NTQyOFx1OGU3Mlx1NjU2Nlx1OTg3Zlx1NTZlNFx1OTQ5ZFx1NzZmZVx1OTA0MVx1NjM4N1x1NTRjNlx1NTkxYVx1NTkzYVx1NTc5Ylx1OGViMlx1NjczNVx1OGRmYVx1ODIzNVx1NTI0MVx1NjBmMFx1NTgxNVx1ODZmZVx1NWNlOFx1OWU0NVx1NGZjNFx1''@;'; put 'put ''OTg5ZFx1OGJiOVx1NWEyNVx1NjA3Nlx1NTM4NFx1NjI3Y1x1OTA0Zlx1OTEwMlx1OTk3Zlx1NjA2OVx1ODAwY1x1NTEzZlx1ODAzM1x1NWMxNFx1OTk3NVx1NmQzMVx1NGU4Y1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE4Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTgyXVtnXS5jaGFy''@;'; put 'put ''Q29kZUF0KDApJiYoSVt5WzE4Ml1bZ11dPTQ2NTkyK2csX1s0NjU5MitnXT15WzE4Ml1bZ10pO2Zvcih5WzE4M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2ExZFx1N2ExZlx1N2EyMVx1N2EyMlx1N2EyNFx1N2EyNVx1N2EyNlx1''@;'; put 'put ''N2EyN1x1N2EyOFx1N2EyOVx1N2EyYVx1N2EyYlx1N2EyY1x1N2EyZFx1N2EyZVx1N2EyZlx1N2EzMFx1N2EzMVx1N2EzMlx1N2EzNFx1N2EzNVx1N2EzNlx1N2EzOFx1N2EzYVx1N2EzZVx1N2E0MFx1N2E0MVx1N2E0Mlx1N2E0M1x1N2E0NFx1N2E0NVx1N2E0N1x1N2E0OFx1N2E0OVx1N2E0''@;'; put 'put ''YVx1N2E0Ylx1N2E0Y1x1N2E0ZFx1N2E0ZVx1N2E0Zlx1N2E1MFx1N2E1Mlx1N2E1M1x1N2E1NFx1N2E1NVx1N2E1Nlx1N2E1OFx1N2E1OVx1N2E1YVx1N2E1Ylx1N2E1Y1x1N2E1ZFx1N2E1ZVx1N2E1Zlx1N2E2MFx1N2E2MVx1N2E2Mlx1N2E2M1x1N2E2NFx1N2E2NVx1N2E2Nlx1N2E2N1x1''@;'; put 'put ''N2E2OFx1ZmZmZFx1N2E2OVx1N2E2YVx1N2E2Ylx1N2E2Y1x1N2E2ZFx1N2E2ZVx1N2E2Zlx1N2E3MVx1N2E3Mlx1N2E3M1x1N2E3NVx1N2E3Ylx1N2E3Y1x1N2E3ZFx1N2E3ZVx1N2E4Mlx1N2E4NVx1N2E4N1x1N2E4OVx1N2E4YVx1N2E4Ylx1N2E4Y1x1N2E4ZVx1N2E4Zlx1N2E5MFx1N2E5''@;'; put 'put ''M1x1N2E5NFx1N2E5OVx1N2E5YVx1N2E5Ylx1N2E5ZVx1N2FhMVx1N2FhMlx1OGQzMFx1NTNkMVx1N2Y1YVx1N2I0Zlx1NGYxMFx1NGU0Zlx1OTYwMFx1NmNkNVx1NzNkMFx1ODVlOVx1NWUwNlx1NzU2YVx1N2ZmYlx1NmEwYVx1NzdmZVx1OTQ5Mlx1N2U0MVx1NTFlMVx1NzBlNlx1NTNjZFx1''@;'; put 'put ''OGZkNFx1ODMwM1x1OGQyOVx1NzJhZlx1OTk2ZFx1NmNkYlx1NTc0YVx1ODJiM1x1NjViOVx1ODBhYVx1NjIzZlx1OTYzMlx1NTlhOFx1NGVmZlx1OGJiZlx1N2ViYVx1NjUzZVx1ODNmMlx1OTc1ZVx1NTU2MVx1OThkZVx1ODBhNVx1NTMyYVx1OGJmZFx1NTQyMFx1ODBiYVx1NWU5Zlx1NmNi''@;'; put 'put ''OFx1OGQzOVx1ODJhY1x1OTE1YVx1NTQyOVx1NmMxYlx1NTIwNlx1N2ViN1x1NTc1Zlx1NzExYVx1NmM3ZVx1N2M4OVx1NTk0Ylx1NGVmZFx1NWZmZlx1NjEyNFx1N2NhYVx1NGUzMFx1NWMwMVx1NjdhYlx1ODcwMlx1NWNmMFx1OTUwYlx1OThjZVx1NzVhZlx1NzBmZFx1OTAyMlx1NTFhZlx1''@;'; put 'put ''N2YxZFx1OGJiZFx1NTk0OVx1NTFlNFx1NGY1Ylx1NTQyNlx1NTkyYlx1NjU3N1x1ODBhNFx1NWI3NVx1NjI3Nlx1NjJjMlx1OGY5MFx1NWU0NVx1NmMxZlx1N2IyNlx1NGYwZlx1NGZkOFx1NjcwZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE4M10ubGVuZ3RoOysrZyk2NTUzMyE9PXlb''@;'; put 'put ''MTgzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE4M11bZ11dPTQ2ODQ4K2csX1s0Njg0OCtnXT15WzE4M11bZ10pO2Zvcih5WzE4NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2FhM1x1N2FhNFx1N2FhN1x1N2FhOVx1N2FhYVx1''@;'; put 'put ''N2FhYlx1N2FhZVx1N2FhZlx1N2FiMFx1N2FiMVx1N2FiMlx1N2FiNFx1N2FiNVx1N2FiNlx1N2FiN1x1N2FiOFx1N2FiOVx1N2FiYVx1N2FiYlx1N2FiY1x1N2FiZFx1N2FiZVx1N2FjMFx1N2FjMVx1N2FjMlx1N2FjM1x1N2FjNFx1N2FjNVx1N2FjNlx1N2FjN1x1N2FjOFx1N2FjOVx1N2Fj''@;'; put 'put ''YVx1N2FjY1x1N2FjZFx1N2FjZVx1N2FjZlx1N2FkMFx1N2FkMVx1N2FkMlx1N2FkM1x1N2FkNFx1N2FkNVx1N2FkN1x1N2FkOFx1N2FkYVx1N2FkYlx1N2FkY1x1N2FkZFx1N2FlMVx1N2FlMlx1N2FlNFx1N2FlN1x1N2FlOFx1N2FlOVx1N2FlYVx1N2FlYlx1N2FlY1x1N2FlZVx1N2FmMFx1''@;'; put 'put ''N2FmMVx1N2FmMlx1N2FmM1x1ZmZmZFx1N2FmNFx1N2FmNVx1N2FmNlx1N2FmN1x1N2FmOFx1N2FmYlx1N2FmY1x1N2FmZVx1N2IwMFx1N2IwMVx1N2IwMlx1N2IwNVx1N2IwN1x1N2IwOVx1N2IwY1x1N2IwZFx1N2IwZVx1N2IxMFx1N2IxMlx1N2IxM1x1N2IxNlx1N2IxN1x1N2IxOFx1N2Ix''@;'; put 'put ''YVx1N2IxY1x1N2IxZFx1N2IxZlx1N2IyMVx1N2IyMlx1N2IyM1x1N2IyN1x1N2IyOVx1N2IyZFx1NmQ2ZVx1NmRhYVx1Nzk4Zlx1ODhiMVx1NWYxN1x1NzUyYlx1NjI5YVx1OGY4NVx1NGZlZlx1OTFkY1x1NjVhN1x1ODEyZlx1ODE1MVx1NWU5Y1x1ODE1MFx1OGQ3NFx1NTI2Zlx1ODk4Nlx1''@;'; put 'put ''OGQ0Ylx1NTkwZFx1NTA4NVx1NGVkOFx1OTYxY1x1NzIzNlx1ODE3OVx1OGQxZlx1NWJjY1x1OGJhM1x1OTY0NFx1NTk4N1x1N2YxYVx1NTQ5MFx1NTY3Nlx1NTYwZVx1OGJlNVx1NjUzOVx1Njk4Mlx1OTQ5OVx1NzZkNlx1NmU4OVx1NWU3Mlx1NzUxOFx1Njc0Nlx1NjdkMVx1N2FmZlx1ODA5''@;'; put 'put ''ZFx1OGQ3Nlx1NjExZlx1NzljNlx1NjU2Mlx1OGQ2M1x1NTE4OFx1NTIxYVx1OTRhMlx1N2YzOFx1ODA5Ylx1N2ViMlx1NWM5N1x1NmUyZlx1Njc2MFx1N2JkOVx1NzY4Ylx1OWFkOFx1ODE4Zlx1N2Y5NFx1N2NkNVx1NjQxZVx1OTU1MFx1N2EzZlx1NTQ0YVx1NTRlNVx1NmI0Y1x1NjQwMVx1''@;'; put 'put ''NjIwOFx1OWUzZFx1ODBmM1x1NzU5OVx1NTI3Mlx1OTc2OVx1ODQ1Ylx1NjgzY1x1ODZlNFx1OTYwMVx1OTY5NFx1OTRlY1x1NGUyYVx1NTQwNFx1N2VkOVx1NjgzOVx1OGRkZlx1ODAxNVx1NjZmNFx1NWU5YVx1N2ZiOVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE4NF0ubGVuZ3RoOysr''@;'; put 'put ''Zyk2NTUzMyE9PXlbMTg0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE4NF1bZ11dPTQ3MTA0K2csX1s0NzEwNCtnXT15WzE4NF1bZ10pO2Zvcih5WzE4NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2IyZlx1N2IzMFx1N2IzMlx1''@;'; put 'put ''N2IzNFx1N2IzNVx1N2IzNlx1N2IzN1x1N2IzOVx1N2IzYlx1N2IzZFx1N2IzZlx1N2I0MFx1N2I0MVx1N2I0Mlx1N2I0M1x1N2I0NFx1N2I0Nlx1N2I0OFx1N2I0YVx1N2I0ZFx1N2I0ZVx1N2I1M1x1N2I1NVx1N2I1N1x1N2I1OVx1N2I1Y1x1N2I1ZVx1N2I1Zlx1N2I2MVx1N2I2M1x1N2I2''@;'; put 'put ''NFx1N2I2NVx1N2I2Nlx1N2I2N1x1N2I2OFx1N2I2OVx1N2I2YVx1N2I2Ylx1N2I2Y1x1N2I2ZFx1N2I2Zlx1N2I3MFx1N2I3M1x1N2I3NFx1N2I3Nlx1N2I3OFx1N2I3YVx1N2I3Y1x1N2I3ZFx1N2I3Zlx1N2I4MVx1N2I4Mlx1N2I4M1x1N2I4NFx1N2I4Nlx1N2I4N1x1N2I4OFx1N2I4OVx1''@;'; put 'put ''N2I4YVx1N2I4Ylx1N2I4Y1x1N2I4ZVx1N2I4Zlx1ZmZmZFx1N2I5MVx1N2I5Mlx1N2I5M1x1N2I5Nlx1N2I5OFx1N2I5OVx1N2I5YVx1N2I5Ylx1N2I5ZVx1N2I5Zlx1N2JhMFx1N2JhM1x1N2JhNFx1N2JhNVx1N2JhZVx1N2JhZlx1N2JiMFx1N2JiMlx1N2JiM1x1N2JiNVx1N2JiNlx1N2Ji''@;'; put 'put ''N1x1N2JiOVx1N2JiYVx1N2JiYlx1N2JiY1x1N2JiZFx1N2JiZVx1N2JiZlx1N2JjMFx1N2JjMlx1N2JjM1x1N2JjNFx1NTdjMlx1ODAzZlx1Njg5N1x1NWRlNVx1NjUzYlx1NTI5Zlx1NjA2ZFx1OWY5YVx1NGY5Ylx1OGVhY1x1NTE2Y1x1NWJhYlx1NWYxM1x1NWRlOVx1NmM1ZVx1NjJmMVx1''@;'; put 'put ''OGQyMVx1NTE3MVx1OTRhOVx1NTJmZVx1NmM5Zlx1ODJkZlx1NzJkN1x1NTdhMlx1Njc4NFx1OGQyZFx1NTkxZlx1OGY5Y1x1ODNjN1x1NTQ5NVx1N2I4ZFx1NGYzMFx1NmNiZFx1NWI2NFx1NTlkMVx1OWYxM1x1NTNlNFx1ODZjYVx1OWFhOFx1OGMzN1x1ODBhMVx1NjU0NVx1OTg3ZVx1NTZm''@;'; put 'put ''YVx1OTZjN1x1NTIyZVx1NzRkY1x1NTI1MFx1NWJlMVx1NjMwMlx1ODkwMlx1NGU1Nlx1NjJkMFx1NjAyYVx1NjhmYVx1NTE3M1x1NWI5OFx1NTFhMFx1ODljMlx1N2JhMVx1OTk4Nlx1N2Y1MFx1NjBlZlx1NzA0Y1x1OGQyZlx1NTE0OVx1NWU3Zlx1OTAxYlx1NzQ3MFx1ODljNFx1NTcyZFx1''@;'; put 'put ''Nzg0NVx1NWY1Mlx1OWY5Zlx1OTVmYVx1OGY2OFx1OWIzY1x1OGJlMVx1NzY3OFx1Njg0Mlx1NjdkY1x1OGRlYVx1OGQzNVx1NTIzZFx1OGY4YVx1NmVkYVx1NjhjZFx1OTUwNVx1OTBlZFx1NTZmZFx1Njc5Y1x1ODhmOVx1OGZjN1x1NTRjOFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE4''@;'; put 'put ''NV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTg1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE4NV1bZ11dPTQ3MzYwK2csX1s0NzM2MCtnXT15WzE4NV1bZ10pO2Zvcih5WzE4Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2JjNVx1''@;'; put 'put ''N2JjOFx1N2JjOVx1N2JjYVx1N2JjYlx1N2JjZFx1N2JjZVx1N2JjZlx1N2JkMFx1N2JkMlx1N2JkNFx1N2JkNVx1N2JkNlx1N2JkN1x1N2JkOFx1N2JkYlx1N2JkY1x1N2JkZVx1N2JkZlx1N2JlMFx1N2JlMlx1N2JlM1x1N2JlNFx1N2JlN1x1N2JlOFx1N2JlOVx1N2JlYlx1N2JlY1x1N2Jl''@;'; put 'put ''ZFx1N2JlZlx1N2JmMFx1N2JmMlx1N2JmM1x1N2JmNFx1N2JmNVx1N2JmNlx1N2JmOFx1N2JmOVx1N2JmYVx1N2JmYlx1N2JmZFx1N2JmZlx1N2MwMFx1N2MwMVx1N2MwMlx1N2MwM1x1N2MwNFx1N2MwNVx1N2MwNlx1N2MwOFx1N2MwOVx1N2MwYVx1N2MwZFx1N2MwZVx1N2MxMFx1N2MxMVx1''@;'; put 'put ''N2MxMlx1N2MxM1x1N2MxNFx1N2MxNVx1N2MxN1x1N2MxOFx1N2MxOVx1ZmZmZFx1N2MxYVx1N2MxYlx1N2MxY1x1N2MxZFx1N2MxZVx1N2MyMFx1N2MyMVx1N2MyMlx1N2MyM1x1N2MyNFx1N2MyNVx1N2MyOFx1N2MyOVx1N2MyYlx1N2MyY1x1N2MyZFx1N2MyZVx1N2MyZlx1N2MzMFx1N2Mz''@;'; put 'put ''MVx1N2MzMlx1N2MzM1x1N2MzNFx1N2MzNVx1N2MzNlx1N2MzN1x1N2MzOVx1N2MzYVx1N2MzYlx1N2MzY1x1N2MzZFx1N2MzZVx1N2M0Mlx1OWFiOFx1NWI2OVx1NmQ3N1x1NmMyNlx1NGVhNVx1NWJiM1x1OWE4N1x1OTE2M1x1NjFhOFx1OTBhZlx1OTdlOVx1NTQyYlx1NmRiNVx1NWJkMlx1''@;'; put 'put ''NTFmZFx1NTU4YVx1N2Y1NVx1N2ZmMFx1NjRiY1x1NjM0ZFx1NjVmMVx1NjFiZVx1NjA4ZFx1NzEwYVx1NmM1N1x1NmM0OVx1NTkyZlx1Njc2ZFx1ODIyYVx1NThkNVx1NTY4ZVx1OGM2YVx1NmJlYlx1OTBkZFx1NTk3ZFx1ODAxN1x1NTNmN1x1NmQ2OVx1NTQ3NVx1NTU5ZFx1ODM3N1x1ODNj''@;'; put 'put ''Zlx1NjgzOFx1NzliZVx1NTQ4Y1x1NGY1NVx1NTQwOFx1NzZkMlx1OGM4OVx1OTYwMlx1NmNiM1x1NmRiOFx1OGQ2Ylx1ODkxMFx1OWU2NFx1OGQzYVx1NTYzZlx1OWVkMVx1NzVkNVx1NWY4OFx1NzJlMFx1NjA2OFx1NTRmY1x1NGVhOFx1NmEyYVx1ODg2MVx1NjA1Mlx1OGY3MFx1NTRjNFx1''@;'; put 'put ''NzBkOFx1ODY3OVx1OWUzZlx1NmQyYVx1NWI4Zlx1NWYxOFx1N2VhMlx1NTU4OVx1NGZhZlx1NzMzNFx1NTQzY1x1NTM5YVx1NTAxOVx1NTQwZVx1NTQ3Y1x1NGU0ZVx1NWZmZFx1NzQ1YVx1NThmNlx1ODQ2Ylx1ODBlMVx1ODc3NFx1NzJkMFx1N2NjYVx1NmU1Nlx1ZmZmZCIuc3BsaXQoIiIp''@;'; put 'put ''LGc9MDtnIT15WzE4Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTg2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE4Nl1bZ11dPTQ3NjE2K2csX1s0NzYxNitnXT15WzE4Nl1bZ10pO2Zvcih5WzE4N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1N2M0M1x1N2M0NFx1N2M0NVx1N2M0Nlx1N2M0N1x1N2M0OFx1N2M0OVx1N2M0YVx1N2M0Ylx1N2M0Y1x1N2M0ZVx1N2M0Zlx1N2M1MFx1N2M1MVx1N2M1Mlx1N2M1M1x1N2M1NFx1N2M1NVx1N2M1Nlx1N2M1N1x1N2M1OFx1N2M1OVx1N2M1YVx1N2M1Ylx1N2M1Y1x1N2M1ZFx1N2M1''@;'; put 'put ''ZVx1N2M1Zlx1N2M2MFx1N2M2MVx1N2M2Mlx1N2M2M1x1N2M2NFx1N2M2NVx1N2M2Nlx1N2M2N1x1N2M2OFx1N2M2OVx1N2M2YVx1N2M2Ylx1N2M2Y1x1N2M2ZFx1N2M2ZVx1N2M2Zlx1N2M3MFx1N2M3MVx1N2M3Mlx1N2M3NVx1N2M3Nlx1N2M3N1x1N2M3OFx1N2M3OVx1N2M3YVx1N2M3ZVx1''@;'; put 'put ''N2M3Zlx1N2M4MFx1N2M4MVx1N2M4Mlx1N2M4M1x1N2M4NFx1N2M4NVx1N2M4Nlx1N2M4N1x1ZmZmZFx1N2M4OFx1N2M4YVx1N2M4Ylx1N2M4Y1x1N2M4ZFx1N2M4ZVx1N2M4Zlx1N2M5MFx1N2M5M1x1N2M5NFx1N2M5Nlx1N2M5OVx1N2M5YVx1N2M5Ylx1N2NhMFx1N2NhMVx1N2NhM1x1N2Nh''@;'; put 'put ''Nlx1N2NhN1x1N2NhOFx1N2NhOVx1N2NhYlx1N2NhY1x1N2NhZFx1N2NhZlx1N2NiMFx1N2NiNFx1N2NiNVx1N2NiNlx1N2NiN1x1N2NiOFx1N2NiYVx1N2NiYlx1NWYyN1x1ODY0ZVx1NTUyY1x1NjJhNFx1NGU5Mlx1NmNhYVx1NjIzN1x1ODJiMVx1NTRkN1x1NTM0ZVx1NzMzZVx1NmVkMVx1''@;'; put 'put ''NzUzYlx1NTIxMlx1NTMxNlx1OGJkZFx1NjlkMFx1NWY4YVx1NjAwMFx1NmRlZVx1NTc0Zlx1NmIyMlx1NzNhZlx1Njg1M1x1OGZkOFx1N2YxM1x1NjM2Mlx1NjBhM1x1NTUyNFx1NzVlYVx1OGM2Mlx1NzExNVx1NmRhM1x1NWJhNlx1NWU3Ylx1ODM1Mlx1NjE0Y1x1OWVjNFx1NzhmYVx1ODc1''@;'; put 'put ''N1x1N2MyN1x1NzY4N1x1NTFmMFx1NjBmNlx1NzE0Y1x1NjY0M1x1NWU0Y1x1NjA0ZFx1OGMwZVx1NzA3MFx1NjMyNVx1OGY4OVx1NWZiZFx1NjA2Mlx1ODZkNFx1NTZkZVx1NmJjMVx1NjA5NFx1NjE2N1x1NTM0OVx1NjBlMFx1NjY2Nlx1OGQzZlx1NzlmZFx1NGYxYVx1NzBlOVx1NmM0N1x1''@;'; put 'put ''OGJiM1x1OGJmMlx1N2VkOFx1ODM2NFx1NjYwZlx1NWE1YVx1OWI0Mlx1NmQ1MVx1NmRmN1x1OGM0MVx1NmQzYlx1NGYxOVx1NzA2Ylx1ODNiN1x1NjIxNlx1NjBkMVx1OTcwZFx1OGQyN1x1Nzk3OFx1NTFmYlx1NTczZVx1NTdmYVx1NjczYVx1NzU3OFx1N2EzZFx1NzllZlx1N2I5NVx1ZmZm''@;'; put 'put ''ZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE4N10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTg3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE4N11bZ11dPTQ3ODcyK2csX1s0Nzg3MitnXT15WzE4N11bZ10pO2Zvcih5WzE4OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1N2NiZlx1N2NjMFx1N2NjMlx1N2NjM1x1N2NjNFx1N2NjNlx1N2NjOVx1N2NjYlx1N2NjZVx1N2NjZlx1N2NkMFx1N2NkMVx1N2NkMlx1N2NkM1x1N2NkNFx1N2NkOFx1N2NkYVx1N2NkYlx1N2NkZFx1N2NkZVx1N2NlMVx1N2NlMlx1N2NlM1x1N2NlNFx1N2Nl''@;'; put 'put ''NVx1N2NlNlx1N2NlN1x1N2NlOVx1N2NlYVx1N2NlYlx1N2NlY1x1N2NlZFx1N2NlZVx1N2NmMFx1N2NmMVx1N2NmMlx1N2NmM1x1N2NmNFx1N2NmNVx1N2NmNlx1N2NmN1x1N2NmOVx1N2NmYVx1N2NmY1x1N2NmZFx1N2NmZVx1N2NmZlx1N2QwMFx1N2QwMVx1N2QwMlx1N2QwM1x1N2QwNFx1''@;'; put 'put ''N2QwNVx1N2QwNlx1N2QwN1x1N2QwOFx1N2QwOVx1N2QwYlx1N2QwY1x1N2QwZFx1N2QwZVx1N2QwZlx1N2QxMFx1ZmZmZFx1N2QxMVx1N2QxMlx1N2QxM1x1N2QxNFx1N2QxNVx1N2QxNlx1N2QxN1x1N2QxOFx1N2QxOVx1N2QxYVx1N2QxYlx1N2QxY1x1N2QxZFx1N2QxZVx1N2QxZlx1N2Qy''@;'; put 'put ''MVx1N2QyM1x1N2QyNFx1N2QyNVx1N2QyNlx1N2QyOFx1N2QyOVx1N2QyYVx1N2QyY1x1N2QyZFx1N2QyZVx1N2QzMFx1N2QzMVx1N2QzMlx1N2QzM1x1N2QzNFx1N2QzNVx1N2QzNlx1ODA4Y1x1OTk2NVx1OGZmOVx1NmZjMFx1OGJhNVx1OWUyMVx1NTllY1x1N2VlOVx1N2YwOVx1NTQwOVx1''@;'; put 'put ''Njc4MVx1NjhkOFx1OGY5MVx1N2M0ZFx1OTZjNlx1NTNjYVx1NjAyNVx1NzViZVx1NmM3Mlx1NTM3M1x1NWFjOVx1N2VhN1x1NjMyNFx1NTFlMFx1ODEwYVx1NWRmMVx1ODRkZlx1NjI4MFx1NTE4MFx1NWI2M1x1NGYwZVx1Nzk2ZFx1NTI0Mlx1NjBiOFx1NmQ0ZVx1NWJjNFx1NWJjMlx1OGJh''@;'; put 'put ''MVx1OGJiMFx1NjVlMlx1NWZjY1x1OTY0NVx1NTk5M1x1N2VlN1x1N2VhYVx1NTYwOVx1NjdiN1x1NTkzOVx1NGY3M1x1NWJiNlx1NTJhMFx1ODM1YVx1OTg4YVx1OGQzZVx1NzUzMlx1OTRiZVx1NTA0N1x1N2EzY1x1NGVmN1x1NjdiNlx1OWE3ZVx1NWFjMVx1NmI3Y1x1NzZkMVx1NTc1YVx1''@;'; put 'put ''NWMxNlx1N2IzYVx1OTVmNFx1NzE0ZVx1NTE3Y1x1ODBhOVx1ODI3MFx1NTk3OFx1N2YwNFx1ODMyN1x1NjhjMFx1NjdlY1x1NzhiMVx1Nzg3N1x1NjJlM1x1NjM2MVx1N2I4MFx1NGZlZFx1NTI2YVx1NTFjZlx1ODM1MFx1NjlkYlx1OTI3NFx1OGRmNVx1OGQzMVx1ODljMVx1OTUyZVx1N2Jh''@;'; put 'put ''ZFx1NGVmNlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE4OF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTg4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE4OF1bZ11dPTQ4MTI4K2csX1s0ODEyOCtnXT15WzE4OF1bZ10pO2Zvcih5WzE4OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2QzN1x1N2QzOFx1N2QzOVx1N2QzYVx1N2QzYlx1N2QzY1x1N2QzZFx1N2QzZVx1N2QzZlx1N2Q0MFx1N2Q0MVx1N2Q0Mlx1N2Q0M1x1N2Q0NFx1N2Q0NVx1N2Q0Nlx1N2Q0N1x1N2Q0OFx1N2Q0OVx1N2Q0YVx1N2Q0Ylx1N2Q0Y1x1N2Q0''@;'; put 'put ''ZFx1N2Q0ZVx1N2Q0Zlx1N2Q1MFx1N2Q1MVx1N2Q1Mlx1N2Q1M1x1N2Q1NFx1N2Q1NVx1N2Q1Nlx1N2Q1N1x1N2Q1OFx1N2Q1OVx1N2Q1YVx1N2Q1Ylx1N2Q1Y1x1N2Q1ZFx1N2Q1ZVx1N2Q1Zlx1N2Q2MFx1N2Q2MVx1N2Q2Mlx1N2Q2M1x1N2Q2NFx1N2Q2NVx1N2Q2Nlx1N2Q2N1x1N2Q2OFx1''@;'; put 'put ''N2Q2OVx1N2Q2YVx1N2Q2Ylx1N2Q2Y1x1N2Q2ZFx1N2Q2Zlx1N2Q3MFx1N2Q3MVx1N2Q3Mlx1N2Q3M1x1N2Q3NFx1N2Q3NVx1N2Q3Nlx1ZmZmZFx1N2Q3OFx1N2Q3OVx1N2Q3YVx1N2Q3Ylx1N2Q3Y1x1N2Q3ZFx1N2Q3ZVx1N2Q3Zlx1N2Q4MFx1N2Q4MVx1N2Q4Mlx1N2Q4M1x1N2Q4NFx1N2Q4''@;'; put 'put ''NVx1N2Q4Nlx1N2Q4N1x1N2Q4OFx1N2Q4OVx1N2Q4YVx1N2Q4Ylx1N2Q4Y1x1N2Q4ZFx1N2Q4ZVx1N2Q4Zlx1N2Q5MFx1N2Q5MVx1N2Q5Mlx1N2Q5M1x1N2Q5NFx1N2Q5NVx1N2Q5Nlx1N2Q5N1x1N2Q5OFx1NTA2NVx1ODIzMFx1NTI1MVx1OTk2Zlx1NmUxMFx1NmU4NVx1NmRhN1x1NWVmYVx1''@;'; put 'put ''NTBmNVx1NTlkY1x1NWMwNlx1NmQ0Nlx1NmM1Zlx1NzU4Nlx1ODQ4Ylx1Njg2OFx1NTk1Nlx1OGJiMlx1NTMyMFx1OTE3MVx1OTY0ZFx1ODU0OVx1NjkxMlx1NzkwMVx1NzEyNlx1ODBmNlx1NGVhNFx1OTBjYVx1NmQ0N1x1OWE4NFx1NWEwN1x1NTZiY1x1NjQwNVx1OTRmMFx1NzdlYlx1NGZh''@;'; put 'put ''NVx1ODExYVx1NzJlMVx1ODlkMlx1OTk3YVx1N2YzNFx1N2VkZVx1NTI3Zlx1NjU1OVx1OTE3NVx1OGY3Zlx1OGY4M1x1NTNlYlx1N2E5Nlx1NjNlZFx1NjNhNVx1NzY4Nlx1NzlmOFx1ODg1N1x1OTYzNlx1NjIyYVx1NTJhYlx1ODI4Mlx1Njg1NFx1Njc3MFx1NjM3N1x1Nzc2Ylx1N2FlZFx1''@;'; put 'put ''NmQwMVx1N2VkM1x1ODllM1x1NTlkMFx1NjIxMlx1ODVjOVx1ODJhNVx1NzU0Y1x1NTAxZlx1NGVjYlx1NzVhNVx1OGJlYlx1NWM0YVx1NWRmZVx1N2I0Ylx1NjVhNFx1OTFkMVx1NGVjYVx1NmQyNVx1ODk1Zlx1N2QyN1x1OTUyNlx1NGVjNVx1OGMyOFx1OGZkYlx1OTc3M1x1NjY0Ylx1Nzk4''@;'; put 'put ''MVx1OGZkMVx1NzBlY1x1NmQ3OFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE4OV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTg5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE4OV1bZ11dPTQ4Mzg0K2csX1s0ODM4NCtnXT15WzE4OV1bZ10pO2Zvcih5WzE5MF09Ilx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2Q5OVx1N2Q5YVx1N2Q5Ylx1N2Q5Y1x1N2Q5ZFx1N2Q5ZVx1N2Q5Zlx1N2RhMFx1N2RhMVx1N2RhMlx1N2RhM1x1N2RhNFx1N2RhNVx1N2RhN1x1N2RhOFx1N2RhOVx1N2RhYVx1N2RhYlx1N2RhY1x1N2RhZFx1N2Rh''@;'; put 'put ''Zlx1N2RiMFx1N2RiMVx1N2RiMlx1N2RiM1x1N2RiNFx1N2RiNVx1N2RiNlx1N2RiN1x1N2RiOFx1N2RiOVx1N2RiYVx1N2RiYlx1N2RiY1x1N2RiZFx1N2RiZVx1N2RiZlx1N2RjMFx1N2RjMVx1N2RjMlx1N2RjM1x1N2RjNFx1N2RjNVx1N2RjNlx1N2RjN1x1N2RjOFx1N2RjOVx1N2RjYVx1''@;'; put 'put ''N2RjYlx1N2RjY1x1N2RjZFx1N2RjZVx1N2RjZlx1N2RkMFx1N2RkMVx1N2RkMlx1N2RkM1x1N2RkNFx1N2RkNVx1N2RkNlx1N2RkN1x1N2RkOFx1N2RkOVx1ZmZmZFx1N2RkYVx1N2RkYlx1N2RkY1x1N2RkZFx1N2RkZVx1N2RkZlx1N2RlMFx1N2RlMVx1N2RlMlx1N2RlM1x1N2RlNFx1N2Rl''@;'; put 'put ''NVx1N2RlNlx1N2RlN1x1N2RlOFx1N2RlOVx1N2RlYVx1N2RlYlx1N2RlY1x1N2RlZFx1N2RlZVx1N2RlZlx1N2RmMFx1N2RmMVx1N2RmMlx1N2RmM1x1N2RmNFx1N2RmNVx1N2RmNlx1N2RmN1x1N2RmOFx1N2RmOVx1N2RmYVx1NWMzZFx1NTJiMlx1ODM0Nlx1NTE2Mlx1ODMwZVx1Nzc1Ylx1''@;'; put 'put ''NjY3Nlx1OWNiOFx1NGVhY1x1NjBjYVx1N2NiZVx1N2NiM1x1N2VjZlx1NGU5NVx1OGI2Nlx1NjY2Zlx1OTg4OFx1OTc1OVx1NTg4M1x1NjU2Y1x1OTU1Y1x1NWY4NFx1NzVjOVx1OTc1Nlx1N2FkZlx1N2FkZVx1NTFjMFx1NzBhZlx1N2E5OFx1NjNlYVx1N2E3Nlx1N2VhMFx1NzM5Nlx1OTdl''@;'; put 'put ''ZFx1NGU0NVx1NzA3OFx1NGU1ZFx1OTE1Mlx1NTNhOVx1NjU1MVx1NjVlN1x1ODFmY1x1ODIwNVx1NTQ4ZVx1NWMzMVx1NzU5YVx1OTdhMFx1NjJkOFx1NzJkOVx1NzViZFx1NWM0NVx1OWE3OVx1ODNjYVx1NWM0MFx1NTQ4MFx1NzdlOVx1NGUzZVx1NmNhZVx1ODA1YVx1NjJkMlx1NjM2ZVx1''@;'; put 'put ''NWRlOFx1NTE3N1x1OGRkZFx1OGUxZVx1OTUyZlx1NGZmMVx1NTNlNVx1NjBlN1x1NzBhY1x1NTI2N1x1NjM1MFx1OWU0M1x1NWExZlx1NTAyNlx1NzczN1x1NTM3N1x1N2VlMlx1NjQ4NVx1NjUyYlx1NjI4OVx1NjM5OFx1NTAxNFx1NzIzNVx1ODljOVx1NTFiM1x1OGJjMFx1N2VkZFx1NTc0''@;'; put 'put ''N1x1ODNjY1x1OTRhN1x1NTE5Ylx1NTQxYlx1NWNmYlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE5MF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTkwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE5MF1bZ11dPTQ4NjQwK2csX1s0ODY0MCtnXT15WzE5MF1bZ10pO2Zvcih5WzE5MV09Ilx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2RmYlx1N2RmY1x1N2RmZFx1N2RmZVx1N2RmZlx1N2UwMFx1N2UwMVx1N2UwMlx1N2UwM1x1N2UwNFx1N2UwNVx1N2UwNlx1N2UwN1x1N2UwOFx1N2UwOVx1N2UwYVx1N2UwYlx1N2UwY1x1N2Uw''@;'; put 'put ''ZFx1N2UwZVx1N2UwZlx1N2UxMFx1N2UxMVx1N2UxMlx1N2UxM1x1N2UxNFx1N2UxNVx1N2UxNlx1N2UxN1x1N2UxOFx1N2UxOVx1N2UxYVx1N2UxYlx1N2UxY1x1N2UxZFx1N2UxZVx1N2UxZlx1N2UyMFx1N2UyMVx1N2UyMlx1N2UyM1x1N2UyNFx1N2UyNVx1N2UyNlx1N2UyN1x1N2UyOFx1''@;'; put 'put ''N2UyOVx1N2UyYVx1N2UyYlx1N2UyY1x1N2UyZFx1N2UyZVx1N2UyZlx1N2UzMFx1N2UzMVx1N2UzMlx1N2UzM1x1N2UzNFx1N2UzNVx1N2UzNlx1N2UzN1x1N2UzOFx1N2UzOVx1ZmZmZFx1N2UzYVx1N2UzY1x1N2UzZFx1N2UzZVx1N2UzZlx1N2U0MFx1N2U0Mlx1N2U0M1x1N2U0NFx1N2U0''@;'; put 'put ''NVx1N2U0Nlx1N2U0OFx1N2U0OVx1N2U0YVx1N2U0Ylx1N2U0Y1x1N2U0ZFx1N2U0ZVx1N2U0Zlx1N2U1MFx1N2U1MVx1N2U1Mlx1N2U1M1x1N2U1NFx1N2U1NVx1N2U1Nlx1N2U1N1x1N2U1OFx1N2U1OVx1N2U1YVx1N2U1Ylx1N2U1Y1x1N2U1ZFx1NGZjYVx1N2FlM1x1NmQ1YVx1OTBlMVx1''@;'; put 'put ''OWE4Zlx1NTU4MFx1NTQ5Nlx1NTM2MVx1NTRhZlx1NWYwMFx1NjNlOVx1Njk3N1x1NTFlZlx1NjE2OFx1NTIwYVx1NTgyYVx1NTJkOFx1NTc0ZVx1NzgwZFx1NzcwYlx1NWViN1x1NjE3N1x1N2NlMFx1NjI1Ylx1NjI5N1x1NGVhMlx1NzA5NVx1ODAwM1x1NjJmN1x1NzBlNFx1OTc2MFx1NTc3''@;'; put 'put ''N1x1ODJkYlx1NjdlZlx1NjhmNVx1NzhkNVx1OTg5N1x1NzlkMVx1NThmM1x1NTRiM1x1NTNlZlx1NmUzNFx1NTE0Ylx1NTIzYlx1NWJhMlx1OGJmZVx1ODBhZlx1NTU0M1x1NTdhNlx1NjA3M1x1NTc1MVx1NTQyZFx1N2E3YVx1NjA1MFx1NWI1NFx1NjNhN1x1NjJhMFx1NTNlM1x1NjI2M1x1''@;'; put 'put ''NWJjN1x1NjdhZlx1NTRlZFx1N2E5Zlx1ODJlNlx1OTE3N1x1NWU5M1x1ODhlNFx1NTkzOFx1NTdhZVx1NjMwZVx1OGRlOFx1ODBlZlx1NTc1N1x1N2I3N1x1NGZhOVx1NWZlYlx1NWJiZFx1NmIzZVx1NTMyMVx1N2I1MFx1NzJjMlx1Njg0Nlx1NzdmZlx1NzczNlx1NjVmN1x1NTFiNVx1NGU4''@;'; put 'put ''Zlx1NzZkNFx1NWNiZlx1N2FhNVx1ODQ3NVx1NTk0ZVx1OWI0MVx1NTA4MFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE5MV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTkxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE5MV1bZ11dPTQ4ODk2K2csX1s0ODg5NitnXT15WzE5MV1bZ10pO2Zv''@;'; put 'put ''cih5WzE5Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2U1ZVx1N2U1Zlx1N2U2MFx1N2U2MVx1N2U2Mlx1N2U2M1x1N2U2NFx1N2U2NVx1N2U2Nlx1N2U2N1x1N2U2OFx1N2U2OVx1N2U2YVx1N2U2Ylx1N2U2Y1x1N2U2ZFx1N2U2''@;'; put 'put ''ZVx1N2U2Zlx1N2U3MFx1N2U3MVx1N2U3Mlx1N2U3M1x1N2U3NFx1N2U3NVx1N2U3Nlx1N2U3N1x1N2U3OFx1N2U3OVx1N2U3YVx1N2U3Ylx1N2U3Y1x1N2U3ZFx1N2U3ZVx1N2U3Zlx1N2U4MFx1N2U4MVx1N2U4M1x1N2U4NFx1N2U4NVx1N2U4Nlx1N2U4N1x1N2U4OFx1N2U4OVx1N2U4YVx1''@;'; put 'put ''N2U4Ylx1N2U4Y1x1N2U4ZFx1N2U4ZVx1N2U4Zlx1N2U5MFx1N2U5MVx1N2U5Mlx1N2U5M1x1N2U5NFx1N2U5NVx1N2U5Nlx1N2U5N1x1N2U5OFx1N2U5OVx1N2U5YVx1N2U5Y1x1N2U5ZFx1N2U5ZVx1ZmZmZFx1N2VhZVx1N2ViNFx1N2ViYlx1N2ViY1x1N2VkNlx1N2VlNFx1N2VlY1x1N2Vm''@;'; put 'put ''OVx1N2YwYVx1N2YxMFx1N2YxZVx1N2YzN1x1N2YzOVx1N2YzYlx1N2YzY1x1N2YzZFx1N2YzZVx1N2YzZlx1N2Y0MFx1N2Y0MVx1N2Y0M1x1N2Y0Nlx1N2Y0N1x1N2Y0OFx1N2Y0OVx1N2Y0YVx1N2Y0Ylx1N2Y0Y1x1N2Y0ZFx1N2Y0ZVx1N2Y0Zlx1N2Y1Mlx1N2Y1M1x1OTk4OFx1NjEyN1x1''@;'; put 'put ''NmU4M1x1NTc2NFx1NjYwNlx1NjM0Nlx1NTZmMFx1NjJlY1x1NjI2OVx1NWVkM1x1OTYxNFx1NTc4M1x1NjJjOVx1NTU4N1x1ODcyMVx1ODE0YVx1OGZhM1x1NTU2Nlx1ODNiMVx1Njc2NVx1OGQ1Nlx1ODRkZFx1NWE2YVx1NjgwZlx1NjJlNlx1N2JlZVx1OTYxMVx1NTE3MFx1NmY5Y1x1OGMz''@;'; put 'put ''MFx1NjNmZFx1ODljOFx1NjFkMlx1N2YwNlx1NzBjMlx1NmVlNVx1NzQwNVx1Njk5NFx1NzJmY1x1NWVjYVx1OTBjZVx1NjcxN1x1NmQ2YVx1NjM1ZVx1NTJiM1x1NzI2Mlx1ODAwMVx1NGY2Y1x1NTllNVx1OTE2YVx1NzBkOVx1NmQ5ZFx1NTJkMlx1NGU1MFx1OTZmN1x1OTU2ZFx1ODU3ZVx1''@;'; put 'put ''NzhjYVx1N2QyZlx1NTEyMVx1NTc5Mlx1NjRjMlx1ODA4Ylx1N2M3Ylx1NmNlYVx1NjhmMVx1Njk1ZVx1NTFiN1x1NTM5OFx1NjhhOFx1NzI4MVx1OWVjZVx1N2JmMVx1NzJmOFx1NzliYlx1NmYxM1x1NzQwNlx1Njc0ZVx1OTFjY1x1OWNhNFx1NzkzY1x1ODM4OVx1ODM1NFx1NTQwZlx1Njgx''@;'; put 'put ''N1x1NGUzZFx1NTM4OVx1NTJiMVx1NzgzZVx1NTM4Nlx1NTIyOVx1NTA4OFx1NGY4Ylx1NGZkMFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE5Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTkyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE5Ml1bZ11dPTQ5MTUyK2csX1s0OTE1MitnXT15''@;'; put 'put ''WzE5Ml1bZ10pO2Zvcih5WzE5M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2Y1Nlx1N2Y1OVx1N2Y1Ylx1N2Y1Y1x1N2Y1ZFx1N2Y1ZVx1N2Y2MFx1N2Y2M1x1N2Y2NFx1N2Y2NVx1N2Y2Nlx1N2Y2N1x1N2Y2Ylx1N2Y2Y1x1N2Y2''@;'; put 'put ''ZFx1N2Y2Zlx1N2Y3MFx1N2Y3M1x1N2Y3NVx1N2Y3Nlx1N2Y3N1x1N2Y3OFx1N2Y3YVx1N2Y3Ylx1N2Y3Y1x1N2Y3ZFx1N2Y3Zlx1N2Y4MFx1N2Y4Mlx1N2Y4M1x1N2Y4NFx1N2Y4NVx1N2Y4Nlx1N2Y4N1x1N2Y4OFx1N2Y4OVx1N2Y4Ylx1N2Y4ZFx1N2Y4Zlx1N2Y5MFx1N2Y5MVx1N2Y5Mlx1''@;'; put 'put ''N2Y5M1x1N2Y5NVx1N2Y5Nlx1N2Y5N1x1N2Y5OFx1N2Y5OVx1N2Y5Ylx1N2Y5Y1x1N2ZhMFx1N2ZhMlx1N2ZhM1x1N2ZhNVx1N2ZhNlx1N2ZhOFx1N2ZhOVx1N2ZhYVx1N2ZhYlx1N2ZhY1x1N2ZhZFx1N2ZhZVx1N2ZiMVx1ZmZmZFx1N2ZiM1x1N2ZiNFx1N2ZiNVx1N2ZiNlx1N2ZiN1x1N2Zi''@;'; put 'put ''YVx1N2ZiYlx1N2ZiZVx1N2ZjMFx1N2ZjMlx1N2ZjM1x1N2ZjNFx1N2ZjNlx1N2ZjN1x1N2ZjOFx1N2ZjOVx1N2ZjYlx1N2ZjZFx1N2ZjZlx1N2ZkMFx1N2ZkMVx1N2ZkMlx1N2ZkM1x1N2ZkNlx1N2ZkN1x1N2ZkOVx1N2ZkYVx1N2ZkYlx1N2ZkY1x1N2ZkZFx1N2ZkZVx1N2ZlMlx1N2ZlM1x1''@;'; put 'put ''NzVlMlx1N2FjYlx1N2M5Mlx1NmNhNVx1OTZiNlx1NTI5Ylx1NzQ4M1x1NTRlOVx1NGZlOVx1ODA1NFx1ODNiMlx1OGZkZVx1OTU3MFx1NWVjOVx1NjAxY1x1NmQ5Zlx1NWUxOFx1NjU1Ylx1ODEzOFx1OTRmZVx1NjA0Ylx1NzBiY1x1N2VjM1x1N2NhZVx1NTFjOVx1Njg4MVx1N2NiMVx1ODI2''@;'; put 'put ''Zlx1NGUyNFx1OGY4Nlx1OTFjZlx1NjY3ZVx1NGVhZVx1OGMwNVx1NjRhOVx1ODA0YVx1NTBkYVx1NzU5N1x1NzFjZVx1NWJlNVx1OGZiZFx1NmY2Nlx1NGU4Nlx1NjQ4Mlx1OTU2M1x1NWVkNlx1NjU5OVx1NTIxN1x1ODhjMlx1NzBjOFx1NTJhM1x1NzMwZVx1NzQzM1x1Njc5N1x1NzhmN1x1''@;'; put 'put ''OTcxNlx1NGUzNFx1OTBiYlx1OWNkZVx1NmRjYlx1NTFkYlx1OGQ0MVx1NTQxZFx1NjJjZVx1NzNiMlx1ODNmMVx1OTZmNlx1OWY4NFx1OTRjM1x1NGYzNlx1N2Y5YVx1NTFjY1x1NzA3NVx1OTY3NVx1NWNhZFx1OTg4Nlx1NTNlNlx1NGVlNFx1NmU5Y1x1NzQwOVx1NjliNFx1Nzg2Ylx1OTk4''@;'; put 'put ''Zlx1NzU1OVx1NTIxOFx1NzYyNFx1NmQ0MVx1NjdmM1x1NTE2ZFx1OWY5OVx1ODA0Ylx1NTQ5OVx1N2IzY1x1N2FiZlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE5M10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTkzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE5M11bZ11dPTQ5NDA4K2cs''@;'; put 'put ''X1s0OTQwOCtnXT15WzE5M11bZ10pO2Zvcih5WzE5NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1N2ZlNFx1N2ZlN1x1N2ZlOFx1N2ZlYVx1N2ZlYlx1N2ZlY1x1N2ZlZFx1N2ZlZlx1N2ZmMlx1N2ZmNFx1N2ZmNVx1N2ZmNlx1N2Zm''@;'; put 'put ''N1x1N2ZmOFx1N2ZmOVx1N2ZmYVx1N2ZmZFx1N2ZmZVx1N2ZmZlx1ODAwMlx1ODAwN1x1ODAwOFx1ODAwOVx1ODAwYVx1ODAwZVx1ODAwZlx1ODAxMVx1ODAxM1x1ODAxYVx1ODAxYlx1ODAxZFx1ODAxZVx1ODAxZlx1ODAyMVx1ODAyM1x1ODAyNFx1ODAyYlx1ODAyY1x1ODAyZFx1ODAyZVx1''@;'; put 'put ''ODAyZlx1ODAzMFx1ODAzMlx1ODAzNFx1ODAzOVx1ODAzYVx1ODAzY1x1ODAzZVx1ODA0MFx1ODA0MVx1ODA0NFx1ODA0NVx1ODA0N1x1ODA0OFx1ODA0OVx1ODA0ZVx1ODA0Zlx1ODA1MFx1ODA1MVx1ODA1M1x1ODA1NVx1ODA1Nlx1ODA1N1x1ZmZmZFx1ODA1OVx1ODA1Ylx1ODA1Y1x1ODA1''@;'; put 'put ''ZFx1ODA1ZVx1ODA1Zlx1ODA2MFx1ODA2MVx1ODA2Mlx1ODA2M1x1ODA2NFx1ODA2NVx1ODA2Nlx1ODA2N1x1ODA2OFx1ODA2Ylx1ODA2Y1x1ODA2ZFx1ODA2ZVx1ODA2Zlx1ODA3MFx1ODA3Mlx1ODA3M1x1ODA3NFx1ODA3NVx1ODA3Nlx1ODA3N1x1ODA3OFx1ODA3OVx1ODA3YVx1ODA3Ylx1''@;'; put 'put ''ODA3Y1x1ODA3ZFx1OTY4Nlx1NTc4NFx1NjJlMlx1OTY0N1x1Njk3Y1x1NWEwNFx1NjQwMlx1N2JkM1x1NmYwZlx1OTY0Ylx1ODJhNlx1NTM2Mlx1OTg4NVx1NWU5MFx1NzA4OVx1NjNiM1x1NTM2NFx1ODY0Zlx1OWM4MVx1OWU5M1x1Nzg4Y1x1OTczMlx1OGRlZlx1OGQ0Mlx1OWU3Zlx1NmY1''@;'; put 'put ''ZVx1Nzk4NFx1NWY1NVx1OTY0Nlx1NjIyZVx1OWE3NFx1NTQxNVx1OTRkZFx1NGZhM1x1NjVjNVx1NWM2NVx1NWM2MVx1N2YxNVx1ODY1MVx1NmMyZlx1NWY4Ylx1NzM4N1x1NmVlNFx1N2VmZlx1NWNlNlx1NjMxYlx1NWI2YVx1NmVlNlx1NTM3NVx1NGU3MVx1NjNhMFx1NzU2NVx1NjJhMVx1''@;'; put 'put ''OGY2ZVx1NGYyNlx1NGVkMVx1NmNhNlx1N2ViNlx1OGJiYVx1ODQxZFx1ODdiYVx1N2Y1N1x1OTAzYlx1OTUyM1x1N2JhOVx1OWFhMVx1ODhmOFx1ODQzZFx1NmQxYlx1OWE4Nlx1N2VkY1x1NTk4OFx1OWViYlx1NzM5Ylx1NzgwMVx1ODY4Mlx1OWE2Y1x1OWE4Mlx1NTYxYlx1NTQxN1x1NTdj''@;'; put 'put ''Ylx1NGU3MFx1OWVhNlx1NTM1Nlx1OGZjOFx1ODEwOVx1Nzc5Mlx1OTk5Mlx1ODZlZVx1NmVlMVx1ODUxM1x1NjZmY1x1NjE2Mlx1NmYyYlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE5NF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTk0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE5NF1b''@;'; put 'put ''Z11dPTQ5NjY0K2csX1s0OTY2NCtnXT15WzE5NF1bZ10pO2Zvcih5WzE5NV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODA3ZVx1ODA4MVx1ODA4Mlx1ODA4NVx1ODA4OFx1ODA4YVx1ODA4ZFx1ODA4ZVx1ODA4Zlx1ODA5MFx1ODA5''@;'; put 'put ''MVx1ODA5Mlx1ODA5NFx1ODA5NVx1ODA5N1x1ODA5OVx1ODA5ZVx1ODBhM1x1ODBhNlx1ODBhN1x1ODBhOFx1ODBhY1x1ODBiMFx1ODBiM1x1ODBiNVx1ODBiNlx1ODBiOFx1ODBiOVx1ODBiYlx1ODBjNVx1ODBjN1x1ODBjOFx1ODBjOVx1ODBjYVx1ODBjYlx1ODBjZlx1ODBkMFx1ODBkMVx1''@;'; put 'put ''ODBkMlx1ODBkM1x1ODBkNFx1ODBkNVx1ODBkOFx1ODBkZlx1ODBlMFx1ODBlMlx1ODBlM1x1ODBlNlx1ODBlZVx1ODBmNVx1ODBmN1x1ODBmOVx1ODBmYlx1ODBmZVx1ODBmZlx1ODEwMFx1ODEwMVx1ODEwM1x1ODEwNFx1ODEwNVx1ODEwN1x1ODEwOFx1ODEwYlx1ZmZmZFx1ODEwY1x1ODEx''@;'; put 'put ''NVx1ODExN1x1ODExOVx1ODExYlx1ODExY1x1ODExZFx1ODExZlx1ODEyMFx1ODEyMVx1ODEyMlx1ODEyM1x1ODEyNFx1ODEyNVx1ODEyNlx1ODEyN1x1ODEyOFx1ODEyOVx1ODEyYVx1ODEyYlx1ODEyZFx1ODEyZVx1ODEzMFx1ODEzM1x1ODEzNFx1ODEzNVx1ODEzN1x1ODEzOVx1ODEzYVx1''@;'; put 'put ''ODEzYlx1ODEzY1x1ODEzZFx1ODEzZlx1OGMyOVx1ODI5Mlx1ODMyYlx1NzZmMlx1NmMxM1x1NWZkOVx1ODNiZFx1NzMyYlx1ODMwNVx1OTUxYVx1NmJkYlx1NzdkYlx1OTRjNlx1NTM2Zlx1ODMwMlx1NTE5Mlx1NWUzZFx1OGM4Y1x1OGQzOFx1NGU0OFx1NzNhYlx1Njc5YVx1Njg4NVx1OTE3''@;'; put 'put ''Nlx1OTcwOVx1NzE2NFx1NmNhMVx1NzcwOVx1NWE5Mlx1OTU0MVx1NmJjZlx1N2Y4ZVx1NjYyN1x1NWJkMFx1NTliOVx1NWE5YVx1OTVlOFx1OTVmN1x1NGVlY1x1ODQwY1x1ODQ5OVx1NmFhY1x1NzZkZlx1OTUzMFx1NzMxYlx1NjhhNlx1NWI1Zlx1NzcyZlx1OTE5YVx1OTc2MVx1N2NkY1x1''@;'; put 'put ''OGZmN1x1OGMxY1x1NWYyNVx1N2M3M1x1NzlkOFx1ODljNVx1NmNjY1x1ODcxY1x1NWJjNlx1NWU0Mlx1NjhjOVx1NzcyMFx1N2VmNVx1NTE5NVx1NTE0ZFx1NTJjOVx1NWEyOVx1N2YwNVx1OTc2Mlx1ODJkN1x1NjNjZlx1Nzc4NFx1ODVkMFx1NzlkMlx1NmUzYVx1NWU5OVx1NTk5OVx1ODUx''@;'; put 'put ''MVx1NzA2ZFx1NmMxMVx1NjJiZlx1NzZiZlx1NjU0Zlx1NjBhZlx1OTVmZFx1NjYwZVx1ODc5Zlx1OWUyM1x1OTRlZFx1NTQwZFx1NTQ3ZFx1OGMyY1x1NjQ3OFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE5NV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTk1XVtnXS5jaGFyQ29kZUF0KDAp''@;'; put 'put ''JiYoSVt5WzE5NV1bZ11dPTQ5OTIwK2csX1s0OTkyMCtnXT15WzE5NV1bZ10pO2Zvcih5WzE5Nl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODE0MFx1ODE0MVx1ODE0Mlx1ODE0M1x1ODE0NFx1ODE0NVx1ODE0N1x1ODE0OVx1ODE0''@;'; put 'put ''ZFx1ODE0ZVx1ODE0Zlx1ODE1Mlx1ODE1Nlx1ODE1N1x1ODE1OFx1ODE1Ylx1ODE1Y1x1ODE1ZFx1ODE1ZVx1ODE1Zlx1ODE2MVx1ODE2Mlx1ODE2M1x1ODE2NFx1ODE2Nlx1ODE2OFx1ODE2YVx1ODE2Ylx1ODE2Y1x1ODE2Zlx1ODE3Mlx1ODE3M1x1ODE3NVx1ODE3Nlx1ODE3N1x1ODE3OFx1''@;'; put 'put ''ODE4MVx1ODE4M1x1ODE4NFx1ODE4NVx1ODE4Nlx1ODE4N1x1ODE4OVx1ODE4Ylx1ODE4Y1x1ODE4ZFx1ODE4ZVx1ODE5MFx1ODE5Mlx1ODE5M1x1ODE5NFx1ODE5NVx1ODE5Nlx1ODE5N1x1ODE5OVx1ODE5YVx1ODE5ZVx1ODE5Zlx1ODFhMFx1ODFhMVx1ODFhMlx1ODFhNFx1ODFhNVx1ZmZm''@;'; put 'put ''ZFx1ODFhN1x1ODFhOVx1ODFhYlx1ODFhY1x1ODFhZFx1ODFhZVx1ODFhZlx1ODFiMFx1ODFiMVx1ODFiMlx1ODFiNFx1ODFiNVx1ODFiNlx1ODFiN1x1ODFiOFx1ODFiOVx1ODFiY1x1ODFiZFx1ODFiZVx1ODFiZlx1ODFjNFx1ODFjNVx1ODFjN1x1ODFjOFx1ODFjOVx1ODFjYlx1ODFjZFx1''@;'; put 'put ''ODFjZVx1ODFjZlx1ODFkMFx1ODFkMVx1ODFkMlx1ODFkM1x1NjQ3OVx1ODYxMVx1NmEyMVx1ODE5Y1x1NzhlOFx1NjQ2OVx1OWI1NFx1NjJiOVx1NjcyYlx1ODNhYlx1NThhOFx1OWVkOFx1NmNhYlx1NmYyMFx1NWJkZVx1OTY0Y1x1OGMwYlx1NzI1Zlx1NjdkMFx1NjJjN1x1NzI2MVx1NGVh''@;'; put 'put ''OVx1NTljNlx1NmJjZFx1NTg5M1x1NjZhZVx1NWU1NVx1NTJkZlx1NjE1NVx1NjcyOFx1NzZlZVx1Nzc2Nlx1NzI2N1x1N2E0Nlx1NjJmZlx1NTRlYVx1NTQ1MFx1OTRhMFx1OTBhM1x1NWExY1x1N2ViM1x1NmMxNlx1NGU0M1x1NTk3Nlx1ODAxMFx1NTk0OFx1NTM1N1x1NzUzN1x1OTZiZVx1''@;'; put 'put ''NTZjYVx1NjMyMFx1ODExMVx1NjA3Y1x1OTVmOVx1NmRkNlx1NTQ2Mlx1OTk4MVx1NTE4NVx1NWFlOVx1ODBmZFx1NTlhZVx1OTcxM1x1NTAyYVx1NmNlNVx1NWMzY1x1NjJkZlx1NGY2MFx1NTMzZlx1ODE3Ylx1OTAwNlx1NmViYVx1ODUyYlx1NjJjOFx1NWU3NFx1NzhiZVx1NjRiNVx1NjM3''@;'; put 'put ''Ylx1NWZmNVx1NWExOFx1OTE3Zlx1OWUxZlx1NWMzZlx1NjM0Zlx1ODA0Mlx1NWI3ZFx1NTU2ZVx1OTU0YVx1OTU0ZFx1NmQ4NVx1NjBhOFx1NjdlMFx1NzJkZVx1NTFkZFx1NWI4MVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE5Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTk2XVtnXS5j''@;'; put 'put ''aGFyQ29kZUF0KDApJiYoSVt5WzE5Nl1bZ11dPTUwMTc2K2csX1s1MDE3NitnXT15WzE5Nl1bZ10pO2Zvcih5WzE5N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODFkNFx1ODFkNVx1ODFkNlx1ODFkN1x1ODFkOFx1ODFkOVx1ODFk''@;'; put 'put ''YVx1ODFkYlx1ODFkY1x1ODFkZFx1ODFkZVx1ODFkZlx1ODFlMFx1ODFlMVx1ODFlMlx1ODFlNFx1ODFlNVx1ODFlNlx1ODFlOFx1ODFlOVx1ODFlYlx1ODFlZVx1ODFlZlx1ODFmMFx1ODFmMVx1ODFmMlx1ODFmNVx1ODFmNlx1ODFmN1x1ODFmOFx1ODFmOVx1ODFmYVx1ODFmZFx1ODFmZlx1''@;'; put 'put ''ODIwM1x1ODIwN1x1ODIwOFx1ODIwOVx1ODIwYVx1ODIwYlx1ODIwZVx1ODIwZlx1ODIxMVx1ODIxM1x1ODIxNVx1ODIxNlx1ODIxN1x1ODIxOFx1ODIxOVx1ODIxYVx1ODIxZFx1ODIyMFx1ODIyNFx1ODIyNVx1ODIyNlx1ODIyN1x1ODIyOVx1ODIyZVx1ODIzMlx1ODIzYVx1ODIzY1x1ODIz''@;'; put 'put ''ZFx1ODIzZlx1ZmZmZFx1ODI0MFx1ODI0MVx1ODI0Mlx1ODI0M1x1ODI0NVx1ODI0Nlx1ODI0OFx1ODI0YVx1ODI0Y1x1ODI0ZFx1ODI0ZVx1ODI1MFx1ODI1MVx1ODI1Mlx1ODI1M1x1ODI1NFx1ODI1NVx1ODI1Nlx1ODI1N1x1ODI1OVx1ODI1Ylx1ODI1Y1x1ODI1ZFx1ODI1ZVx1ODI2MFx1''@;'; put 'put ''ODI2MVx1ODI2Mlx1ODI2M1x1ODI2NFx1ODI2NVx1ODI2Nlx1ODI2N1x1ODI2OVx1NjJlN1x1NmNkZVx1NzI1Ylx1NjI2ZFx1OTRhZVx1N2ViZFx1ODExM1x1NmQ1M1x1NTE5Y1x1NWYwNFx1NTk3NFx1NTJhYVx1NjAxMlx1NTk3M1x1NjY5Nlx1ODY1MFx1NzU5Zlx1NjMyYVx1NjFlNlx1N2Nl''@;'; put 'put ''Zlx1OGJmYVx1NTRlNlx1NmIyN1x1OWUyNVx1NmJiNFx1ODVkNVx1NTQ1NVx1NTA3Nlx1NmNhNFx1NTU2YVx1OGRiNFx1NzIyY1x1NWUxNVx1NjAxNVx1NzQzNlx1NjJjZFx1NjM5Mlx1NzI0Y1x1NWY5OFx1NmU0M1x1NmQzZVx1NjUwMFx1NmY1OFx1NzZkOFx1NzhkMFx1NzZmY1x1NzU1NFx1''@;'; put 'put ''NTIyNFx1NTNkYlx1NGU1M1x1NWU5ZVx1NjVjMVx1ODAyYVx1ODBkNlx1NjI5Ylx1NTQ4Nlx1NTIyOFx1NzBhZVx1ODg4ZFx1OGRkMVx1NmNlMVx1NTQ3OFx1ODBkYVx1NTdmOVx1ODhmNFx1OGQ1NFx1OTY2YVx1OTE0ZFx1NGY2OVx1NmM5Ylx1NTViN1x1NzZjNlx1NzgzMFx1NjJhOFx1NzBm''@;'; put 'put ''OVx1NmY4ZVx1NWY2ZFx1ODRlY1x1NjhkYVx1Nzg3Y1x1N2JmN1x1ODFhOFx1NjcwYlx1OWU0Zlx1NjM2N1x1NzhiMFx1NTc2Zlx1NzgxMlx1OTczOVx1NjI3OVx1NjJhYlx1NTI4OFx1NzQzNVx1NmJkN1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE5N10ubGVuZ3RoOysrZyk2NTUzMyE9''@;'; put 'put ''PXlbMTk3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE5N11bZ11dPTUwNDMyK2csX1s1MDQzMitnXT15WzE5N11bZ10pO2Zvcih5WzE5OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODI2YVx1ODI2Ylx1ODI2Y1x1ODI2ZFx1ODI3''@;'; put 'put ''MVx1ODI3NVx1ODI3Nlx1ODI3N1x1ODI3OFx1ODI3Ylx1ODI3Y1x1ODI4MFx1ODI4MVx1ODI4M1x1ODI4NVx1ODI4Nlx1ODI4N1x1ODI4OVx1ODI4Y1x1ODI5MFx1ODI5M1x1ODI5NFx1ODI5NVx1ODI5Nlx1ODI5YVx1ODI5Ylx1ODI5ZVx1ODJhMFx1ODJhMlx1ODJhM1x1ODJhN1x1ODJiMlx1''@;'; put 'put ''ODJiNVx1ODJiNlx1ODJiYVx1ODJiYlx1ODJiY1x1ODJiZlx1ODJjMFx1ODJjMlx1ODJjM1x1ODJjNVx1ODJjNlx1ODJjOVx1ODJkMFx1ODJkNlx1ODJkOVx1ODJkYVx1ODJkZFx1ODJlMlx1ODJlN1x1ODJlOFx1ODJlOVx1ODJlYVx1ODJlY1x1ODJlZFx1ODJlZVx1ODJmMFx1ODJmMlx1ODJm''@;'; put 'put ''M1x1ODJmNVx1ODJmNlx1ODJmOFx1ZmZmZFx1ODJmYVx1ODJmY1x1ODJmZFx1ODJmZVx1ODJmZlx1ODMwMFx1ODMwYVx1ODMwYlx1ODMwZFx1ODMxMFx1ODMxMlx1ODMxM1x1ODMxNlx1ODMxOFx1ODMxOVx1ODMxZFx1ODMxZVx1ODMxZlx1ODMyMFx1ODMyMVx1ODMyMlx1ODMyM1x1ODMyNFx1''@;'; put 'put ''ODMyNVx1ODMyNlx1ODMyOVx1ODMyYVx1ODMyZVx1ODMzMFx1ODMzMlx1ODMzN1x1ODMzYlx1ODMzZFx1NTU2NFx1ODEzZVx1NzViMlx1NzZhZVx1NTMzOVx1NzVkZVx1NTBmYlx1NWM0MVx1OGI2Y1x1N2JjN1x1NTA0Zlx1NzI0N1x1OWE5N1x1OThkOFx1NmYwMlx1NzRlMlx1Nzk2OFx1NjQ4''@;'; put 'put ''N1x1NzdhNVx1NjJmY1x1OTg5MVx1OGQyYlx1NTRjMVx1ODA1OFx1NGU1Mlx1NTc2YVx1ODJmOVx1ODQwZFx1NWU3M1x1NTFlZFx1NzRmNlx1OGJjNFx1NWM0Zlx1NTc2MVx1NmNmY1x1OTg4N1x1NWE0Nlx1NzgzNFx1OWI0NFx1OGZlYlx1N2M5NVx1NTI1Nlx1NjI1MVx1OTRmYVx1NGVjNlx1''@;'; put 'put ''ODM4Nlx1ODQ2MVx1ODNlOVx1ODRiMlx1NTdkNFx1NjczNFx1NTcwM1x1NjY2ZVx1NmQ2Nlx1OGMzMVx1NjZkZFx1NzAxMVx1NjcxZlx1NmIzYVx1NjgxNlx1NjIxYVx1NTliYlx1NGUwM1x1NTFjNFx1NmYwNlx1NjdkMlx1NmM4Zlx1NTE3Nlx1NjhjYlx1NTk0N1x1NmI2N1x1NzU2Nlx1NWQw''@;'; put 'put ''ZVx1ODExMFx1OWY1MFx1NjVkN1x1Nzk0OFx1Nzk0MVx1OWE5MVx1OGQ3N1x1NWM4Mlx1NGU1ZVx1NGYwMVx1NTQyZlx1NTk1MVx1NzgwY1x1NTY2OFx1NmMxNFx1OGZjNFx1NWYwM1x1NmM3ZFx1NmNlM1x1OGJhYlx1NjM5MFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE5OF0ubGVuZ3Ro''@;'; put 'put ''OysrZyk2NTUzMyE9PXlbMTk4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE5OF1bZ11dPTUwNjg4K2csX1s1MDY4OCtnXT15WzE5OF1bZ10pO2Zvcih5WzE5OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODMzZVx1ODMzZlx1ODM0''@;'; put 'put ''MVx1ODM0Mlx1ODM0NFx1ODM0NVx1ODM0OFx1ODM0YVx1ODM0Ylx1ODM0Y1x1ODM0ZFx1ODM0ZVx1ODM1M1x1ODM1NVx1ODM1Nlx1ODM1N1x1ODM1OFx1ODM1OVx1ODM1ZFx1ODM2Mlx1ODM3MFx1ODM3MVx1ODM3Mlx1ODM3M1x1ODM3NFx1ODM3NVx1ODM3Nlx1ODM3OVx1ODM3YVx1ODM3ZVx1''@;'; put 'put ''ODM3Zlx1ODM4MFx1ODM4MVx1ODM4Mlx1ODM4M1x1ODM4NFx1ODM4N1x1ODM4OFx1ODM4YVx1ODM4Ylx1ODM4Y1x1ODM4ZFx1ODM4Zlx1ODM5MFx1ODM5MVx1ODM5NFx1ODM5NVx1ODM5Nlx1ODM5N1x1ODM5OVx1ODM5YVx1ODM5ZFx1ODM5Zlx1ODNhMVx1ODNhMlx1ODNhM1x1ODNhNFx1ODNh''@;'; put 'put ''NVx1ODNhNlx1ODNhN1x1ODNhY1x1ODNhZFx1ODNhZVx1ZmZmZFx1ODNhZlx1ODNiNVx1ODNiYlx1ODNiZVx1ODNiZlx1ODNjMlx1ODNjM1x1ODNjNFx1ODNjNlx1ODNjOFx1ODNjOVx1ODNjYlx1ODNjZFx1ODNjZVx1ODNkMFx1ODNkMVx1ODNkMlx1ODNkM1x1ODNkNVx1ODNkN1x1ODNkOVx1''@;'; put 'put ''ODNkYVx1ODNkYlx1ODNkZVx1ODNlMlx1ODNlM1x1ODNlNFx1ODNlNlx1ODNlN1x1ODNlOFx1ODNlYlx1ODNlY1x1ODNlZFx1NjA3MFx1NmQzZFx1NzI3NVx1NjI2Nlx1OTQ4ZVx1OTRjNVx1NTM0M1x1OGZjMVx1N2I3ZVx1NGVkZlx1OGMyNlx1NGU3ZVx1OWVkNFx1OTRiMVx1OTRiM1x1NTI0''@;'; put 'put ''ZFx1NmY1Y1x1OTA2M1x1NmQ0NVx1OGMzNFx1NTgxMVx1NWQ0Y1x1NmIyMFx1NmI0OVx1NjdhYVx1NTQ1Ylx1ODE1NFx1N2Y4Y1x1NTg5OVx1ODUzN1x1NWYzYVx1NjJhMlx1NmE0N1x1OTUzOVx1NjU3Mlx1NjA4NFx1Njg2NVx1NzdhN1x1NGU1NFx1NGZhOFx1NWRlN1x1OTc5OFx1NjRhY1x1''@;'; put 'put ''N2ZkOFx1NWNlZFx1NGZjZlx1N2E4ZFx1NTIwN1x1ODMwNFx1NGUxNFx1NjAyZlx1N2E4M1x1OTRhNlx1NGZiNVx1NGViMlx1NzllNlx1NzQzNFx1NTJlNFx1ODJiOVx1NjRkMlx1NzliZFx1NWJkZFx1NmM4MVx1OTc1Mlx1OGY3Ylx1NmMyMlx1NTAzZVx1NTM3Zlx1NmUwNVx1NjRjZVx1NjY3''@;'; put 'put ''NFx1NmMzMFx1NjBjNVx1OTg3N1x1OGJmN1x1NWU4Nlx1NzQzY1x1N2E3N1x1NzljYlx1NGUxOFx1OTBiMVx1NzQwM1x1NmM0Mlx1NTZkYVx1OTE0Ylx1NmNjNVx1OGQ4Ylx1NTMzYVx1ODZjNlx1NjZmMlx1OGVhZlx1NWM0OFx1OWE3MVx1NmUyMFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15''@;'; put 'put ''WzE5OV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTk5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE5OV1bZ11dPTUwOTQ0K2csX1s1MDk0NCtnXT15WzE5OV1bZ10pO2Zvcih5WzIwMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODNl''@;'; put 'put ''ZVx1ODNlZlx1ODNmM1x1ODNmNFx1ODNmNVx1ODNmNlx1ODNmN1x1ODNmYVx1ODNmYlx1ODNmY1x1ODNmZVx1ODNmZlx1ODQwMFx1ODQwMlx1ODQwNVx1ODQwN1x1ODQwOFx1ODQwOVx1ODQwYVx1ODQxMFx1ODQxMlx1ODQxM1x1ODQxNFx1ODQxNVx1ODQxNlx1ODQxN1x1ODQxOVx1ODQxYVx1''@;'; put 'put ''ODQxYlx1ODQxZVx1ODQxZlx1ODQyMFx1ODQyMVx1ODQyMlx1ODQyM1x1ODQyOVx1ODQyYVx1ODQyYlx1ODQyY1x1ODQyZFx1ODQyZVx1ODQyZlx1ODQzMFx1ODQzMlx1ODQzM1x1ODQzNFx1ODQzNVx1ODQzNlx1ODQzN1x1ODQzOVx1ODQzYVx1ODQzYlx1ODQzZVx1ODQzZlx1ODQ0MFx1ODQ0''@;'; put 'put ''MVx1ODQ0Mlx1ODQ0M1x1ODQ0NFx1ODQ0NVx1ODQ0N1x1ODQ0OFx1ODQ0OVx1ZmZmZFx1ODQ0YVx1ODQ0Ylx1ODQ0Y1x1ODQ0ZFx1ODQ0ZVx1ODQ0Zlx1ODQ1MFx1ODQ1Mlx1ODQ1M1x1ODQ1NFx1ODQ1NVx1ODQ1Nlx1ODQ1OFx1ODQ1ZFx1ODQ1ZVx1ODQ1Zlx1ODQ2MFx1ODQ2Mlx1ODQ2NFx1''@;'; put 'put ''ODQ2NVx1ODQ2Nlx1ODQ2N1x1ODQ2OFx1ODQ2YVx1ODQ2ZVx1ODQ2Zlx1ODQ3MFx1ODQ3Mlx1ODQ3NFx1ODQ3N1x1ODQ3OVx1ODQ3Ylx1ODQ3Y1x1NTNkNlx1NWEzNlx1OWY4Ylx1OGRhM1x1NTNiYlx1NTcwOFx1OThhN1x1Njc0M1x1OTE5Ylx1NmNjOVx1NTE2OFx1NzVjYVx1NjJmM1x1NzJh''@;'; put 'put ''Y1x1NTIzOFx1NTI5ZFx1N2YzYVx1NzA5NFx1NzYzOFx1NTM3NFx1OWU0YVx1NjliN1x1Nzg2ZVx1OTZjMFx1ODhkOVx1N2ZhNFx1NzEzNlx1NzFjM1x1NTE4OVx1NjdkM1x1NzRlNFx1NThlNFx1NjUxOFx1NTZiN1x1OGJhOVx1OTk3Nlx1NjI3MFx1N2VkNVx1NjBmOVx1NzBlZFx1NThlY1x1''@;'; put 'put ''NGVjMVx1NGViYVx1NWZjZFx1OTdlN1x1NGVmYlx1OGJhNFx1NTIwM1x1NTk4YVx1N2VhYlx1NjI1NFx1NGVjZFx1NjVlNVx1NjIwZVx1ODMzOFx1ODRjOVx1ODM2M1x1ODc4ZFx1NzE5NFx1NmViNlx1NWJiOVx1N2VkMlx1NTE5N1x1NjNjOVx1NjdkNFx1ODA4OVx1ODMzOVx1ODgxNVx1NTEx''@;'; put 'put ''Mlx1NWI3YVx1NTk4Mlx1OGZiMVx1NGU3M1x1NmM1ZFx1NTE2NVx1ODkyNVx1OGY2Zlx1OTYyZVx1ODU0YVx1NzQ1ZVx1OTUxMFx1OTVmMFx1NmRhNlx1ODJlNVx1NWYzMVx1NjQ5Mlx1NmQxMlx1ODQyOFx1ODE2ZVx1OWNjM1x1NTg1ZVx1OGQ1Ylx1NGUwOVx1NTNjMVx1ZmZmZCIuc3BsaXQo''@;'; put 'put ''IiIpLGc9MDtnIT15WzIwMF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjAwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIwMF1bZ11dPTUxMjAwK2csX1s1MTIwMCtnXT15WzIwMF1bZ10pO2Zvcih5WzIwMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ODQ3ZFx1ODQ3ZVx1ODQ3Zlx1ODQ4MFx1ODQ4MVx1ODQ4M1x1ODQ4NFx1ODQ4NVx1ODQ4Nlx1ODQ4YVx1ODQ4ZFx1ODQ4Zlx1ODQ5MFx1ODQ5MVx1ODQ5Mlx1ODQ5M1x1ODQ5NFx1ODQ5NVx1ODQ5Nlx1ODQ5OFx1ODQ5YVx1ODQ5Ylx1ODQ5ZFx1ODQ5ZVx1ODQ5Zlx1ODRhMFx1''@;'; put 'put ''ODRhMlx1ODRhM1x1ODRhNFx1ODRhNVx1ODRhNlx1ODRhN1x1ODRhOFx1ODRhOVx1ODRhYVx1ODRhYlx1ODRhY1x1ODRhZFx1ODRhZVx1ODRiMFx1ODRiMVx1ODRiM1x1ODRiNVx1ODRiNlx1ODRiN1x1ODRiYlx1ODRiY1x1ODRiZVx1ODRjMFx1ODRjMlx1ODRjM1x1ODRjNVx1ODRjNlx1ODRj''@;'; put 'put ''N1x1ODRjOFx1ODRjYlx1ODRjY1x1ODRjZVx1ODRjZlx1ODRkMlx1ODRkNFx1ODRkNVx1ODRkN1x1ZmZmZFx1ODRkOFx1ODRkOVx1ODRkYVx1ODRkYlx1ODRkY1x1ODRkZVx1ODRlMVx1ODRlMlx1ODRlNFx1ODRlN1x1ODRlOFx1ODRlOVx1ODRlYVx1ODRlYlx1ODRlZFx1ODRlZVx1ODRlZlx1''@;'; put 'put ''ODRmMVx1ODRmMlx1ODRmM1x1ODRmNFx1ODRmNVx1ODRmNlx1ODRmN1x1ODRmOFx1ODRmOVx1ODRmYVx1ODRmYlx1ODRmZFx1ODRmZVx1ODUwMFx1ODUwMVx1ODUwMlx1NGYxZVx1NjU2M1x1Njg1MVx1NTVkM1x1NGUyN1x1NjQxNFx1OWE5YVx1NjI2Ylx1NWFjMlx1NzQ1Zlx1ODI3Mlx1NmRh''@;'; put 'put ''OVx1NjhlZVx1NTBlN1x1ODM4ZVx1NzgwMlx1Njc0MFx1NTIzOVx1NmM5OVx1N2ViMVx1NTBiYlx1NTU2NVx1NzE1ZVx1N2I1Ylx1NjY1Mlx1NzNjYVx1ODJlYlx1Njc0OVx1NWM3MVx1NTIyMFx1NzE3ZFx1ODg2Ylx1OTVlYVx1OTY1NVx1NjRjNVx1OGQ2MVx1ODFiM1x1NTU4NFx1NmM1NVx1''@;'; put 'put ''NjI0N1x1N2YyZVx1NTg5Mlx1NGYyNFx1NTU0Nlx1OGQ0Zlx1NjY0Y1x1NGUwYVx1NWMxYVx1ODhmM1x1NjhhMlx1NjM0ZVx1N2EwZFx1NzBlN1x1ODI4ZFx1NTJmYVx1OTdmNlx1NWMxMVx1NTRlOFx1OTBiNVx1N2VjZFx1NTk2Mlx1OGQ0YVx1ODZjN1x1ODIwY1x1ODIwZFx1OGQ2Nlx1NjQ0''@;'; put 'put ''NFx1NWMwNFx1NjE1MVx1NmQ4OVx1NzkzZVx1OGJiZVx1NzgzN1x1NzUzM1x1NTQ3Ylx1NGYzOFx1OGVhYlx1NmRmMVx1NWEyMFx1N2VjNVx1Nzk1ZVx1NmM4OFx1NWJhMVx1NWE3Nlx1NzUxYVx1ODBiZVx1NjE0ZVx1NmUxN1x1NThmMFx1NzUxZlx1NzUyNVx1NzI3Mlx1NTM0N1x1N2VmM1x1''@;'; put 'put ''ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIwMV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjAxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIwMV1bZ11dPTUxNDU2K2csX1s1MTQ1NitnXT15WzIwMV1bZ10pO2Zvcih5WzIwMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODUwM1x1ODUwNFx1ODUwNVx1ODUwNlx1ODUwN1x1ODUwOFx1ODUwOVx1ODUwYVx1ODUwYlx1ODUwZFx1ODUwZVx1ODUwZlx1ODUxMFx1ODUxMlx1ODUxNFx1ODUxNVx1ODUxNlx1ODUxOFx1ODUxOVx1ODUxYlx1ODUxY1x1ODUxZFx1ODUxZVx1ODUyMFx1''@;'; put 'put ''ODUyMlx1ODUyM1x1ODUyNFx1ODUyNVx1ODUyNlx1ODUyN1x1ODUyOFx1ODUyOVx1ODUyYVx1ODUyZFx1ODUyZVx1ODUyZlx1ODUzMFx1ODUzMVx1ODUzMlx1ODUzM1x1ODUzNFx1ODUzNVx1ODUzNlx1ODUzZVx1ODUzZlx1ODU0MFx1ODU0MVx1ODU0Mlx1ODU0NFx1ODU0NVx1ODU0Nlx1ODU0''@;'; put 'put ''N1x1ODU0Ylx1ODU0Y1x1ODU0ZFx1ODU0ZVx1ODU0Zlx1ODU1MFx1ODU1MVx1ODU1Mlx1ODU1M1x1ODU1NFx1ODU1NVx1ZmZmZFx1ODU1N1x1ODU1OFx1ODU1YVx1ODU1Ylx1ODU1Y1x1ODU1ZFx1ODU1Zlx1ODU2MFx1ODU2MVx1ODU2Mlx1ODU2M1x1ODU2NVx1ODU2Nlx1ODU2N1x1ODU2OVx1''@;'; put 'put ''ODU2YVx1ODU2Ylx1ODU2Y1x1ODU2ZFx1ODU2ZVx1ODU2Zlx1ODU3MFx1ODU3MVx1ODU3M1x1ODU3NVx1ODU3Nlx1ODU3N1x1ODU3OFx1ODU3Y1x1ODU3ZFx1ODU3Zlx1ODU4MFx1ODU4MVx1NzcwMVx1NzZkYlx1NTI2OVx1ODBkY1x1NTcyM1x1NWUwOFx1NTkzMVx1NzJlZVx1NjViZFx1NmU3''@;'; put 'put ''Zlx1OGJkN1x1NWMzOFx1ODY3MVx1NTM0MVx1NzdmM1x1NjJmZVx1NjVmNlx1NGVjMFx1OThkZlx1ODY4MFx1NWI5ZVx1OGJjNlx1NTNmMlx1NzdlMlx1NGY3Zlx1NWM0ZVx1OWE3Nlx1NTljYlx1NWYwZlx1NzkzYVx1NThlYlx1NGUxNlx1NjdmZlx1NGU4Ylx1NjJlZFx1OGE5M1x1OTAxZFx1''@;'; put 'put ''NTJiZlx1NjYyZlx1NTVkY1x1NTY2Y1x1OTAwMlx1NGVkNVx1NGY4ZFx1OTFjYVx1OTk3MFx1NmMwZlx1NWUwMlx1NjA0M1x1NWJhNFx1ODljNlx1OGJkNVx1NjUzNlx1NjI0Ylx1OTk5Nlx1NWI4OFx1NWJmZlx1NjM4OFx1NTUyZVx1NTNkN1x1NzYyNlx1NTE3ZFx1ODUyY1x1NjdhMlx1Njhi''@;'; put 'put ''M1x1NmI4YVx1NjI5Mlx1OGY5M1x1NTNkNFx1ODIxMlx1NmRkMVx1NzU4Zlx1NGU2Nlx1OGQ0ZVx1NWI3MFx1NzE5Zlx1ODVhZlx1NjY5MVx1NjZkOVx1N2Y3Mlx1ODcwMFx1OWVjZFx1OWYyMFx1NWM1ZVx1NjcyZlx1OGZmMFx1NjgxMVx1Njc1Zlx1NjIwZFx1N2FkNlx1NTg4NVx1NWViNlx1''@;'; put 'put ''NjU3MFx1NmYzMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIwMl0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjAyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIwMl1bZ11dPTUxNzEyK2csX1s1MTcxMitnXT15WzIwMl1bZ10pO2Zvcih5WzIwM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODU4Mlx1ODU4M1x1ODU4Nlx1ODU4OFx1ODU4OVx1ODU4YVx1ODU4Ylx1ODU4Y1x1ODU4ZFx1ODU4ZVx1ODU5MFx1ODU5MVx1ODU5Mlx1ODU5M1x1ODU5NFx1ODU5NVx1ODU5Nlx1ODU5N1x1ODU5OFx1ODU5OVx1ODU5YVx1ODU5ZFx1''@;'; put 'put ''ODU5ZVx1ODU5Zlx1ODVhMFx1ODVhMVx1ODVhMlx1ODVhM1x1ODVhNVx1ODVhNlx1ODVhN1x1ODVhOVx1ODVhYlx1ODVhY1x1ODVhZFx1ODViMVx1ODViMlx1ODViM1x1ODViNFx1ODViNVx1ODViNlx1ODViOFx1ODViYVx1ODViYlx1ODViY1x1ODViZFx1ODViZVx1ODViZlx1ODVjMFx1ODVj''@;'; put 'put ''Mlx1ODVjM1x1ODVjNFx1ODVjNVx1ODVjNlx1ODVjN1x1ODVjOFx1ODVjYVx1ODVjYlx1ODVjY1x1ODVjZFx1ODVjZVx1ODVkMVx1ODVkMlx1ZmZmZFx1ODVkNFx1ODVkNlx1ODVkN1x1ODVkOFx1ODVkOVx1ODVkYVx1ODVkYlx1ODVkZFx1ODVkZVx1ODVkZlx1ODVlMFx1ODVlMVx1ODVlMlx1''@;'; put 'put ''ODVlM1x1ODVlNVx1ODVlNlx1ODVlN1x1ODVlOFx1ODVlYVx1ODVlYlx1ODVlY1x1ODVlZFx1ODVlZVx1ODVlZlx1ODVmMFx1ODVmMVx1ODVmMlx1ODVmM1x1ODVmNFx1ODVmNVx1ODVmNlx1ODVmN1x1ODVmOFx1NjA1NVx1NTIzN1x1ODAwZFx1NjQ1NFx1ODg3MFx1NzUyOVx1NWUwNVx1Njgx''@;'; put 'put ''M1x1NjJmNFx1OTcxY1x1NTNjY1x1NzIzZFx1OGMwMVx1NmMzNFx1Nzc2MVx1N2EwZVx1NTQyZVx1NzdhY1x1OTg3YVx1ODIxY1x1OGJmNFx1Nzg1NVx1NjcxNFx1NzBjMVx1NjVhZlx1NjQ5NVx1NTYzNlx1NjAxZFx1NzljMVx1NTNmOFx1NGUxZFx1NmI3Ylx1ODA4Nlx1NWJmYVx1NTVlM1x1''@;'; put 'put ''NTZkYlx1NGYzYVx1NGYzY1x1OTk3Mlx1NWRmM1x1Njc3ZVx1ODAzOFx1NjAwMlx1OTg4Mlx1OTAwMVx1NWI4Ylx1OGJiY1x1OGJmNVx1NjQxY1x1ODI1OFx1NjRkZVx1NTVmZFx1ODJjZlx1OTE2NVx1NGZkN1x1N2QyMFx1OTAxZlx1N2M5Zlx1NTBmM1x1NTg1MVx1NmVhZlx1NWJiZlx1OGJj''@;'; put 'put ''OVx1ODA4M1x1OTE3OFx1ODQ5Y1x1N2I5N1x1ODY3ZFx1OTY4Ylx1OTY4Zlx1N2VlNVx1OWFkM1x1Nzg4ZVx1NWM4MVx1N2E1N1x1OTA0Mlx1OTZhN1x1Nzk1Zlx1NWI1OVx1NjM1Zlx1N2IwYlx1ODRkMVx1NjhhZFx1NTUwNlx1N2YyOVx1NzQxMFx1N2QyMlx1OTUwMVx1NjI0MFx1NTg0Y1x1''@;'; put 'put ''NGVkNlx1NWI4M1x1NTk3OVx1NTg1NFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIwM10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjAzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIwM11bZ11dPTUxOTY4K2csX1s1MTk2OCtnXT15WzIwM11bZ10pO2Zvcih5WzIwNF09Ilx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODVmOVx1ODVmYVx1ODVmY1x1ODVmZFx1ODVmZVx1ODYwMFx1ODYwMVx1ODYwMlx1ODYwM1x1ODYwNFx1ODYwNlx1ODYwN1x1ODYwOFx1ODYwOVx1ODYwYVx1ODYwYlx1ODYwY1x1ODYwZFx1ODYwZVx1ODYwZlx1''@;'; put 'put ''ODYxMFx1ODYxMlx1ODYxM1x1ODYxNFx1ODYxNVx1ODYxN1x1ODYxOFx1ODYxOVx1ODYxYVx1ODYxYlx1ODYxY1x1ODYxZFx1ODYxZVx1ODYxZlx1ODYyMFx1ODYyMVx1ODYyMlx1ODYyM1x1ODYyNFx1ODYyNVx1ODYyNlx1ODYyOFx1ODYyYVx1ODYyYlx1ODYyY1x1ODYyZFx1ODYyZVx1ODYy''@;'; put 'put ''Zlx1ODYzMFx1ODYzMVx1ODYzMlx1ODYzM1x1ODYzNFx1ODYzNVx1ODYzNlx1ODYzN1x1ODYzOVx1ODYzYVx1ODYzYlx1ODYzZFx1ODYzZVx1ODYzZlx1ODY0MFx1ZmZmZFx1ODY0MVx1ODY0Mlx1ODY0M1x1ODY0NFx1ODY0NVx1ODY0Nlx1ODY0N1x1ODY0OFx1ODY0OVx1ODY0YVx1ODY0Ylx1''@;'; put 'put ''ODY0Y1x1ODY1Mlx1ODY1M1x1ODY1NVx1ODY1Nlx1ODY1N1x1ODY1OFx1ODY1OVx1ODY1Ylx1ODY1Y1x1ODY1ZFx1ODY1Zlx1ODY2MFx1ODY2MVx1ODY2M1x1ODY2NFx1ODY2NVx1ODY2Nlx1ODY2N1x1ODY2OFx1ODY2OVx1ODY2YVx1NzM2ZFx1NjMxZVx1OGU0Ylx1OGUwZlx1ODBjZVx1ODJk''@;'; put 'put ''NFx1NjJhY1x1NTNmMFx1NmNmMFx1OTE1ZVx1NTkyYVx1NjAwMVx1NmM3MFx1NTc0ZFx1NjQ0YVx1OGQyYVx1NzYyYlx1NmVlOVx1NTc1Ylx1NmE4MFx1NzVmMFx1NmY2ZFx1OGMyZFx1OGMwOFx1NTc2Nlx1NmJlZlx1ODg5Mlx1NzhiM1x1NjNhMlx1NTNmOVx1NzBhZFx1NmM2NFx1NTg1OFx1''@;'; put 'put ''NjQyYVx1NTgwMlx1NjhlMFx1ODE5Ylx1NTUxMFx1N2NkNlx1NTAxOFx1OGViYVx1NmRjY1x1OGQ5Zlx1NzBlYlx1NjM4Zlx1NmQ5Ylx1NmVkNFx1N2VlNlx1ODQwNFx1Njg0M1x1OTAwM1x1NmRkOFx1OTY3Nlx1OGJhOFx1NTk1N1x1NzI3OVx1ODVlNFx1ODE3ZVx1NzViY1x1OGE4YVx1Njhh''@;'; put 'put ''Zlx1NTI1NFx1OGUyMlx1OTUxMVx1NjNkMFx1OTg5OFx1OGU0NFx1NTU3Y1x1NGY1M1x1NjZmZlx1NTY4Zlx1NjBkNVx1NmQ5NVx1NTI0M1x1NWM0OVx1NTkyOVx1NmRmYlx1NTg2Ylx1NzUzMFx1NzUxY1x1NjA2Y1x1ODIxNFx1ODE0Nlx1NjMxMVx1Njc2MVx1OGZlMlx1NzczYVx1OGRmM1x1''@;'; put 'put ''OGQzNFx1OTRjMVx1NWUxNlx1NTM4NVx1NTQyY1x1NzBjM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIwNF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjA0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIwNF1bZ11dPTUyMjI0K2csX1s1MjIyNCtnXT15WzIwNF1bZ10pO2Zvcih5WzIwNV09''@;'; put 'put ''Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODY2ZFx1ODY2Zlx1ODY3MFx1ODY3Mlx1ODY3M1x1ODY3NFx1ODY3NVx1ODY3Nlx1ODY3N1x1ODY3OFx1ODY4M1x1ODY4NFx1ODY4NVx1ODY4Nlx1ODY4N1x1ODY4OFx1ODY4OVx1ODY4ZVx1''@;'; put 'put ''ODY4Zlx1ODY5MFx1ODY5MVx1ODY5Mlx1ODY5NFx1ODY5Nlx1ODY5N1x1ODY5OFx1ODY5OVx1ODY5YVx1ODY5Ylx1ODY5ZVx1ODY5Zlx1ODZhMFx1ODZhMVx1ODZhMlx1ODZhNVx1ODZhNlx1ODZhYlx1ODZhZFx1ODZhZVx1ODZiMlx1ODZiM1x1ODZiN1x1ODZiOFx1ODZiOVx1ODZiYlx1ODZi''@;'; put 'put ''Y1x1ODZiZFx1ODZiZVx1ODZiZlx1ODZjMVx1ODZjMlx1ODZjM1x1ODZjNVx1ODZjOFx1ODZjY1x1ODZjZFx1ODZkMlx1ODZkM1x1ODZkNVx1ODZkNlx1ODZkN1x1ODZkYVx1ODZkY1x1ZmZmZFx1ODZkZFx1ODZlMFx1ODZlMVx1ODZlMlx1ODZlM1x1ODZlNVx1ODZlNlx1ODZlN1x1ODZlOFx1''@;'; put 'put ''ODZlYVx1ODZlYlx1ODZlY1x1ODZlZlx1ODZmNVx1ODZmNlx1ODZmN1x1ODZmYVx1ODZmYlx1ODZmY1x1ODZmZFx1ODZmZlx1ODcwMVx1ODcwNFx1ODcwNVx1ODcwNlx1ODcwYlx1ODcwY1x1ODcwZVx1ODcwZlx1ODcxMFx1ODcxMVx1ODcxNFx1ODcxNlx1NmM0MFx1NWVmN1x1NTA1Y1x1NGVh''@;'; put 'put ''ZFx1NWVhZFx1NjMzYVx1ODI0N1x1OTAxYVx1Njg1MFx1OTE2ZVx1NzdiM1x1NTQwY1x1OTRkY1x1NWY2NFx1N2FlNVx1Njg3Nlx1NjM0NVx1N2I1Mlx1N2VkZlx1NzVkYlx1NTA3N1x1NjI5NVx1NTkzNFx1OTAwZlx1NTFmOFx1NzljM1x1N2E4MVx1NTZmZVx1NWY5Mlx1OTAxNFx1NmQ4Mlx1''@;'; put 'put ''NWM2MFx1NTcxZlx1NTQxMFx1NTE1NFx1NmU0ZFx1NTZlMlx1NjNhOFx1OTg5M1x1ODE3Zlx1ODcxNVx1ODkyYVx1OTAwMFx1NTQxZVx1NWM2Zlx1ODFjMFx1NjJkNlx1NjI1OFx1ODEzMVx1OWUzNVx1OTY0MFx1OWE2ZVx1OWE3Y1x1NjkyZFx1NTlhNVx1NjJkM1x1NTUzZVx1NjMxNlx1NTRj''@;'; put 'put ''N1x1ODZkOVx1NmQzY1x1NWEwM1x1NzRlNlx1ODg5Y1x1NmI2YVx1NTkxNlx1OGM0Y1x1NWYyZlx1NmU3ZVx1NzNhOVx1OTg3ZFx1NGUzOFx1NzBmN1x1NWI4Y1x1Nzg5N1x1NjMzZFx1NjY1YVx1NzY5Nlx1NjBjYlx1NWI5Ylx1NWE0OVx1NGUwN1x1ODE1NVx1NmM2YVx1NzM4Ylx1NGVhMVx1''@;'; put 'put ''Njc4OVx1N2Y1MVx1NWY4MFx1NjVmYVx1NjcxYlx1NWZkOFx1NTk4NFx1NWEwMVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIwNV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjA1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIwNV1bZ11dPTUyNDgwK2csX1s1MjQ4MCtnXT15WzIwNV1bZ10p''@;'; put 'put ''O2Zvcih5WzIwNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODcxOVx1ODcxYlx1ODcxZFx1ODcxZlx1ODcyMFx1ODcyNFx1ODcyNlx1ODcyN1x1ODcyOFx1ODcyYVx1ODcyYlx1ODcyY1x1ODcyZFx1ODcyZlx1ODczMFx1ODczMlx1''@;'; put 'put ''ODczM1x1ODczNVx1ODczNlx1ODczOFx1ODczOVx1ODczYVx1ODczY1x1ODczZFx1ODc0MFx1ODc0MVx1ODc0Mlx1ODc0M1x1ODc0NFx1ODc0NVx1ODc0Nlx1ODc0YVx1ODc0Ylx1ODc0ZFx1ODc0Zlx1ODc1MFx1ODc1MVx1ODc1Mlx1ODc1NFx1ODc1NVx1ODc1Nlx1ODc1OFx1ODc1YVx1ODc1''@;'; put 'put ''Ylx1ODc1Y1x1ODc1ZFx1ODc1ZVx1ODc1Zlx1ODc2MVx1ODc2Mlx1ODc2Nlx1ODc2N1x1ODc2OFx1ODc2OVx1ODc2YVx1ODc2Ylx1ODc2Y1x1ODc2ZFx1ODc2Zlx1ODc3MVx1ODc3Mlx1ODc3M1x1ODc3NVx1ZmZmZFx1ODc3N1x1ODc3OFx1ODc3OVx1ODc3YVx1ODc3Zlx1ODc4MFx1ODc4MVx1''@;'; put 'put ''ODc4NFx1ODc4Nlx1ODc4N1x1ODc4OVx1ODc4YVx1ODc4Y1x1ODc4ZVx1ODc4Zlx1ODc5MFx1ODc5MVx1ODc5Mlx1ODc5NFx1ODc5NVx1ODc5Nlx1ODc5OFx1ODc5OVx1ODc5YVx1ODc5Ylx1ODc5Y1x1ODc5ZFx1ODc5ZVx1ODdhMFx1ODdhMVx1ODdhMlx1ODdhM1x1ODdhNFx1NWRjZFx1NWZh''@;'; put 'put ''ZVx1NTM3MVx1OTdlNlx1OGZkZFx1Njg0NVx1NTZmNFx1NTUyZlx1NjBkZlx1NGUzYVx1NmY0ZFx1N2VmNFx1ODJjN1x1ODQwZVx1NTlkNFx1NGYxZlx1NGYyYVx1NWMzZVx1N2VhY1x1NjcyYVx1ODUxYVx1NTQ3M1x1NzU0Zlx1ODBjM1x1NTU4Mlx1OWI0Zlx1NGY0ZFx1NmUyZFx1OGMxM1x1''@;'; put 'put ''NWMwOVx1NjE3MFx1NTM2Ylx1NzYxZlx1NmUyOVx1ODY4YVx1NjU4N1x1OTVmYlx1N2ViOVx1NTQzYlx1N2EzM1x1N2QwYVx1OTVlZVx1NTVlMVx1N2ZjMVx1NzRlZVx1NjMxZFx1ODcxN1x1NmRhMVx1N2E5ZFx1NjIxMVx1NjVhMVx1NTM2N1x1NjNlMVx1NmM4M1x1NWRlYlx1NTQ1Y1x1OTRh''@;'; put 'put ''OFx1NGU0Y1x1NmM2MVx1OGJlY1x1NWM0Ylx1NjVlMFx1ODI5Y1x1NjhhN1x1NTQzZVx1NTQzNFx1NmJjYlx1NmI2Nlx1NGU5NFx1NjM0Mlx1NTM0OFx1ODIxZVx1NGYwZFx1NGZhZVx1NTc1ZVx1NjIwYVx1OTZmZVx1NjY2NFx1NzI2OVx1NTJmZlx1NTJhMVx1NjA5Zlx1OGJlZlx1NjYxNFx1''@;'; put 'put ''NzE5OVx1Njc5MFx1ODk3Zlx1Nzg1Mlx1NzdmZFx1NjY3MFx1NTYzYlx1NTQzOFx1OTUyMVx1NzI3YVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIwNl0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjA2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIwNl1bZ11dPTUyNzM2K2csX1s1MjczNitn''@;'; put 'put ''XT15WzIwNl1bZ10pO2Zvcih5WzIwN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODdhNVx1ODdhNlx1ODdhN1x1ODdhOVx1ODdhYVx1ODdhZVx1ODdiMFx1ODdiMVx1ODdiMlx1ODdiNFx1ODdiNlx1ODdiN1x1ODdiOFx1ODdiOVx1''@;'; put 'put ''ODdiYlx1ODdiY1x1ODdiZVx1ODdiZlx1ODdjMVx1ODdjMlx1ODdjM1x1ODdjNFx1ODdjNVx1ODdjN1x1ODdjOFx1ODdjOVx1ODdjY1x1ODdjZFx1ODdjZVx1ODdjZlx1ODdkMFx1ODdkNFx1ODdkNVx1ODdkNlx1ODdkN1x1ODdkOFx1ODdkOVx1ODdkYVx1ODdkY1x1ODdkZFx1ODdkZVx1ODdk''@;'; put 'put ''Zlx1ODdlMVx1ODdlMlx1ODdlM1x1ODdlNFx1ODdlNlx1ODdlN1x1ODdlOFx1ODdlOVx1ODdlYlx1ODdlY1x1ODdlZFx1ODdlZlx1ODdmMFx1ODdmMVx1ODdmMlx1ODdmM1x1ODdmNFx1ODdmNVx1ODdmNlx1ODdmN1x1ODdmOFx1ZmZmZFx1ODdmYVx1ODdmYlx1ODdmY1x1ODdmZFx1ODdmZlx1''@;'; put 'put ''ODgwMFx1ODgwMVx1ODgwMlx1ODgwNFx1ODgwNVx1ODgwNlx1ODgwN1x1ODgwOFx1ODgwOVx1ODgwYlx1ODgwY1x1ODgwZFx1ODgwZVx1ODgwZlx1ODgxMFx1ODgxMVx1ODgxMlx1ODgxNFx1ODgxN1x1ODgxOFx1ODgxOVx1ODgxYVx1ODgxY1x1ODgxZFx1ODgxZVx1ODgxZlx1ODgyMFx1ODgy''@;'; put 'put ''M1x1N2EwMFx1NjA2Zlx1NWUwY1x1NjA4OVx1ODE5ZFx1NTkxNVx1NjBkY1x1NzE4NFx1NzBlZlx1NmVhYVx1NmM1MFx1NzI4MFx1NmE4NFx1ODhhZFx1NWUyZFx1NGU2MFx1NWFiM1x1NTU5Y1x1OTRlM1x1NmQxN1x1N2NmYlx1OTY5OVx1NjIwZlx1N2VjNlx1Nzc4ZVx1ODY3ZVx1NTMyM1x1''@;'; put 'put ''OTcxZVx1OGY5Nlx1NjY4N1x1NWNlMVx1NGZhMFx1NzJlZFx1NGUwYlx1NTNhNlx1NTkwZlx1NTQxM1x1NjM4MFx1OTUyOFx1NTE0OFx1NGVkOVx1OWM5Y1x1N2VhNFx1NTRiOFx1OGQyNFx1ODg1NFx1ODIzN1x1OTVmMlx1NmQ4ZVx1NWYyNlx1NWFjY1x1NjYzZVx1OTY2OVx1NzNiMFx1NzMy''@;'; put 'put ''ZVx1NTNiZlx1ODE3YVx1OTk4NVx1N2ZhMVx1NWJhYVx1OTY3N1x1OTY1MFx1N2ViZlx1NzZmOFx1NTNhMlx1OTU3Nlx1OTk5OVx1N2JiMVx1ODk0NFx1NmU1OFx1NGU2MVx1N2ZkNFx1Nzk2NVx1OGJlNlx1NjBmM1x1NTRjZFx1NGVhYlx1OTg3OVx1NWRmN1x1NmE2MVx1NTBjZlx1NTQxMVx1''@;'; put 'put ''OGM2MVx1ODQyN1x1Nzg1ZFx1OTcwNFx1NTI0YVx1NTRlZVx1NTZhM1x1OTUwMFx1NmQ4OFx1NWJiNVx1NmRjNlx1NjY1M1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIwN10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjA3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIwN11bZ11dPTUyOTky''@;'; put 'put ''K2csX1s1Mjk5MitnXT15WzIwN11bZ10pO2Zvcih5WzIwOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODgyNFx1ODgyNVx1ODgyNlx1ODgyN1x1ODgyOFx1ODgyOVx1ODgyYVx1ODgyYlx1ODgyY1x1ODgyZFx1ODgyZVx1ODgyZlx1''@;'; put 'put ''ODgzMFx1ODgzMVx1ODgzM1x1ODgzNFx1ODgzNVx1ODgzNlx1ODgzN1x1ODgzOFx1ODgzYVx1ODgzYlx1ODgzZFx1ODgzZVx1ODgzZlx1ODg0MVx1ODg0Mlx1ODg0M1x1ODg0Nlx1ODg0N1x1ODg0OFx1ODg0OVx1ODg0YVx1ODg0Ylx1ODg0ZVx1ODg0Zlx1ODg1MFx1ODg1MVx1ODg1Mlx1ODg1''@;'; put 'put ''M1x1ODg1NVx1ODg1Nlx1ODg1OFx1ODg1YVx1ODg1Ylx1ODg1Y1x1ODg1ZFx1ODg1ZVx1ODg1Zlx1ODg2MFx1ODg2Nlx1ODg2N1x1ODg2YVx1ODg2ZFx1ODg2Zlx1ODg3MVx1ODg3M1x1ODg3NFx1ODg3NVx1ODg3Nlx1ODg3OFx1ODg3OVx1ODg3YVx1ZmZmZFx1ODg3Ylx1ODg3Y1x1ODg4MFx1''@;'; put 'put ''ODg4M1x1ODg4Nlx1ODg4N1x1ODg4OVx1ODg4YVx1ODg4Y1x1ODg4ZVx1ODg4Zlx1ODg5MFx1ODg5MVx1ODg5M1x1ODg5NFx1ODg5NVx1ODg5N1x1ODg5OFx1ODg5OVx1ODg5YVx1ODg5Ylx1ODg5ZFx1ODg5ZVx1ODg5Zlx1ODhhMFx1ODhhMVx1ODhhM1x1ODhhNVx1ODhhNlx1ODhhN1x1ODhh''@;'; put 'put ''OFx1ODhhOVx1ODhhYVx1NWMwZlx1NWI1ZFx1NjgyMVx1ODA5Nlx1NTU3OFx1N2IxMVx1NjU0OFx1Njk1NFx1NGU5Ylx1NmI0N1x1ODc0ZVx1OTc4Ylx1NTM0Zlx1NjMxZlx1NjQzYVx1OTBhYVx1NjU5Y1x1ODBjMVx1OGMxMFx1NTE5OVx1NjhiMFx1NTM3OFx1ODdmOVx1NjFjOFx1NmNjNFx1''@;'; put 'put ''NmNmYlx1OGMyMlx1NWM1MVx1ODVhYVx1ODJhZlx1OTUwY1x1NmIyM1x1OGY5Ylx1NjViMFx1NWZmYlx1NWZjM1x1NGZlMVx1ODg0NVx1NjYxZlx1ODE2NVx1NzMyOVx1NjBmYVx1NTE3NFx1NTIxMVx1NTc4Ylx1NWY2Mlx1OTBhMlx1ODg0Y1x1OTE5Mlx1NWU3OFx1Njc0Zlx1NjAyN1x1NTlk''@;'; put 'put ''M1x1NTE0NFx1NTFmNlx1ODBmOFx1NTMwOFx1NmM3OVx1OTZjNFx1NzE4YVx1NGYxMVx1NGZlZVx1N2Y5ZVx1NjczZFx1NTVjNVx1OTUwOFx1NzljMFx1ODg5Nlx1N2VlM1x1NTg5Zlx1NjIwY1x1OTcwMFx1ODY1YVx1NTYxOFx1OTg3Ylx1NWY5MFx1OGJiOFx1ODRjNFx1OTE1N1x1NTNkOVx1''@;'; put 'put ''NjVlZFx1NWU4Zlx1NzU1Y1x1NjA2NFx1N2Q2ZVx1NWE3Zlx1N2VlYVx1N2VlZFx1OGY2OVx1NTVhN1x1NWJhM1x1NjBhY1x1NjVjYlx1NzM4NFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIwOF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjA4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIw''@;'; put 'put ''OF1bZ11dPTUzMjQ4K2csX1s1MzI0OCtnXT15WzIwOF1bZ10pO2Zvcih5WzIwOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODhhY1x1ODhhZVx1ODhhZlx1ODhiMFx1ODhiMlx1ODhiM1x1ODhiNFx1ODhiNVx1ODhiNlx1ODhiOFx1''@;'; put 'put ''ODhiOVx1ODhiYVx1ODhiYlx1ODhiZFx1ODhiZVx1ODhiZlx1ODhjMFx1ODhjM1x1ODhjNFx1ODhjN1x1ODhjOFx1ODhjYVx1ODhjYlx1ODhjY1x1ODhjZFx1ODhjZlx1ODhkMFx1ODhkMVx1ODhkM1x1ODhkNlx1ODhkN1x1ODhkYVx1ODhkYlx1ODhkY1x1ODhkZFx1ODhkZVx1ODhlMFx1ODhl''@;'; put 'put ''MVx1ODhlNlx1ODhlN1x1ODhlOVx1ODhlYVx1ODhlYlx1ODhlY1x1ODhlZFx1ODhlZVx1ODhlZlx1ODhmMlx1ODhmNVx1ODhmNlx1ODhmN1x1ODhmYVx1ODhmYlx1ODhmZFx1ODhmZlx1ODkwMFx1ODkwMVx1ODkwM1x1ODkwNFx1ODkwNVx1ODkwNlx1ODkwN1x1ODkwOFx1ZmZmZFx1ODkwOVx1''@;'; put 'put ''ODkwYlx1ODkwY1x1ODkwZFx1ODkwZVx1ODkwZlx1ODkxMVx1ODkxNFx1ODkxNVx1ODkxNlx1ODkxN1x1ODkxOFx1ODkxY1x1ODkxZFx1ODkxZVx1ODkxZlx1ODkyMFx1ODkyMlx1ODkyM1x1ODkyNFx1ODkyNlx1ODkyN1x1ODkyOFx1ODkyOVx1ODkyY1x1ODkyZFx1ODkyZVx1ODkyZlx1ODkz''@;'; put 'put ''MVx1ODkzMlx1ODkzM1x1ODkzNVx1ODkzN1x1OTAwOVx1NzY2M1x1NzcyOVx1N2VkYVx1OTc3NFx1ODU5Ylx1NWI2Nlx1N2E3NFx1OTZlYVx1ODg0MFx1NTJjYlx1NzE4Zlx1NWZhYVx1NjVlY1x1OGJlMlx1NWJmYlx1OWE2Zlx1NWRlMVx1NmI4OVx1NmM1Ylx1OGJhZFx1OGJhZlx1OTAwYVx1''@;'; put 'put ''OGZjNVx1NTM4Ylx1NjJiY1x1OWUyNlx1OWUyZFx1NTQ0MFx1NGUyYlx1ODJiZFx1NzI1OVx1ODY5Y1x1NWQxNlx1ODg1OVx1NmRhZlx1OTZjNVx1NTRkMVx1NGU5YVx1OGJiNlx1NzEwOVx1NTRiZFx1OTYwOVx1NzBkZlx1NmRmOVx1NzZkMFx1NGUyNVx1NzgxNFx1ODcxMlx1NWNhOVx1NWVm''@;'; put 'put ''Nlx1OGEwMFx1OTg5Y1x1OTYwZVx1NzA4ZVx1NmNiZlx1NTk0NFx1NjNhOVx1NzczY1x1ODg0ZFx1NmYxNFx1ODI3M1x1NTgzMFx1NzFkNVx1NTM4Y1x1NzgxYVx1OTZjMVx1NTUwMVx1NWY2Nlx1NzEzMFx1NWJiNFx1OGMxYVx1OWE4Y1x1NmI4M1x1NTkyZVx1OWUyZlx1NzllN1x1Njc2OFx1''@;'; put 'put ''NjI2Y1x1NGY2Zlx1NzVhMVx1N2Y4YVx1NmQwYlx1OTYzM1x1NmMyN1x1NGVmMFx1NzVkMlx1NTE3Ylx1NjgzN1x1NmYzZVx1OTA4MFx1ODE3MFx1NTk5Nlx1NzQ3Nlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIwOV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjA5XVtnXS5jaGFyQ29kZUF0''@;'; put 'put ''KDApJiYoSVt5WzIwOV1bZ11dPTUzNTA0K2csX1s1MzUwNCtnXT15WzIwOV1bZ10pO2Zvcih5WzIxMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODkzOFx1ODkzOVx1ODkzYVx1ODkzYlx1ODkzY1x1ODkzZFx1ODkzZVx1ODkzZlx1''@;'; put 'put ''ODk0MFx1ODk0Mlx1ODk0M1x1ODk0NVx1ODk0Nlx1ODk0N1x1ODk0OFx1ODk0OVx1ODk0YVx1ODk0Ylx1ODk0Y1x1ODk0ZFx1ODk0ZVx1ODk0Zlx1ODk1MFx1ODk1MVx1ODk1Mlx1ODk1M1x1ODk1NFx1ODk1NVx1ODk1Nlx1ODk1N1x1ODk1OFx1ODk1OVx1ODk1YVx1ODk1Ylx1ODk1Y1x1ODk1''@;'; put 'put ''ZFx1ODk2MFx1ODk2MVx1ODk2Mlx1ODk2M1x1ODk2NFx1ODk2NVx1ODk2N1x1ODk2OFx1ODk2OVx1ODk2YVx1ODk2Ylx1ODk2Y1x1ODk2ZFx1ODk2ZVx1ODk2Zlx1ODk3MFx1ODk3MVx1ODk3Mlx1ODk3M1x1ODk3NFx1ODk3NVx1ODk3Nlx1ODk3N1x1ODk3OFx1ODk3OVx1ODk3YVx1ODk3Y1x1''@;'; put 'put ''ZmZmZFx1ODk3ZFx1ODk3ZVx1ODk4MFx1ODk4Mlx1ODk4NFx1ODk4NVx1ODk4N1x1ODk4OFx1ODk4OVx1ODk4YVx1ODk4Ylx1ODk4Y1x1ODk4ZFx1ODk4ZVx1ODk4Zlx1ODk5MFx1ODk5MVx1ODk5Mlx1ODk5M1x1ODk5NFx1ODk5NVx1ODk5Nlx1ODk5N1x1ODk5OFx1ODk5OVx1ODk5YVx1ODk5''@;'; put 'put ''Ylx1ODk5Y1x1ODk5ZFx1ODk5ZVx1ODk5Zlx1ODlhMFx1ODlhMVx1NjQ0N1x1NWMyN1x1OTA2NVx1N2E5MVx1OGMyM1x1NTlkYVx1NTRhY1x1ODIwMFx1ODM2Zlx1ODk4MVx1ODAwMFx1NjkzMFx1NTY0ZVx1ODAzNlx1NzIzN1x1OTFjZVx1NTFiNlx1NGU1Zlx1OTg3NVx1NjM5Nlx1NGUxYVx1''@;'; put 'put ''NTNmNlx1NjZmM1x1ODE0Ylx1NTkxY1x1NmRiMlx1NGUwMFx1NThmOVx1NTMzYlx1NjNkNlx1OTRmMVx1NGY5ZFx1NGYwYVx1ODg2M1x1OTg5MFx1NTkzN1x1OTA1N1x1NzlmYlx1NGVlYVx1ODBmMFx1NzU5MVx1NmM4Mlx1NWI5Y1x1NTllOFx1NWY1ZFx1NjkwNVx1ODY4MVx1NTAxYVx1NWRm''@;'; put 'put ''Mlx1NGU1OVx1NzdlM1x1NGVlNVx1ODI3YVx1NjI5MVx1NjYxM1x1OTA5MVx1NWM3OVx1NGViZlx1NWY3OVx1ODFjNlx1OTAzOFx1ODA4NFx1NzVhYlx1NGVhNlx1ODhkNFx1NjEwZlx1NmJjNVx1NWZjNlx1NGU0OVx1NzZjYVx1NmVhMlx1OGJlM1x1OGJhZVx1OGMwYVx1OGJkMVx1NWYwMlx1''@;'; put 'put ''N2ZmY1x1N2ZjY1x1N2VjZVx1ODMzNVx1ODM2Ylx1NTZlMFx1NmJiN1x1OTdmM1x1OTYzNFx1NTlmYlx1NTQxZlx1OTRmNlx1NmRlYlx1NWJjNVx1OTk2ZVx1NWMzOVx1NWYxNVx1OTY5MFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIxMF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjEwXVtn''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApJiYoSVt5WzIxMF1bZ11dPTUzNzYwK2csX1s1Mzc2MCtnXT15WzIxMF1bZ10pO2Zvcih5WzIxMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ODlhMlx1ODlhM1x1ODlhNFx1ODlhNVx1ODlhNlx1ODlhN1x1''@;'; put 'put ''ODlhOFx1ODlhOVx1ODlhYVx1ODlhYlx1ODlhY1x1ODlhZFx1ODlhZVx1ODlhZlx1ODliMFx1ODliMVx1ODliMlx1ODliM1x1ODliNFx1ODliNVx1ODliNlx1ODliN1x1ODliOFx1ODliOVx1ODliYVx1ODliYlx1ODliY1x1ODliZFx1ODliZVx1ODliZlx1ODljMFx1ODljM1x1ODljZFx1ODlk''@;'; put 'put ''M1x1ODlkNFx1ODlkNVx1ODlkN1x1ODlkOFx1ODlkOVx1ODlkYlx1ODlkZFx1ODlkZlx1ODllMFx1ODllMVx1ODllMlx1ODllNFx1ODllN1x1ODllOFx1ODllOVx1ODllYVx1ODllY1x1ODllZFx1ODllZVx1ODlmMFx1ODlmMVx1ODlmMlx1ODlmNFx1ODlmNVx1ODlmNlx1ODlmN1x1ODlmOFx1''@;'; put 'put ''ODlmOVx1ODlmYVx1ZmZmZFx1ODlmYlx1ODlmY1x1ODlmZFx1ODlmZVx1ODlmZlx1OGEwMVx1OGEwMlx1OGEwM1x1OGEwNFx1OGEwNVx1OGEwNlx1OGEwOFx1OGEwOVx1OGEwYVx1OGEwYlx1OGEwY1x1OGEwZFx1OGEwZVx1OGEwZlx1OGExMFx1OGExMVx1OGExMlx1OGExM1x1OGExNFx1OGEx''@;'; put 'put ''NVx1OGExNlx1OGExN1x1OGExOFx1OGExOVx1OGExYVx1OGExYlx1OGExY1x1OGExZFx1NTM3MFx1ODJmMVx1NmEzMVx1NWE3NFx1OWU3MFx1NWU5NFx1N2YyOFx1ODNiOVx1ODQyNFx1ODQyNVx1ODM2N1x1ODc0N1x1OGZjZVx1OGQ2Mlx1NzZjOFx1NWY3MVx1OTg5Nlx1Nzg2Y1x1NjYyMFx1''@;'; put 'put ''NTRkZlx1NjJlNVx1NGY2M1x1ODFjM1x1NzVjOFx1NWViOFx1OTZjZFx1OGUwYVx1ODZmOVx1NTQ4Zlx1NmNmM1x1NmQ4Y1x1NmMzOFx1NjA3Zlx1NTJjN1x1NzUyOFx1NWU3ZFx1NGYxOFx1NjBhMFx1NWZlN1x1NWMyNFx1NzUzMVx1OTBhZVx1OTRjMFx1NzJiOVx1NmNiOVx1NmUzOFx1OTE0''@;'; put 'put ''OVx1NjcwOVx1NTNjYlx1NTNmM1x1NGY1MVx1OTFjOVx1OGJmMVx1NTNjOFx1NWU3Y1x1OGZjMlx1NmRlNFx1NGU4ZVx1NzZjMlx1Njk4Nlx1ODY1ZVx1NjExYVx1ODIwNlx1NGY1OVx1NGZkZVx1OTAzZVx1OWM3Y1x1NjEwOVx1NmUxZFx1NmUxNFx1OTY4NVx1NGU4OFx1NWEzMVx1OTZlOFx1''@;'; put 'put ''NGUwZVx1NWM3Zlx1NzliOVx1NWI4N1x1OGJlZFx1N2ZiZFx1NzM4OVx1NTdkZlx1ODI4Ylx1OTBjMVx1NTQwMVx1OTA0N1x1NTViYlx1NWNlYVx1NWZhMVx1NjEwOFx1NmIzMlx1NzJmMVx1ODBiMlx1OGE4OVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIxMV0ubGVuZ3RoOysrZyk2NTUz''@;'; put 'put ''MyE9PXlbMjExXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIxMV1bZ11dPTU0MDE2K2csX1s1NDAxNitnXT15WzIxMV1bZ10pO2Zvcih5WzIxMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGExZVx1OGExZlx1OGEyMFx1OGEyMVx1''@;'; put 'put ''OGEyMlx1OGEyM1x1OGEyNFx1OGEyNVx1OGEyNlx1OGEyN1x1OGEyOFx1OGEyOVx1OGEyYVx1OGEyYlx1OGEyY1x1OGEyZFx1OGEyZVx1OGEyZlx1OGEzMFx1OGEzMVx1OGEzMlx1OGEzM1x1OGEzNFx1OGEzNVx1OGEzNlx1OGEzN1x1OGEzOFx1OGEzOVx1OGEzYVx1OGEzYlx1OGEzY1x1OGEz''@;'; put 'put ''ZFx1OGEzZlx1OGE0MFx1OGE0MVx1OGE0Mlx1OGE0M1x1OGE0NFx1OGE0NVx1OGE0Nlx1OGE0N1x1OGE0OVx1OGE0YVx1OGE0Ylx1OGE0Y1x1OGE0ZFx1OGE0ZVx1OGE0Zlx1OGE1MFx1OGE1MVx1OGE1Mlx1OGE1M1x1OGE1NFx1OGE1NVx1OGE1Nlx1OGE1N1x1OGE1OFx1OGE1OVx1OGE1YVx1''@;'; put 'put ''OGE1Ylx1OGE1Y1x1OGE1ZFx1OGE1ZVx1ZmZmZFx1OGE1Zlx1OGE2MFx1OGE2MVx1OGE2Mlx1OGE2M1x1OGE2NFx1OGE2NVx1OGE2Nlx1OGE2N1x1OGE2OFx1OGE2OVx1OGE2YVx1OGE2Ylx1OGE2Y1x1OGE2ZFx1OGE2ZVx1OGE2Zlx1OGE3MFx1OGE3MVx1OGE3Mlx1OGE3M1x1OGE3NFx1OGE3''@;'; put 'put ''NVx1OGE3Nlx1OGE3N1x1OGE3OFx1OGE3YVx1OGE3Ylx1OGE3Y1x1OGE3ZFx1OGE3ZVx1OGE3Zlx1OGE4MFx1NmQ3NFx1NWJkM1x1ODhkNVx1OTg4NFx1OGM2Ylx1OWE2ZFx1OWUzM1x1NmUwYVx1NTFhNFx1NTE0M1x1NTdhM1x1ODg4MVx1NTM5Zlx1NjNmNFx1OGY5NVx1NTZlZFx1NTQ1OFx1''@;'; put 'put ''NTcwNlx1NzMzZlx1NmU5MFx1N2YxOFx1OGZkY1x1ODJkMVx1NjEzZlx1NjAyOFx1OTY2Mlx1NjZmMFx1N2VhNlx1OGQ4YVx1OGRjM1x1OTRhNVx1NWNiM1x1N2NhNFx1NjcwOFx1NjBhNlx1OTYwNVx1ODAxOFx1NGU5MVx1OTBlN1x1NTMwMFx1OTY2OFx1NTE0MVx1OGZkMFx1ODU3NFx1OTE1''@;'; put 'put ''ZFx1NjY1NVx1OTdmNVx1NWI1NVx1NTMxZFx1NzgzOFx1Njc0Mlx1NjgzZFx1NTRjOVx1NzA3ZVx1NWJiMFx1OGY3ZFx1NTE4ZFx1NTcyOFx1NTRiMVx1NjUxMlx1NjY4Mlx1OGQ1ZVx1OGQ0M1x1ODEwZlx1ODQ2Y1x1OTA2ZFx1N2NkZlx1NTFmZlx1ODVmYlx1NjdhM1x1NjVlOVx1NmZhMVx1''@;'; put 'put ''ODZhNFx1OGU4MVx1NTY2YVx1OTAyMFx1NzY4Mlx1NzA3Nlx1NzFlNVx1OGQyM1x1NjJlOVx1NTIxOVx1NmNmZFx1OGQzY1x1NjAwZVx1NTg5ZVx1NjE4ZVx1NjZmZVx1OGQ2MFx1NjI0ZVx1NTViM1x1NmUyM1x1NjcyZFx1OGY2N1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIxMl0ubGVu''@;'; put 'put ''Z3RoOysrZyk2NTUzMyE9PXlbMjEyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIxMl1bZ11dPTU0MjcyK2csX1s1NDI3MitnXT15WzIxMl1bZ10pO2Zvcih5WzIxM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGE4MVx1OGE4Mlx1''@;'; put 'put ''OGE4M1x1OGE4NFx1OGE4NVx1OGE4Nlx1OGE4N1x1OGE4OFx1OGE4Ylx1OGE4Y1x1OGE4ZFx1OGE4ZVx1OGE4Zlx1OGE5MFx1OGE5MVx1OGE5Mlx1OGE5NFx1OGE5NVx1OGE5Nlx1OGE5N1x1OGE5OFx1OGE5OVx1OGE5YVx1OGE5Ylx1OGE5Y1x1OGE5ZFx1OGE5ZVx1OGE5Zlx1OGFhMFx1OGFh''@;'; put 'put ''MVx1OGFhMlx1OGFhM1x1OGFhNFx1OGFhNVx1OGFhNlx1OGFhN1x1OGFhOFx1OGFhOVx1OGFhYVx1OGFhYlx1OGFhY1x1OGFhZFx1OGFhZVx1OGFhZlx1OGFiMFx1OGFiMVx1OGFiMlx1OGFiM1x1OGFiNFx1OGFiNVx1OGFiNlx1OGFiN1x1OGFiOFx1OGFiOVx1OGFiYVx1OGFiYlx1OGFiY1x1''@;'; put 'put ''OGFiZFx1OGFiZVx1OGFiZlx1OGFjMFx1OGFjMVx1OGFjMlx1ZmZmZFx1OGFjM1x1OGFjNFx1OGFjNVx1OGFjNlx1OGFjN1x1OGFjOFx1OGFjOVx1OGFjYVx1OGFjYlx1OGFjY1x1OGFjZFx1OGFjZVx1OGFjZlx1OGFkMFx1OGFkMVx1OGFkMlx1OGFkM1x1OGFkNFx1OGFkNVx1OGFkNlx1OGFk''@;'; put 'put ''N1x1OGFkOFx1OGFkOVx1OGFkYVx1OGFkYlx1OGFkY1x1OGFkZFx1OGFkZVx1OGFkZlx1OGFlMFx1OGFlMVx1OGFlMlx1OGFlM1x1OTRlMVx1OTVmOFx1NzcyOFx1NjgwNVx1NjlhOFx1NTQ4Ylx1NGU0ZFx1NzBiOFx1OGJjOFx1NjQ1OFx1NjU4Ylx1NWI4NVx1N2E4NFx1NTAzYVx1NWJlOFx1''@;'; put 'put ''NzdiYlx1NmJlMVx1OGE3OVx1N2M5OFx1NmNiZVx1NzZjZlx1NjVhOVx1OGY5N1x1NWQyZFx1NWM1NVx1ODYzOFx1NjgwOFx1NTM2MFx1NjIxOFx1N2FkOVx1NmU1Ylx1N2VmZFx1NmExZlx1N2FlMFx1NWY3MFx1NmYzM1x1NWYyMFx1NjM4Y1x1NmRhOFx1Njc1Nlx1NGUwOFx1NWUxMFx1OGQy''@;'; put 'put ''Nlx1NGVkN1x1ODBjMFx1NzYzNFx1OTY5Y1x1NjJkYlx1NjYyZFx1NjI3ZVx1NmNiY1x1OGQ3NVx1NzE2N1x1N2Y2OVx1NTE0Nlx1ODA4N1x1NTNlY1x1OTA2ZVx1NjI5OFx1NTRmMlx1ODZmMFx1OGY5OVx1ODAwNVx1OTUxN1x1ODUxN1x1OGZkOVx1NmQ1OVx1NzNjZFx1NjU5Zlx1NzcxZlx1''@;'; put 'put ''NzUwNFx1NzgyN1x1ODFmYlx1OGQxZVx1OTQ4OFx1NGZhNlx1Njc5NVx1NzViOVx1OGJjYVx1OTcwN1x1NjMyZlx1OTU0N1x1OTYzNVx1ODRiOFx1NjMyM1x1Nzc0MVx1NWY4MVx1NzJmMFx1NGU4OVx1NjAxNFx1NjU3NFx1NjJlZlx1NmI2M1x1NjUzZlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtn''@;'; put 'put ''IT15WzIxM10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjEzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIxM11bZ11dPTU0NTI4K2csX1s1NDUyOCtnXT15WzIxM11bZ10pO2Zvcih5WzIxNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''OGFlNFx1OGFlNVx1OGFlNlx1OGFlN1x1OGFlOFx1OGFlOVx1OGFlYVx1OGFlYlx1OGFlY1x1OGFlZFx1OGFlZVx1OGFlZlx1OGFmMFx1OGFmMVx1OGFmMlx1OGFmM1x1OGFmNFx1OGFmNVx1OGFmNlx1OGFmN1x1OGFmOFx1OGFmOVx1OGFmYVx1OGFmYlx1OGFmY1x1OGFmZFx1OGFmZVx1OGFm''@;'; put 'put ''Zlx1OGIwMFx1OGIwMVx1OGIwMlx1OGIwM1x1OGIwNFx1OGIwNVx1OGIwNlx1OGIwOFx1OGIwOVx1OGIwYVx1OGIwYlx1OGIwY1x1OGIwZFx1OGIwZVx1OGIwZlx1OGIxMFx1OGIxMVx1OGIxMlx1OGIxM1x1OGIxNFx1OGIxNVx1OGIxNlx1OGIxN1x1OGIxOFx1OGIxOVx1OGIxYVx1OGIxYlx1''@;'; put 'put ''OGIxY1x1OGIxZFx1OGIxZVx1OGIxZlx1OGIyMFx1OGIyMVx1OGIyMlx1OGIyM1x1ZmZmZFx1OGIyNFx1OGIyNVx1OGIyN1x1OGIyOFx1OGIyOVx1OGIyYVx1OGIyYlx1OGIyY1x1OGIyZFx1OGIyZVx1OGIyZlx1OGIzMFx1OGIzMVx1OGIzMlx1OGIzM1x1OGIzNFx1OGIzNVx1OGIzNlx1OGIz''@;'; put 'put ''N1x1OGIzOFx1OGIzOVx1OGIzYVx1OGIzYlx1OGIzY1x1OGIzZFx1OGIzZVx1OGIzZlx1OGI0MFx1OGI0MVx1OGI0Mlx1OGI0M1x1OGI0NFx1OGI0NVx1NWUyN1x1NzVjN1x1OTBkMVx1OGJjMVx1ODI5ZFx1Njc5ZFx1NjUyZlx1NTQzMVx1ODcxOFx1NzdlNVx1ODBhMlx1ODEwMlx1NmM0MVx1''@;'; put 'put ''NGU0Ylx1N2VjN1x1ODA0Y1x1NzZmNFx1NjkwZFx1NmI5Nlx1NjI2N1x1NTAzY1x1NGY4NFx1NTc0MFx1NjMwN1x1NmI2Mlx1OGRiZVx1NTNlYVx1NjVlOFx1N2ViOFx1NWZkN1x1NjMxYVx1NjNiN1x1ODFmM1x1ODFmNFx1N2Y2ZVx1NWUxY1x1NWNkOVx1NTIzNlx1NjY3YVx1NzllOVx1N2Ex''@;'; put 'put ''YVx1OGQyOFx1NzA5OVx1NzVkNFx1NmVkZVx1NmNiYlx1N2E5Mlx1NGUyZFx1NzZjNVx1NWZlMFx1OTQ5Zlx1ODg3N1x1N2VjOFx1NzljZFx1ODBiZlx1OTFjZFx1NGVmMlx1NGYxN1x1ODIxZlx1NTQ2OFx1NWRkZVx1NmQzMlx1OGJjY1x1N2NhNVx1OGY3NFx1ODA5OFx1NWUxYVx1NTQ5Mlx1''@;'; put 'put ''NzZiMVx1NWI5OVx1NjYzY1x1OWFhNFx1NzNlMFx1NjgyYVx1ODZkYlx1NjczMVx1NzMyYVx1OGJmOFx1OGJkYlx1OTAxMFx1N2FmOVx1NzBkYlx1NzE2ZVx1NjJjNFx1NzdhOVx1NTYzMVx1NGUzYlx1ODQ1N1x1NjdmMVx1NTJhOVx1ODZjMFx1OGQyZVx1OTRmOFx1N2I1MVx1ZmZmZCIuc3Bs''@;'; put 'put ''aXQoIiIpLGc9MDtnIT15WzIxNF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjE0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIxNF1bZ11dPTU0Nzg0K2csX1s1NDc4NCtnXT15WzIxNF1bZ10pO2Zvcih5WzIxNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1OGI0Nlx1OGI0N1x1OGI0OFx1OGI0OVx1OGI0YVx1OGI0Ylx1OGI0Y1x1OGI0ZFx1OGI0ZVx1OGI0Zlx1OGI1MFx1OGI1MVx1OGI1Mlx1OGI1M1x1OGI1NFx1OGI1NVx1OGI1Nlx1OGI1N1x1OGI1OFx1OGI1OVx1OGI1YVx1OGI1Ylx1OGI1Y1x1OGI1ZFx1OGI1ZVx1OGI1''@;'; put 'put ''Zlx1OGI2MFx1OGI2MVx1OGI2Mlx1OGI2M1x1OGI2NFx1OGI2NVx1OGI2N1x1OGI2OFx1OGI2OVx1OGI2YVx1OGI2Ylx1OGI2ZFx1OGI2ZVx1OGI2Zlx1OGI3MFx1OGI3MVx1OGI3Mlx1OGI3M1x1OGI3NFx1OGI3NVx1OGI3Nlx1OGI3N1x1OGI3OFx1OGI3OVx1OGI3YVx1OGI3Ylx1OGI3Y1x1''@;'; put 'put ''OGI3ZFx1OGI3ZVx1OGI3Zlx1OGI4MFx1OGI4MVx1OGI4Mlx1OGI4M1x1OGI4NFx1OGI4NVx1OGI4Nlx1ZmZmZFx1OGI4N1x1OGI4OFx1OGI4OVx1OGI4YVx1OGI4Ylx1OGI4Y1x1OGI4ZFx1OGI4ZVx1OGI4Zlx1OGI5MFx1OGI5MVx1OGI5Mlx1OGI5M1x1OGI5NFx1OGI5NVx1OGI5Nlx1OGI5''@;'; put 'put ''N1x1OGI5OFx1OGI5OVx1OGI5YVx1OGI5Ylx1OGI5Y1x1OGI5ZFx1OGI5ZVx1OGI5Zlx1OGJhY1x1OGJiMVx1OGJiYlx1OGJjN1x1OGJkMFx1OGJlYVx1OGMwOVx1OGMxZVx1NGY0Zlx1NmNlOFx1Nzk1ZFx1OWE3Ylx1NjI5M1x1NzIyYVx1NjJmZFx1NGUxM1x1NzgxNlx1OGY2Y1x1NjRiMFx1''@;'; put 'put ''OGQ1YVx1N2JjNlx1Njg2OVx1NWU4NFx1ODhjNVx1NTk4Nlx1NjQ5ZVx1NThlZVx1NzJiNlx1NjkwZVx1OTUyNVx1OGZmZFx1OGQ1OFx1NTc2MFx1N2YwMFx1OGMwNlx1NTFjNlx1NjM0OVx1NjJkOVx1NTM1M1x1Njg0Y1x1NzQyMlx1ODMwMVx1OTE0Y1x1NTU0NFx1Nzc0MFx1NzA3Y1x1NmQ0''@;'; put 'put ''YVx1NTE3OVx1NTRhOFx1OGQ0NFx1NTlmZlx1NmVjYlx1NmRjNFx1NWI1Y1x1N2QyYlx1NGVkNFx1N2M3ZFx1NmVkM1x1NWI1MFx1ODFlYVx1NmUwZFx1NWI1N1x1OWIwM1x1NjhkNVx1OGUyYVx1NWI5N1x1N2VmY1x1NjAzYlx1N2ViNVx1OTBiOVx1OGQ3MFx1NTk0Zlx1NjNjZFx1NzlkZlx1''@;'; put 'put ''OGRiM1x1NTM1Mlx1NjVjZlx1Nzk1Nlx1OGJjNVx1OTYzYlx1N2VjNFx1OTRiYlx1N2U4Mlx1NTYzNFx1OTE4OVx1NjcwMFx1N2Y2YVx1NWMwYVx1OTA3NVx1NjYyOFx1NWRlNlx1NGY1MFx1NjdkZVx1NTA1YVx1NGY1Y1x1NTc1MFx1NWVhN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIxNV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjE1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIxNV1bZ11dPTU1MDQwK2csX1s1NTA0MCtnXT15WzIxNV1bZ10pO2Zvcih5WzIxNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGMzOFx1OGMzOVx1OGMzYVx1OGMzYlx1OGMzY1x1OGMzZFx1OGMzZVx1OGMzZlx1OGM0MFx1OGM0Mlx1OGM0M1x1OGM0NFx1OGM0NVx1OGM0OFx1OGM0YVx1OGM0Ylx1OGM0ZFx1OGM0ZVx1OGM0Zlx1OGM1MFx1OGM1MVx1OGM1Mlx1OGM1M1x1OGM1''@;'; put 'put ''NFx1OGM1Nlx1OGM1N1x1OGM1OFx1OGM1OVx1OGM1Ylx1OGM1Y1x1OGM1ZFx1OGM1ZVx1OGM1Zlx1OGM2MFx1OGM2M1x1OGM2NFx1OGM2NVx1OGM2Nlx1OGM2N1x1OGM2OFx1OGM2OVx1OGM2Y1x1OGM2ZFx1OGM2ZVx1OGM2Zlx1OGM3MFx1OGM3MVx1OGM3Mlx1OGM3NFx1OGM3NVx1OGM3Nlx1''@;'; put 'put ''OGM3N1x1OGM3Ylx1OGM3Y1x1OGM3ZFx1OGM3ZVx1OGM3Zlx1OGM4MFx1OGM4MVx1OGM4M1x1OGM4NFx1OGM4Nlx1OGM4N1x1ZmZmZFx1OGM4OFx1OGM4Ylx1OGM4ZFx1OGM4ZVx1OGM4Zlx1OGM5MFx1OGM5MVx1OGM5Mlx1OGM5M1x1OGM5NVx1OGM5Nlx1OGM5N1x1OGM5OVx1OGM5YVx1OGM5''@;'; put 'put ''Ylx1OGM5Y1x1OGM5ZFx1OGM5ZVx1OGM5Zlx1OGNhMFx1OGNhMVx1OGNhMlx1OGNhM1x1OGNhNFx1OGNhNVx1OGNhNlx1OGNhN1x1OGNhOFx1OGNhOVx1OGNhYVx1OGNhYlx1OGNhY1x1OGNhZFx1NGU4ZFx1NGUwY1x1NTE0MFx1NGUxMFx1NWVmZlx1NTM0NVx1NGUxNVx1NGU5OFx1NGUxZVx1''@;'; put 'put ''OWIzMlx1NWI2Y1x1NTY2OVx1NGUyOFx1NzliYVx1NGUzZlx1NTMxNVx1NGU0N1x1NTkyZFx1NzIzYlx1NTM2ZVx1NmMxMFx1NTZkZlx1ODBlNFx1OTk5N1x1NmJkM1x1Nzc3ZVx1OWYxN1x1NGUzNlx1NGU5Zlx1OWYxMFx1NGU1Y1x1NGU2OVx1NGU5M1x1ODI4OFx1NWI1Ylx1NTU2Y1x1NTYw''@;'; put 'put ''Zlx1NGVjNFx1NTM4ZFx1NTM5ZFx1NTNhM1x1NTNhNVx1NTNhZVx1OTc2NVx1OGQ1ZFx1NTMxYVx1NTNmNVx1NTMyNlx1NTMyZVx1NTMzZVx1OGQ1Y1x1NTM2Nlx1NTM2M1x1NTIwMlx1NTIwOFx1NTIwZVx1NTIyZFx1NTIzM1x1NTIzZlx1NTI0MFx1NTI0Y1x1NTI1ZVx1NTI2MVx1NTI1Y1x1''@;'; put 'put ''ODRhZlx1NTI3ZFx1NTI4Mlx1NTI4MVx1NTI5MFx1NTI5M1x1NTE4Mlx1N2Y1NFx1NGViYlx1NGVjM1x1NGVjOVx1NGVjMlx1NGVlOFx1NGVlMVx1NGVlYlx1NGVkZVx1NGYxYlx1NGVmM1x1NGYyMlx1NGY2NFx1NGVmNVx1NGYyNVx1NGYyN1x1NGYwOVx1NGYyYlx1NGY1ZVx1NGY2N1x1NjUz''@;'; put 'put ''OFx1NGY1YVx1NGY1ZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIxNl0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjE2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIxNl1bZ11dPTU1Mjk2K2csX1s1NTI5NitnXT15WzIxNl1bZ10pO2Zvcih5WzIxN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGNhZVx1OGNhZlx1OGNiMFx1OGNiMVx1OGNiMlx1OGNiM1x1OGNiNFx1OGNiNVx1OGNiNlx1OGNiN1x1OGNiOFx1OGNiOVx1OGNiYVx1OGNiYlx1OGNiY1x1OGNiZFx1OGNiZVx1OGNiZlx1OGNjMFx1OGNjMVx1OGNjMlx1OGNj''@;'; put 'put ''M1x1OGNjNFx1OGNjNVx1OGNjNlx1OGNjN1x1OGNjOFx1OGNjOVx1OGNjYVx1OGNjYlx1OGNjY1x1OGNjZFx1OGNjZVx1OGNjZlx1OGNkMFx1OGNkMVx1OGNkMlx1OGNkM1x1OGNkNFx1OGNkNVx1OGNkNlx1OGNkN1x1OGNkOFx1OGNkOVx1OGNkYVx1OGNkYlx1OGNkY1x1OGNkZFx1OGNkZVx1''@;'; put 'put ''OGNkZlx1OGNlMFx1OGNlMVx1OGNlMlx1OGNlM1x1OGNlNFx1OGNlNVx1OGNlNlx1OGNlN1x1OGNlOFx1OGNlOVx1OGNlYVx1OGNlYlx1OGNlY1x1ZmZmZFx1OGNlZFx1OGNlZVx1OGNlZlx1OGNmMFx1OGNmMVx1OGNmMlx1OGNmM1x1OGNmNFx1OGNmNVx1OGNmNlx1OGNmN1x1OGNmOFx1OGNm''@;'; put 'put ''OVx1OGNmYVx1OGNmYlx1OGNmY1x1OGNmZFx1OGNmZVx1OGNmZlx1OGQwMFx1OGQwMVx1OGQwMlx1OGQwM1x1OGQwNFx1OGQwNVx1OGQwNlx1OGQwN1x1OGQwOFx1OGQwOVx1OGQwYVx1OGQwYlx1OGQwY1x1OGQwZFx1NGY1Zlx1NGY1N1x1NGYzMlx1NGYzZFx1NGY3Nlx1NGY3NFx1NGY5MVx1''@;'; put 'put ''NGY4OVx1NGY4M1x1NGY4Zlx1NGY3ZVx1NGY3Ylx1NGZhYVx1NGY3Y1x1NGZhY1x1NGY5NFx1NGZlNlx1NGZlOFx1NGZlYVx1NGZjNVx1NGZkYVx1NGZlM1x1NGZkY1x1NGZkMVx1NGZkZlx1NGZmOFx1NTAyOVx1NTA0Y1x1NGZmM1x1NTAyY1x1NTAwZlx1NTAyZVx1NTAyZFx1NGZmZVx1NTAx''@;'; put 'put ''Y1x1NTAwY1x1NTAyNVx1NTAyOFx1NTA3ZVx1NTA0M1x1NTA1NVx1NTA0OFx1NTA0ZVx1NTA2Y1x1NTA3Ylx1NTBhNVx1NTBhN1x1NTBhOVx1NTBiYVx1NTBkNlx1NTEwNlx1NTBlZFx1NTBlY1x1NTBlNlx1NTBlZVx1NTEwN1x1NTEwYlx1NGVkZFx1NmMzZFx1NGY1OFx1NGY2NVx1NGZjZVx1''@;'; put 'put ''OWZhMFx1NmM0Nlx1N2M3NFx1NTE2ZVx1NWRmZFx1OWVjOVx1OTk5OFx1NTE4MVx1NTkxNFx1NTJmOVx1NTMwZFx1OGEwN1x1NTMxMFx1NTFlYlx1NTkxOVx1NTE1NVx1NGVhMFx1NTE1Nlx1NGViM1x1ODg2ZVx1ODhhNFx1NGViNVx1ODExNFx1ODhkMlx1Nzk4MFx1NWIzNFx1ODgwM1x1N2Zi''@;'; put 'put ''OFx1NTFhYlx1NTFiMVx1NTFiZFx1NTFiY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIxN10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjE3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIxN11bZ11dPTU1NTUyK2csX1s1NTU1MitnXT15WzIxN11bZ10pO2Zvcih5WzIxOF09Ilx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGQwZVx1OGQwZlx1OGQxMFx1OGQxMVx1OGQxMlx1OGQxM1x1OGQxNFx1OGQxNVx1OGQxNlx1OGQxN1x1OGQxOFx1OGQxOVx1OGQxYVx1OGQxYlx1OGQxY1x1OGQyMFx1OGQ1MVx1OGQ1Mlx1OGQ1N1x1OGQ1''@;'; put 'put ''Zlx1OGQ2NVx1OGQ2OFx1OGQ2OVx1OGQ2YVx1OGQ2Y1x1OGQ2ZVx1OGQ2Zlx1OGQ3MVx1OGQ3Mlx1OGQ3OFx1OGQ3OVx1OGQ3YVx1OGQ3Ylx1OGQ3Y1x1OGQ3ZFx1OGQ3ZVx1OGQ3Zlx1OGQ4MFx1OGQ4Mlx1OGQ4M1x1OGQ4Nlx1OGQ4N1x1OGQ4OFx1OGQ4OVx1OGQ4Y1x1OGQ4ZFx1OGQ4ZVx1''@;'; put 'put ''OGQ4Zlx1OGQ5MFx1OGQ5Mlx1OGQ5M1x1OGQ5NVx1OGQ5Nlx1OGQ5N1x1OGQ5OFx1OGQ5OVx1OGQ5YVx1OGQ5Ylx1OGQ5Y1x1OGQ5ZFx1OGQ5ZVx1OGRhMFx1OGRhMVx1ZmZmZFx1OGRhMlx1OGRhNFx1OGRhNVx1OGRhNlx1OGRhN1x1OGRhOFx1OGRhOVx1OGRhYVx1OGRhYlx1OGRhY1x1OGRh''@;'; put 'put ''ZFx1OGRhZVx1OGRhZlx1OGRiMFx1OGRiMlx1OGRiNlx1OGRiN1x1OGRiOVx1OGRiYlx1OGRiZFx1OGRjMFx1OGRjMVx1OGRjMlx1OGRjNVx1OGRjN1x1OGRjOFx1OGRjOVx1OGRjYVx1OGRjZFx1OGRkMFx1OGRkMlx1OGRkM1x1OGRkNFx1NTFjN1x1NTE5Nlx1NTFhMlx1NTFhNVx1OGJhMFx1''@;'; put 'put ''OGJhNlx1OGJhN1x1OGJhYVx1OGJiNFx1OGJiNVx1OGJiN1x1OGJjMlx1OGJjM1x1OGJjYlx1OGJjZlx1OGJjZVx1OGJkMlx1OGJkM1x1OGJkNFx1OGJkNlx1OGJkOFx1OGJkOVx1OGJkY1x1OGJkZlx1OGJlMFx1OGJlNFx1OGJlOFx1OGJlOVx1OGJlZVx1OGJmMFx1OGJmM1x1OGJmNlx1OGJm''@;'; put 'put ''OVx1OGJmY1x1OGJmZlx1OGMwMFx1OGMwMlx1OGMwNFx1OGMwN1x1OGMwY1x1OGMwZlx1OGMxMVx1OGMxMlx1OGMxNFx1OGMxNVx1OGMxNlx1OGMxOVx1OGMxYlx1OGMxOFx1OGMxZFx1OGMxZlx1OGMyMFx1OGMyMVx1OGMyNVx1OGMyN1x1OGMyYVx1OGMyYlx1OGMyZVx1OGMyZlx1OGMzMlx1''@;'; put 'put ''OGMzM1x1OGMzNVx1OGMzNlx1NTM2OVx1NTM3YVx1OTYxZFx1OTYyMlx1OTYyMVx1OTYzMVx1OTYyYVx1OTYzZFx1OTYzY1x1OTY0Mlx1OTY0OVx1OTY1NFx1OTY1Zlx1OTY2N1x1OTY2Y1x1OTY3Mlx1OTY3NFx1OTY4OFx1OTY4ZFx1OTY5N1x1OTZiMFx1OTA5N1x1OTA5Ylx1OTA5ZFx1OTA5''@;'; put 'put ''OVx1OTBhY1x1OTBhMVx1OTBiNFx1OTBiM1x1OTBiNlx1OTBiYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIxOF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjE4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIxOF1bZ11dPTU1ODA4K2csX1s1NTgwOCtnXT15WzIxOF1bZ10pO2Zvcih5WzIx''@;'; put 'put ''OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGRkNVx1OGRkOFx1OGRkOVx1OGRkY1x1OGRlMFx1OGRlMVx1OGRlMlx1OGRlNVx1OGRlNlx1OGRlN1x1OGRlOVx1OGRlZFx1OGRlZVx1OGRmMFx1OGRmMVx1OGRmMlx1OGRmNFx1OGRm''@;'; put 'put ''Nlx1OGRmY1x1OGRmZVx1OGRmZlx1OGUwMFx1OGUwMVx1OGUwMlx1OGUwM1x1OGUwNFx1OGUwNlx1OGUwN1x1OGUwOFx1OGUwYlx1OGUwZFx1OGUwZVx1OGUxMFx1OGUxMVx1OGUxMlx1OGUxM1x1OGUxNVx1OGUxNlx1OGUxN1x1OGUxOFx1OGUxOVx1OGUxYVx1OGUxYlx1OGUxY1x1OGUyMFx1''@;'; put 'put ''OGUyMVx1OGUyNFx1OGUyNVx1OGUyNlx1OGUyN1x1OGUyOFx1OGUyYlx1OGUyZFx1OGUzMFx1OGUzMlx1OGUzM1x1OGUzNFx1OGUzNlx1OGUzN1x1OGUzOFx1OGUzYlx1OGUzY1x1OGUzZVx1ZmZmZFx1OGUzZlx1OGU0M1x1OGU0NVx1OGU0Nlx1OGU0Y1x1OGU0ZFx1OGU0ZVx1OGU0Zlx1OGU1''@;'; put 'put ''MFx1OGU1M1x1OGU1NFx1OGU1NVx1OGU1Nlx1OGU1N1x1OGU1OFx1OGU1YVx1OGU1Ylx1OGU1Y1x1OGU1ZFx1OGU1ZVx1OGU1Zlx1OGU2MFx1OGU2MVx1OGU2Mlx1OGU2M1x1OGU2NFx1OGU2NVx1OGU2N1x1OGU2OFx1OGU2YVx1OGU2Ylx1OGU2ZVx1OGU3MVx1OTBiOFx1OTBiMFx1OTBjZlx1''@;'; put 'put ''OTBjNVx1OTBiZVx1OTBkMFx1OTBjNFx1OTBjN1x1OTBkM1x1OTBlNlx1OTBlMlx1OTBkY1x1OTBkN1x1OTBkYlx1OTBlYlx1OTBlZlx1OTBmZVx1OTEwNFx1OTEyMlx1OTExZVx1OTEyM1x1OTEzMVx1OTEyZlx1OTEzOVx1OTE0M1x1OTE0Nlx1NTIwZFx1NTk0Mlx1NTJhMlx1NTJhY1x1NTJh''@;'; put 'put ''ZFx1NTJiZVx1NTRmZlx1NTJkMFx1NTJkNlx1NTJmMFx1NTNkZlx1NzFlZVx1NzdjZFx1NWVmNFx1NTFmNVx1NTFmY1x1OWIyZlx1NTNiNlx1NWYwMVx1NzU1YVx1NWRlZlx1NTc0Y1x1NTdhOVx1NTdhMVx1NTg3ZVx1NThiY1x1NThjNVx1NThkMVx1NTcyOVx1NTcyY1x1NTcyYVx1NTczM1x1''@;'; put 'put ''NTczOVx1NTcyZVx1NTcyZlx1NTc1Y1x1NTczYlx1NTc0Mlx1NTc2OVx1NTc4NVx1NTc2Ylx1NTc4Nlx1NTc3Y1x1NTc3Ylx1NTc2OFx1NTc2ZFx1NTc3Nlx1NTc3M1x1NTdhZFx1NTdhNFx1NTc4Y1x1NTdiMlx1NTdjZlx1NTdhN1x1NTdiNFx1NTc5M1x1NTdhMFx1NTdkNVx1NTdkOFx1NTdk''@;'; put 'put ''YVx1NTdkOVx1NTdkMlx1NTdiOFx1NTdmNFx1NTdlZlx1NTdmOFx1NTdlNFx1NTdkZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIxOV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjE5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIxOV1bZ11dPTU2MDY0K2csX1s1NjA2NCtnXT15WzIxOV1b''@;'; put 'put ''Z10pO2Zvcih5WzIyMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGU3M1x1OGU3NVx1OGU3N1x1OGU3OFx1OGU3OVx1OGU3YVx1OGU3Ylx1OGU3ZFx1OGU3ZVx1OGU4MFx1OGU4Mlx1OGU4M1x1OGU4NFx1OGU4Nlx1OGU4OFx1OGU4''@;'; put 'put ''OVx1OGU4YVx1OGU4Ylx1OGU4Y1x1OGU4ZFx1OGU4ZVx1OGU5MVx1OGU5Mlx1OGU5M1x1OGU5NVx1OGU5Nlx1OGU5N1x1OGU5OFx1OGU5OVx1OGU5YVx1OGU5Ylx1OGU5ZFx1OGU5Zlx1OGVhMFx1OGVhMVx1OGVhMlx1OGVhM1x1OGVhNFx1OGVhNVx1OGVhNlx1OGVhN1x1OGVhOFx1OGVhOVx1''@;'; put 'put ''OGVhYVx1OGVhZFx1OGVhZVx1OGViMFx1OGViMVx1OGViM1x1OGViNFx1OGViNVx1OGViNlx1OGViN1x1OGViOFx1OGViOVx1OGViYlx1OGViY1x1OGViZFx1OGViZVx1OGViZlx1OGVjMFx1OGVjMVx1OGVjMlx1ZmZmZFx1OGVjM1x1OGVjNFx1OGVjNVx1OGVjNlx1OGVjN1x1OGVjOFx1OGVj''@;'; put 'put ''OVx1OGVjYVx1OGVjYlx1OGVjY1x1OGVjZFx1OGVjZlx1OGVkMFx1OGVkMVx1OGVkMlx1OGVkM1x1OGVkNFx1OGVkNVx1OGVkNlx1OGVkN1x1OGVkOFx1OGVkOVx1OGVkYVx1OGVkYlx1OGVkY1x1OGVkZFx1OGVkZVx1OGVkZlx1OGVlMFx1OGVlMVx1OGVlMlx1OGVlM1x1OGVlNFx1NTgwYlx1''@;'; put 'put ''NTgwZFx1NTdmZFx1NTdlZFx1NTgwMFx1NTgxZVx1NTgxOVx1NTg0NFx1NTgyMFx1NTg2NVx1NTg2Y1x1NTg4MVx1NTg4OVx1NTg5YVx1NTg4MFx1OTlhOFx1OWYxOVx1NjFmZlx1ODI3OVx1ODI3ZFx1ODI3Zlx1ODI4Zlx1ODI4YVx1ODJhOFx1ODI4NFx1ODI4ZVx1ODI5MVx1ODI5N1x1ODI5''@;'; put 'put ''OVx1ODJhYlx1ODJiOFx1ODJiZVx1ODJiMFx1ODJjOFx1ODJjYVx1ODJlM1x1ODI5OFx1ODJiN1x1ODJhZVx1ODJjYlx1ODJjY1x1ODJjMVx1ODJhOVx1ODJiNFx1ODJhMVx1ODJhYVx1ODI5Zlx1ODJjNFx1ODJjZVx1ODJhNFx1ODJlMVx1ODMwOVx1ODJmN1x1ODJlNFx1ODMwZlx1ODMwN1x1''@;'; put 'put ''ODJkY1x1ODJmNFx1ODJkMlx1ODJkOFx1ODMwY1x1ODJmYlx1ODJkM1x1ODMxMVx1ODMxYVx1ODMwNlx1ODMxNFx1ODMxNVx1ODJlMFx1ODJkNVx1ODMxY1x1ODM1MVx1ODM1Ylx1ODM1Y1x1ODMwOFx1ODM5Mlx1ODMzY1x1ODMzNFx1ODMzMVx1ODM5Ylx1ODM1ZVx1ODMyZlx1ODM0Zlx1ODM0''@;'; put 'put ''N1x1ODM0M1x1ODM1Zlx1ODM0MFx1ODMxN1x1ODM2MFx1ODMyZFx1ODMzYVx1ODMzM1x1ODM2Nlx1ODM2NVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIyMF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjIwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIyMF1bZ11dPTU2MzIwK2csX1s1NjMy''@;'; put 'put ''MCtnXT15WzIyMF1bZ10pO2Zvcih5WzIyMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGVlNVx1OGVlNlx1OGVlN1x1OGVlOFx1OGVlOVx1OGVlYVx1OGVlYlx1OGVlY1x1OGVlZFx1OGVlZVx1OGVlZlx1OGVmMFx1OGVmMVx1OGVm''@;'; put 'put ''Mlx1OGVmM1x1OGVmNFx1OGVmNVx1OGVmNlx1OGVmN1x1OGVmOFx1OGVmOVx1OGVmYVx1OGVmYlx1OGVmY1x1OGVmZFx1OGVmZVx1OGVmZlx1OGYwMFx1OGYwMVx1OGYwMlx1OGYwM1x1OGYwNFx1OGYwNVx1OGYwNlx1OGYwN1x1OGYwOFx1OGYwOVx1OGYwYVx1OGYwYlx1OGYwY1x1OGYwZFx1''@;'; put 'put ''OGYwZVx1OGYwZlx1OGYxMFx1OGYxMVx1OGYxMlx1OGYxM1x1OGYxNFx1OGYxNVx1OGYxNlx1OGYxN1x1OGYxOFx1OGYxOVx1OGYxYVx1OGYxYlx1OGYxY1x1OGYxZFx1OGYxZVx1OGYxZlx1OGYyMFx1OGYyMVx1OGYyMlx1OGYyM1x1ZmZmZFx1OGYyNFx1OGYyNVx1OGYyNlx1OGYyN1x1OGYy''@;'; put 'put ''OFx1OGYyOVx1OGYyYVx1OGYyYlx1OGYyY1x1OGYyZFx1OGYyZVx1OGYyZlx1OGYzMFx1OGYzMVx1OGYzMlx1OGYzM1x1OGYzNFx1OGYzNVx1OGYzNlx1OGYzN1x1OGYzOFx1OGYzOVx1OGYzYVx1OGYzYlx1OGYzY1x1OGYzZFx1OGYzZVx1OGYzZlx1OGY0MFx1OGY0MVx1OGY0Mlx1OGY0M1x1''@;'; put 'put ''OGY0NFx1ODM2OFx1ODMxYlx1ODM2OVx1ODM2Y1x1ODM2YVx1ODM2ZFx1ODM2ZVx1ODNiMFx1ODM3OFx1ODNiM1x1ODNiNFx1ODNhMFx1ODNhYVx1ODM5M1x1ODM5Y1x1ODM4NVx1ODM3Y1x1ODNiNlx1ODNhOVx1ODM3ZFx1ODNiOFx1ODM3Ylx1ODM5OFx1ODM5ZVx1ODNhOFx1ODNiYVx1ODNi''@;'; put 'put ''Y1x1ODNjMVx1ODQwMVx1ODNlNVx1ODNkOFx1NTgwN1x1ODQxOFx1ODQwYlx1ODNkZFx1ODNmZFx1ODNkNlx1ODQxY1x1ODQzOFx1ODQxMVx1ODQwNlx1ODNkNFx1ODNkZlx1ODQwZlx1ODQwM1x1ODNmOFx1ODNmOVx1ODNlYVx1ODNjNVx1ODNjMFx1ODQyNlx1ODNmMFx1ODNlMVx1ODQ1Y1x1''@;'; put 'put ''ODQ1MVx1ODQ1YVx1ODQ1OVx1ODQ3M1x1ODQ4N1x1ODQ4OFx1ODQ3YVx1ODQ4OVx1ODQ3OFx1ODQzY1x1ODQ0Nlx1ODQ2OVx1ODQ3Nlx1ODQ4Y1x1ODQ4ZVx1ODQzMVx1ODQ2ZFx1ODRjMVx1ODRjZFx1ODRkMFx1ODRlNlx1ODRiZFx1ODRkM1x1ODRjYVx1ODRiZlx1ODRiYVx1ODRlMFx1ODRh''@;'; put 'put ''MVx1ODRiOVx1ODRiNFx1ODQ5N1x1ODRlNVx1ODRlM1x1ODUwY1x1NzUwZFx1ODUzOFx1ODRmMFx1ODUzOVx1ODUxZlx1ODUzYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIyMV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjIxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIyMV1bZ11dPTU2''@;'; put 'put ''NTc2K2csX1s1NjU3NitnXT15WzIyMV1bZ10pO2Zvcih5WzIyMl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OGY0NVx1OGY0Nlx1OGY0N1x1OGY0OFx1OGY0OVx1OGY0YVx1OGY0Ylx1OGY0Y1x1OGY0ZFx1OGY0ZVx1OGY0Zlx1OGY1''@;'; put 'put ''MFx1OGY1MVx1OGY1Mlx1OGY1M1x1OGY1NFx1OGY1NVx1OGY1Nlx1OGY1N1x1OGY1OFx1OGY1OVx1OGY1YVx1OGY1Ylx1OGY1Y1x1OGY1ZFx1OGY1ZVx1OGY1Zlx1OGY2MFx1OGY2MVx1OGY2Mlx1OGY2M1x1OGY2NFx1OGY2NVx1OGY2YVx1OGY4MFx1OGY4Y1x1OGY5Mlx1OGY5ZFx1OGZhMFx1''@;'; put 'put ''OGZhMVx1OGZhMlx1OGZhNFx1OGZhNVx1OGZhNlx1OGZhN1x1OGZhYVx1OGZhY1x1OGZhZFx1OGZhZVx1OGZhZlx1OGZiMlx1OGZiM1x1OGZiNFx1OGZiNVx1OGZiN1x1OGZiOFx1OGZiYVx1OGZiYlx1OGZiY1x1OGZiZlx1OGZjMFx1OGZjM1x1OGZjNlx1ZmZmZFx1OGZjOVx1OGZjYVx1OGZj''@;'; put 'put ''Ylx1OGZjY1x1OGZjZFx1OGZjZlx1OGZkMlx1OGZkNlx1OGZkN1x1OGZkYVx1OGZlMFx1OGZlMVx1OGZlM1x1OGZlN1x1OGZlY1x1OGZlZlx1OGZmMVx1OGZmMlx1OGZmNFx1OGZmNVx1OGZmNlx1OGZmYVx1OGZmYlx1OGZmY1x1OGZmZVx1OGZmZlx1OTAwN1x1OTAwOFx1OTAwY1x1OTAwZVx1''@;'; put 'put ''OTAxM1x1OTAxNVx1OTAxOFx1ODU1Nlx1ODUzYlx1ODRmZlx1ODRmY1x1ODU1OVx1ODU0OFx1ODU2OFx1ODU2NFx1ODU1ZVx1ODU3YVx1NzdhMlx1ODU0M1x1ODU3Mlx1ODU3Ylx1ODVhNFx1ODVhOFx1ODU4N1x1ODU4Zlx1ODU3OVx1ODVhZVx1ODU5Y1x1ODU4NVx1ODViOVx1ODViN1x1ODVi''@;'; put 'put ''MFx1ODVkM1x1ODVjMVx1ODVkY1x1ODVmZlx1ODYyN1x1ODYwNVx1ODYyOVx1ODYxNlx1ODYzY1x1NWVmZVx1NWYwOFx1NTkzY1x1NTk0MVx1ODAzN1x1NTk1NVx1NTk1YVx1NTk1OFx1NTMwZlx1NWMyMlx1NWMyNVx1NWMyY1x1NWMzNFx1NjI0Y1x1NjI2YVx1NjI5Zlx1NjJiYlx1NjJjYVx1''@;'; put 'put ''NjJkYVx1NjJkN1x1NjJlZVx1NjMyMlx1NjJmNlx1NjMzOVx1NjM0Ylx1NjM0M1x1NjNhZFx1NjNmNlx1NjM3MVx1NjM3YVx1NjM4ZVx1NjNiNFx1NjM2ZFx1NjNhY1x1NjM4YVx1NjM2OVx1NjNhZVx1NjNiY1x1NjNmMlx1NjNmOFx1NjNlMFx1NjNmZlx1NjNjNFx1NjNkZVx1NjNjZVx1NjQ1''@;'; put 'put ''Mlx1NjNjNlx1NjNiZVx1NjQ0NVx1NjQ0MVx1NjQwYlx1NjQxYlx1NjQyMFx1NjQwY1x1NjQyNlx1NjQyMVx1NjQ1ZVx1NjQ4NFx1NjQ2ZFx1NjQ5Nlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIyMl0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjIyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5''@;'; put 'put ''WzIyMl1bZ11dPTU2ODMyK2csX1s1NjgzMitnXT15WzIyMl1bZ10pO2Zvcih5WzIyM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTAxOVx1OTAxY1x1OTAyM1x1OTAyNFx1OTAyNVx1OTAyN1x1OTAyOFx1OTAyOVx1OTAyYVx1OTAy''@;'; put 'put ''Ylx1OTAyY1x1OTAzMFx1OTAzMVx1OTAzMlx1OTAzM1x1OTAzNFx1OTAzN1x1OTAzOVx1OTAzYVx1OTAzZFx1OTAzZlx1OTA0MFx1OTA0M1x1OTA0NVx1OTA0Nlx1OTA0OFx1OTA0OVx1OTA0YVx1OTA0Ylx1OTA0Y1x1OTA0ZVx1OTA1NFx1OTA1NVx1OTA1Nlx1OTA1OVx1OTA1YVx1OTA1Y1x1''@;'; put 'put ''OTA1ZFx1OTA1ZVx1OTA1Zlx1OTA2MFx1OTA2MVx1OTA2NFx1OTA2Nlx1OTA2N1x1OTA2OVx1OTA2YVx1OTA2Ylx1OTA2Y1x1OTA2Zlx1OTA3MFx1OTA3MVx1OTA3Mlx1OTA3M1x1OTA3Nlx1OTA3N1x1OTA3OFx1OTA3OVx1OTA3YVx1OTA3Ylx1OTA3Y1x1OTA3ZVx1OTA4MVx1ZmZmZFx1OTA4''@;'; put 'put ''NFx1OTA4NVx1OTA4Nlx1OTA4N1x1OTA4OVx1OTA4YVx1OTA4Y1x1OTA4ZFx1OTA4ZVx1OTA4Zlx1OTA5MFx1OTA5Mlx1OTA5NFx1OTA5Nlx1OTA5OFx1OTA5YVx1OTA5Y1x1OTA5ZVx1OTA5Zlx1OTBhMFx1OTBhNFx1OTBhNVx1OTBhN1x1OTBhOFx1OTBhOVx1OTBhYlx1OTBhZFx1OTBiMlx1''@;'; put 'put ''OTBiN1x1OTBiY1x1OTBiZFx1OTBiZlx1OTBjMFx1NjQ3YVx1NjRiN1x1NjRiOFx1NjQ5OVx1NjRiYVx1NjRjMFx1NjRkMFx1NjRkN1x1NjRlNFx1NjRlMlx1NjUwOVx1NjUyNVx1NjUyZVx1NWYwYlx1NWZkMlx1NzUxOVx1NWYxMVx1NTM1Zlx1NTNmMVx1NTNmZFx1NTNlOVx1NTNlOFx1NTNm''@;'; put 'put ''Ylx1NTQxMlx1NTQxNlx1NTQwNlx1NTQ0Ylx1NTQ1Mlx1NTQ1M1x1NTQ1NFx1NTQ1Nlx1NTQ0M1x1NTQyMVx1NTQ1N1x1NTQ1OVx1NTQyM1x1NTQzMlx1NTQ4Mlx1NTQ5NFx1NTQ3N1x1NTQ3MVx1NTQ2NFx1NTQ5YVx1NTQ5Ylx1NTQ4NFx1NTQ3Nlx1NTQ2Nlx1NTQ5ZFx1NTRkMFx1NTRhZFx1''@;'; put 'put ''NTRjMlx1NTRiNFx1NTRkMlx1NTRhN1x1NTRhNlx1NTRkM1x1NTRkNFx1NTQ3Mlx1NTRhM1x1NTRkNVx1NTRiYlx1NTRiZlx1NTRjY1x1NTRkOVx1NTRkYVx1NTRkY1x1NTRhOVx1NTRhYVx1NTRhNFx1NTRkZFx1NTRjZlx1NTRkZVx1NTUxYlx1NTRlN1x1NTUyMFx1NTRmZFx1NTUxNFx1NTRm''@;'; put 'put ''M1x1NTUyMlx1NTUyM1x1NTUwZlx1NTUxMVx1NTUyN1x1NTUyYVx1NTU2N1x1NTU4Zlx1NTViNVx1NTU0OVx1NTU2ZFx1NTU0MVx1NTU1NVx1NTUzZlx1NTU1MFx1NTUzY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIyM10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjIzXVtnXS5jaGFyQ29k''@;'; put 'put ''ZUF0KDApJiYoSVt5WzIyM11bZ11dPTU3MDg4K2csX1s1NzA4OCtnXT15WzIyM11bZ10pO2Zvcih5WzIyNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTBjMlx1OTBjM1x1OTBjNlx1OTBjOFx1OTBjOVx1OTBjYlx1OTBjY1x1OTBj''@;'; put 'put ''ZFx1OTBkMlx1OTBkNFx1OTBkNVx1OTBkNlx1OTBkOFx1OTBkOVx1OTBkYVx1OTBkZVx1OTBkZlx1OTBlMFx1OTBlM1x1OTBlNFx1OTBlNVx1OTBlOVx1OTBlYVx1OTBlY1x1OTBlZVx1OTBmMFx1OTBmMVx1OTBmMlx1OTBmM1x1OTBmNVx1OTBmNlx1OTBmN1x1OTBmOVx1OTBmYVx1OTBmYlx1''@;'; put 'put ''OTBmY1x1OTBmZlx1OTEwMFx1OTEwMVx1OTEwM1x1OTEwNVx1OTEwNlx1OTEwN1x1OTEwOFx1OTEwOVx1OTEwYVx1OTEwYlx1OTEwY1x1OTEwZFx1OTEwZVx1OTEwZlx1OTExMFx1OTExMVx1OTExMlx1OTExM1x1OTExNFx1OTExNVx1OTExNlx1OTExN1x1OTExOFx1OTExYVx1OTExYlx1OTEx''@;'; put 'put ''Y1x1ZmZmZFx1OTExZFx1OTExZlx1OTEyMFx1OTEyMVx1OTEyNFx1OTEyNVx1OTEyNlx1OTEyN1x1OTEyOFx1OTEyOVx1OTEyYVx1OTEyYlx1OTEyY1x1OTEyZFx1OTEyZVx1OTEzMFx1OTEzMlx1OTEzM1x1OTEzNFx1OTEzNVx1OTEzNlx1OTEzN1x1OTEzOFx1OTEzYVx1OTEzYlx1OTEzY1x1''@;'; put 'put ''OTEzZFx1OTEzZVx1OTEzZlx1OTE0MFx1OTE0MVx1OTE0Mlx1OTE0NFx1NTUzN1x1NTU1Nlx1NTU3NVx1NTU3Nlx1NTU3N1x1NTUzM1x1NTUzMFx1NTU1Y1x1NTU4Ylx1NTVkMlx1NTU4M1x1NTViMVx1NTViOVx1NTU4OFx1NTU4MVx1NTU5Zlx1NTU3ZVx1NTVkNlx1NTU5MVx1NTU3Ylx1NTVk''@;'; put 'put ''Zlx1NTViZFx1NTViZVx1NTU5NFx1NTU5OVx1NTVlYVx1NTVmN1x1NTVjOVx1NTYxZlx1NTVkMVx1NTVlYlx1NTVlY1x1NTVkNFx1NTVlNlx1NTVkZFx1NTVjNFx1NTVlZlx1NTVlNVx1NTVmMlx1NTVmM1x1NTVjY1x1NTVjZFx1NTVlOFx1NTVmNVx1NTVlNFx1OGY5NFx1NTYxZVx1NTYwOFx1''@;'; put 'put ''NTYwY1x1NTYwMVx1NTYyNFx1NTYyM1x1NTVmZVx1NTYwMFx1NTYyN1x1NTYyZFx1NTY1OFx1NTYzOVx1NTY1N1x1NTYyY1x1NTY0ZFx1NTY2Mlx1NTY1OVx1NTY1Y1x1NTY0Y1x1NTY1NFx1NTY4Nlx1NTY2NFx1NTY3MVx1NTY2Ylx1NTY3Ylx1NTY3Y1x1NTY4NVx1NTY5M1x1NTZhZlx1NTZk''@;'; put 'put ''NFx1NTZkN1x1NTZkZFx1NTZlMVx1NTZmNVx1NTZlYlx1NTZmOVx1NTZmZlx1NTcwNFx1NTcwYVx1NTcwOVx1NTcxY1x1NWUwZlx1NWUxOVx1NWUxNFx1NWUxMVx1NWUzMVx1NWUzYlx1NWUzY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIyNF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjI0''@;'; put 'put ''XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIyNF1bZ11dPTU3MzQ0K2csX1s1NzM0NCtnXT15WzIyNF1bZ10pO2Zvcih5WzIyNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTE0NVx1OTE0N1x1OTE0OFx1OTE1MVx1OTE1M1x1OTE1''@;'; put 'put ''NFx1OTE1NVx1OTE1Nlx1OTE1OFx1OTE1OVx1OTE1Ylx1OTE1Y1x1OTE1Zlx1OTE2MFx1OTE2Nlx1OTE2N1x1OTE2OFx1OTE2Ylx1OTE2ZFx1OTE3M1x1OTE3YVx1OTE3Ylx1OTE3Y1x1OTE4MFx1OTE4MVx1OTE4Mlx1OTE4M1x1OTE4NFx1OTE4Nlx1OTE4OFx1OTE4YVx1OTE4ZVx1OTE4Zlx1''@;'; put 'put ''OTE5M1x1OTE5NFx1OTE5NVx1OTE5Nlx1OTE5N1x1OTE5OFx1OTE5OVx1OTE5Y1x1OTE5ZFx1OTE5ZVx1OTE5Zlx1OTFhMFx1OTFhMVx1OTFhNFx1OTFhNVx1OTFhNlx1OTFhN1x1OTFhOFx1OTFhOVx1OTFhYlx1OTFhY1x1OTFiMFx1OTFiMVx1OTFiMlx1OTFiM1x1OTFiNlx1OTFiN1x1OTFi''@;'; put 'put ''OFx1OTFiOVx1OTFiYlx1ZmZmZFx1OTFiY1x1OTFiZFx1OTFiZVx1OTFiZlx1OTFjMFx1OTFjMVx1OTFjMlx1OTFjM1x1OTFjNFx1OTFjNVx1OTFjNlx1OTFjOFx1OTFjYlx1OTFkMFx1OTFkMlx1OTFkM1x1OTFkNFx1OTFkNVx1OTFkNlx1OTFkN1x1OTFkOFx1OTFkOVx1OTFkYVx1OTFkYlx1''@;'; put 'put ''OTFkZFx1OTFkZVx1OTFkZlx1OTFlMFx1OTFlMVx1OTFlMlx1OTFlM1x1OTFlNFx1OTFlNVx1NWUzN1x1NWU0NFx1NWU1NFx1NWU1Ylx1NWU1ZVx1NWU2MVx1NWM4Y1x1NWM3YVx1NWM4ZFx1NWM5MFx1NWM5Nlx1NWM4OFx1NWM5OFx1NWM5OVx1NWM5MVx1NWM5YVx1NWM5Y1x1NWNiNVx1NWNh''@;'; put 'put ''Mlx1NWNiZFx1NWNhY1x1NWNhYlx1NWNiMVx1NWNhM1x1NWNjMVx1NWNiN1x1NWNjNFx1NWNkMlx1NWNlNFx1NWNjYlx1NWNlNVx1NWQwMlx1NWQwM1x1NWQyN1x1NWQyNlx1NWQyZVx1NWQyNFx1NWQxZVx1NWQwNlx1NWQxYlx1NWQ1OFx1NWQzZVx1NWQzNFx1NWQzZFx1NWQ2Y1x1NWQ1Ylx1''@;'; put 'put ''NWQ2Zlx1NWQ1ZFx1NWQ2Ylx1NWQ0Ylx1NWQ0YVx1NWQ2OVx1NWQ3NFx1NWQ4Mlx1NWQ5OVx1NWQ5ZFx1OGM3M1x1NWRiN1x1NWRjNVx1NWY3M1x1NWY3N1x1NWY4Mlx1NWY4N1x1NWY4OVx1NWY4Y1x1NWY5NVx1NWY5OVx1NWY5Y1x1NWZhOFx1NWZhZFx1NWZiNVx1NWZiY1x1ODg2Mlx1NWY2''@;'; put 'put ''MVx1NzJhZFx1NzJiMFx1NzJiNFx1NzJiN1x1NzJiOFx1NzJjM1x1NzJjMVx1NzJjZVx1NzJjZFx1NzJkMlx1NzJlOFx1NzJlZlx1NzJlOVx1NzJmMlx1NzJmNFx1NzJmN1x1NzMwMVx1NzJmM1x1NzMwM1x1NzJmYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIyNV0ubGVuZ3RoOysrZyk2''@;'; put 'put ''NTUzMyE9PXlbMjI1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIyNV1bZ11dPTU3NjAwK2csX1s1NzYwMCtnXT15WzIyNV1bZ10pO2Zvcih5WzIyNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTFlNlx1OTFlN1x1OTFlOFx1OTFl''@;'; put 'put ''OVx1OTFlYVx1OTFlYlx1OTFlY1x1OTFlZFx1OTFlZVx1OTFlZlx1OTFmMFx1OTFmMVx1OTFmMlx1OTFmM1x1OTFmNFx1OTFmNVx1OTFmNlx1OTFmN1x1OTFmOFx1OTFmOVx1OTFmYVx1OTFmYlx1OTFmY1x1OTFmZFx1OTFmZVx1OTFmZlx1OTIwMFx1OTIwMVx1OTIwMlx1OTIwM1x1OTIwNFx1''@;'; put 'put ''OTIwNVx1OTIwNlx1OTIwN1x1OTIwOFx1OTIwOVx1OTIwYVx1OTIwYlx1OTIwY1x1OTIwZFx1OTIwZVx1OTIwZlx1OTIxMFx1OTIxMVx1OTIxMlx1OTIxM1x1OTIxNFx1OTIxNVx1OTIxNlx1OTIxN1x1OTIxOFx1OTIxOVx1OTIxYVx1OTIxYlx1OTIxY1x1OTIxZFx1OTIxZVx1OTIxZlx1OTIy''@;'; put 'put ''MFx1OTIyMVx1OTIyMlx1OTIyM1x1OTIyNFx1ZmZmZFx1OTIyNVx1OTIyNlx1OTIyN1x1OTIyOFx1OTIyOVx1OTIyYVx1OTIyYlx1OTIyY1x1OTIyZFx1OTIyZVx1OTIyZlx1OTIzMFx1OTIzMVx1OTIzMlx1OTIzM1x1OTIzNFx1OTIzNVx1OTIzNlx1OTIzN1x1OTIzOFx1OTIzOVx1OTIzYVx1''@;'; put 'put ''OTIzYlx1OTIzY1x1OTIzZFx1OTIzZVx1OTIzZlx1OTI0MFx1OTI0MVx1OTI0Mlx1OTI0M1x1OTI0NFx1OTI0NVx1NzJmYlx1NzMxN1x1NzMxM1x1NzMyMVx1NzMwYVx1NzMxZVx1NzMxZFx1NzMxNVx1NzMyMlx1NzMzOVx1NzMyNVx1NzMyY1x1NzMzOFx1NzMzMVx1NzM1MFx1NzM0ZFx1NzM1''@;'; put 'put ''N1x1NzM2MFx1NzM2Y1x1NzM2Zlx1NzM3ZVx1ODIxYlx1NTkyNVx1OThlN1x1NTkyNFx1NTkwMlx1OTk2M1x1OTk2N1x1OTk2OFx1OTk2OVx1OTk2YVx1OTk2Ylx1OTk2Y1x1OTk3NFx1OTk3N1x1OTk3ZFx1OTk4MFx1OTk4NFx1OTk4N1x1OTk4YVx1OTk4ZFx1OTk5MFx1OTk5MVx1OTk5M1x1''@;'; put 'put ''OTk5NFx1OTk5NVx1NWU4MFx1NWU5MVx1NWU4Ylx1NWU5Nlx1NWVhNVx1NWVhMFx1NWViOVx1NWViNVx1NWViZVx1NWViM1x1OGQ1M1x1NWVkMlx1NWVkMVx1NWVkYlx1NWVlOFx1NWVlYVx1ODFiYVx1NWZjNFx1NWZjOVx1NWZkNlx1NWZjZlx1NjAwM1x1NWZlZVx1NjAwNFx1NWZlMVx1NWZl''@;'; put 'put ''NFx1NWZmZVx1NjAwNVx1NjAwNlx1NWZlYVx1NWZlZFx1NWZmOFx1NjAxOVx1NjAzNVx1NjAyNlx1NjAxYlx1NjAwZlx1NjAwZFx1NjAyOVx1NjAyYlx1NjAwYVx1NjAzZlx1NjAyMVx1NjA3OFx1NjA3OVx1NjA3Ylx1NjA3YVx1NjA0Mlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIyNl0u''@;'; put 'put ''bGVuZ3RoOysrZyk2NTUzMyE9PXlbMjI2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIyNl1bZ11dPTU3ODU2K2csX1s1Nzg1NitnXT15WzIyNl1bZ10pO2Zvcih5WzIyN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTI0Nlx1OTI0''@;'; put 'put ''N1x1OTI0OFx1OTI0OVx1OTI0YVx1OTI0Ylx1OTI0Y1x1OTI0ZFx1OTI0ZVx1OTI0Zlx1OTI1MFx1OTI1MVx1OTI1Mlx1OTI1M1x1OTI1NFx1OTI1NVx1OTI1Nlx1OTI1N1x1OTI1OFx1OTI1OVx1OTI1YVx1OTI1Ylx1OTI1Y1x1OTI1ZFx1OTI1ZVx1OTI1Zlx1OTI2MFx1OTI2MVx1OTI2Mlx1''@;'; put 'put ''OTI2M1x1OTI2NFx1OTI2NVx1OTI2Nlx1OTI2N1x1OTI2OFx1OTI2OVx1OTI2YVx1OTI2Ylx1OTI2Y1x1OTI2ZFx1OTI2ZVx1OTI2Zlx1OTI3MFx1OTI3MVx1OTI3Mlx1OTI3M1x1OTI3NVx1OTI3Nlx1OTI3N1x1OTI3OFx1OTI3OVx1OTI3YVx1OTI3Ylx1OTI3Y1x1OTI3ZFx1OTI3ZVx1OTI3''@;'; put 'put ''Zlx1OTI4MFx1OTI4MVx1OTI4Mlx1OTI4M1x1OTI4NFx1OTI4NVx1ZmZmZFx1OTI4Nlx1OTI4N1x1OTI4OFx1OTI4OVx1OTI4YVx1OTI4Ylx1OTI4Y1x1OTI4ZFx1OTI4Zlx1OTI5MFx1OTI5MVx1OTI5Mlx1OTI5M1x1OTI5NFx1OTI5NVx1OTI5Nlx1OTI5N1x1OTI5OFx1OTI5OVx1OTI5YVx1''@;'; put 'put ''OTI5Ylx1OTI5Y1x1OTI5ZFx1OTI5ZVx1OTI5Zlx1OTJhMFx1OTJhMVx1OTJhMlx1OTJhM1x1OTJhNFx1OTJhNVx1OTJhNlx1OTJhN1x1NjA2YVx1NjA3ZFx1NjA5Nlx1NjA5YVx1NjBhZFx1NjA5ZFx1NjA4M1x1NjA5Mlx1NjA4Y1x1NjA5Ylx1NjBlY1x1NjBiYlx1NjBiMVx1NjBkZFx1NjBk''@;'; put 'put ''OFx1NjBjNlx1NjBkYVx1NjBiNFx1NjEyMFx1NjEyNlx1NjExNVx1NjEyM1x1NjBmNFx1NjEwMFx1NjEwZVx1NjEyYlx1NjE0YVx1NjE3NVx1NjFhY1x1NjE5NFx1NjFhN1x1NjFiN1x1NjFkNFx1NjFmNVx1NWZkZFx1OTZiM1x1OTVlOVx1OTVlYlx1OTVmMVx1OTVmM1x1OTVmNVx1OTVmNlx1''@;'; put 'put ''OTVmY1x1OTVmZVx1OTYwM1x1OTYwNFx1OTYwNlx1OTYwOFx1OTYwYVx1OTYwYlx1OTYwY1x1OTYwZFx1OTYwZlx1OTYxMlx1OTYxNVx1OTYxNlx1OTYxN1x1OTYxOVx1OTYxYVx1NGUyY1x1NzIzZlx1NjIxNVx1NmMzNVx1NmM1NFx1NmM1Y1x1NmM0YVx1NmNhM1x1NmM4NVx1NmM5MFx1NmM5''@;'; put 'put ''NFx1NmM4Y1x1NmM2OFx1NmM2OVx1NmM3NFx1NmM3Nlx1NmM4Nlx1NmNhOVx1NmNkMFx1NmNkNFx1NmNhZFx1NmNmN1x1NmNmOFx1NmNmMVx1NmNkN1x1NmNiMlx1NmNlMFx1NmNkNlx1NmNmYVx1NmNlYlx1NmNlZVx1NmNiMVx1NmNkM1x1NmNlZlx1NmNmZVx1ZmZmZCIuc3BsaXQoIiIpLGc9''@;'; put 'put ''MDtnIT15WzIyN10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjI3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIyN11bZ11dPTU4MTEyK2csX1s1ODExMitnXT15WzIyN11bZ10pO2Zvcih5WzIyOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1OTJhOFx1OTJhOVx1OTJhYVx1OTJhYlx1OTJhY1x1OTJhZFx1OTJhZlx1OTJiMFx1OTJiMVx1OTJiMlx1OTJiM1x1OTJiNFx1OTJiNVx1OTJiNlx1OTJiN1x1OTJiOFx1OTJiOVx1OTJiYVx1OTJiYlx1OTJiY1x1OTJiZFx1OTJiZVx1OTJiZlx1OTJjMFx1OTJjMVx1OTJjMlx1OTJjM1x1''@;'; put 'put ''OTJjNFx1OTJjNVx1OTJjNlx1OTJjN1x1OTJjOVx1OTJjYVx1OTJjYlx1OTJjY1x1OTJjZFx1OTJjZVx1OTJjZlx1OTJkMFx1OTJkMVx1OTJkMlx1OTJkM1x1OTJkNFx1OTJkNVx1OTJkNlx1OTJkN1x1OTJkOFx1OTJkOVx1OTJkYVx1OTJkYlx1OTJkY1x1OTJkZFx1OTJkZVx1OTJkZlx1OTJl''@;'; put 'put ''MFx1OTJlMVx1OTJlMlx1OTJlM1x1OTJlNFx1OTJlNVx1OTJlNlx1OTJlN1x1OTJlOFx1ZmZmZFx1OTJlOVx1OTJlYVx1OTJlYlx1OTJlY1x1OTJlZFx1OTJlZVx1OTJlZlx1OTJmMFx1OTJmMVx1OTJmMlx1OTJmM1x1OTJmNFx1OTJmNVx1OTJmNlx1OTJmN1x1OTJmOFx1OTJmOVx1OTJmYVx1''@;'; put 'put ''OTJmYlx1OTJmY1x1OTJmZFx1OTJmZVx1OTJmZlx1OTMwMFx1OTMwMVx1OTMwMlx1OTMwM1x1OTMwNFx1OTMwNVx1OTMwNlx1OTMwN1x1OTMwOFx1OTMwOVx1NmQzOVx1NmQyN1x1NmQwY1x1NmQ0M1x1NmQ0OFx1NmQwN1x1NmQwNFx1NmQxOVx1NmQwZVx1NmQyYlx1NmQ0ZFx1NmQyZVx1NmQz''@;'; put 'put ''NVx1NmQxYVx1NmQ0Zlx1NmQ1Mlx1NmQ1NFx1NmQzM1x1NmQ5MVx1NmQ2Zlx1NmQ5ZVx1NmRhMFx1NmQ1ZVx1NmQ5M1x1NmQ5NFx1NmQ1Y1x1NmQ2MFx1NmQ3Y1x1NmQ2M1x1NmUxYVx1NmRjN1x1NmRjNVx1NmRkZVx1NmUwZVx1NmRiZlx1NmRlMFx1NmUxMVx1NmRlNlx1NmRkZFx1NmRkOVx1''@;'; put 'put ''NmUxNlx1NmRhYlx1NmUwY1x1NmRhZVx1NmUyYlx1NmU2ZVx1NmU0ZVx1NmU2Ylx1NmViMlx1NmU1Zlx1NmU4Nlx1NmU1M1x1NmU1NFx1NmUzMlx1NmUyNVx1NmU0NFx1NmVkZlx1NmViMVx1NmU5OFx1NmVlMFx1NmYyZFx1NmVlMlx1NmVhNVx1NmVhN1x1NmViZFx1NmViYlx1NmViN1x1NmVk''@;'; put 'put ''N1x1NmViNFx1NmVjZlx1NmU4Zlx1NmVjMlx1NmU5Zlx1NmY2Mlx1NmY0Nlx1NmY0N1x1NmYyNFx1NmYxNVx1NmVmOVx1NmYyZlx1NmYzNlx1NmY0Ylx1NmY3NFx1NmYyYVx1NmYwOVx1NmYyOVx1NmY4OVx1NmY4ZFx1NmY4Y1x1NmY3OFx1NmY3Mlx1NmY3Y1x1NmY3YVx1NmZkMVx1ZmZmZCIu''@;'; put 'put ''c3BsaXQoIiIpLGc9MDtnIT15WzIyOF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjI4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIyOF1bZ11dPTU4MzY4K2csX1s1ODM2OCtnXT15WzIyOF1bZ10pO2Zvcih5WzIyOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1OTMwYVx1OTMwYlx1OTMwY1x1OTMwZFx1OTMwZVx1OTMwZlx1OTMxMFx1OTMxMVx1OTMxMlx1OTMxM1x1OTMxNFx1OTMxNVx1OTMxNlx1OTMxN1x1OTMxOFx1OTMxOVx1OTMxYVx1OTMxYlx1OTMxY1x1OTMxZFx1OTMxZVx1OTMxZlx1OTMyMFx1OTMyMVx1OTMyMlx1''@;'; put 'put ''OTMyM1x1OTMyNFx1OTMyNVx1OTMyNlx1OTMyN1x1OTMyOFx1OTMyOVx1OTMyYVx1OTMyYlx1OTMyY1x1OTMyZFx1OTMyZVx1OTMyZlx1OTMzMFx1OTMzMVx1OTMzMlx1OTMzM1x1OTMzNFx1OTMzNVx1OTMzNlx1OTMzN1x1OTMzOFx1OTMzOVx1OTMzYVx1OTMzYlx1OTMzY1x1OTMzZFx1OTMz''@;'; put 'put ''Zlx1OTM0MFx1OTM0MVx1OTM0Mlx1OTM0M1x1OTM0NFx1OTM0NVx1OTM0Nlx1OTM0N1x1OTM0OFx1OTM0OVx1ZmZmZFx1OTM0YVx1OTM0Ylx1OTM0Y1x1OTM0ZFx1OTM0ZVx1OTM0Zlx1OTM1MFx1OTM1MVx1OTM1Mlx1OTM1M1x1OTM1NFx1OTM1NVx1OTM1Nlx1OTM1N1x1OTM1OFx1OTM1OVx1''@;'; put 'put ''OTM1YVx1OTM1Ylx1OTM1Y1x1OTM1ZFx1OTM1ZVx1OTM1Zlx1OTM2MFx1OTM2MVx1OTM2Mlx1OTM2M1x1OTM2NFx1OTM2NVx1OTM2Nlx1OTM2N1x1OTM2OFx1OTM2OVx1OTM2Ylx1NmZjOVx1NmZhN1x1NmZiOVx1NmZiNlx1NmZjMlx1NmZlMVx1NmZlZVx1NmZkZVx1NmZlMFx1NmZlZlx1NzAx''@;'; put 'put ''YVx1NzAyM1x1NzAxYlx1NzAzOVx1NzAzNVx1NzA0Zlx1NzA1ZVx1NWI4MFx1NWI4NFx1NWI5NVx1NWI5M1x1NWJhNVx1NWJiOFx1NzUyZlx1OWE5ZVx1NjQzNFx1NWJlNFx1NWJlZVx1ODkzMFx1NWJmMFx1OGU0N1x1OGIwN1x1OGZiNlx1OGZkM1x1OGZkNVx1OGZlNVx1OGZlZVx1OGZlNFx1''@;'; put 'put ''OGZlOVx1OGZlNlx1OGZmM1x1OGZlOFx1OTAwNVx1OTAwNFx1OTAwYlx1OTAyNlx1OTAxMVx1OTAwZFx1OTAxNlx1OTAyMVx1OTAzNVx1OTAzNlx1OTAyZFx1OTAyZlx1OTA0NFx1OTA1MVx1OTA1Mlx1OTA1MFx1OTA2OFx1OTA1OFx1OTA2Mlx1OTA1Ylx1NjZiOVx1OTA3NFx1OTA3ZFx1OTA4''@;'; put 'put ''Mlx1OTA4OFx1OTA4M1x1OTA4Ylx1NWY1MFx1NWY1N1x1NWY1Nlx1NWY1OFx1NWMzYlx1NTRhYlx1NWM1MFx1NWM1OVx1NWI3MVx1NWM2M1x1NWM2Nlx1N2ZiY1x1NWYyYVx1NWYyOVx1NWYyZFx1ODI3NFx1NWYzY1x1OWIzYlx1NWM2ZVx1NTk4MVx1NTk4M1x1NTk4ZFx1NTlhOVx1NTlhYVx1''@;'; put 'put ''NTlhM1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIyOV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjI5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIyOV1bZ11dPTU4NjI0K2csX1s1ODYyNCtnXT15WzIyOV1bZ10pO2Zvcih5WzIzMF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTM2Y1x1OTM2ZFx1OTM2ZVx1OTM2Zlx1OTM3MFx1OTM3MVx1OTM3Mlx1OTM3M1x1OTM3NFx1OTM3NVx1OTM3Nlx1OTM3N1x1OTM3OFx1OTM3OVx1OTM3YVx1OTM3Ylx1OTM3Y1x1OTM3ZFx1OTM3ZVx1OTM3Zlx1OTM4MFx1OTM4MVx1OTM4Mlx1''@;'; put 'put ''OTM4M1x1OTM4NFx1OTM4NVx1OTM4Nlx1OTM4N1x1OTM4OFx1OTM4OVx1OTM4YVx1OTM4Ylx1OTM4Y1x1OTM4ZFx1OTM4ZVx1OTM5MFx1OTM5MVx1OTM5Mlx1OTM5M1x1OTM5NFx1OTM5NVx1OTM5Nlx1OTM5N1x1OTM5OFx1OTM5OVx1OTM5YVx1OTM5Ylx1OTM5Y1x1OTM5ZFx1OTM5ZVx1OTM5''@;'; put 'put ''Zlx1OTNhMFx1OTNhMVx1OTNhMlx1OTNhM1x1OTNhNFx1OTNhNVx1OTNhNlx1OTNhN1x1OTNhOFx1OTNhOVx1OTNhYVx1OTNhYlx1ZmZmZFx1OTNhY1x1OTNhZFx1OTNhZVx1OTNhZlx1OTNiMFx1OTNiMVx1OTNiMlx1OTNiM1x1OTNiNFx1OTNiNVx1OTNiNlx1OTNiN1x1OTNiOFx1OTNiOVx1''@;'; put 'put ''OTNiYVx1OTNiYlx1OTNiY1x1OTNiZFx1OTNiZVx1OTNiZlx1OTNjMFx1OTNjMVx1OTNjMlx1OTNjM1x1OTNjNFx1OTNjNVx1OTNjNlx1OTNjN1x1OTNjOFx1OTNjOVx1OTNjYlx1OTNjY1x1OTNjZFx1NTk5N1x1NTljYVx1NTlhYlx1NTk5ZVx1NTlhNFx1NTlkMlx1NTliMlx1NTlhZlx1NTlk''@;'; put 'put ''N1x1NTliZVx1NWEwNVx1NWEwNlx1NTlkZFx1NWEwOFx1NTllM1x1NTlkOFx1NTlmOVx1NWEwY1x1NWEwOVx1NWEzMlx1NWEzNFx1NWExMVx1NWEyM1x1NWExM1x1NWE0MFx1NWE2N1x1NWE0YVx1NWE1NVx1NWEzY1x1NWE2Mlx1NWE3NVx1ODBlY1x1NWFhYVx1NWE5Ylx1NWE3N1x1NWE3YVx1''@;'; put 'put ''NWFiZVx1NWFlYlx1NWFiMlx1NWFkMlx1NWFkNFx1NWFiOFx1NWFlMFx1NWFlM1x1NWFmMVx1NWFkNlx1NWFlNlx1NWFkOFx1NWFkY1x1NWIwOVx1NWIxN1x1NWIxNlx1NWIzMlx1NWIzN1x1NWI0MFx1NWMxNVx1NWMxY1x1NWI1YVx1NWI2NVx1NWI3M1x1NWI1MVx1NWI1M1x1NWI2Mlx1OWE3''@;'; put 'put ''NVx1OWE3N1x1OWE3OFx1OWE3YVx1OWE3Zlx1OWE3ZFx1OWE4MFx1OWE4MVx1OWE4NVx1OWE4OFx1OWE4YVx1OWE5MFx1OWE5Mlx1OWE5M1x1OWE5Nlx1OWE5OFx1OWE5Ylx1OWE5Y1x1OWE5ZFx1OWE5Zlx1OWFhMFx1OWFhMlx1OWFhM1x1OWFhNVx1OWFhN1x1N2U5Zlx1N2VhMVx1N2VhM1x1''@;'; put 'put ''N2VhNVx1N2VhOFx1N2VhOVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIzMF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjMwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIzMF1bZ11dPTU4ODgwK2csX1s1ODg4MCtnXT15WzIzMF1bZ10pO2Zvcih5WzIzMV09Ilx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTNjZVx1OTNjZlx1OTNkMFx1OTNkMVx1OTNkMlx1OTNkM1x1OTNkNFx1OTNkNVx1OTNkN1x1OTNkOFx1OTNkOVx1OTNkYVx1OTNkYlx1OTNkY1x1OTNkZFx1OTNkZVx1OTNkZlx1OTNlMFx1OTNlMVx1OTNlMlx1OTNlM1x1''@;'; put 'put ''OTNlNFx1OTNlNVx1OTNlNlx1OTNlN1x1OTNlOFx1OTNlOVx1OTNlYVx1OTNlYlx1OTNlY1x1OTNlZFx1OTNlZVx1OTNlZlx1OTNmMFx1OTNmMVx1OTNmMlx1OTNmM1x1OTNmNFx1OTNmNVx1OTNmNlx1OTNmN1x1OTNmOFx1OTNmOVx1OTNmYVx1OTNmYlx1OTNmY1x1OTNmZFx1OTNmZVx1OTNm''@;'; put 'put ''Zlx1OTQwMFx1OTQwMVx1OTQwMlx1OTQwM1x1OTQwNFx1OTQwNVx1OTQwNlx1OTQwN1x1OTQwOFx1OTQwOVx1OTQwYVx1OTQwYlx1OTQwY1x1OTQwZFx1ZmZmZFx1OTQwZVx1OTQwZlx1OTQxMFx1OTQxMVx1OTQxMlx1OTQxM1x1OTQxNFx1OTQxNVx1OTQxNlx1OTQxN1x1OTQxOFx1OTQxOVx1''@;'; put 'put ''OTQxYVx1OTQxYlx1OTQxY1x1OTQxZFx1OTQxZVx1OTQxZlx1OTQyMFx1OTQyMVx1OTQyMlx1OTQyM1x1OTQyNFx1OTQyNVx1OTQyNlx1OTQyN1x1OTQyOFx1OTQyOVx1OTQyYVx1OTQyYlx1OTQyY1x1OTQyZFx1OTQyZVx1N2VhZFx1N2ViMFx1N2ViZVx1N2VjMFx1N2VjMVx1N2VjMlx1N2Vj''@;'; put 'put ''OVx1N2VjYlx1N2VjY1x1N2VkMFx1N2VkNFx1N2VkN1x1N2VkYlx1N2VlMFx1N2VlMVx1N2VlOFx1N2VlYlx1N2VlZVx1N2VlZlx1N2VmMVx1N2VmMlx1N2YwZFx1N2VmNlx1N2VmYVx1N2VmYlx1N2VmZVx1N2YwMVx1N2YwMlx1N2YwM1x1N2YwN1x1N2YwOFx1N2YwYlx1N2YwY1x1N2YwZlx1''@;'; put 'put ''N2YxMVx1N2YxMlx1N2YxN1x1N2YxOVx1N2YxY1x1N2YxYlx1N2YxZlx1N2YyMVx1N2YyMlx1N2YyM1x1N2YyNFx1N2YyNVx1N2YyNlx1N2YyN1x1N2YyYVx1N2YyYlx1N2YyY1x1N2YyZFx1N2YyZlx1N2YzMFx1N2YzMVx1N2YzMlx1N2YzM1x1N2YzNVx1NWU3YVx1NzU3Zlx1NWRkYlx1NzUz''@;'; put 'put ''ZVx1OTA5NVx1NzM4ZVx1NzM5MVx1NzNhZVx1NzNhMlx1NzM5Zlx1NzNjZlx1NzNjMlx1NzNkMVx1NzNiN1x1NzNiM1x1NzNjMFx1NzNjOVx1NzNjOFx1NzNlNVx1NzNkOVx1OTg3Y1x1NzQwYVx1NzNlOVx1NzNlN1x1NzNkZVx1NzNiYVx1NzNmMlx1NzQwZlx1NzQyYVx1NzQ1Ylx1NzQyNlx1''@;'; put 'put ''NzQyNVx1NzQyOFx1NzQzMFx1NzQyZVx1NzQyY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIzMV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjMxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIzMV1bZ11dPTU5MTM2K2csX1s1OTEzNitnXT15WzIzMV1bZ10pO2Zvcih5WzIzMl09Ilx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTQyZlx1OTQzMFx1OTQzMVx1OTQzMlx1OTQzM1x1OTQzNFx1OTQzNVx1OTQzNlx1OTQzN1x1OTQzOFx1OTQzOVx1OTQzYVx1OTQzYlx1OTQzY1x1OTQzZFx1OTQzZlx1OTQ0MFx1OTQ0MVx1OTQ0Mlx1''@;'; put 'put ''OTQ0M1x1OTQ0NFx1OTQ0NVx1OTQ0Nlx1OTQ0N1x1OTQ0OFx1OTQ0OVx1OTQ0YVx1OTQ0Ylx1OTQ0Y1x1OTQ0ZFx1OTQ0ZVx1OTQ0Zlx1OTQ1MFx1OTQ1MVx1OTQ1Mlx1OTQ1M1x1OTQ1NFx1OTQ1NVx1OTQ1Nlx1OTQ1N1x1OTQ1OFx1OTQ1OVx1OTQ1YVx1OTQ1Ylx1OTQ1Y1x1OTQ1ZFx1OTQ1''@;'; put 'put ''ZVx1OTQ1Zlx1OTQ2MFx1OTQ2MVx1OTQ2Mlx1OTQ2M1x1OTQ2NFx1OTQ2NVx1OTQ2Nlx1OTQ2N1x1OTQ2OFx1OTQ2OVx1OTQ2YVx1OTQ2Y1x1OTQ2ZFx1OTQ2ZVx1OTQ2Zlx1ZmZmZFx1OTQ3MFx1OTQ3MVx1OTQ3Mlx1OTQ3M1x1OTQ3NFx1OTQ3NVx1OTQ3Nlx1OTQ3N1x1OTQ3OFx1OTQ3OVx1''@;'; put 'put ''OTQ3YVx1OTQ3Ylx1OTQ3Y1x1OTQ3ZFx1OTQ3ZVx1OTQ3Zlx1OTQ4MFx1OTQ4MVx1OTQ4Mlx1OTQ4M1x1OTQ4NFx1OTQ5MVx1OTQ5Nlx1OTQ5OFx1OTRjN1x1OTRjZlx1OTRkM1x1OTRkNFx1OTRkYVx1OTRlNlx1OTRmYlx1OTUxY1x1OTUyMFx1NzQxYlx1NzQxYVx1NzQ0MVx1NzQ1Y1x1NzQ1''@;'; put 'put ''N1x1NzQ1NVx1NzQ1OVx1NzQ3N1x1NzQ2ZFx1NzQ3ZVx1NzQ5Y1x1NzQ4ZVx1NzQ4MFx1NzQ4MVx1NzQ4N1x1NzQ4Ylx1NzQ5ZVx1NzRhOFx1NzRhOVx1NzQ5MFx1NzRhN1x1NzRkMlx1NzRiYVx1OTdlYVx1OTdlYlx1OTdlY1x1Njc0Y1x1Njc1M1x1Njc1ZVx1Njc0OFx1Njc2OVx1NjdhNVx1''@;'; put 'put ''Njc4N1x1Njc2YVx1Njc3M1x1Njc5OFx1NjdhN1x1Njc3NVx1NjdhOFx1Njc5ZVx1NjdhZFx1Njc4Ylx1Njc3N1x1Njc3Y1x1NjdmMFx1NjgwOVx1NjdkOFx1NjgwYVx1NjdlOVx1NjdiMFx1NjgwY1x1NjdkOVx1NjdiNVx1NjdkYVx1NjdiM1x1NjdkZFx1NjgwMFx1NjdjM1x1NjdiOFx1Njdl''@;'; put 'put ''Mlx1NjgwZVx1NjdjMVx1NjdmZFx1NjgzMlx1NjgzM1x1Njg2MFx1Njg2MVx1Njg0ZVx1Njg2Mlx1Njg0NFx1Njg2NFx1Njg4M1x1NjgxZFx1Njg1NVx1Njg2Nlx1Njg0MVx1Njg2N1x1Njg0MFx1NjgzZVx1Njg0YVx1Njg0OVx1NjgyOVx1NjhiNVx1Njg4Zlx1Njg3NFx1Njg3N1x1Njg5M1x1''@;'; put 'put ''Njg2Ylx1NjhjMlx1Njk2ZVx1NjhmY1x1NjkxZlx1NjkyMFx1NjhmOVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIzMl0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjMyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIzMl1bZ11dPTU5MzkyK2csX1s1OTM5MitnXT15WzIzMl1bZ10pO2Zvcih5''@;'; put 'put ''WzIzM109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTUyN1x1OTUzM1x1OTUzZFx1OTU0M1x1OTU0OFx1OTU0Ylx1OTU1NVx1OTU1YVx1OTU2MFx1OTU2ZVx1OTU3NFx1OTU3NVx1OTU3N1x1OTU3OFx1OTU3OVx1OTU3YVx1OTU3Ylx1''@;'; put 'put ''OTU3Y1x1OTU3ZFx1OTU3ZVx1OTU4MFx1OTU4MVx1OTU4Mlx1OTU4M1x1OTU4NFx1OTU4NVx1OTU4Nlx1OTU4N1x1OTU4OFx1OTU4OVx1OTU4YVx1OTU4Ylx1OTU4Y1x1OTU4ZFx1OTU4ZVx1OTU4Zlx1OTU5MFx1OTU5MVx1OTU5Mlx1OTU5M1x1OTU5NFx1OTU5NVx1OTU5Nlx1OTU5N1x1OTU5''@;'; put 'put ''OFx1OTU5OVx1OTU5YVx1OTU5Ylx1OTU5Y1x1OTU5ZFx1OTU5ZVx1OTU5Zlx1OTVhMFx1OTVhMVx1OTVhMlx1OTVhM1x1OTVhNFx1OTVhNVx1OTVhNlx1OTVhN1x1OTVhOFx1OTVhOVx1OTVhYVx1ZmZmZFx1OTVhYlx1OTVhY1x1OTVhZFx1OTVhZVx1OTVhZlx1OTViMFx1OTViMVx1OTViMlx1''@;'; put 'put ''OTViM1x1OTViNFx1OTViNVx1OTViNlx1OTViN1x1OTViOFx1OTViOVx1OTViYVx1OTViYlx1OTViY1x1OTViZFx1OTViZVx1OTViZlx1OTVjMFx1OTVjMVx1OTVjMlx1OTVjM1x1OTVjNFx1OTVjNVx1OTVjNlx1OTVjN1x1OTVjOFx1OTVjOVx1OTVjYVx1OTVjYlx1NjkyNFx1NjhmMFx1Njkw''@;'; put 'put ''Ylx1NjkwMVx1Njk1N1x1NjhlM1x1NjkxMFx1Njk3MVx1NjkzOVx1Njk2MFx1Njk0Mlx1Njk1ZFx1Njk4NFx1Njk2Ylx1Njk4MFx1Njk5OFx1Njk3OFx1NjkzNFx1NjljY1x1Njk4N1x1Njk4OFx1NjljZVx1Njk4OVx1Njk2Nlx1Njk2M1x1Njk3OVx1Njk5Ylx1NjlhN1x1NjliYlx1NjlhYlx1''@;'; put 'put ''NjlhZFx1NjlkNFx1NjliMVx1NjljMVx1NjljYVx1NjlkZlx1Njk5NVx1NjllMFx1Njk4ZFx1NjlmZlx1NmEyZlx1NjllZFx1NmExN1x1NmExOFx1NmE2NVx1NjlmMlx1NmE0NFx1NmEzZVx1NmFhMFx1NmE1MFx1NmE1Ylx1NmEzNVx1NmE4ZVx1NmE3OVx1NmEzZFx1NmEyOFx1NmE1OFx1NmE3''@;'; put 'put ''Y1x1NmE5MVx1NmE5MFx1NmFhOVx1NmE5N1x1NmFhYlx1NzMzN1x1NzM1Mlx1NmI4MVx1NmI4Mlx1NmI4N1x1NmI4NFx1NmI5Mlx1NmI5M1x1NmI4ZFx1NmI5YVx1NmI5Ylx1NmJhMVx1NmJhYVx1OGY2Ylx1OGY2ZFx1OGY3MVx1OGY3Mlx1OGY3M1x1OGY3NVx1OGY3Nlx1OGY3OFx1OGY3N1x1''@;'; put 'put ''OGY3OVx1OGY3YVx1OGY3Y1x1OGY3ZVx1OGY4MVx1OGY4Mlx1OGY4NFx1OGY4N1x1OGY4Ylx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIzM10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjMzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIzM11bZ11dPTU5NjQ4K2csX1s1OTY0OCtnXT15WzIz''@;'; put 'put ''M11bZ10pO2Zvcih5WzIzNF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTVjY1x1OTVjZFx1OTVjZVx1OTVjZlx1OTVkMFx1OTVkMVx1OTVkMlx1OTVkM1x1OTVkNFx1OTVkNVx1OTVkNlx1OTVkN1x1OTVkOFx1OTVkOVx1OTVkYVx1''@;'; put 'put ''OTVkYlx1OTVkY1x1OTVkZFx1OTVkZVx1OTVkZlx1OTVlMFx1OTVlMVx1OTVlMlx1OTVlM1x1OTVlNFx1OTVlNVx1OTVlNlx1OTVlN1x1OTVlY1x1OTVmZlx1OTYwN1x1OTYxM1x1OTYxOFx1OTYxYlx1OTYxZVx1OTYyMFx1OTYyM1x1OTYyNFx1OTYyNVx1OTYyNlx1OTYyN1x1OTYyOFx1OTYy''@;'; put 'put ''OVx1OTYyYlx1OTYyY1x1OTYyZFx1OTYyZlx1OTYzMFx1OTYzN1x1OTYzOFx1OTYzOVx1OTYzYVx1OTYzZVx1OTY0MVx1OTY0M1x1OTY0YVx1OTY0ZVx1OTY0Zlx1OTY1MVx1OTY1Mlx1OTY1M1x1OTY1Nlx1OTY1N1x1ZmZmZFx1OTY1OFx1OTY1OVx1OTY1YVx1OTY1Y1x1OTY1ZFx1OTY1ZVx1''@;'; put 'put ''OTY2MFx1OTY2M1x1OTY2NVx1OTY2Nlx1OTY2Ylx1OTY2ZFx1OTY2ZVx1OTY2Zlx1OTY3MFx1OTY3MVx1OTY3M1x1OTY3OFx1OTY3OVx1OTY3YVx1OTY3Ylx1OTY3Y1x1OTY3ZFx1OTY3ZVx1OTY3Zlx1OTY4MFx1OTY4MVx1OTY4Mlx1OTY4M1x1OTY4NFx1OTY4N1x1OTY4OVx1OTY4YVx1OGY4''@;'; put 'put ''ZFx1OGY4ZVx1OGY4Zlx1OGY5OFx1OGY5YVx1OGVjZVx1NjIwYlx1NjIxN1x1NjIxYlx1NjIxZlx1NjIyMlx1NjIyMVx1NjIyNVx1NjIyNFx1NjIyY1x1ODFlN1x1NzRlZlx1NzRmNFx1NzRmZlx1NzUwZlx1NzUxMVx1NzUxM1x1NjUzNFx1NjVlZVx1NjVlZlx1NjVmMFx1NjYwYVx1NjYxOVx1''@;'; put 'put ''Njc3Mlx1NjYwM1x1NjYxNVx1NjYwMFx1NzA4NVx1NjZmN1x1NjYxZFx1NjYzNFx1NjYzMVx1NjYzNlx1NjYzNVx1ODAwNlx1NjY1Zlx1NjY1NFx1NjY0MVx1NjY0Zlx1NjY1Nlx1NjY2MVx1NjY1N1x1NjY3N1x1NjY4NFx1NjY4Y1x1NjZhN1x1NjY5ZFx1NjZiZVx1NjZkYlx1NjZkY1x1NjZl''@;'; put 'put ''Nlx1NjZlOVx1OGQzMlx1OGQzM1x1OGQzNlx1OGQzYlx1OGQzZFx1OGQ0MFx1OGQ0NVx1OGQ0Nlx1OGQ0OFx1OGQ0OVx1OGQ0N1x1OGQ0ZFx1OGQ1NVx1OGQ1OVx1ODljN1x1ODljYVx1ODljYlx1ODljY1x1ODljZVx1ODljZlx1ODlkMFx1ODlkMVx1NzI2ZVx1NzI5Zlx1NzI1ZFx1NzI2Nlx1''@;'; put 'put ''NzI2Zlx1NzI3ZVx1NzI3Zlx1NzI4NFx1NzI4Ylx1NzI4ZFx1NzI4Zlx1NzI5Mlx1NjMwOFx1NjMzMlx1NjNiMFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIzNF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjM0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIzNF1bZ11dPTU5OTA0K2csX1s1''@;'; put 'put ''OTkwNCtnXT15WzIzNF1bZ10pO2Zvcih5WzIzNV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTY4Y1x1OTY4ZVx1OTY5MVx1OTY5Mlx1OTY5M1x1OTY5NVx1OTY5Nlx1OTY5YVx1OTY5Ylx1OTY5ZFx1OTY5ZVx1OTY5Zlx1OTZhMFx1''@;'; put 'put ''OTZhMVx1OTZhMlx1OTZhM1x1OTZhNFx1OTZhNVx1OTZhNlx1OTZhOFx1OTZhOVx1OTZhYVx1OTZhYlx1OTZhY1x1OTZhZFx1OTZhZVx1OTZhZlx1OTZiMVx1OTZiMlx1OTZiNFx1OTZiNVx1OTZiN1x1OTZiOFx1OTZiYVx1OTZiYlx1OTZiZlx1OTZjMlx1OTZjM1x1OTZjOFx1OTZjYVx1OTZj''@;'; put 'put ''Ylx1OTZkMFx1OTZkMVx1OTZkM1x1OTZkNFx1OTZkNlx1OTZkN1x1OTZkOFx1OTZkOVx1OTZkYVx1OTZkYlx1OTZkY1x1OTZkZFx1OTZkZVx1OTZkZlx1OTZlMVx1OTZlMlx1OTZlM1x1OTZlNFx1OTZlNVx1OTZlNlx1OTZlN1x1OTZlYlx1ZmZmZFx1OTZlY1x1OTZlZFx1OTZlZVx1OTZmMFx1''@;'; put 'put ''OTZmMVx1OTZmMlx1OTZmNFx1OTZmNVx1OTZmOFx1OTZmYVx1OTZmYlx1OTZmY1x1OTZmZFx1OTZmZlx1OTcwMlx1OTcwM1x1OTcwNVx1OTcwYVx1OTcwYlx1OTcwY1x1OTcxMFx1OTcxMVx1OTcxMlx1OTcxNFx1OTcxNVx1OTcxN1x1OTcxOFx1OTcxOVx1OTcxYVx1OTcxYlx1OTcxZFx1OTcx''@;'; put 'put ''Zlx1OTcyMFx1NjQzZlx1NjRkOFx1ODAwNFx1NmJlYVx1NmJmM1x1NmJmZFx1NmJmNVx1NmJmOVx1NmMwNVx1NmMwN1x1NmMwNlx1NmMwZFx1NmMxNVx1NmMxOFx1NmMxOVx1NmMxYVx1NmMyMVx1NmMyOVx1NmMyNFx1NmMyYVx1NmMzMlx1NjUzNVx1NjU1NVx1NjU2Ylx1NzI0ZFx1NzI1Mlx1''@;'; put 'put ''NzI1Nlx1NzIzMFx1ODY2Mlx1NTIxNlx1ODA5Zlx1ODA5Y1x1ODA5M1x1ODBiY1x1NjcwYVx1ODBiZFx1ODBiMVx1ODBhYlx1ODBhZFx1ODBiNFx1ODBiN1x1ODBlN1x1ODBlOFx1ODBlOVx1ODBlYVx1ODBkYlx1ODBjMlx1ODBjNFx1ODBkOVx1ODBjZFx1ODBkN1x1NjcxMFx1ODBkZFx1ODBl''@;'; put 'put ''Ylx1ODBmMVx1ODBmNFx1ODBlZFx1ODEwZFx1ODEwZVx1ODBmMlx1ODBmY1x1NjcxNVx1ODExMlx1OGM1YVx1ODEzNlx1ODExZVx1ODEyY1x1ODExOFx1ODEzMlx1ODE0OFx1ODE0Y1x1ODE1M1x1ODE3NFx1ODE1OVx1ODE1YVx1ODE3MVx1ODE2MFx1ODE2OVx1ODE3Y1x1ODE3ZFx1ODE2ZFx1''@;'; put 'put ''ODE2N1x1NTg0ZFx1NWFiNVx1ODE4OFx1ODE4Mlx1ODE5MVx1NmVkNVx1ODFhM1x1ODFhYVx1ODFjY1x1NjcyNlx1ODFjYVx1ODFiYlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIzNV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjM1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIzNV1bZ11d''@;'; put 'put ''PTYwMTYwK2csX1s2MDE2MCtnXT15WzIzNV1bZ10pO2Zvcih5WzIzNl09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTcyMVx1OTcyMlx1OTcyM1x1OTcyNFx1OTcyNVx1OTcyNlx1OTcyN1x1OTcyOFx1OTcyOVx1OTcyYlx1OTcyY1x1''@;'; put 'put ''OTcyZVx1OTcyZlx1OTczMVx1OTczM1x1OTczNFx1OTczNVx1OTczNlx1OTczN1x1OTczYVx1OTczYlx1OTczY1x1OTczZFx1OTczZlx1OTc0MFx1OTc0MVx1OTc0Mlx1OTc0M1x1OTc0NFx1OTc0NVx1OTc0Nlx1OTc0N1x1OTc0OFx1OTc0OVx1OTc0YVx1OTc0Ylx1OTc0Y1x1OTc0ZFx1OTc0''@;'; put 'put ''ZVx1OTc0Zlx1OTc1MFx1OTc1MVx1OTc1NFx1OTc1NVx1OTc1N1x1OTc1OFx1OTc1YVx1OTc1Y1x1OTc1ZFx1OTc1Zlx1OTc2M1x1OTc2NFx1OTc2Nlx1OTc2N1x1OTc2OFx1OTc2YVx1OTc2Ylx1OTc2Y1x1OTc2ZFx1OTc2ZVx1OTc2Zlx1OTc3MFx1OTc3MVx1ZmZmZFx1OTc3Mlx1OTc3NVx1''@;'; put 'put ''OTc3N1x1OTc3OFx1OTc3OVx1OTc3YVx1OTc3Ylx1OTc3ZFx1OTc3ZVx1OTc3Zlx1OTc4MFx1OTc4MVx1OTc4Mlx1OTc4M1x1OTc4NFx1OTc4Nlx1OTc4N1x1OTc4OFx1OTc4OVx1OTc4YVx1OTc4Y1x1OTc4ZVx1OTc4Zlx1OTc5MFx1OTc5M1x1OTc5NVx1OTc5Nlx1OTc5N1x1OTc5OVx1OTc5''@;'; put 'put ''YVx1OTc5Ylx1OTc5Y1x1OTc5ZFx1ODFjMVx1ODFhNlx1NmIyNFx1NmIzN1x1NmIzOVx1NmI0M1x1NmI0Nlx1NmI1OVx1OThkMVx1OThkMlx1OThkM1x1OThkNVx1OThkOVx1OThkYVx1NmJiM1x1NWY0MFx1NmJjMlx1ODlmM1x1NjU5MFx1OWY1MVx1NjU5M1x1NjViY1x1NjVjNlx1NjVjNFx1''@;'; put 'put ''NjVjM1x1NjVjY1x1NjVjZVx1NjVkMlx1NjVkNlx1NzA4MFx1NzA5Y1x1NzA5Nlx1NzA5ZFx1NzBiYlx1NzBjMFx1NzBiN1x1NzBhYlx1NzBiMVx1NzBlOFx1NzBjYVx1NzExMFx1NzExM1x1NzExNlx1NzEyZlx1NzEzMVx1NzE3M1x1NzE1Y1x1NzE2OFx1NzE0NVx1NzE3Mlx1NzE0YVx1NzE3''@;'; put 'put ''OFx1NzE3YVx1NzE5OFx1NzFiM1x1NzFiNVx1NzFhOFx1NzFhMFx1NzFlMFx1NzFkNFx1NzFlN1x1NzFmOVx1NzIxZFx1NzIyOFx1NzA2Y1x1NzExOFx1NzE2Nlx1NzFiOVx1NjIzZVx1NjIzZFx1NjI0M1x1NjI0OFx1NjI0OVx1NzkzYlx1Nzk0MFx1Nzk0Nlx1Nzk0OVx1Nzk1Ylx1Nzk1Y1x1''@;'; put 'put ''Nzk1M1x1Nzk1YVx1Nzk2Mlx1Nzk1N1x1Nzk2MFx1Nzk2Zlx1Nzk2N1x1Nzk3YVx1Nzk4NVx1Nzk4YVx1Nzk5YVx1NzlhN1x1NzliM1x1NWZkMVx1NWZkMFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIzNl0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjM2XVtnXS5jaGFyQ29kZUF0KDApJiYo''@;'; put 'put ''SVt5WzIzNl1bZ11dPTYwNDE2K2csX1s2MDQxNitnXT15WzIzNl1bZ10pO2Zvcih5WzIzN109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTc5ZVx1OTc5Zlx1OTdhMVx1OTdhMlx1OTdhNFx1OTdhNVx1OTdhNlx1OTdhN1x1OTdhOFx1''@;'; put 'put ''OTdhOVx1OTdhYVx1OTdhY1x1OTdhZVx1OTdiMFx1OTdiMVx1OTdiM1x1OTdiNVx1OTdiNlx1OTdiN1x1OTdiOFx1OTdiOVx1OTdiYVx1OTdiYlx1OTdiY1x1OTdiZFx1OTdiZVx1OTdiZlx1OTdjMFx1OTdjMVx1OTdjMlx1OTdjM1x1OTdjNFx1OTdjNVx1OTdjNlx1OTdjN1x1OTdjOFx1OTdj''@;'; put 'put ''OVx1OTdjYVx1OTdjYlx1OTdjY1x1OTdjZFx1OTdjZVx1OTdjZlx1OTdkMFx1OTdkMVx1OTdkMlx1OTdkM1x1OTdkNFx1OTdkNVx1OTdkNlx1OTdkN1x1OTdkOFx1OTdkOVx1OTdkYVx1OTdkYlx1OTdkY1x1OTdkZFx1OTdkZVx1OTdkZlx1OTdlMFx1OTdlMVx1OTdlMlx1OTdlM1x1ZmZmZFx1''@;'; put 'put ''OTdlNFx1OTdlNVx1OTdlOFx1OTdlZVx1OTdlZlx1OTdmMFx1OTdmMVx1OTdmMlx1OTdmNFx1OTdmN1x1OTdmOFx1OTdmOVx1OTdmYVx1OTdmYlx1OTdmY1x1OTdmZFx1OTdmZVx1OTdmZlx1OTgwMFx1OTgwMVx1OTgwMlx1OTgwM1x1OTgwNFx1OTgwNVx1OTgwNlx1OTgwN1x1OTgwOFx1OTgw''@;'; put 'put ''OVx1OTgwYVx1OTgwYlx1OTgwY1x1OTgwZFx1OTgwZVx1NjAzY1x1NjA1ZFx1NjA1YVx1NjA2N1x1NjA0MVx1NjA1OVx1NjA2M1x1NjBhYlx1NjEwNlx1NjEwZFx1NjE1ZFx1NjFhOVx1NjE5ZFx1NjFjYlx1NjFkMVx1NjIwNlx1ODA4MFx1ODA3Zlx1NmM5M1x1NmNmNlx1NmRmY1x1NzdmNlx1''@;'; put 'put ''NzdmOFx1NzgwMFx1NzgwOVx1NzgxN1x1NzgxOFx1NzgxMVx1NjVhYlx1NzgyZFx1NzgxY1x1NzgxZFx1NzgzOVx1NzgzYVx1NzgzYlx1NzgxZlx1NzgzY1x1NzgyNVx1NzgyY1x1NzgyM1x1NzgyOVx1Nzg0ZVx1Nzg2ZFx1Nzg1Nlx1Nzg1N1x1NzgyNlx1Nzg1MFx1Nzg0N1x1Nzg0Y1x1Nzg2''@;'; put 'put ''YVx1Nzg5Ylx1Nzg5M1x1Nzg5YVx1Nzg4N1x1Nzg5Y1x1NzhhMVx1NzhhM1x1NzhiMlx1NzhiOVx1NzhhNVx1NzhkNFx1NzhkOVx1NzhjOVx1NzhlY1x1NzhmMlx1NzkwNVx1NzhmNFx1NzkxM1x1NzkyNFx1NzkxZVx1NzkzNFx1OWY5Ylx1OWVmOVx1OWVmYlx1OWVmY1x1NzZmMVx1NzcwNFx1''@;'; put 'put ''NzcwZFx1NzZmOVx1NzcwN1x1NzcwOFx1NzcxYVx1NzcyMlx1NzcxOVx1NzcyZFx1NzcyNlx1NzczNVx1NzczOFx1Nzc1MFx1Nzc1MVx1Nzc0N1x1Nzc0M1x1Nzc1YVx1Nzc2OFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIzN10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjM3XVtnXS5jaGFy''@;'; put 'put ''Q29kZUF0KDApJiYoSVt5WzIzN11bZ11dPTYwNjcyK2csX1s2MDY3MitnXT15WzIzN11bZ10pO2Zvcih5WzIzOF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTgwZlx1OTgxMFx1OTgxMVx1OTgxMlx1OTgxM1x1OTgxNFx1OTgxNVx1''@;'; put 'put ''OTgxNlx1OTgxN1x1OTgxOFx1OTgxOVx1OTgxYVx1OTgxYlx1OTgxY1x1OTgxZFx1OTgxZVx1OTgxZlx1OTgyMFx1OTgyMVx1OTgyMlx1OTgyM1x1OTgyNFx1OTgyNVx1OTgyNlx1OTgyN1x1OTgyOFx1OTgyOVx1OTgyYVx1OTgyYlx1OTgyY1x1OTgyZFx1OTgyZVx1OTgyZlx1OTgzMFx1OTgz''@;'; put 'put ''MVx1OTgzMlx1OTgzM1x1OTgzNFx1OTgzNVx1OTgzNlx1OTgzN1x1OTgzOFx1OTgzOVx1OTgzYVx1OTgzYlx1OTgzY1x1OTgzZFx1OTgzZVx1OTgzZlx1OTg0MFx1OTg0MVx1OTg0Mlx1OTg0M1x1OTg0NFx1OTg0NVx1OTg0Nlx1OTg0N1x1OTg0OFx1OTg0OVx1OTg0YVx1OTg0Ylx1OTg0Y1x1''@;'; put 'put ''OTg0ZFx1ZmZmZFx1OTg0ZVx1OTg0Zlx1OTg1MFx1OTg1MVx1OTg1Mlx1OTg1M1x1OTg1NFx1OTg1NVx1OTg1Nlx1OTg1N1x1OTg1OFx1OTg1OVx1OTg1YVx1OTg1Ylx1OTg1Y1x1OTg1ZFx1OTg1ZVx1OTg1Zlx1OTg2MFx1OTg2MVx1OTg2Mlx1OTg2M1x1OTg2NFx1OTg2NVx1OTg2Nlx1OTg2''@;'; put 'put ''N1x1OTg2OFx1OTg2OVx1OTg2YVx1OTg2Ylx1OTg2Y1x1OTg2ZFx1OTg2ZVx1Nzc2Mlx1Nzc2NVx1Nzc3Zlx1Nzc4ZFx1Nzc3ZFx1Nzc4MFx1Nzc4Y1x1Nzc5MVx1Nzc5Zlx1NzdhMFx1NzdiMFx1NzdiNVx1NzdiZFx1NzUzYVx1NzU0MFx1NzU0ZVx1NzU0Ylx1NzU0OFx1NzU1Ylx1NzU3Mlx1''@;'; put 'put ''NzU3OVx1NzU4M1x1N2Y1OFx1N2Y2MVx1N2Y1Zlx1OGE0OFx1N2Y2OFx1N2Y3NFx1N2Y3MVx1N2Y3OVx1N2Y4MVx1N2Y3ZVx1NzZjZFx1NzZlNVx1ODgzMlx1OTQ4NVx1OTQ4Nlx1OTQ4N1x1OTQ4Ylx1OTQ4YVx1OTQ4Y1x1OTQ4ZFx1OTQ4Zlx1OTQ5MFx1OTQ5NFx1OTQ5N1x1OTQ5NVx1OTQ5''@;'; put 'put ''YVx1OTQ5Ylx1OTQ5Y1x1OTRhM1x1OTRhNFx1OTRhYlx1OTRhYVx1OTRhZFx1OTRhY1x1OTRhZlx1OTRiMFx1OTRiMlx1OTRiNFx1OTRiNlx1OTRiN1x1OTRiOFx1OTRiOVx1OTRiYVx1OTRiY1x1OTRiZFx1OTRiZlx1OTRjNFx1OTRjOFx1OTRjOVx1OTRjYVx1OTRjYlx1OTRjY1x1OTRjZFx1''@;'; put 'put ''OTRjZVx1OTRkMFx1OTRkMVx1OTRkMlx1OTRkNVx1OTRkNlx1OTRkN1x1OTRkOVx1OTRkOFx1OTRkYlx1OTRkZVx1OTRkZlx1OTRlMFx1OTRlMlx1OTRlNFx1OTRlNVx1OTRlN1x1OTRlOFx1OTRlYVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIzOF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlb''@;'; put 'put ''MjM4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIzOF1bZ11dPTYwOTI4K2csX1s2MDkyOCtnXT15WzIzOF1bZ10pO2Zvcih5WzIzOV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTg2Zlx1OTg3MFx1OTg3MVx1OTg3Mlx1OTg3M1x1''@;'; put 'put ''OTg3NFx1OTg4Ylx1OTg4ZVx1OTg5Mlx1OTg5NVx1OTg5OVx1OThhM1x1OThhOFx1OThhOVx1OThhYVx1OThhYlx1OThhY1x1OThhZFx1OThhZVx1OThhZlx1OThiMFx1OThiMVx1OThiMlx1OThiM1x1OThiNFx1OThiNVx1OThiNlx1OThiN1x1OThiOFx1OThiOVx1OThiYVx1OThiYlx1OThi''@;'; put 'put ''Y1x1OThiZFx1OThiZVx1OThiZlx1OThjMFx1OThjMVx1OThjMlx1OThjM1x1OThjNFx1OThjNVx1OThjNlx1OThjN1x1OThjOFx1OThjOVx1OThjYVx1OThjYlx1OThjY1x1OThjZFx1OThjZlx1OThkMFx1OThkNFx1OThkNlx1OThkN1x1OThkYlx1OThkY1x1OThkZFx1OThlMFx1OThlMVx1''@;'; put 'put ''OThlMlx1OThlM1x1OThlNFx1ZmZmZFx1OThlNVx1OThlNlx1OThlOVx1OThlYVx1OThlYlx1OThlY1x1OThlZFx1OThlZVx1OThlZlx1OThmMFx1OThmMVx1OThmMlx1OThmM1x1OThmNFx1OThmNVx1OThmNlx1OThmN1x1OThmOFx1OThmOVx1OThmYVx1OThmYlx1OThmY1x1OThmZFx1OThm''@;'; put 'put ''ZVx1OThmZlx1OTkwMFx1OTkwMVx1OTkwMlx1OTkwM1x1OTkwNFx1OTkwNVx1OTkwNlx1OTkwN1x1OTRlOVx1OTRlYlx1OTRlZVx1OTRlZlx1OTRmM1x1OTRmNFx1OTRmNVx1OTRmN1x1OTRmOVx1OTRmY1x1OTRmZFx1OTRmZlx1OTUwM1x1OTUwMlx1OTUwNlx1OTUwN1x1OTUwOVx1OTUwYVx1''@;'; put 'put ''OTUwZFx1OTUwZVx1OTUwZlx1OTUxMlx1OTUxM1x1OTUxNFx1OTUxNVx1OTUxNlx1OTUxOFx1OTUxYlx1OTUxZFx1OTUxZVx1OTUxZlx1OTUyMlx1OTUyYVx1OTUyYlx1OTUyOVx1OTUyY1x1OTUzMVx1OTUzMlx1OTUzNFx1OTUzNlx1OTUzN1x1OTUzOFx1OTUzY1x1OTUzZVx1OTUzZlx1OTU0''@;'; put 'put ''Mlx1OTUzNVx1OTU0NFx1OTU0NVx1OTU0Nlx1OTU0OVx1OTU0Y1x1OTU0ZVx1OTU0Zlx1OTU1Mlx1OTU1M1x1OTU1NFx1OTU1Nlx1OTU1N1x1OTU1OFx1OTU1OVx1OTU1Ylx1OTU1ZVx1OTU1Zlx1OTU1ZFx1OTU2MVx1OTU2Mlx1OTU2NFx1OTU2NVx1OTU2Nlx1OTU2N1x1OTU2OFx1OTU2OVx1''@;'; put 'put ''OTU2YVx1OTU2Ylx1OTU2Y1x1OTU2Zlx1OTU3MVx1OTU3Mlx1OTU3M1x1OTUzYVx1NzdlN1x1NzdlY1x1OTZjOVx1NzlkNVx1NzllZFx1NzllM1x1NzllYlx1N2EwNlx1NWQ0N1x1N2EwM1x1N2EwMlx1N2ExZVx1N2ExNFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzIzOV0ubGVuZ3RoOysr''@;'; put 'put ''Zyk2NTUzMyE9PXlbMjM5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzIzOV1bZ11dPTYxMTg0K2csX1s2MTE4NCtnXT15WzIzOV1bZ10pO2Zvcih5WzI0MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTkwOFx1OTkwOVx1OTkwYVx1''@;'; put 'put ''OTkwYlx1OTkwY1x1OTkwZVx1OTkwZlx1OTkxMVx1OTkxMlx1OTkxM1x1OTkxNFx1OTkxNVx1OTkxNlx1OTkxN1x1OTkxOFx1OTkxOVx1OTkxYVx1OTkxYlx1OTkxY1x1OTkxZFx1OTkxZVx1OTkxZlx1OTkyMFx1OTkyMVx1OTkyMlx1OTkyM1x1OTkyNFx1OTkyNVx1OTkyNlx1OTkyN1x1OTky''@;'; put 'put ''OFx1OTkyOVx1OTkyYVx1OTkyYlx1OTkyY1x1OTkyZFx1OTkyZlx1OTkzMFx1OTkzMVx1OTkzMlx1OTkzM1x1OTkzNFx1OTkzNVx1OTkzNlx1OTkzN1x1OTkzOFx1OTkzOVx1OTkzYVx1OTkzYlx1OTkzY1x1OTkzZFx1OTkzZVx1OTkzZlx1OTk0MFx1OTk0MVx1OTk0Mlx1OTk0M1x1OTk0NFx1''@;'; put 'put ''OTk0NVx1OTk0Nlx1OTk0N1x1OTk0OFx1OTk0OVx1ZmZmZFx1OTk0YVx1OTk0Ylx1OTk0Y1x1OTk0ZFx1OTk0ZVx1OTk0Zlx1OTk1MFx1OTk1MVx1OTk1Mlx1OTk1M1x1OTk1Nlx1OTk1N1x1OTk1OFx1OTk1OVx1OTk1YVx1OTk1Ylx1OTk1Y1x1OTk1ZFx1OTk1ZVx1OTk1Zlx1OTk2MFx1OTk2''@;'; put 'put ''MVx1OTk2Mlx1OTk2NFx1OTk2Nlx1OTk3M1x1OTk3OFx1OTk3OVx1OTk3Ylx1OTk3ZVx1OTk4Mlx1OTk4M1x1OTk4OVx1N2EzOVx1N2EzN1x1N2E1MVx1OWVjZlx1OTlhNVx1N2E3MFx1NzY4OFx1NzY4ZVx1NzY5M1x1NzY5OVx1NzZhNFx1NzRkZVx1NzRlMFx1NzUyY1x1OWUyMFx1OWUyMlx1''@;'; put 'put ''OWUyOFx1OWUyOVx1OWUyYVx1OWUyYlx1OWUyY1x1OWUzMlx1OWUzMVx1OWUzNlx1OWUzOFx1OWUzN1x1OWUzOVx1OWUzYVx1OWUzZVx1OWU0MVx1OWU0Mlx1OWU0NFx1OWU0Nlx1OWU0N1x1OWU0OFx1OWU0OVx1OWU0Ylx1OWU0Y1x1OWU0ZVx1OWU1MVx1OWU1NVx1OWU1N1x1OWU1YVx1OWU1''@;'; put 'put ''Ylx1OWU1Y1x1OWU1ZVx1OWU2M1x1OWU2Nlx1OWU2N1x1OWU2OFx1OWU2OVx1OWU2YVx1OWU2Ylx1OWU2Y1x1OWU3MVx1OWU2ZFx1OWU3M1x1NzU5Mlx1NzU5NFx1NzU5Nlx1NzVhMFx1NzU5ZFx1NzVhY1x1NzVhM1x1NzViM1x1NzViNFx1NzViOFx1NzVjNFx1NzViMVx1NzViMFx1NzVjM1x1''@;'; put 'put ''NzVjMlx1NzVkNlx1NzVjZFx1NzVlM1x1NzVlOFx1NzVlNlx1NzVlNFx1NzVlYlx1NzVlN1x1NzYwM1x1NzVmMVx1NzVmY1x1NzVmZlx1NzYxMFx1NzYwMFx1NzYwNVx1NzYwY1x1NzYxN1x1NzYwYVx1NzYyNVx1NzYxOFx1NzYxNVx1NzYxOVx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzI0''@;'; put 'put ''MF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjQwXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzI0MF1bZ11dPTYxNDQwK2csX1s2MTQ0MCtnXT15WzI0MF1bZ10pO2Zvcih5WzI0MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OTk4Y1x1''@;'; put 'put ''OTk4ZVx1OTk5YVx1OTk5Ylx1OTk5Y1x1OTk5ZFx1OTk5ZVx1OTk5Zlx1OTlhMFx1OTlhMVx1OTlhMlx1OTlhM1x1OTlhNFx1OTlhNlx1OTlhN1x1OTlhOVx1OTlhYVx1OTlhYlx1OTlhY1x1OTlhZFx1OTlhZVx1OTlhZlx1OTliMFx1OTliMVx1OTliMlx1OTliM1x1OTliNFx1OTliNVx1OTli''@;'; put 'put ''Nlx1OTliN1x1OTliOFx1OTliOVx1OTliYVx1OTliYlx1OTliY1x1OTliZFx1OTliZVx1OTliZlx1OTljMFx1OTljMVx1OTljMlx1OTljM1x1OTljNFx1OTljNVx1OTljNlx1OTljN1x1OTljOFx1OTljOVx1OTljYVx1OTljYlx1OTljY1x1OTljZFx1OTljZVx1OTljZlx1OTlkMFx1OTlkMVx1''@;'; put 'put ''OTlkMlx1OTlkM1x1OTlkNFx1OTlkNVx1OTlkNlx1OTlkN1x1OTlkOFx1ZmZmZFx1OTlkOVx1OTlkYVx1OTlkYlx1OTlkY1x1OTlkZFx1OTlkZVx1OTlkZlx1OTllMFx1OTllMVx1OTllMlx1OTllM1x1OTllNFx1OTllNVx1OTllNlx1OTllN1x1OTllOFx1OTllOVx1OTllYVx1OTllYlx1OTll''@;'; put 'put ''Y1x1OTllZFx1OTllZVx1OTllZlx1OTlmMFx1OTlmMVx1OTlmMlx1OTlmM1x1OTlmNFx1OTlmNVx1OTlmNlx1OTlmN1x1OTlmOFx1OTlmOVx1NzYxYlx1NzYzY1x1NzYyMlx1NzYyMFx1NzY0MFx1NzYyZFx1NzYzMFx1NzYzZlx1NzYzNVx1NzY0M1x1NzYzZVx1NzYzM1x1NzY0ZFx1NzY1ZVx1''@;'; put 'put ''NzY1NFx1NzY1Y1x1NzY1Nlx1NzY2Ylx1NzY2Zlx1N2ZjYVx1N2FlNlx1N2E3OFx1N2E3OVx1N2E4MFx1N2E4Nlx1N2E4OFx1N2E5NVx1N2FhNlx1N2FhMFx1N2FhY1x1N2FhOFx1N2FhZFx1N2FiM1x1ODg2NFx1ODg2OVx1ODg3Mlx1ODg3ZFx1ODg3Zlx1ODg4Mlx1ODhhMlx1ODhjNlx1ODhi''@;'; put 'put ''N1x1ODhiY1x1ODhjOVx1ODhlMlx1ODhjZVx1ODhlM1x1ODhlNVx1ODhmMVx1ODkxYVx1ODhmY1x1ODhlOFx1ODhmZVx1ODhmMFx1ODkyMVx1ODkxOVx1ODkxM1x1ODkxYlx1ODkwYVx1ODkzNFx1ODkyYlx1ODkzNlx1ODk0MVx1ODk2Nlx1ODk3Ylx1NzU4Ylx1ODBlNVx1NzZiMlx1NzZiNFx1''@;'; put 'put ''NzdkY1x1ODAxMlx1ODAxNFx1ODAxNlx1ODAxY1x1ODAyMFx1ODAyMlx1ODAyNVx1ODAyNlx1ODAyN1x1ODAyOVx1ODAyOFx1ODAzMVx1ODAwYlx1ODAzNVx1ODA0M1x1ODA0Nlx1ODA0ZFx1ODA1Mlx1ODA2OVx1ODA3MVx1ODk4M1x1OTg3OFx1OTg4MFx1OTg4M1x1ZmZmZCIuc3BsaXQoIiIp''@;'; put 'put ''LGc9MDtnIT15WzI0MV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjQxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzI0MV1bZ11dPTYxNjk2K2csX1s2MTY5NitnXT15WzI0MV1bZ10pO2Zvcih5WzI0Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1OTlmYVx1OTlmYlx1OTlmY1x1OTlmZFx1OTlmZVx1OTlmZlx1OWEwMFx1OWEwMVx1OWEwMlx1OWEwM1x1OWEwNFx1OWEwNVx1OWEwNlx1OWEwN1x1OWEwOFx1OWEwOVx1OWEwYVx1OWEwYlx1OWEwY1x1OWEwZFx1OWEwZVx1OWEwZlx1OWExMFx1OWExMVx1OWExMlx1OWExM1x1OWEx''@;'; put 'put ''NFx1OWExNVx1OWExNlx1OWExN1x1OWExOFx1OWExOVx1OWExYVx1OWExYlx1OWExY1x1OWExZFx1OWExZVx1OWExZlx1OWEyMFx1OWEyMVx1OWEyMlx1OWEyM1x1OWEyNFx1OWEyNVx1OWEyNlx1OWEyN1x1OWEyOFx1OWEyOVx1OWEyYVx1OWEyYlx1OWEyY1x1OWEyZFx1OWEyZVx1OWEyZlx1''@;'; put 'put ''OWEzMFx1OWEzMVx1OWEzMlx1OWEzM1x1OWEzNFx1OWEzNVx1OWEzNlx1OWEzN1x1OWEzOFx1ZmZmZFx1OWEzOVx1OWEzYVx1OWEzYlx1OWEzY1x1OWEzZFx1OWEzZVx1OWEzZlx1OWE0MFx1OWE0MVx1OWE0Mlx1OWE0M1x1OWE0NFx1OWE0NVx1OWE0Nlx1OWE0N1x1OWE0OFx1OWE0OVx1OWE0''@;'; put 'put ''YVx1OWE0Ylx1OWE0Y1x1OWE0ZFx1OWE0ZVx1OWE0Zlx1OWE1MFx1OWE1MVx1OWE1Mlx1OWE1M1x1OWE1NFx1OWE1NVx1OWE1Nlx1OWE1N1x1OWE1OFx1OWE1OVx1OTg4OVx1OTg4Y1x1OTg4ZFx1OTg4Zlx1OTg5NFx1OTg5YVx1OTg5Ylx1OTg5ZVx1OTg5Zlx1OThhMVx1OThhMlx1OThhNVx1''@;'; put 'put ''OThhNlx1ODY0ZFx1ODY1NFx1ODY2Y1x1ODY2ZVx1ODY3Zlx1ODY3YVx1ODY3Y1x1ODY3Ylx1ODZhOFx1ODY4ZFx1ODY4Ylx1ODZhY1x1ODY5ZFx1ODZhN1x1ODZhM1x1ODZhYVx1ODY5M1x1ODZhOVx1ODZiNlx1ODZjNFx1ODZiNVx1ODZjZVx1ODZiMFx1ODZiYVx1ODZiMVx1ODZhZlx1ODZj''@;'; put 'put ''OVx1ODZjZlx1ODZiNFx1ODZlOVx1ODZmMVx1ODZmMlx1ODZlZFx1ODZmM1x1ODZkMFx1ODcxM1x1ODZkZVx1ODZmNFx1ODZkZlx1ODZkOFx1ODZkMVx1ODcwM1x1ODcwN1x1ODZmOFx1ODcwOFx1ODcwYVx1ODcwZFx1ODcwOVx1ODcyM1x1ODczYlx1ODcxZVx1ODcyNVx1ODcyZVx1ODcxYVx1''@;'; put 'put ''ODczZVx1ODc0OFx1ODczNFx1ODczMVx1ODcyOVx1ODczN1x1ODczZlx1ODc4Mlx1ODcyMlx1ODc3ZFx1ODc3ZVx1ODc3Ylx1ODc2MFx1ODc3MFx1ODc0Y1x1ODc2ZVx1ODc4Ylx1ODc1M1x1ODc2M1x1ODc3Y1x1ODc2NFx1ODc1OVx1ODc2NVx1ODc5M1x1ODdhZlx1ODdhOFx1ODdkMlx1ZmZm''@;'; put 'put ''ZCIuc3BsaXQoIiIpLGc9MDtnIT15WzI0Ml0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjQyXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzI0Ml1bZ11dPTYxOTUyK2csX1s2MTk1MitnXT15WzI0Ml1bZ10pO2Zvcih5WzI0M109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1OWE1YVx1OWE1Ylx1OWE1Y1x1OWE1ZFx1OWE1ZVx1OWE1Zlx1OWE2MFx1OWE2MVx1OWE2Mlx1OWE2M1x1OWE2NFx1OWE2NVx1OWE2Nlx1OWE2N1x1OWE2OFx1OWE2OVx1OWE2YVx1OWE2Ylx1OWE3Mlx1OWE4M1x1OWE4OVx1OWE4ZFx1OWE4ZVx1OWE5NFx1OWE5''@;'; put 'put ''NVx1OWE5OVx1OWFhNlx1OWFhOVx1OWFhYVx1OWFhYlx1OWFhY1x1OWFhZFx1OWFhZVx1OWFhZlx1OWFiMlx1OWFiM1x1OWFiNFx1OWFiNVx1OWFiOVx1OWFiYlx1OWFiZFx1OWFiZVx1OWFiZlx1OWFjM1x1OWFjNFx1OWFjNlx1OWFjN1x1OWFjOFx1OWFjOVx1OWFjYVx1OWFjZFx1OWFjZVx1''@;'; put 'put ''OWFjZlx1OWFkMFx1OWFkMlx1OWFkNFx1OWFkNVx1OWFkNlx1OWFkN1x1OWFkOVx1OWFkYVx1OWFkYlx1OWFkY1x1ZmZmZFx1OWFkZFx1OWFkZVx1OWFlMFx1OWFlMlx1OWFlM1x1OWFlNFx1OWFlNVx1OWFlN1x1OWFlOFx1OWFlOVx1OWFlYVx1OWFlY1x1OWFlZVx1OWFmMFx1OWFmMVx1OWFm''@;'; put 'put ''Mlx1OWFmM1x1OWFmNFx1OWFmNVx1OWFmNlx1OWFmN1x1OWFmOFx1OWFmYVx1OWFmY1x1OWFmZFx1OWFmZVx1OWFmZlx1OWIwMFx1OWIwMVx1OWIwMlx1OWIwNFx1OWIwNVx1OWIwNlx1ODdjNlx1ODc4OFx1ODc4NVx1ODdhZFx1ODc5N1x1ODc4M1x1ODdhYlx1ODdlNVx1ODdhY1x1ODdiNVx1''@;'; put 'put ''ODdiM1x1ODdjYlx1ODdkM1x1ODdiZFx1ODdkMVx1ODdjMFx1ODdjYVx1ODdkYlx1ODdlYVx1ODdlMFx1ODdlZVx1ODgxNlx1ODgxM1x1ODdmZVx1ODgwYVx1ODgxYlx1ODgyMVx1ODgzOVx1ODgzY1x1N2YzNlx1N2Y0Mlx1N2Y0NFx1N2Y0NVx1ODIxMFx1N2FmYVx1N2FmZFx1N2IwOFx1N2Iw''@;'; put 'put ''M1x1N2IwNFx1N2IxNVx1N2IwYVx1N2IyYlx1N2IwZlx1N2I0N1x1N2IzOFx1N2IyYVx1N2IxOVx1N2IyZVx1N2IzMVx1N2IyMFx1N2IyNVx1N2IyNFx1N2IzM1x1N2IzZVx1N2IxZVx1N2I1OFx1N2I1YVx1N2I0NVx1N2I3NVx1N2I0Y1x1N2I1ZFx1N2I2MFx1N2I2ZVx1N2I3Ylx1N2I2Mlx1''@;'; put 'put ''N2I3Mlx1N2I3MVx1N2I5MFx1N2JhNlx1N2JhN1x1N2JiOFx1N2JhY1x1N2I5ZFx1N2JhOFx1N2I4NVx1N2JhYVx1N2I5Y1x1N2JhMlx1N2JhYlx1N2JiNFx1N2JkMVx1N2JjMVx1N2JjY1x1N2JkZFx1N2JkYVx1N2JlNVx1N2JlNlx1N2JlYVx1N2MwY1x1N2JmZVx1N2JmY1x1N2MwZlx1N2Mx''@;'; put 'put ''Nlx1N2MwYlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzI0M10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjQzXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzI0M11bZ11dPTYyMjA4K2csX1s2MjIwOCtnXT15WzI0M11bZ10pO2Zvcih5WzI0NF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWIwN1x1OWIwOVx1OWIwYVx1OWIwYlx1OWIwY1x1OWIwZFx1OWIwZVx1OWIxMFx1OWIxMVx1OWIxMlx1OWIxNFx1OWIxNVx1OWIxNlx1OWIxN1x1OWIxOFx1OWIxOVx1OWIxYVx1OWIxYlx1OWIxY1x1OWIxZFx1OWIxZVx1OWIyMFx1OWIy''@;'; put 'put ''MVx1OWIyMlx1OWIyNFx1OWIyNVx1OWIyNlx1OWIyN1x1OWIyOFx1OWIyOVx1OWIyYVx1OWIyYlx1OWIyY1x1OWIyZFx1OWIyZVx1OWIzMFx1OWIzMVx1OWIzM1x1OWIzNFx1OWIzNVx1OWIzNlx1OWIzN1x1OWIzOFx1OWIzOVx1OWIzYVx1OWIzZFx1OWIzZVx1OWIzZlx1OWI0MFx1OWI0Nlx1''@;'; put 'put ''OWI0YVx1OWI0Ylx1OWI0Y1x1OWI0ZVx1OWI1MFx1OWI1Mlx1OWI1M1x1OWI1NVx1OWI1Nlx1OWI1N1x1OWI1OFx1OWI1OVx1OWI1YVx1ZmZmZFx1OWI1Ylx1OWI1Y1x1OWI1ZFx1OWI1ZVx1OWI1Zlx1OWI2MFx1OWI2MVx1OWI2Mlx1OWI2M1x1OWI2NFx1OWI2NVx1OWI2Nlx1OWI2N1x1OWI2''@;'; put 'put ''OFx1OWI2OVx1OWI2YVx1OWI2Ylx1OWI2Y1x1OWI2ZFx1OWI2ZVx1OWI2Zlx1OWI3MFx1OWI3MVx1OWI3Mlx1OWI3M1x1OWI3NFx1OWI3NVx1OWI3Nlx1OWI3N1x1OWI3OFx1OWI3OVx1OWI3YVx1OWI3Ylx1N2MxZlx1N2MyYVx1N2MyNlx1N2MzOFx1N2M0MVx1N2M0MFx1ODFmZVx1ODIwMVx1''@;'; put 'put ''ODIwMlx1ODIwNFx1ODFlY1x1ODg0NFx1ODIyMVx1ODIyMlx1ODIyM1x1ODIyZFx1ODIyZlx1ODIyOFx1ODIyYlx1ODIzOFx1ODIzYlx1ODIzM1x1ODIzNFx1ODIzZVx1ODI0NFx1ODI0OVx1ODI0Ylx1ODI0Zlx1ODI1YVx1ODI1Zlx1ODI2OFx1ODg3ZVx1ODg4NVx1ODg4OFx1ODhkOFx1ODhk''@;'; put 'put ''Zlx1ODk1ZVx1N2Y5ZFx1N2Y5Zlx1N2ZhN1x1N2ZhZlx1N2ZiMFx1N2ZiMlx1N2M3Y1x1NjU0OVx1N2M5MVx1N2M5ZFx1N2M5Y1x1N2M5ZVx1N2NhMlx1N2NiMlx1N2NiY1x1N2NiZFx1N2NjMVx1N2NjN1x1N2NjY1x1N2NjZFx1N2NjOFx1N2NjNVx1N2NkN1x1N2NlOFx1ODI2ZVx1NjZhOFx1''@;'; put 'put ''N2ZiZlx1N2ZjZVx1N2ZkNVx1N2ZlNVx1N2ZlMVx1N2ZlNlx1N2ZlOVx1N2ZlZVx1N2ZmM1x1N2NmOFx1N2Q3N1x1N2RhNlx1N2RhZVx1N2U0N1x1N2U5Ylx1OWViOFx1OWViNFx1OGQ3M1x1OGQ4NFx1OGQ5NFx1OGQ5MVx1OGRiMVx1OGQ2N1x1OGQ2ZFx1OGM0N1x1OGM0OVx1OTE0YVx1OTE1''@;'; put 'put ''MFx1OTE0ZVx1OTE0Zlx1OTE2NFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzI0NF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjQ0XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzI0NF1bZ11dPTYyNDY0K2csX1s2MjQ2NCtnXT15WzI0NF1bZ10pO2Zvcih5WzI0NV09Ilx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWI3Y1x1OWI3ZFx1OWI3ZVx1OWI3Zlx1OWI4MFx1OWI4MVx1OWI4Mlx1OWI4M1x1OWI4NFx1OWI4NVx1OWI4Nlx1OWI4N1x1OWI4OFx1OWI4OVx1OWI4YVx1OWI4Ylx1OWI4Y1x1OWI4ZFx1OWI4ZVx1OWI4Zlx1OWI5''@;'; put 'put ''MFx1OWI5MVx1OWI5Mlx1OWI5M1x1OWI5NFx1OWI5NVx1OWI5Nlx1OWI5N1x1OWI5OFx1OWI5OVx1OWI5YVx1OWI5Ylx1OWI5Y1x1OWI5ZFx1OWI5ZVx1OWI5Zlx1OWJhMFx1OWJhMVx1OWJhMlx1OWJhM1x1OWJhNFx1OWJhNVx1OWJhNlx1OWJhN1x1OWJhOFx1OWJhOVx1OWJhYVx1OWJhYlx1''@;'; put 'put ''OWJhY1x1OWJhZFx1OWJhZVx1OWJhZlx1OWJiMFx1OWJiMVx1OWJiMlx1OWJiM1x1OWJiNFx1OWJiNVx1OWJiNlx1OWJiN1x1OWJiOFx1OWJiOVx1OWJiYVx1ZmZmZFx1OWJiYlx1OWJiY1x1OWJiZFx1OWJiZVx1OWJiZlx1OWJjMFx1OWJjMVx1OWJjMlx1OWJjM1x1OWJjNFx1OWJjNVx1OWJj''@;'; put 'put ''Nlx1OWJjN1x1OWJjOFx1OWJjOVx1OWJjYVx1OWJjYlx1OWJjY1x1OWJjZFx1OWJjZVx1OWJjZlx1OWJkMFx1OWJkMVx1OWJkMlx1OWJkM1x1OWJkNFx1OWJkNVx1OWJkNlx1OWJkN1x1OWJkOFx1OWJkOVx1OWJkYVx1OWJkYlx1OTE2Mlx1OTE2MVx1OTE3MFx1OTE2OVx1OTE2Zlx1OTE3ZFx1''@;'; put 'put ''OTE3ZVx1OTE3Mlx1OTE3NFx1OTE3OVx1OTE4Y1x1OTE4NVx1OTE5MFx1OTE4ZFx1OTE5MVx1OTFhMlx1OTFhM1x1OTFhYVx1OTFhZFx1OTFhZVx1OTFhZlx1OTFiNVx1OTFiNFx1OTFiYVx1OGM1NVx1OWU3ZVx1OGRiOFx1OGRlYlx1OGUwNVx1OGU1OVx1OGU2OVx1OGRiNVx1OGRiZlx1OGRi''@;'; put 'put ''Y1x1OGRiYVx1OGRjNFx1OGRkNlx1OGRkN1x1OGRkYVx1OGRkZVx1OGRjZVx1OGRjZlx1OGRkYlx1OGRjNlx1OGRlY1x1OGRmN1x1OGRmOFx1OGRlM1x1OGRmOVx1OGRmYlx1OGRlNFx1OGUwOVx1OGRmZFx1OGUxNFx1OGUxZFx1OGUxZlx1OGUyY1x1OGUyZVx1OGUyM1x1OGUyZlx1OGUzYVx1''@;'; put 'put ''OGU0MFx1OGUzOVx1OGUzNVx1OGUzZFx1OGUzMVx1OGU0OVx1OGU0MVx1OGU0Mlx1OGU1MVx1OGU1Mlx1OGU0YVx1OGU3MFx1OGU3Nlx1OGU3Y1x1OGU2Zlx1OGU3NFx1OGU4NVx1OGU4Zlx1OGU5NFx1OGU5MFx1OGU5Y1x1OGU5ZVx1OGM3OFx1OGM4Mlx1OGM4YVx1OGM4NVx1OGM5OFx1OGM5''@;'; put 'put ''NFx1NjU5Ylx1ODlkNlx1ODlkZVx1ODlkYVx1ODlkY1x1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzI0NV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjQ1XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzI0NV1bZ11dPTYyNzIwK2csX1s2MjcyMCtnXT15WzI0NV1bZ10pO2Zvcih5WzI0Nl09Ilx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWJkY1x1OWJkZFx1OWJkZVx1OWJkZlx1OWJlMFx1OWJlMVx1OWJlMlx1OWJlM1x1OWJlNFx1OWJlNVx1OWJlNlx1OWJlN1x1OWJlOFx1OWJlOVx1OWJlYVx1OWJlYlx1OWJlY1x1OWJlZFx1OWJl''@;'; put 'put ''ZVx1OWJlZlx1OWJmMFx1OWJmMVx1OWJmMlx1OWJmM1x1OWJmNFx1OWJmNVx1OWJmNlx1OWJmN1x1OWJmOFx1OWJmOVx1OWJmYVx1OWJmYlx1OWJmY1x1OWJmZFx1OWJmZVx1OWJmZlx1OWMwMFx1OWMwMVx1OWMwMlx1OWMwM1x1OWMwNFx1OWMwNVx1OWMwNlx1OWMwN1x1OWMwOFx1OWMwOVx1''@;'; put 'put ''OWMwYVx1OWMwYlx1OWMwY1x1OWMwZFx1OWMwZVx1OWMwZlx1OWMxMFx1OWMxMVx1OWMxMlx1OWMxM1x1OWMxNFx1OWMxNVx1OWMxNlx1OWMxN1x1OWMxOFx1OWMxOVx1OWMxYVx1ZmZmZFx1OWMxYlx1OWMxY1x1OWMxZFx1OWMxZVx1OWMxZlx1OWMyMFx1OWMyMVx1OWMyMlx1OWMyM1x1OWMy''@;'; put 'put ''NFx1OWMyNVx1OWMyNlx1OWMyN1x1OWMyOFx1OWMyOVx1OWMyYVx1OWMyYlx1OWMyY1x1OWMyZFx1OWMyZVx1OWMyZlx1OWMzMFx1OWMzMVx1OWMzMlx1OWMzM1x1OWMzNFx1OWMzNVx1OWMzNlx1OWMzN1x1OWMzOFx1OWMzOVx1OWMzYVx1OWMzYlx1ODllNVx1ODllYlx1ODllZlx1OGEzZVx1''@;'; put 'put ''OGIyNlx1OTc1M1x1OTZlOVx1OTZmM1x1OTZlZlx1OTcwNlx1OTcwMVx1OTcwOFx1OTcwZlx1OTcwZVx1OTcyYVx1OTcyZFx1OTczMFx1OTczZVx1OWY4MFx1OWY4M1x1OWY4NVx1OWY4Nlx1OWY4N1x1OWY4OFx1OWY4OVx1OWY4YVx1OWY4Y1x1OWVmZVx1OWYwYlx1OWYwZFx1OTZiOVx1OTZi''@;'; put 'put ''Y1x1OTZiZFx1OTZjZVx1OTZkMlx1NzdiZlx1OTZlMFx1OTI4ZVx1OTJhZVx1OTJjOFx1OTMzZVx1OTM2YVx1OTNjYVx1OTM4Zlx1OTQzZVx1OTQ2Ylx1OWM3Zlx1OWM4Mlx1OWM4NVx1OWM4Nlx1OWM4N1x1OWM4OFx1N2EyM1x1OWM4Ylx1OWM4ZVx1OWM5MFx1OWM5MVx1OWM5Mlx1OWM5NFx1''@;'; put 'put ''OWM5NVx1OWM5YVx1OWM5Ylx1OWM5ZVx1OWM5Zlx1OWNhMFx1OWNhMVx1OWNhMlx1OWNhM1x1OWNhNVx1OWNhNlx1OWNhN1x1OWNhOFx1OWNhOVx1OWNhYlx1OWNhZFx1OWNhZVx1OWNiMFx1OWNiMVx1OWNiMlx1OWNiM1x1OWNiNFx1OWNiNVx1OWNiNlx1OWNiN1x1OWNiYVx1OWNiYlx1OWNi''@;'; put 'put ''Y1x1OWNiZFx1OWNjNFx1OWNjNVx1OWNjNlx1OWNjN1x1OWNjYVx1OWNjYlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzI0Nl0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjQ2XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzI0Nl1bZ11dPTYyOTc2K2csX1s2Mjk3NitnXT15WzI0Nl1bZ10pO2Zv''@;'; put 'put ''cih5WzI0N109Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWMzY1x1OWMzZFx1OWMzZVx1OWMzZlx1OWM0MFx1OWM0MVx1OWM0Mlx1OWM0M1x1OWM0NFx1OWM0NVx1OWM0Nlx1OWM0N1x1OWM0OFx1OWM0OVx1OWM0YVx1OWM0Ylx1OWM0''@;'; put 'put ''Y1x1OWM0ZFx1OWM0ZVx1OWM0Zlx1OWM1MFx1OWM1MVx1OWM1Mlx1OWM1M1x1OWM1NFx1OWM1NVx1OWM1Nlx1OWM1N1x1OWM1OFx1OWM1OVx1OWM1YVx1OWM1Ylx1OWM1Y1x1OWM1ZFx1OWM1ZVx1OWM1Zlx1OWM2MFx1OWM2MVx1OWM2Mlx1OWM2M1x1OWM2NFx1OWM2NVx1OWM2Nlx1OWM2N1x1''@;'; put 'put ''OWM2OFx1OWM2OVx1OWM2YVx1OWM2Ylx1OWM2Y1x1OWM2ZFx1OWM2ZVx1OWM2Zlx1OWM3MFx1OWM3MVx1OWM3Mlx1OWM3M1x1OWM3NFx1OWM3NVx1OWM3Nlx1OWM3N1x1OWM3OFx1OWM3OVx1OWM3YVx1ZmZmZFx1OWM3Ylx1OWM3ZFx1OWM3ZVx1OWM4MFx1OWM4M1x1OWM4NFx1OWM4OVx1OWM4''@;'; put 'put ''YVx1OWM4Y1x1OWM4Zlx1OWM5M1x1OWM5Nlx1OWM5N1x1OWM5OFx1OWM5OVx1OWM5ZFx1OWNhYVx1OWNhY1x1OWNhZlx1OWNiOVx1OWNiZVx1OWNiZlx1OWNjMFx1OWNjMVx1OWNjMlx1OWNjOFx1OWNjOVx1OWNkMVx1OWNkMlx1OWNkYVx1OWNkYlx1OWNlMFx1OWNlMVx1OWNjY1x1OWNjZFx1''@;'; put 'put ''OWNjZVx1OWNjZlx1OWNkMFx1OWNkM1x1OWNkNFx1OWNkNVx1OWNkN1x1OWNkOFx1OWNkOVx1OWNkY1x1OWNkZFx1OWNkZlx1OWNlMlx1OTc3Y1x1OTc4NVx1OTc5MVx1OTc5Mlx1OTc5NFx1OTdhZlx1OTdhYlx1OTdhM1x1OTdiMlx1OTdiNFx1OWFiMVx1OWFiMFx1OWFiN1x1OWU1OFx1OWFi''@;'; put 'put ''Nlx1OWFiYVx1OWFiY1x1OWFjMVx1OWFjMFx1OWFjNVx1OWFjMlx1OWFjYlx1OWFjY1x1OWFkMVx1OWI0NVx1OWI0M1x1OWI0N1x1OWI0OVx1OWI0OFx1OWI0ZFx1OWI1MVx1OThlOFx1OTkwZFx1OTkyZVx1OTk1NVx1OTk1NFx1OWFkZlx1OWFlMVx1OWFlNlx1OWFlZlx1OWFlYlx1OWFmYlx1''@;'; put 'put ''OWFlZFx1OWFmOVx1OWIwOFx1OWIwZlx1OWIxM1x1OWIxZlx1OWIyM1x1OWViZFx1OWViZVx1N2UzYlx1OWU4Mlx1OWU4N1x1OWU4OFx1OWU4Ylx1OWU5Mlx1OTNkNlx1OWU5ZFx1OWU5Zlx1OWVkYlx1OWVkY1x1OWVkZFx1OWVlMFx1OWVkZlx1OWVlMlx1OWVlOVx1OWVlN1x1OWVlNVx1OWVl''@;'; put 'put ''YVx1OWVlZlx1OWYyMlx1OWYyY1x1OWYyZlx1OWYzOVx1OWYzN1x1OWYzZFx1OWYzZVx1OWY0NFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzI0N10ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjQ3XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzI0N11bZ11dPTYzMjMyK2csX1s2MzIzMitnXT15''@;'; put 'put ''WzI0N11bZ10pO2Zvcih5WzI0OF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWNlM1x1OWNlNFx1OWNlNVx1OWNlNlx1OWNlN1x1OWNlOFx1OWNlOVx1OWNlYVx1OWNlYlx1OWNlY1x1OWNlZFx1OWNlZVx1OWNlZlx1OWNmMFx1OWNm''@;'; put 'put ''MVx1OWNmMlx1OWNmM1x1OWNmNFx1OWNmNVx1OWNmNlx1OWNmN1x1OWNmOFx1OWNmOVx1OWNmYVx1OWNmYlx1OWNmY1x1OWNmZFx1OWNmZVx1OWNmZlx1OWQwMFx1OWQwMVx1OWQwMlx1OWQwM1x1OWQwNFx1OWQwNVx1OWQwNlx1OWQwN1x1OWQwOFx1OWQwOVx1OWQwYVx1OWQwYlx1OWQwY1x1''@;'; put 'put ''OWQwZFx1OWQwZVx1OWQwZlx1OWQxMFx1OWQxMVx1OWQxMlx1OWQxM1x1OWQxNFx1OWQxNVx1OWQxNlx1OWQxN1x1OWQxOFx1OWQxOVx1OWQxYVx1OWQxYlx1OWQxY1x1OWQxZFx1OWQxZVx1OWQxZlx1OWQyMFx1OWQyMVx1ZmZmZFx1OWQyMlx1OWQyM1x1OWQyNFx1OWQyNVx1OWQyNlx1OWQy''@;'; put 'put ''N1x1OWQyOFx1OWQyOVx1OWQyYVx1OWQyYlx1OWQyY1x1OWQyZFx1OWQyZVx1OWQyZlx1OWQzMFx1OWQzMVx1OWQzMlx1OWQzM1x1OWQzNFx1OWQzNVx1OWQzNlx1OWQzN1x1OWQzOFx1OWQzOVx1OWQzYVx1OWQzYlx1OWQzY1x1OWQzZFx1OWQzZVx1OWQzZlx1OWQ0MFx1OWQ0MVx1OWQ0Mlx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzI0OF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjQ4XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzI0OF1bZ11dPTYzNDg4K2cs''@;'; put 'put ''X1s2MzQ4OCtnXT15WzI0OF1bZ10pO2Zvcih5WzI0OV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWQ0M1x1OWQ0NFx1OWQ0NVx1OWQ0Nlx1OWQ0N1x1OWQ0OFx1OWQ0OVx1OWQ0YVx1OWQ0Ylx1OWQ0Y1x1OWQ0ZFx1OWQ0ZVx1OWQ0''@;'; put 'put ''Zlx1OWQ1MFx1OWQ1MVx1OWQ1Mlx1OWQ1M1x1OWQ1NFx1OWQ1NVx1OWQ1Nlx1OWQ1N1x1OWQ1OFx1OWQ1OVx1OWQ1YVx1OWQ1Ylx1OWQ1Y1x1OWQ1ZFx1OWQ1ZVx1OWQ1Zlx1OWQ2MFx1OWQ2MVx1OWQ2Mlx1OWQ2M1x1OWQ2NFx1OWQ2NVx1OWQ2Nlx1OWQ2N1x1OWQ2OFx1OWQ2OVx1OWQ2YVx1''@;'; put 'put ''OWQ2Ylx1OWQ2Y1x1OWQ2ZFx1OWQ2ZVx1OWQ2Zlx1OWQ3MFx1OWQ3MVx1OWQ3Mlx1OWQ3M1x1OWQ3NFx1OWQ3NVx1OWQ3Nlx1OWQ3N1x1OWQ3OFx1OWQ3OVx1OWQ3YVx1OWQ3Ylx1OWQ3Y1x1OWQ3ZFx1OWQ3ZVx1OWQ3Zlx1OWQ4MFx1OWQ4MVx1ZmZmZFx1OWQ4Mlx1OWQ4M1x1OWQ4NFx1OWQ4''@;'; put 'put ''NVx1OWQ4Nlx1OWQ4N1x1OWQ4OFx1OWQ4OVx1OWQ4YVx1OWQ4Ylx1OWQ4Y1x1OWQ4ZFx1OWQ4ZVx1OWQ4Zlx1OWQ5MFx1OWQ5MVx1OWQ5Mlx1OWQ5M1x1OWQ5NFx1OWQ5NVx1OWQ5Nlx1OWQ5N1x1OWQ5OFx1OWQ5OVx1OWQ5YVx1OWQ5Ylx1OWQ5Y1x1OWQ5ZFx1OWQ5ZVx1OWQ5Zlx1OWRhMFx1''@;'; put 'put ''OWRhMVx1OWRhMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzI0OV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjQ5XVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzI0OV1b''@;'; put 'put ''Z11dPTYzNzQ0K2csX1s2Mzc0NCtnXT15WzI0OV1bZ10pO2Zvcih5WzI1MF09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1OWRhM1x1OWRhNFx1OWRhNVx1OWRhNlx1OWRhN1x1OWRhOFx1OWRhOVx1OWRhYVx1OWRhYlx1OWRhY1x1OWRh''@;'; put 'put ''ZFx1OWRhZVx1OWRhZlx1OWRiMFx1OWRiMVx1OWRiMlx1OWRiM1x1OWRiNFx1OWRiNVx1OWRiNlx1OWRiN1x1OWRiOFx1OWRiOVx1OWRiYVx1OWRiYlx1OWRiY1x1OWRiZFx1OWRiZVx1OWRiZlx1OWRjMFx1OWRjMVx1OWRjMlx1OWRjM1x1OWRjNFx1OWRjNVx1OWRjNlx1OWRjN1x1OWRjOFx1''@;'; put 'put ''OWRjOVx1OWRjYVx1OWRjYlx1OWRjY1x1OWRjZFx1OWRjZVx1OWRjZlx1OWRkMFx1OWRkMVx1OWRkMlx1OWRkM1x1OWRkNFx1OWRkNVx1OWRkNlx1OWRkN1x1OWRkOFx1OWRkOVx1OWRkYVx1OWRkYlx1OWRkY1x1OWRkZFx1OWRkZVx1OWRkZlx1OWRlMFx1OWRlMVx1ZmZmZFx1OWRlMlx1OWRl''@;'; put 'put ''M1x1OWRlNFx1OWRlNVx1OWRlNlx1OWRlN1x1OWRlOFx1OWRlOVx1OWRlYVx1OWRlYlx1OWRlY1x1OWRlZFx1OWRlZVx1OWRlZlx1OWRmMFx1OWRmMVx1OWRmMlx1OWRmM1x1OWRmNFx1OWRmNVx1OWRmNlx1OWRmN1x1OWRmOFx1OWRmOVx1OWRmYVx1OWRmYlx1OWRmY1x1OWRmZFx1OWRmZVx1''@;'; put 'put ''OWRmZlx1OWUwMFx1OWUwMVx1OWUwMlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzI1MF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMjUwXVtnXS5jaGFyQ29kZUF0KDAp''@;'; put 'put ''JiYoSVt5WzI1MF1bZ11dPTY0ZTMrZyxfWzY0ZTMrZ109eVsyNTBdW2ddKTtmb3IoeVsyNTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTllMDNcdTllMDRcdTllMDVcdTllMDZcdTllMDdcdTllMDhcdTllMDlcdTllMGFcdTllMGJc''@;'; put 'put ''dTllMGNcdTllMGRcdTllMGVcdTllMGZcdTllMTBcdTllMTFcdTllMTJcdTllMTNcdTllMTRcdTllMTVcdTllMTZcdTllMTdcdTllMThcdTllMTlcdTllMWFcdTllMWJcdTllMWNcdTllMWRcdTllMWVcdTllMjRcdTllMjdcdTllMmVcdTllMzBcdTllMzRcdTllM2JcdTllM2NcdTllNDBcdTll''@;'; put 'put ''NGRcdTllNTBcdTllNTJcdTllNTNcdTllNTRcdTllNTZcdTllNTlcdTllNWRcdTllNWZcdTllNjBcdTllNjFcdTllNjJcdTllNjVcdTllNmVcdTllNmZcdTllNzJcdTllNzRcdTllNzVcdTllNzZcdTllNzdcdTllNzhcdTllNzlcdTllN2FcdTllN2JcdTllN2NcdTllN2RcdTllODBcdWZmZmRc''@;'; put 'put ''dTllODFcdTllODNcdTllODRcdTllODVcdTllODZcdTllODlcdTllOGFcdTllOGNcdTllOGRcdTllOGVcdTllOGZcdTllOTBcdTllOTFcdTllOTRcdTllOTVcdTllOTZcdTllOTdcdTllOThcdTllOTlcdTllOWFcdTllOWJcdTllOWNcdTllOWVcdTllYTBcdTllYTFcdTllYTJcdTllYTNcdTll''@;'; put 'put ''YTRcdTllYTVcdTllYTdcdTllYThcdTllYTlcdTllYWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyNTFdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzI1MV1bZ10uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKElbeVsyNTFdW2ddXT02NDI1NitnLF9bNjQyNTYrZ109eVsyNTFdW2ddKTtmb3IoeVsyNTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTllYWJcdTllYWNcdTllYWRcdTllYWVcdTllYWZcdTllYjBcdTllYjFc''@;'; put 'put ''dTllYjJcdTllYjNcdTllYjVcdTllYjZcdTllYjdcdTllYjlcdTllYmFcdTllYmNcdTllYmZcdTllYzBcdTllYzFcdTllYzJcdTllYzNcdTllYzVcdTllYzZcdTllYzdcdTllYzhcdTllY2FcdTllY2JcdTllY2NcdTllZDBcdTllZDJcdTllZDNcdTllZDVcdTllZDZcdTllZDdcdTllZDlcdTll''@;'; put 'put ''ZGFcdTllZGVcdTllZTFcdTllZTNcdTllZTRcdTllZTZcdTllZThcdTllZWJcdTllZWNcdTllZWRcdTllZWVcdTllZjBcdTllZjFcdTllZjJcdTllZjNcdTllZjRcdTllZjVcdTllZjZcdTllZjdcdTllZjhcdTllZmFcdTllZmRcdTllZmZcdTlmMDBcdTlmMDFcdTlmMDJcdTlmMDNcdTlmMDRc''@;'; put 'put ''dTlmMDVcdWZmZmRcdTlmMDZcdTlmMDdcdTlmMDhcdTlmMDlcdTlmMGFcdTlmMGNcdTlmMGZcdTlmMTFcdTlmMTJcdTlmMTRcdTlmMTVcdTlmMTZcdTlmMThcdTlmMWFcdTlmMWJcdTlmMWNcdTlmMWRcdTlmMWVcdTlmMWZcdTlmMjFcdTlmMjNcdTlmMjRcdTlmMjVcdTlmMjZcdTlmMjdcdTlm''@;'; put 'put ''MjhcdTlmMjlcdTlmMmFcdTlmMmJcdTlmMmRcdTlmMmVcdTlmMzBcdTlmMzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyNTJdLmxlbmd0aDsrK2cpNjU1MzMhPT15''@;'; put 'put ''WzI1Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyNTJdW2ddXT02NDUxMitnLF9bNjQ1MTIrZ109eVsyNTJdW2ddKTtmb3IoeVsyNTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlmMzJcdTlmMzNcdTlmMzRcdTlmMzVcdTlmMzZc''@;'; put 'put ''dTlmMzhcdTlmM2FcdTlmM2NcdTlmM2ZcdTlmNDBcdTlmNDFcdTlmNDJcdTlmNDNcdTlmNDVcdTlmNDZcdTlmNDdcdTlmNDhcdTlmNDlcdTlmNGFcdTlmNGJcdTlmNGNcdTlmNGRcdTlmNGVcdTlmNGZcdTlmNTJcdTlmNTNcdTlmNTRcdTlmNTVcdTlmNTZcdTlmNTdcdTlmNThcdTlmNTlcdTlm''@;'; put 'put ''NWFcdTlmNWJcdTlmNWNcdTlmNWRcdTlmNWVcdTlmNWZcdTlmNjBcdTlmNjFcdTlmNjJcdTlmNjNcdTlmNjRcdTlmNjVcdTlmNjZcdTlmNjdcdTlmNjhcdTlmNjlcdTlmNmFcdTlmNmJcdTlmNmNcdTlmNmRcdTlmNmVcdTlmNmZcdTlmNzBcdTlmNzFcdTlmNzJcdTlmNzNcdTlmNzRcdTlmNzVc''@;'; put 'put ''dTlmNzZcdTlmNzdcdTlmNzhcdWZmZmRcdTlmNzlcdTlmN2FcdTlmN2JcdTlmN2NcdTlmN2RcdTlmN2VcdTlmODFcdTlmODJcdTlmOGRcdTlmOGVcdTlmOGZcdTlmOTBcdTlmOTFcdTlmOTJcdTlmOTNcdTlmOTRcdTlmOTVcdTlmOTZcdTlmOTdcdTlmOThcdTlmOWNcdTlmOWRcdTlmOWVcdTlm''@;'; put 'put ''YTFcdTlmYTJcdTlmYTNcdTlmYTRcdTlmYTVcdWY5MmNcdWY5NzlcdWY5OTVcdWY5ZTdcdWY5ZjFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyNTNdLmxlbmd0aDsr''@;'; put 'put ''K2cpNjU1MzMhPT15WzI1M11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyNTNdW2ddXT02NDc2OCtnLF9bNjQ3NjgrZ109eVsyNTNdW2ddKTtmb3IoeVsyNTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZhMGNcdWZhMGRcdWZhMGVc''@;'; put 'put ''dWZhMGZcdWZhMTFcdWZhMTNcdWZhMTRcdWZhMThcdWZhMWZcdWZhMjBcdWZhMjFcdWZhMjNcdWZhMjRcdWZhMjdcdWZhMjhcdWZhMjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsy''@;'; put 'put ''NTRdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzI1NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyNTRdW2ddXT02NTAyNCtnLF9bNjUwMjQrZ109eVsyNTRdW2ddKTtyZXR1cm57ZW5jOkksZGVjOl99fSgpLHFbOTQ5XT1mdW5jdGlvbigpe3ZhciBnLF89W10sST17fSx5PVtdO2Zvcih5WzBdPSJc''@;'; put 'put ''MFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFS''@;'; put 'put ''U1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCIuc3BsaXQo''@;'; put 'put ''IiIpLGc9MDtnIT15WzBdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMF1bZ11dPTArZyxfWzArZ109eVswXVtnXSk7Zm9yKHlbMTI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVh''@;'; put 'put ''YzAyXHVhYzAzXHVhYzA1XHVhYzA2XHVhYzBiXHVhYzBjXHVhYzBkXHVhYzBlXHVhYzBmXHVhYzE4XHVhYzFlXHVhYzFmXHVhYzIxXHVhYzIyXHVhYzIzXHVhYzI1XHVhYzI2XHVhYzI3XHVhYzI4XHVhYzI5XHVhYzJhXHVhYzJiXHVhYzJlXHVhYzMyXHVhYzMzXHVhYzM0XHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhYzM1XHVhYzM2XHVhYzM3XHVhYzNhXHVhYzNiXHVhYzNkXHVhYzNlXHVhYzNmXHVhYzQxXHVhYzQyXHVhYzQzXHVhYzQ0XHVhYzQ1XHVhYzQ2XHVhYzQ3XHVhYzQ4XHVhYzQ5XHVhYzRhXHVhYzRjXHVhYzRlXHVhYzRmXHVhYzUwXHVhYzUxXHVh''@;'; put 'put ''YzUyXHVhYzUzXHVhYzU1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhYzU2XHVhYzU3XHVhYzU5XHVhYzVhXHVhYzViXHVhYzVkXHVhYzVlXHVhYzVmXHVhYzYwXHVhYzYxXHVhYzYyXHVhYzYzXHVhYzY0XHVhYzY1XHVhYzY2XHVhYzY3XHVhYzY4XHVhYzY5XHVhYzZh''@;'; put 'put ''XHVhYzZiXHVhYzZjXHVhYzZkXHVhYzZlXHVhYzZmXHVhYzcyXHVhYzczXHVhYzc1XHVhYzc2XHVhYzc5XHVhYzdiXHVhYzdjXHVhYzdkXHVhYzdlXHVhYzdmXHVhYzgyXHVhYzg3XHVhYzg4XHVhYzhkXHVhYzhlXHVhYzhmXHVhYzkxXHVhYzkyXHVhYzkzXHVhYzk1XHVhYzk2XHVhYzk3XHVh''@;'; put 'put ''Yzk4XHVhYzk5XHVhYzlhXHVhYzliXHVhYzllXHVhY2EyXHVhY2EzXHVhY2E0XHVhY2E1XHVhY2E2XHVhY2E3XHVhY2FiXHVhY2FkXHVhY2FlXHVhY2IxXHVhY2IyXHVhY2IzXHVhY2I0XHVhY2I1XHVhY2I2XHVhY2I3XHVhY2JhXHVhY2JlXHVhY2JmXHVhY2MwXHVhY2MyXHVhY2MzXHVhY2M1''@;'; put 'put ''XHVhY2M2XHVhY2M3XHVhY2M5XHVhY2NhXHVhY2NiXHVhY2NkXHVhY2NlXHVhY2NmXHVhY2QwXHVhY2QxXHVhY2QyXHVhY2QzXHVhY2Q0XHVhY2Q2XHVhY2Q4XHVhY2Q5XHVhY2RhXHVhY2RiXHVhY2RjXHVhY2RkXHVhY2RlXHVhY2RmXHVhY2UyXHVhY2UzXHVhY2U1XHVhY2U2XHVhY2U5XHVh''@;'; put 'put ''Y2ViXHVhY2VkXHVhY2VlXHVhY2YyXHVhY2Y0XHVhY2Y3XHVhY2Y4XHVhY2Y5XHVhY2ZhXHVhY2ZiXHVhY2ZlXHVhY2ZmXHVhZDAxXHVhZDAyXHVhZDAzXHVhZDA1XHVhZDA3XHVhZDA4XHVhZDA5XHVhZDBhXHVhZDBiXHVhZDBlXHVhZDEwXHVhZDEyXHVhZDEzXHVmZmZkIi5zcGxpdCgiIiks''@;'; put 'put ''Zz0wO2chPXlbMTI5XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxMjldW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTI5XVtnXV09MzMwMjQrZyxfWzMzMDI0K2ddPXlbMTI5XVtnXSk7Zm9yKHlbMTMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVhZDE0XHVhZDE1XHVhZDE2XHVhZDE3XHVhZDE5XHVhZDFhXHVhZDFiXHVhZDFkXHVhZDFlXHVhZDFmXHVhZDIxXHVhZDIyXHVhZDIzXHVhZDI0XHVhZDI1XHVhZDI2XHVhZDI3XHVhZDI4XHVhZDJhXHVhZDJiXHVhZDJlXHVhZDJmXHVhZDMwXHVhZDMxXHVhZDMyXHVhZDMz''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZDM2XHVhZDM3XHVhZDM5XHVhZDNhXHVhZDNiXHVhZDNkXHVhZDNlXHVhZDNmXHVhZDQwXHVhZDQxXHVhZDQyXHVhZDQzXHVhZDQ2XHVhZDQ4XHVhZDRhXHVhZDRiXHVhZDRjXHVhZDRkXHVhZDRlXHVhZDRmXHVhZDUxXHVh''@;'; put 'put ''ZDUyXHVhZDUzXHVhZDU1XHVhZDU2XHVhZDU3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZDU5XHVhZDVhXHVhZDViXHVhZDVjXHVhZDVkXHVhZDVlXHVhZDVmXHVhZDYwXHVhZDYyXHVhZDY0XHVhZDY1XHVhZDY2XHVhZDY3XHVhZDY4XHVhZDY5XHVhZDZhXHVhZDZi''@;'; put 'put ''XHVhZDZlXHVhZDZmXHVhZDcxXHVhZDcyXHVhZDc3XHVhZDc4XHVhZDc5XHVhZDdhXHVhZDdlXHVhZDgwXHVhZDgzXHVhZDg0XHVhZDg1XHVhZDg2XHVhZDg3XHVhZDhhXHVhZDhiXHVhZDhkXHVhZDhlXHVhZDhmXHVhZDkxXHVhZDkyXHVhZDkzXHVhZDk0XHVhZDk1XHVhZDk2XHVhZDk3XHVh''@;'; put 'put ''ZDk4XHVhZDk5XHVhZDlhXHVhZDliXHVhZDllXHVhZDlmXHVhZGEwXHVhZGExXHVhZGEyXHVhZGEzXHVhZGE1XHVhZGE2XHVhZGE3XHVhZGE4XHVhZGE5XHVhZGFhXHVhZGFiXHVhZGFjXHVhZGFkXHVhZGFlXHVhZGFmXHVhZGIwXHVhZGIxXHVhZGIyXHVhZGIzXHVhZGI0XHVhZGI1XHVhZGI2''@;'; put 'put ''XHVhZGI4XHVhZGI5XHVhZGJhXHVhZGJiXHVhZGJjXHVhZGJkXHVhZGJlXHVhZGJmXHVhZGMyXHVhZGMzXHVhZGM1XHVhZGM2XHVhZGM3XHVhZGM5XHVhZGNhXHVhZGNiXHVhZGNjXHVhZGNkXHVhZGNlXHVhZGNmXHVhZGQyXHVhZGQ0XHVhZGQ1XHVhZGQ2XHVhZGQ3XHVhZGQ4XHVhZGQ5XHVh''@;'; put 'put ''ZGRhXHVhZGRiXHVhZGRkXHVhZGRlXHVhZGRmXHVhZGUxXHVhZGUyXHVhZGUzXHVhZGU1XHVhZGU2XHVhZGU3XHVhZGU4XHVhZGU5XHVhZGVhXHVhZGViXHVhZGVjXHVhZGVkXHVhZGVlXHVhZGVmXHVhZGYwXHVhZGYxXHVhZGYyXHVhZGYzXHVhZGY0XHVhZGY1XHVhZGY2XHVhZGY3XHVmZmZk''@;'; put 'put ''Ii5zcGxpdCgiIiksZz0wO2chPXlbMTMwXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxMzBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTMwXVtnXV09MzMyODArZyxfWzMzMjgwK2ddPXlbMTMwXVtnXSk7Zm9yKHlbMTMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZGZhXHVhZGZiXHVhZGZkXHVhZGZlXHVhZTAyXHVhZTAzXHVhZTA0XHVhZTA1XHVhZTA2XHVhZTA3XHVhZTBhXHVhZTBjXHVhZTBlXHVhZTBmXHVhZTEwXHVhZTExXHVhZTEyXHVhZTEzXHVhZTE1XHVhZTE2XHVhZTE3XHVhZTE4XHVhZTE5XHVhZTFh''@;'; put 'put ''XHVhZTFiXHVhZTFjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZTFkXHVhZTFlXHVhZTFmXHVhZTIwXHVhZTIxXHVhZTIyXHVhZTIzXHVhZTI0XHVhZTI1XHVhZTI2XHVhZTI3XHVhZTI4XHVhZTI5XHVhZTJhXHVhZTJiXHVhZTJjXHVhZTJkXHVhZTJlXHVhZTJmXHVh''@;'; put 'put ''ZTMyXHVhZTMzXHVhZTM1XHVhZTM2XHVhZTM5XHVhZTNiXHVhZTNjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZTNkXHVhZTNlXHVhZTNmXHVhZTQyXHVhZTQ0XHVhZTQ3XHVhZTQ4XHVhZTQ5XHVhZTRiXHVhZTRmXHVhZTUxXHVhZTUyXHVhZTUzXHVhZTU1XHVhZTU3''@;'; put 'put ''XHVhZTU4XHVhZTU5XHVhZTVhXHVhZTViXHVhZTVlXHVhZTYyXHVhZTYzXHVhZTY0XHVhZTY2XHVhZTY3XHVhZTZhXHVhZTZiXHVhZTZkXHVhZTZlXHVhZTZmXHVhZTcxXHVhZTcyXHVhZTczXHVhZTc0XHVhZTc1XHVhZTc2XHVhZTc3XHVhZTdhXHVhZTdlXHVhZTdmXHVhZTgwXHVhZTgxXHVh''@;'; put 'put ''ZTgyXHVhZTgzXHVhZTg2XHVhZTg3XHVhZTg4XHVhZTg5XHVhZThhXHVhZThiXHVhZThkXHVhZThlXHVhZThmXHVhZTkwXHVhZTkxXHVhZTkyXHVhZTkzXHVhZTk0XHVhZTk1XHVhZTk2XHVhZTk3XHVhZTk4XHVhZTk5XHVhZTlhXHVhZTliXHVhZTljXHVhZTlkXHVhZTllXHVhZTlmXHVhZWEw''@;'; put 'put ''XHVhZWExXHVhZWEyXHVhZWEzXHVhZWE0XHVhZWE1XHVhZWE2XHVhZWE3XHVhZWE4XHVhZWE5XHVhZWFhXHVhZWFiXHVhZWFjXHVhZWFkXHVhZWFlXHVhZWFmXHVhZWIwXHVhZWIxXHVhZWIyXHVhZWIzXHVhZWI0XHVhZWI1XHVhZWI2XHVhZWI3XHVhZWI4XHVhZWI5XHVhZWJhXHVhZWJiXHVh''@;'; put 'put ''ZWJmXHVhZWMxXHVhZWMyXHVhZWMzXHVhZWM1XHVhZWM2XHVhZWM3XHVhZWM4XHVhZWM5XHVhZWNhXHVhZWNiXHVhZWNlXHVhZWQyXHVhZWQzXHVhZWQ0XHVhZWQ1XHVhZWQ2XHVhZWQ3XHVhZWRhXHVhZWRiXHVhZWRkXHVhZWRlXHVhZWRmXHVhZWUwXHVhZWUxXHVhZWUyXHVhZWUzXHVhZWU0''@;'; put 'put ''XHVhZWU1XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTMxXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxMzFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTMxXVtnXV09MzM1MzYrZyxfWzMzNTM2K2ddPXlbMTMxXVtnXSk7Zm9yKHlbMTMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZWU2XHVhZWU3XHVhZWU5XHVhZWVhXHVhZWVjXHVhZWVlXHVhZWVmXHVhZWYwXHVhZWYxXHVhZWYyXHVhZWYzXHVhZWY1XHVhZWY2XHVhZWY3XHVhZWY5XHVhZWZhXHVhZWZiXHVhZWZkXHVhZWZlXHVhZWZmXHVhZjAwXHVhZjAx''@;'; put 'put ''XHVhZjAyXHVhZjAzXHVhZjA0XHVhZjA1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZjA2XHVhZjA5XHVhZjBhXHVhZjBiXHVhZjBjXHVhZjBlXHVhZjBmXHVhZjExXHVhZjEyXHVhZjEzXHVhZjE0XHVhZjE1XHVhZjE2XHVhZjE3XHVhZjE4XHVhZjE5XHVhZjFhXHVh''@;'; put 'put ''ZjFiXHVhZjFjXHVhZjFkXHVhZjFlXHVhZjFmXHVhZjIwXHVhZjIxXHVhZjIyXHVhZjIzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZjI0XHVhZjI1XHVhZjI2XHVhZjI3XHVhZjI4XHVhZjI5XHVhZjJhXHVhZjJiXHVhZjJlXHVhZjJmXHVhZjMxXHVhZjMzXHVhZjM1''@;'; put 'put ''XHVhZjM2XHVhZjM3XHVhZjM4XHVhZjM5XHVhZjNhXHVhZjNiXHVhZjNlXHVhZjQwXHVhZjQ0XHVhZjQ1XHVhZjQ2XHVhZjQ3XHVhZjRhXHVhZjRiXHVhZjRjXHVhZjRkXHVhZjRlXHVhZjRmXHVhZjUxXHVhZjUyXHVhZjUzXHVhZjU0XHVhZjU1XHVhZjU2XHVhZjU3XHVhZjU4XHVhZjU5XHVh''@;'; put 'put ''ZjVhXHVhZjViXHVhZjVlXHVhZjVmXHVhZjYwXHVhZjYxXHVhZjYyXHVhZjYzXHVhZjY2XHVhZjY3XHVhZjY4XHVhZjY5XHVhZjZhXHVhZjZiXHVhZjZjXHVhZjZkXHVhZjZlXHVhZjZmXHVhZjcwXHVhZjcxXHVhZjcyXHVhZjczXHVhZjc0XHVhZjc1XHVhZjc2XHVhZjc3XHVhZjc4XHVhZjdh''@;'; put 'put ''XHVhZjdiXHVhZjdjXHVhZjdkXHVhZjdlXHVhZjdmXHVhZjgxXHVhZjgyXHVhZjgzXHVhZjg1XHVhZjg2XHVhZjg3XHVhZjg5XHVhZjhhXHVhZjhiXHVhZjhjXHVhZjhkXHVhZjhlXHVhZjhmXHVhZjkyXHVhZjkzXHVhZjk0XHVhZjk2XHVhZjk3XHVhZjk4XHVhZjk5XHVhZjlhXHVhZjliXHVh''@;'; put 'put ''ZjlkXHVhZjllXHVhZjlmXHVhZmEwXHVhZmExXHVhZmEyXHVhZmEzXHVhZmE0XHVhZmE1XHVhZmE2XHVhZmE3XHVhZmE4XHVhZmE5XHVhZmFhXHVhZmFiXHVhZmFjXHVhZmFkXHVhZmFlXHVhZmFmXHVhZmIwXHVhZmIxXHVhZmIyXHVhZmIzXHVhZmI0XHVhZmI1XHVhZmI2XHVhZmI3XHVhZmJh''@;'; put 'put ''XHVhZmJiXHVhZmJkXHVhZmJlXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTMyXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxMzJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTMyXVtnXV09MzM3OTIrZyxfWzMzNzkyK2ddPXlbMTMyXVtnXSk7Zm9yKHlbMTMzXT0iXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZmJmXHVhZmMxXHVhZmMyXHVhZmMzXHVhZmM0XHVhZmM1XHVhZmM2XHVhZmNhXHVhZmNjXHVhZmNmXHVhZmQwXHVhZmQxXHVhZmQyXHVhZmQzXHVhZmQ1XHVhZmQ2XHVhZmQ3XHVhZmQ4XHVhZmQ5XHVhZmRh''@;'; put 'put ''XHVhZmRiXHVhZmRkXHVhZmRlXHVhZmRmXHVhZmUwXHVhZmUxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVhZmUyXHVhZmUzXHVhZmU0XHVhZmU1XHVhZmU2XHVhZmU3XHVhZmVhXHVhZmViXHVhZmVjXHVhZmVkXHVhZmVlXHVhZmVmXHVhZmYyXHVhZmYzXHVhZmY1XHVh''@;'; put 'put ''ZmY2XHVhZmY3XHVhZmY5XHVhZmZhXHVhZmZiXHVhZmZjXHVhZmZkXHVhZmZlXHVhZmZmXHViMDAyXHViMDAzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMDA1XHViMDA2XHViMDA3XHViMDA4XHViMDA5XHViMDBhXHViMDBiXHViMDBkXHViMDBlXHViMDBmXHViMDEx''@;'; put 'put ''XHViMDEyXHViMDEzXHViMDE1XHViMDE2XHViMDE3XHViMDE4XHViMDE5XHViMDFhXHViMDFiXHViMDFlXHViMDFmXHViMDIwXHViMDIxXHViMDIyXHViMDIzXHViMDI0XHViMDI1XHViMDI2XHViMDI3XHViMDI5XHViMDJhXHViMDJiXHViMDJjXHViMDJkXHViMDJlXHViMDJmXHViMDMwXHVi''@;'; put 'put ''MDMxXHViMDMyXHViMDMzXHViMDM0XHViMDM1XHViMDM2XHViMDM3XHViMDM4XHViMDM5XHViMDNhXHViMDNiXHViMDNjXHViMDNkXHViMDNlXHViMDNmXHViMDQwXHViMDQxXHViMDQyXHViMDQzXHViMDQ2XHViMDQ3XHViMDQ5XHViMDRiXHViMDRkXHViMDRmXHViMDUwXHViMDUxXHViMDUy''@;'; put 'put ''XHViMDU2XHViMDU4XHViMDVhXHViMDViXHViMDVjXHViMDVlXHViMDVmXHViMDYwXHViMDYxXHViMDYyXHViMDYzXHViMDY0XHViMDY1XHViMDY2XHViMDY3XHViMDY4XHViMDY5XHViMDZhXHViMDZiXHViMDZjXHViMDZkXHViMDZlXHViMDZmXHViMDcwXHViMDcxXHViMDcyXHViMDczXHVi''@;'; put 'put ''MDc0XHViMDc1XHViMDc2XHViMDc3XHViMDc4XHViMDc5XHViMDdhXHViMDdiXHViMDdlXHViMDdmXHViMDgxXHViMDgyXHViMDgzXHViMDg1XHViMDg2XHViMDg3XHViMDg4XHViMDg5XHViMDhhXHViMDhiXHViMDhlXHViMDkwXHViMDkyXHViMDkzXHViMDk0XHViMDk1XHViMDk2XHViMDk3''@;'; put 'put ''XHViMDliXHViMDlkXHViMDllXHViMGEzXHViMGE0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTMzXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxMzNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTMzXVtnXV09MzQwNDgrZyxfWzM0MDQ4K2ddPXlbMTMzXVtnXSk7Zm9yKHlbMTM0XT0iXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMGE1XHViMGE2XHViMGE3XHViMGFhXHViMGIwXHViMGIyXHViMGI2XHViMGI3XHViMGI5XHViMGJhXHViMGJiXHViMGJkXHViMGJlXHViMGJmXHViMGMwXHViMGMxXHViMGMyXHViMGMz''@;'; put 'put ''XHViMGM2XHViMGNhXHViMGNiXHViMGNjXHViMGNkXHViMGNlXHViMGNmXHViMGQyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMGQzXHViMGQ1XHViMGQ2XHViMGQ3XHViMGQ5XHViMGRhXHViMGRiXHViMGRjXHViMGRkXHViMGRlXHViMGRmXHViMGUxXHViMGUyXHVi''@;'; put 'put ''MGUzXHViMGU0XHViMGU2XHViMGU3XHViMGU4XHViMGU5XHViMGVhXHViMGViXHViMGVjXHViMGVkXHViMGVlXHViMGVmXHViMGYwXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMGYxXHViMGYyXHViMGYzXHViMGY0XHViMGY1XHViMGY2XHViMGY3XHViMGY4XHViMGY5''@;'; put 'put ''XHViMGZhXHViMGZiXHViMGZjXHViMGZkXHViMGZlXHViMGZmXHViMTAwXHViMTAxXHViMTAyXHViMTAzXHViMTA0XHViMTA1XHViMTA2XHViMTA3XHViMTBhXHViMTBkXHViMTBlXHViMTBmXHViMTExXHViMTE0XHViMTE1XHViMTE2XHViMTE3XHViMTFhXHViMTFlXHViMTFmXHViMTIwXHVi''@;'; put 'put ''MTIxXHViMTIyXHViMTI2XHViMTI3XHViMTI5XHViMTJhXHViMTJiXHViMTJkXHViMTJlXHViMTJmXHViMTMwXHViMTMxXHViMTMyXHViMTMzXHViMTM2XHViMTNhXHViMTNiXHViMTNjXHViMTNkXHViMTNlXHViMTNmXHViMTQyXHViMTQzXHViMTQ1XHViMTQ2XHViMTQ3XHViMTQ5XHViMTRh''@;'; put 'put ''XHViMTRiXHViMTRjXHViMTRkXHViMTRlXHViMTRmXHViMTUyXHViMTUzXHViMTU2XHViMTU3XHViMTU5XHViMTVhXHViMTViXHViMTVkXHViMTVlXHViMTVmXHViMTYxXHViMTYyXHViMTYzXHViMTY0XHViMTY1XHViMTY2XHViMTY3XHViMTY4XHViMTY5XHViMTZhXHViMTZiXHViMTZjXHVi''@;'; put 'put ''MTZkXHViMTZlXHViMTZmXHViMTcwXHViMTcxXHViMTcyXHViMTczXHViMTc0XHViMTc1XHViMTc2XHViMTc3XHViMTdhXHViMTdiXHViMTdkXHViMTdlXHViMTdmXHViMTgxXHViMTgzXHViMTg0XHViMTg1XHViMTg2XHViMTg3XHViMThhXHViMThjXHViMThlXHViMThmXHViMTkwXHViMTkx''@;'; put 'put ''XHViMTk1XHViMTk2XHViMTk3XHViMTk5XHViMTlhXHViMTliXHViMTlkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTM0XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxMzRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTM0XVtnXV09MzQzMDQrZyxfWzM0MzA0K2ddPXlbMTM0XVtnXSk7Zm9y''@;'; put 'put ''KHlbMTM1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMTllXHViMTlmXHViMWEwXHViMWExXHViMWEyXHViMWEzXHViMWE0XHViMWE1XHViMWE2XHViMWE3XHViMWE5XHViMWFhXHViMWFiXHViMWFjXHViMWFkXHViMWFl''@;'; put 'put ''XHViMWFmXHViMWIwXHViMWIxXHViMWIyXHViMWIzXHViMWI0XHViMWI1XHViMWI2XHViMWI3XHViMWI4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMWI5XHViMWJhXHViMWJiXHViMWJjXHViMWJkXHViMWJlXHViMWJmXHViMWMwXHViMWMxXHViMWMyXHViMWMzXHVi''@;'; put 'put ''MWM0XHViMWM1XHViMWM2XHViMWM3XHViMWM4XHViMWM5XHViMWNhXHViMWNiXHViMWNkXHViMWNlXHViMWNmXHViMWQxXHViMWQyXHViMWQzXHViMWQ1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMWQ2XHViMWQ3XHViMWQ4XHViMWQ5XHViMWRhXHViMWRiXHViMWRl''@;'; put 'put ''XHViMWUwXHViMWUxXHViMWUyXHViMWUzXHViMWU0XHViMWU1XHViMWU2XHViMWU3XHViMWVhXHViMWViXHViMWVkXHViMWVlXHViMWVmXHViMWYxXHViMWYyXHViMWYzXHViMWY0XHViMWY1XHViMWY2XHViMWY3XHViMWY4XHViMWZhXHViMWZjXHViMWZlXHViMWZmXHViMjAwXHViMjAxXHVi''@;'; put 'put ''MjAyXHViMjAzXHViMjA2XHViMjA3XHViMjA5XHViMjBhXHViMjBkXHViMjBlXHViMjBmXHViMjEwXHViMjExXHViMjEyXHViMjEzXHViMjE2XHViMjE4XHViMjFhXHViMjFiXHViMjFjXHViMjFkXHViMjFlXHViMjFmXHViMjIxXHViMjIyXHViMjIzXHViMjI0XHViMjI1XHViMjI2XHViMjI3''@;'; put 'put ''XHViMjI4XHViMjI5XHViMjJhXHViMjJiXHViMjJjXHViMjJkXHViMjJlXHViMjJmXHViMjMwXHViMjMxXHViMjMyXHViMjMzXHViMjM1XHViMjM2XHViMjM3XHViMjM4XHViMjM5XHViMjNhXHViMjNiXHViMjNkXHViMjNlXHViMjNmXHViMjQwXHViMjQxXHViMjQyXHViMjQzXHViMjQ0XHVi''@;'; put 'put ''MjQ1XHViMjQ2XHViMjQ3XHViMjQ4XHViMjQ5XHViMjRhXHViMjRiXHViMjRjXHViMjRkXHViMjRlXHViMjRmXHViMjUwXHViMjUxXHViMjUyXHViMjUzXHViMjU0XHViMjU1XHViMjU2XHViMjU3XHViMjU5XHViMjVhXHViMjViXHViMjVkXHViMjVlXHViMjVmXHViMjYxXHViMjYyXHViMjYz''@;'; put 'put ''XHViMjY0XHViMjY1XHViMjY2XHViMjY3XHViMjZhXHViMjZiXHViMjZjXHViMjZkXHViMjZlXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTM1XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxMzVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTM1XVtnXV09MzQ1NjArZyxfWzM0NTYwK2ddPXlb''@;'; put 'put ''MTM1XVtnXSk7Zm9yKHlbMTM2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMjZmXHViMjcwXHViMjcxXHViMjcyXHViMjczXHViMjc2XHViMjc3XHViMjc4XHViMjc5XHViMjdhXHViMjdiXHViMjdkXHViMjdlXHViMjdm''@;'; put 'put ''XHViMjgwXHViMjgxXHViMjgyXHViMjgzXHViMjg2XHViMjg3XHViMjg4XHViMjhhXHViMjhiXHViMjhjXHViMjhkXHViMjhlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMjhmXHViMjkyXHViMjkzXHViMjk1XHViMjk2XHViMjk3XHViMjliXHViMjljXHViMjlkXHVi''@;'; put 'put ''MjllXHViMjlmXHViMmEyXHViMmE0XHViMmE3XHViMmE4XHViMmE5XHViMmFiXHViMmFkXHViMmFlXHViMmFmXHViMmIxXHViMmIyXHViMmIzXHViMmI1XHViMmI2XHViMmI3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMmI4XHViMmI5XHViMmJhXHViMmJiXHViMmJj''@;'; put 'put ''XHViMmJkXHViMmJlXHViMmJmXHViMmMwXHViMmMxXHViMmMyXHViMmMzXHViMmM0XHViMmM1XHViMmM2XHViMmM3XHViMmNhXHViMmNiXHViMmNkXHViMmNlXHViMmNmXHViMmQxXHViMmQzXHViMmQ0XHViMmQ1XHViMmQ2XHViMmQ3XHViMmRhXHViMmRjXHViMmRlXHViMmRmXHViMmUwXHVi''@;'; put 'put ''MmUxXHViMmUzXHViMmU3XHViMmU5XHViMmVhXHViMmYwXHViMmYxXHViMmYyXHViMmY2XHViMmZjXHViMmZkXHViMmZlXHViMzAyXHViMzAzXHViMzA1XHViMzA2XHViMzA3XHViMzA5XHViMzBhXHViMzBiXHViMzBjXHViMzBkXHViMzBlXHViMzBmXHViMzEyXHViMzE2XHViMzE3XHViMzE4''@;'; put 'put ''XHViMzE5XHViMzFhXHViMzFiXHViMzFkXHViMzFlXHViMzFmXHViMzIwXHViMzIxXHViMzIyXHViMzIzXHViMzI0XHViMzI1XHViMzI2XHViMzI3XHViMzI4XHViMzI5XHViMzJhXHViMzJiXHViMzJjXHViMzJkXHViMzJlXHViMzJmXHViMzMwXHViMzMxXHViMzMyXHViMzMzXHViMzM0XHVi''@;'; put 'put ''MzM1XHViMzM2XHViMzM3XHViMzM4XHViMzM5XHViMzNhXHViMzNiXHViMzNjXHViMzNkXHViMzNlXHViMzNmXHViMzQwXHViMzQxXHViMzQyXHViMzQzXHViMzQ0XHViMzQ1XHViMzQ2XHViMzQ3XHViMzQ4XHViMzQ5XHViMzRhXHViMzRiXHViMzRjXHViMzRkXHViMzRlXHViMzRmXHViMzUw''@;'; put 'put ''XHViMzUxXHViMzUyXHViMzUzXHViMzU3XHViMzU5XHViMzVhXHViMzVkXHViMzYwXHViMzYxXHViMzYyXHViMzYzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTM2XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxMzZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTM2XVtnXV09MzQ4MTYrZyxf''@;'; put 'put ''WzM0ODE2K2ddPXlbMTM2XVtnXSk7Zm9yKHlbMTM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMzY2XHViMzY4XHViMzZhXHViMzZjXHViMzZkXHViMzZmXHViMzcyXHViMzczXHViMzc1XHViMzc2XHViMzc3XHViMzc5''@;'; put 'put ''XHViMzdhXHViMzdiXHViMzdjXHViMzdkXHViMzdlXHViMzdmXHViMzgyXHViMzg2XHViMzg3XHViMzg4XHViMzg5XHViMzhhXHViMzhiXHViMzhkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViMzhlXHViMzhmXHViMzkxXHViMzkyXHViMzkzXHViMzk1XHViMzk2XHVi''@;'; put 'put ''Mzk3XHViMzk4XHViMzk5XHViMzlhXHViMzliXHViMzljXHViMzlkXHViMzllXHViMzlmXHViM2EyXHViM2EzXHViM2E0XHViM2E1XHViM2E2XHViM2E3XHViM2E5XHViM2FhXHViM2FiXHViM2FkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViM2FlXHViM2FmXHViM2Iw''@;'; put 'put ''XHViM2IxXHViM2IyXHViM2IzXHViM2I0XHViM2I1XHViM2I2XHViM2I3XHViM2I4XHViM2I5XHViM2JhXHViM2JiXHViM2JjXHViM2JkXHViM2JlXHViM2JmXHViM2MwXHViM2MxXHViM2MyXHViM2MzXHViM2M2XHViM2M3XHViM2M5XHViM2NhXHViM2NkXHViM2NmXHViM2QxXHViM2QyXHVi''@;'; put 'put ''M2QzXHViM2Q2XHViM2Q4XHViM2RhXHViM2RjXHViM2RlXHViM2RmXHViM2UxXHViM2UyXHViM2UzXHViM2U1XHViM2U2XHViM2U3XHViM2U5XHViM2VhXHViM2ViXHViM2VjXHViM2VkXHViM2VlXHViM2VmXHViM2YwXHViM2YxXHViM2YyXHViM2YzXHViM2Y0XHViM2Y1XHViM2Y2XHViM2Y3''@;'; put 'put ''XHViM2Y4XHViM2Y5XHViM2ZhXHViM2ZiXHViM2ZkXHViM2ZlXHViM2ZmXHViNDAwXHViNDAxXHViNDAyXHViNDAzXHViNDA0XHViNDA1XHViNDA2XHViNDA3XHViNDA4XHViNDA5XHViNDBhXHViNDBiXHViNDBjXHViNDBkXHViNDBlXHViNDBmXHViNDExXHViNDEyXHViNDEzXHViNDE0XHVi''@;'; put 'put ''NDE1XHViNDE2XHViNDE3XHViNDE5XHViNDFhXHViNDFiXHViNDFkXHViNDFlXHViNDFmXHViNDIxXHViNDIyXHViNDIzXHViNDI0XHViNDI1XHViNDI2XHViNDI3XHViNDJhXHViNDJjXHViNDJkXHViNDJlXHViNDJmXHViNDMwXHViNDMxXHViNDMyXHViNDMzXHViNDM1XHViNDM2XHViNDM3''@;'; put 'put ''XHViNDM4XHViNDM5XHViNDNhXHViNDNiXHViNDNjXHViNDNkXHViNDNlXHViNDNmXHViNDQwXHViNDQxXHViNDQyXHViNDQzXHViNDQ0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTM3XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxMzddW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTM3XVtn''@;'; put 'put ''XV09MzUwNzIrZyxfWzM1MDcyK2ddPXlbMTM3XVtnXSk7Zm9yKHlbMTM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNDQ1XHViNDQ2XHViNDQ3XHViNDQ4XHViNDQ5XHViNDRhXHViNDRiXHViNDRjXHViNDRkXHViNDRl''@;'; put 'put ''XHViNDRmXHViNDUyXHViNDUzXHViNDU1XHViNDU2XHViNDU3XHViNDU5XHViNDVhXHViNDViXHViNDVjXHViNDVkXHViNDVlXHViNDVmXHViNDYyXHViNDY0XHViNDY2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNDY3XHViNDY4XHViNDY5XHViNDZhXHViNDZiXHVi''@;'; put 'put ''NDZkXHViNDZlXHViNDZmXHViNDcwXHViNDcxXHViNDcyXHViNDczXHViNDc0XHViNDc1XHViNDc2XHViNDc3XHViNDc4XHViNDc5XHViNDdhXHViNDdiXHViNDdjXHViNDdkXHViNDdlXHViNDdmXHViNDgxXHViNDgyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNDgz''@;'; put 'put ''XHViNDg0XHViNDg1XHViNDg2XHViNDg3XHViNDg5XHViNDhhXHViNDhiXHViNDhjXHViNDhkXHViNDhlXHViNDhmXHViNDkwXHViNDkxXHViNDkyXHViNDkzXHViNDk0XHViNDk1XHViNDk2XHViNDk3XHViNDk4XHViNDk5XHViNDlhXHViNDliXHViNDljXHViNDllXHViNDlmXHViNGEwXHVi''@;'; put 'put ''NGExXHViNGEyXHViNGEzXHViNGE1XHViNGE2XHViNGE3XHViNGE5XHViNGFhXHViNGFiXHViNGFkXHViNGFlXHViNGFmXHViNGIwXHViNGIxXHViNGIyXHViNGIzXHViNGI0XHViNGI2XHViNGI4XHViNGJhXHViNGJiXHViNGJjXHViNGJkXHViNGJlXHViNGJmXHViNGMxXHViNGMyXHViNGMz''@;'; put 'put ''XHViNGM1XHViNGM2XHViNGM3XHViNGM5XHViNGNhXHViNGNiXHViNGNjXHViNGNkXHViNGNlXHViNGNmXHViNGQxXHViNGQyXHViNGQzXHViNGQ0XHViNGQ2XHViNGQ3XHViNGQ4XHViNGQ5XHViNGRhXHViNGRiXHViNGRlXHViNGRmXHViNGUxXHViNGUyXHViNGU1XHViNGU3XHViNGU4XHVi''@;'; put 'put ''NGU5XHViNGVhXHViNGViXHViNGVlXHViNGYwXHViNGYyXHViNGYzXHViNGY0XHViNGY1XHViNGY2XHViNGY3XHViNGY5XHViNGZhXHViNGZiXHViNGZjXHViNGZkXHViNGZlXHViNGZmXHViNTAwXHViNTAxXHViNTAyXHViNTAzXHViNTA0XHViNTA1XHViNTA2XHViNTA3XHViNTA4XHViNTA5''@;'; put 'put ''XHViNTBhXHViNTBiXHViNTBjXHViNTBkXHViNTBlXHViNTBmXHViNTEwXHViNTExXHViNTEyXHViNTEzXHViNTE2XHViNTE3XHViNTE5XHViNTFhXHViNTFkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTM4XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxMzhdW2ddLmNoYXJDb2RlQXQoMCkm''@;'; put 'put ''JihJW3lbMTM4XVtnXV09MzUzMjgrZyxfWzM1MzI4K2ddPXlbMTM4XVtnXSk7Zm9yKHlbMTM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNTFlXHViNTFmXHViNTIwXHViNTIxXHViNTIyXHViNTIzXHViNTI2XHViNTJi''@;'; put 'put ''XHViNTJjXHViNTJkXHViNTJlXHViNTJmXHViNTMyXHViNTMzXHViNTM1XHViNTM2XHViNTM3XHViNTM5XHViNTNhXHViNTNiXHViNTNjXHViNTNkXHViNTNlXHViNTNmXHViNTQyXHViNTQ2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNTQ3XHViNTQ4XHViNTQ5XHVi''@;'; put 'put ''NTRhXHViNTRlXHViNTRmXHViNTUxXHViNTUyXHViNTUzXHViNTU1XHViNTU2XHViNTU3XHViNTU4XHViNTU5XHViNTVhXHViNTViXHViNTVlXHViNTYyXHViNTYzXHViNTY0XHViNTY1XHViNTY2XHViNTY3XHViNTY4XHViNTY5XHViNTZhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHViNTZiXHViNTZjXHViNTZkXHViNTZlXHViNTZmXHViNTcwXHViNTcxXHViNTcyXHViNTczXHViNTc0XHViNTc1XHViNTc2XHViNTc3XHViNTc4XHViNTc5XHViNTdhXHViNTdiXHViNTdjXHViNTdkXHViNTdlXHViNTdmXHViNTgwXHViNTgxXHViNTgyXHViNTgzXHViNTg0XHVi''@;'; put 'put ''NTg1XHViNTg2XHViNTg3XHViNTg4XHViNTg5XHViNThhXHViNThiXHViNThjXHViNThkXHViNThlXHViNThmXHViNTkwXHViNTkxXHViNTkyXHViNTkzXHViNTk0XHViNTk1XHViNTk2XHViNTk3XHViNTk4XHViNTk5XHViNTlhXHViNTliXHViNTljXHViNTlkXHViNTllXHViNTlmXHViNWEy''@;'; put 'put ''XHViNWEzXHViNWE1XHViNWE2XHViNWE3XHViNWE5XHViNWFjXHViNWFkXHViNWFlXHViNWFmXHViNWIyXHViNWI2XHViNWI3XHViNWI4XHViNWI5XHViNWJhXHViNWJlXHViNWJmXHViNWMxXHViNWMyXHViNWMzXHViNWM1XHViNWM2XHViNWM3XHViNWM4XHViNWM5XHViNWNhXHViNWNiXHVi''@;'; put 'put ''NWNlXHViNWQyXHViNWQzXHViNWQ0XHViNWQ1XHViNWQ2XHViNWQ3XHViNWQ5XHViNWRhXHViNWRiXHViNWRjXHViNWRkXHViNWRlXHViNWRmXHViNWUwXHViNWUxXHViNWUyXHViNWUzXHViNWU0XHViNWU1XHViNWU2XHViNWU3XHViNWU4XHViNWU5XHViNWVhXHViNWViXHViNWVkXHViNWVl''@;'; put 'put ''XHViNWVmXHViNWYwXHViNWYxXHViNWYyXHViNWYzXHViNWY0XHViNWY1XHViNWY2XHViNWY3XHViNWY4XHViNWY5XHViNWZhXHViNWZiXHViNWZjXHViNWZkXHViNWZlXHViNWZmXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTM5XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxMzldW2ddLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkmJihJW3lbMTM5XVtnXV09MzU1ODQrZyxfWzM1NTg0K2ddPXlbMTM5XVtnXSk7Zm9yKHlbMTQwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNjAwXHViNjAxXHViNjAyXHViNjAzXHViNjA0XHViNjA1''@;'; put 'put ''XHViNjA2XHViNjA3XHViNjA4XHViNjA5XHViNjBhXHViNjBiXHViNjBjXHViNjBkXHViNjBlXHViNjBmXHViNjEyXHViNjEzXHViNjE1XHViNjE2XHViNjE3XHViNjE5XHViNjFhXHViNjFiXHViNjFjXHViNjFkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNjFlXHVi''@;'; put 'put ''NjFmXHViNjIwXHViNjIxXHViNjIyXHViNjIzXHViNjI0XHViNjI2XHViNjI3XHViNjI4XHViNjI5XHViNjJhXHViNjJiXHViNjJkXHViNjJlXHViNjJmXHViNjMwXHViNjMxXHViNjMyXHViNjMzXHViNjM1XHViNjM2XHViNjM3XHViNjM4XHViNjM5XHViNjNhXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHViNjNiXHViNjNjXHViNjNkXHViNjNlXHViNjNmXHViNjQwXHViNjQxXHViNjQyXHViNjQzXHViNjQ0XHViNjQ1XHViNjQ2XHViNjQ3XHViNjQ5XHViNjRhXHViNjRiXHViNjRjXHViNjRkXHViNjRlXHViNjRmXHViNjUwXHViNjUxXHViNjUyXHViNjUzXHVi''@;'; put 'put ''NjU0XHViNjU1XHViNjU2XHViNjU3XHViNjU4XHViNjU5XHViNjVhXHViNjViXHViNjVjXHViNjVkXHViNjVlXHViNjVmXHViNjYwXHViNjYxXHViNjYyXHViNjYzXHViNjY1XHViNjY2XHViNjY3XHViNjY5XHViNjZhXHViNjZiXHViNjZjXHViNjZkXHViNjZlXHViNjZmXHViNjcwXHViNjcx''@;'; put 'put ''XHViNjcyXHViNjczXHViNjc0XHViNjc1XHViNjc2XHViNjc3XHViNjc4XHViNjc5XHViNjdhXHViNjdiXHViNjdjXHViNjdkXHViNjdlXHViNjdmXHViNjgwXHViNjgxXHViNjgyXHViNjgzXHViNjg0XHViNjg1XHViNjg2XHViNjg3XHViNjg4XHViNjg5XHViNjhhXHViNjhiXHViNjhjXHVi''@;'; put 'put ''NjhkXHViNjhlXHViNjhmXHViNjkwXHViNjkxXHViNjkyXHViNjkzXHViNjk0XHViNjk1XHViNjk2XHViNjk3XHViNjk4XHViNjk5XHViNjlhXHViNjliXHViNjllXHViNjlmXHViNmExXHViNmEyXHViNmEzXHViNmE1XHViNmE2XHViNmE3XHViNmE4XHViNmE5XHViNmFhXHViNmFkXHViNmFl''@;'; put 'put ''XHViNmFmXHViNmIwXHViNmIyXHViNmIzXHViNmI0XHViNmI1XHViNmI2XHViNmI3XHViNmI4XHViNmI5XHViNmJhXHViNmJiXHViNmJjXHViNmJkXHViNmJlXHViNmJmXHViNmMwXHViNmMxXHViNmMyXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTQwXS5sZW5ndGg7KytnKTY1NTMzIT09''@;'; put 'put ''eVsxNDBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTQwXVtnXV09MzU4NDArZyxfWzM1ODQwK2ddPXlbMTQwXVtnXSk7Zm9yKHlbMTQxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNmMzXHViNmM0XHViNmM1XHViNmM2''@;'; put 'put ''XHViNmM3XHViNmM4XHViNmM5XHViNmNhXHViNmNiXHViNmNjXHViNmNkXHViNmNlXHViNmNmXHViNmQwXHViNmQxXHViNmQyXHViNmQzXHViNmQ1XHViNmQ2XHViNmQ3XHViNmQ4XHViNmQ5XHViNmRhXHViNmRiXHViNmRjXHViNmRkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHViNmRlXHViNmRmXHViNmUwXHViNmUxXHViNmUyXHViNmUzXHViNmU0XHViNmU1XHViNmU2XHViNmU3XHViNmU4XHViNmU5XHViNmVhXHViNmViXHViNmVjXHViNmVkXHViNmVlXHViNmVmXHViNmYxXHViNmYyXHViNmYzXHViNmY1XHViNmY2XHViNmY3XHViNmY5XHViNmZhXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNmZiXHViNmZjXHViNmZkXHViNmZlXHViNmZmXHViNzAyXHViNzAzXHViNzA0XHViNzA2XHViNzA3XHViNzA4XHViNzA5XHViNzBhXHViNzBiXHViNzBjXHViNzBkXHViNzBlXHViNzBmXHViNzEwXHViNzExXHViNzEyXHViNzEzXHVi''@;'; put 'put ''NzE0XHViNzE1XHViNzE2XHViNzE3XHViNzE4XHViNzE5XHViNzFhXHViNzFiXHViNzFjXHViNzFkXHViNzFlXHViNzFmXHViNzIwXHViNzIxXHViNzIyXHViNzIzXHViNzI0XHViNzI1XHViNzI2XHViNzI3XHViNzJhXHViNzJiXHViNzJkXHViNzJlXHViNzMxXHViNzMyXHViNzMzXHViNzM0''@;'; put 'put ''XHViNzM1XHViNzM2XHViNzM3XHViNzNhXHViNzNjXHViNzNkXHViNzNlXHViNzNmXHViNzQwXHViNzQxXHViNzQyXHViNzQzXHViNzQ1XHViNzQ2XHViNzQ3XHViNzQ5XHViNzRhXHViNzRiXHViNzRkXHViNzRlXHViNzRmXHViNzUwXHViNzUxXHViNzUyXHViNzUzXHViNzU2XHViNzU3XHVi''@;'; put 'put ''NzU4XHViNzU5XHViNzVhXHViNzViXHViNzVjXHViNzVkXHViNzVlXHViNzVmXHViNzYxXHViNzYyXHViNzYzXHViNzY1XHViNzY2XHViNzY3XHViNzY5XHViNzZhXHViNzZiXHViNzZjXHViNzZkXHViNzZlXHViNzZmXHViNzcyXHViNzc0XHViNzc2XHViNzc3XHViNzc4XHViNzc5XHViNzdh''@;'; put 'put ''XHViNzdiXHViNzdlXHViNzdmXHViNzgxXHViNzgyXHViNzgzXHViNzg1XHViNzg2XHViNzg3XHViNzg4XHViNzg5XHViNzhhXHViNzhiXHViNzhlXHViNzkzXHViNzk0XHViNzk1XHViNzlhXHViNzliXHViNzlkXHViNzllXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTQxXS5sZW5ndGg7''@;'; put 'put ''KytnKTY1NTMzIT09eVsxNDFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTQxXVtnXV09MzYwOTYrZyxfWzM2MDk2K2ddPXlbMTQxXVtnXSk7Zm9yKHlbMTQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViNzlmXHViN2Ex''@;'; put 'put ''XHViN2EyXHViN2EzXHViN2E0XHViN2E1XHViN2E2XHViN2E3XHViN2FhXHViN2FlXHViN2FmXHViN2IwXHViN2IxXHViN2IyXHViN2IzXHViN2I2XHViN2I3XHViN2I5XHViN2JhXHViN2JiXHViN2JjXHViN2JkXHViN2JlXHViN2JmXHViN2MwXHViN2MxXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHViN2MyXHViN2MzXHViN2M0XHViN2M1XHViN2M2XHViN2M4XHViN2NhXHViN2NiXHViN2NjXHViN2NkXHViN2NlXHViN2NmXHViN2QwXHViN2QxXHViN2QyXHViN2QzXHViN2Q0XHViN2Q1XHViN2Q2XHViN2Q3XHViN2Q4XHViN2Q5XHViN2RhXHViN2RiXHViN2Rj''@;'; put 'put ''XHViN2RkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViN2RlXHViN2RmXHViN2UwXHViN2UxXHViN2UyXHViN2UzXHViN2U0XHViN2U1XHViN2U2XHViN2U3XHViN2U4XHViN2U5XHViN2VhXHViN2ViXHViN2VlXHViN2VmXHViN2YxXHViN2YyXHViN2YzXHViN2Y1XHVi''@;'; put 'put ''N2Y2XHViN2Y3XHViN2Y4XHViN2Y5XHViN2ZhXHViN2ZiXHViN2ZlXHViODAyXHViODAzXHViODA0XHViODA1XHViODA2XHViODBhXHViODBiXHViODBkXHViODBlXHViODBmXHViODExXHViODEyXHViODEzXHViODE0XHViODE1XHViODE2XHViODE3XHViODFhXHViODFjXHViODFlXHViODFm''@;'; put 'put ''XHViODIwXHViODIxXHViODIyXHViODIzXHViODI2XHViODI3XHViODI5XHViODJhXHViODJiXHViODJkXHViODJlXHViODJmXHViODMwXHViODMxXHViODMyXHViODMzXHViODM2XHViODNhXHViODNiXHViODNjXHViODNkXHViODNlXHViODNmXHViODQxXHViODQyXHViODQzXHViODQ1XHVi''@;'; put 'put ''ODQ2XHViODQ3XHViODQ4XHViODQ5XHViODRhXHViODRiXHViODRjXHViODRkXHViODRlXHViODRmXHViODUwXHViODUyXHViODU0XHViODU1XHViODU2XHViODU3XHViODU4XHViODU5XHViODVhXHViODViXHViODVlXHViODVmXHViODYxXHViODYyXHViODYzXHViODY1XHViODY2XHViODY3''@;'; put 'put ''XHViODY4XHViODY5XHViODZhXHViODZiXHViODZlXHViODcwXHViODcyXHViODczXHViODc0XHViODc1XHViODc2XHViODc3XHViODc5XHViODdhXHViODdiXHViODdkXHViODdlXHViODdmXHViODgwXHViODgxXHViODgyXHViODgzXHViODg0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlb''@;'; put 'put ''MTQyXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNDJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTQyXVtnXV09MzYzNTIrZyxfWzM2MzUyK2ddPXlbMTQyXVtnXSk7Zm9yKHlbMTQzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHViODg1XHViODg2XHViODg3XHViODg4XHViODg5XHViODhhXHViODhiXHViODhjXHViODhlXHViODhmXHViODkwXHViODkxXHViODkyXHViODkzXHViODk0XHViODk1XHViODk2XHViODk3XHViODk4XHViODk5XHViODlhXHViODliXHViODljXHViODlkXHViODllXHViODlmXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViOGEwXHViOGExXHViOGEyXHViOGEzXHViOGE0XHViOGE1XHViOGE2XHViOGE3XHViOGE5XHViOGFhXHViOGFiXHViOGFjXHViOGFkXHViOGFlXHViOGFmXHViOGIxXHViOGIyXHViOGIzXHViOGI1XHViOGI2XHViOGI3XHViOGI5XHViOGJh''@;'; put 'put ''XHViOGJiXHViOGJjXHViOGJkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViOGJlXHViOGJmXHViOGMyXHViOGM0XHViOGM2XHViOGM3XHViOGM4XHViOGM5XHViOGNhXHViOGNiXHViOGNkXHViOGNlXHViOGNmXHViOGQxXHViOGQyXHViOGQzXHViOGQ1XHViOGQ2XHVi''@;'; put 'put ''OGQ3XHViOGQ4XHViOGQ5XHViOGRhXHViOGRiXHViOGRjXHViOGRlXHViOGUwXHViOGUyXHViOGUzXHViOGU0XHViOGU1XHViOGU2XHViOGU3XHViOGVhXHViOGViXHViOGVkXHViOGVlXHViOGVmXHViOGYxXHViOGYyXHViOGYzXHViOGY0XHViOGY1XHViOGY2XHViOGY3XHViOGZhXHViOGZj''@;'; put 'put ''XHViOGZlXHViOGZmXHViOTAwXHViOTAxXHViOTAyXHViOTAzXHViOTA1XHViOTA2XHViOTA3XHViOTA4XHViOTA5XHViOTBhXHViOTBiXHViOTBjXHViOTBkXHViOTBlXHViOTBmXHViOTEwXHViOTExXHViOTEyXHViOTEzXHViOTE0XHViOTE1XHViOTE2XHViOTE3XHViOTE5XHViOTFhXHVi''@;'; put 'put ''OTFiXHViOTFjXHViOTFkXHViOTFlXHViOTFmXHViOTIxXHViOTIyXHViOTIzXHViOTI0XHViOTI1XHViOTI2XHViOTI3XHViOTI4XHViOTI5XHViOTJhXHViOTJiXHViOTJjXHViOTJkXHViOTJlXHViOTJmXHViOTMwXHViOTMxXHViOTMyXHViOTMzXHViOTM0XHViOTM1XHViOTM2XHViOTM3''@;'; put 'put ''XHViOTM4XHViOTM5XHViOTNhXHViOTNiXHViOTNlXHViOTNmXHViOTQxXHViOTQyXHViOTQzXHViOTQ1XHViOTQ2XHViOTQ3XHViOTQ4XHViOTQ5XHViOTRhXHViOTRiXHViOTRkXHViOTRlXHViOTUwXHViOTUyXHViOTUzXHViOTU0XHViOTU1XHViOTU2XHViOTU3XHVmZmZkIi5zcGxpdCgi''@;'; put 'put ''IiksZz0wO2chPXlbMTQzXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNDNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTQzXVtnXV09MzY2MDgrZyxfWzM2NjA4K2ddPXlbMTQzXVtnXSk7Zm9yKHlbMTQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHViOTVhXHViOTViXHViOTVkXHViOTVlXHViOTVmXHViOTYxXHViOTYyXHViOTYzXHViOTY0XHViOTY1XHViOTY2XHViOTY3XHViOTZhXHViOTZjXHViOTZlXHViOTZmXHViOTcwXHViOTcxXHViOTcyXHViOTczXHViOTc2XHViOTc3XHViOTc5XHViOTdhXHViOTdiXHVi''@;'; put 'put ''OTdkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViOTdlXHViOTdmXHViOTgwXHViOTgxXHViOTgyXHViOTgzXHViOTg2XHViOTg4XHViOThiXHViOThjXHViOThmXHViOTkwXHViOTkxXHViOTkyXHViOTkzXHViOTk0XHViOTk1XHViOTk2XHViOTk3XHViOTk4XHViOTk5''@;'; put 'put ''XHViOTlhXHViOTliXHViOTljXHViOTlkXHViOTllXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViOTlmXHViOWEwXHViOWExXHViOWEyXHViOWEzXHViOWE0XHViOWE1XHViOWE2XHViOWE3XHViOWE4XHViOWE5XHViOWFhXHViOWFiXHViOWFlXHViOWFmXHViOWIxXHVi''@;'; put 'put ''OWIyXHViOWIzXHViOWI1XHViOWI2XHViOWI3XHViOWI4XHViOWI5XHViOWJhXHViOWJiXHViOWJlXHViOWMwXHViOWMyXHViOWMzXHViOWM0XHViOWM1XHViOWM2XHViOWM3XHViOWNhXHViOWNiXHViOWNkXHViOWQzXHViOWQ0XHViOWQ1XHViOWQ2XHViOWQ3XHViOWRhXHViOWRjXHViOWRm''@;'; put 'put ''XHViOWUwXHViOWUyXHViOWU2XHViOWU3XHViOWU5XHViOWVhXHViOWViXHViOWVkXHViOWVlXHViOWVmXHViOWYwXHViOWYxXHViOWYyXHViOWYzXHViOWY2XHViOWZiXHViOWZjXHViOWZkXHViOWZlXHViOWZmXHViYTAyXHViYTAzXHViYTA0XHViYTA1XHViYTA2XHViYTA3XHViYTA5XHVi''@;'; put 'put ''YTBhXHViYTBiXHViYTBjXHViYTBkXHViYTBlXHViYTBmXHViYTEwXHViYTExXHViYTEyXHViYTEzXHViYTE0XHViYTE2XHViYTE3XHViYTE4XHViYTE5XHViYTFhXHViYTFiXHViYTFjXHViYTFkXHViYTFlXHViYTFmXHViYTIwXHViYTIxXHViYTIyXHViYTIzXHViYTI0XHViYTI1XHViYTI2''@;'; put 'put ''XHViYTI3XHViYTI4XHViYTI5XHViYTJhXHViYTJiXHViYTJjXHViYTJkXHViYTJlXHViYTJmXHViYTMwXHViYTMxXHViYTMyXHViYTMzXHViYTM0XHViYTM1XHViYTM2XHViYTM3XHViYTNhXHViYTNiXHViYTNkXHViYTNlXHViYTNmXHViYTQxXHViYTQzXHViYTQ0XHViYTQ1XHViYTQ2XHVm''@;'; put 'put ''ZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTQ0XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNDRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTQ0XVtnXV09MzY4NjQrZyxfWzM2ODY0K2ddPXlbMTQ0XVtnXSk7Zm9yKHlbMTQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYTQ3XHViYTRhXHViYTRjXHViYTRmXHViYTUwXHViYTUxXHViYTUyXHViYTU2XHViYTU3XHViYTU5XHViYTVhXHViYTViXHViYTVkXHViYTVlXHViYTVmXHViYTYwXHViYTYxXHViYTYyXHViYTYzXHViYTY2XHViYTZhXHViYTZiXHViYTZjXHVi''@;'; put 'put ''YTZkXHViYTZlXHViYTZmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYTcyXHViYTczXHViYTc1XHViYTc2XHViYTc3XHViYTc5XHViYTdhXHViYTdiXHViYTdjXHViYTdkXHViYTdlXHViYTdmXHViYTgwXHViYTgxXHViYTgyXHViYTg2XHViYTg4XHViYTg5XHViYThh''@;'; put 'put ''XHViYThiXHViYThkXHViYThlXHViYThmXHViYTkwXHViYTkxXHViYTkyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYTkzXHViYTk0XHViYTk1XHViYTk2XHViYTk3XHViYTk4XHViYTk5XHViYTlhXHViYTliXHViYTljXHViYTlkXHViYTllXHViYTlmXHViYWEwXHVi''@;'; put 'put ''YWExXHViYWEyXHViYWEzXHViYWE0XHViYWE1XHViYWE2XHViYWE3XHViYWFhXHViYWFkXHViYWFlXHViYWFmXHViYWIxXHViYWIzXHViYWI0XHViYWI1XHViYWI2XHViYWI3XHViYWJhXHViYWJjXHViYWJlXHViYWJmXHViYWMwXHViYWMxXHViYWMyXHViYWMzXHViYWM1XHViYWM2XHViYWM3''@;'; put 'put ''XHViYWM5XHViYWNhXHViYWNiXHViYWNjXHViYWNkXHViYWNlXHViYWNmXHViYWQwXHViYWQxXHViYWQyXHViYWQzXHViYWQ0XHViYWQ1XHViYWQ2XHViYWQ3XHViYWRhXHViYWRiXHViYWRjXHViYWRkXHViYWRlXHViYWRmXHViYWUwXHViYWUxXHViYWUyXHViYWUzXHViYWU0XHViYWU1XHVi''@;'; put 'put ''YWU2XHViYWU3XHViYWU4XHViYWU5XHViYWVhXHViYWViXHViYWVjXHViYWVkXHViYWVlXHViYWVmXHViYWYwXHViYWYxXHViYWYyXHViYWYzXHViYWY0XHViYWY1XHViYWY2XHViYWY3XHViYWY4XHViYWY5XHViYWZhXHViYWZiXHViYWZkXHViYWZlXHViYWZmXHViYjAxXHViYjAyXHViYjAz''@;'; put 'put ''XHViYjA1XHViYjA2XHViYjA3XHViYjA4XHViYjA5XHViYjBhXHViYjBiXHViYjBjXHViYjBlXHViYjEwXHViYjEyXHViYjEzXHViYjE0XHViYjE1XHViYjE2XHViYjE3XHViYjE5XHViYjFhXHViYjFiXHViYjFkXHViYjFlXHViYjFmXHViYjIxXHViYjIyXHViYjIzXHViYjI0XHViYjI1XHVi''@;'; put 'put ''YjI2XHViYjI3XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTQ1XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNDVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTQ1XVtnXV09MzcxMjArZyxfWzM3MTIwK2ddPXlbMTQ1XVtnXSk7Zm9yKHlbMTQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYjI4XHViYjJhXHViYjJjXHViYjJkXHViYjJlXHViYjJmXHViYjMwXHViYjMxXHViYjMyXHViYjMzXHViYjM3XHViYjM5XHViYjNhXHViYjNmXHViYjQwXHViYjQxXHViYjQyXHViYjQzXHViYjQ2XHViYjQ4XHViYjRhXHVi''@;'; put 'put ''YjRiXHViYjRjXHViYjRlXHViYjUxXHViYjUyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYjUzXHViYjU1XHViYjU2XHViYjU3XHViYjU5XHViYjVhXHViYjViXHViYjVjXHViYjVkXHViYjVlXHViYjVmXHViYjYwXHViYjYyXHViYjY0XHViYjY1XHViYjY2XHViYjY3''@;'; put 'put ''XHViYjY4XHViYjY5XHViYjZhXHViYjZiXHViYjZkXHViYjZlXHViYjZmXHViYjcwXHViYjcxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYjcyXHViYjczXHViYjc0XHViYjc1XHViYjc2XHViYjc3XHViYjc4XHViYjc5XHViYjdhXHViYjdiXHViYjdjXHViYjdkXHVi''@;'; put 'put ''YjdlXHViYjdmXHViYjgwXHViYjgxXHViYjgyXHViYjgzXHViYjg0XHViYjg1XHViYjg2XHViYjg3XHViYjg5XHViYjhhXHViYjhiXHViYjhkXHViYjhlXHViYjhmXHViYjkxXHViYjkyXHViYjkzXHViYjk0XHViYjk1XHViYjk2XHViYjk3XHViYjk4XHViYjk5XHViYjlhXHViYjliXHViYjlj''@;'; put 'put ''XHViYjlkXHViYjllXHViYjlmXHViYmEwXHViYmExXHViYmEyXHViYmEzXHViYmE1XHViYmE2XHViYmE3XHViYmE5XHViYmFhXHViYmFiXHViYmFkXHViYmFlXHViYmFmXHViYmIwXHViYmIxXHViYmIyXHViYmIzXHViYmI1XHViYmI2XHViYmI4XHViYmI5XHViYmJhXHViYmJiXHViYmJjXHVi''@;'; put 'put ''YmJkXHViYmJlXHViYmJmXHViYmMxXHViYmMyXHViYmMzXHViYmM1XHViYmM2XHViYmM3XHViYmM5XHViYmNhXHViYmNiXHViYmNjXHViYmNkXHViYmNlXHViYmNmXHViYmQxXHViYmQyXHViYmQ0XHViYmQ1XHViYmQ2XHViYmQ3XHViYmQ4XHViYmQ5XHViYmRhXHViYmRiXHViYmRjXHViYmRk''@;'; put 'put ''XHViYmRlXHViYmRmXHViYmUwXHViYmUxXHViYmUyXHViYmUzXHViYmU0XHViYmU1XHViYmU2XHViYmU3XHViYmU4XHViYmU5XHViYmVhXHViYmViXHViYmVjXHViYmVkXHViYmVlXHViYmVmXHViYmYwXHViYmYxXHViYmYyXHViYmYzXHViYmY0XHViYmY1XHViYmY2XHViYmY3XHViYmZhXHVi''@;'; put 'put ''YmZiXHViYmZkXHViYmZlXHViYzAxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTQ2XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNDZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTQ2XVtnXV09MzczNzYrZyxfWzM3Mzc2K2ddPXlbMTQ2XVtnXSk7Zm9yKHlbMTQ3XT0iXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYzAzXHViYzA0XHViYzA1XHViYzA2XHViYzA3XHViYzBhXHViYzBlXHViYzEwXHViYzEyXHViYzEzXHViYzE5XHViYzFhXHViYzIwXHViYzIxXHViYzIyXHViYzIzXHViYzI2XHViYzI4XHViYzJhXHVi''@;'; put 'put ''YzJiXHViYzJjXHViYzJlXHViYzJmXHViYzMyXHViYzMzXHViYzM1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYzM2XHViYzM3XHViYzM5XHViYzNhXHViYzNiXHViYzNjXHViYzNkXHViYzNlXHViYzNmXHViYzQyXHViYzQ2XHViYzQ3XHViYzQ4XHViYzRhXHViYzRi''@;'; put 'put ''XHViYzRlXHViYzRmXHViYzUxXHViYzUyXHViYzUzXHViYzU0XHViYzU1XHViYzU2XHViYzU3XHViYzU4XHViYzU5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViYzVhXHViYzViXHViYzVjXHViYzVlXHViYzVmXHViYzYwXHViYzYxXHViYzYyXHViYzYzXHViYzY0XHVi''@;'; put 'put ''YzY1XHViYzY2XHViYzY3XHViYzY4XHViYzY5XHViYzZhXHViYzZiXHViYzZjXHViYzZkXHViYzZlXHViYzZmXHViYzcwXHViYzcxXHViYzcyXHViYzczXHViYzc0XHViYzc1XHViYzc2XHViYzc3XHViYzc4XHViYzc5XHViYzdhXHViYzdiXHViYzdjXHViYzdkXHViYzdlXHViYzdmXHViYzgw''@;'; put 'put ''XHViYzgxXHViYzgyXHViYzgzXHViYzg2XHViYzg3XHViYzg5XHViYzhhXHViYzhkXHViYzhmXHViYzkwXHViYzkxXHViYzkyXHViYzkzXHViYzk2XHViYzk4XHViYzliXHViYzljXHViYzlkXHViYzllXHViYzlmXHViY2EyXHViY2EzXHViY2E1XHViY2E2XHViY2E5XHViY2FhXHViY2FiXHVi''@;'; put 'put ''Y2FjXHViY2FkXHViY2FlXHViY2FmXHViY2IyXHViY2I2XHViY2I3XHViY2I4XHViY2I5XHViY2JhXHViY2JiXHViY2JlXHViY2JmXHViY2MxXHViY2MyXHViY2MzXHViY2M1XHViY2M2XHViY2M3XHViY2M4XHViY2M5XHViY2NhXHViY2NiXHViY2NjXHViY2NlXHViY2QyXHViY2QzXHViY2Q0''@;'; put 'put ''XHViY2Q2XHViY2Q3XHViY2Q5XHViY2RhXHViY2RiXHViY2RkXHViY2RlXHViY2RmXHViY2UwXHViY2UxXHViY2UyXHViY2UzXHViY2U0XHViY2U1XHViY2U2XHViY2U3XHViY2U4XHViY2U5XHViY2VhXHViY2ViXHViY2VjXHViY2VkXHViY2VlXHViY2VmXHViY2YwXHViY2YxXHViY2YyXHVi''@;'; put 'put ''Y2YzXHViY2Y3XHViY2Y5XHViY2ZhXHViY2ZiXHViY2ZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTQ3XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNDddW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTQ3XVtnXV09Mzc2MzIrZyxfWzM3NjMyK2ddPXlbMTQ3XVtnXSk7Zm9yKHlbMTQ4XT0i''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViY2ZlXHViY2ZmXHViZDAwXHViZDAxXHViZDAyXHViZDAzXHViZDA2XHViZDA4XHViZDBhXHViZDBiXHViZDBjXHViZDBkXHViZDBlXHViZDBmXHViZDExXHViZDEyXHViZDEzXHVi''@;'; put 'put ''ZDE1XHViZDE2XHViZDE3XHViZDE4XHViZDE5XHViZDFhXHViZDFiXHViZDFjXHViZDFkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZDFlXHViZDFmXHViZDIwXHViZDIxXHViZDIyXHViZDIzXHViZDI1XHViZDI2XHViZDI3XHViZDI4XHViZDI5XHViZDJhXHViZDJi''@;'; put 'put ''XHViZDJkXHViZDJlXHViZDJmXHViZDMwXHViZDMxXHViZDMyXHViZDMzXHViZDM0XHViZDM1XHViZDM2XHViZDM3XHViZDM4XHViZDM5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZDNhXHViZDNiXHViZDNjXHViZDNkXHViZDNlXHViZDNmXHViZDQxXHViZDQyXHVi''@;'; put 'put ''ZDQzXHViZDQ0XHViZDQ1XHViZDQ2XHViZDQ3XHViZDRhXHViZDRiXHViZDRkXHViZDRlXHViZDRmXHViZDUxXHViZDUyXHViZDUzXHViZDU0XHViZDU1XHViZDU2XHViZDU3XHViZDVhXHViZDViXHViZDVjXHViZDVkXHViZDVlXHViZDVmXHViZDYwXHViZDYxXHViZDYyXHViZDYzXHViZDY1''@;'; put 'put ''XHViZDY2XHViZDY3XHViZDY5XHViZDZhXHViZDZiXHViZDZjXHViZDZkXHViZDZlXHViZDZmXHViZDcwXHViZDcxXHViZDcyXHViZDczXHViZDc0XHViZDc1XHViZDc2XHViZDc3XHViZDc4XHViZDc5XHViZDdhXHViZDdiXHViZDdjXHViZDdkXHViZDdlXHViZDdmXHViZDgyXHViZDgzXHVi''@;'; put 'put ''ZDg1XHViZDg2XHViZDhiXHViZDhjXHViZDhkXHViZDhlXHViZDhmXHViZDkyXHViZDk0XHViZDk2XHViZDk3XHViZDk4XHViZDliXHViZDlkXHViZDllXHViZDlmXHViZGEwXHViZGExXHViZGEyXHViZGEzXHViZGE1XHViZGE2XHViZGE3XHViZGE4XHViZGE5XHViZGFhXHViZGFiXHViZGFj''@;'; put 'put ''XHViZGFkXHViZGFlXHViZGFmXHViZGIxXHViZGIyXHViZGIzXHViZGI0XHViZGI1XHViZGI2XHViZGI3XHViZGI5XHViZGJhXHViZGJiXHViZGJjXHViZGJkXHViZGJlXHViZGJmXHViZGMwXHViZGMxXHViZGMyXHViZGMzXHViZGM0XHViZGM1XHViZGM2XHViZGM3XHViZGM4XHViZGM5XHVi''@;'; put 'put ''ZGNhXHViZGNiXHViZGNjXHViZGNkXHViZGNlXHViZGNmXHViZGQwXHViZGQxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTQ4XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNDhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTQ4XVtnXV09Mzc4ODgrZyxfWzM3ODg4K2ddPXlbMTQ4XVtnXSk7''@;'; put 'put ''Zm9yKHlbMTQ5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZGQyXHViZGQzXHViZGQ2XHViZGQ3XHViZGQ5XHViZGRhXHViZGRiXHViZGRkXHViZGRlXHViZGRmXHViZGUwXHViZGUxXHViZGUyXHViZGUzXHViZGU0XHVi''@;'; put 'put ''ZGU1XHViZGU2XHViZGU3XHViZGU4XHViZGVhXHViZGViXHViZGVjXHViZGVkXHViZGVlXHViZGVmXHViZGYxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZGYyXHViZGYzXHViZGY1XHViZGY2XHViZGY3XHViZGY5XHViZGZhXHViZGZiXHViZGZjXHViZGZkXHViZGZl''@;'; put 'put ''XHViZGZmXHViZTAxXHViZTAyXHViZTA0XHViZTA2XHViZTA3XHViZTA4XHViZTA5XHViZTBhXHViZTBiXHViZTBlXHViZTBmXHViZTExXHViZTEyXHViZTEzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZTE1XHViZTE2XHViZTE3XHViZTE4XHViZTE5XHViZTFhXHVi''@;'; put 'put ''ZTFiXHViZTFlXHViZTIwXHViZTIxXHViZTIyXHViZTIzXHViZTI0XHViZTI1XHViZTI2XHViZTI3XHViZTI4XHViZTI5XHViZTJhXHViZTJiXHViZTJjXHViZTJkXHViZTJlXHViZTJmXHViZTMwXHViZTMxXHViZTMyXHViZTMzXHViZTM0XHViZTM1XHViZTM2XHViZTM3XHViZTM4XHViZTM5''@;'; put 'put ''XHViZTNhXHViZTNiXHViZTNjXHViZTNkXHViZTNlXHViZTNmXHViZTQwXHViZTQxXHViZTQyXHViZTQzXHViZTQ2XHViZTQ3XHViZTQ5XHViZTRhXHViZTRiXHViZTRkXHViZTRmXHViZTUwXHViZTUxXHViZTUyXHViZTUzXHViZTU2XHViZTU4XHViZTVjXHViZTVkXHViZTVlXHViZTVmXHVi''@;'; put 'put ''ZTYyXHViZTYzXHViZTY1XHViZTY2XHViZTY3XHViZTY5XHViZTZiXHViZTZjXHViZTZkXHViZTZlXHViZTZmXHViZTcyXHViZTc2XHViZTc3XHViZTc4XHViZTc5XHViZTdhXHViZTdlXHViZTdmXHViZTgxXHViZTgyXHViZTgzXHViZTg1XHViZTg2XHViZTg3XHViZTg4XHViZTg5XHViZThh''@;'; put 'put ''XHViZThiXHViZThlXHViZTkyXHViZTkzXHViZTk0XHViZTk1XHViZTk2XHViZTk3XHViZTlhXHViZTliXHViZTljXHViZTlkXHViZTllXHViZTlmXHViZWEwXHViZWExXHViZWEyXHViZWEzXHViZWE0XHViZWE1XHViZWE2XHViZWE3XHViZWE5XHViZWFhXHViZWFiXHViZWFjXHViZWFkXHVi''@;'; put 'put ''ZWFlXHViZWFmXHViZWIwXHViZWIxXHViZWIyXHViZWIzXHViZWI0XHViZWI1XHViZWI2XHViZWI3XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTQ5XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNDldW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTQ5XVtnXV09MzgxNDQrZyxfWzM4MTQ0K2dd''@;'; put 'put ''PXlbMTQ5XVtnXSk7Zm9yKHlbMTUwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZWI4XHViZWI5XHViZWJhXHViZWJiXHViZWJjXHViZWJkXHViZWJlXHViZWJmXHViZWMwXHViZWMxXHViZWMyXHViZWMzXHViZWM0XHVi''@;'; put 'put ''ZWM1XHViZWM2XHViZWM3XHViZWM4XHViZWM5XHViZWNhXHViZWNiXHViZWNjXHViZWNkXHViZWNlXHViZWNmXHViZWQyXHViZWQzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZWQ1XHViZWQ2XHViZWQ5XHViZWRhXHViZWRiXHViZWRjXHViZWRkXHViZWRlXHViZWRm''@;'; put 'put ''XHViZWUxXHViZWUyXHViZWU2XHViZWU3XHViZWU4XHViZWU5XHViZWVhXHViZWViXHViZWVkXHViZWVlXHViZWVmXHViZWYwXHViZWYxXHViZWYyXHViZWYzXHViZWY0XHViZWY1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZWY2XHViZWY3XHViZWY4XHViZWY5XHVi''@;'; put 'put ''ZWZhXHViZWZiXHViZWZjXHViZWZkXHViZWZlXHViZWZmXHViZjAwXHViZjAyXHViZjAzXHViZjA0XHViZjA1XHViZjA2XHViZjA3XHViZjBhXHViZjBiXHViZjBjXHViZjBkXHViZjBlXHViZjBmXHViZjEwXHViZjExXHViZjEyXHViZjEzXHViZjE0XHViZjE1XHViZjE2XHViZjE3XHViZjFh''@;'; put 'put ''XHViZjFlXHViZjFmXHViZjIwXHViZjIxXHViZjIyXHViZjIzXHViZjI0XHViZjI1XHViZjI2XHViZjI3XHViZjI4XHViZjI5XHViZjJhXHViZjJiXHViZjJjXHViZjJkXHViZjJlXHViZjJmXHViZjMwXHViZjMxXHViZjMyXHViZjMzXHViZjM0XHViZjM1XHViZjM2XHViZjM3XHViZjM4XHVi''@;'; put 'put ''ZjM5XHViZjNhXHViZjNiXHViZjNjXHViZjNkXHViZjNlXHViZjNmXHViZjQyXHViZjQzXHViZjQ1XHViZjQ2XHViZjQ3XHViZjQ5XHViZjRhXHViZjRiXHViZjRjXHViZjRkXHViZjRlXHViZjRmXHViZjUyXHViZjUzXHViZjU0XHViZjU2XHViZjU3XHViZjU4XHViZjU5XHViZjVhXHViZjVi''@;'; put 'put ''XHViZjVjXHViZjVkXHViZjVlXHViZjVmXHViZjYwXHViZjYxXHViZjYyXHViZjYzXHViZjY0XHViZjY1XHViZjY2XHViZjY3XHViZjY4XHViZjY5XHViZjZhXHViZjZiXHViZjZjXHViZjZkXHViZjZlXHViZjZmXHViZjcwXHViZjcxXHViZjcyXHViZjczXHViZjc0XHViZjc1XHViZjc2XHVi''@;'; put 'put ''Zjc3XHViZjc4XHViZjc5XHViZjdhXHViZjdiXHViZjdjXHViZjdkXHViZjdlXHViZjdmXHViZjgwXHViZjgxXHViZjgyXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTUwXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNTBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTUwXVtnXV09Mzg0MDAr''@;'; put 'put ''ZyxfWzM4NDAwK2ddPXlbMTUwXVtnXSk7Zm9yKHlbMTUxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZjgzXHViZjg0XHViZjg1XHViZjg2XHViZjg3XHViZjg4XHViZjg5XHViZjhhXHViZjhiXHViZjhjXHViZjhkXHVi''@;'; put 'put ''ZjhlXHViZjhmXHViZjkwXHViZjkxXHViZjkyXHViZjkzXHViZjk1XHViZjk2XHViZjk3XHViZjk4XHViZjk5XHViZjlhXHViZjliXHViZjljXHViZjlkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZjllXHViZjlmXHViZmEwXHViZmExXHViZmEyXHViZmEzXHViZmE0''@;'; put 'put ''XHViZmE1XHViZmE2XHViZmE3XHViZmE4XHViZmE5XHViZmFhXHViZmFiXHViZmFjXHViZmFkXHViZmFlXHViZmFmXHViZmIxXHViZmIyXHViZmIzXHViZmI0XHViZmI1XHViZmI2XHViZmI3XHViZmI4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHViZmI5XHViZmJhXHVi''@;'; put 'put ''ZmJiXHViZmJjXHViZmJkXHViZmJlXHViZmJmXHViZmMwXHViZmMxXHViZmMyXHViZmMzXHViZmM0XHViZmM2XHViZmM3XHViZmM4XHViZmM5XHViZmNhXHViZmNiXHViZmNlXHViZmNmXHViZmQxXHViZmQyXHViZmQzXHViZmQ1XHViZmQ2XHViZmQ3XHViZmQ4XHViZmQ5XHViZmRhXHViZmRi''@;'; put 'put ''XHViZmRkXHViZmRlXHViZmUwXHViZmUyXHViZmUzXHViZmU0XHViZmU1XHViZmU2XHViZmU3XHViZmU4XHViZmU5XHViZmVhXHViZmViXHViZmVjXHViZmVkXHViZmVlXHViZmVmXHViZmYwXHViZmYxXHViZmYyXHViZmYzXHViZmY0XHViZmY1XHViZmY2XHViZmY3XHViZmY4XHViZmY5XHVi''@;'; put 'put ''ZmZhXHViZmZiXHViZmZjXHViZmZkXHViZmZlXHViZmZmXHVjMDAwXHVjMDAxXHVjMDAyXHVjMDAzXHVjMDA0XHVjMDA1XHVjMDA2XHVjMDA3XHVjMDA4XHVjMDA5XHVjMDBhXHVjMDBiXHVjMDBjXHVjMDBkXHVjMDBlXHVjMDBmXHVjMDEwXHVjMDExXHVjMDEyXHVjMDEzXHVjMDE0XHVjMDE1''@;'; put 'put ''XHVjMDE2XHVjMDE3XHVjMDE4XHVjMDE5XHVjMDFhXHVjMDFiXHVjMDFjXHVjMDFkXHVjMDFlXHVjMDFmXHVjMDIwXHVjMDIxXHVjMDIyXHVjMDIzXHVjMDI0XHVjMDI1XHVjMDI2XHVjMDI3XHVjMDI4XHVjMDI5XHVjMDJhXHVjMDJiXHVjMDJjXHVjMDJkXHVjMDJlXHVjMDJmXHVjMDMwXHVj''@;'; put 'put ''MDMxXHVjMDMyXHVjMDMzXHVjMDM0XHVjMDM1XHVjMDM2XHVjMDM3XHVjMDM4XHVjMDM5XHVjMDNhXHVjMDNiXHVjMDNkXHVjMDNlXHVjMDNmXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTUxXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNTFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTUx''@;'; put 'put ''XVtnXV09Mzg2NTYrZyxfWzM4NjU2K2ddPXlbMTUxXVtnXSk7Zm9yKHlbMTUyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMDQwXHVjMDQxXHVjMDQyXHVjMDQzXHVjMDQ0XHVjMDQ1XHVjMDQ2XHVjMDQ3XHVjMDQ4XHVj''@;'; put 'put ''MDQ5XHVjMDRhXHVjMDRiXHVjMDRjXHVjMDRkXHVjMDRlXHVjMDRmXHVjMDUwXHVjMDUyXHVjMDUzXHVjMDU0XHVjMDU1XHVjMDU2XHVjMDU3XHVjMDU5XHVjMDVhXHVjMDViXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMDVkXHVjMDVlXHVjMDVmXHVjMDYxXHVjMDYy''@;'; put 'put ''XHVjMDYzXHVjMDY0XHVjMDY1XHVjMDY2XHVjMDY3XHVjMDZhXHVjMDZiXHVjMDZjXHVjMDZkXHVjMDZlXHVjMDZmXHVjMDcwXHVjMDcxXHVjMDcyXHVjMDczXHVjMDc0XHVjMDc1XHVjMDc2XHVjMDc3XHVjMDc4XHVjMDc5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVj''@;'; put 'put ''MDdhXHVjMDdiXHVjMDdjXHVjMDdkXHVjMDdlXHVjMDdmXHVjMDgwXHVjMDgxXHVjMDgyXHVjMDgzXHVjMDg0XHVjMDg1XHVjMDg2XHVjMDg3XHVjMDg4XHVjMDg5XHVjMDhhXHVjMDhiXHVjMDhjXHVjMDhkXHVjMDhlXHVjMDhmXHVjMDkyXHVjMDkzXHVjMDk1XHVjMDk2XHVjMDk3XHVjMDk5''@;'; put 'put ''XHVjMDlhXHVjMDliXHVjMDljXHVjMDlkXHVjMDllXHVjMDlmXHVjMGEyXHVjMGE0XHVjMGE2XHVjMGE3XHVjMGE4XHVjMGE5XHVjMGFhXHVjMGFiXHVjMGFlXHVjMGIxXHVjMGIyXHVjMGI3XHVjMGI4XHVjMGI5XHVjMGJhXHVjMGJiXHVjMGJlXHVjMGMyXHVjMGMzXHVjMGM0XHVjMGM2XHVj''@;'; put 'put ''MGM3XHVjMGNhXHVjMGNiXHVjMGNkXHVjMGNlXHVjMGNmXHVjMGQxXHVjMGQyXHVjMGQzXHVjMGQ0XHVjMGQ1XHVjMGQ2XHVjMGQ3XHVjMGRhXHVjMGRlXHVjMGRmXHVjMGUwXHVjMGUxXHVjMGUyXHVjMGUzXHVjMGU2XHVjMGU3XHVjMGU5XHVjMGVhXHVjMGViXHVjMGVkXHVjMGVlXHVjMGVm''@;'; put 'put ''XHVjMGYwXHVjMGYxXHVjMGYyXHVjMGYzXHVjMGY2XHVjMGY4XHVjMGZhXHVjMGZiXHVjMGZjXHVjMGZkXHVjMGZlXHVjMGZmXHVjMTAxXHVjMTAyXHVjMTAzXHVjMTA1XHVjMTA2XHVjMTA3XHVjMTA5XHVjMTBhXHVjMTBiXHVjMTBjXHVjMTBkXHVjMTBlXHVjMTBmXHVjMTExXHVjMTEyXHVj''@;'; put 'put ''MTEzXHVjMTE0XHVjMTE2XHVjMTE3XHVjMTE4XHVjMTE5XHVjMTFhXHVjMTFiXHVjMTIxXHVjMTIyXHVjMTI1XHVjMTI4XHVjMTI5XHVjMTJhXHVjMTJiXHVjMTJlXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTUyXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNTJdW2ddLmNoYXJDb2RlQXQo''@;'; put 'put ''MCkmJihJW3lbMTUyXVtnXV09Mzg5MTIrZyxfWzM4OTEyK2ddPXlbMTUyXVtnXSk7Zm9yKHlbMTUzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMTMyXHVjMTMzXHVjMTM0XHVjMTM1XHVjMTM3XHVjMTNhXHVjMTNiXHVj''@;'; put 'put ''MTNkXHVjMTNlXHVjMTNmXHVjMTQxXHVjMTQyXHVjMTQzXHVjMTQ0XHVjMTQ1XHVjMTQ2XHVjMTQ3XHVjMTRhXHVjMTRlXHVjMTRmXHVjMTUwXHVjMTUxXHVjMTUyXHVjMTUzXHVjMTU2XHVjMTU3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMTU5XHVjMTVhXHVjMTVi''@;'; put 'put ''XHVjMTVkXHVjMTVlXHVjMTVmXHVjMTYwXHVjMTYxXHVjMTYyXHVjMTYzXHVjMTY2XHVjMTZhXHVjMTZiXHVjMTZjXHVjMTZkXHVjMTZlXHVjMTZmXHVjMTcxXHVjMTcyXHVjMTczXHVjMTc1XHVjMTc2XHVjMTc3XHVjMTc5XHVjMTdhXHVjMTdiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVjMTdjXHVjMTdkXHVjMTdlXHVjMTdmXHVjMTgwXHVjMTgxXHVjMTgyXHVjMTgzXHVjMTg0XHVjMTg2XHVjMTg3XHVjMTg4XHVjMTg5XHVjMThhXHVjMThiXHVjMThmXHVjMTkxXHVjMTkyXHVjMTkzXHVjMTk1XHVjMTk3XHVjMTk4XHVjMTk5XHVjMTlhXHVjMTliXHVjMTll''@;'; put 'put ''XHVjMWEwXHVjMWEyXHVjMWEzXHVjMWE0XHVjMWE2XHVjMWE3XHVjMWFhXHVjMWFiXHVjMWFkXHVjMWFlXHVjMWFmXHVjMWIxXHVjMWIyXHVjMWIzXHVjMWI0XHVjMWI1XHVjMWI2XHVjMWI3XHVjMWI4XHVjMWI5XHVjMWJhXHVjMWJiXHVjMWJjXHVjMWJlXHVjMWJmXHVjMWMwXHVjMWMxXHVj''@;'; put 'put ''MWMyXHVjMWMzXHVjMWM1XHVjMWM2XHVjMWM3XHVjMWM5XHVjMWNhXHVjMWNiXHVjMWNkXHVjMWNlXHVjMWNmXHVjMWQwXHVjMWQxXHVjMWQyXHVjMWQzXHVjMWQ1XHVjMWQ2XHVjMWQ5XHVjMWRhXHVjMWRiXHVjMWRjXHVjMWRkXHVjMWRlXHVjMWRmXHVjMWUxXHVjMWUyXHVjMWUzXHVjMWU1''@;'; put 'put ''XHVjMWU2XHVjMWU3XHVjMWU5XHVjMWVhXHVjMWViXHVjMWVjXHVjMWVkXHVjMWVlXHVjMWVmXHVjMWYyXHVjMWY0XHVjMWY1XHVjMWY2XHVjMWY3XHVjMWY4XHVjMWY5XHVjMWZhXHVjMWZiXHVjMWZlXHVjMWZmXHVjMjAxXHVjMjAyXHVjMjAzXHVjMjA1XHVjMjA2XHVjMjA3XHVjMjA4XHVj''@;'; put 'put ''MjA5XHVjMjBhXHVjMjBiXHVjMjBlXHVjMjEwXHVjMjEyXHVjMjEzXHVjMjE0XHVjMjE1XHVjMjE2XHVjMjE3XHVjMjFhXHVjMjFiXHVjMjFkXHVjMjFlXHVjMjIxXHVjMjIyXHVjMjIzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTUzXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNTNdW2dd''@;'; put 'put ''LmNoYXJDb2RlQXQoMCkmJihJW3lbMTUzXVtnXV09MzkxNjgrZyxfWzM5MTY4K2ddPXlbMTUzXVtnXSk7Zm9yKHlbMTU0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMjI0XHVjMjI1XHVjMjI2XHVjMjI3XHVjMjJhXHVj''@;'; put 'put ''MjJjXHVjMjJlXHVjMjMwXHVjMjMzXHVjMjM1XHVjMjM2XHVjMjM3XHVjMjM4XHVjMjM5XHVjMjNhXHVjMjNiXHVjMjNjXHVjMjNkXHVjMjNlXHVjMjNmXHVjMjQwXHVjMjQxXHVjMjQyXHVjMjQzXHVjMjQ0XHVjMjQ1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMjQ2''@;'; put 'put ''XHVjMjQ3XHVjMjQ5XHVjMjRhXHVjMjRiXHVjMjRjXHVjMjRkXHVjMjRlXHVjMjRmXHVjMjUyXHVjMjUzXHVjMjU1XHVjMjU2XHVjMjU3XHVjMjU5XHVjMjVhXHVjMjViXHVjMjVjXHVjMjVkXHVjMjVlXHVjMjVmXHVjMjYxXHVjMjYyXHVjMjYzXHVjMjY0XHVjMjY2XHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMjY3XHVjMjY4XHVjMjY5XHVjMjZhXHVjMjZiXHVjMjZlXHVjMjZmXHVjMjcxXHVjMjcyXHVjMjczXHVjMjc1XHVjMjc2XHVjMjc3XHVjMjc4XHVjMjc5XHVjMjdhXHVjMjdiXHVjMjdlXHVjMjgwXHVjMjgyXHVjMjgzXHVjMjg0XHVjMjg1XHVjMjg2''@;'; put 'put ''XHVjMjg3XHVjMjhhXHVjMjhiXHVjMjhjXHVjMjhkXHVjMjhlXHVjMjhmXHVjMjkxXHVjMjkyXHVjMjkzXHVjMjk0XHVjMjk1XHVjMjk2XHVjMjk3XHVjMjk5XHVjMjlhXHVjMjljXHVjMjllXHVjMjlmXHVjMmEwXHVjMmExXHVjMmEyXHVjMmEzXHVjMmE2XHVjMmE3XHVjMmE5XHVjMmFhXHVj''@;'; put 'put ''MmFiXHVjMmFlXHVjMmFmXHVjMmIwXHVjMmIxXHVjMmIyXHVjMmIzXHVjMmI2XHVjMmI4XHVjMmJhXHVjMmJiXHVjMmJjXHVjMmJkXHVjMmJlXHVjMmJmXHVjMmMwXHVjMmMxXHVjMmMyXHVjMmMzXHVjMmM0XHVjMmM1XHVjMmM2XHVjMmM3XHVjMmM4XHVjMmM5XHVjMmNhXHVjMmNiXHVjMmNj''@;'; put 'put ''XHVjMmNkXHVjMmNlXHVjMmNmXHVjMmQwXHVjMmQxXHVjMmQyXHVjMmQzXHVjMmQ0XHVjMmQ1XHVjMmQ2XHVjMmQ3XHVjMmQ4XHVjMmQ5XHVjMmRhXHVjMmRiXHVjMmRlXHVjMmRmXHVjMmUxXHVjMmUyXHVjMmU1XHVjMmU2XHVjMmU3XHVjMmU4XHVjMmU5XHVjMmVhXHVjMmVlXHVjMmYwXHVj''@;'; put 'put ''MmYyXHVjMmYzXHVjMmY0XHVjMmY1XHVjMmY3XHVjMmZhXHVjMmZkXHVjMmZlXHVjMmZmXHVjMzAxXHVjMzAyXHVjMzAzXHVjMzA0XHVjMzA1XHVjMzA2XHVjMzA3XHVjMzBhXHVjMzBiXHVjMzBlXHVjMzBmXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTU0XS5sZW5ndGg7KytnKTY1NTMz''@;'; put 'put ''IT09eVsxNTRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTU0XVtnXV09Mzk0MjQrZyxfWzM5NDI0K2ddPXlbMTU0XVtnXSk7Zm9yKHlbMTU1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMzEwXHVjMzExXHVjMzEyXHVj''@;'; put 'put ''MzE2XHVjMzE3XHVjMzE5XHVjMzFhXHVjMzFiXHVjMzFkXHVjMzFlXHVjMzFmXHVjMzIwXHVjMzIxXHVjMzIyXHVjMzIzXHVjMzI2XHVjMzI3XHVjMzJhXHVjMzJiXHVjMzJjXHVjMzJkXHVjMzJlXHVjMzJmXHVjMzMwXHVjMzMxXHVjMzMyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVjMzMzXHVjMzM0XHVjMzM1XHVjMzM2XHVjMzM3XHVjMzM4XHVjMzM5XHVjMzNhXHVjMzNiXHVjMzNjXHVjMzNkXHVjMzNlXHVjMzNmXHVjMzQwXHVjMzQxXHVjMzQyXHVjMzQzXHVjMzQ0XHVjMzQ2XHVjMzQ3XHVjMzQ4XHVjMzQ5XHVjMzRhXHVjMzRiXHVjMzRjXHVjMzRkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjMzRlXHVjMzRmXHVjMzUwXHVjMzUxXHVjMzUyXHVjMzUzXHVjMzU0XHVjMzU1XHVjMzU2XHVjMzU3XHVjMzU4XHVjMzU5XHVjMzVhXHVjMzViXHVjMzVjXHVjMzVkXHVjMzVlXHVjMzVmXHVjMzYwXHVjMzYxXHVjMzYyXHVjMzYz''@;'; put 'put ''XHVjMzY0XHVjMzY1XHVjMzY2XHVjMzY3XHVjMzZhXHVjMzZiXHVjMzZkXHVjMzZlXHVjMzZmXHVjMzcxXHVjMzczXHVjMzc0XHVjMzc1XHVjMzc2XHVjMzc3XHVjMzdhXHVjMzdiXHVjMzdlXHVjMzdmXHVjMzgwXHVjMzgxXHVjMzgyXHVjMzgzXHVjMzg1XHVjMzg2XHVjMzg3XHVjMzg5XHVj''@;'; put 'put ''MzhhXHVjMzhiXHVjMzhkXHVjMzhlXHVjMzhmXHVjMzkwXHVjMzkxXHVjMzkyXHVjMzkzXHVjMzk0XHVjMzk1XHVjMzk2XHVjMzk3XHVjMzk4XHVjMzk5XHVjMzlhXHVjMzliXHVjMzljXHVjMzlkXHVjMzllXHVjMzlmXHVjM2EwXHVjM2ExXHVjM2EyXHVjM2EzXHVjM2E0XHVjM2E1XHVjM2E2''@;'; put 'put ''XHVjM2E3XHVjM2E4XHVjM2E5XHVjM2FhXHVjM2FiXHVjM2FjXHVjM2FkXHVjM2FlXHVjM2FmXHVjM2IwXHVjM2IxXHVjM2IyXHVjM2IzXHVjM2I0XHVjM2I1XHVjM2I2XHVjM2I3XHVjM2I4XHVjM2I5XHVjM2JhXHVjM2JiXHVjM2JjXHVjM2JkXHVjM2JlXHVjM2JmXHVjM2MxXHVjM2MyXHVj''@;'; put 'put ''M2MzXHVjM2M0XHVjM2M1XHVjM2M2XHVjM2M3XHVjM2M4XHVjM2M5XHVjM2NhXHVjM2NiXHVjM2NjXHVjM2NkXHVjM2NlXHVjM2NmXHVjM2QwXHVjM2QxXHVjM2QyXHVjM2QzXHVjM2Q0XHVjM2Q1XHVjM2Q2XHVjM2Q3XHVjM2RhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTU1XS5sZW5n''@;'; put 'put ''dGg7KytnKTY1NTMzIT09eVsxNTVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTU1XVtnXV09Mzk2ODArZyxfWzM5NjgwK2ddPXlbMTU1XVtnXSk7Zm9yKHlbMTU2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjM2RiXHVj''@;'; put 'put ''M2RkXHVjM2RlXHVjM2UxXHVjM2UzXHVjM2U0XHVjM2U1XHVjM2U2XHVjM2U3XHVjM2VhXHVjM2ViXHVjM2VjXHVjM2VlXHVjM2VmXHVjM2YwXHVjM2YxXHVjM2YyXHVjM2YzXHVjM2Y2XHVjM2Y3XHVjM2Y5XHVjM2ZhXHVjM2ZiXHVjM2ZjXHVjM2ZkXHVjM2ZlXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVjM2ZmXHVjNDAwXHVjNDAxXHVjNDAyXHVjNDAzXHVjNDA0XHVjNDA1XHVjNDA2XHVjNDA3XHVjNDA5XHVjNDBhXHVjNDBiXHVjNDBjXHVjNDBkXHVjNDBlXHVjNDBmXHVjNDExXHVjNDEyXHVjNDEzXHVjNDE0XHVjNDE1XHVjNDE2XHVjNDE3XHVjNDE4XHVj''@;'; put 'put ''NDE5XHVjNDFhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNDFiXHVjNDFjXHVjNDFkXHVjNDFlXHVjNDFmXHVjNDIwXHVjNDIxXHVjNDIyXHVjNDIzXHVjNDI1XHVjNDI2XHVjNDI3XHVjNDI4XHVjNDI5XHVjNDJhXHVjNDJiXHVjNDJkXHVjNDJlXHVjNDJmXHVjNDMx''@;'; put 'put ''XHVjNDMyXHVjNDMzXHVjNDM1XHVjNDM2XHVjNDM3XHVjNDM4XHVjNDM5XHVjNDNhXHVjNDNiXHVjNDNlXHVjNDNmXHVjNDQwXHVjNDQxXHVjNDQyXHVjNDQzXHVjNDQ0XHVjNDQ1XHVjNDQ2XHVjNDQ3XHVjNDQ5XHVjNDRhXHVjNDRiXHVjNDRjXHVjNDRkXHVjNDRlXHVjNDRmXHVjNDUwXHVj''@;'; put 'put ''NDUxXHVjNDUyXHVjNDUzXHVjNDU0XHVjNDU1XHVjNDU2XHVjNDU3XHVjNDU4XHVjNDU5XHVjNDVhXHVjNDViXHVjNDVjXHVjNDVkXHVjNDVlXHVjNDVmXHVjNDYwXHVjNDYxXHVjNDYyXHVjNDYzXHVjNDY2XHVjNDY3XHVjNDY5XHVjNDZhXHVjNDZiXHVjNDZkXHVjNDZlXHVjNDZmXHVjNDcw''@;'; put 'put ''XHVjNDcxXHVjNDcyXHVjNDczXHVjNDc2XHVjNDc3XHVjNDc4XHVjNDdhXHVjNDdiXHVjNDdjXHVjNDdkXHVjNDdlXHVjNDdmXHVjNDgxXHVjNDgyXHVjNDgzXHVjNDg0XHVjNDg1XHVjNDg2XHVjNDg3XHVjNDg4XHVjNDg5XHVjNDhhXHVjNDhiXHVjNDhjXHVjNDhkXHVjNDhlXHVjNDhmXHVj''@;'; put 'put ''NDkwXHVjNDkxXHVjNDkyXHVjNDkzXHVjNDk1XHVjNDk2XHVjNDk3XHVjNDk4XHVjNDk5XHVjNDlhXHVjNDliXHVjNDlkXHVjNDllXHVjNDlmXHVjNGEwXHVjNGExXHVjNGEyXHVjNGEzXHVjNGE0XHVjNGE1XHVjNGE2XHVjNGE3XHVjNGE4XHVjNGE5XHVmZmZkIi5zcGxpdCgiIiksZz0wO2ch''@;'; put 'put ''PXlbMTU2XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNTZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTU2XVtnXV09Mzk5MzYrZyxfWzM5OTM2K2ddPXlbMTU2XVtnXSk7Zm9yKHlbMTU3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVjNGFhXHVjNGFiXHVjNGFjXHVjNGFkXHVjNGFlXHVjNGFmXHVjNGIwXHVjNGIxXHVjNGIyXHVjNGIzXHVjNGI0XHVjNGI1XHVjNGI2XHVjNGI3XHVjNGI5XHVjNGJhXHVjNGJiXHVjNGJkXHVjNGJlXHVjNGJmXHVjNGMwXHVjNGMxXHVjNGMyXHVjNGMzXHVjNGM0XHVjNGM1XHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNGM2XHVjNGM3XHVjNGM4XHVjNGM5XHVjNGNhXHVjNGNiXHVjNGNjXHVjNGNkXHVjNGNlXHVjNGNmXHVjNGQwXHVjNGQxXHVjNGQyXHVjNGQzXHVjNGQ0XHVjNGQ1XHVjNGQ2XHVjNGQ3XHVjNGQ4XHVjNGQ5XHVjNGRhXHVjNGRiXHVj''@;'; put 'put ''NGRjXHVjNGRkXHVjNGRlXHVjNGRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNGUwXHVjNGUxXHVjNGUyXHVjNGUzXHVjNGU0XHVjNGU1XHVjNGU2XHVjNGU3XHVjNGU4XHVjNGVhXHVjNGViXHVjNGVjXHVjNGVkXHVjNGVlXHVjNGVmXHVjNGYyXHVjNGYzXHVjNGY1''@;'; put 'put ''XHVjNGY2XHVjNGY3XHVjNGY5XHVjNGZiXHVjNGZjXHVjNGZkXHVjNGZlXHVjNTAyXHVjNTAzXHVjNTA0XHVjNTA1XHVjNTA2XHVjNTA3XHVjNTA4XHVjNTA5XHVjNTBhXHVjNTBiXHVjNTBkXHVjNTBlXHVjNTBmXHVjNTExXHVjNTEyXHVjNTEzXHVjNTE1XHVjNTE2XHVjNTE3XHVjNTE4XHVj''@;'; put 'put ''NTE5XHVjNTFhXHVjNTFiXHVjNTFkXHVjNTFlXHVjNTFmXHVjNTIwXHVjNTIxXHVjNTIyXHVjNTIzXHVjNTI0XHVjNTI1XHVjNTI2XHVjNTI3XHVjNTJhXHVjNTJiXHVjNTJkXHVjNTJlXHVjNTJmXHVjNTMxXHVjNTMyXHVjNTMzXHVjNTM0XHVjNTM1XHVjNTM2XHVjNTM3XHVjNTNhXHVjNTNj''@;'; put 'put ''XHVjNTNlXHVjNTNmXHVjNTQwXHVjNTQxXHVjNTQyXHVjNTQzXHVjNTQ2XHVjNTQ3XHVjNTRiXHVjNTRmXHVjNTUwXHVjNTUxXHVjNTUyXHVjNTU2XHVjNTVhXHVjNTViXHVjNTVjXHVjNTVmXHVjNTYyXHVjNTYzXHVjNTY1XHVjNTY2XHVjNTY3XHVjNTY5XHVjNTZhXHVjNTZiXHVjNTZjXHVj''@;'; put 'put ''NTZkXHVjNTZlXHVjNTZmXHVjNTcyXHVjNTc2XHVjNTc3XHVjNTc4XHVjNTc5XHVjNTdhXHVjNTdiXHVjNTdlXHVjNTdmXHVjNTgxXHVjNTgyXHVjNTgzXHVjNTg1XHVjNTg2XHVjNTg4XHVjNTg5XHVjNThhXHVjNThiXHVjNThlXHVjNTkwXHVjNTkyXHVjNTkzXHVjNTk0XHVmZmZkIi5zcGxp''@;'; put 'put ''dCgiIiksZz0wO2chPXlbMTU3XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNTddW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTU3XVtnXV09NDAxOTIrZyxfWzQwMTkyK2ddPXlbMTU3XVtnXSk7Zm9yKHlbMTU4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVjNTk2XHVjNTk5XHVjNTlhXHVjNTliXHVjNTlkXHVjNTllXHVjNTlmXHVjNWExXHVjNWEyXHVjNWEzXHVjNWE0XHVjNWE1XHVjNWE2XHVjNWE3XHVjNWE4XHVjNWFhXHVjNWFiXHVjNWFjXHVjNWFkXHVjNWFlXHVjNWFmXHVjNWIwXHVjNWIxXHVjNWIyXHVjNWIz''@;'; put 'put ''XHVjNWI2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNWI3XHVjNWJhXHVjNWJmXHVjNWMwXHVjNWMxXHVjNWMyXHVjNWMzXHVjNWNiXHVjNWNkXHVjNWNmXHVjNWQyXHVjNWQzXHVjNWQ1XHVjNWQ2XHVjNWQ3XHVjNWQ5XHVjNWRhXHVjNWRiXHVjNWRjXHVjNWRkXHVj''@;'; put 'put ''NWRlXHVjNWRmXHVjNWUyXHVjNWU0XHVjNWU2XHVjNWU3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNWU4XHVjNWU5XHVjNWVhXHVjNWViXHVjNWVmXHVjNWYxXHVjNWYyXHVjNWYzXHVjNWY1XHVjNWY4XHVjNWY5XHVjNWZhXHVjNWZiXHVjNjAyXHVjNjAzXHVjNjA0''@;'; put 'put ''XHVjNjA5XHVjNjBhXHVjNjBiXHVjNjBkXHVjNjBlXHVjNjBmXHVjNjExXHVjNjEyXHVjNjEzXHVjNjE0XHVjNjE1XHVjNjE2XHVjNjE3XHVjNjFhXHVjNjFkXHVjNjFlXHVjNjFmXHVjNjIwXHVjNjIxXHVjNjIyXHVjNjIzXHVjNjI2XHVjNjI3XHVjNjI5XHVjNjJhXHVjNjJiXHVjNjJmXHVj''@;'; put 'put ''NjMxXHVjNjMyXHVjNjM2XHVjNjM4XHVjNjNhXHVjNjNjXHVjNjNkXHVjNjNlXHVjNjNmXHVjNjQyXHVjNjQzXHVjNjQ1XHVjNjQ2XHVjNjQ3XHVjNjQ5XHVjNjRhXHVjNjRiXHVjNjRjXHVjNjRkXHVjNjRlXHVjNjRmXHVjNjUyXHVjNjU2XHVjNjU3XHVjNjU4XHVjNjU5XHVjNjVhXHVjNjVi''@;'; put 'put ''XHVjNjVlXHVjNjVmXHVjNjYxXHVjNjYyXHVjNjYzXHVjNjY0XHVjNjY1XHVjNjY2XHVjNjY3XHVjNjY4XHVjNjY5XHVjNjZhXHVjNjZiXHVjNjZkXHVjNjZlXHVjNjcwXHVjNjcyXHVjNjczXHVjNjc0XHVjNjc1XHVjNjc2XHVjNjc3XHVjNjdhXHVjNjdiXHVjNjdkXHVjNjdlXHVjNjdmXHVj''@;'; put 'put ''NjgxXHVjNjgyXHVjNjgzXHVjNjg0XHVjNjg1XHVjNjg2XHVjNjg3XHVjNjhhXHVjNjhjXHVjNjhlXHVjNjhmXHVjNjkwXHVjNjkxXHVjNjkyXHVjNjkzXHVjNjk2XHVjNjk3XHVjNjk5XHVjNjlhXHVjNjliXHVjNjlkXHVjNjllXHVjNjlmXHVjNmEwXHVjNmExXHVjNmEyXHVjNmEzXHVjNmE2''@;'; put 'put ''XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTU4XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNThdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTU4XVtnXV09NDA0NDgrZyxfWzQwNDQ4K2ddPXlbMTU4XVtnXSk7Zm9yKHlbMTU5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNmE4XHVjNmFhXHVjNmFiXHVjNmFjXHVjNmFkXHVjNmFlXHVjNmFmXHVjNmIyXHVjNmIzXHVjNmI1XHVjNmI2XHVjNmI3XHVjNmJiXHVjNmJjXHVjNmJkXHVjNmJlXHVjNmJmXHVjNmMyXHVjNmM0XHVjNmM2XHVjNmM3XHVjNmM4XHVjNmM5''@;'; put 'put ''XHVjNmNhXHVjNmNiXHVjNmNlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNmNmXHVjNmQxXHVjNmQyXHVjNmQzXHVjNmQ1XHVjNmQ2XHVjNmQ3XHVjNmQ4XHVjNmQ5XHVjNmRhXHVjNmRiXHVjNmRlXHVjNmRmXHVjNmUyXHVjNmUzXHVjNmU0XHVjNmU1XHVjNmU2XHVj''@;'; put 'put ''NmU3XHVjNmVhXHVjNmViXHVjNmVkXHVjNmVlXHVjNmVmXHVjNmYxXHVjNmYyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjNmYzXHVjNmY0XHVjNmY1XHVjNmY2XHVjNmY3XHVjNmZhXHVjNmZiXHVjNmZjXHVjNmZlXHVjNmZmXHVjNzAwXHVjNzAxXHVjNzAyXHVjNzAz''@;'; put 'put ''XHVjNzA2XHVjNzA3XHVjNzA5XHVjNzBhXHVjNzBiXHVjNzBkXHVjNzBlXHVjNzBmXHVjNzEwXHVjNzExXHVjNzEyXHVjNzEzXHVjNzE2XHVjNzE4XHVjNzFhXHVjNzFiXHVjNzFjXHVjNzFkXHVjNzFlXHVjNzFmXHVjNzIyXHVjNzIzXHVjNzI1XHVjNzI2XHVjNzI3XHVjNzI5XHVjNzJhXHVj''@;'; put 'put ''NzJiXHVjNzJjXHVjNzJkXHVjNzJlXHVjNzJmXHVjNzMyXHVjNzM0XHVjNzM2XHVjNzM4XHVjNzM5XHVjNzNhXHVjNzNiXHVjNzNlXHVjNzNmXHVjNzQxXHVjNzQyXHVjNzQzXHVjNzQ1XHVjNzQ2XHVjNzQ3XHVjNzQ4XHVjNzQ5XHVjNzRiXHVjNzRlXHVjNzUwXHVjNzU5XHVjNzVhXHVjNzVi''@;'; put 'put ''XHVjNzVkXHVjNzVlXHVjNzVmXHVjNzYxXHVjNzYyXHVjNzYzXHVjNzY0XHVjNzY1XHVjNzY2XHVjNzY3XHVjNzY5XHVjNzZhXHVjNzZjXHVjNzZkXHVjNzZlXHVjNzZmXHVjNzcwXHVjNzcxXHVjNzcyXHVjNzczXHVjNzc2XHVjNzc3XHVjNzc5XHVjNzdhXHVjNzdiXHVjNzdmXHVjNzgwXHVj''@;'; put 'put ''NzgxXHVjNzgyXHVjNzg2XHVjNzhiXHVjNzhjXHVjNzhkXHVjNzhmXHVjNzkyXHVjNzkzXHVjNzk1XHVjNzk5XHVjNzliXHVjNzljXHVjNzlkXHVjNzllXHVjNzlmXHVjN2EyXHVjN2E3XHVjN2E4XHVjN2E5XHVjN2FhXHVjN2FiXHVjN2FlXHVjN2FmXHVjN2IxXHVjN2IyXHVjN2IzXHVjN2I1''@;'; put 'put ''XHVjN2I2XHVjN2I3XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTU5XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNTldW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTU5XVtnXV09NDA3MDQrZyxfWzQwNzA0K2ddPXlbMTU5XVtnXSk7Zm9yKHlbMTYwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjN2I4XHVjN2I5XHVjN2JhXHVjN2JiXHVjN2JlXHVjN2MyXHVjN2MzXHVjN2M0XHVjN2M1XHVjN2M2XHVjN2M3XHVjN2NhXHVjN2NiXHVjN2NkXHVjN2NmXHVjN2QxXHVjN2QyXHVjN2QzXHVjN2Q0XHVjN2Q1XHVjN2Q2''@;'; put 'put ''XHVjN2Q3XHVjN2Q5XHVjN2RhXHVjN2RiXHVjN2RjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjN2RlXHVjN2RmXHVjN2UwXHVjN2UxXHVjN2UyXHVjN2UzXHVjN2U1XHVjN2U2XHVjN2U3XHVjN2U5XHVjN2VhXHVjN2ViXHVjN2VkXHVjN2VlXHVjN2VmXHVjN2YwXHVj''@;'; put 'put ''N2YxXHVjN2YyXHVjN2YzXHVjN2Y0XHVjN2Y1XHVjN2Y2XHVjN2Y3XHVjN2Y4XHVjN2Y5XHVjN2ZhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjN2ZiXHVjN2ZjXHVjN2ZkXHVjN2ZlXHVjN2ZmXHVjODAyXHVjODAzXHVjODA1XHVjODA2XHVjODA3XHVjODA5XHVjODBi''@;'; put 'put ''XHVjODBjXHVjODBkXHVjODBlXHVjODBmXHVjODEyXHVjODE0XHVjODE3XHVjODE4XHVjODE5XHVjODFhXHVjODFiXHVjODFlXHVjODFmXHVjODIxXHVjODIyXHVjODIzXHVjODI1XHVjODI2XHVjODI3XHVjODI4XHVjODI5XHVjODJhXHVjODJiXHVjODJlXHVjODMwXHVjODMyXHVjODMzXHVj''@;'; put 'put ''ODM0XHVjODM1XHVjODM2XHVjODM3XHVjODM5XHVjODNhXHVjODNiXHVjODNkXHVjODNlXHVjODNmXHVjODQxXHVjODQyXHVjODQzXHVjODQ0XHVjODQ1XHVjODQ2XHVjODQ3XHVjODRhXHVjODRiXHVjODRlXHVjODRmXHVjODUwXHVjODUxXHVjODUyXHVjODUzXHVjODU1XHVjODU2XHVjODU3''@;'; put 'put ''XHVjODU4XHVjODU5XHVjODVhXHVjODViXHVjODVjXHVjODVkXHVjODVlXHVjODVmXHVjODYwXHVjODYxXHVjODYyXHVjODYzXHVjODY0XHVjODY1XHVjODY2XHVjODY3XHVjODY4XHVjODY5XHVjODZhXHVjODZiXHVjODZjXHVjODZkXHVjODZlXHVjODZmXHVjODcyXHVjODczXHVjODc1XHVj''@;'; put 'put ''ODc2XHVjODc3XHVjODc5XHVjODdiXHVjODdjXHVjODdkXHVjODdlXHVjODdmXHVjODgyXHVjODg0XHVjODg4XHVjODg5XHVjODhhXHVjODhlXHVjODhmXHVjODkwXHVjODkxXHVjODkyXHVjODkzXHVjODk1XHVjODk2XHVjODk3XHVjODk4XHVjODk5XHVjODlhXHVjODliXHVjODljXHVjODll''@;'; put 'put ''XHVjOGEwXHVjOGEyXHVjOGEzXHVjOGE0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTYwXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNjBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTYwXVtnXV09NDA5NjArZyxfWzQwOTYwK2ddPXlbMTYwXVtnXSk7Zm9yKHlbMTYxXT0iXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOGE1XHVjOGE2XHVjOGE3XHVjOGE5XHVjOGFhXHVjOGFiXHVjOGFjXHVjOGFkXHVjOGFlXHVjOGFmXHVjOGIwXHVjOGIxXHVjOGIyXHVjOGIzXHVjOGI0XHVjOGI1XHVjOGI2XHVjOGI3XHVjOGI4''@;'; put 'put ''XHVjOGI5XHVjOGJhXHVjOGJiXHVjOGJlXHVjOGJmXHVjOGMwXHVjOGMxXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOGMyXHVjOGMzXHVjOGM1XHVjOGM2XHVjOGM3XHVjOGM5XHVjOGNhXHVjOGNiXHVjOGNkXHVjOGNlXHVjOGNmXHVjOGQwXHVjOGQxXHVjOGQyXHVj''@;'; put 'put ''OGQzXHVjOGQ2XHVjOGQ4XHVjOGRhXHVjOGRiXHVjOGRjXHVjOGRkXHVjOGRlXHVjOGRmXHVjOGUyXHVjOGUzXHVjOGU1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOGU2XHVjOGU3XHVjOGU4XHVjOGU5XHVjOGVhXHVjOGViXHVjOGVjXHVjOGVkXHVjOGVlXHVjOGVm''@;'; put 'put ''XHVjOGYwXHVjOGYxXHVjOGYyXHVjOGYzXHVjOGY0XHVjOGY2XHVjOGY3XHVjOGY4XHVjOGY5XHVjOGZhXHVjOGZiXHVjOGZlXHVjOGZmXHVjOTAxXHVjOTAyXHVjOTAzXHVjOTA3XHVjOTA4XHVjOTA5XHVjOTBhXHVjOTBiXHVjOTBlXHUzMDAwXHUzMDAxXHUzMDAyXHhiN1x1MjAyNVx1MjAy''@;'; put 'put ''Nlx4YThcdTMwMDNceGFkXHUyMDE1XHUyMjI1XHVmZjNjXHUyMjNjXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUzMDE0XHUzMDE1XHUzMDA4XHUzMDA5XHUzMDBhXHUzMDBiXHUzMDBjXHUzMDBkXHUzMDBlXHUzMDBmXHUzMDEwXHUzMDExXHhiMVx4ZDdceGY3XHUyMjYwXHUyMjY0XHUyMjY1''@;'; put 'put ''XHUyMjFlXHUyMjM0XHhiMFx1MjAzMlx1MjAzM1x1MjEwM1x1MjEyYlx1ZmZlMFx1ZmZlMVx1ZmZlNVx1MjY0Mlx1MjY0MFx1MjIyMFx1MjJhNVx1MjMxMlx1MjIwMlx1MjIwN1x1MjI2MVx1MjI1Mlx4YTdcdTIwM2JcdTI2MDZcdTI2MDVcdTI1Y2JcdTI1Y2ZcdTI1Y2VcdTI1YzdcdTI1YzZc''@;'; put 'put ''dTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJcdTI1YmRcdTI1YmNcdTIxOTJcdTIxOTBcdTIxOTFcdTIxOTNcdTIxOTRcdTMwMTNcdTIyNmFcdTIyNmJcdTIyMWFcdTIyM2RcdTIyMWRcdTIyMzVcdTIyMmJcdTIyMmNcdTIyMDhcdTIyMGJcdTIyODZcdTIyODdcdTIyODJcdTIyODNcdTIyMmFcdTIy''@;'; put 'put ''MjlcdTIyMjdcdTIyMjhcdWZmZTJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNjFdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE2MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNjFdW2ddXT00MTIxNitnLF9bNDEyMTYrZ109eVsxNjFdW2ddKTtmb3IoeVsxNjJdPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5MTBcdWM5MTJcdWM5MTNcdWM5MTRcdWM5MTVcdWM5MTZcdWM5MTdcdWM5MTlcdWM5MWFcdWM5MWJcdWM5MWNcdWM5MWRcdWM5MWVcdWM5MWZcdWM5MjBcdWM5MjFcdWM5MjJcdWM5MjNcdWM5MjRcdWM5''@;'; put 'put ''MjVcdWM5MjZcdWM5MjdcdWM5MjhcdWM5MjlcdWM5MmFcdWM5MmJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5MmRcdWM5MmVcdWM5MmZcdWM5MzBcdWM5MzFcdWM5MzJcdWM5MzNcdWM5MzVcdWM5MzZcdWM5MzdcdWM5MzhcdWM5MzlcdWM5M2FcdWM5M2JcdWM5M2Nc''@;'; put 'put ''dWM5M2RcdWM5M2VcdWM5M2ZcdWM5NDBcdWM5NDFcdWM5NDJcdWM5NDNcdWM5NDRcdWM5NDVcdWM5NDZcdWM5NDdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWM5NDhcdWM5NDlcdWM5NGFcdWM5NGJcdWM5NGNcdWM5NGRcdWM5NGVcdWM5NGZcdWM5NTJcdWM5NTNcdWM5''@;'; put 'put ''NTVcdWM5NTZcdWM5NTdcdWM5NTlcdWM5NWFcdWM5NWJcdWM5NWNcdWM5NWRcdWM5NWVcdWM5NWZcdWM5NjJcdWM5NjRcdWM5NjVcdWM5NjZcdWM5NjdcdWM5NjhcdWM5NjlcdWM5NmFcdWM5NmJcdWM5NmRcdWM5NmVcdWM5NmZcdTIxZDJcdTIxZDRcdTIyMDBcdTIyMDNceGI0XHVmZjVlXHUw''@;'; put 'put ''MmM3XHUwMmQ4XHUwMmRkXHUwMmRhXHUwMmQ5XHhiOFx1MDJkYlx4YTFceGJmXHUwMmQwXHUyMjJlXHUyMjExXHUyMjBmXHhhNFx1MjEwOVx1MjAzMFx1MjVjMVx1MjVjMFx1MjViN1x1MjViNlx1MjY2NFx1MjY2MFx1MjY2MVx1MjY2NVx1MjY2N1x1MjY2M1x1MjI5OVx1MjVjOFx1MjVhM1x1''@;'; put 'put ''MjVkMFx1MjVkMVx1MjU5Mlx1MjVhNFx1MjVhNVx1MjVhOFx1MjVhN1x1MjVhNlx1MjVhOVx1MjY2OFx1MjYwZlx1MjYwZVx1MjYxY1x1MjYxZVx4YjZcdTIwMjBcdTIwMjFcdTIxOTVcdTIxOTdcdTIxOTlcdTIxOTZcdTIxOThcdTI2NmRcdTI2NjlcdTI2NmFcdTI2NmNcdTMyN2ZcdTMyMWNc''@;'; put 'put ''dTIxMTZcdTMzYzdcdTIxMjJcdTMzYzJcdTMzZDhcdTIxMjFcdTIwYWNceGFlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTYyXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNjJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTYyXVtnXV09NDE0NzIrZyxfWzQxNDcyK2ddPXlbMTYyXVtnXSk7Zm9yKHlbMTYzXT0iXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOTcxXHVjOTcyXHVjOTczXHVjOTc1XHVjOTc2XHVjOTc3XHVjOTc4XHVjOTc5XHVjOTdhXHVjOTdiXHVjOTdkXHVjOTdlXHVjOTdmXHVjOTgwXHVjOTgxXHVjOTgyXHVjOTgzXHVjOTg0XHVjOTg1XHVjOTg2''@;'; put 'put ''XHVjOTg3XHVjOThhXHVjOThiXHVjOThkXHVjOThlXHVjOThmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOTkxXHVjOTkyXHVjOTkzXHVjOTk0XHVjOTk1XHVjOTk2XHVjOTk3XHVjOTlhXHVjOTljXHVjOTllXHVjOTlmXHVjOWEwXHVjOWExXHVjOWEyXHVjOWEzXHVj''@;'; put 'put ''OWE0XHVjOWE1XHVjOWE2XHVjOWE3XHVjOWE4XHVjOWE5XHVjOWFhXHVjOWFiXHVjOWFjXHVjOWFkXHVjOWFlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOWFmXHVjOWIwXHVjOWIxXHVjOWIyXHVjOWIzXHVjOWI0XHVjOWI1XHVjOWI2XHVjOWI3XHVjOWI4XHVjOWI5''@;'; put 'put ''XHVjOWJhXHVjOWJiXHVjOWJjXHVjOWJkXHVjOWJlXHVjOWJmXHVjOWMyXHVjOWMzXHVjOWM1XHVjOWM2XHVjOWM5XHVjOWNiXHVjOWNjXHVjOWNkXHVjOWNlXHVjOWNmXHVjOWQyXHVjOWQ0XHVjOWQ3XHVjOWQ4XHVjOWRiXHVmZjAxXHVmZjAyXHVmZjAzXHVmZjA0XHVmZjA1XHVmZjA2XHVm''@;'; put 'put ''ZjA3XHVmZjA4XHVmZjA5XHVmZjBhXHVmZjBiXHVmZjBjXHVmZjBkXHVmZjBlXHVmZjBmXHVmZjEwXHVmZjExXHVmZjEyXHVmZjEzXHVmZjE0XHVmZjE1XHVmZjE2XHVmZjE3XHVmZjE4XHVmZjE5XHVmZjFhXHVmZjFiXHVmZjFjXHVmZjFkXHVmZjFlXHVmZjFmXHVmZjIwXHVmZjIxXHVmZjIy''@;'; put 'put ''XHVmZjIzXHVmZjI0XHVmZjI1XHVmZjI2XHVmZjI3XHVmZjI4XHVmZjI5XHVmZjJhXHVmZjJiXHVmZjJjXHVmZjJkXHVmZjJlXHVmZjJmXHVmZjMwXHVmZjMxXHVmZjMyXHVmZjMzXHVmZjM0XHVmZjM1XHVmZjM2XHVmZjM3XHVmZjM4XHVmZjM5XHVmZjNhXHVmZjNiXHVmZmU2XHVmZjNkXHVm''@;'; put 'put ''ZjNlXHVmZjNmXHVmZjQwXHVmZjQxXHVmZjQyXHVmZjQzXHVmZjQ0XHVmZjQ1XHVmZjQ2XHVmZjQ3XHVmZjQ4XHVmZjQ5XHVmZjRhXHVmZjRiXHVmZjRjXHVmZjRkXHVmZjRlXHVmZjRmXHVmZjUwXHVmZjUxXHVmZjUyXHVmZjUzXHVmZjU0XHVmZjU1XHVmZjU2XHVmZjU3XHVmZjU4XHVmZjU5''@;'; put 'put ''XHVmZjVhXHVmZjViXHVmZjVjXHVmZjVkXHVmZmUzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTYzXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNjNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTYzXVtnXV09NDE3MjgrZyxfWzQxNzI4K2ddPXlbMTYzXVtnXSk7Zm9yKHlbMTY0XT0iXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjOWRlXHVjOWRmXHVjOWUxXHVjOWUzXHVjOWU1XHVjOWU2XHVjOWU4XHVjOWU5XHVjOWVhXHVjOWViXHVjOWVlXHVjOWYyXHVjOWYzXHVjOWY0XHVjOWY1XHVjOWY2XHVjOWY3XHVjOWZh''@;'; put 'put ''XHVjOWZiXHVjOWZkXHVjOWZlXHVjOWZmXHVjYTAxXHVjYTAyXHVjYTAzXHVjYTA0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYTA1XHVjYTA2XHVjYTA3XHVjYTBhXHVjYTBlXHVjYTBmXHVjYTEwXHVjYTExXHVjYTEyXHVjYTEzXHVjYTE1XHVjYTE2XHVjYTE3XHVj''@;'; put 'put ''YTE5XHVjYTFhXHVjYTFiXHVjYTFjXHVjYTFkXHVjYTFlXHVjYTFmXHVjYTIwXHVjYTIxXHVjYTIyXHVjYTIzXHVjYTI0XHVjYTI1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYTI2XHVjYTI3XHVjYTI4XHVjYTJhXHVjYTJiXHVjYTJjXHVjYTJkXHVjYTJlXHVjYTJm''@;'; put 'put ''XHVjYTMwXHVjYTMxXHVjYTMyXHVjYTMzXHVjYTM0XHVjYTM1XHVjYTM2XHVjYTM3XHVjYTM4XHVjYTM5XHVjYTNhXHVjYTNiXHVjYTNjXHVjYTNkXHVjYTNlXHVjYTNmXHVjYTQwXHVjYTQxXHVjYTQyXHVjYTQzXHVjYTQ0XHVjYTQ1XHVjYTQ2XHUzMTMxXHUzMTMyXHUzMTMzXHUzMTM0XHUz''@;'; put 'put ''MTM1XHUzMTM2XHUzMTM3XHUzMTM4XHUzMTM5XHUzMTNhXHUzMTNiXHUzMTNjXHUzMTNkXHUzMTNlXHUzMTNmXHUzMTQwXHUzMTQxXHUzMTQyXHUzMTQzXHUzMTQ0XHUzMTQ1XHUzMTQ2XHUzMTQ3XHUzMTQ4XHUzMTQ5XHUzMTRhXHUzMTRiXHUzMTRjXHUzMTRkXHUzMTRlXHUzMTRmXHUzMTUw''@;'; put 'put ''XHUzMTUxXHUzMTUyXHUzMTUzXHUzMTU0XHUzMTU1XHUzMTU2XHUzMTU3XHUzMTU4XHUzMTU5XHUzMTVhXHUzMTViXHUzMTVjXHUzMTVkXHUzMTVlXHUzMTVmXHUzMTYwXHUzMTYxXHUzMTYyXHUzMTYzXHUzMTY0XHUzMTY1XHUzMTY2XHUzMTY3XHUzMTY4XHUzMTY5XHUzMTZhXHUzMTZiXHUz''@;'; put 'put ''MTZjXHUzMTZkXHUzMTZlXHUzMTZmXHUzMTcwXHUzMTcxXHUzMTcyXHUzMTczXHUzMTc0XHUzMTc1XHUzMTc2XHUzMTc3XHUzMTc4XHUzMTc5XHUzMTdhXHUzMTdiXHUzMTdjXHUzMTdkXHUzMTdlXHUzMTdmXHUzMTgwXHUzMTgxXHUzMTgyXHUzMTgzXHUzMTg0XHUzMTg1XHUzMTg2XHUzMTg3''@;'; put 'put ''XHUzMTg4XHUzMTg5XHUzMThhXHUzMThiXHUzMThjXHUzMThkXHUzMThlXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTY0XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNjRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTY0XVtnXV09NDE5ODQrZyxfWzQxOTg0K2ddPXlbMTY0XVtnXSk7Zm9y''@;'; put 'put ''KHlbMTY1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYTQ3XHVjYTQ4XHVjYTQ5XHVjYTRhXHVjYTRiXHVjYTRlXHVjYTRmXHVjYTUxXHVjYTUyXHVjYTUzXHVjYTU1XHVjYTU2XHVjYTU3XHVjYTU4XHVjYTU5XHVjYTVh''@;'; put 'put ''XHVjYTViXHVjYTVlXHVjYTYyXHVjYTYzXHVjYTY0XHVjYTY1XHVjYTY2XHVjYTY3XHVjYTY5XHVjYTZhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYTZiXHVjYTZjXHVjYTZkXHVjYTZlXHVjYTZmXHVjYTcwXHVjYTcxXHVjYTcyXHVjYTczXHVjYTc0XHVjYTc1XHVj''@;'; put 'put ''YTc2XHVjYTc3XHVjYTc4XHVjYTc5XHVjYTdhXHVjYTdiXHVjYTdjXHVjYTdlXHVjYTdmXHVjYTgwXHVjYTgxXHVjYTgyXHVjYTgzXHVjYTg1XHVjYTg2XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYTg3XHVjYTg4XHVjYTg5XHVjYThhXHVjYThiXHVjYThjXHVjYThk''@;'; put 'put ''XHVjYThlXHVjYThmXHVjYTkwXHVjYTkxXHVjYTkyXHVjYTkzXHVjYTk0XHVjYTk1XHVjYTk2XHVjYTk3XHVjYTk5XHVjYTlhXHVjYTliXHVjYTljXHVjYTlkXHVjYTllXHVjYTlmXHVjYWEwXHVjYWExXHVjYWEyXHVjYWEzXHVjYWE0XHVjYWE1XHVjYWE2XHVjYWE3XHUyMTcwXHUyMTcxXHUy''@;'; put 'put ''MTcyXHUyMTczXHUyMTc0XHUyMTc1XHUyMTc2XHUyMTc3XHUyMTc4XHUyMTc5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMTYwXHUyMTYxXHUyMTYyXHUyMTYzXHUyMTY0XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4XHUyMTY5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2''@;'; put 'put ''XHUwM2M3XHUwM2M4XHUwM2M5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTY1XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNjVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTY1XVtnXV09NDIyNDArZyxfWzQyMjQwK2ddPXlb''@;'; put 'put ''MTY1XVtnXSk7Zm9yKHlbMTY2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYWE4XHVjYWE5XHVjYWFhXHVjYWFiXHVjYWFjXHVjYWFkXHVjYWFlXHVjYWFmXHVjYWIwXHVjYWIxXHVjYWIyXHVjYWIzXHVjYWI0XHVjYWI1''@;'; put 'put ''XHVjYWI2XHVjYWI3XHVjYWI4XHVjYWI5XHVjYWJhXHVjYWJiXHVjYWJlXHVjYWJmXHVjYWMxXHVjYWMyXHVjYWMzXHVjYWM1XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYWM2XHVjYWM3XHVjYWM4XHVjYWM5XHVjYWNhXHVjYWNiXHVjYWNlXHVjYWQwXHVjYWQyXHVj''@;'; put 'put ''YWQ0XHVjYWQ1XHVjYWQ2XHVjYWQ3XHVjYWRhXHVjYWRiXHVjYWRjXHVjYWRkXHVjYWRlXHVjYWRmXHVjYWUxXHVjYWUyXHVjYWUzXHVjYWU0XHVjYWU1XHVjYWU2XHVjYWU3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYWU4XHVjYWU5XHVjYWVhXHVjYWViXHVjYWVk''@;'; put 'put ''XHVjYWVlXHVjYWVmXHVjYWYwXHVjYWYxXHVjYWYyXHVjYWYzXHVjYWY1XHVjYWY2XHVjYWY3XHVjYWY4XHVjYWY5XHVjYWZhXHVjYWZiXHVjYWZjXHVjYWZkXHVjYWZlXHVjYWZmXHVjYjAwXHVjYjAxXHVjYjAyXHVjYjAzXHVjYjA0XHVjYjA1XHVjYjA2XHVjYjA3XHVjYjA5XHVjYjBhXHUy''@;'; put 'put ''NTAwXHUyNTAyXHUyNTBjXHUyNTEwXHUyNTE4XHUyNTE0XHUyNTFjXHUyNTJjXHUyNTI0XHUyNTM0XHUyNTNjXHUyNTAxXHUyNTAzXHUyNTBmXHUyNTEzXHUyNTFiXHUyNTE3XHUyNTIzXHUyNTMzXHUyNTJiXHUyNTNiXHUyNTRiXHUyNTIwXHUyNTJmXHUyNTI4XHUyNTM3XHUyNTNmXHUyNTFk''@;'; put 'put ''XHUyNTMwXHUyNTI1XHUyNTM4XHUyNTQyXHUyNTEyXHUyNTExXHUyNTFhXHUyNTE5XHUyNTE2XHUyNTE1XHUyNTBlXHUyNTBkXHUyNTFlXHUyNTFmXHUyNTIxXHUyNTIyXHUyNTI2XHUyNTI3XHUyNTI5XHUyNTJhXHUyNTJkXHUyNTJlXHUyNTMxXHUyNTMyXHUyNTM1XHUyNTM2XHUyNTM5XHUy''@;'; put 'put ''NTNhXHUyNTNkXHUyNTNlXHUyNTQwXHUyNTQxXHUyNTQzXHUyNTQ0XHUyNTQ1XHUyNTQ2XHUyNTQ3XHUyNTQ4XHUyNTQ5XHUyNTRhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTY2XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNjZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTY2XVtnXV09NDI0OTYrZyxf''@;'; put 'put ''WzQyNDk2K2ddPXlbMTY2XVtnXSk7Zm9yKHlbMTY3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYjBiXHVjYjBjXHVjYjBkXHVjYjBlXHVjYjBmXHVjYjExXHVjYjEyXHVjYjEzXHVjYjE1XHVjYjE2XHVjYjE3XHVjYjE5''@;'; put 'put ''XHVjYjFhXHVjYjFiXHVjYjFjXHVjYjFkXHVjYjFlXHVjYjFmXHVjYjIyXHVjYjIzXHVjYjI0XHVjYjI1XHVjYjI2XHVjYjI3XHVjYjI4XHVjYjI5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYjJhXHVjYjJiXHVjYjJjXHVjYjJkXHVjYjJlXHVjYjJmXHVjYjMwXHVj''@;'; put 'put ''YjMxXHVjYjMyXHVjYjMzXHVjYjM0XHVjYjM1XHVjYjM2XHVjYjM3XHVjYjM4XHVjYjM5XHVjYjNhXHVjYjNiXHVjYjNjXHVjYjNkXHVjYjNlXHVjYjNmXHVjYjQwXHVjYjQyXHVjYjQzXHVjYjQ0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYjQ1XHVjYjQ2XHVjYjQ3''@;'; put 'put ''XHVjYjRhXHVjYjRiXHVjYjRkXHVjYjRlXHVjYjRmXHVjYjUxXHVjYjUyXHVjYjUzXHVjYjU0XHVjYjU1XHVjYjU2XHVjYjU3XHVjYjVhXHVjYjViXHVjYjVjXHVjYjVlXHVjYjVmXHVjYjYwXHVjYjYxXHVjYjYyXHVjYjYzXHVjYjY1XHVjYjY2XHVjYjY3XHVjYjY4XHVjYjY5XHVjYjZhXHVj''@;'; put 'put ''YjZiXHVjYjZjXHUzMzk1XHUzMzk2XHUzMzk3XHUyMTEzXHUzMzk4XHUzM2M0XHUzM2EzXHUzM2E0XHUzM2E1XHUzM2E2XHUzMzk5XHUzMzlhXHUzMzliXHUzMzljXHUzMzlkXHUzMzllXHUzMzlmXHUzM2EwXHUzM2ExXHUzM2EyXHUzM2NhXHUzMzhkXHUzMzhlXHUzMzhmXHUzM2NmXHUzMzg4''@;'; put 'put ''XHUzMzg5XHUzM2M4XHUzM2E3XHUzM2E4XHUzM2IwXHUzM2IxXHUzM2IyXHUzM2IzXHUzM2I0XHUzM2I1XHUzM2I2XHUzM2I3XHUzM2I4XHUzM2I5XHUzMzgwXHUzMzgxXHUzMzgyXHUzMzgzXHUzMzg0XHUzM2JhXHUzM2JiXHUzM2JjXHUzM2JkXHUzM2JlXHUzM2JmXHUzMzkwXHUzMzkxXHUz''@;'; put 'put ''MzkyXHUzMzkzXHUzMzk0XHUyMTI2XHUzM2MwXHUzM2MxXHUzMzhhXHUzMzhiXHUzMzhjXHUzM2Q2XHUzM2M1XHUzM2FkXHUzM2FlXHUzM2FmXHUzM2RiXHUzM2E5XHUzM2FhXHUzM2FiXHUzM2FjXHUzM2RkXHUzM2QwXHUzM2QzXHUzM2MzXHUzM2M5XHUzM2RjXHUzM2M2XHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTY3XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNjddW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTY3XVtn''@;'; put 'put ''XV09NDI3NTIrZyxfWzQyNzUyK2ddPXlbMTY3XVtnXSk7Zm9yKHlbMTY4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYjZkXHVjYjZlXHVjYjZmXHVjYjcwXHVjYjcxXHVjYjcyXHVjYjczXHVjYjc0XHVjYjc1XHVjYjc2''@;'; put 'put ''XHVjYjc3XHVjYjdhXHVjYjdiXHVjYjdjXHVjYjdkXHVjYjdlXHVjYjdmXHVjYjgwXHVjYjgxXHVjYjgyXHVjYjgzXHVjYjg0XHVjYjg1XHVjYjg2XHVjYjg3XHVjYjg4XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYjg5XHVjYjhhXHVjYjhiXHVjYjhjXHVjYjhkXHVj''@;'; put 'put ''YjhlXHVjYjhmXHVjYjkwXHVjYjkxXHVjYjkyXHVjYjkzXHVjYjk0XHVjYjk1XHVjYjk2XHVjYjk3XHVjYjk4XHVjYjk5XHVjYjlhXHVjYjliXHVjYjlkXHVjYjllXHVjYjlmXHVjYmEwXHVjYmExXHVjYmEyXHVjYmEzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYmE0''@;'; put 'put ''XHVjYmE1XHVjYmE2XHVjYmE3XHVjYmE4XHVjYmE5XHVjYmFhXHVjYmFiXHVjYmFjXHVjYmFkXHVjYmFlXHVjYmFmXHVjYmIwXHVjYmIxXHVjYmIyXHVjYmIzXHVjYmI0XHVjYmI1XHVjYmI2XHVjYmI3XHVjYmI5XHVjYmJhXHVjYmJiXHVjYmJjXHVjYmJkXHVjYmJlXHVjYmJmXHVjYmMwXHVj''@;'; put 'put ''YmMxXHVjYmMyXHVjYmMzXHVjYmM0XHhjNlx4ZDBceGFhXHUwMTI2XHVmZmZkXHUwMTMyXHVmZmZkXHUwMTNmXHUwMTQxXHhkOFx1MDE1Mlx4YmFceGRlXHUwMTY2XHUwMTRhXHVmZmZkXHUzMjYwXHUzMjYxXHUzMjYyXHUzMjYzXHUzMjY0XHUzMjY1XHUzMjY2XHUzMjY3XHUzMjY4XHUzMjY5''@;'; put 'put ''XHUzMjZhXHUzMjZiXHUzMjZjXHUzMjZkXHUzMjZlXHUzMjZmXHUzMjcwXHUzMjcxXHUzMjcyXHUzMjczXHUzMjc0XHUzMjc1XHUzMjc2XHUzMjc3XHUzMjc4XHUzMjc5XHUzMjdhXHUzMjdiXHUyNGQwXHUyNGQxXHUyNGQyXHUyNGQzXHUyNGQ0XHUyNGQ1XHUyNGQ2XHUyNGQ3XHUyNGQ4XHUy''@;'; put 'put ''NGQ5XHUyNGRhXHUyNGRiXHUyNGRjXHUyNGRkXHUyNGRlXHUyNGRmXHUyNGUwXHUyNGUxXHUyNGUyXHUyNGUzXHUyNGU0XHUyNGU1XHUyNGU2XHUyNGU3XHUyNGU4XHUyNGU5XHUyNDYwXHUyNDYxXHUyNDYyXHUyNDYzXHUyNDY0XHUyNDY1XHUyNDY2XHUyNDY3XHUyNDY4XHUyNDY5XHUyNDZh''@;'; put 'put ''XHUyNDZiXHUyNDZjXHUyNDZkXHUyNDZlXHhiZFx1MjE1M1x1MjE1NFx4YmNceGJlXHUyMTViXHUyMTVjXHUyMTVkXHUyMTVlXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTY4XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNjhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTY4XVtnXV09NDMw''@;'; put 'put ''MDgrZyxfWzQzMDA4K2ddPXlbMTY4XVtnXSk7Zm9yKHlbMTY5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYmM1XHVjYmM2XHVjYmM3XHVjYmM4XHVjYmM5XHVjYmNhXHVjYmNiXHVjYmNjXHVjYmNkXHVjYmNlXHVjYmNm''@;'; put 'put ''XHVjYmQwXHVjYmQxXHVjYmQyXHVjYmQzXHVjYmQ1XHVjYmQ2XHVjYmQ3XHVjYmQ4XHVjYmQ5XHVjYmRhXHVjYmRiXHVjYmRjXHVjYmRkXHVjYmRlXHVjYmRmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYmUwXHVjYmUxXHVjYmUyXHVjYmUzXHVjYmU1XHVjYmU2XHVj''@;'; put 'put ''YmU4XHVjYmVhXHVjYmViXHVjYmVjXHVjYmVkXHVjYmVlXHVjYmVmXHVjYmYwXHVjYmYxXHVjYmYyXHVjYmYzXHVjYmY0XHVjYmY1XHVjYmY2XHVjYmY3XHVjYmY4XHVjYmY5XHVjYmZhXHVjYmZiXHVjYmZjXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVjYmZkXHVjYmZl''@;'; put 'put ''XHVjYmZmXHVjYzAwXHVjYzAxXHVjYzAyXHVjYzAzXHVjYzA0XHVjYzA1XHVjYzA2XHVjYzA3XHVjYzA4XHVjYzA5XHVjYzBhXHVjYzBiXHVjYzBlXHVjYzBmXHVjYzExXHVjYzEyXHVjYzEzXHVjYzE1XHVjYzE2XHVjYzE3XHVjYzE4XHVjYzE5XHVjYzFhXHVjYzFiXHVjYzFlXHVjYzFmXHVj''@;'; put 'put ''YzIwXHVjYzIzXHVjYzI0XHhlNlx1MDExMVx4ZjBcdTAxMjdcdTAxMzFcdTAxMzNcdTAxMzhcdTAxNDBcdTAxNDJceGY4XHUwMTUzXHhkZlx4ZmVcdTAxNjdcdTAxNGJcdTAxNDlcdTMyMDBcdTMyMDFcdTMyMDJcdTMyMDNcdTMyMDRcdTMyMDVcdTMyMDZcdTMyMDdcdTMyMDhcdTMyMDlcdTMy''@;'; put 'put ''MGFcdTMyMGJcdTMyMGNcdTMyMGRcdTMyMGVcdTMyMGZcdTMyMTBcdTMyMTFcdTMyMTJcdTMyMTNcdTMyMTRcdTMyMTVcdTMyMTZcdTMyMTdcdTMyMThcdTMyMTlcdTMyMWFcdTMyMWJcdTI0OWNcdTI0OWRcdTI0OWVcdTI0OWZcdTI0YTBcdTI0YTFcdTI0YTJcdTI0YTNcdTI0YTRcdTI0YTVc''@;'; put 'put ''dTI0YTZcdTI0YTdcdTI0YThcdTI0YTlcdTI0YWFcdTI0YWJcdTI0YWNcdTI0YWRcdTI0YWVcdTI0YWZcdTI0YjBcdTI0YjFcdTI0YjJcdTI0YjNcdTI0YjRcdTI0YjVcdTI0NzRcdTI0NzVcdTI0NzZcdTI0NzdcdTI0NzhcdTI0NzlcdTI0N2FcdTI0N2JcdTI0N2NcdTI0N2RcdTI0N2VcdTI0''@;'; put 'put ''N2ZcdTI0ODBcdTI0ODFcdTI0ODJceGI5XHhiMlx4YjNcdTIwNzRcdTIwN2ZcdTIwODFcdTIwODJcdTIwODNcdTIwODRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNjldLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE2OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNjldW2ddXT00MzI2NCtn''@;'; put 'put ''LF9bNDMyNjQrZ109eVsxNjldW2ddKTtmb3IoeVsxNzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjMjVcdWNjMjZcdWNjMmFcdWNjMmJcdWNjMmRcdWNjMmZcdWNjMzFcdWNjMzJcdWNjMzNcdWNjMzRcdWNjMzVcdWNj''@;'; put 'put ''MzZcdWNjMzdcdWNjM2FcdWNjM2ZcdWNjNDBcdWNjNDFcdWNjNDJcdWNjNDNcdWNjNDZcdWNjNDdcdWNjNDlcdWNjNGFcdWNjNGJcdWNjNGRcdWNjNGVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjNGZcdWNjNTBcdWNjNTFcdWNjNTJcdWNjNTNcdWNjNTZcdWNjNWFc''@;'; put 'put ''dWNjNWJcdWNjNWNcdWNjNWRcdWNjNWVcdWNjNWZcdWNjNjFcdWNjNjJcdWNjNjNcdWNjNjVcdWNjNjdcdWNjNjlcdWNjNmFcdWNjNmJcdWNjNmNcdWNjNmRcdWNjNmVcdWNjNmZcdWNjNzFcdWNjNzJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjNzNcdWNjNzRcdWNj''@;'; put 'put ''NzZcdWNjNzdcdWNjNzhcdWNjNzlcdWNjN2FcdWNjN2JcdWNjN2NcdWNjN2RcdWNjN2VcdWNjN2ZcdWNjODBcdWNjODFcdWNjODJcdWNjODNcdWNjODRcdWNjODVcdWNjODZcdWNjODdcdWNjODhcdWNjODlcdWNjOGFcdWNjOGJcdWNjOGNcdWNjOGRcdWNjOGVcdWNjOGZcdWNjOTBcdWNjOTFc''@;'; put 'put ''dWNjOTJcdWNjOTNcdTMwNDFcdTMwNDJcdTMwNDNcdTMwNDRcdTMwNDVcdTMwNDZcdTMwNDdcdTMwNDhcdTMwNDlcdTMwNGFcdTMwNGJcdTMwNGNcdTMwNGRcdTMwNGVcdTMwNGZcdTMwNTBcdTMwNTFcdTMwNTJcdTMwNTNcdTMwNTRcdTMwNTVcdTMwNTZcdTMwNTdcdTMwNThcdTMwNTlcdTMw''@;'; put 'put ''NWFcdTMwNWJcdTMwNWNcdTMwNWRcdTMwNWVcdTMwNWZcdTMwNjBcdTMwNjFcdTMwNjJcdTMwNjNcdTMwNjRcdTMwNjVcdTMwNjZcdTMwNjdcdTMwNjhcdTMwNjlcdTMwNmFcdTMwNmJcdTMwNmNcdTMwNmRcdTMwNmVcdTMwNmZcdTMwNzBcdTMwNzFcdTMwNzJcdTMwNzNcdTMwNzRcdTMwNzVc''@;'; put 'put ''dTMwNzZcdTMwNzdcdTMwNzhcdTMwNzlcdTMwN2FcdTMwN2JcdTMwN2NcdTMwN2RcdTMwN2VcdTMwN2ZcdTMwODBcdTMwODFcdTMwODJcdTMwODNcdTMwODRcdTMwODVcdTMwODZcdTMwODdcdTMwODhcdTMwODlcdTMwOGFcdTMwOGJcdTMwOGNcdTMwOGRcdTMwOGVcdTMwOGZcdTMwOTBcdTMw''@;'; put 'put ''OTFcdTMwOTJcdTMwOTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNzBdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE3MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNzBd''@;'; put 'put ''W2ddXT00MzUyMCtnLF9bNDM1MjArZ109eVsxNzBdW2ddKTtmb3IoeVsxNzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjOTRcdWNjOTVcdWNjOTZcdWNjOTdcdWNjOWFcdWNjOWJcdWNjOWRcdWNjOWVcdWNjOWZcdWNj''@;'; put 'put ''YTFcdWNjYTJcdWNjYTNcdWNjYTRcdWNjYTVcdWNjYTZcdWNjYTdcdWNjYWFcdWNjYWVcdWNjYWZcdWNjYjBcdWNjYjFcdWNjYjJcdWNjYjNcdWNjYjZcdWNjYjdcdWNjYjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjYmFcdWNjYmJcdWNjYmRcdWNjYmVcdWNjYmZc''@;'; put 'put ''dWNjYzBcdWNjYzFcdWNjYzJcdWNjYzNcdWNjYzZcdWNjYzhcdWNjY2FcdWNjY2JcdWNjY2NcdWNjY2RcdWNjY2VcdWNjY2ZcdWNjZDFcdWNjZDJcdWNjZDNcdWNjZDVcdWNjZDZcdWNjZDdcdWNjZDhcdWNjZDlcdWNjZGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNj''@;'; put 'put ''ZGJcdWNjZGNcdWNjZGRcdWNjZGVcdWNjZGZcdWNjZTBcdWNjZTFcdWNjZTJcdWNjZTNcdWNjZTVcdWNjZTZcdWNjZTdcdWNjZThcdWNjZTlcdWNjZWFcdWNjZWJcdWNjZWRcdWNjZWVcdWNjZWZcdWNjZjFcdWNjZjJcdWNjZjNcdWNjZjRcdWNjZjVcdWNjZjZcdWNjZjdcdWNjZjhcdWNjZjlc''@;'; put 'put ''dWNjZmFcdWNjZmJcdWNjZmNcdWNjZmRcdTMwYTFcdTMwYTJcdTMwYTNcdTMwYTRcdTMwYTVcdTMwYTZcdTMwYTdcdTMwYThcdTMwYTlcdTMwYWFcdTMwYWJcdTMwYWNcdTMwYWRcdTMwYWVcdTMwYWZcdTMwYjBcdTMwYjFcdTMwYjJcdTMwYjNcdTMwYjRcdTMwYjVcdTMwYjZcdTMwYjdcdTMw''@;'; put 'put ''YjhcdTMwYjlcdTMwYmFcdTMwYmJcdTMwYmNcdTMwYmRcdTMwYmVcdTMwYmZcdTMwYzBcdTMwYzFcdTMwYzJcdTMwYzNcdTMwYzRcdTMwYzVcdTMwYzZcdTMwYzdcdTMwYzhcdTMwYzlcdTMwY2FcdTMwY2JcdTMwY2NcdTMwY2RcdTMwY2VcdTMwY2ZcdTMwZDBcdTMwZDFcdTMwZDJcdTMwZDNc''@;'; put 'put ''dTMwZDRcdTMwZDVcdTMwZDZcdTMwZDdcdTMwZDhcdTMwZDlcdTMwZGFcdTMwZGJcdTMwZGNcdTMwZGRcdTMwZGVcdTMwZGZcdTMwZTBcdTMwZTFcdTMwZTJcdTMwZTNcdTMwZTRcdTMwZTVcdTMwZTZcdTMwZTdcdTMwZThcdTMwZTlcdTMwZWFcdTMwZWJcdTMwZWNcdTMwZWRcdTMwZWVcdTMw''@;'; put 'put ''ZWZcdTMwZjBcdTMwZjFcdTMwZjJcdTMwZjNcdTMwZjRcdTMwZjVcdTMwZjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNzFdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE3MV1bZ10uY2hhckNvZGVBdCgw''@;'; put 'put ''KSYmKElbeVsxNzFdW2ddXT00Mzc3NitnLF9bNDM3NzYrZ109eVsxNzFdW2ddKTtmb3IoeVsxNzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNjZmVcdWNjZmZcdWNkMDBcdWNkMDJcdWNkMDNcdWNkMDRcdWNkMDVcdWNk''@;'; put 'put ''MDZcdWNkMDdcdWNkMGFcdWNkMGJcdWNkMGRcdWNkMGVcdWNkMGZcdWNkMTFcdWNkMTJcdWNkMTNcdWNkMTRcdWNkMTVcdWNkMTZcdWNkMTdcdWNkMWFcdWNkMWNcdWNkMWVcdWNkMWZcdWNkMjBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkMjFcdWNkMjJcdWNkMjNc''@;'; put 'put ''dWNkMjVcdWNkMjZcdWNkMjdcdWNkMjlcdWNkMmFcdWNkMmJcdWNkMmRcdWNkMmVcdWNkMmZcdWNkMzBcdWNkMzFcdWNkMzJcdWNkMzNcdWNkMzRcdWNkMzVcdWNkMzZcdWNkMzdcdWNkMzhcdWNkM2FcdWNkM2JcdWNkM2NcdWNkM2RcdWNkM2VcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWNkM2ZcdWNkNDBcdWNkNDFcdWNkNDJcdWNkNDNcdWNkNDRcdWNkNDVcdWNkNDZcdWNkNDdcdWNkNDhcdWNkNDlcdWNkNGFcdWNkNGJcdWNkNGNcdWNkNGRcdWNkNGVcdWNkNGZcdWNkNTBcdWNkNTFcdWNkNTJcdWNkNTNcdWNkNTRcdWNkNTVcdWNkNTZcdWNkNTdcdWNkNThc''@;'; put 'put ''dWNkNTlcdWNkNWFcdWNkNWJcdWNkNWRcdWNkNWVcdWNkNWZcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MDFcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0''@;'; put 'put ''MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA0MzBc''@;'; put 'put ''dTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0NTFcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0''@;'; put 'put ''NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNzJdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE3Ml1bZ10u''@;'; put 'put ''Y2hhckNvZGVBdCgwKSYmKElbeVsxNzJdW2ddXT00NDAzMitnLF9bNDQwMzIrZ109eVsxNzJdW2ddKTtmb3IoeVsxNzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkNjFcdWNkNjJcdWNkNjNcdWNkNjVcdWNkNjZcdWNk''@;'; put 'put ''NjdcdWNkNjhcdWNkNjlcdWNkNmFcdWNkNmJcdWNkNmVcdWNkNzBcdWNkNzJcdWNkNzNcdWNkNzRcdWNkNzVcdWNkNzZcdWNkNzdcdWNkNzlcdWNkN2FcdWNkN2JcdWNkN2NcdWNkN2RcdWNkN2VcdWNkN2ZcdWNkODBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkODFc''@;'; put 'put ''dWNkODJcdWNkODNcdWNkODRcdWNkODVcdWNkODZcdWNkODdcdWNkODlcdWNkOGFcdWNkOGJcdWNkOGNcdWNkOGRcdWNkOGVcdWNkOGZcdWNkOTBcdWNkOTFcdWNkOTJcdWNkOTNcdWNkOTZcdWNkOTdcdWNkOTlcdWNkOWFcdWNkOWJcdWNkOWRcdWNkOWVcdWNkOWZcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkYTBcdWNkYTFcdWNkYTJcdWNkYTNcdWNkYTZcdWNkYThcdWNkYWFcdWNkYWJcdWNkYWNcdWNkYWRcdWNkYWVcdWNkYWZcdWNkYjFcdWNkYjJcdWNkYjNcdWNkYjRcdWNkYjVcdWNkYjZcdWNkYjdcdWNkYjhcdWNkYjlcdWNkYmFcdWNkYmJcdWNkYmNc''@;'; put 'put ''dWNkYmRcdWNkYmVcdWNkYmZcdWNkYzBcdWNkYzFcdWNkYzJcdWNkYzNcdWNkYzVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNzNdLmxlbmd0aDsrK2cpNjU1MzMh''@;'; put 'put ''PT15WzE3M11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNzNdW2ddXT00NDI4OCtnLF9bNDQyODgrZ109eVsxNzNdW2ddKTtmb3IoeVsxNzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNkYzZcdWNkYzdcdWNkYzhcdWNk''@;'; put 'put ''YzlcdWNkY2FcdWNkY2JcdWNkY2RcdWNkY2VcdWNkY2ZcdWNkZDFcdWNkZDJcdWNkZDNcdWNkZDRcdWNkZDVcdWNkZDZcdWNkZDdcdWNkZDhcdWNkZDlcdWNkZGFcdWNkZGJcdWNkZGNcdWNkZGRcdWNkZGVcdWNkZGZcdWNkZTBcdWNkZTFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWNkZTJcdWNkZTNcdWNkZTRcdWNkZTVcdWNkZTZcdWNkZTdcdWNkZTlcdWNkZWFcdWNkZWJcdWNkZWRcdWNkZWVcdWNkZWZcdWNkZjFcdWNkZjJcdWNkZjNcdWNkZjRcdWNkZjVcdWNkZjZcdWNkZjdcdWNkZmFcdWNkZmNcdWNkZmVcdWNkZmZcdWNlMDBcdWNlMDFcdWNlMDJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlMDNcdWNlMDVcdWNlMDZcdWNlMDdcdWNlMDlcdWNlMGFcdWNlMGJcdWNlMGRcdWNlMGVcdWNlMGZcdWNlMTBcdWNlMTFcdWNlMTJcdWNlMTNcdWNlMTVcdWNlMTZcdWNlMTdcdWNlMThcdWNlMWFcdWNlMWJcdWNlMWNcdWNlMWRc''@;'; put 'put ''dWNlMWVcdWNlMWZcdWNlMjJcdWNlMjNcdWNlMjVcdWNlMjZcdWNlMjdcdWNlMjlcdWNlMmFcdWNlMmJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNzRdLmxlbmd0''@;'; put 'put ''aDsrK2cpNjU1MzMhPT15WzE3NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNzRdW2ddXT00NDU0NCtnLF9bNDQ1NDQrZ109eVsxNzRdW2ddKTtmb3IoeVsxNzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlMmNcdWNl''@;'; put 'put ''MmRcdWNlMmVcdWNlMmZcdWNlMzJcdWNlMzRcdWNlMzZcdWNlMzdcdWNlMzhcdWNlMzlcdWNlM2FcdWNlM2JcdWNlM2NcdWNlM2RcdWNlM2VcdWNlM2ZcdWNlNDBcdWNlNDFcdWNlNDJcdWNlNDNcdWNlNDRcdWNlNDVcdWNlNDZcdWNlNDdcdWNlNDhcdWNlNDlcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWNlNGFcdWNlNGJcdWNlNGNcdWNlNGRcdWNlNGVcdWNlNGZcdWNlNTBcdWNlNTFcdWNlNTJcdWNlNTNcdWNlNTRcdWNlNTVcdWNlNTZcdWNlNTdcdWNlNWFcdWNlNWJcdWNlNWRcdWNlNWVcdWNlNjJcdWNlNjNcdWNlNjRcdWNlNjVcdWNlNjZcdWNlNjdcdWNl''@;'; put 'put ''NmFcdWNlNmNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlNmVcdWNlNmZcdWNlNzBcdWNlNzFcdWNlNzJcdWNlNzNcdWNlNzZcdWNlNzdcdWNlNzlcdWNlN2FcdWNlN2JcdWNlN2RcdWNlN2VcdWNlN2ZcdWNlODBcdWNlODFcdWNlODJcdWNlODNcdWNlODZcdWNlODhc''@;'; put 'put ''dWNlOGFcdWNlOGJcdWNlOGNcdWNlOGRcdWNlOGVcdWNlOGZcdWNlOTJcdWNlOTNcdWNlOTVcdWNlOTZcdWNlOTdcdWNlOTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9''@;'; put 'put ''eVsxNzVdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE3NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNzVdW2ddXT00NDgwMCtnLF9bNDQ4MDArZ109eVsxNzVdW2ddKTtmb3IoeVsxNzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWNlOWFcdWNlOWJcdWNlOWNcdWNlOWRcdWNlOWVcdWNlOWZcdWNlYTJcdWNlYTZcdWNlYTdcdWNlYThcdWNlYTlcdWNlYWFcdWNlYWJcdWNlYWVcdWNlYWZcdWNlYjBcdWNlYjFcdWNlYjJcdWNlYjNcdWNlYjRcdWNlYjVcdWNlYjZcdWNlYjdcdWNlYjhcdWNlYjlcdWNlYmFcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlYmJcdWNlYmNcdWNlYmRcdWNlYmVcdWNlYmZcdWNlYzBcdWNlYzJcdWNlYzNcdWNlYzRcdWNlYzVcdWNlYzZcdWNlYzdcdWNlYzhcdWNlYzlcdWNlY2FcdWNlY2JcdWNlY2NcdWNlY2RcdWNlY2VcdWNlY2ZcdWNlZDBcdWNlZDFcdWNl''@;'; put 'put ''ZDJcdWNlZDNcdWNlZDRcdWNlZDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNlZDZcdWNlZDdcdWNlZDhcdWNlZDlcdWNlZGFcdWNlZGJcdWNlZGNcdWNlZGRcdWNlZGVcdWNlZGZcdWNlZTBcdWNlZTFcdWNlZTJcdWNlZTNcdWNlZTZcdWNlZTdcdWNlZTlcdWNlZWFc''@;'; put 'put ''dWNlZWRcdWNlZWVcdWNlZWZcdWNlZjBcdWNlZjFcdWNlZjJcdWNlZjNcdWNlZjZcdWNlZmFcdWNlZmJcdWNlZmNcdWNlZmRcdWNlZmVcdWNlZmZcdWFjMDBcdWFjMDFcdWFjMDRcdWFjMDdcdWFjMDhcdWFjMDlcdWFjMGFcdWFjMTBcdWFjMTFcdWFjMTJcdWFjMTNcdWFjMTRcdWFjMTVcdWFj''@;'; put 'put ''MTZcdWFjMTdcdWFjMTlcdWFjMWFcdWFjMWJcdWFjMWNcdWFjMWRcdWFjMjBcdWFjMjRcdWFjMmNcdWFjMmRcdWFjMmZcdWFjMzBcdWFjMzFcdWFjMzhcdWFjMzlcdWFjM2NcdWFjNDBcdWFjNGJcdWFjNGRcdWFjNTRcdWFjNThcdWFjNWNcdWFjNzBcdWFjNzFcdWFjNzRcdWFjNzdcdWFjNzhc''@;'; put 'put ''dWFjN2FcdWFjODBcdWFjODFcdWFjODNcdWFjODRcdWFjODVcdWFjODZcdWFjODlcdWFjOGFcdWFjOGJcdWFjOGNcdWFjOTBcdWFjOTRcdWFjOWNcdWFjOWRcdWFjOWZcdWFjYTBcdWFjYTFcdWFjYThcdWFjYTlcdWFjYWFcdWFjYWNcdWFjYWZcdWFjYjBcdWFjYjhcdWFjYjlcdWFjYmJcdWFj''@;'; put 'put ''YmNcdWFjYmRcdWFjYzFcdWFjYzRcdWFjYzhcdWFjY2NcdWFjZDVcdWFjZDdcdWFjZTBcdWFjZTFcdWFjZTRcdWFjZTdcdWFjZThcdWFjZWFcdWFjZWNcdWFjZWZcdWFjZjBcdWFjZjFcdWFjZjNcdWFjZjVcdWFjZjZcdWFjZmNcdWFjZmRcdWFkMDBcdWFkMDRcdWFkMDZcdWZmZmQiLnNwbGl0''@;'; put 'put ''KCIiKSxnPTA7ZyE9eVsxNzZdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE3Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNzZdW2ddXT00NTA1NitnLF9bNDUwNTYrZ109eVsxNzZdW2ddKTtmb3IoeVsxNzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWNmMDJcdWNmMDNcdWNmMDVcdWNmMDZcdWNmMDdcdWNmMDlcdWNmMGFcdWNmMGJcdWNmMGNcdWNmMGRcdWNmMGVcdWNmMGZcdWNmMTJcdWNmMTRcdWNmMTZcdWNmMTdcdWNmMThcdWNmMTlcdWNmMWFcdWNmMWJcdWNmMWRcdWNmMWVcdWNmMWZcdWNmMjFcdWNmMjJc''@;'; put 'put ''dWNmMjNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmMjVcdWNmMjZcdWNmMjdcdWNmMjhcdWNmMjlcdWNmMmFcdWNmMmJcdWNmMmVcdWNmMzJcdWNmMzNcdWNmMzRcdWNmMzVcdWNmMzZcdWNmMzdcdWNmMzlcdWNmM2FcdWNmM2JcdWNmM2NcdWNmM2RcdWNmM2VcdWNm''@;'; put 'put ''M2ZcdWNmNDBcdWNmNDFcdWNmNDJcdWNmNDNcdWNmNDRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmNDVcdWNmNDZcdWNmNDdcdWNmNDhcdWNmNDlcdWNmNGFcdWNmNGJcdWNmNGNcdWNmNGRcdWNmNGVcdWNmNGZcdWNmNTBcdWNmNTFcdWNmNTJcdWNmNTNcdWNmNTZc''@;'; put 'put ''dWNmNTdcdWNmNTlcdWNmNWFcdWNmNWJcdWNmNWRcdWNmNWVcdWNmNWZcdWNmNjBcdWNmNjFcdWNmNjJcdWNmNjNcdWNmNjZcdWNmNjhcdWNmNmFcdWNmNmJcdWNmNmNcdWFkMGNcdWFkMGRcdWFkMGZcdWFkMTFcdWFkMThcdWFkMWNcdWFkMjBcdWFkMjlcdWFkMmNcdWFkMmRcdWFkMzRcdWFk''@;'; put 'put ''MzVcdWFkMzhcdWFkM2NcdWFkNDRcdWFkNDVcdWFkNDdcdWFkNDlcdWFkNTBcdWFkNTRcdWFkNThcdWFkNjFcdWFkNjNcdWFkNmNcdWFkNmRcdWFkNzBcdWFkNzNcdWFkNzRcdWFkNzVcdWFkNzZcdWFkN2JcdWFkN2NcdWFkN2RcdWFkN2ZcdWFkODFcdWFkODJcdWFkODhcdWFkODlcdWFkOGNc''@;'; put 'put ''dWFkOTBcdWFkOWNcdWFkOWRcdWFkYTRcdWFkYjdcdWFkYzBcdWFkYzFcdWFkYzRcdWFkYzhcdWFkZDBcdWFkZDFcdWFkZDNcdWFkZGNcdWFkZTBcdWFkZTRcdWFkZjhcdWFkZjlcdWFkZmNcdWFkZmZcdWFlMDBcdWFlMDFcdWFlMDhcdWFlMDlcdWFlMGJcdWFlMGRcdWFlMTRcdWFlMzBcdWFl''@;'; put 'put ''MzFcdWFlMzRcdWFlMzdcdWFlMzhcdWFlM2FcdWFlNDBcdWFlNDFcdWFlNDNcdWFlNDVcdWFlNDZcdWFlNGFcdWFlNGNcdWFlNGRcdWFlNGVcdWFlNTBcdWFlNTRcdWFlNTZcdWFlNWNcdWFlNWRcdWFlNWZcdWFlNjBcdWFlNjFcdWFlNjVcdWFlNjhcdWFlNjlcdWFlNmNcdWFlNzBcdWFlNzhc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNzddLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE3N11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNzddW2ddXT00NTMxMitnLF9bNDUzMTIrZ109eVsxNzddW2ddKTtmb3IoeVsxNzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmNmRcdWNmNmVcdWNmNmZcdWNmNzJcdWNmNzNcdWNmNzVcdWNmNzZcdWNmNzdcdWNmNzlcdWNmN2FcdWNmN2JcdWNmN2NcdWNmN2RcdWNmN2VcdWNmN2ZcdWNmODFcdWNmODJcdWNmODNcdWNmODRcdWNmODZcdWNmODdcdWNmODhcdWNmODlc''@;'; put 'put ''dWNmOGFcdWNmOGJcdWNmOGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmOGVcdWNmOGZcdWNmOTBcdWNmOTFcdWNmOTJcdWNmOTNcdWNmOTRcdWNmOTVcdWNmOTZcdWNmOTdcdWNmOThcdWNmOTlcdWNmOWFcdWNmOWJcdWNmOWNcdWNmOWRcdWNmOWVcdWNmOWZcdWNm''@;'; put 'put ''YTBcdWNmYTJcdWNmYTNcdWNmYTRcdWNmYTVcdWNmYTZcdWNmYTdcdWNmYTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmYWFcdWNmYWJcdWNmYWNcdWNmYWRcdWNmYWVcdWNmYWZcdWNmYjFcdWNmYjJcdWNmYjNcdWNmYjRcdWNmYjVcdWNmYjZcdWNmYjdcdWNmYjhc''@;'; put 'put ''dWNmYjlcdWNmYmFcdWNmYmJcdWNmYmNcdWNmYmRcdWNmYmVcdWNmYmZcdWNmYzBcdWNmYzFcdWNmYzJcdWNmYzNcdWNmYzVcdWNmYzZcdWNmYzdcdWNmYzhcdWNmYzlcdWNmY2FcdWNmY2JcdWFlNzlcdWFlN2JcdWFlN2NcdWFlN2RcdWFlODRcdWFlODVcdWFlOGNcdWFlYmNcdWFlYmRcdWFl''@;'; put 'put ''YmVcdWFlYzBcdWFlYzRcdWFlY2NcdWFlY2RcdWFlY2ZcdWFlZDBcdWFlZDFcdWFlZDhcdWFlZDlcdWFlZGNcdWFlZThcdWFlZWJcdWFlZWRcdWFlZjRcdWFlZjhcdWFlZmNcdWFmMDdcdWFmMDhcdWFmMGRcdWFmMTBcdWFmMmNcdWFmMmRcdWFmMzBcdWFmMzJcdWFmMzRcdWFmM2NcdWFmM2Rc''@;'; put 'put ''dWFmM2ZcdWFmNDFcdWFmNDJcdWFmNDNcdWFmNDhcdWFmNDlcdWFmNTBcdWFmNWNcdWFmNWRcdWFmNjRcdWFmNjVcdWFmNzlcdWFmODBcdWFmODRcdWFmODhcdWFmOTBcdWFmOTFcdWFmOTVcdWFmOWNcdWFmYjhcdWFmYjlcdWFmYmNcdWFmYzBcdWFmYzdcdWFmYzhcdWFmYzlcdWFmY2JcdWFm''@;'; put 'put ''Y2RcdWFmY2VcdWFmZDRcdWFmZGNcdWFmZThcdWFmZTlcdWFmZjBcdWFmZjFcdWFmZjRcdWFmZjhcdWIwMDBcdWIwMDFcdWIwMDRcdWIwMGNcdWIwMTBcdWIwMTRcdWIwMWNcdWIwMWRcdWIwMjhcdWIwNDRcdWIwNDVcdWIwNDhcdWIwNGFcdWIwNGNcdWIwNGVcdWIwNTNcdWIwNTRcdWIwNTVc''@;'; put 'put ''dWIwNTdcdWIwNTlcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNzhdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE3OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNzhdW2ddXT00NTU2OCtnLF9bNDU1NjgrZ109eVsxNzhdW2ddKTtmb3IoeVsxNzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmY2NcdWNmY2RcdWNmY2VcdWNmY2ZcdWNmZDBcdWNmZDFcdWNmZDJcdWNmZDNcdWNmZDRcdWNmZDVcdWNmZDZcdWNmZDdcdWNmZDhcdWNmZDlcdWNmZGFcdWNmZGJcdWNmZGNcdWNmZGRcdWNmZGVcdWNmZGZcdWNmZTJc''@;'; put 'put ''dWNmZTNcdWNmZTVcdWNmZTZcdWNmZTdcdWNmZTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWNmZWFcdWNmZWJcdWNmZWNcdWNmZWRcdWNmZWVcdWNmZWZcdWNmZjJcdWNmZjRcdWNmZjZcdWNmZjdcdWNmZjhcdWNmZjlcdWNmZmFcdWNmZmJcdWNmZmRcdWNmZmVcdWNm''@;'; put 'put ''ZmZcdWQwMDFcdWQwMDJcdWQwMDNcdWQwMDVcdWQwMDZcdWQwMDdcdWQwMDhcdWQwMDlcdWQwMGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwMGJcdWQwMGNcdWQwMGRcdWQwMGVcdWQwMGZcdWQwMTBcdWQwMTJcdWQwMTNcdWQwMTRcdWQwMTVcdWQwMTZcdWQwMTdc''@;'; put 'put ''dWQwMTlcdWQwMWFcdWQwMWJcdWQwMWNcdWQwMWRcdWQwMWVcdWQwMWZcdWQwMjBcdWQwMjFcdWQwMjJcdWQwMjNcdWQwMjRcdWQwMjVcdWQwMjZcdWQwMjdcdWQwMjhcdWQwMjlcdWQwMmFcdWQwMmJcdWQwMmNcdWIwNWRcdWIwN2NcdWIwN2RcdWIwODBcdWIwODRcdWIwOGNcdWIwOGRcdWIw''@;'; put 'put ''OGZcdWIwOTFcdWIwOThcdWIwOTlcdWIwOWFcdWIwOWNcdWIwOWZcdWIwYTBcdWIwYTFcdWIwYTJcdWIwYThcdWIwYTlcdWIwYWJcdWIwYWNcdWIwYWRcdWIwYWVcdWIwYWZcdWIwYjFcdWIwYjNcdWIwYjRcdWIwYjVcdWIwYjhcdWIwYmNcdWIwYzRcdWIwYzVcdWIwYzdcdWIwYzhcdWIwYzlc''@;'; put 'put ''dWIwZDBcdWIwZDFcdWIwZDRcdWIwZDhcdWIwZTBcdWIwZTVcdWIxMDhcdWIxMDlcdWIxMGJcdWIxMGNcdWIxMTBcdWIxMTJcdWIxMTNcdWIxMThcdWIxMTlcdWIxMWJcdWIxMWNcdWIxMWRcdWIxMjNcdWIxMjRcdWIxMjVcdWIxMjhcdWIxMmNcdWIxMzRcdWIxMzVcdWIxMzdcdWIxMzhcdWIx''@;'; put 'put ''MzlcdWIxNDBcdWIxNDFcdWIxNDRcdWIxNDhcdWIxNTBcdWIxNTFcdWIxNTRcdWIxNTVcdWIxNThcdWIxNWNcdWIxNjBcdWIxNzhcdWIxNzlcdWIxN2NcdWIxODBcdWIxODJcdWIxODhcdWIxODlcdWIxOGJcdWIxOGRcdWIxOTJcdWIxOTNcdWIxOTRcdWIxOThcdWIxOWNcdWIxYThcdWIxY2Nc''@;'; put 'put ''dWIxZDBcdWIxZDRcdWIxZGNcdWIxZGRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNzldLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE3OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNzldW2ddXT00NTgyNCtnLF9bNDU4MjQrZ109eVsxNzldW2ddKTtmb3IoeVsxODBdPSJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwMmVcdWQwMmZcdWQwMzBcdWQwMzFcdWQwMzJcdWQwMzNcdWQwMzZcdWQwMzdcdWQwMzlcdWQwM2FcdWQwM2JcdWQwM2RcdWQwM2VcdWQwM2ZcdWQwNDBcdWQwNDFcdWQwNDJcdWQwNDNcdWQwNDZc''@;'; put 'put ''dWQwNDhcdWQwNGFcdWQwNGJcdWQwNGNcdWQwNGRcdWQwNGVcdWQwNGZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwNTFcdWQwNTJcdWQwNTNcdWQwNTVcdWQwNTZcdWQwNTdcdWQwNTlcdWQwNWFcdWQwNWJcdWQwNWNcdWQwNWRcdWQwNWVcdWQwNWZcdWQwNjFcdWQw''@;'; put 'put ''NjJcdWQwNjNcdWQwNjRcdWQwNjVcdWQwNjZcdWQwNjdcdWQwNjhcdWQwNjlcdWQwNmFcdWQwNmJcdWQwNmVcdWQwNmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwNzFcdWQwNzJcdWQwNzNcdWQwNzVcdWQwNzZcdWQwNzdcdWQwNzhcdWQwNzlcdWQwN2FcdWQwN2Jc''@;'; put 'put ''dWQwN2VcdWQwN2ZcdWQwODBcdWQwODJcdWQwODNcdWQwODRcdWQwODVcdWQwODZcdWQwODdcdWQwODhcdWQwODlcdWQwOGFcdWQwOGJcdWQwOGNcdWQwOGRcdWQwOGVcdWQwOGZcdWQwOTBcdWQwOTFcdWQwOTJcdWQwOTNcdWQwOTRcdWIxZGZcdWIxZThcdWIxZTlcdWIxZWNcdWIxZjBcdWIx''@;'; put 'put ''ZjlcdWIxZmJcdWIxZmRcdWIyMDRcdWIyMDVcdWIyMDhcdWIyMGJcdWIyMGNcdWIyMTRcdWIyMTVcdWIyMTdcdWIyMTlcdWIyMjBcdWIyMzRcdWIyM2NcdWIyNThcdWIyNWNcdWIyNjBcdWIyNjhcdWIyNjlcdWIyNzRcdWIyNzVcdWIyN2NcdWIyODRcdWIyODVcdWIyODlcdWIyOTBcdWIyOTFc''@;'; put 'put ''dWIyOTRcdWIyOThcdWIyOTlcdWIyOWFcdWIyYTBcdWIyYTFcdWIyYTNcdWIyYTVcdWIyYTZcdWIyYWFcdWIyYWNcdWIyYjBcdWIyYjRcdWIyYzhcdWIyYzlcdWIyY2NcdWIyZDBcdWIyZDJcdWIyZDhcdWIyZDlcdWIyZGJcdWIyZGRcdWIyZTJcdWIyZTRcdWIyZTVcdWIyZTZcdWIyZThcdWIy''@;'; put 'put ''ZWJcdWIyZWNcdWIyZWRcdWIyZWVcdWIyZWZcdWIyZjNcdWIyZjRcdWIyZjVcdWIyZjdcdWIyZjhcdWIyZjlcdWIyZmFcdWIyZmJcdWIyZmZcdWIzMDBcdWIzMDFcdWIzMDRcdWIzMDhcdWIzMTBcdWIzMTFcdWIzMTNcdWIzMTRcdWIzMTVcdWIzMWNcdWIzNTRcdWIzNTVcdWIzNTZcdWIzNThc''@;'; put 'put ''dWIzNWJcdWIzNWNcdWIzNWVcdWIzNWZcdWIzNjRcdWIzNjVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxODBdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE4MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxODBdW2ddXT00NjA4MCtnLF9bNDYwODArZ109eVsxODBdW2ddKTtmb3IoeVsxODFd''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwOTVcdWQwOTZcdWQwOTdcdWQwOThcdWQwOTlcdWQwOWFcdWQwOWJcdWQwOWNcdWQwOWRcdWQwOWVcdWQwOWZcdWQwYTBcdWQwYTFcdWQwYTJcdWQwYTNcdWQwYTZcdWQwYTdc''@;'; put 'put ''dWQwYTlcdWQwYWFcdWQwYWJcdWQwYWRcdWQwYWVcdWQwYWZcdWQwYjBcdWQwYjFcdWQwYjJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwYjNcdWQwYjZcdWQwYjhcdWQwYmFcdWQwYmJcdWQwYmNcdWQwYmRcdWQwYmVcdWQwYmZcdWQwYzJcdWQwYzNcdWQwYzVcdWQw''@;'; put 'put ''YzZcdWQwYzdcdWQwY2FcdWQwY2JcdWQwY2NcdWQwY2RcdWQwY2VcdWQwY2ZcdWQwZDJcdWQwZDZcdWQwZDdcdWQwZDhcdWQwZDlcdWQwZGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQwZGJcdWQwZGVcdWQwZGZcdWQwZTFcdWQwZTJcdWQwZTNcdWQwZTVcdWQwZTZc''@;'; put 'put ''dWQwZTdcdWQwZThcdWQwZTlcdWQwZWFcdWQwZWJcdWQwZWVcdWQwZjJcdWQwZjNcdWQwZjRcdWQwZjVcdWQwZjZcdWQwZjdcdWQwZjlcdWQwZmFcdWQwZmJcdWQwZmNcdWQwZmRcdWQwZmVcdWQwZmZcdWQxMDBcdWQxMDFcdWQxMDJcdWQxMDNcdWQxMDRcdWIzNjdcdWIzNjlcdWIzNmJcdWIz''@;'; put 'put ''NmVcdWIzNzBcdWIzNzFcdWIzNzRcdWIzNzhcdWIzODBcdWIzODFcdWIzODNcdWIzODRcdWIzODVcdWIzOGNcdWIzOTBcdWIzOTRcdWIzYTBcdWIzYTFcdWIzYThcdWIzYWNcdWIzYzRcdWIzYzVcdWIzYzhcdWIzY2JcdWIzY2NcdWIzY2VcdWIzZDBcdWIzZDRcdWIzZDVcdWIzZDdcdWIzZDlc''@;'; put 'put ''dWIzZGJcdWIzZGRcdWIzZTBcdWIzZTRcdWIzZThcdWIzZmNcdWI0MTBcdWI0MThcdWI0MWNcdWI0MjBcdWI0MjhcdWI0MjlcdWI0MmJcdWI0MzRcdWI0NTBcdWI0NTFcdWI0NTRcdWI0NThcdWI0NjBcdWI0NjFcdWI0NjNcdWI0NjVcdWI0NmNcdWI0ODBcdWI0ODhcdWI0OWRcdWI0YTRcdWI0''@;'; put 'put ''YThcdWI0YWNcdWI0YjVcdWI0YjdcdWI0YjlcdWI0YzBcdWI0YzRcdWI0YzhcdWI0ZDBcdWI0ZDVcdWI0ZGNcdWI0ZGRcdWI0ZTBcdWI0ZTNcdWI0ZTRcdWI0ZTZcdWI0ZWNcdWI0ZWRcdWI0ZWZcdWI0ZjFcdWI0ZjhcdWI1MTRcdWI1MTVcdWI1MThcdWI1MWJcdWI1MWNcdWI1MjRcdWI1MjVc''@;'; put 'put ''dWI1MjdcdWI1MjhcdWI1MjlcdWI1MmFcdWI1MzBcdWI1MzFcdWI1MzRcdWI1MzhcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxODFdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE4MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxODFdW2ddXT00NjMzNitnLF9bNDYzMzYrZ109eVsxODFdW2dd''@;'; put 'put ''KTtmb3IoeVsxODJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxMDVcdWQxMDZcdWQxMDdcdWQxMDhcdWQxMDlcdWQxMGFcdWQxMGJcdWQxMGNcdWQxMGVcdWQxMGZcdWQxMTBcdWQxMTFcdWQxMTJcdWQxMTNcdWQxMTRc''@;'; put 'put ''dWQxMTVcdWQxMTZcdWQxMTdcdWQxMThcdWQxMTlcdWQxMWFcdWQxMWJcdWQxMWNcdWQxMWRcdWQxMWVcdWQxMWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxMjBcdWQxMjFcdWQxMjJcdWQxMjNcdWQxMjRcdWQxMjVcdWQxMjZcdWQxMjdcdWQxMjhcdWQxMjlcdWQx''@;'; put 'put ''MmFcdWQxMmJcdWQxMmNcdWQxMmRcdWQxMmVcdWQxMmZcdWQxMzJcdWQxMzNcdWQxMzVcdWQxMzZcdWQxMzdcdWQxMzlcdWQxM2JcdWQxM2NcdWQxM2RcdWQxM2VcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxM2ZcdWQxNDJcdWQxNDZcdWQxNDdcdWQxNDhcdWQxNDlc''@;'; put 'put ''dWQxNGFcdWQxNGJcdWQxNGVcdWQxNGZcdWQxNTFcdWQxNTJcdWQxNTNcdWQxNTVcdWQxNTZcdWQxNTdcdWQxNThcdWQxNTlcdWQxNWFcdWQxNWJcdWQxNWVcdWQxNjBcdWQxNjJcdWQxNjNcdWQxNjRcdWQxNjVcdWQxNjZcdWQxNjdcdWQxNjlcdWQxNmFcdWQxNmJcdWQxNmRcdWI1NDBcdWI1''@;'; put 'put ''NDFcdWI1NDNcdWI1NDRcdWI1NDVcdWI1NGJcdWI1NGNcdWI1NGRcdWI1NTBcdWI1NTRcdWI1NWNcdWI1NWRcdWI1NWZcdWI1NjBcdWI1NjFcdWI1YTBcdWI1YTFcdWI1YTRcdWI1YThcdWI1YWFcdWI1YWJcdWI1YjBcdWI1YjFcdWI1YjNcdWI1YjRcdWI1YjVcdWI1YmJcdWI1YmNcdWI1YmRc''@;'; put 'put ''dWI1YzBcdWI1YzRcdWI1Y2NcdWI1Y2RcdWI1Y2ZcdWI1ZDBcdWI1ZDFcdWI1ZDhcdWI1ZWNcdWI2MTBcdWI2MTFcdWI2MTRcdWI2MThcdWI2MjVcdWI2MmNcdWI2MzRcdWI2NDhcdWI2NjRcdWI2NjhcdWI2OWNcdWI2OWRcdWI2YTBcdWI2YTRcdWI2YWJcdWI2YWNcdWI2YjFcdWI2ZDRcdWI2''@;'; put 'put ''ZjBcdWI2ZjRcdWI2ZjhcdWI3MDBcdWI3MDFcdWI3MDVcdWI3MjhcdWI3MjlcdWI3MmNcdWI3MmZcdWI3MzBcdWI3MzhcdWI3MzlcdWI3M2JcdWI3NDRcdWI3NDhcdWI3NGNcdWI3NTRcdWI3NTVcdWI3NjBcdWI3NjRcdWI3NjhcdWI3NzBcdWI3NzFcdWI3NzNcdWI3NzVcdWI3N2NcdWI3N2Rc''@;'; put 'put ''dWI3ODBcdWI3ODRcdWI3OGNcdWI3OGRcdWI3OGZcdWI3OTBcdWI3OTFcdWI3OTJcdWI3OTZcdWI3OTdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxODJdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE4Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxODJdW2ddXT00NjU5MitnLF9bNDY1OTIr''@;'; put 'put ''Z109eVsxODJdW2ddKTtmb3IoeVsxODNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxNmVcdWQxNmZcdWQxNzBcdWQxNzFcdWQxNzJcdWQxNzNcdWQxNzRcdWQxNzVcdWQxNzZcdWQxNzdcdWQxNzhcdWQxNzlcdWQxN2Fc''@;'; put 'put ''dWQxN2JcdWQxN2RcdWQxN2VcdWQxN2ZcdWQxODBcdWQxODFcdWQxODJcdWQxODNcdWQxODVcdWQxODZcdWQxODdcdWQxODlcdWQxOGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxOGJcdWQxOGNcdWQxOGRcdWQxOGVcdWQxOGZcdWQxOTBcdWQxOTFcdWQxOTJcdWQx''@;'; put 'put ''OTNcdWQxOTRcdWQxOTVcdWQxOTZcdWQxOTdcdWQxOThcdWQxOTlcdWQxOWFcdWQxOWJcdWQxOWNcdWQxOWRcdWQxOWVcdWQxOWZcdWQxYTJcdWQxYTNcdWQxYTVcdWQxYTZcdWQxYTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxYTlcdWQxYWFcdWQxYWJcdWQxYWNc''@;'; put 'put ''dWQxYWRcdWQxYWVcdWQxYWZcdWQxYjJcdWQxYjRcdWQxYjZcdWQxYjdcdWQxYjhcdWQxYjlcdWQxYmJcdWQxYmRcdWQxYmVcdWQxYmZcdWQxYzFcdWQxYzJcdWQxYzNcdWQxYzRcdWQxYzVcdWQxYzZcdWQxYzdcdWQxYzhcdWQxYzlcdWQxY2FcdWQxY2JcdWQxY2NcdWQxY2RcdWQxY2VcdWQx''@;'; put 'put ''Y2ZcdWI3OThcdWI3OTlcdWI3OWNcdWI3YTBcdWI3YThcdWI3YTlcdWI3YWJcdWI3YWNcdWI3YWRcdWI3YjRcdWI3YjVcdWI3YjhcdWI3YzdcdWI3YzlcdWI3ZWNcdWI3ZWRcdWI3ZjBcdWI3ZjRcdWI3ZmNcdWI3ZmRcdWI3ZmZcdWI4MDBcdWI4MDFcdWI4MDdcdWI4MDhcdWI4MDlcdWI4MGNc''@;'; put 'put ''dWI4MTBcdWI4MThcdWI4MTlcdWI4MWJcdWI4MWRcdWI4MjRcdWI4MjVcdWI4MjhcdWI4MmNcdWI4MzRcdWI4MzVcdWI4MzdcdWI4MzhcdWI4MzlcdWI4NDBcdWI4NDRcdWI4NTFcdWI4NTNcdWI4NWNcdWI4NWRcdWI4NjBcdWI4NjRcdWI4NmNcdWI4NmRcdWI4NmZcdWI4NzFcdWI4NzhcdWI4''@;'; put 'put ''N2NcdWI4OGRcdWI4YThcdWI4YjBcdWI4YjRcdWI4YjhcdWI4YzBcdWI4YzFcdWI4YzNcdWI4YzVcdWI4Y2NcdWI4ZDBcdWI4ZDRcdWI4ZGRcdWI4ZGZcdWI4ZTFcdWI4ZThcdWI4ZTlcdWI4ZWNcdWI4ZjBcdWI4ZjhcdWI4ZjlcdWI4ZmJcdWI4ZmRcdWI5MDRcdWI5MThcdWI5MjBcdWI5M2Nc''@;'; put 'put ''dWI5M2RcdWI5NDBcdWI5NDRcdWI5NGNcdWI5NGZcdWI5NTFcdWI5NThcdWI5NTlcdWI5NWNcdWI5NjBcdWI5NjhcdWI5NjlcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxODNdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE4M11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxODNdW2ddXT00Njg0''@;'; put 'put ''OCtnLF9bNDY4NDgrZ109eVsxODNdW2ddKTtmb3IoeVsxODRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxZDBcdWQxZDFcdWQxZDJcdWQxZDNcdWQxZDRcdWQxZDVcdWQxZDZcdWQxZDdcdWQxZDlcdWQxZGFcdWQxZGJc''@;'; put 'put ''dWQxZGNcdWQxZGRcdWQxZGVcdWQxZGZcdWQxZTBcdWQxZTFcdWQxZTJcdWQxZTNcdWQxZTRcdWQxZTVcdWQxZTZcdWQxZTdcdWQxZThcdWQxZTlcdWQxZWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQxZWJcdWQxZWNcdWQxZWRcdWQxZWVcdWQxZWZcdWQxZjBcdWQx''@;'; put 'put ''ZjFcdWQxZjJcdWQxZjNcdWQxZjVcdWQxZjZcdWQxZjdcdWQxZjlcdWQxZmFcdWQxZmJcdWQxZmNcdWQxZmRcdWQxZmVcdWQxZmZcdWQyMDBcdWQyMDFcdWQyMDJcdWQyMDNcdWQyMDRcdWQyMDVcdWQyMDZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyMDhcdWQyMGFc''@;'; put 'put ''dWQyMGJcdWQyMGNcdWQyMGRcdWQyMGVcdWQyMGZcdWQyMTFcdWQyMTJcdWQyMTNcdWQyMTRcdWQyMTVcdWQyMTZcdWQyMTdcdWQyMThcdWQyMTlcdWQyMWFcdWQyMWJcdWQyMWNcdWQyMWRcdWQyMWVcdWQyMWZcdWQyMjBcdWQyMjFcdWQyMjJcdWQyMjNcdWQyMjRcdWQyMjVcdWQyMjZcdWQy''@;'; put 'put ''MjdcdWQyMjhcdWQyMjlcdWI5NmJcdWI5NmRcdWI5NzRcdWI5NzVcdWI5NzhcdWI5N2NcdWI5ODRcdWI5ODVcdWI5ODdcdWI5ODlcdWI5OGFcdWI5OGRcdWI5OGVcdWI5YWNcdWI5YWRcdWI5YjBcdWI5YjRcdWI5YmNcdWI5YmRcdWI5YmZcdWI5YzFcdWI5YzhcdWI5YzlcdWI5Y2NcdWI5Y2Vc''@;'; put 'put ''dWI5Y2ZcdWI5ZDBcdWI5ZDFcdWI5ZDJcdWI5ZDhcdWI5ZDlcdWI5ZGJcdWI5ZGRcdWI5ZGVcdWI5ZTFcdWI5ZTNcdWI5ZTRcdWI5ZTVcdWI5ZThcdWI5ZWNcdWI5ZjRcdWI5ZjVcdWI5ZjdcdWI5ZjhcdWI5ZjlcdWI5ZmFcdWJhMDBcdWJhMDFcdWJhMDhcdWJhMTVcdWJhMzhcdWJhMzlcdWJh''@;'; put 'put ''M2NcdWJhNDBcdWJhNDJcdWJhNDhcdWJhNDlcdWJhNGJcdWJhNGRcdWJhNGVcdWJhNTNcdWJhNTRcdWJhNTVcdWJhNThcdWJhNWNcdWJhNjRcdWJhNjVcdWJhNjdcdWJhNjhcdWJhNjlcdWJhNzBcdWJhNzFcdWJhNzRcdWJhNzhcdWJhODNcdWJhODRcdWJhODVcdWJhODdcdWJhOGNcdWJhYThc''@;'; put 'put ''dWJhYTlcdWJhYWJcdWJhYWNcdWJhYjBcdWJhYjJcdWJhYjhcdWJhYjlcdWJhYmJcdWJhYmRcdWJhYzRcdWJhYzhcdWJhZDhcdWJhZDlcdWJhZmNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxODRdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE4NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsx''@;'; put 'put ''ODRdW2ddXT00NzEwNCtnLF9bNDcxMDQrZ109eVsxODRdW2ddKTtmb3IoeVsxODVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyMmFcdWQyMmJcdWQyMmVcdWQyMmZcdWQyMzFcdWQyMzJcdWQyMzNcdWQyMzVcdWQyMzZc''@;'; put 'put ''dWQyMzdcdWQyMzhcdWQyMzlcdWQyM2FcdWQyM2JcdWQyM2VcdWQyNDBcdWQyNDJcdWQyNDNcdWQyNDRcdWQyNDVcdWQyNDZcdWQyNDdcdWQyNDlcdWQyNGFcdWQyNGJcdWQyNGNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyNGRcdWQyNGVcdWQyNGZcdWQyNTBcdWQy''@;'; put 'put ''NTFcdWQyNTJcdWQyNTNcdWQyNTRcdWQyNTVcdWQyNTZcdWQyNTdcdWQyNThcdWQyNTlcdWQyNWFcdWQyNWJcdWQyNWRcdWQyNWVcdWQyNWZcdWQyNjBcdWQyNjFcdWQyNjJcdWQyNjNcdWQyNjVcdWQyNjZcdWQyNjdcdWQyNjhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWQyNjlcdWQyNmFcdWQyNmJcdWQyNmNcdWQyNmRcdWQyNmVcdWQyNmZcdWQyNzBcdWQyNzFcdWQyNzJcdWQyNzNcdWQyNzRcdWQyNzVcdWQyNzZcdWQyNzdcdWQyNzhcdWQyNzlcdWQyN2FcdWQyN2JcdWQyN2NcdWQyN2RcdWQyN2VcdWQyN2ZcdWQyODJcdWQyODNcdWQyODVcdWQyODZcdWQy''@;'; put 'put ''ODdcdWQyODlcdWQyOGFcdWQyOGJcdWQyOGNcdWJiMDBcdWJiMDRcdWJiMGRcdWJiMGZcdWJiMTFcdWJiMThcdWJiMWNcdWJiMjBcdWJiMjlcdWJiMmJcdWJiMzRcdWJiMzVcdWJiMzZcdWJiMzhcdWJiM2JcdWJiM2NcdWJiM2RcdWJiM2VcdWJiNDRcdWJiNDVcdWJiNDdcdWJiNDlcdWJiNGRc''@;'; put 'put ''dWJiNGZcdWJiNTBcdWJiNTRcdWJiNThcdWJiNjFcdWJiNjNcdWJiNmNcdWJiODhcdWJiOGNcdWJiOTBcdWJiYTRcdWJiYThcdWJiYWNcdWJiYjRcdWJiYjdcdWJiYzBcdWJiYzRcdWJiYzhcdWJiZDBcdWJiZDNcdWJiZjhcdWJiZjlcdWJiZmNcdWJiZmZcdWJjMDBcdWJjMDJcdWJjMDhcdWJj''@;'; put 'put ''MDlcdWJjMGJcdWJjMGNcdWJjMGRcdWJjMGZcdWJjMTFcdWJjMTRcdWJjMTVcdWJjMTZcdWJjMTdcdWJjMThcdWJjMWJcdWJjMWNcdWJjMWRcdWJjMWVcdWJjMWZcdWJjMjRcdWJjMjVcdWJjMjdcdWJjMjlcdWJjMmRcdWJjMzBcdWJjMzFcdWJjMzRcdWJjMzhcdWJjNDBcdWJjNDFcdWJjNDNc''@;'; put 'put ''dWJjNDRcdWJjNDVcdWJjNDlcdWJjNGNcdWJjNGRcdWJjNTBcdWJjNWRcdWJjODRcdWJjODVcdWJjODhcdWJjOGJcdWJjOGNcdWJjOGVcdWJjOTRcdWJjOTVcdWJjOTdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxODVdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE4NV1bZ10uY2hhckNvZGVB''@;'; put 'put ''dCgwKSYmKElbeVsxODVdW2ddXT00NzM2MCtnLF9bNDczNjArZ109eVsxODVdW2ddKTtmb3IoeVsxODZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyOGRcdWQyOGVcdWQyOGZcdWQyOTJcdWQyOTNcdWQyOTRcdWQyOTZc''@;'; put 'put ''dWQyOTdcdWQyOThcdWQyOTlcdWQyOWFcdWQyOWJcdWQyOWRcdWQyOWVcdWQyOWZcdWQyYTFcdWQyYTJcdWQyYTNcdWQyYTVcdWQyYTZcdWQyYTdcdWQyYThcdWQyYTlcdWQyYWFcdWQyYWJcdWQyYWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyYWVcdWQyYWZcdWQy''@;'; put 'put ''YjBcdWQyYjJcdWQyYjNcdWQyYjRcdWQyYjVcdWQyYjZcdWQyYjdcdWQyYmFcdWQyYmJcdWQyYmRcdWQyYmVcdWQyYzFcdWQyYzNcdWQyYzRcdWQyYzVcdWQyYzZcdWQyYzdcdWQyY2FcdWQyY2NcdWQyY2RcdWQyY2VcdWQyY2ZcdWQyZDBcdWQyZDFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWQyZDJcdWQyZDNcdWQyZDVcdWQyZDZcdWQyZDdcdWQyZDlcdWQyZGFcdWQyZGJcdWQyZGRcdWQyZGVcdWQyZGZcdWQyZTBcdWQyZTFcdWQyZTJcdWQyZTNcdWQyZTZcdWQyZTdcdWQyZThcdWQyZTlcdWQyZWFcdWQyZWJcdWQyZWNcdWQyZWRcdWQyZWVcdWQyZWZcdWQy''@;'; put 'put ''ZjJcdWQyZjNcdWQyZjVcdWQyZjZcdWQyZjdcdWQyZjlcdWQyZmFcdWJjOTlcdWJjOWFcdWJjYTBcdWJjYTFcdWJjYTRcdWJjYTdcdWJjYThcdWJjYjBcdWJjYjFcdWJjYjNcdWJjYjRcdWJjYjVcdWJjYmNcdWJjYmRcdWJjYzBcdWJjYzRcdWJjY2RcdWJjY2ZcdWJjZDBcdWJjZDFcdWJjZDVc''@;'; put 'put ''dWJjZDhcdWJjZGNcdWJjZjRcdWJjZjVcdWJjZjZcdWJjZjhcdWJjZmNcdWJkMDRcdWJkMDVcdWJkMDdcdWJkMDlcdWJkMTBcdWJkMTRcdWJkMjRcdWJkMmNcdWJkNDBcdWJkNDhcdWJkNDlcdWJkNGNcdWJkNTBcdWJkNThcdWJkNTlcdWJkNjRcdWJkNjhcdWJkODBcdWJkODFcdWJkODRcdWJk''@;'; put 'put ''ODdcdWJkODhcdWJkODlcdWJkOGFcdWJkOTBcdWJkOTFcdWJkOTNcdWJkOTVcdWJkOTlcdWJkOWFcdWJkOWNcdWJkYTRcdWJkYjBcdWJkYjhcdWJkZDRcdWJkZDVcdWJkZDhcdWJkZGNcdWJkZTlcdWJkZjBcdWJkZjRcdWJkZjhcdWJlMDBcdWJlMDNcdWJlMDVcdWJlMGNcdWJlMGRcdWJlMTBc''@;'; put 'put ''dWJlMTRcdWJlMWNcdWJlMWRcdWJlMWZcdWJlNDRcdWJlNDVcdWJlNDhcdWJlNGNcdWJlNGVcdWJlNTRcdWJlNTVcdWJlNTdcdWJlNTlcdWJlNWFcdWJlNWJcdWJlNjBcdWJlNjFcdWJlNjRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxODZdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE4Nl1b''@;'; put 'put ''Z10uY2hhckNvZGVBdCgwKSYmKElbeVsxODZdW2ddXT00NzYxNitnLF9bNDc2MTYrZ109eVsxODZdW2ddKTtmb3IoeVsxODddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQyZmJcdWQyZmNcdWQyZmRcdWQyZmVcdWQyZmZc''@;'; put 'put ''dWQzMDJcdWQzMDRcdWQzMDZcdWQzMDdcdWQzMDhcdWQzMDlcdWQzMGFcdWQzMGJcdWQzMGZcdWQzMTFcdWQzMTJcdWQzMTNcdWQzMTVcdWQzMTdcdWQzMThcdWQzMTlcdWQzMWFcdWQzMWJcdWQzMWVcdWQzMjJcdWQzMjNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQz''@;'; put 'put ''MjRcdWQzMjZcdWQzMjdcdWQzMmFcdWQzMmJcdWQzMmRcdWQzMmVcdWQzMmZcdWQzMzFcdWQzMzJcdWQzMzNcdWQzMzRcdWQzMzVcdWQzMzZcdWQzMzdcdWQzM2FcdWQzM2VcdWQzM2ZcdWQzNDBcdWQzNDFcdWQzNDJcdWQzNDNcdWQzNDZcdWQzNDdcdWQzNDhcdWQzNDlcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzNGFcdWQzNGJcdWQzNGNcdWQzNGRcdWQzNGVcdWQzNGZcdWQzNTBcdWQzNTFcdWQzNTJcdWQzNTNcdWQzNTRcdWQzNTVcdWQzNTZcdWQzNTdcdWQzNThcdWQzNTlcdWQzNWFcdWQzNWJcdWQzNWNcdWQzNWRcdWQzNWVcdWQzNWZcdWQzNjBcdWQz''@;'; put 'put ''NjFcdWQzNjJcdWQzNjNcdWQzNjRcdWQzNjVcdWQzNjZcdWQzNjdcdWQzNjhcdWQzNjlcdWJlNjhcdWJlNmFcdWJlNzBcdWJlNzFcdWJlNzNcdWJlNzRcdWJlNzVcdWJlN2JcdWJlN2NcdWJlN2RcdWJlODBcdWJlODRcdWJlOGNcdWJlOGRcdWJlOGZcdWJlOTBcdWJlOTFcdWJlOThcdWJlOTlc''@;'; put 'put ''dWJlYThcdWJlZDBcdWJlZDFcdWJlZDRcdWJlZDdcdWJlZDhcdWJlZTBcdWJlZTNcdWJlZTRcdWJlZTVcdWJlZWNcdWJmMDFcdWJmMDhcdWJmMDlcdWJmMThcdWJmMTlcdWJmMWJcdWJmMWNcdWJmMWRcdWJmNDBcdWJmNDFcdWJmNDRcdWJmNDhcdWJmNTBcdWJmNTFcdWJmNTVcdWJmOTRcdWJm''@;'; put 'put ''YjBcdWJmYzVcdWJmY2NcdWJmY2RcdWJmZDBcdWJmZDRcdWJmZGNcdWJmZGZcdWJmZTFcdWMwM2NcdWMwNTFcdWMwNThcdWMwNWNcdWMwNjBcdWMwNjhcdWMwNjlcdWMwOTBcdWMwOTFcdWMwOTRcdWMwOThcdWMwYTBcdWMwYTFcdWMwYTNcdWMwYTVcdWMwYWNcdWMwYWRcdWMwYWZcdWMwYjBc''@;'; put 'put ''dWMwYjNcdWMwYjRcdWMwYjVcdWMwYjZcdWMwYmNcdWMwYmRcdWMwYmZcdWMwYzBcdWMwYzFcdWMwYzVcdWMwYzhcdWMwYzlcdWMwY2NcdWMwZDBcdWMwZDhcdWMwZDlcdWMwZGJcdWMwZGNcdWMwZGRcdWMwZTRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxODddLmxlbmd0aDsrK2cpNjU1''@;'; put 'put ''MzMhPT15WzE4N11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxODddW2ddXT00Nzg3MitnLF9bNDc4NzIrZ109eVsxODddW2ddKTtmb3IoeVsxODhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzNmFcdWQzNmJcdWQzNmNc''@;'; put 'put ''dWQzNmRcdWQzNmVcdWQzNmZcdWQzNzBcdWQzNzFcdWQzNzJcdWQzNzNcdWQzNzRcdWQzNzVcdWQzNzZcdWQzNzdcdWQzNzhcdWQzNzlcdWQzN2FcdWQzN2JcdWQzN2VcdWQzN2ZcdWQzODFcdWQzODJcdWQzODNcdWQzODVcdWQzODZcdWQzODdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWQzODhcdWQzODlcdWQzOGFcdWQzOGJcdWQzOGVcdWQzOTJcdWQzOTNcdWQzOTRcdWQzOTVcdWQzOTZcdWQzOTdcdWQzOWFcdWQzOWJcdWQzOWRcdWQzOWVcdWQzOWZcdWQzYTFcdWQzYTJcdWQzYTNcdWQzYTRcdWQzYTVcdWQzYTZcdWQzYTdcdWQzYWFcdWQzYWNcdWQzYWVc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzYWZcdWQzYjBcdWQzYjFcdWQzYjJcdWQzYjNcdWQzYjVcdWQzYjZcdWQzYjdcdWQzYjlcdWQzYmFcdWQzYmJcdWQzYmRcdWQzYmVcdWQzYmZcdWQzYzBcdWQzYzFcdWQzYzJcdWQzYzNcdWQzYzZcdWQzYzdcdWQzY2FcdWQz''@;'; put 'put ''Y2JcdWQzY2NcdWQzY2RcdWQzY2VcdWQzY2ZcdWQzZDFcdWQzZDJcdWQzZDNcdWQzZDRcdWQzZDVcdWQzZDZcdWMwZTVcdWMwZThcdWMwZWNcdWMwZjRcdWMwZjVcdWMwZjdcdWMwZjlcdWMxMDBcdWMxMDRcdWMxMDhcdWMxMTBcdWMxMTVcdWMxMWNcdWMxMWRcdWMxMWVcdWMxMWZcdWMxMjBc''@;'; put 'put ''dWMxMjNcdWMxMjRcdWMxMjZcdWMxMjdcdWMxMmNcdWMxMmRcdWMxMmZcdWMxMzBcdWMxMzFcdWMxMzZcdWMxMzhcdWMxMzlcdWMxM2NcdWMxNDBcdWMxNDhcdWMxNDlcdWMxNGJcdWMxNGNcdWMxNGRcdWMxNTRcdWMxNTVcdWMxNThcdWMxNWNcdWMxNjRcdWMxNjVcdWMxNjdcdWMxNjhcdWMx''@;'; put 'put ''NjlcdWMxNzBcdWMxNzRcdWMxNzhcdWMxODVcdWMxOGNcdWMxOGRcdWMxOGVcdWMxOTBcdWMxOTRcdWMxOTZcdWMxOWNcdWMxOWRcdWMxOWZcdWMxYTFcdWMxYTVcdWMxYThcdWMxYTlcdWMxYWNcdWMxYjBcdWMxYmRcdWMxYzRcdWMxYzhcdWMxY2NcdWMxZDRcdWMxZDdcdWMxZDhcdWMxZTBc''@;'; put 'put ''dWMxZTRcdWMxZThcdWMxZjBcdWMxZjFcdWMxZjNcdWMxZmNcdWMxZmRcdWMyMDBcdWMyMDRcdWMyMGNcdWMyMGRcdWMyMGZcdWMyMTFcdWMyMThcdWMyMTlcdWMyMWNcdWMyMWZcdWMyMjBcdWMyMjhcdWMyMjlcdWMyMmJcdWMyMmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxODhdLmxl''@;'; put 'put ''bmd0aDsrK2cpNjU1MzMhPT15WzE4OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxODhdW2ddXT00ODEyOCtnLF9bNDgxMjgrZ109eVsxODhdW2ddKTtmb3IoeVsxODldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzZDdc''@;'; put 'put ''dWQzZDlcdWQzZGFcdWQzZGJcdWQzZGNcdWQzZGRcdWQzZGVcdWQzZGZcdWQzZTBcdWQzZTJcdWQzZTRcdWQzZTVcdWQzZTZcdWQzZTdcdWQzZThcdWQzZTlcdWQzZWFcdWQzZWJcdWQzZWVcdWQzZWZcdWQzZjFcdWQzZjJcdWQzZjNcdWQzZjVcdWQzZjZcdWQzZjdcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQzZjhcdWQzZjlcdWQzZmFcdWQzZmJcdWQzZmVcdWQ0MDBcdWQ0MDJcdWQ0MDNcdWQ0MDRcdWQ0MDVcdWQ0MDZcdWQ0MDdcdWQ0MDlcdWQ0MGFcdWQ0MGJcdWQ0MGNcdWQ0MGRcdWQ0MGVcdWQ0MGZcdWQ0MTBcdWQ0MTFcdWQ0MTJcdWQ0MTNcdWQ0MTRc''@;'; put 'put ''dWQ0MTVcdWQ0MTZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0MTdcdWQ0MThcdWQ0MTlcdWQ0MWFcdWQ0MWJcdWQ0MWNcdWQ0MWVcdWQ0MWZcdWQ0MjBcdWQ0MjFcdWQ0MjJcdWQ0MjNcdWQ0MjRcdWQ0MjVcdWQ0MjZcdWQ0MjdcdWQ0MjhcdWQ0MjlcdWQ0MmFcdWQ0''@;'; put 'put ''MmJcdWQ0MmNcdWQ0MmRcdWQ0MmVcdWQ0MmZcdWQ0MzBcdWQ0MzFcdWQ0MzJcdWQ0MzNcdWQ0MzRcdWQ0MzVcdWQ0MzZcdWQ0MzdcdWMyMmZcdWMyMzFcdWMyMzJcdWMyMzRcdWMyNDhcdWMyNTBcdWMyNTFcdWMyNTRcdWMyNThcdWMyNjBcdWMyNjVcdWMyNmNcdWMyNmRcdWMyNzBcdWMyNzRc''@;'; put 'put ''dWMyN2NcdWMyN2RcdWMyN2ZcdWMyODFcdWMyODhcdWMyODlcdWMyOTBcdWMyOThcdWMyOWJcdWMyOWRcdWMyYTRcdWMyYTVcdWMyYThcdWMyYWNcdWMyYWRcdWMyYjRcdWMyYjVcdWMyYjdcdWMyYjlcdWMyZGNcdWMyZGRcdWMyZTBcdWMyZTNcdWMyZTRcdWMyZWJcdWMyZWNcdWMyZWRcdWMy''@;'; put 'put ''ZWZcdWMyZjFcdWMyZjZcdWMyZjhcdWMyZjlcdWMyZmJcdWMyZmNcdWMzMDBcdWMzMDhcdWMzMDlcdWMzMGNcdWMzMGRcdWMzMTNcdWMzMTRcdWMzMTVcdWMzMThcdWMzMWNcdWMzMjRcdWMzMjVcdWMzMjhcdWMzMjlcdWMzNDVcdWMzNjhcdWMzNjlcdWMzNmNcdWMzNzBcdWMzNzJcdWMzNzhc''@;'; put 'put ''dWMzNzlcdWMzN2NcdWMzN2RcdWMzODRcdWMzODhcdWMzOGNcdWMzYzBcdWMzZDhcdWMzZDlcdWMzZGNcdWMzZGZcdWMzZTBcdWMzZTJcdWMzZThcdWMzZTlcdWMzZWRcdWMzZjRcdWMzZjVcdWMzZjhcdWM0MDhcdWM0MTBcdWM0MjRcdWM0MmNcdWM0MzBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7''@;'; put 'put ''ZyE9eVsxODldLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE4OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxODldW2ddXT00ODM4NCtnLF9bNDgzODQrZ109eVsxODldW2ddKTtmb3IoeVsxOTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWQ0MzhcdWQ0MzlcdWQ0M2FcdWQ0M2JcdWQ0M2NcdWQ0M2RcdWQ0M2VcdWQ0M2ZcdWQ0NDFcdWQ0NDJcdWQ0NDNcdWQ0NDVcdWQ0NDZcdWQ0NDdcdWQ0NDhcdWQ0NDlcdWQ0NGFcdWQ0NGJcdWQ0NGNcdWQ0NGRcdWQ0NGVcdWQ0NGZcdWQ0NTBcdWQ0NTFcdWQ0NTJcdWQ0NTNcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0NTRcdWQ0NTVcdWQ0NTZcdWQ0NTdcdWQ0NThcdWQ0NTlcdWQ0NWFcdWQ0NWJcdWQ0NWRcdWQ0NWVcdWQ0NWZcdWQ0NjFcdWQ0NjJcdWQ0NjNcdWQ0NjVcdWQ0NjZcdWQ0NjdcdWQ0NjhcdWQ0NjlcdWQ0NmFcdWQ0NmJcdWQ0NmNc''@;'; put 'put ''dWQ0NmVcdWQ0NzBcdWQ0NzFcdWQ0NzJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0NzNcdWQ0NzRcdWQ0NzVcdWQ0NzZcdWQ0NzdcdWQ0N2FcdWQ0N2JcdWQ0N2RcdWQ0N2VcdWQ0ODFcdWQ0ODNcdWQ0ODRcdWQ0ODVcdWQ0ODZcdWQ0ODdcdWQ0OGFcdWQ0OGNcdWQ0''@;'; put 'put ''OGVcdWQ0OGZcdWQ0OTBcdWQ0OTFcdWQ0OTJcdWQ0OTNcdWQ0OTVcdWQ0OTZcdWQ0OTdcdWQ0OThcdWQ0OTlcdWQ0OWFcdWQ0OWJcdWQ0OWNcdWQ0OWRcdWM0MzRcdWM0M2NcdWM0M2RcdWM0NDhcdWM0NjRcdWM0NjVcdWM0NjhcdWM0NmNcdWM0NzRcdWM0NzVcdWM0NzlcdWM0ODBcdWM0OTRc''@;'; put 'put ''dWM0OWNcdWM0YjhcdWM0YmNcdWM0ZTlcdWM0ZjBcdWM0ZjFcdWM0ZjRcdWM0ZjhcdWM0ZmFcdWM0ZmZcdWM1MDBcdWM1MDFcdWM1MGNcdWM1MTBcdWM1MTRcdWM1MWNcdWM1MjhcdWM1MjlcdWM1MmNcdWM1MzBcdWM1MzhcdWM1MzlcdWM1M2JcdWM1M2RcdWM1NDRcdWM1NDVcdWM1NDhcdWM1''@;'; put 'put ''NDlcdWM1NGFcdWM1NGNcdWM1NGRcdWM1NGVcdWM1NTNcdWM1NTRcdWM1NTVcdWM1NTdcdWM1NThcdWM1NTlcdWM1NWRcdWM1NWVcdWM1NjBcdWM1NjFcdWM1NjRcdWM1NjhcdWM1NzBcdWM1NzFcdWM1NzNcdWM1NzRcdWM1NzVcdWM1N2NcdWM1N2RcdWM1ODBcdWM1ODRcdWM1ODdcdWM1OGNc''@;'; put 'put ''dWM1OGRcdWM1OGZcdWM1OTFcdWM1OTVcdWM1OTdcdWM1OThcdWM1OWNcdWM1YTBcdWM1YTlcdWM1YjRcdWM1YjVcdWM1YjhcdWM1YjlcdWM1YmJcdWM1YmNcdWM1YmRcdWM1YmVcdWM1YzRcdWM1YzVcdWM1YzZcdWM1YzdcdWM1YzhcdWM1YzlcdWM1Y2FcdWM1Y2NcdWM1Y2VcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxnPTA7ZyE9eVsxOTBdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE5MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxOTBdW2ddXT00ODY0MCtnLF9bNDg2NDArZ109eVsxOTBdW2ddKTtmb3IoeVsxOTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWQ0OWVcdWQ0OWZcdWQ0YTBcdWQ0YTFcdWQ0YTJcdWQ0YTNcdWQ0YTRcdWQ0YTVcdWQ0YTZcdWQ0YTdcdWQ0YThcdWQ0YWFcdWQ0YWJcdWQ0YWNcdWQ0YWRcdWQ0YWVcdWQ0YWZcdWQ0YjBcdWQ0YjFcdWQ0YjJcdWQ0YjNcdWQ0YjRcdWQ0YjVcdWQ0YjZcdWQ0''@;'; put 'put ''YjdcdWQ0YjhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0YjlcdWQ0YmFcdWQ0YmJcdWQ0YmNcdWQ0YmRcdWQ0YmVcdWQ0YmZcdWQ0YzBcdWQ0YzFcdWQ0YzJcdWQ0YzNcdWQ0YzRcdWQ0YzVcdWQ0YzZcdWQ0YzdcdWQ0YzhcdWQ0YzlcdWQ0Y2FcdWQ0Y2JcdWQ0Y2Rc''@;'; put 'put ''dWQ0Y2VcdWQ0Y2ZcdWQ0ZDFcdWQ0ZDJcdWQ0ZDNcdWQ0ZDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0ZDZcdWQ0ZDdcdWQ0ZDhcdWQ0ZDlcdWQ0ZGFcdWQ0ZGJcdWQ0ZGRcdWQ0ZGVcdWQ0ZTBcdWQ0ZTFcdWQ0ZTJcdWQ0ZTNcdWQ0ZTRcdWQ0ZTVcdWQ0ZTZcdWQ0''@;'; put 'put ''ZTdcdWQ0ZTlcdWQ0ZWFcdWQ0ZWJcdWQ0ZWRcdWQ0ZWVcdWQ0ZWZcdWQ0ZjFcdWQ0ZjJcdWQ0ZjNcdWQ0ZjRcdWQ0ZjVcdWQ0ZjZcdWQ0ZjdcdWQ0ZjlcdWQ0ZmFcdWQ0ZmNcdWM1ZDBcdWM1ZDFcdWM1ZDRcdWM1ZDhcdWM1ZTBcdWM1ZTFcdWM1ZTNcdWM1ZTVcdWM1ZWNcdWM1ZWRcdWM1ZWVc''@;'; put 'put ''dWM1ZjBcdWM1ZjRcdWM1ZjZcdWM1ZjdcdWM1ZmNcdWM1ZmRcdWM1ZmVcdWM1ZmZcdWM2MDBcdWM2MDFcdWM2MDVcdWM2MDZcdWM2MDdcdWM2MDhcdWM2MGNcdWM2MTBcdWM2MThcdWM2MTlcdWM2MWJcdWM2MWNcdWM2MjRcdWM2MjVcdWM2MjhcdWM2MmNcdWM2MmRcdWM2MmVcdWM2MzBcdWM2''@;'; put 'put ''MzNcdWM2MzRcdWM2MzVcdWM2MzdcdWM2MzlcdWM2M2JcdWM2NDBcdWM2NDFcdWM2NDRcdWM2NDhcdWM2NTBcdWM2NTFcdWM2NTNcdWM2NTRcdWM2NTVcdWM2NWNcdWM2NWRcdWM2NjBcdWM2NmNcdWM2NmZcdWM2NzFcdWM2NzhcdWM2NzlcdWM2N2NcdWM2ODBcdWM2ODhcdWM2ODlcdWM2OGJc''@;'; put 'put ''dWM2OGRcdWM2OTRcdWM2OTVcdWM2OThcdWM2OWNcdWM2YTRcdWM2YTVcdWM2YTdcdWM2YTlcdWM2YjBcdWM2YjFcdWM2YjRcdWM2YjhcdWM2YjlcdWM2YmFcdWM2YzBcdWM2YzFcdWM2YzNcdWM2YzVcdWM2Y2NcdWM2Y2RcdWM2ZDBcdWM2ZDRcdWM2ZGNcdWM2ZGRcdWM2ZTBcdWM2ZTFcdWM2''@;'; put 'put ''ZThcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxOTFdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE5MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxOTFdW2ddXT00ODg5NitnLF9bNDg4OTYrZ109eVsxOTFdW2ddKTtmb3IoeVsxOTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0ZmVcdWQ0ZmZcdWQ1MDBcdWQ1MDFcdWQ1MDJcdWQ1MDNcdWQ1MDVcdWQ1MDZcdWQ1MDdcdWQ1MDlcdWQ1MGFcdWQ1MGJcdWQ1MGRcdWQ1MGVcdWQ1MGZcdWQ1MTBcdWQ1MTFcdWQ1MTJcdWQ1MTNcdWQ1MTZcdWQ1MThcdWQ1MTlcdWQ1''@;'; put 'put ''MWFcdWQ1MWJcdWQ1MWNcdWQ1MWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1MWVcdWQ1MWZcdWQ1MjBcdWQ1MjFcdWQ1MjJcdWQ1MjNcdWQ1MjRcdWQ1MjVcdWQ1MjZcdWQ1MjdcdWQ1MjhcdWQ1MjlcdWQ1MmFcdWQ1MmJcdWQ1MmNcdWQ1MmRcdWQ1MmVcdWQ1MmZc''@;'; put 'put ''dWQ1MzBcdWQ1MzFcdWQ1MzJcdWQ1MzNcdWQ1MzRcdWQ1MzVcdWQ1MzZcdWQ1MzdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1MzhcdWQ1MzlcdWQ1M2FcdWQ1M2JcdWQ1M2VcdWQ1M2ZcdWQ1NDFcdWQ1NDJcdWQ1NDNcdWQ1NDVcdWQ1NDZcdWQ1NDdcdWQ1NDhcdWQ1''@;'; put 'put ''NDlcdWQ1NGFcdWQ1NGJcdWQ1NGVcdWQ1NTBcdWQ1NTJcdWQ1NTNcdWQ1NTRcdWQ1NTVcdWQ1NTZcdWQ1NTdcdWQ1NWFcdWQ1NWJcdWQ1NWRcdWQ1NWVcdWQ1NWZcdWQ1NjFcdWQ1NjJcdWQ1NjNcdWM2ZTlcdWM2ZWNcdWM2ZjBcdWM2ZjhcdWM2ZjlcdWM2ZmRcdWM3MDRcdWM3MDVcdWM3MDhc''@;'; put 'put ''dWM3MGNcdWM3MTRcdWM3MTVcdWM3MTdcdWM3MTlcdWM3MjBcdWM3MjFcdWM3MjRcdWM3MjhcdWM3MzBcdWM3MzFcdWM3MzNcdWM3MzVcdWM3MzdcdWM3M2NcdWM3M2RcdWM3NDBcdWM3NDRcdWM3NGFcdWM3NGNcdWM3NGRcdWM3NGZcdWM3NTFcdWM3NTJcdWM3NTNcdWM3NTRcdWM3NTVcdWM3''@;'; put 'put ''NTZcdWM3NTdcdWM3NThcdWM3NWNcdWM3NjBcdWM3NjhcdWM3NmJcdWM3NzRcdWM3NzVcdWM3NzhcdWM3N2NcdWM3N2RcdWM3N2VcdWM3ODNcdWM3ODRcdWM3ODVcdWM3ODdcdWM3ODhcdWM3ODlcdWM3OGFcdWM3OGVcdWM3OTBcdWM3OTFcdWM3OTRcdWM3OTZcdWM3OTdcdWM3OThcdWM3OWFc''@;'; put 'put ''dWM3YTBcdWM3YTFcdWM3YTNcdWM3YTRcdWM3YTVcdWM3YTZcdWM3YWNcdWM3YWRcdWM3YjBcdWM3YjRcdWM3YmNcdWM3YmRcdWM3YmZcdWM3YzBcdWM3YzFcdWM3YzhcdWM3YzlcdWM3Y2NcdWM3Y2VcdWM3ZDBcdWM3ZDhcdWM3ZGRcdWM3ZTRcdWM3ZThcdWM3ZWNcdWM4MDBcdWM4MDFcdWM4''@;'; put 'put ''MDRcdWM4MDhcdWM4MGFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxOTJdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE5Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxOTJdW2ddXT00OTE1MitnLF9bNDkxNTIrZ109eVsxOTJdW2ddKTtmb3IoeVsxOTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1NjRcdWQ1NjZcdWQ1NjdcdWQ1NmFcdWQ1NmNcdWQ1NmVcdWQ1NmZcdWQ1NzBcdWQ1NzFcdWQ1NzJcdWQ1NzNcdWQ1NzZcdWQ1NzdcdWQ1NzlcdWQ1N2FcdWQ1N2JcdWQ1N2RcdWQ1N2VcdWQ1N2ZcdWQ1ODBcdWQ1''@;'; put 'put ''ODFcdWQ1ODJcdWQ1ODNcdWQ1ODZcdWQ1OGFcdWQ1OGJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1OGNcdWQ1OGRcdWQ1OGVcdWQ1OGZcdWQ1OTFcdWQ1OTJcdWQ1OTNcdWQ1OTRcdWQ1OTVcdWQ1OTZcdWQ1OTdcdWQ1OThcdWQ1OTlcdWQ1OWFcdWQ1OWJcdWQ1OWNc''@;'; put 'put ''dWQ1OWRcdWQ1OWVcdWQ1OWZcdWQ1YTBcdWQ1YTFcdWQ1YTJcdWQ1YTNcdWQ1YTRcdWQ1YTZcdWQ1YTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1YThcdWQ1YTlcdWQ1YWFcdWQ1YWJcdWQ1YWNcdWQ1YWRcdWQ1YWVcdWQ1YWZcdWQ1YjBcdWQ1YjFcdWQ1YjJcdWQ1''@;'; put 'put ''YjNcdWQ1YjRcdWQ1YjVcdWQ1YjZcdWQ1YjdcdWQ1YjhcdWQ1YjlcdWQ1YmFcdWQ1YmJcdWQ1YmNcdWQ1YmRcdWQ1YmVcdWQ1YmZcdWQ1YzBcdWQ1YzFcdWQ1YzJcdWQ1YzNcdWQ1YzRcdWQ1YzVcdWQ1YzZcdWQ1YzdcdWM4MTBcdWM4MTFcdWM4MTNcdWM4MTVcdWM4MTZcdWM4MWNcdWM4MWRc''@;'; put 'put ''dWM4MjBcdWM4MjRcdWM4MmNcdWM4MmRcdWM4MmZcdWM4MzFcdWM4MzhcdWM4M2NcdWM4NDBcdWM4NDhcdWM4NDlcdWM4NGNcdWM4NGRcdWM4NTRcdWM4NzBcdWM4NzFcdWM4NzRcdWM4NzhcdWM4N2FcdWM4ODBcdWM4ODFcdWM4ODNcdWM4ODVcdWM4ODZcdWM4ODdcdWM4OGJcdWM4OGNcdWM4''@;'; put 'put ''OGRcdWM4OTRcdWM4OWRcdWM4OWZcdWM4YTFcdWM4YThcdWM4YmNcdWM4YmRcdWM4YzRcdWM4YzhcdWM4Y2NcdWM4ZDRcdWM4ZDVcdWM4ZDdcdWM4ZDlcdWM4ZTBcdWM4ZTFcdWM4ZTRcdWM4ZjVcdWM4ZmNcdWM4ZmRcdWM5MDBcdWM5MDRcdWM5MDVcdWM5MDZcdWM5MGNcdWM5MGRcdWM5MGZc''@;'; put 'put ''dWM5MTFcdWM5MThcdWM5MmNcdWM5MzRcdWM5NTBcdWM5NTFcdWM5NTRcdWM5NThcdWM5NjBcdWM5NjFcdWM5NjNcdWM5NmNcdWM5NzBcdWM5NzRcdWM5N2NcdWM5ODhcdWM5ODlcdWM5OGNcdWM5OTBcdWM5OThcdWM5OTlcdWM5OWJcdWM5OWRcdWM5YzBcdWM5YzFcdWM5YzRcdWM5YzdcdWM5''@;'; put 'put ''YzhcdWM5Y2FcdWM5ZDBcdWM5ZDFcdWM5ZDNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxOTNdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE5M11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxOTNdW2ddXT00OTQwOCtnLF9bNDk0MDgrZ109eVsxOTNdW2ddKTtmb3IoeVsxOTRdPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1Y2FcdWQ1Y2JcdWQ1Y2RcdWQ1Y2VcdWQ1Y2ZcdWQ1ZDFcdWQ1ZDNcdWQ1ZDRcdWQ1ZDVcdWQ1ZDZcdWQ1ZDdcdWQ1ZGFcdWQ1ZGNcdWQ1ZGVcdWQ1ZGZcdWQ1ZTBcdWQ1ZTFcdWQ1ZTJcdWQ1''@;'; put 'put ''ZTNcdWQ1ZTZcdWQ1ZTdcdWQ1ZTlcdWQ1ZWFcdWQ1ZWJcdWQ1ZWRcdWQ1ZWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ1ZWZcdWQ1ZjBcdWQ1ZjFcdWQ1ZjJcdWQ1ZjNcdWQ1ZjZcdWQ1ZjhcdWQ1ZmFcdWQ1ZmJcdWQ1ZmNcdWQ1ZmRcdWQ1ZmVcdWQ1ZmZcdWQ2MDJc''@;'; put 'put ''dWQ2MDNcdWQ2MDVcdWQ2MDZcdWQ2MDdcdWQ2MDlcdWQ2MGFcdWQ2MGJcdWQ2MGNcdWQ2MGRcdWQ2MGVcdWQ2MGZcdWQ2MTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2MTZcdWQ2MTdcdWQ2MThcdWQ2MTlcdWQ2MWFcdWQ2MWJcdWQ2MWRcdWQ2MWVcdWQ2MWZcdWQ2''@;'; put 'put ''MjFcdWQ2MjJcdWQ2MjNcdWQ2MjVcdWQ2MjZcdWQ2MjdcdWQ2MjhcdWQ2MjlcdWQ2MmFcdWQ2MmJcdWQ2MmNcdWQ2MmVcdWQ2MmZcdWQ2MzBcdWQ2MzFcdWQ2MzJcdWQ2MzNcdWQ2MzRcdWQ2MzVcdWQ2MzZcdWQ2MzdcdWQ2M2FcdWQ2M2JcdWM5ZDVcdWM5ZDZcdWM5ZDlcdWM5ZGFcdWM5ZGNc''@;'; put 'put ''dWM5ZGRcdWM5ZTBcdWM5ZTJcdWM5ZTRcdWM5ZTdcdWM5ZWNcdWM5ZWRcdWM5ZWZcdWM5ZjBcdWM5ZjFcdWM5ZjhcdWM5ZjlcdWM5ZmNcdWNhMDBcdWNhMDhcdWNhMDlcdWNhMGJcdWNhMGNcdWNhMGRcdWNhMTRcdWNhMThcdWNhMjlcdWNhNGNcdWNhNGRcdWNhNTBcdWNhNTRcdWNhNWNcdWNh''@;'; put 'put ''NWRcdWNhNWZcdWNhNjBcdWNhNjFcdWNhNjhcdWNhN2RcdWNhODRcdWNhOThcdWNhYmNcdWNhYmRcdWNhYzBcdWNhYzRcdWNhY2NcdWNhY2RcdWNhY2ZcdWNhZDFcdWNhZDNcdWNhZDhcdWNhZDlcdWNhZTBcdWNhZWNcdWNhZjRcdWNiMDhcdWNiMTBcdWNiMTRcdWNiMThcdWNiMjBcdWNiMjFc''@;'; put 'put ''dWNiNDFcdWNiNDhcdWNiNDlcdWNiNGNcdWNiNTBcdWNiNThcdWNiNTlcdWNiNWRcdWNiNjRcdWNiNzhcdWNiNzlcdWNiOWNcdWNiYjhcdWNiZDRcdWNiZTRcdWNiZTdcdWNiZTlcdWNjMGNcdWNjMGRcdWNjMTBcdWNjMTRcdWNjMWNcdWNjMWRcdWNjMjFcdWNjMjJcdWNjMjdcdWNjMjhcdWNj''@;'; put 'put ''MjlcdWNjMmNcdWNjMmVcdWNjMzBcdWNjMzhcdWNjMzlcdWNjM2JcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxOTRdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE5NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxOTRdW2ddXT00OTY2NCtnLF9bNDk2NjQrZ109eVsxOTRdW2ddKTtmb3IoeVsx''@;'; put 'put ''OTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2M2RcdWQ2M2VcdWQ2M2ZcdWQ2NDFcdWQ2NDJcdWQ2NDNcdWQ2NDRcdWQ2NDZcdWQ2NDdcdWQ2NGFcdWQ2NGNcdWQ2NGVcdWQ2NGZcdWQ2NTBcdWQ2NTJcdWQ2NTNcdWQ2''@;'; put 'put ''NTZcdWQ2NTdcdWQ2NTlcdWQ2NWFcdWQ2NWJcdWQ2NWRcdWQ2NWVcdWQ2NWZcdWQ2NjBcdWQ2NjFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2NjJcdWQ2NjNcdWQ2NjRcdWQ2NjVcdWQ2NjZcdWQ2NjhcdWQ2NmFcdWQ2NmJcdWQ2NmNcdWQ2NmRcdWQ2NmVcdWQ2NmZc''@;'; put 'put ''dWQ2NzJcdWQ2NzNcdWQ2NzVcdWQ2NzZcdWQ2NzdcdWQ2NzhcdWQ2NzlcdWQ2N2FcdWQ2N2JcdWQ2N2NcdWQ2N2RcdWQ2N2VcdWQ2N2ZcdWQ2ODBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2ODFcdWQ2ODJcdWQ2ODRcdWQ2ODZcdWQ2ODdcdWQ2ODhcdWQ2ODlcdWQ2''@;'; put 'put ''OGFcdWQ2OGJcdWQ2OGVcdWQ2OGZcdWQ2OTFcdWQ2OTJcdWQ2OTNcdWQ2OTVcdWQ2OTZcdWQ2OTdcdWQ2OThcdWQ2OTlcdWQ2OWFcdWQ2OWJcdWQ2OWNcdWQ2OWVcdWQ2YTBcdWQ2YTJcdWQ2YTNcdWQ2YTRcdWQ2YTVcdWQ2YTZcdWQ2YTdcdWQ2YTlcdWQ2YWFcdWNjM2NcdWNjM2RcdWNjM2Vc''@;'; put 'put ''dWNjNDRcdWNjNDVcdWNjNDhcdWNjNGNcdWNjNTRcdWNjNTVcdWNjNTdcdWNjNThcdWNjNTlcdWNjNjBcdWNjNjRcdWNjNjZcdWNjNjhcdWNjNzBcdWNjNzVcdWNjOThcdWNjOTlcdWNjOWNcdWNjYTBcdWNjYThcdWNjYTlcdWNjYWJcdWNjYWNcdWNjYWRcdWNjYjRcdWNjYjVcdWNjYjhcdWNj''@;'; put 'put ''YmNcdWNjYzRcdWNjYzVcdWNjYzdcdWNjYzlcdWNjZDBcdWNjZDRcdWNjZTRcdWNjZWNcdWNjZjBcdWNkMDFcdWNkMDhcdWNkMDlcdWNkMGNcdWNkMTBcdWNkMThcdWNkMTlcdWNkMWJcdWNkMWRcdWNkMjRcdWNkMjhcdWNkMmNcdWNkMzlcdWNkNWNcdWNkNjBcdWNkNjRcdWNkNmNcdWNkNmRc''@;'; put 'put ''dWNkNmZcdWNkNzFcdWNkNzhcdWNkODhcdWNkOTRcdWNkOTVcdWNkOThcdWNkOWNcdWNkYTRcdWNkYTVcdWNkYTdcdWNkYTlcdWNkYjBcdWNkYzRcdWNkY2NcdWNkZDBcdWNkZThcdWNkZWNcdWNkZjBcdWNkZjhcdWNkZjlcdWNkZmJcdWNkZmRcdWNlMDRcdWNlMDhcdWNlMGNcdWNlMTRcdWNl''@;'; put 'put ''MTlcdWNlMjBcdWNlMjFcdWNlMjRcdWNlMjhcdWNlMzBcdWNlMzFcdWNlMzNcdWNlMzVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxOTVdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE5NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxOTVdW2ddXT00OTkyMCtnLF9bNDk5MjArZ109eVsxOTVd''@;'; put 'put ''W2ddKTtmb3IoeVsxOTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2YWJcdWQ2YWRcdWQ2YWVcdWQ2YWZcdWQ2YjFcdWQ2YjJcdWQ2YjNcdWQ2YjRcdWQ2YjVcdWQ2YjZcdWQ2YjdcdWQ2YjhcdWQ2YmFcdWQ2YmNcdWQ2''@;'; put 'put ''YmRcdWQ2YmVcdWQ2YmZcdWQ2YzBcdWQ2YzFcdWQ2YzJcdWQ2YzNcdWQ2YzZcdWQ2YzdcdWQ2YzlcdWQ2Y2FcdWQ2Y2JcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2Y2RcdWQ2Y2VcdWQ2Y2ZcdWQ2ZDBcdWQ2ZDJcdWQ2ZDNcdWQ2ZDVcdWQ2ZDZcdWQ2ZDhcdWQ2ZGFc''@;'; put 'put ''dWQ2ZGJcdWQ2ZGNcdWQ2ZGRcdWQ2ZGVcdWQ2ZGZcdWQ2ZTFcdWQ2ZTJcdWQ2ZTNcdWQ2ZTVcdWQ2ZTZcdWQ2ZTdcdWQ2ZTlcdWQ2ZWFcdWQ2ZWJcdWQ2ZWNcdWQ2ZWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2ZWVcdWQ2ZWZcdWQ2ZjFcdWQ2ZjJcdWQ2ZjNcdWQ2''@;'; put 'put ''ZjRcdWQ2ZjZcdWQ2ZjdcdWQ2ZjhcdWQ2ZjlcdWQ2ZmFcdWQ2ZmJcdWQ2ZmVcdWQ2ZmZcdWQ3MDFcdWQ3MDJcdWQ3MDNcdWQ3MDVcdWQ3MDZcdWQ3MDdcdWQ3MDhcdWQ3MDlcdWQ3MGFcdWQ3MGJcdWQ3MGNcdWQ3MGRcdWQ3MGVcdWQ3MGZcdWQ3MTBcdWQ3MTJcdWQ3MTNcdWQ3MTRcdWNlNThc''@;'; put 'put ''dWNlNTlcdWNlNWNcdWNlNWZcdWNlNjBcdWNlNjFcdWNlNjhcdWNlNjlcdWNlNmJcdWNlNmRcdWNlNzRcdWNlNzVcdWNlNzhcdWNlN2NcdWNlODRcdWNlODVcdWNlODdcdWNlODlcdWNlOTBcdWNlOTFcdWNlOTRcdWNlOThcdWNlYTBcdWNlYTFcdWNlYTNcdWNlYTRcdWNlYTVcdWNlYWNcdWNl''@;'; put 'put ''YWRcdWNlYzFcdWNlZTRcdWNlZTVcdWNlZThcdWNlZWJcdWNlZWNcdWNlZjRcdWNlZjVcdWNlZjdcdWNlZjhcdWNlZjlcdWNmMDBcdWNmMDFcdWNmMDRcdWNmMDhcdWNmMTBcdWNmMTFcdWNmMTNcdWNmMTVcdWNmMWNcdWNmMjBcdWNmMjRcdWNmMmNcdWNmMmRcdWNmMmZcdWNmMzBcdWNmMzFc''@;'; put 'put ''dWNmMzhcdWNmNTRcdWNmNTVcdWNmNThcdWNmNWNcdWNmNjRcdWNmNjVcdWNmNjdcdWNmNjlcdWNmNzBcdWNmNzFcdWNmNzRcdWNmNzhcdWNmODBcdWNmODVcdWNmOGNcdWNmYTFcdWNmYThcdWNmYjBcdWNmYzRcdWNmZTBcdWNmZTFcdWNmZTRcdWNmZThcdWNmZjBcdWNmZjFcdWNmZjNcdWNm''@;'; put 'put ''ZjVcdWNmZmNcdWQwMDBcdWQwMDRcdWQwMTFcdWQwMThcdWQwMmRcdWQwMzRcdWQwMzVcdWQwMzhcdWQwM2NcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxOTZdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE5Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxOTZdW2ddXT01MDE3NitnLF9bNTAx''@;'; put 'put ''NzYrZ109eVsxOTZdW2ddKTtmb3IoeVsxOTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ3MTVcdWQ3MTZcdWQ3MTdcdWQ3MWFcdWQ3MWJcdWQ3MWRcdWQ3MWVcdWQ3MWZcdWQ3MjFcdWQ3MjJcdWQ3MjNcdWQ3MjRcdWQ3''@;'; put 'put ''MjVcdWQ3MjZcdWQ3MjdcdWQ3MmFcdWQ3MmNcdWQ3MmVcdWQ3MmZcdWQ3MzBcdWQ3MzFcdWQ3MzJcdWQ3MzNcdWQ3MzZcdWQ3MzdcdWQ3MzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ3M2FcdWQ3M2JcdWQ3M2RcdWQ3M2VcdWQ3M2ZcdWQ3NDBcdWQ3NDFcdWQ3NDJc''@;'; put 'put ''dWQ3NDNcdWQ3NDVcdWQ3NDZcdWQ3NDhcdWQ3NGFcdWQ3NGJcdWQ3NGNcdWQ3NGRcdWQ3NGVcdWQ3NGZcdWQ3NTJcdWQ3NTNcdWQ3NTVcdWQ3NWFcdWQ3NWJcdWQ3NWNcdWQ3NWRcdWQ3NWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ3NWZcdWQ3NjJcdWQ3NjRcdWQ3''@;'; put 'put ''NjZcdWQ3NjdcdWQ3NjhcdWQ3NmFcdWQ3NmJcdWQ3NmRcdWQ3NmVcdWQ3NmZcdWQ3NzFcdWQ3NzJcdWQ3NzNcdWQ3NzVcdWQ3NzZcdWQ3NzdcdWQ3NzhcdWQ3NzlcdWQ3N2FcdWQ3N2JcdWQ3N2VcdWQ3N2ZcdWQ3ODBcdWQ3ODJcdWQ3ODNcdWQ3ODRcdWQ3ODVcdWQ3ODZcdWQ3ODdcdWQ3OGFc''@;'; put 'put ''dWQ3OGJcdWQwNDRcdWQwNDVcdWQwNDdcdWQwNDlcdWQwNTBcdWQwNTRcdWQwNThcdWQwNjBcdWQwNmNcdWQwNmRcdWQwNzBcdWQwNzRcdWQwN2NcdWQwN2RcdWQwODFcdWQwYTRcdWQwYTVcdWQwYThcdWQwYWNcdWQwYjRcdWQwYjVcdWQwYjdcdWQwYjlcdWQwYzBcdWQwYzFcdWQwYzRcdWQw''@;'; put 'put ''YzhcdWQwYzlcdWQwZDBcdWQwZDFcdWQwZDNcdWQwZDRcdWQwZDVcdWQwZGNcdWQwZGRcdWQwZTBcdWQwZTRcdWQwZWNcdWQwZWRcdWQwZWZcdWQwZjBcdWQwZjFcdWQwZjhcdWQxMGRcdWQxMzBcdWQxMzFcdWQxMzRcdWQxMzhcdWQxM2FcdWQxNDBcdWQxNDFcdWQxNDNcdWQxNDRcdWQxNDVc''@;'; put 'put ''dWQxNGNcdWQxNGRcdWQxNTBcdWQxNTRcdWQxNWNcdWQxNWRcdWQxNWZcdWQxNjFcdWQxNjhcdWQxNmNcdWQxN2NcdWQxODRcdWQxODhcdWQxYTBcdWQxYTFcdWQxYTRcdWQxYThcdWQxYjBcdWQxYjFcdWQxYjNcdWQxYjVcdWQxYmFcdWQxYmNcdWQxYzBcdWQxZDhcdWQxZjRcdWQxZjhcdWQy''@;'; put 'put ''MDdcdWQyMDlcdWQyMTBcdWQyMmNcdWQyMmRcdWQyMzBcdWQyMzRcdWQyM2NcdWQyM2RcdWQyM2ZcdWQyNDFcdWQyNDhcdWQyNWNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxOTddLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE5N11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxOTddW2ddXT01''@;'; put 'put ''MDQzMitnLF9bNTA0MzIrZ109eVsxOTddW2ddKTtmb3IoeVsxOThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ3OGRcdWQ3OGVcdWQ3OGZcdWQ3OTFcdWQ3OTJcdWQ3OTNcdWQ3OTRcdWQ3OTVcdWQ3OTZcdWQ3OTdcdWQ3''@;'; put 'put ''OWFcdWQ3OWNcdWQ3OWVcdWQ3OWZcdWQ3YTBcdWQ3YTFcdWQ3YTJcdWQ3YTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWQyNjRcdWQyODBcdWQyODFcdWQyODRcdWQyODhcdWQyOTBcdWQyOTFcdWQyOTVcdWQyOWNcdWQyYTBcdWQyYTRcdWQyYWNcdWQyYjFcdWQyYjhcdWQyYjlcdWQyYmNcdWQyYmZcdWQyYzBcdWQyYzJcdWQyYzhcdWQyYzlcdWQyY2JcdWQyZDRcdWQyZDhcdWQy''@;'; put 'put ''ZGNcdWQyZTRcdWQyZTVcdWQyZjBcdWQyZjFcdWQyZjRcdWQyZjhcdWQzMDBcdWQzMDFcdWQzMDNcdWQzMDVcdWQzMGNcdWQzMGRcdWQzMGVcdWQzMTBcdWQzMTRcdWQzMTZcdWQzMWNcdWQzMWRcdWQzMWZcdWQzMjBcdWQzMjFcdWQzMjVcdWQzMjhcdWQzMjlcdWQzMmNcdWQzMzBcdWQzMzhc''@;'; put 'put ''dWQzMzlcdWQzM2JcdWQzM2NcdWQzM2RcdWQzNDRcdWQzNDVcdWQzN2NcdWQzN2RcdWQzODBcdWQzODRcdWQzOGNcdWQzOGRcdWQzOGZcdWQzOTBcdWQzOTFcdWQzOThcdWQzOTlcdWQzOWNcdWQzYTBcdWQzYThcdWQzYTlcdWQzYWJcdWQzYWRcdWQzYjRcdWQzYjhcdWQzYmNcdWQzYzRcdWQz''@;'; put 'put ''YzVcdWQzYzhcdWQzYzlcdWQzZDBcdWQzZDhcdWQzZTFcdWQzZTNcdWQzZWNcdWQzZWRcdWQzZjBcdWQzZjRcdWQzZmNcdWQzZmRcdWQzZmZcdWQ0MDFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxOThdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE5OF1bZ10uY2hhckNvZGVBdCgwKSYmKElb''@;'; put 'put ''eVsxOThdW2ddXT01MDY4OCtnLF9bNTA2ODgrZ109eVsxOThdW2ddKTtmb3IoeVsxOTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ0MDhcdWQ0MWRcdWQ0NDBcdWQ0NDRcdWQ0NWNcdWQ0NjBcdWQ0NjRcdWQ0NmRcdWQ0NmZcdWQ0NzhcdWQ0NzlcdWQ0N2NcdWQ0N2ZcdWQ0ODBcdWQ0ODJcdWQ0ODhcdWQ0ODlcdWQ0OGJcdWQ0OGRcdWQ0OTRcdWQ0YTlcdWQ0Y2NcdWQ0''@;'; put 'put ''ZDBcdWQ0ZDRcdWQ0ZGNcdWQ0ZGZcdWQ0ZThcdWQ0ZWNcdWQ0ZjBcdWQ0ZjhcdWQ0ZmJcdWQ0ZmRcdWQ1MDRcdWQ1MDhcdWQ1MGNcdWQ1MTRcdWQ1MTVcdWQ1MTdcdWQ1M2NcdWQ1M2RcdWQ1NDBcdWQ1NDRcdWQ1NGNcdWQ1NGRcdWQ1NGZcdWQ1NTFcdWQ1NThcdWQ1NTlcdWQ1NWNcdWQ1NjBc''@;'; put 'put ''dWQ1NjVcdWQ1NjhcdWQ1NjlcdWQ1NmJcdWQ1NmRcdWQ1NzRcdWQ1NzVcdWQ1NzhcdWQ1N2NcdWQ1ODRcdWQ1ODVcdWQ1ODdcdWQ1ODhcdWQ1ODlcdWQ1OTBcdWQ1YTVcdWQ1YzhcdWQ1YzlcdWQ1Y2NcdWQ1ZDBcdWQ1ZDJcdWQ1ZDhcdWQ1ZDlcdWQ1ZGJcdWQ1ZGRcdWQ1ZTRcdWQ1ZTVcdWQ1''@;'; put 'put ''ZThcdWQ1ZWNcdWQ1ZjRcdWQ1ZjVcdWQ1ZjdcdWQ1ZjlcdWQ2MDBcdWQ2MDFcdWQ2MDRcdWQ2MDhcdWQ2MTBcdWQ2MTFcdWQ2MTNcdWQ2MTRcdWQ2MTVcdWQ2MWNcdWQ2MjBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxOTldLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE5OV1bZ10uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKElbeVsxOTldW2ddXT01MDk0NCtnLF9bNTA5NDQrZ109eVsxOTldW2ddKTtmb3IoeVsyMDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWQ2MjRcdWQ2MmRcdWQ2MzhcdWQ2MzlcdWQ2M2NcdWQ2NDBcdWQ2NDVcdWQ2NDhcdWQ2NDlcdWQ2NGJcdWQ2NGRcdWQ2NTFcdWQ2NTRcdWQ2NTVcdWQ2NThcdWQ2NWNcdWQ2NjdcdWQ2NjlcdWQ2NzBcdWQ2NzFcdWQ2''@;'; put 'put ''NzRcdWQ2ODNcdWQ2ODVcdWQ2OGNcdWQ2OGRcdWQ2OTBcdWQ2OTRcdWQ2OWRcdWQ2OWZcdWQ2YTFcdWQ2YThcdWQ2YWNcdWQ2YjBcdWQ2YjlcdWQ2YmJcdWQ2YzRcdWQ2YzVcdWQ2YzhcdWQ2Y2NcdWQ2ZDFcdWQ2ZDRcdWQ2ZDdcdWQ2ZDlcdWQ2ZTBcdWQ2ZTRcdWQ2ZThcdWQ2ZjBcdWQ2ZjVc''@;'; put 'put ''dWQ2ZmNcdWQ2ZmRcdWQ3MDBcdWQ3MDRcdWQ3MTFcdWQ3MThcdWQ3MTlcdWQ3MWNcdWQ3MjBcdWQ3MjhcdWQ3MjlcdWQ3MmJcdWQ3MmRcdWQ3MzRcdWQ3MzVcdWQ3MzhcdWQ3M2NcdWQ3NDRcdWQ3NDdcdWQ3NDlcdWQ3NTBcdWQ3NTFcdWQ3NTRcdWQ3NTZcdWQ3NTdcdWQ3NThcdWQ3NTlcdWQ3''@;'; put 'put ''NjBcdWQ3NjFcdWQ3NjNcdWQ3NjVcdWQ3NjlcdWQ3NmNcdWQ3NzBcdWQ3NzRcdWQ3N2NcdWQ3N2RcdWQ3ODFcdWQ3ODhcdWQ3ODlcdWQ3OGNcdWQ3OTBcdWQ3OThcdWQ3OTlcdWQ3OWJcdWQ3OWRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMDBdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIw''@;'; put 'put ''MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMDBdW2ddXT01MTIwMCtnLF9bNTEyMDArZ109eVsyMDBdW2ddKTtmb3IoeVsyMDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmM2RcdTRmNzNcdTUwNDdcdTUwZjlcdTUyYTBcdTUzZWZcdTU0NzVcdTU0ZTVcdTU2MDlcdTVhYzFcdTViYjZcdTY2ODdcdTY3YjZcdTY3YjdcdTY3ZWZcdTZiNGNcdTczYzJcdTc1YzJcdTdh''@;'; put 'put ''M2NcdTgyZGJcdTgzMDRcdTg4NTdcdTg4ODhcdThhMzZcdThjYzhcdThkY2ZcdThlZmJcdThmZTZcdTk5ZDVcdTUyM2JcdTUzNzRcdTU0MDRcdTYwNmFcdTYxNjRcdTZiYmNcdTczY2ZcdTgxMWFcdTg5YmFcdTg5ZDJcdTk1YTNcdTRmODNcdTUyMGFcdTU4YmVcdTU5NzhcdTU5ZTZcdTVlNzJc''@;'; put 'put ''dTVlNzlcdTYxYzdcdTYzYzBcdTY3NDZcdTY3ZWNcdTY4N2ZcdTZmOTdcdTc2NGVcdTc3MGJcdTc4ZjVcdTdhMDhcdTdhZmZcdTdjMjFcdTgwOWRcdTgyNmVcdTgyNzFcdThhZWJcdTk1OTNcdTRlNmJcdTU1OWRcdTY2ZjdcdTZlMzRcdTc4YTNcdTdhZWRcdTg0NWJcdTg5MTBcdTg3NGVcdTk3''@;'; put 'put ''YThcdTUyZDhcdTU3NGVcdTU4MmFcdTVkNGNcdTYxMWZcdTYxYmVcdTYyMjFcdTY1NjJcdTY3ZDFcdTZhNDRcdTZlMWJcdTc1MThcdTc1YjNcdTc2ZTNcdTc3YjBcdTdkM2FcdTkwYWZcdTk0NTFcdTk0NTJcdTlmOTVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMDJdLmxlbmd0aDsrK2cp''@;'; put 'put ''NjU1MzMhPT15WzIwMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMDJdW2ddXT01MTcxMitnLF9bNTE3MTIrZ109eVsyMDJdW2ddKTtmb3IoeVsyMDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzMjNcdTVjYWNcdTc1MzJcdTgwZGJcdTkyNDBcdTk1OThcdTUyNWJcdTU4MDhcdTU5ZGNcdTVjYTFcdTVkMTdcdTVlYjdcdTVmM2FcdTVmNGFcdTYxNzdcdTZjNWZcdTc1''@;'; put 'put ''N2FcdTc1ODZcdTdjZTBcdTdkNzNcdTdkYjFcdTdmOGNcdTgxNTRcdTgyMjFcdTg1OTFcdTg5NDFcdThiMWJcdTkyZmNcdTk2NGRcdTljNDdcdTRlY2JcdTRlZjdcdTUwMGJcdTUxZjFcdTU4NGZcdTYxMzdcdTYxM2VcdTYxNjhcdTY1MzlcdTY5ZWFcdTZmMTFcdTc1YTVcdTc2ODZcdTc2ZDZc''@;'; put 'put ''dTdiODdcdTgyYTVcdTg0Y2JcdWY5MDBcdTkzYTdcdTk1OGJcdTU1ODBcdTViYTJcdTU3NTFcdWY5MDFcdTdjYjNcdTdmYjlcdTkxYjVcdTUwMjhcdTUzYmJcdTVjNDVcdTVkZThcdTYyZDJcdTYzNmVcdTY0ZGFcdTY0ZTdcdTZlMjBcdTcwYWNcdTc5NWJcdThkZGRcdThlMWVcdWY5MDJcdTkw''@;'; put 'put ''N2RcdTkyNDVcdTkyZjhcdTRlN2VcdTRlZjZcdTUwNjVcdTVkZmVcdTVlZmFcdTYxMDZcdTY5NTdcdTgxNzFcdTg2NTRcdThlNDdcdTkzNzVcdTlhMmJcdTRlNWVcdTUwOTFcdTY3NzBcdTY4NDBcdTUxMDlcdTUyOGRcdTUyOTJcdTZhYTJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMDNd''@;'; put 'put ''Lmxlbmd0aDsrK2cpNjU1MzMhPT15WzIwM11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMDNdW2ddXT01MTk2OCtnLF9bNTE5NjgrZ109eVsyMDNdW2ddKTtmb3IoeVsyMDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3YmNcdTkyMTBcdTllZDRcdTUyYWJcdTYwMmZcdThmZjJcdTUwNDhcdTYxYTlcdTYzZWRcdTY0Y2FcdTY4M2NcdTZhODRcdTZmYzBcdTgxODhcdTg5''@;'; put 'put ''YTFcdTk2OTRcdTU4MDVcdTcyN2RcdTcyYWNcdTc1MDRcdTdkNzlcdTdlNmRcdTgwYTlcdTg5OGJcdThiNzRcdTkwNjNcdTlkNTFcdTYyODlcdTZjN2FcdTZmNTRcdTdkNTBcdTdmM2FcdThhMjNcdTUxN2NcdTYxNGFcdTdiOWRcdThiMTlcdTkyNTdcdTkzOGNcdTRlYWNcdTRmZDNcdTUwMWVc''@;'; put 'put ''dTUwYmVcdTUxMDZcdTUyYzFcdTUyY2RcdTUzN2ZcdTU3NzBcdTU4ODNcdTVlOWFcdTVmOTFcdTYxNzZcdTYxYWNcdTY0Y2VcdTY1NmNcdTY2NmZcdTY2YmJcdTY2ZjRcdTY4OTdcdTZkODdcdTcwODVcdTcwZjFcdTc0OWZcdTc0YTVcdTc0Y2FcdTc1ZDlcdTc4NmNcdTc4ZWNcdTdhZGZcdTdh''@;'; put 'put ''ZjZcdTdkNDVcdTdkOTNcdTgwMTVcdTgwM2ZcdTgxMWJcdTgzOTZcdThiNjZcdThmMTVcdTkwMTVcdTkzZTFcdTk4MDNcdTk4MzhcdTlhNWFcdTliZThcdTRmYzJcdTU1NTNcdTU4M2FcdTU5NTFcdTViNjNcdTVjNDZcdTYwYjhcdTYyMTJcdTY4NDJcdTY4YjBcdWZmZmQiLnNwbGl0KCIiKSxn''@;'; put 'put ''PTA7ZyE9eVsyMDRdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIwNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMDRdW2ddXT01MjIyNCtnLF9bNTIyMjQrZ109eVsyMDRdW2ddKTtmb3IoeVsyMDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY4ZThcdTZlYWFcdTc1NGNcdTc2NzhcdTc4Y2VcdTdhM2RcdTdjZmJcdTdlNmJcdTdlN2NcdThhMDhcdThhYTFcdThjM2ZcdTk2''@;'; put 'put ''OGVcdTlkYzRcdTUzZTRcdTUzZTlcdTU0NGFcdTU0NzFcdTU2ZmFcdTU5ZDFcdTViNjRcdTVjM2JcdTVlYWJcdTYyZjdcdTY1MzdcdTY1NDVcdTY1NzJcdTY2YTBcdTY3YWZcdTY5YzFcdTZjYmRcdTc1ZmNcdTc2OTBcdTc3N2VcdTdhM2ZcdTdmOTRcdTgwMDNcdTgwYTFcdTgxOGZcdTgyZTZc''@;'; put 'put ''dTgyZmRcdTgzZjBcdTg1YzFcdTg4MzFcdTg4YjRcdThhYTVcdWY5MDNcdThmOWNcdTkzMmVcdTk2YzdcdTk4NjdcdTlhZDhcdTlmMTNcdTU0ZWRcdTY1OWJcdTY2ZjJcdTY4OGZcdTdhNDBcdThjMzdcdTlkNjBcdTU2ZjBcdTU3NjRcdTVkMTFcdTY2MDZcdTY4YjFcdTY4Y2RcdTZlZmVcdTc0''@;'; put 'put ''MjhcdTg4OWVcdTliZTRcdTZjNjhcdWY5MDRcdTlhYThcdTRmOWJcdTUxNmNcdTUxNzFcdTUyOWZcdTViNTRcdTVkZTVcdTYwNTBcdTYwNmRcdTYyZjFcdTYzYTdcdTY1M2JcdTczZDlcdTdhN2FcdTg2YTNcdThjYTJcdTk3OGZcdTRlMzJcdTViZTFcdTYyMDhcdTY3OWNcdTc0ZGNcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxnPTA7ZyE9eVsyMDVdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIwNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMDVdW2ddXT01MjQ4MCtnLF9bNTI0ODArZ109eVsyMDVdW2ddKTtmb3IoeVsyMDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5ZDFcdTgzZDNcdThhODdcdThhYjJcdThkZThcdTkwNGVcdTkzNGJcdTk4NDZcdTVlZDNcdTY5ZThcdTg1''@;'; put 'put ''ZmZcdTkwZWRcdWY5MDVcdTUxYTBcdTViOThcdTViZWNcdTYxNjNcdTY4ZmFcdTZiM2VcdTcwNGNcdTc0MmZcdTc0ZDhcdTdiYTFcdTdmNTBcdTgzYzVcdTg5YzBcdThjYWJcdTk1ZGNcdTk5MjhcdTUyMmVcdTYwNWRcdTYyZWNcdTkwMDJcdTRmOGFcdTUxNDlcdTUzMjFcdTU4ZDlcdTVlZTNc''@;'; put 'put ''dTY2ZTBcdTZkMzhcdTcwOWFcdTcyYzJcdTczZDZcdTdiNTBcdTgwZjFcdTk0NWJcdTUzNjZcdTYzOWJcdTdmNmJcdTRlNTZcdTUwODBcdTU4NGFcdTU4ZGVcdTYwMmFcdTYxMjdcdTYyZDBcdTY5ZDBcdTliNDFcdTViOGZcdTdkMThcdTgwYjFcdThmNWZcdTRlYTRcdTUwZDFcdTU0YWNcdTU1''@;'; put 'put ''YWNcdTViMGNcdTVkYTBcdTVkZTdcdTY1MmFcdTY1NGVcdTY4MjFcdTZhNGJcdTcyZTFcdTc2OGVcdTc3ZWZcdTdkNWVcdTdmZjlcdTgxYTBcdTg1NGVcdTg2ZGZcdThmMDNcdThmNGVcdTkwY2FcdTk5MDNcdTlhNTVcdTliYWJcdTRlMThcdTRlNDVcdTRlNWRcdTRlYzdcdTRmZjFcdTUxNzdc''@;'; put 'put ''dTUyZmVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMDZdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIwNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMDZdW2ddXT01MjczNitnLF9bNTI3MzYrZ109eVsyMDZdW2ddKTtmb3IoeVsyMDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUzNDBcdTUzZTNcdTUzZTVcdTU0OGVcdTU2MTRcdTU3NzVcdTU3YTJcdTViYzdcdTVk''@;'; put 'put ''ODdcdTVlZDBcdTYxZmNcdTYyZDhcdTY1NTFcdTY3YjhcdTY3ZTlcdTY5Y2JcdTZiNTBcdTZiYzZcdTZiZWNcdTZjNDJcdTZlOWRcdTcwNzhcdTcyZDdcdTczOTZcdTc0MDNcdTc3YmZcdTc3ZTlcdTdhNzZcdTdkN2ZcdTgwMDlcdTgxZmNcdTgyMDVcdTgyMGFcdTgyZGZcdTg4NjJcdThiMzNc''@;'; put 'put ''dThjZmNcdThlYzBcdTkwMTFcdTkwYjFcdTkyNjRcdTkyYjZcdTk5ZDJcdTlhNDVcdTljZTlcdTlkZDdcdTlmOWNcdTU3MGJcdTVjNDBcdTgzY2FcdTk3YTBcdTk3YWJcdTllYjRcdTU0MWJcdTdhOThcdTdmYTRcdTg4ZDlcdThlY2RcdTkwZTFcdTU4MDBcdTVjNDhcdTYzOThcdTdhOWZcdTVi''@;'; put 'put ''YWVcdTVmMTNcdTdhNzlcdTdhYWVcdTgyOGVcdThlYWNcdTUwMjZcdTUyMzhcdTUyZjhcdTUzNzdcdTU3MDhcdTYyZjNcdTYzNzJcdTZiMGFcdTZkYzNcdTc3MzdcdTUzYTVcdTczNTdcdTg1NjhcdThlNzZcdTk1ZDVcdTY3M2FcdTZhYzNcdTZmNzBcdThhNmRcdThlY2NcdTk5NGJcdWY5MDZc''@;'; put 'put ''dTY2NzdcdTZiNzhcdThjYjRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMDddLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIwN11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMDddW2ddXT01Mjk5MitnLF9bNTI5OTIrZ109eVsyMDddW2ddKTtmb3IoeVsyMDhdPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTliM2NcdWY5MDdcdTUzZWJcdTU3MmRcdTU5NGVcdTYzYzZcdTY5''@;'; put 'put ''ZmJcdTczZWFcdTc4NDVcdTdhYmFcdTdhYzVcdTdjZmVcdTg0NzVcdTg5OGZcdThkNzNcdTkwMzVcdTk1YThcdTUyZmJcdTU3NDdcdTc1NDdcdTdiNjBcdTgzY2NcdTkyMWVcdWY5MDhcdTZhNThcdTUxNGJcdTUyNGJcdTUyODdcdTYyMWZcdTY4ZDhcdTY5NzVcdTk2OTlcdTUwYzVcdTUyYTRc''@;'; put 'put ''dTUyZTRcdTYxYzNcdTY1YTRcdTY4MzlcdTY5ZmZcdTc0N2VcdTdiNGJcdTgyYjlcdTgzZWJcdTg5YjJcdThiMzlcdThmZDFcdTk5NDlcdWY5MDlcdTRlY2FcdTU5OTdcdTY0ZDJcdTY2MTFcdTZhOGVcdTc0MzRcdTc5ODFcdTc5YmRcdTgyYTlcdTg4N2VcdTg4N2ZcdTg5NWZcdWY5MGFcdTkz''@;'; put 'put ''MjZcdTRmMGJcdTUzY2FcdTYwMjVcdTYyNzFcdTZjNzJcdTdkMWFcdTdkNjZcdTRlOThcdTUxNjJcdTc3ZGNcdTgwYWZcdTRmMDFcdTRmMGVcdTUxNzZcdTUxODBcdTU1ZGNcdTU2NjhcdTU3M2JcdTU3ZmFcdTU3ZmNcdTU5MTRcdTU5NDdcdTU5OTNcdTViYzRcdTVjOTBcdTVkMGVcdTVkZjFc''@;'; put 'put ''dTVlN2VcdTVmY2NcdTYyODBcdTY1ZDdcdTY1ZTNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMDhdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIwOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMDhdW2ddXT01MzI0OCtnLF9bNTMyNDgrZ109eVsyMDhdW2ddKTtmb3IoeVsyMDldPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY3MWVcdTY3MWZcdTY3NWVcdTY4Y2JcdTY4''@;'; put 'put ''YzRcdTZhNWZcdTZiM2FcdTZjMjNcdTZjN2RcdTZjODJcdTZkYzdcdTczOThcdTc0MjZcdTc0MmFcdTc0ODJcdTc0YTNcdTc1NzhcdTc1N2ZcdTc4ODFcdTc4ZWZcdTc5NDFcdTc5NDdcdTc5NDhcdTc5N2FcdTdiOTVcdTdkMDBcdTdkYmFcdTdmODhcdTgwMDZcdTgwMmRcdTgwOGNcdThhMThc''@;'; put 'put ''dThiNGZcdThjNDhcdThkNzdcdTkzMjFcdTkzMjRcdTk4ZTJcdTk5NTFcdTlhMGVcdTlhMGZcdTlhNjVcdTllOTJcdTdkY2FcdTRmNzZcdTU0MDlcdTYyZWVcdTY4NTRcdTkxZDFcdTU1YWJcdTUxM2FcdWY5MGJcdWY5MGNcdTVhMWNcdTYxZTZcdWY5MGRcdTYyY2ZcdTYyZmZcdWY5MGVcdWY5''@;'; put 'put ''MGZcdWY5MTBcdWY5MTFcdWY5MTJcdWY5MTNcdTkwYTNcdWY5MTRcdWY5MTVcdWY5MTZcdWY5MTdcdWY5MThcdThhZmVcdWY5MTlcdWY5MWFcdWY5MWJcdWY5MWNcdTY2OTZcdWY5MWRcdTcxNTZcdWY5MWVcdWY5MWZcdTk2ZTNcdWY5MjBcdTYzNGZcdTYzN2FcdTUzNTdcdWY5MjFcdTY3OGZc''@;'; put 'put ''dTY5NjBcdTZlNzNcdWY5MjJcdTc1MzdcdWY5MjNcdWY5MjRcdWY5MjVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMDldLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIwOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMDldW2ddXT01MzUwNCtnLF9bNTM1MDQrZ109eVsyMDldW2ddKTtmb3Io''@;'; put 'put ''eVsyMTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdkMGRcdWY5MjZcdWY5''@;'; put 'put ''MjdcdTg4NzJcdTU2Y2FcdTVhMThcdWY5MjhcdWY5MjlcdWY5MmFcdWY5MmJcdWY5MmNcdTRlNDNcdWY5MmRcdTUxNjdcdTU5NDhcdTY3ZjBcdTgwMTBcdWY5MmVcdTU5NzNcdTVlNzRcdTY0OWFcdTc5Y2FcdTVmZjVcdTYwNmNcdTYyYzhcdTYzN2JcdTViZTdcdTViZDdcdTUyYWFcdWY5MmZc''@;'; put 'put ''dTU5NzRcdTVmMjlcdTYwMTJcdWY5MzBcdWY5MzFcdWY5MzJcdTc0NTlcdWY5MzNcdWY5MzRcdWY5MzVcdWY5MzZcdWY5MzdcdWY5MzhcdTk5ZDFcdWY5MzlcdWY5M2FcdWY5M2JcdWY5M2NcdWY5M2RcdWY5M2VcdWY5M2ZcdWY5NDBcdWY5NDFcdWY5NDJcdWY5NDNcdTZmYzNcdWY5NDRcdWY5''@;'; put 'put ''NDVcdTgxYmZcdThmYjJcdTYwZjFcdWY5NDZcdWY5NDdcdTgxNjZcdWY5NDhcdWY5NDlcdTVjM2ZcdWY5NGFcdWY5NGJcdWY5NGNcdWY5NGRcdWY5NGVcdWY5NGZcdWY5NTBcdWY5NTFcdTVhZTlcdThhMjVcdTY3N2JcdTdkMTBcdWY5NTJcdWY5NTNcdWY5NTRcdWY5NTVcdWY5NTZcdWY5NTdc''@;'; put 'put ''dTgwZmRcdWY5NThcdWY5NTlcdTVjM2NcdTZjZTVcdTUzM2ZcdTZlYmFcdTU5MWFcdTgzMzZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMTBdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIxMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMTBdW2ddXT01Mzc2MCtnLF9bNTM3NjArZ109eVsy''@;'; put 'put ''MTBdW2ddKTtmb3IoeVsyMTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRl''@;'; put 'put ''MzlcdTRlYjZcdTRmNDZcdTU1YWVcdTU3MThcdTU4YzdcdTVmNTZcdTY1YjdcdTY1ZTZcdTZhODBcdTZiYjVcdTZlNGRcdTc3ZWRcdTdhZWZcdTdjMWVcdTdkZGVcdTg2Y2JcdTg4OTJcdTkxMzJcdTkzNWJcdTY0YmJcdTZmYmVcdTczN2FcdTc1YjhcdTkwNTRcdTU1NTZcdTU3NGRcdTYxYmFc''@;'; put 'put ''dTY0ZDRcdTY2YzdcdTZkZTFcdTZlNWJcdTZmNmRcdTZmYjlcdTc1ZjBcdTgwNDNcdTgxYmRcdTg1NDFcdTg5ODNcdThhYzdcdThiNWFcdTkzMWZcdTZjOTNcdTc1NTNcdTdiNTRcdThlMGZcdTkwNWRcdTU1MTBcdTU4MDJcdTU4NThcdTVlNjJcdTYyMDdcdTY0OWVcdTY4ZTBcdTc1NzZcdTdj''@;'; put 'put ''ZDZcdTg3YjNcdTllZThcdTRlZTNcdTU3ODhcdTU3NmVcdTU5MjdcdTVjMGRcdTVjYjFcdTVlMzZcdTVmODVcdTYyMzRcdTY0ZTFcdTczYjNcdTgxZmFcdTg4OGJcdThjYjhcdTk2OGFcdTllZGJcdTViODVcdTVmYjdcdTYwYjNcdTUwMTJcdTUyMDBcdTUyMzBcdTU3MTZcdTU4MzVcdTU4NTdc''@;'; put 'put ''dTVjMGVcdTVjNjBcdTVjZjZcdTVkOGJcdTVlYTZcdTVmOTJcdTYwYmNcdTYzMTFcdTYzODlcdTY0MTdcdTY4NDNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMTFdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIxMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMTFdW2ddXT01NDAxNitnLF9b''@;'; put 'put ''NTQwMTYrZ109eVsyMTFdW2ddKTtmb3IoeVsyMTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTY4ZjlcdTZhYzJcdTZkZDhcdTZlMjFcdTZlZDRcdTZmZTRcdTcxZmVcdTc2ZGNcdTc3NzlcdTc5YjFcdTdhM2JcdTg0MDRcdTg5YTlcdThjZWRcdThkZjNcdThlNDhcdTkwMDNcdTkwMTRcdTkwNTNcdTkwZmRcdTkzNGRcdTk2NzZcdTk3ZGNcdTZiZDJcdTcwMDZcdTcyNThc''@;'; put 'put ''dTcyYTJcdTczNjhcdTc3NjNcdTc5YmZcdTdiZTRcdTdlOWJcdThiODBcdTU4YTlcdTYwYzdcdTY1NjZcdTY1ZmRcdTY2YmVcdTZjOGNcdTcxMWVcdTcxYzlcdThjNWFcdTk4MTNcdTRlNmRcdTdhODFcdTRlZGRcdTUxYWNcdTUxY2RcdTUyZDVcdTU0MGNcdTYxYTdcdTY3NzFcdTY4NTBcdTY4''@;'; put 'put ''ZGZcdTZkMWVcdTZmN2NcdTc1YmNcdTc3YjNcdTdhZTVcdTgwZjRcdTg0NjNcdTkyODVcdTUxNWNcdTY1OTdcdTY3NWNcdTY3OTNcdTc1ZDhcdTdhYzdcdTgzNzNcdWY5NWFcdThjNDZcdTkwMTdcdTk4MmRcdTVjNmZcdTgxYzBcdTgyOWFcdTkwNDFcdTkwNmZcdTkyMGRcdTVmOTdcdTVkOWRc''@;'; put 'put ''dTZhNTlcdTcxYzhcdTc2N2JcdTdiNDlcdTg1ZTRcdThiMDRcdTkxMjdcdTlhMzBcdTU1ODdcdTYxZjZcdWY5NWJcdTc2NjlcdTdmODVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMTJdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIxMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMTJdW2dd''@;'; put 'put ''XT01NDI3MitnLF9bNTQyNzIrZ109eVsyMTJdW2ddKTtmb3IoeVsyMTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg2M2ZcdTg3YmFcdTg4ZjhcdTkwOGZcdWY5NWNcdTZkMWJcdTcwZDlcdTczZGVcdTdkNjFcdTg0M2RcdWY5NWRcdTkxNmFcdTk5ZjFcdWY5NWVcdTRlODJcdTUzNzVcdTZiMDRcdTZiMTJcdTcwM2VcdTcyMWJcdTg2MmRcdTllMWVcdTUyNGNcdThmYTNc''@;'; put 'put ''dTVkNTBcdTY0ZTVcdTY1MmNcdTZiMTZcdTZmZWJcdTdjNDNcdTdlOWNcdTg1Y2RcdTg5NjRcdTg5YmRcdTYyYzlcdTgxZDhcdTg4MWZcdTVlY2FcdTY3MTdcdTZkNmFcdTcyZmNcdTc0MDVcdTc0NmZcdTg3ODJcdTkwZGVcdTRmODZcdTVkMGRcdTVmYTBcdTg0MGFcdTUxYjdcdTYzYTBcdTc1''@;'; put 'put ''NjVcdTRlYWVcdTUwMDZcdTUxNjlcdTUxYzlcdTY4ODFcdTZhMTFcdTdjYWVcdTdjYjFcdTdjZTdcdTgyNmZcdThhZDJcdThmMWJcdTkxY2ZcdTRmYjZcdTUxMzdcdTUyZjVcdTU0NDJcdTVlZWNcdTYxNmVcdTYyM2VcdTY1YzVcdTZhZGFcdTZmZmVcdTc5MmFcdTg1ZGNcdTg4MjNcdTk1YWRc''@;'; put 'put ''dTlhNjJcdTlhNmFcdTllOTdcdTllY2VcdTUyOWJcdTY2YzZcdTZiNzdcdTcwMWRcdTc5MmJcdThmNjJcdTk3NDJcdTYxOTBcdTYyMDBcdTY1MjNcdTZmMjNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMTNdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIxM11bZ10uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KElbeVsyMTNdW2ddXT01NDUyOCtnLF9bNTQ1MjgrZ109eVsyMTNdW2ddKTtmb3IoeVsyMTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcxNDlcdTc0ODlcdTdkZjRcdTgwNmZcdTg0ZWVcdThmMjZcdTkwMjNcdTkzNGFcdTUxYmRcdTUyMTdcdTUyYTNcdTZkMGNcdTcwYzhcdTg4YzJcdTVlYzlcdTY1ODJcdTZiYWVcdTZmYzJcdTdjM2VcdTczNzVcdTRlZTRcdTRmMzZc''@;'; put 'put ''dTU2ZjlcdWY5NWZcdTVjYmFcdTVkYmFcdTYwMWNcdTczYjJcdTdiMmRcdTdmOWFcdTdmY2VcdTgwNDZcdTkwMWVcdTkyMzRcdTk2ZjZcdTk3NDhcdTk4MThcdTlmNjFcdTRmOGJcdTZmYTdcdTc5YWVcdTkxYjRcdTk2YjdcdTUyZGVcdWY5NjBcdTY0ODhcdTY0YzRcdTZhZDNcdTZmNWVcdTcw''@;'; put 'put ''MThcdTcyMTBcdTc2ZTdcdTgwMDFcdTg2MDZcdTg2NWNcdThkZWZcdThmMDVcdTk3MzJcdTliNmZcdTlkZmFcdTllNzVcdTc4OGNcdTc5N2ZcdTdkYTBcdTgzYzlcdTkzMDRcdTllN2ZcdTllOTNcdThhZDZcdTU4ZGZcdTVmMDRcdTY3MjdcdTcwMjdcdTc0Y2ZcdTdjNjBcdTgwN2VcdTUxMjFc''@;'; put 'put ''dTcwMjhcdTcyNjJcdTc4Y2FcdThjYzJcdThjZGFcdThjZjRcdTk2ZjdcdTRlODZcdTUwZGFcdTViZWVcdTVlZDZcdTY1OTlcdTcxY2VcdTc2NDJcdTc3YWRcdTgwNGFcdTg0ZmNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMTRdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIxNF1bZ10uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKElbeVsyMTRdW2ddXT01NDc4NCtnLF9bNTQ3ODQrZ109eVsyMTRdW2ddKTtmb3IoeVsyMTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwN2NcdTliMjdcdTlmOGRcdTU4ZDhcdTVhNDFcdTVjNjJcdTZhMTNcdTZkZGFcdTZmMGZcdTc2M2JcdTdkMmZcdTdlMzdcdTg1MWVcdTg5MzhcdTkzZTRcdTk2NGJcdTUyODlcdTY1ZDJcdTY3ZjNcdTY5YjRc''@;'; put 'put ''dTZkNDFcdTZlOWNcdTcwMGZcdTc0MDlcdTc0NjBcdTc1NTlcdTc2MjRcdTc4NmJcdThiMmNcdTk4NWVcdTUxNmRcdTYyMmVcdTk2NzhcdTRmOTZcdTUwMmJcdTVkMTlcdTZkZWFcdTdkYjhcdThmMmFcdTVmOGJcdTYxNDRcdTY4MTdcdWY5NjFcdTk2ODZcdTUyZDJcdTgwOGJcdTUxZGNcdTUx''@;'; put 'put ''Y2NcdTY5NWVcdTdhMWNcdTdkYmVcdTgzZjFcdTk2NzVcdTRmZGFcdTUyMjlcdTUzOThcdTU0MGZcdTU1MGVcdTVjNjVcdTYwYTdcdTY3NGVcdTY4YThcdTZkNmNcdTcyODFcdTcyZjhcdTc0MDZcdTc0ODNcdWY5NjJcdTc1ZTJcdTdjNmNcdTdmNzlcdTdmYjhcdTgzODlcdTg4Y2ZcdTg4ZTFc''@;'; put 'put ''dTkxY2NcdTkxZDBcdTk2ZTJcdTliYzlcdTU0MWRcdTZmN2VcdTcxZDBcdTc0OThcdTg1ZmFcdThlYWFcdTk2YTNcdTljNTdcdTllOWZcdTY3OTdcdTZkY2JcdTc0MzNcdTgxZThcdTk3MTZcdTc4MmNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMTVdLmxlbmd0aDsrK2cpNjU1MzMhPT15''@;'; put 'put ''WzIxNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMTVdW2ddXT01NTA0MCtnLF9bNTUwNDArZ109eVsyMTVdW2ddKTtmb3IoeVsyMTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhY2JcdTdiMjBcdTdjOTJcdTY0NjlcdTc0NmFcdTc1ZjJcdTc4YmNcdTc4ZThcdTk5YWNcdTliNTRcdTllYmJcdTViZGVcdTVlNTVcdTZmMjBcdTgxOWNcdTgzYWJcdTkwODhcdTRlMDdc''@;'; put 'put ''dTUzNGRcdTVhMjlcdTVkZDJcdTVmNGVcdTYxNjJcdTYzM2RcdTY2NjlcdTY2ZmNcdTZlZmZcdTZmMmJcdTcwNjNcdTc3OWVcdTg0MmNcdTg1MTNcdTg4M2JcdThmMTNcdTk5NDVcdTljM2JcdTU1MWNcdTYyYjlcdTY3MmJcdTZjYWJcdTgzMDlcdTg5NmFcdTk3N2FcdTRlYTFcdTU5ODRcdTVm''@;'; put 'put ''ZDhcdTVmZDlcdTY3MWJcdTdkYjJcdTdmNTRcdTgyOTJcdTgzMmJcdTgzYmRcdThmMWVcdTkwOTlcdTU3Y2JcdTU5YjlcdTVhOTJcdTViZDBcdTY2MjdcdTY3OWFcdTY4ODVcdTZiY2ZcdTcxNjRcdTdmNzVcdThjYjdcdThjZTNcdTkwODFcdTliNDVcdTgxMDhcdThjOGFcdTk2NGNcdTlhNDBc''@;'; put 'put ''dTllYTVcdTViNWZcdTZjMTNcdTczMWJcdTc2ZjJcdTc2ZGZcdTg0MGNcdTUxYWFcdTg5OTNcdTUxNGRcdTUxOTVcdTUyYzlcdTY4YzlcdTZjOTRcdTc3MDRcdTc3MjBcdTdkYmZcdTdkZWNcdTk3NjJcdTllYjVcdTZlYzVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMTZdLmxlbmd0aDsr''@;'; put 'put ''K2cpNjU1MzMhPT15WzIxNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMTZdW2ddXT01NTI5NitnLF9bNTUyOTYrZ109eVsyMTZdW2ddKTtmb3IoeVsyMTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1MTFcdTUxYTVcdTU0MGRcdTU0N2RcdTY2MGVcdTY2OWRcdTY5MjdcdTZlOWZcdTc2YmZcdTc3OTFcdTgzMTdcdTg0YzJcdTg3OWZcdTkxNjlcdTkyOThcdTljZjRc''@;'; put 'put ''dTg4ODJcdTRmYWVcdTUxOTJcdTUyZGZcdTU5YzZcdTVlM2RcdTYxNTVcdTY0NzhcdTY0NzlcdTY2YWVcdTY3ZDBcdTZhMjFcdTZiY2RcdTZiZGJcdTcyNWZcdTcyNjFcdTc0NDFcdTc3MzhcdTc3ZGJcdTgwMTdcdTgyYmNcdTgzMDVcdThiMDBcdThiMjhcdThjOGNcdTY3MjhcdTZjOTBcdTcy''@;'; put 'put ''NjdcdTc2ZWVcdTc3NjZcdTdhNDZcdTlkYTlcdTZiN2ZcdTZjOTJcdTU5MjJcdTY3MjZcdTg0OTlcdTUzNmZcdTU4OTNcdTU5OTlcdTVlZGZcdTYzY2ZcdTY2MzRcdTY3NzNcdTZlM2FcdTczMmJcdTdhZDdcdTgyZDdcdTkzMjhcdTUyZDlcdTVkZWJcdTYxYWVcdTYxY2JcdTYyMGFcdTYyYzdc''@;'; put 'put ''dTY0YWJcdTY1ZTBcdTY5NTlcdTZiNjZcdTZiY2JcdTcxMjFcdTczZjdcdTc1NWRcdTdlNDZcdTgyMWVcdTgzMDJcdTg1NmFcdThhYTNcdThjYmZcdTk3MjdcdTlkNjFcdTU4YThcdTllZDhcdTUwMTFcdTUyMGVcdTU0M2JcdTU1NGZcdTY1ODdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsy''@;'; put 'put ''MTddLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIxN11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMTddW2ddXT01NTU1MitnLF9bNTU1NTIrZ109eVsyMTddW2ddKTtmb3IoeVsyMThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjNzZcdTdkMGFcdTdkMGJcdTgwNWVcdTg2OGFcdTk1ODBcdTk2ZWZcdTUyZmZcdTZjOTVcdTcyNjlcdTU0NzNcdTVhOWFcdTVjM2VcdTVkNGJc''@;'; put 'put ''dTVmNGNcdTVmYWVcdTY3MmFcdTY4YjZcdTY5NjNcdTZlM2NcdTZlNDRcdTc3MDlcdTdjNzNcdTdmOGVcdTg1ODdcdThiMGVcdThmZjdcdTk3NjFcdTllZjRcdTVjYjdcdTYwYjZcdTYxMGRcdTYxYWJcdTY1NGZcdTY1ZmJcdTY1ZmNcdTZjMTFcdTZjZWZcdTczOWZcdTczYzlcdTdkZTFcdTk1''@;'; put 'put ''OTRcdTViYzZcdTg3MWNcdThiMTBcdTUyNWRcdTUzNWFcdTYyY2RcdTY0MGZcdTY0YjJcdTY3MzRcdTZhMzhcdTZjY2FcdTczYzBcdTc0OWVcdTdiOTRcdTdjOTVcdTdlMWJcdTgxOGFcdTgyMzZcdTg1ODRcdThmZWJcdTk2ZjlcdTk5YzFcdTRmMzRcdTUzNGFcdTUzY2RcdTUzZGJcdTYyY2Nc''@;'; put 'put ''dTY0MmNcdTY1MDBcdTY1OTFcdTY5YzNcdTZjZWVcdTZmNThcdTczZWRcdTc1NTRcdTc2MjJcdTc2ZTRcdTc2ZmNcdTc4ZDBcdTc4ZmJcdTc5MmNcdTdkNDZcdTgyMmNcdTg3ZTBcdThmZDRcdTk4MTJcdTk4ZWZcdTUyYzNcdTYyZDRcdTY0YTVcdTZlMjRcdTZmNTFcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxnPTA7ZyE9eVsyMThdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIxOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMThdW2ddXT01NTgwOCtnLF9bNTU4MDgrZ109eVsyMThdW2ddKTtmb3IoeVsyMTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc2N2NcdThkY2JcdTkxYjFcdTkyNjJcdTlhZWVcdTliNDNcdTUwMjNcdTUwOGRcdTU3NGFcdTU5YThcdTVjMjhcdTVlNDdc''@;'; put 'put ''dTVmNzdcdTYyM2ZcdTY1M2VcdTY1YjlcdTY1YzFcdTY2MDlcdTY3OGJcdTY5OWNcdTZlYzJcdTc4YzVcdTdkMjFcdTgwYWFcdTgxODBcdTgyMmJcdTgyYjNcdTg0YTFcdTg2OGNcdThhMmFcdThiMTdcdTkwYTZcdTk2MzJcdTlmOTBcdTUwMGRcdTRmZjNcdWY5NjNcdTU3ZjlcdTVmOThcdTYy''@;'; put 'put ''ZGNcdTYzOTJcdTY3NmZcdTZlNDNcdTcxMTlcdTc2YzNcdTgwY2NcdTgwZGFcdTg4ZjRcdTg4ZjVcdTg5MTlcdThjZTBcdThmMjlcdTkxNGRcdTk2NmFcdTRmMmZcdTRmNzBcdTVlMWJcdTY3Y2ZcdTY4MjJcdTc2N2RcdTc2N2VcdTliNDRcdTVlNjFcdTZhMGFcdTcxNjlcdTcxZDRcdTc1NmFc''@;'; put 'put ''dWY5NjRcdTdlNDFcdTg1NDNcdTg1ZTlcdTk4ZGNcdTRmMTBcdTdiNGZcdTdmNzBcdTk1YTVcdTUxZTFcdTVlMDZcdTY4YjVcdTZjM2VcdTZjNGVcdTZjZGJcdTcyYWZcdTdiYzRcdTgzMDNcdTZjZDVcdTc0M2FcdTUwZmJcdTUyODhcdTU4YzFcdTY0ZDhcdTZhOTdcdTc0YTdcdTc2NTZcdWZm''@;'; put 'put ''ZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMTldLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIxOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMTldW2ddXT01NjA2NCtnLF9bNTYwNjQrZ109eVsyMTldW2ddKTtmb3IoeVsyMjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc4YTdcdTg2MTdcdTk1ZTJcdTk3MzlcdWY5NjVcdTUzNWVcdTVmMDFcdThiOGFcdThmYThcdThmYWZc''@;'; put 'put ''dTkwOGFcdTUyMjVcdTc3YTVcdTljNDlcdTlmMDhcdTRlMTlcdTUwMDJcdTUxNzVcdTVjNWJcdTVlNzdcdTY2MWVcdTY2M2FcdTY3YzRcdTY4YzVcdTcwYjNcdTc1MDFcdTc1YzVcdTc5YzlcdTdhZGRcdThmMjdcdTk5MjBcdTlhMDhcdTRmZGRcdTU4MjFcdTU4MzFcdTViZjZcdTY2NmVcdTZi''@;'; put 'put ''NjVcdTZkMTFcdTZlN2FcdTZmN2RcdTczZTRcdTc1MmJcdTgzZTlcdTg4ZGNcdTg5MTNcdThiNWNcdThmMTRcdTRmMGZcdTUwZDVcdTUzMTBcdTUzNWNcdTViOTNcdTVmYTlcdTY3MGRcdTc5OGZcdTgxNzlcdTgzMmZcdTg1MTRcdTg5MDdcdTg5ODZcdThmMzlcdThmM2JcdTk5YTVcdTljMTJc''@;'; put 'put ''dTY3MmNcdTRlNzZcdTRmZjhcdTU5NDlcdTVjMDFcdTVjZWZcdTVjZjBcdTYzNjdcdTY4ZDJcdTcwZmRcdTcxYTJcdTc0MmJcdTdlMmJcdTg0ZWNcdTg3MDJcdTkwMjJcdTkyZDJcdTljZjNcdTRlMGRcdTRlZDhcdTRmZWZcdTUwODVcdTUyNTZcdTUyNmZcdTU0MjZcdTU0OTBcdTU3ZTBcdTU5''@;'; put 'put ''MmJcdTVhNjZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMjBdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIyMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMjBdW2ddXT01NjMyMCtnLF9bNTYzMjArZ109eVsyMjBdW2ddKTtmb3IoeVsyMjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTViNWFcdTViNzVcdTViY2NcdTVlOWNcdWY5NjZcdTYyNzZcdTY1NzdcdTY1YTdc''@;'; put 'put ''dTZkNmVcdTZlYTVcdTcyMzZcdTdiMjZcdTdjM2ZcdTdmMzZcdTgxNTBcdTgxNTFcdTgxOWFcdTgyNDBcdTgyOTlcdTgzYTlcdThhMDNcdThjYTBcdThjZTZcdThjZmJcdThkNzRcdThkYmFcdTkwZThcdTkxZGNcdTk2MWNcdTk2NDRcdTk5ZDlcdTljZTdcdTUzMTdcdTUyMDZcdTU0MjlcdTU2''@;'; put 'put ''NzRcdTU4YjNcdTU5NTRcdTU5NmVcdTVmZmZcdTYxYTRcdTYyNmVcdTY2MTBcdTZjN2VcdTcxMWFcdTc2YzZcdTdjODlcdTdjZGVcdTdkMWJcdTgyYWNcdThjYzFcdTk2ZjBcdWY5NjdcdTRmNWJcdTVmMTdcdTVmN2ZcdTYyYzJcdTVkMjlcdTY3MGJcdTY4ZGFcdTc4N2NcdTdlNDNcdTlkNmNc''@;'; put 'put ''dTRlMTVcdTUwOTlcdTUzMTVcdTUzMmFcdTUzNTFcdTU5ODNcdTVhNjJcdTVlODdcdTYwYjJcdTYxOGFcdTYyNDlcdTYyNzlcdTY1OTBcdTY3ODdcdTY5YTdcdTZiZDRcdTZiZDZcdTZiZDdcdTZiZDhcdTZjYjhcdWY5NjhcdTc0MzVcdTc1ZmFcdTc4MTJcdTc4OTFcdTc5ZDVcdTc5ZDhcdTdj''@;'; put 'put ''ODNcdTdkY2JcdTdmZTFcdTgwYTVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMjFdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIyMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMjFdW2ddXT01NjU3NitnLF9bNTY1NzYrZ109eVsyMjFdW2ddKTtmb3IoeVsyMjJdPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxM2VcdTgxYzJcdTgzZjJcdTg3MWFcdTg4ZThcdThhYjlc''@;'; put 'put ''dThiNmNcdThjYmJcdTkxMTlcdTk3NWVcdTk4ZGJcdTlmM2JcdTU2YWNcdTViMmFcdTVmNmNcdTY1OGNcdTZhYjNcdTZiYWZcdTZkNWNcdTZmZjFcdTcwMTVcdTcyNWRcdTczYWRcdThjYTdcdThjZDNcdTk4M2JcdTYxOTFcdTZjMzdcdTgwNThcdTlhMDFcdTRlNGRcdTRlOGJcdTRlOWJcdTRl''@;'; put 'put ''ZDVcdTRmM2FcdTRmM2NcdTRmN2ZcdTRmZGZcdTUwZmZcdTUzZjJcdTUzZjhcdTU1MDZcdTU1ZTNcdTU2ZGJcdTU4ZWJcdTU5NjJcdTVhMTFcdTViZWJcdTViZmFcdTVjMDRcdTVkZjNcdTVlMmJcdTVmOTlcdTYwMWRcdTYzNjhcdTY1OWNcdTY1YWZcdTY3ZjZcdTY3ZmJcdTY4YWRcdTZiN2Jc''@;'; put 'put ''dTZjOTlcdTZjZDdcdTZlMjNcdTcwMDlcdTczNDVcdTc4MDJcdTc5M2VcdTc5NDBcdTc5NjBcdTc5YzFcdTdiZTlcdTdkMTdcdTdkNzJcdTgwODZcdTgyMGRcdTgzOGVcdTg0ZDFcdTg2YzdcdTg4ZGZcdThhNTBcdThhNWVcdThiMWRcdThjZGNcdThkNjZcdThmYWRcdTkwYWFcdTk4ZmNcdTk5''@;'; put 'put ''ZGZcdTllOWRcdTUyNGFcdWY5NjlcdTY3MTRcdWY5NmFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMjJdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIyMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMjJdW2ddXT01NjgzMitnLF9bNTY4MzIrZ109eVsyMjJdW2ddKTtmb3IoeVsyMjNdPSJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUwOThcdTUyMmFcdTVjNzFcdTY1NjNc''@;'; put 'put ''dTZjNTVcdTczY2FcdTc1MjNcdTc1OWRcdTdiOTdcdTg0OWNcdTkxNzhcdTk3MzBcdTRlNzdcdTY0OTJcdTZiYmFcdTcxNWVcdTg1YTlcdTRlMDlcdWY5NmJcdTY3NDlcdTY4ZWVcdTZlMTdcdTgyOWZcdTg1MThcdTg4NmJcdTYzZjdcdTZmODFcdTkyMTJcdTk4YWZcdTRlMGFcdTUwYjdcdTUw''@;'; put 'put ''Y2ZcdTUxMWZcdTU1NDZcdTU1YWFcdTU2MTdcdTViNDBcdTVjMTlcdTVjZTBcdTVlMzhcdTVlOGFcdTVlYTBcdTVlYzJcdTYwZjNcdTY4NTFcdTZhNjFcdTZlNThcdTcyM2RcdTcyNDBcdTcyYzBcdTc2ZjhcdTc5NjVcdTdiYjFcdTdmZDRcdTg4ZjNcdTg5ZjRcdThhNzNcdThjNjFcdThjZGVc''@;'; put 'put ''dTk3MWNcdTU4NWVcdTc0YmRcdThjZmRcdTU1YzdcdWY5NmNcdTdhNjFcdTdkMjJcdTgyNzJcdTcyNzJcdTc1MWZcdTc1MjVcdWY5NmRcdTdiMTlcdTU4ODVcdTU4ZmJcdTVkYmNcdTVlOGZcdTVlYjZcdTVmOTBcdTYwNTVcdTYyOTJcdTYzN2ZcdTY1NGRcdTY2OTFcdTY2ZDlcdTY2ZjhcdTY4''@;'; put 'put ''MTZcdTY4ZjJcdTcyODBcdTc0NWVcdTdiNmVcdTdkNmVcdTdkZDZcdTdmNzJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMjNdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIyM11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMjNdW2ddXT01NzA4OCtnLF9bNTcwODgrZ109eVsyMjNdW2ddKTtm''@;'; put 'put ''b3IoeVsyMjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwZTVcdTgyMTJc''@;'; put 'put ''dTg1YWZcdTg5N2ZcdThhOTNcdTkwMWRcdTkyZTRcdTllY2RcdTlmMjBcdTU5MTVcdTU5NmRcdTVlMmRcdTYwZGNcdTY2MTRcdTY2NzNcdTY3OTBcdTZjNTBcdTZkYzVcdTZmNWZcdTc3ZjNcdTc4YTlcdTg0YzZcdTkxY2JcdTkzMmJcdTRlZDlcdTUwY2FcdTUxNDhcdTU1ODRcdTViMGJcdTVi''@;'; put 'put ''YTNcdTYyNDdcdTY1N2VcdTY1Y2JcdTZlMzJcdTcxN2RcdTc0MDFcdTc0NDRcdTc0ODdcdTc0YmZcdTc2NmNcdTc5YWFcdTdkZGFcdTdlNTVcdTdmYThcdTgxN2FcdTgxYjNcdTgyMzlcdTg2MWFcdTg3ZWNcdThhNzVcdThkZTNcdTkwNzhcdTkyOTFcdTk0MjVcdTk5NGRcdTliYWVcdTUzNjhc''@;'; put 'put ''dTVjNTFcdTY5NTRcdTZjYzRcdTZkMjlcdTZlMmJcdTgyMGNcdTg1OWJcdTg5M2JcdThhMmRcdThhYWFcdTk2ZWFcdTlmNjdcdTUyNjFcdTY2YjlcdTZiYjJcdTdlOTZcdTg3ZmVcdThkMGRcdTk1ODNcdTk2NWRcdTY1MWRcdTZkODlcdTcxZWVcdWY5NmVcdTU3Y2VcdTU5ZDNcdTViYWNcdTYw''@;'; put 'put ''MjdcdTYwZmFcdTYyMTBcdTY2MWZcdTY2NWZcdTczMjlcdTczZjlcdTc2ZGJcdTc3MDFcdTdiNmNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMjRdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIyNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMjRdW2ddXT01NzM0NCtnLF9bNTczNDQrZ109''@;'; put 'put ''eVsyMjRdW2ddKTtmb3IoeVsyMjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTgwNTZcdTgwNzJcdTgxNjVcdThhYTBcdTkxOTJcdTRlMTZcdTUyZTJcdTZiNzJcdTZkMTdcdTdhMDVcdTdiMzlcdTdkMzBcdWY5NmZcdThjYjBcdTUzZWNcdTU2MmZcdTU4NTFcdTViYjVcdTVjMGZcdTVjMTFcdTVkZTJcdTYyNDBcdTYzODNcdTY0MTRcdTY2MmRcdTY4YjNcdTZjYmNcdTZk''@;'; put 'put ''ODhcdTZlYWZcdTcwMWZcdTcwYTRcdTcxZDJcdTc1MjZcdTc1OGZcdTc1OGVcdTc2MTlcdTdiMTFcdTdiZTBcdTdjMmJcdTdkMjBcdTdkMzlcdTg1MmNcdTg1NmRcdTg2MDdcdThhMzRcdTkwMGRcdTkwNjFcdTkwYjVcdTkyYjdcdTk3ZjZcdTlhMzdcdTRmZDdcdTVjNmNcdTY3NWZcdTZkOTFc''@;'; put 'put ''dTdjOWZcdTdlOGNcdThiMTZcdThkMTZcdTkwMWZcdTViNmJcdTVkZmRcdTY0MGRcdTg0YzBcdTkwNWNcdTk4ZTFcdTczODdcdTViOGJcdTYwOWFcdTY3N2VcdTZkZGVcdThhMWZcdThhYTZcdTkwMDFcdTk4MGNcdTUyMzdcdWY5NzBcdTcwNTFcdTc4OGVcdTkzOTZcdTg4NzBcdTkxZDdcdTRm''@;'; put 'put ''ZWVcdTUzZDdcdTU1ZmRcdTU2ZGFcdTU3ODJcdTU4ZmRcdTVhYzJcdTViODhcdTVjYWJcdTVjYzBcdTVlMjVcdTYxMDFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMjVdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIyNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMjVdW2ddXT01NzYwMCtn''@;'; put 'put ''LF9bNTc2MDArZ109eVsyMjVdW2ddKTtmb3IoeVsyMjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTYyMGRcdTYyNGJcdTYzODhcdTY0MWNcdTY1MzZcdTY1NzhcdTZhMzlcdTZiOGFcdTZjMzRcdTZkMTlcdTZmMzFcdTcxZTdcdTcyZTlcdTczNzhcdTc0MDdcdTc0YjJcdTc2MjZcdTc3NjFcdTc5YzBcdTdhNTdcdTdhZWFcdTdjYjlcdTdkOGZcdTdkYWNcdTdlNjFcdTdm''@;'; put 'put ''OWVcdTgxMjlcdTgzMzFcdTg0OTBcdTg0ZGFcdTg1ZWFcdTg4OTZcdThhYjBcdThiOTBcdThmMzhcdTkwNDJcdTkwODNcdTkxNmNcdTkyOTZcdTkyYjlcdTk2OGJcdTk2YTdcdTk2YThcdTk2ZDZcdTk3MDBcdTk4MDhcdTk5OTZcdTlhZDNcdTliMWFcdTUzZDRcdTU4N2VcdTU5MTlcdTViNzBc''@;'; put 'put ''dTViYmZcdTZkZDFcdTZmNWFcdTcxOWZcdTc0MjFcdTc0YjlcdTgwODVcdTgzZmRcdTVkZTFcdTVmODdcdTVmYWFcdTYwNDJcdTY1ZWNcdTY4MTJcdTY5NmZcdTZhNTNcdTZiODlcdTZkMzVcdTZkZjNcdTczZTNcdTc2ZmVcdTc3YWNcdTdiNGRcdTdkMTRcdTgxMjNcdTgyMWNcdTgzNDBcdTg0''@;'; put 'put ''ZjRcdTg1NjNcdThhNjJcdThhYzRcdTkxODdcdTkzMWVcdTk4MDZcdTk5YjRcdTYyMGNcdTg4NTNcdThmZjBcdTkyNjVcdTVkMDdcdTVkMjdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMjZdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIyNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMjZd''@;'; put 'put ''W2ddXT01Nzg1NitnLF9bNTc4NTYrZ109eVsyMjZdW2ddKTtmb3IoeVsyMjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVkNjlcdTc0NWZcdTgxOWRcdTg3NjhcdTZmZDVcdTYyZmVcdTdmZDJcdTg5MzZcdTg5NzJcdTRlMWVcdTRlNThcdTUwZTdcdTUyZGRcdTUzNDdcdTYyN2ZcdTY2MDdcdTdlNjlcdTg4MDVcdTk2NWVcdTRmOGRcdTUzMTlcdTU2MzZcdTU5Y2JcdTVh''@;'; put 'put ''YTRcdTVjMzhcdTVjNGVcdTVjNGRcdTVlMDJcdTVmMTFcdTYwNDNcdTY1YmRcdTY2MmZcdTY2NDJcdTY3YmVcdTY3ZjRcdTczMWNcdTc3ZTJcdTc5M2FcdTdmYzVcdTg0OTRcdTg0Y2RcdTg5OTZcdThhNjZcdThhNjlcdThhZTFcdThjNTVcdThjN2FcdTU3ZjRcdTViZDRcdTVmMGZcdTYwNmZc''@;'; put 'put ''dTYyZWRcdTY5MGRcdTZiOTZcdTZlNWNcdTcxODRcdTdiZDJcdTg3NTVcdThiNThcdThlZmVcdTk4ZGZcdTk4ZmVcdTRmMzhcdTRmODFcdTRmZTFcdTU0N2JcdTVhMjBcdTViYjhcdTYxM2NcdTY1YjBcdTY2NjhcdTcxZmNcdTc1MzNcdTc5NWVcdTdkMzNcdTgxNGVcdTgxZTNcdTgzOThcdTg1''@;'; put 'put ''YWFcdTg1Y2VcdTg3MDNcdThhMGFcdThlYWJcdThmOWJcdWY5NzFcdThmYzVcdTU5MzFcdTViYTRcdTViZTZcdTYwODlcdTViZTlcdTVjMGJcdTVmYzNcdTZjODFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMjddLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIyN11bZ10uY2hhckNvZGVBdCgw''@;'; put 'put ''KSYmKElbeVsyMjddW2ddXT01ODExMitnLF9bNTgxMTIrZ109eVsyMjddW2ddKTtmb3IoeVsyMjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWY5NzJcdTZkZjFcdTcwMGJcdTc1MWFcdTgyYWZcdThhZjZcdTRlYzBcdTUzNDFcdWY5NzNcdTk2ZDlcdTZjMGZcdTRlOWVcdTRmYzRcdTUxNTJcdTU1NWVcdTVhMjVcdTVjZThcdTYyMTFcdTcyNTlcdTgyYmRcdTgzYWFcdTg2''@;'; put 'put ''ZmVcdTg4NTlcdThhMWRcdTk2M2ZcdTk2YzVcdTk5MTNcdTlkMDlcdTlkNWRcdTU4MGFcdTVjYjNcdTVkYmRcdTVlNDRcdTYwZTFcdTYxMTVcdTYzZTFcdTZhMDJcdTZlMjVcdTkxMDJcdTkzNTRcdTk4NGVcdTljMTBcdTlmNzdcdTViODlcdTVjYjhcdTYzMDlcdTY2NGZcdTY4NDhcdTc3M2Nc''@;'; put 'put ''dTk2YzFcdTk3OGRcdTk4NTRcdTliOWZcdTY1YTFcdThiMDFcdThlY2JcdTk1YmNcdTU1MzVcdTVjYTlcdTVkZDZcdTVlYjVcdTY2OTdcdTc2NGNcdTgzZjRcdTk1YzdcdTU4ZDNcdTYyYmNcdTcyY2VcdTlkMjhcdTRlZjBcdTU5MmVcdTYwMGZcdTY2M2JcdTZiODNcdTc5ZTdcdTlkMjZcdTUz''@;'; put 'put ''OTNcdTU0YzBcdTU3YzNcdTVkMTZcdTYxMWJcdTY2ZDZcdTZkYWZcdTc4OGRcdTgyN2VcdTk2OThcdTk3NDRcdTUzODRcdTYyN2NcdTYzOTZcdTZkYjJcdTdlMGFcdTgxNGJcdTk4NGRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMjhdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIyOF1bZ10u''@;'; put 'put ''Y2hhckNvZGVBdCgwKSYmKElbeVsyMjhdW2ddXT01ODM2OCtnLF9bNTgzNjgrZ109eVsyMjhdW2ddKTtmb3IoeVsyMjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZhZmJcdTdmNGNcdTlkYWZcdTllMWFcdTRlNWZcdTUwM2JcdTUxYjZcdTU5MWNcdTYwZjlcdTYzZjZcdTY5MzBcdTcyM2FcdTgwMzZcdWY5NzRcdTkxY2VcdTVmMzFcdWY5NzVcdWY5NzZcdTdkMDRcdTgy''@;'; put 'put ''ZTVcdTg0NmZcdTg0YmJcdTg1ZTVcdThlOGRcdWY5NzdcdTRmNmZcdWY5NzhcdWY5NzlcdTU4ZTRcdTViNDNcdTYwNTlcdTYzZGFcdTY1MThcdTY1NmRcdTY2OThcdWY5N2FcdTY5NGFcdTZhMjNcdTZkMGJcdTcwMDFcdTcxNmNcdTc1ZDJcdTc2MGRcdTc5YjNcdTdhNzBcdWY5N2JcdTdmOGFc''@;'; put 'put ''dWY5N2NcdTg5NDRcdWY5N2RcdThiOTNcdTkxYzBcdTk2N2RcdWY5N2VcdTk5MGFcdTU3MDRcdTVmYTFcdTY1YmNcdTZmMDFcdTc2MDBcdTc5YTZcdThhOWVcdTk5YWRcdTliNWFcdTlmNmNcdTUxMDRcdTYxYjZcdTYyOTFcdTZhOGRcdTgxYzZcdTUwNDNcdTU4MzBcdTVmNjZcdTcxMDlcdThh''@;'; put 'put ''MDBcdThhZmFcdTViN2NcdTg2MTZcdTRmZmFcdTUxM2NcdTU2YjRcdTU5NDRcdTYzYTlcdTZkZjlcdTVkYWFcdTY5NmRcdTUxODZcdTRlODhcdTRmNTlcdWY5N2ZcdWY5ODBcdWY5ODFcdTU5ODJcdWY5ODJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMjldLmxlbmd0aDsrK2cpNjU1MzMh''@;'; put 'put ''PT15WzIyOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMjldW2ddXT01ODYyNCtnLF9bNTg2MjQrZ109eVsyMjldW2ddKTtmb3IoeVsyMzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWY5ODNcdTZiNWZcdTZjNWRcdWY5ODRcdTc0YjVcdTc5MTZcdWY5ODVcdTgyMDdcdTgyNDVcdTgzMzlcdThmM2ZcdThmNWRcdWY5ODZcdTk5MThcdWY5ODdcdWY5ODhcdWY5ODlcdTRl''@;'; put 'put ''YTZcdWY5OGFcdTU3ZGZcdTVmNzlcdTY2MTNcdWY5OGJcdWY5OGNcdTc1YWJcdTdlNzlcdThiNmZcdWY5OGRcdTkwMDZcdTlhNWJcdTU2YTVcdTU4MjdcdTU5ZjhcdTVhMWZcdTViYjRcdWY5OGVcdTVlZjZcdWY5OGZcdWY5OTBcdTYzNTBcdTYzM2JcdWY5OTFcdTY5M2RcdTZjODdcdTZjYmZc''@;'; put 'put ''dTZkOGVcdTZkOTNcdTZkZjVcdTZmMTRcdWY5OTJcdTcwZGZcdTcxMzZcdTcxNTlcdWY5OTNcdTcxYzNcdTcxZDVcdWY5OTRcdTc4NGZcdTc4NmZcdWY5OTVcdTdiNzVcdTdkZTNcdWY5OTZcdTdlMmZcdWY5OTdcdTg4NGRcdThlZGZcdWY5OThcdWY5OTlcdWY5OWFcdTkyNWJcdWY5OWJcdTlj''@;'; put 'put ''ZjZcdWY5OWNcdWY5OWRcdWY5OWVcdTYwODVcdTZkODVcdWY5OWZcdTcxYjFcdWY5YTBcdWY5YTFcdTk1YjFcdTUzYWRcdWY5YTJcdWY5YTNcdWY5YTRcdTY3ZDNcdWY5YTVcdTcwOGVcdTcxMzBcdTc0MzBcdTgyNzZcdTgyZDJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMzBdLmxlbmd0''@;'; put 'put ''aDsrK2cpNjU1MzMhPT15WzIzMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMzBdW2ddXT01ODg4MCtnLF9bNTg4ODArZ109eVsyMzBdW2ddKTtmb3IoeVsyMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWY5YTZcdTk1YmJcdTlhZTVcdTllN2RcdTY2YzRcdWY5YTdcdTcxYzFcdTg0NDlcdWY5YThcdWY5YTlcdTU4NGJcdWY5YWFcdWY5YWJcdTVkYjhcdTVmNzFcdWY5''@;'; put 'put ''YWNcdTY2MjBcdTY2OGVcdTY5NzlcdTY5YWVcdTZjMzhcdTZjZjNcdTZlMzZcdTZmNDFcdTZmZGFcdTcwMWJcdTcwMmZcdTcxNTBcdTcxZGZcdTczNzBcdWY5YWRcdTc0NWJcdWY5YWVcdTc0ZDRcdTc2YzhcdTdhNGVcdTdlOTNcdWY5YWZcdWY5YjBcdTgyZjFcdThhNjBcdThmY2VcdWY5YjFc''@;'; put 'put ''dTkzNDhcdWY5YjJcdTk3MTlcdWY5YjNcdWY5YjRcdTRlNDJcdTUwMmFcdWY5YjVcdTUyMDhcdTUzZTFcdTY2ZjNcdTZjNmRcdTZmY2FcdTczMGFcdTc3N2ZcdTdhNjJcdTgyYWVcdTg1ZGRcdTg2MDJcdWY5YjZcdTg4ZDRcdThhNjNcdThiN2RcdThjNmJcdWY5YjdcdTkyYjNcdWY5YjhcdTk3''@;'; put 'put ''MTNcdTk4MTBcdTRlOTRcdTRmMGRcdTRmYzlcdTUwYjJcdTUzNDhcdTU0M2VcdTU0MzNcdTU1ZGFcdTU4NjJcdTU4YmFcdTU5NjdcdTVhMWJcdTViZTRcdTYwOWZcdWY5YjlcdTYxY2FcdTY1NTZcdTY1ZmZcdTY2NjRcdTY4YTdcdTZjNWFcdTZmYjNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9''@;'; put 'put ''eVsyMzFdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIzMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMzFdW2ddXT01OTEzNitnLF9bNTkxMzYrZ109eVsyMzFdW2ddKTtmb3IoeVsyMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcwY2ZcdTcxYWNcdTczNTJcdTdiN2RcdTg3MDhcdThhYTRcdTljMzJcdTlmMDdcdTVjNGJcdTZjODNcdTczNDRcdTczODlcdTkyM2FcdTZl''@;'; put 'put ''YWJcdTc0NjVcdTc2MWZcdTdhNjlcdTdlMTVcdTg2MGFcdTUxNDBcdTU4YzVcdTY0YzFcdTc0ZWVcdTc1MTVcdTc2NzBcdTdmYzFcdTkwOTVcdTk2Y2RcdTk5NTRcdTZlMjZcdTc0ZTZcdTdhYTlcdTdhYWFcdTgxZTVcdTg2ZDlcdTg3NzhcdThhMWJcdTVhNDlcdTViOGNcdTViOWJcdTY4YTFc''@;'; put 'put ''dTY5MDBcdTZkNjNcdTczYTlcdTc0MTNcdTc0MmNcdTc4OTdcdTdkZTlcdTdmZWJcdTgxMThcdTgxNTVcdTgzOWVcdThjNGNcdTk2MmVcdTk4MTFcdTY2ZjBcdTVmODBcdTY1ZmFcdTY3ODlcdTZjNmFcdTczOGJcdTUwMmRcdTVhMDNcdTZiNmFcdTc3ZWVcdTU5MTZcdTVkNmNcdTVkY2RcdTcz''@;'; put 'put ''MjVcdTc1NGZcdWY5YmFcdWY5YmJcdTUwZTVcdTUxZjlcdTU4MmZcdTU5MmRcdTU5OTZcdTU5ZGFcdTViZTVcdWY5YmNcdWY5YmRcdTVkYTJcdTYyZDdcdTY0MTZcdTY0OTNcdTY0ZmVcdWY5YmVcdTY2ZGNcdWY5YmZcdTZhNDhcdWY5YzBcdTcxZmZcdTc0NjRcdWY5YzFcdWZmZmQiLnNwbGl0''@;'; put 'put ''KCIiKSxnPTA7ZyE9eVsyMzJdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIzMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMzJdW2ddXT01OTM5MitnLF9bNTkzOTIrZ109eVsyMzJdW2ddKTtmb3IoeVsyMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhODhcdTdhYWZcdTdlNDdcdTdlNWVcdTgwMDBcdTgxNzBcdWY5YzJcdTg3ZWZcdTg5ODFcdThiMjBcdTkwNTlcdWY5''@;'; put 'put ''YzNcdTkwODBcdTk5NTJcdTYxN2VcdTZiMzJcdTZkNzRcdTdlMWZcdTg5MjVcdThmYjFcdTRmZDFcdTUwYWRcdTUxOTdcdTUyYzdcdTU3YzdcdTU4ODlcdTViYjlcdTVlYjhcdTYxNDJcdTY5OTVcdTZkOGNcdTZlNjdcdTZlYjZcdTcxOTRcdTc0NjJcdTc1MjhcdTc1MmNcdTgwNzNcdTgzMzhc''@;'; put 'put ''dTg0YzlcdThlMGFcdTkzOTRcdTkzZGVcdWY5YzRcdTRlOGVcdTRmNTFcdTUwNzZcdTUxMmFcdTUzYzhcdTUzY2JcdTUzZjNcdTViODdcdTViZDNcdTVjMjRcdTYxMWFcdTYxODJcdTY1ZjRcdTcyNWJcdTczOTdcdTc0NDBcdTc2YzJcdTc5NTBcdTc5OTFcdTc5YjlcdTdkMDZcdTdmYmRcdTgy''@;'; put 'put ''OGJcdTg1ZDVcdTg2NWVcdThmYzJcdTkwNDdcdTkwZjVcdTkxZWFcdTk2ODVcdTk2ZThcdTk2ZTlcdTUyZDZcdTVmNjdcdTY1ZWRcdTY2MzFcdTY4MmZcdTcxNWNcdTdhMzZcdTkwYzFcdTk4MGFcdTRlOTFcdWY5YzVcdTZhNTJcdTZiOWVcdTZmOTBcdTcxODlcdTgwMThcdTgyYjhcdTg1NTNc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMzNdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIzM11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMzNdW2ddXT01OTY0OCtnLF9bNTk2NDgrZ109eVsyMzNdW2ddKTtmb3IoeVsyMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwNGJcdTk2OTVcdTk2ZjJcdTk3ZmJcdTg1MWFcdTliMzFcdTRlOTBcdTcxOGFcdTk2YzRcdTUx''@;'; put 'put ''NDNcdTUzOWZcdTU0ZTFcdTU3MTNcdTU3MTJcdTU3YTNcdTVhOWJcdTVhYzRcdTViYzNcdTYwMjhcdTYxM2ZcdTYzZjRcdTZjODVcdTZkMzlcdTZlNzJcdTZlOTBcdTcyMzBcdTczM2ZcdTc0NTdcdTgyZDFcdTg4ODFcdThmNDVcdTkwNjBcdWY5YzZcdTk2NjJcdTk4NThcdTlkMWJcdTY3MDhc''@;'; put 'put ''dThkOGFcdTkyNWVcdTRmNGRcdTUwNDlcdTUwZGVcdTUzNzFcdTU3MGRcdTU5ZDRcdTVhMDFcdTVjMDlcdTYxNzBcdTY2OTBcdTZlMmRcdTcyMzJcdTc0NGJcdTdkZWZcdTgwYzNcdTg0MGVcdTg0NjZcdTg1M2ZcdTg3NWZcdTg4NWJcdTg5MThcdThiMDJcdTkwNTVcdTk3Y2JcdTliNGZcdTRl''@;'; put 'put ''NzNcdTRmOTFcdTUxMTJcdTUxNmFcdWY5YzdcdTU1MmZcdTU1YTlcdTViN2FcdTViYTVcdTVlN2NcdTVlN2RcdTVlYmVcdTYwYTBcdTYwZGZcdTYxMDhcdTYxMDlcdTYzYzRcdTY1MzhcdTY3MDlcdWY5YzhcdTY3ZDRcdTY3ZGFcdWY5YzlcdTY5NjFcdTY5NjJcdTZjYjlcdTZkMjdcdWY5Y2Fc''@;'; put 'put ''dTZlMzhcdWY5Y2JcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMzRdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIzNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMzRdW2ddXT01OTkwNCtnLF9bNTk5MDQrZ109eVsyMzRdW2ddKTtmb3IoeVsyMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmZTFcdTczMzZcdTczMzdcdWY5Y2NcdTc0NWNcdTc1MzFcdWY5Y2RcdTc2''@;'; put 'put ''NTJcdWY5Y2VcdWY5Y2ZcdTdkYWRcdTgxZmVcdTg0MzhcdTg4ZDVcdThhOThcdThhZGJcdThhZWRcdThlMzBcdThlNDJcdTkwNGFcdTkwM2VcdTkwN2FcdTkxNDlcdTkxYzlcdTkzNmVcdWY5ZDBcdWY5ZDFcdTU4MDlcdWY5ZDJcdTZiZDNcdTgwODlcdTgwYjJcdWY5ZDNcdWY5ZDRcdTUxNDFc''@;'; put 'put ''dTU5NmJcdTVjMzlcdWY5ZDVcdWY5ZDZcdTZmNjRcdTczYTdcdTgwZTRcdThkMDdcdWY5ZDdcdTkyMTdcdTk1OGZcdWY5ZDhcdWY5ZDlcdWY5ZGFcdWY5ZGJcdTgwN2ZcdTYyMGVcdTcwMWNcdTdkNjhcdTg3OGRcdWY5ZGNcdTU3YTBcdTYwNjlcdTYxNDdcdTZiYjdcdThhYmVcdTkyODBcdTk2''@;'; put 'put ''YjFcdTRlNTlcdTU0MWZcdTZkZWJcdTg1MmRcdTk2NzBcdTk3ZjNcdTk4ZWVcdTYzZDZcdTZjZTNcdTkwOTFcdTUxZGRcdTYxYzlcdTgxYmFcdTlkZjlcdTRmOWRcdTUwMWFcdTUxMDBcdTViOWNcdTYxMGZcdTYxZmZcdTY0ZWNcdTY5MDVcdTZiYzVcdTc1OTFcdTc3ZTNcdTdmYTlcdTgyNjRc''@;'; put 'put ''dTg1OGZcdTg3ZmJcdTg4NjNcdThhYmNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMzVdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIzNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMzVdW2ddXT02MDE2MCtnLF9bNjAxNjArZ109eVsyMzVdW2ddKTtmb3IoeVsyMzZdPSJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiNzBcdTkxYWJcdTRlOGNcdTRlZTVcdTRmMGFcdWY5''@;'; put 'put ''ZGRcdWY5ZGVcdTU5MzdcdTU5ZThcdWY5ZGZcdTVkZjJcdTVmMWJcdTVmNWJcdTYwMjFcdWY5ZTBcdWY5ZTFcdWY5ZTJcdWY5ZTNcdTcyM2VcdTczZTVcdWY5ZTRcdTc1NzBcdTc1Y2RcdWY5ZTVcdTc5ZmJcdWY5ZTZcdTgwMGNcdTgwMzNcdTgwODRcdTgyZTFcdTgzNTFcdWY5ZTdcdWY5ZThc''@;'; put 'put ''dThjYmRcdThjYjNcdTkwODdcdWY5ZTlcdWY5ZWFcdTk4ZjRcdTk5MGNcdWY5ZWJcdWY5ZWNcdTcwMzdcdTc2Y2FcdTdmY2FcdTdmY2NcdTdmZmNcdThiMWFcdTRlYmFcdTRlYzFcdTUyMDNcdTUzNzBcdWY5ZWRcdTU0YmRcdTU2ZTBcdTU5ZmJcdTViYzVcdTVmMTVcdTVmY2RcdTZlNmVcdWY5''@;'; put 'put ''ZWVcdWY5ZWZcdTdkNmFcdTgzMzVcdWY5ZjBcdTg2OTNcdThhOGRcdWY5ZjFcdTk3NmRcdTk3NzdcdWY5ZjJcdWY5ZjNcdTRlMDBcdTRmNWFcdTRmN2VcdTU4ZjlcdTY1ZTVcdTZlYTJcdTkwMzhcdTkzYjBcdTk5YjlcdTRlZmJcdTU4ZWNcdTU5OGFcdTU5ZDlcdTYwNDFcdWY5ZjRcdWY5ZjVc''@;'; put 'put ''dTdhMTRcdWY5ZjZcdTgzNGZcdThjYzNcdTUxNjVcdTUzNDRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMzZdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIzNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMzZdW2ddXT02MDQxNitnLF9bNjA0MTYrZ109eVsyMzZdW2ddKTtmb3IoeVsyMzdd''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWY5ZjdcdWY5ZjhcdWY5ZjlcdTRl''@;'; put 'put ''Y2RcdTUyNjlcdTViNTVcdTgyYmZcdTRlZDRcdTUyM2FcdTU0YThcdTU5YzlcdTU5ZmZcdTViNTBcdTViNTdcdTViNWNcdTYwNjNcdTYxNDhcdTZlY2JcdTcwOTlcdTcxNmVcdTczODZcdTc0ZjdcdTc1YjVcdTc4YzFcdTdkMmJcdTgwMDVcdTgxZWFcdTgzMjhcdTg1MTdcdTg1YzlcdThhZWVc''@;'; put 'put ''dThjYzdcdTk2Y2NcdTRmNWNcdTUyZmFcdTU2YmNcdTY1YWJcdTY2MjhcdTcwN2NcdTcwYjhcdTcyMzVcdTdkYmRcdTgyOGRcdTkxNGNcdTk2YzBcdTlkNzJcdTViNzFcdTY4ZTdcdTZiOThcdTZmN2FcdTc2ZGVcdTVjOTFcdTY2YWJcdTZmNWJcdTdiYjRcdTdjMmFcdTg4MzZcdTk2ZGNcdTRl''@;'; put 'put ''MDhcdTRlZDdcdTUzMjBcdTU4MzRcdTU4YmJcdTU4ZWZcdTU5NmNcdTVjMDdcdTVlMzNcdTVlODRcdTVmMzVcdTYzOGNcdTY2YjJcdTY3NTZcdTZhMWZcdTZhYTNcdTZiMGNcdTZmM2ZcdTcyNDZcdWY5ZmFcdTczNTBcdTc0OGJcdTdhZTBcdTdjYTdcdTgxNzhcdTgxZGZcdTgxZTdcdTgzOGFc''@;'; put 'put ''dTg0NmNcdTg1MjNcdTg1OTRcdTg1Y2ZcdTg4ZGRcdThkMTNcdTkxYWNcdTk1NzdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMzddLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIzN11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMzddW2ddXT02MDY3MitnLF9bNjA2NzIrZ109eVsyMzddW2dd''@;'; put 'put ''KTtmb3IoeVsyMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2OWNcdTUx''@;'; put 'put ''OGRcdTU0YzlcdTU3MjhcdTViYjBcdTYyNGRcdTY3NTBcdTY4M2RcdTY4OTNcdTZlM2RcdTZlZDNcdTcwN2RcdTdlMjFcdTg4YzFcdThjYTFcdThmMDlcdTlmNGJcdTlmNGVcdTcyMmRcdTdiOGZcdThhY2RcdTkzMWFcdTRmNDdcdTRmNGVcdTUxMzJcdTU0ODBcdTU5ZDBcdTVlOTVcdTYyYjVc''@;'; put 'put ''dTY3NzVcdTY5NmVcdTZhMTdcdTZjYWVcdTZlMWFcdTcyZDlcdTczMmFcdTc1YmRcdTdiYjhcdTdkMzVcdTgyZTdcdTgzZjlcdTg0NTdcdTg1ZjdcdThhNWJcdThjYWZcdThlODdcdTkwMTlcdTkwYjhcdTk2Y2VcdTlmNWZcdTUyZTNcdTU0MGFcdTVhZTFcdTViYzJcdTY0NThcdTY1NzVcdTZl''@;'; put 'put ''ZjRcdTcyYzRcdWY5ZmJcdTc2ODRcdTdhNGRcdTdiMWJcdTdjNGRcdTdlM2VcdTdmZGZcdTgzN2JcdThiMmJcdThjY2FcdThkNjRcdThkZTFcdThlNWZcdThmZWFcdThmZjlcdTkwNjlcdTkzZDFcdTRmNDNcdTRmN2FcdTUwYjNcdTUxNjhcdTUxNzhcdTUyNGRcdTUyNmFcdTU4NjFcdTU4N2Nc''@;'; put 'put ''dTU5NjBcdTVjMDhcdTVjNTVcdTVlZGJcdTYwOWJcdTYyMzBcdTY4MTNcdTZiYmZcdTZjMDhcdTZmYjFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMzhdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIzOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMzhdW2ddXT02MDkyOCtnLF9bNjA5Mjgr''@;'; put 'put ''Z109eVsyMzhdW2ddKTtmb3IoeVsyMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTcxNGVcdTc0MjBcdTc1MzBcdTc1MzhcdTc1NTFcdTc2NzJcdTdiNGNcdTdiOGJcdTdiYWRcdTdiYzZcdTdlOGZcdThhNmVcdThmM2VcdThmNDlcdTkyM2ZcdTkyOTNcdTkzMjJcdTk0MmJcdTk2ZmJcdTk4NWFcdTk4NmJcdTk5MWVcdTUyMDdcdTYyMmFcdTYyOThcdTZkNTlcdTc2NjRc''@;'; put 'put ''dTdhY2FcdTdiYzBcdTdkNzZcdTUzNjBcdTVjYmVcdTVlOTdcdTZmMzhcdTcwYjlcdTdjOThcdTk3MTFcdTliOGVcdTllZGVcdTYzYTVcdTY0N2FcdTg3NzZcdTRlMDFcdTRlOTVcdTRlYWRcdTUwNWNcdTUwNzVcdTU0NDhcdTU5YzNcdTViOWFcdTVlNDBcdTVlYWRcdTVlZjdcdTVmODFcdTYw''@;'; put 'put ''YzVcdTYzM2FcdTY1M2ZcdTY1NzRcdTY1Y2NcdTY2NzZcdTY2NzhcdTY3ZmVcdTY5NjhcdTZhODlcdTZiNjNcdTZjNDBcdTZkYzBcdTZkZThcdTZlMWZcdTZlNWVcdTcwMWVcdTcwYTFcdTczOGVcdTczZmRcdTc1M2FcdTc3NWJcdTc4ODdcdTc5OGVcdTdhMGJcdTdhN2RcdTdjYmVcdTdkOGVc''@;'; put 'put ''dTgyNDdcdThhMDJcdThhZWFcdThjOWVcdTkxMmRcdTkxNGFcdTkxZDhcdTkyNjZcdTkyY2NcdTkzMjBcdTk3MDZcdTk3NTZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMzldLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIzOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMzldW2ddXT02MTE4''@;'; put 'put ''NCtnLF9bNjExODQrZ109eVsyMzldW2ddKTtmb3IoeVsyNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdTk3NWNcdTk4MDJcdTlmMGVcdTUyMzZcdTUyOTFcdTU1N2NcdTU4MjRcdTVlMWRcdTVmMWZcdTYwOGNcdTYzZDBcdTY4YWZcdTZmZGZcdTc5NmRcdTdiMmNcdTgxY2RcdTg1YmFcdTg4ZmRcdThhZjhcdThlNDRcdTkxOGRcdTk2NjRcdTk2OWJcdTk3M2RcdTk4NGNc''@;'; put 'put ''dTlmNGFcdTRmY2VcdTUxNDZcdTUxY2JcdTUyYTlcdTU2MzJcdTVmMTRcdTVmNmJcdTYzYWFcdTY0Y2RcdTY1ZTlcdTY2NDFcdTY2ZmFcdTY2ZjlcdTY3MWRcdTY4OWRcdTY4ZDdcdTY5ZmRcdTZmMTVcdTZmNmVcdTcxNjdcdTcxZTVcdTcyMmFcdTc0YWFcdTc3M2FcdTc5NTZcdTc5NWFcdTc5''@;'; put 'put ''ZGZcdTdhMjBcdTdhOTVcdTdjOTdcdTdjZGZcdTdkNDRcdTdlNzBcdTgwODdcdTg1ZmJcdTg2YTRcdThhNTRcdThhYmZcdThkOTlcdThlODFcdTkwMjBcdTkwNmRcdTkxZTNcdTk2M2JcdTk2ZDVcdTljZTVcdTY1Y2ZcdTdjMDdcdThkYjNcdTkzYzNcdTViNThcdTVjMGFcdTUzNTJcdTYyZDlc''@;'; put 'put ''dTczMWRcdTUwMjdcdTViOTdcdTVmOWVcdTYwYjBcdTYxNmJcdTY4ZDVcdTZkZDlcdTc0MmVcdTdhMmVcdTdkNDJcdTdkOWNcdTdlMzFcdTgxNmJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyNDBdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzI0MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsy''@;'; put 'put ''NDBdW2ddXT02MTQ0MCtnLF9bNjE0NDArZ109eVsyNDBdW2ddKTtmb3IoeVsyNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlMmFcdThlMzVcdTkzN2VcdTk0MThcdTRmNTBcdTU3NTBcdTVkZTZcdTVlYTdcdTYzMmJcdTdmNmFcdTRlM2JcdTRmNGZcdTRmOGZcdTUwNWFcdTU5ZGRcdTgwYzRcdTU0NmFcdTU0NjhcdTU1ZmVcdTU5NGZcdTViOTlcdTVkZGVcdTVlZGFc''@;'; put 'put ''dTY2NWRcdTY3MzFcdTY3ZjFcdTY4MmFcdTZjZThcdTZkMzJcdTZlNGFcdTZmOGRcdTcwYjdcdTczZTBcdTc1ODdcdTdjNGNcdTdkMDJcdTdkMmNcdTdkYTJcdTgyMWZcdTg2ZGJcdThhM2JcdThhODVcdThkNzBcdThlOGFcdThmMzNcdTkwMzFcdTkxNGVcdTkxNTJcdTk0NDRcdTk5ZDBcdTdh''@;'; put 'put ''ZjlcdTdjYTVcdTRmY2FcdTUxMDFcdTUxYzZcdTU3YzhcdTViZWZcdTVjZmJcdTY2NTlcdTZhM2RcdTZkNWFcdTZlOTZcdTZmZWNcdTcxMGNcdTc1NmZcdTdhZTNcdTg4MjJcdTkwMjFcdTkwNzVcdTk2Y2JcdTk5ZmZcdTgzMDFcdTRlMmRcdTRlZjJcdTg4NDZcdTkxY2RcdTUzN2RcdTZhZGJc''@;'; put 'put ''dTY5NmJcdTZjNDFcdTg0N2FcdTU4OWVcdTYxOGVcdTY2ZmVcdTYyZWZcdTcwZGRcdTc1MTFcdTc1YzdcdTdlNTJcdTg0YjhcdThiNDlcdThkMDhcdTRlNGJcdTUzZWFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyNDFdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzI0MV1bZ10uY2hhckNvZGVB''@;'; put 'put ''dCgwKSYmKElbeVsyNDFdW2ddXT02MTY5NitnLF9bNjE2OTYrZ109eVsyNDFdW2ddKTtmb3IoeVsyNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YWJcdTU3MzBcdTU3NDBcdTVmZDdcdTYzMDFcdTYzMDdcdTY0NmZcdTY1MmZcdTY1ZThcdTY2N2FcdTY3OWRcdTY3YjNcdTZiNjJcdTZjNjBcdTZjOWFcdTZmMmNcdTc3ZTVcdTc4MjVcdTc5NDlcdTc5NTdcdTdkMTlc''@;'; put 'put ''dTgwYTJcdTgxMDJcdTgxZjNcdTgyOWRcdTgyYjdcdTg3MThcdThhOGNcdWY5ZmNcdThkMDRcdThkYmVcdTkwNzJcdTc2ZjRcdTdhMTlcdTdhMzdcdTdlNTRcdTgwNzdcdTU1MDdcdTU1ZDRcdTU4NzVcdTYzMmZcdTY0MjJcdTY2NDlcdTY2NGJcdTY4NmRcdTY5OWJcdTZiODRcdTZkMjVcdTZl''@;'; put 'put ''YjFcdTczY2RcdTc0NjhcdTc0YTFcdTc1NWJcdTc1YjlcdTc2ZTFcdTc3MWVcdTc3OGJcdTc5ZTZcdTdlMDlcdTdlMWRcdTgxZmJcdTg1MmZcdTg4OTdcdThhM2FcdThjZDFcdThlZWJcdThmYjBcdTkwMzJcdTkzYWRcdTk2NjNcdTk2NzNcdTk3MDdcdTRmODRcdTUzZjFcdTU5ZWFcdTVhYzlc''@;'; put 'put ''dTVlMTlcdTY4NGVcdTc0YzZcdTc1YmVcdTc5ZTlcdTdhOTJcdTgxYTNcdTg2ZWRcdThjZWFcdThkY2NcdThmZWRcdTY1OWZcdTY3MTVcdWY5ZmRcdTU3ZjdcdTZmNTdcdTdkZGRcdThmMmZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyNDJdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzI0Ml1b''@;'; put 'put ''Z10uY2hhckNvZGVBdCgwKSYmKElbeVsyNDJdW2ddXT02MTk1MitnLF9bNjE5NTIrZ109eVsyNDJdW2ddKTtmb3IoeVsyNDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzZjZcdTk2YzZcdTVmYjVcdTYxZjJcdTZmODRcdTRlMTRcdTRmOThcdTUwMWZcdTUzYzlcdTU1ZGZcdTVkNmZcdTVkZWVcdTZiMjFcdTZiNjRcdTc4Y2JcdTdiOWFcdWY5ZmVcdThlNDlcdThlY2Fc''@;'; put 'put ''dTkwNmVcdTYzNDlcdTY0M2VcdTc3NDBcdTdhODRcdTkzMmZcdTk0N2ZcdTlmNmFcdTY0YjBcdTZmYWZcdTcxZTZcdTc0YThcdTc0ZGFcdTdhYzRcdTdjMTJcdTdlODJcdTdjYjJcdTdlOThcdThiOWFcdThkMGFcdTk0N2RcdTk5MTBcdTk5NGNcdTUyMzlcdTViZGZcdTY0ZTZcdTY3MmRcdTdk''@;'; put 'put ''MmVcdTUwZWRcdTUzYzNcdTU4NzlcdTYxNThcdTYxNTlcdTYxZmFcdTY1YWNcdTdhZDlcdThiOTJcdThiOTZcdTUwMDlcdTUwMjFcdTUyNzVcdTU1MzFcdTVhM2NcdTVlZTBcdTVmNzBcdTYxMzRcdTY1NWVcdTY2MGNcdTY2MzZcdTY2YTJcdTY5Y2RcdTZlYzRcdTZmMzJcdTczMTZcdTc2MjFc''@;'; put 'put ''dTdhOTNcdTgxMzlcdTgyNTlcdTgzZDZcdTg0YmNcdTUwYjVcdTU3ZjBcdTViYzBcdTViZThcdTVmNjlcdTYzYTFcdTc4MjZcdTdkYjVcdTgzZGNcdTg1MjFcdTkxYzdcdTkxZjVcdTUxOGFcdTY3ZjVcdTdiNTZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyNDNdLmxlbmd0aDsrK2cpNjU1''@;'; put 'put ''MzMhPT15WzI0M11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyNDNdW2ddXT02MjIwOCtnLF9bNjIyMDgrZ109eVsyNDNdW2ddKTtmb3IoeVsyNDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThjYWNcdTUxYzRcdTU5YmJcdTYwYmRcdTg2NTVcdTUwMWNcdWY5ZmZcdTUyNTRcdTVjM2FcdTYxN2RcdTYyMWFcdTYyZDNcdTY0ZjJcdTY1YTVcdTZlY2NcdTc2MjBcdTgxMGFc''@;'; put 'put ''dThlNjBcdTk2NWZcdTk2YmJcdTRlZGZcdTUzNDNcdTU1OThcdTU5MjlcdTVkZGRcdTY0YzVcdTZjYzlcdTZkZmFcdTczOTRcdTdhN2ZcdTgyMWJcdTg1YTZcdThjZTRcdThlMTBcdTkwNzdcdTkxZTdcdTk1ZTFcdTk2MjFcdTk3YzZcdTUxZjhcdTU0ZjJcdTU1ODZcdTVmYjlcdTY0YTRcdTZm''@;'; put 'put ''ODhcdTdkYjRcdThmMWZcdThmNGRcdTk0MzVcdTUwYzlcdTVjMTZcdTZjYmVcdTZkZmJcdTc1MWJcdTc3YmJcdTdjM2RcdTdjNjRcdThhNzlcdThhYzJcdTU4MWVcdTU5YmVcdTVlMTZcdTYzNzdcdTcyNTJcdTc1OGFcdTc3NmJcdThhZGNcdThjYmNcdThmMTJcdTVlZjNcdTY2NzRcdTZkZjhc''@;'; put 'put ''dTgwN2RcdTgzYzFcdThhY2JcdTk3NTFcdTliZDZcdWZhMDBcdTUyNDNcdTY2ZmZcdTZkOTVcdTZlZWZcdTdkZTBcdThhZTZcdTkwMmVcdTkwNWVcdTlhZDRcdTUyMWRcdTUyN2ZcdTU0ZThcdTYxOTRcdTYyODRcdTYyZGJcdTY4YTJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyNDRdLmxl''@;'; put 'put ''bmd0aDsrK2cpNjU1MzMhPT15WzI0NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyNDRdW2ddXT02MjQ2NCtnLF9bNjI0NjQrZ109eVsyNDRdW2ddKTtmb3IoeVsyNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY5MTJcdTY5NWFcdTZhMzVcdTcwOTJcdTcxMjZcdTc4NWRcdTc5MDFcdTc5MGVcdTc5ZDJcdTdhMGRcdTgwOTZcdTgyNzhcdTgyZDVcdTgzNDlcdTg1NDlc''@;'; put 'put ''dThjODJcdThkODVcdTkxNjJcdTkxOGJcdTkxYWVcdTRmYzNcdTU2ZDFcdTcxZWRcdTc3ZDdcdTg3MDBcdTg5ZjhcdTViZjhcdTVmZDZcdTY3NTFcdTkwYThcdTUzZTJcdTU4NWFcdTViZjVcdTYwYTRcdTYxODFcdTY0NjBcdTdlM2RcdTgwNzBcdTg1MjVcdTkyODNcdTY0YWVcdTUwYWNcdTVk''@;'; put 'put ''MTRcdTY3MDBcdTU4OWNcdTYyYmRcdTYzYThcdTY5MGVcdTY5NzhcdTZhMWVcdTZlNmJcdTc2YmFcdTc5Y2JcdTgyYmJcdTg0MjlcdThhY2ZcdThkYThcdThmZmRcdTkxMTJcdTkxNGJcdTkxOWNcdTkzMTBcdTkzMThcdTkzOWFcdTk2ZGJcdTlhMzZcdTljMGRcdTRlMTFcdTc1NWNcdTc5NWRc''@;'; put 'put ''dTdhZmFcdTdiNTFcdTdiYzlcdTdlMmVcdTg0YzRcdThlNTlcdThlNzRcdThlZjhcdTkwMTBcdTY2MjVcdTY5M2ZcdTc0NDNcdTUxZmFcdTY3MmVcdTllZGNcdTUxNDVcdTVmZTBcdTZjOTZcdTg3ZjJcdTg4NWRcdTg4NzdcdTYwYjRcdTgxYjVcdTg0MDNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7''@;'; put 'put ''ZyE9eVsyNDVdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzI0NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyNDVdW2ddXT02MjcyMCtnLF9bNjI3MjArZ109eVsyNDVdW2ddKTtmb3IoeVsyNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThkMDVcdTUzZDZcdTU0MzlcdTU2MzRcdTVhMzZcdTVjMzFcdTcwOGFcdTdmZTBcdTgwNWFcdTgxMDZcdTgxZWRcdThkYTNcdTkxODlc''@;'; put 'put ''dTlhNWZcdTlkZjJcdTUwNzRcdTRlYzRcdTUzYTBcdTYwZmJcdTZlMmNcdTVjNjRcdTRmODhcdTUwMjRcdTU1ZTRcdTVjZDlcdTVlNWZcdTYwNjVcdTY4OTRcdTZjYmJcdTZkYzRcdTcxYmVcdTc1ZDRcdTc1ZjRcdTc2NjFcdTdhMWFcdTdhNDlcdTdkYzdcdTdkZmJcdTdmNmVcdTgxZjRcdTg2''@;'; put 'put ''YTlcdThmMWNcdTk2YzlcdTk5YjNcdTlmNTJcdTUyNDdcdTUyYzVcdTk4ZWRcdTg5YWFcdTRlMDNcdTY3ZDJcdTZmMDZcdTRmYjVcdTViZTJcdTY3OTVcdTZjODhcdTZkNzhcdTc0MWJcdTc4MjdcdTkxZGRcdTkzN2NcdTg3YzRcdTc5ZTRcdTdhMzFcdTVmZWJcdTRlZDZcdTU0YTRcdTU1M2Vc''@;'; put 'put ''dTU4YWVcdTU5YTVcdTYwZjBcdTYyNTNcdTYyZDZcdTY3MzZcdTY5NTVcdTgyMzVcdTk2NDBcdTk5YjFcdTk5ZGRcdTUwMmNcdTUzNTNcdTU1NDRcdTU3N2NcdWZhMDFcdTYyNThcdWZhMDJcdTY0ZTJcdTY2NmJcdTY3ZGRcdTZmYzFcdTZmZWZcdTc0MjJcdTc0MzhcdThhMTdcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxnPTA7ZyE9eVsyNDZdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzI0Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyNDZdW2ddXT02Mjk3NitnLF9bNjI5NzYrZ109eVsyNDZdW2ddKTtmb3IoeVsyNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk0MzhcdTU0NTFcdTU2MDZcdTU3NjZcdTVmNDhcdTYxOWFcdTZiNGVcdTcwNThcdTcwYWRcdTdkYmJcdThhOTVc''@;'; put 'put ''dTU5NmFcdTgxMmJcdTYzYTJcdTc3MDhcdTgwM2RcdThjYWFcdTU4NTRcdTY0MmRcdTY5YmJcdTViOTVcdTVlMTFcdTZlNmZcdWZhMDNcdTg1NjlcdTUxNGNcdTUzZjBcdTU5MmFcdTYwMjBcdTYxNGJcdTZiODZcdTZjNzBcdTZjZjBcdTdiMWVcdTgwY2VcdTgyZDRcdThkYzZcdTkwYjBcdTk4''@;'; put 'put ''YjFcdWZhMDRcdTY0YzdcdTZmYTRcdTY0OTFcdTY1MDRcdTUxNGVcdTU0MTBcdTU3MWZcdThhMGVcdTYxNWZcdTY4NzZcdWZhMDVcdTc1ZGJcdTdiNTJcdTdkNzFcdTkwMWFcdTU4MDZcdTY5Y2NcdTgxN2ZcdTg5MmFcdTkwMDBcdTk4MzlcdTUwNzhcdTU5NTdcdTU5YWNcdTYyOTVcdTkwMGZc''@;'; put 'put ''dTliMmFcdTYxNWRcdTcyNzlcdTk1ZDZcdTU3NjFcdTVhNDZcdTVkZjRcdTYyOGFcdTY0YWRcdTY0ZmFcdTY3NzdcdTZjZTJcdTZkM2VcdTcyMmNcdTc0MzZcdTc4MzRcdTdmNzdcdTgyYWRcdThkZGJcdTk4MTdcdTUyMjRcdTU3NDJcdTY3N2ZcdTcyNDhcdTc0ZTNcdThjYTlcdThmYTZcdTky''@;'; put 'put ''MTFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyNDddLmxlbmd0aDsrK2cpNjU1MzMhPT15WzI0N11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyNDddW2ddXT02MzIzMitnLF9bNjMyMzIrZ109eVsyNDddW2ddKTtmb3IoeVsyNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2MmFcdTUxNmJcdTUzZWRcdTYzNGNcdTRmNjlcdTU1MDRcdTYwOTZcdTY1NTdcdTZjOWJc''@;'; put 'put ''dTZkN2ZcdTcyNGNcdTcyZmRcdTdhMTdcdTg5ODdcdThjOWRcdTVmNmRcdTZmOGVcdTcwZjlcdTgxYThcdTYxMGVcdTRmYmZcdTUwNGZcdTYyNDFcdTcyNDdcdTdiYzdcdTdkZThcdTdmZTlcdTkwNGRcdTk3YWRcdTlhMTlcdThjYjZcdTU3NmFcdTVlNzNcdTY3YjBcdTg0MGRcdThhNTVcdTU0''@;'; put 'put ''MjBcdTViMTZcdTVlNjNcdTVlZTJcdTVmMGFcdTY1ODNcdTgwYmFcdTg1M2RcdTk1ODlcdTk2NWJcdTRmNDhcdTUzMDVcdTUzMGRcdTUzMGZcdTU0ODZcdTU0ZmFcdTU3MDNcdTVlMDNcdTYwMTZcdTYyOWJcdTYyYjFcdTYzNTVcdWZhMDZcdTZjZTFcdTZkNjZcdTc1YjFcdTc4MzJcdTgwZGVc''@;'; put 'put ''dTgxMmZcdTgyZGVcdTg0NjFcdTg0YjJcdTg4OGRcdTg5MTJcdTkwMGJcdTkyZWFcdTk4ZmRcdTliOTFcdTVlNDVcdTY2YjRcdTY2ZGRcdTcwMTFcdTcyMDZcdWZhMDdcdTRmZjVcdTUyN2RcdTVmNmFcdTYxNTNcdTY3NTNcdTZhMTlcdTZmMDJcdTc0ZTJcdTc5NjhcdTg4NjhcdThjNzlcdTk4''@;'; put 'put ''YzdcdTk4YzRcdTlhNDNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyNDhdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzI0OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyNDhdW2ddXT02MzQ4OCtnLF9bNjM0ODgrZ109eVsyNDhdW2ddKTtmb3IoeVsyNDldPSJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YzFcdTdhMWZcdTY5NTNcdThhZjdcdThjNGFcdTk4YThcdTk5YWVc''@;'; put 'put ''dTVmN2NcdTYyYWJcdTc1YjJcdTc2YWVcdTg4YWJcdTkwN2ZcdTk2NDJcdTUzMzlcdTVmM2NcdTVmYzVcdTZjY2NcdTczY2NcdTc1NjJcdTc1OGJcdTdiNDZcdTgyZmVcdTk5OWRcdTRlNGZcdTkwM2NcdTRlMGJcdTRmNTVcdTUzYTZcdTU5MGZcdTVlYzhcdTY2MzBcdTZjYjNcdTc0NTVcdTgz''@;'; put 'put ''NzdcdTg3NjZcdThjYzBcdTkwNTBcdTk3MWVcdTljMTVcdTU4ZDFcdTViNzhcdTg2NTBcdThiMTRcdTlkYjRcdTViZDJcdTYwNjhcdTYwOGRcdTY1ZjFcdTZjNTdcdTZmMjJcdTZmYTNcdTcwMWFcdTdmNTVcdTdmZjBcdTk1OTFcdTk1OTJcdTk2NTBcdTk3ZDNcdTUyNzJcdThmNDRcdTUxZmRc''@;'; put 'put ''dTU0MmJcdTU0YjhcdTU1NjNcdTU1OGFcdTZhYmJcdTZkYjVcdTdkZDhcdTgyNjZcdTkyOWNcdTk2NzdcdTllNzlcdTU0MDhcdTU0YzhcdTc2ZDJcdTg2ZTRcdTk1YTRcdTk1ZDRcdTk2NWNcdTRlYTJcdTRmMDlcdTU5ZWVcdTVhZTZcdTVkZjdcdTYwNTJcdTYyOTdcdTY3NmRcdTY4NDFcdTZj''@;'; put 'put ''ODZcdTZlMmZcdTdmMzhcdTgwOWJcdTgyMmFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyNDldLmxlbmd0aDsrK2cpNjU1MzMhPT15WzI0OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyNDldW2ddXT02Mzc0NCtnLF9bNjM3NDQrZ109eVsyNDldW2ddKTtmb3IoeVsyNTBdPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZhMDhcdWZhMDlcdTk4MDVcdTRlYTVcdTUwNTVc''@;'; put 'put ''dTU0YjNcdTU3OTNcdTU5NWFcdTViNjlcdTViYjNcdTYxYzhcdTY5NzdcdTZkNzdcdTcwMjNcdTg3ZjlcdTg5ZTNcdThhNzJcdThhZTdcdTkwODJcdTk5ZWRcdTlhYjhcdTUyYmVcdTY4MzhcdTUwMTZcdTVlNzhcdTY3NGZcdTgzNDdcdTg4NGNcdTRlYWJcdTU0MTFcdTU2YWVcdTczZTZcdTkx''@;'; put 'put ''MTVcdTk3ZmZcdTk5MDlcdTk5NTdcdTk5OTlcdTU2NTNcdTU4OWZcdTg2NWJcdThhMzFcdTYxYjJcdTZhZjZcdTczN2JcdThlZDJcdTZiNDdcdTk2YWFcdTlhNTdcdTU5NTVcdTcyMDBcdThkNmJcdTk3NjlcdTRmZDRcdTVjZjRcdTVmMjZcdTYxZjhcdTY2NWJcdTZjZWJcdTcwYWJcdTczODRc''@;'; put 'put ''dTczYjlcdTczZmVcdTc3MjlcdTc3NGRcdTdkNDNcdTdkNjJcdTdlMjNcdTgyMzdcdTg4NTJcdWZhMGFcdThjZTJcdTkyNDlcdTk4NmZcdTViNTFcdTdhNzRcdTg4NDBcdTk4MDFcdTVhY2NcdTRmZTBcdTUzNTRcdTU5M2VcdTVjZmRcdTYzM2VcdTZkNzlcdTcyZjlcdTgxMDVcdTgxMDdcdTgz''@;'; put 'put ''YTJcdTkyY2ZcdTk4MzBcdTRlYThcdTUxNDRcdTUyMTFcdTU3OGJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyNTBdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzI1MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyNTBdW2ddXT02NGUzK2csX1s2NGUzK2ddPXlbMjUwXVtnXSk7Zm9yKHlbMjUx''@;'; put 'put ''XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZjYyXHU2Y2MyXHU2ZWNlXHU3''@;'; put 'put ''MDA1XHU3MDUwXHU3MGFmXHU3MTkyXHU3M2U5XHU3NDY5XHU4MzRhXHU4N2EyXHU4ODYxXHU5MDA4XHU5MGEyXHU5M2EzXHU5OWE4XHU1MTZlXHU1ZjU3XHU2MGUwXHU2MTY3XHU2NmIzXHU4NTU5XHU4ZTRhXHU5MWFmXHU5NzhiXHU0ZTRlXHU0ZTkyXHU1NDdjXHU1OGQ1XHU1OGZhXHU1OTdk''@;'; put 'put ''XHU1Y2I1XHU1ZjI3XHU2MjM2XHU2MjQ4XHU2NjBhXHU2NjY3XHU2YmViXHU2ZDY5XHU2ZGNmXHU2ZTU2XHU2ZWY4XHU2Zjk0XHU2ZmUwXHU2ZmU5XHU3MDVkXHU3MmQwXHU3NDI1XHU3NDVhXHU3NGUwXHU3NjkzXHU3OTVjXHU3Y2NhXHU3ZTFlXHU4MGUxXHU4MmE2XHU4NDZiXHU4NGJmXHU4''@;'; put 'put ''NjRlXHU4NjVmXHU4Nzc0XHU4Yjc3XHU4YzZhXHU5M2FjXHU5ODAwXHU5ODY1XHU2MGQxXHU2MjE2XHU5MTc3XHU1YTVhXHU2NjBmXHU2ZGY3XHU2ZTNlXHU3NDNmXHU5YjQyXHU1ZmZkXHU2MGRhXHU3YjBmXHU1NGM0XHU1ZjE4XHU2YzVlXHU2Y2QzXHU2ZDJhXHU3MGQ4XHU3ZDA1XHU4Njc5''@;'; put 'put ''XHU4YTBjXHU5ZDNiXHU1MzE2XHU1NDhjXHU1YjA1XHU2YTNhXHU3MDZiXHU3NTc1XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjUxXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyNTFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjUxXVtnXV09NjQyNTYrZyxfWzY0MjU2K2ddPXlbMjUxXVtn''@;'; put 'put ''XSk7Zm9yKHlbMjUyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3OThkXHU3''@;'; put 'put ''OWJlXHU4MmIxXHU4M2VmXHU4YTcxXHU4YjQxXHU4Y2E4XHU5Nzc0XHVmYTBiXHU2NGY0XHU2NTJiXHU3OGJhXHU3OGJiXHU3YTZiXHU0ZTM4XHU1NTlhXHU1OTUwXHU1YmE2XHU1ZTdiXHU2MGEzXHU2M2RiXHU2YjYxXHU2NjY1XHU2ODUzXHU2ZTE5XHU3MTY1XHU3NGIwXHU3ZDA4XHU5MDg0''@;'; put 'put ''XHU5YTY5XHU5YzI1XHU2ZDNiXHU2ZWQxXHU3MzNlXHU4YzQxXHU5NWNhXHU1MWYwXHU1ZTRjXHU1ZmE4XHU2MDRkXHU2MGY2XHU2MTMwXHU2MTRjXHU2NjQzXHU2NjQ0XHU2OWE1XHU2Y2MxXHU2ZTVmXHU2ZWM5XHU2ZjYyXHU3MTRjXHU3NDljXHU3Njg3XHU3YmMxXHU3YzI3XHU4MzUyXHU4''@;'; put 'put ''NzU3XHU5MDUxXHU5NjhkXHU5ZWMzXHU1MzJmXHU1NmRlXHU1ZWZiXHU1ZjhhXHU2MDYyXHU2MDk0XHU2MWY3XHU2NjY2XHU2NzAzXHU2YTljXHU2ZGVlXHU2ZmFlXHU3MDcwXHU3MzZhXHU3ZTZhXHU4MWJlXHU4MzM0XHU4NmQ0XHU4YWE4XHU4Y2M0XHU1MjgzXHU3MzcyXHU1Yjk2XHU2YTZi''@;'; put 'put ''XHU5NDA0XHU1NGVlXHU1Njg2XHU1YjVkXHU2NTQ4XHU2NTg1XHU2NmM5XHU2ODlmXHU2ZDhkXHU2ZGM2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjUyXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyNTJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjUyXVtnXV09NjQ1MTIrZyxfWzY0NTEy''@;'; put 'put ''K2ddPXlbMjUyXVtnXSk7Zm9yKHlbMjUzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHU3MjNiXHU4MGI0XHU5MTc1XHU5YTRkXHU0ZmFmXHU1MDE5XHU1MzlhXHU1NDBlXHU1NDNjXHU1NTg5XHU1NWM1XHU1ZTNmXHU1ZjhjXHU2NzNkXHU3MTY2XHU3M2RkXHU5MDA1XHU1MmRiXHU1MmYzXHU1ODY0XHU1OGNlXHU3MTA0XHU3MThmXHU3MWZiXHU4NWIwXHU4YTEzXHU2Njg4''@;'; put 'put ''XHU4NWE4XHU1NWE3XHU2Njg0XHU3MTRhXHU4NDMxXHU1MzQ5XHU1NTk5XHU2YmMxXHU1ZjU5XHU1ZmJkXHU2M2VlXHU2Njg5XHU3MTQ3XHU4YWYxXHU4ZjFkXHU5ZWJlXHU0ZjExXHU2NDNhXHU3MGNiXHU3NTY2XHU4NjY3XHU2MDY0XHU4YjRlXHU5ZGY4XHU1MTQ3XHU1MWY2XHU1MzA4XHU2''@;'; put 'put ''ZDM2XHU4MGY4XHU5ZWQxXHU2NjE1XHU2YjIzXHU3MDk4XHU3NWQ1XHU1NDAzXHU1Yzc5XHU3ZDA3XHU4YTE2XHU2YjIwXHU2YjNkXHU2YjQ2XHU1NDM4XHU2MDcwXHU2ZDNkXHU3ZmQ1XHU4MjA4XHU1MGQ2XHU1MWRlXHU1NTljXHU1NjZiXHU1NmNkXHU1OWVjXHU1YjA5XHU1ZTBjXHU2MTk5''@;'; put 'put ''XHU2MTk4XHU2MjMxXHU2NjVlXHU2NmU2XHU3MTk5XHU3MWI5XHU3MWJhXHU3MmE3XHU3OWE3XHU3YTAwXHU3ZmIyXHU4YTcwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjUzXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyNTNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjUzXVtnXV09NjQ3''@;'; put 'put ''NjgrZyxfWzY0NzY4K2ddPXlbMjUzXVtnXSk7cmV0dXJue2VuYzpJLGRlYzpffX0oKSxxWzk1MF09ZnVuY3Rpb24oKXt2YXIgZyxfPVtdLEk9e30seT1bXTtmb3IoeVswXT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEz''@;'; put 'put ''XHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVswXS5sZW5ndGg7KytnKTY1NTMzIT09eVswXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzBd''@;'; put 'put ''W2ddXT0wK2csX1swK2ddPXlbMF1bZ10pO2Zvcih5WzE2MV09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MzAwMFx1ZmYwY1x1MzAwMVx1MzAwMlx1ZmYwZVx1MjAyN1x1ZmYxYlx1ZmYxYVx1ZmYxZlx1ZmYwMVx1ZmUzMFx1MjAyNlx1''@;'; put 'put ''MjAyNVx1ZmU1MFx1ZmU1MVx1ZmU1Mlx4YjdcdWZlNTRcdWZlNTVcdWZlNTZcdWZlNTdcdWZmNWNcdTIwMTNcdWZlMzFcdTIwMTRcdWZlMzNcdTI1NzRcdWZlMzRcdWZlNGZcdWZmMDhcdWZmMDlcdWZlMzVcdWZlMzZcdWZmNWJcdWZmNWRcdWZlMzdcdWZlMzhcdTMwMTRcdTMwMTVcdWZlMzlc''@;'; put 'put ''dWZlM2FcdTMwMTBcdTMwMTFcdWZlM2JcdWZlM2NcdTMwMGFcdTMwMGJcdWZlM2RcdWZlM2VcdTMwMDhcdTMwMDlcdWZlM2ZcdWZlNDBcdTMwMGNcdTMwMGRcdWZlNDFcdWZlNDJcdTMwMGVcdTMwMGZcdWZlNDNcdWZlNDRcdWZlNTlcdWZlNWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZlNWJcdWZlNWNcdWZlNWRcdWZlNWVcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTMwMWRcdTMwMWVcdTIwMzVcdTIwMzJcdWZmMDNcdWZmMDZcdWZmMGFcdTIwM2JceGE3XHUzMDAzXHUyNWNiXHUyNWNmXHUyNWIzXHUyNWIyXHUyNWNlXHUyNjA2XHUyNjA1XHUyNWM3''@;'; put 'put ''XHUyNWM2XHUyNWExXHUyNWEwXHUyNWJkXHUyNWJjXHUzMmEzXHUyMTA1XHhhZlx1ZmZlM1x1ZmYzZlx1MDJjZFx1ZmU0OVx1ZmU0YVx1ZmU0ZFx1ZmU0ZVx1ZmU0Ylx1ZmU0Y1x1ZmU1Zlx1ZmU2MFx1ZmU2MVx1ZmYwYlx1ZmYwZFx4ZDdceGY3XHhiMVx1MjIxYVx1ZmYxY1x1ZmYxZVx1ZmYx''@;'; put 'put ''ZFx1MjI2Nlx1MjI2N1x1MjI2MFx1MjIxZVx1MjI1Mlx1MjI2MVx1ZmU2Mlx1ZmU2M1x1ZmU2NFx1ZmU2NVx1ZmU2Nlx1ZmY1ZVx1MjIyOVx1MjIyYVx1MjJhNVx1MjIyMFx1MjIxZlx1MjJiZlx1MzNkMlx1MzNkMVx1MjIyYlx1MjIyZVx1MjIzNVx1MjIzNFx1MjY0MFx1MjY0Mlx1MjI5NVx1''@;'; put 'put ''MjI5OVx1MjE5MVx1MjE5M1x1MjE5MFx1MjE5Mlx1MjE5Nlx1MjE5N1x1MjE5OVx1MjE5OFx1MjIyNVx1MjIyM1x1ZmYwZlx1ZmZmZCIuc3BsaXQoIiIpLGc9MDtnIT15WzE2MV0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMTYxXVtnXS5jaGFyQ29kZUF0KDApJiYoSVt5WzE2MV1bZ11dPTQxMjE2''@;'; put 'put ''K2csX1s0MTIxNitnXT15WzE2MV1bZ10pO2Zvcih5WzE2Ml09Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmYzY1x1MjIxNVx1ZmU2OFx1ZmYwNFx1ZmZlNVx1MzAxMlx1ZmZlMFx1ZmZlMVx1ZmYwNVx1ZmYyMFx1MjEwM1x1MjEwOVx1''@;'; put 'put ''ZmU2OVx1ZmU2YVx1ZmU2Ylx1MzNkNVx1MzM5Y1x1MzM5ZFx1MzM5ZVx1MzNjZVx1MzNhMVx1MzM4ZVx1MzM4Zlx1MzNjNFx4YjBcdTUxNTlcdTUxNWJcdTUxNWVcdTUxNWRcdTUxNjFcdTUxNjNcdTU1ZTdcdTc0ZTlcdTdjY2VcdTI1ODFcdTI1ODJcdTI1ODNcdTI1ODRcdTI1ODVcdTI1ODZc''@;'; put 'put ''dTI1ODdcdTI1ODhcdTI1OGZcdTI1OGVcdTI1OGRcdTI1OGNcdTI1OGJcdTI1OGFcdTI1ODlcdTI1M2NcdTI1MzRcdTI1MmNcdTI1MjRcdTI1MWNcdTI1OTRcdTI1MDBcdTI1MDJcdTI1OTVcdTI1MGNcdTI1MTBcdTI1MTRcdTI1MThcdTI1NmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTI1NmVcdTI1NzBcdTI1NmZcdTI1NTBcdTI1NWVcdTI1NmFcdTI1NjFcdTI1ZTJcdTI1ZTNcdTI1ZTVcdTI1ZTRcdTI1NzFcdTI1NzJcdTI1NzNcdWZmMTBcdWZmMTFcdWZmMTJcdWZmMTNcdWZmMTRcdWZmMTVcdWZmMTZcdWZmMTdcdWZmMThcdWZmMTlcdTIxNjBcdTIx''@;'; put 'put ''NjFcdTIxNjJcdTIxNjNcdTIxNjRcdTIxNjVcdTIxNjZcdTIxNjdcdTIxNjhcdTIxNjlcdTMwMjFcdTMwMjJcdTMwMjNcdTMwMjRcdTMwMjVcdTMwMjZcdTMwMjdcdTMwMjhcdTMwMjlcdTUzNDFcdTUzNDRcdTUzNDVcdWZmMjFcdWZmMjJcdWZmMjNcdWZmMjRcdWZmMjVcdWZmMjZcdWZmMjdc''@;'; put 'put ''dWZmMjhcdWZmMjlcdWZmMmFcdWZmMmJcdWZmMmNcdWZmMmRcdWZmMmVcdWZmMmZcdWZmMzBcdWZmMzFcdWZmMzJcdWZmMzNcdWZmMzRcdWZmMzVcdWZmMzZcdWZmMzdcdWZmMzhcdWZmMzlcdWZmM2FcdWZmNDFcdWZmNDJcdWZmNDNcdWZmNDRcdWZmNDVcdWZmNDZcdWZmNDdcdWZmNDhcdWZm''@;'; put 'put ''NDlcdWZmNGFcdWZmNGJcdWZmNGNcdWZmNGRcdWZmNGVcdWZmNGZcdWZmNTBcdWZmNTFcdWZmNTJcdWZmNTNcdWZmNTRcdWZmNTVcdWZmNTZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNjJdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE2Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNjJd''@;'; put 'put ''W2ddXT00MTQ3MitnLF9bNDE0NzIrZ109eVsxNjJdW2ddKTtmb3IoeVsxNjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAz''@;'; put 'put ''OTdcdTAzOThcdTAzOTlcdTAzOWFcdTAzOWJcdTAzOWNcdTAzOWRcdTAzOWVcdTAzOWZcdTAzYTBcdTAzYTFcdTAzYTNcdTAzYTRcdTAzYTVcdTAzYTZcdTAzYTdcdTAzYThcdTAzYTlcdTAzYjFcdTAzYjJcdTAzYjNcdTAzYjRcdTAzYjVcdTAzYjZcdTAzYjdcdTAzYjhcdTAzYjlcdTAzYmFc''@;'; put 'put ''dTAzYmJcdTAzYmNcdTAzYmRcdTAzYmVcdTAzYmZcdTAzYzBcdTAzYzFcdTAzYzNcdTAzYzRcdTAzYzVcdTAzYzZcdTAzYzdcdTAzYzhcdTAzYzlcdTMxMDVcdTMxMDZcdTMxMDdcdTMxMDhcdTMxMDlcdTMxMGFcdTMxMGJcdTMxMGNcdTMxMGRcdTMxMGVcdTMxMGZcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMxMTBcdTMxMTFcdTMxMTJcdTMxMTNcdTMxMTRcdTMxMTVcdTMxMTZcdTMxMTdcdTMxMThcdTMxMTlcdTMxMWFcdTMxMWJcdTMxMWNcdTMxMWRcdTMxMWVcdTMxMWZcdTMxMjBcdTMxMjFcdTMxMjJcdTMxMjNcdTMxMjRcdTMxMjVcdTMxMjZcdTMx''@;'; put 'put ''MjdcdTMxMjhcdTMxMjlcdTAyZDlcdTAyYzlcdTAyY2FcdTAyYzdcdTAyY2JcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwYWNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNjNdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE2M11bZ10uY2hhckNvZGVBdCgw''@;'; put 'put ''KSYmKElbeVsxNjNdW2ddXT00MTcyOCtnLF9bNDE3MjgrZ109eVsxNjNdW2ddKTtmb3IoeVsxNjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlMDBcdTRlNTlcdTRlMDFcdTRlMDNcdTRlNDNcdTRlNWRcdTRlODZcdTRlOGNcdTRl''@;'; put 'put ''YmFcdTUxM2ZcdTUxNjVcdTUxNmJcdTUxZTBcdTUyMDBcdTUyMDFcdTUyOWJcdTUzMTVcdTUzNDFcdTUzNWNcdTUzYzhcdTRlMDlcdTRlMGJcdTRlMDhcdTRlMGFcdTRlMmJcdTRlMzhcdTUxZTFcdTRlNDVcdTRlNDhcdTRlNWZcdTRlNWVcdTRlOGVcdTRlYTFcdTUxNDBcdTUyMDNcdTUyZmFc''@;'; put 'put ''dTUzNDNcdTUzYzlcdTUzZTNcdTU3MWZcdTU4ZWJcdTU5MTVcdTU5MjdcdTU5NzNcdTViNTBcdTViNTFcdTViNTNcdTViZjhcdTVjMGZcdTVjMjJcdTVjMzhcdTVjNzFcdTVkZGRcdTVkZTVcdTVkZjFcdTVkZjJcdTVkZjNcdTVkZmVcdTVlNzJcdTVlZmVcdTVmMGJcdTVmMTNcdTYyNGRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlMTFcdTRlMTBcdTRlMGRcdTRlMmRcdTRlMzBcdTRlMzlcdTRlNGJcdTVjMzlcdTRlODhcdTRlOTFcdTRlOTVcdTRlOTJcdTRlOTRcdTRlYTJcdTRlYzFcdTRlYzBcdTRlYzNcdTRlYzZcdTRlYzdcdTRlY2RcdTRlY2FcdTRl''@;'; put 'put ''Y2JcdTRlYzRcdTUxNDNcdTUxNDFcdTUxNjdcdTUxNmRcdTUxNmVcdTUxNmNcdTUxOTdcdTUxZjZcdTUyMDZcdTUyMDdcdTUyMDhcdTUyZmJcdTUyZmVcdTUyZmZcdTUzMTZcdTUzMzlcdTUzNDhcdTUzNDdcdTUzNDVcdTUzNWVcdTUzODRcdTUzY2JcdTUzY2FcdTUzY2RcdTU4ZWNcdTU5Mjlc''@;'; put 'put ''dTU5MmJcdTU5MmFcdTU5MmRcdTViNTRcdTVjMTFcdTVjMjRcdTVjM2FcdTVjNmZcdTVkZjRcdTVlN2JcdTVlZmZcdTVmMTRcdTVmMTVcdTVmYzNcdTYyMDhcdTYyMzZcdTYyNGJcdTYyNGVcdTY1MmZcdTY1ODdcdTY1OTdcdTY1YTRcdTY1YjlcdTY1ZTVcdTY2ZjBcdTY3MDhcdTY3MjhcdTZi''@;'; put 'put ''MjBcdTZiNjJcdTZiNzlcdTZiY2JcdTZiZDRcdTZiZGJcdTZjMGZcdTZjMzRcdTcwNmJcdTcyMmFcdTcyMzZcdTcyM2JcdTcyNDdcdTcyNTlcdTcyNWJcdTcyYWNcdTczOGJcdTRlMTlcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNjRdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE2NF1bZ10u''@;'; put 'put ''Y2hhckNvZGVBdCgwKSYmKElbeVsxNjRdW2ddXT00MTk4NCtnLF9bNDE5ODQrZ109eVsxNjRdW2ddKTtmb3IoeVsxNjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlMTZcdTRlMTVcdTRlMTRcdTRlMThcdTRlM2JcdTRlNGRcdTRl''@;'; put 'put ''NGZcdTRlNGVcdTRlZTVcdTRlZDhcdTRlZDRcdTRlZDVcdTRlZDZcdTRlZDdcdTRlZTNcdTRlZTRcdTRlZDlcdTRlZGVcdTUxNDVcdTUxNDRcdTUxODlcdTUxOGFcdTUxYWNcdTUxZjlcdTUxZmFcdTUxZjhcdTUyMGFcdTUyYTBcdTUyOWZcdTUzMDVcdTUzMDZcdTUzMTdcdTUzMWRcdTRlZGZc''@;'; put 'put ''dTUzNGFcdTUzNDlcdTUzNjFcdTUzNjBcdTUzNmZcdTUzNmVcdTUzYmJcdTUzZWZcdTUzZTRcdTUzZjNcdTUzZWNcdTUzZWVcdTUzZTlcdTUzZThcdTUzZmNcdTUzZjhcdTUzZjVcdTUzZWJcdTUzZTZcdTUzZWFcdTUzZjJcdTUzZjFcdTUzZjBcdTUzZTVcdTUzZWRcdTUzZmJcdTU2ZGJcdTU2''@;'; put 'put ''ZGFcdTU5MTZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU5MmVcdTU5MzFcdTU5NzRcdTU5NzZcdTViNTVcdTViODNcdTVjM2NcdTVkZThcdTVkZTdcdTVkZTZcdTVlMDJcdTVlMDNcdTVlNzNcdTVlN2NcdTVmMDFcdTVmMThcdTVmMTdcdTVmYzVcdTYyMGFcdTYy''@;'; put 'put ''NTNcdTYyNTRcdTYyNTJcdTYyNTFcdTY1YTVcdTY1ZTZcdTY3MmVcdTY3MmNcdTY3MmFcdTY3MmJcdTY3MmRcdTZiNjNcdTZiY2RcdTZjMTFcdTZjMTBcdTZjMzhcdTZjNDFcdTZjNDBcdTZjM2VcdTcyYWZcdTczODRcdTczODlcdTc0ZGNcdTc0ZTZcdTc1MThcdTc1MWZcdTc1MjhcdTc1Mjlc''@;'; put 'put ''dTc1MzBcdTc1MzFcdTc1MzJcdTc1MzNcdTc1OGJcdTc2N2RcdTc2YWVcdTc2YmZcdTc2ZWVcdTc3ZGJcdTc3ZTJcdTc3ZjNcdTc5M2FcdTc5YmVcdTdhNzRcdTdhY2JcdTRlMWVcdTRlMWZcdTRlNTJcdTRlNTNcdTRlNjlcdTRlOTlcdTRlYTRcdTRlYTZcdTRlYTVcdTRlZmZcdTRmMDlcdTRm''@;'; put 'put ''MTlcdTRmMGFcdTRmMTVcdTRmMGRcdTRmMTBcdTRmMTFcdTRmMGZcdTRlZjJcdTRlZjZcdTRlZmJcdTRlZjBcdTRlZjNcdTRlZmRcdTRmMDFcdTRmMGJcdTUxNDlcdTUxNDdcdTUxNDZcdTUxNDhcdTUxNjhcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNjVdLmxlbmd0aDsrK2cpNjU1MzMh''@;'; put 'put ''PT15WzE2NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNjVdW2ddXT00MjI0MCtnLF9bNDIyNDArZ109eVsxNjVdW2ddKTtmb3IoeVsxNjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUxNzFcdTUxOGRcdTUxYjBcdTUyMTdcdTUy''@;'; put 'put ''MTFcdTUyMTJcdTUyMGVcdTUyMTZcdTUyYTNcdTUzMDhcdTUzMjFcdTUzMjBcdTUzNzBcdTUzNzFcdTU0MDlcdTU0MGZcdTU0MGNcdTU0MGFcdTU0MTBcdTU0MDFcdTU0MGJcdTU0MDRcdTU0MTFcdTU0MGRcdTU0MDhcdTU0MDNcdTU0MGVcdTU0MDZcdTU0MTJcdTU2ZTBcdTU2ZGVcdTU2ZGRc''@;'; put 'put ''dTU3MzNcdTU3MzBcdTU3MjhcdTU3MmRcdTU3MmNcdTU3MmZcdTU3MjlcdTU5MTlcdTU5MWFcdTU5MzdcdTU5MzhcdTU5ODRcdTU5NzhcdTU5ODNcdTU5N2RcdTU5NzlcdTU5ODJcdTU5ODFcdTViNTdcdTViNThcdTViODdcdTViODhcdTViODVcdTViODlcdTViZmFcdTVjMTZcdTVjNzlcdTVk''@;'; put 'put ''ZGVcdTVlMDZcdTVlNzZcdTVlNzRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmMGZcdTVmMWJcdTVmZDlcdTVmZDZcdTYyMGVcdTYyMGNcdTYyMGRcdTYyMTBcdTYyNjNcdTYyNWJcdTYyNThcdTY1MzZcdTY1ZTlcdTY1ZThcdTY1ZWNcdTY1ZWRcdTY2ZjJcdTY2''@;'; put 'put ''ZjNcdTY3MDlcdTY3M2RcdTY3MzRcdTY3MzFcdTY3MzVcdTZiMjFcdTZiNjRcdTZiN2JcdTZjMTZcdTZjNWRcdTZjNTdcdTZjNTlcdTZjNWZcdTZjNjBcdTZjNTBcdTZjNTVcdTZjNjFcdTZjNWJcdTZjNGRcdTZjNGVcdTcwNzBcdTcyNWZcdTcyNWRcdTc2N2VcdTdhZjlcdTdjNzNcdTdjZjhc''@;'; put 'put ''dTdmMzZcdTdmOGFcdTdmYmRcdTgwMDFcdTgwMDNcdTgwMGNcdTgwMTJcdTgwMzNcdTgwN2ZcdTgwODlcdTgwOGJcdTgwOGNcdTgxZTNcdTgxZWFcdTgxZjNcdTgxZmNcdTgyMGNcdTgyMWJcdTgyMWZcdTgyNmVcdTgyNzJcdTgyN2VcdTg2NmJcdTg4NDBcdTg4NGNcdTg4NjNcdTg5N2ZcdTk2''@;'; put 'put ''MjFcdTRlMzJcdTRlYThcdTRmNGRcdTRmNGZcdTRmNDdcdTRmNTdcdTRmNWVcdTRmMzRcdTRmNWJcdTRmNTVcdTRmMzBcdTRmNTBcdTRmNTFcdTRmM2RcdTRmM2FcdTRmMzhcdTRmNDNcdTRmNTRcdTRmM2NcdTRmNDZcdTRmNjNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNjZdLmxlbmd0''@;'; put 'put ''aDsrK2cpNjU1MzMhPT15WzE2Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNjZdW2ddXT00MjQ5NitnLF9bNDI0OTYrZ109eVsxNjZdW2ddKTtmb3IoeVsxNjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRmNWNcdTRmNjBcdTRm''@;'; put 'put ''MmZcdTRmNGVcdTRmMzZcdTRmNTlcdTRmNWRcdTRmNDhcdTRmNWFcdTUxNGNcdTUxNGJcdTUxNGRcdTUxNzVcdTUxYjZcdTUxYjdcdTUyMjVcdTUyMjRcdTUyMjlcdTUyMmFcdTUyMjhcdTUyYWJcdTUyYTlcdTUyYWFcdTUyYWNcdTUzMjNcdTUzNzNcdTUzNzVcdTU0MWRcdTU0MmRcdTU0MWVc''@;'; put 'put ''dTU0M2VcdTU0MjZcdTU0NGVcdTU0MjdcdTU0NDZcdTU0NDNcdTU0MzNcdTU0NDhcdTU0NDJcdTU0MWJcdTU0MjlcdTU0NGFcdTU0MzlcdTU0M2JcdTU0MzhcdTU0MmVcdTU0MzVcdTU0MzZcdTU0MjBcdTU0M2NcdTU0NDBcdTU0MzFcdTU0MmJcdTU0MWZcdTU0MmNcdTU2ZWFcdTU2ZjBcdTU2''@;'; put 'put ''ZTRcdTU2ZWJcdTU3NGFcdTU3NTFcdTU3NDBcdTU3NGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU3NDdcdTU3NGVcdTU3M2VcdTU3NTBcdTU3NGZcdTU3M2JcdTU4ZWZcdTU5M2VcdTU5OWRcdTU5OTJcdTU5YThcdTU5OWVcdTU5YTNcdTU5OTlcdTU5OTZcdTU5''@;'; put 'put ''OGRcdTU5YTRcdTU5OTNcdTU5OGFcdTU5YTVcdTViNWRcdTViNWNcdTViNWFcdTViNWJcdTViOGNcdTViOGJcdTViOGZcdTVjMmNcdTVjNDBcdTVjNDFcdTVjM2ZcdTVjM2VcdTVjOTBcdTVjOTFcdTVjOTRcdTVjOGNcdTVkZWJcdTVlMGNcdTVlOGZcdTVlODdcdTVlOGFcdTVlZjdcdTVmMDRc''@;'; put 'put ''dTVmMWZcdTVmNjRcdTVmNjJcdTVmNzdcdTVmNzlcdTVmZDhcdTVmY2NcdTVmZDdcdTVmY2RcdTVmZjFcdTVmZWJcdTVmZjhcdTVmZWFcdTYyMTJcdTYyMTFcdTYyODRcdTYyOTdcdTYyOTZcdTYyODBcdTYyNzZcdTYyODlcdTYyNmRcdTYyOGFcdTYyN2NcdTYyN2VcdTYyNzlcdTYyNzNcdTYy''@;'; put 'put ''OTJcdTYyNmZcdTYyOThcdTYyNmVcdTYyOTVcdTYyOTNcdTYyOTFcdTYyODZcdTY1MzlcdTY1M2JcdTY1MzhcdTY1ZjFcdTY2ZjRcdTY3NWZcdTY3NGVcdTY3NGZcdTY3NTBcdTY3NTFcdTY3NWNcdTY3NTZcdTY3NWVcdTY3NDlcdTY3NDZcdTY3NjBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9''@;'; put 'put ''eVsxNjddLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE2N11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNjddW2ddXT00Mjc1MitnLF9bNDI3NTIrZ109eVsxNjddW2ddKTtmb3IoeVsxNjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY3''@;'; put 'put ''NTNcdTY3NTdcdTZiNjVcdTZiY2ZcdTZjNDJcdTZjNWVcdTZjOTlcdTZjODFcdTZjODhcdTZjODlcdTZjODVcdTZjOWJcdTZjNmFcdTZjN2FcdTZjOTBcdTZjNzBcdTZjOGNcdTZjNjhcdTZjOTZcdTZjOTJcdTZjN2RcdTZjODNcdTZjNzJcdTZjN2VcdTZjNzRcdTZjODZcdTZjNzZcdTZjOGRc''@;'; put 'put ''dTZjOTRcdTZjOThcdTZjODJcdTcwNzZcdTcwN2NcdTcwN2RcdTcwNzhcdTcyNjJcdTcyNjFcdTcyNjBcdTcyYzRcdTcyYzJcdTczOTZcdTc1MmNcdTc1MmJcdTc1MzdcdTc1MzhcdTc2ODJcdTc2ZWZcdTc3ZTNcdTc5YzFcdTc5YzBcdTc5YmZcdTdhNzZcdTdjZmJcdTdmNTVcdTgwOTZcdTgw''@;'; put 'put ''OTNcdTgwOWRcdTgwOThcdTgwOWJcdTgwOWFcdTgwYjJcdTgyNmZcdTgyOTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgyOGJcdTgyOGRcdTg5OGJcdTg5ZDJcdThhMDBcdThjMzdcdThjNDZcdThjNTVcdThjOWRcdThkNjRcdThkNzBcdThkYjNcdThlYWJcdThl''@;'; put 'put ''Y2FcdThmOWJcdThmYjBcdThmYzJcdThmYzZcdThmYzVcdThmYzRcdTVkZTFcdTkwOTFcdTkwYTJcdTkwYWFcdTkwYTZcdTkwYTNcdTkxNDlcdTkxYzZcdTkxY2NcdTk2MzJcdTk2MmVcdTk2MzFcdTk2MmFcdTk2MmNcdTRlMjZcdTRlNTZcdTRlNzNcdTRlOGJcdTRlOWJcdTRlOWVcdTRlYWJc''@;'; put 'put ''dTRlYWNcdTRmNmZcdTRmOWRcdTRmOGRcdTRmNzNcdTRmN2ZcdTRmNmNcdTRmOWJcdTRmOGJcdTRmODZcdTRmODNcdTRmNzBcdTRmNzVcdTRmODhcdTRmNjlcdTRmN2JcdTRmOTZcdTRmN2VcdTRmOGZcdTRmOTFcdTRmN2FcdTUxNTRcdTUxNTJcdTUxNTVcdTUxNjlcdTUxNzdcdTUxNzZcdTUx''@;'; put 'put ''NzhcdTUxYmRcdTUxZmRcdTUyM2JcdTUyMzhcdTUyMzdcdTUyM2FcdTUyMzBcdTUyMmVcdTUyMzZcdTUyNDFcdTUyYmVcdTUyYmJcdTUzNTJcdTUzNTRcdTUzNTNcdTUzNTFcdTUzNjZcdTUzNzdcdTUzNzhcdTUzNzlcdTUzZDZcdTUzZDRcdTUzZDdcdTU0NzNcdTU0NzVcdWZmZmQiLnNwbGl0''@;'; put 'put ''KCIiKSxnPTA7ZyE9eVsxNjhdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE2OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNjhdW2ddXT00MzAwOCtnLF9bNDMwMDgrZ109eVsxNjhdW2ddKTtmb3IoeVsxNjldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTU0OTZcdTU0NzhcdTU0OTVcdTU0ODBcdTU0N2JcdTU0NzdcdTU0ODRcdTU0OTJcdTU0ODZcdTU0N2NcdTU0OTBcdTU0NzFcdTU0NzZcdTU0OGNcdTU0OWFcdTU0NjJcdTU0NjhcdTU0OGJcdTU0N2RcdTU0OGVcdTU2ZmFcdTU3ODNcdTU3NzdcdTU3NmFcdTU3NjlcdTU3NjFc''@;'; put 'put ''dTU3NjZcdTU3NjRcdTU3N2NcdTU5MWNcdTU5NDlcdTU5NDdcdTU5NDhcdTU5NDRcdTU5NTRcdTU5YmVcdTU5YmJcdTU5ZDRcdTU5YjlcdTU5YWVcdTU5ZDFcdTU5YzZcdTU5ZDBcdTU5Y2RcdTU5Y2JcdTU5ZDNcdTU5Y2FcdTU5YWZcdTU5YjNcdTU5ZDJcdTU5YzVcdTViNWZcdTViNjRcdTVi''@;'; put 'put ''NjNcdTViOTdcdTViOWFcdTViOThcdTViOWNcdTViOTlcdTViOWJcdTVjMWFcdTVjNDhcdTVjNDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVjNDZcdTVjYjdcdTVjYTFcdTVjYjhcdTVjYTlcdTVjYWJcdTVjYjFcdTVjYjNcdTVlMThcdTVlMWFcdTVlMTZcdTVl''@;'; put 'put ''MTVcdTVlMWJcdTVlMTFcdTVlNzhcdTVlOWFcdTVlOTdcdTVlOWNcdTVlOTVcdTVlOTZcdTVlZjZcdTVmMjZcdTVmMjdcdTVmMjlcdTVmODBcdTVmODFcdTVmN2ZcdTVmN2NcdTVmZGRcdTVmZTBcdTVmZmRcdTVmZjVcdTVmZmZcdTYwMGZcdTYwMTRcdTYwMmZcdTYwMzVcdTYwMTZcdTYwMmFc''@;'; put 'put ''dTYwMTVcdTYwMjFcdTYwMjdcdTYwMjlcdTYwMmJcdTYwMWJcdTYyMTZcdTYyMTVcdTYyM2ZcdTYyM2VcdTYyNDBcdTYyN2ZcdTYyYzlcdTYyY2NcdTYyYzRcdTYyYmZcdTYyYzJcdTYyYjlcdTYyZDJcdTYyZGJcdTYyYWJcdTYyZDNcdTYyZDRcdTYyY2JcdTYyYzhcdTYyYThcdTYyYmRcdTYy''@;'; put 'put ''YmNcdTYyZDBcdTYyZDlcdTYyYzdcdTYyY2RcdTYyYjVcdTYyZGFcdTYyYjFcdTYyZDhcdTYyZDZcdTYyZDdcdTYyYzZcdTYyYWNcdTYyY2VcdTY1M2VcdTY1YTdcdTY1YmNcdTY1ZmFcdTY2MTRcdTY2MTNcdTY2MGNcdTY2MDZcdTY2MDJcdTY2MGVcdTY2MDBcdTY2MGZcdTY2MTVcdTY2MGFc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNjldLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE2OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNjldW2ddXT00MzI2NCtnLF9bNDMyNjQrZ109eVsxNjldW2ddKTtmb3IoeVsxNzBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY2MDdcdTY3MGRcdTY3MGJcdTY3NmRcdTY3OGJcdTY3OTVcdTY3NzFcdTY3OWNcdTY3NzNcdTY3NzdcdTY3ODdcdTY3OWRcdTY3OTdcdTY3NmZcdTY3NzBcdTY3N2ZcdTY3ODlcdTY3N2VcdTY3OTBcdTY3NzVcdTY3OWFcdTY3OTNcdTY3N2NcdTY3NmFc''@;'; put 'put ''dTY3NzJcdTZiMjNcdTZiNjZcdTZiNjdcdTZiN2ZcdTZjMTNcdTZjMWJcdTZjZTNcdTZjZThcdTZjZjNcdTZjYjFcdTZjY2NcdTZjZTVcdTZjYjNcdTZjYmRcdTZjYmVcdTZjYmNcdTZjZTJcdTZjYWJcdTZjZDVcdTZjZDNcdTZjYjhcdTZjYzRcdTZjYjlcdTZjYzFcdTZjYWVcdTZjZDdcdTZj''@;'; put 'put ''YzVcdTZjZjFcdTZjYmZcdTZjYmJcdTZjZTFcdTZjZGJcdTZjY2FcdTZjYWNcdTZjZWZcdTZjZGNcdTZjZDZcdTZjZTBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcwOTVcdTcwOGVcdTcwOTJcdTcwOGFcdTcwOTlcdTcyMmNcdTcyMmRcdTcyMzhcdTcyNDhcdTcy''@;'; put 'put ''NjdcdTcyNjlcdTcyYzBcdTcyY2VcdTcyZDlcdTcyZDdcdTcyZDBcdTczYTlcdTczYThcdTczOWZcdTczYWJcdTczYTVcdTc1M2RcdTc1OWRcdTc1OTlcdTc1OWFcdTc2ODRcdTc2YzJcdTc2ZjJcdTc2ZjRcdTc3ZTVcdTc3ZmRcdTc5M2VcdTc5NDBcdTc5NDFcdTc5YzlcdTc5YzhcdTdhN2Fc''@;'; put 'put ''dTdhNzlcdTdhZmFcdTdjZmVcdTdmNTRcdTdmOGNcdTdmOGJcdTgwMDVcdTgwYmFcdTgwYTVcdTgwYTJcdTgwYjFcdTgwYTFcdTgwYWJcdTgwYTlcdTgwYjRcdTgwYWFcdTgwYWZcdTgxZTVcdTgxZmVcdTgyMGRcdTgyYjNcdTgyOWRcdTgyOTlcdTgyYWRcdTgyYmRcdTgyOWZcdTgyYjlcdTgy''@;'; put 'put ''YjFcdTgyYWNcdTgyYTVcdTgyYWZcdTgyYjhcdTgyYTNcdTgyYjBcdTgyYmVcdTgyYjdcdTg2NGVcdTg2NzFcdTUyMWRcdTg4NjhcdThlY2JcdThmY2VcdThmZDRcdThmZDFcdTkwYjVcdTkwYjhcdTkwYjFcdTkwYjZcdTkxYzdcdTkxZDFcdTk1NzdcdTk1ODBcdTk2MWNcdTk2NDBcdTk2M2Zc''@;'; put 'put ''dTk2M2JcdTk2NDRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNzBdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE3MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNzBdW2ddXT00MzUyMCtnLF9bNDM1MjArZ109eVsxNzBdW2ddKTtmb3IoeVsxNzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2NDJcdTk2YjlcdTk2ZThcdTk3NTJcdTk3NWVcdTRlOWZcdTRlYWRcdTRlYWVcdTRmZTFcdTRmYjVcdTRmYWZcdTRmYmZcdTRmZTBcdTRmZDFcdTRmY2ZcdTRmZGRcdTRmYzNcdTRmYjZcdTRmZDhcdTRmZGZcdTRmY2FcdTRmZDdc''@;'; put 'put ''dTRmYWVcdTRmZDBcdTRmYzRcdTRmYzJcdTRmZGFcdTRmY2VcdTRmZGVcdTRmYjdcdTUxNTdcdTUxOTJcdTUxOTFcdTUxYTBcdTUyNGVcdTUyNDNcdTUyNGFcdTUyNGRcdTUyNGNcdTUyNGJcdTUyNDdcdTUyYzdcdTUyYzlcdTUyYzNcdTUyYzFcdTUzMGRcdTUzNTdcdTUzN2JcdTUzOWFcdTUz''@;'; put 'put ''ZGJcdTU0YWNcdTU0YzBcdTU0YThcdTU0Y2VcdTU0YzlcdTU0YjhcdTU0YTZcdTU0YjNcdTU0YzdcdTU0YzJcdTU0YmRcdTU0YWFcdTU0YzFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YzRcdTU0YzhcdTU0YWZcdTU0YWJcdTU0YjFcdTU0YmJcdTU0YTlcdTU0''@;'; put 'put ''YTdcdTU0YmZcdTU2ZmZcdTU3ODJcdTU3OGJcdTU3YTBcdTU3YTNcdTU3YTJcdTU3Y2VcdTU3YWVcdTU3OTNcdTU5NTVcdTU5NTFcdTU5NGZcdTU5NGVcdTU5NTBcdTU5ZGNcdTU5ZDhcdTU5ZmZcdTU5ZTNcdTU5ZThcdTVhMDNcdTU5ZTVcdTU5ZWFcdTU5ZGFcdTU5ZTZcdTVhMDFcdTU5ZmJc''@;'; put 'put ''dTViNjlcdTViYTNcdTViYTZcdTViYTRcdTViYTJcdTViYTVcdTVjMDFcdTVjNGVcdTVjNGZcdTVjNGRcdTVjNGJcdTVjZDlcdTVjZDJcdTVkZjdcdTVlMWRcdTVlMjVcdTVlMWZcdTVlN2RcdTVlYTBcdTVlYTZcdTVlZmFcdTVmMDhcdTVmMmRcdTVmNjVcdTVmODhcdTVmODVcdTVmOGFcdTVm''@;'; put 'put ''OGJcdTVmODdcdTVmOGNcdTVmODlcdTYwMTJcdTYwMWRcdTYwMjBcdTYwMjVcdTYwMGVcdTYwMjhcdTYwNGRcdTYwNzBcdTYwNjhcdTYwNjJcdTYwNDZcdTYwNDNcdTYwNmNcdTYwNmJcdTYwNmFcdTYwNjRcdTYyNDFcdTYyZGNcdTYzMTZcdTYzMDlcdTYyZmNcdTYyZWRcdTYzMDFcdTYyZWVc''@;'; put 'put ''dTYyZmRcdTYzMDdcdTYyZjFcdTYyZjdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNzFdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE3MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNzFdW2ddXT00Mzc3NitnLF9bNDM3NzYrZ109eVsxNzFdW2ddKTtmb3IoeVsxNzJdPSJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYyZWZcdTYyZWNcdTYyZmVcdTYyZjRcdTYzMTFcdTYzMDJcdTY1M2ZcdTY1NDVcdTY1YWJcdTY1YmRcdTY1ZTJcdTY2MjVcdTY2MmRcdTY2MjBcdTY2MjdcdTY2MmZcdTY2MWZcdTY2MjhcdTY2MzFcdTY2MjRc''@;'; put 'put ''dTY2ZjdcdTY3ZmZcdTY3ZDNcdTY3ZjFcdTY3ZDRcdTY3ZDBcdTY3ZWNcdTY3YjZcdTY3YWZcdTY3ZjVcdTY3ZTlcdTY3ZWZcdTY3YzRcdTY3ZDFcdTY3YjRcdTY3ZGFcdTY3ZTVcdTY3YjhcdTY3Y2ZcdTY3ZGVcdTY3ZjNcdTY3YjBcdTY3ZDlcdTY3ZTJcdTY3ZGRcdTY3ZDJcdTZiNmFcdTZi''@;'; put 'put ''ODNcdTZiODZcdTZiYjVcdTZiZDJcdTZiZDdcdTZjMWZcdTZjYzlcdTZkMGJcdTZkMzJcdTZkMmFcdTZkNDFcdTZkMjVcdTZkMGNcdTZkMzFcdTZkMWVcdTZkMTdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkM2JcdTZkM2RcdTZkM2VcdTZkMzZcdTZkMWJcdTZj''@;'; put 'put ''ZjVcdTZkMzlcdTZkMjdcdTZkMzhcdTZkMjlcdTZkMmVcdTZkMzVcdTZkMGVcdTZkMmJcdTcwYWJcdTcwYmFcdTcwYjNcdTcwYWNcdTcwYWZcdTcwYWRcdTcwYjhcdTcwYWVcdTcwYTRcdTcyMzBcdTcyNzJcdTcyNmZcdTcyNzRcdTcyZTlcdTcyZTBcdTcyZTFcdTczYjdcdTczY2FcdTczYmJc''@;'; put 'put ''dTczYjJcdTczY2RcdTczYzBcdTczYjNcdTc1MWFcdTc1MmRcdTc1NGZcdTc1NGNcdTc1NGVcdTc1NGJcdTc1YWJcdTc1YTRcdTc1YTVcdTc1YTJcdTc1YTNcdTc2NzhcdTc2ODZcdTc2ODdcdTc2ODhcdTc2YzhcdTc2YzZcdTc2YzNcdTc2YzVcdTc3MDFcdTc2ZjlcdTc2ZjhcdTc3MDlcdTc3''@;'; put 'put ''MGJcdTc2ZmVcdTc2ZmNcdTc3MDdcdTc3ZGNcdTc4MDJcdTc4MTRcdTc4MGNcdTc4MGRcdTc5NDZcdTc5NDlcdTc5NDhcdTc5NDdcdTc5YjlcdTc5YmFcdTc5ZDFcdTc5ZDJcdTc5Y2JcdTdhN2ZcdTdhODFcdTdhZmZcdTdhZmRcdTdjN2RcdTdkMDJcdTdkMDVcdTdkMDBcdTdkMDlcdTdkMDdc''@;'; put 'put ''dTdkMDRcdTdkMDZcdTdmMzhcdTdmOGVcdTdmYmZcdTgwMDRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNzJdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE3Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNzJdW2ddXT00NDAzMitnLF9bNDQwMzIrZ109eVsxNzJdW2ddKTtmb3IoeVsxNzNd''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwMTBcdTgwMGRcdTgwMTFcdTgwMzZcdTgwZDZcdTgwZTVcdTgwZGFcdTgwYzNcdTgwYzRcdTgwY2NcdTgwZTFcdTgwZGJcdTgwY2VcdTgwZGVcdTgwZTRcdTgwZGRcdTgxZjRcdTgyMjJc''@;'; put 'put ''dTgyZTdcdTgzMDNcdTgzMDVcdTgyZTNcdTgyZGJcdTgyZTZcdTgzMDRcdTgyZTVcdTgzMDJcdTgzMDlcdTgyZDJcdTgyZDdcdTgyZjFcdTgzMDFcdTgyZGNcdTgyZDRcdTgyZDFcdTgyZGVcdTgyZDNcdTgyZGZcdTgyZWZcdTgzMDZcdTg2NTBcdTg2NzlcdTg2N2JcdTg2N2FcdTg4NGRcdTg4''@;'; put 'put ''NmJcdTg5ODFcdTg5ZDRcdThhMDhcdThhMDJcdThhMDNcdThjOWVcdThjYTBcdThkNzRcdThkNzNcdThkYjRcdThlY2RcdThlY2NcdThmZjBcdThmZTZcdThmZTJcdThmZWFcdThmZTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThmZWRcdThmZWJcdThmZTRcdThm''@;'; put 'put ''ZThcdTkwY2FcdTkwY2VcdTkwYzFcdTkwYzNcdTkxNGJcdTkxNGFcdTkxY2RcdTk1ODJcdTk2NTBcdTk2NGJcdTk2NGNcdTk2NGRcdTk3NjJcdTk3NjlcdTk3Y2JcdTk3ZWRcdTk3ZjNcdTk4MDFcdTk4YThcdTk4ZGJcdTk4ZGZcdTk5OTZcdTk5OTlcdTRlNThcdTRlYjNcdTUwMGNcdTUwMGRc''@;'; put 'put ''dTUwMjNcdTRmZWZcdTUwMjZcdTUwMjVcdTRmZjhcdTUwMjlcdTUwMTZcdTUwMDZcdTUwM2NcdTUwMWZcdTUwMWFcdTUwMTJcdTUwMTFcdTRmZmFcdTUwMDBcdTUwMTRcdTUwMjhcdTRmZjFcdTUwMjFcdTUwMGJcdTUwMTlcdTUwMThcdTRmZjNcdTRmZWVcdTUwMmRcdTUwMmFcdTRmZmVcdTUw''@;'; put 'put ''MmJcdTUwMDlcdTUxN2NcdTUxYTRcdTUxYTVcdTUxYTJcdTUxY2RcdTUxY2NcdTUxYzZcdTUxY2JcdTUyNTZcdTUyNWNcdTUyNTRcdTUyNWJcdTUyNWRcdTUzMmFcdTUzN2ZcdTUzOWZcdTUzOWRcdTUzZGZcdTU0ZThcdTU1MTBcdTU1MDFcdTU1MzdcdTU0ZmNcdTU0ZTVcdTU0ZjJcdTU1MDZc''@;'; put 'put ''dTU0ZmFcdTU1MTRcdTU0ZTlcdTU0ZWRcdTU0ZTFcdTU1MDlcdTU0ZWVcdTU0ZWFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNzNdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE3M11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNzNdW2ddXT00NDI4OCtnLF9bNDQyODgrZ109eVsxNzNdW2dd''@;'; put 'put ''KTtmb3IoeVsxNzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0ZTZcdTU1MjdcdTU1MDdcdTU0ZmRcdTU1MGZcdTU3MDNcdTU3MDRcdTU3YzJcdTU3ZDRcdTU3Y2JcdTU3YzNcdTU4MDlcdTU5MGZcdTU5NTdcdTU5NThcdTU5NWFc''@;'; put 'put ''dTVhMTFcdTVhMThcdTVhMWNcdTVhMWZcdTVhMWJcdTVhMTNcdTU5ZWNcdTVhMjBcdTVhMjNcdTVhMjlcdTVhMjVcdTVhMGNcdTVhMDlcdTViNmJcdTVjNThcdTViYjBcdTViYjNcdTViYjZcdTViYjRcdTViYWVcdTViYjVcdTViYjlcdTViYjhcdTVjMDRcdTVjNTFcdTVjNTVcdTVjNTBcdTVj''@;'; put 'put ''ZWRcdTVjZmRcdTVjZmJcdTVjZWFcdTVjZThcdTVjZjBcdTVjZjZcdTVkMDFcdTVjZjRcdTVkZWVcdTVlMmRcdTVlMmJcdTVlYWJcdTVlYWRcdTVlYTdcdTVmMzFcdTVmOTJcdTVmOTFcdTVmOTBcdTYwNTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNjNcdTYw''@;'; put 'put ''NjVcdTYwNTBcdTYwNTVcdTYwNmRcdTYwNjlcdTYwNmZcdTYwODRcdTYwOWZcdTYwOWFcdTYwOGRcdTYwOTRcdTYwOGNcdTYwODVcdTYwOTZcdTYyNDdcdTYyZjNcdTYzMDhcdTYyZmZcdTYzNGVcdTYzM2VcdTYzMmZcdTYzNTVcdTYzNDJcdTYzNDZcdTYzNGZcdTYzNDlcdTYzM2FcdTYzNTBc''@;'; put 'put ''dTYzM2RcdTYzMmFcdTYzMmJcdTYzMjhcdTYzNGRcdTYzNGNcdTY1NDhcdTY1NDlcdTY1OTlcdTY1YzFcdTY1YzVcdTY2NDJcdTY2NDlcdTY2NGZcdTY2NDNcdTY2NTJcdTY2NGNcdTY2NDVcdTY2NDFcdTY2ZjhcdTY3MTRcdTY3MTVcdTY3MTdcdTY4MjFcdTY4MzhcdTY4NDhcdTY4NDZcdTY4''@;'; put 'put ''NTNcdTY4MzlcdTY4NDJcdTY4NTRcdTY4MjlcdTY4YjNcdTY4MTdcdTY4NGNcdTY4NTFcdTY4M2RcdTY3ZjRcdTY4NTBcdTY4NDBcdTY4M2NcdTY4NDNcdTY4MmFcdTY4NDVcdTY4MTNcdTY4MThcdTY4NDFcdTZiOGFcdTZiODlcdTZiYjdcdTZjMjNcdTZjMjdcdTZjMjhcdTZjMjZcdTZjMjRc''@;'; put 'put ''dTZjZjBcdTZkNmFcdTZkOTVcdTZkODhcdTZkODdcdTZkNjZcdTZkNzhcdTZkNzdcdTZkNTlcdTZkOTNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNzRdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE3NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNzRdW2ddXT00NDU0NCtnLF9bNDQ1NDQr''@;'; put 'put ''Z109eVsxNzRdW2ddKTtmb3IoeVsxNzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkNmNcdTZkODlcdTZkNmVcdTZkNWFcdTZkNzRcdTZkNjlcdTZkOGNcdTZkOGFcdTZkNzlcdTZkODVcdTZkNjVcdTZkOTRcdTcwY2FcdTcwZDhc''@;'; put 'put ''dTcwZTRcdTcwZDlcdTcwYzhcdTcwY2ZcdTcyMzlcdTcyNzlcdTcyZmNcdTcyZjlcdTcyZmRcdTcyZjhcdTcyZjdcdTczODZcdTczZWRcdTc0MDlcdTczZWVcdTczZTBcdTczZWFcdTczZGVcdTc1NTRcdTc1NWRcdTc1NWNcdTc1NWFcdTc1NTlcdTc1YmVcdTc1YzVcdTc1YzdcdTc1YjJcdTc1''@;'; put 'put ''YjNcdTc1YmRcdTc1YmNcdTc1YjlcdTc1YzJcdTc1YjhcdTc2OGJcdTc2YjBcdTc2Y2FcdTc2Y2RcdTc2Y2VcdTc3MjlcdTc3MWZcdTc3MjBcdTc3MjhcdTc3ZTlcdTc4MzBcdTc4MjdcdTc4MzhcdTc4MWRcdTc4MzRcdTc4MzdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTc4MjVcdTc4MmRcdTc4MjBcdTc4MWZcdTc4MzJcdTc5NTVcdTc5NTBcdTc5NjBcdTc5NWZcdTc5NTZcdTc5NWVcdTc5NWRcdTc5NTdcdTc5NWFcdTc5ZTRcdTc5ZTNcdTc5ZTdcdTc5ZGZcdTc5ZTZcdTc5ZTlcdTc5ZDhcdTdhODRcdTdhODhcdTdhZDlcdTdiMDZcdTdiMTFcdTdjODlc''@;'; put 'put ''dTdkMjFcdTdkMTdcdTdkMGJcdTdkMGFcdTdkMjBcdTdkMjJcdTdkMTRcdTdkMTBcdTdkMTVcdTdkMWFcdTdkMWNcdTdkMGRcdTdkMTlcdTdkMWJcdTdmM2FcdTdmNWZcdTdmOTRcdTdmYzVcdTdmYzFcdTgwMDZcdTgwMThcdTgwMTVcdTgwMTlcdTgwMTdcdTgwM2RcdTgwM2ZcdTgwZjFcdTgx''@;'; put 'put ''MDJcdTgwZjBcdTgxMDVcdTgwZWRcdTgwZjRcdTgxMDZcdTgwZjhcdTgwZjNcdTgxMDhcdTgwZmRcdTgxMGFcdTgwZmNcdTgwZWZcdTgxZWRcdTgxZWNcdTgyMDBcdTgyMTBcdTgyMmFcdTgyMmJcdTgyMjhcdTgyMmNcdTgyYmJcdTgzMmJcdTgzNTJcdTgzNTRcdTgzNGFcdTgzMzhcdTgzNTBc''@;'; put 'put ''dTgzNDlcdTgzMzVcdTgzMzRcdTgzNGZcdTgzMzJcdTgzMzlcdTgzMzZcdTgzMTdcdTgzNDBcdTgzMzFcdTgzMjhcdTgzNDNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNzVdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE3NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNzVdW2ddXT00NDgw''@;'; put 'put ''MCtnLF9bNDQ4MDArZ109eVsxNzVdW2ddKTtmb3IoeVsxNzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg2NTRcdTg2OGFcdTg2YWFcdTg2OTNcdTg2YTRcdTg2YTlcdTg2OGNcdTg2YTNcdTg2OWNcdTg4NzBcdTg4NzdcdTg4ODFc''@;'; put 'put ''dTg4ODJcdTg4N2RcdTg4NzlcdThhMThcdThhMTBcdThhMGVcdThhMGNcdThhMTVcdThhMGFcdThhMTdcdThhMTNcdThhMTZcdThhMGZcdThhMTFcdThjNDhcdThjN2FcdThjNzlcdThjYTFcdThjYTJcdThkNzdcdThlYWNcdThlZDJcdThlZDRcdThlY2ZcdThmYjFcdTkwMDFcdTkwMDZcdThm''@;'; put 'put ''ZjdcdTkwMDBcdThmZmFcdThmZjRcdTkwMDNcdThmZmRcdTkwMDVcdThmZjhcdTkwOTVcdTkwZTFcdTkwZGRcdTkwZTJcdTkxNTJcdTkxNGRcdTkxNGNcdTkxZDhcdTkxZGRcdTkxZDdcdTkxZGNcdTkxZDlcdTk1ODNcdTk2NjJcdTk2NjNcdTk2NjFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdTk2NWJcdTk2NWRcdTk2NjRcdTk2NThcdTk2NWVcdTk2YmJcdTk4ZTJcdTk5YWNcdTlhYThcdTlhZDhcdTliMjVcdTliMzJcdTliM2NcdTRlN2VcdTUwN2FcdTUwN2RcdTUwNWNcdTUwNDdcdTUwNDNcdTUwNGNcdTUwNWFcdTUwNDlcdTUwNjVcdTUwNzZcdTUwNGVc''@;'; put 'put ''dTUwNTVcdTUwNzVcdTUwNzRcdTUwNzdcdTUwNGZcdTUwMGZcdTUwNmZcdTUwNmRcdTUxNWNcdTUxOTVcdTUxZjBcdTUyNmFcdTUyNmZcdTUyZDJcdTUyZDlcdTUyZDhcdTUyZDVcdTUzMTBcdTUzMGZcdTUzMTlcdTUzM2ZcdTUzNDBcdTUzM2VcdTUzYzNcdTY2ZmNcdTU1NDZcdTU1NmFcdTU1''@;'; put 'put ''NjZcdTU1NDRcdTU1NWVcdTU1NjFcdTU1NDNcdTU1NGFcdTU1MzFcdTU1NTZcdTU1NGZcdTU1NTVcdTU1MmZcdTU1NjRcdTU1MzhcdTU1MmVcdTU1NWNcdTU1MmNcdTU1NjNcdTU1MzNcdTU1NDFcdTU1NTdcdTU3MDhcdTU3MGJcdTU3MDlcdTU3ZGZcdTU4MDVcdTU4MGFcdTU4MDZcdTU3ZTBc''@;'; put 'put ''dTU3ZTRcdTU3ZmFcdTU4MDJcdTU4MzVcdTU3ZjdcdTU3ZjlcdTU5MjBcdTU5NjJcdTVhMzZcdTVhNDFcdTVhNDlcdTVhNjZcdTVhNmFcdTVhNDBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNzZdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE3Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsx''@;'; put 'put ''NzZdW2ddXT00NTA1NitnLF9bNDUwNTYrZ109eVsxNzZdW2ddKTtmb3IoeVsxNzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVhM2NcdTVhNjJcdTVhNWFcdTVhNDZcdTVhNGFcdTViNzBcdTViYzdcdTViYzVcdTViYzRcdTViYzJc''@;'; put 'put ''dTViYmZcdTViYzZcdTVjMDlcdTVjMDhcdTVjMDdcdTVjNjBcdTVjNWNcdTVjNWRcdTVkMDdcdTVkMDZcdTVkMGVcdTVkMWJcdTVkMTZcdTVkMjJcdTVkMTFcdTVkMjlcdTVkMTRcdTVkMTlcdTVkMjRcdTVkMjdcdTVkMTdcdTVkZTJcdTVlMzhcdTVlMzZcdTVlMzNcdTVlMzdcdTVlYjdcdTVl''@;'; put 'put ''YjhcdTVlYjZcdTVlYjVcdTVlYmVcdTVmMzVcdTVmMzdcdTVmNTdcdTVmNmNcdTVmNjlcdTVmNmJcdTVmOTdcdTVmOTlcdTVmOWVcdTVmOThcdTVmYTFcdTVmYTBcdTVmOWNcdTYwN2ZcdTYwYTNcdTYwODlcdTYwYTBcdTYwYThcdTYwY2JcdTYwYjRcdTYwZTZcdTYwYmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwYzVcdTYwYmJcdTYwYjVcdTYwZGNcdTYwYmNcdTYwZDhcdTYwZDVcdTYwYzZcdTYwZGZcdTYwYjhcdTYwZGFcdTYwYzdcdTYyMWFcdTYyMWJcdTYyNDhcdTYzYTBcdTYzYTdcdTYzNzJcdTYzOTZcdTYzYTJcdTYzYTVcdTYzNzdcdTYzNjdc''@;'; put 'put ''dTYzOThcdTYzYWFcdTYzNzFcdTYzYTlcdTYzODlcdTYzODNcdTYzOWJcdTYzNmJcdTYzYThcdTYzODRcdTYzODhcdTYzOTlcdTYzYTFcdTYzYWNcdTYzOTJcdTYzOGZcdTYzODBcdTYzN2JcdTYzNjlcdTYzNjhcdTYzN2FcdTY1NWRcdTY1NTZcdTY1NTFcdTY1NTlcdTY1NTdcdTU1NWZcdTY1''@;'; put 'put ''NGZcdTY1NThcdTY1NTVcdTY1NTRcdTY1OWNcdTY1OWJcdTY1YWNcdTY1Y2ZcdTY1Y2JcdTY1Y2NcdTY1Y2VcdTY2NWRcdTY2NWFcdTY2NjRcdTY2NjhcdTY2NjZcdTY2NWVcdTY2ZjlcdTUyZDdcdTY3MWJcdTY4ODFcdTY4YWZcdTY4YTJcdTY4OTNcdTY4YjVcdTY4N2ZcdTY4NzZcdTY4YjFc''@;'; put 'put ''dTY4YTdcdTY4OTdcdTY4YjBcdTY4ODNcdTY4YzRcdTY4YWRcdTY4ODZcdTY4ODVcdTY4OTRcdTY4OWRcdTY4YThcdTY4OWZcdTY4YTFcdTY4ODJcdTZiMzJcdTZiYmFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNzddLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE3N11bZ10uY2hhckNvZGVB''@;'; put 'put ''dCgwKSYmKElbeVsxNzddW2ddXT00NTMxMitnLF9bNDUzMTIrZ109eVsxNzddW2ddKTtmb3IoeVsxNzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZiZWJcdTZiZWNcdTZjMmJcdTZkOGVcdTZkYmNcdTZkZjNcdTZkZDlcdTZkYjJc''@;'; put 'put ''dTZkZTFcdTZkY2NcdTZkZTRcdTZkZmJcdTZkZmFcdTZlMDVcdTZkYzdcdTZkY2JcdTZkYWZcdTZkZDFcdTZkYWVcdTZkZGVcdTZkZjlcdTZkYjhcdTZkZjdcdTZkZjVcdTZkYzVcdTZkZDJcdTZlMWFcdTZkYjVcdTZkZGFcdTZkZWJcdTZkZDhcdTZkZWFcdTZkZjFcdTZkZWVcdTZkZThcdTZk''@;'; put 'put ''YzZcdTZkYzRcdTZkYWFcdTZkZWNcdTZkYmZcdTZkZTZcdTcwZjlcdTcxMDlcdTcxMGFcdTcwZmRcdTcwZWZcdTcyM2RcdTcyN2RcdTcyODFcdTczMWNcdTczMWJcdTczMTZcdTczMTNcdTczMTlcdTczODdcdTc0MDVcdTc0MGFcdTc0MDNcdTc0MDZcdTczZmVcdTc0MGRcdTc0ZTBcdTc0ZjZc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0ZjdcdTc1MWNcdTc1MjJcdTc1NjVcdTc1NjZcdTc1NjJcdTc1NzBcdTc1OGZcdTc1ZDRcdTc1ZDVcdTc1YjVcdTc1Y2FcdTc1Y2RcdTc2OGVcdTc2ZDRcdTc2ZDJcdTc2ZGJcdTc3MzdcdTc3M2VcdTc3M2NcdTc3MzZc''@;'; put 'put ''dTc3MzhcdTc3M2FcdTc4NmJcdTc4NDNcdTc4NGVcdTc5NjVcdTc5NjhcdTc5NmRcdTc5ZmJcdTdhOTJcdTdhOTVcdTdiMjBcdTdiMjhcdTdiMWJcdTdiMmNcdTdiMjZcdTdiMTlcdTdiMWVcdTdiMmVcdTdjOTJcdTdjOTdcdTdjOTVcdTdkNDZcdTdkNDNcdTdkNzFcdTdkMmVcdTdkMzlcdTdk''@;'; put 'put ''M2NcdTdkNDBcdTdkMzBcdTdkMzNcdTdkNDRcdTdkMmZcdTdkNDJcdTdkMzJcdTdkMzFcdTdmM2RcdTdmOWVcdTdmOWFcdTdmY2NcdTdmY2VcdTdmZDJcdTgwMWNcdTgwNGFcdTgwNDZcdTgxMmZcdTgxMTZcdTgxMjNcdTgxMmJcdTgxMjlcdTgxMzBcdTgxMjRcdTgyMDJcdTgyMzVcdTgyMzdc''@;'; put 'put ''dTgyMzZcdTgyMzlcdTgzOGVcdTgzOWVcdTgzOThcdTgzNzhcdTgzYTJcdTgzOTZcdTgzYmRcdTgzYWJcdTgzOTJcdTgzOGFcdTgzOTNcdTgzODlcdTgzYTBcdTgzNzdcdTgzN2JcdTgzN2NcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNzhdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE3OF1b''@;'; put 'put ''Z10uY2hhckNvZGVBdCgwKSYmKElbeVsxNzhdW2ddXT00NTU2OCtnLF9bNDU1NjgrZ109eVsxNzhdW2ddKTtmb3IoeVsxNzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgzODZcdTgzYTdcdTg2NTVcdTVmNmFcdTg2YzdcdTg2YzBc''@;'; put 'put ''dTg2YjZcdTg2YzRcdTg2YjVcdTg2YzZcdTg2Y2JcdTg2YjFcdTg2YWZcdTg2YzlcdTg4NTNcdTg4OWVcdTg4ODhcdTg4YWJcdTg4OTJcdTg4OTZcdTg4OGRcdTg4OGJcdTg5OTNcdTg5OGZcdThhMmFcdThhMWRcdThhMjNcdThhMjVcdThhMzFcdThhMmRcdThhMWZcdThhMWJcdThhMjJcdThj''@;'; put 'put ''NDlcdThjNWFcdThjYTlcdThjYWNcdThjYWJcdThjYThcdThjYWFcdThjYTdcdThkNjdcdThkNjZcdThkYmVcdThkYmFcdThlZGJcdThlZGZcdTkwMTlcdTkwMGRcdTkwMWFcdTkwMTdcdTkwMjNcdTkwMWZcdTkwMWRcdTkwMTBcdTkwMTVcdTkwMWVcdTkwMjBcdTkwMGZcdTkwMjJcdTkwMTZc''@;'; put 'put ''dTkwMWJcdTkwMTRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwZThcdTkwZWRcdTkwZmRcdTkxNTdcdTkxY2VcdTkxZjVcdTkxZTZcdTkxZTNcdTkxZTdcdTkxZWRcdTkxZTlcdTk1ODlcdTk2NmFcdTk2NzVcdTk2NzNcdTk2NzhcdTk2NzBcdTk2NzRcdTk2NzZc''@;'; put 'put ''dTk2NzdcdTk2NmNcdTk2YzBcdTk2ZWFcdTk2ZTlcdTdhZTBcdTdhZGZcdTk4MDJcdTk4MDNcdTliNWFcdTljZTVcdTllNzVcdTllN2ZcdTllYTVcdTllYmJcdTUwYTJcdTUwOGRcdTUwODVcdTUwOTlcdTUwOTFcdTUwODBcdTUwOTZcdTUwOThcdTUwOWFcdTY3MDBcdTUxZjFcdTUyNzJcdTUy''@;'; put 'put ''NzRcdTUyNzVcdTUyNjlcdTUyZGVcdTUyZGRcdTUyZGJcdTUzNWFcdTUzYTVcdTU1N2JcdTU1ODBcdTU1YTdcdTU1N2NcdTU1OGFcdTU1OWRcdTU1OThcdTU1ODJcdTU1OWNcdTU1YWFcdTU1OTRcdTU1ODdcdTU1OGJcdTU1ODNcdTU1YjNcdTU1YWVcdTU1OWZcdTU1M2VcdTU1YjJcdTU1OWFc''@;'; put 'put ''dTU1YmJcdTU1YWNcdTU1YjFcdTU1N2VcdTU1ODlcdTU1YWJcdTU1OTlcdTU3MGRcdTU4MmZcdTU4MmFcdTU4MzRcdTU4MjRcdTU4MzBcdTU4MzFcdTU4MjFcdTU4MWRcdTU4MjBcdTU4ZjlcdTU4ZmFcdTU5NjBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxNzldLmxlbmd0aDsrK2cpNjU1''@;'; put 'put ''MzMhPT15WzE3OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxNzldW2ddXT00NTgyNCtnLF9bNDU4MjQrZ109eVsxNzldW2ddKTtmb3IoeVsxODBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVhNzdcdTVhOWFcdTVhN2ZcdTVhOTJc''@;'; put 'put ''dTVhOWJcdTVhYTdcdTViNzNcdTViNzFcdTViZDJcdTViY2NcdTViZDNcdTViZDBcdTVjMGFcdTVjMGJcdTVjMzFcdTVkNGNcdTVkNTBcdTVkMzRcdTVkNDdcdTVkZmRcdTVlNDVcdTVlM2RcdTVlNDBcdTVlNDNcdTVlN2VcdTVlY2FcdTVlYzFcdTVlYzJcdTVlYzRcdTVmM2NcdTVmNmRcdTVm''@;'; put 'put ''YTlcdTVmYWFcdTVmYThcdTYwZDFcdTYwZTFcdTYwYjJcdTYwYjZcdTYwZTBcdTYxMWNcdTYxMjNcdTYwZmFcdTYxMTVcdTYwZjBcdTYwZmJcdTYwZjRcdTYxNjhcdTYwZjFcdTYxMGVcdTYwZjZcdTYxMDlcdTYxMDBcdTYxMTJcdTYyMWZcdTYyNDlcdTYzYTNcdTYzOGNcdTYzY2ZcdTYzYzBc''@;'; put 'put ''dTYzZTlcdTYzYzlcdTYzYzZcdTYzY2RcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYzZDJcdTYzZTNcdTYzZDBcdTYzZTFcdTYzZDZcdTYzZWRcdTYzZWVcdTYzNzZcdTYzZjRcdTYzZWFcdTYzZGJcdTY0NTJcdTYzZGFcdTYzZjlcdTY1NWVcdTY1NjZcdTY1NjJc''@;'; put 'put ''dTY1NjNcdTY1OTFcdTY1OTBcdTY1YWZcdTY2NmVcdTY2NzBcdTY2NzRcdTY2NzZcdTY2NmZcdTY2OTFcdTY2N2FcdTY2N2VcdTY2NzdcdTY2ZmVcdTY2ZmZcdTY3MWZcdTY3MWRcdTY4ZmFcdTY4ZDVcdTY4ZTBcdTY4ZDhcdTY4ZDdcdTY5MDVcdTY4ZGZcdTY4ZjVcdTY4ZWVcdTY4ZTdcdTY4''@;'; put 'put ''ZjlcdTY4ZDJcdTY4ZjJcdTY4ZTNcdTY4Y2JcdTY4Y2RcdTY5MGRcdTY5MTJcdTY5MGVcdTY4YzlcdTY4ZGFcdTY5NmVcdTY4ZmJcdTZiM2VcdTZiM2FcdTZiM2RcdTZiOThcdTZiOTZcdTZiYmNcdTZiZWZcdTZjMmVcdTZjMmZcdTZjMmNcdTZlMmZcdTZlMzhcdTZlNTRcdTZlMjFcdTZlMzJc''@;'; put 'put ''dTZlNjdcdTZlNGFcdTZlMjBcdTZlMjVcdTZlMjNcdTZlMWJcdTZlNWJcdTZlNThcdTZlMjRcdTZlNTZcdTZlNmVcdTZlMmRcdTZlMjZcdTZlNmZcdTZlMzRcdTZlNGRcdTZlM2FcdTZlMmNcdTZlNDNcdTZlMWRcdTZlM2VcdTZlY2JcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxODBdLmxl''@;'; put 'put ''bmd0aDsrK2cpNjU1MzMhPT15WzE4MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxODBdW2ddXT00NjA4MCtnLF9bNDYwODArZ109eVsxODBdW2ddKTtmb3IoeVsxODFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZlODlcdTZlMTlc''@;'; put 'put ''dTZlNGVcdTZlNjNcdTZlNDRcdTZlNzJcdTZlNjlcdTZlNWZcdTcxMTlcdTcxMWFcdTcxMjZcdTcxMzBcdTcxMjFcdTcxMzZcdTcxNmVcdTcxMWNcdTcyNGNcdTcyODRcdTcyODBcdTczMzZcdTczMjVcdTczMzRcdTczMjlcdTc0M2FcdTc0MmFcdTc0MzNcdTc0MjJcdTc0MjVcdTc0MzVcdTc0''@;'; put 'put ''MzZcdTc0MzRcdTc0MmZcdTc0MWJcdTc0MjZcdTc0MjhcdTc1MjVcdTc1MjZcdTc1NmJcdTc1NmFcdTc1ZTJcdTc1ZGJcdTc1ZTNcdTc1ZDlcdTc1ZDhcdTc1ZGVcdTc1ZTBcdTc2N2JcdTc2N2NcdTc2OTZcdTc2OTNcdTc2YjRcdTc2ZGNcdTc3NGZcdTc3ZWRcdTc4NWRcdTc4NmNcdTc4NmZc''@;'; put 'put ''dTdhMGRcdTdhMDhcdTdhMGJcdTdhMDVcdTdhMDBcdTdhOThcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhOTdcdTdhOTZcdTdhZTVcdTdhZTNcdTdiNDlcdTdiNTZcdTdiNDZcdTdiNTBcdTdiNTJcdTdiNTRcdTdiNGRcdTdiNGJcdTdiNGZcdTdiNTFcdTdjOWZc''@;'; put 'put ''dTdjYTVcdTdkNWVcdTdkNTBcdTdkNjhcdTdkNTVcdTdkMmJcdTdkNmVcdTdkNzJcdTdkNjFcdTdkNjZcdTdkNjJcdTdkNzBcdTdkNzNcdTU1ODRcdTdmZDRcdTdmZDVcdTgwMGJcdTgwNTJcdTgwODVcdTgxNTVcdTgxNTRcdTgxNGJcdTgxNTFcdTgxNGVcdTgxMzlcdTgxNDZcdTgxM2VcdTgx''@;'; put 'put ''NGNcdTgxNTNcdTgxNzRcdTgyMTJcdTgyMWNcdTgzZTlcdTg0MDNcdTgzZjhcdTg0MGRcdTgzZTBcdTgzYzVcdTg0MGJcdTgzYzFcdTgzZWZcdTgzZjFcdTgzZjRcdTg0NTdcdTg0MGFcdTgzZjBcdTg0MGNcdTgzY2NcdTgzZmRcdTgzZjJcdTgzY2FcdTg0MzhcdTg0MGVcdTg0MDRcdTgzZGNc''@;'; put 'put ''dTg0MDdcdTgzZDRcdTgzZGZcdTg2NWJcdTg2ZGZcdTg2ZDlcdTg2ZWRcdTg2ZDRcdTg2ZGJcdTg2ZTRcdTg2ZDBcdTg2ZGVcdTg4NTdcdTg4YzFcdTg4YzJcdTg4YjFcdTg5ODNcdTg5OTZcdThhM2JcdThhNjBcdThhNTVcdThhNWVcdThhM2NcdThhNDFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7''@;'; put 'put ''ZyE9eVsxODFdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE4MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxODFdW2ddXT00NjMzNitnLF9bNDYzMzYrZ109eVsxODFdW2ddKTtmb3IoeVsxODJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dThhNTRcdThhNWJcdThhNTBcdThhNDZcdThhMzRcdThhM2FcdThhMzZcdThhNTZcdThjNjFcdThjODJcdThjYWZcdThjYmNcdThjYjNcdThjYmRcdThjYzFcdThjYmJcdThjYzBcdThjYjRcdThjYjdcdThjYjZcdThjYmZcdThjYjhcdThkOGFcdThkODVcdThkODFcdThkY2VcdThkZGRcdThk''@;'; put 'put ''Y2JcdThkZGFcdThkZDFcdThkY2NcdThkZGJcdThkYzZcdThlZmJcdThlZjhcdThlZmNcdThmOWNcdTkwMmVcdTkwMzVcdTkwMzFcdTkwMzhcdTkwMzJcdTkwMzZcdTkxMDJcdTkwZjVcdTkxMDlcdTkwZmVcdTkxNjNcdTkxNjVcdTkxY2ZcdTkyMTRcdTkyMTVcdTkyMjNcdTkyMDlcdTkyMWVc''@;'; put 'put ''dTkyMGRcdTkyMTBcdTkyMDdcdTkyMTFcdTk1OTRcdTk1OGZcdTk1OGJcdTk1OTFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk1OTNcdTk1OTJcdTk1OGVcdTk2OGFcdTk2OGVcdTk2OGJcdTk2N2RcdTk2ODVcdTk2ODZcdTk2OGRcdTk2NzJcdTk2ODRcdTk2YzFc''@;'; put 'put ''dTk2YzVcdTk2YzRcdTk2YzZcdTk2YzdcdTk2ZWZcdTk2ZjJcdTk3Y2NcdTk4MDVcdTk4MDZcdTk4MDhcdTk4ZTdcdTk4ZWFcdTk4ZWZcdTk4ZTlcdTk4ZjJcdTk4ZWRcdTk5YWVcdTk5YWRcdTllYzNcdTllY2RcdTllZDFcdTRlODJcdTUwYWRcdTUwYjVcdTUwYjJcdTUwYjNcdTUwYzVcdTUw''@;'; put 'put ''YmVcdTUwYWNcdTUwYjdcdTUwYmJcdTUwYWZcdTUwYzdcdTUyN2ZcdTUyNzdcdTUyN2RcdTUyZGZcdTUyZTZcdTUyZTRcdTUyZTJcdTUyZTNcdTUzMmZcdTU1ZGZcdTU1ZThcdTU1ZDNcdTU1ZTZcdTU1Y2VcdTU1ZGNcdTU1YzdcdTU1ZDFcdTU1ZTNcdTU1ZTRcdTU1ZWZcdTU1ZGFcdTU1ZTFc''@;'; put 'put ''dTU1YzVcdTU1YzZcdTU1ZTVcdTU1YzlcdTU3MTJcdTU3MTNcdTU4NWVcdTU4NTFcdTU4NThcdTU4NTdcdTU4NWFcdTU4NTRcdTU4NmJcdTU4NGNcdTU4NmRcdTU4NGFcdTU4NjJcdTU4NTJcdTU4NGJcdTU5NjdcdTVhYzFcdTVhYzlcdTVhY2NcdTVhYmVcdTVhYmRcdTVhYmNcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxnPTA7ZyE9eVsxODJdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE4Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxODJdW2ddXT00NjU5MitnLF9bNDY1OTIrZ109eVsxODJdW2ddKTtmb3IoeVsxODNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTVhYjNcdTVhYzJcdTVhYjJcdTVkNjlcdTVkNmZcdTVlNGNcdTVlNzlcdTVlYzlcdTVlYzhcdTVmMTJcdTVmNTlcdTVmYWNcdTVmYWVcdTYxMWFcdTYxMGZcdTYxNDhcdTYxMWZcdTYwZjNcdTYxMWJcdTYwZjlcdTYxMDFcdTYxMDhcdTYxNGVcdTYxNGNcdTYxNDRcdTYx''@;'; put 'put ''NGRcdTYxM2VcdTYxMzRcdTYxMjdcdTYxMGRcdTYxMDZcdTYxMzdcdTYyMjFcdTYyMjJcdTY0MTNcdTY0M2VcdTY0MWVcdTY0MmFcdTY0MmRcdTY0M2RcdTY0MmNcdTY0MGZcdTY0MWNcdTY0MTRcdTY0MGRcdTY0MzZcdTY0MTZcdTY0MTdcdTY0MDZcdTY1NmNcdTY1OWZcdTY1YjBcdTY2OTdc''@;'; put 'put ''dTY2ODlcdTY2ODdcdTY2ODhcdTY2OTZcdTY2ODRcdTY2OThcdTY2OGRcdTY3MDNcdTY5OTRcdTY5NmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY5NWFcdTY5NzdcdTY5NjBcdTY5NTRcdTY5NzVcdTY5MzBcdTY5ODJcdTY5NGFcdTY5NjhcdTY5NmJcdTY5NWVc''@;'; put 'put ''dTY5NTNcdTY5NzlcdTY5ODZcdTY5NWRcdTY5NjNcdTY5NWJcdTZiNDdcdTZiNzJcdTZiYzBcdTZiYmZcdTZiZDNcdTZiZmRcdTZlYTJcdTZlYWZcdTZlZDNcdTZlYjZcdTZlYzJcdTZlOTBcdTZlOWRcdTZlYzdcdTZlYzVcdTZlYTVcdTZlOThcdTZlYmNcdTZlYmFcdTZlYWJcdTZlZDFcdTZl''@;'; put 'put ''OTZcdTZlOWNcdTZlYzRcdTZlZDRcdTZlYWFcdTZlYTdcdTZlYjRcdTcxNGVcdTcxNTlcdTcxNjlcdTcxNjRcdTcxNDlcdTcxNjdcdTcxNWNcdTcxNmNcdTcxNjZcdTcxNGNcdTcxNjVcdTcxNWVcdTcxNDZcdTcxNjhcdTcxNTZcdTcyM2FcdTcyNTJcdTczMzdcdTczNDVcdTczM2ZcdTczM2Vc''@;'; put 'put ''dTc0NmZcdTc0NWFcdTc0NTVcdTc0NWZcdTc0NWVcdTc0NDFcdTc0M2ZcdTc0NTlcdTc0NWJcdTc0NWNcdTc1NzZcdTc1NzhcdTc2MDBcdTc1ZjBcdTc2MDFcdTc1ZjJcdTc1ZjFcdTc1ZmFcdTc1ZmZcdTc1ZjRcdTc1ZjNcdTc2ZGVcdTc2ZGZcdTc3NWJcdTc3NmJcdTc3NjZcdTc3NWVcdTc3''@;'; put 'put ''NjNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxODNdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE4M11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxODNdW2ddXT00Njg0OCtnLF9bNDY4NDgrZ109eVsxODNdW2ddKTtmb3IoeVsxODRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3NzlcdTc3NmFcdTc3NmNcdTc3NWNcdTc3NjVcdTc3NjhcdTc3NjJcdTc3ZWVcdTc4OGVcdTc4YjBcdTc4OTdcdTc4OThcdTc4OGNcdTc4ODlcdTc4N2NcdTc4OTFcdTc4OTNcdTc4N2ZcdTc5N2FcdTc5N2ZcdTc5ODFcdTg0MmNcdTc5YmRcdTdh''@;'; put 'put ''MWNcdTdhMWFcdTdhMjBcdTdhMTRcdTdhMWZcdTdhMWVcdTdhOWZcdTdhYTBcdTdiNzdcdTdiYzBcdTdiNjBcdTdiNmVcdTdiNjdcdTdjYjFcdTdjYjNcdTdjYjVcdTdkOTNcdTdkNzlcdTdkOTFcdTdkODFcdTdkOGZcdTdkNWJcdTdmNmVcdTdmNjlcdTdmNmFcdTdmNzJcdTdmYTlcdTdmYThc''@;'; put 'put ''dTdmYTRcdTgwNTZcdTgwNThcdTgwODZcdTgwODRcdTgxNzFcdTgxNzBcdTgxNzhcdTgxNjVcdTgxNmVcdTgxNzNcdTgxNmJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxNzlcdTgxN2FcdTgxNjZcdTgyMDVcdTgyNDdcdTg0ODJcdTg0NzdcdTg0M2RcdTg0MzFc''@;'; put 'put ''dTg0NzVcdTg0NjZcdTg0NmJcdTg0NDlcdTg0NmNcdTg0NWJcdTg0M2NcdTg0MzVcdTg0NjFcdTg0NjNcdTg0NjlcdTg0NmRcdTg0NDZcdTg2NWVcdTg2NWNcdTg2NWZcdTg2ZjlcdTg3MTNcdTg3MDhcdTg3MDdcdTg3MDBcdTg2ZmVcdTg2ZmJcdTg3MDJcdTg3MDNcdTg3MDZcdTg3MGFcdTg4''@;'; put 'put ''NTlcdTg4ZGZcdTg4ZDRcdTg4ZDlcdTg4ZGNcdTg4ZDhcdTg4ZGRcdTg4ZTFcdTg4Y2FcdTg4ZDVcdTg4ZDJcdTg5OWNcdTg5ZTNcdThhNmJcdThhNzJcdThhNzNcdThhNjZcdThhNjlcdThhNzBcdThhODdcdThhN2NcdThhNjNcdThhYTBcdThhNzFcdThhODVcdThhNmRcdThhNjJcdThhNmVc''@;'; put 'put ''dThhNmNcdThhNzlcdThhN2JcdThhM2VcdThhNjhcdThjNjJcdThjOGFcdThjODlcdThjY2FcdThjYzdcdThjYzhcdThjYzRcdThjYjJcdThjYzNcdThjYzJcdThjYzVcdThkZTFcdThkZGZcdThkZThcdThkZWZcdThkZjNcdThkZmFcdThkZWFcdThkZTRcdThkZTZcdThlYjJcdThmMDNcdThm''@;'; put 'put ''MDlcdThlZmVcdThmMGFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxODRdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE4NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxODRdW2ddXT00NzEwNCtnLF9bNDcxMDQrZ109eVsxODRdW2ddKTtmb3IoeVsxODVdPSJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThmOWZcdThmYjJcdTkwNGJcdTkwNGFcdTkwNTNcdTkwNDJcdTkwNTRcdTkwM2NcdTkwNTVcdTkwNTBcdTkwNDdcdTkwNGZcdTkwNGVcdTkwNGRcdTkwNTFcdTkwM2VcdTkwNDFcdTkxMTJcdTkxMTdcdTkxNmNcdTkxNmFcdTkx''@;'; put 'put ''NjlcdTkxYzlcdTkyMzdcdTkyNTdcdTkyMzhcdTkyM2RcdTkyNDBcdTkyM2VcdTkyNWJcdTkyNGJcdTkyNjRcdTkyNTFcdTkyMzRcdTkyNDlcdTkyNGRcdTkyNDVcdTkyMzlcdTkyM2ZcdTkyNWFcdTk1OThcdTk2OThcdTk2OTRcdTk2OTVcdTk2Y2RcdTk2Y2JcdTk2YzlcdTk2Y2FcdTk2Zjdc''@;'; put 'put ''dTk2ZmJcdTk2ZjlcdTk2ZjZcdTk3NTZcdTk3NzRcdTk3NzZcdTk4MTBcdTk4MTFcdTk4MTNcdTk4MGFcdTk4MTJcdTk4MGNcdTk4ZmNcdTk4ZjRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk4ZmRcdTk4ZmVcdTk5YjNcdTk5YjFcdTk5YjRcdTlhZTFcdTljZTlc''@;'; put 'put ''dTllODJcdTlmMGVcdTlmMTNcdTlmMjBcdTUwZTdcdTUwZWVcdTUwZTVcdTUwZDZcdTUwZWRcdTUwZGFcdTUwZDVcdTUwY2ZcdTUwZDFcdTUwZjFcdTUwY2VcdTUwZTlcdTUxNjJcdTUxZjNcdTUyODNcdTUyODJcdTUzMzFcdTUzYWRcdTU1ZmVcdTU2MDBcdTU2MWJcdTU2MTdcdTU1ZmRcdTU2''@;'; put 'put ''MTRcdTU2MDZcdTU2MDlcdTU2MGRcdTU2MGVcdTU1ZjdcdTU2MTZcdTU2MWZcdTU2MDhcdTU2MTBcdTU1ZjZcdTU3MThcdTU3MTZcdTU4NzVcdTU4N2VcdTU4ODNcdTU4OTNcdTU4OGFcdTU4NzlcdTU4ODVcdTU4N2RcdTU4ZmRcdTU5MjVcdTU5MjJcdTU5MjRcdTU5NmFcdTU5NjlcdTVhZTFc''@;'; put 'put ''dTVhZTZcdTVhZTlcdTVhZDdcdTVhZDZcdTVhZDhcdTVhZTNcdTViNzVcdTViZGVcdTViZTdcdTViZTFcdTViZTVcdTViZTZcdTViZThcdTViZTJcdTViZTRcdTViZGZcdTVjMGRcdTVjNjJcdTVkODRcdTVkODdcdTVlNWJcdTVlNjNcdTVlNTVcdTVlNTdcdTVlNTRcdTVlZDNcdTVlZDZcdTVm''@;'; put 'put ''MGFcdTVmNDZcdTVmNzBcdTVmYjlcdTYxNDdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxODVdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE4NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxODVdW2ddXT00NzM2MCtnLF9bNDczNjArZ109eVsxODVdW2ddKTtmb3IoeVsxODZdPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYxM2ZcdTYxNGJcdTYxNzdcdTYxNjJcdTYxNjNcdTYxNWZcdTYxNWFcdTYxNThcdTYxNzVcdTYyMmFcdTY0ODdcdTY0NThcdTY0NTRcdTY0YTRcdTY0NzhcdTY0NWZcdTY0N2FcdTY0NTFcdTY0NjdcdTY0''@;'; put 'put ''MzRcdTY0NmRcdTY0N2JcdTY1NzJcdTY1YTFcdTY1ZDdcdTY1ZDZcdTY2YTJcdTY2YThcdTY2OWRcdTY5OWNcdTY5YThcdTY5OTVcdTY5YzFcdTY5YWVcdTY5ZDNcdTY5Y2JcdTY5OWJcdTY5YjdcdTY5YmJcdTY5YWJcdTY5YjRcdTY5ZDBcdTY5Y2RcdTY5YWRcdTY5Y2NcdTY5YTZcdTY5YzNc''@;'; put 'put ''dTY5YTNcdTZiNDlcdTZiNGNcdTZjMzNcdTZmMzNcdTZmMTRcdTZlZmVcdTZmMTNcdTZlZjRcdTZmMjlcdTZmM2VcdTZmMjBcdTZmMmNcdTZmMGZcdTZmMDJcdTZmMjJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZlZmZcdTZlZWZcdTZmMDZcdTZmMzFcdTZmMzhc''@;'; put 'put ''dTZmMzJcdTZmMjNcdTZmMTVcdTZmMmJcdTZmMmZcdTZmODhcdTZmMmFcdTZlZWNcdTZmMDFcdTZlZjJcdTZlY2NcdTZlZjdcdTcxOTRcdTcxOTlcdTcxN2RcdTcxOGFcdTcxODRcdTcxOTJcdTcyM2VcdTcyOTJcdTcyOTZcdTczNDRcdTczNTBcdTc0NjRcdTc0NjNcdTc0NmFcdTc0NzBcdTc0''@;'; put 'put ''NmRcdTc1MDRcdTc1OTFcdTc2MjdcdTc2MGRcdTc2MGJcdTc2MDlcdTc2MTNcdTc2ZTFcdTc2ZTNcdTc3ODRcdTc3N2RcdTc3N2ZcdTc3NjFcdTc4YzFcdTc4OWZcdTc4YTdcdTc4YjNcdTc4YTlcdTc4YTNcdTc5OGVcdTc5OGZcdTc5OGRcdTdhMmVcdTdhMzFcdTdhYWFcdTdhYTlcdTdhZWRc''@;'; put 'put ''dTdhZWZcdTdiYTFcdTdiOTVcdTdiOGJcdTdiNzVcdTdiOTdcdTdiOWRcdTdiOTRcdTdiOGZcdTdiYjhcdTdiODdcdTdiODRcdTdjYjlcdTdjYmRcdTdjYmVcdTdkYmJcdTdkYjBcdTdkOWNcdTdkYmRcdTdkYmVcdTdkYTBcdTdkY2FcdTdkYjRcdTdkYjJcdTdkYjFcdTdkYmFcdTdkYTJcdTdk''@;'; put 'put ''YmZcdTdkYjVcdTdkYjhcdTdkYWRcdTdkZDJcdTdkYzdcdTdkYWNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxODZdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE4Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxODZdW2ddXT00NzYxNitnLF9bNDc2MTYrZ109eVsxODZdW2ddKTtmb3IoeVsx''@;'; put 'put ''ODddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdmNzBcdTdmZTBcdTdmZTFcdTdmZGZcdTgwNWVcdTgwNWFcdTgwODdcdTgxNTBcdTgxODBcdTgxOGZcdTgxODhcdTgxOGFcdTgxN2ZcdTgxODJcdTgxZTdcdTgxZmFcdTgyMDdcdTgy''@;'; put 'put ''MTRcdTgyMWVcdTgyNGJcdTg0YzlcdTg0YmZcdTg0YzZcdTg0YzRcdTg0OTlcdTg0OWVcdTg0YjJcdTg0OWNcdTg0Y2JcdTg0YjhcdTg0YzBcdTg0ZDNcdTg0OTBcdTg0YmNcdTg0ZDFcdTg0Y2FcdTg3M2ZcdTg3MWNcdTg3M2JcdTg3MjJcdTg3MjVcdTg3MzRcdTg3MThcdTg3NTVcdTg3Mzdc''@;'; put 'put ''dTg3MjlcdTg4ZjNcdTg5MDJcdTg4ZjRcdTg4ZjlcdTg4ZjhcdTg4ZmRcdTg4ZThcdTg5MWFcdTg4ZWZcdThhYTZcdThhOGNcdThhOWVcdThhYTNcdThhOGRcdThhYTFcdThhOTNcdThhYTRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThhYWFcdThhYTVcdThhYThc''@;'; put 'put ''dThhOThcdThhOTFcdThhOWFcdThhYTdcdThjNmFcdThjOGRcdThjOGNcdThjZDNcdThjZDFcdThjZDJcdThkNmJcdThkOTlcdThkOTVcdThkZmNcdThmMTRcdThmMTJcdThmMTVcdThmMTNcdThmYTNcdTkwNjBcdTkwNThcdTkwNWNcdTkwNjNcdTkwNTlcdTkwNWVcdTkwNjJcdTkwNWRcdTkw''@;'; put 'put ''NWJcdTkxMTlcdTkxMThcdTkxMWVcdTkxNzVcdTkxNzhcdTkxNzdcdTkxNzRcdTkyNzhcdTkyODBcdTkyODVcdTkyOThcdTkyOTZcdTkyN2JcdTkyOTNcdTkyOWNcdTkyYThcdTkyN2NcdTkyOTFcdTk1YTFcdTk1YThcdTk1YTlcdTk1YTNcdTk1YTVcdTk1YTRcdTk2OTlcdTk2OWNcdTk2OWJc''@;'; put 'put ''dTk2Y2NcdTk2ZDJcdTk3MDBcdTk3N2NcdTk3ODVcdTk3ZjZcdTk4MTdcdTk4MThcdTk4YWZcdTk4YjFcdTk5MDNcdTk5MDVcdTk5MGNcdTk5MDlcdTk5YzFcdTlhYWZcdTlhYjBcdTlhZTZcdTliNDFcdTliNDJcdTljZjRcdTljZjZcdTljZjNcdTllYmNcdTlmM2JcdTlmNGFcdTUxMDRcdTUx''@;'; put 'put ''MDBcdTUwZmJcdTUwZjVcdTUwZjlcdTUxMDJcdTUxMDhcdTUxMDlcdTUxMDVcdTUxZGNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxODddLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE4N11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxODddW2ddXT00Nzg3MitnLF9bNDc4NzIrZ109eVsxODdd''@;'; put 'put ''W2ddKTtmb3IoeVsxODhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUyODdcdTUyODhcdTUyODlcdTUyOGRcdTUyOGFcdTUyZjBcdTUzYjJcdTU2MmVcdTU2M2JcdTU2MzlcdTU2MzJcdTU2M2ZcdTU2MzRcdTU2MjlcdTU2NTNcdTU2''@;'; put 'put ''NGVcdTU2NTdcdTU2NzRcdTU2MzZcdTU2MmZcdTU2MzBcdTU4ODBcdTU4OWZcdTU4OWVcdTU4YjNcdTU4OWNcdTU4YWVcdTU4YTlcdTU4YTZcdTU5NmRcdTViMDlcdTVhZmJcdTViMGJcdTVhZjVcdTViMGNcdTViMDhcdTViZWVcdTViZWNcdTViZTlcdTViZWJcdTVjNjRcdTVjNjVcdTVkOWRc''@;'; put 'put ''dTVkOTRcdTVlNjJcdTVlNWZcdTVlNjFcdTVlZTJcdTVlZGFcdTVlZGZcdTVlZGRcdTVlZTNcdTVlZTBcdTVmNDhcdTVmNzFcdTVmYjdcdTVmYjVcdTYxNzZcdTYxNjdcdTYxNmVcdTYxNWRcdTYxNTVcdTYxODJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYxN2Nc''@;'; put 'put ''dTYxNzBcdTYxNmJcdTYxN2VcdTYxYTdcdTYxOTBcdTYxYWJcdTYxOGVcdTYxYWNcdTYxOWFcdTYxYTRcdTYxOTRcdTYxYWVcdTYyMmVcdTY0NjlcdTY0NmZcdTY0NzlcdTY0OWVcdTY0YjJcdTY0ODhcdTY0OTBcdTY0YjBcdTY0YTVcdTY0OTNcdTY0OTVcdTY0YTlcdTY0OTJcdTY0YWVcdTY0''@;'; put 'put ''YWRcdTY0YWJcdTY0OWFcdTY0YWNcdTY0OTlcdTY0YTJcdTY0YjNcdTY1NzVcdTY1NzdcdTY1NzhcdTY2YWVcdTY2YWJcdTY2YjRcdTY2YjFcdTZhMjNcdTZhMWZcdTY5ZThcdTZhMDFcdTZhMWVcdTZhMTlcdTY5ZmRcdTZhMjFcdTZhMTNcdTZhMGFcdTY5ZjNcdTZhMDJcdTZhMDVcdTY5ZWRc''@;'; put 'put ''dTZhMTFcdTZiNTBcdTZiNGVcdTZiYTRcdTZiYzVcdTZiYzZcdTZmM2ZcdTZmN2NcdTZmODRcdTZmNTFcdTZmNjZcdTZmNTRcdTZmODZcdTZmNmRcdTZmNWJcdTZmNzhcdTZmNmVcdTZmOGVcdTZmN2FcdTZmNzBcdTZmNjRcdTZmOTdcdTZmNThcdTZlZDVcdTZmNmZcdTZmNjBcdTZmNWZcdTcx''@;'; put 'put ''OWZcdTcxYWNcdTcxYjFcdTcxYThcdTcyNTZcdTcyOWJcdTczNGVcdTczNTdcdTc0NjlcdTc0OGJcdTc0ODNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxODhdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE4OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxODhdW2ddXT00ODEyOCtnLF9bNDgx''@;'; put 'put ''MjgrZ109eVsxODhdW2ddKTtmb3IoeVsxODldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc0N2VcdTc0ODBcdTc1N2ZcdTc2MjBcdTc2MjlcdTc2MWZcdTc2MjRcdTc2MjZcdTc2MjFcdTc2MjJcdTc2OWFcdTc2YmFcdTc2ZTRcdTc3''@;'; put 'put ''OGVcdTc3ODdcdTc3OGNcdTc3OTFcdTc3OGJcdTc4Y2JcdTc4YzVcdTc4YmFcdTc4Y2FcdTc4YmVcdTc4ZDVcdTc4YmNcdTc4ZDBcdTdhM2ZcdTdhM2NcdTdhNDBcdTdhM2RcdTdhMzdcdTdhM2JcdTdhYWZcdTdhYWVcdTdiYWRcdTdiYjFcdTdiYzRcdTdiYjRcdTdiYzZcdTdiYzdcdTdiYzFc''@;'; put 'put ''dTdiYTBcdTdiY2NcdTdjY2FcdTdkZTBcdTdkZjRcdTdkZWZcdTdkZmJcdTdkZDhcdTdkZWNcdTdkZGRcdTdkZThcdTdkZTNcdTdkZGFcdTdkZGVcdTdkZTlcdTdkOWVcdTdkZDlcdTdkZjJcdTdkZjlcdTdmNzVcdTdmNzdcdTdmYWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdTdmZTlcdTgwMjZcdTgxOWJcdTgxOWNcdTgxOWRcdTgxYTBcdTgxOWFcdTgxOThcdTg1MTdcdTg1M2RcdTg1MWFcdTg0ZWVcdTg1MmNcdTg1MmRcdTg1MTNcdTg1MTFcdTg1MjNcdTg1MjFcdTg1MTRcdTg0ZWNcdTg1MjVcdTg0ZmZcdTg1MDZcdTg3ODJcdTg3NzRcdTg3NzZcdTg3''@;'; put 'put ''NjBcdTg3NjZcdTg3NzhcdTg3NjhcdTg3NTlcdTg3NTdcdTg3NGNcdTg3NTNcdTg4NWJcdTg4NWRcdTg5MTBcdTg5MDdcdTg5MTJcdTg5MTNcdTg5MTVcdTg5MGFcdThhYmNcdThhZDJcdThhYzdcdThhYzRcdThhOTVcdThhY2JcdThhZjhcdThhYjJcdThhYzlcdThhYzJcdThhYmZcdThhYjBc''@;'; put 'put ''dThhZDZcdThhY2RcdThhYjZcdThhYjlcdThhZGJcdThjNGNcdThjNGVcdThjNmNcdThjZTBcdThjZGVcdThjZTZcdThjZTRcdThjZWNcdThjZWRcdThjZTJcdThjZTNcdThjZGNcdThjZWFcdThjZTFcdThkNmRcdThkOWZcdThkYTNcdThlMmJcdThlMTBcdThlMWRcdThlMjJcdThlMGZcdThl''@;'; put 'put ''MjlcdThlMWZcdThlMjFcdThlMWVcdThlYmFcdThmMWRcdThmMWJcdThmMWZcdThmMjlcdThmMjZcdThmMmFcdThmMWNcdThmMWVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxODldLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE4OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxODldW2ddXT00''@;'; put 'put ''ODM4NCtnLF9bNDgzODQrZ109eVsxODldW2ddKTtmb3IoeVsxOTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThmMjVcdTkwNjlcdTkwNmVcdTkwNjhcdTkwNmRcdTkwNzdcdTkxMzBcdTkxMmRcdTkxMjdcdTkxMzFcdTkxODdcdTkx''@;'; put 'put ''ODlcdTkxOGJcdTkxODNcdTkyYzVcdTkyYmJcdTkyYjdcdTkyZWFcdTkyYWNcdTkyZTRcdTkyYzFcdTkyYjNcdTkyYmNcdTkyZDJcdTkyYzdcdTkyZjBcdTkyYjJcdTk1YWRcdTk1YjFcdTk3MDRcdTk3MDZcdTk3MDdcdTk3MDlcdTk3NjBcdTk3OGRcdTk3OGJcdTk3OGZcdTk4MjFcdTk4MmJc''@;'; put 'put ''dTk4MWNcdTk4YjNcdTk5MGFcdTk5MTNcdTk5MTJcdTk5MThcdTk5ZGRcdTk5ZDBcdTk5ZGZcdTk5ZGJcdTk5ZDFcdTk5ZDVcdTk5ZDJcdTk5ZDlcdTlhYjdcdTlhZWVcdTlhZWZcdTliMjdcdTliNDVcdTliNDRcdTliNzdcdTliNmZcdTlkMDZcdTlkMDlcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTlkMDNcdTllYTlcdTllYmVcdTllY2VcdTU4YThcdTlmNTJcdTUxMTJcdTUxMThcdTUxMTRcdTUxMTBcdTUxMTVcdTUxODBcdTUxYWFcdTUxZGRcdTUyOTFcdTUyOTNcdTUyZjNcdTU2NTlcdTU2NmJcdTU2NzlcdTU2NjlcdTU2NjRcdTU2NzhcdTU2NmFcdTU2''@;'; put 'put ''NjhcdTU2NjVcdTU2NzFcdTU2NmZcdTU2NmNcdTU2NjJcdTU2NzZcdTU4YzFcdTU4YmVcdTU4YzdcdTU4YzVcdTU5NmVcdTViMWRcdTViMzRcdTViNzhcdTViZjBcdTVjMGVcdTVmNGFcdTYxYjJcdTYxOTFcdTYxYTlcdTYxOGFcdTYxY2RcdTYxYjZcdTYxYmVcdTYxY2FcdTYxYzhcdTYyMzBc''@;'; put 'put ''dTY0YzVcdTY0YzFcdTY0Y2JcdTY0YmJcdTY0YmNcdTY0ZGFcdTY0YzRcdTY0YzdcdTY0YzJcdTY0Y2RcdTY0YmZcdTY0ZDJcdTY0ZDRcdTY0YmVcdTY1NzRcdTY2YzZcdTY2YzlcdTY2YjlcdTY2YzRcdTY2YzdcdTY2YjhcdTZhM2RcdTZhMzhcdTZhM2FcdTZhNTlcdTZhNmJcdTZhNThcdTZh''@;'; put 'put ''MzlcdTZhNDRcdTZhNjJcdTZhNjFcdTZhNGJcdTZhNDdcdTZhMzVcdTZhNWZcdTZhNDhcdTZiNTlcdTZiNzdcdTZjMDVcdTZmYzJcdTZmYjFcdTZmYTFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxOTBdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE5MF1bZ10uY2hhckNvZGVBdCgwKSYmKElb''@;'; put 'put ''eVsxOTBdW2ddXT00ODY0MCtnLF9bNDg2NDArZ109eVsxOTBdW2ddKTtmb3IoeVsxOTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmYzNcdTZmYTRcdTZmYzFcdTZmYTdcdTZmYjNcdTZmYzBcdTZmYjlcdTZmYjZcdTZmYTZcdTZm''@;'; put 'put ''YTBcdTZmYjRcdTcxYmVcdTcxYzlcdTcxZDBcdTcxZDJcdTcxYzhcdTcxZDVcdTcxYjlcdTcxY2VcdTcxZDlcdTcxZGNcdTcxYzNcdTcxYzRcdTczNjhcdTc0OWNcdTc0YTNcdTc0OThcdTc0OWZcdTc0OWVcdTc0ZTJcdTc1MGNcdTc1MGRcdTc2MzRcdTc2MzhcdTc2M2FcdTc2ZTdcdTc2ZTVc''@;'; put 'put ''dTc3YTBcdTc3OWVcdTc3OWZcdTc3YTVcdTc4ZThcdTc4ZGFcdTc4ZWNcdTc4ZTdcdTc5YTZcdTdhNGRcdTdhNGVcdTdhNDZcdTdhNGNcdTdhNGJcdTdhYmFcdTdiZDlcdTdjMTFcdTdiYzlcdTdiZTRcdTdiZGJcdTdiZTFcdTdiZTlcdTdiZTZcdTdjZDVcdTdjZDZcdTdlMGFcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlMTFcdTdlMDhcdTdlMWJcdTdlMjNcdTdlMWVcdTdlMWRcdTdlMDlcdTdlMTBcdTdmNzlcdTdmYjJcdTdmZjBcdTdmZjFcdTdmZWVcdTgwMjhcdTgxYjNcdTgxYTlcdTgxYThcdTgxZmJcdTgyMDhcdTgyNThcdTgyNTlcdTg1NGFcdTg1''@;'; put 'put ''NTlcdTg1NDhcdTg1NjhcdTg1NjlcdTg1NDNcdTg1NDlcdTg1NmRcdTg1NmFcdTg1NWVcdTg3ODNcdTg3OWZcdTg3OWVcdTg3YTJcdTg3OGRcdTg4NjFcdTg5MmFcdTg5MzJcdTg5MjVcdTg5MmJcdTg5MjFcdTg5YWFcdTg5YTZcdThhZTZcdThhZmFcdThhZWJcdThhZjFcdThiMDBcdThhZGNc''@;'; put 'put ''dThhZTdcdThhZWVcdThhZmVcdThiMDFcdThiMDJcdThhZjdcdThhZWRcdThhZjNcdThhZjZcdThhZmNcdThjNmJcdThjNmRcdThjOTNcdThjZjRcdThlNDRcdThlMzFcdThlMzRcdThlNDJcdThlMzlcdThlMzVcdThmM2JcdThmMmZcdThmMzhcdThmMzNcdThmYThcdThmYTZcdTkwNzVcdTkw''@;'; put 'put ''NzRcdTkwNzhcdTkwNzJcdTkwN2NcdTkwN2FcdTkxMzRcdTkxOTJcdTkzMjBcdTkzMzZcdTkyZjhcdTkzMzNcdTkzMmZcdTkzMjJcdTkyZmNcdTkzMmJcdTkzMDRcdTkzMWFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxOTFdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE5MV1bZ10uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKElbeVsxOTFdW2ddXT00ODg5NitnLF9bNDg4OTYrZ109eVsxOTFdW2ddKTtmb3IoeVsxOTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzMTBcdTkzMjZcdTkzMjFcdTkzMTVcdTkzMmVcdTkzMTlcdTk1YmJcdTk2''@;'; put 'put ''YTdcdTk2YThcdTk2YWFcdTk2ZDVcdTk3MGVcdTk3MTFcdTk3MTZcdTk3MGRcdTk3MTNcdTk3MGZcdTk3NWJcdTk3NWNcdTk3NjZcdTk3OThcdTk4MzBcdTk4MzhcdTk4M2JcdTk4MzdcdTk4MmRcdTk4MzlcdTk4MjRcdTk5MTBcdTk5MjhcdTk5MWVcdTk5MWJcdTk5MjFcdTk5MWFcdTk5ZWRc''@;'; put 'put ''dTk5ZTJcdTk5ZjFcdTlhYjhcdTlhYmNcdTlhZmJcdTlhZWRcdTliMjhcdTliOTFcdTlkMTVcdTlkMjNcdTlkMjZcdTlkMjhcdTlkMTJcdTlkMWJcdTllZDhcdTllZDRcdTlmOGRcdTlmOWNcdTUxMmFcdTUxMWZcdTUxMjFcdTUxMzJcdTUyZjVcdTU2OGVcdTU2ODBcdTU2OTBcdTU2ODVcdTU2''@;'; put 'put ''ODdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU2OGZcdTU4ZDVcdTU4ZDNcdTU4ZDFcdTU4Y2VcdTViMzBcdTViMmFcdTViMjRcdTViN2FcdTVjMzdcdTVjNjhcdTVkYmNcdTVkYmFcdTVkYmRcdTVkYjhcdTVlNmJcdTVmNGNcdTVmYmRcdTYxYzlcdTYxYzJcdTYx''@;'; put 'put ''YzdcdTYxZTZcdTYxY2JcdTYyMzJcdTYyMzRcdTY0Y2VcdTY0Y2FcdTY0ZDhcdTY0ZTBcdTY0ZjBcdTY0ZTZcdTY0ZWNcdTY0ZjFcdTY0ZTJcdTY0ZWRcdTY1ODJcdTY1ODNcdTY2ZDlcdTY2ZDZcdTZhODBcdTZhOTRcdTZhODRcdTZhYTJcdTZhOWNcdTZhZGJcdTZhYTNcdTZhN2VcdTZhOTdc''@;'; put 'put ''dTZhOTBcdTZhYTBcdTZiNWNcdTZiYWVcdTZiZGFcdTZjMDhcdTZmZDhcdTZmZjFcdTZmZGZcdTZmZTBcdTZmZGJcdTZmZTRcdTZmZWJcdTZmZWZcdTZmODBcdTZmZWNcdTZmZTFcdTZmZTlcdTZmZDVcdTZmZWVcdTZmZjBcdTcxZTdcdTcxZGZcdTcxZWVcdTcxZTZcdTcxZTVcdTcxZWRcdTcx''@;'; put 'put ''ZWNcdTcxZjRcdTcxZTBcdTcyMzVcdTcyNDZcdTczNzBcdTczNzJcdTc0YTlcdTc0YjBcdTc0YTZcdTc0YThcdTc2NDZcdTc2NDJcdTc2NGNcdTc2ZWFcdTc3YjNcdTc3YWFcdTc3YjBcdTc3YWNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxOTJdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE5''@;'; put 'put ''Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxOTJdW2ddXT00OTE1MitnLF9bNDkxNTIrZ109eVsxOTJdW2ddKTtmb3IoeVsxOTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3YTdcdTc3YWRcdTc3ZWZcdTc4ZjdcdTc4ZmFcdTc4''@;'; put 'put ''ZjRcdTc4ZWZcdTc5MDFcdTc5YTdcdTc5YWFcdTdhNTdcdTdhYmZcdTdjMDdcdTdjMGRcdTdiZmVcdTdiZjdcdTdjMGNcdTdiZTBcdTdjZTBcdTdjZGNcdTdjZGVcdTdjZTJcdTdjZGZcdTdjZDlcdTdjZGRcdTdlMmVcdTdlM2VcdTdlNDZcdTdlMzdcdTdlMzJcdTdlNDNcdTdlMmJcdTdlM2Rc''@;'; put 'put ''dTdlMzFcdTdlNDVcdTdlNDFcdTdlMzRcdTdlMzlcdTdlNDhcdTdlMzVcdTdlM2ZcdTdlMmZcdTdmNDRcdTdmZjNcdTdmZmNcdTgwNzFcdTgwNzJcdTgwNzBcdTgwNmZcdTgwNzNcdTgxYzZcdTgxYzNcdTgxYmFcdTgxYzJcdTgxYzBcdTgxYmZcdTgxYmRcdTgxYzlcdTgxYmVcdTgxZThcdTgy''@;'; put 'put ''MDlcdTgyNzFcdTg1YWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1ODRcdTg1N2VcdTg1OWNcdTg1OTFcdTg1OTRcdTg1YWZcdTg1OWJcdTg1ODdcdTg1YThcdTg1OGFcdTg2NjdcdTg3YzBcdTg3ZDFcdTg3YjNcdTg3ZDJcdTg3YzZcdTg3YWJcdTg3YmJcdTg3''@;'; put 'put ''YmFcdTg3YzhcdTg3Y2JcdTg5M2JcdTg5MzZcdTg5NDRcdTg5MzhcdTg5M2RcdTg5YWNcdThiMGVcdThiMTdcdThiMTlcdThiMWJcdThiMGFcdThiMjBcdThiMWRcdThiMDRcdThiMTBcdThjNDFcdThjM2ZcdThjNzNcdThjZmFcdThjZmRcdThjZmNcdThjZjhcdThjZmJcdThkYThcdThlNDlc''@;'; put 'put ''dThlNGJcdThlNDhcdThlNGFcdThmNDRcdThmM2VcdThmNDJcdThmNDVcdThmM2ZcdTkwN2ZcdTkwN2RcdTkwODRcdTkwODFcdTkwODJcdTkwODBcdTkxMzlcdTkxYTNcdTkxOWVcdTkxOWNcdTkzNGRcdTkzODJcdTkzMjhcdTkzNzVcdTkzNGFcdTkzNjVcdTkzNGJcdTkzMThcdTkzN2VcdTkz''@;'; put 'put ''NmNcdTkzNWJcdTkzNzBcdTkzNWFcdTkzNTRcdTk1Y2FcdTk1Y2JcdTk1Y2NcdTk1YzhcdTk1YzZcdTk2YjFcdTk2YjhcdTk2ZDZcdTk3MWNcdTk3MWVcdTk3YTBcdTk3ZDNcdTk4NDZcdTk4YjZcdTk5MzVcdTlhMDFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxOTNdLmxlbmd0aDsrK2cp''@;'; put 'put ''NjU1MzMhPT15WzE5M11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxOTNdW2ddXT00OTQwOCtnLF9bNDk0MDgrZ109eVsxOTNdW2ddKTtmb3IoeVsxOTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk5ZmZcdTliYWVcdTliYWJcdTli''@;'; put 'put ''YWFcdTliYWRcdTlkM2JcdTlkM2ZcdTllOGJcdTllY2ZcdTllZGVcdTllZGNcdTllZGRcdTllZGJcdTlmM2VcdTlmNGJcdTUzZTJcdTU2OTVcdTU2YWVcdTU4ZDlcdTU4ZDhcdTViMzhcdTVmNWRcdTYxZTNcdTYyMzNcdTY0ZjRcdTY0ZjJcdTY0ZmVcdTY1MDZcdTY0ZmFcdTY0ZmJcdTY0Zjdc''@;'; put 'put ''dTY1YjdcdTY2ZGNcdTY3MjZcdTZhYjNcdTZhYWNcdTZhYzNcdTZhYmJcdTZhYjhcdTZhYzJcdTZhYWVcdTZhYWZcdTZiNWZcdTZiNzhcdTZiYWZcdTcwMDlcdTcwMGJcdTZmZmVcdTcwMDZcdTZmZmFcdTcwMTFcdTcwMGZcdTcxZmJcdTcxZmNcdTcxZmVcdTcxZjhcdTczNzdcdTczNzVcdTc0''@;'; put 'put ''YTdcdTc0YmZcdTc1MTVcdTc2NTZcdTc2NThcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc2NTJcdTc3YmRcdTc3YmZcdTc3YmJcdTc3YmNcdTc5MGVcdTc5YWVcdTdhNjFcdTdhNjJcdTdhNjBcdTdhYzRcdTdhYzVcdTdjMmJcdTdjMjdcdTdjMmFcdTdjMWVcdTdj''@;'; put 'put ''MjNcdTdjMjFcdTdjZTdcdTdlNTRcdTdlNTVcdTdlNWVcdTdlNWFcdTdlNjFcdTdlNTJcdTdlNTlcdTdmNDhcdTdmZjlcdTdmZmJcdTgwNzdcdTgwNzZcdTgxY2RcdTgxY2ZcdTgyMGFcdTg1Y2ZcdTg1YTlcdTg1Y2RcdTg1ZDBcdTg1YzlcdTg1YjBcdTg1YmFcdTg1YjlcdTg1YTZcdTg3ZWZc''@;'; put 'put ''dTg3ZWNcdTg3ZjJcdTg3ZTBcdTg5ODZcdTg5YjJcdTg5ZjRcdThiMjhcdThiMzlcdThiMmNcdThiMmJcdThjNTBcdThkMDVcdThlNTlcdThlNjNcdThlNjZcdThlNjRcdThlNWZcdThlNTVcdThlYzBcdThmNDlcdThmNGRcdTkwODdcdTkwODNcdTkwODhcdTkxYWJcdTkxYWNcdTkxZDBcdTkz''@;'; put 'put ''OTRcdTkzOGFcdTkzOTZcdTkzYTJcdTkzYjNcdTkzYWVcdTkzYWNcdTkzYjBcdTkzOThcdTkzOWFcdTkzOTdcdTk1ZDRcdTk1ZDZcdTk1ZDBcdTk1ZDVcdTk2ZTJcdTk2ZGNcdTk2ZDlcdTk2ZGJcdTk2ZGVcdTk3MjRcdTk3YTNcdTk3YTZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxOTRd''@;'; put 'put ''Lmxlbmd0aDsrK2cpNjU1MzMhPT15WzE5NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxOTRdW2ddXT00OTY2NCtnLF9bNDk2NjQrZ109eVsxOTRdW2ddKTtmb3IoeVsxOTVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk3YWRcdTk3''@;'; put 'put ''ZjlcdTk4NGRcdTk4NGZcdTk4NGNcdTk4NGVcdTk4NTNcdTk4YmFcdTk5M2VcdTk5M2ZcdTk5M2RcdTk5MmVcdTk5YTVcdTlhMGVcdTlhYzFcdTliMDNcdTliMDZcdTliNGZcdTliNGVcdTliNGRcdTliY2FcdTliYzlcdTliZmRcdTliYzhcdTliYzBcdTlkNTFcdTlkNWRcdTlkNjBcdTllZTBc''@;'; put 'put ''dTlmMTVcdTlmMmNcdTUxMzNcdTU2YTVcdTU4ZGVcdTU4ZGZcdTU4ZTJcdTViZjVcdTlmOTBcdTVlZWNcdTYxZjJcdTYxZjdcdTYxZjZcdTYxZjVcdTY1MDBcdTY1MGZcdTY2ZTBcdTY2ZGRcdTZhZTVcdTZhZGRcdTZhZGFcdTZhZDNcdTcwMWJcdTcwMWZcdTcwMjhcdTcwMWFcdTcwMWRcdTcw''@;'; put 'put ''MTVcdTcwMThcdTcyMDZcdTcyMGRcdTcyNThcdTcyYTJcdTczNzhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTczN2FcdTc0YmRcdTc0Y2FcdTc0ZTNcdTc1ODdcdTc1ODZcdTc2NWZcdTc2NjFcdTc3YzdcdTc5MTlcdTc5YjFcdTdhNmJcdTdhNjlcdTdjM2VcdTdj''@;'; put 'put ''M2ZcdTdjMzhcdTdjM2RcdTdjMzdcdTdjNDBcdTdlNmJcdTdlNmRcdTdlNzlcdTdlNjlcdTdlNmFcdTdmODVcdTdlNzNcdTdmYjZcdTdmYjlcdTdmYjhcdTgxZDhcdTg1ZTlcdTg1ZGRcdTg1ZWFcdTg1ZDVcdTg1ZTRcdTg1ZTVcdTg1ZjdcdTg3ZmJcdTg4MDVcdTg4MGRcdTg3ZjlcdTg3ZmVc''@;'; put 'put ''dTg5NjBcdTg5NWZcdTg5NTZcdTg5NWVcdThiNDFcdThiNWNcdThiNThcdThiNDlcdThiNWFcdThiNGVcdThiNGZcdThiNDZcdThiNTlcdThkMDhcdThkMGFcdThlN2NcdThlNzJcdThlODdcdThlNzZcdThlNmNcdThlN2FcdThlNzRcdThmNTRcdThmNGVcdThmYWRcdTkwOGFcdTkwOGJcdTkx''@;'; put 'put ''YjFcdTkxYWVcdTkzZTFcdTkzZDFcdTkzZGZcdTkzYzNcdTkzYzhcdTkzZGNcdTkzZGRcdTkzZDZcdTkzZTJcdTkzY2RcdTkzZDhcdTkzZTRcdTkzZDdcdTkzZThcdTk1ZGNcdTk2YjRcdTk2ZTNcdTk3MmFcdTk3MjdcdTk3NjFcdTk3ZGNcdTk3ZmJcdTk4NWVcdWZmZmQiLnNwbGl0KCIiKSxn''@;'; put 'put ''PTA7ZyE9eVsxOTVdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE5NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxOTVdW2ddXT00OTkyMCtnLF9bNDk5MjArZ109eVsxOTVdW2ddKTtmb3IoeVsxOTZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTk4NThcdTk4NWJcdTk4YmNcdTk5NDVcdTk5NDlcdTlhMTZcdTlhMTlcdTliMGRcdTliZThcdTliZTdcdTliZDZcdTliZGJcdTlkODlcdTlkNjFcdTlkNzJcdTlkNmFcdTlkNmNcdTllOTJcdTllOTdcdTllOTNcdTllYjRcdTUyZjhcdTU2YThcdTU2YjdcdTU2YjZcdTU2YjRcdTU2YmNc''@;'; put 'put ''dTU4ZTRcdTViNDBcdTViNDNcdTViN2RcdTViZjZcdTVkYzlcdTYxZjhcdTYxZmFcdTY1MThcdTY1MTRcdTY1MTlcdTY2ZTZcdTY3MjdcdTZhZWNcdTcwM2VcdTcwMzBcdTcwMzJcdTcyMTBcdTczN2JcdTc0Y2ZcdTc2NjJcdTc2NjVcdTc5MjZcdTc5MmFcdTc5MmNcdTc5MmJcdTdhYzdcdTdh''@;'; put 'put ''ZjZcdTdjNGNcdTdjNDNcdTdjNGRcdTdjZWZcdTdjZjBcdThmYWVcdTdlN2RcdTdlN2NcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlODJcdTdmNGNcdTgwMDBcdTgxZGFcdTgyNjZcdTg1ZmJcdTg1ZjlcdTg2MTFcdTg1ZmFcdTg2MDZcdTg2MGJcdTg2MDdcdTg2''@;'; put 'put ''MGFcdTg4MTRcdTg4MTVcdTg5NjRcdTg5YmFcdTg5ZjhcdThiNzBcdThiNmNcdThiNjZcdThiNmZcdThiNWZcdThiNmJcdThkMGZcdThkMGRcdThlODlcdThlODFcdThlODVcdThlODJcdTkxYjRcdTkxY2JcdTk0MThcdTk0MDNcdTkzZmRcdTk1ZTFcdTk3MzBcdTk4YzRcdTk5NTJcdTk5NTFc''@;'; put 'put ''dTk5YThcdTlhMmJcdTlhMzBcdTlhMzdcdTlhMzVcdTljMTNcdTljMGRcdTllNzlcdTllYjVcdTllZThcdTlmMmZcdTlmNWZcdTlmNjNcdTlmNjFcdTUxMzdcdTUxMzhcdTU2YzFcdTU2YzBcdTU2YzJcdTU5MTRcdTVjNmNcdTVkY2RcdTYxZmNcdTYxZmVcdTY1MWRcdTY1MWNcdTY1OTVcdTY2''@;'; put 'put ''ZTlcdTZhZmJcdTZiMDRcdTZhZmFcdTZiYjJcdTcwNGNcdTcyMWJcdTcyYTdcdTc0ZDZcdTc0ZDRcdTc2NjlcdTc3ZDNcdTdjNTBcdTdlOGZcdTdlOGNcdTdmYmNcdTg2MTdcdTg2MmRcdTg2MWFcdTg4MjNcdTg4MjJcdTg4MjFcdTg4MWZcdTg5NmFcdTg5NmNcdTg5YmRcdThiNzRcdWZmZmQi''@;'; put 'put ''LnNwbGl0KCIiKSxnPTA7ZyE9eVsxOTZdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE5Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxOTZdW2ddXT01MDE3NitnLF9bNTAxNzYrZ109eVsxOTZdW2ddKTtmb3IoeVsxOTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdThiNzdcdThiN2RcdThkMTNcdThlOGFcdThlOGRcdThlOGJcdThmNWZcdThmYWZcdTkxYmFcdTk0MmVcdTk0MzNcdTk0MzVcdTk0M2FcdTk0MzhcdTk0MzJcdTk0MmJcdTk1ZTJcdTk3MzhcdTk3MzlcdTk3MzJcdTk3ZmZcdTk4NjdcdTk4NjVcdTk5NTdcdTlhNDVc''@;'; put 'put ''dTlhNDNcdTlhNDBcdTlhM2VcdTlhY2ZcdTliNTRcdTliNTFcdTljMmRcdTljMjVcdTlkYWZcdTlkYjRcdTlkYzJcdTlkYjhcdTllOWRcdTllZWZcdTlmMTlcdTlmNWNcdTlmNjZcdTlmNjdcdTUxM2NcdTUxM2JcdTU2YzhcdTU2Y2FcdTU2YzlcdTViN2ZcdTVkZDRcdTVkZDJcdTVmNGVcdTYx''@;'; put 'put ''ZmZcdTY1MjRcdTZiMGFcdTZiNjFcdTcwNTFcdTcwNThcdTczODBcdTc0ZTRcdTc1OGFcdTc2NmVcdTc2NmNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5YjNcdTdjNjBcdTdjNWZcdTgwN2VcdTgwN2RcdTgxZGZcdTg5NzJcdTg5NmZcdTg5ZmNcdThiODBcdThk''@;'; put 'put ''MTZcdThkMTdcdThlOTFcdThlOTNcdThmNjFcdTkxNDhcdTk0NDRcdTk0NTFcdTk0NTJcdTk3M2RcdTk3M2VcdTk3YzNcdTk3YzFcdTk4NmJcdTk5NTVcdTlhNTVcdTlhNGRcdTlhZDJcdTliMWFcdTljNDlcdTljMzFcdTljM2VcdTljM2JcdTlkZDNcdTlkZDdcdTlmMzRcdTlmNmNcdTlmNmFc''@;'; put 'put ''dTlmOTRcdTU2Y2NcdTVkZDZcdTYyMDBcdTY1MjNcdTY1MmJcdTY1MmFcdTY2ZWNcdTZiMTBcdTc0ZGFcdTdhY2FcdTdjNjRcdTdjNjNcdTdjNjVcdTdlOTNcdTdlOTZcdTdlOTRcdTgxZTJcdTg2MzhcdTg2M2ZcdTg4MzFcdThiOGFcdTkwOTBcdTkwOGZcdTk0NjNcdTk0NjBcdTk0NjRcdTk3''@;'; put 'put ''NjhcdTk4NmZcdTk5NWNcdTlhNWFcdTlhNWJcdTlhNTdcdTlhZDNcdTlhZDRcdTlhZDFcdTljNTRcdTljNTdcdTljNTZcdTlkZTVcdTllOWZcdTllZjRcdTU2ZDFcdTU4ZTlcdTY1MmNcdTcwNWVcdTc2NzFcdTc2NzJcdTc3ZDdcdTdmNTBcdTdmODhcdTg4MzZcdTg4MzlcdTg4NjJcdThiOTNc''@;'; put 'put ''dThiOTJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxOTddLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE5N11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxOTddW2ddXT01MDQzMitnLF9bNTA0MzIrZ109eVsxOTddW2ddKTtmb3IoeVsxOThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiOTZcdTgyNzdcdThkMWJcdTkxYzBcdTk0NmFcdTk3NDJcdTk3NDhcdTk3NDRcdTk3YzZcdTk4NzBcdTlhNWZcdTliMjJcdTliNThcdTljNWZcdTlkZjlcdTlkZmFcdTllN2NcdTllN2RcdTlmMDdcdTlmNzdcdTlmNzJcdTVlZjNcdTZiMTZc''@;'; put 'put ''dTcwNjNcdTdjNmNcdTdjNmVcdTg4M2JcdTg5YzBcdThlYTFcdTkxYzFcdTk0NzJcdTk0NzBcdTk4NzFcdTk5NWVcdTlhZDZcdTliMjNcdTllY2NcdTcwNjRcdTc3ZGFcdThiOWFcdTk0NzdcdTk3YzlcdTlhNjJcdTlhNjVcdTdlOWNcdThiOWNcdThlYWFcdTkxYzVcdTk0N2RcdTk0N2VcdTk0''@;'; put 'put ''N2NcdTljNzdcdTljNzhcdTllZjdcdThjNTRcdTk0N2ZcdTllMWFcdTcyMjhcdTlhNmFcdTliMzFcdTllMWJcdTllMWVcdTdjNzJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsxOThdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzE5OF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsxOThdW2ddXT01MDY4OCtnLF9bNTA2ODgrZ109eVsxOThdW2ddKTtmb3IoeVsyMDFdPSJcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTRlNDJcdTRlNWNcdTUxZjVcdTUzMWFcdTUzODJcdTRlMDdcdTRlMGNcdTRlNDdcdTRlOGRcdTU2ZDdcdWZhMGNcdTVjNmVcdTVmNzNcdTRlMGZcdTUxODdcdTRlMGVcdTRlMmVcdTRlOTNcdTRlYzJcdTRlYzlcdTRlYzhc''@;'; put 'put ''dTUxOThcdTUyZmNcdTUzNmNcdTUzYjlcdTU3MjBcdTU5MDNcdTU5MmNcdTVjMTBcdTVkZmZcdTY1ZTFcdTZiYjNcdTZiY2NcdTZjMTRcdTcyM2ZcdTRlMzFcdTRlM2NcdTRlZThcdTRlZGNcdTRlZTlcdTRlZTFcdTRlZGRcdTRlZGFcdTUyMGNcdTUzMWNcdTUzNGNcdTU3MjJcdTU3MjNcdTU5''@;'; put 'put ''MTdcdTU5MmZcdTViODFcdTViODRcdTVjMTJcdTVjM2JcdTVjNzRcdTVjNzNcdTVlMDRcdTVlODBcdTVlODJcdTVmYzlcdTYyMDlcdTYyNTBcdTZjMTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjMzZcdTZjNDNcdTZjM2ZcdTZjM2JcdTcyYWVcdTcyYjBcdTcz''@;'; put 'put ''OGFcdTc5YjhcdTgwOGFcdTk2MWVcdTRmMGVcdTRmMThcdTRmMmNcdTRlZjVcdTRmMTRcdTRlZjFcdTRmMDBcdTRlZjdcdTRmMDhcdTRmMWRcdTRmMDJcdTRmMDVcdTRmMjJcdTRmMTNcdTRmMDRcdTRlZjRcdTRmMTJcdTUxYjFcdTUyMTNcdTUyMDlcdTUyMTBcdTUyYTZcdTUzMjJcdTUzMWZc''@;'; put 'put ''dTUzNGRcdTUzOGFcdTU0MDdcdTU2ZTFcdTU2ZGZcdTU3MmVcdTU3MmFcdTU3MzRcdTU5M2NcdTU5ODBcdTU5N2NcdTU5ODVcdTU5N2JcdTU5N2VcdTU5NzdcdTU5N2ZcdTViNTZcdTVjMTVcdTVjMjVcdTVjN2NcdTVjN2FcdTVjN2JcdTVjN2VcdTVkZGZcdTVlNzVcdTVlODRcdTVmMDJcdTVm''@;'; put 'put ''MWFcdTVmNzRcdTVmZDVcdTVmZDRcdTVmY2ZcdTYyNWNcdTYyNWVcdTYyNjRcdTYyNjFcdTYyNjZcdTYyNjJcdTYyNTlcdTYyNjBcdTYyNWFcdTYyNjVcdTY1ZWZcdTY1ZWVcdTY3M2VcdTY3MzlcdTY3MzhcdTY3M2JcdTY3M2FcdTY3M2ZcdTY3M2NcdTY3MzNcdTZjMThcdTZjNDZcdTZjNTJc''@;'; put 'put ''dTZjNWNcdTZjNGZcdTZjNGFcdTZjNTRcdTZjNGJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMDFdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIwMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMDFdW2ddXT01MTQ1NitnLF9bNTE0NTYrZ109eVsyMDFdW2ddKTtmb3IoeVsyMDJdPSJcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjNGNcdTcwNzFcdTcyNWVcdTcyYjRcdTcyYjVcdTczOGVcdTc1MmFcdTc2N2ZcdTdhNzVcdTdmNTFcdTgyNzhcdTgyN2NcdTgyODBcdTgyN2RcdTgyN2ZcdTg2NGRcdTg5N2VcdTkwOTlcdTkwOTdc''@;'; put 'put ''dTkwOThcdTkwOWJcdTkwOTRcdTk2MjJcdTk2MjRcdTk2MjBcdTk2MjNcdTRmNTZcdTRmM2JcdTRmNjJcdTRmNDlcdTRmNTNcdTRmNjRcdTRmM2VcdTRmNjdcdTRmNTJcdTRmNWZcdTRmNDFcdTRmNThcdTRmMmRcdTRmMzNcdTRmM2ZcdTRmNjFcdTUxOGZcdTUxYjlcdTUyMWNcdTUyMWVcdTUy''@;'; put 'put ''MjFcdTUyYWRcdTUyYWVcdTUzMDlcdTUzNjNcdTUzNzJcdTUzOGVcdTUzOGZcdTU0MzBcdTU0MzdcdTU0MmFcdTU0NTRcdTU0NDVcdTU0MTlcdTU0MWNcdTU0MjVcdTU0MThcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0M2RcdTU0NGZcdTU0NDFcdTU0MjhcdTU0''@;'; put 'put ''MjRcdTU0NDdcdTU2ZWVcdTU2ZTdcdTU2ZTVcdTU3NDFcdTU3NDVcdTU3NGNcdTU3NDlcdTU3NGJcdTU3NTJcdTU5MDZcdTU5NDBcdTU5YTZcdTU5OThcdTU5YTBcdTU5OTdcdTU5OGVcdTU5YTJcdTU5OTBcdTU5OGZcdTU5YTdcdTU5YTFcdTViOGVcdTViOTJcdTVjMjhcdTVjMmFcdTVjOGRc''@;'; put 'put ''dTVjOGZcdTVjODhcdTVjOGJcdTVjODlcdTVjOTJcdTVjOGFcdTVjODZcdTVjOTNcdTVjOTVcdTVkZTBcdTVlMGFcdTVlMGVcdTVlOGJcdTVlODlcdTVlOGNcdTVlODhcdTVlOGRcdTVmMDVcdTVmMWRcdTVmNzhcdTVmNzZcdTVmZDJcdTVmZDFcdTVmZDBcdTVmZWRcdTVmZThcdTVmZWVcdTVm''@;'; put 'put ''ZjNcdTVmZTFcdTVmZTRcdTVmZTNcdTVmZmFcdTVmZWZcdTVmZjdcdTVmZmJcdTYwMDBcdTVmZjRcdTYyM2FcdTYyODNcdTYyOGNcdTYyOGVcdTYyOGZcdTYyOTRcdTYyODdcdTYyNzFcdTYyN2JcdTYyN2FcdTYyNzBcdTYyODFcdTYyODhcdTYyNzdcdTYyN2RcdTYyNzJcdTYyNzRcdTY1Mzdc''@;'; put 'put ''dTY1ZjBcdTY1ZjRcdTY1ZjNcdTY1ZjJcdTY1ZjVcdTY3NDVcdTY3NDdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMDJdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIwMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMDJdW2ddXT01MTcxMitnLF9bNTE3MTIrZ109eVsyMDJdW2ddKTtmb3Io''@;'; put 'put ''eVsyMDNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY3NTlcdTY3NTVcdTY3NGNcdTY3NDhcdTY3NWRcdTY3NGRcdTY3NWFcdTY3NGJcdTZiZDBcdTZjMTlcdTZjMWFcdTZjNzhcdTZjNjdcdTZjNmJcdTZjODRcdTZjOGJcdTZjOGZc''@;'; put 'put ''dTZjNzFcdTZjNmZcdTZjNjlcdTZjOWFcdTZjNmRcdTZjODdcdTZjOTVcdTZjOWNcdTZjNjZcdTZjNzNcdTZjNjVcdTZjN2JcdTZjOGVcdTcwNzRcdTcwN2FcdTcyNjNcdTcyYmZcdTcyYmRcdTcyYzNcdTcyYzZcdTcyYzFcdTcyYmFcdTcyYzVcdTczOTVcdTczOTdcdTczOTNcdTczOTRcdTcz''@;'; put 'put ''OTJcdTc1M2FcdTc1MzlcdTc1OTRcdTc1OTVcdTc2ODFcdTc5M2RcdTgwMzRcdTgwOTVcdTgwOTlcdTgwOTBcdTgwOTJcdTgwOWNcdTgyOTBcdTgyOGZcdTgyODVcdTgyOGVcdTgyOTFcdTgyOTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgyOGFcdTgyODNcdTgy''@;'; put 'put ''ODRcdThjNzhcdThmYzlcdThmYmZcdTkwOWZcdTkwYTFcdTkwYTVcdTkwOWVcdTkwYTdcdTkwYTBcdTk2MzBcdTk2MjhcdTk2MmZcdTk2MmRcdTRlMzNcdTRmOThcdTRmN2NcdTRmODVcdTRmN2RcdTRmODBcdTRmODdcdTRmNzZcdTRmNzRcdTRmODlcdTRmODRcdTRmNzdcdTRmNGNcdTRmOTdc''@;'; put 'put ''dTRmNmFcdTRmOWFcdTRmNzlcdTRmODFcdTRmNzhcdTRmOTBcdTRmOWNcdTRmOTRcdTRmOWVcdTRmOTJcdTRmODJcdTRmOTVcdTRmNmJcdTRmNmVcdTUxOWVcdTUxYmNcdTUxYmVcdTUyMzVcdTUyMzJcdTUyMzNcdTUyNDZcdTUyMzFcdTUyYmNcdTUzMGFcdTUzMGJcdTUzM2NcdTUzOTJcdTUz''@;'; put 'put ''OTRcdTU0ODdcdTU0N2ZcdTU0ODFcdTU0OTFcdTU0ODJcdTU0ODhcdTU0NmJcdTU0N2FcdTU0N2VcdTU0NjVcdTU0NmNcdTU0NzRcdTU0NjZcdTU0OGRcdTU0NmZcdTU0NjFcdTU0NjBcdTU0OThcdTU0NjNcdTU0NjdcdTU0NjRcdTU2ZjdcdTU2ZjlcdTU3NmZcdTU3NzJcdTU3NmRcdTU3NmJc''@;'; put 'put ''dTU3NzFcdTU3NzBcdTU3NzZcdTU3ODBcdTU3NzVcdTU3N2JcdTU3NzNcdTU3NzRcdTU3NjJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMDNdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIwM11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMDNdW2ddXT01MTk2OCtnLF9bNTE5NjgrZ109eVsy''@;'; put 'put ''MDNdW2ddKTtmb3IoeVsyMDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU3NjhcdTU3N2RcdTU5MGNcdTU5NDVcdTU5YjVcdTU5YmFcdTU5Y2ZcdTU5Y2VcdTU5YjJcdTU5Y2NcdTU5YzFcdTU5YjZcdTU5YmNcdTU5YzNcdTU5ZDZc''@;'; put 'put ''dTU5YjFcdTU5YmRcdTU5YzBcdTU5YzhcdTU5YjRcdTU5YzdcdTViNjJcdTViNjVcdTViOTNcdTViOTVcdTVjNDRcdTVjNDdcdTVjYWVcdTVjYTRcdTVjYTBcdTVjYjVcdTVjYWZcdTVjYThcdTVjYWNcdTVjOWZcdTVjYTNcdTVjYWRcdTVjYTJcdTVjYWFcdTVjYTdcdTVjOWRcdTVjYTVcdTVj''@;'; put 'put ''YjZcdTVjYjBcdTVjYTZcdTVlMTdcdTVlMTRcdTVlMTlcdTVmMjhcdTVmMjJcdTVmMjNcdTVmMjRcdTVmNTRcdTVmODJcdTVmN2VcdTVmN2RcdTVmZGVcdTVmZTVcdTYwMmRcdTYwMjZcdTYwMTlcdTYwMzJcdTYwMGJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYw''@;'; put 'put ''MzRcdTYwMGFcdTYwMTdcdTYwMzNcdTYwMWFcdTYwMWVcdTYwMmNcdTYwMjJcdTYwMGRcdTYwMTBcdTYwMmVcdTYwMTNcdTYwMTFcdTYwMGNcdTYwMDlcdTYwMWNcdTYyMTRcdTYyM2RcdTYyYWRcdTYyYjRcdTYyZDFcdTYyYmVcdTYyYWFcdTYyYjZcdTYyY2FcdTYyYWVcdTYyYjNcdTYyYWZc''@;'; put 'put ''dTYyYmJcdTYyYTlcdTYyYjBcdTYyYjhcdTY1M2RcdTY1YThcdTY1YmJcdTY2MDlcdTY1ZmNcdTY2MDRcdTY2MTJcdTY2MDhcdTY1ZmJcdTY2MDNcdTY2MGJcdTY2MGRcdTY2MDVcdTY1ZmRcdTY2MTFcdTY2MTBcdTY2ZjZcdTY3MGFcdTY3ODVcdTY3NmNcdTY3OGVcdTY3OTJcdTY3NzZcdTY3''@;'; put 'put ''N2JcdTY3OThcdTY3ODZcdTY3ODRcdTY3NzRcdTY3OGRcdTY3OGNcdTY3N2FcdTY3OWZcdTY3OTFcdTY3OTlcdTY3ODNcdTY3N2RcdTY3ODFcdTY3NzhcdTY3NzlcdTY3OTRcdTZiMjVcdTZiODBcdTZiN2VcdTZiZGVcdTZjMWRcdTZjOTNcdTZjZWNcdTZjZWJcdTZjZWVcdTZjZDlcdTZjYjZc''@;'; put 'put ''dTZjZDRcdTZjYWRcdTZjZTdcdTZjYjdcdTZjZDBcdTZjYzJcdTZjYmFcdTZjYzNcdTZjYzZcdTZjZWRcdTZjZjJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMDRdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIwNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMDRdW2ddXT01MjIyNCtnLF9b''@;'; put 'put ''NTIyMjQrZ109eVsyMDRdW2ddKTtmb3IoeVsyMDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZjZDJcdTZjZGRcdTZjYjRcdTZjOGFcdTZjOWRcdTZjODBcdTZjZGVcdTZjYzBcdTZkMzBcdTZjY2RcdTZjYzdcdTZjYjBcdTZjZjlc''@;'; put 'put ''dTZjY2ZcdTZjZTlcdTZjZDFcdTcwOTRcdTcwOThcdTcwODVcdTcwOTNcdTcwODZcdTcwODRcdTcwOTFcdTcwOTZcdTcwODJcdTcwOWFcdTcwODNcdTcyNmFcdTcyZDZcdTcyY2JcdTcyZDhcdTcyYzlcdTcyZGNcdTcyZDJcdTcyZDRcdTcyZGFcdTcyY2NcdTcyZDFcdTczYTRcdTczYTFcdTcz''@;'; put 'put ''YWRcdTczYTZcdTczYTJcdTczYTBcdTczYWNcdTczOWRcdTc0ZGRcdTc0ZThcdTc1M2ZcdTc1NDBcdTc1M2VcdTc1OGNcdTc1OThcdTc2YWZcdTc2ZjNcdTc2ZjFcdTc2ZjBcdTc2ZjVcdTc3ZjhcdTc3ZmNcdTc3ZjlcdTc3ZmJcdTc3ZmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTc3ZjdcdTc5NDJcdTc5M2ZcdTc5YzVcdTdhNzhcdTdhN2JcdTdhZmJcdTdjNzVcdTdjZmRcdTgwMzVcdTgwOGZcdTgwYWVcdTgwYTNcdTgwYjhcdTgwYjVcdTgwYWRcdTgyMjBcdTgyYTBcdTgyYzBcdTgyYWJcdTgyOWFcdTgyOThcdTgyOWJcdTgyYjVcdTgyYTdcdTgyYWVc''@;'; put 'put ''dTgyYmNcdTgyOWVcdTgyYmFcdTgyYjRcdTgyYThcdTgyYTFcdTgyYTlcdTgyYzJcdTgyYTRcdTgyYzNcdTgyYjZcdTgyYTJcdTg2NzBcdTg2NmZcdTg2NmRcdTg2NmVcdThjNTZcdThmZDJcdThmY2JcdThmZDNcdThmY2RcdThmZDZcdThmZDVcdThmZDdcdTkwYjJcdTkwYjRcdTkwYWZcdTkw''@;'; put 'put ''YjNcdTkwYjBcdTk2MzlcdTk2M2RcdTk2M2NcdTk2M2FcdTk2NDNcdTRmY2RcdTRmYzVcdTRmZDNcdTRmYjJcdTRmYzlcdTRmY2JcdTRmYzFcdTRmZDRcdTRmZGNcdTRmZDlcdTRmYmJcdTRmYjNcdTRmZGJcdTRmYzdcdTRmZDZcdTRmYmFcdTRmYzBcdTRmYjlcdTRmZWNcdTUyNDRcdTUyNDlc''@;'; put 'put ''dTUyYzBcdTUyYzJcdTUzM2RcdTUzN2NcdTUzOTdcdTUzOTZcdTUzOTlcdTUzOThcdTU0YmFcdTU0YTFcdTU0YWRcdTU0YTVcdTU0Y2ZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMDVdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIwNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMDVdW2dd''@;'; put 'put ''XT01MjQ4MCtnLF9bNTI0ODArZ109eVsyMDVdW2ddKTtmb3IoeVsyMDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU0YzNcdTgzMGRcdTU0YjdcdTU0YWVcdTU0ZDZcdTU0YjZcdTU0YzVcdTU0YzZcdTU0YTBcdTU0NzBcdTU0YmNc''@;'; put 'put ''dTU0YTJcdTU0YmVcdTU0NzJcdTU0ZGVcdTU0YjBcdTU3YjVcdTU3OWVcdTU3OWZcdTU3YTRcdTU3OGNcdTU3OTdcdTU3OWRcdTU3OWJcdTU3OTRcdTU3OThcdTU3OGZcdTU3OTlcdTU3YTVcdTU3OWFcdTU3OTVcdTU4ZjRcdTU5MGRcdTU5NTNcdTU5ZTFcdTU5ZGVcdTU5ZWVcdTVhMDBcdTU5''@;'; put 'put ''ZjFcdTU5ZGRcdTU5ZmFcdTU5ZmRcdTU5ZmNcdTU5ZjZcdTU5ZTRcdTU5ZjJcdTU5ZjdcdTU5ZGJcdTU5ZTlcdTU5ZjNcdTU5ZjVcdTU5ZTBcdTU5ZmVcdTU5ZjRcdTU5ZWRcdTViYThcdTVjNGNcdTVjZDBcdTVjZDhcdTVjY2NcdTVjZDdcdTVjY2JcdTVjZGJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVjZGVcdTVjZGFcdTVjYzlcdTVjYzdcdTVjY2FcdTVjZDZcdTVjZDNcdTVjZDRcdTVjY2ZcdTVjYzhcdTVjYzZcdTVjY2VcdTVjZGZcdTVjZjhcdTVkZjlcdTVlMjFcdTVlMjJcdTVlMjNcdTVlMjBcdTVlMjRcdTVlYjBcdTVlYTRcdTVlYTJcdTVlOWJc''@;'; put 'put ''dTVlYTNcdTVlYTVcdTVmMDdcdTVmMmVcdTVmNTZcdTVmODZcdTYwMzdcdTYwMzlcdTYwNTRcdTYwNzJcdTYwNWVcdTYwNDVcdTYwNTNcdTYwNDdcdTYwNDlcdTYwNWJcdTYwNGNcdTYwNDBcdTYwNDJcdTYwNWZcdTYwMjRcdTYwNDRcdTYwNThcdTYwNjZcdTYwNmVcdTYyNDJcdTYyNDNcdTYy''@;'; put 'put ''Y2ZcdTYzMGRcdTYzMGJcdTYyZjVcdTYzMGVcdTYzMDNcdTYyZWJcdTYyZjlcdTYzMGZcdTYzMGNcdTYyZjhcdTYyZjZcdTYzMDBcdTYzMTNcdTYzMTRcdTYyZmFcdTYzMTVcdTYyZmJcdTYyZjBcdTY1NDFcdTY1NDNcdTY1YWFcdTY1YmZcdTY2MzZcdTY2MjFcdTY2MzJcdTY2MzVcdTY2MWNc''@;'; put 'put ''dTY2MjZcdTY2MjJcdTY2MzNcdTY2MmJcdTY2M2FcdTY2MWRcdTY2MzRcdTY2MzlcdTY2MmVcdTY3MGZcdTY3MTBcdTY3YzFcdTY3ZjJcdTY3YzhcdTY3YmFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMDZdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIwNl1bZ10uY2hhckNvZGVBdCgwKSYm''@;'; put 'put ''KElbeVsyMDZdW2ddXT01MjczNitnLF9bNTI3MzYrZ109eVsyMDZdW2ddKTtmb3IoeVsyMDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY3ZGNcdTY3YmJcdTY3ZjhcdTY3ZDhcdTY3YzBcdTY3YjdcdTY3YzVcdTY3ZWJcdTY3ZTRc''@;'; put 'put ''dTY3ZGZcdTY3YjVcdTY3Y2RcdTY3YjNcdTY3ZjdcdTY3ZjZcdTY3ZWVcdTY3ZTNcdTY3YzJcdTY3YjlcdTY3Y2VcdTY3ZTdcdTY3ZjBcdTY3YjJcdTY3ZmNcdTY3YzZcdTY3ZWRcdTY3Y2NcdTY3YWVcdTY3ZTZcdTY3ZGJcdTY3ZmFcdTY3YzlcdTY3Y2FcdTY3YzNcdTY3ZWFcdTY3Y2JcdTZi''@;'; put 'put ''MjhcdTZiODJcdTZiODRcdTZiYjZcdTZiZDZcdTZiZDhcdTZiZTBcdTZjMjBcdTZjMjFcdTZkMjhcdTZkMzRcdTZkMmRcdTZkMWZcdTZkM2NcdTZkM2ZcdTZkMTJcdTZkMGFcdTZjZGFcdTZkMzNcdTZkMDRcdTZkMTlcdTZkM2FcdTZkMWFcdTZkMTFcdTZkMDBcdTZkMWRcdTZkNDJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkMDFcdTZkMThcdTZkMzdcdTZkMDNcdTZkMGZcdTZkNDBcdTZkMDdcdTZkMjBcdTZkMmNcdTZkMDhcdTZkMjJcdTZkMDlcdTZkMTBcdTcwYjdcdTcwOWZcdTcwYmVcdTcwYjFcdTcwYjBcdTcwYTFcdTcwYjRcdTcwYjVcdTcwYTlc''@;'; put 'put ''dTcyNDFcdTcyNDlcdTcyNGFcdTcyNmNcdTcyNzBcdTcyNzNcdTcyNmVcdTcyY2FcdTcyZTRcdTcyZThcdTcyZWJcdTcyZGZcdTcyZWFcdTcyZTZcdTcyZTNcdTczODVcdTczY2NcdTczYzJcdTczYzhcdTczYzVcdTczYjlcdTczYjZcdTczYjVcdTczYjRcdTczZWJcdTczYmZcdTczYzdcdTcz''@;'; put 'put ''YmVcdTczYzNcdTczYzZcdTczYjhcdTczY2JcdTc0ZWNcdTc0ZWVcdTc1MmVcdTc1NDdcdTc1NDhcdTc1YTdcdTc1YWFcdTc2NzlcdTc2YzRcdTc3MDhcdTc3MDNcdTc3MDRcdTc3MDVcdTc3MGFcdTc2ZjdcdTc2ZmJcdTc2ZmFcdTc3ZTdcdTc3ZThcdTc4MDZcdTc4MTFcdTc4MTJcdTc4MDVc''@;'; put 'put ''dTc4MTBcdTc4MGZcdTc4MGVcdTc4MDlcdTc4MDNcdTc4MTNcdTc5NGFcdTc5NGNcdTc5NGJcdTc5NDVcdTc5NDRcdTc5ZDVcdTc5Y2RcdTc5Y2ZcdTc5ZDZcdTc5Y2VcdTdhODBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMDddLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIwN11bZ10uY2hh''@;'; put 'put ''ckNvZGVBdCgwKSYmKElbeVsyMDddW2ddXT01Mjk5MitnLF9bNTI5OTIrZ109eVsyMDddW2ddKTtmb3IoeVsyMDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhN2VcdTdhZDFcdTdiMDBcdTdiMDFcdTdjN2FcdTdjNzhcdTdjNzlc''@;'; put 'put ''dTdjN2ZcdTdjODBcdTdjODFcdTdkMDNcdTdkMDhcdTdkMDFcdTdmNThcdTdmOTFcdTdmOGRcdTdmYmVcdTgwMDdcdTgwMGVcdTgwMGZcdTgwMTRcdTgwMzdcdTgwZDhcdTgwYzdcdTgwZTBcdTgwZDFcdTgwYzhcdTgwYzJcdTgwZDBcdTgwYzVcdTgwZTNcdTgwZDlcdTgwZGNcdTgwY2FcdTgw''@;'; put 'put ''ZDVcdTgwYzlcdTgwY2ZcdTgwZDdcdTgwZTZcdTgwY2RcdTgxZmZcdTgyMjFcdTgyOTRcdTgyZDlcdTgyZmVcdTgyZjlcdTgzMDdcdTgyZThcdTgzMDBcdTgyZDVcdTgzM2FcdTgyZWJcdTgyZDZcdTgyZjRcdTgyZWNcdTgyZTFcdTgyZjJcdTgyZjVcdTgzMGNcdTgyZmJcdTgyZjZcdTgyZjBc''@;'; put 'put ''dTgyZWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgyZTRcdTgyZTBcdTgyZmFcdTgyZjNcdTgyZWRcdTg2NzdcdTg2NzRcdTg2N2NcdTg2NzNcdTg4NDFcdTg4NGVcdTg4NjdcdTg4NmFcdTg4NjlcdTg5ZDNcdThhMDRcdThhMDdcdThkNzJcdThmZTNcdThmZTFc''@;'; put 'put ''dThmZWVcdThmZTBcdTkwZjFcdTkwYmRcdTkwYmZcdTkwZDVcdTkwYzVcdTkwYmVcdTkwYzdcdTkwY2JcdTkwYzhcdTkxZDRcdTkxZDNcdTk2NTRcdTk2NGZcdTk2NTFcdTk2NTNcdTk2NGFcdTk2NGVcdTUwMWVcdTUwMDVcdTUwMDdcdTUwMTNcdTUwMjJcdTUwMzBcdTUwMWJcdTRmZjVcdTRm''@;'; put 'put ''ZjRcdTUwMzNcdTUwMzdcdTUwMmNcdTRmZjZcdTRmZjdcdTUwMTdcdTUwMWNcdTUwMjBcdTUwMjdcdTUwMzVcdTUwMmZcdTUwMzFcdTUwMGVcdTUxNWFcdTUxOTRcdTUxOTNcdTUxY2FcdTUxYzRcdTUxYzVcdTUxYzhcdTUxY2VcdTUyNjFcdTUyNWFcdTUyNTJcdTUyNWVcdTUyNWZcdTUyNTVc''@;'; put 'put ''dTUyNjJcdTUyY2RcdTUzMGVcdTUzOWVcdTU1MjZcdTU0ZTJcdTU1MTdcdTU1MTJcdTU0ZTdcdTU0ZjNcdTU0ZTRcdTU1MWFcdTU0ZmZcdTU1MDRcdTU1MDhcdTU0ZWJcdTU1MTFcdTU1MDVcdTU0ZjFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMDhdLmxlbmd0aDsrK2cpNjU1MzMhPT15''@;'; put 'put ''WzIwOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMDhdW2ddXT01MzI0OCtnLF9bNTMyNDgrZ109eVsyMDhdW2ddKTtmb3IoeVsyMDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU1MGFcdTU0ZmJcdTU0ZjdcdTU0ZjhcdTU0ZTBc''@;'; put 'put ''dTU1MGVcdTU1MDNcdTU1MGJcdTU3MDFcdTU3MDJcdTU3Y2NcdTU4MzJcdTU3ZDVcdTU3ZDJcdTU3YmFcdTU3YzZcdTU3YmRcdTU3YmNcdTU3YjhcdTU3YjZcdTU3YmZcdTU3YzdcdTU3ZDBcdTU3YjlcdTU3YzFcdTU5MGVcdTU5NGFcdTVhMTlcdTVhMTZcdTVhMmRcdTVhMmVcdTVhMTVcdTVh''@;'; put 'put ''MGZcdTVhMTdcdTVhMGFcdTVhMWVcdTVhMzNcdTViNmNcdTViYTdcdTViYWRcdTViYWNcdTVjMDNcdTVjNTZcdTVjNTRcdTVjZWNcdTVjZmZcdTVjZWVcdTVjZjFcdTVjZjdcdTVkMDBcdTVjZjlcdTVlMjlcdTVlMjhcdTVlYThcdTVlYWVcdTVlYWFcdTVlYWNcdTVmMzNcdTVmMzBcdTVmNjdc''@;'; put 'put ''dTYwNWRcdTYwNWFcdTYwNjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwNDFcdTYwYTJcdTYwODhcdTYwODBcdTYwOTJcdTYwODFcdTYwOWRcdTYwODNcdTYwOTVcdTYwOWJcdTYwOTdcdTYwODdcdTYwOWNcdTYwOGVcdTYyMTlcdTYyNDZcdTYyZjJcdTYzMTBc''@;'; put 'put ''dTYzNTZcdTYzMmNcdTYzNDRcdTYzNDVcdTYzMzZcdTYzNDNcdTYzZTRcdTYzMzlcdTYzNGJcdTYzNGFcdTYzM2NcdTYzMjlcdTYzNDFcdTYzMzRcdTYzNThcdTYzNTRcdTYzNTlcdTYzMmRcdTYzNDdcdTYzMzNcdTYzNWFcdTYzNTFcdTYzMzhcdTYzNTdcdTYzNDBcdTYzNDhcdTY1NGFcdTY1''@;'; put 'put ''NDZcdTY1YzZcdTY1YzNcdTY1YzRcdTY1YzJcdTY2NGFcdTY2NWZcdTY2NDdcdTY2NTFcdTY3MTJcdTY3MTNcdTY4MWZcdTY4MWFcdTY4NDlcdTY4MzJcdTY4MzNcdTY4M2JcdTY4NGJcdTY4NGZcdTY4MTZcdTY4MzFcdTY4MWNcdTY4MzVcdTY4MmJcdTY4MmRcdTY4MmZcdTY4NGVcdTY4NDRc''@;'; put 'put ''dTY4MzRcdTY4MWRcdTY4MTJcdTY4MTRcdTY4MjZcdTY4MjhcdTY4MmVcdTY4NGRcdTY4M2FcdTY4MjVcdTY4MjBcdTZiMmNcdTZiMmZcdTZiMmRcdTZiMzFcdTZiMzRcdTZiNmRcdTgwODJcdTZiODhcdTZiZTZcdTZiZTRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMDldLmxlbmd0aDsr''@;'; put 'put ''K2cpNjU1MzMhPT15WzIwOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMDldW2ddXT01MzUwNCtnLF9bNTM1MDQrZ109eVsyMDldW2ddKTtmb3IoeVsyMTBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZiZThcdTZiZTNcdTZiZTJc''@;'; put 'put ''dTZiZTdcdTZjMjVcdTZkN2FcdTZkNjNcdTZkNjRcdTZkNzZcdTZkMGRcdTZkNjFcdTZkOTJcdTZkNThcdTZkNjJcdTZkNmRcdTZkNmZcdTZkOTFcdTZkOGRcdTZkZWZcdTZkN2ZcdTZkODZcdTZkNWVcdTZkNjdcdTZkNjBcdTZkOTdcdTZkNzBcdTZkN2NcdTZkNWZcdTZkODJcdTZkOThcdTZk''@;'; put 'put ''MmZcdTZkNjhcdTZkOGJcdTZkN2VcdTZkODBcdTZkODRcdTZkMTZcdTZkODNcdTZkN2JcdTZkN2RcdTZkNzVcdTZkOTBcdTcwZGNcdTcwZDNcdTcwZDFcdTcwZGRcdTcwY2JcdTdmMzlcdTcwZTJcdTcwZDdcdTcwZDJcdTcwZGVcdTcwZTBcdTcwZDRcdTcwY2RcdTcwYzVcdTcwYzZcdTcwYzdc''@;'; put 'put ''dTcwZGFcdTcwY2VcdTcwZTFcdTcyNDJcdTcyNzhcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcyNzdcdTcyNzZcdTczMDBcdTcyZmFcdTcyZjRcdTcyZmVcdTcyZjZcdTcyZjNcdTcyZmJcdTczMDFcdTczZDNcdTczZDlcdTczZTVcdTczZDZcdTczYmNcdTczZTdc''@;'; put 'put ''dTczZTNcdTczZTlcdTczZGNcdTczZDJcdTczZGJcdTczZDRcdTczZGRcdTczZGFcdTczZDdcdTczZDhcdTczZThcdTc0ZGVcdTc0ZGZcdTc0ZjRcdTc0ZjVcdTc1MjFcdTc1NWJcdTc1NWZcdTc1YjBcdTc1YzFcdTc1YmJcdTc1YzRcdTc1YzBcdTc1YmZcdTc1YjZcdTc1YmFcdTc2OGFcdTc2''@;'; put 'put ''YzlcdTc3MWRcdTc3MWJcdTc3MTBcdTc3MTNcdTc3MTJcdTc3MjNcdTc3MTFcdTc3MTVcdTc3MTlcdTc3MWFcdTc3MjJcdTc3MjdcdTc4MjNcdTc4MmNcdTc4MjJcdTc4MzVcdTc4MmZcdTc4MjhcdTc4MmVcdTc4MmJcdTc4MjFcdTc4MjlcdTc4MzNcdTc4MmFcdTc4MzFcdTc5NTRcdTc5NWJc''@;'; put 'put ''dTc5NGZcdTc5NWNcdTc5NTNcdTc5NTJcdTc5NTFcdTc5ZWJcdTc5ZWNcdTc5ZTBcdTc5ZWVcdTc5ZWRcdTc5ZWFcdTc5ZGNcdTc5ZGVcdTc5ZGRcdTdhODZcdTdhODlcdTdhODVcdTdhOGJcdTdhOGNcdTdhOGFcdTdhODdcdTdhZDhcdTdiMTBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsy''@;'; put 'put ''MTBdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIxMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMTBdW2ddXT01Mzc2MCtnLF9bNTM3NjArZ109eVsyMTBdW2ddKTtmb3IoeVsyMTFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdiMDRc''@;'; put 'put ''dTdiMTNcdTdiMDVcdTdiMGZcdTdiMDhcdTdiMGFcdTdiMGVcdTdiMDlcdTdiMTJcdTdjODRcdTdjOTFcdTdjOGFcdTdjOGNcdTdjODhcdTdjOGRcdTdjODVcdTdkMWVcdTdkMWRcdTdkMTFcdTdkMGVcdTdkMThcdTdkMTZcdTdkMTNcdTdkMWZcdTdkMTJcdTdkMGZcdTdkMGNcdTdmNWNcdTdm''@;'; put 'put ''NjFcdTdmNWVcdTdmNjBcdTdmNWRcdTdmNWJcdTdmOTZcdTdmOTJcdTdmYzNcdTdmYzJcdTdmYzBcdTgwMTZcdTgwM2VcdTgwMzlcdTgwZmFcdTgwZjJcdTgwZjlcdTgwZjVcdTgxMDFcdTgwZmJcdTgxMDBcdTgyMDFcdTgyMmZcdTgyMjVcdTgzMzNcdTgzMmRcdTgzNDRcdTgzMTlcdTgzNTFc''@;'; put 'put ''dTgzMjVcdTgzNTZcdTgzM2ZcdTgzNDFcdTgzMjZcdTgzMWNcdTgzMjJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgzNDJcdTgzNGVcdTgzMWJcdTgzMmFcdTgzMDhcdTgzM2NcdTgzNGRcdTgzMTZcdTgzMjRcdTgzMjBcdTgzMzdcdTgzMmZcdTgzMjlcdTgzNDdc''@;'; put 'put ''dTgzNDVcdTgzNGNcdTgzNTNcdTgzMWVcdTgzMmNcdTgzNGJcdTgzMjdcdTgzNDhcdTg2NTNcdTg2NTJcdTg2YTJcdTg2YThcdTg2OTZcdTg2OGRcdTg2OTFcdTg2OWVcdTg2ODdcdTg2OTdcdTg2ODZcdTg2OGJcdTg2OWFcdTg2ODVcdTg2YTVcdTg2OTlcdTg2YTFcdTg2YTdcdTg2OTVcdTg2''@;'; put 'put ''OThcdTg2OGVcdTg2OWRcdTg2OTBcdTg2OTRcdTg4NDNcdTg4NDRcdTg4NmRcdTg4NzVcdTg4NzZcdTg4NzJcdTg4ODBcdTg4NzFcdTg4N2ZcdTg4NmZcdTg4ODNcdTg4N2VcdTg4NzRcdTg4N2NcdThhMTJcdThjNDdcdThjNTdcdThjN2JcdThjYTRcdThjYTNcdThkNzZcdThkNzhcdThkYjVc''@;'; put 'put ''dThkYjdcdThkYjZcdThlZDFcdThlZDNcdThmZmVcdThmZjVcdTkwMDJcdThmZmZcdThmZmJcdTkwMDRcdThmZmNcdThmZjZcdTkwZDZcdTkwZTBcdTkwZDlcdTkwZGFcdTkwZTNcdTkwZGZcdTkwZTVcdTkwZDhcdTkwZGJcdTkwZDdcdTkwZGNcdTkwZTRcdTkxNTBcdWZmZmQiLnNwbGl0KCIi''@;'; put 'put ''KSxnPTA7ZyE9eVsyMTFdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIxMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMTFdW2ddXT01NDAxNitnLF9bNTQwMTYrZ109eVsyMTFdW2ddKTtmb3IoeVsyMTJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdTkxNGVcdTkxNGZcdTkxZDVcdTkxZTJcdTkxZGFcdTk2NWNcdTk2NWZcdTk2YmNcdTk4ZTNcdTlhZGZcdTliMmZcdTRlN2ZcdTUwNzBcdTUwNmFcdTUwNjFcdTUwNWVcdTUwNjBcdTUwNTNcdTUwNGJcdTUwNWRcdTUwNzJcdTUwNDhcdTUwNGRcdTUwNDFcdTUwNWJcdTUwNGFcdTUw''@;'; put 'put ''NjJcdTUwMTVcdTUwNDVcdTUwNWZcdTUwNjlcdTUwNmJcdTUwNjNcdTUwNjRcdTUwNDZcdTUwNDBcdTUwNmVcdTUwNzNcdTUwNTdcdTUwNTFcdTUxZDBcdTUyNmJcdTUyNmRcdTUyNmNcdTUyNmVcdTUyZDZcdTUyZDNcdTUzMmRcdTUzOWNcdTU1NzVcdTU1NzZcdTU1M2NcdTU1NGRcdTU1NTBc''@;'; put 'put ''dTU1MzRcdTU1MmFcdTU1NTFcdTU1NjJcdTU1MzZcdTU1MzVcdTU1MzBcdTU1NTJcdTU1NDVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU1MGNcdTU1MzJcdTU1NjVcdTU1NGVcdTU1MzlcdTU1NDhcdTU1MmRcdTU1M2JcdTU1NDBcdTU1NGJcdTU3MGFcdTU3MDdc''@;'; put 'put ''dTU3ZmJcdTU4MTRcdTU3ZTJcdTU3ZjZcdTU3ZGNcdTU3ZjRcdTU4MDBcdTU3ZWRcdTU3ZmRcdTU4MDhcdTU3ZjhcdTU4MGJcdTU3ZjNcdTU3Y2ZcdTU4MDdcdTU3ZWVcdTU3ZTNcdTU3ZjJcdTU3ZTVcdTU3ZWNcdTU3ZTFcdTU4MGVcdTU3ZmNcdTU4MTBcdTU3ZTdcdTU4MDFcdTU4MGNcdTU3''@;'; put 'put ''ZjFcdTU3ZTlcdTU3ZjBcdTU4MGRcdTU4MDRcdTU5NWNcdTVhNjBcdTVhNThcdTVhNTVcdTVhNjdcdTVhNWVcdTVhMzhcdTVhMzVcdTVhNmRcdTVhNTBcdTVhNWZcdTVhNjVcdTVhNmNcdTVhNTNcdTVhNjRcdTVhNTdcdTVhNDNcdTVhNWRcdTVhNTJcdTVhNDRcdTVhNWJcdTVhNDhcdTVhOGVc''@;'; put 'put ''dTVhM2VcdTVhNGRcdTVhMzlcdTVhNGNcdTVhNzBcdTVhNjlcdTVhNDdcdTVhNTFcdTVhNTZcdTVhNDJcdTVhNWNcdTViNzJcdTViNmVcdTViYzFcdTViYzBcdTVjNTlcdTVkMWVcdTVkMGJcdTVkMWRcdTVkMWFcdTVkMjBcdTVkMGNcdTVkMjhcdTVkMGRcdTVkMjZcdTVkMjVcdTVkMGZcdWZm''@;'; put 'put ''ZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMTJdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIxMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMTJdW2ddXT01NDI3MitnLF9bNTQyNzIrZ109eVsyMTJdW2ddKTtmb3IoeVsyMTNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTVkMzBcdTVkMTJcdTVkMjNcdTVkMWZcdTVkMmVcdTVlM2VcdTVlMzRcdTVlYjFcdTVlYjRcdTVlYjlcdTVlYjJcdTVlYjNcdTVmMzZcdTVmMzhcdTVmOWJcdTVmOTZcdTVmOWZcdTYwOGFcdTYwOTBcdTYwODZcdTYwYmVcdTYwYjBcdTYwYmFcdTYwZDNcdTYw''@;'; put 'put ''ZDRcdTYwY2ZcdTYwZTRcdTYwZDlcdTYwZGRcdTYwYzhcdTYwYjFcdTYwZGJcdTYwYjdcdTYwY2FcdTYwYmZcdTYwYzNcdTYwY2RcdTYwYzBcdTYzMzJcdTYzNjVcdTYzOGFcdTYzODJcdTYzN2RcdTYzYmRcdTYzOWVcdTYzYWRcdTYzOWRcdTYzOTdcdTYzYWJcdTYzOGVcdTYzNmZcdTYzODdc''@;'; put 'put ''dTYzOTBcdTYzNmVcdTYzYWZcdTYzNzVcdTYzOWNcdTYzNmRcdTYzYWVcdTYzN2NcdTYzYTRcdTYzM2JcdTYzOWZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYzNzhcdTYzODVcdTYzODFcdTYzOTFcdTYzOGRcdTYzNzBcdTY1NTNcdTY1Y2RcdTY2NjVcdTY2NjFc''@;'; put 'put ''dTY2NWJcdTY2NTlcdTY2NWNcdTY2NjJcdTY3MThcdTY4NzlcdTY4ODdcdTY4OTBcdTY4OWNcdTY4NmRcdTY4NmVcdTY4YWVcdTY4YWJcdTY5NTZcdTY4NmZcdTY4YTNcdTY4YWNcdTY4YTlcdTY4NzVcdTY4NzRcdTY4YjJcdTY4OGZcdTY4NzdcdTY4OTJcdTY4N2NcdTY4NmJcdTY4NzJcdTY4''@;'; put 'put ''YWFcdTY4ODBcdTY4NzFcdTY4N2VcdTY4OWJcdTY4OTZcdTY4OGJcdTY4YTBcdTY4ODlcdTY4YTRcdTY4NzhcdTY4N2JcdTY4OTFcdTY4OGNcdTY4OGFcdTY4N2RcdTZiMzZcdTZiMzNcdTZiMzdcdTZiMzhcdTZiOTFcdTZiOGZcdTZiOGRcdTZiOGVcdTZiOGNcdTZjMmFcdTZkYzBcdTZkYWJc''@;'; put 'put ''dTZkYjRcdTZkYjNcdTZlNzRcdTZkYWNcdTZkZTlcdTZkZTJcdTZkYjdcdTZkZjZcdTZkZDRcdTZlMDBcdTZkYzhcdTZkZTBcdTZkZGZcdTZkZDZcdTZkYmVcdTZkZTVcdTZkZGNcdTZkZGRcdTZkZGJcdTZkZjRcdTZkY2FcdTZkYmRcdTZkZWRcdTZkZjBcdTZkYmFcdTZkZDVcdTZkYzJcdTZk''@;'; put 'put ''Y2ZcdTZkYzlcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMTNdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIxM11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMTNdW2ddXT01NDUyOCtnLF9bNTQ1MjgrZ109eVsyMTNdW2ddKTtmb3IoeVsyMTRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZkZDBcdTZkZjJcdTZkZDNcdTZkZmRcdTZkZDdcdTZkY2RcdTZkZTNcdTZkYmJcdTcwZmFcdTcxMGRcdTcwZjdcdTcxMTdcdTcwZjRcdTcxMGNcdTcwZjBcdTcxMDRcdTcwZjNcdTcxMTBcdTcwZmNcdTcwZmZcdTcxMDZcdTcxMTNcdTcx''@;'; put 'put ''MDBcdTcwZjhcdTcwZjZcdTcxMGJcdTcxMDJcdTcxMGVcdTcyN2VcdTcyN2JcdTcyN2NcdTcyN2ZcdTczMWRcdTczMTdcdTczMDdcdTczMTFcdTczMThcdTczMGFcdTczMDhcdTcyZmZcdTczMGZcdTczMWVcdTczODhcdTczZjZcdTczZjhcdTczZjVcdTc0MDRcdTc0MDFcdTczZmRcdTc0MDdc''@;'; put 'put ''dTc0MDBcdTczZmFcdTczZmNcdTczZmZcdTc0MGNcdTc0MGJcdTczZjRcdTc0MDhcdTc1NjRcdTc1NjNcdTc1Y2VcdTc1ZDJcdTc1Y2ZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc1Y2JcdTc1Y2NcdTc1ZDFcdTc1ZDBcdTc2OGZcdTc2ODlcdTc2ZDNcdTc3Mzlc''@;'; put 'put ''dTc3MmZcdTc3MmRcdTc3MzFcdTc3MzJcdTc3MzRcdTc3MzNcdTc3M2RcdTc3MjVcdTc3M2JcdTc3MzVcdTc4NDhcdTc4NTJcdTc4NDlcdTc4NGRcdTc4NGFcdTc4NGNcdTc4MjZcdTc4NDVcdTc4NTBcdTc5NjRcdTc5NjdcdTc5NjlcdTc5NmFcdTc5NjNcdTc5NmJcdTc5NjFcdTc5YmJcdTc5''@;'; put 'put ''ZmFcdTc5ZjhcdTc5ZjZcdTc5ZjdcdTdhOGZcdTdhOTRcdTdhOTBcdTdiMzVcdTdiNDdcdTdiMzRcdTdiMjVcdTdiMzBcdTdiMjJcdTdiMjRcdTdiMzNcdTdiMThcdTdiMmFcdTdiMWRcdTdiMzFcdTdiMmJcdTdiMmRcdTdiMmZcdTdiMzJcdTdiMzhcdTdiMWFcdTdiMjNcdTdjOTRcdTdjOThc''@;'; put 'put ''dTdjOTZcdTdjYTNcdTdkMzVcdTdkM2RcdTdkMzhcdTdkMzZcdTdkM2FcdTdkNDVcdTdkMmNcdTdkMjlcdTdkNDFcdTdkNDdcdTdkM2VcdTdkM2ZcdTdkNGFcdTdkM2JcdTdkMjhcdTdmNjNcdTdmOTVcdTdmOWNcdTdmOWRcdTdmOWJcdTdmY2FcdTdmY2JcdTdmY2RcdTdmZDBcdTdmZDFcdTdm''@;'; put 'put ''YzdcdTdmY2ZcdTdmYzlcdTgwMWZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMTRdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIxNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMTRdW2ddXT01NDc4NCtnLF9bNTQ3ODQrZ109eVsyMTRdW2ddKTtmb3IoeVsyMTVdPSJcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwMWVcdTgwMWJcdTgwNDdcdTgwNDNcdTgwNDhcdTgxMThcdTgxMjVcdTgxMTlcdTgxMWJcdTgxMmRcdTgxMWZcdTgxMmNcdTgxMWVcdTgxMjFcdTgxMTVcdTgxMjdcdTgxMWRcdTgxMjJcdTgyMTFcdTgyMzhcdTgy''@;'; put 'put ''MzNcdTgyM2FcdTgyMzRcdTgyMzJcdTgyNzRcdTgzOTBcdTgzYTNcdTgzYThcdTgzOGRcdTgzN2FcdTgzNzNcdTgzYTRcdTgzNzRcdTgzOGZcdTgzODFcdTgzOTVcdTgzOTlcdTgzNzVcdTgzOTRcdTgzYTlcdTgzN2RcdTgzODNcdTgzOGNcdTgzOWRcdTgzOWJcdTgzYWFcdTgzOGJcdTgzN2Vc''@;'; put 'put ''dTgzYTVcdTgzYWZcdTgzODhcdTgzOTdcdTgzYjBcdTgzN2ZcdTgzYTZcdTgzODdcdTgzYWVcdTgzNzZcdTgzOWFcdTg2NTlcdTg2NTZcdTg2YmZcdTg2YjdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg2YzJcdTg2YzFcdTg2YzVcdTg2YmFcdTg2YjBcdTg2Yzhc''@;'; put 'put ''dTg2YjlcdTg2YjNcdTg2YjhcdTg2Y2NcdTg2YjRcdTg2YmJcdTg2YmNcdTg2YzNcdTg2YmRcdTg2YmVcdTg4NTJcdTg4ODlcdTg4OTVcdTg4YThcdTg4YTJcdTg4YWFcdTg4OWFcdTg4OTFcdTg4YTFcdTg4OWZcdTg4OThcdTg4YTdcdTg4OTlcdTg4OWJcdTg4OTdcdTg4YTRcdTg4YWNcdTg4''@;'; put 'put ''OGNcdTg4OTNcdTg4OGVcdTg5ODJcdTg5ZDZcdTg5ZDlcdTg5ZDVcdThhMzBcdThhMjdcdThhMmNcdThhMWVcdThjMzlcdThjM2JcdThjNWNcdThjNWRcdThjN2RcdThjYTVcdThkN2RcdThkN2JcdThkNzlcdThkYmNcdThkYzJcdThkYjlcdThkYmZcdThkYzFcdThlZDhcdThlZGVcdThlZGRc''@;'; put 'put ''dThlZGNcdThlZDdcdThlZTBcdThlZTFcdTkwMjRcdTkwMGJcdTkwMTFcdTkwMWNcdTkwMGNcdTkwMjFcdTkwZWZcdTkwZWFcdTkwZjBcdTkwZjRcdTkwZjJcdTkwZjNcdTkwZDRcdTkwZWJcdTkwZWNcdTkwZTlcdTkxNTZcdTkxNThcdTkxNWFcdTkxNTNcdTkxNTVcdTkxZWNcdTkxZjRcdTkx''@;'; put 'put ''ZjFcdTkxZjNcdTkxZjhcdTkxZTRcdTkxZjlcdTkxZWFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMTVdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIxNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMTVdW2ddXT01NTA0MCtnLF9bNTUwNDArZ109eVsyMTVdW2ddKTtmb3IoeVsyMTZdPSJc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkxZWJcdTkxZjdcdTkxZThcdTkxZWVcdTk1N2FcdTk1ODZcdTk1ODhcdTk2N2NcdTk2NmRcdTk2NmJcdTk2NzFcdTk2NmZcdTk2YmZcdTk3NmFcdTk4MDRcdTk4ZTVcdTk5OTdcdTUwOWJcdTUw''@;'; put 'put ''OTVcdTUwOTRcdTUwOWVcdTUwOGJcdTUwYTNcdTUwODNcdTUwOGNcdTUwOGVcdTUwOWRcdTUwNjhcdTUwOWNcdTUwOTJcdTUwODJcdTUwODdcdTUxNWZcdTUxZDRcdTUzMTJcdTUzMTFcdTUzYTRcdTUzYTdcdTU1OTFcdTU1YThcdTU1YTVcdTU1YWRcdTU1NzdcdTU2NDVcdTU1YTJcdTU1OTNc''@;'; put 'put ''dTU1ODhcdTU1OGZcdTU1YjVcdTU1ODFcdTU1YTNcdTU1OTJcdTU1YTRcdTU1N2RcdTU1OGNcdTU1YTZcdTU1N2ZcdTU1OTVcdTU1YTFcdTU1OGVcdTU3MGNcdTU4MjlcdTU4MzdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU4MTlcdTU4MWVcdTU4MjdcdTU4MjNc''@;'; put 'put ''dTU4MjhcdTU3ZjVcdTU4NDhcdTU4MjVcdTU4MWNcdTU4MWJcdTU4MzNcdTU4M2ZcdTU4MzZcdTU4MmVcdTU4MzlcdTU4MzhcdTU4MmRcdTU4MmNcdTU4M2JcdTU5NjFcdTVhYWZcdTVhOTRcdTVhOWZcdTVhN2FcdTVhYTJcdTVhOWVcdTVhNzhcdTVhYTZcdTVhN2NcdTVhYTVcdTVhYWNcdTVh''@;'; put 'put ''OTVcdTVhYWVcdTVhMzdcdTVhODRcdTVhOGFcdTVhOTdcdTVhODNcdTVhOGJcdTVhYTlcdTVhN2JcdTVhN2RcdTVhOGNcdTVhOWNcdTVhOGZcdTVhOTNcdTVhOWRcdTViZWFcdTViY2RcdTViY2JcdTViZDRcdTViZDFcdTViY2FcdTViY2VcdTVjMGNcdTVjMzBcdTVkMzdcdTVkNDNcdTVkNmJc''@;'; put 'put ''dTVkNDFcdTVkNGJcdTVkM2ZcdTVkMzVcdTVkNTFcdTVkNGVcdTVkNTVcdTVkMzNcdTVkM2FcdTVkNTJcdTVkM2RcdTVkMzFcdTVkNTlcdTVkNDJcdTVkMzlcdTVkNDlcdTVkMzhcdTVkM2NcdTVkMzJcdTVkMzZcdTVkNDBcdTVkNDVcdTVlNDRcdTVlNDFcdTVmNThcdTVmYTZcdTVmYTVcdTVm''@;'; put 'put ''YWJcdTYwYzlcdTYwYjlcdTYwY2NcdTYwZTJcdTYwY2VcdTYwYzRcdTYxMTRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMTZdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIxNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMTZdW2ddXT01NTI5NitnLF9bNTUyOTYrZ109eVsyMTZdW2ddKTtm''@;'; put 'put ''b3IoeVsyMTddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYwZjJcdTYxMGFcdTYxMTZcdTYxMDVcdTYwZjVcdTYxMTNcdTYwZjhcdTYwZmNcdTYwZmVcdTYwYzFcdTYxMDNcdTYxMThcdTYxMWRcdTYxMTBcdTYwZmZcdTYxMDRcdTYx''@;'; put 'put ''MGJcdTYyNGFcdTYzOTRcdTYzYjFcdTYzYjBcdTYzY2VcdTYzZTVcdTYzZThcdTYzZWZcdTYzYzNcdTY0OWRcdTYzZjNcdTYzY2FcdTYzZTBcdTYzZjZcdTYzZDVcdTYzZjJcdTYzZjVcdTY0NjFcdTYzZGZcdTYzYmVcdTYzZGRcdTYzZGNcdTYzYzRcdTYzZDhcdTYzZDNcdTYzYzJcdTYzYzdc''@;'; put 'put ''dTYzY2NcdTYzY2JcdTYzYzhcdTYzZjBcdTYzZDdcdTYzZDlcdTY1MzJcdTY1NjdcdTY1NmFcdTY1NjRcdTY1NWNcdTY1NjhcdTY1NjVcdTY1OGNcdTY1OWRcdTY1OWVcdTY1YWVcdTY1ZDBcdTY1ZDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY2N2NcdTY2NmNc''@;'; put 'put ''dTY2N2JcdTY2ODBcdTY2NzFcdTY2NzlcdTY2NmFcdTY2NzJcdTY3MDFcdTY5MGNcdTY4ZDNcdTY5MDRcdTY4ZGNcdTY5MmFcdTY4ZWNcdTY4ZWFcdTY4ZjFcdTY5MGZcdTY4ZDZcdTY4ZjdcdTY4ZWJcdTY4ZTRcdTY4ZjZcdTY5MTNcdTY5MTBcdTY4ZjNcdTY4ZTFcdTY5MDdcdTY4Y2NcdTY5''@;'; put 'put ''MDhcdTY5NzBcdTY4YjRcdTY5MTFcdTY4ZWZcdTY4YzZcdTY5MTRcdTY4ZjhcdTY4ZDBcdTY4ZmRcdTY4ZmNcdTY4ZThcdTY5MGJcdTY5MGFcdTY5MTdcdTY4Y2VcdTY4YzhcdTY4ZGRcdTY4ZGVcdTY4ZTZcdTY4ZjRcdTY4ZDFcdTY5MDZcdTY4ZDRcdTY4ZTlcdTY5MTVcdTY5MjVcdTY4Yzdc''@;'; put 'put ''dTZiMzlcdTZiM2JcdTZiM2ZcdTZiM2NcdTZiOTRcdTZiOTdcdTZiOTlcdTZiOTVcdTZiYmRcdTZiZjBcdTZiZjJcdTZiZjNcdTZjMzBcdTZkZmNcdTZlNDZcdTZlNDdcdTZlMWZcdTZlNDlcdTZlODhcdTZlM2NcdTZlM2RcdTZlNDVcdTZlNjJcdTZlMmJcdTZlM2ZcdTZlNDFcdTZlNWRcdTZl''@;'; put 'put ''NzNcdTZlMWNcdTZlMzNcdTZlNGJcdTZlNDBcdTZlNTFcdTZlM2JcdTZlMDNcdTZlMmVcdTZlNWVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMTddLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIxN11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMTddW2ddXT01NTU1MitnLF9bNTU1NTIrZ109''@;'; put 'put ''eVsyMTddW2ddKTtmb3IoeVsyMThdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZlNjhcdTZlNWNcdTZlNjFcdTZlMzFcdTZlMjhcdTZlNjBcdTZlNzFcdTZlNmJcdTZlMzlcdTZlMjJcdTZlMzBcdTZlNTNcdTZlNjVcdTZlMjdcdTZl''@;'; put 'put ''NzhcdTZlNjRcdTZlNzdcdTZlNTVcdTZlNzlcdTZlNTJcdTZlNjZcdTZlMzVcdTZlMzZcdTZlNWFcdTcxMjBcdTcxMWVcdTcxMmZcdTcwZmJcdTcxMmVcdTcxMzFcdTcxMjNcdTcxMjVcdTcxMjJcdTcxMzJcdTcxMWZcdTcxMjhcdTcxM2FcdTcxMWJcdTcyNGJcdTcyNWFcdTcyODhcdTcyODlc''@;'; put 'put ''dTcyODZcdTcyODVcdTcyOGJcdTczMTJcdTczMGJcdTczMzBcdTczMjJcdTczMzFcdTczMzNcdTczMjdcdTczMzJcdTczMmRcdTczMjZcdTczMjNcdTczMzVcdTczMGNcdTc0MmVcdTc0MmNcdTc0MzBcdTc0MmJcdTc0MTZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTc0MWFcdTc0MjFcdTc0MmRcdTc0MzFcdTc0MjRcdTc0MjNcdTc0MWRcdTc0MjlcdTc0MjBcdTc0MzJcdTc0ZmJcdTc1MmZcdTc1NmZcdTc1NmNcdTc1ZTdcdTc1ZGFcdTc1ZTFcdTc1ZTZcdTc1ZGRcdTc1ZGZcdTc1ZTRcdTc1ZDdcdTc2OTVcdTc2OTJcdTc2ZGFcdTc3NDZcdTc3NDdcdTc3''@;'; put 'put ''NDRcdTc3NGRcdTc3NDVcdTc3NGFcdTc3NGVcdTc3NGJcdTc3NGNcdTc3ZGVcdTc3ZWNcdTc4NjBcdTc4NjRcdTc4NjVcdTc4NWNcdTc4NmRcdTc4NzFcdTc4NmFcdTc4NmVcdTc4NzBcdTc4NjlcdTc4NjhcdTc4NWVcdTc4NjJcdTc5NzRcdTc5NzNcdTc5NzJcdTc5NzBcdTdhMDJcdTdhMGFc''@;'; put 'put ''dTdhMDNcdTdhMGNcdTdhMDRcdTdhOTlcdTdhZTZcdTdhZTRcdTdiNGFcdTdiM2JcdTdiNDRcdTdiNDhcdTdiNGNcdTdiNGVcdTdiNDBcdTdiNThcdTdiNDVcdTdjYTJcdTdjOWVcdTdjYThcdTdjYTFcdTdkNThcdTdkNmZcdTdkNjNcdTdkNTNcdTdkNTZcdTdkNjdcdTdkNmFcdTdkNGZcdTdk''@;'; put 'put ''NmRcdTdkNWNcdTdkNmJcdTdkNTJcdTdkNTRcdTdkNjlcdTdkNTFcdTdkNWZcdTdkNGVcdTdmM2VcdTdmM2ZcdTdmNjVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMThdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIxOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMThdW2ddXT01NTgwOCtn''@;'; put 'put ''LF9bNTU4MDgrZ109eVsyMThdW2ddKTtmb3IoeVsyMTldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdmNjZcdTdmYTJcdTdmYTBcdTdmYTFcdTdmZDdcdTgwNTFcdTgwNGZcdTgwNTBcdTgwZmVcdTgwZDRcdTgxNDNcdTgxNGFcdTgx''@;'; put 'put ''NTJcdTgxNGZcdTgxNDdcdTgxM2RcdTgxNGRcdTgxM2FcdTgxZTZcdTgxZWVcdTgxZjdcdTgxZjhcdTgxZjlcdTgyMDRcdTgyM2NcdTgyM2RcdTgyM2ZcdTgyNzVcdTgzM2JcdTgzY2ZcdTgzZjlcdTg0MjNcdTgzYzBcdTgzZThcdTg0MTJcdTgzZTdcdTgzZTRcdTgzZmNcdTgzZjZcdTg0MTBc''@;'; put 'put ''dTgzYzZcdTgzYzhcdTgzZWJcdTgzZTNcdTgzYmZcdTg0MDFcdTgzZGRcdTgzZTVcdTgzZDhcdTgzZmZcdTgzZTFcdTgzY2JcdTgzY2VcdTgzZDZcdTgzZjVcdTgzYzlcdTg0MDlcdTg0MGZcdTgzZGVcdTg0MTFcdTg0MDZcdTgzYzJcdTgzZjNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTgzZDVcdTgzZmFcdTgzYzdcdTgzZDFcdTgzZWFcdTg0MTNcdTgzYzNcdTgzZWNcdTgzZWVcdTgzYzRcdTgzZmJcdTgzZDdcdTgzZTJcdTg0MWJcdTgzZGJcdTgzZmVcdTg2ZDhcdTg2ZTJcdTg2ZTZcdTg2ZDNcdTg2ZTNcdTg2ZGFcdTg2ZWFcdTg2ZGRcdTg2ZWJcdTg2''@;'; put 'put ''ZGNcdTg2ZWNcdTg2ZTlcdTg2ZDdcdTg2ZThcdTg2ZDFcdTg4NDhcdTg4NTZcdTg4NTVcdTg4YmFcdTg4ZDdcdTg4YjlcdTg4YjhcdTg4YzBcdTg4YmVcdTg4YjZcdTg4YmNcdTg4YjdcdTg4YmRcdTg4YjJcdTg5MDFcdTg4YzlcdTg5OTVcdTg5OThcdTg5OTdcdTg5ZGRcdTg5ZGFcdTg5ZGJc''@;'; put 'put ''dThhNGVcdThhNGRcdThhMzlcdThhNTlcdThhNDBcdThhNTdcdThhNThcdThhNDRcdThhNDVcdThhNTJcdThhNDhcdThhNTFcdThhNGFcdThhNGNcdThhNGZcdThjNWZcdThjODFcdThjODBcdThjYmFcdThjYmVcdThjYjBcdThjYjlcdThjYjVcdThkODRcdThkODBcdThkODlcdThkZDhcdThk''@;'; put 'put ''ZDNcdThkY2RcdThkYzdcdThkZDZcdThkZGNcdThkY2ZcdThkZDVcdThkZDlcdThkYzhcdThkZDdcdThkYzVcdThlZWZcdThlZjdcdThlZmFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMTldLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIxOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMTld''@;'; put 'put ''W2ddXT01NjA2NCtnLF9bNTYwNjQrZ109eVsyMTldW2ddKTtmb3IoeVsyMjBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlZjlcdThlZTZcdThlZWVcdThlZTVcdThlZjVcdThlZTdcdThlZThcdThlZjZcdThlZWJcdThlZjFcdThl''@;'; put 'put ''ZWNcdThlZjRcdThlZTlcdTkwMmRcdTkwMzRcdTkwMmZcdTkxMDZcdTkxMmNcdTkxMDRcdTkwZmZcdTkwZmNcdTkxMDhcdTkwZjlcdTkwZmJcdTkxMDFcdTkxMDBcdTkxMDdcdTkxMDVcdTkxMDNcdTkxNjFcdTkxNjRcdTkxNWZcdTkxNjJcdTkxNjBcdTkyMDFcdTkyMGFcdTkyMjVcdTkyMDNc''@;'; put 'put ''dTkyMWFcdTkyMjZcdTkyMGZcdTkyMGNcdTkyMDBcdTkyMTJcdTkxZmZcdTkxZmRcdTkyMDZcdTkyMDRcdTkyMjdcdTkyMDJcdTkyMWNcdTkyMjRcdTkyMTlcdTkyMTdcdTkyMDVcdTkyMTZcdTk1N2JcdTk1OGRcdTk1OGNcdTk1OTBcdTk2ODdcdTk2N2VcdTk2ODhcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk2ODlcdTk2ODNcdTk2ODBcdTk2YzJcdTk2YzhcdTk2YzNcdTk2ZjFcdTk2ZjBcdTk3NmNcdTk3NzBcdTk3NmVcdTk4MDdcdTk4YTlcdTk4ZWJcdTljZTZcdTllZjlcdTRlODNcdTRlODRcdTRlYjZcdTUwYmRcdTUwYmZcdTUwYzZcdTUwYWVcdTUw''@;'; put 'put ''YzRcdTUwY2FcdTUwYjRcdTUwYzhcdTUwYzJcdTUwYjBcdTUwYzFcdTUwYmFcdTUwYjFcdTUwY2JcdTUwYzlcdTUwYjZcdTUwYjhcdTUxZDdcdTUyN2FcdTUyNzhcdTUyN2JcdTUyN2NcdTU1YzNcdTU1ZGJcdTU1Y2NcdTU1ZDBcdTU1Y2JcdTU1Y2FcdTU1ZGRcdTU1YzBcdTU1ZDRcdTU1YzRc''@;'; put 'put ''dTU1ZTlcdTU1YmZcdTU1ZDJcdTU1OGRcdTU1Y2ZcdTU1ZDVcdTU1ZTJcdTU1ZDZcdTU1YzhcdTU1ZjJcdTU1Y2RcdTU1ZDlcdTU1YzJcdTU3MTRcdTU4NTNcdTU4NjhcdTU4NjRcdTU4NGZcdTU4NGRcdTU4NDlcdTU4NmZcdTU4NTVcdTU4NGVcdTU4NWRcdTU4NTlcdTU4NjVcdTU4NWJcdTU4''@;'; put 'put ''M2RcdTU4NjNcdTU4NzFcdTU4ZmNcdTVhYzdcdTVhYzRcdTVhY2JcdTVhYmFcdTVhYjhcdTVhYjFcdTVhYjVcdTVhYjBcdTVhYmZcdTVhYzhcdTVhYmJcdTVhYzZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMjBdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIyMF1bZ10uY2hhckNvZGVBdCgw''@;'; put 'put ''KSYmKElbeVsyMjBdW2ddXT01NjMyMCtnLF9bNTYzMjArZ109eVsyMjBdW2ddKTtmb3IoeVsyMjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVhYjdcdTVhYzBcdTVhY2FcdTVhYjRcdTVhYjZcdTVhY2RcdTVhYjlcdTVhOTBcdTVi''@;'; put 'put ''ZDZcdTViZDhcdTViZDlcdTVjMWZcdTVjMzNcdTVkNzFcdTVkNjNcdTVkNGFcdTVkNjVcdTVkNzJcdTVkNmNcdTVkNWVcdTVkNjhcdTVkNjdcdTVkNjJcdTVkZjBcdTVlNGZcdTVlNGVcdTVlNGFcdTVlNGRcdTVlNGJcdTVlYzVcdTVlY2NcdTVlYzZcdTVlY2JcdTVlYzdcdTVmNDBcdTVmYWZc''@;'; put 'put ''dTVmYWRcdTYwZjdcdTYxNDlcdTYxNGFcdTYxMmJcdTYxNDVcdTYxMzZcdTYxMzJcdTYxMmVcdTYxNDZcdTYxMmZcdTYxNGZcdTYxMjlcdTYxNDBcdTYyMjBcdTkxNjhcdTYyMjNcdTYyMjVcdTYyMjRcdTYzYzVcdTYzZjFcdTYzZWJcdTY0MTBcdTY0MTJcdTY0MDlcdTY0MjBcdTY0MjRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTY0MzNcdTY0NDNcdTY0MWZcdTY0MTVcdTY0MThcdTY0MzlcdTY0MzdcdTY0MjJcdTY0MjNcdTY0MGNcdTY0MjZcdTY0MzBcdTY0MjhcdTY0NDFcdTY0MzVcdTY0MmZcdTY0MGFcdTY0MWFcdTY0NDBcdTY0MjVcdTY0MjdcdTY0''@;'; put 'put ''MGJcdTYzZTdcdTY0MWJcdTY0MmVcdTY0MjFcdTY0MGVcdTY1NmZcdTY1OTJcdTY1ZDNcdTY2ODZcdTY2OGNcdTY2OTVcdTY2OTBcdTY2OGJcdTY2OGFcdTY2OTlcdTY2OTRcdTY2NzhcdTY3MjBcdTY5NjZcdTY5NWZcdTY5MzhcdTY5NGVcdTY5NjJcdTY5NzFcdTY5M2ZcdTY5NDVcdTY5NmFc''@;'; put 'put ''dTY5MzlcdTY5NDJcdTY5NTdcdTY5NTlcdTY5N2FcdTY5NDhcdTY5NDlcdTY5MzVcdTY5NmNcdTY5MzNcdTY5M2RcdTY5NjVcdTY4ZjBcdTY5NzhcdTY5MzRcdTY5NjlcdTY5NDBcdTY5NmZcdTY5NDRcdTY5NzZcdTY5NThcdTY5NDFcdTY5NzRcdTY5NGNcdTY5M2JcdTY5NGJcdTY5MzdcdTY5''@;'; put 'put ''NWNcdTY5NGZcdTY5NTFcdTY5MzJcdTY5NTJcdTY5MmZcdTY5N2JcdTY5M2NcdTZiNDZcdTZiNDVcdTZiNDNcdTZiNDJcdTZiNDhcdTZiNDFcdTZiOWJcdWZhMGRcdTZiZmJcdTZiZmNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMjFdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIyMV1bZ10u''@;'; put 'put ''Y2hhckNvZGVBdCgwKSYmKElbeVsyMjFdW2ddXT01NjU3NitnLF9bNTY1NzYrZ109eVsyMjFdW2ddKTtmb3IoeVsyMjJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZiZjlcdTZiZjdcdTZiZjhcdTZlOWJcdTZlZDZcdTZlYzhcdTZl''@;'; put 'put ''OGZcdTZlYzBcdTZlOWZcdTZlOTNcdTZlOTRcdTZlYTBcdTZlYjFcdTZlYjlcdTZlYzZcdTZlZDJcdTZlYmRcdTZlYzFcdTZlOWVcdTZlYzlcdTZlYjdcdTZlYjBcdTZlY2RcdTZlYTZcdTZlY2ZcdTZlYjJcdTZlYmVcdTZlYzNcdTZlZGNcdTZlZDhcdTZlOTlcdTZlOTJcdTZlOGVcdTZlOGRc''@;'; put 'put ''dTZlYTRcdTZlYTFcdTZlYmZcdTZlYjNcdTZlZDBcdTZlY2FcdTZlOTdcdTZlYWVcdTZlYTNcdTcxNDdcdTcxNTRcdTcxNTJcdTcxNjNcdTcxNjBcdTcxNDFcdTcxNWRcdTcxNjJcdTcxNzJcdTcxNzhcdTcxNmFcdTcxNjFcdTcxNDJcdTcxNThcdTcxNDNcdTcxNGJcdTcxNzBcdTcxNWZcdTcx''@;'; put 'put ''NTBcdTcxNTNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTcxNDRcdTcxNGRcdTcxNWFcdTcyNGZcdTcyOGRcdTcyOGNcdTcyOTFcdTcyOTBcdTcyOGVcdTczM2NcdTczNDJcdTczM2JcdTczM2FcdTczNDBcdTczNGFcdTczNDlcdTc0NDRcdTc0NGFcdTc0NGJcdTc0''@;'; put 'put ''NTJcdTc0NTFcdTc0NTdcdTc0NDBcdTc0NGZcdTc0NTBcdTc0NGVcdTc0NDJcdTc0NDZcdTc0NGRcdTc0NTRcdTc0ZTFcdTc0ZmZcdTc0ZmVcdTc0ZmRcdTc1MWRcdTc1NzlcdTc1NzdcdTY5ODNcdTc1ZWZcdTc2MGZcdTc2MDNcdTc1ZjdcdTc1ZmVcdTc1ZmNcdTc1ZjlcdTc1ZjhcdTc2MTBc''@;'; put 'put ''dTc1ZmJcdTc1ZjZcdTc1ZWRcdTc1ZjVcdTc1ZmRcdTc2OTlcdTc2YjVcdTc2ZGRcdTc3NTVcdTc3NWZcdTc3NjBcdTc3NTJcdTc3NTZcdTc3NWFcdTc3NjlcdTc3NjdcdTc3NTRcdTc3NTlcdTc3NmRcdTc3ZTBcdTc4ODdcdTc4OWFcdTc4OTRcdTc4OGZcdTc4ODRcdTc4OTVcdTc4ODVcdTc4''@;'; put 'put ''ODZcdTc4YTFcdTc4ODNcdTc4NzlcdTc4OTlcdTc4ODBcdTc4OTZcdTc4N2JcdTc5N2NcdTc5ODJcdTc5N2RcdTc5NzlcdTdhMTFcdTdhMThcdTdhMTlcdTdhMTJcdTdhMTdcdTdhMTVcdTdhMjJcdTdhMTNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMjJdLmxlbmd0aDsrK2cpNjU1MzMh''@;'; put 'put ''PT15WzIyMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMjJdW2ddXT01NjgzMitnLF9bNTY4MzIrZ109eVsyMjJdW2ddKTtmb3IoeVsyMjNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdhMWJcdTdhMTBcdTdhYTNcdTdhYTJcdTdh''@;'; put 'put ''OWVcdTdhZWJcdTdiNjZcdTdiNjRcdTdiNmRcdTdiNzRcdTdiNjlcdTdiNzJcdTdiNjVcdTdiNzNcdTdiNzFcdTdiNzBcdTdiNjFcdTdiNzhcdTdiNzZcdTdiNjNcdTdjYjJcdTdjYjRcdTdjYWZcdTdkODhcdTdkODZcdTdkODBcdTdkOGRcdTdkN2ZcdTdkODVcdTdkN2FcdTdkOGVcdTdkN2Jc''@;'; put 'put ''dTdkODNcdTdkN2NcdTdkOGNcdTdkOTRcdTdkODRcdTdkN2RcdTdkOTJcdTdmNmRcdTdmNmJcdTdmNjdcdTdmNjhcdTdmNmNcdTdmYTZcdTdmYTVcdTdmYTdcdTdmZGJcdTdmZGNcdTgwMjFcdTgxNjRcdTgxNjBcdTgxNzdcdTgxNWNcdTgxNjlcdTgxNWJcdTgxNjJcdTgxNzJcdTY3MjFcdTgx''@;'; put 'put ''NWVcdTgxNzZcdTgxNjdcdTgxNmZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxNDRcdTgxNjFcdTgyMWRcdTgyNDlcdTgyNDRcdTgyNDBcdTgyNDJcdTgyNDVcdTg0ZjFcdTg0M2ZcdTg0NTZcdTg0NzZcdTg0NzlcdTg0OGZcdTg0OGRcdTg0NjVcdTg0NTFcdTg0''@;'; put 'put ''NDBcdTg0ODZcdTg0NjdcdTg0MzBcdTg0NGRcdTg0N2RcdTg0NWFcdTg0NTlcdTg0NzRcdTg0NzNcdTg0NWRcdTg1MDdcdTg0NWVcdTg0MzdcdTg0M2FcdTg0MzRcdTg0N2FcdTg0NDNcdTg0NzhcdTg0MzJcdTg0NDVcdTg0MjlcdTgzZDlcdTg0NGJcdTg0MmZcdTg0NDJcdTg0MmRcdTg0NWZc''@;'; put 'put ''dTg0NzBcdTg0MzlcdTg0NGVcdTg0NGNcdTg0NTJcdTg0NmZcdTg0YzVcdTg0OGVcdTg0M2JcdTg0NDdcdTg0MzZcdTg0MzNcdTg0NjhcdTg0N2VcdTg0NDRcdTg0MmJcdTg0NjBcdTg0NTRcdTg0NmVcdTg0NTBcdTg3MGJcdTg3MDRcdTg2ZjdcdTg3MGNcdTg2ZmFcdTg2ZDZcdTg2ZjVcdTg3''@;'; put 'put ''NGRcdTg2ZjhcdTg3MGVcdTg3MDlcdTg3MDFcdTg2ZjZcdTg3MGRcdTg3MDVcdTg4ZDZcdTg4Y2JcdTg4Y2RcdTg4Y2VcdTg4ZGVcdTg4ZGJcdTg4ZGFcdTg4Y2NcdTg4ZDBcdTg5ODVcdTg5OWJcdTg5ZGZcdTg5ZTVcdTg5ZTRcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMjNdLmxlbmd0''@;'; put 'put ''aDsrK2cpNjU1MzMhPT15WzIyM11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMjNdW2ddXT01NzA4OCtnLF9bNTcwODgrZ109eVsyMjNdW2ddKTtmb3IoeVsyMjRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg5ZTFcdTg5ZTBcdTg5''@;'; put 'put ''ZTJcdTg5ZGNcdTg5ZTZcdThhNzZcdThhODZcdThhN2ZcdThhNjFcdThhM2ZcdThhNzdcdThhODJcdThhODRcdThhNzVcdThhODNcdThhODFcdThhNzRcdThhN2FcdThjM2NcdThjNGJcdThjNGFcdThjNjVcdThjNjRcdThjNjZcdThjODZcdThjODRcdThjODVcdThjY2NcdThkNjhcdThkNjlc''@;'; put 'put ''dThkOTFcdThkOGNcdThkOGVcdThkOGZcdThkOGRcdThkOTNcdThkOTRcdThkOTBcdThkOTJcdThkZjBcdThkZTBcdThkZWNcdThkZjFcdThkZWVcdThkZDBcdThkZTlcdThkZTNcdThkZTJcdThkZTdcdThkZjJcdThkZWJcdThkZjRcdThmMDZcdThlZmZcdThmMDFcdThmMDBcdThmMDVcdThm''@;'; put 'put ''MDdcdThmMDhcdThmMDJcdThmMGJcdTkwNTJcdTkwM2ZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkwNDRcdTkwNDlcdTkwM2RcdTkxMTBcdTkxMGRcdTkxMGZcdTkxMTFcdTkxMTZcdTkxMTRcdTkxMGJcdTkxMGVcdTkxNmVcdTkxNmZcdTkyNDhcdTkyNTJcdTky''@;'; put 'put ''MzBcdTkyM2FcdTkyNjZcdTkyMzNcdTkyNjVcdTkyNWVcdTkyODNcdTkyMmVcdTkyNGFcdTkyNDZcdTkyNmRcdTkyNmNcdTkyNGZcdTkyNjBcdTkyNjdcdTkyNmZcdTkyMzZcdTkyNjFcdTkyNzBcdTkyMzFcdTkyNTRcdTkyNjNcdTkyNTBcdTkyNzJcdTkyNGVcdTkyNTNcdTkyNGNcdTkyNTZc''@;'; put 'put ''dTkyMzJcdTk1OWZcdTk1OWNcdTk1OWVcdTk1OWJcdTk2OTJcdTk2OTNcdTk2OTFcdTk2OTdcdTk2Y2VcdTk2ZmFcdTk2ZmRcdTk2ZjhcdTk2ZjVcdTk3NzNcdTk3NzdcdTk3NzhcdTk3NzJcdTk4MGZcdTk4MGRcdTk4MGVcdTk4YWNcdTk4ZjZcdTk4ZjlcdTk5YWZcdTk5YjJcdTk5YjBcdTk5''@;'; put 'put ''YjVcdTlhYWRcdTlhYWJcdTliNWJcdTljZWFcdTljZWRcdTljZTdcdTllODBcdTllZmRcdTUwZTZcdTUwZDRcdTUwZDdcdTUwZThcdTUwZjNcdTUwZGJcdTUwZWFcdTUwZGRcdTUwZTRcdTUwZDNcdTUwZWNcdTUwZjBcdTUwZWZcdTUwZTNcdTUwZTBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9''@;'; put 'put ''eVsyMjRdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIyNF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMjRdW2ddXT01NzM0NCtnLF9bNTczNDQrZ109eVsyMjRdW2ddKTtmb3IoeVsyMjVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTUx''@;'; put 'put ''ZDhcdTUyODBcdTUyODFcdTUyZTlcdTUyZWJcdTUzMzBcdTUzYWNcdTU2MjdcdTU2MTVcdTU2MGNcdTU2MTJcdTU1ZmNcdTU2MGZcdTU2MWNcdTU2MDFcdTU2MTNcdTU2MDJcdTU1ZmFcdTU2MWRcdTU2MDRcdTU1ZmZcdTU1ZjlcdTU4ODlcdTU4N2NcdTU4OTBcdTU4OThcdTU4ODZcdTU4ODFc''@;'; put 'put ''dTU4N2ZcdTU4NzRcdTU4OGJcdTU4N2FcdTU4ODdcdTU4OTFcdTU4OGVcdTU4NzZcdTU4ODJcdTU4ODhcdTU4N2JcdTU4OTRcdTU4OGZcdTU4ZmVcdTU5NmJcdTVhZGNcdTVhZWVcdTVhZTVcdTVhZDVcdTVhZWFcdTVhZGFcdTVhZWRcdTVhZWJcdTVhZjNcdTVhZTJcdTVhZTBcdTVhZGJcdTVh''@;'; put 'put ''ZWNcdTVhZGVcdTVhZGRcdTVhZDlcdTVhZThcdTVhZGZcdTViNzdcdTViZTBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTViZTNcdTVjNjNcdTVkODJcdTVkODBcdTVkN2RcdTVkODZcdTVkN2FcdTVkODFcdTVkNzdcdTVkOGFcdTVkODlcdTVkODhcdTVkN2VcdTVk''@;'; put 'put ''N2NcdTVkOGRcdTVkNzlcdTVkN2ZcdTVlNThcdTVlNTlcdTVlNTNcdTVlZDhcdTVlZDFcdTVlZDdcdTVlY2VcdTVlZGNcdTVlZDVcdTVlZDlcdTVlZDJcdTVlZDRcdTVmNDRcdTVmNDNcdTVmNmZcdTVmYjZcdTYxMmNcdTYxMjhcdTYxNDFcdTYxNWVcdTYxNzFcdTYxNzNcdTYxNTJcdTYxNTNc''@;'; put 'put ''dTYxNzJcdTYxNmNcdTYxODBcdTYxNzRcdTYxNTRcdTYxN2FcdTYxNWJcdTYxNjVcdTYxM2JcdTYxNmFcdTYxNjFcdTYxNTZcdTYyMjlcdTYyMjdcdTYyMmJcdTY0MmJcdTY0NGRcdTY0NWJcdTY0NWRcdTY0NzRcdTY0NzZcdTY0NzJcdTY0NzNcdTY0N2RcdTY0NzVcdTY0NjZcdTY0YTZcdTY0''@;'; put 'put ''NGVcdTY0ODJcdTY0NWVcdTY0NWNcdTY0NGJcdTY0NTNcdTY0NjBcdTY0NTBcdTY0N2ZcdTY0M2ZcdTY0NmNcdTY0NmJcdTY0NTlcdTY0NjVcdTY0NzdcdTY1NzNcdTY1YTBcdTY2YTFcdTY2YTBcdTY2OWZcdTY3MDVcdTY3MDRcdTY3MjJcdTY5YjFcdTY5YjZcdTY5YzlcdWZmZmQiLnNwbGl0''@;'; put 'put ''KCIiKSxnPTA7ZyE9eVsyMjVdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIyNV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMjVdW2ddXT01NzYwMCtnLF9bNTc2MDArZ109eVsyMjVdW2ddKTtmb3IoeVsyMjZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdTY5YTBcdTY5Y2VcdTY5OTZcdTY5YjBcdTY5YWNcdTY5YmNcdTY5OTFcdTY5OTlcdTY5OGVcdTY5YTdcdTY5OGRcdTY5YTlcdTY5YmVcdTY5YWZcdTY5YmZcdTY5YzRcdTY5YmRcdTY5YTRcdTY5ZDRcdTY5YjlcdTY5Y2FcdTY5OWFcdTY5Y2ZcdTY5YjNcdTY5OTNcdTY5YWFc''@;'; put 'put ''dTY5YTFcdTY5OWVcdTY5ZDlcdTY5OTdcdTY5OTBcdTY5YzJcdTY5YjVcdTY5YTVcdTY5YzZcdTZiNGFcdTZiNGRcdTZiNGJcdTZiOWVcdTZiOWZcdTZiYTBcdTZiYzNcdTZiYzRcdTZiZmVcdTZlY2VcdTZlZjVcdTZlZjFcdTZmMDNcdTZmMjVcdTZlZjhcdTZmMzdcdTZlZmJcdTZmMmVcdTZm''@;'; put 'put ''MDlcdTZmNGVcdTZmMTlcdTZmMWFcdTZmMjdcdTZmMThcdTZmM2JcdTZmMTJcdTZlZWRcdTZmMGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmMzZcdTZmNzNcdTZlZjlcdTZlZWVcdTZmMmRcdTZmNDBcdTZmMzBcdTZmM2NcdTZmMzVcdTZlZWJcdTZmMDdcdTZm''@;'; put 'put ''MGVcdTZmNDNcdTZmMDVcdTZlZmRcdTZlZjZcdTZmMzlcdTZmMWNcdTZlZmNcdTZmM2FcdTZmMWZcdTZmMGRcdTZmMWVcdTZmMDhcdTZmMjFcdTcxODdcdTcxOTBcdTcxODlcdTcxODBcdTcxODVcdTcxODJcdTcxOGZcdTcxN2JcdTcxODZcdTcxODFcdTcxOTdcdTcyNDRcdTcyNTNcdTcyOTdc''@;'; put 'put ''dTcyOTVcdTcyOTNcdTczNDNcdTczNGRcdTczNTFcdTczNGNcdTc0NjJcdTc0NzNcdTc0NzFcdTc0NzVcdTc0NzJcdTc0NjdcdTc0NmVcdTc1MDBcdTc1MDJcdTc1MDNcdTc1N2RcdTc1OTBcdTc2MTZcdTc2MDhcdTc2MGNcdTc2MTVcdTc2MTFcdTc2MGFcdTc2MTRcdTc2YjhcdTc3ODFcdTc3''@;'; put 'put ''N2NcdTc3ODVcdTc3ODJcdTc3NmVcdTc3ODBcdTc3NmZcdTc3N2VcdTc3ODNcdTc4YjJcdTc4YWFcdTc4YjRcdTc4YWRcdTc4YThcdTc4N2VcdTc4YWJcdTc4OWVcdTc4YTVcdTc4YTBcdTc4YWNcdTc4YTJcdTc4YTRcdTc5OThcdTc5OGFcdTc5OGJcdTc5OTZcdTc5OTVcdTc5OTRcdTc5OTNc''@;'; put 'put ''dWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMjZdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIyNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMjZdW2ddXT01Nzg1NitnLF9bNTc4NTYrZ109eVsyMjZdW2ddKTtmb3IoeVsyMjddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5OTdcdTc5ODhcdTc5OTJcdTc5OTBcdTdhMmJcdTdhNGFcdTdhMzBcdTdhMmZcdTdhMjhcdTdhMjZcdTdhYThcdTdhYWJcdTdhYWNcdTdhZWVcdTdiODhcdTdiOWNcdTdiOGFcdTdiOTFcdTdiOTBcdTdiOTZcdTdiOGRcdTdiOGNcdTdiOWJcdTdiOGVc''@;'; put 'put ''dTdiODVcdTdiOThcdTUyODRcdTdiOTlcdTdiYTRcdTdiODJcdTdjYmJcdTdjYmZcdTdjYmNcdTdjYmFcdTdkYTdcdTdkYjdcdTdkYzJcdTdkYTNcdTdkYWFcdTdkYzFcdTdkYzBcdTdkYzVcdTdkOWRcdTdkY2VcdTdkYzRcdTdkYzZcdTdkY2JcdTdkY2NcdTdkYWZcdTdkYjlcdTdkOTZcdTdk''@;'; put 'put ''YmNcdTdkOWZcdTdkYTZcdTdkYWVcdTdkYTlcdTdkYTFcdTdkYzlcdTdmNzNcdTdmZTJcdTdmZTNcdTdmZTVcdTdmZGVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgwMjRcdTgwNWRcdTgwNWNcdTgxODlcdTgxODZcdTgxODNcdTgxODdcdTgxOGRcdTgxOGNcdTgx''@;'; put 'put ''OGJcdTgyMTVcdTg0OTdcdTg0YTRcdTg0YTFcdTg0OWZcdTg0YmFcdTg0Y2VcdTg0YzJcdTg0YWNcdTg0YWVcdTg0YWJcdTg0YjlcdTg0YjRcdTg0YzFcdTg0Y2RcdTg0YWFcdTg0OWFcdTg0YjFcdTg0ZDBcdTg0OWRcdTg0YTdcdTg0YmJcdTg0YTJcdTg0OTRcdTg0YzdcdTg0Y2NcdTg0OWJc''@;'; put 'put ''dTg0YTlcdTg0YWZcdTg0YThcdTg0ZDZcdTg0OThcdTg0YjZcdTg0Y2ZcdTg0YTBcdTg0ZDdcdTg0ZDRcdTg0ZDJcdTg0ZGJcdTg0YjBcdTg0OTFcdTg2NjFcdTg3MzNcdTg3MjNcdTg3MjhcdTg3NmJcdTg3NDBcdTg3MmVcdTg3MWVcdTg3MjFcdTg3MTlcdTg3MWJcdTg3NDNcdTg3MmNcdTg3''@;'; put 'put ''NDFcdTg3M2VcdTg3NDZcdTg3MjBcdTg3MzJcdTg3MmFcdTg3MmRcdTg3M2NcdTg3MTJcdTg3M2FcdTg3MzFcdTg3MzVcdTg3NDJcdTg3MjZcdTg3MjdcdTg3MzhcdTg3MjRcdTg3MWFcdTg3MzBcdTg3MTFcdTg4ZjdcdTg4ZTdcdTg4ZjFcdTg4ZjJcdTg4ZmFcdTg4ZmVcdTg4ZWVcdTg4ZmNc''@;'; put 'put ''dTg4ZjZcdTg4ZmJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMjddLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIyN11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMjddW2ddXT01ODExMitnLF9bNTgxMTIrZ109eVsyMjddW2ddKTtmb3IoeVsyMjhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg4ZjBcdTg4ZWNcdTg4ZWJcdTg5OWRcdTg5YTFcdTg5OWZcdTg5OWVcdTg5ZTlcdTg5ZWJcdTg5ZThcdThhYWJcdThhOTlcdThhOGJcdThhOTJcdThhOGZcdThhOTZcdThjM2RcdThjNjhcdThjNjlcdThjZDVcdThjY2ZcdThjZDdc''@;'; put 'put ''dThkOTZcdThlMDlcdThlMDJcdThkZmZcdThlMGRcdThkZmRcdThlMGFcdThlMDNcdThlMDdcdThlMDZcdThlMDVcdThkZmVcdThlMDBcdThlMDRcdThmMTBcdThmMTFcdThmMGVcdThmMGRcdTkxMjNcdTkxMWNcdTkxMjBcdTkxMjJcdTkxMWZcdTkxMWRcdTkxMWFcdTkxMjRcdTkxMjFcdTkx''@;'; put 'put ''MWJcdTkxN2FcdTkxNzJcdTkxNzlcdTkxNzNcdTkyYTVcdTkyYTRcdTkyNzZcdTkyOWJcdTkyN2FcdTkyYTBcdTkyOTRcdTkyYWFcdTkyOGRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkyYTZcdTkyOWFcdTkyYWJcdTkyNzlcdTkyOTdcdTkyN2ZcdTkyYTNcdTky''@;'; put 'put ''ZWVcdTkyOGVcdTkyODJcdTkyOTVcdTkyYTJcdTkyN2RcdTkyODhcdTkyYTFcdTkyOGFcdTkyODZcdTkyOGNcdTkyOTlcdTkyYTdcdTkyN2VcdTkyODdcdTkyYTlcdTkyOWRcdTkyOGJcdTkyMmRcdTk2OWVcdTk2YTFcdTk2ZmZcdTk3NThcdTk3N2RcdTk3N2FcdTk3N2VcdTk3ODNcdTk3ODBc''@;'; put 'put ''dTk3ODJcdTk3N2JcdTk3ODRcdTk3ODFcdTk3N2ZcdTk3Y2VcdTk3Y2RcdTk4MTZcdTk4YWRcdTk4YWVcdTk5MDJcdTk5MDBcdTk5MDdcdTk5OWRcdTk5OWNcdTk5YzNcdTk5YjlcdTk5YmJcdTk5YmFcdTk5YzJcdTk5YmRcdTk5YzdcdTlhYjFcdTlhZTNcdTlhZTdcdTliM2VcdTliM2ZcdTli''@;'; put 'put ''NjBcdTliNjFcdTliNWZcdTljZjFcdTljZjJcdTljZjVcdTllYTdcdTUwZmZcdTUxMDNcdTUxMzBcdTUwZjhcdTUxMDZcdTUxMDdcdTUwZjZcdTUwZmVcdTUxMGJcdTUxMGNcdTUwZmRcdTUxMGFcdTUyOGJcdTUyOGNcdTUyZjFcdTUyZWZcdTU2NDhcdTU2NDJcdTU2NGNcdTU2MzVcdTU2NDFc''@;'; put 'put ''dTU2NGFcdTU2NDlcdTU2NDZcdTU2NThcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMjhdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIyOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMjhdW2ddXT01ODM2OCtnLF9bNTgzNjgrZ109eVsyMjhdW2ddKTtmb3IoeVsyMjldPSJcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU2NWFcdTU2NDBcdTU2MzNcdTU2M2RcdTU2MmNcdTU2M2VcdTU2MzhcdTU2MmFcdTU2M2FcdTU3MWFcdTU4YWJcdTU4OWRcdTU4YjFcdTU4YTBcdTU4YTNcdTU4YWZcdTU4YWNcdTU4YTVcdTU4YTFcdTU4ZmZc''@;'; put 'put ''dTVhZmZcdTVhZjRcdTVhZmRcdTVhZjdcdTVhZjZcdTViMDNcdTVhZjhcdTViMDJcdTVhZjlcdTViMDFcdTViMDdcdTViMDVcdTViMGZcdTVjNjdcdTVkOTlcdTVkOTdcdTVkOWZcdTVkOTJcdTVkYTJcdTVkOTNcdTVkOTVcdTVkYTBcdTVkOWNcdTVkYTFcdTVkOWFcdTVkOWVcdTVlNjlcdTVl''@;'; put 'put ''NWRcdTVlNjBcdTVlNWNcdTdkZjNcdTVlZGJcdTVlZGVcdTVlZTFcdTVmNDlcdTVmYjJcdTYxOGJcdTYxODNcdTYxNzlcdTYxYjFcdTYxYjBcdTYxYTJcdTYxODlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTYxOWJcdTYxOTNcdTYxYWZcdTYxYWRcdTYxOWZcdTYx''@;'; put 'put ''OTJcdTYxYWFcdTYxYTFcdTYxOGRcdTYxNjZcdTYxYjNcdTYyMmRcdTY0NmVcdTY0NzBcdTY0OTZcdTY0YTBcdTY0ODVcdTY0OTdcdTY0OWNcdTY0OGZcdTY0OGJcdTY0OGFcdTY0OGNcdTY0YTNcdTY0OWZcdTY0NjhcdTY0YjFcdTY0OThcdTY1NzZcdTY1N2FcdTY1NzlcdTY1N2JcdTY1YjJc''@;'; put 'put ''dTY1YjNcdTY2YjVcdTY2YjBcdTY2YTlcdTY2YjJcdTY2YjdcdTY2YWFcdTY2YWZcdTZhMDBcdTZhMDZcdTZhMTdcdTY5ZTVcdTY5ZjhcdTZhMTVcdTY5ZjFcdTY5ZTRcdTZhMjBcdTY5ZmZcdTY5ZWNcdTY5ZTJcdTZhMWJcdTZhMWRcdTY5ZmVcdTZhMjdcdTY5ZjJcdTY5ZWVcdTZhMTRcdTY5''@;'; put 'put ''ZjdcdTY5ZTdcdTZhNDBcdTZhMDhcdTY5ZTZcdTY5ZmJcdTZhMGRcdTY5ZmNcdTY5ZWJcdTZhMDlcdTZhMDRcdTZhMThcdTZhMjVcdTZhMGZcdTY5ZjZcdTZhMjZcdTZhMDdcdTY5ZjRcdTZhMTZcdTZiNTFcdTZiYTVcdTZiYTNcdTZiYTJcdTZiYTZcdTZjMDFcdTZjMDBcdTZiZmZcdTZjMDJc''@;'; put 'put ''dTZmNDFcdTZmMjZcdTZmN2VcdTZmODdcdTZmYzZcdTZmOTJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMjldLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIyOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMjldW2ddXT01ODYyNCtnLF9bNTg2MjQrZ109eVsyMjldW2ddKTtmb3IoeVsyMzBd''@;'; put 'put ''PSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmOGRcdTZmODlcdTZmOGNcdTZmNjJcdTZmNGZcdTZmODVcdTZmNWFcdTZmOTZcdTZmNzZcdTZmNmNcdTZmODJcdTZmNTVcdTZmNzJcdTZmNTJcdTZmNTBcdTZmNTdcdTZmOTRcdTZmOTNc''@;'; put 'put ''dTZmNWRcdTZmMDBcdTZmNjFcdTZmNmJcdTZmN2RcdTZmNjdcdTZmOTBcdTZmNTNcdTZmOGJcdTZmNjlcdTZmN2ZcdTZmOTVcdTZmNjNcdTZmNzdcdTZmNmFcdTZmN2JcdTcxYjJcdTcxYWZcdTcxOWJcdTcxYjBcdTcxYTBcdTcxOWFcdTcxYTlcdTcxYjVcdTcxOWRcdTcxYTVcdTcxOWVcdTcx''@;'; put 'put ''YTRcdTcxYTFcdTcxYWFcdTcxOWNcdTcxYTdcdTcxYjNcdTcyOThcdTcyOWFcdTczNThcdTczNTJcdTczNWVcdTczNWZcdTczNjBcdTczNWRcdTczNWJcdTczNjFcdTczNWFcdTczNTlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTczNjJcdTc0ODdcdTc0ODlcdTc0''@;'; put 'put ''OGFcdTc0ODZcdTc0ODFcdTc0N2RcdTc0ODVcdTc0ODhcdTc0N2NcdTc0NzlcdTc1MDhcdTc1MDdcdTc1N2VcdTc2MjVcdTc2MWVcdTc2MTlcdTc2MWRcdTc2MWNcdTc2MjNcdTc2MWFcdTc2MjhcdTc2MWJcdTc2OWNcdTc2OWRcdTc2OWVcdTc2OWJcdTc3OGRcdTc3OGZcdTc3ODlcdTc3ODhc''@;'; put 'put ''dTc4Y2RcdTc4YmJcdTc4Y2ZcdTc4Y2NcdTc4ZDFcdTc4Y2VcdTc4ZDRcdTc4YzhcdTc4YzNcdTc4YzRcdTc4YzlcdTc5OWFcdTc5YTFcdTc5YTBcdTc5OWNcdTc5YTJcdTc5OWJcdTZiNzZcdTdhMzlcdTdhYjJcdTdhYjRcdTdhYjNcdTdiYjdcdTdiY2JcdTdiYmVcdTdiYWNcdTdiY2VcdTdi''@;'; put 'put ''YWZcdTdiYjlcdTdiY2FcdTdiYjVcdTdjYzVcdTdjYzhcdTdjY2NcdTdjY2JcdTdkZjdcdTdkZGJcdTdkZWFcdTdkZTdcdTdkZDdcdTdkZTFcdTdlMDNcdTdkZmFcdTdkZTZcdTdkZjZcdTdkZjFcdTdkZjBcdTdkZWVcdTdkZGZcdTdmNzZcdTdmYWNcdTdmYjBcdTdmYWRcdTdmZWRcdTdmZWJc''@;'; put 'put ''dTdmZWFcdTdmZWNcdTdmZTZcdTdmZThcdTgwNjRcdTgwNjdcdTgxYTNcdTgxOWZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMzBdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIzMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMzBdW2ddXT01ODg4MCtnLF9bNTg4ODArZ109eVsyMzBdW2dd''@;'; put 'put ''KTtmb3IoeVsyMzFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxOWVcdTgxOTVcdTgxYTJcdTgxOTlcdTgxOTdcdTgyMTZcdTgyNGZcdTgyNTNcdTgyNTJcdTgyNTBcdTgyNGVcdTgyNTFcdTg1MjRcdTg1M2JcdTg1MGZcdTg1MDBc''@;'; put 'put ''dTg1MjlcdTg1MGVcdTg1MDlcdTg1MGRcdTg1MWZcdTg1MGFcdTg1MjdcdTg1MWNcdTg0ZmJcdTg1MmJcdTg0ZmFcdTg1MDhcdTg1MGNcdTg0ZjRcdTg1MmFcdTg0ZjJcdTg1MTVcdTg0ZjdcdTg0ZWJcdTg0ZjNcdTg0ZmNcdTg1MTJcdTg0ZWFcdTg0ZTlcdTg1MTZcdTg0ZmVcdTg1MjhcdTg1''@;'; put 'put ''MWRcdTg1MmVcdTg1MDJcdTg0ZmRcdTg1MWVcdTg0ZjZcdTg1MzFcdTg1MjZcdTg0ZTdcdTg0ZThcdTg0ZjBcdTg0ZWZcdTg0ZjlcdTg1MThcdTg1MjBcdTg1MzBcdTg1MGJcdTg1MTlcdTg1MmZcdTg2NjJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg3NTZcdTg3''@;'; put 'put ''NjNcdTg3NjRcdTg3NzdcdTg3ZTFcdTg3NzNcdTg3NThcdTg3NTRcdTg3NWJcdTg3NTJcdTg3NjFcdTg3NWFcdTg3NTFcdTg3NWVcdTg3NmRcdTg3NmFcdTg3NTBcdTg3NGVcdTg3NWZcdTg3NWRcdTg3NmZcdTg3NmNcdTg3N2FcdTg3NmVcdTg3NWNcdTg3NjVcdTg3NGZcdTg3N2JcdTg3NzVc''@;'; put 'put ''dTg3NjJcdTg3NjdcdTg3NjlcdTg4NWFcdTg5MDVcdTg5MGNcdTg5MTRcdTg5MGJcdTg5MTdcdTg5MThcdTg5MTlcdTg5MDZcdTg5MTZcdTg5MTFcdTg5MGVcdTg5MDlcdTg5YTJcdTg5YTRcdTg5YTNcdTg5ZWRcdTg5ZjBcdTg5ZWNcdThhY2ZcdThhYzZcdThhYjhcdThhZDNcdThhZDFcdThh''@;'; put 'put ''ZDRcdThhZDVcdThhYmJcdThhZDdcdThhYmVcdThhYzBcdThhYzVcdThhZDhcdThhYzNcdThhYmFcdThhYmRcdThhZDlcdThjM2VcdThjNGRcdThjOGZcdThjZTVcdThjZGZcdThjZDlcdThjZThcdThjZGFcdThjZGRcdThjZTdcdThkYTBcdThkOWNcdThkYTFcdThkOWJcdThlMjBcdThlMjNc''@;'; put 'put ''dThlMjVcdThlMjRcdThlMmVcdThlMTVcdThlMWJcdThlMTZcdThlMTFcdThlMTlcdThlMjZcdThlMjdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMzFdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIzMV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMzFdW2ddXT01OTEzNitnLF9bNTkxMzYr''@;'; put 'put ''Z109eVsyMzFdW2ddKTtmb3IoeVsyMzJdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlMTRcdThlMTJcdThlMThcdThlMTNcdThlMWNcdThlMTdcdThlMWFcdThmMmNcdThmMjRcdThmMThcdThmMWFcdThmMjBcdThmMjNcdThmMTZc''@;'; put 'put ''dThmMTdcdTkwNzNcdTkwNzBcdTkwNmZcdTkwNjdcdTkwNmJcdTkxMmZcdTkxMmJcdTkxMjlcdTkxMmFcdTkxMzJcdTkxMjZcdTkxMmVcdTkxODVcdTkxODZcdTkxOGFcdTkxODFcdTkxODJcdTkxODRcdTkxODBcdTkyZDBcdTkyYzNcdTkyYzRcdTkyYzBcdTkyZDlcdTkyYjZcdTkyY2ZcdTky''@;'; put 'put ''ZjFcdTkyZGZcdTkyZDhcdTkyZTlcdTkyZDdcdTkyZGRcdTkyY2NcdTkyZWZcdTkyYzJcdTkyZThcdTkyY2FcdTkyYzhcdTkyY2VcdTkyZTZcdTkyY2RcdTkyZDVcdTkyYzlcdTkyZTBcdTkyZGVcdTkyZTdcdTkyZDFcdTkyZDNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTkyYjVcdTkyZTFcdTkyYzZcdTkyYjRcdTk1N2NcdTk1YWNcdTk1YWJcdTk1YWVcdTk1YjBcdTk2YTRcdTk2YTJcdTk2ZDNcdTk3MDVcdTk3MDhcdTk3MDJcdTk3NWFcdTk3OGFcdTk3OGVcdTk3ODhcdTk3ZDBcdTk3Y2ZcdTk4MWVcdTk4MWRcdTk4MjZcdTk4MjlcdTk4MjhcdTk4MjBc''@;'; put 'put ''dTk4MWJcdTk4MjdcdTk4YjJcdTk5MDhcdTk4ZmFcdTk5MTFcdTk5MTRcdTk5MTZcdTk5MTdcdTk5MTVcdTk5ZGNcdTk5Y2RcdTk5Y2ZcdTk5ZDNcdTk5ZDRcdTk5Y2VcdTk5YzlcdTk5ZDZcdTk5ZDhcdTk5Y2JcdTk5ZDdcdTk5Y2NcdTlhYjNcdTlhZWNcdTlhZWJcdTlhZjNcdTlhZjJcdTlh''@;'; put 'put ''ZjFcdTliNDZcdTliNDNcdTliNjdcdTliNzRcdTliNzFcdTliNjZcdTliNzZcdTliNzVcdTliNzBcdTliNjhcdTliNjRcdTliNmNcdTljZmNcdTljZmFcdTljZmRcdTljZmZcdTljZjdcdTlkMDdcdTlkMDBcdTljZjlcdTljZmJcdTlkMDhcdTlkMDVcdTlkMDRcdTllODNcdTllZDNcdTlmMGZc''@;'; put 'put ''dTlmMTBcdTUxMWNcdTUxMTNcdTUxMTdcdTUxMWFcdTUxMTFcdTUxZGVcdTUzMzRcdTUzZTFcdTU2NzBcdTU2NjBcdTU2NmVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMzJdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIzMl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMzJdW2ddXT01OTM5''@;'; put 'put ''MitnLF9bNTkzOTIrZ109eVsyMzJdW2ddKTtmb3IoeVsyMzNdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU2NzNcdTU2NjZcdTU2NjNcdTU2NmRcdTU2NzJcdTU2NWVcdTU2NzdcdTU3MWNcdTU3MWJcdTU4YzhcdTU4YmRcdTU4Yzlc''@;'; put 'put ''dTU4YmZcdTU4YmFcdTU4YzJcdTU4YmNcdTU4YzZcdTViMTdcdTViMTlcdTViMWJcdTViMjFcdTViMTRcdTViMTNcdTViMTBcdTViMTZcdTViMjhcdTViMWFcdTViMjBcdTViMWVcdTViZWZcdTVkYWNcdTVkYjFcdTVkYTlcdTVkYTdcdTVkYjVcdTVkYjBcdTVkYWVcdTVkYWFcdTVkYThcdTVk''@;'; put 'put ''YjJcdTVkYWRcdTVkYWZcdTVkYjRcdTVlNjdcdTVlNjhcdTVlNjZcdTVlNmZcdTVlZTlcdTVlZTdcdTVlZTZcdTVlZThcdTVlZTVcdTVmNGJcdTVmYmNcdTYxOWRcdTYxYThcdTYxOTZcdTYxYzVcdTYxYjRcdTYxYzZcdTYxYzFcdTYxY2NcdTYxYmFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdTYxYmZcdTYxYjhcdTYxOGNcdTY0ZDdcdTY0ZDZcdTY0ZDBcdTY0Y2ZcdTY0YzlcdTY0YmRcdTY0ODlcdTY0YzNcdTY0ZGJcdTY0ZjNcdTY0ZDlcdTY1MzNcdTY1N2ZcdTY1N2NcdTY1YTJcdTY2YzhcdTY2YmVcdTY2YzBcdTY2Y2FcdTY2Y2JcdTY2Y2ZcdTY2YmRc''@;'; put 'put ''dTY2YmJcdTY2YmFcdTY2Y2NcdTY3MjNcdTZhMzRcdTZhNjZcdTZhNDlcdTZhNjdcdTZhMzJcdTZhNjhcdTZhM2VcdTZhNWRcdTZhNmRcdTZhNzZcdTZhNWJcdTZhNTFcdTZhMjhcdTZhNWFcdTZhM2JcdTZhM2ZcdTZhNDFcdTZhNmFcdTZhNjRcdTZhNTBcdTZhNGZcdTZhNTRcdTZhNmZcdTZh''@;'; put 'put ''NjlcdTZhNjBcdTZhM2NcdTZhNWVcdTZhNTZcdTZhNTVcdTZhNGRcdTZhNGVcdTZhNDZcdTZiNTVcdTZiNTRcdTZiNTZcdTZiYTdcdTZiYWFcdTZiYWJcdTZiYzhcdTZiYzdcdTZjMDRcdTZjMDNcdTZjMDZcdTZmYWRcdTZmY2JcdTZmYTNcdTZmYzdcdTZmYmNcdTZmY2VcdTZmYzhcdTZmNWVc''@;'; put 'put ''dTZmYzRcdTZmYmRcdTZmOWVcdTZmY2FcdTZmYThcdTcwMDRcdTZmYTVcdTZmYWVcdTZmYmFcdTZmYWNcdTZmYWFcdTZmY2ZcdTZmYmZcdTZmYjhcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMzNdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIzM11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsy''@;'; put 'put ''MzNdW2ddXT01OTY0OCtnLF9bNTk2NDgrZ109eVsyMzNdW2ddKTtmb3IoeVsyMzRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZmYTJcdTZmYzlcdTZmYWJcdTZmY2RcdTZmYWZcdTZmYjJcdTZmYjBcdTcxYzVcdTcxYzJcdTcxYmZc''@;'; put 'put ''dTcxYjhcdTcxZDZcdTcxYzBcdTcxYzFcdTcxY2JcdTcxZDRcdTcxY2FcdTcxYzdcdTcxY2ZcdTcxYmRcdTcxZDhcdTcxYmNcdTcxYzZcdTcxZGFcdTcxZGJcdTcyOWRcdTcyOWVcdTczNjlcdTczNjZcdTczNjdcdTczNmNcdTczNjVcdTczNmJcdTczNmFcdTc0N2ZcdTc0OWFcdTc0YTBcdTc0''@;'; put 'put ''OTRcdTc0OTJcdTc0OTVcdTc0YTFcdTc1MGJcdTc1ODBcdTc2MmZcdTc2MmRcdTc2MzFcdTc2M2RcdTc2MzNcdTc2M2NcdTc2MzVcdTc2MzJcdTc2MzBcdTc2YmJcdTc2ZTZcdTc3OWFcdTc3OWRcdTc3YTFcdTc3OWNcdTc3OWJcdTc3YTJcdTc3YTNcdTc3OTVcdTc3OTlcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3OTdcdTc4ZGRcdTc4ZTlcdTc4ZTVcdTc4ZWFcdTc4ZGVcdTc4ZTNcdTc4ZGJcdTc4ZTFcdTc4ZTJcdTc4ZWRcdTc4ZGZcdTc4ZTBcdTc5YTRcdTdhNDRcdTdhNDhcdTdhNDdcdTdhYjZcdTdhYjhcdTdhYjVcdTdhYjFcdTdhYjdcdTdiZGVc''@;'; put 'put ''dTdiZTNcdTdiZTdcdTdiZGRcdTdiZDVcdTdiZTVcdTdiZGFcdTdiZThcdTdiZjlcdTdiZDRcdTdiZWFcdTdiZTJcdTdiZGNcdTdiZWJcdTdiZDhcdTdiZGZcdTdjZDJcdTdjZDRcdTdjZDdcdTdjZDBcdTdjZDFcdTdlMTJcdTdlMjFcdTdlMTdcdTdlMGNcdTdlMWZcdTdlMjBcdTdlMTNcdTdl''@;'; put 'put ''MGVcdTdlMWNcdTdlMTVcdTdlMWFcdTdlMjJcdTdlMGJcdTdlMGZcdTdlMTZcdTdlMGRcdTdlMTRcdTdlMjVcdTdlMjRcdTdmNDNcdTdmN2JcdTdmN2NcdTdmN2FcdTdmYjFcdTdmZWZcdTgwMmFcdTgwMjlcdTgwNmNcdTgxYjFcdTgxYTZcdTgxYWVcdTgxYjlcdTgxYjVcdTgxYWJcdTgxYjBc''@;'; put 'put ''dTgxYWNcdTgxYjRcdTgxYjJcdTgxYjdcdTgxYTdcdTgxZjJcdTgyNTVcdTgyNTZcdTgyNTdcdTg1NTZcdTg1NDVcdTg1NmJcdTg1NGRcdTg1NTNcdTg1NjFcdTg1NThcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMzRdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIzNF1bZ10uY2hhckNvZGVB''@;'; put 'put ''dCgwKSYmKElbeVsyMzRdW2ddXT01OTkwNCtnLF9bNTk5MDQrZ109eVsyMzRdW2ddKTtmb3IoeVsyMzVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1NDBcdTg1NDZcdTg1NjRcdTg1NDFcdTg1NjJcdTg1NDRcdTg1NTFcdTg1NDdc''@;'; put 'put ''dTg1NjNcdTg1M2VcdTg1NWJcdTg1NzFcdTg1NGVcdTg1NmVcdTg1NzVcdTg1NTVcdTg1NjdcdTg1NjBcdTg1OGNcdTg1NjZcdTg1NWRcdTg1NTRcdTg1NjVcdTg1NmNcdTg2NjNcdTg2NjVcdTg2NjRcdTg3OWJcdTg3OGZcdTg3OTdcdTg3OTNcdTg3OTJcdTg3ODhcdTg3ODFcdTg3OTZcdTg3''@;'; put 'put ''OThcdTg3NzlcdTg3ODdcdTg3YTNcdTg3ODVcdTg3OTBcdTg3OTFcdTg3OWRcdTg3ODRcdTg3OTRcdTg3OWNcdTg3OWFcdTg3ODlcdTg5MWVcdTg5MjZcdTg5MzBcdTg5MmRcdTg5MmVcdTg5MjdcdTg5MzFcdTg5MjJcdTg5MjlcdTg5MjNcdTg5MmZcdTg5MmNcdTg5MWZcdTg5ZjFcdThhZTBc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThhZTJcdThhZjJcdThhZjRcdThhZjVcdThhZGRcdThiMTRcdThhZTRcdThhZGZcdThhZjBcdThhYzhcdThhZGVcdThhZTFcdThhZThcdThhZmZcdThhZWZcdThhZmJcdThjOTFcdThjOTJcdThjOTBcdThjZjVcdThjZWVc''@;'; put 'put ''dThjZjFcdThjZjBcdThjZjNcdThkNmNcdThkNmVcdThkYTVcdThkYTdcdThlMzNcdThlM2VcdThlMzhcdThlNDBcdThlNDVcdThlMzZcdThlM2NcdThlM2RcdThlNDFcdThlMzBcdThlM2ZcdThlYmRcdThmMzZcdThmMmVcdThmMzVcdThmMzJcdThmMzlcdThmMzdcdThmMzRcdTkwNzZcdTkw''@;'; put 'put ''NzlcdTkwN2JcdTkwODZcdTkwZmFcdTkxMzNcdTkxMzVcdTkxMzZcdTkxOTNcdTkxOTBcdTkxOTFcdTkxOGRcdTkxOGZcdTkzMjdcdTkzMWVcdTkzMDhcdTkzMWZcdTkzMDZcdTkzMGZcdTkzN2FcdTkzMzhcdTkzM2NcdTkzMWJcdTkzMjNcdTkzMTJcdTkzMDFcdTkzNDZcdTkzMmRcdTkzMGVc''@;'; put 'put ''dTkzMGRcdTkyY2JcdTkzMWRcdTkyZmFcdTkzMjVcdTkzMTNcdTkyZjlcdTkyZjdcdTkzMzRcdTkzMDJcdTkzMjRcdTkyZmZcdTkzMjlcdTkzMzlcdTkzMzVcdTkzMmFcdTkzMTRcdTkzMGNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMzVdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIzNV1b''@;'; put 'put ''Z10uY2hhckNvZGVBdCgwKSYmKElbeVsyMzVdW2ddXT02MDE2MCtnLF9bNjAxNjArZ109eVsyMzVdW2ddKTtmb3IoeVsyMzZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzMGJcdTkyZmVcdTkzMDlcdTkzMDBcdTkyZmJcdTkzMTZc''@;'; put 'put ''dTk1YmNcdTk1Y2RcdTk1YmVcdTk1YjlcdTk1YmFcdTk1YjZcdTk1YmZcdTk1YjVcdTk1YmRcdTk2YTlcdTk2ZDRcdTk3MGJcdTk3MTJcdTk3MTBcdTk3OTlcdTk3OTdcdTk3OTRcdTk3ZjBcdTk3ZjhcdTk4MzVcdTk4MmZcdTk4MzJcdTk5MjRcdTk5MWZcdTk5MjdcdTk5MjlcdTk5OWVcdTk5''@;'; put 'put ''ZWVcdTk5ZWNcdTk5ZTVcdTk5ZTRcdTk5ZjBcdTk5ZTNcdTk5ZWFcdTk5ZTlcdTk5ZTdcdTlhYjlcdTlhYmZcdTlhYjRcdTlhYmJcdTlhZjZcdTlhZmFcdTlhZjlcdTlhZjdcdTliMzNcdTliODBcdTliODVcdTliODdcdTliN2NcdTliN2VcdTliN2JcdTliODJcdTliOTNcdTliOTJcdTliOTBc''@;'; put 'put ''dTliN2FcdTliOTVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTliN2RcdTliODhcdTlkMjVcdTlkMTdcdTlkMjBcdTlkMWVcdTlkMTRcdTlkMjlcdTlkMWRcdTlkMThcdTlkMjJcdTlkMTBcdTlkMTlcdTlkMWZcdTllODhcdTllODZcdTllODdcdTllYWVcdTllYWRc''@;'; put 'put ''dTllZDVcdTllZDZcdTllZmFcdTlmMTJcdTlmM2RcdTUxMjZcdTUxMjVcdTUxMjJcdTUxMjRcdTUxMjBcdTUxMjlcdTUyZjRcdTU2OTNcdTU2OGNcdTU2OGRcdTU2ODZcdTU2ODRcdTU2ODNcdTU2N2VcdTU2ODJcdTU2N2ZcdTU2ODFcdTU4ZDZcdTU4ZDRcdTU4Y2ZcdTU4ZDJcdTViMmRcdTVi''@;'; put 'put ''MjVcdTViMzJcdTViMjNcdTViMmNcdTViMjdcdTViMjZcdTViMmZcdTViMmVcdTViN2JcdTViZjFcdTViZjJcdTVkYjdcdTVlNmNcdTVlNmFcdTVmYmVcdTVmYmJcdTYxYzNcdTYxYjVcdTYxYmNcdTYxZTdcdTYxZTBcdTYxZTVcdTYxZTRcdTYxZThcdTYxZGVcdTY0ZWZcdTY0ZTlcdTY0ZTNc''@;'; put 'put ''dTY0ZWJcdTY0ZTRcdTY0ZThcdTY1ODFcdTY1ODBcdTY1YjZcdTY1ZGFcdTY2ZDJcdTZhOGRcdTZhOTZcdTZhODFcdTZhYTVcdTZhODlcdTZhOWZcdTZhOWJcdTZhYTFcdTZhOWVcdTZhODdcdTZhOTNcdTZhOGVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMzZdLmxlbmd0aDsrK2cpNjU1''@;'; put 'put ''MzMhPT15WzIzNl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMzZdW2ddXT02MDQxNitnLF9bNjA0MTYrZ109eVsyMzZdW2ddKTtmb3IoeVsyMzddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTZhOTVcdTZhODNcdTZhYThcdTZhYTRc''@;'; put 'put ''dTZhOTFcdTZhN2ZcdTZhYTZcdTZhOWFcdTZhODVcdTZhOGNcdTZhOTJcdTZiNWJcdTZiYWRcdTZjMDlcdTZmY2NcdTZmYTlcdTZmZjRcdTZmZDRcdTZmZTNcdTZmZGNcdTZmZWRcdTZmZTdcdTZmZTZcdTZmZGVcdTZmZjJcdTZmZGRcdTZmZTJcdTZmZThcdTcxZTFcdTcxZjFcdTcxZThcdTcx''@;'; put 'put ''ZjJcdTcxZTRcdTcxZjBcdTcxZTJcdTczNzNcdTczNmVcdTczNmZcdTc0OTdcdTc0YjJcdTc0YWJcdTc0OTBcdTc0YWFcdTc0YWRcdTc0YjFcdTc0YTVcdTc0YWZcdTc1MTBcdTc1MTFcdTc1MTJcdTc1MGZcdTc1ODRcdTc2NDNcdTc2NDhcdTc2NDlcdTc2NDdcdTc2YTRcdTc2ZTlcdTc3YjVc''@;'; put 'put ''dTc3YWJcdTc3YjJcdTc3YjdcdTc3YjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc3YjRcdTc3YjFcdTc3YThcdTc3ZjBcdTc4ZjNcdTc4ZmRcdTc5MDJcdTc4ZmJcdTc4ZmNcdTc4ZjJcdTc5MDVcdTc4ZjlcdTc4ZmVcdTc5MDRcdTc5YWJcdTc5YThcdTdhNWNc''@;'; put 'put ''dTdhNWJcdTdhNTZcdTdhNThcdTdhNTRcdTdhNWFcdTdhYmVcdTdhYzBcdTdhYzFcdTdjMDVcdTdjMGZcdTdiZjJcdTdjMDBcdTdiZmZcdTdiZmJcdTdjMGVcdTdiZjRcdTdjMGJcdTdiZjNcdTdjMDJcdTdjMDlcdTdjMDNcdTdjMDFcdTdiZjhcdTdiZmRcdTdjMDZcdTdiZjBcdTdiZjFcdTdj''@;'; put 'put ''MTBcdTdjMGFcdTdjZThcdTdlMmRcdTdlM2NcdTdlNDJcdTdlMzNcdTk4NDhcdTdlMzhcdTdlMmFcdTdlNDlcdTdlNDBcdTdlNDdcdTdlMjlcdTdlNGNcdTdlMzBcdTdlM2JcdTdlMzZcdTdlNDRcdTdlM2FcdTdmNDVcdTdmN2ZcdTdmN2VcdTdmN2RcdTdmZjRcdTdmZjJcdTgwMmNcdTgxYmJc''@;'; put 'put ''dTgxYzRcdTgxY2NcdTgxY2FcdTgxYzVcdTgxYzdcdTgxYmNcdTgxZTlcdTgyNWJcdTgyNWFcdTgyNWNcdTg1ODNcdTg1ODBcdTg1OGZcdTg1YTdcdTg1OTVcdTg1YTBcdTg1OGJcdTg1YTNcdTg1N2JcdTg1YTRcdTg1OWFcdTg1OWVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyMzddLmxl''@;'; put 'put ''bmd0aDsrK2cpNjU1MzMhPT15WzIzN11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMzddW2ddXT02MDY3MitnLF9bNjA2NzIrZ109eVsyMzddW2ddKTtmb3IoeVsyMzhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg1NzdcdTg1N2Nc''@;'; put 'put ''dTg1ODlcdTg1YTFcdTg1N2FcdTg1NzhcdTg1NTdcdTg1OGVcdTg1OTZcdTg1ODZcdTg1OGRcdTg1OTlcdTg1OWRcdTg1ODFcdTg1YTJcdTg1ODJcdTg1ODhcdTg1ODVcdTg1NzlcdTg1NzZcdTg1OThcdTg1OTBcdTg1OWZcdTg2NjhcdTg3YmVcdTg3YWFcdTg3YWRcdTg3YzVcdTg3YjBcdTg3''@;'; put 'put ''YWNcdTg3YjlcdTg3YjVcdTg3YmNcdTg3YWVcdTg3YzlcdTg3YzNcdTg3YzJcdTg3Y2NcdTg3YjdcdTg3YWZcdTg3YzRcdTg3Y2FcdTg3YjRcdTg3YjZcdTg3YmZcdTg3YjhcdTg3YmRcdTg3ZGVcdTg3YjJcdTg5MzVcdTg5MzNcdTg5M2NcdTg5M2VcdTg5NDFcdTg5NTJcdTg5MzdcdTg5NDJc''@;'; put 'put ''dTg5YWRcdTg5YWZcdTg5YWVcdTg5ZjJcdTg5ZjNcdThiMWVcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiMThcdThiMTZcdThiMTFcdThiMDVcdThiMGJcdThiMjJcdThiMGZcdThiMTJcdThiMTVcdThiMDdcdThiMGRcdThiMDhcdThiMDZcdThiMWNcdThiMTNc''@;'; put 'put ''dThiMWFcdThjNGZcdThjNzBcdThjNzJcdThjNzFcdThjNmZcdThjOTVcdThjOTRcdThjZjlcdThkNmZcdThlNGVcdThlNGRcdThlNTNcdThlNTBcdThlNGNcdThlNDdcdThmNDNcdThmNDBcdTkwODVcdTkwN2VcdTkxMzhcdTkxOWFcdTkxYTJcdTkxOWJcdTkxOTlcdTkxOWZcdTkxYTFcdTkx''@;'; put 'put ''OWRcdTkxYTBcdTkzYTFcdTkzODNcdTkzYWZcdTkzNjRcdTkzNTZcdTkzNDdcdTkzN2NcdTkzNThcdTkzNWNcdTkzNzZcdTkzNDlcdTkzNTBcdTkzNTFcdTkzNjBcdTkzNmRcdTkzOGZcdTkzNGNcdTkzNmFcdTkzNzlcdTkzNTdcdTkzNTVcdTkzNTJcdTkzNGZcdTkzNzFcdTkzNzdcdTkzN2Jc''@;'; put 'put ''dTkzNjFcdTkzNWVcdTkzNjNcdTkzNjdcdTkzODBcdTkzNGVcdTkzNTlcdTk1YzdcdTk1YzBcdTk1YzlcdTk1YzNcdTk1YzVcdTk1YjdcdTk2YWVcdTk2YjBcdTk2YWNcdTk3MjBcdTk3MWZcdTk3MThcdTk3MWRcdTk3MTlcdTk3OWFcdTk3YTFcdTk3OWNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7''@;'; put 'put ''ZyE9eVsyMzhdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIzOF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMzhdW2ddXT02MDkyOCtnLF9bNjA5MjgrZ109eVsyMzhdW2ddKTtmb3IoeVsyMzldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dTk3OWVcdTk3OWRcdTk3ZDVcdTk3ZDRcdTk3ZjFcdTk4NDFcdTk4NDRcdTk4NGFcdTk4NDlcdTk4NDVcdTk4NDNcdTk5MjVcdTk5MmJcdTk5MmNcdTk5MmFcdTk5MzNcdTk5MzJcdTk5MmZcdTk5MmRcdTk5MzFcdTk5MzBcdTk5OThcdTk5YTNcdTk5YTFcdTlhMDJcdTk5ZmFcdTk5ZjRcdTk5''@;'; put 'put ''ZjdcdTk5ZjlcdTk5ZjhcdTk5ZjZcdTk5ZmJcdTk5ZmRcdTk5ZmVcdTk5ZmNcdTlhMDNcdTlhYmVcdTlhZmVcdTlhZmRcdTliMDFcdTlhZmNcdTliNDhcdTliOWFcdTliYThcdTliOWVcdTliOWJcdTliYTZcdTliYTFcdTliYTVcdTliYTRcdTliODZcdTliYTJcdTliYTBcdTliYWZcdTlkMzNc''@;'; put 'put ''dTlkNDFcdTlkNjdcdTlkMzZcdTlkMmVcdTlkMmZcdTlkMzFcdTlkMzhcdTlkMzBcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlkNDVcdTlkNDJcdTlkNDNcdTlkM2VcdTlkMzdcdTlkNDBcdTlkM2RcdTdmZjVcdTlkMmRcdTllOGFcdTllODlcdTllOGRcdTllYjBc''@;'; put 'put ''dTllYzhcdTllZGFcdTllZmJcdTllZmZcdTlmMjRcdTlmMjNcdTlmMjJcdTlmNTRcdTlmYTBcdTUxMzFcdTUxMmRcdTUxMmVcdTU2OThcdTU2OWNcdTU2OTdcdTU2OWFcdTU2OWRcdTU2OTlcdTU5NzBcdTViM2NcdTVjNjlcdTVjNmFcdTVkYzBcdTVlNmRcdTVlNmVcdTYxZDhcdTYxZGZcdTYx''@;'; put 'put ''ZWRcdTYxZWVcdTYxZjFcdTYxZWFcdTYxZjBcdTYxZWJcdTYxZDZcdTYxZTlcdTY0ZmZcdTY1MDRcdTY0ZmRcdTY0ZjhcdTY1MDFcdTY1MDNcdTY0ZmNcdTY1OTRcdTY1ZGJcdTY2ZGFcdTY2ZGJcdTY2ZDhcdTZhYzVcdTZhYjlcdTZhYmRcdTZhZTFcdTZhYzZcdTZhYmFcdTZhYjZcdTZhYjdc''@;'; put 'put ''dTZhYzdcdTZhYjRcdTZhYWRcdTZiNWVcdTZiYzlcdTZjMGJcdTcwMDdcdTcwMGNcdTcwMGRcdTcwMDFcdTcwMDVcdTcwMTRcdTcwMGVcdTZmZmZcdTcwMDBcdTZmZmJcdTcwMjZcdTZmZmNcdTZmZjdcdTcwMGFcdTcyMDFcdTcxZmZcdTcxZjlcdTcyMDNcdTcxZmRcdTczNzZcdWZmZmQiLnNw''@;'; put 'put ''bGl0KCIiKSxnPTA7ZyE9eVsyMzldLmxlbmd0aDsrK2cpNjU1MzMhPT15WzIzOV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyMzldW2ddXT02MTE4NCtnLF9bNjExODQrZ109eVsyMzldW2ddKTtmb3IoeVsyNDBdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdTc0YjhcdTc0YzBcdTc0YjVcdTc0YzFcdTc0YmVcdTc0YjZcdTc0YmJcdTc0YzJcdTc1MTRcdTc1MTNcdTc2NWNcdTc2NjRcdTc2NTlcdTc2NTBcdTc2NTNcdTc2NTdcdTc2NWFcdTc2YTZcdTc2YmRcdTc2ZWNcdTc3YzJcdTc3YmFcdTc4ZmZcdTc5MGNcdTc5MTNcdTc5''@;'; put 'put ''MTRcdTc5MDlcdTc5MTBcdTc5MTJcdTc5MTFcdTc5YWRcdTc5YWNcdTdhNWZcdTdjMWNcdTdjMjlcdTdjMTlcdTdjMjBcdTdjMWZcdTdjMmRcdTdjMWRcdTdjMjZcdTdjMjhcdTdjMjJcdTdjMjVcdTdjMzBcdTdlNWNcdTdlNTBcdTdlNTZcdTdlNjNcdTdlNThcdTdlNjJcdTdlNWZcdTdlNTFc''@;'; put 'put ''dTdlNjBcdTdlNTdcdTdlNTNcdTdmYjVcdTdmYjNcdTdmZjdcdTdmZjhcdTgwNzVcdTgxZDFcdTgxZDJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTgxZDBcdTgyNWZcdTgyNWVcdTg1YjRcdTg1YzZcdTg1YzBcdTg1YzNcdTg1YzJcdTg1YjNcdTg1YjVcdTg1YmRc''@;'; put 'put ''dTg1YzdcdTg1YzRcdTg1YmZcdTg1Y2JcdTg1Y2VcdTg1YzhcdTg1YzVcdTg1YjFcdTg1YjZcdTg1ZDJcdTg2MjRcdTg1YjhcdTg1YjdcdTg1YmVcdTg2NjlcdTg3ZTdcdTg3ZTZcdTg3ZTJcdTg3ZGJcdTg3ZWJcdTg3ZWFcdTg3ZTVcdTg3ZGZcdTg3ZjNcdTg3ZTRcdTg3ZDRcdTg3ZGNcdTg3''@;'; put 'put ''ZDNcdTg3ZWRcdTg3ZDhcdTg3ZTNcdTg3YTRcdTg3ZDdcdTg3ZDlcdTg4MDFcdTg3ZjRcdTg3ZThcdTg3ZGRcdTg5NTNcdTg5NGJcdTg5NGZcdTg5NGNcdTg5NDZcdTg5NTBcdTg5NTFcdTg5NDlcdThiMmFcdThiMjdcdThiMjNcdThiMzNcdThiMzBcdThiMzVcdThiNDdcdThiMmZcdThiM2Nc''@;'; put 'put ''dThiM2VcdThiMzFcdThiMjVcdThiMzdcdThiMjZcdThiMzZcdThiMmVcdThiMjRcdThiM2JcdThiM2RcdThiM2FcdThjNDJcdThjNzVcdThjOTlcdThjOThcdThjOTdcdThjZmVcdThkMDRcdThkMDJcdThkMDBcdThlNWNcdThlNjJcdThlNjBcdThlNTdcdThlNTZcdThlNWVcdThlNjVcdThl''@;'; put 'put ''NjdcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyNDBdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzI0MF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyNDBdW2ddXT02MTQ0MCtnLF9bNjE0NDArZ109eVsyNDBdW2ddKTtmb3IoeVsyNDFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThlNWJcdThlNWFcdThlNjFcdThlNWRcdThlNjlcdThlNTRcdThmNDZcdThmNDdcdThmNDhcdThmNGJcdTkxMjhcdTkxM2FcdTkxM2JcdTkxM2VcdTkxYThcdTkxYTVcdTkxYTdcdTkxYWZcdTkxYWFcdTkzYjVcdTkzOGNcdTkzOTJcdTkzYjdcdTkz''@;'; put 'put ''OWJcdTkzOWRcdTkzODlcdTkzYTdcdTkzOGVcdTkzYWFcdTkzOWVcdTkzYTZcdTkzOTVcdTkzODhcdTkzOTlcdTkzOWZcdTkzOGRcdTkzYjFcdTkzOTFcdTkzYjJcdTkzYTRcdTkzYThcdTkzYjRcdTkzYTNcdTkzYTVcdTk1ZDJcdTk1ZDNcdTk1ZDFcdTk2YjNcdTk2ZDdcdTk2ZGFcdTVkYzJc''@;'; put 'put ''dTk2ZGZcdTk2ZDhcdTk2ZGRcdTk3MjNcdTk3MjJcdTk3MjVcdTk3YWNcdTk3YWVcdTk3YThcdTk3YWJcdTk3YTRcdTk3YWFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk3YTJcdTk3YTVcdTk3ZDdcdTk3ZDlcdTk3ZDZcdTk3ZDhcdTk3ZmFcdTk4NTBcdTk4NTFc''@;'; put 'put ''dTk4NTJcdTk4YjhcdTk5NDFcdTk5M2NcdTk5M2FcdTlhMGZcdTlhMGJcdTlhMDlcdTlhMGRcdTlhMDRcdTlhMTFcdTlhMGFcdTlhMDVcdTlhMDdcdTlhMDZcdTlhYzBcdTlhZGNcdTliMDhcdTliMDRcdTliMDVcdTliMjlcdTliMzVcdTliNGFcdTliNGNcdTliNGJcdTliYzdcdTliYzZcdTli''@;'; put 'put ''YzNcdTliYmZcdTliYzFcdTliYjVcdTliYjhcdTliZDNcdTliYjZcdTliYzRcdTliYjlcdTliYmRcdTlkNWNcdTlkNTNcdTlkNGZcdTlkNGFcdTlkNWJcdTlkNGJcdTlkNTlcdTlkNTZcdTlkNGNcdTlkNTdcdTlkNTJcdTlkNTRcdTlkNWZcdTlkNThcdTlkNWFcdTllOGVcdTllOGNcdTllZGZc''@;'; put 'put ''dTlmMDFcdTlmMDBcdTlmMTZcdTlmMjVcdTlmMmJcdTlmMmFcdTlmMjlcdTlmMjhcdTlmNGNcdTlmNTVcdTUxMzRcdTUxMzVcdTUyOTZcdTUyZjdcdTUzYjRcdTU2YWJcdTU2YWRcdTU2YTZcdTU2YTdcdTU2YWFcdTU2YWNcdTU4ZGFcdTU4ZGRcdTU4ZGJcdTU5MTJcdTViM2RcdTViM2VcdTVi''@;'; put 'put ''M2ZcdTVkYzNcdTVlNzBcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyNDFdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzI0MV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyNDFdW2ddXT02MTY5NitnLF9bNjE2OTYrZ109eVsyNDFdW2ddKTtmb3IoeVsyNDJdPSJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTVmYmZcdTYxZmJcdTY1MDdcdTY1MTBcdTY1MGRcdTY1MDlcdTY1MGNcdTY1MGVcdTY1ODRcdTY1ZGVcdTY1ZGRcdTY2ZGVcdTZhZTdcdTZhZTBcdTZhY2NcdTZhZDFcdTZhZDlcdTZhY2JcdTZhZGZcdTZhZGNcdTZhZDBcdTZh''@;'; put 'put ''ZWJcdTZhY2ZcdTZhY2RcdTZhZGVcdTZiNjBcdTZiYjBcdTZjMGNcdTcwMTlcdTcwMjdcdTcwMjBcdTcwMTZcdTcwMmJcdTcwMjFcdTcwMjJcdTcwMjNcdTcwMjlcdTcwMTdcdTcwMjRcdTcwMWNcdTcwMmFcdTcyMGNcdTcyMGFcdTcyMDdcdTcyMDJcdTcyMDVcdTcyYTVcdTcyYTZcdTcyYTRc''@;'; put 'put ''dTcyYTNcdTcyYTFcdTc0Y2JcdTc0YzVcdTc0YjdcdTc0YzNcdTc1MTZcdTc2NjBcdTc3YzlcdTc3Y2FcdTc3YzRcdTc3ZjFcdTc5MWRcdTc5MWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5MjFcdTc5MWNcdTc5MTdcdTc5MWVcdTc5YjBcdTdhNjdcdTdhNjhc''@;'; put 'put ''dTdjMzNcdTdjM2NcdTdjMzlcdTdjMmNcdTdjM2JcdTdjZWNcdTdjZWFcdTdlNzZcdTdlNzVcdTdlNzhcdTdlNzBcdTdlNzdcdTdlNmZcdTdlN2FcdTdlNzJcdTdlNzRcdTdlNjhcdTdmNGJcdTdmNGFcdTdmODNcdTdmODZcdTdmYjdcdTdmZmRcdTdmZmVcdTgwNzhcdTgxZDdcdTgxZDVcdTgy''@;'; put 'put ''NjRcdTgyNjFcdTgyNjNcdTg1ZWJcdTg1ZjFcdTg1ZWRcdTg1ZDlcdTg1ZTFcdTg1ZThcdTg1ZGFcdTg1ZDdcdTg1ZWNcdTg1ZjJcdTg1ZjhcdTg1ZDhcdTg1ZGZcdTg1ZTNcdTg1ZGNcdTg1ZDFcdTg1ZjBcdTg1ZTZcdTg1ZWZcdTg1ZGVcdTg1ZTJcdTg4MDBcdTg3ZmFcdTg4MDNcdTg3ZjZc''@;'; put 'put ''dTg3ZjdcdTg4MDlcdTg4MGNcdTg4MGJcdTg4MDZcdTg3ZmNcdTg4MDhcdTg3ZmZcdTg4MGFcdTg4MDJcdTg5NjJcdTg5NWFcdTg5NWJcdTg5NTdcdTg5NjFcdTg5NWNcdTg5NThcdTg5NWRcdTg5NTlcdTg5ODhcdTg5YjdcdTg5YjZcdTg5ZjZcdThiNTBcdThiNDhcdThiNGFcdThiNDBcdThi''@;'; put 'put ''NTNcdThiNTZcdThiNTRcdThiNGJcdThiNTVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyNDJdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzI0Ml1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyNDJdW2ddXT02MTk1MitnLF9bNjE5NTIrZ109eVsyNDJdW2ddKTtmb3IoeVsyNDNdPSJcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiNTFcdThiNDJcdThiNTJcdThiNTdcdThjNDNcdThjNzdcdThjNzZcdThjOWFcdThkMDZcdThkMDdcdThkMDlcdThkYWNcdThkYWFcdThkYWRcdThkYWJcdThlNmRcdThlNzhcdThlNzNcdThlNmFcdThl''@;'; put 'put ''NmZcdThlN2JcdThlYzJcdThmNTJcdThmNTFcdThmNGZcdThmNTBcdThmNTNcdThmYjRcdTkxNDBcdTkxM2ZcdTkxYjBcdTkxYWRcdTkzZGVcdTkzYzdcdTkzY2ZcdTkzYzJcdTkzZGFcdTkzZDBcdTkzZjlcdTkzZWNcdTkzY2NcdTkzZDlcdTkzYTlcdTkzZTZcdTkzY2FcdTkzZDRcdTkzZWVc''@;'; put 'put ''dTkzZTNcdTkzZDVcdTkzYzRcdTkzY2VcdTkzYzBcdTkzZDJcdTkzZTdcdTk1N2RcdTk1ZGFcdTk1ZGJcdTk2ZTFcdTk3MjlcdTk3MmJcdTk3MmNcdTk3MjhcdTk3MjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTk3YjNcdTk3YjdcdTk3YjZcdTk3ZGRcdTk3ZGVc''@;'; put 'put ''dTk3ZGZcdTk4NWNcdTk4NTlcdTk4NWRcdTk4NTdcdTk4YmZcdTk4YmRcdTk4YmJcdTk4YmVcdTk5NDhcdTk5NDdcdTk5NDNcdTk5YTZcdTk5YTdcdTlhMWFcdTlhMTVcdTlhMjVcdTlhMWRcdTlhMjRcdTlhMWJcdTlhMjJcdTlhMjBcdTlhMjdcdTlhMjNcdTlhMWVcdTlhMWNcdTlhMTRcdTlh''@;'; put 'put ''YzJcdTliMGJcdTliMGFcdTliMGVcdTliMGNcdTliMzdcdTliZWFcdTliZWJcdTliZTBcdTliZGVcdTliZTRcdTliZTZcdTliZTJcdTliZjBcdTliZDRcdTliZDdcdTliZWNcdTliZGNcdTliZDlcdTliZTVcdTliZDVcdTliZTFcdTliZGFcdTlkNzdcdTlkODFcdTlkOGFcdTlkODRcdTlkODhc''@;'; put 'put ''dTlkNzFcdTlkODBcdTlkNzhcdTlkODZcdTlkOGJcdTlkOGNcdTlkN2RcdTlkNmJcdTlkNzRcdTlkNzVcdTlkNzBcdTlkNjlcdTlkODVcdTlkNzNcdTlkN2JcdTlkODJcdTlkNmZcdTlkNzlcdTlkN2ZcdTlkODdcdTlkNjhcdTllOTRcdTllOTFcdTllYzBcdTllZmNcdTlmMmRcdTlmNDBcdTlm''@;'; put 'put ''NDFcdTlmNGRcdTlmNTZcdTlmNTdcdTlmNThcdTUzMzdcdTU2YjJcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyNDNdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzI0M11bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyNDNdW2ddXT02MjIwOCtnLF9bNjIyMDgrZ109eVsyNDNdW2ddKTtmb3IoeVsy''@;'; put 'put ''NDRdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTU2YjVcdTU2YjNcdTU4ZTNcdTViNDVcdTVkYzZcdTVkYzdcdTVlZWVcdTVlZWZcdTVmYzBcdTVmYzFcdTYxZjlcdTY1MTdcdTY1MTZcdTY1MTVcdTY1MTNcdTY1ZGZcdTY2ZThcdTY2''@;'; put 'put ''ZTNcdTY2ZTRcdTZhZjNcdTZhZjBcdTZhZWFcdTZhZThcdTZhZjlcdTZhZjFcdTZhZWVcdTZhZWZcdTcwM2NcdTcwMzVcdTcwMmZcdTcwMzdcdTcwMzRcdTcwMzFcdTcwNDJcdTcwMzhcdTcwM2ZcdTcwM2FcdTcwMzlcdTcwNDBcdTcwM2JcdTcwMzNcdTcwNDFcdTcyMTNcdTcyMTRcdTcyYThc''@;'; put 'put ''dTczN2RcdTczN2NcdTc0YmFcdTc2YWJcdTc2YWFcdTc2YmVcdTc2ZWRcdTc3Y2NcdTc3Y2VcdTc3Y2ZcdTc3Y2RcdTc3ZjJcdTc5MjVcdTc5MjNcdTc5MjdcdTc5MjhcdTc5MjRcdTc5MjlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTc5YjJcdTdhNmVcdTdhNmNc''@;'; put 'put ''dTdhNmRcdTdhZjdcdTdjNDlcdTdjNDhcdTdjNGFcdTdjNDdcdTdjNDVcdTdjZWVcdTdlN2JcdTdlN2VcdTdlODFcdTdlODBcdTdmYmFcdTdmZmZcdTgwNzlcdTgxZGJcdTgxZDlcdTgyMGJcdTgyNjhcdTgyNjlcdTg2MjJcdTg1ZmZcdTg2MDFcdTg1ZmVcdTg2MWJcdTg2MDBcdTg1ZjZcdTg2''@;'; put 'put ''MDRcdTg2MDlcdTg2MDVcdTg2MGNcdTg1ZmRcdTg4MTlcdTg4MTBcdTg4MTFcdTg4MTdcdTg4MTNcdTg4MTZcdTg5NjNcdTg5NjZcdTg5YjlcdTg5ZjdcdThiNjBcdThiNmFcdThiNWRcdThiNjhcdThiNjNcdThiNjVcdThiNjdcdThiNmRcdThkYWVcdThlODZcdThlODhcdThlODRcdThmNTlc''@;'; put 'put ''dThmNTZcdThmNTdcdThmNTVcdThmNThcdThmNWFcdTkwOGRcdTkxNDNcdTkxNDFcdTkxYjdcdTkxYjVcdTkxYjJcdTkxYjNcdTk0MGJcdTk0MTNcdTkzZmJcdTk0MjBcdTk0MGZcdTk0MTRcdTkzZmVcdTk0MTVcdTk0MTBcdTk0MjhcdTk0MTlcdTk0MGRcdTkzZjVcdTk0MDBcdTkzZjdcdTk0''@;'; put 'put ''MDdcdTk0MGVcdTk0MTZcdTk0MTJcdTkzZmFcdTk0MDlcdTkzZjhcdTk0MGFcdTkzZmZcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyNDRdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzI0NF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyNDRdW2ddXT02MjQ2NCtnLF9bNjI0NjQrZ109eVsyNDRd''@;'; put 'put ''W2ddKTtmb3IoeVsyNDVdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTkzZmNcdTk0MGNcdTkzZjZcdTk0MTFcdTk0MDZcdTk1ZGVcdTk1ZTBcdTk1ZGZcdTk3MmVcdTk3MmZcdTk3YjlcdTk3YmJcdTk3ZmRcdTk3ZmVcdTk4NjBcdTk4''@;'; put 'put ''NjJcdTk4NjNcdTk4NWZcdTk4YzFcdTk4YzJcdTk5NTBcdTk5NGVcdTk5NTlcdTk5NGNcdTk5NGJcdTk5NTNcdTlhMzJcdTlhMzRcdTlhMzFcdTlhMmNcdTlhMmFcdTlhMzZcdTlhMjlcdTlhMmVcdTlhMzhcdTlhMmRcdTlhYzdcdTlhY2FcdTlhYzZcdTliMTBcdTliMTJcdTliMTFcdTljMGJc''@;'; put 'put ''dTljMDhcdTliZjdcdTljMDVcdTljMTJcdTliZjhcdTljNDBcdTljMDdcdTljMGVcdTljMDZcdTljMTdcdTljMTRcdTljMDlcdTlkOWZcdTlkOTlcdTlkYTRcdTlkOWRcdTlkOTJcdTlkOThcdTlkOTBcdTlkOWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlkYTBc''@;'; put 'put ''dTlkOTRcdTlkOWNcdTlkYWFcdTlkOTdcdTlkYTFcdTlkOWFcdTlkYTJcdTlkYThcdTlkOWVcdTlkYTNcdTlkYmZcdTlkYTlcdTlkOTZcdTlkYTZcdTlkYTdcdTllOTlcdTllOWJcdTllOWFcdTllZTVcdTllZTRcdTllZTdcdTllZTZcdTlmMzBcdTlmMmVcdTlmNWJcdTlmNjBcdTlmNWVcdTlm''@;'; put 'put ''NWRcdTlmNTlcdTlmOTFcdTUxM2FcdTUxMzlcdTUyOThcdTUyOTdcdTU2YzNcdTU2YmRcdTU2YmVcdTViNDhcdTViNDdcdTVkY2JcdTVkY2ZcdTVlZjFcdTYxZmRcdTY1MWJcdTZiMDJcdTZhZmNcdTZiMDNcdTZhZjhcdTZiMDBcdTcwNDNcdTcwNDRcdTcwNGFcdTcwNDhcdTcwNDlcdTcwNDVc''@;'; put 'put ''dTcwNDZcdTcyMWRcdTcyMWFcdTcyMTlcdTczN2VcdTc1MTdcdTc2NmFcdTc3ZDBcdTc5MmRcdTc5MzFcdTc5MmZcdTdjNTRcdTdjNTNcdTdjZjJcdTdlOGFcdTdlODdcdTdlODhcdTdlOGJcdTdlODZcdTdlOGRcdTdmNGRcdTdmYmJcdTgwMzBcdTgxZGRcdTg2MThcdTg2MmFcdTg2MjZcdTg2''@;'; put 'put ''MWZcdTg2MjNcdTg2MWNcdTg2MTlcdTg2MjdcdTg2MmVcdTg2MjFcdTg2MjBcdTg2MjlcdTg2MWVcdTg2MjVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyNDVdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzI0NV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyNDVdW2ddXT02MjcyMCtnLF9bNjI3''@;'; put 'put ''MjArZ109eVsyNDVdW2ddKTtmb3IoeVsyNDZdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTg4MjlcdTg4MWRcdTg4MWJcdTg4MjBcdTg4MjRcdTg4MWNcdTg4MmJcdTg4NGFcdTg5NmRcdTg5NjlcdTg5NmVcdTg5NmJcdTg5ZmFcdThi''@;'; put 'put ''NzlcdThiNzhcdThiNDVcdThiN2FcdThiN2JcdThkMTBcdThkMTRcdThkYWZcdThlOGVcdThlOGNcdThmNWVcdThmNWJcdThmNWRcdTkxNDZcdTkxNDRcdTkxNDVcdTkxYjlcdTk0M2ZcdTk0M2JcdTk0MzZcdTk0MjlcdTk0M2RcdTk0M2NcdTk0MzBcdTk0MzlcdTk0MmFcdTk0MzdcdTk0MmNc''@;'; put 'put ''dTk0NDBcdTk0MzFcdTk1ZTVcdTk1ZTRcdTk1ZTNcdTk3MzVcdTk3M2FcdTk3YmZcdTk3ZTFcdTk4NjRcdTk4YzlcdTk4YzZcdTk4YzBcdTk5NThcdTk5NTZcdTlhMzlcdTlhM2RcdTlhNDZcdTlhNDRcdTlhNDJcdTlhNDFcdTlhM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdTlhM2ZcdTlhY2RcdTliMTVcdTliMTdcdTliMThcdTliMTZcdTliM2FcdTliNTJcdTljMmJcdTljMWRcdTljMWNcdTljMmNcdTljMjNcdTljMjhcdTljMjlcdTljMjRcdTljMjFcdTlkYjdcdTlkYjZcdTlkYmNcdTlkYzFcdTlkYzdcdTlkY2FcdTlkY2ZcdTlkYmVcdTlkYzVcdTlk''@;'; put 'put ''YzNcdTlkYmJcdTlkYjVcdTlkY2VcdTlkYjlcdTlkYmFcdTlkYWNcdTlkYzhcdTlkYjFcdTlkYWRcdTlkY2NcdTlkYjNcdTlkY2RcdTlkYjJcdTllN2FcdTllOWNcdTllZWJcdTllZWVcdTllZWRcdTlmMWJcdTlmMThcdTlmMWFcdTlmMzFcdTlmNGVcdTlmNjVcdTlmNjRcdTlmOTJcdTRlYjlc''@;'; put 'put ''dTU2YzZcdTU2YzVcdTU2Y2JcdTU5NzFcdTViNGJcdTViNGNcdTVkZDVcdTVkZDFcdTVlZjJcdTY1MjFcdTY1MjBcdTY1MjZcdTY1MjJcdTZiMGJcdTZiMDhcdTZiMDlcdTZjMGRcdTcwNTVcdTcwNTZcdTcwNTdcdTcwNTJcdTcyMWVcdTcyMWZcdTcyYTlcdTczN2ZcdTc0ZDhcdTc0ZDVcdTc0''@;'; put 'put ''ZDlcdTc0ZDdcdTc2NmRcdTc2YWRcdTc5MzVcdTc5YjRcdTdhNzBcdTdhNzFcdTdjNTdcdTdjNWNcdTdjNTlcdTdjNWJcdTdjNWFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyNDZdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzI0Nl1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyNDZdW2ddXT02''@;'; put 'put ''Mjk3NitnLF9bNjI5NzYrZ109eVsyNDZdW2ddKTtmb3IoeVsyNDddPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdjZjRcdTdjZjFcdTdlOTFcdTdmNGZcdTdmODdcdTgxZGVcdTgyNmJcdTg2MzRcdTg2MzVcdTg2MzNcdTg2MmNcdTg2''@;'; put 'put ''MzJcdTg2MzZcdTg4MmNcdTg4MjhcdTg4MjZcdTg4MmFcdTg4MjVcdTg5NzFcdTg5YmZcdTg5YmVcdTg5ZmJcdThiN2VcdThiODRcdThiODJcdThiODZcdThiODVcdThiN2ZcdThkMTVcdThlOTVcdThlOTRcdThlOWFcdThlOTJcdThlOTBcdThlOTZcdThlOTdcdThmNjBcdThmNjJcdTkxNDdc''@;'; put 'put ''dTk0NGNcdTk0NTBcdTk0NGFcdTk0NGJcdTk0NGZcdTk0NDdcdTk0NDVcdTk0NDhcdTk0NDlcdTk0NDZcdTk3M2ZcdTk3ZTNcdTk4NmFcdTk4NjlcdTk4Y2JcdTk5NTRcdTk5NWJcdTlhNGVcdTlhNTNcdTlhNTRcdTlhNGNcdTlhNGZcdTlhNDhcdTlhNGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdTlhNDlcdTlhNTJcdTlhNTBcdTlhZDBcdTliMTlcdTliMmJcdTliM2JcdTliNTZcdTliNTVcdTljNDZcdTljNDhcdTljM2ZcdTljNDRcdTljMzlcdTljMzNcdTljNDFcdTljM2NcdTljMzdcdTljMzRcdTljMzJcdTljM2RcdTljMzZcdTlkZGJcdTlkZDJcdTlk''@;'; put 'put ''ZGVcdTlkZGFcdTlkY2JcdTlkZDBcdTlkZGNcdTlkZDFcdTlkZGZcdTlkZTlcdTlkZDlcdTlkZDhcdTlkZDZcdTlkZjVcdTlkZDVcdTlkZGRcdTllYjZcdTllZjBcdTlmMzVcdTlmMzNcdTlmMzJcdTlmNDJcdTlmNmJcdTlmOTVcdTlmYTJcdTUxM2RcdTUyOTlcdTU4ZThcdTU4ZTdcdTU5NzJc''@;'; put 'put ''dTViNGRcdTVkZDhcdTg4MmZcdTVmNGZcdTYyMDFcdTYyMDNcdTYyMDRcdTY1MjlcdTY1MjVcdTY1OTZcdTY2ZWJcdTZiMTFcdTZiMTJcdTZiMGZcdTZiY2FcdTcwNWJcdTcwNWFcdTcyMjJcdTczODJcdTczODFcdTczODNcdTc2NzBcdTc3ZDRcdTdjNjdcdTdjNjZcdTdlOTVcdTgyNmNcdTg2''@;'; put 'put ''M2FcdTg2NDBcdTg2MzlcdTg2M2NcdTg2MzFcdTg2M2JcdTg2M2VcdTg4MzBcdTg4MzJcdTg4MmVcdTg4MzNcdTg5NzZcdTg5NzRcdTg5NzNcdTg5ZmVcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyNDddLmxlbmd0aDsrK2cpNjU1MzMhPT15WzI0N11bZ10uY2hhckNvZGVBdCgwKSYmKElb''@;'; put 'put ''eVsyNDddW2ddXT02MzIzMitnLF9bNjMyMzIrZ109eVsyNDddW2ddKTtmb3IoeVsyNDhdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdThiOGNcdThiOGVcdThiOGJcdThiODhcdThjNDVcdThkMTlcdThlOThcdThmNjRcdThmNjNcdTkx''@;'; put 'put ''YmNcdTk0NjJcdTk0NTVcdTk0NWRcdTk0NTdcdTk0NWVcdTk3YzRcdTk3YzVcdTk4MDBcdTlhNTZcdTlhNTlcdTliMWVcdTliMWZcdTliMjBcdTljNTJcdTljNThcdTljNTBcdTljNGFcdTljNGRcdTljNGJcdTljNTVcdTljNTlcdTljNGNcdTljNGVcdTlkZmJcdTlkZjdcdTlkZWZcdTlkZTNc''@;'; put 'put ''dTlkZWJcdTlkZjhcdTlkZTRcdTlkZjZcdTlkZTFcdTlkZWVcdTlkZTZcdTlkZjJcdTlkZjBcdTlkZTJcdTlkZWNcdTlkZjRcdTlkZjNcdTlkZThcdTlkZWRcdTllYzJcdTllZDBcdTllZjJcdTllZjNcdTlmMDZcdTlmMWNcdTlmMzhcdTlmMzdcdTlmMzZcdTlmNDNcdTlmNGZcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlmNzFcdTlmNzBcdTlmNmVcdTlmNmZcdTU2ZDNcdTU2Y2RcdTViNGVcdTVjNmRcdTY1MmRcdTY2ZWRcdTY2ZWVcdTZiMTNcdTcwNWZcdTcwNjFcdTcwNWRcdTcwNjBcdTcyMjNcdTc0ZGJcdTc0ZTVcdTc3ZDVcdTc5MzhcdTc5YjdcdTc5''@;'; put 'put ''YjZcdTdjNmFcdTdlOTdcdTdmODlcdTgyNmRcdTg2NDNcdTg4MzhcdTg4MzdcdTg4MzVcdTg4NGJcdThiOTRcdThiOTVcdThlOWVcdThlOWZcdThlYTBcdThlOWRcdTkxYmVcdTkxYmRcdTkxYzJcdTk0NmJcdTk0NjhcdTk0NjlcdTk2ZTVcdTk3NDZcdTk3NDNcdTk3NDdcdTk3YzdcdTk3ZTVc''@;'; put 'put ''dTlhNWVcdTlhZDVcdTliNTlcdTljNjNcdTljNjdcdTljNjZcdTljNjJcdTljNWVcdTljNjBcdTllMDJcdTlkZmVcdTllMDdcdTllMDNcdTllMDZcdTllMDVcdTllMDBcdTllMDFcdTllMDlcdTlkZmZcdTlkZmRcdTllMDRcdTllYTBcdTlmMWVcdTlmNDZcdTlmNzRcdTlmNzVcdTlmNzZcdTU2''@;'; put 'put ''ZDRcdTY1MmVcdTY1YjhcdTZiMThcdTZiMTlcdTZiMTdcdTZiMWFcdTcwNjJcdTcyMjZcdTcyYWFcdTc3ZDhcdTc3ZDlcdTc5MzlcdTdjNjlcdTdjNmJcdTdjZjZcdTdlOWFcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyNDhdLmxlbmd0aDsrK2cpNjU1MzMhPT15WzI0OF1bZ10uY2hhckNv''@;'; put 'put ''ZGVBdCgwKSYmKElbeVsyNDhdW2ddXT02MzQ4OCtnLF9bNjM0ODgrZ109eVsyNDhdW2ddKTtmb3IoeVsyNDldPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTdlOThcdTdlOWJcdTdlOTlcdTgxZTBcdTgxZTFcdTg2NDZcdTg2NDdcdTg2''@;'; put 'put ''NDhcdTg5NzlcdTg5N2FcdTg5N2NcdTg5N2JcdTg5ZmZcdThiOThcdThiOTlcdThlYTVcdThlYTRcdThlYTNcdTk0NmVcdTk0NmRcdTk0NmZcdTk0NzFcdTk0NzNcdTk3NDlcdTk4NzJcdTk5NWZcdTljNjhcdTljNmVcdTljNmRcdTllMGJcdTllMGRcdTllMTBcdTllMGZcdTllMTJcdTllMTFc''@;'; put 'put ''dTllYTFcdTllZjVcdTlmMDlcdTlmNDdcdTlmNzhcdTlmN2JcdTlmN2FcdTlmNzlcdTU3MWVcdTcwNjZcdTdjNmZcdTg4M2NcdThkYjJcdThlYTZcdTkxYzNcdTk0NzRcdTk0NzhcdTk0NzZcdTk0NzVcdTlhNjBcdTljNzRcdTljNzNcdTljNzFcdTljNzVcdTllMTRcdTllMTNcdTllZjZcdTlm''@;'; put 'put ''MGFcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTlmYTRcdTcwNjhcdTcwNjVcdTdjZjdcdTg2NmFcdTg4M2VcdTg4M2RcdTg4M2ZcdThiOWVcdThjOWNcdThlYTlcdThlYzlcdTk3NGJcdTk4NzNcdTk4NzRcdTk4Y2NcdTk5NjFcdTk5YWJcdTlhNjRcdTlhNjZcdTlh''@;'; put 'put ''NjdcdTliMjRcdTllMTVcdTllMTdcdTlmNDhcdTYyMDdcdTZiMWVcdTcyMjdcdTg2NGNcdThlYThcdTk0ODJcdTk0ODBcdTk0ODFcdTlhNjlcdTlhNjhcdTliMmVcdTllMTlcdTcyMjlcdTg2NGJcdThiOWZcdTk0ODNcdTljNzlcdTllYjdcdTc2NzVcdTlhNmJcdTljN2FcdTllMWRcdTcwNjlc''@;'; put 'put ''dTcwNmFcdTllYTRcdTlmN2VcdTlmNDlcdTlmOThcdTc4ODFcdTkyYjlcdTg4Y2ZcdTU4YmJcdTYwNTJcdTdjYTdcdTVhZmFcdTI1NTRcdTI1NjZcdTI1NTdcdTI1NjBcdTI1NmNcdTI1NjNcdTI1NWFcdTI1NjlcdTI1NWRcdTI1NTJcdTI1NjRcdTI1NTVcdTI1NWVcdTI1NmFcdTI1NjFcdTI1''@;'; put 'put ''NThcdTI1NjdcdTI1NWJcdTI1NTNcdTI1NjVcdTI1NTZcdTI1NWZcdTI1NmJcdTI1NjJcdTI1NTlcdTI1NjhcdTI1NWNcdTI1NTFcdTI1NTBcdTI1NmRcdTI1NmVcdTI1NzBcdTI1NmZcdTI1OTNcdWZmZmQiLnNwbGl0KCIiKSxnPTA7ZyE9eVsyNDldLmxlbmd0aDsrK2cpNjU1MzMhPT15WzI0''@;'; put 'put ''OV1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVsyNDldW2ddXT02Mzc0NCtnLF9bNjM3NDQrZ109eVsyNDldW2ddKTtyZXR1cm57ZW5jOkksZGVjOl99fSgpLHFbMTI1MF09ZnVuY3Rpb24oKXtmb3IodmFyIF89IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVc''@;'; put 'put ''eDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5c''@;'; put 'put ''eDdmXHUyMGFjXHVmZmZkXHUyMDFhXHVmZmZkXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHVmZmZkXHUyMDMwXHUwMTYwXHUyMDM5XHUwMTVhXHUwMTY0XHUwMTdkXHUwMTc5XHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHUwMTYx''@;'; put 'put ''XHUyMDNhXHUwMTViXHUwMTY1XHUwMTdlXHUwMTdhXHhhMFx1MDJjN1x1MDJkOFx1MDE0MVx4YTRcdTAxMDRceGE2XHhhN1x4YThceGE5XHUwMTVlXHhhYlx4YWNceGFkXHhhZVx1MDE3Ylx4YjBceGIxXHUwMmRiXHUwMTQyXHhiNFx4YjVceGI2XHhiN1x4YjhcdTAxMDVcdTAxNWZceGJiXHUw''@;'; put 'put ''MTNkXHUwMmRkXHUwMTNlXHUwMTdjXHUwMTU0XHhjMVx4YzJcdTAxMDJceGM0XHUwMTM5XHUwMTA2XHhjN1x1MDEwY1x4YzlcdTAxMThceGNiXHUwMTFhXHhjZFx4Y2VcdTAxMGVcdTAxMTBcdTAxNDNcdTAxNDdceGQzXHhkNFx1MDE1MFx4ZDZceGQ3XHUwMTU4XHUwMTZlXHhkYVx1MDE3MFx4''@;'; put 'put ''ZGNceGRkXHUwMTYyXHhkZlx1MDE1NVx4ZTFceGUyXHUwMTAzXHhlNFx1MDEzYVx1MDEwN1x4ZTdcdTAxMGRceGU5XHUwMTE5XHhlYlx1MDExYlx4ZWRceGVlXHUwMTBmXHUwMTExXHUwMTQ0XHUwMTQ4XHhmM1x4ZjRcdTAxNTFceGY2XHhmN1x1MDE1OVx1MDE2Zlx4ZmFcdTAxNzFceGZjXHhm''@;'; put 'put ''ZFx1MDE2M1x1MDJkOSIsST1bXSx5PXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09Xy5jaGFyQ29kZUF0KGcpJiYoeVtfLmNoYXJBdChnKV09ZyksSVtnXT1fLmNoYXJBdChnKTtyZXR1cm57ZW5jOnksZGVjOkl9fSgpLHFbMTI1MV09ZnVuY3Rpb24oKXtmb3IodmFyIF89IlwwXHgwMVx4MDJc''@;'; put 'put ''eDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltc''@;'; put 'put ''XF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUwNDAyXHUwNDAzXHUyMDFhXHUwNDUzXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUyMGFjXHUyMDMwXHUwNDA5XHUyMDM5XHUwNDBhXHUwNDBjXHUwNDBiXHUwNDBmXHUwNDUyXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFk''@;'; put 'put ''XHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHUwNDU5XHUyMDNhXHUwNDVhXHUwNDVjXHUwNDViXHUwNDVmXHhhMFx1MDQwZVx1MDQ1ZVx1MDQwOFx4YTRcdTA0OTBceGE2XHhhN1x1MDQwMVx4YTlcdTA0MDRceGFiXHhhY1x4YWRceGFlXHUwNDA3XHhiMFx4YjFcdTA0MDZcdTA0NTZc''@;'; put 'put ''dTA0OTFceGI1XHhiNlx4YjdcdTA0NTFcdTIxMTZcdTA0NTRceGJiXHUwNDU4XHUwNDA1XHUwNDU1XHUwNDU3XHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIw''@;'; put 'put ''XHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUw''@;'; put 'put ''NDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmIixJPVtdLHk9e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT1fLmNoYXJDb2RlQXQo''@;'; put 'put ''ZykmJih5W18uY2hhckF0KGcpXT1nKSxJW2ddPV8uY2hhckF0KGcpO3JldHVybntlbmM6eSxkZWM6SX19KCkscVsxMjUyXT1mdW5jdGlvbigpe2Zvcih2YXIgXz0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4''@;'; put 'put ''MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdTAx''@;'; put 'put ''OTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNTJcdWZmZmRcdTAxN2RcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNTNcdWZmZmRcdTAxN2Vc''@;'; put 'put ''dTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3''@;'; put 'put ''XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZceGQwXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx4ZjBc''@;'; put 'put ''eGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYiLEk9W10seT17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PV8uY2hhckNvZGVBdChnKSYmKHlbXy5jaGFyQXQoZyldPWcpLElbZ109Xy5jaGFyQXQoZyk7cmV0dXJue2VuYzp5LGRlYzpJ''@;'; put 'put ''fX0oKSxxWzEyNTNdPWZ1bmN0aW9uKCl7Zm9yKHZhciBfPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0u''@;'; put 'put ''LzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1ZmZmZFx1MjAzMFx1ZmZmZFx1MjAzOVx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1ZmZmZFx1MjAzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YTBcdTAzODVcdTAzODZceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHVmZmZkXHhh''@;'; put 'put ''Ylx4YWNceGFkXHhhZVx1MjAxNVx4YjBceGIxXHhiMlx4YjNcdTAzODRceGI1XHhiNlx4YjdcdTAzODhcdTAzODlcdTAzOGFceGJiXHUwMzhjXHhiZFx1MDM4ZVx1MDM4Zlx1MDM5MFx1MDM5MVx1MDM5Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1''@;'; put 'put ''MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1ZmZmZFx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNhYVx1MDNhYlx1MDNhY1x1MDNhZFx1MDNhZVx1MDNhZlx1MDNiMFx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNi''@;'; put 'put ''Nlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjMlx1MDNjM1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNjOVx1MDNjYVx1MDNjYlx1MDNjY1x1MDNjZFx1MDNjZVx1ZmZmZCIsST1bXSx5PXt9LGc9''@;'; put 'put ''MDsyNTYhPWc7KytnKTY1NTMzIT09Xy5jaGFyQ29kZUF0KGcpJiYoeVtfLmNoYXJBdChnKV09ZyksSVtnXT1fLmNoYXJBdChnKTtyZXR1cm57ZW5jOnksZGVjOkl9fSgpLHFbMTI1NF09ZnVuY3Rpb24oKXtmb3IodmFyIF89IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2''@;'; put 'put ''XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2''@;'; put 'put ''d3h5ent8fX5ceDdmXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwMTYwXHUyMDM5XHUwMTUyXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUy''@;'; put 'put ''MTIyXHUwMTYxXHUyMDNhXHUwMTUzXHVmZmZkXHVmZmZkXHUwMTc4XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4''@;'; put 'put ''YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHUwMTFlXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHUwMTMwXHUwMTVlXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZc''@;'; put 'put ''eGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZcdTAxMWZceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNcdTAxMzFcdTAxNWZceGZmIixJPVtdLHk9e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT1fLmNoYXJDb2RlQXQoZykmJih5W18uY2hh''@;'; put 'put ''ckF0KGcpXT1nKSxJW2ddPV8uY2hhckF0KGcpO3JldHVybntlbmM6eSxkZWM6SX19KCkscVsxMjU1XT1mdW5jdGlvbigpe2Zvcih2YXIgXz0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4''@;'; put 'put ''MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIw''@;'; put 'put ''MjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdWZmZmRcdTIwMzlcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdWZmZmRcdTIwM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGEwXHhh''@;'; put 'put ''MVx4YTJceGEzXHUyMGFhXHhhNVx4YTZceGE3XHhhOFx4YTlceGQ3XHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhmN1x4YmJceGJjXHhiZFx4YmVceGJmXHUwNWIwXHUwNWIxXHUwNWIyXHUwNWIzXHUwNWI0XHUwNWI1XHUwNWI2''@;'; put 'put ''XHUwNWI3XHUwNWI4XHUwNWI5XHVmZmZkXHUwNWJiXHUwNWJjXHUwNWJkXHUwNWJlXHUwNWJmXHUwNWMwXHUwNWMxXHUwNWMyXHUwNWMzXHUwNWYwXHUwNWYxXHUwNWYyXHUwNWYzXHUwNWY0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNWQwXHUwNWQxXHUw''@;'; put 'put ''NWQyXHUwNWQzXHUwNWQ0XHUwNWQ1XHUwNWQ2XHUwNWQ3XHUwNWQ4XHUwNWQ5XHUwNWRhXHUwNWRiXHUwNWRjXHUwNWRkXHUwNWRlXHUwNWRmXHUwNWUwXHUwNWUxXHUwNWUyXHUwNWUzXHUwNWU0XHUwNWU1XHUwNWU2XHUwNWU3XHUwNWU4XHUwNWU5XHUwNWVhXHVmZmZkXHVmZmZkXHUyMDBl''@;'; put 'put ''XHUyMDBmXHVmZmZkIixJPVtdLHk9e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT1fLmNoYXJDb2RlQXQoZykmJih5W18uY2hhckF0KGcpXT1nKSxJW2ddPV8uY2hhckF0KGcpO3JldHVybntlbmM6eSxkZWM6SX19KCkscVsxMjU2XT1mdW5jdGlvbigpe2Zvcih2YXIgXz0iXDBceDAxXHgwMlx4''@;'; put 'put ''MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xc''@;'; put 'put ''XV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdTA2N2VcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTA2NzlcdTIwMzlcdTAxNTJcdTA2ODZcdTA2OThcdTA2ODhcdTA2YWZcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRc''@;'; put 'put ''dTIwMjJcdTIwMTNcdTIwMTRcdTA2YTlcdTIxMjJcdTA2OTFcdTIwM2FcdTAxNTNcdTIwMGNcdTIwMGRcdTA2YmFceGEwXHUwNjBjXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlcdTA2YmVceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3''@;'; put 'put ''XHhiOFx4YjlcdTA2MWJceGJiXHhiY1x4YmRceGJlXHUwNjFmXHUwNmMxXHUwNjIxXHUwNjIyXHUwNjIzXHUwNjI0XHUwNjI1XHUwNjI2XHUwNjI3XHUwNjI4XHUwNjI5XHUwNjJhXHUwNjJiXHUwNjJjXHUwNjJkXHUwNjJlXHUwNjJmXHUwNjMwXHUwNjMxXHUwNjMyXHUwNjMzXHUwNjM0XHUw''@;'; put 'put ''NjM1XHUwNjM2XHhkN1x1MDYzN1x1MDYzOFx1MDYzOVx1MDYzYVx1MDY0MFx1MDY0MVx1MDY0Mlx1MDY0M1x4ZTBcdTA2NDRceGUyXHUwNjQ1XHUwNjQ2XHUwNjQ3XHUwNjQ4XHhlN1x4ZThceGU5XHhlYVx4ZWJcdTA2NDlcdTA2NGFceGVlXHhlZlx1MDY0Ylx1MDY0Y1x1MDY0ZFx1MDY0ZVx4''@;'; put 'put ''ZjRcdTA2NGZcdTA2NTBceGY3XHUwNjUxXHhmOVx1MDY1Mlx4ZmJceGZjXHUyMDBlXHUyMDBmXHUwNmQyIixJPVtdLHk9e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT1fLmNoYXJDb2RlQXQoZykmJih5W18uY2hhckF0KGcpXT1nKSxJW2ddPV8uY2hhckF0KGcpO3JldHVybntlbmM6eSxkZWM6''@;'; put 'put ''SX19KCkscVsxMjU3XT1mdW5jdGlvbigpe2Zvcih2YXIgXz0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywt''@;'; put 'put ''Li8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZcdTIwYWNcdWZmZmRcdTIwMWFcdWZmZmRcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdWZmZmRcdTIwMzBcdWZmZmRcdTIwMzlcdWZmZmRc''@;'; put 'put ''eGE4XHUwMmM3XHhiOFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1ZmZmZFx1MjAzYVx1ZmZmZFx4YWZcdTAyZGJcdWZmZmRceGEwXHVmZmZkXHhhMlx4YTNceGE0XHVmZmZkXHhhNlx4YTdceGQ4XHhhOVx1MDE1Nlx4YWJceGFj''@;'; put 'put ''XHhhZFx4YWVceGM2XHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGY4XHhiOVx1MDE1N1x4YmJceGJjXHhiZFx4YmVceGU2XHUwMTA0XHUwMTJlXHUwMTAwXHUwMTA2XHhjNFx4YzVcdTAxMThcdTAxMTJcdTAxMGNceGM5XHUwMTc5XHUwMTE2XHUwMTIyXHUwMTM2XHUwMTJhXHUw''@;'; put 'put ''MTNiXHUwMTYwXHUwMTQzXHUwMTQ1XHhkM1x1MDE0Y1x4ZDVceGQ2XHhkN1x1MDE3Mlx1MDE0MVx1MDE1YVx1MDE2YVx4ZGNcdTAxN2JcdTAxN2RceGRmXHUwMTA1XHUwMTJmXHUwMTAxXHUwMTA3XHhlNFx4ZTVcdTAxMTlcdTAxMTNcdTAxMGRceGU5XHUwMTdhXHUwMTE3XHUwMTIzXHUwMTM3''@;'; put 'put ''XHUwMTJiXHUwMTNjXHUwMTYxXHUwMTQ0XHUwMTQ2XHhmM1x1MDE0ZFx4ZjVceGY2XHhmN1x1MDE3M1x1MDE0Mlx1MDE1Ylx1MDE2Ylx4ZmNcdTAxN2NcdTAxN2VcdTAyZDkiLEk9W10seT17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PV8uY2hhckNvZGVBdChnKSYmKHlbXy5jaGFyQXQoZyld''@;'; put 'put ''PWcpLElbZ109Xy5jaGFyQXQoZyk7cmV0dXJue2VuYzp5LGRlYzpJfX0oKSxxWzEyNThdPWZ1bmN0aW9uKCl7Zm9yKHZhciBfPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlc''@;'; put 'put ''eDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAy''@;'; put 'put ''MFx1MjAyMVx1MDJjNlx1MjAzMFx1ZmZmZFx1MjAzOVx1MDE1Mlx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1ZmZmZFx1MjAzYVx1MDE1M1x1ZmZmZFx1ZmZmZFx1MDE3OFx4YTBceGExXHhhMlx4''@;'; put 'put ''YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHhjMFx4YzFceGMyXHUwMTAyXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2Jc''@;'; put 'put ''dTAzMDBceGNkXHhjZVx4Y2ZcdTAxMTBceGQxXHUwMzA5XHhkM1x4ZDRcdTAxYTBceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHUwMWFmXHUwMzAzXHhkZlx4ZTBceGUxXHhlMlx1MDEwM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHUwMzAxXHhlZFx4ZWVceGVmXHUwMTEx''@;'; put 'put ''XHhmMVx1MDMyM1x4ZjNceGY0XHUwMWExXHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDFiMFx1MjBhYlx4ZmYiLEk9W10seT17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PV8uY2hhckNvZGVBdChnKSYmKHlbXy5jaGFyQXQoZyldPWcpLElbZ109Xy5jaGFyQXQoZyk7cmV0dXJue2Vu''@;'; put 'put ''Yzp5LGRlYzpJfX0oKSxxWzFlNF09ZnVuY3Rpb24oKXtmb3IodmFyIF89IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUm''@;'; put 'put ''JygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFceGVi''@;'; put 'put ''XHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUyMjYwXHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJc''@;'; put 'put ''dTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1''@;'; put 'put ''MjVjYVx4ZmZcdTAxNzhcdTIwNDRceGE0XHUyMDM5XHUyMDNhXHVmYjAxXHVmYjAyXHUyMDIxXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1MDEzMVx1MDJjNlx1MDJkY1x4YWZc''@;'; put 'put ''dTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3IixJPVtdLHk9e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT1fLmNoYXJDb2RlQXQoZykmJih5W18uY2hhckF0KGcpXT1nKSxJW2ddPV8uY2hhckF0KGcpO3JldHVybntlbmM6eSxkZWM6SX19KCkscVsxMDAwNl09ZnVuY3Rp''@;'; put 'put ''b24oKXtmb3IodmFyIF89IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BB''@;'; put 'put ''QkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHhjNFx4YjlceGIyXHhjOVx4YjNceGQ2XHhkY1x1MDM4NVx4ZTBceGUyXHhlNFx1MDM4NFx4YThceGU3XHhlOVx4ZThceGVhXHhlYlx4YTNcdTIxMjJceGVlXHhlZlx1MjAy''@;'; put 'put ''Mlx4YmRcdTIwMzBceGY0XHhmNlx4YTZceGFkXHhmOVx4ZmJceGZjXHUyMDIwXHUwMzkzXHUwMzk0XHUwMzk4XHUwMzliXHUwMzllXHUwM2EwXHhkZlx4YWVceGE5XHUwM2EzXHUwM2FhXHhhN1x1MjI2MFx4YjBcdTAzODdcdTAzOTFceGIxXHUyMjY0XHUyMjY1XHhhNVx1MDM5Mlx1MDM5NVx1''@;'; put 'put ''MDM5Nlx1MDM5N1x1MDM5OVx1MDM5YVx1MDM5Y1x1MDNhNlx1MDNhYlx1MDNhOFx1MDNhOVx1MDNhY1x1MDM5ZFx4YWNcdTAzOWZcdTAzYTFcdTIyNDhcdTAzYTRceGFiXHhiYlx1MjAyNlx4YTBcdTAzYTVcdTAzYTdcdTAzODZcdTAzODhcdTAxNTNcdTIwMTNcdTIwMTVcdTIwMWNcdTIwMWRc''@;'; put 'put ''dTIwMThcdTIwMTlceGY3XHUwMzg5XHUwMzhhXHUwMzhjXHUwMzhlXHUwM2FkXHUwM2FlXHUwM2FmXHUwM2NjXHUwMzhmXHUwM2NkXHUwM2IxXHUwM2IyXHUwM2M4XHUwM2I0XHUwM2I1XHUwM2M2XHUwM2IzXHUwM2I3XHUwM2I5XHUwM2JlXHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2Jm''@;'; put 'put ''XHUwM2MwXHUwM2NlXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2I4XHUwM2M5XHUwM2MyXHUwM2M3XHUwM2M1XHUwM2I2XHUwM2NhXHUwM2NiXHUwMzkwXHUwM2IwXHVmZmZkIixJPVtdLHk9e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT1fLmNoYXJDb2RlQXQoZykmJih5W18uY2hhckF0KGcpXT1n''@;'; put 'put ''KSxJW2ddPV8uY2hhckF0KGcpO3JldHVybntlbmM6eSxkZWM6SX19KCkscVsxMDAwN109ZnVuY3Rpb24oKXtmb3IodmFyIF89IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4''@;'; put 'put ''MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2''@;'; put 'put ''XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUyMDIwXHhiMFx4YTJc''@;'; put 'put ''eGEzXHhhN1x1MjAyMlx4YjZcdTA0MDZceGFlXHhhOVx1MjEyMlx1MDQwMlx1MDQ1Mlx1MjI2MFx1MDQwM1x1MDQ1M1x1MjIxZVx4YjFcdTIyNjRcdTIyNjVcdTA0NTZceGI1XHUyMjAyXHUwNDA4XHUwNDA0XHUwNDU0XHUwNDA3XHUwNDU3XHUwNDA5XHUwNDU5XHUwNDBhXHUwNDVhXHUwNDU4''@;'; put 'put ''XHUwNDA1XHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx1MDQwYlx1MDQ1Ylx1MDQwY1x1MDQ1Y1x1MDQ1NVx1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTIwMWVcdTA0MGVcdTA0NWVcdTA0MGZcdTA0NWZcdTIxMTZcdTA0MDFc''@;'; put 'put ''dTA0NTFcdTA0NGZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0''@;'; put 'put ''NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVceGE0IixJPVtdLHk9e30sZz0wOzI1NiE9ZzsrK2cpNjU1MzMhPT1fLmNoYXJDb2RlQXQoZykmJih5W18uY2hhckF0KGcpXT1nKSxJW2ddPV8uY2hhckF0KGcpO3JldHVybntlbmM6eSxkZWM6SX19KCkscVsxMDAwOF09ZnVuY3Rpb24o''@;'; put 'put ''KXt2YXIgZyxfPVtdLEk9e30seT1bXTtmb3IoeVswXT0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8w''@;'; put 'put ''MTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceDgwXHVmOGQ4XHVmOGQ5XHVmOGRhXHVmOGRiXHVmOGRjXHVmOGRkXHVmOGRlXHVmOGRmXHVmOGUwXHVmOGUxXHVmOGUyXHVmOGUzXHVmOGU0''@;'; put 'put ''XHVmOGU1XHVmOGU2XHVmOGU3XHVmOGU4XHVmOGU5XHVmOGVhXHVmOGViXHVmOGVjXHVmOGVkXHVmOGVlXHVmOGVmXHVmOGYwXHVmOGYxXHVmOGYyXHVmOGYzXHVmOGY0XHVmOGY1XHVmOGY2XHVmOGY3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmOGY4XHVmOGY5XHVmOGZhXHVmOGZi''@;'; put 'put ''XHVmOGZjXHVmOGZkXHVmOGZlXHVmOGZmIi5zcGxpdCgiIiksZz0wO2chPXlbMF0ubGVuZ3RoOysrZyk2NTUzMyE9PXlbMF1bZ10uY2hhckNvZGVBdCgwKSYmKElbeVswXVtnXV09MCtnLF9bMCtnXT15WzBdW2ddKTtmb3IoeVsxNjFdPSJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTMwMDBcdTMwMDFcdTMwMDJcdTMwZmJcdTAyYzlcdTAyYzdceGE4XHUzMDAzXHUzMDA1XHUy''@;'; put 'put ''MDE1XHVmZjVlXHVmZmZkXHUyMDI2XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUzMDE0XHUzMDE1XHUzMDA4XHUzMDA5XHUzMDBhXHUzMDBiXHUzMDBjXHUzMDBkXHUzMDBlXHUzMDBmXHUzMDE2XHUzMDE3XHUzMDEwXHUzMDExXHhiMVx4ZDdceGY3XHUyMjM2XHUyMjI3XHUyMjI4XHUyMjEx''@;'; put 'put ''XHUyMjBmXHUyMjJhXHUyMjI5XHUyMjA4XHUyMjM3XHUyMjFhXHUyMmE1XHUyMjI1XHUyMjIwXHUyMzEyXHUyMjk5XHUyMjJiXHUyMjJlXHUyMjYxXHUyMjRjXHUyMjQ4XHUyMjNkXHUyMjFkXHUyMjYwXHUyMjZlXHUyMjZmXHUyMjY0XHUyMjY1XHUyMjFlXHUyMjM1XHUyMjM0XHUyNjQyXHUy''@;'; put 'put ''NjQwXHhiMFx1MjAzMlx1MjAzM1x1MjEwM1x1ZmYwNFx4YTRcdWZmZTBcdWZmZTFcdTIwMzBceGE3XHUyMTE2XHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNmXHUyNWNlXHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyMDNiXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUzMDEz''@;'; put 'put ''XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTYxXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNjFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTYxXVtnXV09NDEyMTYrZyxfWzQxMjE2K2ddPXlbMTYxXVtnXSk7Zm9yKHlbMTYyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNDg4XHUyNDg5XHUyNDhhXHUyNDhiXHUyNDhjXHUyNDhkXHUyNDhlXHUyNDhmXHUyNDkwXHUyNDkxXHUyNDkyXHUyNDkzXHUyNDk0XHUyNDk1XHUyNDk2XHUyNDk3XHUyNDk4XHUyNDk5XHUyNDlhXHUyNDliXHUyNDc0''@;'; put 'put ''XHUyNDc1XHUyNDc2XHUyNDc3XHUyNDc4XHUyNDc5XHUyNDdhXHUyNDdiXHUyNDdjXHUyNDdkXHUyNDdlXHUyNDdmXHUyNDgwXHUyNDgxXHUyNDgyXHUyNDgzXHUyNDg0XHUyNDg1XHUyNDg2XHUyNDg3XHUyNDYwXHUyNDYxXHUyNDYyXHUyNDYzXHUyNDY0XHUyNDY1XHUyNDY2XHUyNDY3XHUy''@;'; put 'put ''NDY4XHUyNDY5XHVmZmZkXHVmZmZkXHUzMjIwXHUzMjIxXHUzMjIyXHUzMjIzXHUzMjI0XHUzMjI1XHUzMjI2XHUzMjI3XHUzMjI4XHUzMjI5XHVmZmZkXHVmZmZkXHUyMTYwXHUyMTYxXHUyMTYyXHUyMTYzXHUyMTY0XHUyMTY1XHUyMTY2XHUyMTY3XHUyMTY4XHUyMTY5XHUyMTZhXHUyMTZi''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTYyXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNjJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTYyXVtnXV09NDE0NzIrZyxfWzQxNDcyK2ddPXlbMTYyXVtnXSk7Zm9yKHlbMTYzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZjAxXHVmZjAyXHVmZjAzXHVmZmU1XHVmZjA1XHVmZjA2XHVmZjA3XHVm''@;'; put 'put ''ZjA4XHVmZjA5XHVmZjBhXHVmZjBiXHVmZjBjXHVmZjBkXHVmZjBlXHVmZjBmXHVmZjEwXHVmZjExXHVmZjEyXHVmZjEzXHVmZjE0XHVmZjE1XHVmZjE2XHVmZjE3XHVmZjE4XHVmZjE5XHVmZjFhXHVmZjFiXHVmZjFjXHVmZjFkXHVmZjFlXHVmZjFmXHVmZjIwXHVmZjIxXHVmZjIyXHVmZjIz''@;'; put 'put ''XHVmZjI0XHVmZjI1XHVmZjI2XHVmZjI3XHVmZjI4XHVmZjI5XHVmZjJhXHVmZjJiXHVmZjJjXHVmZjJkXHVmZjJlXHVmZjJmXHVmZjMwXHVmZjMxXHVmZjMyXHVmZjMzXHVmZjM0XHVmZjM1XHVmZjM2XHVmZjM3XHVmZjM4XHVmZjM5XHVmZjNhXHVmZjNiXHVmZjNjXHVmZjNkXHVmZjNlXHVm''@;'; put 'put ''ZjNmXHVmZjQwXHVmZjQxXHVmZjQyXHVmZjQzXHVmZjQ0XHVmZjQ1XHVmZjQ2XHVmZjQ3XHVmZjQ4XHVmZjQ5XHVmZjRhXHVmZjRiXHVmZjRjXHVmZjRkXHVmZjRlXHVmZjRmXHVmZjUwXHVmZjUxXHVmZjUyXHVmZjUzXHVmZjU0XHVmZjU1XHVmZjU2XHVmZjU3XHVmZjU4XHVmZjU5XHVmZjVh''@;'; put 'put ''XHVmZjViXHVmZjVjXHVmZjVkXHVmZmUzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTYzXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNjNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTYzXVtnXV09NDE3MjgrZyxfWzQxNzI4K2ddPXlbMTYzXVtnXSk7Zm9yKHlbMTY0XT0iXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMDQxXHUzMDQyXHUzMDQzXHUzMDQ0XHUzMDQ1XHUz''@;'; put 'put ''MDQ2XHUzMDQ3XHUzMDQ4XHUzMDQ5XHUzMDRhXHUzMDRiXHUzMDRjXHUzMDRkXHUzMDRlXHUzMDRmXHUzMDUwXHUzMDUxXHUzMDUyXHUzMDUzXHUzMDU0XHUzMDU1XHUzMDU2XHUzMDU3XHUzMDU4XHUzMDU5XHUzMDVhXHUzMDViXHUzMDVjXHUzMDVkXHUzMDVlXHUzMDVmXHUzMDYwXHUzMDYx''@;'; put 'put ''XHUzMDYyXHUzMDYzXHUzMDY0XHUzMDY1XHUzMDY2XHUzMDY3XHUzMDY4XHUzMDY5XHUzMDZhXHUzMDZiXHUzMDZjXHUzMDZkXHUzMDZlXHUzMDZmXHUzMDcwXHUzMDcxXHUzMDcyXHUzMDczXHUzMDc0XHUzMDc1XHUzMDc2XHUzMDc3XHUzMDc4XHUzMDc5XHUzMDdhXHUzMDdiXHUzMDdjXHUz''@;'; put 'put ''MDdkXHUzMDdlXHUzMDdmXHUzMDgwXHUzMDgxXHUzMDgyXHUzMDgzXHUzMDg0XHUzMDg1XHUzMDg2XHUzMDg3XHUzMDg4XHUzMDg5XHUzMDhhXHUzMDhiXHUzMDhjXHUzMDhkXHUzMDhlXHUzMDhmXHUzMDkwXHUzMDkxXHUzMDkyXHUzMDkzXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTY0XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNjRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTY0XVtnXV09NDE5ODQrZyxfWzQxOTg0K2ddPXlbMTY0XVtnXSk7Zm9yKHlbMTY1''@;'; put 'put ''XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMGExXHUzMGEyXHUzMGEzXHUz''@;'; put 'put ''MGE0XHUzMGE1XHUzMGE2XHUzMGE3XHUzMGE4XHUzMGE5XHUzMGFhXHUzMGFiXHUzMGFjXHUzMGFkXHUzMGFlXHUzMGFmXHUzMGIwXHUzMGIxXHUzMGIyXHUzMGIzXHUzMGI0XHUzMGI1XHUzMGI2XHUzMGI3XHUzMGI4XHUzMGI5XHUzMGJhXHUzMGJiXHUzMGJjXHUzMGJkXHUzMGJlXHUzMGJm''@;'; put 'put ''XHUzMGMwXHUzMGMxXHUzMGMyXHUzMGMzXHUzMGM0XHUzMGM1XHUzMGM2XHUzMGM3XHUzMGM4XHUzMGM5XHUzMGNhXHUzMGNiXHUzMGNjXHUzMGNkXHUzMGNlXHUzMGNmXHUzMGQwXHUzMGQxXHUzMGQyXHUzMGQzXHUzMGQ0XHUzMGQ1XHUzMGQ2XHUzMGQ3XHUzMGQ4XHUzMGQ5XHUzMGRhXHUz''@;'; put 'put ''MGRiXHUzMGRjXHUzMGRkXHUzMGRlXHUzMGRmXHUzMGUwXHUzMGUxXHUzMGUyXHUzMGUzXHUzMGU0XHUzMGU1XHUzMGU2XHUzMGU3XHUzMGU4XHUzMGU5XHUzMGVhXHUzMGViXHUzMGVjXHUzMGVkXHUzMGVlXHUzMGVmXHUzMGYwXHUzMGYxXHUzMGYyXHUzMGYzXHUzMGY0XHUzMGY1XHUzMGY2''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTY1XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNjVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTY1XVtnXV09NDIyNDArZyxfWzQyMjQwK2ddPXlbMTY1XVtn''@;'; put 'put ''XSk7Zm9yKHlbMTY2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwMzkxXHUw''@;'; put 'put ''MzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUwM2M5XHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTY2XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNjZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTY2XVtnXV09NDI0OTYrZyxfWzQyNDk2''@;'; put 'put ''K2ddPXlbMTY2XVtnXSk7Zm9yKHlbMTY3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDAxXHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5''@;'; put 'put ''XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUw''@;'; put 'put ''NDUxXHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTY3XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNjddW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTY3XVtnXV09NDI3''@;'; put 'put ''NTIrZyxfWzQyNzUyK2ddPXlbMTY3XVtnXSk7Zm9yKHlbMTY4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHUwMTAxXHhlMVx1MDFjZVx4ZTBcdTAxMTNceGU5XHUwMTFiXHhlOFx1MDEyYlx4ZWRcdTAxZDBceGVjXHUwMTRkXHhmM1x1MDFkMlx4ZjJcdTAxNmJceGZhXHUwMWQ0XHhmOVx1MDFkNlx1MDFkOFx1MDFkYVx1MDFkY1x4ZmNceGVhXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUzMTA1XHUzMTA2XHUzMTA3XHUzMTA4XHUzMTA5XHUzMTBhXHUzMTBiXHUzMTBjXHUzMTBkXHUzMTBlXHUzMTBmXHUzMTEwXHUzMTExXHUzMTEyXHUzMTEzXHUzMTE0XHUzMTE1XHUzMTE2XHUzMTE3XHUzMTE4XHUz''@;'; put 'put ''MTE5XHUzMTFhXHUzMTFiXHUzMTFjXHUzMTFkXHUzMTFlXHUzMTFmXHUzMTIwXHUzMTIxXHUzMTIyXHUzMTIzXHUzMTI0XHUzMTI1XHUzMTI2XHUzMTI3XHUzMTI4XHUzMTI5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTY4XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNjhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTY4XVtnXV09NDMwMDgrZyxfWzQzMDA4''@;'; put 'put ''K2ddPXlbMTY4XVtnXSk7Zm9yKHlbMTY5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNTAwXHUyNTAxXHUyNTAyXHUyNTAzXHUyNTA0XHUyNTA1XHUyNTA2XHUyNTA3XHUyNTA4XHUyNTA5XHUyNTBhXHUyNTBiXHUyNTBjXHUyNTBkXHUyNTBlXHUyNTBmXHUyNTEwXHUyNTExXHUyNTEyXHUyNTEzXHUyNTE0XHUyNTE1XHUyNTE2XHUyNTE3''@;'; put 'put ''XHUyNTE4XHUyNTE5XHUyNTFhXHUyNTFiXHUyNTFjXHUyNTFkXHUyNTFlXHUyNTFmXHUyNTIwXHUyNTIxXHUyNTIyXHUyNTIzXHUyNTI0XHUyNTI1XHUyNTI2XHUyNTI3XHUyNTI4XHUyNTI5XHUyNTJhXHUyNTJiXHUyNTJjXHUyNTJkXHUyNTJlXHUyNTJmXHUyNTMwXHUyNTMxXHUyNTMyXHUy''@;'; put 'put ''NTMzXHUyNTM0XHUyNTM1XHUyNTM2XHUyNTM3XHUyNTM4XHUyNTM5XHUyNTNhXHUyNTNiXHUyNTNjXHUyNTNkXHUyNTNlXHUyNTNmXHUyNTQwXHUyNTQxXHUyNTQyXHUyNTQzXHUyNTQ0XHUyNTQ1XHUyNTQ2XHUyNTQ3XHUyNTQ4XHUyNTQ5XHUyNTRhXHUyNTRiXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTY5XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNjldW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTY5XVtnXV09NDMy''@;'; put 'put ''NjQrZyxfWzQzMjY0K2ddPXlbMTY5XVtnXSk7Zm9yKHlbMTc2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHU1NTRhXHU5NjNmXHU1N2MzXHU2MzI4XHU1NGNlXHU1NTA5XHU1NGMwXHU3NjkxXHU3NjRjXHU4NTNjXHU3N2VlXHU4MjdlXHU3ODhkXHU3MjMxXHU5Njk4XHU5NzhkXHU2YzI4XHU1Yjg5XHU0ZmZhXHU2MzA5XHU2Njk3XHU1Y2I4XHU4MGZhXHU2ODQ4XHU4MGFl''@;'; put 'put ''XHU2NjAyXHU3NmNlXHU1MWY5XHU2NTU2XHU3MWFjXHU3ZmYxXHU4ODg0XHU1MGIyXHU1OTY1XHU2MWNhXHU2ZmIzXHU4MmFkXHU2MzRjXHU2MjUyXHU1M2VkXHU1NDI3XHU3YjA2XHU1MTZiXHU3NWE0XHU1ZGY0XHU2MmQ0XHU4ZGNiXHU5Nzc2XHU2MjhhXHU4MDE5XHU1NzVkXHU5NzM4XHU3''@;'; put 'put ''ZjYyXHU3MjM4XHU3NjdkXHU2N2NmXHU3NjdlXHU2NDQ2XHU0ZjcwXHU4ZDI1XHU2MmRjXHU3YTE3XHU2NTkxXHU3M2VkXHU2NDJjXHU2MjczXHU4MjJjXHU5ODgxXHU2NzdmXHU3MjQ4XHU2MjZlXHU2MmNjXHU0ZjM0XHU3NGUzXHU1MzRhXHU1MjllXHU3ZWNhXHU5MGE2XHU1ZTJlXHU2ODg2''@;'; put 'put ''XHU2OTljXHU4MTgwXHU3ZWQxXHU2OGQyXHU3OGM1XHU4NjhjXHU5NTUxXHU1MDhkXHU4YzI0XHU4MmRlXHU4MGRlXHU1MzA1XHU4OTEyXHU1MjY1XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTc2XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNzZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lb''@;'; put 'put ''MTc2XVtnXV09NDUwNTYrZyxfWzQ1MDU2K2ddPXlbMTc2XVtnXSk7Zm9yKHlbMTc3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTg0XHU5NmY5XHU0ZmRkXHU1ODIxXHU5OTcxXHU1YjlkXHU2MmIxXHU2MmE1XHU2NmI0XHU4Yzc5XHU5YzhkXHU3MjA2XHU2NzZmXHU3ODkxXHU2MGIyXHU1MzUxXHU1MzE3XHU4Zjg4XHU4MGNjXHU4ZDFkXHU5NGExXHU1MDBkXHU3MmM4''@;'; put 'put ''XHU1OTA3XHU2MGViXHU3MTE5XHU4OGFiXHU1OTU0XHU4MmVmXHU2NzJjXHU3YjI4XHU1ZDI5XHU3ZWY3XHU3NTJkXHU2Y2Y1XHU4ZTY2XHU4ZmY4XHU5MDNjXHU5ZjNiXHU2YmQ0XHU5MTE5XHU3YjE0XHU1ZjdjXHU3OGE3XHU4NGQ2XHU4NTNkXHU2YmQ1XHU2YmQ5XHU2YmQ2XHU1ZTAxXHU1''@;'; put 'put ''ZTg3XHU3NWY5XHU5NWVkXHU2NTVkXHU1ZjBhXHU1ZmM1XHU4ZjlmXHU1OGMxXHU4MWMyXHU5MDdmXHU5NjViXHU5N2FkXHU4ZmI5XHU3ZjE2XHU4ZDJjXHU2MjQxXHU0ZmJmXHU1M2Q4XHU1MzVlXHU4ZmE4XHU4ZmE5XHU4ZmFiXHU5MDRkXHU2ODA3XHU1ZjZhXHU4MTk4XHU4ODY4XHU5Y2Q2''@;'; put 'put ''XHU2MThiXHU1MjJiXHU3NjJhXHU1ZjZjXHU2NThjXHU2ZmQyXHU2ZWU4XHU1YmJlXHU2NDQ4XHU1MTc1XHU1MWIwXHU2N2M0XHU0ZTE5XHU3OWM5XHU5OTdjXHU3MGIzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTc3XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNzddW2ddLmNoYXJDb2Rl''@;'; put 'put ''QXQoMCkmJihJW3lbMTc3XVtnXV09NDUzMTIrZyxfWzQ1MzEyK2ddPXlbMTc3XVtnXSk7Zm9yKHlbMTc4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NWM1XHU1ZTc2XHU3M2JiXHU4M2UwXHU2NGFkXHU2MmU4XHU5NGI1XHU2Y2UyXHU1MzVhXHU1MmMzXHU2NDBmXHU5NGMyXHU3Yjk0XHU0ZjJmXHU1ZTFiXHU4MjM2XHU4MTE2XHU4MThhXHU2ZTI0XHU2Y2NhXHU5YTcz''@;'; put 'put ''XHU2MzU1XHU1MzVjXHU1NGZhXHU4ODY1XHU1N2UwXHU0ZTBkXHU1ZTAzXHU2YjY1XHU3YzNmXHU5MGU4XHU2MDE2XHU2NGU2XHU3MzFjXHU4OGMxXHU2NzUwXHU2MjRkXHU4ZDIyXHU3NzZjXHU4ZTI5XHU5MWM3XHU1ZjY5XHU4M2RjXHU4NTIxXHU5OTEwXHU1M2MyXHU4Njk1XHU2YjhiXHU2''@;'; put 'put ''MGVkXHU2MGU4XHU3MDdmXHU4MmNkXHU4MjMxXHU0ZWQzXHU2Y2E3XHU4NWNmXHU2NGNkXHU3Y2Q5XHU2OWZkXHU2NmY5XHU4MzQ5XHU1Mzk1XHU3YjU2XHU0ZmE3XHU1MThjXHU2ZDRiXHU1YzQyXHU4ZTZkXHU2M2QyXHU1M2M5XHU4MzJjXHU4MzM2XHU2N2U1XHU3OGI0XHU2NDNkXHU1YmRm''@;'; put 'put ''XHU1Yzk0XHU1ZGVlXHU4YmU3XHU2MmM2XHU2N2Y0XHU4YzdhXHU2NDAwXHU2M2JhXHU4NzQ5XHU5OThiXHU4YzE3XHU3ZjIwXHU5NGYyXHU0ZWE3XHU5NjEwXHU5OGE0XHU2NjBjXHU3MzE2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTc4XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxNzhd''@;'; put 'put ''W2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTc4XVtnXV09NDU1NjgrZyxfWzQ1NTY4K2ddPXlbMTc4XVtnXSk7Zm9yKHlbMTc5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NzNhXHU1YzFkXHU1ZTM4XHU5NTdmXHU1MDdmXHU4MGEwXHU1MzgyXHU2NTVlXHU3NTQ1XHU1NTMxXHU1MDIxXHU4ZDg1XHU2Mjg0XHU5NDllXHU2NzFkXHU1NjMyXHU2ZjZlXHU1ZGUyXHU1NDM1''@;'; put 'put ''XHU3MDkyXHU4ZjY2XHU2MjZmXHU2NGE0XHU2M2EzXHU1ZjdiXHU2Zjg4XHU5MGY0XHU4MWUzXHU4ZmIwXHU1YzE4XHU2NjY4XHU1ZmYxXHU2Yzg5XHU5NjQ4XHU4ZDgxXHU4ODZjXHU2NDkxXHU3OWYwXHU1N2NlXHU2YTU5XHU2MjEwXHU1NDQ4XHU0ZTU4XHU3YTBiXHU2MGU5XHU2Zjg0XHU4''@;'; put 'put ''YmRhXHU2MjdmXHU5MDFlXHU5YThiXHU3OWU0XHU1NDAzXHU3NWY0XHU2MzAxXHU1MzE5XHU2YzYwXHU4ZmRmXHU1ZjFiXHU5YTcwXHU4MDNiXHU5ZjdmXHU0Zjg4XHU1YzNhXHU4ZDY0XHU3ZmM1XHU2NWE1XHU3MGJkXHU1MTQ1XHU1MWIyXHU4NjZiXHU1ZDA3XHU1YmEwXHU2MmJkXHU5MTZj''@;'; put 'put ''XHU3NTc0XHU4ZTBjXHU3YTIwXHU2MTAxXHU3Yjc5XHU0ZWM3XHU3ZWY4XHU3Nzg1XHU0ZTExXHU4MWVkXHU1MjFkXHU1MWZhXHU2YTcxXHU1M2E4XHU4ZTg3XHU5NTA0XHU5NmNmXHU2ZWMxXHU5NjY0XHU2OTVhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTc5XS5sZW5ndGg7KytnKTY1''@;'; put 'put ''NTMzIT09eVsxNzldW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTc5XVtnXV09NDU4MjQrZyxfWzQ1ODI0K2ddPXlbMTc5XVtnXSk7Zm9yKHlbMTgwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3ODQwXHU1MGE4XHU3N2Q3XHU2NDEwXHU4OWU2XHU1OTA0XHU2M2UzXHU1ZGRkXHU3YTdmXHU2OTNkXHU0ZjIwXHU4MjM5XHU1NTk4XHU0ZTMyXHU3NWFlXHU3YTk3XHU1ZTYy''@;'; put 'put ''XHU1ZThhXHU5NWVmXHU1MjFiXHU1NDM5XHU3MDhhXHU2Mzc2XHU5NTI0XHU1NzgyXHU2NjI1XHU2OTNmXHU5MTg3XHU1NTA3XHU2ZGYzXHU3ZWFmXHU4ODIyXHU2MjMzXHU3ZWYwXHU3NWI1XHU4MzI4XHU3OGMxXHU5NmNjXHU4ZjllXHU2MTQ4XHU3NGY3XHU4YmNkXHU2YjY0XHU1MjNhXHU4''@;'; put 'put ''ZDUwXHU2YjIxXHU4MDZhXHU4NDcxXHU1NmYxXHU1MzA2XHU0ZWNlXHU0ZTFiXHU1MWQxXHU3Yzk3XHU5MThiXHU3YzA3XHU0ZmMzXHU4ZTdmXHU3YmUxXHU3YTljXHU2NDY3XHU1ZDE0XHU1MGFjXHU4MTA2XHU3NjAxXHU3Y2I5XHU2ZGVjXHU3ZmUwXHU2NzUxXHU1YjU4XHU1YmY4XHU3OGNi''@;'; put 'put ''XHU2NGFlXHU2NDEzXHU2M2FhXHU2MzJiXHU5NTE5XHU2NDJkXHU4ZmJlXHU3YjU0XHU3NjI5XHU2MjUzXHU1OTI3XHU1NDQ2XHU2Yjc5XHU1MGEzXHU2MjM0XHU1ZTI2XHU2Yjg2XHU0ZWUzXHU4ZDM3XHU4ODhiXHU1Zjg1XHU5MDJlXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTgwXS5s''@;'; put 'put ''ZW5ndGg7KytnKTY1NTMzIT09eVsxODBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTgwXVtnXV09NDYwODArZyxfWzQ2MDgwK2ddPXlbMTgwXVtnXSk7Zm9yKHlbMTgxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDIwXHU4MDNkXHU2MmM1XHU0ZTM5XHU1MzU1XHU5MGY4XHU2M2I4XHU4MGM2XHU2NWU2XHU2YzJlXHU0ZjQ2XHU2MGVlXHU2ZGUxXHU4YmRlXHU1ZjM5''@;'; put 'put ''XHU4NmNiXHU1ZjUzXHU2MzIxXHU1MTVhXHU4MzYxXHU2ODYzXHU1MjAwXHU2MzYzXHU4ZTQ4XHU1MDEyXHU1YzliXHU3OTc3XHU1YmZjXHU1MjMwXHU3YTNiXHU2MGJjXHU5MDUzXHU3NmQ3XHU1ZmI3XHU1Zjk3XHU3Njg0XHU4ZTZjXHU3MDZmXHU3NjdiXHU3YjQ5XHU3N2FhXHU1MWYzXHU5''@;'; put 'put ''MDkzXHU1ODI0XHU0ZjRlXHU2ZWY0XHU4ZmVhXHU2NTRjXHU3YjFiXHU3MmM0XHU2ZGE0XHU3ZmRmXHU1YWUxXHU2MmI1XHU1ZTk1XHU1NzMwXHU4NDgyXHU3YjJjXHU1ZTFkXHU1ZjFmXHU5MDEyXHU3ZjE0XHU5OGEwXHU2MzgyXHU2ZWM3XHU3ODk4XHU3MGI5XHU1MTc4XHU5NzViXHU1N2Fi''@;'; put 'put ''XHU3NTM1XHU0ZjQzXHU3NTM4XHU1ZTk3XHU2MGU2XHU1OTYwXHU2ZGMwXHU2YmJmXHU3ODg5XHU1M2ZjXHU5NmQ1XHU1MWNiXHU1MjAxXHU2Mzg5XHU1NDBhXHU5NDkzXHU4YzAzXHU4ZGNjXHU3MjM5XHU3ODlmXHU4Nzc2XHU4ZmVkXHU4YzBkXHU1M2UwXHVmZmZkIi5zcGxpdCgiIiksZz0w''@;'; put 'put ''O2chPXlbMTgxXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxODFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTgxXVtnXV09NDYzMzYrZyxfWzQ2MzM2K2ddPXlbMTgxXVtnXSk7Zm9yKHlbMTgyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZTAxXHU3NmVmXHU1M2VlXHU5NDg5XHU5ODc2XHU5ZjBlXHU5NTJkXHU1YjlhXHU4YmEyXHU0ZTIyXHU0ZTFjXHU1MWFjXHU4NDYz''@;'; put 'put ''XHU2MWMyXHU1MmE4XHU2ODBiXHU0Zjk3XHU2MDZiXHU1MWJiXHU2ZDFlXHU1MTVjXHU2Mjk2XHU2NTk3XHU5NjYxXHU4YzQ2XHU5MDE3XHU3NWQ4XHU5MGZkXHU3NzYzXHU2YmQyXHU3MjhhXHU3MmVjXHU4YmZiXHU1ODM1XHU3Nzc5XHU4ZDRjXHU2NzVjXHU5NTQwXHU4MDlhXHU1ZWE2XHU2''@;'; put 'put ''ZTIxXHU1OTkyXHU3YWVmXHU3N2VkXHU5NTNiXHU2YmI1XHU2NWFkXHU3ZjBlXHU1ODA2XHU1MTUxXHU5NjFmXHU1YmY5XHU1OGE5XHU1NDI4XHU4ZTcyXHU2NTY2XHU5ODdmXHU1NmU0XHU5NDlkXHU3NmZlXHU5MDQxXHU2Mzg3XHU1NGM2XHU1OTFhXHU1OTNhXHU1NzliXHU4ZWIyXHU2NzM1''@;'; put 'put ''XHU4ZGZhXHU4MjM1XHU1MjQxXHU2MGYwXHU1ODE1XHU4NmZlXHU1Y2U4XHU5ZTQ1XHU0ZmM0XHU5ODlkXHU4YmI5XHU1YTI1XHU2MDc2XHU1Mzg0XHU2MjdjXHU5MDRmXHU5MTAyXHU5OTdmXHU2MDY5XHU4MDBjXHU1MTNmXHU4MDMzXHU1YzE0XHU5OTc1XHU2ZDMxXHU0ZThjXHVmZmZkIi5z''@;'; put 'put ''cGxpdCgiIiksZz0wO2chPXlbMTgyXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxODJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTgyXVtnXV09NDY1OTIrZyxfWzQ2NTkyK2ddPXlbMTgyXVtnXSk7Zm9yKHlbMTgzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZDMwXHU1M2QxXHU3ZjVhXHU3YjRmXHU0ZjEwXHU0ZTRmXHU5NjAwXHU2Y2Q1XHU3M2QwXHU4NWU5XHU1ZTA2''@;'; put 'put ''XHU3NTZhXHU3ZmZiXHU2YTBhXHU3N2ZlXHU5NDkyXHU3ZTQxXHU1MWUxXHU3MGU2XHU1M2NkXHU4ZmQ0XHU4MzAzXHU4ZDI5XHU3MmFmXHU5OTZkXHU2Y2RiXHU1NzRhXHU4MmIzXHU2NWI5XHU4MGFhXHU2MjNmXHU5NjMyXHU1OWE4XHU0ZWZmXHU4YmJmXHU3ZWJhXHU2NTNlXHU4M2YyXHU5''@;'; put 'put ''NzVlXHU1NTYxXHU5OGRlXHU4MGE1XHU1MzJhXHU4YmZkXHU1NDIwXHU4MGJhXHU1ZTlmXHU2Y2I4XHU4ZDM5XHU4MmFjXHU5MTVhXHU1NDI5XHU2YzFiXHU1MjA2XHU3ZWI3XHU1NzVmXHU3MTFhXHU2YzdlXHU3Yzg5XHU1OTRiXHU0ZWZkXHU1ZmZmXHU2MTI0XHU3Y2FhXHU0ZTMwXHU1YzAx''@;'; put 'put ''XHU2N2FiXHU4NzAyXHU1Y2YwXHU5NTBiXHU5OGNlXHU3NWFmXHU3MGZkXHU5MDIyXHU1MWFmXHU3ZjFkXHU4YmJkXHU1OTQ5XHU1MWU0XHU0ZjViXHU1NDI2XHU1OTJiXHU2NTc3XHU4MGE0XHU1Yjc1XHU2Mjc2XHU2MmMyXHU4ZjkwXHU1ZTQ1XHU2YzFmXHU3YjI2XHU0ZjBmXHU0ZmQ4XHU2''@;'; put 'put ''NzBkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTgzXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxODNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTgzXVtnXV09NDY4NDgrZyxfWzQ2ODQ4K2ddPXlbMTgzXVtnXSk7Zm9yKHlbMTg0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDZlXHU2ZGFhXHU3OThmXHU4OGIxXHU1ZjE3XHU3NTJiXHU2MjlhXHU4Zjg1XHU0ZmVm''@;'; put 'put ''XHU5MWRjXHU2NWE3XHU4MTJmXHU4MTUxXHU1ZTljXHU4MTUwXHU4ZDc0XHU1MjZmXHU4OTg2XHU4ZDRiXHU1OTBkXHU1MDg1XHU0ZWQ4XHU5NjFjXHU3MjM2XHU4MTc5XHU4ZDFmXHU1YmNjXHU4YmEzXHU5NjQ0XHU1OTg3XHU3ZjFhXHU1NDkwXHU1Njc2XHU1NjBlXHU4YmU1XHU2NTM5XHU2''@;'; put 'put ''OTgyXHU5NDk5XHU3NmQ2XHU2ZTg5XHU1ZTcyXHU3NTE4XHU2NzQ2XHU2N2QxXHU3YWZmXHU4MDlkXHU4ZDc2XHU2MTFmXHU3OWM2XHU2NTYyXHU4ZDYzXHU1MTg4XHU1MjFhXHU5NGEyXHU3ZjM4XHU4MDliXHU3ZWIyXHU1Yzk3XHU2ZTJmXHU2NzYwXHU3YmQ5XHU3NjhiXHU5YWQ4XHU4MThm''@;'; put 'put ''XHU3Zjk0XHU3Y2Q1XHU2NDFlXHU5NTUwXHU3YTNmXHU1NDRhXHU1NGU1XHU2YjRjXHU2NDAxXHU2MjA4XHU5ZTNkXHU4MGYzXHU3NTk5XHU1MjcyXHU5NzY5XHU4NDViXHU2ODNjXHU4NmU0XHU5NjAxXHU5Njk0XHU5NGVjXHU0ZTJhXHU1NDA0XHU3ZWQ5XHU2ODM5XHU4ZGRmXHU4MDE1XHU2''@;'; put 'put ''NmY0XHU1ZTlhXHU3ZmI5XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTg0XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxODRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTg0XVtnXV09NDcxMDQrZyxfWzQ3MTA0K2ddPXlbMTg0XVtnXSk7Zm9yKHlbMTg1XT0iXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1N2MyXHU4MDNmXHU2ODk3XHU1ZGU1XHU2NTNiXHU1MjlmXHU2MDZk''@;'; put 'put ''XHU5ZjlhXHU0ZjliXHU4ZWFjXHU1MTZjXHU1YmFiXHU1ZjEzXHU1ZGU5XHU2YzVlXHU2MmYxXHU4ZDIxXHU1MTcxXHU5NGE5XHU1MmZlXHU2YzlmXHU4MmRmXHU3MmQ3XHU1N2EyXHU2Nzg0XHU4ZDJkXHU1OTFmXHU4ZjljXHU4M2M3XHU1NDk1XHU3YjhkXHU0ZjMwXHU2Y2JkXHU1YjY0XHU1''@;'; put 'put ''OWQxXHU5ZjEzXHU1M2U0XHU4NmNhXHU5YWE4XHU4YzM3XHU4MGExXHU2NTQ1XHU5ODdlXHU1NmZhXHU5NmM3XHU1MjJlXHU3NGRjXHU1MjUwXHU1YmUxXHU2MzAyXHU4OTAyXHU0ZTU2XHU2MmQwXHU2MDJhXHU2OGZhXHU1MTczXHU1Yjk4XHU1MWEwXHU4OWMyXHU3YmExXHU5OTg2XHU3ZjUw''@;'; put 'put ''XHU2MGVmXHU3MDRjXHU4ZDJmXHU1MTQ5XHU1ZTdmXHU5MDFiXHU3NDcwXHU4OWM0XHU1NzJkXHU3ODQ1XHU1ZjUyXHU5ZjlmXHU5NWZhXHU4ZjY4XHU5YjNjXHU4YmUxXHU3Njc4XHU2ODQyXHU2N2RjXHU4ZGVhXHU4ZDM1XHU1MjNkXHU4ZjhhXHU2ZWRhXHU2OGNkXHU5NTA1XHU5MGVkXHU1''@;'; put 'put ''NmZkXHU2NzljXHU4OGY5XHU4ZmM3XHU1NGM4XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTg1XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxODVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTg1XVtnXV09NDczNjArZyxfWzQ3MzYwK2ddPXlbMTg1XVtnXSk7Zm9yKHlbMTg2XT0iXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5YWI4XHU1YjY5XHU2ZDc3XHU2YzI2XHU0ZWE1''@;'; put 'put ''XHU1YmIzXHU5YTg3XHU5MTYzXHU2MWE4XHU5MGFmXHU5N2U5XHU1NDJiXHU2ZGI1XHU1YmQyXHU1MWZkXHU1NThhXHU3ZjU1XHU3ZmYwXHU2NGJjXHU2MzRkXHU2NWYxXHU2MWJlXHU2MDhkXHU3MTBhXHU2YzU3XHU2YzQ5XHU1OTJmXHU2NzZkXHU4MjJhXHU1OGQ1XHU1NjhlXHU4YzZhXHU2''@;'; put 'put ''YmViXHU5MGRkXHU1OTdkXHU4MDE3XHU1M2Y3XHU2ZDY5XHU1NDc1XHU1NTlkXHU4Mzc3XHU4M2NmXHU2ODM4XHU3OWJlXHU1NDhjXHU0ZjU1XHU1NDA4XHU3NmQyXHU4Yzg5XHU5NjAyXHU2Y2IzXHU2ZGI4XHU4ZDZiXHU4OTEwXHU5ZTY0XHU4ZDNhXHU1NjNmXHU5ZWQxXHU3NWQ1XHU1Zjg4''@;'; put 'put ''XHU3MmUwXHU2MDY4XHU1NGZjXHU0ZWE4XHU2YTJhXHU4ODYxXHU2MDUyXHU4ZjcwXHU1NGM0XHU3MGQ4XHU4Njc5XHU5ZTNmXHU2ZDJhXHU1YjhmXHU1ZjE4XHU3ZWEyXHU1NTg5XHU0ZmFmXHU3MzM0XHU1NDNjXHU1MzlhXHU1MDE5XHU1NDBlXHU1NDdjXHU0ZTRlXHU1ZmZkXHU3NDVhXHU1''@;'; put 'put ''OGY2XHU4NDZiXHU4MGUxXHU4Nzc0XHU3MmQwXHU3Y2NhXHU2ZTU2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTg2XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxODZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTg2XVtnXV09NDc2MTYrZyxfWzQ3NjE2K2ddPXlbMTg2XVtnXSk7Zm9yKHlb''@;'; put 'put ''MTg3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZjI3XHU4NjRlXHU1NTJj''@;'; put 'put ''XHU2MmE0XHU0ZTkyXHU2Y2FhXHU2MjM3XHU4MmIxXHU1NGQ3XHU1MzRlXHU3MzNlXHU2ZWQxXHU3NTNiXHU1MjEyXHU1MzE2XHU4YmRkXHU2OWQwXHU1ZjhhXHU2MDAwXHU2ZGVlXHU1NzRmXHU2YjIyXHU3M2FmXHU2ODUzXHU4ZmQ4XHU3ZjEzXHU2MzYyXHU2MGEzXHU1NTI0XHU3NWVhXHU4''@;'; put 'put ''YzYyXHU3MTE1XHU2ZGEzXHU1YmE2XHU1ZTdiXHU4MzUyXHU2MTRjXHU5ZWM0XHU3OGZhXHU4NzU3XHU3YzI3XHU3Njg3XHU1MWYwXHU2MGY2XHU3MTRjXHU2NjQzXHU1ZTRjXHU2MDRkXHU4YzBlXHU3MDcwXHU2MzI1XHU4Zjg5XHU1ZmJkXHU2MDYyXHU4NmQ0XHU1NmRlXHU2YmMxXHU2MDk0''@;'; put 'put ''XHU2MTY3XHU1MzQ5XHU2MGUwXHU2NjY2XHU4ZDNmXHU3OWZkXHU0ZjFhXHU3MGU5XHU2YzQ3XHU4YmIzXHU4YmYyXHU3ZWQ4XHU4MzY0XHU2NjBmXHU1YTVhXHU5YjQyXHU2ZDUxXHU2ZGY3XHU4YzQxXHU2ZDNiXHU0ZjE5XHU3MDZiXHU4M2I3XHU2MjE2XHU2MGQxXHU5NzBkXHU4ZDI3XHU3''@;'; put 'put ''OTc4XHU1MWZiXHU1NzNlXHU1N2ZhXHU2NzNhXHU3NTc4XHU3YTNkXHU3OWVmXHU3Yjk1XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTg3XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxODddW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTg3XVtnXV09NDc4NzIrZyxfWzQ3ODcyK2ddPXlbMTg3''@;'; put 'put ''XVtnXSk7Zm9yKHlbMTg4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MDhj''@;'; put 'put ''XHU5OTY1XHU4ZmY5XHU2ZmMwXHU4YmE1XHU5ZTIxXHU1OWVjXHU3ZWU5XHU3ZjA5XHU1NDA5XHU2NzgxXHU2OGQ4XHU4ZjkxXHU3YzRkXHU5NmM2XHU1M2NhXHU2MDI1XHU3NWJlXHU2YzcyXHU1MzczXHU1YWM5XHU3ZWE3XHU2MzI0XHU1MWUwXHU4MTBhXHU1ZGYxXHU4NGRmXHU2MjgwXHU1''@;'; put 'put ''MTgwXHU1YjYzXHU0ZjBlXHU3OTZkXHU1MjQyXHU2MGI4XHU2ZDRlXHU1YmM0XHU1YmMyXHU4YmExXHU4YmIwXHU2NWUyXHU1ZmNjXHU5NjQ1XHU1OTkzXHU3ZWU3XHU3ZWFhXHU1NjA5XHU2N2I3XHU1OTM5XHU0ZjczXHU1YmI2XHU1MmEwXHU4MzVhXHU5ODhhXHU4ZDNlXHU3NTMyXHU5NGJl''@;'; put 'put ''XHU1MDQ3XHU3YTNjXHU0ZWY3XHU2N2I2XHU5YTdlXHU1YWMxXHU2YjdjXHU3NmQxXHU1NzVhXHU1YzE2XHU3YjNhXHU5NWY0XHU3MTRlXHU1MTdjXHU4MGE5XHU4MjcwXHU1OTc4XHU3ZjA0XHU4MzI3XHU2OGMwXHU2N2VjXHU3OGIxXHU3ODc3XHU2MmUzXHU2MzYxXHU3YjgwXHU0ZmVkXHU1''@;'; put 'put ''MjZhXHU1MWNmXHU4MzUwXHU2OWRiXHU5Mjc0XHU4ZGY1XHU4ZDMxXHU4OWMxXHU5NTJlXHU3YmFkXHU0ZWY2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTg4XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxODhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTg4XVtnXV09NDgxMjgrZyxfWzQ4''@;'; put 'put ''MTI4K2ddPXlbMTg4XVtnXSk7Zm9yKHlbMTg5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHU1MDY1XHU4MjMwXHU1MjUxXHU5OTZmXHU2ZTEwXHU2ZTg1XHU2ZGE3XHU1ZWZhXHU1MGY1XHU1OWRjXHU1YzA2XHU2ZDQ2XHU2YzVmXHU3NTg2XHU4NDhiXHU2ODY4XHU1OTU2XHU4YmIyXHU1MzIwXHU5MTcxXHU5NjRkXHU4NTQ5XHU2OTEyXHU3OTAxXHU3MTI2XHU4MGY2XHU0''@;'; put 'put ''ZWE0XHU5MGNhXHU2ZDQ3XHU5YTg0XHU1YTA3XHU1NmJjXHU2NDA1XHU5NGYwXHU3N2ViXHU0ZmE1XHU4MTFhXHU3MmUxXHU4OWQyXHU5OTdhXHU3ZjM0XHU3ZWRlXHU1MjdmXHU2NTU5XHU5MTc1XHU4ZjdmXHU4ZjgzXHU1M2ViXHU3YTk2XHU2M2VkXHU2M2E1XHU3Njg2XHU3OWY4XHU4ODU3''@;'; put 'put ''XHU5NjM2XHU2MjJhXHU1MmFiXHU4MjgyXHU2ODU0XHU2NzcwXHU2Mzc3XHU3NzZiXHU3YWVkXHU2ZDAxXHU3ZWQzXHU4OWUzXHU1OWQwXHU2MjEyXHU4NWM5XHU4MmE1XHU3NTRjXHU1MDFmXHU0ZWNiXHU3NWE1XHU4YmViXHU1YzRhXHU1ZGZlXHU3YjRiXHU2NWE0XHU5MWQxXHU0ZWNhXHU2''@;'; put 'put ''ZDI1XHU4OTVmXHU3ZDI3XHU5NTI2XHU0ZWM1XHU4YzI4XHU4ZmRiXHU5NzczXHU2NjRiXHU3OTgxXHU4ZmQxXHU3MGVjXHU2ZDc4XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTg5XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxODldW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTg5XVtnXV09''@;'; put 'put ''NDgzODQrZyxfWzQ4Mzg0K2ddPXlbMTg5XVtnXSk7Zm9yKHlbMTkwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHU1YzNkXHU1MmIyXHU4MzQ2XHU1MTYyXHU4MzBlXHU3NzViXHU2Njc2XHU5Y2I4XHU0ZWFjXHU2MGNhXHU3Y2JlXHU3Y2IzXHU3ZWNmXHU0ZTk1XHU4YjY2XHU2NjZmXHU5ODg4XHU5NzU5XHU1ODgzXHU2NTZjXHU5NTVjXHU1Zjg0XHU3NWM5XHU5NzU2XHU3''@;'; put 'put ''YWRmXHU3YWRlXHU1MWMwXHU3MGFmXHU3YTk4XHU2M2VhXHU3YTc2XHU3ZWEwXHU3Mzk2XHU5N2VkXHU0ZTQ1XHU3MDc4XHU0ZTVkXHU5MTUyXHU1M2E5XHU2NTUxXHU2NWU3XHU4MWZjXHU4MjA1XHU1NDhlXHU1YzMxXHU3NTlhXHU5N2EwXHU2MmQ4XHU3MmQ5XHU3NWJkXHU1YzQ1XHU5YTc5''@;'; put 'put ''XHU4M2NhXHU1YzQwXHU1NDgwXHU3N2U5XHU0ZTNlXHU2Y2FlXHU4MDVhXHU2MmQyXHU2MzZlXHU1ZGU4XHU1MTc3XHU4ZGRkXHU4ZTFlXHU5NTJmXHU0ZmYxXHU1M2U1XHU2MGU3XHU3MGFjXHU1MjY3XHU2MzUwXHU5ZTQzXHU1YTFmXHU1MDI2XHU3NzM3XHU1Mzc3XHU3ZWUyXHU2NDg1XHU2''@;'; put 'put ''NTJiXHU2Mjg5XHU2Mzk4XHU1MDE0XHU3MjM1XHU4OWM5XHU1MWIzXHU4YmMwXHU3ZWRkXHU1NzQ3XHU4M2NjXHU5NGE3XHU1MTliXHU1NDFiXHU1Y2ZiXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTkwXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxOTBdW2ddLmNoYXJDb2RlQXQoMCkmJihJ''@;'; put 'put ''W3lbMTkwXVtnXV09NDg2NDArZyxfWzQ4NjQwK2ddPXlbMTkwXVtnXSk7Zm9yKHlbMTkxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZmNhXHU3YWUzXHU2ZDVhXHU5MGUxXHU5YThmXHU1NTgwXHU1NDk2XHU1MzYxXHU1NGFmXHU1ZjAwXHU2M2U5XHU2OTc3XHU1MWVmXHU2MTY4XHU1MjBhXHU1ODJhXHU1MmQ4XHU1NzRlXHU3ODBkXHU3NzBiXHU1ZWI3XHU2MTc3XHU3''@;'; put 'put ''Y2UwXHU2MjViXHU2Mjk3XHU0ZWEyXHU3MDk1XHU4MDAzXHU2MmY3XHU3MGU0XHU5NzYwXHU1Nzc3XHU4MmRiXHU2N2VmXHU2OGY1XHU3OGQ1XHU5ODk3XHU3OWQxXHU1OGYzXHU1NGIzXHU1M2VmXHU2ZTM0XHU1MTRiXHU1MjNiXHU1YmEyXHU4YmZlXHU4MGFmXHU1NTQzXHU1N2E2XHU2MDcz''@;'; put 'put ''XHU1NzUxXHU1NDJkXHU3YTdhXHU2MDUwXHU1YjU0XHU2M2E3XHU2MmEwXHU1M2UzXHU2MjYzXHU1YmM3XHU2N2FmXHU1NGVkXHU3YTlmXHU4MmU2XHU5MTc3XHU1ZTkzXHU4OGU0XHU1OTM4XHU1N2FlXHU2MzBlXHU4ZGU4XHU4MGVmXHU1NzU3XHU3Yjc3XHU0ZmE5XHU1ZmViXHU1YmJkXHU2''@;'; put 'put ''YjNlXHU1MzIxXHU3YjUwXHU3MmMyXHU2ODQ2XHU3N2ZmXHU3NzM2XHU2NWY3XHU1MWI1XHU0ZThmXHU3NmQ0XHU1Y2JmXHU3YWE1XHU4NDc1XHU1OTRlXHU5YjQxXHU1MDgwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTkxXS5sZW5ndGg7KytnKTY1NTMzIT09eVsxOTFdW2ddLmNoYXJD''@;'; put 'put ''b2RlQXQoMCkmJihJW3lbMTkxXVtnXV09NDg4OTYrZyxfWzQ4ODk2K2ddPXlbMTkxXVtnXSk7Zm9yKHlbMTkyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5OTg4XHU2MTI3XHU2ZTgzXHU1NzY0XHU2NjA2XHU2MzQ2XHU1NmYwXHU2MmVjXHU2MjY5XHU1ZWQzXHU5NjE0XHU1NzgzXHU2MmM5XHU1NTg3XHU4NzIxXHU4MTRhXHU4ZmEzXHU1NTY2XHU4M2IxXHU2NzY1XHU4''@;'; put 'put ''ZDU2XHU4NGRkXHU1YTZhXHU2ODBmXHU2MmU2XHU3YmVlXHU5NjExXHU1MTcwXHU2ZjljXHU4YzMwXHU2M2ZkXHU4OWM4XHU2MWQyXHU3ZjA2XHU3MGMyXHU2ZWU1XHU3NDA1XHU2OTk0XHU3MmZjXHU1ZWNhXHU5MGNlXHU2NzE3XHU2ZDZhXHU2MzVlXHU1MmIzXHU3MjYyXHU4MDAxXHU0ZjZj''@;'; put 'put ''XHU1OWU1XHU5MTZhXHU3MGQ5XHU2ZDlkXHU1MmQyXHU0ZTUwXHU5NmY3XHU5NTZkXHU4NTdlXHU3OGNhXHU3ZDJmXHU1MTIxXHU1NzkyXHU2NGMyXHU4MDhiXHU3YzdiXHU2Y2VhXHU2OGYxXHU2OTVlXHU1MWI3XHU1Mzk4XHU2OGE4XHU3MjgxXHU5ZWNlXHU3YmYxXHU3MmY4XHU3OWJiXHU2''@;'; put 'put ''ZjEzXHU3NDA2XHU2NzRlXHU5MWNjXHU5Y2E0XHU3OTNjXHU4Mzg5XHU4MzU0XHU1NDBmXHU2ODE3XHU0ZTNkXHU1Mzg5XHU1MmIxXHU3ODNlXHU1Mzg2XHU1MjI5XHU1MDg4XHU0ZjhiXHU0ZmQwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTkyXS5sZW5ndGg7KytnKTY1NTMzIT09eVsx''@;'; put 'put ''OTJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTkyXVtnXV09NDkxNTIrZyxfWzQ5MTUyK2ddPXlbMTkyXVtnXSk7Zm9yKHlbMTkzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NWUyXHU3YWNiXHU3YzkyXHU2Y2E1XHU5NmI2XHU1MjliXHU3NDgzXHU1NGU5XHU0ZmU5XHU4MDU0XHU4M2IyXHU4ZmRlXHU5NTcwXHU1ZWM5XHU2MDFjXHU2ZDlmXHU1ZTE4XHU2NTViXHU4''@;'; put 'put ''MTM4XHU5NGZlXHU2MDRiXHU3MGJjXHU3ZWMzXHU3Y2FlXHU1MWM5XHU2ODgxXHU3Y2IxXHU4MjZmXHU0ZTI0XHU4Zjg2XHU5MWNmXHU2NjdlXHU0ZWFlXHU4YzA1XHU2NGE5XHU4MDRhXHU1MGRhXHU3NTk3XHU3MWNlXHU1YmU1XHU4ZmJkXHU2ZjY2XHU0ZTg2XHU2NDgyXHU5NTYzXHU1ZWQ2''@;'; put 'put ''XHU2NTk5XHU1MjE3XHU4OGMyXHU3MGM4XHU1MmEzXHU3MzBlXHU3NDMzXHU2Nzk3XHU3OGY3XHU5NzE2XHU0ZTM0XHU5MGJiXHU5Y2RlXHU2ZGNiXHU1MWRiXHU4ZDQxXHU1NDFkXHU2MmNlXHU3M2IyXHU4M2YxXHU5NmY2XHU5Zjg0XHU5NGMzXHU0ZjM2XHU3ZjlhXHU1MWNjXHU3MDc1XHU5''@;'; put 'put ''Njc1XHU1Y2FkXHU5ODg2XHU1M2U2XHU0ZWU0XHU2ZTljXHU3NDA5XHU2OWI0XHU3ODZiXHU5OThmXHU3NTU5XHU1MjE4XHU3NjI0XHU2ZDQxXHU2N2YzXHU1MTZkXHU5Zjk5XHU4MDRiXHU1NDk5XHU3YjNjXHU3YWJmXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTkzXS5sZW5ndGg7Kytn''@;'; put 'put ''KTY1NTMzIT09eVsxOTNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTkzXVtnXV09NDk0MDgrZyxfWzQ5NDA4K2ddPXlbMTkzXVtnXSk7Zm9yKHlbMTk0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5Njg2XHU1Nzg0XHU2MmUyXHU5NjQ3XHU2OTdjXHU1YTA0XHU2NDAyXHU3YmQzXHU2ZjBmXHU5NjRiXHU4MmE2XHU1MzYyXHU5ODg1XHU1ZTkwXHU3MDg5XHU2M2IzXHU1''@;'; put 'put ''MzY0XHU4NjRmXHU5YzgxXHU5ZTkzXHU3ODhjXHU5NzMyXHU4ZGVmXHU4ZDQyXHU5ZTdmXHU2ZjVlXHU3OTg0XHU1ZjU1XHU5NjQ2XHU2MjJlXHU5YTc0XHU1NDE1XHU5NGRkXHU0ZmEzXHU2NWM1XHU1YzY1XHU1YzYxXHU3ZjE1XHU4NjUxXHU2YzJmXHU1ZjhiXHU3Mzg3XHU2ZWU0XHU3ZWZm''@;'; put 'put ''XHU1Y2U2XHU2MzFiXHU1YjZhXHU2ZWU2XHU1Mzc1XHU0ZTcxXHU2M2EwXHU3NTY1XHU2MmExXHU4ZjZlXHU0ZjI2XHU0ZWQxXHU2Y2E2XHU3ZWI2XHU4YmJhXHU4NDFkXHU4N2JhXHU3ZjU3XHU5MDNiXHU5NTIzXHU3YmE5XHU5YWExXHU4OGY4XHU4NDNkXHU2ZDFiXHU5YTg2XHU3ZWRjXHU1''@;'; put 'put ''OTg4XHU5ZWJiXHU3MzliXHU3ODAxXHU4NjgyXHU5YTZjXHU5YTgyXHU1NjFiXHU1NDE3XHU1N2NiXHU0ZTcwXHU5ZWE2XHU1MzU2XHU4ZmM4XHU4MTA5XHU3NzkyXHU5OTkyXHU4NmVlXHU2ZWUxXHU4NTEzXHU2NmZjXHU2MTYyXHU2ZjJiXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTk0''@;'; put 'put ''XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxOTRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTk0XVtnXV09NDk2NjQrZyxfWzQ5NjY0K2ddPXlbMTk0XVtnXSk7Zm9yKHlbMTk1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4YzI5XHU4MjkyXHU4MzJiXHU3NmYyXHU2YzEzXHU1ZmQ5XHU4M2JkXHU3MzJiXHU4MzA1XHU5NTFhXHU2YmRiXHU3N2RiXHU5NGM2XHU1MzZmXHU4''@;'; put 'put ''MzAyXHU1MTkyXHU1ZTNkXHU4YzhjXHU4ZDM4XHU0ZTQ4XHU3M2FiXHU2NzlhXHU2ODg1XHU5MTc2XHU5NzA5XHU3MTY0XHU2Y2ExXHU3NzA5XHU1YTkyXHU5NTQxXHU2YmNmXHU3ZjhlXHU2NjI3XHU1YmQwXHU1OWI5XHU1YTlhXHU5NWU4XHU5NWY3XHU0ZWVjXHU4NDBjXHU4NDk5XHU2YWFj''@;'; put 'put ''XHU3NmRmXHU5NTMwXHU3MzFiXHU2OGE2XHU1YjVmXHU3NzJmXHU5MTlhXHU5NzYxXHU3Y2RjXHU4ZmY3XHU4YzFjXHU1ZjI1XHU3YzczXHU3OWQ4XHU4OWM1XHU2Y2NjXHU4NzFjXHU1YmM2XHU1ZTQyXHU2OGM5XHU3NzIwXHU3ZWY1XHU1MTk1XHU1MTRkXHU1MmM5XHU1YTI5XHU3ZjA1XHU5''@;'; put 'put ''NzYyXHU4MmQ3XHU2M2NmXHU3Nzg0XHU4NWQwXHU3OWQyXHU2ZTNhXHU1ZTk5XHU1OTk5XHU4NTExXHU3MDZkXHU2YzExXHU2MmJmXHU3NmJmXHU2NTRmXHU2MGFmXHU5NWZkXHU2NjBlXHU4NzlmXHU5ZTIzXHU5NGVkXHU1NDBkXHU1NDdkXHU4YzJjXHU2NDc4XHVmZmZkIi5zcGxpdCgiIiks''@;'; put 'put ''Zz0wO2chPXlbMTk1XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxOTVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTk1XVtnXV09NDk5MjArZyxfWzQ5OTIwK2ddPXlbMTk1XVtnXSk7Zm9yKHlbMTk2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NDc5XHU4NjExXHU2YTIxXHU4MTljXHU3OGU4XHU2NDY5XHU5YjU0XHU2MmI5XHU2NzJiXHU4M2FiXHU1OGE4XHU5ZWQ4XHU2''@;'; put 'put ''Y2FiXHU2ZjIwXHU1YmRlXHU5NjRjXHU4YzBiXHU3MjVmXHU2N2QwXHU2MmM3XHU3MjYxXHU0ZWE5XHU1OWM2XHU2YmNkXHU1ODkzXHU2NmFlXHU1ZTU1XHU1MmRmXHU2MTU1XHU2NzI4XHU3NmVlXHU3NzY2XHU3MjY3XHU3YTQ2XHU2MmZmXHU1NGVhXHU1NDUwXHU5NGEwXHU5MGEzXHU1YTFj''@;'; put 'put ''XHU3ZWIzXHU2YzE2XHU0ZTQzXHU1OTc2XHU4MDEwXHU1OTQ4XHU1MzU3XHU3NTM3XHU5NmJlXHU1NmNhXHU2MzIwXHU4MTExXHU2MDdjXHU5NWY5XHU2ZGQ2XHU1NDYyXHU5OTgxXHU1MTg1XHU1YWU5XHU4MGZkXHU1OWFlXHU5NzEzXHU1MDJhXHU2Y2U1XHU1YzNjXHU2MmRmXHU0ZjYwXHU1''@;'; put 'put ''MzNmXHU4MTdiXHU5MDA2XHU2ZWJhXHU4NTJiXHU2MmM4XHU1ZTc0XHU3OGJlXHU2NGI1XHU2MzdiXHU1ZmY1XHU1YTE4XHU5MTdmXHU5ZTFmXHU1YzNmXHU2MzRmXHU4MDQyXHU1YjdkXHU1NTZlXHU5NTRhXHU5NTRkXHU2ZDg1XHU2MGE4XHU2N2UwXHU3MmRlXHU1MWRkXHU1YjgxXHVmZmZk''@;'; put 'put ''Ii5zcGxpdCgiIiksZz0wO2chPXlbMTk2XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxOTZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTk2XVtnXV09NTAxNzYrZyxfWzUwMTc2K2ddPXlbMTk2XVtnXSk7Zm9yKHlbMTk3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MmU3XHU2Y2RlXHU3MjViXHU2MjZkXHU5NGFlXHU3ZWJkXHU4MTEzXHU2ZDUzXHU1MTljXHU1ZjA0XHU1''@;'; put 'put ''OTc0XHU1MmFhXHU2MDEyXHU1OTczXHU2Njk2XHU4NjUwXHU3NTlmXHU2MzJhXHU2MWU2XHU3Y2VmXHU4YmZhXHU1NGU2XHU2YjI3XHU5ZTI1XHU2YmI0XHU4NWQ1XHU1NDU1XHU1MDc2XHU2Y2E0XHU1NTZhXHU4ZGI0XHU3MjJjXHU1ZTE1XHU2MDE1XHU3NDM2XHU2MmNkXHU2MzkyXHU3MjRj''@;'; put 'put ''XHU1Zjk4XHU2ZTQzXHU2ZDNlXHU2NTAwXHU2ZjU4XHU3NmQ4XHU3OGQwXHU3NmZjXHU3NTU0XHU1MjI0XHU1M2RiXHU0ZTUzXHU1ZTllXHU2NWMxXHU4MDJhXHU4MGQ2XHU2MjliXHU1NDg2XHU1MjI4XHU3MGFlXHU4ODhkXHU4ZGQxXHU2Y2UxXHU1NDc4XHU4MGRhXHU1N2Y5XHU4OGY0XHU4''@;'; put 'put ''ZDU0XHU5NjZhXHU5MTRkXHU0ZjY5XHU2YzliXHU1NWI3XHU3NmM2XHU3ODMwXHU2MmE4XHU3MGY5XHU2ZjhlXHU1ZjZkXHU4NGVjXHU2OGRhXHU3ODdjXHU3YmY3XHU4MWE4XHU2NzBiXHU5ZTRmXHU2MzY3XHU3OGIwXHU1NzZmXHU3ODEyXHU5NzM5XHU2Mjc5XHU2MmFiXHU1Mjg4XHU3NDM1''@;'; put 'put ''XHU2YmQ3XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTk3XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxOTddW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTk3XVtnXV09NTA0MzIrZyxfWzUwNDMyK2ddPXlbMTk3XVtnXSk7Zm9yKHlbMTk4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NTY0XHU4MTNlXHU3NWIyXHU3NmFlXHU1MzM5XHU3NWRlXHU1MGZiXHU1YzQxXHU4''@;'; put 'put ''YjZjXHU3YmM3XHU1MDRmXHU3MjQ3XHU5YTk3XHU5OGQ4XHU2ZjAyXHU3NGUyXHU3OTY4XHU2NDg3XHU3N2E1XHU2MmZjXHU5ODkxXHU4ZDJiXHU1NGMxXHU4MDU4XHU0ZTUyXHU1NzZhXHU4MmY5XHU4NDBkXHU1ZTczXHU1MWVkXHU3NGY2XHU4YmM0XHU1YzRmXHU1NzYxXHU2Y2ZjXHU5ODg3''@;'; put 'put ''XHU1YTQ2XHU3ODM0XHU5YjQ0XHU4ZmViXHU3Yzk1XHU1MjU2XHU2MjUxXHU5NGZhXHU0ZWM2XHU4Mzg2XHU4NDYxXHU4M2U5XHU4NGIyXHU1N2Q0XHU2NzM0XHU1NzAzXHU2NjZlXHU2ZDY2XHU4YzMxXHU2NmRkXHU3MDExXHU2NzFmXHU2YjNhXHU2ODE2XHU2MjFhXHU1OWJiXHU0ZTAzXHU1''@;'; put 'put ''MWM0XHU2ZjA2XHU2N2QyXHU2YzhmXHU1MTc2XHU2OGNiXHU1OTQ3XHU2YjY3XHU3NTY2XHU1ZDBlXHU4MTEwXHU5ZjUwXHU2NWQ3XHU3OTQ4XHU3OTQxXHU5YTkxXHU4ZDc3XHU1YzgyXHU0ZTVlXHU0ZjAxXHU1NDJmXHU1OTUxXHU3ODBjXHU1NjY4XHU2YzE0XHU4ZmM0XHU1ZjAzXHU2Yzdk''@;'; put 'put ''XHU2Y2UzXHU4YmFiXHU2MzkwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTk4XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxOThdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTk4XVtnXV09NTA2ODgrZyxfWzUwNjg4K2ddPXlbMTk4XVtnXSk7Zm9yKHlbMTk5XT0iXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDcwXHU2ZDNkXHU3Mjc1XHU2MjY2XHU5NDhlXHU5NGM1XHU1''@;'; put 'put ''MzQzXHU4ZmMxXHU3YjdlXHU0ZWRmXHU4YzI2XHU0ZTdlXHU5ZWQ0XHU5NGIxXHU5NGIzXHU1MjRkXHU2ZjVjXHU5MDYzXHU2ZDQ1XHU4YzM0XHU1ODExXHU1ZDRjXHU2YjIwXHU2YjQ5XHU2N2FhXHU1NDViXHU4MTU0XHU3ZjhjXHU1ODk5XHU4NTM3XHU1ZjNhXHU2MmEyXHU2YTQ3XHU5NTM5''@;'; put 'put ''XHU2NTcyXHU2MDg0XHU2ODY1XHU3N2E3XHU0ZTU0XHU0ZmE4XHU1ZGU3XHU5Nzk4XHU2NGFjXHU3ZmQ4XHU1Y2VkXHU0ZmNmXHU3YThkXHU1MjA3XHU4MzA0XHU0ZTE0XHU2MDJmXHU3YTgzXHU5NGE2XHU0ZmI1XHU0ZWIyXHU3OWU2XHU3NDM0XHU1MmU0XHU4MmI5XHU2NGQyXHU3OWJkXHU1''@;'; put 'put ''YmRkXHU2YzgxXHU5NzUyXHU4ZjdiXHU2YzIyXHU1MDNlXHU1MzdmXHU2ZTA1XHU2NGNlXHU2Njc0XHU2YzMwXHU2MGM1XHU5ODc3XHU4YmY3XHU1ZTg2XHU3NDNjXHU3YTc3XHU3OWNiXHU0ZTE4XHU5MGIxXHU3NDAzXHU2YzQyXHU1NmRhXHU5MTRiXHU2Y2M1XHU4ZDhiXHU1MzNhXHU4NmM2''@;'; put 'put ''XHU2NmYyXHU4ZWFmXHU1YzQ4XHU5YTcxXHU2ZTIwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMTk5XS5sZW5ndGg7KytnKTY1NTMzIT09eVsxOTldW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMTk5XVtnXV09NTA5NDQrZyxfWzUwOTQ0K2ddPXlbMTk5XVtnXSk7Zm9yKHlbMjAwXT0iXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1M2Q2XHU1YTM2XHU5ZjhiXHU4ZGEzXHU1''@;'; put 'put ''M2JiXHU1NzA4XHU5OGE3XHU2NzQzXHU5MTliXHU2Y2M5XHU1MTY4XHU3NWNhXHU2MmYzXHU3MmFjXHU1MjM4XHU1MjlkXHU3ZjNhXHU3MDk0XHU3NjM4XHU1Mzc0XHU5ZTRhXHU2OWI3XHU3ODZlXHU5NmMwXHU4OGQ5XHU3ZmE0XHU3MTM2XHU3MWMzXHU1MTg5XHU2N2QzXHU3NGU0XHU1OGU0''@;'; put 'put ''XHU2NTE4XHU1NmI3XHU4YmE5XHU5OTc2XHU2MjcwXHU3ZWQ1XHU2MGY5XHU3MGVkXHU1OGVjXHU0ZWMxXHU0ZWJhXHU1ZmNkXHU5N2U3XHU0ZWZiXHU4YmE0XHU1MjAzXHU1OThhXHU3ZWFiXHU2MjU0XHU0ZWNkXHU2NWU1XHU2MjBlXHU4MzM4XHU4NGM5XHU4MzYzXHU4NzhkXHU3MTk0XHU2''@;'; put 'put ''ZWI2XHU1YmI5XHU3ZWQyXHU1MTk3XHU2M2M5XHU2N2Q0XHU4MDg5XHU4MzM5XHU4ODE1XHU1MTEyXHU1YjdhXHU1OTgyXHU4ZmIxXHU0ZTczXHU2YzVkXHU1MTY1XHU4OTI1XHU4ZjZmXHU5NjJlXHU4NTRhXHU3NDVlXHU5NTEwXHU5NWYwXHU2ZGE2XHU4MmU1XHU1ZjMxXHU2NDkyXHU2ZDEy''@;'; put 'put ''XHU4NDI4XHU4MTZlXHU5Y2MzXHU1ODVlXHU4ZDViXHU0ZTA5XHU1M2MxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjAwXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMDBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjAwXVtnXV09NTEyMDArZyxfWzUxMjAwK2ddPXlbMjAwXVtnXSk7Zm9y''@;'; put 'put ''KHlbMjAxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZjFlXHU2NTYzXHU2''@;'; put 'put ''ODUxXHU1NWQzXHU0ZTI3XHU2NDE0XHU5YTlhXHU2MjZiXHU1YWMyXHU3NDVmXHU4MjcyXHU2ZGE5XHU2OGVlXHU1MGU3XHU4MzhlXHU3ODAyXHU2NzQwXHU1MjM5XHU2Yzk5XHU3ZWIxXHU1MGJiXHU1NTY1XHU3MTVlXHU3YjViXHU2NjUyXHU3M2NhXHU4MmViXHU2NzQ5XHU1YzcxXHU1MjIw''@;'; put 'put ''XHU3MTdkXHU4ODZiXHU5NWVhXHU5NjU1XHU2NGM1XHU4ZDYxXHU4MWIzXHU1NTg0XHU2YzU1XHU2MjQ3XHU3ZjJlXHU1ODkyXHU0ZjI0XHU1NTQ2XHU4ZDRmXHU2NjRjXHU0ZTBhXHU1YzFhXHU4OGYzXHU2OGEyXHU2MzRlXHU3YTBkXHU3MGU3XHU4MjhkXHU1MmZhXHU5N2Y2XHU1YzExXHU1''@;'; put 'put ''NGU4XHU5MGI1XHU3ZWNkXHU1OTYyXHU4ZDRhXHU4NmM3XHU4MjBjXHU4MjBkXHU4ZDY2XHU2NDQ0XHU1YzA0XHU2MTUxXHU2ZDg5XHU3OTNlXHU4YmJlXHU3ODM3XHU3NTMzXHU1NDdiXHU0ZjM4XHU4ZWFiXHU2ZGYxXHU1YTIwXHU3ZWM1XHU3OTVlXHU2Yzg4XHU1YmExXHU1YTc2XHU3NTFh''@;'; put 'put ''XHU4MGJlXHU2MTRlXHU2ZTE3XHU1OGYwXHU3NTFmXHU3NTI1XHU3MjcyXHU1MzQ3XHU3ZWYzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjAxXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMDFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjAxXVtnXV09NTE0NTYrZyxfWzUxNDU2K2ddPXlb''@;'; put 'put ''MjAxXVtnXSk7Zm9yKHlbMjAyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3''@;'; put 'put ''NzAxXHU3NmRiXHU1MjY5XHU4MGRjXHU1NzIzXHU1ZTA4XHU1OTMxXHU3MmVlXHU2NWJkXHU2ZTdmXHU4YmQ3XHU1YzM4XHU4NjcxXHU1MzQxXHU3N2YzXHU2MmZlXHU2NWY2XHU0ZWMwXHU5OGRmXHU4NjgwXHU1YjllXHU4YmM2XHU1M2YyXHU3N2UyXHU0ZjdmXHU1YzRlXHU5YTc2XHU1OWNi''@;'; put 'put ''XHU1ZjBmXHU3OTNhXHU1OGViXHU0ZTE2XHU2N2ZmXHU0ZThiXHU2MmVkXHU4YTkzXHU5MDFkXHU1MmJmXHU2NjJmXHU1NWRjXHU1NjZjXHU5MDAyXHU0ZWQ1XHU0ZjhkXHU5MWNhXHU5OTcwXHU2YzBmXHU1ZTAyXHU2MDQzXHU1YmE0XHU4OWM2XHU4YmQ1XHU2NTM2XHU2MjRiXHU5OTk2XHU1''@;'; put 'put ''Yjg4XHU1YmZmXHU2Mzg4XHU1NTJlXHU1M2Q3XHU3NjI2XHU1MTdkXHU4NTJjXHU2N2EyXHU2OGIzXHU2YjhhXHU2MjkyXHU4ZjkzXHU1M2Q0XHU4MjEyXHU2ZGQxXHU3NThmXHU0ZTY2XHU4ZDRlXHU1YjcwXHU3MTlmXHU4NWFmXHU2NjkxXHU2NmQ5XHU3ZjcyXHU4NzAwXHU5ZWNkXHU5ZjIw''@;'; put 'put ''XHU1YzVlXHU2NzJmXHU4ZmYwXHU2ODExXHU2NzVmXHU2MjBkXHU3YWQ2XHU1ODg1XHU1ZWI2XHU2NTcwXHU2ZjMxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjAyXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMDJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjAyXVtnXV09NTE3MTIrZyxf''@;'; put 'put ''WzUxNzEyK2ddPXlbMjAyXVtnXSk7Zm9yKHlbMjAzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHU2MDU1XHU1MjM3XHU4MDBkXHU2NDU0XHU4ODcwXHU3NTI5XHU1ZTA1XHU2ODEzXHU2MmY0XHU5NzFjXHU1M2NjXHU3MjNkXHU4YzAxXHU2YzM0XHU3NzYxXHU3YTBlXHU1NDJlXHU3N2FjXHU5ODdhXHU4MjFjXHU4YmY0XHU3ODU1XHU2NzE0XHU3MGMxXHU2NWFmXHU2NDk1''@;'; put 'put ''XHU1NjM2XHU2MDFkXHU3OWMxXHU1M2Y4XHU0ZTFkXHU2YjdiXHU4MDg2XHU1YmZhXHU1NWUzXHU1NmRiXHU0ZjNhXHU0ZjNjXHU5OTcyXHU1ZGYzXHU2NzdlXHU4MDM4XHU2MDAyXHU5ODgyXHU5MDAxXHU1YjhiXHU4YmJjXHU4YmY1XHU2NDFjXHU4MjU4XHU2NGRlXHU1NWZkXHU4MmNmXHU5''@;'; put 'put ''MTY1XHU0ZmQ3XHU3ZDIwXHU5MDFmXHU3YzlmXHU1MGYzXHU1ODUxXHU2ZWFmXHU1YmJmXHU4YmM5XHU4MDgzXHU5MTc4XHU4NDljXHU3Yjk3XHU4NjdkXHU5NjhiXHU5NjhmXHU3ZWU1XHU5YWQzXHU3ODhlXHU1YzgxXHU3YTU3XHU5MDQyXHU5NmE3XHU3OTVmXHU1YjU5XHU2MzVmXHU3YjBi''@;'; put 'put ''XHU4NGQxXHU2OGFkXHU1NTA2XHU3ZjI5XHU3NDEwXHU3ZDIyXHU5NTAxXHU2MjQwXHU1ODRjXHU0ZWQ2XHU1YjgzXHU1OTc5XHU1ODU0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjAzXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMDNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjAzXVtn''@;'; put 'put ''XV09NTE5NjgrZyxfWzUxOTY4K2ddPXlbMjAzXVtnXSk7Zm9yKHlbMjA0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MzZkXHU2MzFlXHU4ZTRiXHU4ZTBmXHU4MGNlXHU4MmQ0XHU2MmFjXHU1M2YwXHU2Y2YwXHU5MTVlXHU1OTJhXHU2MDAxXHU2YzcwXHU1NzRkXHU2NDRhXHU4ZDJhXHU3NjJiXHU2ZWU5XHU1NzViXHU2YTgwXHU3NWYwXHU2ZjZkXHU4YzJkXHU4YzA4''@;'; put 'put ''XHU1NzY2XHU2YmVmXHU4ODkyXHU3OGIzXHU2M2EyXHU1M2Y5XHU3MGFkXHU2YzY0XHU1ODU4XHU2NDJhXHU1ODAyXHU2OGUwXHU4MTliXHU1NTEwXHU3Y2Q2XHU1MDE4XHU4ZWJhXHU2ZGNjXHU4ZDlmXHU3MGViXHU2MzhmXHU2ZDliXHU2ZWQ0XHU3ZWU2XHU4NDA0XHU2ODQzXHU5MDAzXHU2''@;'; put 'put ''ZGQ4XHU5Njc2XHU4YmE4XHU1OTU3XHU3Mjc5XHU4NWU0XHU4MTdlXHU3NWJjXHU4YThhXHU2OGFmXHU1MjU0XHU4ZTIyXHU5NTExXHU2M2QwXHU5ODk4XHU4ZTQ0XHU1NTdjXHU0ZjUzXHU2NmZmXHU1NjhmXHU2MGQ1XHU2ZDk1XHU1MjQzXHU1YzQ5XHU1OTI5XHU2ZGZiXHU1ODZiXHU3NTMw''@;'; put 'put ''XHU3NTFjXHU2MDZjXHU4MjE0XHU4MTQ2XHU2MzExXHU2NzYxXHU4ZmUyXHU3NzNhXHU4ZGYzXHU4ZDM0XHU5NGMxXHU1ZTE2XHU1Mzg1XHU1NDJjXHU3MGMzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjA0XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMDRdW2ddLmNoYXJDb2RlQXQoMCkm''@;'; put 'put ''JihJW3lbMjA0XVtnXV09NTIyMjQrZyxfWzUyMjI0K2ddPXlbMjA0XVtnXSk7Zm9yKHlbMjA1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2YzQwXHU1ZWY3XHU1MDVjXHU0ZWFkXHU1ZWFkXHU2MzNhXHU4MjQ3XHU5MDFhXHU2ODUwXHU5MTZlXHU3N2IzXHU1NDBjXHU5NGRjXHU1ZjY0XHU3YWU1XHU2ODc2XHU2MzQ1XHU3YjUyXHU3ZWRmXHU3NWRiXHU1MDc3XHU2Mjk1''@;'; put 'put ''XHU1OTM0XHU5MDBmXHU1MWY4XHU3OWMzXHU3YTgxXHU1NmZlXHU1ZjkyXHU5MDE0XHU2ZDgyXHU1YzYwXHU1NzFmXHU1NDEwXHU1MTU0XHU2ZTRkXHU1NmUyXHU2M2E4XHU5ODkzXHU4MTdmXHU4NzE1XHU4OTJhXHU5MDAwXHU1NDFlXHU1YzZmXHU4MWMwXHU2MmQ2XHU2MjU4XHU4MTMxXHU5''@;'; put 'put ''ZTM1XHU5NjQwXHU5YTZlXHU5YTdjXHU2OTJkXHU1OWE1XHU2MmQzXHU1NTNlXHU2MzE2XHU1NGM3XHU4NmQ5XHU2ZDNjXHU1YTAzXHU3NGU2XHU4ODljXHU2YjZhXHU1OTE2XHU4YzRjXHU1ZjJmXHU2ZTdlXHU3M2E5XHU5ODdkXHU0ZTM4XHU3MGY3XHU1YjhjXHU3ODk3XHU2MzNkXHU2NjVh''@;'; put 'put ''XHU3Njk2XHU2MGNiXHU1YjliXHU1YTQ5XHU0ZTA3XHU4MTU1XHU2YzZhXHU3MzhiXHU0ZWExXHU2Nzg5XHU3ZjUxXHU1ZjgwXHU2NWZhXHU2NzFiXHU1ZmQ4XHU1OTg0XHU1YTAxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjA1XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMDVdW2ddLmNo''@;'; put 'put ''YXJDb2RlQXQoMCkmJihJW3lbMjA1XVtnXV09NTI0ODArZyxfWzUyNDgwK2ddPXlbMjA1XVtnXSk7Zm9yKHlbMjA2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZGNkXHU1ZmFlXHU1MzcxXHU5N2U2XHU4ZmRkXHU2ODQ1XHU1NmY0XHU1NTJmXHU2MGRmXHU0ZTNhXHU2ZjRkXHU3ZWY0XHU4MmM3XHU4NDBlXHU1OWQ0XHU0ZjFmXHU0ZjJhXHU1YzNlXHU3ZWFjXHU2NzJh''@;'; put 'put ''XHU4NTFhXHU1NDczXHU3NTRmXHU4MGMzXHU1NTgyXHU5YjRmXHU0ZjRkXHU2ZTJkXHU4YzEzXHU1YzA5XHU2MTcwXHU1MzZiXHU3NjFmXHU2ZTI5XHU4NjhhXHU2NTg3XHU5NWZiXHU3ZWI5XHU1NDNiXHU3YTMzXHU3ZDBhXHU5NWVlXHU1NWUxXHU3ZmMxXHU3NGVlXHU2MzFkXHU4NzE3XHU2''@;'; put 'put ''ZGExXHU3YTlkXHU2MjExXHU2NWExXHU1MzY3XHU2M2UxXHU2YzgzXHU1ZGViXHU1NDVjXHU5NGE4XHU0ZTRjXHU2YzYxXHU4YmVjXHU1YzRiXHU2NWUwXHU4MjljXHU2OGE3XHU1NDNlXHU1NDM0XHU2YmNiXHU2YjY2XHU0ZTk0XHU2MzQyXHU1MzQ4XHU4MjFlXHU0ZjBkXHU0ZmFlXHU1NzVl''@;'; put 'put ''XHU2MjBhXHU5NmZlXHU2NjY0XHU3MjY5XHU1MmZmXHU1MmExXHU2MDlmXHU4YmVmXHU2NjE0XHU3MTk5XHU2NzkwXHU4OTdmXHU3ODUyXHU3N2ZkXHU2NjcwXHU1NjNiXHU1NDM4XHU5NTIxXHU3MjdhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjA2XS5sZW5ndGg7KytnKTY1NTMzIT09''@;'; put 'put ''eVsyMDZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjA2XVtnXV09NTI3MzYrZyxfWzUyNzM2K2ddPXlbMjA2XVtnXSk7Zm9yKHlbMjA3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YTAwXHU2MDZmXHU1ZTBjXHU2MDg5XHU4MTlkXHU1OTE1XHU2MGRjXHU3MTg0XHU3MGVmXHU2ZWFhXHU2YzUwXHU3MjgwXHU2YTg0XHU4OGFkXHU1ZTJkXHU0ZTYwXHU1YWIzXHU1NTlj''@;'; put 'put ''XHU5NGUzXHU2ZDE3XHU3Y2ZiXHU5Njk5XHU2MjBmXHU3ZWM2XHU3NzhlXHU4NjdlXHU1MzIzXHU5NzFlXHU4Zjk2XHU2Njg3XHU1Y2UxXHU0ZmEwXHU3MmVkXHU0ZTBiXHU1M2E2XHU1OTBmXHU1NDEzXHU2MzgwXHU5NTI4XHU1MTQ4XHU0ZWQ5XHU5YzljXHU3ZWE0XHU1NGI4XHU4ZDI0XHU4''@;'; put 'put ''ODU0XHU4MjM3XHU5NWYyXHU2ZDhlXHU1ZjI2XHU1YWNjXHU2NjNlXHU5NjY5XHU3M2IwXHU3MzJlXHU1M2JmXHU4MTdhXHU5OTg1XHU3ZmExXHU1YmFhXHU5Njc3XHU5NjUwXHU3ZWJmXHU3NmY4XHU1M2EyXHU5NTc2XHU5OTk5XHU3YmIxXHU4OTQ0XHU2ZTU4XHU0ZTYxXHU3ZmQ0XHU3OTY1''@;'; put 'put ''XHU4YmU2XHU2MGYzXHU1NGNkXHU0ZWFiXHU5ODc5XHU1ZGY3XHU2YTYxXHU1MGNmXHU1NDExXHU4YzYxXHU4NDI3XHU3ODVkXHU5NzA0XHU1MjRhXHU1NGVlXHU1NmEzXHU5NTAwXHU2ZDg4XHU1YmI1XHU2ZGM2XHU2NjUzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjA3XS5sZW5ndGg7''@;'; put 'put ''KytnKTY1NTMzIT09eVsyMDddW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjA3XVtnXV09NTI5OTIrZyxfWzUyOTkyK2ddPXlbMjA3XVtnXSk7Zm9yKHlbMjA4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1YzBmXHU1YjVkXHU2ODIxXHU4MDk2XHU1NTc4XHU3YjExXHU2NTQ4XHU2OTU0XHU0ZTliXHU2YjQ3XHU4NzRlXHU5NzhiXHU1MzRmXHU2MzFmXHU2NDNhXHU5MGFh''@;'; put 'put ''XHU2NTljXHU4MGMxXHU4YzEwXHU1MTk5XHU2OGIwXHU1Mzc4XHU4N2Y5XHU2MWM4XHU2Y2M0XHU2Y2ZiXHU4YzIyXHU1YzUxXHU4NWFhXHU4MmFmXHU5NTBjXHU2YjIzXHU4ZjliXHU2NWIwXHU1ZmZiXHU1ZmMzXHU0ZmUxXHU4ODQ1XHU2NjFmXHU4MTY1XHU3MzI5XHU2MGZhXHU1MTc0XHU1''@;'; put 'put ''MjExXHU1NzhiXHU1ZjYyXHU5MGEyXHU4ODRjXHU5MTkyXHU1ZTc4XHU2NzRmXHU2MDI3XHU1OWQzXHU1MTQ0XHU1MWY2XHU4MGY4XHU1MzA4XHU2Yzc5XHU5NmM0XHU3MThhXHU0ZjExXHU0ZmVlXHU3ZjllXHU2NzNkXHU1NWM1XHU5NTA4XHU3OWMwXHU4ODk2XHU3ZWUzXHU1ODlmXHU2MjBj''@;'; put 'put ''XHU5NzAwXHU4NjVhXHU1NjE4XHU5ODdiXHU1ZjkwXHU4YmI4XHU4NGM0XHU5MTU3XHU1M2Q5XHU2NWVkXHU1ZThmXHU3NTVjXHU2MDY0XHU3ZDZlXHU1YTdmXHU3ZWVhXHU3ZWVkXHU4ZjY5XHU1NWE3XHU1YmEzXHU2MGFjXHU2NWNiXHU3Mzg0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlb''@;'; put 'put ''MjA4XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMDhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjA4XVtnXV09NTMyNDgrZyxfWzUzMjQ4K2ddPXlbMjA4XVtnXSk7Zm9yKHlbMjA5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MDA5XHU3NjYzXHU3NzI5XHU3ZWRhXHU5Nzc0XHU4NTliXHU1YjY2XHU3YTc0XHU5NmVhXHU4ODQwXHU1MmNiXHU3MThmXHU1ZmFhXHU2NWVj''@;'; put 'put ''XHU4YmUyXHU1YmZiXHU5YTZmXHU1ZGUxXHU2Yjg5XHU2YzViXHU4YmFkXHU4YmFmXHU5MDBhXHU4ZmM1XHU1MzhiXHU2MmJjXHU5ZTI2XHU5ZTJkXHU1NDQwXHU0ZTJiXHU4MmJkXHU3MjU5XHU4NjljXHU1ZDE2XHU4ODU5XHU2ZGFmXHU5NmM1XHU1NGQxXHU0ZTlhXHU4YmI2XHU3MTA5XHU1''@;'; put 'put ''NGJkXHU5NjA5XHU3MGRmXHU2ZGY5XHU3NmQwXHU0ZTI1XHU3ODE0XHU4NzEyXHU1Y2E5XHU1ZWY2XHU4YTAwXHU5ODljXHU5NjBlXHU3MDhlXHU2Y2JmXHU1OTQ0XHU2M2E5XHU3NzNjXHU4ODRkXHU2ZjE0XHU4MjczXHU1ODMwXHU3MWQ1XHU1MzhjXHU3ODFhXHU5NmMxXHU1NTAxXHU1ZjY2''@;'; put 'put ''XHU3MTMwXHU1YmI0XHU4YzFhXHU5YThjXHU2YjgzXHU1OTJlXHU5ZTJmXHU3OWU3XHU2NzY4XHU2MjZjXHU0ZjZmXHU3NWExXHU3ZjhhXHU2ZDBiXHU5NjMzXHU2YzI3XHU0ZWYwXHU3NWQyXHU1MTdiXHU2ODM3XHU2ZjNlXHU5MDgwXHU4MTcwXHU1OTk2XHU3NDc2XHVmZmZkIi5zcGxpdCgi''@;'; put 'put ''IiksZz0wO2chPXlbMjA5XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMDldW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjA5XVtnXV09NTM1MDQrZyxfWzUzNTA0K2ddPXlbMjA5XVtnXSk7Zm9yKHlbMjEwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NDQ3XHU1YzI3XHU5MDY1XHU3YTkxXHU4YzIzXHU1OWRhXHU1NGFjXHU4MjAwXHU4MzZmXHU4OTgxXHU4MDAwXHU2OTMw''@;'; put 'put ''XHU1NjRlXHU4MDM2XHU3MjM3XHU5MWNlXHU1MWI2XHU0ZTVmXHU5ODc1XHU2Mzk2XHU0ZTFhXHU1M2Y2XHU2NmYzXHU4MTRiXHU1OTFjXHU2ZGIyXHU0ZTAwXHU1OGY5XHU1MzNiXHU2M2Q2XHU5NGYxXHU0ZjlkXHU0ZjBhXHU4ODYzXHU5ODkwXHU1OTM3XHU5MDU3XHU3OWZiXHU0ZWVhXHU4''@;'; put 'put ''MGYwXHU3NTkxXHU2YzgyXHU1YjljXHU1OWU4XHU1ZjVkXHU2OTA1XHU4NjgxXHU1MDFhXHU1ZGYyXHU0ZTU5XHU3N2UzXHU0ZWU1XHU4MjdhXHU2MjkxXHU2NjEzXHU5MDkxXHU1Yzc5XHU0ZWJmXHU1Zjc5XHU4MWM2XHU5MDM4XHU4MDg0XHU3NWFiXHU0ZWE2XHU4OGQ0XHU2MTBmXHU2YmM1''@;'; put 'put ''XHU1ZmM2XHU0ZTQ5XHU3NmNhXHU2ZWEyXHU4YmUzXHU4YmFlXHU4YzBhXHU4YmQxXHU1ZjAyXHU3ZmZjXHU3ZmNjXHU3ZWNlXHU4MzM1XHU4MzZiXHU1NmUwXHU2YmI3XHU5N2YzXHU5NjM0XHU1OWZiXHU1NDFmXHU5NGY2XHU2ZGViXHU1YmM1XHU5OTZlXHU1YzM5XHU1ZjE1XHU5NjkwXHVm''@;'; put 'put ''ZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjEwXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMTBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjEwXVtnXV09NTM3NjArZyxfWzUzNzYwK2ddPXlbMjEwXVtnXSk7Zm9yKHlbMjExXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MzcwXHU4MmYxXHU2YTMxXHU1YTc0XHU5ZTcwXHU1ZTk0XHU3ZjI4XHU4M2I5XHU4NDI0XHU4NDI1''@;'; put 'put ''XHU4MzY3XHU4NzQ3XHU4ZmNlXHU4ZDYyXHU3NmM4XHU1ZjcxXHU5ODk2XHU3ODZjXHU2NjIwXHU1NGRmXHU2MmU1XHU0ZjYzXHU4MWMzXHU3NWM4XHU1ZWI4XHU5NmNkXHU4ZTBhXHU4NmY5XHU1NDhmXHU2Y2YzXHU2ZDhjXHU2YzM4XHU2MDdmXHU1MmM3XHU3NTI4XHU1ZTdkXHU0ZjE4XHU2''@;'; put 'put ''MGEwXHU1ZmU3XHU1YzI0XHU3NTMxXHU5MGFlXHU5NGMwXHU3MmI5XHU2Y2I5XHU2ZTM4XHU5MTQ5XHU2NzA5XHU1M2NiXHU1M2YzXHU0ZjUxXHU5MWM5XHU4YmYxXHU1M2M4XHU1ZTdjXHU4ZmMyXHU2ZGU0XHU0ZThlXHU3NmMyXHU2OTg2XHU4NjVlXHU2MTFhXHU4MjA2XHU0ZjU5XHU0ZmRl''@;'; put 'put ''XHU5MDNlXHU5YzdjXHU2MTA5XHU2ZTFkXHU2ZTE0XHU5Njg1XHU0ZTg4XHU1YTMxXHU5NmU4XHU0ZTBlXHU1YzdmXHU3OWI5XHU1Yjg3XHU4YmVkXHU3ZmJkXHU3Mzg5XHU1N2RmXHU4MjhiXHU5MGMxXHU1NDAxXHU5MDQ3XHU1NWJiXHU1Y2VhXHU1ZmExXHU2MTA4XHU2YjMyXHU3MmYxXHU4''@;'; put 'put ''MGIyXHU4YTg5XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjExXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMTFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjExXVtnXV09NTQwMTYrZyxfWzU0MDE2K2ddPXlbMjExXVtnXSk7Zm9yKHlbMjEyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDc0XHU1YmQzXHU4OGQ1XHU5ODg0XHU4YzZiXHU5YTZkXHU5ZTMzXHU2ZTBh''@;'; put 'put ''XHU1MWE0XHU1MTQzXHU1N2EzXHU4ODgxXHU1MzlmXHU2M2Y0XHU4Zjk1XHU1NmVkXHU1NDU4XHU1NzA2XHU3MzNmXHU2ZTkwXHU3ZjE4XHU4ZmRjXHU4MmQxXHU2MTNmXHU2MDI4XHU5NjYyXHU2NmYwXHU3ZWE2XHU4ZDhhXHU4ZGMzXHU5NGE1XHU1Y2IzXHU3Y2E0XHU2NzA4XHU2MGE2XHU5''@;'; put 'put ''NjA1XHU4MDE4XHU0ZTkxXHU5MGU3XHU1MzAwXHU5NjY4XHU1MTQxXHU4ZmQwXHU4NTc0XHU5MTVkXHU2NjU1XHU5N2Y1XHU1YjU1XHU1MzFkXHU3ODM4XHU2NzQyXHU2ODNkXHU1NGM5XHU3MDdlXHU1YmIwXHU4ZjdkXHU1MThkXHU1NzI4XHU1NGIxXHU2NTEyXHU2NjgyXHU4ZDVlXHU4ZDQz''@;'; put 'put ''XHU4MTBmXHU4NDZjXHU5MDZkXHU3Y2RmXHU1MWZmXHU4NWZiXHU2N2EzXHU2NWU5XHU2ZmExXHU4NmE0XHU4ZTgxXHU1NjZhXHU5MDIwXHU3NjgyXHU3MDc2XHU3MWU1XHU4ZDIzXHU2MmU5XHU1MjE5XHU2Y2ZkXHU4ZDNjXHU2MDBlXHU1ODllXHU2MThlXHU2NmZlXHU4ZDYwXHU2MjRlXHU1''@;'; put 'put ''NWIzXHU2ZTIzXHU2NzJkXHU4ZjY3XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjEyXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMTJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjEyXVtnXV09NTQyNzIrZyxfWzU0MjcyK2ddPXlbMjEyXVtnXSk7Zm9yKHlbMjEzXT0iXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NGUxXHU5NWY4XHU3NzI4XHU2ODA1XHU2OWE4XHU1NDhi''@;'; put 'put ''XHU0ZTRkXHU3MGI4XHU4YmM4XHU2NDU4XHU2NThiXHU1Yjg1XHU3YTg0XHU1MDNhXHU1YmU4XHU3N2JiXHU2YmUxXHU4YTc5XHU3Yzk4XHU2Y2JlXHU3NmNmXHU2NWE5XHU4Zjk3XHU1ZDJkXHU1YzU1XHU4NjM4XHU2ODA4XHU1MzYwXHU2MjE4XHU3YWQ5XHU2ZTViXHU3ZWZkXHU2YTFmXHU3''@;'; put 'put ''YWUwXHU1ZjcwXHU2ZjMzXHU1ZjIwXHU2MzhjXHU2ZGE4XHU2NzU2XHU0ZTA4XHU1ZTEwXHU4ZDI2XHU0ZWQ3XHU4MGMwXHU3NjM0XHU5NjljXHU2MmRiXHU2NjJkXHU2MjdlXHU2Y2JjXHU4ZDc1XHU3MTY3XHU3ZjY5XHU1MTQ2XHU4MDg3XHU1M2VjXHU5MDZlXHU2Mjk4XHU1NGYyXHU4NmYw''@;'; put 'put ''XHU4Zjk5XHU4MDA1XHU5NTE3XHU4NTE3XHU4ZmQ5XHU2ZDU5XHU3M2NkXHU2NTlmXHU3NzFmXHU3NTA0XHU3ODI3XHU4MWZiXHU4ZDFlXHU5NDg4XHU0ZmE2XHU2Nzk1XHU3NWI5XHU4YmNhXHU5NzA3XHU2MzJmXHU5NTQ3XHU5NjM1XHU4NGI4XHU2MzIzXHU3NzQxXHU1ZjgxXHU3MmYwXHU0''@;'; put 'put ''ZTg5XHU2MDE0XHU2NTc0XHU2MmVmXHU2YjYzXHU2NTNmXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjEzXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMTNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjEzXVtnXV09NTQ1MjgrZyxfWzU0NTI4K2ddPXlbMjEzXVtnXSk7Zm9yKHlbMjE0XT0i''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZTI3XHU3NWM3XHU5MGQxXHU4YmMx''@;'; put 'put ''XHU4MjlkXHU2NzlkXHU2NTJmXHU1NDMxXHU4NzE4XHU3N2U1XHU4MGEyXHU4MTAyXHU2YzQxXHU0ZTRiXHU3ZWM3XHU4MDRjXHU3NmY0XHU2OTBkXHU2Yjk2XHU2MjY3XHU1MDNjXHU0Zjg0XHU1NzQwXHU2MzA3XHU2YjYyXHU4ZGJlXHU1M2VhXHU2NWU4XHU3ZWI4XHU1ZmQ3XHU2MzFhXHU2''@;'; put 'put ''M2I3XHU4MWYzXHU4MWY0XHU3ZjZlXHU1ZTFjXHU1Y2Q5XHU1MjM2XHU2NjdhXHU3OWU5XHU3YTFhXHU4ZDI4XHU3MDk5XHU3NWQ0XHU2ZWRlXHU2Y2JiXHU3YTkyXHU0ZTJkXHU3NmM1XHU1ZmUwXHU5NDlmXHU4ODc3XHU3ZWM4XHU3OWNkXHU4MGJmXHU5MWNkXHU0ZWYyXHU0ZjE3XHU4MjFm''@;'; put 'put ''XHU1NDY4XHU1ZGRlXHU2ZDMyXHU4YmNjXHU3Y2E1XHU4Zjc0XHU4MDk4XHU1ZTFhXHU1NDkyXHU3NmIxXHU1Yjk5XHU2NjNjXHU5YWE0XHU3M2UwXHU2ODJhXHU4NmRiXHU2NzMxXHU3MzJhXHU4YmY4XHU4YmRiXHU5MDEwXHU3YWY5XHU3MGRiXHU3MTZlXHU2MmM0XHU3N2E5XHU1NjMxXHU0''@;'; put 'put ''ZTNiXHU4NDU3XHU2N2YxXHU1MmE5XHU4NmMwXHU4ZDJlXHU5NGY4XHU3YjUxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjE0XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMTRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjE0XVtnXV09NTQ3ODQrZyxfWzU0Nzg0K2ddPXlbMjE0XVtnXSk7''@;'; put 'put ''Zm9yKHlbMjE1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU0ZjRmXHU2Y2U4''@;'; put 'put ''XHU3OTVkXHU5YTdiXHU2MjkzXHU3MjJhXHU2MmZkXHU0ZTEzXHU3ODE2XHU4ZjZjXHU2NGIwXHU4ZDVhXHU3YmM2XHU2ODY5XHU1ZTg0XHU4OGM1XHU1OTg2XHU2NDllXHU1OGVlXHU3MmI2XHU2OTBlXHU5NTI1XHU4ZmZkXHU4ZDU4XHU1NzYwXHU3ZjAwXHU4YzA2XHU1MWM2XHU2MzQ5XHU2''@;'; put 'put ''MmQ5XHU1MzUzXHU2ODRjXHU3NDIyXHU4MzAxXHU5MTRjXHU1NTQ0XHU3NzQwXHU3MDdjXHU2ZDRhXHU1MTc5XHU1NGE4XHU4ZDQ0XHU1OWZmXHU2ZWNiXHU2ZGM0XHU1YjVjXHU3ZDJiXHU0ZWQ0XHU3YzdkXHU2ZWQzXHU1YjUwXHU4MWVhXHU2ZTBkXHU1YjU3XHU5YjAzXHU2OGQ1XHU4ZTJh''@;'; put 'put ''XHU1Yjk3XHU3ZWZjXHU2MDNiXHU3ZWI1XHU5MGI5XHU4ZDcwXHU1OTRmXHU2M2NkXHU3OWRmXHU4ZGIzXHU1MzUyXHU2NWNmXHU3OTU2XHU4YmM1XHU5NjNiXHU3ZWM0XHU5NGJiXHU3ZTgyXHU1NjM0XHU5MTg5XHU2NzAwXHU3ZjZhXHU1YzBhXHU5MDc1XHU2NjI4XHU1ZGU2XHU0ZjUwXHU2''@;'; put 'put ''N2RlXHU1MDVhXHU0ZjVjXHU1NzUwXHU1ZWE3XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjE1XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMTVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjE1XVtnXV09NTUwNDArZyxfWzU1MDQwK2dd''@;'; put 'put ''PXlbMjE1XVtnXSk7Zm9yKHlbMjE2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHU0ZThkXHU0ZTBjXHU1MTQwXHU0ZTEwXHU1ZWZmXHU1MzQ1XHU0ZTE1XHU0ZTk4XHU0ZTFlXHU5YjMyXHU1YjZjXHU1NjY5XHU0ZTI4XHU3OWJhXHU0ZTNmXHU1MzE1XHU0ZTQ3XHU1OTJkXHU3MjNiXHU1MzZlXHU2YzEwXHU1NmRmXHU4MGU0XHU5OTk3XHU2YmQzXHU3NzdlXHU5ZjE3XHU0''@;'; put 'put ''ZTM2XHU0ZTlmXHU5ZjEwXHU0ZTVjXHU0ZTY5XHU0ZTkzXHU4Mjg4XHU1YjViXHU1NTZjXHU1NjBmXHU0ZWM0XHU1MzhkXHU1MzlkXHU1M2EzXHU1M2E1XHU1M2FlXHU5NzY1XHU4ZDVkXHU1MzFhXHU1M2Y1XHU1MzI2XHU1MzJlXHU1MzNlXHU4ZDVjXHU1MzY2XHU1MzYzXHU1MjAyXHU1MjA4''@;'; put 'put ''XHU1MjBlXHU1MjJkXHU1MjMzXHU1MjNmXHU1MjQwXHU1MjRjXHU1MjVlXHU1MjYxXHU1MjVjXHU4NGFmXHU1MjdkXHU1MjgyXHU1MjgxXHU1MjkwXHU1MjkzXHU1MTgyXHU3ZjU0XHU0ZWJiXHU0ZWMzXHU0ZWM5XHU0ZWMyXHU0ZWU4XHU0ZWUxXHU0ZWViXHU0ZWRlXHU0ZjFiXHU0ZWYzXHU0''@;'; put 'put ''ZjIyXHU0ZjY0XHU0ZWY1XHU0ZjI1XHU0ZjI3XHU0ZjA5XHU0ZjJiXHU0ZjVlXHU0ZjY3XHU2NTM4XHU0ZjVhXHU0ZjVkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjE2XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMTZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjE2XVtnXV09NTUyOTYr''@;'; put 'put ''ZyxfWzU1Mjk2K2ddPXlbMjE2XVtnXSk7Zm9yKHlbMjE3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHU0ZjVmXHU0ZjU3XHU0ZjMyXHU0ZjNkXHU0Zjc2XHU0Zjc0XHU0ZjkxXHU0Zjg5XHU0ZjgzXHU0ZjhmXHU0ZjdlXHU0ZjdiXHU0ZmFhXHU0ZjdjXHU0ZmFjXHU0Zjk0XHU0ZmU2XHU0ZmU4XHU0ZmVhXHU0ZmM1XHU0ZmRhXHU0ZmUzXHU0ZmRjXHU0ZmQxXHU0ZmRmXHU0''@;'; put 'put ''ZmY4XHU1MDI5XHU1MDRjXHU0ZmYzXHU1MDJjXHU1MDBmXHU1MDJlXHU1MDJkXHU0ZmZlXHU1MDFjXHU1MDBjXHU1MDI1XHU1MDI4XHU1MDdlXHU1MDQzXHU1MDU1XHU1MDQ4XHU1MDRlXHU1MDZjXHU1MDdiXHU1MGE1XHU1MGE3XHU1MGE5XHU1MGJhXHU1MGQ2XHU1MTA2XHU1MGVkXHU1MGVj''@;'; put 'put ''XHU1MGU2XHU1MGVlXHU1MTA3XHU1MTBiXHU0ZWRkXHU2YzNkXHU0ZjU4XHU0ZjY1XHU0ZmNlXHU5ZmEwXHU2YzQ2XHU3Yzc0XHU1MTZlXHU1ZGZkXHU5ZWM5XHU5OTk4XHU1MTgxXHU1OTE0XHU1MmY5XHU1MzBkXHU4YTA3XHU1MzEwXHU1MWViXHU1OTE5XHU1MTU1XHU0ZWEwXHU1MTU2XHU0''@;'; put 'put ''ZWIzXHU4ODZlXHU4OGE0XHU0ZWI1XHU4MTE0XHU4OGQyXHU3OTgwXHU1YjM0XHU4ODAzXHU3ZmI4XHU1MWFiXHU1MWIxXHU1MWJkXHU1MWJjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjE3XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMTddW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjE3''@;'; put 'put ''XVtnXV09NTU1NTIrZyxfWzU1NTUyK2ddPXlbMjE3XVtnXSk7Zm9yKHlbMjE4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1MWM3XHU1MTk2XHU1MWEyXHU1MWE1XHU4YmEwXHU4YmE2XHU4YmE3XHU4YmFhXHU4YmI0XHU4YmI1XHU4YmI3XHU4YmMyXHU4YmMzXHU4YmNiXHU4YmNmXHU4YmNlXHU4YmQyXHU4YmQzXHU4YmQ0XHU4YmQ2XHU4YmQ4XHU4YmQ5XHU4YmRjXHU4''@;'; put 'put ''YmRmXHU4YmUwXHU4YmU0XHU4YmU4XHU4YmU5XHU4YmVlXHU4YmYwXHU4YmYzXHU4YmY2XHU4YmY5XHU4YmZjXHU4YmZmXHU4YzAwXHU4YzAyXHU4YzA0XHU4YzA3XHU4YzBjXHU4YzBmXHU4YzExXHU4YzEyXHU4YzE0XHU4YzE1XHU4YzE2XHU4YzE5XHU4YzFiXHU4YzE4XHU4YzFkXHU4YzFm''@;'; put 'put ''XHU4YzIwXHU4YzIxXHU4YzI1XHU4YzI3XHU4YzJhXHU4YzJiXHU4YzJlXHU4YzJmXHU4YzMyXHU4YzMzXHU4YzM1XHU4YzM2XHU1MzY5XHU1MzdhXHU5NjFkXHU5NjIyXHU5NjIxXHU5NjMxXHU5NjJhXHU5NjNkXHU5NjNjXHU5NjQyXHU5NjQ5XHU5NjU0XHU5NjVmXHU5NjY3XHU5NjZjXHU5''@;'; put 'put ''NjcyXHU5Njc0XHU5Njg4XHU5NjhkXHU5Njk3XHU5NmIwXHU5MDk3XHU5MDliXHU5MDlkXHU5MDk5XHU5MGFjXHU5MGExXHU5MGI0XHU5MGIzXHU5MGI2XHU5MGJhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjE4XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMThdW2ddLmNoYXJDb2RlQXQo''@;'; put 'put ''MCkmJihJW3lbMjE4XVtnXV09NTU4MDgrZyxfWzU1ODA4K2ddPXlbMjE4XVtnXSk7Zm9yKHlbMjE5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5MGI4XHU5MGIwXHU5MGNmXHU5MGM1XHU5MGJlXHU5MGQwXHU5MGM0XHU5MGM3XHU5MGQzXHU5MGU2XHU5MGUyXHU5MGRjXHU5MGQ3XHU5MGRiXHU5MGViXHU5MGVmXHU5MGZlXHU5MTA0XHU5MTIyXHU5MTFlXHU5MTIzXHU5''@;'; put 'put ''MTMxXHU5MTJmXHU5MTM5XHU5MTQzXHU5MTQ2XHU1MjBkXHU1OTQyXHU1MmEyXHU1MmFjXHU1MmFkXHU1MmJlXHU1NGZmXHU1MmQwXHU1MmQ2XHU1MmYwXHU1M2RmXHU3MWVlXHU3N2NkXHU1ZWY0XHU1MWY1XHU1MWZjXHU5YjJmXHU1M2I2XHU1ZjAxXHU3NTVhXHU1ZGVmXHU1NzRjXHU1N2E5''@;'; put 'put ''XHU1N2ExXHU1ODdlXHU1OGJjXHU1OGM1XHU1OGQxXHU1NzI5XHU1NzJjXHU1NzJhXHU1NzMzXHU1NzM5XHU1NzJlXHU1NzJmXHU1NzVjXHU1NzNiXHU1NzQyXHU1NzY5XHU1Nzg1XHU1NzZiXHU1Nzg2XHU1NzdjXHU1NzdiXHU1NzY4XHU1NzZkXHU1Nzc2XHU1NzczXHU1N2FkXHU1N2E0XHU1''@;'; put 'put ''NzhjXHU1N2IyXHU1N2NmXHU1N2E3XHU1N2I0XHU1NzkzXHU1N2EwXHU1N2Q1XHU1N2Q4XHU1N2RhXHU1N2Q5XHU1N2QyXHU1N2I4XHU1N2Y0XHU1N2VmXHU1N2Y4XHU1N2U0XHU1N2RkXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjE5XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMTldW2dd''@;'; put 'put ''LmNoYXJDb2RlQXQoMCkmJihJW3lbMjE5XVtnXV09NTYwNjQrZyxfWzU2MDY0K2ddPXlbMjE5XVtnXSk7Zm9yKHlbMjIwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ODBiXHU1ODBkXHU1N2ZkXHU1N2VkXHU1ODAwXHU1ODFlXHU1ODE5XHU1ODQ0XHU1ODIwXHU1ODY1XHU1ODZjXHU1ODgxXHU1ODg5XHU1ODlhXHU1ODgwXHU5OWE4XHU5ZjE5XHU2MWZmXHU4Mjc5XHU4''@;'; put 'put ''MjdkXHU4MjdmXHU4MjhmXHU4MjhhXHU4MmE4XHU4Mjg0XHU4MjhlXHU4MjkxXHU4Mjk3XHU4Mjk5XHU4MmFiXHU4MmI4XHU4MmJlXHU4MmIwXHU4MmM4XHU4MmNhXHU4MmUzXHU4Mjk4XHU4MmI3XHU4MmFlXHU4MmNiXHU4MmNjXHU4MmMxXHU4MmE5XHU4MmI0XHU4MmExXHU4MmFhXHU4Mjlm''@;'; put 'put ''XHU4MmM0XHU4MmNlXHU4MmE0XHU4MmUxXHU4MzA5XHU4MmY3XHU4MmU0XHU4MzBmXHU4MzA3XHU4MmRjXHU4MmY0XHU4MmQyXHU4MmQ4XHU4MzBjXHU4MmZiXHU4MmQzXHU4MzExXHU4MzFhXHU4MzA2XHU4MzE0XHU4MzE1XHU4MmUwXHU4MmQ1XHU4MzFjXHU4MzUxXHU4MzViXHU4MzVjXHU4''@;'; put 'put ''MzA4XHU4MzkyXHU4MzNjXHU4MzM0XHU4MzMxXHU4MzliXHU4MzVlXHU4MzJmXHU4MzRmXHU4MzQ3XHU4MzQzXHU4MzVmXHU4MzQwXHU4MzE3XHU4MzYwXHU4MzJkXHU4MzNhXHU4MzMzXHU4MzY2XHU4MzY1XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjIwXS5sZW5ndGg7KytnKTY1NTMz''@;'; put 'put ''IT09eVsyMjBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjIwXVtnXV09NTYzMjArZyxfWzU2MzIwK2ddPXlbMjIwXVtnXSk7Zm9yKHlbMjIxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MzY4XHU4MzFiXHU4MzY5XHU4MzZjXHU4MzZhXHU4MzZkXHU4MzZlXHU4M2IwXHU4Mzc4XHU4M2IzXHU4M2I0XHU4M2EwXHU4M2FhXHU4MzkzXHU4MzljXHU4Mzg1XHU4MzdjXHU4''@;'; put 'put ''M2I2XHU4M2E5XHU4MzdkXHU4M2I4XHU4MzdiXHU4Mzk4XHU4MzllXHU4M2E4XHU4M2JhXHU4M2JjXHU4M2MxXHU4NDAxXHU4M2U1XHU4M2Q4XHU1ODA3XHU4NDE4XHU4NDBiXHU4M2RkXHU4M2ZkXHU4M2Q2XHU4NDFjXHU4NDM4XHU4NDExXHU4NDA2XHU4M2Q0XHU4M2RmXHU4NDBmXHU4NDAz''@;'; put 'put ''XHU4M2Y4XHU4M2Y5XHU4M2VhXHU4M2M1XHU4M2MwXHU4NDI2XHU4M2YwXHU4M2UxXHU4NDVjXHU4NDUxXHU4NDVhXHU4NDU5XHU4NDczXHU4NDg3XHU4NDg4XHU4NDdhXHU4NDg5XHU4NDc4XHU4NDNjXHU4NDQ2XHU4NDY5XHU4NDc2XHU4NDhjXHU4NDhlXHU4NDMxXHU4NDZkXHU4NGMxXHU4''@;'; put 'put ''NGNkXHU4NGQwXHU4NGU2XHU4NGJkXHU4NGQzXHU4NGNhXHU4NGJmXHU4NGJhXHU4NGUwXHU4NGExXHU4NGI5XHU4NGI0XHU4NDk3XHU4NGU1XHU4NGUzXHU4NTBjXHU3NTBkXHU4NTM4XHU4NGYwXHU4NTM5XHU4NTFmXHU4NTNhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjIxXS5sZW5n''@;'; put 'put ''dGg7KytnKTY1NTMzIT09eVsyMjFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjIxXVtnXV09NTY1NzYrZyxfWzU2NTc2K2ddPXlbMjIxXVtnXSk7Zm9yKHlbMjIyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4NTU2XHU4NTNiXHU4NGZmXHU4NGZjXHU4NTU5XHU4NTQ4XHU4NTY4XHU4NTY0XHU4NTVlXHU4NTdhXHU3N2EyXHU4NTQzXHU4NTcyXHU4NTdiXHU4NWE0XHU4''@;'; put 'put ''NWE4XHU4NTg3XHU4NThmXHU4NTc5XHU4NWFlXHU4NTljXHU4NTg1XHU4NWI5XHU4NWI3XHU4NWIwXHU4NWQzXHU4NWMxXHU4NWRjXHU4NWZmXHU4NjI3XHU4NjA1XHU4NjI5XHU4NjE2XHU4NjNjXHU1ZWZlXHU1ZjA4XHU1OTNjXHU1OTQxXHU4MDM3XHU1OTU1XHU1OTVhXHU1OTU4XHU1MzBm''@;'; put 'put ''XHU1YzIyXHU1YzI1XHU1YzJjXHU1YzM0XHU2MjRjXHU2MjZhXHU2MjlmXHU2MmJiXHU2MmNhXHU2MmRhXHU2MmQ3XHU2MmVlXHU2MzIyXHU2MmY2XHU2MzM5XHU2MzRiXHU2MzQzXHU2M2FkXHU2M2Y2XHU2MzcxXHU2MzdhXHU2MzhlXHU2M2I0XHU2MzZkXHU2M2FjXHU2MzhhXHU2MzY5XHU2''@;'; put 'put ''M2FlXHU2M2JjXHU2M2YyXHU2M2Y4XHU2M2UwXHU2M2ZmXHU2M2M0XHU2M2RlXHU2M2NlXHU2NDUyXHU2M2M2XHU2M2JlXHU2NDQ1XHU2NDQxXHU2NDBiXHU2NDFiXHU2NDIwXHU2NDBjXHU2NDI2XHU2NDIxXHU2NDVlXHU2NDg0XHU2NDZkXHU2NDk2XHVmZmZkIi5zcGxpdCgiIiksZz0wO2ch''@;'; put 'put ''PXlbMjIyXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMjJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjIyXVtnXV09NTY4MzIrZyxfWzU2ODMyK2ddPXlbMjIyXVtnXSk7Zm9yKHlbMjIzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NDdhXHU2NGI3XHU2NGI4XHU2NDk5XHU2NGJhXHU2NGMwXHU2NGQwXHU2NGQ3XHU2NGU0XHU2NGUyXHU2NTA5XHU2NTI1XHU2NTJlXHU1''@;'; put 'put ''ZjBiXHU1ZmQyXHU3NTE5XHU1ZjExXHU1MzVmXHU1M2YxXHU1M2ZkXHU1M2U5XHU1M2U4XHU1M2ZiXHU1NDEyXHU1NDE2XHU1NDA2XHU1NDRiXHU1NDUyXHU1NDUzXHU1NDU0XHU1NDU2XHU1NDQzXHU1NDIxXHU1NDU3XHU1NDU5XHU1NDIzXHU1NDMyXHU1NDgyXHU1NDk0XHU1NDc3XHU1NDcx''@;'; put 'put ''XHU1NDY0XHU1NDlhXHU1NDliXHU1NDg0XHU1NDc2XHU1NDY2XHU1NDlkXHU1NGQwXHU1NGFkXHU1NGMyXHU1NGI0XHU1NGQyXHU1NGE3XHU1NGE2XHU1NGQzXHU1NGQ0XHU1NDcyXHU1NGEzXHU1NGQ1XHU1NGJiXHU1NGJmXHU1NGNjXHU1NGQ5XHU1NGRhXHU1NGRjXHU1NGE5XHU1NGFhXHU1''@;'; put 'put ''NGE0XHU1NGRkXHU1NGNmXHU1NGRlXHU1NTFiXHU1NGU3XHU1NTIwXHU1NGZkXHU1NTE0XHU1NGYzXHU1NTIyXHU1NTIzXHU1NTBmXHU1NTExXHU1NTI3XHU1NTJhXHU1NTY3XHU1NThmXHU1NWI1XHU1NTQ5XHU1NTZkXHU1NTQxXHU1NTU1XHU1NTNmXHU1NTUwXHU1NTNjXHVmZmZkIi5zcGxp''@;'; put 'put ''dCgiIiksZz0wO2chPXlbMjIzXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMjNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjIzXVtnXV09NTcwODgrZyxfWzU3MDg4K2ddPXlbMjIzXVtnXSk7Zm9yKHlbMjI0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1NTM3XHU1NTU2XHU1NTc1XHU1NTc2XHU1NTc3XHU1NTMzXHU1NTMwXHU1NTVjXHU1NThiXHU1NWQyXHU1NTgzXHU1''@;'; put 'put ''NWIxXHU1NWI5XHU1NTg4XHU1NTgxXHU1NTlmXHU1NTdlXHU1NWQ2XHU1NTkxXHU1NTdiXHU1NWRmXHU1NWJkXHU1NWJlXHU1NTk0XHU1NTk5XHU1NWVhXHU1NWY3XHU1NWM5XHU1NjFmXHU1NWQxXHU1NWViXHU1NWVjXHU1NWQ0XHU1NWU2XHU1NWRkXHU1NWM0XHU1NWVmXHU1NWU1XHU1NWYy''@;'; put 'put ''XHU1NWYzXHU1NWNjXHU1NWNkXHU1NWU4XHU1NWY1XHU1NWU0XHU4Zjk0XHU1NjFlXHU1NjA4XHU1NjBjXHU1NjAxXHU1NjI0XHU1NjIzXHU1NWZlXHU1NjAwXHU1NjI3XHU1NjJkXHU1NjU4XHU1NjM5XHU1NjU3XHU1NjJjXHU1NjRkXHU1NjYyXHU1NjU5XHU1NjVjXHU1NjRjXHU1NjU0XHU1''@;'; put 'put ''Njg2XHU1NjY0XHU1NjcxXHU1NjZiXHU1NjdiXHU1NjdjXHU1Njg1XHU1NjkzXHU1NmFmXHU1NmQ0XHU1NmQ3XHU1NmRkXHU1NmUxXHU1NmY1XHU1NmViXHU1NmY5XHU1NmZmXHU1NzA0XHU1NzBhXHU1NzA5XHU1NzFjXHU1ZTBmXHU1ZTE5XHU1ZTE0XHU1ZTExXHU1ZTMxXHU1ZTNiXHU1ZTNj''@;'; put 'put ''XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjI0XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMjRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjI0XVtnXV09NTczNDQrZyxfWzU3MzQ0K2ddPXlbMjI0XVtnXSk7Zm9yKHlbMjI1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU1ZTM3XHU1ZTQ0XHU1ZTU0XHU1ZTViXHU1ZTVlXHU1ZTYxXHU1YzhjXHU1YzdhXHU1YzhkXHU1''@;'; put 'put ''YzkwXHU1Yzk2XHU1Yzg4XHU1Yzk4XHU1Yzk5XHU1YzkxXHU1YzlhXHU1YzljXHU1Y2I1XHU1Y2EyXHU1Y2JkXHU1Y2FjXHU1Y2FiXHU1Y2IxXHU1Y2EzXHU1Y2MxXHU1Y2I3XHU1Y2M0XHU1Y2QyXHU1Y2U0XHU1Y2NiXHU1Y2U1XHU1ZDAyXHU1ZDAzXHU1ZDI3XHU1ZDI2XHU1ZDJlXHU1ZDI0''@;'; put 'put ''XHU1ZDFlXHU1ZDA2XHU1ZDFiXHU1ZDU4XHU1ZDNlXHU1ZDM0XHU1ZDNkXHU1ZDZjXHU1ZDViXHU1ZDZmXHU1ZDVkXHU1ZDZiXHU1ZDRiXHU1ZDRhXHU1ZDY5XHU1ZDc0XHU1ZDgyXHU1ZDk5XHU1ZDlkXHU4YzczXHU1ZGI3XHU1ZGM1XHU1ZjczXHU1Zjc3XHU1ZjgyXHU1Zjg3XHU1Zjg5XHU1''@;'; put 'put ''ZjhjXHU1Zjk1XHU1Zjk5XHU1ZjljXHU1ZmE4XHU1ZmFkXHU1ZmI1XHU1ZmJjXHU4ODYyXHU1ZjYxXHU3MmFkXHU3MmIwXHU3MmI0XHU3MmI3XHU3MmI4XHU3MmMzXHU3MmMxXHU3MmNlXHU3MmNkXHU3MmQyXHU3MmU4XHU3MmVmXHU3MmU5XHU3MmYyXHU3MmY0XHU3MmY3XHU3MzAxXHU3MmYz''@;'; put 'put ''XHU3MzAzXHU3MmZhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjI1XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMjVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjI1XVtnXV09NTc2MDArZyxfWzU3NjAwK2ddPXlbMjI1XVtnXSk7Zm9yKHlbMjI2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3MmZiXHU3MzE3XHU3MzEzXHU3MzIxXHU3MzBhXHU3MzFlXHU3MzFkXHU3''@;'; put 'put ''MzE1XHU3MzIyXHU3MzM5XHU3MzI1XHU3MzJjXHU3MzM4XHU3MzMxXHU3MzUwXHU3MzRkXHU3MzU3XHU3MzYwXHU3MzZjXHU3MzZmXHU3MzdlXHU4MjFiXHU1OTI1XHU5OGU3XHU1OTI0XHU1OTAyXHU5OTYzXHU5OTY3XHU5OTY4XHU5OTY5XHU5OTZhXHU5OTZiXHU5OTZjXHU5OTc0XHU5OTc3''@;'; put 'put ''XHU5OTdkXHU5OTgwXHU5OTg0XHU5OTg3XHU5OThhXHU5OThkXHU5OTkwXHU5OTkxXHU5OTkzXHU5OTk0XHU5OTk1XHU1ZTgwXHU1ZTkxXHU1ZThiXHU1ZTk2XHU1ZWE1XHU1ZWEwXHU1ZWI5XHU1ZWI1XHU1ZWJlXHU1ZWIzXHU4ZDUzXHU1ZWQyXHU1ZWQxXHU1ZWRiXHU1ZWU4XHU1ZWVhXHU4''@;'; put 'put ''MWJhXHU1ZmM0XHU1ZmM5XHU1ZmQ2XHU1ZmNmXHU2MDAzXHU1ZmVlXHU2MDA0XHU1ZmUxXHU1ZmU0XHU1ZmZlXHU2MDA1XHU2MDA2XHU1ZmVhXHU1ZmVkXHU1ZmY4XHU2MDE5XHU2MDM1XHU2MDI2XHU2MDFiXHU2MDBmXHU2MDBkXHU2MDI5XHU2MDJiXHU2MDBhXHU2MDNmXHU2MDIxXHU2MDc4''@;'; put 'put ''XHU2MDc5XHU2MDdiXHU2MDdhXHU2MDQyXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjI2XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMjZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjI2XVtnXV09NTc4NTYrZyxfWzU3ODU2K2ddPXlbMjI2XVtnXSk7Zm9yKHlbMjI3XT0iXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDZhXHU2MDdkXHU2MDk2XHU2MDlhXHU2MGFkXHU2''@;'; put 'put ''MDlkXHU2MDgzXHU2MDkyXHU2MDhjXHU2MDliXHU2MGVjXHU2MGJiXHU2MGIxXHU2MGRkXHU2MGQ4XHU2MGM2XHU2MGRhXHU2MGI0XHU2MTIwXHU2MTI2XHU2MTE1XHU2MTIzXHU2MGY0XHU2MTAwXHU2MTBlXHU2MTJiXHU2MTRhXHU2MTc1XHU2MWFjXHU2MTk0XHU2MWE3XHU2MWI3XHU2MWQ0''@;'; put 'put ''XHU2MWY1XHU1ZmRkXHU5NmIzXHU5NWU5XHU5NWViXHU5NWYxXHU5NWYzXHU5NWY1XHU5NWY2XHU5NWZjXHU5NWZlXHU5NjAzXHU5NjA0XHU5NjA2XHU5NjA4XHU5NjBhXHU5NjBiXHU5NjBjXHU5NjBkXHU5NjBmXHU5NjEyXHU5NjE1XHU5NjE2XHU5NjE3XHU5NjE5XHU5NjFhXHU0ZTJjXHU3''@;'; put 'put ''MjNmXHU2MjE1XHU2YzM1XHU2YzU0XHU2YzVjXHU2YzRhXHU2Y2EzXHU2Yzg1XHU2YzkwXHU2Yzk0XHU2YzhjXHU2YzY4XHU2YzY5XHU2Yzc0XHU2Yzc2XHU2Yzg2XHU2Y2E5XHU2Y2QwXHU2Y2Q0XHU2Y2FkXHU2Y2Y3XHU2Y2Y4XHU2Y2YxXHU2Y2Q3XHU2Y2IyXHU2Y2UwXHU2Y2Q2XHU2Y2Zh''@;'; put 'put ''XHU2Y2ViXHU2Y2VlXHU2Y2IxXHU2Y2QzXHU2Y2VmXHU2Y2ZlXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjI3XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMjddW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjI3XVtnXV09NTgxMTIrZyxfWzU4MTEyK2ddPXlbMjI3XVtnXSk7Zm9yKHlbMjI4''@;'; put 'put ''XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZDM5XHU2ZDI3XHU2ZDBjXHU2''@;'; put 'put ''ZDQzXHU2ZDQ4XHU2ZDA3XHU2ZDA0XHU2ZDE5XHU2ZDBlXHU2ZDJiXHU2ZDRkXHU2ZDJlXHU2ZDM1XHU2ZDFhXHU2ZDRmXHU2ZDUyXHU2ZDU0XHU2ZDMzXHU2ZDkxXHU2ZDZmXHU2ZDllXHU2ZGEwXHU2ZDVlXHU2ZDkzXHU2ZDk0XHU2ZDVjXHU2ZDYwXHU2ZDdjXHU2ZDYzXHU2ZTFhXHU2ZGM3''@;'; put 'put ''XHU2ZGM1XHU2ZGRlXHU2ZTBlXHU2ZGJmXHU2ZGUwXHU2ZTExXHU2ZGU2XHU2ZGRkXHU2ZGQ5XHU2ZTE2XHU2ZGFiXHU2ZTBjXHU2ZGFlXHU2ZTJiXHU2ZTZlXHU2ZTRlXHU2ZTZiXHU2ZWIyXHU2ZTVmXHU2ZTg2XHU2ZTUzXHU2ZTU0XHU2ZTMyXHU2ZTI1XHU2ZTQ0XHU2ZWRmXHU2ZWIxXHU2''@;'; put 'put ''ZTk4XHU2ZWUwXHU2ZjJkXHU2ZWUyXHU2ZWE1XHU2ZWE3XHU2ZWJkXHU2ZWJiXHU2ZWI3XHU2ZWQ3XHU2ZWI0XHU2ZWNmXHU2ZThmXHU2ZWMyXHU2ZTlmXHU2ZjYyXHU2ZjQ2XHU2ZjQ3XHU2ZjI0XHU2ZjE1XHU2ZWY5XHU2ZjJmXHU2ZjM2XHU2ZjRiXHU2Zjc0XHU2ZjJhXHU2ZjA5XHU2ZjI5''@;'; put 'put ''XHU2Zjg5XHU2ZjhkXHU2ZjhjXHU2Zjc4XHU2ZjcyXHU2ZjdjXHU2ZjdhXHU2ZmQxXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjI4XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMjhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjI4XVtnXV09NTgzNjgrZyxfWzU4MzY4K2ddPXlbMjI4XVtn''@;'; put 'put ''XSk7Zm9yKHlbMjI5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2ZmM5XHU2''@;'; put 'put ''ZmE3XHU2ZmI5XHU2ZmI2XHU2ZmMyXHU2ZmUxXHU2ZmVlXHU2ZmRlXHU2ZmUwXHU2ZmVmXHU3MDFhXHU3MDIzXHU3MDFiXHU3MDM5XHU3MDM1XHU3MDRmXHU3MDVlXHU1YjgwXHU1Yjg0XHU1Yjk1XHU1YjkzXHU1YmE1XHU1YmI4XHU3NTJmXHU5YTllXHU2NDM0XHU1YmU0XHU1YmVlXHU4OTMw''@;'; put 'put ''XHU1YmYwXHU4ZTQ3XHU4YjA3XHU4ZmI2XHU4ZmQzXHU4ZmQ1XHU4ZmU1XHU4ZmVlXHU4ZmU0XHU4ZmU5XHU4ZmU2XHU4ZmYzXHU4ZmU4XHU5MDA1XHU5MDA0XHU5MDBiXHU5MDI2XHU5MDExXHU5MDBkXHU5MDE2XHU5MDIxXHU5MDM1XHU5MDM2XHU5MDJkXHU5MDJmXHU5MDQ0XHU5MDUxXHU5''@;'; put 'put ''MDUyXHU5MDUwXHU5MDY4XHU5MDU4XHU5MDYyXHU5MDViXHU2NmI5XHU5MDc0XHU5MDdkXHU5MDgyXHU5MDg4XHU5MDgzXHU5MDhiXHU1ZjUwXHU1ZjU3XHU1ZjU2XHU1ZjU4XHU1YzNiXHU1NGFiXHU1YzUwXHU1YzU5XHU1YjcxXHU1YzYzXHU1YzY2XHU3ZmJjXHU1ZjJhXHU1ZjI5XHU1ZjJk''@;'; put 'put ''XHU4Mjc0XHU1ZjNjXHU5YjNiXHU1YzZlXHU1OTgxXHU1OTgzXHU1OThkXHU1OWE5XHU1OWFhXHU1OWEzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjI5XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMjldW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjI5XVtnXV09NTg2MjQrZyxfWzU4NjI0''@;'; put 'put ''K2ddPXlbMjI5XVtnXSk7Zm9yKHlbMjMwXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHU1OTk3XHU1OWNhXHU1OWFiXHU1OTllXHU1OWE0XHU1OWQyXHU1OWIyXHU1OWFmXHU1OWQ3XHU1OWJlXHU1YTA1XHU1YTA2XHU1OWRkXHU1YTA4XHU1OWUzXHU1OWQ4XHU1OWY5XHU1YTBjXHU1YTA5XHU1YTMyXHU1YTM0XHU1YTExXHU1YTIzXHU1YTEzXHU1YTQwXHU1YTY3XHU1YTRh''@;'; put 'put ''XHU1YTU1XHU1YTNjXHU1YTYyXHU1YTc1XHU4MGVjXHU1YWFhXHU1YTliXHU1YTc3XHU1YTdhXHU1YWJlXHU1YWViXHU1YWIyXHU1YWQyXHU1YWQ0XHU1YWI4XHU1YWUwXHU1YWUzXHU1YWYxXHU1YWQ2XHU1YWU2XHU1YWQ4XHU1YWRjXHU1YjA5XHU1YjE3XHU1YjE2XHU1YjMyXHU1YjM3XHU1''@;'; put 'put ''YjQwXHU1YzE1XHU1YzFjXHU1YjVhXHU1YjY1XHU1YjczXHU1YjUxXHU1YjUzXHU1YjYyXHU5YTc1XHU5YTc3XHU5YTc4XHU5YTdhXHU5YTdmXHU5YTdkXHU5YTgwXHU5YTgxXHU5YTg1XHU5YTg4XHU5YThhXHU5YTkwXHU5YTkyXHU5YTkzXHU5YTk2XHU5YTk4XHU5YTliXHU5YTljXHU5YTlk''@;'; put 'put ''XHU5YTlmXHU5YWEwXHU5YWEyXHU5YWEzXHU5YWE1XHU5YWE3XHU3ZTlmXHU3ZWExXHU3ZWEzXHU3ZWE1XHU3ZWE4XHU3ZWE5XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjMwXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMzBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjMwXVtnXV09NTg4''@;'; put 'put ''ODArZyxfWzU4ODgwK2ddPXlbMjMwXVtnXSk7Zm9yKHlbMjMxXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHU3ZWFkXHU3ZWIwXHU3ZWJlXHU3ZWMwXHU3ZWMxXHU3ZWMyXHU3ZWM5XHU3ZWNiXHU3ZWNjXHU3ZWQwXHU3ZWQ0XHU3ZWQ3XHU3ZWRiXHU3ZWUwXHU3ZWUxXHU3ZWU4XHU3ZWViXHU3ZWVlXHU3ZWVmXHU3ZWYxXHU3ZWYyXHU3ZjBkXHU3ZWY2XHU3ZWZhXHU3ZWZi''@;'; put 'put ''XHU3ZWZlXHU3ZjAxXHU3ZjAyXHU3ZjAzXHU3ZjA3XHU3ZjA4XHU3ZjBiXHU3ZjBjXHU3ZjBmXHU3ZjExXHU3ZjEyXHU3ZjE3XHU3ZjE5XHU3ZjFjXHU3ZjFiXHU3ZjFmXHU3ZjIxXHU3ZjIyXHU3ZjIzXHU3ZjI0XHU3ZjI1XHU3ZjI2XHU3ZjI3XHU3ZjJhXHU3ZjJiXHU3ZjJjXHU3ZjJkXHU3''@;'; put 'put ''ZjJmXHU3ZjMwXHU3ZjMxXHU3ZjMyXHU3ZjMzXHU3ZjM1XHU1ZTdhXHU3NTdmXHU1ZGRiXHU3NTNlXHU5MDk1XHU3MzhlXHU3MzkxXHU3M2FlXHU3M2EyXHU3MzlmXHU3M2NmXHU3M2MyXHU3M2QxXHU3M2I3XHU3M2IzXHU3M2MwXHU3M2M5XHU3M2M4XHU3M2U1XHU3M2Q5XHU5ODdjXHU3NDBh''@;'; put 'put ''XHU3M2U5XHU3M2U3XHU3M2RlXHU3M2JhXHU3M2YyXHU3NDBmXHU3NDJhXHU3NDViXHU3NDI2XHU3NDI1XHU3NDI4XHU3NDMwXHU3NDJlXHU3NDJjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjMxXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMzFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lb''@;'; put 'put ''MjMxXVtnXV09NTkxMzYrZyxfWzU5MTM2K2ddPXlbMjMxXVtnXSk7Zm9yKHlbMjMyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NDFiXHU3NDFhXHU3NDQxXHU3NDVjXHU3NDU3XHU3NDU1XHU3NDU5XHU3NDc3XHU3NDZkXHU3NDdlXHU3NDljXHU3NDhlXHU3NDgwXHU3NDgxXHU3NDg3XHU3NDhiXHU3NDllXHU3NGE4XHU3NGE5XHU3NDkwXHU3NGE3XHU3NGQyXHU3NGJh''@;'; put 'put ''XHU5N2VhXHU5N2ViXHU5N2VjXHU2NzRjXHU2NzUzXHU2NzVlXHU2NzQ4XHU2NzY5XHU2N2E1XHU2Nzg3XHU2NzZhXHU2NzczXHU2Nzk4XHU2N2E3XHU2Nzc1XHU2N2E4XHU2NzllXHU2N2FkXHU2NzhiXHU2Nzc3XHU2NzdjXHU2N2YwXHU2ODA5XHU2N2Q4XHU2ODBhXHU2N2U5XHU2N2IwXHU2''@;'; put 'put ''ODBjXHU2N2Q5XHU2N2I1XHU2N2RhXHU2N2IzXHU2N2RkXHU2ODAwXHU2N2MzXHU2N2I4XHU2N2UyXHU2ODBlXHU2N2MxXHU2N2ZkXHU2ODMyXHU2ODMzXHU2ODYwXHU2ODYxXHU2ODRlXHU2ODYyXHU2ODQ0XHU2ODY0XHU2ODgzXHU2ODFkXHU2ODU1XHU2ODY2XHU2ODQxXHU2ODY3XHU2ODQw''@;'; put 'put ''XHU2ODNlXHU2ODRhXHU2ODQ5XHU2ODI5XHU2OGI1XHU2ODhmXHU2ODc0XHU2ODc3XHU2ODkzXHU2ODZiXHU2OGMyXHU2OTZlXHU2OGZjXHU2OTFmXHU2OTIwXHU2OGY5XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjMyXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMzJdW2ddLmNoYXJDb2Rl''@;'; put 'put ''QXQoMCkmJihJW3lbMjMyXVtnXV09NTkzOTIrZyxfWzU5MzkyK2ddPXlbMjMyXVtnXSk7Zm9yKHlbMjMzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2OTI0XHU2OGYwXHU2OTBiXHU2OTAxXHU2OTU3XHU2OGUzXHU2OTEwXHU2OTcxXHU2OTM5XHU2OTYwXHU2OTQyXHU2OTVkXHU2OTg0XHU2OTZiXHU2OTgwXHU2OTk4XHU2OTc4XHU2OTM0XHU2OWNjXHU2OTg3XHU2OTg4''@;'; put 'put ''XHU2OWNlXHU2OTg5XHU2OTY2XHU2OTYzXHU2OTc5XHU2OTliXHU2OWE3XHU2OWJiXHU2OWFiXHU2OWFkXHU2OWQ0XHU2OWIxXHU2OWMxXHU2OWNhXHU2OWRmXHU2OTk1XHU2OWUwXHU2OThkXHU2OWZmXHU2YTJmXHU2OWVkXHU2YTE3XHU2YTE4XHU2YTY1XHU2OWYyXHU2YTQ0XHU2YTNlXHU2''@;'; put 'put ''YWEwXHU2YTUwXHU2YTViXHU2YTM1XHU2YThlXHU2YTc5XHU2YTNkXHU2YTI4XHU2YTU4XHU2YTdjXHU2YTkxXHU2YTkwXHU2YWE5XHU2YTk3XHU2YWFiXHU3MzM3XHU3MzUyXHU2YjgxXHU2YjgyXHU2Yjg3XHU2Yjg0XHU2YjkyXHU2YjkzXHU2YjhkXHU2YjlhXHU2YjliXHU2YmExXHU2YmFh''@;'; put 'put ''XHU4ZjZiXHU4ZjZkXHU4ZjcxXHU4ZjcyXHU4ZjczXHU4Zjc1XHU4Zjc2XHU4Zjc4XHU4Zjc3XHU4Zjc5XHU4ZjdhXHU4ZjdjXHU4ZjdlXHU4ZjgxXHU4ZjgyXHU4Zjg0XHU4Zjg3XHU4ZjhiXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjMzXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMzNd''@;'; put 'put ''W2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjMzXVtnXV09NTk2NDgrZyxfWzU5NjQ4K2ddPXlbMjMzXVtnXSk7Zm9yKHlbMjM0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4ZjhkXHU4ZjhlXHU4ZjhmXHU4Zjk4XHU4ZjlhXHU4ZWNlXHU2MjBiXHU2MjE3XHU2MjFiXHU2MjFmXHU2MjIyXHU2MjIxXHU2MjI1XHU2MjI0XHU2MjJjXHU4MWU3XHU3NGVmXHU3NGY0XHU3NGZm''@;'; put 'put ''XHU3NTBmXHU3NTExXHU3NTEzXHU2NTM0XHU2NWVlXHU2NWVmXHU2NWYwXHU2NjBhXHU2NjE5XHU2NzcyXHU2NjAzXHU2NjE1XHU2NjAwXHU3MDg1XHU2NmY3XHU2NjFkXHU2NjM0XHU2NjMxXHU2NjM2XHU2NjM1XHU4MDA2XHU2NjVmXHU2NjU0XHU2NjQxXHU2NjRmXHU2NjU2XHU2NjYxXHU2''@;'; put 'put ''NjU3XHU2Njc3XHU2Njg0XHU2NjhjXHU2NmE3XHU2NjlkXHU2NmJlXHU2NmRiXHU2NmRjXHU2NmU2XHU2NmU5XHU4ZDMyXHU4ZDMzXHU4ZDM2XHU4ZDNiXHU4ZDNkXHU4ZDQwXHU4ZDQ1XHU4ZDQ2XHU4ZDQ4XHU4ZDQ5XHU4ZDQ3XHU4ZDRkXHU4ZDU1XHU4ZDU5XHU4OWM3XHU4OWNhXHU4OWNi''@;'; put 'put ''XHU4OWNjXHU4OWNlXHU4OWNmXHU4OWQwXHU4OWQxXHU3MjZlXHU3MjlmXHU3MjVkXHU3MjY2XHU3MjZmXHU3MjdlXHU3MjdmXHU3Mjg0XHU3MjhiXHU3MjhkXHU3MjhmXHU3MjkyXHU2MzA4XHU2MzMyXHU2M2IwXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjM0XS5sZW5ndGg7KytnKTY1''@;'; put 'put ''NTMzIT09eVsyMzRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjM0XVtnXV09NTk5MDQrZyxfWzU5OTA0K2ddPXlbMjM0XVtnXSk7Zm9yKHlbMjM1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2NDNmXHU2NGQ4XHU4MDA0XHU2YmVhXHU2YmYzXHU2YmZkXHU2YmY1XHU2YmY5XHU2YzA1XHU2YzA3XHU2YzA2XHU2YzBkXHU2YzE1XHU2YzE4XHU2YzE5XHU2YzFhXHU2YzIx''@;'; put 'put ''XHU2YzI5XHU2YzI0XHU2YzJhXHU2YzMyXHU2NTM1XHU2NTU1XHU2NTZiXHU3MjRkXHU3MjUyXHU3MjU2XHU3MjMwXHU4NjYyXHU1MjE2XHU4MDlmXHU4MDljXHU4MDkzXHU4MGJjXHU2NzBhXHU4MGJkXHU4MGIxXHU4MGFiXHU4MGFkXHU4MGI0XHU4MGI3XHU4MGU3XHU4MGU4XHU4MGU5XHU4''@;'; put 'put ''MGVhXHU4MGRiXHU4MGMyXHU4MGM0XHU4MGQ5XHU4MGNkXHU4MGQ3XHU2NzEwXHU4MGRkXHU4MGViXHU4MGYxXHU4MGY0XHU4MGVkXHU4MTBkXHU4MTBlXHU4MGYyXHU4MGZjXHU2NzE1XHU4MTEyXHU4YzVhXHU4MTM2XHU4MTFlXHU4MTJjXHU4MTE4XHU4MTMyXHU4MTQ4XHU4MTRjXHU4MTUz''@;'; put 'put ''XHU4MTc0XHU4MTU5XHU4MTVhXHU4MTcxXHU4MTYwXHU4MTY5XHU4MTdjXHU4MTdkXHU4MTZkXHU4MTY3XHU1ODRkXHU1YWI1XHU4MTg4XHU4MTgyXHU4MTkxXHU2ZWQ1XHU4MWEzXHU4MWFhXHU4MWNjXHU2NzI2XHU4MWNhXHU4MWJiXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjM1XS5s''@;'; put 'put ''ZW5ndGg7KytnKTY1NTMzIT09eVsyMzVdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjM1XVtnXV09NjAxNjArZyxfWzYwMTYwK2ddPXlbMjM1XVtnXSk7Zm9yKHlbMjM2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4MWMxXHU4MWE2XHU2YjI0XHU2YjM3XHU2YjM5XHU2YjQzXHU2YjQ2XHU2YjU5XHU5OGQxXHU5OGQyXHU5OGQzXHU5OGQ1XHU5OGQ5XHU5OGRhXHU2YmIz''@;'; put 'put ''XHU1ZjQwXHU2YmMyXHU4OWYzXHU2NTkwXHU5ZjUxXHU2NTkzXHU2NWJjXHU2NWM2XHU2NWM0XHU2NWMzXHU2NWNjXHU2NWNlXHU2NWQyXHU2NWQ2XHU3MDgwXHU3MDljXHU3MDk2XHU3MDlkXHU3MGJiXHU3MGMwXHU3MGI3XHU3MGFiXHU3MGIxXHU3MGU4XHU3MGNhXHU3MTEwXHU3MTEzXHU3''@;'; put 'put ''MTE2XHU3MTJmXHU3MTMxXHU3MTczXHU3MTVjXHU3MTY4XHU3MTQ1XHU3MTcyXHU3MTRhXHU3MTc4XHU3MTdhXHU3MTk4XHU3MWIzXHU3MWI1XHU3MWE4XHU3MWEwXHU3MWUwXHU3MWQ0XHU3MWU3XHU3MWY5XHU3MjFkXHU3MjI4XHU3MDZjXHU3MTE4XHU3MTY2XHU3MWI5XHU2MjNlXHU2MjNk''@;'; put 'put ''XHU2MjQzXHU2MjQ4XHU2MjQ5XHU3OTNiXHU3OTQwXHU3OTQ2XHU3OTQ5XHU3OTViXHU3OTVjXHU3OTUzXHU3OTVhXHU3OTYyXHU3OTU3XHU3OTYwXHU3OTZmXHU3OTY3XHU3OTdhXHU3OTg1XHU3OThhXHU3OTlhXHU3OWE3XHU3OWIzXHU1ZmQxXHU1ZmQwXHVmZmZkIi5zcGxpdCgiIiksZz0w''@;'; put 'put ''O2chPXlbMjM2XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMzZdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjM2XVtnXV09NjA0MTYrZyxfWzYwNDE2K2ddPXlbMjM2XVtnXSk7Zm9yKHlbMjM3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU2MDNjXHU2MDVkXHU2MDVhXHU2MDY3XHU2MDQxXHU2MDU5XHU2MDYzXHU2MGFiXHU2MTA2XHU2MTBkXHU2MTVkXHU2MWE5XHU2MTlk''@;'; put 'put ''XHU2MWNiXHU2MWQxXHU2MjA2XHU4MDgwXHU4MDdmXHU2YzkzXHU2Y2Y2XHU2ZGZjXHU3N2Y2XHU3N2Y4XHU3ODAwXHU3ODA5XHU3ODE3XHU3ODE4XHU3ODExXHU2NWFiXHU3ODJkXHU3ODFjXHU3ODFkXHU3ODM5XHU3ODNhXHU3ODNiXHU3ODFmXHU3ODNjXHU3ODI1XHU3ODJjXHU3ODIzXHU3''@;'; put 'put ''ODI5XHU3ODRlXHU3ODZkXHU3ODU2XHU3ODU3XHU3ODI2XHU3ODUwXHU3ODQ3XHU3ODRjXHU3ODZhXHU3ODliXHU3ODkzXHU3ODlhXHU3ODg3XHU3ODljXHU3OGExXHU3OGEzXHU3OGIyXHU3OGI5XHU3OGE1XHU3OGQ0XHU3OGQ5XHU3OGM5XHU3OGVjXHU3OGYyXHU3OTA1XHU3OGY0XHU3OTEz''@;'; put 'put ''XHU3OTI0XHU3OTFlXHU3OTM0XHU5ZjliXHU5ZWY5XHU5ZWZiXHU5ZWZjXHU3NmYxXHU3NzA0XHU3NzBkXHU3NmY5XHU3NzA3XHU3NzA4XHU3NzFhXHU3NzIyXHU3NzE5XHU3NzJkXHU3NzI2XHU3NzM1XHU3NzM4XHU3NzUwXHU3NzUxXHU3NzQ3XHU3NzQzXHU3NzVhXHU3NzY4XHVmZmZkIi5z''@;'; put 'put ''cGxpdCgiIiksZz0wO2chPXlbMjM3XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMzddW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjM3XVtnXV09NjA2NzIrZyxfWzYwNjcyK2ddPXlbMjM3XVtnXSk7Zm9yKHlbMjM4XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NzYyXHU3NzY1XHU3NzdmXHU3NzhkXHU3NzdkXHU3NzgwXHU3NzhjXHU3NzkxXHU3NzlmXHU3N2EwXHU3N2Iw''@;'; put 'put ''XHU3N2I1XHU3N2JkXHU3NTNhXHU3NTQwXHU3NTRlXHU3NTRiXHU3NTQ4XHU3NTViXHU3NTcyXHU3NTc5XHU3NTgzXHU3ZjU4XHU3ZjYxXHU3ZjVmXHU4YTQ4XHU3ZjY4XHU3Zjc0XHU3ZjcxXHU3Zjc5XHU3ZjgxXHU3ZjdlXHU3NmNkXHU3NmU1XHU4ODMyXHU5NDg1XHU5NDg2XHU5NDg3XHU5''@;'; put 'put ''NDhiXHU5NDhhXHU5NDhjXHU5NDhkXHU5NDhmXHU5NDkwXHU5NDk0XHU5NDk3XHU5NDk1XHU5NDlhXHU5NDliXHU5NDljXHU5NGEzXHU5NGE0XHU5NGFiXHU5NGFhXHU5NGFkXHU5NGFjXHU5NGFmXHU5NGIwXHU5NGIyXHU5NGI0XHU5NGI2XHU5NGI3XHU5NGI4XHU5NGI5XHU5NGJhXHU5NGJj''@;'; put 'put ''XHU5NGJkXHU5NGJmXHU5NGM0XHU5NGM4XHU5NGM5XHU5NGNhXHU5NGNiXHU5NGNjXHU5NGNkXHU5NGNlXHU5NGQwXHU5NGQxXHU5NGQyXHU5NGQ1XHU5NGQ2XHU5NGQ3XHU5NGQ5XHU5NGQ4XHU5NGRiXHU5NGRlXHU5NGRmXHU5NGUwXHU5NGUyXHU5NGU0XHU5NGU1XHU5NGU3XHU5NGU4XHU5''@;'; put 'put ''NGVhXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjM4XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMzhdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjM4XVtnXV09NjA5MjgrZyxfWzYwOTI4K2ddPXlbMjM4XVtnXSk7Zm9yKHlbMjM5XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5NGU5XHU5NGViXHU5NGVlXHU5NGVmXHU5NGYzXHU5NGY0XHU5NGY1XHU5NGY3XHU5NGY5''@;'; put 'put ''XHU5NGZjXHU5NGZkXHU5NGZmXHU5NTAzXHU5NTAyXHU5NTA2XHU5NTA3XHU5NTA5XHU5NTBhXHU5NTBkXHU5NTBlXHU5NTBmXHU5NTEyXHU5NTEzXHU5NTE0XHU5NTE1XHU5NTE2XHU5NTE4XHU5NTFiXHU5NTFkXHU5NTFlXHU5NTFmXHU5NTIyXHU5NTJhXHU5NTJiXHU5NTI5XHU5NTJjXHU5''@;'; put 'put ''NTMxXHU5NTMyXHU5NTM0XHU5NTM2XHU5NTM3XHU5NTM4XHU5NTNjXHU5NTNlXHU5NTNmXHU5NTQyXHU5NTM1XHU5NTQ0XHU5NTQ1XHU5NTQ2XHU5NTQ5XHU5NTRjXHU5NTRlXHU5NTRmXHU5NTUyXHU5NTUzXHU5NTU0XHU5NTU2XHU5NTU3XHU5NTU4XHU5NTU5XHU5NTViXHU5NTVlXHU5NTVm''@;'; put 'put ''XHU5NTVkXHU5NTYxXHU5NTYyXHU5NTY0XHU5NTY1XHU5NTY2XHU5NTY3XHU5NTY4XHU5NTY5XHU5NTZhXHU5NTZiXHU5NTZjXHU5NTZmXHU5NTcxXHU5NTcyXHU5NTczXHU5NTNhXHU3N2U3XHU3N2VjXHU5NmM5XHU3OWQ1XHU3OWVkXHU3OWUzXHU3OWViXHU3YTA2XHU1ZDQ3XHU3YTAzXHU3''@;'; put 'put ''YTAyXHU3YTFlXHU3YTE0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjM5XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyMzldW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjM5XVtnXV09NjExODQrZyxfWzYxMTg0K2ddPXlbMjM5XVtnXSk7Zm9yKHlbMjQwXT0iXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3YTM5XHU3YTM3XHU3YTUxXHU5ZWNmXHU5OWE1XHU3YTcwXHU3Njg4''@;'; put 'put ''XHU3NjhlXHU3NjkzXHU3Njk5XHU3NmE0XHU3NGRlXHU3NGUwXHU3NTJjXHU5ZTIwXHU5ZTIyXHU5ZTI4XHU5ZTI5XHU5ZTJhXHU5ZTJiXHU5ZTJjXHU5ZTMyXHU5ZTMxXHU5ZTM2XHU5ZTM4XHU5ZTM3XHU5ZTM5XHU5ZTNhXHU5ZTNlXHU5ZTQxXHU5ZTQyXHU5ZTQ0XHU5ZTQ2XHU5ZTQ3XHU5''@;'; put 'put ''ZTQ4XHU5ZTQ5XHU5ZTRiXHU5ZTRjXHU5ZTRlXHU5ZTUxXHU5ZTU1XHU5ZTU3XHU5ZTVhXHU5ZTViXHU5ZTVjXHU5ZTVlXHU5ZTYzXHU5ZTY2XHU5ZTY3XHU5ZTY4XHU5ZTY5XHU5ZTZhXHU5ZTZiXHU5ZTZjXHU5ZTcxXHU5ZTZkXHU5ZTczXHU3NTkyXHU3NTk0XHU3NTk2XHU3NWEwXHU3NTlk''@;'; put 'put ''XHU3NWFjXHU3NWEzXHU3NWIzXHU3NWI0XHU3NWI4XHU3NWM0XHU3NWIxXHU3NWIwXHU3NWMzXHU3NWMyXHU3NWQ2XHU3NWNkXHU3NWUzXHU3NWU4XHU3NWU2XHU3NWU0XHU3NWViXHU3NWU3XHU3NjAzXHU3NWYxXHU3NWZjXHU3NWZmXHU3NjEwXHU3NjAwXHU3NjA1XHU3NjBjXHU3NjE3XHU3''@;'; put 'put ''NjBhXHU3NjI1XHU3NjE4XHU3NjE1XHU3NjE5XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjQwXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyNDBdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjQwXVtnXV09NjE0NDArZyxfWzYxNDQwK2ddPXlbMjQwXVtnXSk7Zm9yKHlbMjQxXT0iXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU3NjFiXHU3NjNjXHU3NjIyXHU3NjIwXHU3NjQw''@;'; put 'put ''XHU3NjJkXHU3NjMwXHU3NjNmXHU3NjM1XHU3NjQzXHU3NjNlXHU3NjMzXHU3NjRkXHU3NjVlXHU3NjU0XHU3NjVjXHU3NjU2XHU3NjZiXHU3NjZmXHU3ZmNhXHU3YWU2XHU3YTc4XHU3YTc5XHU3YTgwXHU3YTg2XHU3YTg4XHU3YTk1XHU3YWE2XHU3YWEwXHU3YWFjXHU3YWE4XHU3YWFkXHU3''@;'; put 'put ''YWIzXHU4ODY0XHU4ODY5XHU4ODcyXHU4ODdkXHU4ODdmXHU4ODgyXHU4OGEyXHU4OGM2XHU4OGI3XHU4OGJjXHU4OGM5XHU4OGUyXHU4OGNlXHU4OGUzXHU4OGU1XHU4OGYxXHU4OTFhXHU4OGZjXHU4OGU4XHU4OGZlXHU4OGYwXHU4OTIxXHU4OTE5XHU4OTEzXHU4OTFiXHU4OTBhXHU4OTM0''@;'; put 'put ''XHU4OTJiXHU4OTM2XHU4OTQxXHU4OTY2XHU4OTdiXHU3NThiXHU4MGU1XHU3NmIyXHU3NmI0XHU3N2RjXHU4MDEyXHU4MDE0XHU4MDE2XHU4MDFjXHU4MDIwXHU4MDIyXHU4MDI1XHU4MDI2XHU4MDI3XHU4MDI5XHU4MDI4XHU4MDMxXHU4MDBiXHU4MDM1XHU4MDQzXHU4MDQ2XHU4MDRkXHU4''@;'; put 'put ''MDUyXHU4MDY5XHU4MDcxXHU4OTgzXHU5ODc4XHU5ODgwXHU5ODgzXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjQxXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyNDFdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjQxXVtnXV09NjE2OTYrZyxfWzYxNjk2K2ddPXlbMjQxXVtnXSk7Zm9yKHlb''@;'; put 'put ''MjQyXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5ODg5XHU5ODhjXHU5ODhk''@;'; put 'put ''XHU5ODhmXHU5ODk0XHU5ODlhXHU5ODliXHU5ODllXHU5ODlmXHU5OGExXHU5OGEyXHU5OGE1XHU5OGE2XHU4NjRkXHU4NjU0XHU4NjZjXHU4NjZlXHU4NjdmXHU4NjdhXHU4NjdjXHU4NjdiXHU4NmE4XHU4NjhkXHU4NjhiXHU4NmFjXHU4NjlkXHU4NmE3XHU4NmEzXHU4NmFhXHU4NjkzXHU4''@;'; put 'put ''NmE5XHU4NmI2XHU4NmM0XHU4NmI1XHU4NmNlXHU4NmIwXHU4NmJhXHU4NmIxXHU4NmFmXHU4NmM5XHU4NmNmXHU4NmI0XHU4NmU5XHU4NmYxXHU4NmYyXHU4NmVkXHU4NmYzXHU4NmQwXHU4NzEzXHU4NmRlXHU4NmY0XHU4NmRmXHU4NmQ4XHU4NmQxXHU4NzAzXHU4NzA3XHU4NmY4XHU4NzA4''@;'; put 'put ''XHU4NzBhXHU4NzBkXHU4NzA5XHU4NzIzXHU4NzNiXHU4NzFlXHU4NzI1XHU4NzJlXHU4NzFhXHU4NzNlXHU4NzQ4XHU4NzM0XHU4NzMxXHU4NzI5XHU4NzM3XHU4NzNmXHU4NzgyXHU4NzIyXHU4NzdkXHU4NzdlXHU4NzdiXHU4NzYwXHU4NzcwXHU4NzRjXHU4NzZlXHU4NzhiXHU4NzUzXHU4''@;'; put 'put ''NzYzXHU4NzdjXHU4NzY0XHU4NzU5XHU4NzY1XHU4NzkzXHU4N2FmXHU4N2E4XHU4N2QyXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjQyXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyNDJdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjQyXVtnXV09NjE5NTIrZyxfWzYxOTUyK2ddPXlbMjQy''@;'; put 'put ''XVtnXSk7Zm9yKHlbMjQzXT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4N2M2''@;'; put 'put ''XHU4Nzg4XHU4Nzg1XHU4N2FkXHU4Nzk3XHU4NzgzXHU4N2FiXHU4N2U1XHU4N2FjXHU4N2I1XHU4N2IzXHU4N2NiXHU4N2QzXHU4N2JkXHU4N2QxXHU4N2MwXHU4N2NhXHU4N2RiXHU4N2VhXHU4N2UwXHU4N2VlXHU4ODE2XHU4ODEzXHU4N2ZlXHU4ODBhXHU4ODFiXHU4ODIxXHU4ODM5XHU4''@;'; put 'put ''ODNjXHU3ZjM2XHU3ZjQyXHU3ZjQ0XHU3ZjQ1XHU4MjEwXHU3YWZhXHU3YWZkXHU3YjA4XHU3YjAzXHU3YjA0XHU3YjE1XHU3YjBhXHU3YjJiXHU3YjBmXHU3YjQ3XHU3YjM4XHU3YjJhXHU3YjE5XHU3YjJlXHU3YjMxXHU3YjIwXHU3YjI1XHU3YjI0XHU3YjMzXHU3YjNlXHU3YjFlXHU3YjU4''@;'; put 'put ''XHU3YjVhXHU3YjQ1XHU3Yjc1XHU3YjRjXHU3YjVkXHU3YjYwXHU3YjZlXHU3YjdiXHU3YjYyXHU3YjcyXHU3YjcxXHU3YjkwXHU3YmE2XHU3YmE3XHU3YmI4XHU3YmFjXHU3YjlkXHU3YmE4XHU3Yjg1XHU3YmFhXHU3YjljXHU3YmEyXHU3YmFiXHU3YmI0XHU3YmQxXHU3YmMxXHU3YmNjXHU3''@;'; put 'put ''YmRkXHU3YmRhXHU3YmU1XHU3YmU2XHU3YmVhXHU3YzBjXHU3YmZlXHU3YmZjXHU3YzBmXHU3YzE2XHU3YzBiXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjQzXS5sZW5ndGg7KytnKTY1NTMzIT09eVsyNDNdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjQzXVtnXV09NjIyMDgrZyxfWzYy''@;'; put 'put ''MjA4K2ddPXlbMjQzXVtnXSk7Zm9yKHlbMjQ0XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHU3YzFmXHU3YzJhXHU3YzI2XHU3YzM4XHU3YzQxXHU3YzQwXHU4MWZlXHU4MjAxXHU4MjAyXHU4MjA0XHU4MWVjXHU4ODQ0XHU4MjIxXHU4MjIyXHU4MjIzXHU4MjJkXHU4MjJmXHU4MjI4XHU4MjJiXHU4MjM4XHU4MjNiXHU4MjMzXHU4MjM0XHU4MjNlXHU4MjQ0XHU4MjQ5XHU4''@;'; put 'put ''MjRiXHU4MjRmXHU4MjVhXHU4MjVmXHU4MjY4XHU4ODdlXHU4ODg1XHU4ODg4XHU4OGQ4XHU4OGRmXHU4OTVlXHU3ZjlkXHU3ZjlmXHU3ZmE3XHU3ZmFmXHU3ZmIwXHU3ZmIyXHU3YzdjXHU2NTQ5XHU3YzkxXHU3YzlkXHU3YzljXHU3YzllXHU3Y2EyXHU3Y2IyXHU3Y2JjXHU3Y2JkXHU3Y2Mx''@;'; put 'put ''XHU3Y2M3XHU3Y2NjXHU3Y2NkXHU3Y2M4XHU3Y2M1XHU3Y2Q3XHU3Y2U4XHU4MjZlXHU2NmE4XHU3ZmJmXHU3ZmNlXHU3ZmQ1XHU3ZmU1XHU3ZmUxXHU3ZmU2XHU3ZmU5XHU3ZmVlXHU3ZmYzXHU3Y2Y4XHU3ZDc3XHU3ZGE2XHU3ZGFlXHU3ZTQ3XHU3ZTliXHU5ZWI4XHU5ZWI0XHU4ZDczXHU4''@;'; put 'put ''ZDg0XHU4ZDk0XHU4ZDkxXHU4ZGIxXHU4ZDY3XHU4ZDZkXHU4YzQ3XHU4YzQ5XHU5MTRhXHU5MTUwXHU5MTRlXHU5MTRmXHU5MTY0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjQ0XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyNDRdW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjQ0XVtnXV09''@;'; put 'put ''NjI0NjQrZyxfWzYyNDY0K2ddPXlbMjQ0XVtnXSk7Zm9yKHlbMjQ1XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHU5MTYyXHU5MTYxXHU5MTcwXHU5MTY5XHU5MTZmXHU5MTdkXHU5MTdlXHU5MTcyXHU5MTc0XHU5MTc5XHU5MThjXHU5MTg1XHU5MTkwXHU5MThkXHU5MTkxXHU5MWEyXHU5MWEzXHU5MWFhXHU5MWFkXHU5MWFlXHU5MWFmXHU5MWI1XHU5MWI0XHU5MWJhXHU4''@;'; put 'put ''YzU1XHU5ZTdlXHU4ZGI4XHU4ZGViXHU4ZTA1XHU4ZTU5XHU4ZTY5XHU4ZGI1XHU4ZGJmXHU4ZGJjXHU4ZGJhXHU4ZGM0XHU4ZGQ2XHU4ZGQ3XHU4ZGRhXHU4ZGRlXHU4ZGNlXHU4ZGNmXHU4ZGRiXHU4ZGM2XHU4ZGVjXHU4ZGY3XHU4ZGY4XHU4ZGUzXHU4ZGY5XHU4ZGZiXHU4ZGU0XHU4ZTA5''@;'; put 'put ''XHU4ZGZkXHU4ZTE0XHU4ZTFkXHU4ZTFmXHU4ZTJjXHU4ZTJlXHU4ZTIzXHU4ZTJmXHU4ZTNhXHU4ZTQwXHU4ZTM5XHU4ZTM1XHU4ZTNkXHU4ZTMxXHU4ZTQ5XHU4ZTQxXHU4ZTQyXHU4ZTUxXHU4ZTUyXHU4ZTRhXHU4ZTcwXHU4ZTc2XHU4ZTdjXHU4ZTZmXHU4ZTc0XHU4ZTg1XHU4ZThmXHU4''@;'; put 'put ''ZTk0XHU4ZTkwXHU4ZTljXHU4ZTllXHU4Yzc4XHU4YzgyXHU4YzhhXHU4Yzg1XHU4Yzk4XHU4Yzk0XHU2NTliXHU4OWQ2XHU4OWRlXHU4OWRhXHU4OWRjXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjQ1XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyNDVdW2ddLmNoYXJDb2RlQXQoMCkmJihJ''@;'; put 'put ''W3lbMjQ1XVtnXV09NjI3MjArZyxfWzYyNzIwK2ddPXlbMjQ1XVtnXSk7Zm9yKHlbMjQ2XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU4OWU1XHU4OWViXHU4OWVmXHU4YTNlXHU4YjI2XHU5NzUzXHU5NmU5XHU5NmYzXHU5NmVmXHU5NzA2XHU5NzAxXHU5NzA4XHU5NzBmXHU5NzBlXHU5NzJhXHU5NzJkXHU5NzMwXHU5NzNlXHU5ZjgwXHU5ZjgzXHU5Zjg1XHU5Zjg2XHU5''@;'; put 'put ''Zjg3XHU5Zjg4XHU5Zjg5XHU5ZjhhXHU5ZjhjXHU5ZWZlXHU5ZjBiXHU5ZjBkXHU5NmI5XHU5NmJjXHU5NmJkXHU5NmNlXHU5NmQyXHU3N2JmXHU5NmUwXHU5MjhlXHU5MmFlXHU5MmM4XHU5MzNlXHU5MzZhXHU5M2NhXHU5MzhmXHU5NDNlXHU5NDZiXHU5YzdmXHU5YzgyXHU5Yzg1XHU5Yzg2''@;'; put 'put ''XHU5Yzg3XHU5Yzg4XHU3YTIzXHU5YzhiXHU5YzhlXHU5YzkwXHU5YzkxXHU5YzkyXHU5Yzk0XHU5Yzk1XHU5YzlhXHU5YzliXHU5YzllXHU5YzlmXHU5Y2EwXHU5Y2ExXHU5Y2EyXHU5Y2EzXHU5Y2E1XHU5Y2E2XHU5Y2E3XHU5Y2E4XHU5Y2E5XHU5Y2FiXHU5Y2FkXHU5Y2FlXHU5Y2IwXHU5''@;'; put 'put ''Y2IxXHU5Y2IyXHU5Y2IzXHU5Y2I0XHU5Y2I1XHU5Y2I2XHU5Y2I3XHU5Y2JhXHU5Y2JiXHU5Y2JjXHU5Y2JkXHU5Y2M0XHU5Y2M1XHU5Y2M2XHU5Y2M3XHU5Y2NhXHU5Y2NiXHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjQ2XS5sZW5ndGg7KytnKTY1NTMzIT09eVsyNDZdW2ddLmNoYXJD''@;'; put 'put ''b2RlQXQoMCkmJihJW3lbMjQ2XVtnXV09NjI5NzYrZyxfWzYyOTc2K2ddPXlbMjQ2XVtnXSk7Zm9yKHlbMjQ3XT0iXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHU5Y2NjXHU5Y2NkXHU5Y2NlXHU5Y2NmXHU5Y2QwXHU5Y2QzXHU5Y2Q0XHU5Y2Q1XHU5Y2Q3XHU5Y2Q4XHU5Y2Q5XHU5Y2RjXHU5Y2RkXHU5Y2RmXHU5Y2UyXHU5NzdjXHU5Nzg1XHU5NzkxXHU5NzkyXHU5Nzk0XHU5''@;'; put 'put ''N2FmXHU5N2FiXHU5N2EzXHU5N2IyXHU5N2I0XHU5YWIxXHU5YWIwXHU5YWI3XHU5ZTU4XHU5YWI2XHU5YWJhXHU5YWJjXHU5YWMxXHU5YWMwXHU5YWM1XHU5YWMyXHU5YWNiXHU5YWNjXHU5YWQxXHU5YjQ1XHU5YjQzXHU5YjQ3XHU5YjQ5XHU5YjQ4XHU5YjRkXHU5YjUxXHU5OGU4XHU5OTBk''@;'; put 'put ''XHU5OTJlXHU5OTU1XHU5OTU0XHU5YWRmXHU5YWUxXHU5YWU2XHU5YWVmXHU5YWViXHU5YWZiXHU5YWVkXHU5YWY5XHU5YjA4XHU5YjBmXHU5YjEzXHU5YjFmXHU5YjIzXHU5ZWJkXHU5ZWJlXHU3ZTNiXHU5ZTgyXHU5ZTg3XHU5ZTg4XHU5ZThiXHU5ZTkyXHU5M2Q2XHU5ZTlkXHU5ZTlmXHU5''@;'; put 'put ''ZWRiXHU5ZWRjXHU5ZWRkXHU5ZWUwXHU5ZWRmXHU5ZWUyXHU5ZWU5XHU5ZWU3XHU5ZWU1XHU5ZWVhXHU5ZWVmXHU5ZjIyXHU5ZjJjXHU5ZjJmXHU5ZjM5XHU5ZjM3XHU5ZjNkXHU5ZjNlXHU5ZjQ0XHVmZmZkIi5zcGxpdCgiIiksZz0wO2chPXlbMjQ3XS5sZW5ndGg7KytnKTY1NTMzIT09eVsy''@;'; put 'put ''NDddW2ddLmNoYXJDb2RlQXQoMCkmJihJW3lbMjQ3XVtnXV09NjMyMzIrZyxfWzYzMjMyK2ddPXlbMjQ3XVtnXSk7cmV0dXJue2VuYzpJLGRlYzpffX0oKSxxWzEwMDI5XT1mdW5jdGlvbigpe2Zvcih2YXIgXz0iXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxyXHgw''@;'; put 'put ''ZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9''@;'; put 'put ''flx4N2ZceGM0XHUwMTAwXHUwMTAxXHhjOVx1MDEwNFx4ZDZceGRjXHhlMVx1MDEwNVx1MDEwY1x4ZTRcdTAxMGRcdTAxMDZcdTAxMDdceGU5XHUwMTc5XHUwMTdhXHUwMTBlXHhlZFx1MDEwZlx1MDExMlx1MDExM1x1MDExNlx4ZjNcdTAxMTdceGY0XHhmNlx4ZjVceGZhXHUwMTFhXHUwMTFi''@;'; put 'put ''XHhmY1x1MjAyMFx4YjBcdTAxMThceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJcdTAxMTlceGE4XHUyMjYwXHUwMTIzXHUwMTJlXHUwMTJmXHUwMTJhXHUyMjY0XHUyMjY1XHUwMTJiXHUwMTM2XHUyMjAyXHUyMjExXHUwMTQyXHUwMTNiXHUwMTNjXHUwMTNkXHUwMTNlXHUw''@;'; put 'put ''MTM5XHUwMTNhXHUwMTQ1XHUwMTQ2XHUwMTQzXHhhY1x1MjIxYVx1MDE0NFx1MDE0N1x1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx1MDE0OFx1MDE1MFx4ZDVcdTAxNTFcdTAxNGNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHUwMTRkXHUwMTU0XHUwMTU1''@;'; put 'put ''XHUwMTU4XHUyMDM5XHUyMDNhXHUwMTU5XHUwMTU2XHUwMTU3XHUwMTYwXHUyMDFhXHUyMDFlXHUwMTYxXHUwMTVhXHUwMTViXHhjMVx1MDE2NFx1MDE2NVx4Y2RcdTAxN2RcdTAxN2VcdTAxNmFceGQzXHhkNFx1MDE2Ylx1MDE2ZVx4ZGFcdTAxNmZcdTAxNzBcdTAxNzFcdTAxNzJcdTAxNzNc''@;'; put 'put ''eGRkXHhmZFx1MDEzN1x1MDE3Ylx1MDE0MVx1MDE3Y1x1MDEyMlx1MDJjNyIsST1bXSx5PXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09Xy5jaGFyQ29kZUF0KGcpJiYoeVtfLmNoYXJBdChnKV09ZyksSVtnXT1fLmNoYXJBdChnKTtyZXR1cm57ZW5jOnksZGVjOkl9fSgpLHFbMTAwNzldPWZ1''@;'; put 'put ''bmN0aW9uKCl7Zm9yKHZhciBfPSJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9''@;'; put 'put ''Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhm''@;'; put 'put ''M1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHhkZFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVceGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4''@;'; put 'put ''YWFceGJhXHUyMTI2XHhlNlx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0NFx4YTRc''@;'; put 'put ''eGQwXHhmMFx4ZGVceGZlXHhmZFx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUwMmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1''@;'; put 'put ''MDJjNyIsST1bXSx5PXt9LGc9MDsyNTYhPWc7KytnKTY1NTMzIT09Xy5jaGFyQ29kZUF0KGcpJiYoeVtfLmNoYXJBdChnKV09ZyksSVtnXT1fLmNoYXJBdChnKTtyZXR1cm57ZW5jOnksZGVjOkl9fSgpLHFbMTAwODFdPWZ1bmN0aW9uKCl7Zm9yKHZhciBfPSJcMFx4MDFceDAyXHgwM1x4MDRc''@;'; put 'put ''eDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJj''@;'; put 'put ''ZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHg3Zlx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHUyMDIw''@;'; put 'put ''XHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx4YzZceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUyMjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZceGU2XHhmOFx4YmZceGExXHhhY1x1MjIx''@;'; put 'put ''YVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZmXHUwMTc4XHUwMTFlXHUwMTFmXHUwMTMwXHUwMTMxXHUwMTVlXHUwMTVmXHUyMDIxXHhiN1x1''@;'; put 'put ''MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1ZmZmZFx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3IixJPVtdLHk9e30sZz0wOzI1NiE9''@;'; put 'put ''ZzsrK2cpNjU1MzMhPT1fLmNoYXJDb2RlQXQoZykmJih5W18uY2hhckF0KGcpXT1nKSxJW2ddPV8uY2hhckF0KGcpO3JldHVybntlbmM6eSxkZWM6SX19KCkscVsyODU5MV09ZnVuY3Rpb24oKXtmb3IodmFyIF89IlwwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1xiXHRcblx2XGZcclx4''@;'; put 'put ''MGVceDBmXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8''@;'; put 'put ''fX5ceDdmXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2XHhh''@;'; put 'put ''N1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZceGQw''@;'; put 'put ''XHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4Zjlc''@;'; put 'put ''eGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYiLEk9W10seT17fSxnPTA7MjU2IT1nOysrZyk2NTUzMyE9PV8uY2hhckNvZGVBdChnKSYmKHlbXy5jaGFyQXQoZyldPWcpLElbZ109Xy5jaGFyQXQoZyk7cmV0dXJue2VuYzp5LGRlYzpJfX0oKSx1ZS5leHBvcnRzJiZ0eXBlb2YgRE9fTk9UX0VYUE9S''@;'; put 'put ''VF9DT0RFUEFHRT4idSImJih1ZS5leHBvcnRzPXEpLGZ1bmN0aW9uKF8sSSl7InVzZSBzdHJpY3QiO2lmKHR5cGVvZiBxPiJ1Iil7dmFyIHk9cTt1ZS5leHBvcnRzJiZ0eXBlb2YgRE9fTk9UX0VYUE9SVF9DT0RFUEFHRT4idSI/dWUuZXhwb3J0cz1JKHkpOl8uY3B0YWJsZT1JKHkpfWVsc2Ug''@;'; put 'put ''cT1JKHEpfSh0aGlzLGZ1bmN0aW9uKF8peyJ1c2Ugc3RyaWN0Ijt2YXIgST17MTIwMDoidXRmMTZsZSIsMTIwMToidXRmMTZiZSIsMTJlMzoidXRmMzJsZSIsMTIwMDE6InV0ZjMyYmUiLDE2OTY5OiJ1dGY2NGxlIiwyMDEyNzoiYXNjaWkiLDY1ZTM6InV0ZjciLDY1MDAxOiJ1dGY4In0seT1b''@;'; put 'put ''ODc0LDEyNTAsMTI1MSwxMjUyLDEyNTMsMTI1NCwxMjU1LDEyNTYsMWU0XSxnPVs5MzIsOTM2LDk0OSw5NTBdLEI9WzY1MDAxXSx3PXt9LFA9e30sRj17fSxPPXt9LHo9ZnVuY3Rpb24oail7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoail9LE49ZnVuY3Rpb24oail7cmV0dXJuIGouY2hh''@;'; put 'put ''ckNvZGVBdCgwKX0sTD10eXBlb2YgQnVmZmVyPCJ1IixLPWZ1bmN0aW9uKCl7fTtpZihMKXt2YXIgVT0hQnVmZmVyLmZyb207aWYoIVUpdHJ5e0J1ZmZlci5mcm9tKCJmb28iLCJ1dGY4Iil9Y2F0Y2h7VT0hMH1LPVU/ZnVuY3Rpb24oSCxqKXtyZXR1cm4gaj9uZXcgQnVmZmVyKEgsaik6bmV3''@;'; put 'put ''IEJ1ZmZlcihIKX06QnVmZmVyLmZyb20uYmluZChCdWZmZXIpLEJ1ZmZlci5hbGxvY1Vuc2FmZXx8KEJ1ZmZlci5hbGxvY1Vuc2FmZT1mdW5jdGlvbihIKXtyZXR1cm4gbmV3IEJ1ZmZlcihIKX0pO3ZhciBXPTEwMjQsWT1CdWZmZXIuYWxsb2NVbnNhZmUoVyksZWU9ZnVuY3Rpb24oail7dmFy''@;'; put 'put ''IEU9ZnVuY3Rpb24oail7Zm9yKHZhciBFPUJ1ZmZlci5hbGxvY1Vuc2FmZSg2NTUzNiksbT0wO208NjU1MzY7KyttKUVbbV09MDtmb3IodmFyIEE9T2JqZWN0LmtleXMoaiksb2U9QS5sZW5ndGgsdGU9MCxzZT1BW3RlXTt0ZTxvZTsrK3RlKShzZT1BW3RlXSkmJihFW3NlLmNoYXJDb2RlQXQo''@;'; put 'put ''MCldPWpbc2VdKTtyZXR1cm4gRX0oX1tqXS5lbmMpO3JldHVybiBmdW5jdGlvbihBLG9lKXt2YXIgc2UsdGU9QS5sZW5ndGgsd2U9MCxVZT0wLEplPTAsYXQ9MDtpZigic3RyaW5nIj09dHlwZW9mIEEpZm9yKHNlPUJ1ZmZlci5hbGxvY1Vuc2FmZSh0ZSksd2U9MDt3ZTx0ZTsrK3dlKXNlW3dl''@;'; put 'put ''XT1FW0EuY2hhckNvZGVBdCh3ZSldO2Vsc2UgaWYoQnVmZmVyLmlzQnVmZmVyKEEpKXtmb3Ioc2U9QnVmZmVyLmFsbG9jVW5zYWZlKDIqdGUpLFVlPTAsd2U9MDt3ZTx0ZTsrK3dlKShKZT1BW3dlXSk8MTI4P3NlW1VlKytdPUVbSmVdOkplPDIyND8oc2VbVWUrK109RVsoKDMxJkplKTw8Nikr''@;'; put 'put ''KDYzJkFbd2UrMV0pXSwrK3dlKTpKZTwyNDA/KHNlW1VlKytdPUVbKCgxNSZKZSk8PDEyKSsoKDYzJkFbd2UrMV0pPDw2KSsoNjMmQVt3ZSsyXSldLHdlKz0yKTooYXQ9KCg3JkplKTw8MTgpKygoNjMmQVt3ZSsxXSk8PDEyKSsoKDYzJkFbd2UrMl0pPDw2KSsoNjMmQVt3ZSszXSksd2UrPTMs''@;'; put 'put ''YXQ8NjU1MzY/c2VbVWUrK109RVthdF06KHNlW1VlKytdPUVbNTUyOTYrKChhdC09NjU1MzYpPj4xMCYxMDIzKV0sc2VbVWUrK109RVs1NjMyMCsoMTAyMyZhdCldKSk7c2U9c2Uuc2xpY2UoMCxVZSl9ZWxzZSBmb3Ioc2U9QnVmZmVyLmFsbG9jVW5zYWZlKHRlKSx3ZT0wO3dlPHRlOysrd2Up''@;'; put 'put ''c2Vbd2VdPUVbQVt3ZV0uY2hhckNvZGVBdCgwKV07cmV0dXJuIG9lJiYiYnVmIiE9PW9lPyJhcnIiIT09b2U/c2UudG9TdHJpbmcoImJpbmFyeSIpOltdLnNsaWNlLmNhbGwoc2UpOnNlfX0sSj1mdW5jdGlvbihqKXt2YXIgRT1fW2pdLmRlYyxtPUJ1ZmZlci5hbGxvY1Vuc2FmZSgxMzEwNzIp''@;'; put 'put ''LEE9MCxvZT0iIjtmb3IoQT0wO0E8RS5sZW5ndGg7KytBKWlmKG9lPUVbQV0pe3ZhciB0ZT1vZS5jaGFyQ29kZUF0KDApO21bMipBXT0yNTUmdGUsbVsyKkErMV09dGU+Pjh9cmV0dXJuIGZ1bmN0aW9uKHdlKXt2YXIgVWU9d2UubGVuZ3RoLEplPTAsYXQ9MDtpZigyKlVlPlcmJihXPTIqVWUs''@;'; put 'put ''WT1CdWZmZXIuYWxsb2NVbnNhZmUoVykpLEJ1ZmZlci5pc0J1ZmZlcih3ZSkpZm9yKEplPTA7SmU8VWU7SmUrKylZWzIqSmVdPW1bYXQ9Mip3ZVtKZV1dLFlbMipKZSsxXT1tW2F0KzFdO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiB3ZSlmb3IoSmU9MDtKZTxVZTtKZSsrKWF0PTIqd2UuY2hh''@;'; put 'put ''ckNvZGVBdChKZSksWVsyKkplXT1tW2F0XSxZWzIqSmUrMV09bVthdCsxXTtlbHNlIGZvcihKZT0wO0plPFVlO0plKyspWVsyKkplXT1tW2F0PTIqd2VbSmVdXSxZWzIqSmUrMV09bVthdCsxXTtyZXR1cm4gWS5zbGljZSgwLDIqVWUpLnRvU3RyaW5nKCJ1Y3MyIil9fSxyZT1mdW5jdGlvbihq''@;'; put 'put ''KXtmb3IodmFyIEU9X1tqXS5lbmMsbT1CdWZmZXIuYWxsb2NVbnNhZmUoMTMxMDcyKSxBPTA7QTwxMzEwNzI7KytBKW1bQV09MDtmb3IodmFyIG9lPU9iamVjdC5rZXlzKEUpLHRlPTAsc2U9b2VbdGVdO3RlPG9lLmxlbmd0aDsrK3RlKWlmKHNlPW9lW3RlXSl7dmFyIHdlPXNlLmNoYXJDb2Rl''@;'; put 'put ''QXQoMCk7bVsyKndlXT0yNTUmRVtzZV0sbVsyKndlKzFdPUVbc2VdPj44fXJldHVybiBmdW5jdGlvbihKZSxhdCl7dmFyIE1lPUplLmxlbmd0aCx2ZT1CdWZmZXIuYWxsb2NVbnNhZmUoMipNZSksWGU9MCxqZT0wLERlPTAsRmU9MCxSZT0wO2lmKCJzdHJpbmciPT10eXBlb2YgSmUpe2ZvcihY''@;'; put 'put ''ZT1GZT0wO1hlPE1lOysrWGUpamU9MipKZS5jaGFyQ29kZUF0KFhlKSx2ZVtGZSsrXT1tW2plKzFdfHxtW2plXSxtW2plKzFdPjAmJih2ZVtGZSsrXT1tW2plXSk7dmU9dmUuc2xpY2UoMCxGZSl9ZWxzZSBpZihCdWZmZXIuaXNCdWZmZXIoSmUpKXtmb3IoWGU9RmU9MDtYZTxNZTsrK1hlKShS''@;'; put 'put ''ZT1KZVtYZV0pPDEyOD9qZT1SZTpSZTwyMjQ/KGplPSgoMzEmUmUpPDw2KSsoNjMmSmVbWGUrMV0pLCsrWGUpOlJlPDI0MD8oamU9KCgxNSZSZSk8PDEyKSsoKDYzJkplW1hlKzFdKTw8NikrKDYzJkplW1hlKzJdKSxYZSs9Mik6KGplPSgoNyZSZSk8PDE4KSsoKDYzJkplW1hlKzFdKTw8MTIp''@;'; put 'put ''KygoNjMmSmVbWGUrMl0pPDw2KSsoNjMmSmVbWGUrM10pLFhlKz0zKSxqZTw2NTUzNj8odmVbRmUrK109bVsxKyhqZSo9MildfHxtW2plXSxtW2plKzFdPjAmJih2ZVtGZSsrXT1tW2plXSkpOih2ZVtGZSsrXT1tWzErKGplPTIqKDU1Mjk2KygoRGU9amUtNjU1MzYpPj4xMCYxMDIzKSkpXXx8''@;'; put 'put ''bVtqZV0sbVtqZSsxXT4wJiYodmVbRmUrK109bVtqZV0pLHZlW0ZlKytdPW1bMSsoamU9MiooNTYzMjArKDEwMjMmRGUpKSldfHxtW2plXSxtW2plKzFdPjAmJih2ZVtGZSsrXT1tW2plXSkpO3ZlPXZlLnNsaWNlKDAsRmUpfWVsc2UgZm9yKFhlPUZlPTA7WGU8TWU7WGUrKylqZT0yKkplW1hl''@;'; put 'put ''XS5jaGFyQ29kZUF0KDApLHZlW0ZlKytdPW1bamUrMV18fG1bamVdLG1bamUrMV0+MCYmKHZlW0ZlKytdPW1bamVdKTtyZXR1cm4gYXQmJiJidWYiIT09YXQ/ImFyciIhPT1hdD92ZS50b1N0cmluZygiYmluYXJ5Iik6W10uc2xpY2UuY2FsbCh2ZSk6dmV9fSxpZT1mdW5jdGlvbihqKXt2YXIg''@;'; put 'put ''b2UsRT1fW2pdLmRlYyxtPUJ1ZmZlci5hbGxvY1Vuc2FmZSgxMzEwNzIpLEE9MCx0ZT0wLHNlPTAsd2U9MDtmb3Iod2U9MDt3ZTw2NTUzNjsrK3dlKW1bMip3ZV09MjU1LG1bMip3ZSsxXT0yNTM7Zm9yKEE9MDtBPEUubGVuZ3RoOysrQSkob2U9RVtBXSkmJih0ZT1vZS5jaGFyQ29kZUF0KDAp''@;'; put 'put ''LG1bc2U9MipBXT0yNTUmdGUsbVtzZSsxXT10ZT4+OCk7cmV0dXJuIGZ1bmN0aW9uKEplKXt2YXIgYXQ9SmUubGVuZ3RoLE1lPUJ1ZmZlci5hbGxvY1Vuc2FmZSgyKmF0KSx2ZT0wLFhlPTAsamU9MDtpZihCdWZmZXIuaXNCdWZmZXIoSmUpKWZvcih2ZT0wO3ZlPGF0O3ZlKyspMjU1PT09bVtY''@;'; put 'put ''ZT0yKkplW3ZlXV0mJjI1Mz09PW1bWGUrMV0mJihYZT0yKigoSmVbdmVdPDw4KStKZVt2ZSsxXSksKyt2ZSksTWVbamUrK109bVtYZV0sTWVbamUrK109bVtYZSsxXTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgSmUpZm9yKHZlPTA7dmU8YXQ7dmUrKylYZT0yKkplLmNoYXJDb2RlQXQodmUp''@;'; put 'put ''LDI1NT09PW1bWGVdJiYyNTM9PT1tW1hlKzFdJiYoWGU9MiooKEplLmNoYXJDb2RlQXQodmUpPDw4KStKZS5jaGFyQ29kZUF0KHZlKzEpKSwrK3ZlKSxNZVtqZSsrXT1tW1hlXSxNZVtqZSsrXT1tW1hlKzFdO2Vsc2UgZm9yKHZlPTA7dmU8YXQ7dmUrKykyNTU9PT1tW1hlPTIqSmVbdmVdXSYm''@;'; put 'put ''MjUzPT09bVtYZSsxXSYmKFhlPTIqKChKZVt2ZV08PDgpK0plW3ZlKzFdKSwrK3ZlKSxNZVtqZSsrXT1tW1hlXSxNZVtqZSsrXT1tW1hlKzFdO3JldHVybiBNZS5zbGljZSgwLGplKS50b1N0cmluZygidWNzMiIpfX07d1s2NTAwMV09ZnVuY3Rpb24gSChqKXtpZigic3RyaW5nIj09dHlwZW9m''@;'; put 'put ''IGopcmV0dXJuIEgoai5zcGxpdCgiIikubWFwKE4pKTt2YXIgRT1qLmxlbmd0aCxtPTAsQT0wOzQqRT5XJiYoVz00KkUsWT1CdWZmZXIuYWxsb2NVbnNhZmUoVykpO3ZhciBvZT0wO0U+PTMmJjIzOT09alswXSYmMTg3PT1qWzFdJiYxOTE9PWpbMl0mJihvZT0zKTtmb3IodmFyIHRlPTEsc2U9''@;'; put 'put ''MCx3ZT0wO29lPEU7b2UrPXRlKXRlPTEsKHdlPWpbb2VdKTwxMjg/bT13ZTp3ZTwyMjQ/KG09NjQqKDMxJndlKSsoNjMmaltvZSsxXSksdGU9Mik6d2U8MjQwPyhtPSgoMTUmd2UpPDwxMikrNjQqKDYzJmpbb2UrMV0pKyg2MyZqW29lKzJdKSx0ZT0zKToobT0yNjIxNDQqKDcmd2UpKygoNjMm''@;'; put 'put ''altvZSsxXSk8PDEyKSs2NCooNjMmaltvZSsyXSkrKDYzJmpbb2UrM10pLHRlPTQpLG08NjU1MzY/KFlbc2UrK109MjU1Jm0sWVtzZSsrXT1tPj44KTooQT01NTI5NisoKG0tPTY1NTM2KT4+MTAmMTAyMyksbT01NjMyMCsoMTAyMyZtKSxZW3NlKytdPTI1NSZBLFlbc2UrK109QT4+PjgsWVtz''@;'; put 'put ''ZSsrXT0yNTUmbSxZW3NlKytdPW0+Pj44JjI1NSk7cmV0dXJuIFkuc2xpY2UoMCxzZSkudG9TdHJpbmcoInVjczIiKX0sUFs2NTAwMV09ZnVuY3Rpb24oaixFKXtpZihMJiZCdWZmZXIuaXNCdWZmZXIoaikpcmV0dXJuIEUmJiJidWYiIT09RT8iYXJyIiE9PUU/ai50b1N0cmluZygiYmluYXJ5''@;'; put 'put ''Iik6W10uc2xpY2UuY2FsbChqKTpqO3ZhciBtPWoubGVuZ3RoLEE9MCxvZT0wLHRlPTAsc2U9InN0cmluZyI9PXR5cGVvZiBqOzQqbT5XJiYoVz00Km0sWT1CdWZmZXIuYWxsb2NVbnNhZmUoVykpO2Zvcih2YXIgd2U9MDt3ZTxtOysrd2UpKEE9c2U/ai5jaGFyQ29kZUF0KHdlKTpqW3dlXS5j''@;'; put 'put ''aGFyQ29kZUF0KDApKTw9MTI3P1lbdGUrK109QTpBPD0yMDQ3PyhZW3RlKytdPTE5MisoQT4+NiksWVt0ZSsrXT0xMjgrKDYzJkEpKTpBPj01NTI5NiYmQTw9NTczNDM/KEEtPTU1Mjk2LCsrd2Usb2U9KHNlP2ouY2hhckNvZGVBdCh3ZSk6alt3ZV0uY2hhckNvZGVBdCgwKSktNTYzMjArKEE8''@;'; put 'put ''PDEwKSxZW3RlKytdPTI0MCsob2U+Pj4xOCY3KSxZW3RlKytdPTE0NCsob2U+Pj4xMiY2MyksWVt0ZSsrXT0xMjgrKG9lPj4+NiY2MyksWVt0ZSsrXT0xMjgrKDYzJm9lKSk6KFlbdGUrK109MjI0KyhBPj4xMiksWVt0ZSsrXT0xMjgrKEE+PjYmNjMpLFlbdGUrK109MTI4Kyg2MyZBKSk7cmV0''@;'; put 'put ''dXJuIEUmJiJidWYiIT09RT8iYXJyIiE9PUU/WS5zbGljZSgwLHRlKS50b1N0cmluZygiYmluYXJ5Iik6W10uc2xpY2UuY2FsbChZLDAsdGUpOlkuc2xpY2UoMCx0ZSl9fXZhciBsZT1mdW5jdGlvbigpe2lmKEwpe2lmKEZbeVswXV0pcmV0dXJuO3ZhciBqPTAsRT0wO2ZvcihqPTA7ajx5Lmxl''@;'; put 'put ''bmd0aDsrK2opX1tFPXlbal1dJiYoRltFXT1KKEUpLE9bRV09ZWUoRSkpO2ZvcihqPTA7ajxnLmxlbmd0aDsrK2opX1tFPWdbal1dJiYoRltFXT1pZShFKSxPW0VdPXJlKEUpKTtmb3Ioaj0wO2o8Qi5sZW5ndGg7KytqKXdbRT1CW2pdXSYmKEZbRV09d1tFXSksUFtFXSYmKE9bRV09UFtFXSl9''@;'; put 'put ''fSxtZT1mdW5jdGlvbihILGope3JldHVybiIifSxfZT1mdW5jdGlvbihqKXtkZWxldGUgRltqXSxkZWxldGUgT1tqXX0sU2U9e2VuY2FjaGU6bGUsZGVjYWNoZTpmdW5jdGlvbigpe2lmKEwpe2lmKCFGW3lbMF1dKXJldHVybjt5LmZvckVhY2goX2UpLGcuZm9yRWFjaChfZSksQi5mb3JFYWNo''@;'; put 'put ''KF9lKX1wPW1lLGI9MH0sc2Jjczp5LGRiY3M6Z307bGUoKTt2YXIgemU9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLHA9bWUsYj0wO3JldHVybiBfLnV0aWxzPXtkZWNvZGU6ZnVuY3Rpb24gSChqLEUpe3ZhciBtO2lm''@;'; put 'put ''KG09RltqXSlyZXR1cm4gbShFKTtpZigic3RyaW5nIj09dHlwZW9mIEUpcmV0dXJuIEgoaixFLnNwbGl0KCIiKS5tYXAoTikpO3ZhciB2ZSxBPUUubGVuZ3RoLG9lPW5ldyBBcnJheShBKSx0ZT0iIixzZT0wLHdlPTAsVWU9MSxKZT0wLGF0PTAsTWU9X1tqXSxYZT0iIjtpZihNZSYmKHZlPU1l''@;'; put 'put ''LmRlYykpZm9yKHdlPTA7d2U8QTt3ZSs9VWUpe2lmKFVlPTIsKHRlPXZlWyhFW3dlXTw8OCkrRVt3ZSsxXV0pfHwoVWU9MSx0ZT12ZVtFW3dlXV0pLCF0ZSl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBjb2RlOiAiK0Vbd2VdKyIgIitFW3dlK1VlLTFdKyIgIit3ZSsiICIrVWUrIiAi''@;'; put 'put ''K3ZlW0Vbd2VdXSk7b2VbSmUrK109dGV9ZWxzZXtpZighKFhlPUlbal0pKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIENQOiAiK2opO3N3aXRjaChYZSl7Y2FzZSJ1dGY4Ijpmb3IoQT49MyYmMjM5PT1FWzBdJiYxODc9PUVbMV0mJjE5MT09RVsyXSYmKHdlPTMpO3dlPEE7d2UrPVVl''@;'; put 'put ''KVVlPTEsRVt3ZV08MTI4P3NlPUVbd2VdOkVbd2VdPDIyND8oc2U9NjQqKDMxJkVbd2VdKSsoNjMmRVt3ZSsxXSksVWU9Mik6RVt3ZV08MjQwPyhzZT0oKDE1JkVbd2VdKTw8MTIpKzY0Kig2MyZFW3dlKzFdKSsoNjMmRVt3ZSsyXSksVWU9Myk6KHNlPTI2MjE0NCooNyZFW3dlXSkrKCg2MyZF''@;'; put 'put ''W3dlKzFdKTw8MTIpKzY0Kig2MyZFW3dlKzJdKSsoNjMmRVt3ZSszXSksVWU9NCksc2U8NjU1MzZ8fChhdD01NTI5NisoKHNlLT02NTUzNik+PjEwJjEwMjMpLHNlPTU2MzIwKygxMDIzJnNlKSxvZVtKZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKGF0KSksb2VbSmUrK109U3RyaW5nLmZyb21D''@;'; put 'put ''aGFyQ29kZShzZSk7YnJlYWs7Y2FzZSJhc2NpaSI6aWYoTCYmQnVmZmVyLmlzQnVmZmVyKEUpKXJldHVybiBFLnRvU3RyaW5nKFhlKTtmb3Iod2U9MDt3ZTxBO3dlKyspb2Vbd2VdPVN0cmluZy5mcm9tQ2hhckNvZGUoRVt3ZV0pO0plPUE7YnJlYWs7Y2FzZSJ1dGYxNmxlIjppZihBPj0yJiYy''@;'; put 'put ''NTU9PUVbMF0mJjI1ND09RVsxXSYmKHdlPTIpLEwmJkJ1ZmZlci5pc0J1ZmZlcihFKSlyZXR1cm4gRS50b1N0cmluZyhYZSk7Zm9yKFVlPTI7d2UrMTxBO3dlKz1VZSlvZVtKZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKChFW3dlKzFdPDw4KStFW3dlXSk7YnJlYWs7Y2FzZSJ1dGYxNmJlIjpm''@;'; put 'put ''b3IoQT49MiYmMjU0PT1FWzBdJiYyNTU9PUVbMV0mJih3ZT0yKSxVZT0yO3dlKzE8QTt3ZSs9VWUpb2VbSmUrK109U3RyaW5nLmZyb21DaGFyQ29kZSgoRVt3ZV08PDgpK0Vbd2UrMV0pO2JyZWFrO2Nhc2UidXRmMzJsZSI6Zm9yKEE+PTQmJjI1NT09RVswXSYmMjU0PT1FWzFdJiYwPT09RVsy''@;'; put 'put ''XSYmMD09PUVbM10mJih3ZT00KSxVZT00O3dlPEE7d2UrPVVlKShzZT0oRVt3ZSszXTw8MjQpKyhFW3dlKzJdPDwxNikrKEVbd2UrMV08PDgpK0Vbd2VdKT42NTUzNT8oc2UtPTY1NTM2LG9lW0plKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTYrKHNlPj4xMCYxMDIzKSksb2VbSmUrK109''@;'; put 'put ''U3RyaW5nLmZyb21DaGFyQ29kZSg1NjMyMCsoMTAyMyZzZSkpKTpvZVtKZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHNlKTticmVhaztjYXNlInV0ZjMyYmUiOmZvcihBPj00JiYyNTU9PUVbM10mJjI1ND09RVsyXSYmMD09PUVbMV0mJjA9PT1FWzBdJiYod2U9NCksVWU9NDt3ZTxBO3dlKz1V''@;'; put 'put ''ZSkoc2U9KEVbd2VdPDwyNCkrKEVbd2UrMV08PDE2KSsoRVt3ZSsyXTw8OCkrRVt3ZSszXSk+NjU1MzU/KHNlLT02NTUzNixvZVtKZSsrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2KyhzZT4+MTAmMTAyMykpLG9lW0plKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoNTYzMjArKDEwMjMmc2Up''@;'; put 'put ''KSk6b2VbSmUrK109U3RyaW5nLmZyb21DaGFyQ29kZShzZSk7YnJlYWs7Y2FzZSJ1dGY3Ijpmb3IoQT49NCYmNDM9PUVbMF0mJjQ3PT1FWzFdJiYxMTg9PUVbMl0mJihBPj01JiY1Nj09RVszXSYmNDU9PUVbNF0/d2U9NTooNTY9PUVbM118fDU3PT1FWzNdfHw0Mz09RVszXXx8NDc9PUVbM10p''@;'; put 'put ''JiYod2U9NCkpO3dlPEE7d2UrPVVlKWlmKDQzPT09RVt3ZV0paWYoVWU9MSw0NSE9PUVbd2UrMV0pe2Zvcig7U3RyaW5nLmZyb21DaGFyQ29kZShFW3dlK1VlXSkubWF0Y2goL1tBLVphLXowLTkrXC9dLyk7KVVlKys7dmFyIGplPTA7NDU9PT1FW3dlK1VlXSYmKCsrVWUsamU9MSk7Zm9yKHZh''@;'; put 'put ''ciBEZT1bXSxGZT0iIixrZT0wLEFlPTAsX3Q9MCxydD0wLFFlPTE7UWU8VWUtamUmJihrZT16ZS5pbmRleE9mKFN0cmluZy5mcm9tQ2hhckNvZGUoRVt3ZStRZSsrXSkpLEFlPXplLmluZGV4T2YoU3RyaW5nLmZyb21DaGFyQ29kZShFW3dlK1FlKytdKSksRGUucHVzaChrZTw8MnxBZT4+NCks''@;'; put 'put ''LTEhPT0oX3Q9emUuaW5kZXhPZihTdHJpbmcuZnJvbUNoYXJDb2RlKEVbd2UrUWUrK10pKSkmJihEZS5wdXNoKCgxNSZBZSk8PDR8X3Q+PjIpLC0xIT09KHJ0PXplLmluZGV4T2YoU3RyaW5nLmZyb21DaGFyQ29kZShFW3dlK1FlKytdKSkpKSk7KXJ0PDY0JiZEZS5wdXNoKCgzJl90KTw8Nnxy''@;'; put 'put ''dCk7Zm9yKEZlPUgoMTIwMSxEZSksUWU9MDtRZTxGZS5sZW5ndGg7KytRZSlvZVtKZSsrXT1GZS5jaGFyQXQoUWUpfWVsc2UgVWU9MixvZVtKZSsrXT0iKyI7ZWxzZSBVZT0xLG9lW0plKytdPVN0cmluZy5mcm9tQ2hhckNvZGUoRVt3ZV0pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9y''@;'; put 'put ''KCJVbnN1cHBvcnRlZCBtYWdpYzogIitqKyIgIitJW2pdKX19cmV0dXJuIG9lLnNsaWNlKDAsSmUpLmpvaW4oIiIpfSxlbmNvZGU6ZnVuY3Rpb24gSChqLEUsbSl7aWYoaj09PWImJnApcmV0dXJuIHAoRSxtKTtpZihPW2pdKXJldHVybihwPU9bYj1qXSkoRSxtKTtMJiZCdWZmZXIuaXNCdWZm''@;'; put 'put ''ZXIoRSkmJihFPUUudG9TdHJpbmcoInV0ZjgiKSk7dmFyIGF0LEE9RS5sZW5ndGgsb2U9TD9CdWZmZXIuYWxsb2NVbnNhZmUoNCpBKTpbXSx0ZT0wLHNlPTAsd2U9MCxVZT0wLEplPV9bal0sTWU9IiIsdmU9InN0cmluZyI9PXR5cGVvZiBFO2lmKEplJiYoYXQ9SmUuZW5jKSlmb3Ioc2U9MDtz''@;'; put 'put ''ZTxBOysrc2UsKyt3ZSkodGU9YXRbdmU/RS5jaGFyQXQoc2UpOkVbc2VdXSk+MjU1PyhvZVt3ZV09dGU+Pjgsb2VbKyt3ZV09MjU1JnRlKTpvZVt3ZV09MjU1JnRlO2Vsc2V7aWYoIShNZT1JW2pdKSl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBDUDogIitqKTtzd2l0Y2goTWUpe2Nh''@;'; put 'put ''c2UidXRmOCI6aWYoTCYmdmUpe3dlPShvZT1LKEUsTWUpKS5sZW5ndGg7YnJlYWt9Zm9yKHNlPTA7c2U8QTsrK3NlLCsrd2UpKHRlPXZlP0UuY2hhckNvZGVBdChzZSk6RVtzZV0uY2hhckNvZGVBdCgwKSk8PTEyNz9vZVt3ZV09dGU6dGU8PTIwNDc/KG9lW3dlXT0xOTIrKHRlPj42KSxvZVsr''@;'; put 'put ''K3dlXT0xMjgrKDYzJnRlKSk6dGU+PTU1Mjk2JiZ0ZTw9NTczNDM/KHRlLT01NTI5NixVZT0odmU/RS5jaGFyQ29kZUF0KCsrc2UpOkVbKytzZV0uY2hhckNvZGVBdCgwKSktNTYzMjArKHRlPDwxMCksb2Vbd2VdPTI0MCsoVWU+Pj4xOCY3KSxvZVsrK3dlXT0xNDQrKFVlPj4+MTImNjMpLG9l''@;'; put 'put ''Wysrd2VdPTEyOCsoVWU+Pj42JjYzKSxvZVsrK3dlXT0xMjgrKDYzJlVlKSk6KG9lW3dlXT0yMjQrKHRlPj4xMiksb2VbKyt3ZV09MTI4Kyh0ZT4+NiY2Myksb2VbKyt3ZV09MTI4Kyg2MyZ0ZSkpO2JyZWFrO2Nhc2UiYXNjaWkiOmlmKEwmJiJzdHJpbmciPT10eXBlb2YgRSl7d2U9KG9lPUso''@;'; put 'put ''RSxNZSkpLmxlbmd0aDticmVha31mb3Ioc2U9MDtzZTxBOysrc2UsKyt3ZSl7aWYoISgodGU9dmU/RS5jaGFyQ29kZUF0KHNlKTpFW3NlXS5jaGFyQ29kZUF0KDApKTw9MTI3KSl0aHJvdyBuZXcgRXJyb3IoImJhZCBhc2NpaSAiK3RlKTtvZVt3ZV09dGV9YnJlYWs7Y2FzZSJ1dGYxNmxlIjpp''@;'; put 'put ''ZihMJiYic3RyaW5nIj09dHlwZW9mIEUpe3dlPShvZT1LKEUsTWUpKS5sZW5ndGg7YnJlYWt9Zm9yKHNlPTA7c2U8QTsrK3NlKXRlPXZlP0UuY2hhckNvZGVBdChzZSk6RVtzZV0uY2hhckNvZGVBdCgwKSxvZVt3ZSsrXT0yNTUmdGUsb2Vbd2UrK109dGU+Pjg7YnJlYWs7Y2FzZSJ1dGYxNmJl''@;'; put 'put ''Ijpmb3Ioc2U9MDtzZTxBOysrc2UpdGU9dmU/RS5jaGFyQ29kZUF0KHNlKTpFW3NlXS5jaGFyQ29kZUF0KDApLG9lW3dlKytdPXRlPj44LG9lW3dlKytdPTI1NSZ0ZTticmVhaztjYXNlInV0ZjMybGUiOmZvcihzZT0wO3NlPEE7KytzZSkodGU9dmU/RS5jaGFyQ29kZUF0KHNlKTpFW3NlXS5j''@;'; put 'put ''aGFyQ29kZUF0KDApKT49NTUyOTYmJnRlPD01NzM0MyYmKHRlPTY1NTM2Kyh0ZS01NTI5Njw8MTApKyhFWysrc2VdLmNoYXJDb2RlQXQoMCktNTYzMjApKSxvZVt3ZSsrXT0yNTUmdGUsb2Vbd2UrK109MjU1Jih0ZT4+PTgpLG9lW3dlKytdPTI1NSYodGU+Pj04KSxvZVt3ZSsrXT0yNTUmKHRl''@;'; put 'put ''Pj49OCk7YnJlYWs7Y2FzZSJ1dGYzMmJlIjpmb3Ioc2U9MDtzZTxBOysrc2UpKHRlPXZlP0UuY2hhckNvZGVBdChzZSk6RVtzZV0uY2hhckNvZGVBdCgwKSk+PTU1Mjk2JiZ0ZTw9NTczNDMmJih0ZT02NTUzNisodGUtNTUyOTY8PDEwKSsoRVsrK3NlXS5jaGFyQ29kZUF0KDApLTU2MzIwKSks''@;'; put 'put ''b2Vbd2UrM109MjU1JnRlLG9lW3dlKzJdPTI1NSYodGU+Pj04KSxvZVt3ZSsxXT0yNTUmKHRlPj49OCksb2Vbd2VdPTI1NSYodGU+Pj04KSx3ZSs9NDticmVhaztjYXNlInV0ZjciOmZvcihzZT0wO3NlPEE7c2UrKyl7dmFyIFhlPXZlP0UuY2hhckF0KHNlKTpFW3NlXS5jaGFyQXQoMCk7aWYo''@;'; put 'put ''IisiIT09WGUpaWYoIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5JygpLC0uLzo/Ii5pbmRleE9mKFhlKT4tMSlvZVt3ZSsrXT1YZS5jaGFyQ29kZUF0KDApO2Vsc2V7dmFyIGplPUgoMTIwMSxYZSk7b2Vbd2UrK109NDMsb2Vb''@;'; put 'put ''d2UrK109emUuY2hhckNvZGVBdChqZVswXT4+Miksb2Vbd2UrK109emUuY2hhckNvZGVBdCgoKDMmamVbMF0pPDw0KSsoKGplWzFdfHwwKT4+NCkpLG9lW3dlKytdPXplLmNoYXJDb2RlQXQoKCgxNSZqZVsxXSk8PDIpKygoamVbMl18fDApPj42KSksb2Vbd2UrK109NDV9ZWxzZSBvZVt3ZSsr''@;'; put 'put ''XT00MyxvZVt3ZSsrXT00NX1icmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgbWFnaWM6ICIraisiICIrSVtqXSl9fXJldHVybiBvZT1vZS5zbGljZSgwLHdlKSxMP20mJiJidWYiIT09bT8iYXJyIiE9PW0/b2UudG9TdHJpbmcoImJpbmFyeSIpOltdLnNsaWNlLmNh''@;'; put 'put ''bGwob2UpOm9lOiJzdHIiPT1tP29lLm1hcCh6KS5qb2luKCIiKTpvZX0saGFzY3A6ZnVuY3Rpb24oail7cmV0dXJuISghX1tqXSYmIUlbal0pfSxtYWdpYzpJLGNhY2hlOlNlfSxffSl9LDMxNzk6KHVlLHEpPT57dmFyIF8sSSx5OyFmdW5jdGlvbihnKXtpZih0eXBlb2YgRE9fTk9UX0VYUE9S''@;'; put 'put ''VF9KU1pJUD4idSIpdWUuZXhwb3J0cz1nKCk7ZWxzZSBpZih0eXBlb2YgRE9fTk9UX0VYUE9SVF9KU1pJUD4idSIpSlNaaXBTeW5jPWcoKSxJPVtdLHZvaWQgMCE9PSh5PSJmdW5jdGlvbiI9PXR5cGVvZihfPWcpP18uYXBwbHkocSxJKTpfKSYmKHVlLmV4cG9ydHM9eSk7ZWxzZXt2YXIgQjt0''@;'; put 'put ''eXBlb2YgZ2xvYmFsVGhpczwidSI/Qj1nbG9iYWxUaGlzOnR5cGVvZiB3aW5kb3c8InUiP0I9d2luZG93OnR5cGVvZiBnbG9iYWw8InUiP0I9Z2xvYmFsOnR5cGVvZiAkPCJ1IiYmJC5nbG9iYWw/Qj0kLmdsb2JhbDp0eXBlb2Ygc2VsZjwidSImJihCPXNlbGYpLEIuSlNaaXBTeW5jPWcoKX19''@;'; put 'put ''KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIFAoRixPLHope2Z1bmN0aW9uIE4oVSxXKXtpZighT1tVXSl7aWYoIUZbVV0pe2lmKEwpcmV0dXJuIEwoVSwhMCk7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrVSsiJyIpfXZhciBYPU9bVV09e2V4cG9ydHM6e319O0Zb''@;'; put 'put ''VV1bMF0uY2FsbChYLmV4cG9ydHMsZnVuY3Rpb24oZWUpe3JldHVybiBOKEZbVV1bMV1bZWVdfHxlZSl9LFgsWC5leHBvcnRzLFAsRixPLHopfXJldHVybiBPW1VdLmV4cG9ydHN9Zm9yKHZhciBMPXZvaWQgMCxLPTA7Szx6Lmxlbmd0aDtLKyspTih6W0tdKTtyZXR1cm4gTn0oezE6W2Z1bmN0''@;'; put 'put ''aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89IjtPLmVuY29kZT1mdW5jdGlvbihOLEwpe2Zvcih2YXIgVSxXLFksWCxlZSxKLHJlLEs9IiIsaWU9MDtpZTxOLmxlbmd0''@;'; put 'put ''aDspWD0oVT1OLmNoYXJDb2RlQXQoaWUrKykpPj4yLGVlPSgzJlUpPDw0fChXPU4uY2hhckNvZGVBdChpZSsrKSk+PjQsSj0oMTUmVyk8PDJ8KFk9Ti5jaGFyQ29kZUF0KGllKyspKT4+NixyZT02MyZZLGlzTmFOKFcpP0o9cmU9NjQ6aXNOYU4oWSkmJihyZT02NCksSz1LK3ouY2hhckF0KFgp''@;'; put 'put ''K3ouY2hhckF0KGVlKSt6LmNoYXJBdChKKSt6LmNoYXJBdChyZSk7cmV0dXJuIEt9LE8uZGVjb2RlPWZ1bmN0aW9uKE4sTCl7dmFyIFcsWSxYLGVlLEoscmUsSz0iIixpZT0wO2ZvcihOPU4ucmVwbGFjZSgvW15BLVphLXowLTlcK1wvXD1dL2csIiIpO2llPE4ubGVuZ3RoOylYPXouaW5kZXhP''@;'; put 'put ''ZihOLmNoYXJBdChpZSsrKSksVz0oMTUmKGVlPXouaW5kZXhPZihOLmNoYXJBdChpZSsrKSkpKTw8NHwoSj16LmluZGV4T2YoTi5jaGFyQXQoaWUrKykpKT4+MixZPSgzJkopPDw2fChyZT16LmluZGV4T2YoTi5jaGFyQXQoaWUrKykpKSxLKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFg8PDJ8ZWU+''@;'; put 'put ''PjQpLDY0IT1KJiYoSys9U3RyaW5nLmZyb21DaGFyQ29kZShXKSksNjQhPXJlJiYoSys9U3RyaW5nLmZyb21DaGFyQ29kZShZKSk7cmV0dXJuIEt9fSx7fV0sMjpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB6KCl7dGhpcy5jb21wcmVzc2VkU2l6ZT0wLHRoaXMudW5j''@;'; put 'put ''b21wcmVzc2VkU2l6ZT0wLHRoaXMuY3JjMzI9MCx0aGlzLmNvbXByZXNzaW9uTWV0aG9kPW51bGwsdGhpcy5jb21wcmVzc2VkQ29udGVudD1udWxsfXoucHJvdG90eXBlPXtnZXRDb250ZW50OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGdldENvbXByZXNzZWRDb250ZW50OmZ1bmN0aW9uKCl7''@;'; put 'put ''cmV0dXJuIG51bGx9fSxGLmV4cG9ydHM9en0se31dLDM6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7Ty5TVE9SRT17bWFnaWM6IlwwXDAiLGNvbXByZXNzOmZ1bmN0aW9uKHope3JldHVybiB6fSx1bmNvbXByZXNzOmZ1bmN0aW9uKHope3JldHVybiB6fSxjb21wcmVzc0lucHV0VHlw''@;'; put 'put ''ZTpudWxsLHVuY29tcHJlc3NJbnB1dFR5cGU6bnVsbH0sTy5ERUZMQVRFPVAoIi4vZmxhdGUiKX0seyIuL2ZsYXRlIjo4fV0sNDpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL3V0aWxzIiksTj1bMCwxOTk2OTU5ODk0LDM5OTM5MTk3ODgsMjU2NzUyNDc5NCwxMjQ2''@;'; put 'put ''MzQxMzcsMTg4NjA1NzYxNSwzOTE1NjIxNjg1LDI2NTczOTIwMzUsMjQ5MjY4Mjc0LDIwNDQ1MDgzMjQsMzc3MjExNTIzMCwyNTQ3MTc3ODY0LDE2Mjk0MTk5NSwyMTI1NTYxMDIxLDM4ODc2MDcwNDcsMjQyODQ0NDA0OSw0OTg1MzY1NDgsMTc4OTkyNzY2Niw0MDg5MDE2NjQ4LDIyMjcwNjEy''@;'; put 'put ''MTQsNDUwNTQ4ODYxLDE4NDMyNTg2MDMsNDEwNzU4MDc1MywyMjExNjc3NjM5LDMyNTg4Mzk5MCwxNjg0Nzc3MTUyLDQyNTExMjIwNDIsMjMyMTkyNjYzNiwzMzU2MzM0ODcsMTY2MTM2NTQ2NSw0MTk1MzAyNzU1LDIzNjYxMTUzMTcsOTk3MDczMDk2LDEyODE5NTM4ODYsMzU3OTg1NTMzMiwy''@;'; put 'put ''NzI0Njg4MjQyLDEwMDY4ODgxNDUsMTI1ODYwNzY4NywzNTI0MTAxNjI5LDI3Njg5NDI0NDMsOTAxMDk3NzIyLDExMTkwMDA2ODQsMzY4NjUxNzIwNiwyODk4MDY1NzI4LDg1MzA0NDQ1MSwxMTcyMjY2MTAxLDM3MDUwMTU3NTksMjg4MjYxNjY2NSw2NTE3Njc5ODAsMTM3MzUwMzU0NiwzMzY5''@;'; put 'put ''NTU0MzA0LDMyMTgxMDQ1OTgsNTY1NTA3MjUzLDE0NTQ2MjE3MzEsMzQ4NTExMTcwNSwzMDk5NDM2MzAzLDY3MTI2Njk3NCwxNTk0MTk4MDI0LDMzMjI3MzA5MzAsMjk3MDM0NzgxMiw3OTU4MzU1MjcsMTQ4MzIzMDIyNSwzMjQ0MzY3Mjc1LDMwNjAxNDk1NjUsMTk5NDE0NjE5MiwzMTE1ODUz''@;'; put 'put ''NCwyNTYzOTA3NzcyLDQwMjM3MTc5MzAsMTkwNzQ1OTQ2NSwxMTI2MzcyMTUsMjY4MDE1MzI1MywzOTA0NDI3MDU5LDIwMTM3NzYyOTAsMjUxNzIyMDM2LDI1MTcyMTUzNzQsMzc3NTgzMDA0MCwyMTM3NjU2NzYzLDE0MTM3NjgxMywyNDM5Mjc3NzE5LDM4NjUyNzEyOTcsMTgwMjE5NTQ0NCw0''@;'; put 'put ''NzY4NjQ4NjYsMjIzODAwMTM2OCw0MDY2NTA4ODc4LDE4MTIzNzA5MjUsNDUzMDkyNzMxLDIxODE2MjUwMjUsNDExMTQ1MTIyMywxNzA2MDg4OTAyLDMxNDA0MjcwNCwyMzQ0NTMyMjAyLDQyNDAwMTc1MzIsMTY1ODY1ODI3MSwzNjY2MTk5NzcsMjM2MjY3MDMyMyw0MjI0OTk0NDA1LDEzMDM1''@;'; put 'put ''MzU5NjAsOTg0OTYxNDg2LDI3NDcwMDcwOTIsMzU2OTAzNzUzOCwxMjU2MTcwODE3LDEwMzc2MDQzMTEsMjc2NTIxMDczMywzNTU0MDc5OTk1LDExMzEwMTQ1MDYsODc5Njc5OTk2LDI5MDkyNDM0NjIsMzY2Mzc3MTg1NiwxMTQxMTI0NDY3LDg1NTg0MjI3NywyODUyODAxNjMxLDM3MDg2NDg2''@;'; put 'put ''NDksMTM0MjUzMzk0OCw2NTQ0NTkzMDYsMzE4ODM5NjA0OCwzMzczMDE1MTc0LDE0NjY0Nzk5MDksNTQ0MTc5NjM1LDMxMTA1MjM5MTMsMzQ2MjUyMjAxNSwxNTkxNjcxMDU0LDcwMjEzODc3NiwyOTY2NDYwNDUwLDMzNTI3OTk0MTIsMTUwNDkxODgwNyw3ODM1NTE4NzMsMzA4MjY0MDQ0Mywz''@;'; put 'put ''MjMzNDQyOTg5LDM5ODgyOTIzODQsMjU5NjI1NDY0Niw2MjMxNzA2OCwxOTU3ODEwODQyLDM5Mzk4NDU5NDUsMjY0NzgxNjExMSw4MTQ3MDk5NywxOTQzODAzNTIzLDM4MTQ5MTg5MzAsMjQ4OTU5NjgwNCwyMjUyNzQ0MzAsMjA1Mzc5MDM3NiwzODI2MTc1NzU1LDI0NjY5MDYwMTMsMTY3ODE2''@;'; put 'put ''NzQzLDIwOTc2NTEzNzcsNDAyNzU1MjU4MCwyMjY1NDkwMzg2LDUwMzQ0NDA3MiwxNzYyMDUwODE0LDQxNTA0MTcyNDUsMjE1NDEyOTM1NSw0MjY1MjIyMjUsMTg1MjUwNzg3OSw0Mjc1MzEzNTI2LDIzMTIzMTc5MjAsMjgyNzUzNjI2LDE3NDI1NTU4NTIsNDE4OTcwODE0MywyMzk0ODc3OTQ1''@;'; put 'put ''LDM5NzkxNzc2MywxNjIyMTgzNjM3LDM2MDQzOTA4ODgsMjcxNDg2NjU1OCw5NTM3Mjk3MzIsMTM0MDA3NjYyNiwzNTE4NzE5OTg1LDI3OTczNjA5OTksMTA2ODgyODM4MSwxMjE5NjM4ODU5LDM2MjQ3NDE4NTAsMjkzNjY3NTE0OCw5MDYxODU0NjIsMTA5MDgxMjUxMiwzNzQ3NjcyMDAzLDI4''@;'; put 'put ''MjUzNzk2NjksODI5MzI5MTM1LDExODEzMzUxNjEsMzQxMjE3NzgwNCwzMTYwODM0ODQyLDYyODA4NTQwOCwxMzgyNjA1MzY2LDM0MjMzNjkxMDksMzEzODA3ODQ2Nyw1NzA1NjIyMzMsMTQyNjQwMDgxNSwzMzE3MzE2NTQyLDI5OTg3MzM2MDgsNzMzMjM5OTU0LDE1NTUyNjE5NTYsMzI2ODkz''@;'; put 'put ''NTU5MSwzMDUwMzYwNjI1LDc1MjQ1OTQwMywxNTQxMzIwMjIxLDI2MDcwNzE5MjAsMzk2NTk3MzAzMCwxOTY5OTIyOTcyLDQwNzM1NDk4LDI2MTc4MzcyMjUsMzk0MzU3NzE1MSwxOTEzMDg3ODc3LDgzOTA4MzcxLDI1MTIzNDE2MzQsMzgwMzc0MDY5MiwyMDc1MjA4NjIyLDIxMzI2MTExMiwy''@;'; put 'put ''NDYzMjcyNjAzLDM4NTU5OTAyODUsMjA5NDg1NDA3MSwxOTg5NTg4ODEsMjI2MjAyOTAxMiw0MDU3MjYwNjEwLDE3NTkzNTk5OTIsNTM0NDE0MTkwLDIxNzY3MTg1NDEsNDEzOTMyOTExNSwxODczODM2MDAxLDQxNDY2NDU2NywyMjgyMjQ4OTM0LDQyNzkyMDAzNjgsMTcxMTY4NDU1NCwyODUy''@;'; put 'put ''ODExMTYsMjQwNTgwMTcyNyw0MTY3MjE2NzQ1LDE2MzQ0Njc3OTUsMzc2MjI5NzAxLDI2ODUwNjc4OTYsMzYwODAwNzQwNiwxMzA4OTE4NjEyLDk1NjU0MzkzOCwyODA4NTU1MTA1LDM0OTU5NTgyNjMsMTIzMTYzNjMwMSwxMDQ3NDI3MDM1LDI5MzI5NTk4MTgsMzY1NDcwMzgzNiwxMDg4MzU5''@;'; put 'put ''MjcwLDkzNjkxOGUzLDI4NDc3MTQ4OTksMzczNjgzNzgyOSwxMjAyOTAwODYzLDgxNzIzMzg5NywzMTgzMzQyMTA4LDM0MDEyMzcxMzAsMTQwNDI3NzU1Miw2MTU4MTgxNTAsMzEzNDIwNzQ5MywzNDUzNDIxMjAzLDE0MjM4NTc0NDksNjAxNDUwNDMxLDMwMDk4Mzc2MTQsMzI5NDcxMDQ1Niwx''@;'; put 'put ''NTY3MTAzNzQ2LDcxMTkyODcyNCwzMDIwNjY4NDcxLDMyNzIzODAwNjUsMTUxMDMzNDIzNSw3NTUxNjcxMTddO0YuZXhwb3J0cz1mdW5jdGlvbihLLFUpe2lmKHR5cGVvZiBLPiJ1Inx8IUsubGVuZ3RoKXJldHVybiAwO3ZhciBXPSJzdHJpbmciIT09ei5nZXRUeXBlT2YoSyk7dHlwZW9mIFU+''@;'; put 'put ''InUiJiYoVT0wKTt2YXIgZWU9MDtVPX5VO2Zvcih2YXIgSj0wLHJlPUsubGVuZ3RoO0o8cmU7SisrKWVlPVc/S1tKXTpLLmNoYXJDb2RlQXQoSiksVT1VPj4+OF5OWzI1NSYoVV5lZSldO3JldHVybn5VfX0seyIuL3V0aWxzIjoyMX1dLDU6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIHo9UCgiLi91dGlscyIpO2Z1bmN0aW9uIE4oTCl7dGhpcy5kYXRhPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLmluZGV4PTB9Ti5wcm90b3R5cGU9e2NoZWNrT2Zmc2V0OmZ1bmN0aW9uKEwpe3RoaXMuY2hlY2tJbmRleCh0aGlzLmluZGV4K0wpfSxjaGVja0luZGV4OmZ1bmN0aW9uKEwp''@;'; put 'put ''e2lmKHRoaXMubGVuZ3RoPEx8fEw8MCl0aHJvdyBuZXcgRXJyb3IoIkVuZCBvZiBkYXRhIHJlYWNoZWQgKGRhdGEgbGVuZ3RoID0gIit0aGlzLmxlbmd0aCsiLCBhc2tlZCBpbmRleCA9ICIrTCsiKS4gQ29ycnVwdGVkIHppcCA/Iil9LHNldEluZGV4OmZ1bmN0aW9uKEwpe3RoaXMuY2hlY2tJ''@;'; put 'put ''bmRleChMKSx0aGlzLmluZGV4PUx9LHNraXA6ZnVuY3Rpb24oTCl7dGhpcy5zZXRJbmRleCh0aGlzLmluZGV4K0wpfSxieXRlQXQ6ZnVuY3Rpb24oTCl7fSxyZWFkSW50OmZ1bmN0aW9uKEwpe3ZhciBVLEs9MDtmb3IodGhpcy5jaGVja09mZnNldChMKSxVPXRoaXMuaW5kZXgrTC0xO1U+PXRo''@;'; put 'put ''aXMuaW5kZXg7VS0tKUs9KEs8PDgpK3RoaXMuYnl0ZUF0KFUpO3JldHVybiB0aGlzLmluZGV4Kz1MLEt9LHJlYWRTdHJpbmc6ZnVuY3Rpb24oTCl7cmV0dXJuIHoudHJhbnNmb3JtVG8oInN0cmluZyIsdGhpcy5yZWFkRGF0YShMKSl9LHJlYWREYXRhOmZ1bmN0aW9uKEwpe30sbGFzdEluZGV4''@;'; put 'put ''T2ZTaWduYXR1cmU6ZnVuY3Rpb24oTCl7fSxyZWFkRGF0ZTpmdW5jdGlvbigpe3ZhciBMPXRoaXMucmVhZEludCg0KTtyZXR1cm4gbmV3IERhdGUoMTk4MCsoTD4+MjUmMTI3KSwoTD4+MjEmMTUpLTEsTD4+MTYmMzEsTD4+MTEmMzEsTD4+NSY2MywoMzEmTCk8PDEpfX0sRi5leHBvcnRzPU59''@;'; put 'put ''LHsiLi91dGlscyI6MjF9XSw2OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO08uYmFzZTY0PSExLE8uYmluYXJ5PSExLE8uZGlyPSExLE8uY3JlYXRlRm9sZGVycz0hMSxPLmRhdGU9bnVsbCxPLmNvbXByZXNzaW9uPW51bGwsTy5jb21tZW50PW51bGx9LHt9XSw3OltmdW5jdGlvbihQ''@;'; put 'put ''LEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vdXRpbHMiKTtPLnN0cmluZzJiaW5hcnk9ZnVuY3Rpb24oTil7cmV0dXJuIHouc3RyaW5nMmJpbmFyeShOKX0sTy5zdHJpbmcyVWludDhBcnJheT1mdW5jdGlvbihOKXtyZXR1cm4gei50cmFuc2Zvcm1UbygidWludDhhcnJheSIsTil9LE8u''@;'; put 'put ''dWludDhBcnJheTJTdHJpbmc9ZnVuY3Rpb24oTil7cmV0dXJuIHoudHJhbnNmb3JtVG8oInN0cmluZyIsTil9LE8uc3RyaW5nMkJsb2I9ZnVuY3Rpb24oTil7dmFyIEw9ei50cmFuc2Zvcm1UbygiYXJyYXlidWZmZXIiLE4pO3JldHVybiB6LmFycmF5QnVmZmVyMkJsb2IoTCl9LE8uYXJyYXlC''@;'; put 'put ''dWZmZXIyQmxvYj1mdW5jdGlvbihOKXtyZXR1cm4gei5hcnJheUJ1ZmZlcjJCbG9iKE4pfSxPLnRyYW5zZm9ybVRvPWZ1bmN0aW9uKE4sTCl7cmV0dXJuIHoudHJhbnNmb3JtVG8oTixMKX0sTy5nZXRUeXBlT2Y9ZnVuY3Rpb24oTil7cmV0dXJuIHouZ2V0VHlwZU9mKE4pfSxPLmNoZWNrU3Vw''@;'; put 'put ''cG9ydD1mdW5jdGlvbihOKXtyZXR1cm4gei5jaGVja1N1cHBvcnQoTil9LE8uTUFYX1ZBTFVFXzE2QklUUz16Lk1BWF9WQUxVRV8xNkJJVFMsTy5NQVhfVkFMVUVfMzJCSVRTPXouTUFYX1ZBTFVFXzMyQklUUyxPLnByZXR0eT1mdW5jdGlvbihOKXtyZXR1cm4gei5wcmV0dHkoTil9LE8uZmlu''@;'; put 'put ''ZENvbXByZXNzaW9uPWZ1bmN0aW9uKE4pe3JldHVybiB6LmZpbmRDb21wcmVzc2lvbihOKX0sTy5pc1JlZ0V4cD1mdW5jdGlvbihOKXtyZXR1cm4gei5pc1JlZ0V4cChOKX19LHsiLi91dGlscyI6MjF9XSw4OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PXR5cGVvZiBVaW50''@;'; put 'put ''OEFycmF5PCJ1IiYmdHlwZW9mIFVpbnQxNkFycmF5PCJ1IiYmdHlwZW9mIFVpbnQzMkFycmF5PCJ1IixOPVAoInBha28iKTtPLnVuY29tcHJlc3NJbnB1dFR5cGU9ej8idWludDhhcnJheSI6ImFycmF5IixPLmNvbXByZXNzSW5wdXRUeXBlPXo/InVpbnQ4YXJyYXkiOiJhcnJheSIsTy5tYWdp''@;'; put 'put ''Yz0iXGJcMCIsTy5jb21wcmVzcz1mdW5jdGlvbihMKXtyZXR1cm4gTi5kZWZsYXRlUmF3KEwpfSxPLnVuY29tcHJlc3M9ZnVuY3Rpb24oTCl7cmV0dXJuIE4uaW5mbGF0ZVJhdyhMKX19LHtwYWtvOjI0fV0sOTpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL2Jhc2U2''@;'; put 'put ''NCIpO2Z1bmN0aW9uIE4oTCxLKXtpZighKHRoaXMgaW5zdGFuY2VvZiBOKSlyZXR1cm4gbmV3IE4oTCxLKTt0aGlzLmZpbGVzPXt9LHRoaXMuY29tbWVudD1udWxsLHRoaXMucm9vdD0iIixMJiZ0aGlzLmxvYWQoTCxLKSx0aGlzLmNsb25lPWZ1bmN0aW9uKCl7dmFyIFU9bmV3IE47Zm9yKHZh''@;'; put 'put ''ciBXIGluIHRoaXMpImZ1bmN0aW9uIiE9dHlwZW9mIHRoaXNbV10mJihVW1ddPXRoaXNbV10pO3JldHVybiBVfX0oTi5wcm90b3R5cGU9UCgiLi9vYmplY3QiKSkubG9hZD1QKCIuL2xvYWQiKSxOLnN1cHBvcnQ9UCgiLi9zdXBwb3J0IiksTi5kZWZhdWx0cz1QKCIuL2RlZmF1bHRzIiksTi51''@;'; put 'put ''dGlscz1QKCIuL2RlcHJlY2F0ZWRQdWJsaWNVdGlscyIpLE4uYmFzZTY0PXtlbmNvZGU6ZnVuY3Rpb24oTCl7cmV0dXJuIHouZW5jb2RlKEwpfSxkZWNvZGU6ZnVuY3Rpb24oTCl7cmV0dXJuIHouZGVjb2RlKEwpfX0sTi5jb21wcmVzc2lvbnM9UCgiLi9jb21wcmVzc2lvbnMiKSxGLmV4cG9y''@;'; put 'put ''dHM9Tn0seyIuL2Jhc2U2NCI6MSwiLi9jb21wcmVzc2lvbnMiOjMsIi4vZGVmYXVsdHMiOjYsIi4vZGVwcmVjYXRlZFB1YmxpY1V0aWxzIjo3LCIuL2xvYWQiOjEwLCIuL29iamVjdCI6MTMsIi4vc3VwcG9ydCI6MTd9XSwxMDpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1Q''@;'; put 'put ''KCIuL2Jhc2U2NCIpLE49UCgiLi96aXBFbnRyaWVzIik7Ri5leHBvcnRzPWZ1bmN0aW9uKEwsSyl7dmFyIFUsVyxZLFg7Zm9yKChLPUt8fHt9KS5iYXNlNjQmJihMPXouZGVjb2RlKEwpKSxVPShXPW5ldyBOKEwsSykpLmZpbGVzLFk9MDtZPFUubGVuZ3RoO1krKyl0aGlzLmZpbGUoKFg9VVtZ''@;'; put 'put ''XSkuZmlsZU5hbWUsWC5kZWNvbXByZXNzZWQse2JpbmFyeTohMCxvcHRpbWl6ZWRCaW5hcnlTdHJpbmc6ITAsZGF0ZTpYLmRhdGUsZGlyOlguZGlyLGNvbW1lbnQ6WC5maWxlQ29tbWVudC5sZW5ndGg/WC5maWxlQ29tbWVudDpudWxsLGNyZWF0ZUZvbGRlcnM6Sy5jcmVhdGVGb2xkZXJzfSk7''@;'; put 'put ''cmV0dXJuIFcuemlwQ29tbWVudC5sZW5ndGgmJih0aGlzLmNvbW1lbnQ9Vy56aXBDb21tZW50KSx0aGlzfX0seyIuL2Jhc2U2NCI6MSwiLi96aXBFbnRyaWVzIjoyMn1dLDExOltmdW5jdGlvbihQLEYsTyl7KGZ1bmN0aW9uKHopeyJ1c2Ugc3RyaWN0Ijt2YXIgTj1mdW5jdGlvbigpe307aWYo''@;'; put 'put ''dHlwZW9mIHo8InUiKXt2YXIgTD0hei5mcm9tO2lmKCFMKXRyeXt6LmZyb20oImZvbyIsInV0ZjgiKX1jYXRjaHtMPSEwfU49TD9mdW5jdGlvbihLLFUpe3JldHVybiBVP25ldyB6KEssVSk6bmV3IHooSyl9OnouZnJvbS5iaW5kKHopLHouYWxsb2N8fCh6LmFsbG9jPWZ1bmN0aW9uKEspe3Jl''@;'; put 'put ''dHVybiBuZXcgeihLKX0pfUYuZXhwb3J0cz1mdW5jdGlvbihLLFUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgSz96LmFsbG9jKEspOk4oSyxVKX0sRi5leHBvcnRzLnRlc3Q9ZnVuY3Rpb24oSyl7cmV0dXJuIHouaXNCdWZmZXIoSyl9fSkuY2FsbCh0aGlzLHR5cGVvZiBCdWZmZXI8InUiP0J1''@;'; put 'put ''ZmZlcjp2b2lkIDApfSx7fV0sMTI6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi91aW50OEFycmF5UmVhZGVyIik7ZnVuY3Rpb24gTihMKXt0aGlzLmRhdGE9TCx0aGlzLmxlbmd0aD10aGlzLmRhdGEubGVuZ3RoLHRoaXMuaW5kZXg9MH0oTi5wcm90b3R5cGU9bmV3''@;'; put 'put ''IHopLnJlYWREYXRhPWZ1bmN0aW9uKEwpe3RoaXMuY2hlY2tPZmZzZXQoTCk7dmFyIEs9dGhpcy5kYXRhLnNsaWNlKHRoaXMuaW5kZXgsdGhpcy5pbmRleCtMKTtyZXR1cm4gdGhpcy5pbmRleCs9TCxLfSxGLmV4cG9ydHM9Tn0seyIuL3VpbnQ4QXJyYXlSZWFkZXIiOjE4fV0sMTM6W2Z1bmN0''@;'; put 'put ''aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi9zdXBwb3J0IiksTj1QKCIuL3V0aWxzIiksTD1QKCIuL2NyYzMyIiksSz1QKCIuL3NpZ25hdHVyZSIpLFU9UCgiLi9kZWZhdWx0cyIpLFc9UCgiLi9iYXNlNjQiKSxZPVAoIi4vY29tcHJlc3Npb25zIiksWD1QKCIuL2NvbXByZXNz''@;'; put 'put ''ZWRPYmplY3QiKSxlZT1QKCIuL25vZGVCdWZmZXIiKSxKPVAoIi4vdXRmOCIpLHJlPVAoIi4vc3RyaW5nV3JpdGVyIiksaWU9UCgiLi91aW50OEFycmF5V3JpdGVyIiksbGU9ZnVuY3Rpb24oail7aWYoai5fZGF0YSBpbnN0YW5jZW9mIFgmJihqLl9kYXRhPWouX2RhdGEuZ2V0Q29udGVudCgp''@;'; put 'put ''LGoub3B0aW9ucy5iaW5hcnk9ITAsai5vcHRpb25zLmJhc2U2ND0hMSwidWludDhhcnJheSI9PT1OLmdldFR5cGVPZihqLl9kYXRhKSkpe3ZhciBFPWouX2RhdGE7ai5fZGF0YT1uZXcgVWludDhBcnJheShFLmxlbmd0aCksMCE9PUUubGVuZ3RoJiZqLl9kYXRhLnNldChFLDApfXJldHVybiBq''@;'; put 'put ''Ll9kYXRhfSxtZT1mdW5jdGlvbihqKXt2YXIgRT1sZShqKTtyZXR1cm4ic3RyaW5nIj09PU4uZ2V0VHlwZU9mKEUpPyFqLm9wdGlvbnMuYmluYXJ5JiZ6Lm5vZGVidWZmZXI/ZWUoRSwidXRmLTgiKTpqLmFzQmluYXJ5KCk6RX0sX2U9ZnVuY3Rpb24oail7dmFyIEU9bGUodGhpcyk7cmV0dXJu''@;'; put 'put ''IG51bGw9PT1FfHx0eXBlb2YgRT4idSI/IiI6KHRoaXMub3B0aW9ucy5iYXNlNjQmJihFPVcuZGVjb2RlKEUpKSxFPWomJnRoaXMub3B0aW9ucy5iaW5hcnk/SC51dGY4ZGVjb2RlKEUpOk4udHJhbnNmb3JtVG8oInN0cmluZyIsRSksIWomJiF0aGlzLm9wdGlvbnMuYmluYXJ5JiYoRT1OLnRy''@;'; put 'put ''YW5zZm9ybVRvKCJzdHJpbmciLEgudXRmOGVuY29kZShFKSkpLEUpfSxUZT1mdW5jdGlvbihqLEUsbSl7dGhpcy5uYW1lPWosdGhpcy5kaXI9bS5kaXIsdGhpcy5kYXRlPW0uZGF0ZSx0aGlzLmNvbW1lbnQ9bS5jb21tZW50LHRoaXMuX2RhdGE9RSx0aGlzLm9wdGlvbnM9bSx0aGlzLl9pbml0''@;'; put 'put ''aWFsTWV0YWRhdGE9e2RpcjptLmRpcixkYXRlOm0uZGF0ZX19O1RlLnByb3RvdHlwZT17YXNUZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIF9lLmNhbGwodGhpcywhMCl9LGFzQmluYXJ5OmZ1bmN0aW9uKCl7cmV0dXJuIF9lLmNhbGwodGhpcywhMSl9LGFzTm9kZUJ1ZmZlcjpmdW5jdGlvbigpe3Zh''@;'; put 'put ''ciBqPW1lKHRoaXMpO3JldHVybiBOLnRyYW5zZm9ybVRvKCJub2RlYnVmZmVyIixqKX0sYXNVaW50OEFycmF5OmZ1bmN0aW9uKCl7dmFyIGo9bWUodGhpcyk7cmV0dXJuIE4udHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLGopfSxhc0FycmF5QnVmZmVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''YXNVaW50OEFycmF5KCkuYnVmZmVyfX07dmFyIFNlPWZ1bmN0aW9uKGosRSl7dmFyIEEsbT0iIjtmb3IoQT0wO0E8RTtBKyspbSs9U3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmaiksaj4+Pj04O3JldHVybiBtfSx6ZT1mdW5jdGlvbigpe3ZhciBFLG0saj17fTtmb3IoRT0wO0U8YXJndW1lbnRz''@;'; put 'put ''Lmxlbmd0aDtFKyspZm9yKG0gaW4gYXJndW1lbnRzW0VdKWFyZ3VtZW50c1tFXS5oYXNPd25Qcm9wZXJ0eShtKSYmdHlwZW9mIGpbbV0+InUiJiYoalttXT1hcmd1bWVudHNbRV1bbV0pO3JldHVybiBqfSxwPWZ1bmN0aW9uKGosRSxtKXt2YXIgb2UsQT1OLmdldFR5cGVPZihFKTtpZihtPWZ1''@;'; put 'put ''bmN0aW9uKGope3JldHVybiEwPT09KGo9anx8e30pLmJhc2U2NCYmbnVsbD09ai5iaW5hcnkmJihqLmJpbmFyeT0hMCksKGo9emUoaixVKSkuZGF0ZT1qLmRhdGV8fG5ldyBEYXRlLG51bGwhPT1qLmNvbXByZXNzaW9uJiYoai5jb21wcmVzc2lvbj1qLmNvbXByZXNzaW9uLnRvVXBwZXJDYXNl''@;'; put 'put ''KCkpLGp9KG0pLG0uY3JlYXRlRm9sZGVycyYmKG9lPWIoaikpJiZ4LmNhbGwodGhpcyxvZSwhMCksbS5kaXJ8fG51bGw9PT1FfHx0eXBlb2YgRT4idSIpbS5iYXNlNjQ9ITEsbS5iaW5hcnk9ITEsRT1udWxsO2Vsc2UgaWYoInN0cmluZyI9PT1BKW0uYmluYXJ5JiYhbS5iYXNlNjQmJiEwIT09''@;'; put 'put ''bS5vcHRpbWl6ZWRCaW5hcnlTdHJpbmcmJihFPU4uc3RyaW5nMmJpbmFyeShFKSk7ZWxzZXtpZihtLmJhc2U2ND0hMSxtLmJpbmFyeT0hMCwhKEF8fEUgaW5zdGFuY2VvZiBYKSl0aHJvdyBuZXcgRXJyb3IoIlRoZSBkYXRhIG9mICciK2orIicgaXMgaW4gYW4gdW5zdXBwb3J0ZWQgZm9ybWF0''@;'; put 'put ''ICEiKTsiYXJyYXlidWZmZXIiPT09QSYmKEU9Ti50cmFuc2Zvcm1UbygidWludDhhcnJheSIsRSkpfXZhciB0ZT1uZXcgVGUoaixFLG0pO3JldHVybiB0aGlzLmZpbGVzW2pdPXRlLHRlfSxiPWZ1bmN0aW9uKGopeyIvIj09ai5zbGljZSgtMSkmJihqPWouc3Vic3RyaW5nKDAsai5sZW5ndGgt''@;'; put 'put ''MSkpO3ZhciBFPWoubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4gRT4wP2ouc3Vic3RyaW5nKDAsRSk6IiJ9LHg9ZnVuY3Rpb24oaixFKXtyZXR1cm4iLyIhPWouc2xpY2UoLTEpJiYoais9Ii8iKSxFPXR5cGVvZiBFPCJ1IiYmRSx0aGlzLmZpbGVzW2pdfHxwLmNhbGwodGhpcyxqLG51bGwse2Rp''@;'; put 'put ''cjohMCxjcmVhdGVGb2xkZXJzOkV9KSx0aGlzLmZpbGVzW2pdfSxDPWZ1bmN0aW9uKGosRSl7dmFyIEEsbT1uZXcgWDtyZXR1cm4gai5fZGF0YSBpbnN0YW5jZW9mIFg/KG0udW5jb21wcmVzc2VkU2l6ZT1qLl9kYXRhLnVuY29tcHJlc3NlZFNpemUsbS5jcmMzMj1qLl9kYXRhLmNyYzMyLDA9''@;'; put 'put ''PT1tLnVuY29tcHJlc3NlZFNpemV8fGouZGlyPyhFPVkuU1RPUkUsbS5jb21wcmVzc2VkQ29udGVudD0iIixtLmNyYzMyPTApOmouX2RhdGEuY29tcHJlc3Npb25NZXRob2Q9PT1FLm1hZ2ljP20uY29tcHJlc3NlZENvbnRlbnQ9ai5fZGF0YS5nZXRDb21wcmVzc2VkQ29udGVudCgpOihBPWou''@;'; put 'put ''X2RhdGEuZ2V0Q29udGVudCgpLG0uY29tcHJlc3NlZENvbnRlbnQ9RS5jb21wcmVzcyhOLnRyYW5zZm9ybVRvKEUuY29tcHJlc3NJbnB1dFR5cGUsQSkpKSk6KCghKEE9bWUoaikpfHwwPT09QS5sZW5ndGh8fGouZGlyKSYmKEU9WS5TVE9SRSxBPSIiKSxtLnVuY29tcHJlc3NlZFNpemU9QS5s''@;'; put 'put ''ZW5ndGgsbS5jcmMzMj1MKEEpLG0uY29tcHJlc3NlZENvbnRlbnQ9RS5jb21wcmVzcyhOLnRyYW5zZm9ybVRvKEUuY29tcHJlc3NJbnB1dFR5cGUsQSkpKSxtLmNvbXByZXNzZWRTaXplPW0uY29tcHJlc3NlZENvbnRlbnQubGVuZ3RoLG0uY29tcHJlc3Npb25NZXRob2Q9RS5tYWdpYyxtfSxU''@;'; put 'put ''PWZ1bmN0aW9uKGosRSxtLEEpe3ZhciBNZSx2ZSxGZSxSZSx0ZT1OLnRyYW5zZm9ybVRvKCJzdHJpbmciLEoudXRmOGVuY29kZShFLm5hbWUpKSxzZT1FLmNvbW1lbnR8fCIiLHdlPU4udHJhbnNmb3JtVG8oInN0cmluZyIsSi51dGY4ZW5jb2RlKHNlKSksVWU9dGUubGVuZ3RoIT09RS5uYW1l''@;'; put 'put ''Lmxlbmd0aCxKZT13ZS5sZW5ndGghPT1zZS5sZW5ndGgsYXQ9RS5vcHRpb25zLFhlPSIiLGplPSIiLERlPSIiO0ZlPUUuX2luaXRpYWxNZXRhZGF0YS5kaXIhPT1FLmRpcj9FLmRpcjphdC5kaXIsTWU9KFJlPUUuX2luaXRpYWxNZXRhZGF0YS5kYXRlIT09RS5kYXRlP0UuZGF0ZTphdC5kYXRl''@;'; put 'put ''KS5nZXRIb3VycygpLE1lPDw9NixNZXw9UmUuZ2V0TWludXRlcygpLE1lPDw9NSxNZXw9UmUuZ2V0U2Vjb25kcygpLzIsdmU9UmUuZ2V0RnVsbFllYXIoKS0xOTgwLHZlPDw9NCx2ZXw9UmUuZ2V0TW9udGgoKSsxLHZlPDw9NSx2ZXw9UmUuZ2V0RGF0ZSgpLFVlJiYoamU9U2UoMSwxKStTZShM''@;'; put 'put ''KHRlKSw0KSt0ZSxYZSs9InVwIitTZShqZS5sZW5ndGgsMikramUpLEplJiYoRGU9U2UoMSwxKStTZSh0aGlzLmNyYzMyKHdlKSw0KSt3ZSxYZSs9InVjIitTZShEZS5sZW5ndGgsMikrRGUpO3ZhciBJZT0iIjtyZXR1cm4gSWUrPSJcblwwIixJZSs9VWV8fEplPyJcMFxiIjoiXDBcMCIsSWUr''@;'; put 'put ''PW0uY29tcHJlc3Npb25NZXRob2QsSWUrPVNlKE1lLDIpLEllKz1TZSh2ZSwyKSxJZSs9U2UobS5jcmMzMiw0KSxJZSs9U2UobS5jb21wcmVzc2VkU2l6ZSw0KSxJZSs9U2UobS51bmNvbXByZXNzZWRTaXplLDQpLEllKz1TZSh0ZS5sZW5ndGgsMiksSWUrPVNlKFhlLmxlbmd0aCwyKSx7Zmls''@;'; put 'put ''ZVJlY29yZDpLLkxPQ0FMX0ZJTEVfSEVBREVSK0llK3RlK1hlLGRpclJlY29yZDpLLkNFTlRSQUxfRklMRV9IRUFERVIrIlx4MTRcMCIrSWUrU2Uod2UubGVuZ3RoLDIpKyJcMFwwXDBcMCIrKCEwPT09RmU/Ilx4MTBcMFwwXDAiOiJcMFwwXDBcMCIpK1NlKEEsNCkrdGUrWGUrd2UsY29tcHJl''@;'; put 'put ''c3NlZE9iamVjdDptfX0sSD17bG9hZDpmdW5jdGlvbihqLEUpe3Rocm93IG5ldyBFcnJvcigiTG9hZCBtZXRob2QgaXMgbm90IGRlZmluZWQuIElzIHRoZSBmaWxlIGpzemlwLWxvYWQuanMgaW5jbHVkZWQgPyIpfSxmaWx0ZXI6ZnVuY3Rpb24oail7dmFyIG0sQSxvZSx0ZSxFPVtdO2Zvciht''@;'; put 'put ''IGluIHRoaXMuZmlsZXMpdGhpcy5maWxlcy5oYXNPd25Qcm9wZXJ0eShtKSYmKHRlPW5ldyBUZSgob2U9dGhpcy5maWxlc1ttXSkubmFtZSxvZS5fZGF0YSx6ZShvZS5vcHRpb25zKSksQT1tLnNsaWNlKHRoaXMucm9vdC5sZW5ndGgsbS5sZW5ndGgpLG0uc2xpY2UoMCx0aGlzLnJvb3QubGVu''@;'; put 'put ''Z3RoKT09PXRoaXMucm9vdCYmaihBLHRlKSYmRS5wdXNoKHRlKSk7cmV0dXJuIEV9LGZpbGU6ZnVuY3Rpb24oaixFLG0pe2lmKDE9PT1hcmd1bWVudHMubGVuZ3RoKXtpZihOLmlzUmVnRXhwKGopKXt2YXIgQT1qO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihvZSx0ZSl7cmV0dXJuIXRl''@;'; put 'put ''LmRpciYmQS50ZXN0KG9lKX0pfXJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihvZSx0ZSl7cmV0dXJuIXRlLmRpciYmb2U9PT1qfSlbMF18fG51bGx9cmV0dXJuIHAuY2FsbCh0aGlzLGo9dGhpcy5yb290K2osRSxtKSx0aGlzfSxmb2xkZXI6ZnVuY3Rpb24oail7aWYoIWopcmV0dXJuIHRo''@;'; put 'put ''aXM7aWYoTi5pc1JlZ0V4cChqKSlyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24ob2UsdGUpe3JldHVybiB0ZS5kaXImJmoudGVzdChvZSl9KTt2YXIgbT14LmNhbGwodGhpcyx0aGlzLnJvb3QraiksQT10aGlzLmNsb25lKCk7cmV0dXJuIEEucm9vdD1tLm5hbWUsQX0scmVtb3ZlOmZ1bmN0''@;'; put 'put ''aW9uKGope3ZhciBFPXRoaXMuZmlsZXNbaj10aGlzLnJvb3Qral07aWYoRXx8KCIvIiE9ai5zbGljZSgtMSkmJihqKz0iLyIpLEU9dGhpcy5maWxlc1tqXSksRSYmIUUuZGlyKWRlbGV0ZSB0aGlzLmZpbGVzW2pdO2Vsc2UgZm9yKHZhciBtPXRoaXMuZmlsdGVyKGZ1bmN0aW9uKG9lLHRlKXty''@;'; put 'put ''ZXR1cm4gdGUubmFtZS5zbGljZSgwLGoubGVuZ3RoKT09PWp9KSxBPTA7QTxtLmxlbmd0aDtBKyspZGVsZXRlIHRoaXMuZmlsZXNbbVtBXS5uYW1lXTtyZXR1cm4gdGhpc30sZ2VuZXJhdGU6ZnVuY3Rpb24oail7aj16ZShqfHx7fSx7YmFzZTY0OiEwLGNvbXByZXNzaW9uOiJTVE9SRSIsdHlw''@;'; put 'put ''ZToiYmFzZTY0Iixjb21tZW50Om51bGx9KSxOLmNoZWNrU3VwcG9ydChqLnR5cGUpO3ZhciBvZSx0ZSxYZSxFPVtdLG09MCxBPTAsc2U9Ti50cmFuc2Zvcm1Ubygic3RyaW5nIix0aGlzLnV0ZjhlbmNvZGUoai5jb21tZW50fHx0aGlzLmNvbW1lbnR8fCIiKSk7Zm9yKHZhciB3ZSBpbiB0aGlz''@;'; put 'put ''LmZpbGVzKWlmKHRoaXMuZmlsZXMuaGFzT3duUHJvcGVydHkod2UpKXt2YXIgVWU9dGhpcy5maWxlc1t3ZV0sSmU9VWUub3B0aW9ucy5jb21wcmVzc2lvbnx8ai5jb21wcmVzc2lvbi50b1VwcGVyQ2FzZSgpLGF0PVlbSmVdO2lmKCFhdCl0aHJvdyBuZXcgRXJyb3IoSmUrIiBpcyBub3QgYSB2''@;'; put 'put ''YWxpZCBjb21wcmVzc2lvbiBtZXRob2QgISIpO3ZhciBNZT1DLmNhbGwodGhpcyxVZSxhdCksdmU9VC5jYWxsKHRoaXMsd2UsVWUsTWUsbSk7bSs9dmUuZmlsZVJlY29yZC5sZW5ndGgrTWUuY29tcHJlc3NlZFNpemUsQSs9dmUuZGlyUmVjb3JkLmxlbmd0aCxFLnB1c2godmUpfVhlPUsuQ0VO''@;'; put 'put ''VFJBTF9ESVJFQ1RPUllfRU5EKyJcMFwwXDBcMCIrU2UoRS5sZW5ndGgsMikrU2UoRS5sZW5ndGgsMikrU2UoQSw0KStTZShtLDQpK1NlKHNlLmxlbmd0aCwyKStzZTt2YXIgamU9ai50eXBlLnRvTG93ZXJDYXNlKCk7Zm9yKG9lPSJ1aW50OGFycmF5Ij09PWplfHwiYXJyYXlidWZmZXIiPT09''@;'; put 'put ''amV8fCJibG9iIj09PWplfHwibm9kZWJ1ZmZlciI9PT1qZT9uZXcgaWUobStBK1hlLmxlbmd0aCk6bmV3IHJlKG0rQStYZS5sZW5ndGgpLHRlPTA7dGU8RS5sZW5ndGg7dGUrKylvZS5hcHBlbmQoRVt0ZV0uZmlsZVJlY29yZCksb2UuYXBwZW5kKEVbdGVdLmNvbXByZXNzZWRPYmplY3QuY29t''@;'; put 'put ''cHJlc3NlZENvbnRlbnQpO2Zvcih0ZT0wO3RlPEUubGVuZ3RoO3RlKyspb2UuYXBwZW5kKEVbdGVdLmRpclJlY29yZCk7b2UuYXBwZW5kKFhlKTt2YXIgRGU9b2UuZmluYWxpemUoKTtzd2l0Y2goai50eXBlLnRvTG93ZXJDYXNlKCkpe2Nhc2UidWludDhhcnJheSI6Y2FzZSJhcnJheWJ1ZmZl''@;'; put 'put ''ciI6Y2FzZSJub2RlYnVmZmVyIjpyZXR1cm4gTi50cmFuc2Zvcm1UbyhqLnR5cGUudG9Mb3dlckNhc2UoKSxEZSk7Y2FzZSJibG9iIjpyZXR1cm4gTi5hcnJheUJ1ZmZlcjJCbG9iKE4udHJhbnNmb3JtVG8oImFycmF5YnVmZmVyIixEZSkpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gai5iYXNlNjQ/''@;'; put 'put ''Vy5lbmNvZGUoRGUpOkRlO2RlZmF1bHQ6cmV0dXJuIERlfX0sY3JjMzI6ZnVuY3Rpb24oaixFKXtyZXR1cm4gTChqLEUpfSx1dGY4ZW5jb2RlOmZ1bmN0aW9uKGope3JldHVybiBOLnRyYW5zZm9ybVRvKCJzdHJpbmciLEoudXRmOGVuY29kZShqKSl9LHV0ZjhkZWNvZGU6ZnVuY3Rpb24oail7''@;'; put 'put ''cmV0dXJuIEoudXRmOGRlY29kZShqKX19O0YuZXhwb3J0cz1IfSx7Ii4vYmFzZTY0IjoxLCIuL2NvbXByZXNzZWRPYmplY3QiOjIsIi4vY29tcHJlc3Npb25zIjozLCIuL2NyYzMyIjo0LCIuL2RlZmF1bHRzIjo2LCIuL25vZGVCdWZmZXIiOjExLCIuL3NpZ25hdHVyZSI6MTQsIi4vc3RyaW5n''@;'; put 'put ''V3JpdGVyIjoxNiwiLi9zdXBwb3J0IjoxNywiLi91aW50OEFycmF5V3JpdGVyIjoxOSwiLi91dGY4IjoyMCwiLi91dGlscyI6MjF9XSwxNDpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0IjtPLkxPQ0FMX0ZJTEVfSEVBREVSPSJQS1x4MDNceDA0IixPLkNFTlRSQUxfRklMRV9IRUFERVI9''@;'; put 'put ''IlBLXHgwMVx4MDIiLE8uQ0VOVFJBTF9ESVJFQ1RPUllfRU5EPSJQS1x4MDVceDA2IixPLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1I9IlBLXHgwNlx4MDciLE8uWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfRU5EPSJQS1x4MDZceDA2IixPLkRBVEFfREVTQ1JJUFRPUj0iUEtceDA3''@;'; put 'put ''XGIifSx7fV0sMTU6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi9kYXRhUmVhZGVyIiksTj1QKCIuL3V0aWxzIik7ZnVuY3Rpb24gTChLLFUpe3RoaXMuZGF0YT1LLFV8fCh0aGlzLmRhdGE9Ti5zdHJpbmcyYmluYXJ5KHRoaXMuZGF0YSkpLHRoaXMubGVuZ3RoPXRo''@;'; put 'put ''aXMuZGF0YS5sZW5ndGgsdGhpcy5pbmRleD0wfShMLnByb3RvdHlwZT1uZXcgeikuYnl0ZUF0PWZ1bmN0aW9uKEspe3JldHVybiB0aGlzLmRhdGEuY2hhckNvZGVBdChLKX0sTC5wcm90b3R5cGUubGFzdEluZGV4T2ZTaWduYXR1cmU9ZnVuY3Rpb24oSyl7cmV0dXJuIHRoaXMuZGF0YS5sYXN0''@;'; put 'put ''SW5kZXhPZihLKX0sTC5wcm90b3R5cGUucmVhZERhdGE9ZnVuY3Rpb24oSyl7dGhpcy5jaGVja09mZnNldChLKTt2YXIgVT10aGlzLmRhdGEuc2xpY2UodGhpcy5pbmRleCx0aGlzLmluZGV4K0spO3JldHVybiB0aGlzLmluZGV4Kz1LLFV9LEYuZXhwb3J0cz1MfSx7Ii4vZGF0YVJlYWRlciI6''@;'; put 'put ''NSwiLi91dGlscyI6MjF9XSwxNjpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL3V0aWxzIiksTj1mdW5jdGlvbigpe3RoaXMuZGF0YT1bXX07Ti5wcm90b3R5cGU9e2FwcGVuZDpmdW5jdGlvbihMKXtMPXoudHJhbnNmb3JtVG8oInN0cmluZyIsTCksdGhpcy5kYXRh''@;'; put 'put ''LnB1c2goTCl9LGZpbmFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YS5qb2luKCIiKX19LEYuZXhwb3J0cz1OfSx7Ii4vdXRpbHMiOjIxfV0sMTc6W2Z1bmN0aW9uKFAsRixPKXsoZnVuY3Rpb24oeil7InVzZSBzdHJpY3QiO2lmKE8uYmFzZTY0PSEwLE8uYXJyYXk9ITAsTy5zdHJp''@;'; put 'put ''bmc9ITAsTy5hcnJheWJ1ZmZlcj10eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZ0eXBlb2YgVWludDhBcnJheTwidSIsTy5ub2RlYnVmZmVyPXR5cGVvZiB6PCJ1IixPLnVpbnQ4YXJyYXk9dHlwZW9mIFVpbnQ4QXJyYXk8InUiLHR5cGVvZiBBcnJheUJ1ZmZlcj4idSIpTy5ibG9iPSExO2Vsc2V7''@;'; put 'put ''dmFyIE49bmV3IEFycmF5QnVmZmVyKDApO3RyeXtPLmJsb2I9MD09PW5ldyBCbG9iKFtOXSx7dHlwZToiYXBwbGljYXRpb24vemlwIn0pLnNpemV9Y2F0Y2h7dHJ5e3ZhciBLPW5ldyh3aW5kb3cuQmxvYkJ1aWxkZXJ8fHdpbmRvdy5XZWJLaXRCbG9iQnVpbGRlcnx8d2luZG93Lk1vekJsb2JC''@;'; put 'put ''dWlsZGVyfHx3aW5kb3cuTVNCbG9iQnVpbGRlcik7Sy5hcHBlbmQoTiksTy5ibG9iPTA9PT1LLmdldEJsb2IoImFwcGxpY2F0aW9uL3ppcCIpLnNpemV9Y2F0Y2h7Ty5ibG9iPSExfX19fSkuY2FsbCh0aGlzLHR5cGVvZiBCdWZmZXI8InUiP0J1ZmZlcjp2b2lkIDApfSx7fV0sMTg6W2Z1bmN0''@;'; put 'put ''aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi9kYXRhUmVhZGVyIik7ZnVuY3Rpb24gTihMKXtMJiYodGhpcy5kYXRhPUwsdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aCx0aGlzLmluZGV4PTApfShOLnByb3RvdHlwZT1uZXcgeikuYnl0ZUF0PWZ1bmN0aW9uKEwpe3JldHVy''@;'; put 'put ''biB0aGlzLmRhdGFbTF19LE4ucHJvdG90eXBlLmxhc3RJbmRleE9mU2lnbmF0dXJlPWZ1bmN0aW9uKEwpe2Zvcih2YXIgSz1MLmNoYXJDb2RlQXQoMCksVT1MLmNoYXJDb2RlQXQoMSksVz1MLmNoYXJDb2RlQXQoMiksWT1MLmNoYXJDb2RlQXQoMyksWD10aGlzLmxlbmd0aC00O1g+PTA7LS1Y''@;'; put 'put ''KWlmKHRoaXMuZGF0YVtYXT09PUsmJnRoaXMuZGF0YVtYKzFdPT09VSYmdGhpcy5kYXRhW1grMl09PT1XJiZ0aGlzLmRhdGFbWCszXT09PVkpcmV0dXJuIFg7cmV0dXJuLTF9LE4ucHJvdG90eXBlLnJlYWREYXRhPWZ1bmN0aW9uKEwpe2lmKHRoaXMuY2hlY2tPZmZzZXQoTCksMD09PUwpcmV0''@;'; put 'put ''dXJuIG5ldyBVaW50OEFycmF5KDApO3ZhciBLPXRoaXMuZGF0YS5zdWJhcnJheSh0aGlzLmluZGV4LHRoaXMuaW5kZXgrTCk7cmV0dXJuIHRoaXMuaW5kZXgrPUwsS30sRi5leHBvcnRzPU59LHsiLi9kYXRhUmVhZGVyIjo1fV0sMTk6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFy''@;'; put 'put ''IHo9UCgiLi91dGlscyIpLE49ZnVuY3Rpb24oTCl7dGhpcy5kYXRhPW5ldyBVaW50OEFycmF5KEwpLHRoaXMuaW5kZXg9MH07Ti5wcm90b3R5cGU9e2FwcGVuZDpmdW5jdGlvbihMKXswIT09TC5sZW5ndGgmJihMPXoudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLEwpLHRoaXMuZGF0YS5zZXQo''@;'; put 'put ''TCx0aGlzLmluZGV4KSx0aGlzLmluZGV4Kz1MLmxlbmd0aCl9LGZpbmFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZGF0YX19LEYuZXhwb3J0cz1OfSx7Ii4vdXRpbHMiOjIxfV0sMjA6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7Zm9yKHZhciB6PVAoIi4vdXRpbHMiKSxOPVAo''@;'; put 'put ''Ii4vc3VwcG9ydCIpLEw9UCgiLi9ub2RlQnVmZmVyIiksSz1uZXcgQXJyYXkoMjU2KSxVPTA7VTwyNTY7VSsrKUtbVV09VT49MjUyPzY6VT49MjQ4PzU6VT49MjQwPzQ6VT49MjI0PzM6VT49MTkyPzI6MTtLWzI1NF09S1syNTRdPTE7dmFyIFk9ZnVuY3Rpb24oZWUsSil7dmFyIHJlO2Zvcigo''@;'; put 'put ''Sj1KfHxlZS5sZW5ndGgpPmVlLmxlbmd0aCYmKEo9ZWUubGVuZ3RoKSxyZT1KLTE7cmU+PTAmJjEyOD09KDE5MiZlZVtyZV0pOylyZS0tO3JldHVybiByZTwwfHwwPT09cmU/SjpyZStLW2VlW3JlXV0+Sj9yZTpKfSxYPWZ1bmN0aW9uKGVlKXt2YXIgcmUsaWUsbGUsbWUsX2U9ZWUubGVuZ3Ro''@;'; put 'put ''LFRlPW5ldyBBcnJheSgyKl9lKTtmb3IoaWU9MCxyZT0wO3JlPF9lOylpZigobGU9ZWVbcmUrK10pPDEyOClUZVtpZSsrXT1sZTtlbHNlIGlmKChtZT1LW2xlXSk+NClUZVtpZSsrXT02NTUzMyxyZSs9bWUtMTtlbHNle2ZvcihsZSY9Mj09PW1lPzMxOjM9PT1tZT8xNTo3O21lPjEmJnJlPF9l''@;'; put 'put ''OylsZT1sZTw8Nnw2MyZlZVtyZSsrXSxtZS0tO21lPjE/VGVbaWUrK109NjU1MzM6bGU8NjU1MzY/VGVbaWUrK109bGU6KFRlW2llKytdPTU1Mjk2fChsZS09NjU1MzYpPj4xMCYxMDIzLFRlW2llKytdPTU2MzIwfDEwMjMmbGUpfXJldHVybiBUZS5sZW5ndGghPT1pZSYmKFRlLnN1YmFycmF5''@;'; put 'put ''P1RlPVRlLnN1YmFycmF5KDAsaWUpOlRlLmxlbmd0aD1pZSksei5hcHBseUZyb21DaGFyQ29kZShUZSl9O08udXRmOGVuY29kZT1mdW5jdGlvbihKKXtyZXR1cm4gTi5ub2RlYnVmZmVyP0woSiwidXRmLTgiKTpmdW5jdGlvbihlZSl7dmFyIEoscmUsaWUsbGUsbWUsX2U9ZWUubGVuZ3RoLFRl''@;'; put 'put ''PTA7Zm9yKGxlPTA7bGU8X2U7bGUrKyk1NTI5Nj09KDY0NTEyJihyZT1lZS5jaGFyQ29kZUF0KGxlKSkpJiZsZSsxPF9lJiY1NjMyMD09KDY0NTEyJihpZT1lZS5jaGFyQ29kZUF0KGxlKzEpKSkmJihyZT02NTUzNisocmUtNTUyOTY8PDEwKSsoaWUtNTYzMjApLGxlKyspLFRlKz1yZTwxMjg/''@;'; put 'put ''MTpyZTwyMDQ4PzI6cmU8NjU1MzY/Mzo0O2ZvcihKPU4udWludDhhcnJheT9uZXcgVWludDhBcnJheShUZSk6bmV3IEFycmF5KFRlKSxtZT0wLGxlPTA7bWU8VGU7bGUrKyk1NTI5Nj09KDY0NTEyJihyZT1lZS5jaGFyQ29kZUF0KGxlKSkpJiZsZSsxPF9lJiY1NjMyMD09KDY0NTEyJihpZT1l''@;'; put 'put ''ZS5jaGFyQ29kZUF0KGxlKzEpKSkmJihyZT02NTUzNisocmUtNTUyOTY8PDEwKSsoaWUtNTYzMjApLGxlKyspLHJlPDEyOD9KW21lKytdPXJlOnJlPDIwNDg/KEpbbWUrK109MTkyfHJlPj4+NixKW21lKytdPTEyOHw2MyZyZSk6cmU8NjU1MzY/KEpbbWUrK109MjI0fHJlPj4+MTIsSlttZSsr''@;'; put 'put ''XT0xMjh8cmU+Pj42JjYzLEpbbWUrK109MTI4fDYzJnJlKTooSlttZSsrXT0yNDB8cmU+Pj4xOCxKW21lKytdPTEyOHxyZT4+PjEyJjYzLEpbbWUrK109MTI4fHJlPj4+NiY2MyxKW21lKytdPTEyOHw2MyZyZSk7cmV0dXJuIEp9KEopfSxPLnV0ZjhkZWNvZGU9ZnVuY3Rpb24oSil7aWYoTi5u''@;'; put 'put ''b2RlYnVmZmVyKXJldHVybiB6LnRyYW5zZm9ybVRvKCJub2RlYnVmZmVyIixKKS50b1N0cmluZygidXRmLTgiKTtmb3IodmFyIHJlPVtdLGllPTAsbGU9KEo9ei50cmFuc2Zvcm1UbyhOLnVpbnQ4YXJyYXk/InVpbnQ4YXJyYXkiOiJhcnJheSIsSikpLmxlbmd0aDtpZTxsZTspe3ZhciBfZT1Z''@;'; put 'put ''KEosTWF0aC5taW4oaWUrNjU1MzYsbGUpKTtyZS5wdXNoKFgoTi51aW50OGFycmF5P0ouc3ViYXJyYXkoaWUsX2UpOkouc2xpY2UoaWUsX2UpKSksaWU9X2V9cmV0dXJuIHJlLmpvaW4oIiIpfX0seyIuL25vZGVCdWZmZXIiOjExLCIuL3N1cHBvcnQiOjE3LCIuL3V0aWxzIjoyMX1dLDIxOltm''@;'; put 'put ''dW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PVAoIi4vc3VwcG9ydCIpLE49UCgiLi9jb21wcmVzc2lvbnMiKSxMPVAoIi4vbm9kZUJ1ZmZlciIpO2Z1bmN0aW9uIEsoZWUpe3JldHVybiBlZX1mdW5jdGlvbiBVKGVlLEope2Zvcih2YXIgcmU9MDtyZTxlZS5sZW5ndGg7KytyZSlK''@;'; put 'put ''W3JlXT0yNTUmZWUuY2hhckNvZGVBdChyZSk7cmV0dXJuIEp9ZnVuY3Rpb24gVyhlZSl7dmFyIEo9NjU1MzYscmU9W10saWU9ZWUubGVuZ3RoLGxlPU8uZ2V0VHlwZU9mKGVlKSxtZT0wLF9lPSEwO3RyeXtzd2l0Y2gobGUpe2Nhc2UidWludDhhcnJheSI6U3RyaW5nLmZyb21DaGFyQ29kZS5h''@;'; put 'put ''cHBseShudWxsLG5ldyBVaW50OEFycmF5KDApKTticmVhaztjYXNlIm5vZGVidWZmZXIiOlN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxMKDApKX19Y2F0Y2h7X2U9ITF9aWYoIV9lKXtmb3IodmFyIFRlPSIiLFNlPTA7U2U8ZWUubGVuZ3RoO1NlKyspVGUrPVN0cmluZy5mcm9tQ2hh''@;'; put 'put ''ckNvZGUoZWVbU2VdKTtyZXR1cm4gVGV9Zm9yKDttZTxpZSYmSj4xOyl0cnl7cmUucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsImFycmF5Ij09PWxlfHwibm9kZWJ1ZmZlciI9PT1sZT9lZS5zbGljZShtZSxNYXRoLm1pbihtZStKLGllKSk6ZWUuc3ViYXJyYXkobWUsTWF0''@;'; put 'put ''aC5taW4obWUrSixpZSkpKSksbWUrPUp9Y2F0Y2h7Sj1NYXRoLmZsb29yKEovMil9cmV0dXJuIHJlLmpvaW4oIiIpfWZ1bmN0aW9uIFkoZWUsSil7Zm9yKHZhciByZT0wO3JlPGVlLmxlbmd0aDtyZSsrKUpbcmVdPWVlW3JlXTtyZXR1cm4gSn1PLnN0cmluZzJiaW5hcnk9ZnVuY3Rpb24oZWUp''@;'; put 'put ''e2Zvcih2YXIgSj0iIixyZT0wO3JlPGVlLmxlbmd0aDtyZSsrKUorPVN0cmluZy5mcm9tQ2hhckNvZGUoMjU1JmVlLmNoYXJDb2RlQXQocmUpKTtyZXR1cm4gSn0sTy5hcnJheUJ1ZmZlcjJCbG9iPWZ1bmN0aW9uKGVlKXtPLmNoZWNrU3VwcG9ydCgiYmxvYiIpO3RyeXtyZXR1cm4gbmV3IEJs''@;'; put 'put ''b2IoW2VlXSx7dHlwZToiYXBwbGljYXRpb24vemlwIn0pfWNhdGNoe3RyeXt2YXIgcmU9bmV3KHdpbmRvdy5CbG9iQnVpbGRlcnx8d2luZG93LldlYktpdEJsb2JCdWlsZGVyfHx3aW5kb3cuTW96QmxvYkJ1aWxkZXJ8fHdpbmRvdy5NU0Jsb2JCdWlsZGVyKTtyZXR1cm4gcmUuYXBwZW5kKGVl''@;'; put 'put ''KSxyZS5nZXRCbG9iKCJhcHBsaWNhdGlvbi96aXAiKX1jYXRjaHt0aHJvdyBuZXcgRXJyb3IoIkJ1ZyA6IGNhbid0IGNvbnN0cnVjdCB0aGUgQmxvYi4iKX19fSxPLmFwcGx5RnJvbUNoYXJDb2RlPVc7dmFyIFg9e307WC5zdHJpbmc9e3N0cmluZzpLLGFycmF5OmZ1bmN0aW9uKGVlKXtyZXR1''@;'; put 'put ''cm4gVShlZSxuZXcgQXJyYXkoZWUubGVuZ3RoKSl9LGFycmF5YnVmZmVyOmZ1bmN0aW9uKGVlKXtyZXR1cm4gWC5zdHJpbmcudWludDhhcnJheShlZSkuYnVmZmVyfSx1aW50OGFycmF5OmZ1bmN0aW9uKGVlKXtyZXR1cm4gVShlZSxuZXcgVWludDhBcnJheShlZS5sZW5ndGgpKX0sbm9kZWJ1''@;'; put 'put ''ZmZlcjpmdW5jdGlvbihlZSl7cmV0dXJuIFUoZWUsTChlZS5sZW5ndGgpKX19LFguYXJyYXk9e3N0cmluZzpXLGFycmF5OkssYXJyYXlidWZmZXI6ZnVuY3Rpb24oZWUpe3JldHVybiBuZXcgVWludDhBcnJheShlZSkuYnVmZmVyfSx1aW50OGFycmF5OmZ1bmN0aW9uKGVlKXtyZXR1cm4gbmV3''@;'; put 'put ''IFVpbnQ4QXJyYXkoZWUpfSxub2RlYnVmZmVyOmZ1bmN0aW9uKGVlKXtyZXR1cm4gTChlZSl9fSxYLmFycmF5YnVmZmVyPXtzdHJpbmc6ZnVuY3Rpb24oZWUpe3JldHVybiBXKG5ldyBVaW50OEFycmF5KGVlKSl9LGFycmF5OmZ1bmN0aW9uKGVlKXtyZXR1cm4gWShuZXcgVWludDhBcnJheShl''@;'; put 'put ''ZSksbmV3IEFycmF5KGVlLmJ5dGVMZW5ndGgpKX0sYXJyYXlidWZmZXI6Syx1aW50OGFycmF5OmZ1bmN0aW9uKGVlKXtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZWUpfSxub2RlYnVmZmVyOmZ1bmN0aW9uKGVlKXtyZXR1cm4gTChuZXcgVWludDhBcnJheShlZSkpfX0sWC51aW50OGFycmF5PXtz''@;'; put 'put ''dHJpbmc6VyxhcnJheTpmdW5jdGlvbihlZSl7cmV0dXJuIFkoZWUsbmV3IEFycmF5KGVlLmxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpmdW5jdGlvbihlZSl7cmV0dXJuIGVlLmJ1ZmZlcn0sdWludDhhcnJheTpLLG5vZGVidWZmZXI6ZnVuY3Rpb24oZWUpe3JldHVybiBMKGVlKX19LFgubm9kZWJ1''@;'; put 'put ''ZmZlcj17c3RyaW5nOlcsYXJyYXk6ZnVuY3Rpb24oZWUpe3JldHVybiBZKGVlLG5ldyBBcnJheShlZS5sZW5ndGgpKX0sYXJyYXlidWZmZXI6ZnVuY3Rpb24oZWUpe3JldHVybiBYLm5vZGVidWZmZXIudWludDhhcnJheShlZSkuYnVmZmVyfSx1aW50OGFycmF5OmZ1bmN0aW9uKGVlKXtyZXR1''@;'; put 'put ''cm4gWShlZSxuZXcgVWludDhBcnJheShlZS5sZW5ndGgpKX0sbm9kZWJ1ZmZlcjpLfSxPLnRyYW5zZm9ybVRvPWZ1bmN0aW9uKGVlLEope2lmKEp8fChKPSIiKSwhZWUpcmV0dXJuIEo7Ty5jaGVja1N1cHBvcnQoZWUpO3ZhciByZT1PLmdldFR5cGVPZihKKTtyZXR1cm4gWFtyZV1bZWVdKEop''@;'; put 'put ''fSxPLmdldFR5cGVPZj1mdW5jdGlvbihlZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlZT8ic3RyaW5nIjoiW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGVlKT8iYXJyYXkiOnoubm9kZWJ1ZmZlciYmTC50ZXN0KGVlKT8ibm9kZWJ1ZmZlciI6ei51''@;'; put 'put ''aW50OGFycmF5JiZlZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXk/InVpbnQ4YXJyYXkiOnouYXJyYXlidWZmZXImJmVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/ImFycmF5YnVmZmVyIjp2b2lkIDB9LE8uY2hlY2tTdXBwb3J0PWZ1bmN0aW9uKGVlKXtpZigheltlZS50b0xvd2VyQ2FzZSgpXSl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoZWUrIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3NlciIpfSxPLk1BWF9WQUxVRV8xNkJJVFM9NjU1MzUsTy5NQVhfVkFMVUVfMzJCSVRTPS0xLE8ucHJldHR5PWZ1bmN0aW9uKGVlKXt2YXIgcmUsaWUsSj0iIjtmb3IoaWU9MDtpZTwoZWV8fCIiKS5sZW5n''@;'; put 'put ''dGg7aWUrKylKKz0iXFx4IisoKHJlPWVlLmNoYXJDb2RlQXQoaWUpKTwxNj8iMCI6IiIpK3JlLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO3JldHVybiBKfSxPLmZpbmRDb21wcmVzc2lvbj1mdW5jdGlvbihlZSl7Zm9yKHZhciBKIGluIE4paWYoTi5oYXNPd25Qcm9wZXJ0eShKKSYmTltK''@;'; put 'put ''XS5tYWdpYz09PWVlKXJldHVybiBOW0pdO3JldHVybiBudWxsfSxPLmlzUmVnRXhwPWZ1bmN0aW9uKGVlKXtyZXR1cm4iW29iamVjdCBSZWdFeHBdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlZSl9fSx7Ii4vY29tcHJlc3Npb25zIjozLCIuL25vZGVCdWZmZXIiOjExLCIu''@;'; put 'put ''L3N1cHBvcnQiOjE3fV0sMjI6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi9zdHJpbmdSZWFkZXIiKSxOPVAoIi4vbm9kZUJ1ZmZlclJlYWRlciIpLEw9UCgiLi91aW50OEFycmF5UmVhZGVyIiksSz1QKCIuL3V0aWxzIiksVT1QKCIuL3NpZ25hdHVyZSIpLFc9UCgi''@;'; put 'put ''Li96aXBFbnRyeSIpLFk9UCgiLi9zdXBwb3J0IiksWD1QKCIuL29iamVjdCIpO2Z1bmN0aW9uIGVlKEoscmUpe3RoaXMuZmlsZXM9W10sdGhpcy5sb2FkT3B0aW9ucz1yZSxKJiZ0aGlzLmxvYWQoSil9ZWUucHJvdG90eXBlPXtjaGVja1NpZ25hdHVyZTpmdW5jdGlvbihKKXt2YXIgcmU9dGhp''@;'; put 'put ''cy5yZWFkZXIucmVhZFN0cmluZyg0KTtpZihyZSE9PUopdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIG9yIGJ1ZyA6IHVuZXhwZWN0ZWQgc2lnbmF0dXJlICgiK0sucHJldHR5KHJlKSsiLCBleHBlY3RlZCAiK0sucHJldHR5KEopKyIpIil9LHJlYWRCbG9ja0VuZE9mQ2VudHJhbDpm''@;'; put 'put ''dW5jdGlvbigpe3RoaXMuZGlza051bWJlcj10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuZGlza1dpdGhDZW50cmFsRGlyU3RhcnQ9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzT25UaGlzRGlzaz10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuY2Vu''@;'; put 'put ''dHJhbERpclJlY29yZHM9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmNlbnRyYWxEaXJTaXplPXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5jZW50cmFsRGlyT2Zmc2V0PXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy56aXBDb21tZW50TGVuZ3RoPXRoaXMucmVhZGVyLnJlYWRJ''@;'; put 'put ''bnQoMiksdGhpcy56aXBDb21tZW50PXRoaXMucmVhZGVyLnJlYWRTdHJpbmcodGhpcy56aXBDb21tZW50TGVuZ3RoKSx0aGlzLnppcENvbW1lbnQ9WC51dGY4ZGVjb2RlKHRoaXMuemlwQ29tbWVudCl9LHJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsOmZ1bmN0aW9uKCl7dGhpcy56aXA2NEVu''@;'; put 'put ''ZE9mQ2VudHJhbFNpemU9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLnZlcnNpb25NYWRlQnk9dGhpcy5yZWFkZXIucmVhZFN0cmluZygyKSx0aGlzLnZlcnNpb25OZWVkZWQ9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmRpc2tOdW1iZXI9dGhpcy5yZWFkZXIucmVhZEludCg0KSx0''@;'; put 'put ''aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0PXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5jZW50cmFsRGlyUmVjb3Jkc09uVGhpc0Rpc2s9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5jZW50cmFs''@;'; put 'put ''RGlyU2l6ZT10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuY2VudHJhbERpck9mZnNldD10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuemlwNjRFeHRlbnNpYmxlRGF0YT17fTtmb3IodmFyIGllLGxlLG1lLEo9dGhpcy56aXA2NEVuZE9mQ2VudHJhbFNpemUtNDQ7MDxKOylpZT10aGlz''@;'; put 'put ''LnJlYWRlci5yZWFkSW50KDIpLGxlPXRoaXMucmVhZGVyLnJlYWRJbnQoNCksbWU9dGhpcy5yZWFkZXIucmVhZFN0cmluZyhsZSksdGhpcy56aXA2NEV4dGVuc2libGVEYXRhW2llXT17aWQ6aWUsbGVuZ3RoOmxlLHZhbHVlOm1lfX0scmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWxMb2NhdG9y''@;'; put 'put ''OmZ1bmN0aW9uKCl7aWYodGhpcy5kaXNrV2l0aFppcDY0Q2VudHJhbERpclN0YXJ0PXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5yZWxhdGl2ZU9mZnNldEVuZE9mWmlwNjRDZW50cmFsRGlyPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5kaXNrc0NvdW50PXRoaXMucmVhZGVyLnJl''@;'; put 'put ''YWRJbnQoNCksdGhpcy5kaXNrc0NvdW50PjEpdGhyb3cgbmV3IEVycm9yKCJNdWx0aS12b2x1bWVzIHppcCBhcmUgbm90IHN1cHBvcnRlZCIpfSxyZWFkTG9jYWxGaWxlczpmdW5jdGlvbigpe3ZhciBKLHJlO2ZvcihKPTA7Sjx0aGlzLmZpbGVzLmxlbmd0aDtKKyspdGhpcy5yZWFkZXIuc2V0''@;'; put 'put ''SW5kZXgoKHJlPXRoaXMuZmlsZXNbSl0pLmxvY2FsSGVhZGVyT2Zmc2V0KSx0aGlzLmNoZWNrU2lnbmF0dXJlKFUuTE9DQUxfRklMRV9IRUFERVIpLHJlLnJlYWRMb2NhbFBhcnQodGhpcy5yZWFkZXIpLHJlLmhhbmRsZVVURjgoKX0scmVhZENlbnRyYWxEaXI6ZnVuY3Rpb24oKXt2YXIgSjtm''@;'; put 'put ''b3IodGhpcy5yZWFkZXIuc2V0SW5kZXgodGhpcy5jZW50cmFsRGlyT2Zmc2V0KTt0aGlzLnJlYWRlci5yZWFkU3RyaW5nKDQpPT09VS5DRU5UUkFMX0ZJTEVfSEVBREVSOykoSj1uZXcgVyh7emlwNjQ6dGhpcy56aXA2NH0sdGhpcy5sb2FkT3B0aW9ucykpLnJlYWRDZW50cmFsUGFydCh0aGlz''@;'; put 'put ''LnJlYWRlciksdGhpcy5maWxlcy5wdXNoKEopfSxyZWFkRW5kT2ZDZW50cmFsOmZ1bmN0aW9uKCl7dmFyIEo9dGhpcy5yZWFkZXIubGFzdEluZGV4T2ZTaWduYXR1cmUoVS5DRU5UUkFMX0RJUkVDVE9SWV9FTkQpO2lmKC0xPT09Sil0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAgOiBj''@;'; put 'put ''YW4ndCBmaW5kIGVuZCBvZiBjZW50cmFsIGRpcmVjdG9yeSIpO2lmKHRoaXMucmVhZGVyLnNldEluZGV4KEopLHRoaXMuY2hlY2tTaWduYXR1cmUoVS5DRU5UUkFMX0RJUkVDVE9SWV9FTkQpLHRoaXMucmVhZEJsb2NrRW5kT2ZDZW50cmFsKCksdGhpcy5kaXNrTnVtYmVyPT09Sy5NQVhfVkFM''@;'; put 'put ''VUVfMTZCSVRTfHx0aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0PT09Sy5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzT25UaGlzRGlzaz09PUsuTUFYX1ZBTFVFXzE2QklUU3x8dGhpcy5jZW50cmFsRGlyUmVjb3Jkcz09PUsuTUFYX1ZBTFVFXzE2QklUU3x8dGhp''@;'; put 'put ''cy5jZW50cmFsRGlyU2l6ZT09PUsuTUFYX1ZBTFVFXzMyQklUU3x8dGhpcy5jZW50cmFsRGlyT2Zmc2V0PT09Sy5NQVhfVkFMVUVfMzJCSVRTKXtpZih0aGlzLnppcDY0PSEwLC0xPT09KEo9dGhpcy5yZWFkZXIubGFzdEluZGV4T2ZTaWduYXR1cmUoVS5aSVA2NF9DRU5UUkFMX0RJUkVDVE9S''@;'; put 'put ''WV9MT0NBVE9SKSkpdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIDogY2FuJ3QgZmluZCB0aGUgWklQNjQgZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5IGxvY2F0b3IiKTt0aGlzLnJlYWRlci5zZXRJbmRleChKKSx0aGlzLmNoZWNrU2lnbmF0dXJlKFUuWklQNjRfQ0VOVFJBTF9ESVJF''@;'; put 'put ''Q1RPUllfTE9DQVRPUiksdGhpcy5yZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbExvY2F0b3IoKSx0aGlzLnJlYWRlci5zZXRJbmRleCh0aGlzLnJlbGF0aXZlT2Zmc2V0RW5kT2ZaaXA2NENlbnRyYWxEaXIpLHRoaXMuY2hlY2tTaWduYXR1cmUoVS5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9F''@;'; put 'put ''TkQpLHRoaXMucmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWwoKX19LHByZXBhcmVSZWFkZXI6ZnVuY3Rpb24oSil7dmFyIHJlPUsuZ2V0VHlwZU9mKEopO3RoaXMucmVhZGVyPSJzdHJpbmciIT09cmV8fFkudWludDhhcnJheT8ibm9kZWJ1ZmZlciI9PT1yZT9uZXcgTihKKTpuZXcgTChLLnRy''@;'; put 'put ''YW5zZm9ybVRvKCJ1aW50OGFycmF5IixKKSk6bmV3IHooSix0aGlzLmxvYWRPcHRpb25zLm9wdGltaXplZEJpbmFyeVN0cmluZyl9LGxvYWQ6ZnVuY3Rpb24oSil7dGhpcy5wcmVwYXJlUmVhZGVyKEopLHRoaXMucmVhZEVuZE9mQ2VudHJhbCgpLHRoaXMucmVhZENlbnRyYWxEaXIoKSx0aGlz''@;'; put 'put ''LnJlYWRMb2NhbEZpbGVzKCl9fSxGLmV4cG9ydHM9ZWV9LHsiLi9ub2RlQnVmZmVyUmVhZGVyIjoxMiwiLi9vYmplY3QiOjEzLCIuL3NpZ25hdHVyZSI6MTQsIi4vc3RyaW5nUmVhZGVyIjoxNSwiLi9zdXBwb3J0IjoxNywiLi91aW50OEFycmF5UmVhZGVyIjoxOCwiLi91dGlscyI6MjEsIi4v''@;'; put 'put ''emlwRW50cnkiOjIzfV0sMjM6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi9zdHJpbmdSZWFkZXIiKSxOPVAoIi4vdXRpbHMiKSxMPVAoIi4vY29tcHJlc3NlZE9iamVjdCIpLEs9UCgiLi9vYmplY3QiKTtmdW5jdGlvbiBVKFcsWSl7dGhpcy5vcHRpb25zPVcsdGhp''@;'; put 'put ''cy5sb2FkT3B0aW9ucz1ZfVUucHJvdG90eXBlPXtpc0VuY3J5cHRlZDpmdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy5iaXRGbGFnKX0sdXNlVVRGODpmdW5jdGlvbigpe3JldHVybiEoMjA0OCZ+dGhpcy5iaXRGbGFnKX0scHJlcGFyZUNvbXByZXNzZWRDb250ZW50OmZ1bmN0aW9uKFcsWSxY''@;'; put 'put ''KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZWU9Vy5pbmRleDtXLnNldEluZGV4KFkpO3ZhciBKPVcucmVhZERhdGEoWCk7cmV0dXJuIFcuc2V0SW5kZXgoZWUpLEp9fSxwcmVwYXJlQ29udGVudDpmdW5jdGlvbihXLFksWCxlZSxKKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgcmU9Ti50cmFuc2Zv''@;'; put 'put ''cm1UbyhlZS51bmNvbXByZXNzSW5wdXRUeXBlLHRoaXMuZ2V0Q29tcHJlc3NlZENvbnRlbnQoKSksaWU9ZWUudW5jb21wcmVzcyhyZSk7aWYoaWUubGVuZ3RoIT09Sil0aHJvdyBuZXcgRXJyb3IoIkJ1ZyA6IHVuY29tcHJlc3NlZCBkYXRhIHNpemUgbWlzbWF0Y2giKTtyZXR1cm4gaWV9fSxy''@;'; put 'put ''ZWFkTG9jYWxQYXJ0OmZ1bmN0aW9uKFcpe3ZhciBZLFg7aWYoVy5za2lwKDIyKSx0aGlzLmZpbGVOYW1lTGVuZ3RoPVcucmVhZEludCgyKSxYPVcucmVhZEludCgyKSx0aGlzLmZpbGVOYW1lPVcucmVhZFN0cmluZyh0aGlzLmZpbGVOYW1lTGVuZ3RoKSxXLnNraXAoWCksLTE9PXRoaXMuY29t''@;'; put 'put ''cHJlc3NlZFNpemV8fC0xPT10aGlzLnVuY29tcHJlc3NlZFNpemUpdGhyb3cgbmV3IEVycm9yKCJCdWcgb3IgY29ycnVwdGVkIHppcCA6IGRpZG4ndCBnZXQgZW5vdWdoIGluZm9ybWF0aW9ucyBmcm9tIHRoZSBjZW50cmFsIGRpcmVjdG9yeSAoY29tcHJlc3NlZFNpemUgPT0gLTEgfHwgdW5j''@;'; put 'put ''b21wcmVzc2VkU2l6ZSA9PSAtMSkiKTtpZihudWxsPT09KFk9Ti5maW5kQ29tcHJlc3Npb24odGhpcy5jb21wcmVzc2lvbk1ldGhvZCkpKXRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCA6IGNvbXByZXNzaW9uICIrTi5wcmV0dHkodGhpcy5jb21wcmVzc2lvbk1ldGhvZCkrIiB1bmtu''@;'; put 'put ''b3duIChpbm5lciBmaWxlIDogIit0aGlzLmZpbGVOYW1lKyIpIik7aWYodGhpcy5kZWNvbXByZXNzZWQ9bmV3IEwsdGhpcy5kZWNvbXByZXNzZWQuY29tcHJlc3NlZFNpemU9dGhpcy5jb21wcmVzc2VkU2l6ZSx0aGlzLmRlY29tcHJlc3NlZC51bmNvbXByZXNzZWRTaXplPXRoaXMudW5jb21w''@;'; put 'put ''cmVzc2VkU2l6ZSx0aGlzLmRlY29tcHJlc3NlZC5jcmMzMj10aGlzLmNyYzMyLHRoaXMuZGVjb21wcmVzc2VkLmNvbXByZXNzaW9uTWV0aG9kPXRoaXMuY29tcHJlc3Npb25NZXRob2QsdGhpcy5kZWNvbXByZXNzZWQuZ2V0Q29tcHJlc3NlZENvbnRlbnQ9dGhpcy5wcmVwYXJlQ29tcHJlc3Nl''@;'; put 'put ''ZENvbnRlbnQoVyxXLmluZGV4LHRoaXMuY29tcHJlc3NlZFNpemUsWSksdGhpcy5kZWNvbXByZXNzZWQuZ2V0Q29udGVudD10aGlzLnByZXBhcmVDb250ZW50KFcsVy5pbmRleCx0aGlzLmNvbXByZXNzZWRTaXplLFksdGhpcy51bmNvbXByZXNzZWRTaXplKSx0aGlzLmxvYWRPcHRpb25zLmNo''@;'; put 'put ''ZWNrQ1JDMzImJih0aGlzLmRlY29tcHJlc3NlZD1OLnRyYW5zZm9ybVRvKCJzdHJpbmciLHRoaXMuZGVjb21wcmVzc2VkLmdldENvbnRlbnQoKSksSy5jcmMzMih0aGlzLmRlY29tcHJlc3NlZCkhPT10aGlzLmNyYzMyKSl0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAgOiBDUkMzMiBt''@;'; put 'put ''aXNtYXRjaCIpfSxyZWFkQ2VudHJhbFBhcnQ6ZnVuY3Rpb24oVyl7aWYodGhpcy52ZXJzaW9uTWFkZUJ5PVcucmVhZFN0cmluZygyKSx0aGlzLnZlcnNpb25OZWVkZWQ9Vy5yZWFkSW50KDIpLHRoaXMuYml0RmxhZz1XLnJlYWRJbnQoMiksdGhpcy5jb21wcmVzc2lvbk1ldGhvZD1XLnJlYWRT''@;'; put 'put ''dHJpbmcoMiksdGhpcy5kYXRlPVcucmVhZERhdGUoKSx0aGlzLmNyYzMyPVcucmVhZEludCg0KSx0aGlzLmNvbXByZXNzZWRTaXplPVcucmVhZEludCg0KSx0aGlzLnVuY29tcHJlc3NlZFNpemU9Vy5yZWFkSW50KDQpLHRoaXMuZmlsZU5hbWVMZW5ndGg9Vy5yZWFkSW50KDIpLHRoaXMuZXh0''@;'; put 'put ''cmFGaWVsZHNMZW5ndGg9Vy5yZWFkSW50KDIpLHRoaXMuZmlsZUNvbW1lbnRMZW5ndGg9Vy5yZWFkSW50KDIpLHRoaXMuZGlza051bWJlclN0YXJ0PVcucmVhZEludCgyKSx0aGlzLmludGVybmFsRmlsZUF0dHJpYnV0ZXM9Vy5yZWFkSW50KDIpLHRoaXMuZXh0ZXJuYWxGaWxlQXR0cmlidXRl''@;'; put 'put ''cz1XLnJlYWRJbnQoNCksdGhpcy5sb2NhbEhlYWRlck9mZnNldD1XLnJlYWRJbnQoNCksdGhpcy5pc0VuY3J5cHRlZCgpKXRocm93IG5ldyBFcnJvcigiRW5jcnlwdGVkIHppcCBhcmUgbm90IHN1cHBvcnRlZCIpO3RoaXMuZmlsZU5hbWU9Vy5yZWFkU3RyaW5nKHRoaXMuZmlsZU5hbWVMZW5n''@;'; put 'put ''dGgpLHRoaXMucmVhZEV4dHJhRmllbGRzKFcpLHRoaXMucGFyc2VaSVA2NEV4dHJhRmllbGQoVyksdGhpcy5maWxlQ29tbWVudD1XLnJlYWRTdHJpbmcodGhpcy5maWxlQ29tbWVudExlbmd0aCksdGhpcy5kaXI9ISEoMTYmdGhpcy5leHRlcm5hbEZpbGVBdHRyaWJ1dGVzKX0scGFyc2VaSVA2''@;'; put 'put ''NEV4dHJhRmllbGQ6ZnVuY3Rpb24oVyl7aWYodGhpcy5leHRyYUZpZWxkc1sxXSl7dmFyIFk9bmV3IHoodGhpcy5leHRyYUZpZWxkc1sxXS52YWx1ZSk7dGhpcy51bmNvbXByZXNzZWRTaXplPT09Ti5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy51bmNvbXByZXNzZWRTaXplPVkucmVhZEludCg4''@;'; put 'put ''KSksdGhpcy5jb21wcmVzc2VkU2l6ZT09PU4uTUFYX1ZBTFVFXzMyQklUUyYmKHRoaXMuY29tcHJlc3NlZFNpemU9WS5yZWFkSW50KDgpKSx0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0PT09Ti5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy5sb2NhbEhlYWRlck9mZnNldD1ZLnJlYWRJbnQoOCkpLHRo''@;'; put 'put ''aXMuZGlza051bWJlclN0YXJ0PT09Ti5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy5kaXNrTnVtYmVyU3RhcnQ9WS5yZWFkSW50KDQpKX19LHJlYWRFeHRyYUZpZWxkczpmdW5jdGlvbihXKXt2YXIgWCxlZSxKLFk9Vy5pbmRleDtmb3IodGhpcy5leHRyYUZpZWxkcz10aGlzLmV4dHJhRmllbGRz''@;'; put 'put ''fHx7fTtXLmluZGV4PFkrdGhpcy5leHRyYUZpZWxkc0xlbmd0aDspWD1XLnJlYWRJbnQoMiksZWU9Vy5yZWFkSW50KDIpLEo9Vy5yZWFkU3RyaW5nKGVlKSx0aGlzLmV4dHJhRmllbGRzW1hdPXtpZDpYLGxlbmd0aDplZSx2YWx1ZTpKfX0saGFuZGxlVVRGODpmdW5jdGlvbigpe2lmKHRoaXMu''@;'; put 'put ''dXNlVVRGOCgpKXRoaXMuZmlsZU5hbWU9Sy51dGY4ZGVjb2RlKHRoaXMuZmlsZU5hbWUpLHRoaXMuZmlsZUNvbW1lbnQ9Sy51dGY4ZGVjb2RlKHRoaXMuZmlsZUNvbW1lbnQpO2Vsc2V7dmFyIFc9dGhpcy5maW5kRXh0cmFGaWVsZFVuaWNvZGVQYXRoKCk7bnVsbCE9PVcmJih0aGlzLmZpbGVO''@;'; put 'put ''YW1lPVcpO3ZhciBZPXRoaXMuZmluZEV4dHJhRmllbGRVbmljb2RlQ29tbWVudCgpO251bGwhPT1ZJiYodGhpcy5maWxlQ29tbWVudD1ZKX19LGZpbmRFeHRyYUZpZWxkVW5pY29kZVBhdGg6ZnVuY3Rpb24oKXt2YXIgVz10aGlzLmV4dHJhRmllbGRzWzI4Nzg5XTtpZihXKXt2YXIgWT1uZXcg''@;'; put 'put ''eihXLnZhbHVlKTtyZXR1cm4gMSE9PVkucmVhZEludCgxKXx8Sy5jcmMzMih0aGlzLmZpbGVOYW1lKSE9PVkucmVhZEludCg0KT9udWxsOksudXRmOGRlY29kZShZLnJlYWRTdHJpbmcoVy5sZW5ndGgtNSkpfXJldHVybiBudWxsfSxmaW5kRXh0cmFGaWVsZFVuaWNvZGVDb21tZW50OmZ1bmN0''@;'; put 'put ''aW9uKCl7dmFyIFc9dGhpcy5leHRyYUZpZWxkc1syNTQ2MV07aWYoVyl7dmFyIFk9bmV3IHooVy52YWx1ZSk7cmV0dXJuIDEhPT1ZLnJlYWRJbnQoMSl8fEsuY3JjMzIodGhpcy5maWxlQ29tbWVudCkhPT1ZLnJlYWRJbnQoNCk/bnVsbDpLLnV0ZjhkZWNvZGUoWS5yZWFkU3RyaW5nKFcubGVu''@;'; put 'put ''Z3RoLTUpKX1yZXR1cm4gbnVsbH19LEYuZXhwb3J0cz1VfSx7Ii4vY29tcHJlc3NlZE9iamVjdCI6MiwiLi9vYmplY3QiOjEzLCIuL3N0cmluZ1JlYWRlciI6MTUsIi4vdXRpbHMiOjIxfV0sMjQ6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIFU9e307KDAsUCgiLi9saWIvdXRp''@;'; put 'put ''bHMvY29tbW9uIikuYXNzaWduKShVLFAoIi4vbGliL2RlZmxhdGUiKSxQKCIuL2xpYi9pbmZsYXRlIiksUCgiLi9saWIvemxpYi9jb25zdGFudHMiKSksRi5leHBvcnRzPVV9LHsiLi9saWIvZGVmbGF0ZSI6MjUsIi4vbGliL2luZmxhdGUiOjI2LCIuL2xpYi91dGlscy9jb21tb24iOjI3LCIu''@;'; put 'put ''L2xpYi96bGliL2NvbnN0YW50cyI6MzB9XSwyNTpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuL3psaWIvZGVmbGF0ZS5qcyIpLE49UCgiLi91dGlscy9jb21tb24iKSxMPVAoIi4vdXRpbHMvc3RyaW5ncyIpLEs9UCgiLi96bGliL21lc3NhZ2VzIiksVT1QKCIuL3ps''@;'; put 'put ''aWIvenN0cmVhbSIpLGxlPWZ1bmN0aW9uKFNlKXt0aGlzLm9wdGlvbnM9Ti5hc3NpZ24oe2xldmVsOi0xLG1ldGhvZDo4LGNodW5rU2l6ZToxNjM4NCx3aW5kb3dCaXRzOjE1LG1lbUxldmVsOjgsc3RyYXRlZ3k6MCx0bzoiIn0sU2V8fHt9KTt2YXIgemU9dGhpcy5vcHRpb25zO3plLnJhdyYm''@;'; put 'put ''emUud2luZG93Qml0cz4wP3plLndpbmRvd0JpdHM9LXplLndpbmRvd0JpdHM6emUuZ3ppcCYmemUud2luZG93Qml0cz4wJiZ6ZS53aW5kb3dCaXRzPDE2JiYoemUud2luZG93Qml0cys9MTYpLHRoaXMuZXJyPTAsdGhpcy5tc2c9IiIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlz''@;'; put 'put ''LnN0cm09bmV3IFUsdGhpcy5zdHJtLmF2YWlsX291dD0wO3ZhciBWPXouZGVmbGF0ZUluaXQyKHRoaXMuc3RybSx6ZS5sZXZlbCx6ZS5tZXRob2QsemUud2luZG93Qml0cyx6ZS5tZW1MZXZlbCx6ZS5zdHJhdGVneSk7aWYoMCE9PVYpdGhyb3cgbmV3IEVycm9yKEtbVl0pO3plLmhlYWRlciYm''@;'; put 'put ''ei5kZWZsYXRlU2V0SGVhZGVyKHRoaXMuc3RybSx6ZS5oZWFkZXIpfTtmdW5jdGlvbiBtZShTZSx6ZSl7dmFyIFY9bmV3IGxlKHplKTtpZihWLnB1c2goU2UsITApLFYuZXJyKXRocm93IFYubXNnO3JldHVybiBWLnJlc3VsdH1sZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihTZSx6ZSl7dmFy''@;'; put 'put ''IGIseCxWPXRoaXMuc3RybSxwPXRoaXMub3B0aW9ucy5jaHVua1NpemU7aWYodGhpcy5lbmRlZClyZXR1cm4hMTt4PXplPT09fn56ZT96ZTohMD09PXplPzQ6MCxWLmlucHV0PSJzdHJpbmciPT10eXBlb2YgU2U/TC5zdHJpbmcyYnVmKFNlKTpTZSxWLm5leHRfaW49MCxWLmF2YWlsX2luPVYu''@;'; put 'put ''aW5wdXQubGVuZ3RoO2Rve2lmKDA9PT1WLmF2YWlsX291dCYmKFYub3V0cHV0PW5ldyBOLkJ1ZjgocCksVi5uZXh0X291dD0wLFYuYXZhaWxfb3V0PXApLDEhPT0oYj16LmRlZmxhdGUoVix4KSkmJjAhPT1iKXJldHVybiB0aGlzLm9uRW5kKGIpLHRoaXMuZW5kZWQ9ITAsITE7KDA9PT1WLmF2''@;'; put 'put ''YWlsX291dHx8MD09PVYuYXZhaWxfaW4mJjQ9PT14KSYmdGhpcy5vbkRhdGEoInN0cmluZyI9PT10aGlzLm9wdGlvbnMudG8/TC5idWYyYmluc3RyaW5nKE4uc2hyaW5rQnVmKFYub3V0cHV0LFYubmV4dF9vdXQpKTpOLnNocmlua0J1ZihWLm91dHB1dCxWLm5leHRfb3V0KSl9d2hpbGUoKFYu''@;'; put 'put ''YXZhaWxfaW4+MHx8MD09PVYuYXZhaWxfb3V0KSYmMSE9PWIpO3JldHVybiA0IT09eHx8KGI9ei5kZWZsYXRlRW5kKHRoaXMuc3RybSksdGhpcy5vbkVuZChiKSx0aGlzLmVuZGVkPSEwLDA9PT1iKX0sbGUucHJvdG90eXBlLm9uRGF0YT1mdW5jdGlvbihTZSl7dGhpcy5jaHVua3MucHVzaChT''@;'; put 'put ''ZSl9LGxlLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbihTZSl7MD09PVNlJiYodGhpcy5yZXN1bHQ9InN0cmluZyI9PT10aGlzLm9wdGlvbnMudG8/dGhpcy5jaHVua3Muam9pbigiIik6Ti5mbGF0dGVuQ2h1bmtzKHRoaXMuY2h1bmtzKSksdGhpcy5jaHVua3M9W10sdGhpcy5lcnI9U2UsdGhp''@;'; put 'put ''cy5tc2c9dGhpcy5zdHJtLm1zZ30sTy5EZWZsYXRlPWxlLE8uZGVmbGF0ZT1tZSxPLmRlZmxhdGVSYXc9ZnVuY3Rpb24gX2UoU2UsemUpe3JldHVybih6ZT16ZXx8e30pLnJhdz0hMCxtZShTZSx6ZSl9LE8uZ3ppcD1mdW5jdGlvbiBUZShTZSx6ZSl7cmV0dXJuKHplPXplfHx7fSkuZ3ppcD0h''@;'; put 'put ''MCxtZShTZSx6ZSl9fSx7Ii4vdXRpbHMvY29tbW9uIjoyNywiLi91dGlscy9zdHJpbmdzIjoyOCwiLi96bGliL2RlZmxhdGUuanMiOjMyLCIuL3psaWIvbWVzc2FnZXMiOjM3LCIuL3psaWIvenN0cmVhbSI6Mzl9XSwyNjpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIu''@;'; put 'put ''L3psaWIvaW5mbGF0ZS5qcyIpLE49UCgiLi91dGlscy9jb21tb24iKSxMPVAoIi4vdXRpbHMvc3RyaW5ncyIpLEs9UCgiLi96bGliL2NvbnN0YW50cyIpLFU9UCgiLi96bGliL21lc3NhZ2VzIiksVz1QKCIuL3psaWIvenN0cmVhbSIpLFk9UCgiLi96bGliL2d6aGVhZGVyIiksWD1mdW5jdGlv''@;'; put 'put ''bihyZSl7dGhpcy5vcHRpb25zPU4uYXNzaWduKHtjaHVua1NpemU6MTYzODQsd2luZG93Qml0czowLHRvOiIifSxyZXx8e30pO3ZhciBpZT10aGlzLm9wdGlvbnM7aWUucmF3JiZpZS53aW5kb3dCaXRzPj0wJiZpZS53aW5kb3dCaXRzPDE2JiYoaWUud2luZG93Qml0cz0taWUud2luZG93Qml0''@;'; put 'put ''cywwPT09aWUud2luZG93Qml0cyYmKGllLndpbmRvd0JpdHM9LTE1KSksaWUud2luZG93Qml0cz49MCYmaWUud2luZG93Qml0czwxNiYmIShyZSYmcmUud2luZG93Qml0cykmJihpZS53aW5kb3dCaXRzKz0zMiksaWUud2luZG93Qml0cz4xNSYmaWUud2luZG93Qml0czw0OCYmKDE1JmllLndp''@;'; put 'put ''bmRvd0JpdHN8fChpZS53aW5kb3dCaXRzfD0xNSkpLHRoaXMuZXJyPTAsdGhpcy5tc2c9IiIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IFcsdGhpcy5zdHJtLmF2YWlsX291dD0wO3ZhciBsZT16LmluZmxhdGVJbml0Mih0aGlzLnN0cm0saWUud2luZG93Qml0''@;'; put 'put ''cyk7aWYobGUhPT1LLlpfT0spdGhyb3cgbmV3IEVycm9yKFVbbGVdKTt0aGlzLmhlYWRlcj1uZXcgWSx6LmluZmxhdGVHZXRIZWFkZXIodGhpcy5zdHJtLHRoaXMuaGVhZGVyKX07ZnVuY3Rpb24gZWUocmUsaWUpe3ZhciBsZT1uZXcgWChpZSk7aWYobGUucHVzaChyZSwhMCksbGUuZXJyKXRo''@;'; put 'put ''cm93IGxlLm1zZztyZXR1cm4gbGUucmVzdWx0fVgucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24ocmUsaWUpe3ZhciBfZSxUZSxTZSx6ZSxWLGxlPXRoaXMuc3RybSxtZT10aGlzLm9wdGlvbnMuY2h1bmtTaXplO2lmKHRoaXMuZW5kZWQpcmV0dXJuITE7VGU9aWU9PT1+fmllP2llOiEwPT09aWU/''@;'; put 'put ''Sy5aX0ZJTklTSDpLLlpfTk9fRkxVU0gsbGUuaW5wdXQ9InN0cmluZyI9PXR5cGVvZiByZT9MLmJpbnN0cmluZzJidWYocmUpOnJlLGxlLm5leHRfaW49MCxsZS5hdmFpbF9pbj1sZS5pbnB1dC5sZW5ndGg7ZG97aWYoMD09PWxlLmF2YWlsX291dCYmKGxlLm91dHB1dD1uZXcgTi5CdWY4KG1l''@;'; put 'put ''KSxsZS5uZXh0X291dD0wLGxlLmF2YWlsX291dD1tZSksKF9lPXouaW5mbGF0ZShsZSxLLlpfTk9fRkxVU0gpKSE9PUsuWl9TVFJFQU1fRU5EJiZfZSE9PUsuWl9PSylyZXR1cm4gdGhpcy5vbkVuZChfZSksdGhpcy5lbmRlZD0hMCwhMTtsZS5uZXh0X291dCYmKDA9PT1sZS5hdmFpbF9vdXR8''@;'; put 'put ''fF9lPT09Sy5aX1NUUkVBTV9FTkR8fDA9PT1sZS5hdmFpbF9pbiYmVGU9PT1LLlpfRklOSVNIKSYmKCJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvPyhTZT1MLnV0Zjhib3JkZXIobGUub3V0cHV0LGxlLm5leHRfb3V0KSx6ZT1sZS5uZXh0X291dC1TZSxWPUwuYnVmMnN0cmluZyhsZS5vdXRw''@;'; put 'put ''dXQsU2UpLGxlLm5leHRfb3V0PXplLGxlLmF2YWlsX291dD1tZS16ZSx6ZSYmTi5hcnJheVNldChsZS5vdXRwdXQsbGUub3V0cHV0LFNlLHplLDApLHRoaXMub25EYXRhKFYpKTp0aGlzLm9uRGF0YShOLnNocmlua0J1ZihsZS5vdXRwdXQsbGUubmV4dF9vdXQpKSl9d2hpbGUobGUuYXZhaWxf''@;'; put 'put ''aW4+MCYmX2UhPT1LLlpfU1RSRUFNX0VORCk7cmV0dXJuIF9lPT09Sy5aX1NUUkVBTV9FTkQmJihUZT1LLlpfRklOSVNIKSxUZSE9PUsuWl9GSU5JU0h8fChfZT16LmluZmxhdGVFbmQodGhpcy5zdHJtKSx0aGlzLm9uRW5kKF9lKSx0aGlzLmVuZGVkPSEwLF9lPT09Sy5aX09LKX0sWC5wcm90''@;'; put 'put ''b3R5cGUub25EYXRhPWZ1bmN0aW9uKHJlKXt0aGlzLmNodW5rcy5wdXNoKHJlKX0sWC5wcm90b3R5cGUub25FbmQ9ZnVuY3Rpb24ocmUpe3JlPT09Sy5aX09LJiYodGhpcy5yZXN1bHQ9InN0cmluZyI9PT10aGlzLm9wdGlvbnMudG8/dGhpcy5jaHVua3Muam9pbigiIik6Ti5mbGF0dGVuQ2h1''@;'; put 'put ''bmtzKHRoaXMuY2h1bmtzKSksdGhpcy5jaHVua3M9W10sdGhpcy5lcnI9cmUsdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ30sTy5JbmZsYXRlPVgsTy5pbmZsYXRlPWVlLE8uaW5mbGF0ZVJhdz1mdW5jdGlvbiBKKHJlLGllKXtyZXR1cm4oaWU9aWV8fHt9KS5yYXc9ITAsZWUocmUsaWUpfSxPLnVu''@;'; put 'put ''Z3ppcD1lZX0seyIuL3V0aWxzL2NvbW1vbiI6MjcsIi4vdXRpbHMvc3RyaW5ncyI6MjgsIi4vemxpYi9jb25zdGFudHMiOjMwLCIuL3psaWIvZ3poZWFkZXIiOjMzLCIuL3psaWIvaW5mbGF0ZS5qcyI6MzUsIi4vemxpYi9tZXNzYWdlcyI6MzcsIi4vemxpYi96c3RyZWFtIjozOX1dLDI3Oltm''@;'; put 'put ''dW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO3ZhciB6PXR5cGVvZiBVaW50OEFycmF5PCJ1IiYmdHlwZW9mIFVpbnQxNkFycmF5PCJ1IiYmdHlwZW9mIEludDMyQXJyYXk8InUiO08uYXNzaWduPWZ1bmN0aW9uKEspe2Zvcih2YXIgVT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1''@;'; put 'put ''bWVudHMsMSk7VS5sZW5ndGg7KXt2YXIgVz1VLnNoaWZ0KCk7aWYoVyl7aWYoIm9iamVjdCIhPXR5cGVvZiBXKXRocm93IG5ldyBUeXBlRXJyb3IoVysibXVzdCBiZSBub24tb2JqZWN0Iik7Zm9yKHZhciBZIGluIFcpVy5oYXNPd25Qcm9wZXJ0eShZKSYmKEtbWV09V1tZXSl9fXJldHVybiBL''@;'; put 'put ''fSxPLnNocmlua0J1Zj1mdW5jdGlvbihLLFUpe3JldHVybiBLLmxlbmd0aD09PVU/SzpLLnN1YmFycmF5P0suc3ViYXJyYXkoMCxVKTooSy5sZW5ndGg9VSxLKX07dmFyIE49e2FycmF5U2V0OmZ1bmN0aW9uKEssVSxXLFksWCl7aWYoVS5zdWJhcnJheSYmSy5zdWJhcnJheSlLLnNldChVLnN1''@;'; put 'put ''YmFycmF5KFcsVytZKSxYKTtlbHNlIGZvcih2YXIgZWU9MDtlZTxZO2VlKyspS1tYK2VlXT1VW1crZWVdfSxmbGF0dGVuQ2h1bmtzOmZ1bmN0aW9uKEspe3ZhciBVLFcsWSxYLGVlLEo7Zm9yKFk9MCxVPTAsVz1LLmxlbmd0aDtVPFc7VSsrKVkrPUtbVV0ubGVuZ3RoO2ZvcihKPW5ldyBVaW50''@;'; put 'put ''OEFycmF5KFkpLFg9MCxVPTAsVz1LLmxlbmd0aDtVPFc7VSsrKUouc2V0KGVlPUtbVV0sWCksWCs9ZWUubGVuZ3RoO3JldHVybiBKfX0sTD17YXJyYXlTZXQ6ZnVuY3Rpb24oSyxVLFcsWSxYKXtmb3IodmFyIGVlPTA7ZWU8WTtlZSsrKUtbWCtlZV09VVtXK2VlXX0sZmxhdHRlbkNodW5rczpm''@;'; put 'put ''dW5jdGlvbihLKXtyZXR1cm5bXS5jb25jYXQuYXBwbHkoW10sSyl9fTtPLnNldFR5cGVkPWZ1bmN0aW9uKEspe0s/KE8uQnVmOD1VaW50OEFycmF5LE8uQnVmMTY9VWludDE2QXJyYXksTy5CdWYzMj1JbnQzMkFycmF5LE8uYXNzaWduKE8sTikpOihPLkJ1Zjg9QXJyYXksTy5CdWYxNj1BcnJh''@;'; put 'put ''eSxPLkJ1ZjMyPUFycmF5LE8uYXNzaWduKE8sTCkpfSxPLnNldFR5cGVkKHopfSx7fV0sMjg6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi9jb21tb24iKSxOPSEwLEw9ITA7dHJ5e1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxbMF0pfWNhdGNoe049ITF9''@;'; put 'put ''dHJ5e1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxuZXcgVWludDhBcnJheSgxKSl9Y2F0Y2h7TD0hMX1mb3IodmFyIEs9bmV3IHouQnVmOCgyNTYpLFU9MDtVPDI1NjtVKyspS1tVXT1VPj0yNTI/NjpVPj0yNDg/NTpVPj0yNDA/NDpVPj0yMjQ/MzpVPj0xOTI/MjoxO2Z1bmN0aW9u''@;'; put 'put ''IFcoWSxYKXtpZihYPDY1NTM3JiYoWS5zdWJhcnJheSYmTHx8IVkuc3ViYXJyYXkmJk4pKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsei5zaHJpbmtCdWYoWSxYKSk7Zm9yKHZhciBlZT0iIixKPTA7SjxYO0orKyllZSs9U3RyaW5nLmZyb21DaGFyQ29kZShZW0pdKTty''@;'; put 'put ''ZXR1cm4gZWV9S1syNTRdPUtbMjU0XT0xLE8uc3RyaW5nMmJ1Zj1mdW5jdGlvbihZKXt2YXIgWCxlZSxKLHJlLGllLGxlPVkubGVuZ3RoLG1lPTA7Zm9yKHJlPTA7cmU8bGU7cmUrKyk1NTI5Nj09KDY0NTEyJihlZT1ZLmNoYXJDb2RlQXQocmUpKSkmJnJlKzE8bGUmJjU2MzIwPT0oNjQ1MTIm''@;'; put 'put ''KEo9WS5jaGFyQ29kZUF0KHJlKzEpKSkmJihlZT02NTUzNisoZWUtNTUyOTY8PDEwKSsoSi01NjMyMCkscmUrKyksbWUrPWVlPDEyOD8xOmVlPDIwNDg/MjplZTw2NTUzNj8zOjQ7Zm9yKFg9bmV3IHouQnVmOChtZSksaWU9MCxyZT0wO2llPG1lO3JlKyspNTUyOTY9PSg2NDUxMiYoZWU9WS5j''@;'; put 'put ''aGFyQ29kZUF0KHJlKSkpJiZyZSsxPGxlJiY1NjMyMD09KDY0NTEyJihKPVkuY2hhckNvZGVBdChyZSsxKSkpJiYoZWU9NjU1MzYrKGVlLTU1Mjk2PDwxMCkrKEotNTYzMjApLHJlKyspLGVlPDEyOD9YW2llKytdPWVlOmVlPDIwNDg/KFhbaWUrK109MTkyfGVlPj4+NixYW2llKytdPTEyOHw2''@;'; put 'put ''MyZlZSk6ZWU8NjU1MzY/KFhbaWUrK109MjI0fGVlPj4+MTIsWFtpZSsrXT0xMjh8ZWU+Pj42JjYzLFhbaWUrK109MTI4fDYzJmVlKTooWFtpZSsrXT0yNDB8ZWU+Pj4xOCxYW2llKytdPTEyOHxlZT4+PjEyJjYzLFhbaWUrK109MTI4fGVlPj4+NiY2MyxYW2llKytdPTEyOHw2MyZlZSk7cmV0''@;'; put 'put ''dXJuIFh9LE8uYnVmMmJpbnN0cmluZz1mdW5jdGlvbihZKXtyZXR1cm4gVyhZLFkubGVuZ3RoKX0sTy5iaW5zdHJpbmcyYnVmPWZ1bmN0aW9uKFkpe2Zvcih2YXIgWD1uZXcgei5CdWY4KFkubGVuZ3RoKSxlZT0wLEo9WC5sZW5ndGg7ZWU8SjtlZSsrKVhbZWVdPVkuY2hhckNvZGVBdChlZSk7''@;'; put 'put ''cmV0dXJuIFh9LE8uYnVmMnN0cmluZz1mdW5jdGlvbihZLFgpe3ZhciBlZSxKLHJlLGllLGxlPVh8fFkubGVuZ3RoLG1lPW5ldyBBcnJheSgyKmxlKTtmb3IoSj0wLGVlPTA7ZWU8bGU7KWlmKChyZT1ZW2VlKytdKTwxMjgpbWVbSisrXT1yZTtlbHNlIGlmKChpZT1LW3JlXSk+NCltZVtKKytd''@;'; put 'put ''PTY1NTMzLGVlKz1pZS0xO2Vsc2V7Zm9yKHJlJj0yPT09aWU/MzE6Mz09PWllPzE1Ojc7aWU+MSYmZWU8bGU7KXJlPXJlPDw2fDYzJllbZWUrK10saWUtLTtpZT4xP21lW0orK109NjU1MzM6cmU8NjU1MzY/bWVbSisrXT1yZToobWVbSisrXT01NTI5NnwocmUtPTY1NTM2KT4+MTAmMTAyMyxt''@;'; put 'put ''ZVtKKytdPTU2MzIwfDEwMjMmcmUpfXJldHVybiBXKG1lLEopfSxPLnV0Zjhib3JkZXI9ZnVuY3Rpb24oWSxYKXt2YXIgZWU7Zm9yKChYPVh8fFkubGVuZ3RoKT5ZLmxlbmd0aCYmKFg9WS5sZW5ndGgpLGVlPVgtMTtlZT49MCYmMTI4PT0oMTkyJllbZWVdKTspZWUtLTtyZXR1cm4gZWU8MHx8''@;'; put 'put ''MD09PWVlP1g6ZWUrS1tZW2VlXV0+WD9lZTpYfX0seyIuL2NvbW1vbiI6Mjd9XSwyOTpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0IjtGLmV4cG9ydHM9ZnVuY3Rpb24geihOLEwsSyxVKXtmb3IodmFyIFc9NjU1MzUmTixZPU4+Pj4xNiY2NTUzNSxYPTA7MCE9PUs7KXtLLT1YPUs+MmUz''@;'; put 'put ''PzJlMzpLO2Rve1k9WSsoVz1XK0xbVSsrXXwwKXwwfXdoaWxlKC0tWCk7VyU9NjU1MjEsWSU9NjU1MjF9cmV0dXJuIFd8WTw8MTZ9fSx7fV0sMzA6W2Z1bmN0aW9uKFAsRixPKXtGLmV4cG9ydHM9e1pfTk9fRkxVU0g6MCxaX1BBUlRJQUxfRkxVU0g6MSxaX1NZTkNfRkxVU0g6MixaX0ZVTExf''@;'; put 'put ''RkxVU0g6MyxaX0ZJTklTSDo0LFpfQkxPQ0s6NSxaX1RSRUVTOjYsWl9PSzowLFpfU1RSRUFNX0VORDoxLFpfTkVFRF9ESUNUOjIsWl9FUlJOTzotMSxaX1NUUkVBTV9FUlJPUjotMixaX0RBVEFfRVJST1I6LTMsWl9CVUZfRVJST1I6LTUsWl9OT19DT01QUkVTU0lPTjowLFpfQkVTVF9TUEVF''@;'; put 'put ''RDoxLFpfQkVTVF9DT01QUkVTU0lPTjo5LFpfREVGQVVMVF9DT01QUkVTU0lPTjotMSxaX0ZJTFRFUkVEOjEsWl9IVUZGTUFOX09OTFk6MixaX1JMRTozLFpfRklYRUQ6NCxaX0RFRkFVTFRfU1RSQVRFR1k6MCxaX0JJTkFSWTowLFpfVEVYVDoxLFpfVU5LTk9XTjoyLFpfREVGTEFURUQ6OH19''@;'; put 'put ''LHt9XSwzMTpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgTj1mdW5jdGlvbiB6KCl7Zm9yKHZhciBLLFU9W10sVz0wO1c8MjU2O1crKyl7Sz1XO2Zvcih2YXIgWT0wO1k8ODtZKyspSz0xJks/Mzk4ODI5MjM4NF5LPj4+MTpLPj4+MTtVW1ddPUt9cmV0dXJuIFV9KCk7Ri5leHBv''@;'; put 'put ''cnRzPWZ1bmN0aW9uIEwoSyxVLFcsWSl7dmFyIFg9TixlZT1ZK1c7Sz1+Sztmb3IodmFyIEo9WTtKPGVlO0orKylLPUs+Pj44XlhbMjU1JihLXlVbSl0pXTtyZXR1cm5+S319LHt9XSwzMjpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0Ijt2YXIgej1QKCIuLi91dGlscy9jb21tb24iKSxO''@;'; put 'put ''PVAoIi4vdHJlZXMiKSxMPVAoIi4vYWRsZXIzMiIpLEs9UCgiLi9jcmMzMiIpLFU9UCgiLi9tZXNzYWdlcyIpLFc9MCxyZT0wLGxlPS0yLHg9MixDPTgsQT0yODYsb2U9MzAsdGU9MTksc2U9MipBKzEsd2U9MTUsVWU9MyxKZT0yNTgsYXQ9SmUrVWUrMSx2ZT00MixSZT0xMTM7ZnVuY3Rpb24g''@;'; put 'put ''UWUoV2UsVHQpe3JldHVybiBXZS5tc2c9VVtUdF0sVHR9ZnVuY3Rpb24gZG4oV2Upe3JldHVybihXZTw8MSktKFdlPjQ/OTowKX1mdW5jdGlvbiB5dChXZSl7Zm9yKHZhciBUdD1XZS5sZW5ndGg7LS1UdD49MDspV2VbVHRdPTB9ZnVuY3Rpb24gTXQoV2Upe3ZhciBUdD1XZS5zdGF0ZSxycj1U''@;'; put 'put ''dC5wZW5kaW5nO3JyPldlLmF2YWlsX291dCYmKHJyPVdlLmF2YWlsX291dCksMCE9PXJyJiYoei5hcnJheVNldChXZS5vdXRwdXQsVHQucGVuZGluZ19idWYsVHQucGVuZGluZ19vdXQscnIsV2UubmV4dF9vdXQpLFdlLm5leHRfb3V0Kz1ycixUdC5wZW5kaW5nX291dCs9cnIsV2UudG90YWxf''@;'; put 'put ''b3V0Kz1ycixXZS5hdmFpbF9vdXQtPXJyLFR0LnBlbmRpbmctPXJyLDA9PT1UdC5wZW5kaW5nJiYoVHQucGVuZGluZ19vdXQ9MCkpfWZ1bmN0aW9uIER0KFdlLFR0KXtOLl90cl9mbHVzaF9ibG9jayhXZSxXZS5ibG9ja19zdGFydD49MD9XZS5ibG9ja19zdGFydDotMSxXZS5zdHJzdGFydC1X''@;'; put 'put ''ZS5ibG9ja19zdGFydCxUdCksV2UuYmxvY2tfc3RhcnQ9V2Uuc3Ryc3RhcnQsTXQoV2Uuc3RybSl9ZnVuY3Rpb24gaXQoV2UsVHQpe1dlLnBlbmRpbmdfYnVmW1dlLnBlbmRpbmcrK109VHR9ZnVuY3Rpb24gJGUoV2UsVHQpe1dlLnBlbmRpbmdfYnVmW1dlLnBlbmRpbmcrK109VHQ+Pj44JjI1''@;'; put 'put ''NSxXZS5wZW5kaW5nX2J1ZltXZS5wZW5kaW5nKytdPTI1NSZUdH1mdW5jdGlvbiB0dChXZSxUdCxycixodCl7dmFyIHh0PVdlLmF2YWlsX2luO3JldHVybiB4dD5odCYmKHh0PWh0KSwwPT09eHQ/MDooV2UuYXZhaWxfaW4tPXh0LHouYXJyYXlTZXQoVHQsV2UuaW5wdXQsV2UubmV4dF9pbix4''@;'; put 'put ''dCxyciksMT09PVdlLnN0YXRlLndyYXA/V2UuYWRsZXI9TChXZS5hZGxlcixUdCx4dCxycik6Mj09PVdlLnN0YXRlLndyYXAmJihXZS5hZGxlcj1LKFdlLmFkbGVyLFR0LHh0LHJyKSksV2UubmV4dF9pbis9eHQsV2UudG90YWxfaW4rPXh0LHh0KX1mdW5jdGlvbiBIZShXZSxUdCl7dmFyIHh0''@;'; put 'put ''LEJuLHJyPVdlLm1heF9jaGFpbl9sZW5ndGgsaHQ9V2Uuc3Ryc3RhcnQsb249V2UucHJldl9sZW5ndGgsanQ9V2UubmljZV9tYXRjaCxkaT1XZS5zdHJzdGFydD5XZS53X3NpemUtYXQ/V2Uuc3Ryc3RhcnQtKFdlLndfc2l6ZS1hdCk6MCxjbj1XZS53aW5kb3cscG49V2Uud19tYXNrLElpPVdl''@;'; put 'put ''LnByZXYsWHQ9V2Uuc3Ryc3RhcnQrSmUsZW49Y25baHQrb24tMV0saG89Y25baHQrb25dO1dlLnByZXZfbGVuZ3RoPj1XZS5nb29kX21hdGNoJiYocnI+Pj0yKSxqdD5XZS5sb29rYWhlYWQmJihqdD1XZS5sb29rYWhlYWQpO2Rve2lmKGNuWyh4dD1UdCkrb25dPT09aG8mJmNuW3h0K29uLTFd''@;'; put 'put ''PT09ZW4mJmNuW3h0XT09PWNuW2h0XSYmY25bKyt4dF09PT1jbltodCsxXSl7aHQrPTIseHQrKztkb3t9d2hpbGUoY25bKytodF09PT1jblsrK3h0XSYmY25bKytodF09PT1jblsrK3h0XSYmY25bKytodF09PT1jblsrK3h0XSYmY25bKytodF09PT1jblsrK3h0XSYmY25bKytodF09PT1jblsr''@;'; put 'put ''K3h0XSYmY25bKytodF09PT1jblsrK3h0XSYmY25bKytodF09PT1jblsrK3h0XSYmY25bKytodF09PT1jblsrK3h0XSYmaHQ8WHQpO2lmKEJuPUplLShYdC1odCksaHQ9WHQtSmUsQm4+b24pe2lmKFdlLm1hdGNoX3N0YXJ0PVR0LG9uPUJuLEJuPj1qdClicmVhaztlbj1jbltodCtvbi0xXSxo''@;'; put 'put ''bz1jbltodCtvbl19fX13aGlsZSgoVHQ9SWlbVHQmcG5dKT5kaSYmMCE9LS1ycik7cmV0dXJuIG9uPD1XZS5sb29rYWhlYWQ/b246V2UubG9va2FoZWFkfWZ1bmN0aW9uIGR0KFdlKXt2YXIgcnIsaHQseHQsQm4sb24sVHQ9V2Uud19zaXplO2Rve2lmKEJuPVdlLndpbmRvd19zaXplLVdlLmxv''@;'; put 'put ''b2thaGVhZC1XZS5zdHJzdGFydCxXZS5zdHJzdGFydD49VHQrKFR0LWF0KSl7ei5hcnJheVNldChXZS53aW5kb3csV2Uud2luZG93LFR0LFR0LDApLFdlLm1hdGNoX3N0YXJ0LT1UdCxXZS5zdHJzdGFydC09VHQsV2UuYmxvY2tfc3RhcnQtPVR0LHJyPWh0PVdlLmhhc2hfc2l6ZTtkb3t4dD1X''@;'; put 'put ''ZS5oZWFkWy0tcnJdLFdlLmhlYWRbcnJdPXh0Pj1UdD94dC1UdDowfXdoaWxlKC0taHQpO3JyPWh0PVR0O2Rve3h0PVdlLnByZXZbLS1ycl0sV2UucHJldltycl09eHQ+PVR0P3h0LVR0OjB9d2hpbGUoLS1odCk7Qm4rPVR0fWlmKDA9PT1XZS5zdHJtLmF2YWlsX2luKWJyZWFrO2lmKGh0PXR0''@;'; put 'put ''KFdlLnN0cm0sV2Uud2luZG93LFdlLnN0cnN0YXJ0K1dlLmxvb2thaGVhZCxCbiksV2UubG9va2FoZWFkKz1odCxXZS5sb29rYWhlYWQrV2UuaW5zZXJ0Pj1VZSlmb3IoV2UuaW5zX2g9V2Uud2luZG93W29uPVdlLnN0cnN0YXJ0LVdlLmluc2VydF0sV2UuaW5zX2g9KFdlLmluc19oPDxXZS5o''@;'; put 'put ''YXNoX3NoaWZ0XldlLndpbmRvd1tvbisxXSkmV2UuaGFzaF9tYXNrO1dlLmluc2VydCYmKFdlLmluc19oPShXZS5pbnNfaDw8V2UuaGFzaF9zaGlmdF5XZS53aW5kb3dbb24rVWUtMV0pJldlLmhhc2hfbWFzayxXZS5wcmV2W29uJldlLndfbWFza109V2UuaGVhZFtXZS5pbnNfaF0sV2UuaGVh''@;'; put 'put ''ZFtXZS5pbnNfaF09b24sb24rKyxXZS5pbnNlcnQtLSwhKFdlLmxvb2thaGVhZCtXZS5pbnNlcnQ8VWUpKTspO313aGlsZShXZS5sb29rYWhlYWQ8YXQmJjAhPT1XZS5zdHJtLmF2YWlsX2luKX1mdW5jdGlvbiBSdChXZSxUdCl7Zm9yKHZhciBycixodDs7KXtpZihXZS5sb29rYWhlYWQ8YXQp''@;'; put 'put ''e2lmKGR0KFdlKSxXZS5sb29rYWhlYWQ8YXQmJlR0PT09VylyZXR1cm4gMTtpZigwPT09V2UubG9va2FoZWFkKWJyZWFrfWlmKHJyPTAsV2UubG9va2FoZWFkPj1VZSYmKFdlLmluc19oPShXZS5pbnNfaDw8V2UuaGFzaF9zaGlmdF5XZS53aW5kb3dbV2Uuc3Ryc3RhcnQrVWUtMV0pJldlLmhh''@;'; put 'put ''c2hfbWFzayxycj1XZS5wcmV2W1dlLnN0cnN0YXJ0JldlLndfbWFza109V2UuaGVhZFtXZS5pbnNfaF0sV2UuaGVhZFtXZS5pbnNfaF09V2Uuc3Ryc3RhcnQpLDAhPT1yciYmV2Uuc3Ryc3RhcnQtcnI8PVdlLndfc2l6ZS1hdCYmKFdlLm1hdGNoX2xlbmd0aD1IZShXZSxycikpLFdlLm1hdGNo''@;'; put 'put ''X2xlbmd0aD49VWUpaWYoaHQ9Ti5fdHJfdGFsbHkoV2UsV2Uuc3Ryc3RhcnQtV2UubWF0Y2hfc3RhcnQsV2UubWF0Y2hfbGVuZ3RoLVVlKSxXZS5sb29rYWhlYWQtPVdlLm1hdGNoX2xlbmd0aCxXZS5tYXRjaF9sZW5ndGg8PVdlLm1heF9sYXp5X21hdGNoJiZXZS5sb29rYWhlYWQ+PVVlKXtX''@;'; put 'put ''ZS5tYXRjaF9sZW5ndGgtLTtkb3tXZS5zdHJzdGFydCsrLFdlLmluc19oPShXZS5pbnNfaDw8V2UuaGFzaF9zaGlmdF5XZS53aW5kb3dbV2Uuc3Ryc3RhcnQrVWUtMV0pJldlLmhhc2hfbWFzayxycj1XZS5wcmV2W1dlLnN0cnN0YXJ0JldlLndfbWFza109V2UuaGVhZFtXZS5pbnNfaF0sV2Uu''@;'; put 'put ''aGVhZFtXZS5pbnNfaF09V2Uuc3Ryc3RhcnR9d2hpbGUoMCE9LS1XZS5tYXRjaF9sZW5ndGgpO1dlLnN0cnN0YXJ0Kyt9ZWxzZSBXZS5zdHJzdGFydCs9V2UubWF0Y2hfbGVuZ3RoLFdlLm1hdGNoX2xlbmd0aD0wLFdlLmluc19oPVdlLndpbmRvd1tXZS5zdHJzdGFydF0sV2UuaW5zX2g9KFdl''@;'; put 'put ''Lmluc19oPDxXZS5oYXNoX3NoaWZ0XldlLndpbmRvd1tXZS5zdHJzdGFydCsxXSkmV2UuaGFzaF9tYXNrO2Vsc2UgaHQ9Ti5fdHJfdGFsbHkoV2UsMCxXZS53aW5kb3dbV2Uuc3Ryc3RhcnRdKSxXZS5sb29rYWhlYWQtLSxXZS5zdHJzdGFydCsrO2lmKGh0JiYoRHQoV2UsITEpLDA9PT1XZS5z''@;'; put 'put ''dHJtLmF2YWlsX291dCkpcmV0dXJuIDF9cmV0dXJuIFdlLmluc2VydD1XZS5zdHJzdGFydDxVZS0xP1dlLnN0cnN0YXJ0OlVlLTEsND09PVR0PyhEdChXZSwhMCksMD09PVdlLnN0cm0uYXZhaWxfb3V0PzM6NCk6V2UubGFzdF9saXQmJihEdChXZSwhMSksMD09PVdlLnN0cm0uYXZhaWxfb3V0''@;'; put 'put ''KT8xOjJ9ZnVuY3Rpb24gUHQoV2UsVHQpe2Zvcih2YXIgcnIsaHQseHQ7Oyl7aWYoV2UubG9va2FoZWFkPGF0KXtpZihkdChXZSksV2UubG9va2FoZWFkPGF0JiZUdD09PVcpcmV0dXJuIDE7aWYoMD09PVdlLmxvb2thaGVhZClicmVha31pZihycj0wLFdlLmxvb2thaGVhZD49VWUmJihXZS5p''@;'; put 'put ''bnNfaD0oV2UuaW5zX2g8PFdlLmhhc2hfc2hpZnReV2Uud2luZG93W1dlLnN0cnN0YXJ0K1VlLTFdKSZXZS5oYXNoX21hc2sscnI9V2UucHJldltXZS5zdHJzdGFydCZXZS53X21hc2tdPVdlLmhlYWRbV2UuaW5zX2hdLFdlLmhlYWRbV2UuaW5zX2hdPVdlLnN0cnN0YXJ0KSxXZS5wcmV2X2xl''@;'; put 'put ''bmd0aD1XZS5tYXRjaF9sZW5ndGgsV2UucHJldl9tYXRjaD1XZS5tYXRjaF9zdGFydCxXZS5tYXRjaF9sZW5ndGg9VWUtMSwwIT09cnImJldlLnByZXZfbGVuZ3RoPFdlLm1heF9sYXp5X21hdGNoJiZXZS5zdHJzdGFydC1ycjw9V2Uud19zaXplLWF0JiYoV2UubWF0Y2hfbGVuZ3RoPUhlKFdl''@;'; put 'put ''LHJyKSxXZS5tYXRjaF9sZW5ndGg8PTUmJigxPT09V2Uuc3RyYXRlZ3l8fFdlLm1hdGNoX2xlbmd0aD09PVVlJiZXZS5zdHJzdGFydC1XZS5tYXRjaF9zdGFydD40MDk2KSYmKFdlLm1hdGNoX2xlbmd0aD1VZS0xKSksV2UucHJldl9sZW5ndGg+PVVlJiZXZS5tYXRjaF9sZW5ndGg8PVdlLnBy''@;'; put 'put ''ZXZfbGVuZ3RoKXt4dD1XZS5zdHJzdGFydCtXZS5sb29rYWhlYWQtVWUsaHQ9Ti5fdHJfdGFsbHkoV2UsV2Uuc3Ryc3RhcnQtMS1XZS5wcmV2X21hdGNoLFdlLnByZXZfbGVuZ3RoLVVlKSxXZS5sb29rYWhlYWQtPVdlLnByZXZfbGVuZ3RoLTEsV2UucHJldl9sZW5ndGgtPTI7ZG97KytXZS5z''@;'; put 'put ''dHJzdGFydDw9eHQmJihXZS5pbnNfaD0oV2UuaW5zX2g8PFdlLmhhc2hfc2hpZnReV2Uud2luZG93W1dlLnN0cnN0YXJ0K1VlLTFdKSZXZS5oYXNoX21hc2sscnI9V2UucHJldltXZS5zdHJzdGFydCZXZS53X21hc2tdPVdlLmhlYWRbV2UuaW5zX2hdLFdlLmhlYWRbV2UuaW5zX2hdPVdlLnN0''@;'; put 'put ''cnN0YXJ0KX13aGlsZSgwIT0tLVdlLnByZXZfbGVuZ3RoKTtpZihXZS5tYXRjaF9hdmFpbGFibGU9MCxXZS5tYXRjaF9sZW5ndGg9VWUtMSxXZS5zdHJzdGFydCsrLGh0JiYoRHQoV2UsITEpLDA9PT1XZS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDF9ZWxzZSBpZihXZS5tYXRjaF9hdmFpbGFi''@;'; put 'put ''bGUpe2lmKChodD1OLl90cl90YWxseShXZSwwLFdlLndpbmRvd1tXZS5zdHJzdGFydC0xXSkpJiZEdChXZSwhMSksV2Uuc3Ryc3RhcnQrKyxXZS5sb29rYWhlYWQtLSwwPT09V2Uuc3RybS5hdmFpbF9vdXQpcmV0dXJuIDF9ZWxzZSBXZS5tYXRjaF9hdmFpbGFibGU9MSxXZS5zdHJzdGFydCsr''@;'; put 'put ''LFdlLmxvb2thaGVhZC0tfXJldHVybiBXZS5tYXRjaF9hdmFpbGFibGUmJihodD1OLl90cl90YWxseShXZSwwLFdlLndpbmRvd1tXZS5zdHJzdGFydC0xXSksV2UubWF0Y2hfYXZhaWxhYmxlPTApLFdlLmluc2VydD1XZS5zdHJzdGFydDxVZS0xP1dlLnN0cnN0YXJ0OlVlLTEsND09PVR0PyhE''@;'; put 'put ''dChXZSwhMCksMD09PVdlLnN0cm0uYXZhaWxfb3V0PzM6NCk6V2UubGFzdF9saXQmJihEdChXZSwhMSksMD09PVdlLnN0cm0uYXZhaWxfb3V0KT8xOjJ9dmFyIFJpLHNuPWZ1bmN0aW9uKFdlLFR0LHJyLGh0LHh0KXt0aGlzLmdvb2RfbGVuZ3RoPVdlLHRoaXMubWF4X2xhenk9VHQsdGhpcy5u''@;'; put 'put ''aWNlX2xlbmd0aD1ycix0aGlzLm1heF9jaGFpbj1odCx0aGlzLmZ1bmM9eHR9O2Z1bmN0aW9uIGZ0KCl7dGhpcy5zdHJtPW51bGwsdGhpcy5zdGF0dXM9MCx0aGlzLnBlbmRpbmdfYnVmPW51bGwsdGhpcy5wZW5kaW5nX2J1Zl9zaXplPTAsdGhpcy5wZW5kaW5nX291dD0wLHRoaXMucGVuZGlu''@;'; put 'put ''Zz0wLHRoaXMud3JhcD0wLHRoaXMuZ3poZWFkPW51bGwsdGhpcy5nemluZGV4PTAsdGhpcy5tZXRob2Q9Qyx0aGlzLmxhc3RfZmx1c2g9LTEsdGhpcy53X3NpemU9MCx0aGlzLndfYml0cz0wLHRoaXMud19tYXNrPTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLndpbmRvd19zaXplPTAsdGhpcy5w''@;'; put 'put ''cmV2PW51bGwsdGhpcy5oZWFkPW51bGwsdGhpcy5pbnNfaD0wLHRoaXMuaGFzaF9zaXplPTAsdGhpcy5oYXNoX2JpdHM9MCx0aGlzLmhhc2hfbWFzaz0wLHRoaXMuaGFzaF9zaGlmdD0wLHRoaXMuYmxvY2tfc3RhcnQ9MCx0aGlzLm1hdGNoX2xlbmd0aD0wLHRoaXMucHJldl9tYXRjaD0wLHRo''@;'; put 'put ''aXMubWF0Y2hfYXZhaWxhYmxlPTAsdGhpcy5zdHJzdGFydD0wLHRoaXMubWF0Y2hfc3RhcnQ9MCx0aGlzLmxvb2thaGVhZD0wLHRoaXMucHJldl9sZW5ndGg9MCx0aGlzLm1heF9jaGFpbl9sZW5ndGg9MCx0aGlzLm1heF9sYXp5X21hdGNoPTAsdGhpcy5sZXZlbD0wLHRoaXMuc3RyYXRlZ3k9''@;'; put 'put ''MCx0aGlzLmdvb2RfbWF0Y2g9MCx0aGlzLm5pY2VfbWF0Y2g9MCx0aGlzLmR5bl9sdHJlZT1uZXcgei5CdWYxNigyKnNlKSx0aGlzLmR5bl9kdHJlZT1uZXcgei5CdWYxNigyKigyKm9lKzEpKSx0aGlzLmJsX3RyZWU9bmV3IHouQnVmMTYoMiooMip0ZSsxKSkseXQodGhpcy5keW5fbHRyZWUp''@;'; put 'put ''LHl0KHRoaXMuZHluX2R0cmVlKSx5dCh0aGlzLmJsX3RyZWUpLHRoaXMubF9kZXNjPW51bGwsdGhpcy5kX2Rlc2M9bnVsbCx0aGlzLmJsX2Rlc2M9bnVsbCx0aGlzLmJsX2NvdW50PW5ldyB6LkJ1ZjE2KHdlKzEpLHRoaXMuaGVhcD1uZXcgei5CdWYxNigyKkErMSkseXQodGhpcy5oZWFwKSx0''@;'; put 'put ''aGlzLmhlYXBfbGVuPTAsdGhpcy5oZWFwX21heD0wLHRoaXMuZGVwdGg9bmV3IHouQnVmMTYoMipBKzEpLHl0KHRoaXMuZGVwdGgpLHRoaXMubF9idWY9MCx0aGlzLmxpdF9idWZzaXplPTAsdGhpcy5sYXN0X2xpdD0wLHRoaXMuZF9idWY9MCx0aGlzLm9wdF9sZW49MCx0aGlzLnN0YXRpY19s''@;'; put 'put ''ZW49MCx0aGlzLm1hdGNoZXM9MCx0aGlzLmluc2VydD0wLHRoaXMuYmlfYnVmPTAsdGhpcy5iaV92YWxpZD0wfWZ1bmN0aW9uIFByKFdlKXt2YXIgVHQ7cmV0dXJuIFdlJiZXZS5zdGF0ZT8oV2UudG90YWxfaW49V2UudG90YWxfb3V0PTAsV2UuZGF0YV90eXBlPXgsKFR0PVdlLnN0YXRlKS5w''@;'; put 'put ''ZW5kaW5nPTAsVHQucGVuZGluZ19vdXQ9MCxUdC53cmFwPDAmJihUdC53cmFwPS1UdC53cmFwKSxUdC5zdGF0dXM9VHQud3JhcD92ZTpSZSxXZS5hZGxlcj0yPT09VHQud3JhcD8wOjEsVHQubGFzdF9mbHVzaD1XLE4uX3RyX2luaXQoVHQpLHJlKTpRZShXZSxsZSl9ZnVuY3Rpb24gWnQoV2Up''@;'; put 'put ''e3ZhciBUdD1QcihXZSk7cmV0dXJuIFR0PT09cmUmJmZ1bmN0aW9uIGZuKFdlKXtXZS53aW5kb3dfc2l6ZT0yKldlLndfc2l6ZSx5dChXZS5oZWFkKSxXZS5tYXhfbGF6eV9tYXRjaD1SaVtXZS5sZXZlbF0ubWF4X2xhenksV2UuZ29vZF9tYXRjaD1SaVtXZS5sZXZlbF0uZ29vZF9sZW5ndGgs''@;'; put 'put ''V2UubmljZV9tYXRjaD1SaVtXZS5sZXZlbF0ubmljZV9sZW5ndGgsV2UubWF4X2NoYWluX2xlbmd0aD1SaVtXZS5sZXZlbF0ubWF4X2NoYWluLFdlLnN0cnN0YXJ0PTAsV2UuYmxvY2tfc3RhcnQ9MCxXZS5sb29rYWhlYWQ9MCxXZS5pbnNlcnQ9MCxXZS5tYXRjaF9sZW5ndGg9V2UucHJldl9s''@;'; put 'put ''ZW5ndGg9VWUtMSxXZS5tYXRjaF9hdmFpbGFibGU9MCxXZS5pbnNfaD0wfShXZS5zdGF0ZSksVHR9ZnVuY3Rpb24gTG4oV2UsVHQscnIsaHQseHQsQm4pe2lmKCFXZSlyZXR1cm4gbGU7dmFyIG9uPTE7aWYoLTE9PT1UdCYmKFR0PTYpLGh0PDA/KG9uPTAsaHQ9LWh0KTpodD4xNSYmKG9uPTIs''@;'; put 'put ''aHQtPTE2KSx4dDwxfHx4dD45fHxyciE9PUN8fGh0PDh8fGh0PjE1fHxUdDwwfHxUdD45fHxCbjwwfHxCbj40KXJldHVybiBRZShXZSxsZSk7OD09PWh0JiYoaHQ9OSk7dmFyIGp0PW5ldyBmdDtyZXR1cm4gV2Uuc3RhdGU9anQsanQuc3RybT1XZSxqdC53cmFwPW9uLGp0Lmd6aGVhZD1udWxs''@;'; put 'put ''LGp0LndfYml0cz1odCxqdC53X3NpemU9MTw8anQud19iaXRzLGp0LndfbWFzaz1qdC53X3NpemUtMSxqdC5oYXNoX2JpdHM9eHQrNyxqdC5oYXNoX3NpemU9MTw8anQuaGFzaF9iaXRzLGp0Lmhhc2hfbWFzaz1qdC5oYXNoX3NpemUtMSxqdC5oYXNoX3NoaWZ0PX5+KChqdC5oYXNoX2JpdHMr''@;'; put 'put ''VWUtMSkvVWUpLGp0LndpbmRvdz1uZXcgei5CdWY4KDIqanQud19zaXplKSxqdC5oZWFkPW5ldyB6LkJ1ZjE2KGp0Lmhhc2hfc2l6ZSksanQucHJldj1uZXcgei5CdWYxNihqdC53X3NpemUpLGp0LmxpdF9idWZzaXplPTE8PHh0KzYsanQucGVuZGluZ19idWZfc2l6ZT00Kmp0LmxpdF9idWZz''@;'; put 'put ''aXplLGp0LnBlbmRpbmdfYnVmPW5ldyB6LkJ1ZjgoanQucGVuZGluZ19idWZfc2l6ZSksanQuZF9idWY9anQubGl0X2J1ZnNpemU+PjEsanQubF9idWY9MypqdC5saXRfYnVmc2l6ZSxqdC5sZXZlbD1UdCxqdC5zdHJhdGVneT1CbixqdC5tZXRob2Q9cnIsWnQoV2UpfVJpPVtuZXcgc24oMCww''@;'; put 'put ''LDAsMCxmdW5jdGlvbiBxdChXZSxUdCl7dmFyIHJyPTY1NTM1O2Zvcihycj5XZS5wZW5kaW5nX2J1Zl9zaXplLTUmJihycj1XZS5wZW5kaW5nX2J1Zl9zaXplLTUpOzspe2lmKFdlLmxvb2thaGVhZDw9MSl7aWYoZHQoV2UpLDA9PT1XZS5sb29rYWhlYWQmJlR0PT09VylyZXR1cm4gMTtpZigw''@;'; put 'put ''PT09V2UubG9va2FoZWFkKWJyZWFrfVdlLnN0cnN0YXJ0Kz1XZS5sb29rYWhlYWQsV2UubG9va2FoZWFkPTA7dmFyIGh0PVdlLmJsb2NrX3N0YXJ0K3JyO2lmKCgwPT09V2Uuc3Ryc3RhcnR8fFdlLnN0cnN0YXJ0Pj1odCkmJihXZS5sb29rYWhlYWQ9V2Uuc3Ryc3RhcnQtaHQsV2Uuc3Ryc3Rh''@;'; put 'put ''cnQ9aHQsRHQoV2UsITEpLDA9PT1XZS5zdHJtLmF2YWlsX291dCl8fFdlLnN0cnN0YXJ0LVdlLmJsb2NrX3N0YXJ0Pj1XZS53X3NpemUtYXQmJihEdChXZSwhMSksMD09PVdlLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1yZXR1cm4gV2UuaW5zZXJ0PTAsND09PVR0PyhEdChXZSwhMCksMD09''@;'; put 'put ''PVdlLnN0cm0uYXZhaWxfb3V0PzM6NCk6KFdlLnN0cnN0YXJ0PldlLmJsb2NrX3N0YXJ0JiZEdChXZSwhMSksMSl9KSxuZXcgc24oNCw0LDgsNCxSdCksbmV3IHNuKDQsNSwxNiw4LFJ0KSxuZXcgc24oNCw2LDMyLDMyLFJ0KSxuZXcgc24oNCw0LDE2LDE2LFB0KSxuZXcgc24oOCwxNiwzMiwz''@;'; put 'put ''MixQdCksbmV3IHNuKDgsMTYsMTI4LDEyOCxQdCksbmV3IHNuKDgsMzIsMTI4LDI1NixQdCksbmV3IHNuKDMyLDEyOCwyNTgsMTAyNCxQdCksbmV3IHNuKDMyLDI1OCwyNTgsNDA5NixQdCldLE8uZGVmbGF0ZUluaXQ9ZnVuY3Rpb24gc3QoV2UsVHQpe3JldHVybiBMbihXZSxUdCxDLDE1LDgs''@;'; put 'put ''MCl9LE8uZGVmbGF0ZUluaXQyPUxuLE8uZGVmbGF0ZVJlc2V0PVp0LE8uZGVmbGF0ZVJlc2V0S2VlcD1QcixPLmRlZmxhdGVTZXRIZWFkZXI9ZnVuY3Rpb24gQXQoV2UsVHQpe3JldHVybiBXZSYmV2Uuc3RhdGUmJjI9PT1XZS5zdGF0ZS53cmFwPyhXZS5zdGF0ZS5nemhlYWQ9VHQscmUpOmxl''@;'; put 'put ''fSxPLmRlZmxhdGU9ZnVuY3Rpb24genQoV2UsVHQpe3ZhciBycixodCx4dCxCbjtpZighV2V8fCFXZS5zdGF0ZXx8VHQ+NXx8VHQ8MClyZXR1cm4gV2U/UWUoV2UsbGUpOmxlO2lmKGh0PVdlLnN0YXRlLCFXZS5vdXRwdXR8fCFXZS5pbnB1dCYmMCE9PVdlLmF2YWlsX2lufHw2NjY9PT1odC5z''@;'; put 'put ''dGF0dXMmJjQhPT1UdClyZXR1cm4gUWUoV2UsMD09PVdlLmF2YWlsX291dD8tNTpsZSk7aWYoaHQuc3RybT1XZSxycj1odC5sYXN0X2ZsdXNoLGh0Lmxhc3RfZmx1c2g9VHQsaHQuc3RhdHVzPT09dmUpaWYoMj09PWh0LndyYXApV2UuYWRsZXI9MCxpdChodCwzMSksaXQoaHQsMTM5KSxpdCho''@;'; put 'put ''dCw4KSxodC5nemhlYWQ/KGl0KGh0LChodC5nemhlYWQudGV4dD8xOjApKyhodC5nemhlYWQuaGNyYz8yOjApKyhodC5nemhlYWQuZXh0cmE/NDowKSsoaHQuZ3poZWFkLm5hbWU/ODowKSsoaHQuZ3poZWFkLmNvbW1lbnQ/MTY6MCkpLGl0KGh0LDI1NSZodC5nemhlYWQudGltZSksaXQoaHQs''@;'; put 'put ''aHQuZ3poZWFkLnRpbWU+PjgmMjU1KSxpdChodCxodC5nemhlYWQudGltZT4+MTYmMjU1KSxpdChodCxodC5nemhlYWQudGltZT4+MjQmMjU1KSxpdChodCw5PT09aHQubGV2ZWw/MjpodC5zdHJhdGVneT49Mnx8aHQubGV2ZWw8Mj80OjApLGl0KGh0LDI1NSZodC5nemhlYWQub3MpLGh0Lmd6''@;'; put 'put ''aGVhZC5leHRyYSYmaHQuZ3poZWFkLmV4dHJhLmxlbmd0aCYmKGl0KGh0LDI1NSZodC5nemhlYWQuZXh0cmEubGVuZ3RoKSxpdChodCxodC5nemhlYWQuZXh0cmEubGVuZ3RoPj44JjI1NSkpLGh0Lmd6aGVhZC5oY3JjJiYoV2UuYWRsZXI9SyhXZS5hZGxlcixodC5wZW5kaW5nX2J1ZixodC5w''@;'; put 'put ''ZW5kaW5nLDApKSxodC5nemluZGV4PTAsaHQuc3RhdHVzPTY5KTooaXQoaHQsMCksaXQoaHQsMCksaXQoaHQsMCksaXQoaHQsMCksaXQoaHQsMCksaXQoaHQsOT09PWh0LmxldmVsPzI6aHQuc3RyYXRlZ3k+PTJ8fGh0LmxldmVsPDI/NDowKSxpdChodCwzKSxodC5zdGF0dXM9UmUpO2Vsc2V7''@;'; put 'put ''dmFyIG9uPUMrKGh0LndfYml0cy04PDw0KTw8ODtvbnw9KGh0LnN0cmF0ZWd5Pj0yfHxodC5sZXZlbDwyPzA6aHQubGV2ZWw8Nj8xOjY9PT1odC5sZXZlbD8yOjMpPDw2LDAhPT1odC5zdHJzdGFydCYmKG9ufD0zMiksb24rPTMxLW9uJTMxLGh0LnN0YXR1cz1SZSwkZShodCxvbiksMCE9PWh0''@;'; put 'put ''LnN0cnN0YXJ0JiYoJGUoaHQsV2UuYWRsZXI+Pj4xNiksJGUoaHQsNjU1MzUmV2UuYWRsZXIpKSxXZS5hZGxlcj0xfWlmKDY5PT09aHQuc3RhdHVzKWlmKGh0Lmd6aGVhZC5leHRyYSl7Zm9yKHh0PWh0LnBlbmRpbmc7aHQuZ3ppbmRleDwoNjU1MzUmaHQuZ3poZWFkLmV4dHJhLmxlbmd0aCkm''@;'; put 'put ''JihodC5wZW5kaW5nIT09aHQucGVuZGluZ19idWZfc2l6ZXx8KGh0Lmd6aGVhZC5oY3JjJiZodC5wZW5kaW5nPnh0JiYoV2UuYWRsZXI9SyhXZS5hZGxlcixodC5wZW5kaW5nX2J1ZixodC5wZW5kaW5nLXh0LHh0KSksTXQoV2UpLHh0PWh0LnBlbmRpbmcsaHQucGVuZGluZyE9PWh0LnBlbmRp''@;'; put 'put ''bmdfYnVmX3NpemUpKTspaXQoaHQsMjU1Jmh0Lmd6aGVhZC5leHRyYVtodC5nemluZGV4XSksaHQuZ3ppbmRleCsrO2h0Lmd6aGVhZC5oY3JjJiZodC5wZW5kaW5nPnh0JiYoV2UuYWRsZXI9SyhXZS5hZGxlcixodC5wZW5kaW5nX2J1ZixodC5wZW5kaW5nLXh0LHh0KSksaHQuZ3ppbmRleD09''@;'; put 'put ''PWh0Lmd6aGVhZC5leHRyYS5sZW5ndGgmJihodC5nemluZGV4PTAsaHQuc3RhdHVzPTczKX1lbHNlIGh0LnN0YXR1cz03MztpZig3Mz09PWh0LnN0YXR1cylpZihodC5nemhlYWQubmFtZSl7eHQ9aHQucGVuZGluZztkb3tpZihodC5wZW5kaW5nPT09aHQucGVuZGluZ19idWZfc2l6ZSYmKGh0''@;'; put 'put ''Lmd6aGVhZC5oY3JjJiZodC5wZW5kaW5nPnh0JiYoV2UuYWRsZXI9SyhXZS5hZGxlcixodC5wZW5kaW5nX2J1ZixodC5wZW5kaW5nLXh0LHh0KSksTXQoV2UpLHh0PWh0LnBlbmRpbmcsaHQucGVuZGluZz09PWh0LnBlbmRpbmdfYnVmX3NpemUpKXtCbj0xO2JyZWFrfUJuPWh0Lmd6aW5kZXg8''@;'; put 'put ''aHQuZ3poZWFkLm5hbWUubGVuZ3RoPzI1NSZodC5nemhlYWQubmFtZS5jaGFyQ29kZUF0KGh0Lmd6aW5kZXgrKyk6MCxpdChodCxCbil9d2hpbGUoMCE9PUJuKTtodC5nemhlYWQuaGNyYyYmaHQucGVuZGluZz54dCYmKFdlLmFkbGVyPUsoV2UuYWRsZXIsaHQucGVuZGluZ19idWYsaHQucGVu''@;'; put 'put ''ZGluZy14dCx4dCkpLDA9PT1CbiYmKGh0Lmd6aW5kZXg9MCxodC5zdGF0dXM9OTEpfWVsc2UgaHQuc3RhdHVzPTkxO2lmKDkxPT09aHQuc3RhdHVzKWlmKGh0Lmd6aGVhZC5jb21tZW50KXt4dD1odC5wZW5kaW5nO2Rve2lmKGh0LnBlbmRpbmc9PT1odC5wZW5kaW5nX2J1Zl9zaXplJiYoaHQu''@;'; put 'put ''Z3poZWFkLmhjcmMmJmh0LnBlbmRpbmc+eHQmJihXZS5hZGxlcj1LKFdlLmFkbGVyLGh0LnBlbmRpbmdfYnVmLGh0LnBlbmRpbmcteHQseHQpKSxNdChXZSkseHQ9aHQucGVuZGluZyxodC5wZW5kaW5nPT09aHQucGVuZGluZ19idWZfc2l6ZSkpe0JuPTE7YnJlYWt9Qm49aHQuZ3ppbmRleDxo''@;'; put 'put ''dC5nemhlYWQuY29tbWVudC5sZW5ndGg/MjU1Jmh0Lmd6aGVhZC5jb21tZW50LmNoYXJDb2RlQXQoaHQuZ3ppbmRleCsrKTowLGl0KGh0LEJuKX13aGlsZSgwIT09Qm4pO2h0Lmd6aGVhZC5oY3JjJiZodC5wZW5kaW5nPnh0JiYoV2UuYWRsZXI9SyhXZS5hZGxlcixodC5wZW5kaW5nX2J1Zixo''@;'; put 'put ''dC5wZW5kaW5nLXh0LHh0KSksMD09PUJuJiYoaHQuc3RhdHVzPTEwMyl9ZWxzZSBodC5zdGF0dXM9MTAzO2lmKDEwMz09PWh0LnN0YXR1cyYmKGh0Lmd6aGVhZC5oY3JjPyhodC5wZW5kaW5nKzI+aHQucGVuZGluZ19idWZfc2l6ZSYmTXQoV2UpLGh0LnBlbmRpbmcrMjw9aHQucGVuZGluZ19i''@;'; put 'put ''dWZfc2l6ZSYmKGl0KGh0LDI1NSZXZS5hZGxlciksaXQoaHQsV2UuYWRsZXI+PjgmMjU1KSxXZS5hZGxlcj0wLGh0LnN0YXR1cz1SZSkpOmh0LnN0YXR1cz1SZSksMCE9PWh0LnBlbmRpbmcpe2lmKE10KFdlKSwwPT09V2UuYXZhaWxfb3V0KXJldHVybiBodC5sYXN0X2ZsdXNoPS0xLHJlfWVs''@;'; put 'put ''c2UgaWYoMD09PVdlLmF2YWlsX2luJiZkbihUdCk8PWRuKHJyKSYmNCE9PVR0KXJldHVybiBRZShXZSwtNSk7aWYoNjY2PT09aHQuc3RhdHVzJiYwIT09V2UuYXZhaWxfaW4pcmV0dXJuIFFlKFdlLC01KTtpZigwIT09V2UuYXZhaWxfaW58fDAhPT1odC5sb29rYWhlYWR8fFR0IT09VyYmNjY2''@;'; put 'put ''IT09aHQuc3RhdHVzKXt2YXIgZGk9Mj09PWh0LnN0cmF0ZWd5P2Z1bmN0aW9uIFF0KFdlLFR0KXtmb3IodmFyIHJyOzspe2lmKDA9PT1XZS5sb29rYWhlYWQmJihkdChXZSksMD09PVdlLmxvb2thaGVhZCkpe2lmKFR0PT09VylyZXR1cm4gMTticmVha31pZihXZS5tYXRjaF9sZW5ndGg9MCxy''@;'; put 'put ''cj1OLl90cl90YWxseShXZSwwLFdlLndpbmRvd1tXZS5zdHJzdGFydF0pLFdlLmxvb2thaGVhZC0tLFdlLnN0cnN0YXJ0KysscnImJihEdChXZSwhMSksMD09PVdlLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1yZXR1cm4gV2UuaW5zZXJ0PTAsND09PVR0PyhEdChXZSwhMCksMD09PVdlLnN0''@;'; put 'put ''cm0uYXZhaWxfb3V0PzM6NCk6V2UubGFzdF9saXQmJihEdChXZSwhMSksMD09PVdlLnN0cm0uYXZhaWxfb3V0KT8xOjJ9KGh0LFR0KTozPT09aHQuc3RyYXRlZ3k/ZnVuY3Rpb24gYWkoV2UsVHQpe2Zvcih2YXIgcnIsaHQseHQsQm4sb249V2Uud2luZG93Ozspe2lmKFdlLmxvb2thaGVhZDw9''@;'; put 'put ''SmUpe2lmKGR0KFdlKSxXZS5sb29rYWhlYWQ8PUplJiZUdD09PVcpcmV0dXJuIDE7aWYoMD09PVdlLmxvb2thaGVhZClicmVha31pZihXZS5tYXRjaF9sZW5ndGg9MCxXZS5sb29rYWhlYWQ+PVVlJiZXZS5zdHJzdGFydD4wJiYoaHQ9b25beHQ9V2Uuc3Ryc3RhcnQtMV0pPT09b25bKyt4dF0m''@;'; put 'put ''Jmh0PT09b25bKyt4dF0mJmh0PT09b25bKyt4dF0pe0JuPVdlLnN0cnN0YXJ0K0plO2Rve313aGlsZShodD09PW9uWysreHRdJiZodD09PW9uWysreHRdJiZodD09PW9uWysreHRdJiZodD09PW9uWysreHRdJiZodD09PW9uWysreHRdJiZodD09PW9uWysreHRdJiZodD09PW9uWysreHRdJiZo''@;'; put 'put ''dD09PW9uWysreHRdJiZ4dDxCbik7V2UubWF0Y2hfbGVuZ3RoPUplLShCbi14dCksV2UubWF0Y2hfbGVuZ3RoPldlLmxvb2thaGVhZCYmKFdlLm1hdGNoX2xlbmd0aD1XZS5sb29rYWhlYWQpfWlmKFdlLm1hdGNoX2xlbmd0aD49VWU/KHJyPU4uX3RyX3RhbGx5KFdlLDEsV2UubWF0Y2hfbGVu''@;'; put 'put ''Z3RoLVVlKSxXZS5sb29rYWhlYWQtPVdlLm1hdGNoX2xlbmd0aCxXZS5zdHJzdGFydCs9V2UubWF0Y2hfbGVuZ3RoLFdlLm1hdGNoX2xlbmd0aD0wKToocnI9Ti5fdHJfdGFsbHkoV2UsMCxXZS53aW5kb3dbV2Uuc3Ryc3RhcnRdKSxXZS5sb29rYWhlYWQtLSxXZS5zdHJzdGFydCsrKSxyciYm''@;'; put 'put ''KER0KFdlLCExKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBXZS5pbnNlcnQ9MCw0PT09VHQ/KER0KFdlLCEwKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQ/Mzo0KTpXZS5sYXN0X2xpdCYmKER0KFdlLCExKSwwPT09V2Uuc3RybS5hdmFpbF9vdXQpPzE6Mn0oaHQsVHQp''@;'; put 'put ''OlJpW2h0LmxldmVsXS5mdW5jKGh0LFR0KTtpZigoMz09PWRpfHw0PT09ZGkpJiYoaHQuc3RhdHVzPTY2NiksMT09PWRpfHwzPT09ZGkpcmV0dXJuIDA9PT1XZS5hdmFpbF9vdXQmJihodC5sYXN0X2ZsdXNoPS0xKSxyZTtpZigyPT09ZGkmJigxPT09VHQ/Ti5fdHJfYWxpZ24oaHQpOjUhPT1U''@;'; put 'put ''dCYmKE4uX3RyX3N0b3JlZF9ibG9jayhodCwwLDAsITEpLDM9PT1UdCYmKHl0KGh0LmhlYWQpLDA9PT1odC5sb29rYWhlYWQmJihodC5zdHJzdGFydD0wLGh0LmJsb2NrX3N0YXJ0PTAsaHQuaW5zZXJ0PTApKSksTXQoV2UpLDA9PT1XZS5hdmFpbF9vdXQpKXJldHVybiBodC5sYXN0X2ZsdXNo''@;'; put 'put ''PS0xLHJlfXJldHVybiA0IT09VHQ/cmU6aHQud3JhcDw9MD8xOigyPT09aHQud3JhcD8oaXQoaHQsMjU1JldlLmFkbGVyKSxpdChodCxXZS5hZGxlcj4+OCYyNTUpLGl0KGh0LFdlLmFkbGVyPj4xNiYyNTUpLGl0KGh0LFdlLmFkbGVyPj4yNCYyNTUpLGl0KGh0LDI1NSZXZS50b3RhbF9pbiks''@;'; put 'put ''aXQoaHQsV2UudG90YWxfaW4+PjgmMjU1KSxpdChodCxXZS50b3RhbF9pbj4+MTYmMjU1KSxpdChodCxXZS50b3RhbF9pbj4+MjQmMjU1KSk6KCRlKGh0LFdlLmFkbGVyPj4+MTYpLCRlKGh0LDY1NTM1JldlLmFkbGVyKSksTXQoV2UpLGh0LndyYXA+MCYmKGh0LndyYXA9LWh0LndyYXApLDAh''@;'; put 'put ''PT1odC5wZW5kaW5nP3JlOjEpfSxPLmRlZmxhdGVFbmQ9ZnVuY3Rpb24gbmkoV2Upe3ZhciBUdDtyZXR1cm4gV2UmJldlLnN0YXRlPyhUdD1XZS5zdGF0ZS5zdGF0dXMpIT09dmUmJjY5IT09VHQmJjczIT09VHQmJjkxIT09VHQmJjEwMyE9PVR0JiZUdCE9PVJlJiY2NjYhPT1UdD9RZShXZSxs''@;'; put 'put ''ZSk6KFdlLnN0YXRlPW51bGwsVHQ9PT1SZT9RZShXZSwtMyk6cmUpOmxlfSxPLmRlZmxhdGVJbmZvPSJwYWtvIGRlZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpIn0seyIuLi91dGlscy9jb21tb24iOjI3LCIuL2FkbGVyMzIiOjI5LCIuL2NyYzMyIjozMSwiLi9tZXNzYWdlcyI6MzcsIi4v''@;'; put 'put ''dHJlZXMiOjM4fV0sMzM6W2Z1bmN0aW9uKFAsRixPKXsidXNlIHN0cmljdCI7Ri5leHBvcnRzPWZ1bmN0aW9uIHooKXt0aGlzLnRleHQ9MCx0aGlzLnRpbWU9MCx0aGlzLnhmbGFncz0wLHRoaXMub3M9MCx0aGlzLmV4dHJhPW51bGwsdGhpcy5leHRyYV9sZW49MCx0aGlzLm5hbWU9IiIsdGhp''@;'; put 'put ''cy5jb21tZW50PSIiLHRoaXMuaGNyYz0wLHRoaXMuZG9uZT0hMX19LHt9XSwzNDpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0IjtGLmV4cG9ydHM9ZnVuY3Rpb24oSyxVKXt2YXIgVyxZLFgsZWUsSixyZSxpZSxsZSxtZSxfZSxUZSxTZSx6ZSxWLHAsYix4LEMsVCxILGosRSxtLEEsb2U7''@;'; put 'put ''QT1LLmlucHV0LFg9KFk9Sy5uZXh0X2luKSsoSy5hdmFpbF9pbi01KSxvZT1LLm91dHB1dCxKPShlZT1LLm5leHRfb3V0KS0oVS1LLmF2YWlsX291dCkscmU9ZWUrKEsuYXZhaWxfb3V0LTI1NyksaWU9KFc9Sy5zdGF0ZSkuZG1heCxsZT1XLndzaXplLG1lPVcud2hhdmUsX2U9Vy53bmV4dCxU''@;'; put 'put ''ZT1XLndpbmRvdyxTZT1XLmhvbGQsemU9Vy5iaXRzLFY9Vy5sZW5jb2RlLHA9Vy5kaXN0Y29kZSxiPSgxPDxXLmxlbmJpdHMpLTEseD0oMTw8Vy5kaXN0Yml0cyktMTtlOmRve3plPDE1JiYoU2UrPUFbWSsrXTw8emUsU2UrPUFbWSsrXTw8KHplKz04KSx6ZSs9OCksQz1WW1NlJmJdO3Q6Zm9y''@;'; put 'put ''KDs7KXtpZihTZT4+Pj1UPUM+Pj4yNCx6ZS09VCwwPT0oVD1DPj4+MTYmMjU1KSlvZVtlZSsrXT02NTUzNSZDO2Vsc2V7aWYoISgxNiZUKSl7aWYoNjQmVCl7aWYoMzImVCl7Vy5tb2RlPTEyO2JyZWFrIGV9Sy5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSIsVy5tb2RlPTMwO2Jy''@;'; put 'put ''ZWFrIGV9Qz1WWyg2NTUzNSZDKSsoU2UmKDE8PFQpLTEpXTtjb250aW51ZSB0fWZvcihIPTY1NTM1JkMsKFQmPTE1KSYmKHplPFQmJihTZSs9QVtZKytdPDx6ZSx6ZSs9OCksSCs9U2UmKDE8PFQpLTEsU2U+Pj49VCx6ZS09VCksemU8MTUmJihTZSs9QVtZKytdPDx6ZSxTZSs9QVtZKytdPDwo''@;'; put 'put ''emUrPTgpLHplKz04KSxDPXBbU2UmeF07Oyl7aWYoU2U+Pj49VD1DPj4+MjQsemUtPVQsMTYmKFQ9Qz4+PjE2JjI1NSkpe2lmKGo9NjU1MzUmQyx6ZTwoVCY9MTUpJiYoU2UrPUFbWSsrXTw8emUsKHplKz04KTxUJiYoU2UrPUFbWSsrXTw8emUsemUrPTgpKSwoais9U2UmKDE8PFQpLTEpPmll''@;'; put 'put ''KXtLLm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLFcubW9kZT0zMDticmVhayBlfWlmKFNlPj4+PVQsemUtPVQsaj4oVD1lZS1KKSl7aWYoKFQ9ai1UKT5tZSYmVy5zYW5lKXtLLm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLFcubW9kZT0zMDticmVhayBl''@;'; put 'put ''fWlmKEU9MCxtPVRlLDA9PT1fZSl7aWYoRSs9bGUtVCxUPEgpe0gtPVQ7ZG97b2VbZWUrK109VGVbRSsrXX13aGlsZSgtLVQpO0U9ZWUtaixtPW9lfX1lbHNlIGlmKF9lPFQpe2lmKEUrPWxlK19lLVQsKFQtPV9lKTxIKXtILT1UO2Rve29lW2VlKytdPVRlW0UrK119d2hpbGUoLS1UKTtpZihF''@;'; put 'put ''PTAsX2U8SCl7SC09VD1fZTtkb3tvZVtlZSsrXT1UZVtFKytdfXdoaWxlKC0tVCk7RT1lZS1qLG09b2V9fX1lbHNlIGlmKEUrPV9lLVQsVDxIKXtILT1UO2Rve29lW2VlKytdPVRlW0UrK119d2hpbGUoLS1UKTtFPWVlLWosbT1vZX1mb3IoO0g+Mjspb2VbZWUrK109bVtFKytdLG9lW2VlKytd''@;'; put 'put ''PW1bRSsrXSxvZVtlZSsrXT1tW0UrK10sSC09MztIJiYob2VbZWUrK109bVtFKytdLEg+MSYmKG9lW2VlKytdPW1bRSsrXSkpfWVsc2V7RT1lZS1qO2Rve29lW2VlKytdPW9lW0UrK10sb2VbZWUrK109b2VbRSsrXSxvZVtlZSsrXT1vZVtFKytdLEgtPTN9d2hpbGUoSD4yKTtIJiYob2VbZWUr''@;'; put 'put ''K109b2VbRSsrXSxIPjEmJihvZVtlZSsrXT1vZVtFKytdKSl9YnJlYWt9aWYoNjQmVCl7Sy5tc2c9ImludmFsaWQgZGlzdGFuY2UgY29kZSIsVy5tb2RlPTMwO2JyZWFrIGV9Qz1wWyg2NTUzNSZDKSsoU2UmKDE8PFQpLTEpXX19YnJlYWt9fXdoaWxlKFk8WCYmZWU8cmUpO1NlJj0oMTw8KHpl''@;'; put 'put ''LT0oSD16ZT4+Myk8PDMpKS0xLEsubmV4dF9pbj1ZLT1ILEsubmV4dF9vdXQ9ZWUsSy5hdmFpbF9pbj1ZPFg/WC1ZKzU6NS0oWS1YKSxLLmF2YWlsX291dD1lZTxyZT9yZS1lZSsyNTc6MjU3LShlZS1yZSksVy5ob2xkPVNlLFcuYml0cz16ZX19LHt9XSwzNTpbZnVuY3Rpb24oUCxGLE8peyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgej1QKCIuLi91dGlscy9jb21tb24iKSxOPVAoIi4vYWRsZXIzMiIpLEw9UCgiLi9jcmMzMiIpLEs9UCgiLi9pbmZmYXN0IiksVT1QKCIuL2luZnRyZWVzIiksaWU9MCxfZT0tMixwPTEseXQ9ODUyLE10PTU5MjtmdW5jdGlvbiAkZShBdCl7cmV0dXJuKEF0Pj4+MjQm''@;'; put 'put ''MjU1KSsoQXQ+Pj44JjY1MjgwKSsoKDY1MjgwJkF0KTw8OCkrKCgyNTUmQXQpPDwyNCl9ZnVuY3Rpb24gdHQoKXt0aGlzLm1vZGU9MCx0aGlzLmxhc3Q9ITEsdGhpcy53cmFwPTAsdGhpcy5oYXZlZGljdD0hMSx0aGlzLmZsYWdzPTAsdGhpcy5kbWF4PTAsdGhpcy5jaGVjaz0wLHRoaXMudG90''@;'; put 'put ''YWw9MCx0aGlzLmhlYWQ9bnVsbCx0aGlzLndiaXRzPTAsdGhpcy53c2l6ZT0wLHRoaXMud2hhdmU9MCx0aGlzLnduZXh0PTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLmhvbGQ9MCx0aGlzLmJpdHM9MCx0aGlzLmxlbmd0aD0wLHRoaXMub2Zmc2V0PTAsdGhpcy5leHRyYT0wLHRoaXMubGVuY29k''@;'; put 'put ''ZT1udWxsLHRoaXMuZGlzdGNvZGU9bnVsbCx0aGlzLmxlbmJpdHM9MCx0aGlzLmRpc3RiaXRzPTAsdGhpcy5uY29kZT0wLHRoaXMubmxlbj0wLHRoaXMubmRpc3Q9MCx0aGlzLmhhdmU9MCx0aGlzLm5leHQ9bnVsbCx0aGlzLmxlbnM9bmV3IHouQnVmMTYoMzIwKSx0aGlzLndvcms9bmV3IHou''@;'; put 'put ''QnVmMTYoMjg4KSx0aGlzLmxlbmR5bj1udWxsLHRoaXMuZGlzdGR5bj1udWxsLHRoaXMuc2FuZT0wLHRoaXMuYmFjaz0wLHRoaXMud2FzPTB9ZnVuY3Rpb24gSGUoQXQpe3ZhciBMbjtyZXR1cm4gQXQmJkF0LnN0YXRlPyhBdC50b3RhbF9pbj1BdC50b3RhbF9vdXQ9KExuPUF0LnN0YXRlKS50''@;'; put 'put ''b3RhbD0wLEF0Lm1zZz0iIixMbi53cmFwJiYoQXQuYWRsZXI9MSZMbi53cmFwKSxMbi5tb2RlPXAsTG4ubGFzdD0wLExuLmhhdmVkaWN0PTAsTG4uZG1heD0zMjc2OCxMbi5oZWFkPW51bGwsTG4uaG9sZD0wLExuLmJpdHM9MCxMbi5sZW5jb2RlPUxuLmxlbmR5bj1uZXcgei5CdWYzMih5dCks''@;'; put 'put ''TG4uZGlzdGNvZGU9TG4uZGlzdGR5bj1uZXcgei5CdWYzMihNdCksTG4uc2FuZT0xLExuLmJhY2s9LTEsaWUpOl9lfWZ1bmN0aW9uIGR0KEF0KXt2YXIgTG47cmV0dXJuIEF0JiZBdC5zdGF0ZT8oKExuPUF0LnN0YXRlKS53c2l6ZT0wLExuLndoYXZlPTAsTG4ud25leHQ9MCxIZShBdCkpOl9l''@;'; put 'put ''fWZ1bmN0aW9uIHF0KEF0LExuKXt2YXIgc3QsenQ7cmV0dXJuIUF0fHwhQXQuc3RhdGV8fCh6dD1BdC5zdGF0ZSxMbjwwPyhzdD0wLExuPS1Mbik6KHN0PTErKExuPj40KSxMbjw0OCYmKExuJj0xNSkpLExuJiYoTG48OHx8TG4+MTUpKT9fZToobnVsbCE9PXp0LndpbmRvdyYmenQud2JpdHMh''@;'; put 'put ''PT1MbiYmKHp0LndpbmRvdz1udWxsKSx6dC53cmFwPXN0LHp0LndiaXRzPUxuLGR0KEF0KSl9ZnVuY3Rpb24gUnQoQXQsTG4pe3ZhciBzdCx6dDtyZXR1cm4gQXQ/KHp0PW5ldyB0dCxBdC5zdGF0ZT16dCx6dC53aW5kb3c9bnVsbCwoc3Q9cXQoQXQsTG4pKSE9PWllJiYoQXQuc3RhdGU9bnVs''@;'; put 'put ''bCksc3QpOl9lfXZhciBRdCxzbixhaT0hMDtmdW5jdGlvbiBSaShBdCl7aWYoYWkpe3ZhciBMbjtmb3IoUXQ9bmV3IHouQnVmMzIoNTEyKSxzbj1uZXcgei5CdWYzMigzMiksTG49MDtMbjwxNDQ7KUF0LmxlbnNbTG4rK109ODtmb3IoO0xuPDI1NjspQXQubGVuc1tMbisrXT05O2Zvcig7TG48''@;'; put 'put ''MjgwOylBdC5sZW5zW0xuKytdPTc7Zm9yKDtMbjwyODg7KUF0LmxlbnNbTG4rK109ODtmb3IoVSgxLEF0LmxlbnMsMCwyODgsUXQsMCxBdC53b3JrLHtiaXRzOjl9KSxMbj0wO0xuPDMyOylBdC5sZW5zW0xuKytdPTU7VSgyLEF0LmxlbnMsMCwzMixzbiwwLEF0Lndvcmsse2JpdHM6NX0pLGFp''@;'; put 'put ''PSExfUF0LmxlbmNvZGU9UXQsQXQubGVuYml0cz05LEF0LmRpc3Rjb2RlPXNuLEF0LmRpc3RiaXRzPTV9Ty5pbmZsYXRlUmVzZXQ9ZHQsTy5pbmZsYXRlUmVzZXQyPXF0LE8uaW5mbGF0ZVJlc2V0S2VlcD1IZSxPLmluZmxhdGVJbml0PWZ1bmN0aW9uIFB0KEF0KXtyZXR1cm4gUnQoQXQsMTUp''@;'; put 'put ''fSxPLmluZmxhdGVJbml0Mj1SdCxPLmluZmxhdGU9ZnVuY3Rpb24gZnQoQXQsTG4pe3ZhciBzdCx6dCxuaSxXZSxUdCxycixodCx4dCxCbixvbixqdCxkaSxjbixwbixYdCxlbixobyxNaSxwcixXbixLaSxRcixCaSxWaSxJaT0wLEpyPW5ldyB6LkJ1ZjgoNCksSW89WzE2LDE3LDE4LDAsOCw3''@;'; put 'put ''LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdO2lmKCFBdHx8IUF0LnN0YXRlfHwhQXQub3V0cHV0fHwhQXQuaW5wdXQmJjAhPT1BdC5hdmFpbF9pbilyZXR1cm4gX2U7MTI9PT0oc3Q9QXQuc3RhdGUpLm1vZGUmJihzdC5tb2RlPTEzKSxUdD1BdC5uZXh0X291dCxuaT1BdC5vdXRw''@;'; put 'put ''dXQsV2U9QXQubmV4dF9pbix6dD1BdC5pbnB1dCx4dD1zdC5ob2xkLEJuPXN0LmJpdHMsb249cnI9QXQuYXZhaWxfaW4sanQ9aHQ9QXQuYXZhaWxfb3V0LFFyPWllO2U6Zm9yKDs7KXN3aXRjaChzdC5tb2RlKXtjYXNlIHA6aWYoMD09PXN0LndyYXApe3N0Lm1vZGU9MTM7YnJlYWt9Zm9yKDtC''@;'; put 'put ''bjwxNjspe2lmKDA9PT1ycilicmVhayBlO3JyLS0seHQrPXp0W1dlKytdPDxCbixCbis9OH1pZigyJnN0LndyYXAmJjM1NjE1PT09eHQpe3N0LmNoZWNrPTAsSnJbMF09MjU1Jnh0LEpyWzFdPXh0Pj4+OCYyNTUsc3QuY2hlY2s9TChzdC5jaGVjayxKciwyLDApLHh0PTAsQm49MCxzdC5tb2Rl''@;'; put 'put ''PTI7YnJlYWt9aWYoc3QuZmxhZ3M9MCxzdC5oZWFkJiYoc3QuaGVhZC5kb25lPSExKSwhKDEmc3Qud3JhcCl8fCgoKDI1NSZ4dCk8PDgpKyh4dD4+OCkpJTMxKXtBdC5tc2c9ImluY29ycmVjdCBoZWFkZXIgY2hlY2siLHN0Lm1vZGU9MzA7YnJlYWt9aWYoOCE9KDE1Jnh0KSl7QXQubXNnPSJ1''@;'; put 'put ''bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCIsc3QubW9kZT0zMDticmVha31pZihCbi09NCxLaT04KygxNSYoeHQ+Pj49NCkpLDA9PT1zdC53Yml0cylzdC53Yml0cz1LaTtlbHNlIGlmKEtpPnN0LndiaXRzKXtBdC5tc2c9ImludmFsaWQgd2luZG93IHNpemUiLHN0Lm1vZGU9MzA7YnJlYWt9''@;'; put 'put ''c3QuZG1heD0xPDxLaSxBdC5hZGxlcj1zdC5jaGVjaz0xLHN0Lm1vZGU9NTEyJnh0PzEwOjEyLHh0PTAsQm49MDticmVhaztjYXNlIDI6Zm9yKDtCbjwxNjspe2lmKDA9PT1ycilicmVhayBlO3JyLS0seHQrPXp0W1dlKytdPDxCbixCbis9OH1pZihzdC5mbGFncz14dCw4IT0oMjU1JnN0LmZs''@;'; put 'put ''YWdzKSl7QXQubXNnPSJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCIsc3QubW9kZT0zMDticmVha31pZig1NzM0NCZzdC5mbGFncyl7QXQubXNnPSJ1bmtub3duIGhlYWRlciBmbGFncyBzZXQiLHN0Lm1vZGU9MzA7YnJlYWt9c3QuaGVhZCYmKHN0LmhlYWQudGV4dD14dD4+OCYxKSw1MTIm''@;'; put 'put ''c3QuZmxhZ3MmJihKclswXT0yNTUmeHQsSnJbMV09eHQ+Pj44JjI1NSxzdC5jaGVjaz1MKHN0LmNoZWNrLEpyLDIsMCkpLHh0PTAsQm49MCxzdC5tb2RlPTM7Y2FzZSAzOmZvcig7Qm48MzI7KXtpZigwPT09cnIpYnJlYWsgZTtyci0tLHh0Kz16dFtXZSsrXTw8Qm4sQm4rPTh9c3QuaGVhZCYm''@;'; put 'put ''KHN0LmhlYWQudGltZT14dCksNTEyJnN0LmZsYWdzJiYoSnJbMF09MjU1Jnh0LEpyWzFdPXh0Pj4+OCYyNTUsSnJbMl09eHQ+Pj4xNiYyNTUsSnJbM109eHQ+Pj4yNCYyNTUsc3QuY2hlY2s9TChzdC5jaGVjayxKciw0LDApKSx4dD0wLEJuPTAsc3QubW9kZT00O2Nhc2UgNDpmb3IoO0JuPDE2''@;'; put 'put ''Oyl7aWYoMD09PXJyKWJyZWFrIGU7cnItLSx4dCs9enRbV2UrK108PEJuLEJuKz04fXN0LmhlYWQmJihzdC5oZWFkLnhmbGFncz0yNTUmeHQsc3QuaGVhZC5vcz14dD4+OCksNTEyJnN0LmZsYWdzJiYoSnJbMF09MjU1Jnh0LEpyWzFdPXh0Pj4+OCYyNTUsc3QuY2hlY2s9TChzdC5jaGVjayxK''@;'; put 'put ''ciwyLDApKSx4dD0wLEJuPTAsc3QubW9kZT01O2Nhc2UgNTppZigxMDI0JnN0LmZsYWdzKXtmb3IoO0JuPDE2Oyl7aWYoMD09PXJyKWJyZWFrIGU7cnItLSx4dCs9enRbV2UrK108PEJuLEJuKz04fXN0Lmxlbmd0aD14dCxzdC5oZWFkJiYoc3QuaGVhZC5leHRyYV9sZW49eHQpLDUxMiZzdC5m''@;'; put 'put ''bGFncyYmKEpyWzBdPTI1NSZ4dCxKclsxXT14dD4+PjgmMjU1LHN0LmNoZWNrPUwoc3QuY2hlY2ssSnIsMiwwKSkseHQ9MCxCbj0wfWVsc2Ugc3QuaGVhZCYmKHN0LmhlYWQuZXh0cmE9bnVsbCk7c3QubW9kZT02O2Nhc2UgNjppZigxMDI0JnN0LmZsYWdzJiYoKGRpPXN0Lmxlbmd0aCk+cnIm''@;'; put 'put ''JihkaT1yciksZGkmJihzdC5oZWFkJiYoS2k9c3QuaGVhZC5leHRyYV9sZW4tc3QubGVuZ3RoLHN0LmhlYWQuZXh0cmF8fChzdC5oZWFkLmV4dHJhPW5ldyBBcnJheShzdC5oZWFkLmV4dHJhX2xlbikpLHouYXJyYXlTZXQoc3QuaGVhZC5leHRyYSx6dCxXZSxkaSxLaSkpLDUxMiZzdC5mbGFn''@;'; put 'put ''cyYmKHN0LmNoZWNrPUwoc3QuY2hlY2ssenQsZGksV2UpKSxyci09ZGksV2UrPWRpLHN0Lmxlbmd0aC09ZGkpLHN0Lmxlbmd0aCkpYnJlYWsgZTtzdC5sZW5ndGg9MCxzdC5tb2RlPTc7Y2FzZSA3OmlmKDIwNDgmc3QuZmxhZ3Mpe2lmKDA9PT1ycilicmVhayBlO2RpPTA7ZG97S2k9enRbV2Ur''@;'; put 'put ''ZGkrK10sc3QuaGVhZCYmS2kmJnN0Lmxlbmd0aDw2NTUzNiYmKHN0LmhlYWQubmFtZSs9U3RyaW5nLmZyb21DaGFyQ29kZShLaSkpfXdoaWxlKEtpJiZkaTxycik7aWYoNTEyJnN0LmZsYWdzJiYoc3QuY2hlY2s9TChzdC5jaGVjayx6dCxkaSxXZSkpLHJyLT1kaSxXZSs9ZGksS2kpYnJlYWsg''@;'; put 'put ''ZX1lbHNlIHN0LmhlYWQmJihzdC5oZWFkLm5hbWU9bnVsbCk7c3QubGVuZ3RoPTAsc3QubW9kZT04O2Nhc2UgODppZig0MDk2JnN0LmZsYWdzKXtpZigwPT09cnIpYnJlYWsgZTtkaT0wO2Rve0tpPXp0W1dlK2RpKytdLHN0LmhlYWQmJktpJiZzdC5sZW5ndGg8NjU1MzYmJihzdC5oZWFkLmNv''@;'; put 'put ''bW1lbnQrPVN0cmluZy5mcm9tQ2hhckNvZGUoS2kpKX13aGlsZShLaSYmZGk8cnIpO2lmKDUxMiZzdC5mbGFncyYmKHN0LmNoZWNrPUwoc3QuY2hlY2ssenQsZGksV2UpKSxyci09ZGksV2UrPWRpLEtpKWJyZWFrIGV9ZWxzZSBzdC5oZWFkJiYoc3QuaGVhZC5jb21tZW50PW51bGwpO3N0Lm1v''@;'; put 'put ''ZGU9OTtjYXNlIDk6aWYoNTEyJnN0LmZsYWdzKXtmb3IoO0JuPDE2Oyl7aWYoMD09PXJyKWJyZWFrIGU7cnItLSx4dCs9enRbV2UrK108PEJuLEJuKz04fWlmKHh0IT09KDY1NTM1JnN0LmNoZWNrKSl7QXQubXNnPSJoZWFkZXIgY3JjIG1pc21hdGNoIixzdC5tb2RlPTMwO2JyZWFrfXh0PTAs''@;'; put 'put ''Qm49MH1zdC5oZWFkJiYoc3QuaGVhZC5oY3JjPXN0LmZsYWdzPj45JjEsc3QuaGVhZC5kb25lPSEwKSxBdC5hZGxlcj1zdC5jaGVjaz0wLHN0Lm1vZGU9MTI7YnJlYWs7Y2FzZSAxMDpmb3IoO0JuPDMyOyl7aWYoMD09PXJyKWJyZWFrIGU7cnItLSx4dCs9enRbV2UrK108PEJuLEJuKz04fUF0''@;'; put 'put ''LmFkbGVyPXN0LmNoZWNrPSRlKHh0KSx4dD0wLEJuPTAsc3QubW9kZT0xMTtjYXNlIDExOmlmKDA9PT1zdC5oYXZlZGljdClyZXR1cm4gQXQubmV4dF9vdXQ9VHQsQXQuYXZhaWxfb3V0PWh0LEF0Lm5leHRfaW49V2UsQXQuYXZhaWxfaW49cnIsc3QuaG9sZD14dCxzdC5iaXRzPUJuLDI7QXQu''@;'; put 'put ''YWRsZXI9c3QuY2hlY2s9MSxzdC5tb2RlPTEyO2Nhc2UgMTI6aWYoNT09PUxufHw2PT09TG4pYnJlYWsgZTtjYXNlIDEzOmlmKHN0Lmxhc3Qpe3h0Pj4+PTcmQm4sQm4tPTcmQm4sc3QubW9kZT0yNzticmVha31mb3IoO0JuPDM7KXtpZigwPT09cnIpYnJlYWsgZTtyci0tLHh0Kz16dFtXZSsr''@;'; put 'put ''XTw8Qm4sQm4rPTh9c3dpdGNoKHN0Lmxhc3Q9MSZ4dCxCbi09MSwzJih4dD4+Pj0xKSl7Y2FzZSAwOnN0Lm1vZGU9MTQ7YnJlYWs7Y2FzZSAxOmlmKFJpKHN0KSxzdC5tb2RlPTIwLDY9PT1Mbil7eHQ+Pj49MixCbi09MjticmVhayBlfWJyZWFrO2Nhc2UgMjpzdC5tb2RlPTE3O2JyZWFrO2Nh''@;'; put 'put ''c2UgMzpBdC5tc2c9ImludmFsaWQgYmxvY2sgdHlwZSIsc3QubW9kZT0zMH14dD4+Pj0yLEJuLT0yO2JyZWFrO2Nhc2UgMTQ6Zm9yKHh0Pj4+PTcmQm4sQm4tPTcmQm47Qm48MzI7KXtpZigwPT09cnIpYnJlYWsgZTtyci0tLHh0Kz16dFtXZSsrXTw8Qm4sQm4rPTh9aWYoKDY1NTM1Jnh0KSE9''@;'; put 'put ''KHh0Pj4+MTZeNjU1MzUpKXtBdC5tc2c9ImludmFsaWQgc3RvcmVkIGJsb2NrIGxlbmd0aHMiLHN0Lm1vZGU9MzA7YnJlYWt9aWYoc3QubGVuZ3RoPTY1NTM1Jnh0LHh0PTAsQm49MCxzdC5tb2RlPTE1LDY9PT1MbilicmVhayBlO2Nhc2UgMTU6c3QubW9kZT0xNjtjYXNlIDE2OmlmKGRpPXN0''@;'; put 'put ''Lmxlbmd0aCl7aWYoZGk+cnImJihkaT1yciksZGk+aHQmJihkaT1odCksMD09PWRpKWJyZWFrIGU7ei5hcnJheVNldChuaSx6dCxXZSxkaSxUdCkscnItPWRpLFdlKz1kaSxodC09ZGksVHQrPWRpLHN0Lmxlbmd0aC09ZGk7YnJlYWt9c3QubW9kZT0xMjticmVhaztjYXNlIDE3OmZvcig7Qm48''@;'; put 'put ''MTQ7KXtpZigwPT09cnIpYnJlYWsgZTtyci0tLHh0Kz16dFtXZSsrXTw8Qm4sQm4rPTh9aWYoc3Qubmxlbj0yNTcrKDMxJnh0KSxCbi09NSxzdC5uZGlzdD0xKygzMSYoeHQ+Pj49NSkpLEJuLT01LHN0Lm5jb2RlPTQrKDE1Jih4dD4+Pj01KSkseHQ+Pj49NCxCbi09NCxzdC5ubGVuPjI4Nnx8''@;'; put 'put ''c3QubmRpc3Q+MzApe0F0Lm1zZz0idG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHMiLHN0Lm1vZGU9MzA7YnJlYWt9c3QuaGF2ZT0wLHN0Lm1vZGU9MTg7Y2FzZSAxODpmb3IoO3N0LmhhdmU8c3QubmNvZGU7KXtmb3IoO0JuPDM7KXtpZigwPT09cnIpYnJlYWsgZTtyci0tLHh0''@;'; put 'put ''Kz16dFtXZSsrXTw8Qm4sQm4rPTh9c3QubGVuc1tJb1tzdC5oYXZlKytdXT03Jnh0LHh0Pj4+PTMsQm4tPTN9Zm9yKDtzdC5oYXZlPDE5OylzdC5sZW5zW0lvW3N0LmhhdmUrK11dPTA7aWYoc3QubGVuY29kZT1zdC5sZW5keW4sc3QubGVuYml0cz03LFFyPVUoMCxzdC5sZW5zLDAsMTksc3Qu''@;'; put 'put ''bGVuY29kZSwwLHN0LndvcmssQmk9e2JpdHM6c3QubGVuYml0c30pLHN0LmxlbmJpdHM9QmkuYml0cyxRcil7QXQubXNnPSJpbnZhbGlkIGNvZGUgbGVuZ3RocyBzZXQiLHN0Lm1vZGU9MzA7YnJlYWt9c3QuaGF2ZT0wLHN0Lm1vZGU9MTk7Y2FzZSAxOTpmb3IoO3N0LmhhdmU8c3Qubmxlbitz''@;'; put 'put ''dC5uZGlzdDspe2Zvcig7ZW49KElpPXN0LmxlbmNvZGVbeHQmKDE8PHN0LmxlbmJpdHMpLTFdKT4+PjE2JjI1NSxobz02NTUzNSZJaSwhKChYdD1JaT4+PjI0KTw9Qm4pOyl7aWYoMD09PXJyKWJyZWFrIGU7cnItLSx4dCs9enRbV2UrK108PEJuLEJuKz04fWlmKGhvPDE2KXh0Pj4+PVh0LEJu''@;'; put 'put ''LT1YdCxzdC5sZW5zW3N0LmhhdmUrK109aG87ZWxzZXtpZigxNj09PWhvKXtmb3IoVmk9WHQrMjtCbjxWaTspe2lmKDA9PT1ycilicmVhayBlO3JyLS0seHQrPXp0W1dlKytdPDxCbixCbis9OH1pZih4dD4+Pj1YdCxCbi09WHQsMD09PXN0LmhhdmUpe0F0Lm1zZz0iaW52YWxpZCBiaXQgbGVu''@;'; put 'put ''Z3RoIHJlcGVhdCIsc3QubW9kZT0zMDticmVha31LaT1zdC5sZW5zW3N0LmhhdmUtMV0sZGk9MysoMyZ4dCkseHQ+Pj49MixCbi09Mn1lbHNlIGlmKDE3PT09aG8pe2ZvcihWaT1YdCszO0JuPFZpOyl7aWYoMD09PXJyKWJyZWFrIGU7cnItLSx4dCs9enRbV2UrK108PEJuLEJuKz04fUJuLT1Y''@;'; put 'put ''dCxLaT0wLGRpPTMrKDcmKHh0Pj4+PVh0KSkseHQ+Pj49MyxCbi09M31lbHNle2ZvcihWaT1YdCs3O0JuPFZpOyl7aWYoMD09PXJyKWJyZWFrIGU7cnItLSx4dCs9enRbV2UrK108PEJuLEJuKz04fUJuLT1YdCxLaT0wLGRpPTExKygxMjcmKHh0Pj4+PVh0KSkseHQ+Pj49NyxCbi09N31pZihz''@;'; put 'put ''dC5oYXZlK2RpPnN0Lm5sZW4rc3QubmRpc3Qpe0F0Lm1zZz0iaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCIsc3QubW9kZT0zMDticmVha31mb3IoO2RpLS07KXN0LmxlbnNbc3QuaGF2ZSsrXT1LaX19aWYoMzA9PT1zdC5tb2RlKWJyZWFrO2lmKDA9PT1zdC5sZW5zWzI1Nl0pe0F0Lm1zZz0i''@;'; put 'put ''aW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrIixzdC5tb2RlPTMwO2JyZWFrfWlmKHN0LmxlbmJpdHM9OSxRcj1VKDEsc3QubGVucywwLHN0Lm5sZW4sc3QubGVuY29kZSwwLHN0LndvcmssQmk9e2JpdHM6c3QubGVuYml0c30pLHN0LmxlbmJpdHM9QmkuYml0cyxRcil7QXQu''@;'; put 'put ''bXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RocyBzZXQiLHN0Lm1vZGU9MzA7YnJlYWt9aWYoc3QuZGlzdGJpdHM9NixzdC5kaXN0Y29kZT1zdC5kaXN0ZHluLFFyPVUoMixzdC5sZW5zLHN0Lm5sZW4sc3QubmRpc3Qsc3QuZGlzdGNvZGUsMCxzdC53b3JrLEJpPXtiaXRzOnN0LmRpc3RiaXRz''@;'; put 'put ''fSksc3QuZGlzdGJpdHM9QmkuYml0cyxRcil7QXQubXNnPSJpbnZhbGlkIGRpc3RhbmNlcyBzZXQiLHN0Lm1vZGU9MzA7YnJlYWt9aWYoc3QubW9kZT0yMCw2PT09TG4pYnJlYWsgZTtjYXNlIDIwOnN0Lm1vZGU9MjE7Y2FzZSAyMTppZihycj49NiYmaHQ+PTI1OCl7QXQubmV4dF9vdXQ9VHQs''@;'; put 'put ''QXQuYXZhaWxfb3V0PWh0LEF0Lm5leHRfaW49V2UsQXQuYXZhaWxfaW49cnIsc3QuaG9sZD14dCxzdC5iaXRzPUJuLEsoQXQsanQpLFR0PUF0Lm5leHRfb3V0LG5pPUF0Lm91dHB1dCxodD1BdC5hdmFpbF9vdXQsV2U9QXQubmV4dF9pbix6dD1BdC5pbnB1dCxycj1BdC5hdmFpbF9pbix4dD1z''@;'; put 'put ''dC5ob2xkLEJuPXN0LmJpdHMsMTI9PT1zdC5tb2RlJiYoc3QuYmFjaz0tMSk7YnJlYWt9Zm9yKHN0LmJhY2s9MDtlbj0oSWk9c3QubGVuY29kZVt4dCYoMTw8c3QubGVuYml0cyktMV0pPj4+MTYmMjU1LGhvPTY1NTM1JklpLCEoKFh0PUlpPj4+MjQpPD1Cbik7KXtpZigwPT09cnIpYnJlYWsg''@;'; put 'put ''ZTtyci0tLHh0Kz16dFtXZSsrXTw8Qm4sQm4rPTh9aWYoZW4mJiEoMjQwJmVuKSl7Zm9yKE1pPVh0LHByPWVuLFduPWhvO2VuPShJaT1zdC5sZW5jb2RlW1duKygoeHQmKDE8PE1pK3ByKS0xKT4+TWkpXSk+Pj4xNiYyNTUsaG89NjU1MzUmSWksIShNaSsoWHQ9SWk+Pj4yNCk8PUJuKTspe2lm''@;'; put 'put ''KDA9PT1ycilicmVhayBlO3JyLS0seHQrPXp0W1dlKytdPDxCbixCbis9OH14dD4+Pj1NaSxCbi09TWksc3QuYmFjays9TWl9aWYoeHQ+Pj49WHQsQm4tPVh0LHN0LmJhY2srPVh0LHN0Lmxlbmd0aD1obywwPT09ZW4pe3N0Lm1vZGU9MjY7YnJlYWt9aWYoMzImZW4pe3N0LmJhY2s9LTEsc3Qu''@;'; put 'put ''bW9kZT0xMjticmVha31pZig2NCZlbil7QXQubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUiLHN0Lm1vZGU9MzA7YnJlYWt9c3QuZXh0cmE9MTUmZW4sc3QubW9kZT0yMjtjYXNlIDIyOmlmKHN0LmV4dHJhKXtmb3IoVmk9c3QuZXh0cmE7Qm48Vmk7KXtpZigwPT09cnIpYnJlYWsg''@;'; put 'put ''ZTtyci0tLHh0Kz16dFtXZSsrXTw8Qm4sQm4rPTh9c3QubGVuZ3RoKz14dCYoMTw8c3QuZXh0cmEpLTEseHQ+Pj49c3QuZXh0cmEsQm4tPXN0LmV4dHJhLHN0LmJhY2srPXN0LmV4dHJhfXN0Lndhcz1zdC5sZW5ndGgsc3QubW9kZT0yMztjYXNlIDIzOmZvcig7ZW49KElpPXN0LmRpc3Rjb2Rl''@;'; put 'put ''W3h0JigxPDxzdC5kaXN0Yml0cyktMV0pPj4+MTYmMjU1LGhvPTY1NTM1JklpLCEoKFh0PUlpPj4+MjQpPD1Cbik7KXtpZigwPT09cnIpYnJlYWsgZTtyci0tLHh0Kz16dFtXZSsrXTw8Qm4sQm4rPTh9aWYoISgyNDAmZW4pKXtmb3IoTWk9WHQscHI9ZW4sV249aG87ZW49KElpPXN0LmRpc3Rj''@;'; put 'put ''b2RlW1duKygoeHQmKDE8PE1pK3ByKS0xKT4+TWkpXSk+Pj4xNiYyNTUsaG89NjU1MzUmSWksIShNaSsoWHQ9SWk+Pj4yNCk8PUJuKTspe2lmKDA9PT1ycilicmVhayBlO3JyLS0seHQrPXp0W1dlKytdPDxCbixCbis9OH14dD4+Pj1NaSxCbi09TWksc3QuYmFjays9TWl9aWYoeHQ+Pj49WHQs''@;'; put 'put ''Qm4tPVh0LHN0LmJhY2srPVh0LDY0JmVuKXtBdC5tc2c9ImludmFsaWQgZGlzdGFuY2UgY29kZSIsc3QubW9kZT0zMDticmVha31zdC5vZmZzZXQ9aG8sc3QuZXh0cmE9MTUmZW4sc3QubW9kZT0yNDtjYXNlIDI0OmlmKHN0LmV4dHJhKXtmb3IoVmk9c3QuZXh0cmE7Qm48Vmk7KXtpZigwPT09''@;'; put 'put ''cnIpYnJlYWsgZTtyci0tLHh0Kz16dFtXZSsrXTw8Qm4sQm4rPTh9c3Qub2Zmc2V0Kz14dCYoMTw8c3QuZXh0cmEpLTEseHQ+Pj49c3QuZXh0cmEsQm4tPXN0LmV4dHJhLHN0LmJhY2srPXN0LmV4dHJhfWlmKHN0Lm9mZnNldD5zdC5kbWF4KXtBdC5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9v''@;'; put 'put ''IGZhciBiYWNrIixzdC5tb2RlPTMwO2JyZWFrfXN0Lm1vZGU9MjU7Y2FzZSAyNTppZigwPT09aHQpYnJlYWsgZTtpZihzdC5vZmZzZXQ+KGRpPWp0LWh0KSl7aWYoKGRpPXN0Lm9mZnNldC1kaSk+c3Qud2hhdmUmJnN0LnNhbmUpe0F0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJh''@;'; put 'put ''Y2siLHN0Lm1vZGU9MzA7YnJlYWt9Y249ZGk+c3Qud25leHQ/c3Qud3NpemUtKGRpLT1zdC53bmV4dCk6c3Qud25leHQtZGksZGk+c3QubGVuZ3RoJiYoZGk9c3QubGVuZ3RoKSxwbj1zdC53aW5kb3d9ZWxzZSBwbj1uaSxjbj1UdC1zdC5vZmZzZXQsZGk9c3QubGVuZ3RoO2RpPmh0JiYoZGk9''@;'; put 'put ''aHQpLGh0LT1kaSxzdC5sZW5ndGgtPWRpO2Rve25pW1R0KytdPXBuW2NuKytdfXdoaWxlKC0tZGkpOzA9PT1zdC5sZW5ndGgmJihzdC5tb2RlPTIxKTticmVhaztjYXNlIDI2OmlmKDA9PT1odClicmVhayBlO25pW1R0KytdPXN0Lmxlbmd0aCxodC0tLHN0Lm1vZGU9MjE7YnJlYWs7Y2FzZSAy''@;'; put 'put ''NzppZihzdC53cmFwKXtmb3IoO0JuPDMyOyl7aWYoMD09PXJyKWJyZWFrIGU7cnItLSx4dHw9enRbV2UrK108PEJuLEJuKz04fWlmKEF0LnRvdGFsX291dCs9anQtPWh0LHN0LnRvdGFsKz1qdCxqdCYmKEF0LmFkbGVyPXN0LmNoZWNrPXN0LmZsYWdzP0woc3QuY2hlY2ssbmksanQsVHQtanQp''@;'; put 'put ''Ok4oc3QuY2hlY2ssbmksanQsVHQtanQpKSxqdD1odCwoc3QuZmxhZ3M/eHQ6JGUoeHQpKSE9PXN0LmNoZWNrKXtBdC5tc2c9ImluY29ycmVjdCBkYXRhIGNoZWNrIixzdC5tb2RlPTMwO2JyZWFrfXh0PTAsQm49MH1zdC5tb2RlPTI4O2Nhc2UgMjg6aWYoc3Qud3JhcCYmc3QuZmxhZ3Mpe2Zv''@;'; put 'put ''cig7Qm48MzI7KXtpZigwPT09cnIpYnJlYWsgZTtyci0tLHh0Kz16dFtXZSsrXTw8Qm4sQm4rPTh9aWYoeHQhPT0oNDI5NDk2NzI5NSZzdC50b3RhbCkpe0F0Lm1zZz0iaW5jb3JyZWN0IGxlbmd0aCBjaGVjayIsc3QubW9kZT0zMDticmVha314dD0wLEJuPTB9c3QubW9kZT0yOTtjYXNlIDI5''@;'; put 'put ''OlFyPTE7YnJlYWsgZTtjYXNlIDMwOlFyPS0zO2JyZWFrIGU7Y2FzZSAzMTpyZXR1cm4tNDtkZWZhdWx0OnJldHVybiBfZX1yZXR1cm4gQXQubmV4dF9vdXQ9VHQsQXQuYXZhaWxfb3V0PWh0LEF0Lm5leHRfaW49V2UsQXQuYXZhaWxfaW49cnIsc3QuaG9sZD14dCxzdC5iaXRzPUJuLChzdC53''@;'; put 'put ''c2l6ZXx8anQhPT1BdC5hdmFpbF9vdXQmJnN0Lm1vZGU8MzAmJihzdC5tb2RlPDI3fHw0IT09TG4pKSYmZnVuY3Rpb24gZm4oQXQsTG4sc3QsenQpe3ZhciBuaSxXZT1BdC5zdGF0ZTtyZXR1cm4gbnVsbD09PVdlLndpbmRvdyYmKFdlLndzaXplPTE8PFdlLndiaXRzLFdlLnduZXh0PTAsV2Uu''@;'; put 'put ''d2hhdmU9MCxXZS53aW5kb3c9bmV3IHouQnVmOChXZS53c2l6ZSkpLHp0Pj1XZS53c2l6ZT8oei5hcnJheVNldChXZS53aW5kb3csTG4sc3QtV2Uud3NpemUsV2Uud3NpemUsMCksV2Uud25leHQ9MCxXZS53aGF2ZT1XZS53c2l6ZSk6KChuaT1XZS53c2l6ZS1XZS53bmV4dCk+enQmJihuaT16''@;'; put 'put ''dCksei5hcnJheVNldChXZS53aW5kb3csTG4sc3QtenQsbmksV2Uud25leHQpLCh6dC09bmkpPyh6LmFycmF5U2V0KFdlLndpbmRvdyxMbixzdC16dCx6dCwwKSxXZS53bmV4dD16dCxXZS53aGF2ZT1XZS53c2l6ZSk6KFdlLnduZXh0Kz1uaSxXZS53bmV4dD09PVdlLndzaXplJiYoV2Uud25l''@;'; put 'put ''eHQ9MCksV2Uud2hhdmU8V2Uud3NpemUmJihXZS53aGF2ZSs9bmkpKSksMH0oQXQsQXQub3V0cHV0LEF0Lm5leHRfb3V0LGp0LUF0LmF2YWlsX291dCk/KHN0Lm1vZGU9MzEsLTQpOihqdC09QXQuYXZhaWxfb3V0LEF0LnRvdGFsX2luKz1vbi09QXQuYXZhaWxfaW4sQXQudG90YWxfb3V0Kz1q''@;'; put 'put ''dCxzdC50b3RhbCs9anQsc3Qud3JhcCYmanQmJihBdC5hZGxlcj1zdC5jaGVjaz1zdC5mbGFncz9MKHN0LmNoZWNrLG5pLGp0LEF0Lm5leHRfb3V0LWp0KTpOKHN0LmNoZWNrLG5pLGp0LEF0Lm5leHRfb3V0LWp0KSksQXQuZGF0YV90eXBlPXN0LmJpdHMrKHN0Lmxhc3Q/NjQ6MCkrKDEyPT09''@;'; put 'put ''c3QubW9kZT8xMjg6MCkrKDIwPT09c3QubW9kZXx8MTU9PT1zdC5tb2RlPzI1NjowKSwoMD09PW9uJiYwPT09anR8fDQ9PT1MbikmJlFyPT09aWUmJihRcj0tNSksUXIpfSxPLmluZmxhdGVFbmQ9ZnVuY3Rpb24gUHIoQXQpe2lmKCFBdHx8IUF0LnN0YXRlKXJldHVybiBfZTt2YXIgTG49QXQu''@;'; put 'put ''c3RhdGU7cmV0dXJuIExuLndpbmRvdyYmKExuLndpbmRvdz1udWxsKSxBdC5zdGF0ZT1udWxsLGllfSxPLmluZmxhdGVHZXRIZWFkZXI9ZnVuY3Rpb24gWnQoQXQsTG4pe3ZhciBzdDtyZXR1cm4gQXQmJkF0LnN0YXRlJiYyJihzdD1BdC5zdGF0ZSkud3JhcD8oc3QuaGVhZD1MbixMbi5kb25l''@;'; put 'put ''PSExLGllKTpfZX0sTy5pbmZsYXRlSW5mbz0icGFrbyBpbmZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KSJ9LHsiLi4vdXRpbHMvY29tbW9uIjoyNywiLi9hZGxlcjMyIjoyOSwiLi9jcmMzMiI6MzEsIi4vaW5mZmFzdCI6MzQsIi4vaW5mdHJlZXMiOjM2fV0sMzY6W2Z1bmN0aW9uKFAsRixP''@;'; put 'put ''KXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi4vdXRpbHMvY29tbW9uIiksWD1bMyw0LDUsNiw3LDgsOSwxMCwxMSwxMywxNSwxNywxOSwyMywyNywzMSwzNSw0Myw1MSw1OSw2Nyw4Myw5OSwxMTUsMTMxLDE2MywxOTUsMjI3LDI1OCwwLDBdLGVlPVsxNiwxNiwxNiwxNiwxNiwxNiwxNiwxNiwx''@;'; put 'put ''NywxNywxNywxNywxOCwxOCwxOCwxOCwxOSwxOSwxOSwxOSwyMCwyMCwyMCwyMCwyMSwyMSwyMSwyMSwxNiw3Miw3OF0sSj1bMSwyLDMsNCw1LDcsOSwxMywxNywyNSwzMyw0OSw2NSw5NywxMjksMTkzLDI1NywzODUsNTEzLDc2OSwxMDI1LDE1MzcsMjA0OSwzMDczLDQwOTcsNjE0NSw4MTkz''@;'; put 'put ''LDEyMjg5LDE2Mzg1LDI0NTc3LDAsMF0scmU9WzE2LDE2LDE2LDE2LDE3LDE3LDE4LDE4LDE5LDE5LDIwLDIwLDIxLDIxLDIyLDIyLDIzLDIzLDI0LDI0LDI1LDI1LDI2LDI2LDI3LDI3LDI4LDI4LDI5LDI5LDY0LDY0XTtGLmV4cG9ydHM9ZnVuY3Rpb24obGUsbWUsX2UsVGUsU2UsemUsVixw''@;'; put 'put ''KXt2YXIgc2Usd2UsVWUsSmUsYXQsWGUsSWUsVmUsa2UsYj1wLmJpdHMseD0wLEM9MCxUPTAsSD0wLGo9MCxFPTAsbT0wLEE9MCxvZT0wLHRlPTAsTWU9bnVsbCx2ZT0wLGplPW5ldyB6LkJ1ZjE2KDE2KSxEZT1uZXcgei5CdWYxNigxNiksRmU9bnVsbCxSZT0wO2Zvcih4PTA7eDw9MTU7eCsr''@;'; put 'put ''KWplW3hdPTA7Zm9yKEM9MDtDPFRlO0MrKylqZVttZVtfZStDXV0rKztmb3Ioaj1iLEg9MTU7SD49MSYmMD09PWplW0hdO0gtLSk7aWYoaj5IJiYoaj1IKSwwPT09SClyZXR1cm4gU2VbemUrK109MjA5NzE1MjAsU2VbemUrK109MjA5NzE1MjAscC5iaXRzPTEsMDtmb3IoVD0xO1Q8SCYmMD09''@;'; put 'put ''PWplW1RdO1QrKyk7Zm9yKGo8VCYmKGo9VCksQT0xLHg9MTt4PD0xNTt4KyspaWYoQTw8PTEsKEEtPWplW3hdKTwwKXJldHVybi0xO2lmKEE+MCYmKDA9PT1sZXx8MSE9PUgpKXJldHVybi0xO2ZvcihEZVsxXT0wLHg9MTt4PDE1O3grKylEZVt4KzFdPURlW3hdK2plW3hdO2ZvcihDPTA7QzxU''@;'; put 'put ''ZTtDKyspMCE9PW1lW19lK0NdJiYoVltEZVttZVtfZStDXV0rK109Qyk7aWYoMD09PWxlPyhNZT1GZT1WLFhlPTE5KToxPT09bGU/KE1lPVgsdmUtPTI1NyxGZT1lZSxSZS09MjU3LFhlPTI1Nik6KE1lPUosRmU9cmUsWGU9LTEpLHRlPTAsQz0wLHg9VCxhdD16ZSxFPWosbT0wLFVlPS0xLEpl''@;'; put 'put ''PShvZT0xPDxqKS0xLDE9PT1sZSYmb2U+ODUyfHwyPT09bGUmJm9lPjU5MilyZXR1cm4gMTtmb3IoOzspe0llPXgtbSxWW0NdPFhlPyhWZT0wLGtlPVZbQ10pOlZbQ10+WGU/KFZlPUZlW1JlK1ZbQ11dLGtlPU1lW3ZlK1ZbQ11dKTooVmU9OTYsa2U9MCksc2U9MTw8eC1tLFQ9d2U9MTw8RTtk''@;'; put 'put ''b3tTZVthdCsodGU+Pm0pKyh3ZS09c2UpXT1JZTw8MjR8VmU8PDE2fGtlfXdoaWxlKDAhPT13ZSk7Zm9yKHNlPTE8PHgtMTt0ZSZzZTspc2U+Pj0xO2lmKDAhPT1zZT8odGUmPXNlLTEsdGUrPXNlKTp0ZT0wLEMrKywwPT0tLWplW3hdKXtpZih4PT09SClicmVhazt4PW1lW19lK1ZbQ11dfWlm''@;'; put 'put ''KHg+aiYmKHRlJkplKSE9PVVlKXtmb3IoMD09PW0mJihtPWopLGF0Kz1ULEE9MTw8KEU9eC1tKTtFK208SCYmISgoQS09amVbRSttXSk8PTApOylFKyssQTw8PTE7aWYob2UrPTE8PEUsMT09PWxlJiZvZT44NTJ8fDI9PT1sZSYmb2U+NTkyKXJldHVybiAxO1NlW1VlPXRlJkplXT1qPDwyNHxF''@;'; put 'put ''PDwxNnxhdC16ZX19cmV0dXJuIDAhPT10ZSYmKFNlW2F0K3RlXT14LW08PDI0fDY0PDwxNikscC5iaXRzPWosMH19LHsiLi4vdXRpbHMvY29tbW9uIjoyN31dLDM3OltmdW5jdGlvbihQLEYsTyl7InVzZSBzdHJpY3QiO0YuZXhwb3J0cz17MjoibmVlZCBkaWN0aW9uYXJ5IiwxOiJzdHJlYW0g''@;'; put 'put ''ZW5kIiwwOiIiLCItMSI6ImZpbGUgZXJyb3IiLCItMiI6InN0cmVhbSBlcnJvciIsIi0zIjoiZGF0YSBlcnJvciIsIi00IjoiaW5zdWZmaWNpZW50IG1lbW9yeSIsIi01IjoiYnVmZmVyIGVycm9yIiwiLTYiOiJpbmNvbXBhdGlibGUgdmVyc2lvbiJ9fSx7fV0sMzg6W2Z1bmN0aW9uKFAsRixP''@;'; put 'put ''KXsidXNlIHN0cmljdCI7dmFyIHo9UCgiLi4vdXRpbHMvY29tbW9uIik7ZnVuY3Rpb24gVyhmdCl7Zm9yKHZhciBQcj1mdC5sZW5ndGg7LS1Qcj49MDspZnRbUHJdPTB9dmFyIHplPTE1LFY9MTYsSD1bMCwwLDAsMCwwLDAsMCwwLDEsMSwxLDEsMiwyLDIsMiwzLDMsMywzLDQsNCw0LDQsNSw1''@;'; put 'put ''LDUsNSwwXSxqPVswLDAsMCwwLDEsMSwyLDIsMywzLDQsNCw1LDUsNiw2LDcsNyw4LDgsOSw5LDEwLDEwLDExLDExLDEyLDEyLDEzLDEzXSxFPVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMyw3XSxtPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwx''@;'; put 'put ''NCwxLDE1XSxvZT1uZXcgQXJyYXkoNTc2KTtXKG9lKTt2YXIgdGU9bmV3IEFycmF5KDYwKTtXKHRlKTt2YXIgc2U9bmV3IEFycmF5KDUxMik7VyhzZSk7dmFyIHdlPW5ldyBBcnJheSgyNTYpO1cod2UpO3ZhciBVZT1uZXcgQXJyYXkoMjkpO1coVWUpO3ZhciBKZT1uZXcgQXJyYXkoMzApO1co''@;'; put 'put ''SmUpO3ZhciBNZSx2ZSxYZSxhdD1mdW5jdGlvbihmdCxQcixadCxBdCxMbil7dGhpcy5zdGF0aWNfdHJlZT1mdCx0aGlzLmV4dHJhX2JpdHM9UHIsdGhpcy5leHRyYV9iYXNlPVp0LHRoaXMuZWxlbXM9QXQsdGhpcy5tYXhfbGVuZ3RoPUxuLHRoaXMuaGFzX3N0cmVlPWZ0JiZmdC5sZW5ndGh9''@;'; put 'put ''LGplPWZ1bmN0aW9uKGZ0LFByKXt0aGlzLmR5bl90cmVlPWZ0LHRoaXMubWF4X2NvZGU9MCx0aGlzLnN0YXRfZGVzYz1Qcn07ZnVuY3Rpb24gRGUoZnQpe3JldHVybiBmdDwyNTY/c2VbZnRdOnNlWzI1NisoZnQ+Pj43KV19ZnVuY3Rpb24gRmUoZnQsUHIpe2Z0LnBlbmRpbmdfYnVmW2Z0LnBl''@;'; put 'put ''bmRpbmcrK109MjU1JlByLGZ0LnBlbmRpbmdfYnVmW2Z0LnBlbmRpbmcrK109UHI+Pj44JjI1NX1mdW5jdGlvbiBSZShmdCxQcixadCl7ZnQuYmlfdmFsaWQ+Vi1adD8oZnQuYmlfYnVmfD1Qcjw8ZnQuYmlfdmFsaWQmNjU1MzUsRmUoZnQsZnQuYmlfYnVmKSxmdC5iaV9idWY9UHI+PlYtZnQu''@;'; put 'put ''YmlfdmFsaWQsZnQuYmlfdmFsaWQrPVp0LVYpOihmdC5iaV9idWZ8PVByPDxmdC5iaV92YWxpZCY2NTUzNSxmdC5iaV92YWxpZCs9WnQpfWZ1bmN0aW9uIEllKGZ0LFByLFp0KXtSZShmdCxadFsyKlByXSxadFsyKlByKzFdKX1mdW5jdGlvbiBWZShmdCxQcil7dmFyIFp0PTA7ZG97WnR8PTEm''@;'; put 'put ''ZnQsZnQ+Pj49MSxadDw8PTF9d2hpbGUoLS1Qcj4wKTtyZXR1cm4gWnQ+Pj4xfWZ1bmN0aW9uIF90KGZ0LFByLFp0KXt2YXIgc3QsenQsQXQ9bmV3IEFycmF5KHplKzEpLExuPTA7Zm9yKHN0PTE7c3Q8PXplO3N0KyspQXRbc3RdPUxuPUxuK1p0W3N0LTFdPDwxO2Zvcih6dD0wO3p0PD1Qcjt6''@;'; put 'put ''dCsrKXt2YXIgbmk9ZnRbMip6dCsxXTswIT09bmkmJihmdFsyKnp0XT1WZShBdFtuaV0rKyxuaSkpfX1mdW5jdGlvbiBRZShmdCl7dmFyIFByO2ZvcihQcj0wO1ByPDI4NjtQcisrKWZ0LmR5bl9sdHJlZVsyKlByXT0wO2ZvcihQcj0wO1ByPDMwO1ByKyspZnQuZHluX2R0cmVlWzIqUHJdPTA7''@;'; put 'put ''Zm9yKFByPTA7UHI8MTk7UHIrKylmdC5ibF90cmVlWzIqUHJdPTA7ZnQuZHluX2x0cmVlWzUxMl09MSxmdC5vcHRfbGVuPWZ0LnN0YXRpY19sZW49MCxmdC5sYXN0X2xpdD1mdC5tYXRjaGVzPTB9ZnVuY3Rpb24gZG4oZnQpe2Z0LmJpX3ZhbGlkPjg/RmUoZnQsZnQuYmlfYnVmKTpmdC5iaV92''@;'; put 'put ''YWxpZD4wJiYoZnQucGVuZGluZ19idWZbZnQucGVuZGluZysrXT1mdC5iaV9idWYpLGZ0LmJpX2J1Zj0wLGZ0LmJpX3ZhbGlkPTB9ZnVuY3Rpb24gTXQoZnQsUHIsWnQsQXQpe3ZhciBMbj0yKlByLHN0PTIqWnQ7cmV0dXJuIGZ0W0xuXTxmdFtzdF18fGZ0W0xuXT09PWZ0W3N0XSYmQXRbUHJd''@;'; put 'put ''PD1BdFtadF19ZnVuY3Rpb24gRHQoZnQsUHIsWnQpe2Zvcih2YXIgQXQ9ZnQuaGVhcFtadF0sTG49WnQ8PDE7TG48PWZ0LmhlYXBfbGVuJiYoTG48ZnQuaGVhcF9sZW4mJk10KFByLGZ0LmhlYXBbTG4rMV0sZnQuaGVhcFtMbl0sZnQuZGVwdGgpJiZMbisrLCFNdChQcixBdCxmdC5oZWFwW0xu''@;'; put 'put ''XSxmdC5kZXB0aCkpOylmdC5oZWFwW1p0XT1mdC5oZWFwW0xuXSxadD1MbixMbjw8PTE7ZnQuaGVhcFtadF09QXR9ZnVuY3Rpb24gaXQoZnQsUHIsWnQpe3ZhciBBdCxMbix6dCxuaSxzdD0wO2lmKDAhPT1mdC5sYXN0X2xpdClkb3tBdD1mdC5wZW5kaW5nX2J1ZltmdC5kX2J1ZisyKnN0XTw8''@;'; put 'put ''OHxmdC5wZW5kaW5nX2J1ZltmdC5kX2J1ZisyKnN0KzFdLExuPWZ0LnBlbmRpbmdfYnVmW2Z0LmxfYnVmK3N0XSxzdCsrLDA9PT1BdD9JZShmdCxMbixQcik6KEllKGZ0LCh6dD13ZVtMbl0pKzI1NisxLFByKSwwIT09KG5pPUhbenRdKSYmUmUoZnQsTG4tPVVlW3p0XSxuaSksSWUoZnQsenQ9''@;'; put 'put ''RGUoLS1BdCksWnQpLDAhPT0obmk9alt6dF0pJiZSZShmdCxBdC09SmVbenRdLG5pKSl9d2hpbGUoc3Q8ZnQubGFzdF9saXQpO0llKGZ0LDI1NixQcil9ZnVuY3Rpb24gJGUoZnQsUHIpe3ZhciB6dCxuaSxUdCxadD1Qci5keW5fdHJlZSxBdD1Qci5zdGF0X2Rlc2Muc3RhdGljX3RyZWUsTG49''@;'; put 'put ''UHIuc3RhdF9kZXNjLmhhc19zdHJlZSxzdD1Qci5zdGF0X2Rlc2MuZWxlbXMsV2U9LTE7Zm9yKGZ0LmhlYXBfbGVuPTAsZnQuaGVhcF9tYXg9NTczLHp0PTA7enQ8c3Q7enQrKykwIT09WnRbMip6dF0/KGZ0LmhlYXBbKytmdC5oZWFwX2xlbl09V2U9enQsZnQuZGVwdGhbenRdPTApOlp0WzIq''@;'; put 'put ''enQrMV09MDtmb3IoO2Z0LmhlYXBfbGVuPDI7KVp0WzIqKFR0PWZ0LmhlYXBbKytmdC5oZWFwX2xlbl09V2U8Mj8rK1dlOjApXT0xLGZ0LmRlcHRoW1R0XT0wLGZ0Lm9wdF9sZW4tLSxMbiYmKGZ0LnN0YXRpY19sZW4tPUF0WzIqVHQrMV0pO2ZvcihQci5tYXhfY29kZT1XZSx6dD1mdC5oZWFw''@;'; put 'put ''X2xlbj4+MTt6dD49MTt6dC0tKUR0KGZ0LFp0LHp0KTtUdD1zdDtkb3t6dD1mdC5oZWFwWzFdLGZ0LmhlYXBbMV09ZnQuaGVhcFtmdC5oZWFwX2xlbi0tXSxEdChmdCxadCwxKSxuaT1mdC5oZWFwWzFdLGZ0LmhlYXBbLS1mdC5oZWFwX21heF09enQsZnQuaGVhcFstLWZ0LmhlYXBfbWF4XT1u''@;'; put 'put ''aSxadFsyKlR0XT1adFsyKnp0XStadFsyKm5pXSxmdC5kZXB0aFtUdF09KGZ0LmRlcHRoW3p0XT49ZnQuZGVwdGhbbmldP2Z0LmRlcHRoW3p0XTpmdC5kZXB0aFtuaV0pKzEsWnRbMip6dCsxXT1adFsyKm5pKzFdPVR0LGZ0LmhlYXBbMV09VHQrKyxEdChmdCxadCwxKX13aGlsZShmdC5oZWFw''@;'; put 'put ''X2xlbj49Mik7ZnQuaGVhcFstLWZ0LmhlYXBfbWF4XT1mdC5oZWFwWzFdLGZ1bmN0aW9uIEFlKGZ0LFByKXt2YXIgVHQscnIsaHQseHQsQm4sb24sWnQ9UHIuZHluX3RyZWUsQXQ9UHIubWF4X2NvZGUsTG49UHIuc3RhdF9kZXNjLnN0YXRpY190cmVlLHN0PVByLnN0YXRfZGVzYy5oYXNfc3Ry''@;'; put 'put ''ZWUsenQ9UHIuc3RhdF9kZXNjLmV4dHJhX2JpdHMsbmk9UHIuc3RhdF9kZXNjLmV4dHJhX2Jhc2UsV2U9UHIuc3RhdF9kZXNjLm1heF9sZW5ndGgsanQ9MDtmb3IoeHQ9MDt4dDw9emU7eHQrKylmdC5ibF9jb3VudFt4dF09MDtmb3IoWnRbMipmdC5oZWFwW2Z0LmhlYXBfbWF4XSsxXT0wLFR0''@;'; put 'put ''PWZ0LmhlYXBfbWF4KzE7VHQ8NTczO1R0KyspKHh0PVp0WzIqWnRbMioocnI9ZnQuaGVhcFtUdF0pKzFdKzFdKzEpPldlJiYoeHQ9V2UsanQrKyksWnRbMipycisxXT14dCwhKHJyPkF0KSYmKGZ0LmJsX2NvdW50W3h0XSsrLEJuPTAscnI+PW5pJiYoQm49enRbcnItbmldKSxmdC5vcHRfbGVu''@;'; put 'put ''Kz0ob249WnRbMipycl0pKih4dCtCbiksc3QmJihmdC5zdGF0aWNfbGVuKz1vbiooTG5bMipycisxXStCbikpKTtpZigwIT09anQpe2Rve2Zvcih4dD1XZS0xOzA9PT1mdC5ibF9jb3VudFt4dF07KXh0LS07ZnQuYmxfY291bnRbeHRdLS0sZnQuYmxfY291bnRbeHQrMV0rPTIsZnQuYmxfY291''@;'; put 'put ''bnRbV2VdLS0sanQtPTJ9d2hpbGUoanQ+MCk7Zm9yKHh0PVdlOzAhPT14dDt4dC0tKWZvcihycj1mdC5ibF9jb3VudFt4dF07MCE9PXJyOykhKChodD1mdC5oZWFwWy0tVHRdKT5BdCkmJihadFsyKmh0KzFdIT09eHQmJihmdC5vcHRfbGVuKz0oeHQtWnRbMipodCsxXSkqWnRbMipodF0sWnRb''@;'; put 'put ''MipodCsxXT14dCkscnItLSl9fShmdCxQciksX3QoWnQsV2UsZnQuYmxfY291bnQpfWZ1bmN0aW9uIHR0KGZ0LFByLFp0KXt2YXIgQXQsc3QsTG49LTEsenQ9UHJbMV0sbmk9MCxXZT03LFR0PTQ7Zm9yKDA9PT16dCYmKFdlPTEzOCxUdD0zKSxQclsyKihadCsxKSsxXT02NTUzNSxBdD0wO0F0''@;'; put 'put ''PD1adDtBdCsrKXN0PXp0LHp0PVByWzIqKEF0KzEpKzFdLCEoKytuaTxXZSYmc3Q9PT16dCkmJihuaTxUdD9mdC5ibF90cmVlWzIqc3RdKz1uaTowIT09c3Q/KHN0IT09TG4mJmZ0LmJsX3RyZWVbMipzdF0rKyxmdC5ibF90cmVlWzMyXSsrKTpuaTw9MTA/ZnQuYmxfdHJlZVszNF0rKzpmdC5i''@;'; put 'put ''bF90cmVlWzM2XSsrLG5pPTAsTG49c3QsMD09PXp0PyhXZT0xMzgsVHQ9Myk6c3Q9PT16dD8oV2U9NixUdD0zKTooV2U9NyxUdD00KSl9ZnVuY3Rpb24gSGUoZnQsUHIsWnQpe3ZhciBBdCxzdCxMbj0tMSx6dD1QclsxXSxuaT0wLFdlPTcsVHQ9NDtmb3IoMD09PXp0JiYoV2U9MTM4LFR0PTMp''@;'; put 'put ''LEF0PTA7QXQ8PVp0O0F0KyspaWYoc3Q9enQsenQ9UHJbMiooQXQrMSkrMV0sISgrK25pPFdlJiZzdD09PXp0KSl7aWYobmk8VHQpZG97SWUoZnQsc3QsZnQuYmxfdHJlZSl9d2hpbGUoMCE9LS1uaSk7ZWxzZSAwIT09c3Q/KHN0IT09TG4mJihJZShmdCxzdCxmdC5ibF90cmVlKSxuaS0tKSxJ''@;'; put 'put ''ZShmdCwxNixmdC5ibF90cmVlKSxSZShmdCxuaS0zLDIpKTpuaTw9MTA/KEllKGZ0LDE3LGZ0LmJsX3RyZWUpLFJlKGZ0LG5pLTMsMykpOihJZShmdCwxOCxmdC5ibF90cmVlKSxSZShmdCxuaS0xMSw3KSk7bmk9MCxMbj1zdCwwPT09enQ/KFdlPTEzOCxUdD0zKTpzdD09PXp0PyhXZT02LFR0''@;'; put 'put ''PTMpOihXZT03LFR0PTQpfX12YXIgUHQ9ITE7ZnVuY3Rpb24gUXQoZnQsUHIsWnQsQXQpe1JlKGZ0LDArKEF0PzE6MCksMyksZnVuY3Rpb24geXQoZnQsUHIsWnQsQXQpe2RuKGZ0KSxBdCYmKEZlKGZ0LFp0KSxGZShmdCx+WnQpKSx6LmFycmF5U2V0KGZ0LnBlbmRpbmdfYnVmLGZ0LndpbmRv''@;'; put 'put ''dyxQcixadCxmdC5wZW5kaW5nKSxmdC5wZW5kaW5nKz1adH0oZnQsUHIsWnQsITApfU8uX3RyX2luaXQ9ZnVuY3Rpb24gYWkoZnQpe1B0fHwoZnVuY3Rpb24gcnQoKXt2YXIgZnQsUHIsWnQsQXQsTG4sc3Q9bmV3IEFycmF5KHplKzEpO2ZvcihadD0wLEF0PTA7QXQ8Mjg7QXQrKylmb3IoVWVb''@;'; put 'put ''QXRdPVp0LGZ0PTA7ZnQ8MTw8SFtBdF07ZnQrKyl3ZVtadCsrXT1BdDtmb3Iod2VbWnQtMV09QXQsTG49MCxBdD0wO0F0PDE2O0F0KyspZm9yKEplW0F0XT1MbixmdD0wO2Z0PDE8PGpbQXRdO2Z0Kyspc2VbTG4rK109QXQ7Zm9yKExuPj49NztBdDwzMDtBdCsrKWZvcihKZVtBdF09TG48PDcs''@;'; put 'put ''ZnQ9MDtmdDwxPDxqW0F0XS03O2Z0Kyspc2VbMjU2K0xuKytdPUF0O2ZvcihQcj0wO1ByPD16ZTtQcisrKXN0W1ByXT0wO2ZvcihmdD0wO2Z0PD0xNDM7KW9lWzIqZnQrMV09OCxmdCsrLHN0WzhdKys7Zm9yKDtmdDw9MjU1OylvZVsyKmZ0KzFdPTksZnQrKyxzdFs5XSsrO2Zvcig7ZnQ8PTI3''@;'; put 'put ''OTspb2VbMipmdCsxXT03LGZ0Kyssc3RbN10rKztmb3IoO2Z0PD0yODc7KW9lWzIqZnQrMV09OCxmdCsrLHN0WzhdKys7Zm9yKF90KG9lLDI4NyxzdCksZnQ9MDtmdDwzMDtmdCsrKXRlWzIqZnQrMV09NSx0ZVsyKmZ0XT1WZShmdCw1KTtNZT1uZXcgYXQob2UsSCwyNTcsMjg2LHplKSx2ZT1u''@;'; put 'put ''ZXcgYXQodGUsaiwwLDMwLHplKSxYZT1uZXcgYXQobmV3IEFycmF5KDApLEUsMCwxOSw3KX0oKSxQdD0hMCksZnQubF9kZXNjPW5ldyBqZShmdC5keW5fbHRyZWUsTWUpLGZ0LmRfZGVzYz1uZXcgamUoZnQuZHluX2R0cmVlLHZlKSxmdC5ibF9kZXNjPW5ldyBqZShmdC5ibF90cmVlLFhlKSxm''@;'; put 'put ''dC5iaV9idWY9MCxmdC5iaV92YWxpZD0wLFFlKGZ0KX0sTy5fdHJfc3RvcmVkX2Jsb2NrPVF0LE8uX3RyX2ZsdXNoX2Jsb2NrPWZ1bmN0aW9uIFJpKGZ0LFByLFp0LEF0KXt2YXIgTG4sc3QsenQ9MDtmdC5sZXZlbD4wPygyPT09ZnQuc3RybS5kYXRhX3R5cGUmJihmdC5zdHJtLmRhdGFfdHlw''@;'; put 'put ''ZT1mdW5jdGlvbiBSdChmdCl7dmFyIFp0LFByPTQwOTM2MjQ0NDc7Zm9yKFp0PTA7WnQ8PTMxO1p0KyssUHI+Pj49MSlpZigxJlByJiYwIT09ZnQuZHluX2x0cmVlWzIqWnRdKXJldHVybiAwO2lmKDAhPT1mdC5keW5fbHRyZWVbMThdfHwwIT09ZnQuZHluX2x0cmVlWzIwXXx8MCE9PWZ0LmR5''@;'; put 'put ''bl9sdHJlZVsyNl0pcmV0dXJuIDE7Zm9yKFp0PTMyO1p0PDI1NjtadCsrKWlmKDAhPT1mdC5keW5fbHRyZWVbMipadF0pcmV0dXJuIDE7cmV0dXJuIDB9KGZ0KSksJGUoZnQsZnQubF9kZXNjKSwkZShmdCxmdC5kX2Rlc2MpLHp0PWZ1bmN0aW9uIGR0KGZ0KXt2YXIgUHI7Zm9yKHR0KGZ0LGZ0''@;'; put 'put ''LmR5bl9sdHJlZSxmdC5sX2Rlc2MubWF4X2NvZGUpLHR0KGZ0LGZ0LmR5bl9kdHJlZSxmdC5kX2Rlc2MubWF4X2NvZGUpLCRlKGZ0LGZ0LmJsX2Rlc2MpLFByPTE4O1ByPj0zJiYwPT09ZnQuYmxfdHJlZVsyKm1bUHJdKzFdO1ByLS0pO3JldHVybiBmdC5vcHRfbGVuKz0zKihQcisxKSs1KzUr''@;'; put 'put ''NCxQcn0oZnQpLChzdD1mdC5zdGF0aWNfbGVuKzMrNz4+PjMpPD0oTG49ZnQub3B0X2xlbiszKzc+Pj4zKSYmKExuPXN0KSk6TG49c3Q9WnQrNSxadCs0PD1MbiYmLTEhPT1Qcj9RdChmdCxQcixadCxBdCk6ND09PWZ0LnN0cmF0ZWd5fHxzdD09PUxuPyhSZShmdCwyKyhBdD8xOjApLDMpLGl0''@;'; put 'put ''KGZ0LG9lLHRlKSk6KFJlKGZ0LDQrKEF0PzE6MCksMyksZnVuY3Rpb24gcXQoZnQsUHIsWnQsQXQpe3ZhciBMbjtmb3IoUmUoZnQsUHItMjU3LDUpLFJlKGZ0LFp0LTEsNSksUmUoZnQsQXQtNCw0KSxMbj0wO0xuPEF0O0xuKyspUmUoZnQsZnQuYmxfdHJlZVsyKm1bTG5dKzFdLDMpO0hlKGZ0''@;'; put 'put ''LGZ0LmR5bl9sdHJlZSxQci0xKSxIZShmdCxmdC5keW5fZHRyZWUsWnQtMSl9KGZ0LGZ0LmxfZGVzYy5tYXhfY29kZSsxLGZ0LmRfZGVzYy5tYXhfY29kZSsxLHp0KzEpLGl0KGZ0LGZ0LmR5bl9sdHJlZSxmdC5keW5fZHRyZWUpKSxRZShmdCksQXQmJmRuKGZ0KX0sTy5fdHJfdGFsbHk9ZnVu''@;'; put 'put ''Y3Rpb24gZm4oZnQsUHIsWnQpe3JldHVybiBmdC5wZW5kaW5nX2J1ZltmdC5kX2J1ZisyKmZ0Lmxhc3RfbGl0XT1Qcj4+PjgmMjU1LGZ0LnBlbmRpbmdfYnVmW2Z0LmRfYnVmKzIqZnQubGFzdF9saXQrMV09MjU1JlByLGZ0LnBlbmRpbmdfYnVmW2Z0LmxfYnVmK2Z0Lmxhc3RfbGl0XT0yNTUm''@;'; put 'put ''WnQsZnQubGFzdF9saXQrKywwPT09UHI/ZnQuZHluX2x0cmVlWzIqWnRdKys6KGZ0Lm1hdGNoZXMrKyxQci0tLGZ0LmR5bl9sdHJlZVsyKih3ZVtadF0rMjU2KzEpXSsrLGZ0LmR5bl9kdHJlZVsyKkRlKFByKV0rKyksZnQubGFzdF9saXQ9PT1mdC5saXRfYnVmc2l6ZS0xfSxPLl90cl9hbGln''@;'; put 'put ''bj1mdW5jdGlvbiBzbihmdCl7UmUoZnQsMiwzKSxJZShmdCwyNTYsb2UpLGZ1bmN0aW9uIGtlKGZ0KXsxNj09PWZ0LmJpX3ZhbGlkPyhGZShmdCxmdC5iaV9idWYpLGZ0LmJpX2J1Zj0wLGZ0LmJpX3ZhbGlkPTApOmZ0LmJpX3ZhbGlkPj04JiYoZnQucGVuZGluZ19idWZbZnQucGVuZGluZysr''@;'; put 'put ''XT0yNTUmZnQuYmlfYnVmLGZ0LmJpX2J1Zj4+PTgsZnQuYmlfdmFsaWQtPTgpfShmdCl9fSx7Ii4uL3V0aWxzL2NvbW1vbiI6Mjd9XSwzOTpbZnVuY3Rpb24oUCxGLE8peyJ1c2Ugc3RyaWN0IjtGLmV4cG9ydHM9ZnVuY3Rpb24geigpe3RoaXMuaW5wdXQ9bnVsbCx0aGlzLm5leHRfaW49MCx0''@;'; put 'put ''aGlzLmF2YWlsX2luPTAsdGhpcy50b3RhbF9pbj0wLHRoaXMub3V0cHV0PW51bGwsdGhpcy5uZXh0X291dD0wLHRoaXMuYXZhaWxfb3V0PTAsdGhpcy50b3RhbF9vdXQ9MCx0aGlzLm1zZz0iIix0aGlzLnN0YXRlPW51bGwsdGhpcy5kYXRhX3R5cGU9Mix0aGlzLmFkbGVyPTB9fSx7fV19LHt9''@;'; put 'put ''LFs5XSkoOSl9KX0sNjM1Nzg6KHVlLHEsXyk9PnshZnVuY3Rpb24geSh3KXt3LnZlcnNpb249IjEuMjAyMTExMjIuMSI7dmFyIFA9MTIwMCxGPTEyNTI7dHlwZW9mIGNwdGFibGU+InUiJiYodHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsLmNwdGFibGU9Xyg0MjkyNCk6dHlwZW9mIHdpbmRvdzwi''@;'; put 'put ''dSImJih3aW5kb3cuY3B0YWJsZT1fKDQyOTI0KSkpO2Zvcih2YXIgTz1bODc0LDkzMiw5MzYsOTQ5LDk1MCwxZTRdLHo9MDt6PD04OysreilPLnB1c2goMTI1MCt6KTt2YXIgTj17MDoxMjUyLDE6NjUwMDEsMjo2NTAwMSw3NzoxZTQsMTI4OjkzMiwxMjk6OTQ5LDEzMDoxMzYxLDEzNDo5MzYs''@;'; put 'put ''MTM2Ojk1MCwxNjE6MTI1MywxNjI6MTI1NCwxNjM6MTI1OCwxNzc6MTI1NSwxNzg6MTI1NiwxODY6MTI1NywyMDQ6MTI1MSwyMjI6ODc0LDIzODoxMjUwLDI1NToxMjUyLDY5OjY5Njl9LEw9ZnVuY3Rpb24oUyl7LTEhPU8uaW5kZXhPZihTKSYmKEY9TlswXT1TKX0sVT1mdW5jdGlvbihTKXtQ''@;'; put 'put ''PVMsTChTKX07ZnVuY3Rpb24gVygpe1UoMTIwMCksZnVuY3Rpb24gSygpe0woMTI1Mil9KCl9ZnVuY3Rpb24gWShTKXtmb3IodmFyIFI9W10saz0wLEc9Uy5sZW5ndGg7azxHOysraylSW2tdPVMuY2hhckNvZGVBdChrKTtyZXR1cm4gUn12YXIgSj1mdW5jdGlvbihTKXt2YXIgUj1TLmNoYXJD''@;'; put 'put ''b2RlQXQoMCksaz1TLmNoYXJDb2RlQXQoMSk7cmV0dXJuIDI1NT09UiYmMjU0PT1rP2Z1bmN0aW9uIFgoUyl7Zm9yKHZhciBSPVtdLGs9MDtrPFMubGVuZ3RoPj4xOysraylSW2tdPVN0cmluZy5mcm9tQ2hhckNvZGUoUy5jaGFyQ29kZUF0KDIqaykrKFMuY2hhckNvZGVBdCgyKmsrMSk8PDgp''@;'; put 'put ''KTtyZXR1cm4gUi5qb2luKCIiKX0oUy5zbGljZSgyKSk6MjU0PT1SJiYyNTU9PWs/ZnVuY3Rpb24gZWUoUyl7Zm9yKHZhciBSPVtdLGs9MDtrPFMubGVuZ3RoPj4xOysraylSW2tdPVN0cmluZy5mcm9tQ2hhckNvZGUoUy5jaGFyQ29kZUF0KDIqaysxKSsoUy5jaGFyQ29kZUF0KDIqayk8PDgp''@;'; put 'put ''KTtyZXR1cm4gUi5qb2luKCIiKX0oUy5zbGljZSgyKSk6NjUyNzk9PVI/Uy5zbGljZSgxKTpTfSxyZT1mdW5jdGlvbihSKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShSKX0saWU9ZnVuY3Rpb24oUil7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoUil9O3R5cGVvZiBjcHRhYmxlPCJ1''@;'; put 'put ''IiYmKFU9ZnVuY3Rpb24oUyl7UD1TLEwoUyl9LEo9ZnVuY3Rpb24oUyl7cmV0dXJuIDI1NT09PVMuY2hhckNvZGVBdCgwKSYmMjU0PT09Uy5jaGFyQ29kZUF0KDEpP2NwdGFibGUudXRpbHMuZGVjb2RlKDEyMDAsWShTLnNsaWNlKDIpKSk6U30scmU9ZnVuY3Rpb24oUil7cmV0dXJuIDEyMDA9''@;'; put 'put ''PT1QP1N0cmluZy5mcm9tQ2hhckNvZGUoUik6Y3B0YWJsZS51dGlscy5kZWNvZGUoUCxbMjU1JlIsUj4+OF0pWzBdfSxpZT1mdW5jdGlvbihSKXtyZXR1cm4gY3B0YWJsZS51dGlscy5kZWNvZGUoRixbUl0pWzBdfSk7dmFyIGxlPW51bGwsX2U9ZnVuY3Rpb24oKXt2YXIgUj0iQUJDREVGR0hJ''@;'; put 'put ''SktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iO3JldHVybntlbmNvZGU6ZnVuY3Rpb24oayl7Zm9yKHZhciBHPSIiLFE9MCxhZT0wLGdlPTAscGU9MCx5ZT0wLFBlPTAsTmU9MCxZZT0wO1llPGsubGVuZ3RoOylwZT0oUT1rLmNoYXJDb2Rl''@;'; put 'put ''QXQoWWUrKykpPj4yLHllPSgzJlEpPDw0fChhZT1rLmNoYXJDb2RlQXQoWWUrKykpPj40LFBlPSgxNSZhZSk8PDJ8KGdlPWsuY2hhckNvZGVBdChZZSsrKSk+PjYsTmU9NjMmZ2UsaXNOYU4oYWUpP1BlPU5lPTY0OmlzTmFOKGdlKSYmKE5lPTY0KSxHKz1SLmNoYXJBdChwZSkrUi5jaGFyQXQo''@;'; put 'put ''eWUpK1IuY2hhckF0KFBlKStSLmNoYXJBdChOZSk7cmV0dXJuIEd9LGRlY29kZTpmdW5jdGlvbihHKXt2YXIgUT0iIix5ZT0wLFBlPTAsTmU9MCxZZT0wO0c9Ry5yZXBsYWNlKC9bXlx3XCtcL1w9XS9nLCIiKTtmb3IodmFyIGV0PTA7ZXQ8Ry5sZW5ndGg7KXllPVIuaW5kZXhPZihHLmNoYXJB''@;'; put 'put ''dChldCsrKSksUGU9Ui5pbmRleE9mKEcuY2hhckF0KGV0KyspKSxRKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHllPDwyfFBlPj40KSw2NCE9PShOZT1SLmluZGV4T2YoRy5jaGFyQXQoZXQrKykpKSYmKFErPVN0cmluZy5mcm9tQ2hhckNvZGUoKDE1JlBlKTw8NHxOZT4+MikpLDY0IT09KFllPVIu''@;'; put 'put ''aW5kZXhPZihHLmNoYXJBdChldCsrKSkpJiYoUSs9U3RyaW5nLmZyb21DaGFyQ29kZSgoMyZOZSk8PDZ8WWUpKTtyZXR1cm4gUX19fSgpLFRlPXR5cGVvZiBCdWZmZXI8InUiJiZ0eXBlb2YgcHJvY2VzczwidSImJnR5cGVvZiBwcm9jZXNzLnZlcnNpb25zPCJ1IiYmISFwcm9jZXNzLnZlcnNp''@;'; put 'put ''b25zLm5vZGUsU2U9ZnVuY3Rpb24oKXt9O2lmKHR5cGVvZiBCdWZmZXI8InUiKXt2YXIgemU9IUJ1ZmZlci5mcm9tO2lmKCF6ZSl0cnl7QnVmZmVyLmZyb20oImZvbyIsInV0ZjgiKX1jYXRjaHt6ZT0hMH1TZT16ZT9mdW5jdGlvbihTLFIpe3JldHVybiBSP25ldyBCdWZmZXIoUyxSKTpuZXcg''@;'; put 'put ''QnVmZmVyKFMpfTpCdWZmZXIuZnJvbS5iaW5kKEJ1ZmZlciksQnVmZmVyLmFsbG9jfHwoQnVmZmVyLmFsbG9jPWZ1bmN0aW9uKFMpe3JldHVybiBuZXcgQnVmZmVyKFMpfSksQnVmZmVyLmFsbG9jVW5zYWZlfHwoQnVmZmVyLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKFMpe3JldHVybiBuZXcgQnVm''@;'; put 'put ''ZmVyKFMpfSl9ZnVuY3Rpb24gVihTKXtyZXR1cm4gVGU/QnVmZmVyLmFsbG9jKFMpOm5ldyBBcnJheShTKX1mdW5jdGlvbiBwKFMpe3JldHVybiBUZT9CdWZmZXIuYWxsb2NVbnNhZmUoUyk6bmV3IEFycmF5KFMpfXZhciBiPWZ1bmN0aW9uKFIpe3JldHVybiBUZT9TZShSLCJiaW5hcnkiKTpS''@;'; put 'put ''LnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24oayl7cmV0dXJuIDI1NSZrLmNoYXJDb2RlQXQoMCl9KX07ZnVuY3Rpb24geChTKXtpZih0eXBlb2YgQXJyYXlCdWZmZXI+InUiKXJldHVybiBiKFMpO2Zvcih2YXIgUj1uZXcgQXJyYXlCdWZmZXIoUy5sZW5ndGgpLGs9bmV3IFVpbnQ4QXJyYXkoUiks''@;'; put 'put ''Rz0wO0chPVMubGVuZ3RoOysrRylrW0ddPTI1NSZTLmNoYXJDb2RlQXQoRyk7cmV0dXJuIFJ9ZnVuY3Rpb24gQyhTKXtpZihBcnJheS5pc0FycmF5KFMpKXJldHVybiBTLm1hcChmdW5jdGlvbihHKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShHKX0pLmpvaW4oIiIpO2Zvcih2YXIgUj1b''@;'; put 'put ''XSxrPTA7azxTLmxlbmd0aDsrK2spUltrXT1TdHJpbmcuZnJvbUNoYXJDb2RlKFNba10pO3JldHVybiBSLmpvaW4oIiIpfWZ1bmN0aW9uIEgoUyl7aWYodHlwZW9mIEFycmF5QnVmZmVyPiJ1Iil0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIik7aWYoUyBpbnN0YW5jZW9mIEFycmF5QnVm''@;'; put 'put ''ZmVyKXJldHVybiBIKG5ldyBVaW50OEFycmF5KFMpKTtmb3IodmFyIFI9bmV3IEFycmF5KFMubGVuZ3RoKSxrPTA7azxTLmxlbmd0aDsrK2spUltrXT1TW2tdO3JldHVybiBSfXZhciBqPWZ1bmN0aW9uKFMpe3ZhciBSPVtdO3JldHVybiBTLmZvckVhY2goZnVuY3Rpb24oayl7QXJyYXkuaXNB''@;'; put 'put ''cnJheShrKT9SPVIuY29uY2F0KGspOih0eXBlb2YgVWludDhBcnJheTwidSImJmsgaW5zdGFuY2VvZiBVaW50OEFycmF5fHx0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZrIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpJiYoUj1SLmNvbmNhdChIKGspKSl9KSxSfSxFPS9cdTAwMDAvZyxtPS9bXHUw''@;'; put 'put ''MDAxLVx1MDAwNl0vZyxBPXt9LG9lPWZ1bmN0aW9uKFIpe2Z1bmN0aW9uIGsobG4pe2Zvcih2YXIgRW49IiIsem49bG4ubGVuZ3RoLTE7em4+PTA7KUVuKz1sbi5jaGFyQXQoem4tLSk7cmV0dXJuIEVufWZ1bmN0aW9uIEcobG4sRW4pe2Zvcih2YXIgem49IiI7em4ubGVuZ3RoPEVuOyl6bis9''@;'; put 'put ''bG47cmV0dXJuIHpufWZ1bmN0aW9uIFEobG4sRW4pe3ZhciB6bj0iIitsbjtyZXR1cm4gem4ubGVuZ3RoPj1Fbj96bjpHKCIwIixFbi16bi5sZW5ndGgpK3pufWZ1bmN0aW9uIGFlKGxuLEVuKXt2YXIgem49IiIrbG47cmV0dXJuIHpuLmxlbmd0aD49RW4/em46RygiICIsRW4tem4ubGVuZ3Ro''@;'; put 'put ''KSt6bn1mdW5jdGlvbiBnZShsbixFbil7dmFyIHpuPSIiK2xuO3JldHVybiB6bi5sZW5ndGg+PUVuP3puOnpuK0coIiAiLEVuLXpuLmxlbmd0aCl9Ui52ZXJzaW9uPSIxLjIwMjEwNzI2LjEiO3ZhciBQZT1NYXRoLnBvdygyLDMyKTtmdW5jdGlvbiBOZShsbixFbil7cmV0dXJuIGxuPlBlfHxs''@;'; put 'put ''bjwtUGU/ZnVuY3Rpb24gcGUobG4sRW4pe3ZhciB6bj0iIitNYXRoLnJvdW5kKGxuKTtyZXR1cm4gem4ubGVuZ3RoPj1Fbj96bjpHKCIwIixFbi16bi5sZW5ndGgpK3pufShsbixFbik6ZnVuY3Rpb24geWUobG4sRW4pe3ZhciB6bj0iIitsbjtyZXR1cm4gem4ubGVuZ3RoPj1Fbj96bjpHKCIw''@;'; put 'put ''IixFbi16bi5sZW5ndGgpK3pufShNYXRoLnJvdW5kKGxuKSxFbil9ZnVuY3Rpb24gWWUobG4sRW4pe3JldHVybiBsbi5sZW5ndGg+PTcrKEVuPUVufHwwKSYmMTAzPT0oMzJ8bG4uY2hhckNvZGVBdChFbikpJiYxMDE9PSgzMnxsbi5jaGFyQ29kZUF0KEVuKzEpKSYmMTEwPT0oMzJ8bG4uY2hh''@;'; put 'put ''ckNvZGVBdChFbisyKSkmJjEwMT09KDMyfGxuLmNoYXJDb2RlQXQoRW4rMykpJiYxMTQ9PSgzMnxsbi5jaGFyQ29kZUF0KEVuKzQpKSYmOTc9PSgzMnxsbi5jaGFyQ29kZUF0KEVuKzUpKSYmMTA4PT0oMzJ8bG4uY2hhckNvZGVBdChFbis2KSl9ZnVuY3Rpb24gZXQobG4pe2Zvcih2YXIgRW49''@;'; put 'put ''W10sem49T2JqZWN0LmtleXMobG4pLFNpPTA7U2khPT16bi5sZW5ndGg7KytTaSlFbltsblt6bltTaV1dXT16bltTaV07cmV0dXJuIEVufXZhciB1dD1bWyJTdW4iLCJTdW5kYXkiXSxbIk1vbiIsIk1vbmRheSJdLFsiVHVlIiwiVHVlc2RheSJdLFsiV2VkIiwiV2VkbmVzZGF5Il0sWyJUaHUi''@;'; put 'put ''LCJUaHVyc2RheSJdLFsiRnJpIiwiRnJpZGF5Il0sWyJTYXQiLCJTYXR1cmRheSJdXSxFdD1bWyJKIiwiSmFuIiwiSmFudWFyeSJdLFsiRiIsIkZlYiIsIkZlYnJ1YXJ5Il0sWyJNIiwiTWFyIiwiTWFyY2giXSxbIkEiLCJBcHIiLCJBcHJpbCJdLFsiTSIsIk1heSIsIk1heSJdLFsiSiIsIkp1''@;'; put 'put ''biIsIkp1bmUiXSxbIkoiLCJKdWwiLCJKdWx5Il0sWyJBIiwiQXVnIiwiQXVndXN0Il0sWyJTIiwiU2VwIiwiU2VwdGVtYmVyIl0sWyJPIiwiT2N0IiwiT2N0b2JlciJdLFsiTiIsIk5vdiIsIk5vdmVtYmVyIl0sWyJEIiwiRGVjIiwiRGVjZW1iZXIiXV07ZnVuY3Rpb24gb3QobG4pe2xuWzBd''@;'; put 'put ''PSJHZW5lcmFsIixsblsxXT0iMCIsbG5bMl09IjAuMDAiLGxuWzNdPSIjLCMjMCIsbG5bNF09IiMsIyMwLjAwIixsbls5XT0iMCUiLGxuWzEwXT0iMC4wMCUiLGxuWzExXT0iMC4wMEUrMDAiLGxuWzEyXT0iIyA/Lz8iLGxuWzEzXT0iIyA/Py8/PyIsbG5bMTRdPSJtL2QveXkiLGxuWzE1XT0i''@;'; put 'put ''ZC1tbW0teXkiLGxuWzE2XT0iZC1tbW0iLGxuWzE3XT0ibW1tLXl5IixsblsxOF09Img6bW0gQU0vUE0iLGxuWzE5XT0iaDptbTpzcyBBTS9QTSIsbG5bMjBdPSJoOm1tIixsblsyMV09Img6bW06c3MiLGxuWzIyXT0ibS9kL3l5IGg6bW0iLGxuWzM3XT0iIywjIzAgOygjLCMjMCkiLGxuWzM4''@;'; put 'put ''XT0iIywjIzAgO1tSZWRdKCMsIyMwKSIsbG5bMzldPSIjLCMjMC4wMDsoIywjIzAuMDApIixsbls0MF09IiMsIyMwLjAwO1tSZWRdKCMsIyMwLjAwKSIsbG5bNDVdPSJtbTpzcyIsbG5bNDZdPSJbaF06bW06c3MiLGxuWzQ3XT0ibW1zcy4wIixsbls0OF09IiMjMC4wRSswIixsbls0OV09IkAi''@;'; put 'put ''LGxuWzU2XT0nIlx1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggImhoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyICInLEhuKGxuKX12YXIgYnQ9e307b3QoYnQpO3ZhciBCdD1bXSxrdD0wO2ZvcihrdD01O2t0PD04Oysra3QpQnRba3RdPTMyK2t0O2ZvcihrdD0yMztrdDw9MjY7KytrdClC''@;'; put 'put ''dFtrdF09MDtmb3Ioa3Q9Mjc7a3Q8PTMxOysra3QpQnRba3RdPTE0O2ZvcihrdD01MDtrdDw9NTg7KytrdClCdFtrdF09MTQ7Zm9yKGt0PTU5O2t0PD02MjsrK2t0KUJ0W2t0XT1rdC01ODtmb3Ioa3Q9Njc7a3Q8PTY4Oysra3QpQnRba3RdPWt0LTU4O2ZvcihrdD03MjtrdDw9NzU7KytrdClC''@;'; put 'put ''dFtrdF09a3QtNTg7Zm9yKGt0PTY3O2t0PD02ODsrK2t0KUJ0W2t0XT1rdC01Nztmb3Ioa3Q9NzY7a3Q8PTc4Oysra3QpQnRba3RdPWt0LTU2O2ZvcihrdD03OTtrdDw9ODE7KytrdClCdFtrdF09a3QtMzQ7dmFyIE90PVtdO2Z1bmN0aW9uIEt0KGxuLEVuLHpuKXtmb3IodmFyIFNpPWxuPDA/''@;'; put 'put ''LTE6MSxhcj1sbipTaSxPaT0wLENyPTEsUGk9MCxXbz0xLEhpPTAsbW89MCxEaT1NYXRoLmZsb29yKGFyKTtIaTxFbiYmKFBpPShEaT1NYXRoLmZsb29yKGFyKSkqQ3IrT2ksbW89RGkqSGkrV28sIShhci1EaTw1ZS04KSk7KWFyPTEvKGFyLURpKSxPaT1DcixDcj1QaSxXbz1IaSxIaT1tbztp''@;'; put 'put ''Zihtbz5FbiYmKEhpPkVuPyhtbz1XbyxQaT1PaSk6KG1vPUhpLFBpPUNyKSksIXpuKXJldHVyblswLFNpKlBpLG1vXTt2YXIgYXM9TWF0aC5mbG9vcihTaSpQaS9tbyk7cmV0dXJuW2FzLFNpKlBpLWFzKm1vLG1vXX1mdW5jdGlvbiBUbihsbixFbix6bil7aWYobG4+Mjk1ODQ2NXx8bG48MCly''@;'; put 'put ''ZXR1cm4gbnVsbDt2YXIgU2k9MHxsbixhcj1NYXRoLmZsb29yKDg2NDAwKihsbi1TaSkpLE9pPTAsQ3I9W10sUGk9e0Q6U2ksVDphcix1Ojg2NDAwKihsbi1TaSktYXIseTowLG06MCxkOjAsSDowLE06MCxTOjAscTowfTtpZihNYXRoLmFicyhQaS51KTwxZS02JiYoUGkudT0wKSxFbiYmRW4u''@;'; put 'put ''ZGF0ZTE5MDQmJihTaSs9MTQ2MiksUGkudT4uOTk5OSYmKFBpLnU9MCw4NjQwMD09KythciYmKFBpLlQ9YXI9MCwrK1NpLCsrUGkuRCkpLDYwPT09U2kpQ3I9em4/WzEzMTcsMTAsMjldOlsxOTAwLDIsMjldLE9pPTM7ZWxzZSBpZigwPT09U2kpQ3I9em4/WzEzMTcsOCwyOV06WzE5MDAsMSww''@;'; put 'put ''XSxPaT02O2Vsc2V7U2k+NjAmJi0tU2k7dmFyIFdvPW5ldyBEYXRlKDE5MDAsMCwxKTtXby5zZXREYXRlKFdvLmdldERhdGUoKStTaS0xKSxDcj1bV28uZ2V0RnVsbFllYXIoKSxXby5nZXRNb250aCgpKzEsV28uZ2V0RGF0ZSgpXSxPaT1Xby5nZXREYXkoKSxTaTw2MCYmKE9pPShPaSs2KSU3''@;'; put 'put ''KSx6biYmKE9pPWZ1bmN0aW9uIHNhKGxuLEVuKXtFblswXS09NTgxO3ZhciB6bj1sbi5nZXREYXkoKTtyZXR1cm4gbG48NjAmJih6bj0oem4rNiklNyksem59KFdvLENyKSl9cmV0dXJuIFBpLnk9Q3JbMF0sUGkubT1DclsxXSxQaS5kPUNyWzJdLFBpLlM9YXIlNjAsYXI9TWF0aC5mbG9vcihh''@;'; put 'put ''ci82MCksUGkuTT1hciU2MCxhcj1NYXRoLmZsb29yKGFyLzYwKSxQaS5IPWFyLFBpLnE9T2ksUGl9T3RbNV09T3RbNjNdPSciJCIjLCMjMF8pO1xcKCIkIiMsIyMwXFwpJyxPdFs2XT1PdFs2NF09JyIkIiMsIyMwXyk7W1JlZF1cXCgiJCIjLCMjMFxcKScsT3RbN109T3RbNjVdPSciJCIjLCMj''@;'; put 'put ''MC4wMF8pO1xcKCIkIiMsIyMwLjAwXFwpJyxPdFs4XT1PdFs2Nl09JyIkIiMsIyMwLjAwXyk7W1JlZF1cXCgiJCIjLCMjMC4wMFxcKScsT3RbNDFdPSdfKCogIywjIzBfKTtfKCogXFwoIywjIzBcXCk7XygqICItIl8pO18oQF8pJyxPdFs0Ml09J18oIiQiKiAjLCMjMF8pO18oIiQiKiBcXCgj''@;'; put 'put ''LCMjMFxcKTtfKCIkIiogIi0iXyk7XyhAXyknLE90WzQzXT0nXygqICMsIyMwLjAwXyk7XygqIFxcKCMsIyMwLjAwXFwpO18oKiAiLSI/P18pO18oQF8pJyxPdFs0NF09J18oIiQiKiAjLCMjMC4wMF8pO18oIiQiKiBcXCgjLCMjMC4wMFxcKTtfKCIkIiogIi0iPz9fKTtfKEBfKScsUi5wYXJz''@;'; put 'put ''ZV9kYXRlX2NvZGU9VG47dmFyIGlyPW5ldyBEYXRlKDE4OTksMTEsMzEsMCwwLDApLFNuPWlyLmdldFRpbWUoKSxzcj1uZXcgRGF0ZSgxOTAwLDIsMSwwLDAsMCk7ZnVuY3Rpb24gSm4obG4sRW4pe3ZhciB6bj1sbi5nZXRUaW1lKCk7cmV0dXJuIEVuP3puLT0xMjYyMzA0ZTU6bG4+PXNyJiYo''@;'; put 'put ''em4rPTg2NGU1KSwoem4tKFNuKzZlNCoobG4uZ2V0VGltZXpvbmVPZmZzZXQoKS1pci5nZXRUaW1lem9uZU9mZnNldCgpKSkpLzg2NGU1fXZhciBWbj0iIix1cj17ImVuLXVzIjp7eToieSIsZDoiZCIsIiwiOiIsIiwiLiI6Ii4iLGRhdGU6Il8vIn0sImRlLWRlIjp7eToiaiIsZDoidCIsIiwi''@;'; put 'put ''OiIuIiwiLiI6IiwiLGRhdGU6Il8uIn0sIml0LWl0Ijp7eToieSIsZDoiZCIsIiwiOiIuIiwiLiI6IiwiLGRhdGU6Il8vIn19LGdyPXVyW1ZuLnRvTG93ZXJDYXNlKCldfHx1clsiZW4tdXMiXSx0cj1ldChnciksQ2k9IiQiLEZpPSIiLExpPSIsIixEcj0iLiIsTm49Ii8iO2Z1bmN0aW9uIEhu''@;'; put 'put ''KGxuKXtzd2l0Y2goKFZufHwiIikudG9Mb3dlckNhc2UoKSl7Y2FzZSJ6aC10dyI6bG5bMjddPSJbJC00MDRdZS9tL2QiLGxuWzI4XT0nWyQtNDA0XWUiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsbG5bMjldPSdbJC00MDRdZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxsblszMF09''@;'; put 'put ''J20iLyJkIi8ieXknLGxuWzMxXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxsblszMl09J2hoIlx1NjY0MiJtbSJcdTUyMDYiJyxsblszM109J2hoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyIicsbG5bMzRdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGhoIlx1NjY0''@;'; put 'put ''MiJtbSJcdTUyMDYiJyxsblszNV09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxsblszNl09IlskLTQwNF1lL20vZCIsbG5bNTBdPSJbJC00MDRdZS9tL2QiLGxuWzUxXT0nWyQtNDA0XWUiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1''@;'; put 'put ''IicsbG5bNTJdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYiJyxsbls1M109J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaGgiXHU2NjQyIm1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxsbls1NF09J1skLTQwNF1lIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVl''@;'; put 'put ''NSInLGxuWzU1XT0nXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCBoaCJcdTY2NDIibW0iXHU1MjA2IicsbG5bNTZdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGhoIlx1NjY0MiJtbSJcdTUyMDYic3MiXHU3OWQyIicsbG5bNTddPSJbJC00MDRdZS9tL2QiLGxuWzU4XT0nWyQtNDA0XWUi''@;'; put 'put ''XHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1Iic7YnJlYWs7Y2FzZSJ6aC1jbiI6bG5bMjddPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLGxuWzI4XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxsblsyOV09J20iXHU2NzA4ImQiXHU2NWU1IicsbG5bMzBdPSdtIi0iZCItInl5JyxsblszMV09J3l5eXki''@;'; put 'put ''XHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsbG5bMzJdPSdoIlx1NjVmNiJtbSJcdTUyMDYiJyxsblszM109J2giXHU2NWY2Im1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxsblszNF09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaCJcdTY1ZjYibW0iXHU1MjA2IicsbG5bMzVdPSdcdTRlMGFc''@;'; put 'put ''dTUzNDgvXHU0ZTBiXHU1MzQ4IGgiXHU2NWY2Im1tIlx1NTIwNiJzcyJcdTc5ZDIiJyxsblszNl09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsbG5bNTBdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLGxuWzUxXT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxsbls1Ml09J3l5eXkiXHU1ZTc0Im0iXHU2''@;'; put 'put ''NzA4IicsbG5bNTNdPSdtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzU0XT0nbSJcdTY3MDgiZCJcdTY1ZTUiJyxsbls1NV09J1x1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDggaCJcdTY1ZjYibW0iXHU1MjA2IicsbG5bNTZdPSdcdTRlMGFcdTUzNDgvXHU0ZTBiXHU1MzQ4IGgiXHU2NWY2Im1tIlx1''@;'; put 'put ''NTIwNiJzcyJcdTc5ZDIiJyxsbls1N109J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsbG5bNThdPSdtIlx1NjcwOCJkIlx1NjVlNSInO2JyZWFrO2Nhc2UiamEtanAiOmxuWzI3XT0nWyQtNDExXWdlIi4ibSIuImQnLGxuWzI4XT0nWyQtNDExXWdnZ2UiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1''@;'; put 'put ''IicsbG5bMjldPSdbJC00MTFdZ2dnZSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxsblszMF09J20iLyJkIi8ieXknLGxuWzMxXT0neXl5eSJcdTVlNzQibSJcdTY3MDgiZCJcdTY1ZTUiJyxsblszMl09J2giXHU2NjQyIm1tIlx1NTIwNiInLGxuWzMzXT0naCJcdTY2NDIibW0iXHU1MjA2''@;'; put 'put ''InNzIlx1NzlkMiInLGxuWzM0XT0neXl5eSJcdTVlNzQibSJcdTY3MDgiJyxsblszNV09J20iXHU2NzA4ImQiXHU2NWU1IicsbG5bMzZdPSdbJC00MTFdZ2UiLiJtIi4iZCcsbG5bNTBdPSdbJC00MTFdZ2UiLiJtIi4iZCcsbG5bNTFdPSdbJC00MTFdZ2dnZSJcdTVlNzQibSJcdTY3MDgiZCJc''@;'; put 'put ''dTY1ZTUiJyxsbls1Ml09J3l5eXkiXHU1ZTc0Im0iXHU2NzA4IicsbG5bNTNdPSdtIlx1NjcwOCJkIlx1NjVlNSInLGxuWzU0XT0nWyQtNDExXWdnZ2UiXHU1ZTc0Im0iXHU2NzA4ImQiXHU2NWU1IicsbG5bNTVdPSd5eXl5Ilx1NWU3NCJtIlx1NjcwOCInLGxuWzU2XT0nbSJcdTY3MDgiZCJc''@;'; put 'put ''dTY1ZTUiJyxsbls1N109J1skLTQxMV1nZSIuIm0iLiJkJyxsbls1OF09J1skLTQxMV1nZ2dlIlx1NWU3NCJtIlx1NjcwOCJkIlx1NjVlNSInO2JyZWFrO2Nhc2Uia28ta3IiOmxuWzI3XT0neXl5eSJcdTVlNzQiIG1tIlx1NjcwOCIgZGQiXHU2NWU1IicsbG5bMjhdPSJtbS1kZCIsbG5bMjld''@;'; put 'put ''PSJtbS1kZCIsbG5bMzBdPSJtbS1kZC15eSIsbG5bMzFdPSd5eXl5Ilx1YjE0NCIgbW0iXHVjNmQ0IiBkZCJcdWM3N2MiJyxsblszMl09J2giXHVjMmRjIiBtbSJcdWJkODQiJyxsblszM109J2giXHVjMmRjIiBtbSJcdWJkODQiIHNzIlx1Y2QwOCInLGxuWzM0XT0ieXl5eS1tbS1kZCIsbG5b''@;'; put 'put ''MzVdPSJ5eXl5LW1tLWRkIixsblszNl09J3l5eXkiXHU1ZTc0IiBtbSJcdTY3MDgiIGRkIlx1NjVlNSInLGxuWzUwXT0neXl5eSJcdTVlNzQiIG1tIlx1NjcwOCIgZGQiXHU2NWU1IicsbG5bNTFdPSJtbS1kZCIsbG5bNTJdPSJ5eXl5LW1tLWRkIixsbls1M109Inl5eXktbW0tZGQiLGxuWzU0''@;'; put 'put ''XT0ibW0tZGQiLGxuWzU1XT0ieXl5eS1tbS1kZCIsbG5bNTZdPSJ5eXl5LW1tLWRkIixsbls1N109J3l5eXkiXHU1ZTc0IiBtbSJcdTY3MDgiIGRkIlx1NjVlNSInLGxuWzU4XT0ibW0tZGQiO2JyZWFrO2Nhc2UidGgtdGgiOmxuWzU5XT0nInQiMCcsbG5bNjBdPScidCIwLjAwJyxsbls2MV09''@;'; put 'put ''JyJ0IiMsIyMwJyxsbls2Ml09JyJ0IiMsIyMwLjAwJyxsbls2N109InQwJSIsbG5bNjhdPSJ0MC4wMCUiLGxuWzY5XT0idCMgPy8/Iixsbls3MF09InQjID8/Lz8/Iixsbls3MV09J1x1MGUyNyIvIlx1MGUxNCIvIlx1MGUxYlx1MGUxYlx1MGUxYlx1MGUxYicsbG5bNzJdPSdcdTBlMjciLSJc''@;'; put 'put ''dTBlMTRcdTBlMTRcdTBlMTQiLSJcdTBlMWJcdTBlMWInLGxuWzczXT0nXHUwZTI3Ii0iXHUwZTE0XHUwZTE0XHUwZTE0Jyxsbls3NF09J1x1MGUxNFx1MGUxNFx1MGUxNCItIlx1MGUxYlx1MGUxYicsbG5bNzVdPSdcdTBlMGEiOiJcdTBlMTlcdTBlMTknLGxuWzc2XT0nXHUwZTBhIjoiXHUw''@;'; put 'put ''ZTE5XHUwZTE5IjoiXHUwZTE3XHUwZTE3Jyxsbls3N109J1x1MGUyNyIvIlx1MGUxNCIvIlx1MGUxYlx1MGUxYlx1MGUxYlx1MGUxYiBcdTBlMGEiOiJcdTBlMTlcdTBlMTknLGxuWzc4XT0nXHUwZTE5XHUwZTE5IjoiXHUwZTE3XHUwZTE3Jyxsbls3OV09J1tcdTBlMGFdXHUwZTE5XHUwZTE5''@;'; put 'put ''IjoiXHUwZTE3XHUwZTE3Jyxsbls4MF09J1x1MGUxOVx1MGUxOSI6Ilx1MGUxN1x1MGUxNy4wJyxsbls4MV09ImQvbS9iYiJ9fVIuX2dlbmVyYWxfaW50PWZ1bmN0aW9uIFdpKGxuKXtyZXR1cm4gbG4udG9TdHJpbmcoMTApfTt2YXIgYmk9ZnVuY3Rpb24oKXt2YXIgRW49Lyg/OlwuMCp8KFwu''@;'; put 'put ''XGQqWzEtOV0pMCspJC87ZnVuY3Rpb24gem4oSGkpe3JldHVybi0xPT1IaS5pbmRleE9mKCIuIik/SGk6SGkucmVwbGFjZShFbiwiJDEiKX12YXIgU2k9Lyg/OlwuMCp8KFwuXGQqWzEtOV0pMCspW0VlXS8sYXI9LyhFWystXSkoXGQpJC87cmV0dXJuIGZ1bmN0aW9uKG1vKXt2YXIgRGk9ZnVu''@;'; put 'put ''Y3Rpb24gV28oSGkpe3ZhciBEaSxtbz1NYXRoLmZsb29yKE1hdGgubG9nKE1hdGguYWJzKEhpKSkqTWF0aC5MT0cxMEUpO3JldHVybiBEaT1tbz49LTQmJm1vPD0tMT9IaS50b1ByZWNpc2lvbigxMCttbyk6TWF0aC5hYnMobW8pPD05P2Z1bmN0aW9uIENyKEhpKXt2YXIgbW89SGk8MD8xMjox''@;'; put 'put ''MSxEaT16bihIaS50b0ZpeGVkKDEyKSk7cmV0dXJuIERpLmxlbmd0aDw9bW98fChEaT1IaS50b1ByZWNpc2lvbigxMCkpLmxlbmd0aDw9bW8/RGk6SGkudG9FeHBvbmVudGlhbCg1KX0oSGkpOjEwPT09bW8/SGkudG9GaXhlZCgxMCkuc3Vic3RyKDAsMTIpOmZ1bmN0aW9uIFBpKEhpKXt2YXIg''@;'; put 'put ''bW89em4oSGkudG9GaXhlZCgxMSkpO3JldHVybiBtby5sZW5ndGg+KEhpPDA/MTI6MTEpfHwiMCI9PT1tb3x8Ii0wIj09PW1vP0hpLnRvUHJlY2lzaW9uKDYpOm1vfShIaSksem4oZnVuY3Rpb24gT2koSGkpe3JldHVybi0xPT1IaS5pbmRleE9mKCJFIik/SGk6SGkucmVwbGFjZShTaSwiJDFF''@;'; put 'put ''IikucmVwbGFjZShhciwiJDEwJDIiKX0oRGkudG9VcHBlckNhc2UoKSkpfShtbyk7cmV0dXJuIiwiPT09TGkmJiIuIj09PURyP0RpOkRpLnJlcGxhY2UoL1ssLl0vZyxmdW5jdGlvbihhcyl7cmV0dXJuIiwiPT1hcz9MaTpEcn0pfX0oKTtmdW5jdGlvbiB3byhsbixFbil7c3dpdGNoKHR5cGVv''@;'; put 'put ''ZiBsbil7Y2FzZSJzdHJpbmciOnJldHVybiBsbjtjYXNlImJvb2xlYW4iOnJldHVybiBsbj8iVFJVRSI6IkZBTFNFIjtjYXNlIm51bWJlciI6cmV0dXJuKDB8bG4pPT09bG4/bG4udG9TdHJpbmcoMTApOmJpKGxuKTtjYXNlInVuZGVmaW5lZCI6cmV0dXJuIiI7Y2FzZSJvYmplY3QiOmlmKG51''@;'; put 'put ''bGw9PWxuKXJldHVybiIiO2lmKGxuIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gYnUoMTQsSm4obG4sRW4mJkVuLmRhdGUxOTA0KSxFbil9dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCB2YWx1ZSBpbiBHZW5lcmFsIGZvcm1hdDogIitsbil9Ui5fZ2VuZXJhbF9udW09YmksUi5fZ2VuZXJh''@;'; put 'put ''bD13bzt2YXIgYW89Ilx1MGU1MFx1MGU1MVx1MGU1Mlx1MGU1M1x1MGU1NFx1MGU1NVx1MGU1Nlx1MGU1N1x1MGU1OFx1MGU1OSIuc3BsaXQoIiIpO2Z1bmN0aW9uIFJhKGxuLEVuLHpuLFNpKXt2YXIgV28sYXI9IiIsT2k9MCxDcj0wLFBpPXpuLnksSGk9MDtzd2l0Y2gobG4pe2Nhc2UgOTg6''@;'; put 'put ''UGk9em4ueSs1NDM7Y2FzZSAxMjE6c3dpdGNoKEVuLmxlbmd0aCl7Y2FzZSAxOmNhc2UgMjpXbz1QaSUxMDAsSGk9MjticmVhaztkZWZhdWx0OldvPVBpJTFlNCxIaT00fWJyZWFrO2Nhc2UgMTA5OnN3aXRjaChFbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6V289em4ubSxIaT1Fbi5sZW5ndGg7''@;'; put 'put ''YnJlYWs7Y2FzZSAzOnJldHVybiBFdFt6bi5tLTFdWzFdO2Nhc2UgNTpyZXR1cm4gRXRbem4ubS0xXVswXTtkZWZhdWx0OnJldHVybiBFdFt6bi5tLTFdWzJdfWJyZWFrO2Nhc2UgMTAwOnN3aXRjaChFbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6V289em4uZCxIaT1Fbi5sZW5ndGg7YnJlYWs7''@;'; put 'put ''Y2FzZSAzOnJldHVybiB1dFt6bi5xXVswXTtkZWZhdWx0OnJldHVybiB1dFt6bi5xXVsxXX1icmVhaztjYXNlIDEwNDpzd2l0Y2goRW4ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOldvPTErKHpuLkgrMTEpJTEyLEhpPUVuLmxlbmd0aDticmVhaztkZWZhdWx0OnRocm93ImJhZCBob3VyIGZvcm1h''@;'; put 'put ''dDogIitFbn1icmVhaztjYXNlIDcyOnN3aXRjaChFbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6V289em4uSCxIaT1Fbi5sZW5ndGg7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgaG91ciBmb3JtYXQ6ICIrRW59YnJlYWs7Y2FzZSA3Nzpzd2l0Y2goRW4ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOldv''@;'; put 'put ''PXpuLk0sSGk9RW4ubGVuZ3RoO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIG1pbnV0ZSBmb3JtYXQ6ICIrRW59YnJlYWs7Y2FzZSAxMTU6aWYoInMiIT1FbiYmInNzIiE9RW4mJiIuMCIhPUVuJiYiLjAwIiE9RW4mJiIuMDAwIiE9RW4pdGhyb3ciYmFkIHNlY29uZCBmb3JtYXQ6ICIrRW47cmV0''@;'; put 'put ''dXJuIDAhPT16bi51fHwicyIhPUVuJiYic3MiIT1Fbj8oQ3I9U2k+PTI/Mz09PVNpPzFlMzoxMDA6MT09PVNpPzEwOjEsKE9pPU1hdGgucm91bmQoQ3IqKHpuLlMrem4udSkpKT49NjAqQ3ImJihPaT0wKSwicyI9PT1Fbj8wPT09T2k/IjAiOiIiK09pL0NyOihhcj1RKE9pLDIrU2kpLCJzcyI9''@;'; put 'put ''PT1Fbj9hci5zdWJzdHIoMCwyKToiLiIrYXIuc3Vic3RyKDIsRW4ubGVuZ3RoLTEpKSk6USh6bi5TLEVuLmxlbmd0aCk7Y2FzZSA5MDpzd2l0Y2goRW4pe2Nhc2UiW2hdIjpjYXNlIltoaF0iOmNhc2UiW1x1MGUwYV0iOmNhc2UiW1x1MGUwYVx1MGUwYV0iOldvPTI0KnpuLkQrem4uSDticmVh''@;'; put 'put ''aztjYXNlIlttXSI6Y2FzZSJbbW1dIjpjYXNlIltcdTBlMTldIjpjYXNlIltcdTBlMTlcdTBlMTldIjpXbz02MCooMjQqem4uRCt6bi5IKSt6bi5NO2JyZWFrO2Nhc2UiW3NdIjpjYXNlIltzc10iOmNhc2UiW1x1MGUxN10iOmNhc2UiW1x1MGUxN1x1MGUxN10iOldvPTYwKig2MCooMjQqem4u''@;'; put 'put ''RCt6bi5IKSt6bi5NKStNYXRoLnJvdW5kKHpuLlMrem4udSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJiYWQgYWJzdGltZSBmb3JtYXQ6ICIrRW59SGk9Mz09PUVuLmxlbmd0aD8xOjI7YnJlYWs7Y2FzZSAxMDE6V289UGksSGk9MTticmVhaztjYXNlIDM2MjM6V289em4uZCxIaT1Fbi5sZW5ndGg7''@;'; put 'put ''YnJlYWs7Y2FzZSAzNjA0OnN3aXRjaChFbi5sZW5ndGgpe2Nhc2UgMTpjYXNlIDI6V289em4ubSxIaT1Fbi5sZW5ndGg7YnJlYWs7Y2FzZSAzOnJldHVybiBFdFt6bi5tLTFdWzFdO2Nhc2UgNTpyZXR1cm4gRXRbem4ubS0xXVswXTtkZWZhdWx0OnJldHVybiBFdFt6bi5tLTFdWzJdfWJyZWFr''@;'; put 'put ''O2Nhc2UgMzYxMTpzd2l0Y2goUGk9em4ueSs1NDMsRW4ubGVuZ3RoKXtjYXNlIDE6Y2FzZSAyOldvPVBpJTEwMCxIaT0yO2JyZWFrO2RlZmF1bHQ6V289UGklMWU0LEhpPTR9YnJlYWs7Y2FzZSAzNTk0OldvPXpuLkgsSGk9RW4ubGVuZ3RoO2JyZWFrO2Nhc2UgMzYwOTpXbz16bi5NLEhpPUVu''@;'; put 'put ''Lmxlbmd0aDticmVhaztjYXNlIDM2MDc6V289em4uUyxIaT1Fbi5sZW5ndGg7YnJlYWs7ZGVmYXVsdDp0aHJvdyBsbi50b1N0cmluZygxNil9dmFyIG1vPUhpPjA/UShXbyxIaSk6IiI7cmV0dXJuKDkwPT1sbj9Fbi5jaGFyQ29kZUF0KDEpPDM1ODQ6bG48MzU4NCk/bW86bW8ucmVwbGFjZSgv''@;'; put 'put ''WzAtOV0vZyxmdW5jdGlvbihEaSl7cmV0dXJuIGFvWytEaV19KX1mdW5jdGlvbiBQbyhsbil7aWYobG4ubGVuZ3RoPD0zKXJldHVybiBsbjtmb3IodmFyIHpuPWxuLmxlbmd0aCUzLFNpPWxuLnN1YnN0cigwLHpuKTt6biE9bG4ubGVuZ3RoO3puKz0zKVNpKz0oU2kubGVuZ3RoPjA/IiwiOiIi''@;'; put 'put ''KStsbi5zdWJzdHIoem4sMyk7cmV0dXJuIFNpfXZhciBoYT1mdW5jdGlvbigpe3ZhciBFbj0vJS9nO2Z1bmN0aW9uIGFyKHduLFV0KXt2YXIgbm4sTW49d24uaW5kZXhPZigiRSIpLXduLmluZGV4T2YoIi4iKS0xO2lmKHduLm1hdGNoKC9eIyswLjBFXCswJC8pKXtpZigwPT1VdClyZXR1cm4i''@;'; put 'put ''MC4wRSswIjtpZihVdDwwKXJldHVybiItIithcih3biwtVXQpO3ZhciBqbj13bi5pbmRleE9mKCIuIik7LTE9PT1qbiYmKGpuPXduLmluZGV4T2YoIkUiKSk7dmFyIG1yPU1hdGguZmxvb3IoTWF0aC5sb2coVXQpKk1hdGguTE9HMTBFKSVqbjtpZihtcjwwJiYobXIrPWpuKSwtMT09PShubj0o''@;'; put 'put ''VXQvTWF0aC5wb3coMTAsbXIpKS50b1ByZWNpc2lvbihNbisxKyhqbittciklam4pKS5pbmRleE9mKCJlIikpe3ZhciB6cj1NYXRoLmZsb29yKE1hdGgubG9nKFV0KSpNYXRoLkxPRzEwRSk7Zm9yKC0xPT09bm4uaW5kZXhPZigiLiIpP25uPW5uLmNoYXJBdCgwKSsiLiIrbm4uc3Vic3RyKDEp''@;'; put 'put ''KyJFKyIrKHpyLW5uLmxlbmd0aCttcik6bm4rPSJFKyIrKHpyLW1yKTsiMC4iPT09bm4uc3Vic3RyKDAsMik7KW5uPShubj1ubi5jaGFyQXQoMCkrbm4uc3Vic3RyKDIsam4pKyIuIitubi5zdWJzdHIoMitqbikpLnJlcGxhY2UoL14wKyhbMS05XSkvLCIkMSIpLnJlcGxhY2UoL14wK1wuLywi''@;'; put 'put ''MC4iKTtubj1ubi5yZXBsYWNlKC9cKy0vLCItIil9bm49bm4ucmVwbGFjZSgvXihbKy1dPykoXGQqKVwuKFxkKilbRWVdLyxmdW5jdGlvbihvaSx0aSxKaSxaaSl7cmV0dXJuIHRpK0ppK1ppLnN1YnN0cigwLChqbittciklam4pKyIuIitaaS5zdWJzdHIobXIpKyJFIn0pfWVsc2Ugbm49VXQu''@;'; put 'put ''dG9FeHBvbmVudGlhbChNbik7cmV0dXJuIHduLm1hdGNoKC9FXCswMCQvKSYmbm4ubWF0Y2goL2VbKy1dXGQkLykmJihubj1ubi5zdWJzdHIoMCxubi5sZW5ndGgtMSkrIjAiK25uLmNoYXJBdChubi5sZW5ndGgtMSkpLHduLm1hdGNoKC9FXC0vKSYmbm4ubWF0Y2goL2VcKy8pJiYobm49bm4u''@;'; put 'put ''cmVwbGFjZSgvZVwrLywiZSIpKSxubi5yZXBsYWNlKCJlIiwiRSIpfXZhciBPaT0vIyAoXD8rKSggPylcLyggPykoXGQrKS8sV289L14jKjAqXC4oWzAjXSspLyxIaT0vXCkuKlswI10vLG1vPS9cKCMjI1wpICMjI1xcPy0jIyMjLztmdW5jdGlvbiBEaSh3bil7Zm9yKHZhciBubixVdD0iIixN''@;'; put 'put ''bj0wO01uIT13bi5sZW5ndGg7KytNbilzd2l0Y2gobm49d24uY2hhckNvZGVBdChNbikpe2Nhc2UgMzU6YnJlYWs7Y2FzZSA2MzpVdCs9IiAiO2JyZWFrO2Nhc2UgNDg6VXQrPSIwIjticmVhaztkZWZhdWx0OlV0Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKG5uKX1yZXR1cm4gVXR9ZnVuY3Rpb24g''@;'; put 'put ''YXMod24sVXQpe3ZhciBubj1NYXRoLnBvdygxMCxVdCk7cmV0dXJuIiIrTWF0aC5yb3VuZCh3bipubikvbm59ZnVuY3Rpb24gV2Eod24sVXQpe2lmKFV0PjExKXJldHVybiBXYSh3biwxMSkqTWF0aC5wb3coMTAsVXQtMTEpO3ZhciBubj13bi1NYXRoLmZsb29yKHduKSxNbj1NYXRoLnBvdygx''@;'; put 'put ''MCxVdCk7cmV0dXJuIFV0PCgiIitNYXRoLnJvdW5kKG5uKk1uKSkubGVuZ3RoPzA6TWF0aC5yb3VuZChubipNbil9ZnVuY3Rpb24gTWwod24sVXQsbm4pe2lmKDQwPT09d24uY2hhckNvZGVBdCgwKSYmIVV0Lm1hdGNoKEhpKSl7dmFyIE1uPVV0LnJlcGxhY2UoL1woICovLCIiKS5yZXBsYWNl''@;'; put 'put ''KC8gXCkvLCIiKS5yZXBsYWNlKC9cKS8sIiIpO3JldHVybiBubj49MD9NbCgibiIsTW4sbm4pOiIoIitNbCgibiIsTW4sLW5uKSsiKSJ9aWYoNDQ9PT1VdC5jaGFyQ29kZUF0KFV0Lmxlbmd0aC0xKSlyZXR1cm4gZnVuY3Rpb24gU2kod24sVXQsbm4pe2Zvcih2YXIgTW49VXQubGVuZ3RoLTE7''@;'; put 'put ''NDQ9PT1VdC5jaGFyQ29kZUF0KE1uLTEpOyktLU1uO3JldHVybiBoYSh3bixVdC5zdWJzdHIoMCxNbiksbm4vTWF0aC5wb3coMTAsMyooVXQubGVuZ3RoLU1uKSkpfSh3bixVdCxubik7aWYoLTEhPT1VdC5pbmRleE9mKCIlIikpcmV0dXJuIGZ1bmN0aW9uIHpuKHduLFV0LG5uKXt2YXIgTW49''@;'; put 'put ''VXQucmVwbGFjZShFbiwiIiksam49VXQubGVuZ3RoLU1uLmxlbmd0aDtyZXR1cm4gaGEod24sTW4sbm4qTWF0aC5wb3coMTAsMipqbikpK0coIiUiLGpuKX0od24sVXQsbm4pO2lmKC0xIT09VXQuaW5kZXhPZigiRSIpKXJldHVybiBhcihVdCxubik7aWYoMzY9PT1VdC5jaGFyQ29kZUF0KDAp''@;'; put 'put ''KXJldHVybiIkIitNbCh3bixVdC5zdWJzdHIoIiAiPT1VdC5jaGFyQXQoMSk/MjoxKSxubik7dmFyIGpuLG1yLHpyLG9pLHRpPU1hdGguYWJzKG5uKSxKaT1ubjwwPyItIjoiIjtpZihVdC5tYXRjaCgvXjAwKyQvKSlyZXR1cm4gSmkrTmUodGksVXQubGVuZ3RoKTtpZihVdC5tYXRjaCgvXlsj''@;'; put 'put ''P10rJC8pKXJldHVybiIwIj09PShqbj1OZShubiwwKSkmJihqbj0iIiksam4ubGVuZ3RoPlV0Lmxlbmd0aD9qbjpEaShVdC5zdWJzdHIoMCxVdC5sZW5ndGgtam4ubGVuZ3RoKSkram47aWYobXI9VXQubWF0Y2goT2kpKXJldHVybiBmdW5jdGlvbiBDcih3bixVdCxubil7dmFyIE1uPXBhcnNl''@;'; put 'put ''SW50KHduWzRdLDEwKSxqbj1NYXRoLnJvdW5kKFV0Kk1uKSxtcj1NYXRoLmZsb29yKGpuL01uKSx6cj1qbi1tcipNbixvaT1NbjtyZXR1cm4gbm4rKDA9PT1tcj8iIjoiIittcikrIiAiKygwPT09enI/RygiICIsd25bMV0ubGVuZ3RoKzErd25bNF0ubGVuZ3RoKTphZSh6cix3blsxXS5sZW5n''@;'; put 'put ''dGgpK3duWzJdKyIvIit3blszXStRKG9pLHduWzRdLmxlbmd0aCkpfShtcix0aSxKaSk7aWYoVXQubWF0Y2goL14jKzArJC8pKXJldHVybiBKaStOZSh0aSxVdC5sZW5ndGgtVXQuaW5kZXhPZigiMCIpKTtpZihtcj1VdC5tYXRjaChXbykpcmV0dXJuIGpuPWFzKG5uLG1yWzFdLmxlbmd0aCku''@;'; put 'put ''cmVwbGFjZSgvXihbXlwuXSspJC8sIiQxLiIrRGkobXJbMV0pKS5yZXBsYWNlKC9cLiQvLCIuIitEaShtclsxXSkpLnJlcGxhY2UoL1wuKFxkKikkLyxmdW5jdGlvbihUYSxNcyl7cmV0dXJuIi4iK01zK0coIjAiLERpKG1yWzFdKS5sZW5ndGgtTXMubGVuZ3RoKX0pLC0xIT09VXQuaW5kZXhP''@;'; put 'put ''ZigiMC4iKT9qbjpqbi5yZXBsYWNlKC9eMFwuLywiLiIpO2lmKFV0PVV0LnJlcGxhY2UoL14jKyhbMC5dKS8sIiQxIiksbXI9VXQubWF0Y2goL14oMCopXC4oIyopJC8pKXJldHVybiBKaSthcyh0aSxtclsyXS5sZW5ndGgpLnJlcGxhY2UoL1wuKFxkKlsxLTldKTAqJC8sIi4kMSIpLnJlcGxh''@;'; put 'put ''Y2UoL14oLT9cZCopJC8sIiQxLiIpLnJlcGxhY2UoL14wXC4vLG1yWzFdLmxlbmd0aD8iMC4iOiIuIik7aWYobXI9VXQubWF0Y2goL14jezEsM30sIyMwKFwuPykkLykpcmV0dXJuIEppK1BvKE5lKHRpLDApKTtpZihtcj1VdC5tYXRjaCgvXiMsIyMwXC4oWyMwXSowKSQvKSlyZXR1cm4gbm48''@;'; put 'put ''MD8iLSIrTWwod24sVXQsLW5uKTpQbygiIisoTWF0aC5mbG9vcihubikrZnVuY3Rpb24gU2wod24sVXQpe3JldHVybiBVdDwoIiIrTWF0aC5yb3VuZCgod24tTWF0aC5mbG9vcih3bikpKk1hdGgucG93KDEwLFV0KSkpLmxlbmd0aD8xOjB9KG5uLG1yWzFdLmxlbmd0aCkpKSsiLiIrUShXYShu''@;'; put 'put ''bixtclsxXS5sZW5ndGgpLG1yWzFdLmxlbmd0aCk7aWYobXI9VXQubWF0Y2goL14jLCMqLCMwLykpcmV0dXJuIE1sKHduLFV0LnJlcGxhY2UoL14jLCMqLC8sIiIpLG5uKTtpZihtcj1VdC5tYXRjaCgvXihbMCNdKykoXFw/LShbMCNdKykpKyQvKSlyZXR1cm4gam49ayhNbCh3bixVdC5yZXBs''@;'; put 'put ''YWNlKC9bXFwtXS9nLCIiKSxubikpLHpyPTAsayhrKFV0LnJlcGxhY2UoL1xcL2csIiIpKS5yZXBsYWNlKC9bMCNdL2csZnVuY3Rpb24oVGEpe3JldHVybiB6cjxqbi5sZW5ndGg/am4uY2hhckF0KHpyKyspOiIwIj09PVRhPyIwIjoiIn0pKTtpZihVdC5tYXRjaChtbykpcmV0dXJuIigiKyhq''@;'; put 'put ''bj1NbCh3biwiIyMjIyMjIyMjIyIsbm4pKS5zdWJzdHIoMCwzKSsiKSAiK2puLnN1YnN0cigzLDMpKyItIitqbi5zdWJzdHIoNik7dmFyIFppPSIiO2lmKG1yPVV0Lm1hdGNoKC9eKFsjMD9dKykoID8pXC8oID8pKFsjMD9dKykvKSlyZXR1cm4genI9TWF0aC5taW4obXJbNF0ubGVuZ3RoLDcp''@;'; put 'put ''LG9pPUt0KHRpLE1hdGgucG93KDEwLHpyKS0xLCExKSxqbj0iIitKaSwiICI9PShaaT1oYSgibiIsbXJbMV0sb2lbMV0pKS5jaGFyQXQoWmkubGVuZ3RoLTEpJiYoWmk9Wmkuc3Vic3RyKDAsWmkubGVuZ3RoLTEpKyIwIiksam4rPVppK21yWzJdKyIvIittclszXSwoWmk9Z2Uob2lbMl0senIp''@;'; put 'put ''KS5sZW5ndGg8bXJbNF0ubGVuZ3RoJiYoWmk9RGkobXJbNF0uc3Vic3RyKG1yWzRdLmxlbmd0aC1aaS5sZW5ndGgpKStaaSksam4rPVppO2lmKG1yPVV0Lm1hdGNoKC9eIyAoWyMwP10rKSggPylcLyggPykoWyMwP10rKS8pKXJldHVybiB6cj1NYXRoLm1pbihNYXRoLm1heChtclsxXS5sZW5n''@;'; put 'put ''dGgsbXJbNF0ubGVuZ3RoKSw3KSxKaSsoKG9pPUt0KHRpLE1hdGgucG93KDEwLHpyKS0xLCEwKSlbMF18fChvaVsxXT8iIjoiMCIpKSsiICIrKG9pWzFdP2FlKG9pWzFdLHpyKSttclsyXSsiLyIrbXJbM10rZ2Uob2lbMl0senIpOkcoIiAiLDIqenIrMSttclsyXS5sZW5ndGgrbXJbM10ubGVu''@;'; put 'put ''Z3RoKSk7aWYobXI9VXQubWF0Y2goL15bIzA/XSskLykpcmV0dXJuIGpuPU5lKG5uLDApLFV0Lmxlbmd0aDw9am4ubGVuZ3RoP2puOkRpKFV0LnN1YnN0cigwLFV0Lmxlbmd0aC1qbi5sZW5ndGgpKStqbjtpZihtcj1VdC5tYXRjaCgvXihbIzA/XSspXC4oWyMwXSspJC8pKXtqbj0iIitubi50''@;'; put 'put ''b0ZpeGVkKE1hdGgubWluKG1yWzJdLmxlbmd0aCwxMCkpLnJlcGxhY2UoLyhbXjBdKTArJC8sIiQxIiksenI9am4uaW5kZXhPZigiLiIpO3ZhciByYT1VdC5pbmRleE9mKCIuIiktenIsem89VXQubGVuZ3RoLWpuLmxlbmd0aC1yYTtyZXR1cm4gRGkoVXQuc3Vic3RyKDAscmEpK2puK1V0LnN1''@;'; put 'put ''YnN0cihVdC5sZW5ndGgtem8pKX1pZihtcj1VdC5tYXRjaCgvXjAwLDAwMFwuKFsjMF0qMCkkLykpcmV0dXJuIHpyPVdhKG5uLG1yWzFdLmxlbmd0aCksbm48MD8iLSIrTWwod24sVXQsLW5uKTpQbyhmdW5jdGlvbiB5dSh3bil7cmV0dXJuIHduPDIxNDc0ODM2NDcmJnduPi0yMTQ3NDgzNjQ4''@;'; put 'put ''PyIiKyh3bj49MD8wfHduOnduLTF8MCk6IiIrTWF0aC5mbG9vcih3bil9KG5uKSkucmVwbGFjZSgvXlxkLFxkezN9JC8sIjAkJiIpLnJlcGxhY2UoL15cZCokLyxmdW5jdGlvbihUYSl7cmV0dXJuIjAwLCIrKFRhLmxlbmd0aDwzP1EoMCwzLVRhLmxlbmd0aCk6IiIpK1RhfSkrIi4iK1EoenIs''@;'; put 'put ''bXJbMV0ubGVuZ3RoKTtzd2l0Y2goVXQpe2Nhc2UiIyMjLCMjMC4wMCI6cmV0dXJuIE1sKHduLCIjLCMjMC4wMCIsbm4pO2Nhc2UiIyMjLCMjIyI6Y2FzZSIjIywjIyMiOmNhc2UiIywjIyMiOnZhciBibz1QbyhOZSh0aSwwKSk7cmV0dXJuIjAiIT09Ym8/SmkrYm86IiI7Y2FzZSIjIyMsIyMj''@;'; put 'put ''LjAwIjpyZXR1cm4gTWwod24sIiMjIywjIzAuMDAiLG5uKS5yZXBsYWNlKC9eMFwuLywiLiIpO2Nhc2UiIywjIyMuMDAiOnJldHVybiBNbCh3biwiIywjIzAuMDAiLG5uKS5yZXBsYWNlKC9eMFwuLywiLiIpfXRocm93IG5ldyBFcnJvcigidW5zdXBwb3J0ZWQgZm9ybWF0IHwiK1V0KyJ8Iil9''@;'; put 'put ''ZnVuY3Rpb24gbW4od24sVXQpe3ZhciBubixNbj13bi5pbmRleE9mKCJFIiktd24uaW5kZXhPZigiLiIpLTE7aWYod24ubWF0Y2goL14jKzAuMEVcKzAkLykpe2lmKDA9PVV0KXJldHVybiIwLjBFKzAiO2lmKFV0PDApcmV0dXJuIi0iK21uKHduLC1VdCk7dmFyIGpuPXduLmluZGV4T2YoIi4i''@;'; put 'put ''KTstMT09PWpuJiYoam49d24uaW5kZXhPZigiRSIpKTt2YXIgbXI9TWF0aC5mbG9vcihNYXRoLmxvZyhVdCkqTWF0aC5MT0cxMEUpJWpuO2lmKG1yPDAmJihtcis9am4pLCEobm49KFV0L01hdGgucG93KDEwLG1yKSkudG9QcmVjaXNpb24oTW4rMSsoam4rbXIpJWpuKSkubWF0Y2goL1tFZV0v''@;'; put 'put ''KSl7dmFyIHpyPU1hdGguZmxvb3IoTWF0aC5sb2coVXQpKk1hdGguTE9HMTBFKTstMT09PW5uLmluZGV4T2YoIi4iKT9ubj1ubi5jaGFyQXQoMCkrIi4iK25uLnN1YnN0cigxKSsiRSsiKyh6ci1ubi5sZW5ndGgrbXIpOm5uKz0iRSsiKyh6ci1tciksbm49bm4ucmVwbGFjZSgvXCstLywiLSIp''@;'; put 'put ''fW5uPW5uLnJlcGxhY2UoL14oWystXT8pKFxkKilcLihcZCopW0VlXS8sZnVuY3Rpb24ob2ksdGksSmksWmkpe3JldHVybiB0aStKaStaaS5zdWJzdHIoMCwoam4rbXIpJWpuKSsiLiIrWmkuc3Vic3RyKG1yKSsiRSJ9KX1lbHNlIG5uPVV0LnRvRXhwb25lbnRpYWwoTW4pO3JldHVybiB3bi5t''@;'; put 'put ''YXRjaCgvRVwrMDAkLykmJm5uLm1hdGNoKC9lWystXVxkJC8pJiYobm49bm4uc3Vic3RyKDAsbm4ubGVuZ3RoLTEpKyIwIitubi5jaGFyQXQobm4ubGVuZ3RoLTEpKSx3bi5tYXRjaCgvRVwtLykmJm5uLm1hdGNoKC9lXCsvKSYmKG5uPW5uLnJlcGxhY2UoL2VcKy8sImUiKSksbm4ucmVwbGFj''@;'; put 'put ''ZSgiZSIsIkUiKX1mdW5jdGlvbiBEbih3bixVdCxubil7aWYoNDA9PT13bi5jaGFyQ29kZUF0KDApJiYhVXQubWF0Y2goSGkpKXt2YXIgTW49VXQucmVwbGFjZSgvXCggKi8sIiIpLnJlcGxhY2UoLyBcKS8sIiIpLnJlcGxhY2UoL1wpLywiIik7cmV0dXJuIG5uPj0wP0RuKCJuIixNbixubik6''@;'; put 'put ''IigiK0RuKCJuIixNbiwtbm4pKyIpIn1pZig0ND09PVV0LmNoYXJDb2RlQXQoVXQubGVuZ3RoLTEpKXJldHVybiBmdW5jdGlvbiBEZih3bixVdCxubil7Zm9yKHZhciBNbj1VdC5sZW5ndGgtMTs0ND09PVV0LmNoYXJDb2RlQXQoTW4tMSk7KS0tTW47cmV0dXJuIGhhKHduLFV0LnN1YnN0cigw''@;'; put 'put ''LE1uKSxubi9NYXRoLnBvdygxMCwzKihVdC5sZW5ndGgtTW4pKSl9KHduLFV0LG5uKTtpZigtMSE9PVV0LmluZGV4T2YoIiUiKSlyZXR1cm4gZnVuY3Rpb24geWQod24sVXQsbm4pe3ZhciBNbj1VdC5yZXBsYWNlKEVuLCIiKSxqbj1VdC5sZW5ndGgtTW4ubGVuZ3RoO3JldHVybiBoYSh3bixN''@;'; put 'put ''bixubipNYXRoLnBvdygxMCwyKmpuKSkrRygiJSIsam4pfSh3bixVdCxubik7aWYoLTEhPT1VdC5pbmRleE9mKCJFIikpcmV0dXJuIG1uKFV0LG5uKTtpZigzNj09PVV0LmNoYXJDb2RlQXQoMCkpcmV0dXJuIiQiK0RuKHduLFV0LnN1YnN0cigiICI9PVV0LmNoYXJBdCgxKT8yOjEpLG5uKTt2''@;'; put 'put ''YXIgam4sbXIsenIsb2ksdGk9TWF0aC5hYnMobm4pLEppPW5uPDA/Ii0iOiIiO2lmKFV0Lm1hdGNoKC9eMDArJC8pKXJldHVybiBKaStRKHRpLFV0Lmxlbmd0aCk7aWYoVXQubWF0Y2goL15bIz9dKyQvKSlyZXR1cm4gam49IiIrbm4sMD09PW5uJiYoam49IiIpLGpuLmxlbmd0aD5VdC5sZW5n''@;'; put 'put ''dGg/am46RGkoVXQuc3Vic3RyKDAsVXQubGVuZ3RoLWpuLmxlbmd0aCkpK2puO2lmKG1yPVV0Lm1hdGNoKE9pKSlyZXR1cm4gZnVuY3Rpb24gUGkod24sVXQsbm4pe3JldHVybiBubisoMD09PVV0PyIiOiIiK1V0KStHKCIgIix3blsxXS5sZW5ndGgrMit3bls0XS5sZW5ndGgpfShtcix0aSxK''@;'; put 'put ''aSk7aWYoVXQubWF0Y2goL14jKzArJC8pKXJldHVybiBKaStRKHRpLFV0Lmxlbmd0aC1VdC5pbmRleE9mKCIwIikpO2lmKG1yPVV0Lm1hdGNoKFdvKSlyZXR1cm4gam49KGpuPSgiIitubikucmVwbGFjZSgvXihbXlwuXSspJC8sIiQxLiIrRGkobXJbMV0pKS5yZXBsYWNlKC9cLiQvLCIuIitE''@;'; put 'put ''aShtclsxXSkpKS5yZXBsYWNlKC9cLihcZCopJC8sZnVuY3Rpb24oVGEsTXMpe3JldHVybiIuIitNcytHKCIwIixEaShtclsxXSkubGVuZ3RoLU1zLmxlbmd0aCl9KSwtMSE9PVV0LmluZGV4T2YoIjAuIik/am46am4ucmVwbGFjZSgvXjBcLi8sIi4iKTtpZihVdD1VdC5yZXBsYWNlKC9eIyso''@;'; put 'put ''WzAuXSkvLCIkMSIpLG1yPVV0Lm1hdGNoKC9eKDAqKVwuKCMqKSQvKSlyZXR1cm4gSmkrKCIiK3RpKS5yZXBsYWNlKC9cLihcZCpbMS05XSkwKiQvLCIuJDEiKS5yZXBsYWNlKC9eKC0/XGQqKSQvLCIkMS4iKS5yZXBsYWNlKC9eMFwuLyxtclsxXS5sZW5ndGg/IjAuIjoiLiIpO2lmKG1yPVV0''@;'; put 'put ''Lm1hdGNoKC9eI3sxLDN9LCMjMChcLj8pJC8pKXJldHVybiBKaStQbygiIit0aSk7aWYobXI9VXQubWF0Y2goL14jLCMjMFwuKFsjMF0qMCkkLykpcmV0dXJuIG5uPDA/Ii0iK0RuKHduLFV0LC1ubik6UG8oIiIrbm4pKyIuIitHKCIwIixtclsxXS5sZW5ndGgpO2lmKG1yPVV0Lm1hdGNoKC9e''@;'; put 'put ''IywjKiwjMC8pKXJldHVybiBEbih3bixVdC5yZXBsYWNlKC9eIywjKiwvLCIiKSxubik7aWYobXI9VXQubWF0Y2goL14oWzAjXSspKFxcPy0oWzAjXSspKSskLykpcmV0dXJuIGpuPWsoRG4od24sVXQucmVwbGFjZSgvW1xcLV0vZywiIiksbm4pKSx6cj0wLGsoayhVdC5yZXBsYWNlKC9cXC9n''@;'; put 'put ''LCIiKSkucmVwbGFjZSgvWzAjXS9nLGZ1bmN0aW9uKFRhKXtyZXR1cm4genI8am4ubGVuZ3RoP2puLmNoYXJBdCh6cisrKToiMCI9PT1UYT8iMCI6IiJ9KSk7aWYoVXQubWF0Y2gobW8pKXJldHVybiIoIisoam49RG4od24sIiMjIyMjIyMjIyMiLG5uKSkuc3Vic3RyKDAsMykrIikgIitqbi5z''@;'; put 'put ''dWJzdHIoMywzKSsiLSIram4uc3Vic3RyKDYpO3ZhciBaaT0iIjtpZihtcj1VdC5tYXRjaCgvXihbIzA/XSspKCA/KVwvKCA/KShbIzA/XSspLykpcmV0dXJuIHpyPU1hdGgubWluKG1yWzRdLmxlbmd0aCw3KSxvaT1LdCh0aSxNYXRoLnBvdygxMCx6ciktMSwhMSksam49IiIrSmksIiAiPT0o''@;'; put 'put ''Wmk9aGEoIm4iLG1yWzFdLG9pWzFdKSkuY2hhckF0KFppLmxlbmd0aC0xKSYmKFppPVppLnN1YnN0cigwLFppLmxlbmd0aC0xKSsiMCIpLGpuKz1aaSttclsyXSsiLyIrbXJbM10sKFppPWdlKG9pWzJdLHpyKSkubGVuZ3RoPG1yWzRdLmxlbmd0aCYmKFppPURpKG1yWzRdLnN1YnN0cihtcls0''@;'; put 'put ''XS5sZW5ndGgtWmkubGVuZ3RoKSkrWmkpLGpuKz1aaTtpZihtcj1VdC5tYXRjaCgvXiMgKFsjMD9dKykoID8pXC8oID8pKFsjMD9dKykvKSlyZXR1cm4genI9TWF0aC5taW4oTWF0aC5tYXgobXJbMV0ubGVuZ3RoLG1yWzRdLmxlbmd0aCksNyksSmkrKChvaT1LdCh0aSxNYXRoLnBvdygxMCx6''@;'; put 'put ''ciktMSwhMCkpWzBdfHwob2lbMV0/IiI6IjAiKSkrIiAiKyhvaVsxXT9hZShvaVsxXSx6cikrbXJbMl0rIi8iK21yWzNdK2dlKG9pWzJdLHpyKTpHKCIgIiwyKnpyKzErbXJbMl0ubGVuZ3RoK21yWzNdLmxlbmd0aCkpO2lmKG1yPVV0Lm1hdGNoKC9eWyMwP10rJC8pKXJldHVybiBVdC5sZW5n''@;'; put 'put ''dGg8PShqbj0iIitubikubGVuZ3RoP2puOkRpKFV0LnN1YnN0cigwLFV0Lmxlbmd0aC1qbi5sZW5ndGgpKStqbjtpZihtcj1VdC5tYXRjaCgvXihbIzBdKylcLihbIzBdKykkLykpe2puPSIiK25uLnRvRml4ZWQoTWF0aC5taW4obXJbMl0ubGVuZ3RoLDEwKSkucmVwbGFjZSgvKFteMF0pMCsk''@;'; put 'put ''LywiJDEiKSx6cj1qbi5pbmRleE9mKCIuIik7dmFyIHJhPVV0LmluZGV4T2YoIi4iKS16cix6bz1VdC5sZW5ndGgtam4ubGVuZ3RoLXJhO3JldHVybiBEaShVdC5zdWJzdHIoMCxyYSkram4rVXQuc3Vic3RyKFV0Lmxlbmd0aC16bykpfWlmKG1yPVV0Lm1hdGNoKC9eMDAsMDAwXC4oWyMwXSow''@;'; put 'put ''KSQvKSlyZXR1cm4gbm48MD8iLSIrRG4od24sVXQsLW5uKTpQbygiIitubikucmVwbGFjZSgvXlxkLFxkezN9JC8sIjAkJiIpLnJlcGxhY2UoL15cZCokLyxmdW5jdGlvbihUYSl7cmV0dXJuIjAwLCIrKFRhLmxlbmd0aDwzP1EoMCwzLVRhLmxlbmd0aCk6IiIpK1RhfSkrIi4iK1EoMCxtclsx''@;'; put 'put ''XS5sZW5ndGgpO3ZhciBibz1QbygiIit0aSk7c3dpdGNoKFV0KXtjYXNlIiMjIywjIyMiOmNhc2UiIyMsIyMjIjpjYXNlIiMsIyMjIjpyZXR1cm4iMCIhPT1ibz9KaStibzoiIjtjYXNlIiMsIzAwIjpyZXR1cm4iMDAiIT09KGJvPVEoYm8sMikpP0ppK2JvOiIiO2RlZmF1bHQ6aWYoVXQubWF0''@;'; put 'put ''Y2goL1wuWzAjP10qJC8pKXJldHVybiBEbih3bixVdC5zbGljZSgwLFV0Lmxhc3RJbmRleE9mKCIuIikpLG5uKStEaShVdC5zbGljZShVdC5sYXN0SW5kZXhPZigiLiIpKSl9dGhyb3cgbmV3IEVycm9yKCJ1bnN1cHBvcnRlZCBmb3JtYXQgfCIrVXQrInwiKX1yZXR1cm4gZnVuY3Rpb24oVXQs''@;'; put 'put ''bm4sTW4pe3JldHVybiIwLDAiPT1ubiYmKG5uPSIjLCMwMCIpLCgwfE1uKT09PU1uP0RuKFV0LG5uLE1uKTpNbChVdCxubixNbil9fSgpO2Z1bmN0aW9uIEpvKGxuKXtmb3IodmFyIEVuPVtdLHpuPSExLFNpPTAsYXI9MDtTaTxsbi5sZW5ndGg7KytTaSlzd2l0Y2gobG4uY2hhckNvZGVBdChT''@;'; put 'put ''aSkpe2Nhc2UgMzQ6em49IXpuO2JyZWFrO2Nhc2UgOTU6Y2FzZSA0MjpjYXNlIDkyOisrU2k7YnJlYWs7Y2FzZSA1OTpFbltFbi5sZW5ndGhdPWxuLnN1YnN0cihhcixTaS1hciksYXI9U2krMX1pZihFbltFbi5sZW5ndGhdPWxuLnN1YnN0cihhciksITA9PT16bil0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''IkZvcm1hdCB8IitsbisifCB1bnRlcm1pbmF0ZWQgc3RyaW5nICIpO3JldHVybiBFbn1SLl9zcGxpdD1Kbzt2YXIgamk9L1xbW0hoTW1Tc1x1MEUwQVx1MEUxOVx1MEUxN10qXF0vO2Z1bmN0aW9uIElzKGxuKXtmb3IodmFyIEVuPTAsem49IiIsU2k9IiI7RW48bG4ubGVuZ3RoOylzd2l0Y2go''@;'; put 'put ''em49bG4uY2hhckF0KEVuKSl7Y2FzZSJHIjpZZShsbixFbikmJihFbis9NiksRW4rKzticmVhaztjYXNlJyInOmZvcig7MzQhPT1sbi5jaGFyQ29kZUF0KCsrRW4pJiZFbjxsbi5sZW5ndGg7KTsrK0VuO2JyZWFrO2Nhc2UiXFwiOmNhc2UiXyI6RW4rPTI7YnJlYWs7Y2FzZSJAIjorK0VuO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiQiI6Y2FzZSJiIjppZigiMSI9PT1sbi5jaGFyQXQoRW4rMSl8fCIyIj09PWxuLmNoYXJBdChFbisxKSlyZXR1cm4hMDtjYXNlIk0iOmNhc2UiRCI6Y2FzZSJZIjpjYXNlIkgiOmNhc2UiUyI6Y2FzZSJFIjpjYXNlIm0iOmNhc2UiZCI6Y2FzZSJ5IjpjYXNlImgiOmNhc2UicyI6''@;'; put 'put ''Y2FzZSJlIjpjYXNlImciOnJldHVybiEwO2Nhc2UiQSI6Y2FzZSJhIjpjYXNlIlx1NGUwYSI6aWYoIkEvUCI9PT1sbi5zdWJzdHIoRW4sMykudG9VcHBlckNhc2UoKXx8IkFNL1BNIj09PWxuLnN1YnN0cihFbiw1KS50b1VwcGVyQ2FzZSgpfHwiXHU0ZTBhXHU1MzQ4L1x1NGUwYlx1NTM0OCI9''@;'; put 'put ''PT1sbi5zdWJzdHIoRW4sNSkudG9VcHBlckNhc2UoKSlyZXR1cm4hMDsrK0VuO2JyZWFrO2Nhc2UiWyI6Zm9yKFNpPXpuOyJdIiE9PWxuLmNoYXJBdChFbisrKSYmRW48bG4ubGVuZ3RoOylTaSs9bG4uY2hhckF0KEVuKTtpZihTaS5tYXRjaChqaSkpcmV0dXJuITA7YnJlYWs7Y2FzZSIuIjpj''@;'; put 'put ''YXNlIjAiOmNhc2UiIyI6Zm9yKDtFbjxsbi5sZW5ndGgmJigiMCM/LixFKy0lIi5pbmRleE9mKHpuPWxuLmNoYXJBdCgrK0VuKSk+LTF8fCJcXCI9PXpuJiYiLSI9PWxuLmNoYXJBdChFbisxKSYmIjAjIi5pbmRleE9mKGxuLmNoYXJBdChFbisyKSk+LTEpOyk7YnJlYWs7Y2FzZSI/Ijpmb3Io''@;'; put 'put ''O2xuLmNoYXJBdCgrK0VuKT09PXpuOyk7YnJlYWs7Y2FzZSIqIjorK0VuLCgiICI9PWxuLmNoYXJBdChFbil8fCIqIj09bG4uY2hhckF0KEVuKSkmJisrRW47YnJlYWs7Y2FzZSIoIjpjYXNlIikiOisrRW47YnJlYWs7Y2FzZSIxIjpjYXNlIjIiOmNhc2UiMyI6Y2FzZSI0IjpjYXNlIjUiOmNh''@;'; put 'put ''c2UiNiI6Y2FzZSI3IjpjYXNlIjgiOmNhc2UiOSI6Zm9yKDtFbjxsbi5sZW5ndGgmJiIwMTIzNDU2Nzg5Ii5pbmRleE9mKGxuLmNoYXJBdCgrK0VuKSk+LTE7KTticmVhaztkZWZhdWx0OisrRW59cmV0dXJuITF9ZnVuY3Rpb24gRm4obG4sRW4sem4sU2kpe2Zvcih2YXIgSGksbW8sRGksYXI9''@;'; put 'put ''W10sT2k9IiIsQ3I9MCxQaT0iIixXbz0idCIsYXM9IkgiO0NyPGxuLmxlbmd0aDspc3dpdGNoKFBpPWxuLmNoYXJBdChDcikpe2Nhc2UiRyI6aWYoIVllKGxuLENyKSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCBjaGFyYWN0ZXIgIitQaSsiIGluICIrbG4pO2FyW2FyLmxlbmd0aF09''@;'; put 'put ''e3Q6IkciLHY6IkdlbmVyYWwifSxDcis9NzticmVhaztjYXNlJyInOmZvcihPaT0iIjszNCE9PShEaT1sbi5jaGFyQ29kZUF0KCsrQ3IpKSYmQ3I8bG4ubGVuZ3RoOylPaSs9U3RyaW5nLmZyb21DaGFyQ29kZShEaSk7YXJbYXIubGVuZ3RoXT17dDoidCIsdjpPaX0sKytDcjticmVhaztjYXNl''@;'; put 'put ''IlxcIjp2YXIgV2E9bG4uY2hhckF0KCsrQ3IpO2FyW2FyLmxlbmd0aF09e3Q6IigiPT09V2F8fCIpIj09PVdhP1dhOiJ0Iix2OldhfSwrK0NyO2JyZWFrO2Nhc2UiXyI6YXJbYXIubGVuZ3RoXT17dDoidCIsdjoiICJ9LENyKz0yO2JyZWFrO2Nhc2UiQCI6YXJbYXIubGVuZ3RoXT17dDoiVCIs''@;'; put 'put ''djpFbn0sKytDcjticmVhaztjYXNlIkIiOmNhc2UiYiI6aWYoIjEiPT09bG4uY2hhckF0KENyKzEpfHwiMiI9PT1sbi5jaGFyQXQoQ3IrMSkpe2lmKG51bGw9PUhpJiZudWxsPT0oSGk9VG4oRW4sem4sIjIiPT09bG4uY2hhckF0KENyKzEpKSkpcmV0dXJuIiI7YXJbYXIubGVuZ3RoXT17dDoi''@;'; put 'put ''WCIsdjpsbi5zdWJzdHIoQ3IsMil9LFdvPVBpLENyKz0yO2JyZWFrfWNhc2UiTSI6Y2FzZSJEIjpjYXNlIlkiOmNhc2UiSCI6Y2FzZSJTIjpjYXNlIkUiOlBpPVBpLnRvTG93ZXJDYXNlKCk7Y2FzZSJtIjpjYXNlImQiOmNhc2UieSI6Y2FzZSJoIjpjYXNlInMiOmNhc2UiZSI6Y2FzZSJnIjpj''@;'; put 'put ''YXNlIlx1MGUyNyI6Y2FzZSJcdTBlMTQiOmNhc2UiXHUwZTFiIjpjYXNlIlx1MGUwYSI6Y2FzZSJcdTBlMTkiOmNhc2UiXHUwZTE3IjppZihFbjwwfHxudWxsPT1IaSYmbnVsbD09KEhpPVRuKEVuLHpuKSkpcmV0dXJuIiI7Zm9yKE9pPVBpOysrQ3I8bG4ubGVuZ3RoJiZsbi5jaGFyQXQoQ3Ip''@;'; put 'put ''LnRvTG93ZXJDYXNlKCk9PT1QaTspT2krPVBpOyJtIj09PVBpJiYiaCI9PT1Xby50b0xvd2VyQ2FzZSgpJiYoUGk9Ik0iKSwiaCI9PT1QaSYmKFBpPWFzKSxhclthci5sZW5ndGhdPXt0OlBpLHY6T2l9LFdvPVBpO2JyZWFrO2Nhc2UiQSI6Y2FzZSJhIjpjYXNlIlx1NGUwYSI6dmFyIHl1PXt0''@;'; put 'put ''OlBpLHY6UGl9O2lmKG51bGw9PUhpJiYoSGk9VG4oRW4sem4pKSwiQS9QIj09PWxuLnN1YnN0cihDciwzKS50b1VwcGVyQ2FzZSgpPyhudWxsIT1IaSYmKHl1LnY9SGkuSD49MTI/IlAiOiJBIikseXUudD0iVCIsYXM9ImgiLENyKz0zKToiQU0vUE0iPT09bG4uc3Vic3RyKENyLDUpLnRvVXBw''@;'; put 'put ''ZXJDYXNlKCk/KG51bGwhPUhpJiYoeXUudj1IaS5IPj0xMj8iUE0iOiJBTSIpLHl1LnQ9IlQiLENyKz01LGFzPSJoIik6Ilx1NGUwYVx1NTM0OC9cdTRlMGJcdTUzNDgiPT09bG4uc3Vic3RyKENyLDUpLnRvVXBwZXJDYXNlKCk/KG51bGwhPUhpJiYoeXUudj1IaS5IPj0xMj8iXHU0ZTBiXHU1''@;'; put 'put ''MzQ4IjoiXHU0ZTBhXHU1MzQ4IikseXUudD0iVCIsQ3IrPTUsYXM9ImgiKTooeXUudD0idCIsKytDciksbnVsbD09SGkmJiJUIj09PXl1LnQpcmV0dXJuIiI7YXJbYXIubGVuZ3RoXT15dSxXbz1QaTticmVhaztjYXNlIlsiOmZvcihPaT1QaTsiXSIhPT1sbi5jaGFyQXQoQ3IrKykmJkNyPGxu''@;'; put 'put ''Lmxlbmd0aDspT2krPWxuLmNoYXJBdChDcik7aWYoIl0iIT09T2kuc2xpY2UoLTEpKXRocm93J3VudGVybWluYXRlZCAiWyIgYmxvY2s6IHwnK09pKyJ8IjtpZihPaS5tYXRjaChqaSkpe2lmKG51bGw9PUhpJiZudWxsPT0oSGk9VG4oRW4sem4pKSlyZXR1cm4iIjthclthci5sZW5ndGhdPXt0''@;'; put 'put ''OiJaIix2Ok9pLnRvTG93ZXJDYXNlKCl9LFdvPU9pLmNoYXJBdCgxKX1lbHNlIE9pLmluZGV4T2YoIiQiKT4tMSYmKE9pPShPaS5tYXRjaCgvXCQoW14tXFtcXV0qKS8pfHxbXSlbMV18fCIkIixJcyhsbil8fChhclthci5sZW5ndGhdPXt0OiJ0Iix2Ok9pfSkpO2JyZWFrO2Nhc2UiLiI6aWYo''@;'; put 'put ''bnVsbCE9SGkpe2ZvcihPaT1QaTsrK0NyPGxuLmxlbmd0aCYmIjAiPT09KFBpPWxuLmNoYXJBdChDcikpOylPaSs9UGk7YXJbYXIubGVuZ3RoXT17dDoicyIsdjpPaX07YnJlYWt9Y2FzZSIwIjpjYXNlIiMiOmZvcihPaT1QaTsrK0NyPGxuLmxlbmd0aCYmIjAjPy4sRSstJSIuaW5kZXhPZihQ''@;'; put 'put ''aT1sbi5jaGFyQXQoQ3IpKT4tMTspT2krPVBpO2FyW2FyLmxlbmd0aF09e3Q6Im4iLHY6T2l9O2JyZWFrO2Nhc2UiPyI6Zm9yKE9pPVBpO2xuLmNoYXJBdCgrK0NyKT09PVBpOylPaSs9UGk7YXJbYXIubGVuZ3RoXT17dDpQaSx2Ok9pfSxXbz1QaTticmVhaztjYXNlIioiOisrQ3IsKCIgIj09''@;'; put 'put ''bG4uY2hhckF0KENyKXx8IioiPT1sbi5jaGFyQXQoQ3IpKSYmKytDcjticmVhaztjYXNlIigiOmNhc2UiKSI6YXJbYXIubGVuZ3RoXT17dDoxPT09U2k/InQiOlBpLHY6UGl9LCsrQ3I7YnJlYWs7Y2FzZSIxIjpjYXNlIjIiOmNhc2UiMyI6Y2FzZSI0IjpjYXNlIjUiOmNhc2UiNiI6Y2FzZSI3''@;'; put 'put ''IjpjYXNlIjgiOmNhc2UiOSI6Zm9yKE9pPVBpO0NyPGxuLmxlbmd0aCYmIjAxMjM0NTY3ODkiLmluZGV4T2YobG4uY2hhckF0KCsrQ3IpKT4tMTspT2krPWxuLmNoYXJBdChDcik7YXJbYXIubGVuZ3RoXT17dDoiRCIsdjpPaX07YnJlYWs7Y2FzZSIgIjphclthci5sZW5ndGhdPXt0OlBpLHY6''@;'; put 'put ''UGl9LCsrQ3I7YnJlYWs7Y2FzZSIkIjphclthci5sZW5ndGhdPXt0OiJ0Iix2OkNpfSwrK0NyO2JyZWFrO2Nhc2UiLyI6YXJbYXIubGVuZ3RoXT1hci5sZW5ndGg+MCYmSXMoYXJbYXIubGVuZ3RoLTFdLnYpP3t0OiJ0Iix2Ok5ufTp7dDoidCIsdjoiLyJ9LCsrQ3I7YnJlYWs7ZGVmYXVsdDpp''@;'; put 'put ''ZigtMT09PSIsJC0rLygpOiFeJid+e308Pj1cdTIwYWNhY2Zpamtsb3BxcnR1dnd4elAiLmluZGV4T2YoUGkpKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIGNoYXJhY3RlciAiK1BpKyIgaW4gIitsbik7YXJbYXIubGVuZ3RoXT17dDoidCIsdjpQaX0sKytDcn12YXIgeWQsTWw9MCxE''@;'; put 'put ''Zj0wO2ZvcihDcj1hci5sZW5ndGgtMSxXbz0idCI7Q3I+PTA7LS1Dcilzd2l0Y2goYXJbQ3JdLnQpe2Nhc2UiaCI6Y2FzZSJIIjphcltDcl0udD1hcyxXbz0iaCIsTWw8MSYmKE1sPTEpO2JyZWFrO2Nhc2UicyI6KHlkPWFyW0NyXS52Lm1hdGNoKC9cLjArJC8pKSYmKERmPU1hdGgubWF4KERm''@;'; put 'put ''LHlkWzBdLmxlbmd0aC0xKSksTWw8MyYmKE1sPTMpO2Nhc2UiZCI6Y2FzZSJ5IjpjYXNlIk0iOmNhc2UiZSI6V289YXJbQ3JdLnQ7YnJlYWs7Y2FzZSJtIjoicyI9PT1XbyYmKGFyW0NyXS50PSJNIixNbDwyJiYoTWw9MikpO2JyZWFrO2Nhc2UiWCI6YnJlYWs7Y2FzZSJaIjpNbDwxJiZhcltD''@;'; put 'put ''cl0udi5tYXRjaCgvW0hoXS8pJiYoTWw9MSksTWw8MiYmYXJbQ3JdLnYubWF0Y2goL1tNbV0vKSYmKE1sPTIpLE1sPDMmJmFyW0NyXS52Lm1hdGNoKC9bU3NdLykmJihNbD0zKX1zd2l0Y2goTWwpe2Nhc2UgMDpicmVhaztjYXNlIDE6SGkudT49LjUmJihIaS51PTAsKytIaS5TKSxIaS5TPj02''@;'; put 'put ''MCYmKEhpLlM9MCwrK0hpLk0pLEhpLk0+PTYwJiYoSGkuTT0wLCsrSGkuSCk7YnJlYWs7Y2FzZSAyOkhpLnU+PS41JiYoSGkudT0wLCsrSGkuUyksSGkuUz49NjAmJihIaS5TPTAsKytIaS5NKX12YXIgRG4sbW49IiI7Zm9yKENyPTA7Q3I8YXIubGVuZ3RoOysrQ3Ipc3dpdGNoKGFyW0NyXS50''@;'; put 'put ''KXtjYXNlInQiOmNhc2UiVCI6Y2FzZSIgIjpjYXNlIkQiOmJyZWFrO2Nhc2UiWCI6YXJbQ3JdLnY9IiIsYXJbQ3JdLnQ9IjsiO2JyZWFrO2Nhc2UiZCI6Y2FzZSJtIjpjYXNlInkiOmNhc2UiaCI6Y2FzZSJIIjpjYXNlIk0iOmNhc2UicyI6Y2FzZSJlIjpjYXNlImIiOmNhc2UiWiI6Y2FzZSJc''@;'; put 'put ''dTBlMjciOmNhc2UiXHUwZTE0IjpjYXNlIlx1MGUxYiI6Y2FzZSJcdTBlMGEiOmNhc2UiXHUwZTE5IjpjYXNlIlx1MGUxNyI6YXJbQ3JdLnY9UmEoYXJbQ3JdLnQuY2hhckNvZGVBdCgwKSxhcltDcl0udixIaSxEZiksYXJbQ3JdLnQ9InQiO2JyZWFrO2Nhc2UibiI6Y2FzZSI/Ijpmb3IoRG49''@;'; put 'put ''Q3IrMTtudWxsIT1hcltEbl0mJigiPyI9PT0oUGk9YXJbRG5dLnQpfHwiRCI9PT1QaXx8KCIgIj09PVBpfHwidCI9PT1QaSkmJm51bGwhPWFyW0RuKzFdJiYoIj8iPT09YXJbRG4rMV0udHx8InQiPT09YXJbRG4rMV0udCYmIi8iPT09YXJbRG4rMV0udil8fCIoIj09PWFyW0NyXS50JiYoIiAi''@;'; put 'put ''PT09UGl8fCJuIj09PVBpfHwiKSI9PT1QaSl8fCJ0Ij09PVBpJiYoIi8iPT09YXJbRG5dLnZ8fCIgIj09PWFyW0RuXS52JiZudWxsIT1hcltEbisxXSYmIj8iPT1hcltEbisxXS50KSk7KWFyW0NyXS52Kz1hcltEbl0udixhcltEbl09e3Y6IiIsdDoiOyJ9LCsrRG47bW4rPWFyW0NyXS52LENy''@;'; put 'put ''PURuLTE7YnJlYWs7Y2FzZSJHIjphcltDcl0udD0idCIsYXJbQ3JdLnY9d28oRW4sem4pfXZhciBVdCxubix3bj0iIjtpZihtbi5sZW5ndGg+MCl7NDA9PW1uLmNoYXJDb2RlQXQoMCk/KFV0PUVuPDAmJjQ1PT09bW4uY2hhckNvZGVBdCgwKT8tRW46RW4sbm49aGEoIm4iLG1uLFV0KSk6KG5u''@;'; put 'put ''PWhhKCJuIixtbixVdD1FbjwwJiZTaT4xPy1FbjpFbiksVXQ8MCYmYXJbMF0mJiJ0Ij09YXJbMF0udCYmKG5uPW5uLnN1YnN0cigxKSxhclswXS52PSItIithclswXS52KSksRG49KG5uPW5uLnJlcGxhY2UoL1ssXC5dL2csZnVuY3Rpb24oenIpe3JldHVybiIuIj09enI/RHI6TGl9KSkubGVu''@;'; put 'put ''Z3RoLTE7dmFyIE1uPWFyLmxlbmd0aDtmb3IoQ3I9MDtDcjxhci5sZW5ndGg7KytDcilpZihudWxsIT1hcltDcl0mJiJ0IiE9YXJbQ3JdLnQmJmFyW0NyXS52LmluZGV4T2YoIi4iKT4tMSl7TW49Q3I7YnJlYWt9dmFyIGpuPWFyLmxlbmd0aDtpZihNbj09PWFyLmxlbmd0aCYmLTE9PT1ubi5p''@;'; put 'put ''bmRleE9mKCJFIikpe2ZvcihDcj1hci5sZW5ndGgtMTtDcj49MDstLUNyKW51bGw9PWFyW0NyXXx8LTE9PT0ibj8iLmluZGV4T2YoYXJbQ3JdLnQpfHwoRG4+PWFyW0NyXS52Lmxlbmd0aC0xP2FyW0NyXS52PW5uLnN1YnN0cigxKyhEbi09YXJbQ3JdLnYubGVuZ3RoKSxhcltDcl0udi5sZW5n''@;'; put 'put ''dGgpOkRuPDA/YXJbQ3JdLnY9IiI6KGFyW0NyXS52PW5uLnN1YnN0cigwLERuKzEpLERuPS0xKSxhcltDcl0udD0idCIsam49Q3IpO0RuPj0wJiZqbjxhci5sZW5ndGgmJihhcltqbl0udj1ubi5zdWJzdHIoMCxEbisxKSthcltqbl0udil9ZWxzZSBpZihNbiE9PWFyLmxlbmd0aCYmLTE9PT1u''@;'; put 'put ''bi5pbmRleE9mKCJFIikpe2ZvcihEbj1ubi5pbmRleE9mKERyKS0xLENyPU1uO0NyPj0wOy0tQ3IpaWYobnVsbCE9YXJbQ3JdJiYtMSE9PSJuPyIuaW5kZXhPZihhcltDcl0udCkpe2Zvcihtbz1hcltDcl0udi5pbmRleE9mKCIuIik+LTEmJkNyPT09TW4/YXJbQ3JdLnYuaW5kZXhPZigiLiIp''@;'; put 'put ''LTE6YXJbQ3JdLnYubGVuZ3RoLTEsd249YXJbQ3JdLnYuc3Vic3RyKG1vKzEpO21vPj0wOy0tbW8pRG4+PTAmJigiMCI9PT1hcltDcl0udi5jaGFyQXQobW8pfHwiIyI9PT1hcltDcl0udi5jaGFyQXQobW8pKSYmKHduPW5uLmNoYXJBdChEbi0tKSt3bik7YXJbQ3JdLnY9d24sYXJbQ3JdLnQ9''@;'; put 'put ''InQiLGpuPUNyfWZvcihEbj49MCYmam48YXIubGVuZ3RoJiYoYXJbam5dLnY9bm4uc3Vic3RyKDAsRG4rMSkrYXJbam5dLnYpLERuPW5uLmluZGV4T2YoRHIpKzEsQ3I9TW47Q3I8YXIubGVuZ3RoOysrQ3IpaWYobnVsbCE9YXJbQ3JdJiYoLTEhPT0ibj8oIi5pbmRleE9mKGFyW0NyXS50KXx8''@;'; put 'put ''Q3I9PT1Nbikpe2Zvcihtbz1hcltDcl0udi5pbmRleE9mKERyKT4tMSYmQ3I9PT1Nbj9hcltDcl0udi5pbmRleE9mKERyKSsxOjAsd249YXJbQ3JdLnYuc3Vic3RyKDAsbW8pO21vPGFyW0NyXS52Lmxlbmd0aDsrK21vKURuPG5uLmxlbmd0aCYmKHduKz1ubi5jaGFyQXQoRG4rKykpO2FyW0Ny''@;'; put 'put ''XS52PXduLGFyW0NyXS50PSJ0Iixqbj1Dcn19fWZvcihDcj0wO0NyPGFyLmxlbmd0aDsrK0NyKW51bGwhPWFyW0NyXSYmIm4/Ii5pbmRleE9mKGFyW0NyXS50KT4tMSYmKGFyW0NyXS52PWhhKGFyW0NyXS50LGFyW0NyXS52LFV0PVNpPjEmJkVuPDAmJkNyPjAmJiItIj09PWFyW0NyLTFdLnY/''@;'; put 'put ''LUVuOkVuKS5yZXBsYWNlKC9cLi9nLERyKS5yZXBsYWNlKC8sLyxMaSksYXJbQ3JdLnQ9InQiKTt2YXIgbXI9IiI7Zm9yKENyPTA7Q3IhPT1hci5sZW5ndGg7KytDciludWxsIT1hcltDcl0mJihtcis9YXJbQ3JdLnYpO3JldHVybiBtcn1SLmlzX2RhdGU9SXMsUi5fZXZhbD1Gbjt2YXIgZHI9''@;'; put 'put ''L1xbWz08Pl0vLHFsPS9cWyg9fD5bPV0/fDxbPj1dPykoLT9cZCsoPzpcLlxkKik/KVxdLztmdW5jdGlvbiBVbChsbixFbil7aWYobnVsbD09RW4pcmV0dXJuITE7dmFyIHpuPXBhcnNlRmxvYXQoRW5bMl0pO3N3aXRjaChFblsxXSl7Y2FzZSI9IjppZihsbj09em4pcmV0dXJuITA7YnJlYWs7''@;'; put 'put ''Y2FzZSI+IjppZihsbj56bilyZXR1cm4hMDticmVhaztjYXNlIjwiOmlmKGxuPHpuKXJldHVybiEwO2JyZWFrO2Nhc2UiPD4iOmlmKGxuIT16bilyZXR1cm4hMDticmVhaztjYXNlIj49IjppZihsbj49em4pcmV0dXJuITA7YnJlYWs7Y2FzZSI8PSI6aWYobG48PXpuKXJldHVybiEwfXJldHVy''@;'; put 'put ''biExfWZ1bmN0aW9uIGJ1KGxuLEVuLHpuKXtudWxsPT16biYmKHpuPXt9KTt2YXIgU2k9IiI7c3dpdGNoKHR5cGVvZiBsbil7Y2FzZSJzdHJpbmciOlNpPSJtL2QveXkiPT1sbiYmem4uZGF0ZU5GP3puLmRhdGVORjpsbjticmVhaztjYXNlIm51bWJlciI6bnVsbD09KFNpPTE0PT1sbiYmem4u''@;'; put 'put ''ZGF0ZU5GP3puLmRhdGVORjoobnVsbCE9em4udGFibGU/em4udGFibGU6YnQpW2xuXSkmJihTaT16bi50YWJsZSYmem4udGFibGVbQnRbbG5dXXx8YnRbQnRbbG5dXSksbnVsbD09U2kmJihTaT1PdFtsbl18fCJHZW5lcmFsIil9aWYoWWUoU2ksMCkpcmV0dXJuIHdvKEVuLHpuKTtFbiBpbnN0''@;'; put 'put ''YW5jZW9mIERhdGUmJihFbj1KbihFbix6bi5kYXRlMTkwNCkpO3ZhciBhcj1mdW5jdGlvbiBabChsbixFbil7dmFyIHpuPUpvKGxuKSxTaT16bi5sZW5ndGgsYXI9em5bU2ktMV0uaW5kZXhPZigiQCIpO2lmKFNpPDQmJmFyPi0xJiYtLVNpLHpuLmxlbmd0aD40KXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''Y2Fubm90IGZpbmQgcmlnaHQgZm9ybWF0IGZvciB8Iit6bi5qb2luKCJ8IikrInwiKTtpZigibnVtYmVyIiE9dHlwZW9mIEVuKXJldHVybls0LDQ9PT16bi5sZW5ndGh8fGFyPi0xP3puW3puLmxlbmd0aC0xXToiQCJdO3N3aXRjaCh6bi5sZW5ndGgpe2Nhc2UgMTp6bj1hcj4tMT9bIkdlbmVy''@;'; put 'put ''YWwiLCJHZW5lcmFsIiwiR2VuZXJhbCIsem5bMF1dOlt6blswXSx6blswXSx6blswXSwiQCJdO2JyZWFrO2Nhc2UgMjp6bj1hcj4tMT9bem5bMF0sem5bMF0sem5bMF0sem5bMV1dOlt6blswXSx6blsxXSx6blswXSwiQCJdO2JyZWFrO2Nhc2UgMzp6bj1hcj4tMT9bem5bMF0sem5bMV0sem5b''@;'; put 'put ''MF0sem5bMl1dOlt6blswXSx6blsxXSx6blsyXSwiQCJdfXZhciBPaT1Fbj4wP3puWzBdOkVuPDA/em5bMV06em5bMl07aWYoLTE9PT16blswXS5pbmRleE9mKCJbIikmJi0xPT09em5bMV0uaW5kZXhPZigiWyIpKXJldHVybltTaSxPaV07aWYobnVsbCE9em5bMF0ubWF0Y2goZHIpfHxudWxs''@;'; put 'put ''IT16blsxXS5tYXRjaChkcikpe3ZhciBDcj16blswXS5tYXRjaChxbCksUGk9em5bMV0ubWF0Y2gocWwpO3JldHVybiBVbChFbixDcik/W1NpLHpuWzBdXTpVbChFbixQaSk/W1NpLHpuWzFdXTpbU2ksem5bbnVsbCE9Q3ImJm51bGwhPVBpPzI6MV1dfXJldHVybltTaSxPaV19KFNpLEVuKTtp''@;'; put 'put ''ZihZZShhclsxXSkpcmV0dXJuIHdvKEVuLHpuKTtpZighMD09PUVuKUVuPSJUUlVFIjtlbHNlIGlmKCExPT09RW4pRW49IkZBTFNFIjtlbHNlIGlmKCIiPT09RW58fG51bGw9PUVuKXJldHVybiIiO3JldHVybiBGbihhclsxXSxFbix6bixhclswXSl9ZnVuY3Rpb24gQ2wobG4sRW4pe2lmKCJu''@;'; put 'put ''dW1iZXIiIT10eXBlb2YgRW4pe0VuPStFbnx8LTE7Zm9yKHZhciB6bj0wO3puPDM5MjsrK3puKWlmKG51bGwhPWJ0W3puXSl7aWYoYnRbem5dPT1sbil7RW49em47YnJlYWt9fWVsc2UgRW48MCYmKEVuPXpuKTtFbjwwJiYoRW49MzkxKX1yZXR1cm4gYnRbRW5dPWxuLEVufVIubG9hZD1DbCxS''@;'; put 'put ''Ll90YWJsZT1idCxSLmdldF90YWJsZT1mdW5jdGlvbigpe3JldHVybiBidH0sUi5sb2FkX3RhYmxlPWZ1bmN0aW9uKEVuKXtmb3IodmFyIHpuPTA7MzkyIT16bjsrK3puKXZvaWQgMCE9PUVuW3puXSYmQ2woRW5bem5dLHpuKX0sUi5pbml0X3RhYmxlPW90LFIuZm9ybWF0PWJ1LFIuZ2V0bG9j''@;'; put 'put ''YWxlPWZ1bmN0aW9uIFZyKCl7cmV0dXJuIFZufHwiZW4tVVMifSxSLnNldGxvY2FsZT1mdW5jdGlvbiB2cihsbil7aWYoZnVuY3Rpb24gQnIobG4pe3ZhciBFbj0wO3N3aXRjaCgoVm58fCIiKS50b0xvd2VyQ2FzZSgpKXtjYXNlInpoLXR3IjpjYXNlInpoLWNuIjpjYXNlImphLWpwIjpjYXNl''@;'; put 'put ''ImtvLWtyIjpmb3IoRW49Mjc7RW48PTM2OysrRW4pZGVsZXRlIGxuW0VuXTtmb3IoRW49NTA7RW48PTU4OysrRW4pZGVsZXRlIGxuW0VuXTticmVhaztjYXNlInRoLXRoIjpmb3IoRW49NTk7RW48PTYyOysrRW4pZGVsZXRlIGxuW0VuXTtmb3IoRW49Njc7RW48PTgxOysrRW4pZGVsZXRlIGxu''@;'; put 'put ''W0VuXX19KGJ0KSxWbj1sbixIbihidCksdHlwZW9mIEludGw8InUiKXt2YXIgRW49SW50bC5EYXRlVGltZUZvcm1hdChsbik7aWYoRW4uZm9ybWF0VG9QYXJ0cyl7Zm9yKHZhciB6bj1Fbi5mb3JtYXRUb1BhcnRzKG5ldyBEYXRlKDIwMjAsMCw1LDAsMCwwKSksU2k9MDtTaTw3OysrU2kpdXRb''@;'; put 'put ''U2ldWzFdPUludGwuRGF0ZVRpbWVGb3JtYXQobG4se3dlZWtkYXk6ImxvbmcifSkuZm9ybWF0VG9QYXJ0cyhuZXcgRGF0ZSgyMDIwLDAsNStTaSwwLDAsMCkpWzBdLnZhbHVlLHV0W1NpXVswXT1JbnRsLkRhdGVUaW1lRm9ybWF0KGxuLHt3ZWVrZGF5OiJzaG9ydCJ9KS5mb3JtYXRUb1BhcnRz''@;'; put 'put ''KG5ldyBEYXRlKDIwMjAsMCw1K1NpLDAsMCwwKSlbMF0udmFsdWU7Zm9yKHZhciBhcj0wO2FyPDEyOysrYXIpRXRbYXJdWzJdPUludGwuRGF0ZVRpbWVGb3JtYXQobG4se21vbnRoOiJsb25nIn0pLmZvcm1hdFRvUGFydHMobmV3IERhdGUoMjAyMCxhciwyLDAsMCwwKSlbMF0udmFsdWUsRXRb''@;'; put 'put ''YXJdWzFdPUludGwuRGF0ZVRpbWVGb3JtYXQobG4se21vbnRoOiJzaG9ydCJ9KS5mb3JtYXRUb1BhcnRzKG5ldyBEYXRlKDIwMjAsYXIsMiwwLDAsMCkpWzBdLnZhbHVlLEV0W2FyXVswXT1FdFthcl1bMV0uc2xpY2UoMCwxKTtmb3IodmFyIE9pPSIiLENyPTA7Q3I8em4ubGVuZ3RoOysrQ3Ip''@;'; put 'put ''e3ZhciBQaT16bltDcl0udmFsdWU7c3dpdGNoKHpuW0NyXS50eXBlKXtjYXNlInllYXIiOk9pKz0yPT1QaS5sZW5ndGg/Inl5IjoieXl5eSI7YnJlYWs7Y2FzZSJtb250aCI6T2krPSIxIj09UGk/Im0iOiIwMSI9PVBpPyJtbSI6UGk9PUV0WzBdWzFdPyJtbW0iOlBpPT1FdFswXVsyXT8ibW1t''@;'; put 'put ''bSI6UGk9PUV0WzBdWzBdPyJtbW1tbSI6Im1tIjticmVhaztjYXNlImRheSI6T2krPSI1Ij09UGk/ImQiOiIwNSI9PVBpPyJkZCI6UGk9PXV0WzBdWzBdPyJkZGQiOlBpPT11dFswXVsxXT8iZGRkZCI6ImRkIjticmVhaztjYXNlImxpdGVyYWwiOk9pKz1QaS5yZXBsYWNlKC8uL2csIlxcJCYi''@;'; put 'put ''KSwxPT1QaS5sZW5ndGgmJihObj1QaSl9fShsbi5tYXRjaCgvZW4vaSkmJmxuLm1hdGNoKC91cy9pKXx8IWxuKSYmKE9pPSJtL2QveXkiKSxidFsxNF09T2l9ZWxzZSJqYS1qcCI9PWxuLnRvTG93ZXJDYXNlKCkmJihidFsxNF09Inl5eXlcXC9tXFwvZCIpO3ZhciBXbz1JbnRsLk51bWJlckZv''@;'; put 'put ''cm1hdChsbix7fSkuZm9ybWF0KDEyMzQ1NjcuODkpO1dvJiYoTGk9KFdvLm1hdGNoKC8xKC4qKTIvKXx8W10pWzFdLERyPShXby5tYXRjaCgvNyguKik4Lyl8fFtdKVsxXSl9dXJbbG4udG9Mb3dlckNhc2UoKV18fCh1cltsbi50b0xvd2VyQ2FzZSgpXT17Ii4iOkRyLCIsIjpMaX0pLHRyPWV0''@;'; put 'put ''KGdyPXVyW2xuLnRvTG93ZXJDYXNlKCldfHx1clsiZW4tdXMiXSl9LFIubm9ybWFsaXplPWZ1bmN0aW9uIFphKGxuKXtmb3IodmFyIEVuPTAsem49MCxTaT0iIixhcj0iIixPaT0iIixDcj1nci55fHwieSIsUGk9Q3IudG9VcHBlckNhc2UoKSxXbz1nci5kfHwiZCIsSGk9V28udG9VcHBlckNh''@;'; put 'put ''c2UoKSxtbz1nclsiLiJdLERpPWdyWyIsIl0sYXM9IjAjP0UrLSUiK2dyWyIsIl0rbW87RW48bG4ubGVuZ3RoOylzd2l0Y2goU2k9bG4uY2hhckF0KEVuKSl7Y2FzZSJHIjpFbisrLE9pKz1TaTticmVhaztjYXNlJyInOmZvcihPaSs9U2k7MzQhPT0oem49bG4uY2hhckNvZGVBdCgrK0VuKSkm''@;'; put 'put ''JkVuPGxuLmxlbmd0aDspT2krPVN0cmluZy5mcm9tQ2hhckNvZGUoem4pO09pKz0nIicsKytFbjticmVhaztjYXNlIlxcIjpjYXNlIl8iOk9pKz1sbi5zbGljZShFbixFbisyKSxFbis9MjticmVhaztjYXNlIkAiOk9pKz1TaSwrK0VuO2JyZWFrO2Nhc2UiQiI6Y2FzZSJiIjorK0VuLE9pKz1T''@;'; put 'put ''aTticmVhaztjYXNlIENyOmNhc2UgUGk6Y2FzZSBXbzpjYXNlIEhpOk9pKz10cltTaS50b0xvd2VyQ2FzZSgpXSwrK0VuO2JyZWFrO2Nhc2UiTSI6Y2FzZSJIIjpjYXNlIlMiOmNhc2UiRSI6Y2FzZSJtIjpjYXNlImgiOmNhc2UicyI6Y2FzZSJlIjpjYXNlImciOmNhc2UiQSI6Y2FzZSJhIjpP''@;'; put 'put ''aSs9U2ksKytFbjticmVhaztjYXNlIlsiOmZvcihhcj1TaTsiXSIhPT1sbi5jaGFyQXQoRW4rKykmJkVuPGxuLmxlbmd0aDspYXIrPWxuLmNoYXJBdChFbik7T2krPWFyO2JyZWFrO2Nhc2UgRGk6T2krPSciJytTaSsnIicsKytFbjticmVhaztjYXNlIG1vOmlmKCEoRW48bG4ubGVuZ3RoJiYo''@;'; put 'put ''YXMuaW5kZXhPZihTaT1sbi5jaGFyQXQoKytFbikpPi0xfHwiXFwiPT1TaSYmIi0iPT1sbi5jaGFyQXQoRW4rMSkmJiIwIyIuaW5kZXhPZihsbi5jaGFyQXQoRW4rMikpPi0xKSkpe09pKz0nIicrbW8rJyInO2JyZWFrfVNpPW1vLC0tRW47Y2FzZSIwIjpjYXNlIiMiOmZvcihPaSs9dHJbU2ku''@;'; put 'put ''dG9Mb3dlckNhc2UoKV18fFNpO0VuPGxuLmxlbmd0aCYmKGFzLmluZGV4T2YoU2k9bG4uY2hhckF0KCsrRW4pKT4tMXx8IlxcIj09U2kmJiItIj09bG4uY2hhckF0KEVuKzEpJiYiMCMiLmluZGV4T2YobG4uY2hhckF0KEVuKzIpKT4tMSk7KU9pKz10cltTaS50b0xvd2VyQ2FzZSgpXXx8U2k7''@;'; put 'put ''YnJlYWs7Y2FzZSI/Ijpmb3IoT2krPVNpO2xuLmNoYXJBdCgrK0VuKT09PVNpOylPaSs9U2k7YnJlYWs7Y2FzZSIqIjpPaSs9U2ksKytFbiwoIiAiPT1sbi5jaGFyQXQoRW4pfHwiKiI9PWxuLmNoYXJBdChFbikpJiYoT2krPWxuLmNoYXJBdChFbiksKytFbik7YnJlYWs7Y2FzZSIoIjpjYXNl''@;'; put 'put ''IikiOk9pKz1TaSwrK0VuO2JyZWFrO2Nhc2UiMSI6Y2FzZSIyIjpjYXNlIjMiOmNhc2UiNCI6Y2FzZSI1IjpjYXNlIjYiOmNhc2UiNyI6Y2FzZSI4IjpjYXNlIjkiOmZvcihPaSs9U2k7RW48bG4ubGVuZ3RoJiYiMDEyMzQ1Njc4OSIuaW5kZXhPZihsbi5jaGFyQXQoKytFbikpPi0xOylPaSs9''@;'; put 'put ''bG4uY2hhckF0KEVuKTticmVhaztkZWZhdWx0Ok9pKz1TaSwrK0VufXJldHVybiBPaX0sUi5nZXRjdXJyZW5jeT1mdW5jdGlvbiBpbygpe3JldHVybiBGaXx8IlVTRCJ9LFIuc2V0Y3VycmVuY3k9ZnVuY3Rpb24gdW8obG4pe0ZpPWxuLENpPXR5cGVvZiBJbnRsPCJ1Ij9JbnRsLk51bWJlckZv''@;'; put 'put ''cm1hdChWbix7c3R5bGU6ImN1cnJlbmN5IixjdXJyZW5jeURpc3BsYXk6InN5bWJvbCIsY3VycmVuY3k6bG59KS5mb3JtYXQoMCkucmVwbGFjZSgvWzBcLlwsXHNdL2csIiIpOiIkIn19O29lKEEpO3ZhciBNZSx0ZT17IkdlbmVyYWwgTnVtYmVyIjoiR2VuZXJhbCIsIkdlbmVyYWwgRGF0ZSI6''@;'; put 'put ''QS5fdGFibGVbMjJdLCJMb25nIERhdGUiOiJkZGRkLCBtbW1tIGRkLCB5eXl5IiwiTWVkaXVtIERhdGUiOkEuX3RhYmxlWzE1XSwiU2hvcnQgRGF0ZSI6QS5fdGFibGVbMTRdLCJMb25nIFRpbWUiOkEuX3RhYmxlWzE5XSwiTWVkaXVtIFRpbWUiOkEuX3RhYmxlWzE4XSwiU2hvcnQgVGltZSI6''@;'; put 'put ''QS5fdGFibGVbMjBdLEN1cnJlbmN5OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLEZpeGVkOkEuX3RhYmxlWzJdLFN0YW5kYXJkOkEuX3RhYmxlWzRdLFBlcmNlbnQ6QS5fdGFibGVbMTBdLFNjaWVudGlmaWM6QS5fdGFibGVbMTFdLCJZZXMvTm8iOiciWWVzIjsiWWVz''@;'; put 'put ''IjsiTm8iO0AnLCJUcnVlL0ZhbHNlIjonIlRydWUiOyJUcnVlIjsiRmFsc2UiO0AnLCJPbi9PZmYiOiciWWVzIjsiWWVzIjsiTm8iO0AnfSxzZT17NTonIiQiIywjIzBfKTtcXCgiJCIjLCMjMFxcKScsNjonIiQiIywjIzBfKTtbUmVkXVxcKCIkIiMsIyMwXFwpJyw3OiciJCIjLCMjMC4wMF8p''@;'; put 'put ''O1xcKCIkIiMsIyMwLjAwXFwpJyw4OiciJCIjLCMjMC4wMF8pO1tSZWRdXFwoIiQiIywjIzAuMDBcXCknLDIzOiJHZW5lcmFsIiwyNDoiR2VuZXJhbCIsMjU6IkdlbmVyYWwiLDI2OiJHZW5lcmFsIiwyNzoibS9kL3l5IiwyODoibS9kL3l5IiwyOToibS9kL3l5IiwzMDoibS9kL3l5IiwzMToi''@;'; put 'put ''bS9kL3l5IiwzMjoiaDptbTpzcyIsMzM6Img6bW06c3MiLDM0OiJoOm1tOnNzIiwzNToiaDptbTpzcyIsMzY6Im0vZC95eSIsNDE6J18oKiAjLCMjMF8pO18oKiAoIywjIzApO18oKiAiLSJfKTtfKEBfKScsNDI6J18oIiQiKiAjLCMjMF8pO18oIiQiKiAoIywjIzApO18oIiQiKiAiLSJfKTtf''@;'; put 'put ''KEBfKScsNDM6J18oKiAjLCMjMC4wMF8pO18oKiAoIywjIzAuMDApO18oKiAiLSI/P18pO18oQF8pJyw0NDonXygiJCIqICMsIyMwLjAwXyk7XygiJCIqICgjLCMjMC4wMCk7XygiJCIqICItIj8/Xyk7XyhAXyknLDUwOiJtL2QveXkiLDUxOiJtL2QveXkiLDUyOiJtL2QveXkiLDUzOiJtL2Qv''@;'; put 'put ''eXkiLDU0OiJtL2QveXkiLDU1OiJtL2QveXkiLDU2OiJtL2QveXkiLDU3OiJtL2QveXkiLDU4OiJtL2QveXkiLDU5OiIwIiw2MDoiMC4wMCIsNjE6IiMsIyMwIiw2MjoiIywjIzAuMDAiLDYzOiciJCIjLCMjMF8pO1xcKCIkIiMsIyMwXFwpJyw2NDonIiQiIywjIzBfKTtbUmVkXVxcKCIkIiMs''@;'; put 'put ''IyMwXFwpJyw2NTonIiQiIywjIzAuMDBfKTtcXCgiJCIjLCMjMC4wMFxcKScsNjY6JyIkIiMsIyMwLjAwXyk7W1JlZF1cXCgiJCIjLCMjMC4wMFxcKScsNjc6IjAlIiw2ODoiMC4wMCUiLDY5OiIjID8vPyIsNzA6IiMgPz8vPz8iLDcxOiJtL2QveXkiLDcyOiJtL2QveXkiLDczOiJkLW1tbS15''@;'; put 'put ''eSIsNzQ6ImQtbW1tIiw3NToibW1tLXl5Iiw3NjoiaDptbSIsNzc6Img6bW06c3MiLDc4OiJtL2QveXkgaDptbSIsNzk6Im1tOnNzIiw4MDoiW2hdOm1tOnNzIiw4MToibW1zcy4wIn0sd2U9L1tkRF0rfFttTV0rfFt5WWVFXSt8W0hoXSt8W1NzXSsvZzshZnVuY3Rpb24oUyl7Uy52ZXJzaW9u''@;'; put 'put ''PSIxLjIuMCI7dmFyIGs9ZnVuY3Rpb24gUigpe2Zvcih2YXIgcGU9MCx5ZT1uZXcgQXJyYXkoMjU2KSxQZT0wOzI1NiE9UGU7KytQZSl5ZVtQZV09cGU9MSYocGU9MSYocGU9MSYocGU9MSYocGU9MSYocGU9MSYocGU9MSYocGU9MSYocGU9UGUpPy0zMDY2NzQ5MTJecGU+Pj4xOnBlPj4+MSk/''@;'; put 'put ''LTMwNjY3NDkxMl5wZT4+PjE6cGU+Pj4xKT8tMzA2Njc0OTEyXnBlPj4+MTpwZT4+PjEpPy0zMDY2NzQ5MTJecGU+Pj4xOnBlPj4+MSk/LTMwNjY3NDkxMl5wZT4+PjE6cGU+Pj4xKT8tMzA2Njc0OTEyXnBlPj4+MTpwZT4+PjEpPy0zMDY2NzQ5MTJecGU+Pj4xOnBlPj4+MSk/LTMwNjY3NDkx''@;'; put 'put ''Ml5wZT4+PjE6cGU+Pj4xO3JldHVybiB0eXBlb2YgSW50MzJBcnJheTwidSI/bmV3IEludDMyQXJyYXkoeWUpOnllfSgpO1MudGFibGU9ayxTLmJzdHI9ZnVuY3Rpb24gRyhwZSx5ZSl7Zm9yKHZhciBQZT1+eWUsTmU9cGUubGVuZ3RoLTEsWWU9MDtZZTxOZTspUGU9KFBlPVBlPj4+OF5rWzI1''@;'; put 'put ''NSYoUGVecGUuY2hhckNvZGVBdChZZSsrKSldKT4+Pjhea1syNTUmKFBlXnBlLmNoYXJDb2RlQXQoWWUrKykpXTtyZXR1cm4gWWU9PT1OZSYmKFBlPVBlPj4+OF5rWzI1NSYoUGVecGUuY2hhckNvZGVBdChZZSkpXSksflBlfSxTLmJ1Zj1mdW5jdGlvbiBRKHBlLHllKXtpZihwZS5sZW5ndGg+''@;'; put 'put ''MWU0KXJldHVybiBmdW5jdGlvbiBhZShwZSx5ZSl7Zm9yKHZhciBQZT1+eWUsTmU9cGUubGVuZ3RoLTcsWWU9MDtZZTxOZTspUGU9KFBlPShQZT0oUGU9KFBlPShQZT0oUGU9KFBlPVBlPj4+OF5rWzI1NSYoUGVecGVbWWUrK10pXSk+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSldKT4+Pjhea1sy''@;'; put 'put ''NTUmKFBlXnBlW1llKytdKV0pPj4+OF5rWzI1NSYoUGVecGVbWWUrK10pXSk+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSldKT4+Pjhea1syNTUmKFBlXnBlW1llKytdKV0pPj4+OF5rWzI1NSYoUGVecGVbWWUrK10pXSk+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSldO2Zvcig7WWU8TmUrNzspUGU9''@;'; put 'put ''UGU+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSldO3JldHVybn5QZX0ocGUseWUpO2Zvcih2YXIgUGU9fnllLE5lPXBlLmxlbmd0aC0zLFllPTA7WWU8TmU7KVBlPShQZT0oUGU9KFBlPVBlPj4+OF5rWzI1NSYoUGVecGVbWWUrK10pXSk+Pj44XmtbMjU1JihQZV5wZVtZZSsrXSldKT4+Pjhea1sy''@;'; put 'put ''NTUmKFBlXnBlW1llKytdKV0pPj4+OF5rWzI1NSYoUGVecGVbWWUrK10pXTtmb3IoO1llPE5lKzM7KVBlPVBlPj4+OF5rWzI1NSYoUGVecGVbWWUrK10pXTtyZXR1cm5+UGV9LFMuc3RyPWZ1bmN0aW9uIGdlKHBlLHllKXtmb3IodmFyIGV0LHV0LFBlPX55ZSxOZT0wLFllPXBlLmxlbmd0aDtO''@;'; put 'put ''ZTxZZTspKGV0PXBlLmNoYXJDb2RlQXQoTmUrKykpPDEyOD9QZT1QZT4+Pjhea1syNTUmKFBlXmV0KV06ZXQ8MjA0OD9QZT0oUGU9UGU+Pj44XmtbMjU1JihQZV4oMTkyfGV0Pj42JjMxKSldKT4+Pjhea1syNTUmKFBlXigxMjh8NjMmZXQpKV06ZXQ+PTU1Mjk2JiZldDw1NzM0ND8oZXQ9NjQr''@;'; put 'put ''KDEwMjMmZXQpLHV0PTEwMjMmcGUuY2hhckNvZGVBdChOZSsrKSxQZT0oUGU9KFBlPShQZT1QZT4+Pjhea1syNTUmKFBlXigyNDB8ZXQ+PjgmNykpXSk+Pj44XmtbMjU1JihQZV4oMTI4fGV0Pj4yJjYzKSldKT4+Pjhea1syNTUmKFBlXigxMjh8dXQ+PjYmMTV8KDMmZXQpPDw0KSldKT4+Pjhe''@;'; put 'put ''a1syNTUmKFBlXigxMjh8NjMmdXQpKV0pOlBlPShQZT0oUGU9UGU+Pj44XmtbMjU1JihQZV4oMjI0fGV0Pj4xMiYxNSkpXSk+Pj44XmtbMjU1JihQZV4oMTI4fGV0Pj42JjYzKSldKT4+Pjhea1syNTUmKFBlXigxMjh8NjMmZXQpKV07cmV0dXJuflBlfX0oTWU9e30pO3ZhciBYZSx2ZT1mdW5j''@;'; put 'put ''dGlvbigpe3ZhciB5ZSxSPXt9O2Z1bmN0aW9uIEcobW4pe2lmKCIvIj09bW4uY2hhckF0KG1uLmxlbmd0aC0xKSlyZXR1cm4tMT09PW1uLnNsaWNlKDAsLTEpLmluZGV4T2YoIi8iKT9tbjpHKG1uLnNsaWNlKDAsLTEpKTt2YXIgRG49bW4ubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4tMT09PURu''@;'; put 'put ''P21uOm1uLnNsaWNlKDAsRG4rMSl9ZnVuY3Rpb24gUShtbil7aWYoIi8iPT1tbi5jaGFyQXQobW4ubGVuZ3RoLTEpKXJldHVybiBRKG1uLnNsaWNlKDAsLTEpKTt2YXIgRG49bW4ubGFzdEluZGV4T2YoIi8iKTtyZXR1cm4tMT09PURuP21uOm1uLnNsaWNlKERuKzEpfWZ1bmN0aW9uIGFlKG1u''@;'; put 'put ''LERuKXsic3RyaW5nIj09dHlwZW9mIERuJiYoRG49bmV3IERhdGUoRG4pKTt2YXIgd249RG4uZ2V0SG91cnMoKTt3bj0od249d248PDZ8RG4uZ2V0TWludXRlcygpKTw8NXxEbi5nZXRTZWNvbmRzKCk+Pj4xLG1uLndyaXRlX3NoaWZ0KDIsd24pO3ZhciBVdD1Ebi5nZXRGdWxsWWVhcigpLTE5''@;'; put 'put ''ODA7VXQ9KFV0PVV0PDw0fERuLmdldE1vbnRoKCkrMSk8PDV8RG4uZ2V0RGF0ZSgpLG1uLndyaXRlX3NoaWZ0KDIsVXQpfWZ1bmN0aW9uIHBlKG1uKXt2bihtbiwwKTtmb3IodmFyIERuPXt9LHduPTA7bW4ubDw9bW4ubGVuZ3RoLTQ7KXt2YXIgVXQ9bW4ucmVhZF9zaGlmdCgyKSxubj1tbi5y''@;'; put 'put ''ZWFkX3NoaWZ0KDIpLE1uPW1uLmwrbm4sam49e307MjE1ODk9PT1VdCYmKDEmKHduPW1uLnJlYWRfc2hpZnQoMSkpJiYoam4ubXRpbWU9bW4ucmVhZF9zaGlmdCg0KSksbm4+NSYmKDImd24mJihqbi5hdGltZT1tbi5yZWFkX3NoaWZ0KDQpKSw0JnduJiYoam4uY3RpbWU9bW4ucmVhZF9zaGlm''@;'; put 'put ''dCg0KSkpLGpuLm10aW1lJiYoam4ubXQ9bmV3IERhdGUoMWUzKmpuLm10aW1lKSkpLG1uLmw9TW4sRG5bVXRdPWpufXJldHVybiBEbn1mdW5jdGlvbiBQZSgpe3JldHVybiB5ZXx8KHllPV8oODMzMzcpKX1mdW5jdGlvbiBOZShtbixEbil7aWYoODA9PW1uWzBdJiY3NT09bW5bMV0pcmV0dXJu''@;'; put 'put ''IERpKG1uLERuKTtpZihtbi5sZW5ndGg8NTEyKXRocm93IG5ldyBFcnJvcigiQ0ZCIGZpbGUgc2l6ZSAiK21uLmxlbmd0aCsiIDwgNTEyIik7dmFyIHduLG5uLE1uLGpuLG1yLHpyLFV0PTUxMixvaT1bXSx0aT1tbi5zbGljZSgwLDUxMik7dm4odGksMCk7dmFyIEppPWZ1bmN0aW9uIFllKG1u''@;'; put 'put ''KXtpZig4MD09bW5bbW4ubF0mJjc1PT1tblttbi5sKzFdKXJldHVyblswLDBdO21uLmNoayhDaSwiSGVhZGVyIFNpZ25hdHVyZTogIiksbW4ubCs9MTY7dmFyIERuPW1uLnJlYWRfc2hpZnQoMiwidSIpO3JldHVyblttbi5yZWFkX3NoaWZ0KDIsInUiKSxEbl19KHRpKTtzd2l0Y2god249Smlb''@;'; put 'put ''MF0pe2Nhc2UgMzpVdD01MTI7YnJlYWs7Y2FzZSA0OlV0PTQwOTY7YnJlYWs7Y2FzZSAwOmlmKDA9PUppWzFdKXJldHVybiBEaShtbixEbik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIk1ham9yIFZlcnNpb246IEV4cGVjdGVkIDMgb3IgNCBzYXcgIit3bil9NTEyIT09VXQmJnZuKHRpPW1u''@;'; put 'put ''LnNsaWNlKDAsVXQpLDI4KTt2YXIgWmk9bW4uc2xpY2UoMCxVdCk7IWZ1bmN0aW9uIGV0KG1uLERuKXt2YXIgd247c3dpdGNoKG1uLmwrPTIsd249bW4ucmVhZF9zaGlmdCgyKSl7Y2FzZSA5OmlmKDMhPURuKXRocm93IG5ldyBFcnJvcigiU2VjdG9yIFNoaWZ0OiBFeHBlY3RlZCA5IHNhdyAi''@;'; put 'put ''K3duKTticmVhaztjYXNlIDEyOmlmKDQhPURuKXRocm93IG5ldyBFcnJvcigiU2VjdG9yIFNoaWZ0OiBFeHBlY3RlZCAxMiBzYXcgIit3bik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlNlY3RvciBTaGlmdDogRXhwZWN0ZWQgOSBvciAxMiBzYXcgIit3bil9bW4uY2hrKCIwNjAw''@;'; put 'put ''IiwiTWluaSBTZWN0b3IgU2hpZnQ6ICIpLG1uLmNoaygiMDAwMDAwMDAwMDAwIiwiUmVzZXJ2ZWQ6ICIpfSh0aSx3bik7dmFyIHJhPXRpLnJlYWRfc2hpZnQoNCwiaSIpO2lmKDM9PT13biYmMCE9PXJhKXRocm93IG5ldyBFcnJvcigiIyBEaXJlY3RvcnkgU2VjdG9yczogRXhwZWN0ZWQgMCBz''@;'; put 'put ''YXcgIityYSk7dGkubCs9NCxqbj10aS5yZWFkX3NoaWZ0KDQsImkiKSx0aS5sKz00LHRpLmNoaygiMDAxMDAwMDAiLCJNaW5pIFN0cmVhbSBDdXRvZmYgU2l6ZTogIiksbXI9dGkucmVhZF9zaGlmdCg0LCJpIiksbm49dGkucmVhZF9zaGlmdCg0LCJpIiksenI9dGkucmVhZF9zaGlmdCg0LCJp''@;'; put 'put ''IiksTW49dGkucmVhZF9zaGlmdCg0LCJpIik7Zm9yKHZhciB6bz0tMSxibz0wO2JvPDEwOSYmISgoem89dGkucmVhZF9zaGlmdCg0LCJpIikpPDApOysrYm8pb2lbYm9dPXpvO3ZhciBUYT1mdW5jdGlvbiB1dChtbixEbil7Zm9yKHZhciB3bj1NYXRoLmNlaWwobW4ubGVuZ3RoL0RuKS0xLFV0''@;'; put 'put ''PVtdLG5uPTE7bm48d247KytubilVdFtubi0xXT1tbi5zbGljZShubipEbiwobm4rMSkqRG4pO3JldHVybiBVdFt3bi0xXT1tbi5zbGljZSh3bipEbiksVXR9KG1uLFV0KTtidCh6cixNbixUYSxVdCxvaSk7dmFyIE1zPWZ1bmN0aW9uIGt0KG1uLERuLHduLFV0KXt2YXIgbm49bW4ubGVuZ3Ro''@;'; put 'put ''LE1uPVtdLGpuPVtdLG1yPVtdLHpyPVtdLG9pPVV0LTEsdGk9MCxKaT0wLFppPTAscmE9MDtmb3IodGk9MDt0aTxubjsrK3RpKWlmKG1yPVtdLChaaT10aStEbik+PW5uJiYoWmktPW5uKSwham5bWmldKXt6cj1bXTt2YXIgem89W107Zm9yKEppPVppO0ppPj0wOyl7em9bSmldPSEwLGpuW0pp''@;'; put 'put ''XT0hMCxtclttci5sZW5ndGhdPUppLHpyLnB1c2gobW5bSmldKTt2YXIgYm89d25bTWF0aC5mbG9vcig0KkppL1V0KV07aWYoVXQ8NCsocmE9NCpKaSZvaSkpdGhyb3cgbmV3IEVycm9yKCJGQVQgYm91bmRhcnkgY3Jvc3NlZDogIitKaSsiIDQgIitVdCk7aWYoIW1uW2JvXXx8em9bSmk9VnMo''@;'; put 'put ''bW5bYm9dLHJhKV0pYnJlYWt9TW5bWmldPXtub2RlczptcixkYXRhOnkwKFt6cl0pfX1yZXR1cm4gTW59KFRhLGpuLG9pLFV0KTtNc1tqbl0ubmFtZT0iIURpcmVjdG9yeSIsbm4+MCYmbXIhPT10ciYmKE1zW21yXS5uYW1lPSIhTWluaUZBVCIpLE1zW29pWzBdXS5uYW1lPSIhRkFUIixNcy5m''@;'; put 'put ''YXRfYWRkcnM9b2ksTXMuc3N6PVV0O3ZhciBsMD1bXSxhMT1bXSxOOD1bXTsoZnVuY3Rpb24gT3QobW4sRG4sd24sVXQsbm4sTW4sam4sbXIpe2Zvcih2YXIgcmEsenI9MCxvaT1VdC5sZW5ndGg/MjowLHRpPURuW21uXS5kYXRhLEppPTAsWmk9MDtKaTx0aS5sZW5ndGg7SmkrPTEyOCl7dmFy''@;'; put 'put ''IHpvPXRpLnNsaWNlKEppLEppKzEyOCk7dm4oem8sNjQpLFppPXpvLnJlYWRfc2hpZnQoMikscmE9Umwoem8sMCxaaS1vaSksVXQucHVzaChyYSk7dmFyIGJvPXtuYW1lOnJhLHR5cGU6em8ucmVhZF9zaGlmdCgxKSxjb2xvcjp6by5yZWFkX3NoaWZ0KDEpLEw6em8ucmVhZF9zaGlmdCg0LCJp''@;'; put 'put ''IiksUjp6by5yZWFkX3NoaWZ0KDQsImkiKSxDOnpvLnJlYWRfc2hpZnQoNCwiaSIpLGNsc2lkOnpvLnJlYWRfc2hpZnQoMTYpLHN0YXRlOnpvLnJlYWRfc2hpZnQoNCwiaSIpLHN0YXJ0OjAsc2l6ZTowfTswIT09em8ucmVhZF9zaGlmdCgyKSt6by5yZWFkX3NoaWZ0KDIpK3pvLnJlYWRfc2hp''@;'; put 'put ''ZnQoMikrem8ucmVhZF9zaGlmdCgyKSYmKGJvLmN0PUt0KHpvLHpvLmwtOCkpLDAhPT16by5yZWFkX3NoaWZ0KDIpK3pvLnJlYWRfc2hpZnQoMikrem8ucmVhZF9zaGlmdCgyKSt6by5yZWFkX3NoaWZ0KDIpJiYoYm8ubXQ9S3Qoem8sem8ubC04KSksYm8uc3RhcnQ9em8ucmVhZF9zaGlmdCg0''@;'; put 'put ''LCJpIiksYm8uc2l6ZT16by5yZWFkX3NoaWZ0KDQsImkiKSxiby5zaXplPDAmJmJvLnN0YXJ0PDAmJihiby5zaXplPWJvLnR5cGU9MCxiby5zdGFydD10cixiby5uYW1lPSIiKSw1PT09Ym8udHlwZT8oenI9Ym8uc3RhcnQsbm4+MCYmenIhPT10ciYmKERuW3pyXS5uYW1lPSIhU3RyZWFtRGF0''@;'; put 'put ''YSIpKTpiby5zaXplPj00MDk2Pyhiby5zdG9yYWdlPSJmYXQiLHZvaWQgMD09PURuW2JvLnN0YXJ0XSYmKERuW2JvLnN0YXJ0XT1CdCh3bixiby5zdGFydCxEbi5mYXRfYWRkcnMsRG4uc3N6KSksRG5bYm8uc3RhcnRdLm5hbWU9Ym8ubmFtZSxiby5jb250ZW50PURuW2JvLnN0YXJ0XS5kYXRh''@;'; put 'put ''LnNsaWNlKDAsYm8uc2l6ZSkpOihiby5zdG9yYWdlPSJtaW5pZmF0Iixiby5zaXplPDA/Ym8uc2l6ZT0wOnpyIT09dHImJmJvLnN0YXJ0IT09dHImJkRuW3pyXSYmKGJvLmNvbnRlbnQ9b3QoYm8sRG5benJdLmRhdGEsKERuW21yXXx8e30pLmRhdGEpKSksYm8uY29udGVudCYmdm4oYm8uY29u''@;'; put 'put ''dGVudCwwKSxNbltyYV09Ym8sam4ucHVzaChibyl9fSkoam4sTXMsVGEsbDAsbm4se30sYTEsbXIpLGZ1bmN0aW9uIEV0KG1uLERuLHduKXtmb3IodmFyIFV0PTAsbm49MCxNbj0wLGpuPTAsbXI9MCx6cj13bi5sZW5ndGgsb2k9W10sdGk9W107VXQ8enI7KytVdClvaVtVdF09dGlbVXRdPVV0''@;'; put 'put ''LERuW1V0XT13bltVdF07Zm9yKDttcjx0aS5sZW5ndGg7Kyttcilubj1tbltVdD10aVttcl1dLkwsTW49bW5bVXRdLlIsam49bW5bVXRdLkMsb2lbVXRdPT09VXQmJigtMSE9PW5uJiZvaVtubl0hPT1ubiYmKG9pW1V0XT1vaVtubl0pLC0xIT09TW4mJm9pW01uXSE9PU1uJiYob2lbVXRdPW9p''@;'; put 'put ''W01uXSkpLC0xIT09am4mJihvaVtqbl09VXQpLC0xIT09bm4mJlV0IT1vaVtVdF0mJihvaVtubl09b2lbVXRdLHRpLmxhc3RJbmRleE9mKG5uKTxtciYmdGkucHVzaChubikpLC0xIT09TW4mJlV0IT1vaVtVdF0mJihvaVtNbl09b2lbVXRdLHRpLmxhc3RJbmRleE9mKE1uKTxtciYmdGkucHVz''@;'; put 'put ''aChNbikpO2ZvcihVdD0xO1V0PHpyOysrVXQpb2lbVXRdPT09VXQmJigtMSE9PU1uJiZvaVtNbl0hPT1Nbj9vaVtVdF09b2lbTW5dOi0xIT09bm4mJm9pW25uXSE9PW5uJiYob2lbVXRdPW9pW25uXSkpO2ZvcihVdD0xO1V0PHpyOysrVXQpaWYoMCE9PW1uW1V0XS50eXBlKXtpZigobXI9VXQp''@;'; put 'put ''IT1vaVttcl0pZG97RG5bVXRdPURuW21yPW9pW21yXV0rIi8iK0RuW1V0XX13aGlsZSgwIT09bXImJi0xIT09b2lbbXJdJiZtciE9b2lbbXJdKTtvaVtVdF09LTF9Zm9yKERuWzBdKz0iLyIsVXQ9MTtVdDx6cjsrK1V0KTIhPT1tbltVdF0udHlwZSYmKERuW1V0XSs9Ii8iKX0oYTEsTjgsbDAp''@;'; put 'put ''LGwwLnNoaWZ0KCk7dmFyICQ1PXtGaWxlSW5kZXg6YTEsRnVsbFBhdGhzOk44fTtyZXR1cm4gRG4mJkRuLnJhdyYmKCQ1LnJhdz17aGVhZGVyOlppLHNlY3RvcnM6VGF9KSwkNX1mdW5jdGlvbiBvdChtbixEbix3bil7Zm9yKHZhciBubj1tbi5zaXplLE1uPVtdLGpuPW1uLnN0YXJ0O3duJiZu''@;'; put 'put ''bj4wJiZqbj49MDspTW4ucHVzaChEbi5zbGljZShqbipncixqbipncitncikpLG5uLT1ncixqbj1Wcyh3biw0KmpuKTtyZXR1cm4gMD09PU1uLmxlbmd0aD9ibigwKTpqKE1uKS5zbGljZSgwLG1uLnNpemUpfWZ1bmN0aW9uIGJ0KG1uLERuLHduLFV0LG5uKXt2YXIgTW49dHI7aWYobW49PT10''@;'; put 'put ''cil7aWYoMCE9PURuKXRocm93IG5ldyBFcnJvcigiRElGQVQgY2hhaW4gc2hvcnRlciB0aGFuIGV4cGVjdGVkIil9ZWxzZSBpZigtMSE9PW1uKXt2YXIgam49d25bbW5dLG1yPShVdD4+PjIpLTE7aWYoIWpuKXJldHVybjtmb3IodmFyIHpyPTA7enI8bXImJihNbj1Wcyhqbiw0KnpyKSkhPT10''@;'; put 'put ''cjsrK3pyKW5uLnB1c2goTW4pO2J0KFZzKGpuLFV0LTQpLERuLTEsd24sVXQsbm4pfX1mdW5jdGlvbiBCdChtbixEbix3bixVdCxubil7dmFyIE1uPVtdLGpuPVtdO25ufHwobm49W10pO3ZhciBtcj1VdC0xLHpyPTAsb2k9MDtmb3IoenI9RG47enI+PTA7KXtublt6cl09ITAsTW5bTW4ubGVu''@;'; put 'put ''Z3RoXT16cixqbi5wdXNoKG1uW3pyXSk7dmFyIHRpPXduW01hdGguZmxvb3IoNCp6ci9VdCldO2lmKFV0PDQrKG9pPTQqenImbXIpKXRocm93IG5ldyBFcnJvcigiRkFUIGJvdW5kYXJ5IGNyb3NzZWQ6ICIrenIrIiA0ICIrVXQpO2lmKCFtblt0aV0pYnJlYWs7enI9VnMobW5bdGldLG9pKX1y''@;'; put 'put ''ZXR1cm57bm9kZXM6TW4sZGF0YTp5MChbam5dKX19ZnVuY3Rpb24gS3QobW4sRG4pe3JldHVybiBuZXcgRGF0ZSgxZTMqKHphKG1uLERuKzQpLzFlNypNYXRoLnBvdygyLDMyKSt6YShtbixEbikvMWU3LTExNjQ0NDczNjAwKSl9ZnVuY3Rpb24gU24obW4sRG4pe3ZhciB3bj1Ebnx8e30sVXQ9''@;'; put 'put ''d24ucm9vdHx8IlJvb3QgRW50cnkiO2lmKG1uLkZ1bGxQYXRoc3x8KG1uLkZ1bGxQYXRocz1bXSksbW4uRmlsZUluZGV4fHwobW4uRmlsZUluZGV4PVtdKSxtbi5GdWxsUGF0aHMubGVuZ3RoIT09bW4uRmlsZUluZGV4Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoImluY29uc2lzdGVudCBDRkIg''@;'; put 'put ''c3RydWN0dXJlIik7MD09PW1uLkZ1bGxQYXRocy5sZW5ndGgmJihtbi5GdWxsUGF0aHNbMF09VXQrIi8iLG1uLkZpbGVJbmRleFswXT17bmFtZTpVdCx0eXBlOjV9KSx3bi5DTFNJRCYmKG1uLkZpbGVJbmRleFswXS5jbHNpZD13bi5DTFNJRCksZnVuY3Rpb24gc3IobW4pe3ZhciBEbj0iXHgw''@;'; put 'put ''MVNoMzN0SjUiO2lmKCF2ZS5maW5kKG1uLCIvIitEbikpe3ZhciB3bj1ibig0KTt3blswXT01NSx3blsxXT13blszXT01MCx3blsyXT01NCxtbi5GaWxlSW5kZXgucHVzaCh7bmFtZTpEbix0eXBlOjIsY29udGVudDp3bixzaXplOjQsTDo2OSxSOjY5LEM6Njl9KSxtbi5GdWxsUGF0aHMucHVz''@;'; put 'put ''aChtbi5GdWxsUGF0aHNbMF0rRG4pLEpuKG1uKX19KG1uKX1mdW5jdGlvbiBKbihtbixEbil7U24obW4pO2Zvcih2YXIgd249ITEsVXQ9ITEsbm49bW4uRnVsbFBhdGhzLmxlbmd0aC0xO25uPj0wOy0tbm4pe3ZhciBNbj1tbi5GaWxlSW5kZXhbbm5dO3N3aXRjaChNbi50eXBlKXtjYXNlIDA6''@;'; put 'put ''VXQ/d249ITA6KG1uLkZpbGVJbmRleC5wb3AoKSxtbi5GdWxsUGF0aHMucG9wKCkpO2JyZWFrO2Nhc2UgMTpjYXNlIDI6Y2FzZSA1OlV0PSEwLGlzTmFOKE1uLlIqTW4uTCpNbi5DKSYmKHduPSEwKSxNbi5SPi0xJiZNbi5MPi0xJiZNbi5SPT1Nbi5MJiYod249ITApO2JyZWFrO2RlZmF1bHQ6''@;'; put 'put ''d249ITB9fWlmKHdufHxEbil7dmFyIGpuPW5ldyBEYXRlKDE5ODcsMSwxOSksbXI9MCx6cj1bXTtmb3Iobm49MDtubjxtbi5GdWxsUGF0aHMubGVuZ3RoOysrbm4pMCE9PW1uLkZpbGVJbmRleFtubl0udHlwZSYmenIucHVzaChbbW4uRnVsbFBhdGhzW25uXSxtbi5GaWxlSW5kZXhbbm5dXSk7''@;'; put 'put ''Zm9yKG5uPTA7bm48enIubGVuZ3RoOysrbm4pe3ZhciBvaT1HKHpyW25uXVswXSk7Zm9yKFV0PSExLG1yPTA7bXI8enIubGVuZ3RoOysrbXIpenJbbXJdWzBdPT09b2kmJihVdD0hMCk7VXR8fHpyLnB1c2goW29pLHtuYW1lOlEob2kpLnJlcGxhY2UoIi8iLCIiKSx0eXBlOjEsY2xzaWQ6aW8s''@;'; put 'put ''Y3Q6am4sbXQ6am4sY29udGVudDpudWxsfV0pfWZvcih6ci5zb3J0KGZ1bmN0aW9uKFppLHJhKXtyZXR1cm4gZnVuY3Rpb24gayhtbixEbil7Zm9yKHZhciB3bj1tbi5zcGxpdCgiLyIpLFV0PURuLnNwbGl0KCIvIiksbm49MCxNbj0wLGpuPU1hdGgubWluKHduLmxlbmd0aCxVdC5sZW5ndGgp''@;'; put 'put ''O25uPGpuOysrbm4pe2lmKE1uPXduW25uXS5sZW5ndGgtVXRbbm5dLmxlbmd0aClyZXR1cm4gTW47aWYod25bbm5dIT1VdFtubl0pcmV0dXJuIHduW25uXTxVdFtubl0/LTE6MX1yZXR1cm4gd24ubGVuZ3RoLVV0Lmxlbmd0aH0oWmlbMF0scmFbMF0pfSksbW4uRnVsbFBhdGhzPVtdLG1uLkZp''@;'; put 'put ''bGVJbmRleD1bXSxubj0wO25uPHpyLmxlbmd0aDsrK25uKW1uLkZ1bGxQYXRoc1tubl09enJbbm5dWzBdLG1uLkZpbGVJbmRleFtubl09enJbbm5dWzFdO2Zvcihubj0wO25uPHpyLmxlbmd0aDsrK25uKXt2YXIgdGk9bW4uRmlsZUluZGV4W25uXSxKaT1tbi5GdWxsUGF0aHNbbm5dO2lmKHRp''@;'; put 'put ''Lm5hbWU9UShKaSkucmVwbGFjZSgiLyIsIiIpLHRpLkw9dGkuUj10aS5DPS0odGkuY29sb3I9MSksdGkuc2l6ZT10aS5jb250ZW50P3RpLmNvbnRlbnQubGVuZ3RoOjAsdGkuc3RhcnQ9MCx0aS5jbHNpZD10aS5jbHNpZHx8aW8sMD09PW5uKXRpLkM9enIubGVuZ3RoPjE/MTotMSx0aS5zaXpl''@;'; put 'put ''PTAsdGkudHlwZT01O2Vsc2UgaWYoIi8iPT1KaS5zbGljZSgtMSkpe2Zvcihtcj1ubisxO21yPHpyLmxlbmd0aCYmRyhtbi5GdWxsUGF0aHNbbXJdKSE9Smk7Kyttcik7Zm9yKHRpLkM9bXI+PXpyLmxlbmd0aD8tMTptcixtcj1ubisxO21yPHpyLmxlbmd0aCYmRyhtbi5GdWxsUGF0aHNbbXJd''@;'; put 'put ''KSE9RyhKaSk7Kyttcik7dGkuUj1tcj49enIubGVuZ3RoPy0xOm1yLHRpLnR5cGU9MX1lbHNlIEcobW4uRnVsbFBhdGhzW25uKzFdfHwiIik9PUcoSmkpJiYodGkuUj1ubisxKSx0aS50eXBlPTJ9fX1mdW5jdGlvbiBWbihtbixEbil7dmFyIHduPURufHx7fTtpZihKbihtbiksInppcCI9PXdu''@;'; put 'put ''LmZpbGVUeXBlKXJldHVybiBmdW5jdGlvbiBXYShtbixEbil7dmFyIHduPURufHx7fSxVdD1bXSxubj1bXSxNbj1ibigxKSxqbj13bi5jb21wcmVzc2lvbj84OjAsbXI9MCxvaT0wLHRpPTAsSmk9MCxaaT0wLHJhPW1uLkZ1bGxQYXRoc1swXSx6bz1yYSxibz1tbi5GaWxlSW5kZXhbMF0sVGE9''@;'; put 'put ''W10sTXM9MDtmb3Iob2k9MTtvaTxtbi5GdWxsUGF0aHMubGVuZ3RoOysrb2kpaWYoem89bW4uRnVsbFBhdGhzW29pXS5zbGljZShyYS5sZW5ndGgpLChibz1tbi5GaWxlSW5kZXhbb2ldKS5zaXplJiZiby5jb250ZW50JiYiXHgwMVNoMzN0SjUiIT16byl7dmFyIG8xPUppLGwwPWJuKHpvLmxl''@;'; put 'put ''bmd0aCk7Zm9yKHRpPTA7dGk8em8ubGVuZ3RoOysrdGkpbDAud3JpdGVfc2hpZnQoMSwxMjcmem8uY2hhckNvZGVBdCh0aSkpO2wwPWwwLnNsaWNlKDAsbDAubCksVGFbWmldPU1lLmJ1Zihiby5jb250ZW50LDApO3ZhciBhMT1iby5jb250ZW50Ozg9PWpuJiYoYTE9QnIoYTEpKSwoTW49Ym4o''@;'; put 'put ''MzApKS53cml0ZV9zaGlmdCg0LDY3MzI0NzUyKSxNbi53cml0ZV9zaGlmdCgyLDIwKSxNbi53cml0ZV9zaGlmdCgyLG1yKSxNbi53cml0ZV9zaGlmdCgyLGpuKSxiby5tdD9hZShNbixiby5tdCk6TW4ud3JpdGVfc2hpZnQoNCwwKSxNbi53cml0ZV9zaGlmdCgtNCw4Jm1yPzA6VGFbWmldKSxN''@;'; put 'put ''bi53cml0ZV9zaGlmdCg0LDgmbXI/MDphMS5sZW5ndGgpLE1uLndyaXRlX3NoaWZ0KDQsOCZtcj8wOmJvLmNvbnRlbnQubGVuZ3RoKSxNbi53cml0ZV9zaGlmdCgyLGwwLmxlbmd0aCksTW4ud3JpdGVfc2hpZnQoMiwwKSxKaSs9TW4ubGVuZ3RoLFV0LnB1c2goTW4pLEppKz1sMC5sZW5ndGgs''@;'; put 'put ''VXQucHVzaChsMCksSmkrPWExLmxlbmd0aCxVdC5wdXNoKGExKSw4Jm1yJiYoKE1uPWJuKDEyKSkud3JpdGVfc2hpZnQoLTQsVGFbWmldKSxNbi53cml0ZV9zaGlmdCg0LGExLmxlbmd0aCksTW4ud3JpdGVfc2hpZnQoNCxiby5jb250ZW50Lmxlbmd0aCksSmkrPU1uLmwsVXQucHVzaChNbikp''@;'; put 'put ''LChNbj1ibig0NikpLndyaXRlX3NoaWZ0KDQsMzM2MzkyNDgpLE1uLndyaXRlX3NoaWZ0KDIsMCksTW4ud3JpdGVfc2hpZnQoMiwyMCksTW4ud3JpdGVfc2hpZnQoMixtciksTW4ud3JpdGVfc2hpZnQoMixqbiksTW4ud3JpdGVfc2hpZnQoNCwwKSxNbi53cml0ZV9zaGlmdCgtNCxUYVtaaV0p''@;'; put 'put ''LE1uLndyaXRlX3NoaWZ0KDQsYTEubGVuZ3RoKSxNbi53cml0ZV9zaGlmdCg0LGJvLmNvbnRlbnQubGVuZ3RoKSxNbi53cml0ZV9zaGlmdCgyLGwwLmxlbmd0aCksTW4ud3JpdGVfc2hpZnQoMiwwKSxNbi53cml0ZV9zaGlmdCgyLDApLE1uLndyaXRlX3NoaWZ0KDIsMCksTW4ud3JpdGVfc2hp''@;'; put 'put ''ZnQoMiwwKSxNbi53cml0ZV9zaGlmdCg0LDApLE1uLndyaXRlX3NoaWZ0KDQsbzEpLE1zKz1Nbi5sLG5uLnB1c2goTW4pLE1zKz1sMC5sZW5ndGgsbm4ucHVzaChsMCksKytaaX1yZXR1cm4oTW49Ym4oMjIpKS53cml0ZV9zaGlmdCg0LDEwMTAxMDI1NiksTW4ud3JpdGVfc2hpZnQoMiwwKSxN''@;'; put 'put ''bi53cml0ZV9zaGlmdCgyLDApLE1uLndyaXRlX3NoaWZ0KDIsWmkpLE1uLndyaXRlX3NoaWZ0KDIsWmkpLE1uLndyaXRlX3NoaWZ0KDQsTXMpLE1uLndyaXRlX3NoaWZ0KDQsSmkpLE1uLndyaXRlX3NoaWZ0KDIsMCksaihbaihVdCksaihubiksTW5dKX0obW4sd24pO3ZhciBVdD1mdW5jdGlv''@;'; put 'put ''bihyYSl7Zm9yKHZhciB6bz0wLGJvPTAsVGE9MDtUYTxyYS5GaWxlSW5kZXgubGVuZ3RoOysrVGEpe3ZhciBNcz1yYS5GaWxlSW5kZXhbVGFdO2lmKE1zLmNvbnRlbnQpe3ZhciBvMT1Ncy5jb250ZW50Lmxlbmd0aDtvMT4wJiYobzE8NDA5Nj96bys9bzErNjM+PjY6Ym8rPW8xKzUxMT4+OSl9''@;'; put 'put ''fWZvcih2YXIgbDA9cmEuRnVsbFBhdGhzLmxlbmd0aCszPj4yLE44PXpvKzEyNz4+NywkNT0oem8rNz4+MykrYm8rbDArTjgsSzU9JDUrMTI3Pj43LHhlPUs1PD0xMDk/MDpNYXRoLmNlaWwoKEs1LTEwOSkvMTI3KTskNStLNSt4ZSsxMjc+Pjc+SzU7KXhlPSsrSzU8PTEwOT8wOk1hdGguY2Vp''@;'; put 'put ''bCgoSzUtMTA5KS8xMjcpO3ZhciBjaD1bMSx4ZSxLNSxOOCxsMCxibyx6bywwXTtyZXR1cm4gcmEuRmlsZUluZGV4WzBdLnNpemU9em88PDYsY2hbN109KHJhLkZpbGVJbmRleFswXS5zdGFydD1jaFswXStjaFsxXStjaFsyXStjaFszXStjaFs0XStjaFs1XSkrKGNoWzZdKzc+PjMpLGNofSht''@;'; put 'put ''biksbm49Ym4oVXRbN108PDkpLE1uPTAsam49MDtmb3IoTW49MDtNbjw4OysrTW4pbm4ud3JpdGVfc2hpZnQoMSxGaVtNbl0pO2ZvcihNbj0wO01uPDg7KytNbilubi53cml0ZV9zaGlmdCgyLDApO2Zvcihubi53cml0ZV9zaGlmdCgyLDYyKSxubi53cml0ZV9zaGlmdCgyLDMpLG5uLndyaXRl''@;'; put 'put ''X3NoaWZ0KDIsNjU1MzQpLG5uLndyaXRlX3NoaWZ0KDIsOSksbm4ud3JpdGVfc2hpZnQoMiw2KSxNbj0wO01uPDM7KytNbilubi53cml0ZV9zaGlmdCgyLDApO2Zvcihubi53cml0ZV9zaGlmdCg0LDApLG5uLndyaXRlX3NoaWZ0KDQsVXRbMl0pLG5uLndyaXRlX3NoaWZ0KDQsVXRbMF0rVXRb''@;'; put 'put ''MV0rVXRbMl0rVXRbM10tMSksbm4ud3JpdGVfc2hpZnQoNCwwKSxubi53cml0ZV9zaGlmdCg0LDQwOTYpLG5uLndyaXRlX3NoaWZ0KDQsVXRbM10/VXRbMF0rVXRbMV0rVXRbMl0tMTp0ciksbm4ud3JpdGVfc2hpZnQoNCxVdFszXSksbm4ud3JpdGVfc2hpZnQoLTQsVXRbMV0/VXRbMF0tMTp0''@;'; put 'put ''ciksbm4ud3JpdGVfc2hpZnQoNCxVdFsxXSksTW49MDtNbjwxMDk7KytNbilubi53cml0ZV9zaGlmdCgtNCxNbjxVdFsyXT9VdFsxXStNbjotMSk7aWYoVXRbMV0pZm9yKGpuPTA7am48VXRbMV07Kytqbil7Zm9yKDtNbjwyMzYrMTI3KmpuOysrTW4pbm4ud3JpdGVfc2hpZnQoLTQsTW48VXRb''@;'; put 'put ''Ml0/VXRbMV0rTW46LTEpO25uLndyaXRlX3NoaWZ0KC00LGpuPT09VXRbMV0tMT90cjpqbisxKX12YXIgbXI9ZnVuY3Rpb24ocmEpe2Zvcihqbis9cmE7TW48am4tMTsrK01uKW5uLndyaXRlX3NoaWZ0KC00LE1uKzEpO3JhJiYoKytNbixubi53cml0ZV9zaGlmdCgtNCx0cikpfTtmb3Ioam49''@;'; put 'put ''TW49MCxqbis9VXRbMV07TW48am47KytNbilubi53cml0ZV9zaGlmdCgtNCx1by5ESUZTRUNUKTtmb3Ioam4rPVV0WzJdO01uPGpuOysrTW4pbm4ud3JpdGVfc2hpZnQoLTQsdW8uRkFUU0VDVCk7bXIoVXRbM10pLG1yKFV0WzRdKTtmb3IodmFyIHpyPTAsb2k9MCx0aT1tbi5GaWxlSW5kZXhb''@;'; put 'put ''MF07enI8bW4uRmlsZUluZGV4Lmxlbmd0aDsrK3pyKSh0aT1tbi5GaWxlSW5kZXhbenJdKS5jb250ZW50JiYhKChvaT10aS5jb250ZW50Lmxlbmd0aCk8NDA5NikmJih0aS5zdGFydD1qbixtcihvaSs1MTE+PjkpKTtmb3IobXIoVXRbNl0rNz4+Myk7NTExJm5uLmw7KW5uLndyaXRlX3NoaWZ0''@;'; put 'put ''KC00LHVvLkVORE9GQ0hBSU4pO2Zvcihqbj1Nbj0wLHpyPTA7enI8bW4uRmlsZUluZGV4Lmxlbmd0aDsrK3pyKSh0aT1tbi5GaWxlSW5kZXhbenJdKS5jb250ZW50JiYob2k9dGkuY29udGVudC5sZW5ndGgpJiYhKG9pPj00MDk2KSYmKHRpLnN0YXJ0PWpuLG1yKG9pKzYzPj42KSk7Zm9yKDs1''@;'; put 'put ''MTEmbm4ubDspbm4ud3JpdGVfc2hpZnQoLTQsdW8uRU5ET0ZDSEFJTik7Zm9yKE1uPTA7TW48VXRbNF08PDI7KytNbil7dmFyIEppPW1uLkZ1bGxQYXRoc1tNbl07aWYoSmkmJjAhPT1KaS5sZW5ndGgpe3RpPW1uLkZpbGVJbmRleFtNbl0sMD09PU1uJiYodGkuc3RhcnQ9dGkuc2l6ZT90aS5z''@;'; put 'put ''dGFydC0xOnRyKTt2YXIgWmk9MD09PU1uJiZ3bi5yb290fHx0aS5uYW1lO2lmKG9pPTIqKFppLmxlbmd0aCsxKSxubi53cml0ZV9zaGlmdCg2NCxaaSwidXRmMTZsZSIpLG5uLndyaXRlX3NoaWZ0KDIsb2kpLG5uLndyaXRlX3NoaWZ0KDEsdGkudHlwZSksbm4ud3JpdGVfc2hpZnQoMSx0aS5j''@;'; put 'put ''b2xvciksbm4ud3JpdGVfc2hpZnQoLTQsdGkuTCksbm4ud3JpdGVfc2hpZnQoLTQsdGkuUiksbm4ud3JpdGVfc2hpZnQoLTQsdGkuQyksdGkuY2xzaWQpbm4ud3JpdGVfc2hpZnQoMTYsdGkuY2xzaWQsImhleCIpO2Vsc2UgZm9yKHpyPTA7enI8NDsrK3pyKW5uLndyaXRlX3NoaWZ0KDQsMCk7''@;'; put 'put ''bm4ud3JpdGVfc2hpZnQoNCx0aS5zdGF0ZXx8MCksbm4ud3JpdGVfc2hpZnQoNCwwKSxubi53cml0ZV9zaGlmdCg0LDApLG5uLndyaXRlX3NoaWZ0KDQsMCksbm4ud3JpdGVfc2hpZnQoNCwwKSxubi53cml0ZV9zaGlmdCg0LHRpLnN0YXJ0KSxubi53cml0ZV9zaGlmdCg0LHRpLnNpemUpLG5u''@;'; put 'put ''LndyaXRlX3NoaWZ0KDQsMCl9ZWxzZXtmb3IoenI9MDt6cjwxNzsrK3pyKW5uLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKHpyPTA7enI8MzsrK3pyKW5uLndyaXRlX3NoaWZ0KDQsLTEpO2Zvcih6cj0wO3pyPDEyOysrenIpbm4ud3JpdGVfc2hpZnQoNCwwKX19Zm9yKE1uPTE7TW48bW4uRmlsZUlu''@;'; put 'put ''ZGV4Lmxlbmd0aDsrK01uKWlmKCh0aT1tbi5GaWxlSW5kZXhbTW5dKS5zaXplPj00MDk2KXtmb3Iobm4ubD10aS5zdGFydCsxPDw5LHpyPTA7enI8dGkuc2l6ZTsrK3pyKW5uLndyaXRlX3NoaWZ0KDEsdGkuY29udGVudFt6cl0pO2Zvcig7NTExJnpyOysrenIpbm4ud3JpdGVfc2hpZnQoMSww''@;'; put 'put ''KX1mb3IoTW49MTtNbjxtbi5GaWxlSW5kZXgubGVuZ3RoOysrTW4paWYoKHRpPW1uLkZpbGVJbmRleFtNbl0pLnNpemU+MCYmdGkuc2l6ZTw0MDk2KXtmb3IoenI9MDt6cjx0aS5zaXplOysrenIpbm4ud3JpdGVfc2hpZnQoMSx0aS5jb250ZW50W3pyXSk7Zm9yKDs2MyZ6cjsrK3pyKW5uLndy''@;'; put 'put ''aXRlX3NoaWZ0KDEsMCl9Zm9yKDtubi5sPG5uLmxlbmd0aDspbm4ud3JpdGVfc2hpZnQoMSwwKTtyZXR1cm4gbm59Ui52ZXJzaW9uPSIxLjEuNCI7dmFyIFZyLGdyPTY0LHRyPS0yLENpPSJkMGNmMTFlMGExYjExYWUxIixGaT1bMjA4LDIwNywxNywyMjQsMTYxLDE3NywyNiwyMjVdLGlvPSIw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsdW89e01BWFJFR1NFQ1Q6LTYsRElGU0VDVDotNCxGQVRTRUNUOi0zLEVORE9GQ0hBSU46dHIsRlJFRVNFQ1Q6LTEsSEVBREVSX1NJR05BVFVSRTpDaSxIRUFERVJfTUlOT1JfVkVSU0lPTjoiM2UwMCIsTUFYUkVHU0lEOi02LE5PU1RS''@;'; put 'put ''RUFNOi0xLEhFQURFUl9DTFNJRDppbyxFbnRyeVR5cGVzOlsidW5rbm93biIsInN0b3JhZ2UiLCJzdHJlYW0iLCJsb2NrYnl0ZXMiLCJwcm9wZXJ0eSIsInJvb3QiXX07ZnVuY3Rpb24gRHIobW4pe2Zvcih2YXIgRG49bmV3IEFycmF5KG1uLmxlbmd0aCksd249MDt3bjxtbi5sZW5ndGg7Kyt3''@;'; put 'put ''bilEblt3bl09U3RyaW5nLmZyb21DaGFyQ29kZShtblt3bl0pO3JldHVybiBEbi5qb2luKCIiKX1mdW5jdGlvbiBCcihtbil7cmV0dXJuIFZyP1ZyLmRlZmxhdGVSYXdTeW5jKG1uKTpabChtbil9Zm9yKHZhciBtbixEbixXaT1bMTYsMTcsMTgsMCw4LDcsOSw2LDEwLDUsMTEsNCwxMiwzLDEz''@;'; put 'put ''LDIsMTQsMSwxNV0sYmk9WzMsNCw1LDYsNyw4LDksMTAsMTEsMTMsMTUsMTcsMTksMjMsMjcsMzEsMzUsNDMsNTEsNTksNjcsODMsOTksMTE1LDEzMSwxNjMsMTk1LDIyNywyNThdLHdvPVsxLDIsMyw0LDUsNyw5LDEzLDE3LDI1LDMzLDQ5LDY1LDk3LDEyOSwxOTMsMjU3LDM4NSw1MTMsNzY5''@;'; put 'put ''LDEwMjUsMTUzNywyMDQ5LDMwNzMsNDA5Nyw2MTQ1LDgxOTMsMTIyODksMTYzODUsMjQ1NzddLGFvPXR5cGVvZiBVaW50OEFycmF5PCJ1IixSYT1hbz9uZXcgVWludDhBcnJheSgyNTYpOltdLFBvPTA7UG88MjU2OysrUG8pUmFbUG9dPSh2b2lkIDAsMjU1JigoRG49MTM5NTM2JigobW49UG8p''@;'; put 'put ''PDwxfG1uPDwxMSl8NTU4MTQ0Jihtbjw8NXxtbjw8MTUpKT4+MTZ8RG4+Pjh8RG4pKTtmdW5jdGlvbiBoYShtbixEbil7dmFyIHduPVJhWzI1NSZtbl07cmV0dXJuIERuPD04P3duPj4+OC1Ebjood249d248PDh8UmFbbW4+PjgmMjU1XSxEbjw9MTY/d24+Pj4xNi1Ebjood249d248PDh8UmFb''@;'; put 'put ''bW4+PjE2JjI1NV0pPj4+MjQtRG4pfWZ1bmN0aW9uIEpvKG1uLERuKXt2YXIgd249NyZEbixVdD1Ebj4+PjM7cmV0dXJuKG1uW1V0XXwod248PTY/MDptbltVdCsxXTw8OCkpPj4+d24mM31mdW5jdGlvbiBqaShtbixEbil7dmFyIHduPTcmRG4sVXQ9RG4+Pj4zO3JldHVybihtbltVdF18KHdu''@;'; put 'put ''PD01PzA6bW5bVXQrMV08PDgpKT4+PnduJjd9ZnVuY3Rpb24gRm4obW4sRG4pe3ZhciB3bj03JkRuLFV0PURuPj4+MztyZXR1cm4obW5bVXRdfCh3bjw9Mz8wOm1uW1V0KzFdPDw4KSk+Pj53biYzMX1mdW5jdGlvbiBaYShtbixEbil7dmFyIHduPTcmRG4sVXQ9RG4+Pj4zO3JldHVybihtbltV''@;'; put 'put ''dF18KHduPD0xPzA6bW5bVXQrMV08PDgpKT4+PnduJjEyN31mdW5jdGlvbiBkcihtbixEbix3bil7dmFyIFV0PTcmRG4sbm49RG4+Pj4zLGpuPW1uW25uXT4+PlV0O3JldHVybiB3bjw4LVV0fHwoam58PW1uW25uKzFdPDw4LVV0LHduPDE2LVV0KXx8KGpufD1tbltubisyXTw8MTYtVXQsd248''@;'; put 'put ''MjQtVXQpfHwoam58PW1uW25uKzNdPDwyNC1VdCksam4mKDE8PHduKS0xfWZ1bmN0aW9uIHFsKG1uLERuKXt2YXIgd249bW4ubGVuZ3RoLFV0PTIqd24+RG4/Mip3bjpEbis1LG5uPTA7aWYod24+PURuKXJldHVybiBtbjtpZihUZSl7dmFyIE1uPXAoVXQpO2lmKG1uLmNvcHkpbW4uY29weShN''@;'; put 'put ''bik7ZWxzZSBmb3IoO25uPG1uLmxlbmd0aDsrK25uKU1uW25uXT1tbltubl07cmV0dXJuIE1ufWlmKGFvKXt2YXIgam49bmV3IFVpbnQ4QXJyYXkoVXQpO2lmKGpuLnNldClqbi5zZXQobW4pO2Vsc2UgZm9yKDtubjxtbi5sZW5ndGg7Kytubilqbltubl09bW5bbm5dO3JldHVybiBqbn1yZXR1''@;'; put 'put ''cm4gbW4ubGVuZ3RoPVV0LG1ufWZ1bmN0aW9uIFVsKG1uKXtmb3IodmFyIERuPW5ldyBBcnJheShtbiksd249MDt3bjxtbjsrK3duKURuW3duXT0wO3JldHVybiBEbn12YXIgWmw9ZnVuY3Rpb24oKXt2YXIgbW49ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24od24sVXQpe2Zvcih2YXIgbm49''@;'; put 'put ''MDtubjx3bi5sZW5ndGg7KXt2YXIgTW49TWF0aC5taW4oNjU1MzUsd24ubGVuZ3RoLW5uKTtmb3IoVXQud3JpdGVfc2hpZnQoMSwrKG5uK01uPT13bi5sZW5ndGgpKSxVdC53cml0ZV9zaGlmdCgyLE1uKSxVdC53cml0ZV9zaGlmdCgyLDY1NTM1Jn5Nbik7TW4tLSA+MDspVXRbVXQubCsrXT13''@;'; put 'put ''bltubisrXX1yZXR1cm4gVXQubH19KCk7cmV0dXJuIGZ1bmN0aW9uKERuKXt2YXIgd249Ym4oNTArTWF0aC5mbG9vcigxLjEqRG4ubGVuZ3RoKSksVXQ9bW4oRG4sd24pO3JldHVybiB3bi5zbGljZSgwLFV0KX19KCk7ZnVuY3Rpb24gYnUobW4sRG4sd24pe3ZhciBVdD0xLG5uPTAsTW49MCxq''@;'; put 'put ''bj0wLG1yPTAsenI9bW4ubGVuZ3RoLG9pPWFvP25ldyBVaW50MTZBcnJheSgzMik6VWwoMzIpO2ZvcihNbj0wO01uPDMyOysrTW4pb2lbTW5dPTA7Zm9yKE1uPXpyO01uPHduOysrTW4pbW5bTW5dPTA7enI9bW4ubGVuZ3RoO3ZhciB0aT1hbz9uZXcgVWludDE2QXJyYXkoenIpOlVsKHpyKTtm''@;'; put 'put ''b3IoTW49MDtNbjx6cjsrK01uKW9pW25uPW1uW01uXV0rKyxVdDxubiYmKFV0PW5uKSx0aVtNbl09MDtmb3Iob2lbMF09MCxNbj0xO01uPD1VdDsrK01uKW9pW01uKzE2XT1tcj1tcitvaVtNbi0xXTw8MTtmb3IoTW49MDtNbjx6cjsrK01uKTAhPShtcj1tbltNbl0pJiYodGlbTW5dPW9pW21y''@;'; put 'put ''KzE2XSsrKTt2YXIgSmk9MDtmb3IoTW49MDtNbjx6cjsrK01uKWlmKDAhPShKaT1tbltNbl0pKWZvcihtcj1oYSh0aVtNbl0sVXQpPj5VdC1KaSxqbj0oMTw8VXQrNC1KaSktMTtqbj49MDstLWpuKURuW21yfGpuPDxKaV09MTUmSml8TW48PDQ7cmV0dXJuIFV0fXZhciBDbD1hbz9uZXcgVWlu''@;'; put 'put ''dDE2QXJyYXkoNTEyKTpVbCg1MTIpLGxuPWFvP25ldyBVaW50MTZBcnJheSgzMik6VWwoMzIpO2lmKCFhbyl7Zm9yKHZhciBFbj0wO0VuPDUxMjsrK0VuKUNsW0VuXT0wO2ZvcihFbj0wO0VuPDMyOysrRW4pbG5bRW5dPTB9IWZ1bmN0aW9uKCl7Zm9yKHZhciBtbj1bXSxEbj0wO0RuPDMyO0Ru''@;'; put 'put ''KyspbW4ucHVzaCg1KTtidShtbixsbiwzMik7dmFyIHduPVtdO2ZvcihEbj0wO0RuPD0xNDM7RG4rKyl3bi5wdXNoKDgpO2Zvcig7RG48PTI1NTtEbisrKXduLnB1c2goOSk7Zm9yKDtEbjw9Mjc5O0RuKyspd24ucHVzaCg3KTtmb3IoO0RuPD0yODc7RG4rKyl3bi5wdXNoKDgpO2J1KHduLENs''@;'; put 'put ''LDI4OCl9KCk7dmFyIHpuPWFvP25ldyBVaW50MTZBcnJheSgzMjc2OCk6VWwoMzI3NjgpLFNpPWFvP25ldyBVaW50MTZBcnJheSgzMjc2OCk6VWwoMzI3NjgpLGFyPWFvP25ldyBVaW50MTZBcnJheSgxMjgpOlVsKDEyOCksT2k9MSxDcj0xO2Z1bmN0aW9uIFBpKG1uLERuKXt2YXIgd249Rm4o''@;'; put 'put ''bW4sRG4pKzI1NyxVdD1GbihtbixEbis9NSkrMSxubj1mdW5jdGlvbiBJcyhtbixEbil7dmFyIHduPTcmRG4sVXQ9RG4+Pj4zO3JldHVybihtbltVdF18KHduPD00PzA6bW5bVXQrMV08PDgpKT4+PnduJjE1fShtbixEbis9NSkrNDtEbis9NDtmb3IodmFyIE1uPTAsam49YW8/bmV3IFVpbnQ4''@;'; put 'put ''QXJyYXkoMTkpOlVsKDE5KSxtcj1bMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMF0senI9MSxvaT1hbz9uZXcgVWludDhBcnJheSg4KTpVbCg4KSx0aT1hbz9uZXcgVWludDhBcnJheSg4KTpVbCg4KSxKaT1qbi5sZW5ndGgsWmk9MDtaaTxubjsrK1ppKWpuW1dpW1ppXV09''@;'; put 'put ''TW49amkobW4sRG4pLHpyPE1uJiYoenI9TW4pLG9pW01uXSsrLERuKz0zO3ZhciByYT0wO2ZvcihvaVswXT0wLFppPTE7Wmk8PXpyOysrWmkpdGlbWmldPXJhPXJhK29pW1ppLTFdPDwxO2ZvcihaaT0wO1ppPEppOysrWmkpMCE9KHJhPWpuW1ppXSkmJihtcltaaV09dGlbcmFdKyspO3ZhciB6''@;'; put 'put ''bz0wO2ZvcihaaT0wO1ppPEppOysrWmkpaWYoMCE9KHpvPWpuW1ppXSkpe3JhPVJhW21yW1ppXV0+Pjgtem87Zm9yKHZhciBibz0oMTw8Ny16byktMTtibz49MDstLWJvKWFyW3JhfGJvPDx6b109NyZ6b3xaaTw8M312YXIgVGE9W107Zm9yKHpyPTE7VGEubGVuZ3RoPHduK1V0Oylzd2l0Y2go''@;'; put 'put ''cmE9YXJbWmEobW4sRG4pXSxEbis9NyZyYSxyYT4+Pj0zKXtjYXNlIDE2OmZvcihNbj0zK0pvKG1uLERuKSxEbis9MixyYT1UYVtUYS5sZW5ndGgtMV07TW4tLSA+MDspVGEucHVzaChyYSk7YnJlYWs7Y2FzZSAxNzpmb3IoTW49MytqaShtbixEbiksRG4rPTM7TW4tLSA+MDspVGEucHVzaCgw''@;'; put 'put ''KTticmVhaztjYXNlIDE4OmZvcihNbj0xMStaYShtbixEbiksRG4rPTc7TW4tLSA+MDspVGEucHVzaCgwKTticmVhaztkZWZhdWx0OlRhLnB1c2gocmEpLHpyPHJhJiYoenI9cmEpfXZhciBNcz1UYS5zbGljZSgwLHduKSxvMT1UYS5zbGljZSh3bik7Zm9yKFppPXduO1ppPDI4NjsrK1ppKU1z''@;'; put 'put ''W1ppXT0wO2ZvcihaaT1VdDtaaTwzMDsrK1ppKW8xW1ppXT0wO3JldHVybiBPaT1idShNcyx6biwyODYpLENyPWJ1KG8xLFNpLDMwKSxEbn1mdW5jdGlvbiBIaShtbixEbil7dmFyIFV0PWZ1bmN0aW9uIFdvKG1uLERuKXtpZigzPT1tblswXSYmISgzJm1uWzFdKSlyZXR1cm5bVihEbiksMl07''@;'; put 'put ''Zm9yKHZhciB3bj0wLFV0PTAsbm49cChEbnx8MTw8MTgpLE1uPTAsam49bm4ubGVuZ3RoPj4+MCxtcj0wLHpyPTA7ISgxJlV0KTspaWYoVXQ9amkobW4sd24pLHduKz0zLFV0Pj4+MSlmb3IoVXQ+Pj4xPT0xPyhtcj05LHpyPTUpOih3bj1QaShtbix3biksbXI9T2ksenI9Q3IpLCFEbiYmam48''@;'; put 'put ''TW4rMzI3NjcmJihqbj0obm49cWwobm4sTW4rMzI3NjcpKS5sZW5ndGgpOzspe3ZhciB0aT1kcihtbix3bixtciksSmk9VXQ+Pj4xPT0xP0NsW3RpXTp6blt0aV07aWYod24rPTE1JkppLChKaT4+Pj00KT4+PjgmMjU1KXtpZigyNTY9PUppKWJyZWFrO3ZhciBaaT0oSmktPTI1Nyk8OD8wOkpp''@;'; put 'put ''LTQ+PjI7Wmk+NSYmKFppPTApO3ZhciByYT1NbitiaVtKaV07Wmk+MCYmKHJhKz1kcihtbix3bixaaSksd24rPVppKSx0aT1kcihtbix3bix6ciksd24rPTE1JihKaT1VdD4+PjE9PTE/bG5bdGldOlNpW3RpXSk7dmFyIHpvPShKaT4+Pj00KTw0PzA6SmktMj4+MSxibz13b1tKaV07Zm9yKHpv''@;'; put 'put ''PjAmJihibys9ZHIobW4sd24sem8pLHduKz16byksIURuJiZqbjxyYSYmKGpuPShubj1xbChubixyYSkpLmxlbmd0aCk7TW48cmE7KW5uW01uXT1ubltNbi1ib10sKytNbn1lbHNlIG5uW01uKytdPUppfWVsc2V7NyZ3biYmKHduKz04LSg3JnduKSk7dmFyIG9pPW1uW3duPj4+M118bW5bMSso''@;'; put 'put ''d24+Pj4zKV08PDg7aWYod24rPTMyLCFEbiYmam48TW4rb2kmJihqbj0obm49cWwobm4sTW4rb2kpKS5sZW5ndGgpLCJmdW5jdGlvbiI9PXR5cGVvZiBtbi5jb3B5KW1uLmNvcHkobm4sTW4sd24+Pj4zLCh3bj4+PjMpK29pKSxNbis9b2ksd24rPTgqb2k7ZWxzZSBmb3IoO29pLS0gPjA7KW5u''@;'; put 'put ''W01uKytdPW1uW3duPj4+M10sd24rPTh9cmV0dXJuW0RuP25uOm5uLnNsaWNlKDAsTW4pLHduKzc+Pj4zXX0obW4uc2xpY2UobW4ubHx8MCksRG4pO3JldHVybiBtbi5sKz1VdFsxXSxVdFswXX1mdW5jdGlvbiBtbyhtbixEbil7aWYoIW1uKXRocm93IG5ldyBFcnJvcihEbik7dHlwZW9mIGNv''@;'; put 'put ''bnNvbGU8InUiJiZjb25zb2xlLmVycm9yKERuKX1mdW5jdGlvbiBEaShtbixEbil7dmFyIHduPW1uO3ZuKHduLDApO3ZhciBNbj17RmlsZUluZGV4OltdLEZ1bGxQYXRoczpbXX07U24oTW4se3Jvb3Q6RG4ucm9vdH0pO2Zvcih2YXIgam49d24ubGVuZ3RoLTQ7KDgwIT13bltqbl18fDc1IT13''@;'; put 'put ''bltqbisxXXx8NSE9d25bam4rMl18fDYhPXduW2puKzNdKSYmam4+PTA7KS0tam47d24ubD1qbis0LHduLmwrPTQ7dmFyIG1yPXduLnJlYWRfc2hpZnQoMik7d24ubCs9Njt2YXIgenI9d24ucmVhZF9zaGlmdCg0KTtmb3Iod24ubD16cixqbj0wO2puPG1yOysram4pe3duLmwrPTIwO3ZhciBv''@;'; put 'put ''aT13bi5yZWFkX3NoaWZ0KDQpLHRpPXduLnJlYWRfc2hpZnQoNCksSmk9d24ucmVhZF9zaGlmdCgyKSxaaT13bi5yZWFkX3NoaWZ0KDIpLHJhPXduLnJlYWRfc2hpZnQoMik7d24ubCs9ODt2YXIgem89d24ucmVhZF9zaGlmdCg0KSxibz1wZSh3bi5zbGljZSh3bi5sK0ppLHduLmwrSmkrWmkp''@;'; put 'put ''KTt3bi5sKz1KaStaaStyYTt2YXIgVGE9d24ubDt3bi5sPXpvKzQsYXMod24sb2ksdGksTW4sYm8pLHduLmw9VGF9cmV0dXJuIE1ufWZ1bmN0aW9uIGFzKG1uLERuLHduLFV0LG5uKXttbi5sKz0yO3ZhciBNbj1tbi5yZWFkX3NoaWZ0KDIpLGpuPW1uLnJlYWRfc2hpZnQoMiksbXI9ZnVuY3Rp''@;'; put 'put ''b24gZ2UobW4pe3ZhciBEbj02NTUzNSZtbi5yZWFkX3NoaWZ0KDIpLHduPTY1NTM1Jm1uLnJlYWRfc2hpZnQoMiksVXQ9bmV3IERhdGUsbm49MzEmd24sTW49MTUmKHduPj4+PTUpO3duPj4+PTQsVXQuc2V0TWlsbGlzZWNvbmRzKDApLFV0LnNldEZ1bGxZZWFyKHduKzE5ODApLFV0LnNldE1v''@;'; put 'put ''bnRoKE1uLTEpLFV0LnNldERhdGUobm4pO3ZhciBqbj0zMSZEbixtcj02MyYoRG4+Pj49NSk7cmV0dXJuIFV0LnNldEhvdXJzKERuPj4+PTYpLFV0LnNldE1pbnV0ZXMobXIpLFV0LnNldFNlY29uZHMoam48PDEpLFV0fShtbik7aWYoODI1NyZNbil0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9y''@;'; put 'put ''dGVkIFpJUCBlbmNyeXB0aW9uIik7Zm9yKHZhciB6cj1tbi5yZWFkX3NoaWZ0KDQpLG9pPW1uLnJlYWRfc2hpZnQoNCksdGk9bW4ucmVhZF9zaGlmdCg0KSxKaT1tbi5yZWFkX3NoaWZ0KDIpLFppPW1uLnJlYWRfc2hpZnQoMikscmE9IiIsem89MDt6bzxKaTsrK3pvKXJhKz1TdHJpbmcuZnJv''@;'; put 'put ''bUNoYXJDb2RlKG1uW21uLmwrK10pO2lmKFppKXt2YXIgYm89cGUobW4uc2xpY2UobW4ubCxtbi5sK1ppKSk7KGJvWzIxNTg5XXx8e30pLm10JiYobXI9Ym9bMjE1ODldLm10KSwoKG5ufHx7fSlbMjE1ODldfHx7fSkubXQmJihtcj1ublsyMTU4OV0ubXQpfW1uLmwrPVppO3ZhciBUYT1tbi5z''@;'; put 'put ''bGljZShtbi5sLG1uLmwrb2kpO3N3aXRjaChqbil7Y2FzZSA4OlRhPWZ1bmN0aW9uIEhuKG1uLERuKXtpZighVnIpcmV0dXJuIEhpKG1uLERuKTt2YXIgVXQ9bmV3KDAsVnIuSW5mbGF0ZVJhdyksbm49VXQuX3Byb2Nlc3NDaHVuayhtbi5zbGljZShtbi5sKSxVdC5fZmluaXNoRmx1c2hGbGFn''@;'; put 'put ''KTtyZXR1cm4gbW4ubCs9VXQuYnl0ZXNSZWFkLG5ufShtbix0aSk7YnJlYWs7Y2FzZSAwOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBaSVAgQ29tcHJlc3Npb24gbWV0aG9kICIram4pfXZhciBNcz0hMTs4Jk1uJiYoMTM0Njk1NzYwPT0oenI9bW4ucmVhZF9z''@;'; put 'put ''aGlmdCg0KSkmJih6cj1tbi5yZWFkX3NoaWZ0KDQpLE1zPSEwKSxvaT1tbi5yZWFkX3NoaWZ0KDQpLHRpPW1uLnJlYWRfc2hpZnQoNCkpLG9pIT1EbiYmbW8oTXMsIkJhZCBjb21wcmVzc2VkIHNpemU6ICIrRG4rIiAhPSAiK29pKSx0aSE9d24mJm1vKE1zLCJCYWQgdW5jb21wcmVzc2VkIHNp''@;'; put 'put ''emU6ICIrd24rIiAhPSAiK3RpKTt2YXIgbzE9TWUuYnVmKFRhLDApOygwfHpyKSE9KDB8bzEpJiZtbyhNcywiQmFkIENSQzMyIGNoZWNrc3VtOiAiK3pyKyIgIT0gIitvMSkseXUoVXQscmEsVGEse3Vuc2FmZTohMCxtdDptcn0pfWZ1bmN0aW9uIHl1KG1uLERuLHduLFV0KXt2YXIgbm49VXQm''@;'; put 'put ''JlV0LnVuc2FmZTtubnx8U24obW4pO3ZhciBNbj0hbm4mJnZlLmZpbmQobW4sRG4pO2lmKCFNbil7dmFyIGpuPW1uLkZ1bGxQYXRoc1swXTtEbi5zbGljZSgwLGpuLmxlbmd0aCk9PWpuP2puPURuOigiLyIhPWpuLnNsaWNlKC0xKSYmKGpuKz0iLyIpLGpuPShqbitEbikucmVwbGFjZSgiLy8i''@;'; put 'put ''LCIvIikpLE1uPXtuYW1lOlEoRG4pLHR5cGU6Mn0sbW4uRmlsZUluZGV4LnB1c2goTW4pLG1uLkZ1bGxQYXRocy5wdXNoKGpuKSxubnx8dmUudXRpbHMuY2ZiX2djKG1uKX1yZXR1cm4gTW4uY29udGVudD13bixNbi5zaXplPXduP3duLmxlbmd0aDowLFV0JiYoVXQuQ0xTSUQmJihNbi5jbHNp''@;'; put 'put ''ZD1VdC5DTFNJRCksVXQubXQmJihNbi5tdD1VdC5tdCksVXQuY3QmJihNbi5jdD1VdC5jdCkpLE1ufXJldHVybiBSLmZpbmQ9ZnVuY3Rpb24gdXIobW4sRG4pe3ZhciB3bj1tbi5GdWxsUGF0aHMubWFwKGZ1bmN0aW9uKHpyKXtyZXR1cm4genIudG9VcHBlckNhc2UoKX0pLFV0PXduLm1hcChm''@;'; put 'put ''dW5jdGlvbih6cil7dmFyIG9pPXpyLnNwbGl0KCIvIik7cmV0dXJuIG9pW29pLmxlbmd0aC0oIi8iPT16ci5zbGljZSgtMSk/MjoxKV19KSxubj0hMTs0Nz09PURuLmNoYXJDb2RlQXQoMCk/KG5uPSEwLERuPXduWzBdLnNsaWNlKDAsLTEpK0RuKTpubj0tMSE9PURuLmluZGV4T2YoIi8iKTt2''@;'; put 'put ''YXIgTW49RG4udG9VcHBlckNhc2UoKSxqbj0hMD09PW5uP3duLmluZGV4T2YoTW4pOlV0LmluZGV4T2YoTW4pO2lmKC0xIT09am4pcmV0dXJuIG1uLkZpbGVJbmRleFtqbl07dmFyIG1yPSFNbi5tYXRjaChtKTtmb3IoTW49TW4ucmVwbGFjZShFLCIiKSxtciYmKE1uPU1uLnJlcGxhY2UobSwi''@;'; put 'put ''ISIpKSxqbj0wO2puPHduLmxlbmd0aDsrK2puKWlmKChtcj93bltqbl0ucmVwbGFjZShtLCIhIik6d25bam5dKS5yZXBsYWNlKEUsIiIpPT1Nbnx8KG1yP1V0W2puXS5yZXBsYWNlKG0sIiEiKTpVdFtqbl0pLnJlcGxhY2UoRSwiIik9PU1uKXJldHVybiBtbi5GaWxlSW5kZXhbam5dO3JldHVy''@;'; put 'put ''biBudWxsfSxSLnJlYWQ9ZnVuY3Rpb24gaXIobW4sRG4pe3N3aXRjaChEbiYmRG4udHlwZXx8ImJhc2U2NCIpe2Nhc2UiZmlsZSI6cmV0dXJuIGZ1bmN0aW9uIFRuKG1uLERuKXtyZXR1cm4gUGUoKSxOZSh5ZS5yZWFkRmlsZVN5bmMobW4pLERuKX0obW4sRG4pO2Nhc2UiYmFzZTY0IjpyZXR1''@;'; put 'put ''cm4gTmUoYihfZS5kZWNvZGUobW4pKSxEbik7Y2FzZSJiaW5hcnkiOnJldHVybiBOZShiKG1uKSxEbil9cmV0dXJuIE5lKG1uLERuKX0sUi5wYXJzZT1OZSxSLndyaXRlPWZ1bmN0aW9uIE5uKG1uLERuKXt2YXIgd249Vm4obW4sRG4pO3N3aXRjaChEbiYmRG4udHlwZSl7Y2FzZSJmaWxlIjpy''@;'; put 'put ''ZXR1cm4gUGUoKSx5ZS53cml0ZUZpbGVTeW5jKERuLmZpbGVuYW1lLHduKSx3bjtjYXNlImJpbmFyeSI6cmV0dXJuIERyKHduKTtjYXNlImJhc2U2NCI6cmV0dXJuIF9lLmVuY29kZShEcih3bikpfXJldHVybiB3bn0sUi53cml0ZUZpbGU9ZnVuY3Rpb24gTGkobW4sRG4sd24pe1BlKCk7dmFy''@;'; put 'put ''IFV0PVZuKG1uLHduKTt5ZS53cml0ZUZpbGVTeW5jKERuLFV0KX0sUi51dGlscz17Y2ZiX25ldzpmdW5jdGlvbiBTbChtbil7dmFyIERuPXt9O3JldHVybiBTbihEbixtbiksRG59LGNmYl9hZGQ6eXUsY2ZiX2RlbDpmdW5jdGlvbiBNbChtbixEbil7U24obW4pO3ZhciB3bj12ZS5maW5kKG1u''@;'; put 'put ''LERuKTtpZih3bilmb3IodmFyIFV0PTA7VXQ8bW4uRmlsZUluZGV4Lmxlbmd0aDsrK1V0KWlmKG1uLkZpbGVJbmRleFtVdF09PXduKXJldHVybiBtbi5GaWxlSW5kZXguc3BsaWNlKFV0LDEpLG1uLkZ1bGxQYXRocy5zcGxpY2UoVXQsMSksITA7cmV0dXJuITF9LGNmYl9tb3Y6ZnVuY3Rpb24g''@;'; put 'put ''RGYobW4sRG4sd24pe1NuKG1uKTt2YXIgVXQ9dmUuZmluZChtbixEbik7aWYoVXQpZm9yKHZhciBubj0wO25uPG1uLkZpbGVJbmRleC5sZW5ndGg7KytubilpZihtbi5GaWxlSW5kZXhbbm5dPT1VdClyZXR1cm4gbW4uRmlsZUluZGV4W25uXS5uYW1lPVEod24pLG1uLkZ1bGxQYXRoc1tubl09''@;'; put 'put ''d24sITA7cmV0dXJuITF9LGNmYl9nYzpmdW5jdGlvbiB5ZChtbil7Sm4obW4sITApfSxSZWFkU2hpZnQ6TmwsQ2hlY2tGaWVsZDpfbixwcmVwX2Jsb2I6dm4sYmNvbmNhdDpqLHVzZV96bGliOmZ1bmN0aW9uIHZyKG1uKXt0cnl7dmFyIHduPW5ldygwLG1uLkluZmxhdGVSYXcpO2lmKHduLl9w''@;'; put 'put ''cm9jZXNzQ2h1bmsobmV3IFVpbnQ4QXJyYXkoWzMsMF0pLHduLl9maW5pc2hGbHVzaEZsYWcpLCF3bi5ieXRlc1JlYWQpdGhyb3cgbmV3IEVycm9yKCJ6bGliIGRvZXMgbm90IGV4cG9zZSBieXRlc1JlYWQiKTtWcj1tbn1jYXRjaChVdCl7Y29uc29sZS5lcnJvcigiY2Fubm90IHVzZSBuYXRp''@;'; put 'put ''dmUgemxpYjogIisoVXQubWVzc2FnZXx8VXQpKX19LF9kZWZsYXRlUmF3OlpsLF9pbmZsYXRlUmF3OkhpLGNvbnN0czp1b30sUn0oKTt0cnl7WGU9Xyg4MzMzNyl9Y2F0Y2h7fWZ1bmN0aW9uIGplKFMpe3JldHVybiJzdHJpbmciPT10eXBlb2YgUz94KFMpOkFycmF5LmlzQXJyYXkoUyk/ZnVu''@;'; put 'put ''Y3Rpb24gVChTKXtpZih0eXBlb2YgVWludDhBcnJheT4idSIpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCIpO3JldHVybiBuZXcgVWludDhBcnJheShTKX0oUyk6U31mdW5jdGlvbiBEZShTLFIsayl7aWYodHlwZW9mIFhlPCJ1IiYmWGUud3JpdGVGaWxlU3luYylyZXR1cm4gaz9YZS53''@;'; put 'put ''cml0ZUZpbGVTeW5jKFMsUixrKTpYZS53cml0ZUZpbGVTeW5jKFMsUik7dmFyIEc9InV0ZjgiPT1rP05zKFIpOlI7aWYodHlwZW9mIElFX1NhdmVGaWxlPCJ1IilyZXR1cm4gSUVfU2F2ZUZpbGUoRyxTKTtpZih0eXBlb2YgQmxvYjwidSIpe3ZhciBRPW5ldyBCbG9iKFtqZShHKV0se3R5cGU6''@;'; put 'put ''ImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSJ9KTtpZih0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLm1zU2F2ZUJsb2IpcmV0dXJuIG5hdmlnYXRvci5tc1NhdmVCbG9iKFEsUyk7aWYodHlwZW9mIHNhdmVBczwidSIpcmV0dXJuIHNhdmVBcyhRLFMpO2lmKHR5cGVvZiBVUkw8InUi''@;'; put 'put ''JiZ0eXBlb2YgZG9jdW1lbnQ8InUiJiZkb2N1bWVudC5jcmVhdGVFbGVtZW50JiZVUkwuY3JlYXRlT2JqZWN0VVJMKXt2YXIgYWU9VVJMLmNyZWF0ZU9iamVjdFVSTChRKTtpZigib2JqZWN0Ij09dHlwZW9mIGNocm9tZSYmImZ1bmN0aW9uIj09dHlwZW9mKGNocm9tZS5kb3dubG9hZHN8fHt9''@;'; put 'put ''KS5kb3dubG9hZClyZXR1cm4gVVJMLnJldm9rZU9iamVjdFVSTCYmdHlwZW9mIHNldFRpbWVvdXQ8InUiJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VVJMLnJldm9rZU9iamVjdFVSTChhZSl9LDZlNCksY2hyb21lLmRvd25sb2Fkcy5kb3dubG9hZCh7dXJsOmFlLGZpbGVuYW1lOlMsc2F2ZUFz''@;'; put 'put ''OiEwfSk7dmFyIGdlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTtpZihudWxsIT1nZS5kb3dubG9hZClyZXR1cm4gZ2UuZG93bmxvYWQ9UyxnZS5ocmVmPWFlLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZ2UpLGdlLmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChnZSks''@;'; put 'put ''VVJMLnJldm9rZU9iamVjdFVSTCYmdHlwZW9mIHNldFRpbWVvdXQ8InUiJiZzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7VVJMLnJldm9rZU9iamVjdFVSTChhZSl9LDZlNCksYWV9fWlmKHR5cGVvZiAkPCJ1IiYmdHlwZW9mIEZpbGU8InUiJiZ0eXBlb2YgRm9sZGVyPCJ1Iil0cnl7dmFyIHBlPUZp''@;'; put 'put ''bGUoUyk7cmV0dXJuIHBlLm9wZW4oInciKSxwZS5lbmNvZGluZz0iYmluYXJ5IixBcnJheS5pc0FycmF5KFIpJiYoUj1DKFIpKSxwZS53cml0ZShSKSxwZS5jbG9zZSgpLFJ9Y2F0Y2goeWUpe2lmKCF5ZS5tZXNzYWdlfHwheWUubWVzc2FnZS5tYXRjaCgvb25zdHJ1Y3QvKSl0aHJvdyB5ZX10''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBzYXZlIGZpbGUgIitTKX1mdW5jdGlvbiBSZShTKXtmb3IodmFyIFI9T2JqZWN0LmtleXMoUyksaz1bXSxHPTA7RzxSLmxlbmd0aDsrK0cpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFMsUltHXSkmJmsucHVzaChSW0ddKTtyZXR1''@;'; put 'put ''cm4ga31mdW5jdGlvbiBJZShTLFIpe2Zvcih2YXIgaz1bXSxHPVJlKFMpLFE9MDtRIT09Ry5sZW5ndGg7KytRKW51bGw9PWtbU1tHW1FdXVtSXV0mJihrW1NbR1tRXV1bUl1dPUdbUV0pO3JldHVybiBrfWZ1bmN0aW9uIFZlKFMpe2Zvcih2YXIgUj1bXSxrPVJlKFMpLEc9MDtHIT09ay5sZW5n''@;'; put 'put ''dGg7KytHKVJbU1trW0ddXV09a1tHXTtyZXR1cm4gUn1mdW5jdGlvbiBrZShTKXtmb3IodmFyIFI9W10saz1SZShTKSxHPTA7RyE9PWsubGVuZ3RoOysrRylSW1Nba1tHXV1dPXBhcnNlSW50KGtbR10sMTApO3JldHVybiBSfXZhciBRZSxkbixfdD1uZXcgRGF0ZSgxODk5LDExLDMwLDAsMCww''@;'; put 'put ''KSxydD0wO2Z1bmN0aW9uIHl0KCl7cnQ9X3QuZ2V0VGltZSgpKzZlNCooKG5ldyBEYXRlKS5nZXRUaW1lem9uZU9mZnNldCgpLV90LmdldFRpbWV6b25lT2Zmc2V0KCkpLFFlPWZ1bmN0aW9uKFIsayl7dmFyIEc9Ui5nZXRUaW1lKCk7cmV0dXJuIGsmJihHLT0xMjYzMTY4ZTUpLChHLXJ0KS84''@;'; put 'put ''NjRlNX0sZG49ZnVuY3Rpb24oUil7dmFyIGs9bmV3IERhdGU7cmV0dXJuIGsuc2V0VGltZSgyNCpSKjYwKjYwKjFlMytydCksa319ZnVuY3Rpb24gaXQoUyl7dmFyIFI9MCxrPTAsRz0hMSxRPVMubWF0Y2goL1AoWzAtOVwuXStZKT8oWzAtOVwuXStNKT8oWzAtOVwuXStEKT9UKFswLTlcLl0r''@;'; put 'put ''SCk/KFswLTlcLl0rTSk/KFswLTlcLl0rUyk/Lyk7aWYoIVEpdGhyb3cgbmV3IEVycm9yKCJ8IitTKyJ8IGlzIG5vdCBhbiBJU084NjAxIER1cmF0aW9uIik7Zm9yKHZhciBhZT0xO2FlIT1RLmxlbmd0aDsrK2FlKWlmKFFbYWVdKXtzd2l0Y2goaz0xLGFlPjMmJihHPSEwKSxRW2FlXS5zbGlj''@;'; put 'put ''ZShRW2FlXS5sZW5ndGgtMSkpe2Nhc2UiWSI6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBJU08gRHVyYXRpb24gRmllbGQ6ICIrUVthZV0uc2xpY2UoUVthZV0ubGVuZ3RoLTEpKTtjYXNlIkQiOmsqPTI0O2Nhc2UiSCI6ayo9NjA7Y2FzZSJNIjppZighRyl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''IlVuc3VwcG9ydGVkIElTTyBEdXJhdGlvbiBGaWVsZDogTSIpO2sqPTYwfVIrPWsqcGFyc2VJbnQoUVthZV0sMTApfXJldHVybiBSfXl0KCk7dmFyICRlPW5ldyBEYXRlKCIyMDE3LTAyLTE5VDE5OjA2OjA5LjAwMFoiKTtpc05hTigkZS5nZXRGdWxsWWVhcigpKSYmKCRlPW5ldyBEYXRlKCIy''@;'; put 'put ''LzE5LzE3IikpO3ZhciB0dD0yMDE3PT0kZS5nZXRGdWxsWWVhcigpO2Z1bmN0aW9uIEhlKFMsUil7dmFyIGs9bmV3IERhdGUoUyk7aWYodHQpcmV0dXJuIFI+MD9rLnNldFRpbWUoay5nZXRUaW1lKCkrNjAqay5nZXRUaW1lem9uZU9mZnNldCgpKjFlMyk6UjwwJiZrLnNldFRpbWUoay5nZXRU''@;'; put 'put ''aW1lKCktNjAqay5nZXRUaW1lem9uZU9mZnNldCgpKjFlMyksaztpZihTIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gUztpZigxOTE3PT0kZS5nZXRGdWxsWWVhcigpJiYhaXNOYU4oay5nZXRGdWxsWWVhcigpKSl7dmFyIEc9ay5nZXRGdWxsWWVhcigpO3JldHVybiBTLmluZGV4T2YoIiIrRyk+''@;'; put 'put ''LTF8fGsuc2V0RnVsbFllYXIoay5nZXRGdWxsWWVhcigpKzEwMCksa312YXIgUT1TLm1hdGNoKC9cZCsvZyl8fFsiMjAxNyIsIjIiLCIxOSIsIjAiLCIwIiwiMCJdLGFlPW5ldyBEYXRlKCtRWzBdLCtRWzFdLTEsK1FbMl0sK1FbM118fDAsK1FbNF18fDAsK1FbNV18fDApO3JldHVybiBTLmlu''@;'; put 'put ''ZGV4T2YoIloiKT4tMSYmKGFlPW5ldyBEYXRlKGFlLmdldFRpbWUoKS02MCphZS5nZXRUaW1lem9uZU9mZnNldCgpKjFlMykpLGFlfWZ1bmN0aW9uIGR0KFMpe2Zvcih2YXIgUj0iIixrPTA7ayE9Uy5sZW5ndGg7KytrKVIrPVN0cmluZy5mcm9tQ2hhckNvZGUoU1trXSk7cmV0dXJuIFJ9ZnVu''@;'; put 'put ''Y3Rpb24gcXQoUyl7aWYoIm9iamVjdCIhPXR5cGVvZiBTfHxudWxsPT1TKXJldHVybiBTO2lmKFMgaW5zdGFuY2VvZiBEYXRlKXJldHVybiBuZXcgRGF0ZShTLmdldFRpbWUoKSk7aWYoQXJyYXkuaXNBcnJheShTKSlyZXR1cm4gZnVuY3Rpb24gUnQoUyl7Zm9yKHZhciBSPVtdLGs9MDtrPFMu''@;'; put 'put ''bGVuZ3RoOysrayl7dmFyIEc9U1trXTsib2JqZWN0Ij09dHlwZW9mIEc/UltrXT1xdChHKTpudWxsIT1HJiYoUltrXT1HKX1yZXR1cm4gUn0oUyk7dmFyIFI9e307Zm9yKHZhciBrIGluIFMpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFMsaykmJihSW2tdPXF0KFNba10p''@;'; put 'put ''KTtyZXR1cm4gUn1mdW5jdGlvbiBQdChTLFIpe2lmKCJvYmplY3QiIT10eXBlb2YgUnx8bnVsbD09UilyZXR1cm4gUztmb3IodmFyIGsgaW4gUilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUixrKSYmKFNba109cXQoUltrXSkpO3JldHVybiBTfWZ1bmN0aW9uIGFpKFMs''@;'; put 'put ''Uil7Zm9yKHZhciBrPSIiO2subGVuZ3RoPFI7KWsrPVM7cmV0dXJuIGt9ZnVuY3Rpb24gUXQoUyl7dmFyIFI9TnVtYmVyKFMpO2lmKCFpc05hTihSKSlyZXR1cm4gaXNGaW5pdGUoUik/UjpOYU47aWYoIS9cZC8udGVzdChTKSlyZXR1cm4gUjt2YXIgaz0xLEc9Uy5yZXBsYWNlKC8oW1xkXSks''@;'; put 'put ''KFtcZF0pL2csIiQxJDIiKS5yZXBsYWNlKC9bJF0vZywiIikucmVwbGFjZSgvWyVdL2csZnVuY3Rpb24oKXtyZXR1cm4gayo9MTAwLCIifSk7cmV0dXJuIGlzTmFOKFI9TnVtYmVyKEcpKSYmKEc9Ry5yZXBsYWNlKC9bKF0oLiopWyldLyxmdW5jdGlvbihRLGFlKXtyZXR1cm4gaz0tayxhZX0p''@;'; put 'put ''LGlzTmFOKFI9TnVtYmVyKEcpKSk/UjpSL2t9ZnVuY3Rpb24gc24oUyl7dmFyIFI9bmV3IERhdGUoUyksaz1uZXcgRGF0ZShOYU4pLEc9Ui5nZXRZZWFyKCksUT1SLmdldE1vbnRoKCksYWU9Ui5nZXREYXRlKCk7cmV0dXJuIGlzTmFOKGFlKXx8RzwwfHxHPjgwOTk/azooUT4wfHxhZT4xKSYm''@;'; put 'put ''MTAxIT1HfHxTLnRvTG93ZXJDYXNlKCkubWF0Y2goL2phbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxhdWd8c2VwfG9jdHxub3Z8ZGVjLyk/UjpTLm1hdGNoKC9bXi0wLTk6LFwvXFxdLyk/azpSfWZ1bmN0aW9uIFJpKFMsUil7aWYoUiYmUi5yYXcpcmV0dXJue3Q6InMiLHY6U307aWYoIVMp''@;'; put 'put ''cmV0dXJue3Q6InoifTtpZigiVFJVRSI9PT1TKXJldHVybnt0OiJiIix2OiEwfTtpZigiRkFMU0UiPT09UylyZXR1cm57dDoiYiIsdjohMX07dmFyIGs9IiIsRz1OdW1iZXIoUyk7aWYoaXNGaW5pdGUoRykpcmV0dXJue3Q6Im4iLHY6R307aWYoaXNOYU4oRykmJi9cZC8udGVzdChTKSl7dmFy''@;'; put 'put ''IFE9MSxhZT1TLnJlcGxhY2UoLyhbXGRdKSwoW1xkXSkvZyxmdW5jdGlvbihldCx1dCxFdCl7cmV0dXJuIGt8fChrPSIjLCMjMCIpLHV0K0V0fSkucmVwbGFjZSgvWyRdL2csIiIpLnJlcGxhY2UoL1wuXGQqLyxmdW5jdGlvbihldCl7a3x8KGs9IjAiKSxrKz0iLiI7Zm9yKHZhciB1dD0yO3V0''@;'; put 'put ''PD1ldC5sZW5ndGg7Kyt1dClrKz0iMCI7cmV0dXJuIGV0fSkucmVwbGFjZSgvWyVdL2csZnVuY3Rpb24oKXtyZXR1cm4gUSo9MTAwLGt8fChrPSIwIiksays9IiUiLCIifSk7aWYoIWlzTmFOKEc9TnVtYmVyKGFlKSkpcmV0dXJue3Q6Im4iLHY6Ry9RLHo6a307aWYoYWU9YWUucmVwbGFjZSgv''@;'; put 'put ''WyhdKC4qKVspXS8sZnVuY3Rpb24oZXQsdXQpe3JldHVybiBRPS1RLHV0fSksIWlzTmFOKEc9TnVtYmVyKGFlKSkpcmV0dXJue3Q6Im4iLHY6Ry9RLHo6KGt8fCIwIikrIl8pOygiKyhrfHwiMCIpKyIpO0AifX1lOmlmKCFSfHwhUi5yYXdEYXRlcyl7dmFyIGdlPVImJlIuY2VsbERhdGVzLHBl''@;'; put 'put ''PW5ldyBEYXRlKFMpLFBlPXBlLmdldFllYXIoKSxOZT1wZS5nZXRNb250aCgpLFllPXBlLmdldERhdGUoKTtpZihpc05hTihZZSl8fFBlPDB8fFBlPjgwOTkpYnJlYWsgZTtpZigoTmU+MHx8WWU+MSkmJjEwMSE9UGUpcmV0dXJue3Q6Z2U/ImQiOiJuIix2OmdlP3BlOlFlKHBlKSx6OlIuZGF0''@;'; put 'put ''ZU5GfHxBLl90YWJsZVsxNF19O2lmKFMudG9Mb3dlckNhc2UoKS5tYXRjaCgvamFufGZlYnxtYXJ8YXByfG1heXxqdW58anVsfGF1Z3xzZXB8b2N0fG5vdnxkZWMvKSlyZXR1cm57dDpnZT8iZCI6Im4iLHY6Z2U/cGU6UWUocGUpLHo6Ui5kYXRlTkZ8fEEuX3RhYmxlWzE0XX07aWYoUy5tYXRj''@;'; put 'put ''aCgvW14tMC05OixcL1xcXS8pKWJyZWFrIGU7cmV0dXJuIHBlfXJldHVybnt0OiJzIix2OlN9fXZhciBqdCxmbj01PT0iYWJhY2FiYSIuc3BsaXQoLyg6P2IpL2kpLmxlbmd0aDtmdW5jdGlvbiBadChTKXtyZXR1cm4gbnVsbCE9UyYmIVN9ZnVuY3Rpb24gQXQoUyl7cmV0dXJuIFMuY2hhckF0''@;'; put 'put ''KDApLnRvVXBwZXJDYXNlKCkrUy5zbGljZSgxKX1mdW5jdGlvbiBMbihTKXtyZXR1cm4gUz9TLmRhdGE/SihTLmRhdGEpOlMuYXNOb2RlQnVmZmVyJiZUZT9KKFMuYXNOb2RlQnVmZmVyKCkudG9TdHJpbmcoImJpbmFyeSIpKTpTLmFzQmluYXJ5P0ooUy5hc0JpbmFyeSgpKTpTLl9kYXRhJiZT''@;'; put 'put ''Ll9kYXRhLmdldENvbnRlbnQ/SihkdChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChTLl9kYXRhLmdldENvbnRlbnQoKSwwKSkpOlMuY29udGVudCYmUy50eXBlP0ooZHQoUy5jb250ZW50KSk6bnVsbDpudWxsfWZ1bmN0aW9uIHN0KFMpe2lmKCFTKXJldHVybiBudWxsO2lmKFMuZGF0YSly''@;'; put 'put ''ZXR1cm4gWShTLmRhdGEpO2lmKFMuYXNOb2RlQnVmZmVyJiZUZSlyZXR1cm4gUy5hc05vZGVCdWZmZXIoKTtpZihTLl9kYXRhJiZTLl9kYXRhLmdldENvbnRlbnQpe3ZhciBSPVMuX2RhdGEuZ2V0Q29udGVudCgpO3JldHVybiJzdHJpbmciPT10eXBlb2YgUj9ZKFIpOkFycmF5LnByb3RvdHlw''@;'; put 'put ''ZS5zbGljZS5jYWxsKFIpfXJldHVybiBTLmNvbnRlbnQmJlMudHlwZT9TLmNvbnRlbnQ6bnVsbH1mdW5jdGlvbiBuaShTLFIpe2Zvcih2YXIgaz1TLkZ1bGxQYXRoc3x8UmUoUy5maWxlcyksRz1SLnRvTG93ZXJDYXNlKCksUT1HLnJlcGxhY2UoL1wvL2csIlxcIiksYWU9MDthZTxrLmxlbmd0''@;'; put 'put ''aDsrK2FlKXt2YXIgZ2U9a1thZV0udG9Mb3dlckNhc2UoKTtpZihHPT1nZXx8UT09Z2UpcmV0dXJuIFMuZmlsZXNba1thZV1dfXJldHVybiBudWxsfWZ1bmN0aW9uIFdlKFMsUil7dmFyIGs9bmkoUyxSKTtpZihudWxsPT1rKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IGZpbmQgZmlsZSAiK1Ir''@;'; put 'put ''IiBpbiB6aXAiKTtyZXR1cm4ga31mdW5jdGlvbiBUdChTLFIsayl7aWYoIWspcmV0dXJuIGZ1bmN0aW9uIHp0KFMpe3JldHVybiBTJiYiLmJpbiI9PT1TLm5hbWUuc2xpY2UoLTQpP3N0KFMpOkxuKFMpfShXZShTLFIpKTtpZighUilyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIFR0KFMsUil9Y2F0''@;'; put 'put ''Y2h7cmV0dXJuIG51bGx9fWZ1bmN0aW9uIHJyKFMsUixrKXtpZighaylyZXR1cm4gTG4oV2UoUyxSKSk7aWYoIVIpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBycihTLFIpfWNhdGNoe3JldHVybiBudWxsfX1mdW5jdGlvbiBodChTLFIsayl7aWYoIWspcmV0dXJuIHN0KFdlKFMsUikpO2lmKCFS''@;'; put 'put ''KXJldHVybiBudWxsO3RyeXtyZXR1cm4gaHQoUyxSKX1jYXRjaHtyZXR1cm4gbnVsbH19ZnVuY3Rpb24gQm4oUyxSLGspe1MuRnVsbFBhdGhzP3ZlLnV0aWxzLmNmYl9hZGQoUyxSLGspOlMuZmlsZShSLGspfWZ1bmN0aW9uIGRpKCl7cmV0dXJuIGp0P25ldyBqdDp2ZS51dGlscy5jZmJfbmV3''@;'; put 'put ''KCl9ZnVuY3Rpb24gY24oUyxSKXt2YXIgaztpZihqdClzd2l0Y2goUi50eXBlKXtjYXNlImJhc2U2NCI6az1uZXcganQoUyx7YmFzZTY0OiEwfSk7YnJlYWs7Y2FzZSJiaW5hcnkiOmNhc2UiYXJyYXkiOms9bmV3IGp0KFMse2Jhc2U2NDohMX0pO2JyZWFrO2Nhc2UiYnVmZmVyIjprPW5ldyBq''@;'; put 'put ''dChTKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitSLnR5cGUpfWVsc2Ugc3dpdGNoKFIudHlwZSl7Y2FzZSJiYXNlNjQiOms9dmUucmVhZChTLHt0eXBlOiJiYXNlNjQifSk7YnJlYWs7Y2FzZSJiaW5hcnkiOms9dmUucmVhZChTLHt0eXBlOiJi''@;'; put 'put ''aW5hcnkifSk7YnJlYWs7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOms9dmUucmVhZChTLHt0eXBlOiJidWZmZXIifSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrUi50eXBlKX1yZXR1cm4ga31mdW5jdGlvbiBwbihTLFIpe2lmKCIvIj09Uy5j''@;'; put 'put ''aGFyQXQoMCkpcmV0dXJuIFMuc2xpY2UoMSk7dmFyIGs9Ui5zcGxpdCgiLyIpOyIvIiE9Ui5zbGljZSgtMSkmJmsucG9wKCk7Zm9yKHZhciBHPVMuc3BsaXQoIi8iKTswIT09Ry5sZW5ndGg7KXt2YXIgUT1HLnNoaWZ0KCk7Ii4uIj09PVE/ay5wb3AoKToiLiIhPT1RJiZrLnB1c2goUSl9cmV0''@;'; put 'put ''dXJuIGsuam9pbigiLyIpfXR5cGVvZiBKU1ppcFN5bmM8InUiJiYoanQ9SlNaaXBTeW5jKSx1ZS5leHBvcnRzJiZ0eXBlb2YganQ+InUiJiYoanQ9XygzMTc5KSk7dmFyIElpPSc8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+XHJcbicsWHQ9''@;'; put 'put ''Lyg/OlteIlxzPz5cL10rKVxzKj1ccyooKD86IikoPzpbXiJdKj8pKD86Iil8KD86JykoPzpbXiddKj8pKD86Jyl8KD86W14nIj5cc10rKSkvZyxlbj0vPFtcL1w/XT9bYS16QS1aMC05Ol8tXSsoPzpccytbXiJccz8+XC9dK1xzKj1ccyooPzoiW14iXSoifCdbXiddKid8W14nIj5ccz1dKykp''@;'; put 'put ''KlxzP1tcL1w/XT8+L2c7SWkubWF0Y2goZW4pfHwoZW49LzxbXj5dKj4vZyk7dmFyIGhvPS88XHcqOi8sTWk9LzwoXC8/KVx3KzovO2Z1bmN0aW9uIHByKFMsUixrKXtmb3IodmFyIEc9e30sUT0wLGFlPTA7USE9PVMubGVuZ3RoJiYzMiE9PShhZT1TLmNoYXJDb2RlQXQoUSkpJiYxMCE9PWFl''@;'; put 'put ''JiYxMyE9PWFlOysrUSk7aWYoUnx8KEdbMF09Uy5zbGljZSgwLFEpKSxRPT09Uy5sZW5ndGgpcmV0dXJuIEc7dmFyIGdlPVMubWF0Y2goWHQpLHBlPTAseWU9IiIsUGU9MCxOZT0iIixZZT0iIixldD0xO2lmKGdlKWZvcihQZT0wO1BlIT1nZS5sZW5ndGg7KytQZSl7Zm9yKFllPWdlW1BlXSxh''@;'; put 'put ''ZT0wO2FlIT1ZZS5sZW5ndGgmJjYxIT09WWUuY2hhckNvZGVBdChhZSk7KythZSk7Zm9yKE5lPVllLnNsaWNlKDAsYWUpLnRyaW0oKTszMj09WWUuY2hhckNvZGVBdChhZSsxKTspKythZTtmb3IoZXQ9MzQ9PShRPVllLmNoYXJDb2RlQXQoYWUrMSkpfHwzOT09UT8xOjAseWU9WWUuc2xpY2Uo''@;'; put 'put ''YWUrMStldCxZZS5sZW5ndGgtZXQpLHBlPTA7cGUhPU5lLmxlbmd0aCYmNTghPT1OZS5jaGFyQ29kZUF0KHBlKTsrK3BlKTtpZihwZT09PU5lLmxlbmd0aClOZS5pbmRleE9mKCJfIik+MCYmKE5lPU5lLnNsaWNlKDAsTmUuaW5kZXhPZigiXyIpKSksR1tOZV09eWUsa3x8KEdbTmUudG9Mb3dl''@;'; put 'put ''ckNhc2UoKV09eWUpO2Vsc2V7dmFyIHV0PSg1PT09cGUmJiJ4bWxucyI9PT1OZS5zbGljZSgwLDUpPyJ4bWxucyI6IiIpK05lLnNsaWNlKHBlKzEpO2lmKEdbdXRdJiYiZXh0Ij09TmUuc2xpY2UocGUtMyxwZSkpY29udGludWU7R1t1dF09eWUsa3x8KEdbdXQudG9Mb3dlckNhc2UoKV09eWUp''@;'; put 'put ''fX1yZXR1cm4gR31mdW5jdGlvbiBXbihTKXtyZXR1cm4gUy5yZXBsYWNlKE1pLCI8JDEiKX12YXIgS2k9eyImcXVvdDsiOiciJywiJmFwb3M7IjoiJyIsIiZndDsiOiI+IiwiJmx0OyI6IjwiLCImYW1wOyI6IiYifSxRcj1WZShLaSksSnI9ZnVuY3Rpb24oKXt2YXIgUz0vJig/OnF1b3R8YXBv''@;'; put 'put ''c3xndHxsdHxhbXB8I3g/KFtcZGEtZkEtRl0rKSk7L2dpLFI9L194KFtcZGEtZkEtRl17NH0pXy9naTtyZXR1cm4gZnVuY3Rpb24gayhHKXt2YXIgUT1HKyIiLGFlPVEuaW5kZXhPZigiPCFbQ0RBVEFbIik7aWYoLTE9PWFlKXJldHVybiBRLnJlcGxhY2UoUyxmdW5jdGlvbihwZSx5ZSl7cmV0''@;'; put 'put ''dXJuIEtpW3BlXXx8U3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludCh5ZSxwZS5pbmRleE9mKCJ4Iik+LTE/MTY6MTApKXx8cGV9KS5yZXBsYWNlKFIsZnVuY3Rpb24ocGUseWUpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KHllLDE2KSl9KTt2YXIgZ2U9US5pbmRleE9m''@;'; put 'put ''KCJdXT4iKTtyZXR1cm4gayhRLnNsaWNlKDAsYWUpKStRLnNsaWNlKGFlKzksZ2UpK2soUS5zbGljZShnZSszKSl9fSgpLEJpPS9bJjw+JyJdL2csVmk9L1tcdTAwMDAtXHUwMDA4XHUwMDBiLVx1MDAxZl0vZyxJbz0vX3hbMC05YS1mQS1GXXs0fV8vZztmdW5jdGlvbiBPcihTKXtyZXR1cm4o''@;'; put 'put ''UysiIikucmVwbGFjZShJbywiX3gwMDVGJCYiKS5yZXBsYWNlKEJpLGZ1bmN0aW9uKGspe3JldHVybiBRcltrXX0pLnJlcGxhY2UoVmksZnVuY3Rpb24oayl7cmV0dXJuIl94IisoIjAwMCIray5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpKyJfIn0pfWZ1bmN0aW9uIFlp''@;'; put 'put ''KFMpe3JldHVybiBPcihTKS5yZXBsYWNlKC9cbi9nLCJfeDAwMGFfIil9ZnVuY3Rpb24gZ28oUyl7cmV0dXJuIE9yKFMpLnJlcGxhY2UoLyAvZywiX3gwMDIwXyIpfXZhciBlcj0vW1x1MDAwMC1cdTAwMWZdL2c7ZnVuY3Rpb24gY28oUyl7cmV0dXJuKFMrIiIpLnJlcGxhY2UoQmksZnVuY3Rp''@;'; put 'put ''b24oayl7cmV0dXJuIFFyW2tdfSkucmVwbGFjZSgvXG4vZywiPGJyLz4iKS5yZXBsYWNlKGVyLGZ1bmN0aW9uKGspe3JldHVybiImI3giKygiMDAwIitrLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCkrIjsifSl9ZnVuY3Rpb24gX28oUyl7cmV0dXJuKFMrIiIpLnJlcGxh''@;'; put 'put ''Y2UoQmksZnVuY3Rpb24oayl7cmV0dXJuIFFyW2tdfSkucmVwbGFjZShlcixmdW5jdGlvbihrKXtyZXR1cm4iJiN4IitrLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkrIjsifSl9dmFyIE9vPWZ1bmN0aW9uKCl7dmFyIFM9LyYjKFxkKyk7L2c7ZnVuY3Rpb24gUihr''@;'; put 'put ''LEcpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KEcsMTApKX1yZXR1cm4gZnVuY3Rpb24oRyl7cmV0dXJuIEcucmVwbGFjZShTLFIpfX0oKSxIbz1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihSKXtyZXR1cm4gUi5yZXBsYWNlKC8oXHJcbnxbXHJcbl0pL2csIiYjMTA7''@;'; put 'put ''Iil9fSgpO2Z1bmN0aW9uIGVpKFMpe3N3aXRjaChTKXtjYXNlIDE6Y2FzZSEwOmNhc2UiMSI6Y2FzZSJ0cnVlIjpjYXNlIlRSVUUiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fXZhciBnYT1mdW5jdGlvbihSKXtmb3IodmFyIGs9IiIsRz0wLFE9MCxhZT0wLGdlPTAscGU9MCx5ZT0wO0c8''@;'; put 'put ''Ui5sZW5ndGg7KShRPVIuY2hhckNvZGVBdChHKyspKTwxMjg/ays9U3RyaW5nLmZyb21DaGFyQ29kZShRKTooYWU9Ui5jaGFyQ29kZUF0KEcrKyksUT4xOTEmJlE8MjI0PyhwZT0oMzEmUSk8PDYscGV8PTYzJmFlLGsrPVN0cmluZy5mcm9tQ2hhckNvZGUocGUpKTooZ2U9Ui5jaGFyQ29kZUF0''@;'; put 'put ''KEcrKyksUTwyNDA/ays9U3RyaW5nLmZyb21DaGFyQ29kZSgoMTUmUSk8PDEyfCg2MyZhZSk8PDZ8NjMmZ2UpOih5ZT0oKDcmUSk8PDE4fCg2MyZhZSk8PDEyfCg2MyZnZSk8PDZ8NjMmKHBlPVIuY2hhckNvZGVBdChHKyspKSktNjU1MzYsays9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5Niso''@;'; put 'put ''eWU+Pj4xMCYxMDIzKSksays9U3RyaW5nLmZyb21DaGFyQ29kZSg1NjMyMCsoMTAyMyZ5ZSkpKSkpO3JldHVybiBrfSxOcz1mdW5jdGlvbihTKXtmb3IodmFyIFI9W10saz0wLEc9MCxRPTA7azxTLmxlbmd0aDspc3dpdGNoKEc9Uy5jaGFyQ29kZUF0KGsrKyksITApe2Nhc2UgRzwxMjg6Ui5w''@;'; put 'put ''dXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoRykpO2JyZWFrO2Nhc2UgRzwyMDQ4OlIucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDE5MisoRz4+NikpKSxSLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSgxMjgrKDYzJkcpKSk7YnJlYWs7Y2FzZSBHPj01NTI5NiYmRzw1NzM0NDpHLT01NTI5NixR''@;'; put 'put ''PVMuY2hhckNvZGVBdChrKyspLTU2MzIwKyhHPDwxMCksUi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMjQwKyhRPj4xOCY3KSkpLFIucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDE0NCsoUT4+MTImNjMpKSksUi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTI4KyhRPj42JjYzKSkpLFIu''@;'; put 'put ''cHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEyOCsoNjMmUSkpKTticmVhaztkZWZhdWx0OlIucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDIyNCsoRz4+MTIpKSksUi5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoMTI4KyhHPj42JjYzKSkpLFIucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKDEy''@;'; put 'put ''OCsoNjMmRykpKX1yZXR1cm4gUi5qb2luKCIiKX07aWYoVGUpe3ZhciBtbD1mdW5jdGlvbihSKXt2YXIgRyxRLHllLGs9QnVmZmVyLmFsbG9jKDIqUi5sZW5ndGgpLGFlPTEsZ2U9MCxwZT0wO2ZvcihRPTA7UTxSLmxlbmd0aDtRKz1hZSlhZT0xLCh5ZT1SLmNoYXJDb2RlQXQoUSkpPDEyOD9H''@;'; put 'put ''PXllOnllPDIyND8oRz02NCooMzEmeWUpKyg2MyZSLmNoYXJDb2RlQXQoUSsxKSksYWU9Mik6eWU8MjQwPyhHPTQwOTYqKDE1JnllKSs2NCooNjMmUi5jaGFyQ29kZUF0KFErMSkpKyg2MyZSLmNoYXJDb2RlQXQoUSsyKSksYWU9Myk6KGFlPTQsRz0yNjIxNDQqKDcmeWUpKzQwOTYqKDYzJlIu''@;'; put 'put ''Y2hhckNvZGVBdChRKzEpKSs2NCooNjMmUi5jaGFyQ29kZUF0KFErMikpKyg2MyZSLmNoYXJDb2RlQXQoUSszKSkscGU9NTUyOTYrKChHLT02NTUzNik+Pj4xMCYxMDIzKSxHPTU2MzIwKygxMDIzJkcpKSwwIT09cGUmJihrW2dlKytdPTI1NSZwZSxrW2dlKytdPXBlPj4+OCxwZT0wKSxrW2dl''@;'; put 'put ''KytdPUclMjU2LGtbZ2UrK109Rz4+Pjg7cmV0dXJuIGsuc2xpY2UoMCxnZSkudG9TdHJpbmcoInVjczIiKX0sZnU9ImZvbyBiYXIgYmF6XHhlMlx4OThceDgzXHhmMFx4OWZceDhkXHhhMyI7Z2EoZnUpPT1tbChmdSkmJihnYT1tbCk7dmFyIFJjPWZ1bmN0aW9uKFIpe3JldHVybiBTZShSLCJi''@;'; put 'put ''aW5hcnkiKS50b1N0cmluZygidXRmOCIpfTtnYShmdSk9PVJjKGZ1KSYmKGdhPVJjKSxOcz1mdW5jdGlvbihTKXtyZXR1cm4gU2UoUywidXRmOCIpLnRvU3RyaW5nKCJiaW5hcnkiKX19dmFyIFMsRDA9ZnVuY3Rpb24oKXt2YXIgUz17fTtyZXR1cm4gZnVuY3Rpb24oayxHKXt2YXIgUT1rKyJ8''@;'; put 'put ''IisoR3x8IiIpO3JldHVybiBTW1FdP1NbUV06U1tRXT1uZXcgUmVnRXhwKCI8KD86XFx3KzopPyIraysnKD86IHhtbDpzcGFjZT0icHJlc2VydmUiKT8oPzpbXj5dKik+KFtcXHNcXFNdKj8pPC8oPzpcXHcrOik/JytrKyI+IixHfHwiIil9fSgpLG9yPShTPVtbIm5ic3AiLCIgIl0sWyJtaWRk''@;'; put 'put ''b3QiLCJceGI3Il0sWyJxdW90IiwnIiddLFsiYXBvcyIsIiciXSxbImd0IiwiPiJdLFsibHQiLCI8Il0sWyJhbXAiLCImIl1dLm1hcChmdW5jdGlvbihSKXtyZXR1cm5bbmV3IFJlZ0V4cCgiJiIrUlswXSsiOyIsImlnIiksUlsxXV19KSxmdW5jdGlvbihrKXtmb3IodmFyIEc9ay5yZXBsYWNl''@;'; put 'put ''KC9eW1x0XG5cciBdKy8sIiIpLnJlcGxhY2UoL1tcdFxuXHIgXSskLywiIikucmVwbGFjZSgvW1x0XG5cciBdKy9nLCIgIikucmVwbGFjZSgvPFxzKltiQl1bclJdXHMqXC8/Pi9nLCJcbiIpLnJlcGxhY2UoLzxbXj5dKj4vZywiIiksUT0wO1E8Uy5sZW5ndGg7KytRKUc9Ry5yZXBsYWNlKFNb''@;'; put 'put ''UV1bMF0sU1tRXVsxXSk7cmV0dXJuIEd9KSx4bz1mdW5jdGlvbigpe3ZhciBTPXt9O3JldHVybiBmdW5jdGlvbihrKXtyZXR1cm4gdm9pZCAwIT09U1trXT9TW2tdOlNba109bmV3IFJlZ0V4cCgiPCg/OnZ0Oik/IitrKyI+KFtcXHNcXFNdKj8pPC8oPzp2dDopPyIraysiPiIsImciKX19KCks''@;'; put 'put ''c2k9LzxcLz8oPzp2dDopP3ZhcmlhbnQ+L2csSHQ9LzwoPzp2dDopKFtePl0qKT4oW1xzXFNdKik8LztmdW5jdGlvbiBYcihTLFIpe3ZhciBrPXByKFMpLEc9Uy5tYXRjaCh4byhrLmJhc2VUeXBlKSl8fFtdLFE9W107aWYoRy5sZW5ndGghPWsuc2l6ZSl7aWYoUi5XVEYpdGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJ1bmV4cGVjdGVkIHZlY3RvciBsZW5ndGggIitHLmxlbmd0aCsiICE9ICIray5zaXplKTtyZXR1cm4gUX1yZXR1cm4gRy5mb3JFYWNoKGZ1bmN0aW9uKGFlKXt2YXIgZ2U9YWUucmVwbGFjZShzaSwiIikubWF0Y2goSHQpO2dlJiZRLnB1c2goe3Y6Z2EoZ2VbMl0pLHQ6Z2VbMV19KX0p''@;'; put 'put ''LFF9dmFyIGIwPS8oXlxzfFxzJHxcbikvO2Z1bmN0aW9uIE5vKFMsUil7cmV0dXJuIjwiK1MrKFIubWF0Y2goYjApPycgeG1sOnNwYWNlPSJwcmVzZXJ2ZSInOiIiKSsiPiIrUisiPC8iK1MrIj4ifWZ1bmN0aW9uIFJ1KFMpe3JldHVybiBSZShTKS5tYXAoZnVuY3Rpb24oUil7cmV0dXJuIiAi''@;'; put 'put ''K1IrJz0iJytTW1JdKyciJ30pLmpvaW4oIiIpfWZ1bmN0aW9uIEZyKFMsUixrKXtyZXR1cm4iPCIrUysobnVsbCE9az9SdShrKToiIikrKG51bGwhPVI/KFIubWF0Y2goYjApPycgeG1sOnNwYWNlPSJwcmVzZXJ2ZSInOiIiKSsiPiIrUisiPC8iK1M6Ii8iKSsiPiJ9ZnVuY3Rpb24gdGYoUyxS''@;'; put 'put ''KXt0cnl7cmV0dXJuIFMudG9JU09TdHJpbmcoKS5yZXBsYWNlKC9cLlxkKi8sIiIpfWNhdGNoKGspe2lmKFIpdGhyb3cga31yZXR1cm4iIn12YXIgVWgsWmgsR2k9e2RjOiJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIsZGN0ZXJtczoiaHR0cDovL3B1cmwub3JnL2RjL3Rlcm1z''@;'; put 'put ''LyIsZGNtaXR5cGU6Imh0dHA6Ly9wdXJsLm9yZy9kYy9kY21pdHlwZS8iLG14OiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS9tYWMvZXhjZWwvMjAwOC9tYWluIixyOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxh''@;'; put 'put ''dGlvbnNoaXBzIixzanM6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvc2hlZXRqcy9jb3JlLXByb3BlcnRpZXMiLHZ0OiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9kb2NQcm9wc1ZUeXBlcyIseHNp''@;'; put 'put ''OiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIseHNkOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIsbWFpbjpbImh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9zcHJlYWRzaGVldG1sLzIwMDYvbWFpbiIsImh0dHA6Ly9wdXJsLm9j''@;'; put 'put ''bGMub3JnL29veG1sL3NwcmVhZHNoZWV0bWwvbWFpbiIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL2V4Y2VsLzIwMDYvbWFpbiIsImh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlL2V4Y2VsLzIwMDYvMiJdfSx2bD17bzoidXJuOnNjaGVtYXMtbWljcm9z''@;'; put 'put ''b2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIix4OiJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTpleGNlbCIsc3M6InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206b2ZmaWNlOnNwcmVhZHNoZWV0IixkdDoidXVpZDpDMkY0MTAxMC02NUIzLTExZDEtQTI5Ri0wMEFBMDBDMTQ4ODIiLG12''@;'; put 'put ''OiJodHRwOi8vbWFjVm1sU2NoZW1hVXJpIix2OiJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOnZtbCIsaHRtbDoiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MCJ9LHkwPWZ1bmN0aW9uKFMpe2Zvcih2YXIgUj1bXSxHPTA7RzxTWzBdLmxlbmd0aDsrK0cpaWYoU1swXVtHXSlmb3Io''@;'; put 'put ''dmFyIFE9MCxhZT1TWzBdW0ddLmxlbmd0aDtRPGFlO1ErPTEwMjQwKVIucHVzaC5hcHBseShSLFNbMF1bR10uc2xpY2UoUSxRKzEwMjQwKSk7cmV0dXJuIFJ9LGU1PXkwLFJsPWZ1bmN0aW9uKFMsUixrKXtmb3IodmFyIEc9W10sUT1SO1E8aztRKz0yKUcucHVzaChTdHJpbmcuZnJvbUNoYXJD''@;'; put 'put ''b2RlKGVhKFMsUSkpKTtyZXR1cm4gRy5qb2luKCIiKS5yZXBsYWNlKEUsIiIpfSxuZj1SbCxzZD1mdW5jdGlvbihTLFIsayl7Zm9yKHZhciBHPVtdLFE9UjtRPFIrazsrK1EpRy5wdXNoKCgiMCIrU1tRXS50b1N0cmluZygxNikpLnNsaWNlKC0yKSk7cmV0dXJuIEcuam9pbigiIil9LHJmPXNk''@;'; put 'put ''LGsxPWZ1bmN0aW9uKFMsUixrKXtmb3IodmFyIEc9W10sUT1SO1E8aztRKyspRy5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoT2EoUyxRKSkpO3JldHVybiBHLmpvaW4oIiIpfSxhZj1rMSxYZD1mdW5jdGlvbihTLFIpe3ZhciBrPXphKFMsUik7cmV0dXJuIGs+MD9rMShTLFIrNCxSKzQray0x''@;'; put 'put ''KToiIn0sc2Y9WGQsemg9ZnVuY3Rpb24oUyxSKXt2YXIgaz16YShTLFIpO3JldHVybiBrPjA/azEoUyxSKzQsUis0K2stMSk6IiJ9LExjPXpoLFZvPWZ1bmN0aW9uKFMsUil7dmFyIGs9Mip6YShTLFIpO3JldHVybiBrPjA/azEoUyxSKzQsUis0K2stMSk6IiJ9LHgzPVZvO1VoPVpoPWZ1bmN0''@;'; put 'put ''aW9uKFIsayl7dmFyIEc9emEoUixrKTtyZXR1cm4gRz4wP1JsKFIsays0LGsrNCtHKToiIn07dmFyIGFuLGdpLFdoPWZ1bmN0aW9uKFMsUil7dmFyIGs9emEoUyxSKTtyZXR1cm4gaz4wP2sxKFMsUis0LFIrNCtrKToiIn0sQW49V2g7YW49Z2k9ZnVuY3Rpb24oUyxSKXtyZXR1cm4gZnVuY3Rp''@;'; put 'put ''b24gSmMoUyxSKXtmb3IodmFyIGs9MS0yKihTW1IrN10+Pj43KSxHPSgoMTI3JlNbUis3XSk8PDQpKyhTW1IrNl0+Pj40JjE1KSxRPTE1JlNbUis2XSxhZT01O2FlPj0wOy0tYWUpUT0yNTYqUStTW1IrYWVdO3JldHVybiAyMDQ3PT1HPzA9PVE/ayooMS8wKTpOYU46KDA9PUc/Rz0tMTAyMjoo''@;'; put 'put ''Ry09MTAyMyxRKz1NYXRoLnBvdygyLDUyKSksaypNYXRoLnBvdygyLEctNTIpKlEpfShTLFIpfTt2YXIgQXI9ZnVuY3Rpb24oUil7cmV0dXJuIEFycmF5LmlzQXJyYXkoUil9O1RlJiYoUmw9ZnVuY3Rpb24oUyxSLGspe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoUyk/Uy50b1N0cmluZygidXRm''@;'; put 'put ''MTZsZSIsUixrKS5yZXBsYWNlKEUsIiIpOm5mKFMsUixrKX0sc2Q9ZnVuY3Rpb24oUyxSLGspe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoUyk/Uy50b1N0cmluZygiaGV4IixSLFIrayk6cmYoUyxSLGspfSxYZD1mdW5jdGlvbihSLGspe2lmKCFCdWZmZXIuaXNCdWZmZXIoUikpcmV0dXJuIHNm''@;'; put 'put ''KFIsayk7dmFyIEc9Ui5yZWFkVUludDMyTEUoayk7cmV0dXJuIEc+MD9SLnRvU3RyaW5nKCJ1dGY4IixrKzQsays0K0ctMSk6IiJ9LHpoPWZ1bmN0aW9uKFIsayl7aWYoIUJ1ZmZlci5pc0J1ZmZlcihSKSlyZXR1cm4gTGMoUixrKTt2YXIgRz1SLnJlYWRVSW50MzJMRShrKTtyZXR1cm4gRz4w''@;'; put 'put ''P1IudG9TdHJpbmcoInV0ZjgiLGsrNCxrKzQrRy0xKToiIn0sVm89ZnVuY3Rpb24oUixrKXtpZighQnVmZmVyLmlzQnVmZmVyKFIpKXJldHVybiB4MyhSLGspO3ZhciBHPTIqUi5yZWFkVUludDMyTEUoayk7cmV0dXJuIFIudG9TdHJpbmcoInV0ZjE2bGUiLGsrNCxrKzQrRy0xKX0sVWg9ZnVu''@;'; put 'put ''Y3Rpb24oUixrKXtpZighQnVmZmVyLmlzQnVmZmVyKFIpKXJldHVybiBaaChSLGspO3ZhciBHPVIucmVhZFVJbnQzMkxFKGspO3JldHVybiBSLnRvU3RyaW5nKCJ1dGYxNmxlIixrKzQsays0K0cpfSxXaD1mdW5jdGlvbihSLGspe2lmKCFCdWZmZXIuaXNCdWZmZXIoUikpcmV0dXJuIEFuKFIs''@;'; put 'put ''ayk7dmFyIEc9Ui5yZWFkVUludDMyTEUoayk7cmV0dXJuIFIudG9TdHJpbmcoInV0ZjgiLGsrNCxrKzQrRyl9LGsxPWZ1bmN0aW9uKFIsayxHKXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKFIpP1IudG9TdHJpbmcoInV0ZjgiLGssRyk6YWYoUixrLEcpfSx5MD1mdW5jdGlvbihTKXtyZXR1cm4g''@;'; put 'put ''U1swXS5sZW5ndGg+MCYmQnVmZmVyLmlzQnVmZmVyKFNbMF1bMF0pP0J1ZmZlci5jb25jYXQoU1swXSk6ZTUoUyl9LGo9ZnVuY3Rpb24oUyl7cmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihTWzBdKT9CdWZmZXIuY29uY2F0KFMpOltdLmNvbmNhdC5hcHBseShbXSxTKX0sYW49ZnVuY3Rpb24oUixr''@;'; put 'put ''KXtyZXR1cm4gQnVmZmVyLmlzQnVmZmVyKFIpP1IucmVhZERvdWJsZUxFKGspOmdpKFIsayl9LEFyPWZ1bmN0aW9uKFIpe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoUil8fEFycmF5LmlzQXJyYXkoUil9KSx0eXBlb2YgY3B0YWJsZTwidSImJihSbD1mdW5jdGlvbihTLFIsayl7cmV0dXJuIGNw''@;'; put 'put ''dGFibGUudXRpbHMuZGVjb2RlKDEyMDAsUy5zbGljZShSLGspKS5yZXBsYWNlKEUsIiIpfSxrMT1mdW5jdGlvbihTLFIsayl7cmV0dXJuIGNwdGFibGUudXRpbHMuZGVjb2RlKDY1MDAxLFMuc2xpY2UoUixrKSl9LFhkPWZ1bmN0aW9uKFMsUil7dmFyIGs9emEoUyxSKTtyZXR1cm4gaz4wP2Nw''@;'; put 'put ''dGFibGUudXRpbHMuZGVjb2RlKEYsUy5zbGljZShSKzQsUis0K2stMSkpOiIifSx6aD1mdW5jdGlvbihTLFIpe3ZhciBrPXphKFMsUik7cmV0dXJuIGs+MD9jcHRhYmxlLnV0aWxzLmRlY29kZShQLFMuc2xpY2UoUis0LFIrNCtrLTEpKToiIn0sVm89ZnVuY3Rpb24oUyxSKXt2YXIgaz0yKnph''@;'; put 'put ''KFMsUik7cmV0dXJuIGs+MD9jcHRhYmxlLnV0aWxzLmRlY29kZSgxMjAwLFMuc2xpY2UoUis0LFIrNCtrLTEpKToiIn0sVWg9ZnVuY3Rpb24oUyxSKXt2YXIgaz16YShTLFIpO3JldHVybiBrPjA/Y3B0YWJsZS51dGlscy5kZWNvZGUoMTIwMCxTLnNsaWNlKFIrNCxSKzQraykpOiIifSxXaD1m''@;'; put 'put ''dW5jdGlvbihTLFIpe3ZhciBrPXphKFMsUik7cmV0dXJuIGs+MD9jcHRhYmxlLnV0aWxzLmRlY29kZSg2NTAwMSxTLnNsaWNlKFIrNCxSKzQraykpOiIifSk7dmFyIE9hPWZ1bmN0aW9uKFMsUil7cmV0dXJuIFNbUl19LGVhPWZ1bmN0aW9uKFMsUil7cmV0dXJuIDI1NipTW1IrMV0rU1tSXX0s''@;'; put 'put ''aWw9ZnVuY3Rpb24oUyxSKXt2YXIgaz0yNTYqU1tSKzFdK1NbUl07cmV0dXJuIGs8MzI3Njg/azotMSooNjU1MzUtaysxKX0semE9ZnVuY3Rpb24oUyxSKXtyZXR1cm4gU1tSKzNdKigxPDwyNCkrKFNbUisyXTw8MTYpKyhTW1IrMV08PDgpK1NbUl19LFZzPWZ1bmN0aW9uKFMsUil7cmV0dXJu''@;'; put 'put ''IFNbUiszXTw8MjR8U1tSKzJdPDwxNnxTW1IrMV08PDh8U1tSXX0sQ3M9ZnVuY3Rpb24oUyxSKXtyZXR1cm4gU1tSXTw8MjR8U1tSKzFdPDwxNnxTW1IrMl08PDh8U1tSKzNdfTtmdW5jdGlvbiBObChTLFIpe3ZhciBHLFEsZ2UscGUseWUsUGUsaz0iIixhZT1bXTtzd2l0Y2goUil7Y2FzZSJk''@;'; put 'put ''YmNzIjppZihQZT10aGlzLmwsVGUmJkJ1ZmZlci5pc0J1ZmZlcih0aGlzKSlrPXRoaXMuc2xpY2UodGhpcy5sLHRoaXMubCsyKlMpLnRvU3RyaW5nKCJ1dGYxNmxlIik7ZWxzZSBmb3IoeWU9MDt5ZTxTOysreWUpays9U3RyaW5nLmZyb21DaGFyQ29kZShlYSh0aGlzLFBlKSksUGUrPTI7Uyo9''@;'; put 'put ''MjticmVhaztjYXNlInV0ZjgiOms9azEodGhpcyx0aGlzLmwsdGhpcy5sK1MpO2JyZWFrO2Nhc2UidXRmMTZsZSI6az1SbCh0aGlzLHRoaXMubCx0aGlzLmwrKFMqPTIpKTticmVhaztjYXNlIndzdHIiOmlmKCEodHlwZW9mIGNwdGFibGU8InUiKSlyZXR1cm4gTmwuY2FsbCh0aGlzLFMsImRi''@;'; put 'put ''Y3MiKTtrPWNwdGFibGUudXRpbHMuZGVjb2RlKFAsdGhpcy5zbGljZSh0aGlzLmwsdGhpcy5sKzIqUykpLFMqPTI7YnJlYWs7Y2FzZSJscHN0ci1hbnNpIjprPVhkKHRoaXMsdGhpcy5sKSxTPTQremEodGhpcyx0aGlzLmwpO2JyZWFrO2Nhc2UibHBzdHItY3AiOms9emgodGhpcyx0aGlzLmwp''@;'; put 'put ''LFM9NCt6YSh0aGlzLHRoaXMubCk7YnJlYWs7Y2FzZSJscHdzdHIiOms9Vm8odGhpcyx0aGlzLmwpLFM9NCsyKnphKHRoaXMsdGhpcy5sKTticmVhaztjYXNlImxwcDQiOlM9NCt6YSh0aGlzLHRoaXMubCksaz1VaCh0aGlzLHRoaXMubCksMiZTJiYoUys9Mik7YnJlYWs7Y2FzZSI4bHBwNCI6''@;'; put 'put ''Uz00K3phKHRoaXMsdGhpcy5sKSxrPVdoKHRoaXMsdGhpcy5sKSwzJlMmJihTKz00LSgzJlMpKTticmVhaztjYXNlImNzdHIiOmZvcihTPTAsaz0iIjswIT09KGdlPU9hKHRoaXMsdGhpcy5sK1MrKykpOylhZS5wdXNoKHJlKGdlKSk7az1hZS5qb2luKCIiKTticmVhaztjYXNlIl93c3RyIjpm''@;'; put 'put ''b3IoUz0wLGs9IiI7MCE9PShnZT1lYSh0aGlzLHRoaXMubCtTKSk7KWFlLnB1c2gocmUoZ2UpKSxTKz0yO1MrPTIsaz1hZS5qb2luKCIiKTticmVhaztjYXNlImRiY3MtY29udCI6Zm9yKGs9IiIsUGU9dGhpcy5sLHllPTA7eWU8UzsrK3llKXtpZih0aGlzLmxlbnMmJi0xIT09dGhpcy5sZW5z''@;'; put 'put ''LmluZGV4T2YoUGUpKXJldHVybiBnZT1PYSh0aGlzLFBlKSx0aGlzLmw9UGUrMSxwZT1ObC5jYWxsKHRoaXMsUy15ZSxnZT8iZGJjcy1jb250Ijoic2Jjcy1jb250IiksYWUuam9pbigiIikrcGU7YWUucHVzaChyZShlYSh0aGlzLFBlKSkpLFBlKz0yfWs9YWUuam9pbigiIiksUyo9MjticmVh''@;'; put 'put ''aztjYXNlImNwc3RyIjppZih0eXBlb2YgY3B0YWJsZTwidSIpe2s9Y3B0YWJsZS51dGlscy5kZWNvZGUoUCx0aGlzLnNsaWNlKHRoaXMubCx0aGlzLmwrUykpO2JyZWFrfWNhc2Uic2Jjcy1jb250Ijpmb3Ioaz0iIixQZT10aGlzLmwseWU9MDt5ZSE9UzsrK3llKXtpZih0aGlzLmxlbnMmJi0x''@;'; put 'put ''IT09dGhpcy5sZW5zLmluZGV4T2YoUGUpKXJldHVybiBnZT1PYSh0aGlzLFBlKSx0aGlzLmw9UGUrMSxwZT1ObC5jYWxsKHRoaXMsUy15ZSxnZT8iZGJjcy1jb250Ijoic2Jjcy1jb250IiksYWUuam9pbigiIikrcGU7YWUucHVzaChyZShPYSh0aGlzLFBlKSkpLFBlKz0xfWs9YWUuam9pbigi''@;'; put 'put ''Iik7YnJlYWs7ZGVmYXVsdDpzd2l0Y2goUyl7Y2FzZSAxOnJldHVybiBHPU9hKHRoaXMsdGhpcy5sKSx0aGlzLmwrKyxHO2Nhc2UgMjpyZXR1cm4gRz0oImkiPT09Uj9pbDplYSkodGhpcyx0aGlzLmwpLHRoaXMubCs9MixHO2Nhc2UgNDpjYXNlLTQ6cmV0dXJuImkiIT09UiYmMTI4JnRoaXNb''@;'; put 'put ''dGhpcy5sKzNdPyhRPXphKHRoaXMsdGhpcy5sKSx0aGlzLmwrPTQsUSk6KEc9KFM+MD9WczpDcykodGhpcyx0aGlzLmwpLHRoaXMubCs9NCxHKTtjYXNlIDg6Y2FzZS04OmlmKCJmIj09PVIpcmV0dXJuIFE9OD09Uz9hbih0aGlzLHRoaXMubCk6YW4oW3RoaXNbdGhpcy5sKzddLHRoaXNbdGhp''@;'; put 'put ''cy5sKzZdLHRoaXNbdGhpcy5sKzVdLHRoaXNbdGhpcy5sKzRdLHRoaXNbdGhpcy5sKzNdLHRoaXNbdGhpcy5sKzJdLHRoaXNbdGhpcy5sKzFdLHRoaXNbdGhpcy5sKzBdXSwwKSx0aGlzLmwrPTgsUTtTPTg7Y2FzZSAxNjprPXNkKHRoaXMsdGhpcy5sLFMpfX1yZXR1cm4gdGhpcy5sKz1TLGt9''@;'; put 'put ''dmFyIEhhPWZ1bmN0aW9uKFMsUixrKXtTW2tdPTI1NSZSLFNbaysxXT1SPj4+OCYyNTUsU1trKzJdPVI+Pj4xNiYyNTUsU1trKzNdPVI+Pj4yNCYyNTV9LGthPWZ1bmN0aW9uKFMsUixrKXtTW2tdPTI1NSZSLFNbaysxXT1SPj44JjI1NSxTW2srMl09Uj4+MTYmMjU1LFNbayszXT1SPj4yNCYy''@;'; put 'put ''NTV9LFN0PWZ1bmN0aW9uKFMsUixrKXtTW2tdPTI1NSZSLFNbaysxXT1SPj4+OCYyNTV9O2Z1bmN0aW9uIFZ0KFMsUixrKXt2YXIgRz0wLFE9MDtpZigiZGJjcyI9PT1rKXtmb3IoUT0wO1EhPVIubGVuZ3RoOysrUSlTdCh0aGlzLFIuY2hhckNvZGVBdChRKSx0aGlzLmwrMipRKTtHPTIqUi5s''@;'; put 'put ''ZW5ndGh9ZWxzZSBpZigic2JjcyI9PT1rKXtpZih0eXBlb2YgY3B0YWJsZTwidSImJjg3ND09Rilmb3IoUT0wO1EhPVIubGVuZ3RoOysrUSl7dmFyIGFlPWNwdGFibGUudXRpbHMuZW5jb2RlKEYsUi5jaGFyQXQoUSkpO3RoaXNbdGhpcy5sK1FdPWFlWzBdfWVsc2UgZm9yKFI9Ui5yZXBsYWNl''@;'; put 'put ''KC9bXlx4MDAtXHg3Rl0vZywiXyIpLFE9MDtRIT1SLmxlbmd0aDsrK1EpdGhpc1t0aGlzLmwrUV09MjU1JlIuY2hhckNvZGVBdChRKTtHPVIubGVuZ3RofWVsc2V7aWYoImhleCI9PT1rKXtmb3IoO1E8UzsrK1EpdGhpc1t0aGlzLmwrK109cGFyc2VJbnQoUi5zbGljZSgyKlEsMipRKzIpLDE2''@;'; put 'put ''KXx8MDtyZXR1cm4gdGhpc31pZigidXRmMTZsZSI9PT1rKXt2YXIgZ2U9TWF0aC5taW4odGhpcy5sK1MsdGhpcy5sZW5ndGgpO2ZvcihRPTA7UTxNYXRoLm1pbihSLmxlbmd0aCxTKTsrK1Epe3ZhciBwZT1SLmNoYXJDb2RlQXQoUSk7dGhpc1t0aGlzLmwrK109MjU1JnBlLHRoaXNbdGhpcy5s''@;'; put 'put ''KytdPXBlPj44fWZvcig7dGhpcy5sPGdlOyl0aGlzW3RoaXMubCsrXT0wO3JldHVybiB0aGlzfXN3aXRjaChTKXtjYXNlIDE6Rz0xLHRoaXNbdGhpcy5sXT0yNTUmUjticmVhaztjYXNlIDI6Rz0yLHRoaXNbdGhpcy5sXT0yNTUmUix0aGlzW3RoaXMubCsxXT0yNTUmKFI+Pj49OCk7YnJlYWs7''@;'; put 'put ''Y2FzZSAzOkc9Myx0aGlzW3RoaXMubF09MjU1JlIsdGhpc1t0aGlzLmwrMV09MjU1JihSPj4+PTgpLHRoaXNbdGhpcy5sKzJdPTI1NSYoUj4+Pj04KTticmVhaztjYXNlIDQ6Rz00LEhhKHRoaXMsUix0aGlzLmwpO2JyZWFrO2Nhc2UgODppZihHPTgsImYiPT09ayl7IWZ1bmN0aW9uIFFnKFMs''@;'; put 'put ''UixrKXt2YXIgRz0oUjwwfHwxL1I9PS0xLzA/MTowKTw8NyxRPTAsYWU9MCxnZT1HPy1SOlI7aXNGaW5pdGUoZ2UpPzA9PWdlP1E9YWU9MDooUT1NYXRoLmZsb29yKE1hdGgubG9nKGdlKS9NYXRoLkxOMiksYWU9Z2UqTWF0aC5wb3coMiw1Mi1RKSxRPD0tMTAyMyYmKCFpc0Zpbml0ZShhZSl8''@;'; put 'put ''fGFlPE1hdGgucG93KDIsNTIpKT9RPS0xMDIyOihhZS09TWF0aC5wb3coMiw1MiksUSs9MTAyMykpOihRPTIwNDcsYWU9aXNOYU4oUik/MjY5ODU6MCk7Zm9yKHZhciBwZT0wO3BlPD01OysrcGUsYWUvPTI1NilTW2srcGVdPTI1NSZhZTtTW2srNl09KDE1JlEpPDw0fDE1JmFlLFNbays3XT1R''@;'; put 'put ''Pj40fEd9KHRoaXMsUix0aGlzLmwpO2JyZWFrfWNhc2UgMTY6YnJlYWs7Y2FzZS00Okc9NCxrYSh0aGlzLFIsdGhpcy5sKX19cmV0dXJuIHRoaXMubCs9Ryx0aGlzfWZ1bmN0aW9uIF9uKFMsUil7dmFyIGs9c2QodGhpcyx0aGlzLmwsUy5sZW5ndGg+PjEpO2lmKGshPT1TKXRocm93IG5ldyBF''@;'; put 'put ''cnJvcihSKyJFeHBlY3RlZCAiK1MrIiBzYXcgIitrKTt0aGlzLmwrPVMubGVuZ3RoPj4xfWZ1bmN0aW9uIHZuKFMsUil7Uy5sPVIsUy5yZWFkX3NoaWZ0PU5sLFMuY2hrPV9uLFMud3JpdGVfc2hpZnQ9VnR9ZnVuY3Rpb24gUm4oUyxSKXtTLmwrPVJ9ZnVuY3Rpb24gYm4oUyl7dmFyIFI9VihT''@;'; put 'put ''KTtyZXR1cm4gdm4oUiwwKSxSfWZ1bmN0aW9uIGNyKFMsUixrKXtpZihTKXt2YXIgRyxRLGFlO3ZuKFMsUy5sfHwwKTtmb3IodmFyIGdlPVMubGVuZ3RoLHBlPTAseWU9MDtTLmw8Z2U7KXsxMjgmKHBlPVMucmVhZF9zaGlmdCgxKSkmJihwZT0oMTI3JnBlKSsoKDEyNyZTLnJlYWRfc2hpZnQo''@;'; put 'put ''MSkpPDw3KSk7dmFyIFBlPUk4W3BlXXx8SThbNjU1MzVdO2ZvcihhZT0xMjcmKEc9Uy5yZWFkX3NoaWZ0KDEpKSxRPTE7UTw0JiYxMjgmRzsrK1EpYWUrPSgxMjcmKEc9Uy5yZWFkX3NoaWZ0KDEpKSk8PDcqUTt5ZT1TLmwrYWU7dmFyIE5lPShQZS5mfHxSbikoUyxhZSxrKTtpZihTLmw9eWUs''@;'; put 'put ''UihOZSxQZS5uLHBlKSlyZXR1cm59fX1mdW5jdGlvbiBtaSgpe3ZhciBTPVtdLFI9VGU/MjU2OjIwNDgsaz1mdW5jdGlvbihQZSl7dmFyIE5lPWJuKFBlKTtyZXR1cm4gdm4oTmUsMCksTmV9LEc9ayhSKSxRPWZ1bmN0aW9uKCl7RyYmKEcubGVuZ3RoPkcubCYmKChHPUcuc2xpY2UoMCxHLmwp''@;'; put 'put ''KS5sPUcubGVuZ3RoKSxHLmxlbmd0aD4wJiZTLnB1c2goRyksRz1udWxsKX0sYWU9ZnVuY3Rpb24oUGUpe3JldHVybiBHJiZQZTxHLmxlbmd0aC1HLmw/RzooUSgpLEc9ayhNYXRoLm1heChQZSsxLFIpKSl9O3JldHVybntuZXh0OmFlLHB1c2g6ZnVuY3Rpb24oUGUpe1EoKSxudWxsPT0oRz1Q''@;'; put 'put ''ZSkubCYmKEcubD1HLmxlbmd0aCksYWUoUil9LGVuZDpmdW5jdGlvbigpe3JldHVybiBRKCkseTAoW1NdKX0sX2J1ZnM6U319ZnVuY3Rpb24gSHIoUyxSLGssRyl7dmFyIGFlLFE9K1R6W1JdO2lmKCFpc05hTihRKSl7R3x8KEc9SThbUV0ucHx8KGt8fFtdKS5sZW5ndGh8fDApLGFlPTErKFE+''@;'; put 'put ''PTEyOD8xOjApKzEsRz49MTI4JiYrK2FlLEc+PTE2Mzg0JiYrK2FlLEc+PTIwOTcxNTImJisrYWU7dmFyIGdlPVMubmV4dChhZSk7UTw9MTI3P2dlLndyaXRlX3NoaWZ0KDEsUSk6KGdlLndyaXRlX3NoaWZ0KDEsMTI4KygxMjcmUSkpLGdlLndyaXRlX3NoaWZ0KDEsUT4+NykpO2Zvcih2YXIg''@;'; put 'put ''cGU9MDs0IT1wZTsrK3BlKXtpZighKEc+PTEyOCkpe2dlLndyaXRlX3NoaWZ0KDEsRyk7YnJlYWt9Z2Uud3JpdGVfc2hpZnQoMSwxMjgrKDEyNyZHKSksRz4+PTd9Rz4wJiZBcihrKSYmUy5wdXNoKGspfX1mdW5jdGlvbiBybyhTLFIsayl7dmFyIEc9cXQoUyk7aWYoUi5zPyhHLmNSZWwmJihH''@;'; put 'put ''LmMrPVIucy5jKSxHLnJSZWwmJihHLnIrPVIucy5yKSk6KEcuY1JlbCYmKEcuYys9Ui5jKSxHLnJSZWwmJihHLnIrPVIucikpLCFrfHxrLmJpZmY8MTIpe2Zvcig7Ry5jPj0yNTY7KUcuYy09MjU2O2Zvcig7Ry5yPj02NTUzNjspRy5yLT02NTUzNn1yZXR1cm4gR31mdW5jdGlvbiBzbyhTLFIs''@;'; put 'put ''ayl7dmFyIEc9cXQoUyk7cmV0dXJuIEcucz1ybyhHLnMsUi5zLGspLEcuZT1ybyhHLmUsUi5zLGspLEd9ZnVuY3Rpb24gQm8oUyxSKXtpZihTLmNSZWwmJlMuYzwwKWZvcihTPXF0KFMpO1MuYzwwOylTLmMrPVI+OD8xNjM4NDoyNTY7aWYoUy5yUmVsJiZTLnI8MClmb3IoUz1xdChTKTtTLnI8''@;'; put 'put ''MDspUy5yKz1SPjg/MTA0ODU3NjpSPjU/NjU1MzY6MTYzODQ7aWYoUy5jUmVsJiZTLmM+PShSPjg/MTYzODQ6MjU2KSlmb3IoUz1xdChTKTtTLmM+PShSPjg/MTYzODQ6MjU2KTspUy5jLT1SPjg/MTYzODQ6MjU2O2lmKFMuclJlbCYmUy5yPj0xMDQ4NTc2KWZvcihTPXF0KFMpO1Mucj49MTA0''@;'; put 'put ''ODU3NjspUy5yLT0xMDQ4NTc2O3ZhciBrPVhpKFMpO3JldHVybiFTLmNSZWwmJm51bGwhPVMuY1JlbCYmKGs9ZnVuY3Rpb24gWWgoUyl7cmV0dXJuIFMucmVwbGFjZSgvXihbQS1aXSkvLCIkJCQxIil9KGspKSwhUy5yUmVsJiZudWxsIT1TLnJSZWwmJihrPWZ1bmN0aW9uIE9jKFMpe3JldHVy''@;'; put 'put ''biBTLnJlcGxhY2UoLyhbQS1aXXxeKShcZCspJC8sIiQxJCQkMiIpfShrKSksa31mdW5jdGlvbiBHYShTLFIpe3JldHVybiAwIT1TLnMucnx8Uy5zLnJSZWx8fFMuZS5yIT0oUi5iaWZmPj0xMj8xMDQ4NTc1OlIuYmlmZj49OD82NTUzNjoxNjM4NCl8fFMuZS5yUmVsPzAhPVMucy5jfHxTLnMu''@;'; put 'put ''Y1JlbHx8Uy5lLmMhPShSLmJpZmY+PTEyPzE2MzgzOjI1NSl8fFMuZS5jUmVsP0JvKFMucyxSLmJpZmYpKyI6IitCbyhTLmUsUi5iaWZmKTooUy5zLnJSZWw/IiI6IiQiKSt6aShTLnMucikrIjoiKyhTLmUuclJlbD8iIjoiJCIpK3ppKFMuZS5yKTooUy5zLmNSZWw/IiI6IiQiKStUbyhTLnMu''@;'; put 'put ''YykrIjoiKyhTLmUuY1JlbD8iIjoiJCIpK1RvKFMuZS5jKX12YXIgJGw9e307ZnVuY3Rpb24gX2EoUyl7cmV0dXJuIHBhcnNlSW50KGZ1bmN0aW9uIFZsKFMpe3JldHVybiBTLnJlcGxhY2UoL1wkKFxkKykkLywiJDEiKX0oUyksMTApLTF9ZnVuY3Rpb24gemkoUyl7cmV0dXJuIiIrKFMrMSl9''@;'; put 'put ''ZnVuY3Rpb24gU28oUyl7Zm9yKHZhciBSPWZ1bmN0aW9uICQwKFMpe3JldHVybiBTLnJlcGxhY2UoL15cJChbQS1aXSkvLCIkMSIpfShTKSxrPTAsRz0wO0chPT1SLmxlbmd0aDsrK0cpaz0yNiprK1IuY2hhckNvZGVBdChHKS02NDtyZXR1cm4gay0xfWZ1bmN0aW9uIFRvKFMpe2lmKFM8MCl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoImludmFsaWQgY29sdW1uICIrUyk7dmFyIFI9IiI7Zm9yKCsrUztTO1M9TWF0aC5mbG9vcigoUy0xKS8yNikpUj1TdHJpbmcuZnJvbUNoYXJDb2RlKChTLTEpJTI2KzY1KStSO3JldHVybiBSfWZ1bmN0aW9uIE5hKFMpe2Zvcih2YXIgUj0wLGs9MCxHPTA7RzxTLmxl''@;'; put 'put ''bmd0aDsrK0cpe3ZhciBRPVMuY2hhckNvZGVBdChHKTtRPj00OCYmUTw9NTc/Uj0xMCpSKyhRLTQ4KTpRPj02NSYmUTw9OTAmJihrPTI2KmsrKFEtNjQpKX1yZXR1cm57YzprLTEscjpSLTF9fWZ1bmN0aW9uIFhpKFMpe2Zvcih2YXIgUj1TLmMrMSxrPSIiO1I7Uj0oUi0xKS8yNnwwKWs9U3Ry''@;'; put 'put ''aW5nLmZyb21DaGFyQ29kZSgoUi0xKSUyNis2NSkraztyZXR1cm4gaysoUy5yKzEpfWZ1bmN0aW9uIFNzKFMpe3ZhciBSPVMuaW5kZXhPZigiOiIpO3JldHVybi0xPT1SP3tzOk5hKFMpLGU6TmEoUyl9OntzOk5hKFMuc2xpY2UoMCxSKSksZTpOYShTLnNsaWNlKFIrMSkpfX1mdW5jdGlvbiBv''@;'; put 'put ''byhTLFIpe3JldHVybiB0eXBlb2YgUj4idSJ8fCJudW1iZXIiPT10eXBlb2YgUj9vbyhTLnMsUy5lKTooInN0cmluZyIhPXR5cGVvZiBTJiYoUz1YaShTKSksInN0cmluZyIhPXR5cGVvZiBSJiYoUj1YaShSKSksUz09Uj9TOlMrIjoiK1IpfWZ1bmN0aW9uIGFhKFMpe3ZhciBSPUpTT04ucGFy''@;'; put 'put ''c2UoJ3sicyI6eyJjIjowLCJyIjowfSwiZSI6eyJjIjowLCJyIjowfX0nKSxrPTAsRz0wLFE9MCxhZT1TLmxlbmd0aDtmb3Ioaz0wO0c8YWUmJiEoKFE9Uy5jaGFyQ29kZUF0KEcpLTY0KTwxfHxRPjI2KTsrK0cpaz0yNiprK1E7Zm9yKFIucy5jPS0tayxrPTA7RzxhZSYmISgoUT1TLmNoYXJD''@;'; put 'put ''b2RlQXQoRyktNDgpPDB8fFE+OSk7KytHKWs9MTAqaytRO2lmKFIucy5yPS0tayxHPT09YWV8fDU4PT09Uy5jaGFyQ29kZUF0KCsrRykpcmV0dXJuIFIuZS5jPVIucy5jLFIuZS5yPVIucy5yLFI7Zm9yKGs9MDtHIT1hZSYmISgoUT1TLmNoYXJDb2RlQXQoRyktNjQpPDF8fFE+MjYpOysrRylr''@;'; put 'put ''PTI2KmsrUTtmb3IoUi5lLmM9LS1rLGs9MDtHIT1hZSYmISgoUT1TLmNoYXJDb2RlQXQoRyktNDgpPDB8fFE+OSk7KytHKWs9MTAqaytRO3JldHVybiBSLmUucj0tLWssUn1mdW5jdGlvbiB0NShTLFIpe3ZhciBrPSJkIj09Uy50JiZSIGluc3RhbmNlb2YgRGF0ZTtpZihudWxsIT1TLnopdHJ5''@;'; put 'put ''e3JldHVybiBTLnc9QS5mb3JtYXQoUy56LGs/UWUoUik6Uil9Y2F0Y2h7fXRyeXtyZXR1cm4gUy53PUEuZm9ybWF0KChTLlhGfHx7fSkubnVtRm10SWR8fChrPzE0OjApLGs/UWUoUik6Uil9Y2F0Y2h7cmV0dXJuIiIrUn19ZnVuY3Rpb24gYmwoUyxSLGspe3JldHVybiBudWxsPT1TfHxudWxs''@;'; put 'put ''PT1TLnR8fCJ6Ij09Uy50PyIiOnZvaWQgMCE9PVMudz9TLnc6KCJkIj09Uy50JiYhUy56JiZrJiZrLmRhdGVORiYmKFMuej1rLmRhdGVORiksImUiPT1TLnQ/U2NbUy52XXx8Uy52OnQ1KFMsbnVsbD09Uj9TLnY6UikpfWZ1bmN0aW9uIEpkKFMsUil7dmFyIGs9UiYmUi5zaGVldD9SLnNoZWV0''@;'; put 'put ''OiJTaGVldDEiLEc9e307cmV0dXJuIEdba109Uyx7U2hlZXROYW1lczpba10sU2hlZXRzOkd9fWZ1bmN0aW9uIHU0KFMsUixrKXt2YXIgRz1rfHx7fSxRPVM/QXJyYXkuaXNBcnJheShTKTpHLmRlbnNlO251bGwhPWxlJiZudWxsPT1RJiYoUT1sZSk7dmFyIGFlPVN8fChRP1tdOnt9KSxnZT0w''@;'; put 'put ''LHBlPTA7aWYoYWUmJm51bGwhPUcub3JpZ2luKXtpZigibnVtYmVyIj09dHlwZW9mIEcub3JpZ2luKWdlPUcub3JpZ2luO2Vsc2V7dmFyIHllPSJzdHJpbmciPT10eXBlb2YgRy5vcmlnaW4/TmEoRy5vcmlnaW4pOkcub3JpZ2luO2dlPXllLnIscGU9eWUuY31hZVsiIXJlZiJdfHwoYWVbIiFy''@;'; put 'put ''ZWYiXT0iQTE6QTEiKX12YXIgUGU9e3M6e2M6MWU3LHI6MWU3fSxlOntjOjAscjowfX07aWYoYWVbIiFyZWYiXSl7dmFyIE5lPWFhKGFlWyIhcmVmIl0pO1BlLnMuYz1OZS5zLmMsUGUucy5yPU5lLnMucixQZS5lLmM9TWF0aC5tYXgoUGUuZS5jLE5lLmUuYyksUGUuZS5yPU1hdGgubWF4KFBl''@;'; put 'put ''LmUucixOZS5lLnIpLC0xPT1nZSYmKFBlLmUucj1nZT1OZS5lLnIrMSl9Zm9yKHZhciBZZT0wO1llIT1SLmxlbmd0aDsrK1llKWlmKFJbWWVdKXtpZighQXJyYXkuaXNBcnJheShSW1llXSkpdGhyb3cgbmV3IEVycm9yKCJhb2FfdG9fc2hlZXQgZXhwZWN0cyBhbiBhcnJheSBvZiBhcnJheXMi''@;'; put 'put ''KTtmb3IodmFyIGV0PTA7ZXQhPVJbWWVdLmxlbmd0aDsrK2V0KWlmKCEodHlwZW9mIFJbWWVdW2V0XT4idSIpKXt2YXIgdXQ9e3Y6UltZZV1bZXRdfSxFdD1nZStZZSxvdD1wZStldDtpZihQZS5zLnI+RXQmJihQZS5zLnI9RXQpLFBlLnMuYz5vdCYmKFBlLnMuYz1vdCksUGUuZS5yPEV0JiYo''@;'; put 'put ''UGUuZS5yPUV0KSxQZS5lLmM8b3QmJihQZS5lLmM9b3QpLCFSW1llXVtldF18fCJvYmplY3QiIT10eXBlb2YgUltZZV1bZXRdfHxBcnJheS5pc0FycmF5KFJbWWVdW2V0XSl8fFJbWWVdW2V0XWluc3RhbmNlb2YgRGF0ZSlpZihBcnJheS5pc0FycmF5KHV0LnYpJiYodXQuZj1SW1llXVtldF1b''@;'; put 'put ''MV0sdXQudj11dC52WzBdKSxudWxsPT09dXQudilpZih1dC5mKXV0LnQ9Im4iO2Vsc2UgaWYoRy5udWxsRXJyb3IpdXQudD0iZSIsdXQudj0wO2Vsc2V7aWYoIUcuc2hlZXRTdHVicyljb250aW51ZTt1dC50PSJ6In1lbHNlIm51bWJlciI9PXR5cGVvZiB1dC52P3V0LnQ9Im4iOiJib29sZWFu''@;'; put 'put ''Ij09dHlwZW9mIHV0LnY/dXQudD0iYiI6dXQudiBpbnN0YW5jZW9mIERhdGU/KHV0Lno9Ry5kYXRlTkZ8fEEuX3RhYmxlWzE0XSxHLmNlbGxEYXRlcz8odXQudD0iZCIsdXQudz1BLmZvcm1hdCh1dC56LFFlKHV0LnYpKSk6KHV0LnQ9Im4iLHV0LnY9UWUodXQudiksdXQudz1BLmZvcm1hdCh1''@;'; put 'put ''dC56LHV0LnYpKSk6dXQudD0icyI7ZWxzZSB1dD1SW1llXVtldF07aWYodXQmJnV0LmgpdHJ5e3V0LlI9bWQuaHRtbF90b19ycyh1dC5oKSx1dC52PSIiO2Zvcih2YXIgYnQ9MDtidDx1dC5SLmxlbmd0aDsrK2J0KXV0LnYrPXV0LlJbYnRdLnZ8fCIifWNhdGNoe31pZihRKWFlW0V0XXx8KGFl''@;'; put 'put ''W0V0XT1bXSksYWVbRXRdW290XSYmYWVbRXRdW290XS5zJiYodXQucz1hZVtFdF1bb3RdLnMpLGFlW0V0XVtvdF0mJmFlW0V0XVtvdF0ueiYmKHV0Lno9YWVbRXRdW290XS56KSxhZVtFdF1bb3RdPXV0O2Vsc2V7dmFyIEJ0PVhpKHtjOm90LHI6RXR9KTthZVtCdF0mJmFlW0J0XS5zJiYodXQu''@;'; put 'put ''cz1hZVtCdF0ucyksYWVbQnRdJiZhZVtCdF0ueiYmKHV0Lno9YWVbQnRdLnopLGFlW0J0XT11dH19fXJldHVybiBQZS5zLmM8MWU3JiYoYWVbIiFyZWYiXT1vbyhQZSkpLGFlfWZ1bmN0aW9uIGQ0KFMsUil7cmV0dXJuIHU0KG51bGwsUyxSKX1mdW5jdGlvbiBxMChTLFIpe3JldHVybiBSfHwo''@;'; put 'put ''Uj1ibig0KSksUi53cml0ZV9zaGlmdCg0LFMpLFJ9ZnVuY3Rpb24gcHUoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDQpO3JldHVybiAwPT09Uj8iIjpTLnJlYWRfc2hpZnQoUiwiZGJjcyIpfWZ1bmN0aW9uIFBjKFMsUil7dmFyIGs9ITE7cmV0dXJuIG51bGw9PVImJihrPSEwLFI9Ym4oNCsyKlMu''@;'; put 'put ''bGVuZ3RoKSksUi53cml0ZV9zaGlmdCg0LFMubGVuZ3RoKSxTLmxlbmd0aD4wJiZSLndyaXRlX3NoaWZ0KDAsUywiZGJjcyIpLGs/Ui5zbGljZSgwLFIubCk6Un1mdW5jdGlvbiBJdyhTKXtyZXR1cm57aWNoOlMucmVhZF9zaGlmdCgyKSxpZm50OlMucmVhZF9zaGlmdCgyKX19ZnVuY3Rpb24g''@;'; put 'put ''b2woUyxSKXt2YXIgaz1TLmwsRz1TLnJlYWRfc2hpZnQoMSksUT1wdShTKSxhZT1bXSxnZT17dDpRLGg6UX07aWYoMSZHKXtmb3IodmFyIHBlPVMucmVhZF9zaGlmdCg0KSx5ZT0wO3llIT1wZTsrK3llKWFlLnB1c2goSXcoUykpO2dlLnI9YWV9ZWxzZSBnZS5yPVt7aWNoOjAsaWZudDowfV07''@;'; put 'put ''cmV0dXJuIFMubD1rK1IsZ2V9IWZ1bmN0aW9uKFMsUil7dmFyIGs7aWYodHlwZW9mIGNyeXB0b0Jyb3dzZXJpZnk8InUiKWs9Y3J5cHRvQnJvd3NlcmlmeTtlbHNlIGlmKHR5cGVvZiBSPCJ1IilrPVI7ZWxzZSB0cnl7az1fKDkxNDI2KX1jYXRjaHtrPW51bGx9Uy5yYzQ9ZnVuY3Rpb24oRyxR''@;'; put 'put ''KXt2YXIgYWU9bmV3IEFycmF5KDI1NiksZ2U9MCxwZT0wLHllPTAsUGU9MDtmb3IocGU9MDsyNTYhPXBlOysrcGUpYWVbcGVdPXBlO2ZvcihwZT0wOzI1NiE9cGU7KytwZSl5ZT15ZSthZVtwZV0rR1twZSVHLmxlbmd0aF0uY2hhckNvZGVBdCgwKSYyNTUsUGU9YWVbcGVdLGFlW3BlXT1hZVt5''@;'; put 'put ''ZV0sYWVbeWVdPVBlO3BlPXllPTA7dmFyIE5lPVYoUS5sZW5ndGgpO2ZvcihnZT0wO2dlIT1RLmxlbmd0aDsrK2dlKVBlPWFlW3BlPXBlKzEmMjU1XSxhZVtwZV09YWVbeWU9KHllK2FlW3BlXSklMjU2XSxhZVt5ZV09UGUsTmVbZ2VdPVFbZ2VdXmFlW2FlW3BlXSthZVt5ZV0mMjU1XTtyZXR1''@;'; put 'put ''cm4gTmV9LFMubWQ1PWZ1bmN0aW9uKEcpe2lmKCFrKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY3J5cHRvIik7cmV0dXJuIGsuY3JlYXRlSGFzaCgibWQ1IikudXBkYXRlKEJ1ZmZlci5mcm9tKEcpKS5kaWdlc3QoImhleCIpfX0oJGwsdHlwZW9mIGNyeXB0bzwidSI/Y3J5cHRvOnZv''@;'; put 'put ''aWQgMCk7dmFyIFJ3PW9sO2Z1bmN0aW9uIEQxKFMpe3ZhciBSPVMucmVhZF9zaGlmdCg0KSxrPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gays9Uy5yZWFkX3NoaWZ0KDEpPDwxNixTLmwrKyx7YzpSLGlTdHlsZVJlZjprfX1mdW5jdGlvbiBNcihTLFIpe3JldHVybiBudWxsPT1SJiYoUj1ibig4''@;'; put 'put ''KSksUi53cml0ZV9zaGlmdCgtNCxTLmMpLFIud3JpdGVfc2hpZnQoMyxTLmlTdHlsZVJlZnx8Uy5zKSxSLndyaXRlX3NoaWZ0KDEsMCksUn1mdW5jdGlvbiBHaChTKXt2YXIgUj1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIFIrPVMucmVhZF9zaGlmdCgxKTw8MTYsUy5sKysse2M6LTEsaVN0eWxl''@;'; put 'put ''UmVmOlJ9fWZ1bmN0aW9uIGhpKFMsUil7cmV0dXJuIG51bGw9PVImJihSPWJuKDQpKSxSLndyaXRlX3NoaWZ0KDMsUy5pU3R5bGVSZWZ8fFMucyksUi53cml0ZV9zaGlmdCgxLDApLFJ9dmFyIG41PXB1LHI1PVBjO2Z1bmN0aW9uIGUwKFMpe3ZhciBSPVMucmVhZF9zaGlmdCg0KTtyZXR1cm4g''@;'; put 'put ''MD09PVJ8fDQyOTQ5NjcyOTU9PT1SPyIiOlMucmVhZF9zaGlmdChSLCJkYmNzIil9ZnVuY3Rpb24gbGYoUyxSKXt2YXIgaz0hMTtyZXR1cm4gbnVsbD09UiYmKGs9ITAsUj1ibigxMjcpKSxSLndyaXRlX3NoaWZ0KDQsUy5sZW5ndGg+MD9TLmxlbmd0aDo0Mjk0OTY3Mjk1KSxTLmxlbmd0aD4w''@;'; put 'put ''JiZSLndyaXRlX3NoaWZ0KDAsUywiZGJjcyIpLGs/Ui5zbGljZSgwLFIubCk6Un12YXIgbzU9cHUsaDQ9ZTAsYTU9bGY7ZnVuY3Rpb24gSTEoUyl7dmFyIFI9Uy5zbGljZShTLmwsUy5sKzQpLGs9MSZSWzBdLEc9MiZSWzBdO1MubCs9NCxSWzBdJj0yNTI7dmFyIFE9MD09PUc/YW4oWzAsMCww''@;'; put 'put ''LDAsUlswXSxSWzFdLFJbMl0sUlszXV0sMCk6VnMoUiwwKT4+MjtyZXR1cm4gaz9RLzEwMDpRfWZ1bmN0aW9uIGl2KFMsUil7bnVsbD09UiYmKFI9Ym4oNCkpO3ZhciBrPTAsRz0wLFE9MTAwKlM7aWYoUz09KDB8UykmJlM+PS0oMTw8MjkpJiZTPDE8PDI5P0c9MTpRPT0oMHxRKSYmUT49LSgx''@;'; put 'put ''PDwyOSkmJlE8MTw8MjkmJihHPTEsaz0xKSwhRyl0aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIFJrTnVtYmVyICIrUyk7Ui53cml0ZV9zaGlmdCgtNCwoKGs/UTpTKTw8MikrKGsrMikpfWZ1bmN0aW9uIGxkKFMpe3ZhciBSPXtzOnt9LGU6e319O3JldHVybiBSLnMucj1TLnJlYWRfc2hp''@;'; put 'put ''ZnQoNCksUi5lLnI9Uy5yZWFkX3NoaWZ0KDQpLFIucy5jPVMucmVhZF9zaGlmdCg0KSxSLmUuYz1TLnJlYWRfc2hpZnQoNCksUn12YXIgZ3U9bGQsY2Y9ZnVuY3Rpb24geDYoUyxSKXtyZXR1cm4gUnx8KFI9Ym4oMTYpKSxSLndyaXRlX3NoaWZ0KDQsUy5zLnIpLFIud3JpdGVfc2hpZnQoNCxT''@;'; put 'put ''LmUuciksUi53cml0ZV9zaGlmdCg0LFMucy5jKSxSLndyaXRlX3NoaWZ0KDQsUy5lLmMpLFJ9O2Z1bmN0aW9uIHQwKFMpe2Zvcih2YXIgUj1TLnJlYWRfc2hpZnQoNCksaz1bXSxHPTA7RzxSOysrRyl7dmFyIFE9Z3UoUyk7ay5wdXNoKG9vKFEpKX1yZXR1cm4gay5qb2luKCIsIil9ZnVuY3Rp''@;'; put 'put ''b24gTGwoUyl7aWYoUy5sZW5ndGgtUy5sPDgpdGhyb3ciWExTIFhudW0gQnVmZmVyIHVuZGVyZmxvdyI7cmV0dXJuIFMucmVhZF9zaGlmdCg4LCJmIil9ZnVuY3Rpb24gTHUoUyxSKXtyZXR1cm4oUnx8Ym4oOCkpLndyaXRlX3NoaWZ0KDgsUywiZiIpfWZ1bmN0aW9uICRoKFMpe3ZhciBSPXt9''@;'; put 'put ''LEc9Uy5yZWFkX3NoaWZ0KDEpPj4+MSxRPVMucmVhZF9zaGlmdCgxKSxhZT1TLnJlYWRfc2hpZnQoMiwiaSIpLGdlPVMucmVhZF9zaGlmdCgxKSxwZT1TLnJlYWRfc2hpZnQoMSkseWU9Uy5yZWFkX3NoaWZ0KDEpO3N3aXRjaChTLmwrKyxHKXtjYXNlIDA6Ui5hdXRvPTE7YnJlYWs7Y2FzZSAx''@;'; put 'put ''OlIuaW5kZXg9UTt2YXIgUGU9bjBbUV07UGUmJihSLnJnYj1oZChQZSkpO2JyZWFrO2Nhc2UgMjpSLnJnYj1oZChbZ2UscGUseWVdKTticmVhaztjYXNlIDM6Ui50aGVtZT1RfXJldHVybiAwIT1hZSYmKFIudGludD1hZT4wP2FlLzMyNzY3OmFlLzMyNzY4KSxSfWZ1bmN0aW9uIHVmKFMsUil7''@;'; put 'put ''aWYoUnx8KFI9Ym4oOCkpLCFTfHxTLmF1dG8pcmV0dXJuIFIud3JpdGVfc2hpZnQoNCwwKSxSLndyaXRlX3NoaWZ0KDQsMCksUjtudWxsIT1TLmluZGV4PyhSLndyaXRlX3NoaWZ0KDEsMiksUi53cml0ZV9zaGlmdCgxLFMuaW5kZXgpKTpudWxsIT1TLnRoZW1lPyhSLndyaXRlX3NoaWZ0KDEs''@;'; put 'put ''NiksUi53cml0ZV9zaGlmdCgxLFMudGhlbWUpKTooUi53cml0ZV9zaGlmdCgxLDUpLFIud3JpdGVfc2hpZnQoMSwwKSk7dmFyIGs9Uy50aW50fHwwO2lmKGs+MD9rKj0zMjc2NzprPDAmJihrKj0zMjc2OCksUi53cml0ZV9zaGlmdCgyLGspLFMucmdiJiZudWxsPT1TLnRoZW1lKXt2YXIgRz1T''@;'; put 'put ''LnJnYnx8IkZGRkZGRiI7Im51bWJlciI9PXR5cGVvZiBHJiYoRz0oIjAwMDAwMCIrRy50b1N0cmluZygxNikpLnNsaWNlKC02KSksUi53cml0ZV9zaGlmdCgxLHBhcnNlSW50KEcuc2xpY2UoMCwyKSwxNikpLFIud3JpdGVfc2hpZnQoMSxwYXJzZUludChHLnNsaWNlKDIsNCksMTYpKSxSLndy''@;'; put 'put ''aXRlX3NoaWZ0KDEscGFyc2VJbnQoRy5zbGljZSg0LDYpLDE2KSksUi53cml0ZV9zaGlmdCgxLDI1NSl9ZWxzZSBSLndyaXRlX3NoaWZ0KDIsMCksUi53cml0ZV9zaGlmdCgxLDApLFIud3JpdGVfc2hpZnQoMSwwKTtyZXR1cm4gUn1mdW5jdGlvbiBMdyhTKXt2YXIgUj1TLnJlYWRfc2hpZnQo''@;'; put 'put ''MSk7cmV0dXJuIFMubCsrLHtmQm9sZDoxJlIsZkl0YWxpYzoyJlIsZlVuZGVybGluZTo0JlIsZlN0cmlrZW91dDo4JlIsZk91dGxpbmU6MTYmUixmU2hhZG93OjMyJlIsZkNvbmRlbnNlOjY0JlIsZkV4dGVuZDoxMjgmUn19ZnVuY3Rpb24gT3coUyxSKXt2YXIgRz1TLnJlYWRfc2hpZnQoNCk7''@;'; put 'put ''c3dpdGNoKEcpe2Nhc2UgMDpyZXR1cm4iIjtjYXNlIDQyOTQ5NjcyOTU6Y2FzZSA0Mjk0OTY3Mjk0OnJldHVybnsyOiJCSVRNQVAiLDM6Ik1FVEFGSUxFUElDVCIsODoiRElCIiwxNDoiRU5ITUVUQUZJTEUifVtTLnJlYWRfc2hpZnQoNCldfHwiIn1pZihHPjQwMCl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''IlVuc3VwcG9ydGVkIENsaXBib2FyZDogIitHLnRvU3RyaW5nKDE2KSk7cmV0dXJuIFMubC09NCxTLnJlYWRfc2hpZnQoMCwxPT1SPyJscHN0ciI6Imxwd3N0ciIpfXZhciBLaD0yLEtsPTMsSTA9MTIsWm49ODEsUHc9WzgwLFpuXSxmND17MTp7bjoiQ29kZVBhZ2UiLHQ6S2h9LDI6e246IkNh''@;'; put 'put ''dGVnb3J5Iix0OjgwfSwzOntuOiJQcmVzZW50YXRpb25Gb3JtYXQiLHQ6ODB9LDQ6e246IkJ5dGVDb3VudCIsdDpLbH0sNTp7bjoiTGluZUNvdW50Iix0OktsfSw2OntuOiJQYXJhZ3JhcGhDb3VudCIsdDpLbH0sNzp7bjoiU2xpZGVDb3VudCIsdDpLbH0sODp7bjoiTm90ZUNvdW50Iix0Okts''@;'; put 'put ''fSw5OntuOiJIaWRkZW5Db3VudCIsdDpLbH0sMTA6e246Ik11bHRpbWVkaWFDbGlwQ291bnQiLHQ6S2x9LDExOntuOiJTY2FsZUNyb3AiLHQ6MTF9LDEyOntuOiJIZWFkaW5nUGFpcnMiLHQ6NDA5NnxJMH0sMTM6e246IlRpdGxlc09mUGFydHMiLHQ6NDEyNn0sMTQ6e246Ik1hbmFnZXIiLHQ6''@;'; put 'put ''ODB9LDE1OntuOiJDb21wYW55Iix0OjgwfSwxNjp7bjoiTGlua3NVcFRvRGF0ZSIsdDoxMX0sMTc6e246IkNoYXJhY3RlckNvdW50Iix0OktsfSwxOTp7bjoiU2hhcmVkRG9jIix0OjExfSwyMjp7bjoiSHlwZXJsaW5rc0NoYW5nZWQiLHQ6MTF9LDIzOntuOiJBcHBWZXJzaW9uIix0OktsLHA6''@;'; put 'put ''InZlcnNpb24ifSwyNDp7bjoiRGlnU2lnIix0OjY1fSwyNjp7bjoiQ29udGVudFR5cGUiLHQ6ODB9LDI3OntuOiJDb250ZW50U3RhdHVzIix0OjgwfSwyODp7bjoiTGFuZ3VhZ2UiLHQ6ODB9LDI5OntuOiJWZXJzaW9uIix0OjgwfSwyNTU6e30sMjE0NzQ4MzY0ODp7bjoiTG9jYWxlIix0OjE5''@;'; put 'put ''fSwyMTQ3NDgzNjUxOntuOiJCZWhhdmlvciIsdDoxOX0sMTkxOTA1NDQzNDp7fX0sbDU9ezE6e246IkNvZGVQYWdlIix0OktofSwyOntuOiJUaXRsZSIsdDo4MH0sMzp7bjoiU3ViamVjdCIsdDo4MH0sNDp7bjoiQXV0aG9yIix0OjgwfSw1OntuOiJLZXl3b3JkcyIsdDo4MH0sNjp7bjoiQ29t''@;'; put 'put ''bWVudHMiLHQ6ODB9LDc6e246IlRlbXBsYXRlIix0OjgwfSw4OntuOiJMYXN0QXV0aG9yIix0OjgwfSw5OntuOiJSZXZOdW1iZXIiLHQ6ODB9LDEwOntuOiJFZGl0VGltZSIsdDo2NH0sMTE6e246Ikxhc3RQcmludGVkIix0OjY0fSwxMjp7bjoiQ3JlYXRlZERhdGUiLHQ6NjR9LDEzOntuOiJN''@;'; put 'put ''b2RpZmllZERhdGUiLHQ6NjR9LDE0OntuOiJQYWdlQ291bnQiLHQ6S2x9LDE1OntuOiJXb3JkQ291bnQiLHQ6S2x9LDE2OntuOiJDaGFyQ291bnQiLHQ6S2x9LDE3OntuOiJUaHVtYm5haWwiLHQ6NzF9LDE4OntuOiJBcHBsaWNhdGlvbiIsdDo4MH0sMTk6e246IkRvY1NlY3VyaXR5Iix0Okts''@;'; put 'put ''fSwyNTU6e30sMjE0NzQ4MzY0ODp7bjoiTG9jYWxlIix0OjE5fSwyMTQ3NDgzNjUxOntuOiJCZWhhdmlvciIsdDoxOX0sMTkxOTA1NDQzNDp7fX0sYzU9SWUoZjQsIm4iKSxkZj1JZShsNSwibiIpLEE2PXsxOiJVUyIsMjoiQ0EiLDM6IiIsNzoiUlUiLDIwOiJFRyIsMzA6IkdSIiwzMToiTkwi''@;'; put 'put ''LDMyOiJCRSIsMzM6IkZSIiwzNDoiRVMiLDM2OiJIVSIsMzk6IklUIiw0MToiQ0giLDQzOiJBVCIsNDQ6IkdCIiw0NToiREsiLDQ2OiJTRSIsNDc6Ik5PIiw0ODoiUEwiLDQ5OiJERSIsNTI6Ik1YIiw1NToiQlIiLDYxOiJBVSIsNjQ6Ik5aIiw2NjoiVEgiLDgxOiJKUCIsODI6IktSIiw4NDoi''@;'; put 'put ''Vk4iLDg2OiJDTiIsOTA6IlRSIiwxMDU6IkpTIiwyMTM6IkRaIiwyMTY6Ik1BIiwyMTg6IkxZIiwzNTE6IlBUIiwzNTQ6IklTIiwzNTg6IkZJIiw0MjA6IkNaIiw4ODY6IlRXIiw5NjE6IkxCIiw5NjI6IkpPIiw5NjM6IlNZIiw5NjQ6IklRIiw5NjU6IktXIiw5NjY6IlNBIiw5NzE6IkFFIiw5''@;'; put 'put ''NzI6IklMIiw5NzQ6IlFBIiw5ODE6IklSIiw2NTUzNToiVVMifSxhdj1bbnVsbCwic29saWQiLCJtZWRpdW1HcmF5IiwiZGFya0dyYXkiLCJsaWdodEdyYXkiLCJkYXJrSG9yaXpvbnRhbCIsImRhcmtWZXJ0aWNhbCIsImRhcmtEb3duIiwiZGFya1VwIiwiZGFya0dyaWQiLCJkYXJrVHJlbGxp''@;'; put 'put ''cyIsImxpZ2h0SG9yaXpvbnRhbCIsImxpZ2h0VmVydGljYWwiLCJsaWdodERvd24iLCJsaWdodFVwIiwibGlnaHRHcmlkIiwibGlnaHRUcmVsbGlzIiwiZ3JheTEyNSIsImdyYXkwNjI1Il07ZnVuY3Rpb24gazYoUyl7cmV0dXJuIFMubWFwKGZ1bmN0aW9uKFIpe3JldHVybltSPj4xNiYyNTUs''@;'; put 'put ''Uj4+OCYyNTUsMjU1JlJdfSl9dmFyIHA0PWs2KFswLDE2Nzc3MjE1LDE2NzExNjgwLDY1MjgwLDI1NSwxNjc3Njk2MCwxNjcxMTkzNSw2NTUzNSwwLDE2Nzc3MjE1LDE2NzExNjgwLDY1MjgwLDI1NSwxNjc3Njk2MCwxNjcxMTkzNSw2NTUzNSw4Mzg4NjA4LDMyNzY4LDEyOCw4NDIxMzc2LDgz''@;'; put 'put ''ODg3MzYsMzI4OTYsMTI2MzIyNTYsODQyMTUwNCwxMDA2NjQzMSwxMDA0MDE2NiwxNjc3NzE2NCwxMzQzNDg3OSw2Njg0Nzc0LDE2NzQ0NTc2LDI2MzE2LDEzNDIxODIzLDEyOCwxNjcxMTkzNSwxNjc3Njk2MCw2NTUzNSw4Mzg4NzM2LDgzODg2MDgsMzI4OTYsMjU1LDUyNDc5LDEzNDM0ODc5''@;'; put 'put ''LDEzNDM0ODI4LDE2Nzc3MTEzLDEwMDc5NDg3LDE2NzUxMDUyLDEzNDA4NzY3LDE2NzY0MDU3LDMzNjg3MDMsMzM5NDc2NCwxMDA3OTIzMiwxNjc2MzkwNCwxNjc1MDg0OCwxNjczNzc5Miw2NzEwOTM3LDk4Njg5NTAsMTMxNTgsMzM4MTYwNiwxMzA1NiwzMzU1MzkyLDEwMDQwMDY0LDEwMDQw''@;'; put 'put ''MTY2LDMzNTU1NDUsMzM1NTQ0MywwLDE2Nzc3MjE1LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdKSxuMD1xdChwNCksRnc9azYoWzEyNjMyMjU2LDk4Njg5NTAsODQyMTUwNCw2NzEwODg2LDMzNTU0NDMsMTY3MTE2ODAsMzI3NjgsMTMzNjk0OTcsMTI4LDMzOTQ1NjAsMjYzNjcs''@;'; put 'put ''MTAwMjcyMTIsMTAwNTMxNzEsMTI4LDMyNzY4LDgzODg2MDgsMzI4OTYsODM4ODczNiw4NDIxMzc2LDEzNjMxNDg4LDE0NTM5OTk0LDEzMDY4ODUwLDEzOTI0MzUyLDk5Njc0OTYsOTE3NTI2Nyw5MTk1MDA4LDM2ODM1MzcsMTA2OTI1OCw4ODgwODk5LDc0OTQ2NCwyODkzNDc2LDExNzQ1NzMw''@;'; put 'put ''LDM3NTAyMDEsMTU1NTk1MDMsMTgzNzk0MSwxMjA4NDM1OSw3NjMyMjUwLDczNjMzMjgsOTUxNDU4OCw4Mjg4NjE3LDMwMzY4MTQsMTExODQ4MTBdKSxTYz17MDoiI05VTEwhIiw3OiIjRElWLzAhIiwxNToiI1ZBTFVFISIsMjM6IiNSRUYhIiwyOToiI05BTUU/IiwzNjoiI05VTSEiLDQyOiIj''@;'; put 'put ''Ti9BIiw0MzoiI0dFVFRJTkdfREFUQSIsMjU1OiIjV1RGPyJ9LEQzPWtlKFNjKSxnND17ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0Lm1haW4reG1sIjoid29ya2Jvb2tzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2Vs''@;'; put 'put ''LmJpbkluZGV4V3MiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmludGxtYWNyb3NoZWV0IjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5iaW5JbmRleE1zIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1wYWNrYWdlLmNvcmUtcHJvcGVy''@;'; put 'put ''dGllcyt4bWwiOiJjb3JlcHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuY3VzdG9tLXByb3BlcnRpZXMreG1sIjoiY3VzdHByb3BzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmV4dGVuZGVkLXByb3Bl''@;'; put 'put ''cnRpZXMreG1sIjoiZXh0cHJvcHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuY3VzdG9tWG1sUHJvcGVydGllcyt4bWwiOiJjdXN0b214bWxwcm9wcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRz''@;'; put 'put ''aGVldG1sLmN1c3RvbVByb3BlcnR5IjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5waXZvdFRhYmxlIjoicGl2b3RzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RUYWJsZSt4bWwiOiJwaXZvdHMiLCJh''@;'; put 'put ''cHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmNoYXJ0K3htbCI6ImNoYXJ0b2JqcyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuY2hhcnRjb2xvcnN0eWxlK3htbCI6ImNoYXJ0Y29sb3JzIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmlj''@;'; put 'put ''ZS5jaGFydHN0eWxlK3htbCI6ImNoYXJ0c3R5bGVzIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5jaGFydGV4K3htbCI6ImNoYXJ0ZXhzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNhbGNDaGFpbiI6ImNhbGNjaGFpbnMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMt''@;'; put 'put ''b2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jYWxjQ2hhaW4reG1sIjoiY2FsY2NoYWlucyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnByaW50ZXJTZXR0aW5ncyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2Zm''@;'; put 'put ''aWNlLmFjdGl2ZVgiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS5hY3RpdmVYK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuYXR0YWNoZWRUb29sYmFycyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29ubmVjdGlvbnMiOiJjb25ucyIs''@;'; put 'put ''ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNvbm5lY3Rpb25zK3htbCI6ImNvbm5zIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmV4dGVybmFsTGluayI6ImxpbmtzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRz''@;'; put 'put ''LW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuZXh0ZXJuYWxMaW5rK3htbCI6ImxpbmtzIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0TWV0YWRhdGEiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwu''@;'; put 'put ''c2hlZXRNZXRhZGF0YSt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnBpdm90Q2FjaGVEZWZpbml0aW9uIjoicGl2b3RjYWNoZXMiLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucGl2b3RDYWNoZVJlY29yZHMiOiJwaXZvdHJlY29yZHMiLCJhcHBsaWNhdGlvbi92bmQu''@;'; put 'put ''b3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdENhY2hlRGVmaW5pdGlvbit4bWwiOiJwaXZvdGNhY2hlcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90Q2FjaGVSZWNvcmRzK3ht''@;'; put 'put ''bCI6InBpdm90cmVjb3JkcyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5xdWVyeVRhYmxlIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnF1ZXJ5VGFibGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5t''@;'; put 'put ''cy1leGNlbC51c2VyTmFtZXMiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnJldmlzaW9uSGVhZGVycyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucmV2aXNpb25Mb2ciOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3Vt''@;'; put 'put ''ZW50LnNwcmVhZHNoZWV0bWwucmV2aXNpb25IZWFkZXJzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5yZXZpc2lvbkxvZyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9m''@;'; put 'put ''ZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudXNlck5hbWVzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwudGFibGVTaW5nbGVDZWxscyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC50YWJs''@;'; put 'put ''ZVNpbmdsZUNlbGxzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2xpY2VyIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zbGljZXJDYWNoZSI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuc2xpY2VyK3htbCI6IlRPRE8iLCJhcHBsaWNh''@;'; put 'put ''dGlvbi92bmQubXMtZXhjZWwuc2xpY2VyQ2FjaGUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC53c1NvcnRNYXAiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnRhYmxlIjoidGFibGVzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmlj''@;'; put 'put ''ZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGFibGUreG1sIjoidGFibGVzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnRoZW1lK3htbCI6InRoZW1lcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC50aGVtZU92''@;'; put 'put ''ZXJyaWRlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuVGltZWxpbmUreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5UaW1lbGluZUNhY2hlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLnZiYVByb2plY3QiOiJ2YmEiLCJh''@;'; put 'put ''cHBsaWNhdGlvbi92bmQubXMtb2ZmaWNlLnZiYVByb2plY3RTaWduYXR1cmUiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLW9mZmljZS52b2xhdGlsZURlcGVuZGVuY2llcyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hl''@;'; put 'put ''ZXRtbC52b2xhdGlsZURlcGVuZGVuY2llcyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNvbnRyb2xwcm9wZXJ0aWVzK3htbCI6ImN0cmxwcm9wcyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5tb2RlbCtkYXRhIjoiZGF0YW1v''@;'; put 'put ''ZGVscyIsImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5TdXJ2ZXkreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nK3htbCI6ImRyYXdpbmdzIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3Vt''@;'; put 'put ''ZW50LmRyYXdpbmdtbC5jaGFydHNoYXBlcyt4bWwiOiJUT0RPIiwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtQ29sb3JzK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1l''@;'; put 'put ''bnQuZHJhd2luZ21sLmRpYWdyYW1EYXRhK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1MYXlvdXQreG1sIjoiVE9ETyIsImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVu''@;'; put 'put ''dC5kcmF3aW5nbWwuZGlhZ3JhbVN0eWxlK3htbCI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudm1sRHJhd2luZyI6IlRPRE8iLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtcGFja2FnZS5yZWxhdGlvbnNoaXBzK3htbCI6InJl''@;'; put 'put ''bHMiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQub2xlT2JqZWN0IjoiVE9ETyIsImltYWdlL3BuZyI6IlRPRE8iLHNoZWV0OiJqcyJ9LHN2PWZ1bmN0aW9uKCl7dmFyIFM9e3dvcmtib29rczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3Jt''@;'; put 'put ''YXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQubWFpbit4bWwiLHhsc206ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGVldC5tYWNyb0VuYWJsZWQubWFpbit4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGVldC5iaW5hcnkubWFjcm9FbmFibGVk''@;'; put 'put ''Lm1haW4iLHhsYW06ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5hZGRpbi5tYWNyb0VuYWJsZWQubWFpbit4bWwiLHhsdHg6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRlbXBsYXRlLm1haW4reG1sIn0sc3Ryczp7eGxzeDoi''@;'; put 'put ''YXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hhcmVkU3RyaW5ncyt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5zaGFyZWRTdHJpbmdzIn0sY29tbWVudHM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1s''@;'; put 'put ''Zm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNvbW1lbnRzK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmNvbW1lbnRzIn0sc2hlZXRzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRt''@;'; put 'put ''bC53b3Jrc2hlZXQreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwud29ya3NoZWV0In0sY2hhcnRzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5jaGFydHNoZWV0K3htbCIseGxzYjoiYXBwbGljYXRp''@;'; put 'put ''b24vdm5kLm1zLWV4Y2VsLmNoYXJ0c2hlZXQifSxkaWFsb2dzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5kaWFsb2dzaGVldCt4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5kaWFsb2dzaGVldCJ9''@;'; put 'put ''LG1hY3Jvczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLm1hY3Jvc2hlZXQreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwubWFjcm9zaGVldCJ9LHRhYmxlczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVh''@;'; put 'put ''ZHNoZWV0bWwudGFibGUreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwudGFibGUifSxwaXZvdHM6e3hsc3g6ImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90VGFibGUreG1sIix4bHNiOiJhcHBsaWNhdGlv''@;'; put 'put ''bi92bmQubXMtZXhjZWwucGl2b3RUYWJsZSJ9LHBpdm90Y2FjaGVzOnt4bHN4OiJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5waXZvdENhY2hlRGVmaW5pdGlvbit4bWwiLHhsc2I6ImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5w''@;'; put 'put ''aXZvdENhY2hlRGVmaW5pdGlvbiJ9LHBpdm90cmVjb3Jkczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucGl2b3RDYWNoZVJlY29yZHMreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwucGl2b3RDYWNo''@;'; put 'put ''ZVJlY29yZHMifSxjb25uczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY29ubmVjdGlvbnMreG1sIix4bHNiOiJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwuY29ubmVjdGlvbnMifSxsaW5rczp7eGxzeDoiYXBwbGlj''@;'; put 'put ''YXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuZXh0ZXJuYWxMaW5rK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLmV4dGVybmFsTGluayJ9LHN0eWxlczp7eGxzeDoiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9m''@;'; put 'put ''ZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc3R5bGVzK3htbCIseGxzYjoiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnN0eWxlcyJ9fTtyZXR1cm4gUmUoUykuZm9yRWFjaChmdW5jdGlvbihSKXtbInhsc20iLCJ4bGFtIl0uZm9yRWFjaChmdW5jdGlvbihrKXtTW1JdW2tdfHwoU1tSXVtr''@;'; put 'put ''XT1TW1JdLnhsc3gpfSl9KSxSZShTKS5mb3JFYWNoKGZ1bmN0aW9uKFIpe1JlKFNbUl0pLmZvckVhY2goZnVuY3Rpb24oayl7ZzRbU1tSXVtrXV09Un0pfSksU30oKSxsdj1mdW5jdGlvbiBBZShTKXtmb3IodmFyIFI9W10saz1SZShTKSxHPTA7RyE9PWsubGVuZ3RoOysrRyludWxsPT1SW1Nb''@;'; put 'put ''a1tHXV1dJiYoUltTW2tbR11dXT1bXSksUltTW2tbR11dXS5wdXNoKGtbR10pO3JldHVybiBSfShnNCk7R2kuQ1Q9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9wYWNrYWdlLzIwMDYvY29udGVudC10eXBlcyI7dmFyIHV2PUZyKCJUeXBlcyIsbnVsbCx7eG1sbnM6R2kuQ1Qs''@;'; put 'put ''InhtbG5zOnhzZCI6R2kueHNkLCJ4bWxuczp4c2kiOkdpLnhzaX0pLE53PVtbInhtbCIsImFwcGxpY2F0aW9uL3htbCJdLFsiYmluIiwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0LmJpbmFyeS5tYWNyb0VuYWJsZWQubWFpbiJdLFsidm1sIiwiYXBwbGljYXRpb24vdm5kLm9wZW54''@;'; put 'put ''bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnZtbERyYXdpbmciXSxbImRhdGEiLCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQubW9kZWwrZGF0YSJdLFsiYm1wIiwiaW1hZ2UvYm1wIl0sWyJwbmciLCJpbWFnZS9wbmciXSxbImdpZiIsImltYWdlL2dpZiJd''@;'; put 'put ''LFsiZW1mIiwiaW1hZ2UveC1lbWYiXSxbIndtZiIsImltYWdlL3gtd21mIl0sWyJqcGciLCJpbWFnZS9qcGVnIl0sWyJqcGVnIiwiaW1hZ2UvanBlZyJdLFsidGlmIiwiaW1hZ2UvdGlmZiJdLFsidGlmZiIsImltYWdlL3RpZmYiXSxbInBkZiIsImFwcGxpY2F0aW9uL3BkZiJdLFsicmVscyIs''@;'; put 'put ''bHYucmVsc1swXV1dLm1hcChmdW5jdGlvbihTKXtyZXR1cm4gRnIoIkRlZmF1bHQiLG51bGwse0V4dGVuc2lvbjpTWzBdLENvbnRlbnRUeXBlOlNbMV19KX0pLHFvPXtXQjoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlw''@;'; put 'put ''cy9vZmZpY2VEb2N1bWVudCIsU0hFRVQ6Imh0dHA6Ly9zaGVldGpzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvb2ZmaWNlRG9jdW1lbnQiLEhMSU5LOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQv''@;'; put 'put ''MjAwNi9yZWxhdGlvbnNoaXBzL2h5cGVybGluayIsVk1MOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL3ZtbERyYXdpbmciLFhQQVRIOiJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9j''@;'; put 'put ''dW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2V4dGVybmFsTGlua1BhdGgiLFhNSVNTOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L3JlbGF0aW9uc2hpcHMveGxFeHRlcm5hbExpbmtQYXRoL3hsUGF0aE1pc3NpbmciLFhMSU5LOiJodHRwOi8vc2NoZW1hcy5vcGVu''@;'; put 'put ''eG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2V4dGVybmFsTGluayIsQ1hNTDoiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9jdXN0b21YbWwiLENYTUxQOiJodHRwOi8vc2No''@;'; put 'put ''ZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2N1c3RvbVhtbFByb3BzIixWQkE6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYvcmVsYXRpb25zaGlwcy92YmFQcm9qZWN0In07ZnVuY3Rpb24gTnIoUyl7dmFy''@;'; put 'put ''IFI9Uy5sYXN0SW5kZXhPZigiLyIpO3JldHVybiBTLnNsaWNlKDAsUisxKSsiX3JlbHMvIitTLnNsaWNlKFIrMSkrIi5yZWxzIn1mdW5jdGlvbiBoZihTLFIpe3ZhciBrPXsiIWlkIjp7fX07aWYoIVMpcmV0dXJuIGs7Ii8iIT09Ui5jaGFyQXQoMCkmJihSPSIvIitSKTt2YXIgRz17fTtyZXR1''@;'; put 'put ''cm4oUy5tYXRjaChlbil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFEpe3ZhciBhZT1wcihRKTtpZigiPFJlbGF0aW9uc2hpcCI9PT1hZVswXSl7dmFyIGdlPXt9O2dlLlR5cGU9YWUuVHlwZSxnZS5UYXJnZXQ9YWUuVGFyZ2V0LGdlLklkPWFlLklkLGdlLlRhcmdldE1vZGU9YWUuVGFyZ2V0TW9k''@;'; put 'put ''ZTt2YXIgcGU9IkV4dGVybmFsIj09PWFlLlRhcmdldE1vZGU/YWUuVGFyZ2V0OnBuKGFlLlRhcmdldCxSKTtrW3BlXT1nZSxHW2FlLklkXT1nZX19KSxrWyIhaWQiXT1HLGt9R2kuUkVMUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9yZWxhdGlvbnNo''@;'; put 'put ''aXBzIjt2YXIgdTU9RnIoIlJlbGF0aW9uc2hpcHMiLG51bGwse3htbG5zOkdpLlJFTFN9KTtmdW5jdGlvbiBraShTKXt2YXIgUj1bSWksdTVdO3JldHVybiBSZShTWyIhaWQiXSkuZm9yRWFjaChmdW5jdGlvbihrKXtSW1IubGVuZ3RoXT1GcigiUmVsYXRpb25zaGlwIixudWxsLFNbIiFpZCJd''@;'; put 'put ''W2tdKX0pLFIubGVuZ3RoPjImJihSW1IubGVuZ3RoXT0iPC9SZWxhdGlvbnNoaXBzPiIsUlsxXT1SWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxSLmpvaW4oIiIpfXZhciBtND1bcW8uSExJTksscW8uWFBBVEgscW8uWE1JU1NdO2Z1bmN0aW9uIEVyKFMsUixrLEcsUSxhZSl7aWYoUXx8KFE9e30p''@;'; put 'put ''LFNbIiFpZCJdfHwoU1siIWlkIl09e30pLFI8MClmb3IoUj0xO1NbIiFpZCJdWyJySWQiK1JdOysrUik7aWYoUS5JZD0icklkIitSLFEuVHlwZT1HLFEuVGFyZ2V0PWssYWU/US5UYXJnZXRNb2RlPWFlOm00LmluZGV4T2YoUS5UeXBlKT4tMSYmKFEuVGFyZ2V0TW9kZT0iRXh0ZXJuYWwiKSxT''@;'; put 'put ''WyIhaWQiXVtRLklkXSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZXdyaXRlIHJJZCAiK1IpO3JldHVybiBTWyIhaWQiXVtRLklkXT1RLFNbKCIvIitRLlRhcmdldCkucmVwbGFjZSgiLy8iLCIvIildPVEsUn12YXIgYWw9ImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3By''@;'; put 'put ''ZWFkc2hlZXQiO2Z1bmN0aW9uIFFjKFMsUixrKXtyZXR1cm5bJyAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IicrUysnIj5cbicsJyAgICA8cmRmOnR5cGUgcmRmOnJlc291cmNlPSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy9ucy9vZmZpY2UvMS4yL21ldGEvJysoa3x8Im9kZiIp''@;'; put 'put ''KyIjIitSKyciLz5cbicsIiAgPC9yZGY6RGVzY3JpcHRpb24+XG4iXS5qb2luKCIiKX1mdW5jdGlvbiBYaChTLFIpe3JldHVyblsnICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iJytTKyciPlxuJywnICAgIDxuczA6aGFzUGFydCB4bWxuczpuczA9Imh0dHA6Ly9kb2NzLm9hc2lzLW9w''@;'; put 'put ''ZW4ub3JnL25zL29mZmljZS8xLjIvbWV0YS9wa2cjIiByZGY6cmVzb3VyY2U9IicrUisnIi8+XG4nLCIgIDwvcmRmOkRlc2NyaXB0aW9uPlxuIl0uam9pbigiIil9dmFyIEQ2PWZ1bmN0aW9uKCl7dmFyIFM9JzxvZmZpY2U6ZG9jdW1lbnQtbWV0YSB4bWxuczpvZmZpY2U9InVybjpvYXNpczpu''@;'; put 'put ''YW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6b2ZmaWNlOjEuMCIgeG1sbnM6bWV0YT0idXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczptZXRhOjEuMCIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczp4bGluaz0iaHR0cDovL3d3''@;'; put 'put ''dy53My5vcmcvMTk5OS94bGluayIgb2ZmaWNlOnZlcnNpb249IjEuMiI+PG9mZmljZTptZXRhPjxtZXRhOmdlbmVyYXRvcj5TaGVldEpTICcrdy52ZXJzaW9uKyI8L21ldGE6Z2VuZXJhdG9yPjwvb2ZmaWNlOm1ldGE+PC9vZmZpY2U6ZG9jdW1lbnQtbWV0YT4iO3JldHVybiBmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiBTfX0oKSxSMD1bWyJjcDpjYXRlZ29yeSIsIkNhdGVnb3J5Il0sWyJjcDpjb250ZW50U3RhdHVzIiwiQ29udGVudFN0YXR1cyJdLFsiY3A6a2V5d29yZHMiLCJLZXl3b3JkcyJdLFsiY3A6bGFzdE1vZGlmaWVkQnkiLCJMYXN0QXV0aG9yIl0sWyJjcDpsYXN0UHJpbnRlZCIsIkxh''@;'; put 'put ''c3RQcmludGVkIl0sWyJjcDpyZXZpc2lvbiIsIlJldk51bWJlciJdLFsiY3A6dmVyc2lvbiIsIlZlcnNpb24iXSxbImRjOmNyZWF0b3IiLCJBdXRob3IiXSxbImRjOmRlc2NyaXB0aW9uIiwiQ29tbWVudHMiXSxbImRjOmlkZW50aWZpZXIiLCJJZGVudGlmaWVyIl0sWyJkYzpsYW5ndWFnZSIs''@;'; put 'put ''Ikxhbmd1YWdlIl0sWyJkYzpzdWJqZWN0IiwiU3ViamVjdCJdLFsiZGM6dGl0bGUiLCJUaXRsZSJdLFsiZGN0ZXJtczpjcmVhdGVkIiwiQ3JlYXRlZERhdGUiLCJkYXRlIl0sWyJkY3Rlcm1zOm1vZGlmaWVkIiwiTW9kaWZpZWREYXRlIiwiZGF0ZSJdXTtHaS5DT1JFX1BST1BTPSJodHRwOi8v''@;'; put 'put ''c2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvcGFja2FnZS8yMDA2L21ldGFkYXRhL2NvcmUtcHJvcGVydGllcyIscW8uQ09SRV9QUk9QUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL3BhY2thZ2UvMjAwNi9yZWxhdGlvbnNoaXBzL21ldGFkYXRhL2NvcmUtcHJvcGVydGll''@;'; put 'put ''cyI7dmFyIGQ1PWZ1bmN0aW9uKCl7Zm9yKHZhciBTPW5ldyBBcnJheShSMC5sZW5ndGgpLFI9MDtSPFIwLmxlbmd0aDsrK1Ipe3ZhciBrPVIwW1JdLEc9Iig/OiIra1swXS5zbGljZSgwLGtbMF0uaW5kZXhPZigiOiIpKSsiOikiK2tbMF0uc2xpY2Uoa1swXS5pbmRleE9mKCI6IikrMSk7U1tS''@;'; put 'put ''XT1uZXcgUmVnRXhwKCI8IitHKyJbXj5dKj4oW1xcc1xcU10qPyk8LyIrRysiPiIpfXJldHVybiBTfSgpO2Z1bmN0aW9uIGR2KFMpe3ZhciBSPXt9O1M9Z2EoUyk7Zm9yKHZhciBrPTA7azxSMC5sZW5ndGg7KytrKXt2YXIgRz1SMFtrXSxRPVMubWF0Y2goZDVba10pO251bGwhPVEmJlEubGVu''@;'; put 'put ''Z3RoPjAmJihSW0dbMV1dPUpyKFFbMV0pKSwiZGF0ZSI9PT1HWzJdJiZSW0dbMV1dJiYoUltHWzFdXT1IZShSW0dbMV1dKSl9cmV0dXJuIFJ9dmFyIEJ3PUZyKCJjcDpjb3JlUHJvcGVydGllcyIsbnVsbCx7InhtbG5zOmNwIjpHaS5DT1JFX1BST1BTLCJ4bWxuczpkYyI6R2kuZGMsInhtbG5z''@;'; put 'put ''OmRjdGVybXMiOkdpLmRjdGVybXMsInhtbG5zOmRjbWl0eXBlIjpHaS5kY21pdHlwZSwieG1sbnM6eHNpIjpHaS54c2l9KTtmdW5jdGlvbiBmZihTLFIsayxHLFEpe251bGwhPVFbU118fG51bGw9PVJ8fCIiPT09Unx8KFFbU109UixSPU9yKFIpLEdbRy5sZW5ndGhdPWs/RnIoUyxSLGspOk5v''@;'; put 'put ''KFMsUikpfXZhciBlaD1bWyJBcHBsaWNhdGlvbiIsIkFwcGxpY2F0aW9uIiwic3RyaW5nIl0sWyJBcHBWZXJzaW9uIiwiQXBwVmVyc2lvbiIsInN0cmluZyJdLFsiQ29tcGFueSIsIkNvbXBhbnkiLCJzdHJpbmciXSxbIkRvY1NlY3VyaXR5IiwiRG9jU2VjdXJpdHkiLCJzdHJpbmciXSxbIk1h''@;'; put 'put ''bmFnZXIiLCJNYW5hZ2VyIiwic3RyaW5nIl0sWyJIeXBlcmxpbmtzQ2hhbmdlZCIsIkh5cGVybGlua3NDaGFuZ2VkIiwiYm9vbCJdLFsiU2hhcmVkRG9jIiwiU2hhcmVkRG9jIiwiYm9vbCJdLFsiTGlua3NVcFRvRGF0ZSIsIkxpbmtzVXBUb0RhdGUiLCJib29sIl0sWyJTY2FsZUNyb3AiLCJT''@;'; put 'put ''Y2FsZUNyb3AiLCJib29sIl0sWyJIZWFkaW5nUGFpcnMiLCJIZWFkaW5nUGFpcnMiLCJyYXciXSxbIlRpdGxlc09mUGFydHMiLCJUaXRsZXNPZlBhcnRzIiwicmF3Il1dO2Z1bmN0aW9uIHY0KFMsUixrLEcpe3ZhciBRPVtdO2lmKCJzdHJpbmciPT10eXBlb2YgUylRPVhyKFMsRyk7ZWxzZSBm''@;'; put 'put ''b3IodmFyIGFlPTA7YWU8Uy5sZW5ndGg7KythZSlRPVEuY29uY2F0KFNbYWVdLm1hcChmdW5jdGlvbihOZSl7cmV0dXJue3Y6TmV9fSkpO3ZhciBnZT0ic3RyaW5nIj09dHlwZW9mIFI/WHIoUixHKS5tYXAoZnVuY3Rpb24oTmUpe3JldHVybiBOZS52fSk6UixwZT0wLHllPTA7aWYoZ2UubGVu''@;'; put 'put ''Z3RoPjApZm9yKHZhciBQZT0wO1BlIT09US5sZW5ndGg7UGUrPTIpe3N3aXRjaCh5ZT0rUVtQZSsxXS52LFFbUGVdLnYpe2Nhc2UiV29ya3NoZWV0cyI6Y2FzZSJcdTVkZTVcdTRmNWNcdTg4NjgiOmNhc2UiXHUwNDFiXHUwNDM4XHUwNDQxXHUwNDQyXHUwNDRiIjpjYXNlIlx1MDYyM1x1MDY0''@;'; put 'put ''OFx1MDYzMVx1MDYyN1x1MDY0MiBcdTA2MjdcdTA2NDRcdTA2MzlcdTA2NDVcdTA2NDQiOmNhc2UiXHUzMGVmXHUzMGZjXHUzMGFmXHUzMGI3XHUzMGZjXHUzMGM4IjpjYXNlIlx1MDVkMlx1MDVkY1x1MDVkOVx1MDVkNVx1MDVlMFx1MDVkNVx1MDVlYSBcdTA1ZTJcdTA1ZDFcdTA1ZDVcdTA1''@;'; put 'put ''ZDNcdTA1ZDQiOmNhc2UiQXJiZWl0c2JsXHhlNHR0ZXIiOmNhc2UiXHhjN2FsXHUwMTMxXHUwMTVmbWEgU2F5ZmFsYXJcdTAxMzEiOmNhc2UiRmV1aWxsZXMgZGUgY2FsY3VsIjpjYXNlIkZvZ2xpIGRpIGxhdm9ybyI6Y2FzZSJGb2xoYXMgZGUgY1x4ZTFsY3VsbyI6Y2FzZSJQbGFuaWxoYXMi''@;'; put 'put ''OmNhc2UiUmVnbmVhcmsiOmNhc2UiSG9qYXMgZGUgY1x4ZTFsY3VsbyI6Y2FzZSJXZXJrYmxhZGVuIjprLldvcmtzaGVldHM9eWUsay5TaGVldE5hbWVzPWdlLnNsaWNlKHBlLHBlK3llKTticmVhaztjYXNlIk5hbWVkIFJhbmdlcyI6Y2FzZSJSYW5nb3MgY29uIG5vbWJyZSI6Y2FzZSJcdTU0''@;'; put 'put ''MGRcdTUyNGRcdTRlZDhcdTMwNGRcdTRlMDBcdTg5YTciOmNhc2UiQmVuYW5udGUgQmVyZWljaGUiOmNhc2UiTmF2bmdpdm5lIG9tclx4ZTVkZXIiOmsuTmFtZWRSYW5nZXM9eWUsay5EZWZpbmVkTmFtZXM9Z2Uuc2xpY2UocGUscGUreWUpO2JyZWFrO2Nhc2UiQ2hhcnRzIjpjYXNlIkRpYWdy''@;'; put 'put ''YW1tZSI6ay5DaGFydHNoZWV0cz15ZSxrLkNoYXJ0TmFtZXM9Z2Uuc2xpY2UocGUscGUreWUpfXBlKz15ZX19R2kuRVhUX1BST1BTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9leHRlbmRlZC1wcm9wZXJ0aWVzIixxby5FWFRfUFJPUFM9''@;'; put 'put ''Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvZXh0ZW5kZWQtcHJvcGVydGllcyI7dmFyIEk2PUZyKCJQcm9wZXJ0aWVzIixudWxsLHt4bWxuczpHaS5FWFRfUFJPUFMsInhtbG5zOnZ0IjpHaS52dH0pO0dpLkNVU1Rf''@;'; put 'put ''UFJPUFM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L2N1c3RvbS1wcm9wZXJ0aWVzIixxby5DVVNUX1BST1BTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2N1''@;'; put 'put ''c3RvbS1wcm9wZXJ0aWVzIjt2YXIgUjY9LzxbXj5dKz5bXjxdKi9nLHB2PUZyKCJQcm9wZXJ0aWVzIixudWxsLHt4bWxuczpHaS5DVVNUX1BST1BTLCJ4bWxuczp2dCI6R2kudnR9KTt2YXIgTDY9e1RpdGxlOiJUaXRsZSIsU3ViamVjdDoiU3ViamVjdCIsQXV0aG9yOiJBdXRob3IiLEtleXdv''@;'; put 'put ''cmRzOiJLZXl3b3JkcyIsQ29tbWVudHM6IkRlc2NyaXB0aW9uIixMYXN0QXV0aG9yOiJMYXN0QXV0aG9yIixSZXZOdW1iZXI6IlJldmlzaW9uIixBcHBsaWNhdGlvbjoiQXBwTmFtZSIsTGFzdFByaW50ZWQ6Ikxhc3RQcmludGVkIixDcmVhdGVkRGF0ZToiQ3JlYXRlZCIsTW9kaWZpZWREYXRl''@;'; put 'put ''OiJMYXN0U2F2ZWQiLENhdGVnb3J5OiJDYXRlZ29yeSIsTWFuYWdlcjoiTWFuYWdlciIsQ29tcGFueToiQ29tcGFueSIsQXBwVmVyc2lvbjoiVmVyc2lvbiIsQ29udGVudFN0YXR1czoiQ29udGVudFN0YXR1cyIsSWRlbnRpZmllcjoiSWRlbnRpZmllciIsTGFuZ3VhZ2U6Ikxhbmd1YWdlIn0s''@;'; put 'put ''TzY9VmUoTDYpO2Z1bmN0aW9uIEkzKFMsUixrKXtTW1I9TzZbUl18fFJdPWt9ZnVuY3Rpb24gUjMoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDQpLGs9Uy5yZWFkX3NoaWZ0KDQpO3JldHVybiBuZXcgRGF0ZSgxZTMqKGsvMWU3Kk1hdGgucG93KDIsMzIpK1IvMWU3LTExNjQ0NDczNjAwKSkudG9J''@;'; put 'put ''U09TdHJpbmcoKS5yZXBsYWNlKC9cLjAwMC8sIiIpfWZ1bmN0aW9uIGNkKFMsUixrKXt2YXIgRz1TLmwsUT1TLnJlYWRfc2hpZnQoMCwibHBzdHItY3AiKTtpZihrKWZvcig7Uy5sLUcmMzspKytTLmw7cmV0dXJuIFF9ZnVuY3Rpb24gaDUoUyxSLGspe3ZhciBHPVMucmVhZF9zaGlmdCgwLCJs''@;'; put 'put ''cHdzdHIiKTtyZXR1cm4gayYmKFMubCs9NC0oRy5sZW5ndGgrMSYzKSYzKSxHfWZ1bmN0aW9uIGd2KFMsUixrKXtyZXR1cm4gMzE9PT1SP2g1KFMpOmNkKFMsMCxrKX1mdW5jdGlvbiBGNihTLFIsayl7cmV0dXJuIGd2KFMsUiwhMT09PWs/MDo0KX1mdW5jdGlvbiB2dihTKXt2YXIgUj1TLmws''@;'; put 'put ''az1nZihTLFpuKTtyZXR1cm4gMD09U1tTLmxdJiYwPT1TW1MubCsxXSYmUy5sLVImMiYmKFMubCs9MiksW2ssZ2YoUyxLbCldfWZ1bmN0aW9uIGY1KFMsUil7Zm9yKHZhciBrPVMucmVhZF9zaGlmdCg0KSxHPXt9LFE9MDtRIT1rOysrUSl7dmFyIGFlPVMucmVhZF9zaGlmdCg0KSxnZT1TLnJl''@;'; put 'put ''YWRfc2hpZnQoNCk7R1thZV09Uy5yZWFkX3NoaWZ0KGdlLDEyMDA9PT1SPyJ1dGYxNmxlIjoidXRmOCIpLnJlcGxhY2UoRSwiIikucmVwbGFjZShtLCIhIiksMTIwMD09PVImJmdlJTImJihTLmwrPTIpfXJldHVybiAzJlMubCYmKFMubD1TLmw+PjM8PDIpLEd9ZnVuY3Rpb24gWDAoUyl7dmFy''@;'; put 'put ''IFI9Uy5yZWFkX3NoaWZ0KDQpLGs9Uy5zbGljZShTLmwsUy5sK1IpO3JldHVybiBTLmwrPVIsKDMmUik+MCYmKFMubCs9NC0oMyZSKSYzKSxrfWZ1bmN0aW9uIGdmKFMsUixrKXt2YXIgUSxHPVMucmVhZF9zaGlmdCgyKSxhZT1rfHx7fTtpZihTLmwrPTIsUiE9PUkwJiZHIT09UiYmLTE9PT1Q''@;'; put 'put ''dy5pbmRleE9mKFIpJiYoNDEyNiE9KDY1NTM0JlIpfHw0MTI2IT0oNjU1MzQmRykpKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgdHlwZSAiK1IrIiBzYXcgIitHKTtzd2l0Y2goUj09PUkwP0c6Uil7Y2FzZSAyOnJldHVybiBRPVMucmVhZF9zaGlmdCgyLCJpIiksYWUucmF3fHwoUy5sKz0y''@;'; put 'put ''KSxRO2Nhc2UgMzpyZXR1cm4gUy5yZWFkX3NoaWZ0KDQsImkiKTtjYXNlIDExOnJldHVybiAwIT09Uy5yZWFkX3NoaWZ0KDQpO2Nhc2UgMTk6cmV0dXJuIFMucmVhZF9zaGlmdCg0KTtjYXNlIDMwOnJldHVybiBjZChTLDAsNCkucmVwbGFjZShFLCIiKTtjYXNlIDMxOnJldHVybiBoNShTKTtj''@;'; put 'put ''YXNlIDY0OnJldHVybiBSMyhTKTtjYXNlIDY1OnJldHVybiBYMChTKTtjYXNlIDcxOnJldHVybiBmdW5jdGlvbiBidihTKXt2YXIgUj17fTtyZXR1cm4gUi5TaXplPVMucmVhZF9zaGlmdCg0KSxTLmwrPVIuU2l6ZSszLShSLlNpemUtMSklNCxSfShTKTtjYXNlIDgwOnJldHVybiBGNihTLEcs''@;'; put 'put ''IWFlLnJhdykucmVwbGFjZShFLCIiKTtjYXNlIDgxOnJldHVybiBmdW5jdGlvbiBtdihTLFIpe2lmKCFSKXRocm93IG5ldyBFcnJvcigiVnRVbmFsaWduZWRTdHJpbmcgbXVzdCBoYXZlIHBvc2l0aXZlIGxlbmd0aCIpO3JldHVybiBndihTLFIsMCl9KFMsRykucmVwbGFjZShFLCIiKTtjYXNl''@;'; put 'put ''IDQxMDg6cmV0dXJuIGZ1bmN0aW9uIFd3KFMpe2Zvcih2YXIgUj1TLnJlYWRfc2hpZnQoNCksaz1bXSxHPTA7RzxSLzI7KytHKWsucHVzaCh2dihTKSk7cmV0dXJuIGt9KFMpO2Nhc2UgNDEyNjpjYXNlIDQxMjc6cmV0dXJuIDQxMjc9PUc/ZnVuY3Rpb24gTDMoUyl7Zm9yKHZhciBSPVMucmVh''@;'; put 'put ''ZF9zaGlmdCg0KSxrPVtdLEc9MDtHIT1SOysrRyl7dmFyIFE9Uy5sO2tbR109Uy5yZWFkX3NoaWZ0KDAsImxwd3N0ciIpLnJlcGxhY2UoRSwiIiksUy5sLVEmMiYmKFMubCs9Mil9cmV0dXJuIGt9KFMpOmZ1bmN0aW9uIFp3KFMpe2Zvcih2YXIgUj1TLnJlYWRfc2hpZnQoNCksaz1bXSxHPTA7''@;'; put 'put ''RyE9UjsrK0cpa1tHXT1TLnJlYWRfc2hpZnQoMCwibHBzdHItY3AiKS5yZXBsYWNlKEUsIiIpO3JldHVybiBrfShTKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVHlwZWRQcm9wZXJ0eVZhbHVlIHVucmVjb2duaXplZCB0eXBlICIrUisiICIrRyl9fWZ1bmN0aW9uIG1mKFMsUil7dmFyIGs9''@;'; put 'put ''Ym4oNCksRz1ibig0KTtzd2l0Y2goay53cml0ZV9zaGlmdCg0LDgwPT1TPzMxOlMpLFMpe2Nhc2UgMzpHLndyaXRlX3NoaWZ0KC00LFIpO2JyZWFrO2Nhc2UgNTooRz1ibig4KSkud3JpdGVfc2hpZnQoOCxSLCJmIik7YnJlYWs7Y2FzZSAxMTpHLndyaXRlX3NoaWZ0KDQsUj8xOjApO2JyZWFr''@;'; put 'put ''O2Nhc2UgNjQ6Rz1mdW5jdGlvbiBjYyhTKXt2YXIgaz0oInN0cmluZyI9PXR5cGVvZiBTP25ldyBEYXRlKERhdGUucGFyc2UoUykpOlMpLmdldFRpbWUoKS8xZTMrMTE2NDQ0NzM2MDAsRz1rJU1hdGgucG93KDIsMzIpLFE9KGstRykvTWF0aC5wb3coMiwzMik7USo9MWU3O3ZhciBhZT0oRyo9''@;'; put 'put ''MWU3KS9NYXRoLnBvdygyLDMyKXwwO2FlPjAmJihHJT1NYXRoLnBvdygyLDMyKSxRKz1hZSk7dmFyIGdlPWJuKDgpO3JldHVybiBnZS53cml0ZV9zaGlmdCg0LEcpLGdlLndyaXRlX3NoaWZ0KDQsUSksZ2V9KFIpO2JyZWFrO2Nhc2UgMzE6Y2FzZSA4MDpmb3IoKEc9Ym4oNCsyKihSLmxlbmd0''@;'; put 'put ''aCsxKSsoUi5sZW5ndGglMj8wOjIpKSkud3JpdGVfc2hpZnQoNCxSLmxlbmd0aCsxKSxHLndyaXRlX3NoaWZ0KDAsUiwiZGJjcyIpO0cubCE9Ry5sZW5ndGg7KUcud3JpdGVfc2hpZnQoMSwwKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVHlwZWRQcm9wZXJ0eVZhbHVlIHVucmVj''@;'; put 'put ''b2duaXplZCB0eXBlICIrUysiICIrUil9cmV0dXJuIGooW2ssR10pfWZ1bmN0aW9uIHRoKFMsUil7dmFyIGs9Uy5sLEc9Uy5yZWFkX3NoaWZ0KDQpLFE9Uy5yZWFkX3NoaWZ0KDQpLGFlPVtdLGdlPTAscGU9MCx5ZT0tMSxQZT17fTtmb3IoZ2U9MDtnZSE9UTsrK2dlKXt2YXIgTmU9Uy5yZWFk''@;'; put 'put ''X3NoaWZ0KDQpLFllPVMucmVhZF9zaGlmdCg0KTthZVtnZV09W05lLFllK2tdfWFlLnNvcnQoZnVuY3Rpb24oa3QsT3Qpe3JldHVybiBrdFsxXS1PdFsxXX0pO3ZhciBldD17fTtmb3IoZ2U9MDtnZSE9UTsrK2dlKXtpZihTLmwhPT1hZVtnZV1bMV0pe3ZhciB1dD0hMDtpZihnZT4wJiZSKXN3''@;'; put 'put ''aXRjaChSW2FlW2dlLTFdWzBdXS50KXtjYXNlIDI6Uy5sKzI9PT1hZVtnZV1bMV0mJihTLmwrPTIsdXQ9ITEpO2JyZWFrO2Nhc2UgODA6Y2FzZSA0MTA4OlMubDw9YWVbZ2VdWzFdJiYoUy5sPWFlW2dlXVsxXSx1dD0hMSl9aWYoKCFSfHwwPT1nZSkmJlMubDw9YWVbZ2VdWzFdJiYodXQ9ITEs''@;'; put 'put ''Uy5sPWFlW2dlXVsxXSksdXQpdGhyb3cgbmV3IEVycm9yKCJSZWFkIEVycm9yOiBFeHBlY3RlZCBhZGRyZXNzICIrYWVbZ2VdWzFdKyIgYXQgIitTLmwrIiA6IitnZSl9aWYoUil7dmFyIEV0PVJbYWVbZ2VdWzBdXTtpZihldFtFdC5uXT1nZihTLEV0LnQse3JhdzohMH0pLCJ2ZXJzaW9uIj09''@;'; put 'put ''PUV0LnAmJihldFtFdC5uXT1TdHJpbmcoZXRbRXQubl0+PjE2KSsiLiIrKCIwMDAwIitTdHJpbmcoNjU1MzUmZXRbRXQubl0pKS5zbGljZSgtNCkpLCJDb2RlUGFnZSI9PUV0Lm4pc3dpdGNoKGV0W0V0Lm5dKXtjYXNlIDA6ZXRbRXQubl09MTI1MjtjYXNlIDg3NDpjYXNlIDkzMjpjYXNlIDkz''@;'; put 'put ''NjpjYXNlIDk0OTpjYXNlIDk1MDpjYXNlIDEyNTA6Y2FzZSAxMjUxOmNhc2UgMTI1MzpjYXNlIDEyNTQ6Y2FzZSAxMjU1OmNhc2UgMTI1NjpjYXNlIDEyNTc6Y2FzZSAxMjU4OmNhc2UgMWU0OmNhc2UgMTIwMDpjYXNlIDEyMDE6Y2FzZSAxMjUyOmNhc2UgNjVlMzpjYXNlLTUzNjpjYXNlIDY1''@;'; put 'put ''MDAxOmNhc2UtNTM1OlUocGU9ZXRbRXQubl0+Pj4wJjY1NTM1KTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgQ29kZVBhZ2U6ICIrZXRbRXQubl0pfX1lbHNlIGlmKDE9PT1hZVtnZV1bMF0pe2lmKHBlPWV0LkNvZGVQYWdlPWdmKFMsS2gpLFUocGUpLC0xIT09''@;'; put 'put ''eWUpe3ZhciBvdD1TLmw7Uy5sPWFlW3llXVsxXSxQZT1mNShTLHBlKSxTLmw9b3R9fWVsc2UgaWYoMD09PWFlW2dlXVswXSl7aWYoMD09PXBlKXt5ZT1nZSxTLmw9YWVbZ2UrMV1bMV07Y29udGludWV9UGU9ZjUoUyxwZSl9ZWxzZXt2YXIgQnQsYnQ9UGVbYWVbZ2VdWzBdXTtzd2l0Y2goU1tT''@;'; put 'put ''LmxdKXtjYXNlIDY1OlMubCs9NCxCdD1YMChTKTticmVhaztjYXNlIDMwOmNhc2UgMzE6Uy5sKz00LEJ0PUY2KFMsU1tTLmwtNF0pLnJlcGxhY2UoL1x1MDAwMCskLywiIik7YnJlYWs7Y2FzZSAzOlMubCs9NCxCdD1TLnJlYWRfc2hpZnQoNCwiaSIpO2JyZWFrO2Nhc2UgMTk6Uy5sKz00LEJ0''@;'; put 'put ''PVMucmVhZF9zaGlmdCg0KTticmVhaztjYXNlIDU6Uy5sKz00LEJ0PVMucmVhZF9zaGlmdCg4LCJmIik7YnJlYWs7Y2FzZSAxMTpTLmwrPTQsQnQ9ZGEoUyw0KTticmVhaztjYXNlIDY0OlMubCs9NCxCdD1IZShSMyhTKSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVucGFyc2Vk''@;'; put 'put ''IHZhbHVlOiAiK1NbUy5sXSl9ZXRbYnRdPUJ0fX1yZXR1cm4gUy5sPWsrRyxldH12YXIgSDY9WyJDb2RlUGFnZSIsIlRodW1ibmFpbCIsIl9QSURfTElOS0JBU0UiLCJfUElEX0hMSU5LUyIsIlN5c3RlbUlkZW50aWZpZXIiLCJGTVRJRCJdLmNvbmNhdChbIldvcmtzaGVldHMiLCJTaGVldE5h''@;'; put 'put ''bWVzIiwiTmFtZWRSYW5nZXMiLCJEZWZpbmVkTmFtZXMiLCJDaGFydHNoZWV0cyIsIkNoYXJ0TmFtZXMiXSk7ZnVuY3Rpb24gRmMoUyl7c3dpdGNoKHR5cGVvZiBTKXtjYXNlImJvb2xlYW4iOnJldHVybiAxMTtjYXNlIm51bWJlciI6cmV0dXJuKDB8Uyk9PVM/Mzo1O2Nhc2Uic3RyaW5nIjpy''@;'; put 'put ''ZXR1cm4gMzE7Y2FzZSJvYmplY3QiOmlmKFMgaW5zdGFuY2VvZiBEYXRlKXJldHVybiA2NH1yZXR1cm4tMX1mdW5jdGlvbiBONihTLFIsayl7dmFyIEc9Ym4oOCksUT1bXSxhZT1bXSxnZT04LHBlPTAseWU9Ym4oOCksUGU9Ym4oOCk7aWYoeWUud3JpdGVfc2hpZnQoNCwyKSx5ZS53cml0ZV9z''@;'; put 'put ''aGlmdCg0LDEyMDApLFBlLndyaXRlX3NoaWZ0KDQsMSksYWUucHVzaCh5ZSksUS5wdXNoKFBlKSxnZSs9OCt5ZS5sZW5ndGgsIVIpeyhQZT1ibig4KSkud3JpdGVfc2hpZnQoNCwwKSxRLnVuc2hpZnQoUGUpO3ZhciBOZT1bYm4oNCldO2ZvcihOZVswXS53cml0ZV9zaGlmdCg0LFMubGVuZ3Ro''@;'; put 'put ''KSxwZT0wO3BlPFMubGVuZ3RoOysrcGUpe3ZhciBZZT1TW3BlXVswXTtmb3IoKHllPWJuKDgrMiooWWUubGVuZ3RoKzEpKyhZZS5sZW5ndGglMj8wOjIpKSkud3JpdGVfc2hpZnQoNCxwZSsyKSx5ZS53cml0ZV9zaGlmdCg0LFllLmxlbmd0aCsxKSx5ZS53cml0ZV9zaGlmdCgwLFllLCJkYmNz''@;'; put 'put ''Iik7eWUubCE9eWUubGVuZ3RoOyl5ZS53cml0ZV9zaGlmdCgxLDApO05lLnB1c2goeWUpfXllPWooTmUpLGFlLnVuc2hpZnQoeWUpLGdlKz04K3llLmxlbmd0aH1mb3IocGU9MDtwZTxTLmxlbmd0aDsrK3BlKWlmKCghUnx8UltTW3BlXVswXV0pJiYhKEg2LmluZGV4T2YoU1twZV1bMF0pPi0x''@;'; put 'put ''KSYmbnVsbCE9U1twZV1bMV0pe3ZhciBldD1TW3BlXVsxXSx1dD0wO2lmKFIpe3ZhciBFdD1rW3V0PStSW1NbcGVdWzBdXV07aWYoInZlcnNpb24iPT1FdC5wJiYic3RyaW5nIj09dHlwZW9mIGV0KXt2YXIgb3Q9ZXQuc3BsaXQoIi4iKTtldD0oK290WzBdPDwxNikrKCtvdFsxXXx8MCl9eWU9''@;'; put 'put ''bWYoRXQudCxldCl9ZWxzZXt2YXIgYnQ9RmMoZXQpOy0xPT1idCYmKGJ0PTMxLGV0PVN0cmluZyhldCkpLHllPW1mKGJ0LGV0KX1hZS5wdXNoKHllKSwoUGU9Ym4oOCkpLndyaXRlX3NoaWZ0KDQsUj91dDoyK3BlKSxRLnB1c2goUGUpLGdlKz04K3llLmxlbmd0aH12YXIgQnQ9OCooYWUubGVu''@;'; put 'put ''Z3RoKzEpO2ZvcihwZT0wO3BlPGFlLmxlbmd0aDsrK3BlKVFbcGVdLndyaXRlX3NoaWZ0KDQsQnQpLEJ0Kz1hZVtwZV0ubGVuZ3RoO3JldHVybiBHLndyaXRlX3NoaWZ0KDQsZ2UpLEcud3JpdGVfc2hpZnQoNCxhZS5sZW5ndGgpLGooW0ddLmNvbmNhdChRKS5jb25jYXQoYWUpKX1mdW5jdGlv''@;'; put 'put ''biBWNihTLFIsayl7dmFyIEc9Uy5jb250ZW50O2lmKCFHKXJldHVybnt9O3ZuKEcsMCk7dmFyIFEsYWUsZ2UscGUseWU9MDtHLmNoaygiZmVmZiIsIkJ5dGUgT3JkZXI6ICIpLEcucmVhZF9zaGlmdCgyKTt2YXIgUGU9Ry5yZWFkX3NoaWZ0KDQpLE5lPUcucmVhZF9zaGlmdCgxNik7aWYoTmUh''@;'; put 'put ''PT12ZS51dGlscy5jb25zdHMuSEVBREVSX0NMU0lEJiZOZSE9PWspdGhyb3cgbmV3IEVycm9yKCJCYWQgUHJvcGVydHlTZXQgQ0xTSUQgIitOZSk7aWYoMSE9PShRPUcucmVhZF9zaGlmdCg0KSkmJjIhPT1RKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkICNTZXRzOiAiK1EpO2lmKGFl''@;'; put 'put ''PUcucmVhZF9zaGlmdCgxNikscGU9Ry5yZWFkX3NoaWZ0KDQpLDE9PT1RJiZwZSE9PUcubCl0aHJvdyBuZXcgRXJyb3IoIkxlbmd0aCBtaXNtYXRjaDogIitwZSsiICE9PSAiK0cubCk7Mj09PVEmJihnZT1HLnJlYWRfc2hpZnQoMTYpLHllPUcucmVhZF9zaGlmdCg0KSk7dmFyIEV0LFllPXRo''@;'; put 'put ''KEcsUiksZXQ9e1N5c3RlbUlkZW50aWZpZXI6UGV9O2Zvcih2YXIgdXQgaW4gWWUpZXRbdXRdPVllW3V0XTtpZihldC5GTVRJRD1hZSwxPT09USlyZXR1cm4gZXQ7aWYoeWUtRy5sPT0yJiYoRy5sKz0yKSxHLmwhPT15ZSl0aHJvdyBuZXcgRXJyb3IoIkxlbmd0aCBtaXNtYXRjaCAyOiAiK0cu''@;'; put 'put ''bCsiICE9PSAiK3llKTt0cnl7RXQ9dGgoRyxudWxsKX1jYXRjaHt9Zm9yKHV0IGluIEV0KWV0W3V0XT1FdFt1dF07cmV0dXJuIGV0LkZNVElEPVthZSxnZV0sZXR9ZnVuY3Rpb24gVWkoUyxSLGssRyxRLGFlKXt2YXIgZ2U9Ym4oUT82ODo0OCkscGU9W2dlXTtnZS53cml0ZV9zaGlmdCgyLDY1''@;'; put 'put ''NTM0KSxnZS53cml0ZV9zaGlmdCgyLDApLGdlLndyaXRlX3NoaWZ0KDQsODQyNDEyNTk5KSxnZS53cml0ZV9zaGlmdCgxNix2ZS51dGlscy5jb25zdHMuSEVBREVSX0NMU0lELCJoZXgiKSxnZS53cml0ZV9zaGlmdCg0LFE/MjoxKSxnZS53cml0ZV9zaGlmdCgxNixSLCJoZXgiKSxnZS53cml0''@;'; put 'put ''ZV9zaGlmdCg0LFE/Njg6NDgpO3ZhciB5ZT1ONihTLGssRyk7aWYocGUucHVzaCh5ZSksUSl7dmFyIFBlPU42KFEsbnVsbCxudWxsKTtnZS53cml0ZV9zaGlmdCgxNixhZSwiaGV4IiksZ2Uud3JpdGVfc2hpZnQoNCw2OCt5ZS5sZW5ndGgpLHBlLnB1c2goUGUpfXJldHVybiBqKHBlKX1mdW5j''@;'; put 'put ''dGlvbiBKaChTLFIpe3JldHVybiBTLnJlYWRfc2hpZnQoUiksbnVsbH1mdW5jdGlvbiBkYShTLFIpe3JldHVybiAxPT09Uy5yZWFkX3NoaWZ0KFIpfWZ1bmN0aW9uIGV1KFMsUil7cmV0dXJuIFJ8fChSPWJuKDIpKSxSLndyaXRlX3NoaWZ0KDIsKyEhUyksUn1mdW5jdGlvbiB4YyhTKXtyZXR1''@;'; put 'put ''cm4gUy5yZWFkX3NoaWZ0KDIsInUiKX1mdW5jdGlvbiByMChTLFIpe3JldHVybiBSfHwoUj1ibigyKSksUi53cml0ZV9zaGlmdCgyLFMpLFJ9ZnVuY3Rpb24gYjQoUyxSKXtyZXR1cm4gZnVuY3Rpb24geXYoUyxSLGspe2Zvcih2YXIgRz1bXSxRPVMubCtSO1MubDxROylHLnB1c2goayhTLFEt''@;'; put 'put ''Uy5sKSk7aWYoUSE9PVMubCl0aHJvdyBuZXcgRXJyb3IoIlNsdXJwIGVycm9yIik7cmV0dXJuIEd9KFMsUix4Yyl9ZnVuY3Rpb24gcWkoUyxSLGspe3JldHVybiBrfHwoaz1ibigyKSksay53cml0ZV9zaGlmdCgxLCJlIj09Uj8rUzorISFTKSxrLndyaXRlX3NoaWZ0KDEsImUiPT1SPzE6MCks''@;'; put 'put ''a31mdW5jdGlvbiBabyhTLFIsayl7dmFyIEc9Uy5yZWFkX3NoaWZ0KGsmJmsuYmlmZj49MTI/MjoxKSxRPSJzYmNzLWNvbnQiLGFlPVA7ayYmay5iaWZmPj04JiYoUD0xMjAwKSxrJiY4IT1rLmJpZmY/MTI9PWsuYmlmZiYmKFE9IndzdHIiKTpTLnJlYWRfc2hpZnQoMSkmJihRPSJkYmNzLWNv''@;'; put 'put ''bnQiKSxrLmJpZmY+PTImJmsuYmlmZjw9NSYmKFE9ImNwc3RyIik7dmFyIHBlPUc/Uy5yZWFkX3NoaWZ0KEcsUSk6IiI7cmV0dXJuIFA9YWUscGV9ZnVuY3Rpb24gdWMoUyl7dmFyIFI9UDtQPTEyMDA7dmFyIHllLGs9Uy5yZWFkX3NoaWZ0KDIpLEc9Uy5yZWFkX3NoaWZ0KDEpLFE9NCZHLGFl''@;'; put 'put ''PTgmRyxnZT0xKygxJkcpLHBlPTAsUGU9e307YWUmJihwZT1TLnJlYWRfc2hpZnQoMikpLFEmJih5ZT1TLnJlYWRfc2hpZnQoNCkpO3ZhciBZZT0wPT09az8iIjpTLnJlYWRfc2hpZnQoaywyPT1nZT8iZGJjcy1jb250Ijoic2Jjcy1jb250Iik7aWYoYWUpZm9yKFBlLl9SPVtdO3BlLS0gPjA7''@;'; put 'put ''KVBlLl9SLnB1c2goe2lkeDpTLnJlYWRfc2hpZnQoMiksaWZudDpTLnJlYWRfc2hpZnQoMil9KTtyZXR1cm4gUSYmKFMubCs9eWUpLFBlLnQ9WWUsYWV8fChQZS5yPSI8dD4iK1BlLnQrIjwvdD4iKSxQPVIsUGV9ZnVuY3Rpb24gSGMoUyxSKXt2YXIgaz1TLlImJlMuUi5sZW5ndGh8fFMucjtT''@;'; put 'put ''LnImJihTLlI9YjUoUy5yKSk7dmFyIEc9IiIsUT0wO2s/Uy5SLmZvckVhY2goZnVuY3Rpb24oRXQpe1ErKyxHKz1FdC52fHwiIn0pOihHPVMudHx8IiIsUT0xKTt2YXIgYWU9Ym4oMysoUT4xPzI6MCkpO2FlLndyaXRlX3NoaWZ0KDIsRy5sZW5ndGgpLGFlLndyaXRlX3NoaWZ0KDEsMXwoUT4x''@;'; put 'put ''Pzg6MCkpLFE+MSYmYWUud3JpdGVfc2hpZnQoMixRKTt2YXIgZ2U9Ym4oMipHLmxlbmd0aCk7Z2Uud3JpdGVfc2hpZnQoMipHLmxlbmd0aCxHLCJ1dGYxNmxlIik7dmFyIHBlPVthZSxnZV07aWYoayl7dmFyIHllPWJuKDQqUy5SLmxlbmd0aCksUGU9MDtwZS5wdXNoKHllKTtmb3IodmFyIE5l''@;'; put 'put ''PTA7TmU8Uy5SLmxlbmd0aDsrK05lKXt2YXIgWWU9Uy5SW05lXTt5ZS53cml0ZV9zaGlmdCgyLFBlKSxQZSs9KFllLnZ8fCIiKS5sZW5ndGg7dmFyIGV0PVllLnM/czAoUi5jZWxsWGZzLFIuY2VsbFN0eWxlWGZzLHt0OiJuIix2OjAsczpZZS5zfSxSKTowLHV0PVIuY2VsbFhmc1tldF0uZm9u''@;'; put 'put ''dElkO3llLndyaXRlX3NoaWZ0KDIsdXQ8ND91dDp1dCsxKX19cmV0dXJuIGoocGUpfWZ1bmN0aW9uIG5jKFMsUixrKXtpZihrKXtpZihrLmJpZmY+PTImJmsuYmlmZjw9NSlyZXR1cm4gUy5yZWFkX3NoaWZ0KFIsImNwc3RyIik7aWYoay5iaWZmPj0xMilyZXR1cm4gUy5yZWFkX3NoaWZ0KFIs''@;'; put 'put ''ImRiY3MtY29udCIpfXZhciBRPVMucmVhZF9zaGlmdCgxKTtyZXR1cm4gUy5yZWFkX3NoaWZ0KFIsMD09PVE/InNiY3MtY29udCI6ImRiY3MtY29udCIpfWZ1bmN0aW9uIHR1KFMsUixrKXt2YXIgRz1TLnJlYWRfc2hpZnQoayYmMj09ay5iaWZmPzE6Mik7cmV0dXJuIDA9PT1HPyhTLmwrKywi''@;'; put 'put ''Iik6bmMoUyxHLGspfWZ1bmN0aW9uIEowKFMsUixrKXtpZihrLmJpZmY+NSlyZXR1cm4gdHUoUywwLGspO3ZhciBHPVMucmVhZF9zaGlmdCgxKTtyZXR1cm4gMD09PUc/KFMubCsrLCIiKTpTLnJlYWRfc2hpZnQoRyxrLmJpZmY8PTR8fCFTLmxlbnM/ImNwc3RyIjoic2Jjcy1jb250Iil9ZnVu''@;'; put 'put ''Y3Rpb24gc2woUyxSLGspe3JldHVybiBrfHwoaz1ibigzKzIqUy5sZW5ndGgpKSxrLndyaXRlX3NoaWZ0KDIsUy5sZW5ndGgpLGsud3JpdGVfc2hpZnQoMSwxKSxrLndyaXRlX3NoaWZ0KDMxLFMsInV0ZjE2bGUiKSxrfWZ1bmN0aW9uIHk0KFMpe3ZhciBSPVMucmVhZF9zaGlmdCg0KTtyZXR1''@;'; put 'put ''cm4gUj4wP1MucmVhZF9zaGlmdChSLCJ1dGYxNmxlIikucmVwbGFjZShFLCIiKToiIn1mdW5jdGlvbiBvMChTLFIpe1J8fChSPWJuKDYrMipTLmxlbmd0aCkpLFIud3JpdGVfc2hpZnQoNCwxK1MubGVuZ3RoKTtmb3IodmFyIGs9MDtrPFMubGVuZ3RoOysraylSLndyaXRlX3NoaWZ0KDIsUy5j''@;'; put 'put ''aGFyQ29kZUF0KGspKTtyZXR1cm4gUi53cml0ZV9zaGlmdCgyLDApLFJ9ZnVuY3Rpb24gXzQoUyl7dmFyIFI9Ym4oNTEyKSxrPTAsRz1TLlRhcmdldDsiZmlsZTovLyI9PUcuc2xpY2UoMCw3KSYmKEc9Ry5zbGljZSg3KSk7dmFyIFE9Ry5pbmRleE9mKCIjIiksYWU9UT4tMT8zMToyMztzd2l0''@;'; put 'put ''Y2goRy5jaGFyQXQoMCkpe2Nhc2UiIyI6YWU9Mjg7YnJlYWs7Y2FzZSIuIjphZSY9LTN9Ui53cml0ZV9zaGlmdCg0LDIpLFIud3JpdGVfc2hpZnQoNCxhZSk7dmFyIGdlPVs4LDY4MTU4MjcsNjYxOTIzNyw0ODQ5NzgwLDgzXTtmb3Ioaz0wO2s8Z2UubGVuZ3RoOysraylSLndyaXRlX3NoaWZ0''@;'; put 'put ''KDQsZ2Vba10pO2lmKDI4PT1hZSlvMChHPUcuc2xpY2UoMSksUik7ZWxzZSBpZigyJmFlKXtmb3IoZ2U9ImUwIGM5IGVhIDc5IGY5IGJhIGNlIDExIDhjIDgyIDAwIGFhIDAwIDRiIGE5IDBiIi5zcGxpdCgiICIpLGs9MDtrPGdlLmxlbmd0aDsrK2spUi53cml0ZV9zaGlmdCgxLHBhcnNlSW50''@;'; put 'put ''KGdlW2tdLDE2KSk7dmFyIHBlPVE+LTE/Ry5zbGljZSgwLFEpOkc7Zm9yKFIud3JpdGVfc2hpZnQoNCwyKihwZS5sZW5ndGgrMSkpLGs9MDtrPHBlLmxlbmd0aDsrK2spUi53cml0ZV9zaGlmdCgyLHBlLmNoYXJDb2RlQXQoaykpO1Iud3JpdGVfc2hpZnQoMiwwKSw4JmFlJiZvMChRPi0xP0cu''@;'; put 'put ''c2xpY2UoUSsxKToiIixSKX1lbHNle2ZvcihnZT0iMDMgMDMgMDAgMDAgMDAgMDAgMDAgMDAgYzAgMDAgMDAgMDAgMDAgMDAgMDAgNDYiLnNwbGl0KCIgIiksaz0wO2s8Z2UubGVuZ3RoOysraylSLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQoZ2Vba10sMTYpKTtmb3IodmFyIHllPTA7Ii4uLyI9''@;'; put 'put ''PUcuc2xpY2UoMyp5ZSwzKnllKzMpfHwiLi5cXCI9PUcuc2xpY2UoMyp5ZSwzKnllKzMpOykrK3llO2ZvcihSLndyaXRlX3NoaWZ0KDIseWUpLFIud3JpdGVfc2hpZnQoNCxHLmxlbmd0aC0zKnllKzEpLGs9MDtrPEcubGVuZ3RoLTMqeWU7KytrKVIud3JpdGVfc2hpZnQoMSwyNTUmRy5jaGFy''@;'; put 'put ''Q29kZUF0KGsrMyp5ZSkpO2ZvcihSLndyaXRlX3NoaWZ0KDEsMCksUi53cml0ZV9zaGlmdCgyLDY1NTM1KSxSLndyaXRlX3NoaWZ0KDIsNTcwMDUpLGs9MDtrPDY7KytrKVIud3JpdGVfc2hpZnQoNCwwKX1yZXR1cm4gUi5zbGljZSgwLFIubCl9ZnVuY3Rpb24gYmYoUyl7cmV0dXJuW1MucmVh''@;'; put 'put ''ZF9zaGlmdCgxKSxTLnJlYWRfc2hpZnQoMSksUy5yZWFkX3NoaWZ0KDEpLFMucmVhZF9zaGlmdCgxKV19ZnVuY3Rpb24gdWQoUyxSKXt2YXIgaz1iZihTKTtyZXR1cm4ga1szXT0wLGt9ZnVuY3Rpb24gdzAoUyl7cmV0dXJue3I6Uy5yZWFkX3NoaWZ0KDIpLGM6Uy5yZWFkX3NoaWZ0KDIpLGl4''@;'; put 'put ''ZmU6Uy5yZWFkX3NoaWZ0KDIpfX1mdW5jdGlvbiBRaChTLFIsayxHKXtyZXR1cm4gR3x8KEc9Ym4oNikpLEcud3JpdGVfc2hpZnQoMixTKSxHLndyaXRlX3NoaWZ0KDIsUiksRy53cml0ZV9zaGlmdCgyLGt8fDApLEd9ZnVuY3Rpb24geWYoUyxSLGspe3ZhciBHPWsuYmlmZj44PzQ6MjtyZXR1''@;'; put 'put ''cm5bUy5yZWFkX3NoaWZ0KEcpLFMucmVhZF9zaGlmdChHLCJpIiksUy5yZWFkX3NoaWZ0KEcsImkiKV19ZnVuY3Rpb24gd2EoUyl7cmV0dXJuW1MucmVhZF9zaGlmdCgyKSxJMShTKV19ZnVuY3Rpb24gdDIoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDIpO3JldHVy''@;'; put 'put ''bntzOntjOlMucmVhZF9zaGlmdCgyKSxyOlJ9LGU6e2M6Uy5yZWFkX3NoaWZ0KDIpLHI6a319fWZ1bmN0aW9uIG11KFMsUil7cmV0dXJuIFJ8fChSPWJuKDgpKSxSLndyaXRlX3NoaWZ0KDIsUy5zLnIpLFIud3JpdGVfc2hpZnQoMixTLmUuciksUi53cml0ZV9zaGlmdCgyLFMucy5jKSxSLndy''@;'; put 'put ''aXRlX3NoaWZ0KDIsUy5lLmMpLFJ9ZnVuY3Rpb24gdzQoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybntzOntjOlMucmVhZF9zaGlmdCgxKSxyOlJ9LGU6e2M6Uy5yZWFkX3NoaWZ0KDEpLHI6a319fXZhciBoYz13NDtmdW5jdGlvbiBnNShTKXtTLmwr''@;'; put 'put ''PTQ7dmFyIFI9Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDIpLEc9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiBTLmwrPTEyLFtrLFIsR119ZnVuY3Rpb24gbnUoUyl7Uy5sKz0yLFMubCs9Uy5yZWFkX3NoaWZ0KDIpfXZhciBfZj17MDpudSw0Om51LDU6bnUsNjpudSw3OmZ1bmN0aW9u''@;'; put 'put ''IEZ1KFMpe3JldHVybiBTLmwrPTQsUy5jZj1TLnJlYWRfc2hpZnQoMikse319LDg6bnUsOTpudSwxMDpudSwxMTpudSwxMjpudSwxMzpmdW5jdGlvbiBQdShTKXt2YXIgUj17fTtyZXR1cm4gUy5sKz00LFMubCs9MTYsUi5mU2hhcmVkTm90ZT1TLnJlYWRfc2hpZnQoMiksUy5sKz00LFJ9LDE0''@;'; put 'put ''Om51LDE1Om51LDE2Om51LDE3Om51LDE4Om51LDE5Om51LDIwOm51LDIxOmc1fTtmdW5jdGlvbiBOYyhTLFIpe3ZhciBrPXtCSUZGVmVyOjAsZHQ6MH07c3dpdGNoKGsuQklGRlZlcj1TLnJlYWRfc2hpZnQoMiksKFItPTIpPj0yJiYoay5kdD1TLnJlYWRfc2hpZnQoMiksUy5sLT0yKSxrLkJJ''@;'; put 'put ''RkZWZXIpe2Nhc2UgMTUzNjpjYXNlIDEyODA6Y2FzZSAxMDI0OmNhc2UgNzY4OmNhc2UgNTEyOmNhc2UgMjpjYXNlIDc6YnJlYWs7ZGVmYXVsdDppZihSPjYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIEJJRkYgVmVyICIray5CSUZGVmVyKX1yZXR1cm4gUy5yZWFkX3NoaWZ0KFIpLGt9''@;'; put 'put ''ZnVuY3Rpb24gQzQoUyxSLGspe3ZhciBHPTE1MzYsUT0xNjtzd2l0Y2goay5ib29rVHlwZSl7Y2FzZSJiaWZmOCI6Y2FzZSJ4bGEiOmJyZWFrO2Nhc2UiYmlmZjUiOkc9MTI4MCxRPTg7YnJlYWs7Y2FzZSJiaWZmNCI6Rz00LFE9NjticmVhaztjYXNlImJpZmYzIjpHPTMsUT02O2JyZWFrO2Nh''@;'; put 'put ''c2UiYmlmZjIiOkc9MixRPTQ7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVuc3VwcG9ydGVkIEJJRkYgdmVyc2lvbiIpfXZhciBhZT1ibihRKTtyZXR1cm4gYWUud3JpdGVfc2hpZnQoMixHKSxhZS53cml0ZV9zaGlmdCgyLFIpLFE+NCYmYWUud3JpdGVfc2hpZnQoMiwyOTI4Miks''@;'; put 'put ''UT42JiZhZS53cml0ZV9zaGlmdCgyLDE5OTcpLFE+OCYmKGFlLndyaXRlX3NoaWZ0KDIsNDkxNjEpLGFlLndyaXRlX3NoaWZ0KDIsMSksYWUud3JpdGVfc2hpZnQoMiwxNzk4KSxhZS53cml0ZV9zaGlmdCgyLDApKSxhZX1mdW5jdGlvbiBuMihTLFIpe3ZhciBrPSFSfHxSLmJpZmY+PTg/Mjox''@;'; put 'put ''LEc9Ym4oOCtrKlMubmFtZS5sZW5ndGgpO0cud3JpdGVfc2hpZnQoNCxTLnBvcyksRy53cml0ZV9zaGlmdCgxLFMuaHN8fDApLEcud3JpdGVfc2hpZnQoMSxTLmR0KSxHLndyaXRlX3NoaWZ0KDEsUy5uYW1lLmxlbmd0aCksUi5iaWZmPj04JiZHLndyaXRlX3NoaWZ0KDEsMSksRy53cml0ZV9z''@;'; put 'put ''aGlmdChrKlMubmFtZS5sZW5ndGgsUy5uYW1lLFIuYmlmZjw4PyJzYmNzIjoidXRmMTZsZSIpO3ZhciBRPUcuc2xpY2UoMCxHLmwpO3JldHVybiBRLmw9Ry5sLFF9ZnVuY3Rpb24gcmkoUyl7cmV0dXJuIFMucmVhZF9zaGlmdCg0KSxndShTKX1mdW5jdGlvbiBNYShTKXtyZXR1cm4gUy5yZWFk''@;'; put 'put ''X3NoaWZ0KDQpLHQwKFMpfWZ1bmN0aW9uIEh1KFMsUixrKXtyZXR1cm4gUy5yZWFkX3NoaWZ0KDQpLGpCKFMsMCxrKX1mdW5jdGlvbiByMihTLFIsayl7dmFyIEc9MDtrJiYyPT1rLmJpZmZ8fChHPVMucmVhZF9zaGlmdCgyKSk7dmFyIFE9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiBrJiYyPT1r''@;'; put 'put ''LmJpZmYmJihHPTEtKFE+PjE1KSxRJj0zMjc2NyksW3tVbnN5bmNlZDoxJkcsRHlaZXJvOigyJkcpPj4xLEV4QXNjOig0JkcpPj4yLEV4RHNjOig4JkcpPj4zfSxRXX1mdW5jdGlvbiBLTihTLFIsayxHKXt2YXIgUT1rJiY1PT1rLmJpZmY7R3x8KEc9Ym4oUT8zK1IubGVuZ3RoOjUrMipSLmxl''@;'; put 'put ''bmd0aCkpLEcud3JpdGVfc2hpZnQoMixTKSxHLndyaXRlX3NoaWZ0KFE/MToyLFIubGVuZ3RoKSxRfHxHLndyaXRlX3NoaWZ0KDEsMSksRy53cml0ZV9zaGlmdCgoUT8xOjIpKlIubGVuZ3RoLFIsUT8ic2JjcyI6InV0ZjE2bGUiKTt2YXIgYWU9Ry5sZW5ndGg+Ry5sP0cuc2xpY2UoMCxHLmwp''@;'; put 'put ''Okc7cmV0dXJuIG51bGw9PWFlLmwmJihhZS5sPWFlLmxlbmd0aCksYWV9dmFyIG8yPUowO2Z1bmN0aW9uIHF3KFMsUixrKXt2YXIgRz1TLmwrUixRPTghPWsuYmlmZiYmay5iaWZmPzI6NCxhZT1TLnJlYWRfc2hpZnQoUSksZ2U9Uy5yZWFkX3NoaWZ0KFEpLHBlPVMucmVhZF9zaGlmdCgyKSx5''@;'; put 'put ''ZT1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIFMubD1HLHtzOntyOmFlLGM6cGV9LGU6e3I6Z2UsYzp5ZX19fWZ1bmN0aW9uIG01KFMsUixrLEcpe3ZhciBhZT0ha3x8IWsuYmlmZnx8OD09ay5iaWZmO0d8fChHPWJuKGsmJjU9PWsuYmlmZj8xNjoyMCkpLEcud3JpdGVfc2hpZnQoMixhZSYmay5j''@;'; put 'put ''ZWxsU3R5bGVzJiZTLmZvbnRJZCYmKFMuZm9udElkPDQ/Uy5mb250SWQ6Uy5mb250SWQrMSl8fDApO3ZhciBnZT0xO1MucHJvdGVjdGlvbiYmKFMucHJvdGVjdGlvbi5lZGl0YWJsZSYmKGdlJj0tMiksUy5wcm90ZWN0aW9uLmhpZGRlbiYmKGdlfD0yKSksUy5zdHlsZT8oRy53cml0ZV9zaGlm''@;'; put 'put ''dCgyLFMubnVtRm10SWR8fDApLEcud3JpdGVfc2hpZnQoMiw2NTUyNHxnZSkpOihHLndyaXRlX3NoaWZ0KDIsUy5udW1GbXRJZHx8MCksRy53cml0ZV9zaGlmdCgyLFI8PDR8Z2UpKTt2YXIgcGU9Uy5hbGlnbm1lbnR8fHt9O2lmKGFlKXt2YXIgeWU9MCxQZT0wO1Q1LmluZGV4T2YocGUuaG9y''@;'; put 'put ''aXpvbnRhbCk+LTEmJih5ZXw9VDUuaW5kZXhPZihwZS5ob3Jpem9udGFsKSkscGUud3JhcFRleHQmJih5ZXw9OCksUTYuaW5kZXhPZihwZS52ZXJ0aWNhbCk+LTE/eWV8PVE2LmluZGV4T2YocGUudmVydGljYWwpPDw0Om51bGw9PXBlLnZlcnRpY2FsJiYoeWV8PTMyKSxHLndyaXRlX3NoaWZ0''@;'; put 'put ''KDEseWUpLEcud3JpdGVfc2hpZnQoMSwwKSxwZS5zaHJpbmtUb0ZpdCYmKFBlfD0xNiksRy53cml0ZV9zaGlmdCgyLFBlKTt2YXIgTmU9bnVsbDtudWxsIT1TLmJvcmRlcklkJiYoTmU9ay5Cb3JkZXJzJiZrLkJvcmRlcnNbUy5ib3JkZXJJZHx8MF18fHt9KTt2YXIgWWU9MCxldD0wLHV0PTA7''@;'; put 'put ''TmUmJihudWxsIT1OZS5sZWZ0JiZOZS5sZWZ0LnN0eWxlJiYoWWV8PSh1dD1wZC5pbmRleE9mKE5lLmxlZnQuc3R5bGUpKT4tMT91dDowKSxudWxsIT1OZS5yaWdodCYmTmUucmlnaHQuc3R5bGUmJihZZXw9KCh1dD1wZC5pbmRleE9mKE5lLnJpZ2h0LnN0eWxlKSk+LTE/dXQ6MCk8PDQpLG51''@;'; put 'put ''bGwhPU5lLnRvcCYmTmUudG9wLnN0eWxlJiYoZXR8PSh1dD1wZC5pbmRleE9mKE5lLnRvcC5zdHlsZSkpPi0xP3V0OjApLG51bGwhPU5lLmJvdHRvbSYmTmUuYm90dG9tLnN0eWxlJiYoZXR8PSgodXQ9cGQuaW5kZXhPZihOZS5ib3R0b20uc3R5bGUpKT4tMT91dDowKTw8NCkpLEcud3JpdGVf''@;'; put 'put ''c2hpZnQoMSxZZSksRy53cml0ZV9zaGlmdCgxLGV0KSxHLndyaXRlX3NoaWZ0KDIsMCksRy53cml0ZV9zaGlmdCgyLDApLEcud3JpdGVfc2hpZnQoMSwwKTt2YXIgRXQ9MCxvdD1rLkZpbGxzJiZrLkZpbGxzW1MuZmlsbElkfHwwXXx8e307KG90LmZnQ29sb3J8fG90LmJnQ29sb3IpJiYoRXR8''@;'; put 'put ''PTQpLEcud3JpdGVfc2hpZnQoMSxFdCk7dmFyIGJ0PTA7YnR8PVI0KG90LmZnQ29sb3IsNjUpLGJ0fD1SNChvdC5iZ0NvbG9yLDY1KTw8NyxHLndyaXRlX3NoaWZ0KDIsYnQpfWVsc2UgRy53cml0ZV9zaGlmdCg0LDApLEcud3JpdGVfc2hpZnQoNCwwKSxHLndyaXRlX3NoaWZ0KDIsMCk7cmV0''@;'; put 'put ''dXJuIEd9ZnVuY3Rpb24gUzQoUyxSLGspe3ZhciBHPXcwKFMpOygyPT1rLmJpZmZ8fDk9PVIpJiYrK1MubDt2YXIgUT1mdW5jdGlvbiBCbChTKXt2YXIgUj1TLnJlYWRfc2hpZnQoMSk7cmV0dXJuIDE9PT1TLnJlYWRfc2hpZnQoMSk/UjoxPT09Un0oUyk7cmV0dXJuIEcudmFsPVEsRy50PSEw''@;'; put 'put ''PT09UXx8ITE9PT1RPyJiIjoiZSIsR312YXIgWkE9ZnVuY3Rpb24gcDUoUyxSLGspe3JldHVybiAwPT09Uj8iIjpKMChTLDAsayl9O2Z1bmN0aW9uIFF3KFMsUixrKXt2YXIgUSxHPVMucmVhZF9zaGlmdCgyKSxhZT17ZkJ1aWx0SW46MSZHLGZXYW50QWR2aXNlOkc+Pj4xJjEsZldhbnRQaWN0''@;'; put 'put ''Okc+Pj4yJjEsZk9sZTpHPj4+MyYxLGZPbGVMaW5rOkc+Pj40JjEsY2Y6Rz4+PjUmMTAyMyxmSWNvbjpHPj4+MTUmMX07cmV0dXJuIDE0ODQ5PT09ay5zYmNjaCYmKFE9ZnVuY3Rpb24gQjYoUyxSLGspe1MubCs9NDt2YXIgRz1TLmwrKFItPTQpLFE9Wm8oUywwLGspLGFlPVMucmVhZF9zaGlm''@;'; put 'put ''dCgyKTtpZihhZSE9PShHLT1TLmwpKXRocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIEFkZGluVWRmOiBwYWRkaW5nID0gIitHKyIgIT0gIithZSk7cmV0dXJuIFMubCs9YWUsUX0oUyxSLTIsaykpLGFlLmJvZHk9UXx8Uy5yZWFkX3NoaWZ0KFItMiksInN0cmluZyI9PXR5cGVvZiBRJiYoYWUu''@;'; put 'put ''TmFtZT1RKSxhZX12YXIgUU49WyJfeGxubS5Db25zb2xpZGF0ZV9BcmVhIiwiX3hsbm0uQXV0b19PcGVuIiwiX3hsbm0uQXV0b19DbG9zZSIsIl94bG5tLkV4dHJhY3QiLCJfeGxubS5EYXRhYmFzZSIsIl94bG5tLkNyaXRlcmlhIiwiX3hsbm0uUHJpbnRfQXJlYSIsIl94bG5tLlByaW50X1Rp''@;'; put 'put ''dGxlcyIsIl94bG5tLlJlY29yZGVyIiwiX3hsbm0uRGF0YV9Gb3JtIiwiX3hsbm0uQXV0b19BY3RpdmF0ZSIsIl94bG5tLkF1dG9fRGVhY3RpdmF0ZSIsIl94bG5tLlNoZWV0X1RpdGxlIiwiX3hsbm0uX0ZpbHRlckRhdGFiYXNlIl07ZnVuY3Rpb24gZUMoUyxSLGspe3ZhciBHPVMubCtSLFE9''@;'; put 'put ''Uy5yZWFkX3NoaWZ0KDIpLGFlPVMucmVhZF9zaGlmdCgxKSxnZT1TLnJlYWRfc2hpZnQoMSkscGU9Uy5yZWFkX3NoaWZ0KGsmJjI9PWsuYmlmZj8xOjIpLHllPTA7KCFrfHxrLmJpZmY+PTUpJiYoNSE9ay5iaWZmJiYoUy5sKz0yKSx5ZT1TLnJlYWRfc2hpZnQoMiksNT09ay5iaWZmJiYoUy5s''@;'; put 'put ''Kz0yKSxTLmwrPTQpO3ZhciBQZT1uYyhTLGdlLGspOzMyJlEmJihQZT1RTltQZS5jaGFyQ29kZUF0KDApXSk7dmFyIE5lPUctUy5sO2smJjI9PWsuYmlmZiYmLS1OZTt2YXIgWWU9RyE9Uy5sJiYwIT09cGUmJk5lPjA/ZnVuY3Rpb24gdm5lKFMsUixrLEcpe3ZhciBnZSxRPVMubCtSLGFlPW9o''@;'; put 'put ''KFMsRyxrKTtyZXR1cm4gUSE9PVMubCYmKGdlPUg0KFMsUS1TLmwsYWUsaykpLFthZSxnZV19KFMsTmUsayxwZSk6W107cmV0dXJue2NoS2V5OmFlLE5hbWU6UGUsaXRhYjp5ZSxyZ2NlOlllfX1mdW5jdGlvbiB3dihTLFIsayl7aWYoay5iaWZmPDgpcmV0dXJuIGZ1bmN0aW9uIHRDKFMsUixr''@;'; put 'put ''KXszPT1TW1MubCsxXSYmU1tTLmxdKys7dmFyIEc9Wm8oUywwLGspO3JldHVybiAzPT1HLmNoYXJDb2RlQXQoMCk/Ry5zbGljZSgxKTpHfShTLDAsayk7Zm9yKHZhciBHPVtdLFE9Uy5sK1IsYWU9Uy5yZWFkX3NoaWZ0KGsuYmlmZj44PzQ6Mik7MCE9YWUtLTspRy5wdXNoKHlmKFMsMCxrKSk7''@;'; put 'put ''aWYoUy5sIT1RKXRocm93IG5ldyBFcnJvcigiQmFkIEV4dGVyblNoZWV0OiAiK1MubCsiICE9ICIrUSk7cmV0dXJuIEd9ZnVuY3Rpb24gU3YoUyxSLGspe3ZhciBHPWhjKFMsNik7c3dpdGNoKGsuYmlmZil7Y2FzZSAyOlMubCsrLFItPTc7YnJlYWs7Y2FzZSAzOmNhc2UgNDpTLmwrPTIsUi09''@;'; put 'put ''ODticmVhaztkZWZhdWx0OlMubCs9NixSLT0xMn1yZXR1cm5bRyx0RChTLFIsayldfXZhciBZQT1bXTtmdW5jdGlvbiByVihTKXt2YXIgUj1ibigyNCksaz1OYShTWzBdKTtSLndyaXRlX3NoaWZ0KDIsay5yKSxSLndyaXRlX3NoaWZ0KDIsay5yKSxSLndyaXRlX3NoaWZ0KDIsay5jKSxSLndy''@;'; put 'put ''aXRlX3NoaWZ0KDIsay5jKTtmb3IodmFyIEc9ImQwIGM5IGVhIDc5IGY5IGJhIGNlIDExIDhjIDgyIDAwIGFhIDAwIDRiIGE5IDBiIi5zcGxpdCgiICIpLFE9MDtRPDE2OysrUSlSLndyaXRlX3NoaWZ0KDEscGFyc2VJbnQoR1tRXSwxNikpO3JldHVybiBqKFtSLF80KFNbMV0pXSl9ZnVuY3Rp''@;'; put 'put ''b24gb1YoUyl7dmFyIFI9U1sxXS5Ub29sdGlwLGs9Ym4oMTArMiooUi5sZW5ndGgrMSkpO2sud3JpdGVfc2hpZnQoMiwyMDQ4KTt2YXIgRz1OYShTWzBdKTtrLndyaXRlX3NoaWZ0KDIsRy5yKSxrLndyaXRlX3NoaWZ0KDIsRy5yKSxrLndyaXRlX3NoaWZ0KDIsRy5jKSxrLndyaXRlX3NoaWZ0''@;'; put 'put ''KDIsRy5jKTtmb3IodmFyIFE9MDtRPFIubGVuZ3RoOysrUSlrLndyaXRlX3NoaWZ0KDIsUi5jaGFyQ29kZUF0KFEpKTtyZXR1cm4gay53cml0ZV9zaGlmdCgyLDApLGt9ZnVuY3Rpb24gbkMoUyxSLGspe2lmKCFrLmNlbGxTdHlsZXMpcmV0dXJuIFJuKFMsUik7dmFyIEc9ayYmay5iaWZmPj0x''@;'; put 'put ''Mj80OjIsUT1TLnJlYWRfc2hpZnQoRyksYWU9Uy5yZWFkX3NoaWZ0KEcpLGdlPVMucmVhZF9zaGlmdChHKSxwZT1TLnJlYWRfc2hpZnQoRykseWU9Uy5yZWFkX3NoaWZ0KDIpOzI9PUcmJihTLmwrPTIpO3ZhciBQZT17czpRLGU6YWUsdzpnZSxpeGZlOnBlLGZsYWdzOnllfTtyZXR1cm4oay5i''@;'; put 'put ''aWZmPj01fHwhay5iaWZmKSYmKFBlLmxldmVsPXllPj44JjcpLFBlfVlBWzhdPWZ1bmN0aW9uKFMsUil7dmFyIGs9Uy5sK1I7Uy5sKz0xMDt2YXIgRz1TLnJlYWRfc2hpZnQoMik7Uy5sKz00LFMubCs9MixTLmwrPTIsUy5sKz0yLFMubCs9NDt2YXIgUT1TLnJlYWRfc2hpZnQoMSk7cmV0dXJu''@;'; put 'put ''IFMubCs9USxTLmw9ayx7Zm10Okd9fTt2YXIgenRlPXcwLCRBPWI0LE8wPXR1O3ZhciBQMz1mdW5jdGlvbigpe3ZhciBTPXsxOjQzNywyOjg1MCwzOjEyNTIsNDoxZTQsMTAwOjg1MiwxMDE6ODY2LDEwMjo4NjUsMTAzOjg2MSwxMDQ6ODk1LDEwNTo2MjAsMTA2OjczNywxMDc6ODU3LDEyMDo5''@;'; put 'put ''NTAsMTIxOjk0OSwxMjI6OTM2LDEyMzo5MzIsMTI0Ojg3NCwxMjU6MTI1NSwxMjY6MTI1NiwxNTA6MTAwMDcsMTUxOjEwMDI5LDE1MjoxMDAwNiwyMDA6MTI1MCwyMDE6MTI1MSwyMDI6MTI1NCwyMDM6MTI1MywwOjIwMTI3LDg6ODY1LDk6NDM3LDEwOjg1MCwxMTo0MzcsMTM6NDM3LDE0Ojg1''@;'; put 'put ''MCwxNTo0MzcsMTY6ODUwLDE3OjQzNywxODo4NTAsMTk6OTMyLDIwOjg1MCwyMTo0MzcsMjI6ODUwLDIzOjg2NSwyNDo0MzcsMjU6NDM3LDI2Ojg1MCwyNzo0MzcsMjg6ODYzLDI5Ojg1MCwzMTo4NTIsMzQ6ODUyLDM1Ojg1MiwzNjo4NjAsMzc6ODUwLDM4Ojg2Niw1NTo4NTAsNjQ6ODUyLDc3''@;'; put 'put ''OjkzNiw3ODo5NDksNzk6OTUwLDgwOjg3NCw4NzoxMjUyLDg4OjEyNTIsODk6MTI1MiwxMDg6ODYzLDEzNDo3MzcsMTM1Ojg1MiwxMzY6ODU3LDIwNDoxMjU3LDI1NToxNjk2OX0sUj1WZSh7MTo0MzcsMjo4NTAsMzoxMjUyLDQ6MWU0LDEwMDo4NTIsMTAxOjg2NiwxMDI6ODY1LDEwMzo4NjEs''@;'; put 'put ''MTA0Ojg5NSwxMDU6NjIwLDEwNjo3MzcsMTA3Ojg1NywxMjA6OTUwLDEyMTo5NDksMTIyOjkzNiwxMjM6OTMyLDEyNDo4NzQsMTI1OjEyNTUsMTI2OjEyNTYsMTUwOjEwMDA3LDE1MToxMDAyOSwxNTI6MTAwMDYsMjAwOjEyNTAsMjAxOjEyNTEsMjAyOjEyNTQsMjAzOjEyNTMsMDoyMDEyN30p''@;'; put 'put ''O2Z1bmN0aW9uIFEoeWUsUGUpe3ZhciBOZT1QZXx8e307cmV0dXJuIE5lLmRhdGVORnx8KE5lLmRhdGVORj0ieXl5eW1tZGQiKSxkNChmdW5jdGlvbiBHKHllLFBlKXt2YXIgTmU9W10sWWU9VigxKTtzd2l0Y2goUGUudHlwZSl7Y2FzZSJiYXNlNjQiOlllPWIoX2UuZGVjb2RlKHllKSk7YnJl''@;'; put 'put ''YWs7Y2FzZSJiaW5hcnkiOlllPWIoeWUpO2JyZWFrO2Nhc2UiYnVmZmVyIjpjYXNlImFycmF5IjpZZT15ZX12bihZZSwwKTt2YXIgZXQ9WWUucmVhZF9zaGlmdCgxKSx1dD0hISgxMzYmZXQpLEV0PSExLG90PSExO3N3aXRjaChldCl7Y2FzZSAyOmNhc2UgMzpjYXNlIDEzMTpjYXNlIDEzOTpj''@;'; put 'put ''YXNlIDI0NTpicmVhaztjYXNlIDQ4OmNhc2UgNDk6RXQ9ITAsdXQ9ITA7YnJlYWs7Y2FzZSAxNDA6b3Q9ITA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbnN1cHBvcnRlZCBWZXJzaW9uOiAiK2V0LnRvU3RyaW5nKDE2KSl9dmFyIGJ0PTAsQnQ9NTIxOzI9PWV0JiYoYnQ9''@;'; put 'put ''WWUucmVhZF9zaGlmdCgyKSksWWUubCs9MywyIT1ldCYmKGJ0PVllLnJlYWRfc2hpZnQoNCkpLGJ0PjEwNDg1NzYmJihidD0xZTYpLDIhPWV0JiYoQnQ9WWUucmVhZF9zaGlmdCgyKSk7dmFyIGt0PVllLnJlYWRfc2hpZnQoMiksT3Q9UGUuY29kZXBhZ2V8fDEyNTI7MiE9ZXQmJihZZS5sKz0x''@;'; put 'put ''NixZZS5yZWFkX3NoaWZ0KDEpLDAhPT1ZZVtZZS5sXSYmKE90PVNbWWVbWWUubF1dKSxZZS5sKz0xLFllLmwrPTIpLG90JiYoWWUubCs9MzYpO2Zvcih2YXIgS3Q9W10sVG49e30saXI9TWF0aC5taW4oWWUubGVuZ3RoLDI9PWV0PzUyMTpCdC0xMC0oRXQ/MjY0OjApKSxTbj1vdD8zMjoxMTtZ''@;'; put 'put ''ZS5sPGlyJiYxMyE9WWVbWWUubF07KXN3aXRjaChUbj17fSxUbi5uYW1lPWNwdGFibGUudXRpbHMuZGVjb2RlKE90LFllLnNsaWNlKFllLmwsWWUubCtTbikpLnJlcGxhY2UoL1tcdTAwMDBcclxuXS4qJC9nLCIiKSxZZS5sKz1TbixUbi50eXBlPVN0cmluZy5mcm9tQ2hhckNvZGUoWWUucmVh''@;'; put 'put ''ZF9zaGlmdCgxKSksMiE9ZXQmJiFvdCYmKFRuLm9mZnNldD1ZZS5yZWFkX3NoaWZ0KDQpKSxUbi5sZW49WWUucmVhZF9zaGlmdCgxKSwyPT1ldCYmKFRuLm9mZnNldD1ZZS5yZWFkX3NoaWZ0KDIpKSxUbi5kZWM9WWUucmVhZF9zaGlmdCgxKSxUbi5uYW1lLmxlbmd0aCYmS3QucHVzaChUbiks''@;'; put 'put ''MiE9ZXQmJihZZS5sKz1vdD8xMzoxNCksVG4udHlwZSl7Y2FzZSJCIjooIUV0fHw4IT1Ubi5sZW4pJiZQZS5XVEYmJmNvbnNvbGUubG9nKCJTa2lwcGluZyAiK1RuLm5hbWUrIjoiK1RuLnR5cGUpO2JyZWFrO2Nhc2UiRyI6Y2FzZSJQIjpQZS5XVEYmJmNvbnNvbGUubG9nKCJTa2lwcGluZyAi''@;'; put 'put ''K1RuLm5hbWUrIjoiK1RuLnR5cGUpO2JyZWFrO2Nhc2UiKyI6Y2FzZSIwIjpjYXNlIkAiOmNhc2UiQyI6Y2FzZSJEIjpjYXNlIkYiOmNhc2UiSSI6Y2FzZSJMIjpjYXNlIk0iOmNhc2UiTiI6Y2FzZSJPIjpjYXNlIlQiOmNhc2UiWSI6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVu''@;'; put 'put ''a25vd24gRmllbGQgVHlwZTogIitUbi50eXBlKX1pZigxMyE9PVllW1llLmxdJiYoWWUubD1CdC0xKSwxMyE9PVllLnJlYWRfc2hpZnQoMSkpdGhyb3cgbmV3IEVycm9yKCJEQkYgVGVybWluYXRvciBub3QgZm91bmQgIitZZS5sKyIgIitZZVtZZS5sXSk7WWUubD1CdDt2YXIgc3I9MCxKbj0w''@;'; put 'put ''O2ZvcihOZVswXT1bXSxKbj0wO0puIT1LdC5sZW5ndGg7KytKbilOZVswXVtKbl09S3RbSm5dLm5hbWU7Zm9yKDtidC0tID4wOylpZig0MiE9PVllW1llLmxdKWZvcigrK1llLmwsTmVbKytzcl09W10sSm49MCxKbj0wO0puIT1LdC5sZW5ndGg7KytKbil7dmFyIFZuPVllLnNsaWNlKFllLmws''@;'; put 'put ''WWUubCtLdFtKbl0ubGVuKTtZZS5sKz1LdFtKbl0ubGVuLHZuKFZuLDApO3ZhciB1cj1jcHRhYmxlLnV0aWxzLmRlY29kZShPdCxWbik7c3dpdGNoKEt0W0puXS50eXBlKXtjYXNlIkMiOnVyLnRyaW0oKS5sZW5ndGgmJihOZVtzcl1bSm5dPXVyLnJlcGxhY2UoL1xzKyQvLCIiKSk7YnJlYWs7''@;'; put 'put ''Y2FzZSJEIjpOZVtzcl1bSm5dPTg9PT11ci5sZW5ndGg/bmV3IERhdGUoK3VyLnNsaWNlKDAsNCksK3VyLnNsaWNlKDQsNiktMSwrdXIuc2xpY2UoNiw4KSk6dXI7YnJlYWs7Y2FzZSJGIjpOZVtzcl1bSm5dPXBhcnNlRmxvYXQodXIudHJpbSgpKTticmVhaztjYXNlIisiOmNhc2UiSSI6TmVb''@;'; put 'put ''c3JdW0puXT1vdD8yMTQ3NDgzNjQ4XlZuLnJlYWRfc2hpZnQoLTQsImkiKTpWbi5yZWFkX3NoaWZ0KDQsImkiKTticmVhaztjYXNlIkwiOnN3aXRjaCh1ci50cmltKCkudG9VcHBlckNhc2UoKSl7Y2FzZSJZIjpjYXNlIlQiOk5lW3NyXVtKbl09ITA7YnJlYWs7Y2FzZSJOIjpjYXNlIkYiOk5l''@;'; put 'put ''W3NyXVtKbl09ITE7YnJlYWs7Y2FzZSIiOmNhc2UiPyI6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkRCRiBVbnJlY29nbml6ZWQgTDp8Iit1cisifCIpfWJyZWFrO2Nhc2UiTSI6aWYoIXV0KXRocm93IG5ldyBFcnJvcigiREJGIFVuZXhwZWN0ZWQgTUVNTyBmb3IgdHlwZSAiK2V0''@;'; put 'put ''LnRvU3RyaW5nKDE2KSk7TmVbc3JdW0puXT0iIyNNRU1PIyMiKyhvdD9wYXJzZUludCh1ci50cmltKCksMTApOlZuLnJlYWRfc2hpZnQoNCkpO2JyZWFrO2Nhc2UiTiI6KHVyPXVyLnJlcGxhY2UoL1x1MDAwMC9nLCIiKS50cmltKCkpJiYiLiIhPXVyJiYoTmVbc3JdW0puXT0rdXJ8fDApO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiQCI6TmVbc3JdW0puXT1uZXcgRGF0ZShWbi5yZWFkX3NoaWZ0KC04LCJmIiktNjIxMzU2ODMyZTUpO2JyZWFrO2Nhc2UiVCI6TmVbc3JdW0puXT1uZXcgRGF0ZSg4NjRlNSooVm4ucmVhZF9zaGlmdCg0KS0yNDQwNTg4KStWbi5yZWFkX3NoaWZ0KDQpKTticmVhaztjYXNlIlki''@;'; put 'put ''Ok5lW3NyXVtKbl09Vm4ucmVhZF9zaGlmdCg0LCJpIikvMWU0O2JyZWFrO2Nhc2UiTyI6TmVbc3JdW0puXT0tVm4ucmVhZF9zaGlmdCgtOCwiZiIpO2JyZWFrO2Nhc2UiQiI6aWYoRXQmJjg9PUt0W0puXS5sZW4pe05lW3NyXVtKbl09Vm4ucmVhZF9zaGlmdCg4LCJmIik7YnJlYWt9Y2FzZSJH''@;'; put 'put ''IjpjYXNlIlAiOlZuLmwrPUt0W0puXS5sZW47YnJlYWs7Y2FzZSIwIjppZigiX051bGxGbGFncyI9PT1LdFtKbl0ubmFtZSlicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiREJGIFVuc3VwcG9ydGVkIGRhdGEgdHlwZSAiK0t0W0puXS50eXBlKX19ZWxzZSBZZS5sKz1rdDtpZigyIT1l''@;'; put 'put ''dCYmWWUubDxZZS5sZW5ndGgmJjI2IT1ZZVtZZS5sKytdKXRocm93IG5ldyBFcnJvcigiREJGIEVPRiBNYXJrZXIgbWlzc2luZyAiKyhZZS5sLTEpKyIgb2YgIitZZS5sZW5ndGgrIiAiK1llW1llLmwtMV0udG9TdHJpbmcoMTYpKTtyZXR1cm4gUGUmJlBlLnNoZWV0Um93cyYmKE5lPU5lLnNs''@;'; put 'put ''aWNlKDAsUGUuc2hlZXRSb3dzKSksTmV9KHllLE5lKSxOZSl9dmFyIGdlPXtCOjgsQzoyNTAsTDoxLEQ6OCwiPyI6MCwiIjowfTtyZXR1cm57dmVyc2lvbnM6WzIsMyw0OCw0OSwxMzEsMTM5LDE0MCwyNDVdLHRvX3dvcmtib29rOmZ1bmN0aW9uIGFlKHllLFBlKXt0cnl7cmV0dXJuIEpkKFEo''@;'; put 'put ''eWUsUGUpLFBlKX1jYXRjaChOZSl7aWYoUGUmJlBlLldURil0aHJvdyBOZX1yZXR1cm57U2hlZXROYW1lczpbXSxTaGVldHM6e319fSx0b19zaGVldDpRLGZyb21fc2hlZXQ6ZnVuY3Rpb24gcGUoeWUsUGUpe3ZhciBOZT1QZXx8e307aWYoK05lLmNvZGVwYWdlPj0wJiZVKCtOZS5jb2RlcGFn''@;'; put 'put ''ZSksInN0cmluZyI9PU5lLnR5cGUpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3Qgd3JpdGUgREJGIHRvIEpTIHN0cmluZyIpO3ZhciBZZT1taSgpLGV0PVk0KHllLHtoZWFkZXI6MSxyYXc6ITAsY2VsbERhdGVzOiEwfSksdXQ9ZXRbMF0sRXQ9ZXQuc2xpY2UoMSksb3Q9MCxidD0wLEJ0PTAsa3Q9''@;'; put 'put ''MTtmb3Iob3Q9MDtvdDx1dC5sZW5ndGg7KytvdClpZihudWxsIT1vdCl7aWYoKytCdCwibnVtYmVyIj09dHlwZW9mIHV0W290XSYmKHV0W290XT11dFtvdF0udG9TdHJpbmcoMTApKSwic3RyaW5nIiE9dHlwZW9mIHV0W290XSl0aHJvdyBuZXcgRXJyb3IoIkRCRiBJbnZhbGlkIGNvbHVtbiBu''@;'; put 'put ''YW1lICIrdXRbb3RdKyIgfCIrdHlwZW9mIHV0W290XSsifCIpO2lmKHV0LmluZGV4T2YodXRbb3RdKSE9PW90KWZvcihidD0wO2J0PDEwMjQ7KytidClpZigtMT09dXQuaW5kZXhPZih1dFtvdF0rIl8iK2J0KSl7dXRbb3RdKz0iXyIrYnQ7YnJlYWt9fXZhciBPdD1hYSh5ZVsiIXJlZiJdKSxL''@;'; put 'put ''dD1bXTtmb3Iob3Q9MDtvdDw9T3QuZS5jLU90LnMuYzsrK290KXt2YXIgVG49W107Zm9yKGJ0PTA7YnQ8RXQubGVuZ3RoOysrYnQpbnVsbCE9RXRbYnRdW290XSYmVG4ucHVzaChFdFtidF1bb3RdKTtpZigwIT1Ubi5sZW5ndGgmJm51bGwhPXV0W290XSl7dmFyIGlyPSIiLFNuPSIiO2Zvcihi''@;'; put 'put ''dD0wO2J0PFRuLmxlbmd0aDsrK2J0KXtzd2l0Y2godHlwZW9mIFRuW2J0XSl7Y2FzZSJudW1iZXIiOlNuPSJCIjticmVhaztjYXNlInN0cmluZyI6ZGVmYXVsdDpTbj0iQyI7YnJlYWs7Y2FzZSJib29sZWFuIjpTbj0iTCI7YnJlYWs7Y2FzZSJvYmplY3QiOlNuPVRuW2J0XWluc3RhbmNlb2Yg''@;'; put 'put ''RGF0ZT8iRCI6IkMifWlmKCJDIj09KGlyPWlyJiZpciE9U24/IkMiOlNuKSlicmVha31rdCs9Z2VbaXJdfHwwLEt0W290XT1pcn1lbHNlIEt0W290XT0iPyJ9dmFyIHNyPVllLm5leHQoMzIpO2Zvcihzci53cml0ZV9zaGlmdCg0LDMxODkwMjU3Niksc3Iud3JpdGVfc2hpZnQoNCxFdC5sZW5n''@;'; put 'put ''dGgpLHNyLndyaXRlX3NoaWZ0KDIsMjk2KzMyKkJ0KSxzci53cml0ZV9zaGlmdCgyLGt0KSxvdD0wO290PDQ7KytvdClzci53cml0ZV9zaGlmdCg0LDApO2Zvcihzci53cml0ZV9zaGlmdCg0LCgrUltGXXx8Myk8PDgpLG90PTAsYnQ9MDtvdDx1dC5sZW5ndGg7KytvdClpZihudWxsIT11dFtv''@;'; put 'put ''dF0pe3ZhciBKbj1ZZS5uZXh0KDMyKSxWbj0odXRbb3RdLnNsaWNlKC0xMCkrIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDAiKS5zbGljZSgwLDExKTtKbi53cml0ZV9zaGlmdCgxLFZuLCJzYmNzIiksSm4ud3JpdGVfc2hpZnQoMSwiPyI9PUt0W290XT8iQyI6S3Rbb3RdLCJzYmNzIiksSm4ud3Jp''@;'; put 'put ''dGVfc2hpZnQoNCxidCksSm4ud3JpdGVfc2hpZnQoMSxnZVtLdFtvdF1dfHwwKSxKbi53cml0ZV9zaGlmdCgxLDApLEpuLndyaXRlX3NoaWZ0KDEsMiksSm4ud3JpdGVfc2hpZnQoNCwwKSxKbi53cml0ZV9zaGlmdCgxLDApLEpuLndyaXRlX3NoaWZ0KDQsMCksSm4ud3JpdGVfc2hpZnQoNCww''@;'; put 'put ''KSxidCs9Z2VbS3Rbb3RdXXx8MH12YXIgdXI9WWUubmV4dCgyNjQpO2Zvcih1ci53cml0ZV9zaGlmdCg0LDEzKSxvdD0wO290PDY1Oysrb3QpdXIud3JpdGVfc2hpZnQoNCwwKTtmb3Iob3Q9MDtvdDxFdC5sZW5ndGg7KytvdCl7dmFyIGdyPVllLm5leHQoa3QpO2Zvcihnci53cml0ZV9zaGlm''@;'; put 'put ''dCgxLDApLGJ0PTA7YnQ8dXQubGVuZ3RoOysrYnQpaWYobnVsbCE9dXRbYnRdKXN3aXRjaChLdFtidF0pe2Nhc2UiTCI6Z3Iud3JpdGVfc2hpZnQoMSxudWxsPT1FdFtvdF1bYnRdPzYzOkV0W290XVtidF0/ODQ6NzApO2JyZWFrO2Nhc2UiQiI6Z3Iud3JpdGVfc2hpZnQoOCxFdFtvdF1bYnRd''@;'; put 'put ''fHwwLCJmIik7YnJlYWs7Y2FzZSJEIjpFdFtvdF1bYnRdPyhnci53cml0ZV9zaGlmdCg0LCgiMDAwMCIrRXRbb3RdW2J0XS5nZXRGdWxsWWVhcigpKS5zbGljZSgtNCksInNiY3MiKSxnci53cml0ZV9zaGlmdCgyLCgiMDAiKyhFdFtvdF1bYnRdLmdldE1vbnRoKCkrMSkpLnNsaWNlKC0yKSwi''@;'; put 'put ''c2JjcyIpLGdyLndyaXRlX3NoaWZ0KDIsKCIwMCIrRXRbb3RdW2J0XS5nZXREYXRlKCkpLnNsaWNlKC0yKSwic2JjcyIpKTpnci53cml0ZV9zaGlmdCg4LCIwMDAwMDAwMCIsInNiY3MiKTticmVhaztjYXNlIkMiOnZhciB0cj1TdHJpbmcoRXRbb3RdW2J0XXx8IiIpO2Zvcihnci53cml0ZV9z''@;'; put 'put ''aGlmdCgxLHRyLCJzYmNzIiksQnQ9MDtCdDwyNTAtdHIubGVuZ3RoOysrQnQpZ3Iud3JpdGVfc2hpZnQoMSwzMil9fXJldHVybiBZZS5uZXh0KDEpLndyaXRlX3NoaWZ0KDEsMjYpLFllLmVuZCgpfX19KCksbEM9ZnVuY3Rpb24oKXt2YXIgUz17QUE6Ilx4YzAiLEJBOiJceGMxIixDQToiXHhj''@;'; put 'put ''MiIsREE6MTk1LEhBOiJceGM0IixKQToxOTcsQUU6Ilx4YzgiLEJFOiJceGM5IixDRToiXHhjYSIsSEU6Ilx4Y2IiLEFJOiJceGNjIixCSToiXHhjZCIsQ0k6Ilx4Y2UiLEhJOiJceGNmIixBTzoiXHhkMiIsQk86Ilx4ZDMiLENPOiJceGQ0IixETzoyMTMsSE86Ilx4ZDYiLEFVOiJceGQ5IixC''@;'; put 'put ''VToiXHhkYSIsQ1U6Ilx4ZGIiLEhVOiJceGRjIixBYToiXHhlMCIsQmE6Ilx4ZTEiLENhOiJceGUyIixEYToyMjcsSGE6Ilx4ZTQiLEphOjIyOSxBZToiXHhlOCIsQmU6Ilx4ZTkiLENlOiJceGVhIixIZToiXHhlYiIsQWk6Ilx4ZWMiLEJpOiJceGVkIixDaToiXHhlZSIsSGk6Ilx4ZWYiLEFv''@;'; put 'put ''OiJceGYyIixCbzoiXHhmMyIsQ286Ilx4ZjQiLERvOjI0NSxIbzoiXHhmNiIsQXU6Ilx4ZjkiLEJ1OiJceGZhIixDdToiXHhmYiIsSHU6Ilx4ZmMiLEtDOiJceGM3IixLYzoiXHhlNyIscToiXHhlNiIsejoiXHUwMTUzIixhOiJceGM2IixqOiJcdTAxNTIiLEROOjIwOSxEbjoyNDEsSHk6MjU1''@;'; put 'put ''LFM6MTY5LGM6MTcwLFI6MTc0LCJCICI6MTgwLDA6MTc2LDE6MTc3LDI6MTc4LDM6MTc5LDU6MTgxLDY6MTgyLDc6MTgzLFE6MTg1LGs6MTg2LGI6MjA4LGk6MjE2LGw6MjIyLHM6MjQwLHk6MjQ4LCIhIjoxNjEsJyInOjE2MiwiIyI6MTYzLCIoIjoxNjQsIiUiOjE2NSwiJyI6MTY3LCJIICI6''@;'; put 'put ''MTY4LCIrIjoxNzEsIjsiOjE4NywiPCI6MTg4LCI9IjoxODksIj4iOjE5MCwiPyI6MTkxLCJ7IjoyMjN9LFI9bmV3IFJlZ0V4cCgiXHgxYk4oIitSZShTKS5qb2luKCJ8IikucmVwbGFjZSgvXHxcfFx8LywifFxcfHwiKS5yZXBsYWNlKC8oWz8oKStdKS9nLCJcXCQxIikrInxcXHwpIiwiZ20i''@;'; put 'put ''KSxrPWZ1bmN0aW9uKGV0LHV0KXt2YXIgRXQ9U1t1dF07cmV0dXJuIm51bWJlciI9PXR5cGVvZiBFdD9pZShFdCk6RXR9LEc9ZnVuY3Rpb24oZXQsdXQsRXQpe3ZhciBvdD11dC5jaGFyQ29kZUF0KDApLTMyPDw0fEV0LmNoYXJDb2RlQXQoMCktNDg7cmV0dXJuIDU5PT1vdD9ldDppZShvdCl9''@;'; put 'put ''O2Z1bmN0aW9uIGFlKGV0LHV0KXt2YXIgdXIsRXQ9ZXQuc3BsaXQoL1tcblxyXSsvKSxvdD0tMSxidD0tMSxCdD0wLGt0PTAsT3Q9W10sS3Q9W10sVG49bnVsbCxpcj17fSxTbj1bXSxzcj1bXSxKbj1bXSxWbj0wO2ZvcigrdXQuY29kZXBhZ2U+PTAmJlUoK3V0LmNvZGVwYWdlKTtCdCE9PUV0''@;'; put 'put ''Lmxlbmd0aDsrK0J0KXtWbj0wO3ZhciBGaSxncj1FdFtCdF0udHJpbSgpLnJlcGxhY2UoL1x4MUIoW1x4MjAtXHgyRl0pKFtceDMwLVx4M0ZdKS9nLEcpLnJlcGxhY2UoUixrKSx0cj1nci5yZXBsYWNlKC87Oy9nLCJcMCIpLnNwbGl0KCI7IikubWFwKGZ1bmN0aW9uKFdpKXtyZXR1cm4gV2ku''@;'; put 'put ''cmVwbGFjZSgvXHUwMDAwL2csIjsiKX0pO2lmKGdyLmxlbmd0aD4wKXN3aXRjaCh0clswXSl7Y2FzZSJJRCI6Y2FzZSJFIjpjYXNlIkIiOmNhc2UiTyI6Y2FzZSJXIjpicmVhaztjYXNlIlAiOiJQIj09dHJbMV0uY2hhckF0KDApJiZLdC5wdXNoKGdyLnNsaWNlKDMpLnJlcGxhY2UoLzs7L2cs''@;'; put 'put ''IjsiKSk7YnJlYWs7Y2FzZSJDIjp2YXIgaW89ITEsdW89ITEsTGk9ITEsRHI9ITEsTm49LTEsVnI9LTE7Zm9yKGt0PTE7a3Q8dHIubGVuZ3RoOysra3Qpc3dpdGNoKHRyW2t0XS5jaGFyQXQoMCkpe2Nhc2UiQSI6Y2FzZSJHIjpicmVhaztjYXNlIlgiOmJ0PXBhcnNlSW50KHRyW2t0XS5zbGlj''@;'; put 'put ''ZSgxKSktMSx1bz0hMDticmVhaztjYXNlIlkiOmZvcihvdD1wYXJzZUludCh0cltrdF0uc2xpY2UoMSkpLTEsdW98fChidD0wKSx1cj1PdC5sZW5ndGg7dXI8PW90OysrdXIpT3RbdXJdPVtdO2JyZWFrO2Nhc2UiSyI6JyInPT09KEZpPXRyW2t0XS5zbGljZSgxKSkuY2hhckF0KDApP0ZpPUZp''@;'; put 'put ''LnNsaWNlKDEsRmkubGVuZ3RoLTEpOiJUUlVFIj09PUZpP0ZpPSEwOiJGQUxTRSI9PT1GaT9GaT0hMTppc05hTihRdChGaSkpP2lzTmFOKHNuKEZpKS5nZXREYXRlKCkpfHwoRmk9SGUoRmkpKTooRmk9UXQoRmkpLG51bGwhPT1UbiYmQS5pc19kYXRlKFRuKSYmKEZpPWRuKEZpKSkpLHR5cGVv''@;'; put 'put ''ZiBjcHRhYmxlPCJ1IiYmInN0cmluZyI9PXR5cGVvZiBGaSYmInN0cmluZyIhPSh1dHx8e30pLnR5cGUmJih1dHx8e30pLmNvZGVwYWdlJiYoRmk9Y3B0YWJsZS51dGlscy5kZWNvZGUodXQuY29kZXBhZ2UsRmkpKSxpbz0hMDticmVhaztjYXNlIkUiOkRyPSEwO3ZhciB2cj1PNSh0cltrdF0u''@;'; put 'put ''c2xpY2UoMSkse3I6b3QsYzpidH0pO090W290XVtidF09W090W290XVtidF0sdnJdO2JyZWFrO2Nhc2UiUyI6TGk9ITAsT3Rbb3RdW2J0XT1bT3Rbb3RdW2J0XSwiUzVTIl07YnJlYWs7Y2FzZSJSIjpObj1wYXJzZUludCh0cltrdF0uc2xpY2UoMSkpLTE7YnJlYWs7Y2FzZSJDIjpWcj1wYXJz''@;'; put 'put ''ZUludCh0cltrdF0uc2xpY2UoMSkpLTE7YnJlYWs7ZGVmYXVsdDppZih1dCYmdXQuV1RGKXRocm93IG5ldyBFcnJvcigiU1lMSyBiYWQgcmVjb3JkICIrZ3IpfWlmKGlvJiYoT3Rbb3RdW2J0XSYmMj09T3Rbb3RdW2J0XS5sZW5ndGg/T3Rbb3RdW2J0XVswXT1GaTpPdFtvdF1bYnRdPUZpLFRu''@;'; put 'put ''PW51bGwpLExpKXtpZihEcil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgc2hhcmVkIGZvcm11bGEgY2Fubm90IGhhdmUgb3duIGZvcm11bGEiKTt2YXIgSG49Tm4+LTEmJk90W05uXVtWcl07aWYoIUhufHwhSG5bMV0pdGhyb3cgbmV3IEVycm9yKCJTWUxLIHNoYXJlZCBmb3JtdWxhIGNhbm5vdCBm''@;'; put 'put ''aW5kIGJhc2UiKTtPdFtvdF1bYnRdWzFdPVZrKEhuWzFdLHtyOm90LU5uLGM6YnQtVnJ9KX1icmVhaztjYXNlIkYiOnZhciBCcj0wO2ZvcihrdD0xO2t0PHRyLmxlbmd0aDsrK2t0KXN3aXRjaCh0cltrdF0uY2hhckF0KDApKXtjYXNlIlgiOmJ0PXBhcnNlSW50KHRyW2t0XS5zbGljZSgxKSkt''@;'; put 'put ''MSwrK0JyO2JyZWFrO2Nhc2UiWSI6Zm9yKG90PXBhcnNlSW50KHRyW2t0XS5zbGljZSgxKSktMSx1cj1PdC5sZW5ndGg7dXI8PW90OysrdXIpT3RbdXJdPVtdO2JyZWFrO2Nhc2UiTSI6Vm49cGFyc2VJbnQodHJba3RdLnNsaWNlKDEpKS8yMDticmVhaztjYXNlIkYiOmNhc2UiRyI6Y2FzZSJT''@;'; put 'put ''IjpjYXNlIkQiOmNhc2UiTiI6YnJlYWs7Y2FzZSJQIjpUbj1LdFtwYXJzZUludCh0cltrdF0uc2xpY2UoMSkpXTticmVhaztjYXNlIlciOmZvcihKbj10cltrdF0uc2xpY2UoMSkuc3BsaXQoIiAiKSx1cj1wYXJzZUludChKblswXSwxMCk7dXI8PXBhcnNlSW50KEpuWzFdLDEwKTsrK3VyKVZu''@;'; put 'put ''PXBhcnNlSW50KEpuWzJdLDEwKSxzclt1ci0xXT0wPT09Vm4/e2hpZGRlbjohMH06e3djaDpWbn0sZTEoc3JbdXItMV0pO2JyZWFrO2Nhc2UiQyI6c3JbYnQ9cGFyc2VJbnQodHJba3RdLnNsaWNlKDEpKS0xXXx8KHNyW2J0XT17fSk7YnJlYWs7Y2FzZSJSIjpTbltvdD1wYXJzZUludCh0cltr''@;'; put 'put ''dF0uc2xpY2UoMSkpLTFdfHwoU25bb3RdPXt9KSxWbj4wPyhTbltvdF0uaHB0PVZuLFNuW290XS5ocHg9aWgoVm4pKTowPT09Vm4mJihTbltvdF0uaGlkZGVuPSEwKTticmVhaztkZWZhdWx0OmlmKHV0JiZ1dC5XVEYpdGhyb3cgbmV3IEVycm9yKCJTWUxLIGJhZCByZWNvcmQgIitncil9QnI8''@;'; put 'put ''MSYmKFRuPW51bGwpO2JyZWFrO2RlZmF1bHQ6aWYodXQmJnV0LldURil0aHJvdyBuZXcgRXJyb3IoIlNZTEsgYmFkIHJlY29yZCAiK2dyKX19cmV0dXJuIFNuLmxlbmd0aD4wJiYoaXJbIiFyb3dzIl09U24pLHNyLmxlbmd0aD4wJiYoaXJbIiFjb2xzIl09c3IpLHV0JiZ1dC5zaGVldFJvd3Mm''@;'; put 'put ''JihPdD1PdC5zbGljZSgwLHV0LnNoZWV0Um93cykpLFtPdCxpcl19ZnVuY3Rpb24gZ2UoZXQsdXQpe3ZhciBFdD1mdW5jdGlvbiBRKGV0LHV0KXtzd2l0Y2godXQudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBhZShfZS5kZWNvZGUoZXQpLHV0KTtjYXNlImJpbmFyeSI6cmV0dXJuIGFlKGV0''@;'; put 'put ''LHV0KTtjYXNlImJ1ZmZlciI6cmV0dXJuIGFlKGV0LnRvU3RyaW5nKCJiaW5hcnkiKSx1dCk7Y2FzZSJhcnJheSI6cmV0dXJuIGFlKGR0KGV0KSx1dCl9dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK3V0LnR5cGUpfShldCx1dCksYnQ9RXRbMV0sQnQ9ZDQoRXRbMF0sdXQp''@;'; put 'put ''O3JldHVybiBSZShidCkuZm9yRWFjaChmdW5jdGlvbihrdCl7QnRba3RdPWJ0W2t0XX0pLEJ0fWZ1bmN0aW9uIHllKGV0LHV0LEV0LG90KXt2YXIgYnQ9IkM7WSIrKEV0KzEpKyI7WCIrKG90KzEpKyI7SyI7c3dpdGNoKGV0LnQpe2Nhc2UibiI6YnQrPWV0LnZ8fDAsZXQuZiYmIWV0LkYmJihi''@;'; put 'put ''dCs9IjtFIitPNChldC5mLHtyOkV0LGM6b3R9KSk7YnJlYWs7Y2FzZSJiIjpidCs9ZXQudj8iVFJVRSI6IkZBTFNFIjticmVhaztjYXNlImUiOmJ0Kz1ldC53fHxldC52O2JyZWFrO2Nhc2UiZCI6YnQrPSciJysoZXQud3x8ZXQudikrJyInO2JyZWFrO2Nhc2UicyI6YnQrPSciJytldC52LnJl''@;'; put 'put ''cGxhY2UoLyIvZywiIikrJyInfXJldHVybiBidH1yZXR1cm4gU1sifCJdPTI1NCx7dG9fd29ya2Jvb2s6ZnVuY3Rpb24gcGUoZXQsdXQpe3JldHVybiBKZChnZShldCx1dCksdXQpfSx0b19zaGVldDpnZSxmcm9tX3NoZWV0OmZ1bmN0aW9uIFllKGV0LHV0KXt2YXIgQnQsRXQ9WyJJRDtQU2hl''@;'; put 'put ''ZXRKUztOO0UiXSxvdD1bXSxidD1hYShldFsiIXJlZiJdKSxrdD1BcnJheS5pc0FycmF5KGV0KSxPdD0iXHJcbiI7RXQucHVzaCgiUDtQR2VuZXJhbCIpLEV0LnB1c2goIkY7UDA7REcwRzg7TTI1NSIpLGV0WyIhY29scyJdJiZmdW5jdGlvbiBQZShldCx1dCl7dXQuZm9yRWFjaChmdW5jdGlv''@;'; put 'put ''bihFdCxvdCl7dmFyIGJ0PSJGO1ciKyhvdCsxKSsiICIrKG90KzEpKyIgIjtFdC5oaWRkZW4/YnQrPSIwIjooIm51bWJlciI9PXR5cGVvZiBFdC53aWR0aCYmIUV0LndweCYmKEV0LndweD13NShFdC53aWR0aCkpLCJudW1iZXIiPT10eXBlb2YgRXQud3B4JiYhRXQud2NoJiYoRXQud2NoPUM1''@;'; put 'put ''KEV0LndweCkpLCJudW1iZXIiPT10eXBlb2YgRXQud2NoJiYoYnQrPU1hdGgucm91bmQoRXQud2NoKSkpLCIgIiE9YnQuY2hhckF0KGJ0Lmxlbmd0aC0xKSYmZXQucHVzaChidCl9KX0oRXQsZXRbIiFjb2xzIl0pLGV0WyIhcm93cyJdJiZmdW5jdGlvbiBOZShldCx1dCl7dXQuZm9yRWFjaChm''@;'; put 'put ''dW5jdGlvbihFdCxvdCl7dmFyIGJ0PSJGOyI7RXQuaGlkZGVuP2J0Kz0iTTA7IjpFdC5ocHQ/YnQrPSJNIisyMCpFdC5ocHQrIjsiOkV0LmhweCYmKGJ0Kz0iTSIrMjAqTjMoRXQuaHB4KSsiOyIpLGJ0Lmxlbmd0aD4yJiZldC5wdXNoKGJ0KyJSIisob3QrMSkpfSl9KEV0LGV0WyIhcm93cyJd''@;'; put 'put ''KSxFdC5wdXNoKCJCO1kiKyhidC5lLnItYnQucy5yKzEpKyI7WCIrKGJ0LmUuYy1idC5zLmMrMSkrIjtEIitbYnQucy5jLGJ0LnMucixidC5lLmMsYnQuZS5yXS5qb2luKCIgIikpO2Zvcih2YXIgS3Q9YnQucy5yO0t0PD1idC5lLnI7KytLdClmb3IodmFyIFRuPWJ0LnMuYztUbjw9YnQuZS5j''@;'; put 'put ''OysrVG4pe3ZhciBpcj1YaSh7cjpLdCxjOlRufSk7KEJ0PWt0PyhldFtLdF18fFtdKVtUbl06ZXRbaXJdKSYmKG51bGwhPUJ0LnZ8fEJ0LmYmJiFCdC5GKSYmb3QucHVzaCh5ZShCdCwwLEt0LFRuKSl9cmV0dXJuIEV0LmpvaW4oT3QpK090K290LmpvaW4oT3QpK090KyJFIitPdH19fSgpLE12''@;'; put 'put ''PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gUihhZSxnZSl7Zm9yKHZhciBwZT1hZS5zcGxpdCgiXG4iKSx5ZT0tMSxQZT0tMSxOZT0wLFllPVtdO05lIT09cGUubGVuZ3RoOysrTmUpaWYoIkJPVCIhPT1wZVtOZV0udHJpbSgpKXtpZighKHllPDApKXtmb3IodmFyIGV0PXBlW05lXS50cmltKCkuc3Bs''@;'; put 'put ''aXQoIiwiKSx1dD1ldFswXSxFdD1ldFsxXSxvdD1wZVsrK05lXXx8IiI7MSYob3QubWF0Y2goL1siXS9nKXx8W10pLmxlbmd0aCYmTmU8cGUubGVuZ3RoLTE7KW90Kz0iXG4iK3BlWysrTmVdO3N3aXRjaChvdD1vdC50cmltKCksK3V0KXtjYXNlLTE6aWYoIkJPVCI9PT1vdCl7WWVbKyt5ZV09''@;'; put 'put ''W10sUGU9MDtjb250aW51ZX1pZigiRU9EIiE9PW90KXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIERJRiBzcGVjaWFsIGNvbW1hbmQgIitvdCk7YnJlYWs7Y2FzZSAwOlllW3llXVtQZV09IlRSVUUiPT09b3R8fCJGQUxTRSIhPT1vdCYmKGlzTmFOKFF0KEV0KSk/aXNOYU4oc24oRXQp''@;'; put 'put ''LmdldERhdGUoKSk/RXQ6SGUoRXQpOlF0KEV0KSksKytQZTticmVhaztjYXNlIDE6KG90PShvdD1vdC5zbGljZSgxLG90Lmxlbmd0aC0xKSkucmVwbGFjZSgvIiIvZywnIicpKSYmb3QubWF0Y2goL149Ii4qIiQvKSYmKG90PW90LnNsaWNlKDIsLTEpKSxZZVt5ZV1bUGUrK109IiIhPT1vdD9v''@;'; put 'put ''dDpudWxsfWlmKCJFT0QiPT09b3QpYnJlYWt9fWVsc2UgWWVbKyt5ZV09W10sUGU9MDtyZXR1cm4gZ2UmJmdlLnNoZWV0Um93cyYmKFllPVllLnNsaWNlKDAsZ2Uuc2hlZXRSb3dzKSksWWV9ZnVuY3Rpb24gayhhZSxnZSl7cmV0dXJuIGQ0KGZ1bmN0aW9uIFMoYWUsZ2Upe3N3aXRjaChnZS50''@;'; put 'put ''eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIFIoX2UuZGVjb2RlKGFlKSxnZSk7Y2FzZSJiaW5hcnkiOnJldHVybiBSKGFlLGdlKTtjYXNlImJ1ZmZlciI6cmV0dXJuIFIoYWUudG9TdHJpbmcoImJpbmFyeSIpLGdlKTtjYXNlImFycmF5IjpyZXR1cm4gUihkdChhZSksZ2UpfXRocm93IG5ldyBF''@;'; put 'put ''cnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitnZS50eXBlKX0oYWUsZ2UpLGdlKX1yZXR1cm57dG9fd29ya2Jvb2s6ZnVuY3Rpb24gRyhhZSxnZSl7cmV0dXJuIEpkKGsoYWUsZ2UpLGdlKX0sdG9fc2hlZXQ6ayxmcm9tX3NoZWV0OmZ1bmN0aW9uKCl7dmFyIGFlPWZ1bmN0aW9uKHllLFBlLE5l''@;'; put 'put ''LFllLGV0KXt5ZS5wdXNoKFBlKSx5ZS5wdXNoKE5lKyIsIitZZSkseWUucHVzaCgnIicrZXQucmVwbGFjZSgvIi9nLCciIicpKyciJyl9LGdlPWZ1bmN0aW9uKHllLFBlLE5lLFllKXt5ZS5wdXNoKFBlKyIsIitOZSkseWUucHVzaCgxPT1QZT8nIicrWWUucmVwbGFjZSgvIi9nLCciIicpKyci''@;'; put 'put ''JzpZZSl9O3JldHVybiBmdW5jdGlvbih5ZSl7dmFyIFllLFBlPVtdLE5lPWFhKHllWyIhcmVmIl0pLGV0PUFycmF5LmlzQXJyYXkoeWUpO2FlKFBlLCJUQUJMRSIsMCwxLCJzaGVldGpzIiksYWUoUGUsIlZFQ1RPUlMiLDAsTmUuZS5yLU5lLnMucisxLCIiKSxhZShQZSwiVFVQTEVTIiwwLE5l''@;'; put 'put ''LmUuYy1OZS5zLmMrMSwiIiksYWUoUGUsIkRBVEEiLDAsMCwiIik7Zm9yKHZhciB1dD1OZS5zLnI7dXQ8PU5lLmUucjsrK3V0KXtnZShQZSwtMSwwLCJCT1QiKTtmb3IodmFyIEV0PU5lLnMuYztFdDw9TmUuZS5jOysrRXQpe3ZhciBvdD1YaSh7cjp1dCxjOkV0fSk7aWYoWWU9ZXQ/KHllW3V0''@;'; put 'put ''XXx8W10pW0V0XTp5ZVtvdF0pc3dpdGNoKFllLnQpe2Nhc2UibiI6dmFyIGJ0PVllLnc7IWJ0JiZudWxsIT1ZZS52JiYoYnQ9WWUudiksbnVsbD09YnQ/Z2UoUGUsMSwwLFllLmYmJiFZZS5GPyI9IitZZS5mOiIiKTpnZShQZSwwLGJ0LCJWIik7YnJlYWs7Y2FzZSJiIjpnZShQZSwwLFllLnY/''@;'; put 'put ''MTowLFllLnY/IlRSVUUiOiJGQUxTRSIpO2JyZWFrO2Nhc2UicyI6Z2UoUGUsMSwwLGlzTmFOKFllLnYpP1llLnY6Jz0iJytZZS52KyciJyk7YnJlYWs7Y2FzZSJkIjpZZS53fHwoWWUudz1BLmZvcm1hdChZZS56fHxBLl90YWJsZVsxNF0sUWUoSGUoWWUudikpKSksZ2UoUGUsMCxZZS53LCJW''@;'; put 'put ''Iik7YnJlYWs7ZGVmYXVsdDpnZShQZSwxLDAsIiIpfWVsc2UgZ2UoUGUsMSwwLCIiKX19cmV0dXJuIGdlKFBlLC0xLDAsIkVPRCIpLFBlLmpvaW4oIlxyXG4iKX19KCl9fSgpLEc2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gUyhZZSl7cmV0dXJuIFllLnJlcGxhY2UoL1xcYi9nLCJcXCIpLnJlcGxh''@;'; put 'put ''Y2UoL1xcYy9nLCI6IikucmVwbGFjZSgvXFxuL2csIlxuIil9ZnVuY3Rpb24gUihZZSl7cmV0dXJuIFllLnJlcGxhY2UoL1xcL2csIlxcYiIpLnJlcGxhY2UoLzovZywiXFxjIikucmVwbGFjZSgvXG4vZywiXFxuIil9ZnVuY3Rpb24gRyhZZSxldCl7cmV0dXJuIGQ0KGZ1bmN0aW9uIGsoWWUs''@;'; put 'put ''ZXQpe2Zvcih2YXIgdXQ9WWUuc3BsaXQoIlxuIiksRXQ9LTEsb3Q9LTEsYnQ9MCxCdD1bXTtidCE9PXV0Lmxlbmd0aDsrK2J0KXt2YXIga3Q9dXRbYnRdLnRyaW0oKS5zcGxpdCgiOiIpO2lmKCJjZWxsIj09PWt0WzBdKXt2YXIgT3Q9TmEoa3RbMV0pO2lmKEJ0Lmxlbmd0aDw9T3Qucilmb3Io''@;'; put 'put ''RXQ9QnQubGVuZ3RoO0V0PD1PdC5yOysrRXQpQnRbRXRdfHwoQnRbRXRdPVtdKTtzd2l0Y2goRXQ9T3QucixvdD1PdC5jLGt0WzJdKXtjYXNlInQiOkJ0W0V0XVtvdF09UyhrdFszXSk7YnJlYWs7Y2FzZSJ2IjpCdFtFdF1bb3RdPStrdFszXTticmVhaztjYXNlInZ0ZiI6dmFyIEt0PWt0W2t0''@;'; put 'put ''Lmxlbmd0aC0xXTtjYXNlInZ0YyI6QnRbRXRdW290XT0ibmwiPT09a3RbM10/ISEra3RbNF06K2t0WzRdLCJ2dGYiPT1rdFsyXSYmKEJ0W0V0XVtvdF09W0J0W0V0XVtvdF0sS3RdKX19fXJldHVybiBldCYmZXQuc2hlZXRSb3dzJiYoQnQ9QnQuc2xpY2UoMCxldC5zaGVldFJvd3MpKSxCdH0o''@;'; put 'put ''WWUsZXQpLGV0KX12YXIgYWU9WyJzb2NpYWxjYWxjOnZlcnNpb246MS41IiwiTUlNRS1WZXJzaW9uOiAxLjAiLCJDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9U29jaWFsQ2FsY1NwcmVhZHNoZWV0Q29udHJvbFNhdmUiXS5qb2luKCJcbiIpLGdlPVsiLS1Tb2NpYWxD''@;'; put 'put ''YWxjU3ByZWFkc2hlZXRDb250cm9sU2F2ZSIsIkNvbnRlbnQtdHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1VVEYtOCJdLmpvaW4oIlxuIikrIlxuIixwZT1bIiMgU29jaWFsQ2FsYyBTcHJlYWRzaGVldCBDb250cm9sIFNhdmUiLCJwYXJ0OnNoZWV0Il0uam9pbigiXG4iKSx5ZT0iLS1Tb2Np''@;'; put 'put ''YWxDYWxjU3ByZWFkc2hlZXRDb250cm9sU2F2ZS0tIjtmdW5jdGlvbiBQZShZZSl7aWYoIVllfHwhWWVbIiFyZWYiXSlyZXR1cm4iIjtmb3IodmFyIEV0LGV0PVtdLHV0PVtdLG90PSIiLGJ0PVNzKFllWyIhcmVmIl0pLEJ0PUFycmF5LmlzQXJyYXkoWWUpLGt0PWJ0LnMucjtrdDw9YnQuZS5y''@;'; put 'put ''Oysra3QpZm9yKHZhciBPdD1idC5zLmM7T3Q8PWJ0LmUuYzsrK090KWlmKG90PVhpKHtyOmt0LGM6T3R9KSwoRXQ9QnQ/KFllW2t0XXx8W10pW090XTpZZVtvdF0pJiZudWxsIT1FdC52JiYieiIhPT1FdC50KXtzd2l0Y2godXQ9WyJjZWxsIixvdCwidCJdLEV0LnQpe2Nhc2UicyI6Y2FzZSJz''@;'; put 'put ''dHIiOnV0LnB1c2goUihFdC52KSk7YnJlYWs7Y2FzZSJuIjpFdC5mPyh1dFsyXT0idnRmIix1dFszXT0ibiIsdXRbNF09RXQudix1dFs1XT1SKEV0LmYpKToodXRbMl09InYiLHV0WzNdPUV0LnYpO2JyZWFrO2Nhc2UiYiI6dXRbMl09InZ0IisoRXQuZj8iZiI6ImMiKSx1dFszXT0ibmwiLHV0''@;'; put 'put ''WzRdPUV0LnY/IjEiOiIwIix1dFs1XT1SKEV0LmZ8fChFdC52PyJUUlVFIjoiRkFMU0UiKSk7YnJlYWs7Y2FzZSJkIjp2YXIgS3Q9UWUoSGUoRXQudikpO3V0WzJdPSJ2dGMiLHV0WzNdPSJuZCIsdXRbNF09IiIrS3QsdXRbNV09RXQud3x8QS5mb3JtYXQoRXQuenx8QS5fdGFibGVbMTRdLEt0''@;'; put 'put ''KTticmVhaztjYXNlImUiOmNvbnRpbnVlfWV0LnB1c2godXQuam9pbigiOiIpKX1yZXR1cm4gZXQucHVzaCgic2hlZXQ6YzoiKyhidC5lLmMtYnQucy5jKzEpKyI6cjoiKyhidC5lLnItYnQucy5yKzEpKyI6dHZmOjEiKSxldC5wdXNoKCJ2YWx1ZWZvcm1hdDoxOnRleHQtd2lraSIpLGV0Lmpv''@;'; put 'put ''aW4oIlxuIil9cmV0dXJue3RvX3dvcmtib29rOmZ1bmN0aW9uIFEoWWUsZXQpe3JldHVybiBKZChHKFllLGV0KSxldCl9LHRvX3NoZWV0OkcsZnJvbV9zaGVldDpmdW5jdGlvbiBOZShZZSl7cmV0dXJuW2FlLGdlLHBlLGdlLFBlKFllKSx5ZV0uam9pbigiXG4iKX19fSgpLEYzPWZ1bmN0aW9u''@;'; put 'put ''KCl7ZnVuY3Rpb24gUyhOZSxZZSxldCx1dCxFdCl7RXQucmF3P1llW2V0XVt1dF09TmU6IiI9PT1OZXx8KFllW2V0XVt1dF09UmkoTmUsRXQpP1JpKE5lLEV0KS52Ok5lKX12YXIgaz17NDQ6IiwiLDk6Ilx0Iiw1OToiOyJ9LEc9ezQ0OjMsOToyLDU5OjF9O2Z1bmN0aW9uIFEoTmUpe2Zvcih2''@;'; put 'put ''YXIgWWU9e30sZXQ9ITEsdXQ9MCxFdD0wO3V0PE5lLmxlbmd0aDsrK3V0KTM0PT0oRXQ9TmUuY2hhckNvZGVBdCh1dCkpP2V0PSFldDohZXQmJkV0IGluIGsmJihZZVtFdF09KFllW0V0XXx8MCkrMSk7Zm9yKHV0IGluIEV0PVtdLFllKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHku''@;'; put 'put ''Y2FsbChZZSx1dCkmJkV0LnB1c2goW1llW3V0XSx1dF0pO2lmKCFFdC5sZW5ndGgpZm9yKHV0IGluIFllPUcpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFllLHV0KSYmRXQucHVzaChbWWVbdXRdLHV0XSk7cmV0dXJuIEV0LnNvcnQoZnVuY3Rpb24ob3QsYnQpe3JldHVy''@;'; put 'put ''biBvdFswXS1idFswXXx8R1tvdFsxXV0tR1tidFsxXV19KSxrW0V0LnBvcCgpWzFdXX1mdW5jdGlvbiBnZShOZSxZZSl7cmV0dXJuIVllfHwhWWUuUFJOfHwic2VwPSI9PU5lLnNsaWNlKDAsNCl8fE5lLmluZGV4T2YoIlx0Iik+PTB8fE5lLmluZGV4T2YoIiwiKT49MHx8TmUuaW5kZXhPZigi''@;'; put 'put ''OyIpPj0wP2Z1bmN0aW9uIGFlKE5lLFllKXt2YXIgZXQ9WWV8fHt9LHV0PSIiO251bGwhPWxlJiZudWxsPT1ldC5kZW5zZSYmKGV0LmRlbnNlPWxlKTt2YXIgRXQ9ZXQuZGVuc2U/W106e30sb3Q9e3M6e2M6MCxyOjB9LGU6e2M6MCxyOjB9fTsic2VwPSI9PU5lLnNsaWNlKDAsNCk/MTM9PU5l''@;'; put 'put ''LmNoYXJDb2RlQXQoNSkmJjEwPT1OZS5jaGFyQ29kZUF0KDYpPyh1dD1OZS5jaGFyQXQoNCksTmU9TmUuc2xpY2UoNykpOjEzPT1OZS5jaGFyQ29kZUF0KDUpfHwxMD09TmUuY2hhckNvZGVBdCg1KT8odXQ9TmUuY2hhckF0KDQpLE5lPU5lLnNsaWNlKDYpKTp1dD1RKE5lLnNsaWNlKDAsMTAy''@;'; put 'put ''NCkpOnV0PVEoTmUuc2xpY2UoMCwxMDI0KSk7dmFyIGJ0PTAsQnQ9MCxrdD0wLE90PTAsS3Q9MCxUbj11dC5jaGFyQ29kZUF0KDApLGlyPSExLFNuPTAsc3I9TmUuY2hhckNvZGVBdCgwKTtOZT1OZS5yZXBsYWNlKC9cclxuL2dtLCJcbiIpO3ZhciBKbj1udWxsIT1ldC5kYXRlTkY/ZnVuY3Rp''@;'; put 'put ''b24gVWUoUyl7dmFyIFI9Im51bWJlciI9PXR5cGVvZiBTP0EuX3RhYmxlW1NdOlM7cmV0dXJuIFI9Ui5yZXBsYWNlKHdlLCIoXFxkKykiKSxuZXcgUmVnRXhwKCJeIitSKyIkIil9KGV0LmRhdGVORik6bnVsbDtmdW5jdGlvbiBWbigpe3ZhciB1cj1OZS5zbGljZShPdCxLdCksZ3I9e307aWYo''@;'; put 'put ''JyInPT11ci5jaGFyQXQoMCkmJiciJz09dXIuY2hhckF0KHVyLmxlbmd0aC0xKSYmKHVyPXVyLnNsaWNlKDEsLTEpLnJlcGxhY2UoLyIiL2csJyInKSksMD09PXVyLmxlbmd0aClnci50PSJ6IjtlbHNlIGlmKGV0LnJhdylnci50PSJzIixnci52PXVyO2Vsc2UgaWYoMD09PXVyLnRyaW0oKS5s''@;'; put 'put ''ZW5ndGgpZ3IudD0icyIsZ3Iudj11cjtlbHNlIGlmKDYxPT11ci5jaGFyQ29kZUF0KDApKTM0PT11ci5jaGFyQ29kZUF0KDEpJiYzND09dXIuY2hhckNvZGVBdCh1ci5sZW5ndGgtMSk/KGdyLnQ9InMiLGdyLnY9dXIuc2xpY2UoMiwtMSkucmVwbGFjZSgvIiIvZywnIicpKTpmdW5jdGlvbiB0''@;'; put 'put ''bmUoUyl7cmV0dXJuIDEhPVMubGVuZ3RofSh1cik/KGdyLnQ9Im4iLGdyLmY9dXIuc2xpY2UoMSkpOihnci50PSJzIixnci52PXVyKTtlbHNlIGlmKCJUUlVFIj09dXIpZ3IudD0iYiIsZ3Iudj0hMDtlbHNlIGlmKCJGQUxTRSI9PXVyKWdyLnQ9ImIiLGdyLnY9ITE7ZWxzZSBpZihpc05hTihr''@;'; put 'put ''dD1RdCh1cikpKWlmKCFpc05hTihzbih1cikuZ2V0RGF0ZSgpKXx8Sm4mJnVyLm1hdGNoKEpuKSl7Z3Iuej1ldC5kYXRlTkZ8fEEuX3RhYmxlWzE0XTt2YXIgdHI9MDtKbiYmdXIubWF0Y2goSm4pJiYodXI9ZnVuY3Rpb24gSmUoUyxSLGspe3ZhciBHPS0xLFE9LTEsYWU9LTEsZ2U9LTEscGU9''@;'; put 'put ''LTEseWU9LTE7KFIubWF0Y2god2UpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihZZSxldCl7dmFyIHV0PXBhcnNlSW50KGtbZXQrMV0sMTApO3N3aXRjaChZZS50b0xvd2VyQ2FzZSgpLmNoYXJBdCgwKSl7Y2FzZSJ5IjpHPXV0O2JyZWFrO2Nhc2UiZCI6YWU9dXQ7YnJlYWs7Y2FzZSJoIjpnZT11''@;'; put 'put ''dDticmVhaztjYXNlInMiOnllPXV0O2JyZWFrO2Nhc2UibSI6Z2U+PTA/cGU9dXQ6UT11dH19KSx5ZT49MCYmLTE9PXBlJiZRPj0wJiYocGU9USxRPS0xKTt2YXIgUGU9KCIiKyhHPj0wP0c6KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpKSkuc2xpY2UoLTQpKyItIisoIjAwIisoUT49MT9ROjEp''@;'; put 'put ''KS5zbGljZSgtMikrIi0iKygiMDAiKyhhZT49MT9hZToxKSkuc2xpY2UoLTIpOzc9PVBlLmxlbmd0aCYmKFBlPSIwIitQZSksOD09UGUubGVuZ3RoJiYoUGU9IjIwIitQZSk7dmFyIE5lPSgiMDAiKyhnZT49MD9nZTowKSkuc2xpY2UoLTIpKyI6IisoIjAwIisocGU+PTA/cGU6MCkpLnNsaWNl''@;'; put 'put ''KC0yKSsiOiIrKCIwMCIrKHllPj0wP3llOjApKS5zbGljZSgtMik7cmV0dXJuLTE9PWdlJiYtMT09cGUmJi0xPT15ZT9QZTotMT09RyYmLTE9PVEmJi0xPT1hZT9OZTpQZSsiVCIrTmV9KDAsZXQuZGF0ZU5GLHVyLm1hdGNoKEpuKXx8W10pLHRyPTEpLGV0LmNlbGxEYXRlcz8oZ3IudD0iZCIs''@;'; put 'put ''Z3Iudj1IZSh1cix0cikpOihnci50PSJuIixnci52PVFlKEhlKHVyLHRyKSkpLCExIT09ZXQuY2VsbFRleHQmJihnci53PUEuZm9ybWF0KGdyLnosZ3IudiBpbnN0YW5jZW9mIERhdGU/UWUoZ3Iudik6Z3IudikpLGV0LmNlbGxORnx8ZGVsZXRlIGdyLnp9ZWxzZSBnci50PSJzIixnci52PXVy''@;'; put 'put ''O2Vsc2UgZ3IudD0ibiIsITEhPT1ldC5jZWxsVGV4dCYmKGdyLnc9dXIpLGdyLnY9a3Q7aWYoInoiPT1nci50fHwoZXQuZGVuc2U/KEV0W2J0XXx8KEV0W2J0XT1bXSksRXRbYnRdW0J0XT1ncik6RXRbWGkoe2M6QnQscjpidH0pXT1nciksc3I9TmUuY2hhckNvZGVBdChPdD1LdCsxKSxvdC5l''@;'; put 'put ''LmM8QnQmJihvdC5lLmM9QnQpLG90LmUucjxidCYmKG90LmUucj1idCksU249PVRuKSsrQnQ7ZWxzZSBpZihCdD0wLCsrYnQsZXQuc2hlZXRSb3dzJiZldC5zaGVldFJvd3M8PWJ0KXJldHVybiEwfWU6Zm9yKDtLdDxOZS5sZW5ndGg7KytLdClzd2l0Y2goU249TmUuY2hhckNvZGVBdChLdCkp''@;'; put 'put ''e2Nhc2UgMzQ6MzQ9PT1zciYmKGlyPSFpcik7YnJlYWs7Y2FzZSBUbjpjYXNlIDEwOmNhc2UgMTM6aWYoIWlyJiZWbigpKWJyZWFrIGV9cmV0dXJuIEt0LU90PjAmJlZuKCksRXRbIiFyZWYiXT1vbyhvdCksRXR9KE5lLFllKTpkNChmdW5jdGlvbiBSKE5lLFllKXt2YXIgZXQ9WWV8fHt9LHV0''@;'; put 'put ''PVtdO2lmKCFOZXx8MD09PU5lLmxlbmd0aClyZXR1cm4gdXQ7Zm9yKHZhciBFdD1OZS5zcGxpdCgvW1xyXG5dLyksb3Q9RXQubGVuZ3RoLTE7b3Q+PTAmJjA9PT1FdFtvdF0ubGVuZ3RoOyktLW90O2Zvcih2YXIgYnQ9MTAsQnQ9MCxrdD0wO2t0PD1vdDsrK2t0KS0xPT0oQnQ9RXRba3RdLmlu''@;'; put 'put ''ZGV4T2YoIiAiKSk/QnQ9RXRba3RdLmxlbmd0aDpCdCsrLGJ0PU1hdGgubWF4KGJ0LEJ0KTtmb3Ioa3Q9MDtrdDw9b3Q7KytrdCl7dXRba3RdPVtdO3ZhciBPdD0wO2ZvcihTKEV0W2t0XS5zbGljZSgwLGJ0KS50cmltKCksdXQsa3QsT3QsZXQpLE90PTE7T3Q8PShFdFtrdF0ubGVuZ3RoLWJ0''@;'; put 'put ''KS8xMCsxOysrT3QpUyhFdFtrdF0uc2xpY2UoYnQrMTAqKE90LTEpLGJ0KzEwKk90KS50cmltKCksdXQsa3QsT3QsZXQpfXJldHVybiBldC5zaGVldFJvd3MmJih1dD11dC5zbGljZSgwLGV0LnNoZWV0Um93cykpLHV0fShOZSxZZSksWWUpfWZ1bmN0aW9uIHBlKE5lLFllKXt2YXIgZXQ9IiIs''@;'; put 'put ''dXQ9InN0cmluZyI9PVllLnR5cGU/WzAsMCwwLDBdOkpTKE5lLFllKTtzd2l0Y2goWWUudHlwZSl7Y2FzZSJiYXNlNjQiOmV0PV9lLmRlY29kZShOZSk7YnJlYWs7Y2FzZSJiaW5hcnkiOmNhc2Uic3RyaW5nIjpldD1OZTticmVhaztjYXNlImJ1ZmZlciI6ZXQ9NjUwMDE9PVllLmNvZGVwYWdl''@;'; put 'put ''P05lLnRvU3RyaW5nKCJ1dGY4Iik6WWUuY29kZXBhZ2UmJnR5cGVvZiBjcHRhYmxlPCJ1Ij9jcHRhYmxlLnV0aWxzLmRlY29kZShZZS5jb2RlcGFnZSxOZSk6TmUudG9TdHJpbmcoImJpbmFyeSIpO2JyZWFrO2Nhc2UiYXJyYXkiOmV0PWR0KE5lKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBF''@;'; put 'put ''cnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitZZS50eXBlKX1yZXR1cm4gMjM5PT11dFswXSYmMTg3PT11dFsxXSYmMTkxPT11dFsyXT9ldD1nYShldC5zbGljZSgzKSk6ImJpbmFyeSI9PVllLnR5cGUmJnR5cGVvZiBjcHRhYmxlPCJ1IiYmWWUuY29kZXBhZ2UmJihldD1jcHRhYmxlLnV0aWxz''@;'; put 'put ''LmRlY29kZShZZS5jb2RlcGFnZSxjcHRhYmxlLnV0aWxzLmVuY29kZSgyODU5MSxldCkpKSwic29jaWFsY2FsYzp2ZXJzaW9uOiI9PWV0LnNsaWNlKDAsMTkpP0c2LnRvX3NoZWV0KCJzdHJpbmciPT1ZZS50eXBlP2V0OmdhKGV0KSxZZSk6Z2UoZXQsWWUpfXJldHVybnt0b193b3JrYm9vazpm''@;'; put 'put ''dW5jdGlvbiB5ZShOZSxZZSl7cmV0dXJuIEpkKHBlKE5lLFllKSxZZSl9LHRvX3NoZWV0OnBlLGZyb21fc2hlZXQ6ZnVuY3Rpb24gUGUoTmUpe2Zvcih2YXIgdXQsWWU9W10sZXQ9YWEoTmVbIiFyZWYiXSksRXQ9QXJyYXkuaXNBcnJheShOZSksb3Q9ZXQucy5yO290PD1ldC5lLnI7KytvdCl7''@;'; put 'put ''Zm9yKHZhciBidD1bXSxCdD1ldC5zLmM7QnQ8PWV0LmUuYzsrK0J0KXt2YXIga3Q9WGkoe3I6b3QsYzpCdH0pO2lmKCh1dD1FdD8oTmVbb3RdfHxbXSlbQnRdOk5lW2t0XSkmJm51bGwhPXV0LnYpe2Zvcih2YXIgT3Q9KHV0Lnd8fChibCh1dCksdXQudyl8fCIiKS5zbGljZSgwLDEwKTtPdC5s''@;'; put 'put ''ZW5ndGg8MTA7KU90Kz0iICI7YnQucHVzaChPdCsoMD09PUJ0PyIgIjoiIikpfWVsc2UgYnQucHVzaCgiICAgICAgICAgICIpfVllLnB1c2goYnQuam9pbigiIikpfXJldHVybiBZZS5qb2luKCJcbiIpfX19KCkseHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBTKE5uLFZyLHZyKXtpZihObil7dm4o''@;'; put 'put ''Tm4sTm4ubHx8MCk7Zm9yKHZhciBIbj12ci5FbnVtfHxMaTtObi5sPE5uLmxlbmd0aDspe3ZhciBCcj1Obi5yZWFkX3NoaWZ0KDIpLFdpPUhuW0JyXXx8SG5bNjU1MzVdLGJpPU5uLnJlYWRfc2hpZnQoMiksd289Tm4ubCtiaSxzYT1XaS5mJiZXaS5mKE5uLGJpLHZyKTtpZihObi5sPXdvLFZy''@;'; put 'put ''KHNhLFdpLEJyKSlyZXR1cm59fX1mdW5jdGlvbiBrKE5uLFZyKXtpZighTm4pcmV0dXJuIE5uO3ZhciB2cj1Wcnx8e307bnVsbCE9bGUmJm51bGw9PXZyLmRlbnNlJiYodnIuZGVuc2U9bGUpO3ZhciBIbj12ci5kZW5zZT9bXTp7fSxCcj0iU2hlZXQxIixXaT0wLGJpPXt9LHdvPVtCcl0sc2E9''@;'; put 'put ''W10sYW89e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fSxSYT12ci5zaGVldFJvd3N8fDA7aWYoMj09Tm5bMl0pdnIuRW51bT1MaSxTKE5uLGZ1bmN0aW9uKGppLElzLEZuKXtzd2l0Y2goRm4pe2Nhc2UgMDp2ci52ZXJzPWppLGppPj00MDk2JiYodnIucXBybz0hMCk7YnJlYWs7Y2FzZSA2OmFv''@;'; put 'put ''PWppO2JyZWFrO2Nhc2UgMTU6Y2FzZSA1MTp2ci5xcHJvfHwoamlbMV0udj1qaVsxXS52LnNsaWNlKDEpKTtjYXNlIDEzOmNhc2UgMTQ6Y2FzZSAxNjoxND09Rm4mJiEoMTEyJn5qaVsyXSkmJigxNSZqaVsyXSk+MSYmKDE1JmppWzJdKTwxNSYmKGppWzFdLno9dnIuZGF0ZU5GfHxBLl90YWJs''@;'; put 'put ''ZVsxNF0sdnIuY2VsbERhdGVzJiYoamlbMV0udD0iZCIsamlbMV0udj1kbihqaVsxXS52KSkpO3ZhciBaYT12ci5kZW5zZT8oSG5bamlbMF0ucl18fFtdKVtqaVswXS5jXTpIbltYaShqaVswXSldO2lmKFphKXtaYS50PWppWzFdLnQsWmEudj1qaVsxXS52LG51bGwhPWppWzFdLnomJihaYS56''@;'; put 'put ''PWppWzFdLnopLG51bGwhPWppWzFdLmYmJihaYS5mPWppWzFdLmYpO2JyZWFrfXZyLmRlbnNlPyhIbltqaVswXS5yXXx8KEhuW2ppWzBdLnJdPVtdKSxIbltqaVswXS5yXVtqaVswXS5jXT1qaVsxXSk6SG5bWGkoamlbMF0pXT1qaVsxXX19LHZyKTtlbHNle2lmKDI2IT1OblsyXSYmMTQhPU5u''@;'; put 'put ''WzJdKXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIExPVFVTIEJPRiAiK05uWzJdKTt2ci5FbnVtPURyLDE0PT1OblsyXSYmKHZyLnFwcm89ITAsTm4ubD0wKSxTKE5uLGZ1bmN0aW9uKGppLElzLEZuKXtzd2l0Y2goRm4pe2Nhc2UgMjI6amlbMV0udj1qaVsxXS52LnNsaWNlKDEpO2Nh''@;'; put 'put ''c2UgMjM6Y2FzZSAyNDpjYXNlIDI1OmNhc2UgMzc6Y2FzZSAzOTpjYXNlIDQwOmlmKGppWzNdPldpJiYoSG5bIiFyZWYiXT1vbyhhbyksYmlbQnJdPUhuLEhuPXZyLmRlbnNlP1tdOnt9LGFvPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX0sd28ucHVzaChCcj0iU2hlZXQiKygoV2k9amlbM10p''@;'; put 'put ''KzEpKSksUmE+MCYmamlbMF0ucj49UmEpYnJlYWs7dnIuZGVuc2U/KEhuW2ppWzBdLnJdfHwoSG5bamlbMF0ucl09W10pLEhuW2ppWzBdLnJdW2ppWzBdLmNdPWppWzFdKTpIbltYaShqaVswXSldPWppWzFdLGFvLmUuYzxqaVswXS5jJiYoYW8uZS5jPWppWzBdLmMpLGFvLmUucjxqaVswXS5y''@;'; put 'put ''JiYoYW8uZS5yPWppWzBdLnIpO2JyZWFrO2Nhc2UgMjc6amlbMTRlM10mJihzYVtqaVsxNGUzXVswXV09amlbMTRlM11bMV0pfX0sdnIpfWlmKEhuWyIhcmVmIl09b28oYW8pLGJpW0JyXT1Ibiwhc2EubGVuZ3RoKXJldHVybntTaGVldE5hbWVzOndvLFNoZWV0czpiaX07Zm9yKHZhciBQbz17''@;'; put 'put ''fSxoYT1bXSxKbz0wO0pvPHNhLmxlbmd0aDsrK0pvKWJpW3dvW0pvXV0mJihoYS5wdXNoKHNhW0pvXSksUG9bc2FbSm9dXT1iaVt3b1tKb11dKTtyZXR1cm57U2hlZXROYW1lczpoYSxTaGVldHM6UG99fWZ1bmN0aW9uIFBlKE5uLFZyLHZyKXt2YXIgSG49W3tjOjAscjowfSx7dDoibiIsdjow''@;'; put 'put ''fSwwXTtyZXR1cm4gdnIucXBybyYmMjA3NjghPXZyLnZlcnM/KEhuWzBdLmM9Tm4ucmVhZF9zaGlmdCgxKSxObi5sKyssSG5bMF0ucj1Obi5yZWFkX3NoaWZ0KDIpLE5uLmwrPTIpOihIblsyXT1Obi5yZWFkX3NoaWZ0KDEpLEhuWzBdLmM9Tm4ucmVhZF9zaGlmdCgyKSxIblswXS5yPU5uLnJl''@;'; put 'put ''YWRfc2hpZnQoMikpLEhufWZ1bmN0aW9uIE5lKE5uLFZyLHZyKXt2YXIgSG49Tm4ubCtWcixCcj1QZShObiwwLHZyKTtpZihCclsxXS50PSJzIiwyMDc2OD09dnIudmVycyl7Tm4ubCsrO3ZhciBXaT1Obi5yZWFkX3NoaWZ0KDEpO3JldHVybiBCclsxXS52PU5uLnJlYWRfc2hpZnQoV2ksInV0''@;'; put 'put ''ZjgiKSxCcn1yZXR1cm4gdnIucXBybyYmTm4ubCsrLEJyWzFdLnY9Tm4ucmVhZF9zaGlmdChIbi1Obi5sLCJjc3RyIiksQnJ9ZnVuY3Rpb24gWWUoTm4sVnIsdnIpe3ZhciBIbj1ibig3K3ZyLmxlbmd0aCk7SG4ud3JpdGVfc2hpZnQoMSwyNTUpLEhuLndyaXRlX3NoaWZ0KDIsVnIpLEhuLndy''@;'; put 'put ''aXRlX3NoaWZ0KDIsTm4pLEhuLndyaXRlX3NoaWZ0KDEsMzkpO2Zvcih2YXIgQnI9MDtCcjxIbi5sZW5ndGg7KytCcil7dmFyIFdpPXZyLmNoYXJDb2RlQXQoQnIpO0huLndyaXRlX3NoaWZ0KDEsV2k+PTEyOD85NTpXaSl9cmV0dXJuIEhuLndyaXRlX3NoaWZ0KDEsMCksSG59ZnVuY3Rpb24g''@;'; put 'put ''dXQoTm4sVnIsdnIpe3ZhciBIbj1ibig3KTtyZXR1cm4gSG4ud3JpdGVfc2hpZnQoMSwyNTUpLEhuLndyaXRlX3NoaWZ0KDIsVnIpLEhuLndyaXRlX3NoaWZ0KDIsTm4pLEhuLndyaXRlX3NoaWZ0KDIsdnIsImkiKSxIbn1mdW5jdGlvbiBvdChObixWcix2cil7dmFyIEhuPWJuKDEzKTtyZXR1''@;'; put 'put ''cm4gSG4ud3JpdGVfc2hpZnQoMSwyNTUpLEhuLndyaXRlX3NoaWZ0KDIsVnIpLEhuLndyaXRlX3NoaWZ0KDIsTm4pLEhuLndyaXRlX3NoaWZ0KDgsdnIsImYiKSxIbn1mdW5jdGlvbiBCdChObixWcix2cil7dmFyIEhuPTMyNzY4JlZyO3JldHVybiBWcj0oSG4/Tm46MCkrKChWciY9LTMyNzY5''@;'; put 'put ''KT49ODE5Mj9Wci0xNjM4NDpWciksKEhuPyIiOiIkIikrKHZyP1RvKFZyKTp6aShWcikpfXZhciBPdD17NTE6WyJGQUxTRSIsMF0sNTI6WyJUUlVFIiwwXSw3MDpbIkxFTiIsMV0sODA6WyJTVU0iLDY5XSw4MTpbIkFWRVJBR0VBIiw2OV0sODI6WyJDT1VOVEEiLDY5XSw4MzpbIk1JTkEiLDY5''@;'; put 'put ''XSw4NDpbIk1BWEEiLDY5XSwxMTE6WyJUIiwxXX0sS3Q9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIrIiwiLSIsIioiLCIvIiwiXiIsIj0iLCI8PiIsIjw9IiwiPj0iLCI8IiwiPiIsIiIsIiIsIiIsIiIsIiYiLCIiLCIiLCIiLCIiLCIiLCIiLCIiXTtmdW5jdGlvbiBpcihObil7dmFy''@;'; put 'put ''IFZyPVt7YzowLHI6MH0se3Q6Im4iLHY6MH0sMF07cmV0dXJuIFZyWzBdLnI9Tm4ucmVhZF9zaGlmdCgyKSxWclszXT1ObltObi5sKytdLFZyWzBdLmM9Tm5bTm4ubCsrXSxWcn1mdW5jdGlvbiBzcihObixWcix2cixIbil7dmFyIEJyPWJuKDYrSG4ubGVuZ3RoKTtCci53cml0ZV9zaGlmdCgy''@;'; put 'put ''LE5uKSxCci53cml0ZV9zaGlmdCgxLHZyKSxCci53cml0ZV9zaGlmdCgxLFZyKSxCci53cml0ZV9zaGlmdCgxLDM5KTtmb3IodmFyIFdpPTA7V2k8SG4ubGVuZ3RoOysrV2kpe3ZhciBiaT1Ibi5jaGFyQ29kZUF0KFdpKTtCci53cml0ZV9zaGlmdCgxLGJpPj0xMjg/OTU6YmkpfXJldHVybiBC''@;'; put 'put ''ci53cml0ZV9zaGlmdCgxLDApLEJyfWZ1bmN0aW9uIFZuKE5uLFZyKXt2YXIgdnI9aXIoTm4pLEhuPU5uLnJlYWRfc2hpZnQoNCksQnI9Tm4ucmVhZF9zaGlmdCg0KSxXaT1Obi5yZWFkX3NoaWZ0KDIpO2lmKDY1NTM1PT1XaSlyZXR1cm4gMD09PUhuJiYzMjIxMjI1NDcyPT09QnI/KHZyWzFd''@;'; put 'put ''LnQ9ImUiLHZyWzFdLnY9MTUpOjA9PT1IbiYmMzQ4OTY2MDkyOD09PUJyPyh2clsxXS50PSJlIix2clsxXS52PTQyKTp2clsxXS52PTAsdnI7dmFyIGJpPTMyNzY4JldpO3JldHVybiBXaT0oMzI3NjcmV2kpLTE2NDQ2LHZyWzFdLnY9KDEtMipiaSkqKEJyKk1hdGgucG93KDIsV2krMzIpK0hu''@;'; put 'put ''Kk1hdGgucG93KDIsV2kpKSx2cn1mdW5jdGlvbiB1cihObixWcix2cixIbil7dmFyIEJyPWJuKDE0KTtpZihCci53cml0ZV9zaGlmdCgyLE5uKSxCci53cml0ZV9zaGlmdCgxLHZyKSxCci53cml0ZV9zaGlmdCgxLFZyKSwwPT1IbilyZXR1cm4gQnIud3JpdGVfc2hpZnQoNCwwKSxCci53cml0''@;'; put 'put ''ZV9zaGlmdCg0LDApLEJyLndyaXRlX3NoaWZ0KDIsNjU1MzUpLEJyO3ZhciBXaT0wLGJpPTAsc2E9MDtyZXR1cm4gSG48MCYmKFdpPTEsSG49LUhuKSxiaT0wfE1hdGgubG9nMihIbiksMjE0NzQ4MzY0OCYoc2E9KEhuLz1NYXRoLnBvdygyLGJpLTMxKSk+Pj4wKXx8KCsrYmksc2E9KEhuLz0y''@;'; put 'put ''KT4+PjApLEhuLT1zYSxzYXw9MjE0NzQ4MzY0OCxzYT4+Pj0wLEhuKj1NYXRoLnBvdygyLDMyKSxCci53cml0ZV9zaGlmdCg0LEhuPj4+MCksQnIud3JpdGVfc2hpZnQoNCxzYSksQnIud3JpdGVfc2hpZnQoMixiaSs9MTYzODMrKFdpPzMyNzY4OjApKSxCcn1mdW5jdGlvbiBDaShObixWcil7''@;'; put 'put ''dmFyIHZyPWlyKE5uKSxIbj1Obi5yZWFkX3NoaWZ0KDgsImYiKTtyZXR1cm4gdnJbMV0udj1Ibix2cn1mdW5jdGlvbiB1byhObixWcil7dmFyIHZyPWJuKDUrTm4ubGVuZ3RoKTt2ci53cml0ZV9zaGlmdCgyLDE0ZTMpLHZyLndyaXRlX3NoaWZ0KDIsVnIpO2Zvcih2YXIgSG49MDtIbjxObi5s''@;'; put 'put ''ZW5ndGg7KytIbil7dmFyIEJyPU5uLmNoYXJDb2RlQXQoSG4pO3ZyW3ZyLmwrK109QnI+MTI3Pzk1OkJyfXJldHVybiB2clt2ci5sKytdPTAsdnJ9dmFyIExpPXswOntuOiJCT0YiLGY6eGN9LDE6e246IkVPRiJ9LDI6e246IkNBTENNT0RFIn0sMzp7bjoiQ0FMQ09SREVSIn0sNDp7bjoiU1BM''@;'; put 'put ''SVQifSw1OntuOiJTWU5DIn0sNjp7bjoiUkFOR0UiLGY6ZnVuY3Rpb24gcGUoTm4pe3ZhciBWcj17czp7YzowLHI6MH0sZTp7YzowLHI6MH19O3JldHVybiBWci5zLmM9Tm4ucmVhZF9zaGlmdCgyKSxWci5zLnI9Tm4ucmVhZF9zaGlmdCgyKSxWci5lLmM9Tm4ucmVhZF9zaGlmdCgyKSxWci5l''@;'; put 'put ''LnI9Tm4ucmVhZF9zaGlmdCgyKSw2NTUzNT09VnIucy5jJiYoVnIucy5jPVZyLmUuYz1Wci5zLnI9VnIuZS5yPTApLFZyfX0sNzp7bjoiV0lORE9XMSJ9LDg6e246IkNPTFcxIn0sOTp7bjoiV0lOVFdPIn0sMTA6e246IkNPTFcyIn0sMTE6e246Ik5BTUUifSwxMjp7bjoiQkxBTksifSwxMzp7''@;'; put 'put ''bjoiSU5URUdFUiIsZjpmdW5jdGlvbiBldChObixWcix2cil7dmFyIEhuPVBlKE5uLDAsdnIpO3JldHVybiBIblsxXS52PU5uLnJlYWRfc2hpZnQoMiwiaSIpLEhufX0sMTQ6e246Ik5VTUJFUiIsZjpmdW5jdGlvbiBFdChObixWcix2cil7dmFyIEhuPVBlKE5uLDAsdnIpO3JldHVybiBIblsx''@;'; put 'put ''XS52PU5uLnJlYWRfc2hpZnQoOCwiZiIpLEhufX0sMTU6e246IkxBQkVMIixmOk5lfSwxNjp7bjoiRk9STVVMQSIsZjpmdW5jdGlvbiBidChObixWcix2cil7dmFyIEhuPU5uLmwrVnIsQnI9UGUoTm4sMCx2cik7aWYoQnJbMV0udj1Obi5yZWFkX3NoaWZ0KDgsImYiKSx2ci5xcHJvKU5uLmw9''@;'; put 'put ''SG47ZWxzZXt2YXIgV2k9Tm4ucmVhZF9zaGlmdCgyKTsoZnVuY3Rpb24gVG4oTm4sVnIpe3ZuKE5uLDApO2Zvcih2YXIgdnI9W10sSG49MCxCcj0iIixXaT0iIjtObi5sPE5uLmxlbmd0aDspe3ZhciBiaT1ObltObi5sKytdO3N3aXRjaChiaSl7Y2FzZSAwOnZyLnB1c2goTm4ucmVhZF9zaGlm''@;'; put 'put ''dCg4LCJmIikpO2JyZWFrO2Nhc2UgMTpXaT1CdChWclswXS5jLE5uLnJlYWRfc2hpZnQoMiksITApLEJyPUJ0KFZyWzBdLnIsTm4ucmVhZF9zaGlmdCgyKSwhMSksdnIucHVzaChXaStCcik7YnJlYWs7Y2FzZSAyOnZhciB3bz1CdChWclswXS5jLE5uLnJlYWRfc2hpZnQoMiksITApLHNhPUJ0''@;'; put 'put ''KFZyWzBdLnIsTm4ucmVhZF9zaGlmdCgyKSwhMSk7V2k9QnQoVnJbMF0uYyxObi5yZWFkX3NoaWZ0KDIpLCEwKSxCcj1CdChWclswXS5yLE5uLnJlYWRfc2hpZnQoMiksITEpLHZyLnB1c2god28rc2ErIjoiK1dpK0JyKTticmVhaztjYXNlIDM6aWYoTm4ubDxObi5sZW5ndGgpcmV0dXJuIHZv''@;'; put 'put ''aWQgY29uc29sZS5lcnJvcigiV0sxIHByZW1hdHVyZSBmb3JtdWxhIGVuZCIpO2JyZWFrO2Nhc2UgNDp2ci5wdXNoKCIoIit2ci5wb3AoKSsiKSIpO2JyZWFrO2Nhc2UgNTp2ci5wdXNoKE5uLnJlYWRfc2hpZnQoMikpO2JyZWFrO2Nhc2UgNjpmb3IodmFyIGFvPSIiO2JpPU5uW05uLmwrK107''@;'; put 'put ''KWFvKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGJpKTt2ci5wdXNoKCciJythby5yZXBsYWNlKC8iL2csJyIiJykrJyInKTticmVhaztjYXNlIDg6dnIucHVzaCgiLSIrdnIucG9wKCkpO2JyZWFrO2Nhc2UgMjM6dnIucHVzaCgiKyIrdnIucG9wKCkpO2JyZWFrO2Nhc2UgMjI6dnIucHVzaCgiTk9U''@;'; put 'put ''KCIrdnIucG9wKCkrIikiKTticmVhaztjYXNlIDIwOmNhc2UgMjE6dmFyIFJhPXZyLnBvcCgpLFBvPXZyLnBvcCgpO3ZyLnB1c2goWyJBTkQiLCJPUiJdW2JpLTIwXSsiKCIrUG8rIiwiK1JhKyIpIik7YnJlYWs7ZGVmYXVsdDppZihiaTwzMiYmS3RbYmldKVJhPXZyLnBvcCgpLFBvPXZyLnBv''@;'; put 'put ''cCgpLHZyLnB1c2goUG8rS3RbYmldK1JhKTtlbHNle2lmKCFPdFtiaV0pcmV0dXJuIGJpPD03P2NvbnNvbGUuZXJyb3IoIldLMSBpbnZhbGlkIG9wY29kZSAiK2JpLnRvU3RyaW5nKDE2KSk6Ymk8PTI0P2NvbnNvbGUuZXJyb3IoIldLMSB1bnN1cHBvcnRlZCBvcCAiK2JpLnRvU3RyaW5nKDE2''@;'; put 'put ''KSk6Ymk8PTMwP2NvbnNvbGUuZXJyb3IoIldLMSBpbnZhbGlkIG9wY29kZSAiK2JpLnRvU3RyaW5nKDE2KSk6Ymk8PTExNT9jb25zb2xlLmVycm9yKCJXSzEgdW5zdXBwb3J0ZWQgZnVuY3Rpb24gb3Bjb2RlICIrYmkudG9TdHJpbmcoMTYpKTpjb25zb2xlLmVycm9yKCJXSzEgdW5yZWNvZ25p''@;'; put 'put ''emVkIG9wY29kZSAiK2JpLnRvU3RyaW5nKDE2KSk7aWYoNjk9PShIbj1PdFtiaV1bMV0pJiYoSG49Tm5bTm4ubCsrXSksSG4+dnIubGVuZ3RoKXJldHVybiB2b2lkIGNvbnNvbGUuZXJyb3IoIldLMSBiYWQgZm9ybXVsYSBwYXJzZSAweCIrYmkudG9TdHJpbmcoMTYpKyI6fCIrdnIuam9pbigi''@;'; put 'put ''fCIpKyJ8Iik7dmFyIGhhPXZyLnNsaWNlKC1Ibik7dnIubGVuZ3RoLT1Ibix2ci5wdXNoKE90W2JpXVswXSsiKCIraGEuam9pbigiLCIpKyIpIil9fX0xPT12ci5sZW5ndGg/VnJbMV0uZj0iIit2clswXTpjb25zb2xlLmVycm9yKCJXSzEgYmFkIGZvcm11bGEgcGFyc2UgfCIrdnIuam9pbigi''@;'; put 'put ''fCIpKyJ8Iil9KShObi5zbGljZShObi5sLE5uLmwrV2kpLEJyKSxObi5sKz1XaX1yZXR1cm4gQnJ9fSwyNDp7bjoiVEFCTEUifSwyNTp7bjoiT1JBTkdFIn0sMjY6e246IlBSQU5HRSJ9LDI3OntuOiJTUkFOR0UifSwyODp7bjoiRlJBTkdFIn0sMjk6e246IktSQU5HRTEifSwzMjp7bjoiSFJB''@;'; put 'put ''TkdFIn0sMzU6e246IktSQU5HRTIifSwzNjp7bjoiUFJPVEVDIn0sMzc6e246IkZPT1RFUiJ9LDM4OntuOiJIRUFERVIifSwzOTp7bjoiU0VUVVAifSw0MDp7bjoiTUFSR0lOUyJ9LDQxOntuOiJMQUJFTEZNVCJ9LDQyOntuOiJUSVRMRVMifSw0Mzp7bjoiU0hFRVRKUyJ9LDQ1OntuOiJHUkFQ''@;'; put 'put ''SCJ9LDQ2OntuOiJOR1JBUEgifSw0Nzp7bjoiQ0FMQ0NPVU5UIn0sNDg6e246IlVORk9STUFUVEVEIn0sNDk6e246IkNVUlNPUlcxMiJ9LDUwOntuOiJXSU5ET1cifSw1MTp7bjoiU1RSSU5HIixmOk5lfSw1NTp7bjoiUEFTU1dPUkQifSw1Njp7bjoiTE9DS0VEIn0sNjA6e246IlFVRVJZIn0s''@;'; put 'put ''NjE6e246IlFVRVJZTkFNRSJ9LDYyOntuOiJQUklOVCJ9LDYzOntuOiJQUklOVE5BTUUifSw2NDp7bjoiR1JBUEgyIn0sNjU6e246IkdSQVBITkFNRSJ9LDY2OntuOiJaT09NIn0sNjc6e246IlNZTVNQTElUIn0sNjg6e246Ik5TUk9XUyJ9LDY5OntuOiJOU0NPTFMifSw3MDp7bjoiUlVMRVIi''@;'; put 'put ''fSw3MTp7bjoiTk5BTUUifSw3Mjp7bjoiQUNPTU0ifSw3Mzp7bjoiQU1BQ1JPIn0sNzQ6e246IlBBUlNFIn0sMTAyOntuOiJQUkFOR0VTPz8ifSwxMDM6e246IlJSQU5HRVM/PyJ9LDEwNDp7bjoiRk5BTUU/PyJ9LDEwNTp7bjoiTVJBTkdFUz8/In0sNjU1MzU6e246IiJ9fSxEcj17MDp7bjoi''@;'; put 'put ''Qk9GIn0sMTp7bjoiRU9GIn0sMjp7bjoiUEFTU1dPUkQifSwzOntuOiJDQUxDU0VUIn0sNDp7bjoiV0lORE9XU0VUIn0sNTp7bjoiU0hFRVRDRUxMUFRSIn0sNjp7bjoiU0hFRVRMQVlPVVQifSw3OntuOiJDT0xVTU5XSURUSCJ9LDg6e246IkhJRERFTkNPTFVNTiJ9LDk6e246IlVTRVJSQU5H''@;'; put 'put ''RSJ9LDEwOntuOiJTWVNURU1SQU5HRSJ9LDExOntuOiJaRVJPRk9SQ0UifSwxMjp7bjoiU09SVEtFWURJUiJ9LDEzOntuOiJGSUxFU0VBTCJ9LDE0OntuOiJEQVRBRklMTE5VTVMifSwxNTp7bjoiUFJJTlRNQUlOIn0sMTY6e246IlBSSU5UU1RSSU5HIn0sMTc6e246IkdSQVBITUFJTiJ9LDE4''@;'; put 'put ''OntuOiJHUkFQSFNUUklORyJ9LDE5OntuOiI/PyJ9LDIwOntuOiJFUlJDRUxMIn0sMjE6e246Ik5BQ0VMTCJ9LDIyOntuOiJMQUJFTDE2IixmOmZ1bmN0aW9uIFNuKE5uLFZyKXt2YXIgdnI9aXIoTm4pO3JldHVybiB2clsxXS50PSJzIix2clsxXS52PU5uLnJlYWRfc2hpZnQoVnItNCwiY3N0''@;'; put 'put ''ciIpLHZyfX0sMjM6e246Ik5VTUJFUjE3IixmOlZufSwyNDp7bjoiTlVNQkVSMTgiLGY6ZnVuY3Rpb24gSm4oTm4sVnIpe3ZhciB2cj1pcihObik7dnJbMV0udj1Obi5yZWFkX3NoaWZ0KDIpO3ZhciBIbj12clsxXS52Pj4xO2lmKDEmdnJbMV0udilzd2l0Y2goNyZIbil7Y2FzZSAwOkhuPTVl''@;'; put 'put ''MyooSG4+PjMpO2JyZWFrO2Nhc2UgMTpIbj01MDAqKEhuPj4zKTticmVhaztjYXNlIDI6SG49KEhuPj4zKS8yMDticmVhaztjYXNlIDM6SG49KEhuPj4zKS8yMDA7YnJlYWs7Y2FzZSA0OkhuPShIbj4+MykvMmUzO2JyZWFrO2Nhc2UgNTpIbj0oSG4+PjMpLzJlNDticmVhaztjYXNlIDY6SG49''@;'; put 'put ''KEhuPj4zKS8xNjticmVhaztjYXNlIDc6SG49KEhuPj4zKS82NH1yZXR1cm4gdnJbMV0udj1Ibix2cn19LDI1OntuOiJGT1JNVUxBMTkiLGY6ZnVuY3Rpb24gZ3IoTm4sVnIpe3ZhciB2cj1WbihObik7cmV0dXJuIE5uLmwrPVZyLTE0LHZyfX0sMjY6e246IkZPUk1VTEExQSJ9LDI3OntuOiJY''@;'; put 'put ''Rk9STUFUIixmOmZ1bmN0aW9uIGlvKE5uLFZyKXtmb3IodmFyIHZyPXt9LEhuPU5uLmwrVnI7Tm4ubDxIbjspe3ZhciBCcj1Obi5yZWFkX3NoaWZ0KDIpO2lmKDE0ZTM9PUJyKXtmb3IodnJbQnJdPVswLCIiXSx2cltCcl1bMF09Tm4ucmVhZF9zaGlmdCgyKTtObltObi5sXTspdnJbQnJdWzFd''@;'; put 'put ''Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKE5uW05uLmxdKSxObi5sKys7Tm4ubCsrfX1yZXR1cm4gdnJ9fSwyODp7bjoiRFRMQUJFTE1JU0MifSwyOTp7bjoiRFRMQUJFTENFTEwifSwzMDp7bjoiR1JBUEhXSU5ET1cifSwzMTp7bjoiQ1BBIn0sMzI6e246IkxQTEFVVE8ifSwzMzp7bjoiUVVFUlki''@;'; put 'put ''fSwzNDp7bjoiSElEREVOU0hFRVQifSwzNTp7bjoiPz8ifSwzNzp7bjoiTlVNQkVSMjUiLGY6ZnVuY3Rpb24gdHIoTm4sVnIpe3ZhciB2cj1pcihObiksSG49Tm4ucmVhZF9zaGlmdCg0KTtyZXR1cm4gdnJbMV0udj1Ibj4+Nix2cn19LDM4OntuOiI/PyJ9LDM5OntuOiJOVU1CRVIyNyIsZjpD''@;'; put 'put ''aX0sNDA6e246IkZPUk1VTEEyOCIsZjpmdW5jdGlvbiBGaShObixWcil7dmFyIHZyPUNpKE5uKTtyZXR1cm4gTm4ubCs9VnItMTAsdnJ9fSwxNDI6e246Ij8/In0sMTQ3OntuOiI/PyJ9LDE1MDp7bjoiPz8ifSwxNTE6e246Ij8/In0sMTUyOntuOiI/PyJ9LDE1Mzp7bjoiPz8ifSwxNTQ6e246''@;'; put 'put ''Ij8/In0sMTU1OntuOiI/PyJ9LDE1Njp7bjoiPz8ifSwxNjM6e246Ij8/In0sMTc0OntuOiI/PyJ9LDE3NTp7bjoiPz8ifSwxNzY6e246Ij8/In0sMTc3OntuOiI/PyJ9LDE4NDp7bjoiPz8ifSwxODU6e246Ij8/In0sMTg2OntuOiI/PyJ9LDE4Nzp7bjoiPz8ifSwxODg6e246Ij8/In0sMTk1''@;'; put 'put ''OntuOiI/PyJ9LDIwMTp7bjoiPz8ifSwyMDU6e246Ij8/In0sMjA2OntuOiI/PyJ9LDIwNzp7bjoiPz8ifSwyMDg6e246Ij8/In0sMjU2OntuOiI/PyJ9LDI1OTp7bjoiPz8ifSwyNjA6e246Ij8/In0sMjYxOntuOiI/PyJ9LDI2Mjp7bjoiPz8ifSwyNjM6e246Ij8/In0sMjY1OntuOiI/PyJ9''@;'; put 'put ''LDI2Njp7bjoiPz8ifSwyNjc6e246Ij8/In0sMjY4OntuOiI/PyJ9LDI3MDp7bjoiPz8ifSwyNzE6e246Ij8/In0sMzg0OntuOiI/PyJ9LDM4OTp7bjoiPz8ifSwzOTA6e246Ij8/In0sMzkzOntuOiI/PyJ9LDM5Njp7bjoiPz8ifSw1MTI6e246Ij8/In0sNTE0OntuOiI/PyJ9LDUxMzp7bjoi''@;'; put 'put ''Pz8ifSw1MTY6e246Ij8/In0sNTE3OntuOiI/PyJ9LDY0MDp7bjoiPz8ifSw2NDE6e246Ij8/In0sNjQyOntuOiI/PyJ9LDY0Mzp7bjoiPz8ifSw2NDQ6e246Ij8/In0sNjQ1OntuOiI/PyJ9LDY0Njp7bjoiPz8ifSw2NDc6e246Ij8/In0sNjQ4OntuOiI/PyJ9LDY1ODp7bjoiPz8ifSw2NTk6''@;'; put 'put ''e246Ij8/In0sNjYwOntuOiI/PyJ9LDY2MTp7bjoiPz8ifSw2NjI6e246Ij8/In0sNjY1OntuOiI/PyJ9LDY2Njp7bjoiPz8ifSw3Njg6e246Ij8/In0sNzcyOntuOiI/PyJ9LDE2MDA6e246Ij8/In0sMTYwMjp7bjoiPz8ifSwxNzkzOntuOiI/PyJ9LDE3OTQ6e246Ij8/In0sMTc5NTp7bjoi''@;'; put 'put ''Pz8ifSwxNzk2OntuOiI/PyJ9LDE5MjA6e246Ij8/In0sMjA0ODp7bjoiPz8ifSwyMDQ5OntuOiI/PyJ9LDIwNTI6e246Ij8/In0sMjY4ODp7bjoiPz8ifSwxMDk5ODp7bjoiPz8ifSwxMjg0OTp7bjoiPz8ifSwyODIzMzp7bjoiPz8ifSwyODQ4NDp7bjoiPz8ifSw2NTUzNTp7bjoiIn19O3Jl''@;'; put 'put ''dHVybntzaGVldF90b193azE6ZnVuY3Rpb24gRyhObixWcil7dmFyIHZyPVZyfHx7fTtpZigrdnIuY29kZXBhZ2U+PTAmJlUoK3ZyLmNvZGVwYWdlKSwic3RyaW5nIj09dnIudHlwZSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCB3cml0ZSBXSzEgdG8gSlMgc3RyaW5nIik7dmFyIEhuPW1pKCks''@;'; put 'put ''QnI9YWEoTm5bIiFyZWYiXSksV2k9QXJyYXkuaXNBcnJheShObiksYmk9W107JGkoSG4sMCxmdW5jdGlvbiBhZShObil7dmFyIFZyPWJuKDIpO3JldHVybiBWci53cml0ZV9zaGlmdCgyLE5uKSxWcn0oMTAzMCkpLCRpKEhuLDYsZnVuY3Rpb24geWUoTm4pe3ZhciBWcj1ibig4KTtyZXR1cm4g''@;'; put 'put ''VnIud3JpdGVfc2hpZnQoMixObi5zLmMpLFZyLndyaXRlX3NoaWZ0KDIsTm4ucy5yKSxWci53cml0ZV9zaGlmdCgyLE5uLmUuYyksVnIud3JpdGVfc2hpZnQoMixObi5lLnIpLFZyfShCcikpO2Zvcih2YXIgd289QnIucy5yO3dvPD1Cci5lLnI7Kyt3bylmb3IodmFyIHNhPXppKHdvKSxhbz1C''@;'; put 'put ''ci5zLmM7YW88PUJyLmUuYzsrK2FvKXt3bz09PUJyLnMuciYmKGJpW2FvXT1UbyhhbykpO3ZhciBQbz1XaT8oTm5bd29dfHxbXSlbYW9dOk5uW2JpW2FvXStzYV07UG8mJiJ6IiE9UG8udCYmKCJuIj09UG8udD8oMHxQby52KT09UG8udiYmUG8udj49LTMyNzY4JiZQby52PD0zMjc2Nz8kaShI''@;'; put 'put ''biwxMyx1dCh3byxhbyxQby52KSk6JGkoSG4sMTQsb3Qod28sYW8sUG8udikpOiRpKEhuLDE1LFllKHdvLGFvLGJsKFBvKS5zbGljZSgwLDIzOSkpKSl9cmV0dXJuICRpKEhuLDEpLEhuLmVuZCgpfSxib29rX3RvX3drMzpmdW5jdGlvbiBRKE5uLFZyKXt2YXIgdnI9VnJ8fHt9O2lmKCt2ci5j''@;'; put 'put ''b2RlcGFnZT49MCYmVSgrdnIuY29kZXBhZ2UpLCJzdHJpbmciPT12ci50eXBlKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHdyaXRlIFdLMyB0byBKUyBzdHJpbmciKTt2YXIgSG49bWkoKTskaShIbiwwLGZ1bmN0aW9uIGdlKE5uKXt2YXIgVnI9Ym4oMjYpO1ZyLndyaXRlX3NoaWZ0KDIsNDA5''@;'; put 'put ''NiksVnIud3JpdGVfc2hpZnQoMiw0KSxWci53cml0ZV9zaGlmdCg0LDApO2Zvcih2YXIgdnI9MCxIbj0wLEJyPTAsV2k9MDtXaTxObi5TaGVldE5hbWVzLmxlbmd0aDsrK1dpKXt2YXIgd289Tm4uU2hlZXRzW05uLlNoZWV0TmFtZXNbV2ldXTtpZih3byYmd29bIiFyZWYiXSl7KytCcjt2YXIg''@;'; put 'put ''c2E9U3Mod29bIiFyZWYiXSk7dnI8c2EuZS5yJiYodnI9c2EuZS5yKSxIbjxzYS5lLmMmJihIbj1zYS5lLmMpfX1yZXR1cm4gVnIud3JpdGVfc2hpZnQoMix2ciksVnIud3JpdGVfc2hpZnQoMSxCciksVnIud3JpdGVfc2hpZnQoMSxIbiksVnIud3JpdGVfc2hpZnQoMiwwKSxWci53cml0ZV9z''@;'; put 'put ''aGlmdCgyLDApLFZyLndyaXRlX3NoaWZ0KDEsMSksVnIud3JpdGVfc2hpZnQoMSwyKSxWci53cml0ZV9zaGlmdCg0LDApLFZyLndyaXRlX3NoaWZ0KDQsMCksVnJ9KE5uKSk7Zm9yKHZhciBCcj0wLFdpPTA7QnI8Tm4uU2hlZXROYW1lcy5sZW5ndGg7KytCcikoTm4uU2hlZXRzW05uLlNoZWV0''@;'; put 'put ''TmFtZXNbQnJdXXx8e30pWyIhcmVmIl0mJiRpKEhuLDI3LHVvKE5uLlNoZWV0TmFtZXNbQnJdLFdpKyspKTt2YXIgYmk9MDtmb3IoQnI9MDtCcjxObi5TaGVldE5hbWVzLmxlbmd0aDsrK0JyKXt2YXIgd289Tm4uU2hlZXRzW05uLlNoZWV0TmFtZXNbQnJdXTtpZih3byYmd29bIiFyZWYiXSl7''@;'; put 'put ''Zm9yKHZhciBzYT1hYSh3b1siIXJlZiJdKSxhbz1BcnJheS5pc0FycmF5KHdvKSxSYT1bXSxQbz1zYS5zLnI7UG88PXNhLmUucjsrK1BvKWZvcih2YXIgaGE9emkoUG8pLEpvPXNhLnMuYztKbzw9c2EuZS5jOysrSm8pe1BvPT09c2Eucy5yJiYoUmFbSm9dPVRvKEpvKSk7dmFyIElzPWFvPyh3''@;'; put 'put ''b1tQb118fFtdKVtKb106d29bUmFbSm9dK2hhXTtJcyYmInoiIT1Jcy50JiYoIm4iPT1Jcy50PyRpKEhuLDIzLHVyKFBvLEpvLGJpLElzLnYpKTokaShIbiwyMixzcihQbyxKbyxiaSxibChJcykuc2xpY2UoMCwyMzkpKSkpfSsrYml9fXJldHVybiAkaShIbiwxKSxIbi5lbmQoKX0sdG9fd29y''@;'; put 'put ''a2Jvb2s6ZnVuY3Rpb24gUihObixWcil7c3dpdGNoKFZyLnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gayhiKF9lLmRlY29kZShObikpLFZyKTtjYXNlImJpbmFyeSI6cmV0dXJuIGsoYihObiksVnIpO2Nhc2UiYnVmZmVyIjpjYXNlImFycmF5IjpyZXR1cm4gayhObixWcil9dGhyb3ciVW5z''@;'; put 'put ''dXBwb3J0ZWQgdHlwZSAiK1ZyLnR5cGV9fX0oKSxiNT1mdW5jdGlvbigpe3ZhciBTPUQwKCJ0IiksUj1EMCgiclByIik7ZnVuY3Rpb24gayhhZSl7dmFyIGdlPWFlLm1hdGNoKFMpO2lmKCFnZSlyZXR1cm57dDoicyIsdjoiIn07dmFyIHBlPXt0OiJzIix2OkpyKGdlWzFdKX0seWU9YWUubWF0''@;'; put 'put ''Y2goUik7cmV0dXJuIHllJiYocGUucz1mdW5jdGlvbiBKQShTKXt2YXIgUj17fSxrPVMubWF0Y2goZW4pLEc9MCxRPSExO2lmKGspZm9yKDtHIT1rLmxlbmd0aDsrK0cpe3ZhciBhZT1wcihrW0ddKTtzd2l0Y2goYWVbMF0ucmVwbGFjZSgvXHcqOi9nLCIiKSl7Y2FzZSI8Y29uZGVuc2UiOmNh''@;'; put 'put ''c2UiPGV4dGVuZCI6YnJlYWs7Y2FzZSI8c2hhZG93IjppZighYWUudmFsKWJyZWFrO2Nhc2UiPHNoYWRvdz4iOmNhc2UiPHNoYWRvdy8+IjpSLnNoYWRvdz0xO2JyZWFrO2Nhc2UiPC9zaGFkb3c+IjpicmVhaztjYXNlIjxjaGFyc2V0IjppZigiMSI9PWFlLnZhbClicmVhaztSLmNwPU5bcGFy''@;'; put 'put ''c2VJbnQoYWUudmFsLDEwKV07YnJlYWs7Y2FzZSI8b3V0bGluZSI6aWYoIWFlLnZhbClicmVhaztjYXNlIjxvdXRsaW5lPiI6Y2FzZSI8b3V0bGluZS8+IjpSLm91dGxpbmU9MTticmVhaztjYXNlIjwvb3V0bGluZT4iOmJyZWFrO2Nhc2UiPHJGb250IjpSLm5hbWU9YWUudmFsO2JyZWFrO2Nh''@;'; put 'put ''c2UiPHN6IjpSLnN6PWFlLnZhbDticmVhaztjYXNlIjxzdHJpa2UiOmlmKCFhZS52YWwpYnJlYWs7Y2FzZSI8c3RyaWtlPiI6Y2FzZSI8c3RyaWtlLz4iOlIuc3RyaWtlPTE7YnJlYWs7Y2FzZSI8L3N0cmlrZT4iOmJyZWFrO2Nhc2UiPHUiOmlmKCFhZS52YWwpYnJlYWs7c3dpdGNoKGFlLnZh''@;'; put 'put ''bCl7Y2FzZSJkb3VibGUiOlIudW5kZXJsaW5lPTI7YnJlYWs7Y2FzZSJzaW5nbGVBY2NvdW50aW5nIjpSLnVuZGVybGluZT0zMzticmVhaztjYXNlImRvdWJsZUFjY291bnRpbmciOlIudW5kZXJsaW5lPTM0fWNhc2UiPHU+IjpjYXNlIjx1Lz4iOlIudW5kZXJsaW5lfHwoUi51bmRlcmxpbmU9''@;'; put 'put ''MSk7YnJlYWs7Y2FzZSI8L3U+IjpicmVhaztjYXNlIjxiIjppZigiMCI9PWFlLnZhbClicmVhaztjYXNlIjxiPiI6Y2FzZSI8Yi8+IjpSLmJvbGQ9MTticmVhaztjYXNlIjwvYj4iOmJyZWFrO2Nhc2UiPGkiOmlmKCIwIj09YWUudmFsKWJyZWFrO2Nhc2UiPGk+IjpjYXNlIjxpLz4iOlIuaXRh''@;'; put 'put ''bGljPTE7YnJlYWs7Y2FzZSI8L2k+IjpicmVhaztjYXNlIjxjb2xvciI6YWUucmdiJiYoUi5jb2xvcj17cmdiOjg9PWFlLnJnYi5sZW5ndGg/YWUucmdiLnNsaWNlKDIsOCk6KCIwMDAwMDAiK2FlLnJnYikuc2xpY2UoLTYpfSk7YnJlYWs7Y2FzZSI8ZmFtaWx5IjpSLmZhbWlseT1hZS52YWw7''@;'; put 'put ''YnJlYWs7Y2FzZSI8dmVydEFsaWduIjoibm9uZSIhPShhZS52YWx8fCJub25lIikmJihSLnZhbGlnbj1hZS52YWwucmVwbGFjZSgic2NyaXB0IiwiIikpO2JyZWFrO2Nhc2UiPHNjaGVtZSI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8''@;'; put 'put ''ZXh0IjpRPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjpRPSExO2JyZWFrO2RlZmF1bHQ6aWYoNDchPT1hZVswXS5jaGFyQ29kZUF0KDEpJiYhUSl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCByaWNoIGZvcm1hdCAiK2FlWzBdKX19cmV0dXJuIFJ9KHllWzFdKSkscGV9dmFyIEc9LzwoPzpc''@;'; put 'put ''dys6KT9yPi9nLFE9LzxcLyg/Olx3KzopP3I+LztyZXR1cm4gZnVuY3Rpb24oZ2Upe3JldHVybiBnZS5yZXBsYWNlKEcsIiIpLnNwbGl0KFEpLm1hcChrKS5maWx0ZXIoZnVuY3Rpb24ocGUpe3JldHVybiBwZS52fSl9fSgpLGRWPXsxOiJzaW5nbGUiLDI6ImRvdWJsZSIsMzM6InNpbmdsZS1h''@;'; put 'put ''Y2NvdW50aW5nIiwzNDoiZG91YmxlLWFjY291bnRpbmcifSxOdT1mdW5jdGlvbigpe3ZhciBSPS8oXHJcbnxcbikvZztmdW5jdGlvbiBHKFEpe3ZhciBhZT1bW10sUS52LFtdXTtyZXR1cm4gUS52PyhRLnMmJmZ1bmN0aW9uIGsoUSxhZSxnZSl7dmFyIHBlPVtdO1EudW5kZXJsaW5lJiZwZS5w''@;'; put 'put ''dXNoKCJ0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsiKSxRLnVuZGVybGluZT4xJiZwZS5wdXNoKCJ0ZXh0LXVuZGVybGluZS1zdHlsZToiK2RWW1EudW5kZXJsaW5lXSsiOyIpLFEuc3omJnBlLnB1c2goImZvbnQtc2l6ZToiK1Euc3orInB0OyIpLFEub3V0bGluZSYmcGUucHVzaCgidGV4''@;'; put 'put ''dC1lZmZlY3Q6IG91dGxpbmU7IiksUS5zaGFkb3cmJnBlLnB1c2goInRleHQtc2hhZG93OiBhdXRvOyIpLFEuY29sb3ImJlEuY29sb3IucmdiJiZwZS5wdXNoKCJjb2xvcjogIyIrUDAoUS5jb2xvci5yZ2IpKyI7IiksYWUucHVzaCgnPHNwYW4gc3R5bGU9IicrcGUuam9pbigiIikrJyI+Jyks''@;'; put 'put ''US5ib2xkJiYoYWUucHVzaCgiPGI+IiksZ2UucHVzaCgiPC9iPiIpKSxRLml0YWxpYyYmKGFlLnB1c2goIjxpPiIpLGdlLnB1c2goIjwvaT4iKSksUS5zdHJpa2UmJihhZS5wdXNoKCI8cz4iKSxnZS5wdXNoKCI8L3M+IikpO3ZhciB5ZT1RLnZhbGlnbnx8IiI7InN1cGVyc2NyaXB0Ij09eWV8''@;'; put 'put ''fCJzdXBlciI9PXllP3llPSJzdXAiOiJzdWJzY3JpcHQiPT15ZSYmKHllPSJzdWIiKSwiIiE9eWUmJihhZS5wdXNoKCI8Iit5ZSsiPiIpLGdlLnB1c2goIjwvIit5ZSsiPiIpKSxnZS5wdXNoKCI8L3NwYW4+Iil9KFEucyxhZVswXSxhZVsyXSksYWVbMF0uam9pbigiIikrYWVbMV0ucmVwbGFj''@;'; put 'put ''ZShSLCI8YnIvPiIpK2FlWzJdLmpvaW4oIiIpKToiIn1yZXR1cm4gZnVuY3Rpb24oYWUpe3JldHVybiBhZS5tYXAoRykuam9pbigiIil9fSgpO2Z1bmN0aW9uIEtzKFMpe3JldHVybiBTLm1hcChmdW5jdGlvbihrKXtyZXR1cm4gZnVuY3Rpb24geDQoUyl7dmFyIFI9IiIsaz1bXTtyZXR1cm4g''@;'; put 'put ''Uy5zJiYoUy5zLmJvbGQmJmsucHVzaCgiPGIvPiIpLFMucy5pdGFsaWMmJmsucHVzaCgiPGkvPiIpLFMucy5zdHJpa2UmJmsucHVzaCgiPHN0cmlrZS8+IiksUy5zLnVuZGVybGluZSYmay5wdXNoKCc8dSB2YWw9IicrKHg1W1Mucy51bmRlcmxpbmVdfHwic2luZ2xlIikrJyIvPicpLFMucy5j''@;'; put 'put ''b2xvciYmay5wdXNoKGdkKFMucy5jb2xvcikpLFMucy5zeiYmay5wdXNoKCc8c3ogdmFsPSInK1Mucy5zeisnIi8+JyksUy5zLm5hbWUmJmsucHVzaCgnPHJGb250IHZhbD0iJytTLnMubmFtZSsnIi8+JyksKCJzdXBlciI9PVMucy52YWxpZ258fCJzdWIiPT1TLnMudmFsaWduKSYmay5wdXNo''@;'; put 'put ''KCc8dmVydEFsaWduIHZhbD0iJytTLnMudmFsaWduKydzY3JpcHQiLz4nKSksay5sZW5ndGgmJihSKz0iPHJQcj4iK2suam9pbigiIikrIjwvclByPiIpLCI8cj4iKyhSKz1GcigidCIsT3IoUy52KSxudWxsKSkrIjwvcj4ifShrKX0pLmpvaW4oIiIpfXZhciBoVj0vPCg/Olx3KzopP3RbXj5d''@;'; put 'put ''Kj4oW148XSopPFwvKD86XHcrOik/dD4vZyxmVj0vPCg/Olx3KzopP3JcYltePl0qPi8scFY9LzwoPzpcdys6KT9yUGguKj8+KFtcc1xTXSo/KTxcLyg/Olx3KzopP3JQaD4vZztmdW5jdGlvbiBjQyhTLFIpe3ZhciBrPSFSfHxSLmNlbGxIVE1MLEc9e307cmV0dXJuIFM/KFMubWF0Y2goL15c''@;'; put 'put ''cyo8KD86XHcrOik/dFtePl0qPi8pPyhHLnQ9SnIoZ2EoUy5zbGljZShTLmluZGV4T2YoIj4iKSsxKS5zcGxpdCgvPFwvKD86XHcrOik/dD4vKVswXXx8IiIpKSxHLnI9Z2EoUyksayYmKEcuaD1jbyhHLnQpKSk6Uy5tYXRjaChmVikmJihHLnI9Z2EoUyksRy50PUpyKGdhKChTLnJlcGxhY2Uo''@;'; put 'put ''cFYsIiIpLm1hdGNoKGhWKXx8W10pLmpvaW4oIiIpLnJlcGxhY2UoZW4sIiIpKSksRy5SPWI1KEcuciksayYmKEcuaD1OdShHLlIpKSksRyk6e3Q6IiJ9fXZhciBRQT0vPCg/Olx3KzopP3NzdChbXj5dKik+KFtcc1xTXSopPFwvKD86XHcrOik/c3N0Pi8sZWs9LzwoPzpcdys6KT8oPzpzaXxz''@;'; put 'put ''c3RJdGVtKT4vZywkNj0vPFwvKD86XHcrOik/KD86c2l8c3N0SXRlbSk+Lztxby5TU1Q9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvc2hhcmVkU3RyaW5ncyI7dmFyIGdWPS9eXHN8XHMkfFtcdFxuXHJdLztmdW5j''@;'; put 'put ''dGlvbiBFdihTLFIpe2lmKCFSLmJvb2tTU1QpcmV0dXJuIiI7dmFyIGs9W0lpXTtrW2subGVuZ3RoXT1Gcigic3N0IixudWxsLHt4bWxuczpHaS5tYWluWzBdLGNvdW50OlMuQ291bnQsdW5pcXVlQ291bnQ6Uy5VbmlxdWV9KTtmb3IodmFyIEc9MDtHIT1TLmxlbmd0aDsrK0cpaWYobnVsbCE9''@;'; put 'put ''U1tHXSl7dmFyIFE9U1tHXSxhZT0iPHNpPiI7US5yP2FlKz1RLnI6KGFlKz0iPHQiLFEudHx8KFEudD0iIiksUS50Lm1hdGNoKGdWKSYmKGFlKz0nIHhtbDpzcGFjZT0icHJlc2VydmUiJyksYWUrPSI+IitPcihRLnQpKyI8L3Q+Iiksa1trLmxlbmd0aF09YWUrPSI8L3NpPiJ9cmV0dXJuIGsu''@;'; put 'put ''bGVuZ3RoPjImJihrW2subGVuZ3RoXT0iPC9zc3Q+IixrWzFdPWtbMV0ucmVwbGFjZSgiLz4iLCI+IikpLGsuam9pbigiIil9dmFyIHRrPWZ1bmN0aW9uIEUzKFMsUixrKXt2YXIgRz0xMys0KlMudC5sZW5ndGgsUT1TLlImJlMuUi5sZW5ndGh8fFMucjtTLnImJihTLlI9YjUoUy5yKSksUSYm''@;'; put 'put ''KEcrPTQrNCpTLlIubGVuZ3RoKTt2YXIgYWU9ITE7aWYobnVsbD09ayYmKGFlPSEwLGs9Ym4oRykpLGsud3JpdGVfc2hpZnQoMSxRPzE6MCksUGMoUy50LGspLFEpe2sud3JpdGVfc2hpZnQoNCxTLlIubGVuZ3RoKTtmb3IodmFyIGdlPTAscGU9MDtwZTxTLlIubGVuZ3RoOysrcGUpe3ZhciB5''@;'; put 'put ''ZT1TLlJbcGVdO2sud3JpdGVfc2hpZnQoMixnZSksZ2UrPSh5ZS52fHwiIikubGVuZ3RoO3ZhciBQZT15ZS5zP3MwKFIuY2VsbFhmcyxSLmNlbGxTdHlsZVhmcyx7dDoibiIsdjowLHM6eWUuc30sUik6MDtrLndyaXRlX3NoaWZ0KDIsUi5jZWxsWGZzW1BlXS5mb250SWQpfX1yZXR1cm4gYWU/''@;'; put 'put ''ay5zbGljZSgwLGsubCk6a307ZnVuY3Rpb24gbmsoUyxSKXt2YXIgaz1taSgpO0hyKGssIkJydEJlZ2luU3N0IixmdW5jdGlvbiB1QyhTLFIpe3JldHVybiBSfHwoUj1ibig4KSksUi53cml0ZV9zaGlmdCg0LFMuQ291bnQpLFIud3JpdGVfc2hpZnQoNCxTLlVuaXF1ZSksUn0oUykpO2Zvcih2''@;'; put 'put ''YXIgRz0wO0c8Uy5sZW5ndGg7KytHKUhyKGssIkJydFNTVEl0ZW0iLHRrKFNbR10sUikpO3JldHVybiBIcihrLCJCcnRFbmRTc3QiKSxrLmVuZCgpfWZ1bmN0aW9uIEU0KFMpe2lmKHR5cGVvZiBjcHRhYmxlPCJ1IilyZXR1cm4gY3B0YWJsZS51dGlscy5lbmNvZGUoRixTKTtmb3IodmFyIFI9''@;'; put 'put ''W10saz1TLnNwbGl0KCIiKSxHPTA7RzxrLmxlbmd0aDsrK0cpUltHXT1rW0ddLmNoYXJDb2RlQXQoMCk7cmV0dXJuIFJ9ZnVuY3Rpb24gUDEoUyxSKXt2YXIgaz17fTtyZXR1cm4gay5NYWpvcj1TLnJlYWRfc2hpZnQoMiksay5NaW5vcj1TLnJlYWRfc2hpZnQoMiksUj49NCYmKFMubCs9Ui00''@;'; put 'put ''KSxrfWZ1bmN0aW9uIGRDKFMpe2Zvcih2YXIgUj1TLnJlYWRfc2hpZnQoNCksaz1TLmwrUi00LEc9e30sUT1TLnJlYWRfc2hpZnQoNCksYWU9W107US0tID4wOylhZS5wdXNoKHt0OlMucmVhZF9zaGlmdCg0KSx2OlMucmVhZF9zaGlmdCgwLCJscHA0Iil9KTtpZihHLm5hbWU9Uy5yZWFkX3No''@;'; put 'put ''aWZ0KDAsImxwcDQiKSxHLmNvbXBzPWFlLFMubCE9ayl0aHJvdyBuZXcgRXJyb3IoIkJhZCBEYXRhU3BhY2VNYXBFbnRyeTogIitTLmwrIiAhPSAiK2spO3JldHVybiBHfWZ1bmN0aW9uIHdWKFMsUil7dmFyIGs9Uy5sK1IsRz17fTtHLkZsYWdzPTYzJlMucmVhZF9zaGlmdCg0KSxTLmwrPTQs''@;'; put 'put ''Ry5BbGdJRD1TLnJlYWRfc2hpZnQoNCk7dmFyIFE9ITE7c3dpdGNoKEcuQWxnSUQpe2Nhc2UgMjYxMjY6Y2FzZSAyNjEyNzpjYXNlIDI2MTI4OlE9MzY9PUcuRmxhZ3M7YnJlYWs7Y2FzZSAyNjYyNTpRPTQ9PSg1MiZHLkZsYWdzKTticmVhaztjYXNlIDA6UT0xNj09Ry5GbGFnc3x8ND09Ry5G''@;'; put 'put ''bGFnc3x8MzY9PUcuRmxhZ3M7YnJlYWs7ZGVmYXVsdDp0aHJvdyJVbnJlY29nbml6ZWQgZW5jcnlwdGlvbiBhbGdvcml0aG06ICIrRy5BbGdJRH1pZighUSl0aHJvdyBuZXcgRXJyb3IoIkVuY3J5cHRpb24gRmxhZ3MvQWxnSUQgbWlzbWF0Y2giKTtyZXR1cm4gRy5BbGdJREhhc2g9Uy5yZWFk''@;'; put 'put ''X3NoaWZ0KDQpLEcuS2V5U2l6ZT1TLnJlYWRfc2hpZnQoNCksRy5Qcm92aWRlclR5cGU9Uy5yZWFkX3NoaWZ0KDQpLFMubCs9OCxHLkNTUE5hbWU9Uy5yZWFkX3NoaWZ0KGstUy5sPj4xLCJ1dGYxNmxlIiksUy5sPWssR31mdW5jdGlvbiBrdihTLFIpe3ZhciBrPXt9LEc9Uy5sK1I7cmV0dXJu''@;'; put 'put ''IFMubCs9NCxrLlNhbHQ9Uy5zbGljZShTLmwsUy5sKzE2KSxTLmwrPTE2LGsuVmVyaWZpZXI9Uy5zbGljZShTLmwsUy5sKzE2KSxTLmwrPTE2LFMucmVhZF9zaGlmdCg0KSxrLlZlcmlmaWVySGFzaD1TLnNsaWNlKFMubCxHKSxTLmw9RyxrfWZ1bmN0aW9uIENWKFMpe2lmKDM2IT0oNjMmUy5y''@;'; put 'put ''ZWFkX3NoaWZ0KDQpKSl0aHJvdyBuZXcgRXJyb3IoIkVuY3J5cHRpb25JbmZvIG1pc21hdGNoIik7dmFyIGs9Uy5yZWFkX3NoaWZ0KDQpO3JldHVybnt0OiJTdGQiLGg6d1YoUyxrKSx2Omt2KFMsUy5sZW5ndGgtUy5sKX19ZnVuY3Rpb24gcTYoKXt0aHJvdyBuZXcgRXJyb3IoIkZpbGUgaXMg''@;'; put 'put ''cGFzc3dvcmQtcHJvdGVjdGVkOiBFQ01BLTM3NiBFeHRlbnNpYmxlIil9ZnVuY3Rpb24gaEMoUyl7dmFyIFI9WyJzYWx0U2l6ZSIsImJsb2NrU2l6ZSIsImtleUJpdHMiLCJoYXNoU2l6ZSIsImNpcGhlckFsZ29yaXRobSIsImNpcGhlckNoYWluaW5nIiwiaGFzaEFsZ29yaXRobSIsInNhbHRW''@;'; put 'put ''YWx1ZSJdO1MubCs9NDt2YXIgaz1TLnJlYWRfc2hpZnQoUy5sZW5ndGgtUy5sLCJ1dGY4IiksRz17fTtyZXR1cm4gay5yZXBsYWNlKGVuLGZ1bmN0aW9uKGFlKXt2YXIgZ2U9cHIoYWUpO3N3aXRjaChXbihnZVswXSkpe2Nhc2UiPD94bWwiOmNhc2UiPGVuY3J5cHRpb24iOmNhc2UiPC9lbmNy''@;'; put 'put ''eXB0aW9uPiI6Y2FzZSI8L2tleUVuY3J5cHRvcnM+IjpjYXNlIjwva2V5RW5jcnlwdG9yPiI6YnJlYWs7Y2FzZSI8a2V5RGF0YSI6Ui5mb3JFYWNoKGZ1bmN0aW9uKHBlKXtHW3BlXT1nZVtwZV19KTticmVhaztjYXNlIjxkYXRhSW50ZWdyaXR5IjpHLmVuY3J5cHRlZEhtYWNLZXk9Z2UuZW5j''@;'; put 'put ''cnlwdGVkSG1hY0tleSxHLmVuY3J5cHRlZEhtYWNWYWx1ZT1nZS5lbmNyeXB0ZWRIbWFjVmFsdWU7YnJlYWs7Y2FzZSI8a2V5RW5jcnlwdG9ycz4iOmNhc2UiPGtleUVuY3J5cHRvcnMiOkcuZW5jcz1bXTticmVhaztjYXNlIjxrZXlFbmNyeXB0b3IiOkcudXJpPWdlLnVyaTticmVhaztjYXNl''@;'; put 'put ''IjxlbmNyeXB0ZWRLZXkiOkcuZW5jcy5wdXNoKGdlKTticmVhaztkZWZhdWx0OnRocm93IGdlWzBdfX0pLEd9ZnVuY3Rpb24gSXYoUyl7dmFyIGssYWUsUj0wLEc9RTQoUyksUT1HLmxlbmd0aCsxO2Zvcigoaz1WKFEpKVswXT1HLmxlbmd0aCxhZT0xO2FlIT1ROysrYWUpa1thZV09R1thZS0x''@;'; put 'put ''XTtmb3IoYWU9US0xO2FlPj0wOy0tYWUpUj0oKDE2Mzg0JlI/MTowKXxSPDwxJjMyNzY3KV5rW2FlXTtyZXR1cm4gNTI4MTFeUn12YXIgZkM9ZnVuY3Rpb24oKXt2YXIgUz1bMTg3LDI1NSwyNTUsMTg2LDI1NSwyNTUsMTg1LDEyOCwwLDE5MCwxNSwwLDE5MSwxNSwwXSxSPVs1Nzg0MCw3NDM5''@;'; put 'put ''LDUyMzgwLDMzOTg0LDQzNjQsMzYwMCw2MTkwMiwxMjYwNiw2MjU4LDU3NjU3LDU0Mjg3LDM0MDQxLDEwMjUyLDQzMzcwLDIwMTYzXSxrPVs0NDc5NiwxOTkyOSwzOTg1OCwxMDA1MywyMDEwNiw0MDIxMiwxMDc2MSwzMTU4NSw2MzE3MCw2NDkzMyw2MDI2Nyw1MDkzNSw0MDM5OSwxMTE5OSwx''@;'; put 'put ''Nzc2MywzNTUyNiwxNDUzLDI5MDYsNTgxMiwxMTYyNCwyMzI0OCw4ODUsMTc3MCwzNTQwLDcwODAsMTQxNjAsMjgzMjAsNTY2NDAsNTUzNjksNDExMzksMjA4MDcsNDE2MTQsMjE4MjEsNDM2NDIsMTc2MjEsMjg0ODUsNTY5NzAsNDQzNDEsMTkwMTksMzgwMzgsMTQ2MDUsMjkyMTAsNjAxOTUs''@;'; put 'put ''NTA3OTEsNDAxNzUsMTA3NTEsMjE1MDIsNDMwMDQsMjQ1MzcsMTgzODcsMzY3NzQsMzk0OSw3ODk4LDE1Nzk2LDMxNTkyLDYzMTg0LDQ3MjAxLDI0ODAzLDQ5NjA2LDM3ODA1LDE0MjAzLDI4NDA2LDU2ODEyLDE3ODI0LDM1NjQ4LDE2OTcsMzM5NCw2Nzg4LDEzNTc2LDI3MTUyLDQzNjAxLDE3''@;'; put 'put ''NTM5LDM1MDc4LDU1NywxMTE0LDIyMjgsNDQ1NiwzMDM4OCw2MDc3Niw1MTk1MywzNDI0Myw3MDc5LDE0MTU4LDI4MzE2LDE0MTI4LDI4MjU2LDU2NTEyLDQzNDI1LDE3MjUxLDM0NTAyLDc1OTcsMTMxMDUsMjYyMTAsNTI0MjAsMzUyNDEsODgzLDE3NjYsMzUzMiw0MTI5LDgyNTgsMTY1MTYs''@;'; put 'put ''MzMwMzIsNDY1Nyw5MzE0LDE4NjI4XSxRPWZ1bmN0aW9uKGdlLHBlKXtyZXR1cm4gZnVuY3Rpb24oZ2Upe3JldHVybiAyNTUmKGdlPj4xfGdlPDw3KX0oZ2VecGUpfTtyZXR1cm4gZnVuY3Rpb24ocGUpe2Zvcih2YXIgeWU9RTQocGUpLFBlPWZ1bmN0aW9uKGdlKXtmb3IodmFyIHBlPVJbZ2Uu''@;'; put 'put ''bGVuZ3RoLTFdLHllPTEwNCxQZT1nZS5sZW5ndGgtMTtQZT49MDstLVBlKWZvcih2YXIgTmU9Z2VbUGVdLFllPTA7NyE9WWU7KytZZSk2NCZOZSYmKHBlXj1rW3llXSksTmUqPTIsLS15ZTtyZXR1cm4gcGV9KHllKSxOZT15ZS5sZW5ndGgsWWU9VigxNiksZXQ9MDsxNiE9ZXQ7KytldClZZVtl''@;'; put 'put ''dF09MDt2YXIgb3Q7Zm9yKCEoMSZ+TmUpJiYoWWVbTmVdPVEoU1swXSxQZT4+OCksWWVbLS1OZV09USh5ZVt5ZS5sZW5ndGgtMV0sMjU1JlBlKSk7TmU+MDspWWVbLS1OZV09USh5ZVtOZV0sUGU+PjgpLFllWy0tTmVdPVEoeWVbTmVdLDI1NSZQZSk7Zm9yKE5lPTE1LG90PTE1LXllLmxlbmd0''@;'; put 'put ''aDtvdD4wOylZZVtOZV09UShTW290XSxQZT4+OCksLS1vdCxZZVstLU5lXT1RKHllW05lXSwyNTUmUGUpLC0tTmUsLS1vdDtyZXR1cm4gWWV9fSgpO3ZhciBMdj1mdW5jdGlvbigpe2Z1bmN0aW9uIFMoUSxhZSl7c3dpdGNoKGFlLnR5cGUpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gUihfZS5kZWNv''@;'; put 'put ''ZGUoUSksYWUpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gUihRLGFlKTtjYXNlImJ1ZmZlciI6cmV0dXJuIFIoUS50b1N0cmluZygiYmluYXJ5IiksYWUpO2Nhc2UiYXJyYXkiOnJldHVybiBSKGR0KFEpLGFlKX10aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrYWUudHlwZSl9ZnVu''@;'; put 'put ''Y3Rpb24gUihRLGFlKXt2YXIgcGU9KGFlfHx7fSkuZGVuc2U/W106e307aWYoIVEubWF0Y2goL1xcdHJvd2QvKSl0aHJvdyBuZXcgRXJyb3IoIlJURiBtaXNzaW5nIHRhYmxlIik7cmV0dXJuIHBlWyIhcmVmIl09b28oe3M6e2M6MCxyOjB9LGU6e2M6MCxyOjB9fSkscGV9cmV0dXJue3RvX3dv''@;'; put 'put ''cmtib29rOmZ1bmN0aW9uIGsoUSxhZSl7cmV0dXJuIEpkKFMoUSxhZSksYWUpfSx0b19zaGVldDpTLGZyb21fc2hlZXQ6ZnVuY3Rpb24gRyhRKXtmb3IodmFyIHBlLGFlPVsie1xccnRmMVxcYW5zaSJdLGdlPWFhKFFbIiFyZWYiXSkseWU9QXJyYXkuaXNBcnJheShRKSxQZT1nZS5zLnI7UGU8''@;'; put 'put ''PWdlLmUucjsrK1BlKXthZS5wdXNoKCJcXHRyb3dkXFx0cmF1dG9maXQxIik7Zm9yKHZhciBOZT1nZS5zLmM7TmU8PWdlLmUuYzsrK05lKWFlLnB1c2goIlxcY2VsbHgiKyhOZSsxKSk7Zm9yKGFlLnB1c2goIlxccGFyZFxcaW50YmwiKSxOZT1nZS5zLmM7TmU8PWdlLmUuYzsrK05lKXt2YXIg''@;'; put 'put ''WWU9WGkoe3I6UGUsYzpOZX0pOyhwZT15ZT8oUVtQZV18fFtdKVtOZV06UVtZZV0pJiYobnVsbCE9cGUudnx8cGUuZiYmIXBlLkYpJiYoYWUucHVzaCgiICIrKHBlLnd8fChibChwZSkscGUudykpKSxhZS5wdXNoKCJcXGNlbGwiKSl9YWUucHVzaCgiXFxwYXJkXFxpbnRibFxccm93Iil9cmV0''@;'; put 'put ''dXJuIGFlLmpvaW4oIiIpKyJ9In19fSgpO2Z1bmN0aW9uIHk1KFMpe3ZhciBSPVMuc2xpY2UoIiMiPT09U1swXT8xOjApLnNsaWNlKDAsNik7cmV0dXJuW3BhcnNlSW50KFIuc2xpY2UoMCwyKSwxNikscGFyc2VJbnQoUi5zbGljZSgyLDQpLDE2KSxwYXJzZUludChSLnNsaWNlKDQsNiksMTYp''@;'; put 'put ''XX1mdW5jdGlvbiBoZChTKXtmb3IodmFyIFI9MCxrPTE7MyE9UjsrK1Ipaz0yNTYqaysoU1tSXT4yNTU/MjU1OlNbUl08MD8wOlNbUl0pO3JldHVybiBrLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLnNsaWNlKDEpfWZ1bmN0aW9uIHJoKFMsUil7aWYobnVsbD09UylyZXR1cm4gbnVsbCE9''@;'; put 'put ''UjtpZihudWxsPT1SKXJldHVybiEwO2lmKDE9PVMuYXV0byYmMT09Ui5hdXRvKXJldHVybiExO2lmKCEhUy5hdXRvIT0hIVIuYXV0b3x8bnVsbD09Uy50aGVtZSE9KG51bGw9PVIudGhlbWUpKXJldHVybiEwO2lmKG51bGwhPVMudGhlbWUpcmV0dXJuIFMudGhlbWUhPVIudGhlbWV8fFMudGlu''@;'; put 'put ''dCE9Ui50aW50O2lmKG51bGw9PVMucmdiJiZudWxsPT1SLnJnYilyZXR1cm4hMTt2YXIgaz1TLnJnYjsibnVtYmVyIj09dHlwZW9mIGsmJihrPWsudG9TdHJpbmcoMTYpKSxrPWsuc2xpY2UoLTYpO3ZhciBHPVIucmdiO3JldHVybiJudW1iZXIiPT10eXBlb2YgRyYmKEc9Ry50b1N0cmluZygx''@;'; put 'put ''NikpLEc9Ry5zbGljZSgtNiksay50b0xvd2VyQ2FzZSgpIT1HLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gaWsoUyxSKXtyZXR1cm4gbnVsbD09Uz9udWxsIT1SOm51bGw9PVI/bnVsbCE9UzpTLnN0eWxlIT1SLnN0eWxlfHxyaChTLmNvbG9yLFIuY29sb3IpfWZ1bmN0aW9uIF81KFMsUil7aWYo''@;'; put 'put ''MD09PVIpcmV0dXJuIFM7dmFyIGs9ZnVuY3Rpb24geFYoUyl7dmFyIFI9U1swXS8yNTUsaz1TWzFdLzI1NSxHPVNbMl0vMjU1LFE9TWF0aC5tYXgoUixrLEcpLGFlPU1hdGgubWluKFIsayxHKSxnZT1RLWFlO2lmKDA9PT1nZSlyZXR1cm5bMCwwLFJdO3ZhciB5ZSxwZT0wLFBlPVErYWU7c3dp''@;'; put 'put ''dGNoKHllPWdlLyhQZT4xPzItUGU6UGUpLFEpe2Nhc2UgUjpwZT0oKGstRykvZ2UrNiklNjticmVhaztjYXNlIGs6cGU9KEctUikvZ2UrMjticmVhaztjYXNlIEc6cGU9KFItaykvZ2UrNH1yZXR1cm5bcGUvNix5ZSxQZS8yXX0oeTUoUykpO3JldHVybiBrWzJdPVI8MD9rWzJdKigxK1IpOjEt''@;'; put 'put ''KDEta1syXSkqKDEtUiksaGQoZnVuY3Rpb24gcmsoUyl7dmFyIHllLGs9U1sxXSxHPVNbMl0sUT0yKmsqKEc8LjU/RzoxLUcpLGFlPUctUS8yLGdlPVthZSxhZSxhZV0scGU9NipTWzBdO2lmKDAhPT1rKXN3aXRjaCgwfHBlKXtjYXNlIDA6Y2FzZSA2OnllPVEqcGUsZ2VbMF0rPVEsZ2VbMV0r''@;'; put 'put ''PXllO2JyZWFrO2Nhc2UgMTpnZVswXSs9eWU9USooMi1wZSksZ2VbMV0rPVE7YnJlYWs7Y2FzZSAyOnllPVEqKHBlLTIpLGdlWzFdKz1RLGdlWzJdKz15ZTticmVhaztjYXNlIDM6Z2VbMV0rPXllPVEqKDQtcGUpLGdlWzJdKz1RO2JyZWFrO2Nhc2UgNDp5ZT1RKihwZS00KSxnZVsyXSs9USxn''@;'; put 'put ''ZVswXSs9eWU7YnJlYWs7Y2FzZSA1OmdlWzJdKz15ZT1RKig2LXBlKSxnZVswXSs9UX1mb3IodmFyIFBlPTA7MyE9UGU7KytQZSlnZVtQZV09TWF0aC5yb3VuZCgyNTUqZ2VbUGVdKTtyZXR1cm4gZ2V9KGspKX12YXIgb2s9NixFYz1vaztmdW5jdGlvbiB3NShTKXtyZXR1cm4gTWF0aC5mbG9v''@;'; put 'put ''cigoUytNYXRoLnJvdW5kKDEyOC9FYykvMjU2KSpFYyl9ZnVuY3Rpb24gQzUoUyl7cmV0dXJuIE1hdGguZmxvb3IoKFMtNSkvRWMqMTAwKy41KS8xMDB9ZnVuY3Rpb24gU2YoUyl7cmV0dXJuIE1hdGgucm91bmQoKFMqRWMrNSkvRWMqMjU2KS8yNTZ9ZnVuY3Rpb24gZTEoUyl7Uy5iZXN0Rml0''@;'; put 'put ''JiZkZWxldGUgUy5iZXN0Rml0LFMud2lkdGg/KFMud3B4PXc1KFMud2lkdGgpLFMud2NoPUM1KFMud3B4KSxTLk1EVz1FYyk6Uy53cHg/KFMud2NoPUM1KFMud3B4KSxTLndpZHRoPVNmKFMud2NoKSxTLk1EVz1FYyk6Im51bWJlciI9PXR5cGVvZiBTLndjaCYmKFMud2lkdGg9U2YoUy53Y2gp''@;'; put 'put ''LFMud3B4PXc1KFMud2lkdGgpLFMuTURXPUVjKSxTLmN1c3RvbVdpZHRoJiZkZWxldGUgUy5jdXN0b21XaWR0aH12YXIgWnM9OTYsTWY9WnM7ZnVuY3Rpb24gTjMoUyl7cmV0dXJuIDcyKlMvTWZ9ZnVuY3Rpb24gaWgoUyl7cmV0dXJuIFMqTWYvNzJ9ZnVuY3Rpb24geGYoUyl7TWY9Uz17b3N4''@;'; put 'put ''OjcyLHdpbjo5Nix3aW4xMDA6OTYsd2luMTI1OjEyMCx3aW4xNTA6MTQ0fVtTXXx8U3x8WnMsdkM9TTVbU119ZnVuY3Rpb24gUHYoUyl7Uy5ocHg/Uy5ocHQ9TjMoUy5ocHgpOlMuaHB0JiYoUy5ocHg9aWgoUy5ocHQpKX12YXIgZ0M9e05vbmU6Im5vbmUiLFNvbGlkOiJzb2xpZCIsR3JheTUw''@;'; put 'put ''OiJtZWRpdW1HcmF5IixHcmF5NzU6ImRhcmtHcmF5IixHcmF5MjU6ImxpZ2h0R3JheSIsSG9yelN0cmlwZToiZGFya0hvcml6b250YWwiLFZlcnRTdHJpcGU6ImRhcmtWZXJ0aWNhbCIsUmV2ZXJzZURpYWdTdHJpcGU6ImRhcmtEb3duIixEaWFnU3RyaXBlOiJkYXJrVXAiLERpYWdDcm9zczoi''@;'; put 'put ''ZGFya0dyaWQiLFRoaWNrRGlhZ0Nyb3NzOiJkYXJrVHJlbGxpcyIsVGhpbkhvcnpTdHJpcGU6ImxpZ2h0SG9yaXpvbnRhbCIsVGhpblZlcnRTdHJpcGU6ImxpZ2h0VmVydGljYWwiLFRoaW5SZXZlcnNlRGlhZ1N0cmlwZToibGlnaHREb3duIixUaGluSG9yekNyb3NzOiJsaWdodEdyaWQifSxt''@;'; put 'put ''Qz1WZShnQyksWDY9e29yYW5nZToxNjc1MzkyMCxibGFjazowLG5hdnk6MTI4LGJsdWU6MjU1LGdyZWVuOjMyNzY4LHRlYWw6MzI4OTYsbGltZTo2NTI4MCxhcXVhOjY1NTM1LHNpbHZlcjoxMjYzMjI1NixtYXJvb246ODM4ODYwOCxwdXJwbGU6ODM4ODczNixvbGl2ZTo4NDIxMzc2LGdyYXk6''@;'; put 'put ''ODQyMTUwNCxyZWQ6MTY3MTE2ODAsZnVjaHNpYToxNjcxMTkzNSx5ZWxsb3c6MTY3NzY5NjAsd2hpdGU6MTY3NzcyMTV9O2Z1bmN0aW9uIFM1KFMsUil7aWYoUy5yZXBsYWNlKCIjIiwiIikubWF0Y2goL15bMC05YS1mQS1GXXs2fSQvKSlyZXR1cm4gcGFyc2VJbnQoUy5yZXBsYWNlKCIjIiwi''@;'; put 'put ''IiksMTYpO2lmKFg2W1NdKXJldHVybiBYNltTXTt2YXIgaz1TLm1hdGNoKC9yZ2JcKFxzKihcZCopXHMqLFxzKihcZCopXHMqLFxzKihcZCopXHMqXCkvKTtpZihrKXJldHVybigra1sxXTw8MTYpKygra1syXTw8OCkrICtrWzNdO2lmKGs9Uy5tYXRjaCgvcmdiYVwoXHMqKFxkKilccyosXHMq''@;'; put 'put ''KFxkKilccyosXHMqKFxkKilccyooXGQqKS8pKXJldHVybiAwIT0oa1s0XSYma1s0XS5sZW5ndGg+MCYmK2tbNF18fDApfHwra1sxXT4wfHwra1syXT4wfHwra1szXT4wPygra1sxXTw8MTYpKygra1syXTw8OCkrICtrWzNdOlI/LTE6MTY3NzcyMTU7dGhyb3cgbmV3IEVycm9yKCJVbmtub3du''@;'; put 'put ''IEhUTUwgY29sb3IgIitTKX12YXIgTTU9e307ZnVuY3Rpb24gRnYoUyl7Uz1TfHw5Njt2YXIgUj17Q2FsaWJyaTpbXSxBcmlhbDpbXSwiU3Bhcmthc3NlIFJnIjpbXSxcdTViOGJcdTRmNTM6W10sXHU2ZTM4XHUzMGI0XHUzMGI3XHUzMGMzXHUzMGFmOltdLCJDZW50dXJ5IEdvdGhpYyI6W119''@;'; put 'put ''O3JldHVybiBSLkNhbGlicmlbMTFdPTcsUi5DYWxpYnJpWzEyXT17NzI6Niw5Njo4LDEyMDoxMCwxNDQ6MTJ9W1NdfHw4LFIuQ2FsaWJyaVsxM109MTAsUi5DYWxpYnJpWzE0XT0xMSxSLkNhbGlicmlbMTZdPTEyLFIuQ2FsaWJyaVsxOF09MTQsUi5DYWxpYnJpWzIwXT0xNixSLlx1NWI4Ylx1''@;'; put 'put ''NGY1M1sxMV09OCxSLlx1NmUzOFx1MzBiNFx1MzBiN1x1MzBjM1x1MzBhZlsxMV09OCxSWyJTcGFya2Fzc2UgUmciXVsxMV09NyxSLkFyaWFsWzEwXT03LFJbIkNlbnR1cnkgR290aGljIl1bMTJdPTksUn1NNVs3Ml09RnYoNzIpLE01Wzk2XT1Gdig5NiksTTVbMTIwXT1GdigxMjApLE01WzE0''@;'; put 'put ''NF09RnYoMTQ0KTt2YXIgdkM9TTVbOTZdO2Z1bmN0aW9uIGJDKFMpe3JldHVybih2Q1tTLm5hbWV8fFMuRm9udE5hbWVdfHxbXSlbUy5zenx8Uy5TaXplXX1mdW5jdGlvbiBBNChTKXtpZihTKXt2YXIgUj1iQyhTKTtpZihSKXJldHVybiBFYz1SfXJldHVybiBFYz02fWZ1bmN0aW9uIHlDKFMs''@;'; put 'put ''UixrKXtyZXR1cm4gaGQoZnVuY3Rpb24gYWsoUyxSLGspe3JldHVybltNYXRoLnJvdW5kKFJbMF0qaytTWzBdKigxLWspKSxNYXRoLnJvdW5kKFJbMV0qaytTWzFdKigxLWspKSxNYXRoLnJvdW5kKFJbMl0qaytTWzJdKigxLWspKV19KHk1KCJudW1iZXIiPT10eXBlb2YgUy5yZ2I/KCIwMDAw''@;'; put 'put ''MCIrUy50b1N0cmluZygxNikpLnNsaWNlKC02KTpTLnJnYikseTUoIm51bWJlciI9PXR5cGVvZiBSLnJnYj8oIjAwMDAwIitSLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTYpOlIucmdiKSxrKSl9ZnVuY3Rpb24gSHYoUyxSLGspe2lmKGspc3dpdGNoKCtTKXtjYXNlIDY0OlM9NjU7YnJlYWs7Y2Fz''@;'; put 'put ''ZSA2NTpTPTY0fXZhciBHPVImJlJbK1NdfHxuMFsrU118fEZ3WytTLTIwMF07aWYoODE9PStTJiYoRz1uMFsxXSksR3x8KEc9bjBbMV0pLCFHKXRocm93IG5ldyBFcnJvcigiYmFkIElDViBpbmRleCAiK1MpO3JldHVybiBoZChHKX1mdW5jdGlvbiBzayhTLFIsayl7dmFyIEc9e307cmV0dXJu''@;'; put 'put ''IG51bGwhPVMuaW5kZXhlZCYmKEcuaW5kZXg9cGFyc2VJbnQoUy5pbmRleGVkLDEwKSxHLnJnYj1IdihHLmluZGV4LFIuSW5kZXhlZCkpLG51bGwhPVMudGhlbWUmJihHLnRoZW1lPXBhcnNlSW50KFMudGhlbWUsMTApKSxudWxsIT1TLnRpbnQmJihHLnRpbnQ9cGFyc2VGbG9hdChTLnRpbnQp''@;'; put 'put ''KSxudWxsIT1TLnJnYiYmKEcucmdiPVMucmdiLnNsaWNlKC02KSksbnVsbCE9Ry50aGVtZSYmIUcucmdiJiZrLnRoZW1lRWxlbWVudHMmJihHLnJnYj1fNShrLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW0cudGhlbWVdLnJnYixHLnRpbnR8fDApLEcucmF3X3JnYj1rLnRoZW1lRWxlbWVudHMu''@;'; put 'put ''Y2xyU2NoZW1lW0cudGhlbWVdLnJnYiksR31mdW5jdGlvbiBfQyhTLFIsayxHKXtSLkJvcmRlcnM9W107dmFyIFE9e30sYWU9e30sZ2U9ITE7KFNbMF0ubWF0Y2goZW4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihwZSl7dmFyIHllPXByKHBlKTtzd2l0Y2goV24oeWVbMF0pKXtjYXNlIjxib3Jk''@;'; put 'put ''ZXJzIjpjYXNlIjxib3JkZXJzPiI6Y2FzZSI8L2JvcmRlcnM+IjpjYXNlIjwvYm9yZGVyPiI6Y2FzZSI8bGVmdC8+IjpjYXNlIjwvbGVmdD4iOmNhc2UiPHJpZ2h0Lz4iOmNhc2UiPC9yaWdodD4iOmNhc2UiPHRvcC8+IjpjYXNlIjwvdG9wPiI6Y2FzZSI8Ym90dG9tLz4iOmNhc2UiPC9ib3R0''@;'; put 'put ''b20+IjpjYXNlIjxkaWFnb25hbCI6Y2FzZSI8ZGlhZ29uYWw+IjpjYXNlIjxkaWFnb25hbC8+IjpjYXNlIjxob3Jpem9udGFsIjpjYXNlIjxob3Jpem9udGFsPiI6Y2FzZSI8aG9yaXpvbnRhbC8+IjpjYXNlIjx2ZXJ0aWNhbCI6Y2FzZSI8dmVydGljYWw+IjpjYXNlIjx2ZXJ0aWNhbC8+Ijpj''@;'; put 'put ''YXNlIjxzdGFydCI6Y2FzZSI8c3RhcnQ+IjpjYXNlIjxzdGFydC8+IjpjYXNlIjwvc3RhcnQ+IjpjYXNlIjxlbmQiOmNhc2UiPGVuZD4iOmNhc2UiPGVuZC8+IjpjYXNlIjwvZW5kPiI6Y2FzZSI8Y29sb3IvPiI6Y2FzZSI8L2NvbG9yPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+Ijpj''@;'; put 'put ''YXNlIjwvZXh0THN0PiI6YnJlYWs7Y2FzZSI8Ym9yZGVyIjpjYXNlIjxib3JkZXI+IjpjYXNlIjxib3JkZXIvPiI6UT17fSx5ZS5kaWFnb25hbFVwJiYoUS5kaWFnb25hbFVwPWVpKHllLmRpYWdvbmFsVXApKSx5ZS5kaWFnb25hbERvd24mJihRLmRpYWdvbmFsRG93bj1laSh5ZS5kaWFnb25h''@;'; put 'put ''bERvd24pKSxSLkJvcmRlcnMucHVzaChRKTticmVhaztjYXNlIjxsZWZ0IjpjYXNlIjxsZWZ0PiI6YWU9US5sZWZ0PXt9LHllLnN0eWxlJiYoYWUuc3R5bGU9eWUuc3R5bGUpO2JyZWFrO2Nhc2UiPHJpZ2h0IjpjYXNlIjxyaWdodD4iOmFlPVEucmlnaHQ9e30seWUuc3R5bGUmJihhZS5zdHls''@;'; put 'put ''ZT15ZS5zdHlsZSk7YnJlYWs7Y2FzZSI8dG9wIjpjYXNlIjx0b3A+IjphZT1RLnRvcD17fSx5ZS5zdHlsZSYmKGFlLnN0eWxlPXllLnN0eWxlKTticmVhaztjYXNlIjxib3R0b20iOmNhc2UiPGJvdHRvbT4iOmFlPVEuYm90dG9tPXt9LHllLnN0eWxlJiYoYWUuc3R5bGU9eWUuc3R5bGUpO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiPC9kaWFnb25hbD4iOlEuZGlhZ29uYWw9YWUsYWU9e307YnJlYWs7Y2FzZSI8L2hvcml6b250YWw+IjpRLmhvcml6b250YWw9YWUsYWU9e307YnJlYWs7Y2FzZSI8L3ZlcnRpY2FsPiI6US52ZXJ0aWNhbD1hZSxhZT17fTticmVhaztjYXNlIjxjb2xvciI6Y2FzZSI8Y29sb3I+''@;'; put 'put ''IjphZS5jb2xvcnx8KGFlLmNvbG9yPXt9KSx5ZS5hdXRvJiYoYWUuY29sb3IuYXV0bz1laSh5ZS5hdXRvKSksbnVsbCE9eWUucmdiP2FlLmNvbG9yLnJnYj15ZS5yZ2Iuc2xpY2UoLTYpOnllLmluZGV4ZWQ/KGFlLmNvbG9yLmluZGV4PXBhcnNlSW50KHllLmluZGV4ZWQsMTApLGFlLmNvbG9y''@;'; put 'put ''LnJnYj1IdihhZS5jb2xvci5pbmRleCxSLkluZGV4ZWQsITEpKTp5ZS50aGVtZSYmKGFlLmNvbG9yLnRoZW1lPXBhcnNlSW50KHllLnRoZW1lLDEwKSx5ZS50aW50JiYoYWUuY29sb3IudGludD1wYXJzZUZsb2F0KHllLnRpbnQpKSx5ZS50aGVtZSYmay50aGVtZUVsZW1lbnRzJiZrLnRoZW1l''@;'; put 'put ''RWxlbWVudHMuY2xyU2NoZW1lJiYoYWUuY29sb3IucmdiPV81KGsudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbYWUuY29sb3IudGhlbWVdLnJnYixhZS5jb2xvci50aW50fHwwKSkpLCF5ZS5hdXRvJiZudWxsPT15ZS5yZ2ImJiF5ZS5pbmRleGVkJiZkZWxldGUgYWUuY29sb3I7YnJlYWs7Y2Fz''@;'; put 'put ''ZSI8ZXh0IjpnZT0hMDticmVhaztjYXNlIjwvZXh0PiI6Z2U9ITE7YnJlYWs7ZGVmYXVsdDppZihHJiZHLldURiYmIWdlKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIreWVbMF0rIiBpbiBib3JkZXJzIil9fSl9ZnVuY3Rpb24gazQoUyxSKXt2YXIgaz1bIjwiK1JdO3JldHVybiBT''@;'; put 'put ''JiZTLnN0eWxlPyhrLnB1c2goJyBzdHlsZT0iJytTLnN0eWxlKyciJyksUy5jb2xvcj8oay5wdXNoKCI+Iiksay5wdXNoKGdkKFMuY29sb3IsITApKSxrLmpvaW4oIiIpKyI8LyIrUisiPiIpOmsuam9pbigiIikrIi8+Iik6a1swXSsiLz4ifWZ1bmN0aW9uIEVWKFMsUixrLEcpe1IuRmlsbHM9''@;'; put 'put ''W107dmFyIFE9e30sYWU9e30sZ2U9ITEscGU9ITE7KFNbMF0ubWF0Y2goZW4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbih5ZSl7dmFyIFBlPXByKHllKTtzd2l0Y2goV24oUGVbMF0pKXtjYXNlIjxmaWxscyI6Y2FzZSI8ZmlsbHM+IjpjYXNlIjwvZmlsbHM+IjpjYXNlIjwvZmlsbD4iOmNhc2Ui''@;'; put 'put ''PC9ncmFkaWVudEZpbGw+IjpjYXNlIjxiZ0NvbG9yLz4iOmNhc2UiPC9iZ0NvbG9yPiI6Y2FzZSI8ZmdDb2xvci8+IjpjYXNlIjwvZmdDb2xvcj4iOmNhc2UiPGNvbG9yLz4iOmNhc2UiPC9jb2xvcj4iOmNhc2UiPHN0b3AvPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwv''@;'; put 'put ''ZXh0THN0PiI6YnJlYWs7Y2FzZSI8ZmlsbD4iOmNhc2UiPGZpbGwiOmNhc2UiPGZpbGwvPiI6Ui5GaWxscy5wdXNoKFE9e30pO2JyZWFrO2Nhc2UiPGdyYWRpZW50RmlsbD4iOlEuc3RvcHM9W107YnJlYWs7Y2FzZSI8Z3JhZGllbnRGaWxsIjpRLnN0b3BzPVtdLFBlLmRlZ3JlZSYmKFEuYW5n''@;'; put 'put ''bGU9K1BlLmRlZ3JlZSk7YnJlYWs7Y2FzZSI8cGF0dGVybkZpbGwiOmNhc2UiPHBhdHRlcm5GaWxsPiI6UGUucGF0dGVyblR5cGUmJihRLnBhdHRlcm5UeXBlPVBlLnBhdHRlcm5UeXBlKTticmVhaztjYXNlIjxwYXR0ZXJuRmlsbC8+IjpjYXNlIjwvcGF0dGVybkZpbGw+IjppZihnZSl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoImJhZCBzdG9wIik7YnJlYWs7Y2FzZSI8Y29sb3IiOmNhc2UiPGJnQ29sb3IiOmNhc2UiPGZnQ29sb3IiOnZhciBOZT1XbihQZVswXSkuc2xpY2UoMSk7ImNvbG9yIiE9TmUmJiFRW05lXSYmKFFbTmVdPXt9KTt2YXIgWWU9Z2U/YWU6UVtOZV07bnVsbCE9UGUuaW5kZXhl''@;'; put 'put ''ZCYmKFllLmluZGV4PXBhcnNlSW50KFBlLmluZGV4ZWQsMTApLFllLnJnYj1IdihZZS5pbmRleCxSLkluZGV4ZWQpKSxudWxsIT1QZS50aGVtZSYmKFllLnRoZW1lPXBhcnNlSW50KFBlLnRoZW1lLDEwKSksbnVsbCE9UGUudGludCYmKFllLnRpbnQ9cGFyc2VGbG9hdChQZS50aW50KSksbnVs''@;'; put 'put ''bCE9UGUucmdiJiYoWWUucmdiPVBlLnJnYi5zbGljZSgtNikpLG51bGwhPVBlLmF1dG8mJmRlbGV0ZSBRW05lXSxudWxsIT1ZZS50aGVtZSYmIVllLnJnYiYmay50aGVtZUVsZW1lbnRzJiYoWWUucmdiPV81KGsudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbWWUudGhlbWVdLnJnYixZZS50aW50''@;'; put 'put ''fHwwKSxHLldURiYmKFllLnJhd19yZ2I9ay50aGVtZUVsZW1lbnRzLmNsclNjaGVtZVtZZS50aGVtZV0ucmdiKSk7YnJlYWs7Y2FzZSI8c3RvcD4iOmdlPSEwLGFlPXt9O2JyZWFrO2Nhc2UiPHN0b3AiOmdlPSEwLGFlPXt9LG51bGwhPVBlLnBvc2l0aW9uJiYoYWUudj1wYXJzZUZsb2F0KFBl''@;'; put 'put ''LnBvc2l0aW9uKSk7YnJlYWs7Y2FzZSI8L3N0b3A+IjpnZT0hMSxRLnN0b3BzLnB1c2goYWUpO2JyZWFrO2Nhc2UiPGV4dCI6cGU9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOnBlPSExO2JyZWFrO2RlZmF1bHQ6aWYoRyYmRy5XVEYmJiFwZSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAi''@;'; put 'put ''K1BlWzBdKyIgaW4gZmlsbHMiKX19KX1mdW5jdGlvbiBUVihTLFIsayxHKXtSLkZvbnRzPVtdO3ZhciBRPXt9LGFlPSExOyhTWzBdLm1hdGNoKGVuKXx8W10pLmZvckVhY2goZnVuY3Rpb24oZ2Upe3ZhciBwZT1wcihnZSk7c3dpdGNoKFduKHBlWzBdKSl7Y2FzZSI8Zm9udHMiOmNhc2UiPGZv''@;'; put 'put ''bnRzPiI6Y2FzZSI8L2ZvbnRzPiI6YnJlYWs7Y2FzZSI8Zm9udCI6Y2FzZSI8Zm9udD4iOmlmKCIvPiIhPWdlLnNsaWNlKC0yKSlicmVhaztjYXNlIjwvZm9udD4iOmNhc2UiPGZvbnQvPiI6Ui5Gb250cy5wdXNoKFEpLFE9e307YnJlYWs7Y2FzZSI8bmFtZSI6cGUudmFsJiYoUS5uYW1lPWdh''@;'; put 'put ''KHBlLnZhbCkpO2JyZWFrO2Nhc2UiPG5hbWUvPiI6Y2FzZSI8L25hbWU+IjpicmVhaztjYXNlIjxiIjpRLmJvbGQ9cGUudmFsP2VpKHBlLnZhbCk6MTticmVhaztjYXNlIjxiLz4iOmNhc2UiPGI+IjpRLmJvbGQ9MTticmVhaztjYXNlIjwvYj4iOmJyZWFrO2Nhc2UiPGkiOlEuaXRhbGljPXBl''@;'; put 'put ''LnZhbD9laShwZS52YWwpOjE7YnJlYWs7Y2FzZSI8aS8+IjpjYXNlIjxpPiI6US5pdGFsaWM9MTticmVhaztjYXNlIjwvaT4iOmJyZWFrO2Nhc2UiPHUiOnN3aXRjaChwZS52YWwpe2Nhc2Uibm9uZSI6US51bmRlcmxpbmU9MDticmVhaztjYXNlInNpbmdsZSI6US51bmRlcmxpbmU9MTticmVh''@;'; put 'put ''aztjYXNlImRvdWJsZSI6US51bmRlcmxpbmU9MjticmVhaztjYXNlInNpbmdsZUFjY291bnRpbmciOlEudW5kZXJsaW5lPTMzO2JyZWFrO2Nhc2UiZG91YmxlQWNjb3VudGluZyI6US51bmRlcmxpbmU9MzR9YnJlYWs7Y2FzZSI8dS8+IjpjYXNlIjx1PiI6US51bmRlcmxpbmU9MTticmVhaztj''@;'; put 'put ''YXNlIjwvdT4iOmJyZWFrO2Nhc2UiPHN0cmlrZSI6US5zdHJpa2U9cGUudmFsP2VpKHBlLnZhbCk6MTticmVhaztjYXNlIjxzdHJpa2UvPiI6US5zdHJpa2U9MTticmVhaztjYXNlIjxvdXRsaW5lIjpRLm91dGxpbmU9cGUudmFsP2VpKHBlLnZhbCk6MTticmVhaztjYXNlIjxvdXRsaW5lLz4i''@;'; put 'put ''OlEub3V0bGluZT0xO2JyZWFrO2Nhc2UiPHNoYWRvdyI6US5zaGFkb3c9cGUudmFsP2VpKHBlLnZhbCk6MTticmVhaztjYXNlIjxzaGFkb3cvPiI6US5zaGFkb3c9MTticmVhaztjYXNlIjxjb25kZW5zZSI6US5jb25kZW5zZT1wZS52YWw/ZWkocGUudmFsKToxO2JyZWFrO2Nhc2UiPGNvbmRl''@;'; put 'put ''bnNlLz4iOlEuY29uZGVuc2U9MTticmVhaztjYXNlIjxleHRlbmQiOlEuZXh0ZW5kPXBlLnZhbD9laShwZS52YWwpOjE7YnJlYWs7Y2FzZSI8ZXh0ZW5kLz4iOlEuZXh0ZW5kPTE7YnJlYWs7Y2FzZSI8c3oiOnBlLnZhbCYmKFEuc3o9K3BlLnZhbCk7YnJlYWs7Y2FzZSI8c3ovPiI6Y2FzZSI8''@;'; put 'put ''L3N6PiI6YnJlYWs7Y2FzZSI8dmVydEFsaWduIjoibm9uZSIhPShwZS52YWx8fCJub25lIikmJihRLnZhbGlnbj1wZS52YWwucmVwbGFjZSgic2NyaXB0IiwiIikpO2JyZWFrO2Nhc2UiPHZlcnRBbGlnbi8+IjpjYXNlIjwvdmVydEFsaWduPiI6YnJlYWs7Y2FzZSI8ZmFtaWx5IjpwZS52YWwm''@;'; put 'put ''JihRLmZhbWlseT1wYXJzZUludChwZS52YWwsMTApKTticmVhaztjYXNlIjxmYW1pbHkvPiI6Y2FzZSI8L2ZhbWlseT4iOmJyZWFrO2Nhc2UiPHNjaGVtZSI6cGUudmFsJiYoUS5zY2hlbWU9cGUudmFsKTticmVhaztjYXNlIjxzY2hlbWUvPiI6Y2FzZSI8L3NjaGVtZT4iOmJyZWFrO2Nhc2Ui''@;'; put 'put ''PGNoYXJzZXQiOmlmKCIxIj09cGUudmFsKWJyZWFrO3BlLmNvZGVwYWdlPU5bcGFyc2VJbnQocGUudmFsLDEwKV07YnJlYWs7Y2FzZSI8Y29sb3IiOlEuY29sb3J8fChRLmNvbG9yPXt9KSxwZS5hdXRvJiYoUS5jb2xvci5hdXRvPWVpKHBlLmF1dG8pKSxwZS5yZ2I/US5jb2xvci5yZ2I9cGUu''@;'; put 'put ''cmdiLnNsaWNlKC02KTpwZS5pbmRleGVkPyhRLmNvbG9yLmluZGV4PXBhcnNlSW50KHBlLmluZGV4ZWQsMTApLFEuY29sb3IucmdiPUh2KFEuY29sb3IuaW5kZXgsUi5JbmRleGVkKSk6cGUudGhlbWUmJihRLmNvbG9yLnRoZW1lPXBhcnNlSW50KHBlLnRoZW1lLDEwKSxwZS50aW50JiYoUS5j''@;'; put 'put ''b2xvci50aW50PXBhcnNlRmxvYXQocGUudGludCkpLHBlLnRoZW1lJiZrLnRoZW1lRWxlbWVudHMmJmsudGhlbWVFbGVtZW50cy5jbHJTY2hlbWUmJihRLmNvbG9yLnJnYj1fNShrLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lW1EuY29sb3IudGhlbWVdLnJnYixRLmNvbG9yLnRpbnR8fDApKSk7''@;'; put 'put ''YnJlYWs7Y2FzZSI8Y29sb3IvPiI6Y2FzZSI8L2NvbG9yPiI6YnJlYWs7Y2FzZSI8QWx0ZXJuYXRlQ29udGVudCI6YWU9ITA7YnJlYWs7Y2FzZSI8L0FsdGVybmF0ZUNvbnRlbnQ+IjphZT0hMTticmVhaztjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVh''@;'; put 'put ''aztjYXNlIjxleHQiOmFlPSEwO2JyZWFrO2Nhc2UiPC9leHQ+IjphZT0hMTticmVhaztkZWZhdWx0OmlmKEcmJkcuV1RGJiYhYWUpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitwZVswXSsiIGluIGZvbnRzIil9fSl9dmFyIHg1PXswOiJub25lIiwxOiJzaW5nbGUiLDI6ImRvdWJs''@;'; put 'put ''ZSIsMzM6InNpbmdsZUFjY291bnRpbmciLDM0OiJkb3VibGVBY2NvdW50aW5nIn0sVjM9WyJudW1GbXRJZCIsImZpbGxJZCIsImZvbnRJZCIsImJvcmRlcklkIiwieGZJZCJdLEIzPVsiYXBwbHlBbGlnbm1lbnQiLCJhcHBseUJvcmRlciIsImFwcGx5RmlsbCIsImFwcGx5Rm9udCIsImFwcGx5''@;'; put 'put ''TnVtYmVyRm9ybWF0IiwiYXBwbHlQcm90ZWN0aW9uIiwicGl2b3RCdXR0b24iLCJxdW90ZVByZWZpeCJdLEQ0PWZ1bmN0aW9uKCl7dmFyIFM9LzwoPzpcdys6KT9mb250KFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2ZvbnQ+LyxSPS88KD86XHcrOik/bnVtRm10KFtePl0qKVwvPi8saz0v''@;'; put 'put ''PCg/Olx3KzopP2ZpbGwoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/ZmlsbD4vLFE9LzwoPzpcdys6KT9ib3JkZXIoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Ym9yZGVyPi87cmV0dXJuIGZ1bmN0aW9uKHBlLHllLFBlLE5lKXt2YXIgdXQsRXQsWWU9e30sZXQ9e307cmV0dXJuKHV0''@;'; put 'put ''PXBlLm1hdGNoKFMpKSYmKFRWKHV0LFllLFBlLE5lKSwoWWUuRm9udHN8fFtdKVswXSYmUHQoZXQsWWUuRm9udHNbMF0pKSwodXQ9cGUubWF0Y2goUikpJiYoRXQ9cHIoZ2EodXRbMF0pKSxldC56PUV0LmZvcm1hdENvZGU/SnIoRXQuZm9ybWF0Q29kZSk6KHllLk51bWJlckZtdHx8W10pWytF''@;'; put 'put ''dC5udW1GbXRJZF18fCJHZW5lcmFsIiksKHV0PXBlLm1hdGNoKGspKSYmKEVWKHV0LFllLFBlLE5lKSwoWWUuRmlsbHN8fFtdKVswXSYmUHQoZXQsWWUuRmlsbHNbMF0pKSwodXQ9cGUubWF0Y2goUSkpJiYoX0ModXQsWWUsUGUsTmUpLChZZS5Cb3JkZXJzfHxbXSlbMF0mJlB0KGV0LFllLkJv''@;'; put 'put ''cmRlcnNbMF0pKSxldH19KCksZW89LzwoPzpcdys6KT9keGY+W1xTXHNdKj88XC8oPzpcdys6KT9keGY+L2cscXI9LzwoPzpcdys6KT90YWJsZVN0eWxlXGIuKj8+W1xTXHNdKj88XC8oPzpcdys6KT90YWJsZVN0eWxlPi9nO3ZhciBoaz1mdW5jdGlvbigpe3ZhciBSPS88KD86XHcrOik/bnVt''@;'; put 'put ''Rm10cyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9udW1GbXRzPi8saz0vPCg/Olx3KzopP2NlbGxTdHlsZVhmcyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9jZWxsU3R5bGVYZnM+LyxHPS88KD86XHcrOik/Y2VsbFN0eWxlcyhbXj5dKik+W1xTXHNdKj88XC8oPzpcdys6KT9jZWxs''@;'; put 'put ''U3R5bGVzPi8sUT0vPCg/Olx3KzopP2NlbGxYZnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/Y2VsbFhmcz4vLGFlPS88KD86XHcrOik/ZmlsbHMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/ZmlsbHM+LyxnZT0vPCg/Olx3KzopP2ZvbnRzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3''@;'; put 'put ''KzopP2ZvbnRzPi8scGU9LzwoPzpcdys6KT9ib3JkZXJzKFtePl0qKT5bXFNcc10qPzxcLyg/Olx3KzopP2JvcmRlcnM+Lyx5ZT0vPCg/Olx3KzopP2luZGV4ZWRDb2xvcnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/aW5kZXhlZENvbG9ycz4vLFBlPS88KD86XHcrOik/dGFibGVTdHls''@;'; put 'put ''ZXMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/dGFibGVTdHlsZXM+LyxOZT0vPCg/Olx3KzopP2R4ZnMoW14+XSopPltcU1xzXSo/PFwvKD86XHcrOik/ZHhmcz4vO3JldHVybiBmdW5jdGlvbihldCx1dCxFdCl7dmFyIGJ0LG90PXt9O3JldHVybiBldD8oKGJ0PShldD1ldC5yZXBsYWNl''@;'; put 'put ''KC88IS0tKFtcc1xTXSo/KS0tPi9nbSwiIikucmVwbGFjZSgvPCFET0NUWVBFW15cW10qXFtbXlxdXSpcXT4vZ20sIiIpKS5tYXRjaCh5ZSkpJiZmdW5jdGlvbiBBVihTLFIsayl7Ui5JbmRleGVkfHwoUi5JbmRleGVkPVtdKTt2YXIgRz0hMTsoU1swXS5tYXRjaChlbil8fFtdKS5mb3JFYWNo''@;'; put 'put ''KGZ1bmN0aW9uKFEpe3ZhciBhZT1wcihRKTtzd2l0Y2goV24oYWVbMF0pKXtjYXNlIjxpbmRleGVkQ29sb3JzPiI6Y2FzZSI8aW5kZXhlZENvbG9ycyI6Y2FzZSI8aW5kZXhlZENvbG9ycy8+IjpjYXNlIjwvaW5kZXhlZENvbG9ycz4iOmNhc2UiPC9yZ2JDb2xvcj4iOmNhc2UiPGV4dExzdCI6''@;'; put 'put ''Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPHJnYkNvbG9yIjpkZWxldGUgYWVbMF07dmFyIGdlPXBhcnNlSW50KGFlLnJnYi5zbGljZSgtNiksMTYpO1IuSW5kZXhlZC5wdXNoKFtnZT4+MTYmMjU1LGdlPj44JjI1NSwyNTUmZ2VdKTticmVhaztjYXNlIjxleHQi''@;'; put 'put ''Okc9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOkc9ITE7YnJlYWs7ZGVmYXVsdDppZihrJiZrLldURiYmIUcpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIithZVswXSsiIGluIGNlbGxTdHlsZXMiKX19KX0oYnQsb3QsRXQpLChidD1ldC5tYXRjaChSKSkmJmZ1bmN0aW9uIGNrKFMsUixr''@;'; put 'put ''KXtSLk51bWJlckZtdD1bXTtmb3IodmFyIEc9UmUoQS5fdGFibGUpLFE9MDtRPEcubGVuZ3RoOysrUSlSLk51bWJlckZtdFtHW1FdXT1BLl90YWJsZVtHW1FdXTt2YXIgYWU9U1swXS5tYXRjaChlbik7aWYoYWUpZm9yKFE9MDtRPGFlLmxlbmd0aDsrK1Epe3ZhciBnZT1wcihhZVtRXSk7c3dp''@;'; put 'put ''dGNoKFduKGdlWzBdKSl7Y2FzZSI8bnVtRm10cyI6Y2FzZSI8L251bUZtdHM+IjpjYXNlIjxudW1GbXRzLz4iOmNhc2UiPG51bUZtdHM+IjpjYXNlIjwvbnVtRm10PiI6YnJlYWs7Y2FzZSI8bnVtRm10Ijp2YXIgcGU9SnIoZ2EoZ2UuZm9ybWF0Q29kZSkpLHllPXBhcnNlSW50KGdlLm51bUZt''@;'; put 'put ''dElkLDEwKTtpZihSLk51bWJlckZtdFt5ZV09cGUseWU+MCl7aWYoeWU+MzkyKXtmb3IoeWU9MzkyO3llPjYwJiZudWxsIT1SLk51bWJlckZtdFt5ZV07LS15ZSk7Ui5OdW1iZXJGbXRbeWVdPXBlfUEubG9hZChwZSx5ZSl9YnJlYWs7ZGVmYXVsdDppZihrLldURil0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''InVucmVjb2duaXplZCAiK2dlWzBdKyIgaW4gbnVtRm10cyIpfX19KGJ0LG90LEV0KSwoYnQ9ZXQubWF0Y2goZ2UpKSYmVFYoYnQsb3QsdXQsRXQpLChidD1ldC5tYXRjaChhZSkpJiZFVihidCxvdCx1dCxFdCksKGJ0PWV0Lm1hdGNoKHBlKSkmJl9DKGJ0LG90LHV0LEV0KSwoYnQ9ZXQubWF0''@;'; put 'put ''Y2goaykpJiZmdW5jdGlvbiBZdGUoUyxSLGspe1IuQ2VsbFN0eWxlWGY9W107dmFyIEcsUT0hMTsoU1swXS5tYXRjaChlbil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGFlKXt2YXIgZ2U9cHIoYWUpLHBlPTA7c3dpdGNoKFduKGdlWzBdKSl7Y2FzZSI8Y2VsbFN0eWxlWGZzIjpjYXNlIjxjZWxs''@;'; put 'put ''U3R5bGVYZnM+IjpjYXNlIjxjZWxsU3R5bGVYZnMvPiI6Y2FzZSI8L2NlbGxTdHlsZVhmcz4iOmNhc2UiPC94Zj4iOmNhc2UiPC9hbGlnbm1lbnQ+IjpjYXNlIjwvcHJvdGVjdGlvbj4iOmNhc2UiPHByb3RlY3Rpb24vPiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0''@;'; put 'put ''THN0PiI6YnJlYWs7Y2FzZSI8eGYiOmNhc2UiPHhmLz4iOmZvcihkZWxldGUoRz1nZSlbMF0scGU9MDtwZTxWMy5sZW5ndGg7KytwZSlHW1YzW3BlXV0mJihHW1YzW3BlXV09cGFyc2VJbnQoR1tWM1twZV1dLDEwKSk7Zm9yKHBlPTA7cGU8QjMubGVuZ3RoOysrcGUpR1tCM1twZV1dJiYoR1tC''@;'; put 'put ''M1twZV1dPWVpKEdbQjNbcGVdXSkpO2lmKFIuTnVtYmVyRm10JiZHLm51bUZtdElkPjM5Milmb3IocGU9MzkyO3BlPjYwOy0tcGUpaWYoUi5OdW1iZXJGbXRbRy5udW1GbXRJZF09PVIuTnVtYmVyRm10W3BlXSl7Ry5udW1GbXRJZD1wZTticmVha31SLkNlbGxTdHlsZVhmLnB1c2goRyk7YnJl''@;'; put 'put ''YWs7Y2FzZSI8YWxpZ25tZW50IjpjYXNlIjxhbGlnbm1lbnQvPiI6dmFyIHllPXt9O2dlLnZlcnRpY2FsJiYoeWUudmVydGljYWw9Z2UudmVydGljYWwpLGdlLmhvcml6b250YWwmJih5ZS5ob3Jpem9udGFsPWdlLmhvcml6b250YWwpLG51bGwhPWdlLnRleHRSb3RhdGlvbiYmKHllLnRleHRS''@;'; put 'put ''b3RhdGlvbj1nZS50ZXh0Um90YXRpb24pLGdlLmluZGVudCYmKHllLmluZGVudD1nZS5pbmRlbnQpLGdlLndyYXBUZXh0JiYoeWUud3JhcFRleHQ9Z2Uud3JhcFRleHQpLGdlLnNocmlua1RvRml0JiYoeWUuc2hyaW5rVG9GaXQ9ZWkoZ2Uuc2hyaW5rVG9GaXQpKSxHLmFsaWdubWVudD15ZTti''@;'; put 'put ''cmVhaztjYXNlIjxwcm90ZWN0aW9uIjpHLnByb3RlY3Rpb249e30sZWkoZ2UuaGlkZGVuKSYmKEcucHJvdGVjdGlvbi5oaWRkZW49ITApLG51bGwhPWdlLmxvY2tlZCYmKEcucHJvdGVjdGlvbi5lZGl0YWJsZT0hZWkoZ2UubG9ja2VkKSk7YnJlYWs7Y2FzZSI8ZXh0IjpRPSEwO2JyZWFrO2Nh''@;'; put 'put ''c2UiPC9leHQ+IjpRPSExO2JyZWFrO2RlZmF1bHQ6aWYoayYmay5XVEYmJiFRKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIrZ2VbMF0rIiBpbiBjZWxsU3R5bGVYZnMiKX19KX0oYnQsb3QsRXQpLChidD1ldC5tYXRjaChHKSkmJmZ1bmN0aW9uICR0ZShTLFIsayl7Ui5DZWxsU3R5''@;'; put 'put ''bGVYZnx8KFIuQ2VsbFN0eWxlWGY9W10pO3ZhciBHPSExOyhTWzBdLm1hdGNoKGVuKXx8W10pLmZvckVhY2goZnVuY3Rpb24oUSl7dmFyIGFlPXByKFEpO3N3aXRjaChXbihhZVswXSkpe2Nhc2UiPGNlbGxTdHlsZXMiOmNhc2UiPGNlbGxTdHlsZXM+IjpjYXNlIjxjZWxsU3R5bGVzLz4iOmNh''@;'; put 'put ''c2UiPC9jZWxsU3R5bGVzPiI6Y2FzZSI8L3hmPiI6Y2FzZSI8L2NlbGxTdHlsZT4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGNlbGxTdHlsZSI6Y2FzZSI8Y2VsbFN0eWxlLz4iOmRlbGV0ZSBhZVswXTt2YXIgZ2U9K2FlLnhmSWQ7''@;'; put 'put ''aWYoUi5DZWxsU3R5bGVYZltnZV0pUi5DZWxsU3R5bGVYZltnZV0uc3R5bGU9Z2EoYWUubmFtZSk7ZWxzZSBpZighYWUuYnVpbHRpbklkKXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90IGZpbmQgQ2VsbFN0eWxlICIrZ2UpO2JyZWFrO2Nhc2UiPGV4dCI6Rz0hMDticmVhaztjYXNlIjwvZXh0''@;'; put 'put ''PiI6Rz0hMTticmVhaztkZWZhdWx0OmlmKGsmJmsuV1RGJiYhRyl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK2FlWzBdKyIgaW4gY2VsbFN0eWxlcyIpfX0pfShidCxvdCxFdCksKGJ0PWV0Lm1hdGNoKFEpKSYmZnVuY3Rpb24gdWsoUyxSLGspe1IuQ2VsbFhmPVtdO3ZhciBHLFE9''@;'; put 'put ''ITE7KFNbMF0ubWF0Y2goZW4pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihhZSl7dmFyIGdlPXByKGFlKSxwZT0wO3N3aXRjaChXbihnZVswXSkpe2Nhc2UiPGNlbGxYZnMiOmNhc2UiPGNlbGxYZnM+IjpjYXNlIjxjZWxsWGZzLz4iOmNhc2UiPC9jZWxsWGZzPiI6Y2FzZSI8L3hmPiI6Y2FzZSI8''@;'; put 'put ''L2FsaWdubWVudD4iOmNhc2UiPC9wcm90ZWN0aW9uPiI6Y2FzZSI8cHJvdGVjdGlvbi8+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9leHRMc3Q+IjpicmVhaztjYXNlIjx4ZiI6Y2FzZSI8eGYvPiI6Zm9yKGRlbGV0ZShHPWdlKVswXSxwZT0wO3BlPFYzLmxlbmd0aDsr''@;'; put 'put ''K3BlKUdbVjNbcGVdXSYmKEdbVjNbcGVdXT1wYXJzZUludChHW1YzW3BlXV0sMTApKTtmb3IocGU9MDtwZTxCMy5sZW5ndGg7KytwZSlHW0IzW3BlXV0mJihHW0IzW3BlXV09ZWkoR1tCM1twZV1dKSk7aWYoUi5OdW1iZXJGbXQmJkcubnVtRm10SWQ+MzkyKWZvcihwZT0zOTI7cGU+NjA7LS1w''@;'; put 'put ''ZSlpZihSLk51bWJlckZtdFtHLm51bUZtdElkXT09Ui5OdW1iZXJGbXRbcGVdKXtHLm51bUZtdElkPXBlO2JyZWFrfVIuQ2VsbFN0eWxlWGYmJkcueGZJZCYmUi5DZWxsU3R5bGVYZltHLnhmSWRdJiZSLkNlbGxTdHlsZVhmW0cueGZJZF0uc3R5bGUmJihHLnN0eWxlPVIuQ2VsbFN0eWxlWGZb''@;'; put 'put ''Ry54ZklkXS5zdHlsZSksUi5DZWxsWGYucHVzaChHKTticmVhaztjYXNlIjxhbGlnbm1lbnQiOmNhc2UiPGFsaWdubWVudC8+Ijp2YXIgeWU9e307Z2UudmVydGljYWwmJih5ZS52ZXJ0aWNhbD1nZS52ZXJ0aWNhbCksZ2UuaG9yaXpvbnRhbCYmKHllLmhvcml6b250YWw9Z2UuaG9yaXpvbnRh''@;'; put 'put ''bCksbnVsbCE9Z2UudGV4dFJvdGF0aW9uJiYoeWUudGV4dFJvdGF0aW9uPWdlLnRleHRSb3RhdGlvbiksZ2UuaW5kZW50JiYoeWUuaW5kZW50PWdlLmluZGVudCksZ2Uud3JhcFRleHQmJih5ZS53cmFwVGV4dD1laShnZS53cmFwVGV4dCkpLGdlLnNocmlua1RvRml0JiYoeWUuc2hyaW5rVG9G''@;'; put 'put ''aXQ9ZWkoZ2Uuc2hyaW5rVG9GaXQpKSxHLmFsaWdubWVudD15ZTticmVhaztjYXNlIjxwcm90ZWN0aW9uIjpHLnByb3RlY3Rpb249e30sZWkoZ2UuaGlkZGVuKSYmKEcucHJvdGVjdGlvbi5oaWRkZW49ITApLG51bGwhPWdlLmxvY2tlZCYmKEcucHJvdGVjdGlvbi5lZGl0YWJsZT0hZWkoZ2Uu''@;'; put 'put ''bG9ja2VkKSk7YnJlYWs7Y2FzZSI8QWx0ZXJuYXRlQ29udGVudCI6Y2FzZSI8ZXh0IjpRPSEwO2JyZWFrO2Nhc2UiPC9BbHRlcm5hdGVDb250ZW50PiI6Y2FzZSI8L2V4dD4iOlE9ITE7YnJlYWs7ZGVmYXVsdDppZihrJiZrLldURiYmIVEpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQg''@;'; put 'put ''IitnZVswXSsiIGluIGNlbGxYZnMiKX19KX0oYnQsb3QsRXQpLChidD1ldC5tYXRjaChOZSkpJiZmdW5jdGlvbiBkayhTLFIsayxHKXtSLkRYRnx8KFIuRFhGPVtdKSwoU1swXS5tYXRjaChlbyl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFEpe1IuRFhGLnB1c2goRDQoUSxSLGssRykpfSl9KGJ0''@;'; put 'put ''LG90LHV0LEV0KSwoYnQ9ZXQubWF0Y2goUGUpKSYmZnVuY3Rpb24gRFYoUyxSLGssRyl7Ui5UYWJsZXx8KFIuVGFibGU9W10pLChTWzBdLm1hdGNoKHFyKXx8W10pLmZvckVhY2goZnVuY3Rpb24oUSl7Ui5UYWJsZS5wdXNoKGZ1bmN0aW9uIGtWKFMsUixrLEcpe3ZhciBRPSExLGFlPXt9O3Jl''@;'; put 'put ''dHVybihTLm1hdGNoKGVuKXx8W10pLmZvckVhY2goZnVuY3Rpb24oZ2Upe3ZhciBwZT1wcihnZSk7c3dpdGNoKFduKHBlWzBdKSl7Y2FzZSI8dGFibGVTdHlsZT4iOmNhc2UiPHRhYmxlU3R5bGUiOmFlLm5hbWU9cGUubmFtZS5yZXBsYWNlKC9eKFRhYmxlfFBpdm90KVN0eWxlLywiIiksYWUu''@;'; put 'put ''cmF3bmFtZT1wZS5uYW1lLGFlLnBpdm90PSFwZS5waXZvdHx8ZWkocGUucGl2b3QpLGFlLnRhYmxlPSFwZS50YWJsZXx8ZWkocGUudGFibGUpO2JyZWFrO2Nhc2UiPHRhYmxlU3R5bGUvPiI6Y2FzZSI8L3RhYmxlU3R5bGU+IjpjYXNlIjxleHRMc3QiOmNhc2UiPGV4dExzdD4iOmNhc2UiPC9l''@;'; put 'put ''eHRMc3Q+IjpicmVhaztjYXNlIjx0YWJsZVN0eWxlRWxlbWVudCI6aWYocGUudHlwZSYmcGUuZHhmSWQpe2lmKCFSLkRYRnx8IVIuRFhGWytwZS5keGZJZF0pdGhyb3cgbmV3IEVycm9yKGdlKyIgY2Fubm90IGZpbmQgRFhGIik7YWVbcGUudHlwZV09Ui5EWEZbK3BlLmR4ZklkXX1icmVhaztj''@;'; put 'put ''YXNlIjxleHQiOlE9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOlE9ITE7YnJlYWs7ZGVmYXVsdDppZihHJiZHLldURiYmIVEpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitwZVswXSsiIGluIHRhYmxlU3R5bGUiKX19KSxhZX0oUSxSLDAsRykpfSl9KGJ0LG90LDAsRXQpLChvdC5Gb250''@;'; put 'put ''c3x8W10pWzBdJiZBNChvdC5Gb250c1swXSksb3QpOm90fX0oKSxmaz1Gcigic3R5bGVTaGVldCIsbnVsbCx7eG1sbnM6R2kubWFpblswXSwieG1sbnM6dnQiOkdpLnZ0fSk7ZnVuY3Rpb24gTnYoUyxSKXt2YXIgRyxrPVtJaSxma107Uy5TU0YmJm51bGwhPShHPWZ1bmN0aW9uIEU1KFMpe3Zh''@;'; put 'put ''ciBSPVsiPG51bUZtdHM+Il07cmV0dXJuW1s1LDhdLFsyMywyNl0sWzQxLDQ0XSxbNTAsMzkyXV0uZm9yRWFjaChmdW5jdGlvbihrKXtmb3IodmFyIEc9a1swXTtHPD1rWzFdOysrRyludWxsIT1TW0ddJiYoUltSLmxlbmd0aF09RnIoIm51bUZtdCIsbnVsbCx7bnVtRm10SWQ6Ryxmb3JtYXRD''@;'; put 'put ''b2RlOk9yKFNbR10pfSkpfSksMT09PVIubGVuZ3RoPyIiOihSW1IubGVuZ3RoXT0iPC9udW1GbXRzPiIsUlswXT1GcigibnVtRm10cyIsbnVsbCx7Y291bnQ6Ui5sZW5ndGgtMn0pLnJlcGxhY2UoIi8+IiwiPiIpLFIuam9pbigiIikpfShTLlNTRikpJiYoa1trLmxlbmd0aF09Ryksa1trLmxl''@;'; put 'put ''bmd0aF09ZnVuY3Rpb24gdTIoUyl7dmFyIFI9W107cmV0dXJuIFMuZm9yRWFjaChmdW5jdGlvbihrKXt2YXIgRz1bIjxmb250PiJdO2suYm9sZCYmRy5wdXNoKCI8Yi8+Iiksay5pdGFsaWMmJkcucHVzaCgiPGkvPiIpLGsuc3RyaWtlJiZHLnB1c2goIjxzdHJpa2UvPiIpLGsuc2hhZG93JiZH''@;'; put 'put ''LnB1c2goIjxzaGFkb3cvPiIpLHg1WytrLnVuZGVybGluZV0mJkcucHVzaCgnPHUgdmFsPSInK3g1WytrLnVuZGVybGluZV0rJyIvPicpLGsuc3omJkcucHVzaCgnPHN6IHZhbD0iJytrLnN6KyciLz4nKSxrLmNvbG9yJiZHLnB1c2goZ2Qoay5jb2xvciwhMCkpLGsubmFtZSYmRy5wdXNoKCc8''@;'; put 'put ''bmFtZSB2YWw9Iicray5uYW1lKyciLz4nKSxrLmZhbWlseSYmRy5wdXNoKCc8ZmFtaWx5IHZhbD0iJytrLmZhbWlseSsnIi8+Jyksay5zY2hlbWUmJkcucHVzaCgnPHNjaGVtZSB2YWw9Iicray5zY2hlbWUrJyIvPicpLGsudmFsaWduJiZHLnB1c2goJzx2ZXJ0QWxpZ24gdmFsPSInK2sudmFs''@;'; put 'put ''aWduKygic3ViIj09ay52YWxpZ258fCJzdXBlciI9PWsudmFsaWduPyJzY3JpcHQiOiIiKSsnIi8+JyksUi5wdXNoKEcuam9pbigiIikrIjwvZm9udD4iKX0pLCc8Zm9udHMgY291bnQ9IicrUi5sZW5ndGgrJyI+JytSLmpvaW4oIiIpKyI8L2ZvbnRzPiJ9KChTLlN0eWxlc3x8e30pLkZvbnRz''@;'; put 'put ''fHxbXSksa1trLmxlbmd0aF09ZnVuY3Rpb24gbGsoUyl7dmFyIFI9W107cmV0dXJuIFMuZm9yRWFjaChmdW5jdGlvbihrKXt2YXIgRz1udWxsO2lmKGsuc3RvcHMmJmsuc3RvcHMubGVuZ3RoKXt2YXIgUT17fTtrLmFuZ2xlJiYoUS5kZWdyZWU9TWF0aC5yb3VuZChrLmFuZ2xlKSksRz1rLnN0''@;'; put 'put ''b3BzLm1hcChmdW5jdGlvbihhZSl7cmV0dXJuIEZyKCJzdG9wIixnZChhZSwiY29sb3IiLCEwKSxudWxsIT1hZS52P3twb3NpdGlvbjphZS52fTp7fSl9KSxSLnB1c2goIjxmaWxsPiIrRnIoImdyYWRpZW50RmlsbCIsRy5qb2luKCIiKSxRKSsiPC9maWxsPiIpfWVsc2V7aWYoay5mZ0NvbG9y''@;'; put 'put ''KXtpZihHPShHfHwiIikrIjxmZ0NvbG9yICIsay5mZ0NvbG9yLnRoZW1lKUcrPSd0aGVtZT0iJytrLmZnQ29sb3IudGhlbWUrJyInKyhrLmZnQ29sb3IudGludD8nIHRpbnQ9Iicray5mZ0NvbG9yLnRpbnQrJyInOiIiKSsiLz4iO2Vsc2UgaWYobnVsbCE9ay5mZ0NvbG9yLmluZGV4JiZudWxs''@;'; put 'put ''PT1rLmZnQ29sb3IucmdiKUcrPSdpbmRleGVkPSInK2suZmdDb2xvci5pbmRleCsnIi8+JztlbHNlIGlmKGsuZmdDb2xvci5hdXRvKUcrPSdhdXRvPSIxIi8+JztlbHNle2lmKG51bGw9PWsuZmdDb2xvci5yZ2IpdGhyb3cgbmV3IEVycm9yKCJCYWQgY29sb3IgIitSZShrLmZnQ29sb3IpLmpv''@;'; put 'put ''aW4oInwiKSk7Rys9J3JnYj0iRkYnK1AwKGsuZmdDb2xvci5yZ2IpKyciLz4nfSJzb2xpZCI9PWsucGF0dGVyblR5cGUmJiFrLmJnQ29sb3ImJihrLmJnQ29sb3I9e2luZGV4OjY0fSl9aWYoay5iZ0NvbG9yKWlmKEc9KEd8fCIiKSsiPGJnQ29sb3IgIixrLmJnQ29sb3IudGhlbWUpRys9J3Ro''@;'; put 'put ''ZW1lPSInK2suYmdDb2xvci50aGVtZSsnIi8+JztlbHNlIGlmKG51bGwhPWsuYmdDb2xvci5pbmRleCYmbnVsbD09ay5iZ0NvbG9yLnJnYilHKz0naW5kZXhlZD0iJytrLmJnQ29sb3IuaW5kZXgrJyIvPic7ZWxzZSBpZihrLmJnQ29sb3IuYXV0bylHKz0nYXV0bz0iMSIvPic7ZWxzZXtpZihu''@;'; put 'put ''dWxsPT1rLmJnQ29sb3IucmdiKXRocm93IG5ldyBFcnJvcigiQmFkIGNvbG9yICIrUmUoay5iZ0NvbG9yKS5qb2luKCJ8IikpO0crPSdyZ2I9IkZGJytQMChrLmJnQ29sb3IucmdiKSsnIi8+J31SLnB1c2goIjxmaWxsPiIrRnIoInBhdHRlcm5GaWxsIixHLHtwYXR0ZXJuVHlwZTprLnBhdHRl''@;'; put 'put ''cm5UeXBlfSkrIjwvZmlsbD4iKX19KSwnPGZpbGxzIGNvdW50PSInK1IubGVuZ3RoKyciPicrUi5qb2luKCIiKSsiPC9maWxscz4ifSgoUy5TdHlsZXN8fHt9KS5GaWxsc3x8W10pLGtbay5sZW5ndGhdPWZ1bmN0aW9uIERzKFMpe3ZhciBSPVtdO3JldHVybiBTLmZvckVhY2goZnVuY3Rpb24o''@;'; put 'put ''ayl7dmFyIEc9W107Ry5wdXNoKGs0KGsubGVmdCwibGVmdCIpKSxHLnB1c2goazQoay5yaWdodCwicmlnaHQiKSksRy5wdXNoKGs0KGsudG9wLCJ0b3AiKSksRy5wdXNoKGs0KGsuYm90dG9tLCJib3R0b20iKSksRy5wdXNoKGs0KGsuZGlhZ29uYWwsImRpYWdvbmFsIikpLFIucHVzaCgiPGJv''@;'; put 'put ''cmRlcj4iK0cuam9pbigiIikrIjwvYm9yZGVyPiIpfSksJzxib3JkZXJzIGNvdW50PSInK1IubGVuZ3RoKyciPicrUi5qb2luKCIiKSsiPC9ib3JkZXJzPiJ9KChTLlN0eWxlc3x8e30pLkJvcmRlcnN8fFtdKSxrW2subGVuZ3RoXT1mdW5jdGlvbiBHdGUoUyl7dmFyIFI9Wyc8eGYgbnVtRm10''@;'; put 'put ''SWQ9IjAiIGZvbnRJZD0iMCIgZmlsbElkPSIwIiBib3JkZXJJZD0iMCIvPiddO2lmKFMpZm9yKHZhciBrPTE7azxTLmxlbmd0aDsrK2spUi5wdXNoKEZyKCJ4ZiIsbnVsbCx7bnVtRm10SWQ6U1trXS5udW1GbXRJZHx8MCxmb250SWQ6U1trXS5mb250SWR8fDAsZmlsbElkOlNba10uZmlsbElk''@;'; put 'put ''fHwwLGJvcmRlcklkOlNba10uYm9yZGVySWR8fDB9KSk7cmV0dXJuJzxjZWxsU3R5bGVYZnMgY291bnQ9IicrUi5sZW5ndGgrJyI+JytSLmpvaW4oIiIpKyI8L2NlbGxTdHlsZVhmcz4ifShSLmNlbGxTdHlsZVhmcyksKEc9ZnVuY3Rpb24gV3RlKFMpe3ZhciBSPVtdO3JldHVybiBSW1IubGVu''@;'; put 'put ''Z3RoXT1GcigiY2VsbFhmcyIsbnVsbCksUy5mb3JFYWNoKGZ1bmN0aW9uKGspe3ZhciBHPWsuYWxpZ25tZW50O2RlbGV0ZSBrLmFsaWdubWVudDt2YXIgUT1rLnByb3RlY3Rpb247ZGVsZXRlIGsucHJvdGVjdGlvbjt2YXIgYWU9Rz9GcigiYWxpZ25tZW50IixudWxsLEcpOiIiO2FlKz1RP0Zy''@;'; put 'put ''KCJwcm90ZWN0aW9uIixudWxsLHtoaWRkZW46US5oaWRkZW4/MTowLGxvY2tlZDpRLmVkaXRhYmxlPzA6MX0pOiIiLFJbUi5sZW5ndGhdPUZyKCJ4ZiIsYWV8fG51bGwsayksRyYmKGsuYWxpZ25tZW50PUcpLFEmJihrLnByb3RlY3Rpb249USl9KSxSW1IubGVuZ3RoXT0iPC9jZWxsWGZzPiIs''@;'; put 'put ''Mj09PVIubGVuZ3RoPyIiOihSWzBdPUZyKCJjZWxsWGZzIixudWxsLHtjb3VudDpSLmxlbmd0aC0yfSkucmVwbGFjZSgiLz4iLCI+IiksUi5qb2luKCIiKSl9KFIuY2VsbFhmcykpJiYoa1trLmxlbmd0aF09Ryksa1trLmxlbmd0aF09ZnVuY3Rpb24gS3RlKFMpe3ZhciBSPVsnPGNlbGxTdHls''@;'; put 'put ''ZSBuYW1lPSJOb3JtYWwiIHhmSWQ9IjAiIGJ1aWx0aW5JZD0iMCIvPiddO2lmKFMpZm9yKHZhciBrPTE7azxTLmxlbmd0aDsrK2spUi5wdXNoKEZyKCJjZWxsU3R5bGUiLG51bGwse25hbWU6U1trXS5uYW1lLHhmSWQ6a30pKTtyZXR1cm4nPGNlbGxTdHlsZXMgY291bnQ9IicrUi5sZW5ndGgr''@;'; put 'put ''JyI+JytSLmpvaW4oIiIpKyI8L2NlbGxTdHlsZXM+In0oUi5jZWxsU3R5bGVYZnMpLFMuU3R5bGVzLkRYRnx8KFMuU3R5bGVzLkRYRj1bXSk7dmFyIFE9ZnVuY3Rpb24gZmQoUyxSLGspe3ZhciBHPVsnPHRhYmxlU3R5bGVzIGNvdW50PSInKyhTfHxbXSkubGVuZ3RoKyciIGRlZmF1bHRUYWJs''@;'; put 'put ''ZVN0eWxlPSJUYWJsZVN0eWxlTWVkaXVtOSIgZGVmYXVsdFBpdm90U3R5bGU9IlBpdm90U3R5bGVNZWRpdW00IiddO3JldHVybiBTJiZTLmxlbmd0aD8oR1swXSs9Ij4iLFMuZm9yRWFjaChmdW5jdGlvbihRKXtHLnB1c2goZnVuY3Rpb24gd0MoUyxSLGspe3ZhciBHPVtdO1sid2hvbGVUYWJs''@;'; put 'put ''ZSIsImhlYWRlclJvdyIsInRvdGFsUm93IiwiZmlyc3RDb2x1bW4iLCJsYXN0Q29sdW1uIiwiZmlyc3RSb3dTdHJpcGUiLCJzZWNvbmRSb3dTdHJpcGUiLCJmaXJzdENvbHVtblN0cmlwZSIsInNlY29uZENvbHVtblN0cmlwZSIsImZpcnN0SGVhZGVyQ2VsbCIsImxhc3RIZWFkZXJDZWxsIiwi''@;'; put 'put ''Zmlyc3RUb3RhbENlbGwiLCJsYXN0VG90YWxDZWxsIiwiZmlyc3RTdWJ0b3RhbENvbHVtbiIsInNlY29uZFN1YnRvdGFsQ29sdW1uIiwidGhpcmRTdWJ0b3RhbENvbHVtbiIsImZpcnN0U3VidG90YWxSb3ciLCJzZWNvbmRTdWJ0b3RhbFJvdyIsInRoaXJkU3VidG90YWxSb3ciLCJibGFua1Jv''@;'; put 'put ''dyIsImZpcnN0Q29sdW1uU3ViaGVhZGluZyIsInNlY29uZENvbHVtblN1YmhlYWRpbmciLCJ0aGlyZENvbHVtblN1YmhlYWRpbmciLCJmaXJzdFJvd1N1YmhlYWRpbmciLCJzZWNvbmRSb3dTdWJoZWFkaW5nIiwidGhpcmRSb3dTdWJoZWFkaW5nIiwicGFnZUZpZWxkTGFiZWxzIiwicGFnZUZp''@;'; put 'put ''ZWxkVmFsdWVzIl0uZm9yRWFjaChmdW5jdGlvbihhZSl7aWYoU1thZV0pe3ZhciBnZT1zUyhSLFNbYWVdKTtHLnB1c2goJzx0YWJsZVN0eWxlRWxlbWVudCBkeGZJZD0iJytnZSsnIiB0eXBlPSInK2FlKyciLz4nKX19KTt2YXIgUT0nPHRhYmxlU3R5bGUgY291bnQ9IicrRy5sZW5ndGgrJyIg''@;'; put 'put ''cGl2b3Q9IicrICshIVMucGl2b3QrJyIgbmFtZT0iJytTLm5hbWUrJyInO3JldHVybiBHLmxlbmd0aD9RKyI+IitHLmpvaW4oIiIpKyI8L3RhYmxlU3R5bGU+IjpRKyIvPiJ9KFEsUikpfSksRy5qb2luKCIiKSsiPC90YWJsZVN0eWxlcz4iKTpHWzBdKyIvPiJ9KChTLlN0eWxlc3x8e30pLlRh''@;'; put 'put ''YmxlfHxbXSxTLlN0eWxlcy5EWEYpO3JldHVybiBrW2subGVuZ3RoXT1mdW5jdGlvbiBJVihTLFIpe2lmKCFTLmxlbmd0aClyZXR1cm4nPGR4ZnMgY291bnQ9IjAiLz4nO3ZhciBrPVsnPGR4ZnMgY291bnQ9IicrUy5sZW5ndGgrJyI+J107cmV0dXJuIFMuZm9yRWFjaChmdW5jdGlvbihHKXtr''@;'; put 'put ''LnB1c2goZnVuY3Rpb24gSjYoUyxSKXt2YXIgaz17Ym9sZDoiYiIsaXRhbGljOiJpIix2YWxpZ246InZlcnRBbGlnbiJ9LEc9WyI8ZHhmPiJdLFE9W10sYWU9W10sZ2U9W10seWU9W107cmV0dXJuIFJlKFMpLmZvckVhY2goZnVuY3Rpb24oTmUpe3N3aXRjaChOZSl7Y2FzZSJib2xkIjpjYXNl''@;'; put 'put ''Iml0YWxpYyI6Y2FzZSJzdHJpa2UiOmNhc2UidW5kZXJsaW5lIjpjYXNlImNvbG9yIjpjYXNlInZhbGlnbiI6Y2FzZSJzeiI6Y2FzZSJuYW1lIjpjYXNlIm91dGxpbmUiOmNhc2Uic2hhZG93IjpjYXNlImNoYXJzZXQiOmNhc2UiZmFtaWx5IjpjYXNlImNvbmRlbnNlIjpjYXNlImV4dGVuZCI6''@;'; put 'put ''Y2FzZSJzY2hlbWUiOlEucHVzaChOZSk7YnJlYWs7Y2FzZSJiZ0NvbG9yIjpjYXNlImZnQ29sb3IiOmdlLnB1c2goTmUpO2JyZWFrO2Nhc2UieiI6YWUucHVzaChOZSk7YnJlYWs7Y2FzZSJ0b3AiOmNhc2UiYm90dG9tIjpjYXNlImxlZnQiOmNhc2UicmlnaHQiOmNhc2UiZGlhZ29uYWwiOmNh''@;'; put 'put ''c2UidmVydGljYWwiOmNhc2UiaG9yaXpvbnRhbCI6eWUucHVzaChOZSk7YnJlYWs7Y2FzZSJwYXR0ZXJuVHlwZSI6Y2FzZSJkaWFnb25hbERvd24iOmNhc2UiZGlhZ29uYWxVcCI6Y2FzZSJzdG9wcyI6Y2FzZSJkZWdyZWUiOmJyZWFrO2RlZmF1bHQ6dGhyb3ciVW5yZWNvZ25pemVkICIrTmUr''@;'; put 'put ''IiBpbiBEWEYifX0pLFEubGVuZ3RoPjAmJihHLnB1c2goIjxmb250PiIpLFEuZm9yRWFjaChmdW5jdGlvbihOZSl7c3dpdGNoKE5lKXtjYXNlImJvbGQiOmNhc2UiaXRhbGljIjpjYXNlInN0cmlrZSI6Y2FzZSJvdXRsaW5lIjpjYXNlInNoYWRvdyI6Y2FzZSJjb25kZW5zZSI6Y2FzZSJleHRl''@;'; put 'put ''bmQiOkcucHVzaCgiPCIrKGtbTmVdfHxOZSkrJyB2YWw9IicrKFNbTmVdPyIxIjoiMCIpKyciLz4nKTticmVhaztjYXNlImNvbG9yIjpHLnB1c2goZ2QoU1tOZV0sTmUsITApKTticmVhaztjYXNlImZhbWlseSI6Y2FzZSJuYW1lIjpjYXNlInN6IjpjYXNlInNjaGVtZSI6Ry5wdXNoKCI8Iiso''@;'; put 'put ''a1tOZV18fE5lKSsnIHZhbD0iJytTW05lXSsnIi8+Jyk7YnJlYWs7Y2FzZSJ1bmRlcmxpbmUiOkcucHVzaCgnPHUgdmFsPSInK3g1W1NbTmVdfHwwXSsnIi8+Jyk7YnJlYWs7Y2FzZSJ2YWxpZ24iOkcucHVzaCgnPHZlcnRBbGlnbiB2YWw9IicrUy52YWxpZ24rKCJzdWIiPT1TLnZhbGlnbnx8''@;'; put 'put ''InN1cGVyIj09Uy52YWxpZ24/InNjcmlwdCI6IiIpKyciLz4nKTticmVhaztkZWZhdWx0OnRocm93IlVuc3VwcG9ydGVkICIrTmUrIiA6IGZvbnQgRFhGIn19KSxHLnB1c2goIjwvZm9udD4iKSksYWUubGVuZ3RoPjAmJkcucHVzaCgnPG51bUZtdCBmb3JtYXRDb2RlPSInK09yKFMueikrJyIg''@;'; put 'put ''bnVtRm10SWQ9IicrZnVuY3Rpb24gYVMoUyxSKXtpZigibnVtYmVyIj09dHlwZW9mIFMpcmV0dXJuIFM7dmFyIGs9Ui5yZXZzc2ZbUz8/IkdlbmVyYWwiXSxHPTYwO2lmKG51bGw9PWspZm9yKDtHPDM5MjsrK0cpaWYobnVsbD09Ui5zc2ZbR10pcmV0dXJuIEEubG9hZChTLEcpLFIuc3NmW0dd''@;'; put 'put ''PVMsUi5yZXZzc2ZbU109RyxHO3JldHVybiBrfShTLnosUikrJyIvPicpLGdlLmxlbmd0aD4wJiYoRy5wdXNoKCI8ZmlsbD4iKSxHLnB1c2goIjxwYXR0ZXJuRmlsbCIrKFMucGF0dGVyblR5cGU/JyBwYXR0ZXJuVHlwZT0iJytTLnBhdHRlcm5UeXBlKyciPic6Ij4iKSksZ2UuZm9yRWFjaChm''@;'; put 'put ''dW5jdGlvbihOZSl7c3dpdGNoKE5lKXtjYXNlInBhdHRlcm5UeXBlIjpicmVhaztjYXNlImZnQ29sb3IiOmNhc2UiYmdDb2xvciI6Ry5wdXNoKGdkKFNbTmVdLE5lLCEwKSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyJVbnN1cHBvcnRlZCAiK05lKyIgOiBmaWxsIERYRiJ9fSksRy5wdXNoKCI8L3Bh''@;'; put 'put ''dHRlcm5GaWxsPiIpLEcucHVzaCgiPC9maWxsPiIpKSx5ZS5sZW5ndGg+MD8oRy5wdXNoKFsiPGJvcmRlciIsbnVsbCE9Uy5kaWFnb25hbERvd24/JyBkaWFnb25hbERvd249IicrICshIVMuZGlhZ29uYWxEb3duKyciJzoiIixudWxsIT1TLmRpYWdvbmFsVXA/JyBkaWFnb25hbFVwPSInKyAr''@;'; put 'put ''ISFTLmRpYWdvbmFsVXArJyInOiIiLCI+Il0uam9pbigiIikpLHllLmZvckVhY2goZnVuY3Rpb24oTmUpe0cucHVzaChrNChTW05lXSxOZSkpfSksRy5wdXNoKCI8L2JvcmRlcj4iKSk6KG51bGwhPVMuZGlhZ29uYWxEb3dufHxudWxsIT1TLmRpYWdvbmFsVXApJiZHLnB1c2goWyI8Ym9yZGVy''@;'; put 'put ''IixudWxsIT1TLmRpYWdvbmFsRG93bj8nIGRpYWdvbmFsRG93bj0iJysgKyEhUy5kaWFnb25hbERvd24rJyInOiIiLG51bGwhPVMuZGlhZ29uYWxVcD8nIGRpYWdvbmFsVXA9IicrICshIVMuZGlhZ29uYWxVcCsnIic6IiIsIi8+Il0uam9pbigiIikpLDE9PUcubGVuZ3RoPyI8ZHhmLz4iOkcu''@;'; put 'put ''am9pbigiIikrIjwvZHhmPiJ9KEcsUikpfSksay5qb2luKCIiKSsiPC9keGZzPiJ9KFMuU3R5bGVzLkRYRixSKSxrW2subGVuZ3RoXT1RLGsubGVuZ3RoPjImJihrW2subGVuZ3RoXT0iPC9zdHlsZVNoZWV0PiIsa1sxXT1rWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxrLmpvaW4oIiIpfWZ1bmN0''@;'; put 'put ''aW9uIENDKFMsUixrKXtrfHwoaz1ibig2KzQqUi5sZW5ndGgpKSxrLndyaXRlX3NoaWZ0KDIsUyksUGMoUixrKTt2YXIgRz1rLmxlbmd0aD5rLmw/ay5zbGljZSgwLGsubCk6aztyZXR1cm4gbnVsbD09ay5sJiYoay5sPWsubGVuZ3RoKSxHfWZ1bmN0aW9uIE9WKFMpe3JldHVybntjb2xvcjok''@;'; put 'put ''aChTKSxwb3M6TGwoUyl9fXFvLlNUWT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9zdHlsZXMiO3ZhciBTQz1bIm5vbmUiLCJzb2xpZCIsIm1lZGl1bUdyYXkiLCJkYXJrR3JheSIsImxpZ2h0R3JheSIsImRhcmtI''@;'; put 'put ''b3Jpem9udGFsIiwiZGFya1ZlcnRpY2FsIiwiZGFya0Rvd24iLCJkYXJrVXAiLCJkYXJrR3JpZCIsImRhcmtUcmVsbGlzIiwibGlnaHRIb3Jpem9udGFsIiwibGlnaHRWZXJ0aWNhbCIsImxpZ2h0RG93biIsImxpZ2h0VXAiLCJsaWdodEdyaWQiLCJsaWdodFRyZWxsaXMiLCJncmF5MTI1Iiwi''@;'; put 'put ''Z3JheTA2MjUiXSxQVj1WZShTQyksVDU9WyJnZW5lcmFsIiwibGVmdCIsImNlbnRlciIsInJpZ2h0IiwiZmlsbCIsImp1c3RpZnkiLCJjZW50ZXJDb250aW51b3VzIiwiZGlzdHJpYnV0ZWQiXSxRNj1bInRvcCIsImNlbnRlciIsImJvdHRvbSIsImp1c3RpZnkiLCJkaXN0cmlidXRlZCJdO2Z1''@;'; put 'put ''bmN0aW9uIEJ1KFMsUixrKXtrfHwoaz1ibigxNikpLGsud3JpdGVfc2hpZnQoMixSfHwwKSxrLndyaXRlX3NoaWZ0KDIsUy5udW1GbXRJZHx8MCksay53cml0ZV9zaGlmdCgyLFMuZm9udElkfHwwKSxrLndyaXRlX3NoaWZ0KDIsUy5maWxsSWR8fDApLGsud3JpdGVfc2hpZnQoMixTLmJvcmRl''@;'; put 'put ''cklkfHwwKSxrLndyaXRlX3NoaWZ0KDEsUy5hbGlnbm1lbnQmJlMuYWxpZ25tZW50LnRleHRSb3RhdGlvbnx8MCksay53cml0ZV9zaGlmdCgxLFMuYWxpZ25tZW50JiZTLmFsaWdubWVudC5pbmRlbnR8fDApO3ZhciBHPTAsUT0wO2lmKFMuYWxpZ25tZW50KXtpZihTLmFsaWdubWVudC5ob3Jp''@;'; put 'put ''em9udGFsKXt2YXIgYWU9VDUuaW5kZXhPZihTLmFsaWdubWVudC5ob3Jpem9udGFsKTthZTwwJiYoYWU9MCksR3w9YWV9aWYoUy5hbGlnbm1lbnQudmVydGljYWwpe3ZhciBnZT1RNi5pbmRleE9mKFMuYWxpZ25tZW50LnZlcnRpY2FsKTtnZTwwJiYoZ2U9MiksR3w9Z2U8PDN9Uy5hbGlnbm1l''@;'; put 'put ''bnQud3JhcFRleHQmJihHfD02NCksUy5hbGlnbm1lbnQuc2hyaW5rVG9GaXQmJihRfD0xKX1yZXR1cm4gay53cml0ZV9zaGlmdCgxLEcpLGsud3JpdGVfc2hpZnQoMSxRKSxrLndyaXRlX3NoaWZ0KDEsMCksay53cml0ZV9zaGlmdCgxLDApLGt9dmFyIHBkPVsibm9uZSIsInRoaW4iLCJtZWRp''@;'; put 'put ''dW0iLCJkYXNoZWQiLCJkb3R0ZWQiLCJ0aGljayIsImRvdWJsZSIsImhhaXIiLCJtZWRpdW1EYXNoZWQiLCJkYXNoRG90IiwibWVkaXVtRGFzaERvdCIsImRhc2hEb3REb3QiLCJtZWRpdW1EYXNoRG90RG90Iiwic2xhbnREYXNoRG90Il07ZnVuY3Rpb24gQTUoUyl7dmFyIFI9Uy5yZWFkX3No''@;'; put 'put ''aWZ0KDEpO1MubCs9MTt2YXIgaz0kaChTKTtyZXR1cm57c3R5bGU6cGRbUl0sY29sb3I6a319ZnVuY3Rpb24gazUoUyxSKXtyZXR1cm4gUnx8KFI9Ym4oMTApKSxTJiZTLnN0eWxlJiYiIiE9Uy5zdHlsZSYmIm5vbmUiIT1TLnN0eWxlJiYtMSE9PXBkLmluZGV4T2YoUy5zdHlsZSk/KFIud3Jp''@;'; put 'put ''dGVfc2hpZnQoMSxwZC5pbmRleE9mKFMuc3R5bGUpKSxSLndyaXRlX3NoaWZ0KDEsMCksUy5jb2xvcj91ZihTLmNvbG9yLFIpOihSLndyaXRlX3NoaWZ0KDQsMCksUi53cml0ZV9zaGlmdCg0LDApKSk6KFIud3JpdGVfc2hpZnQoMSwwKSxSLndyaXRlX3NoaWZ0KDEsMCksUi53cml0ZV9zaGlm''@;'; put 'put ''dCg0LDApLFIud3JpdGVfc2hpZnQoNCwwKSksUn1mdW5jdGlvbiBnayhTLFIpe3JldHVybiBSfHwoUj1ibig1MikpLFIud3JpdGVfc2hpZnQoNCxTLnhmSWQpLFIud3JpdGVfc2hpZnQoMiwxKSxSLndyaXRlX3NoaWZ0KDEsK1MuYnVpbHRpbklkKSxSLndyaXRlX3NoaWZ0KDEsMCksbGYoUy5u''@;'; put 'put ''YW1lfHwiIixSKSxSLmxlbmd0aD5SLmw/Ui5zbGljZSgwLFIubCk6Un1mdW5jdGlvbiBCdihTLFIpeyFSfHwhUi50aGVtZUVsZW1lbnRzfHwhUi50aGVtZUVsZW1lbnRzLmNsclNjaGVtZXx8bnVsbCE9Uy50aGVtZSYmKFMucmdiPV81KFIudGhlbWVFbGVtZW50cy5jbHJTY2hlbWVbUy50aGVt''@;'; put 'put ''ZV0ucmdiLFMudGludHx8MCkpfWZ1bmN0aW9uIENrKFMsUil7dmFyIGs9bWkoKTtyZXR1cm4gSHIoaywiQnJ0QmVnaW5TdHlsZVNoZWV0IiksZnVuY3Rpb24gTlYoUyxSKXtpZihSKXt2YXIgaz0wO1tbNSw4XSxbMjMsMjZdLFs0MSw0NF0sWzUwLDM5Ml1dLmZvckVhY2goZnVuY3Rpb24oRyl7''@;'; put 'put ''Zm9yKHZhciBRPUdbMF07UTw9R1sxXTsrK1EpbnVsbCE9UltRXSYmKytrfSksMCE9ayYmKEhyKFMsIkJydEJlZ2luRm10cyIscTAoaykpLFtbNSw4XSxbMjMsMjZdLFs0MSw0NF0sWzUwLDM5Ml1dLmZvckVhY2goZnVuY3Rpb24oRyl7Zm9yKHZhciBRPUdbMF07UTw9R1sxXTsrK1EpbnVsbCE9''@;'; put 'put ''UltRXSYmSHIoUywiQnJ0Rm10IixDQyhRLFJbUV0pKX0pLEhyKFMsIkJydEVuZEZtdHMiKSl9fShrLFMuU1NGKSxmdW5jdGlvbiBWVihTLFIpe3ZhciBrPVIubGVuZ3RoOzAhPWsmJihIcihTLCJCcnRCZWdpbkZvbnRzIixxMChrKSksUi5mb3JFYWNoKGZ1bmN0aW9uKEcpe0hyKFMsIkJydEZv''@;'; put 'put ''bnQiLGZ1bmN0aW9uIExWKFMsUil7Unx8KFI9Ym4oMTUzKSksUi53cml0ZV9zaGlmdCgyLDIwKlMuc3opLGZ1bmN0aW9uIG92KFMsUil7Unx8KFI9Ym4oMikpLFIud3JpdGVfc2hpZnQoMSwoUy5pdGFsaWM/MjowKXwoUy5zdHJpa2U/ODowKXwoUy5vdXRsaW5lPzE2OjApfChTLnNoYWRvdz8z''@;'; put 'put ''MjowKXwoUy5jb25kZW5zZT82NDowKXwoUy5leHRlbmQ/MTI4OjApKSxSLndyaXRlX3NoaWZ0KDEsMCl9KFMsUiksUi53cml0ZV9zaGlmdCgyLFMuYm9sZD83MDA6NDAwKTt2YXIgaz0wOyJzdXBlciI9PVMudmFsaWduP2s9MToic3ViIj09Uy52YWxpZ24mJihrPTIpLFIud3JpdGVfc2hpZnQo''@;'; put 'put ''MixrKSxSLndyaXRlX3NoaWZ0KDEsUy51bmRlcmxpbmV8fDApLFIud3JpdGVfc2hpZnQoMSxTLmZhbWlseXx8MCksUi53cml0ZV9zaGlmdCgxLFMuY2hhcnNldHx8MCksUi53cml0ZV9zaGlmdCgxLDApLHVmKFMuY29sb3IsUik7dmFyIEc9MDtyZXR1cm4ibWFqb3IiPT1TLnNjaGVtZSYmKEc9''@;'; put 'put ''MSksIm1pbm9yIj09Uy5zY2hlbWUmJihHPTIpLFIud3JpdGVfc2hpZnQoMSxHKSxQYyhTLm5hbWUsUiksUi5sZW5ndGg+Ui5sP1Iuc2xpY2UoMCxSLmwpOlJ9KEcpKX0pLEhyKFMsIkJydEVuZEZvbnRzIikpfShrLChTLlN0eWxlc3x8e30pLkZvbnRzfHxbXSksZnVuY3Rpb24gQlYoUyxSKXt2''@;'; put 'put ''YXIgaz1SLmxlbmd0aDswIT1rJiYoSHIoUywiQnJ0QmVnaW5GaWxscyIscTAoaykpLFIuZm9yRWFjaChmdW5jdGlvbihHKXtIcihTLCJCcnRGaWxsIixmdW5jdGlvbiB0MShTLFIpe1J8fChSPWJuKDg0KSk7dmFyIGs9UFZbUy5wYXR0ZXJuVHlwZV07bnVsbD09ayYmKGs9NDApLFIud3JpdGVf''@;'; put 'put ''c2hpZnQoNCxrPStrKTt2YXIgRz0wO2lmKDQwIT1rKWZvcih1ZihTLmZnQ29sb3J8fHtpbmRleDo2NH0sUiksdWYoUy5iZ0NvbG9yfHx7aW5kZXg6NjV9LFIpO0c8MTI7KytHKVIud3JpdGVfc2hpZnQoNCwwKTtlbHNle2Zvcig7Rzw0OysrRylSLndyaXRlX3NoaWZ0KDQsMCk7Zm9yKDtHPDEy''@;'; put 'put ''OysrRylSLndyaXRlX3NoaWZ0KDQsMCl9cmV0dXJuIFIubGVuZ3RoPlIubD9SLnNsaWNlKDAsUi5sKTpSfShHKSl9KSxIcihTLCJCcnRFbmRGaWxscyIpKX0oaywoUy5TdHlsZXN8fHt9KS5GaWxsc3x8W10pLGZ1bmN0aW9uIGpWKFMsUil7dmFyIGs9Ui5sZW5ndGg7MCE9ayYmKEhyKFMsIkJy''@;'; put 'put ''dEJlZ2luQm9yZGVycyIscTAoaykpLFIuZm9yRWFjaChmdW5jdGlvbihHKXtIcihTLCJCcnRCb3JkZXIiLGZ1bmN0aW9uIHBrKFMsUil7cmV0dXJuIFJ8fChSPWJuKDUxKSksUi53cml0ZV9zaGlmdCgxLDApLGs1KFMudG9wLFIpLGs1KFMuYm90dG9tLFIpLGs1KFMubGVmdCxSKSxrNShTLnJp''@;'; put 'put ''Z2h0LFIpLGs1KG51bGwsUiksUi5sZW5ndGg+Ui5sP1Iuc2xpY2UoMCxSLmwpOlJ9KEcpKX0pLEhyKFMsIkJydEVuZEJvcmRlcnMiKSl9KGssKFMuU3R5bGVzfHx7fSkuQm9yZGVyc3x8W10pLGZ1bmN0aW9uIGJrKFMsUil7dmFyIGs9MTtpZihSJiYoaz1SLmxlbmd0aCksSHIoUywiQnJ0QmVn''@;'; put 'put ''aW5DZWxsU3R5bGVYRnMiLHEwKGspKSxIcihTLCJCcnRYRiIsQnUoe251bUZtdElkOjAsZm9udElkOjAsZmlsbElkOjAsYm9yZGVySWQ6MH0sNjU1MzUpKSxSKWZvcih2YXIgRz0xO0c8Ui5sZW5ndGg7KytHKUhyKFMsIkJydFhGIixCdSh7bnVtRm10SWQ6UltHXS5udW1GbXRJZHx8MCxmb250''@;'; put 'put ''SWQ6UltHXS5mb250SWR8fDAsZmlsbElkOlJbR10uZmlsbElkfHwwLGJvcmRlcklkOlJbR10uYm9yZGVySWR8fDB9LDY1NTM1KSk7SHIoUywiQnJ0RW5kQ2VsbFN0eWxlWEZzIil9KGssUi5jZWxsU3R5bGVYZnMpLGZ1bmN0aW9uIHlrKFMsUil7SHIoUywiQnJ0QmVnaW5DZWxsWEZzIixxMChS''@;'; put 'put ''Lmxlbmd0aCkpLFIuZm9yRWFjaChmdW5jdGlvbihrKXtIcihTLCJCcnRYRiIsQnUoaywwKSl9KSxIcihTLCJCcnRFbmRDZWxsWEZzIil9KGssUi5jZWxsWGZzKSxmdW5jdGlvbiBfayhTLFIpe3ZhciBrPTE7aWYoUiYmKGs9Ui5sZW5ndGgpLEhyKFMsIkJydEJlZ2luU3R5bGVzIixxMChrKSks''@;'; put 'put ''SHIoUywiQnJ0U3R5bGUiLGdrKHt4ZklkOjAsYnVpbHRpbklkOjAsbmFtZToiTm9ybWFsIn0pKSxSKWZvcih2YXIgRz0xO0c8Ui5sZW5ndGg7KytHKUhyKFMsIkJydFN0eWxlIixnayh7eGZJZDpHLGJ1aWx0aW5JZDowLG5hbWU6UltHXS5uYW1lfSkpO0hyKFMsIkJydEVuZFN0eWxlcyIpfShr''@;'; put 'put ''LFIuY2VsbFN0eWxlWGZzKSxmdW5jdGlvbiBqdihTKXtIcihTLCJCcnRCZWdpbkRYRnMiLHEwKDApKSxIcihTLCJCcnRFbmREWEZzIil9KGspLGZ1bmN0aW9uIHdrKFMpe0hyKFMsIkJydEJlZ2luVGFibGVTdHlsZXMiLGZ1bmN0aW9uIG1rKFMsUixrKXt2YXIgRz1ibigyMDUyKTtyZXR1cm4g''@;'; put 'put ''Ry53cml0ZV9zaGlmdCg0LFMpLGxmKFIsRyksbGYoayxHKSxHLmxlbmd0aD5HLmw/Ry5zbGljZSgwLEcubCk6R30oMCwiVGFibGVTdHlsZU1lZGl1bTkiLCJQaXZvdFN0eWxlTWVkaXVtNCIpKSxIcihTLCJCcnRFbmRUYWJsZVN0eWxlcyIpfShrKSxIcihrLCJCcnRFbmRTdHlsZVNoZWV0Iiks''@;'; put 'put ''ay5lbmQoKX1xby5USEVNRT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy90aGVtZSI7dmFyIFNrPVsiPC9hOmx0MT4iLCI8L2E6ZGsxPiIsIjwvYTpsdDI+IiwiPC9hOmRrMj4iLCI8L2E6YWNjZW50MT4iLCI8L2E6''@;'; put 'put ''YWNjZW50Mj4iLCI8L2E6YWNjZW50Mz4iLCI8L2E6YWNjZW50ND4iLCI8L2E6YWNjZW50NT4iLCI8L2E6YWNjZW50Nj4iLCI8L2E6aGxpbms+IiwiPC9hOmZvbEhsaW5rPiJdO2Z1bmN0aW9uIFVWKFMsUixrKXtSLnRoZW1lRWxlbWVudHMuY2xyU2NoZW1lPVtdO3ZhciBHPXt9OyhTWzBdLm1h''@;'; put 'put ''dGNoKGVuKXx8W10pLmZvckVhY2goZnVuY3Rpb24oUSl7dmFyIGFlPXByKFEpO3N3aXRjaChhZVswXSl7Y2FzZSI8YTpjbHJTY2hlbWUiOmNhc2UiPC9hOmNsclNjaGVtZT4iOmNhc2UiPC9hOnNyZ2JDbHI+IjpjYXNlIjwvYTpzeXNDbHI+IjpicmVhaztjYXNlIjxhOnNyZ2JDbHIiOkcucmdi''@;'; put 'put ''PWFlLnZhbDticmVhaztjYXNlIjxhOnN5c0NsciI6Ry5yZ2I9YWUubGFzdENscjticmVhaztjYXNlIjxhOmRrMT4iOmNhc2UiPC9hOmRrMT4iOmNhc2UiPGE6bHQxPiI6Y2FzZSI8L2E6bHQxPiI6Y2FzZSI8YTpkazI+IjpjYXNlIjwvYTpkazI+IjpjYXNlIjxhOmx0Mj4iOmNhc2UiPC9hOmx0''@;'; put 'put ''Mj4iOmNhc2UiPGE6YWNjZW50MT4iOmNhc2UiPC9hOmFjY2VudDE+IjpjYXNlIjxhOmFjY2VudDI+IjpjYXNlIjwvYTphY2NlbnQyPiI6Y2FzZSI8YTphY2NlbnQzPiI6Y2FzZSI8L2E6YWNjZW50Mz4iOmNhc2UiPGE6YWNjZW50ND4iOmNhc2UiPC9hOmFjY2VudDQ+IjpjYXNlIjxhOmFjY2Vu''@;'; put 'put ''dDU+IjpjYXNlIjwvYTphY2NlbnQ1PiI6Y2FzZSI8YTphY2NlbnQ2PiI6Y2FzZSI8L2E6YWNjZW50Nj4iOmNhc2UiPGE6aGxpbms+IjpjYXNlIjwvYTpobGluaz4iOmNhc2UiPGE6Zm9sSGxpbms+IjpjYXNlIjwvYTpmb2xIbGluaz4iOiIvIj09PWFlWzBdLmNoYXJBdCgxKT8oUi50aGVtZUVs''@;'; put 'put ''ZW1lbnRzLmNsclNjaGVtZVtTay5pbmRleE9mKGFlWzBdKV09RyxHPXt9KTpHLm5hbWU9YWVbMF0uc2xpY2UoMyxhZVswXS5sZW5ndGgtMSk7YnJlYWs7ZGVmYXVsdDppZihrJiZrLldURil0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCAiK2FlWzBdKyIgaW4gY2xyU2NoZW1lIil9fSl9''@;'; put 'put ''ZnVuY3Rpb24gWlYoKXt9ZnVuY3Rpb24gV1YoKXt9dmFyIFlWPS88YTpjbHJTY2hlbWUoW14+XSopPltcc1xTXSo8XC9hOmNsclNjaGVtZT4vLE1rPS88YTpmb250U2NoZW1lKFtePl0qKT5bXHNcU10qPFwvYTpmb250U2NoZW1lPi8scXRlPS88YTpmbXRTY2hlbWUoW14+XSopPltcc1xTXSo8''@;'; put 'put ''XC9hOmZtdFNjaGVtZT4vLEdWPS88YTp0aGVtZUVsZW1lbnRzKFtePl0qKT5bXHNcU10qPFwvYTp0aGVtZUVsZW1lbnRzPi87ZnVuY3Rpb24geEMoUyxSKXtpZighU3x8MD09PVMubGVuZ3RoKXJldHVybiB4QygkVigpKTt2YXIgayxHPXt9O2lmKCEoaz1TLm1hdGNoKEdWKSkpdGhyb3cgbmV3''@;'; put 'put ''IEVycm9yKCJ0aGVtZUVsZW1lbnRzIG5vdCBmb3VuZCBpbiB0aGVtZSIpO3JldHVybiBmdW5jdGlvbiB4ayhTLFIsayl7dmFyIEc7Ui50aGVtZUVsZW1lbnRzPXt9LFtbImNsclNjaGVtZSIsWVYsVVZdLFsiZm9udFNjaGVtZSIsTWssWlZdLFsiZm10U2NoZW1lIixxdGUsV1ZdXS5mb3JFYWNo''@;'; put 'put ''KGZ1bmN0aW9uKFEpe2lmKCEoRz1TLm1hdGNoKFFbMV0pKSl0aHJvdyBuZXcgRXJyb3IoUVswXSsiIG5vdCBmb3VuZCBpbiB0aGVtZUVsZW1lbnRzIik7UVsyXShHLFIsayl9KX0oa1swXSxHLFIpLEcucmF3PVMsR31mdW5jdGlvbiAkVihTLFIpe2lmKFImJlIudGhlbWVYTFNYKXJldHVybiBS''@;'; put 'put ''LnRoZW1lWExTWDtpZihTJiYic3RyaW5nIj09dHlwZW9mIFMucmF3KXJldHVybiBTLnJhdzt2YXIgaz1bSWldO3JldHVybiBrW2subGVuZ3RoXT0nPGE6dGhlbWUgeG1sbnM6YT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL2RyYXdpbmdtbC8yMDA2L21haW4iIG5hbWU9Ik9m''@;'; put 'put ''ZmljZSBUaGVtZSI+JyxrW2subGVuZ3RoXT0iPGE6dGhlbWVFbGVtZW50cz4iLGtbay5sZW5ndGhdPSc8YTpjbHJTY2hlbWUgbmFtZT0iT2ZmaWNlIj4nLGtbay5sZW5ndGhdPSc8YTpkazE+PGE6c3lzQ2xyIHZhbD0id2luZG93VGV4dCIgbGFzdENscj0iMDAwMDAwIi8+PC9hOmRrMT4nLGtb''@;'; put 'put ''ay5sZW5ndGhdPSc8YTpsdDE+PGE6c3lzQ2xyIHZhbD0id2luZG93IiBsYXN0Q2xyPSJGRkZGRkYiLz48L2E6bHQxPicsa1trLmxlbmd0aF09JzxhOmRrMj48YTpzcmdiQ2xyIHZhbD0iMUY0OTdEIi8+PC9hOmRrMj4nLGtbay5sZW5ndGhdPSc8YTpsdDI+PGE6c3JnYkNsciB2YWw9IkVFRUNF''@;'; put 'put ''MSIvPjwvYTpsdDI+JyxrW2subGVuZ3RoXT0nPGE6YWNjZW50MT48YTpzcmdiQ2xyIHZhbD0iNEY4MUJEIi8+PC9hOmFjY2VudDE+JyxrW2subGVuZ3RoXT0nPGE6YWNjZW50Mj48YTpzcmdiQ2xyIHZhbD0iQzA1MDREIi8+PC9hOmFjY2VudDI+JyxrW2subGVuZ3RoXT0nPGE6YWNjZW50Mz48''@;'; put 'put ''YTpzcmdiQ2xyIHZhbD0iOUJCQjU5Ii8+PC9hOmFjY2VudDM+JyxrW2subGVuZ3RoXT0nPGE6YWNjZW50ND48YTpzcmdiQ2xyIHZhbD0iODA2NEEyIi8+PC9hOmFjY2VudDQ+JyxrW2subGVuZ3RoXT0nPGE6YWNjZW50NT48YTpzcmdiQ2xyIHZhbD0iNEJBQ0M2Ii8+PC9hOmFjY2VudDU+Jyxr''@;'; put 'put ''W2subGVuZ3RoXT0nPGE6YWNjZW50Nj48YTpzcmdiQ2xyIHZhbD0iRjc5NjQ2Ii8+PC9hOmFjY2VudDY+JyxrW2subGVuZ3RoXT0nPGE6aGxpbms+PGE6c3JnYkNsciB2YWw9IjAwMDBGRiIvPjwvYTpobGluaz4nLGtbay5sZW5ndGhdPSc8YTpmb2xIbGluaz48YTpzcmdiQ2xyIHZhbD0iODAw''@;'; put 'put ''MDgwIi8+PC9hOmZvbEhsaW5rPicsa1trLmxlbmd0aF09IjwvYTpjbHJTY2hlbWU+IixrW2subGVuZ3RoXT0nPGE6Zm9udFNjaGVtZSBuYW1lPSJPZmZpY2UiPicsa1trLmxlbmd0aF09IjxhOm1ham9yRm9udD4iLGtbay5sZW5ndGhdPSc8YTpsYXRpbiB0eXBlZmFjZT0iQ2FtYnJpYSIvPics''@;'; put 'put ''a1trLmxlbmd0aF09JzxhOmVhIHR5cGVmYWNlPSIiLz4nLGtbay5sZW5ndGhdPSc8YTpjcyB0eXBlZmFjZT0iIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkpwYW4iIHR5cGVmYWNlPSJcdWZmMmRcdWZmMzMgXHVmZjMwXHUzMGI0XHUzMGI3XHUzMGMzXHUzMGFmIi8+JyxrW2su''@;'; put 'put ''bGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbmciIHR5cGVmYWNlPSJcdWI5ZDFcdWM3NDAgXHVhY2UwXHViNTE1Ii8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhhbnMiIHR5cGVmYWNlPSJcdTViOGJcdTRmNTMiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFu''@;'; put 'put ''dCIgdHlwZWZhY2U9Ilx1NjViMFx1N2QzMFx1NjYwZVx1OWFkNCIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJBcmFiIiB0eXBlZmFjZT0iVGltZXMgTmV3IFJvbWFuIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkhlYnIiIHR5cGVmYWNlPSJUaW1lcyBOZXcgUm9t''@;'; put 'put ''YW4iLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGhhaSIgdHlwZWZhY2U9IlRhaG9tYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJFdGhpIiB0eXBlZmFjZT0iTnlhbGEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQmVuZyIgdHlwZWZhY2U9IlZy''@;'; put 'put ''aW5kYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHdWpyIiB0eXBlZmFjZT0iU2hydXRpIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IktobXIiIHR5cGVmYWNlPSJNb29sQm9yYW4iLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iS25kYSIgdHlwZWZh''@;'; put 'put ''Y2U9IlR1bmdhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ikd1cnUiIHR5cGVmYWNlPSJSYWF2aSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJDYW5zIiB0eXBlZmFjZT0iRXVwaGVtaWEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iQ2hlciIgdHlw''@;'; put 'put ''ZWZhY2U9IlBsYW50YWdlbmV0IENoZXJva2VlIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IllpaWkiIHR5cGVmYWNlPSJNaWNyb3NvZnQgWWkgQmFpdGkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGlidCIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBIaW1hbGF5YSIv''@;'; put 'put ''Picsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJUaGFhIiB0eXBlZmFjZT0iTVYgQm9saSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJEZXZhIiB0eXBlZmFjZT0iTWFuZ2FsIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRlbHUiIHR5cGVmYWNlPSJHYXV0''@;'; put 'put ''YW1pIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRhbWwiIHR5cGVmYWNlPSJMYXRoYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJTeXJjIiB0eXBlZmFjZT0iRXN0cmFuZ2VsbyBFZGVzc2EiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iT3J5YSIg''@;'; put 'put ''dHlwZWZhY2U9IkthbGluZ2EiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTWx5bSIgdHlwZWZhY2U9IkthcnRpa2EiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTGFvbyIgdHlwZWZhY2U9IkRva0NoYW1wYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0''@;'; put 'put ''PSJTaW5oIiB0eXBlZmFjZT0iSXNrb29sYSBQb3RhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9Ik1vbmciIHR5cGVmYWNlPSJNb25nb2xpYW4gQmFpdGkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVmlldCIgdHlwZWZhY2U9IlRpbWVzIE5ldyBSb21hbiIvPics''@;'; put 'put ''a1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJVaWdoIiB0eXBlZmFjZT0iTWljcm9zb2Z0IFVpZ2h1ciIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHZW9yIiB0eXBlZmFjZT0iU3lsZmFlbiIvPicsa1trLmxlbmd0aF09IjwvYTptYWpvckZvbnQ+IixrW2subGVuZ3RoXT0i''@;'; put 'put ''PGE6bWlub3JGb250PiIsa1trLmxlbmd0aF09JzxhOmxhdGluIHR5cGVmYWNlPSJDYWxpYnJpIi8+JyxrW2subGVuZ3RoXT0nPGE6ZWEgdHlwZWZhY2U9IiIvPicsa1trLmxlbmd0aF09JzxhOmNzIHR5cGVmYWNlPSIiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSnBhbiIgdHlw''@;'; put 'put ''ZWZhY2U9Ilx1ZmYyZFx1ZmYzMyBcdWZmMzBcdTMwYjRcdTMwYjdcdTMwYzNcdTMwYWYiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFuZyIgdHlwZWZhY2U9Ilx1YjlkMVx1Yzc0MCBcdWFjZTBcdWI1MTUiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iSGFucyIg''@;'; put 'put ''dHlwZWZhY2U9Ilx1NWI4Ylx1NGY1MyIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJIYW50IiB0eXBlZmFjZT0iXHU2NWIwXHU3ZDMwXHU2NjBlXHU5YWQ0Ii8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkFyYWIiIHR5cGVmYWNlPSJBcmlhbCIvPicsa1trLmxlbmd0''@;'; put 'put ''aF09JzxhOmZvbnQgc2NyaXB0PSJIZWJyIiB0eXBlZmFjZT0iQXJpYWwiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGhhaSIgdHlwZWZhY2U9IlRhaG9tYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJFdGhpIiB0eXBlZmFjZT0iTnlhbGEiLz4nLGtbay5sZW5n''@;'; put 'put ''dGhdPSc8YTpmb250IHNjcmlwdD0iQmVuZyIgdHlwZWZhY2U9IlZyaW5kYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJHdWpyIiB0eXBlZmFjZT0iU2hydXRpIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IktobXIiIHR5cGVmYWNlPSJEYXVuUGVuaCIvPicsa1tr''@;'; put 'put ''Lmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJLbmRhIiB0eXBlZmFjZT0iVHVuZ2EiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR3VydSIgdHlwZWZhY2U9IlJhYXZpIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkNhbnMiIHR5cGVmYWNlPSJFdXBoZW1pYSIvPics''@;'; put 'put ''a1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJDaGVyIiB0eXBlZmFjZT0iUGxhbnRhZ2VuZXQgQ2hlcm9rZWUiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iWWlpaSIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBZaSBCYWl0aSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0''@;'; put 'put ''PSJUaWJ0IiB0eXBlZmFjZT0iTWljcm9zb2Z0IEhpbWFsYXlhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlRoYWEiIHR5cGVmYWNlPSJNViBCb2xpIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IkRldmEiIHR5cGVmYWNlPSJNYW5nYWwiLz4nLGtbay5sZW5ndGhd''@;'; put 'put ''PSc8YTpmb250IHNjcmlwdD0iVGVsdSIgdHlwZWZhY2U9IkdhdXRhbWkiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVGFtbCIgdHlwZWZhY2U9IkxhdGhhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlN5cmMiIHR5cGVmYWNlPSJFc3RyYW5nZWxvIEVkZXNzYSIv''@;'; put 'put ''Picsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJPcnlhIiB0eXBlZmFjZT0iS2FsaW5nYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJNbHltIiB0eXBlZmFjZT0iS2FydGlrYSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0PSJMYW9vIiB0eXBlZmFjZT0iRG9r''@;'; put 'put ''Q2hhbXBhIi8+JyxrW2subGVuZ3RoXT0nPGE6Zm9udCBzY3JpcHQ9IlNpbmgiIHR5cGVmYWNlPSJJc2tvb2xhIFBvdGEiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iTW9uZyIgdHlwZWZhY2U9Ik1vbmdvbGlhbiBCYWl0aSIvPicsa1trLmxlbmd0aF09JzxhOmZvbnQgc2NyaXB0''@;'; put 'put ''PSJWaWV0IiB0eXBlZmFjZT0iQXJpYWwiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iVWlnaCIgdHlwZWZhY2U9Ik1pY3Jvc29mdCBVaWdodXIiLz4nLGtbay5sZW5ndGhdPSc8YTpmb250IHNjcmlwdD0iR2VvciIgdHlwZWZhY2U9IlN5bGZhZW4iLz4nLGtbay5sZW5ndGhdPSI8''@;'; put 'put ''L2E6bWlub3JGb250PiIsa1trLmxlbmd0aF09IjwvYTpmb250U2NoZW1lPiIsa1trLmxlbmd0aF09JzxhOmZtdFNjaGVtZSBuYW1lPSJPZmZpY2UiPicsa1trLmxlbmd0aF09IjxhOmZpbGxTdHlsZUxzdD4iLGtbay5sZW5ndGhdPSc8YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD0icGhD''@;'; put 'put ''bHIiLz48L2E6c29saWRGaWxsPicsa1trLmxlbmd0aF09JzxhOmdyYWRGaWxsIHJvdFdpdGhTaGFwZT0iMSI+JyxrW2subGVuZ3RoXT0iPGE6Z3NMc3Q+IixrW2subGVuZ3RoXT0nPGE6Z3MgcG9zPSIwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjUwMDAwIi8+PGE6''@;'; put 'put ''c2F0TW9kIHZhbD0iMzAwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxrW2subGVuZ3RoXT0nPGE6Z3MgcG9zPSIzNTAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSIzNzAwMCIvPjxhOnNhdE1vZCB2YWw9IjMwMDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdz''@;'; put 'put ''Picsa1trLmxlbmd0aF09JzxhOmdzIHBvcz0iMTAwMDAwIj48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6dGludCB2YWw9IjE1MDAwIi8+PGE6c2F0TW9kIHZhbD0iMzUwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxrW2subGVuZ3RoXT0iPC9hOmdzTHN0PiIsa1trLmxlbmd0aF09''@;'; put 'put ''JzxhOmxpbiBhbmc9IjE2MjAwMDAwIiBzY2FsZWQ9IjEiLz4nLGtbay5sZW5ndGhdPSI8L2E6Z3JhZEZpbGw+IixrW2subGVuZ3RoXT0nPGE6Z3JhZEZpbGwgcm90V2l0aFNoYXBlPSIxIj4nLGtbay5sZW5ndGhdPSI8YTpnc0xzdD4iLGtbay5sZW5ndGhdPSc8YTpncyBwb3M9IjAiPjxhOnNj''@;'; put 'put ''aGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZhbD0iMTAwMDAwIi8+PGE6c2hhZGUgdmFsPSIxMDAwMDAiLz48YTpzYXRNb2QgdmFsPSIxMzAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLGtbay5sZW5ndGhdPSc8YTpncyBwb3M9IjEwMDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhD''@;'; put 'put ''bHIiPjxhOnRpbnQgdmFsPSI1MDAwMCIvPjxhOnNoYWRlIHZhbD0iMTAwMDAwIi8+PGE6c2F0TW9kIHZhbD0iMzUwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxrW2subGVuZ3RoXT0iPC9hOmdzTHN0PiIsa1trLmxlbmd0aF09JzxhOmxpbiBhbmc9IjE2MjAwMDAwIiBzY2FsZWQ9IjAi''@;'; put 'put ''Lz4nLGtbay5sZW5ndGhdPSI8L2E6Z3JhZEZpbGw+IixrW2subGVuZ3RoXT0iPC9hOmZpbGxTdHlsZUxzdD4iLGtbay5sZW5ndGhdPSI8YTpsblN0eWxlTHN0PiIsa1trLmxlbmd0aF09JzxhOmxuIHc9Ijk1MjUiIGNhcD0iZmxhdCIgY21wZD0ic25nIiBhbGduPSJjdHIiPjxhOnNvbGlkRmls''@;'; put 'put ''bD48YTpzY2hlbWVDbHIgdmFsPSJwaENsciI+PGE6c2hhZGUgdmFsPSI5NTAwMCIvPjxhOnNhdE1vZCB2YWw9IjEwNTAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOnNvbGlkRmlsbD48YTpwcnN0RGFzaCB2YWw9InNvbGlkIi8+PC9hOmxuPicsa1trLmxlbmd0aF09JzxhOmxuIHc9IjI1NDAwIiBj''@;'; put 'put ''YXA9ImZsYXQiIGNtcGQ9InNuZyIgYWxnbj0iY3RyIj48YTpzb2xpZEZpbGw+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiLz48L2E6c29saWRGaWxsPjxhOnByc3REYXNoIHZhbD0ic29saWQiLz48L2E6bG4+JyxrW2subGVuZ3RoXT0nPGE6bG4gdz0iMzgxMDAiIGNhcD0iZmxhdCIgY21wZD0i''@;'; put 'put ''c25nIiBhbGduPSJjdHIiPjxhOnNvbGlkRmlsbD48YTpzY2hlbWVDbHIgdmFsPSJwaENsciIvPjwvYTpzb2xpZEZpbGw+PGE6cHJzdERhc2ggdmFsPSJzb2xpZCIvPjwvYTpsbj4nLGtbay5sZW5ndGhdPSI8L2E6bG5TdHlsZUxzdD4iLGtbay5sZW5ndGhdPSI8YTplZmZlY3RTdHlsZUxzdD4i''@;'; put 'put ''LGtbay5sZW5ndGhdPSI8YTplZmZlY3RTdHlsZT4iLGtbay5sZW5ndGhdPSI8YTplZmZlY3RMc3Q+IixrW2subGVuZ3RoXT0nPGE6b3V0ZXJTaGR3IGJsdXJSYWQ9IjQwMDAwIiBkaXN0PSIyMDAwMCIgZGlyPSI1NDAwMDAwIiByb3RXaXRoU2hhcGU9IjAiPjxhOnNyZ2JDbHIgdmFsPSIwMDAw''@;'; put 'put ''MDAiPjxhOmFscGhhIHZhbD0iMzgwMDAiLz48L2E6c3JnYkNscj48L2E6b3V0ZXJTaGR3Picsa1trLmxlbmd0aF09IjwvYTplZmZlY3RMc3Q+IixrW2subGVuZ3RoXT0iPC9hOmVmZmVjdFN0eWxlPiIsa1trLmxlbmd0aF09IjxhOmVmZmVjdFN0eWxlPiIsa1trLmxlbmd0aF09IjxhOmVmZmVj''@;'; put 'put ''dExzdD4iLGtbay5sZW5ndGhdPSc8YTpvdXRlclNoZHcgYmx1clJhZD0iNDAwMDAiIGRpc3Q9IjIzMDAwIiBkaXI9IjU0MDAwMDAiIHJvdFdpdGhTaGFwZT0iMCI+PGE6c3JnYkNsciB2YWw9IjAwMDAwMCI+PGE6YWxwaGEgdmFsPSIzNTAwMCIvPjwvYTpzcmdiQ2xyPjwvYTpvdXRlclNoZHc+''@;'; put 'put ''JyxrW2subGVuZ3RoXT0iPC9hOmVmZmVjdExzdD4iLGtbay5sZW5ndGhdPSI8L2E6ZWZmZWN0U3R5bGU+IixrW2subGVuZ3RoXT0iPGE6ZWZmZWN0U3R5bGU+IixrW2subGVuZ3RoXT0iPGE6ZWZmZWN0THN0PiIsa1trLmxlbmd0aF09JzxhOm91dGVyU2hkdyBibHVyUmFkPSI0MDAwMCIgZGlz''@;'; put 'put ''dD0iMjMwMDAiIGRpcj0iNTQwMDAwMCIgcm90V2l0aFNoYXBlPSIwIj48YTpzcmdiQ2xyIHZhbD0iMDAwMDAwIj48YTphbHBoYSB2YWw9IjM1MDAwIi8+PC9hOnNyZ2JDbHI+PC9hOm91dGVyU2hkdz4nLGtbay5sZW5ndGhdPSI8L2E6ZWZmZWN0THN0PiIsa1trLmxlbmd0aF09JzxhOnNjZW5l''@;'; put 'put ''M2Q+PGE6Y2FtZXJhIHByc3Q9Im9ydGhvZ3JhcGhpY0Zyb250Ij48YTpyb3QgbGF0PSIwIiBsb249IjAiIHJldj0iMCIvPjwvYTpjYW1lcmE+PGE6bGlnaHRSaWcgcmlnPSJ0aHJlZVB0IiBkaXI9InQiPjxhOnJvdCBsYXQ9IjAiIGxvbj0iMCIgcmV2PSIxMjAwMDAwIi8+PC9hOmxpZ2h0Umln''@;'; put 'put ''PjwvYTpzY2VuZTNkPicsa1trLmxlbmd0aF09JzxhOnNwM2Q+PGE6YmV2ZWxUIHc9IjYzNTAwIiBoPSIyNTQwMCIvPjwvYTpzcDNkPicsa1trLmxlbmd0aF09IjwvYTplZmZlY3RTdHlsZT4iLGtbay5sZW5ndGhdPSI8L2E6ZWZmZWN0U3R5bGVMc3Q+IixrW2subGVuZ3RoXT0iPGE6YmdGaWxs''@;'; put 'put ''U3R5bGVMc3Q+IixrW2subGVuZ3RoXT0nPGE6c29saWRGaWxsPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIi8+PC9hOnNvbGlkRmlsbD4nLGtbay5sZW5ndGhdPSc8YTpncmFkRmlsbCByb3RXaXRoU2hhcGU9IjEiPicsa1trLmxlbmd0aF09IjxhOmdzTHN0PiIsa1trLmxlbmd0aF09JzxhOmdz''@;'; put 'put ''IHBvcz0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnRpbnQgdmFsPSI0MDAwMCIvPjxhOnNhdE1vZCB2YWw9IjM1MDAwMCIvPjwvYTpzY2hlbWVDbHI+PC9hOmdzPicsa1trLmxlbmd0aF09JzxhOmdzIHBvcz0iNDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50''@;'; put 'put ''IHZhbD0iNDUwMDAiLz48YTpzaGFkZSB2YWw9Ijk5MDAwIi8+PGE6c2F0TW9kIHZhbD0iMzUwMDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxrW2subGVuZ3RoXT0nPGE6Z3MgcG9zPSIxMDAwMDAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTpzaGFkZSB2YWw9IjIwMDAwIi8+PGE6''@;'; put 'put ''c2F0TW9kIHZhbD0iMjU1MDAwIi8+PC9hOnNjaGVtZUNscj48L2E6Z3M+JyxrW2subGVuZ3RoXT0iPC9hOmdzTHN0PiIsa1trLmxlbmd0aF09JzxhOnBhdGggcGF0aD0iY2lyY2xlIj48YTpmaWxsVG9SZWN0IGw9IjUwMDAwIiB0PSItODAwMDAiIHI9IjUwMDAwIiBiPSIxODAwMDAiLz48L2E6''@;'; put 'put ''cGF0aD4nLGtbay5sZW5ndGhdPSI8L2E6Z3JhZEZpbGw+IixrW2subGVuZ3RoXT0nPGE6Z3JhZEZpbGwgcm90V2l0aFNoYXBlPSIxIj4nLGtbay5sZW5ndGhdPSI8YTpnc0xzdD4iLGtbay5sZW5ndGhdPSc8YTpncyBwb3M9IjAiPjxhOnNjaGVtZUNsciB2YWw9InBoQ2xyIj48YTp0aW50IHZh''@;'; put 'put ''bD0iODAwMDAiLz48YTpzYXRNb2QgdmFsPSIzMDAwMDAiLz48L2E6c2NoZW1lQ2xyPjwvYTpncz4nLGtbay5sZW5ndGhdPSc8YTpncyBwb3M9IjEwMDAwMCI+PGE6c2NoZW1lQ2xyIHZhbD0icGhDbHIiPjxhOnNoYWRlIHZhbD0iMzAwMDAiLz48YTpzYXRNb2QgdmFsPSIyMDAwMDAiLz48L2E6''@;'; put 'put ''c2NoZW1lQ2xyPjwvYTpncz4nLGtbay5sZW5ndGhdPSI8L2E6Z3NMc3Q+IixrW2subGVuZ3RoXT0nPGE6cGF0aCBwYXRoPSJjaXJjbGUiPjxhOmZpbGxUb1JlY3QgbD0iNTAwMDAiIHQ9IjUwMDAwIiByPSI1MDAwMCIgYj0iNTAwMDAiLz48L2E6cGF0aD4nLGtbay5sZW5ndGhdPSI8L2E6Z3Jh''@;'; put 'put ''ZEZpbGw+IixrW2subGVuZ3RoXT0iPC9hOmJnRmlsbFN0eWxlTHN0PiIsa1trLmxlbmd0aF09IjwvYTpmbXRTY2hlbWU+IixrW2subGVuZ3RoXT0iPC9hOnRoZW1lRWxlbWVudHM+IixrW2subGVuZ3RoXT0iPGE6b2JqZWN0RGVmYXVsdHM+IixrW2subGVuZ3RoXT0iPGE6c3BEZWY+IixrW2su''@;'; put 'put ''bGVuZ3RoXT0nPGE6c3BQci8+PGE6Ym9keVByLz48YTpsc3RTdHlsZS8+PGE6c3R5bGU+PGE6bG5SZWYgaWR4PSIxIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmxuUmVmPjxhOmZpbGxSZWYgaWR4PSIzIj48YTpzY2hlbWVDbHIgdmFsPSJhY2NlbnQxIi8+PC9hOmZpbGxSZWY+''@;'; put 'put ''PGE6ZWZmZWN0UmVmIGlkeD0iMiI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTplZmZlY3RSZWY+PGE6Zm9udFJlZiBpZHg9Im1pbm9yIj48YTpzY2hlbWVDbHIgdmFsPSJsdDEiLz48L2E6Zm9udFJlZj48L2E6c3R5bGU+JyxrW2subGVuZ3RoXT0iPC9hOnNwRGVmPiIsa1trLmxl''@;'; put 'put ''bmd0aF09IjxhOmxuRGVmPiIsa1trLmxlbmd0aF09JzxhOnNwUHIvPjxhOmJvZHlQci8+PGE6bHN0U3R5bGUvPjxhOnN0eWxlPjxhOmxuUmVmIGlkeD0iMiI+PGE6c2NoZW1lQ2xyIHZhbD0iYWNjZW50MSIvPjwvYTpsblJlZj48YTpmaWxsUmVmIGlkeD0iMCI+PGE6c2NoZW1lQ2xyIHZhbD0i''@;'; put 'put ''YWNjZW50MSIvPjwvYTpmaWxsUmVmPjxhOmVmZmVjdFJlZiBpZHg9IjEiPjxhOnNjaGVtZUNsciB2YWw9ImFjY2VudDEiLz48L2E6ZWZmZWN0UmVmPjxhOmZvbnRSZWYgaWR4PSJtaW5vciI+PGE6c2NoZW1lQ2xyIHZhbD0idHgxIi8+PC9hOmZvbnRSZWY+PC9hOnN0eWxlPicsa1trLmxlbmd0''@;'; put 'put ''aF09IjwvYTpsbkRlZj4iLGtbay5sZW5ndGhdPSI8L2E6b2JqZWN0RGVmYXVsdHM+IixrW2subGVuZ3RoXT0iPGE6ZXh0cmFDbHJTY2hlbWVMc3QvPiIsa1trLmxlbmd0aF09IjwvYTp0aGVtZT4iLGsuam9pbigiIil9ZnVuY3Rpb24genYoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5y''@;'; put 'put ''ZWFkX3NoaWZ0KDIpLTQsRz1bUl07c3dpdGNoKFIpe2Nhc2UgNDpjYXNlIDU6Y2FzZSA3OmNhc2UgODpjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOmNhc2UgMTM6R1sxXT1mdW5jdGlvbiBFQyhTKXt2YXIgUj17fTtzd2l0Y2goUi54Y2xyVHlwZT1TLnJlYWRfc2hpZnQoMiksUi5uVGludFNoYWRl''@;'; put 'put ''PVMucmVhZF9zaGlmdCgyKSxSLnhjbHJUeXBlKXtjYXNlIDA6Y2FzZSA0OlMubCs9NDticmVhaztjYXNlIDE6Ui54Y2xyVmFsdWU9ZnVuY3Rpb24gcVYoUyxSKXtyZXR1cm4gUm4oUyxSKX0oUyw0KTticmVhaztjYXNlIDI6Ui54Y2xyVmFsdWU9YmYoUyk7YnJlYWs7Y2FzZSAzOlIueGNsclZh''@;'; put 'put ''bHVlPWZ1bmN0aW9uIEVrKFMpe3JldHVybiBTLnJlYWRfc2hpZnQoNCl9KFMpfXJldHVybiBTLmwrPTgsUn0oUyk7YnJlYWs7Y2FzZSA2OkdbMV09ZnVuY3Rpb24gajMoUyxSKXtyZXR1cm4gUm4oUyxSKX0oUyxrKTticmVhaztjYXNlIDE0OmNhc2UgMTU6R1sxXT1TLnJlYWRfc2hpZnQoMT09''@;'; put 'put ''PWs/MToyKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIEV4dFByb3AgdHlwZTogIitSKyIgIitrKX1yZXR1cm4gR31mdW5jdGlvbiBUayhTLFIpe1IuZm9yRWFjaChmdW5jdGlvbihrKXtzd2l0Y2goa1swXSl7Y2FzZSA0OmNhc2UgNTpjYXNlIDY6Y2FzZSA3''@;'; put 'put ''OmNhc2UgODpjYXNlIDk6Y2FzZSAxMDpjYXNlIDExOmNhc2UgMTQ6Y2FzZSAxNTpicmVhaztjYXNlIDEzOlMuZm9udCYmUy5mb250LmNvbG9yJiZBcnJheS5pc0FycmF5KGtbMV0ueGNsclZhbHVlKSYmKFMuZm9udC5jb2xvci5yZ2I9aGQoa1sxXS54Y2xyVmFsdWUpKX19KX1mdW5jdGlvbiBv''@;'; put 'put ''YShTKXtyZXR1cm4gUy85MTQ0MDAqTWZ9ZnVuY3Rpb24gQWsoUyxSKXt2YXIgaz17fTtpZihTLnBvcylrLng9b2EoUy5wb3MueCksay55PW9hKFMucG9zLnkpO2Vsc2V7aWYoIVMuZnJvbSl0aHJvdyJiYWQgYW5jaG9yIHN0YXJ0IjtrLnI9Uy5mcm9tLnJ8fDAsay5jPVMuZnJvbS5jfHwwLFMu''@;'; put 'put ''ZnJvbS5jT2ZmJiYoay54PW9hKFMuZnJvbS5jT2ZmKSksUy5mcm9tLnJPZmYmJihrLnk9b2EoUy5mcm9tLnJPZmYpKX1pZihTLmV4dClrLnc9b2EoUy5leHQueCksay5oPW9hKFMuZXh0LnkpO2Vsc2V7aWYoIVMudG8pdGhyb3ciYmFkIGFuY2hvciBlbmQiO2suQz1TLnRvLmMsay5SPVMudG8u''@;'; put 'put ''cixTLnRvLmNPZmYmJihrLlg9b2EoUy50by5jT2ZmKSksUy50by5yT2ZmJiYoay5ZPW9hKFMudG8uck9mZikpfXJldHVybiBrfWZ1bmN0aW9uIEQ1KFMsUil7dmFyIGs9e3g6LTEseTotMSx3Oi0xLGg6LTF9O2lmKFMucG9zKWsueD1vYShTLnBvcy54KSxrLnk9b2EoUy5wb3MueSk7ZWxzZXtp''@;'; put 'put ''ZighUy5mcm9tKXRocm93ImJhZCBhbmNob3Igc3RhcnQiO2sueD1JNShSLFMuZnJvbS5jLCJDIikrb2EoUy5mcm9tLmNPZmYpLGsueT1JNShSLFMuZnJvbS5yLCJSIikrb2EoUy5mcm9tLnJPZmYpfWlmKFMuZXh0KWsudz1vYShTLmV4dC54KSxrLmg9b2EoUy5leHQueSk7ZWxzZXtpZighUy50''@;'; put 'put ''byl0aHJvdyJiYWQgYW5jaG9yIGVuZCI7ay53PUk1KFIsUy50by5jLCJDIikrb2EoUy50by5jT2ZmKS1rLngsay5oPUk1KFIsUy50by5yLCJSIikrb2EoUy50by5yT2ZmKS1rLnl9cmV0dXJuIGt9ZnVuY3Rpb24gVEMoUyxSKXt2YXIgaz17cjotMSxjOi0xLHg6LTEseTotMSxSOi0xLEM6LTEs''@;'; put 'put ''WDotMSxZOi0xfTtzd2l0Y2goUy50eXBlKXtjYXNlInR3b0NlbGxBbmNob3IiOmsucj1TLmZyb20ucixrLnk9b2EoUy5mcm9tLnJPZmYpLGsuUj1TLnRvLnIsay5ZPW9hKFMudG8uck9mZiksay5jPVMuZnJvbS5jLGsueD1vYShTLmZyb20uY09mZiksay5DPVMudG8uYyxrLlg9b2EoUy50by5j''@;'; put 'put ''T2ZmKTticmVhaztjYXNlIm9uZUNlbGxBbmNob3IiOmsucj1TLmZyb20ucixrLnk9b2EoUy5mcm9tLnJPZmYpO3ZhciBHPUVmKFIsay5yLGsueStvYShTLmV4dC55KSk7ay5SPUdbMF0say5ZPUdbMV0say5jPVMuZnJvbS5jLGsueD1vYShTLmZyb20uY09mZik7dmFyIFE9ejMoUixrLmMsay54''@;'; put 'put ''K29hKFMuZXh0LngpKTtrLkM9UVswXSxrLlg9UVsxXTticmVhaztjYXNlImFic29sdXRlQW5jaG9yIjp2YXIgYWU9RWYoUiwwLG9hKFMucG9zLnkpKTtrLnI9YWVbMF0say55PWFlWzFdO3ZhciBnZT1FZihSLGsucixrLnkrb2EoUy5leHQueSkpO2suUj1nZVswXSxrLlk9Z2VbMV07dmFyIHBl''@;'; put 'put ''PUVmKFIsMCxvYShTLnBvcy54KSk7ay5jPXBlWzBdLGsueD1wZVsxXTt2YXIgeWU9RWYoUixrLmMsay54K29hKFMuZXh0LngpKTtrLkM9eWVbMF0say5YPXllWzFdO2JyZWFrO2RlZmF1bHQ6dGhyb3ciYmFkIGFuY2hvciB0eXBlICIrUy50eXBlfXJldHVybiBrfWZ1bmN0aW9uIGtrKFMsUil7''@;'; put 'put ''dmFyIGs9Uy50cmltKCkuc3BsaXQoL1xzKixccyovKTtSWyIhcG9zIl09e2M6K2tbMF0seDora1sxXSxyOitrWzJdLHk6K2tbM10sQzora1s0XSxYOitrWzVdLFI6K2tbNl0sWTora1s3XX19ZnVuY3Rpb24gSlYoUyxSLGspe3ZhciBHPS0xO2lmKG51bGwhPVMuUnx8bnVsbCE9Uy5DKUc9MDtl''@;'; put 'put ''bHNle2lmKG51bGw9PVMueHx8bnVsbD09Uy55fHxudWxsPT1TLnd8fG51bGw9PVMuaCl0aHJvdyJjYW5ub3QgcGFyc2UgYW5jaG9yICIrSlNPTi5zdHJpbmdpZnkoUyk7Rz0xKzIqIShTLmN8fFMucil9aWYoRyE9Uil7c3dpdGNoKFIpe2Nhc2UgMDpjYXNlIDE6aWYoMyE9RylicmVhazt2YXIg''@;'; put 'put ''UT16MyhrLFMuY3x8MCxTLnh8fDApO1MuYz1RWzBdLFMueD1RWzFdO3ZhciBhZT1FZihrLFMucnx8MCxTLnl8fDApO1Mucj1hZVswXSxTLnk9YWVbMV07YnJlYWs7Y2FzZSAzOmlmKDM9PUcpYnJlYWs7dmFyIGdlPVMuY3x8MCxwZT1TLnh8fDA7ZGVsZXRlIFMuYyxkZWxldGUgUy54LFMueD0o''@;'; put 'put ''Z2U/VXYoayxnZSk6MCkrcGU7dmFyIHllPVMucnx8MCxQZT1TLnl8fDA7ZGVsZXRlIFMucixkZWxldGUgUy55LFMueT0oeWU/STQoayx5ZSk6MCkrUGU7YnJlYWs7ZGVmYXVsdDp0aHJvdyJjb252ZXJ0X2FuY2hvciB1bnJlY29nbml6ZWQgdHlwZSAiK1J9c3dpdGNoKFIpe2Nhc2UgMDppZigw''@;'; put 'put ''PT1HKWJyZWFrO3ZhciBOZT16MyhrLFMuY3x8MCwoUy54fHwwKStTLncpO2RlbGV0ZSBTLncsUy5DPU5lWzBdLFMuWD1OZVsxXTt2YXIgWWU9RWYoayxTLnJ8fDAsKFMueXx8MCkrUy5oKTtkZWxldGUgUy5oLFMuUj1ZZVswXSxTLlk9WWVbMV07YnJlYWs7Y2FzZSAxOmNhc2UgMzppZigwIT1H''@;'; put 'put ''KWJyZWFrO3ZhciBldD1TLkN8fDAsdXQ9Uy5YfHwwO2RlbGV0ZSBTLkMsZGVsZXRlIFMuWCxTLnc9VXYoayxldCkrdXQtKFMuYz9VdihrLFMuYyk6MCktKFMueHx8MCk7dmFyIEV0PVMuUnx8MCxvdD1TLll8fDA7ZGVsZXRlIFMuUixkZWxldGUgUy5ZLFMuaD1JNChrLEV0KStvdC0oUy5yP0k0''@;'; put 'put ''KGssUy5yKTowKS0oUy55fHwwKTticmVhaztkZWZhdWx0OnRocm93ImNvbnZlcnRfYW5jaG9yIHVucmVjb2duaXplZCB0eXBlICIrUn19fWZ1bmN0aW9uIFFWKFMpe3ZhciBSPVtTLmN8fDAsTWF0aC5yb3VuZChTLnh8fDApLFMucnx8MCxNYXRoLnJvdW5kKFMueXx8MCldO3JldHVybihSPVIu''@;'; put 'put ''Y29uY2F0KFMuaCYmUy53P1tSWzBdLE1hdGgucm91bmQoUlsxXStTLncpLFJbMl0sTWF0aC5yb3VuZChSWzNdK1MuaCldOltTLkN8fDAsTWF0aC5yb3VuZChTLlh8fDApLFMuUnx8MCxNYXRoLnJvdW5kKFMuWXx8MCldKSkuam9pbigiLCAiKX1mdW5jdGlvbiBJNChTLFIpe2lmKCFTKXJldHVy''@;'; put 'put ''biAwO2Zvcih2YXIgaz0wOy0tUj49MDspe3ZhciBHPSgoU1siIXJvd3MiXXx8W10pW1JdfHx7fSkuaHB4O251bGw9PUcmJihHPSgoU1siIXNoZWV0Rm9ybWF0Il18fHt9KS5yb3d8fHt9KS5ocHgpLG51bGw9PUcmJihHPTI0KSxrKz1HfXJldHVybiBrfWZ1bmN0aW9uIFV2KFMsUil7aWYoIVMp''@;'; put 'put ''cmV0dXJuIDA7Zm9yKHZhciBrPTA7LS1SPj0wOyl7dmFyIEc9KChTWyIhY29scyJdfHxbXSlbUl18fHt9KS53cHg7aWYobnVsbD09RyYmKEc9KChTWyIhc2hlZXRGb3JtYXQiXXx8e30pLmNvbHx8e30pLndweCksbnVsbD09Ryl7dmFyIFE9e3djaDo4LjQzfTtlMShRKSxTWyIhY29scyJdJiYo''@;'; put 'put ''U1siIWNvbHMiXVtSXT1RKSxHPVEud3B4fWsrPUd9cmV0dXJuIGt9ZnVuY3Rpb24gSTUoUyxSLGspe3JldHVybiJDIj09az9VdihTLFIpOkk0KFMsUil9ZnVuY3Rpb24gRWYoUyxSLGspe3ZhciBHPVtSLGtdO2lmKCFTKXJldHVybiBHO2Zvcig7Oyl7dmFyIFE9KFNbIiFyb3dzIl18fFtdKVtH''@;'; put 'put ''WzBdXXx8e307aWYoUS5oaWRkZW4pKytHWzBdO2Vsc2V7dmFyIGFlPVEuaHB4O2lmKG51bGw9PWFlJiYoYWU9KChTWyIhc2hlZXRGb3JtYXQiXXx8e30pLnJvd3x8e30pLmhweCksbnVsbD09YWUmJihhZT1paCgxNSkpLEdbMV08YWUpYnJlYWs7R1swXSsrLEdbMV0tPWFlfX1yZXR1cm4gR31m''@;'; put 'put ''dW5jdGlvbiB6MyhTLFIsayl7dmFyIEc9W1Isa107aWYoIVMpcmV0dXJuIEc7Zm9yKDs7KXt2YXIgUT0oU1siIWNvbHMiXXx8W10pW0dbMF1dfHx7fTtpZihRLmhpZGRlbnx8MD09PVEud3B4KSsrR1swXTtlbHNle3ZhciBhZT1RLndweDtpZihudWxsPT1hZSYmKGFlPSgoU1siIXNoZWV0Rm9y''@;'; put 'put ''bWF0Il18fHt9KS5jb2x8fHt9KS53cHgpLG51bGw9PWFlKXt2YXIgZ2U9e3djaDo4LjQzfTtlMShnZSksU1siIWNvbHMiXSYmKFNbIiFjb2xzIl1bR1swXV09Z2UpLGFlPWdlLndweH1pZihHWzFdPGFlKWJyZWFrO0dbMF0rKyxHWzFdLT1hZX19cmV0dXJuIEd9ZnVuY3Rpb24gUDAoUyl7cmV0''@;'; put 'put ''dXJuKCIwMDAwMDAiKygibnVtYmVyIj09dHlwZW9mIFM/Uy50b1N0cmluZygxNik6UykpLnNsaWNlKC02KX1mdW5jdGlvbiBnZChTLFIsayl7dmFyIEc9InN0cmluZyI9PXR5cGVvZiBSPyEhazohIVI7InN0cmluZyIhPXR5cGVvZiBSJiYoUj0iY29sb3IiKTt2YXIgUT0iPCIrUisiICI7cmV0''@;'; put 'put ''dXJuIFMuYXV0bz9RKydhdXRvPSIxIi8+JzpTLmluZGV4JiZudWxsPT1TLnJnYj9RKydpbmRleGVkPSInK1MuaW5kZXgrJyIvPic6bnVsbCE9Uy50aGVtZT9RKyd0aGVtZT0iJytTLnRoZW1lKyciJysoUy50aW50PycgdGludD0iJytTLnRpbnQrJyInOiIiKSsiLz4iOm51bGwhPVMucmdiP1Er''@;'; put 'put ''J3JnYj0iJysoRz8iRkYiOiIiKStQMChTLnJnYikrJyIvPic6USsiLz4ifWZ1bmN0aW9uIFI0KFMsUil7aWYoIVN8fG51bGw9PVMucmdiKXJldHVybiBSO2Zvcih2YXIgaz0oIjAwMDAwMCIrUy5yZ2IudG9TdHJpbmcoMTYpKS5zbGljZSgtNiksRz1bay5zbGljZSgwLDIpLGsuc2xpY2UoMiw0''@;'; put 'put ''KSxrLnNsaWNlKDQsNildLm1hcChmdW5jdGlvbihnZSl7cmV0dXJuIHBhcnNlSW50KGdlLDE2KX0pLFE9MDtRPG4wLmxlbmd0aDsrK1Epe3ZhciBhZT1uMFtRXTtpZihhZVswXT09R1swXSYmYWVbMV09PUdbMV0mJmFlWzJdPT1HWzJdKXJldHVybiBRfXJldHVybiBuMC5sZW5ndGg8NjQ/KG4w''@;'; put 'put ''LnB1c2goW0dbMF0sR1sxXSxHWzJdXSksbjAubGVuZ3RoLTEpOlJ9ZnVuY3Rpb24gbjEoUyl7dmFyIFI9WyIiLCIiLCIiXTtpZighUylyZXR1cm5bXTt2YXIgaz0iIixHPVMmJlMucz9mdW5jdGlvbiBadihTKXt2YXIgUj1bIiIsIiJdO2lmKCFTKXJldHVybiBSO2lmKFMuc3omJihSWzBdKz0i''@;'; put 'put ''JiIrUy5zeixSWzFdPSImMTIiK1JbMV0pLFMubmFtZSYmKFJbMF0rPScmIicrUy5uYW1lKycsUmVndWxhciInLFJbMV09JyYiLSxSZWd1bGFyIicrUlsxXSksUy5ib2xkJiYoUlswXSs9IiZCIixSWzFdPSImQiIrUlsxXSksUy51bmRlcmxpbmUpe3ZhciBrPTI9PVMudW5kZXJsaW5lPyImRSI6''@;'; put 'put ''IiZVIjtSWzBdKz1rLFJbMV09aytSWzFdfXJldHVybiBTLml0YWxpYyYmKFJbMF0rPSImSSIsUlsxXT0iJkkiK1JbMV0pLFMuY29sb3ImJm51bGwhPVMuY29sb3IucmdiJiYoUlswXSs9IiZLIitQMChTLmNvbG9yLnJnYiksUlsxXSs9IiZLMDAwMDAwIiksUy5zdHJpa2UmJihSWzBdKz0iJlMi''@;'; put 'put ''LFJbMV09IiZTIitSWzFdKSwic3VwZXIiPT1TLnZhbGlnbiYmKFJbMF0rPSImWCIsUlsxXT0iJlgiK1JbMV0pLCJzdWIiPT1TLnZhbGlnbiYmKFJbMF0rPSImWSIsUlsxXT0iJlkiK1JbMV0pLFJ9KFMucyk6WyIiLCIiXTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIFM/W1MsUyxTXTpudWxsIT1T''@;'; put 'put ''LmZpcnN0fHxudWxsIT1TLmV2ZW58fG51bGwhPVMub2RkPyhudWxsIT1TLm9kZCYmKFJbMF09bjEoUy5vZGQpWzBdKSx2b2lkIDA9PT1TLmZpcnN0JiZSWzBdJiYoUlsxXT1SWzBdKSxudWxsIT1TLmZpcnN0JiYoUlsxXT1uMShTLmZpcnN0KVswXSksbnVsbCE9Uy5ldmVuJiYoUlsyXT1uMShT''@;'; put 'put ''LmV2ZW4pWzBdKSxSKTpTLmxlZnR8fFMuY2VudGVyfHxTLnJpZ2h0PyhTLmxlZnQmJihrKz0iJkwiK24xKFMubGVmdClbMF0pLFMuY2VudGVyJiYoays9IiZDIituMShTLmNlbnRlcilbMF0pLFMucmlnaHQmJihrKz0iJlIiK24xKFMucmlnaHQpWzBdKSxbayxrLGtdKTpudWxsIT1TLnY/W2s9''@;'; put 'put ''R1swXStTLnYucmVwbGFjZSgvJi9nLCImJiIpK0dbMV0sayxrXTpudWxsIT1TLnc/W2s9R1swXStTLncrR1sxXSxrLGtdOkFycmF5LmlzQXJyYXkoUy5SKT8oUy5SLmZvckVhY2goZnVuY3Rpb24oUSl7ays9bjEoUSlbMF19KSxbayxrLGtdKTpbXX12YXIgZTg9ezE6IkxldHRlciIsMzoiVGFi''@;'; put 'put ''bG9pZCIsNToiTGVnYWwiLDc6IkV4ZWN1dGl2ZSIsODoiQTMiLDk6IkE0IiwxMToiQTUiLDEyOiJCNCIsMTM6IkI1IiwxNDoiRm9saW8iLDIwOiJFbnZlbG9wZSIsMzc6Ik1vbmFyY2giLDcwOiJBNiJ9LGVCPVZlKGU4KTtxby5DT05OPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5v''@;'; put 'put ''cmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2Nvbm5lY3Rpb25zIjt2YXIgbkI9RnIoImV4dGVybmFsTGluayIsbnVsbCx7eG1sbnM6R2kubWFpblswXX0pO3FvLklNRz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVs''@;'; put 'put ''YXRpb25zaGlwcy9pbWFnZSIscW8uRFJBVz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9kcmF3aW5nIjt2YXIgaUI9e3Q6InRvcCIsY3RyOiJjZW50ZXIiLGI6ImJvdHRvbSIsanVzdDoidG9wIixkaXN0OiJ0b3Ai''@;'; put 'put ''fSxSNT17Y3RyOiJjZW50ZXIiLGRpc3Q6ImNlbnRlciIsanVzdDoiY2VudGVyIixqdXN0TG93OiJjZW50ZXIiLGw6ImxlZnQiLHI6InJpZ2h0Iix0aGFpRGlzdDoiY2VudGVyIn07ZnVuY3Rpb24gYUIoKXt2YXIgUz1bSWldO3JldHVybiBTLnB1c2goJzx4ZHI6d3NEciB4bWxuczp4ZHI9Imh0''@;'; put 'put ''dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9kcmF3aW5nbWwvMjAwNi9zcHJlYWRzaGVldERyYXdpbmciIHhtbG5zOmE9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9kcmF3aW5nbWwvMjAwNi9tYWluIi8+JyksUy5qb2luKCIiKX1mdW5jdGlvbiBKdGUoUyl7dmFy''@;'; put 'put ''IGssUj1TWyIhZGF0YSJdO3JldHVybiJiYXNlNjQiPT09U1siIWRhdGF0eXBlIl0/KChrPVIubWF0Y2goL15kYXRhOi4qLC8pKSYmKFI9Ui5zbGljZShrWzBdLmxlbmd0aCkpLF9lLmRlY29kZShSKSk6Un1xby5UQUJMRT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmlj''@;'; put 'put ''ZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy90YWJsZSI7dmFyIGxCPS88KD86XHcrOik/c2hhcGUoPzpbXlx3XVtePl0qKT8+KFtcc1xTXSo/KTxcLyg/Olx3KzopP3NoYXBlPi9nO2Z1bmN0aW9uIExDKFMsUixrLEcpe3ZhciBRPVsyMTYwMCwyMTYwMF0sYWU9WyJtMCwwbDAiLFFbMV0s''@;'; put 'put ''UVswXSxRWzFdLFFbMF0sIjB4ZSJdLmpvaW4oIiwiKSxnZT1bRnIoInhtbCIsbnVsbCx7InhtbG5zOnYiOnZsLnYsInhtbG5zOm8iOnZsLm8sInhtbG5zOngiOnZsLngsInhtbG5zOm12Ijp2bC5tdn0pLnJlcGxhY2UoL1wvPi8sIj4iKSxGcigibzpzaGFwZWxheW91dCIsRnIoIm86aWRtYXAi''@;'; put 'put ''LG51bGwseyJ2OmV4dCI6ImVkaXQifSkseyJ2OmV4dCI6ImVkaXQifSldLHBlPTEwMjQqUyx5ZT1rfHxbXTt5ZS5sZW5ndGg+MCYmZ2UucHVzaChGcigidjpzaGFwZXR5cGUiLFtGcigidjpzdHJva2UiLG51bGwse2pvaW5zdHlsZToibWl0ZXIifSksRnIoInY6cGF0aCIsbnVsbCx7c2hhZG93''@;'; put 'put ''b2s6ImYiLGV4dHJ1c2lvbm9rOiJmIixzdHJva2VvazoiZiIsZmlsbG9rOiJmIiwibzpjb25uZWN0dHlwZSI6InJlY3QifSksRnIoIm86bG9jayIsbnVsbCx7InY6ZXh0IjoiZWRpdCIsc2hhcGV0eXBlOiJ0In0pXS5qb2luKCIiKSx7aWQ6Il94MDAwMF90MjAxIixjb29yZHNpemU6US5qb2lu''@;'; put 'put ''KCIsIiksIm86c3B0IjoyMDEscGF0aDphZX0pKSx5ZS5mb3JFYWNoKGZ1bmN0aW9uKE5lKXsrK3BlLGdlPWdlLmNvbmNhdChmdW5jdGlvbiBuOChTLFIpe3ZhciBrPXtpZDoiX3gwMDAwX3MiK1IsdHlwZToiI194MDAwMF90MjAxIixzdHlsZToibXNvLXdyYXAtc3R5bGU6dGlnaHQifTsoIlJh''@;'; put 'put ''ZGlvIj09U1siIXR5cGUiXXx8IkNoZWNrYm94Ij09U1siIXR5cGUiXXx8Ikxpc3QiPT1TWyIhdHlwZSJdfHwiRHJvcCI9PVNbIiF0eXBlIl0pJiYoay5zdHJva2VkPSJmIiksIkxhYmVsIj09U1siIXR5cGUiXSYmKGsuZmlsbGVkPSJmIik7dmFyIEc9IiI7Uy50JiZPQ1tTWyIhdHlwZSJdXSYm''@;'; put 'put ''KEc9T0NbU1siIXR5cGUiXV0ucmVwbGFjZSgvIyMjIy8sT3IoUy50KSkpO3ZhciBRPVtdO3JldHVybiBTLm1hY3JvJiZRLnB1c2goTm8oIng6Rm1sYU1hY3JvIixTLm1hY3JvKSksUy5saW5rJiZRLnB1c2goTm8oIng6Rm1sYUxpbmsiLFMubGluaykpLFMudmFsJiZRLnB1c2goTm8oIlJhZGlv''@;'; put 'put ''Ij09U1siIXR5cGUiXXx8IkNoZWNrYm94Ij09U1siIXR5cGUiXT8ieDpDaGVja2VkIjoieDpWYWwiLFN0cmluZyhTLnZhbCkpKSxTLnJlZiYmUS5wdXNoKE5vKCJ4OkZtbGFSYW5nZSIsUy5yZWYpKSxTLnNlbCYmIkxpc3QiPT1TWyIhdHlwZSJdJiZRLnB1c2goTm8oIng6U2VsVHlwZSIsUy5z''@;'; put 'put ''ZWwpKSxTLm1pbiYmUS5wdXNoKE5vKCJ4Ok1pbiIsU3RyaW5nKFMubWluKSkpLFMubWF4JiZRLnB1c2goTm8oIng6TWF4IixTdHJpbmcoUy5tYXgpKSksUy5zdGVwJiZRLnB1c2goTm8oIng6SW5jIixTdHJpbmcoUy5zdGVwKSkpLFMucGFnZSYmUS5wdXNoKE5vKCJ4OlBhZ2UiLFN0cmluZyhT''@;'; put 'put ''LnBhZ2UpKSksW10uY29uY2F0KFsiPHY6c2hhcGUiK1J1KGspKyI+Il0pLmNvbmNhdChQQ1tTWyIhdHlwZSJdXXx8W10pLmNvbmNhdChbR10pLmNvbmNhdChbJzx4OkNsaWVudERhdGEgT2JqZWN0VHlwZT0iJytTWyIhdHlwZSJdKyciPicsTm8oIng6QW5jaG9yIixRVihTWyIhcG9zIl0pKSxO''@;'; put 'put ''bygieDpQcmludE9iamVjdCIsIkZhbHNlIildKS5jb25jYXQoUSkuY29uY2F0KGNCW1NbIiF0eXBlIl1dfHxbXSkuY29uY2F0KFsiPC94OkNsaWVudERhdGE+IiwiPC92OnNoYXBlPiJdKX0oTmUscGUpKX0pO3ZhciBQZT1SfHxbXTtyZXR1cm4gUGUubGVuZ3RoPjAmJmdlLnB1c2goRnIoInY6''@;'; put 'put ''c2hhcGV0eXBlIixbRnIoInY6c3Ryb2tlIixudWxsLHtqb2luc3R5bGU6Im1pdGVyIn0pLEZyKCJ2OnBhdGgiLG51bGwse2dyYWRpZW50c2hhcGVvazoidCIsIm86Y29ubmVjdHR5cGUiOiJyZWN0In0pXS5qb2luKCIiKSx7aWQ6Il94MDAwMF90MjAyIixjb29yZHNpemU6US5qb2luKCIsIiks''@;'; put 'put ''Im86c3B0IjoyMDIscGF0aDphZX0pKSxQZS5mb3JFYWNoKGZ1bmN0aW9uKE5lKXsrK3BlLGdlPWdlLmNvbmNhdChmdW5jdGlvbiBZdihTLFIsayl7dmFyIEc9TmEoU1swXSksUT1TWzFdLmZpbGx8fHt9O1NbMV0ucyYmKFE9e3R5cGU6U1sxXS5zLnBhdHRlcm5UeXBlfHwic29saWQifSxTWzFd''@;'; put 'put ''LnMuZmdDb2xvciYmKFEuY29sb3IyPVEuY29sb3IxPSIjIitQMChTWzFdLnMuZmdDb2xvci5yZ2IpKSxTWzFdLnMuYmdDb2xvciYmKFEuY29sb3IyPSIjIitQMChTWzFdLnMuYmdDb2xvci5yZ2IpKSk7dmFyIGFlPXtjb2xvcjI6US5jb2xvcjJ8fCIjQkVGRjgyIix0eXBlOlEudHlwZXx8Imdy''@;'; put 'put ''YWRpZW50In07ImdyYWRpZW50Ij09YWUudHlwZSYmKGFlLmFuZ2xlPSItMTgwIik7dmFyIGdlPSJncmFkaWVudCI9PWFlLnR5cGU/RnIoIm86ZmlsbCIsbnVsbCx7dHlwZToiZ3JhZGllbnRVbnNjYWxlZCIsInY6ZXh0IjoidmlldyJ9KTpudWxsLHBlPUZyKCJ2OmZpbGwiLGdlLGFlKSx5ZT17''@;'; put 'put ''fTtTWzFdLnNoYWRvdyYmKFNbMV0uc2hhZG93LmNvbG9yJiYoeWUuY29sb3I9U1sxXS5zaGFkb3cuY29sb3IpLFNbMV0uc2hhZG93Lm9uJiYoeWUub249U1sxXS5zaGFkb3cub24pKSx5ZS5vYnNjdXJlZD0idCI7dmFyIFBlPSEwLE5lPSEwLFllPVNbMV1bIiFwb3MiXT9xdChTWzFdWyIhcG9z''@;'; put 'put ''Il0pOm51bGw7cmV0dXJuIFllJiYoTmU9bnVsbD09WWUuUiYmbnVsbD09WWUuQyYmbnVsbD09WWUuWCYmbnVsbD09WWUuWSxQZT0hWWUuciYmIVllLmMsSlYoWWUsMCxrKSksWyI8djpzaGFwZSIrUnUoe2lkOiJfeDAwMDBfcyIrUix0eXBlOiIjX3gwMDAwX3QyMDIiLHN0eWxlOiJwb3NpdGlv''@;'; put 'put ''bjphYnNvbHV0ZTsgbWFyZ2luLWxlZnQ6ODBwdDttYXJnaW4tdG9wOjVwdDt3aWR0aDoxMDRwdDtoZWlnaHQ6NjRwdDt6LWluZGV4OjEwIisoU1sxXS5oaWRkZW4/Ijt2aXNpYmlsaXR5OmhpZGRlbiI6IiIpLGZpbGxjb2xvcjpRLmNvbG9yMXx8IiNFQ0ZBRDQiLHN0cm9rZWNvbG9yOihTWzFd''@;'; put 'put ''LnN0cm9rZXx8e30pLmNvbG9yfHwiI2VkZWFhMSJ9KSsiPiIscGUsRnIoInY6c2hhZG93IixudWxsLHllKSxGcigidjpwYXRoIixudWxsLHsibzpjb25uZWN0dHlwZSI6Im5vbmUifSksJzx2OnRleHRib3g+PGRpdiBzdHlsZT0idGV4dC1hbGlnbjpsZWZ0Ij48L2Rpdj48L3Y6dGV4dGJveD4n''@;'; put 'put ''LCc8eDpDbGllbnREYXRhIE9iamVjdFR5cGU9Ik5vdGUiPicsUGU/Ijx4Ok1vdmVXaXRoQ2VsbHMvPiI6IiIsTmU/Ijx4OlNpemVXaXRoQ2VsbHMvPiI6IiIsTm8oIng6QW5jaG9yIixZZT9RVihZZSk6U1sxXS5yYXdhbmNob3J8fFtHLmMrMSwwLEcucisxLDAsRy5jKzMsMjAsRy5yKzUsMjBd''@;'; put 'put ''LmpvaW4oIiwiKSksTm8oIng6QXV0b0ZpbGwiLCJGYWxzZSIpLE5vKCJ4OlJvdyIsU3RyaW5nKEcucikpLE5vKCJ4OkNvbHVtbiIsU3RyaW5nKEcuYykpLFNbMV0uaGlkZGVuPyIiOiI8eDpWaXNpYmxlLz4iLCI8L3g6Q2xpZW50RGF0YT4iLCI8L3Y6c2hhcGU+Il19KE5lLHBlLEcpKX0pLGdl''@;'; put 'put ''LnB1c2goIjwveG1sPiIpLGdlLmpvaW4oIiIpfXZhciBjQj17QnV0dG9uOlsiPHg6QXV0b0ZpbGw+RmFsc2U8L3g6QXV0b0ZpbGw+IiwiPHg6VGV4dEhBbGlnbj5DZW50ZXI8L3g6VGV4dEhBbGlnbj4iLCI8eDpUZXh0VkFsaWduPkNlbnRlcjwveDpUZXh0VkFsaWduPiJdLEdCb3g6WyI8eDpT''@;'; put 'put ''aXplV2l0aENlbGxzLz4iLCI8eDpBdXRvRmlsbD5GYWxzZTwveDpBdXRvRmlsbD4iLCI8eDpOb1RocmVlRC8+Il0sTGFiZWw6WyI8eDpBdXRvRmlsbD5GYWxzZTwveDpBdXRvRmlsbD4iLCI8eDpBdXRvTGluZT5GYWxzZTwveDpBdXRvTGluZT4iXSxSYWRpbzpbIjx4OlNpemVXaXRoQ2VsbHMv''@;'; put 'put ''PiIsIjx4OkF1dG9GaWxsPkZhbHNlPC94OkF1dG9GaWxsPiIsIjx4OkF1dG9MaW5lPkZhbHNlPC94OkF1dG9MaW5lPiIsIjx4OlRleHRWQWxpZ24+Q2VudGVyPC94OlRleHRWQWxpZ24+IiwiPHg6Tm9UaHJlZUQvPiJdLENoZWNrYm94OlsiPHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6QXV0b0Zp''@;'; put 'put ''bGw+RmFsc2U8L3g6QXV0b0ZpbGw+IiwiPHg6QXV0b0xpbmU+RmFsc2U8L3g6QXV0b0xpbmU+IiwiPHg6VGV4dFZBbGlnbj5DZW50ZXI8L3g6VGV4dFZBbGlnbj4iLCI8eDpOb1RocmVlRC8+Il0sRHJvcDpbIjx4OlNpemVXaXRoQ2VsbHMvPiIsIjx4OkF1dG9MaW5lPkZhbHNlPC94OkF1dG9M''@;'; put 'put ''aW5lPiIsIjx4Ok5vVGhyZWVEMi8+IiwiPHg6U2VsVHlwZT5TaW5nbGU8L3g6U2VsVHlwZT4iLCI8eDpEcm9wU3R5bGU+Q29tYm88L3g6RHJvcFN0eWxlPiIsIjx4OkxDVD5Ob3JtYWw8L3g6TENUPiIsIjx4OkRyb3BMaW5lcz40PC94OkRyb3BMaW5lcz4iXSxMaXN0OlsiPHg6U2l6ZVdpdGhD''@;'; put 'put ''ZWxscy8+IiwiPHg6QXV0b0xpbmU+RmFsc2U8L3g6QXV0b0xpbmU+IiwiPHg6Tm9UaHJlZUQyLz4iLCI8eDpMQ1Q+Tm9ybWFsPC94OkxDVD4iLCI8eDpWYWw+MDwveDpWYWw+IiwiPHg6TWluPjA8L3g6TWluPiIsIjx4Ok1heD41PC94Ok1heD4iLCI8eDpJbmM+MTwveDpJbmM+IiwiPHg6UGFn''@;'; put 'put ''ZT40PC94OlBhZ2U+IiwiPHg6RHg+MTU8L3g6RHg+Il0sU2Nyb2xsOlsiPHg6U2l6ZVdpdGhDZWxscy8+IiwiPHg6SG9yaXovPiIsIjx4OkR4PjE1PC94OkR4PiJdLFNwaW46WyI8eDpEeD4xNTwveDpEeD4iXX0sT0M9e0J1dHRvbjoiPHY6dGV4dGJveCBzdHlsZT0nbXNvLWRpcmVjdGlvbi1h''@;'; put 'put ''bHQ6YXV0bycgbzpzaW5nbGVjbGljaz0nZic+PGRpdiBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXInPjxmb250IGZhY2U9J0NhbGlicmknIHNpemU9JzI0MCcgY29sb3I9JyMwMDAwMDAnPiMjIyM8L2ZvbnQ+PC9kaXY+PC92OnRleHRib3g+IixHQm94OiI8djp0ZXh0Ym94IHN0eWxlPSdtc28t''@;'; put 'put ''ZGlyZWN0aW9uLWFsdDphdXRvJyBvOnNpbmdsZWNsaWNrPSdmJz48ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmxlZnQnPjxmb250IGZhY2U9J0x1Y2lkYSBHcmFuZGUnIHNpemU9JzI2MCcgY29sb3I9JyMwMDAwMDAnPiMjIyM8L2ZvbnQ+PC9kaXY+PC92OnRleHRib3g+IixSYWRpbzoiPHY6dGV4''@;'; put 'put ''dGJveCBzdHlsZT0nbXNvLWRpcmVjdGlvbi1hbHQ6YXV0bycgbzpzaW5nbGVjbGljaz0nZic+PGRpdiBzdHlsZT0ndGV4dC1hbGlnbjpsZWZ0Jz48Zm9udCBmYWNlPSdMdWNpZGEgR3JhbmRlJyBzaXplPScyNjAnIGNvbG9yPSdhdXRvJz4jIyMjPC9mb250PjwvZGl2Pjwvdjp0ZXh0Ym94PiIs''@;'; put 'put ''TGFiZWw6Ijx2OnRleHRib3ggc3R5bGU9J21zby1kaXJlY3Rpb24tYWx0OmF1dG8nIG86c2luZ2xlY2xpY2s9J2YnPjxkaXYgc3R5bGU9J3RleHQtYWxpZ246bGVmdCc+PGZvbnQgZmFjZT0nTHVjaWRhIEdyYW5kZScgc2l6ZT0nMjYwJyBjb2xvcj0nIzAwMDAwMCc+IyMjIzwvZm9udD48L2Rp''@;'; put 'put ''dj48L3Y6dGV4dGJveD4iLENoZWNrYm94OiI8djp0ZXh0Ym94IHN0eWxlPSdtc28tZGlyZWN0aW9uLWFsdDphdXRvJyBvOnNpbmdsZWNsaWNrPSdmJz48ZGl2IHN0eWxlPSd0ZXh0LWFsaWduOmxlZnQnPjxmb250IGZhY2U9J0x1Y2lkYSBHcmFuZGUnIHNpemU9JzI2MCcgY29sb3I9JyMwMDAw''@;'; put 'put ''MDAnPiMjIyM8L2ZvbnQ+PC9kaXY+PC92OnRleHRib3g+IixzaGVldGpzOiJkYWZ1cSJ9LFBDPXtCdXR0b246Wyc8djpmaWxsIGNvbG9yMj0iI2YwZjBmMCBbNjddIiBvOmRldGVjdG1vdXNlY2xpY2s9InQiLz4nLCc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIvPiddLEdCb3g6''@;'; put 'put ''Wyc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIvPiddLERyb3A6Wyc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIgdGV4dD0idCIvPiddLExpc3Q6Wyc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIgdGV4dD0idCIvPiddLFNwaW46Wyc8bzpsb2NrIHY6''@;'; put 'put ''ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIgdGV4dD0idCIvPiddLFNjcm9sbDpbJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0IiB0ZXh0PSJ0Ii8+J10sTGFiZWw6Wyc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIvPiddLFJhZGlvOlsnPHY6cGF0aCBzaGFkb3dvaz0i''@;'; put 'put ''dCIgc3Ryb2tlb2s9InQiIGZpbGxvaz0idCIvPicsJzxvOmxvY2sgdjpleHQ9ImVkaXQiIHJvdGF0aW9uPSJ0Ii8+J10sQ2hlY2tib3g6Wyc8djpwYXRoIHNoYWRvd29rPSJ0IiBzdHJva2Vvaz0idCIgZmlsbG9rPSJ0Ii8+JywnPG86bG9jayB2OmV4dD0iZWRpdCIgcm90YXRpb249InQiLz4n''@;'; put 'put ''XSxzaGVldGpzOltdfTtmdW5jdGlvbiBSayhTLFIsayxHKXt2YXIgUT17IiFpZCI6e319LGFlPVtGcigieG1sIixudWxsLHsieG1sbnM6diI6dmwudiwieG1sbnM6byI6dmwubywieG1sbnM6eCI6dmwueH0pLnJlcGxhY2UoL1wvPi8sIj4iKSxGcigibzpzaGFwZWxheW91dCIsRnIoIm86aWRt''@;'; put 'put ''YXAiLG51bGwseyJ2OmV4dCI6ImVkaXQiLGRhdGE6MX0pLHsidjpleHQiOiJlZGl0In0pLCc8djpzaGFwZXR5cGUgaWQ9Il94MDAwMF90NzUiIGNvb3Jkc2l6ZT0iMjE2MDAsMjE2MDAiIG86c3B0PSI3NSIgbzpwcmVmZXJyZWxhdGl2ZT0idCIgcGF0aD0ibUA0QDVsQDRAMTFAOUAxMUA5QDV4''@;'; put 'put ''ZSIgZmlsbGVkPSJmIiBzdHJva2VkPSJmIj4nLCc8djpzdHJva2Ugam9pbnN0eWxlPSJtaXRlciIvPicsIjx2OmZvcm11bGFzPiIsJzx2OmYgZXFuPSJpZiBsaW5lRHJhd24gcGl4ZWxMaW5lV2lkdGggMCIvPicsJzx2OmYgZXFuPSJzdW0gQDAgMSAwIi8+JywnPHY6ZiBlcW49InN1bSAwIDAg''@;'; put 'put ''QDEiLz4nLCc8djpmIGVxbj0icHJvZCBAMiAxIDIiLz4nLCc8djpmIGVxbj0icHJvZCBAMyAyMTYwMCBwaXhlbFdpZHRoIi8+JywnPHY6ZiBlcW49InByb2QgQDMgMjE2MDAgcGl4ZWxIZWlnaHQiLz4nLCc8djpmIGVxbj0ic3VtIEAwIDAgMSIvPicsJzx2OmYgZXFuPSJwcm9kIEA2IDEgMiIv''@;'; put 'put ''PicsJzx2OmYgZXFuPSJwcm9kIEA3IDIxNjAwIHBpeGVsV2lkdGgiLz4nLCc8djpmIGVxbj0ic3VtIEA4IDIxNjAwIDAiLz4nLCc8djpmIGVxbj0icHJvZCBANyAyMTYwMCBwaXhlbEhlaWdodCIvPicsJzx2OmYgZXFuPSJzdW0gQDEwIDIxNjAwIDAiLz4nLCI8L3Y6Zm9ybXVsYXM+IiwnPHY6''@;'; put 'put ''cGF0aCBvOmV4dHJ1c2lvbm9rPSJmIiBncmFkaWVudHNoYXBlb2s9InQiIG86Y29ubmVjdHR5cGU9InJlY3QiLz4nLCc8bzpsb2NrIHY6ZXh0PSJlZGl0IiBhc3BlY3RyYXRpbz0idCIvPicsIjwvdjpzaGFwZXR5cGU+Il0sZ2U9MTtbImhlYWRlciIsImZvb3RlciJdLmZvckVhY2goZnVuY3Rp''@;'; put 'put ''b24ocGUpe0dbcGVdJiZbIm9kZCIsImV2ZW4iLCJmaXJzdCJdLmZvckVhY2goZnVuY3Rpb24oeWUpe0dbcGVdW3llXSYmWyJsZWZ0IiwicmlnaHQiLCJjZW50ZXIiXS5mb3JFYWNoKGZ1bmN0aW9uKFBlKXtpZihBcnJheS5pc0FycmF5KEdbcGVdW3llXVtQZV0pKWZvcih2YXIgTmU9MDtOZTxH''@;'; put 'put ''W3BlXVt5ZV1bUGVdLmxlbmd0aDsrK05lKWlmKEdbcGVdW3llXVtQZV1bTmVdKXt2YXIgWWU9R1twZV1beWVdW1BlXVtOZV07aWYoInJlbW90ZSI9PVllWyIhZGF0YXR5cGUiXSl0aHJvdyJDYW5ub3QgdXNlIGxpbmtlZCBpbWFnZSBpbiBoZWFkZXIgb3IgZm9vdGVyIjtmb3IoO25pKFMsInhs''@;'; put 'put ''L21lZGlhL2ltYWdlIitnZSsiLmpwZyIpOykrK2dlO1MuZmlsZSgieGwvbWVkaWEvaW1hZ2UiK2dlKyIuanBnIixKdGUoWWUpLHtiaW5hcnk6ITB9KSxFcihRLC0xLCIuLi9tZWRpYS9pbWFnZSIrZ2UrIi5qcGciLHFvLklNRyk7dmFyIGV0PSJfeDAwMDBfcyIrKDEwMjUrWWUuX2NudCksdXQ9''@;'; put 'put ''InBvc2l0aW9uOmFic29sdXRlO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXRvcDowO3otaW5kZXg6IisoWWUuX2NudCsxKSsiOyI7dXQrPSJ3aWR0aDoiK1llWyIhcG9zIl0udysicHg7Iix1dCs9ImhlaWdodDoiK1llWyIhcG9zIl0uaCsicHg7Ijt2YXIgRXQ9UGUuY2hhckF0KDApLnRvVXBwZXJD''@;'; put 'put ''YXNlKCkrcGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCk7Im9kZCIhPT15ZSYmKEV0Kz15ZS50b1VwcGVyQ2FzZSgpKSxHW3BlXVt5ZV1bUGVdLmxlbmd0aD4xJiYoRXQrPU5lKSxhZS5wdXNoKEZyKCJ2OnNoYXBlIixbJzx2OmltYWdlZGF0YSBvOnJlbGlkPSJySWQnKyhZZS5fY250KzEpKyci''@;'; put 'put ''IG86dGl0bGU9InNoZWV0anMiLz4nLCc8bzpsb2NrIHY6ZXh0PSJlZGl0IiByb3RhdGlvbj0idCIvPiddLmpvaW4oIiIpLHtpZDpFdCwibzpzcGlkIjpldCx0eXBlOiIjX3gwMDAwX3Q3NSIsc3R5bGU6dXR9KSl9fSl9KX0pLGFlLnB1c2goIjwveG1sPiIpLFMuZmlsZSgieGwvZHJhd2luZ3Mv''@;'; put 'put ''dm1sRHJhd2luZyIraysiSEYudm1sIixhZS5qb2luKCIiKSksUy5maWxlKCJ4bC9kcmF3aW5ncy9fcmVscy92bWxEcmF3aW5nIitrKyJIRi52bWwucmVscyIsa2koUSkpfXFvLkNNTlQ9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VEb2N1bWVudC8yMDA2L3JlbGF0''@;'; put 'put ''aW9uc2hpcHMvY29tbWVudHMiO3ZhciBHdj1GcigiY29tbWVudHMiLG51bGwse3htbG5zOkdpLm1haW5bMF19KTtmdW5jdGlvbiBGQyhTKXt2YXIgUj1bSWksR3ZdLGs9W107cmV0dXJuIFIucHVzaCgiPGF1dGhvcnM+IiksUy5mb3JFYWNoKGZ1bmN0aW9uKEcpe0dbMV0uZm9yRWFjaChmdW5j''@;'; put 'put ''dGlvbihRKXt2YXIgYWU9T3IoUS5hKTtrLmluZGV4T2YoYWUpPi0xfHwoay5wdXNoKGFlKSxSLnB1c2goIjxhdXRob3I+IithZSsiPC9hdXRob3I+IikpfSl9KSxSLnB1c2goIjwvYXV0aG9ycz4iKSxSLnB1c2goIjxjb21tZW50TGlzdD4iKSxTLmZvckVhY2goZnVuY3Rpb24oRyl7R1sxXS5m''@;'; put 'put ''b3JFYWNoKGZ1bmN0aW9uKFEpe1IucHVzaCgnPGNvbW1lbnQgcmVmPSInK0dbMF0rJyIgYXV0aG9ySWQ9Iicray5pbmRleE9mKE9yKFEuYSkpKyciPjx0ZXh0PicpLFIucHVzaChRLlI/S3MoUS5SKTpObygidCIsbnVsbD09US50PyIiOk9yKFEudCkpKSxSLnB1c2goIjwvdGV4dD48L2NvbW1l''@;'; put 'put ''bnQ+Iil9KX0pLFIucHVzaCgiPC9jb21tZW50TGlzdD4iKSxSLmxlbmd0aD4yJiYoUltSLmxlbmd0aF09IjwvY29tbWVudHM+IixSWzFdPVJbMV0ucmVwbGFjZSgiLz4iLCI+IikpLFIuam9pbigiIil9dmFyIGRCPXB1O2Z1bmN0aW9uIEhDKFMpe3ZhciBSPW1pKCksaz1bXTtyZXR1cm4gSHIo''@;'; put 'put ''UiwiQnJ0QmVnaW5Db21tZW50cyIpLEhyKFIsIkJydEJlZ2luQ29tbWVudEF1dGhvcnMiKSxTLmZvckVhY2goZnVuY3Rpb24oRyl7R1sxXS5mb3JFYWNoKGZ1bmN0aW9uKFEpe2suaW5kZXhPZihRLmEpPi0xfHwoay5wdXNoKFEuYS5zbGljZSgwLDU0KSksSHIoUiwiQnJ0Q29tbWVudEF1dGhv''@;'; put 'put ''ciIsZnVuY3Rpb24gUXRlKFMpe3JldHVybiBQYyhTLnNsaWNlKDAsNTQpKX0oUS5hKSkpfSl9KSxIcihSLCJCcnRFbmRDb21tZW50QXV0aG9ycyIpLEhyKFIsIkJydEJlZ2luQ29tbWVudExpc3QiKSxTLmZvckVhY2goZnVuY3Rpb24oRyl7R1sxXS5mb3JFYWNoKGZ1bmN0aW9uKFEpe1EuaWF1''@;'; put 'put ''dGhvcj1rLmluZGV4T2YoUS5hKTt2YXIgYWU9e3M6TmEoR1swXSksZTpOYShHWzBdKX07SHIoUiwiQnJ0QmVnaW5Db21tZW50IixmdW5jdGlvbiB1QihTLFIpe3JldHVybiBudWxsPT1SJiYoUj1ibigzNikpLFIud3JpdGVfc2hpZnQoNCxTWzFdLmlhdXRob3IpLGNmKFNbMF0sUiksUi53cml0''@;'; put 'put ''ZV9zaGlmdCg0LDApLFIud3JpdGVfc2hpZnQoNCwwKSxSLndyaXRlX3NoaWZ0KDQsMCksUi53cml0ZV9zaGlmdCg0LDApLFJ9KFthZSxRXSkpLFEudCYmUS50Lmxlbmd0aD4wJiZIcihSLCJCcnRDb21tZW50VGV4dCIsZnVuY3Rpb24gUWQoUyxSKXt2YXIgaz0hMTtyZXR1cm4gbnVsbD09UiYm''@;'; put 'put ''KGs9ITAsUj1ibigyMys0KlMudC5sZW5ndGgpKSxSLndyaXRlX3NoaWZ0KDEsMSksUGMoUy50LFIpLFIud3JpdGVfc2hpZnQoNCwxKSxmdW5jdGlvbiBydihTLFIpe1J8fChSPWJuKDQpKSxSLndyaXRlX3NoaWZ0KDIsUy5pY2h8fDApLFIud3JpdGVfc2hpZnQoMixTLmlmbnR8fDApfSh7aWNo''@;'; put 'put ''OjAsaWZudDowfSxSKSxrP1Iuc2xpY2UoMCxSLmwpOlJ9KFEpKSxIcihSLCJCcnRFbmRDb21tZW50IiksZGVsZXRlIFEuaWF1dGhvcn0pfSksSHIoUiwiQnJ0RW5kQ29tbWVudExpc3QiKSxIcihSLCJCcnRFbmRDb21tZW50cyIpLFIuZW5kKCl9dmFyIFBrPSJhcHBsaWNhdGlvbi92bmQubXMt''@;'; put 'put ''b2ZmaWNlLnZiYVByb2plY3QiLE5rPVsieGxzYiIsInhsc20iLCJ4bGFtIiwiYmlmZjgiLCJ4bGEiXTtxby5EUz0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmljZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy9kaWFsb2dzaGVldCIscW8uTVM9Imh0dHA6Ly9zY2hl''@;'; put 'put ''bWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYvcmVsYXRpb25zaGlwcy94bE1hY3Jvc2hlZXQiO3ZhciBPNT1mdW5jdGlvbigpe3ZhciBTPS8oXnxbXkEtWmEtel9dKVIoXFs/LT9cZCtcXXxbMS05XVxkKnwpQyhcWz8tP1xkK1xdfFsxLTldXGQqfCkoPyFbQS1aYS16MC05X10pL2csUj17''@;'; put 'put ''cjowLGM6MH07ZnVuY3Rpb24gayhHLFEsYWUsZ2Upe3ZhciBwZT0hMSx5ZT0hMTswPT1hZS5sZW5ndGg/eWU9ITA6IlsiPT1hZS5jaGFyQXQoMCkmJih5ZT0hMCxhZT1hZS5zbGljZSgxLC0xKSksMD09Z2UubGVuZ3RoP3BlPSEwOiJbIj09Z2UuY2hhckF0KDApJiYocGU9ITAsZ2U9Z2Uuc2xp''@;'; put 'put ''Y2UoMSwtMSkpO3ZhciBQZT1hZS5sZW5ndGg+MD8wfHBhcnNlSW50KGFlLDEwKTowLE5lPWdlLmxlbmd0aD4wPzB8cGFyc2VJbnQoZ2UsMTApOjA7cmV0dXJuIHBlP05lKz1SLmM6LS1OZSx5ZT9QZSs9Ui5yOi0tUGUsUSsocGU/IiI6IiQiKStUbyhOZSkrKHllPyIiOiIkIikremkoUGUpfXJl''@;'; put 'put ''dHVybiBmdW5jdGlvbihRLGFlKXtyZXR1cm4gUj1hZSxRLnJlcGxhY2UoUyxrKX19KCksZDI9LyhefFteLl9BLVowLTldKShbJF0/KShbQS1aXXsxLDJ9fFtBLVddW0EtWl17Mn18WFtBLUVdW0EtWl18WEZbQS1EXSkoWyRdPykoMTBbMC0zXVxkezR9fDEwNFswLTddXGR7M318MTA0OFswLTRd''@;'; put 'put ''XGR7Mn18MTA0ODVbMC02XVxkfDEwNDg1N1swLTZdfFsxLTldXGR7MCw1fSkoPyFbXy5cKEEtWmEtejAtOV0pL2csTzQ9ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oUixrKXtyZXR1cm4gUi5yZXBsYWNlKGQyLGZ1bmN0aW9uKEcsUSxhZSxnZSxwZSx5ZSl7dmFyIFBlPVNvKGdlKS0oYWU/''@;'; put 'put ''MDprLmMpLE5lPV9hKHllKS0ocGU/MDprLnIpO3JldHVybiBRKyJSIisoMD09TmU/IiI6cGU/TmUrMToiWyIrTmUrIl0iKSsiQyIrKDA9PVBlPyIiOmFlP1BlKzE6IlsiK1BlKyJdIil9KX19KCk7ZnVuY3Rpb24gVmsoUyxSKXtyZXR1cm4gUy5yZXBsYWNlKGQyLGZ1bmN0aW9uKGssRyxRLGFl''@;'; put 'put ''LGdlLHBlKXtyZXR1cm4gRysoIiQiPT1RP1ErYWU6VG8oU28oYWUpK1IuYykpKygiJCI9PWdlP2dlK3BlOnppKF9hKHBlKStSLnIpKX0pLnJlcGxhY2UoLyhcZCspOihcZCspL2csZnVuY3Rpb24oayxHLFEpe3JldHVybiB6aShfYShHKStSLnIpKyI6Iit6aShfYShRKStSLnIpfSl9ZnVuY3Rp''@;'; put 'put ''b24gZW5lKFMsUixrKXt2YXIgUT1TcyhSKS5zLGFlPU5hKGspO3JldHVybiBWayhTLHtyOmFlLnItUS5yLGM6YWUuYy1RLmN9KX1mdW5jdGlvbiBtQihTKXtyZXR1cm4gUy5yZXBsYWNlKC9feGxmblwuL2csIiIpfWZ1bmN0aW9uIHZ1KFMpe1MubCs9MX1mdW5jdGlvbiBQNChTLFIpe3ZhciBr''@;'; put 'put ''PVMucmVhZF9zaGlmdCgxPT1SPzE6Mik7cmV0dXJuWzE2MzgzJmssaz4+MTQmMSxrPj4xNSYxXX1mdW5jdGlvbiBOQyhTLFIsayl7dmFyIEc9MjtpZihrKXtpZihrLmJpZmY+PTImJmsuYmlmZjw9NSlyZXR1cm4gQmsoUyk7MTI9PWsuYmlmZiYmKEc9NCl9dmFyIFE9Uy5yZWFkX3NoaWZ0KEcp''@;'; put 'put ''LGFlPVMucmVhZF9zaGlmdChHKSxnZT1QNChTLDIpLHBlPVA0KFMsMik7cmV0dXJue3M6e3I6USxjOmdlWzBdLGNSZWw6Z2VbMV0sclJlbDpnZVsyXX0sZTp7cjphZSxjOnBlWzBdLGNSZWw6cGVbMV0sclJlbDpwZVsyXX19fWZ1bmN0aW9uIEJrKFMpe3ZhciBSPVA0KFMsMiksaz1QNChTLDIp''@;'; put 'put ''LEc9Uy5yZWFkX3NoaWZ0KDEpLFE9Uy5yZWFkX3NoaWZ0KDEpO3JldHVybntzOntyOlJbMF0sYzpHLGNSZWw6UlsxXSxyUmVsOlJbMl19LGU6e3I6a1swXSxjOlEsY1JlbDprWzFdLHJSZWw6a1syXX19fWZ1bmN0aW9uIGprKFMsUixrKXtpZihrJiZrLmJpZmY+PTImJmsuYmlmZjw9NSlyZXR1''@;'; put 'put ''cm4gZnVuY3Rpb24gYkIoUyl7dmFyIFI9UDQoUywyKSxrPVMucmVhZF9zaGlmdCgxKTtyZXR1cm57cjpSWzBdLGM6ayxjUmVsOlJbMV0sclJlbDpSWzJdfX0oUyk7dmFyIEc9Uy5yZWFkX3NoaWZ0KGsmJjEyPT1rLmJpZmY/NDoyKSxRPVA0KFMsMik7cmV0dXJue3I6RyxjOlFbMF0sY1JlbDpR''@;'; put 'put ''WzFdLHJSZWw6UVsyXX19ZnVuY3Rpb24gVkMoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybntyOlIsYzoyNTUmayxmUXVvdGVkOiEhKDE2Mzg0JmspLGNSZWw6az4+MTUsclJlbDprPj4xNX19ZnVuY3Rpb24gWWsoUyl7cmV0dXJuW1MucmVhZF9zaGlm''@;'; put 'put ''dCgxKSxTLnJlYWRfc2hpZnQoMSldfWZ1bmN0aW9uIFVDKFMsUil7dmFyIGs9W1MucmVhZF9zaGlmdCgxKV07aWYoMTI9PVIpc3dpdGNoKGtbMF0pe2Nhc2UgMjprWzBdPTQ7YnJlYWs7Y2FzZSA0OmtbMF09MTY7YnJlYWs7Y2FzZSAwOmtbMF09MTticmVhaztjYXNlIDE6a1swXT0yfXN3aXRj''@;'; put 'put ''aChrWzBdKXtjYXNlIDQ6a1sxXT1kYShTLDEpPyJUUlVFIjoiRkFMU0UiLDEyIT1SJiYoUy5sKz03KTticmVhaztjYXNlIDM3OmNhc2UgMTY6a1sxXT1TY1tTW1MubF1dLFMubCs9MTI9PVI/NDo4O2JyZWFrO2Nhc2UgMDpTLmwrPTg7YnJlYWs7Y2FzZSAxOmtbMV09TGwoUyk7YnJlYWs7Y2Fz''@;'; put 'put ''ZSAyOmtbMV09SjAoUywwLHtiaWZmOlI+MCYmUjw4PzI6Un0pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJCYWQgU2VyQXI6ICIra1swXSl9cmV0dXJuIGt9ZnVuY3Rpb24gcWsoUyxSLGspe2Zvcih2YXIgRz1TLnJlYWRfc2hpZnQoMTI9PWsuYmlmZj80OjIpLFE9W10sYWU9MDth''@;'; put 'put ''ZSE9RzsrK2FlKVEucHVzaCgoMTI9PWsuYmlmZj9ndTp0MikoUyw4KSk7cmV0dXJuIFF9ZnVuY3Rpb24gQUIoUyxSLGspe3ZhciBHPTAsUT0wOzEyPT1rLmJpZmY/KEc9Uy5yZWFkX3NoaWZ0KDQpLFE9Uy5yZWFkX3NoaWZ0KDQpKTooUT0xK1MucmVhZF9zaGlmdCgxKSxHPTErUy5yZWFkX3No''@;'; put 'put ''aWZ0KDIpKSxrLmJpZmY+PTImJmsuYmlmZjw4JiYoLS1HLDA9PS0tUSYmKFE9MjU2KSk7Zm9yKHZhciBhZT0wLGdlPVtdO2FlIT1HJiYoZ2VbYWVdPVtdKTsrK2FlKWZvcih2YXIgcGU9MDtwZSE9UTsrK3BlKWdlW2FlXVtwZV09VUMoUyxrLmJpZmYpO3JldHVybiBnZX1mdW5jdGlvbiBGNShT''@;'; put 'put ''LFIsayl7cmV0dXJuIFMubCs9MixbVkMoUyldfWZ1bmN0aW9uIFpDKFMpe3JldHVybiBTLmwrPTYsW119dmFyIFBCPUY1LEZCPVpDLEhCPVpDLE5CPUY1O2Z1bmN0aW9uIEprKFMpe3JldHVybiBTLmwrPTIsW3hjKFMpLDEmUy5yZWFkX3NoaWZ0KDIpXX12YXIgV0M9RjUsY25lPUprLHVuZT1a''@;'; put 'put ''QyxZQz1GNSxkbmU9RjUsaG5lPVsiRGF0YSIsIkFsbCIsIkhlYWRlcnMiLCI/PyIsIj9EYXRhMiIsIj8/IiwiP0RhdGFIZWFkZXJzIiwiPz8iLCJUb3RhbHMiLCI/PyIsIj8/IiwiPz8iLCI/RGF0YVRvdGFscyIsIj8/IiwiPz8iLCI/PyIsIj9DdXJyZW50Il0sSnY9ezE6e246IlB0Z0V4cCIs''@;'; put 'put ''ZjpmdW5jdGlvbiB4QihTLFIsayl7cmV0dXJuIFMubCsrLGsmJjEyPT1rLmJpZmY/W1MucmVhZF9zaGlmdCg0LCJpIiksMF06W1MucmVhZF9zaGlmdCgyKSxTLnJlYWRfc2hpZnQoayYmMj09ay5iaWZmPzE6MildfX0sMjp7bjoiUHRnVGJsIixmOlJufSwzOntuOiJQdGdBZGQiLGY6dnV9LDQ6''@;'; put 'put ''e246IlB0Z1N1YiIsZjp2dX0sNTp7bjoiUHRnTXVsIixmOnZ1fSw2OntuOiJQdGdEaXYiLGY6dnV9LDc6e246IlB0Z1Bvd2VyIixmOnZ1fSw4OntuOiJQdGdDb25jYXQiLGY6dnV9LDk6e246IlB0Z0x0IixmOnZ1fSwxMDp7bjoiUHRnTGUiLGY6dnV9LDExOntuOiJQdGdFcSIsZjp2dX0sMTI6''@;'; put 'put ''e246IlB0Z0dlIixmOnZ1fSwxMzp7bjoiUHRnR3QiLGY6dnV9LDE0OntuOiJQdGdOZSIsZjp2dX0sMTU6e246IlB0Z0lzZWN0IixmOnZ1fSwxNjp7bjoiUHRnVW5pb24iLGY6dnV9LDE3OntuOiJQdGdSYW5nZSIsZjp2dX0sMTg6e246IlB0Z1VwbHVzIixmOnZ1fSwxOTp7bjoiUHRnVW1pbnVz''@;'; put 'put ''IixmOnZ1fSwyMDp7bjoiUHRnUGVyY2VudCIsZjp2dX0sMjE6e246IlB0Z1BhcmVuIixmOnZ1fSwyMjp7bjoiUHRnTWlzc0FyZyIsZjp2dX0sMjM6e246IlB0Z1N0ciIsZjpmdW5jdGlvbiBUQihTLFIsayl7cmV0dXJuIFMubCsrLFpvKFMsMCxrKX19LDI2OntuOiJQdGdTaGVldCIsZjpmdW5j''@;'; put 'put ''dGlvbiBnbmUoUyxSLGspe3JldHVybiBTLmwrPTUsUy5sKz0yLFMubCs9Mj09ay5iaWZmPzE6NCxbIlBUR1NIRUVUIl19fSwyNzp7bjoiUHRnRW5kU2hlZXQiLGY6ZnVuY3Rpb24gVkIoUyxSLGspe3JldHVybiBTLmwrPTI9PWsuYmlmZj80OjUsWyJQVEdFTkRTSEVFVCJdfX0sMjg6e246IlB0''@;'; put 'put ''Z0VyciIsZjpmdW5jdGlvbiB6QyhTKXtyZXR1cm4gUy5sKyssU2NbUy5yZWFkX3NoaWZ0KDEpXX19LDI5OntuOiJQdGdCb29sIixmOmZ1bmN0aW9uIFA1KFMpe3JldHVybiBTLmwrKywwIT09Uy5yZWFkX3NoaWZ0KDEpfX0sMzA6e246IlB0Z0ludCIsZjpmdW5jdGlvbiBFQihTKXtyZXR1cm4g''@;'; put 'put ''Uy5sKyssUy5yZWFkX3NoaWZ0KDIpfX0sMzE6e246IlB0Z051bSIsZjpmdW5jdGlvbiBGNChTKXtyZXR1cm4gUy5sKyssTGwoUyl9fSwzMjp7bjoiUHRnQXJyYXkiLGY6ZnVuY3Rpb24gaW5lKFMsUixrKXt2YXIgRz0oOTYmU1tTLmwrK10pPj41O3JldHVybiBTLmwrPTI9PWsuYmlmZj82OjEy''@;'; put 'put ''PT1rLmJpZmY/MTQ6NyxbR119fSwzMzp7bjoiUHRnRnVuYyIsZjpmdW5jdGlvbiBTQihTLFIsayl7dmFyIEc9KDk2JlNbUy5sXSk+PjU7Uy5sKz0xO3ZhciBRPVMucmVhZF9zaGlmdChrJiZrLmJpZmY8PTM/MToyKTtyZXR1cm5bWkJbUV0sYURbUV0sR119fSwzNDp7bjoiUHRnRnVuY1ZhciIs''@;'; put 'put ''ZjpmdW5jdGlvbiBNQihTLFIsayl7dmFyIEc9U1tTLmwrK10sUT1TLnJlYWRfc2hpZnQoMSksYWU9ayYmay5iaWZmPD0zP1s4OD09Rz8tMTowLFMucmVhZF9zaGlmdCgxKV06ZnVuY3Rpb24gS2soUyl7cmV0dXJuW1NbUy5sKzFdPj43LDMyNzY3JlMucmVhZF9zaGlmdCgyKV19KFMpO3JldHVy''@;'; put 'put ''bltRLCgwPT09YWVbMF0/YUQ6blMpW2FlWzFdXV19fSwzNTp7bjoiUHRnTmFtZSIsZjpmdW5jdGlvbiBrQihTLFIsayl7dmFyIEc9Uy5yZWFkX3NoaWZ0KDEpPj4+NSYzLGFlPVMucmVhZF9zaGlmdCgha3x8ay5iaWZmPj04PzQ6Mik7c3dpdGNoKGsuYmlmZil7Y2FzZSAyOlMubCs9NTticmVh''@;'; put 'put ''aztjYXNlIDM6Y2FzZSA0OlMubCs9ODticmVhaztjYXNlIDU6Uy5sKz0xMn1yZXR1cm5bRywwLGFlXX19LDM2OntuOiJQdGdSZWYiLGY6ZnVuY3Rpb24gQ0IoUyxSLGspe3ZhciBHPSg5NiZTW1MubF0pPj41O3JldHVybiBTLmwrPTEsW0csamsoUywwLGspXX19LDM3OntuOiJQdGdBcmVhIixm''@;'; put 'put ''OmZ1bmN0aW9uIHprKFMsUixrKXtyZXR1cm5bKDk2JlNbUy5sKytdKT4+NSxOQyhTLDAsayldfX0sMzg6e246IlB0Z01lbUFyZWEiLGY6ZnVuY3Rpb24gWGsoUyxSLGspe3ZhciBHPVMucmVhZF9zaGlmdCgxKT4+PjUmMztyZXR1cm4gUy5sKz1rJiYyPT1rLmJpZmY/Mzo0LFtHLFMucmVhZF9z''@;'; put 'put ''aGlmdChrJiYyPT1rLmJpZmY/MToyKV19fSwzOTp7bjoiUHRnTWVtRXJyIixmOlJufSw0MDp7bjoiUHRnTWVtTm9NZW0iLGY6Um59LDQxOntuOiJQdGdNZW1GdW5jIixmOmZ1bmN0aW9uIHNuZShTLFIsayl7cmV0dXJuW1MucmVhZF9zaGlmdCgxKT4+PjUmMyxTLnJlYWRfc2hpZnQoayYmMj09''@;'; put 'put ''ay5iaWZmPzE6MildfX0sNDI6e246IlB0Z1JlZkVyciIsZjpmdW5jdGlvbiBsbmUoUyxSLGspe3ZhciBHPVMucmVhZF9zaGlmdCgxKT4+PjUmMztyZXR1cm4gUy5sKz00LGsuYmlmZjw4JiZTLmwtLSwxMj09ay5iaWZmJiYoUy5sKz0yKSxbR119fSw0Mzp7bjoiUHRnQXJlYUVyciIsZjpmdW5j''@;'; put 'put ''dGlvbiBaayhTLFIsayl7dmFyIEc9KDk2JlNbUy5sKytdKT4+NTtyZXR1cm4gUy5sKz1rJiZrLmJpZmY+OD8xMjprLmJpZmY8OD82OjgsW0ddfX0sNDQ6e246IlB0Z1JlZk4iLGY6ZnVuY3Rpb24gR2soUyxSLGspe3ZhciBHPSg5NiZTW1MubF0pPj41O1MubCs9MTt2YXIgUT1mdW5jdGlvbiBU''@;'; put 'put ''ZihTLFIsayl7dmFyIEc9ayYmay5iaWZmP2suYmlmZjo4O2lmKEc+PTImJkc8PTUpcmV0dXJuIGZ1bmN0aW9uIHI4KFMpe3ZhciBSPVMucmVhZF9zaGlmdCgyKSxrPVMucmVhZF9zaGlmdCgxKSxHPSgzMjc2OCZSKT4+MTUsUT0oMTYzODQmUik+PjE0O3JldHVybiBSJj0xNjM4MywxPT1HJiZS''@;'; put 'put ''Pj04MTkyJiYoUi09MTYzODQpLDE9PVEmJms+PTEyOCYmKGstPTI1Nikse3I6UixjOmssY1JlbDpRLHJSZWw6R319KFMpO3ZhciBRPVMucmVhZF9zaGlmdChHPj0xMj80OjIpLGFlPVMucmVhZF9zaGlmdCgyKSxnZT0oMTYzODQmYWUpPj4xNCxwZT0oMzI3NjgmYWUpPj4xNTtpZihhZSY9MTYz''@;'; put 'put ''ODMsMT09cGUpZm9yKDtRPjUyNDI4NzspUS09MTA0ODU3NjtpZigxPT1nZSlmb3IoO2FlPjgxOTE7KWFlLT0xNjM4NDtyZXR1cm57cjpRLGM6YWUsY1JlbDpnZSxyUmVsOnBlfX0oUywwLGspO3JldHVybltHLFFdfX0sNDU6e246IlB0Z0FyZWFOIixmOmZ1bmN0aW9uIHJuZShTLFIsayl7dmFy''@;'; put 'put ''IEc9KDk2JlNbUy5sKytdKT4+NSxRPWZ1bmN0aW9uIHZCKFMsUixrKXtpZihrLmJpZmY8OClyZXR1cm4gQmsoUyk7dmFyIEc9Uy5yZWFkX3NoaWZ0KDEyPT1rLmJpZmY/NDoyKSxRPVMucmVhZF9zaGlmdCgxMj09ay5iaWZmPzQ6MiksYWU9UDQoUywyKSxnZT1QNChTLDIpO3JldHVybntzOnty''@;'; put 'put ''OkcsYzphZVswXSxjUmVsOmFlWzFdLHJSZWw6YWVbMl19LGU6e3I6USxjOmdlWzBdLGNSZWw6Z2VbMV0sclJlbDpnZVsyXX19fShTLDAsayk7cmV0dXJuW0csUV19fSw0Njp7bjoiUHRnTWVtQXJlYU4iLGY6ZnVuY3Rpb24gcXYoUyl7cmV0dXJuW1MucmVhZF9zaGlmdCgxKT4+PjUmMyxTLnJl''@;'; put 'put ''YWRfc2hpZnQoMildfX0sNDc6e246IlB0Z01lbU5vTWVtTiIsZjpmdW5jdGlvbiBYdihTKXtyZXR1cm5bUy5yZWFkX3NoaWZ0KDEpPj4+NSYzLFMucmVhZF9zaGlmdCgyKV19fSw1Nzp7bjoiUHRnTmFtZVgiLGY6ZnVuY3Rpb24gREIoUyxSLGspe3JldHVybiA1PT1rLmJpZmY/ZnVuY3Rpb24g''@;'; put 'put ''SUIoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDEpPj4+NSYzLGs9Uy5yZWFkX3NoaWZ0KDIsImkiKTtTLmwrPTg7dmFyIEc9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiBTLmwrPTEyLFtSLGssR119KFMpOltTLnJlYWRfc2hpZnQoMSk+Pj41JjMsUy5yZWFkX3NoaWZ0KDIpLFMucmVhZF9zaGlmdCg0''@;'; put 'put ''KV19fSw1ODp7bjoiUHRnUmVmM2QiLGY6ZnVuY3Rpb24gJGsoUyxSLGspe3ZhciBHPSg5NiZTW1MubF0pPj41O1MubCs9MTt2YXIgUT1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIGsmJjU9PWsuYmlmZiYmKFMubCs9MTIpLFtHLFEsamsoUywwLGspXX19LDU5OntuOiJQdGdBcmVhM2QiLGY6ZnVu''@;'; put 'put ''Y3Rpb24gVWsoUyxSLGspe3ZhciBHPSg5NiZTW1MubCsrXSk+PjUsUT1TLnJlYWRfc2hpZnQoMiwiaSIpO2lmKGsmJjU9PT1rLmJpZmYpUy5sKz0xMjtyZXR1cm5bRyxRLE5DKFMsMCxrKV19fSw2MDp7bjoiUHRnUmVmRXJyM2QiLGY6ZnVuY3Rpb24gaTgoUyxSLGspe3ZhciBHPSg5NiZTW1Mu''@;'; put 'put ''bCsrXSk+PjUsUT1TLnJlYWRfc2hpZnQoMiksYWU9NDtpZihrKXN3aXRjaChrLmJpZmYpe2Nhc2UgNTphZT0xNTticmVhaztjYXNlIDEyOmFlPTZ9cmV0dXJuIFMubCs9YWUsW0csUV19fSw2MTp7bjoiUHRnQXJlYUVycjNkIixmOmZ1bmN0aW9uIG5uZShTLFIsayl7dmFyIEc9KDk2JlNbUy5s''@;'; put 'put ''KytdKT4+NSxRPVMucmVhZF9zaGlmdCgyKSxhZT04O2lmKGspc3dpdGNoKGsuYmlmZil7Y2FzZSA1OlMubCs9MTIsYWU9NjticmVhaztjYXNlIDEyOmFlPTEyfXJldHVybiBTLmwrPWFlLFtHLFFdfX0sMjU1Ont9fSwkQz17NjQ6MzIsOTY6MzIsNjU6MzMsOTc6MzMsNjY6MzQsOTg6MzQsNjc6''@;'; put 'put ''MzUsOTk6MzUsNjg6MzYsMTAwOjM2LDY5OjM3LDEwMTozNyw3MDozOCwxMDI6MzgsNzE6MzksMTAzOjM5LDcyOjQwLDEwNDo0MCw3Mzo0MSwxMDU6NDEsNzQ6NDIsMTA2OjQyLDc1OjQzLDEwNzo0Myw3Njo0NCwxMDg6NDQsNzc6NDUsMTA5OjQ1LDc4OjQ2LDExMDo0Niw3OTo0NywxMTE6NDcs''@;'; put 'put ''ODg6MzQsMTIwOjM0LDg5OjU3LDEyMTo1Nyw5MDo1OCwxMjI6NTgsOTE6NTksMTIzOjU5LDkyOjYwLDEyNDo2MCw5Mzo2MSwxMjU6NjF9OyFmdW5jdGlvbigpe2Zvcih2YXIgUyBpbiAkQylKdltTXT1KdlskQ1tTXV19KCk7dmFyIEtDPXsxOntuOiJQdGdFbGZMZWwiLGY6Smt9LDI6e246IlB0''@;'; put 'put ''Z0VsZlJ3IixmOllDfSwzOntuOiJQdGdFbGZDb2wiLGY6UEJ9LDY6e246IlB0Z0VsZlJ3ViIsZjpkbmV9LDc6e246IlB0Z0VsZkNvbFYiLGY6TkJ9LDEwOntuOiJQdGdFbGZSYWRpY2FsIixmOldDfSwxMTp7bjoiUHRnRWxmUmFkaWNhbFMiLGY6dW5lfSwxMzp7bjoiUHRnRWxmQ29sUyIsZjpG''@;'; put 'put ''Qn0sMTU6e246IlB0Z0VsZkNvbFNWIixmOkhCfSwxNjp7bjoiUHRnRWxmUmFkaWNhbExlbCIsZjpjbmV9LDI1OntuOiJQdGdMaXN0IixmOmZ1bmN0aW9uIGZuZShTKXtTLmwrPTI7dmFyIFI9Uy5yZWFkX3NoaWZ0KDIpLGs9Uy5yZWFkX3NoaWZ0KDIpLEc9Uy5yZWFkX3NoaWZ0KDQpLFE9Uy5y''@;'; put 'put ''ZWFkX3NoaWZ0KDIpLGFlPVMucmVhZF9zaGlmdCgyKTtyZXR1cm57aXh0aTpSLGNvbHR5cGU6MyZrLHJ0OmhuZVtrPj4yJjMxXSxpZHg6RyxjOlEsQzphZX19fSwyOTp7bjoiUHRnU3hOYW1lIixmOmZ1bmN0aW9uIHBuZShTKXtyZXR1cm4gUy5sKz0yLFtTLnJlYWRfc2hpZnQoNCldfX0sMjU1''@;'; put 'put ''Ont9fSxVMz17MDp7bjoiUHRnQXR0ck5vb3AiLGY6ZnVuY3Rpb24gR0MoUyl7cmV0dXJuIFMubCs9NCxbMCwwXX19LDE6e246IlB0Z0F0dHJTZW1pIixmOmZ1bmN0aW9uIHlCKFMsUixrKXt2YXIgRz0yNTUmU1tTLmwrMV0/MTowO3JldHVybiBTLmwrPWsmJjI9PWsuYmlmZj8zOjQsW0ddfX0s''@;'; put 'put ''Mjp7bjoiUHRnQXR0cklmIixmOmZ1bmN0aW9uIGFuZShTLFIsayl7dmFyIEc9MjU1JlNbUy5sKzFdPzE6MDtyZXR1cm4gUy5sKz0yLFtHLFMucmVhZF9zaGlmdChrJiYyPT1rLmJpZmY/MToyKV19fSw0OntuOiJQdGdBdHRyQ2hvb3NlIixmOmZ1bmN0aW9uIGpDKFMsUixrKXtTLmwrPTI7Zm9y''@;'; put 'put ''KHZhciBHPVMucmVhZF9zaGlmdChrJiYyPT1rLmJpZmY/MToyKSxRPVtdLGFlPTA7YWU8PUc7KythZSlRLnB1c2goUy5yZWFkX3NoaWZ0KGsmJjI9PWsuYmlmZj8xOjIpKTtyZXR1cm4gUX19LDg6e246IlB0Z0F0dHJHb3RvIixmOmZ1bmN0aW9uIG9uZShTLFIsayl7dmFyIEc9MjU1JlNbUy5s''@;'; put 'put ''KzFdPzE6MDtyZXR1cm4gUy5sKz0yLFtHLFMucmVhZF9zaGlmdChrJiYyPT1rLmJpZmY/MToyKV19fSwxNjp7bjoiUHRnQXR0clN1bSIsZjpmdW5jdGlvbiBLdihTLFIsayl7Uy5sKz1rJiYyPT1rLmJpZmY/Mzo0fX0sMzI6e246IlB0Z0F0dHJCYXhjZWwiLGY6ZnVuY3Rpb24gQkMoUyl7dmFy''@;'; put 'put ''IFI9MSZTW1MubCsxXTtyZXR1cm4gUy5sKz00LFtSLDFdfX0sNjQ6e246IlB0Z0F0dHJTcGFjZSIsZjpmdW5jdGlvbiBfQihTKXtyZXR1cm4gUy5yZWFkX3NoaWZ0KDIpLFlrKFMpfX0sNjU6e246IlB0Z0F0dHJTcGFjZVNlbWkiLGY6ZnVuY3Rpb24gd0IoUyl7cmV0dXJuIFMucmVhZF9zaGlm''@;'; put 'put ''dCgyKSxZayhTKX19LDEyODp7bjoiUHRnQXR0cklmRXJyb3IiLGY6ZnVuY3Rpb24gV2soUyl7dmFyIFI9MjU1JlNbUy5sKzFdPzE6MDtyZXR1cm4gUy5sKz0yLFtSLFMucmVhZF9zaGlmdCgyKV19fSwyNTU6e319O2Z1bmN0aW9uIEg0KFMsUixrLEcsUSl7aWYoRy5iaWZmPDgpcmV0dXJuIFJu''@;'; put 'put ''KFMsUik7Zm9yKHZhciBhZT1TLmwrUixnZT1bXSxwZT0wO3BlIT09ay5sZW5ndGg7KytwZSlzd2l0Y2goa1twZV1bMF0pe2Nhc2UiUHRnQXJyYXkiOmtbcGVdWzFdPUFCKFMsMCxHKSxnZS5wdXNoKGtbcGVdWzFdKTticmVhaztjYXNlIlB0Z01lbUFyZWEiOmtbcGVdWzJdPXFrKFMsMCxHKSxn''@;'; put 'put ''ZS5wdXNoKGtbcGVdWzJdKTticmVhaztjYXNlIlB0Z0V4cCI6RyYmMTI9PUcuYmlmZiYmKGtbcGVdWzFdWzFdPVMucmVhZF9zaGlmdCg0KSxnZS5wdXNoKGtbcGVdWzFdKSk7YnJlYWs7Y2FzZSJQdGdMaXN0IjpjYXNlIlB0Z0VsZlJhZGljYWxTIjpjYXNlIlB0Z0VsZkNvbFMiOmNhc2UiUHRn''@;'; put 'put ''RWxmQ29sU1YiOnRocm93IlVuc3VwcG9ydGVkICIra1twZV1bMF19cmV0dXJuIFI9YWUtUy5sLCFRJiYwIT09UiYmZ2UucHVzaChSbihTLFIpKSxnZX1mdW5jdGlvbiBvaChTLFIsayl7Zm9yKHZhciBRLGFlLEc9Uy5sK1IsZ2U9W107RyE9Uy5sOylSPUctUy5sLFE9SnZbYWU9U1tTLmxdXSwo''@;'; put 'put ''MjQ9PT1hZXx8MjU9PT1hZSkmJihRPSgyND09PWFlP0tDOlUzKVtTW1MubCsxXV0pLFEmJlEuZj9nZS5wdXNoKFtRLm4sUS5mKFMsUixrKV0pOlJuKFMsUik7cmV0dXJuIGdlfWZ1bmN0aW9uIEYxKFMpe2Zvcih2YXIgUj1bXSxrPTA7azxTLmxlbmd0aDsrK2spe2Zvcih2YXIgRz1TW2tdLFE9''@;'; put 'put ''W10sYWU9MDthZTxHLmxlbmd0aDsrK2FlKXt2YXIgZ2U9R1thZV07US5wdXNoKGdlPzI9PT1nZVswXT8nIicrZ2VbMV0ucmVwbGFjZSgvIi9nLCciIicpKyciJzpnZVsxXToiIil9Ui5wdXNoKFEuam9pbigiLCIpKX1yZXR1cm4gUi5qb2luKCI7Iil9VTNbMzNdPVUzWzMyXTt2YXIgYWg9e1B0''@;'; put 'put ''Z0FkZDoiKyIsUHRnQ29uY2F0OiImIixQdGdEaXY6Ii8iLFB0Z0VxOiI9IixQdGdHZToiPj0iLFB0Z0d0OiI+IixQdGdMZToiPD0iLFB0Z0x0OiI8IixQdGdNdWw6IioiLFB0Z05lOiI8PiIsUHRnUG93ZXI6Il4iLFB0Z1N1YjoiLSJ9LFFrPW5ldyBSZWdFeHAoL1teXHdcdTRFMDAtXHU5RkZG''@;'; put 'put ''XHUzMDQwLVx1MzBGRl0vKTtmdW5jdGlvbiBlRChTLFIsayl7aWYoIVMpcmV0dXJuIlNIMzNUSlNFUlIwIjtpZihrLmJpZmY+OCYmKCFTLlhUSXx8IVMuWFRJW1JdKSlyZXR1cm4gUy5TaGVldE5hbWVzW1JdO2lmKCFTLlhUSSlyZXR1cm4iU0gzM1RKU0VSUjYiO3ZhciBHPVMuWFRJW1JdO2lm''@;'; put 'put ''KGsuYmlmZjw4KXJldHVybiBSPjFlNCYmKFItPTY1NTM2KSxSPDAmJihSPS1SKSwwPT1SPyIiOlMuWFRJW1ItMV07aWYoIUcpcmV0dXJuIlNIMzNUSlNFUlIxIjt2YXIgUT0iIjtpZihrLmJpZmY+OClzd2l0Y2goU1tHWzBdXVswXSl7Y2FzZSAzNTc6cmV0dXJuIFE9LTE9PUdbMV0/IiNSRUYi''@;'; put 'put ''OlMuU2hlZXROYW1lc1tHWzFdXSxHWzFdPT1HWzJdP1E6USsiOiIrUy5TaGVldE5hbWVzW0dbMl1dO2Nhc2UgMzU4OnJldHVybiBudWxsIT1rLlNJRD9TLlNoZWV0TmFtZXNbay5TSURdOiJTSDMzVEpTU0FNRSIrU1tHWzBdXVswXTtkZWZhdWx0OnJldHVybiJTSDMzVEpTU1JDIitTW0dbMF1d''@;'; put 'put ''WzBdfXN3aXRjaChTW0dbMF1dWzBdWzBdKXtjYXNlIDEwMjU6cmV0dXJuIFE9LTE9PUdbMV0/IiNSRUYiOlMuU2hlZXROYW1lc1tHWzFdXXx8IlNIMzNUSlNFUlIzIixHWzFdPT1HWzJdP1E6USsiOiIrUy5TaGVldE5hbWVzW0dbMl1dO2Nhc2UgMTQ4NDk6cmV0dXJuIFNbR1swXV0uc2xpY2Uo''@;'; put 'put ''MSkubWFwKGZ1bmN0aW9uKGFlKXtyZXR1cm4gYWUuTmFtZX0pLmpvaW4oIjs7Iik7ZGVmYXVsdDpyZXR1cm4gU1tHWzBdXVswXVszXT8oUT0tMT09R1sxXT8iI1JFRiI6U1tHWzBdXVswXVszXVtHWzFdXXx8IlNIMzNUSlNFUlI0IixHWzFdPT1HWzJdP1E6USsiOiIrU1tHWzBdXVswXVszXVtH''@;'; put 'put ''WzJdXSk6IlNIMzNUSlNFUlIyIn19ZnVuY3Rpb24gQkIoUyxSLGspe3JldHVybiBmdW5jdGlvbiBtbmUoUyxSKXtpZighKFN8fFImJlIuYmlmZjw9NSYmUi5iaWZmPj0yKSl0aHJvdyBuZXcgRXJyb3IoImVtcHR5IHNoZWV0IG5hbWUiKTtyZXR1cm4vI1JFRi8udGVzdChTKT9TOlFrLnRlc3Qo''@;'; put 'put ''Uyk/IiciK1MrIiciOlN9KGVEKFMsUixrKSxrKX1mdW5jdGlvbiBhMChTLFIsayxHLFEsYWUpe3ZhciBQZSxOZSxZZSxFdCxnZT1RJiZRLmJpZmZ8fDgscGU9YWUmJm51bGwhPVI/Ujp7czp7YzowLHI6MH0sZTp7YzowLHI6MH19LHllPVtdLGV0PTAsdXQ9MCxvdD0iIjtpZighU1swXXx8IVNb''@;'; put 'put ''MF1bMF0pcmV0dXJuIiI7Zm9yKHZhciBidD0tMSxCdD0iIixrdD0wLE90PVNbMF0ubGVuZ3RoO2t0PE90Oysra3Qpe3ZhciBLdD1TWzBdW2t0XTtzd2l0Y2goS3RbMF0pe2Nhc2UiUHRnVW1pbnVzIjp5ZS5wdXNoKCItIit5ZS5wb3AoKSk7YnJlYWs7Y2FzZSJQdGdVcGx1cyI6eWUucHVzaCgi''@;'; put 'put ''KyIreWUucG9wKCkpO2JyZWFrO2Nhc2UiUHRnUGVyY2VudCI6eWUucHVzaCh5ZS5wb3AoKSsiJSIpO2JyZWFrO2Nhc2UiUHRnQWRkIjpjYXNlIlB0Z0NvbmNhdCI6Y2FzZSJQdGdEaXYiOmNhc2UiUHRnRXEiOmNhc2UiUHRnR2UiOmNhc2UiUHRnR3QiOmNhc2UiUHRnTGUiOmNhc2UiUHRnTHQi''@;'; put 'put ''OmNhc2UiUHRnTXVsIjpjYXNlIlB0Z05lIjpjYXNlIlB0Z1Bvd2VyIjpjYXNlIlB0Z1N1YiI6aWYoUGU9eWUucG9wKCksTmU9eWUucG9wKCksYnQ+PTApe3N3aXRjaChTWzBdW2J0XVsxXVswXSl7Y2FzZSAwOkJ0PWFpKCIgIixTWzBdW2J0XVsxXVsxXSk7YnJlYWs7Y2FzZSAxOkJ0PWFpKCJc''@;'; put 'put ''ciIsU1swXVtidF1bMV1bMV0pO2JyZWFrO2RlZmF1bHQ6aWYoQnQ9IiIsUS5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIFB0Z0F0dHJTcGFjZVR5cGUgIitTWzBdW2J0XVsxXVswXSl9TmUrPUJ0LGJ0PS0xfXllLnB1c2goTmUrYWhbS3RbMF1dK1BlKTticmVhaztjYXNlIlB0Z0lz''@;'; put 'put ''ZWN0IjpQZT15ZS5wb3AoKSxOZT15ZS5wb3AoKSx5ZS5wdXNoKE5lKyIgIitQZSk7YnJlYWs7Y2FzZSJQdGdVbmlvbiI6UGU9eWUucG9wKCksTmU9eWUucG9wKCkseWUucHVzaChOZSsiLCIrUGUpO2JyZWFrO2Nhc2UiUHRnUmFuZ2UiOlBlPXllLnBvcCgpLE5lPXllLnBvcCgpLHllLnB1c2go''@;'; put 'put ''TmUrIjoiK1BlKTticmVhaztjYXNlIlB0Z0F0dHJDaG9vc2UiOmNhc2UiUHRnQXR0ckdvdG8iOmNhc2UiUHRnQXR0cklmIjpjYXNlIlB0Z0F0dHJJZkVycm9yIjpjYXNlIlB0Z0F0dHJCYXhjZWwiOmNhc2UiUHRnQXR0clNlbWkiOmNhc2UiUHRnTWVtQXJlYSI6Y2FzZSJQdGdUYmwiOmNhc2Ui''@;'; put 'put ''UHRnTWVtRXJyIjpjYXNlIlB0Z01lbUFyZWFOIjpjYXNlIlB0Z01lbU5vTWVtTiI6Y2FzZSJQdGdBdHRyTm9vcCI6Y2FzZSJQdGdTaGVldCI6Y2FzZSJQdGdFbmRTaGVldCI6Y2FzZSJQdGdNZW1GdW5jIjpjYXNlIlB0Z01lbU5vTWVtIjpicmVhaztjYXNlIlB0Z1JlZiI6WWU9cm8oS3RbMV1b''@;'; put 'put ''MV0scGUsUSkseWUucHVzaChCbyhZZSxnZSkpO2JyZWFrO2Nhc2UiUHRnUmVmTiI6WWU9az9ybyhLdFsxXVsxXSxrLFEpOkt0WzFdWzFdLHllLnB1c2goQm8oWWUsZ2UpKTticmVhaztjYXNlIlB0Z1JlZjNkIjpldD1LdFsxXVsxXSxZZT1ybyhLdFsxXVsyXSxwZSxRKSxvdD1CQihHLGV0LFEp''@;'; put 'put ''LHllLnB1c2gob3QrIiEiK0JvKFllLGdlKSk7YnJlYWs7Y2FzZSJQdGdGdW5jIjpjYXNlIlB0Z0Z1bmNWYXIiOnZhciBpcj1LdFsxXVswXSxTbj1LdFsxXVsxXTtpcnx8KGlyPTApO3ZhciBzcj0wPT0oaXImPTEyNyk/W106eWUuc2xpY2UoLWlyKTt5ZS5sZW5ndGgtPWlyLCJVc2VyIj09PVNu''@;'; put 'put ''JiYoU249c3Iuc2hpZnQoKSkseWUucHVzaChTbisiKCIrc3Iuam9pbigiLCIpKyIpIik7YnJlYWs7Y2FzZSJQdGdCb29sIjp5ZS5wdXNoKEt0WzFdPyJUUlVFIjoiRkFMU0UiKTticmVhaztjYXNlIlB0Z0ludCI6Y2FzZSJQdGdOdW0iOnllLnB1c2goU3RyaW5nKEt0WzFdKSk7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJQdGdTdHIiOnllLnB1c2goJyInK0t0WzFdLnJlcGxhY2UoLyIvZywnIiInKSsnIicpO2JyZWFrO2Nhc2UiUHRnRXJyIjp5ZS5wdXNoKEt0WzFdKTticmVhaztjYXNlIlB0Z0FyZWFOIjpFdD1zbyhLdFsxXVsxXSxrP3tzOmt9OnBlLFEpLHllLnB1c2goR2EoRXQsUSkpO2JyZWFrO2Nhc2Ui''@;'; put 'put ''UHRnQXJlYSI6RXQ9c28oS3RbMV1bMV0scGUsUSkseWUucHVzaChHYShFdCxRKSk7YnJlYWs7Y2FzZSJQdGdBcmVhM2QiOmV0PUt0WzFdWzFdLEV0PXNvKEt0WzFdWzJdLHBlLFEpLG90PUJCKEcsZXQsUSkseWUucHVzaChvdCsiISIrR2EoRXQsUSkpO2JyZWFrO2Nhc2UiUHRnQXR0clN1bSI6''@;'; put 'put ''eWUucHVzaCgiU1VNKCIreWUucG9wKCkrIikiKTticmVhaztjYXNlIlB0Z05hbWUiOnZhciBKbj0oRy5uYW1lc3x8W10pWyh1dD1LdFsxXVsyXSktMV18fChHWzBdfHxbXSlbdXRdLFZuPUpuP0puLk5hbWU6IlNIMzNUSlNOQU1FIitTdHJpbmcodXQpO1ZuIGluIFF2JiYoVm49UXZbVm5dKSx5''@;'; put 'put ''ZS5wdXNoKFZuKTticmVhaztjYXNlIlB0Z05hbWVYIjp2YXIgZ3IsdXI9S3RbMV1bMV07aWYodXQ9S3RbMV1bMl0sIShRLmJpZmY8PTUpKXt2YXIgdHI9IiI7aWYoMTQ4NDk9PSgoR1t1cl18fFtdKVswXXx8W10pWzBdfHwoMTAyNT09KChHW3VyXXx8W10pWzBdfHxbXSlbMF0/R1t1cl1bdXRd''@;'; put 'put ''JiZHW3VyXVt1dF0uaXRhYj4wJiYodHI9Ry5TaGVldE5hbWVzW0dbdXJdW3V0XS5pdGFiLTFdKyIhIik6dHI9Ry5TaGVldE5hbWVzW3V0LTFdKyIhIiksR1t1cl0mJkdbdXJdW3V0XSl0cis9R1t1cl1bdXRdLk5hbWU7ZWxzZSBpZihHWzBdJiZHWzBdW3V0XSl0cis9R1swXVt1dF0uTmFtZTtl''@;'; put 'put ''bHNle3ZhciBGaT0oZUQoRyx1cixRKXx8IiIpLnNwbGl0KCI7OyIpO0ZpW3V0LTFdP3RyPUZpW3V0LTFdOnRyKz0iU0gzM1RKU0VSUlgifXllLnB1c2godHIpO2JyZWFrfXVyPDAmJih1cj0tdXIpLEdbdXJdJiYoZ3I9R1t1cl1bdXRdKSxncnx8KGdyPXtOYW1lOiJTSDMzVEpTRVJSWSJ9KSx5''@;'; put 'put ''ZS5wdXNoKGdyLk5hbWUpO2JyZWFrO2Nhc2UiUHRnUGFyZW4iOnZhciBpbz0iKCIsdW89IikiO2lmKGJ0Pj0wKXtzd2l0Y2goQnQ9IiIsU1swXVtidF1bMV1bMF0pe2Nhc2UgMjppbz1haSgiICIsU1swXVtidF1bMV1bMV0pK2lvO2JyZWFrO2Nhc2UgMzppbz1haSgiXHIiLFNbMF1bYnRdWzFd''@;'; put 'put ''WzFdKStpbzticmVhaztjYXNlIDQ6dW89YWkoIiAiLFNbMF1bYnRdWzFdWzFdKSt1bzticmVhaztjYXNlIDU6dW89YWkoIlxyIixTWzBdW2J0XVsxXVsxXSkrdW87YnJlYWs7ZGVmYXVsdDppZihRLldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgUHRnQXR0clNwYWNlVHlwZSAiK1Nb''@;'; put 'put ''MF1bYnRdWzFdWzBdKX1idD0tMX15ZS5wdXNoKGlvK3llLnBvcCgpK3VvKTticmVhaztjYXNlIlB0Z1JlZkVyciI6Y2FzZSJQdGdBcmVhRXJyIjpjYXNlIlB0Z0FyZWFFcnIzZCI6Y2FzZSJQdGdSZWZFcnIzZCI6eWUucHVzaCgiI1JFRiEiKTticmVhaztjYXNlIlB0Z0V4cCI6dmFyIERyPXtj''@;'; put 'put ''OmsuYyxyOmsucn07aWYoRy5zaGFyZWRmW1hpKFllPXtjOkt0WzFdWzFdLHI6S3RbMV1bMF19KV0pe3ZhciBObj1HLnNoYXJlZGZbWGkoWWUpXTt5ZS5wdXNoKGEwKE5uLHBlLERyLEcsUSkpfWVsc2V7dmFyIFZyPSExO2ZvcihQZT0wO1BlIT1HLmFycmF5Zi5sZW5ndGg7KytQZSlpZighKFll''@;'; put 'put ''LmM8KE5lPUcuYXJyYXlmW1BlXSlbMF0ucy5jfHxZZS5jPk5lWzBdLmUuY3x8WWUucjxOZVswXS5zLnJ8fFllLnI+TmVbMF0uZS5yKSl7eWUucHVzaChhMChOZVsxXSxwZSxEcixHLFEpKSxWcj0hMDticmVha31Wcnx8eWUucHVzaChLdFsxXSl9YnJlYWs7Y2FzZSJQdGdBcnJheSI6eWUucHVz''@;'; put 'put ''aCgieyIrRjEoS3RbMV0pKyJ9Iik7YnJlYWs7Y2FzZSJQdGdBdHRyU3BhY2UiOmNhc2UiUHRnQXR0clNwYWNlU2VtaSI6YnQ9a3Q7YnJlYWs7Y2FzZSJQdGdNaXNzQXJnIjp5ZS5wdXNoKCIiKTticmVhaztjYXNlIlB0Z0xpc3QiOnllLnB1c2goIlRhYmxlIitLdFsxXS5pZHgrIlsjIitLdFsx''@;'; put 'put ''XS5ydCsiXSIpO2JyZWFrO2Nhc2UiUHRnRWxmQ29sIjpjYXNlIlB0Z0VsZkNvbFMiOmNhc2UiUHRnRWxmQ29sU1YiOmNhc2UiUHRnRWxmQ29sViI6Y2FzZSJQdGdFbGZMZWwiOmNhc2UiUHRnRWxmUmFkaWNhbCI6Y2FzZSJQdGdFbGZSYWRpY2FsTGVsIjpjYXNlIlB0Z0VsZlJhZGljYWxTIjpj''@;'; put 'put ''YXNlIlB0Z0VsZlJ3IjpjYXNlIlB0Z0VsZlJ3ViI6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBFTEZzIik7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBGb3JtdWxhIFRva2VuOiAiK1N0cmluZyhLdCkpfWlmKDMhPVEuYmlmZiYmYnQ+PTAmJi0xPT1bIlB0Z0F0''@;'; put 'put ''dHJTcGFjZSIsIlB0Z0F0dHJTcGFjZVNlbWkiLCJQdGdBdHRyR290byJdLmluZGV4T2YoU1swXVtrdF1bMF0pKXt2YXIgSG49ITA7c3dpdGNoKChLdD1TWzBdW2J0XSlbMV1bMF0pe2Nhc2UgNDpIbj0hMTtjYXNlIDA6QnQ9YWkoIiAiLEt0WzFdWzFdKTticmVhaztjYXNlIDU6SG49ITE7Y2Fz''@;'; put 'put ''ZSAxOkJ0PWFpKCJcciIsS3RbMV1bMV0pO2JyZWFrO2RlZmF1bHQ6aWYoQnQ9IiIsUS5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIFB0Z0F0dHJTcGFjZVR5cGUgIitLdFsxXVswXSl9eWUucHVzaCgoSG4/QnQ6IiIpK3llLnBvcCgpKyhIbj8iIjpCdCkpLGJ0PS0xfX1pZih5ZS5s''@;'; put 'put ''ZW5ndGg+MSYmUS5XVEYpdGhyb3cgbmV3IEVycm9yKCJiYWQgZm9ybXVsYSBzdGFjayIpO3JldHVybiB5ZVswXX1mdW5jdGlvbiB0RChTLFIsayl7dmFyIGFlLEc9Uy5sK1IsUT0yPT1rLmJpZmY/MToyLGdlPVMucmVhZF9zaGlmdChRKTtpZig2NTUzNT09Z2UpcmV0dXJuW1tdLFJuKFMsUi0y''@;'; put 'put ''KV07dmFyIHBlPW9oKFMsZ2Usayk7cmV0dXJuIFIhPT1nZStRJiYoYWU9SDQoUyxSLWdlLVEscGUsaykpLFMubD1HLFtwZSxhZV19ZnVuY3Rpb24gWjMoUyxSLGspe3ZhciBRLEc9Uy5sK1IsYWU9Uy5yZWFkX3NoaWZ0KDIpLGdlPW9oKFMsYWUsayk7cmV0dXJuIDY1NTM1PT1hZT9bW10sUm4o''@;'; put 'put ''UyxSLTIpXTooUiE9PWFlKzImJihRPUg0KFMsRy1hZS0yLGdlLGspKSxbZ2UsUV0pfWZ1bmN0aW9uIEpDKFMsUixrKXt2YXIgRz1TLmwrUixRPXcwKFMpOzI9PWsuYmlmZiYmKytTLmw7dmFyIGFlPWZ1bmN0aW9uIHFDKFMpe3ZhciBSO2lmKDY1NTM1IT09ZWEoUyxTLmwrNikpcmV0dXJuW0xs''@;'; put 'put ''KFMpLCJuIl07c3dpdGNoKFNbUy5sXSl7Y2FzZSAwOnJldHVybiBTLmwrPTgsWyJTdHJpbmciLCJzIl07Y2FzZSAxOnJldHVybiBSPTE9PT1TW1MubCsyXSxTLmwrPTgsW1IsImIiXTtjYXNlIDI6cmV0dXJuIFI9U1tTLmwrMl0sUy5sKz04LFtSLCJlIl07Y2FzZSAzOnJldHVybiBTLmwrPTgs''@;'; put 'put ''WyIiLCJzIl19cmV0dXJuW119KFMpLGdlPVMucmVhZF9zaGlmdCgxKTsyIT1rLmJpZmYmJihTLnJlYWRfc2hpZnQoMSksay5iaWZmPj01JiZTLnJlYWRfc2hpZnQoNCkpO3ZhciBwZT1mdW5jdGlvbiBuRChTLFIsayl7dmFyIGFlLEc9Uy5sK1IsUT0yPT1rLmJpZmY/MToyLGdlPVMucmVhZF9z''@;'; put 'put ''aGlmdChRKTtpZig2NTUzNT09Z2UpcmV0dXJuW1tdLFJuKFMsUi0yKV07dmFyIHBlPW9oKFMsZ2Usayk7cmV0dXJuIFIhPT1nZStRJiYoYWU9SDQoUyxSLWdlLVEscGUsaykpLFMubD1HLFtwZSxhZV19KFMsRy1TLmwsayk7cmV0dXJue2NlbGw6USx2YWw6YWVbMF0sZm9ybXVsYTpwZSxzaGFy''@;'; put 'put ''ZWQ6Z2U+PjMmMSx0dDphZVsxXX19ZnVuY3Rpb24gTjQoUyxSLGspe3ZhciBHPVMucmVhZF9zaGlmdCg0KSxRPW9oKFMsRyxrKSxhZT1TLnJlYWRfc2hpZnQoNCk7cmV0dXJuW1EsYWU+MD9INChTLGFlLFEsaywhMCk6bnVsbF19dmFyIFFDPU40LFY0PU40LGlEPU40LGpCPWZ1bmN0aW9uIHJE''@;'; put 'put ''KFMsUixrKXt2YXIgRz1TLnJlYWRfc2hpZnQoNCksUT1TLnJlYWRfc2hpZnQoNCksYWU9b2goUyxHLGspO3JldHVyblthZSxRPjA/SDQoUyxRLGFlLGssITApOm51bGxdfSxvRD1ONCx6Qj1ONDtmdW5jdGlvbiBlUyhTKXtpZigoMHxTKT09UyYmUzxNYXRoLnBvdygyLDE2KSYmUz49MCl7dmFy''@;'; put 'put ''IFI9Ym4oMTEpO3JldHVybiBSLndyaXRlX3NoaWZ0KDQsMyksUi53cml0ZV9zaGlmdCgxLDMwKSxSLndyaXRlX3NoaWZ0KDIsUyksUi53cml0ZV9zaGlmdCg0LDApLFJ9dmFyIGs9Ym4oMTcpO3JldHVybiBrLndyaXRlX3NoaWZ0KDQsMTEpLGsud3JpdGVfc2hpZnQoMSwzMSksay53cml0ZV9z''@;'; put 'put ''aGlmdCg4LFMpLGsud3JpdGVfc2hpZnQoNCwwKSxrfWZ1bmN0aW9uIHRTKFMpe3ZhciBSPWJuKDcpO1Iud3JpdGVfc2hpZnQoNCwzKzIqUy5sZW5ndGgpLFIud3JpdGVfc2hpZnQoMSwyMyksUi53cml0ZV9zaGlmdCgyLFMubGVuZ3RoKTt2YXIgaz1ibigyKlMubGVuZ3RoKTtrLndyaXRlX3No''@;'; put 'put ''aWZ0KDIqUy5sZW5ndGgsUywidXRmMTZsZSIpO3ZhciBHPWJuKDQpO3JldHVybiBHLndyaXRlX3NoaWZ0KDQsMCksaihbUixrLEddKX1mdW5jdGlvbiBCNChTKXtpZihTLm1hdGNoKC9eIyhESVZcLzAhfEdFVFRJTkdfREFUQXxOXC9BfE5BTUVcP3xOVUxMIXxOVU0hfFJFRiF8VkFMVUUhKSQv''@;'; put 'put ''KSlyZXR1cm4gZnVuY3Rpb24gVUIoUyl7dmFyIFI9Ym4oMTApO3JldHVybiBSLndyaXRlX3NoaWZ0KDQsMiksUi53cml0ZV9zaGlmdCgxLDI4KSxSLndyaXRlX3NoaWZ0KDEsUyksUi53cml0ZV9zaGlmdCg0LDApLFJ9KCtEM1tTXSk7aWYoUy5tYXRjaCgvXlwkPyg/OltBLVddW0EtWl17Mn18''@;'; put 'put ''WFtBLUVdW0EtWl18WEZbQS1EXXxbQS1aXXsxLDJ9KVwkPyg/OjEwWzAtM11cZHs0fXwxMDRbMC03XVxkezN9fDEwNDhbMC00XVxkezJ9fDEwNDg1WzAtNl1cZHwxMDQ4NTdbMC02XXxbMS05XVxkezAsNX0pJC8pKXJldHVybiBmdW5jdGlvbiBvOChTKXt2YXIgUj1OYShTKSxrPWJuKDE1KTty''@;'; put 'put ''ZXR1cm4gay53cml0ZV9zaGlmdCg0LDcpLGsud3JpdGVfc2hpZnQoMSwzNiksay53cml0ZV9zaGlmdCg0LFIuciksay53cml0ZV9zaGlmdCgyLFIuY3woIiQiPT1TLmNoYXJBdCgwKT8wOjEpPDwxNHwoUy5tYXRjaCgvXCRcZC8pPzA6MSk8PDE1KSxrLndyaXRlX3NoaWZ0KDQsMCksa30oUyk7''@;'; put 'put ''aWYoUy5tYXRjaCgvXiIuKiIkLykpcmV0dXJuIHRTKFMpO3Rocm93IkZvcm11bGEgfCIrUysifCBub3Qgc3VwcG9ydGVkIGZvciBYTFNCIn12YXIgblM9ezA6IkJFRVAiLDE6Ik9QRU4iLDI6Ik9QRU4uTElOS1MiLDM6IkNMT1NFLkFMTCIsNDoiU0FWRSIsNToiU0FWRS5BUyIsNjoiRklMRS5E''@;'; put 'put ''RUxFVEUiLDc6IlBBR0UuU0VUVVAiLDg6IlBSSU5UIiw5OiJQUklOVEVSLlNFVFVQIiwxMDoiUVVJVCIsMTE6Ik5FVy5XSU5ET1ciLDEyOiJBUlJBTkdFLkFMTCIsMTM6IldJTkRPVy5TSVpFIiwxNDoiV0lORE9XLk1PVkUiLDE1OiJGVUxMIiwxNjoiQ0xPU0UiLDE3OiJSVU4iLDIyOiJTRVQu''@;'; put 'put ''UFJJTlQuQVJFQSIsMjM6IlNFVC5QUklOVC5USVRMRVMiLDI0OiJTRVQuUEFHRS5CUkVBSyIsMjU6IlJFTU9WRS5QQUdFLkJSRUFLIiwyNjoiRk9OVCIsMjc6IkRJU1BMQVkiLDI4OiJQUk9URUNULkRPQ1VNRU5UIiwyOToiUFJFQ0lTSU9OIiwzMDoiQTEuUjFDMSIsMzE6IkNBTENVTEFURS5O''@;'; put 'put ''T1ciLDMyOiJDQUxDVUxBVElPTiIsMzQ6IkRBVEEuRklORCIsMzU6IkVYVFJBQ1QiLDM2OiJEQVRBLkRFTEVURSIsMzc6IlNFVC5EQVRBQkFTRSIsMzg6IlNFVC5DUklURVJJQSIsMzk6IlNPUlQiLDQwOiJEQVRBLlNFUklFUyIsNDE6IlRBQkxFIiw0MjoiRk9STUFULk5VTUJFUiIsNDM6IkFM''@;'; put 'put ''SUdOTUVOVCIsNDQ6IlNUWUxFIiw0NToiQk9SREVSIiw0NjoiQ0VMTC5QUk9URUNUSU9OIiw0NzoiQ09MVU1OLldJRFRIIiw0ODoiVU5ETyIsNDk6IkNVVCIsNTA6IkNPUFkiLDUxOiJQQVNURSIsNTI6IkNMRUFSIiw1MzoiUEFTVEUuU1BFQ0lBTCIsNTQ6IkVESVQuREVMRVRFIiw1NToiSU5T''@;'; put 'put ''RVJUIiw1NjoiRklMTC5SSUdIVCIsNTc6IkZJTEwuRE9XTiIsNjE6IkRFRklORS5OQU1FIiw2MjoiQ1JFQVRFLk5BTUVTIiw2MzoiRk9STVVMQS5HT1RPIiw2NDoiRk9STVVMQS5GSU5EIiw2NToiU0VMRUNULkxBU1QuQ0VMTCIsNjY6IlNIT1cuQUNUSVZFLkNFTEwiLDY3OiJHQUxMRVJZLkFS''@;'; put 'put ''RUEiLDY4OiJHQUxMRVJZLkJBUiIsNjk6IkdBTExFUlkuQ09MVU1OIiw3MDoiR0FMTEVSWS5MSU5FIiw3MToiR0FMTEVSWS5QSUUiLDcyOiJHQUxMRVJZLlNDQVRURVIiLDczOiJDT01CSU5BVElPTiIsNzQ6IlBSRUZFUlJFRCIsNzU6IkFERC5PVkVSTEFZIiw3NjoiR1JJRExJTkVTIiw3Nzoi''@;'; put 'put ''U0VULlBSRUZFUlJFRCIsNzg6IkFYRVMiLDc5OiJMRUdFTkQiLDgwOiJBVFRBQ0guVEVYVCIsODE6IkFERC5BUlJPVyIsODI6IlNFTEVDVC5DSEFSVCIsODM6IlNFTEVDVC5QTE9ULkFSRUEiLDg0OiJQQVRURVJOUyIsODU6Ik1BSU4uQ0hBUlQiLDg2OiJPVkVSTEFZIiw4NzoiU0NBTEUiLDg4''@;'; put 'put ''OiJGT1JNQVQuTEVHRU5EIiw4OToiRk9STUFULlRFWFQiLDkwOiJFRElULlJFUEVBVCIsOTE6IlBBUlNFIiw5MjoiSlVTVElGWSIsOTM6IkhJREUiLDk0OiJVTkhJREUiLDk1OiJXT1JLU1BBQ0UiLDk2OiJGT1JNVUxBIiw5NzoiRk9STVVMQS5GSUxMIiw5ODoiRk9STVVMQS5BUlJBWSIsOTk6''@;'; put 'put ''IkRBVEEuRklORC5ORVhUIiwxMDA6IkRBVEEuRklORC5QUkVWIiwxMDE6IkZPUk1VTEEuRklORC5ORVhUIiwxMDI6IkZPUk1VTEEuRklORC5QUkVWIiwxMDM6IkFDVElWQVRFIiwxMDQ6IkFDVElWQVRFLk5FWFQiLDEwNToiQUNUSVZBVEUuUFJFViIsMTA2OiJVTkxPQ0tFRC5ORVhUIiwxMDc6''@;'; put 'put ''IlVOTE9DS0VELlBSRVYiLDEwODoiQ09QWS5QSUNUVVJFIiwxMDk6IlNFTEVDVCIsMTEwOiJERUxFVEUuTkFNRSIsMTExOiJERUxFVEUuRk9STUFUIiwxMTI6IlZMSU5FIiwxMTM6IkhMSU5FIiwxMTQ6IlZQQUdFIiwxMTU6IkhQQUdFIiwxMTY6IlZTQ1JPTEwiLDExNzoiSFNDUk9MTCIsMTE4''@;'; put 'put ''OiJBTEVSVCIsMTE5OiJORVciLDEyMDoiQ0FOQ0VMLkNPUFkiLDEyMToiU0hPVy5DTElQQk9BUkQiLDEyMjoiTUVTU0FHRSIsMTI0OiJQQVNURS5MSU5LIiwxMjU6IkFQUC5BQ1RJVkFURSIsMTI2OiJERUxFVEUuQVJST1ciLDEyNzoiUk9XLkhFSUdIVCIsMTI4OiJGT1JNQVQuTU9WRSIsMTI5''@;'; put 'put ''OiJGT1JNQVQuU0laRSIsMTMwOiJGT1JNVUxBLlJFUExBQ0UiLDEzMToiU0VORC5LRVlTIiwxMzI6IlNFTEVDVC5TUEVDSUFMIiwxMzM6IkFQUExZLk5BTUVTIiwxMzQ6IlJFUExBQ0UuRk9OVCIsMTM1OiJGUkVFWkUuUEFORVMiLDEzNjoiU0hPVy5JTkZPIiwxMzc6IlNQTElUIiwxMzg6Ik9O''@;'; put 'put ''LldJTkRPVyIsMTM5OiJPTi5EQVRBIiwxNDA6IkRJU0FCTEUuSU5QVVQiLDE0MjoiT1VUTElORSIsMTQzOiJMSVNULk5BTUVTIiwxNDQ6IkZJTEUuQ0xPU0UiLDE0NToiU0FWRS5XT1JLQk9PSyIsMTQ2OiJEQVRBLkZPUk0iLDE0NzoiQ09QWS5DSEFSVCIsMTQ4OiJPTi5USU1FIiwxNDk6IldB''@;'; put 'put ''SVQiLDE1MDoiRk9STUFULkZPTlQiLDE1MToiRklMTC5VUCIsMTUyOiJGSUxMLkxFRlQiLDE1MzoiREVMRVRFLk9WRVJMQVkiLDE1NToiU0hPUlQuTUVOVVMiLDE1OToiU0VULlVQREFURS5TVEFUVVMiLDE2MToiQ09MT1IuUEFMRVRURSIsMTYyOiJERUxFVEUuU1RZTEUiLDE2MzoiV0lORE9X''@;'; put 'put ''LlJFU1RPUkUiLDE2NDoiV0lORE9XLk1BWElNSVpFIiwxNjY6IkNIQU5HRS5MSU5LIiwxNjc6IkNBTENVTEFURS5ET0NVTUVOVCIsMTY4OiJPTi5LRVkiLDE2OToiQVBQLlJFU1RPUkUiLDE3MDoiQVBQLk1PVkUiLDE3MToiQVBQLlNJWkUiLDE3MjoiQVBQLk1JTklNSVpFIiwxNzM6IkFQUC5N''@;'; put 'put ''QVhJTUlaRSIsMTc0OiJCUklORy5UTy5GUk9OVCIsMTc1OiJTRU5ELlRPLkJBQ0siLDE4NToiTUFJTi5DSEFSVC5UWVBFIiwxODY6Ik9WRVJMQVkuQ0hBUlQuVFlQRSIsMTg3OiJTRUxFQ1QuRU5EIiwxODg6Ik9QRU4uTUFJTCIsMTg5OiJTRU5ELk1BSUwiLDE5MDoiU1RBTkRBUkQuRk9OVCIs''@;'; put 'put ''MTkxOiJDT05TT0xJREFURSIsMTkyOiJTT1JULlNQRUNJQUwiLDE5MzoiR0FMTEVSWS4zRC5BUkVBIiwxOTQ6IkdBTExFUlkuM0QuQ09MVU1OIiwxOTU6IkdBTExFUlkuM0QuTElORSIsMTk2OiJHQUxMRVJZLjNELlBJRSIsMTk3OiJWSUVXLjNEIiwxOTg6IkdPQUwuU0VFSyIsMTk5OiJXT1JL''@;'; put 'put ''R1JPVVAiLDIwMDoiRklMTC5HUk9VUCIsMjAxOiJVUERBVEUuTElOSyIsMjAyOiJQUk9NT1RFIiwyMDM6IkRFTU9URSIsMjA0OiJTSE9XLkRFVEFJTCIsMjA2OiJVTkdST1VQIiwyMDc6Ik9CSkVDVC5QUk9QRVJUSUVTIiwyMDg6IlNBVkUuTkVXLk9CSkVDVCIsMjA5OiJTSEFSRSIsMjEwOiJT''@;'; put 'put ''SEFSRS5OQU1FIiwyMTE6IkRVUExJQ0FURSIsMjEyOiJBUFBMWS5TVFlMRSIsMjEzOiJBU1NJR04uVE8uT0JKRUNUIiwyMTQ6Ik9CSkVDVC5QUk9URUNUSU9OIiwyMTU6IkhJREUuT0JKRUNUIiwyMTY6IlNFVC5FWFRSQUNUIiwyMTc6IkNSRUFURS5QVUJMSVNIRVIiLDIxODoiU1VCU0NSSUJF''@;'; put 'put ''LlRPIiwyMTk6IkFUVFJJQlVURVMiLDIyMDoiU0hPVy5UT09MQkFSIiwyMjI6IlBSSU5ULlBSRVZJRVciLDIyMzoiRURJVC5DT0xPUiIsMjI0OiJTSE9XLkxFVkVMUyIsMjI1OiJGT1JNQVQuTUFJTiIsMjI2OiJGT1JNQVQuT1ZFUkxBWSIsMjI3OiJPTi5SRUNBTEMiLDIyODoiRURJVC5TRVJJ''@;'; put 'put ''RVMiLDIyOToiREVGSU5FLlNUWUxFIiwyNDA6IkxJTkUuUFJJTlQiLDI0MzoiRU5URVIuREFUQSIsMjQ5OiJHQUxMRVJZLlJBREFSIiwyNTA6Ik1FUkdFLlNUWUxFUyIsMjUxOiJFRElUSU9OLk9QVElPTlMiLDI1MjoiUEFTVEUuUElDVFVSRSIsMjUzOiJQQVNURS5QSUNUVVJFLkxJTksiLDI1''@;'; put 'put ''NDoiU1BFTExJTkciLDI1NjoiWk9PTSIsMjU5OiJJTlNFUlQuT0JKRUNUIiwyNjA6IldJTkRPVy5NSU5JTUlaRSIsMjY1OiJTT1VORC5OT1RFIiwyNjY6IlNPVU5ELlBMQVkiLDI2NzoiRk9STUFULlNIQVBFIiwyNjg6IkVYVEVORC5QT0xZR09OIiwyNjk6IkZPUk1BVC5BVVRPIiwyNzI6IkdB''@;'; put 'put ''TExFUlkuM0QuQkFSIiwyNzM6IkdBTExFUlkuM0QuU1VSRkFDRSIsMjc0OiJGSUxMLkFVVE8iLDI3NjoiQ1VTVE9NSVpFLlRPT0xCQVIiLDI3NzoiQURELlRPT0wiLDI3ODoiRURJVC5PQkpFQ1QiLDI3OToiT04uRE9VQkxFQ0xJQ0siLDI4MDoiT04uRU5UUlkiLDI4MToiV09SS0JPT0suQURE''@;'; put 'put ''IiwyODI6IldPUktCT09LLk1PVkUiLDI4MzoiV09SS0JPT0suQ09QWSIsMjg0OiJXT1JLQk9PSy5PUFRJT05TIiwyODU6IlNBVkUuV09SS1NQQUNFIiwyODg6IkNIQVJULldJWkFSRCIsMjg5OiJERUxFVEUuVE9PTCIsMjkwOiJNT1ZFLlRPT0wiLDI5MToiV09SS0JPT0suU0VMRUNUIiwyOTI6''@;'; put 'put ''IldPUktCT09LLkFDVElWQVRFIiwyOTM6IkFTU0lHTi5UTy5UT09MIiwyOTU6IkNPUFkuVE9PTCIsMjk2OiJSRVNFVC5UT09MIiwyOTc6IkNPTlNUUkFJTi5OVU1FUklDIiwyOTg6IlBBU1RFLlRPT0wiLDMwMjoiV09SS0JPT0suTkVXIiwzMDU6IlNDRU5BUklPLkNFTExTIiwzMDY6IlNDRU5B''@;'; put 'put ''UklPLkRFTEVURSIsMzA3OiJTQ0VOQVJJTy5BREQiLDMwODoiU0NFTkFSSU8uRURJVCIsMzA5OiJTQ0VOQVJJTy5TSE9XIiwzMTA6IlNDRU5BUklPLlNIT1cuTkVYVCIsMzExOiJTQ0VOQVJJTy5TVU1NQVJZIiwzMTI6IlBJVk9ULlRBQkxFLldJWkFSRCIsMzEzOiJQSVZPVC5GSUVMRC5QUk9Q''@;'; put 'put ''RVJUSUVTIiwzMTQ6IlBJVk9ULkZJRUxEIiwzMTU6IlBJVk9ULklURU0iLDMxNjoiUElWT1QuQURELkZJRUxEUyIsMzE4OiJPUFRJT05TLkNBTENVTEFUSU9OIiwzMTk6Ik9QVElPTlMuRURJVCIsMzIwOiJPUFRJT05TLlZJRVciLDMyMToiQURESU4uTUFOQUdFUiIsMzIyOiJNRU5VLkVESVRP''@;'; put 'put ''UiIsMzIzOiJBVFRBQ0guVE9PTEJBUlMiLDMyNDoiVkJBQWN0aXZhdGUiLDMyNToiT1BUSU9OUy5DSEFSVCIsMzI4OiJWQkEuSU5TRVJULkZJTEUiLDMzMDoiVkJBLlBST0NFRFVSRS5ERUZJTklUSU9OIiwzMzY6IlJPVVRJTkcuU0xJUCIsMzM4OiJST1VURS5ET0NVTUVOVCIsMzM5OiJNQUlM''@;'; put 'put ''LkxPR09OIiwzNDI6IklOU0VSVC5QSUNUVVJFIiwzNDM6IkVESVQuVE9PTCIsMzQ0OiJHQUxMRVJZLkRPVUdITlVUIiwzNTA6IkNIQVJULlRSRU5EIiwzNTI6IlBJVk9ULklURU0uUFJPUEVSVElFUyIsMzU0OiJXT1JLQk9PSy5JTlNFUlQiLDM1NToiT1BUSU9OUy5UUkFOU0lUSU9OIiwzNTY6''@;'; put 'put ''Ik9QVElPTlMuR0VORVJBTCIsMzcwOiJGSUxURVIuQURWQU5DRUQiLDM3MzoiTUFJTC5BREQuTUFJTEVSIiwzNzQ6Ik1BSUwuREVMRVRFLk1BSUxFUiIsMzc1OiJNQUlMLlJFUExZIiwzNzY6Ik1BSUwuUkVQTFkuQUxMIiwzNzc6Ik1BSUwuRk9SV0FSRCIsMzc4OiJNQUlMLk5FWFQuTEVUVEVS''@;'; put 'put ''IiwzNzk6IkRBVEEuTEFCRUwiLDM4MDoiSU5TRVJULlRJVExFIiwzODE6IkZPTlQuUFJPUEVSVElFUyIsMzgyOiJNQUNSTy5PUFRJT05TIiwzODM6IldPUktCT09LLkhJREUiLDM4NDoiV09SS0JPT0suVU5ISURFIiwzODU6IldPUktCT09LLkRFTEVURSIsMzg2OiJXT1JLQk9PSy5OQU1FIiwz''@;'; put 'put ''ODg6IkdBTExFUlkuQ1VTVE9NIiwzOTA6IkFERC5DSEFSVC5BVVRPRk9STUFUIiwzOTE6IkRFTEVURS5DSEFSVC5BVVRPRk9STUFUIiwzOTI6IkNIQVJULkFERC5EQVRBIiwzOTM6IkFVVE8uT1VUTElORSIsMzk0OiJUQUIuT1JERVIiLDM5NToiU0hPVy5ESUFMT0ciLDM5NjoiU0VMRUNULkFM''@;'; put 'put ''TCIsMzk3OiJVTkdST1VQLlNIRUVUUyIsMzk4OiJTVUJUT1RBTC5DUkVBVEUiLDM5OToiU1VCVE9UQUwuUkVNT1ZFIiw0MDA6IlJFTkFNRS5PQkpFQ1QiLDQxMjoiV09SS0JPT0suU0NST0xMIiw0MTM6IldPUktCT09LLk5FWFQiLDQxNDoiV09SS0JPT0suUFJFViIsNDE1OiJXT1JLQk9PSy5U''@;'; put 'put ''QUIuU1BMSVQiLDQxNjoiRlVMTC5TQ1JFRU4iLDQxNzoiV09SS0JPT0suUFJPVEVDVCIsNDIwOiJTQ1JPTExCQVIuUFJPUEVSVElFUyIsNDIxOiJQSVZPVC5TSE9XLlBBR0VTIiw0MjI6IlRFWFQuVE8uQ09MVU1OUyIsNDIzOiJGT1JNQVQuQ0hBUlRUWVBFIiw0MjQ6IkxJTksuRk9STUFUIiw0''@;'; put 'put ''MjU6IlRSQUNFUi5ESVNQTEFZIiw0MzA6IlRSQUNFUi5OQVZJR0FURSIsNDMxOiJUUkFDRVIuQ0xFQVIiLDQzMjoiVFJBQ0VSLkVSUk9SIiw0MzM6IlBJVk9ULkZJRUxELkdST1VQIiw0MzQ6IlBJVk9ULkZJRUxELlVOR1JPVVAiLDQzNToiQ0hFQ0tCT1guUFJPUEVSVElFUyIsNDM2OiJMQUJF''@;'; put 'put ''TC5QUk9QRVJUSUVTIiw0Mzc6IkxJU1RCT1guUFJPUEVSVElFUyIsNDM4OiJFRElUQk9YLlBST1BFUlRJRVMiLDQzOToiUElWT1QuUkVGUkVTSCIsNDQwOiJMSU5LLkNPTUJPIiw0NDE6Ik9QRU4uVEVYVCIsNDQyOiJISURFLkRJQUxPRyIsNDQzOiJTRVQuRElBTE9HLkZPQ1VTIiw0NDQ6IkVO''@;'; put 'put ''QUJMRS5PQkpFQ1QiLDQ0NToiUFVTSEJVVFRPTi5QUk9QRVJUSUVTIiw0NDY6IlNFVC5ESUFMT0cuREVGQVVMVCIsNDQ3OiJGSUxURVIiLDQ0ODoiRklMVEVSLlNIT1cuQUxMIiw0NDk6IkNMRUFSLk9VVExJTkUiLDQ1MDoiRlVOQ1RJT04uV0laQVJEIiw0NTE6IkFERC5MSVNULklURU0iLDQ1''@;'; put 'put ''MjoiU0VULkxJU1QuSVRFTSIsNDUzOiJSRU1PVkUuTElTVC5JVEVNIiw0NTQ6IlNFTEVDVC5MSVNULklURU0iLDQ1NToiU0VULkNPTlRST0wuVkFMVUUiLDQ1NjoiU0FWRS5DT1BZLkFTIiw0NTg6Ik9QVElPTlMuTElTVFMuQUREIiw0NTk6Ik9QVElPTlMuTElTVFMuREVMRVRFIiw0NjA6IlNF''@;'; put 'put ''UklFUy5BWEVTIiw0NjE6IlNFUklFUy5YIiw0NjI6IlNFUklFUy5ZIiw0NjM6IkVSUk9SQkFSLlgiLDQ2NDoiRVJST1JCQVIuWSIsNDY1OiJGT1JNQVQuQ0hBUlQiLDQ2NjoiU0VSSUVTLk9SREVSIiw0Njc6Ik1BSUwuTE9HT0ZGIiw0Njg6IkNMRUFSLlJPVVRJTkcuU0xJUCIsNDY5OiJBUFAu''@;'; put 'put ''QUNUSVZBVEUuTUlDUk9TT0ZUIiw0NzA6Ik1BSUwuRURJVC5NQUlMRVIiLDQ3MToiT04uU0hFRVQiLDQ3MjoiU1RBTkRBUkQuV0lEVEgiLDQ3MzoiU0NFTkFSSU8uTUVSR0UiLDQ3NDoiU1VNTUFSWS5JTkZPIiw0NzU6IkZJTkQuRklMRSIsNDc2OiJBQ1RJVkUuQ0VMTC5GT05UIiw0Nzc6IkVO''@;'; put 'put ''QUJMRS5USVBXSVpBUkQiLDQ3ODoiVkJBLk1BS0UuQURESU4iLDQ4MDoiSU5TRVJUREFUQVRBQkxFIiw0ODE6IldPUktHUk9VUC5PUFRJT05TIiw0ODI6Ik1BSUwuU0VORC5NQUlMRVIiLDQ4NToiQVVUT0NPUlJFQ1QiLDQ4OToiUE9TVC5ET0NVTUVOVCIsNDkxOiJQSUNLTElTVCIsNDkzOiJW''@;'; put 'put ''SUVXLlNIT1ciLDQ5NDoiVklFVy5ERUZJTkUiLDQ5NToiVklFVy5ERUxFVEUiLDUwOToiU0hFRVQuQkFDS0dST1VORCIsNTEwOiJJTlNFUlQuTUFQLk9CSkVDVCIsNTExOiJPUFRJT05TLk1FTk9OTyIsNTE3OiJNU09DSEVDS1MiLDUxODoiTk9STUFMIiw1MTk6IkxBWU9VVCIsNTIwOiJSTS5Q''@;'; put 'put ''UklOVC5BUkVBIiw1MjE6IkNMRUFSLlBSSU5ULkFSRUEiLDUyMjoiQURELlBSSU5ULkFSRUEiLDUyMzoiTU9WRS5CUksiLDU0NToiSElERUNVUlIuTk9URSIsNTQ2OiJISURFQUxMLk5PVEVTIiw1NDc6IkRFTEVURS5OT1RFIiw1NDg6IlRSQVZFUlNFLk5PVEVTIiw1NDk6IkFDVElWQVRFLk5P''@;'; put 'put ''VEVTIiw2MjA6IlBST1RFQ1QuUkVWSVNJT05TIiw2MjE6IlVOUFJPVEVDVC5SRVZJU0lPTlMiLDY0NzoiT1BUSU9OUy5NRSIsNjUzOiJXRUIuUFVCTElTSCIsNjY3OiJORVdXRUJRVUVSWSIsNjczOiJQSVZPVC5UQUJMRS5DSEFSVCIsNzUzOiJPUFRJT05TLlNBVkUiLDc1NToiT1BUSU9OUy5T''@;'; put 'put ''UEVMTCIsODA4OiJISURFQUxMLklOS0FOTk9UUyJ9LGFEPXswOiJDT1VOVCIsMToiSUYiLDI6IklTTkEiLDM6IklTRVJST1IiLDQ6IlNVTSIsNToiQVZFUkFHRSIsNjoiTUlOIiw3OiJNQVgiLDg6IlJPVyIsOToiQ09MVU1OIiwxMDoiTkEiLDExOiJOUFYiLDEyOiJTVERFViIsMTM6IkRPTExB''@;'; put 'put ''UiIsMTQ6IkZJWEVEIiwxNToiU0lOIiwxNjoiQ09TIiwxNzoiVEFOIiwxODoiQVRBTiIsMTk6IlBJIiwyMDoiU1FSVCIsMjE6IkVYUCIsMjI6IkxOIiwyMzoiTE9HMTAiLDI0OiJBQlMiLDI1OiJJTlQiLDI2OiJTSUdOIiwyNzoiUk9VTkQiLDI4OiJMT09LVVAiLDI5OiJJTkRFWCIsMzA6IlJF''@;'; put 'put ''UFQiLDMxOiJNSUQiLDMyOiJMRU4iLDMzOiJWQUxVRSIsMzQ6IlRSVUUiLDM1OiJGQUxTRSIsMzY6IkFORCIsMzc6Ik9SIiwzODoiTk9UIiwzOToiTU9EIiw0MDoiRENPVU5UIiw0MToiRFNVTSIsNDI6IkRBVkVSQUdFIiw0MzoiRE1JTiIsNDQ6IkRNQVgiLDQ1OiJEU1RERVYiLDQ2OiJWQVIi''@;'; put 'put ''LDQ3OiJEVkFSIiw0ODoiVEVYVCIsNDk6IkxJTkVTVCIsNTA6IlRSRU5EIiw1MToiTE9HRVNUIiw1MjoiR1JPV1RIIiw1MzoiR09UTyIsNTQ6IkhBTFQiLDU1OiJSRVRVUk4iLDU2OiJQViIsNTc6IkZWIiw1ODoiTlBFUiIsNTk6IlBNVCIsNjA6IlJBVEUiLDYxOiJNSVJSIiw2MjoiSVJSIiw2''@;'; put 'put ''MzoiUkFORCIsNjQ6Ik1BVENIIiw2NToiREFURSIsNjY6IlRJTUUiLDY3OiJEQVkiLDY4OiJNT05USCIsNjk6IllFQVIiLDcwOiJXRUVLREFZIiw3MToiSE9VUiIsNzI6Ik1JTlVURSIsNzM6IlNFQ09ORCIsNzQ6Ik5PVyIsNzU6IkFSRUFTIiw3NjoiUk9XUyIsNzc6IkNPTFVNTlMiLDc4OiJP''@;'; put 'put ''RkZTRVQiLDc5OiJBQlNSRUYiLDgwOiJSRUxSRUYiLDgxOiJBUkdVTUVOVCIsODI6IlNFQVJDSCIsODM6IlRSQU5TUE9TRSIsODQ6IkVSUk9SIiw4NToiU1RFUCIsODY6IlRZUEUiLDg3OiJFQ0hPIiw4ODoiU0VULk5BTUUiLDg5OiJDQUxMRVIiLDkwOiJERVJFRiIsOTE6IldJTkRPV1MiLDky''@;'; put 'put ''OiJTRVJJRVMiLDkzOiJET0NVTUVOVFMiLDk0OiJBQ1RJVkUuQ0VMTCIsOTU6IlNFTEVDVElPTiIsOTY6IlJFU1VMVCIsOTc6IkFUQU4yIiw5ODoiQVNJTiIsOTk6IkFDT1MiLDEwMDoiQ0hPT1NFIiwxMDE6IkhMT09LVVAiLDEwMjoiVkxPT0tVUCIsMTAzOiJMSU5LUyIsMTA0OiJJTlBVVCIs''@;'; put 'put ''MTA1OiJJU1JFRiIsMTA2OiJHRVQuRk9STVVMQSIsMTA3OiJHRVQuTkFNRSIsMTA4OiJTRVQuVkFMVUUiLDEwOToiTE9HIiwxMTA6IkVYRUMiLDExMToiQ0hBUiIsMTEyOiJMT1dFUiIsMTEzOiJVUFBFUiIsMTE0OiJQUk9QRVIiLDExNToiTEVGVCIsMTE2OiJSSUdIVCIsMTE3OiJFWEFDVCIs''@;'; put 'put ''MTE4OiJUUklNIiwxMTk6IlJFUExBQ0UiLDEyMDoiU1VCU1RJVFVURSIsMTIxOiJDT0RFIiwxMjI6Ik5BTUVTIiwxMjM6IkRJUkVDVE9SWSIsMTI0OiJGSU5EIiwxMjU6IkNFTEwiLDEyNjoiSVNFUlIiLDEyNzoiSVNURVhUIiwxMjg6IklTTlVNQkVSIiwxMjk6IklTQkxBTksiLDEzMDoiVCIs''@;'; put 'put ''MTMxOiJOIiwxMzI6IkZPUEVOIiwxMzM6IkZDTE9TRSIsMTM0OiJGU0laRSIsMTM1OiJGUkVBRExOIiwxMzY6IkZSRUFEIiwxMzc6IkZXUklURUxOIiwxMzg6IkZXUklURSIsMTM5OiJGUE9TIiwxNDA6IkRBVEVWQUxVRSIsMTQxOiJUSU1FVkFMVUUiLDE0MjoiU0xOIiwxNDM6IlNZRCIsMTQ0''@;'; put 'put ''OiJEREIiLDE0NToiR0VULkRFRiIsMTQ2OiJSRUZURVhUIiwxNDc6IlRFWFRSRUYiLDE0ODoiSU5ESVJFQ1QiLDE0OToiUkVHSVNURVIiLDE1MDoiQ0FMTCIsMTUxOiJBREQuQkFSIiwxNTI6IkFERC5NRU5VIiwxNTM6IkFERC5DT01NQU5EIiwxNTQ6IkVOQUJMRS5DT01NQU5EIiwxNTU6IkNI''@;'; put 'put ''RUNLLkNPTU1BTkQiLDE1NjoiUkVOQU1FLkNPTU1BTkQiLDE1NzoiU0hPVy5CQVIiLDE1ODoiREVMRVRFLk1FTlUiLDE1OToiREVMRVRFLkNPTU1BTkQiLDE2MDoiR0VULkNIQVJULklURU0iLDE2MToiRElBTE9HLkJPWCIsMTYyOiJDTEVBTiIsMTYzOiJNREVURVJNIiwxNjQ6Ik1JTlZFUlNF''@;'; put 'put ''IiwxNjU6Ik1NVUxUIiwxNjY6IkZJTEVTIiwxNjc6IklQTVQiLDE2ODoiUFBNVCIsMTY5OiJDT1VOVEEiLDE3MDoiQ0FOQ0VMLktFWSIsMTcxOiJGT1IiLDE3MjoiV0hJTEUiLDE3MzoiQlJFQUsiLDE3NDoiTkVYVCIsMTc1OiJJTklUSUFURSIsMTc2OiJSRVFVRVNUIiwxNzc6IlBPS0UiLDE3''@;'; put 'put ''ODoiRVhFQ1VURSIsMTc5OiJURVJNSU5BVEUiLDE4MDoiUkVTVEFSVCIsMTgxOiJIRUxQIiwxODI6IkdFVC5CQVIiLDE4MzoiUFJPRFVDVCIsMTg0OiJGQUNUIiwxODU6IkdFVC5DRUxMIiwxODY6IkdFVC5XT1JLU1BBQ0UiLDE4NzoiR0VULldJTkRPVyIsMTg4OiJHRVQuRE9DVU1FTlQiLDE4''@;'; put 'put ''OToiRFBST0RVQ1QiLDE5MDoiSVNOT05URVhUIiwxOTE6IkdFVC5OT1RFIiwxOTI6Ik5PVEUiLDE5MzoiU1RERVZQIiwxOTQ6IlZBUlAiLDE5NToiRFNUREVWUCIsMTk2OiJEVkFSUCIsMTk3OiJUUlVOQyIsMTk4OiJJU0xPR0lDQUwiLDE5OToiRENPVU5UQSIsMjAwOiJERUxFVEUuQkFSIiwy''@;'; put 'put ''MDE6IlVOUkVHSVNURVIiLDIwNDoiVVNET0xMQVIiLDIwNToiRklOREIiLDIwNjoiU0VBUkNIQiIsMjA3OiJSRVBMQUNFQiIsMjA4OiJMRUZUQiIsMjA5OiJSSUdIVEIiLDIxMDoiTUlEQiIsMjExOiJMRU5CIiwyMTI6IlJPVU5EVVAiLDIxMzoiUk9VTkRET1dOIiwyMTQ6IkFTQyIsMjE1OiJE''@;'; put 'put ''QkNTIiwyMTY6IlJBTksiLDIxOToiQUREUkVTUyIsMjIwOiJEQVlTMzYwIiwyMjE6IlRPREFZIiwyMjI6IlZEQiIsMjIzOiJFTFNFIiwyMjQ6IkVMU0UuSUYiLDIyNToiRU5ELklGIiwyMjY6IkZPUi5DRUxMIiwyMjc6Ik1FRElBTiIsMjI4OiJTVU1QUk9EVUNUIiwyMjk6IlNJTkgiLDIzMDoi''@;'; put 'put ''Q09TSCIsMjMxOiJUQU5IIiwyMzI6IkFTSU5IIiwyMzM6IkFDT1NIIiwyMzQ6IkFUQU5IIiwyMzU6IkRHRVQiLDIzNjoiQ1JFQVRFLk9CSkVDVCIsMjM3OiJWT0xBVElMRSIsMjM4OiJMQVNULkVSUk9SIiwyMzk6IkNVU1RPTS5VTkRPIiwyNDA6IkNVU1RPTS5SRVBFQVQiLDI0MToiRk9STVVM''@;'; put 'put ''QS5DT05WRVJUIiwyNDI6IkdFVC5MSU5LLklORk8iLDI0MzoiVEVYVC5CT1giLDI0NDoiSU5GTyIsMjQ1OiJHUk9VUCIsMjQ2OiJHRVQuT0JKRUNUIiwyNDc6IkRCIiwyNDg6IlBBVVNFIiwyNTE6IlJFU1VNRSIsMjUyOiJGUkVRVUVOQ1kiLDI1MzoiQURELlRPT0xCQVIiLDI1NDoiREVMRVRF''@;'; put 'put ''LlRPT0xCQVIiLDI1NToiVXNlciIsMjU2OiJSRVNFVC5UT09MQkFSIiwyNTc6IkVWQUxVQVRFIiwyNTg6IkdFVC5UT09MQkFSIiwyNTk6IkdFVC5UT09MIiwyNjA6IlNQRUxMSU5HLkNIRUNLIiwyNjE6IkVSUk9SLlRZUEUiLDI2MjoiQVBQLlRJVExFIiwyNjM6IldJTkRPVy5USVRMRSIsMjY0''@;'; put 'put ''OiJTQVZFLlRPT0xCQVIiLDI2NToiRU5BQkxFLlRPT0wiLDI2NjoiUFJFU1MuVE9PTCIsMjY3OiJSRUdJU1RFUi5JRCIsMjY4OiJHRVQuV09SS0JPT0siLDI2OToiQVZFREVWIiwyNzA6IkJFVEFESVNUIiwyNzE6IkdBTU1BTE4iLDI3MjoiQkVUQUlOViIsMjczOiJCSU5PTURJU1QiLDI3NDoi''@;'; put 'put ''Q0hJRElTVCIsMjc1OiJDSElJTlYiLDI3NjoiQ09NQklOIiwyNzc6IkNPTkZJREVOQ0UiLDI3ODoiQ1JJVEJJTk9NIiwyNzk6IkVWRU4iLDI4MDoiRVhQT05ESVNUIiwyODE6IkZESVNUIiwyODI6IkZJTlYiLDI4MzoiRklTSEVSIiwyODQ6IkZJU0hFUklOViIsMjg1OiJGTE9PUiIsMjg2OiJH''@;'; put 'put ''QU1NQURJU1QiLDI4NzoiR0FNTUFJTlYiLDI4ODoiQ0VJTElORyIsMjg5OiJIWVBHRU9NRElTVCIsMjkwOiJMT0dOT1JNRElTVCIsMjkxOiJMT0dJTlYiLDI5MjoiTkVHQklOT01ESVNUIiwyOTM6Ik5PUk1ESVNUIiwyOTQ6Ik5PUk1TRElTVCIsMjk1OiJOT1JNSU5WIiwyOTY6Ik5PUk1TSU5W''@;'; put 'put ''IiwyOTc6IlNUQU5EQVJESVpFIiwyOTg6Ik9ERCIsMjk5OiJQRVJNVVQiLDMwMDoiUE9JU1NPTiIsMzAxOiJURElTVCIsMzAyOiJXRUlCVUxMIiwzMDM6IlNVTVhNWTIiLDMwNDoiU1VNWDJNWTIiLDMwNToiU1VNWDJQWTIiLDMwNjoiQ0hJVEVTVCIsMzA3OiJDT1JSRUwiLDMwODoiQ09WQVIi''@;'; put 'put ''LDMwOToiRk9SRUNBU1QiLDMxMDoiRlRFU1QiLDMxMToiSU5URVJDRVBUIiwzMTI6IlBFQVJTT04iLDMxMzoiUlNRIiwzMTQ6IlNURVlYIiwzMTU6IlNMT1BFIiwzMTY6IlRURVNUIiwzMTc6IlBST0IiLDMxODoiREVWU1EiLDMxOToiR0VPTUVBTiIsMzIwOiJIQVJNRUFOIiwzMjE6IlNVTVNR''@;'; put 'put ''IiwzMjI6IktVUlQiLDMyMzoiU0tFVyIsMzI0OiJaVEVTVCIsMzI1OiJMQVJHRSIsMzI2OiJTTUFMTCIsMzI3OiJRVUFSVElMRSIsMzI4OiJQRVJDRU5USUxFIiwzMjk6IlBFUkNFTlRSQU5LIiwzMzA6Ik1PREUiLDMzMToiVFJJTU1FQU4iLDMzMjoiVElOViIsMzM0OiJNT1ZJRS5DT01NQU5E''@;'; put 'put ''IiwzMzU6IkdFVC5NT1ZJRSIsMzM2OiJDT05DQVRFTkFURSIsMzM3OiJQT1dFUiIsMzM4OiJQSVZPVC5BREQuREFUQSIsMzM5OiJHRVQuUElWT1QuVEFCTEUiLDM0MDoiR0VULlBJVk9ULkZJRUxEIiwzNDE6IkdFVC5QSVZPVC5JVEVNIiwzNDI6IlJBRElBTlMiLDM0MzoiREVHUkVFUyIsMzQ0''@;'; put 'put ''OiJTVUJUT1RBTCIsMzQ1OiJTVU1JRiIsMzQ2OiJDT1VOVElGIiwzNDc6IkNPVU5UQkxBTksiLDM0ODoiU0NFTkFSSU8uR0VUIiwzNDk6Ik9QVElPTlMuTElTVFMuR0VUIiwzNTA6IklTUE1UIiwzNTE6IkRBVEVESUYiLDM1MjoiREFURVNUUklORyIsMzUzOiJOVU1CRVJTVFJJTkciLDM1NDoi''@;'; put 'put ''Uk9NQU4iLDM1NToiT1BFTi5ESUFMT0ciLDM1NjoiU0FWRS5ESUFMT0ciLDM1NzoiVklFVy5HRVQiLDM1ODoiR0VUUElWT1REQVRBIiwzNTk6IkhZUEVSTElOSyIsMzYwOiJQSE9ORVRJQyIsMzYxOiJBVkVSQUdFQSIsMzYyOiJNQVhBIiwzNjM6Ik1JTkEiLDM2NDoiU1RERVZQQSIsMzY1OiJW''@;'; put 'put ''QVJQQSIsMzY2OiJTVERFVkEiLDM2NzoiVkFSQSIsMzY4OiJCQUhUVEVYVCIsMzY5OiJUSEFJREFZT0ZXRUVLIiwzNzA6IlRIQUlESUdJVCIsMzcxOiJUSEFJTU9OVEhPRllFQVIiLDM3MjoiVEhBSU5VTVNPVU5EIiwzNzM6IlRIQUlOVU1TVFJJTkciLDM3NDoiVEhBSVNUUklOR0xFTkdUSCIs''@;'; put 'put ''Mzc1OiJJU1RIQUlESUdJVCIsMzc2OiJST1VOREJBSFRET1dOIiwzNzc6IlJPVU5EQkFIVFVQIiwzNzg6IlRIQUlZRUFSIiwzNzk6IlJURCIsMzgwOiJDVUJFVkFMVUUiLDM4MToiQ1VCRU1FTUJFUiIsMzgyOiJDVUJFTUVNQkVSUFJPUEVSVFkiLDM4MzoiQ1VCRVJBTktFRE1FTUJFUiIsMzg0''@;'; put 'put ''OiJIRVgyQklOIiwzODU6IkhFWDJERUMiLDM4NjoiSEVYMk9DVCIsMzg3OiJERUMyQklOIiwzODg6IkRFQzJIRVgiLDM4OToiREVDMk9DVCIsMzkwOiJPQ1QyQklOIiwzOTE6Ik9DVDJIRVgiLDM5MjoiT0NUMkRFQyIsMzkzOiJCSU4yREVDIiwzOTQ6IkJJTjJPQ1QiLDM5NToiQklOMkhFWCIs''@;'; put 'put ''Mzk2OiJJTVNVQiIsMzk3OiJJTURJViIsMzk4OiJJTVBPV0VSIiwzOTk6IklNQUJTIiw0MDA6IklNU1FSVCIsNDAxOiJJTUxOIiw0MDI6IklNTE9HMiIsNDAzOiJJTUxPRzEwIiw0MDQ6IklNU0lOIiw0MDU6IklNQ09TIiw0MDY6IklNRVhQIiw0MDc6IklNQVJHVU1FTlQiLDQwODoiSU1DT05K''@;'; put 'put ''VUdBVEUiLDQwOToiSU1BR0lOQVJZIiw0MTA6IklNUkVBTCIsNDExOiJDT01QTEVYIiw0MTI6IklNU1VNIiw0MTM6IklNUFJPRFVDVCIsNDE0OiJTRVJJRVNTVU0iLDQxNToiRkFDVERPVUJMRSIsNDE2OiJTUVJUUEkiLDQxNzoiUVVPVElFTlQiLDQxODoiREVMVEEiLDQxOToiR0VTVEVQIiw0''@;'; put 'put ''MjA6IklTRVZFTiIsNDIxOiJJU09ERCIsNDIyOiJNUk9VTkQiLDQyMzoiRVJGIiw0MjQ6IkVSRkMiLDQyNToiQkVTU0VMSiIsNDI2OiJCRVNTRUxLIiw0Mjc6IkJFU1NFTFkiLDQyODoiQkVTU0VMSSIsNDI5OiJYSVJSIiw0MzA6IlhOUFYiLDQzMToiUFJJQ0VNQVQiLDQzMjoiWUlFTERNQVQi''@;'; put 'put ''LDQzMzoiSU5UUkFURSIsNDM0OiJSRUNFSVZFRCIsNDM1OiJESVNDIiw0MzY6IlBSSUNFRElTQyIsNDM3OiJZSUVMRERJU0MiLDQzODoiVEJJTExFUSIsNDM5OiJUQklMTFBSSUNFIiw0NDA6IlRCSUxMWUlFTEQiLDQ0MToiUFJJQ0UiLDQ0MjoiWUlFTEQiLDQ0MzoiRE9MTEFSREUiLDQ0NDoi''@;'; put 'put ''RE9MTEFSRlIiLDQ0NToiTk9NSU5BTCIsNDQ2OiJFRkZFQ1QiLDQ0NzoiQ1VNUFJJTkMiLDQ0ODoiQ1VNSVBNVCIsNDQ5OiJFREFURSIsNDUwOiJFT01PTlRIIiw0NTE6IllFQVJGUkFDIiw0NTI6IkNPVVBEQVlCUyIsNDUzOiJDT1VQREFZUyIsNDU0OiJDT1VQREFZU05DIiw0NTU6IkNPVVBO''@;'; put 'put ''Q0QiLDQ1NjoiQ09VUE5VTSIsNDU3OiJDT1VQUENEIiw0NTg6IkRVUkFUSU9OIiw0NTk6Ik1EVVJBVElPTiIsNDYwOiJPRERMUFJJQ0UiLDQ2MToiT0RETFlJRUxEIiw0NjI6Ik9EREZQUklDRSIsNDYzOiJPRERGWUlFTEQiLDQ2NDoiUkFOREJFVFdFRU4iLDQ2NToiV0VFS05VTSIsNDY2OiJB''@;'; put 'put ''TU9SREVHUkMiLDQ2NzoiQU1PUkxJTkMiLDQ2ODoiQ09OVkVSVCIsNzI0OiJTSEVFVEpTIiw0Njk6IkFDQ1JJTlQiLDQ3MDoiQUNDUklOVE0iLDQ3MToiV09SS0RBWSIsNDcyOiJORVRXT1JLREFZUyIsNDczOiJHQ0QiLDQ3NDoiTVVMVElOT01JQUwiLDQ3NToiTENNIiw0NzY6IkZWU0NIRURV''@;'; put 'put ''TEUiLDQ3NzoiQ1VCRUtQSU1FTUJFUiIsNDc4OiJDVUJFU0VUIiw0Nzk6IkNVQkVTRVRDT1VOVCIsNDgwOiJJRkVSUk9SIiw0ODE6IkNPVU5USUZTIiw0ODI6IlNVTUlGUyIsNDgzOiJBVkVSQUdFSUYiLDQ4NDoiQVZFUkFHRUlGUyJ9LFpCPXsyOjEsMzoxLDEwOjAsMTU6MSwxNjoxLDE3OjEs''@;'; put 'put ''MTg6MSwxOTowLDIwOjEsMjE6MSwyMjoxLDIzOjEsMjQ6MSwyNToxLDI2OjEsMjc6MiwzMDoyLDMxOjMsMzI6MSwzMzoxLDM0OjAsMzU6MCwzODoxLDM5OjIsNDA6Myw0MTozLDQyOjMsNDM6Myw0NDozLDQ1OjMsNDc6Myw0ODoyLDUzOjEsNjE6Myw2MzowLDY1OjMsNjY6Myw2NzoxLDY4OjEs''@;'; put 'put ''Njk6MSw3MDoxLDcxOjEsNzI6MSw3MzoxLDc0OjAsNzU6MSw3NjoxLDc3OjEsNzk6Miw4MDoyLDgzOjEsODU6MCw4NjoxLDg5OjAsOTA6MSw5NDowLDk1OjAsOTc6Miw5ODoxLDk5OjEsMTAxOjMsMTAyOjMsMTA1OjEsMTA2OjEsMTA4OjIsMTExOjEsMTEyOjEsMTEzOjEsMTE0OjEsMTE3OjIs''@;'; put 'put ''MTE4OjEsMTE5OjQsMTIxOjEsMTI2OjEsMTI3OjEsMTI4OjEsMTI5OjEsMTMwOjEsMTMxOjEsMTMzOjEsMTM0OjEsMTM1OjEsMTM2OjIsMTM3OjIsMTM4OjIsMTQwOjEsMTQxOjEsMTQyOjMsMTQzOjQsMTQ0OjQsMTYxOjEsMTYyOjEsMTYzOjEsMTY0OjEsMTY1OjIsMTcyOjEsMTc1OjIsMTc2''@;'; put 'put ''OjIsMTc3OjMsMTc4OjIsMTc5OjEsMTg0OjEsMTg2OjEsMTg5OjMsMTkwOjEsMTk1OjMsMTk2OjMsMTk3OjEsMTk4OjEsMTk5OjMsMjAxOjEsMjA3OjQsMjEwOjMsMjExOjEsMjEyOjIsMjEzOjIsMjE0OjEsMjE1OjEsMjI1OjAsMjI5OjEsMjMwOjEsMjMxOjEsMjMyOjEsMjMzOjEsMjM0OjEs''@;'; put 'put ''MjM1OjMsMjQ0OjEsMjQ3OjQsMjUyOjIsMjU3OjEsMjYxOjEsMjcxOjEsMjczOjQsMjc0OjIsMjc1OjIsMjc2OjIsMjc3OjMsMjc4OjMsMjc5OjEsMjgwOjMsMjgxOjMsMjgyOjMsMjgzOjEsMjg0OjEsMjg1OjIsMjg2OjQsMjg3OjMsMjg4OjIsMjg5OjQsMjkwOjMsMjkxOjMsMjkyOjMsMjkz''@;'; put 'put ''OjQsMjk0OjEsMjk1OjMsMjk2OjEsMjk3OjMsMjk4OjEsMjk5OjIsMzAwOjMsMzAxOjMsMzAyOjQsMzAzOjIsMzA0OjIsMzA1OjIsMzA2OjIsMzA3OjIsMzA4OjIsMzA5OjMsMzEwOjIsMzExOjIsMzEyOjIsMzEzOjIsMzE0OjIsMzE1OjIsMzE2OjQsMzI1OjIsMzI2OjIsMzI3OjIsMzI4OjIs''@;'; put 'put ''MzMxOjIsMzMyOjIsMzM3OjIsMzQyOjEsMzQzOjEsMzQ2OjIsMzQ3OjEsMzUwOjQsMzUxOjMsMzUyOjEsMzUzOjIsMzYwOjEsMzY4OjEsMzY5OjEsMzcwOjEsMzcxOjEsMzcyOjEsMzczOjEsMzc0OjEsMzc1OjEsMzc2OjEsMzc3OjEsMzc4OjEsMzgyOjMsMzg1OjEsMzkyOjEsMzkzOjEsMzk2''@;'; put 'put ''OjIsMzk3OjIsMzk4OjIsMzk5OjEsNDAwOjEsNDAxOjEsNDAyOjEsNDAzOjEsNDA0OjEsNDA1OjEsNDA2OjEsNDA3OjEsNDA4OjEsNDA5OjEsNDEwOjEsNDE0OjQsNDE1OjEsNDE2OjEsNDE3OjIsNDIwOjEsNDIxOjEsNDIyOjIsNDI0OjEsNDI1OjIsNDI2OjIsNDI3OjIsNDI4OjIsNDMwOjMs''@;'; put 'put ''NDM4OjMsNDM5OjMsNDQwOjMsNDQzOjIsNDQ0OjIsNDQ1OjIsNDQ2OjIsNDQ3OjYsNDQ4OjYsNDQ5OjIsNDUwOjIsNDY0OjIsNDY4OjMsNDc2OjIsNDc5OjEsNDgwOjIsNjU1MzU6MH0sUXY9eyJfeGxmbi5BQ09UIjoiQUNPVCIsIl94bGZuLkFDT1RIIjoiQUNPVEgiLCJfeGxmbi5BR0dSRUdB''@;'; put 'put ''VEUiOiJBR0dSRUdBVEUiLCJfeGxmbi5BUkFCSUMiOiJBUkFCSUMiLCJfeGxmbi5BVkVSQUdFSUYiOiJBVkVSQUdFSUYiLCJfeGxmbi5BVkVSQUdFSUZTIjoiQVZFUkFHRUlGUyIsIl94bGZuLkJBU0UiOiJCQVNFIiwiX3hsZm4uQkVUQS5ESVNUIjoiQkVUQS5ESVNUIiwiX3hsZm4uQkVUQS5J''@;'; put 'put ''TlYiOiJCRVRBLklOViIsIl94bGZuLkJJTk9NLkRJU1QiOiJCSU5PTS5ESVNUIiwiX3hsZm4uQklOT00uRElTVC5SQU5HRSI6IkJJTk9NLkRJU1QuUkFOR0UiLCJfeGxmbi5CSU5PTS5JTlYiOiJCSU5PTS5JTlYiLCJfeGxmbi5CSVRBTkQiOiJCSVRBTkQiLCJfeGxmbi5CSVRMU0hJRlQiOiJC''@;'; put 'put ''SVRMU0hJRlQiLCJfeGxmbi5CSVRPUiI6IkJJVE9SIiwiX3hsZm4uQklUUlNISUZUIjoiQklUUlNISUZUIiwiX3hsZm4uQklUWE9SIjoiQklUWE9SIiwiX3hsZm4uQ0VJTElORy5NQVRIIjoiQ0VJTElORy5NQVRIIiwiX3hsZm4uQ0VJTElORy5QUkVDSVNFIjoiQ0VJTElORy5QUkVDSVNFIiwi''@;'; put 'put ''X3hsZm4uQ0hJU1EuRElTVCI6IkNISVNRLkRJU1QiLCJfeGxmbi5DSElTUS5ESVNULlJUIjoiQ0hJU1EuRElTVC5SVCIsIl94bGZuLkNISVNRLklOViI6IkNISVNRLklOViIsIl94bGZuLkNISVNRLklOVi5SVCI6IkNISVNRLklOVi5SVCIsIl94bGZuLkNISVNRLlRFU1QiOiJDSElTUS5URVNU''@;'; put 'put ''IiwiX3hsZm4uQ09NQklOQSI6IkNPTUJJTkEiLCJfeGxmbi5DT05DQVQiOiJDT05DQVQiLCJfeGxmbi5DT05GSURFTkNFLk5PUk0iOiJDT05GSURFTkNFLk5PUk0iLCJfeGxmbi5DT05GSURFTkNFLlQiOiJDT05GSURFTkNFLlQiLCJfeGxmbi5DT1QiOiJDT1QiLCJfeGxmbi5DT1RIIjoiQ09U''@;'; put 'put ''SCIsIl94bGZuLkNPVU5USUZTIjoiQ09VTlRJRlMiLCJfeGxmbi5DT1ZBUklBTkNFLlAiOiJDT1ZBUklBTkNFLlAiLCJfeGxmbi5DT1ZBUklBTkNFLlMiOiJDT1ZBUklBTkNFLlMiLCJfeGxmbi5DU0MiOiJDU0MiLCJfeGxmbi5DU0NIIjoiQ1NDSCIsIl94bGZuLkRBWVMiOiJEQVlTIiwiX3hs''@;'; put 'put ''Zm4uREVDSU1BTCI6IkRFQ0lNQUwiLCJfeGxmbi5FQ01BLkNFSUxJTkciOiJFQ01BLkNFSUxJTkciLCJfeGxmbi5FUkYuUFJFQ0lTRSI6IkVSRi5QUkVDSVNFIiwiX3hsZm4uRVJGQy5QUkVDSVNFIjoiRVJGQy5QUkVDSVNFIiwiX3hsZm4uRVhQT04uRElTVCI6IkVYUE9OLkRJU1QiLCJfeGxm''@;'; put 'put ''bi5GLkRJU1QiOiJGLkRJU1QiLCJfeGxmbi5GLkRJU1QuUlQiOiJGLkRJU1QuUlQiLCJfeGxmbi5GLklOViI6IkYuSU5WIiwiX3hsZm4uRi5JTlYuUlQiOiJGLklOVi5SVCIsIl94bGZuLkYuVEVTVCI6IkYuVEVTVCIsIl94bGZuLkZJTFRFUlhNTCI6IkZJTFRFUlhNTCIsIl94bGZuLkZMT09S''@;'; put 'put ''Lk1BVEgiOiJGTE9PUi5NQVRIIiwiX3hsZm4uRkxPT1IuUFJFQ0lTRSI6IkZMT09SLlBSRUNJU0UiLCJfeGxmbi5GT1JFQ0FTVC5FVFMiOiJGT1JFQ0FTVC5FVFMiLCJfeGxmbi5GT1JFQ0FTVC5FVFMuQ09ORklOVCI6IkZPUkVDQVNULkVUUy5DT05GSU5UIiwiX3hsZm4uRk9SRUNBU1QuRVRT''@;'; put 'put ''LlNFQVNPTkFMSVRZIjoiRk9SRUNBU1QuRVRTLlNFQVNPTkFMSVRZIiwiX3hsZm4uRk9SRUNBU1QuRVRTLlNUQVQiOiJGT1JFQ0FTVC5FVFMuU1RBVCIsIl94bGZuLkZPUkVDQVNULkxJTkVBUiI6IkZPUkVDQVNULkxJTkVBUiIsIl94bGZuLkZPUk1VTEFURVhUIjoiRk9STVVMQVRFWFQiLCJf''@;'; put 'put ''eGxmbi5HQU1NQSI6IkdBTU1BIiwiX3hsZm4uR0FNTUEuRElTVCI6IkdBTU1BLkRJU1QiLCJfeGxmbi5HQU1NQS5JTlYiOiJHQU1NQS5JTlYiLCJfeGxmbi5HQU1NQUxOLlBSRUNJU0UiOiJHQU1NQUxOLlBSRUNJU0UiLCJfeGxmbi5HQVVTUyI6IkdBVVNTIiwiX3hsZm4uSFlQR0VPTS5ESVNU''@;'; put 'put ''IjoiSFlQR0VPTS5ESVNUIiwiX3hsZm4uSUZFUlJPUiI6IklGRVJST1IiLCJfeGxmbi5JRk5BIjoiSUZOQSIsIl94bGZuLklGUyI6IklGUyIsIl94bGZuLklNQ09TSCI6IklNQ09TSCIsIl94bGZuLklNQ09UIjoiSU1DT1QiLCJfeGxmbi5JTUNTQyI6IklNQ1NDIiwiX3hsZm4uSU1DU0NIIjoi''@;'; put 'put ''SU1DU0NIIiwiX3hsZm4uSU1TRUMiOiJJTVNFQyIsIl94bGZuLklNU0VDSCI6IklNU0VDSCIsIl94bGZuLklNU0lOSCI6IklNU0lOSCIsIl94bGZuLklNVEFOIjoiSU1UQU4iLCJfeGxmbi5JU0ZPUk1VTEEiOiJJU0ZPUk1VTEEiLCJfeGxmbi5JU08uQ0VJTElORyI6IklTTy5DRUlMSU5HIiwi''@;'; put 'put ''X3hsZm4uSVNPV0VFS05VTSI6IklTT1dFRUtOVU0iLCJfeGxmbi5MT0dOT1JNLkRJU1QiOiJMT0dOT1JNLkRJU1QiLCJfeGxmbi5MT0dOT1JNLklOViI6IkxPR05PUk0uSU5WIiwiX3hsZm4uTUFYSUZTIjoiTUFYSUZTIiwiX3hsZm4uTUlOSUZTIjoiTUlOSUZTIiwiX3hsZm4uTU9ERS5NVUxU''@;'; put 'put ''IjoiTU9ERS5NVUxUIiwiX3hsZm4uTU9ERS5TTkdMIjoiTU9ERS5TTkdMIiwiX3hsZm4uTVVOSVQiOiJNVU5JVCIsIl94bGZuLk5FR0JJTk9NLkRJU1QiOiJORUdCSU5PTS5ESVNUIiwiX3hsZm4uTkVUV09SS0RBWVMuSU5UTCI6Ik5FVFdPUktEQVlTLklOVEwiLCJfeGxmbi5OSUdCSU5PTSI6''@;'; put 'put ''Ik5JR0JJTk9NIiwiX3hsZm4uTk9STS5ESVNUIjoiTk9STS5ESVNUIiwiX3hsZm4uTk9STS5JTlYiOiJOT1JNLklOViIsIl94bGZuLk5PUk0uUy5ESVNUIjoiTk9STS5TLkRJU1QiLCJfeGxmbi5OT1JNLlMuSU5WIjoiTk9STS5TLklOViIsIl94bGZuLk5VTUJFUlZBTFVFIjoiTlVNQkVSVkFM''@;'; put 'put ''VUUiLCJfeGxmbi5QRFVSQVRJT04iOiJQRFVSQVRJT04iLCJfeGxmbi5QRVJDRU5USUxFLkVYQyI6IlBFUkNFTlRJTEUuRVhDIiwiX3hsZm4uUEVSQ0VOVElMRS5JTkMiOiJQRVJDRU5USUxFLklOQyIsIl94bGZuLlBFUkNFTlRSQU5LLkVYQyI6IlBFUkNFTlRSQU5LLkVYQyIsIl94bGZuLlBF''@;'; put 'put ''UkNFTlRSQU5LLklOQyI6IlBFUkNFTlRSQU5LLklOQyIsIl94bGZuLlBFUk1VVEFUSU9OQSI6IlBFUk1VVEFUSU9OQSIsIl94bGZuLlBISSI6IlBISSIsIl94bGZuLlBPSVNTT04uRElTVCI6IlBPSVNTT04uRElTVCIsIl94bGZuLlFVQVJUSUxFLkVYQyI6IlFVQVJUSUxFLkVYQyIsIl94bGZu''@;'; put 'put ''LlFVQVJUSUxFLklOQyI6IlFVQVJUSUxFLklOQyIsIl94bGZuLlFVRVJZU1RSSU5HIjoiUVVFUllTVFJJTkciLCJfeGxmbi5SQU5LLkFWRyI6IlJBTksuQVZHIiwiX3hsZm4uUkFOSy5FUSI6IlJBTksuRVEiLCJfeGxmbi5SUkkiOiJSUkkiLCJfeGxmbi5TRUMiOiJTRUMiLCJfeGxmbi5TRUNI''@;'; put 'put ''IjoiU0VDSCIsIl94bGZuLlNIRUVUIjoiU0hFRVQiLCJfeGxmbi5TSEVFVFMiOiJTSEVFVFMiLCJfeGxmbi5TS0VXLlAiOiJTS0VXLlAiLCJfeGxmbi5TVERFVi5QIjoiU1RERVYuUCIsIl94bGZuLlNUREVWLlMiOiJTVERFVi5TIiwiX3hsZm4uU1VNSUZTIjoiU1VNSUZTIiwiX3hsZm4uU1dJ''@;'; put 'put ''VENIIjoiU1dJVENIIiwiX3hsZm4uVC5ESVNUIjoiVC5ESVNUIiwiX3hsZm4uVC5ESVNULjJUIjoiVC5ESVNULjJUIiwiX3hsZm4uVC5ESVNULlJUIjoiVC5ESVNULlJUIiwiX3hsZm4uVC5JTlYiOiJULklOViIsIl94bGZuLlQuSU5WLjJUIjoiVC5JTlYuMlQiLCJfeGxmbi5ULlRFU1QiOiJU''@;'; put 'put ''LlRFU1QiLCJfeGxmbi5URVhUSk9JTiI6IlRFWFRKT0lOIiwiX3hsZm4uVU5JQ0hBUiI6IlVOSUNIQVIiLCJfeGxmbi5VTklDT0RFIjoiVU5JQ09ERSIsIl94bGZuLlZBUi5QIjoiVkFSLlAiLCJfeGxmbi5WQVIuUyI6IlZBUi5TIiwiX3hsZm4uV0VCU0VSVklDRSI6IldFQlNFUlZJQ0UiLCJf''@;'; put 'put ''eGxmbi5XRUlCVUxMLkRJU1QiOiJXRUlCVUxMLkRJU1QiLCJfeGxmbi5XT1JLREFZLklOVEwiOiJXT1JLREFZLklOVEwiLCJfeGxmbi5YT1IiOiJYT1IiLCJfeGxmbi5aLlRFU1QiOiJaLlRFU1QifTtmdW5jdGlvbiByUyhTKXtyZXR1cm4ib2Y6Ij09Uy5zbGljZSgwLDMpJiYoUz1TLnNsaWNl''@;'; put 'put ''KDMpKSw2MT09Uy5jaGFyQ29kZUF0KDApJiY2MT09KFM9Uy5zbGljZSgxKSkuY2hhckNvZGVBdCgwKSYmKFM9Uy5zbGljZSgxKSksKFM9KFM9KFM9Uy5yZXBsYWNlKC9DT01cLk1JQ1JPU09GVFwuL2csIiIpKS5yZXBsYWNlKC9cWygoPzpcLltBLVpdK1swLTldKykoPzo6XC5bQS1aXStbMC05''@;'; put 'put ''XSspPylcXS9nLGZ1bmN0aW9uKFIsayl7cmV0dXJuIGsucmVwbGFjZSgvXC4vZywiIil9KSkucmVwbGFjZSgvXFsuKCNbQS1aXSpbPyFdKVxdL2csIiQxIikpLnJlcGxhY2UoL1s7fl0vZywiLCIpLnJlcGxhY2UoL1x8L2csIjsiKX1mdW5jdGlvbiBqNChTKXtyZXR1cm4oIm9mOj0iK1MucmVw''@;'; put 'put ''bGFjZShkMiwiJDFbLiQyJDMkNCQ1XSIpLnJlcGxhY2UoL1xdOlxbL2csIjoiKSkucmVwbGFjZSgvOy9nLCJ8IikucmVwbGFjZSgvLC9nLCI7Iil9ZnVuY3Rpb24gZWIoUyl7dmFyIFI9Uy5zcGxpdCgiOiIpO3JldHVybltSWzBdLnNwbGl0KCIuIilbMF0sUlswXS5zcGxpdCgiLiIpWzFdKyhS''@;'; put 'put ''Lmxlbmd0aD4xPyI6IisoUlsxXS5zcGxpdCgiLiIpWzFdfHxSWzFdLnNwbGl0KCIuIilbMF0pOiIiKV19ZnVuY3Rpb24gc0QoUyl7cmV0dXJuIFMucmVwbGFjZSgvXC4vLCIhIil9dmFyIGE4PXt9LHM4PXt9O3FvLldTPVsiaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL29mZmlj''@;'; put 'put ''ZURvY3VtZW50LzIwMDYvcmVsYXRpb25zaGlwcy93b3Jrc2hlZXQiLCJodHRwOi8vcHVybC5vY2xjLm9yZy9vb3htbC9vZmZpY2VEb2N1bWVudC9yZWxhdGlvbnNoaXBzL3dvcmtzaGVldCJdO3ZhciBXMz10eXBlb2YgTWFwPCJ1IjtmdW5jdGlvbiBpUyhTLFIsayxHKXt2YXIgUT0wLGFlPVMu''@;'; put 'put ''bGVuZ3RoO2lmKEcpe2lmKFczP0cuaGFzKFIpOk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChHLFIpKWZvcih2YXIgZ2U9VzM/Ry5nZXQoUik6R1tSXTtRPGdlLmxlbmd0aDsrK1EpaWYoU1tnZVtRXV0udD09PVImJighU1tnZVtRXV0uciYmIWt8fFNbZ2VbUV1dLnI9PWsp''@;'; put 'put ''KXJldHVybiBTLkNvdW50KyssZ2VbUV19ZWxzZSBmb3IoO1E8YWU7KytRKWlmKFNbUV0udD09PVImJighU1tRXS5yJiYha3x8U1tRXS5yPT1rKSlyZXR1cm4gUy5Db3VudCsrLFE7cmV0dXJuIFNbYWVdPXt0OlIscjprfSxTLkNvdW50KyssUy5VbmlxdWUrKyxHJiYoVzM/KEcuaGFzKFIpfHxH''@;'; put 'put ''LnNldChSLFtdKSxHLmdldChSKS5wdXNoKGFlKSk6KE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChHLFIpfHwoR1tSXT1bXSksR1tSXS5wdXNoKGFlKSkpLGFlfWZ1bmN0aW9uIGw4KFMsUil7dmFyIGs9e21pbjpTKzEsbWF4OlMrMX0sRz1FYztpZighUilyZXR1cm4gUjt2''@;'; put 'put ''YXIgUT0tMTtyZXR1cm4gUi5hdXRvJiYoay5iZXN0Rml0PTEsUi5iZXN0d2lkdGgmJihRPVIuYmVzdHdpZHRoKSxkZWxldGUgUi5iZXN0d2lkdGgpLG51bGwhPVIud3B4P1E9QzUoUi53cHgpOm51bGwhPVIud2NoP1E9Ui53Y2g6bnVsbCE9Ui53aWR0aCYmKGsuY3VzdG9tV2lkdGg9MSksUT4t''@;'; put 'put ''MT8oay53aWR0aD1TZihRKSxrLmN1c3RvbVdpZHRoPTEpOm51bGwhPVIud2lkdGgmJihrLndpZHRoPVIud2lkdGgpLFIuaGlkZGVuJiYoay5oaWRkZW49ITApLGsuYmVzdEZpdCYmZGVsZXRlIGsuY3VzdG9tV2lkdGgsRWM9RyxudWxsIT1SLmxldmVsJiYoay5vdXRsaW5lTGV2ZWw9ay5sZXZl''@;'; put 'put ''bD1SLmxldmVsKSxudWxsIT1SLnN0eWxlJiYoay5zdHlsZT1SLnN0eWxlKSxrfWZ1bmN0aW9uIG9TKFMsUixrKXt2YXIgRz1TcyhTWyIhcmVmIl0pLFE9MCxhZT1TWyIhbWVyZ2VzIl18fFtdLGdlPUFycmF5LmlzQXJyYXkoUyk7ZTpmb3IodmFyIHBlPTA7cGU8PUcuZS5yOysrcGUpe2Zvcih2''@;'; put 'put ''YXIgeWU9MDt5ZTxhZS5sZW5ndGg7Kyt5ZSlpZihhZVt5ZV0ucy5yPD1wZSYmcGU8PWFlW3llXS5lLnImJmFlW3llXS5zLmM8PWsmJms8PWFlW3llXS5lLmMpY29udGludWUgZTt2YXIgUGU9Z2U/KFNbcGVdfHxbXSlba106U1tYaSh7cjpwZSxjOmt9KV07aWYoUGUpe3ZhciBOZT0xO2lmKFBl''@;'; put 'put ''LnMmJihOZT1iQyhQZS5zKS92Qy5DYWxpYnJpWzEyXXx8MSksUGUudylRPU1hdGgubWF4KFEsUGUudy5sZW5ndGgqTmUpO2Vsc2Ugc3dpdGNoKFBlLnQpe2Nhc2UiYiI6Y2FzZSJlIjpRPU1hdGgubWF4KFEsNSpOZSk7YnJlYWs7Y2FzZSJzIjpRPU1hdGgubWF4KFEsUGUudi5sZW5ndGgqTmUq''@;'; put 'put ''MS4yfDApO2JyZWFrO2Nhc2UibiI6dDUoUGUsUGUudiksUT1NYXRoLm1heChRLFN0cmluZyhQZS53fHxQZS52KS5sZW5ndGgqTmUpO2JyZWFrO2Nhc2UiZCI6UT1NYXRoLm1heChRLDgqTmUpfX19UTwxJiYoUT0xKSxSLmJlc3R3aWR0aD1RfWZ1bmN0aW9uIFkzKFMsUil7aWYoUyl7dmFyIGs9''@;'; put 'put ''Wy43LC43LC43NSwuNzUsLjMsLjNdOyJ4bG1sIj09UiYmKGs9WzEsMSwxLDEsLjUsLjVdKSxudWxsPT1TLmxlZnQmJihTLmxlZnQ9a1swXSksbnVsbD09Uy5yaWdodCYmKFMucmlnaHQ9a1sxXSksbnVsbD09Uy50b3AmJihTLnRvcD1rWzJdKSxudWxsPT1TLmJvdHRvbSYmKFMuYm90dG9tPWtb''@;'; put 'put ''M10pLG51bGw9PVMuaGVhZGVyJiYoUy5oZWFkZXI9a1s0XSksbnVsbD09Uy5mb290ZXImJihTLmZvb3Rlcj1rWzVdKX19ZnVuY3Rpb24gc1MoUyxSKXtmb3IodmFyIGs9UmUoUiksRz0wO0c8Uy5sZW5ndGg7KytHKXt2YXIgUT0hMCxhZT1TW0ddO2lmKGFlJiZrLmxlbmd0aD09UmUoYWUpLmxl''@;'; put 'put ''bmd0aCYmKGsuZm9yRWFjaChmdW5jdGlvbihnZSl7aWYoUSl7aWYobnVsbD09PVJbZ2VdIT0obnVsbD09PWFlW2dlXSkpcmV0dXJuIHZvaWQoUT0hMSk7aWYoIm9iamVjdCI9PXR5cGVvZiBSW2dlXSlpZihbImNvbG9yIiwiZmdDb2xvciIsImJnQ29sb3IiXS5pbmRleE9mKGdlKT4tMSl7aWYo''@;'; put 'put ''cmgoUltnZV0sYWVbZ2VdKSlyZXR1cm4gdm9pZChRPSExKX1lbHNle2lmKCEoWyJsZWZ0IiwicmlnaHQiLCJ0b3AiLCJib3R0b20iXS5pbmRleE9mKGdlKT4tMSkpcmV0dXJuIHZvaWQoUT0hMSk7aWYoaWsoUltnZV0sYWVbZ2VdKSlyZXR1cm4gdm9pZChRPSExKX1pZihSW2dlXSE9YWVbZ2Vd''@;'; put 'put ''KXJldHVybiB2b2lkKFE9ITEpfX0pLFEpKXJldHVybiBHfXJldHVybiBTW1MubGVuZ3RoXT1xdChSKSxTLmxlbmd0aC0xfWZ1bmN0aW9uIHMwKFMsUixrLEcpe3ZhciBRPUcucmV2c3NmW251bGwhPWsuej9rLno6IkdlbmVyYWwiXSxhZT02MCxnZT1TLmxlbmd0aDtpZihudWxsPT1RJiZHLnNz''@;'; put 'put ''Zilmb3IoO2FlPDM5MjsrK2FlKWlmKG51bGw9PUcuc3NmW2FlXSl7QS5sb2FkKGsueixhZSksRy5zc2ZbYWVdPWsueixHLnJldnNzZltrLnpdPVE9YWU7YnJlYWt9dmFyIHBlPTAseWU9MCxQZT0wLE5lPTA7aWYoRy5jZWxsU3R5bGVzKXtpZihrLnMpe2lmKEcuRm9udHMpe2sucy5jb2xvcnx8''@;'; put 'put ''KGsucy5jb2xvcj17dGhlbWU6MSxyZ2I6IjAwMDAwMCJ9KTtmb3IodmFyIFllPShrLnMuYm9sZD8xOjApfChrLnMuaXRhbGljPzI6MCl8KGsucy5zdHJpa2U/NDowKXwoay5zLnNoYWRvdz84OjApO3BlPEcuRm9udHMubGVuZ3RoOysrcGUpe3ZhciBldD1HLkZvbnRzW3BlXTtpZihudWxsPT1l''@;'; put 'put ''dC5mb250aGFzaCYmKGV0LmZvbnRoYXNoPShldC5ib2xkPzE6MCl8KGV0Lml0YWxpYz8yOjApfChldC5zdHJpa2U/NDowKXwoZXQuc2hhZG93Pzg6MCkpLCEoWWUhPWV0LmZvbnRoYXNofHwhIWsucy5jb2xvciE9ISFldC5jb2xvcnx8ay5zLnZhbGlnbiE9ZXQudmFsaWdufHwoay5zLnN6fHxl''@;'; put 'put ''dC5zeikmJihrLnMuc3p8fDEyKSE9KGV0LnN6fHwxMil8fGsucy5uYW1lJiZrLnMubmFtZSE9ZXQubmFtZXx8KGsucy51bmRlcmxpbmV8fDApIT0oZXQudW5kZXJsaW5lfHwwKXx8ay5zLmNvbG9yJiZyaChrLnMuY29sb3IsZXQuY29sb3IpKSlicmVha31wZT09Ry5Gb250cy5sZW5ndGgmJihH''@;'; put 'put ''LkZvbnRzLnB1c2goe3N6Omsucy5zenx8MTIsY29sb3I6ay5zLmNvbG9yfHx7dGhlbWU6MSxyZ2I6IjAwMDAwMCJ9LG5hbWU6ay5zLm5hbWV8fCJDYWxpYnJpIixmYW1pbHk6ay5zLmZhbWlseXx8MixzY2hlbWU6ay5zLnNjaGVtZSxib2xkOmsucy5ib2xkLGl0YWxpYzprLnMuaXRhbGljLHN0''@;'; put 'put ''cmlrZTprLnMuc3RyaWtlLHNoYWRvdzprLnMuc2hhZG93LHZhbGlnbjprLnMudmFsaWduLHVuZGVybGluZTprLnMudW5kZXJsaW5lfSksMT09Ry5Gb250cy5sZW5ndGgmJkE0KEcuRm9udHNbMF0pKX1pZihHLkZpbGxzKXtmb3IoO3llPEcuRmlsbHMubGVuZ3RoOysreWUpe3ZhciB1dD1HLkZp''@;'; put 'put ''bGxzW3llXTtpZighIWsucy5zdG9wcz09ISF1dC5zdG9wcyl7aWYoay5zLnN0b3BzKXtpZihrLnMuYW5nbGUhPXV0LmFuZ2xlKWNvbnRpbnVlO3ZhciBFdD0hMDtpZihrLnMuc3RvcHMuZm9yRWFjaChmdW5jdGlvbihrdCxPdCl7cmgoa3QsdXQuc3RvcHNbT3RdKSYmKEV0PSExKSxrdC52IT11''@;'; put 'put ''dC5zdG9wc1tPdF0udiYmKEV0PSExKX0pLCFFdCljb250aW51ZX1lbHNle2lmKG51bGw9PWsucy5wYXR0ZXJuVHlwZSYmay5zLmZnQ29sb3ImJihrLnMucGF0dGVyblR5cGU9InNvbGlkIiksbnVsbD09ay5zLnBhdHRlcm5UeXBlKWJyZWFrO2lmKGsucy5wYXR0ZXJuVHlwZSE9dXQucGF0dGVy''@;'; put 'put ''blR5cGV8fHJoKGsucy5mZ0NvbG9yLHV0LmZnQ29sb3IpfHxyaChrLnMuYmdDb2xvcix1dC5iZ0NvbG9yKSljb250aW51ZX1icmVha319aWYoeWU9PUcuRmlsbHMubGVuZ3RoKXt2YXIgb3Q9e307ay5zLnN0b3BzPyhudWxsIT1rLnMuYW5nbGUmJihvdC5hbmdsZT1rLnMuYW5nbGUpLG90LnN0''@;'; put 'put ''b3BzPVtdLGsucy5zdG9wcy5mb3JFYWNoKGZ1bmN0aW9uKGt0KXtvdC5zdG9wcy5wdXNoKHF0KGt0KSl9KSk6b3Q9e3BhdHRlcm5UeXBlOmsucy5wYXR0ZXJuVHlwZSxmZ0NvbG9yOmsucy5mZ0NvbG9yLGJnQ29sb3I6ay5zLmJnQ29sb3J9LEcuRmlsbHMucHVzaChvdCl9fWlmKEcuQm9yZGVy''@;'; put 'put ''cyl7Zm9yKDtQZTxHLkJvcmRlcnMubGVuZ3RoOysrUGUpe3ZhciBidD1HLkJvcmRlcnNbUGVdLEJ0PSJ0b3AiO2lmKGsuc1tCdF0pe2lmKCFidFtCdF18fGsuc1tCdF0uc3R5bGUhPWJ0W0J0XS5zdHlsZXx8cmgoay5zW0J0XS5jb2xvcixidFtCdF0uY29sb3IpKWNvbnRpbnVlfWVsc2UgaWYo''@;'; put 'put ''bnVsbCE9YnRbQnRdKWNvbnRpbnVlO2lmKGsuc1tCdD0iYm90dG9tIl0pe2lmKCFidFtCdF18fGsuc1tCdF0uc3R5bGUhPWJ0W0J0XS5zdHlsZXx8cmgoay5zW0J0XS5jb2xvcixidFtCdF0uY29sb3IpKWNvbnRpbnVlfWVsc2UgaWYobnVsbCE9YnRbQnRdKWNvbnRpbnVlO2lmKGsuc1tCdD0i''@;'; put 'put ''bGVmdCJdKXtpZighYnRbQnRdfHxrLnNbQnRdLnN0eWxlIT1idFtCdF0uc3R5bGV8fHJoKGsuc1tCdF0uY29sb3IsYnRbQnRdLmNvbG9yKSljb250aW51ZX1lbHNlIGlmKG51bGwhPWJ0W0J0XSljb250aW51ZTtpZihrLnNbQnQ9InJpZ2h0Il0pe2lmKCFidFtCdF18fGsuc1tCdF0uc3R5bGUh''@;'; put 'put ''PWJ0W0J0XS5zdHlsZXx8cmgoay5zW0J0XS5jb2xvcixidFtCdF0uY29sb3IpKWNvbnRpbnVlfWVsc2UgaWYobnVsbCE9YnRbQnRdKWNvbnRpbnVlO2JyZWFrfVBlPT1HLkJvcmRlcnMubGVuZ3RoJiZHLkJvcmRlcnMucHVzaCh7dG9wOmsucy50b3AmJnF0KGsucy50b3ApfHx2b2lkIDAsYm90''@;'; put 'put ''dG9tOmsucy5ib3R0b20mJnF0KGsucy5ib3R0b20pfHx2b2lkIDAsbGVmdDprLnMubGVmdCYmcXQoay5zLmxlZnQpfHx2b2lkIDAscmlnaHQ6ay5zLnJpZ2h0JiZxdChrLnMucmlnaHQpfHx2b2lkIDB9KX1pZihSJiZrLnMuc3R5bGUmJiJOb3JtYWwiIT09ay5zLnN0eWxlKXtmb3IoTmU9MTtO''@;'; put 'put ''ZTxSLmxlbmd0aCYmUltOZV0ubmFtZSE9ay5zLnN0eWxlOysrTmUpO05lPT1SLmxlbmd0aCYmUi5wdXNoKHtuYW1lOmsucy5zdHlsZSxudW1GbXRJZDpRLGZvbnRJZDpwZSxmaWxsSWQ6eWUsYm9yZGVySWQ6UGV9KX19Zm9yKGFlPTA7YWUhPWdlOysrYWUpaWYoU1thZV0ubnVtRm10SWQ9PVEm''@;'; put 'put ''JlNbYWVdLmZvbnRJZD09cGUmJlNbYWVdLmZpbGxJZD09eWUmJlNbYWVdLmJvcmRlcklkPT1QZSYmU1thZV0ueGZJZD09TmUpe2lmKGsucyYmay5zLmFsaWdubWVudCl7aWYoIVNbYWVdLmFsaWdubWVudCljb250aW51ZTtpZihrLnMuYWxpZ25tZW50Lmhvcml6b250YWwhPVNbYWVdLmFsaWdu''@;'; put 'put ''bWVudC5ob3Jpem9udGFsfHxrLnMuYWxpZ25tZW50LnZlcnRpY2FsIT1TW2FlXS5hbGlnbm1lbnQudmVydGljYWx8fGsucy5hbGlnbm1lbnQud3JhcFRleHQhPVNbYWVdLmFsaWdubWVudC53cmFwVGV4dHx8ay5zLmFsaWdubWVudC5zaHJpbmtUb0ZpdCE9U1thZV0uYWxpZ25tZW50LnNocmlu''@;'; put 'put ''a1RvRml0fHxrLnMuYWxpZ25tZW50LnRleHRSb3RhdGlvbiE9U1thZV0uYWxpZ25tZW50LnRleHRSb3RhdGlvbnx8ay5zLmFsaWdubWVudC5pbmRlbnQhPVNbYWVdLmFsaWdubWVudC5pbmRlbnQpY29udGludWV9ZWxzZSBpZihTW2FlXS5hbGlnbm1lbnQpY29udGludWU7aWYoay5zKXtpZigh''@;'; put 'put ''IWsucy5oaWRkZW49PSghU1thZV0ucHJvdGVjdGlvbnx8IVNbYWVdLnByb3RlY3Rpb24uaGlkZGVuKXx8ISFrLnMuZWRpdGFibGU9PSghU1thZV0ucHJvdGVjdGlvbnx8IVNbYWVdLnByb3RlY3Rpb24uZWRpdGFibGUpKWNvbnRpbnVlfWVsc2UgaWYoU1thZV0ucHJvdGVjdGlvbiljb250aW51''@;'; put 'put ''ZTtyZXR1cm4gYWV9fWVsc2UgZm9yKGFlPTA7YWUhPWdlOysrYWUpaWYoU1thZV0ubnVtRm10SWQ9PT1RKXJldHVybiBhZTtyZXR1cm4gU1tnZV09e251bUZtdElkOlEsZm9udElkOnBlLGZpbGxJZDp5ZSxib3JkZXJJZDpQZSx4ZklkOk5lLGFwcGx5TnVtYmVyRm9ybWF0OjF9LHBlPjAmJihT''@;'; put 'put ''W2dlXS5hcHBseUZvbnQ9MSkseWU+MCYmKFNbZ2VdLmFwcGx5RmlsbD0xKSxQZT4wJiYoU1tnZV0uYXBwbHlCb3JkZXI9MSksIVImJmsucyYmay5zLnN0eWxlJiYiTm9ybWFsIiE9ay5zLnN0eWxlJiYoU1tnZV0uc3R5bGU9ay5zLnN0eWxlKSxrLnMmJmsucy5hbGlnbm1lbnQmJihTW2dlXS5h''@;'; put 'put ''bGlnbm1lbnQ9e30sWyJob3Jpem9udGFsIiwidmVydGljYWwiLCJ3cmFwVGV4dCIsInNocmlua1RvRml0IiwiaW5kZW50IiwidGV4dFJvdGF0aW9uIl0uZm9yRWFjaChmdW5jdGlvbihrdCl7bnVsbCE9ay5zLmFsaWdubWVudFtrdF0mJihTW2dlXS5hbGlnbm1lbnRba3RdPWsucy5hbGlnbm1l''@;'; put 'put ''bnRba3RdKX0pKSxrLnMmJmsucy5oaWRkZW4mJihTW2dlXS5wcm90ZWN0aW9ufHwoU1tnZV0ucHJvdGVjdGlvbj17fSksU1tnZV0ucHJvdGVjdGlvbi5oaWRkZW49ITApLGsucyYmay5zLmVkaXRhYmxlJiYoU1tnZV0ucHJvdGVjdGlvbnx8KFNbZ2VdLnByb3RlY3Rpb249e30pLFNbZ2VdLnBy''@;'; put 'put ''b3RlY3Rpb24uZWRpdGFibGU9ITApLGdlfWZ1bmN0aW9uIEczKFMsUixrLEcsUSxhZSxnZSxwZSl7ImQiPT09Uy50JiYic3RyaW5nIj09dHlwZW9mIFMudiYmKFMudj1IZShTLnYpKTt0cnl7YWUuY2VsbE5GJiYoUy56PUEuX3RhYmxlW1JdKX1jYXRjaChQZSl7aWYoYWUuV1RGKXRocm93IFBl''@;'; put 'put ''fWlmKCghYWV8fCExIT09YWUuY2VsbFRleHQpJiYieiIhPVMudCl0cnl7aWYobnVsbD09QS5fdGFibGVbUl0mJkEubG9hZChzZVtSXXx8IkdlbmVyYWwiLFIpLCJlIj09PVMudClTLnc9Uy53fHxTY1tTLnZdO2Vsc2UgaWYoMD09PVIpaWYoIm4iPT09Uy50KVMudz0oMHxTLnYpPT09Uy52P0Eu''@;'; put 'put ''X2dlbmVyYWxfaW50KFMudik6QS5fZ2VuZXJhbF9udW0oUy52KTtlbHNlIGlmKCJkIj09PVMudCl7dmFyIHllPVFlKFMudik7Uy53PSgwfHllKT09PXllP0EuX2dlbmVyYWxfaW50KHllKTpBLl9nZW5lcmFsX251bSh5ZSl9ZWxzZXtpZih2b2lkIDA9PT1TLnYpcmV0dXJuIiI7Uy53PUEuX2dl''@;'; put 'put ''bmVyYWwoUy52LHM4KX1lbHNlIFMudz1BLmZvcm1hdChSLCJkIj09PVMudD9RZShTLnYpOlMudixzOCl9Y2F0Y2goUGUpe2lmKGFlLldURil0aHJvdyBQZX1pZihhZS5jZWxsU3R5bGVzJiZwZSl7aWYoUy5zPXt9LG51bGwhPWsmJnBlLkZpbGxzKXRyeXtQdChTLnMscGUuRmlsbHNba10pfWNh''@;'; put 'put ''dGNoKFBlKXtpZihhZS5XVEYpdGhyb3cgUGV9aWYobnVsbCE9RyYmcGUuRm9udHMpdHJ5e1B0KFMucyxwZS5Gb250c1tHXSl9Y2F0Y2goUGUpe2lmKGFlLldURil0aHJvdyBQZX1pZihudWxsIT1RJiZwZS5Cb3JkZXJzKXRyeXtQdChTLnMscGUuQm9yZGVyc1tRXSl9Y2F0Y2goUGUpe2lmKGFl''@;'; put 'put ''LldURil0aHJvdyBQZX19fWZ1bmN0aW9uIGxEKFMsUixrKXtpZihTJiZTWyIhcmVmIl0pe3ZhciBHPWFhKFNbIiFyZWYiXSk7aWYoRy5lLmM8Ry5zLmN8fEcuZS5yPEcucy5yKXRocm93IG5ldyBFcnJvcigiQmFkIHJhbmdlICgiK2srIik6ICIrU1siIXJlZiJdKX19dmFyIGM4PS88KD86XHc6''@;'; put 'put ''KT9tZXJnZUNlbGwgcmVmPSJbQS1aMC05Ol0rIlxzKltcL10/Pi9nLGNEPS88KD86XHcrOik/c2hlZXREYXRhW14+XSo+KFtcc1xTXSopPFwvKD86XHcrOik/c2hlZXREYXRhPi8sY1M9LzwoPzpcdzopP2h5cGVybGluayBbXj5dKj4vZ20sdGI9LyIoXHcqOlx3KikiLyxXQj0vPCg/Olx3Oik/''@;'; put 'put ''Y29sXGJbXj5dKltcL10/Pi9nLHVEPS88KD86XHc6KT9jb250cm9sXGJbXj5dKltcL10/Pi9nLFlCPS88KD86XHc6KT9hdXRvRmlsdGVyW14+XSooW1wvXXw+KFtcc1xTXSopPFwvKD86XHc6KT9hdXRvRmlsdGVyKT4vZyxkRD0vPCg/Olx3Oik/cGFnZU1hcmdpbnNbXj5dKlwvPi9nLGhEPS88''@;'; put 'put ''KD86XHc6KT9zaGVldFByXGIoPzpbXj5hLXpdW14+XSopP1wvPi8sZkQ9LzwoPzpcdzopP3NoZWV0UHJvdGVjdGlvblxiKD86W14+YS16XVtePl0qKT9cLz4vLHBEPS88KD86XHc6KT9zaGVldFByW14+XSooPzpbXC9dfD4oW1xzXFNdKik8XC8oPzpcdzopP3NoZWV0UHIpPi8sSWE9LzwoPzpc''@;'; put 'put ''dzopP3NoZWV0Vmlld3NbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/c2hlZXRWaWV3cyk+LyxmZT0vPCg/Olx3KzopP2RhdGFWYWxpZGF0aW9uc1tePl0qKD86W1wvXXw+KFtcc1xTXSo/KTxcLyg/Olx3KzopP2RhdGFWYWxpZGF0aW9ucyk+Lyx1Uz0vPCg/Olx3KzopP2NvbmRp''@;'; put 'put ''dGlvbmFsRm9ybWF0dGluZ1xiW14+XSooPzpbXC9dfD4oW1xzXFNdKj8pPFwvKD86XHcrOik/Y29uZGl0aW9uYWxGb3JtYXR0aW5nKT4vZyxHZT0vPCg/Olx3Oik/c2hlZXRGb3JtYXRQcltePl0qXC8+LyxnRD0vPCg/Olx3KzopP3RhYmxlUGFydHMuKj8+KFtcc1xTXSo/KTxcLyg/Olx3Kzop''@;'; put 'put ''P3RhYmxlUGFydHM+LyxtRD0vPCg/Olx3Oik/cGFnZVNldHVwW14+XSpcLz4vLEdCPS88KD86XHc6KT9yb3dCcmVha3NbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/cm93QnJlYWtzKT4vLG5iPS88KD86XHc6KT9jb2xCcmVha3NbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/''@;'; put 'put ''Olx3Oik/Y29sQnJlYWtzKT4vLE41PS88KD86XHc6KT9oZWFkZXJGb290ZXJbXj5dKig/OltcL118PihbXHNcU10qKTxcLyg/Olx3Oik/aGVhZGVyRm9vdGVyKT4vLGRTPS88KD86XHc6KT9wcmludE9wdGlvbnNcYltePlwvXSpcLz4vO3ZhciBoUz0vPCg/Olx3Oik/dGFibGVQYXJ0XGJbXlwv''@;'; put 'put ''Pl0qW1wvXT8+L2c7ZnVuY3Rpb24gcmIoUyxSLGssRyl7dmFyIFE9cHIoUyk7ay5TaGVldHNbR118fChrLlNoZWV0c1tHXT17fSksUS5jb2RlTmFtZSYmKGsuU2hlZXRzW0ddLkNvZGVOYW1lPVEuY29kZU5hbWUpfXZhciBnUz0vPCg/Olx3Oik/dGFiQ29sb3JbXj5dKltcL10/Pi8sJEI9Lzwo''@;'; put 'put ''PzpcdzopP3BhZ2VTZXRVcFByW14+XSpbXC9dPz4vLEtCPS88KD86XHc6KT9vdXRsaW5lUHJbXj5dKltcL10/Pi8seUQ9e2Rpc3BsYXllZDoiYXNEaXNwbGF5ZWQiLGVuZDoiYXRFbmQiLG5vbmU6Im5vbmUifSxfRD1WZSh5RCksd0Q9e2Rpc3BsYXllZDoiZGlzcGxheWVkIixub25lOiJibGFu''@;'; put 'put ''ayIsZGFzaDoiZGFzaCIsIm4vYSI6Ik5BIn0sQ0Q9VmUod0QpLEYwPS88KD86XHc6KT9icmtbXj5dKlwvPi9nLHZTPVsib2JqZWN0cyIsInNjZW5hcmlvcyIsInNlbGVjdExvY2tlZENlbGxzIiwic2VsZWN0VW5sb2NrZWRDZWxscyJdLHhEPVsiZm9ybWF0Q29sdW1ucyIsImZvcm1hdFJvd3Mi''@;'; put 'put ''LCJmb3JtYXRDZWxscyIsImluc2VydENvbHVtbnMiLCJpbnNlcnRSb3dzIiwiaW5zZXJ0SHlwZXJsaW5rcyIsImRlbGV0ZUNvbHVtbnMiLCJkZWxldGVSb3dzIiwic29ydCIsImF1dG9GaWx0ZXIiLCJwaXZvdFRhYmxlcyJdO2Z1bmN0aW9uIFREKFMpe3ZhciBSPXt9O3JldHVyblsibGVmdCIs''@;'; put 'put ''InJpZ2h0IiwidG9wIiwiYm90dG9tIiwiaGVhZGVyIiwiZm9vdGVyIl0uZm9yRWFjaChmdW5jdGlvbihrKXtTW2tdJiYoUltrXT1wYXJzZUZsb2F0KFNba10pKX0pLFJ9dmFyIHNoPXtDdXN0b206ImN1c3RvbSIsRGF0ZToiZGF0ZSIsVGltZToidGltZSIsTGVuZ3RoOiJ0ZXh0TGVuZ3RoIixM''@;'; put 'put ''aXN0OiJsaXN0IixEZWNpbWFsOiJkZWNpbWFsIixXaG9sZToid2hvbGUiLEFueToibm9uZSJ9LHlTPVZlKHNoKSxpYj17SU46ImJldHdlZW4iLE9UOiJub3RCZXR3ZWVuIixFUToiZXF1YWwiLE5FOiJub3RFcXVhbCIsR1Q6ImdyZWF0ZXJUaGFuIixMVDoibGVzc1RoYW4iLEdFOiJncmVhdGVy''@;'; put 'put ''VGhhbk9yRXF1YWwiLExFOiJsZXNzVGhhbk9yRXF1YWwifSxBRD1WZShpYik7ZnVuY3Rpb24gX1MoUyxSLGspe3ZhciBHPVtdLFE9e30sYWU9IiIsZ2U9ITEscGU9MCx5ZT0wO3JldHVybiBTLnJlcGxhY2UoZW4sZnVuY3Rpb24oUGUsTmUpe3ZhciBZZT1wcihQZSk7c3dpdGNoKFduKFllWzBd''@;'; put 'put ''KSl7Y2FzZSI8ZGF0YVZhbGlkYXRpb25zIjpjYXNlIjxkYXRhVmFsaWRhdGlvbnM+IjpjYXNlIjwvZGF0YVZhbGlkYXRpb25zPiI6YnJlYWs7Y2FzZSI8ZGF0YVZhbGlkYXRpb24iOlE9e3Q6eVNbWWUudHlwZXx8Im5vbmUiXSxyZWY6KGFlPVllLnNxcmVmKT9hZS5pbmRleE9mKCIgIik+LTE/''@;'; put 'put ''YWU6YWEoYWUpOiIifSxZZS5vcGVyYXRvciYmKFEub3A9QURbWWUub3BlcmF0b3JdKSxRLmJsYW5rPSEhWWUuYWxsb3dCbGFuayYmZWkoWWUuYWxsb3dCbGFuayksKCFZZS5zaG93SW5wdXRNZXNzYWdlfHwhZWkoWWUuc2hvd0lucHV0TWVzc2FnZSkpJiYoUS5pbnB1dD0hMSksWWUucHJvbXB0''@;'; put 'put ''VGl0bGUmJigoUS5pbnB1dHx8KFEuaW5wdXQ9e30pKS50aXRsZT1KcihZZS5wcm9tcHRUaXRsZSkpLFllLnByb21wdCYmKChRLmlucHV0fHwoUS5pbnB1dD17fSkpLm1lc3NhZ2U9SnIoWWUucHJvbXB0KSksKCFZZS5zaG93RXJyb3JNZXNzYWdlfHwhZWkoWWUuc2hvd0Vycm9yTWVzc2FnZSkp''@;'; put 'put ''JiYoUS5lcnJvcj0hMSksWWUuZXJyb3JUaXRsZSYmKChRLmVycm9yfHwoUS5lcnJvcj17fSkpLnRpdGxlPUpyKFllLmVycm9yVGl0bGUpKSxZZS5lcnJvciYmKChRLmVycm9yfHwoUS5lcnJvcj17fSkpLm1lc3NhZ2U9SnIoWWUuZXJyb3IpKSxRLmVycm9yP1EuZXJyb3Iuc3R5bGU9WWUuZXJy''@;'; put 'put ''b3JTdHlsZXx8InN0b3AiOlllLmVycm9yU3R5bGUmJihRLmVycm9yPXtzdHlsZTpZZS5lcnJvclN0eWxlfSksUS50JiZHLnB1c2goUSk7YnJlYWs7Y2FzZSI8ZGF0YVZhbGlkYXRpb24vPiI6Y2FzZSI8L2RhdGFWYWxpZGF0aW9uPiI6YnJlYWs7Y2FzZSI8c3FyZWY+Ijp5ZT1OZStQZS5sZW5n''@;'; put 'put ''dGg7YnJlYWs7Y2FzZSI8L3NxcmVmPiI6YWU9Uy5zbGljZSh5ZSxOZSksUS5yZWY9YWU/YWUuaW5kZXhPZigiICIpPi0xP2FlOmFhKGFlKToiIjticmVhaztjYXNlIjxmPiI6Y2FzZSI8Zm9ybXVsYTEiOmNhc2UiPGZvcm11bGExPiI6Y2FzZSI8Zm9ybXVsYTIiOmNhc2UiPGZvcm11bGEyPiI6''@;'; put 'put ''cGU9TmUrUGUubGVuZ3RoO2JyZWFrO2Nhc2UiPC9mb3JtdWxhMT4iOmNhc2UiPC9mb3JtdWxhMj4iOmlmKGspYnJlYWs7Y2FzZSI8L2Y+Ijp2YXIgZXQ9SnIoZ2EoUy5zbGljZShwZSxOZSkpKTtzd2l0Y2goUS50KXtjYXNlIkxpc3QiOmlmKFEubHx8US5mKWJyZWFrO2lmKDM0PT1ldC5jaGFy''@;'; put 'put ''Q29kZUF0KDApKXtRLmw9ZXQuc2xpY2UoMSwtMSkuc3BsaXQoIiwiKTticmVha31jYXNlIkN1c3RvbSI6bnVsbD09US5mJiYoUS5mPWV0KTticmVhaztjYXNlIkRhdGUiOmNhc2UiRGVjaW1hbCI6Y2FzZSJMZW5ndGgiOmNhc2UiVGltZSI6Y2FzZSJXaG9sZSI6US5vcHx8KFEub3A9IklOIiks''@;'; put 'put ''bnVsbD09US52P1Eudj1pc05hTigrZXQpP2V0OitldDooUS5taW49US52LFEubWF4PWlzTmFOKCtldCk/ZXQ6K2V0LGRlbGV0ZSBRLnYpfWJyZWFrO2Nhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2UiPGV4dCI6Z2U9ITA7YnJlYWs7Y2FzZSI8''@;'; put 'put ''L2V4dD4iOmdlPSExO2JyZWFrO2RlZmF1bHQ6aWYoUiYmUi5XVEYmJiFnZSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK1llWzBdKyIgaW4gZGF0YSB2YWxpZGF0aW9uIil9cmV0dXJuIFBlfSksR312YXIgZDg9e0lOOiJjb250YWluc1RleHQiLE9UOiJub3RDb250YWluc1RleHQi''@;'; put 'put ''LFNUOiJiZWdpbnNXaXRoIixORDoiZW5kc1dpdGgifSxvYj1WZShkOCksY2o9e0xNOiJsYXN0TW9udGgiLExTOiJsYXN0N0RheXMiLExXOiJsYXN0V2VlayIsTk06Im5leHRNb250aCIsTlc6Im5leHRXZWVrIixUTToidGhpc01vbnRoIixUVzoidGhpc1dlZWsiLFREOiJ0b2RheSIsVE86InRv''@;'; put 'put ''bW9ycm93IixZUzoieWVzdGVyZGF5In0sREQ9VmUoY2opO2Z1bmN0aW9uIGg4KFMpe3ZhciBSPXt9O3JldHVybiBudWxsIT1TLnZhbCYmKGlzTmFOKCtTLnZhbCk/Ui5mPVMudmFsOlIudj0rUy52YWwpLFIudD1TLnR5cGUsUn1mdW5jdGlvbiB6NChTKXtyZXR1cm4gRnIoImNmdm8iLG51bGws''@;'; put 'put ''e3R5cGU6Uy50LHZhbDpudWxsIT1TLnY/Uy52Ok9yKFMuZil9KX1mdW5jdGlvbiBWNShTLFIsayxHKXt2YXIgUT1oOChTKTtyZXR1cm4gUS5jb2xvcj1zayhSLGssRyksUX1mdW5jdGlvbiBoMihTLFIsayxHLFEpe3ZhciBhZT0oUy5tYXRjaCgvc3FyZWY9IihbXHc6JCBdKikiLyl8fFtdKVsx''@;'; put 'put ''XTtyZXR1cm4gZnVuY3Rpb24gd1MoUyxSLGssRyxRLGFlKXt2YXIgZ2U9ITEscGU9W10seWU9e2Y6W119LFBlPTAsTmU9MCxZZT17Y2Z2b3M6W10sY29sb3JzOltdfSxldD17fSx1dD0tMSxFdD0wLG90PSIiO3JldHVybiBTLnJlcGxhY2UoZW4sZnVuY3Rpb24oYnQsQnQpe3ZhciBrdD1wcihi''@;'; put 'put ''dCk7c3dpdGNoKFduKGt0WzBdKSl7Y2FzZSI8Y29uZGl0aW9uYWxGb3JtYXR0aW5nIjpjYXNlIjwvY29uZGl0aW9uYWxGb3JtYXR0aW5nPiI6YnJlYWs7Y2FzZSI8Y2ZSdWxlIjpjYXNlIjxjZlJ1bGU+IjppZihOZT1CdCxldD1rdCx5ZT17cmVmOlIsZjpbXX0sIWJ0Lm1hdGNoKC9cLz4vKSli''@;'; put 'put ''cmVhaztjYXNlIjwvY2ZSdWxlPiI6c3dpdGNoKGV0LmR4ZklkJiZRJiZRLkRYRiYmKHllLnM9US5EWEZbK2V0LmR4ZklkXSksZXQudHlwZSl7Y2FzZSJkdXBsaWNhdGVWYWx1ZXMiOnllLnQ9ImR1cCI7YnJlYWs7Y2FzZSJ1bmlxdWVWYWx1ZXMiOnllLnQ9InVuaXF1ZSI7YnJlYWs7Y2FzZSJj''@;'; put 'put ''b250YWluc0JsYW5rcyI6eWUudD0iYmxhbmsiLHllLnY9ITA7YnJlYWs7Y2FzZSJub3RDb250YWluc0JsYW5rcyI6eWUudD0iYmxhbmsiLHllLnY9ITE7YnJlYWs7Y2FzZSJjb250YWluc0Vycm9ycyI6eWUudD0iZXJyb3IiLHllLnY9ITA7YnJlYWs7Y2FzZSJub3RDb250YWluc0Vycm9ycyI6''@;'; put 'put ''eWUudD0iZXJyb3IiLHllLnY9ITE7YnJlYWs7Y2FzZSJjZWxsSXMiOnN3aXRjaChldC5vcGVyYXRvcil7Y2FzZSJjb250YWluc1RleHQiOmNhc2Uibm90Q29udGFpbnMiOmNhc2UiYmVnaW5zV2l0aCI6Y2FzZSJlbmRzV2l0aCI6aWYoeWUudD0idGV4dCIseWUub3A9b2JbZXQub3BlcmF0b3Jd''@;'; put 'put ''LG51bGw9PWV0LnRleHQpdGhyb3cgbmV3IEVycm9yKCJDRiBUZXh0IFJ1bGUgIit5ZS5vcCsiIG1pc3NpbmcgdGV4dCIpO3llLnY9ZXQudGV4dCx5ZS5mPXllLmZbMF0sbnVsbD09eWUuZiYmZGVsZXRlIHllLmY7YnJlYWs7ZGVmYXVsdDp5ZS50PSJ2YWwiLHllLm9wPUFEW2V0Lm9wZXJhdG9y''@;'; put 'put ''XSwxPT15ZS5mLmxlbmd0aD9pc05hTigreWUuZlswXSk/eWUuZj15ZS5mWzBdOih5ZS52PSt5ZS5mWzBdLGRlbGV0ZSB5ZS5mKTooeWUubWluPWlzTmFOKCt5ZS5mWzBdKT95ZS5mWzBdOit5ZS5mWzBdLHllLm1heD1pc05hTigreWUuZlsxXSk/eWUuZlsxXToreWUuZlsxXSxkZWxldGUgeWUu''@;'; put 'put ''Zil9YnJlYWs7Y2FzZSJleHByZXNzaW9uIjp5ZS50PSJmb3JtdWxhIix5ZS5mPXllLmZbMF07YnJlYWs7Y2FzZSJjb250YWluc1RleHQiOmNhc2Uibm90Q29udGFpbnNUZXh0IjpjYXNlImJlZ2luc1dpdGgiOmNhc2UiZW5kc1dpdGgiOmlmKHllLnQ9InRleHQiLHllLm9wPW9iW2V0LnR5cGVd''@;'; put 'put ''LG51bGw9PWV0LnRleHQmJnllLmYubGVuZ3RoPDIpdGhyb3cgbmV3IEVycm9yKCJDRiBUZXh0IFJ1bGUgIit5ZS5vcCsiIG1pc3NpbmcgdGV4dCIpO3llLnY9bnVsbCE9ZXQudGV4dD9ldC50ZXh0OnllLmZbMV0ubWF0Y2goLyIuKiIvKT95ZS5mWzFdLnNsaWNlKDEsLTEpOnllLmZbMV0seWUu''@;'; put 'put ''Zj15ZS5mWzBdLG51bGw9PXllLmYmJmRlbGV0ZSB5ZS5mO2JyZWFrO2Nhc2UiY29sb3JTY2FsZSI6aWYoeWUudD0ic2NhbGUiLCF5ZS5jb2xvclNjYWxlKXRocm93IG5ldyBFcnJvcigibWlzc2luZyBjb2xvclNjYWxlIik7eWUuY21pbj1WNSgoWWU9eWUuY29sb3JTY2FsZSkuY2Z2b3NbMF0s''@;'; put 'put ''WWUuY29sb3JzWzBdLFEsRyksMz09WWUuY2Z2b3MubGVuZ3RoJiYoeWUuY21pZD1WNShZZS5jZnZvc1sxXSxZZS5jb2xvcnNbMV0sUSxHKSkseWUuY21heD1WNShZZS5jZnZvc1tZZS5jZnZvcy5sZW5ndGgtMV0sWWUuY29sb3JzW1llLmNmdm9zLmxlbmd0aC0xXSxRLEcpO2JyZWFrO2Nhc2Ui''@;'; put 'put ''ZGF0YUJhciI6aWYoeWUudD0iYmFyIiwheWUuZGF0YUJhcil0aHJvdyBuZXcgRXJyb3IoIm1pc3NpbmcgZGF0YUJhciIpOyhZZT15ZS5kYXRhQmFyKS5jb2xvcnNbMF0mJih5ZS5jb2xvcj1zayhZZS5jb2xvcnNbMF0sUSxHKSkseWUuY21pbj1oOChZZS5jZnZvc1swXSkseWUuY21heD1oOChZ''@;'; put 'put ''ZS5jZnZvc1sxXSk7YnJlYWs7Y2FzZSJpY29uU2V0IjppZih5ZS50PSJpY29uIiwheWUuaWNvblNldCl0aHJvdyBuZXcgRXJyb3IoIm1pc3NpbmcgaWNvblNldCIpO3llLnRocmVzaD0oWWU9eWUuaWNvblNldCkuY2Z2b3MubWFwKGZ1bmN0aW9uKE90KXtyZXR1cm4gaDgoT3QpfSkseWUudj1Z''@;'; put 'put ''ZS50YWcmJlllLnRhZy5pY29uU2V0fHwiM1RyYWZmaWNMaWdodHMxIix5ZS5yZXY9ZWkoWWUudGFnLnJldmVyc2V8fCJmYWxzZSIpLHllLnBjdD1laShZZS50YWcucGVyY2VudHx8InRydWUiKSx5ZS5oaWRkZW49IWVpKFllLnRhZy5zaG93VmFsdWV8fCJ0cnVlIik7YnJlYWs7Y2FzZSJ0aW1l''@;'; put 'put ''UGVyaW9kIjp5ZS50PSJkYXRlIix5ZS5vcD1ERFtldC50aW1lUGVyaW9kXTticmVhaztjYXNlImFib3ZlQXZlcmFnZSI6eWUudD0iYXZnIix5ZS5vcD0iMCI9PWV0LmFib3ZlQXZlcmFnZT8iTCI6IkciLHllLm9wKz1ldC5zdGREZXY/ZXQuc3RkRGV2OmVpKGV0LmVxdWFsQXZlcmFnZXx8IjAi''@;'; put 'put ''KT8iRSI6IlQiO2JyZWFrO2Nhc2UidG9wMTAiOnllLnQ9InJhbmsiLHllLm9wPShlaShldC5ib3R0b218fCIwIik/IkIiOiJUIikrKGVpKGV0LnBlcmNlbnR8fCIwIik/IlAiOiJWIikseWUudj0rZXQucmFuazticmVhaztkZWZhdWx0OnRocm93IlVuc3VwcG9ydGVkIENGIFR5cGUgIitldC50''@;'; put 'put ''eXBlfWlmKGRlbGV0ZSB5ZS5jb2xvclNjYWxlLGRlbGV0ZSB5ZS5kYXRhQmFyLGRlbGV0ZSB5ZS5pY29uU2V0LCF5ZS50KXRocm93IGNvbnNvbGUubG9nKFMuc2xpY2UoTmUsQnQrYnQubGVuZ3RoKSksImJhZCBDRiBydWxlIjtudWxsIT15ZS5mJiYheWUuZi5sZW5ndGgmJmRlbGV0ZSB5ZS5m''@;'; put 'put ''LHllLmRlbHx8cGUucHVzaCh5ZSk7YnJlYWs7Y2FzZSI8Zm9ybXVsYSI6Y2FzZSI8Zm9ybXVsYT4iOlBlPUJ0K2J0Lmxlbmd0aDticmVhaztjYXNlIjwvZm9ybXVsYT4iOnllLmYucHVzaChKcihTLnNsaWNlKFBlLEJ0KSkpO2JyZWFrO2Nhc2UiPGYiOmNhc2UiPGY+IjpQZT1CdCtidC5sZW5n''@;'; put 'put ''dGg7YnJlYWs7Y2FzZSI8L2Y+Ijp5ZS5mLnB1c2goSnIoUy5zbGljZShQZSxCdCkpKTticmVhaztjYXNlIjxzcXJlZj4iOkV0PUJ0K2J0Lmxlbmd0aDticmVhaztjYXNlIjwvc3FyZWY+IjpvdD1TLnNsaWNlKEV0LEJ0KSxSPW90P290LmluZGV4T2YoIiAiKT4tMT9vdDphYShvdCk6IiIseWUu''@;'; put 'put ''cmVmPVIscGUuZm9yRWFjaChmdW5jdGlvbihPdCl7T3QucmVmPVJ9KTticmVhaztjYXNlIjxjb2xvclNjYWxlIjpjYXNlIjxjb2xvclNjYWxlPiI6Y2FzZSI8ZGF0YUJhciI6Y2FzZSI8ZGF0YUJhcj4iOmNhc2UiPGljb25TZXQiOmNhc2UiPGljb25TZXQ+IjpZZT17Y2Z2b3M6W10sY29sb3Jz''@;'; put 'put ''OltdLHRhZzprdH0sUGU9QnQrYnQubGVuZ3RoO2JyZWFrO2Nhc2UiPC9jb2xvclNjYWxlPiI6eWUuY29sb3JTY2FsZT1ZZTticmVhaztjYXNlIjwvZGF0YUJhcj4iOnllLmRhdGFCYXI9WWU7YnJlYWs7Y2FzZSI8L2ljb25TZXQ+Ijp5ZS5pY29uU2V0PVllO2JyZWFrO2Nhc2UiPGNmdm8iOmNh''@;'; put 'put ''c2UiPGNmdm8vPiI6WWUuY2Z2b3MucHVzaChrdCk7YnJlYWs7Y2FzZSI8L2Nmdm8+IjpicmVhaztjYXNlIjxjb2xvciI6WWUuY29sb3JzLnB1c2goa3QpO2JyZWFrO2Nhc2UiPC9jb2xvcj4iOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmJyZWFrO2Nhc2Ui''@;'; put 'put ''PGV4dCI6Z2U9ITA7YnJlYWs7Y2FzZSI8L2V4dD4iOmdlPSExO2JyZWFrO2Nhc2UiPG5lZ2F0aXZlRmlsbENvbG9yIjpjYXNlIjxheGlzQ29sb3IiOmNhc2UiPGJvcmRlckNvbG9yIjpjYXNlIjxuZWdhdGl2ZUJvcmRlckNvbG9yIjpjYXNlIjxjZkljb24iOnllLmRlbD0hMDticmVhaztjYXNl''@;'; put 'put ''IjxkeGY+IjpnZT0hMCx1dD1CdDticmVhaztjYXNlIjwvZHhmPiI6Z2U9ITEseWUucz1ENChTLnNsaWNlKHV0LEJ0K2J0Lmxlbmd0aCksUSxHLGspO2JyZWFrO2RlZmF1bHQ6aWYoayYmay5XVEYpe2lmKGFlKWJyZWFrO2lmKCFnZSl0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK2t0''@;'; put 'put ''WzBdKyIgaW4gY29uZGZtdCIpfX1yZXR1cm4gYnR9KSxwZX0oUyxhZSxSLGssRyxRKX12YXIgQ1M9LzwoPzpcdzopP3NoZWV0Vmlldyg/OltePmEtel1bXj5dKik/XC8/Pi9nO2Z1bmN0aW9uIHA4KFMsUil7dmFyIGs9MCxHPTAsUT0wLGFlPTA7aWYoIVJ8fCFSLkNlbGxYZilyZXR1cm4gbnVs''@;'; put 'put ''bDt2YXIgZ2U9Ui5DZWxsWGZbU107bnVsbCE9Z2UmJihudWxsIT1nZS5udW1GbXRJZCYmKGs9Z2UubnVtRm10SWQpLG51bGwhPWdlLmZpbGxJZCYmKEc9Z2UuZmlsbElkKSxudWxsIT1nZS5mb250SWQmJihRPWdlLmZvbnRJZCksbnVsbCE9Z2UuYm9yZGVySWQmJihhZT1nZS5ib3JkZXJJZCkp''@;'; put 'put ''O3ZhciBwZT17dDoieiJ9O3RyeXtHMyhwZSxrLEcsUSxhZSx7V1RGOjEsY2VsbFN0eWxlczohMH0sMCxSKX1jYXRjaHt9cmV0dXJuIHBlLnN9ZnVuY3Rpb24gQjUoUyxSLGssRyl7aWYodm9pZCAwPT09Uy52JiZ2b2lkIDA9PT1TLmYmJm51bGw9PVMucyYmIVMuY3x8InoiPT09Uy50JiYhUy5j''@;'; put 'put ''JiYhRy5zaGVldFN0dWJzKXJldHVybiIiO3ZhciBRPSIiLGFlPVMudCxnZT1TLnY7aWYoInoiIT09Uy50KXN3aXRjaChTLnQpe2Nhc2UiYiI6UT1TLnY/IjEiOiIwIjticmVhaztjYXNlIm4iOlE9IiIrUy52O2JyZWFrO2Nhc2UiZSI6UT1TY1tTLnZdO2JyZWFrO2Nhc2UiZCI6RyYmRy5jZWxs''@;'; put 'put ''RGF0ZXM/UT1IZShTLnYsLTEpLnRvSVNPU3RyaW5nKCk6KChTPXF0KFMpKS50PSJuIixRPSIiKyhTLnY9UWUoSGUoUy52KSkpKSx0eXBlb2YgUy56PiJ1IiYmKFMuej1BLl90YWJsZVsxNF0pO2JyZWFrO2RlZmF1bHQ6UT1TLnZ9dmFyIHBlPSJ6Ij09Uy50PyIiOk5vKCJ2IixPcihRKSkseWU9''@;'; put 'put ''e3I6Un0sUGU9Rz9zMChHLmNlbGxYZnMsRy5jZWxsU3R5bGVYZnMsUyxHKTowO3N3aXRjaCgwIT09UGUmJih5ZS5zPVBlKSxTLnQpe2Nhc2UibiI6Y2FzZSJ6IjpicmVhaztjYXNlImQiOnllLnQ9ImQiO2JyZWFrO2Nhc2UiYiI6eWUudD0iYiI7YnJlYWs7Y2FzZSJlIjp5ZS50PSJlIjticmVh''@;'; put 'put ''aztkZWZhdWx0OmlmKG51bGw9PVMudil7ZGVsZXRlIFMudDticmVha31pZihHJiZHLmJvb2tTU1Qpe3BlPU5vKCJ2IiwiIitpUyhHLlN0cmluZ3MsUy52LFMuUj9TLnI9S3MoUy5SKTpudWxsLEcucmV2U3RyaW5ncykpLHllLnQ9InMiO2JyZWFrfUFycmF5LmlzQXJyYXkoUy5SKT8ocGU9Ijxp''@;'; put 'put ''cz4iK0tzKFMuUikrIjwvaXM+Iix5ZS50PSJpbmxpbmVTdHIiKTp5ZS50PSJzdHIifWlmKFMudCE9YWUmJihTLnQ9YWUsUy52PWdlKSxTLmYpe3ZhciBOZT1TLkYmJlMuRi5zbGljZSgwLFIubGVuZ3RoKT09Uj97dDoiYXJyYXkiLHJlZjpTLkZ9Om51bGw7cGU9RnIoImYiLE9yKFMuZiksTmUp''@;'; put 'put ''KyhudWxsIT1TLnY/cGU6IiIpfXJldHVybiBTLmwmJmtbIiFsaW5rcyJdLnB1c2goW1IsUy5sXSksUy5jJiZrWyIhY29tbWVudHMiXS5wdXNoKFtSLFMuY10pLEZyKCJjIixwZSx5ZSl9dmFyIGc4PWZ1bmN0aW9uKCl7dmFyIFM9LzwoPzpcdys6KT9jWyBcLz5dLyxSPS88XC8oPzpcdys6KT9y''@;'; put 'put ''b3c+LyxrPS9yPVsiJ10oW14iJ10qKVsiJ10vLEc9LzwoPzpcdys6KT9pcz4oW1xTXHNdKj8pPFwvKD86XHcrOik/aXM+LyxRPS9yZWY9WyInXShbXiInXSopWyInXS8sYWU9RDAoInYiKSxnZT1EMCgiZiIpO3JldHVybiBmdW5jdGlvbih5ZSxQZSxOZSxZZSxldCx1dCxFdCl7Zm9yKHZhciBT''@;'; put 'put ''bixzcix1cixncixMaSxvdD0wLGJ0PSIiLEJ0PVtdLGt0PVtdLE90PTAsS3Q9MCxUbj0wLGlyPSIiLEpuPTAsVm49MCx0cj0wLENpPTAsRmk9MCxpbz0wLHVvPUFycmF5LmlzQXJyYXkoRXQuQ2VsbFhmKSxEcj1bXSxObj1bXSxWcj1BcnJheS5pc0FycmF5KE5lKSx2cj1bXSxIbj17fSxCcj0h''@;'; put 'put ''MSxXaT15ZS5zcGxpdChSKSxiaT0hIVllLnNoZWV0U3R1YnMsd289ISFZZS5jZWxsSFRNTCxzYT0hKCExPT09WWUuY2VsbFRleHQmJiFZZS5jZWxsTkYmJiFZZS5jZWxsU3R5bGVzKSxhbz0wLFJhPVdpLmxlbmd0aDthbyE9UmE7Kythbyl7dmFyIFBvPShidD1XaVthb10udHJpbSgpKS5sZW5n''@;'; put 'put ''dGg7aWYoMCE9PVBvKXt2YXIgaGE9MDtlOmZvcihvdD0wO290PFBvOysrb3Qpc3dpdGNoKGJ0W290XSl7Y2FzZSI+IjppZigiLyIhPWJ0W290LTFdKXsrK290O2JyZWFrIGV9WWUuY2VsbFN0eWxlcyYmbnVsbCE9KHNyPXByKGJ0LnNsaWNlKGhhLG90KSwhMCkpLnImJnBhcnNlSW50KHNyLnIs''@;'; put 'put ''MTApJiYoSm49cGFyc2VJbnQoc3IuciwxMCksSG49e30sQnI9ITEsc3IuaHQmJihCcj0hMCxIbi5ocHQ9cGFyc2VGbG9hdChzci5odCksSG4uaHB4PWloKEhuLmhwdCkpLHNyLmR5RGVzY2VudCYmKEJyPSEwLEhuLmR5RGVzY2VudD1zci5keURlc2NlbnQpLCIxIj09c3IuaGlkZGVuJiYoQnI9''@;'; put 'put ''ITAsSG4uaGlkZGVuPSEwKSxudWxsIT1zci5vdXRsaW5lTGV2ZWwmJihCcj0hMCxIbi5sZXZlbD0rc3Iub3V0bGluZUxldmVsKSxzci5zJiZFdCYmRXQuQ2VsbFhmJiYoQnI9ITAsSG4ucz1wOChzci5zLEV0KSksQnImJih2cltKbi0xXT1IbikpO2JyZWFrO2Nhc2UiPCI6aGE9b3R9aWYoaGE+''@;'; put 'put ''PW90KWJyZWFrO2lmKEpuPW51bGwhPShzcj1wcihidC5zbGljZShoYSxvdCksITApKS5yP3BhcnNlSW50KHNyLnIsMTApOkpuKzEsVm49LTEsIShZZS5zaGVldFJvd3MmJlllLnNoZWV0Um93czxKbikpe1llLm5vZGltfHwoZXQucy5yPkpuLTEmJihldC5zLnI9Sm4tMSksZXQuZS5yPEpuLTEm''@;'; put 'put ''JihldC5lLnI9Sm4tMSkpO3ZhciBKbz17dDoicm93Iixyb3c6W10sUjpKbi0xLGlkeDpQZX07WWUuY2VsbFN0eWxlcyYmKEhuPXt9LEJyPSExLHNyLmh0JiYoQnI9ITAsSG4uaHB0PXBhcnNlRmxvYXQoc3IuaHQpLEhuLmhweD1paChIbi5ocHQpKSxzci5keURlc2NlbnQmJihCcj0hMCxIbi5k''@;'; put 'put ''eURlc2NlbnQ9c3IuZHlEZXNjZW50KSwiMSI9PXNyLmhpZGRlbiYmKEJyPSEwLEhuLmhpZGRlbj0hMCksbnVsbCE9c3Iub3V0bGluZUxldmVsJiYoQnI9ITAsSG4ubGV2ZWw9K3NyLm91dGxpbmVMZXZlbCksc3IucyYmKEJyPSEwLEhuLnM9cDgoc3IucyxFdCkpLEJyJiYoWWUuY2FsbGJhY2s/''@;'; put 'put ''Sm8ucHJvcHM9SG46dnJbSm4tMV09SG4pKSxCdD1idC5zbGljZShvdCkuc3BsaXQoUyk7Zm9yKHZhciBqaT0wO2ppIT1CdC5sZW5ndGgmJiI8Ij09QnRbamldLnRyaW0oKS5jaGFyQXQoMCk7KytqaSk7Zm9yKEJ0PUJ0LnNsaWNlKGppKSxvdD0wO290IT1CdC5sZW5ndGg7KytvdClpZigwIT09''@;'; put 'put ''KGJ0PUJ0W290XS50cmltKCkpLmxlbmd0aCl7aWYoa3Q9YnQubWF0Y2goayksT3Q9b3QsS3Q9MCxUbj0wLGJ0PSI8YyAiKygiPCI9PWJ0LnNsaWNlKDAsMSk/Ij4iOiIiKStidCxudWxsIT1rdCYmMj09PWt0Lmxlbmd0aCl7Zm9yKE90PTAsaXI9a3RbMV0sS3Q9MDtLdCE9aXIubGVuZ3RoJiYh''@;'; put 'put ''KChUbj1pci5jaGFyQ29kZUF0KEt0KS02NCk8MXx8VG4+MjYpOysrS3QpT3Q9MjYqT3QrVG47Vm49LS1PdH1lbHNlKytWbjtmb3IoS3Q9MDtLdCE9YnQubGVuZ3RoJiY2MiE9PWJ0LmNoYXJDb2RlQXQoS3QpOysrS3QpO2lmKCsrS3QsKHNyPXByKGJ0LnNsaWNlKDAsS3QpLCEwKSkucnx8KHNy''@;'; put 'put ''LnI9WGkoe3I6Sm4tMSxjOlZufSkpLFNuPXt0OiIifSxudWxsIT0oa3Q9KGlyPWJ0LnNsaWNlKEt0KSkubWF0Y2goYWUpKSYmIiIhPT1rdFsxXSYmKFNuLnY9SnIoa3RbMV0pKSxZZS5jZWxsRm9ybXVsYSl7aWYobnVsbCE9KGt0PWlyLm1hdGNoKGdlKSkmJiIiIT09a3RbMV0pe2lmKFNuLmY9''@;'; put 'put ''SnIoZ2Eoa3RbMV0pKS5yZXBsYWNlKC9cclxuL2csIlxuIiksWWUueGxmbnx8KFNuLmY9bUIoU24uZikpLGt0WzBdLmluZGV4T2YoJ3Q9ImFycmF5IicpPi0xKVNuLkY9KGlyLm1hdGNoKFEpfHxbXSlbMV0sU24uRi5pbmRleE9mKCI6Iik+LTEmJkRyLnB1c2goW2FhKFNuLkYpLFNuLkZdKTtl''@;'; put 'put ''bHNlIGlmKGt0WzBdLmluZGV4T2YoJ3Q9InNoYXJlZCInKT4tMSl7Z3I9cHIoa3RbMF0pO3ZhciBJcz1KcihnYShrdFsxXSkpO1llLnhsZm58fChJcz1tQihJcykpLE5uW3BhcnNlSW50KGdyLnNpLDEwKV09W2dyLElzLHNyLnJdfX1lbHNlKGt0PWlyLm1hdGNoKC88ZltePl0qXC8+LykpJiZO''@;'; put 'put ''blsoZ3I9cHIoa3RbMF0pKS5zaV0mJihTbi5mPWVuZShObltnci5zaV1bMV0sTm5bZ3Iuc2ldWzJdLHNyLnIpKTt2YXIgRm49TmEoc3Iucik7Zm9yKEt0PTA7S3Q8RHIubGVuZ3RoOysrS3QpRm4ucj49RHJbS3RdWzBdLnMuciYmRm4ucjw9RHJbS3RdWzBdLmUuciYmRm4uYz49RHJbS3RdWzBd''@;'; put 'put ''LnMuYyYmRm4uYzw9RHJbS3RdWzBdLmUuYyYmKFNuLkY9RHJbS3RdWzFdKX1pZihudWxsPT1zci50JiZ2b2lkIDA9PT1Tbi52KWlmKFNuLmZ8fFNuLkYpU24udj0wLFNuLnQ9Im4iO2Vsc2V7aWYoIWJpKWNvbnRpbnVlO1NuLnQ9InoifWVsc2UgU24udD1zci50fHwibiI7c3dpdGNoKGV0LnMu''@;'; put 'put ''Yz5WbiYmKGV0LnMuYz1WbiksZXQuZS5jPFZuJiYoZXQuZS5jPVZuKSxTbi50KXtjYXNlIm4iOmlmKCIiPT1Tbi52fHxudWxsPT1Tbi52KXtpZighYmkpY29udGludWU7U24udD0ieiJ9ZWxzZSBTbi52PXBhcnNlRmxvYXQoU24udik7YnJlYWs7Y2FzZSJzIjppZih0eXBlb2YgU24udj4idSIp''@;'; put 'put ''e2lmKCFiaSljb250aW51ZTtTbi50PSJ6In1lbHNlIHVyPWE4W3BhcnNlSW50KFNuLnYsMTApXSxTbi52PXVyLnQsU24ucj11ci5yLHVyLlImJihTbi5SPXVyLlIpLHdvJiYoU24uaD11ci5oKTticmVhaztjYXNlInN0ciI6U24udD0icyIsU24udj1udWxsIT1Tbi52P2dhKFNuLnYpOiIiLHdv''@;'; put 'put ''JiYoU24uaD1jbyhTbi52KSk7YnJlYWs7Y2FzZSJpbmxpbmVTdHIiOmt0PWlyLm1hdGNoKEcpLFNuLnQ9InMiLG51bGwhPWt0JiYodXI9Y0Moa3RbMV0pKT8oU24udj11ci50LHVyLlImJihTbi5SPXVyLlIpLHdvJiYoU24uaD11ci5oKSk6U24udj0iIjticmVhaztjYXNlImIiOlNuLnY9ZWko''@;'; put 'put ''U24udik7YnJlYWs7Y2FzZSJkIjpZZS5jZWxsRGF0ZXM/U24udj1IZShTbi52LDEpOihTbi52PVFlKEhlKFNuLnYsMSkpLFNuLnQ9Im4iKTticmVhaztjYXNlImUiOiExIT09WWUuY2VsbFRleHQmJihTbi53PVNuLnYpLFNuLnY9RDNbU24udl19aWYoc2Epe3RyPUNpPUZpPWlvPTAsTGk9bnVs''@;'; put 'put ''bCx1byYmdm9pZCAwIT09c3IucyYmbnVsbCE9KExpPUV0LkNlbGxYZltzci5zXSkmJihudWxsIT1MaS5udW1GbXRJZCYmKHRyPUxpLm51bUZtdElkKSxZZS5jZWxsU3R5bGVzJiYobnVsbCE9TGkuZmlsbElkJiYoQ2k9TGkuZmlsbElkKSxudWxsIT1MaS5mb250SWQmJihGaT1MaS5mb250SWQp''@;'; put 'put ''LG51bGwhPUxpLmJvcmRlcklkJiYoaW89TGkuYm9yZGVySWQpKSk7dHJ5e0czKFNuLHRyLENpLEZpLGlvLFllLDAsRXQpfWNhdGNoe31ZZS5jZWxsU3R5bGVzJiZTbi5zJiYoTGkmJkxpLmFsaWdubWVudCYmKFNuLnMuYWxpZ25tZW50PXF0KExpLmFsaWdubWVudCkpLExpJiZMaS5wcm90ZWN0''@;'; put 'put ''aW9uJiYobnVsbCE9TGkucHJvdGVjdGlvbi5oaWRkZW4mJihTbi5zLmhpZGRlbj1MaS5wcm90ZWN0aW9uLmhpZGRlbiksbnVsbCE9TGkucHJvdGVjdGlvbi5lZGl0YWJsZSYmKFNuLnMuZWRpdGFibGU9TGkucHJvdGVjdGlvbi5lZGl0YWJsZSkpLExpJiZMaS5zdHlsZSYmKFNuLnMuc3R5bGU9''@;'; put 'put ''TGkuc3R5bGUpKSxZZS5jZWxsRGF0ZXMmJnVvJiYibiI9PVNuLnQmJkEuaXNfZGF0ZShBLl90YWJsZVt0cl0pJiYoU24udD0iZCIsU24udj1kbihTbi52KSl9dmFyIFphO1llLm5vZGltJiYoWmE9TmEoc3IuciksZXQucy5yPlphLnImJihldC5zLnI9WmEuciksZXQuZS5yPFphLnImJihldC5l''@;'; put 'put ''LnI9WmEucikpLFllLmNhbGxiYWNrPyhaYT1OYShzci5yKSxKby5yb3dbWmEuY109U24pOlZyPyhOZVsoWmE9TmEoc3IucikpLnJdfHwoTmVbWmEucl09W10pLE5lW1phLnJdW1phLmNdPVNuKTpOZVtzci5yXT1Tbn1ZZS5jYWxsYmFjayYmWWUuY2FsbGJhY2soSm8pfX19YmkmJiFZZS5jYWxs''@;'; put 'put ''YmFjayYmcDgoMCxFdCksdnIubGVuZ3RoPjAmJihOZVsiIXJvd3MiXT12cil9fSgpLG04PUZyKCJ3b3Jrc2hlZXQiLG51bGwse3htbG5zOkdpLm1haW5bMF0sInhtbG5zOnIiOkdpLnIsInhtbG5zOngxNGFjIjoiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2Uvc3ByZWFkc2hl''@;'; put 'put ''ZXRtbC8yMDA5LzkvYWMiLCJ4bWxuczptYyI6Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9tYXJrdXAtY29tcGF0aWJpbGl0eS8yMDA2IiwibWM6SWdub3JhYmxlIjoieDE0YWMifSk7ZnVuY3Rpb24gSUQoUyxSLGssRyl7dmFyIGdlLFE9W0lpLG04XSxwZT0iIix5ZT1rLlNo''@;'; put 'put ''ZWV0c1trLlNoZWV0TmFtZXNbU11dO251bGw9PXllJiYoeWU9e30pO3ZhciBQZT15ZVsiIXJlZiJdfHwiQTEiLE5lPWFhKFBlKTtpZihOZS5lLmM+MTYzODN8fE5lLmUucj4xMDQ4NTc1KXtpZihSLldURil0aHJvdyBuZXcgRXJyb3IoIlJhbmdlICIrUGUrIiBleGNlZWRzIGZvcm1hdCBsaW1p''@;'; put 'put ''dCBBMTpYRkQxMDQ4NTc2Iik7TmUuZS5jPU1hdGgubWluKE5lLmUuYywxNjM4MyksTmUuZS5yPU1hdGgubWluKE5lLmUuYywxMDQ4NTc1KSxQZT1vbyhOZSl9R3x8KEc9e30pLHllWyIhY29tbWVudHMiXT1bXTt2YXIgWWU9W10sZXQ9eWVbIiFwcmludCJdO2lmKGZ1bmN0aW9uIGJEKFMsUixr''@;'; put 'put ''LEcsUSl7dmFyIGFlPSExLGdlPXt9LHBlPW51bGw7aWYoInhsc3giIT09Ry5ib29rVHlwZSYmUi52YmFyYXcpe3ZhciB5ZT1SLlNoZWV0TmFtZXNba107dHJ5e1IuV29ya2Jvb2smJih5ZT1SLldvcmtib29rLlNoZWV0c1trXS5Db2RlTmFtZXx8eWUpfWNhdGNoe31hZT0hMCxnZS5jb2RlTmFt''@;'; put 'put ''ZT1Pcih5ZSl9UyYmU1siIWNvbmRmbXQiXSYmKGdlLmVuYWJsZUZvcm1hdENvbmRpdGlvbnNDYWxjdWxhdGlvbj0iMSIpLFMmJlNbIiF0YWJjb2xvciJdJiYocGU9KHBlfHwiIikrJzx0YWJDb2xvciByZ2I9IkZGJytQMChTWyIhdGFiY29sb3IiXS5yZ2IpKyciLz4nKTt2YXIgUGU9ITEsTmU9''@;'; put 'put ''e307aWYoKCgoU3x8e30pWyIhcHJpbnQiXXx8e30pLnByb3BzfHx7fSkuZml0JiYoUGU9ITAsTmUuZml0VG9QYWdlPTEpLFBlJiYocGU9KHBlfHwiIikrRnIoInBhZ2VTZXRVcFByIixudWxsLE5lKSksUyYmU1siIW91dGxpbmUiXSl7dmFyIFllPXtzdW1tYXJ5QmVsb3c6MSxzdW1tYXJ5Umln''@;'; put 'put ''aHQ6MX07U1siIW91dGxpbmUiXS5hYm92ZSYmKFllLnN1bW1hcnlCZWxvdz0wKSxTWyIhb3V0bGluZSJdLmxlZnQmJihZZS5zdW1tYXJ5UmlnaHQ9MCkscGU9KHBlfHwiIikrRnIoIm91dGxpbmVQciIsbnVsbCxZZSl9IWFlJiYhcGV8fChRW1EubGVuZ3RoXT1Gcigic2hlZXRQciIscGUsZ2Up''@;'; put 'put ''KX0oeWUsayxTLFIsUSksUVtRLmxlbmd0aF09RnIoImRpbWVuc2lvbiIsbnVsbCx7cmVmOlBlfSksUVtRLmxlbmd0aF09ZnVuY3Rpb24gZjgoUyxSLGssRyl7dmFyIFE9e3dvcmtib29rVmlld0lkOiIwIn07aWYoKCgoR3x8e30pLldvcmtib29rfHx7fSkuVmlld3N8fFtdKS5sZW5ndGgpe3Zh''@;'; put 'put ''ciBhZT1HLldvcmtib29rLlZpZXdzLGdlPWFlW2tdfHxhZVswXTtRLnJpZ2h0VG9MZWZ0PWdlLlJUTD8iMSI6IjAiLGdlLnpvb20mJihRLnpvb21TY2FsZT1nZS56b29tKSxudWxsIT1nZS5ncmlkJiYoUS5zaG93R3JpZExpbmVzPWdlLmdyaWQpLGdlLnZpZXcmJihRLnZpZXc9Z2Uudmlldyl9''@;'; put 'put ''bnVsbCE9U1siIWdyaWRsaW5lcyJdJiYoUS5zaG93R3JpZExpbmVzPSEhU1siIWdyaWRsaW5lcyJdKTt2YXIgcGU9IiIseWU9e3I6MCxjOjB9O2lmKFNbIiFzZWwiXSl7aWYoISh5ZT1TWyIhc2VsIl0uY2VsbCkpe2lmKCFTWyIhc2VsIl0ucmFuZ2UpdGhyb3cgbmV3IEVycm9yKCJNdXN0IHNw''@;'; put 'put ''ZWNpZnkgYSBzZWxlY3Rpb24gY2VsbCBvciByYW5nZSIpO3llPVNzKFNbIiFzZWwiXS5yYW5nZS5yZXBsYWNlKC9ccy4qJC8sIiIpKS5zfSJzdHJpbmciPT10eXBlb2YgeWUmJih5ZT1OYSh5ZSkpfXZhciBOZT1TWyIhZnJlZXplIl0/InN0cmluZyI9PXR5cGVvZiBTWyIhZnJlZXplIl0/TmEo''@;'; put 'put ''U1siIWZyZWV6ZSJdKTpTWyIhZnJlZXplIl06e2M6MCxyOjB9O2lmKFNbIiFmcmVlemUiXSl7dmFyIFllPVhpKE5lKSxldD17c3RhdGU6ImZyb3plbiIseFNwbGl0Ok5lLmMseVNwbGl0Ok5lLnIsdG9wTGVmdENlbGw6WWV9O1NbIiFzZWwiXSYmKGV0LmFjdGl2ZVBhbmU9KHllLnI+PU5lLnIm''@;'; put 'put ''Jk5lLnI+MD8iYm90dG9tIjoidG9wIikrKHllLmM+PU5lLmMmJk5lLmM+MD8iUmlnaHQiOiJMZWZ0IikpLHBlPUZyKCJwYW5lIixudWxsLGV0KX1pZihTWyIhc2VsIl0pe3ZhciB1dD17YWN0aXZlQ2VsbDoic3RyaW5nIj09dHlwZW9mIHllP3llOlhpKHllKX07dXQuc3FyZWY9U1siIXNlbCJd''@;'; put 'put ''LnJhbmdlP1NbIiFzZWwiXS5yYW5nZTp1dC5hY3RpdmVDZWxsKyI6Iit1dC5hY3RpdmVDZWxsLHBlKz1Gcigic2VsZWN0aW9uIixudWxsLHV0KSxTWyIhZnJlZXplIl0mJihOZS5jPjAmJih1dC5wYW5lPSJ0b3BSaWdodCIscGUrPUZyKCJzZWxlY3Rpb24iLG51bGwsdXQpKSxOZS5yPjAmJih1''@;'; put 'put ''dC5wYW5lPSJib3R0b21MZWZ0IixwZSs9RnIoInNlbGVjdGlvbiIsbnVsbCx1dCkpLE5lLmM+MCYmTmUucj4wJiYodXQucGFuZT0iYm90dG9tUmlnaHQiLHBlKz1Gcigic2VsZWN0aW9uIixudWxsLHV0KSkpfXJldHVybiBGcigic2hlZXRWaWV3cyIsRnIoInNoZWV0VmlldyIscGV8fG51bGws''@;'; put 'put ''USkse30pfSh5ZSwwLFMsayksUi5zaGVldEZvcm1hdCl7dmFyIHV0PXtkZWZhdWx0Um93SGVpZ2h0OlIuc2hlZXRGb3JtYXQuZGVmYXVsdFJvd0hlaWdodHx8IjE2IixiYXNlQ29sV2lkdGg6Ui5zaGVldEZvcm1hdC5iYXNlQ29sV2lkdGh8fCIxMCJ9O251bGwhPVIuc2hlZXRGb3JtYXQub3V0''@;'; put 'put ''bGluZUxldmVsUm93JiYodXQub3V0bGluZUxldmVsUm93PVIuc2hlZXRGb3JtYXQub3V0bGluZUxldmVsUm93KSxRW1EubGVuZ3RoXT1Gcigic2hlZXRGb3JtYXRQciIsbnVsbCx1dCl9ZWxzZSBpZih5ZVsiIXNoZWV0Rm9ybWF0Il0pe3ZhciBFdD17fSxvdD0hMTt5ZVsiIXNoZWV0Rm9ybWF0''@;'; put 'put ''Il0ucm93JiYoeWVbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHQ/KG90PSEwLEV0LmRlZmF1bHRSb3dIZWlnaHQ9eWVbIiFzaGVldEZvcm1hdCJdLnJvdy5ocHQsRXQuY3VzdG9tSGVpZ2h0PTEpOnllWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB4PyhvdD0hMCxFdC5kZWZhdWx0Um93SGVpZ2h0PU4z''@;'; put 'put ''KHllWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB4KSxFdC5jdXN0b21IZWlnaHQ9MSk6KDA9PT15ZVsiIXNoZWV0Rm9ybWF0Il0ucm93LmhwdHx8MD09PXllWyIhc2hlZXRGb3JtYXQiXS5yb3cuaHB4fHx5ZVsiIXNoZWV0Rm9ybWF0Il0ucm93LmhpZGRlbikmJihvdD0hMCxFdC5kZWZhdWx0Um93''@;'; put 'put ''SGVpZ2h0PUV0LmRlZmF1bHRSb3dIZWlnaHR8fDE2LEV0LmN1c3RvbUhlaWdodD0xLEV0Lnplcm9IZWlnaHQ9MSkseWVbIiFzaGVldEZvcm1hdCJdLmR5RGVzY2VudCYmKEV0WyJ4MTRhYzpkeURlc2NlbnQiXT15ZVsiIXNoZWV0Rm9ybWF0Il0uZHlEZXNjZW50KSkseWVbIiFzaGVldEZvcm1h''@;'; put 'put ''dCJdLmNvbCYmKHllWyIhc2hlZXRGb3JtYXQiXS5jb2wud2NofHxlMSh5ZVsiIXNoZWV0Rm9ybWF0Il0uY29sKSxFdC5kZWZhdWx0Q29sV2lkdGg9eWVbIiFzaGVldEZvcm1hdCJdLmNvbC53Y2grNS9FY3x8MCxvdD0hMCksbnVsbD09RXQuZGVmYXVsdFJvd0hlaWdodCYmKEV0LmRlZmF1bHRS''@;'; put 'put ''b3dIZWlnaHQ9MTYpLG51bGw9PUV0LmRlZmF1bHRDb2xXaWR0aCYmKEV0LmRlZmF1bHRDb2xXaWR0aD0xMCksRXQub3V0bGluZUxldmVsUm93PUV0Lm91dGxpbmVMZXZlbFJvd3x8NyxvdCYmKFFbUS5sZW5ndGhdPUZyKCJzaGVldEZvcm1hdFByIixudWxsLEV0KSl9bnVsbCE9eWVbIiFjb2xz''@;'; put 'put ''Il0mJnllWyIhY29scyJdLmxlbmd0aD4wJiYoUVtRLmxlbmd0aF09ZnVuY3Rpb24gaWooUyxSLGspe2Zvcih2YXIgUSxHPVsiPGNvbHM+Il0sYWU9MDthZSE9Ui5sZW5ndGg7KythZSlpZihRPVJbYWVdKXtpZihRLmF1dG8mJm9TKFMsUSxhZSksUS5zfHxRLnope3ZhciBnZT17dDoieiJ9O251''@;'; put 'put ''bGwhPVEucyYmKGdlLnM9US5zKSxudWxsIT1RLnomJihnZS56PVEueiksUS5zdHlsZT1zMChrLmNlbGxYZnMsay5jZWxsU3R5bGVYZnMsZ2Usayl9R1tHLmxlbmd0aF09RnIoImNvbCIsbnVsbCxsOChhZSxRKSl9cmV0dXJuIEdbRy5sZW5ndGhdPSI8L2NvbHM+IixHLmpvaW4oIiIpfSh5ZSx5''@;'; put 'put ''ZVsiIWNvbHMiXSxSKSksUVtnZT1RLmxlbmd0aF09IjxzaGVldERhdGEvPiIseWVbIiFsaW5rcyJdPVtdLG51bGwhPXllWyIhcmVmIl0mJihwZT1mdW5jdGlvbiBTUyhTLFIsayxHKXt2YXIgeWUsYnQsUT1bXSxhZT1bXSxnZT1hYShTWyIhcmVmIl0pLHBlPSIiLFBlPSIiLE5lPVtdLFllPTAs''@;'; put 'put ''ZXQ9MCx1dD1TWyIhcm93cyJdLEV0PUFycmF5LmlzQXJyYXkoUyksb3Q9e3I6UGV9LEJ0PS0xO2ZvcihldD1nZS5zLmM7ZXQ8PWdlLmUuYzsrK2V0KU5lW2V0XT1UbyhldCk7Zm9yKFllPWdlLnMucjtZZTw9Z2UuZS5yOysrWWUpe2ZvcihhZT1bXSxQZT16aShZZSksZXQ9Z2Uucy5jO2V0PD1n''@;'; put 'put ''ZS5lLmM7KytldCl7eWU9TmVbZXRdK1BlO3ZhciBrdD1FdD8oU1tZZV18fFtdKVtldF06U1t5ZV07dm9pZCAwIT09a3QmJm51bGwhPShwZT1CNShrdCx5ZSxTLFIpKSYmYWUucHVzaChwZSl9KGFlLmxlbmd0aD4wfHx1dCYmdXRbWWVdKSYmKG90PXtyOlBlfSx1dCYmdXRbWWVdJiYoKGJ0PXV0''@;'; put 'put ''W1llXSkuaGlkZGVuJiYob3QuaGlkZGVuPTEpLEJ0PS0xLGJ0LmhweD9CdD1OMyhidC5ocHgpOmJ0LmhwdCYmKEJ0PWJ0LmhwdCksQnQ+LTEmJihvdC5odD1CdCxvdC5jdXN0b21IZWlnaHQ9MSksYnQubGV2ZWwmJihvdC5vdXRsaW5lTGV2ZWw9YnQubGV2ZWwpLGJ0LmR5RGVzY2VudCYmKG90''@;'; put 'put ''WyJ4MTRhYzpkeURlc2NlbnQiXT1idC5keURlc2NlbnQpLGJ0LnMmJihvdC5zPXMwKFIuY2VsbFhmcyxSLmNlbGxTdHlsZVhmcyx7dDoieiIsczpidC5zfSxSKSxvdC5jdXN0b21Gb3JtYXQ9MSkpLFFbUS5sZW5ndGhdPUZyKCJyb3ciLGFlLmpvaW4oIiIpLG90KSl9aWYodXQpZm9yKDtZZTx1''@;'; put 'put ''dC5sZW5ndGg7KytZZSl1dCYmdXRbWWVdJiYob3Q9e3I6WWUrMX0sKGJ0PXV0W1llXSkuaGlkZGVuJiYob3QuaGlkZGVuPTEpLEJ0PS0xLGJ0LmhweD9CdD1OMyhidC5ocHgpOmJ0LmhwdCYmKEJ0PWJ0LmhwdCksQnQ+LTEmJihvdC5odD1CdCxvdC5jdXN0b21IZWlnaHQ9MSksYnQubGV2ZWwm''@;'; put 'put ''JihvdC5vdXRsaW5lTGV2ZWw9YnQubGV2ZWwpLFFbUS5sZW5ndGhdPUZyKCJyb3ciLCIiLG90KSk7cmV0dXJuIFEuam9pbigiIil9KHllLFIpLHBlLmxlbmd0aD4wJiYoUVtRLmxlbmd0aF09cGUpKSxRLmxlbmd0aD5nZSsxJiYoUVtRLmxlbmd0aF09Ijwvc2hlZXREYXRhPiIsUVtnZV09UVtn''@;'; put 'put ''ZV0ucmVwbGFjZSgiLz4iLCI+IikpLHllWyIhcHJvdGVjdCJdJiYoUVtRLmxlbmd0aF09ZnVuY3Rpb24gdGooUyl7dmFyIFI9e3NoZWV0OjF9O3JldHVybiB2Uy5mb3JFYWNoKGZ1bmN0aW9uKGspe251bGwhPVNba10mJlNba10mJihSW2tdPSIxIil9KSx4RC5mb3JFYWNoKGZ1bmN0aW9uKGsp''@;'; put 'put ''e251bGwhPVNba10mJiFTW2tdJiYoUltrXT0iMCIpfSksUy5wYXNzd29yZD9SLnBhc3N3b3JkPUl2KFMucGFzc3dvcmQpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpOlMuZW5jcnlwdGlvbiYmKFIuYWxnb3JpdGhtTmFtZT1TLmVuY3J5cHRpb24uYWxnbyxSLmhhc2hWYWx1ZT1TLmVuY3J5''@;'; put 'put ''cHRpb24uaGFzaCxSLnNhbHRWYWx1ZT1TLmVuY3J5cHRpb24uc2FsdCxSLnNwaW5Db3VudD1TLmVuY3J5cHRpb24uc3BpbiksRnIoInNoZWV0UHJvdGVjdGlvbiIsbnVsbCxSKX0oeWVbIiFwcm90ZWN0Il0pKSxudWxsIT15ZVsiIWF1dG9maWx0ZXIiXSYmKFFbUS5sZW5ndGhdPWZ1bmN0aW9u''@;'; put 'put ''IGFqKFMsUixrLEcpe3ZhciBRPSJzdHJpbmciPT10eXBlb2YgUy5yZWY/Uy5yZWY6b28oUy5yZWYpO2suV29ya2Jvb2t8fChrLldvcmtib29rPXtTaGVldHM6W119KSxrLldvcmtib29rLk5hbWVzfHwoay5Xb3JrYm9vay5OYW1lcz1bXSk7dmFyIGFlPWsuV29ya2Jvb2suTmFtZXMsZ2U9U3Mo''@;'; put 'put ''USk7Z2Uucy5yPT1nZS5lLnImJihnZS5lLnI9U3MoUlsiIXJlZiJdKS5lLnIsUT1vbyhnZSkpO2Zvcih2YXIgcGU9MDtwZTxhZS5sZW5ndGg7KytwZSl7dmFyIHllPWFlW3BlXTtpZigiX3hsbm0uX0ZpbHRlckRhdGFiYXNlIj09eWUuTmFtZSYmeWUuU2hlZXQ9PUcpe3llLlJlZj0iJyIray5T''@;'; put 'put ''aGVldE5hbWVzW0ddKyInISIrUTticmVha319cmV0dXJuIHBlPT1hZS5sZW5ndGgmJmFlLnB1c2goe05hbWU6Il94bG5tLl9GaWx0ZXJEYXRhYmFzZSIsU2hlZXQ6RyxSZWY6IiciK2suU2hlZXROYW1lc1tHXSsiJyEiK1F9KSxGcigiYXV0b0ZpbHRlciIsbnVsbCx7cmVmOlF9KX0oeWVbIiFh''@;'; put 'put ''dXRvZmlsdGVyIl0seWUsayxTKSksbnVsbCE9eWVbIiFtZXJnZXMiXSYmeWVbIiFtZXJnZXMiXS5sZW5ndGg+MCYmKFFbUS5sZW5ndGhdPWZ1bmN0aW9uIHBTKFMpe2lmKDA9PT1TLmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIFI9JzxtZXJnZUNlbGxzIGNvdW50PSInK1MubGVuZ3RoKyciPics''@;'; put 'put ''az0wO2shPVMubGVuZ3RoOysraylSKz0nPG1lcmdlQ2VsbCByZWY9Iicrb28oU1trXSkrJyIvPic7cmV0dXJuIFIrIjwvbWVyZ2VDZWxscz4ifSh5ZVsiIW1lcmdlcyJdKSkseWVbIiFjb25kZm10Il0mJihRW1EubGVuZ3RoXT1mdW5jdGlvbiBkaihTLFIpe3JldHVybiBTLm1hcChmdW5jdGlv''@;'; put 'put ''bihrLEcpe3JldHVybiBmdW5jdGlvbiB1aihTLFIsayl7dmFyIEc9Uy5zP3NTKGsuRFhGLFMucyk6LTEsUT0ic3RyaW5nIj09dHlwZW9mIFMucmVmP1MucmVmOm9vKFMucmVmKSxnZT1hYShRLnJlcGxhY2UoL1xzLiokLywiIikpLnM7Z2UucjwwJiYoZ2Uucj0wKSxnZS5jPDAmJihnZS5jPTAp''@;'; put 'put ''O3ZhciBwZT0iIix5ZT17cHJpb3JpdHk6UisxfTtzd2l0Y2goRz4tMSYmKHllLmR4ZklkPUcpLFMudCl7Y2FzZSJ1bmlxdWUiOnllLnR5cGU9InVuaXF1ZVZhbHVlcyI7YnJlYWs7Y2FzZSJkdXAiOnllLnR5cGU9ImR1cGxpY2F0ZVZhbHVlcyI7YnJlYWs7Y2FzZSJibGFuayI6eWUudHlwZT0o''@;'; put 'put ''Uy52PyJjIjoibm90QyIpKyJvbnRhaW5zQmxhbmtzIixwZT0iPGZvcm11bGE+TEVOKFRSSU0oIitYaShnZSkrIikpIisoUy52PyI9IjoiJmd0OyIpKyIwPC9mb3JtdWxhPiI7YnJlYWs7Y2FzZSJlcnJvciI6eWUudHlwZT0oUy52PyJjIjoibm90QyIpKyJvbnRhaW5zRXJyb3JzIjticmVhaztj''@;'; put 'put ''YXNlImZvcm11bGEiOnllLnR5cGU9ImV4cHJlc3Npb24iLHBlPUZyKCJmb3JtdWxhIixPcihTLmYpLHt9KTticmVhaztjYXNlImRhdGUiOnllLnR5cGU9InRpbWVQZXJpb2QiLHllLnRpbWVQZXJpb2Q9Y2pbUy5vcF07YnJlYWs7Y2FzZSJ0ZXh0Ijpzd2l0Y2goeWUudHlwZT15ZS5vcGVyYXRv''@;'; put 'put ''cj1kOFtTLm9wXSx5ZS50ZXh0PVMudixTLm9wKXtjYXNlIklOIjpwZT0nPGZvcm11bGE+Tk9UKElTRVJST1IoU0VBUkNIKCInK09yKFMudikrJyIsJytYaShnZSkrIikpKTwvZm9ybXVsYT4iO2JyZWFrO2Nhc2UiT1QiOnBlPSc8Zm9ybXVsYT5JU0VSUk9SKFNFQVJDSCgiJytPcihTLnYpKyci''@;'; put 'put ''LCcrWGkoZ2UpKyIpKTwvZm9ybXVsYT4iO2JyZWFrO2Nhc2UiU1QiOnBlPSI8Zm9ybXVsYT5MRUZUKCIrWGkoZ2UpKycsTEVOKCInK09yKFMudikrJyIpKT0iJytPcihTLnYpKyciPC9mb3JtdWxhPic7YnJlYWs7Y2FzZSJORCI6cGU9Ijxmb3JtdWxhPlJJR0hUKCIrWGkoZ2UpKycsTEVOKCIn''@;'; put 'put ''K09yKFMudikrJyIpKT0iJytPcihTLnYpKyciPC9mb3JtdWxhPid9YnJlYWs7Y2FzZSJ2YWwiOnllLnR5cGU9ImNlbGxJcyIseWUub3BlcmF0b3I9aWJbUy5vcF0scGU9bnVsbCE9Uy5taW4/RnIoImZvcm11bGEiLE9yKFN0cmluZyhTLm1pbikpLHt9KStGcigiZm9ybXVsYSIsT3IoU3RyaW5n''@;'; put 'put ''KFMubWF4KSkse30pOkZyKCJmb3JtdWxhIixPcihudWxsIT1TLnY/U3RyaW5nKCJzdHJpbmciPT10eXBlb2YgUy52PyciJytTLnYucmVwbGFjZSgvIi9nLCciIicpKyciJzpTLnYpOlMuZikse30pO2JyZWFrO2Nhc2UiYXZnIjpzd2l0Y2goeWUudHlwZT0iYWJvdmVBdmVyYWdlIix5ZS5hYm92''@;'; put 'put ''ZUF2ZXJhZ2U9IkwiPT1TLm9wLmNoYXJBdCgwKT8iMCI6IjEiLFMub3AuY2hhckF0KDEpKXtjYXNlIlQiOnllLmVxdWFsQXZlcmFnZT0iMCI7YnJlYWs7Y2FzZSJFIjp5ZS5lcXVhbEF2ZXJhZ2U9IjEiO2JyZWFrO2RlZmF1bHQ6eWUuc3RkRGV2PVMub3AuY2hhckF0KDEpfWJyZWFrO2Nhc2Ui''@;'; put 'put ''cmFuayI6eWUudHlwZT0idG9wMTAiLHllLmJvdHRvbT0iQiI9PVMub3AuY2hhckF0KDApPyIxIjoiMCIseWUucGVyY2VudD0iUCI9PVMub3AuY2hhckF0KDEpPyIxIjoiMCIseWUucmFuaz1TLnY7YnJlYWs7Y2FzZSJpY29uIjp5ZS50eXBlPSJpY29uU2V0Ijt2YXIgUGU9e2ljb25TZXQ6Uy52''@;'; put 'put ''LHBlcmNlbnQ6Uy5wY3Q/InRydWUiOiJmYWxzZSJ9O1MucmV2JiYoUGUucmV2ZXJzZT0idHJ1ZSIpLFMuaGlkZGVuJiYoUGUuc2hvd1ZhbHVlPSJmYWxzZSIpLHBlPUZyKCJpY29uU2V0IixTLnRocmVzaC5tYXAoejQpLmpvaW4oIiIpLFBlKTticmVhaztjYXNlInNjYWxlIjp5ZS50eXBlPSJj''@;'; put 'put ''b2xvclNjYWxlIixwZSs9ejQoUy5jbWluKSxTLmNtaWQmJihwZSs9ejQoUy5jbWlkKSkscGUrPXo0KFMuY21heCkscGUrPWdkKFMuY21pbi5jb2xvciksUy5jbWlkJiYocGUrPWdkKFMuY21pZC5jb2xvcikpLHBlPUZyKCJjb2xvclNjYWxlIixwZSs9Z2QoUy5jbWF4LmNvbG9yKSx7fSk7YnJl''@;'; put 'put ''YWs7Y2FzZSJiYXIiOnllLnR5cGU9ImRhdGFCYXIiLHBlKz16NChTLmNtaW4pLHBlKz16NChTLmNtYXgpLHBlPUZyKCJkYXRhQmFyIixwZSs9Z2QoUy5jb2xvcikse30pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgY29uc29sZS5sb2coUyksIkNGIG1pc3NpbmcgdHlwZSAiK1MudH1yZXR1cm4nPGNv''@;'; put 'put ''bmRpdGlvbmFsRm9ybWF0dGluZyBzcXJlZj0iJytRKyciPicrRnIoImNmUnVsZSIsIiI9PXBlP251bGw6cGUseWUpKyI8L2NvbmRpdGlvbmFsRm9ybWF0dGluZz4ifShrLEcsUil9KS5qb2luKCIiKX0oeWVbIiFjb25kZm10Il0sUikpLHllWyIhdmFsaWRhdGlvbnMiXSYmKFFbUS5sZW5ndGhd''@;'; put 'put ''PWZ1bmN0aW9uIGtEKFMpe2lmKCFTfHwwPT1TLmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIFI9W10saz0wLEc9MDtHPFMubGVuZ3RoOysrRyl7dmFyIFE9U1tHXSxhZT1zaFtRLnRdO2lmKFEucmVmJiYoInN0cmluZyIhPXR5cGVvZiBRLnJlZnx8LTEhPVEucmVmLmluZGV4T2YoIiAiKXx8KFEu''@;'; put 'put ''cmVmPWFhKFEucmVmKSxRLnJlZi5zJiYhKFEucmVmLnMuYzwwKSkpKXsrK2s7dmFyIGdlPXt0eXBlOmFlLGFsbG93Qmxhbms6KygwIT1RLmJsYW5rKSxzaG93SW5wdXRNZXNzYWdlOisoMCE9US5pbnB1dCksc2hvd0Vycm9yTWVzc2FnZTorKDAhPVEuZXJyb3IpLHNxcmVmOiJzdHJpbmciPT10''@;'; put 'put ''eXBlb2YgUS5yZWY/US5yZWY6b28oUS5yZWYpfTtpZihRLmlucHV0JiYoUS5pbnB1dC50aXRsZSYmKGdlLnByb21wdFRpdGxlPVlpKFEuaW5wdXQudGl0bGUpKSxRLmlucHV0Lm1lc3NhZ2UmJihnZS5wcm9tcHQ9WWkoUS5pbnB1dC5tZXNzYWdlKSkpLFEuZXJyb3ImJihRLmVycm9yLnRpdGxl''@;'; put 'put ''JiYoZ2UuZXJyb3JUaXRsZT1ZaShRLmVycm9yLnRpdGxlKSksUS5lcnJvci5tZXNzYWdlJiYoZ2UuZXJyb3I9WWkoUS5lcnJvci5tZXNzYWdlKSksUS5lcnJvci5zdHlsZSYmKGdlLmVycm9yU3R5bGU9US5lcnJvci5zdHlsZSkpLCFhZSl0aHJvdyBuZXcgRXJyb3IoIkJhZCB2YWxpZGF0aW9u''@;'; put 'put ''OiB1bnJlY29nbml6ZWQgdHlwZSAiK1EudCk7dmFyIHBlPSIiO3N3aXRjaChRLnQpe2Nhc2UiQW55IjpicmVhaztjYXNlIkxpc3QiOmNhc2UiQ3VzdG9tIjppZihRLmwpe2lmKFEubC5qb2luKCIsIikubGVuZ3RoPjI1MCl0aHJvdyBuZXcgRXJyb3IoIkRWIGxlbmd0aCA+IDI1MCB0cmlnZ2Vy''@;'; put 'put ''cyBjb3JydXB0aW9uIGVycm9ycyBpbiBFeGNlbC4gIFVzZSBhIGxvb2t1cCB0YWJsZSIpO3BlPSc8Zm9ybXVsYTE+IicrT3IoUS5sLmpvaW4oIiwiKSkrJyI8L2Zvcm11bGExPid9ZWxzZSBwZT0iPGZvcm11bGExPiIrT3IoUS5mKSsiPC9mb3JtdWxhMT4iO2JyZWFrO2Nhc2UiRGF0ZSI6Y2Fz''@;'; put 'put ''ZSJUaW1lIjpjYXNlIkRlY2ltYWwiOmNhc2UiTGVuZ3RoIjpjYXNlIldob2xlIjppZighaWJbUS5vcF0pdGhyb3cgbmV3IEVycm9yKCJCYWQgRGF0YSBWYWxpZGF0aW9uIHR5cGUgIitRLm9wKyIgZm9yICIrUS50KTtpZihnZS5vcGVyYXRvcj1pYltRLm9wXSxudWxsIT1RLnYpcGU9Ijxmb3Jt''@;'; put 'put ''dWxhMT4iK09yKFN0cmluZyhRLnYgaW5zdGFuY2VvZiBEYXRlP1FlKFEudik6US52KSkrIjwvZm9ybXVsYTE+IjtlbHNle2lmKG51bGw9PVEubWlufHxudWxsPT1RLm1heCl0aHJvdyBuZXcgRXJyb3IoIkJhZCBEYXRhIFZhbGlkYXRpb246IGB2YCBvciBgbWluYCtgbWF4YCByZXF1aXJlZCBm''@;'; put 'put ''b3IgVHlwZSAiK1EudCk7cGU9Ijxmb3JtdWxhMT4iK09yKFN0cmluZyhRLm1pbiBpbnN0YW5jZW9mIERhdGU/UWUoUS5taW4pOlEubWluKSkrIjwvZm9ybXVsYTE+PGZvcm11bGEyPiIrT3IoU3RyaW5nKFEubWF4IGluc3RhbmNlb2YgRGF0ZT9RZShRLm1heCk6US5tYXgpKSsiPC9mb3JtdWxh''@;'; put 'put ''Mj4ifX1SLnB1c2goRnIoImRhdGFWYWxpZGF0aW9uIixwZXx8bnVsbCxnZSkpfX1yZXR1cm4gaz4wPyc8ZGF0YVZhbGlkYXRpb25zIGNvdW50PSInK2srJyI+JytSLmpvaW4oIiIpKyI8L2RhdGFWYWxpZGF0aW9ucz4iOiIifSh5ZVsiIXZhbGlkYXRpb25zIl0pKTt2YXIgQnQsYnQ9LTEsa3Q9''@;'; put 'put ''LTE7aWYoeWVbIiFsaW5rcyJdLmxlbmd0aD4wJiYoUVtRLmxlbmd0aF09IjxoeXBlcmxpbmtzPiIseWVbIiFsaW5rcyJdLmZvckVhY2goZnVuY3Rpb24oU24pe1NuWzFdLlRhcmdldCYmKEJ0PXtyZWY6U25bMF19LCIjIiE9U25bMV0uVGFyZ2V0LmNoYXJBdCgwKSYmKGt0PUVyKEcsLTEsT3Io''@;'; put 'put ''U25bMV0uVGFyZ2V0KS5yZXBsYWNlKC8jLiokLywiIikscW8uSExJTkspLEJ0WyJyOmlkIl09InJJZCIra3QpLChidD1TblsxXS5UYXJnZXQuaW5kZXhPZigiIyIpKT4tMSYmKEJ0LmxvY2F0aW9uPU9yKFNuWzFdLlRhcmdldC5zbGljZShidCsxKSkpLFNuWzFdLlRvb2x0aXAmJihCdC50b29s''@;'; put 'put ''dGlwPU9yKFNuWzFdLlRvb2x0aXApKSxRW1EubGVuZ3RoXT1GcigiaHlwZXJsaW5rIixudWxsLEJ0KSl9KSxRW1EubGVuZ3RoXT0iPC9oeXBlcmxpbmtzPiIpLGRlbGV0ZSB5ZVsiIWxpbmtzIl0sZXQpe3ZhciBPdD1mdW5jdGlvbiBKQihTKXtpZihTLnByb3BzKXt2YXIgUj17fSxrPVMucHJv''@;'; put 'put ''cHM7cmV0dXJuIGsuZ3JpZGxpbmVzJiYoUi5ncmlkTGluZXM9Ui5ncmlkTGluZXNTZXQ9MSksay5oZWFkaW5ncyYmKFIuaGVhZGluZ3M9MSksay5jZW50ZXJYJiYoUi5ob3Jpem9udGFsQ2VudGVyZWQ9MSksay5jZW50ZXJZJiYoUi52ZXJ0aWNhbENlbnRlcmVkPTEpLEZyKCJwcmludE9wdGlv''@;'; put 'put ''bnMiLG51bGwsUil9cmV0dXJuIiJ9KGV0KTtPdC5sZW5ndGgmJihRW1EubGVuZ3RoXT1PdCl9aWYoKG51bGwhPXllWyIhbWFyZ2lucyJdfHxldCYmZXQubWFyZ2lucykmJihRW1EubGVuZ3RoXT1mdW5jdGlvbiByaihTKXtyZXR1cm4gWTMoUyksRnIoInBhZ2VNYXJnaW5zIixudWxsLFMpfSh5''@;'; put 'put ''ZVsiIW1hcmdpbnMiXXx8ZXQubWFyZ2lucykpLGV0KXt2YXIgS3Q9ZnVuY3Rpb24gTUQoUyl7aWYoUy5wcm9wcyl7dmFyIFI9e30saz1TLnByb3BzO2lmKGsub3JpZW50YXRpb24mJihSLm9yaWVudGF0aW9uPWsub3JpZW50YXRpb24pLGsuc2NhbGUmJihSLnNjYWxlPWsuc2NhbGUpLGsuZml0''@;'; put 'put ''JiYobnVsbCE9ay5maXQuaGVpZ2h0JiYoUi5maXRUb0hlaWdodD1rLmZpdC5oZWlnaHQpLG51bGwhPWsuZml0LndpZHRoJiYoUi5maXRUb1dpZHRoPWsuZml0LndpZHRoKSksay5kcGkmJihSLmhvcml6b250YWxEcGk9Ui52ZXJ0aWNhbERwaT1rLmRwaSksbnVsbCE9ay5maXJzdCYmKFIuZmly''@;'; put 'put ''c3RQYWdlTnVtYmVyPWsuZmlyc3QsUi51c2VGaXJzdFBhZ2VOdW1iZXI9MSksay5idyYmKFIuYmxhY2tBbmRXaGl0ZT0xKSxrLmRyYWZ0JiYoUi5kcmFmdD0xKSxrLmNvbW1lbnRzJiYoUi5jZWxsQ29tbWVudHM9eURbay5jb21tZW50c118fCJub25lIiksay5lcnJvcnMmJihSLmVycm9ycz13''@;'; put 'put ''RFtrLmVycm9yc118fCJub25lIiksay5wYXBlcilzd2l0Y2godHlwZW9mIGsucGFwZXIpe2Nhc2UibnVtYmVyIjpSLnBhcGVyU2l6ZT1rLnBhcGVyO2JyZWFrO2Nhc2Uic3RyaW5nIjplQltrLnBhcGVyXT9SLnBhcGVyU2l6ZT1lQltrLnBhcGVyXToray5wYXBlciYmKFIucGFwZXJTaXplPStr''@;'; put 'put ''LnBhcGVyKTticmVhaztjYXNlIm9iamVjdCI6aWYoIWsucGFwZXIuaGVpZ2h0fHwhay5wYXBlci53aWR0aCl0aHJvdyJDdXN0b20gUGFwZXIgU2l6ZSBtdXN0IGluY2x1ZGUgd2lkdGggYW5kIGhlaWdodCEiO1IucGFwZXJIZWlnaHQ9ay5wYXBlci5oZWlnaHQsUi5wYXBlcldpZHRoPWsucGFw''@;'; put 'put ''ZXIud2lkdGh9cmV0dXJuWzEsITAsInRydWUiLCJvdmVyIl0uaW5kZXhPZihrLm9yZGVyKT4tMSYmKFIucGFnZU9yZGVyPSJvdmVyVGhlbkRvd24iKSxGcigicGFnZVNldHVwIixudWxsLFIpfXJldHVybiIifShldCk7S3QubGVuZ3RoJiYoUVtRLmxlbmd0aF09S3QpLEt0PWZ1bmN0aW9uIGxq''@;'; put 'put ''KFMpe3ZhciBSPVtdLGs9IiIsRz0iIixRPSIiLGFlPSIiLGdlPSIiLHBlPSIiLHllPSIiLFBlPW4xKFMuaGVhZGVyKTtQZS5sZW5ndGgmJihHPVBlWzBdLHBlPVBlWzFdLGFlPVBlWzJdKTt2YXIgTmU9bjEoUy5mb290ZXIpO3JldHVybiBOZS5sZW5ndGgmJihRPU5lWzBdLHllPU5lWzFdLGdl''@;'; put 'put ''PU5lWzJdKSxHJiZSLnB1c2goIjxvZGRIZWFkZXI+IitPcihHKSsiPC9vZGRIZWFkZXI+IiksUSYmUi5wdXNoKCI8b2RkRm9vdGVyPiIrT3IoUSkrIjwvb2RkRm9vdGVyPiIpLChnZSE9UXx8YWUhPUcpJiYoays9JyBkaWZmZXJlbnRPZGRFdmVuPSIxIicsUi5wdXNoKCI8ZXZlbkhlYWRlcj4i''@;'; put 'put ''K09yKGFlKSsiPC9ldmVuSGVhZGVyPiIpLFIucHVzaCgiPGV2ZW5Gb290ZXI+IitPcihnZSkrIjwvZXZlbkZvb3Rlcj4iKSksKHllIT1RfHxwZSE9RykmJihrKz0nIGRpZmZlcmVudEZpcnN0PSIxIicsUi5wdXNoKCI8Zmlyc3RIZWFkZXI+IitPcihwZSkrIjwvZmlyc3RIZWFkZXI+IiksUi5w''@;'; put 'put ''dXNoKCI8Zmlyc3RGb290ZXI+IitPcih5ZSkrIjwvZmlyc3RGb290ZXI+IikpLFIubGVuZ3RoPyI8aGVhZGVyRm9vdGVyIitrKyI+IitSLmpvaW4oIiIpKyI8L2hlYWRlckZvb3Rlcj4iOiIifShldCksS3QubGVuZ3RoJiYoUVtRLmxlbmd0aF09S3QpfWlmKChudWxsIT15ZVsiIXJvd0JyZWFr''@;'; put 'put ''cyJdfHxldCYmZXQucm93QnJlYWtzKSYmKFFbUS5sZW5ndGhdPWZ1bmN0aW9uIGVqKFMpe2lmKDA9PVMubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgUj1bJzxyb3dCcmVha3MgY291bnQ9IicrUy5sZW5ndGgrJyIgbWFudWFsQnJlYWtDb3VudD0iJytTLmxlbmd0aCsnIj4nXSxrPTA7azxTLmxl''@;'; put 'put ''bmd0aDsrK2spUi5wdXNoKCc8YnJrIGlkPSInK1Nba10uUisnIiBtYW49IjEiLz4nKTtyZXR1cm4gUi5qb2luKCIiKSsiPC9yb3dCcmVha3M+In0oeWVbIiFyb3dCcmVha3MiXXx8ZXQucm93QnJlYWtzKSksKG51bGwhPXllWyIhY29sQnJlYWtzIl18fGV0JiZldC5jb2xCcmVha3MpJiYoUVtR''@;'; put 'put ''Lmxlbmd0aF09ZnVuY3Rpb24gbVMoUyl7aWYoMD09Uy5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBSPVsnPGNvbEJyZWFrcyBjb3VudD0iJytTLmxlbmd0aCsnIiBtYW51YWxCcmVha0NvdW50PSInK1MubGVuZ3RoKyciPiddLGs9MDtrPFMubGVuZ3RoOysraylSLnB1c2goJzxicmsgaWQ9Iicr''@;'; put 'put ''U1trXS5DKyciIG1hbj0iMSIvPicpO3JldHVybiBSLmpvaW4oIiIpKyI8L2NvbEJyZWFrcz4ifSh5ZVsiIWNvbEJyZWFrcyJdfHxldC5jb2xCcmVha3MpKSwoIVJ8fFIuaWdub3JlRUN8fG51bGw9PVIuaWdub3JlRUMpJiYoUVtRLmxlbmd0aF09Tm8oImlnbm9yZWRFcnJvcnMiLEZyKCJpZ25v''@;'; put 'put ''cmVkRXJyb3IiLG51bGwse251bWJlclN0b3JlZEFzVGV4dDoxLHNxcmVmOlBlfSkpKSx5ZVsiIWNoYXJ0cyJdJiZZZS5wdXNoLmFwcGx5KFllLHllWyIhY2hhcnRzIl0pLHllWyIhaW1hZ2VzIl0mJlllLnB1c2guYXBwbHkoWWUseWVbIiFpbWFnZXMiXSkseWVbIiFzaGFwZXMiXSYmWWUucHVz''@;'; put 'put ''aC5hcHBseShZZSx5ZVsiIXNoYXBlcyJdKSxZZS5sZW5ndGg+MCYmKGt0PUVyKEcsLTEsIi4uL2RyYXdpbmdzL2RyYXdpbmciKyhTKzEpKyIueG1sIixxby5EUkFXKSxRW1EubGVuZ3RoXT1GcigiZHJhd2luZyIsbnVsbCx7InI6aWQiOiJySWQiK2t0fSkseWVbIiFkcmF3aW5nIl09WWUpLCh5''@;'; put 'put ''ZVsiIWNvbW1lbnRzIl0ubGVuZ3RoPjB8fCh5ZVsiIWNvbnRyb2xzIl18fFtdKS5sZW5ndGg+MCkmJihrdD1FcihHLC0xLCIuLi9kcmF3aW5ncy92bWxEcmF3aW5nIisoUysxKSsiLnZtbCIscW8uVk1MKSxRW1EubGVuZ3RoXT1GcigibGVnYWN5RHJhd2luZyIsbnVsbCx7InI6aWQiOiJySWQi''@;'; put 'put ''K2t0fSkseWVbIiFsZWdhY3kiXT1rdCkseWVbIiFwcmludCJdJiZ5ZVsiIXByaW50Il0uaW1hZ2VzKXt2YXIgVG49eWVbIiFwcmludCJdLmltYWdlcyxpcj0wO1siaGVhZGVyIiwiZm9vdGVyIl0uZm9yRWFjaChmdW5jdGlvbihTbil7VG5bU25dJiZbIm9kZCIsImV2ZW4iLCJmaXJzdCJdLmZv''@;'; put 'put ''ckVhY2goZnVuY3Rpb24oc3Ipe1RuW1NuXVtzcl0mJlsibGVmdCIsInJpZ2h0IiwiY2VudGVyIl0uZm9yRWFjaChmdW5jdGlvbihKbil7aWYoQXJyYXkuaXNBcnJheShUbltTbl1bc3JdW0puXSkpZm9yKHZhciBWbj0wO1ZuPFRuW1NuXVtzcl1bSm5dLmxlbmd0aDsrK1ZuKVRuW1NuXVtzcl1b''@;'; put 'put ''Sm5dW1ZuXSYmKFRuW1NuXVtzcl1bSm5dW1ZuXS5fY250PWlyKyspfSl9KX0pLGlyPjAmJihrdD1FcihHLC0xLCIuLi9kcmF3aW5ncy92bWxEcmF3aW5nIisoUysxKSsiSEYudm1sIixxby5WTUwpLFFbUS5sZW5ndGhdPUZyKCJsZWdhY3lEcmF3aW5nSEYiLG51bGwseyJyOmlkIjoicklkIitr''@;'; put 'put ''dH0pLHllWyIhbGVnYWN5SEYiXT1rdCl9cmV0dXJuKHllWyIhdGFibGVzIl18fFtdKS5sZW5ndGg+MCYmKFFbUS5sZW5ndGhdPSc8dGFibGVQYXJ0cyBjb3VudD0iJyt5ZVsiIXRhYmxlcyJdLmxlbmd0aCsnIj4nLHllWyIhdGFibGVzIl0uZm9yRWFjaChmdW5jdGlvbihTbixzcil7a3Q9RXIo''@;'; put 'put ''RywtMSwiLi4vdGFibGVzL3RhYmxlIisoUysxKSsiXyIrc3IrIi54bWwiLHFvLlRBQkxFKSxRW1EubGVuZ3RoXT0nPHRhYmxlUGFydCByOmlkPSJySWQnK2t0KyciLz4nfSksUVtRLmxlbmd0aF09IjwvdGFibGVQYXJ0cz4iKSxRLmxlbmd0aD4xJiYoUVtRLmxlbmd0aF09Ijwvd29ya3NoZWV0''@;'; put 'put ''PiIsUVsxXT1RWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxRLmpvaW4oIiIpfWZ1bmN0aW9uIHBqKFMsUixrLEcpe3ZhciBRPWZ1bmN0aW9uIGZqKFMsUixrKXt2YXIgRz1ibigxNDUpLFE9KGtbIiFyb3dzIl18fFtdKVtTXXx8e307Ry53cml0ZV9zaGlmdCg0LFMpLEcud3JpdGVfc2hpZnQoNCww''@;'; put 'put ''KTt2YXIgYWU9MzIwO1EuaHB4P2FlPTIwKk4zKFEuaHB4KTpRLmhwdCYmKGFlPTIwKlEuaHB0KSxHLndyaXRlX3NoaWZ0KDIsYWUpLEcud3JpdGVfc2hpZnQoMSwwKTt2YXIgZ2U9MDtRLmxldmVsJiYoZ2V8PVEubGV2ZWwpLFEuaGlkZGVuJiYoZ2V8PTE2KSwoUS5ocHh8fFEuaHB0KSYmKGdl''@;'; put 'put ''fD0zMiksRy53cml0ZV9zaGlmdCgxLGdlKSxHLndyaXRlX3NoaWZ0KDEsMCk7dmFyIHBlPTAseWU9Ry5sO0cubCs9NDtmb3IodmFyIFBlPXtyOlMsYzowfSxOZT0wO05lPDE2OysrTmUpaWYoIShSLnMuYz5OZSsxPDwxMHx8Ui5lLmM8TmU8PDEwKSl7Zm9yKHZhciBZZT0tMSxldD0tMSx1dD1O''@;'; put 'put ''ZTw8MTA7dXQ8TmUrMTw8MTA7Kyt1dClQZS5jPXV0LChBcnJheS5pc0FycmF5KGspPyhrW1BlLnJdfHxbXSlbUGUuY106a1tYaShQZSldKSYmKFllPDAmJihZZT11dCksZXQ9dXQpO1llPDB8fCgrK3BlLEcud3JpdGVfc2hpZnQoNCxZZSksRy53cml0ZV9zaGlmdCg0LGV0KSl9dmFyIG90PUcu''@;'; put 'put ''bDtyZXR1cm4gRy5sPXllLEcud3JpdGVfc2hpZnQoNCxwZSksRy5sPW90LEcubGVuZ3RoPkcubD9HLnNsaWNlKDAsRy5sKTpHfShHLGssUik7KFEubGVuZ3RoPjE3fHwoUlsiIXJvd3MiXXx8W10pW0ddKSYmSHIoUywiQnJ0Um93SGRyIixRKX12YXIgZ2o9Z3UsbWo9Y2Y7ZnVuY3Rpb24gRWoo''@;'; put 'put ''Uyl7cmV0dXJuW0doKFMpLExsKFMpLCJuIl19dmFyIEhEPWd1LF84PWNmLGpEPVsibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIiwiaGVhZGVyIiwiZm9vdGVyIl0sekQ9WyJBbnkiLCJXaG9sZSIsIkRlY2ltYWwiLCJMaXN0IiwiRGF0ZSIsIlRpbWUiLCJMZW5ndGgiLCJDdXN0b20iXSxr''@;'; put 'put ''Uz1bIklOIiwiT1QiLCJFUSIsIk5FIiwiR1QiLCJMVCIsIkdFIiwiTEUiXTtmdW5jdGlvbiBVRChTKXt2YXIgUj1ibig0KSxrPVtSXSxHPXpELmluZGV4T2YoUy50KTtpZihHPDApdGhyb3cgbmV3IEVycm9yKCJCYWQgdmFsaWRhdGlvbjogdW5yZWNvZ25pemVkIHR5cGUgIitTLnQpO3ZhciBh''@;'; put 'put ''ZT1rUy5pbmRleE9mKFMub3ApO3N3aXRjaChHKXtjYXNlIDA6Y2FzZSAzOmNhc2UgNzphZT0wO2JyZWFrO2RlZmF1bHQ6aWYoLTE9PWFlKXRocm93IG5ldyBFcnJvcigiQmFkIERhdGEgVmFsaWRhdGlvbiB0eXBlICIrUy5vcCsiIGZvciAiK1MudCl9Ui53cml0ZV9zaGlmdCgxLDB8RyksUi53''@;'; put 'put ''cml0ZV9zaGlmdCgxLDEpLFIud3JpdGVfc2hpZnQoMSwxMnxhZTw8NCksUi53cml0ZV9zaGlmdCgxLDApLGsucHVzaChmdW5jdGlvbiBUMyhTKXt2YXIgUj1TLnNwbGl0KC9ccyosXHMqLyksaz1ibig0KTtrLndyaXRlX3NoaWZ0KDQsUi5sZW5ndGgpO3ZhciBHPVtrXTtyZXR1cm4gUi5mb3JF''@;'; put 'put ''YWNoKGZ1bmN0aW9uKFEpe0cucHVzaChjZihhYShRKSkpfSksaihHKX0oInN0cmluZyI9PXR5cGVvZiBTLnJlZj9TLnJlZjpvbyhTLnJlZikpKTt2YXIgZ2U9Ym4oMTYpO2dlLndyaXRlX3NoaWZ0KDQsNDI5NDk2NzI5NSksZ2Uud3JpdGVfc2hpZnQoNCw0Mjk0OTY3Mjk1KSxnZS53cml0ZV9z''@;'; put 'put ''aGlmdCg0LDQyOTQ5NjcyOTUpLGdlLndyaXRlX3NoaWZ0KDQsNDI5NDk2NzI5NSksay5wdXNoKGdlKTt2YXIgcGU9Ym4oOCk7cGUud3JpdGVfc2hpZnQoNCwwKSxwZS53cml0ZV9zaGlmdCg0LDApO3ZhciB5ZT0xO3N3aXRjaChTLnQpe2Nhc2UiQW55IjprLnB1c2gocGUpLGsucHVzaChwZSk7''@;'; put 'put ''YnJlYWs7Y2FzZSJEZWNpbWFsIjpjYXNlIkxlbmd0aCI6Y2FzZSJXaG9sZSI6aWYobnVsbCE9Uy52fHxudWxsIT1TLmYpay5wdXNoKCJudW1iZXIiPT10eXBlb2YgUy52P2VTKFMudik6QjQobnVsbD09Uy52P1MuZjpTLnYpKTtlbHNle2lmKG51bGw9PVMubWlufHxudWxsPT1TLm1heCl0aHJv''@;'; put 'put ''dyJVbnN1cHBvcnRlZCBEYXRhIFZhbGlkYXRpb246IGB2YCBvciBgbWluYCtgbWF4YCByZXF1aXJlZCBmb3IgVHlwZSAiK1MudDtrLnB1c2goIm51bWJlciI9PXR5cGVvZiBTLm1pbj9lUyhTLm1pbik6QjQoUy5taW4pKSxrLnB1c2goIm51bWJlciI9PXR5cGVvZiBTLm1heD9lUyhTLm1heCk6''@;'; put 'put ''QjQoUy5tYXgpKSx5ZT0yfWJyZWFrO2Nhc2UiTGlzdCI6aWYobnVsbCE9Uy5sKXtrLnB1c2godFMoUy5sLmpvaW4oIiwiKSkpO2JyZWFrfWNhc2UiQ3VzdG9tIjppZigibnVsbCIhPVMuZil7ay5wdXNoKEI0KFMuZikpO2JyZWFrfXRocm93IlVuc3VwcG9ydGVkIERhdGEgVmFsaWRhdGlvbjog''@;'; put 'put ''YGZgIisoIkxpc3QiPT1TLnQ/IiBvciBgbGAiOiIiKSsiIHJlcXVpcmVkIGZvciBUeXBlICIrUy50O2RlZmF1bHQ6dGhyb3ciWExTQiBkb2VzIG5vdCBzdXBwb3J0IERhdGEgVmFsaWRhdGlvbiB0eXBlICIrUy50fXJldHVybiAxPT15ZSYmay5wdXNoKHBlKSxqKGspfWZ1bmN0aW9uIFpqKFMs''@;'; put 'put ''UixrLEcsUSxhZSxnZSl7aWYodm9pZCAwPT09Ui52JiZudWxsPT1SLnN8fCJ6Ij09PVIudCYmIVEuc2hlZXRTdHVicylyZXR1cm4hMTt2YXIgcGU9IiI7c3dpdGNoKFIudCl7Y2FzZSJiIjpwZT1SLnY/IjEiOiIwIjticmVhaztjYXNlImQiOihSPXF0KFIpKS56PVIuenx8QS5fdGFibGVbMTRd''@;'; put 'put ''LFIudj1RZShIZShSLnYpKSxSLnQ9Im4iO2JyZWFrO2Nhc2UibiI6Y2FzZSJlIjpwZT0iIitSLnY7YnJlYWs7ZGVmYXVsdDpwZT1SLnZ9dmFyIHllPXtyOmssYzpHfTtzd2l0Y2goeWUucz1zMChRLmNlbGxYZnMsUS5jZWxsU3R5bGVYZnMsUixRKSxSLmwmJmFlWyIhbGlua3MiXS5wdXNoKFtY''@;'; put 'put ''aSh5ZSksUi5sXSksUi5jJiZhZVsiIWNvbW1lbnRzIl0ucHVzaChbWGkoeWUpLFIuY10pLFIudCl7Y2FzZSJzIjpjYXNlInN0ciI6aWYoUS5ib29rU1NUKXtpZihwZT1pUyhRLlN0cmluZ3MsUi52LFIuUj9SLnI9S3MoUi5SKTpudWxsLFEucmV2U3RyaW5ncyksUi5SKWZvcih2YXIgUGU9MDtQ''@;'; put 'put ''ZTxSLlIubGVuZ3RoOysrUGUpUi5SW1BlXS5zJiZzMChRLmNlbGxYZnMsUS5jZWxsU3R5bGVYZnMse3Q6Im4iLHY6MCxzOlIuUltQZV0uc30sUSk7eWUudD0icyIseWUudj1wZSxnZT9IcihTLCJCcnRTaG9ydElzc3QiLGZ1bmN0aW9uIHNiKFMsUixrKXtyZXR1cm4gbnVsbD09ayYmKGs9Ym4o''@;'; put 'put ''OCkpLGhpKFIsayksay53cml0ZV9zaGlmdCg0LFIudiksa30oMCx5ZSkpOkhyKFMsIkJydENlbGxJc3N0IixmdW5jdGlvbiBTaihTLFIsayl7cmV0dXJuIG51bGw9PWsmJihrPWJuKDEyKSksTXIoUixrKSxrLndyaXRlX3NoaWZ0KDQsUi52KSxrfSgwLHllKSl9ZWxzZSB5ZS50PSJzdHIiLGdl''@;'; put 'put ''P0hyKFMsIkJydFNob3J0U3QiLGZ1bmN0aW9uIFJqKFMsUixrKXtyZXR1cm4gbnVsbD09ayYmKGs9Ym4oOCs0KlMudi5sZW5ndGgpKSxoaShSLGspLFBjKFMudixrKSxrLmxlbmd0aD5rLmw/ay5zbGljZSgwLGsubCk6a30oUix5ZSkpOkhyKFMsIkJydENlbGxTdCIsZnVuY3Rpb24gRGooUyxS''@;'; put 'put ''LGspe3JldHVybiBudWxsPT1rJiYoaz1ibigxMis0KlMudi5sZW5ndGgpKSxNcihSLGspLFBjKFMudixrKSxrLmxlbmd0aD5rLmw/ay5zbGljZSgwLGsubCk6a30oUix5ZSkpO3JldHVybiEwO2Nhc2UibiI6cmV0dXJuIFIudj09KDB8Ui52KSYmUi52Pi0xZTMmJlIudjwxZTM/Z2U/SHIoUywi''@;'; put 'put ''QnJ0U2hvcnRSayIsZnVuY3Rpb24ga2ooUyxSLGspe3JldHVybiBudWxsPT1rJiYoaz1ibig4KSksaGkoUixrKSxpdihTLnYsayksa30oUix5ZSkpOkhyKFMsIkJydENlbGxSayIsZnVuY3Rpb24gQWooUyxSLGspe3JldHVybiBudWxsPT1rJiYoaz1ibigxMikpLE1yKFIsayksaXYoUy52LGsp''@;'; put 'put ''LGt9KFIseWUpKTpnZT9IcihTLCJCcnRTaG9ydFJlYWwiLGZ1bmN0aW9uIF9uZShTLFIsayl7cmV0dXJuIG51bGw9PWsmJihrPWJuKDEyKSksaGkoUixrKSxMdShTLnYsayksa30oUix5ZSkpOkhyKFMsIkJydENlbGxSZWFsIixmdW5jdGlvbiB4aihTLFIsayl7cmV0dXJuIG51bGw9PWsmJihr''@;'; put 'put ''PWJuKDE2KSksTXIoUixrKSxMdShTLnYsayksa30oUix5ZSkpLCEwO2Nhc2UiYiI6cmV0dXJuIHllLnQ9ImIiLGdlP0hyKFMsIkJydFNob3J0Qm9vbCIsZnVuY3Rpb24gTVMoUyxSLGspe3JldHVybiBudWxsPT1rJiYoaz1ibig1KSksaGkoUixrKSxrLndyaXRlX3NoaWZ0KDEsUy52PzE6MCks''@;'; put 'put ''a30oUix5ZSkpOkhyKFMsIkJydENlbGxCb29sIixmdW5jdGlvbiB3aihTLFIsayl7cmV0dXJuIG51bGw9PWsmJihrPWJuKDkpKSxNcihSLGspLGsud3JpdGVfc2hpZnQoMSxTLnY/MTowKSxrfShSLHllKSksITA7Y2FzZSJlIjpyZXR1cm4geWUudD0iZSIsZ2U/SHIoUywiQnJ0U2hvcnRFcnJv''@;'; put 'put ''ciIsZnVuY3Rpb24gd2woUyxSLGspe3JldHVybiBudWxsPT1rJiYoaz1ibig4KSksaGkoUixrKSxrLndyaXRlX3NoaWZ0KDEsUy52KSxrLndyaXRlX3NoaWZ0KDIsMCksay53cml0ZV9zaGlmdCgxLDApLGt9KFIseWUpKTpIcihTLCJCcnRDZWxsRXJyb3IiLGZ1bmN0aW9uIHY4KFMsUixrKXty''@;'; put 'put ''ZXR1cm4gbnVsbD09ayYmKGs9Ym4oOSkpLE1yKFIsayksay53cml0ZV9zaGlmdCgxLFMudiksa30oUix5ZSkpLCEwfXJldHVybiBnZT9IcihTLCJCcnRTaG9ydEJsYW5rIixmdW5jdGlvbiBPRChTLFIsayl7cmV0dXJuIG51bGw9PWsmJihrPWJuKDQpKSxoaShSLGspfSgwLHllKSk6SHIoUywi''@;'; put 'put ''QnJ0Q2VsbEJsYW5rIixmdW5jdGlvbiBiaihTLFIsayl7cmV0dXJuIG51bGw9PWsmJihrPWJuKDgpKSxNcihSLGspfSgwLHllKSksITB9ZnVuY3Rpb24gejUoUyxSLGssRyl7dmFyIFE9bWkoKSxhZT1rLlNoZWV0TmFtZXNbU10sZ2U9ay5TaGVldHNbYWVdfHx7fSxwZT1hZTt0cnl7ayYmay5X''@;'; put 'put ''b3JrYm9vayYmKHBlPWsuV29ya2Jvb2suU2hlZXRzW1NdLkNvZGVOYW1lfHxwZSl9Y2F0Y2h7fXZhciB5ZT1hYShnZVsiIXJlZiJdfHwiQTEiKTtpZih5ZS5lLmM+MTYzODN8fHllLmUucj4xMDQ4NTc1KXtpZihSLldURil0aHJvdyBuZXcgRXJyb3IoIlJhbmdlICIrKGdlWyIhcmVmIl18fCJB''@;'; put 'put ''MSIpKyIgZXhjZWVkcyBmb3JtYXQgbGltaXQgQTE6WEZEMTA0ODU3NiIpO3llLmUuYz1NYXRoLm1pbih5ZS5lLmMsMTYzODMpLHllLmUucj1NYXRoLm1pbih5ZS5lLmMsMTA0ODU3NSl9cmV0dXJuIGdlWyIhbGlua3MiXT1bXSxnZVsiIWNvbW1lbnRzIl09W10sSHIoUSwiQnJ0QmVnaW5TaGVl''@;'; put 'put ''dCIpLChrLnZiYXJhd3x8Z2VbIiFvdXRsaW5lIl0pJiZIcihRLCJCcnRXc1Byb3AiLGZ1bmN0aW9uIHZqKFMsUixrKXtudWxsPT1rJiYoaz1ibig4NCs0KlMubGVuZ3RoKSk7dmFyIEc9MTkyO1ImJihSLmFib3ZlJiYoRyY9LTY1KSxSLmxlZnQmJihHJj0tMTI5KSksay53cml0ZV9zaGlmdCgx''@;'; put 'put ''LEcpO2Zvcih2YXIgUT0xO1E8MzsrK1Epay53cml0ZV9zaGlmdCgxLDApO3JldHVybiB1Zih7YXV0bzoxfSxrKSxrLndyaXRlX3NoaWZ0KC00LC0xKSxrLndyaXRlX3NoaWZ0KC00LC0xKSxyNShTLGspLGsuc2xpY2UoMCxrLmwpfShwZSxnZVsiIW91dGxpbmUiXSkpLEhyKFEsIkJydFdzRGlt''@;'; put 'put ''Iixtaih5ZSkpLGZ1bmN0aW9uICRqKFMsUixrKXtIcihTLCJCcnRCZWdpbldzVmlld3MiKSxIcihTLCJCcnRCZWdpbldzVmlldyIsZnVuY3Rpb24gQzgoUyxSLGspe251bGw9PWsmJihrPWJuKDMwKSk7dmFyIEc9OTI0O3JldHVybigoKFJ8fHt9KS5WaWV3c3x8W10pWzBdfHx7fSkuUlRMJiYo''@;'; put 'put ''R3w9MzIpLFp0KFNbIiFncmlkbGluZXMiXSkmJihHJj0tNSksWnQoKCgoUnx8e30pLlZpZXdzfHxbXSlbMF18fHt9KS5ncmlkKSYmKEcmPS01KSxrLndyaXRlX3NoaWZ0KDIsRyksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoNCwwKSxrLndyaXRlX3NoaWZ0KDQsMCksay53cml0''@;'; put 'put ''ZV9zaGlmdCgxLDApLGsud3JpdGVfc2hpZnQoMSwwKSxrLndyaXRlX3NoaWZ0KDIsMCksay53cml0ZV9zaGlmdCgyLDEwMCksay53cml0ZV9zaGlmdCgyLDApLGsud3JpdGVfc2hpZnQoMiwwKSxrLndyaXRlX3NoaWZ0KDIsMCksay53cml0ZV9zaGlmdCg0LDApLGt9KFIsaykpLFJbIiFmcmVl''@;'; put 'put ''emUiXSYmSHIoUywiQnJ0UGFuZSIsZnVuY3Rpb24gT2ooUyl7dmFyIFI9TmEoU1siIWZyZWV6ZSJdKSxrPWJuKDI5KTtyZXR1cm4gay53cml0ZV9zaGlmdCg4LFIuYywiZiIpLGsud3JpdGVfc2hpZnQoOCxSLnIsImYiKSxrLndyaXRlX3NoaWZ0KDQsUi5yKSxrLndyaXRlX3NoaWZ0KDQsUi5j''@;'; put 'put ''KSxrLndyaXRlX3NoaWZ0KDQsMCksay53cml0ZV9zaGlmdCgxLDMpLGt9KFIpKSxSWyIhc2VsIl0mJkhyKFMsIkJydFNlbCIsZnVuY3Rpb24gUGooUyxSKXt2YXIgaz1ibigzNiksRz1TLmNlbGw7aWYoIUcpe2lmKCFTLnJhbmdlKXRocm93IG5ldyBFcnJvcigiTXVzdCBzcGVjaWZ5IGEgc2Vs''@;'; put 'put ''ZWN0aW9uIGNlbGwgb3IgcmFuZ2UiKTtHPVhpKFNzKFMucmFuZ2UucmVwbGFjZSgvXHMuKiQvLCIiKSkucyl9dmFyIFE9InN0cmluZyI9PXR5cGVvZiBHP05hKEcpOkc7aWYoUil7dmFyIGFlPSJzdHJpbmciPT10eXBlb2YgUj9OYShSKTpSO2sud3JpdGVfc2hpZnQoNCxRLnI+PWFlLnImJlEu''@;'; put 'put ''Yz49YWUuYz8wOlEucj49YWUuciYmUS5jPGFlLmM/MjpRLnI8YWUuciYmUS5jPj1hZS5jPzE6Myl9ZWxzZSBrLndyaXRlX3NoaWZ0KDQsMyk7cmV0dXJuIGsud3JpdGVfc2hpZnQoNCxRLnIpLGsud3JpdGVfc2hpZnQoNCxRLmMpLGsud3JpdGVfc2hpZnQoNCwwKSxrLndyaXRlX3NoaWZ0KDQs''@;'; put 'put ''MSksay53cml0ZV9zaGlmdCg0LFEuciksay53cml0ZV9zaGlmdCg0LFEuciksay53cml0ZV9zaGlmdCg0LFEuYyksay53cml0ZV9zaGlmdCg0LFEuYyksa30oUlsiIXNlbCJdLFJbIiFmcmVlemUiXSkpLEhyKFMsIkJydEVuZFdzVmlldyIpLEhyKFMsIkJydEVuZFdzVmlld3MiKX0oUSxnZSxr''@;'; put 'put ''Lldvcmtib29rKSxmdW5jdGlvbiBZaihTLFIpeyFSfHwhUlsiIWNvbHMiXXx8KEhyKFMsIkJydEJlZ2luQ29sSW5mb3MiKSxSWyIhY29scyJdLmZvckVhY2goZnVuY3Rpb24oayxHKXtrJiZIcihTLCJCcnRDb2xJbmZvIixmdW5jdGlvbiBIaihTLFIsayl7bnVsbD09ayYmKGs9Ym4oMTgpKTt2''@;'; put 'put ''YXIgRz1sOChTLFIpO2sud3JpdGVfc2hpZnQoLTQsUyksay53cml0ZV9zaGlmdCgtNCxTKSxrLndyaXRlX3NoaWZ0KDQsMjU2KihHLndpZHRofHwxMCkpLGsud3JpdGVfc2hpZnQoNCwwKTt2YXIgUT0wO3JldHVybiBSLmhpZGRlbiYmKFF8PTEpLCJudW1iZXIiPT10eXBlb2YgRy53aWR0aCYm''@;'; put 'put ''KFF8PTIpLFIubGV2ZWwmJihRfD1SLmxldmVsPDw4KSxrLndyaXRlX3NoaWZ0KDIsUSksa30oRyxrKSl9KSxIcihTLCJCcnRFbmRDb2xJbmZvcyIpKX0oUSxnZSksZnVuY3Rpb24gWkQoUyxSLGssRyl7dmFyIFE9YWEoUlsiIXJlZiJdfHwiQTEiKSxnZT0iIixwZT1bXTtIcihTLCJCcnRCZWdp''@;'; put 'put ''blNoZWV0RGF0YSIpO3ZhciB5ZT1BcnJheS5pc0FycmF5KFIpLFBlPVEuZS5yO1JbIiFyb3dzIl0mJihQZT1NYXRoLm1heChRLmUucixSWyIhcm93cyJdLmxlbmd0aC0xKSk7Zm9yKHZhciBOZT1RLnMucjtOZTw9UGU7KytOZSl7Z2U9emkoTmUpLHBqKFMsUixRLE5lKTt2YXIgWWU9ITE7aWYo''@;'; put 'put ''TmU8PVEuZS5yKWZvcih2YXIgZXQ9US5zLmM7ZXQ8PVEuZS5jOysrZXQpe05lPT09US5zLnImJihwZVtldF09VG8oZXQpKTt2YXIgdXQ9eWU/KFJbTmVdfHxbXSlbZXRdOlJbcGVbZXRdK2dlXTtZZT0hIXV0JiZaaihTLHV0LE5lLGV0LEcsUixZZSl9fUhyKFMsIkJydEVuZFNoZWV0RGF0YSIp''@;'; put 'put ''fShRLGdlLDAsUiksZnVuY3Rpb24gU25lKFMsUil7UlsiIXByb3RlY3QiXSYmSHIoUywiQnJ0U2hlZXRQcm90ZWN0aW9uIixmdW5jdGlvbiB1YihTLFIpe3JldHVybiBudWxsPT1SJiYoUj1ibig2NikpLFIud3JpdGVfc2hpZnQoMixTLnBhc3N3b3JkP0l2KFMucGFzc3dvcmQpOjApLFIud3Jp''@;'; put 'put ''dGVfc2hpZnQoNCwxKSxbWyJvYmplY3RzIiwhMV0sWyJzY2VuYXJpb3MiLCExXSxbImZvcm1hdENlbGxzIiwhMF0sWyJmb3JtYXRDb2x1bW5zIiwhMF0sWyJmb3JtYXRSb3dzIiwhMF0sWyJpbnNlcnRDb2x1bW5zIiwhMF0sWyJpbnNlcnRSb3dzIiwhMF0sWyJpbnNlcnRIeXBlcmxpbmtzIiwh''@;'; put 'put ''MF0sWyJkZWxldGVDb2x1bW5zIiwhMF0sWyJkZWxldGVSb3dzIiwhMF0sWyJzZWxlY3RMb2NrZWRDZWxscyIsITFdLFsic29ydCIsITBdLFsiYXV0b0ZpbHRlciIsITBdLFsicGl2b3RUYWJsZXMiLCEwXSxbInNlbGVjdFVubG9ja2VkQ2VsbHMiLCExXV0uZm9yRWFjaChmdW5jdGlvbihrKXtS''@;'; put 'put ''LndyaXRlX3NoaWZ0KDQsa1sxXT9udWxsPT1TW2tbMF1dfHxTW2tbMF1dPzA6MTpudWxsIT1TW2tbMF1dJiZTW2tbMF1dPzA6MSl9KSxSfShSWyIhcHJvdGVjdCJdKSl9KFEsZ2UpLGZ1bmN0aW9uIFdEKFMsUixrLEcpe2lmKFJbIiFhdXRvZmlsdGVyIl0pe3ZhciBRPVJbIiFhdXRvZmlsdGVy''@;'; put 'put ''Il0sYWU9InN0cmluZyI9PXR5cGVvZiBRLnJlZj9RLnJlZjpvbyhRLnJlZik7ay5Xb3JrYm9va3x8KGsuV29ya2Jvb2s9e1NoZWV0czpbXX0pLGsuV29ya2Jvb2suTmFtZXN8fChrLldvcmtib29rLk5hbWVzPVtdKTt2YXIgZ2U9ay5Xb3JrYm9vay5OYW1lcyxwZT1TcyhhZSk7cGUucy5yPT1w''@;'; put 'put ''ZS5lLnImJihwZS5lLnI9U3MoUlsiIXJlZiJdKS5lLnIsYWU9b28ocGUpKTtmb3IodmFyIHllPTA7eWU8Z2UubGVuZ3RoOysreWUpe3ZhciBQZT1nZVt5ZV07aWYoIl94bG5tLl9GaWx0ZXJEYXRhYmFzZSI9PVBlLk5hbWUmJlBlLlNoZWV0PT1HKXtQZS5SZWY9IiciK2suU2hlZXROYW1lc1tH''@;'; put 'put ''XSsiJyEiK2FlO2JyZWFrfX15ZT09Z2UubGVuZ3RoJiZnZS5wdXNoKHtOYW1lOiJfeGxubS5fRmlsdGVyRGF0YWJhc2UiLFNoZWV0OkcsUmVmOiInIitrLlNoZWV0TmFtZXNbR10rIichIithZX0pLEhyKFMsIkJydEJlZ2luQUZpbHRlciIsY2YoYWEoYWUpKSksSHIoUywiQnJ0RW5kQUZpbHRl''@;'; put 'put ''ciIpfX0oUSxnZSxrLFMpLGZ1bmN0aW9uIFdqKFMsUil7IVJ8fCFSWyIhbWVyZ2VzIl18fChIcihTLCJCcnRCZWdpbk1lcmdlQ2VsbHMiLGZ1bmN0aW9uIE5EKFMsUil7cmV0dXJuIG51bGw9PVImJihSPWJuKDQpKSxSLndyaXRlX3NoaWZ0KDQsUyksUn0oUlsiIW1lcmdlcyJdLmxlbmd0aCkp''@;'; put 'put ''LFJbIiFtZXJnZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKGspe0hyKFMsIkJydE1lcmdlQ2VsbCIsXzgoaykpfSksSHIoUywiQnJ0RW5kTWVyZ2VDZWxscyIpKX0oUSxnZSksZnVuY3Rpb24gcWooUyxSKXtpZihSKXtIcihTLCJCcnRCZWdpbkRWYWxzIixmdW5jdGlvbiBkYihTLFIpe251bGw9PVIm''@;'; put 'put ''JihSPWJuKDE4KSksUi53cml0ZV9zaGlmdCgyLDApLFIud3JpdGVfc2hpZnQoNCwwKSxSLndyaXRlX3NoaWZ0KDQsMCksUi53cml0ZV9zaGlmdCg0LDApO2Zvcih2YXIgaz0wLEc9MDtHPFMubGVuZ3RoOysrRykoKFNbR118fHt9KS5yZWZ8fHt9KS5zJiZTW0ddLnJlZi5zLmM8MHx8KytrO3Jl''@;'; put 'put ''dHVybiBSLndyaXRlX3NoaWZ0KDQsayksUn0oUikpO2Zvcih2YXIgaz0wO2s8Ui5sZW5ndGg7KytrKSgoUltrXXx8e30pLnJlZnx8e30pLnMmJlJba10ucmVmLnMuYzwwfHxIcihTLCJCcnREVmFsIixVRChSW2tdKSk7SHIoUywiQnJ0RW5kRFZhbHMiKX19KFEsZ2VbIiF2YWxpZGF0aW9ucyJd''@;'; put 'put ''KSxmdW5jdGlvbiBoYihTLFIsayl7UlsiIWxpbmtzIl0uZm9yRWFjaChmdW5jdGlvbihHKXtpZihHWzFdLlRhcmdldCl7dmFyIFE9RXIoaywtMSxHWzFdLlRhcmdldC5yZXBsYWNlKC8jLiokLywiIikscW8uSExJTkspO0hyKFMsIkJydEhMaW5rIixmdW5jdGlvbiB3OChTLFIpe3ZhciBrPWJu''@;'; put 'put ''KDUwKzQqKFNbMV0uVGFyZ2V0Lmxlbmd0aCsoU1sxXS5Ub29sdGlwfHwiIikubGVuZ3RoKSk7Y2Yoe3M6TmEoU1swXSksZTpOYShTWzBdKX0sayksYTUoInJJZCIrUixrKTt2YXIgRz1TWzFdLlRhcmdldC5pbmRleE9mKCIjIik7cmV0dXJuIFBjKCgtMT09Rz8iIjpTWzFdLlRhcmdldC5zbGlj''@;'; put 'put ''ZShHKzEpKXx8IiIsayksUGMoU1sxXS5Ub29sdGlwfHwiIixrKSxQYygiIixrKSxrLnNsaWNlKDAsay5sKX0oRyxRKSl9fSksZGVsZXRlIFJbIiFsaW5rcyJdfShRLGdlLEcpLGdlWyIhbWFyZ2lucyJdJiZIcihRLCJCcnRNYXJnaW5zIixmdW5jdGlvbiBWaihTLFIpe3JldHVybiBudWxsPT1S''@;'; put 'put ''JiYoUj1ibig0OCkpLFkzKFMpLGpELmZvckVhY2goZnVuY3Rpb24oayl7THUoU1trXSxSKX0pLFJ9KGdlWyIhbWFyZ2lucyJdKSksKCFSfHxSLmlnbm9yZUVDfHxudWxsPT1SLmlnbm9yZUVDKSYmZnVuY3Rpb24gajUoUyxSKXshUnx8IVJbIiFyZWYiXXx8KEhyKFMsIkJydEJlZ2luQ2VsbEln''@;'; put 'put ''bm9yZUVDcyIpLEhyKFMsIkJydENlbGxJZ25vcmVFQyIsZnVuY3Rpb24gQmooUyl7dmFyIFI9Ym4oMjQpO3JldHVybiBSLndyaXRlX3NoaWZ0KDQsNCksUi53cml0ZV9zaGlmdCg0LDEpLGNmKFMsUiksUn0oYWEoUlsiIXJlZiJdKSkpLEhyKFMsIkJydEVuZENlbGxJZ25vcmVFQ3MiKSl9KFEs''@;'; put 'put ''Z2UpLGZ1bmN0aW9uIEdqKFMsUixrLEcpe2lmKFJbIiFjb21tZW50cyJdLmxlbmd0aD4wKXt2YXIgUT1FcihHLC0xLCIuLi9kcmF3aW5ncy92bWxEcmF3aW5nIisoaysxKSsiLnZtbCIscW8uVk1MKTtIcihTLCJCcnRMZWdhY3lEcmF3aW5nIixhNSgicklkIitRKSksUlsiIWxlZ2FjeSJdPVF9''@;'; put 'put ''fShRLGdlLFMsRyksSHIoUSwiQnJ0RW5kU2hlZXQiKSxRLmVuZCgpfWZ1bmN0aW9uIFM4KFMpe3ZhciBHLFI9W10saz1TLm1hdGNoKC9ePGM6bnVtQ2FjaGU+Lyk7KFMubWF0Y2goLzxjOnB0IGlkeD0iKFxkKikiPiguKj8pPFwvYzpwdD4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihhZSl7''@;'; put 'put ''dmFyIGdlPWFlLm1hdGNoKC88YzpwdCBpZHg9IihcZCo/KSI+PGM6dj4oLiopPFwvYzp2PjxcL2M6cHQ+Lyk7Z2UmJihSWytnZVsxXV09az8rZ2VbMl06Z2VbMl0pfSk7dmFyIFE9SnIoKFMubWF0Y2goLzxjOmZvcm1hdENvZGU+KFtcc1xTXSo/KTxcL2M6Zm9ybWF0Q29kZT4vKXx8WyIiLCJH''@;'; put 'put ''ZW5lcmFsIl0pWzFdKTtyZXR1cm4oUy5tYXRjaCgvPGM6Zj4oLio/KTxcL2M6Zj4vZ20pfHxbXSkuZm9yRWFjaChmdW5jdGlvbihhZSl7Rz1hZS5yZXBsYWNlKC88Lio/Pi9nLCIiKX0pLFtSLFEsR119cW8uQ0hBUlQ9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9vZmZpY2VE''@;'; put 'put ''b2N1bWVudC8yMDA2L3JlbGF0aW9uc2hpcHMvY2hhcnQiLHFvLkNIQVJURVg9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMTQvcmVsYXRpb25zaGlwcy9jaGFydEV4Ijt2YXIgSmo9LzwoPzpcdys6KT9jaGFydD4oW1xzXFNdKj8pPFwvKD86XHcrOik/Y2hhcnQ+LyxJ''@;'; put 'put ''Uz0vPCg/Olx3KzopP3Bsb3RBcmVhPihbXHNcU10qPyk8XC8oPzpcdys6KT9wbG90QXJlYT4vLE1uZT0vPCg/Olx3KzopP2xlZ2VuZD4oW1xzXFNdKj8pPFwvKD86XHcrOik/bGVnZW5kPi8sWUQ9LzwoPzpcdys6KT90aXRsZT4oW1xzXFNdKj8pPFwvKD86XHcrOik/dGl0bGU+LztmdW5jdGlv''@;'; put 'put ''biBmMihTLFIsayxHLFEsYWUsZ2UscGUpe3ZhciB5ZT1hZXx8eyIhdHlwZSI6ImNoYXJ0In07aWYoIVMpcmV0dXJuIGFlO2dlJiZnZS5BbmNob3ImJih5ZVsiIXBvcyJdPUQ1KGdlLkFuY2hvcixwZSkseWVbIiFwb3NUeXBlIl09Z2UuQW5jaG9yLnR5cGUucmVwbGFjZSgvQW5jaG9yLywiIiks''@;'; put 'put ''eWVbIiFhYnNwb3MiXT1ENShnZS5BbmNob3IscGUpLHllWyIhcmVscG9zIl09VEMoZ2UuQW5jaG9yLHBlKSkseWVbIiFwbG90Il09W107dmFyIFBlPSIiLE5lPSIiLFllPVMubWF0Y2goSmopO1llPyhQZT1TLnNsaWNlKDAsWWUuaW5kZXgpLE5lPVMuc2xpY2UoWWUuaW5kZXgrWWVbMF0ubGVu''@;'; put 'put ''Z3RoKSk6UGU9TmU9Uzt2YXIgZXQ9W10sdXQ9UGUubWF0Y2goLzxjOmxhbmcuKj8+Lyl8fFMubWF0Y2goLzxjOmxhbmcuKj8+Lyl8fE5lLm1hdGNoKC88YzpsYW5nLio/Pi8pO3JldHVybiB1dCYmKHllWyIhbGFuZyJdPShwcih1dFswXSl8fHt9KS52YWx8fCJlbi1VUyIpLFllJiYoKGV0PVll''@;'; put 'put ''WzFdLm1hdGNoKFlEKSkmJmZ1bmN0aW9uIFhqKFMsUil7dmFyIGs9IiI7Uy5tYXRjaCgvPGM6cmljaD4vKSYmUy5yZXBsYWNlKC88YTp0PihbXHNcU10qPyk8XC9hOnQ+L2csZnVuY3Rpb24oRyxRKXtrKz1RfSksUlsiIXRpdGxlIl09a3x8IkNoYXJ0IFRpdGxlIn0oZXRbMV0seWUpLGZ1bmN0''@;'; put 'put ''aW9uIHhuZShTLFIpe2lmKFMpe3ZhciBrPTAsRz0wLFE9IkEiLGFlPXtzOntyOjJlNixjOjJlNn0sZTp7cjowLGM6MH19O1MucmVwbGFjZShHRCxmdW5jdGlvbihnZSxwZSl7dmFyIHllPXt0OnBlLGM6ayx3OjAsc2VyOltdfSxQZT1bXSxOZT0oZ2UubWF0Y2goLzxjOnNlci8pfHxbXSkuaW5k''@;'; put 'put ''ZXgsWWU9TmU/Z2Uuc2xpY2UoMCxOZSk6Z2U7InNjYXR0ZXIiPT1wZSYmKFBlPWdlLm1hdGNoKC88YzpzY2F0dGVyU3R5bGUoW15cLz5dKilcLz4vbSkpJiZwcihQZVswXSksImJhciI9PXBlJiYoUGU9Z2UubWF0Y2goLzxjOmJhckRpcihbXlwvPl0qKVwvPi9tKSkmJih5ZS5iYXJEaXI9ImJh''@;'; put 'put ''ciI9PXByKFBlWzBdKS52YWw/ImgiOiJ2IiksKFBlPVllLm1hdGNoKC88Yzpncm91cGluZyhbXlwvPl0qKVwvPi9tKSkmJih5ZS5ncm91cGluZz1wcihQZVswXSkudmFsfHwic3RhbmRhcmQiKSwoZ2UubWF0Y2goUWopfHxbXSkuZm9yRWFjaChmdW5jdGlvbih1dCl7dmFyIEV0PVtdLG90PXt9''@;'; put 'put ''LGJ0PVtdO2lmKHV0Lm1hdGNoKC88Yzp0eD4vKSl7dmFyIEJ0PVM4KCh1dC5tYXRjaCgvPGM6dHg+KFtcc1xTXSo/KTxcL2M6dHg+Lyl8fFtdKVsxXXx8IiIpfHxbXTtCdFswXSYmQnRbMF1bMF0mJihvdC5uYW1lPUJ0WzBdWzBdKSxCdFsyXSYmKG90Lm5hbWVyZWY9QnRbMl0pfVsieFZhbCIs''@;'; put 'put ''InlWYWwiLCJjYXQiLCJ2YWwiLCJidWJibGVTaXplIl0uZm9yRWFjaChmdW5jdGlvbihrdCl7dmFyIEt0LE90PXV0Lm1hdGNoKG5ldyBSZWdFeHAoIjxjOiIra3QrIj5bXFxzXFxTXSo/PFxcL2M6IitrdCsiPiIsImdtIikpO090JiYoKE90WzBdLm1hdGNoKC88YzpmPiguKj8pPFwvYzpmPi9n''@;'; put 'put ''bSl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFRuKXtLdD1Ubi5yZXBsYWNlKC88Lio/Pi9nLCIiKX0pLChPdFswXS5tYXRjaCgvPGM6KD86XHcqKUNhY2hlPltcc1xTXSo/PFwvYzooPzpcdyopQ2FjaGU+L2dtKXx8W10pLmZvckVhY2goZnVuY3Rpb24oVG4pe3ZhciBpcj1TOChUbik7YWUucy5y''@;'; put 'put ''PWFlLnMuYz0wLGFlLmUuYz1rLFE9VG8oayksaXJbMF0uZm9yRWFjaChmdW5jdGlvbihTbixzcil7UltRK3ppKHNyKV09e3Q6Im51bWJlciI9PXR5cGVvZiBTbj8ibiI6InMiLHY6U24sejppclsxXX0sRz1zcn0pLGFlLmUucjxHJiYoYWUuZS5yPUcpLCsrayx5ZS53KyssRXQucHVzaChrdCks''@;'; put 'put ''KGlyWzJdfHxLdCkmJmJ0LnB1c2goaXJbMl18fEt0KSwidmFsIj09a3QmJihvdC56PWlyWzFdfHwiR2VuZXJhbCIpfSkpfSksKFBlPWdlLm1hdGNoKC88YzpzbW9vdGgoW15cLz5dKilcLz4vbSkpJiYob3Quc21vb3RoPW51bGw9PXByKFBlWzBdKS52YWx8fGVpKHByKFBlWzBdKS52YWwpKSxv''@;'; put 'put ''dC5jb2xzPUV0LG90LnJhbmdlcz1idCx5ZS5zZXIucHVzaChvdCl9KSwiZG91Z2hudXQiPT1wZSYmKFBlPWdlLm1hdGNoKC88Yzpob2xlU2l6ZShbXlwvPl0qKVwvPi9tKSkmJih5ZS5ob2xlPShwcihQZVswXSkudmFsfHwxMCkvMTAwKSxSWyIhcGxvdCJdLnB1c2goeWUpfSksaz4wJiYoUlsi''@;'; put 'put ''IXJlZiJdPW9vKGFlKSl9fSgoWWVbMV0ubWF0Y2goSVMpfHxbXSlbMV0seWUpLG51bGwhPShldD1ZZVsxXS5tYXRjaChNbmUpKSYmZnVuY3Rpb24gRWEoUyxSKXt2YXIgaztSWyIhbGVnZW5kIl09e3BvczoiciJ9LChrPVMubWF0Y2goLzxjOmxlZ2VuZFBvcyhbXlwvPl0qKVwvPi9tKSkmJihS''@;'; put 'put ''WyIhbGVnZW5kIl0ucG9zPXByKGtbMF0pLnZhbHx8InIiKX0oZXRbMF0seWUpKSx5ZX12YXIgR0Q9LzxjOigoPzphcmVhfGxpbmV8c3RvY2t8cmFkYXJ8c2NhdHRlcnxwaWV8ZG91Z2hudXR8YmFyfG9mUGllfHN1cmZhY2V8YnViYmxlKSg/OjNEKT8pQ2hhcnRbXj5dKj4oW1xzXFNdKj8pPFwv''@;'; put 'put ''YzooPzphcmVhfGxpbmV8c3RvY2t8cmFkYXJ8c2NhdHRlcnxwaWV8ZG91Z2hudXR8YmFyfG9mUGllfHN1cmZhY2V8YnViYmxlKSg/OjNEKT9DaGFydD4vZ20sUWo9LzxjOnNlcj4oW1xzXFNdKj8pPFwvYzpzZXI+L2dtO3FvLkNTPSJodHRwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcv''@;'; put 'put ''b2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzL2NoYXJ0c2hlZXQiO3ZhciBZbz1GcigiY2hhcnRzaGVldCIsbnVsbCx7eG1sbnM6R2kubWFpblswXSwieG1sbnM6ciI6R2kucn0pO2Z1bmN0aW9uIFJTKFMsUixrLEcpe3ZhciBRPVtJaSxZb107cmV0dXJuIFEucHVzaCgiPHNoZWV0''@;'; put 'put ''UHIvPiIpLFEucHVzaCgnPHNoZWV0Vmlld3M+PHNoZWV0VmlldyB6b29tU2NhbGU9IjEwMCIgd29ya2Jvb2tWaWV3SWQ9IjAiIHpvb21Ub0ZpdD0iMSIvPjwvc2hlZXRWaWV3cz4nKSxRW1EubGVuZ3RoXT1GcigiZHJhd2luZyIsbnVsbCx7InI6aWQiOiJySWQxIn0pLEVyKEcsLTEsIi4uL2Ry''@;'; put 'put ''YXdpbmdzL2RyYXdpbmciKyhTKzEpKyIueG1sIixxby5EUkFXKSxRLmxlbmd0aD4yJiYoUVtRLmxlbmd0aF09IjwvY2hhcnRzaGVldD4iLFFbMV09UVsxXS5yZXBsYWNlKCIvPiIsIj4iKSksUS5qb2luKCIiKX1mdW5jdGlvbiBMUygpe3ZhciBTPW1pKCk7cmV0dXJuIEhyKFMsIkJydEJlZ2lu''@;'; put 'put ''U2hlZXQiKSxIcihTLCJCcnRFbmRTaGVldCIpLFMuZW5kKCl9dmFyIGZiPVtbImFsbG93UmVmcmVzaFF1ZXJ5IiwhMSwiYm9vbCJdLFsiYXV0b0NvbXByZXNzUGljdHVyZXMiLCEwLCJib29sIl0sWyJiYWNrdXBGaWxlIiwhMSwiYm9vbCJdLFsiY2hlY2tDb21wYXRpYmlsaXR5IiwhMSwiYm9v''@;'; put 'put ''bCJdLFsiQ29kZU5hbWUiLCIiXSxbImRhdGUxOTA0IiwhMSwiYm9vbCJdLFsiZGVmYXVsdFRoZW1lVmVyc2lvbiIsMCwiaW50Il0sWyJmaWx0ZXJQcml2YWN5IiwhMSwiYm9vbCJdLFsiaGlkZVBpdm90RmllbGRMaXN0IiwhMSwiYm9vbCJdLFsicHJvbXB0ZWRTb2x1dGlvbnMiLCExLCJib29s''@;'; put 'put ''Il0sWyJwdWJsaXNoSXRlbXMiLCExLCJib29sIl0sWyJyZWZyZXNoQWxsQ29ubmVjdGlvbnMiLCExLCJib29sIl0sWyJzYXZlRXh0ZXJuYWxMaW5rVmFsdWVzIiwhMCwiYm9vbCJdLFsic2hvd0JvcmRlclVuc2VsZWN0ZWRUYWJsZXMiLCEwLCJib29sIl0sWyJzaG93SW5rQW5ub3RhdGlvbiIs''@;'; put 'put ''ITAsImJvb2wiXSxbInNob3dPYmplY3RzIiwiYWxsIl0sWyJzaG93UGl2b3RDaGFydEZpbHRlciIsITEsImJvb2wiXSxbInVwZGF0ZUxpbmtzIiwidXNlclNldCJdXSwkRD1bWyJhY3RpdmVUYWIiLDAsImludCJdLFsiYXV0b0ZpbHRlckRhdGVHcm91cGluZyIsITAsImJvb2wiXSxbImZpcnN0''@;'; put 'put ''U2hlZXQiLDAsImludCJdLFsibWluaW1pemVkIiwhMSwiYm9vbCJdLFsic2hvd0hvcml6b250YWxTY3JvbGwiLCEwLCJib29sIl0sWyJzaG93U2hlZXRUYWJzIiwhMCwiYm9vbCJdLFsic2hvd1ZlcnRpY2FsU2Nyb2xsIiwhMCwiYm9vbCJdLFsidGFiUmF0aW8iLDYwMCwiaW50Il0sWyJ2aXNp''@;'; put 'put ''YmlsaXR5IiwidmlzaWJsZSJdXSxLRD1bXSxyej1bWyJjYWxjQ29tcGxldGVkIiwidHJ1ZSJdLFsiY2FsY01vZGUiLCJhdXRvIl0sWyJjYWxjT25TYXZlIiwidHJ1ZSJdLFsiY29uY3VycmVudENhbGMiLCJ0cnVlIl0sWyJmdWxsQ2FsY09uTG9hZCIsImZhbHNlIl0sWyJmdWxsUHJlY2lzaW9u''@;'; put 'put ''IiwidHJ1ZSJdLFsiaXRlcmF0ZSIsImZhbHNlIl0sWyJpdGVyYXRlQ291bnQiLCIxMDAiXSxbIml0ZXJhdGVEZWx0YSIsIjAuMDAxIl0sWyJyZWZNb2RlIiwiQTEiXV07ZnVuY3Rpb24gcUQoUyxSKXtmb3IodmFyIGs9MDtrIT1TLmxlbmd0aDsrK2spZm9yKHZhciBHPVNba10sUT0wO1EhPVIu''@;'; put 'put ''bGVuZ3RoOysrUSl7dmFyIGFlPVJbUV07aWYobnVsbD09R1thZVswXV0pR1thZVswXV09YWVbMV07ZWxzZSBzd2l0Y2goYWVbMl0pe2Nhc2UiYm9vbCI6InN0cmluZyI9PXR5cGVvZiBHW2FlWzBdXSYmKEdbYWVbMF1dPWVpKEdbYWVbMF1dKSk7YnJlYWs7Y2FzZSJpbnQiOiJzdHJpbmciPT10''@;'; put 'put ''eXBlb2YgR1thZVswXV0mJihHW2FlWzBdXT1wYXJzZUludChHW2FlWzBdXSwxMCkpfX19ZnVuY3Rpb24gJDMoUyxSKXtmb3IodmFyIGs9MDtrIT1SLmxlbmd0aDsrK2spe3ZhciBHPVJba107aWYobnVsbD09U1tHWzBdXSlTW0dbMF1dPUdbMV07ZWxzZSBzd2l0Y2goR1syXSl7Y2FzZSJib29s''@;'; put 'put ''Ijoic3RyaW5nIj09dHlwZW9mIFNbR1swXV0mJihTW0dbMF1dPWVpKFNbR1swXV0pKTticmVhaztjYXNlImludCI6InN0cmluZyI9PXR5cGVvZiBTW0dbMF1dJiYoU1tHWzBdXT1wYXJzZUludChTW0dbMF1dLDEwKSl9fX1mdW5jdGlvbiBPUyhTKXskMyhTLldCUHJvcHMsZmIpLCQzKFMuQ2Fs''@;'; put 'put ''Y1ByLHJ6KSxxRChTLldCVmlldywkRCkscUQoUy5TaGVldHMsS0QpLHM4LmRhdGUxOTA0PWVpKFMuV0JQcm9wcy5kYXRlMTkwNCl9dmFyIGl6PSJdWyo/L1xcIi5zcGxpdCgiIik7ZnVuY3Rpb24gcGIoUyxSKXtpZihTLmxlbmd0aD4zMSl7aWYoUilyZXR1cm4hMTt0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''IlNoZWV0IG5hbWVzIGNhbm5vdCBleGNlZWQgMzEgY2hhcnMiKX12YXIgaz0hMDtyZXR1cm4gaXouZm9yRWFjaChmdW5jdGlvbihHKXtpZigtMSE9Uy5pbmRleE9mKEcpKXtpZighUil0aHJvdyBuZXcgRXJyb3IoIlNoZWV0IG5hbWUgY2Fubm90IGNvbnRhaW4gOiBcXCAvID8gKiBbIF0iKTtr''@;'; put 'put ''PSExfX0pLGt9dmFyIE04PS88XHcrOndvcmtib29rLyxRRD1Gcigid29ya2Jvb2siLG51bGwse3htbG5zOkdpLm1haW5bMF0sInhtbG5zOnIiOkdpLnJ9KTtmdW5jdGlvbiB4OChTLFIpe3ZhciBrPVJ8fHt9LEc9W0lpXTtHW0cubGVuZ3RoXT1RRDt2YXIgUT1TLldvcmtib29rJiYoUy5Xb3Jr''@;'; put 'put ''Ym9vay5OYW1lc3x8W10pLmxlbmd0aD4wO1MuV29ya2Jvb2smJlMuV29ya2Jvb2suTW9kaWZ5JiYoR1tHLmxlbmd0aF09ZnVuY3Rpb24gSzMoUyl7dmFyIFI9e307cmV0dXJuIFMud2FybiYmKFIucmVhZE9ubHlSZWNvbW1lbmRlZD0xKSxSLnVzZXJOYW1lPVMudXNlcnx8IlNoZWV0IEpTIixT''@;'; put 'put ''LmVuY3J5cHRpb24mJihTLmVuY3J5cHRpb24uYWxnbyYmKFIuYWxnb3JpdGhtTmFtZT1TLmVuY3J5cHRpb24uYWxnbyksUy5lbmNyeXB0aW9uLmhhc2gmJihSLmhhc2hWYWx1ZT1TLmVuY3J5cHRpb24uaGFzaCksUy5lbmNyeXB0aW9uLnNhbHQmJihSLnNhbHRWYWx1ZT1TLmVuY3J5cHRpb24u''@;'; put 'put ''c2FsdCksUy5lbmNyeXB0aW9uLnNwaW4mJihSLnNwaW5Db3VudD1TLmVuY3J5cHRpb24uc3BpbikpLEZyKCJmaWxlU2hhcmluZyIsbnVsbCxSKX0oUy5Xb3JrYm9vay5Nb2RpZnkpKTt2YXIgYWU9e2NvZGVOYW1lOiJUaGlzV29ya2Jvb2sifTtTLldvcmtib29rJiZTLldvcmtib29rLldCUHJv''@;'; put 'put ''cHMmJihmYi5mb3JFYWNoKGZ1bmN0aW9uKFBlKXtudWxsIT1TLldvcmtib29rLldCUHJvcHNbUGVbMF1dJiZTLldvcmtib29rLldCUHJvcHNbUGVbMF1dIT1QZVsxXSYmKGFlW1BlWzBdXT1TLldvcmtib29rLldCUHJvcHNbUGVbMF1dKX0pLFMuV29ya2Jvb2suV0JQcm9wcy5Db2RlTmFtZSYm''@;'; put 'put ''KGFlLmNvZGVOYW1lPVMuV29ya2Jvb2suV0JQcm9wcy5Db2RlTmFtZSxkZWxldGUgYWUuQ29kZU5hbWUpKSxHW0cubGVuZ3RoXT1Gcigid29ya2Jvb2tQciIsbnVsbCxhZSksUy5Xb3JrYm9vayYmUy5Xb3JrYm9vay5Qcm90ZWN0aW9uJiYoR1tHLmxlbmd0aF09ZnVuY3Rpb24gZ2IoUyl7dmFy''@;'; put 'put ''IFI9e307cmV0dXJuIFMubG9ja1N0cnVjdHVyZSYmKFIubG9ja1N0cnVjdHVyZT0xKSxTLmxvY2tXaW5kb3dzJiYoUi5sb2NrV2luZG93cz0xKSxTLmVuY3J5cHRpb24mJihTLmVuY3J5cHRpb24uYWxnbyYmKFIud29ya2Jvb2tBbGdvcml0aG1OYW1lPVMuZW5jcnlwdGlvbi5hbGdvKSxTLmVu''@;'; put 'put ''Y3J5cHRpb24uaGFzaCYmKFIud29ya2Jvb2tIYXNoVmFsdWU9Uy5lbmNyeXB0aW9uLmhhc2gpLFMuZW5jcnlwdGlvbi5zYWx0JiYoUi53b3JrYm9va1NhbHRWYWx1ZT1TLmVuY3J5cHRpb24uc2FsdCksUy5lbmNyeXB0aW9uLnNwaW4mJihSLndvcmtib29rU3BpbkNvdW50PVMuZW5jcnlwdGlv''@;'; put 'put ''bi5zcGluKSksRnIoIndvcmtib29rUHJvdGVjdGlvbiIsbnVsbCxSKX0oUy5Xb3JrYm9vay5Qcm90ZWN0aW9uKSk7dmFyIGdlPVMuV29ya2Jvb2smJlMuV29ya2Jvb2suU2hlZXRzfHxbXSxwZT0wO2lmKGdlJiZnZVswXSYmZ2VbMF0uSGlkZGVuKXtmb3IoR1tHLmxlbmd0aF09Ijxib29rVmll''@;'; put 'put ''d3M+IixwZT0wO3BlIT1TLlNoZWV0TmFtZXMubGVuZ3RoJiZnZVtwZV0mJmdlW3BlXS5IaWRkZW47KytwZSk7cGU9PVMuU2hlZXROYW1lcy5sZW5ndGgmJihwZT0wKSxHW0cubGVuZ3RoXT0nPHdvcmtib29rVmlldyBmaXJzdFNoZWV0PSInK3BlKyciIGFjdGl2ZVRhYj0iJytwZSsnIi8+JyxH''@;'; put 'put ''W0cubGVuZ3RoXT0iPC9ib29rVmlld3M+In1mb3IoR1tHLmxlbmd0aF09IjxzaGVldHM+IixwZT0wO3BlIT1TLlNoZWV0TmFtZXMubGVuZ3RoOysrcGUpe3ZhciB5ZT17bmFtZTpPcihTLlNoZWV0TmFtZXNbcGVdLnNsaWNlKDAsMzEpKX07aWYoeWUuc2hlZXRJZD0iIisocGUrMSkseWVbInI6''@;'; put 'put ''aWQiXT0icklkIisocGUrMSksZ2VbcGVdKXN3aXRjaChnZVtwZV0uSGlkZGVuKXtjYXNlIDE6eWUuc3RhdGU9ImhpZGRlbiI7YnJlYWs7Y2FzZSAyOnllLnN0YXRlPSJ2ZXJ5SGlkZGVuIn1HW0cubGVuZ3RoXT1Gcigic2hlZXQiLG51bGwseWUpfXJldHVybiBHW0cubGVuZ3RoXT0iPC9zaGVl''@;'; put 'put ''dHM+IixTLkV4dGVybmFsV0ImJlMuRXh0ZXJuYWxXQi5sZW5ndGgmJihHW0cubGVuZ3RoXT0iPGV4dGVybmFsUmVmZXJlbmNlcz4iLChTLkV4dGVybmFsV0J8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKFBlLE5lKXt2YXIgWWU9RXIoay53YnJlbHMsLTEsImV4dGVybmFsTGlua3MvZXh0ZXJuYWxM''@;'; put 'put ''aW5rIisoTmUrMSkrIi54bWwiLHFvLlhMSU5LKTtHW0cubGVuZ3RoXT0nPGV4dGVybmFsUmVmZXJlbmNlIHI6aWQ9InJJZCcrWWUrJyIvPid9KSxHW0cubGVuZ3RoXT0iPC9leHRlcm5hbFJlZmVyZW5jZXM+IiksUSYmKEdbRy5sZW5ndGhdPSI8ZGVmaW5lZE5hbWVzPiIsUy5Xb3JrYm9vayYm''@;'; put 'put ''Uy5Xb3JrYm9vay5OYW1lcyYmUy5Xb3JrYm9vay5OYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKFBlKXt2YXIgTmU9e25hbWU6UGUuTmFtZX07UGUuQ29tbWVudCYmKE5lLmNvbW1lbnQ9UGUuQ29tbWVudCksbnVsbCE9UGUuU2hlZXQmJihOZS5sb2NhbFNoZWV0SWQ9IiIrUGUuU2hlZXQpLFBlLkhp''@;'; put 'put ''ZGRlbiYmKE5lLmhpZGRlbj0iMSIpLFBlLlJlZiYmKEdbRy5sZW5ndGhdPUZyKCJkZWZpbmVkTmFtZSIsT3IoUGUuUmVmKSxOZSkpfSksR1tHLmxlbmd0aF09IjwvZGVmaW5lZE5hbWVzPiIpLGsmJmsucGl2b3RzJiZrLnBpdm90cy5sZW5ndGg+MCYmKEcucHVzaCgiPHBpdm90Q2FjaGVzPiIp''@;'; put 'put ''LGsucGl2b3RzLmZvckVhY2goZnVuY3Rpb24oUGUsTmUpe0cucHVzaCgnPHBpdm90Q2FjaGUgY2FjaGVJZD0iJysoTmUrMSkrJyIgcjppZD0icklkJytQZVsyXSsnIi8+Jyl9KSxHLnB1c2goIjwvcGl2b3RDYWNoZXM+IikpLEcubGVuZ3RoPjImJihHW0cubGVuZ3RoXT0iPC93b3JrYm9vaz4i''@;'; put 'put ''LEdbMV09R1sxXS5yZXBsYWNlKCIvPiIsIj4iKSksRy5qb2luKCIiKX1mdW5jdGlvbiBheihTLFIpe3JldHVybiBSfHwoUj1ibigxMjcpKSxSLndyaXRlX3NoaWZ0KDQsUy5IaWRkZW4pLFIud3JpdGVfc2hpZnQoNCxTLmlUYWJJRCksYTUoUy5zdHJSZWxJRCxSKSxQYyhTLm5hbWUuc2xpY2Uo''@;'; put 'put ''MCwzMSksUiksUi5sZW5ndGg+Ui5sP1Iuc2xpY2UoMCxSLmwpOlJ9ZnVuY3Rpb24gcTMoUyxSKXt2YXIgaz17fTtyZXR1cm4gUy5yZWFkX3NoaWZ0KDQpLGsuQXJjaElEPVMucmVhZF9zaGlmdCg0KSxTLmwrPVItOCxrfWZ1bmN0aW9uIHZiKFMsUil7dmFyIGs9bWkoKTtyZXR1cm4gSHIoaywi''@;'; put 'put ''QnJ0QmVnaW5Cb29rIiksSHIoaywiQnJ0RmlsZVZlcnNpb24iLGZ1bmN0aW9uIHRJKFMsUil7Unx8KFI9Ym4oMTI3KSk7Zm9yKHZhciBrPTA7NCE9azsrK2spUi53cml0ZV9zaGlmdCg0LDApO3JldHVybiBQYygiU2hlZXRKUyIsUiksUGMody52ZXJzaW9uLFIpLFBjKHcudmVyc2lvbixSKSxQ''@;'; put 'put ''YygiNzI2MiIsUiksUi5sZW5ndGg+Ui5sP1Iuc2xpY2UoMCxSLmwpOlJ9KCkpLEhyKGssIkJydFdiUHJvcCIsZnVuY3Rpb24gZUkoUyxSKXtSfHwoUj1ibig3MikpO3ZhciBrPTA7cmV0dXJuIFMmJlMuZmlsdGVyUHJpdmFjeSYmKGt8PTgpLFIud3JpdGVfc2hpZnQoNCxrKSxSLndyaXRlX3No''@;'; put 'put ''aWZ0KDQsMCkscjUoUyYmUy5Db2RlTmFtZXx8IlRoaXNXb3JrYm9vayIsUiksUi5zbGljZSgwLFIubCl9KFMuV29ya2Jvb2smJlMuV29ya2Jvb2suV0JQcm9wc3x8bnVsbCkpLGZ1bmN0aW9uIHN6KFMsUil7aWYoUi5Xb3JrYm9vayYmUi5Xb3JrYm9vay5TaGVldHMpe2Zvcih2YXIgaz1SLldv''@;'; put 'put ''cmtib29rLlNoZWV0cyxHPTAsUT0tMSxhZT0tMTtHPGsubGVuZ3RoOysrRykha1tHXXx8IWtbR10uSGlkZGVuJiYtMT09UT9RPUc6MT09a1tHXS5IaWRkZW4mJi0xPT1hZSYmKGFlPUcpO2FlPlF8fChIcihTLCJCcnRCZWdpbkJvb2tWaWV3cyIpLEhyKFMsIkJydEJvb2tWaWV3IixmdW5jdGlv''@;'; put 'put ''biBuSShTLFIpe3JldHVybiBSfHwoUj1ibigyOSkpLFIud3JpdGVfc2hpZnQoLTQsMCksUi53cml0ZV9zaGlmdCgtNCw0NjApLFIud3JpdGVfc2hpZnQoNCwyODgwMCksUi53cml0ZV9zaGlmdCg0LDE3NjAwKSxSLndyaXRlX3NoaWZ0KDQsNTAwKSxSLndyaXRlX3NoaWZ0KDQsUyksUi53cml0''@;'; put 'put ''ZV9zaGlmdCg0LFMpLFIud3JpdGVfc2hpZnQoMSwxMjApLFIubGVuZ3RoPlIubD9SLnNsaWNlKDAsUi5sKTpSfShRKSksSHIoUywiQnJ0RW5kQm9va1ZpZXdzIikpfX0oayxTKSxmdW5jdGlvbiBtYihTLFIpe0hyKFMsIkJydEJlZ2luQnVuZGxlU2hzIik7Zm9yKHZhciBrPTA7ayE9Ui5TaGVl''@;'; put 'put ''dE5hbWVzLmxlbmd0aDsrK2spSHIoUywiQnJ0QnVuZGxlU2giLGF6KHtIaWRkZW46Ui5Xb3JrYm9vayYmUi5Xb3JrYm9vay5TaGVldHMmJlIuV29ya2Jvb2suU2hlZXRzW2tdJiZSLldvcmtib29rLlNoZWV0c1trXS5IaWRkZW58fDAsaVRhYklEOmsrMSxzdHJSZWxJRDoicklkIisoaysxKSxu''@;'; put 'put ''YW1lOlIuU2hlZXROYW1lc1trXX0pKTtIcihTLCJCcnRFbmRCdW5kbGVTaHMiKX0oayxTKSxIcihrLCJCcnRFbmRCb29rIiksay5lbmQoKX1mdW5jdGlvbiBySShTLFIsayxHLFEpe3JldHVybigiLmJpbiI9PT1SLnNsaWNlKC00KT96NTpJRCkoUyxrLEcsUSl9ZnVuY3Rpb24gaUkoUyxSLGss''@;'; put 'put ''RyxRKXtyZXR1cm4oIi5iaW4iPT09Ui5zbGljZSgtNCk/TFM6UlMpKFMsayxHLFEpfWZ1bmN0aW9uIG9JKFMsUixrKXtyZXR1cm4oIi5iaW4iPT09Ui5zbGljZSgtNCk/bms6RXYpKFMsayl9ZnVuY3Rpb24gYnooUyxSLGspe3JldHVybigiLmJpbiI9PT1SLnNsaWNlKC00KT9IQzpGQykoUyxr''@;'; put 'put ''KX12YXIgVlM9LyhbXHc6XSspPSgoPzoiKShbXiJdKikoPzoiKXwoPzonKShbXiddKikoPzonKSkvZyxiYj0vKFtcdzpdKyk9KCg/OiIpKD86W14iXSopKD86Iil8KD86JykoPzpbXiddKikoPzonKSkvO2Z1bmN0aW9uIEgwKFMsUil7dmFyIGs9Uy5zcGxpdCgvXHMrLyksRz1bXTtpZihSfHwo''@;'; put 'put ''R1swXT1rWzBdKSwxPT09ay5sZW5ndGgpcmV0dXJuIEc7dmFyIGFlLGdlLHllLFE9Uy5tYXRjaChWUyk7aWYoUSlmb3IoeWU9MDt5ZSE9US5sZW5ndGg7Kyt5ZSktMT09PShnZT0oYWU9UVt5ZV0ubWF0Y2goYmIpKVsxXS5pbmRleE9mKCI6IikpP0dbYWVbMV1dPWFlWzJdLnNsaWNlKDEsYWVb''@;'; put 'put ''Ml0ubGVuZ3RoLTEpOkdbInhtbG5zOiI9PT1hZVsxXS5zbGljZSgwLDYpPyJ4bWxucyIrYWVbMV0uc2xpY2UoNik6YWVbMV0uc2xpY2UoZ2UrMSldPWFlWzJdLnNsaWNlKDEsYWVbMl0ubGVuZ3RoLTEpO3JldHVybiBHfWZ1bmN0aW9uIEJTKFMpe3ZhciBrPXt9O2lmKDE9PT1TLnNwbGl0KC9c''@;'; put 'put ''cysvKS5sZW5ndGgpcmV0dXJuIGs7dmFyIFEsYWUscGUsRz1TLm1hdGNoKFZTKTtpZihHKWZvcihwZT0wO3BlIT1HLmxlbmd0aDsrK3BlKS0xPT09KGFlPShRPUdbcGVdLm1hdGNoKGJiKSlbMV0uaW5kZXhPZigiOiIpKT9rW1FbMV1dPVFbMl0uc2xpY2UoMSxRWzJdLmxlbmd0aC0xKTprWyJ4''@;'; put 'put ''bWxuczoiPT09UVsxXS5zbGljZSgwLDYpPyJ4bWxucyIrUVsxXS5zbGljZSg2KTpRWzFdLnNsaWNlKGFlKzEpXT1RWzJdLnNsaWNlKDEsUVsyXS5sZW5ndGgtMSk7cmV0dXJuIGt9ZnVuY3Rpb24geXooUyl7dmFyIFI9e307aWYoUy5EZWZhdWx0Um93SGVpZ2h0KXt2YXIgaz17aHB4OjQqcGFy''@;'; put 'put ''c2VJbnQoUy5EZWZhdWx0Um93SGVpZ2h0KS8zfTtQdihrKSxSLnJvdz1rfWlmKFMuRGVmYXVsdENvbFdpZHRoKXt2YXIgRz17d3B4OjQqcGFyc2VJbnQoUy5EZWZhdWx0Q29sV2lkdGgpLzN9O2UxKEcpLFIuY29sPUd9cmV0dXJuIFJ9ZnVuY3Rpb24gd3ooUyxSLGssRyl7dmFyIFE9Rztzd2l0''@;'; put 'put ''Y2goKGtbMF0ubWF0Y2goL2R0OmR0PSIoW1x3Ll0rKSIvKXx8WyIiLCIiXSlbMV0pe2Nhc2UiYm9vbGVhbiI6UT1laShHKTticmVhaztjYXNlImkyIjpjYXNlImludCI6UT1wYXJzZUludChHLDEwKTticmVhaztjYXNlInI0IjpjYXNlImZsb2F0IjpRPXBhcnNlRmxvYXQoRyk7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJkYXRlIjpjYXNlImRhdGVUaW1lLnR6IjpRPUhlKEcpO2JyZWFrO2Nhc2UiaTgiOmNhc2Uic3RyaW5nIjpjYXNlImZpeGVkIjpjYXNlInV1aWQiOmNhc2UiYmluLmJhc2U2NCI6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImJhZCBjdXN0cHJvcDoiK2tbMF0pfVNbSnIoUildPVF9''@;'; put 'put ''dmFyIHliPXswOiJOb25lIiwxOiJTaW5nbGUiLDI6IkRvdWJsZSIsMzM6IlNpbmdsZUFjY291bnRpbmciLDM0OiJEb3VibGVBY2NvdW50aW5nIn0sYUk9a2UoeWIpO2Z1bmN0aW9uIHpTKFMsUixrLEcpe2lmKEcuY2VsbFN0eWxlcyl7aWYoaz1rLnJlcGxhY2UoL1xzKy9nLCIgIiksUi5JbnRl''@;'; put 'put ''cmlvcil7dmFyIFE9Ui5JbnRlcmlvcjtRLlBhdHRlcm4mJihRLnBhdHRlcm5UeXBlPWdDW1EuUGF0dGVybl18fFEuUGF0dGVybiksUS5Db2xvciYmUS5Db2xvci5tYXRjaCgvI1swLTlBLUZhLWZdKi8pJiYoUS5mZ0NvbG9yPXtyZ2I6US5Db2xvci5zbGljZSgxKX0pfSFmdW5jdGlvbiBDeihT''@;'; put 'put ''KXtTLkJvcmRlcnMmJihTLkJvcmRlcnMuZm9yRWFjaChmdW5jdGlvbihSKXt2YXIgaz1SLlBvc2l0aW9uLnRvTG93ZXJDYXNlKCk7U1trXT17c3R5bGU6VVMoUi5MaW5lU3R5bGUsK1IuV2VpZ2h0KSxjb2xvcjp7cmdiOihSLkNvbG9yfHwiIzAwMDAwMCIpLnNsaWNlKDEpfX19KSxkZWxldGUg''@;'; put 'put ''Uy5Cb3JkZXJzKX0oUik7dmFyIGdlLGFlPWsubWF0Y2goLzwoPzpcdys6KT9Gb250XHNbXj5dKj4vKTthZSYmKGVpKChnZT1wcihhZVswXSkpLkJvbGQpJiYoUi5Cb2xkPSEwKSxlaShnZS5JdGFsaWMpJiYoUi5JdGFsaWM9ITApLGVpKGdlLlN0cmlrZVRocm91Z2gpJiYoUi5TdHJpa2U9ITAp''@;'; put 'put ''LGdlLlNpemUmJihSLlNpemU9K2dlLlNpemUpLFIuRm9udE5hbWU9Z2UuRm9udE5hbWU/Z2UuRm9udE5hbWU6IkFyaWFsIixnZS5VbmRlcmxpbmUmJihSLlVuZGVybGluZT1hSVtnZS5VbmRlcmxpbmVdKSxnZS5Db2xvciYmKFIuUkdCPWdlLkNvbG9yLnNsaWNlKC02KSkpLFIuQWxpZ25tZW50''@;'; put 'put ''JiYoUi5hbGlnbm1lbnQ9e30sUi5BbGlnbm1lbnQuVmVydGljYWwmJihSLmFsaWdubWVudC52ZXJ0aWNhbD1SLkFsaWdubWVudC5WZXJ0aWNhbC50b0xvd2VyQ2FzZSgpKSxSLkFsaWdubWVudC5Ib3Jpem9udGFsJiYoUi5hbGlnbm1lbnQuaG9yaXpvbnRhbD1SLkFsaWdubWVudC5Ib3Jpem9u''@;'; put 'put ''dGFsLnRvTG93ZXJDYXNlKCkpLGVpKFIuQWxpZ25tZW50LldyYXBUZXh0fHwiMCIpP1IuYWxpZ25tZW50LndyYXBUZXh0PSEwOm51bGw9PVIuQWxpZ25tZW50LldyYXBUZXh0JiZkZWxldGUgUi5hbGlnbm1lbnQud3JhcFRleHQsZWkoUi5BbGlnbm1lbnQuU2hyaW5rVG9GaXR8fCIwIikmJihS''@;'; put 'put ''LmFsaWdubWVudC5zaHJpbmtUb0ZpdD0hMCksK1IuQWxpZ25tZW50LkluZGVudCYmKFIuYWxpZ25tZW50LmluZGVudD0rUi5BbGlnbm1lbnQuSW5kZW50fHwwKSwrUi5BbGlnbm1lbnQuUm90YXRlJiYoUi5hbGlnbm1lbnQudGV4dFJvdGF0aW9uPStSLkFsaWdubWVudC5Sb3RhdGV8fDApKX1T''@;'; put 'put ''W1IuSURdPVIsKCJEZWZhdWx0Ij09Ui5JRHx8Ik5vcm1hbCI9PVIuTmFtZSkmJkE0KFIpfWZ1bmN0aW9uIFVTKFMsUil7c3dpdGNoKFMpe2Nhc2UiTm9uZSI6cmV0dXJuIm5vbmUiO2Nhc2UiRGFzaCI6cmV0dXJuImRhc2hlZCI7Y2FzZSJEb3QiOnJldHVybiJkb3R0ZWQiO2Nhc2UiRGFzaERv''@;'; put 'put ''dCI6cmV0dXJuImRhc2hEb3QiO2Nhc2UiRGFzaERvdERvdCI6cmV0dXJuImRhc2hEb3REb3QiO2Nhc2UiU2xhbnREYXNoRG90IjpyZXR1cm4ic2xhbnREYXNoRG90IjtjYXNlIkRvdWJsZSI6cmV0dXJuImRvdWJsZSI7Y2FzZSJDb250aW51b3VzIjpzd2l0Y2goK1J8fDApe2Nhc2UgMDpyZXR1''@;'; put 'put ''cm4iaGFpciI7Y2FzZSAxOnJldHVybiJ0aGluIjtjYXNlIDI6cmV0dXJuIm1lZGl1bSI7Y2FzZSAzOnJldHVybiJ0aGljayJ9cmV0dXJuInRoaW4ifXJldHVybiBTfWZ1bmN0aW9uIHNJKFMsUixrLEcsUSxhZSxnZSxwZSx5ZSxQZSl7dmFyIE5lPSJHZW5lcmFsIixZZT1HLlN0eWxlSUQsZXQ9''@;'; put 'put ''e307UGU9UGV8fHt9O3ZhciB1dD1bXSxFdD0wO2Zvcih2b2lkIDA9PT1ZZSYmcGUmJihZZT1wZS5TdHlsZUlEKSx2b2lkIDA9PT1ZZSYmZ2UmJihZZT1nZS5TdHlsZUlEKTt2b2lkIDAhPT1hZVtZZV07KXt2YXIgb3Q9YWVbWWVdO2lmKCJHZW5lcmFsIj09TmUmJm90Lm5mJiYoTmU9YWVbWWVd''@;'; put 'put ''Lm5mKSxvdC5JbnRlcmlvciYmdXQucHVzaChhZVtZZV0uSW50ZXJpb3IpLG90LmFsaWdubWVudCYmKGV0LmFsaWdubWVudHx8KGV0LmFsaWdubWVudD1xdChvdC5hbGlnbm1lbnQpKSksbnVsbD09ZXQuYm9sZCYmb3QuQm9sZCYmKGV0LmJvbGQ9ITApLG51bGw9PWV0Lml0YWxpYyYmb3QuSXRh''@;'; put 'put ''bGljJiYoZXQuaXRhbGljPSEwKSxudWxsPT1ldC5zdHJpa2UmJm90LlN0cmlrZSYmKGV0LnN0cmlrZT0hMCksbnVsbD09ZXQuc3omJm90LlNpemUmJihldC5zej1vdC5TaXplKSxudWxsPT1ldC5uYW1lJiZvdC5Gb250TmFtZSYmKGV0Lm5hbWU9b3QuRm9udE5hbWUpLG51bGw9PWV0LnVuZGVy''@;'; put 'put ''bGluZSYmb3QuVW5kZXJsaW5lJiYoZXQudW5kZXJsaW5lPW90LlVuZGVybGluZSksbnVsbD09ZXQuY29sb3ImJm90LlJHQiYmKGV0LmNvbG9yPXtyZ2I6b3QuUkdCfSksWyJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiXS5mb3JFYWNoKGZ1bmN0aW9uKE90KXtudWxsPT1ldFtPdF0mJm90''@;'; put 'put ''W090XSYmKGV0W090XT1xdChvdFtPdF0pKX0pLCJEZWZhdWx0Ij09WWUpYnJlYWs7WWU9b3QuUGFyZW50fHwiRGVmYXVsdCJ9ZXQubmFtZXx8KGV0Lm5hbWU9YWUuRGVmYXVsdCYmYWUuRGVmYXVsdC5Gb250TmFtZXx8IkFyaWFsIiksZXQuc3p8fChldC5zej1hZS5EZWZhdWx0JiZhZS5EZWZh''@;'; put 'put ''dWx0LlNpemV8fDEyKTt2YXIgYnQ9IiI7aWYoU3x8Ry5Gb3JtdWxhfHwiU3RyaW5nIj09ay5UeXBlfHwiTnVtYmVyIj09ay5UeXBlKXN3aXRjaChrLlR5cGUpe2Nhc2UiQm9vbGVhbiI6Ry50PSJiIixHLnY9ZWkoUyk7YnJlYWs7Y2FzZSJTdHJpbmciOkcudD0icyIsYnQ9T28oSnIoUykpLEcu''@;'; put 'put ''dj1TLmluZGV4T2YoIjwiKT4tMT9KcihSfHxTKS5yZXBsYWNlKC88W15dKj8+L2csIiIpOmJ0LFMuaW5kZXhPZigiPCIpPi0xJiYoRy5SPW1kLmh0bWxfdG9fcnMoSnIoUykpKTticmVhaztjYXNlIkRhdGVUaW1lIjoiWiIhPVMuc2xpY2UoLTEpJiYoUys9IloiKSxHLnY9KEhlKFMpLW5ldyBE''@;'; put 'put ''YXRlKERhdGUuVVRDKDE4OTksMTEsMzApKSkvODY0ZTUsRy52IT1HLnY/Ry52PUpyKFMpOkcudjw2MCYmKEcudj1HLnYtMSksKCFOZXx8IkdlbmVyYWwiPT1OZSkmJihOZT0ieXl5eS1tbS1kZCIpO2Nhc2UiTnVtYmVyIjp2b2lkIDA9PT1HLnYmJihHLnY9K1MpLEcudHx8KEcudD0ibiIpO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiRXJyb3IiOkcudD0iZSIsRy52PUQzW1NdLCExIT09UGUuY2VsbFRleHQmJihHLnc9Uyk7YnJlYWs7ZGVmYXVsdDoiIj09UyYmIiI9PVI/Ry50PSJ6IjooRy50PSJzIixidD1PbyhKcihTKSksRy52PVMuaW5kZXhPZigiPCIpPi0xP0pyKFJ8fFMpLnJlcGxhY2UoLzxbXl0qPz4v''@;'; put 'put ''ZywiIik6YnQsUy5pbmRleE9mKCI8Iik+LTEmJihHLlI9bWQuaHRtbF90b19ycyhKcihTKSkpKX1lbHNlIEcudD0ieiIsZGVsZXRlIEcudjtpZihmdW5jdGlvbiBqUyhTLFIsayl7aWYoInoiIT09Uy50KXtpZigha3x8ITEhPT1rLmNlbGxUZXh0KXRyeXtTLnc9ImUiPT09Uy50P1Mud3x8U2Nb''@;'; put 'put ''Uy52XToiR2VuZXJhbCI9PT1SPyJuIj09PVMudD8oMHxTLnYpPT09Uy52P0EuX2dlbmVyYWxfaW50KFMudik6QS5fZ2VuZXJhbF9udW0oUy52KTpBLl9nZW5lcmFsKFMudik6ZnVuY3Rpb24gX3ooUyxSKXt2YXIgaz10ZVtTXXx8SnIoUyk7cmV0dXJuIkdlbmVyYWwiPT09az9BLl9nZW5lcmFs''@;'; put 'put ''KFIpOkEuZm9ybWF0KGssUil9KFJ8fCJHZW5lcmFsIixTLnYpfWNhdGNoKGFlKXtpZihrLldURil0aHJvdyBhZX10cnl7dmFyIEc9dGVbUl18fFJ8fCJHZW5lcmFsIjtpZihrLmNlbGxORiYmKFMuej1HKSxrLmNlbGxEYXRlcyYmIm4iPT1TLnQmJkEuaXNfZGF0ZShHKSl7dmFyIFE9QS5wYXJz''@;'; put 'put ''ZV9kYXRlX2NvZGUoUy52KTtRJiYoUy50PSJkIixTLnY9bmV3IERhdGUoUS55LFEubS0xLFEuZCxRLkgsUS5NLFEuUyxRLnUpKX19Y2F0Y2goYWUpe2lmKGsuV1RGKXRocm93IGFlfX19KEcsTmUsUGUpLCExIT09UGUuY2VsbEZvcm11bGEpaWYoRy5Gb3JtdWxhKXt2YXIgQnQ9SnIoRy5Gb3Jt''@;'; put 'put ''dWxhKTs2MT09QnQuY2hhckNvZGVBdCgwKSYmKEJ0PUJ0LnNsaWNlKDEpKSxHLmY9TzUoQnQsUSksZGVsZXRlIEcuRm9ybXVsYSwiUkMiPT1HLkFycmF5UmFuZ2U/Ry5GPU81KCJSQzpSQyIsUSk6Ry5BcnJheVJhbmdlJiYoRy5GPU81KEcuQXJyYXlSYW5nZSxRKSx5ZS5wdXNoKFthYShHLkYp''@;'; put 'put ''LEcuRl0pKX1lbHNlIGZvcihFdD0wO0V0PHllLmxlbmd0aDsrK0V0KVEucj49eWVbRXRdWzBdLnMuciYmUS5yPD15ZVtFdF1bMF0uZS5yJiZRLmM+PXllW0V0XVswXS5zLmMmJlEuYzw9eWVbRXRdWzBdLmUuYyYmKEcuRj15ZVtFdF1bMV0pO2lmKFBlLmNlbGxTdHlsZXMmJih1dC5mb3JFYWNo''@;'; put 'put ''KGZ1bmN0aW9uKE90KXshZXQucGF0dGVyblR5cGUmJk90LnBhdHRlcm5UeXBlJiYoZXQucGF0dGVyblR5cGU9T3QucGF0dGVyblR5cGUpLCFldC5mZ0NvbG9yJiZPdC5mZ0NvbG9yJiYoZXQuZmdDb2xvcj1PdC5mZ0NvbG9yKX0pLEcucz1ldCksdm9pZCAwIT09Ry5TdHlsZUlEJiYoRy5peGZl''@;'; put 'put ''PUcuU3R5bGVJRCksRy5SJiZHLnMpe3ZhciBrdD1xdChHLnMpO2RlbGV0ZSBrdC5ib2xkLGRlbGV0ZSBrdC5pdGFsaWMsZGVsZXRlIGt0LnVuZGVybGluZSxkZWxldGUga3Quc3RyaWtlLEcuUi5mb3JFYWNoKGZ1bmN0aW9uKE90KXtPdC5zPVB0KHF0KGt0KSxPdC5zKX0pfX1mdW5jdGlvbiBT''@;'; put 'put ''eihTKXtTLnQ9Uy52fHwiIixTLnQ9Uy50LnJlcGxhY2UoL1xyXG4vZywiXG4iKS5yZXBsYWNlKC9cci9nLCJcbiIpLFMudj1TLnc9Uy5peGZlPXZvaWQgMH1mdW5jdGlvbiBaUyhTKXtpZihUZSYmQnVmZmVyLmlzQnVmZmVyKFMpKXJldHVybiBTLnRvU3RyaW5nKCJ1dGY4Iik7aWYoInN0cmlu''@;'; put 'put ''ZyI9PXR5cGVvZiBTKXJldHVybiBTO2lmKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmUyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpcmV0dXJuIGdhKEMoSChTKSkpO3Rocm93IG5ldyBFcnJvcigiQmFkIGlucHV0IGZvcm1hdDogZXhwZWN0ZWQgQnVmZmVyIG9yIHN0cmluZyIpfXZhciBVNT0vPChc''@;'; put 'put ''Lz8pKFteXHM/PjwhXC86XSo6fCkoW15ccz88PjpcL1xbXSspKD86W1xzPzo8XC9dW14+XSopPz4vZ207ZnVuY3Rpb24gQTgoUyxSKXt2YXIgaz1SfHx7fSxHPUooWlMoUykpOygiYmluYXJ5Ij09ay50eXBlfHwiYXJyYXkiPT1rLnR5cGV8fCJiYXNlNjQiPT1rLnR5cGUpJiYoRz10eXBlb2Yg''@;'; put 'put ''Y3B0YWJsZTwidSI/Y3B0YWJsZS51dGlscy5kZWNvZGUoNjUwMDEsWShHKSk6Z2EoRykpO3ZhciBRPUcuc2xpY2UoMCwxMDI0KS50b0xvd2VyQ2FzZSgpLGFlPSExO2lmKCgxMDIzJlEuaW5kZXhPZigiPiIpKT5NYXRoLm1pbigxMDIzJlEuaW5kZXhPZigiLCIpLDEwMjMmUS5pbmRleE9mKCI7''@;'; put 'put ''IikpKXt2YXIgZ2U9cXQoayk7cmV0dXJuIGdlLnR5cGU9InN0cmluZyIsRjMudG9fd29ya2Jvb2soRyxnZSl9aWYoLTE9PVEuaW5kZXhPZigiPD94bWwiKSYmWyJodG1sIiwidGFibGUiLCJoZWFkIiwibWV0YSIsInNjcmlwdCIsInN0eWxlIiwiZGl2Il0uZm9yRWFjaChmdW5jdGlvbihidSl7''@;'; put 'put ''US5pbmRleE9mKCI8IitidSk+PTAmJihhZT0hMCl9KSxhZSlyZXR1cm4gbWQudG9fd29ya2Jvb2soRyxrKTt2YXIgcGUsUGUseWU9W107bnVsbCE9bGUmJm51bGw9PWsuZGVuc2UmJihrLmRlbnNlPWxlKTt2YXIgRHIsTmU9e30sWWU9W10sZXQ9ay5kZW5zZT9bXTp7fSx1dD0iIixFdD17fSxv''@;'; put 'put ''dD17fSxidD17fSxCdD1IMCgnPERhdGEgc3M6VHlwZT0iU3RyaW5nIj4nKSxrdD0wLE90PTAsS3Q9MCxUbj17czp7cjoyZTYsYzoyZTZ9LGU6e3I6MCxjOjB9fSxpcj17fSxTbj17fSxzcj0iIixKbj0wLFZuPVtdLHVyPXt9LGdyPXt9LHRyPTAsQ2k9W10sRmk9e30saW89W10sdW89e30sTGk9''@;'; put 'put ''W10sTm49ITEsVnI9W10sdnI9W10sSG49e30sQnI9MCxXaT0wLGJpPXtTaGVldHM6W10sV0JQcm9wczp7ZGF0ZTE5MDQ6ITF9fSx3bz17fTtVNS5sYXN0SW5kZXg9MCxHPUcucmVwbGFjZSgvPCEtLShbXHNcU10qPyktLT4vZ20sIiIpO2Zvcih2YXIgc2E9IiI7cGU9VTUuZXhlYyhHKTspc3dp''@;'; put 'put ''dGNoKHBlWzNdPShzYT1wZVszXSkudG9Mb3dlckNhc2UoKSl7Y2FzZSJkYXRhIjppZigiZGF0YSI9PXNhKXtpZigiLyI9PT1wZVsxXSl7aWYoKFBlPXllLnBvcCgpKVswXSE9PXBlWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK1BlLmpvaW4oInwiKSl9ZWxzZSIvIiE9PXBlWzBd''@;'; put 'put ''LmNoYXJBdChwZVswXS5sZW5ndGgtMikmJnllLnB1c2goW3BlWzNdLCEwXSk7YnJlYWt9aWYoeWVbeWUubGVuZ3RoLTFdWzFdKWJyZWFrOyIvIj09PXBlWzFdP3NJKEcuc2xpY2Uoa3QscGUuaW5kZXgpLHNyLEJ0LCJjb21tZW50Ij09eWVbeWUubGVuZ3RoLTFdWzBdP3VvOm90LHtjOk90LHI6''@;'; put 'put ''S3R9LGlyLExpW090XSxidCxWcixrKTooc3I9IiIsQnQ9SDAocGVbMF0pLGt0PXBlLmluZGV4K3BlWzBdLmxlbmd0aCk7YnJlYWs7Y2FzZSJjZWxsIjppZigiLyI9PT1wZVsxXXx8Ii8+Ij09PXBlWzBdLnNsaWNlKC0yKSl7aWYoIi8+Ij09PXBlWzBdLnNsaWNlKC0yKSl7aWYoKG90PUJTKHBl''@;'; put 'put ''WzBdKSkuSW5kZXgmJihPdD0rb3QuSW5kZXgtMSksT3Q8VG4ucy5jJiYoVG4ucy5jPU90KSxPdD5Ubi5lLmMmJihUbi5lLmM9T3QpLGlvPVtdLCFrLnNoZWV0U3R1YnMpeysrT3Q7YnJlYWt9c0koIiIsIiIse30sImNvbW1lbnQiPT15ZVt5ZS5sZW5ndGgtMV1bMF0/dW86b3Qse2M6T3QscjpL''@;'; put 'put ''dH0saXIsTGlbT3RdLGJ0LFZyLGspfWlmKGlvLmxlbmd0aD4wJiYob3QuYz1pbyksKCFrLnNoZWV0Um93c3x8ay5zaGVldFJvd3M+S3QpJiYodm9pZCAwIT09b3Qudnx8ay5zaGVldFN0dWJzKSYmKGsuZGVuc2U/KGV0W0t0XXx8KGV0W0t0XT1bXSksZXRbS3RdW090XT1vdCk6ZXRbVG8oT3Qp''@;'; put 'put ''K3ppKEt0KV09b3QpLG90LkhSZWYmJihvdC5sPXtUYXJnZXQ6SnIob3QuSFJlZil9LG90LkhSZWZTY3JlZW5UaXAmJihvdC5sLlRvb2x0aXA9b3QuSFJlZlNjcmVlblRpcCksZGVsZXRlIG90LkhSZWYsZGVsZXRlIG90LkhSZWZTY3JlZW5UaXApLChvdC5NZXJnZUFjcm9zc3x8b3QuTWVyZ2VE''@;'; put 'put ''b3duKSYmKEJyPU90KygwfHBhcnNlSW50KG90Lk1lcmdlQWNyb3NzLDEwKSksV2k9S3QrKDB8cGFyc2VJbnQob3QuTWVyZ2VEb3duLDEwKSksKEJyPk90fHxXaT5LdCkmJlZuLnB1c2goe3M6e2M6T3QscjpLdH0sZTp7YzpCcixyOldpfX0pKSxrLnNoZWV0U3R1YnMpaWYob3QuTWVyZ2VBY3Jv''@;'; put 'put ''c3N8fG90Lk1lcmdlRG93bil7Zm9yKHZhciBhbz1PdDthbzw9QnI7Kythbylmb3IodmFyIFJhPUt0O1JhPD1XaTsrK1JhKShhbz5PdHx8UmE+S3QpJiYoay5kZW5zZT8oZXRbUmFdfHwoZXRbUmFdPVtdKSxldFtSYV1bYW9dPXt0OiJ6In0pOmV0W1RvKGFvKSt6aShSYSldPXt0OiJ6In0pO090''@;'; put 'put ''PUJyKzF9ZWxzZSsrT3Q7ZWxzZSBvdC5NZXJnZUFjcm9zcz9PdD1CcisxOisrT3R9ZWxzZShvdD1CUyhwZVswXSkpLkluZGV4JiYoT3Q9K290LkluZGV4LTEpLE90PFRuLnMuYyYmKFRuLnMuYz1PdCksT3Q+VG4uZS5jJiYoVG4uZS5jPU90KSwiLz4iPT09cGVbMF0uc2xpY2UoLTIpJiYrK090''@;'; put 'put ''LGlvPVtdO2JyZWFrO2Nhc2Uicm93IjoiLyI9PT1wZVsxXXx8Ii8+Ij09PXBlWzBdLnNsaWNlKC0yKT8oS3Q8VG4ucy5yJiYoVG4ucy5yPUt0KSxLdD5Ubi5lLnImJihUbi5lLnI9S3QpLCIvPiI9PT1wZVswXS5zbGljZSgtMikmJihidD1IMChwZVswXSkpLkluZGV4JiYoS3Q9K2J0LkluZGV4''@;'; put 'put ''LTEpLE90PTAsKytLdCk6KChidD1IMChwZVswXSkpLkluZGV4JiYoS3Q9K2J0LkluZGV4LTEpLEhuPXt9LCgiMCI9PWJ0LkF1dG9GaXRIZWlnaHR8fGJ0LkhlaWdodCkmJihIbi5ocHQ9cGFyc2VGbG9hdChidC5IZWlnaHQpLEhuLmhweD1paChIbi5ocHQpLHZyW0t0XT1IbiksIjEiPT1idC5I''@;'; put 'put ''aWRkZW4mJihIbi5oaWRkZW49ITAsdnJbS3RdPUhuKSk7YnJlYWs7Y2FzZSJ3b3Jrc2hlZXQiOmlmKCIvIj09PXBlWzFdKXtpZigoUGU9eWUucG9wKCkpWzBdIT09cGVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrUGUuam9pbigifCIpKTtZZS5wdXNoKHV0KSxUbi5zLnI8PVRu''@;'; put 'put ''LmUuciYmVG4ucy5jPD1Ubi5lLmMmJihldFsiIXJlZiJdPW9vKFRuKSxrLnNoZWV0Um93cyYmay5zaGVldFJvd3M8PVRuLmUuciYmKGV0WyIhZnVsbHJlZiJdPWV0WyIhcmVmIl0sVG4uZS5yPWsuc2hlZXRSb3dzLTEsZXRbIiFyZWYiXT1vbyhUbikpKSxWbi5sZW5ndGgmJihldFsiIW1lcmdl''@;'; put 'put ''cyJdPVZuKSxMaS5sZW5ndGg+MCYmKGV0WyIhY29scyJdPUxpKSx2ci5sZW5ndGg+MCYmKGV0WyIhcm93cyJdPXZyKSxFdCYmKGV0WyIhc2hlZXRGb3JtYXQiXT15eihFdCkpLE5lW3V0XT1ldH1lbHNlIFRuPXtzOntyOjJlNixjOjJlNn0sZTp7cjowLGM6MH19LEt0PU90PTAseWUucHVzaChb''@;'; put 'put ''cGVbM10sITFdKSxQZT1IMChwZVswXSksdXQ9SnIoUGUuTmFtZSksZXQ9ay5kZW5zZT9bXTp7fSxWbj1bXSxWcj1bXSx2cj1bXSxiaS5TaGVldHMucHVzaCh3bz17bmFtZTp1dCxIaWRkZW46MH0pO2JyZWFrO2Nhc2UidGFibGUiOmlmKCIvIj09PXBlWzFdKXtpZigoUGU9eWUucG9wKCkpWzBd''@;'; put 'put ''IT09cGVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrUGUuam9pbigifCIpKX1lbHNle2lmKCIvPiI9PXBlWzBdLnNsaWNlKC0yKSlicmVhaztFdD1IMChwZVswXSkseWUucHVzaChbcGVbM10sITFdKSxMaT1bXSxObj0hMX1icmVhaztjYXNlInN0eWxlIjoiLyI9PT1wZVsxXT96''@;'; put 'put ''UyhpcixTbixzcixrKTooU249SDAocGVbMF0pLHNyPSIiKTticmVhaztjYXNlIm51bWJlcmZvcm1hdCI6U24ubmY9SnIoSDAocGVbMF0pLkZvcm1hdHx8IkdlbmVyYWwiKSx0ZVtTbi5uZl0mJihTbi5uZj10ZVtTbi5uZl0pO2Zvcih2YXIgUG89MDszOTIhPVBvJiZBLl90YWJsZVtQb10hPVNu''@;'; put 'put ''Lm5mOysrUG8pO2lmKDM5Mj09UG8pZm9yKFBvPTU3OzM5MiE9UG87KytQbylpZihudWxsPT1BLl90YWJsZVtQb10pe0EubG9hZChTbi5uZixQbyk7YnJlYWt9YnJlYWs7Y2FzZSJjb2x1bW4iOmlmKCJ0YWJsZSIhPT15ZVt5ZS5sZW5ndGgtMV1bMF18fCIvIj09PXBlWzFdKWJyZWFrO2lmKChE''@;'; put 'put ''cj1IMChwZVswXSkpLkhpZGRlbiYmKERyLmhpZGRlbj0hMCxkZWxldGUgRHIuSGlkZGVuKSxEci5XaWR0aD9Eci53cHg9NCpwYXJzZUludChEci5XaWR0aCwxMCkvMzorRHIuQXV0b0ZpdFdpZHRoJiYoRHIuYXV0bz0xKSwhTm4mJkRyLndweD4xMCl7Tm49ITAsRWM9b2s7Zm9yKHZhciBoYT0w''@;'; put 'put ''O2hhPExpLmxlbmd0aDsrK2hhKUxpW2hhXSYmZTEoTGlbaGFdKX1ObiYmZTEoRHIpLExpW0RyLkluZGV4LTF8fExpLmxlbmd0aF09RHI7Zm9yKHZhciBKbz0wO0pvPCtEci5TcGFuOysrSm8pTGlbTGkubGVuZ3RoXT1xdChEcik7YnJlYWs7Y2FzZSJuYW1lZHJhbmdlIjppZigiLyI9PT1wZVsx''@;'; put 'put ''XSlicmVhaztiaS5OYW1lc3x8KGJpLk5hbWVzPVtdKTt2YXIgamk9cHIocGVbMF0pLElzPXtOYW1lOmppLk5hbWUsUmVmOk81KGppLlJlZmVyc1RvLnNsaWNlKDEpLHtyOjAsYzowfSl9O2JpLlNoZWV0cy5sZW5ndGg+MCYmKElzLlNoZWV0PWJpLlNoZWV0cy5sZW5ndGgtMSksYmkuTmFtZXMu''@;'; put 'put ''cHVzaChJcyk7YnJlYWs7Y2FzZSJuYW1lZGNlbGwiOmNhc2UiYiI6Y2FzZSJpIjpjYXNlInUiOmNhc2UicyI6Y2FzZSJlbSI6Y2FzZSJoMiI6Y2FzZSJoMyI6Y2FzZSJzdWIiOmNhc2Uic3VwIjpjYXNlInNwYW4iOmNhc2UicHJvdGVjdGlvbiI6Y2FzZSJwYXJhZ3JhcGhzIjpjYXNlIm5hbWUi''@;'; put 'put ''OmJyZWFrO2Nhc2UiYWxpZ25tZW50IjppZighay5jZWxsU3R5bGVzfHwiLyI9PT1wZVsxXSlicmVhaztTbi5BbGlnbm1lbnQ9SDAocGVbMF0pO2JyZWFrO2Nhc2UiYm9yZGVycyI6Ii8iIT09cGVbMV0mJihTbi5Cb3JkZXJzPVtdKTticmVhaztjYXNlImJvcmRlciI6aWYoIi8iPT09cGVbMV0p''@;'; put 'put ''YnJlYWs7U24uQm9yZGVyc3x8KFNuLkJvcmRlcnM9W10pLFNuLkJvcmRlcnMucHVzaChIMChwZVswXSkpO2JyZWFrO2Nhc2UiZm9udCI6aWYoIi8+Ij09PXBlWzBdLnNsaWNlKC0yKSl7c3IrPXBlWzBdO2JyZWFrfSIvIj09PXBlWzFdP3NyKz1HLnNsaWNlKEpuLHBlLmluZGV4K3BlWzBdLmxl''@;'; put 'put ''bmd0aCk6Sm49cGUuaW5kZXg7YnJlYWs7Y2FzZSJpbnRlcmlvciI6aWYoIWsuY2VsbFN0eWxlc3x8Ii8iPT09cGVbMV0pYnJlYWs7U24uSW50ZXJpb3I9SDAocGVbMF0pO2JyZWFrO2Nhc2UiYXV0aG9yIjpjYXNlInRpdGxlIjpjYXNlImRlc2NyaXB0aW9uIjpjYXNlImNyZWF0ZWQiOmNhc2Ui''@;'; put 'put ''a2V5d29yZHMiOmNhc2Uic3ViamVjdCI6Y2FzZSJjYXRlZ29yeSI6Y2FzZSJjb21wYW55IjpjYXNlImxhc3RhdXRob3IiOmNhc2UibGFzdHNhdmVkIjpjYXNlImxhc3RwcmludGVkIjpjYXNlInZlcnNpb24iOmNhc2UicmV2aXNpb24iOmNhc2UidG90YWx0aW1lIjpjYXNlImh5cGVybGlua2Jh''@;'; put 'put ''c2UiOmNhc2UibWFuYWdlciI6Y2FzZSJjb250ZW50c3RhdHVzIjpjYXNlImlkZW50aWZpZXIiOmNhc2UibGFuZ3VhZ2UiOmNhc2UiYXBwbmFtZSI6aWYoIi8+Ij09PXBlWzBdLnNsaWNlKC0yKSlicmVhazsiLyI9PT1wZVsxXT9JMyh1cixzYSxHLnNsaWNlKHRyLHBlLmluZGV4KSk6dHI9cGUu''@;'; put 'put ''aW5kZXgrcGVbMF0ubGVuZ3RoO2JyZWFrO2Nhc2Uic3R5bGVzIjpjYXNlIndvcmtib29rIjppZigiLyI9PT1wZVsxXSl7aWYoKFBlPXllLnBvcCgpKVswXSE9PXBlWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK1BlLmpvaW4oInwiKSl9ZWxzZSB5ZS5wdXNoKFtwZVszXSwhMV0p''@;'; put 'put ''O2JyZWFrO2Nhc2UiY29tbWVudCI6aWYoIi8iPT09cGVbMV0pe2lmKChQZT15ZS5wb3AoKSlbMF0hPT1wZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitQZS5qb2luKCJ8IikpO1N6KHVvKSxpby5wdXNoKHVvKX1lbHNlIHllLnB1c2goW3BlWzNdLCExXSksdW89e2E6KFBlPUgw''@;'; put 'put ''KHBlWzBdKSkuQXV0aG9yfTticmVhaztjYXNlImF1dG9maWx0ZXIiOmlmKCIvIj09PXBlWzFdKXtpZigoUGU9eWUucG9wKCkpWzBdIT09cGVbM10pdGhyb3cgbmV3IEVycm9yKCJCYWQgc3RhdGU6ICIrUGUuam9pbigifCIpKX1lbHNlIGlmKCIvIiE9PXBlWzBdLmNoYXJBdChwZVswXS5sZW5n''@;'; put 'put ''dGgtMikpe3ZhciBGbj1IMChwZVswXSk7ZXRbIiFhdXRvZmlsdGVyIl09e3JlZjpPNShGbi5SYW5nZSkucmVwbGFjZSgvXCQvZywiIil9LHllLnB1c2goW3BlWzNdLCEwXSl9YnJlYWs7Y2FzZSJkYXRhdmFsaWRhdGlvbiI6aWYoZXRbIiF2YWxpZGF0aW9ucyJdfHwoZXRbIiF2YWxpZGF0aW9u''@;'; put 'put ''cyJdPVtdKSwiLyI9PT1wZVsxXSl7aWYoKFBlPXllLnBvcCgpKVswXSE9PXBlWzNdKXRocm93IG5ldyBFcnJvcigiQmFkIHN0YXRlOiAiK1BlLmpvaW4oInwiKSl9ZWxzZSIvIiE9PXBlWzBdLmNoYXJBdChwZVswXS5sZW5ndGgtMikmJnllLnB1c2goW3BlWzNdLCEwXSksRmk9e307YnJlYWs7''@;'; put 'put ''Y2FzZSJwaXhlbHNwZXJpbmNoIjppZigiLyI9PT1wZVsxXSl7dmFyIFphPStHLnNsaWNlKGt0LHBlLmluZGV4KTsoNzI9PVphfHw5Nj09WmEpJiZ4ZihaYSl9ZWxzZSBrdD1wZS5pbmRleCtwZVswXS5sZW5ndGg7YnJlYWs7Y2FzZSJjb21wb25lbnRvcHRpb25zIjpjYXNlImRvY3VtZW50cHJv''@;'; put 'put ''cGVydGllcyI6Y2FzZSJjdXN0b21kb2N1bWVudHByb3BlcnRpZXMiOmNhc2Uib2ZmaWNlZG9jdW1lbnRzZXR0aW5ncyI6Y2FzZSJwaXZvdHRhYmxlIjpjYXNlInBpdm90Y2FjaGUiOmNhc2UibmFtZXMiOmNhc2UibWFwaW5mbyI6Y2FzZSJwYWdlYnJlYWtzIjpjYXNlInF1ZXJ5dGFibGUiOmNh''@;'; put 'put ''c2Uic29ydGluZyI6Y2FzZSJzY2hlbWEiOmNhc2UiY29uZGl0aW9uYWxmb3JtYXR0aW5nIjpjYXNlInNtYXJ0dGFndHlwZSI6Y2FzZSJzbWFydHRhZ3MiOmNhc2UiZXhjZWx3b3JrYm9vayI6Y2FzZSJ3b3JrYm9va29wdGlvbnMiOmNhc2Uid29ya3NoZWV0b3B0aW9ucyI6aWYoIi8iPT09cGVb''@;'; put 'put ''MV0pe2lmKChQZT15ZS5wb3AoKSlbMF0hPT1wZVszXSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBzdGF0ZTogIitQZS5qb2luKCJ8IikpfWVsc2UiLyIhPT1wZVswXS5jaGFyQXQocGVbMF0ubGVuZ3RoLTIpJiZ5ZS5wdXNoKFtwZVszXSwhMF0pO2JyZWFrO2RlZmF1bHQ6aWYoMD09eWUubGVuZ3Ro''@;'; put 'put ''JiYiZG9jdW1lbnQiPT1wZVszXXx8MD09eWUubGVuZ3RoJiYidW9mIj09cGVbM10pcmV0dXJuIFNJKEcsayk7dmFyIGRyPSEwO3N3aXRjaCh5ZVt5ZS5sZW5ndGgtMV1bMF0pe2Nhc2Uib2ZmaWNlZG9jdW1lbnRzZXR0aW5ncyI6c3dpdGNoKHBlWzNdKXtjYXNlImFsbG93cG5nIjpjYXNlInJl''@;'; put 'put ''bW92ZXBlcnNvbmFsaW5mb3JtYXRpb24iOmNhc2UiZG93bmxvYWRjb21wb25lbnRzIjpjYXNlImxvY2F0aW9ub2Zjb21wb25lbnRzIjpjYXNlImNvbG9ycyI6Y2FzZSJjb2xvciI6Y2FzZSJpbmRleCI6Y2FzZSJyZ2IiOmNhc2UidGFyZ2V0c2NyZWVuc2l6ZSI6Y2FzZSJyZWFkb25seXJlY29t''@;'; put 'put ''bWVuZGVkIjpicmVhaztkZWZhdWx0OmRyPSExfWJyZWFrO2Nhc2UiY29tcG9uZW50b3B0aW9ucyI6c3dpdGNoKHBlWzNdKXtjYXNlInRvb2xiYXIiOmNhc2UiaGlkZW9mZmljZWxvZ28iOmNhc2Uic3ByZWFkc2hlZXRhdXRvZml0IjpjYXNlImxhYmVsIjpjYXNlImNhcHRpb24iOmNhc2UibWF4''@;'; put 'put ''aGVpZ2h0IjpjYXNlIm1heHdpZHRoIjpjYXNlIm5leHRzaGVldG51bWJlciI6YnJlYWs7ZGVmYXVsdDpkcj0hMX1icmVhaztjYXNlImV4Y2Vsd29ya2Jvb2siOnN3aXRjaChwZVszXSl7Y2FzZSJkYXRlMTkwNCI6YmkuV0JQcm9wcy5kYXRlMTkwND0hMDticmVhaztjYXNlIndpbmRvd2hlaWdo''@;'; put 'put ''dCI6Y2FzZSJ3aW5kb3d3aWR0aCI6Y2FzZSJ3aW5kb3d0b3B4IjpjYXNlIndpbmRvd3RvcHkiOmNhc2UidGFicmF0aW8iOmNhc2UicHJvdGVjdHN0cnVjdHVyZSI6Y2FzZSJwcm90ZWN0d2luZG93IjpjYXNlInByb3RlY3R3aW5kb3dzIjpjYXNlImFjdGl2ZXNoZWV0IjpjYXNlImRpc3BsYXlp''@;'; put 'put ''bmtub3RlcyI6Y2FzZSJmaXJzdHZpc2libGVzaGVldCI6Y2FzZSJzdXBib29rIjpjYXNlInNoZWV0bmFtZSI6Y2FzZSJzaGVldGluZGV4IjpjYXNlInNoZWV0aW5kZXhmaXJzdCI6Y2FzZSJzaGVldGluZGV4bGFzdCI6Y2FzZSJkbGwiOmNhc2UiYWNjZXB0bGFiZWxzaW5mb3JtdWxhcyI6Y2Fz''@;'; put 'put ''ZSJkb25vdHNhdmVsaW5rdmFsdWVzIjpjYXNlIml0ZXJhdGlvbiI6Y2FzZSJtYXhpdGVyYXRpb25zIjpjYXNlIm1heGNoYW5nZSI6Y2FzZSJwYXRoIjpjYXNlInhjdCI6Y2FzZSJjb3VudCI6Y2FzZSJzZWxlY3RlZHNoZWV0cyI6Y2FzZSJjYWxjdWxhdGlvbiI6Y2FzZSJ1bmNhbGNlZCI6Y2Fz''@;'; put 'put ''ZSJzdGFydHVwcHJvbXB0IjpjYXNlImNybiI6Y2FzZSJleHRlcm5uYW1lIjpjYXNlImZvcm11bGEiOmNhc2UiY29sZmlyc3QiOmNhc2UiY29sbGFzdCI6Y2FzZSJ3YW50YWR2aXNlIjpjYXNlImJvb2xlYW4iOmNhc2UiZXJyb3IiOmNhc2UidGV4dCI6Y2FzZSJvbGUiOmNhc2Uibm9hdXRvcmVj''@;'; put 'put ''b3ZlciI6Y2FzZSJwdWJsaXNob2JqZWN0cyI6Y2FzZSJkb25vdGNhbGN1bGF0ZWJlZm9yZXNhdmUiOmNhc2UibnVtYmVyIjpjYXNlInJlZm1vZGVyMWMxIjpjYXNlImVtYmVkc2F2ZXNtYXJ0dGFncyI6YnJlYWs7ZGVmYXVsdDpkcj0hMX1icmVhaztjYXNlIndvcmtib29rb3B0aW9ucyI6c3dp''@;'; put 'put ''dGNoKHBlWzNdKXtjYXNlIm93Y3ZlcnNpb24iOmNhc2UiaGVpZ2h0IjpjYXNlIndpZHRoIjpicmVhaztkZWZhdWx0OmRyPSExfWJyZWFrO2Nhc2Uid29ya3NoZWV0b3B0aW9ucyI6c3dpdGNoKHBlWzNdKXtjYXNlInZpc2libGUiOmlmKCIvPiIhPT1wZVswXS5zbGljZSgtMikpaWYoIi8iPT09''@;'; put 'put ''cGVbMV0pc3dpdGNoKEcuc2xpY2UodHIscGUuaW5kZXgpKXtjYXNlIlNoZWV0SGlkZGVuIjp3by5IaWRkZW49MTticmVhaztjYXNlIlNoZWV0VmVyeUhpZGRlbiI6d28uSGlkZGVuPTJ9ZWxzZSB0cj1wZS5pbmRleCtwZVswXS5sZW5ndGg7YnJlYWs7Y2FzZSJoZWFkZXIiOmV0WyIhbWFyZ2lu''@;'; put 'put ''cyJdfHxZMyhldFsiIW1hcmdpbnMiXT17fSwieGxtbCIpLGV0WyIhbWFyZ2lucyJdLmhlYWRlcj1wcihwZVswXSkuTWFyZ2luO2JyZWFrO2Nhc2UiZm9vdGVyIjpldFsiIW1hcmdpbnMiXXx8WTMoZXRbIiFtYXJnaW5zIl09e30sInhsbWwiKSxldFsiIW1hcmdpbnMiXS5mb290ZXI9cHIocGVb''@;'; put 'put ''MF0pLk1hcmdpbjticmVhaztjYXNlInBhZ2VtYXJnaW5zIjp2YXIgcWw9cHIocGVbMF0pO2V0WyIhbWFyZ2lucyJdfHxZMyhldFsiIW1hcmdpbnMiXT17fSwieGxtbCIpLHFsLlRvcCYmKGV0WyIhbWFyZ2lucyJdLnRvcD1xbC5Ub3ApLHFsLkxlZnQmJihldFsiIW1hcmdpbnMiXS5sZWZ0PXFs''@;'; put 'put ''LkxlZnQpLHFsLlJpZ2h0JiYoZXRbIiFtYXJnaW5zIl0ucmlnaHQ9cWwuUmlnaHQpLHFsLkJvdHRvbSYmKGV0WyIhbWFyZ2lucyJdLmJvdHRvbT1xbC5Cb3R0b20pO2JyZWFrO2Nhc2UiZGlzcGxheXJpZ2h0dG9sZWZ0IjpiaS5WaWV3c3x8KGJpLlZpZXdzPVtdKSxiaS5WaWV3c1swXXx8KGJp''@;'; put 'put ''LlZpZXdzWzBdPXt9KSxiaS5WaWV3c1swXS5SVEw9ITA7YnJlYWs7Y2FzZSJmcmVlemVwYW5lcyI6Y2FzZSJmcm96ZW5ub3NwbGl0IjpjYXNlImFjdGl2ZXJvdyI6Y2FzZSJhY3RpdmVjb2wiOmNhc2UidG9wcm93Ym90dG9tcGFuZSI6Y2FzZSJsZWZ0Y29sdW1ucmlnaHRwYW5lIjpjYXNlInVu''@;'; put 'put ''c3luY2VkIjpjYXNlInByaW50IjpjYXNlInByaW50ZXJyb3JzIjpjYXNlInBhbmVzIjpjYXNlInNjYWxlIjpjYXNlInBhbmUiOmNhc2UibnVtYmVyIjpjYXNlImxheW91dCI6Y2FzZSJwYWdlc2V0dXAiOmNhc2Uic2VsZWN0ZWQiOmNhc2UicHJvdGVjdG9iamVjdHMiOmNhc2UiZW5hYmxlc2Vs''@;'; put 'put ''ZWN0aW9uIjpjYXNlInByb3RlY3RzY2VuYXJpb3MiOmNhc2UidmFsaWRwcmludGVyaW5mbyI6Y2FzZSJob3Jpem9udGFscmVzb2x1dGlvbiI6Y2FzZSJ2ZXJ0aWNhbHJlc29sdXRpb24iOmNhc2UibnVtYmVyb2Zjb3BpZXMiOmNhc2UiYWN0aXZlcGFuZSI6Y2FzZSJ0b3Byb3d2aXNpYmxlIjpj''@;'; put 'put ''YXNlImxlZnRjb2x1bW52aXNpYmxlIjpjYXNlImZpdHRvcGFnZSI6Y2FzZSJyYW5nZXNlbGVjdGlvbiI6Y2FzZSJwYXBlcnNpemVpbmRleCI6Y2FzZSJwYWdlbGF5b3V0em9vbSI6Y2FzZSJwYWdlYnJlYWt6b29tIjpjYXNlImZpbHRlcm9uIjpjYXNlImZpdHdpZHRoIjpjYXNlImZpdGhlaWdo''@;'; put 'put ''dCI6Y2FzZSJjb21tZW50c2xheW91dCI6Y2FzZSJ6b29tIjpjYXNlImxlZnR0b3JpZ2h0IjpjYXNlImdyaWRsaW5lcyI6Y2FzZSJhbGxvd3NvcnQiOmNhc2UiYWxsb3dmaWx0ZXIiOmNhc2UiYWxsb3dpbnNlcnRyb3dzIjpjYXNlImFsbG93ZGVsZXRlcm93cyI6Y2FzZSJhbGxvd2luc2VydGNv''@;'; put 'put ''bHMiOmNhc2UiYWxsb3dkZWxldGVjb2xzIjpjYXNlImFsbG93aW5zZXJ0aHlwZXJsaW5rcyI6Y2FzZSJhbGxvd2Zvcm1hdGNlbGxzIjpjYXNlImFsbG93c2l6ZWNvbHMiOmNhc2UiYWxsb3dzaXplcm93cyI6Y2FzZSJ0YWJjb2xvcmluZGV4IjpjYXNlImRvbm90ZGlzcGxheWhlYWRpbmdzIjpj''@;'; put 'put ''YXNlInNob3dwYWdlbGF5b3V0em9vbSI6Y2FzZSJibGFja2FuZHdoaXRlIjpjYXNlImRvbm90ZGlzcGxheXplcm9zIjpjYXNlImRpc3BsYXlwYWdlYnJlYWsiOmNhc2Uicm93Y29saGVhZGluZ3MiOmNhc2UiZG9ub3RkaXNwbGF5b3V0bGluZSI6Y2FzZSJub29yaWVudGF0aW9uIjpjYXNlImFs''@;'; put 'put ''bG93dXNlcGl2b3R0YWJsZXMiOmNhc2UiemVyb2hlaWdodCI6Y2FzZSJ2aWV3YWJsZXJhbmdlIjpjYXNlInNlbGVjdGlvbiI6Y2FzZSJwcm90ZWN0Y29udGVudHMiOmJyZWFrO2Nhc2Uic3BsaXRob3Jpem9udGFsIjpjYXNlInNwbGl0dmVydGljYWwiOmlmKCIvPiIhPT1wZVswXS5zbGljZSgt''@;'; put 'put ''MikpaWYoIi8iPT1wZVsxXSl7ZXRbIiFmcmVlemUiXXx8KGV0WyIhZnJlZXplIl09IkExIik7dmFyIFVsPU5hKGV0WyIhZnJlZXplIl0pOyJzcGxpdGhvcml6b250YWwiPT1wZVszXT9VbC5yPStHLnNsaWNlKHRyLHBlLmluZGV4KTpVbC5jPStHLnNsaWNlKHRyLHBlLmluZGV4KSxldFsiIWZy''@;'; put 'put ''ZWV6ZSJdPVhpKFVsKX1lbHNlIHRyPXBlLmluZGV4K3BlWzBdLmxlbmd0aDticmVhaztjYXNlImRvbm90ZGlzcGxheWdyaWRsaW5lcyI6ZXRbIiFncmlkbGluZXMiXT0hMTticmVhaztjYXNlIm5vc3VtbWFyeXJvd3NiZWxvd2RldGFpbCI6ZXRbIiFvdXRsaW5lIl18fChldFsiIW91dGxpbmUi''@;'; put 'put ''XT17fSksZXRbIiFvdXRsaW5lIl0uYWJvdmU9ITA7YnJlYWs7Y2FzZSJub3N1bW1hcnljb2x1bW5zcmlnaHRkZXRhaWwiOmV0WyIhb3V0bGluZSJdfHwoZXRbIiFvdXRsaW5lIl09e30pLGV0WyIhb3V0bGluZSJdLmxlZnQ9ITA7YnJlYWs7ZGVmYXVsdDpkcj0hMX1icmVhaztjYXNlInBpdm90''@;'; put 'put ''dGFibGUiOmNhc2UicGl2b3RjYWNoZSI6c3dpdGNoKHBlWzNdKXtjYXNlImltbWVkaWF0ZWl0ZW1zb25kcm9wIjpjYXNlInNob3dwYWdlbXVsdGlwbGVpdGVtbGFiZWwiOmNhc2UiY29tcGFjdHJvd2luZGVudCI6Y2FzZSJsb2NhdGlvbiI6Y2FzZSJwaXZvdGZpZWxkIjpjYXNlIm9yaWVudGF0''@;'; put 'put ''aW9uIjpjYXNlImxheW91dGZvcm0iOmNhc2UibGF5b3V0c3VidG90YWxsb2NhdGlvbiI6Y2FzZSJsYXlvdXRjb21wYWN0cm93IjpjYXNlInBvc2l0aW9uIjpjYXNlInBpdm90aXRlbSI6Y2FzZSJkYXRhdHlwZSI6Y2FzZSJkYXRhZmllbGQiOmNhc2Uic291cmNlbmFtZSI6Y2FzZSJwYXJlbnRm''@;'; put 'put ''aWVsZCI6Y2FzZSJwdGxpbmVpdGVtcyI6Y2FzZSJwdGxpbmVpdGVtIjpjYXNlImNvdW50b2ZzYW1laXRlbXMiOmNhc2UiaXRlbSI6Y2FzZSJpdGVtdHlwZSI6Y2FzZSJwdHNvdXJjZSI6Y2FzZSJjYWNoZWluZGV4IjpjYXNlImNvbnNvbGlkYXRpb25yZWZlcmVuY2UiOmNhc2UiZmlsZW5hbWUi''@;'; put 'put ''OmNhc2UicmVmZXJlbmNlIjpjYXNlIm5vY29sdW1uZ3JhbmQiOmNhc2Uibm9yb3dncmFuZCI6Y2FzZSJibGFua2xpbmVhZnRlcml0ZW1zIjpjYXNlImhpZGRlbiI6Y2FzZSJzdWJ0b3RhbCI6Y2FzZSJiYXNlZmllbGQiOmNhc2UibWFwY2hpbGRpdGVtcyI6Y2FzZSJmdW5jdGlvbiI6Y2FzZSJy''@;'; put 'put ''ZWZyZXNob25maWxlb3BlbiI6Y2FzZSJwcmludHNldHRpdGxlcyI6Y2FzZSJtZXJnZWxhYmVscyI6Y2FzZSJkZWZhdWx0dmVyc2lvbiI6Y2FzZSJyZWZyZXNobmFtZSI6Y2FzZSJyZWZyZXNoZGF0ZSI6Y2FzZSJyZWZyZXNoZGF0ZWNvcHkiOmNhc2UidmVyc2lvbmxhc3RyZWZyZXNoIjpjYXNl''@;'; put 'put ''InZlcnNpb25sYXN0dXBkYXRlIjpjYXNlInZlcnNpb251cGRhdGVhYmxlbWluIjpjYXNlInZlcnNpb25yZWZyZXNoYWJsZW1pbiI6Y2FzZSJjYWxjdWxhdGlvbiI6YnJlYWs7ZGVmYXVsdDpkcj0hMX1icmVhaztjYXNlInBhZ2VicmVha3MiOnN3aXRjaChwZVszXSl7Y2FzZSJjb2xicmVha3Mi''@;'; put 'put ''OmNhc2UiY29sYnJlYWsiOmNhc2Uicm93YnJlYWtzIjpjYXNlInJvd2JyZWFrIjpjYXNlImNvbHN0YXJ0IjpjYXNlImNvbGVuZCI6Y2FzZSJyb3dlbmQiOmJyZWFrO2RlZmF1bHQ6ZHI9ITF9YnJlYWs7Y2FzZSJhdXRvZmlsdGVyIjpzd2l0Y2gocGVbM10pe2Nhc2UiYXV0b2ZpbHRlcmNvbHVt''@;'; put 'put ''biI6Y2FzZSJhdXRvZmlsdGVyY29uZGl0aW9uIjpjYXNlImF1dG9maWx0ZXJhbmQiOmNhc2UiYXV0b2ZpbHRlcm9yIjpicmVhaztkZWZhdWx0OmRyPSExfWJyZWFrO2Nhc2UicXVlcnl0YWJsZSI6c3dpdGNoKHBlWzNdKXtjYXNlImlkIjpjYXNlImF1dG9mb3JtYXRmb250IjpjYXNlImF1dG9m''@;'; put 'put ''b3JtYXRwYXR0ZXJuIjpjYXNlInF1ZXJ5c291cmNlIjpjYXNlInF1ZXJ5dHlwZSI6Y2FzZSJlbmFibGVyZWRpcmVjdGlvbnMiOmNhc2UicmVmcmVzaGVkaW54bDkiOmNhc2UidXJsc3RyaW5nIjpjYXNlImh0bWx0YWJsZXMiOmNhc2UiY29ubmVjdGlvbiI6Y2FzZSJjb21tYW5kdGV4dCI6Y2Fz''@;'; put 'put ''ZSJyZWZyZXNoaW5mbyI6Y2FzZSJub3RpdGxlcyI6Y2FzZSJuZXh0aWQiOmNhc2UiY29sdW1uaW5mbyI6Y2FzZSJvdmVyd3JpdGVjZWxscyI6Y2FzZSJkb25vdHByb21wdGZvcmZpbGUiOmNhc2UidGV4dHdpemFyZHNldHRpbmdzIjpjYXNlInNvdXJjZSI6Y2FzZSJudW1iZXIiOmNhc2UiZGVj''@;'; put 'put ''aW1hbCI6Y2FzZSJ0aG91c2FuZHNlcGFyYXRvciI6Y2FzZSJ0cmFpbGluZ21pbnVzbnVtYmVycyI6Y2FzZSJmb3JtYXRzZXR0aW5ncyI6Y2FzZSJmaWVsZHR5cGUiOmNhc2UiZGVsaW1pdGVycyI6Y2FzZSJ0YWIiOmNhc2UiY29tbWEiOmNhc2UiYXV0b2Zvcm1hdG5hbWUiOmNhc2UidmVyc2lv''@;'; put 'put ''bmxhc3RlZGl0IjpjYXNlInZlcnNpb25sYXN0cmVmcmVzaCI6YnJlYWs7ZGVmYXVsdDpkcj0hMX1icmVhaztjYXNlImRhdGF2YWxpZGF0aW9uIjpzd2l0Y2gocGVbM10pe2Nhc2UicmFuZ2UiOkZpLnJlZj1wZTticmVhaztjYXNlInR5cGUiOmNhc2UibWluIjpjYXNlIm1heCI6Y2FzZSJzb3J0''@;'; put 'put ''IjpjYXNlImRlc2NlbmRpbmciOmNhc2Uib3JkZXIiOmNhc2UiY2FzZXNlbnNpdGl2ZSI6Y2FzZSJ2YWx1ZSI6Y2FzZSJlcnJvcnN0eWxlIjpjYXNlImVycm9ybWVzc2FnZSI6Y2FzZSJlcnJvcnRpdGxlIjpjYXNlImlucHV0bWVzc2FnZSI6Y2FzZSJpbnB1dHRpdGxlIjpjYXNlImNvbWJvaGlk''@;'; put 'put ''ZSI6Y2FzZSJpbnB1dGhpZGUiOmNhc2UiY29uZGl0aW9uIjpjYXNlInF1YWxpZmllciI6Y2FzZSJ1c2VibGFuayI6Y2FzZSJ2YWx1ZTEiOmNhc2UidmFsdWUyIjpjYXNlImZvcm1hdCI6Y2FzZSJjZWxscmFuZ2VsaXN0IjpicmVhaztkZWZhdWx0OmRyPSExfWJyZWFrO2Nhc2Uic29ydGluZyI6''@;'; put 'put ''Y2FzZSJjb25kaXRpb25hbGZvcm1hdHRpbmciOnN3aXRjaChwZVszXSl7Y2FzZSJyYW5nZSI6Y2FzZSJ0eXBlIjpjYXNlIm1pbiI6Y2FzZSJtYXgiOmNhc2Uic29ydCI6Y2FzZSJkZXNjZW5kaW5nIjpjYXNlIm9yZGVyIjpjYXNlImNhc2VzZW5zaXRpdmUiOmNhc2UidmFsdWUiOmNhc2UiZXJy''@;'; put 'put ''b3JzdHlsZSI6Y2FzZSJlcnJvcm1lc3NhZ2UiOmNhc2UiZXJyb3J0aXRsZSI6Y2FzZSJjZWxscmFuZ2VsaXN0IjpjYXNlImlucHV0bWVzc2FnZSI6Y2FzZSJpbnB1dHRpdGxlIjpjYXNlImNvbWJvaGlkZSI6Y2FzZSJpbnB1dGhpZGUiOmNhc2UiY29uZGl0aW9uIjpjYXNlInF1YWxpZmllciI6''@;'; put 'put ''Y2FzZSJ1c2VibGFuayI6Y2FzZSJ2YWx1ZTEiOmNhc2UidmFsdWUyIjpjYXNlImZvcm1hdCI6YnJlYWs7ZGVmYXVsdDpkcj0hMX1icmVhaztjYXNlIm1hcGluZm8iOmNhc2Uic2NoZW1hIjpjYXNlImRhdGEiOnN3aXRjaChwZVszXSl7Y2FzZSJtYXAiOmNhc2UiZW50cnkiOmNhc2UicmFuZ2Ui''@;'; put 'put ''OmNhc2UieHBhdGgiOmNhc2UiZmllbGQiOmNhc2UieHNkdHlwZSI6Y2FzZSJmaWx0ZXJvbiI6Y2FzZSJhZ2dyZWdhdGUiOmNhc2UiZWxlbWVudHR5cGUiOmNhc2UiYXR0cmlidXRldHlwZSI6Y2FzZSJzY2hlbWEiOmNhc2UiZWxlbWVudCI6Y2FzZSJjb21wbGV4dHlwZSI6Y2FzZSJkYXRhdHlw''@;'; put 'put ''ZSI6Y2FzZSJhbGwiOmNhc2UiYXR0cmlidXRlIjpjYXNlImV4dGVuZHMiOmNhc2Uicm93IjpicmVhaztkZWZhdWx0OmRyPSExfWJyZWFrO2Nhc2Uic21hcnR0YWdzIjpicmVhaztkZWZhdWx0OmRyPSExfWlmKGRyfHxwZVszXS5tYXRjaCgvIVxbQ0RBVEEvKSlicmVhaztpZigheWVbeWUubGVu''@;'; put 'put ''Z3RoLTFdWzFdKXRocm93IlVucmVjb2duaXplZCB0YWc6ICIrcGVbM10rInwiK3llLmpvaW4oInwiKTtpZigiY3VzdG9tZG9jdW1lbnRwcm9wZXJ0aWVzIj09PXllW3llLmxlbmd0aC0xXVswXSl7aWYoIi8+Ij09PXBlWzBdLnNsaWNlKC0yKSlicmVhazsiLyI9PT1wZVsxXT93eihncixzYSxD''@;'; put 'put ''aSxHLnNsaWNlKHRyLHBlLmluZGV4KSk6KENpPXBlLHRyPXBlLmluZGV4K3BlWzBdLmxlbmd0aCk7YnJlYWt9aWYoay5XVEYpdGhyb3ciVW5yZWNvZ25pemVkIHRhZzogIitwZVszXSsifCIreWUuam9pbigifCIpfXZhciBabD17fTtyZXR1cm4hay5ib29rU2hlZXRzJiYhay5ib29rUHJvcHMm''@;'; put 'put ''JihabC5TaGVldHM9TmUpLFpsLlNoZWV0TmFtZXM9WWUsWmwuV29ya2Jvb2s9YmksWmwuU1NGPUEuZ2V0X3RhYmxlKCksWmwuUHJvcHM9dXIsWmwuQ3VzdHByb3BzPWdyLFpsLlNoZWV0cyYmWmwuU2hlZXROYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKGJ1KXt2YXIgQ2w9WmwuU2hlZXRzW2J1XTtD''@;'; put 'put ''bFsiIW1lcmdlcyJdJiZDbFsiIW1lcmdlcyJdLmZvckVhY2goZnVuY3Rpb24obG4peyJzdHJpbmciPT10eXBlb2YgbG4mJihsbj13LnV0aWxzLmRlY29kZV9yYW5nZShsbikpO3ZhciBFbj13LnV0aWxzLmVuY29kZV9jZWxsKGxuLnMpLHpuPUFycmF5LmlzQXJyYXkoQ2wpPyhDbFtsbi5zLnJd''@;'; put 'put ''fHxbXSlbbG4ucy5jXTpDbFtFbl07em4mJnpuLnMmJihudWxsIT16bi5zLnRvcCYmanUuc2hlZXRfc2V0X3JhbmdlX3N0eWxlKENsLGxuLHt0b3A6em4ucy50b3B9KSxudWxsIT16bi5zLmJvdHRvbSYmanUuc2hlZXRfc2V0X3JhbmdlX3N0eWxlKENsLGxuLHtib3R0b206em4ucy5ib3R0b219''@;'; put 'put ''KSxudWxsIT16bi5zLmxlZnQmJmp1LnNoZWV0X3NldF9yYW5nZV9zdHlsZShDbCxsbix7bGVmdDp6bi5zLmxlZnR9KSxudWxsIT16bi5zLnJpZ2h0JiZqdS5zaGVldF9zZXRfcmFuZ2Vfc3R5bGUoQ2wsbG4se3JpZ2h0OnpuLnMucmlnaHR9KSl9KX0pLFpsfWZ1bmN0aW9uIGs4KFMsUil7c3dp''@;'; put 'put ''dGNoKERJKFI9Unx8e30pLFIudHlwZXx8ImJhc2U2NCIpe2Nhc2UiYmFzZTY0IjpyZXR1cm4gQTgoX2UuZGVjb2RlKFMpLFIpO2Nhc2UiYmluYXJ5IjpjYXNlImJ1ZmZlciI6Y2FzZSJmaWxlIjpyZXR1cm4gQTgoUyxSKTtjYXNlImFycmF5IjpyZXR1cm4gQTgoQyhTKSxSKX19ZnVuY3Rpb24g''@;'; put 'put ''ZEkoUyl7cmV0dXJuIEZyKCJOYW1lZFJhbmdlIixudWxsLHsic3M6TmFtZSI6Uy5OYW1lLCJzczpSZWZlcnNUbyI6Ij0iK080KFMuUmVmLHtyOjAsYzowfSl9KX1mdW5jdGlvbiBUbmUoUyxSLGssRyxRLGFlLGdlKXtpZighU3x8bnVsbD09Uy52JiZudWxsPT1TLmYmJiFHLnNoZWV0U3R1YnMp''@;'; put 'put ''cmV0dXJuIiI7dmFyIHBlPXt9O2lmKFMuZiYmKHBlWyJzczpGb3JtdWxhIl09Ij0iK09yKE80KFMuZixnZSkpKSxTLkYmJlMuRi5zbGljZSgwLFIubGVuZ3RoKT09Uil7dmFyIHllPU5hKFMuRi5zbGljZShSLmxlbmd0aCsxKSk7cGVbInNzOkFycmF5UmFuZ2UiXT0iUkM6UiIrKHllLnI9PWdl''@;'; put 'put ''LnI/IiI6IlsiKyh5ZS5yLWdlLnIpKyJdIikrIkMiKyh5ZS5jPT1nZS5jPyIiOiJbIisoeWUuYy1nZS5jKSsiXSIpfWlmKFMubCYmUy5sLlRhcmdldCYmKHBlWyJzczpIUmVmIl09T3IoUy5sLlRhcmdldCksUy5sLlRvb2x0aXAmJihwZVsieDpIUmVmU2NyZWVuVGlwIl09T3IoUy5sLlRvb2x0''@;'; put 'put ''aXApKSksa1siIW1lcmdlcyJdKWZvcih2YXIgUGU9a1siIW1lcmdlcyJdLE5lPTA7TmUhPVBlLmxlbmd0aDsrK05lKVBlW05lXS5zLmMhPWdlLmN8fFBlW05lXS5zLnIhPWdlLnJ8fChQZVtOZV0uZS5jPlBlW05lXS5zLmMmJihwZVsic3M6TWVyZ2VBY3Jvc3MiXT1QZVtOZV0uZS5jLVBlW05l''@;'; put 'put ''XS5zLmMpLFBlW05lXS5lLnI+UGVbTmVdLnMuciYmKHBlWyJzczpNZXJnZURvd24iXT1QZVtOZV0uZS5yLVBlW05lXS5zLnIpKTt2YXIgWWU9IiIsZXQ9IiI7c3dpdGNoKFMudCl7Y2FzZSJ6IjppZighRy5zaGVldFN0dWJzKXJldHVybiIiO2JyZWFrO2Nhc2UibiI6WWU9Ik51bWJlciIsZXQ9''@;'; put 'put ''U3RyaW5nKFMudik7YnJlYWs7Y2FzZSJiIjpZZT0iQm9vbGVhbiIsZXQ9Uy52PyIxIjoiMCI7YnJlYWs7Y2FzZSJlIjpZZT0iRXJyb3IiLGV0PVNjW1Mudl07YnJlYWs7Y2FzZSJkIjpZZT0iRGF0ZVRpbWUiLGV0PW5ldyBEYXRlKFMudikudG9JU09TdHJpbmcoKSxudWxsPT1TLnomJihTLno9''@;'; put 'put ''Uy56fHxBLl90YWJsZVsxNF0pO2JyZWFrO2Nhc2UicyI6WWU9IlN0cmluZyIsZXQ9X28oUy52fHwiIil9dmFyIHV0PXMwKEcuY2VsbFhmcyxudWxsLFMsRyk7cGVbInNzOlN0eWxlSUQiXT0icyIrKDIxK3V0KSxwZVsic3M6SW5kZXgiXT1nZS5jKzE7dmFyIEV0PW51bGwhPVMudj9ldDoiIixv''@;'; put 'put ''dD0ieiI9PVMudD8iIjpTLlI/ZnVuY3Rpb24gX2IoUyl7cmV0dXJuJzxzczpEYXRhIHNzOlR5cGU9IlN0cmluZyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy1odG1sNDAiPicrUy5tYXAoZnVuY3Rpb24oayl7dmFyIEc9X28oay52KTtyZXR1cm4gay5zJiYoay5zLmJvbGQmJihH''@;'; put 'put ''PSI8Qj4iK0crIjwvQj4iKSxrLnMuaXRhbGljJiYoRz0iPEk+IitHKyI8L0k+Iiksay5zLnN0cmlrZSYmKEc9IjxTPiIrRysiPC9TPiIpLGsucy51bmRlcmxpbmUmJihHPSI8VT4iK0crIjwvVT4iKSwic3VwZXIiPT1rLnMudmFsaWduJiYoRz0iPFN1cD4iK0crIjwvU3VwPiIpLCJzdWIiPT1r''@;'; put 'put ''LnMudmFsaWduJiYoRz0iPFN1Yj4iK0crIjwvU3ViPiIpLChrLnMubmFtZXx8ay5zLnN6fHxrLnMuY29sb3ImJm51bGwhPWsucy5jb2xvci5yZ2IpJiYoRz1bIjxGb250IixrLnMubmFtZT8nIGh0bWw6RmFjZT0iJytrLnMubmFtZSsnIic6IiIsay5zLnN6PycgaHRtbDpTaXplPSInK2sucy5z''@;'; put 'put ''eisnIic6IiIsay5zLmNvbG9yPycgaHRtbDpDb2xvcj0iIycrKCIwMDAwMDAiKygibnVtYmVyIj09dHlwZW9mIGsucy5jb2xvci5yZ2I/ay5zLmNvbG9yLnJnYi50b1N0cmluZygxNik6ay5zLmNvbG9yLnJnYikpLnNsaWNlKC02KSsnIic6IiIsIj4iLEcsIjwvRm9udD4iXS5qb2luKCIiKSkp''@;'; put 'put ''LEd9KS5qb2luKCIiKSsiPC9EYXRhPiJ9KFMuUik6JzxEYXRhIHNzOlR5cGU9IicrWWUrJyI+JytFdCsiPC9EYXRhPiI7cmV0dXJuKFMuY3x8W10pLmxlbmd0aD4wJiYob3QrPWZ1bmN0aW9uIGZJKFMpe3JldHVybiBTLm1hcChmdW5jdGlvbihSKXt2YXIgRz1Gcigic3M6RGF0YSIsSG8oUi50''@;'; put 'put ''fHwiIikse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIn0pO3JldHVybiBGcigiQ29tbWVudCIsRyx7InNzOkF1dGhvciI6Ui5hfSl9KS5qb2luKCIiKX0oUy5jKSksRnIoIkNlbGwiLG90LHBlKX1mdW5jdGlvbiBBbmUoUyxSKXt2YXIgaz0nPFJvdyBzczpJbmRleD0i''@;'; put 'put ''JysoUysxKSsnIic7cmV0dXJuIFImJihSLmhweCYmIVIuaHB0JiYoUi5ocHQ9TjMoUi5ocHgpKSxSLmhwdCYmKGsrPScgc3M6QXV0b0ZpdEhlaWdodD0iMCIgc3M6SGVpZ2h0PSInK1IuaHB0KyciJyksUi5oaWRkZW4mJihrKz0nIHNzOkhpZGRlbj0iMSInKSksaysiPiJ9ZnVuY3Rpb24gcEko''@;'; put 'put ''UyxSLGspe3ZhciBHPVtdLGFlPWsuU2hlZXRzW2suU2hlZXROYW1lc1tTXV0sZ2U9YWU/ZnVuY3Rpb24gTXooUyxSLGssRyl7aWYoIVN8fCEoKEd8fHt9KS5Xb3JrYm9va3x8e30pLk5hbWVzKXJldHVybiIiO2Zvcih2YXIgUT1HLldvcmtib29rLk5hbWVzLGFlPVtdLGdlPTA7Z2U8US5sZW5n''@;'; put 'put ''dGg7KytnZSl7dmFyIHBlPVFbZ2VdO3BlLlNoZWV0PT1rJiYocGUuTmFtZS5tYXRjaCgvXl94bGZuXC4vKXx8YWUucHVzaChkSShwZSkpKX1yZXR1cm4gYWUuam9pbigiIil9KGFlLDAsUyxrKToiIjtyZXR1cm4gZ2UubGVuZ3RoPjAmJkcucHVzaCgiPE5hbWVzPiIrZ2UrIjwvTmFtZXM+Iiks''@;'; put 'put ''Z2U9YWU/ZnVuY3Rpb24geHooUyxSLGssRyl7aWYoIVNbIiFyZWYiXSlyZXR1cm4iIjt2YXIgUT1hYShTWyIhcmVmIl0pLGFlPVNbIiFtZXJnZXMiXXx8W10sZ2U9MCxwZT1bXTtTWyIhY29scyJdJiZTWyIhY29scyJdLmZvckVhY2goZnVuY3Rpb24oYnQsQnQpe2UxKGJ0KTt2YXIga3Q9ISFi''@;'; put 'put ''dC53aWR0aCxPdD1sOChCdCxidCksS3Q9eyJzczpJbmRleCI6QnQrMX07a3QmJihLdFsic3M6V2lkdGgiXT13NShPdC53aWR0aCkpLGJ0LmhpZGRlbiYmKEt0WyJzczpIaWRkZW4iXT0iMSIpLHBlLnB1c2goRnIoIkNvbHVtbiIsbnVsbCxLdCkpfSk7Zm9yKHZhciB5ZT1BcnJheS5pc0FycmF5''@;'; put 'put ''KFMpLFBlPVEucy5yO1BlPD1RLmUucjsrK1BlKXtmb3IodmFyIE5lPVtBbmUoUGUsKFNbIiFyb3dzIl18fFtdKVtQZV0pXSxZZT1RLnMuYztZZTw9US5lLmM7KytZZSl7dmFyIGV0PSExO2ZvcihnZT0wO2dlIT1hZS5sZW5ndGg7KytnZSlpZighKGFlW2dlXS5zLmM+WWV8fGFlW2dlXS5zLnI+''@;'; put 'put ''UGV8fGFlW2dlXS5lLmM8WWV8fGFlW2dlXS5lLnI8UGUpKXsoYWVbZ2VdLnMuYyE9WWV8fGFlW2dlXS5zLnIhPVBlKSYmKGV0PSEwKTticmVha31pZighZXQpe3ZhciB1dD17cjpQZSxjOlllfSxFdD1YaSh1dCk7TmUucHVzaChUbmUoeWU/KFNbUGVdfHxbXSlbWWVdOlNbRXRdLEV0LFMsUiww''@;'; put 'put ''LDAsdXQpKX19TmUucHVzaCgiPC9Sb3c+IiksTmUubGVuZ3RoPjImJnBlLnB1c2goTmUuam9pbigiIikpfXJldHVybiBwZS5qb2luKCIiKX0oYWUsUik6IiIsZ2UubGVuZ3RoPjAmJkcucHVzaCgiPFRhYmxlPiIrZ2UrIjwvVGFibGU+IiksRy5wdXNoKGZ1bmN0aW9uIFdTKFMsUixrLEcpe2lm''@;'; put 'put ''KCFTKXJldHVybiIiO3ZhciBRPVtdO2lmKFNbIiFtYXJnaW5zIl0mJihRLnB1c2goIjxQYWdlU2V0dXA+IiksU1siIW1hcmdpbnMiXS5oZWFkZXImJlEucHVzaChGcigiSGVhZGVyIixudWxsLHsieDpNYXJnaW4iOlNbIiFtYXJnaW5zIl0uaGVhZGVyfSkpLFNbIiFtYXJnaW5zIl0uZm9vdGVy''@;'; put 'put ''JiZRLnB1c2goRnIoIkZvb3RlciIsbnVsbCx7Ing6TWFyZ2luIjpTWyIhbWFyZ2lucyJdLmZvb3Rlcn0pKSxRLnB1c2goRnIoIlBhZ2VNYXJnaW5zIixudWxsLHsieDpCb3R0b20iOlNbIiFtYXJnaW5zIl0uYm90dG9tfHwiMC43NSIsIng6TGVmdCI6U1siIW1hcmdpbnMiXS5sZWZ0fHwiMC43''@;'; put 'put ''IiwieDpSaWdodCI6U1siIW1hcmdpbnMiXS5yaWdodHx8IjAuNyIsIng6VG9wIjpTWyIhbWFyZ2lucyJdLnRvcHx8IjAuNzUifSkpLFEucHVzaCgiPC9QYWdlU2V0dXA+IikpLEcmJkcuV29ya2Jvb2smJkcuV29ya2Jvb2suU2hlZXRzJiZHLldvcmtib29rLlNoZWV0c1trXSlpZihHLldvcmti''@;'; put 'put ''b29rLlNoZWV0c1trXS5IaWRkZW4pUS5wdXNoKEZyKCJWaXNpYmxlIiwxPT1HLldvcmtib29rLlNoZWV0c1trXS5IaWRkZW4/IlNoZWV0SGlkZGVuIjoiU2hlZXRWZXJ5SGlkZGVuIix7fSkpO2Vsc2V7Zm9yKHZhciBhZT0wO2FlPGsmJighRy5Xb3JrYm9vay5TaGVldHNbYWVdfHxHLldvcmti''@;'; put 'put ''b29rLlNoZWV0c1thZV0uSGlkZGVuKTsrK2FlKTthZT09ayYmUS5wdXNoKCI8U2VsZWN0ZWQvPiIpfWlmKCgoKChHfHx7fSkuV29ya2Jvb2t8fHt9KS5WaWV3c3x8W10pWzBdfHx7fSkuUlRMJiZRLnB1c2goIjxEaXNwbGF5UmlnaHRUb0xlZnQvPiIpLFp0KFNbIiFncmlkbGluZXMiXSkmJlEu''@;'; put 'put ''cHVzaCgiPERvTm90RGlzcGxheUdyaWRsaW5lcy8+IiksU1siIWZyZWV6ZSJdKXtRLnB1c2goIjxGcmVlemVQYW5lcy8+IiksUS5wdXNoKCI8RnJvemVuTm9TcGxpdC8+Iik7dmFyIGdlPU5hKFNbIiFmcmVlemUiXSk7Z2Uucj4wJiYoUS5wdXNoKE5vKCJTcGxpdEhvcml6b250YWwiLCIiK2dl''@;'; put 'put ''LnIpKSxRLnB1c2goTm8oIlRvcFJvd0JvdHRvbVBhbmUiLCIiK2dlLnIpKSksZ2UuYz4wJiYoUS5wdXNoKE5vKCJTcGxpdFZlcnRpY2FsIiwiIitnZS5jKSksUS5wdXNoKE5vKCJMZWZ0Q29sdW1uUmlnaHRQYW5lIiwiIitnZS5jKSkpfXJldHVybiBTWyIhcHJvdGVjdCJdJiYoUS5wdXNoKE5v''@;'; put 'put ''KCJQcm90ZWN0Q29udGVudHMiLCJUcnVlIikpLFNbIiFwcm90ZWN0Il0ub2JqZWN0cyYmUS5wdXNoKE5vKCJQcm90ZWN0T2JqZWN0cyIsIlRydWUiKSksU1siIXByb3RlY3QiXS5zY2VuYXJpb3MmJlEucHVzaChObygiUHJvdGVjdFNjZW5hcmlvcyIsIlRydWUiKSksbnVsbD09U1siIXByb3Rl''@;'; put 'put ''Y3QiXS5zZWxlY3RMb2NrZWRDZWxsc3x8U1siIXByb3RlY3QiXS5zZWxlY3RMb2NrZWRDZWxscz9udWxsIT1TWyIhcHJvdGVjdCJdLnNlbGVjdFVubG9ja2VkQ2VsbHMmJiFTWyIhcHJvdGVjdCJdLnNlbGVjdFVubG9ja2VkQ2VsbHMmJlEucHVzaChObygiRW5hYmxlU2VsZWN0aW9uIiwiVW5s''@;'; put 'put ''b2NrZWRDZWxscyIpKTpRLnB1c2goTm8oIkVuYWJsZVNlbGVjdGlvbiIsIk5vU2VsZWN0aW9uIikpLFtbImZvcm1hdENlbGxzIiwiQWxsb3dGb3JtYXRDZWxscyJdLFsiZm9ybWF0Q29sdW1ucyIsIkFsbG93U2l6ZUNvbHMiXSxbImZvcm1hdFJvd3MiLCJBbGxvd1NpemVSb3dzIl0sWyJpbnNl''@;'; put 'put ''cnRDb2x1bW5zIiwiQWxsb3dJbnNlcnRDb2xzIl0sWyJpbnNlcnRSb3dzIiwiQWxsb3dJbnNlcnRSb3dzIl0sWyJpbnNlcnRIeXBlcmxpbmtzIiwiQWxsb3dJbnNlcnRIeXBlcmxpbmtzIl0sWyJkZWxldGVDb2x1bW5zIiwiQWxsb3dEZWxldGVDb2xzIl0sWyJkZWxldGVSb3dzIiwiQWxsb3dE''@;'; put 'put ''ZWxldGVSb3dzIl0sWyJzb3J0IiwiQWxsb3dTb3J0Il0sWyJhdXRvRmlsdGVyIiwiQWxsb3dGaWx0ZXIiXSxbInBpdm90VGFibGVzIiwiQWxsb3dVc2VQaXZvdFRhYmxlcyJdXS5mb3JFYWNoKGZ1bmN0aW9uKHBlKXtTWyIhcHJvdGVjdCJdW3BlWzBdXSYmUS5wdXNoKCI8IitwZVsxXSsiLz4i''@;'; put 'put ''KX0pKSwwPT1RLmxlbmd0aD8iIjpGcigiV29ya3NoZWV0T3B0aW9ucyIsUS5qb2luKCIiKSx7eG1sbnM6dmwueH0pfShhZSwwLFMsaykpLEcuam9pbigiIil9ZnVuY3Rpb24gZ0koUyxSKXtSfHwoUj17fSksUy5TU0Z8fChTLlNTRj1BLmdldF90YWJsZSgpKSxTLlNTRiYmKG9lKEEpLEEubG9h''@;'; put 'put ''ZF90YWJsZShTLlNTRiksUi5yZXZzc2Y9a2UoUy5TU0YpLFIucmV2c3NmW1MuU1NGWzY1NTM1XV09MCxSLnNzZj1TLlNTRixTLlN0eWxlcz17Rm9udHM6Ui5Gb250cz1be3N6OjEyLGNvbG9yOnt0aGVtZToxLHJnYjoiMDAwMDAwIn0sbmFtZToiQ2FsaWJyaSIsZmFtaWx5OjIsc2NoZW1lOiJt''@;'; put 'put ''aW5vciJ9XSxGaWxsczpSLkZpbGxzPVt7cGF0dGVyblR5cGU6Im5vbmUifSx7cGF0dGVyblR5cGU6ImdyYXkxMjUifV0sQm9yZGVyczpSLkJvcmRlcnM9W3t9XX0sUi5jZWxsWGZzPVtdLFIuY2VsbFN0eWxlWGZzPVt7bmFtZToiTm9ybWFsIn1dLHMwKFIuY2VsbFhmcyxudWxsLHt9LHtyZXZz''@;'; put 'put ''c2Y6e0dlbmVyYWw6MH19KSk7dmFyIGs9W107ay5wdXNoKGZ1bmN0aW9uIGxJKFMsUil7dmFyIGs9W107cmV0dXJuIFMuUHJvcHMmJmsucHVzaChmdW5jdGlvbiBVdyhTLFIpe3ZhciBrPVtdO3JldHVybiBSZShMNikubWFwKGZ1bmN0aW9uKEcpe2Zvcih2YXIgUT0wO1E8UjAubGVuZ3RoOysr''@;'; put 'put ''USlpZihSMFtRXVsxXT09RylyZXR1cm4gUjBbUV07Zm9yKFE9MDtRPGVoLmxlbmd0aDsrK1EpaWYoZWhbUV1bMV09PUcpcmV0dXJuIGVoW1FdO3Rocm93IEd9KS5mb3JFYWNoKGZ1bmN0aW9uKEcpe2lmKG51bGwhPVNbR1sxXV0pe3ZhciBRPVImJlIuUHJvcHMmJm51bGwhPVIuUHJvcHNbR1sx''@;'; put 'put ''XV0/Ui5Qcm9wc1tHWzFdXTpTW0dbMV1dOyJkYXRlIj09PUdbMl0mJihRPW5ldyBEYXRlKFEpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvXC5cZCpaLywiWiIpKSwibnVtYmVyIj09dHlwZW9mIFE/UT1TdHJpbmcoUSk6ITA9PT1RfHwhMT09PVE/UT1RPyIxIjoiMCI6USBpbnN0YW5jZW9mIERh''@;'; put 'put ''dGUmJihRPW5ldyBEYXRlKFEpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvXC5cZCpaLywiIikpLGsucHVzaChObyhMNltHWzFdXXx8R1sxXSxRKSl9fSksRnIoIkRvY3VtZW50UHJvcGVydGllcyIsay5qb2luKCIiKSx7eG1sbnM6dmwub30pfShTLlByb3BzLFIpKSxTLkN1c3Rwcm9wcyYmay5w''@;'; put 'put ''dXNoKGZ1bmN0aW9uIFA2KFMsUil7dmFyIGs9WyJXb3Jrc2hlZXRzIiwiU2hlZXROYW1lcyJdLEc9IkN1c3RvbURvY3VtZW50UHJvcGVydGllcyIsUT1bXTtyZXR1cm4gUyYmUmUoUykuZm9yRWFjaChmdW5jdGlvbihhZSl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxs''@;'; put 'put ''KFMsYWUpKXtmb3IodmFyIGdlPTA7Z2U8UjAubGVuZ3RoOysrZ2UpaWYoYWU9PVIwW2dlXVsxXSlyZXR1cm47Zm9yKGdlPTA7Z2U8ZWgubGVuZ3RoOysrZ2UpaWYoYWU9PWVoW2dlXVsxXSlyZXR1cm47Zm9yKGdlPTA7Z2U8ay5sZW5ndGg7KytnZSlpZihhZT09a1tnZV0pcmV0dXJuO3ZhciBw''@;'; put 'put ''ZT1TW2FlXSx5ZT0ic3RyaW5nIjsibnVtYmVyIj09dHlwZW9mIHBlPyh5ZT0iZmxvYXQiLHBlPVN0cmluZyhwZSkpOiEwPT09cGV8fCExPT09cGU/KHllPSJib29sZWFuIixwZT1wZT8iMSI6IjAiKTpwZT1TdHJpbmcocGUpLFEucHVzaChGcihnbyhhZSkscGUseyJkdDpkdCI6eWV9KSl9fSks''@;'; put 'put ''UiYmUmUoUikuZm9yRWFjaChmdW5jdGlvbihhZSl7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFIsYWUpJiYoIVN8fCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUyxhZSkpKXt2YXIgZ2U9UlthZV0scGU9InN0cmluZyI7Im51bWJlciI9PXR5''@;'; put 'put ''cGVvZiBnZT8ocGU9ImZsb2F0IixnZT1TdHJpbmcoZ2UpKTohMD09PWdlfHwhMT09PWdlPyhwZT0iYm9vbGVhbiIsZ2U9Z2U/IjEiOiIwIik6Z2UgaW5zdGFuY2VvZiBEYXRlPyhwZT0iZGF0ZVRpbWUudHoiLGdlPWdlLnRvSVNPU3RyaW5nKCkpOmdlPVN0cmluZyhnZSksUS5wdXNoKEZyKGdv''@;'; put 'put ''KGFlKSxnZSx7ImR0OmR0IjpwZX0pKX19KSwiPCIrRysnIHhtbG5zPSInK3ZsLm8rJyI+JytRLmpvaW4oIiIpKyI8LyIrRysiPiJ9KFMuUHJvcHMsUy5DdXN0cHJvcHMpKSxrLmpvaW4oIiIpfShTLFIpKSxrLnB1c2goIiIpLGsucHVzaCgiIiksay5wdXNoKCIiKTtmb3IodmFyIEc9MDtHPFMu''@;'; put 'put ''U2hlZXROYW1lcy5sZW5ndGg7KytHKWsucHVzaChGcigiV29ya3NoZWV0IixwSShHLFIsUykseyJzczpOYW1lIjpPcihTLlNoZWV0TmFtZXNbR10pfSkpO3JldHVybiBrWzJdPWZ1bmN0aW9uIHVJKFMsUil7dmFyIEc9W1snPFN0eWxlIHNzOklEPSJEZWZhdWx0IiBzczpOYW1lPSJOb3JtYWwi''@;'; put 'put ''PicsJzxBbGlnbm1lbnQgc3M6VmVydGljYWw9IkJvdHRvbSIvPicsIjxCb3JkZXJzLz4iLCc8Rm9udCBzczpGb250TmFtZT0iQ2FsaWJyaSIgeDpGYW1pbHk9IlN3aXNzIiBzczpTaXplPSIxMiIgc3M6Q29sb3I9IiMwMDAwMDAiLz4nLCI8SW50ZXJpb3IvPiIsIjxOdW1iZXJGb3JtYXQvPiIs''@;'; put 'put ''IjxQcm90ZWN0aW9uLz4iLCI8L1N0eWxlPiJdLmpvaW4oIiIpXTtyZXR1cm4gUi5jZWxsWGZzLmZvckVhY2goZnVuY3Rpb24oUSxhZSl7dmFyIGdlPVtdO2lmKFEuYWxpZ25tZW50KXt2YXIgcGU9e307US5hbGlnbm1lbnQuc2hyaW5rVG9GaXQmJihwZVsic3M6U2hyaW5rVG9GaXQiXT0iMSIp''@;'; put 'put ''LFEuYWxpZ25tZW50LndyYXBUZXh0JiYocGVbInNzOldyYXBUZXh0Il09IjEiKSxRLmFsaWdubWVudC52ZXJ0aWNhbCYmKHBlWyJzczpWZXJ0aWNhbCJdPUF0KFEuYWxpZ25tZW50LnZlcnRpY2FsKSksUS5hbGlnbm1lbnQuaG9yaXpvbnRhbCYmKHBlWyJzczpIb3Jpem9udGFsIl09QXQoUS5h''@;'; put 'put ''bGlnbm1lbnQuaG9yaXpvbnRhbCkpLFEuYWxpZ25tZW50LmluZGVudCYmKHBlWyJzczpJbmRlbnQiXT1RLmFsaWdubWVudC5pbmRlbnQpLFEuYWxpZ25tZW50LnRleHRSb3RhdGlvbiYmKHBlWyJzczpSb3RhdGUiXT1RLmFsaWdubWVudC50ZXh0Um90YXRpb24pLGdlLnB1c2goRnIoIkFsaWdu''@;'; put 'put ''bWVudCIsbnVsbCxwZSkpfWU6aWYobnVsbCE9US5mb250SWQpe3ZhciB5ZT1SLkZvbnRzW1EuZm9udElkXTtpZigheWUpYnJlYWsgZTt2YXIgUGU9eyJzczpGb250TmFtZSI6IkNhbGlicmkiLCJzczpTaXplIjoiMTIifSxOZT0hMTt5ZS5ib2xkJiYoTmU9ITAsUGVbInNzOkJvbGQiXT0iMSIp''@;'; put 'put ''LHllLml0YWxpYyYmKE5lPSEwLFBlWyJzczpJdGFsaWMiXT0iMSIpLHllLnN0cmlrZSYmKE5lPSEwLFBlWyJzczpTdHJpa2VUaHJvdWdoIl09IjEiKSxudWxsIT15ZS51bmRlcmxpbmUmJihOZT0hMCxQZVsic3M6VW5kZXJsaW5lIl09eWJbeWUudW5kZXJsaW5lXXx8KHllLnVuZGVybGluZT8i''@;'; put 'put ''U2luZ2xlIjoiTm9uZSIpKSxudWxsIT15ZS5zeiYmKE5lPSEwLFBlWyJzczpTaXplIl09eWUuc3opLG51bGwhPXllLm5hbWUmJihOZT0hMCxQZVsic3M6Rm9udE5hbWUiXT15ZS5uYW1lKSx5ZS5jb2xvciYmbnVsbCE9eWUuY29sb3IucmdiJiYoTmU9ITAsUGVbInNzOkNvbG9yIl09IiMiKygi''@;'; put 'put ''bnVtYmVyIj09dHlwZW9mIHllLmNvbG9yLnJnYj8iMDAwMDAwIit5ZS5jb2xvci5yZ2IudG9TdHJpbmcoMTYpOnllLmNvbG9yLnJnYikuc2xpY2UoLTYpKSxbInN1YiIsInN1cGVyIl0uaW5kZXhPZih5ZS52YWxpZ24pPi0xJiYoUGVbInNzOlZlcnRpY2FsQWxpZ24iXT1BdCh5ZS52YWxpZ24p''@;'; put 'put ''KyJzY3JpcHQiKSxOZSYmZ2UucHVzaChGcigiRm9udCIsbnVsbCxQZSkpfWU6aWYoUS5maWxsSWQ+MCl7dmFyIFllPVIuRmlsbHNbUS5maWxsSWRdO2lmKCFZZXx8IVllLmZnQ29sb3J8fG51bGw9PVllLmZnQ29sb3IucmdiKWJyZWFrIGU7Z2UucHVzaChGcigiSW50ZXJpb3IiLG51bGwseyJz''@;'; put 'put ''czpQYXR0ZXJuIjptQ1tZZS5wYXR0ZXJuVHlwZV18fCJTb2xpZCIsInNzOkNvbG9yIjoiIyIrKCJudW1iZXIiPT10eXBlb2YgWWUuZmdDb2xvci5yZ2I/IjAwIitZZS5mZ0NvbG9yLnJnYi50b1N0cmluZygxNik6WWUuZmdDb2xvci5yZ2IpLnNsaWNlKC02KX0pKX1nZS5wdXNoKEZyKCJOdW1i''@;'; put 'put ''ZXJGb3JtYXQiLG51bGwseyJzczpGb3JtYXQiOk9yKEEuX3RhYmxlW1EubnVtRm10SWRdKX0pKTt2YXIgZXQ9eyJzczpJRCI6InMiKygyMSthZSl9O1Euc3R5bGUmJihldFsic3M6TmFtZSJdPVEuc3R5bGUpLEcucHVzaChGcigiU3R5bGUiLGdlLmpvaW4oIiIpLGV0KSl9KSxGcigiU3R5bGVz''@;'; put 'put ''IixHLmpvaW4oIiIpKX0oMCxSKSxrWzNdPWZ1bmN0aW9uIGhJKFMpe2lmKCEoKFN8fHt9KS5Xb3JrYm9va3x8e30pLk5hbWVzKXJldHVybiIiO2Zvcih2YXIgUj1TLldvcmtib29rLk5hbWVzLGs9W10sRz0wO0c8Ui5sZW5ndGg7KytHKXt2YXIgUT1SW0ddO251bGw9PVEuU2hlZXQmJihRLk5h''@;'; put 'put ''bWUubWF0Y2goL15feGxmblwuLyl8fGsucHVzaChkSShRKSkpfXJldHVybiBGcigiTmFtZXMiLGsuam9pbigiIikpfShTKSxJaStGcigiV29ya2Jvb2siLGsuam9pbigiIikse3htbG5zOnZsLnNzLCJ4bWxuczpvIjp2bC5vLCJ4bWxuczp4Ijp2bC54LCJ4bWxuczpzcyI6dmwuc3MsInhtbG5z''@;'; put 'put ''OmR0Ijp2bC5kdCwieG1sbnM6aHRtbCI6dmwuaHRtbH0pfWZ1bmN0aW9uIG1JKFMsUixrLEcpe3ZhciBRPWssYWU9W10sZ2U9Ui5zbGljZShSLmwsUi5sK1EpO2lmKEcmJkcuZW5jJiZHLmVuYy5pbnNpdHUmJmdlLmxlbmd0aD4wKXN3aXRjaChTLm4pe2Nhc2UiQk9GIjpjYXNlIkZpbGVQYXNz''@;'; put 'put ''IjpjYXNlIkZpbGVMb2NrIjpjYXNlIkludGVyZmFjZUhkciI6Y2FzZSJSUkRJbmZvIjpjYXNlIlJSREhlYWQiOmNhc2UiVXNyRXhjbCI6Y2FzZSJFT0YiOkcuZW5jLmluc2l0dShTZSh7bGVuZ3RoOmdlLmxlbmd0aH0pLCJza2lwIik7YnJlYWs7Y2FzZSJCb3VuZFNoZWV0OCI6Ry5lbmMuaW5z''@;'; put 'put ''aXR1KFNlKHtsZW5ndGg6NH0pLCJza2lwIiksZ2U9QnVmZmVyLmNvbmNhdChbQnVmZmVyLmZyb20oZ2Uuc2xpY2UoMCw0KSksQnVmZmVyLmZyb20oRy5lbmMuaW5zaXR1KGdlLnNsaWNlKDQpKSldKTticmVhaztkZWZhdWx0OmdlPUcuZW5jLmluc2l0dShnZSl9QXJyYXkuaXNBcnJheShSKSYm''@;'; put 'put ''IUFycmF5LmlzQXJyYXkoZ2UpJiYoZ2U9QXJyYXkuZnJvbShnZSkpLGFlLnB1c2goZ2UpLFIubCs9UTtmb3IodmFyIHBlPSRTW2VhKFIsUi5sKV0seWU9MDtudWxsIT1wZSYmIkNvbnRpbnVlIj09PXBlLm4uc2xpY2UoMCw4KTspUT1lYShSLFIubCsyKSx5ZT1SLmwrNCxHJiZHLmVuYyYmRy5l''@;'; put 'put ''bmMuaW5zaXR1JiZHLmVuYy5pbnNpdHUoU2Uoe2xlbmd0aDo0fSksInNraXAiKSwiQ29udGludWVGcnQiPT1wZS5uP3llKz00OiJDb250aW51ZUZydCI9PXBlLm4uc2xpY2UoMCwxMSkmJih5ZSs9MTIsRyYmRy5lbmMmJkcuZW5jLmluc2l0dSYmRy5lbmMuaW5zaXR1KFNlKHtsZW5ndGg6OH0p''@;'; put 'put ''LCJza2lwIikpLGdlPVIuc2xpY2UoeWUsUi5sKzQrUSksRyYmRy5lbmMmJkcuZW5jLmluc2l0dSYmZ2UubGVuZ3RoPjAmJihnZT1HLmVuYy5pbnNpdHUoZ2UpKSxhZS5wdXNoKGdlKSxSLmwrPTQrUSxwZT0kU1tlYShSLFIubCldO3ZhciBQZT1qKGFlKTt2bihQZSwwKTt2YXIgTmU9MDtQZS5s''@;'; put 'put ''ZW5zPVtdO2Zvcih2YXIgWWU9MDtZZTxhZS5sZW5ndGg7KytZZSlQZS5sZW5zLnB1c2goTmUpLE5lKz1hZVtZZV0ubGVuZ3RoO2lmKFBlLmxlbmd0aDxrKXRocm93IlhMUyBSZWNvcmQgIisoUyYmUy5ufHwiPz8iKSsiIFRydW5jYXRlZDogIitQZS5sZW5ndGgrIiA8ICIraztyZXR1cm4gUy5m''@;'; put 'put ''KFBlLFBlLmxlbmd0aCxHKX1mdW5jdGlvbiBsaChTLFIsayl7aWYoInoiIT09Uy50JiZTLlhGKXt2YXIgRz0wO3RyeXtHPVMuenx8Uy5YRi5udW1GbXRJZHx8MCxSLmNlbGxORiYmKFMuej1BLl90YWJsZVtHXSl9Y2F0Y2goYWUpe2lmKFIuV1RGKXRocm93IGFlfWlmKCFSfHwhMSE9PVIuY2Vs''@;'; put 'put ''bFRleHQpdHJ5e1Mudz0iZSI9PT1TLnQ/Uy53fHxTY1tTLnZdOjA9PT1HfHwiR2VuZXJhbCI9PUc/Im4iPT09Uy50PygwfFMudik9PT1TLnY/QS5fZ2VuZXJhbF9pbnQoUy52KTpBLl9nZW5lcmFsX251bShTLnYpOkEuX2dlbmVyYWwoUy52KTpBLmZvcm1hdChHLFMudix7ZGF0ZTE5MDQ6ISFr''@;'; put 'put ''LGRhdGVORjpSJiZSLmRhdGVORn0pfWNhdGNoKGFlKXtpZihSLldURil0aHJvdyBhZX1pZihSLmNlbGxEYXRlcyYmRyYmIm4iPT1TLnQmJkEuaXNfZGF0ZShBLl90YWJsZVtHXXx8U3RyaW5nKEcpKSl7dmFyIFE9QS5wYXJzZV9kYXRlX2NvZGUoUy52KTtRJiYoUy50PSJkIixTLnY9bmV3IERh''@;'; put 'put ''dGUoUS55LFEubS0xLFEuZCxRLkgsUS5NLFEuUyxRLnUpKX19fWZ1bmN0aW9uIEQ4KFMsUixrKXtyZXR1cm57djpTLGl4ZmU6Uix0Omt9fXZhciB2ST1mdW5jdGlvbihTLFIsayl7UlsiIW9iamVjdHMiXT1TfSx3Yj17U0k6ImUwODU5ZmYyZjk0ZjY4MTBhYjkxMDgwMDJiMjdiM2Q5IixEU0k6''@;'; put 'put ''IjAyZDVjZGQ1OWMyZTFiMTA5Mzk3MDgwMDJiMmNmOWFlIixVREk6IjA1ZDVjZGQ1OWMyZTFiMTA5Mzk3MDgwMDJiMmNmOWFlIn07ZnVuY3Rpb24gR1MoUyxSKXt2YXIgayxHLFEsYWU7aWYoUnx8KFI9e30pLERJKFIpLFcoKSxSLmNvZGVwYWdlJiZMKFIuY29kZXBhZ2UpLFMuRnVsbFBhdGhz''@;'; put 'put ''KXtpZih2ZS5maW5kKFMsIi9lbmNyeXB0aW9uIikpdGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZCIpO2s9dmUuZmluZChTLCIhQ29tcE9iaiIpLEc9dmUuZmluZChTLCIvV29ya2Jvb2siKXx8dmUuZmluZChTLCIvQm9vayIpfWVsc2V7c3dpdGNoKFIudHlwZSl7''@;'; put 'put ''Y2FzZSJiYXNlNjQiOlM9YihfZS5kZWNvZGUoUykpO2JyZWFrO2Nhc2UiYmluYXJ5IjpTPWIoUyk7YnJlYWs7Y2FzZSJidWZmZXIiOmJyZWFrO2Nhc2UiYXJyYXkiOkFycmF5LmlzQXJyYXkoUyl8fChTPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKFMpKX12bihTLDApLEc9e2NvbnRlbnQ6''@;'; put 'put ''U319aWYoayYmZnVuY3Rpb24gWVMoUyl7dmFyIFI9e30saz1TLmNvbnRlbnQ7aWYoay5sPTI4LFIuQW5zaVVzZXJUeXBlPWsucmVhZF9zaGlmdCgwLCJscHN0ci1hbnNpIiksUi5BbnNpQ2xpcGJvYXJkRm9ybWF0PWZ1bmN0aW9uIF8wKFMpe3JldHVybiBPdyhTLDEpfShrKSxrLmxlbmd0aC1r''@;'; put 'put ''Lmw8PTQpcmV0dXJuIFI7dmFyIEc9ay5yZWFkX3NoaWZ0KDQpO2lmKDA9PUd8fEc+NDB8fChrLmwtPTQsUi5SZXNlcnZlZDE9ay5yZWFkX3NoaWZ0KDAsImxwc3RyLWFuc2kiKSxrLmxlbmd0aC1rLmw8PTQpfHwxOTA3NTA1NjUyIT09KEc9ay5yZWFkX3NoaWZ0KDQpKXx8KFIuVW5pY29kZUNs''@;'; put 'put ''aXBib2FyZEZvcm1hdD1mdW5jdGlvbiBFNihTKXtyZXR1cm4gT3coUywyKX0oayksMD09KEc9ay5yZWFkX3NoaWZ0KDQpKXx8Rz40MCkpcmV0dXJuIFI7ay5sLT00LFIuUmVzZXJ2ZWQyPWsucmVhZF9zaGlmdCgwLCJscHdzdHIiKX0oayksUi5ib29rUHJvcHMmJiFSLmJvb2tTaGVldHMpUT17''@;'; put 'put ''fTtlbHNle3ZhciBnZT1UZT8iYnVmZmVyIjoiYXJyYXkiO2lmKEcmJkcuY29udGVudClRPWZ1bmN0aW9uIEV6KFMsUil7dmFyIGs9e29wdHM6e319LEc9e307bnVsbCE9bGUmJm51bGw9PVIuZGVuc2UmJihSLmRlbnNlPWxlKTt2YXIgWWUsdXQsb3QsYnQsT3QsS3QsUT1SLmRlbnNlP1tdOnt9''@;'; put 'put ''LGFlPXt9LGdlPXt9LHBlPW51bGwseWU9W10sUGU9IiIsTmU9e30sZXQ9IiIsQnQ9e30sa3Q9W10sVG49W10saXI9W10sU249e1NoZWV0czpbXSxXQlByb3BzOntkYXRlMTkwNDohMX0sVmlld3M6W3t9XX0sc3I9e30sSm49e0ZvbnRzOltdfSxWbj1mdW5jdGlvbihEaSl7cmV0dXJuIERpPDg/''@;'; put 'put ''bjBbRGldOkRpPDY0JiZpcltEaS04XXx8bjBbRGldfSx1cj1mdW5jdGlvbihEaSxhcyl7dmFyIFNsLFdhPURpLlhGLmRhdGE7V2EmJihXYS5wYXR0ZXJuVHlwZXx8bnVsbCE9V2EuaWN2Rm9yZSkmJmFzJiZhcy5jZWxsU3R5bGVzJiYoRGkucz17fSxEaS5zLnBhdHRlcm5UeXBlPVdhLnBhdHRl''@;'; put 'put ''cm5UeXBlLERpLlhGLmZvbnQmJlB0KERpLnMsRGkuWEYuZm9udCksV2EuZldyYXAmJigoRGkucy5hbGlnbm1lbnR8fChEaS5zLmFsaWdubWVudD17fSkpLndyYXBUZXh0PSEwKSxXYS5mU2hyaW5rVG9GaXQmJigoRGkucy5hbGlnbm1lbnR8fChEaS5zLmFsaWdubWVudD17fSkpLnNocmlua1Rv''@;'; put 'put ''Rml0PSEwKSxXYS5oYWxpZ24mJigoRGkucy5hbGlnbm1lbnR8fChEaS5zLmFsaWdubWVudD17fSkpLmhvcml6b250YWw9V2EuaGFsaWduKSxXYS52YWxpZ24mJigoRGkucy5hbGlnbm1lbnR8fChEaS5zLmFsaWdubWVudD17fSkpLnZlcnRpY2FsPVdhLnZhbGlnbiksV2EuY0luZGVudCYmKChE''@;'; put 'put ''aS5zLmFsaWdubWVudHx8KERpLnMuYWxpZ25tZW50PXt9KSkuaW5kZW50PVdhLmNJbmRlbnQpLDY0IT1XYS5pY3ZGb3JlJiY2NSE9V2EuaWN2QmFjayYmKChTbD1oZChWbihXYS5pY3ZGb3JlKSkpJiYoRGkucy5mZ0NvbG9yPXtyZ2I6U2x9KSwoU2w9aGQoVm4oV2EuaWN2QmFjaykpKSYmKERp''@;'; put 'put ''LnMuYmdDb2xvcj17cmdiOlNsfSkpLFsiTGVmdCIsIlJpZ2h0IiwiVG9wIiwiQm90dG9tIl0uZm9yRWFjaChmdW5jdGlvbih5dSl7V2FbImRnIit5dV0mJihEaS5zW3l1LnRvTG93ZXJDYXNlKCldPXtzdHlsZTpwZFtXYVsiZGciK3l1XV0sY29sb3I6e3JnYjpoZChWbihXYVsiaWN2Iit5dV0p''@;'; put 'put ''KX19KX0pKX0sZ3I9ZnVuY3Rpb24oRGksYXMsV2Epe2lmKCEoV2k+MXx8V2Euc2hlZXRSb3dzJiZEaS5yPj1XYS5zaGVldFJvd3MpKXtpZihXYS5jZWxsU3R5bGVzJiZhcy5YRiYmYXMuWEYuZGF0YSYmdXIoYXMsV2EpLGRlbGV0ZSBhcy5peGZlLGRlbGV0ZSBhcy5YRixZZT1EaSxldD1YaShE''@;'; put 'put ''aSksKCFnZXx8IWdlLnN8fCFnZS5lKSYmKGdlPXtzOntyOjAsYzowfSxlOntyOjAsYzowfX0pLERpLnI8Z2Uucy5yJiYoZ2Uucy5yPURpLnIpLERpLmM8Z2Uucy5jJiYoZ2Uucy5jPURpLmMpLERpLnIrMT5nZS5lLnImJihnZS5lLnI9RGkucisxKSxEaS5jKzE+Z2UuZS5jJiYoZ2UuZS5jPURp''@;'; put 'put ''LmMrMSksV2EuY2VsbEZvcm11bGEmJmFzLmYpZm9yKHZhciBTbD0wO1NsPGt0Lmxlbmd0aDsrK1NsKWlmKCEoa3RbU2xdWzBdLnMuYz5EaS5jfHxrdFtTbF1bMF0ucy5yPkRpLnJ8fGt0W1NsXVswXS5lLmM8RGkuY3x8a3RbU2xdWzBdLmUucjxEaS5yKSl7YXMuRj1vbyhrdFtTbF1bMF0pLChr''@;'; put 'put ''dFtTbF1bMF0ucy5jIT1EaS5jfHxrdFtTbF1bMF0ucy5yIT1EaS5yKSYmZGVsZXRlIGFzLmYsYXMuZiYmKGFzLmY9IiIrYTAoa3RbU2xdWzFdLGdlLERpLEhuLHRyKSk7YnJlYWt9V2EuZGVuc2U/KFFbRGkucl18fChRW0RpLnJdPVtdKSxRW0RpLnJdW0RpLmNdPWFzKTpRW2V0XT1hc319LHRy''@;'; put 'put ''PXtlbmM6ITEsc2JjY2g6MCxzbmFtZXM6W10sc2hhcmVkZjpCdCxhcnJheWY6a3QscnJ0YWJpZDpbXSxsYXN0dXNlcjoiIixiaWZmOjgsY29kZXBhZ2U6MCx3aW5sb2NrZWQ6MCxjZWxsU3R5bGVzOiEhUiYmISFSLmNlbGxTdHlsZXMsV1RGOiEhUiYmISFSLnd0Zn07dHIucGFzc3dvcmQ9Ui5w''@;'; put 'put ''YXNzd29yZD9SLnBhc3N3b3JkOiJWZWx2ZXRTd2VhdHNob3AiO3ZhciBGaSxDaT1udWxsLGlvPVtdLHVvPVtdLExpPVtdLERyPVtdLHZyPSExLEhuPVtdO0huLlNoZWV0TmFtZXM9dHIuc25hbWVzLEhuLnNoYXJlZGY9dHIuc2hhcmVkZixIbi5hcnJheWY9dHIuYXJyYXlmLEhuLm5hbWVzPVtd''@;'; put 'put ''LEhuLlhUST1bXTt2YXIgYW8sQnI9IiIsV2k9MCxiaT0wLHdvPVtdLHNhPVtdO3RyLmNvZGVwYWdlPTEyMDAsVSgxMjAwKTtmb3IodmFyIFJhPSExO1MubDxTLmxlbmd0aC0xOyl7dmFyIFBvPVMubCxoYT1TLnJlYWRfc2hpZnQoMik7aWYodHImJnRyLmVuYyYmdHIuZW5jLmluc2l0dSYmdHIu''@;'; put 'put ''ZW5jLmluc2l0dShTZShbMCwwXSksImhlYWRlci0wIiksMD09PWhhJiYiRU9GIj09PUJyKWJyZWFrO3ZhciBKbz1TLmw9PT1TLmxlbmd0aD8wOlMucmVhZF9zaGlmdCgyKTt0ciYmdHIuZW5jJiZ0ci5lbmMuaW5zaXR1JiZ0ci5lbmMuaW5zaXR1KFNlKFswLDBdKSwibGVuZ3RoLTAiKTt2YXIg''@;'; put 'put ''amk9JFNbaGFdO2lmKGppJiZqaS5mKXtpZihSLmJvb2tTaGVldHMmJiJCb3VuZFNoZWV0OCI9PT1CciYmIkJvdW5kU2hlZXQ4IiE9PWppLm4pYnJlYWs7aWYoQnI9amkubiwyPT09amkucnx8MTI9PWppLnIpe3ZhciBJcz1TLnJlYWRfc2hpZnQoMik7aWYoSm8tPTIsdHImJnRyLmVuYyYmdHIu''@;'; put 'put ''ZW5jLmluc2l0dSYmdHIuZW5jLmluc2l0dShTZShbMCwwXSkpLCF0ci5lbmMmJklzIT09aGEmJigoMjU1JklzKTw8OHxJcz4+OCkhPT1oYSl0aHJvdyBuZXcgRXJyb3IoInJ0IG1pc21hdGNoOiAiK0lzKyIhPSIraGEpOzEyPT1qaS5yJiYoUy5sKz0xMCxKby09MTAsdHImJnRyLmVuYyYmdHIu''@;'; put 'put ''ZW5jLmluc2l0dSYmdHIuZW5jLmluc2l0dShTZShbMCwwLDAsMCwwLDAsMCwwLDAsMF0pKSl9dmFyIEZuPW1JKGppLFMsSm8sdHIpLFphPWppLm47aWYoMD09V2kmJiJCT0YiIT1aYSljb250aW51ZTtzd2l0Y2goWmEpe2Nhc2UiRGF0ZTE5MDQiOmsub3B0cy5EYXRlMTkwND1Tbi5XQlByb3Bz''@;'; put 'put ''LmRhdGUxOTA0PUZuO2JyZWFrO2Nhc2UiV3JpdGVQcm90ZWN0IjprLm9wdHMuV3JpdGVQcm90ZWN0PSEwO2JyZWFrO2Nhc2UiRmlsZVBhc3MiOmlmKHRyLmVuY3x8KFMubD0wLFdpPTApLHRyLmVuYz1GbiwhUi5wYXNzd29yZCYmbnVsbD09Rm4udmFsaWQpdGhyb3cgbmV3IEVycm9yKCJGaWxl''@;'; put 'put ''IGlzIHBhc3N3b3JkLXByb3RlY3RlZCIpO2lmKG51bGw9PUZuLnZhbGlkKXRocm93IG5ldyBFcnJvcigiRW5jcnlwdGlvbiBzY2hlbWUgdW5zdXBwb3J0ZWQiKTtpZighRm4udmFsaWQpdGhyb3cgbmV3IEVycm9yKCJQYXNzd29yZCBpcyBpbmNvcnJlY3QiKTticmVhaztjYXNlIldyaXRlQWNj''@;'; put 'put ''ZXNzIjp0ci5sYXN0dXNlcj1GbjticmVhaztjYXNlIkZpbGVTaGFyaW5nIjpjYXNlIlRlbXBsYXRlIjpjYXNlIkJvb2tCb29sIjpjYXNlIlVzZXNFTEZzIjpjYXNlIk1UUlNldHRpbmdzIjpjYXNlIlVuY2FsY2VkIjpjYXNlIkV4dFNTVCI6Y2FzZSJCb29rRXh0IjpjYXNlIlJpY2hUZXh0U3Ry''@;'; put 'put ''ZWFtIjpjYXNlIkJrSGltIjpjYXNlIkluZGV4IjpjYXNlIlByb3Q0UmV2IjpjYXNlIlByb3Q0UmV2UGFzcyI6YnJlYWs7Y2FzZSJDb2RlUGFnZSI6dmFyIGRyPU51bWJlcihGbik7c3dpdGNoKGRyKXtjYXNlIDIxMDEwOmRyPTEyMDA7YnJlYWs7Y2FzZSAzMjc2ODpkcj0xZTQ7YnJlYWs7Y2Fz''@;'; put 'put ''ZSAzMjc2OTpkcj0xMjUyfVUodHIuY29kZXBhZ2U9ZHIpLFJhPSEwO2JyZWFrO2Nhc2UiUlJUYWJJZCI6dHIucnJ0YWJpZD1GbjticmVhaztjYXNlIldpblByb3RlY3QiOnRyLndpbmxvY2tlZD1GbjticmVhaztjYXNlIlJlZnJlc2hBbGwiOmNhc2UiQ2FsY0NvdW50IjpjYXNlIkNhbGNEZWx0''@;'; put 'put ''YSI6Y2FzZSJDYWxjSXRlciI6Y2FzZSJDYWxjTW9kZSI6Y2FzZSJDYWxjUHJlY2lzaW9uIjpjYXNlIkNhbGNTYXZlUmVjYWxjIjprLm9wdHNbWmFdPUZuO2JyZWFrO2Nhc2UiQ2FsY1JlZk1vZGUiOnRyLkNhbGNSZWZNb2RlPUZuO2JyZWFrO2Nhc2UiRm9yY2VGdWxsQ2FsY3VsYXRpb24iOmsu''@;'; put 'put ''b3B0cy5GdWxsQ2FsYz1GbjticmVhaztjYXNlIldzQm9vbCI6Rm4uZkRpYWxvZyYmKFFbIiF0eXBlIl09ImRpYWxvZyIpLEZuLmZCZWxvd3x8KChRWyIhb3V0bGluZSJdfHwoUVsiIW91dGxpbmUiXT17fSkpLmFib3ZlPSEwKSxGbi5mUmlnaHR8fCgoUVsiIW91dGxpbmUiXXx8KFFbIiFvdXRs''@;'; put 'put ''aW5lIl09e30pKS5sZWZ0PSEwKTticmVhaztjYXNlIlhGIjpGbi5mb250PUpuLkZvbnRzW0ZuLmlmbnQ8ND9Gbi5pZm50OkZuLmlmbnQtMV0sVG4ucHVzaChGbik7YnJlYWs7Y2FzZSJTdXBCb29rIjpIbi5wdXNoKFtGbl0pLEhuW0huLmxlbmd0aC0xXS5YVEk9W107YnJlYWs7Y2FzZSJFeHRl''@;'; put 'put ''cm5OYW1lIjpIbltIbi5sZW5ndGgtMV0ucHVzaChGbik7YnJlYWs7Y2FzZSJMYmwiOmFvPXtOYW1lOkZuLk5hbWUsUmVmOmEwKEZuLnJnY2UsZ2UsbnVsbCxIbix0cil9LEZuLml0YWI+MCYmKGFvLlNoZWV0PUZuLml0YWItMSksSG4ubmFtZXMucHVzaChhbyksSG5bMF18fChIblswXT1bXSxI''@;'; put 'put ''blswXS5YVEk9W10pLEhuW0huLmxlbmd0aC0xXS5wdXNoKEZuKSwiX3hsbm0uX0ZpbHRlckRhdGFiYXNlIj09Rm4uTmFtZSYmRm4uaXRhYj4wJiZGbi5yZ2NlJiZGbi5yZ2NlWzBdJiZGbi5yZ2NlWzBdWzBdJiYiUHRnQXJlYTNkIj09Rm4ucmdjZVswXVswXVswXSYmKHNhW0ZuLml0YWItMV09''@;'; put 'put ''e3JlZjpvbyhGbi5yZ2NlWzBdWzBdWzFdWzJdKX0pO2JyZWFrO2Nhc2UiRXh0ZXJuQ291bnQiOnRyLkV4dGVybkNvdW50PUZuO2JyZWFrO2Nhc2UiRXh0ZXJuU2hlZXQiOjA9PUhuLmxlbmd0aCYmKEhuWzBdPVtdLEhuWzBdLlhUST1bXSksSG5bSG4ubGVuZ3RoLTFdLlhUST1IbltIbi5sZW5n''@;'; put 'put ''dGgtMV0uWFRJLmNvbmNhdChGbiksSG4uWFRJPUhuLlhUSS5jb25jYXQoRm4pO2JyZWFrO2Nhc2UiTmFtZUNtdCI6aWYodHIuYmlmZjw4KWJyZWFrO251bGwhPWFvJiYoYW8uQ29tbWVudD1GblsxXSk7YnJlYWs7Y2FzZSJQcm90ZWN0IjpRWyIhcHJvdGVjdCJdPUZuO2JyZWFrO2Nhc2UiUGFz''@;'; put 'put ''c3dvcmQiOjAhPT1GbiYmdHIuV1RGJiZjb25zb2xlLmVycm9yKCJQYXNzd29yZCB2ZXJpZmllcjogIitGbik7YnJlYWs7Y2FzZSJCb3VuZFNoZWV0OCI6YWVbRm4ucG9zXT1Gbix0ci5zbmFtZXMucHVzaChGbi5uYW1lKTticmVhaztjYXNlIkVPRiI6aWYoUVsiIWdyaWRsaW5lcyJdPSFDaXx8''@;'; put 'put ''Q2kuZ3JpZCxDaT1udWxsLC0tV2kpYnJlYWs7aWYoZ2UuZSl7aWYoZ2UuZS5yPjAmJmdlLmUuYz4wKXtpZihnZS5lLnItLSxnZS5lLmMtLSxRWyIhcmVmIl09b28oZ2UpLFIuc2hlZXRSb3dzJiZSLnNoZWV0Um93czw9Z2UuZS5yKXt2YXIgcWw9Z2UuZS5yO2dlLmUucj1SLnNoZWV0Um93cy0x''@;'; put 'put ''LFFbIiFmdWxscmVmIl09UVsiIXJlZiJdLFFbIiFyZWYiXT1vbyhnZSksZ2UuZS5yPXFsfWdlLmUucisrLGdlLmUuYysrfWlvLmxlbmd0aD4wJiYoUVsiIW1lcmdlcyJdPWlvKSx1by5sZW5ndGg+MCYmdkkodW8sUSxKbiksTGkubGVuZ3RoPjAmJihRWyIhY29scyJdPUxpKSxEci5sZW5ndGg+''@;'; put 'put ''MCYmKFFbIiFyb3dzIl09RHIpLFNuLlNoZWV0cy5wdXNoKHNyKX0iIj09PVBlP05lPVE6R1tQZV09USxRPVIuZGVuc2U/W106e307YnJlYWs7Y2FzZSJCT0YiOmlmKDg9PT10ci5iaWZmJiYodHIuYmlmZj17OToyLDUyMTozLDEwMzM6NH1baGFdfHx7NTEyOjIsNzY4OjMsMTAyNDo0LDEyODA6''@;'; put 'put ''NSwxNTM2OjgsMjoyLDc6Mn1bRm4uQklGRlZlcl18fDgpLHRyLmJpZmZndWVzcz0wPT1Gbi5CSUZGVmVyLDA9PUZuLkJJRkZWZXImJjQwOTY9PUZuLmR0JiYodHIuYmlmZj01LFJhPSEwLFUodHIuY29kZXBhZ2U9Mjg1OTEpKSw4PT10ci5iaWZmJiYwPT1Gbi5CSUZGVmVyJiYxNj09Rm4uZHQm''@;'; put 'put ''Jih0ci5iaWZmPTIpLFdpKyspYnJlYWs7aWYoUT1SLmRlbnNlP1tdOnt9LHRyLmJpZmY8OCYmIVJhJiYoUmE9ITAsVSh0ci5jb2RlcGFnZT1SLmNvZGVwYWdlfHwxMjUyKSksdHIuYmlmZjw1fHwwPT1Gbi5CSUZGVmVyJiY0MDk2PT1Gbi5kdCl7IiI9PT1QZSYmKFBlPSJTaGVldDEiKSxnZT17''@;'; put 'put ''czp7cjowLGM6MH0sZTp7cjowLGM6MH19O3ZhciBVbD17cG9zOlMubC1KbyxuYW1lOlBlfTthZVtVbC5wb3NdPVVsLHRyLnNuYW1lcy5wdXNoKFBlKX1lbHNlIFBlPShhZVtQb118fHtuYW1lOiIifSkubmFtZTszMj09Rm4uZHQmJihRWyIhdHlwZSJdPSJjaGFydCIpLDY0PT1Gbi5kdCYmKFFb''@;'; put 'put ''IiF0eXBlIl09Im1hY3JvIiksaW89W10sdW89W10sdHIuYXJyYXlmPWt0PVtdLExpPVtdLERyPVtdLHZyPSExLHNyPXtIaWRkZW46KGFlW1BvXXx8e2hzOjB9KS5ocyxuYW1lOlBlfTticmVhaztjYXNlIk51bWJlciI6Y2FzZSJCSUZGMk5VTSI6Y2FzZSJCSUZGMklOVCI6ImNoYXJ0Ij09UVsi''@;'; put 'put ''IXR5cGUiXSYmKFIuZGVuc2U/KFFbRm4ucl18fFtdKVtGbi5jXTpRW1hpKHtjOkZuLmMscjpGbi5yfSldKSYmKytGbi5jLE90PXtpeGZlOkZuLml4ZmUsWEY6VG5bRm4uaXhmZV18fHt9LHY6Rm4udmFsLHQ6Im4ifSxiaT4wJiYoT3Quej13b1tPdC5peGZlPj44JjYzXSksbGgoT3QsUixrLm9w''@;'; put 'put ''dHMuRGF0ZTE5MDQpLGdyKHtjOkZuLmMscjpGbi5yfSxPdCxSKTticmVhaztjYXNlIkJvb2xFcnIiOk90PXtpeGZlOkZuLml4ZmUsWEY6VG5bRm4uaXhmZV0sdjpGbi52YWwsdDpGbi50fSxiaT4wJiYoT3Quej13b1tPdC5peGZlPj44JjYzXSksbGgoT3QsUixrLm9wdHMuRGF0ZTE5MDQpLGdy''@;'; put 'put ''KHtjOkZuLmMscjpGbi5yfSxPdCxSKTticmVhaztjYXNlIlJLIjpPdD17aXhmZTpGbi5peGZlLFhGOlRuW0ZuLml4ZmVdLHY6Rm4ucmtudW0sdDoibiJ9LGJpPjAmJihPdC56PXdvW090Lml4ZmU+PjgmNjNdKSxsaChPdCxSLGsub3B0cy5EYXRlMTkwNCksZ3Ioe2M6Rm4uYyxyOkZuLnJ9LE90''@;'; put 'put ''LFIpO2JyZWFrO2Nhc2UiTXVsUmsiOmZvcih2YXIgWmw9Rm4uYztabDw9Rm4uQzsrK1psKXt2YXIgYnU9Rm4ucmtyZWNbWmwtRm4uY11bMF07T3Q9e2l4ZmU6YnUsWEY6VG5bYnVdLHY6Rm4ucmtyZWNbWmwtRm4uY11bMV0sdDoibiJ9LGJpPjAmJihPdC56PXdvW090Lml4ZmU+PjgmNjNdKSxs''@;'; put 'put ''aChPdCxSLGsub3B0cy5EYXRlMTkwNCksZ3Ioe2M6WmwscjpGbi5yfSxPdCxSKX1icmVhaztjYXNlIkZvcm11bGEiOmlmKCJTdHJpbmciPT1Gbi52YWwpe3BlPUZuO2JyZWFrfWlmKChPdD1EOChGbi52YWwsRm4uY2VsbC5peGZlLEZuLnR0KSkuWEY9VG5bT3QuaXhmZV0sUi5jZWxsRm9ybXVs''@;'; put 'put ''YSl7dmFyIENsPUZuLmZvcm11bGE7aWYoQ2wmJkNsWzBdJiZDbFswXVswXSYmIlB0Z0V4cCI9PUNsWzBdWzBdWzBdKXt2YXIgbG49Q2xbMF1bMF1bMV1bMF0sRW49Q2xbMF1bMF1bMV1bMV0sem49WGkoe3I6bG4sYzpFbn0pO0J0W3puXT9PdC5mPSIiK2EwKEZuLmZvcm11bGEsZ2UsRm4uY2Vs''@;'; put 'put ''bCxIbix0cik6T3QuRj0oKFIuZGVuc2U/KFFbbG5dfHxbXSlbRW5dOlFbem5dKXx8e30pLkZ9ZWxzZSBPdC5mPSIiK2EwKEZuLmZvcm11bGEsZ2UsRm4uY2VsbCxIbix0cil9Ymk+MCYmKE90Lno9d29bT3QuaXhmZT4+OCY2M10pLGxoKE90LFIsay5vcHRzLkRhdGUxOTA0KSxncihGbi5jZWxs''@;'; put 'put ''LE90LFIpLHBlPUZuO2JyZWFrO2Nhc2UiU3RyaW5nIjppZighcGUpdGhyb3cgbmV3IEVycm9yKCJTdHJpbmcgcmVjb3JkIGV4cGVjdHMgRm9ybXVsYSIpO3BlLnZhbD1GbiwoT3Q9RDgoRm4scGUuY2VsbC5peGZlLCJzIikpLlhGPVRuW090Lml4ZmVdLFIuY2VsbEZvcm11bGEmJihPdC5mPSIi''@;'; put 'put ''K2EwKHBlLmZvcm11bGEsZ2UscGUuY2VsbCxIbix0cikpLGJpPjAmJihPdC56PXdvW090Lml4ZmU+PjgmNjNdKSxsaChPdCxSLGsub3B0cy5EYXRlMTkwNCksZ3IocGUuY2VsbCxPdCxSKSxwZT1udWxsO2JyZWFrO2Nhc2UiQXJyYXkiOmt0LnB1c2goRm4pO3ZhciBTaT1YaShGblswXS5zKTtp''@;'; put 'put ''Zih1dD1SLmRlbnNlPyhRW0ZuWzBdLnMucl18fFtdKVtGblswXS5zLmNdOlFbU2ldLFIuY2VsbEZvcm11bGEmJnV0KXtpZighcGV8fCFTaXx8IXV0KWJyZWFrO3V0LmY9IiIrYTAoRm5bMV0sZ2UsRm5bMF0sSG4sdHIpLHV0LkY9b28oRm5bMF0pfWJyZWFrO2Nhc2UiU2hyRm1sYSI6aWYoIVIu''@;'; put 'put ''Y2VsbEZvcm11bGEpYnJlYWs7aWYoZXQpe2lmKCFwZSlicmVhaztCdFtYaShwZS5jZWxsKV09Rm5bMF0sKCh1dD1SLmRlbnNlPyhRW3BlLmNlbGwucl18fFtdKVtwZS5jZWxsLmNdOlFbWGkocGUuY2VsbCldKXx8e30pLmY9IiIrYTAoRm5bMF0sZ2UsWWUsSG4sdHIpfWJyZWFrO2Nhc2UiTGFi''@;'; put 'put ''ZWxTc3QiOk90PUQ4KHllW0ZuLmlzc3RdLnQsRm4uaXhmZSwicyIpLHllW0ZuLmlzc3RdLmgmJihPdC5oPXllW0ZuLmlzc3RdLmgpLE90LlhGPVRuW090Lml4ZmVdLGJpPjAmJihPdC56PXdvW090Lml4ZmU+PjgmNjNdKSxsaChPdCxSLGsub3B0cy5EYXRlMTkwNCksZ3Ioe2M6Rm4uYyxyOkZu''@;'; put 'put ''LnJ9LE90LFIpLHllW0ZuLmlzc3RdLlImJihPdC5SPXllW0ZuLmlzc3RdLlIubWFwKGZ1bmN0aW9uKG1vKXt2YXIgRGk9cXQobW8pO3JldHVybiBtby5zPT1Kbi5Gb250c1swXSYmKERpLnM9T3QucyksRGl9KSk7YnJlYWs7Y2FzZSJCbGFuayI6Ui5zaGVldFN0dWJzJiYoT3Q9e2l4ZmU6Rm4u''@;'; put 'put ''aXhmZSxYRjpUbltGbi5peGZlXSx0OiJ6In0sYmk+MCYmKE90Lno9d29bT3QuaXhmZT4+OCY2M10pLGxoKE90LFIsay5vcHRzLkRhdGUxOTA0KSxncih7YzpGbi5jLHI6Rm4ucn0sT3QsUikpO2JyZWFrO2Nhc2UiTXVsQmxhbmsiOmlmKFIuc2hlZXRTdHVicylmb3IodmFyIGFyPUZuLmM7YXI8''@;'; put 'put ''PUZuLkM7Kythcil7dmFyIE9pPUZuLml4ZmVbYXItRm4uY107T3Q9e2l4ZmU6T2ksWEY6VG5bT2ldLHQ6InoifSxiaT4wJiYoT3Quej13b1tPdC5peGZlPj44JjYzXSksbGgoT3QsUixrLm9wdHMuRGF0ZTE5MDQpLGdyKHtjOmFyLHI6Rm4ucn0sT3QsUil9YnJlYWs7Y2FzZSJSU3RyaW5nIjpj''@;'; put 'put ''YXNlIkxhYmVsIjpjYXNlIkJJRkYyU1RSIjooT3Q9RDgoRm4udmFsLEZuLml4ZmUsInMiKSkuWEY9VG5bT3QuaXhmZV0sYmk+MCYmKE90Lno9d29bT3QuaXhmZT4+OCY2M10pLGxoKE90LFIsay5vcHRzLkRhdGUxOTA0KSxncih7YzpGbi5jLHI6Rm4ucn0sT3QsUik7YnJlYWs7Y2FzZSJEaW1l''@;'; put 'put ''bnNpb25zIjoxPT09V2kmJihnZT1Gbik7YnJlYWs7Y2FzZSJTU1QiOih5ZT1GbikuZm9yRWFjaChmdW5jdGlvbihtbyl7bW8uX1I/KG1vLl9SWzBdJiZtby5fUlswXS5pZHg+MCYmbW8uX1IudW5zaGlmdCh7aWR4OjAsaWZudDowfSksbW8uUj1tby5fUi5tYXAoZnVuY3Rpb24oRGksYXMpe3Jl''@;'; put 'put ''dHVybnt0OiJzIix2Om1vLnQuc2xpY2UoRGkuaWR4LChtby5fUlthcysxXXx8e30pLmlkeCksczpKbi5Gb250c1tEaS5pZm50PDQ/RGkuaWZudDpEaS5pZm50LTFdfX0pLFIuY2VsbEhUTUwmJihtby5oPU51KG1vLlIpKSk6Ui5jZWxsSFRNTCYmKG1vLmg9Y28obW8udCkpLGRlbGV0ZSBtby5f''@;'; put 'put ''Un0pO2JyZWFrO2Nhc2UiRm9ybWF0IjppZig0PT10ci5iaWZmKXt3b1tiaSsrXT1GblsxXTtmb3IodmFyIENyPTA7Q3I8YmkrMTYzJiZBLl90YWJsZVtDcl0hPUZuWzFdOysrQ3IpO0NyPj0xNjMmJkEubG9hZChGblsxXSxiaSsxNjMpfWVsc2UgQS5sb2FkKEZuWzFdLEZuWzBdKTticmVhaztj''@;'; put 'put ''YXNlIkJJRkYyRk9STUFUIjp3b1tiaSsrXT1Gbjtmb3IodmFyIFBpPTA7UGk8YmkrMTYzJiZBLl90YWJsZVtQaV0hPUZuOysrUGkpO1BpPj0xNjMmJkEubG9hZChGbixiaSsxNjMpO2JyZWFrO2Nhc2UiTWVyZ2VDZWxscyI6aW89aW8uY29uY2F0KEZuKTticmVhaztjYXNlIk9iaiI6dW9bRm4u''@;'; put 'put ''Y21vWzBdXT10ci5sYXN0b2JqPUZuO2JyZWFrO2Nhc2UiVHhPIjp0ci5sYXN0b2JqLlR4Tz1GbjticmVhaztjYXNlIkltRGF0YSI6dHIubGFzdG9iai5JbURhdGE9Rm47YnJlYWs7Y2FzZSJITGluayI6Zm9yKGJ0PUZuWzBdLnMucjtidDw9Rm5bMF0uZS5yOysrYnQpZm9yKG90PUZuWzBdLnMu''@;'; put 'put ''YztvdDw9Rm5bMF0uZS5jOysrb3QpKHV0PVIuZGVuc2U/KFFbYnRdfHxbXSlbb3RdOlFbWGkoe2M6b3QscjpidH0pXSkmJih1dC5sPUZuWzFdKTticmVhaztjYXNlIkhMaW5rVG9vbHRpcCI6Zm9yKGJ0PUZuWzBdLnMucjtidDw9Rm5bMF0uZS5yOysrYnQpZm9yKG90PUZuWzBdLnMuYztvdDw9''@;'; put 'put ''Rm5bMF0uZS5jOysrb3QpKHV0PVIuZGVuc2U/KFFbYnRdfHxbXSlbb3RdOlFbWGkoe2M6b3QscjpidH0pXSkmJnV0LmwmJih1dC5sLlRvb2x0aXA9Rm5bMV0pO2JyZWFrO2Nhc2UiTm90ZSI6aWYodHIuYmlmZjw9NSYmdHIuYmlmZj49MilicmVhazt1dD1SLmRlbnNlPyhRW0ZuWzBdLnJdfHxb''@;'; put 'put ''XSlbRm5bMF0uY106UVtYaShGblswXSldO3ZhciBXbz11b1tGblsyXV07dXR8fChSLmRlbnNlPyhRW0ZuWzBdLnJdfHwoUVtGblswXS5yXT1bXSksdXQ9UVtGblswXS5yXVtGblswXS5jXT17dDoieiJ9KTp1dD1RW1hpKEZuWzBdKV09e3Q6InoifSxnZS5lLnI9TWF0aC5tYXgoZ2UuZS5yLEZu''@;'; put 'put ''WzBdLnIpLGdlLnMucj1NYXRoLm1pbihnZS5zLnIsRm5bMF0uciksZ2UuZS5jPU1hdGgubWF4KGdlLmUuYyxGblswXS5jKSxnZS5zLmM9TWF0aC5taW4oZ2Uucy5jLEZuWzBdLmMpKSx1dC5jfHwodXQuYz1bXSksdXQuYy5wdXNoKHthOkZuWzFdLHQ6V28uVHhPLnR9KTticmVhaztkZWZhdWx0''@;'; put 'put ''OnN3aXRjaChqaS5uKXtjYXNlIkNscnRDbGllbnQiOmNhc2UiSGVhZGVyIjpjYXNlIkZvb3RlciI6Y2FzZSJIQ2VudGVyIjpjYXNlIlZDZW50ZXIiOmNhc2UiUGxzIjpjYXNlIkdDVyI6Y2FzZSJMSFJlY29yZCI6Y2FzZSJEQkNlbGwiOmNhc2UiRW50RXhVMiI6Y2FzZSJTeFZpZXciOmNhc2Ui''@;'; put 'put ''U3h2ZCI6Y2FzZSJTWFZJIjpjYXNlIlNYVkRFeCI6Y2FzZSJTeEl2ZCI6Y2FzZSJTWFN0cmluZyI6Y2FzZSJTeW5jIjpjYXNlIkFkZGluIjpjYXNlIlNYREkiOmNhc2UiU1hMSSI6Y2FzZSJTWEV4IjpjYXNlIlFzaVNYVGFnIjpjYXNlIkZlYXQiOmNhc2UiRmVhdEhkciI6Y2FzZSJGZWF0SGRy''@;'; put 'put ''MTEiOmNhc2UiRmVhdHVyZTExIjpjYXNlIkZlYXR1cmUxMiI6Y2FzZSJMaXN0MTIiOmNhc2UiUmVjYWxjSWQiOmNhc2UiRHhHQ29sIjpjYXNlIkZiaSI6Y2FzZSJGYmkyIjpjYXNlIkdlbEZyYW1lIjpjYXNlIlhGQ1JDIjpjYXNlIlN0eWxlIjpjYXNlIlN0eWxlRXh0IjpjYXNlIlNjZW5hcmlv''@;'; put 'put ''UHJvdGVjdCI6Y2FzZSJPYmpQcm90ZWN0IjpjYXNlIkNvbmRGbXQxMiI6Y2FzZSJUYWJsZSI6Y2FzZSJUYWJsZVN0eWxlcyI6Y2FzZSJUYWJsZVN0eWxlIjpjYXNlIlRhYmxlU3R5bGVFbGVtZW50IjpjYXNlIlNYU3RyZWFtSUQiOmNhc2UiU1hWUyI6Y2FzZSJEQ29uUmVmIjpjYXNlIlNYQWRk''@;'; put 'put ''bCI6Y2FzZSJEQ29uQmluIjpjYXNlIkRDb25OYW1lIjpjYXNlIlNYUEkiOmNhc2UiU3hGb3JtYXQiOmNhc2UiU3hTZWxlY3QiOmNhc2UiU3hSdWxlIjpjYXNlIlN4RmlsdCI6Y2FzZSJTeEl0bSI6Y2FzZSJTeERYRiI6Y2FzZSJTY2VuTWFuIjpjYXNlIkRDb24iOmNhc2UiQ2VsbFdhdGNoIjpj''@;'; put 'put ''YXNlIlByaW50Um93Q29sIjpjYXNlIlByaW50R3JpZCI6Y2FzZSJQcmludFNpemUiOmNhc2UiWENUIjpjYXNlIkNSTiI6Y2FzZSJTY2wiOmNhc2UiU2hlZXRFeHQiOmNhc2UiU2hlZXRFeHRPcHRpb25hbCI6Y2FzZSJPYk5vTWFjcm9zIjpjYXNlIk9iUHJvaiI6Y2FzZSJHVUlEVHlwZUxpYiI6''@;'; put 'put ''Y2FzZSJXT3B0IjpjYXNlIlBob25ldGljSW5mbyI6Y2FzZSJPbGVPYmplY3RTaXplIjpjYXNlIkRYRiI6Y2FzZSJEWEZOIjpjYXNlIkRYRk4xMiI6Y2FzZSJEWEZOMTJMaXN0IjpjYXNlIkRYRk4xMk5vQ0IiOmNhc2UiRHYiOmNhc2UiRFZhbCI6Y2FzZSJCUkFJIjpjYXNlIlNlcmllcyI6Y2Fz''@;'; put 'put ''ZSJTZXJpZXNUZXh0IjpjYXNlIkRDb25uIjpjYXNlIkRiT3JQYXJhbVFyeSI6Y2FzZSJEQlF1ZXJ5RXh0IjpjYXNlIk9sZURiQ29ubiI6Y2FzZSJFeHRTdHJpbmciOmNhc2UiSUZtdFJlY29yZCI6Y2FzZSJDb25kRm10IjpjYXNlIkNGIjpjYXNlIkNGMTIiOmNhc2UiQ0ZFeCI6Y2FzZSJFeGNl''@;'; put 'put ''bDlGaWxlIjpjYXNlIlVuaXRzIjpjYXNlIkludGVyZmFjZUhkciI6Y2FzZSJNbXMiOmNhc2UiSW50ZXJmYWNlRW5kIjpjYXNlIkRTRiI6Y2FzZSJCdWlsdEluRm5Hcm91cENvdW50IjpjYXNlIldpbmRvdzEiOmNhc2UiSGlkZU9iaiI6Y2FzZSJHcmlkU2V0IjpjYXNlIkd1dHMiOmNhc2UiVXNl''@;'; put 'put ''ckJWaWV3IjpjYXNlIlVzZXJTVmlld0JlZ2luIjpjYXNlIlVzZXJTVmlld0VuZCI6Y2FzZSJEZWZDb2xXaWR0aCI6Y2FzZSJEZWZhdWx0Um93SGVpZ2h0IjpicmVhaztjYXNlIlhGRXh0IjpUayhUbltGbi5peGZlXSxGbi5leHQpO2JyZWFrO2Nhc2UiQ29sSW5mbyI6aWYoIXRyLmNlbGxTdHls''@;'; put 'put ''ZXMpYnJlYWs7Zm9yKDtGbi5lPj1Gbi5zOylMaVtGbi5lLS1dPXt3aWR0aDpGbi53LzI1NixsZXZlbDpGbi5sZXZlbHx8MCxoaWRkZW46ISEoMSZGbi5mbGFncyl9LHZyfHwodnI9ITApLGUxKExpW0ZuLmUrMV0pO2JyZWFrO2Nhc2UiUm93Ijp2YXIgSGk9e307bnVsbCE9Rm4ubGV2ZWwmJihE''@;'; put 'put ''cltGbi5yXT1IaSxIaS5sZXZlbD1Gbi5sZXZlbCksRm4uaGlkZGVuJiYoRHJbRm4ucl09SGksSGkuaGlkZGVuPSEwKSxGbi5ocHQmJihEcltGbi5yXT1IaSxIaS5ocHQ9Rm4uaHB0LEhpLmhweD1paChGbi5ocHQpKSxGbi5peGZlJiYoRHJbRm4ucl09SGksdXIoT3Q9e2l4ZmU6Rm4uaXhmZSxY''@;'; put 'put ''RjpUbltGbi5peGZlXXx8e30sdjowLHQ6Im4ifSxSKSxIaS5zPU90LnMpO2JyZWFrO2Nhc2UiTGVmdE1hcmdpbiI6Y2FzZSJSaWdodE1hcmdpbiI6Y2FzZSJUb3BNYXJnaW4iOmNhc2UiQm90dG9tTWFyZ2luIjpRWyIhbWFyZ2lucyJdfHxZMyhRWyIhbWFyZ2lucyJdPXt9KSxRWyIhbWFyZ2lu''@;'; put 'put ''cyJdW1phLnNsaWNlKDAsLTYpLnRvTG93ZXJDYXNlKCldPUZuO2JyZWFrO2Nhc2UiU2VsZWN0aW9uIjpRWyIhc2VsIl09Rm47YnJlYWs7Y2FzZSJTZXR1cCI6UVsiIW1hcmdpbnMiXXx8WTMoUVsiIW1hcmdpbnMiXT17fSksUVsiIW1hcmdpbnMiXS5oZWFkZXI9Rm4uaGVhZGVyLFFbIiFtYXJn''@;'; put 'put ''aW5zIl0uZm9vdGVyPUZuLmZvb3RlcjticmVhaztjYXNlIldpbmRvdzIiOkZuLlJUTCYmKFNuLlZpZXdzWzBdLlJUTD0hMCksQ2k9Rm47YnJlYWs7Y2FzZSJDb3VudHJ5IjpLdD1GbjticmVhaztjYXNlIkZvbnQiOkZuLmljdiYmVm4oRm4uaWN2KSYmKEZuLmNvbG9yPXtyZ2I6aGQoVm4oRm4u''@;'; put 'put ''aWN2KSl9KSxkZWxldGUgRm4uaWN2LDA9PUpuLkZvbnRzLmxlbmd0aCYmQTQoRm4pLEpuLkZvbnRzLnB1c2goRm4pO2JyZWFrO2Nhc2UiUGFsZXR0ZSI6aXI9Rm47YnJlYWs7Y2FzZSJUaGVtZSI6Rmk9Rm47YnJlYWs7Y2FzZSJDb2RlTmFtZSI6UGU/c3IuQ29kZU5hbWU9Rm58fHNyLm5hbWU6''@;'; put 'put ''U24uV0JQcm9wcy5Db2RlTmFtZT1Gbnx8IlRoaXNXb3JrYm9vayI7YnJlYWs7Y2FzZSJQYW5lIjooQ2l8fHt9KS5mcm96ZW4mJihRWyIhZnJlZXplIl09WGkoe3I6Rm4ueXx8MCxjOkZuLnh8fDB9KSk7YnJlYWs7ZGVmYXVsdDpzd2l0Y2goamkubil7Y2FzZSJEYXQiOmNhc2UiQmVnaW4iOmNh''@;'; put 'put ''c2UiRW5kIjpjYXNlIlN0YXJ0QmxvY2siOmNhc2UiRW5kQmxvY2siOmNhc2UiRnJhbWUiOmNhc2UiQXJlYSI6Y2FzZSJBeGlzIjpjYXNlIkF4aXNMaW5lIjpjYXNlIlRpY2siOmNhc2UiQXhlc1VzZWQiOmNhc2UiQ3J0TGF5b3V0MTIiOmNhc2UiQ3J0TGF5b3V0MTJBIjpjYXNlIkNydExpbmsi''@;'; put 'put ''OmNhc2UiQ3J0TGluZSI6Y2FzZSJDcnRNbEZydCI6Y2FzZSJDcnRNbEZydENvbnRpbnVlIjpjYXNlIkxpbmVGb3JtYXQiOmNhc2UiQXJlYUZvcm1hdCI6Y2FzZSJDaGFydCI6Y2FzZSJDaGFydDNkIjpjYXNlIkNoYXJ0M0RCYXJTaGFwZSI6Y2FzZSJDaGFydEZvcm1hdCI6Y2FzZSJDaGFydEZy''@;'; put 'put ''dEluZm8iOmNhc2UiUGxvdEFyZWEiOmNhc2UiUGxvdEdyb3d0aCI6Y2FzZSJTZXJpZXNMaXN0IjpjYXNlIlNlclBhcmVudCI6Y2FzZSJTZXJBdXhUcmVuZCI6Y2FzZSJEYXRhRm9ybWF0IjpjYXNlIlNlclRvQ3J0IjpjYXNlIkZvbnRYIjpjYXNlIkNhdFNlclJhbmdlIjpjYXNlIkF4Y0V4dCI6''@;'; put 'put ''Y2FzZSJTZXJGbXQiOmNhc2UiU2h0UHJvcHMiOmNhc2UiRGVmYXVsdFRleHQiOmNhc2UiVGV4dCI6Y2FzZSJDYXRMYWIiOmNhc2UiRGF0YUxhYkV4dENvbnRlbnRzIjpjYXNlIkxlZ2VuZCI6Y2FzZSJMZWdlbmRFeGNlcHRpb24iOmNhc2UiUGllIjpjYXNlIlNjYXR0ZXIiOmNhc2UiUGllRm9y''@;'; put 'put ''bWF0IjpjYXNlIk1hcmtlckZvcm1hdCI6Y2FzZSJTdGFydE9iamVjdCI6Y2FzZSJFbmRPYmplY3QiOmNhc2UiQWxSdW5zIjpjYXNlIk9iamVjdExpbmsiOmNhc2UiU0lJbmRleCI6Y2FzZSJBdHRhY2hlZExhYmVsIjpjYXNlIllNdWx0IjpjYXNlIkxpbmUiOmNhc2UiQmFyIjpjYXNlIlN1cmYi''@;'; put 'put ''OmNhc2UiQXhpc1BhcmVudCI6Y2FzZSJQb3MiOmNhc2UiVmFsdWVSYW5nZSI6Y2FzZSJTWFZpZXdFeDkiOmNhc2UiU1hWaWV3TGluayI6Y2FzZSJQaXZvdENoYXJ0Qml0cyI6Y2FzZSJTQmFzZVJlZiI6Y2FzZSJUZXh0UHJvcHNTdHJlYW0iOmNhc2UiTG5FeHQiOmNhc2UiTWtyRXh0IjpjYXNl''@;'; put 'put ''IkNydENvb3B0IjpjYXNlIlFzaSI6Y2FzZSJRc2lmIjpjYXNlIlFzaXIiOmNhc2UiUXNpU1hUYWciOmNhc2UiVHh0UXJ5IjpjYXNlIkZpbHRlck1vZGUiOmNhc2UiQXV0b0ZpbHRlciI6Y2FzZSJBdXRvRmlsdGVySW5mbyI6Y2FzZSJBdXRvRmlsdGVyMTIiOmNhc2UiRHJvcERvd25PYmpJZHMi''@;'; put 'put ''OmNhc2UiU29ydCI6Y2FzZSJTb3J0RGF0YSI6Y2FzZSJTaGFwZVByb3BzU3RyZWFtIjpjYXNlIk1zb0RyYXdpbmciOmNhc2UiTXNvRHJhd2luZ0dyb3VwIjpjYXNlIk1zb0RyYXdpbmdTZWxlY3Rpb24iOmNhc2UiV2ViUHViIjpjYXNlIkF1dG9XZWJQdWIiOmNhc2UiSGVhZGVyRm9vdGVyIjpj''@;'; put 'put ''YXNlIkhGUGljdHVyZSI6Y2FzZSJQTFYiOmNhc2UiSG9yaXpvbnRhbFBhZ2VCcmVha3MiOmNhc2UiVmVydGljYWxQYWdlQnJlYWtzIjpjYXNlIkJhY2t1cCI6Y2FzZSJDb21wcmVzc1BpY3R1cmVzIjpjYXNlIkNvbXBhdDEyIjpjYXNlIkNvbnRpbnVlIjpjYXNlIkNvbnRpbnVlRnJ0MTIiOmNh''@;'; put 'put ''c2UiRnJ0Rm9udExpc3QiOmNhc2UiRnJ0V3JhcHBlciI6YnJlYWs7ZGVmYXVsdDpzd2l0Y2goamkubil7Y2FzZSJUYWJJZENvbmYiOmNhc2UiUmFkYXIiOmNhc2UiUmFkYXJBcmVhIjpjYXNlIkRyb3BCYXIiOmNhc2UiSW50bCI6Y2FzZSJDb29yZExpc3QiOmNhc2UiU2VyQXV4RXJyQmFyIjpj''@;'; put 'put ''YXNlIkJJRkYyRk9OVENMUiI6Y2FzZSJCSUZGMkZNVENOVCI6Y2FzZSJCSUZGMkZPTlRYVFJBIjpjYXNlIkJJRkYyWEYiOmNhc2UiQklGRjNYRiI6Y2FzZSJCSUZGNFhGIjpjYXNlIkJJRkYyWEZJTkRFWCI6Y2FzZSJCSUZGNEZNVENOVCI6Y2FzZSJCSUZGMlJPVyI6Y2FzZSJCSUZGMldJTkRP''@;'; put 'put ''VzIiOmNhc2UiU0NFTkFSSU8iOmNhc2UiRENvbkJpbiI6Y2FzZSJQaWNGIjpjYXNlIkRhdGFMYWJFeHQiOmNhc2UiTGVsIjpjYXNlIkJvcFBvcCI6Y2FzZSJCb3BQb3BDdXN0b20iOmNhc2UiUmVhbFRpbWVEYXRhIjpjYXNlIk5hbWUiOmNhc2UiTEhOR3JhcGgiOmNhc2UiRm5Hcm91cE5hbWUi''@;'; put 'put ''OmNhc2UiQWRkTWVudSI6Y2FzZSJMUHIiOmNhc2UiTGlzdE9iaiI6Y2FzZSJMaXN0RmllbGQiOmNhc2UiUlJTb3J0IjpjYXNlIkJpZ05hbWUiOmNhc2UiVG9vbGJhckhkciI6Y2FzZSJUb29sYmFyRW5kIjpjYXNlIkRERU9iak5hbWUiOmNhc2UiRlJUQXJjaElkJCI6YnJlYWs7ZGVmYXVsdDpp''@;'; put 'put ''ZihSLldURil0aHJvdyJVbnJlY29nbml6ZWQgUmVjb3JkICIramkubn19fX19ZWxzZSBTLmwrPUpvLHRyJiZ0ci5lbmMmJnRyLmVuYy5pbnNpdHUmJnRyLmVuYy5pbnNpdHUoU2Uoe2xlbmd0aDpKb30pKX1yZXR1cm4gay5TaGVldE5hbWVzPVJlKGFlKS5zb3J0KGZ1bmN0aW9uKG1vLERpKXty''@;'; put 'put ''ZXR1cm4gTnVtYmVyKG1vKS1OdW1iZXIoRGkpfSkubWFwKGZ1bmN0aW9uKG1vKXtyZXR1cm4gYWVbbW9dLm5hbWV9KSxSLmJvb2tTaGVldHN8fChrLlNoZWV0cz1HKSwhay5TaGVldE5hbWVzLmxlbmd0aCYmTmVbIiFyZWYiXT8oay5TaGVldE5hbWVzLnB1c2goIlNoZWV0MSIpLGsuU2hlZXRz''@;'; put 'put ''JiYoay5TaGVldHMuU2hlZXQxPU5lKSk6ay5QcmVhbWJsZT1OZSxrLlNoZWV0cyYmc2EuZm9yRWFjaChmdW5jdGlvbihtbyxEaSl7ay5TaGVldHNbay5TaGVldE5hbWVzW0RpXV1bIiFhdXRvZmlsdGVyIl09bW99KSxrLlN0cmluZ3M9eWUsay5TU0Y9QS5nZXRfdGFibGUoKSx0ci5lbmMmJihr''@;'; put 'put ''LkVuY3J5cHRpb249dHIuZW5jKSxGaSYmKGsuVGhlbWVzPUZpKSxrLk1ldGFkYXRhPXt9LHZvaWQgMCE9PUt0JiYoay5NZXRhZGF0YS5Db3VudHJ5PUt0KSxIbi5uYW1lcy5sZW5ndGg+MCYmKFNuLk5hbWVzPUhuLm5hbWVzKSxrLldvcmtib29rPVNuLGt9KEcuY29udGVudCxSKTtlbHNlIGlm''@;'; put 'put ''KChhZT12ZS5maW5kKFMsIlBlcmZlY3RPZmZpY2VfTUFJTiIpKSYmYWUuY29udGVudClRPXh2LnRvX3dvcmtib29rKGFlLmNvbnRlbnQsKFIudHlwZT1nZSxSKSk7ZWxzZXtpZighKGFlPXZlLmZpbmQoUywiTmF0aXZlQ29udGVudF9NQUlOIikpfHwhYWUuY29udGVudCl0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIkNhbm5vdCBmaW5kIFdvcmtib29rIHN0cmVhbSIpO1E9eHYudG9fd29ya2Jvb2soYWUuY29udGVudCwoUi50eXBlPWdlLFIpKX1SLmJvb2tWQkEmJlMuRnVsbFBhdGhzJiZ2ZS5maW5kKFMsIi9fVkJBX1BST0pFQ1RfQ1VSL1ZCQS9kaXIiKSYmKFEudmJhcmF3PWZ1bmN0aW9uIEZrKFMp''@;'; put 'put ''e3ZhciBSPXZlLnV0aWxzLmNmYl9uZXcoe3Jvb3Q6IlIifSk7cmV0dXJuIFMuRnVsbFBhdGhzLmZvckVhY2goZnVuY3Rpb24oayxHKXtpZigiLyIhPT1rLnNsaWNlKC0xKSYmay5tYXRjaCgvX1ZCQV9QUk9KRUNUX0NVUi8pKXt2YXIgUT1rLnJlcGxhY2UoL15bXlwvXSovLCJSIikucmVwbGFj''@;'; put 'put ''ZSgvXC9fVkJBX1BST0pFQ1RfQ1VSXHUwMDAwKi8sIiIpO3ZlLnV0aWxzLmNmYl9hZGQoUixRLFMuRmlsZUluZGV4W0ddLmNvbnRlbnQpfX0pLHZlLndyaXRlKFIpfShTKSl9dmFyIHBlPXt9O3JldHVybiBTLkZ1bGxQYXRocyYmZnVuY3Rpb24ga25lKFMsUixrKXt2YXIgRz12ZS5maW5kKFMs''@;'; put 'put ''IiFEb2N1bWVudFN1bW1hcnlJbmZvcm1hdGlvbiIpO2lmKEcmJkcuc2l6ZT4wKXRyeXt2YXIgUT1WNihHLGY0LHdiLkRTSSk7Zm9yKHZhciBhZSBpbiBRKVJbYWVdPVFbYWVdfWNhdGNoKFBlKXtpZihrLldURil0aHJvdyBQZX12YXIgZ2U9dmUuZmluZChTLCIhU3VtbWFyeUluZm9ybWF0aW9u''@;'; put 'put ''Iik7aWYoZ2UmJmdlLnNpemU+MCl0cnl7dmFyIHBlPVY2KGdlLGw1LHdiLlNJKTtmb3IodmFyIHllIGluIHBlKW51bGw9PVJbeWVdJiYoUlt5ZV09cGVbeWVdKX1jYXRjaChQZSl7aWYoay5XVEYpdGhyb3cgUGV9Ui5IZWFkaW5nUGFpcnMmJlIuVGl0bGVzT2ZQYXJ0cyYmKHY0KFIuSGVhZGlu''@;'; put 'put ''Z1BhaXJzLFIuVGl0bGVzT2ZQYXJ0cyxSLGspLGRlbGV0ZSBSLkhlYWRpbmdQYWlycyxkZWxldGUgUi5UaXRsZXNPZlBhcnRzKX0oUyxwZSxSKSxRLlByb3BzPVEuQ3VzdHByb3BzPXBlLFIuYm9va0ZpbGVzJiYoUS5jZmI9UyksUX12YXIgSTg9ezA6e246IkJydFJvd0hkciIsZjpmdW5jdGlv''@;'; put 'put ''biBSRChTLFIpe3ZhciBrPXt9LEc9Uy5sK1I7ay5yPVMucmVhZF9zaGlmdCg0KSxTLmwrPTQ7dmFyIFE9Uy5yZWFkX3NoaWZ0KDIpO1MubCs9MTt2YXIgYWU9Uy5yZWFkX3NoaWZ0KDEpO3JldHVybiBTLmw9Ryw3JmFlJiYoay5sZXZlbD03JmFlKSwxNiZhZSYmKGsuaGlkZGVuPSEwKSwzMiZh''@;'; put 'put ''ZSYmKGsuaHB0PVEvMjApLGt9fSwxOntuOiJCcnRDZWxsQmxhbmsiLGY6ZnVuY3Rpb24geW5lKFMpe3JldHVybltEMShTKV19fSwyOntuOiJCcnRDZWxsUmsiLGY6ZnVuY3Rpb24gVGooUyl7cmV0dXJuW0QxKFMpLEkxKFMpLCJuIl19fSwzOntuOiJCcnRDZWxsRXJyb3IiLGY6ZnVuY3Rpb24g''@;'; put 'put ''RkQoUyl7cmV0dXJuW0QxKFMpLFMucmVhZF9zaGlmdCgxKSwiZSJdfX0sNDp7bjoiQnJ0Q2VsbEJvb2wiLGY6ZnVuY3Rpb24gX2ooUyl7cmV0dXJuW0QxKFMpLFMucmVhZF9zaGlmdCgxKSwiYiJdfX0sNTp7bjoiQnJ0Q2VsbFJlYWwiLGY6ZnVuY3Rpb24geFMoUyl7cmV0dXJuW0QxKFMpLExs''@;'; put 'put ''KFMpLCJuIl19fSw2OntuOiJCcnRDZWxsU3QiLGY6ZnVuY3Rpb24gQ25lKFMpe3JldHVybltEMShTKSxwdShTKSwic3RyIl19fSw3OntuOiJCcnRDZWxsSXNzdCIsZjpmdW5jdGlvbiBDaihTKXtyZXR1cm5bRDEoUyksUy5yZWFkX3NoaWZ0KDQpLCJzIl19fSw4OntuOiJCcnRGbWxhU3RyaW5n''@;'; put 'put ''IixmOmZ1bmN0aW9uIGxiKFMsUixrKXt2YXIgRz1TLmwrUixRPUQxKFMpO1Eucj1rWyIhcm93Il07dmFyIGdlPVtRLHB1KFMpLCJzdHIiXTtpZihrLmNlbGxGb3JtdWxhKXtTLmwrPTI7dmFyIHBlPVY0KFMsRy1TLmwsayk7Z2VbM109YTAocGUsbnVsbCxRLGsuc3VwYm9va3Msayl9ZWxzZSBT''@;'; put 'put ''Lmw9RztyZXR1cm4gZ2V9fSw5OntuOiJCcnRGbWxhTnVtIixmOmZ1bmN0aW9uIFRTKFMsUixrKXt2YXIgRz1TLmwrUixRPUQxKFMpO1Eucj1rWyIhcm93Il07dmFyIGdlPVtRLExsKFMpLCJuIl07aWYoay5jZWxsRm9ybXVsYSl7Uy5sKz0yO3ZhciBwZT1WNChTLEctUy5sLGspO2dlWzNdPWEw''@;'; put 'put ''KHBlLG51bGwsUSxrLnN1cGJvb2tzLGspfWVsc2UgUy5sPUc7cmV0dXJuIGdlfX0sMTA6e246IkJydEZtbGFCb29sIixmOmZ1bmN0aW9uIEVTKFMsUixrKXt2YXIgRz1TLmwrUixRPUQxKFMpO1Eucj1rWyIhcm93Il07dmFyIGdlPVtRLFMucmVhZF9zaGlmdCgxKSwiYiJdO2lmKGsuY2VsbEZv''@;'; put 'put ''cm11bGEpe1MubCs9Mjt2YXIgcGU9VjQoUyxHLVMubCxrKTtnZVszXT1hMChwZSxudWxsLFEsay5zdXBib29rcyxrKX1lbHNlIFMubD1HO3JldHVybiBnZX19LDExOntuOiJCcnRGbWxhRXJyb3IiLGY6ZnVuY3Rpb24geTgoUyxSLGspe3ZhciBHPVMubCtSLFE9RDEoUyk7US5yPWtbIiFyb3ci''@;'; put 'put ''XTt2YXIgZ2U9W1EsUy5yZWFkX3NoaWZ0KDEpLCJlIl07aWYoay5jZWxsRm9ybXVsYSl7Uy5sKz0yO3ZhciBwZT1WNChTLEctUy5sLGspO2dlWzNdPWEwKHBlLG51bGwsUSxrLnN1cGJvb2tzLGspfWVsc2UgUy5sPUc7cmV0dXJuIGdlfX0sMTI6e246IkJydFNob3J0QmxhbmsiLGY6ZnVuY3Rp''@;'; put 'put ''b24geWooUyl7cmV0dXJuW0doKFMpXX19LDEzOntuOiJCcnRTaG9ydFJrIixmOmZ1bmN0aW9uIHduZShTKXtyZXR1cm5bR2goUyksSTEoUyksIm4iXX19LDE0OntuOiJCcnRTaG9ydEVycm9yIixmOmZ1bmN0aW9uIGI4KFMpe3JldHVybltHaChTKSxTLnJlYWRfc2hpZnQoMSksImUiXX19LDE1''@;'; put 'put ''OntuOiJCcnRTaG9ydEJvb2wiLGY6ZnVuY3Rpb24gUEQoUyl7cmV0dXJuW0doKFMpLFMucmVhZF9zaGlmdCgxKSwiYiJdfX0sMTY6e246IkJydFNob3J0UmVhbCIsZjpFan0sMTc6e246IkJydFNob3J0U3QiLGY6ZnVuY3Rpb24gSWooUyl7cmV0dXJuW0doKFMpLHB1KFMpLCJzdHIiXX19LDE4''@;'; put 'put ''OntuOiJCcnRTaG9ydElzc3QiLGY6ZnVuY3Rpb24gTWooUyl7cmV0dXJuW0doKFMpLFMucmVhZF9zaGlmdCg0KSwicyJdfX0sMTk6e246IkJydFNTVEl0ZW0iLGY6b2x9LDIwOntuOiJCcnRQQ0RJTWlzc2luZyJ9LDIxOntuOiJCcnRQQ0RJTnVtYmVyIn0sMjI6e246IkJydFBDRElCb29sZWFu''@;'; put 'put ''In0sMjM6e246IkJydFBDRElFcnJvciJ9LDI0OntuOiJCcnRQQ0RJU3RyaW5nIn0sMjU6e246IkJydFBDRElEYXRldGltZSJ9LDI2OntuOiJCcnRQQ0RJSW5kZXgifSwyNzp7bjoiQnJ0UENESUFNaXNzaW5nIn0sMjg6e246IkJydFBDRElBTnVtYmVyIn0sMjk6e246IkJydFBDRElBQm9vbGVh''@;'; put 'put ''biJ9LDMwOntuOiJCcnRQQ0RJQUVycm9yIn0sMzE6e246IkJydFBDRElBU3RyaW5nIn0sMzI6e246IkJydFBDRElBRGF0ZXRpbWUifSwzMzp7bjoiQnJ0UENSUmVjb3JkIn0sMzQ6e246IkJydFBDUlJlY29yZER0In0sMzU6e246IkJydEZSVEJlZ2luIn0sMzY6e246IkJydEZSVEVuZCJ9LDM3''@;'; put 'put ''OntuOiJCcnRBQ0JlZ2luIn0sMzg6e246IkJydEFDRW5kIn0sMzk6e246IkJydE5hbWUiLGY6ZnVuY3Rpb24gRTgoUyxSLGspe3ZhciBHPVMubCtSO1MubCs9NCxTLmwrPTE7dmFyIFE9Uy5yZWFkX3NoaWZ0KDQpLGFlPW81KFMpLGdlPW9EKFMsMCxrKSxwZT1lMChTKTtTLmw9Rzt2YXIgeWU9''@;'; put 'put ''e05hbWU6YWUsUHRnOmdlfTtyZXR1cm4gUTwyNjg0MzU0NTUmJih5ZS5TaGVldD1RKSxwZSYmKHllLkNvbW1lbnQ9cGUpLHllfX0sNDA6e246IkJydEluZGV4Um93QmxvY2sifSw0Mjp7bjoiQnJ0SW5kZXhCbG9jayJ9LDQzOntuOiJCcnRGb250IixmOmZ1bmN0aW9uIFJWKFMsUixrKXt2YXIg''@;'; put 'put ''Rz17fTtHLnN6PVMucmVhZF9zaGlmdCgyKS8yMDt2YXIgUT1MdyhTKTtzd2l0Y2goUS5mQm9sZCYmKEcuYm9sZD0xKSxRLmZJdGFsaWMmJihHLml0YWxpYz0xKSxRLmZVbmRlcmxpbmUmJihHLnVuZGVybGluZT0xKSxRLmZDb25kZW5zZSYmKEcuY29uZGVuc2U9MSksUS5mRXh0ZW5kJiYoRy5l''@;'; put 'put ''eHRlbmQ9MSksUS5mU2hhZG93JiYoRy5zaGFkb3c9MSksUS5mT3V0bGluZSYmKEcub3V0bGluZT0xKSxRLmZTdHJpa2VvdXQmJihHLnN0cmlrZT0xKSw3MDA9PT1TLnJlYWRfc2hpZnQoMikmJihHLmJvbGQ9MSksUy5yZWFkX3NoaWZ0KDIpKXtjYXNlIDE6Ry52YWxpZ249InN1cGVyIjticmVh''@;'; put 'put ''aztjYXNlIDI6Ry52YWxpZ249InN1YiJ9dmFyIGdlPVMucmVhZF9zaGlmdCgxKTswIT1nZSYmKEcudW5kZXJsaW5lPWdlKTt2YXIgcGU9Uy5yZWFkX3NoaWZ0KDEpO3BlPjAmJihHLmZhbWlseT1wZSk7dmFyIHllPVMucmVhZF9zaGlmdCgxKTtzd2l0Y2goeWU+MCYmKEcuY2hhcnNldD15ZSks''@;'; put 'put ''Uy5sKyssRy5jb2xvcj0kaChTKSxTLnJlYWRfc2hpZnQoMSkpe2Nhc2UgMTpHLnNjaGVtZT0ibWFqb3IiO2JyZWFrO2Nhc2UgMjpHLnNjaGVtZT0ibWlub3IifXJldHVybiBHLm5hbWU9cHUoUyksR319LDQ0OntuOiJCcnRGbXQiLGY6ZnVuY3Rpb24gVnYoUyxSKXtyZXR1cm5bUy5yZWFkX3No''@;'; put 'put ''aWZ0KDIpLHB1KFMpXX19LDQ1OntuOiJCcnRGaWxsIixmOmZ1bmN0aW9uIEZWKFMsUil7dmFyIGs9Uy5sK1IsRz17fSxRPVMucmVhZF9zaGlmdCg0KTtpZig0MCE9USl7Ry5wYXR0ZXJuVHlwZT1TQ1tRXTt2YXIgYWU9JGgoUyk7NjQhPWFlLmluZGV4JiYoRy5mZ0NvbG9yPWFlKTt2YXIgZ2U9''@;'; put 'put ''JGgoUyk7NjUhPWdlLmluZGV4JiYoRy5iZ0NvbG9yPWdlKX1lbHNle1MubCs9MTYsUy5yZWFkX3NoaWZ0KDQpLExsKFMpLExsKFMpLExsKFMpLExsKFMpLExsKFMpO2Zvcih2YXIgcGU9Uy5yZWFkX3NoaWZ0KDQpLHllPVtdLFBlPTA7UGU8cGU7KytQZSl5ZS5wdXNoKE9WKFMpKX1yZXR1cm4g''@;'; put 'put ''Uy5sPWssR319LDQ2OntuOiJCcnRCb3JkZXIiLGY6ZnVuY3Rpb24gSFYoUyl7dmFyIFI9e307Uy5yZWFkX3NoaWZ0KDEpO3ZhciBrPUE1KFMpOyJub25lIiE9ay5zdHlsZSYmKFIudG9wPWspO3ZhciBHPUE1KFMpOyJub25lIiE9Ry5zdHlsZSYmKFIuYm90dG9tPUcpO3ZhciBRPUE1KFMpOyJu''@;'; put 'put ''b25lIiE9US5zdHlsZSYmKFIubGVmdD1RKTt2YXIgYWU9QTUoUyk7Im5vbmUiIT1hZS5zdHlsZSYmKFIucmlnaHQ9YWUpO3ZhciBnZT1BNShTKTtyZXR1cm4ibm9uZSIhPWdlLnN0eWxlJiYoUi5kaWFnPWdlKSxSfX0sNDc6e246IkJydFhGIixmOmZ1bmN0aW9uIE1DKFMsUil7dmFyIGs9Uy5s''@;'; put 'put ''K1IsRz17fSxRPVMucmVhZF9zaGlmdCgyKSxhZT1TLnJlYWRfc2hpZnQoMiksZ2U9Uy5yZWFkX3NoaWZ0KDIpLHBlPVMucmVhZF9zaGlmdCgyKSx5ZT1TLnJlYWRfc2hpZnQoMiksUGU9Uy5yZWFkX3NoaWZ0KDEpO1MucmVhZF9zaGlmdCgxKTt2YXIgTmU9Uy5yZWFkX3NoaWZ0KDIpLFllPVMu''@;'; put 'put ''cmVhZF9zaGlmdCgxKTtTLmw9ayxHLnhmSWQ9USxHLm51bUZtdElkPWFlLEcuZm9udElkPWdlLEcuZmlsbElkPXBlLEcuYm9yZGVySWQ9eWUsMSZZZSYmMCE9Ry5udW1GbXRJZCYmKEcuYXBwbHlOdW1iZXJGb3JtYXQ9ITApLEcuYWxpZ25tZW50PXt9LFBlPjAmJihHLmFsaWdubWVudC50ZXh0''@;'; put 'put ''Um90YXRpb249UGUpO3ZhciBldD0hMTtyZXR1cm4gNyZOZSYmKGV0PSEwLEcuYWxpZ25tZW50Lmhvcml6b250YWw9VDVbNyZOZV0pLEcuYWxpZ25tZW50LnZlcnRpY2FsPVE2W05lPj4+MyY3XSxHLmFsaWdubWVudC52ZXJ0aWNhbCYmKGV0PSEwKSxOZT4+PjYmMSYmKEcuYWxpZ25tZW50Lndy''@;'; put 'put ''YXBUZXh0PSEwKSxOZT4+PjgmMSYmKEcuYWxpZ25tZW50LnNocmlua1RvRml0PSEwKSxldHx8ZGVsZXRlIEcuYWxpZ25tZW50LDQmWWUmJmV0JiYoRy5hcHBseUFsaWdubWVudD0hMCksR319LDQ4OntuOiJCcnRTdHlsZSJ9LDQ5OntuOiJCcnRDZWxsTWV0YSJ9LDUwOntuOiJCcnRWYWx1ZU1l''@;'; put 'put ''dGEifSw1MTp7bjoiQnJ0TWRiIn0sNTI6e246IkJydEJlZ2luRm1kIn0sNTM6e246IkJydEVuZEZtZCJ9LDU0OntuOiJCcnRCZWdpbk1keCJ9LDU1OntuOiJCcnRFbmRNZHgifSw1Njp7bjoiQnJ0QmVnaW5NZHhUdXBsZSJ9LDU3OntuOiJCcnRFbmRNZHhUdXBsZSJ9LDU4OntuOiJCcnRNZHhN''@;'; put 'put ''YnJJc3RyIn0sNTk6e246IkJydFN0ciJ9LDYwOntuOiJCcnRDb2xJbmZvIixmOm5DfSw2Mjp7bjoiQnJ0Q2VsbFJTdHJpbmcifSw2Mzp7bjoiQnJ0Q2FsY0NoYWluSXRlbSQiLGY6ZnVuY3Rpb24gdDgoUyl7dmFyIFI9e307Ui5pPVMucmVhZF9zaGlmdCg0KTt2YXIgaz17fTtrLnI9Uy5yZWFk''@;'; put 'put ''X3NoaWZ0KDQpLGsuYz1TLnJlYWRfc2hpZnQoNCksUi5yPVhpKGspO3ZhciBHPVMucmVhZF9zaGlmdCgxKTtyZXR1cm4gMiZHJiYoUi5sPSIxIiksOCZHJiYoUi5hPSIxIiksUn19LDY0OntuOiJCcnREVmFsIixmOmZ1bmN0aW9uIGpqKFMsUixrKXt2YXIgRz1TLmwrUixRPVMucmVhZF9zaGlm''@;'; put 'put ''dCg0KSxhZT10MChTKSxnZT1lMChTKSxwZT1lMChTKSx5ZT1lMChTKSxQZT1lMChTKSxOZT1pRChTLFIsayksWWU9Uy5sPEc/aUQoUyxSLGspOm51bGwsZXQ9MTUmUSx1dD17dDp6RFtldF0sc3FyZng6YWUsczpbZ2UscGUseWUsUGVdfTtyZXR1cm4gTmUmJih1dC5mMT1OZSksWWUmJih1dC5m''@;'; put 'put ''Mj1ZZSksMD09ZXR8fDM9PWV0fHw3PT1ldHx8KHV0Lm9wPWtTW1E+PjIwJjE1XSksdXR9fSw2NTp7bjoiQnJ0U3h2Y2VsbE51bSJ9LDY2OntuOiJCcnRTeHZjZWxsU3RyIn0sNjc6e246IkJydFN4dmNlbGxCb29sIn0sNjg6e246IkJydFN4dmNlbGxFcnIifSw2OTp7bjoiQnJ0U3h2Y2VsbERh''@;'; put 'put ''dGUifSw3MDp7bjoiQnJ0U3h2Y2VsbE5pbCJ9LDEyODp7bjoiQnJ0RmlsZVZlcnNpb24ifSwxMjk6e246IkJydEJlZ2luU2hlZXQifSwxMzA6e246IkJydEVuZFNoZWV0In0sMTMxOntuOiJCcnRCZWdpbkJvb2siLGY6Um4scDowfSwxMzI6e246IkJydEVuZEJvb2sifSwxMzM6e246IkJydEJl''@;'; put 'put ''Z2luV3NWaWV3cyJ9LDEzNDp7bjoiQnJ0RW5kV3NWaWV3cyJ9LDEzNTp7bjoiQnJ0QmVnaW5Cb29rVmlld3MifSwxMzY6e246IkJydEVuZEJvb2tWaWV3cyJ9LDEzNzp7bjoiQnJ0QmVnaW5Xc1ZpZXciLGY6ZnVuY3Rpb24gQVMoUyl7dmFyIFI9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiBTLmwr''@;'; put 'put ''PTI4LHtSVEw6MzImUixncmlkOiEhKDQmUil9fX0sMTM4OntuOiJCcnRFbmRXc1ZpZXcifSwxMzk6e246IkJydEJlZ2luQ3NWaWV3cyJ9LDE0MDp7bjoiQnJ0RW5kQ3NWaWV3cyJ9LDE0MTp7bjoiQnJ0QmVnaW5Dc1ZpZXcifSwxNDI6e246IkJydEVuZENzVmlldyJ9LDE0Mzp7bjoiQnJ0QmVn''@;'; put 'put ''aW5CdW5kbGVTaHMifSwxNDQ6e246IkJydEVuZEJ1bmRsZVNocyJ9LDE0NTp7bjoiQnJ0QmVnaW5TaGVldERhdGEifSwxNDY6e246IkJydEVuZFNoZWV0RGF0YSJ9LDE0Nzp7bjoiQnJ0V3NQcm9wIixmOmZ1bmN0aW9uIGFiKFMsUil7dmFyIGs9e30sRz1TW1MubF07cmV0dXJuKytTLmwsay5h''@;'; put 'put ''Ym92ZT0hKDY0JkcpLGsubGVmdD0hKDEyOCZHKSxTLmwrPTE4LGsubmFtZT1uNShTLFItMTkpLGt9fSwxNDg6e246IkJydFdzRGltIixmOmdqLHA6MTZ9LDE1MTp7bjoiQnJ0UGFuZSIsZjpmdW5jdGlvbiBWRChTLFIpe3ZhciBrPVMubCtSO0xsKFMpLExsKFMpO3ZhciBHPVMucmVhZF9zaGlm''@;'; put 'put ''dCg0LCJpIiksUT1TLnJlYWRfc2hpZnQoNCwiaSIpO2lmKFMucmVhZF9zaGlmdCg0KSxTLnJlYWRfc2hpZnQoMSksayE9Uy5sKXRocm93IG5ldyBFcnJvcigiQmFkIEJydFBhbmU6ICIraysiICE9ICIrUy5sKTtyZXR1cm5bWGkoe3I6RyxjOlF9KV19fSwxNTI6e246IkJydFNlbCIsZjpmdW5j''@;'; put 'put ''dGlvbiBCRChTLFIpe3JldHVybiBTLnJlYWRfc2hpZnQoNCkse2NlbGw6WGkoe3I6Uy5yZWFkX3NoaWZ0KDQpLGM6Uy5yZWFkX3NoaWZ0KDQpfSl9fX0sMTUzOntuOiJCcnRXYlByb3AiLGY6ZnVuY3Rpb24gSFMoUyxSKXt2YXIgaz17fSxHPVMucmVhZF9zaGlmdCg0KTtrLmRlZmF1bHRUaGVt''@;'; put 'put ''ZVZlcnNpb249Uy5yZWFkX3NoaWZ0KDQpO3ZhciBRPVI+OD9wdShTKToiIjtyZXR1cm4gUS5sZW5ndGg+MCYmKGsuQ29kZU5hbWU9USksay5hdXRvQ29tcHJlc3NQaWN0dXJlcz0hISg2NTUzNiZHKSxrLmJhY2t1cEZpbGU9ISEoNjQmRyksay5jaGVja0NvbXBhdGliaWxpdHk9ISEoNDA5NiZH''@;'; put 'put ''KSxrLmRhdGUxOTA0PSEhKDEmRyksay5maWx0ZXJQcml2YWN5PSEhKDgmRyksay5oaWRlUGl2b3RGaWVsZExpc3Q9ISEoMTAyNCZHKSxrLnByb21wdGVkU29sdXRpb25zPSEhKDE2JkcpLGsucHVibGlzaEl0ZW1zPSEhKDIwNDgmRyksay5yZWZyZXNoQWxsQ29ubmVjdGlvbnM9ISEoMjYyMTQ0''@;'; put 'put ''JkcpLGsuc2F2ZUV4dGVybmFsTGlua1ZhbHVlcz0hISgxMjgmRyksay5zaG93Qm9yZGVyVW5zZWxlY3RlZFRhYmxlcz0hISg0JkcpLGsuc2hvd0lua0Fubm90YXRpb249ISEoMzImRyksay5zaG93T2JqZWN0cz1bImFsbCIsInBsYWNlaG9sZGVycyIsIm5vbmUiXVtHPj4xMyYzXSxrLnNob3dQ''@;'; put 'put ''aXZvdENoYXJ0RmlsdGVyPSEhKDMyNzY4JkcpLGsudXBkYXRlTGlua3M9WyJ1c2VyU2V0IiwibmV2ZXIiLCJhbHdheXMiXVtHPj44JjNdLGt9fSwxNTQ6e246IkJydFdiRmFjdG9pZCJ9LDE1NTp7bjoiQnJ0RmlsZVJlY292ZXIifSwxNTY6e246IkJydEJ1bmRsZVNoIixmOmZ1bmN0aW9uIG96''@;'; put 'put ''KFMsUil7dmFyIGs9e307cmV0dXJuIGsuSGlkZGVuPVMucmVhZF9zaGlmdCg0KSxrLmlUYWJJRD1TLnJlYWRfc2hpZnQoNCksay5zdHJSZWxJRD1oNChTLFItOCksay5uYW1lPXB1KFMpLGt9fSwxNTc6e246IkJydENhbGNQcm9wIn0sMTU4OntuOiJCcnRCb29rVmlldyJ9LDE1OTp7bjoiQnJ0''@;'; put 'put ''QmVnaW5Tc3QiLGY6ZnVuY3Rpb24gVHYoUyl7cmV0dXJuW1MucmVhZF9zaGlmdCg0KSxTLnJlYWRfc2hpZnQoNCldfX0sMTYwOntuOiJCcnRFbmRTc3QifSwxNjE6e246IkJydEJlZ2luQUZpbHRlciIsZjpndX0sMTYyOntuOiJCcnRFbmRBRmlsdGVyIn0sMTYzOntuOiJCcnRCZWdpbkZpbHRl''@;'; put 'put ''ckNvbHVtbiJ9LDE2NDp7bjoiQnJ0RW5kRmlsdGVyQ29sdW1uIn0sMTY1OntuOiJCcnRCZWdpbkZpbHRlcnMifSwxNjY6e246IkJydEVuZEZpbHRlcnMifSwxNjc6e246IkJydEZpbHRlciJ9LDE2ODp7bjoiQnJ0Q29sb3JGaWx0ZXIifSwxNjk6e246IkJydEljb25GaWx0ZXIifSwxNzA6e246''@;'; put 'put ''IkJydFRvcDEwRmlsdGVyIn0sMTcxOntuOiJCcnREeW5hbWljRmlsdGVyIn0sMTcyOntuOiJCcnRCZWdpbkN1c3RvbUZpbHRlcnMifSwxNzM6e246IkJydEVuZEN1c3RvbUZpbHRlcnMifSwxNzQ6e246IkJydEN1c3RvbUZpbHRlciJ9LDE3NTp7bjoiQnJ0QUZpbHRlckRhdGVHcm91cEl0ZW0i''@;'; put 'put ''fSwxNzY6e246IkJydE1lcmdlQ2VsbCIsZjpIRH0sMTc3OntuOiJCcnRCZWdpbk1lcmdlQ2VsbHMifSwxNzg6e246IkJydEVuZE1lcmdlQ2VsbHMifSwxNzk6e246IkJydEJlZ2luUGl2b3RDYWNoZURlZiJ9LDE4MDp7bjoiQnJ0RW5kUGl2b3RDYWNoZURlZiJ9LDE4MTp7bjoiQnJ0QmVnaW5Q''@;'; put 'put ''Q0RGaWVsZHMifSwxODI6e246IkJydEVuZFBDREZpZWxkcyJ9LDE4Mzp7bjoiQnJ0QmVnaW5QQ0RGaWVsZCJ9LDE4NDp7bjoiQnJ0RW5kUENERmllbGQifSwxODU6e246IkJydEJlZ2luUENEU291cmNlIn0sMTg2OntuOiJCcnRFbmRQQ0RTb3VyY2UifSwxODc6e246IkJydEJlZ2luUENEU1Jh''@;'; put 'put ''bmdlIn0sMTg4OntuOiJCcnRFbmRQQ0RTUmFuZ2UifSwxODk6e246IkJydEJlZ2luUENERkF0YmwifSwxOTA6e246IkJydEVuZFBDREZBdGJsIn0sMTkxOntuOiJCcnRCZWdpblBDRElSdW4ifSwxOTI6e246IkJydEVuZFBDRElSdW4ifSwxOTM6e246IkJydEJlZ2luUGl2b3RDYWNoZVJlY29y''@;'; put 'put ''ZHMifSwxOTQ6e246IkJydEVuZFBpdm90Q2FjaGVSZWNvcmRzIn0sMTk1OntuOiJCcnRCZWdpblBDREhpZXJhcmNoaWVzIn0sMTk2OntuOiJCcnRFbmRQQ0RIaWVyYXJjaGllcyJ9LDE5Nzp7bjoiQnJ0QmVnaW5QQ0RIaWVyYXJjaHkifSwxOTg6e246IkJydEVuZFBDREhpZXJhcmNoeSJ9LDE5''@;'; put 'put ''OTp7bjoiQnJ0QmVnaW5QQ0RIRmllbGRzVXNhZ2UifSwyMDA6e246IkJydEVuZFBDREhGaWVsZHNVc2FnZSJ9LDIwMTp7bjoiQnJ0QmVnaW5FeHRDb25uZWN0aW9uIn0sMjAyOntuOiJCcnRFbmRFeHRDb25uZWN0aW9uIn0sMjAzOntuOiJCcnRCZWdpbkVDRGJQcm9wcyJ9LDIwNDp7bjoiQnJ0''@;'; put 'put ''RW5kRUNEYlByb3BzIn0sMjA1OntuOiJCcnRCZWdpbkVDT2xhcFByb3BzIn0sMjA2OntuOiJCcnRFbmRFQ09sYXBQcm9wcyJ9LDIwNzp7bjoiQnJ0QmVnaW5QQ0RTQ29uc29sIn0sMjA4OntuOiJCcnRFbmRQQ0RTQ29uc29sIn0sMjA5OntuOiJCcnRCZWdpblBDRFNDUGFnZXMifSwyMTA6e246''@;'; put 'put ''IkJydEVuZFBDRFNDUGFnZXMifSwyMTE6e246IkJydEJlZ2luUENEU0NQYWdlIn0sMjEyOntuOiJCcnRFbmRQQ0RTQ1BhZ2UifSwyMTM6e246IkJydEJlZ2luUENEU0NQSXRlbSJ9LDIxNDp7bjoiQnJ0RW5kUENEU0NQSXRlbSJ9LDIxNTp7bjoiQnJ0QmVnaW5QQ0RTQ1NldHMifSwyMTY6e246''@;'; put 'put ''IkJydEVuZFBDRFNDU2V0cyJ9LDIxNzp7bjoiQnJ0QmVnaW5QQ0RTQ1NldCJ9LDIxODp7bjoiQnJ0RW5kUENEU0NTZXQifSwyMTk6e246IkJydEJlZ2luUENERkdyb3VwIn0sMjIwOntuOiJCcnRFbmRQQ0RGR3JvdXAifSwyMjE6e246IkJydEJlZ2luUENERkdJdGVtcyJ9LDIyMjp7bjoiQnJ0''@;'; put 'put ''RW5kUENERkdJdGVtcyJ9LDIyMzp7bjoiQnJ0QmVnaW5QQ0RGR1JhbmdlIn0sMjI0OntuOiJCcnRFbmRQQ0RGR1JhbmdlIn0sMjI1OntuOiJCcnRCZWdpblBDREZHRGlzY3JldGUifSwyMjY6e246IkJydEVuZFBDREZHRGlzY3JldGUifSwyMjc6e246IkJydEJlZ2luUENEU0RUdXBsZUNhY2hl''@;'; put 'put ''In0sMjI4OntuOiJCcnRFbmRQQ0RTRFR1cGxlQ2FjaGUifSwyMjk6e246IkJydEJlZ2luUENEU0RUQ0VudHJpZXMifSwyMzA6e246IkJydEVuZFBDRFNEVENFbnRyaWVzIn0sMjMxOntuOiJCcnRCZWdpblBDRFNEVENFTWVtYmVycyJ9LDIzMjp7bjoiQnJ0RW5kUENEU0RUQ0VNZW1iZXJzIn0s''@;'; put 'put ''MjMzOntuOiJCcnRCZWdpblBDRFNEVENFTWVtYmVyIn0sMjM0OntuOiJCcnRFbmRQQ0RTRFRDRU1lbWJlciJ9LDIzNTp7bjoiQnJ0QmVnaW5QQ0RTRFRDUXVlcmllcyJ9LDIzNjp7bjoiQnJ0RW5kUENEU0RUQ1F1ZXJpZXMifSwyMzc6e246IkJydEJlZ2luUENEU0RUQ1F1ZXJ5In0sMjM4Ontu''@;'; put 'put ''OiJCcnRFbmRQQ0RTRFRDUXVlcnkifSwyMzk6e246IkJydEJlZ2luUENEU0RUQ1NldHMifSwyNDA6e246IkJydEVuZFBDRFNEVENTZXRzIn0sMjQxOntuOiJCcnRCZWdpblBDRFNEVENTZXQifSwyNDI6e246IkJydEVuZFBDRFNEVENTZXQifSwyNDM6e246IkJydEJlZ2luUENEQ2FsY0l0ZW1z''@;'; put 'put ''In0sMjQ0OntuOiJCcnRFbmRQQ0RDYWxjSXRlbXMifSwyNDU6e246IkJydEJlZ2luUENEQ2FsY0l0ZW0ifSwyNDY6e246IkJydEVuZFBDRENhbGNJdGVtIn0sMjQ3OntuOiJCcnRCZWdpblBSdWxlIn0sMjQ4OntuOiJCcnRFbmRQUnVsZSJ9LDI0OTp7bjoiQnJ0QmVnaW5QUkZpbHRlcnMifSwy''@;'; put 'put ''NTA6e246IkJydEVuZFBSRmlsdGVycyJ9LDI1MTp7bjoiQnJ0QmVnaW5QUkZpbHRlciJ9LDI1Mjp7bjoiQnJ0RW5kUFJGaWx0ZXIifSwyNTM6e246IkJydEJlZ2luUE5hbWVzIn0sMjU0OntuOiJCcnRFbmRQTmFtZXMifSwyNTU6e246IkJydEJlZ2luUE5hbWUifSwyNTY6e246IkJydEVuZFBO''@;'; put 'put ''YW1lIn0sMjU3OntuOiJCcnRCZWdpblBOUGFpcnMifSwyNTg6e246IkJydEVuZFBOUGFpcnMifSwyNTk6e246IkJydEJlZ2luUE5QYWlyIn0sMjYwOntuOiJCcnRFbmRQTlBhaXIifSwyNjE6e246IkJydEJlZ2luRUNXZWJQcm9wcyJ9LDI2Mjp7bjoiQnJ0RW5kRUNXZWJQcm9wcyJ9LDI2Mzp7''@;'; put 'put ''bjoiQnJ0QmVnaW5FY1dwVGFibGVzIn0sMjY0OntuOiJCcnRFbmRFQ1dQVGFibGVzIn0sMjY1OntuOiJCcnRCZWdpbkVDUGFyYW1zIn0sMjY2OntuOiJCcnRFbmRFQ1BhcmFtcyJ9LDI2Nzp7bjoiQnJ0QmVnaW5FQ1BhcmFtIn0sMjY4OntuOiJCcnRFbmRFQ1BhcmFtIn0sMjY5OntuOiJCcnRC''@;'; put 'put ''ZWdpblBDREtQSXMifSwyNzA6e246IkJydEVuZFBDREtQSXMifSwyNzE6e246IkJydEJlZ2luUENES1BJIn0sMjcyOntuOiJCcnRFbmRQQ0RLUEkifSwyNzM6e246IkJydEJlZ2luRGltcyJ9LDI3NDp7bjoiQnJ0RW5kRGltcyJ9LDI3NTp7bjoiQnJ0QmVnaW5EaW0ifSwyNzY6e246IkJydEVu''@;'; put 'put ''ZERpbSJ9LDI3Nzp7bjoiQnJ0SW5kZXhQYXJ0RW5kIn0sMjc4OntuOiJCcnRCZWdpblN0eWxlU2hlZXQifSwyNzk6e246IkJydEVuZFN0eWxlU2hlZXQifSwyODA6e246IkJydEJlZ2luU1hWaWV3In0sMjgxOntuOiJCcnRFbmRTWFZJIn0sMjgyOntuOiJCcnRCZWdpblNYVkkifSwyODM6e246''@;'; put 'put ''IkJydEJlZ2luU1hWSXMifSwyODQ6e246IkJydEVuZFNYVklzIn0sMjg1OntuOiJCcnRCZWdpblNYVkQifSwyODY6e246IkJydEVuZFNYVkQifSwyODc6e246IkJydEJlZ2luU1hWRHMifSwyODg6e246IkJydEVuZFNYVkRzIn0sMjg5OntuOiJCcnRCZWdpblNYUEkifSwyOTA6e246IkJydEVu''@;'; put 'put ''ZFNYUEkifSwyOTE6e246IkJydEJlZ2luU1hQSXMifSwyOTI6e246IkJydEVuZFNYUElzIn0sMjkzOntuOiJCcnRCZWdpblNYREkifSwyOTQ6e246IkJydEVuZFNYREkifSwyOTU6e246IkJydEJlZ2luU1hESXMifSwyOTY6e246IkJydEVuZFNYRElzIn0sMjk3OntuOiJCcnRCZWdpblNYTEki''@;'; put 'put ''fSwyOTg6e246IkJydEVuZFNYTEkifSwyOTk6e246IkJydEJlZ2luU1hMSVJ3cyJ9LDMwMDp7bjoiQnJ0RW5kU1hMSVJ3cyJ9LDMwMTp7bjoiQnJ0QmVnaW5TWExJQ29scyJ9LDMwMjp7bjoiQnJ0RW5kU1hMSUNvbHMifSwzMDM6e246IkJydEJlZ2luU1hGb3JtYXQifSwzMDQ6e246IkJydEVu''@;'; put 'put ''ZFNYRm9ybWF0In0sMzA1OntuOiJCcnRCZWdpblNYRm9ybWF0cyJ9LDMwNjp7bjoiQnJ0RW5kU3hGb3JtYXRzIn0sMzA3OntuOiJCcnRCZWdpblN4U2VsZWN0In0sMzA4OntuOiJCcnRFbmRTeFNlbGVjdCJ9LDMwOTp7bjoiQnJ0QmVnaW5JU1hWRFJ3cyJ9LDMxMDp7bjoiQnJ0RW5kSVNYVkRS''@;'; put 'put ''d3MifSwzMTE6e246IkJydEJlZ2luSVNYVkRDb2xzIn0sMzEyOntuOiJCcnRFbmRJU1hWRENvbHMifSwzMTM6e246IkJydEVuZFNYTG9jYXRpb24ifSwzMTQ6e246IkJydEJlZ2luU1hMb2NhdGlvbiJ9LDMxNTp7bjoiQnJ0RW5kU1hWaWV3In0sMzE2OntuOiJCcnRCZWdpblNYVEhzIn0sMzE3''@;'; put 'put ''OntuOiJCcnRFbmRTWFRIcyJ9LDMxODp7bjoiQnJ0QmVnaW5TWFRIIn0sMzE5OntuOiJCcnRFbmRTWFRIIn0sMzIwOntuOiJCcnRCZWdpbklTWFRIUndzIn0sMzIxOntuOiJCcnRFbmRJU1hUSFJ3cyJ9LDMyMjp7bjoiQnJ0QmVnaW5JU1hUSENvbHMifSwzMjM6e246IkJydEVuZElTWFRIQ29s''@;'; put 'put ''cyJ9LDMyNDp7bjoiQnJ0QmVnaW5TWFRETVBTIn0sMzI1OntuOiJCcnRFbmRTWFRETVBzIn0sMzI2OntuOiJCcnRCZWdpblNYVERNUCJ9LDMyNzp7bjoiQnJ0RW5kU1hURE1QIn0sMzI4OntuOiJCcnRCZWdpblNYVEhJdGVtcyJ9LDMyOTp7bjoiQnJ0RW5kU1hUSEl0ZW1zIn0sMzMwOntuOiJC''@;'; put 'put ''cnRCZWdpblNYVEhJdGVtIn0sMzMxOntuOiJCcnRFbmRTWFRISXRlbSJ9LDMzMjp7bjoiQnJ0QmVnaW5NZXRhZGF0YSJ9LDMzMzp7bjoiQnJ0RW5kTWV0YWRhdGEifSwzMzQ6e246IkJydEJlZ2luRXNtZHRpbmZvIn0sMzM1OntuOiJCcnRNZHRpbmZvIn0sMzM2OntuOiJCcnRFbmRFc21kdGlu''@;'; put 'put ''Zm8ifSwzMzc6e246IkJydEJlZ2luRXNtZGIifSwzMzg6e246IkJydEVuZEVzbWRiIn0sMzM5OntuOiJCcnRCZWdpbkVzZm1kIn0sMzQwOntuOiJCcnRFbmRFc2ZtZCJ9LDM0MTp7bjoiQnJ0QmVnaW5TaW5nbGVDZWxscyJ9LDM0Mjp7bjoiQnJ0RW5kU2luZ2xlQ2VsbHMifSwzNDM6e246IkJy''@;'; put 'put ''dEJlZ2luTGlzdCJ9LDM0NDp7bjoiQnJ0RW5kTGlzdCJ9LDM0NTp7bjoiQnJ0QmVnaW5MaXN0Q29scyJ9LDM0Njp7bjoiQnJ0RW5kTGlzdENvbHMifSwzNDc6e246IkJydEJlZ2luTGlzdENvbCJ9LDM0ODp7bjoiQnJ0RW5kTGlzdENvbCJ9LDM0OTp7bjoiQnJ0QmVnaW5MaXN0WG1sQ1ByIn0s''@;'; put 'put ''MzUwOntuOiJCcnRFbmRMaXN0WG1sQ1ByIn0sMzUxOntuOiJCcnRMaXN0Q0NGbWxhIn0sMzUyOntuOiJCcnRMaXN0VHJGbWxhIn0sMzUzOntuOiJCcnRCZWdpbkV4dGVybmFscyJ9LDM1NDp7bjoiQnJ0RW5kRXh0ZXJuYWxzIn0sMzU1OntuOiJCcnRTdXBCb29rU3JjIixmOmg0fSwzNTc6e246''@;'; put 'put ''IkJydFN1cFNlbGYifSwzNTg6e246IkJydFN1cFNhbWUifSwzNTk6e246IkJydFN1cFRhYnMifSwzNjA6e246IkJydEJlZ2luU3VwQm9vayJ9LDM2MTp7bjoiQnJ0UGxhY2Vob2xkZXJOYW1lIn0sMzYyOntuOiJCcnRFeHRlcm5TaGVldCIsZjp3dn0sMzYzOntuOiJCcnRFeHRlcm5UYWJsZVN0''@;'; put 'put ''YXJ0In0sMzY0OntuOiJCcnRFeHRlcm5UYWJsZUVuZCJ9LDM2Njp7bjoiQnJ0RXh0ZXJuUm93SGRyIn0sMzY3OntuOiJCcnRFeHRlcm5DZWxsQmxhbmsifSwzNjg6e246IkJydEV4dGVybkNlbGxSZWFsIn0sMzY5OntuOiJCcnRFeHRlcm5DZWxsQm9vbCJ9LDM3MDp7bjoiQnJ0RXh0ZXJuQ2Vs''@;'; put 'put ''bEVycm9yIn0sMzcxOntuOiJCcnRFeHRlcm5DZWxsU3RyaW5nIn0sMzcyOntuOiJCcnRCZWdpbkVzbWR4In0sMzczOntuOiJCcnRFbmRFc21keCJ9LDM3NDp7bjoiQnJ0QmVnaW5NZHhTZXQifSwzNzU6e246IkJydEVuZE1keFNldCJ9LDM3Njp7bjoiQnJ0QmVnaW5NZHhNYnJQcm9wIn0sMzc3''@;'; put 'put ''OntuOiJCcnRFbmRNZHhNYnJQcm9wIn0sMzc4OntuOiJCcnRCZWdpbk1keEtQSSJ9LDM3OTp7bjoiQnJ0RW5kTWR4S1BJIn0sMzgwOntuOiJCcnRCZWdpbkVzc3RyIn0sMzgxOntuOiJCcnRFbmRFc3N0ciJ9LDM4Mjp7bjoiQnJ0QmVnaW5QUkZJdGVtIn0sMzgzOntuOiJCcnRFbmRQUkZJdGVt''@;'; put 'put ''In0sMzg0OntuOiJCcnRCZWdpblBpdm90Q2FjaGVJRHMifSwzODU6e246IkJydEVuZFBpdm90Q2FjaGVJRHMifSwzODY6e246IkJydEJlZ2luUGl2b3RDYWNoZUlEIn0sMzg3OntuOiJCcnRFbmRQaXZvdENhY2hlSUQifSwzODg6e246IkJydEJlZ2luSVNYVklzIn0sMzg5OntuOiJCcnRFbmRJ''@;'; put 'put ''U1hWSXMifSwzOTA6e246IkJydEJlZ2luQ29sSW5mb3MifSwzOTE6e246IkJydEVuZENvbEluZm9zIn0sMzkyOntuOiJCcnRCZWdpblJ3QnJrIn0sMzkzOntuOiJCcnRFbmRSd0JyayJ9LDM5NDp7bjoiQnJ0QmVnaW5Db2xCcmsifSwzOTU6e246IkJydEVuZENvbEJyayJ9LDM5Njp7bjoiQnJ0''@;'; put 'put ''QnJrIn0sMzk3OntuOiJCcnRVc2VyQm9va1ZpZXcifSwzOTg6e246IkJydEluZm8ifSwzOTk6e246IkJydENVc3IifSw0MDA6e246IkJydFVzciJ9LDQwMTp7bjoiQnJ0QmVnaW5Vc2VycyJ9LDQwMzp7bjoiQnJ0RU9GIn0sNDA0OntuOiJCcnRVQ1IifSw0MDU6e246IkJydFJSSW5zRGVsIn0s''@;'; put 'put ''NDA2OntuOiJCcnRSUkVuZEluc0RlbCJ9LDQwNzp7bjoiQnJ0UlJNb3ZlIn0sNDA4OntuOiJCcnRSUkVuZE1vdmUifSw0MDk6e246IkJydFJSQ2hnQ2VsbCJ9LDQxMDp7bjoiQnJ0UlJFbmRDaGdDZWxsIn0sNDExOntuOiJCcnRSUkhlYWRlciJ9LDQxMjp7bjoiQnJ0UlJVc2VyVmlldyJ9LDQx''@;'; put 'put ''Mzp7bjoiQnJ0UlJSZW5TaGVldCJ9LDQxNDp7bjoiQnJ0UlJJbnNlcnRTaCJ9LDQxNTp7bjoiQnJ0UlJEZWZOYW1lIn0sNDE2OntuOiJCcnRSUk5vdGUifSw0MTc6e246IkJydFJSQ29uZmxpY3QifSw0MTg6e246IkJydFJSVFFTSUYifSw0MTk6e246IkJydFJSRm9ybWF0In0sNDIwOntuOiJC''@;'; put 'put ''cnRSUkVuZEZvcm1hdCJ9LDQyMTp7bjoiQnJ0UlJBdXRvRm10In0sNDIyOntuOiJCcnRCZWdpblVzZXJTaFZpZXdzIn0sNDIzOntuOiJCcnRCZWdpblVzZXJTaFZpZXcifSw0MjQ6e246IkJydEVuZFVzZXJTaFZpZXcifSw0MjU6e246IkJydEVuZFVzZXJTaFZpZXdzIn0sNDI2OntuOiJCcnRB''@;'; put 'put ''cnJGbWxhIixmOmZ1bmN0aW9uIGNiKFMsUixrKXt2YXIgRz1TLmwrUixRPWxkKFMpLGFlPVMucmVhZF9zaGlmdCgxKSxnZT1bUV07aWYoZ2VbMl09YWUsay5jZWxsRm9ybXVsYSl7dmFyIHBlPVFDKFMsRy1TLmwsayk7Z2VbMV09cGV9ZWxzZSBTLmw9RztyZXR1cm4gZ2V9fSw0Mjc6e246IkJy''@;'; put 'put ''dFNockZtbGEiLGY6ZnVuY3Rpb24gRmooUyxSLGspe3ZhciBHPVMubCtSLGFlPVtndShTLDE2KV07aWYoay5jZWxsRm9ybXVsYSl7dmFyIGdlPXpCKFMsRy1TLmwsayk7YWVbMV09Z2UsUy5sPUd9ZWxzZSBTLmw9RztyZXR1cm4gYWV9fSw0Mjg6e246IkJydFRhYmxlIn0sNDI5OntuOiJCcnRC''@;'; put 'put ''ZWdpbkV4dENvbm5lY3Rpb25zIn0sNDMwOntuOiJCcnRFbmRFeHRDb25uZWN0aW9ucyJ9LDQzMTp7bjoiQnJ0QmVnaW5QQ0RDYWxjTWVtcyJ9LDQzMjp7bjoiQnJ0RW5kUENEQ2FsY01lbXMifSw0MzM6e246IkJydEJlZ2luUENEQ2FsY01lbSJ9LDQzNDp7bjoiQnJ0RW5kUENEQ2FsY01lbSJ9''@;'; put 'put ''LDQzNTp7bjoiQnJ0QmVnaW5QQ0RIR0xldmVscyJ9LDQzNjp7bjoiQnJ0RW5kUENESEdMZXZlbHMifSw0Mzc6e246IkJydEJlZ2luUENESEdMZXZlbCJ9LDQzODp7bjoiQnJ0RW5kUENESEdMZXZlbCJ9LDQzOTp7bjoiQnJ0QmVnaW5QQ0RIR0xHcm91cHMifSw0NDA6e246IkJydEVuZFBDREhH''@;'; put 'put ''TEdyb3VwcyJ9LDQ0MTp7bjoiQnJ0QmVnaW5QQ0RIR0xHcm91cCJ9LDQ0Mjp7bjoiQnJ0RW5kUENESEdMR3JvdXAifSw0NDM6e246IkJydEJlZ2luUENESEdMR01lbWJlcnMifSw0NDQ6e246IkJydEVuZFBDREhHTEdNZW1iZXJzIn0sNDQ1OntuOiJCcnRCZWdpblBDREhHTEdNZW1iZXIifSw0''@;'; put 'put ''NDY6e246IkJydEVuZFBDREhHTEdNZW1iZXIifSw0NDc6e246IkJydEJlZ2luUVNJIn0sNDQ4OntuOiJCcnRFbmRRU0kifSw0NDk6e246IkJydEJlZ2luUVNJUiJ9LDQ1MDp7bjoiQnJ0RW5kUVNJUiJ9LDQ1MTp7bjoiQnJ0QmVnaW5EZWxldGVkTmFtZXMifSw0NTI6e246IkJydEVuZERlbGV0''@;'; put 'put ''ZWROYW1lcyJ9LDQ1Mzp7bjoiQnJ0QmVnaW5EZWxldGVkTmFtZSJ9LDQ1NDp7bjoiQnJ0RW5kRGVsZXRlZE5hbWUifSw0NTU6e246IkJydEJlZ2luUVNJRnMifSw0NTY6e246IkJydEVuZFFTSUZzIn0sNDU3OntuOiJCcnRCZWdpblFTSUYifSw0NTg6e246IkJydEVuZFFTSUYifSw0NTk6e246''@;'; put 'put ''IkJydEJlZ2luQXV0b1NvcnRTY29wZSJ9LDQ2MDp7bjoiQnJ0RW5kQXV0b1NvcnRTY29wZSJ9LDQ2MTp7bjoiQnJ0QmVnaW5Db25kaXRpb25hbEZvcm1hdHRpbmcifSw0NjI6e246IkJydEVuZENvbmRpdGlvbmFsRm9ybWF0dGluZyJ9LDQ2Mzp7bjoiQnJ0QmVnaW5DRlJ1bGUifSw0NjQ6e246''@;'; put 'put ''IkJydEVuZENGUnVsZSJ9LDQ2NTp7bjoiQnJ0QmVnaW5JY29uU2V0In0sNDY2OntuOiJCcnRFbmRJY29uU2V0In0sNDY3OntuOiJCcnRCZWdpbkRhdGFiYXIifSw0Njg6e246IkJydEVuZERhdGFiYXIifSw0Njk6e246IkJydEJlZ2luQ29sb3JTY2FsZSJ9LDQ3MDp7bjoiQnJ0RW5kQ29sb3JT''@;'; put 'put ''Y2FsZSJ9LDQ3MTp7bjoiQnJ0Q0ZWTyJ9LDQ3Mjp7bjoiQnJ0RXh0ZXJuVmFsdWVNZXRhIn0sNDczOntuOiJCcnRCZWdpbkNvbG9yUGFsZXR0ZSJ9LDQ3NDp7bjoiQnJ0RW5kQ29sb3JQYWxldHRlIn0sNDc1OntuOiJCcnRJbmRleGVkQ29sb3IifSw0NzY6e246IkJydE1hcmdpbnMiLGY6ZnVu''@;'; put 'put ''Y3Rpb24gTmooUyl7dmFyIFI9e307cmV0dXJuIGpELmZvckVhY2goZnVuY3Rpb24oayl7UltrXT1MbChTKX0pLFJ9fSw0Nzc6e246IkJydFByaW50T3B0aW9ucyJ9LDQ3ODp7bjoiQnJ0UGFnZVNldHVwIn0sNDc5OntuOiJCcnRCZWdpbkhlYWRlckZvb3RlciJ9LDQ4MDp7bjoiQnJ0RW5kSGVh''@;'; put 'put ''ZGVyRm9vdGVyIn0sNDgxOntuOiJCcnRCZWdpblNYQ3J0Rm9ybWF0In0sNDgyOntuOiJCcnRFbmRTWENydEZvcm1hdCJ9LDQ4Mzp7bjoiQnJ0QmVnaW5TWENydEZvcm1hdHMifSw0ODQ6e246IkJydEVuZFNYQ3J0Rm9ybWF0cyJ9LDQ4NTp7bjoiQnJ0V3NGbXRJbmZvIixmOmZ1bmN0aW9uIExE''@;'; put 'put ''KFMpe3ZhciBSPXt9LGs9e30sRz17fSxRPVMucmVhZF9zaGlmdCg0KSxhZT1TLnJlYWRfc2hpZnQoMik7Ry53Y2g9UTw9NjU1MzY/US8yNTY6YWU7dmFyIGdlPVMucmVhZF9zaGlmdCgyKTtrLmhwdD1nZS8yMDt2YXIgcGU9Uy5yZWFkX3NoaWZ0KDIpO3JldHVybiAyJnBlJiYoay5oaWRkZW49''@;'; put 'put ''ITApLDQmcGUmJihSLnRvcHRoaWNrPSEwKSw4JnBlJiYoUi5ib3R0aGljaz0hMCksUi5yb3dvdXRsaW5lPVMucmVhZF9zaGlmdCgxKSxSLmNvbG91dGxpbmU9Uy5yZWFkX3NoaWZ0KDEpLFB2KGspLFIucm93PWssZTEoRyksUi5jb2w9RyxSfX0sNDg2OntuOiJCcnRCZWdpbk1ncyJ9LDQ4Nzp7''@;'; put 'put ''bjoiQnJ0RW5kTUdzIn0sNDg4OntuOiJCcnRCZWdpbk1HTWFwcyJ9LDQ4OTp7bjoiQnJ0RW5kTUdNYXBzIn0sNDkwOntuOiJCcnRCZWdpbk1HIn0sNDkxOntuOiJCcnRFbmRNRyJ9LDQ5Mjp7bjoiQnJ0QmVnaW5NYXAifSw0OTM6e246IkJydEVuZE1hcCJ9LDQ5NDp7bjoiQnJ0SExpbmsiLGY6''@;'; put 'put ''ZnVuY3Rpb24gTGooUyxSKXt2YXIgaz1TLmwrUixHPWd1KFMsMTYpLFE9ZTAoUyksYWU9cHUoUyksZ2U9cHUoUykscGU9cHUoUyk7Uy5sPWs7dmFyIHllPXtyZng6RyxyZWxJZDpRLGxvYzphZSxkaXNwbGF5OnBlfTtyZXR1cm4gZ2UmJih5ZS5Ub29sdGlwPWdlKSx5ZX19LDQ5NTp7bjoiQnJ0''@;'; put 'put ''QmVnaW5EQ29uIn0sNDk2OntuOiJCcnRFbmREQ29uIn0sNDk3OntuOiJCcnRCZWdpbkRSZWZzIn0sNDk4OntuOiJCcnRFbmREUmVmcyJ9LDQ5OTp7bjoiQnJ0RFJlZiJ9LDUwMDp7bjoiQnJ0QmVnaW5TY2VuTWFuIn0sNTAxOntuOiJCcnRFbmRTY2VuTWFuIn0sNTAyOntuOiJCcnRCZWdpblNj''@;'; put 'put ''dCJ9LDUwMzp7bjoiQnJ0RW5kU2N0In0sNTA0OntuOiJCcnRTbGMifSw1MDU6e246IkJydEJlZ2luRFhGcyJ9LDUwNjp7bjoiQnJ0RW5kRFhGcyJ9LDUwNzp7bjoiQnJ0RFhGIn0sNTA4OntuOiJCcnRCZWdpblRhYmxlU3R5bGVzIn0sNTA5OntuOiJCcnRFbmRUYWJsZVN0eWxlcyJ9LDUxMDp7''@;'; put 'put ''bjoiQnJ0QmVnaW5UYWJsZVN0eWxlIn0sNTExOntuOiJCcnRFbmRUYWJsZVN0eWxlIn0sNTEyOntuOiJCcnRUYWJsZVN0eWxlRWxlbWVudCJ9LDUxMzp7bjoiQnJ0VGFibGVTdHlsZUNsaWVudCJ9LDUxNDp7bjoiQnJ0QmVnaW5Wb2xEZXBzIn0sNTE1OntuOiJCcnRFbmRWb2xEZXBzIn0sNTE2''@;'; put 'put ''OntuOiJCcnRCZWdpblZvbFR5cGUifSw1MTc6e246IkJydEVuZFZvbFR5cGUifSw1MTg6e246IkJydEJlZ2luVm9sTWFpbiJ9LDUxOTp7bjoiQnJ0RW5kVm9sTWFpbiJ9LDUyMDp7bjoiQnJ0QmVnaW5Wb2xUb3BpYyJ9LDUyMTp7bjoiQnJ0RW5kVm9sVG9waWMifSw1MjI6e246IkJydFZvbFN1''@;'; put 'put ''YnRvcGljIn0sNTIzOntuOiJCcnRWb2xSZWYifSw1MjQ6e246IkJydFZvbE51bSJ9LDUyNTp7bjoiQnJ0Vm9sRXJyIn0sNTI2OntuOiJCcnRWb2xTdHIifSw1Mjc6e246IkJydFZvbEJvb2wifSw1Mjg6e246IkJydEJlZ2luQ2FsY0NoYWluJCJ9LDUyOTp7bjoiQnJ0RW5kQ2FsY0NoYWluJCJ9''@;'; put 'put ''LDUzMDp7bjoiQnJ0QmVnaW5Tb3J0U3RhdGUifSw1MzE6e246IkJydEVuZFNvcnRTdGF0ZSJ9LDUzMjp7bjoiQnJ0QmVnaW5Tb3J0Q29uZCJ9LDUzMzp7bjoiQnJ0RW5kU29ydENvbmQifSw1MzQ6e246IkJydEJvb2tQcm90ZWN0aW9uIn0sNTM1OntuOiJCcnRTaGVldFByb3RlY3Rpb24ifSw1''@;'; put 'put ''MzY6e246IkJydFJhbmdlUHJvdGVjdGlvbiJ9LDUzNzp7bjoiQnJ0UGhvbmV0aWNJbmZvIn0sNTM4OntuOiJCcnRCZWdpbkVDVHh0V2l6In0sNTM5OntuOiJCcnRFbmRFQ1R4dFdpeiJ9LDU0MDp7bjoiQnJ0QmVnaW5FQ1RXRmxkSW5mb0xzdCJ9LDU0MTp7bjoiQnJ0RW5kRUNUV0ZsZEluZm9M''@;'; put 'put ''c3QifSw1NDI6e246IkJydEJlZ2luRUNUd0ZsZEluZm8ifSw1NDg6e246IkJydEZpbGVTaGFyaW5nIn0sNTQ5OntuOiJCcnRPbGVTaXplIn0sNTUwOntuOiJCcnREcmF3aW5nIixmOmg0fSw1NTE6e246IkJydExlZ2FjeURyYXdpbmcifSw1NTI6e246IkJydExlZ2FjeURyYXdpbmdIRiJ9LDU1''@;'; put 'put ''Mzp7bjoiQnJ0V2ViT3B0In0sNTU0OntuOiJCcnRCZWdpbldlYlB1Ykl0ZW1zIn0sNTU1OntuOiJCcnRFbmRXZWJQdWJJdGVtcyJ9LDU1Njp7bjoiQnJ0QmVnaW5XZWJQdWJJdGVtIn0sNTU3OntuOiJCcnRFbmRXZWJQdWJJdGVtIn0sNTU4OntuOiJCcnRCZWdpblNYQ29uZEZtdCJ9LDU1OTp7''@;'; put 'put ''bjoiQnJ0RW5kU1hDb25kRm10In0sNTYwOntuOiJCcnRCZWdpblNYQ29uZEZtdHMifSw1NjE6e246IkJydEVuZFNYQ29uZEZtdHMifSw1NjI6e246IkJydEJrSGltIn0sNTY0OntuOiJCcnRDb2xvciJ9LDU2NTp7bjoiQnJ0QmVnaW5JbmRleGVkQ29sb3JzIn0sNTY2OntuOiJCcnRFbmRJbmRl''@;'; put 'put ''eGVkQ29sb3JzIn0sNTY5OntuOiJCcnRCZWdpbk1SVUNvbG9ycyJ9LDU3MDp7bjoiQnJ0RW5kTVJVQ29sb3JzIn0sNTcyOntuOiJCcnRNUlVDb2xvciJ9LDU3Mzp7bjoiQnJ0QmVnaW5EVmFscyJ9LDU3NDp7bjoiQnJ0RW5kRFZhbHMifSw1Nzc6e246IkJydFN1cE5hbWVTdGFydCJ9LDU3ODp7''@;'; put 'put ''bjoiQnJ0U3VwTmFtZVZhbHVlU3RhcnQifSw1Nzk6e246IkJydFN1cE5hbWVWYWx1ZUVuZCJ9LDU4MDp7bjoiQnJ0U3VwTmFtZU51bSJ9LDU4MTp7bjoiQnJ0U3VwTmFtZUVyciJ9LDU4Mjp7bjoiQnJ0U3VwTmFtZVN0In0sNTgzOntuOiJCcnRTdXBOYW1lTmlsIn0sNTg0OntuOiJCcnRTdXBO''@;'; put 'put ''YW1lQm9vbCJ9LDU4NTp7bjoiQnJ0U3VwTmFtZUZtbGEifSw1ODY6e246IkJydFN1cE5hbWVCaXRzIn0sNTg3OntuOiJCcnRTdXBOYW1lRW5kIn0sNTg4OntuOiJCcnRFbmRTdXBCb29rIn0sNTg5OntuOiJCcnRDZWxsU21hcnRUYWdQcm9wZXJ0eSJ9LDU5MDp7bjoiQnJ0QmVnaW5DZWxsU21h''@;'; put 'put ''cnRUYWcifSw1OTE6e246IkJydEVuZENlbGxTbWFydFRhZyJ9LDU5Mjp7bjoiQnJ0QmVnaW5DZWxsU21hcnRUYWdzIn0sNTkzOntuOiJCcnRFbmRDZWxsU21hcnRUYWdzIn0sNTk0OntuOiJCcnRCZWdpblNtYXJ0VGFncyJ9LDU5NTp7bjoiQnJ0RW5kU21hcnRUYWdzIn0sNTk2OntuOiJCcnRT''@;'; put 'put ''bWFydFRhZ1R5cGUifSw1OTc6e246IkJydEJlZ2luU21hcnRUYWdUeXBlcyJ9LDU5ODp7bjoiQnJ0RW5kU21hcnRUYWdUeXBlcyJ9LDU5OTp7bjoiQnJ0QmVnaW5TWEZpbHRlcnMifSw2MDA6e246IkJydEVuZFNYRmlsdGVycyJ9LDYwMTp7bjoiQnJ0QmVnaW5TWEZJTFRFUiJ9LDYwMjp7bjoi''@;'; put 'put ''QnJ0RW5kU1hGaWx0ZXIifSw2MDM6e246IkJydEJlZ2luRmlsbHMifSw2MDQ6e246IkJydEVuZEZpbGxzIn0sNjA1OntuOiJCcnRCZWdpbkNlbGxXYXRjaGVzIn0sNjA2OntuOiJCcnRFbmRDZWxsV2F0Y2hlcyJ9LDYwNzp7bjoiQnJ0Q2VsbFdhdGNoIn0sNjA4OntuOiJCcnRCZWdpbkNSRXJy''@;'; put 'put ''cyJ9LDYwOTp7bjoiQnJ0RW5kQ1JFcnJzIn0sNjEwOntuOiJCcnRDcmFzaFJlY0VyciJ9LDYxMTp7bjoiQnJ0QmVnaW5Gb250cyJ9LDYxMjp7bjoiQnJ0RW5kRm9udHMifSw2MTM6e246IkJydEJlZ2luQm9yZGVycyJ9LDYxNDp7bjoiQnJ0RW5kQm9yZGVycyJ9LDYxNTp7bjoiQnJ0QmVnaW5G''@;'; put 'put ''bXRzIn0sNjE2OntuOiJCcnRFbmRGbXRzIn0sNjE3OntuOiJCcnRCZWdpbkNlbGxYRnMifSw2MTg6e246IkJydEVuZENlbGxYRnMifSw2MTk6e246IkJydEJlZ2luU3R5bGVzIn0sNjIwOntuOiJCcnRFbmRTdHlsZXMifSw2MjU6e246IkJydEJpZ05hbWUifSw2MjY6e246IkJydEJlZ2luQ2Vs''@;'; put 'put ''bFN0eWxlWEZzIn0sNjI3OntuOiJCcnRFbmRDZWxsU3R5bGVYRnMifSw2Mjg6e246IkJydEJlZ2luQ29tbWVudHMifSw2Mjk6e246IkJydEVuZENvbW1lbnRzIn0sNjMwOntuOiJCcnRCZWdpbkNvbW1lbnRBdXRob3JzIn0sNjMxOntuOiJCcnRFbmRDb21tZW50QXV0aG9ycyJ9LDYzMjp7bjoi''@;'; put 'put ''QnJ0Q29tbWVudEF1dGhvciIsZjpkQn0sNjMzOntuOiJCcnRCZWdpbkNvbW1lbnRMaXN0In0sNjM0OntuOiJCcnRFbmRDb21tZW50TGlzdCJ9LDYzNTp7bjoiQnJ0QmVnaW5Db21tZW50IixmOmZ1bmN0aW9uIEw1KFMpe3ZhciBSPXt9O1IuaWF1dGhvcj1TLnJlYWRfc2hpZnQoNCk7dmFyIGs9''@;'; put 'put ''Z3UoUywxNik7cmV0dXJuIFIucmZ4PWsucyxSLnJlZj1YaShrLnMpLFMubCs9MTYsUn19LDYzNjp7bjoiQnJ0RW5kQ29tbWVudCJ9LDYzNzp7bjoiQnJ0Q29tbWVudFRleHQiLGY6Und9LDYzODp7bjoiQnJ0QmVnaW5PbGVPYmplY3RzIn0sNjM5OntuOiJCcnRPbGVPYmplY3QifSw2NDA6e246''@;'; put 'put ''IkJydEVuZE9sZU9iamVjdHMifSw2NDE6e246IkJydEJlZ2luU3hydWxlcyJ9LDY0Mjp7bjoiQnJ0RW5kU3hSdWxlcyJ9LDY0Mzp7bjoiQnJ0QmVnaW5BY3RpdmVYQ29udHJvbHMifSw2NDQ6e246IkJydEFjdGl2ZVgifSw2NDU6e246IkJydEVuZEFjdGl2ZVhDb250cm9scyJ9LDY0Njp7bjoi''@;'; put 'put ''QnJ0QmVnaW5QQ0RTRFRDRU1lbWJlcnNTb3J0QnkifSw2NDg6e246IkJydEJlZ2luQ2VsbElnbm9yZUVDcyJ9LDY0OTp7bjoiQnJ0Q2VsbElnbm9yZUVDIn0sNjUwOntuOiJCcnRFbmRDZWxsSWdub3JlRUNzIn0sNjUxOntuOiJCcnRDc1Byb3AiLGY6ZnVuY3Rpb24gdHooUyxSKXtyZXR1cm4g''@;'; put 'put ''Uy5sKz0xMCx7bmFtZTpwdShTKX19fSw2NTI6e246IkJydENzUGFnZVNldHVwIn0sNjUzOntuOiJCcnRCZWdpblVzZXJDc1ZpZXdzIn0sNjU0OntuOiJCcnRFbmRVc2VyQ3NWaWV3cyJ9LDY1NTp7bjoiQnJ0QmVnaW5Vc2VyQ3NWaWV3In0sNjU2OntuOiJCcnRFbmRVc2VyQ3NWaWV3In0sNjU3''@;'; put 'put ''OntuOiJCcnRCZWdpblBjZFNGQ0lFbnRyaWVzIn0sNjU4OntuOiJCcnRFbmRQQ0RTRkNJRW50cmllcyJ9LDY1OTp7bjoiQnJ0UENEU0ZDSUVudHJ5In0sNjYwOntuOiJCcnRCZWdpbkxpc3RQYXJ0cyJ9LDY2MTp7bjoiQnJ0TGlzdFBhcnQifSw2NjI6e246IkJydEVuZExpc3RQYXJ0cyJ9LDY2''@;'; put 'put ''Mzp7bjoiQnJ0U2hlZXRDYWxjUHJvcCJ9LDY2NDp7bjoiQnJ0QmVnaW5Gbkdyb3VwIn0sNjY1OntuOiJCcnRGbkdyb3VwIn0sNjY2OntuOiJCcnRFbmRGbkdyb3VwIn0sNjY3OntuOiJCcnRTdXBBZGRpbiJ9LDY2ODp7bjoiQnJ0U1hURE1QT3JkZXIifSw2Njk6e246IkJydENzUHJvdGVjdGlv''@;'; put 'put ''biJ9LDY3MTp7bjoiQnJ0QmVnaW5Xc1NvcnRNYXAifSw2NzI6e246IkJydEVuZFdzU29ydE1hcCJ9LDY3Mzp7bjoiQnJ0QmVnaW5SUlNvcnQifSw2NzQ6e246IkJydEVuZFJSU29ydCJ9LDY3NTp7bjoiQnJ0UlJTb3J0SXRlbSJ9LDY3Njp7bjoiQnJ0RmlsZVNoYXJpbmdJc28ifSw2Nzc6e246''@;'; put 'put ''IkJydEJvb2tQcm90ZWN0aW9uSXNvIn0sNjc4OntuOiJCcnRTaGVldFByb3RlY3Rpb25Jc28ifSw2Nzk6e246IkJydENzUHJvdGVjdGlvbklzbyJ9LDY4MDp7bjoiQnJ0UmFuZ2VQcm90ZWN0aW9uSXNvIn0sNjgxOntuOiJCcnREVmFsTGlzdCJ9LDEwMjQ6e246IkJydFJ3RGVzY2VudCJ9LDEw''@;'; put 'put ''MjU6e246IkJydEtub3duRm9udHMifSwxMDI2OntuOiJCcnRCZWdpblNYVHVwbGVTZXQifSwxMDI3OntuOiJCcnRFbmRTWFR1cGxlU2V0In0sMTAyODp7bjoiQnJ0QmVnaW5TWFR1cGxlU2V0SGVhZGVyIn0sMTAyOTp7bjoiQnJ0RW5kU1hUdXBsZVNldEhlYWRlciJ9LDEwMzA6e246IkJydFNY''@;'; put 'put ''VHVwbGVTZXRIZWFkZXJJdGVtIn0sMTAzMTp7bjoiQnJ0QmVnaW5TWFR1cGxlU2V0RGF0YSJ9LDEwMzI6e246IkJydEVuZFNYVHVwbGVTZXREYXRhIn0sMTAzMzp7bjoiQnJ0QmVnaW5TWFR1cGxlU2V0Um93In0sMTAzNDp7bjoiQnJ0RW5kU1hUdXBsZVNldFJvdyJ9LDEwMzU6e246IkJydFNY''@;'; put 'put ''VHVwbGVTZXRSb3dJdGVtIn0sMTAzNjp7bjoiQnJ0TmFtZUV4dCJ9LDEwMzc6e246IkJydFBDREgxNCJ9LDEwMzg6e246IkJydEJlZ2luUENEQ2FsY01lbTE0In0sMTAzOTp7bjoiQnJ0RW5kUENEQ2FsY01lbTE0In0sMTA0MDp7bjoiQnJ0U1hUSDE0In0sMTA0MTp7bjoiQnJ0QmVnaW5TcGFy''@;'; put 'put ''a2xpbmVHcm91cCJ9LDEwNDI6e246IkJydEVuZFNwYXJrbGluZUdyb3VwIn0sMTA0Mzp7bjoiQnJ0U3BhcmtsaW5lIn0sMTA0NDp7bjoiQnJ0U1hESTE0In0sMTA0NTp7bjoiQnJ0V3NGbXRJbmZvRXgxNCJ9LDEwNDY6e246IkJydEJlZ2luQ29uZGl0aW9uYWxGb3JtYXR0aW5nMTQifSwxMDQ3''@;'; put 'put ''OntuOiJCcnRFbmRDb25kaXRpb25hbEZvcm1hdHRpbmcxNCJ9LDEwNDg6e246IkJydEJlZ2luQ0ZSdWxlMTQifSwxMDQ5OntuOiJCcnRFbmRDRlJ1bGUxNCJ9LDEwNTA6e246IkJydENGVk8xNCJ9LDEwNTE6e246IkJydEJlZ2luRGF0YWJhcjE0In0sMTA1Mjp7bjoiQnJ0QmVnaW5JY29uU2V0''@;'; put 'put ''MTQifSwxMDUzOntuOiJCcnREVmFsMTQiLGY6ZnVuY3Rpb24gRFMoUyxSLGspe3ZhciBHPWZ1bmN0aW9uIGhuKFMsUixrKXt2YXIgRz1TLnJlYWRfc2hpZnQoNCksUT17fTtyZXR1cm4gMSZHJiYoUS5yZWZzPWZ1bmN0aW9uIHFuKFMpe2Zvcih2YXIgUj1TLnJlYWRfc2hpZnQoNCksaz1bXTtS''@;'; put 'put ''LS0gPjA7KWsucHVzaChyaShTKSk7cmV0dXJuIGt9KFMpKSwyJkcmJihRLnNxcmVmcz1mdW5jdGlvbiBSbyhTKXtmb3IodmFyIFI9Uy5yZWFkX3NoaWZ0KDQpLGs9W107Ui0tID4wOylrLnB1c2goTWEoUykpO3JldHVybiBrfShTKSksNCZHJiYoUS5mb3JtdWxhcz1mdW5jdGlvbiBmcyhTLFIs''@;'; put 'put ''ayl7Zm9yKHZhciBHPVMucmVhZF9zaGlmdCg0KSxRPVtdO0ctLSA+MDspUS5wdXNoKEh1KFMsMCxrKSk7cmV0dXJuIFF9KFMsMCxrKSksOCZHJiYoUS5yZWxJRD1mdW5jdGlvbiBudihTKXt2YXIgUj1TLnJlYWRfc2hpZnQoMik7cmV0dXJuIDA9PT1SPyIiOlMucmVhZF9zaGlmdChSLCJ1dGYx''@;'; put 'put ''NmxlIil9KFMpKSxRfShTLDAsayksUT1TLnJlYWRfc2hpZnQoNCksYWU9ZTAoUyksZ2U9ZTAoUykscGU9ZTAoUykseWU9ZTAoUyksUGU9KEcuZm9ybXVsYXN8fFtdKVswXSxOZT0oRy5mb3JtdWxhc3x8W10pWzFdLFllPTE1JlEsZXQ9e3Q6ekRbWWVdLHNxcmZ4Okcuc3FyZWZzWzBdLHM6W2Fl''@;'; put 'put ''LGdlLHBlLHllXX07cmV0dXJuIFBlJiYoZXQuZjE9UGUpLE5lJiYoZXQuZjI9TmUpLDA9PVllfHwzPT1ZZXx8Nz09WWV8fChldC5vcD1rU1tRPj4yMCYxNV0pLGV0fX0sMTA1NDp7bjoiQnJ0QmVnaW5EVmFsczE0In0sMTA1NTp7bjoiQnJ0Q29sb3IxNCJ9LDEwNTY6e246IkJydEJlZ2luU3Bh''@;'; put 'put ''cmtsaW5lcyJ9LDEwNTc6e246IkJydEVuZFNwYXJrbGluZXMifSwxMDU4OntuOiJCcnRCZWdpblNwYXJrbGluZUdyb3VwcyJ9LDEwNTk6e246IkJydEVuZFNwYXJrbGluZUdyb3VwcyJ9LDEwNjE6e246IkJydFNYVkQxNCJ9LDEwNjI6e246IkJydEJlZ2luU1hWaWV3MTQifSwxMDYzOntuOiJC''@;'; put 'put ''cnRFbmRTWFZpZXcxNCJ9LDEwNjQ6e246IkJydEJlZ2luU1hWaWV3MTYifSwxMDY1OntuOiJCcnRFbmRTWFZpZXcxNiJ9LDEwNjY6e246IkJydEJlZ2luUENEMTQifSwxMDY3OntuOiJCcnRFbmRQQ0QxNCJ9LDEwNjg6e246IkJydEJlZ2luRXh0Q29ubjE0In0sMTA2OTp7bjoiQnJ0RW5kRXh0''@;'; put 'put ''Q29ubjE0In0sMTA3MDp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZUlEcyJ9LDEwNzE6e246IkJydEVuZFNsaWNlckNhY2hlSURzIn0sMTA3Mjp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZUlEIn0sMTA3Mzp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVJRCJ9LDEwNzU6e246IkJydEJlZ2luU2xpY2VyQ2Fj''@;'; put 'put ''aGUifSwxMDc2OntuOiJCcnRFbmRTbGljZXJDYWNoZSJ9LDEwNzc6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVEZWYifSwxMDc4OntuOiJCcnRFbmRTbGljZXJDYWNoZURlZiJ9LDEwNzk6e246IkJydEJlZ2luU2xpY2Vyc0V4In0sMTA4MDp7bjoiQnJ0RW5kU2xpY2Vyc0V4In0sMTA4MTp7bjoi''@;'; put 'put ''QnJ0QmVnaW5TbGljZXJFeCJ9LDEwODI6e246IkJydEVuZFNsaWNlckV4In0sMTA4Mzp7bjoiQnJ0QmVnaW5TbGljZXIifSwxMDg0OntuOiJCcnRFbmRTbGljZXIifSwxMDg1OntuOiJCcnRTbGljZXJDYWNoZVBpdm90VGFibGVzIn0sMTA4Njp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZU9sYXBJ''@;'; put 'put ''bXBsIn0sMTA4Nzp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVPbGFwSW1wbCJ9LDEwODg6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVMZXZlbHNEYXRhIn0sMTA4OTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVMZXZlbHNEYXRhIn0sMTA5MDp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZUxldmVsRGF0YSJ9LDEw''@;'; put 'put ''OTE6e246IkJydEVuZFNsaWNlckNhY2hlTGV2ZWxEYXRhIn0sMTA5Mjp7bjoiQnJ0QmVnaW5TbGljZXJDYWNoZVNpUmFuZ2VzIn0sMTA5Mzp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVTaVJhbmdlcyJ9LDEwOTQ6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVTaVJhbmdlIn0sMTA5NTp7bjoiQnJ0RW5k''@;'; put 'put ''U2xpY2VyQ2FjaGVTaVJhbmdlIn0sMTA5Njp7bjoiQnJ0U2xpY2VyQ2FjaGVPbGFwSXRlbSJ9LDEwOTc6e246IkJydEJlZ2luU2xpY2VyQ2FjaGVTZWxlY3Rpb25zIn0sMTA5ODp7bjoiQnJ0U2xpY2VyQ2FjaGVTZWxlY3Rpb24ifSwxMDk5OntuOiJCcnRFbmRTbGljZXJDYWNoZVNlbGVjdGlv''@;'; put 'put ''bnMifSwxMTAwOntuOiJCcnRCZWdpblNsaWNlckNhY2hlTmF0aXZlIn0sMTEwMTp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVOYXRpdmUifSwxMTAyOntuOiJCcnRTbGljZXJDYWNoZU5hdGl2ZUl0ZW0ifSwxMTAzOntuOiJCcnRSYW5nZVByb3RlY3Rpb24xNCJ9LDExMDQ6e246IkJydFJhbmdlUHJv''@;'; put 'put ''dGVjdGlvbklzbzE0In0sMTEwNTp7bjoiQnJ0Q2VsbElnbm9yZUVDMTQifSwxMTExOntuOiJCcnRMaXN0MTQifSwxMTEyOntuOiJCcnRDRkljb24ifSwxMTEzOntuOiJCcnRCZWdpblNsaWNlckNhY2hlc1Bpdm90Q2FjaGVJRHMifSwxMTE0OntuOiJCcnRFbmRTbGljZXJDYWNoZXNQaXZvdENh''@;'; put 'put ''Y2hlSURzIn0sMTExNTp7bjoiQnJ0QmVnaW5TbGljZXJzIn0sMTExNjp7bjoiQnJ0RW5kU2xpY2VycyJ9LDExMTc6e246IkJydFdiUHJvcDE0In0sMTExODp7bjoiQnJ0QmVnaW5TWEVkaXQifSwxMTE5OntuOiJCcnRFbmRTWEVkaXQifSwxMTIwOntuOiJCcnRCZWdpblNYRWRpdHMifSwxMTIx''@;'; put 'put ''OntuOiJCcnRFbmRTWEVkaXRzIn0sMTEyMjp7bjoiQnJ0QmVnaW5TWENoYW5nZSJ9LDExMjM6e246IkJydEVuZFNYQ2hhbmdlIn0sMTEyNDp7bjoiQnJ0QmVnaW5TWENoYW5nZXMifSwxMTI1OntuOiJCcnRFbmRTWENoYW5nZXMifSwxMTI2OntuOiJCcnRTWFR1cGxlSXRlbXMifSwxMTI4Ontu''@;'; put 'put ''OiJCcnRCZWdpblNsaWNlclN0eWxlIn0sMTEyOTp7bjoiQnJ0RW5kU2xpY2VyU3R5bGUifSwxMTMwOntuOiJCcnRTbGljZXJTdHlsZUVsZW1lbnQifSwxMTMxOntuOiJCcnRCZWdpblN0eWxlU2hlZXRFeHQxNCJ9LDExMzI6e246IkJydEVuZFN0eWxlU2hlZXRFeHQxNCJ9LDExMzM6e246IkJy''@;'; put 'put ''dEJlZ2luU2xpY2VyQ2FjaGVzUGl2b3RDYWNoZUlEIn0sMTEzNDp7bjoiQnJ0RW5kU2xpY2VyQ2FjaGVzUGl2b3RDYWNoZUlEIn0sMTEzNTp7bjoiQnJ0QmVnaW5Db25kaXRpb25hbEZvcm1hdHRpbmdzIn0sMTEzNjp7bjoiQnJ0RW5kQ29uZGl0aW9uYWxGb3JtYXR0aW5ncyJ9LDExMzc6e246''@;'; put 'put ''IkJydEJlZ2luUENEQ2FsY01lbUV4dCJ9LDExMzg6e246IkJydEVuZFBDRENhbGNNZW1FeHQifSwxMTM5OntuOiJCcnRCZWdpblBDRENhbGNNZW1zRXh0In0sMTE0MDp7bjoiQnJ0RW5kUENEQ2FsY01lbXNFeHQifSwxMTQxOntuOiJCcnRQQ0RGaWVsZDE0In0sMTE0Mjp7bjoiQnJ0QmVnaW5T''@;'; put 'put ''bGljZXJTdHlsZXMifSwxMTQzOntuOiJCcnRFbmRTbGljZXJTdHlsZXMifSwxMTQ0OntuOiJCcnRCZWdpblNsaWNlclN0eWxlRWxlbWVudHMifSwxMTQ1OntuOiJCcnRFbmRTbGljZXJTdHlsZUVsZW1lbnRzIn0sMTE0Njp7bjoiQnJ0Q0ZSdWxlRXh0In0sMTE0Nzp7bjoiQnJ0QmVnaW5TWENv''@;'; put 'put ''bmRGbXQxNCJ9LDExNDg6e246IkJydEVuZFNYQ29uZEZtdDE0In0sMTE0OTp7bjoiQnJ0QmVnaW5TWENvbmRGbXRzMTQifSwxMTUwOntuOiJCcnRFbmRTWENvbmRGbXRzMTQifSwxMTUyOntuOiJCcnRCZWdpblNvcnRDb25kMTQifSwxMTUzOntuOiJCcnRFbmRTb3J0Q29uZDE0In0sMTE1NDp7''@;'; put 'put ''bjoiQnJ0RW5kRFZhbHMxNCJ9LDExNTU6e246IkJydEVuZEljb25TZXQxNCJ9LDExNTY6e246IkJydEVuZERhdGFiYXIxNCJ9LDExNTc6e246IkJydEJlZ2luQ29sb3JTY2FsZTE0In0sMTE1ODp7bjoiQnJ0RW5kQ29sb3JTY2FsZTE0In0sMTE1OTp7bjoiQnJ0QmVnaW5TeHJ1bGVzMTQifSwx''@;'; put 'put ''MTYwOntuOiJCcnRFbmRTeHJ1bGVzMTQifSwxMTYxOntuOiJCcnRCZWdpblBSdWxlMTQifSwxMTYyOntuOiJCcnRFbmRQUnVsZTE0In0sMTE2Mzp7bjoiQnJ0QmVnaW5QUkZpbHRlcnMxNCJ9LDExNjQ6e246IkJydEVuZFBSRmlsdGVyczE0In0sMTE2NTp7bjoiQnJ0QmVnaW5QUkZpbHRlcjE0''@;'; put 'put ''In0sMTE2Njp7bjoiQnJ0RW5kUFJGaWx0ZXIxNCJ9LDExNjc6e246IkJydEJlZ2luUFJGSXRlbTE0In0sMTE2ODp7bjoiQnJ0RW5kUFJGSXRlbTE0In0sMTE2OTp7bjoiQnJ0QmVnaW5DZWxsSWdub3JlRUNzMTQifSwxMTcwOntuOiJCcnRFbmRDZWxsSWdub3JlRUNzMTQifSwxMTcxOntuOiJC''@;'; put 'put ''cnREeGYxNCJ9LDExNzI6e246IkJydEJlZ2luRHhGMTRzIn0sMTE3Mzp7bjoiQnJ0RW5kRHhmMTRzIn0sMTE3Nzp7bjoiQnJ0RmlsdGVyMTQifSwxMTc4OntuOiJCcnRCZWdpbkN1c3RvbUZpbHRlcnMxNCJ9LDExODA6e246IkJydEN1c3RvbUZpbHRlcjE0In0sMTE4MTp7bjoiQnJ0SWNvbkZp''@;'; put 'put ''bHRlcjE0In0sMTE4Mjp7bjoiQnJ0UGl2b3RDYWNoZUNvbm5lY3Rpb25OYW1lIn0sMjA0ODp7bjoiQnJ0QmVnaW5EZWNvdXBsZWRQaXZvdENhY2hlSURzIn0sMjA0OTp7bjoiQnJ0RW5kRGVjb3VwbGVkUGl2b3RDYWNoZUlEcyJ9LDIwNTA6e246IkJydERlY291cGxlZFBpdm90Q2FjaGVJRCJ9''@;'; put 'put ''LDIwNTE6e246IkJydEJlZ2luUGl2b3RUYWJsZVJlZnMifSwyMDUyOntuOiJCcnRFbmRQaXZvdFRhYmxlUmVmcyJ9LDIwNTM6e246IkJydFBpdm90VGFibGVSZWYifSwyMDU0OntuOiJCcnRTbGljZXJDYWNoZUJvb2tQaXZvdFRhYmxlcyJ9LDIwNTU6e246IkJydEJlZ2luU3h2Y2VsbHMifSwy''@;'; put 'put ''MDU2OntuOiJCcnRFbmRTeHZjZWxscyJ9LDIwNTc6e246IkJydEJlZ2luU3hSb3cifSwyMDU4OntuOiJCcnRFbmRTeFJvdyJ9LDIwNjA6e246IkJydFBjZENhbGNNZW0xNSJ9LDIwNjc6e246IkJydFFzaTE1In0sMjA2ODp7bjoiQnJ0QmVnaW5XZWJFeHRlbnNpb25zIn0sMjA2OTp7bjoiQnJ0''@;'; put 'put ''RW5kV2ViRXh0ZW5zaW9ucyJ9LDIwNzA6e246IkJydFdlYkV4dGVuc2lvbiJ9LDIwNzE6e246IkJydEFic1BhdGgxNSJ9LDIwNzI6e246IkJydEJlZ2luUGl2b3RUYWJsZVVJU2V0dGluZ3MifSwyMDczOntuOiJCcnRFbmRQaXZvdFRhYmxlVUlTZXR0aW5ncyJ9LDIwNzU6e246IkJydFRhYmxl''@;'; put 'put ''U2xpY2VyQ2FjaGVJRHMifSwyMDc2OntuOiJCcnRUYWJsZVNsaWNlckNhY2hlSUQifSwyMDc3OntuOiJCcnRCZWdpblRhYmxlU2xpY2VyQ2FjaGUifSwyMDc4OntuOiJCcnRFbmRUYWJsZVNsaWNlckNhY2hlIn0sMjA3OTp7bjoiQnJ0U3hGaWx0ZXIxNSJ9LDIwODA6e246IkJydEJlZ2luVGlt''@;'; put 'put ''ZWxpbmVDYWNoZVBpdm90Q2FjaGVJRHMifSwyMDgxOntuOiJCcnRFbmRUaW1lbGluZUNhY2hlUGl2b3RDYWNoZUlEcyJ9LDIwODI6e246IkJydFRpbWVsaW5lQ2FjaGVQaXZvdENhY2hlSUQifSwyMDgzOntuOiJCcnRCZWdpblRpbWVsaW5lQ2FjaGVJRHMifSwyMDg0OntuOiJCcnRFbmRUaW1l''@;'; put 'put ''bGluZUNhY2hlSURzIn0sMjA4NTp7bjoiQnJ0QmVnaW5UaW1lbGluZUNhY2hlSUQifSwyMDg2OntuOiJCcnRFbmRUaW1lbGluZUNhY2hlSUQifSwyMDg3OntuOiJCcnRCZWdpblRpbWVsaW5lc0V4In0sMjA4ODp7bjoiQnJ0RW5kVGltZWxpbmVzRXgifSwyMDg5OntuOiJCcnRCZWdpblRpbWVs''@;'; put 'put ''aW5lRXgifSwyMDkwOntuOiJCcnRFbmRUaW1lbGluZUV4In0sMjA5MTp7bjoiQnJ0V29ya0Jvb2tQcjE1In0sMjA5Mjp7bjoiQnJ0UENESDE1In0sMjA5Mzp7bjoiQnJ0QmVnaW5UaW1lbGluZVN0eWxlIn0sMjA5NDp7bjoiQnJ0RW5kVGltZWxpbmVTdHlsZSJ9LDIwOTU6e246IkJydFRpbWVs''@;'; put 'put ''aW5lU3R5bGVFbGVtZW50In0sMjA5Njp7bjoiQnJ0QmVnaW5UaW1lbGluZVN0eWxlc2hlZXRFeHQxNSJ9LDIwOTc6e246IkJydEVuZFRpbWVsaW5lU3R5bGVzaGVldEV4dDE1In0sMjA5ODp7bjoiQnJ0QmVnaW5UaW1lbGluZVN0eWxlcyJ9LDIwOTk6e246IkJydEVuZFRpbWVsaW5lU3R5bGVz''@;'; put 'put ''In0sMjEwMDp7bjoiQnJ0QmVnaW5UaW1lbGluZVN0eWxlRWxlbWVudHMifSwyMTAxOntuOiJCcnRFbmRUaW1lbGluZVN0eWxlRWxlbWVudHMifSwyMTAyOntuOiJCcnREeGYxNSJ9LDIxMDM6e246IkJydEJlZ2luRHhmczE1In0sMjEwNDp7bjoiYnJ0RW5kRHhmczE1In0sMjEwNTp7bjoiQnJ0''@;'; put 'put ''U2xpY2VyQ2FjaGVIaWRlSXRlbXNXaXRoTm9EYXRhIn0sMjEwNjp7bjoiQnJ0QmVnaW5JdGVtVW5pcXVlTmFtZXMifSwyMTA3OntuOiJCcnRFbmRJdGVtVW5pcXVlTmFtZXMifSwyMTA4OntuOiJCcnRJdGVtVW5pcXVlTmFtZSJ9LDIxMDk6e246IkJydEJlZ2luRXh0Q29ubjE1In0sMjExMDp7''@;'; put 'put ''bjoiQnJ0RW5kRXh0Q29ubjE1In0sMjExMTp7bjoiQnJ0QmVnaW5PbGVkYlByMTUifSwyMTEyOntuOiJCcnRFbmRPbGVkYlByMTUifSwyMTEzOntuOiJCcnRCZWdpbkRhdGFGZWVkUHIxNSJ9LDIxMTQ6e246IkJydEVuZERhdGFGZWVkUHIxNSJ9LDIxMTU6e246IkJydFRleHRQcjE1In0sMjEx''@;'; put 'put ''Njp7bjoiQnJ0UmFuZ2VQcjE1In0sMjExNzp7bjoiQnJ0RGJDb21tYW5kMTUifSwyMTE4OntuOiJCcnRCZWdpbkRiVGFibGVzMTUifSwyMTE5OntuOiJCcnRFbmREYlRhYmxlczE1In0sMjEyMDp7bjoiQnJ0RGJUYWJsZTE1In0sMjEyMTp7bjoiQnJ0QmVnaW5EYXRhTW9kZWwifSwyMTIyOntu''@;'; put 'put ''OiJCcnRFbmREYXRhTW9kZWwifSwyMTIzOntuOiJCcnRCZWdpbk1vZGVsVGFibGVzIn0sMjEyNDp7bjoiQnJ0RW5kTW9kZWxUYWJsZXMifSwyMTI1OntuOiJCcnRNb2RlbFRhYmxlIn0sMjEyNjp7bjoiQnJ0QmVnaW5Nb2RlbFJlbGF0aW9uc2hpcHMifSwyMTI3OntuOiJCcnRFbmRNb2RlbFJl''@;'; put 'put ''bGF0aW9uc2hpcHMifSwyMTI4OntuOiJCcnRNb2RlbFJlbGF0aW9uc2hpcCJ9LDIxMjk6e246IkJydEJlZ2luRUNUeHRXaXoxNSJ9LDIxMzA6e246IkJydEVuZEVDVHh0V2l6MTUifSwyMTMxOntuOiJCcnRCZWdpbkVDVFdGbGRJbmZvTHN0MTUifSwyMTMyOntuOiJCcnRFbmRFQ1RXRmxkSW5m''@;'; put 'put ''b0xzdDE1In0sMjEzMzp7bjoiQnJ0QmVnaW5FQ1RXRmxkSW5mbzE1In0sMjEzNDp7bjoiQnJ0RmllbGRMaXN0QWN0aXZlSXRlbSJ9LDIxMzU6e246IkJydFBpdm90Q2FjaGVJZFZlcnNpb24ifSwyMTM2OntuOiJCcnRTWERJMTUifSwyMTM3OntuOiJCcnRCZWdpbk1vZGVsVGltZUdyb3VwaW5n''@;'; put 'put ''cyJ9LDIxMzg6e246IkJydEVuZE1vZGVsVGltZUdyb3VwaW5ncyJ9LDIxMzk6e246IkJydEJlZ2luTW9kZWxUaW1lR3JvdXBpbmcifSwyMTQwOntuOiJCcnRFbmRNb2RlbFRpbWVHcm91cGluZyJ9LDIxNDE6e246IkJydE1vZGVsVGltZUdyb3VwaW5nQ2FsY0NvbCJ9LDMwNzI6e246IkJydFVp''@;'; put 'put ''ZCJ9LDMwNzM6e246IkJydFJldmlzaW9uUHRyIn0sNTA5NTp7bjoiQnJ0QmVnaW5DYWxjRmVhdHVyZXMifSw1MDk2OntuOiJCcnRFbmRDYWxjRmVhdHVyZXMifSw1MDk3OntuOiJCcnRDYWxjRmVhdHVyZSJ9LDY1NTM1OntuOiIifX0sVHo9SWUoSTgsIm4iKTtUei5CcnRGUlRBcmNoSUQkPTE2''@;'; put 'put ''O3ZhciAkUz17Njp7bjoiRm9ybXVsYSIsZjpKQ30sMTA6e246IkVPRiIsZjpKaH0sMTI6e246IkNhbGNDb3VudCIsZjp4Y30sMTM6e246IkNhbGNNb2RlIixmOnhjfSwxNDp7bjoiQ2FsY1ByZWNpc2lvbiIsZjpkYX0sMTU6e246IkNhbGNSZWZNb2RlIixmOmRhfSwxNjp7bjoiQ2FsY0RlbHRh''@;'; put 'put ''IixmOkxsfSwxNzp7bjoiQ2FsY0l0ZXIiLGY6ZGF9LDE4OntuOiJQcm90ZWN0IixmOmRhfSwxOTp7bjoiUGFzc3dvcmQiLGY6eGN9LDIwOntuOiJIZWFkZXIiLGY6WkF9LDIxOntuOiJGb290ZXIiLGY6WkF9LDIzOntuOiJFeHRlcm5TaGVldCIsZjp3dn0sMjQ6e246IkxibCIsZjplQ30sMjU6''@;'; put 'put ''e246IldpblByb3RlY3QiLGY6ZGF9LDI2OntuOiJWZXJ0aWNhbFBhZ2VCcmVha3MifSwyNzp7bjoiSG9yaXpvbnRhbFBhZ2VCcmVha3MifSwyODp7bjoiTm90ZSIsZjpmdW5jdGlvbiBXQShTLFIsayl7cmV0dXJuIGZ1bmN0aW9uIENhKFMsUixrKXtpZighKGsuYmlmZjw4KSl7dmFyIEc9Uy5y''@;'; put 'put ''ZWFkX3NoaWZ0KDIpLFE9Uy5yZWFkX3NoaWZ0KDIpLGFlPVMucmVhZF9zaGlmdCgyKSxnZT1TLnJlYWRfc2hpZnQoMikscGU9SjAoUywwLGspO3JldHVybiBrLmJpZmY8OCYmUy5yZWFkX3NoaWZ0KDEpLFt7cjpHLGM6UX0scGUsZ2UsYWVdfX0oUywwLGspfX0sMjk6e246IlNlbGVjdGlvbiIs''@;'; put 'put ''ZjpmdW5jdGlvbiB3ZihTLFIsayl7cmV0dXJuIGsmJmsuYmlmZjw1PyhTLmwrPVIse2NlbGw6e3I6MCxjOjB9fSk6KFMucmVhZF9zaGlmdCgxKSx7Y2VsbDpYaSh7cjpTLnJlYWRfc2hpZnQoMiksYzpTLnJlYWRfc2hpZnQoMil9KX0pfX0sMzQ6e246IkRhdGUxOTA0IixmOmRhfSwzNTp7bjoi''@;'; put 'put ''RXh0ZXJuTmFtZSIsZjpRd30sMzg6e246IkxlZnRNYXJnaW4iLGY6TGx9LDM5OntuOiJSaWdodE1hcmdpbiIsZjpMbH0sNDA6e246IlRvcE1hcmdpbiIsZjpMbH0sNDE6e246IkJvdHRvbU1hcmdpbiIsZjpMbH0sNDI6e246IlByaW50Um93Q29sIixmOmRhfSw0Mzp7bjoiUHJpbnRHcmlkIixm''@;'; put 'put ''OmRhfSw0Nzp7bjoiRmlsZVBhc3MiLGY6ZnVuY3Rpb24gcEMoUyxSLGspe2lmKGsuZW5jKXJldHVybiBrLmVuYzt2YXIgRz17VHlwZTprLmJpZmY+PTg/Uy5yZWFkX3NoaWZ0KDIpOjB9O3JldHVybiBHLlR5cGU/ZnVuY3Rpb24gUnYoUyxSLGssRyl7dmFyIFE9R3x8e307aWYoUS5JbmZvPVMu''@;'; put 'put ''cmVhZF9zaGlmdCgyKSxTLmwtPTIsMT09PVEuSW5mbyl7aWYoUS5EYXRhPWZ1bmN0aW9uIFp0ZShTKXt2YXIgUj17fSxrPVIuRW5jcnlwdGlvblZlcnNpb25JbmZvPVAxKFMsNCk7aWYoMSE9ay5NYWpvcnx8MSE9ay5NaW5vcil0aHJvdyJ1bnJlY29nbml6ZWQgdmVyc2lvbiBjb2RlICIray5N''@;'; put 'put ''YWpvcisiIDogIitrLk1pbm9yO3JldHVybiBSLlNhbHQ9Uy5yZWFkX3NoaWZ0KDE2KSxSLkVuY3J5cHRlZFZlcmlmaWVyPVMucmVhZF9zaGlmdCgxNiksUi5FbmNyeXB0ZWRWZXJpZmllckhhc2g9Uy5yZWFkX3NoaWZ0KDE2KSxSfShTKSxrLnBhc3N3b3JkJiZ0eXBlb2YgWjQ8InUiKXt2YXIg''@;'; put 'put ''YWU9WjQoay5wYXNzd29yZCxRLkRhdGEuU2FsdCwiMDAwMDAwMDAiKSxnZT1TZShRLkRhdGEuRW5jcnlwdGVkVmVyaWZpZXIrUS5EYXRhLkVuY3J5cHRlZFZlcmlmaWVySGFzaCwiaGV4IikscGU9JGwucmM0KFNlKGFlLCJoZXgiKS50b1N0cmluZygiYmluYXJ5IiksZ2UpO0cudmFsaWQ9JGwu''@;'; put 'put ''bWQ1KHBlLnNsaWNlKDAsMTYpKT09QnVmZmVyLmZyb20ocGUuc2xpY2UoMTYpKS50b1N0cmluZygiaGV4IiksUS5EYXRhLktleT1hZSxHLmluc2l0dT1mdW5jdGlvbiBCeihTLFIpe3ZhciBrPW5ldyBBcnJheSgyNTYpLEc9MCxRPTAsYWU9MCxnZT0wO2Z1bmN0aW9uIHBlKGV0KXtmb3IoRz0w''@;'; put 'put ''LFE9MCxhZT0wLGdlPTAsUT0wOzI1NiE9UTsrK1Epa1tRXT1RO2ZvcihhZT0wLFE9MDsyNTYhPVE7KytRKXt0cnl7YWU9YWUra1tRXStldFtRJWV0Lmxlbmd0aF0uY2hhckNvZGVBdCgwKSYyNTV9Y2F0Y2godXQpe3Rocm93IGNvbnNvbGUubG9nKFEsZXRbUSVldC5sZW5ndGhdKSx1dH1nZT1r''@;'; put 'put ''W1FdLGtbUV09a1thZV0sa1thZV09Z2V9UT1hZT0wfWZ1bmN0aW9uIHllKGV0KXt2YXIgdXQ9VihldC5sZW5ndGgpO2ZvcihHPTA7RyE9ZXQubGVuZ3RoOysrRylnZT1rW1E9USsxJjI1NV0sa1tRXT1rW2FlPShhZStrW1FdKSUyNTZdLGtbYWVdPWdlLHV0W0ddPWV0W0ddXmtba1tRXStrW2Fl''@;'; put 'put ''XSYyNTVdO3JldHVybiBCdWZmZXIuZnJvbSh1dCl9dmFyIFBlPVMuS2V5LE5lPTA7cGUoU2UoUGUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSk7dmFyIFllPTA7cmV0dXJuIGZ1bmN0aW9uKGV0KXtpZihZZStldC5sZW5ndGg8MTAyNClyZXR1cm4gWWUrPWV0Lmxlbmd0aCx5ZShldCk7dmFy''@;'; put 'put ''IG90PTAsYnQ9U2UoZXQuc2xpY2Uob3Qsb3QrKEV0PTEwMjQtWWUpKSk7b3QrPUV0LFllPTA7dmFyIEJ0PXllKGJ0KTtmb3Iob3Q9PWV0Lmxlbmd0aCYmKCsrTmUsUGU9WjQoUixTLlNhbHQsTzgoTmUpKSxwZShTZShQZSwiaGV4IikudG9TdHJpbmcoImJpbmFyeSIpKSk7b3Q8ZXQubGVuZ3Ro''@;'; put 'put ''Oyl7KytOZSxQZT1aNChSLFMuU2FsdCxPOChOZSkpLHBlKEJ1ZmZlci5mcm9tKFBlLCJoZXgiKS50b1N0cmluZygiYmluYXJ5IikpO3ZhciBFdD1NYXRoLm1pbigxMDI0LGV0Lmxlbmd0aC1vdCk7YnQ9U2UoZXQuc2xpY2Uob3Qsb3QrRXQpKSxvdCs9RXQsWWU9RXQsQnQ9QnVmZmVyLmNvbmNh''@;'; put 'put ''dChbQnQseWUoYnQpXSl9cmV0dXJuIEJ0fX0oUS5EYXRhLGsucGFzc3dvcmQpfX1lbHNlIGlmKFEuRGF0YT1mdW5jdGlvbiBEdihTLFIpe3ZhciBrPXt9LEc9ay5FbmNyeXB0aW9uVmVyc2lvbkluZm89UDEoUyw0KTtpZihSLT00LDIhPUcuTWlub3IpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29n''@;'; put 'put ''bml6ZWQgbWlub3IgdmVyc2lvbiBjb2RlOiAiK0cuTWlub3IpO2lmKEcuTWFqb3I+NHx8Ry5NYWpvcjwyKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIG1ham9yIHZlcnNpb24gY29kZTogIitHLk1ham9yKTtrLkZsYWdzPVMucmVhZF9zaGlmdCg0KSxSLT00O3ZhciBRPVMucmVhZF9z''@;'; put 'put ''aGlmdCg0KTtyZXR1cm4gUi09NCxrLkVuY3J5cHRpb25IZWFkZXI9d1YoUyxRKSxrLkVuY3J5cHRpb25WZXJpZmllcj1rdihTLFItPVEpLGt9KFMsUiksUS5EYXRhJiZRLkRhdGEuRW5jcnlwdGlvbkhlYWRlciYmMjY2MjU9PT1RLkRhdGEuRW5jcnlwdGlvbkhlYWRlci5BbGdJRCYmay5wYXNz''@;'; put 'put ''d29yZCYmdHlwZW9mIFc0PCJ1Iil7dmFyIHllPVc0KGsucGFzc3dvcmQsUS5EYXRhLkVuY3J5cHRpb25WZXJpZmllci5TYWx0LnRvU3RyaW5nKCJoZXgiKSwiMDAwMDAwMDAiKSxQZT1RLkRhdGEuRW5jcnlwdGlvbkhlYWRlci5LZXlTaXplPj4+Mzs1PT1QZXx8UGU8eWUubGVuZ3RoJiYoeWU9''@;'; put 'put ''eWUuc2xpY2UoMCxQZSkpO3ZhciBOZT1TZShRLkRhdGEuRW5jcnlwdGlvblZlcmlmaWVyLlZlcmlmaWVyLnRvU3RyaW5nKCJoZXgiKStRLkRhdGEuRW5jcnlwdGlvblZlcmlmaWVyLlZlcmlmaWVySGFzaC50b1N0cmluZygiaGV4IiksImhleCIpLFllPSRsLnJjNCh5ZS50b1N0cmluZygiYmlu''@;'; put 'put ''YXJ5IiksTmUpO0cudmFsaWQ9ZmMoWWUuc2xpY2UoMCxQZSksIlNIQTEiKS50b1N0cmluZygiaGV4Iik9PVllLnNsaWNlKFBlKS50b1N0cmluZygiaGV4IiksUS5EYXRhLktleT15ZSxHLnZhbGlkJiYoRy5pbnNpdHU9ZnVuY3Rpb24gWm5lKFMsUil7dmFyIGs9bmV3IEFycmF5KDI1NiksRz0w''@;'; put 'put ''LFE9MCxhZT0wLGdlPTAscGU9Uy5FbmNyeXB0aW9uSGVhZGVyLktleVNpemU+Pj4zO2Z1bmN0aW9uIHllKHV0KXtmb3IodXQ9QnVmZmVyLmZyb20odXQuc2xpY2UoMCxwZSkpLEc9MCxRPTAsYWU9MCxnZT0wLFE9MDsyNTYhPVE7KytRKWtbUV09UTtmb3IoYWU9MCxRPTA7MjU2IT1ROysrUSl7''@;'; put 'put ''dmFyIEV0PXV0W1EldXQubGVuZ3RoXTthZT1hZStrW1FdKygic3RyaW5nIj09dHlwZW9mIEV0P0V0LmNoYXJDb2RlQXQoMCk6RXQpJjI1NSxnZT1rW1FdLGtbUV09a1thZV0sa1thZV09Z2V9UT1hZT0wfWZ1bmN0aW9uIFBlKHV0KXt2YXIgRXQ9Vih1dC5sZW5ndGgpO2ZvcihHPTA7RyE9dXQu''@;'; put 'put ''bGVuZ3RoOysrRylnZT1rW1E9USsxJjI1NV0sa1tRXT1rW2FlPShhZStrW1FdKSUyNTZdLGtbYWVdPWdlLEV0W0ddPXV0W0ddXmtba1tRXStrW2FlXSYyNTVdO3JldHVybiBCdWZmZXIuZnJvbShFdCl9dmFyIE5lPVMuS2V5LFllPTA7eWUoU2UoTmUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnki''@;'; put 'put ''KSk7dmFyIGV0PTA7cmV0dXJuIGZ1bmN0aW9uKHV0KXtpZihldCt1dC5sZW5ndGg8MTAyNClyZXR1cm4gZXQrPXV0Lmxlbmd0aCxQZSh1dCk7dmFyIG90PTEwMjQtZXQsYnQ9MCxCdD1CdWZmZXIuZnJvbSh1dC5zbGljZShidCxidCtvdCkpO2J0Kz1vdCxldD0wO3ZhciBrdD1QZShCdCk7Zm9y''@;'; put 'put ''KGJ0PT11dC5sZW5ndGgmJigrK1llLE5lPVc0KFIsUy5FbmNyeXB0aW9uVmVyaWZpZXIuU2FsdCxPOChZZSkpLHllKEJ1ZmZlci5mcm9tKE5lLCJoZXgiKS50b1N0cmluZygiYmluYXJ5IikpKTtidDx1dC5sZW5ndGg7KSsrWWUsTmU9VzQoUixTLkVuY3J5cHRpb25WZXJpZmllci5TYWx0LE84''@;'; put 'put ''KFllKSkseWUoQnVmZmVyLmZyb20oTmUsImhleCIpLnRvU3RyaW5nKCJiaW5hcnkiKSksb3Q9TWF0aC5taW4oMTAyNCx1dC5sZW5ndGgtYnQpLEJ0PUJ1ZmZlci5mcm9tKHV0LnNsaWNlKGJ0LGJ0K290KSksYnQrPW90LG90PDEwMjQmJihldD1vdCksa3Q9QnVmZmVyLmNvbmNhdChba3QsUGUo''@;'; put 'put ''QnQpXSk7cmV0dXJuIGt0fX0oUS5EYXRhLGsucGFzc3dvcmQpKX1yZXR1cm4gUX0oUyxSLTIsayxHKTpmdW5jdGlvbiBNVihTLFIsayxHKXt2YXIgUT17a2V5OnhjKFMpLHZlcmlmaWNhdGlvbkJ5dGVzOnhjKFMpfTtrLnBhc3N3b3JkJiYoUS52ZXJpZmllcj1JdihrLnBhc3N3b3JkKSksRy52''@;'; put 'put ''YWxpZD1RLnZlcmlmaWNhdGlvbkJ5dGVzPT09US52ZXJpZmllcixHLnZhbGlkJiYoRy5pbnNpdHU9ZnVuY3Rpb24oUyxSKXt2YXIgaz1SfHwwLEc9ZkMoUyk7cmV0dXJuIGZ1bmN0aW9uKFEpe3ZhciBhZT1mdW5jdGlvbihTLFIsayxHLFEpe3ZhciBhZSxnZTtmb3IoUXx8KFE9UiksR3x8KEc9''@;'; put 'put ''ZkMoIiIpKSxhZT0wO2FlIT1SLmxlbmd0aDsrK2FlKWdlPTI1NSYoKGdlPVJbYWVdKT4+NXxnZTw8MyksUVthZV09Z2VePUdba10saz1rKzEmMTU7cmV0dXJuW1EsayxHXX0oMCxRLGssRyk7cmV0dXJuIGs9YWVbMV0sYWVbMF19fShrLnBhc3N3b3JkLDApKX0oUywwLGssRyksR319LDQ5Ontu''@;'; put 'put ''OiJGb250IixmOmZ1bmN0aW9uIFZBKFMsUixrKXt2YXIgRz17c3o6Uy5yZWFkX3NoaWZ0KDIpLzIwfSxRPUx3KFMpO1EuZkJvbGQmJihHLmJvbGQ9MSksUS5mSXRhbGljJiYoRy5pdGFsaWM9MSksUS5mVW5kZXJsaW5lJiYoRy51bmRlcmxpbmU9MSksUS5mQ29uZGVuc2UmJihHLmNvbmRlbnNl''@;'; put 'put ''PTEpLFEuZkV4dGVuZCYmKEcuZXh0ZW5kPTEpLFEuZlNoYWRvdyYmKEcuc2hhZG93PTEpLFEuZk91dGxpbmUmJihHLm91dGxpbmU9MSksUS5mU3RyaWtlb3V0JiYoRy5zdHJpa2U9MSk7dmFyIGFlPWsmJmsuYmlmZnx8ODtpZigyIT1hZSYmKEcuaWN2PVMucmVhZF9zaGlmdCgyKSwzIT1hZSYm''@;'; put 'put ''NCE9YWUpKXtzd2l0Y2goNzAwPT09Uy5yZWFkX3NoaWZ0KDIpJiYoRy5ib2xkPTEpLFMucmVhZF9zaGlmdCgyKSl7Y2FzZSAxOkcudmFsaWduPSJzdXBlciI7YnJlYWs7Y2FzZSAyOkcudmFsaWduPSJzdWIifXZhciBwZT1TLnJlYWRfc2hpZnQoMSk7MCE9cGUmJihHLnVuZGVybGluZT1wZSk7''@;'; put 'put ''dmFyIHllPVMucmVhZF9zaGlmdCgxKTt5ZT4wJiYoRy5mYW1pbHk9eWUpO3ZhciBQZT1TLnJlYWRfc2hpZnQoMSk7UGU+MCYmKEcuY2hhcnNldD1QZSksUy5sKz0xfXJldHVybiBHLm5hbWU9Wm8oUywwLGspLEd9fSw1MTp7bjoiUHJpbnRTaXplIixmOnhjfSw2MDp7bjoiQ29udGludWUifSw2''@;'; put 'put ''MTp7bjoiV2luZG93MSIsZjpmdW5jdGlvbiBIdGUoUyl7cmV0dXJue1BvczpbUy5yZWFkX3NoaWZ0KDIpLFMucmVhZF9zaGlmdCgyKV0sRGltOltTLnJlYWRfc2hpZnQoMiksUy5yZWFkX3NoaWZ0KDIpXSxGbGFnczpTLnJlYWRfc2hpZnQoMiksQ3VyVGFiOlMucmVhZF9zaGlmdCgyKSxGaXJz''@;'; put 'put ''dFRhYjpTLnJlYWRfc2hpZnQoMiksU2VsZWN0ZWQ6Uy5yZWFkX3NoaWZ0KDIpLFRhYlJhdGlvOlMucmVhZF9zaGlmdCgyKX19fSw2NDp7bjoiQmFja3VwIixmOmRhfSw2NTp7bjoiUGFuZSIsZjpmdW5jdGlvbiBOQShTLFIsayl7aWYoayYmay5iaWZmPDUpcmV0dXJue307dmFyIEc9e307cmV0''@;'; put 'put ''dXJuIEcueD1TLnJlYWRfc2hpZnQoMiksRy55PVMucmVhZF9zaGlmdCgyKSxHLnJ3VG9wPVMucmVhZF9zaGlmdCgyKSxHLmNvbExlZnQ9Uy5yZWFkX3NoaWZ0KDIpLEcucG5uQWNjdD1TLnJlYWRfc2hpZnQoMSksUy5yZWFkX3NoaWZ0KDEpLEd9fSw2Njp7bjoiQ29kZVBhZ2UiLGY6eGN9LDc3''@;'; put 'put ''OntuOiJQbHMiLGY6Um59LDgwOntuOiJEQ29uIn0sODE6e246IkRDb25SZWYifSw4Mjp7bjoiRENvbk5hbWUifSw4NTp7bjoiRGVmQ29sV2lkdGgiLGY6eGN9LDg5OntuOiJYQ1QifSw5MDp7bjoiQ1JOIn0sOTE6e246IkZpbGVTaGFyaW5nIn0sOTI6e246IldyaXRlQWNjZXNzIixmOmZ1bmN0''@;'; put 'put ''aW9uICR3KFMsUixrKXtpZihrLmVuYylyZXR1cm4gUy5sKz1SLCIiO3ZhciBHPVMubCxRPUowKFMsMCxrKTtyZXR1cm4gUy5yZWFkX3NoaWZ0KFIrRy1TLmwpLFF9fSw5Mzp7bjoiT2JqIixmOmZ1bmN0aW9uIHRWKFMsUixrKXtpZihrJiZrLmJpZmY8OClyZXR1cm4gZnVuY3Rpb24gR0EoUyxS''@;'; put 'put ''LGspe1MubCs9NDt2YXIgRz1TLnJlYWRfc2hpZnQoMiksUT1TLnJlYWRfc2hpZnQoMiksYWU9Uy5yZWFkX3NoaWZ0KDIpO1MubCs9MixTLmwrPTIsUy5sKz0yLFMubCs9MixTLmwrPTIsUy5sKz0yLFMubCs9MixTLmwrPTIsUy5sKz0yLFMubCs9Njt2YXIgZ2U9W107cmV0dXJuIGdlLnB1c2go''@;'; put 'put ''KFlBW0ddfHxSbikoUyxSLT0zNixrKSkse2NtbzpbUSxHLGFlXSxmdDpnZX19KFMsUixrKTt2YXIgRz1nNShTKSxRPWZ1bmN0aW9uIFEwKFMsUixrKXtmb3IodmFyIEc9Uy5sK1IsUT1bXTtTLmw8Rzspe3ZhciBhZT1TLnJlYWRfc2hpZnQoMik7Uy5sLT0yO3RyeXtRW2FlXT1fZlthZV0oUyxH''@;'; put 'put ''LVMubCl9Y2F0Y2h7cmV0dXJuIFMubD1HLFF9fXJldHVybiBTLmwhPUcmJihTLmw9RyksUX0oUyxSLTIyKTtyZXR1cm57Y21vOkcsZnQ6UX19fSw5NDp7bjoiVW5jYWxjZWQifSw5NTp7bjoiQ2FsY1NhdmVSZWNhbGMiLGY6ZGF9LDk2OntuOiJUZW1wbGF0ZSJ9LDk3OntuOiJJbnRsIn0sOTk6''@;'; put 'put ''e246Ik9ialByb3RlY3QiLGY6ZGF9LDEyNTp7bjoiQ29sSW5mbyIsZjpuQ30sMTI4OntuOiJHdXRzIixmOmZ1bmN0aW9uIFhOKFMpe1MubCs9NDt2YXIgUj1bUy5yZWFkX3NoaWZ0KDIpLFMucmVhZF9zaGlmdCgyKV07aWYoMCE9PVJbMF0mJlJbMF0tLSwwIT09UlsxXSYmUlsxXS0tLFJbMF0+''@;'; put 'put ''N3x8UlsxXT43KXRocm93IG5ldyBFcnJvcigiQmFkIEd1dHRlcnM6ICIrUi5qb2luKCJ8IikpO3JldHVybiBSfX0sMTI5OntuOiJXc0Jvb2wiLGY6ZnVuY3Rpb24gX3YoUyxSLGspe3ZhciBHPWsmJjg9PWsuYmlmZnx8Mj09Uj9TLnJlYWRfc2hpZnQoMik6KFMubCs9UiwwKTtyZXR1cm57ZkRp''@;'; put 'put ''YWxvZzoxNiZHLGZCZWxvdzo2NCZHLGZSaWdodDoxMjgmR319fSwxMzA6e246IkdyaWRTZXQiLGY6eGN9LDEzMTp7bjoiSENlbnRlciIsZjpkYX0sMTMyOntuOiJWQ2VudGVyIixmOmRhfSwxMzM6e246IkJvdW5kU2hlZXQ4IixmOmZ1bmN0aW9uIHo2KFMsUixrKXt2YXIgRz1TLnJlYWRfc2hp''@;'; put 'put ''ZnQoNCksUT0zJlMucmVhZF9zaGlmdCgxKSxhZT1TLnJlYWRfc2hpZnQoMSk7c3dpdGNoKGFlKXtjYXNlIDA6YWU9IldvcmtzaGVldCI7YnJlYWs7Y2FzZSAxOmFlPSJNYWNyb3NoZWV0IjticmVhaztjYXNlIDI6YWU9IkNoYXJ0c2hlZXQiO2JyZWFrO2Nhc2UgNjphZT0iVkJBTW9kdWxlIn12''@;'; put 'put ''YXIgZ2U9Wm8oUywwLGspO3JldHVybiAwPT09Z2UubGVuZ3RoJiYoZ2U9IlNoZWV0MSIpLHtwb3M6RyxoczpRLGR0OmFlLG5hbWU6Z2V9fX0sMTM0OntuOiJXcml0ZVByb3RlY3QifSwxNDA6e246IkNvdW50cnkiLGY6ZnVuY3Rpb24gYVYoUyl7dmFyIGssUj1bMCwwXTtyZXR1cm4gaz1TLnJl''@;'; put 'put ''YWRfc2hpZnQoMiksUlswXT1BNltrXXx8ayxrPVMucmVhZF9zaGlmdCgyKSxSWzFdPUE2W2tdfHxrLFJ9fSwxNDE6e246IkhpZGVPYmoiLGY6eGN9LDE0NDp7bjoiU29ydCJ9LDE0Njp7bjoiUGFsZXR0ZSIsZjpmdW5jdGlvbiB3dChTKXtmb3IodmFyIFI9Uy5yZWFkX3NoaWZ0KDIpLGs9W107''@;'; put 'put ''Ui0tID4wOylrLnB1c2godWQoUykpO3JldHVybiBrfX0sMTUxOntuOiJTeW5jIn0sMTUyOntuOiJMUHIifSwxNTM6e246IkR4R0NvbCJ9LDE1NDp7bjoiRm5Hcm91cE5hbWUifSwxNTU6e246IkZpbHRlck1vZGUifSwxNTY6e246IkJ1aWx0SW5Gbkdyb3VwQ291bnQiLGY6eGN9LDE1Nzp7bjoi''@;'; put 'put ''QXV0b0ZpbHRlckluZm8ifSwxNTg6e246IkF1dG9GaWx0ZXIifSwxNjA6e246IlNjbCIsZjokQX0sMTYxOntuOiJTZXR1cCIsZjpmdW5jdGlvbiBzMihTLFIpe3ZhciBrPXt9O3JldHVybiBSPDMyfHwoUy5sKz0xNixrLmhlYWRlcj1MbChTKSxrLmZvb3Rlcj1MbChTKSxTLmwrPTIpLGt9fSwx''@;'; put 'put ''NzQ6e246IlNjZW5NYW4ifSwxNzU6e246IlNDRU5BUklPIn0sMTc2OntuOiJTeFZpZXcifSwxNzc6e246IlN4dmQifSwxNzg6e246IlNYVkkifSwxODA6e246IlN4SXZkIn0sMTgxOntuOiJTWExJIn0sMTgyOntuOiJTWFBJIn0sMTg0OntuOiJEb2NSb3V0ZSJ9LDE4NTp7bjoiUmVjaXBOYW1l''@;'; put 'put ''In0sMTg5OntuOiJNdWxSayIsZjpmdW5jdGlvbiBxTihTLFIpe2Zvcih2YXIgaz1TLmwrUi0yLEc9Uy5yZWFkX3NoaWZ0KDIpLFE9Uy5yZWFkX3NoaWZ0KDIpLGFlPVtdO1MubDxrOylhZS5wdXNoKHdhKFMpKTtpZihTLmwhPT1rKXRocm93IG5ldyBFcnJvcigiTXVsUksgcmVhZCBlcnJvciIp''@;'; put 'put ''O3ZhciBnZT1TLnJlYWRfc2hpZnQoMik7aWYoYWUubGVuZ3RoIT1nZS1RKzEpdGhyb3cgbmV3IEVycm9yKCJNdWxSSyBsZW5ndGggbWlzbWF0Y2giKTtyZXR1cm57cjpHLGM6USxDOmdlLHJrcmVjOmFlfX19LDE5MDp7bjoiTXVsQmxhbmsiLGY6ZnVuY3Rpb24gQnRlKFMsUil7Zm9yKHZhciBr''@;'; put 'put ''PVMubCtSLTIsRz1TLnJlYWRfc2hpZnQoMiksUT1TLnJlYWRfc2hpZnQoMiksYWU9W107Uy5sPGs7KWFlLnB1c2goUy5yZWFkX3NoaWZ0KDIpKTtpZihTLmwhPT1rKXRocm93IG5ldyBFcnJvcigiTXVsQmxhbmsgcmVhZCBlcnJvciIpO3ZhciBnZT1TLnJlYWRfc2hpZnQoMik7aWYoYWUubGVu''@;'; put 'put ''Z3RoIT1nZS1RKzEpdGhyb3cgbmV3IEVycm9yKCJNdWxCbGFuayBsZW5ndGggbWlzbWF0Y2giKTtyZXR1cm57cjpHLGM6USxDOmdlLGl4ZmU6YWV9fX0sMTkzOntuOiJNbXMiLGY6Smh9LDE5Nzp7bjoiU1hESSJ9LDE5ODp7bjoiU1hEQiJ9LDE5OTp7bjoiU1hGREIifSwyMDA6e246IlNYREJC''@;'; put 'put ''In0sMjAxOntuOiJTWE51bSJ9LDIwMjp7bjoiU3hCb29sIixmOmRhfSwyMDM6e246IlN4RXJyIn0sMjA0OntuOiJTWEludCJ9LDIwNTp7bjoiU1hTdHJpbmcifSwyMDY6e246IlNYRHRyIn0sMjA3OntuOiJTeE5pbCJ9LDIwODp7bjoiU1hUYmwifSwyMDk6e246IlNYVEJSR0lJVE0ifSwyMTA6''@;'; put 'put ''e246IlN4VGJwZyJ9LDIxMTp7bjoiT2JQcm9qIn0sMjEzOntuOiJTWFN0cmVhbUlEIn0sMjE1OntuOiJEQkNlbGwifSwyMTY6e246IlNYUm5nIn0sMjE3OntuOiJTeElzeG9wZXIifSwyMTg6e246IkJvb2tCb29sIixmOnhjfSwyMjA6e246IkRiT3JQYXJhbVFyeSJ9LDIyMTp7bjoiU2NlbmFy''@;'; put 'put ''aW9Qcm90ZWN0IixmOmRhfSwyMjI6e246Ik9sZU9iamVjdFNpemUifSwyMjQ6e246IlhGIixmOmZ1bmN0aW9uIFh3KFMsUixrKXt2YXIgRz17fTtyZXR1cm4gRy5pZm50PVMucmVhZF9zaGlmdCgyKSxHLm51bUZtdElkPVMucmVhZF9zaGlmdCgyKSxHLmZsYWdzPVMucmVhZF9zaGlmdCgyKSxH''@;'; put 'put ''LmZTdHlsZT1HLmZsYWdzPj4yJjEsRy5kYXRhPWZ1bmN0aW9uIF9sKFMsUixrLEcpe3ZhciBRPXt9LGFlPVMucmVhZF9zaGlmdCg0KSxnZT1TLnJlYWRfc2hpZnQoNCkscGU9Uy5yZWFkX3NoaWZ0KDQpLHllPVMucmVhZF9zaGlmdCgyKTtpZihRLnBhdHRlcm5UeXBlPWF2W3BlPj4yNl0sIUcu''@;'; put 'put ''Y2VsbFN0eWxlcylyZXR1cm4gUTt2YXIgUGU9NyZhZTtzd2l0Y2goUGUpe2Nhc2UgMTpRLmhhbGlnbj0ibGVmdCI7YnJlYWs7Y2FzZSAyOlEuaGFsaWduPSJjZW50ZXIiO2JyZWFrO2Nhc2UgMzpRLmhhbGlnbj0icmlnaHQifXN3aXRjaChRLmZXcmFwPWFlPj4zJjEsUGU9YWU+PjQmNyl7Y2Fz''@;'; put 'put ''ZSAwOlEudmFsaWduPSJ0b3AiO2JyZWFrO2Nhc2UgMTpRLnZhbGlnbj0iY2VudGVyIjticmVhaztjYXNlIDI6US52YWxpZ249ImJvdHRvbSJ9cmV0dXJuIFEuZkp1c3RMYXN0PWFlPj43JjEsUS50cm90PWFlPj44JjI1NSxRLmNJbmRlbnQ9YWU+PjE2JjE1LFEuZlNocmlua1RvRml0PWFlPj4y''@;'; put 'put ''MCYxLFEuaVJlYWRPcmRlcj1hZT4+MjImMixRLmZBdHJOdW09YWU+PjI2JjEsUS5mQXRyRm50PWFlPj4yNyYxLFEuZkF0ckFsYz1hZT4+MjgmMSxRLmZBdHJCZHI9YWU+PjI5JjEsUS5mQXRyUGF0PWFlPj4zMCYxLFEuZkF0clByb3Q9YWU+PjMxJjEsUS5kZ0xlZnQ9MTUmZ2UsUS5kZ1JpZ2h0''@;'; put 'put ''PWdlPj40JjE1LFEuZGdUb3A9Z2U+PjgmMTUsUS5kZ0JvdHRvbT1nZT4+MTImMTUsUS5pY3ZMZWZ0PWdlPj4xNiYxMjcsUS5pY3ZSaWdodD1nZT4+MjMmMTI3LFEuZ3JiaXREaWFnPWdlPj4zMCYzLFEuaWN2VG9wPTEyNyZwZSxRLmljdkJvdHRvbT1wZT4+NyYxMjcsUS5pY3ZEaWFnPXBlPj4x''@;'; put 'put ''NCYxMjcsUS5kZ0RpYWc9cGU+PjIxJjE1LFEuaWN2Rm9yZT0xMjcmeWUsUS5pY3ZCYWNrPXllPj43JjEyNyxRLmZzeEJ1dHRvbj15ZT4+MTQmMSxRfShTLDAsMCxrKSxHfX0sMjI1OntuOiJJbnRlcmZhY2VIZHIiLGY6ZnVuY3Rpb24gR3coUyxSKXtyZXR1cm4gMD09PVJ8fFMucmVhZF9zaGlm''@;'; put 'put ''dCgyKSwxMjAwfX0sMjI2OntuOiJJbnRlcmZhY2VFbmQiLGY6Smh9LDIyNzp7bjoiU1hWUyJ9LDIyOTp7bjoiTWVyZ2VDZWxscyIsZjpmdW5jdGlvbiBqdGUoUyxSKXtmb3IodmFyIGs9W10sRz1TLnJlYWRfc2hpZnQoMik7Ry0tOylrLnB1c2godDIoUykpO3JldHVybiBrfX0sMjMzOntuOiJC''@;'; put 'put ''a0hpbSJ9LDIzNTp7bjoiTXNvRHJhd2luZ0dyb3VwIn0sMjM2OntuOiJNc29EcmF3aW5nIn0sMjM3OntuOiJNc29EcmF3aW5nU2VsZWN0aW9uIn0sMjM5OntuOiJQaG9uZXRpY0luZm8ifSwyNDA6e246IlN4UnVsZSJ9LDI0MTp7bjoiU1hFeCJ9LDI0Mjp7bjoiU3hGaWx0In0sMjQ0OntuOiJT''@;'; put 'put ''eERYRiJ9LDI0NTp7bjoiU3hJdG0ifSwyNDY6e246IlN4TmFtZSJ9LDI0Nzp7bjoiU3hTZWxlY3QifSwyNDg6e246IlNYUGFpciJ9LDI0OTp7bjoiU3hGbWxhIn0sMjUxOntuOiJTeEZvcm1hdCJ9LDI1Mjp7bjoiU1NUIixmOmZ1bmN0aW9uIFU2KFMsUil7Zm9yKHZhciBrPVMubCtSLEc9Uy5y''@;'; put 'put ''ZWFkX3NoaWZ0KDQpLFE9Uy5yZWFkX3NoaWZ0KDQpLGFlPVtdLGdlPTA7Z2UhPVEmJlMubDxrOysrZ2UpYWUucHVzaCh1YyhTKSk7cmV0dXJuIGFlLkNvdW50PUcsYWUuVW5pcXVlPVEsYWV9fSwyNTM6e246IkxhYmVsU3N0IixmOmZ1bmN0aW9uIEdOKFMpe3ZhciBSPXcwKFMpO3JldHVybiBS''@;'; put 'put ''Lmlzc3Q9Uy5yZWFkX3NoaWZ0KDQpLFJ9fSwyNTU6e246IkV4dFNTVCIsZjpmdW5jdGlvbiBDZShTLFIpe3ZhciBrPXt9O3JldHVybiBrLmRzc3Q9Uy5yZWFkX3NoaWZ0KDIpLFMubCs9Ui0yLGt9fSwyNTY6e246IlNYVkRFeCJ9LDI1OTp7bjoiU1hGb3JtdWxhIn0sMjkwOntuOiJTWERCRXgi''@;'; put 'put ''fSwzMTE6e246IlJSREluc0RlbCJ9LDMxMjp7bjoiUlJESGVhZCJ9LDMxNTp7bjoiUlJEQ2hnQ2VsbCJ9LDMxNzp7bjoiUlJUYWJJZCIsZjpiNH0sMzE4OntuOiJSUkRSZW5TaGVldCJ9LDMxOTp7bjoiUlJTb3J0In0sMzIwOntuOiJSUkRNb3ZlIn0sMzMwOntuOiJSUkZvcm1hdCJ9LDMzMTp7''@;'; put 'put ''bjoiUlJBdXRvRm10In0sMzMzOntuOiJSUkluc2VydFNoIn0sMzM0OntuOiJSUkRNb3ZlQmVnaW4ifSwzMzU6e246IlJSRE1vdmVFbmQifSwzMzY6e246IlJSREluc0RlbEJlZ2luIn0sMzM3OntuOiJSUkRJbnNEZWxFbmQifSwzMzg6e246IlJSRENvbmZsaWN0In0sMzM5OntuOiJSUkREZWZO''@;'; put 'put ''YW1lIn0sMzQwOntuOiJSUkRSc3RFdHhwIn0sMzUxOntuOiJMUm5nIn0sMzUyOntuOiJVc2VzRUxGcyIsZjpkYX0sMzUzOntuOiJEU0YiLGY6Smh9LDQwMTp7bjoiQ1VzciJ9LDQwMjp7bjoiQ2JVc3IifSw0MDM6e246IlVzckluZm8ifSw0MDQ6e246IlVzckV4Y2wifSw0MDU6e246IkZpbGVM''@;'; put 'put ''b2NrIn0sNDA2OntuOiJSUkRJbmZvIn0sNDA3OntuOiJCQ1VzcnMifSw0MDg6e246IlVzckNoayJ9LDQyNTp7bjoiVXNlckJWaWV3In0sNDI2OntuOiJVc2VyU1ZpZXdCZWdpbiJ9LDQyNzp7bjoiVXNlclNWaWV3RW5kIn0sNDI4OntuOiJSUkRVc2VyVmlldyJ9LDQyOTp7bjoiUXNpIn0sNDMw''@;'; put 'put ''OntuOiJTdXBCb29rIixmOmZ1bmN0aW9uIGEyKFMsUixrKXt2YXIgRz1TLmwrUixRPVMucmVhZF9zaGlmdCgyKSxhZT1TLnJlYWRfc2hpZnQoMik7aWYoay5zYmNjaD1hZSwxMDI1PT1hZXx8MTQ4NDk9PWFlKXJldHVyblthZSxRXTtpZihhZTwxfHxhZT4yNTUpdGhyb3cgbmV3IEVycm9yKCJV''@;'; put 'put ''bmV4cGVjdGVkIFN1cEJvb2sgdHlwZTogIithZSk7Zm9yKHZhciBnZT1uYyhTLGFlKSxwZT1bXTtHPlMubDspcGUucHVzaCh0dShTKSk7cmV0dXJuW2FlLFEsZ2UscGVdfX0sNDMxOntuOiJQcm90NFJldiIsZjpkYX0sNDMyOntuOiJDb25kRm10In0sNDMzOntuOiJDRiJ9LDQzNDp7bjoiRFZh''@;'; put 'put ''bCJ9LDQzNzp7bjoiRENvbkJpbiJ9LDQzODp7bjoiVHhPIixmOmZ1bmN0aW9uIHY1KFMsUixrKXt2YXIgRz1TLmwsUT0iIixhZT0tMTt0cnl7Uy5sKz00LC0xPT1bMCw1LDcsMTEsMTIsMTRdLmluZGV4T2YoKGsubGFzdG9ianx8e2NtbzpbMCwwXX0pLmNtb1sxXSk/Uy5sKz02OmZ1bmN0aW9u''@;'; put 'put ''IGRjKFMpe3ZhciBSPVMucmVhZF9zaGlmdCgxKTtTLmwrKzt2YXIgaz1TLnJlYWRfc2hpZnQoMik7Uy5sKz0yfShTKTt2YXIgeWU9Uy5yZWFkX3NoaWZ0KDIpO1MucmVhZF9zaGlmdCgyKSxhZT1TLnJlYWRfc2hpZnQoMik7dmFyIE5lPVMucmVhZF9zaGlmdCgyKTtTLmwrPU5lO2Zvcih2YXIg''@;'; put 'put ''WWU9MTtZZTxTLmxlbnMubGVuZ3RoLTE7KytZZSl7aWYoUy5sLUchPVMubGVuc1tZZV0pdGhyb3cgbmV3IEVycm9yKCJUeE86IGJhZCBjb250aW51ZSByZWNvcmQiKTt2YXIgZXQ9U1tTLmxdO2lmKChRKz1uYyhTLFMubGVuc1tZZSsxXS1TLmxlbnNbWWVdLTEpKS5sZW5ndGg+PShldD95ZToy''@;'; put 'put ''KnllKSlicmVha31pZihRLmxlbmd0aCE9PXllJiZRLmxlbmd0aCE9PTIqeWUpdGhyb3cgbmV3IEVycm9yKCJjY2hUZXh0OiAiK3llKyIgIT0gIitRLmxlbmd0aCk7cmV0dXJuIFMubD1HK1Ise3Q6USxpZm50OmFlfX1jYXRjaHtyZXR1cm4gUy5sPUcrUix7dDpRLGlmbnQ6YWV9fX19LDQzOTp7''@;'; put 'put ''bjoiUmVmcmVzaEFsbCIsZjpkYX0sNDQwOntuOiJITGluayIsZjpmdW5jdGlvbiBuVihTLFIpe3ZhciBrPXQyKFMpO1MubCs9MTY7dmFyIEc9ZnVuY3Rpb24gamwoUyxSKXt2YXIgaz1TLmwrUixHPVMucmVhZF9zaGlmdCg0KTtpZigyIT09Ryl0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXpl''@;'; put 'put ''ZCBzdHJlYW1WZXJzaW9uOiAiK0cpO3ZhciBRPVMucmVhZF9zaGlmdCgyKTtTLmwrPTI7dmFyIGFlLGdlLHBlLHllLE5lLFllLFBlPSIiOzE2JlEmJihhZT15NChTKSksMTI4JlEmJihnZT15NChTKSksISgyNTcmflEpJiYocGU9eTQoUykpLDE9PSgyNTcmUSkmJih5ZT1mdW5jdGlvbiB2ZihT''@;'; put 'put ''LFIpe3ZhciBrPVMucmVhZF9zaGlmdCgxNik7c3dpdGNoKGspe2Nhc2UiZTBjOWVhNzlmOWJhY2UxMThjODIwMGFhMDA0YmE5MGIiOnJldHVybiBmdW5jdGlvbiBMMShTKXt2YXIgUj1TLnJlYWRfc2hpZnQoNCksaz1TLmwsRz0hMTtSPjI0JiYoUy5sKz1SLTI0LCI3OTU4ODFmNDNiMWQ3ZjQ4''@;'; put 'put ''YWYyYzgyNWRjNDg1Mjc2MyI9PT1TLnJlYWRfc2hpZnQoMTYpJiYoRz0hMCksUy5sPWspO3ZhciBRPVMucmVhZF9zaGlmdCgoRz9SLTI0OlIpPj4xLCJ1dGYxNmxlIikucmVwbGFjZShFLCIiKTtyZXR1cm4gRyYmKFMubCs9MjQpLFF9KFMpO2Nhc2UiMDMwMzAwMDAwMDAwMDAwMGMwMDAwMDAw''@;'; put 'put ''MDAwMDAwNDYiOnJldHVybiBmdW5jdGlvbiBiYShTKXtmb3IodmFyIFI9Uy5yZWFkX3NoaWZ0KDIpLGs9IiI7Ui0tID4wOylrKz0iLi4vIjt2YXIgRz1TLnJlYWRfc2hpZnQoMCwibHBzdHItYW5zaSIpO2lmKFMubCs9Miw1NzAwNSE9Uy5yZWFkX3NoaWZ0KDIpKXRocm93IG5ldyBFcnJvcigi''@;'; put 'put ''QmFkIEZpbGVNb25pa2VyIik7aWYoMD09PVMucmVhZF9zaGlmdCg0KSlyZXR1cm4gaytHLnJlcGxhY2UoL1xcL2csIi8iKTt2YXIgYWU9Uy5yZWFkX3NoaWZ0KDQpO2lmKDMhPVMucmVhZF9zaGlmdCgyKSl0aHJvdyBuZXcgRXJyb3IoIkJhZCBGaWxlTW9uaWtlciIpO3JldHVybiBrK1MucmVh''@;'; put 'put ''ZF9zaGlmdChhZT4+MSwidXRmMTZsZSIpLnJlcGxhY2UoRSwiIil9KFMpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBNb25pa2VyICIrayl9fShTKSksOCZRJiYoUGU9eTQoUykpLDMyJlEmJihOZT1TLnJlYWRfc2hpZnQoMTYpKSw2NCZRJiYoWWU9UjMoUykpLFMubD1r''@;'; put 'put ''O3ZhciBldD1nZXx8cGV8fHllfHwiIjtldCYmUGUmJihldCs9IiMiK1BlKSxldHx8KGV0PSIjIitQZSksMiZRJiYiLyI9PWV0LmNoYXJBdCgwKSYmIi8iIT1ldC5jaGFyQXQoMSkmJihldD0iZmlsZTovLyIrZXQpO3ZhciB1dD17VGFyZ2V0OmV0fTtyZXR1cm4gTmUmJih1dC5ndWlkPU5lKSxZ''@;'; put 'put ''ZSYmKHV0LnRpbWU9WWUpLGFlJiYodXQuVG9vbHRpcD1hZSksdXR9KFMsUi0yNCk7cmV0dXJuW2ssR119fSw0NDE6e246IkxlbCJ9LDQ0Mjp7bjoiQ29kZU5hbWUiLGY6dHV9LDQ0Mzp7bjoiU1hGREJUeXBlIn0sNDQ0OntuOiJQcm90NFJldlBhc3MiLGY6eGN9LDQ0NTp7bjoiT2JOb01hY3Jv''@;'; put 'put ''cyJ9LDQ0Njp7bjoiRHYifSw0NDg6e246IkV4Y2VsOUZpbGUiLGY6Smh9LDQ0OTp7bjoiUmVjYWxjSWQiLGY6ZnVuY3Rpb24gZGQoUyl7cmV0dXJuIFMucmVhZF9zaGlmdCgyKSxTLnJlYWRfc2hpZnQoNCl9LHI6Mn0sNDUwOntuOiJFbnRFeFUyIixmOkpofSw1MTI6e246IkRpbWVuc2lvbnMi''@;'; put 'put ''LGY6cXd9LDUxMzp7bjoiQmxhbmsiLGY6enRlfSw1MTU6e246Ik51bWJlciIsZjpmdW5jdGlvbiBKTihTLFIsayl7ay5iaWZmZ3Vlc3MmJjI9PWsuYmlmZiYmKGsuYmlmZj01KTt2YXIgRz13MChTKSxRPUxsKFMpO3JldHVybiBHLnZhbD1RLEd9fSw1MTY6e246IkxhYmVsIixmOmZ1bmN0aW9u''@;'; put 'put ''IGpBKFMsUixrKXtrLmJpZmZndWVzcyYmMj09ay5iaWZmJiYoay5iaWZmPTUpO3ZhciBRPXcwKFMpOzI9PWsuYmlmZiYmUy5sKys7dmFyIGFlPXR1KFMsMCxrKTtyZXR1cm4gUS52YWw9YWUsUX19LDUxNzp7bjoiQm9vbEVyciIsZjpTNH0sNTE5OntuOiJTdHJpbmciLGY6TzB9LDUyMDp7bjoi''@;'; put 'put ''Um93IixmOmZ1bmN0aW9uIEtlKFMpe3ZhciBSPXt9O1Iucj1TLnJlYWRfc2hpZnQoMiksUi5jPVMucmVhZF9zaGlmdCgyKSxSLmNudD1TLnJlYWRfc2hpZnQoMiktUi5jO3ZhciBrPVMucmVhZF9zaGlmdCgyKTtTLmwrPTQ7dmFyIEc9Uy5yZWFkX3NoaWZ0KDEpO1MubCs9MTt2YXIgUT1TLnJl''@;'; put 'put ''YWRfc2hpZnQoMik7cmV0dXJuIFIuaXhmZT00MDk1JlEsNyZHJiYoUi5sZXZlbD03JkcpLDMyJkcmJihSLmhpZGRlbj0hMCksNjQmRyYmKFIuaHB0PWsvMjApLFJ9fSw1MjM6e246IkluZGV4In0sNTQ1OntuOiJBcnJheSIsZjpTdn0sNTQ5OntuOiJEZWZhdWx0Um93SGVpZ2h0IixmOnIyfSw1''@;'; put 'put ''NjY6e246IlRhYmxlIn0sNTc0OntuOiJXaW5kb3cyIixmOmZ1bmN0aW9uIFZ0ZShTLFIsayl7aWYoayYmay5iaWZmPj0yJiZrLmJpZmY8NSlyZXR1cm57fTt2YXIgRz1TLnJlYWRfc2hpZnQoMik7cmV0dXJue1JUTDo2NCZHLGdyaWQ6ISEoMiZHKSxmcm96ZW46ISEoOCZHKX19fSw2Mzg6e246''@;'; put 'put ''IlJLIixmOmZ1bmN0aW9uIFVBKFMpe3ZhciBSPVMucmVhZF9zaGlmdCgyKSxrPVMucmVhZF9zaGlmdCgyKSxHPXdhKFMpO3JldHVybntyOlIsYzprLGl4ZmU6R1swXSxya251bTpHWzFdfX19LDY1OTp7bjoiU3R5bGUiLGY6ZnVuY3Rpb24gTDAoUyxSLGspe3JldHVybiBTLmwrPVIse319fSwx''@;'; put 'put ''MDQ4OntuOiJCaWdOYW1lIn0sMTA1NDp7bjoiRm9ybWF0IixmOmZ1bmN0aW9uIEt3KFMsUixrKXtyZXR1cm5bUy5yZWFkX3NoaWZ0KDIpLEowKFMsMCxrKV19fSwxMDg0OntuOiJDb250aW51ZUJpZ05hbWUifSwxMjEyOntuOiJTaHJGbWxhIixmOmZ1bmN0aW9uIEN2KFMsUixrKXt2YXIgRz13''@;'; put 'put ''NChTKTtTLmwrKzt2YXIgUT1TLnJlYWRfc2hpZnQoMSk7cmV0dXJuW1ozKFMsUi09OCxrKSxRLEddfX0sMjA0ODp7bjoiSExpbmtUb29sdGlwIixmOmZ1bmN0aW9uIGlWKFMsUil7Uy5yZWFkX3NoaWZ0KDIpO3ZhciBrPXQyKFMpLEc9Uy5yZWFkX3NoaWZ0KChSLTEwKS8yLCJkYmNzLWNvbnQi''@;'; put 'put ''KTtyZXR1cm5bayxHPUcucmVwbGFjZShFLCIiKV19fSwyMDQ5OntuOiJXZWJQdWIifSwyMDUwOntuOiJRc2lTWFRhZyJ9LDIwNTE6e246IkRCUXVlcnlFeHQifSwyMDUyOntuOiJFeHRTdHJpbmcifSwyMDUzOntuOiJUeHRRcnkifSwyMDU0OntuOiJRc2lyIn0sMjA1NTp7bjoiUXNpZiJ9LDIw''@;'; put 'put ''NTY6e246IlJSRFRRU0lGIn0sMjA1Nzp7bjoiQk9GIixmOk5jfSwyMDU4OntuOiJPbGVEYkNvbm4ifSwyMDU5OntuOiJXT3B0In0sMjA2MDp7bjoiU1hWaWV3RXgifSwyMDYxOntuOiJTWFRIIn0sMjA2Mjp7bjoiU1hQSUV4In0sMjA2Mzp7bjoiU1hWRFRFeCJ9LDIwNjQ6e246IlNYVmlld0V4''@;'; put 'put ''OSJ9LDIwNjY6e246IkNvbnRpbnVlRnJ0In0sMjA2Nzp7bjoiUmVhbFRpbWVEYXRhIn0sMjEyODp7bjoiQ2hhcnRGcnRJbmZvIn0sMjEyOTp7bjoiRnJ0V3JhcHBlciJ9LDIxMzA6e246IlN0YXJ0QmxvY2sifSwyMTMxOntuOiJFbmRCbG9jayJ9LDIxMzI6e246IlN0YXJ0T2JqZWN0In0sMjEz''@;'; put 'put ''Mzp7bjoiRW5kT2JqZWN0In0sMjEzNDp7bjoiQ2F0TGFiIn0sMjEzNTp7bjoiWU11bHQifSwyMTM2OntuOiJTWFZpZXdMaW5rIn0sMjEzNzp7bjoiUGl2b3RDaGFydEJpdHMifSwyMTM4OntuOiJGcnRGb250TGlzdCJ9LDIxNDY6e246IlNoZWV0RXh0In0sMjE0Nzp7bjoiQm9va0V4dCIscjox''@;'; put 'put ''Mn0sMjE0ODp7bjoiU1hBZGRsIn0sMjE0OTp7bjoiQ3JFcnIifSwyMTUwOntuOiJIRlBpY3R1cmUifSwyMTUxOntuOiJGZWF0SGRyIixmOkpofSwyMTUyOntuOiJGZWF0In0sMjE1NDp7bjoiRGF0YUxhYkV4dCJ9LDIxNTU6e246IkRhdGFMYWJFeHRDb250ZW50cyJ9LDIxNTY6e246IkNlbGxX''@;'; put 'put ''YXRjaCJ9LDIxNjE6e246IkZlYXRIZHIxMSJ9LDIxNjI6e246IkZlYXR1cmUxMSJ9LDIxNjQ6e246IkRyb3BEb3duT2JqSWRzIn0sMjE2NTp7bjoiQ29udGludWVGcnQxMSJ9LDIxNjY6e246IkRDb25uIn0sMjE2Nzp7bjoiTGlzdDEyIn0sMjE2ODp7bjoiRmVhdHVyZTEyIn0sMjE2OTp7bjoi''@;'; put 'put ''Q29uZEZtdDEyIn0sMjE3MDp7bjoiQ0YxMiJ9LDIxNzE6e246IkNGRXgifSwyMTcyOntuOiJYRkNSQyIsZjpmdW5jdGlvbiBsbChTKXtTLmwrPTI7dmFyIFI9e2N4ZnM6MCxjcmM6MH07cmV0dXJuIFIuY3hmcz1TLnJlYWRfc2hpZnQoMiksUi5jcmM9Uy5yZWFkX3NoaWZ0KDQpLFJ9LHI6MTJ9''@;'; put 'put ''LDIxNzM6e246IlhGRXh0IixmOmZ1bmN0aW9uIFhWKFMsUil7Uy5sKz0yO3ZhciBHPVMucmVhZF9zaGlmdCgyKTtTLmwrPTI7Zm9yKHZhciBRPVMucmVhZF9zaGlmdCgyKSxhZT1bXTtRLS0gPjA7KWFlLnB1c2goenYoUykpO3JldHVybntpeGZlOkcsZXh0OmFlfX0scjoxMn0sMjE3NDp7bjoi''@;'; put 'put ''QXV0b0ZpbHRlcjEyIn0sMjE3NTp7bjoiQ29udGludWVGcnQxMiJ9LDIxODA6e246Ik1EVEluZm8ifSwyMTgxOntuOiJNRFhTdHIifSwyMTgyOntuOiJNRFhUdXBsZSJ9LDIxODM6e246Ik1EWFNldCJ9LDIxODQ6e246Ik1EWFByb3AifSwyMTg1OntuOiJNRFhLUEkifSwyMTg2OntuOiJNREIi''@;'; put 'put ''fSwyMTg3OntuOiJQTFYifSwyMTg4OntuOiJDb21wYXQxMiIsZjpkYSxyOjEyfSwyMTg5OntuOiJEWEYifSwyMTkwOntuOiJUYWJsZVN0eWxlcyIscjoxMn0sMjE5MTp7bjoiVGFibGVTdHlsZSJ9LDIxOTI6e246IlRhYmxlU3R5bGVFbGVtZW50In0sMjE5NDp7bjoiU3R5bGVFeHQifSwyMTk1''@;'; put 'put ''OntuOiJOYW1lUHVibGlzaCJ9LDIxOTY6e246Ik5hbWVDbXQiLGY6ZnVuY3Rpb24gVzYoUyxSLGspe2lmKCEoay5iaWZmPDgpKXt2YXIgRz1TLnJlYWRfc2hpZnQoMiksUT1TLnJlYWRfc2hpZnQoMik7cmV0dXJuW25jKFMsRyxrKSxuYyhTLFEsayldfVMubCs9Un0scjoxMn0sMjE5Nzp7bjoi''@;'; put 'put ''U29ydERhdGEifSwyMTk4OntuOiJUaGVtZSIsZjpmdW5jdGlvbiBLVihTLFIsayl7dmFyIEc9Uy5sK1I7aWYoMTI0MjI2IT09Uy5yZWFkX3NoaWZ0KDQpKXtpZighay5jZWxsU3R5bGVzKXJldHVybiB2b2lkKFMubD1HKTt2YXIgZ2UsYWU9Uy5zbGljZShTLmwpO1MubD1HO3RyeXtnZT1jbihh''@;'; put 'put ''ZSx7dHlwZToiYXJyYXkifSl9Y2F0Y2h7cmV0dXJufXZhciBwZT1ycihnZSwidGhlbWUvdGhlbWUvdGhlbWUxLnhtbCIsITApO2lmKHBlKXJldHVybiB4QyhwZSxrKX19LHI6MTJ9LDIxOTk6e246IkdVSURUeXBlTGliIn0sMjIwMDp7bjoiRm5HcnAxMiJ9LDIyMDE6e246Ik5hbWVGbkdycDEy''@;'; put 'put ''In0sMjIwMjp7bjoiTVRSU2V0dGluZ3MiLGY6ZnVuY3Rpb24gTTQoUyl7cmV0dXJuWzAhPT1TLnJlYWRfc2hpZnQoNCksMCE9PVMucmVhZF9zaGlmdCg0KSxTLnJlYWRfc2hpZnQoNCldfSxyOjEyfSwyMjAzOntuOiJDb21wcmVzc1BpY3R1cmVzIixmOkpofSwyMjA0OntuOiJIZWFkZXJGb290''@;'; put 'put ''ZXIifSwyMjA1OntuOiJDcnRMYXlvdXQxMiJ9LDIyMDY6e246IkNydE1sRnJ0In0sMjIwNzp7bjoiQ3J0TWxGcnRDb250aW51ZSJ9LDIyMTE6e246IkZvcmNlRnVsbENhbGN1bGF0aW9uIixmOmZ1bmN0aW9uIEl0KFMpe3ZhciBSPWZ1bmN0aW9uIGUyKFMpe3ZhciBSPVMucmVhZF9zaGlmdCgy''@;'; put 'put ''KSxrPVMucmVhZF9zaGlmdCgyKTtyZXR1cm4gUy5sKz04LHt0eXBlOlIsZmxhZ3M6a319KFMpO2lmKDIyMTEhPVIudHlwZSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgRnV0dXJlIFJlY29yZCAiK1IudHlwZSk7cmV0dXJuIDAhPT1TLnJlYWRfc2hpZnQoNCl9fSwyMjEyOntuOiJTaGFwZVBy''@;'; put 'put ''b3BzU3RyZWFtIn0sMjIxMzp7bjoiVGV4dFByb3BzU3RyZWFtIn0sMjIxNDp7bjoiUmljaFRleHRTdHJlYW0ifSwyMjE1OntuOiJDcnRMYXlvdXQxMkEifSw0MDk3OntuOiJVbml0cyJ9LDQwOTg6e246IkNoYXJ0In0sNDA5OTp7bjoiU2VyaWVzIn0sNDEwMjp7bjoiRGF0YUZvcm1hdCJ9LDQx''@;'; put 'put ''MDM6e246IkxpbmVGb3JtYXQifSw0MTA1OntuOiJNYXJrZXJGb3JtYXQifSw0MTA2OntuOiJBcmVhRm9ybWF0In0sNDEwNzp7bjoiUGllRm9ybWF0In0sNDEwODp7bjoiQXR0YWNoZWRMYWJlbCJ9LDQxMDk6e246IlNlcmllc1RleHQifSw0MTE2OntuOiJDaGFydEZvcm1hdCJ9LDQxMTc6e246''@;'; put 'put ''IkxlZ2VuZCJ9LDQxMTg6e246IlNlcmllc0xpc3QifSw0MTE5OntuOiJCYXIifSw0MTIwOntuOiJMaW5lIn0sNDEyMTp7bjoiUGllIn0sNDEyMjp7bjoiQXJlYSJ9LDQxMjM6e246IlNjYXR0ZXIifSw0MTI0OntuOiJDcnRMaW5lIn0sNDEyNTp7bjoiQXhpcyJ9LDQxMjY6e246IlRpY2sifSw0''@;'; put 'put ''MTI3OntuOiJWYWx1ZVJhbmdlIn0sNDEyODp7bjoiQ2F0U2VyUmFuZ2UifSw0MTI5OntuOiJBeGlzTGluZSJ9LDQxMzA6e246IkNydExpbmsifSw0MTMyOntuOiJEZWZhdWx0VGV4dCJ9LDQxMzM6e246IlRleHQifSw0MTM0OntuOiJGb250WCIsZjp4Y30sNDEzNTp7bjoiT2JqZWN0TGluayJ9''@;'; put 'put ''LDQxNDY6e246IkZyYW1lIn0sNDE0Nzp7bjoiQmVnaW4ifSw0MTQ4OntuOiJFbmQifSw0MTQ5OntuOiJQbG90QXJlYSJ9LDQxNTQ6e246IkNoYXJ0M2QifSw0MTU2OntuOiJQaWNGIn0sNDE1Nzp7bjoiRHJvcEJhciJ9LDQxNTg6e246IlJhZGFyIn0sNDE1OTp7bjoiU3VyZiJ9LDQxNjA6e246''@;'; put 'put ''IlJhZGFyQXJlYSJ9LDQxNjE6e246IkF4aXNQYXJlbnQifSw0MTYzOntuOiJMZWdlbmRFeGNlcHRpb24ifSw0MTY0OntuOiJTaHRQcm9wcyIsZjpmdW5jdGlvbiBpQyhTLFIsayl7dmFyIEc9e2FyZWE6ITF9O2lmKDUhPWsuYmlmZilyZXR1cm4gUy5sKz1SLEc7dmFyIFE9Uy5yZWFkX3NoaWZ0''@;'; put 'put ''KDEpO3JldHVybiBTLmwrPTMsMTYmUSYmKEcuYXJlYT0hMCksR319LDQxNjU6e246IlNlclRvQ3J0In0sNDE2Njp7bjoiQXhlc1VzZWQifSw0MTY4OntuOiJTQmFzZVJlZiJ9LDQxNzA6e246IlNlclBhcmVudCJ9LDQxNzE6e246IlNlckF1eFRyZW5kIn0sNDE3NDp7bjoiSUZtdFJlY29yZCJ9''@;'; put 'put ''LDQxNzU6e246IlBvcyJ9LDQxNzY6e246IkFsUnVucyJ9LDQxNzc6e246IkJSQUkifSw0MTg3OntuOiJTZXJBdXhFcnJCYXIifSw0MTg4OntuOiJDbHJ0Q2xpZW50IixmOmZ1bmN0aW9uIG9zKFMpe2Zvcih2YXIgUj1TLnJlYWRfc2hpZnQoMiksaz1bXTtSLS0gPjA7KWsucHVzaCh1ZChTKSk7''@;'; put 'put ''cmV0dXJuIGt9fSw0MTg5OntuOiJTZXJGbXQifSw0MTkxOntuOiJDaGFydDNEQmFyU2hhcGUifSw0MTkyOntuOiJGYmkifSw0MTkzOntuOiJCb3BQb3AifSw0MTk0OntuOiJBeGNFeHQifSw0MTk1OntuOiJEYXQifSw0MTk2OntuOiJQbG90R3Jvd3RoIn0sNDE5Nzp7bjoiU0lJbmRleCJ9LDQx''@;'; put 'put ''OTg6e246IkdlbEZyYW1lIn0sNDE5OTp7bjoiQm9wUG9wQ3VzdG9tIn0sNDIwMDp7bjoiRmJpMiJ9LDA6e246IkRpbWVuc2lvbnMiLGY6cXd9LDE6e246IkJJRkYyQkxBTksifSwyOntuOiJCSUZGMklOVCIsZjpmdW5jdGlvbiBjVihTKXt2YXIgUj13MChTKTsrK1MubDt2YXIgaz1TLnJlYWRf''@;'; put 'put ''c2hpZnQoMik7cmV0dXJuIFIudD0ibiIsUi52YWw9ayxSfX0sMzp7bjoiQklGRjJOVU0iLGY6ZnVuY3Rpb24gbFYoUyl7dmFyIFI9dzAoUyk7KytTLmw7dmFyIGs9TGwoUyk7cmV0dXJuIFIudD0ibiIsUi52YWw9ayxSfX0sNDp7bjoiQklGRjJTVFIiLGY6ZnVuY3Rpb24gQ2YoUyxSLGspe2su''@;'; put 'put ''YmlmZmd1ZXNzJiY1PT1rLmJpZmYmJihrLmJpZmY9Mik7dmFyIEc9dzAoUyk7KytTLmw7dmFyIFE9SjAoUywwLGspO3JldHVybiBHLnQ9InN0ciIsRy52YWw9USxHfX0sNTp7bjoiQm9vbEVyciIsZjpTNH0sNzp7bjoiU3RyaW5nIixmOmZ1bmN0aW9uIG9DKFMpe3ZhciBSPVMucmVhZF9zaGlm''@;'; put 'put ''dCgxKTtyZXR1cm4gMD09PVI/KFMubCsrLCIiKTpTLnJlYWRfc2hpZnQoUiwic2Jjcy1jb250Iil9fSw4OntuOiJCSUZGMlJPVyJ9LDk6e246IkJPRiIsZjpOY30sMTE6e246IkluZGV4In0sMjI6e246IkV4dGVybkNvdW50IixmOnhjfSwzMDp7bjoiQklGRjJGT1JNQVQiLGY6bzJ9LDMxOntu''@;'; put 'put ''OiJCSUZGMkZNVENOVCJ9LDMyOntuOiJCSUZGMkNPTElORk8ifSwzMzp7bjoiQXJyYXkiLGY6U3Z9LDM2OntuOiJDT0xXSURUSCJ9LDM3OntuOiJEZWZhdWx0Um93SGVpZ2h0IixmOnIyfSw1MDp7bjoiQklGRjJGT05UWFRSQSIsZjpmdW5jdGlvbiBhQyhTLFIpe1MubCs9NixTLmwrPTIsUy5s''@;'; put 'put ''Kz0xLFMubCs9MyxTLmwrPTEsUy5sKz1SLTEzfX0sNjI6e246IkJJRkYyV0lORE9XMiJ9LDUyOntuOiJEREVPYmpOYW1lIn0sNjc6e246IkJJRkYyWEYifSw2ODp7bjoiQklGRjJYRklOREVYIixmOnhjfSw2OTp7bjoiQklGRjJGT05UQ0xSIn0sODY6e246IkJJRkY0Rk1UQ05UIn0sMTI2Ontu''@;'; put 'put ''OiJSSyJ9LDEyNzp7bjoiSW1EYXRhIixmOmZ1bmN0aW9uIG5oKFMpe3ZhciBSPVMucmVhZF9zaGlmdCgyKSxrPVMucmVhZF9zaGlmdCgyKSxHPVMucmVhZF9zaGlmdCg0KSxRPXtmbXQ6UixlbnY6ayxsZW46RyxkYXRhOlMuc2xpY2UoUy5sLFMubCtHKX07cmV0dXJuIFMubCs9RyxRfX0sMTM1''@;'; put 'put ''OntuOiJBZGRpbiJ9LDEzNjp7bjoiRWRnIn0sMTM3OntuOiJQdWIifSwxNDU6e246IlN1YiJ9LDE0ODp7bjoiTEhSZWNvcmQifSwxNDk6e246IkxITkdyYXBoIn0sMTUwOntuOiJTb3VuZCJ9LDE2OTp7bjoiQ29vcmRMaXN0In0sMTcxOntuOiJHQ1cifSwxODg6e246IlNockZtbGEifSwxOTE6''@;'; put 'put ''e246IlRvb2xiYXJIZHIifSwxOTI6e246IlRvb2xiYXJFbmQifSwxOTQ6e246IkFkZE1lbnUifSwxOTU6e246IkRlbE1lbnUifSwyMTQ6e246IlJTdHJpbmciLGY6ZnVuY3Rpb24gc0MoUyxSLGspe3ZhciBHPVMubCtSLFE9dzAoUyksYWU9Uy5yZWFkX3NoaWZ0KDIpLGdlPW5jKFMsYWUsayk7''@;'; put 'put ''cmV0dXJuIFMubD1HLFEudD0ic3RyIixRLnZhbD1nZSxRfX0sMjIzOntuOiJVRERlc2MifSwyMzQ6e246IlRhYklkQ29uZiJ9LDM1NDp7bjoiWEw1TW9kaWZ5In0sNDIxOntuOiJGaWxlU2hhcmluZzIifSw1MTg6e246IkZvcm11bGEiLGY6SkN9LDUyMTp7bjoiQk9GIixmOk5jfSw1MzY6e246''@;'; put 'put ''IkxibCIsZjplQ30sNTQ3OntuOiJFeHRlcm5OYW1lIixmOlF3fSw1NjE6e246IkZvbnQifSw1Nzk6e246IkJJRkYzWEYifSwxMDMwOntuOiJGb3JtdWxhIixmOkpDfSwxMDMzOntuOiJCT0YiLGY6TmN9LDEwOTE6e246IkJJRkY0WEYifSwyMTU3OntuOiJGZWF0SW5mbyJ9LDIxNjM6e246IkZl''@;'; put 'put ''YXRJbmZvMTEifSwyMTc3OntuOiJTWEFkZGwxMiJ9LDIyNDA6e246IkF1dG9XZWJQdWIifSwyMjQxOntuOiJMaXN0T2JqIn0sMjI0Mjp7bjoiTGlzdEZpZWxkIn0sMjI0Mzp7bjoiTGlzdERWIn0sMjI0NDp7bjoiTGlzdENvbmRGbXQifSwyMjQ1OntuOiJMaXN0Q0YifSwyMjQ2OntuOiJGTVFy''@;'; put 'put ''eSJ9LDIyNDc6e246IkZNU1FyeSJ9LDIyNDg6e246IlBMViJ9LDIyNDk6e246IkxuRXh0In0sMjI1MDp7bjoiTWtyRXh0In0sMjI1MTp7bjoiQ3J0Q29vcHQifSwyMjYyOntuOiJGUlRBcmNoSWQkIixyOjEyfSwyOTI4Mjp7fX0sS1M9SWUoJFMsIm4iKTtmdW5jdGlvbiAkaShTLFIsayxHKXt2''@;'; put 'put ''YXIgUT0rUnx8K0tTW1JdO2lmKCFpc05hTihRKSl7dmFyIGFlPUd8fChrfHxbXSkubGVuZ3RofHwwLGdlPVMubmV4dCg0KTtnZS53cml0ZV9zaGlmdCgyLFEpLGdlLndyaXRlX3NoaWZ0KDIsYWUpLGFlPjAmJkFyKGspJiZTLnB1c2goayl9fWZ1bmN0aW9uIENiKFMsUixrKXtyZXR1cm4gU3x8''@;'; put 'put ''KFM9Ym4oNykpLFMud3JpdGVfc2hpZnQoMixSKSxTLndyaXRlX3NoaWZ0KDIsayksUy53cml0ZV9zaGlmdCgyLDApLFMud3JpdGVfc2hpZnQoMSwwKSxTfWZ1bmN0aW9uIFBuZShTLFIsayxHKXtpZihudWxsIT1SLnYpc3dpdGNoKFIudCl7Y2FzZSJkIjpjYXNlIm4iOnZhciBRPSJkIj09Ui50''@;'; put 'put ''P1FlKEhlKFIudikpOlIudjtyZXR1cm4gdm9pZChRPT0oMHxRKSYmUT49MCYmUTw2NTUzNj8kaShTLDIsZnVuY3Rpb24gdVYoUyxSLGspe3ZhciBHPWJuKDkpO3JldHVybiBDYihHLFMsUiksRy53cml0ZV9zaGlmdCgyLGspLEd9KGssRyxRKSk6JGkoUywzLGZ1bmN0aW9uIHFBKFMsUixrKXt2''@;'; put 'put ''YXIgRz1ibigxNSk7cmV0dXJuIENiKEcsUyxSKSxHLndyaXRlX3NoaWZ0KDgsaywiZiIpLEd9KGssRyxRKSkpO2Nhc2UiYiI6Y2FzZSJlIjpyZXR1cm4gdm9pZCAkaShTLDUsZnVuY3Rpb24gTG5lKFMsUixrLEcpe3ZhciBRPWJuKDkpO3JldHVybiBDYihRLFMsUikscWkoayxHfHwiYiIsUSks''@;'; put 'put ''UX0oayxHLFIudixSLnQpKTtjYXNlInMiOmNhc2Uic3RyIjpyZXR1cm4gdm9pZCAkaShTLDQsZnVuY3Rpb24gT25lKFMsUixrKXt2YXIgRz1ibig4KzIqay5sZW5ndGgpO3JldHVybiBDYihHLFMsUiksRy53cml0ZV9zaGlmdCgxLGsubGVuZ3RoKSxHLndyaXRlX3NoaWZ0KGsubGVuZ3RoLGss''@;'; put 'put ''InNiY3MiKSxHLmw8Ry5sZW5ndGg/Ry5zbGljZSgwLEcubCk6R30oayxHLChSLnZ8fCIiKS5zbGljZSgwLDI1NSkpKX0kaShTLDEsQ2IobnVsbCxrLEcpKX1mdW5jdGlvbiBCbmUoUyxSLGssRyxRKXt2YXIgYWU9MTYrczAoUS5jZWxsWGZzLFEuY2VsbFN0eWxlWGZzLFIsUSk7aWYobnVsbCE9''@;'; put 'put ''Ui52fHxSLmJmKWlmKFIuYmYpJGkoUywiRm9ybXVsYSIsZnVuY3Rpb24gSDUoUyxSLGssRyxRKXt2YXIgYWU9UWgoUixrLFEpLGdlPWZ1bmN0aW9uIFhDKFMpe2lmKG51bGw9PVMpe3ZhciBSPWJuKDgpO3JldHVybiBSLndyaXRlX3NoaWZ0KDEsMyksUi53cml0ZV9zaGlmdCgxLDApLFIud3Jp''@;'; put 'put ''dGVfc2hpZnQoMiwwKSxSLndyaXRlX3NoaWZ0KDIsMCksUi53cml0ZV9zaGlmdCgyLDY1NTM1KSxSfXJldHVybiBMdSgibnVtYmVyIj09dHlwZW9mIFM/UzowKX0oUy52KSxwZT1ibig2KTtwZS53cml0ZV9zaGlmdCgyLDMzKSxwZS53cml0ZV9zaGlmdCg0LDApO2Zvcih2YXIgUGU9Ym4oUy5i''@;'; put 'put ''Zi5sZW5ndGgpLE5lPTA7TmU8Uy5iZi5sZW5ndGg7KytOZSlQZVtOZV09Uy5iZltOZV07cmV0dXJuIGooW2FlLGdlLHBlLFBlXSl9KFIsayxHLDAsYWUpKTtlbHNlIHN3aXRjaChSLnQpe2Nhc2UiZCI6Y2FzZSJuIjokaShTLCJOdW1iZXIiLGZ1bmN0aW9uIEp3KFMsUixrLEcpe3ZhciBRPWJu''@;'; put 'put ''KDE0KTtyZXR1cm4gUWgoUyxSLEcsUSksTHUoayxRKSxRfShrLEcsImQiPT1SLnQ/UWUoSGUoUi52KSk6Ui52LGFlKSk7YnJlYWs7Y2FzZSJiIjpjYXNlImUiOiRpKFMsNTE3LGZ1bmN0aW9uIE8xKFMsUixrLEcsUSxhZSl7dmFyIGdlPWJuKDgpO3JldHVybiBRaChTLFIsRyxnZSkscWkoayxh''@;'; put 'put ''ZSxnZSksZ2V9KGssRyxSLnYsYWUsMCxSLnQpKTticmVhaztjYXNlInMiOmNhc2Uic3RyIjppZihRLmJvb2tTU1Qpe3ZhciBwZT1pUyhRLlN0cmluZ3MsUi52LFIuUj9SLnI9S3MoUi5SKTpudWxsLFEucmV2U3RyaW5ncyk7aWYoUi5SKWZvcih2YXIgeWU9MDt5ZTxSLlIubGVuZ3RoOysreWUp''@;'; put 'put ''Ui5SW3llXS5zJiZzMChRLmNlbGxYZnMsUS5jZWxsU3R5bGVYZnMse3Q6Im4iLHY6MCxzOlIuUlt5ZV0uc30sUSk7JGkoUywiTGFiZWxTc3QiLGZ1bmN0aW9uIEJBKFMsUixrLEcpe3ZhciBRPWJuKDEwKTtyZXR1cm4gUWgoUyxSLEcsUSksUS53cml0ZV9zaGlmdCg0LGspLFF9KGssRyxwZSxh''@;'; put 'put ''ZSkpfWVsc2UgJGkoUywiTGFiZWwiLGZ1bmN0aW9uICROKFMsUixrLEcsUSl7dmFyIGFlPSFRfHw4PT1RLmJpZmYsZ2U9Ym4oK2FlKzgrKDErYWUpKmsubGVuZ3RoKTtyZXR1cm4gUWgoUyxSLEcsZ2UpLGdlLndyaXRlX3NoaWZ0KDIsay5sZW5ndGgpLGFlJiZnZS53cml0ZV9zaGlmdCgxLDEp''@;'; put 'put ''LGdlLndyaXRlX3NoaWZ0KCgxK2FlKSprLmxlbmd0aCxrLGFlPyJ1dGYxNmxlIjoic2JjcyIpLGdlfShrLEcsKFIudnx8IiIpLnNsaWNlKDAsMjU1KSxhZSxRKSk7YnJlYWs7ZGVmYXVsdDokaShTLCJCbGFuayIsUWgoayxHLGFlKSl9ZWxzZSAkaShTLCJCbGFuayIsUWgoayxHLGFlKSl9ZnVu''@;'; put 'put ''Y3Rpb24gYkkoUyxSLGspe3ZhciBOZSxHPW1pKCksUT1rLlNoZWV0TmFtZXNbU10sYWU9ay5TaGVldHNbUV18fHt9LGdlPShrfHx7fSkuV29ya2Jvb2t8fHt9LHBlPShnZS5TaGVldHN8fFtdKVtTXXx8e30seWU9QXJyYXkuaXNBcnJheShhZSksUGU9OD09Ui5iaWZmLFllPSIiLGV0PVtdLHV0''@;'; put 'put ''PWFhKGFlWyIhcmVmIl18fCJBMSIpLEV0PVBlPzY1NTM2OjE2Mzg0O2lmKHV0LmUuYz4yNTV8fHV0LmUucj49RXQpe2lmKFIuV1RGKXRocm93IG5ldyBFcnJvcigiUmFuZ2UgIisoYWVbIiFyZWYiXXx8IkExIikrIiBleGNlZWRzIGZvcm1hdCBsaW1pdCBBMTpJVjE2Mzg0Iik7dXQuZS5jPU1h''@;'; put 'put ''dGgubWluKHV0LmUuYywyNTUpLHV0LmUucj1NYXRoLm1pbih1dC5lLmMsRXQtMSl9JGkoRywyMDU3LEM0KDAsMTYsUikpLCRpKEcsIkNhbGNNb2RlIixyMCgxKSksJGkoRywiQ2FsY0NvdW50IixyMCgxMDApKSwkaShHLCJDYWxjUmVmTW9kZSIsZXUoITApKSwkaShHLCJDYWxjSXRlciIsZXUo''@;'; put 'put ''ITEpKSwkaShHLCJDYWxjRGVsdGEiLEx1KC4wMDEpKSwkaShHLCJDYWxjU2F2ZVJlY2FsYyIsZXUoITApKSwkaShHLCJQcmludFJvd0NvbCIsZXUoITEpKSwkaShHLCJQcmludEdyaWQiLGV1KCExKSksJGkoRywiR3JpZFNldCIscjAoMSkpLCRpKEcsIkd1dHMiLGZ1bmN0aW9uIFo2KFMpe3Zh''@;'; put 'put ''ciBSPWJuKDgpO3JldHVybiBSLndyaXRlX3NoaWZ0KDQsMCksUi53cml0ZV9zaGlmdCgyLFNbMF0/U1swXSsxOjApLFIud3JpdGVfc2hpZnQoMixTWzFdP1NbMV0rMTowKSxSfShbMCwwXSkpLCRpKEcsIkhDZW50ZXIiLGV1KCExKSksJGkoRywiVkNlbnRlciIsZXUoITEpKTt2YXIgb3Q9YWVb''@;'; put 'put ''IiFwcmludCJdJiZhZVsiIXByaW50Il0ubWFyZ2luc3x8YWVbIiFtYXJnaW5zIl07b3QmJihudWxsIT1vdC5sZWZ0JiYkaShHLCJMZWZ0TWFyZ2luIixMdShvdC5sZWZ0KSksbnVsbCE9b3QucmlnaHQmJiRpKEcsIlJpZ2h0TWFyZ2luIixMdShvdC5yaWdodCkpLG51bGwhPW90LnRvcCYmJGko''@;'; put 'put ''RywiVG9wTWFyZ2luIixMdShvdC50b3ApKSxudWxsIT1vdC5ib3R0b20mJiRpKEcsIkJvdHRvbU1hcmdpbiIsTHUob3QuYm90dG9tKSksKG51bGwhPW90LmhlYWRlcnx8bnVsbCE9b3QuZm9vdGVyKSYmJGkoRywiU2V0dXAiLGZ1bmN0aW9uIHJDKFMsUil7dmFyIGs9Ym4oMzQpLEc9ITEsUT03''@;'; put 'put ''MDtyZXR1cm4ibGFuZHNjYXBlIj09KFIucHJvcHN8fHt9KS5vcmllbnRhdGlvbiYmKEc9ITAsUSY9LTY3KSxHJiYoUSY9LTUpLGsud3JpdGVfc2hpZnQoMiwxKSxrLndyaXRlX3NoaWZ0KDIsMTAwKSxrLndyaXRlX3NoaWZ0KDIsMCksay53cml0ZV9zaGlmdCgyLDApLGsud3JpdGVfc2hpZnQo''@;'; put 'put ''MiwwKSxrLndyaXRlX3NoaWZ0KDEsUSksay53cml0ZV9zaGlmdCgxLDApLGsud3JpdGVfc2hpZnQoMiw2MDApLGsud3JpdGVfc2hpZnQoMiw2MDApLEx1KG51bGw9PVMuaGVhZGVyPy41OlMuaGVhZGVyLGspLEx1KG51bGw9PVMuZm9vdGVyPy41OlMuZm9vdGVyLGspLGsud3JpdGVfc2hpZnQo''@;'; put 'put ''MiwxKSxrfShvdCxhZVsiIXByaW50Il18fHt9KSkpLFBlJiZmdW5jdGlvbiBreihTLFIsayl7aWYoUil7dmFyIEc9MDtSLmZvckVhY2goZnVuY3Rpb24oUSxhZSl7KytHPD0yNTYmJlEmJihRLmF1dG8mJm9TKGssUSxhZSksJGkoUywiQ29sSW5mbyIsZnVuY3Rpb24gWTYoUyxSKXt2YXIgaz1i''@;'; put 'put ''bigxMik7ay53cml0ZV9zaGlmdCgyLFIpLGsud3JpdGVfc2hpZnQoMixSKSxrLndyaXRlX3NoaWZ0KDIsMjU2KlMud2lkdGgpLGsud3JpdGVfc2hpZnQoMiwwKTt2YXIgRz0wO3JldHVybiBTLmhpZGRlbiYmKEd8PTEpLGsud3JpdGVfc2hpZnQoMSxHKSxrLndyaXRlX3NoaWZ0KDEsRz1TLmxl''@;'; put 'put ''dmVsfHwwKSxrLndyaXRlX3NoaWZ0KDIsMCksa30obDgoYWUsUSksYWUpKSl9KX19KEcsYWVbIiFjb2xzIl0sYWUpLCRpKEcsIkRpbWVuc2lvbnMiLGZ1bmN0aW9uIHpBKFMsUil7dmFyIGs9OCE9Ui5iaWZmJiZSLmJpZmY/Mjo0LEc9Ym4oMiprKzYpO3JldHVybiBHLndyaXRlX3NoaWZ0KGss''@;'; put 'put ''Uy5zLnIpLEcud3JpdGVfc2hpZnQoayxTLmUucisxKSxHLndyaXRlX3NoaWZ0KDIsUy5zLmMpLEcud3JpdGVfc2hpZnQoMixTLmUuYysxKSxHLndyaXRlX3NoaWZ0KDIsMCksR30odXQsUikpLFBlJiYoYWVbIiFsaW5rcyJdPVtdKSxhZVsiIXJvd3MiXSYmUGUmJmFlWyIhcm93cyJdLmZvckVh''@;'; put 'put ''Y2goZnVuY3Rpb24oS3QsVG4pe2Zvcih2YXIgaXI9emkoVG4pLFNuPTI1Nixzcj0wLEpuPUt0LnM/MTYrczAoUi5jZWxsWGZzLFIuY2VsbFN0eWxlWGZzLHt0OiJuIix2OjAsczpLdC5zfSxSKTowLFZuPXV0LnMuYztWbjw9dXQuZS5jOysrVm4pKHllPyhhZVtUbl18fFtdKVtWbl06YWVbZXRb''@;'; put 'put ''Vm5dK2lyXSkmJihWbjxTbiYmKFNuPVZuKSxWbj5zciYmKHNyPVZuKSk7c3I8U24mJihTbj1zcj0wKSwkaShHLCJSb3ciLGZ1bmN0aW9uIHB0KFMsUixrKXt2YXIgRz1ibigxNik7Ry53cml0ZV9zaGlmdCgyLFIpLEcud3JpdGVfc2hpZnQoMixrWzBdKSxHLndyaXRlX3NoaWZ0KDIsa1sxXSsx''@;'; put 'put ''KSxHLndyaXRlX3NoaWZ0KDIsMjAqUy5ocHR8fDIwKk4zKFMuaHB4KXx8MzMwKSxHLndyaXRlX3NoaWZ0KDQsMCk7dmFyIFE9MDtyZXR1cm4gUXw9MHxTLmxldmVsLFMuaGlkZGVuJiYoUXw9MzIpLFF8PTY0LGtbMl0mJihRfD0xMjgpLEcud3JpdGVfc2hpZnQoMSxRKSxHLndyaXRlX3NoaWZ0''@;'; put 'put ''KDEsMSksRy53cml0ZV9zaGlmdCgyLGtbMl18fDApLEd9KEt0LFRuLFtTbixzcixKbl0pKX0pO2Zvcih2YXIgYnQ9dXQucy5yO2J0PD11dC5lLnI7KytidCl7WWU9emkoYnQpO2Zvcih2YXIgQnQ9dXQucy5jO0J0PD11dC5lLmM7KytCdCl7YnQ9PT11dC5zLnImJihldFtCdF09VG8oQnQpKSxO''@;'; put 'put ''ZT1ldFtCdF0rWWU7dmFyIGt0PXllPyhhZVtidF18fFtdKVtCdF06YWVbTmVdO2t0JiYoQm5lKEcsa3QsYnQsQnQsUiksUGUmJmt0LmwmJmFlWyIhbGlua3MiXS5wdXNoKFtOZSxrdC5sXSkpfX12YXIgT3Q9cGUuQ29kZU5hbWV8fHBlLm5hbWV8fFE7cmV0dXJuKFBlfHw1PT1SLmJpZmYmJmFl''@;'; put 'put ''WyIhZnJlZXplIl0pJiYkaShHLCJXaW5kb3cyIixmdW5jdGlvbiBXTihTLFIsayxHKXt2YXIgUT1HJiZHLmJpZmZ8fDgsYWU9Ym4oOD09UT8xODoxMCksZ2U9MTcxODtyZXR1cm4gaz4wJiYoZ2UmPS01MTMpLFp0KFJbIiFncmlkbGluZXMiXSkmJihnZSY9LTMpLFJbIiFmcmVlemUiXSYmKGdl''@;'; put 'put ''fD04KSxTJiZTLlJUTCYmKGdlfD02NCksNT09USYmKGdlPTQ0NiksYWUud3JpdGVfc2hpZnQoMixnZSksOD09UT8oYWUud3JpdGVfc2hpZnQoNCwwKSxhZS53cml0ZV9zaGlmdCg0LDY0KSxhZS53cml0ZV9zaGlmdCg0LDApLGFlLndyaXRlX3NoaWZ0KDQsMCkpOihhZS53cml0ZV9zaGlmdCg0''@;'; put 'put ''LDApLGFlLndyaXRlX3NoaWZ0KDQsMCkpLGFlfSgoZ2UuVmlld3N8fFtdKVswXSxhZSxTKSksKFBlfHw1PT1SLmJpZmYpJiZhZVsiIWZyZWV6ZSJdJiYkaShHLCJQYW5lIixmdW5jdGlvbiB5bChTKXsic3RyaW5nIj09dHlwZW9mIFMmJihTPU5hKFMpKTt2YXIgUj1ibigxMCk7cmV0dXJuIFIu''@;'; put 'put ''d3JpdGVfc2hpZnQoMixTLmMpLFIud3JpdGVfc2hpZnQoMixTLnIpLFIud3JpdGVfc2hpZnQoMixTLnIpLFIud3JpdGVfc2hpZnQoMixTLmMpLFIud3JpdGVfc2hpZnQoMSwzKSxSLndyaXRlX3NoaWZ0KDEsMCksUn0oYWVbIiFmcmVlemUiXSkpLFBlJiZhZVsiIXNlbCJdJiYkaShHLCJTZWxl''@;'; put 'put ''Y3Rpb24iLGZ1bmN0aW9uIEtBKFMsUil7dmFyIGs9Ym4oMTUpLEc9Uy5jZWxsO2lmKCFHKXtpZighUy5yYW5nZSl0aHJvdyBuZXcgRXJyb3IoIk11c3Qgc3BlY2lmeSBhIHNlbGVjdGlvbiBjZWxsIG9yIHJhbmdlIik7Rz1YaShTcyhTLnJhbmdlLnJlcGxhY2UoL1xzLiokLywiIikpLnMpfXZh''@;'; put 'put ''ciBRPSJzdHJpbmciPT10eXBlb2YgRz9OYShHKTpHO2lmKFIpe3ZhciBhZT0ic3RyaW5nIj09dHlwZW9mIFI/TmEoUik6UjtrLndyaXRlX3NoaWZ0KDEsUS5yPj1hZS5yJiZRLmM+PWFlLmM/MDpRLnI+PWFlLnImJlEuYzxhZS5jPzI6US5yPGFlLnImJlEuYz49YWUuYz8xOjMpfWVsc2Ugay53''@;'; put 'put ''cml0ZV9zaGlmdCgxLDMpO3JldHVybiBrLndyaXRlX3NoaWZ0KDIsUS5yKSxrLndyaXRlX3NoaWZ0KDIsUS5jKSxrLndyaXRlX3NoaWZ0KDIsMCksay53cml0ZV9zaGlmdCgyLDEpLGZ1bmN0aW9uIE8zKFMsUil7Unx8KFI9Ym4oNikpLFIud3JpdGVfc2hpZnQoMixTLnM/Uy5zLnI6Uy5yKSxS''@;'; put 'put ''LndyaXRlX3NoaWZ0KDIsUy5lP1MuZS5yOlMuciksUi53cml0ZV9zaGlmdCgxLFMucz9TLnMuYzpTLmMpLFIud3JpdGVfc2hpZnQoMSxTLmU/Uy5lLmM6Uy5jKX0oe3M6USxlOlF9LGspLGt9KGFlWyIhc2VsIl0sYWVbIiFmcmVlemUiXSkpLFBlJiYoYWVbIiFtZXJnZXMiXXx8W10pLmxlbmd0''@;'; put 'put ''aCYmJGkoRywiTWVyZ2VDZWxscyIsZnVuY3Rpb24gZVYoUyl7dmFyIFI9Ym4oMis4KlMubGVuZ3RoKTtSLndyaXRlX3NoaWZ0KDIsUy5sZW5ndGgpO2Zvcih2YXIgaz0wO2s8Uy5sZW5ndGg7KytrKW11KFNba10sUik7cmV0dXJuIFJ9KGFlWyIhbWVyZ2VzIl0pKSxQZSYmZnVuY3Rpb24gUjgo''@;'; put 'put ''UyxSKXtmb3IodmFyIGs9MDtrPFJbIiFsaW5rcyJdLmxlbmd0aDsrK2spe3ZhciBHPVJbIiFsaW5rcyJdW2tdOyRpKFMsIkhMaW5rIixyVihHKSksR1sxXS5Ub29sdGlwJiYkaShTLCJITGlua1Rvb2x0aXAiLG9WKEcpKX1kZWxldGUgUlsiIWxpbmtzIl19KEcsYWUpLCRpKEcsIkNvZGVOYW1l''@;'; put 'put ''IixzbChPdCkpLFBlJiZmdW5jdGlvbiBBeihTLFIpe3ZhciBrPWJuKDE5KTtrLndyaXRlX3NoaWZ0KDQsMjE1MSksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoNCwwKSxrLndyaXRlX3NoaWZ0KDIsMyksay53cml0ZV9zaGlmdCgxLDEpLGsud3JpdGVfc2hpZnQoNCwwKSwkaShT''@;'; put 'put ''LCJGZWF0SGRyIixrKSwoaz1ibigzOSkpLndyaXRlX3NoaWZ0KDQsMjE1Miksay53cml0ZV9zaGlmdCg0LDApLGsud3JpdGVfc2hpZnQoNCwwKSxrLndyaXRlX3NoaWZ0KDIsMyksay53cml0ZV9zaGlmdCgxLDApLGsud3JpdGVfc2hpZnQoNCwwKSxrLndyaXRlX3NoaWZ0KDIsMSksay53cml0''@;'; put 'put ''ZV9zaGlmdCg0LDQpLGsud3JpdGVfc2hpZnQoMiwwKSxtdShhYShSWyIhcmVmIl18fCJBMSIpLGspLGsud3JpdGVfc2hpZnQoNCw0KSwkaShTLCJGZWF0IixrKX0oRyxhZSksJGkoRywiRU9GIiksRy5lbmQoKX1mdW5jdGlvbiBEeihTLFIsayl7dmFyIEc9bWkoKSxRPShTfHx7fSkuV29ya2Jv''@;'; put 'put ''b2t8fHt9LGFlPVEuU2hlZXRzfHxbXSxnZT1RLldCUHJvcHN8fHt9LHBlPTg9PWsuYmlmZix5ZT01PT1rLmJpZmY7JGkoRywyMDU3LEM0KDAsNSxrKSksInhsYSI9PWsuYm9va1R5cGUmJiRpKEcsIkFkZGluIiksJGkoRywiSW50ZXJmYWNlSGRyIixwZT9yMCgxMjAwKTpudWxsKSwkaShHLCJN''@;'; put 'put ''bXMiLGZ1bmN0aW9uIFl3KFMsUil7Unx8KFI9Ym4oUykpO2Zvcih2YXIgaz0wO2s8UzsrK2spUi53cml0ZV9zaGlmdCgxLDApO3JldHVybiBSfSgyKSkseWUmJiRpKEcsIlRvb2xiYXJIZHIiKSx5ZSYmJGkoRywiVG9vbGJhckVuZCIpLCRpKEcsIkludGVyZmFjZUVuZCIpLCRpKEcsIldyaXRl''@;'; put 'put ''QWNjZXNzIixmdW5jdGlvbiBqNihTLFIpe3ZhciBrPSFSfHw4PT1SLmJpZmYsRz1ibihrPzExMjo1NCk7Zm9yKEcud3JpdGVfc2hpZnQoOD09Ui5iaWZmPzI6MSw3KSxrJiZHLndyaXRlX3NoaWZ0KDEsMCksRy53cml0ZV9zaGlmdCg0LDg1OTAwNzA1OSksRy53cml0ZV9zaGlmdCg0LDU0NTg1''@;'; put 'put ''NDh8KGs/MDo1MzY4NzA5MTIpKTtHLmw8Ry5sZW5ndGg7KUcud3JpdGVfc2hpZnQoMSxrPzA6MzIpO3JldHVybiBHfSgwLGspKSwkaShHLCJDb2RlUGFnZSIscjAocGU/MTIwMDoxMjUyKSkscGUmJiRpKEcsIkRTRiIscjAoMCkpLHBlJiYkaShHLCJFeGNlbDlGaWxlIiksJGkoRywiUlJUYWJJ''@;'; put 'put ''ZCIsZnVuY3Rpb24gc1YoUyl7Zm9yKHZhciBSPWJuKDIqUyksaz0wO2s8UzsrK2spUi53cml0ZV9zaGlmdCgyLGsrMSk7cmV0dXJuIFJ9KFMuU2hlZXROYW1lcy5sZW5ndGgpKSxwZSYmUy52YmFyYXcmJiRpKEcsIk9iUHJvaiIpLHBlJiZTLnZiYXJhdyYmJGkoRywiQ29kZU5hbWUiLHNsKGdl''@;'; put 'put ''LkNvZGVOYW1lfHwiVGhpc1dvcmtib29rIikpLCRpKEcsIkJ1aWx0SW5Gbkdyb3VwQ291bnQiLHIwKDE3KSksJGkoRywiV2luUHJvdGVjdCIsZXUoITEpKSwkaShHLCJQcm90ZWN0IixldSghMSkpLCRpKEcsIlBhc3N3b3JkIixyMCgwKSkscGUmJiRpKEcsIlByb3Q0UmV2IixldSghMSkpLHBl''@;'; put 'put ''JiYkaShHLCJQcm90NFJldlBhc3MiLHIwKDApKSwkaShHLCJXaW5kb3cxIixmdW5jdGlvbiBOdGUoKXt2YXIgUz1ibigxOCk7cmV0dXJuIFMud3JpdGVfc2hpZnQoMiwwKSxTLndyaXRlX3NoaWZ0KDIsMCksUy53cml0ZV9zaGlmdCgyLDI5MjgwKSxTLndyaXRlX3NoaWZ0KDIsMTc2MDApLFMu''@;'; put 'put ''d3JpdGVfc2hpZnQoMiw1NiksUy53cml0ZV9zaGlmdCgyLDApLFMud3JpdGVfc2hpZnQoMiwwKSxTLndyaXRlX3NoaWZ0KDIsMSksUy53cml0ZV9zaGlmdCgyLDUwMCksU30oKSksJGkoRywiQmFja3VwIixldSghMSkpLCRpKEcsIkhpZGVPYmoiLHIwKDApKSwkaShHLCJEYXRlMTkwNCIsZXUo''@;'; put 'put ''InRydWUiPT1mdW5jdGlvbiBQUyhTKXtyZXR1cm4gUy5Xb3JrYm9vayYmUy5Xb3JrYm9vay5XQlByb3BzJiZlaShTLldvcmtib29rLldCUHJvcHMuZGF0ZTE5MDQpPyJ0cnVlIjoiZmFsc2UifShTKSkpLCRpKEcsIkNhbGNQcmVjaXNpb24iLGV1KCEwKSkscGUmJiRpKEcsIlJlZnJlc2hBbGwi''@;'; put 'put ''LGV1KCExKSksJGkoRywiQm9va0Jvb2wiLHIwKDApKSxuMD1rNihbMCwxNjc3NzIxNSwxNjcxMTY4MCw2NTI4MCwyNTUsMTY3NzY5NjAsMTY3MTE5MzUsNjU1MzUsMCwxNjc3NzIxNSwxNjcxMTY4MCw2NTI4MCwyNTUsMTY3NzY5NjAsMTY3MTE5MzUsNjU1MzVdKSxmdW5jdGlvbiBObmUoUyxS''@;'; put 'put ''LGspeygoKFJ8fHt9KS5TdHlsZXN8fHt9KS5Gb250c3x8W3tzejoxMixjb2xvcjp7dGhlbWU6MX0sbmFtZToiQXJpYWwiLGZhbWlseToyLHNjaGVtZToibWlub3IifV0pLmZvckVhY2goZnVuY3Rpb24oRyl7JGkoUywiRm9udCIsZnVuY3Rpb24gWU4oUyxSKXt2YXIgaz1TLm5hbWV8fCJBcmlh''@;'; put 'put ''bCIsRz1SJiY1PT1SLmJpZmYsYWU9Ym4oRz8xNStrLmxlbmd0aDoxNisyKmsubGVuZ3RoKTthZS53cml0ZV9zaGlmdCgyLDIwKihTLnN6fHwxMikpO3ZhciBnZT0wO3JldHVybiBTLmJvbGQmJihnZXw9MSksUy5pdGFsaWMmJihnZXw9MiksUy5zdHJpa2UmJihnZXw9OCksUy5zaGFkb3cmJihn''@;'; put 'put ''ZXw9MzIpLGFlLndyaXRlX3NoaWZ0KDEsZ2UpLGFlLndyaXRlX3NoaWZ0KDEsMCksYWUud3JpdGVfc2hpZnQoMixTLmNvbG9yP1I0KFMuY29sb3IsNjQpOjY0KSxhZS53cml0ZV9zaGlmdCgyLFMuYm9sZD83MDA6NDAwKSxhZS53cml0ZV9zaGlmdCgyLCJzdXBlciI9PVMudmFsaWduPzE6InN1''@;'; put 'put ''YiI9PVMudmFsaWduPzI6MCksYWUud3JpdGVfc2hpZnQoMSxTLnVuZGVybGluZXx8MCksYWUud3JpdGVfc2hpZnQoMSxhZS5mYW1pbHl8fDApLGFlLndyaXRlX3NoaWZ0KDEsYWUuY2hhcnNldHx8MCksYWUud3JpdGVfc2hpZnQoMSwwKSxhZS53cml0ZV9zaGlmdCgxLGsubGVuZ3RoKSxHfHxh''@;'; put 'put ''ZS53cml0ZV9zaGlmdCgxLDEpLGFlLndyaXRlX3NoaWZ0KChHPzE6Mikqay5sZW5ndGgsayxHPyJzYmNzIjoidXRmMTZsZSIpLGFlfShHLGspKX0pfShHLFMsayksZnVuY3Rpb24gVm5lKFMsUixrKXtSJiZbWzUsOF0sWzIzLDI2XSxbNDEsNDRdLFs1MCwzOTJdXS5mb3JFYWNoKGZ1bmN0aW9u''@;'; put 'put ''KEcpe2Zvcih2YXIgUT1HWzBdO1E8PUdbMV07KytRKW51bGwhPVJbUV0mJiRpKFMsIkZvcm1hdCIsS04oUSxSW1FdLGspKX0pfShHLFMuU1NGLGspLGZ1bmN0aW9uIFo1KFMsUil7Zm9yKHZhciBrPTA7azwxNjsrK2spJGkoUywiWEYiLG01KHtudW1GbXRJZDowLHN0eWxlOiEwfSwwLFIpKTtS''@;'; put 'put ''LmNlbGxYZnMuZm9yRWFjaChmdW5jdGlvbihHKXskaShTLCJYRiIsbTUoRywwLFIpKX0pfShHLGspLCRpKEcsIlBhbGV0dGUiLGZ1bmN0aW9uIEN0KFMpe3ZhciBSPWJuKDIyNik7Ui53cml0ZV9zaGlmdCgyLDU2KTtmb3IodmFyIGs9MDtrPDU2Oysrayl7dmFyIEc9U1trKzhdfHxwNFtrKzhd''@;'; put 'put ''O1Iud3JpdGVfc2hpZnQoMSxHWzBdKSxSLndyaXRlX3NoaWZ0KDEsR1sxXSksUi53cml0ZV9zaGlmdCgxLEdbMl0pLFIud3JpdGVfc2hpZnQoMSwwKX1yZXR1cm4gUn0objApKSxuMD1xdChwNCkscGUmJiRpKEcsIlVzZXNFTEZzIixldSghMSkpO3ZhciBOZT1HLmVuZCgpLFllPW1pKCk7cGUm''@;'; put 'put ''JiRpKFllLCJDb3VudHJ5IixmdW5jdGlvbiB1aShTKXtyZXR1cm4gU3x8KFM9Ym4oNCkpLFMud3JpdGVfc2hpZnQoMiwxKSxTLndyaXRlX3NoaWZ0KDIsMSksU30oKSkscGUmJmsuU3RyaW5ncyYmZnVuY3Rpb24gUm5lKFMsUixrLEcpe3ZhciBRPUd8fChrfHxbXSkubGVuZ3RofHwwO2lmKFE8''@;'; put 'put ''PTgyMjQpcmV0dXJuICRpKFMsUixrLFEpO3ZhciBhZT0rUnx8K0tTW1JdO2lmKCFpc05hTihhZSkpe2Zvcih2YXIgZ2U9ay5wYXJ0c3x8W10scGU9MCx5ZT0wLFBlPTA7UGUrKGdlW3BlXXx8ODIyNCk8PTgyMjQ7KVBlKz1nZVtwZV18fDgyMjQscGUrKzt2YXIgTmU9Uy5uZXh0KDQpO2ZvcihO''@;'; put 'put ''ZS53cml0ZV9zaGlmdCgyLGFlKSxOZS53cml0ZV9zaGlmdCgyLFBlKSxTLnB1c2goay5zbGljZSh5ZSx5ZStQZSkpLHllKz1QZTt5ZTxROyl7Zm9yKChOZT1TLm5leHQoNCkpLndyaXRlX3NoaWZ0KDIsNjApLFBlPTA7UGUrKGdlW3BlXXx8ODIyNCk8PTgyMjQ7KVBlKz1nZVtwZV18fDgyMjQs''@;'; put 'put ''cGUrKztOZS53cml0ZV9zaGlmdCgyLFBlKSxTLnB1c2goay5zbGljZSh5ZSx5ZStQZSkpLHllKz1QZX19fShZZSwiU1NUIixmdW5jdGlvbiBtcyhTLFIpe3ZhciBrPWJuKDgpO2sud3JpdGVfc2hpZnQoNCxTLkNvdW50KSxrLndyaXRlX3NoaWZ0KDQsUy5VbmlxdWUpO2Zvcih2YXIgRz1bXSxR''@;'; put 'put ''PTA7UTxTLmxlbmd0aDsrK1EpR1tRXT1IYyhTW1FdLFIpO3ZhciBhZT1qKFtrXS5jb25jYXQoRykpO3JldHVybiBhZS5wYXJ0cz1bay5sZW5ndGhdLmNvbmNhdChHLm1hcChmdW5jdGlvbihnZSl7cmV0dXJuIGdlLmxlbmd0aH0pKSxhZX0oay5TdHJpbmdzLGspKSwkaShZZSwiRU9GIik7dmFy''@;'; put 'put ''IGV0PVllLmVuZCgpLHV0PW1pKCksRXQ9MCxvdD0wO2ZvcihvdD0wO290PFMuU2hlZXROYW1lcy5sZW5ndGg7KytvdClFdCs9KHBlPzEyOjExKSsocGU/MjoxKSpTLlNoZWV0TmFtZXNbb3RdLmxlbmd0aDt2YXIgYnQ9TmUubGVuZ3RoK0V0K2V0Lmxlbmd0aDtmb3Iob3Q9MDtvdDxTLlNoZWV0''@;'; put 'put ''TmFtZXMubGVuZ3RoOysrb3QpJGkodXQsIkJvdW5kU2hlZXQ4IixuMih7cG9zOmJ0LGhzOihhZVtvdF18fHt9KS5IaWRkZW58fDAsZHQ6MCxuYW1lOlMuU2hlZXROYW1lc1tvdF19LGspKSxidCs9UltvdF0ubGVuZ3RoO3ZhciBrdD11dC5lbmQoKTtpZihFdCE9a3QubGVuZ3RoKXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiQlM4ICIrRXQrIiAhPSAiK2t0Lmxlbmd0aCk7dmFyIE90PVtdO3JldHVybiBOZS5sZW5ndGgmJk90LnB1c2goTmUpLGt0Lmxlbmd0aCYmT3QucHVzaChrdCksZXQubGVuZ3RoJiZPdC5wdXNoKGV0KSx5MChbT3RdKX1mdW5jdGlvbiB5SShTLFIpe3ZhciBrPVJ8fHt9O3N3aXRj''@;'; put 'put ''aChrLmJpZmZ8fDIpe2Nhc2UgODpjYXNlIDU6cmV0dXJuIGZ1bmN0aW9uIGpuZShTLFIpe3ZhciBrPVJ8fHt9LEc9W107eGYoUiYmUi5QUEl8fDk2KSxTJiYhUy5TU0YmJihTLlNTRj1BLmdldF90YWJsZSgpKSxTJiZTLlNTRiYmKG9lKEEpLEEubG9hZF90YWJsZShTLlNTRiksay5yZXZzc2Y9''@;'; put 'put ''a2UoUy5TU0YpLGsucmV2c3NmW1MuU1NGWzY1NTM1XV09MCxrLnNzZj1TLlNTRiksUy5TdHlsZXM9e0ZvbnRzOmsuRm9udHM9W3tzejoxMixjb2xvcjp7dGhlbWU6MSxyZ2I6IjAwMDAwMCJ9LG5hbWU6IkNhbGlicmkiLGZhbWlseToyLHNjaGVtZToibWlub3IifV0sRmlsbHM6ay5GaWxscz1b''@;'; put 'put ''e3BhdHRlcm5UeXBlOiJub25lIn0se3BhdHRlcm5UeXBlOiJncmF5MTI1In1dLEJvcmRlcnM6ay5Cb3JkZXJzPVt7fV0sRFhGOmsuRFhGPVMuU3R5bGVzJiZTLlN0eWxlcy5EWEZ8fFtdfSxBNChrLkZvbnRzWzBdKSxrLlN0cmluZ3M9W10say5TdHJpbmdzLkNvdW50PTAsay5TdHJpbmdzLlVu''@;'; put 'put ''aXF1ZT0wLFczP2sucmV2U3RyaW5ncz1uZXcgTWFwOihrLnJldlN0cmluZ3M9e30say5yZXZTdHJpbmdzLmZvbz1bXSxkZWxldGUgay5yZXZTdHJpbmdzLmZvbyksa2Yoayksay5jZWxsWGZzPVtdLGsuY2VsbFN0eWxlWGZzPVt7bmFtZToiTm9ybWFsIn1dLHMwKGsuY2VsbFhmcyxrLmNlbGxT''@;'; put 'put ''dHlsZVhmcyx7fSx7cmV2c3NmOntHZW5lcmFsOjB9fSksUy5Qcm9wc3x8KFMuUHJvcHM9e30pO2Zvcih2YXIgUT0wO1E8Uy5TaGVldE5hbWVzLmxlbmd0aDsrK1EpR1tHLmxlbmd0aF09YkkoUSxrLFMpO3JldHVybiBHLnVuc2hpZnQoRHooUyxHLGspKSx5MChbR10pfShTLFIpO2Nhc2UgNDpj''@;'; put 'put ''YXNlIDM6Y2FzZSAyOnJldHVybiBmdW5jdGlvbiBIbmUoUyxSKXt2YXIgaz1SfHx7fTtudWxsIT1sZSYmbnVsbD09ay5kZW5zZSYmKGsuZGVuc2U9bGUpO2Zvcih2YXIgRz1taSgpLFE9MCxhZT0wO2FlPFMuU2hlZXROYW1lcy5sZW5ndGg7KythZSlTLlNoZWV0TmFtZXNbYWVdPT1rLnNoZWV0''@;'; put 'put ''JiYoUT1hZSk7aWYoMD09USYmay5zaGVldCYmUy5TaGVldE5hbWVzWzBdIT1rLnNoZWV0KXRocm93IG5ldyBFcnJvcigiU2hlZXQgbm90IGZvdW5kOiAiK2suc2hlZXQpO3JldHVybiAkaShHLDQ9PWsuYmlmZj8xMDMzOjM9PWsuYmlmZj81MjE6OSxDNCgwLDE2LGspKSxmdW5jdGlvbiBGbmUo''@;'; put 'put ''UyxSLGssRyl7dmFyIGdlLFE9QXJyYXkuaXNBcnJheShSKSxhZT1hYShSWyIhcmVmIl18fCJBMSIpLHBlPSIiLHllPVtdO2lmKGFlLmUuYz4yNTV8fGFlLmUucj4xNjM4Myl7aWYoRy5XVEYpdGhyb3cgbmV3IEVycm9yKCJSYW5nZSAiKyhSWyIhcmVmIl18fCJBMSIpKyIgZXhjZWVkcyBmb3Jt''@;'; put 'put ''YXQgbGltaXQgQTE6SVYxNjM4NCIpO2FlLmUuYz1NYXRoLm1pbihhZS5lLmMsMjU1KSxhZS5lLnI9TWF0aC5taW4oYWUuZS5jLDE2MzgzKSxnZT1vbyhhZSl9Zm9yKHZhciBQZT1hZS5zLnI7UGU8PWFlLmUucjsrK1BlKXtwZT16aShQZSk7Zm9yKHZhciBOZT1hZS5zLmM7TmU8PWFlLmUuYzsr''@;'; put 'put ''K05lKXtQZT09PWFlLnMuciYmKHllW05lXT1UbyhOZSkpLGdlPXllW05lXStwZTt2YXIgWWU9UT8oUltQZV18fFtdKVtOZV06UltnZV07WWUmJlBuZShTLFllLFBlLE5lKX19fShHLFMuU2hlZXRzW1MuU2hlZXROYW1lc1tRXV0sMCxrKSwkaShHLDEwKSxHLmVuZCgpfShTLFIpfXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiaW52YWxpZCB0eXBlICIray5ib29rVHlwZSsiIGZvciBCSUZGIil9dmFyIG1kPWZ1bmN0aW9uKCl7dmFyIFM9e2NlbnRlckNvbnRpbnVvdXM6ImNlbnRlciIsanVzdGlmeToibGVmdCJ9O2Z1bmN0aW9uIGsoWWUsZXQpe3ZhciB1dD1ldHx8e307bnVsbCE9bGUmJm51bGw9PXV0''@;'; put 'put ''LmRlbnNlJiYodXQuZGVuc2U9bGUpO3ZhciBFdD11dC5kZW5zZT9bXTp7fSxvdD0oWWU9WWUucmVwbGFjZSgvPCEtLS4qPy0tPi9nLCIiKSkubWF0Y2goLzx0YWJsZS9pKTtpZighb3QpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIEhUTUw6IGNvdWxkIG5vdCBmaW5kIDx0YWJsZT4iKTt2YXIg''@;'; put 'put ''YnQ9WWUubWF0Y2goLzxcL3RhYmxlL2kpLEJ0PW90LmluZGV4LGt0PWJ0JiZidC5pbmRleHx8WWUubGVuZ3RoLE90PWZ1bmN0aW9uIGZ0KFMsUixrKXtpZihmbnx8InN0cmluZyI9PXR5cGVvZiBSKXJldHVybiBTLnNwbGl0KFIpO2Zvcih2YXIgRz1TLnNwbGl0KFIpLFE9W0dbMF1dLGFlPTE7''@;'; put 'put ''YWU8Ry5sZW5ndGg7KythZSlRLnB1c2goayksUS5wdXNoKEdbYWVdKTtyZXR1cm4gUX0oWWUuc2xpY2UoQnQsa3QpLC8oOj88dHJbXj5dKj4pL2ksIjx0cj4iKSxLdD0tMSxUbj0wLGlyPTAsU249MCxzcj17czp7cjoxZTcsYzoxZTd9LGU6e3I6MCxjOjB9fSxKbj1bXTtmb3IoQnQ9MDtCdDxP''@;'; put 'put ''dC5sZW5ndGg7KytCdCl7dmFyIFZuPU90W0J0XS50cmltKCksdXI9Vm4uc2xpY2UoMCwzKS50b0xvd2VyQ2FzZSgpO2lmKCI8dHIiIT11cil7aWYoIjx0ZCI9PXVyfHwiPHRoIj09dXIpe3ZhciBncj1Wbi5zcGxpdCgvPFwvdFtkaF0+L2kpO2ZvcihrdD0wO2t0PGdyLmxlbmd0aDsrK2t0KXt2''@;'; put 'put ''YXIgdHI9Z3Jba3RdLnRyaW0oKTtpZih0ci5tYXRjaCgvPHRbZGhdL2kpKXtmb3IodmFyIENpPXRyLEZpPTA7IjwiPT1DaS5jaGFyQXQoMCkmJihGaT1DaS5pbmRleE9mKCI+IikpPi0xOylDaT1DaS5zbGljZShGaSsxKTtmb3IodmFyIGlvPTA7aW88Sm4ubGVuZ3RoOysraW8pe3ZhciB1bz1K''@;'; put 'put ''bltpb107dW8ucy5jPT1UbiYmdW8ucy5yPEt0JiZLdDw9dW8uZS5yJiYoVG49dW8uZS5jKzEsaW89LTEpfXZhciBMaT1wcih0ci5zbGljZSgwLHRyLmluZGV4T2YoIj4iKSkpO1NuPUxpLmNvbHNwYW4/K0xpLmNvbHNwYW46MSwoKGlyPStMaS5yb3dzcGFuKT4xfHxTbj4xKSYmSm4ucHVzaCh7''@;'; put 'put ''czp7cjpLdCxjOlRufSxlOntyOkt0Kyhpcnx8MSktMSxjOlRuK1NuLTF9fSk7dmFyIERyPUxpLnR8fExpWyJkYXRhLXQiXXx8IiI7aWYoIUNpLmxlbmd0aCl7VG4rPVNuO2NvbnRpbnVlfWlmKENpPW9yKENpKSxzci5zLnI+S3QmJihzci5zLnI9S3QpLHNyLmUucjxLdCYmKHNyLmUucj1LdCks''@;'; put 'put ''c3Iucy5jPlRuJiYoc3Iucy5jPVRuKSxzci5lLmM8VG4mJihzci5lLmM9VG4pLENpLmxlbmd0aCl7dmFyIE5uPXt0OiJzIix2OkNpfTt1dC5yYXd8fCFDaS50cmltKCkubGVuZ3RofHwicyI9PURyfHwoTm49UmkoQ2ksdXQpKSx1dC5kZW5zZT8oRXRbS3RdfHwoRXRbS3RdPVtdKSxFdFtLdF1b''@;'; put 'put ''VG5dPU5uKTpFdFtYaSh7cjpLdCxjOlRufSldPU5uLFRuKz1Tbn19fX19ZWxzZXtpZigrK0t0LHV0LnNoZWV0Um93cyYmdXQuc2hlZXRSb3dzPD1LdCl7LS1LdDticmVha31Ubj0wfX1yZXR1cm4gRXRbIiFyZWYiXT1vbyhzciksSm4ubGVuZ3RoJiYoRXRbIiFtZXJnZXMiXT1KbiksRXR9ZnVu''@;'; put 'put ''Y3Rpb24gUShZZSxldCx1dCxFdCxvdCxidCl7dmFyIE90LEJ0PVllWyIhbWVyZ2VzIl18fFtdLGt0PVtdLEt0PXtzdHlsZTpbXX0sVG49ITE7ZnVuY3Rpb24gaXIoYW8sUmEsUG8pe3ZhciBoYT0iIixKbz0wO2lmKE90W2FvXSlzd2l0Y2goT3RbYW9dLnN0eWxlKXtjYXNlInRoaW4iOmNhc2Ui''@;'; put 'put ''aGFpciI6aGE9InNvbGlkIixKbz0xO2JyZWFrO2Nhc2UibWVkaXVtIjpoYT0ic29saWQiLEpvPTI7YnJlYWs7Y2FzZSJ0aGljayI6aGE9InNvbGlkIixKbz0zO2JyZWFrO2Nhc2UiZG91YmxlIjpoYT0iZG91YmxlIixKbz0zO2JyZWFrO2Nhc2UiZG90dGVkIjpjYXNlImRhc2hEb3REb3QiOmhh''@;'; put 'put ''PSJkb3R0ZWQiLEpvPTE7YnJlYWs7Y2FzZSJtZWRpdW1EYXNoRG90RG90IjpoYT0iZG90dGVkIixKbz0yO2JyZWFrO2Nhc2UiZGFzaGVkIjpjYXNlImRhc2hEb3QiOmNhc2Uic2xhbnREYXNoRG90IjpoYT0iZGFzaGVkIixKbz0xO2JyZWFrO2Nhc2UibWVkaXVtRGFzaGVkIjpjYXNlIm1lZGl1''@;'; put 'put ''bURhc2hEb3QiOmhhPSJkYXNoZWQiLEpvPTJ9ZTppZigwPT1Kbyl7c3dpdGNoKGFvKXtjYXNlInRvcCI6LS1SYTticmVhaztjYXNlImxlZnQiOi0tUG87YnJlYWs7Y2FzZSJib3R0b20iOisrUmE7YnJlYWs7Y2FzZSJyaWdodCI6KytQb312YXIgamk9UmE+PTAmJlBvPj0wP0V0LmRlbnNlPyhZ''@;'; put 'put ''ZVtSYV18fFtdKVtQb106WWVbWGkoe3I6UmEsYzpQb30pXTpudWxsO2lmKGppKXtpZihqaS5zJiZqaS5zW3t0b3A6ImJvdHRvbSIsYm90dG9tOiJ0b3AiLGxlZnQ6InJpZ2h0IixyaWdodDoibGVmdCJ9W2FvXV0pYnJlYWsgZTtqaS5zJiZqaS5zLmZnQ29sb3ImJihKbz0xKX1PdC5mZ0NvbG9y''@;'; put 'put ''JiYoSm89MSksIWppJiZUbiYmMD09Sm8mJihKbz0xKX0wIT1KbyYmSm8mJihLdC5zdHlsZS5wdXNoKCJib3JkZXItIithbysiLXN0eWxlOiIrKGhhfHwidHJhbnNwYXJlbnQiKSksS3Quc3R5bGUucHVzaCgiYm9yZGVyLSIrYW8rIi13aWR0aDoiK0pvKyJweCIpLCIiPT1oYT9LdC5zdHlsZS5w''@;'; put 'put ''dXNoKCJib3JkZXItIithbysiLWNvbG9yOiB0cmFuc3BhcmVudCIpOk90W2FvXS5jb2xvciYmT3RbYW9dLmNvbG9yLnJnYiYmS3Quc3R5bGUucHVzaCgiYm9yZGVyLSIrYW8rIi1jb2xvcjojIitQMChPdFthb10uY29sb3IucmdiKSkpfWZvcih2YXIgU249ZXQucy5jO1NuPD1ldC5lLmM7KytT''@;'; put 'put ''bil7Zm9yKHZhciBzcj0wLEpuPTAsVm49MDtWbjxCdC5sZW5ndGg7KytWbilpZighKEJ0W1ZuXS5zLnI+dXR8fEJ0W1ZuXS5zLmM+U258fEJ0W1ZuXS5lLnI8dXR8fEJ0W1ZuXS5lLmM8U24pKXtpZihCdFtWbl0ucy5yPHV0fHxCdFtWbl0ucy5jPFNuKXtzcj0tMTticmVha31zcj1CdFtWbl0u''@;'; put 'put ''ZS5yLUJ0W1ZuXS5zLnIrMSxKbj1CdFtWbl0uZS5jLUJ0W1ZuXS5zLmMrMTticmVha31pZighKHNyPDApKXt2YXIgdXI9WGkoe3I6dXQsYzpTbn0pLGdyPUV0LmRlbnNlPyhZZVt1dF18fFtdKVtTbl06WWVbdXJdO2dyP1RuPSExOihUbj0hMCxncj17dDoieiIsczp7fX0pO3ZhciB0cj0ieiI9''@;'; put 'put ''PWdyLnQ/IiI6Z3IuaHx8Y28oZ3Iud3x8KGJsKGdyKSxnci53KXx8IiIpO2lmKEt0PXtzdHlsZTpbXX0sT3Q9Z3Iucyl7dmFyIENpPTE7aWYoKCJzdXBlciI9PU90LnZhbGlnbnx8InN1YiI9PU90LnZhbGlnbikmJihDaT0uODMsdHI9RnIoInNwYW4iLHRyLHtzdHlsZToidmVydGljYWwtYWxp''@;'; put 'put ''Z246ICIrT3QudmFsaWdufSkpLEt0LnN0eWxlLnB1c2goImZvbnQtd2VpZ2h0OiIrKE90LmJvbGQ/NzAwOjQwMCkpLE90Lml0YWxpYyYmS3Quc3R5bGUucHVzaCgiZm9udC1zdHlsZTogaXRhbGljIiksKE90LnVuZGVybGluZXx8T3Quc3RyaWtlKSYmS3Quc3R5bGUucHVzaCgidGV4dC1kZWNv''@;'; put 'put ''cmF0aW9uOiIrKE90LnVuZGVybGluZT8iIHVuZGVybGluZSI6IiIpKyhPdC5zdHJpa2U/IiBsaW5lLXRocm91Z2giOiIiKSksT3QuY29sb3ImJk90LmNvbG9yLnJnYiYmS3Quc3R5bGUucHVzaCgiY29sb3I6ICMiK1AwKE90LmNvbG9yLnJnYikpLE90Lm5hbWUmJkt0LnN0eWxlLnB1c2goImZv''@;'; put 'put ''bnQtZmFtaWx5OiIrT3QubmFtZSsiLCBzYW5zLXNlcmlmIiksT3Quc3omJkt0LnN0eWxlLnB1c2goImZvbnQtc2l6ZToiK090LnN6KkNpKyJwdCIpLG51bGwhPT1PdC5wYXR0ZXJuVHlwZSYmT3QuZmdDb2xvciYmT3QuZmdDb2xvci5yZ2ImJkt0LnN0eWxlLnB1c2goImJhY2tncm91bmQtY29s''@;'; put 'put ''b3I6ICMiK1AwKE90LmZnQ29sb3IucmdiKSksWyJ0b3AiLCJsZWZ0Il0uZm9yRWFjaChmdW5jdGlvbihhbyl7aXIoYW8sdXQsU24pfSksc3I+MXx8Sm4+MSl7dmFyIEZpPVhpKHtyOnV0K3NyLTEsYzpTbitKbi0xfSksaW89RXQuZGVuc2U/KFllW3V0K3NyLTFdfHxbXSlbU24rSm4tMV06WWVb''@;'; put 'put ''RmldLExpPU90O090PWlvJiZpby5zfHxPdCxbImJvdHRvbSIsInJpZ2h0Il0uZm9yRWFjaChmdW5jdGlvbihhbyl7aXIoYW8sdXQsU24pfSksT3Q9TGl9ZWxzZVsiYm90dG9tIiwicmlnaHQiXS5mb3JFYWNoKGZ1bmN0aW9uKGFvKXtpcihhbyx1dCxTbil9KTtpZihPdC5hbGlnbm1lbnQpe2lm''@;'; put 'put ''KE90LmFsaWdubWVudC5ob3Jpem9udGFsP0t0LnN0eWxlLnB1c2goInRleHQtYWxpZ246ICIrKFNbT3QuYWxpZ25tZW50Lmhvcml6b250YWxdfHxPdC5hbGlnbm1lbnQuaG9yaXpvbnRhbCkpOiJuIj09Z3IudCYmS3Quc3R5bGUucHVzaCgidGV4dC1hbGlnbjogcmlnaHQiKSxPdC5hbGlnbm1l''@;'; put 'put ''bnQudmVydGljYWwpe3ZhciBEcj1PdC5hbGlnbm1lbnQudmVydGljYWw7S3Quc3R5bGUucHVzaCgidmVydGljYWwtYWxpZ246ICIrKCJjZW50ZXIiPT1Ecj8ibWlkZGxlIjpEcikpfWlmKE90LmFsaWdubWVudC53cmFwVGV4dClLdC5zdHlsZS5wdXNoKCJ3aGl0ZS1zcGFjZTogcHJlLXdyYXAi''@;'; put 'put ''KTtlbHNle3ZhciBObj1FdC5kZW5zZT8oWWVbdXRdfHxbXSlbU24rMV06WWVbWGkoe3I6dXQsYzpTbisxfSldO05uJiYieiIhPU5uLnQmJkt0LnN0eWxlLnB1c2goIndoaXRlLXNwYWNlOiBwcmUtd3JhcCIpfX1lbHNlIm4iPT1nci50JiZLdC5zdHlsZS5wdXNoKCJ0ZXh0LWFsaWduOiByaWdo''@;'; put 'put ''dCIpO3ZhciBWcj0oKFllWyIhY29scyJdfHxbXSlbU25dfHx7fSkud3B4O251bGw9PVZyJiYoVnI9KChZZVsiIXNoZWV0Rm9ybWF0Il18fHt9KS5jb2x8fHt9KS53cHgpfXZhciB2cj0wO2lmKEpuPD0xJiZzcjw9MSYmKHZyPSgoWWVbIiFjb2xzIl18fFtdKVtTbl18fHt9KS53cHgpJiZLdC5z''@;'; put 'put ''dHlsZS5wdXNoKCJ3aWR0aDogIit2cisicHgiKSxZZVsiIWNvbmRmbXQiXSYmYWUoZ3IsdXQsU24sWWVbIiFjb25kZm10Il0sS3Quc3R5bGUsWWUpLDA9PUt0LnN0eWxlLmxlbmd0aD9kZWxldGUgS3Quc3R5bGU6S3Quc3R5bGU9S3Quc3R5bGUuam9pbigiOyIpLEV0LmNzcyl7dmFyIEhuPW90''@;'; put 'put ''LmluZGV4T2YoS3Quc3R5bGUpOy0xPT1IbiYmKG90LnB1c2goS3Quc3R5bGUpLEhuPW90Lmxlbmd0aC0xKSxkZWxldGUgS3Quc3R5bGUsS3QuY2xhc3M9InNqcyIrKGJ0fHwiIikrIi0iK0hufXNyPjEmJihLdC5yb3dzcGFuPXNyKSxKbj4xJiYoS3QuY29sc3Bhbj1KbiksRXQuZWRpdGFibGU/''@;'; put 'put ''dHI9JzxzcGFuIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSI+Jyt0cisiPC9zcGFuPiI6Z3ImJihLdFsiZGF0YS10Il09Z3ImJmdyLnR8fCJ6IixudWxsIT1nci52JiYoS3RbImRhdGEtdiJdPWdyLnYpLG51bGwhPWdyLnomJihLdFsiZGF0YS16Il09Z3IueikpLEt0LmlkPShFdC5pZHx8InNqcyIp''@;'; put 'put ''KyItIit1cixrdC5wdXNoKEZyKCJ0ZCIsdHIsS3QpKX19dmFyIFdpLEJyPXtzdHlsZTpbXX07KFdpPVllWyIhc2hlZXRGb3JtYXQiXSkmJldpLnJvdyYmKFB2KFdpLnJvdyksV2kucm93LmhweCYmKEJyLnN0eWxlLnB1c2goWyJoZWlnaHQiLFdpLnJvdy5ocHgrInB4Il0pLEJyLmhlaWdodD1N''@;'; put 'put ''YXRoLnJvdW5kKFdpLnJvdy5ocHgpKSk7dmFyIGJpPVllWyIhcm93cyJdO2lmKGJpJiZiaVt1dF0pe3ZhciB3bz1iaVt1dF07d28uaHB4JiYoQnIuc3R5bGUucHVzaChbImhlaWdodCIsK3dvLmhweCsicHgiXSksQnIuaGVpZ2h0PU1hdGgucm91bmQod28uaHB4KSksd28uaGlkZGVuJiZCci5z''@;'; put 'put ''dHlsZS5wdXNoKFsiZGlzcGxheSIsIm5vbmUiXSl9dmFyIHNhPVtdO3JldHVybiBCci5zdHlsZT1Cci5zdHlsZS5yZXZlcnNlKCkuZmlsdGVyKGZ1bmN0aW9uKGFvKXtyZXR1cm4hKHNhLmluZGV4T2YoYW9bMF0pPi0xfHwoc2EucHVzaChhb1swXSksMCkpfSkubWFwKGZ1bmN0aW9uKGFvKXty''@;'; put 'put ''ZXR1cm4gYW9bMF0rIjoiK2FvWzFdfSksMD09QnIuc3R5bGUubGVuZ3RoP2RlbGV0ZSBCci5zdHlsZTpCci5zdHlsZT1Cci5zdHlsZS5qb2luKCI7IiksRnIoInRyIixrdC5qb2luKCIiKSxCcil9ZnVuY3Rpb24gYWUoWWUsZXQsdXQsRXQsb3QsYnQpe0V0LmZvckVhY2goZnVuY3Rpb24oQnQp''@;'; put 'put ''e2lmKEJ0Ll9yZWZ8fChCdC5fcmVmPSJzdHJpbmciPT10eXBlb2YgQnQucmVmP1NzKEJ0LnJlZik6QnQucmVmKSwhKEJ0Ll9yZWYucy5jPnV0fHxCdC5fcmVmLmUuYzx1dHx8QnQuX3JlZi5zLnI+ZXR8fEJ0Ll9yZWYuZS5yPGV0fHwic2NhbGUiIT09QnQudCkpe2lmKCJuIiE9WWUudClyZXR1''@;'; put 'put ''cm47dmFyIGt0O2lmKG51bGw9PUJ0Ll9taW4pe0J0Ll92YWx1ZXM9W107Zm9yKHZhciBPdD1CdC5fcmVmLnMucjtPdDw9QnQuX3JlZi5lLnI7KytPdClmb3IodmFyIEt0PUJ0Ll9yZWYucy5jO0t0PD1CdC5fcmVmLmUuYzsrK0t0KXt2YXIgVG49QXJyYXkuaXNBcnJheShidCk/KGJ0W090XXx8''@;'; put 'put ''W10pW0t0XTpidFtYaSh7cjpPdCxjOkt0fSldO1RuJiYibiI9PVRuLnQmJkJ0Ll92YWx1ZXMucHVzaChUbi52KX1pZihCdC5fdmFsdWVzLnNvcnQoZnVuY3Rpb24oaXIsU24pe3JldHVybiBpci1Tbn0pLEJ0Ll9taW49QnQuX3ZhbHVlc1swXSxCdC5fbWF4PUJ0Ll92YWx1ZXMuc2xpY2UoLTEp''@;'; put 'put ''WzBdLEJ0Ll9iYW5kPUJ0Ll9tYXgtQnQuX21pbixCdC5jbWlkKXtzd2l0Y2goQnQuY21pZC50KXtjYXNlIm51bSI6QnQuX21pZD1CdC5jbWlkLnY7YnJlYWs7Y2FzZSJwZXJjZW50IjpCdC5fbWlkPUJ0LmNtaWQudi8xMDAqQnQuX2JhbmQrQnQuX21pbjticmVhaztjYXNlInBlcmNlbnRpbGUi''@;'; put 'put ''OkJ0Ll9taWQ9ZnVuY3Rpb24gUHIoUyxSKXtpZigwPT1SKXJldHVybiBTWzBdO2lmKDEwMD09UilyZXR1cm4gU1tTLmxlbmd0aC0xXTt2YXIgRz1SLzEwMCooUy5sZW5ndGgtMSksUT1HLU1hdGguZmxvb3IoRyk7cmV0dXJuIFEqU1tNYXRoLmNlaWwoRyldKygxLVEpKlNbTWF0aC5mbG9vcihH''@;'; put 'put ''KV19KEJ0Ll92YWx1ZXMsQnQuY21pZC52KX1CdC5fYmFuZGg9QnQuX21heC1CdC5fbWlkLEJ0Ll9iYW5kbD1CdC5fbWlkLUJ0Ll9taW59fShrdD1CdC5jbWlkP1llLnY+PUJ0Ll9taWQ/eUMoQnQuY21pZC5jb2xvcixCdC5jbWF4LmNvbG9yLChZZS52LUJ0Ll9taWQpL0J0Ll9iYW5kaCk6eUMo''@;'; put 'put ''QnQuY21pbi5jb2xvcixCdC5jbWlkLmNvbG9yLChZZS52LUJ0Ll9taW4pL0J0Ll9iYW5kbCk6eUMoQnQuY21pbi5jb2xvcixCdC5jbWF4LmNvbG9yLChZZS52LUJ0Ll9taW4pL0J0Ll9iYW5kKSkmJm90LnB1c2goImJhY2tncm91bmQtY29sb3I6ICMiK2t0KX19KX1mdW5jdGlvbiBnZShZZSxl''@;'; put 'put ''dCl7dmFyIHV0PXtzcGFuOmV0fHwxLHN0eWxlOiIifSxFdD1bXTtyZXR1cm4gWWUmJlllLndweCYmKHV0LndpZHRoPU1hdGgucm91bmQoNCpZZS53cHgvMyksRXQucHVzaCgid2lkdGg6IisoWWUud3B4fHwwKSsicHgiKSksRXQubGVuZ3RoPjAmJih1dC5zdHlsZT1FdC5qb2luKCI7IikpLEZy''@;'; put 'put ''KCJjb2wiLG51bGwsdXQpfWZ1bmN0aW9uIHBlKFllLGV0LHV0KXt2YXIgRXQ9e2JvcmRlcjowLGNlbGxwYWRkaW5nOjAsY2VsbHNwYWNpbmc6MCxzdHlsZTpbImJvcmRlci1jb2xsYXBzZTpjb2xsYXBzZSIsInRhYmxlLWxheW91dDpmaXhlZCJdLmpvaW4oIjsiKX07dXQmJnV0LmlkJiYoRXQu''@;'; put 'put ''aWQ9dXQuaWQpO3ZhciBvdD1ZZVsiIWNvbHMiXSxidD1ZZVsiIXNoZWV0Rm9ybWF0Il07aWYoWWUmJm90KXtmb3IodmFyIEJ0PTAsT3Q9ZXQucy5jO090PD1ldC5lLmM7KytPdCl7dmFyIEt0PW90W090XTtCdCs9S3QmJkt0LndweD9LdC53cHg6YnQmJmJ0LmNvbCYmYnQuY29sLndweD9idC5j''@;'; put 'put ''b2wud3B4OjUzfUV0LnN0eWxlKz0iO3dpZHRoOiIrQnQrInB4In12YXIgaXIsVG49WyI8dGFibGUiK1J1KEV0KSsiPiJdO2lmKFRuLnB1c2goIjxzdHlsZT50ZCB7IHBhZGRpbmctdG9wOiAxcHg7IHBhZGRpbmctcmlnaHQ6MXB4OyBwYWRkaW5nLWxlZnQ6MXB4OyB0ZXh0LWFsaWduOmdlbmVy''@;'; put 'put ''YWw7IHZlcnRpY2FsLWFsaWduOmJvdHRvbTsgYm9yZGVyOjFweCBzb2xpZDsgYm9yZGVyLWNvbG9yOiIrKHV0JiZ1dC5ncmlkY29sb3I/dXQuZ3JpZGNvbG9yOlp0KFllWyIhZ3JpZGxpbmVzIl0pPyJ0cmFuc3BhcmVudCI6ImJsYWNrIikrIjsgd2hpdGUtc3BhY2U6bm93cmFwOyB0ZXh0LW92''@;'; put 'put ''ZXJmbG93OmVsbGlwc2lzfTwvc3R5bGU+IiksVG4ucHVzaCgnPGNvbGdyb3VwIHNwYW49IicrKGV0LmUuYy1ldC5zLmMrMSkrJyI+Jyksb3Qpe2Zvcih2YXIgU249ZXQucy5jO1NuPE1hdGgubWluKG90Lmxlbmd0aCxldC5lLmMrMSk7KytTbikhKGlyPW90W1NuXSkmJmJ0JiZidC5jb2wmJihp''@;'; put 'put ''cj1idC5jb2wpLGlyfHwoaXI9e3dweDo1M30pLFRuLnB1c2goZ2UoaXIsMSkpO2V0LmUuYy1ldC5zLmMrMT5vdC5sZW5ndGgmJihpcj1udWxsLGJ0JiZidC5jb2wmJihpcj1idC5jb2wpLGlyfHwoaXI9e3dweDo1M30pLFRuLnB1c2goZ2UoaXIsZXQuZS5jLWV0LnMuYysxLW90Lmxlbmd0aCkp''@;'; put 'put ''KX1lbHNlIGlyPW51bGwsYnQmJmJ0LmNvbCYmKGlyPWJ0LmNvbCksaXJ8fChpcj17d3B4OjUzfSksVG4ucHVzaChnZShpcixldC5lLmMtZXQucy5jKzEpKTtyZXR1cm4gVG4ucHVzaCgiPC9jb2xncm91cD4iKSxUbi5qb2luKCIiKX12YXIgeWU9JzxodG1sPjxoZWFkPjxtZXRhIGNoYXJzZXQ9''@;'; put 'put ''InV0Zi04Ii8+PHRpdGxlPlNoZWV0SlMgVGFibGUgRXhwb3J0PC90aXRsZT48L2hlYWQ+PGJvZHk+JyxQZT0iPC9ib2R5PjwvaHRtbD4iO3JldHVybnt0b193b3JrYm9vazpmdW5jdGlvbiBHKFllLGV0KXtyZXR1cm4gSmQoayhZZSxldCksZXQpfSx0b19zaGVldDprLF9yb3c6USxCRUdJTjp5''@;'; put 'put ''ZSxFTkQ6UGUsX3ByZWFtYmxlOnBlLGh0bWxfdG9fcnM6ZnVuY3Rpb24gUihZZSl7dmFyIGV0PVtdLHV0PXt9LEV0PTA7cmV0dXJuIFllLnJlcGxhY2UoLzwoXC8/KShbXlxzPz4hXC86XSo6fCkoW15ccz8+OlwvXSspW14+XSo+L2dtLGZ1bmN0aW9uKG90LGJ0LEJ0LGt0LE90KXt2YXIgVG49''@;'; put 'put ''V24ocHIob3QpWzBdKS5yZXBsYWNlKC9bPFwvPl0vZywiIiksaXI9WWUuc2xpY2UoRXQsT3QpLnJlcGxhY2UoL1xzL2csIiAiKTtzd2l0Y2goaXIubGVuZ3RoPjAmJihldC5wdXNoKHt0OiJzIix2OmlyLHM6dXR9KSx1dD1xdCh1dCkpLFRuLnRvTG93ZXJDYXNlKCkpe2Nhc2UiYiI6Ii8iIT1i''@;'; put 'put ''dD91dC5ib2xkPSEwOmRlbGV0ZSB1dC5ib2xkO2JyZWFrO2Nhc2UiaSI6Ii8iIT1idD91dC5pdGFsaWM9ITA6ZGVsZXRlIHV0Lml0YWxpYzticmVhaztjYXNlInUiOiIvIiE9YnQ/dXQudW5kZXJsaW5lPTE6ZGVsZXRlIHV0LnVuZGVybGluZTticmVhaztjYXNlInMiOiIvIiE9YnQ/dXQuc3Ry''@;'; put 'put ''aWtlPSEwOmRlbGV0ZSB1dC5zdHJpa2V9cmV0dXJuIEV0PU90K290Lmxlbmd0aCxvdH0pLGV0fSxmcm9tX3NoZWV0OmZ1bmN0aW9uIE5lKFllLGV0KXt2YXIgdXQ9ZXR8fHt9LG90PW51bGwhPXV0LmZvb3Rlcj91dC5mb290ZXI6UGUsYnQ9W251bGwhPXV0LmhlYWRlcj91dC5oZWFkZXI6eWUs''@;'; put 'put ''IiJdLEJ0PVtdLGt0PShuZXcgRGF0ZSkudmFsdWVPZigpO1llfHwoWWU9e30pLFllWyIhcmVmIl18fChZZVsiIXJlZiJdPSJBMTpBMSIpO3ZhciBPdD1TcyhZZVsiIXJlZiJdKTtpZih1dC5kZW5zZT1BcnJheS5pc0FycmF5KFllKSx1dC5za2lwZW5kKXt2YXIgS3Q9T3QuZS5yO2U6Zm9yKDtL''@;'; put 'put ''dD49T3Qucy5yOy0tS3QpZm9yKHZhciBUbj1PdC5lLmM7VG4+PU90LnMuYzstLVRuKWlmKG51bGwhPSgodXQuZGVuc2U/KFllW0t0XXx8W10pW1RuXTpZZVtYaSh7cjpLdCxjOlRufSldKXx8e30pLnYpYnJlYWsgZTtPdC5lLnI9S3Q7dmFyIGlyPU90LmUuYztlOmZvcig7aXI+PU90LnMuYzst''@;'; put 'put ''LWlyKWZvcih2YXIgU249T3QuZS5yO1NuPj1PdC5zLnI7LS1TbilpZihudWxsIT0oKHV0LmRlbnNlPyhZZVtTbl18fFtdKVtpcl06WWVbWGkoe3I6U24sYzppcn0pXSl8fHt9KS52KWJyZWFrIGU7T3QuZS5jPWlyfWJ0LnB1c2gocGUoWWUsT3QsdXQpKTtmb3IodmFyIHNyPU90LnMucjtzcjw9''@;'; put 'put ''T3QuZS5yOysrc3IpYnQucHVzaChRKFllLE90LHNyLHV0LEJ0LGt0KSk7cmV0dXJuIGJ0LnB1c2goIjwvdGFibGU+IitvdCksdXQuY3NzJiYoYnRbMV09IjxzdHlsZT5cbiIrQnQubWFwKGZ1bmN0aW9uKEpuLFZuKXtyZXR1cm4iLnNqcyIra3QrIi0iK1ZuKyIgeyIrSm4rIn0ifSkuam9pbigi''@;'; put 'put ''XG4iKSsiPC9zdHlsZT4iKSxidC5qb2luKCIiKX19fSgpO2Z1bmN0aW9uIF9JKFMsUixrKXt2YXIgRz17fTtpZih0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZT4idSIpcmV0dXJuIEc7dmFyIFE9Z2V0Q29tcHV0ZWRTdHlsZShTKTtpZigoNzAwPT1RWyJmb250LXdlaWdodCJdfHwiYm9sZCI9PVFb''@;'; put 'put ''ImZvbnQtd2VpZ2h0Il0pJiYoRy5ib2xkPSEwKSwoUVsiZm9udC1zdHlsZSJdfHwiIikubWF0Y2goL2l0YWxpYy8pJiYoRy5pdGFsaWM9ITApLChRWyJ0ZXh0LWRlY29yYXRpb24iXXx8IiIpLm1hdGNoKC91bmRlcmxpbmUvKSYmKEcudW5kZXJsaW5lPTEpLChRWyJ0ZXh0LWRlY29yYXRpb24i''@;'; put 'put ''XXx8IiIpLm1hdGNoKC9saW5lLXRocm91Z2gvKSYmKEcuc3RyaWtlPTEpLHBhcnNlSW50KFFbImZvbnQtc2l6ZSJdKSYmKEcuc3o9cGFyc2VGbG9hdChRWyJmb250LXNpemUiXSkqKFFbImZvbnQtc2l6ZSJdLm1hdGNoKC9weC8pPzMvNDoxKSksUVsiZm9udC1mYW1pbHkiXSYmKEcubmFtZT1R''@;'; put 'put ''WyJmb250LWZhbWlseSJdLnNwbGl0KCIsIilbMF0ucmVwbGFjZSgvXHMqIlxzKi9nLCIiKSksUS5jb2xvcil7dmFyIGFlPVM1KFEuY29sb3IudG9Mb3dlckNhc2UoKSwhMCk7YWU+PTAmJihHLmNvbG9yPXtyZ2I6YWV9KX1zd2l0Y2goUVsidGV4dC10cmFuc2Zvcm0iXSYmKEcudGV4dF90cmFu''@;'; put 'put ''c2Zvcm09UVsidGV4dC10cmFuc2Zvcm0iXS50b0xvd2VyQ2FzZSgpKSwibm9uZSIhPShRWyJ0ZXh0LXNoYWRvdyJdfHwibm9uZSIpJiYoRy5zaGFkb3c9ITApLFFbInRleHQtYWxpZ24iXSl7Y2FzZSJjZW50ZXIiOkcuYWxpZ25tZW50PXtob3Jpem9udGFsOiJjZW50ZXIifTticmVhaztjYXNl''@;'; put 'put ''InJpZ2h0IjpHLmFsaWdubWVudD17aG9yaXpvbnRhbDoicmlnaHQifTticmVhaztjYXNlImxlZnQiOkcuYWxpZ25tZW50PXtob3Jpem9udGFsOiJsZWZ0In07YnJlYWs7Y2FzZSJqdXN0aWZ5IjpHLmFsaWdubWVudD17aG9yaXpvbnRhbDoianVzdGlmeSJ9fXN3aXRjaChRWyJ2ZXJ0aWNhbC1h''@;'; put 'put ''bGlnbiJdKXtjYXNlInRvcCI6Y2FzZSJtaWRkbGUiOmNhc2UiYm90dG9tIjpHLmFsaWdubWVudHx8KEcuYWxpZ25tZW50PXt9KSxHLmFsaWdubWVudC52ZXJ0aWNhbD1RWyJ2ZXJ0aWNhbC1hbGlnbiJdLCJtaWRkbGUiPT1HLmFsaWdubWVudC52ZXJ0aWNhbCYmKEcuYWxpZ25tZW50LnZlcnRp''@;'; put 'put ''Y2FsPSJjZW50ZXIiKTticmVhaztjYXNlInN1YiI6Y2FzZSJzdXBlciI6Ry52YWxpZ249UVsidmVydGljYWwtYWxpZ24iXSxHLnN6JiYoRy5zei89LjgzKX12YXIgZ2U9UiYmZ2V0Q29tcHV0ZWRTdHlsZShSKTtyZXR1cm4gZ2UmJmsmJlImJlsibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9t''@;'; put 'put ''Il0uZm9yRWFjaChmdW5jdGlvbihwZSl7dmFyIHllPXBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3BlLnNsaWNlKDEpLFBlPWdlWyJib3JkZXItIitwZSsiLXN0eWxlIl07aWYoKCJub25lIj09UGV8fCFQZSkmJihQZT1nZVsiYm9yZGVyIit5ZSsiU3R5bGUiXSksIm5vbmUiIT1QZSYmUGUp''@;'; put 'put ''e3ZhciBOZT1wYXJzZUludChnZVsiYm9yZGVyLSIrcGUrIi13aWR0aCJdfHxnZVsiYm9yZGVyIit5ZSsiV2lkdGgiXSwxMCksWWU9InRoaW4iO2lmKE5lPjApe3N3aXRjaChQZSl7Y2FzZSJkb3VibGUiOlllPSJkb3VibGUiO2JyZWFrO2Nhc2UiZGFzaGVkIjpZZT1OZT49Mj8ibWVkaXVtRGFz''@;'; put 'put ''aGVkIjoiZGFzaGVkIjticmVhaztjYXNlImRvdHRlZCI6WWU9TmU+PTI/Im1lZGl1bURhc2hEb3REb3QiOiJkb3R0ZWQiO2JyZWFrO2Nhc2Uic29saWQiOlllPU5lPj0zPyJ0aGljayI6TmU+PTI/Im1lZGl1bSI6InRoaW4ifWlmKEdbcGVdPXtzdHlsZTpZZX0sZ2VbImJvcmRlci0iK3BlKyIt''@;'; put 'put ''Y29sb3IiXXx8Z2VbImJvcmRlciIreWUrIkNvbG9yIl0pe3ZhciBldD1TNSgoZ2VbImJvcmRlci0iK3BlKyItY29sb3IiXXx8Z2VbImJvcmRlciIreWUrIkNvbG9yIl0pLnRvTG93ZXJDYXNlKCksITApO2V0Pj0wJiYoR1twZV0uY29sb3I9e3JnYjpldH0pfX19fSksR31mdW5jdGlvbiBDSShT''@;'; put 'put ''LFIsayl7dmFyIEc9Uy5jaGlsZE5vZGVzO2lmKDE9PVMubm9kZVR5cGUpc3dpdGNoKFMudGFnTmFtZS50b0xvd2VyQ2FzZSgpKXtjYXNlInAiOlIubGVuZ3RoPjAmJlIucHVzaCh7dDoidCIsdjoiXG4iLHM6a30pO2JyZWFrO2Nhc2Uic2VsZWN0IjpyZXR1cm4gZnVuY3Rpb24gd0koUyxSLGsp''@;'; put 'put ''e1IucHVzaCh7dDoidCIsdjpTLmNoaWxkcmVuW1Muc2VsZWN0ZWRJbmRleF0uaW5uZXJUZXh0LHM6a30pfShTLFIsayl9aWYoRy5sZW5ndGg+MCl7dmFyIFE9X0koUyxudWxsLCExKTtrJiYoay51bmRlcmxpbmUmJihRLnVuZGVybGluZT1rLnVuZGVybGluZSksay5zdHJpa2UmJihRLnN0cmlr''@;'; put 'put ''ZT1rLnN0cmlrZSkpO2Zvcih2YXIgYWU9MDthZTxHLmxlbmd0aDsrK2FlKXt0cnl7aWYoR1thZV0uZ2V0QXR0cmlidXRlKCJhcmlhLWhpZGRlbiIpKWNvbnRpbnVlfWNhdGNoe31DSShHW2FlXSxSLFEpfWRlbGV0ZSBRLnRleHRfdHJhbnNmb3JtfWVsc2UgaWYoMz09Uy5ub2RlVHlwZSl7dmFy''@;'; put 'put ''IGdlPXt0OiJ0Iix2OlMubm9kZVZhbHVlLnJlcGxhY2UoL15bXG4gXSsvLCIgIikucmVwbGFjZSgvW1xuIF0rJC8sIiAiKSxzOmt9O3N3aXRjaChrLnRleHRfdHJhbnNmb3JtKXtjYXNlInVwcGVyY2FzZSI6Z2Uudj1nZS52LnRvVXBwZXJDYXNlKCk7YnJlYWs7Y2FzZSJsb3dlcmNhc2UiOmdl''@;'; put 'put ''LnY9Z2Uudi50b0xvd2VyQ2FzZSgpfShSLmxlbmd0aD4wfHxnZS52JiYiICIhPWdlLnYpJiZSLnB1c2goZ2UpfWVsc2UgMT09Uy5ub2RlVHlwZSYmImJyIj09PVMudGFnTmFtZS50b0xvd2VyQ2FzZSgpJiZSLnB1c2goe3Q6InQiLHY6IlxuIixzOmt9KX1mdW5jdGlvbiBNYihTLFIsayxHLFEp''@;'; put 'put ''e3ZhciBnZSxhZT1TLmlubmVySFRNTDtpZih0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZTwidSIpc3dpdGNoKGdlPWdldENvbXB1dGVkU3R5bGUoUyksKGdlWyJ3aGl0ZS1zcGFjZSJdfHwiIikubWF0Y2goL3ByZS8pJiYoYWU9YWUucmVwbGFjZSgvXG4vZywiPGJyLz4iKSksKGdlWyJ0ZXh0LXRy''@;'; put 'put ''YW5zZm9ybSJdfHwiIikudG9Mb3dlckNhc2UoKSl7Y2FzZSJ1cHBlcmNhc2UiOmFlPWFlLnRvVXBwZXJDYXNlKCk7YnJlYWs7Y2FzZSJsb3dlcmNhc2UiOmFlPWFlLnRvTG93ZXJDYXNlKCl9dmFyIHBlPWZ1bmN0aW9uIFNiKFMsUixrLEcpe3ZhciBRPXt0OiJzIix2OlJ9LGFlPSIiO2lmKFMp''@;'; put 'put ''e2s9Uy5nZXRBdHRyaWJ1dGUoImRhdGEtdCIpfHxTLmdldEF0dHJpYnV0ZSgidCIpO3ZhciBnZT1TLmdldEF0dHJpYnV0ZSgiZGF0YS12Iil8fFMuZ2V0QXR0cmlidXRlKCJ2Iik7aWYobnVsbCE9KGFlPVMuZ2V0QXR0cmlidXRlKCJkYXRhLXoiKXx8Uy5nZXRBdHRyaWJ1dGUoInoiKSkmJihR''@;'; put 'put ''Lno9YWUpLG51bGwhPWsmJm51bGwhPWdlKXJldHVybiBRLnQ9ayxRLnY9Z2UsUX1yZXR1cm4gbnVsbCE9UiYmKDA9PVIubGVuZ3RoP1EudD1rfHwieiI6Ry5yYXd8fCFSLnRyaW0oKS5sZW5ndGh8fCJzIj09a3x8KFE9UmkoUixHKSkpLGFlJiYoUS56PWFlKSxRfShTLG9yKGFlKSxrLFEpO2lm''@;'; put 'put ''KHR5cGVvZiBnZXRDb21wdXRlZFN0eWxlPCJ1IiYmKHBlLnM9X0koUyxSLFEuYm9yZGVycyksZGVsZXRlIHBlLnMudGV4dF90cmFuc2Zvcm0sUy5jaGlsZE5vZGVzLmxlbmd0aD4xfHwxPT1TLmNoaWxkTm9kZXMubGVuZ3RoJiYzIT1TLmNoaWxkTm9kZXNbMF0ubm9kZVR5cGUpKXN3aXRjaChD''@;'; put 'put ''SShTLHBlLlI9W10sbnVsbCkscGUuUiYmcGUuUltwZS5SLmxlbmd0aC0xXSYmIlxuIj09cGUuUltwZS5SLmxlbmd0aC0xXS52JiZwZS5SLmxlbmd0aC0tLChnZVsidGV4dC10cmFuc2Zvcm0iXXx8IiIpLnRvTG93ZXJDYXNlKCkpe2Nhc2UidXBwZXJjYXNlIjpwZS5SLmZvckVhY2goZnVuY3Rp''@;'; put 'put ''b24oZXQpe2V0LnY9ZXQudi50b1VwcGVyQ2FzZSgpfSk7YnJlYWs7Y2FzZSJsb3dlcmNhc2UiOnBlLlIuZm9yRWFjaChmdW5jdGlvbihldCl7ZXQudj1ldC52LnRvTG93ZXJDYXNlKCl9KX1pZigicyI9PXBlLnQpe3ZhciB5ZT1wZS52Lm1hdGNoKC9cbi8pOyF5ZSYmcGUuUiYmcGUuUi5mb3JF''@;'; put 'put ''YWNoKGZ1bmN0aW9uKGV0KXsic3RyaW5nIj09dHlwZW9mIGV0LnYmJmV0LnYubWF0Y2goL1xuLykmJih5ZT0hMCl9KSwicyI9PXBlLnQmJnllJiYocGUuc3x8KHBlLnM9e30pLHBlLnMuYWxpZ25tZW50fHwocGUucy5hbGlnbm1lbnQ9e30pLHBlLnMuYWxpZ25tZW50LndyYXBUZXh0PSEwKX1p''@;'; put 'put ''ZihSKXt2YXIgUGU9IiIsTmU9Ui5nZXRFbGVtZW50c0J5VGFnTmFtZSgiQSIpO2lmKE5lJiZOZS5sZW5ndGgpZm9yKHZhciBZZT0wO1llPE5lLmxlbmd0aCYmKCFOZVtZZV0uaGFzQXR0cmlidXRlKCJocmVmIil8fCIjIj09KFBlPU5lW1llXS5nZXRBdHRyaWJ1dGUoImhyZWYiKSkuY2hhckF0''@;'; put 'put ''KDApKTsrK1llKTtQZSYmIiMiIT1QZS5jaGFyQXQoMCkmJihwZS5sPXtUYXJnZXQ6UGV9KX1yZXR1cm4gcGV9ZnVuY3Rpb24geGIoUyxSLGspe3ZhciBRLEc9Ui5yb3dzO2lmKCFHKXtpZihrJiZudWxsIT1rLm9yaWdpbil0aHJvdyJVbnN1cHBvcnRlZCBvcmlnaW4gd2hlbiAiK1IudGFnTmFt''@;'; put 'put ''ZSsiIGlzIG5vdCBhIFRBQkxFIjtyZXR1cm4gZnVuY3Rpb24gem5lKFMsUixrKXtrPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoa3x8e30pKTt2YXIgYWU9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fTtTWyIhbWVyZ2VzIl18fChTWyIhbWVyZ2VzIl09W10pO2Zvcih2YXIgcGUsZ2U9Ui5j''@;'; put 'put ''aGlsZHJlbix5ZT0wLFBlPTA7UGU8Z2UubGVuZ3RoOysrUGUpe3ZhciBldCxOZT1nZVtQZV0sWWU9IiI7dHJ5e3R5cGVvZiBnZXRDb21wdXRlZFN0eWxlPCJ1Ij9ldD1nZXRDb21wdXRlZFN0eWxlOk5lLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcmJiJmdW5jdGlvbiI9PXR5cGVvZiBOZS5v''@;'; put 'put ''d25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUmJihldD1OZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUpfWNhdGNoe31pZighZXR8fCJub25lIiE9ZXQoTmUpLmRpc3BsYXkpc3dpdGNoKE5lLnRhZ05hbWUudG9VcHBlckNhc2UoKSl7''@;'; put 'put ''Y2FzZSJUQUJMRSI6eWU9LTEsU1siIXJlZiJdJiYoay5vcmlnaW49LTEpLHhiKFMsTmUsayk7YnJlYWs7Y2FzZSJCUiI6Y2FzZSJIUiI6eWU9LTEsU1siIXJlZiJdPygrKyhhZT1TcyhTWyIhcmVmIl0pKS5lLnIsU1siIXJlZiJdPW9vKGFlKSk6U1siIXJlZiJdPSJBMTpBMSI7YnJlYWs7Y2Fz''@;'; put 'put ''ZSJESVYiOmNhc2UiUCI6Y2FzZSJIMSI6Y2FzZSJIMiI6Y2FzZSJIMyI6Y2FzZSJINCI6Y2FzZSJINSI6Y2FzZSJINiI6eWU9LTEscGU9TWIoTmUsbnVsbCwiIiwwLGspLFNbIiFyZWYiXT8oay5vcmlnaW49LTEsdTQoUyxbW3BlXV0saykpOihTWyIhcmVmIl09IkExIixBcnJheS5pc0FycmF5''@;'; put 'put ''KFMpPyhTWzBdfHwoU1swXT1bXSksU1swXVswXT1wZSk6Uy5BMT1wZSksU1siIXJvd3MiXXx8KFNbIiFyb3dzIl09W10pLGV0JiYoYWU9U3MoU1siIXJlZiJdKSwoWWU9ZXQoTmUpLmhlaWdodCkmJiJhdXRvIiE9WWUmJihTWyIhcm93cyJdW2FlLmUucl09e2hwdDpwYXJzZUludChZZSwxMCl9''@;'; put 'put ''KSk7YnJlYWs7Y2FzZSJTUEFOIjpjYXNlIkEiOmNhc2UiQiI6Y2FzZSJFTSI6Y2FzZSJJIjpjYXNlIkZPTlQiOmNhc2UiUyI6Y2FzZSJTVUIiOmNhc2UiU1VQIjpjYXNlIlUiOnBlPU1iKE5lLG51bGwsIiIsMCxrKSxTWyIhcmVmIl18fChTWyIhcmVmIl09IkExOkExIiksdTQoUyxbW3BlXV0s''@;'; put 'put ''e29yaWdpbjpYaSh7cjooeWU8MD8xOjApKyhhZT1TcyhTWyIhcmVmIl0pKS5lLnIsYzorK3llfSl9KTticmVhaztjYXNlIkRMIjpjYXNlIlVMIjpjYXNlIk9MIjp5ZT0tMSxjb25zb2xlLmVycm9yKCJIVE1MIENvbnZlcnNpb24gZG9lcyBub3Qgc3VwcG9ydCBsaXN0IGVsZW1lbnQgIitOZS50''@;'; put 'put ''YWdOYW1lLnRvVXBwZXJDYXNlKCkpO2JyZWFrO2RlZmF1bHQ6eWU9LTEsY29uc29sZS5lcnJvcigiU2tpcHBpbmcgIitOZS50YWdOYW1lLnRvVXBwZXJDYXNlKCkpfX1yZXR1cm4gU30oUyxSLGspfXRyeXt0eXBlb2YgZ2V0Q29tcHV0ZWRTdHlsZTwidSI/UT1nZXRDb21wdXRlZFN0eWxlOlIu''@;'; put 'put ''b3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyYmImZ1bmN0aW9uIj09dHlwZW9mIFIub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlJiYoUT1SLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSl9Y2F0Y2h7fXZhciBhZT1rfHx7fTtudWxs''@;'; put 'put ''IT1sZSYmKGFlLmRlbnNlPWxlKTt2YXIgZ2U9MCxwZT0wO2lmKG51bGwhPWFlLm9yaWdpbilpZigibnVtYmVyIj09dHlwZW9mIGFlLm9yaWdpbilnZT1hZS5vcmlnaW47ZWxzZXt2YXIgeWU9InN0cmluZyI9PXR5cGVvZiBhZS5vcmlnaW4/TmEoYWUub3JpZ2luKTphZS5vcmlnaW47Z2U9eWUu''@;'; put 'put ''cixwZT15ZS5jfXZhciBQZT1NYXRoLm1pbihhZS5zaGVldFJvd3N8fDFlNyxHLmxlbmd0aCksTmU9e3M6e3I6MCxjOjB9LGU6e3I6Z2UsYzpwZX19O2lmKFNbIiFyZWYiXSl7dmFyIFllPVNzKFNbIiFyZWYiXSk7TmUucy5yPU1hdGgubWluKE5lLnMucixZZS5zLnIpLE5lLnMuYz1NYXRoLm1p''@;'; put 'put ''bihOZS5zLmMsWWUucy5jKSxOZS5lLnI9TWF0aC5tYXgoTmUuZS5yLFllLmUuciksTmUuZS5jPU1hdGgubWF4KE5lLmUuYyxZZS5lLmMpLC0xPT1nZSYmKE5lLmUucj1nZT1ZZS5lLnIrMSl9dmFyIGV0PVtdLHV0PTAsRXQ9U1siIXJvd3MiXXx8KFNbIiFyb3dzIl09W10pLG90PTAsYnQ9MCxC''@;'; put 'put ''dD0wLGt0PTAsT3Q9MCxLdD0wO2ZvcihTWyIhY29scyJdfHwoU1siIWNvbHMiXT1bXSk7b3Q8Ry5sZW5ndGgmJmJ0PFBlOysrb3Qpe2Zvcih2YXIgVG49R1tvdF0saXI9VG4ucGFyZW50RWxlbWVudDsiVEFCTEUiIT1pci50YWdOYW1lLnRvVXBwZXJDYXNlKCk7KWlyPWlyLnBhcmVudEVsZW1l''@;'; put 'put ''bnQ7aWYoaXI9PVIpe2U6aWYodHlwZW9mIFE8InUiKXt2YXIgU249UShUbik7aWYobnVsbD09U24pYnJlYWsgZTtpZihTbi5zdHlsZXx8KFNuLnN0eWxlPXt9KSxhZS5kaXNwbGF5JiYibm9uZSI9PShTbi5kaXNwbGF5fHxTbi5zdHlsZS5kaXNwbGF5KSljb250aW51ZTsibm9uZSI9PShTbi5k''@;'; put 'put ''aXNwbGF5fHxTbi5zdHlsZS5kaXNwbGF5KSYmKChFdFtidF18fChFdFtidF09e30pKS5oaWRkZW49ITApfXZhciBzcj1Ubi5jZWxscztmb3IoQnQ9a3Q9MDtCdDxzci5sZW5ndGg7KytCdCl7dmFyIEpuPXNyW0J0XSxWbj1udWxsO2lmKCEodHlwZW9mIFE8InUiJiYobnVsbD09Vm4mJihWbj1R''@;'; put 'put ''KEpuKSksVm4uc3R5bGV8fChWbi5zdHlsZT17fSksYWUuZGlzcGxheSYmbnVsbCE9Vm4mJiJub25lIj09KFZuLmRpc3BsYXl8fFZuLnN0eWxlLmRpc3BsYXkpKSkpe2ZvcihLdD0rSm4uZ2V0QXR0cmlidXRlKCJjb2xzcGFuIil8fDEsdXQ9MDt1dDxldC5sZW5ndGg7Kyt1dCl7dmFyIHVyPWV0''@;'; put 'put ''W3V0XTt1ci5zLmM9PWt0K3BlJiZ1ci5zLnI8YnQrZ2UmJmJ0K2dlPD11ci5lLnImJihrdD11ci5lLmMrMS1wZSx1dD0tMSl9KChPdD0rSm4uZ2V0QXR0cmlidXRlKCJyb3dzcGFuIil8fDEpPjF8fEt0PjEpJiZldC5wdXNoKHtzOntyOmJ0K2dlLGM6a3QrcGV9LGU6e3I6YnQrZ2UrKE90fHwx''@;'; put 'put ''KS0xLGM6a3QrcGUrKEt0fHwxKS0xfX0pO3ZhciBncj1Kbi5nZXRBdHRyaWJ1dGUoInQiKXx8IiIsdHI9Sm4uZ2V0QXR0cmlidXRlKCJiZ2NvbG9yIik7ZTppZih0eXBlb2YgUTwidSIpe2lmKG51bGw9PVZuJiYoVm49UShKbikpLG51bGw9PVZuKWJyZWFrIGU7aWYoVm4uc3R5bGV8fChWbi5z''@;'; put 'put ''dHlsZT17fSksMT09S3QmJlZuLndpZHRoJiYoU1siIWNvbHMiXVtrdCtwZV09U1siIWNvbHMiXVtrdCtwZV18fHt9LFZuLndpZHRoLm1hdGNoKC9weC8pP1NbIiFjb2xzIl1ba3QrcGVdLndweD1NYXRoLm1heChwYXJzZUludChWbi53aWR0aCwxMCkrNSxTWyIhY29scyJdW2t0K3BlXS53cHh8''@;'; put 'put ''fDApOlZuLndpZHRoLm1hdGNoKC9wdC8pJiYoU1siIWNvbHMiXVtrdCtwZV0ud3B4PU1hdGgubWF4KDQqcGFyc2VJbnQoVm4ud2lkdGgsMTApLzMrNSxTWyIhY29scyJdW2t0K3BlXS53cHh8fDApKSksT3Q8PTEpe0V0W2J0K2dlXXx8KEV0W2J0K2dlXT17fSk7dmFyIENpPVZuLmhlaWdodDso''@;'; put 'put ''Q2k9Q2kubWF0Y2goL3B0Lyk/aWgocGFyc2VJbnQoQ2ksMTApKTpwYXJzZUludChDaSwxMCkpPihFdFtidCtnZV0uaHB4fHxpaChFdFtidCtnZV0uaHB0KXx8MCkmJihkZWxldGUgRXRbYnQrZ2VdLmhwdCxFdFtidCtnZV0uaHB4PUNpKX19dmFyIEZpPUpuO2lmKEpuLmZpcnN0RWxlbWVudENo''@;'; put 'put ''aWxkJiYxPT1Kbi5jaGlsZHJlbi5sZW5ndGgmJiJzcGFuIj09Sm4uZmlyc3RFbGVtZW50Q2hpbGQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSl7Zm9yKHZhciBpbz0wLHVvPUpuLmNoaWxkTm9kZXMsTGk9MDtMaTx1by5sZW5ndGg7KytMaSkzPT11b1tMaV0ubm9kZVR5cGUmJisraW87MD09aW8m''@;'; put 'put ''JihKbj1Kbi5maXJzdEVsZW1lbnRDaGlsZCl9dmFyIERyPU1iKEpuLEZpLGdyLDAsYWUpO2lmKFZuKXt2YXIgTm49UShKbik7aWYoTm4mJiFObi5zdHlsZSYmKE5uLnN0eWxlPXt9KSwoTm4mJk5uWyJiYWNrZ3JvdW5kLWNvbG9yIl18fFZuWyJiYWNrZ3JvdW5kLWNvbG9yIl0pJiYoRHIuc3x8''@;'; put 'put ''KERyLnM9e30pLCFEci5zLmZnQ29sb3IpKXRyeXt2YXIgVnI9Tm4mJk5uWyJiYWNrZ3JvdW5kLWNvbG9yIl18fFZuWyJiYWNrZ3JvdW5kLWNvbG9yIl07VnIubWF0Y2goL3JnYmFbKF1ccyowLipbKV0vaSkmJihWcj1WblsiYmFja2dyb3VuZC1jb2xvciJdKTt2YXIgdnI9UzUoVnIudG9Mb3dl''@;'; put 'put ''ckNhc2UoKSwhMCk7dnI+PTAmJihEci5zLmZnQ29sb3I9e3JnYjp2cn0pfWNhdGNoe31zd2l0Y2goVm5bInZlcnRpY2FsLWFsaWduIl0pe2Nhc2UibWlkZGxlIjpjYXNlImJhc2VsaW5lIjpEci5zfHwoRHIucz17fSksRHIucy5hbGlnbm1lbnR8fChEci5zLmFsaWdubWVudD17fSksRHIucy5h''@;'; put 'put ''bGlnbm1lbnQudmVydGljYWw9ImNlbnRlciJ9fWlmKHRyJiYoRHIuc3x8KERyLnM9e30pLCFEci5zLmZnQ29sb3IpKXRyeXt2YXIgSG49UzUodHIudG9Mb3dlckNhc2UoKSwhMCk7SG4+PTAmJihEci5zLmZnQ29sb3I9e3JnYjpIbn0pfWNhdGNoe31pZihhZS5kZW5zZT8oU1tidCtnZV18fChT''@;'; put 'put ''W2J0K2dlXT1bXSksU1tidCtnZV1ba3QrcGVdPURyKTpTW1hpKHtjOmt0K3BlLHI6YnQrZ2V9KV09RHIsT3Q+MXx8S3Q+MSlmb3IodmFyIEJyPWJ0O0JyPGJ0K090OysrQnIpZm9yKHZhciBXaT1rdDtXaTxrdCtLdDsrK1dpKWJ0PT1CciYma3Q9PVdpfHwoYWUuZGVuc2U/KFNbQnIrZ2VdfHwo''@;'; put 'put ''U1tCcitnZV09W10pLFNbQnIrZ2VdW1dpK3BlXT17dDoieiIsczpxdChEci5zfHx7fSl9KTpTW1hpKHtjOldpK3BlLHI6QnIrZ2V9KV09e3Q6InoiLHM6cXQoRHIuc3x8e30pfSk7TmUuZS5jPGt0K3BlJiYoTmUuZS5jPWt0K3BlKSxrdCs9S3R9fSsrYnR9fWlmKGV0Lmxlbmd0aCYmKFNbIiFt''@;'; put 'put ''ZXJnZXMiXT0oU1siIW1lcmdlcyJdfHxbXSkuY29uY2F0KGV0KSksTmUuZS5yPU1hdGgubWF4KE5lLmUucixidC0xK2dlKSxTWyIhcmVmIl09b28oTmUpLGJ0Pj1QZSYmKFNbIiFmdWxscmVmIl09b28oKE5lLmUucj1HLmxlbmd0aC1vdCtidC0xK2dlLE5lKSkpLGFlLmJvcmRlcnMpZm9yKGJ0''@;'; put 'put ''PU5lLnMucjtidDw9TmUuZS5yOysrYnQpZm9yKGt0PU5lLnMuYztrdDw9TmUuZS5jOysra3QpaWYoIWFlLmRlbnNlKXt2YXIgYmk9U1tYaSh7cjpidCxjOmt0fSldO2lmKCFiaXx8IWJpLnMpY29udGludWU7aWYoYnQ+MCl7dmFyIHdvPVNbWGkoe3I6YnQtMSxjOmt0fSldO3dvJiZ3by5zJiZ3''@;'; put 'put ''by5zLmJvdHRvbSYmZGVsZXRlIGJpLnMudG9wfWlmKGt0PjApe3ZhciBzYT1TW1hpKHtyOmJ0LGM6a3QtMX0pXTtzYSYmc2EucyYmc2Eucy5ib3R0b20mJmRlbGV0ZSBiaS5zLmxlZnR9fXJldHVybiBTfWZ1bmN0aW9uIEl6KFMsUil7cmV0dXJuIHhiKChSfHx7fSkuZGVuc2U/W106e30sUyxS''@;'; put 'put ''KX12YXIgcVM9ZnVuY3Rpb24oKXt2YXIgUz1mdW5jdGlvbihHLFEsYWUpe3ZhciBnZT1HLnJlcGxhY2UoL1tcdFxyXG5dL2csIiAiKS50cmltKCkucmVwbGFjZSgvICsvZywiICIpLnJlcGxhY2UoLzx0ZXh0OnNcLz4vZywiICIpLnJlcGxhY2UoLzx0ZXh0OnMgdGV4dDpjPSIoXGQrKSJcLz4v''@;'; put 'put ''ZyxmdW5jdGlvbihOZSxZZSl7cmV0dXJuIEFycmF5KHBhcnNlSW50KFllLDEwKSsxKS5qb2luKCIgIil9KS5yZXBsYWNlKC88dGV4dDp0YWJbXj5dKlwvPi9nLCJcdCIpLnJlcGxhY2UoLzx0ZXh0OmxpbmUtYnJlYWtcLz4vZywiXG4iKSxwZT1KcihnZS5yZXBsYWNlKC88W14+XSo+L2csIiIp''@;'; put 'put ''KSx5ZT1bXSxQZT0wO3JldHVybiBnZS5yZXBsYWNlKC8oPHRleHQ6c3Bhbi4qPz4pKC4qPyk8W1wvXXRleHQ6c3Bhbj4vZyxmdW5jdGlvbihOZSxZZSxldCx1dCl7dXQhPVBlJiZ5ZS5wdXNoKHt0OiJzIix2OkpyKGdlLnNsaWNlKFBlLHV0KSl9KTt2YXIgRXQ9e3Q6InMiLHY6SnIoZXQpfSxv''@;'; put 'put ''dD1wcihZZSlbInN0eWxlLW5hbWUiXTtyZXR1cm4gb3QmJmFlW290XSYmKEV0LnM9cXQoYWVbb3RdKSkseWUucHVzaChFdCksUGU9dXQrTmUubGVuZ3RoLCIifSksUGU8Z2UubGVuZ3RoJiZ5ZS5wdXNoKHt0OiJzIix2OkpyKGdlLnNsaWNlKFBlKSl9KSxbcGUseWVdfSxSPXtkYXk6WyJkIiwi''@;'; put 'put ''ZGQiXSxtb250aDpbIm0iLCJtbSJdLHllYXI6WyJ5IiwieXkiXSxob3VyczpbImgiLCJoaCJdLG1pbnV0ZXM6WyJtIiwibW0iXSxzZWNvbmRzOlsicyIsInNzIl0sImFtLXBtIjpbIkEvUCIsIkFNL1BNIl0sImRheS1vZi13ZWVrIjpbImRkZCIsImRkZGQiXSxlcmE6WyJlIiwiZWUiXSxxdWFy''@;'; put 'put ''dGVyOlsiXFxRbSIsJ21cXCJ0aCBxdWFydGVyIiddfSxrPWZ1bmN0aW9uKEcsUSl7dmFyIGFlPXByKEcuc2xpY2UoMCxHLmluZGV4T2YoIj4iKSkpLGdlPUcuc2xpY2UoRy5pbmRleE9mKCI+IikrMSkscGU9e25hbWU6YWUubmFtZSxmYW1pbHk6YWUuZmFtaWx5fTtbWyJwYXJlbnQiLCJwYXJl''@;'; put 'put ''bnQtc3R5bGUtbmFtZSJdLFsiZGF0YW5hbWUiLCJkYXRhLXN0eWxlLW5hbWUiXSxbIm1wbmFtZSIsIm1hc3Rlci1wYWdlLW5hbWUiXV0uZm9yRWFjaChmdW5jdGlvbihQZSl7YWVbUGVbMV1dJiYocGVbUGVbMF1dPWFlW1BlWzFdXSl9KTt2YXIgeWU9e307Z2UucmVwbGFjZShlbixmdW5jdGlv''@;'; put 'put ''bihQZSl7dmFyIE5lPXByKFBlKTtpZigiPHN0eWxlOnRleHQtcHJvcGVydGllcyI9PT1OZVswXSl7aWYoTmVbImZvbnQtd2VpZ2h0Il0mJih5ZS5ib2xkPSsoImJvbGQiPT1OZVsiZm9udC13ZWlnaHQiXXx8IjcwMCI9PU5lWyJmb250LXdlaWdodCJdKSksKCJpdGFsaWMiPT1OZVsiZm9udC1z''@;'; put 'put ''dHlsZSJdfHwib2JsaXF1ZSI9PU5lWyJmb250LXN0eWxlIl0pJiYoeWUuaXRhbGljPTEpLCJub25lIiE9KE5lWyJ0ZXh0LXVuZGVybGluZS1zdHlsZSJdfHwibm9uZSIpP3llLnVuZGVybGluZT0iZG91YmxlIj09TmVbInRleHQtdW5kZXJsaW5lLXR5cGUiXT8yOjE6KE5lWyJ0ZXh0LXVuZGVy''@;'; put 'put ''bGluZS1zdHlsZSJdfHwibm9uZSI9PU5lWyJ0ZXh0LXVuZGVybGluZS10eXBlIl0pJiYoeWUudW5kZXJsaW5lPTApLChOZVsiZm9udC1zaXplIl18fCIiKS5tYXRjaCgvcHQkLykmJih5ZS5zej0rTmVbImZvbnQtc2l6ZSJdLnJlcGxhY2UoInB0IiwiIikpLCJub25lIiE9KE5lWyJ0ZXh0LWxp''@;'; put 'put ''bmUtdGhyb3VnaC1zdHlsZSJdfHwibm9uZSIpJiYoeWUuc3RyaWtlPTEpLE5lWyJmb250LW5hbWUiXSYmKHllLm5hbWU9TmVbImZvbnQtbmFtZSJdKSxOZS5jb2xvcil7dmFyIFllPVM1KE5lLmNvbG9yLCEwKTtZZT49MCYmKHllLmNvbG9yPVllKX1zd2l0Y2goTmVbInRleHQtcG9zaXRpb24i''@;'; put 'put ''XSl7Y2FzZSJzdXBlciI6eWUudmFsaWduPSJzdXBlciI7YnJlYWs7Y2FzZSJzdWIiOnllLnZhbGlnbj0ic3ViIjticmVhaztkZWZhdWx0OihOZVsidGV4dC1wb3NpdGlvbiJdfHwiIikubWF0Y2goLyUvKSYmKHllLnZhbGlnbj0iLSI9PU5lWyJ0ZXh0LXBvc2l0aW9uIl0uY2hhckF0KDApPyJz''@;'; put 'put ''dWIiOiJzdXBlciIpfSJub25lIiE9KE5lWyJ0ZXh0LXNoYWRvdyJdfHwibm9uZSIpJiYoeWUuc2hhZG93PTEpfXJldHVybiIifSksUVthZS5uYW1lXT15ZX07cmV0dXJuIGZ1bmN0aW9uKFEsYWUpe3ZhciBnZT1hZXx8e307bnVsbCE9bGUmJm51bGw9PWdlLmRlbnNlJiYoZ2UuZGVuc2U9bGUp''@;'; put 'put ''O3ZhciBQZSxOZSxFdCxvdCxPdCxLdCxwZT1aUyhRKSx5ZT1bXSxZZT17bmFtZToiIn0sZXQ9IiIsdXQ9MCxidD17fSxCdD1bXSxrdD1nZS5kZW5zZT9bXTp7fSxUbj17dmFsdWU6IiJ9LGlyPSIiLFNuPTAsSm49W10sVm49LTEsdXI9LTEsZ3I9e3M6e3I6MWU2LGM6MWU3fSxlOntyOjAsYzow''@;'; put 'put ''fX0sdHI9MCxDaT17fSxGaT1bXSxpbz17fSx1bz0wLExpPTAsRHI9W10sTm49MSxWcj0xLHZyPVtdLEhuPXtOYW1lczpbXX0sQnI9e30sV2k9WyIiLCIiXSxiaT1bXSx3bz17fSxzYT17fSxhbz0wLFJhPSIiLFBvPTAsaGE9ITEsSm89ITEsamk9MDtmb3IoVTUubGFzdEluZGV4PTAscGU9cGUu''@;'; put 'put ''cmVwbGFjZSgvPCEtLShbXHNcU10qPyktLT4vZ20sIiIpLnJlcGxhY2UoLzwhRE9DVFlQRVteXFtdKlxbW15cXV0qXF0+L2dtLCIiKTtPdD1VNS5leGVjKHBlKTspc3dpdGNoKE90WzNdPU90WzNdLnJlcGxhY2UoL18uKiQvLCIiKSl7Y2FzZSJ0YWJsZSI6Y2FzZSJcdTVkZTVcdTRmNWNcdTg4''@;'; put 'put ''NjgiOiIvIj09PU90WzFdPyhrdFsiIXJlZiJdPWdyLmUuYz49Z3Iucy5jJiZnci5lLnI+PWdyLnMucj9vbyhncik6IkExOkExIixnZS5zaGVldFJvd3M+MCYmZ2Uuc2hlZXRSb3dzPD1nci5lLnImJihrdFsiIWZ1bGxyZWYiXT1rdFsiIXJlZiJdLGdyLmUucj1nZS5zaGVldFJvd3MtMSxrdFsi''@;'; put 'put ''IXJlZiJdPW9vKGdyKSksRmkubGVuZ3RoJiYoa3RbIiFtZXJnZXMiXT1GaSksRHIubGVuZ3RoJiYoa3RbIiFyb3dzIl09RHIpLEV0Lm5hbWU9RXQuXHU1NDBkXHU3OWYwfHxFdC5uYW1lLHR5cGVvZiBKU09OPCJ1IiYmSlNPTi5zdHJpbmdpZnkoRXQpLEJ0LnB1c2goRXQubmFtZSksYnRbRXQu''@;'; put 'put ''bmFtZV09a3QsSm89ITEpOiIvIiE9PU90WzBdLmNoYXJBdChPdFswXS5sZW5ndGgtMikmJihFdD1wcihPdFswXSwhMSksVm49dXI9LTEsZ3Iucy5yPWdyLnMuYz0xZTcsZ3IuZS5yPWdyLmUuYz0wLGt0PWdlLmRlbnNlP1tdOnt9LEZpPVtdLERyPVtdLEpvPSEwKTticmVhaztjYXNlInRhYmxl''@;'; put 'put ''LXJvdy1ncm91cCI6Ii8iPT09T3RbMV0/LS10cjorK3RyO2JyZWFrO2Nhc2UidGFibGUtcm93IjpjYXNlIlx1ODg0YyI6aWYoIi8iPT09T3RbMV0pe1ZuKz1ObixObj0xO2JyZWFrfWlmKChvdD1wcihPdFswXSwhMSkpLlx1ODg0Y1x1NTNmNz9Wbj1vdC5cdTg4NGNcdTUzZjctMTotMT09Vm4m''@;'; put 'put ''JihWbj0wKSwoTm49K290WyJudW1iZXItcm93cy1yZXBlYXRlZCJdfHwxKTwxMClmb3Ioamk9MDtqaTxObjsrK2ppKXRyPjAmJihEcltWbitqaV09e2xldmVsOnRyfSk7dXI9LTE7YnJlYWs7Y2FzZSJjb3ZlcmVkLXRhYmxlLWNlbGwiOiIvIiE9PU90WzFdJiYrK3VyLGdlLnNoZWV0U3R1YnMm''@;'; put 'put ''JihnZS5kZW5zZT8oa3RbVm5dfHwoa3RbVm5dPVtdKSxrdFtWbl1bdXJdPXt0OiJ6In0pOmt0W1hpKHtyOlZuLGM6dXJ9KV09e3Q6InoifSksaXI9IiIsSm49W107YnJlYWs7Y2FzZSJ0YWJsZS1jZWxsIjpjYXNlIlx1NjU3MFx1NjM2ZSI6aWYoIi8iPT09T3RbMF0uY2hhckF0KE90WzBdLmxl''@;'; put 'put ''bmd0aC0yKSkrK3VyLFRuPXByKE90WzBdLCExKSxWcj1wYXJzZUludChUblsibnVtYmVyLWNvbHVtbnMtcmVwZWF0ZWQiXXx8IjEiLDEwKSxLdD17dDoieiIsdjpudWxsfSxUbi5mb3JtdWxhJiYwIT1nZS5jZWxsRm9ybXVsYSYmKEt0LmY9clMoSnIoVG4uZm9ybXVsYSkpKSwic3RyaW5nIj09''@;'; put 'put ''KFRuLlx1NjU3MFx1NjM2ZVx1N2M3Ylx1NTc4Ynx8VG5bInZhbHVlLXR5cGUiXSkmJihLdC50PSJzIixLdC52PUpyKFRuWyJzdHJpbmctdmFsdWUiXXx8IiIpLGdlLmRlbnNlPyhrdFtWbl18fChrdFtWbl09W10pLGt0W1ZuXVt1cl09S3QpOmt0W1hpKHtyOlZuLGM6dXJ9KV09S3QpLHVyKz1W''@;'; put 'put ''ci0xO2Vsc2UgaWYoIi8iIT09T3RbMV0pe1ZyPTE7dmFyIElzPU5uP1ZuK05uLTE6Vm47aWYoKyt1cj5nci5lLmMmJihnci5lLmM9dXIpLHVyPGdyLnMuYyYmKGdyLnMuYz11ciksVm48Z3Iucy5yJiYoZ3Iucy5yPVZuKSxJcz5nci5lLnImJihnci5lLnI9SXMpLGJpPVtdLHdvPXt9LEt0PXt0''@;'; put 'put ''OihUbj1wcihPdFswXSwhMSkpLlx1NjU3MFx1NjM2ZVx1N2M3Ylx1NTc4Ynx8VG5bInZhbHVlLXR5cGUiXSx2Om51bGx9LGdlLmNlbGxGb3JtdWxhKWlmKFRuLmZvcm11bGEmJihUbi5mb3JtdWxhPUpyKFRuLmZvcm11bGEpKSxUblsibnVtYmVyLW1hdHJpeC1jb2x1bW5zLXNwYW5uZWQiXSYm''@;'; put 'put ''VG5bIm51bWJlci1tYXRyaXgtcm93cy1zcGFubmVkIl0mJih1bz1wYXJzZUludChUblsibnVtYmVyLW1hdHJpeC1yb3dzLXNwYW5uZWQiXSwxMCl8fDAsTGk9cGFyc2VJbnQoVG5bIm51bWJlci1tYXRyaXgtY29sdW1ucy1zcGFubmVkIl0sMTApfHwwLEt0LkY9b28oaW89e3M6e3I6Vm4sYzp1''@;'; put 'put ''cn0sZTp7cjpWbit1by0xLGM6dXIrTGktMX19KSx2ci5wdXNoKFtpbyxLdC5GXSkpLFRuLmZvcm11bGEpS3QuZj1yUyhUbi5mb3JtdWxhKTtlbHNlIGZvcihqaT0wO2ppPHZyLmxlbmd0aDsrK2ppKVZuPj12cltqaV1bMF0ucy5yJiZWbjw9dnJbamldWzBdLmUuciYmdXI+PXZyW2ppXVswXS5z''@;'; put 'put ''LmMmJnVyPD12cltqaV1bMF0uZS5jJiYoS3QuRj12cltqaV1bMV0pO3N3aXRjaCgoVG5bIm51bWJlci1jb2x1bW5zLXNwYW5uZWQiXXx8VG5bIm51bWJlci1yb3dzLXNwYW5uZWQiXSkmJih1bz1wYXJzZUludChUblsibnVtYmVyLXJvd3Mtc3Bhbm5lZCJdLDEwKXx8MCxMaT1wYXJzZUludChU''@;'; put 'put ''blsibnVtYmVyLWNvbHVtbnMtc3Bhbm5lZCJdLDEwKXx8MCxGaS5wdXNoKGlvPXtzOntyOlZuLGM6dXJ9LGU6e3I6Vm4rdW8tMSxjOnVyK0xpLTF9fSkpLFRuWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdJiYoVnI9cGFyc2VJbnQoVG5bIm51bWJlci1jb2x1bW5zLXJlcGVhdGVkIl0sMTAp''@;'; put 'put ''KSxLdC50KXtjYXNlImJvb2xlYW4iOkt0LnQ9ImIiLEt0LnY9ZWkoVG5bImJvb2xlYW4tdmFsdWUiXSk7YnJlYWs7Y2FzZSJmbG9hdCI6Y2FzZSJwZXJjZW50YWdlIjpjYXNlImN1cnJlbmN5IjpLdC50PSJuIixLdC52PXBhcnNlRmxvYXQoVG4udmFsdWUpO2JyZWFrO2Nhc2UiZGF0ZSI6S3Qu''@;'; put 'put ''dD0iZCIsS3Qudj1IZShUblsiZGF0ZS12YWx1ZSJdKSxnZS5jZWxsRGF0ZXN8fChLdC50PSJuIixLdC52PVFlKEt0LnYpKSxLdC56PSJtL2QveXkiO2JyZWFrO2Nhc2UidGltZSI6S3QudD0ibiIsS3Qudj1pdChUblsidGltZS12YWx1ZSJdKS84NjQwMCxnZS5jZWxsRGF0ZXMmJihLdC50PSJk''@;'; put 'put ''IixLdC52PWRuKEt0LnYpKSxLdC56PSJISDpNTTpTUyI7YnJlYWs7Y2FzZSJudW1iZXIiOkt0LnQ9Im4iLEt0LnY9cGFyc2VGbG9hdChUbi5cdTY1NzBcdTYzNmVcdTY1NzBcdTUwM2MpO2JyZWFrO2RlZmF1bHQ6aWYoInN0cmluZyIhPT1LdC50JiYidGV4dCIhPT1LdC50JiZLdC50KXRocm93''@;'; put 'put ''IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgdmFsdWUgdHlwZSAiK0t0LnQpO0t0LnQ9InMiLG51bGwhPVRuWyJzdHJpbmctdmFsdWUiXSYmKGlyPUpyKFRuWyJzdHJpbmctdmFsdWUiXSksSm49W10pfX1lbHNle2lmKGhhPSExLCJzIj09PUt0LnQmJihLdC52PWlyfHwiIixKbi5sZW5ndGgmJihL''@;'; put 'put ''dC5SPUpuKSxoYT0wPT1TbiksQnIuVGFyZ2V0JiYoS3QubD1CciksYmkubGVuZ3RoPjAmJihLdC5jPWJpLGJpPVtdKSxpciYmITEhPT1nZS5jZWxsVGV4dCYmKEt0Lnc9aXIpLGhhJiYoS3QudD0ieiIsZGVsZXRlIEt0LnYpLGdlLmNlbGxIVE1MJiYoS3QuaD1LdC5SP051KEt0LlIpOmNvKCIi''@;'; put 'put ''K0t0LnYpKSwoIWhhfHxnZS5zaGVldFN0dWJzKSYmIShnZS5zaGVldFJvd3MmJmdlLnNoZWV0Um93czw9Vm4pKWZvcih2YXIgRm49MDtGbjxObjsrK0ZuKXtpZihWcj1wYXJzZUludChUblsibnVtYmVyLWNvbHVtbnMtcmVwZWF0ZWQiXXx8IjEiLDEwKSxnZS5kZW5zZSlmb3Ioa3RbVm4rRm5d''@;'; put 'put ''fHwoa3RbVm4rRm5dPVtdKSxrdFtWbitGbl1bdXJdPTA9PUZuP0t0OnF0KEt0KTstLVZyPjA7KWt0W1ZuK0ZuXVt1citWcl09cXQoS3QpO2Vsc2UgZm9yKGt0W1hpKHtyOlZuK0ZuLGM6dXJ9KV09S3Q7LS1Wcj4wOylrdFtYaSh7cjpWbitGbixjOnVyK1ZyfSldPXF0KEt0KTtnci5lLmM8PXVy''@;'; put 'put ''JiYoZ3IuZS5jPXVyKX11cis9KFZyPXBhcnNlSW50KFRuWyJudW1iZXItY29sdW1ucy1yZXBlYXRlZCJdfHwiMSIsMTApKS0xLFZyPTAsS3Q9e30saXI9IiIsSm49W119QnI9e307YnJlYWs7Y2FzZSJkb2N1bWVudCI6Y2FzZSJkb2N1bWVudC1jb250ZW50IjpjYXNlIlx1NzUzNVx1NWI1MFx1''@;'; put 'put ''ODg2OFx1NjgzY1x1NjU4N1x1Njg2MyI6Y2FzZSJzcHJlYWRzaGVldCI6Y2FzZSJcdTRlM2JcdTRmNTMiOmNhc2Uic2NyaXB0cyI6Y2FzZSJzdHlsZXMiOmNhc2UiZm9udC1mYWNlLWRlY2xzIjpjYXNlIm1hc3Rlci1zdHlsZXMiOmlmKCIvIj09PU90WzFdKXtpZigoUGU9eWUucG9wKCkpWzBd''@;'; put 'put ''IT09T3RbM10pdGhyb3ciQmFkIHN0YXRlOiAiK1BlfWVsc2UiLyIhPT1PdFswXS5jaGFyQXQoT3RbMF0ubGVuZ3RoLTIpJiZ5ZS5wdXNoKFtPdFszXSwhMF0pO2JyZWFrO2Nhc2UiYW5ub3RhdGlvbiI6aWYoIi8iPT09T3RbMV0pe2lmKChQZT15ZS5wb3AoKSlbMF0hPT1PdFszXSl0aHJvdyJC''@;'; put 'put ''YWQgc3RhdGU6ICIrUGU7d28udD1pcixKbi5sZW5ndGgmJih3by5SPUpuKSx3by5hPVJhLGJpLnB1c2god28pfWVsc2UiLyIhPT1PdFswXS5jaGFyQXQoT3RbMF0ubGVuZ3RoLTIpJiZ5ZS5wdXNoKFtPdFszXSwhMV0pO1JhPSIiLFBvPTAsaXI9IiIsU249MCxKbj1bXTticmVhaztjYXNlImNy''@;'; put 'put ''ZWF0b3IiOiIvIj09PU90WzFdP1JhPXBlLnNsaWNlKFBvLE90LmluZGV4KTpQbz1PdC5pbmRleCtPdFswXS5sZW5ndGg7YnJlYWs7Y2FzZSJtZXRhIjpjYXNlIlx1NTE0M1x1NjU3MFx1NjM2ZSI6Y2FzZSJzZXR0aW5ncyI6Y2FzZSJjb25maWctaXRlbS1zZXQiOmNhc2UiY29uZmlnLWl0ZW0t''@;'; put 'put ''bWFwLWluZGV4ZWQiOmNhc2UiY29uZmlnLWl0ZW0tbWFwLWVudHJ5IjpjYXNlImNvbmZpZy1pdGVtLW1hcC1uYW1lZCI6Y2FzZSJzaGFwZXMiOmNhc2UiZnJhbWUiOmNhc2UidGV4dC1ib3giOmNhc2UiaW1hZ2UiOmNhc2UiZGF0YS1waWxvdC10YWJsZXMiOmNhc2UibGlzdC1zdHlsZSI6Y2Fz''@;'; put 'put ''ZSJmb3JtIjpjYXNlImRkZS1saW5rcyI6Y2FzZSJldmVudC1saXN0ZW5lcnMiOmNhc2UiY2hhcnQiOmlmKCIvIj09PU90WzFdKXtpZigoUGU9eWUucG9wKCkpWzBdIT09T3RbM10pdGhyb3ciQmFkIHN0YXRlOiAiK1BlfWVsc2UiLyIhPT1PdFswXS5jaGFyQXQoT3RbMF0ubGVuZ3RoLTIpJiZ5''@;'; put 'put ''ZS5wdXNoKFtPdFszXSwhMV0pO2lyPSIiLFNuPTAsSm49W107YnJlYWs7Y2FzZSJzY2llbnRpZmljLW51bWJlciI6Y2FzZSJjdXJyZW5jeS1zeW1ib2wiOmNhc2UiY3VycmVuY3ktc3R5bGUiOmNhc2Uic2NyaXB0IjpjYXNlImxpYnJhcmllcyI6Y2FzZSJhdXRvbWF0aWMtc3R5bGVzIjpjYXNl''@;'; put 'put ''ImRlZmF1bHQtc3R5bGUiOmNhc2UicGFnZS1sYXlvdXQiOmNhc2UibWFwIjpjYXNlImZvbnQtZmFjZSI6Y2FzZSJwYXJhZ3JhcGgtcHJvcGVydGllcyI6Y2FzZSJ0YWJsZS1wcm9wZXJ0aWVzIjpjYXNlInRhYmxlLWNvbHVtbi1wcm9wZXJ0aWVzIjpjYXNlInRhYmxlLXJvdy1wcm9wZXJ0aWVz''@;'; put 'put ''IjpjYXNlInRhYmxlLWNlbGwtcHJvcGVydGllcyI6Y2FzZSJmcmFjdGlvbiI6Y2FzZSJib29sZWFuLXN0eWxlIjpjYXNlImJvb2xlYW4iOmNhc2UidGV4dC1zdHlsZSI6Y2FzZSJ0ZXh0LWNvbnRlbnQiOmNhc2UidGV4dC1wcm9wZXJ0aWVzIjpjYXNlImVtYmVkZGVkLXRleHQiOmNhc2UiYm9k''@;'; put 'put ''eSI6Y2FzZSJcdTc1MzVcdTViNTBcdTg4NjhcdTY4M2MiOmNhc2UiZm9ybXMiOmNhc2UidGFibGUtY29sdW1uIjpjYXNlInRhYmxlLWhlYWRlci1yb3dzIjpjYXNlInRhYmxlLXJvd3MiOmNhc2UidGFibGUtY29sdW1uLWdyb3VwIjpjYXNlInRhYmxlLWhlYWRlci1jb2x1bW5zIjpjYXNlInRh''@;'; put 'put ''YmxlLWNvbHVtbnMiOmNhc2UibnVsbC1kYXRlIjpjYXNlImdyYXBoaWMtcHJvcGVydGllcyI6Y2FzZSJjYWxjdWxhdGlvbi1zZXR0aW5ncyI6Y2FzZSJuYW1lZC1leHByZXNzaW9ucyI6Y2FzZSJsYWJlbC1yYW5nZSI6Y2FzZSJsYWJlbC1yYW5nZXMiOmNhc2UibmFtZWQtZXhwcmVzc2lvbiI6''@;'; put 'put ''Y2FzZSJzb3J0IjpjYXNlInNvcnQtYnkiOmNhc2Uic29ydC1ncm91cHMiOmNhc2UidGFiIjpjYXNlImxpbmUtYnJlYWsiOmNhc2Uic3BhbiI6Y2FzZSJzIjpjYXNlImRhdGUiOmNhc2Uib2JqZWN0IjpjYXNlInRpdGxlIjpjYXNlIlx1NjgwN1x1OTg5OCI6Y2FzZSJkZXNjIjpjYXNlImJpbmFy''@;'; put 'put ''eS1kYXRhIjpjYXNlInRhYmxlLXNvdXJjZSI6Y2FzZSJzY2VuYXJpbyI6Y2FzZSJpdGVyYXRpb24iOmNhc2UiY29udGVudC12YWxpZGF0aW9ucyI6Y2FzZSJjb250ZW50LXZhbGlkYXRpb24iOmNhc2UiaGVscC1tZXNzYWdlIjpjYXNlImVycm9yLW1lc3NhZ2UiOmNhc2UiZGF0YWJhc2UtcmFu''@;'; put 'put ''Z2VzIjpjYXNlImZpbHRlciI6Y2FzZSJmaWx0ZXItYW5kIjpjYXNlImZpbHRlci1vciI6Y2FzZSJmaWx0ZXItY29uZGl0aW9uIjpjYXNlImxpc3QtbGV2ZWwtc3R5bGUtYnVsbGV0IjpjYXNlImxpc3QtbGV2ZWwtc3R5bGUtbnVtYmVyIjpjYXNlImxpc3QtbGV2ZWwtcHJvcGVydGllcyI6Y2Fz''@;'; put 'put ''ZSJzZW5kZXItZmlyc3RuYW1lIjpjYXNlInNlbmRlci1sYXN0bmFtZSI6Y2FzZSJzZW5kZXItaW5pdGlhbHMiOmNhc2Uic2VuZGVyLXRpdGxlIjpjYXNlInNlbmRlci1wb3NpdGlvbiI6Y2FzZSJzZW5kZXItZW1haWwiOmNhc2Uic2VuZGVyLXBob25lLXByaXZhdGUiOmNhc2Uic2VuZGVyLWZh''@;'; put 'put ''eCI6Y2FzZSJzZW5kZXItY29tcGFueSI6Y2FzZSJzZW5kZXItcGhvbmUtd29yayI6Y2FzZSJzZW5kZXItc3RyZWV0IjpjYXNlInNlbmRlci1jaXR5IjpjYXNlInNlbmRlci1wb3N0YWwtY29kZSI6Y2FzZSJzZW5kZXItY291bnRyeSI6Y2FzZSJzZW5kZXItc3RhdGUtb3ItcHJvdmluY2UiOmNh''@;'; put 'put ''c2UiYXV0aG9yLW5hbWUiOmNhc2UiYXV0aG9yLWluaXRpYWxzIjpjYXNlImNoYXB0ZXIiOmNhc2UiZmlsZS1uYW1lIjpjYXNlInRlbXBsYXRlLW5hbWUiOmNhc2Uic2hlZXQtbmFtZSI6Y2FzZSJldmVudC1saXN0ZW5lciI6Y2FzZSJpbml0aWFsLWNyZWF0b3IiOmNhc2UiY3JlYXRpb24tZGF0''@;'; put 'put ''ZSI6Y2FzZSJwcmludC1kYXRlIjpjYXNlImdlbmVyYXRvciI6Y2FzZSJkb2N1bWVudC1zdGF0aXN0aWMiOmNhc2UidXNlci1kZWZpbmVkIjpjYXNlImVkaXRpbmctZHVyYXRpb24iOmNhc2UiZWRpdGluZy1jeWNsZXMiOmNhc2UiY29uZmlnLWl0ZW0iOmNhc2UicGFnZS1udW1iZXIiOmNhc2Ui''@;'; put 'put ''cGFnZS1jb3VudCI6Y2FzZSJ0aW1lIjpjYXNlImNlbGwtcmFuZ2Utc291cmNlIjpjYXNlImRldGVjdGl2ZSI6Y2FzZSJvcGVyYXRpb24iOmNhc2UiaGlnaGxpZ2h0ZWQtcmFuZ2UiOmNhc2UiZGF0YS1waWxvdC10YWJsZSI6Y2FzZSJzb3VyY2UtY2VsbC1yYW5nZSI6Y2FzZSJzb3VyY2Utc2Vy''@;'; put 'put ''dmljZSI6Y2FzZSJkYXRhLXBpbG90LWZpZWxkIjpjYXNlImRhdGEtcGlsb3QtbGV2ZWwiOmNhc2UiZGF0YS1waWxvdC1zdWJ0b3RhbHMiOmNhc2UiZGF0YS1waWxvdC1zdWJ0b3RhbCI6Y2FzZSJkYXRhLXBpbG90LW1lbWJlcnMiOmNhc2UiZGF0YS1waWxvdC1tZW1iZXIiOmNhc2UiZGF0YS1w''@;'; put 'put ''aWxvdC1kaXNwbGF5LWluZm8iOmNhc2UiZGF0YS1waWxvdC1zb3J0LWluZm8iOmNhc2UiZGF0YS1waWxvdC1sYXlvdXQtaW5mbyI6Y2FzZSJkYXRhLXBpbG90LWZpZWxkLXJlZmVyZW5jZSI6Y2FzZSJkYXRhLXBpbG90LWdyb3VwcyI6Y2FzZSJkYXRhLXBpbG90LWdyb3VwIjpjYXNlImRhdGEt''@;'; put 'put ''cGlsb3QtZ3JvdXAtbWVtYmVyIjpjYXNlInJlY3QiOmNhc2UiZGRlLWNvbm5lY3Rpb24tZGVjbHMiOmNhc2UiZGRlLWNvbm5lY3Rpb24tZGVjbCI6Y2FzZSJkZGUtbGluayI6Y2FzZSJkZGUtc291cmNlIjpjYXNlInByb3BlcnRpZXMiOmNhc2UicHJvcGVydHkiOmNhc2UidGFibGUtcHJvdGVj''@;'; put 'put ''dGlvbiI6Y2FzZSJkYXRhLXBpbG90LWdyYW5kLXRvdGFsIjpjYXNlIm9mZmljZS1kb2N1bWVudC1jb21tb24tYXR0cnMiOmJyZWFrO2Nhc2UibnVtYmVyLXN0eWxlIjpjYXNlInBlcmNlbnRhZ2Utc3R5bGUiOmNhc2UiZGF0ZS1zdHlsZSI6Y2FzZSJ0aW1lLXN0eWxlIjppZigiLyI9PT1PdFsx''@;'; put 'put ''XSl7aWYoQ2lbWWUubmFtZV09ZXQsKFBlPXllLnBvcCgpKVswXSE9PU90WzNdKXRocm93IkJhZCBzdGF0ZTogIitQZX1lbHNlIi8iIT09T3RbMF0uY2hhckF0KE90WzBdLmxlbmd0aC0yKSYmKGV0PSIiLFllPXByKE90WzBdLCExKSx5ZS5wdXNoKFtPdFszXSwhMF0pKTticmVhaztjYXNlInN0''@;'; put 'put ''eWxlIjoiLz4iPT09T3RbMF0uc2xpY2UoLTIpP2soT3RbMF0sc2EpOiIvIj09T3RbMV0/ayhwZS5zbGljZShhbyxPdC5pbmRleCtPdFswXS5sZW5ndGgpLHNhKTphbz1PdC5pbmRleDticmVhaztjYXNlIm51bWJlciI6Y2FzZSJkYXkiOmNhc2UibW9udGgiOmNhc2UieWVhciI6Y2FzZSJlcmEi''@;'; put 'put ''OmNhc2UiZGF5LW9mLXdlZWsiOmNhc2Uid2Vlay1vZi15ZWFyIjpjYXNlInF1YXJ0ZXIiOmNhc2UiaG91cnMiOmNhc2UibWludXRlcyI6Y2FzZSJzZWNvbmRzIjpjYXNlImFtLXBtIjpzd2l0Y2goeWVbeWUubGVuZ3RoLTFdWzBdKXtjYXNlInRpbWUtc3R5bGUiOmNhc2UiZGF0ZS1zdHlsZSI6''@;'; put 'put ''TmU9cHIoT3RbMF0sITEpLGV0Kz1SW090WzNdXVsibG9uZyI9PT1OZS5zdHlsZT8xOjBdfWJyZWFrO2Nhc2UidGV4dCI6aWYoIi8+Ij09PU90WzBdLnNsaWNlKC0yKSlicmVhaztpZigiLyI9PT1PdFsxXSlzd2l0Y2goeWVbeWUubGVuZ3RoLTFdWzBdKXtjYXNlIm51bWJlci1zdHlsZSI6Y2Fz''@;'; put 'put ''ZSJkYXRlLXN0eWxlIjpjYXNlInRpbWUtc3R5bGUiOmV0Kz1wZS5zbGljZSh1dCxPdC5pbmRleCl9ZWxzZSB1dD1PdC5pbmRleCtPdFswXS5sZW5ndGg7YnJlYWs7Y2FzZSJuYW1lZC1yYW5nZSI6V2k9ZWIoKE5lPXByKE90WzBdLCExKSlbImNlbGwtcmFuZ2UtYWRkcmVzcyJdKTt2YXIgWmE9''@;'; put 'put ''e05hbWU6TmUubmFtZSxSZWY6V2lbMF0rIiEiK1dpWzFdfTtKbyYmKFphLlNoZWV0PUJ0Lmxlbmd0aCksSG4uTmFtZXMucHVzaChaYSk7YnJlYWs7Y2FzZSJwIjpjYXNlIlx1NjU4N1x1NjcyY1x1NGUzMiI6aWYoWyJtYXN0ZXItc3R5bGVzIl0uaW5kZXhPZih5ZVt5ZS5sZW5ndGgtMV1bMF0p''@;'; put 'put ''Pi0xKWJyZWFrO2lmKCIvIiE9PU90WzFdfHxUbiYmVG5bInN0cmluZy12YWx1ZSJdKXByKE90WzBdLCExKSxTbj1PdC5pbmRleCtPdFswXS5sZW5ndGg7ZWxzZXt2YXIgZHI9UyhwZS5zbGljZShTbixPdC5pbmRleCksMCxzYSk7aXI9KGlyLmxlbmd0aD4wP2lyKyJcbiI6IiIpK2RyWzBdLEpu''@;'; put 'put ''PWRyWzFdfWJyZWFrO2Nhc2UiZGF0YWJhc2UtcmFuZ2UiOmlmKCIvIj09PU90WzFdKWJyZWFrO3RyeXtidFsoV2k9ZWIocHIoT3RbMF0pWyJ0YXJnZXQtcmFuZ2UtYWRkcmVzcyJdKSlbMF1dWyIhYXV0b2ZpbHRlciJdPXtyZWY6V2lbMV19fWNhdGNoe31icmVhaztjYXNlImEiOmlmKCIvIiE9''@;'; put 'put ''PU90WzFdKXtpZighKEJyPXByKE90WzBdLCExKSkuaHJlZilicmVhaztCci5UYXJnZXQ9SnIoQnIuaHJlZiksZGVsZXRlIEJyLmhyZWYsIiMiPT1Cci5UYXJnZXQuY2hhckF0KDApJiZCci5UYXJnZXQuaW5kZXhPZigiLiIpPi0xPyhXaT1lYihCci5UYXJnZXQuc2xpY2UoMSkpLEJyLlRhcmdl''@;'; put 'put ''dD0iIyIrV2lbMF0rIiEiK1dpWzFdKTpCci5UYXJnZXQubWF0Y2goL15cLlwuW1xcXC9dLykmJihCci5UYXJnZXQ9QnIuVGFyZ2V0LnNsaWNlKDMpKX1icmVhaztkZWZhdWx0OnN3aXRjaChPdFsyXSl7Y2FzZSJkYzoiOmNhc2UiY2FsY2V4dDoiOmNhc2UibG9leHQ6IjpjYXNlIm9vbzoiOmNh''@;'; put 'put ''c2UiY2hhcnRvb286IjpjYXNlImRyYXc6IjpjYXNlInN0eWxlOiI6Y2FzZSJjaGFydDoiOmNhc2UiZm9ybToiOmNhc2UidW9mOiI6Y2FzZSJcdTg4Njg6IjpjYXNlIlx1NWI1NzoiOmJyZWFrO2RlZmF1bHQ6aWYoZ2UuV1RGKXRocm93IG5ldyBFcnJvcihPdCl9fXZhciBxbD17U2hlZXRzOmJ0''@;'; put 'put ''LFNoZWV0TmFtZXM6QnQsV29ya2Jvb2s6SG59O3JldHVybiBnZS5ib29rU2hlZXRzJiZkZWxldGUgcWwuU2hlZXRzLHFsfX0oKTtmdW5jdGlvbiBTSShTLFIpe3JldHVybiBxUyhTLFIpfXZhciBMej1mdW5jdGlvbigpe3ZhciBTPVsiICA8b2ZmaWNlOm1hc3Rlci1zdHlsZXM+IiwnICAgIDxz''@;'; put 'put ''dHlsZTptYXN0ZXItcGFnZSBzdHlsZTpuYW1lPSJtcDEiIHN0eWxlOnBhZ2UtbGF5b3V0LW5hbWU9Im1wMSI+JywiICAgICAgPHN0eWxlOmhlYWRlci8+IiwnICAgICAgPHN0eWxlOmhlYWRlci1sZWZ0IHN0eWxlOmRpc3BsYXk9ImZhbHNlIi8+JywiICAgICAgPHN0eWxlOmZvb3Rlci8+Iiwn''@;'; put 'put ''ICAgICAgPHN0eWxlOmZvb3Rlci1sZWZ0IHN0eWxlOmRpc3BsYXk9ImZhbHNlIi8+JywiICAgIDwvc3R5bGU6bWFzdGVyLXBhZ2U+IiwiICA8L29mZmljZTptYXN0ZXItc3R5bGVzPiJdLmpvaW4oIlxuIiksUj0iPG9mZmljZTpkb2N1bWVudC1zdHlsZXMgIitSdSh7InhtbG5zOm9mZmljZSI6''@;'; put 'put ''InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6b2ZmaWNlOjEuMCIsInhtbG5zOnRhYmxlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp0YWJsZToxLjAiLCJ4bWxuczpzdHlsZSI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1s''@;'; put 'put ''bnM6c3R5bGU6MS4wIiwieG1sbnM6dGV4dCI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6dGV4dDoxLjAiLCJ4bWxuczpkcmF3IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpkcmF3aW5nOjEuMCIsInhtbG5zOmZvIjoidXJuOm9hc2lzOm5h''@;'; put 'put ''bWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp4c2wtZm8tY29tcGF0aWJsZToxLjAiLCJ4bWxuczp4bGluayI6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCJ4bWxuczpkYyI6Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiwieG1sbnM6bnVtYmVyIjoidXJuOm9hc2lz''@;'; put 'put ''Om5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpkYXRhc3R5bGU6MS4wIiwieG1sbnM6c3ZnIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpzdmctY29tcGF0aWJsZToxLjAiLCJ4bWxuczpvZiI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6''@;'; put 'put ''b2Y6MS4yIiwib2ZmaWNlOnZlcnNpb24iOiIxLjIifSkrIj5cbiIrUysiXG48L29mZmljZTpkb2N1bWVudC1zdHlsZXM+IjtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gSWkrUn19KCksTDg9ZnVuY3Rpb24oKXt2YXIgUz1mdW5jdGlvbihwZSx5ZSl7cmV0dXJuIE9yKHBlKS5yZXBsYWNlKC8g''@;'; put 'put ''ICsvZyxmdW5jdGlvbihQZSl7cmV0dXJuJzx0ZXh0OnMgdGV4dDpjPSInK1BlLmxlbmd0aCsnIi8+J30pLnJlcGxhY2UoL1x0L2csIjx0ZXh0OnRhYi8+IikucmVwbGFjZSgvXG4vZyx5ZT8iPHRleHQ6bGluZS1icmVhay8+IjoiPC90ZXh0OnA+PHRleHQ6cD4iKS5yZXBsYWNlKC9eIC8sIjx0''@;'; put 'put ''ZXh0OnMvPiIpLnJlcGxhY2UoLyAkLywiPHRleHQ6cy8+Iil9LFI9ZnVuY3Rpb24ocGUpe3JldHVybiBwZS5tYXAoZnVuY3Rpb24oeWUpe3ZhciBQZT0iIjtyZXR1cm4gbnVsbCE9eWUub2RzJiYoUGUrPScgdGV4dDpzdHlsZS1uYW1lPSJUJyt5ZS5vZHMrJyInKSx5ZS52PyI8dGV4dDpzcGFu''@;'; put 'put ''IitQZSsiPiIrUyh5ZS52LCEwKSsiPC90ZXh0OnNwYW4+IjoiIn0pLmpvaW4oIiIpfSxrPSIgICAgICAgICAgPHRhYmxlOnRhYmxlLWNlbGwgLz5cbiIsUT1mdW5jdGlvbihwZSx5ZSxQZSl7dmFyIE5lPVtdO05lLnB1c2goJyAgICAgIDx0YWJsZTp0YWJsZSB0YWJsZTpuYW1lPSInK09yKHll''@;'; put 'put ''LlNoZWV0TmFtZXNbUGVdKSsnIiB0YWJsZTpzdHlsZS1uYW1lPSJ0YTEiPlxuJyk7dmFyIFllPTAsZXQ9MCx1dD1TcyhwZVsiIXJlZiJdfHwiQTEiKSxFdD1wZVsiIW1lcmdlcyJdfHxbXSxvdD0wLGJ0PUFycmF5LmlzQXJyYXkocGUpO2lmKHBlWyIhY29scyJdKWZvcihldD0wO2V0PD11dC5l''@;'; put 'put ''LmM7KytldClOZS5wdXNoKCIgICAgICAgIDx0YWJsZTp0YWJsZS1jb2x1bW4iKyhwZVsiIWNvbHMiXVtldF0/JyB0YWJsZTpzdHlsZS1uYW1lPSJjbycrcGVbIiFjb2xzIl1bZXRdLm9kcysnIic6IiIpKyI+PC90YWJsZTp0YWJsZS1jb2x1bW4+XG4iKTt2YXIga3Q9cGVbIiFyb3dzIl18fFtd''@;'; put 'put ''O2ZvcihZZT0wO1llPHV0LnMucjsrK1llKU5lLnB1c2goIiAgICAgICAgPHRhYmxlOnRhYmxlLXJvdyIrKGt0W1llXT8nIHRhYmxlOnN0eWxlLW5hbWU9InJvJytrdFtZZV0ub2RzKyciJzoiIikrIj48L3RhYmxlOnRhYmxlLXJvdz5cbiIpO2Zvcig7WWU8PXV0LmUucjsrK1llKXtmb3IoTmUu''@;'; put 'put ''cHVzaCgiICAgICAgICA8dGFibGU6dGFibGUtcm93Iisoa3RbWWVdPycgdGFibGU6c3R5bGUtbmFtZT0icm8nK2t0W1llXS5vZHMrJyInOiIiKSsiPlxuIiksZXQ9MDtldDx1dC5zLmM7KytldClOZS5wdXNoKGspO2Zvcig7ZXQ8PXV0LmUuYzsrK2V0KXt2YXIgT3Q9ITEsS3Q9e30sVG49IiI7''@;'; put 'put ''Zm9yKG90PTA7b3QhPUV0Lmxlbmd0aDsrK290KWlmKCEoRXRbb3RdLnMuYz5ldHx8RXRbb3RdLnMucj5ZZXx8RXRbb3RdLmUuYzxldHx8RXRbb3RdLmUucjxZZSkpeyhFdFtvdF0ucy5jIT1ldHx8RXRbb3RdLnMuciE9WWUpJiYoT3Q9ITApLEt0WyJ0YWJsZTpudW1iZXItY29sdW1ucy1zcGFu''@;'; put 'put ''bmVkIl09RXRbb3RdLmUuYy1FdFtvdF0ucy5jKzEsS3RbInRhYmxlOm51bWJlci1yb3dzLXNwYW5uZWQiXT1FdFtvdF0uZS5yLUV0W290XS5zLnIrMTticmVha31pZihPdClOZS5wdXNoKCIgICAgICAgICAgPHRhYmxlOmNvdmVyZWQtdGFibGUtY2VsbC8+XG4iKTtlbHNle3ZhciBpcj1YaSh7''@;'; put 'put ''cjpZZSxjOmV0fSksU249YnQ/KHBlW1llXXx8W10pW2V0XTpwZVtpcl07aWYoU24mJlNuLmYmJihLdFsidGFibGU6Zm9ybXVsYSJdPU9yKGo0KFNuLmYpKSxTbi5GJiZTbi5GLnNsaWNlKDAsaXIubGVuZ3RoKT09aXIpKXt2YXIgc3I9U3MoU24uRik7S3RbInRhYmxlOm51bWJlci1tYXRyaXgt''@;'; put 'put ''Y29sdW1ucy1zcGFubmVkIl09c3IuZS5jLXNyLnMuYysxLEt0WyJ0YWJsZTpudW1iZXItbWF0cml4LXJvd3Mtc3Bhbm5lZCJdPXNyLmUuci1zci5zLnIrMX1pZihTbil7c3dpdGNoKFNuLnQpe2Nhc2UiYiI6VG49U24udj8iVFJVRSI6IkZBTFNFIixLdFsib2ZmaWNlOnZhbHVlLXR5cGUiXT0i''@;'; put 'put ''Ym9vbGVhbiIsS3RbIm9mZmljZTpib29sZWFuLXZhbHVlIl09U24udj8idHJ1ZSI6ImZhbHNlIjticmVhaztjYXNlIm4iOlRuPVNuLnd8fFN0cmluZyhTbi52fHwwKSxLdFsib2ZmaWNlOnZhbHVlLXR5cGUiXT0iZmxvYXQiLEt0WyJvZmZpY2U6dmFsdWUiXT1Tbi52fHwwO2JyZWFrO2Nhc2Ui''@;'; put 'put ''cyI6Y2FzZSJzdHIiOlRuPVNuLnYsS3RbIm9mZmljZTp2YWx1ZS10eXBlIl09InN0cmluZyI7YnJlYWs7Y2FzZSJkIjpUbj1Tbi53fHxIZShTbi52KS50b0lTT1N0cmluZygpLEt0WyJvZmZpY2U6dmFsdWUtdHlwZSJdPSJkYXRlIixLdFsib2ZmaWNlOmRhdGUtdmFsdWUiXT1IZShTbi52KS50''@;'; put 'put ''b0lTT1N0cmluZygpLEt0WyJ0YWJsZTpzdHlsZS1uYW1lIl09ImNlMSI7YnJlYWs7ZGVmYXVsdDpOZS5wdXNoKGspO2NvbnRpbnVlfW51bGwhPVNuLm9kcyYmIUt0WyJ0YWJsZTpzdHlsZS1uYW1lIl0mJihLdFsidGFibGU6c3R5bGUtbmFtZSJdPSJjZSIrU24ub2RzKTt2YXIgSm49IVNuLlJ8''@;'; put 'put ''fFNuLmwmJlNuLmwuVGFyZ2V0P1MoVG4pOlIoU24uUik7aWYoU24ubCYmU24ubC5UYXJnZXQpe3ZhciBWbj1Tbi5sLlRhcmdldDsiIyIhPShWbj0iIyI9PVZuLmNoYXJBdCgwKT8iIyIrc0QoVm4uc2xpY2UoMSkpOlZuKS5jaGFyQXQoMCkmJiFWbi5tYXRjaCgvXlx3KzovKSYmKFZuPSIuLi8i''@;'; put 'put ''K1ZuKSxKbj1GcigidGV4dDphIixKbix7InhsaW5rOmhyZWYiOlZuLnJlcGxhY2UoLyYvZywiJmFtcDsiKX0pfU5lLnB1c2goIiAgICAgICAgICAiK0ZyKCJ0YWJsZTp0YWJsZS1jZWxsIixGcigidGV4dDpwIixKbix7fSksS3QpKyJcbiIpfWVsc2UgTmUucHVzaChrKX19TmUucHVzaCgiICAg''@;'; put 'put ''ICAgICA8L3RhYmxlOnRhYmxlLXJvdz5cbiIpfXJldHVybiBOZS5wdXNoKCIgICAgICA8L3RhYmxlOnRhYmxlPlxuIiksTmUuam9pbigiIil9LGFlPXtjZW50ZXI6ImNlbnRlciIsbGVmdDoic3RhcnQiLHJpZ2h0OiJlbmQifTtyZXR1cm4gZnVuY3Rpb24oeWUsUGUpe3ZhciBOZT1bSWldLFll''@;'; put 'put ''PVJ1KHsieG1sbnM6b2ZmaWNlIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpvZmZpY2U6MS4wIiwieG1sbnM6dGFibGUiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnRhYmxlOjEuMCIsInhtbG5zOnN0eWxlIjoidXJuOm9hc2lzOm5hbWVz''@;'; put 'put ''OnRjOm9wZW5kb2N1bWVudDp4bWxuczpzdHlsZToxLjAiLCJ4bWxuczp0ZXh0IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczp0ZXh0OjEuMCIsInhtbG5zOmRyYXciOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmRyYXdpbmc6MS4wIiwieG1s''@;'; put 'put ''bnM6Zm8iOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOnhzbC1mby1jb21wYXRpYmxlOjEuMCIsInhtbG5zOnhsaW5rIjoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsInhtbG5zOmRjIjoiaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iLCJ4bWxu''@;'; put 'put ''czptZXRhIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczptZXRhOjEuMCIsInhtbG5zOm51bWJlciI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6ZGF0YXN0eWxlOjEuMCIsInhtbG5zOnByZXNlbnRhdGlvbiI6InVybjpvYXNpczpuYW1lczp0''@;'; put 'put ''YzpvcGVuZG9jdW1lbnQ6eG1sbnM6cHJlc2VudGF0aW9uOjEuMCIsInhtbG5zOnN2ZyI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6c3ZnLWNvbXBhdGlibGU6MS4wIiwieG1sbnM6Y2hhcnQiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmNo''@;'; put 'put ''YXJ0OjEuMCIsInhtbG5zOmRyM2QiOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmRyM2Q6MS4wIiwieG1sbnM6bWF0aCI6Imh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiLCJ4bWxuczpmb3JtIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVu''@;'; put 'put ''dDp4bWxuczpmb3JtOjEuMCIsInhtbG5zOnNjcmlwdCI6InVybjpvYXNpczpuYW1lczp0YzpvcGVuZG9jdW1lbnQ6eG1sbnM6c2NyaXB0OjEuMCIsInhtbG5zOm9vbyI6Imh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDA0L29mZmljZSIsInhtbG5zOm9vb3ciOiJodHRwOi8vb3Blbm9mZmljZS5v''@;'; put 'put ''cmcvMjAwNC93cml0ZXIiLCJ4bWxuczpvb29jIjoiaHR0cDovL29wZW5vZmZpY2Uub3JnLzIwMDQvY2FsYyIsInhtbG5zOmRvbSI6Imh0dHA6Ly93d3cudzMub3JnLzIwMDEveG1sLWV2ZW50cyIsInhtbG5zOnhmb3JtcyI6Imh0dHA6Ly93d3cudzMub3JnLzIwMDIveGZvcm1zIiwieG1sbnM6''@;'; put 'put ''eHNkIjoiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLCJ4bWxuczp4c2kiOiJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIsInhtbG5zOnNoZWV0IjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDpzaDMzdGpzOjEuMCIsInhtbG5zOnJw''@;'; put 'put ''dCI6Imh0dHA6Ly9vcGVub2ZmaWNlLm9yZy8yMDA1L3JlcG9ydCIsInhtbG5zOm9mIjoidXJuOm9hc2lzOm5hbWVzOnRjOm9wZW5kb2N1bWVudDp4bWxuczpvZjoxLjIiLCJ4bWxuczp4aHRtbCI6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLCJ4bWxuczpncmRkbCI6Imh0dHA6Ly93''@;'; put 'put ''d3cudzMub3JnLzIwMDMvZy9kYXRhLXZpZXcjIiwieG1sbnM6dGFibGVvb28iOiJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAwOS90YWJsZSIsInhtbG5zOmRyYXdvb28iOiJodHRwOi8vb3Blbm9mZmljZS5vcmcvMjAxMC9kcmF3IiwieG1sbnM6Y2FsY2V4dCI6InVybjpvcmc6ZG9jdW1lbnRm''@;'; put 'put ''b3VuZGF0aW9uOm5hbWVzOmV4cGVyaW1lbnRhbDpjYWxjOnhtbG5zOmNhbGNleHQ6MS4wIiwieG1sbnM6bG9leHQiOiJ1cm46b3JnOmRvY3VtZW50Zm91bmRhdGlvbjpuYW1lczpleHBlcmltZW50YWw6b2ZmaWNlOnhtbG5zOmxvZXh0OjEuMCIsInhtbG5zOmZpZWxkIjoidXJuOm9wZW5vZmZp''@;'; put 'put ''Y2U6bmFtZXM6ZXhwZXJpbWVudGFsOm9vby1tcy1pbnRlcm9wOnhtbG5zOmZpZWxkOjEuMCIsInhtbG5zOmZvcm14IjoidXJuOm9wZW5vZmZpY2U6bmFtZXM6ZXhwZXJpbWVudGFsOm9veG1sLW9kZi1pbnRlcm9wOnhtbG5zOmZvcm06MS4wIiwieG1sbnM6Y3NzM3QiOiJodHRwOi8vd3d3Lncz''@;'; put 'put ''Lm9yZy9UUi9jc3MzLXRleHQvIiwib2ZmaWNlOnZlcnNpb24iOiIxLjIifSksZXQ9UnUoeyJ4bWxuczpjb25maWciOiJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOmNvbmZpZzoxLjAiLCJvZmZpY2U6bWltZXR5cGUiOiJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRv''@;'; put 'put ''Y3VtZW50LnNwcmVhZHNoZWV0In0pOyJmb2RzIj09UGUuYm9va1R5cGU/KE5lLnB1c2goIjxvZmZpY2U6ZG9jdW1lbnQiK1llK2V0KyI+XG4iKSxOZS5wdXNoKEQ2KCkucmVwbGFjZSgvb2ZmaWNlOmRvY3VtZW50LW1ldGEvZywib2ZmaWNlOm1ldGEiKSkpOk5lLnB1c2goIjxvZmZpY2U6ZG9j''@;'; put 'put ''dW1lbnQtY29udGVudCIrWWUrIj5cbiIpLGZ1bmN0aW9uKHBlLHllKXt2YXIgUGU9W10sTmU9e307UGUucHVzaCgiIDxvZmZpY2U6YXV0b21hdGljLXN0eWxlcz5cbiIpLFBlLnB1c2goJyAgPG51bWJlcjpkYXRlLXN0eWxlIHN0eWxlOm5hbWU9Ik4zNyIgbnVtYmVyOmF1dG9tYXRpYy1vcmRl''@;'; put 'put ''cj0idHJ1ZSI+XG4nKSxQZS5wdXNoKCcgICA8bnVtYmVyOm1vbnRoIG51bWJlcjpzdHlsZT0ibG9uZyIvPlxuJyksUGUucHVzaCgiICAgPG51bWJlcjp0ZXh0Pi88L251bWJlcjp0ZXh0PlxuIiksUGUucHVzaCgnICAgPG51bWJlcjpkYXkgbnVtYmVyOnN0eWxlPSJsb25nIi8+XG4nKSxQZS5w''@;'; put 'put ''dXNoKCIgICA8bnVtYmVyOnRleHQ+LzwvbnVtYmVyOnRleHQ+XG4iKSxQZS5wdXNoKCIgICA8bnVtYmVyOnllYXIvPlxuIiksUGUucHVzaCgiICA8L251bWJlcjpkYXRlLXN0eWxlPlxuIik7dmFyIFllPTA7eWUuU2hlZXROYW1lcy5tYXAoZnVuY3Rpb24ob3Qpe3JldHVybiB5ZS5TaGVldHNb''@;'; put 'put ''b3RdfSkuZm9yRWFjaChmdW5jdGlvbihvdCl7aWYob3QmJm90WyIhY29scyJdKWZvcih2YXIgYnQ9MDtidDxvdFsiIWNvbHMiXS5sZW5ndGg7KytidClpZihvdFsiIWNvbHMiXVtidF0pe3ZhciBCdD1vdFsiIWNvbHMiXVtidF07aWYobnVsbD09QnQud2lkdGgmJm51bGw9PUJ0LndweCYmbnVs''@;'; put 'put ''bD09QnQud2NoKWNvbnRpbnVlO2UxKEJ0KSxCdC5vZHM9WWU7dmFyIGt0PW90WyIhY29scyJdW2J0XS53cHgrInB4IjtQZS5wdXNoKCcgIDxzdHlsZTpzdHlsZSBzdHlsZTpuYW1lPSJjbycrWWUrJyIgc3R5bGU6ZmFtaWx5PSJ0YWJsZS1jb2x1bW4iPlxuJyksUGUucHVzaCgnICAgPHN0eWxl''@;'; put 'put ''OnRhYmxlLWNvbHVtbi1wcm9wZXJ0aWVzIGZvOmJyZWFrLWJlZm9yZT0iYXV0byIgc3R5bGU6Y29sdW1uLXdpZHRoPSInK2t0KyciLz5cbicpLFBlLnB1c2goIiAgPC9zdHlsZTpzdHlsZT5cbiIpLCsrWWV9fSk7dmFyIGV0PTA7eWUuU2hlZXROYW1lcy5tYXAoZnVuY3Rpb24ob3Qpe3JldHVy''@;'; put 'put ''biB5ZS5TaGVldHNbb3RdfSkuZm9yRWFjaChmdW5jdGlvbihvdCl7aWYob3QmJm90WyIhcm93cyJdKWZvcih2YXIgYnQ9MDtidDxvdFsiIXJvd3MiXS5sZW5ndGg7KytidClpZihvdFsiIXJvd3MiXVtidF0pe290WyIhcm93cyJdW2J0XS5vZHM9ZXQ7dmFyIEJ0PW90WyIhcm93cyJdW2J0XS5o''@;'; put 'put ''cHgrInB4IjtQZS5wdXNoKCcgIDxzdHlsZTpzdHlsZSBzdHlsZTpuYW1lPSJybycrZXQrJyIgc3R5bGU6ZmFtaWx5PSJ0YWJsZS1yb3ciPlxuJyksUGUucHVzaCgnICAgPHN0eWxlOnRhYmxlLXJvdy1wcm9wZXJ0aWVzIGZvOmJyZWFrLWJlZm9yZT0iYXV0byIgc3R5bGU6cm93LWhlaWdodD0i''@;'; put 'put ''JytCdCsnIi8+XG4nKSxQZS5wdXNoKCIgIDwvc3R5bGU6c3R5bGU+XG4iKSwrK2V0fX0pLFBlLnB1c2goJyAgPHN0eWxlOnN0eWxlIHN0eWxlOm5hbWU9InRhMSIgc3R5bGU6ZmFtaWx5PSJ0YWJsZSIgc3R5bGU6bWFzdGVyLXBhZ2UtbmFtZT0ibXAxIj5cbicpLFBlLnB1c2goJyAgIDxzdHls''@;'; put 'put ''ZTp0YWJsZS1wcm9wZXJ0aWVzIHRhYmxlOmRpc3BsYXk9InRydWUiIHN0eWxlOndyaXRpbmctbW9kZT0ibHItdGIiLz5cbicpLFBlLnB1c2goIiAgPC9zdHlsZTpzdHlsZT5cbiIpLFBlLnB1c2goJyAgPHN0eWxlOnN0eWxlIHN0eWxlOm5hbWU9ImNlMSIgc3R5bGU6ZmFtaWx5PSJ0YWJsZS1j''@;'; put 'put ''ZWxsIiBzdHlsZTpwYXJlbnQtc3R5bGUtbmFtZT0iRGVmYXVsdCIgc3R5bGU6ZGF0YS1zdHlsZS1uYW1lPSJOMzciLz5cbicpO3ZhciB1dD0yO2V0PTAseWUuU2hlZXROYW1lcy5tYXAoZnVuY3Rpb24ob3Qpe3JldHVybiB5ZS5TaGVldHNbb3RdfSkuZm9yRWFjaChmdW5jdGlvbihvdCl7aWYo''@;'; put 'put ''b3QpZm9yKHZhciBidD0wLEJ0PTAsa3Q9U3Mob3RbIiFyZWYiXSksT3Q9QXJyYXkuaXNBcnJheShvdCk7YnQ8PWt0LmUucjsrK2J0KWZvcihCdD0wO0J0PD1rdC5lLmM7KytCdCl7dmFyIEt0PVhpKHtyOmJ0LGM6QnR9KSxUbj1PdD8ob3RbYnRdfHxbXSlbQnRdOm90W0t0XTtpZihUbiYmKFRu''@;'; put 'put ''LnN8fFRuLlIpKXt2YXIgaXI9W107VG4ucyYmaXIucHVzaChbVG4sITBdKSxUbi5SJiZUbi5SLmZvckVhY2goZnVuY3Rpb24oU24pe1NuJiZTbi5zJiZpci5wdXNoKFtTbiwhMV0pfSksaXIuZm9yRWFjaChmdW5jdGlvbihTbil7dmFyIHNyPVNuWzBdLEpuPXNyLnMsVm49IiIsdXI9eyJzdHls''@;'; put 'put ''ZTpuYW1lIjooU25bMV0/ImNlIjoiVCIpK3V0LCJzdHlsZTpmYW1pbHkiOlNuWzFdPyJ0YWJsZS1jZWxsIjoidGV4dCJ9O1NuWzFdJiYodXJbInN0eWxlOnBhcmVudC1zdHlsZS1uYW1lIl09IkRlZmF1bHQiLHVyWyJzdHlsZTpkYXRhLXN0eWxlLW5hbWUiXT0iTjAiKTt2YXIgZ3I9e30sdHI9''@;'; put 'put ''ITEsQ2k9e30sRmk9ITEsaW89e30sdW89ITE7aWYoSm4uY29sb3ImJihDaVsiZm86Y29sb3IiXT0iIyIrUDAoSm4uY29sb3IucmdiKSxGaT0hMCksSm4uc3omJihDaVsiZm86Zm9udC1zaXplIl09Sm4uc3orInB0IixGaT0hMCksSm4uYm9sZCYmKENpWyJmbzpmb250LXdlaWdodCJdPSJib2xk''@;'; put 'put ''IixGaT0hMCksSm4uaXRhbGljJiYoQ2lbImZvOmZvbnQtc3R5bGUiXT0iaXRhbGljIixGaT0hMCksSm4ubmFtZSYmKE5lW0puLm5hbWVdfHwoTmVbSm4ubmFtZV09Sm4ubmFtZS5tYXRjaCgvIC8pPyImYXBvczsiK0puLm5hbWUrIiZhcG9zOyI6Sm4ubmFtZSksQ2lbInN0eWxlOmZvbnQtbmFt''@;'; put 'put ''ZSJdPUpuLm5hbWUsRmk9ITApLEpuLnN0cmlrZSYmKENpWyJzdHlsZTp0ZXh0LWxpbmUtdGhyb3VnaC1zdHlsZSJdPSJzb2xpZCIsQ2lbInN0eWxlOnRleHQtbGluZS10aHJvdWdoLXR5cGUiXT0ic2luZ2xlIixGaT0hMCksSm4udW5kZXJsaW5lJiYoQ2lbInN0eWxlOnRleHQtdW5kZXJsaW5l''@;'; put 'put ''LXN0eWxlIl09InNvbGlkIixDaVsic3R5bGU6dGV4dC11bmRlcmxpbmUtd2lkdGgiXT0iYXV0byIsQ2lbInN0eWxlOnRleHQtdW5kZXJsaW5lLWNvbG9yIl09ImZvbnQtY29sb3IiLEZpPSEwKSxTblsxXSl7aWYoSm4uYWxpZ25tZW50KXt2YXIgTGk9Sm4uYWxpZ25tZW50O0xpLndyYXBUZXh0''@;'; put 'put ''JiYoZ3JbImZvOndyYXAtb3B0aW9uIl09IndyYXAiLHRyPSEwKSxMaS52ZXJ0aWNhbCYmKGdyWyJzdHlsZTp2ZXJ0aWNhbC1hbGlnbiJdPSJjZW50ZXIiPT1MaS52ZXJ0aWNhbD8ibWlkZGxlIjpMaS52ZXJ0aWNhbCx0cj0hMCksYWVbTGkuaG9yaXpvbnRhbF0mJihpb1siZm86dGV4dC1hbGln''@;'; put 'put ''biJdPWFlW0xpLmhvcml6b250YWxdLHVvPSEwKX1Kbi5mZ0NvbG9yJiYoZ3JbImZvOmJhY2tncm91bmQtY29sb3IiXT0iIyIrUDAoSm4uZmdDb2xvci5yZ2IpLHRyPSEwKX10ciYmKFZuKz1Gcigic3R5bGU6dGFibGUtY2VsbC1wcm9wZXJ0aWVzIixudWxsLGdyKSksRmkmJihWbis9RnIoInN0''@;'; put 'put ''eWxlOnRleHQtcHJvcGVydGllcyIsbnVsbCxDaSkpLHVvJiYoVm4rPUZyKCJzdHlsZTpwYXJhZ3JhcGgtcHJvcGVydGllcyIsbnVsbCxpbykpLFBlLnB1c2goIiAgIitGcigic3R5bGU6c3R5bGUiLFZuLHVyKSsiXG4iKSxzci5vZHM9dXQsKyt1dH0pfX19KSxQZS5wdXNoKCIgPC9vZmZpY2U6''@;'; put 'put ''YXV0b21hdGljLXN0eWxlcz5cbiIpO3ZhciBFdD0iIDxvZmZpY2U6Zm9udC1mYWNlLWRlY2xzPlxuIitSZShOZSkubWFwKGZ1bmN0aW9uKG90KXtyZXR1cm4nICA8c3R5bGU6Zm9udC1mYWNlIHN0eWxlOm5hbWU9Iicrb3QrJyIgc3ZnOmZvbnQtZmFtaWx5PSInK05lW290XSsnIi8+XG4nfSku''@;'; put 'put ''am9pbigiIikrIiA8L29mZmljZTpmb250LWZhY2UtZGVjbHM+XG4iO3BlLnB1c2goRXQpLHBlLnB1c2goUGUuam9pbigiIikpfShOZSx5ZSksTmUucHVzaCgiICA8b2ZmaWNlOmJvZHk+XG4iKSxOZS5wdXNoKCIgICAgPG9mZmljZTpzcHJlYWRzaGVldD5cbiIpO2Zvcih2YXIgdXQ9MDt1dCE9''@;'; put 'put ''eWUuU2hlZXROYW1lcy5sZW5ndGg7Kyt1dClOZS5wdXNoKFEoeWUuU2hlZXRzW3llLlNoZWV0TmFtZXNbdXRdXSx5ZSx1dCkpO3JldHVybiBOZS5wdXNoKCIgICAgPC9vZmZpY2U6c3ByZWFkc2hlZXQ+XG4iKSxOZS5wdXNoKCIgIDwvb2ZmaWNlOmJvZHk+XG4iKSxOZS5wdXNoKCJmb2RzIj09''@;'; put 'put ''UGUuYm9va1R5cGU/Ijwvb2ZmaWNlOmRvY3VtZW50PiI6Ijwvb2ZmaWNlOmRvY3VtZW50LWNvbnRlbnQ+IiksTmUuam9pbigiIil9fSgpO2Z1bmN0aW9uIE1JKFMsUil7aWYoImZvZHMiPT1SLmJvb2tUeXBlKXJldHVybiBMOChTLFIpO3ZhciBrPWRpKCksRz0iIixRPVtdLGFlPVtdO3JldHVy''@;'; put 'put ''biBCbihrLEc9Im1pbWV0eXBlIiwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldCIpLEJuKGssRz0iY29udGVudC54bWwiLEw4KFMsUikpLFEucHVzaChbRywidGV4dC94bWwiXSksYWUucHVzaChbRywiQ29udGVudEZpbGUiXSksQm4oayxHPSJzdHlsZXMu''@;'; put 'put ''eG1sIixMeihTLFIpKSxRLnB1c2goW0csInRleHQveG1sIl0pLGFlLnB1c2goW0csIlN0eWxlc0ZpbGUiXSksQm4oayxHPSJtZXRhLnhtbCIsSWkrRDYoKSksUS5wdXNoKFtHLCJ0ZXh0L3htbCJdKSxhZS5wdXNoKFtHLCJNZXRhZGF0YUZpbGUiXSksQm4oayxHPSJtYW5pZmVzdC5yZGYiLGZ1''@;'; put 'put ''bmN0aW9uIE91KFMpe3ZhciBSPVtJaV07Ui5wdXNoKCc8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPlxuJyk7Zm9yKHZhciBrPTA7ayE9Uy5sZW5ndGg7KytrKVIucHVzaChRYyhTW2tdWzBdLFNba11bMV0pKSxSLnB1c2go''@;'; put 'put ''WGgoIiIsU1trXVswXSkpO3JldHVybiBSLnB1c2goUWMoIiIsIkRvY3VtZW50IiwicGtnIikpLFIucHVzaCgiPC9yZGY6UkRGPiIpLFIuam9pbigiIil9KGFlKSksUS5wdXNoKFtHLCJhcHBsaWNhdGlvbi9yZGYreG1sIl0pLEJuKGssRz0iTUVUQS1JTkYvbWFuaWZlc3QueG1sIixmdW5jdGlv''@;'; put 'put ''biBNYyhTKXt2YXIgUj1bSWldO1IucHVzaCgnPG1hbmlmZXN0Om1hbmlmZXN0IHhtbG5zOm1hbmlmZXN0PSJ1cm46b2FzaXM6bmFtZXM6dGM6b3BlbmRvY3VtZW50OnhtbG5zOm1hbmlmZXN0OjEuMCIgbWFuaWZlc3Q6dmVyc2lvbj0iMS4yIj5cbicpLFIucHVzaCgnICA8bWFuaWZlc3Q6Zmls''@;'; put 'put ''ZS1lbnRyeSBtYW5pZmVzdDpmdWxsLXBhdGg9Ii8iIG1hbmlmZXN0OnZlcnNpb249IjEuMiIgbWFuaWZlc3Q6bWVkaWEtdHlwZT0iYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldCIvPlxuJyk7Zm9yKHZhciBrPTA7azxTLmxlbmd0aDsrK2spUi5wdXNoKCcg''@;'; put 'put ''IDxtYW5pZmVzdDpmaWxlLWVudHJ5IG1hbmlmZXN0OmZ1bGwtcGF0aD0iJytTW2tdWzBdKyciIG1hbmlmZXN0Om1lZGlhLXR5cGU9IicrU1trXVsxXSsnIi8+XG4nKTtyZXR1cm4gUi5wdXNoKCI8L21hbmlmZXN0Om1hbmlmZXN0PiIpLFIuam9pbigiIil9KFEpKSxrfWZ1bmN0aW9uIEFmKFMp''@;'; put 'put ''e3JldHVybiBmdW5jdGlvbihrLEcpe3ZhciBRPWZ1bmN0aW9uIE96KFMsUil7aWYoIVIpcmV0dXJuIDA7dmFyIGs9Uy5TaGVldE5hbWVzLmluZGV4T2YoUik7aWYoLTE9PWspdGhyb3cgbmV3IEVycm9yKCJTaGVldCBub3QgZm91bmQ6ICIrUik7cmV0dXJuIGt9KGssRy5zaGVldCk7cmV0dXJu''@;'; put 'put ''IFMuZnJvbV9zaGVldChrLlNoZWV0c1trLlNoZWV0TmFtZXNbUV1dLEcsayl9fXZhciBQej1BZihtZCksRno9QWYoe2Zyb21fc2hlZXQ6QzB9KSxIej1BZih0eXBlb2YgbEM8InUiP2xDOnt9KSx2ZD1BZih0eXBlb2YgTXY8InUiP012Ont9KSx4ST1BZih0eXBlb2YgRjM8InUiP0YzOnt9KSxF''@;'; put 'put ''ST1BZih0eXBlb2YgTHY8InUiP0x2Ont9KSxOej1BZih7ZnJvbV9zaGVldDpMSX0pLFVuZT1BZih0eXBlb2YgUDM8InUiP1AzOnt9KSxUST1BZih0eXBlb2YgRzY8InUiP0c2Ont9KSx6bD1fKDkxNDI2KXx8dHlwZW9mIHdpbmRvdzwidSImJndpbmRvdy5jcnlwdG9Ccm93c2VyaWZ5O2lmKCF6''@;'; put 'put ''bCl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIGNyeXB0byBleHRlbnNpb25zISIpO3ZhciBYMz17U0hBNTEyOiJzaGE1MTIiLFNIQTI1Njoic2hhMjU2IixTSEEzODQ6InNoYTM4NCIsU0hBMToic2hhMSIsTUQ1OiJtZDUiLE1ENDoibWQ0IixNRDI6Im1kMiJ9O2Z1bmN0aW9uIGZjKFMs''@;'; put 'put ''Uil7c3dpdGNoKFI9KFJ8fCIiKS5yZXBsYWNlKC8tL2csIiIpKXtjYXNlIlNIQS01MTIiOmNhc2UiU0hBNTEyIjpyZXR1cm4gbmV3IHpsLmNyZWF0ZUhhc2goInNoYTUxMiIpLnVwZGF0ZShTKS5kaWdlc3QoKTtjYXNlIlNIQS0xIjpjYXNlIlNIQTEiOnJldHVybiBuZXcgemwuY3JlYXRlSGFz''@;'; put 'put ''aCgic2hhMSIpLnVwZGF0ZShTKS5kaWdlc3QoKTtjYXNlIk1EMiI6cmV0dXJuIG5ldyB6bC5jcmVhdGVIYXNoKCJtZDIiKS51cGRhdGUoUykuZGlnZXN0KCk7ZGVmYXVsdDppZihYM1tSXSlyZXR1cm4gbmV3IHpsLmNyZWF0ZUhhc2goWDNbUl0pLnVwZGF0ZShTKS5kaWdlc3QoKTt0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIlVuc3VwcG9ydGVkIGhhc2ggYWxnb3JpdGhtICIrUil9fWZ1bmN0aW9uIFU0KFMsUixrKXtpZigicmMyIj09ayl0aHJvdyJVbnN1cHBvcnRlZCBSQzIiO3ZhciBHPXpsLmNyZWF0ZURlY2lwaGVyaXYoa3x8ImFlcy0yNTYtY2JjIixTLFIpO3JldHVybiBHLnNldEF1dG9QYWRk''@;'; put 'put ''aW5nKCExKSxHfWZ1bmN0aW9uIE84KFMpe3JldHVyblsoIjAwIisoMjU1JlMpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpLCgiMDAiKyhTPj4+OCYyNTUpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpLCgiMDAiKyhTPj4+MTYmMjU1KS50b1N0cmluZygxNikpLnNsaWNlKC0yKSwoIjAwIisoUz4+''@;'; put 'put ''PjI0JjI1NSkudG9TdHJpbmcoMTYpKS5zbGljZSgtMildLmpvaW4oIiIpfXZhciBaND1mdW5jdGlvbihTLFIsayl7Zm9yKHZhciBHPSJzdHJpbmciPT10eXBlb2YgUj9CdWZmZXIuZnJvbShSLCJoZXgiKTpSLFE9InN0cmluZyI9PXR5cGVvZiBTP0J1ZmZlci5mcm9tKGNwdGFibGUudXRpbHMu''@;'; put 'put ''ZW5jb2RlKDEyMDAsUykpOlMsYWU9InN0cmluZyI9PXR5cGVvZiBrP0J1ZmZlci5mcm9tKGssImhleCIpOmssZ2U9ZmMoUSwiTUQ1IikscGU9QnVmZmVyLmNvbmNhdChbZ2Uuc2xpY2UoMCw1KSxHXSkseWU9MDt5ZTw0OysreWUpcGU9QnVmZmVyLmNvbmNhdChbcGUscGVdKTt2YXIgUGU9ZmMo''@;'; put 'put ''cGUsIk1ENSIpO3JldHVybihmYyhCdWZmZXIuY29uY2F0KFtQZS5zbGljZSgwLDUpLGFlXSksIk1ENSIpLnRvU3RyaW5nKCJoZXgiKSsiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiKS5zbGljZSgwLDMyKX0sVzQ9ZnVuY3Rpb24oUyxSLGspe3ZhciBHPSJzdHJpbmciPT10eXBl''@;'; put 'put ''b2YgUj9CdWZmZXIuZnJvbShSLCJoZXgiKTpSLFE9InN0cmluZyI9PXR5cGVvZiBTP0J1ZmZlci5mcm9tKGNwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAsUykpOlMsYWU9InN0cmluZyI9PXR5cGVvZiBrP0J1ZmZlci5mcm9tKGssImhleCIpOmssZ2U9ZmMoQnVmZmVyLmNvbmNhdChbRyxRXSks''@;'; put 'put ''IlNIQTEiKTtyZXR1cm4gZmMoQnVmZmVyLmNvbmNhdChbZ2UsYWVdKSwiU0hBMSIpfSxqej1mdW5jdGlvbigpe2Z1bmN0aW9uIFIoKXt9Ui5wcm90b3R5cGUuYnVpbGQ9ZnVuY3Rpb24ob3Qpe3RoaXMuX2k9MDt2YXIgYnQ9dGhpcy5fYnVpbGQob3QsIiIpO3JldHVybiIiPT09YnQ/IiI6Jzw/''@;'; put 'put ''eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4nK2J0fSxSLnByb3RvdHlwZS5fYnVpbGQ9ZnVuY3Rpb24ob3QsYnQpe2lmKHRoaXMuX2krKyUxZTY9PTAmJih0aGlzLl9jPWJ0WzBdKSxudWxsPT1vdHx8Im9iamVjdCIhPXR5cGVvZiBvdCYmImZ1''@;'; put 'put ''bmN0aW9uIiE9dHlwZW9mIG90KW51bGwhPW90JiYoYnQrPWZ1bmN0aW9uIFMob3QsYnQpe3JldHVybiBudWxsPT1vdHx8KG90PW90LnRvU3RyaW5nKCkucmVwbGFjZSgvJi9nLCImYW1wOyIpLnJlcGxhY2UoLzwvZywiJmx0OyIpLnJlcGxhY2UoLz4vZywiJmd0OyIpLGJ0JiYob3Q9b3QucmVw''@;'; put 'put ''bGFjZSgvIi9nLCImcXVvdDsiKSkpLG90fShvdCkpO2Vsc2V7aWYoIW90Lm5hbWUpdGhyb3cgbmV3IEVycm9yKCJYTUwgbm9kZSBkb2VzIG5vdCBoYXZlIG5hbWU6ICIrSlNPTi5zdHJpbmdpZnkob3QpKTtidCs9IjwiK290Lm5hbWU7dmFyIEJ0PXRoaXM7YnQrPW90LmF0dHJpYnV0ZXMmJlJ1''@;'; put 'put ''KG90LmF0dHJpYnV0ZXMpfHwiIixBcnJheS5pc0FycmF5KG90LmNoaWxkcmVuKSYmMCE9b3QuY2hpbGRyZW4ubGVuZ3RoPyhidCs9Ij4iLG90LmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oa3Qpe2J0PUJ0Ll9idWlsZChrdCxidCl9KSxidCs9IjwvIitvdC5uYW1lKyI+Iik6YnQrPSIvPiJ9''@;'; put 'put ''cmV0dXJuIGJ0fTt2YXIgaz1CdWZmZXIuZnJvbShbNCwwLDQsMCw2NCwwLDAsMF0pLGFlPXtkYXRhSW50ZWdyaXR5OntobWFjS2V5OkJ1ZmZlci5mcm9tKFs5NSwxNzgsMTczLDEsMTIsMTg1LDIyNSwyNDZdKSxobWFjVmFsdWU6QnVmZmVyLmZyb20oWzE2MCwxMDMsMTI3LDIsMTc4LDQ0LDEz''@;'; put 'put ''Miw1MV0pfSxrZXk6QnVmZmVyLmZyb20oWzIwLDExMCwxMSwyMzEsMTcxLDE3MiwyMDgsMjE0XSksdmVyaWZpZXJIYXNoOntpbnB1dDpCdWZmZXIuZnJvbShbMjU0LDE2NywyMTAsMTE4LDU5LDc1LDE1OCwxMjFdKSx2YWx1ZTpCdWZmZXIuZnJvbShbMjE1LDE3MCwxNSwxMDksNDgsOTcsNTIs''@;'; put 'put ''NzhdKX19O2Z1bmN0aW9uIGdlKG90LGJ0LEJ0LGt0LE90LEt0KXt2YXIgVG49YnQudG9Mb3dlckNhc2UoKSsiLSIrOCprdC5sZW5ndGg7aWYoIkNoYWluaW5nTW9kZUNCQyIhPT1CdCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gY2lwaGVyIGNoYWluaW5nOiAiK0J0KTt2YXIgaXI9emxbb3Q/''@;'; put 'put ''ImNyZWF0ZUNpcGhlcml2IjoiY3JlYXRlRGVjaXBoZXJpdiJdKFRuKz0iLWNiYyIsa3QsT3QpO2lyLnNldEF1dG9QYWRkaW5nKCExKTt2YXIgU249aXIudXBkYXRlKEt0KSxzcj1bU25dO3RyeXt2YXIgSm49aXIuZmluYWwoKTtzci5wdXNoKEpuKX1jYXRjaHt9cmV0dXJuIEJ1ZmZlci5jb25j''@;'; put 'put ''YXQoc3IpfWZ1bmN0aW9uIHBlKG90KXtvdD1vdC50b0xvd2VyQ2FzZSgpO3ZhciBidD1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtpZih6bC5nZXRIYXNoZXMoKS5pbmRleE9mKG90KTwwKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgaGFzaCBhbGdvcml0aG0gIitvdCk7dmFyIGt0''@;'; put 'put ''PXpsLmNyZWF0ZUhhc2gob3QpO3JldHVybiBrdC51cGRhdGUoQnVmZmVyLmNvbmNhdChidCkpLGt0LmRpZ2VzdCgpfWZ1bmN0aW9uIHllKG90LGJ0LEJ0LGt0KXsibnVtYmVyIj09dHlwZW9mIGt0JiYoa3Q9UGUoa3QpKTt2YXIgT3Q9cGUob3QsYnQsa3QpO2lmKE90Lmxlbmd0aDxCdCl7dmFy''@;'; put 'put ''IEt0PUJ1ZmZlci5hbGxvYyhCdCw1NCk7T3QuY29weShLdCksT3Q9S3R9ZWxzZSBPdC5sZW5ndGg+QnQmJihPdD1PdC5zbGljZSgwLEJ0KSk7cmV0dXJuIE90fWZ1bmN0aW9uIFBlKG90LGJ0KXt2YXIgQnQ9QnVmZmVyLmFsbG9jKGJ0fHw0KTtyZXR1cm4gQnQud3JpdGVVSW50MzJMRShvdCww''@;'; put 'put ''KSxCdH1mdW5jdGlvbiBOZShvdCxidCxCdCxrdCxPdCxLdCl7Zm9yKHZhciBpcj1wZShidCxCdCxCdWZmZXIuZnJvbShvdCwidXRmMTZsZSIpKSxTbj0wO1NuPGt0O1NuKyspaXI9cGUoYnQsUGUoU24pLGlyKTt2YXIgSm49T3QvODtpZigoaXI9cGUoYnQsaXIsS3QpKS5sZW5ndGg8Sm4pe3Zh''@;'; put 'put ''ciBWbj1CdWZmZXIuYWxsb2MoSm4sNTQpO2lyLmNvcHkoVm4pLGlyPVZufWVsc2UgaXIubGVuZ3RoPkpuJiYoaXI9aXIuc2xpY2UoMCxKbikpO3JldHVybiBpcn1yZXR1cm4gemwucmFuZG9tQnl0ZXN8fCh6bC5yYW5kb21CeXRlcz1mdW5jdGlvbihvdCl7Zm9yKHZhciBidD1CdWZmZXIuYWxs''@;'; put 'put ''b2Mob3QpLEJ0PTA7QnQ8b3Q7KytCdClidFtCdF09TWF0aC5mbG9vcigyNTYqTWF0aC5yYW5kb20oKSk7cmV0dXJuIGJ0fSksZnVuY3Rpb24gRXQob3QsYnQpe2lmKCJzdHJpbmciPT10eXBlb2Ygb3QpcmV0dXJuIEV0KEJ1ZmZlci5mcm9tKG90LCJiaW5hcnkiKSxidCk7dmFyIEJ0PXpsLnJh''@;'; put 'put ''bmRvbUJ5dGVzKDMyKSxrdD17cGFja2FnZTp7Y2lwaGVyQWxnb3JpdGhtOiJBRVMiLGNpcGhlckNoYWluaW5nOiJDaGFpbmluZ01vZGVDQkMiLHNhbHRWYWx1ZTp6bC5yYW5kb21CeXRlcygxNiksaGFzaEFsZ29yaXRobToiU0hBNTEyIixoYXNoU2l6ZTo2NCxibG9ja1NpemU6MTYsa2V5Qml0''@;'; put 'put ''czo4KkJ0Lmxlbmd0aH0sa2V5OntjaXBoZXJBbGdvcml0aG06IkFFUyIsY2lwaGVyQ2hhaW5pbmc6IkNoYWluaW5nTW9kZUNCQyIsc2FsdFZhbHVlOnpsLnJhbmRvbUJ5dGVzKDE2KSxoYXNoQWxnb3JpdGhtOiJTSEE1MTIiLGhhc2hTaXplOjY0LGJsb2NrU2l6ZToxNixzcGluQ291bnQ6MSxr''@;'; put 'put ''ZXlCaXRzOjI1Nn19LE90PWZ1bmN0aW9uIFllKG90LGJ0LEJ0LGt0LE90LEt0LFRuLGlyKXtmb3IodmFyIFNuPVtdLHNyPW90PzA6OCxKbj0wLFZuPTAsdXI9MDt1cjxpci5sZW5ndGg7KXsodXI9KFZuPXVyKSs0MDk2KT5pci5sZW5ndGgmJih1cj1pci5sZW5ndGgpO3ZhciBncj1pci5zbGlj''@;'; put 'put ''ZShWbitzcix1citzciksdHI9Z3IubGVuZ3RoJU90O3RyJiYoZ3I9QnVmZmVyLmNvbmNhdChbZ3IsQnVmZmVyLmFsbG9jKE90LXRyKV0pKTt2YXIgRmk9Z2Uob3QsYnQsQnQsVG4seWUoa3QsS3QsT3QsSm4pLGdyKTtTbi5wdXNoKEZpKSxKbisrfXZhciBpbz1CdWZmZXIuY29uY2F0KFNuKTtp''@;'; put 'put ''ZihvdClpbz1CdWZmZXIuY29uY2F0KFtQZShpci5sZW5ndGgsOCksaW9dKTtlbHNle3ZhciB1bz1pci5yZWFkVUludDMyTEUoMCk7aW89aW8uc2xpY2UoMCx1byl9cmV0dXJuIGlvfSghMCxrdC5wYWNrYWdlLmNpcGhlckFsZ29yaXRobSxrdC5wYWNrYWdlLmNpcGhlckNoYWluaW5nLGt0LnBh''@;'; put 'put ''Y2thZ2UuaGFzaEFsZ29yaXRobSxrdC5wYWNrYWdlLmJsb2NrU2l6ZSxrdC5wYWNrYWdlLnNhbHRWYWx1ZSxCdCxvdCksS3Q9emwucmFuZG9tQnl0ZXMoNjQpLFRuPXllKGt0LnBhY2thZ2UuaGFzaEFsZ29yaXRobSxrdC5wYWNrYWdlLnNhbHRWYWx1ZSxrdC5wYWNrYWdlLmJsb2NrU2l6ZSxh''@;'; put 'put ''ZS5kYXRhSW50ZWdyaXR5LmhtYWNLZXkpLGlyPWdlKCEwLGt0LnBhY2thZ2UuY2lwaGVyQWxnb3JpdGhtLGt0LnBhY2thZ2UuY2lwaGVyQ2hhaW5pbmcsQnQsVG4sS3QpLFNuPWZ1bmN0aW9uIGV0KG90LGJ0KXtvdD1vdC50b0xvd2VyQ2FzZSgpO3ZhciBCdD1bXS5zbGljZS5jYWxsKGFyZ3Vt''@;'; put 'put ''ZW50cywyKTtpZih6bC5nZXRIYXNoZXMoKS5pbmRleE9mKG90KTwwKXRocm93IG5ldyBFcnJvcigiSE1BQyBhbGdvcml0aG0gJyIrb3QrIicgbm90IHN1cHBvcnRlZCEiKTt2YXIgT3Q9emwuY3JlYXRlSG1hYyhvdCxidCk7cmV0dXJuIE90LnVwZGF0ZShCdWZmZXIuY29uY2F0KEJ0KSksT3Qu''@;'; put 'put ''ZGlnZXN0KCl9KGt0LnBhY2thZ2UuaGFzaEFsZ29yaXRobSxLdCxPdCksc3I9eWUoa3QucGFja2FnZS5oYXNoQWxnb3JpdGhtLGt0LnBhY2thZ2Uuc2FsdFZhbHVlLGt0LnBhY2thZ2UuYmxvY2tTaXplLGFlLmRhdGFJbnRlZ3JpdHkuaG1hY1ZhbHVlKSxKbj1nZSghMCxrdC5wYWNrYWdlLmNp''@;'; put 'put ''cGhlckFsZ29yaXRobSxrdC5wYWNrYWdlLmNpcGhlckNoYWluaW5nLEJ0LHNyLFNuKTtrdC5kYXRhSW50ZWdyaXR5PXtlbmNyeXB0ZWRIbWFjS2V5OmlyLGVuY3J5cHRlZEhtYWNWYWx1ZTpKbn07dmFyIFZuPU5lKGJ0LGt0LmtleS5oYXNoQWxnb3JpdGhtLGt0LmtleS5zYWx0VmFsdWUsa3Qu''@;'; put 'put ''a2V5LnNwaW5Db3VudCxrdC5rZXkua2V5Qml0cyxhZS5rZXkpO2t0LmtleS5lbmNyeXB0ZWRLZXlWYWx1ZT1nZSghMCxrdC5rZXkuY2lwaGVyQWxnb3JpdGhtLGt0LmtleS5jaXBoZXJDaGFpbmluZyxWbixrdC5rZXkuc2FsdFZhbHVlLEJ0KTt2YXIgdXI9emwucmFuZG9tQnl0ZXMoMTYpLGdy''@;'; put 'put ''PU5lKGJ0LGt0LmtleS5oYXNoQWxnb3JpdGhtLGt0LmtleS5zYWx0VmFsdWUsa3Qua2V5LnNwaW5Db3VudCxrdC5rZXkua2V5Qml0cyxhZS52ZXJpZmllckhhc2guaW5wdXQpO2t0LmtleS5lbmNyeXB0ZWRWZXJpZmllckhhc2hJbnB1dD1nZSghMCxrdC5rZXkuY2lwaGVyQWxnb3JpdGhtLGt0''@;'; put 'put ''LmtleS5jaXBoZXJDaGFpbmluZyxncixrdC5rZXkuc2FsdFZhbHVlLHVyKTt2YXIgdHI9cGUoa3Qua2V5Lmhhc2hBbGdvcml0aG0sdXIpLENpPU5lKGJ0LGt0LmtleS5oYXNoQWxnb3JpdGhtLGt0LmtleS5zYWx0VmFsdWUsa3Qua2V5LnNwaW5Db3VudCxrdC5rZXkua2V5Qml0cyxhZS52ZXJp''@;'; put 'put ''Zmllckhhc2gudmFsdWUpO2t0LmtleS5lbmNyeXB0ZWRWZXJpZmllckhhc2hWYWx1ZT1nZSghMCxrdC5rZXkuY2lwaGVyQWxnb3JpdGhtLGt0LmtleS5jaXBoZXJDaGFpbmluZyxDaSxrdC5rZXkuc2FsdFZhbHVlLHRyKTt2YXIgRmk9ZnVuY3Rpb24gdXQob3Qpe3ZhciBidD17bmFtZToiZW5j''@;'; put 'put ''cnlwdGlvbiIsYXR0cmlidXRlczp7eG1sbnM6Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vb2ZmaWNlLzIwMDYvZW5jcnlwdGlvbiIsInhtbG5zOnAiOiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L2tleUVuY3J5cHRvci9wYXNzd29yZCIsInhtbG5zOmMi''@;'; put 'put ''OiJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA2L2tleUVuY3J5cHRvci9jZXJ0aWZpY2F0ZSJ9LGNoaWxkcmVuOlt7bmFtZToia2V5RGF0YSIsYXR0cmlidXRlczp7c2FsdFNpemU6b3QucGFja2FnZS5zYWx0VmFsdWUubGVuZ3RoLGJsb2NrU2l6ZTpvdC5wYWNrYWdl''@;'; put 'put ''LmJsb2NrU2l6ZSxrZXlCaXRzOm90LnBhY2thZ2Uua2V5Qml0cyxoYXNoU2l6ZTpvdC5wYWNrYWdlLmhhc2hTaXplLGNpcGhlckFsZ29yaXRobTpvdC5wYWNrYWdlLmNpcGhlckFsZ29yaXRobSxjaXBoZXJDaGFpbmluZzpvdC5wYWNrYWdlLmNpcGhlckNoYWluaW5nLGhhc2hBbGdvcml0aG06''@;'; put 'put ''b3QucGFja2FnZS5oYXNoQWxnb3JpdGhtLHNhbHRWYWx1ZTpvdC5wYWNrYWdlLnNhbHRWYWx1ZS50b1N0cmluZygiYmFzZTY0Iil9fSx7bmFtZToiZGF0YUludGVncml0eSIsYXR0cmlidXRlczp7ZW5jcnlwdGVkSG1hY0tleTpvdC5kYXRhSW50ZWdyaXR5LmVuY3J5cHRlZEhtYWNLZXkudG9T''@;'; put 'put ''dHJpbmcoImJhc2U2NCIpLGVuY3J5cHRlZEhtYWNWYWx1ZTpvdC5kYXRhSW50ZWdyaXR5LmVuY3J5cHRlZEhtYWNWYWx1ZS50b1N0cmluZygiYmFzZTY0Iil9fSx7bmFtZToia2V5RW5jcnlwdG9ycyIsY2hpbGRyZW46W3tuYW1lOiJrZXlFbmNyeXB0b3IiLGF0dHJpYnV0ZXM6e3VyaToiaHR0''@;'; put 'put ''cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9rZXlFbmNyeXB0b3IvcGFzc3dvcmQifSxjaGlsZHJlbjpbe25hbWU6InA6ZW5jcnlwdGVkS2V5IixhdHRyaWJ1dGVzOntzcGluQ291bnQ6b3Qua2V5LnNwaW5Db3VudCxzYWx0U2l6ZTpvdC5rZXkuc2FsdFZhbHVlLmxlbmd0''@;'; put 'put ''aCxibG9ja1NpemU6b3Qua2V5LmJsb2NrU2l6ZSxrZXlCaXRzOm90LmtleS5rZXlCaXRzLGhhc2hTaXplOm90LmtleS5oYXNoU2l6ZSxjaXBoZXJBbGdvcml0aG06b3Qua2V5LmNpcGhlckFsZ29yaXRobSxjaXBoZXJDaGFpbmluZzpvdC5rZXkuY2lwaGVyQ2hhaW5pbmcsaGFzaEFsZ29yaXRo''@;'; put 'put ''bTpvdC5rZXkuaGFzaEFsZ29yaXRobSxzYWx0VmFsdWU6b3Qua2V5LnNhbHRWYWx1ZS50b1N0cmluZygiYmFzZTY0IiksZW5jcnlwdGVkVmVyaWZpZXJIYXNoSW5wdXQ6b3Qua2V5LmVuY3J5cHRlZFZlcmlmaWVySGFzaElucHV0LnRvU3RyaW5nKCJiYXNlNjQiKSxlbmNyeXB0ZWRWZXJpZmll''@;'; put 'put ''ckhhc2hWYWx1ZTpvdC5rZXkuZW5jcnlwdGVkVmVyaWZpZXJIYXNoVmFsdWUudG9TdHJpbmcoImJhc2U2NCIpLGVuY3J5cHRlZEtleVZhbHVlOm90LmtleS5lbmNyeXB0ZWRLZXlWYWx1ZS50b1N0cmluZygiYmFzZTY0Iil9fV19XX1dfSxrdD0obmV3IFIpLmJ1aWxkKGJ0KTtyZXR1cm4gQnVm''@;'; put 'put ''ZmVyLmNvbmNhdChbayxCdWZmZXIuZnJvbShrdCwidXRmOCIpXSl9KGt0KSxpbz12ZS51dGlscy5jZmJfbmV3KCk7cmV0dXJuIHZlLnV0aWxzLmNmYl9hZGQoaW8sIkVuY3J5cHRpb25JbmZvIixGaSksdmUudXRpbHMuY2ZiX2FkZChpbywiRW5jcnlwdGVkUGFja2FnZSIsT3QpLGlvfX0oKTtm''@;'; put 'put ''dW5jdGlvbiBrSShTKXtyZXR1cm4gZnVuY3Rpb24oayl7Zm9yKHZhciBHPTA7RyE9Uy5sZW5ndGg7KytHKXt2YXIgUT1TW0ddO3ZvaWQgMD09PWtbUVswXV0mJihrW1FbMF1dPVFbMV0pLCJuIj09PVFbMl0mJihrW1FbMF1dPU51bWJlcihrW1FbMF1dKSl9fX12YXIgREk9ZnVuY3Rpb24oUyl7''@;'; put 'put ''a0koW1siY2VsbE5GIiwhMV0sWyJjZWxsSFRNTCIsITBdLFsiY2VsbEZvcm11bGEiLCEwXSxbImNlbGxTdHlsZXMiLCExXSxbImNlbGxUZXh0IiwhMF0sWyJjZWxsRGF0ZXMiLCExXSxbInNoZWV0U3R1YnMiLCExXSxbInNoZWV0Um93cyIsMCwibiJdLFsiYm9va0RlcHMiLCExXSxbImJvb2tT''@;'; put 'put ''aGVldHMiLCExXSxbImJvb2tQcm9wcyIsITFdLFsiYm9va0ZpbGVzIiwhMV0sWyJib29rVkJBIiwhMV0sWyJwYXNzd29yZCIsIiJdLFsiV1RGIiwhMV1dKShTKSxTLmJvb2tJbWFnZXMmJihTLmNlbGxTdHlsZXM9ITApfSxrZj1rSShbWyJjZWxsRGF0ZXMiLCExXSxbImJvb2tTU1QiLCExXSxb''@;'; put 'put ''ImJvb2tUeXBlIiwieGxzeCJdLFsiY29tcHJlc3Npb24iLCExXSxbIldURiIsITFdXSk7ZnVuY3Rpb24gV25lKFMpe3JldHVybiBxby5XUy5pbmRleE9mKFMpPi0xPyJzaGVldCI6cW8uQ1MmJlM9PXFvLkNTPyJjaGFydCI6cW8uRFMmJlM9PXFvLkRTPyJkaWFsb2ciOnFvLk1TJiZTPT1xby5N''@;'; put 'put ''Uz8ibWFjcm8iOlMmJlMubGVuZ3RoP1M6InNoZWV0In12YXIga2I9W107ZnVuY3Rpb24gcDIoUyxSLGssRyxRLGFlLGdlLHBlLHllLFBlLE5lLFllKXt0cnl7YWVbR109aGYocnIoUyxrLCEwKSxSKTt2YXIgdXQsZXQ9VHQoUyxSKTtzd2l0Y2gocGUpe2Nhc2Uic2hlZXQiOnV0PWZ1bmN0aW9u''@;'; put 'put ''IGx6KFMsUixrLEcsUSxhZSxnZSxwZSl7cmV0dXJuIi5iaW4iPT09Ui5zbGljZSgtNCk/ZnVuY3Rpb24gVWooUyxSLGssRyxRLGFlLGdlKXtpZighUylyZXR1cm4gUzt2YXIgcGU9Unx8e307R3x8KEc9eyIhaWQiOnt9fSksbnVsbCE9bGUmJm51bGw9PXBlLmRlbnNlJiYocGUuZGVuc2U9bGUp''@;'; put 'put ''O3ZhciBQZSxFdCxvdCxidCxCdCxrdCxPdCxLdCxUbixpcix5ZT1wZS5kZW5zZT9bXTp7fSxOZT17czp7cjoyZTYsYzoyZTZ9LGU6e3I6MCxjOjB9fSxZZT1bXSxldD0hMSx1dD0hMSxTbj1bXTtwZS5iaWZmPTEyLHBlWyIhcm93Il09MDt2YXIgc3I9MCxKbj0hMSxWbj1bXSx1cj17fSxncj1w''@;'; put 'put ''ZS5zdXBib29rc3x8US5zdXBib29rc3x8W1tdXTtpZihnci5zaGFyZWRmPXVyLGdyLmFycmF5Zj1Wbixnci5TaGVldE5hbWVzPVEuU2hlZXROYW1lc3x8US5TaGVldHMubWFwKGZ1bmN0aW9uKExpKXtyZXR1cm4gTGkubmFtZX0pLCFwZS5zdXBib29rcyYmKHBlLnN1cGJvb2tzPWdyLFEuTmFt''@;'; put 'put ''ZXMpKWZvcih2YXIgdHI9MDt0cjxRLk5hbWVzLmxlbmd0aDsrK3RyKWdyWzBdW3RyKzFdPVEuTmFtZXNbdHJdO3ZhciBDaT1bXSxGaT1bXSxpbz0hMTtpZihJOFsxNl09e246IkJydFNob3J0UmVhbCIsZjpFan0sY3IoUyxmdW5jdGlvbihEcixObixWcil7aWYoIXV0KXN3aXRjaChWcil7Y2Fz''@;'; put 'put ''ZSAxNDg6UGU9RHI7YnJlYWs7Y2FzZSAwOkV0PURyLHBlLnNoZWV0Um93cyYmcGUuc2hlZXRSb3dzPD1FdC5yJiYodXQ9ITApLFRuPXppKEJ0PUV0LnIpLHBlWyIhcm93Il09RXQuciwoRHIuaGlkZGVufHxEci5ocHR8fG51bGwhPURyLmxldmVsKSYmKERyLmhwdCYmKERyLmhweD1paChEci5o''@;'; put 'put ''cHQpKSxGaVtEci5yXT1Ecik7YnJlYWs7Y2FzZSAyOmNhc2UgMzpjYXNlIDQ6Y2FzZSA1OmNhc2UgNjpjYXNlIDc6Y2FzZSA4OmNhc2UgOTpjYXNlIDEwOmNhc2UgMTE6Y2FzZSAxMzpjYXNlIDE0OmNhc2UgMTU6Y2FzZSAxNjpjYXNlIDE3OmNhc2UgMTg6c3dpdGNoKG90PXt0OkRyWzJdfSxE''@;'; put 'put ''clsyXSl7Y2FzZSJuIjpvdC52PURyWzFdO2JyZWFrO2Nhc2UicyI6b3Qudj0oS3Q9YThbRHJbMV1dKS50LHBlLmNlbGxTdHlsZXMmJihvdC5SPWZ1bmN0aW9uIG1WKFMsUil7aWYoUy5SKXJldHVybiBTLlI7aWYoUiYmUi5Gb250cyYmKDEhPVMuci5sZW5ndGh8fDAhPVMuclswXS5pY2gpKXtT''@;'; put 'put ''LlI9W107dmFyIGs9MCxHPVMucltrXSxRPVMucltrKzFdO2ZvcihHLmljaD4wJiZTLlIucHVzaCh7dDoicyIsdjpTLnQuc2xpY2UoMCxHLmljaCl9KTtrPFMuci5sZW5ndGgtMTsrK2spUy5SLnB1c2goe3Q6InMiLHY6Uy50LnNsaWNlKChHPVMucltrXSkuaWNoLChRPVMucltrKzFdKS5pY2gp''@;'; put 'put ''LHM6Ui5Gb250c1tHLmlmbnRdfSk7cmV0dXJuIFMuUi5wdXNoKHt0OiJzIix2OlMudC5zbGljZSgoUXx8RykuaWNoKSxzOlIuRm9udHNbKFF8fEcpLmlmbnRdfSksUy5SfX0oS3QsZ2UpKTticmVhaztjYXNlImIiOm90LnY9ISFEclsxXTticmVhaztjYXNlImUiOm90LnY9RHJbMV0sITEhPT1w''@;'; put 'put ''ZS5jZWxsVGV4dCYmKG90Lnc9U2Nbb3Qudl0pO2JyZWFrO2Nhc2Uic3RyIjpvdC50PSJzIixvdC52PURyWzFdfWlmKChidD1nZS5DZWxsWGZbRHJbMF0uaVN0eWxlUmVmXSkmJkczKG90LGJ0Lm51bUZtdElkLGJ0LmZpbGxJZCxidC5mb250SWQsYnQuYm9yZGVySWQscGUsMCxnZSkscGUuY2Vs''@;'; put 'put ''bFN0eWxlcyYmb3QucyYmYnQuYWxpZ25tZW50JiYob3Qucy5hbGlnbm1lbnQ9cXQoYnQuYWxpZ25tZW50KSksa3Q9LTE9PURyWzBdLmM/a3QrMTpEclswXS5jLHBlLmRlbnNlPyh5ZVtCdF18fCh5ZVtCdF09W10pLHllW0J0XVtrdF09b3QpOnllW1RvKGt0KStUbl09b3QscGUuY2VsbEZvcm11''@;'; put 'put ''bGEpe2ZvcihKbj0hMSxzcj0wO3NyPFZuLmxlbmd0aDsrK3NyKXt2YXIgdnI9Vm5bc3JdO0V0LnI+PXZyWzBdLnMuciYmRXQucjw9dnJbMF0uZS5yJiZrdD49dnJbMF0ucy5jJiZrdDw9dnJbMF0uZS5jJiYob3QuRj1vbyh2clswXSksSm49ITApfSFKbiYmRHIubGVuZ3RoPjMmJihvdC5mPURy''@;'; put 'put ''WzNdKX1pZihOZS5zLnI+RXQuciYmKE5lLnMucj1FdC5yKSxOZS5zLmM+a3QmJihOZS5zLmM9a3QpLE5lLmUucjxFdC5yJiYoTmUuZS5yPUV0LnIpLE5lLmUuYzxrdCYmKE5lLmUuYz1rdCkscGUuY2VsbERhdGVzJiZidCYmIm4iPT1vdC50JiZBLmlzX2RhdGUoQS5fdGFibGVbYnQubnVtRm10''@;'; put 'put ''SWRdKSl7dmFyIEhuPUEucGFyc2VfZGF0ZV9jb2RlKG90LnYpO0huJiYob3QudD0iZCIsb3Qudj1uZXcgRGF0ZShIbi55LEhuLm0tMSxIbi5kLEhuLkgsSG4uTSxIbi5TLEhuLnUpKX1icmVhaztjYXNlIDE6Y2FzZSAxMjppZighcGUuc2hlZXRTdHVic3x8ZXQpYnJlYWs7b3Q9e3Q6InoiLHY6''@;'; put 'put ''dm9pZCAwfSxrdD0tMT09RHJbMF0uYz9rdCsxOkRyWzBdLmMsKGJ0PWdlLkNlbGxYZltEclswXS5pU3R5bGVSZWZdKSYmRzMob3QsYnQubnVtRm10SWQsYnQuZmlsbElkLGJ0LmZvbnRJZCxidC5ib3JkZXJJZCxwZSwwLGdlKSxwZS5jZWxsU3R5bGVzJiZvdC5zJiZidC5hbGlnbm1lbnQmJihv''@;'; put 'put ''dC5zLmFsaWdubWVudD1xdChidC5hbGlnbm1lbnQpKSxwZS5kZW5zZT8oeWVbQnRdfHwoeWVbQnRdPVtdKSx5ZVtCdF1ba3RdPW90KTp5ZVtUbyhrdCkrVG5dPW90LE5lLnMucj5FdC5yJiYoTmUucy5yPUV0LnIpLE5lLnMuYz5rdCYmKE5lLnMuYz1rdCksTmUuZS5yPEV0LnImJihOZS5lLnI9''@;'; put 'put ''RXQuciksTmUuZS5jPGt0JiYoTmUuZS5jPWt0KTticmVhaztjYXNlIDE3NjpTbi5wdXNoKERyKTticmVhaztjYXNlIDQ5NDp2YXIgQnI9R1siIWlkIl1bRHIucmVsSWRdO2ZvcihCcj8oRHIuVGFyZ2V0PUJyLlRhcmdldCxEci5sb2MmJihEci5UYXJnZXQrPSIjIitEci5sb2MpLERyLlJlbD1C''@;'; put 'put ''cik6IiI9PURyLnJlbElkJiYoRHIuVGFyZ2V0PSIjIitEci5sb2MpLEJ0PURyLnJmeC5zLnI7QnQ8PURyLnJmeC5lLnI7KytCdClmb3Ioa3Q9RHIucmZ4LnMuYztrdDw9RHIucmZ4LmUuYzsrK2t0KXBlLmRlbnNlPyh5ZVtCdF18fCh5ZVtCdF09W10pLHllW0J0XVtrdF18fCh5ZVtCdF1ba3Rd''@;'; put 'put ''PXt0OiJ6Iix2OnZvaWQgMH0pLHllW0J0XVtrdF0ubD1Ecik6KE90PVhpKHtjOmt0LHI6QnR9KSx5ZVtPdF18fCh5ZVtPdF09e3Q6InoiLHY6dm9pZCAwfSkseWVbT3RdLmw9RHIpO2JyZWFrO2Nhc2UgNDI2OmlmKCFwZS5jZWxsRm9ybXVsYSlicmVhaztWbi5wdXNoKERyKSwoaXI9cGUuZGVu''@;'; put 'put ''c2U/eWVbQnRdW2t0XTp5ZVtUbyhrdCkrVG5dKS5mPWEwKERyWzFdLE5lLHtyOkV0LnIsYzprdH0sZ3IscGUpLGlyLkY9b28oRHJbMF0pO2JyZWFrO2Nhc2UgNDI3OmlmKCFwZS5jZWxsRm9ybXVsYSlicmVhazt1cltYaShEclswXS5zKV09RHJbMV0sKGlyPXBlLmRlbnNlP3llW0J0XVtrdF06''@;'; put 'put ''eWVbVG8oa3QpK1RuXSkuZj1hMChEclsxXSxOZSx7cjpFdC5yLGM6a3R9LGdyLHBlKTticmVhaztjYXNlIDYwOmlmKCFwZS5jZWxsU3R5bGVzKWJyZWFrO2Zvcig7RHIuZT49RHIuczspQ2lbRHIuZS0tXT17d2lkdGg6RHIudy8yNTYsaGlkZGVuOiEhKDEmRHIuZmxhZ3MpLGxldmVsOkRyLmxl''@;'; put 'put ''dmVsfSxpb3x8KGlvPSEwKSxlMShDaVtEci5lKzFdKTticmVhaztjYXNlIDE2MTp5ZVsiIWF1dG9maWx0ZXIiXT17cmVmOm9vKERyKX07YnJlYWs7Y2FzZSA0NzY6eWVbIiFtYXJnaW5zIl09RHI7YnJlYWs7Y2FzZSAxNDc6US5TaGVldHNba118fChRLlNoZWV0c1trXT17fSksRHIubmFtZSYm''@;'; put 'put ''KFEuU2hlZXRzW2tdLkNvZGVOYW1lPURyLm5hbWUpLChEci5hYm92ZXx8RHIubGVmdCkmJih5ZVsiIW91dGxpbmUiXT17YWJvdmU6RHIuYWJvdmUsbGVmdDpEci5sZWZ0fSk7YnJlYWs7Y2FzZSAxMzc6US5WaWV3c3x8KFEuVmlld3M9W3t9XSksUS5WaWV3c1swXXx8KFEuVmlld3NbMF09e30p''@;'; put 'put ''LERyLlJUTCYmKFEuVmlld3NbMF0uUlRMPSEwKSxEci5ncmlkfHwoUS5WaWV3c1swXS5ncmlkPSExLHllWyIhZ3JpZGxpbmVzIl09ITEpO2JyZWFrO2Nhc2UgNDg1OnllWyIhc2hlZXRGb3JtYXQiXT1EcjticmVhaztjYXNlIDY0OmNhc2UgMTA1MzohZnVuY3Rpb24gemooUyxSLGssRyl7aWYo''@;'; put 'put ''Uil7dmFyIFE9e3JlZjpSLnNxcmZ4LHQ6Ui50fTtSLm9wJiYoUS5vcD1SLm9wKTt2YXIgYWU9IiIsZ2U9IiIscGU9Ui5zcXJmeD8ic3RyaW5nIj09dHlwZW9mIFIuc3FyZng/YWEoUi5zcXJmeC5zcGxpdCgiLCIpWzBdKTpSLnNxcmZ4Om51bGw7aWYoUi5mMSYmKGFlPWEwKFIuZjEscGUsbnVs''@;'; put 'put ''bCxrLEcsITApKSxSLmYyJiYoZ2U9YTAoUi5mMixwZSxudWxsLGssRywhMCkpLFIub3AmJlsiSU4iLCJPVCJdLmluZGV4T2YoUi5vcCk+PS0xKVEubWluPWFlLFEubWF4PWdlO2Vsc2UgaWYoUi5vcClRLnY9YWU7ZWxzZSB0cnl7c3dpdGNoKFIudCl7Y2FzZSJMaXN0IjppZigiUHRnU3RyIj09''@;'; put 'put ''PVIuZjFbMF1bMF1bMF0mJjE9PVIuZjFbMF0ubGVuZ3RoKXtRLmw9Ui5mMVswXVswXVsxXS5zcGxpdCgiLCIpO2JyZWFrfWNhc2UiQ3VzdG9tIjpRLmY9YWV9fWNhdGNoe31TWyIhdmFsaWRhdGlvbnMiXXx8KFNbIiF2YWxpZGF0aW9ucyJdPVtdKSxTWyIhdmFsaWRhdGlvbnMiXS5wdXNoKFEp''@;'; put 'put ''fX0oeWUsRHIsZ3IscGUpO2JyZWFrO2Nhc2UgMTUxOnllWyIhZnJlZXplIl09RHJbMF07YnJlYWs7Y2FzZSAxNTI6eWVbIiFzZWwiXT1EcjticmVhaztjYXNlIDE3NTpjYXNlIDY0NDpjYXNlIDYyNTpjYXNlIDU2MjpjYXNlIDM5NjpjYXNlIDExMTI6Y2FzZSAxMTQ2OmNhc2UgNDcxOmNhc2Ug''@;'; put 'put ''MTA1MDpjYXNlIDY0OTpjYXNlIDExMDU6Y2FzZSA0OTpjYXNlIDU4OTpjYXNlIDYwNzpjYXNlIDU2NDpjYXNlIDEwNTU6Y2FzZSAxNjg6Y2FzZSAxNzQ6Y2FzZSAxMTgwOmNhc2UgNDk5OmNhc2UgNTA3OmNhc2UgNTUwOmNhc2UgMTcxOmNhc2UgMTY3OmNhc2UgMTE3NzpjYXNlIDE2OTpjYXNl''@;'; put 'put ''IDExODE6Y2FzZSA1NTE6Y2FzZSA1NTI6Y2FzZSA2NjE6Y2FzZSA2Mzk6Y2FzZSA0Nzg6Y2FzZSA1Mzc6Y2FzZSA0Nzc6Y2FzZSA1MzY6Y2FzZSAxMTAzOmNhc2UgNjgwOmNhc2UgMTEwNDpjYXNlIDEwMjQ6Y2FzZSA2NjM6Y2FzZSA1MzU6Y2FzZSA2Nzg6Y2FzZSA1MDQ6Y2FzZSAxMDQzOmNh''@;'; put 'put ''c2UgNDI4OmNhc2UgMTcwOmNhc2UgMzA3MjpjYXNlIDUwOmNhc2UgMjA3MDpjYXNlIDEwNDU6YnJlYWs7Y2FzZSAzNTpldD0hMDticmVhaztjYXNlIDM2OmV0PSExO2JyZWFrO2Nhc2UgMzc6WWUucHVzaChObiksZXQ9ITA7YnJlYWs7Y2FzZSAzODpZZS5wb3AoKSxldD0hMTticmVhaztkZWZh''@;'; put 'put ''dWx0OmlmKCEoKE5ufHwiIikuaW5kZXhPZigiQmVnaW4iKT4wKSYmISgoTm58fCIiKS5pbmRleE9mKCJFbmQiKT4wKSYmKCFldHx8cGUuV1RGJiYiQnJ0QUNCZWdpbiIhPVllW1llLmxlbmd0aC0xXSkpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK1ZyKyIgIitObil9fSxw''@;'; put 'put ''ZSksZGVsZXRlIHBlLnN1cGJvb2tzLGRlbGV0ZSBwZVsiIXJvdyJdLCF5ZVsiIXJlZiJdJiYoTmUucy5yPDJlNnx8UGUmJihQZS5lLnI+MHx8UGUuZS5jPjB8fFBlLnMucj4wfHxQZS5zLmM+MCkpJiYoeWVbIiFyZWYiXT1vbyhQZXx8TmUpKSxwZS5zaGVldFJvd3MmJnllWyIhcmVmIl0pe3Zh''@;'; put 'put ''ciB1bz1hYSh5ZVsiIXJlZiJdKTtwZS5zaGVldFJvd3M8PSt1by5lLnImJih1by5lLnI9cGUuc2hlZXRSb3dzLTEsdW8uZS5yPk5lLmUuciYmKHVvLmUucj1OZS5lLnIpLHVvLmUucjx1by5zLnImJih1by5zLnI9dW8uZS5yKSx1by5lLmM+TmUuZS5jJiYodW8uZS5jPU5lLmUuYyksdW8uZS5j''@;'; put 'put ''PHVvLnMuYyYmKHVvLnMuYz11by5lLmMpLHllWyIhZnVsbHJlZiJdPXllWyIhcmVmIl0seWVbIiFyZWYiXT1vbyh1bykpfXJldHVybiBTbi5sZW5ndGg+MCYmKHllWyIhbWVyZ2VzIl09U24pLENpLmxlbmd0aD4wJiYoeWVbIiFjb2xzIl09Q2kpLEZpLmxlbmd0aD4wJiYoeWVbIiFyb3dzIl09''@;'; put 'put ''RmkpLHllfShTLEcsayxRLGFlLDAscGUpOmZ1bmN0aW9uIHU4KFMsUixrLEcsUSxhZSxnZSl7aWYoIVMpcmV0dXJuIFM7R3x8KEc9eyIhaWQiOnt9fSksbnVsbCE9bGUmJm51bGw9PVIuZGVuc2UmJihSLmRlbnNlPWxlKTt2YXIgcGU9Ui5kZW5zZT9bXTp7fSx5ZT17czp7cjoyZTYsYzoyZTZ9''@;'; put 'put ''LGU6e3I6MCxjOjB9fSxQZT0iIixOZT0iIixZZT1TLm1hdGNoKGNEKTtZZT8oUGU9Uy5zbGljZSgwLFllLmluZGV4KSxOZT1TLnNsaWNlKFllLmluZGV4K1llWzBdLmxlbmd0aCkpOlBlPU5lPVM7dmFyIGV0PU5lLmxhc3RJbmRleE9mKCJleHRMc3QiKSxFdD0oLTE9PWV0fHxOZS5zbGljZShl''@;'; put 'put ''dCksUGUubWF0Y2goaEQpKTtFdD9yYihFdFswXSwwLFEsayk6KEV0PVBlLm1hdGNoKHBEKSkmJmZ1bmN0aW9uIHFCKFMsUixrLEcsUSxhZSxnZSl7cmIoUy5zbGljZSgwLFMuaW5kZXhPZigiPiIpKSwwLEcsUSk7dmFyIHBlPVIubWF0Y2goZ1MpO2lmKHBlKXt2YXIgUGU9c2socHIocGVbMF0p''@;'; put 'put ''LGFlLGdlKTtrWyIhdGFiY29sb3IiXT1QZX1pZigocGU9Ui5tYXRjaCgkQikpJiZwcihwZVswXSkuZml0VG9QYWdlJiYoa1siIXByaW50Il18fChrWyIhcHJpbnQiXT17fSksa1siIXByaW50Il0ucHJvcHN8fChrWyIhcHJpbnQiXS5wcm9wcz17fSksa1siIXByaW50Il0ucHJvcHMuZml0fHwo''@;'; put 'put ''a1siIXByaW50Il0ucHJvcHMuZml0PXt9KSxudWxsPT1rWyIhcHJpbnQiXS5wcm9wcy5maXQuaGVpZ2h0JiYoa1siIXByaW50Il0ucHJvcHMuZml0LmhlaWdodD0xKSxudWxsPT1rWyIhcHJpbnQiXS5wcm9wcy5maXQud2lkdGgmJihrWyIhcHJpbnQiXS5wcm9wcy5maXQud2lkdGg9MSkpLHBl''@;'; put 'put ''PVIubWF0Y2goS0IpKXtrWyIhb3V0bGluZSJdPXt9O3ZhciBZZT1wcihwZVswXSk7WWUuc3VtbWFyeUJlbG93JiYoa1siIW91dGxpbmUiXS5hYm92ZT0hZWkoWWUuc3VtbWFyeUJlbG93KSksWWUuc3VtbWFyeVJpZ2h0JiYoa1siIW91dGxpbmUiXS5sZWZ0PSFlaShZZS5zdW1tYXJ5UmlnaHQp''@;'; put 'put ''KX19KEV0WzBdLEV0WzFdfHwiIixwZSxRLGssZ2UsYWUpO3ZhciBvdD0oUGUubWF0Y2goLzwoPzpcdyo6KT9kaW1lbnNpb24vKXx8e2luZGV4Oi0xfSkuaW5kZXg7aWYob3Q+MCl7dmFyIGJ0PVBlLnNsaWNlKG90LG90KzUwKS5tYXRjaCh0Yik7YnQmJighUnx8IVIubm9kaW0pJiZmdW5jdGlv''@;'; put 'put ''biBsUyhTLFIpe3ZhciBrPWFhKFIpO2sucy5yPD1rLmUuciYmay5zLmM8PWsuZS5jJiZrLnMucj49MCYmay5zLmM+PTAmJihTWyIhcmVmIl09b28oaykpfShwZSxidFsxXSl9dmFyIEJ0PVBlLm1hdGNoKElhKTtCdCYmQnRbMV0mJmZ1bmN0aW9uIGhqKFMsUixrLEcpe2suVmlld3N8fChrLlZp''@;'; put 'put ''ZXdzPVt7fV0pO3ZhciBRPTA7Uy5yZXBsYWNlKENTLGZ1bmN0aW9uKGFlLGdlKXt2YXIgcGU9cHIoYWUpO2lmKGsuVmlld3NbR118fChrLlZpZXdzW0ddPXt9KSxlaShwZS5yaWdodFRvTGVmdCkmJihrLlZpZXdzW0ddLlJUTD0hMCkscGUuc2hvd0dyaWRMaW5lcyYmKGsuVmlld3NbR10uZ3Jp''@;'; put 'put ''ZD1laShwZS5zaG93R3JpZExpbmVzKSxudWxsPT1SWyIhZ3JpZGxpbmVzIl0mJihSWyIhZ3JpZGxpbmVzIl09ZWkocGUuc2hvd0dyaWRMaW5lcykpKSwrcGUuem9vbVNjYWxlJiYoay5WaWV3c1tHXS56b29tPStwZS56b29tU2NhbGUpLHBlLnZpZXcmJihrLlZpZXdzW0ddLnZpZXc9cGUudmll''@;'; put 'put ''dyksMT09KytRJiYiLz4iIT1hZS5zbGljZSgtMikpe3ZhciB5ZT1TLnNsaWNlKGdlK2FlLmxlbmd0aCksUGU9eWUubWF0Y2goLzxcLyg/Olx3Oik/c2hlZXRWaWV3KD86W14+YS16XVtePl0qKT9cLz8+Lyk7aWYoIVBlKXJldHVybiIiO3ZhciBOZT0oeWU9eWUuc2xpY2UoMCxQZS5pbmRleCkp''@;'; put 'put ''Lm1hdGNoKC88KD86XHc6KT9wYW5lKD86W14+YS16XVtePl0qKT9cLz8+Lyk7aWYoTmUpe3ZhciBZZT1wcihOZVswXSk7ImZyb3plbiI9PVllLnN0YXRlP1JbIiFmcmVlemUiXT1UbygrWWUueFNwbGl0fHwwKSt6aSgrWWUueVNwbGl0fHwwKTpZZS50b3BMZWZ0Q2VsbCYmKFJbIiFmcmVlemUi''@;'; put 'put ''XT1ZZS50b3BMZWZ0Q2VsbCl9dmFyIGV0PXllLm1hdGNoKC88KD86XHc6KT9zZWxlY3Rpb24oPzpbXj5hLXpdW14+XSopP1wvPz4vKTtpZihldCl7dmFyIHV0PXByKGV0WzBdKTtpZih1dC5hY3RpdmVDZWxsJiYoUlsiIXNlbCJdPXtjZWxsOnV0LmFjdGl2ZUNlbGx9KSx1dC5zcXJlZil7dmFy''@;'; put 'put ''IEV0PXV0LnNxcmVmLnJlcGxhY2UoL1xzLiokLywiIik7UlsiIXNlbCJdfHwoUlsiIXNlbCJdPXtjZWxsOlhpKFNzKEV0KS5zKX0pLFJbIiFzZWwiXS5yYW5nZT11dC5zcXJlZn19fXJldHVybiIifSl9KEJ0WzFdLHBlLFEsayk7dmFyIGt0PVBlLm1hdGNoKEdlKSxPdD1bXTtpZihSLmNlbGxT''@;'; put 'put ''dHlsZXMpe3ZhciBLdD1QZS5tYXRjaChXQik7S3QmJmZ1bmN0aW9uIGJTKFMsUixrKXtmb3IodmFyIEc9ITEsUT0wO1EhPVIubGVuZ3RoOysrUSl7dmFyIGFlPXByKFJbUV0sITApO2FlLmhpZGRlbiYmKGFlLmhpZGRlbj1laShhZS5oaWRkZW4pKTt2YXIgZ2U9cGFyc2VJbnQoYWUubWluLDEw''@;'; put 'put ''KS0xLHBlPXBhcnNlSW50KGFlLm1heCwxMCktMTtmb3IoYWUub3V0bGluZUxldmVsJiYoYWUubGV2ZWw9K2FlLm91dGxpbmVMZXZlbHx8MCksZGVsZXRlIGFlLm1pbixkZWxldGUgYWUubWF4LGFlLndpZHRoPSthZS53aWR0aCwhRyYmYWUud2lkdGgmJihHPSEwKSxlMShhZSksYWUuc3R5bGUm''@;'; put 'put ''JihhZS5zPXA4KGFlLnN0eWxlLGspKTtnZTw9cGU7KVNbZ2UrK109cXQoYWUpfX0oT3QsS3QsZ2UpfWlmKFllJiZnOChZZVsxXSxrLHBlLFIseWUsYWUsZ2UpLFIuY2FsbGJhY2spcmV0dXJuIHBlO3ZhciBUbj1OZS5tYXRjaChmRCk7VG4mJihwZVsiIXByb3RlY3QiXT1mdW5jdGlvbiBuaihT''@;'; put 'put ''KXt2YXIgUj1wcihTLCEwLCEwKSxrPXt9O2lmKGVpKFIuc2hlZXQpKXJldHVybiB2Uy5mb3JFYWNoKGZ1bmN0aW9uKEcpe2tbR109bnVsbCE9UltHXSYmZWkoUltHXSl9KSx4RC5mb3JFYWNoKGZ1bmN0aW9uKEcpe2tbR109bnVsbD09UltHXXx8ZWkoUltHXSl9KSxSLmFsZ29yaXRobU5hbWUm''@;'; put 'put ''JihrLmVuY3J5cHRpb249e2FsZ286Ui5hbGdvcml0aG1OYW1lLGhhc2g6Ui5oYXNoVmFsdWUsc2FsdDpSLnNhbHRWYWx1ZSxzcGluOitSLnNwaW5Db3VudHx8MWU1fSksa30oVG5bMF0pKTt2YXIgaXI9TmUubWF0Y2goWUIpO2lyJiYocGVbIiFhdXRvZmlsdGVyIl09ZnVuY3Rpb24gb2ooUyl7''@;'; put 'put ''cmV0dXJue3JlZjooUy5tYXRjaCgvcmVmPSIoW14iXSopIi8pfHxbXSlbMV19fShpclswXSkpO3ZhciBTbj1bXSxzcj1OZS5tYXRjaChjOCk7aWYoc3IpZm9yKG90PTA7b3QhPXNyLmxlbmd0aDsrK290KVNuW290XT1hYShzcltvdF0uc2xpY2Uoc3Jbb3RdLmluZGV4T2YoJyInKSsxKSk7dmFy''@;'; put 'put ''IEpuPSgtMT09ZXQ/TmU6TmUuc2xpY2UoMCxldCkpLm1hdGNoKHVTKTtKbiYmKHBlWyIhY29uZGZtdCJdPVtdLmNvbmNhdC5hcHBseShbXSxKbi5tYXAoZnVuY3Rpb24oTm4pe3JldHVybiBoMihObixSLGFlLGdlKX0pKSksZXQ+LTEmJihKbj1OZS5zbGljZShldCkubWF0Y2godVMpKSYmKHBl''@;'; put 'put ''WyIhY29uZGZtdCJdfHwocGVbIiFjb25kZm10Il09W10pLHBlWyIhY29uZGZtdCJdPXBlWyIhY29uZGZtdCJdLmNvbmNhdC5hcHBseShwZVsiIWNvbmRmbXQiXSxKbi5tYXAoZnVuY3Rpb24oTm4pe3JldHVybiBoMihObixSLGFlLGdlLCEwKX0pKSk7dmFyIFZuPSgtMT09ZXQ/TmU6TmUuc2xp''@;'; put 'put ''Y2UoMCxldCkpLm1hdGNoKGZlKTtWbiYmKHBlWyIhdmFsaWRhdGlvbnMiXT1fUyhWblswXSxSKSksZXQ+LTEmJihWbj1OZS5zbGljZShldCkubWF0Y2goZmUpKSYmKHBlWyIhdmFsaWRhdGlvbnMiXXx8KHBlWyIhdmFsaWRhdGlvbnMiXT1bXSkscGVbIiF2YWxpZGF0aW9ucyJdPXBlWyIhdmFs''@;'; put 'put ''aWRhdGlvbnMiXS5jb25jYXQoX1MoVm5bMF0sUiwhMCkpKTt2YXIgdXI9TmUubWF0Y2goY1MpO3VyJiZmdW5jdGlvbiBFRChTLFIsayl7Zm9yKHZhciBHPUFycmF5LmlzQXJyYXkoUyksUT0wO1EhPVIubGVuZ3RoOysrUSl7dmFyIGFlPXByKGdhKFJbUV0pLCEwKTtpZighYWUucmVmKXJldHVy''@;'; put 'put ''bjt2YXIgZ2U9KChrfHx7fSlbIiFpZCJdfHxbXSlbYWUuaWRdO2dlPyhhZS5UYXJnZXQ9Z2UuVGFyZ2V0LGFlLmxvY2F0aW9uJiYoYWUuVGFyZ2V0Kz0iIyIrSnIoYWUubG9jYXRpb24pKSk6KGFlLlRhcmdldD0iIyIrSnIoYWUubG9jYXRpb24pLGdlPXtUYXJnZXQ6YWUuVGFyZ2V0LFRhcmdl''@;'; put 'put ''dE1vZGU6IkludGVybmFsIn0pLGFlLlJlbD1nZSxhZS50b29sdGlwJiYoYWUuVG9vbHRpcD1hZS50b29sdGlwLGRlbGV0ZSBhZS50b29sdGlwKTtmb3IodmFyIHBlPWFhKGFlLnJlZikseWU9cGUucy5yO3llPD1wZS5lLnI7Kyt5ZSlmb3IodmFyIFBlPXBlLnMuYztQZTw9cGUuZS5jOysrUGUp''@;'; put 'put ''e3ZhciBOZT1YaSh7YzpQZSxyOnllfSk7Rz8oU1t5ZV18fChTW3llXT1bXSksU1t5ZV1bUGVdfHwoU1t5ZV1bUGVdPXt0OiJ6Iix2OnZvaWQgMH0pLFNbeWVdW1BlXS5sPWFlKTooU1tOZV18fChTW05lXT17dDoieiIsdjp2b2lkIDB9KSxTW05lXS5sPWFlKX19fShwZSx1cixHKTt2YXIgZ3I9''@;'; put 'put ''TmUubWF0Y2goZFMpO2dyJiZmdW5jdGlvbiBYQihTLFIpe3ZhciBrPXByKFMsITEsITApO1JbIiFwcmludCJdfHwoUlsiIXByaW50Il09e30pLFJbIiFwcmludCJdLnByb3BzfHwoUlsiIXByaW50Il0ucHJvcHM9e30pO3ZhciBHPVJbIiFwcmludCJdLnByb3BzO2suZ3JpZExpbmVzJiYoRy5n''@;'; put 'put ''cmlkbGluZXM9ZWkoay5ncmlkTGluZXMpKSxudWxsIT1rLmhvcml6b250YWxDZW50ZXJlZCYmKEcuY2VudGVyWD1laShrLmhvcml6b250YWxDZW50ZXJlZCkpLG51bGwhPWsudmVydGljYWxDZW50ZXJlZCYmKEcuY2VudGVyWT1laShrLnZlcnRpY2FsQ2VudGVyZWQpKX0oZ3JbMF0scGUpO3Zh''@;'; put 'put ''ciB0cj1OZS5tYXRjaChkRCk7dHImJigocGVbIiFwcmludCJdfHwocGVbIiFwcmludCJdPXt9KSkubWFyZ2lucz1wZVsiIW1hcmdpbnMiXT1URChwcih0clswXSkpKTt2YXIgQ2k9TmUubWF0Y2gobUQpO0NpJiZmdW5jdGlvbiBTRChTLFIpe3ZhciBrPXByKFMsITEsITApO2RlbGV0ZSBrLmlk''@;'; put 'put ''LGRlbGV0ZSBrWzBdLFJbIiFwcmludCJdfHwoUlsiIXByaW50Il09e30pLFJbIiFwcmludCJdLnByb3BzfHwoUlsiIXByaW50Il0ucHJvcHM9e30pO3ZhciBHPVJbIiFwcmludCJdLnByb3BzO2sub3JpZW50YXRpb24mJihHLm9yaWVudGF0aW9uPWsub3JpZW50YXRpb24pLGsuc2NhbGUmJihH''@;'; put 'put ''LnNjYWxlPStrLnNjYWxlKSwray5maXRUb0hlaWdodD49MCYmKChHLmZpdHx8KEcuZml0PXt9KSkuaGVpZ2h0PStrLmZpdFRvSGVpZ2h0KSwray5maXRUb1dpZHRoPj0wJiYoKEcuZml0fHwoRy5maXQ9e30pKS53aWR0aD0ray5maXRUb1dpZHRoKSxrLnBhcGVySGVpZ2h0JiZrLnBhcGVyV2lk''@;'; put 'put ''dGg/Ry5wYXBlcj17d2lkdGg6ay5wYXBlcldpZHRoLGhlaWdodDprLnBhcGVySGVpZ2h0fTprLnBhcGVyU2l6ZSYmKEcucGFwZXI9ZThbRy5wYXBlcj0ray5wYXBlclNpemVdfHxHLnBhcGVyKSxrLmhvcml6b250YWxEcGk/Ry5kcGk9K2suaG9yaXpvbnRhbERwaTprLnZlcnRpY2FsRHBpJiYo''@;'; put 'put ''Ry5kcGk9K2sudmVydGljYWxEcGkpLCJhdXRvbWF0aWMiIT0oay5maXJzdFBhZ2VOdW1iZXJ8fCJhdXRvbWF0aWMiKSYmKEcuZmlyc3Q9K2suZmlyc3RQYWdlTnVtYmVyKSxlaShrLmJsYWNrQW5kV2hpdGUpJiYoRy5idz0hMCksZWkoay5kcmFmdCkmJihHLmRyYWZ0PSEwKSwib3ZlclRoZW5E''@;'; put 'put ''b3duIj09ay5wYWdlT3JkZXImJihHLm9yZGVyPSJvdmVyIiksX0Rbay5jZWxsQ29tbWVudHNdJiYoRy5jb21tZW50cz1fRFtrLmNlbGxDb21tZW50c10pLENEW2suZXJyb3JzXSYmKEcuZXJyb3JzPUNEW2suZXJyb3JzXSl9KENpWzBdLHBlKTt2YXIgRmk9TmUubWF0Y2goTjUpO0ZpJiZmdW5j''@;'; put 'put ''dGlvbiBzaihTLFIpe2lmKFJbIiFwcmludCJdfHwoUlsiIXByaW50Il09e30pLFNbMV0pe3ZhciBrPSIiLEc9MDtTWzFdLnJlcGxhY2UoZW4sZnVuY3Rpb24oUSxhZSl7aWYoIi8iIT1RLmNoYXJBdCgxKSlrPVEuc2xpY2UoMSwtMSksRz1hZStRLmxlbmd0aDtlbHNlIGlmKGspe3ZhciBnZT1r''@;'; put 'put ''Lm1hdGNoKC9IZWFkZXIvKT8iaGVhZGVyIjoiZm9vdGVyIixwZT1rLnJlcGxhY2UoL0hlYWRlcnxGb290ZXIvLCIiKTtrPSIiLFJbIiFwcmludCJdW2dlXXx8KFJbIiFwcmludCJdW2dlXT17fSksUlsiIXByaW50Il1bZ2VdW3BlXT1KcihnYShTWzFdLnNsaWNlKEcsYWUpKSl9fSl9fShGaSxw''@;'; put 'put ''ZSk7dmFyIGlvPU5lLm1hdGNoKEdCKTtpbyYmKChwZVsiIXByaW50Il18fChwZVsiIXByaW50Il09e30pKS5yb3dCcmVha3M9cGVbIiFyb3dCcmVha3MiXT1mdW5jdGlvbiBRQihTKXt2YXIgUj1bXTtyZXR1cm4oUy5tYXRjaChGMCl8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGspe3ZhciBHPXBy''@;'; put 'put ''KGspO1IucHVzaCh7UjorRy5pZH0pfSksUn0oaW9bMF0pKTt2YXIgdW89TmUubWF0Y2gobmIpO3VvJiYoKHBlWyIhcHJpbnQiXXx8KHBlWyIhcHJpbnQiXT17fSkpLmNvbEJyZWFrcz1wZVsiIWNvbEJyZWFrcyJdPWZ1bmN0aW9uIGJuZShTKXt2YXIgUj1bXTtyZXR1cm4oUy5tYXRjaChGMCl8''@;'; put 'put ''fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKGspe3ZhciBHPXByKGspO1IucHVzaCh7QzorRy5pZH0pfSksUn0odW9bMF0pKTt2YXIgTGk9W107aWYoKExpPU5lLm1hdGNoKC9kcmF3aW5nIHI6aWQ9IiguKj8pIi8pKSYmKHBlWyIhcmVsIl09TGlbMV0pLChMaT1OZS5tYXRjaCgvbGVnYWN5RHJhd2lu''@;'; put 'put ''ZyByOmlkPSIoLio/KSIvKSkmJihwZVsiIWxlZ3JlbCJdPUxpWzFdKSwoTGk9TmUubWF0Y2godUQpKSYmKHBlWyIhY3RybGlkIl09TGkubWFwKGZ1bmN0aW9uKE5uKXtyZXR1cm4gcHIoTm4pfSkpLChMaT1OZS5tYXRjaChnRCkpJiZmdW5jdGlvbiBmUyhTLFIpe1NbIiF0YWJsZXJlZnMiXXx8''@;'; put 'put ''KFNbIiF0YWJsZXJlZnMiXT1bXSksKFIubWF0Y2goaFMpfHxbXSkuZm9yRWFjaChmdW5jdGlvbihrKXtTWyIhdGFibGVyZWZzIl0ucHVzaChwcihrKS5pZCl9KX0ocGUsTGlbMV0pLFImJlIubm9kaW0mJih5ZS5zLmM9eWUucy5yPTApLCFwZVsiIXJlZiJdJiZ5ZS5lLmM+PXllLnMuYyYmeWUu''@;'; put 'put ''ZS5yPj15ZS5zLnImJihwZVsiIXJlZiJdPW9vKHllKSksUi5zaGVldFJvd3M+MCYmcGVbIiFyZWYiXSl7dmFyIERyPWFhKHBlWyIhcmVmIl0pO1Iuc2hlZXRSb3dzPD0rRHIuZS5yJiYoRHIuZS5yPVIuc2hlZXRSb3dzLTEsRHIuZS5yPnllLmUuciYmKERyLmUucj15ZS5lLnIpLERyLmUucjxE''@;'; put 'put ''ci5zLnImJihEci5zLnI9RHIuZS5yKSxEci5lLmM+eWUuZS5jJiYoRHIuZS5jPXllLmUuYyksRHIuZS5jPERyLnMuYyYmKERyLnMuYz1Eci5lLmMpLHBlWyIhZnVsbHJlZiJdPXBlWyIhcmVmIl0scGVbIiFyZWYiXT1vbyhEcikpfXJldHVybiBrdCYmKHBlWyIhc2hlZXRGb3JtYXQiXT1mdW5j''@;'; put 'put ''dGlvbiB2RChTKXt2YXIgUj17fSxrPXt9LEc9ITEsUT17fSxhZT0hMTtyZXR1cm4gUy5kZWZhdWx0Um93SGVpZ2h0JiYoRz0hMCxrLmhwdD1wYXJzZUZsb2F0KFMuZGVmYXVsdFJvd0hlaWdodCkpLFMuemVyb0hlaWdodCYmKEc9ITAsay5oaWRkZW49ZWkoUy56ZXJvSGVpZ2h0KSksUy5iYXNl''@;'; put 'put ''Q29sV2lkdGg/KGFlPSEwLFEud2NoPXBhcnNlRmxvYXQoUy5iYXNlQ29sV2lkdGgpKTpTLmRlZmF1bHRDb2xXaWR0aCYmKGFlPSEwLFEud2NoPXBhcnNlRmxvYXQoUy5kZWZhdWx0Q29sV2lkdGgpLTUvRWMpLFMub3V0bGluZUxldmVsQ29sJiYoUi5jb2xvdXRsaW5lPXBhcnNlSW50KFMub3V0''@;'; put 'put ''bGluZUxldmVsQ29sKSksUy5vdXRsaW5lTGV2ZWxSb3cmJihSLnJvd291dGxpbmU9cGFyc2VJbnQoUy5vdXRsaW5lTGV2ZWxSb3cpKSxTLnRoaWNrQm90dG9tJiYoUi5ib3R0aGljaz1laShTLnRoaWNrQm90dG9tKSksUy50aGlja1RvcCYmKFIudG9wdGhpY2s9ZWkoUy50aGlja1RvcCkpLFMu''@;'; put 'put ''ZHlEZXNjZW50JiYoUi5keURlc2NlbnQ9cGFyc2VGbG9hdChTLmR5RGVzY2VudCkpLEcmJihQdihrKSxSLnJvdz1rKSxhZSYmKGUxKFEpLFIuY29sPVEpLFJ9KHByKGt0WzBdKSkpLE90Lmxlbmd0aD4wJiYocGVbIiFjb2xzIl09T3QpLFNuLmxlbmd0aD4wJiYocGVbIiFtZXJnZXMiXT1Tbiks''@;'; put 'put ''R1siIWlkIl1bcGVbIiFyZWwiXV0mJihwZVsiIWRyYXdlbCJdPUdbIiFpZCJdW3BlWyIhcmVsIl1dKSxHWyIhaWQiXVtwZVsiIWxlZ3JlbCJdXSYmKHBlWyIhbGVnZHJhd2VsIl09R1siIWlkIl1bcGVbIiFsZWdyZWwiXV0pLChwZVsiIWN0cmxpZCJdfHxbXSkuZm9yRWFjaChmdW5jdGlvbihO''@;'; put 'put ''bil7Tm4ucmVsPUdbIiFpZCJdW05uLmlkXX0pLG51bGw9PXBlWyIhZ3JpZGxpbmVzIl0mJihwZVsiIWdyaWRsaW5lcyJdPSEwKSxwZX0oUyxHLGssUSxhZSxnZSxwZSl9KGV0LFIsUSx5ZSxhZVtHXSxQZSxOZSxZZSk7YnJlYWs7Y2FzZSJjaGFydCI6dXQ9ZnVuY3Rpb24gY3ooUyxSLGssRyxR''@;'; put 'put ''LGFlLGdlLHBlKXtyZXR1cm4iLmJpbiI9PT1SLnNsaWNlKC00KT9mdW5jdGlvbiBueihTLFIsayxHLFEpe2lmKCFTKXJldHVybiBTO0d8fChHPXsiIWlkIjp7fX0pO3ZhciBhZT17IiF0eXBlIjoiY2hhcnQiLCIhZHJhd2VsIjpudWxsLCIhcmVsIjoiIn0sZ2U9W10scGU9ITE7cmV0dXJuIGNy''@;'; put 'put ''KFMsZnVuY3Rpb24oUGUsTmUsWWUpe3N3aXRjaChZZSl7Y2FzZSA1NTA6YWVbIiFyZWwiXT1QZTticmVhaztjYXNlIDY1MTpRLlNoZWV0c1trXXx8KFEuU2hlZXRzW2tdPXt9KSxQZS5uYW1lJiYoUS5TaGVldHNba10uQ29kZU5hbWU9UGUubmFtZSk7YnJlYWs7Y2FzZSA1NjI6Y2FzZSA2NTI6''@;'; put 'put ''Y2FzZSA2Njk6Y2FzZSA2Nzk6Y2FzZSA1NTE6Y2FzZSA1NTI6Y2FzZSA0NzY6Y2FzZSAzMDcyOmJyZWFrO2Nhc2UgMzU6cGU9ITA7YnJlYWs7Y2FzZSAzNjpwZT0hMTticmVhaztjYXNlIDM3OmdlLnB1c2goTmUpO2JyZWFrO2Nhc2UgMzg6Z2UucG9wKCk7YnJlYWs7ZGVmYXVsdDppZigoTmV8''@;'; put 'put ''fCIiKS5pbmRleE9mKCJCZWdpbiIpPjApZ2UucHVzaChOZSk7ZWxzZSBpZigoTmV8fCIiKS5pbmRleE9mKCJFbmQiKT4wKWdlLnBvcCgpO2Vsc2UgaWYoIXBlfHxSLldURil0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgcmVjb3JkICIrWWUrIiAiK05lKX19LFIpLEdbIiFpZCJdW2FlWyIh''@;'; put 'put ''cmVsIl1dJiYoYWVbIiFkcmF3ZWwiXT1HWyIhaWQiXVthZVsiIXJlbCJdXSksYWV9KFMsRyxrLFEsYWUpOmZ1bmN0aW9uIGV6KFMsUixrLEcsUSl7aWYoIVMpcmV0dXJuIFM7R3x8KEc9eyIhaWQiOnt9fSk7dmFyIGdlLGFlPXsiIXR5cGUiOiJjaGFydCIsIiFkcmF3ZWwiOm51bGwsIiFyZWwi''@;'; put 'put ''OiIifSxwZT1TLm1hdGNoKGhEKTtwZSYmcmIocGVbMF0sMCxRLGspO3ZhciB5ZT1TLm1hdGNoKGREKTtyZXR1cm4geWUmJihhZVsiIW1hcmdpbnMiXT1URChwcih5ZVswXSkpKSwoZ2U9Uy5tYXRjaCgvZHJhd2luZyByOmlkPSIoLio/KSIvKSkmJihhZVsiIXJlbCJdPWdlWzFdKSxHWyIhaWQi''@;'; put 'put ''XVthZVsiIXJlbCJdXSYmKGFlWyIhZHJhd2VsIl09R1siIWlkIl1bYWVbIiFyZWwiXV0pLGFlfShTLDAsayxRLGFlKX0oZXQsUixRLHllLGFlW0ddLFBlKTticmVhaztjYXNlIm1hY3JvIjp1dD1mdW5jdGlvbiB1eihTLFIsayxHLFEsYWUsZ2UscGUpe3JldHVybiBSLnNsaWNlKC00KSx7IiF0''@;'; put 'put ''eXBlIjoibWFjcm8ifX0oMCxSKTticmVhaztjYXNlImRpYWxvZyI6dXQ9ZnVuY3Rpb24gZHooUyxSLGssRyxRLGFlLGdlLHBlKXtyZXR1cm4gUi5zbGljZSgtNCkseyIhdHlwZSI6ImRpYWxvZyJ9fSgwLFIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgc2hl''@;'; put 'put ''ZXQgdHlwZSAiK3BlKX1pZih5ZS5jYWxsYmFjaylyZXR1cm47Z2VbR109dXQsZnVuY3Rpb24genooUyxSLGssRyxRLGFlLGdlLHBlKXtpZihTJiZTWyIhZHJhd2VsIl0pe3ZhciB5ZT1wbihTWyIhZHJhd2VsIl0uVGFyZ2V0LEcpLFBlPU5yKHllKSxOZT1mdW5jdGlvbiBSQyhTLFIsayxHLFEp''@;'; put 'put ''e3ZhciBhZT17Y2hhcnRzOltdLGltYWdlczpbXSxzaGFwZXM6W119O2lmKCFTKXJldHVybiBhZTt2YXIgZ2U9UXx8e307cmV0dXJuKFMubWF0Y2goLzxbXjxdKj8oYWJzb2x1dGVBbmNob3J8b25lQ2VsbEFuY2hvcnx0d29DZWxsQW5jaG9yKS4qPyhhYnNvbHV0ZUFuY2hvcnxvbmVDZWxsQW5j''@;'; put 'put ''aG9yfHR3b0NlbGxBbmNob3IpLio/Pi9nKXx8W10pLmZvckVhY2goZnVuY3Rpb24ocGUpe3ZhciB5ZT0iIixQZT17dHlwZToiIn0sTmU9e30sWWU9ITAsZXQ9ITEsdXQ9ITEsRXQ9ITEsb3Q9e3M6e319LGJ0PS0xLEJ0PVtdLGt0PVtdLE90PXtzOnthbGlnbm1lbnQ6e2hvcml6b250YWw6ImNl''@;'; put 'put ''bnRlciIsdmVydGljYWw6ImNlbnRlciJ9fX0sS3Q9IiIsVG49LTEsU249e307cGUucmVwbGFjZShlbixmdW5jdGlvbihzcixKbil7QnQ9bnVsbDt2YXIgVm49cHIoc3IpLHVyPVduKFZuWzBdKS5yZXBsYWNlKC9bXC9dPz4kLywiIik7c3dpdGNoKHVyKXtjYXNlIjxjbGllbnREYXRhIjpicmVh''@;'; put 'put ''aztjYXNlIjxhYnNvbHV0ZUFuY2hvciI6Y2FzZSI8b25lQ2VsbEFuY2hvciI6Y2FzZSI8dHdvQ2VsbEFuY2hvciI6UGUudHlwZT1XbihWblswXSkucmVwbGFjZSgvWzw+XS9nLCIiKTticmVhaztjYXNlIjwvYWJzb2x1dGVBbmNob3IiOmNhc2UiPC9vbmVDZWxsQW5jaG9yIjpjYXNlIjwvdHdv''@;'; put 'put ''Q2VsbEFuY2hvciI6YnJlYWs7Y2FzZSI8cG9zIjpQZS5wb3M9e3g6K1ZuLngseTorVm4ueX07YnJlYWs7Y2FzZSI8ZXh0IjpZZSYmKFBlLmV4dD17eDorVm4uY3gseTorVm4uY3l9KTticmVhaztjYXNlIjxmcm9tIjpjYXNlIjx0byI6TmU9e307YnJlYWs7Y2FzZSI8L2Zyb20iOlllJiYoUGUu''@;'; put 'put ''ZnJvbT1OZSk7YnJlYWs7Y2FzZSI8L3RvIjpZZSYmKFBlLnRvPU5lKTticmVhaztjYXNlIjxjb2wiOmNhc2UiPGNvbE9mZiI6Y2FzZSI8cm93IjpjYXNlIjxyb3dPZmYiOmJ0PUpuK3NyLmxlbmd0aDticmVhaztjYXNlIjwvY29sIjpOZS5jPStwZS5zbGljZShidCxKbik7YnJlYWs7Y2FzZSI8''@;'; put 'put ''L2NvbE9mZiI6TmUuY09mZj0rcGUuc2xpY2UoYnQsSm4pO2JyZWFrO2Nhc2UiPC9yb3ciOk5lLnI9K3BlLnNsaWNlKGJ0LEpuKTticmVhaztjYXNlIjwvcm93T2ZmIjpOZS5yT2ZmPStwZS5zbGljZShidCxKbik7YnJlYWs7Y2FzZSI8c3AiOnllPSJzaGFwZSIsT3QuQW5jaG9yPVBlLGFlLnNo''@;'; put 'put ''YXBlcy5wdXNoKE90KSxZZT0hMTticmVhaztjYXNlIjwvc3AiOlllPSEwO2JyZWFrO2Nhc2UiPGdyYXBoaWNGcmFtZSI6eWU9ImdyYXBoaWMiLFllPSExO2JyZWFrO2Nhc2UiPC9ncmFwaGljRnJhbWUiOlllPSEwO2JyZWFrO2Nhc2UiPHBpYyI6eWU9InBpY3R1cmUiLFllPSExO2JyZWFrO2Nh''@;'; put 'put ''c2UiPC9waWMiOlllPSEwO2JyZWFrO2Nhc2UiPGdycFNwIjp5ZT0iZ3JvdXBzaGFwZSIsWWU9ITE7YnJlYWs7Y2FzZSI8L2dycFNwIjpZZT0hMDticmVhaztjYXNlIjxncmFwaGljIjpjYXNlIjwvZ3JhcGhpYyI6Y2FzZSI8eGZybSI6Y2FzZSI8L3hmcm0iOmNhc2UiPG9mZiI6YnJlYWs7Y2Fz''@;'; put 'put ''ZSI8Z3JhcGhpY0RhdGEiOmV0PSEwO2JyZWFrO2Nhc2UiPC9ncmFwaGljRGF0YSI6ZXQ9ITE7YnJlYWs7Y2FzZSI8YmxpcEZpbGwiOmV0PSEwO2JyZWFrO2Nhc2UiPC9ibGlwRmlsbCI6ZXQ9ITE7YnJlYWs7Y2FzZSI8L2JsaXAiOmJyZWFrO2Nhc2UiPHNyY1JlY3QiOmV0PSEwO2JyZWFrO2Nh''@;'; put 'put ''c2UiPC9zcmNSZWN0IjpldD0hMTticmVhaztjYXNlIjxub0ZpbGwiOmlmKHV0KWJyZWFrOyI8c3BQciI9PWt0LnNsaWNlKC0xKVswXSYmKE90LnMuZmdDb2xvcj1udWxsKTticmVhaztjYXNlIjwvc29saWRGaWxsIjppZih1dHx8RXQpYnJlYWs7IjxzcFByIj09a3Quc2xpY2UoLTIpWzBdP090''@;'; put 'put ''LnMuZmdDb2xvcj1TbjoiPHJQciI9PWt0LnNsaWNlKC0yKVswXSYma3QuaW5kZXhPZigiPHR4Qm9keSIpPi0xJiYob3Qucy5jb2xvcj1TbiksU249e30sRXQ9ITE7YnJlYWs7Y2FzZSI8cHJzdEdlb20iOiJzaGFwZSI9PXllJiYoT3RbIiFzaGFwZSJdPVZuLnByc3QpO2JyZWFrO2Nhc2UiPC9w''@;'; put 'put ''cnN0R2VvbSI6Y2FzZSI8YXZMc3QiOmJyZWFrO2Nhc2UiPHR4Qm9keSI6ZXQ9ITAsT3QuUj1bXTticmVhaztjYXNlIjwvdHhCb2R5IjpldD0hMTticmVhaztjYXNlIjxib2R5UHIiOk90LnMuYWxpZ25tZW50LnZlcnRpY2FsPWlCW1ZuLmFuY2hvcnx8InQiXXx8InRvcCI7YnJlYWs7Y2FzZSI8''@;'; put 'put ''bHN0U3R5bGUiOmJyZWFrO2Nhc2UiPHQiOlRuPUpuK3NyLmxlbmd0aDticmVhaztjYXNlIjxiciI6Y2FzZSI8YnIvPiI6S3QrPSJcbiI7YnJlYWs7Y2FzZSI8L3QiOkt0Kz1wZS5zbGljZShUbixKbik7YnJlYWs7Y2FzZSI8cFByIjpPdC5zLmFsaWdubWVudC5ob3Jpem9udGFsfHwoT3Qucy5h''@;'; put 'put ''bGlnbm1lbnQuaG9yaXpvbnRhbD1SNVtWbi5hbGdufHwibCJdfHwibGVmdCIpLGt0LmluZGV4T2YoIjx0eEJvZHkiKT4tMSYmKG90LnMuYWxpZ25tZW50Lmhvcml6b250YWw9UjVbVm4uYWxnbnx8ImwiXXx8ImxlZnQiKTticmVhaztjYXNlIjxyUHIiOlZuLnN6JiZrdC5pbmRleE9mKCI8dHhC''@;'; put 'put ''b2R5Iik+LTEmJihPdC5zLnN6PW90LnMuc3o9K1ZuLnN6LzEwMCk7YnJlYWs7Y2FzZSI8cCI6S3Q9IiIsb3Q9e3Q6InMiLHY6IiIsczp7YWxpZ25tZW50Ont9fX07YnJlYWs7Y2FzZSI8L3AiOiJzaGFwZSI9PXllJiZrdC5pbmRleE9mKCI8dHhCb2R5Iik+LTEmJihPdC52PShPdC52fHwiIikr''@;'; put 'put ''S3Qsb3Qudj1LdCxPdC5SLnB1c2gob3QpKTticmVhaztjYXNlIjxsYXRpbiI6Vm4udHlwZWZhY2UmJmt0LmluZGV4T2YoIjx0eEJvZHkiKT4tMSYmKG90LnMubmFtZT1Wbi50eXBlZmFjZSk7YnJlYWs7Y2FzZSI8c3R5bGUiOmV0PSEwLHV0PSEwO2JyZWFrO2Nhc2UiPC9zdHlsZSI6ZXQ9ITEs''@;'; put 'put ''dXQ9ITE7YnJlYWs7Y2FzZSI8bG5SZWYiOmNhc2UiPGZpbGxSZWYiOmNhc2UiPGVmZmVjdFJlZiI6Y2FzZSI8Zm9udFJlZiI6YnJlYWs7Y2FzZSI8L2ZpbGxSZWYiOiF1dCYmInNoYXBlIj09eWUmJihPdC5zLmZnQ29sb3I9U24pLFNuPXt9O2JyZWFrO2Nhc2UiPC9mb250UmVmIjohdXQmJiJz''@;'; put 'put ''aGFwZSI9PXllJiYoT3Qucy5jb2xvcj1TbiksU249e307YnJlYWs7Y2FzZSI8c2NoZW1lQ2xyIjp2YXIgZ3I9e2JnMToibHQxIixiZzI6Imx0MiIsdHgxOiJkazEiLHR4MjoiZGsyIn1bVm4udmFsXXx8Vm4udmFsLHRyPSgoRy50aGVtZUVsZW1lbnRzfHx7fSkuY2xyU2NoZW1lfHxbXSkuZmlu''@;'; put 'put ''ZChmdW5jdGlvbihGaSl7cmV0dXJuIEZpLm5hbWU9PWdyfSk7dHI/U24ucmdiPXRyLnJnYjpFdD0hMDticmVhaztjYXNlIjxzY3JnYkNsciI6RXQ9ITA7YnJlYWs7Y2FzZSI8c3JnYkNsciI6U24ucmdiPVZuLnZhbC5zbGljZSgtNik7YnJlYWs7Y2FzZSI8aHNsQ2xyIjpjYXNlIjxzeXNDbHIi''@;'; put 'put ''OmNhc2UiPHByc3RDbHIiOkV0PSEwO2JyZWFrO2Nhc2UiPGNoYXJ0IjpCdD1hZS5jaGFydHM7dmFyIENpPVZuLmlkO2Nhc2UiPGJsaXAiOkJ0fHwoQnQ9YWUuaW1hZ2VzLENpPVZuLmVtYmVkKSxCdC5wdXNoKHtBbmNob3I6UGUsVGFyZ2V0OihSWyIhaWQiXVtDaV18fHt9KS5UYXJnZXR9KSxW''@;'; put 'put ''bi5saW5rJiYoQnRbQnQubGVuZ3RoLTFdLkxpbms9KFJbIiFpZCJdW1ZuLmxpbmtdfHx7fSkuVGFyZ2V0KTticmVhaztjYXNlIjxncnBTcFByIjpldD0hMDticmVhaztjYXNlIjwvZ3JwU3BQciI6ZXQ9ITE7YnJlYWs7Y2FzZSI8bnZHcnBTcFByIjpldD0hMDticmVhaztjYXNlIjwvbnZHcnBT''@;'; put 'put ''cFByIjpldD0hMTticmVhaztjYXNlIjxzcFByIjpldD0hMDticmVhaztjYXNlIjwvc3BQciI6ZXQ9ITE7YnJlYWs7Y2FzZSI8c3RyZXRjaCI6Y2FzZSI8L3N0cmV0Y2giOmNhc2UiPGZpbGxSZWN0IjpjYXNlIjxudkdyYXBoaWNGcmFtZVByIjpjYXNlIjwvbnZHcmFwaGljRnJhbWVQciI6Y2Fz''@;'; put 'put ''ZSI8Y052R3JhcGhpY0ZyYW1lUHIiOmNhc2UiPC9jTnZHcmFwaGljRnJhbWVQciI6Y2FzZSI8Z3JhcGhpY0ZyYW1lTG9ja3MiOmNhc2UiPG52UGljUHIiOmNhc2UiPC9udlBpY1ByIjpjYXNlIjxjTnZQaWNQciI6Y2FzZSI8L2NOdlBpY1ByIjpjYXNlIjxwaWNMb2NrcyI6Y2FzZSI8Y052R3Jw''@;'; put 'put ''U3BQciI6Y2FzZSI8L2NOdkdycFNwUHIiOmNhc2UiPGdycFNwTG9ja3MiOmNhc2UiPG52U3BQciI6Y2FzZSI8L252U3BQciI6Y2FzZSI8Y052U3BQciI6Y2FzZSI8L2NOdlNwUHIiOmNhc2UiPHNwTG9ja3MiOmJyZWFrO2Nhc2UiPGNOdlByIjpldD0hMDticmVhaztjYXNlIjwvY052UHIiOmV0''@;'; put 'put ''PSExO2JyZWFrO2Nhc2UiPGN4blNwIjpldD0hMDticmVhaztjYXNlIjwvY3huU3AiOmV0PSExO2JyZWFrO2Nhc2UiPGNOdkN4blNwUHIiOmV0PSEwO2JyZWFrO2Nhc2UiPC9jTnZDeG5TcFByIjpldD0hMTticmVhaztjYXNlIjxudkN4blNwUHIiOmNhc2UiPC9udkN4blNwUHIiOmJyZWFrO2Nh''@;'; put 'put ''c2UiPGV4dExzdCI6ZXQ9ITAsdXQ9ITA7YnJlYWs7Y2FzZSI8L2V4dExzdCI6ZXQ9ITEsdXQ9ITE7YnJlYWs7Y2FzZSI8L2V4dCI6YnJlYWs7ZGVmYXVsdDppZihnZSYmZ2UuV1RGJiYhZXQpdGhyb3cgbmV3IEVycm9yKCJ1bnJlY29nbml6ZWQgIitWblswXSsiIGluIGRyYXdpbmciKX1yZXR1''@;'; put 'put ''cm4iPC8iPT11ci5zbGljZSgwLDIpP2t0LnBvcCgpOiIvPiIhPXNyLnNsaWNlKHNyLmxlbmd0aC0yKSYma3QucHVzaCh1ciksIiJ9KX0pLGFlfShycihrLHllLCEwKSxoZihycihrLFBlLCEwKSx5ZSksMCxwZSxRKTtpZihOZSl7aWYoTmUuY2hhcnRzKWZvcih2YXIgWWU9MDtZZTxOZS5jaGFy''@;'; put 'put ''dHMubGVuZ3RoOysrWWUpe3ZhciBldD1OZS5jaGFydHNbWWVdLHV0PXBuKGV0LlRhcmdldCx5ZSksRXQ9TnIodXQpLG90PSJjaGFydCI9PVImJjA9PVllLGJ0PWYyKHJyKGssdXQsITApLDAsMCxoZihycihrLEV0LCEwKSx1dCksMCxvdD9TOm51bGwsZXQsb3Q/bnVsbDpTKTtvdHx8KFNbIiFj''@;'; put 'put ''aGFydHMiXXx8KFNbIiFjaGFydHMiXT1bXSksU1siIWNoYXJ0cyJdLnB1c2goYnQpKX1pZihRLmJvb2tJbWFnZXMmJk5lLmltYWdlcylmb3IodmFyIEJ0PTA7QnQ8TmUuaW1hZ2VzLmxlbmd0aDsrK0J0KXt2YXIga3Q9TmUuaW1hZ2VzW0J0XSxPdD17IiF0eXBlIjoiaW1hZ2UiLCIhcG9zIjpB''@;'; put 'put ''ayhrdC5BbmNob3IpLCIhcG9zVHlwZSI6a3QuQW5jaG9yLnR5cGUucmVwbGFjZSgvQW5jaG9yLywiIiksIiFhYnNwb3MiOkQ1KGt0LkFuY2hvcixTKSwiIXJlbHBvcyI6VEMoa3QuQW5jaG9yLFMpfTtpZihrdC5UYXJnZXQmJihPdFsiIXBhdGgiXT1wbihrdC5UYXJnZXQseWUpLE90WyIhZGF0''@;'; put 'put ''YSJdPVR0KGssT3RbIiFwYXRoIl0pLE90WyIhZGF0YXR5cGUiXT0ic3RyaW5nIj09dHlwZW9mIE90WyIhZGF0YSJdPyJiaW5hcnkiOiJidWZmZXIiKSxrdC5MaW5rJiYoT3RbIiFkYXRhdHlwZSJdfHwoT3RbIiFkYXRhdHlwZSJdPSJyZW1vdGUiKSxPdFsiIWxpbmsiXT1rdC5MaW5rKSwhT3Rb''@;'; put 'put ''IiFkYXRhdHlwZSJdKXRocm93IkltYWdlIGRhdGEgY2Fubm90IGJlIGZvdW5kIjtTWyIhaW1hZ2VzIl18fChTWyIhaW1hZ2VzIl09W10pLFNbIiFpbWFnZXMiXS5wdXNoKE90KX12YXIgS3QsVG47aWYoTmUuc2hhcGVzKWZvcih2YXIgU249MDtTbjxOZS5zaGFwZXMubGVuZ3RoOysrU24pVG49''@;'; put 'put ''eyIhdHlwZSI6InNoYXBlIiwiIXBvcyI6RDUoKEt0PU5lLnNoYXBlc1tTbl0pLkFuY2hvcixTKSwiIXBvc1R5cGUiOkt0LkFuY2hvci50eXBlLnJlcGxhY2UoL0FuY2hvci8sIiIpLCIhYWJzcG9zIjpENShLdC5BbmNob3IsUyksIiFyZWxwb3MiOlRDKEt0LkFuY2hvcixTKX0sWyJ2IiwiIXNo''@;'; put 'put ''YXBlIiwicyIsIlIiXS5mb3JFYWNoKGlyKSxTWyIhc2hhcGVzIl18fChTWyIhc2hhcGVzIl09W10pLFNbIiFzaGFwZXMiXS5wdXNoKFRuKX19ZnVuY3Rpb24gaXIoc3Ipe0t0W3NyXSYmKFRuW3NyXT1LdFtzcl0pfX0odXQscGUsUyxSLHllLDAsMCxOZSk7dmFyIEV0PVtdO3JldHVybiBhZSYm''@;'; put 'put ''YWVbR10mJlJlKGFlW0ddKS5mb3JFYWNoKGZ1bmN0aW9uKG90KXtpZihhZVtHXVtvdF0uVHlwZT09cW8uQ01OVCl7dmFyIGJ0PXBuKGFlW0ddW290XS5UYXJnZXQsUik7aWYoIShFdD1mdW5jdGlvbiBneihTLFIsayl7cmV0dXJuIi5iaW4iPT09Ui5zbGljZSgtNCk/ZnVuY3Rpb24gJHYoUyxS''@;'; put 'put ''KXt2YXIgaz1bXSxHPVtdLFE9e30sYWU9ITE7cmV0dXJuIGNyKFMsZnVuY3Rpb24ocGUseWUsUGUpe3N3aXRjaChQZSl7Y2FzZSA2MzI6Ry5wdXNoKHBlKTticmVhaztjYXNlIDYzNTpRPXBlO2JyZWFrO2Nhc2UgNjM3OlEudD1wZS50LFEuaD1wZS5oLFEucj1wZS5yO2JyZWFrO2Nhc2UgNjM2''@;'; put 'put ''OmlmKFEuYXV0aG9yPUdbUS5pYXV0aG9yXSxkZWxldGUgUS5pYXV0aG9yLFIuc2hlZXRSb3dzJiZRLnJmeCYmUi5zaGVldFJvd3M8PVEucmZ4LnIpYnJlYWs7US50fHwoUS50PSIiKSxkZWxldGUgUS5yZngsay5wdXNoKFEpO2JyZWFrO2Nhc2UgMzA3MjpjYXNlIDM3OmNhc2UgMzg6YnJlYWs7''@;'; put 'put ''Y2FzZSAzNTphZT0hMDticmVhaztjYXNlIDM2OmFlPSExO2JyZWFrO2RlZmF1bHQ6aWYoISgoeWV8fCIiKS5pbmRleE9mKCJCZWdpbiIpPjApJiYhKCh5ZXx8IiIpLmluZGV4T2YoIkVuZCIpPjApJiYoIWFlfHxSLldURikpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK1Bl''@;'; put 'put ''KyIgIit5ZSl9fSksa30oUyxrKTpmdW5jdGlvbiBPayhTLFIpe2lmKFMubWF0Y2goLzwoPzpcdys6KT9jb21tZW50cyAqXC8+LykpcmV0dXJuW107dmFyIGs9W10sRz1bXSxRPVMubWF0Y2goLzwoPzpcdys6KT9hdXRob3JzPihbXHNcU10qKTxcLyg/Olx3KzopP2F1dGhvcnM+Lyk7USYmUVsx''@;'; put 'put ''XSYmUVsxXS5zcGxpdCgvPFwvXHcqOj9hdXRob3I+LykuZm9yRWFjaChmdW5jdGlvbihnZSl7aWYoIiIhPT1nZSYmIiIhPT1nZS50cmltKCkpe3ZhciBwZT1nZS5tYXRjaCgvPCg/Olx3KzopP2F1dGhvcltePl0qPiguKikvKTtwZSYmay5wdXNoKHBlWzFdKX19KTt2YXIgYWU9Uy5tYXRjaCgv''@;'; put 'put ''PCg/Olx3KzopP2NvbW1lbnRMaXN0PihbXHNcU10qKTxcLyg/Olx3KzopP2NvbW1lbnRMaXN0Pi8pO3JldHVybiBhZSYmYWVbMV0mJmFlWzFdLnNwbGl0KC88XC9cdyo6P2NvbW1lbnQ+LykuZm9yRWFjaChmdW5jdGlvbihnZSl7aWYoIiIhPT1nZSYmIiIhPT1nZS50cmltKCkpe3ZhciBwZT1n''@;'; put 'put ''ZS5tYXRjaCgvPCg/Olx3KzopP2NvbW1lbnRbXj5dKj4vKTtpZihwZSl7dmFyIHllPXByKHBlWzBdKSxQZT17YXV0aG9yOnllLmF1dGhvcklkJiZrW3llLmF1dGhvcklkXXx8InNoZWV0anNnaG9zdCIscmVmOnllLnJlZixndWlkOnllLmd1aWR9LE5lPU5hKHllLnJlZik7aWYoIShSLnNoZWV0''@;'; put 'put ''Um93cyYmUi5zaGVldFJvd3M8PU5lLnIpKXt2YXIgWWU9Z2UubWF0Y2goLzwoPzpcdys6KT90ZXh0PihbXHNcU10qKTxcLyg/Olx3KzopP3RleHQ+LyksZXQ9ISFZZSYmISFZZVsxXSYmY0MoWWVbMV0pfHx7cjoiIix0OiIiLGg6IiJ9O1BlLnI9ZXQuciwiPHQ+PC90PiI9PWV0LnImJihldC50''@;'; put 'put ''PWV0Lmg9IiIpLFBlLnQ9KGV0LnR8fCIiKS5yZXBsYWNlKC9cclxuL2csIlxuIikucmVwbGFjZSgvXHIvZywiXG4iKSxSLmNlbGxIVE1MJiYoUGUuaD1ldC5oKSxHLnB1c2goUGUpfX19fSksR30oUyxrKX0oVHQoUyxidCwhMCksYnQseWUpKXx8IUV0Lmxlbmd0aClyZXR1cm47IWZ1bmN0aW9u''@;'; put 'put ''IExrKFMsUil7dmFyIEcsaz1BcnJheS5pc0FycmF5KFMpO1IuZm9yRWFjaChmdW5jdGlvbihRKXt2YXIgYWU9TmEoUS5yZWYpO2lmKGs/KFNbYWUucl18fChTW2FlLnJdPVtdKSxHPVNbYWUucl1bYWUuY10pOkc9U1tRLnJlZl0sIUcpe0c9e3Q6InoifSxrP1NbYWUucl1bYWUuY109RzpTW1Eu''@;'; put 'put ''cmVmXT1HO3ZhciBnZT1hYShTWyIhcmVmIl18fCJCRFdHTzEwMDAwMDE6QTEiKTtnZS5zLnI+YWUuciYmKGdlLnMucj1hZS5yKSxnZS5lLnI8YWUuciYmKGdlLmUucj1hZS5yKSxnZS5zLmM+YWUuYyYmKGdlLnMuYz1hZS5jKSxnZS5lLmM8YWUuYyYmKGdlLmUuYz1hZS5jKTt2YXIgcGU9b28o''@;'; put 'put ''Z2UpO3BlIT09U1siIXJlZiJdJiYoU1siIXJlZiJdPXBlKX1HLmN8fChHLmM9W10pO3ZhciB5ZT17YTpRLmF1dGhvcix0OlEudCxyOlEucn07eWUuciYmInN0cmluZyI9PXR5cGVvZiB5ZS5yJiYoeWUuUj1iNSh5ZS5yKSksUS5oJiYoeWUuaD1RLmgpLEcuYy5wdXNoKHllKX0pfSh1dCxFdCl9''@;'; put 'put ''fSksZnVuY3Rpb24gWFMoUyxSLGssRyxRLGFlLGdlKXshU3x8IVNbIiF0YWJsZXJlZnMiXXx8IWt8fCFrWyIhaWQiXXx8KFNbIiF0YWJsZXMiXT1bXSxTWyIhdGFibGVyZWZzIl0uZm9yRWFjaChmdW5jdGlvbihwZSl7dmFyIHllPWtbIiFpZCJdW3BlXTtpZih5ZSYmeWUuVGFyZ2V0KXt2YXIg''@;'; put 'put ''UGU9cG4oeWUuVGFyZ2V0LEcpOyFmdW5jdGlvbiBzQihTLFIsayxHLFEpe3ZhciBhZT17c3R5bGU6e30saGVhZGVyOjB9LGdlPSExO1MucmVwbGFjZShlbixmdW5jdGlvbihwZSl7dmFyIHllPXByKHBlKTtzd2l0Y2goV24oeWVbMF0pKXtjYXNlIjw/eG1sIjpjYXNlIjwvdGFibGU+IjpjYXNl''@;'; put 'put ''IjwvYXV0b0ZpbHRlcj4iOmNhc2UiPHNvcnRTdGF0ZSI6Y2FzZSI8c29ydFN0YXRlPiI6Y2FzZSI8L3NvcnRTdGF0ZT4iOmNhc2UiPC90YWJsZUNvbHVtbnMiOmNhc2UiPC90YWJsZUNvbHVtbnM+IjpjYXNlIjwvdGFibGVDb2x1bW4+IjpjYXNlIjxjYWxjdWxhdGVkQ29sdW1uRm9ybXVsYT4i''@;'; put 'put ''OmNhc2UiPGNhbGN1bGF0ZWRDb2x1bW5Gb3JtdWxhIjpjYXNlIjwvY2FsY3VsYXRlZENvbHVtbkZvcm11bGE+IjpjYXNlIjx0b3RhbHNSb3dGb3JtdWxhPiI6Y2FzZSI8dG90YWxzUm93Rm9ybXVsYSI6Y2FzZSI8L3RvdGFsc1Jvd0Zvcm11bGE+IjpjYXNlIjx4bWxDb2x1bW5Qcj4iOmNhc2Ui''@;'; put 'put ''PHhtbENvbHVtblByIjpjYXNlIjwveG1sQ29sdW1uUHI+IjpjYXNlIjxzb3J0Q29uZGl0aW9uPiI6Y2FzZSI8c29ydENvbmRpdGlvbiI6Y2FzZSI8ZXh0THN0IjpjYXNlIjxleHRMc3Q+IjpjYXNlIjwvZXh0THN0PiI6Y2FzZSI8ZXh0THN0Lz4iOmJyZWFrO2Nhc2UiPHRhYmxlIjp5ZS5yZWYm''@;'; put 'put ''JihhZS5yZWY9eWUucmVmKSx5ZS5uYW1lP2FlLm5hbWU9eWUubmFtZTp5ZS5kaXNwbGF5TmFtZSYmKGFlLm5hbWU9eWUuZGlzcGxheU5hbWUpLG51bGwhPXllLmhlYWRlcnJvd2NvdW50JiYxIT0reWUuaGVhZGVycm93Y291bnQ/YWUuaGVhZGVyPSt5ZS5oZWFkZXJyb3djb3VudDpudWxsPT15''@;'; put 'put ''ZS5oZWFkZXJyb3djb3VudCYmKGFlLmhlYWRlcj0xKTticmVhaztjYXNlIjxhdXRvRmlsdGVyIjpjYXNlIjxhdXRvRmlsdGVyPiI6YWUuZmlsdGVyPSEwO2JyZWFrO2Nhc2UiPHRhYmxlQ29sdW1ucyI6Y2FzZSI8dGFibGVDb2x1bW5zPiI6YWUuY29scz1bXTticmVhaztjYXNlIjx0YWJsZVN0''@;'; put 'put ''eWxlSW5mbyI6eWUuc2hvd1Jvd1N0cmlwZXMmJihhZS5zdHlsZS5yb3dzdHJpcGU9ZWkoeWUuc2hvd1Jvd1N0cmlwZXMpKSx5ZS5zaG93Q29sdW1uU3RyaXBlcyYmKGFlLnN0eWxlLmNvbHN0cmlwZT1laSh5ZS5zaG93Q29sdW1uU3RyaXBlcykpLHllLnNob3dGaXJzdENvbHVtbiYmKGFlLnN0''@;'; put 'put ''eWxlLmNvbGZpcnN0PWVpKHllLnNob3dGaXJzdENvbHVtbikpLHllLnNob3dMYXN0Q29sdW1uJiYoYWUuc3R5bGUuY29sbGFzdD1laSh5ZS5zaG93TGFzdENvbHVtbikpLHllLm5hbWUmJihhZS5zdHlsZS5uYW1lPXllLm5hbWUucmVwbGFjZSgvXlRhYmxlU3R5bGUvLCIiKSk7YnJlYWs7Y2Fz''@;'; put 'put ''ZSI8dGFibGVDb2x1bW4iOmNhc2UiPHRhYmxlQ29sdW1uPiI6YWUuY29scy5wdXNoKHtpZDoreWUuaWQsbmFtZTp5ZS5uYW1lfSk7YnJlYWs7Y2FzZSI8ZmlsdGVyQ29sdW1uPiI6Y2FzZSI8ZmlsdGVyQ29sdW1uIjpjYXNlIjxjdXN0b21GaWx0ZXJzIjpjYXNlIjxjdXN0b21GaWx0ZXJzPiI6''@;'; put 'put ''Y2FzZSI8ZXh0IjpnZT0hMDticmVhaztjYXNlIjwvZmlsdGVyQ29sdW1uPiI6Y2FzZSI8L2N1c3RvbUZpbHRlcnM+IjpjYXNlIjwvZXh0PiI6Z2U9ITE7YnJlYWs7ZGVmYXVsdDppZighZ2UmJlEuV1RGKXRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkICIreWVbMF0rIiBpbiB0YWJsZSIp''@;'; put 'put ''fXJldHVybiBwZX0pLGFlLmZpbHRlcnx8KGFlLmZpbHRlcj0hMSksYWUuc3R5bGUubmFtZSYmIWFlLnN0eWxlLm5hbWUubWF0Y2goL14oTGlnaHR8TWVkaXVtfERhcmspXGQrJC8pJiZrLlRhYmxlJiZrLlRhYmxlLmZvckVhY2goZnVuY3Rpb24ocGUpeyhwZS5uYW1lPT1hZS5zdHlsZS5uYW1l''@;'; put 'put ''fHxwZS5yYXduYW1lPT1hZS5zdHlsZS5uYW1lKSYmKGFlLnN0eWxlLnJhdz1xdChwZSkpfSksUlsiIXRhYmxlcyJdLnB1c2goYWUpfShUdChSLFBlLCEwKSxTLFEsMCxnZSl9fSksZGVsZXRlIFNbIiF0YWJsZXJlZnMiXSl9KHV0LFMsYWVbR10sUixZZSwwLHllKSx0eXBlb2YgcGFyc2Vfc2hl''@;'; put 'put ''ZXRfcGl2b3Q8InUiJiZrYi5wdXNoKFt1dCxTLGFlW0ddLFIse1NoZWV0czpnZX0sWWUseWVdKSxmdW5jdGlvbiBVeihTLFIsayxHLFEsYWUsZ2UscGUpe2lmKFMmJlNbIiFsZWdkcmF3ZWwiXSl7dmFyIHllPXBuKFNbIiFsZWdkcmF3ZWwiXS5UYXJnZXQsRyksUGU9cnIoayx5ZSwhMCk7UGUm''@;'; put 'put ''JmZ1bmN0aW9uIFd2KFMsUixrKXt2YXIgRz0wOyhTLm1hdGNoKGxCKXx8W10pLmZvckVhY2goZnVuY3Rpb24oUSl7dmFyIEJ0LGt0LE90LEt0LFRuLGlyLFNuLHNyLGFlPSIiLGdlPSEwLHBlPSIiLHllPS0xLFBlPXt9LE5lPXt9LFllPXt9LGV0PS0xLHV0PS0xLEV0PSIiLG90PSIiLGJ0PSIi''@;'; put 'put ''LEpuPSExLFZuPSExO3N3aXRjaChRLnJlcGxhY2UoZW4sZnVuY3Rpb24odHIsQ2kpe3ZhciBGaT1wcih0cik7c3dpdGNoKFduKEZpWzBdKSl7Y2FzZSI8c2hhcGUiOkZpLmZpbGxjb2xvciYmKFBlLmNvbG9yMT1GaS5maWxsY29sb3IpLEZpLnN0cm9rZWNvbG9yJiYoWWUuY29sb3I9Rmkuc3Ry''@;'; put 'put ''b2tlY29sb3IpO2JyZWFrO2Nhc2UiPGZpbGwiOmNhc2UiPGZpbGw+IjoiPHY6ZmlsbCI9PUZpWzBdJiYoRmkuY29sb3IyJiYoUGUuY29sb3IyPUZpLmNvbG9yMiksRmkudHlwZSYmKFBlLnR5cGU9RmkudHlwZSkpO2JyZWFrO2Nhc2UiPC9maWxsPiI6Y2FzZSI8bG9jayI6Y2FzZSI8bG9jay8+''@;'; put 'put ''IjpicmVhaztjYXNlIjxzaGFkb3ciOkZpLmNvbG9yJiYoTmUuY29sb3I9RmkuY29sb3IpLEZpLm9uJiYoTmUub249Rmkub24pO2JyZWFrO2Nhc2UiPENsaWVudERhdGEiOkZpLk9iamVjdFR5cGUmJihhZT1GaS5PYmplY3RUeXBlKTticmVhaztjYXNlIjxWaXNpYmxlIjpjYXNlIjxWaXNpYmxl''@;'; put 'put ''Lz4iOmdlPSExO2JyZWFrO2Nhc2UiPEFuY2hvciI6Y2FzZSI8QW5jaG9yPiI6Y2FzZSI8Um93IjpjYXNlIjxSb3c+IjpjYXNlIjxDb2x1bW4iOmNhc2UiPENvbHVtbj4iOmNhc2UiPEZtbGFNYWNybyI6Y2FzZSI8Rm1sYU1hY3JvPiI6Y2FzZSI8Rm1sYUxpbmsiOmNhc2UiPEZtbGFMaW5rPiI6''@;'; put 'put ''Y2FzZSI8Rm1sYVJhbmdlIjpjYXNlIjxGbWxhUmFuZ2U+IjpjYXNlIjxTZWxUeXBlIjpjYXNlIjxTZWxUeXBlPiI6Y2FzZSI8VmFsIjpjYXNlIjxWYWw+IjpjYXNlIjxNaW4iOmNhc2UiPE1pbj4iOmNhc2UiPE1heCI6Y2FzZSI8TWF4PiI6Y2FzZSI8SW5jIjpjYXNlIjxJbmM+IjpjYXNlIjxQ''@;'; put 'put ''YWdlIjpjYXNlIjxQYWdlPiI6Y2FzZSI8Q2hlY2tlZCI6Y2FzZSI8Q2hlY2tlZD4iOmNhc2UiPHRleHRib3giOmNhc2UiPHRleHRib3g+Ijp5ZT1DaSt0ci5sZW5ndGg7YnJlYWs7Y2FzZSI8L0FuY2hvcj4iOnBlPVEuc2xpY2UoeWUsQ2kpLnRyaW0oKTticmVhaztjYXNlIjwvUm93PiI6ZXQ9''@;'; put 'put ''K1Euc2xpY2UoeWUsQ2kpLnRyaW0oKTticmVhaztjYXNlIjwvQ29sdW1uPiI6dXQ9K1Euc2xpY2UoeWUsQ2kpLnRyaW0oKTticmVhaztjYXNlIjwvRm1sYU1hY3JvPiI6RXQ9US5zbGljZSh5ZSxDaSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9GbWxhTGluaz4iOm90PVEuc2xpY2UoeWUsQ2kpLnRy''@;'; put 'put ''aW0oKTticmVhaztjYXNlIjwvRm1sYVJhbmdlPiI6U249US5zbGljZSh5ZSxDaSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9TZWxUeXBlPiI6c3I9US5zbGljZSh5ZSxDaSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9WYWw+IjpCdD0rUS5zbGljZSh5ZSxDaSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9NaW4+''@;'; put 'put ''IjprdD0rUS5zbGljZSh5ZSxDaSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9NYXg+IjpPdD0rUS5zbGljZSh5ZSxDaSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9JbmM+IjpLdD0rUS5zbGljZSh5ZSxDaSkudHJpbSgpO2JyZWFrO2Nhc2UiPC9QYWdlPiI6VG49K1Euc2xpY2UoeWUsQ2kpLnRyaW0oKTti''@;'; put 'put ''cmVhaztjYXNlIjwvQ2hlY2tlZD4iOmlyPStRLnNsaWNlKHllLENpKS50cmltKCk7YnJlYWs7Y2FzZSI8L3RleHRib3g+IjpidD1RLnNsaWNlKHllLENpKS50cmltKCk7YnJlYWs7Y2FzZSI8TW92ZVdpdGhDZWxscy8+IjpjYXNlIjxNb3ZlV2l0aENlbGxzPiI6Sm49ITA7YnJlYWs7Y2FzZSI8''@;'; put 'put ''U2l6ZVdpdGhDZWxscy8+IjpjYXNlIjxTaXplV2l0aENlbGxzPiI6Vm49ITB9cmV0dXJuIiJ9KSxhZSl7Y2FzZSJOb3RlIjp2YXIgdXI9anUuc2hlZXRfZ2V0X2NlbGwoUixldD49MCYmdXQ+PTA/WGkoe3I6ZXQsYzp1dH0pOmtbR10ucmVmKTt1ci5jJiYodXIuYy5oaWRkZW49Z2UscGUmJih1''@;'; put 'put ''ci5jLnJhd2FuY2hvcj1wZSxrayhwZSx1ci5jKSxKVih1ci5jWyIhcG9zIl0sMiohIUpuKyEhVm4sUikpLFBlLmNvbG9yMSYmKHVyLmMuZmlsbD1QZSksTmUuY29sb3ImJih1ci5jLnNoYWRvdz1OZSksWWUuY29sb3ImJih1ci5jLnN0cm9rZT1ZZSkpLCsrRzticmVhaztjYXNlIkJ1dHRvbiI6''@;'; put 'put ''Y2FzZSJHQm94IjpjYXNlIkRyb3AiOmNhc2UiTGFiZWwiOmNhc2UiQ2hlY2tib3giOmNhc2UiU2Nyb2xsIjpjYXNlIkxpc3QiOmNhc2UiUmFkaW8iOmNhc2UiU3BpbiI6Y2FzZSJFZGl0IjpSWyIhY29udHJvbHMiXXx8KFJbIiFjb250cm9scyJdPVtdKTt2YXIgZ3I9eyIhdHlwZSI6YWV9O3Bl''@;'; put 'put ''JiZrayhwZSxnciksRXQmJihnci5tYWNybz1FdC5yZXBsYWNlKCJbMF0hIiwiIikpLG90JiYoZ3IubGluaz1vdCksIlNjcm9sbCI9PWFlfHwiU3BpbiI9PWFlPyhudWxsPT1CdCYmKEJ0PTApLG51bGw9PWt0JiYoa3Q9MCksbnVsbD09T3QmJihPdD0zZTQpLG51bGw9PUt0JiYoS3Q9MSksIlNj''@;'; put 'put ''cm9sbCI9PWFlJiZudWxsPT1UbiYmKFRuPTEwKSk6IlJhZGlvIj09YWV8fCJDaGVja2JveCI9PWFlPyhudWxsPT1pciYmKGlyPTApLEJ0PWlyKTooIkxpc3QiPT1hZXx8IkRyb3AiPT1hZSkmJihudWxsIT1TbiYmKGdyLnJlZj1TbiksbnVsbD09c3ImJihzcj0iU2luZ2xlIiksIkxpc3QiPT1h''@;'; put 'put ''ZSYmKGdyLnNlbD1zcikpLG51bGwhPUJ0JiYoZ3IudmFsPUJ0KSxudWxsIT1rdCYmKGdyLm1pbj1rdCksbnVsbCE9T3QmJihnci5tYXg9T3QpLG51bGwhPUt0JiYoZ3Iuc3RlcD1LdCksbnVsbCE9VG4mJihnci5wYWdlPVRuKSxidCYmKGdyLnQ9YnQucmVwbGFjZSgvXHMqPFtcc1xTXSo/Plxz''@;'; put 'put ''Ki9nLCIiKSksUlsiIWNvbnRyb2xzIl0ucHVzaChncil9fSl9KGdhKFBlKSxTLHBlfHxbXSksU1siIUxEUCJdPXllLFNbIiFjdHJsaWQiXSYmU1siIWN0cmxpZCJdLmZvckVhY2goZnVuY3Rpb24oTmUpe2lmKE5lLnJlbCYmTmUucmVsLlRhcmdldCl7dmFyIFllPXBuKE5lLnJlbC5UYXJnZXQs''@;'; put 'put ''Ryk7TmUucGF0aD1ZZSxkZWxldGUgTmUucmVsfX0pfX0odXQsMCxTLFIsMCwwLDAsRXQpLHV0fWNhdGNoKG90KXtpZih5ZS5XVEYpdGhyb3cgb3R9fWZ1bmN0aW9uIFRjKFMpe3JldHVybiIvIj09Uy5jaGFyQXQoMCk/Uy5zbGljZSgxKTpTfXZhciBWYz1mdW5jdGlvbigpe307ZnVuY3Rpb24g''@;'; put 'put ''SjMoUyxSKXtpZihrYj1bXSxESShSPVJ8fHt9KSxuaShTLCJNRVRBLUlORi9tYW5pZmVzdC54bWwiKXx8bmkoUywib2JqZWN0ZGF0YS54bWwiKSlyZXR1cm4gZnVuY3Rpb24gQ28oUyxSKXtSPVJ8fHt9LG5pKFMsIk1FVEEtSU5GL21hbmlmZXN0LnhtbCIpJiZmdW5jdGlvbiBWYShTLFIpe2Zv''@;'; put 'put ''cih2YXIgRyxRLGs9WlMoUyk7Rz1VNS5leGVjKGspOylzd2l0Y2goR1szXSl7Y2FzZSJtYW5pZmVzdCI6YnJlYWs7Y2FzZSJmaWxlLWVudHJ5IjppZigiLyI9PShRPXByKEdbMF0sITEpKS5wYXRoJiZRLnR5cGUhPT1hbCl0aHJvdyBuZXcgRXJyb3IoIlRoaXMgT3BlbkRvY3VtZW50IGlzIG5v''@;'; put 'put ''dCBhIHNwcmVhZHNoZWV0Iik7YnJlYWs7Y2FzZSJlbmNyeXB0aW9uLWRhdGEiOmNhc2UiYWxnb3JpdGhtIjpjYXNlInN0YXJ0LWtleS1nZW5lcmF0aW9uIjpjYXNlImtleS1kZXJpdmF0aW9uIjp0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIE9EUyBFbmNyeXB0aW9uIik7ZGVmYXVsdDpp''@;'; put 'put ''ZihSJiZSLldURil0aHJvdyBHfX0oVHQoUywiTUVUQS1JTkYvbWFuaWZlc3QueG1sIiksUik7dmFyIGs9cnIoUywiY29udGVudC54bWwiKTtpZighayl0aHJvdyBuZXcgRXJyb3IoIk1pc3NpbmcgY29udGVudC54bWwgaW4gT0RTIC8gVU9GIGZpbGUiKTt2YXIgRz1xUyhnYShrKSxSKTtyZXR1''@;'; put 'put ''cm4gbmkoUywibWV0YS54bWwiKSYmKEcuUHJvcHM9ZHYoVHQoUywibWV0YS54bWwiKSkpLEd9KFMsUik7aWYobmkoUywiSW5kZXgvRG9jdW1lbnQuaXdhIikpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBOVU1CRVJTIGZpbGUiKTt2YXIgYWUsZ2Usaz1mdW5jdGlvbiB4dChTKXtmb3Io''@;'; put 'put ''dmFyIFI9Uy5GdWxsUGF0aHN8fFJlKFMuZmlsZXMpLGs9W10sRz0wO0c8Ui5sZW5ndGg7KytHKSIvIiE9UltHXS5zbGljZSgtMSkmJmsucHVzaChSW0ddKTtyZXR1cm4gay5zb3J0KCl9KFMpLEc9ZnVuY3Rpb24gSHcoUyl7dmFyIFI9e3dvcmtib29rczpbXSxzaGVldHM6W10sY2hhcnRzOltd''@;'; put 'put ''LGRpYWxvZ3M6W10sbWFjcm9zOltdLHJlbHM6W10sc3RyczpbXSxjb21tZW50czpbXSxsaW5rczpbXSxjb3JlcHJvcHM6W10sZXh0cHJvcHM6W10sY3VzdHByb3BzOltdLHRoZW1lczpbXSxzdHlsZXM6W10sY2FsY2NoYWluczpbXSx2YmE6W10sZHJhd2luZ3M6W10scGl2b3RzOltdLHBpdm90''@;'; put 'put ''Y2FjaGVzOltdLHBpdm90cmVjb3JkczpbXSxkYXRhbW9kZWxzOltdLGNoYXJ0b2JqczpbXSxjaGFydHN0eWxlczpbXSxjaGFydGNvbG9yczpbXSxjaGFydGV4czpbXSx0YWJsZXM6W10sY29ubnM6W10sY3RybHByb3BzOltdLGN1c3RvbXhtbHByb3BzOltdLFRPRE86W10seG1sbnM6IiJ9O2lm''@;'; put 'put ''KCFTfHwhUy5tYXRjaClyZXR1cm4gUjt2YXIgaz17fTtpZigoUy5tYXRjaChlbil8fFtdKS5mb3JFYWNoKGZ1bmN0aW9uKEcpe3ZhciBRPXByKEcpO3N3aXRjaChRWzBdLnJlcGxhY2UoaG8sIjwiKSl7Y2FzZSI8P3htbCI6YnJlYWs7Y2FzZSI8VHlwZXMiOlIueG1sbnM9UVsieG1sbnMiKyhR''@;'; put 'put ''WzBdLm1hdGNoKC88KFx3Kyk6Lyl8fFsiIiwiIl0pWzFdXTticmVhaztjYXNlIjxEZWZhdWx0IjprW1EuRXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCldPVEuQ29udGVudFR5cGU7YnJlYWs7Y2FzZSI8T3ZlcnJpZGUiOnZvaWQgMCE9PVJbZzRbUS5Db250ZW50VHlwZV1dJiZSW2c0W1EuQ29udGVu''@;'; put 'put ''dFR5cGVdXS5wdXNoKFEuUGFydE5hbWUpfX0pLFIueG1sbnMhPT1HaS5DVCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gTmFtZXNwYWNlOiAiK1IueG1sbnMpO3JldHVybiBSLmNhbGNjaGFpbj1SLmNhbGNjaGFpbnMubGVuZ3RoPjA/Ui5jYWxjY2hhaW5zWzBdOiIiLFIuc3N0PVIuc3Rycy5s''@;'; put 'put ''ZW5ndGg+MD9SLnN0cnNbMF06IiIsUi5zdHlsZT1SLnN0eWxlcy5sZW5ndGg+MD9SLnN0eWxlc1swXToiIixSLmNvbm49Ui5jb25ucy5sZW5ndGg+MD9SLmNvbm5zWzBdOiIiLFIuZGVmYXVsdHM9ayxkZWxldGUgUi5jYWxjY2hhaW5zLFJ9KHJyKFMsIltDb250ZW50X1R5cGVzXS54bWwiKSks''@;'; put 'put ''UT0hMTtpZigwPT09Ry53b3JrYm9va3MubGVuZ3RoJiZUdChTLGdlPSJ4bC93b3JrYm9vay54bWwiLCEwKSYmRy53b3JrYm9va3MucHVzaChnZSksMD09PUcud29ya2Jvb2tzLmxlbmd0aCl7aWYoIVR0KFMsZ2U9InhsL3dvcmtib29rLmJpbiIsITApKXRocm93IG5ldyBFcnJvcigiQ291bGQg''@;'; put 'put ''bm90IGZpbmQgd29ya2Jvb2siKTtHLndvcmtib29rcy5wdXNoKGdlKSxRPSEwfSJiaW4iPT1HLndvcmtib29rc1swXS5zbGljZSgtMykmJihRPSEwKTt2YXIgcGU9e30seWU9e307aWYoIVIuYm9va1NoZWV0cyYmIVIuYm9va1Byb3BzKXtpZihhOD1bXSxHLnNzdCl0cnl7YTg9ZnVuY3Rpb24g''@;'; put 'put ''cHooUyxSLGspe3JldHVybiIuYmluIj09PVIuc2xpY2UoLTQpP2Z1bmN0aW9uIEF2KFMsUil7dmFyIGs9W10sRz0hMTtyZXR1cm4gY3IoUyxmdW5jdGlvbihhZSxnZSxwZSl7c3dpdGNoKHBlKXtjYXNlIDE1OTprLkNvdW50PWFlWzBdLGsuVW5pcXVlPWFlWzFdO2JyZWFrO2Nhc2UgMTk6ay5w''@;'; put 'put ''dXNoKGFlKTticmVhaztjYXNlIDE2MDpyZXR1cm4hMDtjYXNlIDM1Okc9ITA7YnJlYWs7Y2FzZSAzNjpHPSExO2JyZWFrO2RlZmF1bHQ6aWYoZ2UuaW5kZXhPZigiQmVnaW4iKT4wfHxnZS5pbmRleE9mKCJFbmQiKSwhR3x8Ui5XVEYpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29y''@;'; put 'put ''ZCAiK3BlKyIgIitnZSl9fSksa30oUyxrKTpmdW5jdGlvbiBsMihTLFIpe3ZhciBrPVtdLEc9IiI7aWYoIVMpcmV0dXJuIGs7dmFyIFE9Uy5tYXRjaChRQSk7aWYoUSl7Rz1RWzJdLnJlcGxhY2UoZWssIiIpLnNwbGl0KCQ2KTtmb3IodmFyIGFlPTA7YWUhPUcubGVuZ3RoOysrYWUpe3ZhciBn''@;'; put 'put ''ZT1jQyhHW2FlXS50cmltKCksUik7bnVsbCE9Z2UmJihrW2subGVuZ3RoXT1nZSl9UT1wcihRWzFdKSxrLkNvdW50PVEuY291bnQsay5VbmlxdWU9US51bmlxdWVDb3VudH1yZXR1cm4ga30oUyxrKX0oVHQoUyxUYyhHLnNzdCkpLEcuc3N0LFIpfWNhdGNoKHZyKXtpZihSLldURil0aHJvdyB2''@;'; put 'put ''cn1SLmNlbGxTdHlsZXMmJkcudGhlbWVzLmxlbmd0aCYmKHBlPWZ1bmN0aW9uIGZ6KFMsUixrKXtyZXR1cm4geEMoUyxrKX0ocnIoUyxHLnRoZW1lc1swXS5yZXBsYWNlKC9eXC8vLCIiKSwhMCl8fCIiLDAsUikpLEcuc3R5bGUmJih5ZT1mdW5jdGlvbiBoeihTLFIsayxHKXtyZXR1cm4iLmJp''@;'; put 'put ''biI9PT1SLnNsaWNlKC00KT9mdW5jdGlvbiB2ayhTLFIsayl7dmFyIEc9e051bWJlckZtdDpbXX07Zm9yKHZhciBRIGluIEEuX3RhYmxlKUcuTnVtYmVyRm10W1FdPUEuX3RhYmxlW1FdO0cuQ2VsbFhmPVtdLEcuRm9udHM9W10sRy5GaWxscz1bXSxHLkJvcmRlcnM9W107dmFyIGFlPVtdLGdl''@;'; put 'put ''PSExO3JldHVybiBjcihTLGZ1bmN0aW9uKHllLFBlLE5lKXtzd2l0Y2goTmUpe2Nhc2UgNDQ6Ry5OdW1iZXJGbXRbeWVbMF1dPXllWzFdLEEubG9hZCh5ZVsxXSx5ZVswXSk7YnJlYWs7Y2FzZSA0MzpCdih5ZS5jb2xvcixSKSxHLkZvbnRzLnB1c2goeWUpO2JyZWFrO2Nhc2UgMTAyNTpjYXNl''@;'; put 'put ''IDQ4OmNhc2UgNTA3OmNhc2UgNTcyOmNhc2UgNDc1OmNhc2UgMTE3MTpjYXNlIDIxMDI6Y2FzZSAxMTMwOmNhc2UgNTEyOmNhc2UgMjA5NTpjYXNlIDMwNzI6YnJlYWs7Y2FzZSA0NTp5ZS5mZ0NvbG9yJiZCdih5ZS5mZ0NvbG9yLFIpLHllLmJnQ29sb3ImJkJ2KHllLmJnQ29sb3IsUiksRy5G''@;'; put 'put ''aWxscy5wdXNoKHllKTticmVhaztjYXNlIDQ2OlsidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0IiwiZGlhZyJdLmZvckVhY2goZnVuY3Rpb24oWWUpe3llW1llXSYmeWVbWWVdLmNvbG9yJiZCdih5ZVtZZV0uY29sb3IsUil9KSxHLkJvcmRlcnMucHVzaCh5ZSk7YnJlYWs7Y2FzZSA0Nzoi''@;'; put 'put ''QnJ0QmVnaW5DZWxsWEZzIj09YWVbYWUubGVuZ3RoLTFdJiZHLkNlbGxYZi5wdXNoKHllKTticmVhaztjYXNlIDM1OmdlPSEwO2JyZWFrO2Nhc2UgMzY6Z2U9ITE7YnJlYWs7Y2FzZSAzNzphZS5wdXNoKFBlKSxnZT0hMDticmVhaztjYXNlIDM4OmFlLnBvcCgpLGdlPSExO2JyZWFrO2RlZmF1''@;'; put 'put ''bHQ6aWYoKFBlfHwiIikuaW5kZXhPZigiQmVnaW4iKT4wKWFlLnB1c2goUGUpO2Vsc2UgaWYoKFBlfHwiIikuaW5kZXhPZigiRW5kIik+MClhZS5wb3AoKTtlbHNlIGlmKCFnZXx8ay5XVEYmJiJCcnRBQ0JlZ2luIiE9YWVbYWUubGVuZ3RoLTFdKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3Rl''@;'; put 'put ''ZCByZWNvcmQgIitOZSsiICIrUGUpfX0pLChHLkZvbnRzfHxbXSlbMF0mJkE0KEcuRm9udHNbMF0pLEd9KFMsayxHKTpoayhTLGssRyl9KFR0KFMsVGMoRy5zdHlsZSkpLEcuc3R5bGUscGUsUikpfXZhciBQZT1HLmxpbmtzLm1hcChmdW5jdGlvbih2cil7dHJ5e3ZhciBIbj1oZihycihTLE5y''@;'; put 'put ''KFRjKHZyKSkpLHZyKTtyZXR1cm4gZnVuY3Rpb24gbXooUyxSLGssRyl7cmV0dXJuIi5iaW4iPT09ay5zbGljZSgtNCk/ZnVuY3Rpb24gSWsoUyxSLGssRyl7aWYoIVMpcmV0dXJuIFM7dmFyIFE9R3x8e30sYWU9ITE7Y3IoUyxmdW5jdGlvbih5ZSxQZSxOZSl7c3dpdGNoKE5lKXtjYXNlIDM1''@;'; put 'put ''OTpjYXNlIDM2MzpjYXNlIDM2NDpjYXNlIDM2NjpjYXNlIDM2NzpjYXNlIDM2ODpjYXNlIDM2OTpjYXNlIDM3MDpjYXNlIDM3MTpjYXNlIDQ3MjpjYXNlIDU3NzpjYXNlIDU3ODpjYXNlIDU3OTpjYXNlIDU4MDpjYXNlIDU4MTpjYXNlIDU4MjpjYXNlIDU4MzpjYXNlIDU4NDpjYXNlIDU4NTpj''@;'; put 'put ''YXNlIDU4NjpjYXNlIDU4NzpicmVhaztjYXNlIDM1OmFlPSEwO2JyZWFrO2Nhc2UgMzY6YWU9ITE7YnJlYWs7ZGVmYXVsdDppZighKChQZXx8IiIpLmluZGV4T2YoIkJlZ2luIik+MCkmJiEoKFBlfHwiIikuaW5kZXhPZigiRW5kIik+MCkmJighYWV8fFEuV1RGKSl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''IlVuZXhwZWN0ZWQgcmVjb3JkICIrTmUudG9TdHJpbmcoMTYpKyIgIitQZSl9fSxRKX0oUywwLDAsRyk6ZnVuY3Rpb24gRGsoUyxSLGssRyl7dmFyIFE9R3x8e30sYWU9e1NoZWV0TmFtZXM6W10sU2hlZXRzOnt9fSxwZT0hMSx5ZT17fSxQZT0tMSxOZT0tMSxZZT17czp7cjowLGM6MH0sZTp7''@;'; put 'put ''cjotMSxjOi0xfX0sZXQ9e30sdXQ9MDtyZXR1cm4oU3x8IiIpLnJlcGxhY2UoZW4sZnVuY3Rpb24oRXQsb3Qpe3ZhciBidD1wcihFdCk7c3dpdGNoKFduKGJ0WzBdKSl7Y2FzZSI8P3htbCI6Y2FzZSI8ZXh0ZXJuYWxMaW5rIjpjYXNlIjwvZXh0ZXJuYWxMaW5rPiI6Y2FzZSI8L2V4dGVybmFs''@;'; put 'put ''Qm9vaz4iOmNhc2UiPHNoZWV0TmFtZXMiOmNhc2UiPHNoZWV0TmFtZXM+IjpjYXNlIjwvc2hlZXROYW1lcz4iOmNhc2UiPHNoZWV0RGF0YVNldD4iOmNhc2UiPHNoZWV0RGF0YVNldC8+IjpjYXNlIjwvc2hlZXREYXRhU2V0PiI6Y2FzZSI8L3Jvdz4iOmJyZWFrO2Nhc2UiPGV4dGVybmFsQm9v''@;'; put 'put ''ayI6Y2FzZSI8ZXh0ZXJuYWxCb29rPiI6YWUuVGFyZ2V0PVJbIiFpZCJdW2J0LmlkXS5UYXJnZXQsYWUuTWlzc2luZz1SWyIhaWQiXVtidC5pZF0uVHlwZT09cW8uWE1JU1M7YnJlYWs7Y2FzZSI8c2hlZXROYW1lIjphZS5TaGVldE5hbWVzLnB1c2goSnIoZ2EoYnQudmFsKSkpO2JyZWFrO2Nh''@;'; put 'put ''c2UiPHNoZWV0RGF0YSI6eWU9e30sYWUuU2hlZXRzW2FlLlNoZWV0TmFtZXNbYnQuc2hlZXRJZF1dPWVpKGJ0LnJlZnJlc2hFcnJvcnx8IjAiKT9udWxsOnllO2JyZWFrO2Nhc2UiPC9zaGVldERhdGE+IjpZZS5lLmM+PTAmJih5ZVsiIXJlZiJdPW9vKFllKSk7YnJlYWs7Y2FzZSI8cm93Ijpj''@;'; put 'put ''YXNlIjxyb3c+IjpidC5yP1BlPXBhcnNlSW50KGJ0LnIsMTApLTE6UGUrKyxOZT0tMTticmVhaztjYXNlIjxjZWxsIjpjYXNlIjxjZWxsPiI6YnQucj9OZT1OYShidC5yKS5jOisrTmUsZXQudD1idC50fHwibiIsInN0ciI9PWV0LnQmJihldC50PSJzIik7YnJlYWs7Y2FzZSI8L2NlbGw+IjpZ''@;'; put 'put ''ZS5lLnI8UGUmJihZZS5lLnI9UGUpLFllLmUuYzxOZSYmKFllLmUuYz1OZSkseWVbWGkoe3I6UGUsYzpOZX0pXT1ldCxldD17fTticmVhaztjYXNlIjx2IjpjYXNlIjx2PiI6dXQ9RXQubGVuZ3RoK290O2JyZWFrO2Nhc2UiPC92PiI6dmFyIEJ0PUpyKFMuc2xpY2UodXQsb3QpKTtldC52PSJu''@;'; put 'put ''Ij09ZXQudD9wYXJzZUZsb2F0KEJ0KTpCdDticmVhaztjYXNlIjx2Lz4iOmV0LnY9IiI7YnJlYWs7Y2FzZSI8ZGVmaW5lZE5hbWVzPiI6cGU9ITA7YnJlYWs7Y2FzZSI8L2RlZmluZWROYW1lcz4iOnBlPSExO2JyZWFrO2RlZmF1bHQ6aWYoIXBlJiZRLldURil0aHJvdyJ1bnJlY29nbml6ZWQg''@;'; put 'put ''IitidFswXSsiIGluIGV4dGVybmFsIGxpbmsifX0pLGFlfShTLFIsMCxHKX0oVHQoUyxUYyh2cikpLEhuLHZyLFIpfWNhdGNoe319KSxOZT1mdW5jdGlvbiBUOChTLFIsayl7cmV0dXJuIi5iaW4iPT09Ui5zbGljZSgtNCk/ZnVuY3Rpb24gRW5lKFMsUil7dmFyIGs9e0FwcFZlcnNpb246e30s''@;'; put 'put ''V0JQcm9wczp7fSxXQlZpZXc6W10sU2hlZXRzOltdLENhbGNQcjp7fSx4bWxuczoiIn0sRz1bXSxRPSExO1J8fChSPXt9KSxSLmJpZmY9MTI7dmFyIGFlPVtdLGdlPVtbXV07cmV0dXJuIGdlLlNoZWV0TmFtZXM9W10sZ2UuWFRJPVtdLEk4WzE2XT17bjoiQnJ0RlJUQXJjaElEJCIsZjpxM30s''@;'; put 'put ''Y3IoUyxmdW5jdGlvbih5ZSxQZSxOZSl7c3dpdGNoKE5lKXtjYXNlIDE1NjpnZS5TaGVldE5hbWVzLnB1c2goeWUubmFtZSksay5TaGVldHMucHVzaCh5ZSk7YnJlYWs7Y2FzZSAxNTM6ay5XQlByb3BzPXllO2JyZWFrO2Nhc2UgMzk6bnVsbCE9eWUuU2hlZXQmJihSLlNJRD15ZS5TaGVldCks''@;'; put 'put ''eWUuUmVmPWEwKHllLlB0ZyxudWxsLG51bGwsZ2UsUiksZGVsZXRlIFIuU0lELGRlbGV0ZSB5ZS5QdGcsYWUucHVzaCh5ZSk7YnJlYWs7Y2FzZSAxMDM2OmNhc2UgMzYxOmNhc2UgMjA3MTpjYXNlIDE1ODpjYXNlIDE0MzpjYXNlIDY2NDpjYXNlIDM1MzpjYXNlIDMwNzI6Y2FzZSAzMDczOmNh''@;'; put 'put ''c2UgNTM0OmNhc2UgNjc3OmNhc2UgMTU3OmNhc2UgNjEwOmNhc2UgMjA1MDpjYXNlIDE1NTpjYXNlIDU0ODpjYXNlIDY3NjpjYXNlIDEyODpjYXNlIDY2NTpjYXNlIDIxMjg6Y2FzZSAyMTI1OmNhc2UgNTQ5OmNhc2UgMjA1MzpjYXNlIDU5NjpjYXNlIDIwNzY6Y2FzZSAyMDc1OmNhc2UgMjA4''@;'; put 'put ''MjpjYXNlIDM5NzpjYXNlIDE1NDpjYXNlIDExMTc6Y2FzZSA1NTM6Y2FzZSAyMDkxOmNhc2UgMTY6YnJlYWs7Y2FzZSAzNTc6Y2FzZSAzNTg6Y2FzZSAzNTU6Y2FzZSA2Njc6Z2VbMF0ubGVuZ3RoP2dlLnB1c2goW05lLHllXSk6Z2VbMF09W05lLHllXSxnZVtnZS5sZW5ndGgtMV0uWFRJPVtd''@;'; put 'put ''O2JyZWFrO2Nhc2UgMzYyOjA9PT1nZS5sZW5ndGgmJihnZVswXT1bXSxnZVswXS5YVEk9W10pLGdlW2dlLmxlbmd0aC0xXS5YVEk9Z2VbZ2UubGVuZ3RoLTFdLlhUSS5jb25jYXQoeWUpLGdlLlhUST1nZS5YVEkuY29uY2F0KHllKTticmVhaztjYXNlIDM1OmNhc2UgMzc6Ry5wdXNoKFBlKSxR''@;'; put 'put ''PSEwO2JyZWFrO2Nhc2UgMzY6Y2FzZSAzODpHLnBvcCgpLFE9ITE7YnJlYWs7ZGVmYXVsdDppZighKChQZXx8IiIpLmluZGV4T2YoIkJlZ2luIik+MCkmJiEoKFBlfHwiIikuaW5kZXhPZigiRW5kIik+MCkmJighUXx8Ui5XVEYmJiJCcnRBQ0JlZ2luIiE9R1tHLmxlbmd0aC0xXSYmIkJydEZS''@;'; put 'put ''VEJlZ2luIiE9R1tHLmxlbmd0aC0xXSkpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK05lKyIgIitQZSl9fSxSKSxPUyhrKSxrLk5hbWVzPWFlLGsuc3VwYm9va3M9Z2Usa30oUyxrKTpmdW5jdGlvbiBGUyhTLFIpe2lmKCFTKXRocm93IG5ldyBFcnJvcigiQ291bGQgbm90''@;'; put 'put ''IGZpbmQgZmlsZSIpO3ZhciBrPXtBcHBWZXJzaW9uOnt9LFdCUHJvcHM6e30sV0JWaWV3OltdLFNoZWV0czpbXSxDYWxjUHI6e30sTmFtZXM6W10sRXh0ZXJuOltdLHhtbG5zOiIifSxHPSExLFE9InhtbG5zIixhZT17fSxnZT0wO2lmKFMucmVwbGFjZShlbixmdW5jdGlvbih5ZSxQZSl7dmFy''@;'; put 'put ''IE5lPXByKHllKTtzd2l0Y2goV24oTmVbMF0pKXtjYXNlIjw/eG1sIjpjYXNlIjwvd29ya2Jvb2s+IjpjYXNlIjxmaWxlVmVyc2lvbi8+IjpjYXNlIjwvZmlsZVZlcnNpb24+IjpjYXNlIjxmaWxlU2hhcmluZy8+IjpjYXNlIjwvd29ya2Jvb2tQcj4iOmNhc2UiPHdvcmtib29rUHJvdGVjdGlv''@;'; put 'put ''bi8+IjpjYXNlIjxib29rVmlld3MiOmNhc2UiPGJvb2tWaWV3cz4iOmNhc2UiPC9ib29rVmlld3M+IjpjYXNlIjwvd29ya2Jvb2tWaWV3PiI6Y2FzZSI8c2hlZXRzIjpjYXNlIjxzaGVldHM+IjpjYXNlIjwvc2hlZXRzPiI6Y2FzZSI8L3NoZWV0PiI6Y2FzZSI8ZnVuY3Rpb25Hcm91cHMiOmNh''@;'; put 'put ''c2UiPGZ1bmN0aW9uR3JvdXBzLz4iOmNhc2UiPGZ1bmN0aW9uR3JvdXAiOmNhc2UiPGV4dGVybmFsUmVmZXJlbmNlcyI6Y2FzZSI8L2V4dGVybmFsUmVmZXJlbmNlcz4iOmNhc2UiPGV4dGVybmFsUmVmZXJlbmNlcz4iOmNhc2UiPGRlZmluZWROYW1lcy8+IjpjYXNlIjxkZWZpbmVkTmFtZS8+''@;'; put 'put ''IjpjYXNlIjwvY2FsY1ByPiI6Y2FzZSI8b2xlU2l6ZSI6Y2FzZSI8Y3VzdG9tV29ya2Jvb2tWaWV3cz4iOmNhc2UiPC9jdXN0b21Xb3JrYm9va1ZpZXdzPiI6Y2FzZSI8Y3VzdG9tV29ya2Jvb2tWaWV3cyI6Y2FzZSI8Y3VzdG9tV29ya2Jvb2tWaWV3IjpjYXNlIjwvY3VzdG9tV29ya2Jvb2tW''@;'; put 'put ''aWV3PiI6Y2FzZSI8cGl2b3RDYWNoZXM+IjpjYXNlIjwvcGl2b3RDYWNoZXM+IjpjYXNlIjxwaXZvdENhY2hlcyI6Y2FzZSI8cGl2b3RDYWNoZSI6Y2FzZSI8c21hcnRUYWdQciI6Y2FzZSI8c21hcnRUYWdQci8+IjpjYXNlIjxzbWFydFRhZ1R5cGVzIjpjYXNlIjxzbWFydFRhZ1R5cGVzPiI6''@;'; put 'put ''Y2FzZSI8L3NtYXJ0VGFnVHlwZXM+IjpjYXNlIjxzbWFydFRhZ1R5cGUiOmNhc2UiPHdlYlB1Ymxpc2hpbmciOmNhc2UiPHdlYlB1Ymxpc2hpbmcvPiI6Y2FzZSI8ZmlsZVJlY292ZXJ5UHIiOmNhc2UiPGZpbGVSZWNvdmVyeVByLz4iOmNhc2UiPHdlYlB1Ymxpc2hPYmplY3RzPiI6Y2FzZSI8''@;'; put 'put ''d2ViUHVibGlzaE9iamVjdHMiOmNhc2UiPC93ZWJQdWJsaXNoT2JqZWN0cz4iOmNhc2UiPHdlYlB1Ymxpc2hPYmplY3QiOmNhc2UiPGV4dExzdCI6Y2FzZSI8ZXh0THN0PiI6Y2FzZSI8L2V4dExzdD4iOmNhc2UiPGV4dExzdC8+IjpjYXNlIjxBcmNoSUQiOmNhc2UiPHJldmlzaW9uUHRyIjpi''@;'; put 'put ''cmVhaztjYXNlIjx3b3JrYm9vayI6eWUubWF0Y2goTTgpJiYoUT0ieG1sbnMiK3llLm1hdGNoKC88KFx3Kyk6LylbMV0pLGsueG1sbnM9TmVbUV07YnJlYWs7Y2FzZSI8ZmlsZVZlcnNpb24iOmRlbGV0ZSBOZVswXSxrLkFwcFZlcnNpb249TmU7YnJlYWs7Y2FzZSI8ZmlsZVNoYXJpbmciOmsu''@;'; put 'put ''TW9kaWZ5PXt1c2VyOk5lLnVzZXJOYW1lLHdhcm46ZWkoTmUucmVhZE9ubHlSZWNvbW1lbmRlZHx8ImZhbHNlIil9LChOZS5hbGdvcml0aG1OYW1lfHxOZS5oYXNoVmFsdWV8fE5lLnNhbHRWYWx1ZXx8TmUuc3BpbkNvdW50KSYmKGsuTW9kaWZ5LmVuY3J5cHRpb249e2FsZ286TmUuYWxnb3Jp''@;'; put 'put ''dGhtTmFtZSxoYXNoOk5lLmhhc2hWYWx1ZSxzYWx0Ok5lLnNhbHRWYWx1ZSxzcGluOitOZS5zcGluQ291bnR8fDFlNX0pO2JyZWFrO2Nhc2UiPHdvcmtib29rUHIiOmNhc2UiPHdvcmtib29rUHIvPiI6ZmIuZm9yRWFjaChmdW5jdGlvbihldCl7aWYobnVsbCE9TmVbZXRbMF1dKXN3aXRjaChl''@;'; put 'put ''dFsyXSl7Y2FzZSJib29sIjprLldCUHJvcHNbZXRbMF1dPWVpKE5lW2V0WzBdXSk7YnJlYWs7Y2FzZSJpbnQiOmsuV0JQcm9wc1tldFswXV09cGFyc2VJbnQoTmVbZXRbMF1dLDEwKTticmVhaztkZWZhdWx0OmsuV0JQcm9wc1tldFswXV09TmVbZXRbMF1dfX0pLE5lLmNvZGVOYW1lJiYoay5X''@;'; put 'put ''QlByb3BzLkNvZGVOYW1lPWdhKE5lLmNvZGVOYW1lKSk7YnJlYWs7Y2FzZSI8d29ya2Jvb2tQcm90ZWN0aW9uIjp2YXIgWWU9ay5Qcm90ZWN0aW9ufHx7fTtZZS5sb2NrU3RydWN0dXJlPWVpKE5lLmxvY2tTdHJ1Y3R1cmV8fCJmYWxzZSIpLFllLmxvY2tXaW5kb3dzPWVpKE5lLmxvY2tXaW5k''@;'; put 'put ''b3dzfHwiZmFsc2UiKSxOZS53b3JrYm9va0FsZ29yaXRobU5hbWUmJihZZS5lbmNyeXB0aW9uPXthbGdvOk5lLndvcmtib29rQWxnb3JpdGhtTmFtZSxoYXNoOk5lLndvcmtib29rSGFzaFZhbHVlLHNhbHQ6TmUud29ya2Jvb2tTYWx0VmFsdWUsc3BpbjorTmUud29ya2Jvb2tTcGluQ291bnR8''@;'; put 'put ''fDFlNX0pLGsuUHJvdGVjdGlvbj1ZZTticmVhaztjYXNlIjx3b3JrYm9va1ZpZXciOmNhc2UiPHdvcmtib29rVmlldy8+IjpkZWxldGUgTmVbMF0say5XQlZpZXcucHVzaChOZSk7YnJlYWs7Y2FzZSI8c2hlZXQiOnN3aXRjaChOZS5zdGF0ZSl7Y2FzZSJoaWRkZW4iOk5lLkhpZGRlbj0xO2Jy''@;'; put 'put ''ZWFrO2Nhc2UidmVyeUhpZGRlbiI6TmUuSGlkZGVuPTI7YnJlYWs7ZGVmYXVsdDpOZS5IaWRkZW49MH1kZWxldGUgTmUuc3RhdGUsTmUubmFtZT1KcihnYShOZS5uYW1lKSksZGVsZXRlIE5lWzBdLGsuU2hlZXRzLnB1c2goTmUpO2JyZWFrO2Nhc2UiPGV4dGVybmFsUmVmZXJlbmNlIjprLkV4''@;'; put 'put ''dGVybi5wdXNoKE5lLmlkKTticmVhaztjYXNlIjxkZWZpbmVkTmFtZXM+IjpjYXNlIjxkZWZpbmVkTmFtZXMiOmNhc2UiPGV4dCI6Y2FzZSI8QWx0ZXJuYXRlQ29udGVudCI6Y2FzZSI8QWx0ZXJuYXRlQ29udGVudD4iOkc9ITA7YnJlYWs7Y2FzZSI8L2RlZmluZWROYW1lcz4iOmNhc2UiPC9l''@;'; put 'put ''eHQ+IjpjYXNlIjwvQWx0ZXJuYXRlQ29udGVudD4iOkc9ITE7YnJlYWs7Y2FzZSI8ZGVmaW5lZE5hbWUiOihhZT17fSkuTmFtZT1nYShOZS5uYW1lKSxOZS5jb21tZW50JiYoYWUuQ29tbWVudD1OZS5jb21tZW50KSxOZS5sb2NhbFNoZWV0SWQmJihhZS5TaGVldD0rTmUubG9jYWxTaGVldElk''@;'; put 'put ''KSxlaShOZS5oaWRkZW58fCIwIikmJihhZS5IaWRkZW49ITApLGdlPVBlK3llLmxlbmd0aDticmVhaztjYXNlIjwvZGVmaW5lZE5hbWU+IjphZS5SZWY9SnIoZ2EoUy5zbGljZShnZSxQZSkpKSxrLk5hbWVzLnB1c2goYWUpO2JyZWFrO2Nhc2UiPGNhbGNQciI6Y2FzZSI8Y2FsY1ByLz4iOmRl''@;'; put 'put ''bGV0ZSBOZVswXSxrLkNhbGNQcj1OZTticmVhaztkZWZhdWx0OmlmKCFHJiZSLldURil0aHJvdyBuZXcgRXJyb3IoInVucmVjb2duaXplZCAiK05lWzBdKyIgaW4gd29ya2Jvb2siKX1yZXR1cm4geWV9KSwtMT09PUdpLm1haW4uaW5kZXhPZihrLnhtbG5zKSl0aHJvdyBuZXcgRXJyb3IoIlVu''@;'; put 'put ''a25vd24gTmFtZXNwYWNlOiAiK2sueG1sbnMpO3JldHVybiBPUyhrKSxrfShTLGspfShUdChTLFRjKEcud29ya2Jvb2tzWzBdKSksRy53b3JrYm9va3NbMF0sUiksWWU9e30sZXQ9IiI7Ry5jb3JlcHJvcHMubGVuZ3RoJiYoKGV0PVR0KFMsVGMoRy5jb3JlcHJvcHNbMF0pLCEwKSkmJihZZT1k''@;'; put 'put ''dihldCkpLDAhPT1HLmV4dHByb3BzLmxlbmd0aCYmKGV0PVR0KFMsVGMoRy5leHRwcm9wc1swXSksITApKSYmZnVuY3Rpb24gSEEoUyxSLGspe3ZhciBHPXt9O1J8fChSPXt9KSxTPWdhKFMpLGVoLmZvckVhY2goZnVuY3Rpb24oUSl7dmFyIGFlPShTLm1hdGNoKEQwKFFbMF0pKXx8W10pWzFd''@;'; put 'put ''O3N3aXRjaChRWzJdKXtjYXNlInN0cmluZyI6YWUmJihSW1FbMV1dPUpyKGFlKSk7YnJlYWs7Y2FzZSJib29sIjpSW1FbMV1dPSJ0cnVlIj09PWFlO2JyZWFrO2Nhc2UicmF3Ijp2YXIgZ2U9Uy5tYXRjaChuZXcgUmVnRXhwKCI8IitRWzBdKyJbXj5dKj4oW1xcc1xcU10qPyk8LyIrUVswXSsi''@;'; put 'put ''PiIpKTtnZSYmZ2UubGVuZ3RoPjAmJihHW1FbMV1dPWdlWzFdKX19KSxHLkhlYWRpbmdQYWlycyYmRy5UaXRsZXNPZlBhcnRzJiZ2NChHLkhlYWRpbmdQYWlycyxHLlRpdGxlc09mUGFydHMsUixrKX0oZXQsWWUsUikpO3ZhciB1dD17fTsoIVIuYm9va1NoZWV0c3x8Ui5ib29rUHJvcHMpJiYw''@;'; put 'put ''IT09Ry5jdXN0cHJvcHMubGVuZ3RoJiYoZXQ9cnIoUyxUYyhHLmN1c3Rwcm9wc1swXSksITApKSYmKHV0PWZ1bmN0aW9uIGZ2KFMsUil7dmFyIGs9e30sRz0iIixRPVMubWF0Y2goUjYpO2lmKFEpZm9yKHZhciBhZT0wO2FlIT1RLmxlbmd0aDsrK2FlKXt2YXIgZ2U9UVthZV0scGU9cHIoZ2Up''@;'; put 'put ''O3N3aXRjaChwZVswXSl7Y2FzZSI8P3htbCI6Y2FzZSI8UHJvcGVydGllcyI6YnJlYWs7Y2FzZSI8cHJvcGVydHkiOkc9SnIocGUubmFtZSk7YnJlYWs7Y2FzZSI8L3Byb3BlcnR5PiI6Rz1udWxsO2JyZWFrO2RlZmF1bHQ6aWYoMD09PWdlLmluZGV4T2YoIjx2dDoiKSl7dmFyIHllPWdlLnNw''@;'; put 'put ''bGl0KCI+IiksUGU9eWVbMF0uc2xpY2UoNCksTmU9eWVbMV07c3dpdGNoKFBlKXtjYXNlImxwc3RyIjpjYXNlImJzdHIiOmNhc2UibHB3c3RyIjpjYXNlImN5IjpjYXNlImVycm9yIjprW0ddPUpyKE5lKTticmVhaztjYXNlImJvb2wiOmtbR109ZWkoTmUpO2JyZWFrO2Nhc2UiaTEiOmNhc2Ui''@;'; put 'put ''aTIiOmNhc2UiaTQiOmNhc2UiaTgiOmNhc2UiaW50IjpjYXNlInVpbnQiOmtbR109cGFyc2VJbnQoTmUsMTApO2JyZWFrO2Nhc2UicjQiOmNhc2UicjgiOmNhc2UiZGVjaW1hbCI6a1tHXT1wYXJzZUZsb2F0KE5lKTticmVhaztjYXNlImZpbGV0aW1lIjpjYXNlImRhdGUiOmtbR109SGUoTmUp''@;'; put 'put ''O2JyZWFrO2RlZmF1bHQ6aWYoIi8iPT1QZS5zbGljZSgtMSkpYnJlYWs7Ui5XVEYmJnR5cGVvZiBjb25zb2xlPCJ1IiYmY29uc29sZS53YXJuKCJVbmV4cGVjdGVkIixnZSxQZSx5ZSl9fWVsc2UgaWYoIjwvIiE9PWdlLnNsaWNlKDAsMikmJlIuV1RGKXRocm93IG5ldyBFcnJvcihnZSl9fXJl''@;'; put 'put ''dHVybiBrfShldCxSKSk7dmFyIEV0PXt9O2lmKChSLmJvb2tTaGVldHN8fFIuYm9va1Byb3BzKSYmKE5lLlNoZWV0cz9hZT1OZS5TaGVldHMubWFwKGZ1bmN0aW9uKEhuKXtyZXR1cm4gSG4ubmFtZX0pOlllLldvcmtzaGVldHMmJlllLlNoZWV0TmFtZXMubGVuZ3RoPjAmJihhZT1ZZS5TaGVl''@;'; put 'put ''dE5hbWVzKSxSLmJvb2tQcm9wcyYmKEV0LlByb3BzPVllLEV0LkN1c3Rwcm9wcz11dCksUi5ib29rU2hlZXRzJiZ0eXBlb2YgYWU8InUiJiYoRXQuU2hlZXROYW1lcz1hZSksUi5ib29rU2hlZXRzP0V0LlNoZWV0TmFtZXM6Ui5ib29rUHJvcHMpKXJldHVybiBFdDthZT17fTt2YXIgb3Q9e307''@;'; put 'put ''Ui5ib29rRGVwcyYmRy5jYWxjY2hhaW4mJihvdD1mdW5jdGlvbiBEYShTLFIsayl7cmV0dXJuIi5iaW4iPT09Ui5zbGljZSgtNCk/ZnVuY3Rpb24gdEIoUyxSLGspe3ZhciBHPVtdO3JldHVybiBjcihTLGZ1bmN0aW9uKGdlLHBlLHllKXtpZig2Mz09PXllKUcucHVzaChnZSk7ZWxzZSBpZigh''@;'; put 'put ''KChwZXx8IiIpLmluZGV4T2YoIkJlZ2luIik+MHx8KHBlfHwiIikuaW5kZXhPZigiRW5kIik+MCkpdGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHJlY29yZCAiK3llKyIgIitwZSl9KSxHfShTKTpmdW5jdGlvbiBEQyhTKXt2YXIgUj1bXTtpZighUylyZXR1cm4gUjt2YXIgaz0xO3JldHVy''@;'; put 'put ''bihTLm1hdGNoKGVuKXx8W10pLmZvckVhY2goZnVuY3Rpb24oRyl7dmFyIFE9cHIoRyk7c3dpdGNoKFFbMF0pe2Nhc2UiPD94bWwiOmNhc2UiPGNhbGNDaGFpbiI6Y2FzZSI8Y2FsY0NoYWluPiI6Y2FzZSI8L2NhbGNDaGFpbj4iOmJyZWFrO2Nhc2UiPGMiOmRlbGV0ZSBRWzBdLFEuaT9rPVEu''@;'; put 'put ''aTpRLmk9ayxSLnB1c2goUSl9fSksUn0oUyl9KFR0KFMsVGMoRy5jYWxjY2hhaW4pKSxHLmNhbGNjaGFpbikpO3ZhciBrdCxPdCxidD0wLEJ0PXt9LEt0PU5lLlNoZWV0cztZZS5Xb3Jrc2hlZXRzPUt0Lmxlbmd0aCxZZS5TaGVldE5hbWVzPVtdO2Zvcih2YXIgVG49MDtUbiE9S3QubGVuZ3Ro''@;'; put 'put ''OysrVG4pWWUuU2hlZXROYW1lc1tUbl09S3RbVG5dLm5hbWU7dmFyIGlyPVE/ImJpbiI6InhtbCIsU249Ry53b3JrYm9va3NbMF0ubGFzdEluZGV4T2YoIi8iKSxzcj0oRy53b3JrYm9va3NbMF0uc2xpY2UoMCxTbisxKSsiX3JlbHMvIitHLndvcmtib29rc1swXS5zbGljZShTbisxKSsiLnJl''@;'; put 'put ''bHMiKS5yZXBsYWNlKC9eXC8vLCIiKTtuaShTLHNyKXx8KHNyPSJ4bC9fcmVscy93b3JrYm9vay4iK2lyKyIucmVscyIpO3ZhciBKbj1oZihycihTLHNyLCEwKSxzciksVm49Sm4sdXI9W107Sm4mJihOZSYmTmUuRXh0ZXJuJiZOZS5FeHRlcm4ubGVuZ3RoJiZOZS5FeHRlcm4uZm9yRWFjaChm''@;'; put 'put ''dW5jdGlvbih2cixIbil7dmFyIFdpPSgiL3hsLyIrSm5bIiFpZCJdW3ZyXS5UYXJnZXQpLnJlcGxhY2UoL1tcL11bXC9dL2csIi8iKSxiaT1HLmxpbmtzLmluZGV4T2YoV2kpO2JpPi0xJiYodXJbSG5dPVBlW2JpXSl9KSxOZSYmZGVsZXRlIE5lLkV4dGVybiksSm4mJihKbj1mdW5jdGlvbiBB''@;'; put 'put ''YihTLFIpe2lmKCFTKXJldHVybiAwO3RyeXtTPVIubWFwKGZ1bmN0aW9uKEcpe3JldHVybiBHLmlkfHwoRy5pZD1HLnN0clJlbElEKSxbRy5uYW1lLFNbIiFpZCJdW0cuaWRdLlRhcmdldCxXbmUoU1siIWlkIl1bRy5pZF0uVHlwZSldfSl9Y2F0Y2h7cmV0dXJuIG51bGx9cmV0dXJuIFMmJjAh''@;'; put 'put ''PT1TLmxlbmd0aD9TOm51bGx9KEpuLE5lLlNoZWV0cykpO3ZhciBncj1uaShTLCJ4bC93b3Jrc2hlZXRzL3NoZWV0LnhtbCIpPzE6MCx0cj1bXSxDaT1bXTtlOmZvcihidD0wO2J0IT1ZZS5Xb3Jrc2hlZXRzOysrYnQpe3ZhciBGaT0ic2hlZXQiO2lmKEpuJiZKbltidF0/KGt0PSJ4bC8iK0pu''@;'; put 'put ''W2J0XVsxXS5yZXBsYWNlKC9bXC9dP3hsXC8vLCIiKSxuaShTLGt0KXx8KGt0PUpuW2J0XVsxXSksbmkoUyxrdCl8fChrdD1zci5yZXBsYWNlKC9fcmVsc1wvLiokLywiIikrSm5bYnRdWzFdKSxGaT1KbltidF1bMl0pOmt0PShrdD0ieGwvd29ya3NoZWV0cy9zaGVldCIrKGJ0KzEtZ3IpKyIu''@;'; put 'put ''IitpcikucmVwbGFjZSgvc2hlZXQwXC4vLCJzaGVldC4iKSxPdD1rdC5yZXBsYWNlKC9eKC4qKShcLykoW15cL10qKSQvLCIkMS9fcmVscy8kMy5yZWxzIiksdHIucHVzaChrdCksUiYmbnVsbCE9Ui5zaGVldHMpc3dpdGNoKHR5cGVvZiBSLnNoZWV0cyl7Y2FzZSJudW1iZXIiOmlmKGJ0IT1S''@;'; put 'put ''LnNoZWV0cyljb250aW51ZSBlO2JyZWFrO2Nhc2Uic3RyaW5nIjppZihZZS5TaGVldE5hbWVzW2J0XS50b0xvd2VyQ2FzZSgpIT1SLnNoZWV0cy50b0xvd2VyQ2FzZSgpKWNvbnRpbnVlIGU7YnJlYWs7ZGVmYXVsdDppZihBcnJheS5pc0FycmF5JiZBcnJheS5pc0FycmF5KFIuc2hlZXRzKSl7''@;'; put 'put ''Zm9yKHZhciBpbz0wLHVvPTA7dW8hPVIuc2hlZXRzLmxlbmd0aDsrK3VvKSJudW1iZXIiPT10eXBlb2YgUi5zaGVldHNbdW9dJiZSLnNoZWV0c1t1b109PWJ0JiYoaW89MSksInN0cmluZyI9PXR5cGVvZiBSLnNoZWV0c1t1b10mJlIuc2hlZXRzW3VvXS50b0xvd2VyQ2FzZSgpPT1ZZS5TaGVl''@;'; put 'put ''dE5hbWVzW2J0XS50b0xvd2VyQ2FzZSgpJiYoaW89MSk7aWYoIWlvKWNvbnRpbnVlIGV9fWlmKCFSLnNraXBQYXJzZSl7dmFyIExpPXAyKFMsa3QsT3QsWWUuU2hlZXROYW1lc1tidF0sYnQsQnQsYWUsRmksUixOZSxwZSx5ZSk7TGkmJkxpWyIhTERQIl0mJihDaVtidF09TGlbIiFMRFAiXSxk''@;'; put 'put ''ZWxldGUgTGlbIiFMRFAiXSl9fWlmKHR5cGVvZiBwYXJzZV9zaGVldF9waXZvdDwidSIpZm9yKGJ0PTA7YnQ8a2IubGVuZ3RoOysrYnQpcGFyc2Vfc2hlZXRfcGl2b3QuYXBwbHkobnVsbCxrYltidF0pO2lmKEV0PXtEaXJlY3Rvcnk6RyxXb3JrYm9vazpOZSxQcm9wczpZZSxDdXN0cHJvcHM6''@;'; put 'put ''dXQsRGVwczpvdCxTaGVldHM6YWUsU2hlZXROYW1lczpZZS5TaGVldE5hbWVzLFN0cmluZ3M6YTgsU3R5bGVzOnllLFRoZW1lczpwZSxTU0Y6QS5nZXRfdGFibGUoKX0sIVIuc2tpcFBhcnNlKXtpZihmdW5jdGlvbiBBQyhTKXshU3x8IVMuV29ya2Jvb2t8fCFTLldvcmtib29rLk5hbWVzfHxT''@;'; put 'put ''Lldvcmtib29rLk5hbWVzLmZvckVhY2goZnVuY3Rpb24oUil7aWYoUi5OYW1lJiYiX3hsbm0uIj09Ui5OYW1lLnNsaWNlKDAsNikmJigiX3hsbm0uUHJpbnRfQXJlYSI9PVIuTmFtZXx8Il94bG5tLlByaW50X1RpdGxlcyI9PVIuTmFtZSkpe3ZhciBrPVMuU2hlZXRzW1MuU2hlZXROYW1lc1tS''@;'; put 'put ''LlNoZWV0XV07aWYoayl7a1siIXByaW50Il18fChrWyIhcHJpbnQiXT17fSksa1siIXByaW50Il0ucHJvcHN8fChrWyIhcHJpbnQiXS5wcm9wcz17fSk7dmFyIEc9a1siIXByaW50Il0sUT1SLlJlZjtpZigiX3hsbm0uUHJpbnRfQXJlYSI9PVIuTmFtZSl7US5pbmRleE9mKCIhIik+LTEmJihR''@;'; put 'put ''PVEuc2xpY2UoUS5pbmRleE9mKCIhIikrMSkpO3ZhciBhZT1hYShRPVEucmVwbGFjZSgvWyRdL2csIiIpKTtHLmFyZWE9YWV9ZWxzZSJfeGxubS5QcmludF9UaXRsZXMiPT1SLk5hbWUmJihHLnRpdGxlcz17czp7cjotMSxjOi0xfSxlOntyOi0xLGM6LTF9fSxRLnNwbGl0KCIsIikuZm9yRWFj''@;'; put 'put ''aChmdW5jdGlvbihnZSl7dmFyIHllPVNzKGdlLnNsaWNlKGdlLmluZGV4T2YoIiEiKSsxKS5yZXBsYWNlKC9bJF0vZywiIikpO3llLnMuYz4tMSYmKEcudGl0bGVzLnMuYz15ZS5zLmMpLHllLmUuYz4tMSYmKEcudGl0bGVzLmUuYz15ZS5lLmMpLHllLnMucj4tMSYmKEcudGl0bGVzLnMucj15''@;'; put 'put ''ZS5zLnIpLHllLmUucj4tMSYmKEcudGl0bGVzLmUucj15ZS5lLnIpfSkpfX19KX0oRXQpLFImJlIuYm9va0ZpbGVzJiYoRXQua2V5cz1rLEV0LmZpbGVzPVMuZmlsZXMpLFImJlIuYm9va1ZCQSYmKEcudmJhLmxlbmd0aD4wP0V0LnZiYXJhdz1UdChTLFRjKEcudmJhWzBdKSwhMCk6Ry5kZWZh''@;'; put 'put ''dWx0cyYmRy5kZWZhdWx0cy5iaW49PT1QayYmKEV0LnZiYXJhdz1UdChTLCJ4bC92YmFQcm9qZWN0LmJpbiIsITApKSksVm4mJlZuWyIhaWQiXSl7Zm9yKHZhciBEcj1bXSxObj0xO05uPD0xMDI0OysrTm4pVm5bIiFpZCJdWyJySWQiK05uXSYmVm5bIiFpZCJdWyJySWQiK05uXS5UeXBlJiYv''@;'; put 'put ''Y3VzdG9tWG1sJC8udGVzdChWblsiIWlkIl1bInJJZCIrTm5dLlR5cGUpJiZEci5wdXNoKHBuKFZuWyIhaWQiXVsicklkIitObl0uVGFyZ2V0LEcud29ya2Jvb2tzWzBdKSk7RHIubGVuZ3RoPjAmJihFdC5DdXN0b21YTUw9W10sRHIuZm9yRWFjaChmdW5jdGlvbih2cil7dmFyIEhuPXtkYXRh''@;'; put 'put ''OnJyKFMsVGModnIpKX0sQnI9TnIodnIpO3RyeXt2YXIgV2k9aGYocnIoUyxUYyhCciksITApLEJyKTtpZihXaSlmb3IodmFyIGJpPTE7Ymk8PTEwMjQ7KytiaSlXaVsiIWlkIl1bInJJZCIrYmldJiZXaVsiIWlkIl1bInJJZCIrYmldLlR5cGUmJi9jdXN0b21YbWxQcm9wcyQvLnRlc3QoV2lb''@;'; put 'put ''IiFpZCJdWyJySWQiK2JpXS5UeXBlKSYmKEhuLnByb3BzPXJyKFMsVGMocG4oV2lbIiFpZCJdWyJySWQiK2JpXS5UYXJnZXQsdnIpKSkpfWNhdGNoe31FdC5DdXN0b21YTUwucHVzaChIbil9KSl9dmFyIFZyPWh0KFMsInhsL21vZGVsL2l0ZW0uZGF0YSIsITApO1ZyJiYoRXQubW9kZWw9VnIp''@;'; put 'put ''LEcuY29ubiYmKEV0LmNvbm49VHQoUyxUYyhHLmNvbm4pLCEwKSksdXIubGVuZ3RoJiYoRXQuRXh0ZXJuYWxXQj11ciksTmUmJihOZS5QUEk9TWYpfXJldHVybiBSLnRlbXBsYXRlJiYoRXQuX3dzcGF0aHM9dHIsRXQuX3N0eXBhdGg9VGMoRy5zdHlsZXx8IiIpLEV0Ll93YnBhdGg9VGMoRy53''@;'; put 'put ''b3JrYm9va3NbMF18fCJ4bC93b3JrYm9vay54bWwiKSxFdC5fdm1scGF0aHM9Q2ksRXQuX3dicmVsc3BhdGg9c3IsRXQuX2N0PXJyKFMsIltDb250ZW50X1R5cGVzXS54bWwiKSxFdC5maWxlcz1TLmZpbGVzLFZjKEV0LFMsUikpLEV0fWZ1bmN0aW9uIERiKFMsUil7dmFyIGs9Unx8e307ay5w''@;'; put 'put ''YXNzd29yZHx8KGsucGFzc3dvcmQ9IlZlbHZldFN3ZWF0c2hvcCIpO3ZhciBHPSJXb3JrYm9vayIsUT12ZS5maW5kKFMsRyk7dHJ5e2lmKCEoUT12ZS5maW5kKFMsRz0iLyFEYXRhU3BhY2VzL1ZlcnNpb24iKSl8fCFRLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0''@;'; put 'put ''ZWQgZmlsZSBtaXNzaW5nICIrRyk7aWYoZnVuY3Rpb24gdlYoUyl7dmFyIFI9e307Ui5pZD1TLnJlYWRfc2hpZnQoMCwibHBwNCIpLFIuUj1QMShTLDQpLFIuVT1QMShTLDQpLFIuVz1QMShTLDQpfShRLmNvbnRlbnQpLCEoUT12ZS5maW5kKFMsRz0iLyFEYXRhU3BhY2VzL0RhdGFTcGFjZU1h''@;'; put 'put ''cCIpKXx8IVEuY29udGVudCl0aHJvdyBuZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIG1pc3NpbmcgIitHKTt2YXIgYWU9ZnVuY3Rpb24gYlYoUyl7dmFyIFI9W107Uy5sKz00O2Zvcih2YXIgaz1TLnJlYWRfc2hpZnQoNCk7ay0tID4wOylSLnB1c2goZEMoUykpO3JldHVybiBS''@;'; put 'put ''fShRLmNvbnRlbnQpO2lmKDEhPT1hZS5sZW5ndGh8fDEhPT1hZVswXS5jb21wcy5sZW5ndGh8fDAhPT1hZVswXS5jb21wc1swXS50fHwiU3Ryb25nRW5jcnlwdGlvbkRhdGFTcGFjZSIhPT1hZVswXS5uYW1lfHwiRW5jcnlwdGVkUGFja2FnZSIhPT1hZVswXS5jb21wc1swXS52KXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVkIGZpbGUgYmFkICIrRyk7aWYoIShRPXZlLmZpbmQoUyxHPSIvIURhdGFTcGFjZXMvRGF0YVNwYWNlSW5mby9TdHJvbmdFbmNyeXB0aW9uRGF0YVNwYWNlIikpfHwhUS5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlwdGVk''@;'; put 'put ''IGZpbGUgbWlzc2luZyAiK0cpO3ZhciBnZT1mdW5jdGlvbiB5VihTKXt2YXIgUj1bXTtTLmwrPTQ7Zm9yKHZhciBrPVMucmVhZF9zaGlmdCg0KTtrLS0gPjA7KVIucHVzaChTLnJlYWRfc2hpZnQoMCwibHBwNCIpKTtyZXR1cm4gUn0oUS5jb250ZW50KTtpZigxIT1nZS5sZW5ndGh8fCJTdHJv''@;'; put 'put ''bmdFbmNyeXB0aW9uVHJhbnNmb3JtIiE9Z2VbMF0pdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBiYWQgIitHKTtpZighKFE9dmUuZmluZChTLEc9Ii8hRGF0YVNwYWNlcy9UcmFuc2Zvcm1JbmZvL1N0cm9uZ0VuY3J5cHRpb25UcmFuc2Zvcm0vIVByaW1hcnkiKSl8''@;'; put 'put ''fCFRLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0ZWQgZmlsZSBtaXNzaW5nICIrRyk7IWZ1bmN0aW9uIFV0ZShTKXt2YXIgUj1mdW5jdGlvbiBfVihTKXt2YXIgUj17fTtyZXR1cm4gUy5yZWFkX3NoaWZ0KDQpLFMubCs9NCxSLmlkPVMucmVhZF9zaGlmdCgwLCJs''@;'; put 'put ''cHA0IiksUi5uYW1lPVMucmVhZF9zaGlmdCgwLCJscHA0IiksUi5SPVAxKFMsNCksUi5VPVAxKFMsNCksUi5XPVAxKFMsNCksUn0oUyk7aWYoUi5lbmFtZT1TLnJlYWRfc2hpZnQoMCwiOGxwcDQiKSxSLmJsa3N6PVMucmVhZF9zaGlmdCg0KSxSLmNtb2RlPVMucmVhZF9zaGlmdCg0KSw0IT1T''@;'; put 'put ''LnJlYWRfc2hpZnQoNCkpdGhyb3cgbmV3IEVycm9yKCJCYWQgIVByaW1hcnkgcmVjb3JkIik7cmV0dXJuIFJ9KFEuY29udGVudCl9Y2F0Y2h7fWlmKCEoUT12ZS5maW5kKFMsRz0iL0VuY3J5cHRpb25JbmZvIikpfHwhUS5jb250ZW50KXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgRW5jcnlw''@;'; put 'put ''dGVkIGZpbGUgbWlzc2luZyAiK0cpO3ZhciBwZT1mdW5jdGlvbiBLNihTKXt2YXIgUj1QMShTKTtzd2l0Y2goUi5NaW5vcil7Y2FzZSAyOnJldHVybltSLk1pbm9yLENWKFMpXTtjYXNlIDM6cmV0dXJuW1IuTWlub3IscTYoKV07Y2FzZSA0OnJldHVybltSLk1pbm9yLGhDKFMpXX10aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IoIkVDTUEtMzc2IEVuY3J5cHRlZCBmaWxlIHVucmVjb2duaXplZCBWZXJzaW9uOiAiK1IuTWlub3IpfShRLmNvbnRlbnQpO2lmKCEoUT12ZS5maW5kKFMsRz0iL0VuY3J5cHRlZFBhY2thZ2UiKSl8fCFRLmNvbnRlbnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBFbmNyeXB0''@;'; put 'put ''ZWQgZmlsZSBtaXNzaW5nICIrRyk7aWYoND09cGVbMF0pcmV0dXJuIGZ1bmN0aW9uIFRiKFMsUixrLEcpe3ZhciBRPXZlLnV0aWxzLnByZXBfYmxvYjtpZigiaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9vZmZpY2UvMjAwNi9rZXlFbmNyeXB0b3IvcGFzc3dvcmQiIT1TLnVyaSl0aHJv''@;'; put 'put ''dyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIEVDTUEtMzc2IEFnaWxlIFVSSSAiK1MudXJpKTt2YXIgYWU9Uy5lbmNzWzBdLGdlPWFlLmhhc2hBbGdvcml0aG0scGU9ImFlcy0yNTYtY2JjIix5ZT1CdWZmZXIuZnJvbShhZS5zYWx0VmFsdWUsImJhc2U2NCIpLFBlPUJ1ZmZlci5mcm9tKFMuc2Fs''@;'; put 'put ''dFZhbHVlLCJiYXNlNjQiKSxOZT0rYWUuYmxvY2tTaXplLFllPSthZS5rZXlCaXRzPj4zLGV0PWZjKEJ1ZmZlci5jb25jYXQoW3llLEJ1ZmZlci5mcm9tKGNwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAsaykpXSksZ2UpLHV0PUJ1ZmZlci5hbGxvYyg0KTtRKHV0LDApO2Zvcih2YXIgRXQ9MDtF''@;'; put 'put ''dDxhZS5zcGluQ291bnQ7KytFdCl1dC5sPTAsdXQud3JpdGVfc2hpZnQoNCxFdCksZXQ9ZmMoQnVmZmVyLmNvbmNhdChbdXQsZXRdKSxnZSk7dmFyIG90PWZ1bmN0aW9uKGdyLHRyLENpLEZpKXt2YXIgaW89ZmMoQnVmZmVyLmNvbmNhdChbZ3IsQnVmZmVyLmZyb20oWzIwLDExMCwxMSwyMzEs''@;'; put 'put ''MTcxLDE3MiwyMDgsMjE0XSldKSxGaSksdW89aW8ubGVuZ3RoPj1DaT9pby5zbGljZSgwLENpKTpCdWZmZXIuYWxsb2MoQ2kpO2lmKGlvLmxlbmd0aDxDaSl7Zm9yKHZhciBMaT0wO0xpPGlvLmxlbmd0aDsrK0xpKXVvW0xpXT1pb1tMaV07Zm9yKDtMaTxDaTsrK0xpKXVvW0xpXT01NH1yZXR1''@;'; put 'put ''cm4gdW99KGV0LDAsWWUsZ2UpO3N3aXRjaChhZS5jaXBoZXJBbGdvcml0aG0pe2Nhc2UiQUVTIjppZigiQ2hhaW5pbmdNb2RlQ0JDIiE9YWUuY2lwaGVyQ2hhaW5pbmcpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBjaXBoZXIgY2hhaW5pbmcgIithZS5jaXBoZXJDaGFpbmluZyk7cGU9''@;'; put 'put ''ImFlcy0iK2FlLmtleUJpdHMrIi1jYmMiO2JyZWFrO2Nhc2UiUkMyIjpwZT0icmMyIjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgY2lwaGVyIGFsZ28gIithZS5jaXBoZXJBbGdvcml0aG0pfXllPWZ1bmN0aW9uKHVyKXtmb3IodmFyIGdyPUJ1ZmZlci5hbGxv''@;'; put 'put ''YyhOZSksdHI9MDt0cjxOZTsrK3RyKWdyW3RyXT10cjx1ci5sZW5ndGg/dXJbdHJdOjU0O3JldHVybiBncn0oeWUpO3ZhciBidD1CdWZmZXIuZnJvbShhZS5lbmNyeXB0ZWRLZXlWYWx1ZSwiYmFzZTY0IiksQnQ9VTQob3QseWUscGUpLnVwZGF0ZShidCksa3Q9VTQoZmMoQnVmZmVyLmNvbmNh''@;'; put 'put ''dChbZXQsQnVmZmVyLmZyb20oWzIxNSwxNzAsMTUsMTA5LDQ4LDk3LDUyLDc4XSldKSxnZSkuc2xpY2UoMCxZZSkseWUscGUpLnVwZGF0ZShCdWZmZXIuZnJvbShhZS5lbmNyeXB0ZWRWZXJpZmllckhhc2hWYWx1ZSwiYmFzZTY0IikpLE90PWZjKFU0KGZjKEJ1ZmZlci5jb25jYXQoW2V0LEJ1''@;'; put 'put ''ZmZlci5mcm9tKFsyNTQsMTY3LDIxMCwxMTgsNTksNzUsMTU4LDEyMV0pXSksZ2UpLnNsaWNlKDAsWWUpLHllLHBlKS51cGRhdGUoQnVmZmVyLmZyb20oYWUuZW5jcnlwdGVkVmVyaWZpZXJIYXNoSW5wdXQsImJhc2U2NCIpKSxnZSksS3Q9K2FlLmhhc2hTaXplfHxNYXRoLm1pbihrdC5sZW5n''@;'; put 'put ''dGgsT3QubGVuZ3RoKTtpZigwIT1rdC5zbGljZSgwLEt0KS5jb21wYXJlKE90LnNsaWNlKDAsS3QpKSl0aHJvdyBuZXcgRXJyb3IoIkluY29ycmVjdCBQYXNzd29yZCIpO1EoUiwwKTt2YXIgVG49Ui5yZWFkX3NoaWZ0KDQpO1IubCs9NDt2YXIgaXI9W10sU249QnVmZmVyLmNvbmNhdChbUGUs''@;'; put 'put ''QnVmZmVyLmFsbG9jKDQpXSk7Zm9yKFEoU24pLEV0PTA7Ui5sPFIubGVuZ3RoOylTbi5sPXllLmxlbmd0aCxTbi53cml0ZV9zaGlmdCg0LEV0KSxpci5wdXNoKFU0KEJ0LGZjKEJ1ZmZlci5mcm9tKFNuKSxnZSkuc2xpY2UoMCwxNikscGUpLnVwZGF0ZShCdWZmZXIuZnJvbShSLnNsaWNlKFIu''@;'; put 'put ''bCxSLmwrNDA5NikpKSksUi5sKz00MDk2LCsrRXQ7dmFyIEpuPUJ1ZmZlci5jb25jYXQoaXIpLnNsaWNlKDAsVG4pLFZuPXF0KEcpO3JldHVybiBWbi50eXBlPSJidWZmZXIiLFc1KEpuLFZuKX0ocGVbMV0sUS5jb250ZW50LGsucGFzc3dvcmR8fCIiLGspO2lmKDI9PXBlWzBdKXJldHVybiBm''@;'; put 'put ''dW5jdGlvbiBBSShTLFIsayxHKXt2YXIgUT12ZS51dGlscy5wcmVwX2Jsb2I7aWYoIlN0ZCIhPT1TLnQpdGhyb3cgbmV3IEVycm9yKCJFQ01BLTM3NiBCYWQgU3RhbmRhcmQgRW5jcnlwdGlvbiIpO3ZhciBhZT1TLnYuU2FsdCxnZT1TLnYuVmVyaWZpZXIscGU9Uy52LlZlcmlmaWVySGFzaDtp''@;'; put 'put ''ZigzNiE9Uy5oLkZsYWdzKXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgU3RhbmRhcmQgRW5jcnlwdGlvbiBiYWQgRmxhZ3MiKTt2YXIgeWU9MCxQZT0iIjtzd2l0Y2goUy5oLkFsZ0lEKXtjYXNlIDI2MTI2OnllPTEyOCxQZT0iYWVzLTEyOC1lY2IiO2JyZWFrO2Nhc2UgMjYxMjc6eWU9MTk2''@;'; put 'put ''LFBlPSJhZXMtMTkyLWVjYiI7YnJlYWs7Y2FzZSAyNjEyODp5ZT0yNTYsUGU9ImFlcy0yNTYtZWNiIjticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgQmFkIFN0YW5kYXJkIEVuY3J5cHRpb24iKX1pZigzMjc3MiE9Uy5oLkFsZ0lESGFzaCl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''IkVDTUEtMzc2IEJhZCBTdGFuZGFyZCBFbmNyeXB0aW9uIik7aWYoUy5oLktleVNpemUhPXllKXRocm93IG5ldyBFcnJvcigiQWxnSUQvS2V5U2l6ZSBtaXNtYXRjaCIpO2lmKDI0IT1TLmguUHJvdmlkZXJUeXBlKXRocm93IG5ldyBFcnJvcigiRUNNQS0zNzYgdW5zdXBwb3J0ZWQgUHJvdmlk''@;'; put 'put ''ZXJUeXBlICIrUy5oLlByb3ZpZGVyVHlwZSk7aWYoIk1pY3Jvc29mdCBFbmhhbmNlZCBSU0EgYW5kIEFFUyBDcnlwdG9ncmFwaGljIFByb3ZpZGVyIiE9PVMuaC5DU1BOYW1lLnNsaWNlKDAsNTMpKXRocm93IG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgQ3J5cHRvIFByb3ZpZGVyICIrUy5oLkNT''@;'; put 'put ''UE5hbWUpO3ZhciBZZT0iU0hBLTEiLGV0PXllPj4zLHV0PWZjKEJ1ZmZlci5jb25jYXQoW2FlLGNwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAsayldKSxZZSksRXQ9QnVmZmVyLmFsbG9jKDQpO1EoRXQsMCk7Zm9yKHZhciBvdD0wO290PDVlNDsrK290KUV0Lmw9MCxFdC53cml0ZV9zaGlmdCg0''@;'; put 'put ''LG90KSx1dD1mYyhCdWZmZXIuY29uY2F0KFtFdCx1dF0pLFllKTtFdC5sPTAsRXQud3JpdGVfc2hpZnQoNCwwKTt2YXIgaXIsU24sc3IsSm4sVm4sQnQ9KEpuPShzcj1mdW5jdGlvbihncix0cixDaSl7Zm9yKHZhciBGaT1CdWZmZXIuYWxsb2MoNjQpLGlvPTA7aW88RmkubGVuZ3RoOysraW8p''@;'; put 'put ''RmlbaW9dPWdyO2Zvcihpbz0wO2lvPHRyLmxlbmd0aDsrK2lvKUZpW2lvXV49dHJbaW9dO3JldHVybiBmYyhGaSxDaSl9KSg1NCxpcj1mYyhCdWZmZXIuY29uY2F0KFt1dCxFdF0pLFllKSxTbj1ZZSksVm49c3IoOTIsaXIsU24pLEJ1ZmZlci5jb25jYXQoW0puLFZuXSkuc2xpY2UoMCxldCkp''@;'; put 'put ''O2lmKFU0KEJ0LEJ1ZmZlci5hbGxvYygwKSxQZSkudXBkYXRlKHBlKS5zbGljZSgwLDIwKS5jb21wYXJlKGZjKFU0KEJ0LEJ1ZmZlci5hbGxvYygwKSxQZSkudXBkYXRlKGdlKSxZZSkpKXRocm93IG5ldyBFcnJvcigiSW5jb3JyZWN0IFBhc3N3b3JkIik7UShSLDApO3ZhciBrdD1SLnJlYWRf''@;'; put 'put ''c2hpZnQoNCk7Ui5sKz00O3ZhciBPdD1bXTtmb3Iob3Q9MDtSLmw8Ui5sZW5ndGg7KU90LnB1c2goVTQoQnQsQnVmZmVyLmFsbG9jKDApLFBlKS51cGRhdGUoUi5zbGljZShSLmwsUi5sKzQwOTYpKSksUi5sKz00MDk2LCsrb3Q7cmV0dXJuIFc1KEJ1ZmZlci5jb25jYXQoT3QpLnNsaWNlKDAs''@;'; put 'put ''a3QpLEcpfShwZVsxXSxRLmNvbnRlbnQsay5wYXNzd29yZHx8IiIsayk7dGhyb3cgbmV3IEVycm9yKCJGaWxlIGlzIHBhc3N3b3JkLXByb3RlY3RlZCIpfXZhciBiZD1mdW5jdGlvbigpe307ZnVuY3Rpb24gUDgoUyxSKXtpZihSLnRlbXBsYXRlKXJldHVybiBiZChTLFIpO2lmKCJvZHMiPT1S''@;'; put 'put ''LmJvb2tUeXBlKXJldHVybiBNSShTLFIpO3hmKFImJlIuUFBJfHw5NiksUyYmIVMuU1NGJiYoUy5TU0Y9QS5nZXRfdGFibGUoKSksUyYmUy5TU0YmJihvZShBKSxBLmxvYWRfdGFibGUoUy5TU0YpLFIucmV2c3NmPWtlKFMuU1NGKSxSLnJldnNzZltTLlNTRls2NTUzNV1dPTAsUi5zc2Y9Uy5T''@;'; put 'put ''U0YpLFMuU3R5bGVzPXtGb250czpSLkZvbnRzPVt7c3o6MTIsY29sb3I6e3RoZW1lOjEscmdiOiIwMDAwMDAifSxuYW1lOiJDYWxpYnJpIixmYW1pbHk6MixzY2hlbWU6Im1pbm9yIn1dLEZpbGxzOlIuRmlsbHM9W3twYXR0ZXJuVHlwZToibm9uZSJ9LHtwYXR0ZXJuVHlwZToiZ3JheTEyNSJ9''@;'; put 'put ''XSxCb3JkZXJzOlIuQm9yZGVycz1be31dLERYRjpSLkRYRj1TLlN0eWxlcyYmUy5TdHlsZXMuRFhGfHxbXSxUYWJsZTpSLlRhYmxlPVMuU3R5bGVzJiZTLlN0eWxlcy5UYWJsZXx8W119LFIub3ZlcnJpZGVNRFc/RWM9Ui5vdmVycmlkZU1EVzpBNChSLkZvbnRzWzBdKSxSLnJlbHM9e30sUi53''@;'; put 'put ''YnJlbHM9e30sUi5TdHJpbmdzPVtdLFIuU3RyaW5ncy5Db3VudD0wLFIuU3RyaW5ncy5VbmlxdWU9MCxXMz9SLnJldlN0cmluZ3M9bmV3IE1hcDooUi5yZXZTdHJpbmdzPXt9LFIucmV2U3RyaW5ncy5mb289W10sZGVsZXRlIFIucmV2U3RyaW5ncy5mb28pO3ZhciBrPSJ4bHNiIj09Ui5ib29r''@;'; put 'put ''VHlwZT8iYmluIjoieG1sIixHPU5rLmluZGV4T2YoUi5ib29rVHlwZSk+LTEsUT17d29ya2Jvb2tzOltdLHNoZWV0czpbXSxjaGFydHM6W10sZGlhbG9nczpbXSxtYWNyb3M6W10scmVsczpbXSxzdHJzOltdLGNvbW1lbnRzOltdLGxpbmtzOltdLGNvcmVwcm9wczpbXSxleHRwcm9wczpbXSxj''@;'; put 'put ''dXN0cHJvcHM6W10sdGhlbWVzOltdLHN0eWxlczpbXSxjYWxjY2hhaW5zOltdLHZiYTpbXSxkcmF3aW5nczpbXSxwaXZvdHM6W10scGl2b3RjYWNoZXM6W10scGl2b3RyZWNvcmRzOltdLGRhdGFtb2RlbHM6W10sY2hhcnRvYmpzOltdLGNoYXJ0c3R5bGVzOltdLGNoYXJ0Y29sb3JzOltdLGNo''@;'; put 'put ''YXJ0ZXhzOltdLHRhYmxlczpbXSxjb25uczpbXSxjdHJscHJvcHM6W10sY3VzdG9teG1scHJvcHM6W10sVE9ETzpbXSx4bWxuczoiIn07a2YoUj1SfHx7fSk7dmFyIGFlPWRpKCksZ2U9IiIscGU9MDtpZihSLmNlbGxYZnM9W10sUi5jZWxsU3R5bGVYZnM9W3tuYW1lOiJOb3JtYWwifV0sczAo''@;'; put 'put ''Ui5jZWxsWGZzLFIuY2VsbFN0eWxlWGZzLHt9LHtyZXZzc2Y6e0dlbmVyYWw6MH19KSxTLlByb3BzfHwoUy5Qcm9wcz17fSksQm4oYWUsZ2U9ImRvY1Byb3BzL2NvcmUueG1sIixmdW5jdGlvbiBqdyhTLFIpe3ZhciBrPVJ8fHt9LEc9W0lpLEJ3XSxRPXt9O2lmKCFTJiYhay5Qcm9wcylyZXR1''@;'; put 'put ''cm4gRy5qb2luKCIiKTtTJiYobnVsbCE9Uy5DcmVhdGVkRGF0ZSYmZmYoImRjdGVybXM6Y3JlYXRlZCIsInN0cmluZyI9PXR5cGVvZiBTLkNyZWF0ZWREYXRlP1MuQ3JlYXRlZERhdGU6dGYoUy5DcmVhdGVkRGF0ZSxrLldURikseyJ4c2k6dHlwZSI6ImRjdGVybXM6VzNDRFRGIn0sRyxRKSxu''@;'; put 'put ''dWxsIT1TLk1vZGlmaWVkRGF0ZSYmZmYoImRjdGVybXM6bW9kaWZpZWQiLCJzdHJpbmciPT10eXBlb2YgUy5Nb2RpZmllZERhdGU/Uy5Nb2RpZmllZERhdGU6dGYoUy5Nb2RpZmllZERhdGUsay5XVEYpLHsieHNpOnR5cGUiOiJkY3Rlcm1zOlczQ0RURiJ9LEcsUSkpO2Zvcih2YXIgYWU9MDth''@;'; put 'put ''ZSE9UjAubGVuZ3RoOysrYWUpe3ZhciBnZT1SMFthZV0scGU9ay5Qcm9wcyYmbnVsbCE9ay5Qcm9wc1tnZVsxXV0/ay5Qcm9wc1tnZVsxXV06Uz9TW2dlWzFdXTpudWxsOyEwPT09cGU/cGU9IjEiOiExPT09cGU/cGU9IjAiOiJudW1iZXIiPT10eXBlb2YgcGUmJihwZT1TdHJpbmcocGUpKSxu''@;'; put 'put ''dWxsIT1wZSYmZmYoZ2VbMF0scGUsbnVsbCxHLFEpfXJldHVybiBHLmxlbmd0aD4yJiYoR1tHLmxlbmd0aF09IjwvY3A6Y29yZVByb3BlcnRpZXM+IixHWzFdPUdbMV0ucmVwbGFjZSgiLz4iLCI+IikpLEcuam9pbigiIil9KFMuUHJvcHMsUikpLFEuY29yZXByb3BzLnB1c2goZ2UpLEVyKFIu''@;'; put 'put ''cmVscywyLGdlLHFvLkNPUkVfUFJPUFMpLGdlPSJkb2NQcm9wcy9hcHAueG1sIiwhUy5Qcm9wc3x8IVMuUHJvcHMuU2hlZXROYW1lcylpZihTLldvcmtib29rJiZTLldvcmtib29rLlNoZWV0cyl7Zm9yKHZhciB5ZT1bXSxQZT0wO1BlPFMuU2hlZXROYW1lcy5sZW5ndGg7KytQZSkyIT0oUy5X''@;'; put 'put ''b3JrYm9vay5TaGVldHNbUGVdfHx7fSkuSGlkZGVuJiZ5ZS5wdXNoKFMuU2hlZXROYW1lc1tQZV0pO1MuUHJvcHMuU2hlZXROYW1lcz15ZX1lbHNlIFMuUHJvcHMuU2hlZXROYW1lcz1TLlNoZWV0TmFtZXM7Uy5Qcm9wcy5Xb3Jrc2hlZXRzPVMuUHJvcHMuU2hlZXROYW1lcy5sZW5ndGgsQm4o''@;'; put 'put ''YWUsZ2UsZnVuY3Rpb24gencoUyl7dmFyIFI9W10saz1GcjtyZXR1cm4gU3x8KFM9e30pLFMuQXBwbGljYXRpb249IlNoZWV0SlMiLFJbUi5sZW5ndGhdPUlpLFJbUi5sZW5ndGhdPUk2LGVoLmZvckVhY2goZnVuY3Rpb24oRyl7aWYodm9pZCAwIT09U1tHWzFdXSl7dmFyIFE7c3dpdGNoKEdb''@;'; put 'put ''Ml0pe2Nhc2Uic3RyaW5nIjpRPU9yKFN0cmluZyhTW0dbMV1dKSk7YnJlYWs7Y2FzZSJib29sIjpRPVNbR1sxXV0/InRydWUiOiJmYWxzZSJ9dm9pZCAwIT09USYmKFJbUi5sZW5ndGhdPWsoR1swXSxRKSl9fSksUltSLmxlbmd0aF09aygiSGVhZGluZ1BhaXJzIixrKCJ2dDp2ZWN0b3IiLGso''@;'; put 'put ''InZ0OnZhcmlhbnQiLCI8dnQ6bHBzdHI+V29ya3NoZWV0czwvdnQ6bHBzdHI+IikraygidnQ6dmFyaWFudCIsaygidnQ6aTQiLFN0cmluZyhTLldvcmtzaGVldHMpKSkse3NpemU6MixiYXNlVHlwZToidmFyaWFudCJ9KSksUltSLmxlbmd0aF09aygiVGl0bGVzT2ZQYXJ0cyIsaygidnQ6dmVj''@;'; put 'put ''dG9yIixTLlNoZWV0TmFtZXMubWFwKGZ1bmN0aW9uKEcpe3JldHVybiI8dnQ6bHBzdHI+IitPcihHKSsiPC92dDpscHN0cj4ifSkuam9pbigiIikse3NpemU6Uy5Xb3Jrc2hlZXRzLGJhc2VUeXBlOiJscHN0ciJ9KSksUi5sZW5ndGg+MiYmKFJbUi5sZW5ndGhdPSI8L1Byb3BlcnRpZXM+IixS''@;'; put 'put ''WzFdPVJbMV0ucmVwbGFjZSgiLz4iLCI+IikpLFIuam9pbigiIil9KFMuUHJvcHMpKSxRLmV4dHByb3BzLnB1c2goZ2UpLEVyKFIucmVscywzLGdlLHFvLkVYVF9QUk9QUyksUy5DdXN0cHJvcHMhPT1TLlByb3BzJiZSZShTLkN1c3Rwcm9wc3x8e30pLmxlbmd0aD4wJiYoQm4oYWUsZ2U9ImRv''@;'; put 'put ''Y1Byb3BzL2N1c3RvbS54bWwiLGZ1bmN0aW9uIHBmKFMpe3ZhciBSPVtJaSxwdl07aWYoIVMpcmV0dXJuIFIuam9pbigiIik7dmFyIGs9MTtyZXR1cm4gUmUoUykuZm9yRWFjaChmdW5jdGlvbihRKXsrK2ssUltSLmxlbmd0aF09RnIoInByb3BlcnR5IixmdW5jdGlvbiBrcyhTLFIpe3N3aXRj''@;'; put 'put ''aCh0eXBlb2YgUyl7Y2FzZSJzdHJpbmciOnZhciBrPUZyKCJ2dDpscHdzdHIiLE9yKFMpKTtyZXR1cm4gUiYmKGs9ay5yZXBsYWNlKC8mcXVvdDsvZywiX3gwMDIyXyIpKSxrO2Nhc2UibnVtYmVyIjpyZXR1cm4gRnIoKDB8Uyk9PVM/InZ0Omk0IjoidnQ6cjgiLE9yKFN0cmluZyhTKSkpO2Nh''@;'; put 'put ''c2UiYm9vbGVhbiI6cmV0dXJuIEZyKCJ2dDpib29sIixTPyJ0cnVlIjoiZmFsc2UiKX1pZihTIGluc3RhbmNlb2YgRGF0ZSlyZXR1cm4gRnIoInZ0OmZpbGV0aW1lIix0ZihTKSk7dGhyb3cgbmV3IEVycm9yKCJVbmFibGUgdG8gc2VyaWFsaXplICIrUyl9KFNbUV0sITApLHtmbXRpZDoie0Q1''@;'; put 'put ''Q0RENTA1LTJFOUMtMTAxQi05Mzk3LTA4MDAyQjJDRjlBRX0iLHBpZDprLG5hbWU6T3IoUSl9KX0pLFIubGVuZ3RoPjImJihSW1IubGVuZ3RoXT0iPC9Qcm9wZXJ0aWVzPiIsUlsxXT1SWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxSLmpvaW4oIiIpfShTLkN1c3Rwcm9wcykpLFEuY3VzdHByb3Bz''@;'; put 'put ''LnB1c2goZ2UpLEVyKFIucmVscyw0LGdlLHFvLkNVU1RfUFJPUFMpKTt2YXIgTmU9W10sWWU9W107ZnVuY3Rpb24gZXQoVG4saXIpe1llLnB1c2goW3BlLTEsaXIsVG5dKX1mdW5jdGlvbiB1dChUbil7TmUucHVzaChbcGUtMSxUbl0pLEVyKEV0LC0xLCIuLi9waXZvdFRhYmxlcy9waXZvdFRh''@;'; put 'put ''YmxlIitOZS5sZW5ndGgrIi4iK2sscW8uUElWT1QpfWZvcihwZT0xO3BlPD1TLlNoZWV0TmFtZXMubGVuZ3RoOysrcGUpe3ZhciBFdD17IiFpZCI6e319LG90PVMuU2hlZXRzW1MuU2hlZXROYW1lc1twZS0xXV0sYnQ9KG90fHx7fSlbIiF0eXBlIl18fCJzaGVldCI7c3dpdGNoKGJ0KXtjYXNl''@;'; put 'put ''ImNoYXJ0IjppZih0eXBlb2Ygd3JpdGVfZHJhd2luZ188InUiKXtCbihhZSxnZT0ieGwvY2hhcnRzaGVldHMvc2hlZXQiK3BlKyIuIitrLGlJKHBlLTEsZ2UsUixTLEV0KSksUS5jaGFydHMucHVzaChnZSksRXIoUi53YnJlbHMsLTEsImNoYXJ0c2hlZXRzL3NoZWV0IitwZSsiLiIrayxxby5D''@;'; put 'put ''Uyk7YnJlYWt9ZGVmYXVsdDpCbihhZSxnZT0ieGwvd29ya3NoZWV0cy9zaGVldCIrcGUrIi4iK2ssckkocGUtMSxnZSxSLFMsRXQpKSxRLnNoZWV0cy5wdXNoKGdlKSxFcihSLndicmVscywtMSwid29ya3NoZWV0cy9zaGVldCIrcGUrIi4iK2sscW8uV1NbMF0pfWlmKG90KXsiY2hhcnQiPT1i''@;'; put 'put ''dCYmIW90WyIhcG9zIl0mJihvdFsiIXBvcyJdPXt4OjAseTowLHc6OTAwLGg6NjAwfSk7dmFyIEJ0PW90WyIhY29tbWVudHMiXSxrdD0hMTtpZihCdCYmQnQubGVuZ3RoPjApe3ZhciBPdD0ieGwvY29tbWVudHMiK3BlKyIuIitrO0JuKGFlLE90LGJ6KEJ0LE90LFIpKSxRLmNvbW1lbnRzLnB1''@;'; put 'put ''c2goT3QpLEVyKEV0LC0xLCIuLi9jb21tZW50cyIrcGUrIi4iK2sscW8uQ01OVCksa3Q9ITB9KG90WyIhY29udHJvbHMiXXx8W10pLmxlbmd0aD4wJiYoa3Q9ITApLG90WyIhbGVnYWN5Il0mJmt0JiZCbihhZSwieGwvZHJhd2luZ3Mvdm1sRHJhd2luZyIrcGUrIi52bWwiLExDKHBlLG90WyIh''@;'; put 'put ''Y29tbWVudHMiXSxvdFsiIWNvbnRyb2xzIl0sb3QpKSxvdFsiIWxlZ2FjeUhGIl0mJlJrKGFlLDAscGUsb3RbIiFwcmludCJdLmltYWdlcyk7dmFyIEt0PSgiY2hhcnQiPT1vdFsiIXR5cGUiXT9bb3RdOm90WyIhY2hhcnRzIl18fFtdKS5jb25jYXQoKG90WyIhaW1hZ2VzIl18fFtdKS5tYXAo''@;'; put 'put ''ZnVuY3Rpb24oVG4pe3JldHVybiBUblsiIXR5cGUiXXx8KFRuWyIhdHlwZSJdPSJpbWFnZSIpLFRufSkpLmNvbmNhdCgob3RbIiFzaGFwZXMiXXx8W10pLm1hcChmdW5jdGlvbihUbil7cmV0dXJuIFRuWyIhdHlwZSJdfHwoVG5bIiF0eXBlIl09InNoYXBlIiksVG59KSk7S3QmJkt0Lmxlbmd0''@;'; put 'put ''aCYmKHR5cGVvZiB3cml0ZV9kcmF3aW5nXzwidSI/d3JpdGVfZHJhd2luZ18oYWUsUSxwZSxvdCxLdCk6KEJuKGFlLCJ4bC9kcmF3aW5ncy9kcmF3aW5nIitwZSsiLnhtbCIsYUIoKSksUS5kcmF3aW5ncy5wdXNoKCJ4bC9kcmF3aW5ncy9kcmF3aW5nIitwZSsiLnhtbCIpKSksZGVsZXRlIG90''@;'; put 'put ''WyIhY29tbWVudHMiXSxkZWxldGUgb3RbIiFsZWdhY3kiXSxkZWxldGUgb3RbIiFsZWdhY3lIRiJdfW90JiZvdFsiIXBpdm90cyJdJiYieG1sIj09ayYmdHlwZW9mIHdyaXRlX3Bpdm90X3htbDwidSImJm90WyIhcGl2b3RzIl0uZm9yRWFjaCh1dCksRXRbIiFpZCJdLnJJZDEmJkJuKGFlLE5y''@;'; put 'put ''KGdlKSxraShFdCkpLG90JiZvdFsiIXRhYmxlcyJdJiYieG1sIj09ayYmb3RbIiF0YWJsZXMiXS5mb3JFYWNoKGV0KX1yZXR1cm4gbnVsbCE9Ui5TdHJpbmdzJiZSLlN0cmluZ3MubGVuZ3RoPjAmJihCbihhZSxnZT0ieGwvc2hhcmVkU3RyaW5ncy4iK2ssb0koUi5TdHJpbmdzLGdlLFIpKSxR''@;'; put 'put ''LnN0cnMucHVzaChnZSksRXIoUi53YnJlbHMsLTEsInNoYXJlZFN0cmluZ3MuIitrLHFvLlNTVCkpLCJ4bWwiPT1rJiZ0eXBlb2Ygd3JpdGVfcGl2b3RfeG1sPCJ1IiYmd3JpdGVfcGl2b3RfeG1sKE5lLFMsYWUsUSxSKSwieG1sIj09ayYmZnVuY3Rpb24gTDQoUyxSLGssRyl7Uy5mb3JFYWNo''@;'; put 'put ''KGZ1bmN0aW9uKFEsYWUpe3ZhciBnZT1SLlNoZWV0c1tSLlNoZWV0TmFtZXNbUVswXV1dLHBlPSJ4bC90YWJsZXMvdGFibGUiKyhRWzBdKzEpKyJfIitRWzFdKyIueG1sIjtHLnRhYmxlcy5wdXNoKHBlKTt2YXIgeWU9UVsyXS5yZWZ8fGdlWyIhcmVmIl07InN0cmluZyIhPXR5cGVvZiB5ZSYm''@;'; put 'put ''KHllPW9vKHllKSk7dmFyIFBlPWFhKHllKSxOZT1RWzJdLm5hbWV8fCJzanN0YmxfIitRWzBdKyJfIitRWzFdLFllPVtJaV0sZXQ9IVp0KFFbMl0uaGVhZGVyKSx1dD1ldCYmIVp0KFFbMl0uZmlsdGVyKTtZZS5wdXNoKCc8dGFibGUgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm9wZW54bWxmb3Jt''@;'; put 'put ''YXRzLm9yZy9zcHJlYWRzaGVldG1sLzIwMDYvbWFpbiIgaWQ9IicrKGFlKzEpKyciIG5hbWU9IicrT3IoTmUpKyciIGRpc3BsYXlOYW1lPSInK09yKE5lKSsnIiByZWY9IicreWUrJyIgJysobnVsbCE9UVsyXS5oZWFkZXImJjEhPVFbMl0uaGVhZGVyPydoZWFkZXJSb3dDb3VudD0iJysoUVsy''@;'; put 'put ''XS5oZWFkZXJ8fDApKyciICc6IiIpKyI+IiksdXQmJlllLnB1c2goJzxhdXRvRmlsdGVyIHJlZj0iJyt5ZSsnIi8+JyksWWUucHVzaCgnPHRhYmxlQ29sdW1ucyBjb3VudD0iJysoUGUuZS5jLVBlLnMuYysxKSsnIj4nKTtmb3IodmFyIEV0PVtdLG90PVBlLnMuYztvdDw9UGUuZS5jOysrb3Qp''@;'; put 'put ''aWYoZXQpe2Zvcih2YXIgYnQ9WGkoe3I6UGUucy5yLGM6b3R9KSxCdD1nZVtidF0sa3Q9UVsyXS5jb2xzJiZRWzJdLmNvbHNbb3QtUGUucy5jXSYmUVsyXS5jb2xzW290LVBlLnMuY10ubmFtZXx8QnQmJihCdC53fHxCdC52KXx8IkNvbHVtbiAiKyhvdC1QZS5zLmMrMSksT3Q9a3QsS3Q9MTtF''@;'; put 'put ''dC5pbmRleE9mKE90KT4tMSYmKytLdDwxNjM4NDspT3Q9a3QrS3Q7aWYoT3QhPWt0KXRocm93InRhYmxlIGNvbHVtbnMgIitvdCsiIGFuZCAiKyhFdC5pbmRleE9mKGt0KStQZS5zLmMpKyIgaGF2ZSB0aGUgc2FtZSBoZWFkZXIgJyIra3QrIic7IHRyeSBzZXR0aW5nIGNlbGwgIitidCsiIHRv''@;'; put 'put ''ICciK090KyInIjtFdC5wdXNoKE90KSxZZS5wdXNoKCc8dGFibGVDb2x1bW4gaWQ9IicrKFFbMl0uY29scyYmUVsyXS5jb2xzW290LVBlLnMuY10mJm51bGwhPVFbMl0uY29sc1tvdC1QZS5zLmNdLmlkP1FbMl0uY29sc1tvdC1QZS5zLmNdLmlkOm90LVBlLnMuYysxKSsnIiBuYW1lPSInK09y''@;'; put 'put ''KE90KSsnIi8+Jyl9ZWxzZSBZZS5wdXNoKFFbMl0uY29scyYmUVsyXS5jb2xzW290LVBlLnMuY10/Jzx0YWJsZUNvbHVtbiBpZD0iJytRWzJdLmNvbHNbb3QtUGUucy5jXS5pZCsnIiBuYW1lPSInK1FbMl0uY29sc1tvdC1QZS5zLmNdLm5hbWUrJyIvPic6Jzx0YWJsZUNvbHVtbiBpZD0iJyso''@;'; put 'put ''b3QtUGUucy5jKzEpKyciIHVuaXF1ZU5hbWU9IicrKG90LVBlLnMuYysxKSsnIiBuYW1lPSInKyhvdC1QZS5zLmMrMSkrJyIvPicpO1llLnB1c2goIjwvdGFibGVDb2x1bW5zPiIpO3ZhciBpcj0rKCExIT09KFFbMl0uc3R5bGV8fHt9KS5yb3dzdHJpcGUpLFNuPSshIShRWzJdLnN0eWxlfHx7''@;'; put 'put ''fSkuY29sc3RyaXBlLHNyPSshIShRWzJdLnN0eWxlfHx7fSkuY29sZmlyc3QsSm49KyEhKFFbMl0uc3R5bGV8fHt9KS5jb2xsYXN0LFZuPShRWzJdLnN0eWxlfHx7fSkubmFtZXx8Ik1lZGl1bTkiO1ZuPVZuLm1hdGNoKC9eKExpZ2h0fE1lZGl1bXxEYXJrKVxkKyQvKT8iVGFibGVTdHlsZSIr''@;'; put 'put ''Vm46Vm4sWWUucHVzaCgnPHRhYmxlU3R5bGVJbmZvIG5hbWU9IicrVm4rJyIgc2hvd0ZpcnN0Q29sdW1uPSInK3NyKyciIHNob3dMYXN0Q29sdW1uPSInK0puKyciIHNob3dSb3dTdHJpcGVzPSInK2lyKyciIHNob3dDb2x1bW5TdHJpcGVzPSInK1NuKyciLz4nKSxZZS5wdXNoKCI8L3RhYmxl''@;'; put 'put ''PiIpLEJuKGsscGUsWWUuam9pbigiIikpfSl9KFllLFMsYWUsUSksInhtbCI9PWsmJihTLkV4dGVybmFsV0J8fFtdKS5sZW5ndGgmJmZ1bmN0aW9uIElDKFMsUixrKXtrLmxpbmtzfHwoay5saW5rcz1bXSksUy5FeHRlcm5hbFdCJiZTLkV4dGVybmFsV0IuZm9yRWFjaChmdW5jdGlvbihHLFEp''@;'; put 'put ''e3ZhciBhZT0iL3hsL2V4dGVybmFsTGlua3MvX3JlbHMvZXh0ZXJuYWxMaW5rIisoUSsxKSsiLnhtbC5yZWxzIixnZT17fTtFcihnZSwtMSxHLlRhcmdldCxHLk1pc3Npbmc/cW8uWE1JU1M6cW8uWFBBVEgpLEJuKFIsVGMoYWUpLGtpKGdlKSk7dmFyIHBlPSIveGwvZXh0ZXJuYWxMaW5rcy9l''@;'; put 'put ''eHRlcm5hbExpbmsiKyhRKzEpKyIueG1sIjtrLmxpbmtzLnB1c2gocGUpLEJuKFIsVGMocGUpLGZ1bmN0aW9uIHJCKFMpe3ZhciBSPVtJaSxuQl07cmV0dXJuKFMuU2hlZXROYW1lc3x8W10pLmxlbmd0aCYmKFIucHVzaCgnPGV4dGVybmFsQm9vayB4bWxuczpyPSJodHRwOi8vc2NoZW1hcy5v''@;'; put 'put ''cGVueG1sZm9ybWF0cy5vcmcvb2ZmaWNlRG9jdW1lbnQvMjAwNi9yZWxhdGlvbnNoaXBzIiByOmlkPSJySWQxIj4nKSxSLnB1c2goIjxzaGVldE5hbWVzPiIpLFMuU2hlZXROYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKGspe1IucHVzaCgnPHNoZWV0TmFtZSB2YWw9IicrT3IoaykrJyIvPicpfSks''@;'; put 'put ''Ui5wdXNoKCI8L3NoZWV0TmFtZXM+IiksUi5wdXNoKCI8c2hlZXREYXRhU2V0PiIpLFMuU2hlZXROYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKGssRyl7dmFyIFE9Uy5TaGVldHNba10sYWU9e3NoZWV0SWQ6R30sZ2U9bnVsbDtpZihudWxsPT1RKWFlLnJlZnJlc2hFcnJvcj0xO2Vsc2UgaWYoUVsi''@;'; put 'put ''IXJlZiJdKXt2YXIgcGU9U3MoUVsiIXJlZiJdKTtnZT0iIjtmb3IodmFyIHllPXBlLnMucjt5ZTw9cGUuZS5yOysreWUpe2Zvcih2YXIgUGU9IiIsTmU9cGUucy5jO05lPD1wZS5lLmM7KytOZSl7dmFyIFllPVhpKHtyOnllLGM6TmV9KTtRW1llXSYmKFBlfHwoUGU9Jzxyb3cgcj0iJysoeWUr''@;'; put 'put ''MSkrJyI+JyksUGUrPSc8Y2VsbCByPSInK1llKyciJysoUVtZZV0udD8nIHQ9IicrUVtZZV0udCsnIic6IiIpKyI+PHY+IitPcihRW1llXS52KSsiPC92PjwvY2VsbD4iKX1QZSYmKGdlKz1QZSsiPC9yb3c+Iil9fVIucHVzaChGcigic2hlZXREYXRhIixnZSxhZSkpfSksUi5wdXNoKCI8L3No''@;'; put 'put ''ZWV0RGF0YVNldD4iKSxSLnB1c2goIjwvZXh0ZXJuYWxCb29rPiIpKSxSLmxlbmd0aD4yJiYoUltSLmxlbmd0aF09IjwvZXh0ZXJuYWxMaW5rPiIsUlsxXT1SWzFdLnJlcGxhY2UoIi8+IiwiPiIpKSxSLmpvaW4oIiIpfShHKSl9KX0oUyxhZSxRKSwieG1sIj09ayYmZnVuY3Rpb24ga0MoUyl7''@;'; put 'put ''dmFyIFIsaztTLldvcmtib29rfHwoUy5Xb3JrYm9vaz17TmFtZXM6W119KSxTLldvcmtib29rLk5hbWVzfHwoUy5Xb3JrYm9vay5OYW1lcz1bXSk7Zm9yKHZhciBHPVMuV29ya2Jvb2suTmFtZXMsUT0wO1E8Uy5TaGVldE5hbWVzLmxlbmd0aDsrK1Epe3ZhciBhZT1TLlNoZWV0TmFtZXNbUV0s''@;'; put 'put ''Z2U9Uy5TaGVldHNbYWVdO2lmKGdlJiZnZVsiIXByaW50Il0pe3ZhciBwZT0iJyIrYWUrIichIix5ZT1nZVsiIXByaW50Il07aWYoeWUpe3ZhciBQZT0hKFI9eWUuYXJlYSksTmU9IShrPXllLnRpdGxlcyksWWU9Uj8ic3RyaW5nIj09dHlwZW9mIFI/UjpvbyhSKToiIjtpZihSJiYoRy5mb3JF''@;'; put 'put ''YWNoKGZ1bmN0aW9uKHV0KXt1dC5TaGVldD09USYmIVBlJiYiX3hsbm0uUHJpbnRfQXJlYSI9PXV0Lk5hbWUmJihQZT0hMCx1dC5SZWY9cGUrWWUpfSksUGV8fEcucHVzaCh7TmFtZToiX3hsbm0uUHJpbnRfQXJlYSIsUmVmOnBlK1llLFNoZWV0OlF9KSksayl7dmFyIGV0PSIiO2sucy5jPi0x''@;'; put 'put ''JiZrLmUuYz4tMSYmKGV0Kz1wZStUbyhrLnMuYykrIjoiK1RvKGsuZS5jKSsiLCIpLGsucy5yPi0xJiZrLmUucj4tMSYmKGV0Kz1wZSt6aShrLnMucikrIjoiK3ppKGsuZS5yKSsiLCIpLGV0PWV0LnNsaWNlKDAsLTEpLEcuZm9yRWFjaChmdW5jdGlvbih1dCl7dXQuU2hlZXQ9PVEmJiFOZSYm''@;'; put 'put ''Il94bG5tLlByaW50X1RpdGxlcyI9PXV0Lk5hbWUmJihQZT0hMCx1dC5SZWY9ZXQpfSksTmV8fEcucHVzaCh7TmFtZToiX3hsbm0uUHJpbnRfVGl0bGVzIixSZWY6ZXQsU2hlZXQ6UX0pfX19fX0oUyksQm4oYWUsZ2U9InhsL3dvcmtib29rLiIrayxmdW5jdGlvbiB2eihTLFIsayl7cmV0dXJu''@;'; put 'put ''KCIuYmluIj09PVIuc2xpY2UoLTQpP3ZiOng4KShTLGspfShTLGdlLFIpKSxRLndvcmtib29rcy5wdXNoKGdlKSxFcihSLnJlbHMsMSxnZSxxby5XQiksQm4oYWUsZ2U9InhsL3RoZW1lL3RoZW1lMS54bWwiLCRWKFMuVGhlbWVzLFIpKSxRLnRoZW1lcy5wdXNoKGdlKSxFcihSLndicmVscywt''@;'; put 'put ''MSwidGhlbWUvdGhlbWUxLnhtbCIscW8uVEhFTUUpLEJuKGFlLGdlPSJ4bC9zdHlsZXMuIitrLGZ1bmN0aW9uIE5TKFMsUixrKXtyZXR1cm4oIi5iaW4iPT09Ui5zbGljZSgtNCk/Q2s6TnYpKFMsayl9KFMsZ2UsUikpLFEuc3R5bGVzLnB1c2goZ2UpLEVyKFIud2JyZWxzLC0xLCJzdHlsZXMu''@;'; put 'put ''IitrLHFvLlNUWSksUy52YmFyYXcmJkcmJihCbihhZSxnZT0ieGwvdmJhUHJvamVjdC5iaW4iLFMudmJhcmF3KSxRLnZiYS5wdXNoKGdlKSxFcihSLndicmVscywtMSwidmJhUHJvamVjdC5iaW4iLHFvLlZCQSkpLFMubW9kZWwmJlMubW9kZWwubGVuZ3RoJiYoQm4oYWUsInhsL21vZGVsL2l0''@;'; put 'put ''ZW0uZGF0YSIsUy5tb2RlbCksRXIoUi53YnJlbHMsLTEsIm1vZGVsL2l0ZW0uZGF0YSIscW8uUFdSUEQpKSxTLmNvbm4mJihCbihhZSwieGwvY29ubmVjdGlvbnMueG1sIixTLmNvbm4pLFEuY29ubnMucHVzaCgiL3hsL2Nvbm5lY3Rpb25zLnhtbCIpLEVyKFIud2JyZWxzLC0xLCJjb25uZWN0''@;'; put 'put ''aW9ucy54bWwiLHFvLkNPTk4pKSxTLkN1c3RvbVhNTCYmUy5DdXN0b21YTUwuZm9yRWFjaChmdW5jdGlvbihUbixpcil7aWYoQm4oYWUsImN1c3RvbVhtbC9pdGVtIisoaXIrMSkrIi54bWwiLFRuLmRhdGEpLEVyKFIud2JyZWxzLC0xLCIuLi9jdXN0b21YbWwvaXRlbSIrKGlyKzEpKyIueG1s''@;'; put 'put ''Iixxby5DWE1MKSxUbi5wcm9wcyl7Qm4oYWUsImN1c3RvbVhtbC9pdGVtUHJvcHMiKyhpcisxKSsiLnhtbCIsVG4ucHJvcHMpLFEuY3VzdG9teG1scHJvcHMucHVzaCgiL2N1c3RvbVhtbC9pdGVtUHJvcHMiKyhpcisxKSsiLnhtbCIpO3ZhciBTbj17fTtFcihTbiwtMSwiaXRlbVByb3BzIiso''@;'; put 'put ''aXIrMSkrIi54bWwiLHFvLkNYTUxQKSxCbihhZSwiY3VzdG9tWG1sL19yZWxzL2l0ZW0iKyhpcisxKSsiLnhtbC5yZWxzIixraShTbikpfX0pLEJuKGFlLCJbQ29udGVudF9UeXBlc10ueG1sIixmdW5jdGlvbiBWdyhTLFIsayl7dmFyIFEsRz1bXTtrfHwoR1tHLmxlbmd0aF09SWksR1tHLmxl''@;'; put 'put ''bmd0aF09dXYsRz1HLmNvbmNhdChOdykpO3ZhciBhZT1mdW5jdGlvbih5ZSl7U1t5ZV0mJlNbeWVdLmxlbmd0aD4wJiYoR1tHLmxlbmd0aF09RnIoIk92ZXJyaWRlIixudWxsLHtQYXJ0TmFtZTooIi8iPT0oUT1TW3llXVswXSlbMF0/IiI6Ii8iKStRLENvbnRlbnRUeXBlOnN2W3llXVtSLmJv''@;'; put 'put ''b2tUeXBlfHwieGxzeCJdfSkpfSxnZT1mdW5jdGlvbih5ZSl7KFNbeWVdfHxbXSkuZm9yRWFjaChmdW5jdGlvbihQZSl7R1tHLmxlbmd0aF09RnIoIk92ZXJyaWRlIixudWxsLHtQYXJ0TmFtZTooIi8iPT1QZVswXT8iIjoiLyIpK1BlLENvbnRlbnRUeXBlOnN2W3llXVtSLmJvb2tUeXBlfHwi''@;'; put 'put ''eGxzeCJdfSl9KX0scGU9ZnVuY3Rpb24oeWUpeyhTW3llXXx8W10pLmZvckVhY2goZnVuY3Rpb24oUGUpe0dbRy5sZW5ndGhdPUZyKCJPdmVycmlkZSIsbnVsbCx7UGFydE5hbWU6KCIvIj09UGVbMF0/IiI6Ii8iKStQZSxDb250ZW50VHlwZTpsdlt5ZV1bMF19KX0pfTtyZXR1cm4gYWUoIndv''@;'; put 'put ''cmtib29rcyIpLGdlKCJzaGVldHMiKSxnZSgiY2hhcnRzIikscGUoInRoZW1lcyIpLFsic3RycyIsInN0eWxlcyIsImNvbm5zIl0uZm9yRWFjaChhZSksWyJjb3JlcHJvcHMiLCJleHRwcm9wcyIsImN1c3Rwcm9wcyJdLmZvckVhY2gocGUpLHBlKCJ2YmEiKSxwZSgiY29tbWVudHMiKSxwZSgi''@;'; put 'put ''ZHJhd2luZ3MiKSxnZSgidGFibGVzIiksZ2UoInBpdm90cyIpLGdlKCJwaXZvdGNhY2hlcyIpLGdlKCJwaXZvdHJlY29yZHMiKSxwZSgiZGF0YW1vZGVscyIpLHBlKCJjdHJscHJvcHMiKSxwZSgiY2hhcnRvYmpzIikscGUoImNoYXJ0c3R5bGVzIikscGUoImNoYXJ0Y29sb3JzIikscGUoImNo''@;'; put 'put ''YXJ0ZXhzIiksZ2UoImxpbmtzIikscGUoImN1c3RvbXhtbHByb3BzIiksIWsmJkcubGVuZ3RoPjImJihHW0cubGVuZ3RoXT0iPC9UeXBlcz4iLEdbMV09R1sxXS5yZXBsYWNlKCIvPiIsIj4iKSksRy5qb2luKCIiKX0oUSxSKSksQm4oYWUsIl9yZWxzLy5yZWxzIixraShSLnJlbHMpKSxCbihh''@;'; put 'put ''ZSwieGwvX3JlbHMvd29ya2Jvb2suIitrKyIucmVscyIsa2koUi53YnJlbHMpKSxkZWxldGUgUi5Gb250cyxkZWxldGUgUi5GaWxscyxkZWxldGUgUi5Cb3JkZXJzLGRlbGV0ZSBSLnJldnNzZixkZWxldGUgUi5zc2YsYWV9ZnVuY3Rpb24gSlMoUyxSKXt2YXIgaz0iIjtzd2l0Y2goKFJ8fHt9''@;'; put 'put ''KS50eXBlfHwiYmFzZTY0Iil7Y2FzZSJidWZmZXIiOmNhc2UiYXJyYXkiOnJldHVybltTWzBdLFNbMV0sU1syXSxTWzNdLFNbNF0sU1s1XSxTWzZdLFNbN11dO2Nhc2UiYmFzZTY0IjprPV9lLmRlY29kZShTLnNsaWNlKDAsMTIpKTticmVhaztjYXNlImJpbmFyeSI6az1TO2JyZWFrO2RlZmF1''@;'; put 'put ''bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiKyhSJiZSLnR5cGV8fCJ1bmRlZmluZWQiKSl9cmV0dXJuW2suY2hhckNvZGVBdCgwKSxrLmNoYXJDb2RlQXQoMSksay5jaGFyQ29kZUF0KDIpLGsuY2hhckNvZGVBdCgzKSxrLmNoYXJDb2RlQXQoNCksay5jaGFyQ29kZUF0''@;'; put 'put ''KDUpLGsuY2hhckNvZGVBdCg2KSxrLmNoYXJDb2RlQXQoNyldfWZ1bmN0aW9uIFFTKFMsUil7dmFyIGs9MDtlOmZvcig7azxTLmxlbmd0aDspc3dpdGNoKFMuY2hhckNvZGVBdChrKSl7Y2FzZSAxMDpjYXNlIDEzOmNhc2UgMzI6KytrO2JyZWFrO2Nhc2UgNjA6cmV0dXJuIGs4KFMuc2xpY2Uo''@;'; put 'put ''ayksUik7ZGVmYXVsdDpicmVhayBlfXJldHVybiBGMy50b193b3JrYm9vayhTLFIpfWZ1bmN0aW9uIEliKFMsUixrLEcpe3JldHVybiBHPyhrLnR5cGU9InN0cmluZyIsRjMudG9fd29ya2Jvb2soUyxrKSk6RjMudG9fd29ya2Jvb2soUixrKX1mdW5jdGlvbiBXNShTLFIpe3ZhciBrPUEuZ2V0''@;'; put 'put ''bG9jYWxlKCk7b2UoQSksQS5zZXRsb2NhbGUoayksVygpO3ZhciBHPVJ8fHt9O2lmKHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJlMgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcilyZXR1cm4gVzUobmV3IFVpbnQ4QXJyYXkoUyksKChHPXF0KEcpKS50eXBlPSJhcnJheSIsRykpO3ZhciBhZSxRPVMs''@;'; put 'put ''Z2U9ITE7aWYoeGYoTWY9Ry5QUEl8fFpzKSxHLmNlbGxTdHlsZXMmJihHLmNlbGxORj0hMCxHLnNoZWV0U3R1YnM9ITApLHM4PXt9LEcuZGF0ZU5GJiYoczguZGF0ZU5GPUcuZGF0ZU5GKSxHLnR5cGV8fChHLnR5cGU9VGUmJkJ1ZmZlci5pc0J1ZmZlcihTKT8iYnVmZmVyIjoiYmFzZTY0Iiks''@;'; put 'put ''ImZpbGUiPT1HLnR5cGUmJihHLnR5cGU9VGU/ImJ1ZmZlciI6ImJpbmFyeSIsUT1mdW5jdGlvbiBGZShTKXtpZih0eXBlb2YgWGU8InUiKXJldHVybiBYZS5yZWFkRmlsZVN5bmMoUyk7aWYodHlwZW9mICQ8InUiJiZ0eXBlb2YgRmlsZTwidSImJnR5cGVvZiBGb2xkZXI8InUiKXRyeXt2YXIg''@;'; put 'put ''Uj1GaWxlKFMpO1Iub3BlbigiciIpLFIuZW5jb2Rpbmc9ImJpbmFyeSI7dmFyIGs9Ui5yZWFkKCk7cmV0dXJuIFIuY2xvc2UoKSxrfWNhdGNoKEcpe2lmKCFHLm1lc3NhZ2V8fCFHLm1lc3NhZ2UubWF0Y2goL29uc3RydWN0LykpdGhyb3cgR310aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBhY2Nl''@;'; put 'put ''c3MgZmlsZSAiK1MpfShTKSksInN0cmluZyI9PUcudHlwZSYmKGdlPSEwLEcudHlwZT0iYmluYXJ5IixHLmNvZGVwYWdlPTY1MDAxLFE9ZnVuY3Rpb24gQmMoUyl7cmV0dXJuIFMubWF0Y2goL1teXHgwMC1ceDdGXS8pP05zKFMpOlN9KFMpKSwiYXJyYXkiPT1HLnR5cGUmJnR5cGVvZiBVaW50''@;'; put 'put ''OEFycmF5PCJ1IiYmUyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJnR5cGVvZiBBcnJheUJ1ZmZlcjwidSIpe3ZhciBwZT1uZXcgQXJyYXlCdWZmZXIoMykseWU9bmV3IFVpbnQ4QXJyYXkocGUpO2lmKHllLmZvbz0iYmFyIiwheWUuZm9vKXJldHVybihHPXF0KEcpKS50eXBlPSJhcnJheSIsVzUo''@;'; put 'put ''SChRKSxHKX1zd2l0Y2goKGFlPUpTKFEsRykpWzBdKXtjYXNlIDIwODppZigyMDc9PT1hZVsxXSYmMTc9PT1hZVsyXSYmMjI0PT09YWVbM10mJjE2MT09PWFlWzRdJiYxNzc9PT1hZVs1XSYmMjY9PT1hZVs2XSYmMjI1PT09YWVbN10pcmV0dXJuIGZ1bmN0aW9uIGd0KFMsUil7cmV0dXJuIHZl''@;'; put 'put ''LmZpbmQoUywiRW5jcnlwdGVkUGFja2FnZSIpP0RiKFMsUik6R1MoUyxSKX0odmUucmVhZChRLEcpLEcpO2JyZWFrO2Nhc2UgOTppZihhZVsxXTw9OClyZXR1cm4gR1MoUSxHKTticmVhaztjYXNlIDYwOnJldHVybiBrOChRLEcpO2Nhc2UgNzM6aWYoNzM9PT1hZVsxXSYmNDI9PT1hZVsyXSYm''@;'; put 'put ''MD09PWFlWzNdKXRocm93IG5ldyBFcnJvcigiVElGRiBJbWFnZSBGaWxlIGlzIG5vdCBhIHNwcmVhZHNoZWV0Iik7aWYoNjg9PT1hZVsxXSlyZXR1cm4gZnVuY3Rpb24gWEEoUyxSKXt2YXIgaz1SfHx7fSxHPSEhay5XVEY7ay5XVEY9ITA7dHJ5e3ZhciBRPWxDLnRvX3dvcmtib29rKFMsayk7''@;'; put 'put ''cmV0dXJuIGsuV1RGPUcsUX1jYXRjaChhZSl7aWYoay5XVEY9RywhYWUubWVzc2FnZS5tYXRjaCgvU1lMSyBiYWQgcmVjb3JkIElELykmJkcpdGhyb3cgYWU7cmV0dXJuIEYzLnRvX3dvcmtib29rKFMsUil9fShRLEcpO2JyZWFrO2Nhc2UgODQ6aWYoNjU9PT1hZVsxXSYmNjY9PT1hZVsyXSYm''@;'; put 'put ''NzY9PT1hZVszXSlyZXR1cm4gTXYudG9fd29ya2Jvb2soUSxHKTticmVhaztjYXNlIDgwOnJldHVybiA3NT09PWFlWzFdJiZhZVsyXTw5JiZhZVszXTw5P2Z1bmN0aW9uIElJKFMsUil7dmFyIEc9UyxRPVJ8fHt9O3JldHVybiBRLnR5cGV8fChRLnR5cGU9VGUmJkJ1ZmZlci5pc0J1ZmZlcihT''@;'; put 'put ''KT8iYnVmZmVyIjoiYmFzZTY0IiksSjMoY24oRyxRKSxRKX0oUSxHKTpJYihTLFEsRyxnZSk7Y2FzZSAyMzk6cmV0dXJuIDYwPT09YWVbM10/azgoUSxHKTpJYihTLFEsRyxnZSk7Y2FzZSAyNTU6aWYoMjU0PT09YWVbMV0pcmV0dXJuIGZ1bmN0aW9uIFd6KFMsUil7dmFyIGs9UztyZXR1cm4i''@;'; put 'put ''YmFzZTY0Ij09Ui50eXBlJiYoaz1fZS5kZWNvZGUoaykpLGs9Y3B0YWJsZS51dGlscy5kZWNvZGUoMTIwMCxrLnNsaWNlKDIpLCJzdHIiKSxSLnR5cGU9ImJpbmFyeSIsUVMoayxSKX0oUSxHKTticmVhaztjYXNlIDA6aWYoMD09PWFlWzFdJiZhZVsyXT49MiYmMD09PWFlWzNdKXJldHVybiB4''@;'; put 'put ''di50b193b3JrYm9vayhRLEcpO2JyZWFrO2Nhc2UgMzpjYXNlIDEzMTpjYXNlIDEzOTpjYXNlIDE0MDpyZXR1cm4gUDMudG9fd29ya2Jvb2soUSxHKTtjYXNlIDEyMzppZig5Mj09PWFlWzFdJiYxMTQ9PT1hZVsyXSYmMTE2PT09YWVbM10pcmV0dXJuIEx2LnRvX3dvcmtib29rKFEsRyk7YnJl''@;'; put 'put ''YWs7Y2FzZSAxMDpjYXNlIDEzOmNhc2UgMzI6cmV0dXJuIGZ1bmN0aW9uIFp6KFMsUil7dmFyIGs9IiIsRz1KUyhTLFIpO3N3aXRjaChSLnR5cGUpe2Nhc2UiYmFzZTY0IjprPV9lLmRlY29kZShTKTticmVhaztjYXNlImJpbmFyeSI6az1TO2JyZWFrO2Nhc2UiYnVmZmVyIjprPVMudG9TdHJp''@;'; put 'put ''bmcoImJpbmFyeSIpO2JyZWFrO2Nhc2UiYXJyYXkiOms9ZHQoUyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCB0eXBlICIrUi50eXBlKX1yZXR1cm4gMjM5PT1HWzBdJiYxODc9PUdbMV0mJjE5MT09R1syXSYmKGs9Z2EoaykpLFFTKGssUil9KFEsRyl9cmV0''@;'; put 'put ''dXJuIFAzLnZlcnNpb25zLmluZGV4T2YoYWVbMF0pPi0xJiZhZVsyXTw9MTImJmFlWzNdPD0zMT9QMy50b193b3JrYm9vayhRLEcpOkliKFMsUSxHLGdlKX1mdW5jdGlvbiBBYyhTLFIpe3ZhciBrPVJ8fHt9O3JldHVybiBrLnR5cGU9ImZpbGUiLFc1KFMsayl9ZnVuY3Rpb24gWTUoUyxSKXtz''@;'; put 'put ''d2l0Y2goUi50eXBlKXtjYXNlImJhc2U2NCI6Y2FzZSJiaW5hcnkiOmJyZWFrO2Nhc2UiYnVmZmVyIjpjYXNlImFycmF5IjpSLnR5cGU9IiI7YnJlYWs7Y2FzZSJmaWxlIjpyZXR1cm4gRGUoUi5maWxlLHZlLndyaXRlKFMse3R5cGU6VGU/ImJ1ZmZlciI6IiJ9KSk7Y2FzZSJzdHJpbmciOnRo''@;'; put 'put ''cm93IG5ldyBFcnJvcigiJ3N0cmluZycgb3V0cHV0IHR5cGUgaW52YWxpZCBmb3IgJyIrUi5ib29rVHlwZSsiJyBmaWxlcyIpO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK1IudHlwZSl9cmV0dXJuIHZlLndyaXRlKFMsUil9ZnVuY3Rpb24gcjEoUyxSLGsp''@;'; put 'put ''e2t8fChrPSIiKTt2YXIgRz1rK1M7c3dpdGNoKFIudHlwZSl7Y2FzZSJiYXNlNjQiOnJldHVybiBfZS5lbmNvZGUoTnMoRykpO2Nhc2UiYmluYXJ5IjpyZXR1cm4gTnMoRyk7Y2FzZSJzdHJpbmciOnJldHVybiBTO2Nhc2UiZmlsZSI6cmV0dXJuIERlKFIuZmlsZSxHLCJ1dGY4Iik7Y2FzZSJi''@;'; put 'put ''dWZmZXIiOnJldHVybiBUZT9TZShHLCJ1dGY4Iik6cjEoRyx7dHlwZToiYmluYXJ5In0pLnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24oUSl7cmV0dXJuIFEuY2hhckNvZGVBdCgwKX0pfXRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitSLnR5cGUpfWZ1bmN0aW9uIGVNKFMsUil7''@;'; put 'put ''c3dpdGNoKFIudHlwZSl7Y2FzZSJzdHJpbmciOmNhc2UiYmFzZTY0IjpjYXNlImJpbmFyeSI6Zm9yKHZhciBrPSIiLEc9MDtHPFMubGVuZ3RoOysrRylrKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFNbR10pO3JldHVybiJiYXNlNjQiPT1SLnR5cGU/X2UuZW5jb2RlKGspOiJzdHJpbmciPT1SLnR5''@;'; put 'put ''cGU/Z2Eoayk6aztjYXNlImZpbGUiOnJldHVybiBEZShSLmZpbGUsUyk7Y2FzZSJidWZmZXIiOnJldHVybiBTO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK1IudHlwZSl9fWZ1bmN0aW9uIEY4KFMsUil7VygpLGZ1bmN0aW9uIEpEKFMpe2lmKCFTfHwhUy5T''@;'; put 'put ''aGVldE5hbWVzfHwhUy5TaGVldHMpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFdvcmtib29rIik7aWYoIVMuU2hlZXROYW1lcy5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJXb3JrYm9vayBpcyBlbXB0eSIpOyFmdW5jdGlvbiBYRChTLFIsayl7Uy5mb3JFYWNoKGZ1bmN0aW9uKEcsUSl7cGIo''@;'; put 'put ''Ryk7Zm9yKHZhciBhZT0wO2FlPFE7KythZSlpZihHPT1TW2FlXSl0aHJvdyBuZXcgRXJyb3IoIkR1cGxpY2F0ZSBTaGVldCBOYW1lOiAiK0cpO2lmKGspe3ZhciBnZT1SJiZSW1FdJiZSW1FdLkNvZGVOYW1lfHxHO2lmKDk1PT1nZS5jaGFyQ29kZUF0KDApJiZnZS5sZW5ndGg+MjIpdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKCJCYWQgQ29kZSBOYW1lOiBXb3Jrc2hlZXQiK2dlKX19KX0oUy5TaGVldE5hbWVzLFMuV29ya2Jvb2smJlMuV29ya2Jvb2suU2hlZXRzfHxbXSwhIVMudmJhcmF3KTtmb3IodmFyIGs9MDtrPFMuU2hlZXROYW1lcy5sZW5ndGg7KytrKWxEKFMuU2hlZXRzW1MuU2hlZXROYW1l''@;'; put 'put ''c1trXV0sMCxrKX0oUyk7dmFyIGs9Unx8e307aWYoay5jZWxsU3R5bGVzJiYoay5jZWxsTkY9ITAsay5zaGVldFN0dWJzPSEwKSwiYXJyYXkiPT1rLnR5cGUpe2sudHlwZT0iYmluYXJ5Ijt2YXIgRz1GOChTLGspO3JldHVybiBrLnR5cGU9ImFycmF5Iix4KEcpfXN3aXRjaChrLmJvb2tUeXBl''@;'; put 'put ''fHwieGxzYiIpe2Nhc2UieG1sIjpjYXNlInhsbWwiOnJldHVybiByMShnSShTLGspLGspO2Nhc2Uic2xrIjpjYXNlInN5bGsiOnJldHVybiByMShIeihTLGspLGspO2Nhc2UiaHRtIjpjYXNlImh0bWwiOnJldHVybiByMShQeihTLGspLGspO2Nhc2UidHh0IjpyZXR1cm4gZnVuY3Rpb24gTGIo''@;'; put 'put ''UyxSKXtzd2l0Y2goUi50eXBlKXtjYXNlImJhc2U2NCI6cmV0dXJuIF9lLmVuY29kZShTKTtjYXNlImJpbmFyeSI6Y2FzZSJzdHJpbmciOnJldHVybiBTO2Nhc2UiZmlsZSI6cmV0dXJuIERlKFIuZmlsZSxTLCJiaW5hcnkiKTtjYXNlImJ1ZmZlciI6cmV0dXJuIFRlP1NlKFMsImJpbmFyeSIp''@;'; put 'put ''OlMuc3BsaXQoIiIpLm1hcChmdW5jdGlvbihrKXtyZXR1cm4gay5jaGFyQ29kZUF0KDApfSl9dGhyb3cgbmV3IEVycm9yKCJVbnJlY29nbml6ZWQgdHlwZSAiK1IudHlwZSl9KE56KFMsayksayk7Y2FzZSJjc3YiOnJldHVybiByMShGeihTLGspLGssIlx1ZmVmZiIpO2Nhc2UiZGlmIjpyZXR1''@;'; put 'put ''cm4gcjEodmQoUyxrKSxrKTtjYXNlImRiZiI6cmV0dXJuIGVNKFVuZShTLGspLGspO2Nhc2UicHJuIjpyZXR1cm4gcjEoeEkoUyxrKSxrKTtjYXNlInJ0ZiI6cmV0dXJuIHIxKEVJKFMsayksayk7Y2FzZSJldGgiOnJldHVybiByMShUSShTLGspLGspO2Nhc2UiZm9kcyI6cmV0dXJuIHIxKE1J''@;'; put 'put ''KFMsayksayk7Y2FzZSJiaWZmMiI6ay5iaWZmfHwoay5iaWZmPTIpO2Nhc2UiYmlmZjMiOmsuYmlmZnx8KGsuYmlmZj0zKTtjYXNlImJpZmY0IjpyZXR1cm4gay5iaWZmfHwoay5iaWZmPTQpLGVNKHlJKFMsayksayk7Y2FzZSJiaWZmNSI6ay5iaWZmfHwoay5iaWZmPTUpO2Nhc2UiYmlmZjgi''@;'; put 'put ''OmNhc2UieGxhIjpjYXNlInhscyI6cmV0dXJuIGsuYmlmZnx8KGsuYmlmZj04KSxmdW5jdGlvbiBSYihTLFIpe3ZhciBrPVJ8fHt9O3JldHVybiBZNShmdW5jdGlvbiBJbmUoUyxSKXt2YXIgaz1SfHx7fSxHPXZlLnV0aWxzLmNmYl9uZXcoe3Jvb3Q6IlIifSksUT0iL1dvcmtib29rIjtzd2l0''@;'; put 'put ''Y2goay5ib29rVHlwZXx8InhscyIpe2Nhc2UieGxzIjprLmJvb2tUeXBlPSJiaWZmOCI7Y2FzZSJ4bGEiOmsuYm9va1R5cGV8fChrLmJvb2tUeXBlPSJ4bGEiKTtjYXNlImJpZmY4IjpRPSIvV29ya2Jvb2siLGsuYmlmZj04O2JyZWFrO2Nhc2UiYmlmZjUiOlE9Ii9Cb29rIixrLmJpZmY9NTti''@;'; put 'put ''cmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiaW52YWxpZCB0eXBlICIray5ib29rVHlwZSsiIGZvciBYTFMgQ0ZCIil9cmV0dXJuIHZlLnV0aWxzLmNmYl9hZGQoRyxRLHlJKFMsaykpLDg9PWsuYmlmZiYmKFMuUHJvcHN8fFMuQ3VzdHByb3BzKSYmZnVuY3Rpb24gRG5lKFMsUil7dmFy''@;'; put 'put ''IGdlLGs9W10sRz1bXSxRPVtdLGFlPTA7aWYoUy5Qcm9wcylmb3IoZ2U9UmUoUy5Qcm9wcyksYWU9MDthZTxnZS5sZW5ndGg7KythZSkoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGM1LGdlW2FlXSk/azpPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwo''@;'; put 'put ''ZGYsZ2VbYWVdKT9HOlEpLnB1c2goW2dlW2FlXSxTLlByb3BzW2dlW2FlXV1dKTtpZihTLkN1c3Rwcm9wcylmb3IoZ2U9UmUoUy5DdXN0cHJvcHMpLGFlPTA7YWU8Z2UubGVuZ3RoOysrYWUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKFMuUHJvcHN8fHt9LGdlW2FlXSl8''@;'; put 'put ''fChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYzUsZ2VbYWVdKT9rOk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkZixnZVthZV0pP0c6USkucHVzaChbZ2VbYWVdLFMuQ3VzdHByb3BzW2dlW2FlXV1dKTt2YXIgcGU9W107Zm9yKGFlPTA7YWU8US5s''@;'; put 'put ''ZW5ndGg7KythZSlINi5pbmRleE9mKFFbYWVdWzBdKT4tMXx8bnVsbCE9UVthZV1bMV0mJnBlLnB1c2goUVthZV0pO0cubGVuZ3RoJiZ2ZS51dGlscy5jZmJfYWRkKFIsIi9ceDA1U3VtbWFyeUluZm9ybWF0aW9uIixVaShHLHdiLlNJLGRmLGw1KSksKGsubGVuZ3RofHxwZS5sZW5ndGgpJiZ2''@;'; put 'put ''ZS51dGlscy5jZmJfYWRkKFIsIi9ceDA1RG9jdW1lbnRTdW1tYXJ5SW5mb3JtYXRpb24iLFVpKGssd2IuRFNJLGM1LGY0LHBlLmxlbmd0aD9wZTpudWxsLHdiLlVESSkpfShTLEcpLDg9PWsuYmlmZiYmUy52YmFyYXcmJmZ1bmN0aW9uIEhrKFMsUil7Ui5GdWxsUGF0aHMuZm9yRWFjaChmdW5j''@;'; put 'put ''dGlvbihrLEcpe2lmKDAhPUcpe3ZhciBRPWsucmVwbGFjZSgvW15cL10qW1wvXS8sIi9fVkJBX1BST0pFQ1RfQ1VSLyIpOyIvIiE9PVEuc2xpY2UoLTEpJiZ2ZS51dGlscy5jZmJfYWRkKFMsUSxSLkZpbGVJbmRleFtHXS5jb250ZW50KX19KX0oRyx2ZS5yZWFkKFMudmJhcmF3LHt0eXBlOiJz''@;'; put 'put ''dHJpbmciPT10eXBlb2YgUy52YmFyYXc/ImJpbmFyeSI6ImJ1ZmZlciJ9KSksR30oUyxrKSxrKX0oUyxrKTtjYXNlInhsc3giOmNhc2UieGxzbSI6Y2FzZSJ4bGFtIjpjYXNlInhsc2IiOmNhc2Uib2RzIjpyZXR1cm4gZnVuY3Rpb24gRzUoUyxSKXt2YXIgaz1SfHx7fSxHPVA4KFMsayksUT17''@;'; put 'put ''fTtpZihrLmNvbXByZXNzaW9uJiYoUS5jb21wcmVzc2lvbj0iREVGTEFURSIpLGsucGFzc3dvcmQpUS50eXBlPVRlPyJub2RlYnVmZmVyIjoic3RyaW5nIjtlbHNlIHN3aXRjaChrLnR5cGUpe2Nhc2UiYmFzZTY0IjpRLnR5cGU9ImJhc2U2NCI7YnJlYWs7Y2FzZSJiaW5hcnkiOlEudHlwZT0i''@;'; put 'put ''c3RyaW5nIjticmVhaztjYXNlInN0cmluZyI6dGhyb3cgbmV3IEVycm9yKCInc3RyaW5nJyBvdXRwdXQgdHlwZSBpbnZhbGlkIGZvciAnIitrLmJvb2tUeXBlKyInIGZpbGVzIik7Y2FzZSJidWZmZXIiOmNhc2UiZmlsZSI6US50eXBlPVRlPyJub2RlYnVmZmVyIjoic3RyaW5nIjticmVhaztk''@;'; put 'put ''ZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIHR5cGUgIitrLnR5cGUpfXZhciBhZT1HLkZ1bGxQYXRocz92ZS53cml0ZShHLHtmaWxlVHlwZToiemlwIix0eXBlOntub2RlYnVmZmVyOiJidWZmZXIiLHN0cmluZzoiYmluYXJ5In1bUS50eXBlXXx8US50eXBlfSk6Ry5nZW5l''@;'; put 'put ''cmF0ZShRKTtyZXR1cm4gay5wYXNzd29yZCYmdHlwZW9mIGp6PCJ1Ij9ZNShqeihhZSxrLnBhc3N3b3JkKSxrKToiZmlsZSI9PT1rLnR5cGU/RGUoay5maWxlLGFlKToic3RyaW5nIj09ay50eXBlP2dhKGFlKTphZX0oUyxrKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVk''@;'; put 'put ''IGJvb2tUeXBlIHwiK2suYm9va1R5cGUrInwiKX19ZnVuY3Rpb24gdE0oUyl7aWYoIVMuYm9va1R5cGUpe3ZhciBrPVMuZmlsZS5zbGljZShTLmZpbGUubGFzdEluZGV4T2YoIi4iKSkudG9Mb3dlckNhc2UoKTtrLm1hdGNoKC9eXC5bYS16XSskLykmJihTLmJvb2tUeXBlPWsuc2xpY2UoMSkp''@;'; put 'put ''LFMuYm9va1R5cGU9e3hsczoiYmlmZjgiLGh0bToiaHRtbCIsc2xrOiJzeWxrIixzb2NpYWxjYWxjOiJldGgiLFNoMzN0SlM6IldURiJ9W1MuYm9va1R5cGVdfHxTLmJvb2tUeXBlfX1mdW5jdGlvbiBIOChTLFIsayl7dmFyIEc9a3x8e307cmV0dXJuIEcudHlwZT0iZmlsZSIsRy5maWxlPVIs''@;'; put 'put ''dE0oRyksRjgoUyxHKX1mdW5jdGlvbiByTShTLFIsayxHLFEsYWUsZ2UscGUpe3ZhciB5ZT16aShrKSxQZT1wZS5kZWZ2YWwsTmU9cGUucmF3LFllPSEwLGV0PTE9PT1RP1tdOnt9O2lmKDEhPT1RKWlmKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSl0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV0''@;'; put 'put ''LCJfX3Jvd051bV9fIix7dmFsdWU6ayxlbnVtZXJhYmxlOiExfSl9Y2F0Y2h7ZXQuX19yb3dOdW1fXz1rfWVsc2UgZXQuX19yb3dOdW1fXz1rO2lmKCFnZXx8U1trXSlmb3IodmFyIHV0PVIucy5jO3V0PD1SLmUuYzsrK3V0KXt2YXIgRXQ9Z2U/U1trXVt1dF06U1tHW3V0XSt5ZV07aWYodm9p''@;'; put 'put ''ZCAwIT09RXQmJnZvaWQgMCE9PUV0LnQpe3ZhciBvdD1FdC52O3N3aXRjaChFdC50KXtjYXNlInoiOmlmKG51bGw9PW90KWJyZWFrO2NvbnRpbnVlO2Nhc2UiZSI6b3Q9MD09b3Q/bnVsbDp2b2lkIDA7YnJlYWs7Y2FzZSJzIjpjYXNlImQiOmNhc2UiYiI6Y2FzZSJuIjpicmVhaztkZWZhdWx0''@;'; put 'put ''OnRocm93IG5ldyBFcnJvcigidW5yZWNvZ25pemVkIHR5cGUgIitFdC50KX1pZihudWxsIT1hZVt1dF0pe2lmKG51bGw9PW90KWlmKCJlIj09RXQudCYmbnVsbD09PW90KWV0W2FlW3V0XV09bnVsbDtlbHNlIGlmKHZvaWQgMCE9PVBlKWV0W2FlW3V0XV09UGU7ZWxzZXtpZighTmV8fG51bGwh''@;'; put 'put ''PT1vdCljb250aW51ZTtldFthZVt1dF1dPW51bGx9ZWxzZSBldFthZVt1dF1dPU5lP290OmJsKEV0LG90LHBlKTtudWxsIT1vdCYmKFllPSExKX19ZWxzZXtpZih2b2lkIDA9PT1QZSljb250aW51ZTtudWxsIT1hZVt1dF0mJihldFthZVt1dF1dPVBlKX19cmV0dXJue3JvdzpldCxpc2VtcHR5''@;'; put 'put ''OlllfX1mdW5jdGlvbiBZNChTLFIpe2lmKG51bGw9PVN8fG51bGw9PVNbIiFyZWYiXSlyZXR1cm5bXTt2YXIgaz17dDoibiIsdjowfSxHPTAsUT0xLGFlPVtdLGdlPTAscGU9IiIseWU9SlNPTi5wYXJzZSgneyJzIjp7InIiOjAsImMiOjB9LCJlIjp7InIiOjAsImMiOjB9fScpLFBlPVJ8fHt9''@;'; put 'put ''LE5lPW51bGwhPVBlLnJhbmdlP1BlLnJhbmdlOlNbIiFyZWYiXTtzd2l0Y2goMT09PVBlLmhlYWRlcj9HPTE6IkEiPT09UGUuaGVhZGVyP0c9MjpBcnJheS5pc0FycmF5KFBlLmhlYWRlcik/Rz0zOm51bGw9PVBlLmhlYWRlciYmKEc9MCksdHlwZW9mIE5lKXtjYXNlInN0cmluZyI6eWU9YWEo''@;'; put 'put ''TmUpO2JyZWFrO2Nhc2UibnVtYmVyIjooeWU9YWEoU1siIXJlZiJdKSkucy5yPU5lO2JyZWFrO2RlZmF1bHQ6eWU9TmV9Rz4wJiYoUT0wKTt2YXIgWWU9emkoeWUucy5yKSxldD1bXSx1dD1bXSxFdD0wLG90PTAsYnQ9QXJyYXkuaXNBcnJheShTKSxCdD15ZS5zLnIsa3Q9MCxPdD0wO2Zvcihi''@;'; put 'put ''dCYmIVNbQnRdJiYoU1tCdF09W10pLGt0PXllLnMuYztrdDw9eWUuZS5jOysra3Qpc3dpdGNoKGV0W2t0XT1UbyhrdCksaz1idD9TW0J0XVtrdF06U1tldFtrdF0rWWVdLEcpe2Nhc2UgMTphZVtrdF09a3QteWUucy5jO2JyZWFrO2Nhc2UgMjphZVtrdF09ZXRba3RdO2JyZWFrO2Nhc2UgMzph''@;'; put 'put ''ZVtrdF09UGUuaGVhZGVyW2t0LXllLnMuY107YnJlYWs7ZGVmYXVsdDpmb3IobnVsbD09ayYmKGs9SlNPTi5wYXJzZSgneyJ3IjogIl9fRU1QVFkiLCAidCI6ICJzIn0nKSkscGU9Z2U9YmwoayxudWxsLFBlKSxvdD0wLE90PTA7T3Q8YWUubGVuZ3RoOysrT3QpYWVbT3RdPT1wZSYmKHBlPWdl''@;'; put 'put ''KyJfIisgKytvdCk7YWVba3RdPXBlfWZvcihCdD15ZS5zLnIrUTtCdDw9eWUuZS5yOysrQnQpe3ZhciBLdD1yTShTLHllLEJ0LGV0LEcsYWUsYnQsUGUpOyghMT09PUt0LmlzZW1wdHl8fCgxPT09Rz8hMSE9PVBlLmJsYW5rcm93czpQZS5ibGFua3Jvd3MpKSYmKHV0W0V0KytdPUt0LnJvdyl9''@;'; put 'put ''cmV0dXJuIHV0Lmxlbmd0aD1FdCx1dH12YXIgZzI9LyIvZztmdW5jdGlvbiBSSShTLFIsayxHLFEsYWUsZ2UscGUpe2Zvcih2YXIgeWU9ITAsUGU9W10sTmU9IiIsWWU9emkoayksZXQ9Ui5zLmM7ZXQ8PVIuZS5jOysrZXQpaWYoR1tldF0pe3ZhciB1dD1wZS5kZW5zZT8oU1trXXx8W10pW2V0''@;'; put 'put ''XTpTW0dbZXRdK1llXTtpZihudWxsPT11dClOZT0iIjtlbHNlIGlmKG51bGwhPXV0LnYpe3llPSExLE5lPSIiK2JsKHV0LG51bGwscGUpO2Zvcih2YXIgRXQ9MCxvdD0wO0V0IT09TmUubGVuZ3RoOysrRXQpaWYoKG90PU5lLmNoYXJDb2RlQXQoRXQpKT09PVF8fG90PT09YWV8fDM0PT09b3Qp''@;'; put 'put ''e05lPSciJytOZS5yZXBsYWNlKGcyLCciIicpKyciJzticmVha30iSUQiPT1OZSYmKE5lPSciSUQiJyl9ZWxzZSBudWxsPT11dC5mfHx1dC5GP05lPSIiOih5ZT0hMSwoTmU9Ij0iK3V0LmYpLmluZGV4T2YoIiwiKT49MCYmKE5lPSciJytOZS5yZXBsYWNlKGcyLCciIicpKyciJykpO1BlLnB1''@;'; put 'put ''c2goTmUpfXJldHVybiExPT09cGUuYmxhbmtyb3dzJiZ5ZT9udWxsOlBlLmpvaW4oZ2UpfWZ1bmN0aW9uIEMwKFMsUil7dmFyIGs9W10sRz1SPz97fTtpZihudWxsPT1TfHxudWxsPT1TWyIhcmVmIl0pcmV0dXJuIiI7dmFyIFE9YWEoU1siIXJlZiJdKSxhZT12b2lkIDAhPT1HLkZTP0cuRlM6''@;'; put 'put ''IiwiLGdlPWFlLmNoYXJDb2RlQXQoMCkscGU9dm9pZCAwIT09Ry5SUz9HLlJTOiJcbiIseWU9cGUuY2hhckNvZGVBdCgwKSxQZT1uZXcgUmVnRXhwKCgifCI9PWFlPyJcXHwiOmFlKSsiKyQiKSxOZT0iIixZZT1bXTtHLmRlbnNlPUFycmF5LmlzQXJyYXkoUyk7Zm9yKHZhciBldD1HLnNraXBI''@;'; put 'put ''aWRkZW4mJlNbIiFjb2xzIl18fFtdLHV0PUcuc2tpcEhpZGRlbiYmU1siIXJvd3MiXXx8W10sRXQ9US5zLmM7RXQ8PVEuZS5jOysrRXQpKGV0W0V0XXx8e30pLmhpZGRlbnx8KFllW0V0XT1UbyhFdCkpO2Zvcih2YXIgb3Q9US5zLnI7b3Q8PVEuZS5yOysrb3QpKHV0W290XXx8e30pLmhpZGRl''@;'; put 'put ''bnx8bnVsbCE9KE5lPVJJKFMsUSxvdCxZZSxnZSx5ZSxhZSxHKSkmJihHLnN0cmlwJiYoTmU9TmUucmVwbGFjZShQZSwiIikpLGsucHVzaChOZStwZSkpO3JldHVybiBkZWxldGUgRy5kZW5zZSxrLmpvaW4oIiIpfWZ1bmN0aW9uIExJKFMsUil7Unx8KFI9e30pLFIuRlM9Ilx0IixSLlJTPSJc''@;'; put 'put ''biI7dmFyIGs9QzAoUyxSKTtyZXR1cm4gdHlwZW9mIGNwdGFibGU+InUifHwic3RyaW5nIj09Ui50eXBlP2s6Ilx4ZmZceGZlIitjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLGssInN0ciIpfWZ1bmN0aW9uIGlNKFMpe3ZhciBrLFI9IiIsRz0iIjtpZihudWxsPT1TfHxudWxsPT1TWyIhcmVm''@;'; put 'put ''Il0pcmV0dXJuW107dmFyIHBlLFE9YWEoU1siIXJlZiJdKSxhZT0iIixnZT1bXSx5ZT1bXSxQZT1BcnJheS5pc0FycmF5KFMpO2ZvcihwZT1RLnMuYztwZTw9US5lLmM7KytwZSlnZVtwZV09VG8ocGUpO2Zvcih2YXIgTmU9US5zLnI7TmU8PVEuZS5yOysrTmUpZm9yKGFlPXppKE5lKSxwZT1R''@;'; put 'put ''LnMuYztwZTw9US5lLmM7KytwZSlpZihSPWdlW3BlXSthZSxHPSIiLHZvaWQgMCE9PShrPVBlPyhTW05lXXx8W10pW3BlXTpTW1JdKSl7aWYobnVsbCE9ay5GKXtpZihSPWsuRiwhay5mKWNvbnRpbnVlO0c9ay5mLC0xPT1SLmluZGV4T2YoIjoiKSYmKFI9UisiOiIrUil9aWYobnVsbCE9ay5m''@;'; put 'put ''KUc9ay5mO2Vsc2V7aWYoInoiPT1rLnQpY29udGludWU7aWYoIm4iPT1rLnQmJm51bGwhPWsudilHPSIiK2sudjtlbHNlIGlmKCJiIj09ay50KUc9ay52PyJUUlVFIjoiRkFMU0UiO2Vsc2UgaWYodm9pZCAwIT09ay53KUc9IiciK2sudztlbHNle2lmKHZvaWQgMD09PWsudiljb250aW51ZTtH''@;'; put 'put ''PSJzIj09ay50PyInIitrLnY6IiIray52fX15ZVt5ZS5sZW5ndGhdPVIrIj0iK0d9cmV0dXJuIHllfWZ1bmN0aW9uIE9iKFMsUixrKXt2YXIgRz1rfHx7fSxRPSshRy5za2lwSGVhZGVyLGFlPVN8fHt9LGdlPTAscGU9MDtpZihhZSYmbnVsbCE9Ry5vcmlnaW4paWYoIm51bWJlciI9PXR5cGVv''@;'; put 'put ''ZiBHLm9yaWdpbilnZT1HLm9yaWdpbjtlbHNle3ZhciB5ZT0ic3RyaW5nIj09dHlwZW9mIEcub3JpZ2luP05hKEcub3JpZ2luKTpHLm9yaWdpbjtnZT15ZS5yLHBlPXllLmN9dmFyIFBlLE5lPUpTT04ucGFyc2UoJ3sicyI6IHsiYyI6MCwgInIiOjB9LCAiZSI6IHsiYyI6MCwgInIiOjB9fScp''@;'; put 'put ''O2lmKE5lLmUuYz1wZSxOZS5lLnI9Z2UrUi5sZW5ndGgtMStRLGFlWyIhcmVmIl0pe3ZhciBZZT1hYShhZVsiIXJlZiJdKTtOZS5lLmM9TWF0aC5tYXgoTmUuZS5jLFllLmUuYyksTmUuZS5yPU1hdGgubWF4KE5lLmUucixZZS5lLnIpLC0xPT1nZSYmKE5lLmUucj0oZ2U9WWUuZS5yKzEpK1Iu''@;'; put 'put ''bGVuZ3RoLTErUSl9ZWxzZS0xPT1nZSYmKGdlPTAsTmUuZS5yPVIubGVuZ3RoLTErUSk7dmFyIGV0PUcuaGVhZGVyfHxbXSx1dD0wO1IuZm9yRWFjaChmdW5jdGlvbihvdCxidCl7UmUob3QpLmZvckVhY2goZnVuY3Rpb24oQnQpey0xPT0odXQ9ZXQuaW5kZXhPZihCdCkpJiYoZXRbdXQ9ZXQu''@;'; put 'put ''bGVuZ3RoXT1CdCk7dmFyIGt0PW90W0J0XSxPdD0ieiIsS3Q9IiIsVG49WGkoe2M6cGUrdXQscjpnZStidCtRfSk7aWYoUGU9anUuc2hlZXRfZ2V0X2NlbGwoYWUsVG4pLCFrdHx8Im9iamVjdCIhPXR5cGVvZiBrdHx8a3QgaW5zdGFuY2VvZiBEYXRlKXtpZigibnVtYmVyIj09dHlwZW9mIGt0''@;'; put 'put ''P090PSJuIjoiYm9vbGVhbiI9PXR5cGVvZiBrdD9PdD0iYiI6InN0cmluZyI9PXR5cGVvZiBrdD9PdD0icyI6a3QgaW5zdGFuY2VvZiBEYXRlPyhPdD0iZCIsRy5jZWxsRGF0ZXN8fChPdD0ibiIsa3Q9UWUoa3QpKSxLdD1QZS56JiZBLmlzX2RhdGUoUGUueik/UGUuejpHLmRhdGVORnx8QS5f''@;'; put 'put ''dGFibGVbMTRdKTpudWxsPT09a3QmJkcubnVsbEVycm9yJiYoT3Q9ImUiLGt0PTApLFBlPyhQZS50PU90LFBlLnY9a3QsZGVsZXRlIFBlLncsZGVsZXRlIFBlLlIsS3QmJihQZS56PUt0KSk6YWVbVG5dPVBlPXt0Ok90LHY6a3R9LEt0JiYoUGUuej1LdCksUGUmJlBlLmgpdHJ5e2lmKFBlLlI9''@;'; put 'put ''bWQuaHRtbF90b19ycyhQZS5oKSwhUGUudil7UGUudj0iIjtmb3IodmFyIGlyPTA7aXI8UGUuUi5sZW5ndGg7KytpcilQZS52Kz1QZS5SW2lyXS52fHwiIn19Y2F0Y2h7fX1lbHNlIGFlW1RuXT1rdH0pfSksTmUuZS5jPU1hdGgubWF4KE5lLmUuYyxwZStldC5sZW5ndGgtMSk7dmFyIEV0PXpp''@;'; put 'put ''KGdlKTtpZihRKWZvcih1dD0wO3V0PGV0Lmxlbmd0aDsrK3V0KWFlW1RvKHV0K3BlKStFdF09e3Q6InMiLHY6ZXRbdXRdfTtyZXR1cm4gYWVbIiFyZWYiXT1vbyhOZSksYWV9dmFyIGp1PXtlbmNvZGVfY29sOlRvLGVuY29kZV9yb3c6emksZW5jb2RlX2NlbGw6WGksZW5jb2RlX3JhbmdlOm9v''@;'; put 'put ''LGRlY29kZV9jb2w6U28sZGVjb2RlX3JvdzpfYSxzcGxpdF9jZWxsOmZ1bmN0aW9uIEswKFMpe3JldHVybiBTLnJlcGxhY2UoLyhcJD9bQS1aXSopKFwkP1xkKikvLCIkMSwkMiIpLnNwbGl0KCIsIil9LGRlY29kZV9jZWxsOk5hLGRlY29kZV9yYW5nZTpTcyxmb3JtYXRfY2VsbDpibCxnZXRf''@;'; put 'put ''Zm9ybXVsYWU6aU0sbWFrZV9jc3Y6QzAsbWFrZV9qc29uOlk0LG1ha2VfZm9ybXVsYWU6aU0saHRtbF90b19yczptZC5odG1sX3RvX3JzLHNoZWV0X2FkZF9hb2E6dTQsc2hlZXRfYWRkX2pzb246T2Isc2hlZXRfYWRkX2RvbTp4Yixhb2FfdG9fc2hlZXQ6ZDQsanNvbl90b19zaGVldDpmdW5j''@;'; put 'put ''dGlvbiBPSShTLFIpe3JldHVybiBPYihudWxsLFMsUil9LHRhYmxlX3RvX3NoZWV0Okl6LHRhYmxlX3RvX2Jvb2s6ZnVuY3Rpb24gUnooUyxSKXtyZXR1cm4gSmQoSXooUyxSKSxSKX0sc2hlZXRfdG9fY3N2OkMwLHNoZWV0X3RvX3R4dDpMSSxzaGVldF90b19qc29uOlk0LHNoZWV0X3RvX2h0''@;'; put 'put ''bWw6bWQuZnJvbV9zaGVldCxzaGVldF90b19mb3JtdWxhZTppTSxzaGVldF90b19yb3dfb2JqZWN0X2FycmF5Olk0fTtmdW5jdGlvbiBQSShTLFIsayxHLFEpe3ZhciBhZTtpZihTLnN0eWxlJiYhKFMuX3JhbmdlJiYoYWU9InN0cmluZyI9PXR5cGVvZiBTLl9yYW5nZT93LnV0aWxzLmRlY29k''@;'; put 'put ''ZV9yYW5nZShTLl9yYW5nZSk6Uy5fcmFuZ2Usay5jPmFlLmUuY3x8ay5jPGFlLnMuY3x8ay5yPmFlLmUucnx8ay5yPGFlLnMucikpJiZhZSl7dmFyIGdlPVMuc3R5bGUuc3R5bGU7aWYoZ2Upe2dlLndob2xlVGFibGUmJmp1LmFwcGx5X3N0eWxlX2RlbHRhKEcsZ2Uud2hvbGVUYWJsZSk7ZTpp''@;'; put 'put ''ZihnZS5oZWFkZXJSb3cpaWYoUSl7aWYoay5yIT1hZS5zLnIpYnJlYWsgZTtadChTLnN0eWxlLmNvbGhlYWQpfHxqdS5hcHBseV9zdHlsZV9kZWx0YShHLGdlLmhlYWRlclJvdyl9ZWxzZXtpZihrLnIhPWFlLnMucilicmVhayBlO1p0KFMuaGVhZGVyKXx8anUuYXBwbHlfc3R5bGVfZGVsdGEo''@;'; put 'put ''RyxnZS5oZWFkZXJSb3cpfX19fWp1LnRlc3RfcGFzc3dvcmQ9ZnVuY3Rpb24gVnooUyxSKXt2YXIgaz1CdWZmZXIuZnJvbShTLnNhbHQsImJhc2U2NCIpLEc9Uy5hbGdvLFE9ZmMoQnVmZmVyLmNvbmNhdChbayxCdWZmZXIuZnJvbShjcHRhYmxlLnV0aWxzLmVuY29kZSgxMjAwLFIpKV0pLEcp''@;'; put 'put ''LGFlPUJ1ZmZlci5hbGxvYyg0KTt2bihhZSwwKTtmb3IodmFyIGdlPTA7Z2U8Uy5zcGluOysrZ2UpYWUubD0wLGFlLndyaXRlX3NoaWZ0KDQsZ2UpLFE9ZmMoQnVmZmVyLmNvbmNhdChbUSxhZV0pLEcpO3ZhciBwZT1CdWZmZXIuZnJvbShTLmhhc2gsImJhc2U2NCIpO3JldHVybiAwPT1RLmNv''@;'; put 'put ''bXBhcmUocGUpfSxqdS5oYXNoX3Bhc3N3b3JkPWZ1bmN0aW9uIEViKFMpe3ZhciBSPXthbGdvOiJTSEEtNTEyIixzYWx0OiJVMmhsWlhSS1V5NWpiMjB2ZUd4emVBPT0iLHNwaW46MWUzfSxrPUJ1ZmZlci5mcm9tKFIuc2FsdCwiYmFzZTY0IiksRz1SLmFsZ28sUT1mYyhCdWZmZXIuY29uY2F0''@;'; put 'put ''KFtrLEJ1ZmZlci5mcm9tKGNwdGFibGUudXRpbHMuZW5jb2RlKDEyMDAsUykpXSksRyksYWU9QnVmZmVyLmFsbG9jKDQpO3ZuKGFlLDApO2Zvcih2YXIgZ2U9MDtnZTxSLnNwaW47KytnZSlhZS5sPTAsYWUud3JpdGVfc2hpZnQoNCxnZSksUT1mYyhCdWZmZXIuY29uY2F0KFtRLGFlXSksRyk7''@;'; put 'put ''cmV0dXJuIFIuaGFzaD1RLnRvU3RyaW5nKCJiYXNlNjQiKSxSfSxqdS5zaGVldF9zZXRfcmFuZ2Vfc3R5bGU9ZnVuY3Rpb24oUyxSLGspe2lmKGspe3ZhciBHPSJzdHJpbmciPT10eXBlb2YgUj9hYShSKTpSO251bGwhPUcuciYmbnVsbCE9Ry5jJiYoRz17czpHLGU6R30pO3ZhciBwZSxRPUcu''@;'; put 'put ''cy5yLGFlPTAsZ2U9IiIseWU9U3MoU1siIXJlZiJdfHwiQTEiKTt5ZS5zLnI+Ry5zLnImJih5ZS5zLnI9Ry5zLnIpLHllLnMuYz5HLnMuYyYmKHllLnMuYz1HLnMuYykseWUuZS5yPEcuZS5yJiYoeWUuZS5yPUcuZS5yKSx5ZS5lLmM8Ry5lLmMmJih5ZS5lLmM9Ry5lLmMpLFNbIiFyZWYiXT1v''@;'; put 'put ''byh5ZSk7Zm9yKHZhciBOZT1BcnJheS5pc0FycmF5KFMpO1E8PUcuZS5yOysrUSlmb3IoYWU9Ry5zLmM7YWU8PUcuZS5jOysrYWUpTmU/KFNbUV18fChTW1FdPVtdKSxTW1FdW2FlXXx8KFNbUV1bYWVdPXt0OiJ6In0pLHBlPVNbUV1bYWVdKTooU1tnZT1YaSh7cjpRLGM6YWV9KV18fChTW2dl''@;'; put 'put ''XT17dDoieiJ9KSxwZT1TW2dlXSkscGUuc3x8KHBlLnM9e30pLE9iamVjdC5rZXlzKGspLmZvckVhY2goUGUpLHBlLnMucGF0dGVyblR5cGUmJiFwZS5zLmZnQ29sb3ImJihkZWxldGUgcGUucy5wYXR0ZXJuVHlwZSxkZWxldGUgcGUucy5iZ0NvbG9yKSwocGUucy5mZ0NvbG9yfHxwZS5zLmJn''@;'; put 'put ''Q29sb3IpJiYibm9uZSI9PShwZS5zLnBhdHRlcm5UeXBlfHwibm9uZSIpJiYocGUucy5wYXR0ZXJuVHlwZT0ic29saWQiKTtpZihRPUcucy5yLGsudG9wfHxudWxsPT09ay50b3ApZm9yKGFlPUcucy5jO2FlPD1HLmUuYzsrK2FlKXtpZihOZSl7aWYoIVNbUV0pY29udGludWU7cGU9U1tRXVth''@;'; put 'put ''ZV19ZWxzZSBnZT1YaSh7cjpRLGM6YWV9KSxwZT1TW2dlXTtwZSYmKG51bGw9PT1rLnRvcD9kZWxldGUgcGUucy50b3A6cGUucy50b3A9cXQoay50b3ApKX1pZihRPUcuZS5yLGsuYm90dG9tfHxudWxsPT09ay5ib3R0b20pZm9yKGFlPUcucy5jO2FlPD1HLmUuYzsrK2FlKXtpZihOZSl7aWYo''@;'; put 'put ''IVNbUV0pY29udGludWU7cGU9U1tRXVthZV19ZWxzZSBnZT1YaSh7cjpRLGM6YWV9KSxwZT1TW2dlXTtwZSYmKG51bGw9PT1rLmJvdHRvbT9kZWxldGUgcGUucy5ib3R0b206cGUucy5ib3R0b209cXQoay5ib3R0b20pKX1pZihhZT1HLnMuYyxrLmxlZnR8fG51bGw9PT1rLmxlZnQpZm9yKFE9''@;'; put 'put ''Ry5zLnI7UTw9Ry5lLnI7KytRKXtpZihOZSl7aWYoIVNbUV0pY29udGludWU7cGU9U1tRXVthZV19ZWxzZSBnZT1YaSh7cjpRLGM6YWV9KSxwZT1TW2dlXTtwZSYmKG51bGw9PT1rLmxlZnQ/ZGVsZXRlIHBlLnMubGVmdDpwZS5zLmxlZnQ9cXQoay5sZWZ0KSl9aWYoYWU9Ry5lLmMsay5yaWdo''@;'; put 'put ''dHx8bnVsbD09PWsucmlnaHQpZm9yKFE9Ry5zLnI7UTw9Ry5lLnI7KytRKXtpZihOZSl7aWYoIVNbUV0pY29udGludWU7cGU9U1tRXVthZV19ZWxzZSBnZT1YaSh7cjpRLGM6YWV9KSxwZT1TW2dlXTtwZSYmKG51bGw9PT1rLnJpZ2h0P2RlbGV0ZSBwZS5zLnJpZ2h0OnBlLnMucmlnaHQ9cXQo''@;'; put 'put ''ay5yaWdodCkpfX1mdW5jdGlvbiBQZShZZSl7aWYoInRvcCIhPVllJiYiYm90dG9tIiE9WWUmJiJsZWZ0IiE9WWUmJiJyaWdodCIhPVllKXtpZigieiI9PVllKXJldHVybiB2b2lkKHBlLno9ay56KTtpZigiYWxpZ25tZW50Ij09WWUpcmV0dXJuIHZvaWQocGUuc1tZZV0/T2JqZWN0LmtleXMo''@;'; put 'put ''a1tZZV0pLmZvckVhY2goZnVuY3Rpb24oZXQpe3BlLnNbWWVdW2V0XT1rW1llXVtldF19KTpwZS5zW1llXT1xdChrW1llXSkpO2lmKCJpbmNvbCI9PVllKXJldHVybiBhZT5HLnMuYyYmKG51bGw9PT1rLmxlZnQ/ZGVsZXRlIHBlLnMubGVmdDpwZS5zLmxlZnQ9Im9iamVjdCI9PXR5cGVvZiBr''@;'; put 'put ''W1llXT9xdChrW1llXSk6a1tZZV0pLHZvaWQoYWU8Ry5lLmMmJihudWxsPT09ay5yaWdodD9kZWxldGUgcGUucy5yaWdodDpwZS5zLnJpZ2h0PSJvYmplY3QiPT10eXBlb2Yga1tZZV0/cXQoa1tZZV0pOmtbWWVdKSk7aWYoImlucm93Ij09WWUpcmV0dXJuIFE+Ry5zLnImJihudWxsPT09ay50''@;'; put 'put ''b3A/ZGVsZXRlIHBlLnMudG9wOnBlLnMudG9wPSJvYmplY3QiPT10eXBlb2Yga1tZZV0/cXQoa1tZZV0pOmtbWWVdKSx2b2lkKFE8Ry5lLnImJihudWxsPT09ay5ib3R0b20/ZGVsZXRlIHBlLnMuYm90dG9tOnBlLnMuYm90dG9tPSJvYmplY3QiPT10eXBlb2Yga1tZZV0/cXQoa1tZZV0pOmtb''@;'; put 'put ''WWVdKSk7bnVsbD09PWtbWWVdP2RlbGV0ZSBwZS5zW1llXTpwZS5zW1llXT1rW1llXSYmQXJyYXkuaXNBcnJheShrW1llXSk/a1tZZV0uc2xpY2UoKS5tYXAoZnVuY3Rpb24oZXQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZXQ/cXQoZXQpOmV0fSk6Im9iamVjdCI9PXR5cGVvZiBrW1llXT9x''@;'; put 'put ''dChrW1llXSk6a1tZZV19fX0sanUuYXBwbHlfc3R5bGVfZGVsdGE9ZnVuY3Rpb24oUyxSKXtbInN6IiwiYm9sZCIsIml0YWxpYyIsInVuZGVybGluZSIsInN0cmlrZSIsIm5hbWUiLCJ2YWxpZ24iXS5mb3JFYWNoKGZ1bmN0aW9uKGspe3ZhciBHPWs7ImJnQ29sb3IiPT1rP0c9ImZnQ29sb3Ii''@;'; put 'put ''OiJmZ0NvbG9yIj09ayYmKEc9ImJnQ29sb3IiKSxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoUixrKSYmKG51bGw9PT1SW2tdP2RlbGV0ZSBTW0ddOm51bGwhPVJba10mJihTW0ddPVJba10pKX0pLFsibGVmdCIsInJpZ2h0IiwidG9wIiwiYm90dG9tIiwiYWxpZ25tZW50''@;'; put 'put ''IiwicHJvdGVjdGlvbiIsImNvbG9yIiwiZmdDb2xvciIsImJnQ29sb3IiXS5mb3JFYWNoKGZ1bmN0aW9uKGspe09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChSLGspJiYobnVsbD09PVJba10/ZGVsZXRlIFNba106bnVsbCE9UltrXSYmKFNba109cXQoUltrXSkpKX0pfSxq''@;'; put 'put ''dS5nZXRfY29tcHV0ZWRfc3R5bGU9ZnVuY3Rpb24oUyxSKXsic3RyaW5nIj09dHlwZW9mIFImJihSPXcudXRpbHMuZGVjb2RlX2NlbGwoUikpO3ZhciBrPUFycmF5LmlzQXJyYXkoUyk/KFNbUi5yXXx8W10pW1IuY106U1t3LnV0aWxzLmVuY29kZV9jZWxsKFIpXSxHPXF0KGsmJmsuc3x8e30p''@;'; put 'put ''O3JldHVybiBTWyIhdGFibGVzIl0mJlNbIiF0YWJsZXMiXS5mb3JFYWNoKGZ1bmN0aW9uKFEpe1BJKFEsMCxSLEcpfSksU1siIXBpdm90cyJdJiZTWyIhcGl2b3RzIl0uZm9yRWFjaChmdW5jdGlvbihRKXtQSShRLDAsUixHLCEwKX0pLEd9O3ZhciBGYj17fTtqdS5jZWxsX2FycmF5X3RvX2Nz''@;'; put 'put ''dl9yb3c9ZnVuY3Rpb24oUyxSKXt2YXIgaz1SPz97fSxHPXZvaWQgMCE9PWsuRlM/ay5GUzoiLCIsUT1HLmNoYXJDb2RlQXQoMCksYWU9dm9pZCAwIT09ay5SUz9rLlJTOiJcbiIsZ2U9YWUuY2hhckNvZGVBdCgwKSxwZT1GYltHXXx8KEZiW0ddPW5ldyBSZWdFeHAoKCJ8Ij09Rz8iXFx8IjpH''@;'; put 'put ''KSsiKyQiKSkseWU9ZnVuY3Rpb24gUGIoUyxSLGssRyxRKXtmb3IodmFyIGFlPSEwLGdlPVtdLHBlPSIiLHllPTA7eWU8PVMubGVuZ3RoLTE7Kyt5ZSl7dmFyIFBlPVNbeWVdO2lmKG51bGw9PVBlKXBlPSIiO2Vsc2UgaWYobnVsbCE9UGUudil7YWU9ITEscGU9IiIrYmwoUGUsbnVsbCxRKTtm''@;'; put 'put ''b3IodmFyIE5lPTAsWWU9MDtOZSE9PXBlLmxlbmd0aDsrK05lKWlmKChZZT1wZS5jaGFyQ29kZUF0KE5lKSk9PT1SfHxZZT09PWt8fDM0PT09WWUpe3BlPSciJytwZS5yZXBsYWNlKGcyLCciIicpKyciJzticmVha30iSUQiPT1wZSYmKHBlPSciSUQiJyl9ZWxzZSBudWxsPT1QZS5mfHxQZS5G''@;'; put 'put ''P3BlPSIiOihhZT0hMSwocGU9Ij0iK1BlLmYpLmluZGV4T2YoIiwiKT49MCYmKHBlPSciJytwZS5yZXBsYWNlKGcyLCciIicpKyciJykpO2dlLnB1c2gocGUpfXJldHVybiExPT09US5ibGFua3Jvd3MmJmFlP251bGw6Z2Uuam9pbihHKX0oUyxRLGdlLEcsayk7cmV0dXJuIGsuc3RyaXAmJih5''@;'; put 'put ''ZT15ZS5yZXBsYWNlKHBlLCIiKSkseWUrYWV9LGZ1bmN0aW9uKFMpe2Z1bmN0aW9uIGsoYWUsZ2UscGUpe3JldHVybiBudWxsIT1hZVtnZV0/YWVbZ2VdOmFlW2dlXT1wZX1mdW5jdGlvbiBHKGFlLGdlLHBlKXtpZigic3RyaW5nIj09dHlwZW9mIGdlKXtpZihBcnJheS5pc0FycmF5KGFlKSl7''@;'; put 'put ''dmFyIHllPU5hKGdlKTtyZXR1cm4gYWVbeWUucl18fChhZVt5ZS5yXT1bXSksYWVbeWUucl1beWUuY118fChhZVt5ZS5yXVt5ZS5jXT17dDoieiJ9KX1yZXR1cm4gYWVbZ2VdfHwoYWVbZ2VdPXt0OiJ6In0pfXJldHVybiBHKGFlLFhpKCJudW1iZXIiIT10eXBlb2YgZ2U/Z2U6e3I6Z2UsYzpw''@;'; put 'put ''ZXx8MH0pKX1TLmNvbnN0cz1TLmNvbnN0c3x8e30sUy5zaGVldF9nZXRfY2VsbD1HLFMuYm9va19uZXc9ZnVuY3Rpb24oKXtyZXR1cm57U2hlZXROYW1lczpbXSxTaGVldHM6e319fSxTLmJvb2tfYXBwZW5kX3NoZWV0PWZ1bmN0aW9uKGFlLGdlLHBlKXtpZighcGUpZm9yKHZhciB5ZT0xO3ll''@;'; put 'put ''PD02NTUzNSYmLTEhPWFlLlNoZWV0TmFtZXMuaW5kZXhPZihwZT0iU2hlZXQiK3llKTsrK3llKTtpZihwYihwZSksYWUuU2hlZXROYW1lcy5pbmRleE9mKHBlKT49MCl0aHJvdyBuZXcgRXJyb3IoIldvcmtzaGVldCB3aXRoIG5hbWUgfCIrcGUrInwgYWxyZWFkeSBleGlzdHMhIik7YWUuU2hl''@;'; put 'put ''ZXROYW1lcy5wdXNoKHBlKSxhZS5TaGVldHNbcGVdPWdlfSxTLmJvb2tfc2V0X3NoZWV0X3Zpc2liaWxpdHk9ZnVuY3Rpb24oYWUsZ2UscGUpe2soYWUsIldvcmtib29rIix7fSksayhhZS5Xb3JrYm9vaywiU2hlZXRzIixbXSk7dmFyIHllPWZ1bmN0aW9uIFEoYWUsZ2Upe2lmKCJudW1iZXIi''@;'; put 'put ''PT10eXBlb2YgZ2Upe2lmKGdlPj0wJiZhZS5TaGVldE5hbWVzLmxlbmd0aD5nZSlyZXR1cm4gZ2U7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBzaGVldCAjICIrZ2UpfWlmKCJzdHJpbmciPT10eXBlb2YgZ2Upe3ZhciBwZT1hZS5TaGVldE5hbWVzLmluZGV4T2YoZ2UpO2lmKHBlPi0x''@;'; put 'put ''KXJldHVybiBwZTt0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHNoZWV0IG5hbWUgfCIrZ2UrInwiKX10aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBmaW5kIHNoZWV0IHwiK2dlKyJ8Iil9KGFlLGdlKTtzd2l0Y2goayhhZS5Xb3JrYm9vay5TaGVldHMseWUse30pLHBlKXtjYXNlIDA6Y2Fz''@;'; put 'put ''ZSAxOmNhc2UgMjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiQmFkIHNoZWV0IHZpc2liaWxpdHkgc2V0dGluZyAiK3BlKX1hZS5Xb3JrYm9vay5TaGVldHNbeWVdLkhpZGRlbj1wZX0sZnVuY3Rpb24gUihhZSl7YWUuZm9yRWFjaChmdW5jdGlvbihnZSl7Uy5jb25zdHNbZ2VbMF1d''@;'; put 'put ''PWdlWzFdfSl9KFtbIlNIRUVUX1ZJU0lCTEUiLDBdLFsiU0hFRVRfSElEREVOIiwxXSxbIlNIRUVUX1ZFUllfSElEREVOIiwyXV0pLFMuY2VsbF9zZXRfbnVtYmVyX2Zvcm1hdD1mdW5jdGlvbihhZSxnZSl7cmV0dXJuIGFlLno9Z2UsYWV9LFMuY2VsbF9zZXRfaHlwZXJsaW5rPWZ1bmN0aW9u''@;'; put 'put ''KGFlLGdlLHBlKXtyZXR1cm4gZ2U/KGFlLmw9e1RhcmdldDpnZX0scGUmJihhZS5sLlRvb2x0aXA9cGUpLGFlLnN8fChhZS5zPXt9KSxhZS5zLmNvbG9yPXt0aGVtZToxMH0pOihkZWxldGUgYWUubCxhZS5zJiZhZS5zLmNvbG9yJiYxMD09YWUucy5jb2xvci50aGVtZSYmZGVsZXRlIGFlLnMu''@;'; put 'put ''Y29sb3IpLGFlfSxTLmNlbGxfc2V0X2ludGVybmFsX2xpbms9ZnVuY3Rpb24oYWUsZ2UscGUpe3JldHVybiBTLmNlbGxfc2V0X2h5cGVybGluayhhZSwiIyIrZ2UscGUpfSxTLmNlbGxfYWRkX2NvbW1lbnQ9ZnVuY3Rpb24oYWUsZ2UscGUpe2FlLmN8fChhZS5jPVtdKSxhZS5jLnB1c2goe3Q6''@;'; put 'put ''Z2UsYTpwZXx8IlNoZWV0SlMifSl9LFMuc2hlZXRfc2V0X2FycmF5X2Zvcm11bGE9ZnVuY3Rpb24oYWUsZ2UscGUpe2Zvcih2YXIgeWU9InN0cmluZyIhPXR5cGVvZiBnZT9nZTphYShnZSksUGU9InN0cmluZyI9PXR5cGVvZiBnZT9nZTpvbyhnZSksTmU9eWUucy5yO05lPD15ZS5lLnI7KytO''@;'; put 'put ''ZSlmb3IodmFyIFllPXllLnMuYztZZTw9eWUuZS5jOysrWWUpe3ZhciBldD1HKGFlLE5lLFllKTtldC50PSJuIixldC5GPVBlLGRlbGV0ZSBldC52LE5lPT15ZS5zLnImJlllPT15ZS5zLmMmJihldC5mPXBlKX1yZXR1cm4gYWV9fShqdSksVGUmJmZ1bmN0aW9uKCl7dmFyIFM9Xyg3MDQ1KS5S''@;'; put 'put ''ZWFkYWJsZTt3LnN0cmVhbT17dG9fanNvbjpmdW5jdGlvbihRLGFlKXt2YXIgZ2U9Uyh7b2JqZWN0TW9kZTohMH0pO2lmKG51bGw9PVF8fG51bGw9PVFbIiFyZWYiXSlyZXR1cm4gZ2UucHVzaChudWxsKSxnZTt2YXIgcGU9e3Q6Im4iLHY6MH0seWU9MCxQZT0xLE5lPVtdLFllPTAsZXQ9IiIs''@;'; put 'put ''dXQ9e3M6e3I6MCxjOjB9LGU6e3I6MCxjOjB9fSxFdD1hZXx8e30sb3Q9bnVsbCE9RXQucmFuZ2U/RXQucmFuZ2U6UVsiIXJlZiJdO3N3aXRjaCgxPT09RXQuaGVhZGVyP3llPTE6IkEiPT09RXQuaGVhZGVyP3llPTI6QXJyYXkuaXNBcnJheShFdC5oZWFkZXIpJiYoeWU9MyksdHlwZW9mIG90''@;'; put 'put ''KXtjYXNlInN0cmluZyI6dXQ9YWEob3QpO2JyZWFrO2Nhc2UibnVtYmVyIjoodXQ9YWEoUVsiIXJlZiJdKSkucy5yPW90O2JyZWFrO2RlZmF1bHQ6dXQ9b3R9eWU+MCYmKFBlPTApO3ZhciBidD16aSh1dC5zLnIpLEJ0PVtdLGt0PTAsT3Q9QXJyYXkuaXNBcnJheShRKSxLdD11dC5zLnIsVG49''@;'; put 'put ''MCxpcj0wO2ZvcihPdCYmIVFbS3RdJiYoUVtLdF09W10pLFRuPXV0LnMuYztUbjw9dXQuZS5jOysrVG4pc3dpdGNoKEJ0W1RuXT1UbyhUbikscGU9T3Q/UVtLdF1bVG5dOlFbQnRbVG5dK2J0XSx5ZSl7Y2FzZSAxOk5lW1RuXT1Ubi11dC5zLmM7YnJlYWs7Y2FzZSAyOk5lW1RuXT1CdFtUbl07''@;'; put 'put ''YnJlYWs7Y2FzZSAzOk5lW1RuXT1FdC5oZWFkZXJbVG4tdXQucy5jXTticmVhaztkZWZhdWx0OmZvcihudWxsPT1wZSYmKHBlPXt3OiJfX0VNUFRZIix0OiJzIn0pLGV0PVllPWJsKHBlLG51bGwsRXQpLGt0PTAsaXI9MDtpcjxOZS5sZW5ndGg7KytpcilOZVtpcl09PWV0JiYoZXQ9WWUrIl8i''@;'; put 'put ''KyArK2t0KTtOZVtUbl09ZXR9cmV0dXJuIEt0PXV0LnMucitQZSxnZS5fcmVhZD1mdW5jdGlvbigpe2lmKEt0PnV0LmUucilyZXR1cm4gZ2UucHVzaChudWxsKTtmb3IoO0t0PD11dC5lLnI7KXt2YXIgU249ck0oUSx1dCxLdCxCdCx5ZSxOZSxPdCxFdCk7aWYoKytLdCwhMT09PVNuLmlzZW1w''@;'; put 'put ''dHl8fCgxPT09eWU/ITEhPT1FdC5ibGFua3Jvd3M6RXQuYmxhbmtyb3dzKSl7Z2UucHVzaChTbi5yb3cpO2JyZWFrfX19LGdlfSx0b19odG1sOmZ1bmN0aW9uKFEsYWUpe3ZhciBnZT1TKCkscGU9YWV8fHt9LFBlPW51bGwhPXBlLmZvb3Rlcj9wZS5mb290ZXI6bWQuRU5EO2dlLnB1c2gobnVs''@;'; put 'put ''bCE9cGUuaGVhZGVyP3BlLmhlYWRlcjptZC5CRUdJTik7dmFyIE5lPVNzKFFbIiFyZWYiXSk7cGUuZGVuc2U9QXJyYXkuaXNBcnJheShRKSxnZS5wdXNoKG1kLl9wcmVhbWJsZShRLE5lLHBlKSk7dmFyIFllPU5lLnMucixldD0hMSx1dD1bXTtyZXR1cm4gZ2UuX3JlYWQ9ZnVuY3Rpb24oKXtp''@;'; put 'put ''ZihZZT5OZS5lLnIpcmV0dXJuIGV0fHwoZXQ9ITAsZ2UucHVzaCgiPC90YWJsZT4iK1BlKSksZ2UucHVzaChudWxsKTtmb3IoO1llPD1OZS5lLnI7KXtnZS5wdXNoKG1kLl9yb3coUSxOZSxZZSxwZSx1dCwiIikpLCsrWWU7YnJlYWt9fSxnZX0sdG9fY3N2OmZ1bmN0aW9uKFEsYWUpe3ZhciBn''@;'; put 'put ''ZT1TKCkscGU9YWU/P3t9O2lmKG51bGw9PVF8fG51bGw9PVFbIiFyZWYiXSlyZXR1cm4gZ2UucHVzaChudWxsKSxnZTt2YXIgeWU9YWEoUVsiIXJlZiJdKSxQZT12b2lkIDAhPT1wZS5GUz9wZS5GUzoiLCIsTmU9UGUuY2hhckNvZGVBdCgwKSxZZT12b2lkIDAhPT1wZS5SUz9wZS5SUzoiXG4i''@;'; put 'put ''LGV0PVllLmNoYXJDb2RlQXQoMCksdXQ9bmV3IFJlZ0V4cCgoInwiPT1QZT8iXFx8IjpQZSkrIiskIiksRXQ9IiIsb3Q9W107cGUuZGVuc2U9QXJyYXkuaXNBcnJheShRKTtmb3IodmFyIGJ0PXBlLnNraXBIaWRkZW4mJlFbIiFjb2xzIl18fFtdLEJ0PXBlLnNraXBIaWRkZW4mJlFbIiFyb3dz''@;'; put 'put ''Il18fFtdLGt0PXllLnMuYztrdDw9eWUuZS5jOysra3QpKGJ0W2t0XXx8e30pLmhpZGRlbnx8KG90W2t0XT1UbyhrdCkpO3ZhciBPdD15ZS5zLnIsS3Q9ITE7cmV0dXJuIGdlLl9yZWFkPWZ1bmN0aW9uKCl7aWYoIUt0KXJldHVybiBLdD0hMCxnZS5wdXNoKCJcdWZlZmYiKTtmb3IoO090PD15''@;'; put 'put ''ZS5lLnI7KWlmKCsrT3QsIShCdFtPdC0xXXx8e30pLmhpZGRlbiYmbnVsbCE9KEV0PVJJKFEseWUsT3QtMSxvdCxOZSxldCxQZSxwZSkpKXtwZS5zdHJpcCYmKEV0PUV0LnJlcGxhY2UodXQsIiIpKSxnZS5wdXNoKEV0K1llKTticmVha31yZXR1cm4gT3Q+eWUuZS5yP2dlLnB1c2gobnVsbCk6''@;'; put 'put ''dm9pZCAwfSxnZX19fSgpLHcucGFyc2VfeGxzY2ZiPUdTLHcucGFyc2VfemlwPUozLHcucmVhZD1XNSx3LnJlYWRGaWxlPUFjLHcucmVhZEZpbGVTeW5jPUFjLHcud3JpdGU9Rjgsdy53cml0ZUZpbGU9SDgsdy53cml0ZUZpbGVTeW5jPUg4LHcud3JpdGVGaWxlQXN5bmM9ZnVuY3Rpb24gbk0o''@;'; put 'put ''UyxSLGssRyl7dmFyIFE9a3x8e307US50eXBlPSJmaWxlIixRLmZpbGU9Uyx0TShRKSxRLnR5cGU9ImJ1ZmZlciI7dmFyIGFlPUc7cmV0dXJuIGFlIGluc3RhbmNlb2YgRnVuY3Rpb258fChhZT1rKSxYZS53cml0ZUZpbGUoUyxGOChSLFEpLGFlKX0sdy5zZXRfZGF0ZV9zdHlsZT1mdW5jdGlv''@;'; put 'put ''biBEdChTKXtzd2l0Y2goUyl7Y2FzZSAwOnl0KCk7YnJlYWs7Y2FzZSAxOiFmdW5jdGlvbiBNdCgpe3ZhciBTPW5ldyBEYXRlO3J0PV90LmdldFRpbWUoKSs2ZTQqKFMuZ2V0VGltZXpvbmVPZmZzZXQoKS1fdC5nZXRUaW1lem9uZU9mZnNldCgpKTt2YXIgUj1TLmdldFRpbWV6b25lT2Zmc2V0''@;'; put 'put ''KCk7UWU9ZnVuY3Rpb24oRyxRKXt2YXIgYWU9Ry5nZXRUaW1lKCk7cmV0dXJuIFEmJihhZS09MTI2MzE2OGU1KSwoYWUtKF90LmdldFRpbWUoKSs2ZTQqKEcuZ2V0VGltZXpvbmVPZmZzZXQoKS1fdC5nZXRUaW1lem9uZU9mZnNldCgpKSkpLzg2NGU1fSxkbj1mdW5jdGlvbihHKXt2YXIgUT1u''@;'; put 'put ''ZXcgRGF0ZTtyZXR1cm4gUS5zZXRUaW1lKDI0KkcqNjAqNjAqMWUzK3J0KSxRLmdldFRpbWV6b25lT2Zmc2V0KCkhPT1SJiZRLnNldFRpbWUoUS5nZXRUaW1lKCkrNmU0KihRLmdldFRpbWV6b25lT2Zmc2V0KCktUikpLFF9fSgpfX0sdy51dGlscz1qdSx3LlNTRj1BLHR5cGVvZiB2ZTwidSIm''@;'; put 'put ''Jih3LkNGQj12ZSl9KHEpfSw0OTYwOToodWUscSxfKT0+e3ZhciBJPXE7SS5iaWdudW09Xyg5Njg2NyksSS5kZWZpbmU9XygxNjYyNikuZGVmaW5lLEkuYmFzZT1fKDE1MDY2KSxJLmNvbnN0YW50cz1fKDQ3NzQwKSxJLmRlY29kZXJzPV8oOTE1NTgpLEkuZW5jb2RlcnM9XygyMjcxNCl9LDE2''@;'; put 'put ''NjI2Oih1ZSxxLF8pPT57dmFyIEk9Xyg0OTYwOSkseT1fKDcxOTkzKTtmdW5jdGlvbiBCKHcsUCl7dGhpcy5uYW1lPXcsdGhpcy5ib2R5PVAsdGhpcy5kZWNvZGVycz17fSx0aGlzLmVuY29kZXJzPXt9fXEuZGVmaW5lPWZ1bmN0aW9uKFAsRil7cmV0dXJuIG5ldyBCKFAsRil9LEIucHJvdG90''@;'; put 'put ''eXBlLl9jcmVhdGVOYW1lZD1mdW5jdGlvbihQKXt2YXIgRjt0cnl7Rj1fKDg2NjEpLnJ1bkluVGhpc0NvbnRleHQoIihmdW5jdGlvbiAiK3RoaXMubmFtZSsiKGVudGl0eSkge1xuICB0aGlzLl9pbml0TmFtZWQoZW50aXR5KTtcbn0pIil9Y2F0Y2h7Rj1mdW5jdGlvbih6KXt0aGlzLl9pbml0''@;'; put 'put ''TmFtZWQoeil9fXJldHVybiB5KEYsUCksRi5wcm90b3R5cGUuX2luaXROYW1lZD1mdW5jdGlvbih6KXtQLmNhbGwodGhpcyx6KX0sbmV3IEYodGhpcyl9LEIucHJvdG90eXBlLl9nZXREZWNvZGVyPWZ1bmN0aW9uKFApe3JldHVybiB0aGlzLmRlY29kZXJzLmhhc093blByb3BlcnR5KFA9UHx8''@;'; put 'put ''ImRlciIpfHwodGhpcy5kZWNvZGVyc1tQXT10aGlzLl9jcmVhdGVOYW1lZChJLmRlY29kZXJzW1BdKSksdGhpcy5kZWNvZGVyc1tQXX0sQi5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKFAsRixPKXtyZXR1cm4gdGhpcy5fZ2V0RGVjb2RlcihGKS5kZWNvZGUoUCxPKX0sQi5wcm90b3R5cGUu''@;'; put 'put ''X2dldEVuY29kZXI9ZnVuY3Rpb24oUCl7cmV0dXJuIHRoaXMuZW5jb2RlcnMuaGFzT3duUHJvcGVydHkoUD1QfHwiZGVyIil8fCh0aGlzLmVuY29kZXJzW1BdPXRoaXMuX2NyZWF0ZU5hbWVkKEkuZW5jb2RlcnNbUF0pKSx0aGlzLmVuY29kZXJzW1BdfSxCLnByb3RvdHlwZS5lbmNvZGU9ZnVu''@;'; put 'put ''Y3Rpb24oUCxGLE8pe3JldHVybiB0aGlzLl9nZXRFbmNvZGVyKEYpLmVuY29kZShQLE8pfX0sOTcyOTA6KHVlLHEsXyk9Pnt2YXIgST1fKDcxOTkzKSx5PV8oMTUwNjYpLlJlcG9ydGVyLGc9Xyg4MzgzOCkuQnVmZmVyO2Z1bmN0aW9uIEIoUCxGKXt5LmNhbGwodGhpcyxGKSxnLmlzQnVmZmVy''@;'; put 'put ''KFApPyh0aGlzLmJhc2U9UCx0aGlzLm9mZnNldD0wLHRoaXMubGVuZ3RoPVAubGVuZ3RoKTp0aGlzLmVycm9yKCJJbnB1dCBub3QgQnVmZmVyIil9ZnVuY3Rpb24gdyhQLEYpe2lmKEFycmF5LmlzQXJyYXkoUCkpdGhpcy5sZW5ndGg9MCx0aGlzLnZhbHVlPVAubWFwKGZ1bmN0aW9uKE8pe3Jl''@;'; put 'put ''dHVybiBPIGluc3RhbmNlb2Ygd3x8KE89bmV3IHcoTyxGKSksdGhpcy5sZW5ndGgrPU8ubGVuZ3RoLE99LHRoaXMpO2Vsc2UgaWYoIm51bWJlciI9PXR5cGVvZiBQKXtpZighKDA8PVAmJlA8PTI1NSkpcmV0dXJuIEYuZXJyb3IoIm5vbi1ieXRlIEVuY29kZXJCdWZmZXIgdmFsdWUiKTt0aGlz''@;'; put 'put ''LnZhbHVlPVAsdGhpcy5sZW5ndGg9MX1lbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgUCl0aGlzLnZhbHVlPVAsdGhpcy5sZW5ndGg9Zy5ieXRlTGVuZ3RoKFApO2Vsc2V7aWYoIWcuaXNCdWZmZXIoUCkpcmV0dXJuIEYuZXJyb3IoIlVuc3VwcG9ydGVkIHR5cGU6ICIrdHlwZW9mIFApO3RoaXMu''@;'; put 'put ''dmFsdWU9UCx0aGlzLmxlbmd0aD1QLmxlbmd0aH19SShCLHkpLHEudD1CLEIucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oKXtyZXR1cm57b2Zmc2V0OnRoaXMub2Zmc2V0LHJlcG9ydGVyOnkucHJvdG90eXBlLnNhdmUuY2FsbCh0aGlzKX19LEIucHJvdG90eXBlLnJlc3RvcmU9ZnVuY3Rpb24o''@;'; put 'put ''Ril7dmFyIE89bmV3IEIodGhpcy5iYXNlKTtyZXR1cm4gTy5vZmZzZXQ9Ri5vZmZzZXQsTy5sZW5ndGg9dGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQ9Ri5vZmZzZXQseS5wcm90b3R5cGUucmVzdG9yZS5jYWxsKHRoaXMsRi5yZXBvcnRlciksT30sQi5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiB0aGlzLm9mZnNldD09PXRoaXMubGVuZ3RofSxCLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24oRil7cmV0dXJuIHRoaXMub2Zmc2V0KzE8PXRoaXMubGVuZ3RoP3RoaXMuYmFzZS5yZWFkVUludDgodGhpcy5vZmZzZXQrKywhMCk6dGhpcy5lcnJvcihGfHwiRGVjb2Rl''@;'; put 'put ''ckJ1ZmZlciBvdmVycnVuIil9LEIucHJvdG90eXBlLnNraXA9ZnVuY3Rpb24oRixPKXtpZighKHRoaXMub2Zmc2V0K0Y8PXRoaXMubGVuZ3RoKSlyZXR1cm4gdGhpcy5lcnJvcihPfHwiRGVjb2RlckJ1ZmZlciBvdmVycnVuIik7dmFyIHo9bmV3IEIodGhpcy5iYXNlKTtyZXR1cm4gei5fcmVw''@;'; put 'put ''b3J0ZXJTdGF0ZT10aGlzLl9yZXBvcnRlclN0YXRlLHoub2Zmc2V0PXRoaXMub2Zmc2V0LHoubGVuZ3RoPXRoaXMub2Zmc2V0K0YsdGhpcy5vZmZzZXQrPUYsen0sQi5wcm90b3R5cGUucmF3PWZ1bmN0aW9uKEYpe3JldHVybiB0aGlzLmJhc2Uuc2xpY2UoRj9GLm9mZnNldDp0aGlzLm9mZnNl''@;'; put 'put ''dCx0aGlzLmxlbmd0aCl9LHEuZD13LHcucHJvdG90eXBlLmpvaW49ZnVuY3Rpb24oRixPKXtyZXR1cm4gRnx8KEY9bmV3IGcodGhpcy5sZW5ndGgpKSxPfHwoTz0wKSwwPT09dGhpcy5sZW5ndGh8fChBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpP3RoaXMudmFsdWUuZm9yRWFjaChmdW5jdGlv''@;'; put 'put ''bih6KXt6LmpvaW4oRixPKSxPKz16Lmxlbmd0aH0pOigibnVtYmVyIj09dHlwZW9mIHRoaXMudmFsdWU/RltPXT10aGlzLnZhbHVlOiJzdHJpbmciPT10eXBlb2YgdGhpcy52YWx1ZT9GLndyaXRlKHRoaXMudmFsdWUsTyk6Zy5pc0J1ZmZlcih0aGlzLnZhbHVlKSYmdGhpcy52YWx1ZS5jb3B5''@;'; put 'put ''KEYsTyksTys9dGhpcy5sZW5ndGgpKSxGfX0sMTUwNjY6KHVlLHEsXyk9Pnt2YXIgST1xO0kuUmVwb3J0ZXI9Xyg4NTY5NykuYSxJLkRlY29kZXJCdWZmZXI9Xyg5NzI5MCkudCxJLkVuY29kZXJCdWZmZXI9Xyg5NzI5MCkuZCxJLk5vZGU9XygzNDMyMCl9LDM0MzIwOih1ZSxxLF8pPT57dmFy''@;'; put 'put ''IEk9XygxNTA2NikuUmVwb3J0ZXIseT1fKDE1MDY2KS5FbmNvZGVyQnVmZmVyLGc9XygxNTA2NikuRGVjb2RlckJ1ZmZlcixCPV8oMzkyMTApLHc9WyJzZXEiLCJzZXFvZiIsInNldCIsInNldG9mIiwib2JqaWQiLCJib29sIiwiZ2VudGltZSIsInV0Y3RpbWUiLCJudWxsXyIsImVudW0iLCJp''@;'; put 'put ''bnQiLCJvYmpEZXNjIiwiYml0c3RyIiwiYm1wc3RyIiwiY2hhcnN0ciIsImdlbnN0ciIsImdyYXBoc3RyIiwiaWE1c3RyIiwiaXNvNjQ2c3RyIiwibnVtc3RyIiwib2N0c3RyIiwicHJpbnRzdHIiLCJ0NjFzdHIiLCJ1bmlzdHIiLCJ1dGY4c3RyIiwidmlkZW9zdHIiXSxQPVsia2V5Iiwib2Jq''@;'; put 'put ''IiwidXNlIiwib3B0aW9uYWwiLCJleHBsaWNpdCIsImltcGxpY2l0IiwiZGVmIiwiY2hvaWNlIiwiYW55IiwiY29udGFpbnMiXS5jb25jYXQodyk7ZnVuY3Rpb24gTyhOLEwpe3ZhciBLPXt9O3RoaXMuX2Jhc2VTdGF0ZT1LLEsuZW5jPU4sSy5wYXJlbnQ9THx8bnVsbCxLLmNoaWxkcmVuPW51''@;'; put 'put ''bGwsSy50YWc9bnVsbCxLLmFyZ3M9bnVsbCxLLnJldmVyc2VBcmdzPW51bGwsSy5jaG9pY2U9bnVsbCxLLm9wdGlvbmFsPSExLEsuYW55PSExLEsub2JqPSExLEsudXNlPW51bGwsSy51c2VEZWNvZGVyPW51bGwsSy5rZXk9bnVsbCxLLmRlZmF1bHQ9bnVsbCxLLmV4cGxpY2l0PW51bGwsSy5p''@;'; put 'put ''bXBsaWNpdD1udWxsLEsuY29udGFpbnM9bnVsbCxLLnBhcmVudHx8KEsuY2hpbGRyZW49W10sdGhpcy5fd3JhcCgpKX11ZS5leHBvcnRzPU87dmFyIHo9WyJlbmMiLCJwYXJlbnQiLCJjaGlsZHJlbiIsInRhZyIsImFyZ3MiLCJyZXZlcnNlQXJncyIsImNob2ljZSIsIm9wdGlvbmFsIiwiYW55''@;'; put 'put ''Iiwib2JqIiwidXNlIiwiYWx0ZXJlZFVzZSIsImtleSIsImRlZmF1bHQiLCJleHBsaWNpdCIsImltcGxpY2l0IiwiY29udGFpbnMiXTtPLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBMPXRoaXMuX2Jhc2VTdGF0ZSxLPXt9O3ouZm9yRWFjaChmdW5jdGlvbihXKXtLW1ddPUxbV119''@;'; put 'put ''KTt2YXIgVT1uZXcgdGhpcy5jb25zdHJ1Y3RvcihLLnBhcmVudCk7cmV0dXJuIFUuX2Jhc2VTdGF0ZT1LLFV9LE8ucHJvdG90eXBlLl93cmFwPWZ1bmN0aW9uKCl7dmFyIEw9dGhpcy5fYmFzZVN0YXRlO1AuZm9yRWFjaChmdW5jdGlvbihLKXt0aGlzW0tdPWZ1bmN0aW9uKCl7dmFyIFc9bmV3''@;'; put 'put ''IHRoaXMuY29uc3RydWN0b3IodGhpcyk7cmV0dXJuIEwuY2hpbGRyZW4ucHVzaChXKSxXW0tdLmFwcGx5KFcsYXJndW1lbnRzKX19LHRoaXMpfSxPLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihMKXt2YXIgSz10aGlzLl9iYXNlU3RhdGU7QihudWxsPT09Sy5wYXJlbnQpLEwuY2FsbCh0aGlz''@;'; put 'put ''KSxLLmNoaWxkcmVuPUsuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKFUpe3JldHVybiBVLl9iYXNlU3RhdGUucGFyZW50PT09dGhpc30sdGhpcyksQi5lcXVhbChLLmNoaWxkcmVuLmxlbmd0aCwxLCJSb290IG5vZGUgY2FuIGhhdmUgb25seSBvbmUgY2hpbGQiKX0sTy5wcm90b3R5cGUuX3Vz''@;'; put 'put ''ZUFyZ3M9ZnVuY3Rpb24oTCl7dmFyIEs9dGhpcy5fYmFzZVN0YXRlLFU9TC5maWx0ZXIoZnVuY3Rpb24oVyl7cmV0dXJuIFcgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yfSx0aGlzKTtMPUwuZmlsdGVyKGZ1bmN0aW9uKFcpe3JldHVybiEoVyBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0''@;'; put 'put ''b3IpfSx0aGlzKSwwIT09VS5sZW5ndGgmJihCKG51bGw9PT1LLmNoaWxkcmVuKSxLLmNoaWxkcmVuPVUsVS5mb3JFYWNoKGZ1bmN0aW9uKFcpe1cuX2Jhc2VTdGF0ZS5wYXJlbnQ9dGhpc30sdGhpcykpLDAhPT1MLmxlbmd0aCYmKEIobnVsbD09PUsuYXJncyksSy5hcmdzPUwsSy5yZXZlcnNl''@;'; put 'put ''QXJncz1MLm1hcChmdW5jdGlvbihXKXtpZigib2JqZWN0IiE9dHlwZW9mIFd8fFcuY29uc3RydWN0b3IhPT1PYmplY3QpcmV0dXJuIFc7dmFyIFk9e307cmV0dXJuIE9iamVjdC5rZXlzKFcpLmZvckVhY2goZnVuY3Rpb24oWCl7WD09KDB8WCkmJihYfD0wKSxZW1dbWF1dPVh9KSxZfSkpfSxb''@;'; put 'put ''Il9wZWVrVGFnIiwiX2RlY29kZVRhZyIsIl91c2UiLCJfZGVjb2RlU3RyIiwiX2RlY29kZU9iamlkIiwiX2RlY29kZVRpbWUiLCJfZGVjb2RlTnVsbCIsIl9kZWNvZGVJbnQiLCJfZGVjb2RlQm9vbCIsIl9kZWNvZGVMaXN0IiwiX2VuY29kZUNvbXBvc2l0ZSIsIl9lbmNvZGVTdHIiLCJfZW5j''@;'; put 'put ''b2RlT2JqaWQiLCJfZW5jb2RlVGltZSIsIl9lbmNvZGVOdWxsIiwiX2VuY29kZUludCIsIl9lbmNvZGVCb29sIl0uZm9yRWFjaChmdW5jdGlvbihOKXtPLnByb3RvdHlwZVtOXT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihOKyIgbm90IGltcGxlbWVudGVkIGZvciBlbmNvZGluZzogIit0''@;'; put 'put ''aGlzLl9iYXNlU3RhdGUuZW5jKX19KSx3LmZvckVhY2goZnVuY3Rpb24oTil7Ty5wcm90b3R5cGVbTl09ZnVuY3Rpb24oKXt2YXIgSz10aGlzLl9iYXNlU3RhdGUsVT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiBCKG51bGw9PT1LLnRhZyksSy50YWc9Tix0''@;'; put 'put ''aGlzLl91c2VBcmdzKFUpLHRoaXN9fSksTy5wcm90b3R5cGUudXNlPWZ1bmN0aW9uKEwpe0IoTCk7dmFyIEs9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBCKG51bGw9PT1LLnVzZSksSy51c2U9TCx0aGlzfSxPLnByb3RvdHlwZS5vcHRpb25hbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYXNl''@;'; put 'put ''U3RhdGUub3B0aW9uYWw9ITAsdGhpc30sTy5wcm90b3R5cGUuZGVmPWZ1bmN0aW9uKEwpe3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gQihudWxsPT09Sy5kZWZhdWx0KSxLLmRlZmF1bHQ9TCxLLm9wdGlvbmFsPSEwLHRoaXN9LE8ucHJvdG90eXBlLmV4cGxpY2l0PWZ1bmN0aW9uKEwp''@;'; put 'put ''e3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gQihudWxsPT09Sy5leHBsaWNpdCYmbnVsbD09PUsuaW1wbGljaXQpLEsuZXhwbGljaXQ9TCx0aGlzfSxPLnByb3RvdHlwZS5pbXBsaWNpdD1mdW5jdGlvbihMKXt2YXIgSz10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIEIobnVsbD09PUsuZXhw''@;'; put 'put ''bGljaXQmJm51bGw9PT1LLmltcGxpY2l0KSxLLmltcGxpY2l0PUwsdGhpc30sTy5wcm90b3R5cGUub2JqPWZ1bmN0aW9uKCl7dmFyIEw9dGhpcy5fYmFzZVN0YXRlLEs9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gTC5vYmo9ITAsMCE9PUsubGVuZ3RoJiZ0''@;'; put 'put ''aGlzLl91c2VBcmdzKEspLHRoaXN9LE8ucHJvdG90eXBlLmtleT1mdW5jdGlvbihMKXt2YXIgSz10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIEIobnVsbD09PUsua2V5KSxLLmtleT1MLHRoaXN9LE8ucHJvdG90eXBlLmFueT1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9iYXNlU3RhdGUuYW55PSEw''@;'; put 'put ''LHRoaXN9LE8ucHJvdG90eXBlLmNob2ljZT1mdW5jdGlvbihMKXt2YXIgSz10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIEIobnVsbD09PUsuY2hvaWNlKSxLLmNob2ljZT1MLHRoaXMuX3VzZUFyZ3MoT2JqZWN0LmtleXMoTCkubWFwKGZ1bmN0aW9uKFUpe3JldHVybiBMW1VdfSkpLHRoaXN9LE8u''@;'; put 'put ''cHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKEwpe3ZhciBLPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gQihudWxsPT09Sy51c2UpLEsuY29udGFpbnM9TCx0aGlzfSxPLnByb3RvdHlwZS5fZGVjb2RlPWZ1bmN0aW9uKEwsSyl7dmFyIFU9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1VLnBh''@;'; put 'put ''cmVudClyZXR1cm4gTC53cmFwUmVzdWx0KFUuY2hpbGRyZW5bMF0uX2RlY29kZShMLEspKTt2YXIgcmUsVz1VLmRlZmF1bHQsWT0hMCxYPW51bGw7aWYobnVsbCE9PVUua2V5JiYoWD1MLmVudGVyS2V5KFUua2V5KSksVS5vcHRpb25hbCl7dmFyIGVlPW51bGw7aWYobnVsbCE9PVUuZXhwbGlj''@;'; put 'put ''aXQ/ZWU9VS5leHBsaWNpdDpudWxsIT09VS5pbXBsaWNpdD9lZT1VLmltcGxpY2l0Om51bGwhPT1VLnRhZyYmKGVlPVUudGFnKSxudWxsIT09ZWV8fFUuYW55KXtpZihZPXRoaXMuX3BlZWtUYWcoTCxlZSxVLmFueSksTC5pc0Vycm9yKFkpKXJldHVybiBZfWVsc2V7dmFyIEo9TC5zYXZlKCk7''@;'; put 'put ''dHJ5e251bGw9PT1VLmNob2ljZT90aGlzLl9kZWNvZGVHZW5lcmljKFUudGFnLEwsSyk6dGhpcy5fZGVjb2RlQ2hvaWNlKEwsSyksWT0hMH1jYXRjaHtZPSExfUwucmVzdG9yZShKKX19aWYoVS5vYmomJlkmJihyZT1MLmVudGVyT2JqZWN0KCkpLFkpe2lmKG51bGwhPT1VLmV4cGxpY2l0KXt2''@;'; put 'put ''YXIgaWU9dGhpcy5fZGVjb2RlVGFnKEwsVS5leHBsaWNpdCk7aWYoTC5pc0Vycm9yKGllKSlyZXR1cm4gaWU7TD1pZX12YXIgbGU9TC5vZmZzZXQ7aWYobnVsbD09PVUudXNlJiZudWxsPT09VS5jaG9pY2Upe1UuYW55JiYoSj1MLnNhdmUoKSk7dmFyIG1lPXRoaXMuX2RlY29kZVRhZyhMLG51''@;'; put 'put ''bGwhPT1VLmltcGxpY2l0P1UuaW1wbGljaXQ6VS50YWcsVS5hbnkpO2lmKEwuaXNFcnJvcihtZSkpcmV0dXJuIG1lO1UuYW55P1c9TC5yYXcoSik6TD1tZX1pZihLJiZLLnRyYWNrJiZudWxsIT09VS50YWcmJksudHJhY2soTC5wYXRoKCksbGUsTC5sZW5ndGgsInRhZ2dlZCIpLEsmJksudHJh''@;'; put 'put ''Y2smJm51bGwhPT1VLnRhZyYmSy50cmFjayhMLnBhdGgoKSxMLm9mZnNldCxMLmxlbmd0aCwiY29udGVudCIpLFUuYW55fHwoVz1udWxsPT09VS5jaG9pY2U/dGhpcy5fZGVjb2RlR2VuZXJpYyhVLnRhZyxMLEspOnRoaXMuX2RlY29kZUNob2ljZShMLEspKSxMLmlzRXJyb3IoVykpcmV0dXJu''@;'; put 'put ''IFc7aWYoIVUuYW55JiZudWxsPT09VS5jaG9pY2UmJm51bGwhPT1VLmNoaWxkcmVuJiZVLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oU2Upe1NlLl9kZWNvZGUoTCxLKX0pLFUuY29udGFpbnMmJigib2N0c3RyIj09PVUudGFnfHwiYml0c3RyIj09PVUudGFnKSl7dmFyIF9lPW5ldyBnKFcp''@;'; put 'put ''O1c9dGhpcy5fZ2V0VXNlKFUuY29udGFpbnMsTC5fcmVwb3J0ZXJTdGF0ZS5vYmopLl9kZWNvZGUoX2UsSyl9fXJldHVybiBVLm9iaiYmWSYmKFc9TC5sZWF2ZU9iamVjdChyZSkpLG51bGw9PT1VLmtleXx8bnVsbD09PVcmJiEwIT09WT9udWxsIT09WCYmTC5leGl0S2V5KFgpOkwubGVhdmVL''@;'; put 'put ''ZXkoWCxVLmtleSxXKSxXfSxPLnByb3RvdHlwZS5fZGVjb2RlR2VuZXJpYz1mdW5jdGlvbihMLEssVSl7dmFyIFc9dGhpcy5fYmFzZVN0YXRlO3JldHVybiJzZXEiPT09THx8InNldCI9PT1MP251bGw6InNlcW9mIj09PUx8fCJzZXRvZiI9PT1MP3RoaXMuX2RlY29kZUxpc3QoSyxMLFcuYXJn''@;'; put 'put ''c1swXSxVKTovc3RyJC8udGVzdChMKT90aGlzLl9kZWNvZGVTdHIoSyxMLFUpOiJvYmppZCI9PT1MJiZXLmFyZ3M/dGhpcy5fZGVjb2RlT2JqaWQoSyxXLmFyZ3NbMF0sVy5hcmdzWzFdLFUpOiJvYmppZCI9PT1MP3RoaXMuX2RlY29kZU9iamlkKEssbnVsbCxudWxsLFUpOiJnZW50aW1lIj09''@;'; put 'put ''PUx8fCJ1dGN0aW1lIj09PUw/dGhpcy5fZGVjb2RlVGltZShLLEwsVSk6Im51bGxfIj09PUw/dGhpcy5fZGVjb2RlTnVsbChLLFUpOiJib29sIj09PUw/dGhpcy5fZGVjb2RlQm9vbChLLFUpOiJvYmpEZXNjIj09PUw/dGhpcy5fZGVjb2RlU3RyKEssTCxVKToiaW50Ij09PUx8fCJlbnVtIj09''@;'; put 'put ''PUw/dGhpcy5fZGVjb2RlSW50KEssVy5hcmdzJiZXLmFyZ3NbMF0sVSk6bnVsbCE9PVcudXNlP3RoaXMuX2dldFVzZShXLnVzZSxLLl9yZXBvcnRlclN0YXRlLm9iaikuX2RlY29kZShLLFUpOksuZXJyb3IoInVua25vd24gdGFnOiAiK0wpfSxPLnByb3RvdHlwZS5fZ2V0VXNlPWZ1bmN0aW9u''@;'; put 'put ''KEwsSyl7dmFyIFU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBVLnVzZURlY29kZXI9dGhpcy5fdXNlKEwsSyksQihudWxsPT09VS51c2VEZWNvZGVyLl9iYXNlU3RhdGUucGFyZW50KSxVLnVzZURlY29kZXI9VS51c2VEZWNvZGVyLl9iYXNlU3RhdGUuY2hpbGRyZW5bMF0sVS5pbXBsaWNpdCE9''@;'; put 'put ''PVUudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmltcGxpY2l0JiYoVS51c2VEZWNvZGVyPVUudXNlRGVjb2Rlci5jbG9uZSgpLFUudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmltcGxpY2l0PVUuaW1wbGljaXQpLFUudXNlRGVjb2Rlcn0sTy5wcm90b3R5cGUuX2RlY29kZUNob2ljZT1mdW5jdGlvbihM''@;'; put 'put ''LEspe3ZhciBVPXRoaXMuX2Jhc2VTdGF0ZSxXPW51bGwsWT0hMTtyZXR1cm4gT2JqZWN0LmtleXMoVS5jaG9pY2UpLnNvbWUoZnVuY3Rpb24oWCl7dmFyIGVlPUwuc2F2ZSgpLEo9VS5jaG9pY2VbWF07dHJ5e3ZhciByZT1KLl9kZWNvZGUoTCxLKTtpZihMLmlzRXJyb3IocmUpKXJldHVybiEx''@;'; put 'put ''O1c9e3R5cGU6WCx2YWx1ZTpyZX0sWT0hMH1jYXRjaHtyZXR1cm4gTC5yZXN0b3JlKGVlKSwhMX1yZXR1cm4hMH0sdGhpcyksWT9XOkwuZXJyb3IoIkNob2ljZSBub3QgbWF0Y2hlZCIpfSxPLnByb3RvdHlwZS5fY3JlYXRlRW5jb2RlckJ1ZmZlcj1mdW5jdGlvbihMKXtyZXR1cm4gbmV3IHko''@;'; put 'put ''TCx0aGlzLnJlcG9ydGVyKX0sTy5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbihMLEssVSl7dmFyIFc9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1XLmRlZmF1bHR8fFcuZGVmYXVsdCE9PUwpe3ZhciBZPXRoaXMuX2VuY29kZVZhbHVlKEwsSyxVKTtpZih2b2lkIDAhPT1ZJiYhdGhpcy5f''@;'; put 'put ''c2tpcERlZmF1bHQoWSxLLFUpKXJldHVybiBZfX0sTy5wcm90b3R5cGUuX2VuY29kZVZhbHVlPWZ1bmN0aW9uKEwsSyxVKXt2YXIgVz10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PVcucGFyZW50KXJldHVybiBXLmNoaWxkcmVuWzBdLl9lbmNvZGUoTCxLfHxuZXcgSSk7dmFyIEo9bnVsbDtp''@;'; put 'put ''Zih0aGlzLnJlcG9ydGVyPUssVy5vcHRpb25hbCYmdm9pZCAwPT09TCl7aWYobnVsbD09PVcuZGVmYXVsdClyZXR1cm47TD1XLmRlZmF1bHR9dmFyIFk9bnVsbCxYPSExO2lmKFcuYW55KUo9dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihMKTtlbHNlIGlmKFcuY2hvaWNlKUo9dGhpcy5fZW5j''@;'; put 'put ''b2RlQ2hvaWNlKEwsSyk7ZWxzZSBpZihXLmNvbnRhaW5zKVk9dGhpcy5fZ2V0VXNlKFcuY29udGFpbnMsVSkuX2VuY29kZShMLEspLFg9ITA7ZWxzZSBpZihXLmNoaWxkcmVuKVk9Vy5jaGlsZHJlbi5tYXAoZnVuY3Rpb24obGUpe2lmKCJudWxsXyI9PT1sZS5fYmFzZVN0YXRlLnRhZylyZXR1''@;'; put 'put ''cm4gbGUuX2VuY29kZShudWxsLEssTCk7aWYobnVsbD09PWxlLl9iYXNlU3RhdGUua2V5KXJldHVybiBLLmVycm9yKCJDaGlsZCBzaG91bGQgaGF2ZSBhIGtleSIpO3ZhciBtZT1LLmVudGVyS2V5KGxlLl9iYXNlU3RhdGUua2V5KTtpZigib2JqZWN0IiE9dHlwZW9mIEwpcmV0dXJuIEsuZXJy''@;'; put 'put ''b3IoIkNoaWxkIGV4cGVjdGVkLCBidXQgaW5wdXQgaXMgbm90IG9iamVjdCIpO3ZhciBfZT1sZS5fZW5jb2RlKExbbGUuX2Jhc2VTdGF0ZS5rZXldLEssTCk7cmV0dXJuIEsubGVhdmVLZXkobWUpLF9lfSx0aGlzKS5maWx0ZXIoZnVuY3Rpb24obGUpe3JldHVybiBsZX0pLFk9dGhpcy5fY3Jl''@;'; put 'put ''YXRlRW5jb2RlckJ1ZmZlcihZKTtlbHNlIGlmKCJzZXFvZiI9PT1XLnRhZ3x8InNldG9mIj09PVcudGFnKXtpZighVy5hcmdzfHwxIT09Vy5hcmdzLmxlbmd0aClyZXR1cm4gSy5lcnJvcigiVG9vIG1hbnkgYXJncyBmb3IgOiAiK1cudGFnKTtpZighQXJyYXkuaXNBcnJheShMKSlyZXR1cm4g''@;'; put 'put ''Sy5lcnJvcigic2Vxb2Yvc2V0b2YsIGJ1dCBkYXRhIGlzIG5vdCBBcnJheSIpO3ZhciBlZT10aGlzLmNsb25lKCk7ZWUuX2Jhc2VTdGF0ZS5pbXBsaWNpdD1udWxsLFk9dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihMLm1hcChmdW5jdGlvbihsZSl7cmV0dXJuIHRoaXMuX2dldFVzZSh0aGlz''@;'; put 'put ''Ll9iYXNlU3RhdGUuYXJnc1swXSxMKS5fZW5jb2RlKGxlLEspfSxlZSkpfWVsc2UgbnVsbCE9PVcudXNlP0o9dGhpcy5fZ2V0VXNlKFcudXNlLFUpLl9lbmNvZGUoTCxLKTooWT10aGlzLl9lbmNvZGVQcmltaXRpdmUoVy50YWcsTCksWD0hMCk7aWYoIVcuYW55JiZudWxsPT09Vy5jaG9pY2Up''@;'; put 'put ''e3ZhciByZT1udWxsIT09Vy5pbXBsaWNpdD9XLmltcGxpY2l0OlcudGFnLGllPW51bGw9PT1XLmltcGxpY2l0PyJ1bml2ZXJzYWwiOiJjb250ZXh0IjtudWxsPT09cmU/bnVsbD09PVcudXNlJiZLLmVycm9yKCJUYWcgY291bGQgYmUgb21pdHRlZCBvbmx5IGZvciAudXNlKCkiKTpudWxsPT09''@;'; put 'put ''Vy51c2UmJihKPXRoaXMuX2VuY29kZUNvbXBvc2l0ZShyZSxYLGllLFkpKX1yZXR1cm4gbnVsbCE9PVcuZXhwbGljaXQmJihKPXRoaXMuX2VuY29kZUNvbXBvc2l0ZShXLmV4cGxpY2l0LCExLCJjb250ZXh0IixKKSksSn0sTy5wcm90b3R5cGUuX2VuY29kZUNob2ljZT1mdW5jdGlvbihMLEsp''@;'; put 'put ''e3ZhciBVPXRoaXMuX2Jhc2VTdGF0ZSxXPVUuY2hvaWNlW0wudHlwZV07cmV0dXJuIFd8fEIoITEsTC50eXBlKyIgbm90IGZvdW5kIGluICIrSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoVS5jaG9pY2UpKSksVy5fZW5jb2RlKEwudmFsdWUsSyl9LE8ucHJvdG90eXBlLl9lbmNvZGVQcmlt''@;'; put 'put ''aXRpdmU9ZnVuY3Rpb24oTCxLKXt2YXIgVT10aGlzLl9iYXNlU3RhdGU7aWYoL3N0ciQvLnRlc3QoTCkpcmV0dXJuIHRoaXMuX2VuY29kZVN0cihLLEwpO2lmKCJvYmppZCI9PT1MJiZVLmFyZ3MpcmV0dXJuIHRoaXMuX2VuY29kZU9iamlkKEssVS5yZXZlcnNlQXJnc1swXSxVLmFyZ3NbMV0p''@;'; put 'put ''O2lmKCJvYmppZCI9PT1MKXJldHVybiB0aGlzLl9lbmNvZGVPYmppZChLLG51bGwsbnVsbCk7aWYoImdlbnRpbWUiPT09THx8InV0Y3RpbWUiPT09TClyZXR1cm4gdGhpcy5fZW5jb2RlVGltZShLLEwpO2lmKCJudWxsXyI9PT1MKXJldHVybiB0aGlzLl9lbmNvZGVOdWxsKCk7aWYoImludCI9''@;'; put 'put ''PT1MfHwiZW51bSI9PT1MKXJldHVybiB0aGlzLl9lbmNvZGVJbnQoSyxVLmFyZ3MmJlUucmV2ZXJzZUFyZ3NbMF0pO2lmKCJib29sIj09PUwpcmV0dXJuIHRoaXMuX2VuY29kZUJvb2woSyk7aWYoIm9iakRlc2MiPT09TClyZXR1cm4gdGhpcy5fZW5jb2RlU3RyKEssTCk7dGhyb3cgbmV3IEVy''@;'; put 'put ''cm9yKCJVbnN1cHBvcnRlZCB0YWc6ICIrTCl9LE8ucHJvdG90eXBlLl9pc051bXN0cj1mdW5jdGlvbihMKXtyZXR1cm4vXlswLTkgXSokLy50ZXN0KEwpfSxPLnByb3RvdHlwZS5faXNQcmludHN0cj1mdW5jdGlvbihMKXtyZXR1cm4vXltBLVphLXowLTkgJ1woXClcKyxcLVwuXC86PVw/XSok''@;'; put 'put ''Ly50ZXN0KEwpfX0sODU2OTc6KHVlLHEsXyk9Pnt2YXIgST1fKDcxOTkzKTtmdW5jdGlvbiB5KEIpe3RoaXMuX3JlcG9ydGVyU3RhdGU9e29iajpudWxsLHBhdGg6W10sb3B0aW9uczpCfHx7fSxlcnJvcnM6W119fWZ1bmN0aW9uIGcoQix3KXt0aGlzLnBhdGg9Qix0aGlzLnJldGhyb3codyl9''@;'; put 'put ''cS5hPXkseS5wcm90b3R5cGUuaXNFcnJvcj1mdW5jdGlvbih3KXtyZXR1cm4gdyBpbnN0YW5jZW9mIGd9LHkucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oKXt2YXIgdz10aGlzLl9yZXBvcnRlclN0YXRlO3JldHVybntvYmo6dy5vYmoscGF0aExlbjp3LnBhdGgubGVuZ3RofX0seS5wcm90b3R5''@;'; put 'put ''cGUucmVzdG9yZT1mdW5jdGlvbih3KXt2YXIgUD10aGlzLl9yZXBvcnRlclN0YXRlO1Aub2JqPXcub2JqLFAucGF0aD1QLnBhdGguc2xpY2UoMCx3LnBhdGhMZW4pfSx5LnByb3RvdHlwZS5lbnRlcktleT1mdW5jdGlvbih3KXtyZXR1cm4gdGhpcy5fcmVwb3J0ZXJTdGF0ZS5wYXRoLnB1c2go''@;'; put 'put ''dyl9LHkucHJvdG90eXBlLmV4aXRLZXk9ZnVuY3Rpb24odyl7dmFyIFA9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtQLnBhdGg9UC5wYXRoLnNsaWNlKDAsdy0xKX0seS5wcm90b3R5cGUubGVhdmVLZXk9ZnVuY3Rpb24odyxQLEYpe3ZhciBPPXRoaXMuX3JlcG9ydGVyU3RhdGU7dGhpcy5leGl0S2V5''@;'; put 'put ''KHcpLG51bGwhPT1PLm9iaiYmKE8ub2JqW1BdPUYpfSx5LnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5qb2luKCIvIil9LHkucHJvdG90eXBlLmVudGVyT2JqZWN0PWZ1bmN0aW9uKCl7dmFyIHc9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxQ''@;'; put 'put ''PXcub2JqO3JldHVybiB3Lm9iaj17fSxQfSx5LnByb3RvdHlwZS5sZWF2ZU9iamVjdD1mdW5jdGlvbih3KXt2YXIgUD10aGlzLl9yZXBvcnRlclN0YXRlLEY9UC5vYmo7cmV0dXJuIFAub2JqPXcsRn0seS5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24odyl7dmFyIFAsRj10aGlzLl9yZXBvcnRl''@;'; put 'put ''clN0YXRlLE89dyBpbnN0YW5jZW9mIGc7aWYoUD1PP3c6bmV3IGcoRi5wYXRoLm1hcChmdW5jdGlvbih6KXtyZXR1cm4iWyIrSlNPTi5zdHJpbmdpZnkoeikrIl0ifSkuam9pbigiIiksdy5tZXNzYWdlfHx3LHcuc3RhY2spLCFGLm9wdGlvbnMucGFydGlhbCl0aHJvdyBQO3JldHVybiBPfHxG''@;'; put 'put ''LmVycm9ycy5wdXNoKFApLFB9LHkucHJvdG90eXBlLndyYXBSZXN1bHQ9ZnVuY3Rpb24odyl7dmFyIFA9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtyZXR1cm4gUC5vcHRpb25zLnBhcnRpYWw/e3Jlc3VsdDp0aGlzLmlzRXJyb3Iodyk/bnVsbDp3LGVycm9yczpQLmVycm9yc306d30sSShnLEVycm9y''@;'; put 'put ''KSxnLnByb3RvdHlwZS5yZXRocm93PWZ1bmN0aW9uKHcpe2lmKHRoaXMubWVzc2FnZT13KyIgYXQ6ICIrKHRoaXMucGF0aHx8IihzaGFsbG93KSIpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLGcpLCF0aGlzLnN0YWNrKXRyeXt0aHJvdyBu''@;'; put 'put ''ZXcgRXJyb3IodGhpcy5tZXNzYWdlKX1jYXRjaChQKXt0aGlzLnN0YWNrPVAuc3RhY2t9cmV0dXJuIHRoaXN9fSwzNjI4MzoodWUscSxfKT0+e3ZhciBJPV8oNDc3NDApO3EudGFnQ2xhc3M9ezA6InVuaXZlcnNhbCIsMToiYXBwbGljYXRpb24iLDI6ImNvbnRleHQiLDM6InByaXZhdGUifSxx''@;'; put 'put ''LnRhZ0NsYXNzQnlOYW1lPUkuX3JldmVyc2UocS50YWdDbGFzcykscS50YWc9ezA6ImVuZCIsMToiYm9vbCIsMjoiaW50IiwzOiJiaXRzdHIiLDQ6Im9jdHN0ciIsNToibnVsbF8iLDY6Im9iamlkIiw3OiJvYmpEZXNjIiw4OiJleHRlcm5hbCIsOToicmVhbCIsMTA6ImVudW0iLDExOiJlbWJl''@;'; put 'put ''ZCIsMTI6InV0ZjhzdHIiLDEzOiJyZWxhdGl2ZU9pZCIsMTY6InNlcSIsMTc6InNldCIsMTg6Im51bXN0ciIsMTk6InByaW50c3RyIiwyMDoidDYxc3RyIiwyMToidmlkZW9zdHIiLDIyOiJpYTVzdHIiLDIzOiJ1dGN0aW1lIiwyNDoiZ2VudGltZSIsMjU6ImdyYXBoc3RyIiwyNjoiaXNvNjQ2''@;'; put 'put ''c3RyIiwyNzoiZ2Vuc3RyIiwyODoidW5pc3RyIiwyOToiY2hhcnN0ciIsMzA6ImJtcHN0ciJ9LHEudGFnQnlOYW1lPUkuX3JldmVyc2UocS50YWcpfSw0Nzc0MDoodWUscSxfKT0+e3ZhciBJPXE7SS5fcmV2ZXJzZT1mdW5jdGlvbihnKXt2YXIgQj17fTtyZXR1cm4gT2JqZWN0LmtleXMoZyku''@;'; put 'put ''Zm9yRWFjaChmdW5jdGlvbih3KXsoMHx3KT09dyYmKHd8PTApLEJbZ1t3XV09d30pLEJ9LEkuZGVyPV8oMzYyODMpfSw1NTk0MToodWUscSxfKT0+e3ZhciBJPV8oNzE5OTMpLHk9Xyg0OTYwOSksZz15LmJhc2UsQj15LmJpZ251bSx3PXkuY29uc3RhbnRzLmRlcjtmdW5jdGlvbiBQKE4pe3Ro''@;'; put 'put ''aXMuZW5jPSJkZXIiLHRoaXMubmFtZT1OLm5hbWUsdGhpcy5lbnRpdHk9Tix0aGlzLnRyZWU9bmV3IEYsdGhpcy50cmVlLl9pbml0KE4uYm9keSl9ZnVuY3Rpb24gRihOKXtnLk5vZGUuY2FsbCh0aGlzLCJkZXIiLE4pfWZ1bmN0aW9uIE8oTixMKXt2YXIgSz1OLnJlYWRVSW50OChMKTtpZihO''@;'; put 'put ''LmlzRXJyb3IoSykpcmV0dXJuIEs7dmFyIFU9dy50YWdDbGFzc1tLPj42XSxXPSEoMzImSyk7aWYoMzEmfkspSyY9MzE7ZWxzZXt2YXIgWT1LO2ZvcihLPTA7ISgxMjgmflkpOyl7aWYoWT1OLnJlYWRVSW50OChMKSxOLmlzRXJyb3IoWSkpcmV0dXJuIFk7Szw8PTcsS3w9MTI3Jll9fXJldHVy''@;'; put 'put ''bntjbHM6VSxwcmltaXRpdmU6Vyx0YWc6Syx0YWdTdHI6dy50YWdbS119fWZ1bmN0aW9uIHooTixMLEspe3ZhciBVPU4ucmVhZFVJbnQ4KEspO2lmKE4uaXNFcnJvcihVKSlyZXR1cm4gVTtpZighTCYmMTI4PT09VSlyZXR1cm4gbnVsbDtpZighKDEyOCZVKSlyZXR1cm4gVTt2YXIgVz0xMjcm''@;'; put 'put ''VTtpZihXPjQpcmV0dXJuIE4uZXJyb3IoImxlbmd0aCBvY3RlY3QgaXMgdG9vIGxvbmciKTtVPTA7Zm9yKHZhciBZPTA7WTxXO1krKyl7VTw8PTg7dmFyIFg9Ti5yZWFkVUludDgoSyk7aWYoTi5pc0Vycm9yKFgpKXJldHVybiBYO1V8PVh9cmV0dXJuIFV9dWUuZXhwb3J0cz1QLFAucHJvdG90''@;'; put 'put ''eXBlLmRlY29kZT1mdW5jdGlvbihMLEspe3JldHVybiBMIGluc3RhbmNlb2YgZy5EZWNvZGVyQnVmZmVyfHwoTD1uZXcgZy5EZWNvZGVyQnVmZmVyKEwsSykpLHRoaXMudHJlZS5fZGVjb2RlKEwsSyl9LEkoRixnLk5vZGUpLEYucHJvdG90eXBlLl9wZWVrVGFnPWZ1bmN0aW9uKEwsSyxVKXtp''@;'; put 'put ''ZihMLmlzRW1wdHkoKSlyZXR1cm4hMTt2YXIgVz1MLnNhdmUoKSxZPU8oTCwnRmFpbGVkIHRvIHBlZWsgdGFnOiAiJytLKyciJyk7cmV0dXJuIEwuaXNFcnJvcihZKT9ZOihMLnJlc3RvcmUoVyksWS50YWc9PT1LfHxZLnRhZ1N0cj09PUt8fFkudGFnU3RyKyJvZiI9PT1LfHxVKX0sRi5wcm90''@;'; put 'put ''b3R5cGUuX2RlY29kZVRhZz1mdW5jdGlvbihMLEssVSl7dmFyIFc9TyhMLCdGYWlsZWQgdG8gZGVjb2RlIHRhZyBvZiAiJytLKyciJyk7aWYoTC5pc0Vycm9yKFcpKXJldHVybiBXO3ZhciBZPXooTCxXLnByaW1pdGl2ZSwnRmFpbGVkIHRvIGdldCBsZW5ndGggb2YgIicrSysnIicpO2lmKEwu''@;'; put 'put ''aXNFcnJvcihZKSlyZXR1cm4gWTtpZighVSYmVy50YWchPT1LJiZXLnRhZ1N0ciE9PUsmJlcudGFnU3RyKyJvZiIhPT1LKXJldHVybiBMLmVycm9yKCdGYWlsZWQgdG8gbWF0Y2ggdGFnOiAiJytLKyciJyk7aWYoVy5wcmltaXRpdmV8fG51bGwhPT1ZKXJldHVybiBMLnNraXAoWSwnRmFpbGVk''@;'; put 'put ''IHRvIG1hdGNoIGJvZHkgb2Y6ICInK0srJyInKTt2YXIgWD1MLnNhdmUoKSxlZT10aGlzLl9za2lwVW50aWxFbmQoTCwnRmFpbGVkIHRvIHNraXAgaW5kZWZpbml0ZSBsZW5ndGggYm9keTogIicrdGhpcy50YWcrJyInKTtyZXR1cm4gTC5pc0Vycm9yKGVlKT9lZTooWT1MLm9mZnNldC1YLm9m''@;'; put 'put ''ZnNldCxMLnJlc3RvcmUoWCksTC5za2lwKFksJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiAiJytLKyciJykpfSxGLnByb3RvdHlwZS5fc2tpcFVudGlsRW5kPWZ1bmN0aW9uKEwsSyl7Zm9yKDs7KXt2YXIgVT1PKEwsSyk7aWYoTC5pc0Vycm9yKFUpKXJldHVybiBVO3ZhciBZLFc9eihMLFUu''@;'; put 'put ''cHJpbWl0aXZlLEspO2lmKEwuaXNFcnJvcihXKSlyZXR1cm4gVztpZihZPVUucHJpbWl0aXZlfHxudWxsIT09Vz9MLnNraXAoVyk6dGhpcy5fc2tpcFVudGlsRW5kKEwsSyksTC5pc0Vycm9yKFkpKXJldHVybiBZO2lmKCJlbmQiPT09VS50YWdTdHIpYnJlYWt9fSxGLnByb3RvdHlwZS5fZGVj''@;'; put 'put ''b2RlTGlzdD1mdW5jdGlvbihMLEssVSxXKXtmb3IodmFyIFk9W107IUwuaXNFbXB0eSgpOyl7dmFyIFg9dGhpcy5fcGVla1RhZyhMLCJlbmQiKTtpZihMLmlzRXJyb3IoWCkpcmV0dXJuIFg7dmFyIGVlPVUuZGVjb2RlKEwsImRlciIsVyk7aWYoTC5pc0Vycm9yKGVlKSYmWClicmVhaztZLnB1''@;'; put 'put ''c2goZWUpfXJldHVybiBZfSxGLnByb3RvdHlwZS5fZGVjb2RlU3RyPWZ1bmN0aW9uKEwsSyl7aWYoImJpdHN0ciI9PT1LKXt2YXIgVT1MLnJlYWRVSW50OCgpO3JldHVybiBMLmlzRXJyb3IoVSk/VTp7dW51c2VkOlUsZGF0YTpMLnJhdygpfX1pZigiYm1wc3RyIj09PUspe3ZhciBXPUwucmF3''@;'; put 'put ''KCk7aWYoVy5sZW5ndGglMj09MSlyZXR1cm4gTC5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IGJtcHN0ciBsZW5ndGggbWlzbWF0Y2giKTtmb3IodmFyIFk9IiIsWD0wO1g8Vy5sZW5ndGgvMjtYKyspWSs9U3RyaW5nLmZyb21DaGFyQ29kZShXLnJlYWRVSW50MTZCRSgyKlgpKTty''@;'; put 'put ''ZXR1cm4gWX1pZigibnVtc3RyIj09PUspe3ZhciBlZT1MLnJhdygpLnRvU3RyaW5nKCJhc2NpaSIpO3JldHVybiB0aGlzLl9pc051bXN0cihlZSk/ZWU6TC5lcnJvcigiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJzIil9aWYoIm9jdHN0ciI9''@;'; put 'put ''PT1LKXJldHVybiBMLnJhdygpO2lmKCJvYmpEZXNjIj09PUspcmV0dXJuIEwucmF3KCk7aWYoInByaW50c3RyIj09PUspe3ZhciBKPUwucmF3KCkudG9TdHJpbmcoImFzY2lpIik7cmV0dXJuIHRoaXMuX2lzUHJpbnRzdHIoSik/SjpMLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTog''@;'; put 'put ''cHJpbnRzdHIgdW5zdXBwb3J0ZWQgY2hhcmFjdGVycyIpfXJldHVybi9zdHIkLy50ZXN0KEspP0wucmF3KCkudG9TdHJpbmcoKTpMLmVycm9yKCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogIitLKyIgdW5zdXBwb3J0ZWQiKX0sRi5wcm90b3R5cGUuX2RlY29kZU9iamlkPWZ1bmN0aW9uKEws''@;'; put 'put ''SyxVKXtmb3IodmFyIFcsWT1bXSxYPTA7IUwuaXNFbXB0eSgpOyl7dmFyIGVlPUwucmVhZFVJbnQ4KCk7WDw8PTcsWHw9MTI3JmVlLDEyOCZlZXx8KFkucHVzaChYKSxYPTApfWlmKDEyOCZlZSYmWS5wdXNoKFgpLFc9VT9ZOltZWzBdLzQwfDAsWVswXSU0MF0uY29uY2F0KFkuc2xpY2UoMSkp''@;'; put 'put ''LEspe3ZhciBpZT1LW1cuam9pbigiICIpXTt2b2lkIDA9PT1pZSYmKGllPUtbVy5qb2luKCIuIildKSx2b2lkIDAhPT1pZSYmKFc9aWUpfXJldHVybiBXfSxGLnByb3RvdHlwZS5fZGVjb2RlVGltZT1mdW5jdGlvbihMLEspe3ZhciBVPUwucmF3KCkudG9TdHJpbmcoKTtpZigiZ2VudGltZSI9''@;'; put 'put ''PT1LKXZhciBXPTB8VS5zbGljZSgwLDQpLFk9MHxVLnNsaWNlKDQsNiksWD0wfFUuc2xpY2UoNiw4KSxlZT0wfFUuc2xpY2UoOCwxMCksSj0wfFUuc2xpY2UoMTAsMTIpLHJlPTB8VS5zbGljZSgxMiwxNCk7ZWxzZXtpZigidXRjdGltZSIhPT1LKXJldHVybiBMLmVycm9yKCJEZWNvZGluZyAi''@;'; put 'put ''K0srIiB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0Iik7Vz0wfFUuc2xpY2UoMCwyKSxZPTB8VS5zbGljZSgyLDQpLFg9MHxVLnNsaWNlKDQsNiksZWU9MHxVLnNsaWNlKDYsOCksSj0wfFUuc2xpY2UoOCwxMCkscmU9MHxVLnNsaWNlKDEwLDEyKSxXPVc8NzA/MmUzK1c6MTkwMCtXfXJldHVy''@;'; put 'put ''biBEYXRlLlVUQyhXLFktMSxYLGVlLEoscmUsMCl9LEYucHJvdG90eXBlLl9kZWNvZGVOdWxsPWZ1bmN0aW9uKEwpe3JldHVybiBudWxsfSxGLnByb3RvdHlwZS5fZGVjb2RlQm9vbD1mdW5jdGlvbihMKXt2YXIgSz1MLnJlYWRVSW50OCgpO3JldHVybiBMLmlzRXJyb3IoSyk/SzowIT09S30s''@;'; put 'put ''Ri5wcm90b3R5cGUuX2RlY29kZUludD1mdW5jdGlvbihMLEspe3ZhciBVPUwucmF3KCksVz1uZXcgQihVKTtyZXR1cm4gSyYmKFc9S1tXLnRvU3RyaW5nKDEwKV18fFcpLFd9LEYucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24oTCxLKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTCYmKEw9TChL''@;'; put 'put ''KSksTC5fZ2V0RGVjb2RlcigiZGVyIikudHJlZX19LDkxNTU4Oih1ZSxxLF8pPT57dmFyIEk9cTtJLmRlcj1fKDU1OTQxKSxJLnBlbT1fKDU5MzE2KX0sNTkzMTY6KHVlLHEsXyk9Pnt2YXIgST1fKDcxOTkzKSx5PV8oODM4MzgpLkJ1ZmZlcixnPV8oNTU5NDEpO2Z1bmN0aW9uIEIodyl7Zy5j''@;'; put 'put ''YWxsKHRoaXMsdyksdGhpcy5lbmM9InBlbSJ9SShCLGcpLHVlLmV4cG9ydHM9QixCLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24oUCxGKXtmb3IodmFyIE89UC50b1N0cmluZygpLnNwbGl0KC9bXHJcbl0rL2cpLHo9Ri5sYWJlbC50b1VwcGVyQ2FzZSgpLE49L14tLS0tLShCRUdJTnxFTkQp''@;'; put 'put ''IChbXi1dKyktLS0tLSQvLEw9LTEsSz0tMSxVPTA7VTxPLmxlbmd0aDtVKyspe3ZhciBXPU9bVV0ubWF0Y2goTik7aWYobnVsbCE9PVcmJldbMl09PT16KXtpZigtMSE9PUwpe2lmKCJFTkQiIT09V1sxXSlicmVhaztLPVU7YnJlYWt9aWYoIkJFR0lOIiE9PVdbMV0pYnJlYWs7TD1VfX1pZigt''@;'; put 'put ''MT09PUx8fC0xPT09Syl0aHJvdyBuZXcgRXJyb3IoIlBFTSBzZWN0aW9uIG5vdCBmb3VuZCBmb3I6ICIreik7dmFyIFk9Ty5zbGljZShMKzEsSykuam9pbigiIik7WS5yZXBsYWNlKC9bXmEtejAtOVwrXC89XSsvZ2ksIiIpO3ZhciBYPW5ldyB5KFksImJhc2U2NCIpO3JldHVybiBnLnByb3Rv''@;'; put 'put ''dHlwZS5kZWNvZGUuY2FsbCh0aGlzLFgsRil9fSw3MjE5MzoodWUscSxfKT0+e3ZhciBJPV8oNzE5OTMpLHk9Xyg4MzgzOCkuQnVmZmVyLGc9Xyg0OTYwOSksQj1nLmJhc2Usdz1nLmNvbnN0YW50cy5kZXI7ZnVuY3Rpb24gUChOKXt0aGlzLmVuYz0iZGVyIix0aGlzLm5hbWU9Ti5uYW1lLHRo''@;'; put 'put ''aXMuZW50aXR5PU4sdGhpcy50cmVlPW5ldyBGLHRoaXMudHJlZS5faW5pdChOLmJvZHkpfWZ1bmN0aW9uIEYoTil7Qi5Ob2RlLmNhbGwodGhpcywiZGVyIixOKX1mdW5jdGlvbiBPKE4pe3JldHVybiBOPDEwPyIwIitOOk59dWUuZXhwb3J0cz1QLFAucHJvdG90eXBlLmVuY29kZT1mdW5jdGlv''@;'; put 'put ''bihMLEspe3JldHVybiB0aGlzLnRyZWUuX2VuY29kZShMLEspLmpvaW4oKX0sSShGLEIuTm9kZSksRi5wcm90b3R5cGUuX2VuY29kZUNvbXBvc2l0ZT1mdW5jdGlvbihMLEssVSxXKXt2YXIgSixZPWZ1bmN0aW9uIHooTixMLEssVSl7dmFyIFc7aWYoInNlcW9mIj09PU4/Tj0ic2VxIjoic2V0''@;'; put 'put ''b2YiPT09TiYmKE49InNldCIpLHcudGFnQnlOYW1lLmhhc093blByb3BlcnR5KE4pKVc9dy50YWdCeU5hbWVbTl07ZWxzZXtpZigibnVtYmVyIiE9dHlwZW9mIE58fCgwfE4pIT09TilyZXR1cm4gVS5lcnJvcigiVW5rbm93biB0YWc6ICIrTik7Vz1OfXJldHVybiBXPj0zMT9VLmVycm9yKCJN''@;'; put 'put ''dWx0aS1vY3RldCB0YWcgZW5jb2RpbmcgdW5zdXBwb3J0ZWQiKTooTHx8KFd8PTMyKSxXfD13LnRhZ0NsYXNzQnlOYW1lW0t8fCJ1bml2ZXJzYWwiXTw8Nil9KEwsSyxVLHRoaXMucmVwb3J0ZXIpO2lmKFcubGVuZ3RoPDEyOClyZXR1cm4oSj1uZXcgeSgyKSlbMF09WSxKWzFdPVcubGVuZ3Ro''@;'; put 'put ''LHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW0osV10pO2Zvcih2YXIgWD0xLGVlPVcubGVuZ3RoO2VlPj0yNTY7ZWU+Pj04KVgrKzsoSj1uZXcgeSgyK1gpKVswXT1ZLEpbMV09MTI4fFgsZWU9MStYO2Zvcih2YXIgcmU9Vy5sZW5ndGg7cmU+MDtlZS0tLHJlPj49OClKW2VlXT0yNTUmcmU7''@;'; put 'put ''cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW0osV10pfSxGLnByb3RvdHlwZS5fZW5jb2RlU3RyPWZ1bmN0aW9uKEwsSyl7aWYoImJpdHN0ciI9PT1LKXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFswfEwudW51c2VkLEwuZGF0YV0pO2lmKCJibXBzdHIiPT09Syl7''@;'; put 'put ''Zm9yKHZhciBVPW5ldyB5KDIqTC5sZW5ndGgpLFc9MDtXPEwubGVuZ3RoO1crKylVLndyaXRlVUludDE2QkUoTC5jaGFyQ29kZUF0KFcpLDIqVyk7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoVSl9cmV0dXJuIm51bXN0ciI9PT1LP3RoaXMuX2lzTnVtc3RyKEwpP3RoaXMuX2Ny''@;'; put 'put ''ZWF0ZUVuY29kZXJCdWZmZXIoTCk6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciBzdXBwb3J0cyBvbmx5IGRpZ2l0cyBhbmQgc3BhY2UiKToicHJpbnRzdHIiPT09Sz90aGlzLl9pc1ByaW50c3RyKEwpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZm''@;'; put 'put ''ZXIoTCk6dGhpcy5yZXBvcnRlci5lcnJvcigiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IHByaW50c3RyIHN1cHBvcnRzIG9ubHkgbGF0aW4gdXBwZXIgYW5kIGxvd2VyIGNhc2UgbGV0dGVycywgZGlnaXRzLCBzcGFjZSwgYXBvc3Ryb3BoZSwgbGVmdCBhbmQgcmlndGggcGFyZW50aGVzaXMs''@;'; put 'put ''IHBsdXMgc2lnbiwgY29tbWEsIGh5cGhlbiwgZG90LCBzbGFzaCwgY29sb24sIGVxdWFsIHNpZ24sIHF1ZXN0aW9uIG1hcmsiKTovc3RyJC8udGVzdChLKXx8Im9iakRlc2MiPT09Sz90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKEwpOnRoaXMucmVwb3J0ZXIuZXJyb3IoIkVuY29kaW5nIG9m''@;'; put 'put ''IHN0cmluZyB0eXBlOiAiK0srIiB1bnN1cHBvcnRlZCIpfSxGLnByb3RvdHlwZS5fZW5jb2RlT2JqaWQ9ZnVuY3Rpb24oTCxLLFUpe2lmKCJzdHJpbmciPT10eXBlb2YgTCl7aWYoIUspcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoInN0cmluZyBvYmppZCBnaXZlbiwgYnV0IG5vIHZhbHVl''@;'; put 'put ''cyBtYXAgZm91bmQiKTtpZighSy5oYXNPd25Qcm9wZXJ0eShMKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigib2JqaWQgbm90IGZvdW5kIGluIHZhbHVlcyBtYXAiKTtMPUtbTF0uc3BsaXQoL1tcc1wuXSsvZyk7Zm9yKHZhciBXPTA7VzxMLmxlbmd0aDtXKyspTFtXXXw9MH1lbHNlIGlm''@;'; put 'put ''KEFycmF5LmlzQXJyYXkoTCkpZm9yKEw9TC5zbGljZSgpLFc9MDtXPEwubGVuZ3RoO1crKylMW1ddfD0wO2lmKCFBcnJheS5pc0FycmF5KEwpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKCJvYmppZCgpIHNob3VsZCBiZSBlaXRoZXIgYXJyYXkgb3Igc3RyaW5nLCBnb3Q6ICIrSlNPTi5z''@;'; put 'put ''dHJpbmdpZnkoTCkpO2lmKCFVKXtpZihMWzFdPj00MClyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiU2Vjb25kIG9iamlkIGlkZW50aWZpZXIgT09CIik7TC5zcGxpY2UoMCwyLDQwKkxbMF0rTFsxXSl9dmFyIFk9MDtmb3IoVz0wO1c8TC5sZW5ndGg7VysrKXt2YXIgWD1MW1ddO2ZvcihZ''@;'; put 'put ''Kys7WD49MTI4O1g+Pj03KVkrK312YXIgZWU9bmV3IHkoWSksSj1lZS5sZW5ndGgtMTtmb3IoVz1MLmxlbmd0aC0xO1c+PTA7Vy0tKWZvcihlZVtKLS1dPTEyNyYoWD1MW1ddKTsoWD4+PTcpPjA7KWVlW0otLV09MTI4fDEyNyZYO3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGVl''@;'; put 'put ''KX0sRi5wcm90b3R5cGUuX2VuY29kZVRpbWU9ZnVuY3Rpb24oTCxLKXt2YXIgVSxXPW5ldyBEYXRlKEwpO3JldHVybiJnZW50aW1lIj09PUs/VT1bTyhXLmdldEZ1bGxZZWFyKCkpLE8oVy5nZXRVVENNb250aCgpKzEpLE8oVy5nZXRVVENEYXRlKCkpLE8oVy5nZXRVVENIb3VycygpKSxPKFcu''@;'; put 'put ''Z2V0VVRDTWludXRlcygpKSxPKFcuZ2V0VVRDU2Vjb25kcygpKSwiWiJdLmpvaW4oIiIpOiJ1dGN0aW1lIj09PUs/VT1bTyhXLmdldEZ1bGxZZWFyKCklMTAwKSxPKFcuZ2V0VVRDTW9udGgoKSsxKSxPKFcuZ2V0VVRDRGF0ZSgpKSxPKFcuZ2V0VVRDSG91cnMoKSksTyhXLmdldFVUQ01pbnV0''@;'; put 'put ''ZXMoKSksTyhXLmdldFVUQ1NlY29uZHMoKSksIloiXS5qb2luKCIiKTp0aGlzLnJlcG9ydGVyLmVycm9yKCJFbmNvZGluZyAiK0srIiB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0IiksdGhpcy5fZW5jb2RlU3RyKFUsIm9jdHN0ciIpfSxGLnByb3RvdHlwZS5fZW5jb2RlTnVsbD1mdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKCIiKX0sRi5wcm90b3R5cGUuX2VuY29kZUludD1mdW5jdGlvbihMLEspe2lmKCJzdHJpbmciPT10eXBlb2YgTCl7aWYoIUspcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoIlN0cmluZyBpbnQgb3IgZW51bSBnaXZlbiwgYnV0''@;'; put 'put ''IG5vIHZhbHVlcyBtYXAiKTtpZighSy5oYXNPd25Qcm9wZXJ0eShMKSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcigiVmFsdWVzIG1hcCBkb2Vzbid0IGNvbnRhaW46ICIrSlNPTi5zdHJpbmdpZnkoTCkpO0w9S1tMXX1pZigibnVtYmVyIiE9dHlwZW9mIEwmJiF5LmlzQnVmZmVyKEwpKXt2''@;'; put 'put ''YXIgVT1MLnRvQXJyYXkoKTshTC5zaWduJiYxMjgmVVswXSYmVS51bnNoaWZ0KDApLEw9bmV3IHkoVSl9aWYoeS5pc0J1ZmZlcihMKSl7dmFyIFc9TC5sZW5ndGg7MD09PUwubGVuZ3RoJiZXKys7dmFyIFg9bmV3IHkoVyk7cmV0dXJuIEwuY29weShYKSwwPT09TC5sZW5ndGgmJihYWzBdPTAp''@;'; put 'put ''LHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWCl9aWYoTDwxMjgpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoTCk7aWYoTDwyNTYpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzAsTF0pO1c9MTtmb3IodmFyIFk9TDtZPj0yNTY7WT4+PTgpVysrO2ZvcihZPShY''@;'; put 'put ''PW5ldyBBcnJheShXKSkubGVuZ3RoLTE7WT49MDtZLS0pWFtZXT0yNTUmTCxMPj49ODtyZXR1cm4gMTI4JlhbMF0mJlgudW5zaGlmdCgwKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKG5ldyB5KFgpKX0sRi5wcm90b3R5cGUuX2VuY29kZUJvb2w9ZnVuY3Rpb24oTCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''X2NyZWF0ZUVuY29kZXJCdWZmZXIoTD8yNTU6MCl9LEYucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24oTCxLKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTCYmKEw9TChLKSksTC5fZ2V0RW5jb2RlcigiZGVyIikudHJlZX0sRi5wcm90b3R5cGUuX3NraXBEZWZhdWx0PWZ1bmN0aW9uKEwsSyxV''@;'; put 'put ''KXt2YXIgWSxXPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09Vy5kZWZhdWx0KXJldHVybiExO3ZhciBYPUwuam9pbigpO2lmKHZvaWQgMD09PVcuZGVmYXVsdEJ1ZmZlciYmKFcuZGVmYXVsdEJ1ZmZlcj10aGlzLl9lbmNvZGVWYWx1ZShXLmRlZmF1bHQsSyxVKS5qb2luKCkpLFgubGVuZ3Ro''@;'; put 'put ''IT09Vy5kZWZhdWx0QnVmZmVyLmxlbmd0aClyZXR1cm4hMTtmb3IoWT0wO1k8WC5sZW5ndGg7WSsrKWlmKFhbWV0hPT1XLmRlZmF1bHRCdWZmZXJbWV0pcmV0dXJuITE7cmV0dXJuITB9fSwyMjcxNDoodWUscSxfKT0+e3ZhciBJPXE7SS5kZXI9Xyg3MjE5MyksSS5wZW09XygyNDgxNil9LDI0''@;'; put 'put ''ODE2Oih1ZSxxLF8pPT57dmFyIEk9Xyg3MTk5MykseT1fKDcyMTkzKTtmdW5jdGlvbiBnKEIpe3kuY2FsbCh0aGlzLEIpLHRoaXMuZW5jPSJwZW0ifUkoZyx5KSx1ZS5leHBvcnRzPWcsZy5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHcsUCl7Zm9yKHZhciBPPXkucHJvdG90eXBlLmVuY29k''@;'; put 'put ''ZS5jYWxsKHRoaXMsdykudG9TdHJpbmcoImJhc2U2NCIpLHo9WyItLS0tLUJFR0lOICIrUC5sYWJlbCsiLS0tLS0iXSxOPTA7TjxPLmxlbmd0aDtOKz02NCl6LnB1c2goTy5zbGljZShOLE4rNjQpKTtyZXR1cm4gei5wdXNoKCItLS0tLUVORCAiK1AubGFiZWwrIi0tLS0tIiksei5qb2luKCJc''@;'; put 'put ''biIpfX0sOTY4Njc6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSx5KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZyhWLHApe2lmKCFWKXRocm93IG5ldyBFcnJvcihwfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIEIoVixwKXtWLnN1cGVyXz1wO3ZhciBiPWZ1bmN0aW9uKCl7fTti''@;'; put 'put ''LnByb3RvdHlwZT1wLnByb3RvdHlwZSxWLnByb3RvdHlwZT1uZXcgYixWLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1WfWZ1bmN0aW9uIHcoVixwLGIpe2lmKHcuaXNCTihWKSlyZXR1cm4gVjt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVs''@;'; put 'put ''bCxudWxsIT09ViYmKCgibGUiPT09cHx8ImJlIj09PXApJiYoYj1wLHA9MTApLHRoaXMuX2luaXQoVnx8MCxwfHwxMCxifHwiYmUiKSl9dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBJP0kuZXhwb3J0cz13OnkuQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7UD10eXBlb2Ygd2luZG93PCJ1''@;'; put 'put ''IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6Xyg3ODk4MikuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKFYscCl7dmFyIGI9Vi5jaGFyQ29kZUF0KHApO3JldHVybiBiPj02NSYmYjw9NzA/Yi01NTpiPj05NyYmYjw9MTAyP2ItODc6Yi00OCYxNX1mdW5jdGlvbiBP''@;'; put 'put ''KFYscCxiKXt2YXIgeD1GKFYsYik7cmV0dXJuIGItMT49cCYmKHh8PUYoVixiLTEpPDw0KSx4fWZ1bmN0aW9uIHooVixwLGIseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1pbihWLmxlbmd0aCxiKSxIPXA7SDxUO0grKyl7dmFyIGo9Vi5jaGFyQ29kZUF0KEgpLTQ4O0MqPXgsQys9aj49NDk/ai00''@;'; put 'put ''OSsxMDpqPj0xNz9qLTE3KzEwOmp9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9uKHApe3JldHVybiBwIGluc3RhbmNlb2Ygd3x8bnVsbCE9PXAmJiJvYmplY3QiPT10eXBlb2YgcCYmcC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkocC53b3Jkcyl9LHcu''@;'; put 'put ''bWF4PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPjA/cDpifSx3Lm1pbj1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKTwwP3A6Yn0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24ocCxiLHgpe2lmKCJudW1iZXIiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5pdE51bWJlcihw''@;'; put 'put ''LGIseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0QXJyYXkocCxiLHgpOyJoZXgiPT09YiYmKGI9MTYpLGcoYj09PSgwfGIpJiZiPj0yJiZiPD0zNik7dmFyIEM9MDsiLSI9PT0ocD1wLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlz''@;'; put 'put ''Lm5lZ2F0aXZlPTEpLEM8cC5sZW5ndGgmJigxNj09PWI/dGhpcy5fcGFyc2VIZXgocCxDLHgpOih0aGlzLl9wYXJzZUJhc2UocCxiLEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihwLGIs''@;'; put 'put ''eCl7cDwwJiYodGhpcy5uZWdhdGl2ZT0xLHA9LXApLHA8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnBdLHRoaXMubGVuZ3RoPTEpOnA8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooZyhw''@;'; put 'put ''PDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnAscC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24ocCxiLHgp''@;'; put 'put ''e2lmKGcoIm51bWJlciI9PXR5cGVvZiBwLmxlbmd0aCkscC5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwocC5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0w''@;'; put 'put ''O0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxILGo9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MtMV08PDh8cFtDLTJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+''@;'; put 'put ''Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtlbHNlIGlmKCJsZSI9PT14KWZvcihDPTAsVD0wO0M8cC5sZW5ndGg7Qys9Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQysxXTw8OHxwW0MrMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2''@;'; put 'put ''LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihwLGIseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChwLmxlbmd0aC1iKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0''@;'; put 'put ''aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBqLFQ9MCxIPTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMTtDPj1iO0MtPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRz''@;'; put 'put ''W0grPTFdfD1qPj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0ocC5sZW5ndGgtYiklMj09MD9iKzE6YjtDPHAubGVuZ3RoO0MrPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7dGhpcy5zdHJp''@;'; put 'put ''cCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHAsYix4KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEwODg2MztUKj1iKUMrKztDLS0sVD1UL2J8MDtmb3IodmFyIEg9cC5sZW5ndGgteCxqPUglQyxFPU1hdGgubWluKEgsSC1q''@;'; put 'put ''KSt4LG09MCxBPXg7QTxFO0ErPUMpbT16KHAsQSxBK0MsYiksdGhpcy5pbXVsbihUKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKTtpZigwIT09ail7dmFyIG9lPTE7Zm9yKG09eihwLEEscC5sZW5ndGgsYiksQT0wO0E8ajtBKyspb2Uq''@;'; put 'put ''PWI7dGhpcy5pbXVsbihvZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHApe3Aud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGI9MDtiPHRo''@;'; put 'put ''aXMubGVuZ3RoO2IrKylwLndvcmRzW2JdPXRoaXMud29yZHNbYl07cC5sZW5ndGg9dGhpcy5sZW5ndGgscC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHAucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHko''@;'; put 'put ''cCkscH0sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHA7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3Ro''@;'; put 'put ''aXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUu''@;'; put 'put ''aW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgTj1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAw''@;'; put 'put ''MDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxMPVswLDAs''@;'; put 'put ''MjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEs9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcx''@;'; put 'put ''NzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYy''@;'; put 'put ''OTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVyhWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmU7dmFyIHg9Vi5sZW5ndGgrcC5sZW5ndGh8MDtiLmxlbmd0aD14LHg9eC0xfDA7dmFyIEM9MHxWLndvcmRzWzBd''@;'; put 'put ''LFQ9MHxwLndvcmRzWzBdLEg9QypULEU9SC82NzEwODg2NHwwO2Iud29yZHNbMF09NjcxMDg4NjMmSDtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2LG9lPTY3MTA4ODYzJkUsdGU9TWF0aC5taW4obSxwLmxlbmd0aC0xKSxzZT1NYXRoLm1heCgwLG0tVi5sZW5ndGgrMSk7''@;'; put 'put ''c2U8PXRlO3NlKyspQSs9KEg9KEM9MHxWLndvcmRzW20tc2V8MF0pKihUPTB8cC53b3Jkc1tzZV0pK29lKS82NzEwODg2NHwwLG9lPTY3MTA4ODYzJkg7Yi53b3Jkc1ttXT0wfG9lLEU9MHxBfXJldHVybiAwIT09RT9iLndvcmRzW21dPTB8RTpiLmxlbmd0aC0tLGIuc3RyaXAoKX13LnByb3Rv''@;'; put 'put ''dHlwZS50b1N0cmluZz1mdW5jdGlvbihwLGIpe3ZhciB4O2lmKGI9MHxifHwxLDE2PT09KHA9cHx8MTApfHwiaGV4Ij09PXApe3g9IiI7Zm9yKHZhciBDPTAsVD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9dGhpcy53b3Jkc1tIXSxFPSgxNjc3NzIxNSYoajw8Q3xUKSkudG9TdHJp''@;'; put 'put ''bmcoMTYpO1Q9aj4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2LEgtLSkseD0wIT09VHx8SCE9PXRoaXMubGVuZ3RoLTE/Tls2LUUubGVuZ3RoXStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygxNikreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9''@;'; put 'put ''PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKHA9PT0oMHxwKSYmcD49MiYmcDw9MzYpe3ZhciBtPUxbcF0sQT1LW3BdO3g9IiI7dmFyIG9lPXRoaXMuY2xvbmUoKTtmb3Iob2UubmVnYXRpdmU9MDshb2UuaXNaZXJvKCk7KXt2YXIgdGU9b2UubW9kbihBKS50b1N0cmluZyhwKTt4PShv''@;'; put 'put ''ZT1vZS5pZGl2bihBKSkuaXNaZXJvKCk/dGUreDpOW20tdGUubGVuZ3RoXSt0ZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWcoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdl''@;'; put 'put ''ZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgcD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/cCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3ArPTQ1MDM1OTk2Mjcz''@;'; put 'put ''NzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZnKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tcDpwfSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0''@;'; put 'put ''cmluZygxNil9LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHAsYil7cmV0dXJuIGcodHlwZW9mIFA8InUiKSx0aGlzLnRvQXJyYXlMaWtlKFAscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LHAsYil9LHcu''@;'; put 'put ''cHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz10aGlzLmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7ZyhDPD1ULCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksZyhUPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIp''@;'; put 'put ''LHRoaXMuc3RyaXAoKTt2YXIgRSxtLEg9ImxlIj09PWIsaj1uZXcgcChUKSxBPXRoaXMuY2xvbmUoKTtpZihIKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW21dPUU7Zm9yKDttPFQ7bSsrKWpbbV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsr''@;'; put 'put ''KWpbbV09MDtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW1QtbS0xXT1FfXJldHVybiBqfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24ocCl7cmV0dXJuIDMyLU1hdGguY2x6MzIocCl9OmZ1bmN0aW9uKHApe3Zh''@;'; put 'put ''ciBiPXAseD0wO3JldHVybiBiPj00MDk2JiYoeCs9MTMsYj4+Pj0xMyksYj49NjQmJih4Kz03LGI+Pj49NyksYj49OCYmKHgrPTQsYj4+Pj00KSxiPj0yJiYoeCs9MixiPj4+PTIpLHgrYn0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHApe2lmKDA9PT1wKXJldHVybiAyNjt2YXIg''@;'; put 'put ''Yj1wLHg9MDtyZXR1cm4gODE5MSZifHwoeCs9MTMsYj4+Pj0xMyksMTI3JmJ8fCh4Kz03LGI+Pj49NyksMTUmYnx8KHgrPTQsYj4+Pj00KSwzJmJ8fCh4Kz0yLGI+Pj49MiksMSZifHx4KysseH0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5fY291bnRCaXRz''@;'; put 'put ''KHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrYn0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgcD0wLGI9MDtiPHRoaXMubGVuZ3RoO2IrKyl7dmFyIHg9dGhpcy5femVy''@;'; put 'put ''b0JpdHModGhpcy53b3Jkc1tiXSk7aWYocCs9eCwyNiE9PXgpYnJlYWt9cmV0dXJuIHB9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gMCE9''@;'; put 'put ''PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihwKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnRlc3RuKHAtMSk/dGhpcy5ub3RuKHApLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90''@;'; put 'put ''eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2''@;'; put 'put ''ZV49MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHAubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBiPTA7YjxwLmxlbmd0aDtiKyspdGhpcy53b3Jkc1tiXT10aGlzLndvcmRzW2JdfHAud29yZHNbYl07cmV0''@;'; put 'put ''dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdW9yKHApfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgp''@;'; put 'put ''LmlvcihwKTpwLmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHApOnAuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihwKXt2YXIgYjti''@;'; put 'put ''PXRoaXMubGVuZ3RoPnAubGVuZ3RoP3A6dGhpcztmb3IodmFyIHg9MDt4PGIubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPXRoaXMud29yZHNbeF0mcC53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHAp''@;'; put 'put ''e3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChwKX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChwKTpwLmNsb25lKCkuaWFuZCh0aGlzKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''dWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHApOnAuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24ocCl7dmFyIGIseDt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oYj10aGlzLHg9cCk6KGI9''@;'; put 'put ''cCx4PXRoaXMpO2Zvcih2YXIgQz0wO0M8eC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109Yi53b3Jkc1tDXV54LndvcmRzW0NdO2lmKHRoaXMhPT1iKWZvcig7QzxiLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0''@;'; put 'put ''cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1eG9yKHApfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHAp''@;'; put 'put ''OnAuY2xvbmUoKS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IocCk6cC5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihwKXtnKCJudW1iZXIi''@;'; put 'put ''PT10eXBlb2YgcCYmcD49MCk7dmFyIGI9MHxNYXRoLmNlaWwocC8yNikseD1wJTI2O3RoaXMuX2V4cGFuZChiKSx4PjAmJmItLTtmb3IodmFyIEM9MDtDPGI7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmfnRoaXMud29yZHNbQ107cmV0dXJuIHg+MCYmKHRoaXMud29yZHNbQ109fnRoaXMu''@;'; put 'put ''d29yZHNbQ10mNjcxMDg4NjM+PjI2LXgpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHApfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHAsYil7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciB4PXAv''@;'; put 'put ''MjZ8MCxDPXAlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF09Yj90aGlzLndvcmRzW3hdfDE8PEM6dGhpcy53b3Jkc1t4XSZ+KDE8PEMpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwKXt2YXIgYix4LEM7aWYoMCE9PXRoaXMubmVnYXRp''@;'; put 'put ''dmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZSlyZXR1cm4gcC5uZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKHApLHAu''@;'; put 'put ''bmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPnAubGVuZ3RoPyh4PXRoaXMsQz1wKTooeD1wLEM9dGhpcyk7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKGI9KDB8eC53b3Jkc1tIXSkrKDB8Qy53b3Jkc1tIXSkrVCksVD1i''@;'; put 'put ''Pj4+MjY7Zm9yKDswIT09VCYmSDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKStUKSxUPWI+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1ULHRoaXMubGVuZ3RoKys7ZWxzZSBpZih4''@;'; put 'put ''IT09dGhpcylmb3IoO0g8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09eC53b3Jkc1tIXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHApe3ZhciBiO3JldHVybiAwIT09cC5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHAubmVnYXRpdmU9MCxiPXRoaXMuc3Vi''@;'; put 'put ''KHApLHAubmVnYXRpdmVePTEsYik6MD09PXAubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsYj1wLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsYik6dGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQocCk6cC5jbG9uZSgpLmlhZGQodGhp''@;'; put 'put ''cyl9LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCl7aWYoMCE9PXAubmVnYXRpdmUpe3AubmVnYXRpdmU9MDt2YXIgYj10aGlzLmlhZGQocCk7cmV0dXJuIHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhp''@;'; put 'put ''cy5pYWRkKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBDLFQseD10aGlzLmNtcChwKTtpZigwPT09eClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7eD4wPyhDPXRoaXMsVD1wKTooQz1wLFQ9dGhpcyk7Zm9y''@;'; put 'put ''KHZhciBIPTAsaj0wO2o8VC5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSktKDB8VC53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtmb3IoOzAhPT1IJiZqPEMubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3''@;'; put 'put ''MTA4ODYzJmI7aWYoMD09PUgmJmo8Qy5sZW5ndGgmJkMhPT10aGlzKWZvcig7ajxDLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1DLndvcmRzW2pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxqKSxDIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJp''@;'; put 'put ''cCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHApfTt2YXIgWT1mdW5jdGlvbihwLGIseCl7dmFyIEUsbSxBLEM9cC53b3JkcyxUPWIud29yZHMsSD14LndvcmRzLGo9MCxvZT0wfENbMF0sdGU9ODE5MSZvZSxzZT1vZT4+PjEzLHdlPTB8''@;'; put 'put ''Q1sxXSxVZT04MTkxJndlLEplPXdlPj4+MTMsYXQ9MHxDWzJdLE1lPTgxOTEmYXQsdmU9YXQ+Pj4xMyxYZT0wfENbM10samU9ODE5MSZYZSxEZT1YZT4+PjEzLEZlPTB8Q1s0XSxSZT04MTkxJkZlLEllPUZlPj4+MTMsVmU9MHxDWzVdLGtlPTgxOTEmVmUsQWU9VmU+Pj4xMyxfdD0wfENbNl0s''@;'; put 'put ''cnQ9ODE5MSZfdCxRZT1fdD4+PjEzLGRuPTB8Q1s3XSx5dD04MTkxJmRuLE10PWRuPj4+MTMsRHQ9MHxDWzhdLGl0PTgxOTEmRHQsJGU9RHQ+Pj4xMyx0dD0wfENbOV0sSGU9ODE5MSZ0dCxkdD10dD4+PjEzLHF0PTB8VFswXSxSdD04MTkxJnF0LFB0PXF0Pj4+MTMsYWk9MHxUWzFdLFF0PTgx''@;'; put 'put ''OTEmYWksc249YWk+Pj4xMyxSaT0wfFRbMl0sZm49ODE5MSZSaSxmdD1SaT4+PjEzLFByPTB8VFszXSxadD04MTkxJlByLEF0PVByPj4+MTMsTG49MHxUWzRdLHN0PTgxOTEmTG4senQ9TG4+Pj4xMyxuaT0wfFRbNV0sV2U9ODE5MSZuaSxUdD1uaT4+PjEzLHJyPTB8VFs2XSxodD04MTkxJnJy''@;'; put 'put ''LHh0PXJyPj4+MTMsQm49MHxUWzddLG9uPTgxOTEmQm4sanQ9Qm4+Pj4xMyxkaT0wfFRbOF0sY249ODE5MSZkaSxwbj1kaT4+PjEzLElpPTB8VFs5XSxYdD04MTkxJklpLGVuPUlpPj4+MTM7eC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9MTk7dmFyIGhvPShqKyhF''@;'; put 'put ''PU1hdGguaW11bCh0ZSxSdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwodGUsUHQpKStNYXRoLmltdWwoc2UsUnQpfDApKTw8MTMpfDA7aj0oKEE9TWF0aC5pbXVsKHNlLFB0KSkrKG0+Pj4xMyl8MCkrKGhvPj4+MjYpfDAsaG8mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFVlLFJ0KSxtPSht''@;'; put 'put ''PU1hdGguaW11bChVZSxQdCkpK01hdGguaW11bChKZSxSdCl8MCxBPU1hdGguaW11bChKZSxQdCk7dmFyIE1pPShqKyhFPUUrTWF0aC5pbXVsKHRlLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsc24pfDApK01hdGguaW11bChzZSxRdCl8MCkpPDwxMyl8MDtqPSgoQT1B''@;'; put 'put ''K01hdGguaW11bChzZSxzbil8MCkrKG0+Pj4xMyl8MCkrKE1pPj4+MjYpfDAsTWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE1lLFJ0KSxtPShtPU1hdGguaW11bChNZSxQdCkpK01hdGguaW11bCh2ZSxSdCl8MCxBPU1hdGguaW11bCh2ZSxQdCksRT1FK01hdGguaW11bChVZSxRdCl8MCxtPSht''@;'; put 'put ''PW0rTWF0aC5pbXVsKFVlLHNuKXwwKStNYXRoLmltdWwoSmUsUXQpfDAsQT1BK01hdGguaW11bChKZSxzbil8MDt2YXIgcHI9KGorKEU9RStNYXRoLmltdWwodGUsZm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmdCl8MCkrTWF0aC5pbXVsKHNlLGZuKXwwKSk8PDEzKXww''@;'; put 'put ''O2o9KChBPUErTWF0aC5pbXVsKHNlLGZ0KXwwKSsobT4+PjEzKXwwKSsocHI+Pj4yNil8MCxwciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoamUsUnQpLG09KG09TWF0aC5pbXVsKGplLFB0KSkrTWF0aC5pbXVsKERlLFJ0KXwwLEE9TWF0aC5pbXVsKERlLFB0KSxFPUUrTWF0aC5pbXVsKE1lLFF0''@;'; put 'put ''KXwwLG09KG09bStNYXRoLmltdWwoTWUsc24pfDApK01hdGguaW11bCh2ZSxRdCl8MCxBPUErTWF0aC5pbXVsKHZlLHNuKXwwLEU9RStNYXRoLmltdWwoVWUsZm4pfDAsbT0obT1tK01hdGguaW11bChVZSxmdCl8MCkrTWF0aC5pbXVsKEplLGZuKXwwLEE9QStNYXRoLmltdWwoSmUsZnQpfDA7''@;'; put 'put ''dmFyIFduPShqKyhFPUUrTWF0aC5pbXVsKHRlLFp0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsQXQpfDApK01hdGguaW11bChzZSxadCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxBdCl8MCkrKG0+Pj4xMyl8MCkrKFduPj4+MjYpfDAsV24mPTY3MTA4ODYz''@;'; put 'put ''LEU9TWF0aC5pbXVsKFJlLFJ0KSxtPShtPU1hdGguaW11bChSZSxQdCkpK01hdGguaW11bChJZSxSdCl8MCxBPU1hdGguaW11bChJZSxQdCksRT1FK01hdGguaW11bChqZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLHNuKXwwKStNYXRoLmltdWwoRGUsUXQpfDAsQT1BK01hdGguaW11bChE''@;'; put 'put ''ZSxzbil8MCxFPUUrTWF0aC5pbXVsKE1lLGZuKXwwLG09KG09bStNYXRoLmltdWwoTWUsZnQpfDApK01hdGguaW11bCh2ZSxmbil8MCxBPUErTWF0aC5pbXVsKHZlLGZ0KXwwLEU9RStNYXRoLmltdWwoVWUsWnQpfDAsbT0obT1tK01hdGguaW11bChVZSxBdCl8MCkrTWF0aC5pbXVsKEplLFp0''@;'; put 'put ''KXwwLEE9QStNYXRoLmltdWwoSmUsQXQpfDA7dmFyIEtpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHN0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsenQpfDApK01hdGguaW11bChzZSxzdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx6dCl8MCkrKG0+Pj4xMyl8''@;'; put 'put ''MCkrKEtpPj4+MjYpfDAsS2kmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGtlLFJ0KSxtPShtPU1hdGguaW11bChrZSxQdCkpK01hdGguaW11bChBZSxSdCl8MCxBPU1hdGguaW11bChBZSxQdCksRT1FK01hdGguaW11bChSZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHNuKXwwKStNYXRoLmlt''@;'; put 'put ''dWwoSWUsUXQpfDAsQT1BK01hdGguaW11bChJZSxzbil8MCxFPUUrTWF0aC5pbXVsKGplLGZuKXwwLG09KG09bStNYXRoLmltdWwoamUsZnQpfDApK01hdGguaW11bChEZSxmbil8MCxBPUErTWF0aC5pbXVsKERlLGZ0KXwwLEU9RStNYXRoLmltdWwoTWUsWnQpfDAsbT0obT1tK01hdGguaW11''@;'; put 'put ''bChNZSxBdCl8MCkrTWF0aC5pbXVsKHZlLFp0KXwwLEE9QStNYXRoLmltdWwodmUsQXQpfDAsRT1FK01hdGguaW11bChVZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoSmUsc3QpfDAsQT1BK01hdGguaW11bChKZSx6dCl8MDt2YXIgUXI9KGorKEU9RStNYXRo''@;'; put 'put ''LmltdWwodGUsV2UpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxUdCl8MCkrTWF0aC5pbXVsKHNlLFdlKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFR0KXwwKSsobT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxRciY9NjcxMDg4NjMsRT1NYXRoLmltdWwocnQsUnQp''@;'; put 'put ''LG09KG09TWF0aC5pbXVsKHJ0LFB0KSkrTWF0aC5pbXVsKFFlLFJ0KXwwLEE9TWF0aC5pbXVsKFFlLFB0KSxFPUUrTWF0aC5pbXVsKGtlLFF0KXwwLG09KG09bStNYXRoLmltdWwoa2Usc24pfDApK01hdGguaW11bChBZSxRdCl8MCxBPUErTWF0aC5pbXVsKEFlLHNuKXwwLEU9RStNYXRoLmlt''@;'; put 'put ''dWwoUmUsZm4pfDAsbT0obT1tK01hdGguaW11bChSZSxmdCl8MCkrTWF0aC5pbXVsKEllLGZuKXwwLEE9QStNYXRoLmltdWwoSWUsZnQpfDAsRT1FK01hdGguaW11bChqZSxadCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLEF0KXwwKStNYXRoLmltdWwoRGUsWnQpfDAsQT1BK01hdGguaW11bChE''@;'; put 'put ''ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKE1lLHN0KXwwLG09KG09bStNYXRoLmltdWwoTWUsenQpfDApK01hdGguaW11bCh2ZSxzdCl8MCxBPUErTWF0aC5pbXVsKHZlLHp0KXwwLEU9RStNYXRoLmltdWwoVWUsV2UpfDAsbT0obT1tK01hdGguaW11bChVZSxUdCl8MCkrTWF0aC5pbXVsKEplLFdl''@;'; put 'put ''KXwwLEE9QStNYXRoLmltdWwoSmUsVHQpfDA7dmFyIEpyPShqKyhFPUUrTWF0aC5pbXVsKHRlLGh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUseHQpfDApK01hdGguaW11bChzZSxodCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx4dCl8MCkrKG0+Pj4xMyl8''@;'; put 'put ''MCkrKEpyPj4+MjYpfDAsSnImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHl0LFJ0KSxtPShtPU1hdGguaW11bCh5dCxQdCkpK01hdGguaW11bChNdCxSdCl8MCxBPU1hdGguaW11bChNdCxQdCksRT1FK01hdGguaW11bChydCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LHNuKXwwKStNYXRoLmlt''@;'; put 'put ''dWwoUWUsUXQpfDAsQT1BK01hdGguaW11bChRZSxzbil8MCxFPUUrTWF0aC5pbXVsKGtlLGZuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZnQpfDApK01hdGguaW11bChBZSxmbil8MCxBPUErTWF0aC5pbXVsKEFlLGZ0KXwwLEU9RStNYXRoLmltdWwoUmUsWnQpfDAsbT0obT1tK01hdGguaW11''@;'; put 'put ''bChSZSxBdCl8MCkrTWF0aC5pbXVsKEllLFp0KXwwLEE9QStNYXRoLmltdWwoSWUsQXQpfDAsRT1FK01hdGguaW11bChqZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLHp0KXwwKStNYXRoLmltdWwoRGUsc3QpfDAsQT1BK01hdGguaW11bChEZSx6dCl8MCxFPUUrTWF0aC5pbXVsKE1lLFdl''@;'; put 'put ''KXwwLG09KG09bStNYXRoLmltdWwoTWUsVHQpfDApK01hdGguaW11bCh2ZSxXZSl8MCxBPUErTWF0aC5pbXVsKHZlLFR0KXwwLEU9RStNYXRoLmltdWwoVWUsaHQpfDAsbT0obT1tK01hdGguaW11bChVZSx4dCl8MCkrTWF0aC5pbXVsKEplLGh0KXwwLEE9QStNYXRoLmltdWwoSmUseHQpfDA7''@;'; put 'put ''dmFyIEJpPShqKyhFPUUrTWF0aC5pbXVsKHRlLG9uKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsanQpfDApK01hdGguaW11bChzZSxvbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxqdCl8MCkrKG0+Pj4xMyl8MCkrKEJpPj4+MjYpfDAsQmkmPTY3MTA4ODYz''@;'; put 'put ''LEU9TWF0aC5pbXVsKGl0LFJ0KSxtPShtPU1hdGguaW11bChpdCxQdCkpK01hdGguaW11bCgkZSxSdCl8MCxBPU1hdGguaW11bCgkZSxQdCksRT1FK01hdGguaW11bCh5dCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHNuKXwwKStNYXRoLmltdWwoTXQsUXQpfDAsQT1BK01hdGguaW11bChN''@;'; put 'put ''dCxzbil8MCxFPUUrTWF0aC5pbXVsKHJ0LGZuKXwwLG09KG09bStNYXRoLmltdWwocnQsZnQpfDApK01hdGguaW11bChRZSxmbil8MCxBPUErTWF0aC5pbXVsKFFlLGZ0KXwwLEU9RStNYXRoLmltdWwoa2UsWnQpfDAsbT0obT1tK01hdGguaW11bChrZSxBdCl8MCkrTWF0aC5pbXVsKEFlLFp0''@;'; put 'put ''KXwwLEE9QStNYXRoLmltdWwoQWUsQXQpfDAsRT1FK01hdGguaW11bChSZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHp0KXwwKStNYXRoLmltdWwoSWUsc3QpfDAsQT1BK01hdGguaW11bChJZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGplLFdlKXwwLG09KG09bStNYXRoLmltdWwoamUsVHQp''@;'; put 'put ''fDApK01hdGguaW11bChEZSxXZSl8MCxBPUErTWF0aC5pbXVsKERlLFR0KXwwLEU9RStNYXRoLmltdWwoTWUsaHQpfDAsbT0obT1tK01hdGguaW11bChNZSx4dCl8MCkrTWF0aC5pbXVsKHZlLGh0KXwwLEE9QStNYXRoLmltdWwodmUseHQpfDAsRT1FK01hdGguaW11bChVZSxvbil8MCxtPSht''@;'; put 'put ''PW0rTWF0aC5pbXVsKFVlLGp0KXwwKStNYXRoLmltdWwoSmUsb24pfDAsQT1BK01hdGguaW11bChKZSxqdCl8MDt2YXIgVmk9KGorKEU9RStNYXRoLmltdWwodGUsY24pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxwbil8MCkrTWF0aC5pbXVsKHNlLGNuKXwwKSk8PDEzKXww''@;'; put 'put ''O2o9KChBPUErTWF0aC5pbXVsKHNlLHBuKXwwKSsobT4+PjEzKXwwKSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUnQpLG09KG09TWF0aC5pbXVsKEhlLFB0KSkrTWF0aC5pbXVsKGR0LFJ0KXwwLEE9TWF0aC5pbXVsKGR0LFB0KSxFPUUrTWF0aC5pbXVsKGl0LFF0''@;'; put 'put ''KXwwLG09KG09bStNYXRoLmltdWwoaXQsc24pfDApK01hdGguaW11bCgkZSxRdCl8MCxBPUErTWF0aC5pbXVsKCRlLHNuKXwwLEU9RStNYXRoLmltdWwoeXQsZm4pfDAsbT0obT1tK01hdGguaW11bCh5dCxmdCl8MCkrTWF0aC5pbXVsKE10LGZuKXwwLEE9QStNYXRoLmltdWwoTXQsZnQpfDAs''@;'; put 'put ''RT1FK01hdGguaW11bChydCxadCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LEF0KXwwKStNYXRoLmltdWwoUWUsWnQpfDAsQT1BK01hdGguaW11bChRZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGtlLHN0KXwwLG09KG09bStNYXRoLmltdWwoa2UsenQpfDApK01hdGguaW11bChBZSxzdCl8MCxBPUEr''@;'; put 'put ''TWF0aC5pbXVsKEFlLHp0KXwwLEU9RStNYXRoLmltdWwoUmUsV2UpfDAsbT0obT1tK01hdGguaW11bChSZSxUdCl8MCkrTWF0aC5pbXVsKEllLFdlKXwwLEE9QStNYXRoLmltdWwoSWUsVHQpfDAsRT1FK01hdGguaW11bChqZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLHh0KXwwKStNYXRo''@;'; put 'put ''LmltdWwoRGUsaHQpfDAsQT1BK01hdGguaW11bChEZSx4dCl8MCxFPUUrTWF0aC5pbXVsKE1lLG9uKXwwLG09KG09bStNYXRoLmltdWwoTWUsanQpfDApK01hdGguaW11bCh2ZSxvbil8MCxBPUErTWF0aC5pbXVsKHZlLGp0KXwwLEU9RStNYXRoLmltdWwoVWUsY24pfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bChVZSxwbil8MCkrTWF0aC5pbXVsKEplLGNuKXwwLEE9QStNYXRoLmltdWwoSmUscG4pfDA7dmFyIElvPShqKyhFPUUrTWF0aC5pbXVsKHRlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZW4pfDApK01hdGguaW11bChzZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1B''@;'; put 'put ''K01hdGguaW11bChzZSxlbil8MCkrKG0+Pj4xMyl8MCkrKElvPj4+MjYpfDAsSW8mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFF0KSxtPShtPU1hdGguaW11bChIZSxzbikpK01hdGguaW11bChkdCxRdCl8MCxBPU1hdGguaW11bChkdCxzbiksRT1FK01hdGguaW11bChpdCxmbil8MCxtPSht''@;'; put 'put ''PW0rTWF0aC5pbXVsKGl0LGZ0KXwwKStNYXRoLmltdWwoJGUsZm4pfDAsQT1BK01hdGguaW11bCgkZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFp0KXwwLG09KG09bStNYXRoLmltdWwoeXQsQXQpfDApK01hdGguaW11bChNdCxadCl8MCxBPUErTWF0aC5pbXVsKE10LEF0KXwwLEU9RStNYXRo''@;'; put 'put ''LmltdWwocnQsc3QpfDAsbT0obT1tK01hdGguaW11bChydCx6dCl8MCkrTWF0aC5pbXVsKFFlLHN0KXwwLEE9QStNYXRoLmltdWwoUWUsenQpfDAsRT1FK01hdGguaW11bChrZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLFR0KXwwKStNYXRoLmltdWwoQWUsV2UpfDAsQT1BK01hdGguaW11''@;'; put 'put ''bChBZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFJlLGh0KXwwLG09KG09bStNYXRoLmltdWwoUmUseHQpfDApK01hdGguaW11bChJZSxodCl8MCxBPUErTWF0aC5pbXVsKEllLHh0KXwwLEU9RStNYXRoLmltdWwoamUsb24pfDAsbT0obT1tK01hdGguaW11bChqZSxqdCl8MCkrTWF0aC5pbXVsKERl''@;'; put 'put ''LG9uKXwwLEE9QStNYXRoLmltdWwoRGUsanQpfDAsRT1FK01hdGguaW11bChNZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHBuKXwwKStNYXRoLmltdWwodmUsY24pfDAsQT1BK01hdGguaW11bCh2ZSxwbil8MDt2YXIgT3I9KGorKEU9RStNYXRoLmltdWwoVWUsWHQpfDApfDApKygoODE5''@;'; put 'put ''MSYobT0obT1tK01hdGguaW11bChVZSxlbil8MCkrTWF0aC5pbXVsKEplLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEplLGVuKXwwKSsobT4+PjEzKXwwKSsoT3I+Pj4yNil8MCxPciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsZm4pLG09KG09TWF0aC5pbXVsKEhlLGZ0KSkr''@;'; put 'put ''TWF0aC5pbXVsKGR0LGZuKXwwLEE9TWF0aC5pbXVsKGR0LGZ0KSxFPUUrTWF0aC5pbXVsKGl0LFp0KXwwLG09KG09bStNYXRoLmltdWwoaXQsQXQpfDApK01hdGguaW11bCgkZSxadCl8MCxBPUErTWF0aC5pbXVsKCRlLEF0KXwwLEU9RStNYXRoLmltdWwoeXQsc3QpfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bCh5dCx6dCl8MCkrTWF0aC5pbXVsKE10LHN0KXwwLEE9QStNYXRoLmltdWwoTXQsenQpfDAsRT1FK01hdGguaW11bChydCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LFR0KXwwKStNYXRoLmltdWwoUWUsV2UpfDAsQT1BK01hdGguaW11bChRZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGtl''@;'; put 'put ''LGh0KXwwLG09KG09bStNYXRoLmltdWwoa2UseHQpfDApK01hdGguaW11bChBZSxodCl8MCxBPUErTWF0aC5pbXVsKEFlLHh0KXwwLEU9RStNYXRoLmltdWwoUmUsb24pfDAsbT0obT1tK01hdGguaW11bChSZSxqdCl8MCkrTWF0aC5pbXVsKEllLG9uKXwwLEE9QStNYXRoLmltdWwoSWUsanQp''@;'; put 'put ''fDAsRT1FK01hdGguaW11bChqZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGplLHBuKXwwKStNYXRoLmltdWwoRGUsY24pfDAsQT1BK01hdGguaW11bChEZSxwbil8MDt2YXIgWWk9KGorKEU9RStNYXRoLmltdWwoTWUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChNZSxlbil8''@;'; put 'put ''MCkrTWF0aC5pbXVsKHZlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHZlLGVuKXwwKSsobT4+PjEzKXwwKSsoWWk+Pj4yNil8MCxZaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsWnQpLG09KG09TWF0aC5pbXVsKEhlLEF0KSkrTWF0aC5pbXVsKGR0LFp0KXwwLEE9TWF0aC5p''@;'; put 'put ''bXVsKGR0LEF0KSxFPUUrTWF0aC5pbXVsKGl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCgkZSxzdCl8MCxBPUErTWF0aC5pbXVsKCRlLHp0KXwwLEU9RStNYXRoLmltdWwoeXQsV2UpfDAsbT0obT1tK01hdGguaW11bCh5dCxUdCl8MCkrTWF0aC5pbXVsKE10''@;'; put 'put ''LFdlKXwwLEE9QStNYXRoLmltdWwoTXQsVHQpfDAsRT1FK01hdGguaW11bChydCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LHh0KXwwKStNYXRoLmltdWwoUWUsaHQpfDAsQT1BK01hdGguaW11bChRZSx4dCl8MCxFPUUrTWF0aC5pbXVsKGtlLG9uKXwwLG09KG09bStNYXRoLmltdWwoa2Us''@;'; put 'put ''anQpfDApK01hdGguaW11bChBZSxvbil8MCxBPUErTWF0aC5pbXVsKEFlLGp0KXwwLEU9RStNYXRoLmltdWwoUmUsY24pfDAsbT0obT1tK01hdGguaW11bChSZSxwbil8MCkrTWF0aC5pbXVsKEllLGNuKXwwLEE9QStNYXRoLmltdWwoSWUscG4pfDA7dmFyIGdvPShqKyhFPUUrTWF0aC5pbXVs''@;'; put 'put ''KGplLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoamUsZW4pfDApK01hdGguaW11bChEZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChEZSxlbil8MCkrKG0+Pj4xMyl8MCkrKGdvPj4+MjYpfDAsZ28mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHN0KSxtPSht''@;'; put 'put ''PU1hdGguaW11bChIZSx6dCkpK01hdGguaW11bChkdCxzdCl8MCxBPU1hdGguaW11bChkdCx6dCksRT1FK01hdGguaW11bChpdCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFR0KXwwKStNYXRoLmltdWwoJGUsV2UpfDAsQT1BK01hdGguaW11bCgkZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHl0''@;'; put 'put ''LGh0KXwwLG09KG09bStNYXRoLmltdWwoeXQseHQpfDApK01hdGguaW11bChNdCxodCl8MCxBPUErTWF0aC5pbXVsKE10LHh0KXwwLEU9RStNYXRoLmltdWwocnQsb24pfDAsbT0obT1tK01hdGguaW11bChydCxqdCl8MCkrTWF0aC5pbXVsKFFlLG9uKXwwLEE9QStNYXRoLmltdWwoUWUsanQp''@;'; put 'put ''fDAsRT1FK01hdGguaW11bChrZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHBuKXwwKStNYXRoLmltdWwoQWUsY24pfDAsQT1BK01hdGguaW11bChBZSxwbil8MDt2YXIgZXI9KGorKEU9RStNYXRoLmltdWwoUmUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChSZSxlbil8''@;'; put 'put ''MCkrTWF0aC5pbXVsKEllLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEllLGVuKXwwKSsobT4+PjEzKXwwKSsoZXI+Pj4yNil8MCxlciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV2UpLG09KG09TWF0aC5pbXVsKEhlLFR0KSkrTWF0aC5pbXVsKGR0LFdlKXwwLEE9TWF0aC5p''@;'; put 'put ''bXVsKGR0LFR0KSxFPUUrTWF0aC5pbXVsKGl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoaXQseHQpfDApK01hdGguaW11bCgkZSxodCl8MCxBPUErTWF0aC5pbXVsKCRlLHh0KXwwLEU9RStNYXRoLmltdWwoeXQsb24pfDAsbT0obT1tK01hdGguaW11bCh5dCxqdCl8MCkrTWF0aC5pbXVsKE10''@;'; put 'put ''LG9uKXwwLEE9QStNYXRoLmltdWwoTXQsanQpfDAsRT1FK01hdGguaW11bChydCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LHBuKXwwKStNYXRoLmltdWwoUWUsY24pfDAsQT1BK01hdGguaW11bChRZSxwbil8MDt2YXIgY289KGorKEU9RStNYXRoLmltdWwoa2UsWHQpfDApfDApKygoODE5''@;'; put 'put ''MSYobT0obT1tK01hdGguaW11bChrZSxlbil8MCkrTWF0aC5pbXVsKEFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEFlLGVuKXwwKSsobT4+PjEzKXwwKSsoY28+Pj4yNil8MCxjbyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaHQpLG09KG09TWF0aC5pbXVsKEhlLHh0KSkr''@;'; put 'put ''TWF0aC5pbXVsKGR0LGh0KXwwLEE9TWF0aC5pbXVsKGR0LHh0KSxFPUUrTWF0aC5pbXVsKGl0LG9uKXwwLG09KG09bStNYXRoLmltdWwoaXQsanQpfDApK01hdGguaW11bCgkZSxvbil8MCxBPUErTWF0aC5pbXVsKCRlLGp0KXwwLEU9RStNYXRoLmltdWwoeXQsY24pfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bCh5dCxwbil8MCkrTWF0aC5pbXVsKE10LGNuKXwwLEE9QStNYXRoLmltdWwoTXQscG4pfDA7dmFyIF9vPShqKyhFPUUrTWF0aC5pbXVsKHJ0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwocnQsZW4pfDApK01hdGguaW11bChRZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1B''@;'; put 'put ''K01hdGguaW11bChRZSxlbil8MCkrKG0+Pj4xMyl8MCkrKF9vPj4+MjYpfDAsX28mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLG9uKSxtPShtPU1hdGguaW11bChIZSxqdCkpK01hdGguaW11bChkdCxvbil8MCxBPU1hdGguaW11bChkdCxqdCksRT1FK01hdGguaW11bChpdCxjbil8MCxtPSht''@;'; put 'put ''PW0rTWF0aC5pbXVsKGl0LHBuKXwwKStNYXRoLmltdWwoJGUsY24pfDAsQT1BK01hdGguaW11bCgkZSxwbil8MDt2YXIgT289KGorKEU9RStNYXRoLmltdWwoeXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh5dCxlbil8MCkrTWF0aC5pbXVsKE10LFh0KXwwKSk8PDEzKXww''@;'; put 'put ''O2o9KChBPUErTWF0aC5pbXVsKE10LGVuKXwwKSsobT4+PjEzKXwwKSsoT28+Pj4yNil8MCxPbyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsY24pLG09KG09TWF0aC5pbXVsKEhlLHBuKSkrTWF0aC5pbXVsKGR0LGNuKXwwLEE9TWF0aC5pbXVsKGR0LHBuKTt2YXIgSG89KGorKEU9RStNYXRo''@;'; put 'put ''LmltdWwoaXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChpdCxlbil8MCkrTWF0aC5pbXVsKCRlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKCRlLGVuKXwwKSsobT4+PjEzKXwwKSsoSG8+Pj4yNil8MCxIbyY9NjcxMDg4NjM7dmFyIGVpPShqKyhFPU1hdGgu''@;'; put 'put ''aW11bChIZSxYdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwoSGUsZW4pKStNYXRoLmltdWwoZHQsWHQpfDApKTw8MTMpfDA7cmV0dXJuIGo9KChBPU1hdGguaW11bChkdCxlbikpKyhtPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxIWzBdPWhvLEhbMV09TWksSFsyXT1w''@;'; put 'put ''cixIWzNdPVduLEhbNF09S2ksSFs1XT1RcixIWzZdPUpyLEhbN109QmksSFs4XT1WaSxIWzldPUlvLEhbMTBdPU9yLEhbMTFdPVlpLEhbMTJdPWdvLEhbMTNdPWVyLEhbMTRdPWNvLEhbMTVdPV9vLEhbMTZdPU9vLEhbMTddPUhvLEhbMThdPWVpLDAhPT1qJiYoSFsxOV09aix4Lmxlbmd0aCsr''@;'; put 'put ''KSx4fTtmdW5jdGlvbiBlZShWLHAsYil7cmV0dXJuKG5ldyBKKS5tdWxwKFYscCxiKX1mdW5jdGlvbiBKKFYscCl7dGhpcy54PVYsdGhpcy55PXB9TWF0aC5pbXVsfHwoWT1XKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5sZW5ndGgrcC5sZW5ndGg7cmV0''@;'; put 'put ''dXJuIHg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1wLmxlbmd0aD9ZKHRoaXMscCxiKTpDPDYzP1codGhpcyxwLGIpOkM8MTAyND9mdW5jdGlvbiBYKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZSxiLmxlbmd0aD1WLmxlbmd0aCtwLmxlbmd0aDtmb3IodmFyIHg9MCxD''@;'; put 'put ''PTAsVD0wO1Q8Yi5sZW5ndGgtMTtUKyspe3ZhciBIPUM7Qz0wO2Zvcih2YXIgaj02NzEwODg2MyZ4LEU9TWF0aC5taW4oVCxwLmxlbmd0aC0xKSxtPU1hdGgubWF4KDAsVC1WLmxlbmd0aCsxKTttPD1FO20rKyl7dmFyIHNlPSgwfFYud29yZHNbVC1tXSkqKDB8cC53b3Jkc1ttXSksd2U9Njcx''@;'; put 'put ''MDg4NjMmc2U7aj02NzEwODg2MyYod2U9d2UranwwKSxDKz0oSD0oSD1IKyhzZS82NzEwODg2NHwwKXwwKSsod2U+Pj4yNil8MCk+Pj4yNixIJj02NzEwODg2M31iLndvcmRzW1RdPWoseD1ILEg9Q31yZXR1cm4gMCE9PXg/Yi53b3Jkc1tUXT14OmIubGVuZ3RoLS0sYi5zdHJpcCgpfSh0aGlz''@;'; put 'put ''LHAsYik6ZWUodGhpcyxwLGIpLHh9LEoucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PXcucHJvdG90eXBlLl9jb3VudEJpdHMocCktMSxDPTA7QzxwO0MrKyliW0NdPXRoaXMucmV2QmluKEMseCxwKTtyZXR1cm4gYn0sSi5wcm90b3R5cGUu''@;'; put 'put ''cmV2QmluPWZ1bmN0aW9uKHAsYix4KXtpZigwPT09cHx8cD09PXgtMSlyZXR1cm4gcDtmb3IodmFyIEM9MCxUPTA7VDxiO1QrKylDfD0oMSZwKTw8Yi1ULTEscD4+PTE7cmV0dXJuIEN9LEoucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24ocCxiLHgsQyxULEgpe2Zvcih2YXIgaj0wO2o8SDtq''@;'; put 'put ''KyspQ1tqXT1iW3Bbal1dLFRbal09eFtwW2pdXX0sSi5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXt0aGlzLnBlcm11dGUoSCxwLGIseCxDLFQpO2Zvcih2YXIgaj0xO2o8VDtqPDw9MSlmb3IodmFyIEU9ajw8MSxtPU1hdGguY29zKDIqTWF0aC5QSS9FKSxBPU1h''@;'; put 'put ''dGguc2luKDIqTWF0aC5QSS9FKSxvZT0wO29lPFQ7b2UrPUUpZm9yKHZhciB0ZT1tLHNlPUEsd2U9MDt3ZTxqO3dlKyspe3ZhciBVZT14W29lK3dlXSxKZT1DW29lK3dlXSxhdD14W29lK3dlK2pdLE1lPUNbb2Urd2Ural0sdmU9dGUqYXQtc2UqTWU7TWU9dGUqTWUrc2UqYXQseFtvZSt3ZV09''@;'; put 'put ''VWUrKGF0PXZlKSxDW29lK3dlXT1KZStNZSx4W29lK3dlK2pdPVVlLWF0LENbb2Urd2Ural09SmUtTWUsd2UhPT1FJiYodmU9bSp0ZS1BKnNlLHNlPW0qc2UrQSp0ZSx0ZT12ZSl9fSxKLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihwLGIpe3ZhciB4PTF8TWF0aC5tYXgoYixwKSxD''@;'; put 'put ''PTEmeCxUPTA7Zm9yKHg9eC8yfDA7eDt4Pj4+PTEpVCsrO3JldHVybiAxPDxUKzErQ30sSi5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHAsYix4KXtpZighKHg8PTEpKWZvcih2YXIgQz0wO0M8eC8yO0MrKyl7dmFyIFQ9cFtDXTtwW0NdPXBbeC1DLTFdLHBbeC1DLTFdPVQsVD1iW0Nd''@;'; put 'put ''LGJbQ109LWJbeC1DLTFdLGJbeC1DLTFdPS1UfX0sSi5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTAsQz0wO0M8Yi8yO0MrKyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5kKHBbMipDKzFdL2IpK01hdGgucm91bmQocFsyKkNdL2IpK3g7cFtDXT02NzEwODg2''@;'; put 'put ''MyZULHg9VDw2NzEwODg2ND8wOlQvNjcxMDg4NjR8MH1yZXR1cm4gcH0sSi5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihwLGIseCxDKXtmb3IodmFyIFQ9MCxIPTA7SDxiO0grKyl4WzIqSF09ODE5MSYoVCs9MHxwW0hdKSx4WzIqSCsxXT04MTkxJihUPj4+PTEzKSxUPj4+PTEzO2Zv''@;'; put 'put ''cihIPTIqYjtIPEM7KytIKXhbSF09MDtnKDA9PT1UKSxnKCEoLTgxOTImVCkpfSxKLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD0wO3g8cDt4KyspYlt4XT0wO3JldHVybiBifSxKLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHAsYix4KXt2YXIg''@;'; put 'put ''Qz0yKnRoaXMuZ3Vlc3NMZW4xM2IocC5sZW5ndGgsYi5sZW5ndGgpLFQ9dGhpcy5tYWtlUkJUKEMpLEg9dGhpcy5zdHViKEMpLGo9bmV3IEFycmF5KEMpLEU9bmV3IEFycmF5KEMpLG09bmV3IEFycmF5KEMpLEE9bmV3IEFycmF5KEMpLG9lPW5ldyBBcnJheShDKSx0ZT1uZXcgQXJyYXkoQyks''@;'; put 'put ''c2U9eC53b3JkcztzZS5sZW5ndGg9Qyx0aGlzLmNvbnZlcnQxM2IocC53b3JkcyxwLmxlbmd0aCxqLEMpLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLEEsQyksdGhpcy50cmFuc2Zvcm0oaixILEUsbSxDLFQpLHRoaXMudHJhbnNmb3JtKEEsSCxvZSx0ZSxDLFQpO2Zvcih2YXIg''@;'; put 'put ''d2U9MDt3ZTxDO3dlKyspe3ZhciBVZT1FW3dlXSpvZVt3ZV0tbVt3ZV0qdGVbd2VdO21bd2VdPUVbd2VdKnRlW3dlXSttW3dlXSpvZVt3ZV0sRVt3ZV09VWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKEUsbSxDKSx0aGlzLnRyYW5zZm9ybShFLG0sc2UsSCxDLFQpLHRoaXMuY29uanVnYXRlKHNl''@;'; put 'put ''LEgsQyksdGhpcy5ub3JtYWxpemUxM2Ioc2UsQykseC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9cC5sZW5ndGgrYi5sZW5ndGgseC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3''@;'; put 'put ''IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSx0aGlzLm11bFRvKHAsYil9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSxlZSh0aGlzLHAsYil9LHcucHJvdG90eXBl''@;'; put 'put ''LmltdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhwLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KTtmb3IodmFyIGI9MCx4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBDPSgwfHRo''@;'; put 'put ''aXMud29yZHNbeF0pKnAsVD0oNjcxMDg4NjMmQykrKDY3MTA4ODYzJmIpO2I+Pj0yNixiKz1DLzY3MTA4ODY0fDAsYis9VD4+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PWImJih0aGlzLndvcmRzW3hdPWIsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUu''@;'; put 'put ''bXVsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHApfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90''@;'; put 'put ''eXBlLnBvdz1mdW5jdGlvbihwKXt2YXIgYj1mdW5jdGlvbiBVKFYpe2Zvcih2YXIgcD1uZXcgQXJyYXkoVi5iaXRMZW5ndGgoKSksYj0wO2I8cC5sZW5ndGg7YisrKXt2YXIgQz1iJTI2O3BbYl09KFYud29yZHNbYi8yNnwwXSYxPDxDKT4+PkN9cmV0dXJuIHB9KHApO2lmKDA9PT1iLmxlbmd0''@;'; put 'put ''aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciB4PXRoaXMsQz0wO0M8Yi5sZW5ndGgmJjA9PT1iW0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzxiLmxlbmd0aClmb3IodmFyIFQ9eC5zcXIoKTtDPGIubGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PWJbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0s''@;'; put 'put ''dy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgVCxiPXAlMjYseD0ocC1iKS8yNixDPTY3MTA4ODYzPj4+MjYtYjw8MjYtYjtpZigwIT09Yil7dmFyIEg9MDtmb3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgaj10aGlzLndv''@;'; put 'put ''cmRzW1RdJkM7dGhpcy53b3Jkc1tUXT0oMHx0aGlzLndvcmRzW1RdKS1qPDxifEgsSD1qPj4+MjYtYn1IJiYodGhpcy53b3Jkc1tUXT1ILHRoaXMubGVuZ3RoKyspfWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2Zv''@;'; put 'put ''cihUPTA7VDx4O1QrKyl0aGlzLndvcmRzW1RdPTA7dGhpcy5sZW5ndGgrPXh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rp''@;'; put 'put ''b24ocCxiLHgpe3ZhciBDO2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKSxDPWI/KGItYiUyNikvMjY6MDt2YXIgVD1wJTI2LEg9TWF0aC5taW4oKHAtVCkvMjYsdGhpcy5sZW5ndGgpLGo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtpZihDLT1ILEM9TWF0aC5tYXgoMCxDKSxFKXtm''@;'; put 'put ''b3IodmFyIG09MDttPEg7bSsrKUUud29yZHNbbV09dGhpcy53b3Jkc1ttXTtFLmxlbmd0aD1IfWlmKDAhPT1IKWlmKHRoaXMubGVuZ3RoPkgpZm9yKHRoaXMubGVuZ3RoLT1ILG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRoaXMud29yZHNbbStIXTtlbHNlIHRoaXMud29y''@;'; put 'put ''ZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBBPTA7Zm9yKG09dGhpcy5sZW5ndGgtMTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIG9lPTB8dGhpcy53b3Jkc1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8b2U+Pj5ULEE9b2Uman1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVu''@;'; put 'put ''Z3RoKytdPUEpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4ocCxiLHgpfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5zaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4ocCl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4o''@;'; put 'put ''cCl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHApfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8''@;'; put 'put ''PXh8fCEodGhpcy53b3Jkc1t4XSYxPDxiKSl9LHcucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0''@;'; put 'put ''aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9eD90aGlzOigwIT09YiYmeCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT1iJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5iPDxiKSx0aGlzLnN0cmlwKCkpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5tYXNrbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihwKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MD90aGlzLmlzdWJuKC1wKTowIT09dGhpcy5uZWdhdGl2ZT8x''@;'; put 'put ''PT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHA/KHRoaXMud29yZHNbMF09cC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihwKX0sdy5w''@;'; put 'put ''cm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHApe3RoaXMud29yZHNbMF0rPXA7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXT49NjcxMDg4NjQ7YisrKXRoaXMud29yZHNbYl0tPTY3MTA4ODY0LGI9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbYisxXT0xOnRoaXMu''@;'; put 'put ''d29yZHNbYisxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxiKzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHApe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MClyZXR1cm4gdGhpcy5pYWRkbigtcCk7aWYoMCE9''@;'; put 'put ''PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXAsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0''@;'; put 'put ''aXZlPTE7ZWxzZSBmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPDA7YisrKXRoaXMud29yZHNbYl0rPTY3MTA4ODY0LHRoaXMud29yZHNbYisxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNs''@;'; put 'put ''b25lKCkuaWFkZG4ocCl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihwKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihwLGIseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKHAubGVuZ3RoK3gpO3ZhciBILGo9MDtmb3IoVD0wO1Q8cC5sZW5ndGg7VCsrKXtIPSgwfHRoaXMud29yZHNbVCt4XSkrajt2YXIgRT0oMHxwLndv''@;'; put 'put ''cmRzW1RdKSpiO2o9KChILT02NzEwODg2MyZFKT4+MjYpLShFLzY3MTA4ODY0fDApLHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIfWZvcig7VDx0aGlzLmxlbmd0aC14O1QrKylqPShIPSgwfHRoaXMud29yZHNbVCt4XSkraik+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIO2lmKDA9''@;'; put 'put ''PT1qKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKGcoLTE9PT1qKSxqPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKWo9KEg9LSgwfHRoaXMud29yZHNbVF0pK2opPj4yNix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJkg7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90''@;'; put 'put ''eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmNsb25lKCksVD1wLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRoaXMuX2NvdW50Qml0cyhIKSkmJihUPVQudXNobG4oeCksQy5pdXNobG4oeCksSD0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9''@;'; put 'put ''Qy5sZW5ndGgtVC5sZW5ndGg7aWYoIm1vZCIhPT1iKXsobT1uZXcgdyhudWxsKSkubGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0aCk7Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0wfXZhciBvZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTsw''@;'; put 'put ''PT09b2UubmVnYXRpdmUmJihDPW9lLG0mJihtLndvcmRzW0VdPTEpKTtmb3IodmFyIHRlPUUtMTt0ZT49MDt0ZS0tKXt2YXIgc2U9NjcxMDg4NjQqKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZV0pKygwfEMud29yZHNbVC5sZW5ndGgrdGUtMV0pO2ZvcihzZT1NYXRoLm1pbihzZS9IfDAsNjcxMDg4''@;'; put 'put ''NjMpLEMuX2lzaGxuc3VibXVsKFQsc2UsdGUpOzAhPT1DLm5lZ2F0aXZlOylzZS0tLEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsdGUpLEMuaXNaZXJvKCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1t0ZV09c2UpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJk''@;'; put 'put ''aXYiIT09YiYmMCE9PXgmJkMuaXVzaHJuKHgpLHtkaXY6bXx8bnVsbCxtb2Q6Q319LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGcoIXAuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZl''@;'; put 'put ''JiYwPT09cC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLGIpLCJtb2QiIT09YiYmKEM9SC5kaXYubmVnKCkpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChwKSkse2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1w''@;'; put 'put ''Lm5lZ2F0aXZlPyhIPXRoaXMuZGl2bW9kKHAubmVnKCksYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSkse2RpdjpDLG1vZDpILm1vZH0pOnRoaXMubmVnYXRpdmUmcC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLm5lZygpLGIpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCks''@;'; put 'put ''eCYmMCE9PVQubmVnYXRpdmUmJlQuaXN1YihwKSkse2RpdjpILmRpdixtb2Q6VH0pOnAubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChwKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1wLmxlbmd0aD8iZGl2Ij09PWI/e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm51''@;'; put 'put ''bGx9OiJtb2QiPT09Yj97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHAsYik7dmFyIEMsVCxIfSx3LnByb3RvdHlwZS5kaXY9''@;'; put 'put ''ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1v''@;'; put 'put ''ZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5kaXZtb2QocCk7aWYoYi5tb2QuaXNaZXJvKCkpcmV0dXJuIGIuZGl2O3ZhciB4PTAhPT1iLmRpdi5uZWdhdGl2ZT9iLm1vZC5pc3ViKHApOmIubW9kLEM9cC51c2hybigxKSxUPXAuYW5kbG4o''@;'; put 'put ''MSksSD14LmNtcChDKTtyZXR1cm4gSDwwfHwxPT09VCYmMD09PUg/Yi5kaXY6MCE9PWIuZGl2Lm5lZ2F0aXZlP2IuZGl2LmlzdWJuKDEpOmIuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0oMTw8MjYpJXAseD0wLEM9''@;'; put 'put ''dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl4PShiKngrKDB8dGhpcy53b3Jkc1tDXSkpJXA7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4''@;'; put 'put ''XSkrNjcxMDg4NjQqYjt0aGlzLndvcmRzW3hdPUMvcHwwLGI9QyVwfXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihwKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZl''@;'; put 'put ''KSxnKCFwLmlzWmVybygpKTt2YXIgYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPW5ldyB3KDApLGo9bmV3IHcoMSksRT0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7KWIuaXVzaHJu''@;'; put 'put ''KDEpLHguaXVzaHJuKDEpLCsrRTtmb3IodmFyIG09eC5jbG9uZSgpLEE9Yi5jbG9uZSgpOyFiLmlzWmVybygpOyl7Zm9yKHZhciBvZT0wLHRlPTE7IShiLndvcmRzWzBdJnRlKSYmb2U8MjY7KytvZSx0ZTw8PTEpO2lmKG9lPjApZm9yKGIuaXVzaHJuKG9lKTtvZS0tID4wOykoQy5pc09kZCgp''@;'; put 'put ''fHxULmlzT2RkKCkpJiYoQy5pYWRkKG0pLFQuaXN1YihBKSksQy5pdXNocm4oMSksVC5pdXNocm4oMSk7Zm9yKHZhciBzZT0wLHdlPTE7ISh4LndvcmRzWzBdJndlKSYmc2U8MjY7KytzZSx3ZTw8PTEpO2lmKHNlPjApZm9yKHguaXVzaHJuKHNlKTtzZS0tID4wOykoSC5pc09kZCgpfHxqLmlz''@;'; put 'put ''T2RkKCkpJiYoSC5pYWRkKG0pLGouaXN1YihBKSksSC5pdXNocm4oMSksai5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoSCksVC5pc3ViKGopKTooeC5pc3ViKGIpLEguaXN1YihDKSxqLmlzdWIoVCkpfXJldHVybnthOkgsYjpqLGdjZDp4Lml1c2hsbihFKX19LHcu''@;'; put 'put ''cHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgb2UsYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPXguY2xvbmUo''@;'; put 'put ''KTtiLmNtcG4oMSk+MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFyIGo9MCxFPTE7IShiLndvcmRzWzBdJkUpJiZqPDI2OysraixFPDw9MSk7aWYoaj4wKWZvcihiLml1c2hybihqKTtqLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKEgpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29y''@;'; put 'put ''ZHNbMF0mQSkmJm08MjY7KyttLEE8PD0xKTtpZihtPjApZm9yKHguaXVzaHJuKG0pO20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoSCksVC5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoVCkpOih4LmlzdWIoYiksVC5pc3ViKEMpKX1yZXR1cm4ob2U9MD09PWIuY21w''@;'; put 'put ''bigxKT9DOlQpLmNtcG4oMCk8MCYmb2UuaWFkZChwKSxvZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHApe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHAuYWJzKCk7aWYocC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgYj10aGlzLmNsb25lKCkseD1wLmNsb25lKCk7Yi5uZWdh''@;'; put 'put ''dGl2ZT0wLHgubmVnYXRpdmU9MDtmb3IodmFyIEM9MDtiLmlzRXZlbigpJiZ4LmlzRXZlbigpO0MrKyliLml1c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zvcig7Yi5pc0V2ZW4oKTspYi5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD1iLmNtcCh4KTtp''@;'; put 'put ''ZihUPDApe3ZhciBIPWI7Yj14LHg9SH1lbHNlIGlmKDA9PT1UfHwwPT09eC5jbXBuKDEpKWJyZWFrO2IuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZWdjZChwKS5hLnVtb2QocCl9LHcucHJvdG90eXBlLmlzRXZl''@;'; put 'put ''bj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZwfSx3LnByb3RvdHlwZS5iaW5j''@;'; put 'put ''bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCk7dmFyIGI9cCUyNix4PShwLWIpLzI2LEM9MTw8YjtpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIgVD1DLEg9eDswIT09VCYmSDx0aGlzLmxlbmd0''@;'; put 'put ''aDtIKyspe3ZhciBqPTB8dGhpcy53b3Jkc1tIXTtUPShqKz1UKT4+PjI2LHRoaXMud29yZHNbSF09aiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYodGhpcy53b3Jkc1tIXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhp''@;'; put 'put ''cy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhYilyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmYilyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+''@;'; put 'put ''MSl4PTE7ZWxzZXtiJiYocD0tcCksZyhwPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09cD8wOkM8cD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihwKXtpZigwIT09''@;'; put 'put ''dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBiPXRoaXMudWNtcChwKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtYjpifSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHAp''@;'; put 'put ''e2lmKHRoaXMubGVuZ3RoPnAubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHAubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9MHxwLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/Yj0tMTpDPlQm''@;'; put 'put ''JihiPTEpO2JyZWFrfX1yZXR1cm4gYn0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHApe3JldHVybiB0''@;'; put 'put ''aGlzLmNtcG4ocCk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNt''@;'; put 'put ''cChwKX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXBuKHApPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcG4ocCl9LHcu''@;'; put 'put ''cHJvdG90eXBlLmVxPWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5jbXAocCl9LHcucmVkPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgU2UocCl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24g''@;'; put 'put ''Y29udGV4dCIpLGcoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3''@;'; put 'put ''aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnJlZD1wLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0''@;'; put 'put ''aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5h''@;'; put 'put ''ZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0''@;'; put 'put ''aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVk''@;'; put 'put ''LmlzdWIodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0''@;'; put 'put ''aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQubXVsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdp''@;'; put 'put ''dGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHApLHRoaXMucmVkLmltdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVy''@;'; put 'put ''aWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3''@;'; put 'put ''LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiBnKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25s''@;'; put 'put ''eSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQmJiFwLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlz''@;'; put 'put ''KSx0aGlzLnJlZC5wb3codGhpcyxwKX07dmFyIHJlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gaWUoVixwKXt0aGlzLm5hbWU9Vix0aGlzLnA9bmV3IHcocCwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSku''@;'; put 'put ''aXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGxlKCl7aWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlv''@;'; put 'put ''biBtZSgpe2llLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gX2UoKXtpZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBm''@;'; put 'put ''ZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFRlKCl7aWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBTZShWKXtpZigic3RyaW5nIj09dHlwZW9mIFYpe3Zh''@;'; put 'put ''ciBwPXcuX3ByaW1lKFYpO3RoaXMubT1wLnAsdGhpcy5wcmltZT1wfWVsc2UgZyhWLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPVYsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIHplKFYpe1NlLmNhbGwodGhpcyxWKSx0aGlzLnNoaWZ0PXRoaXMubS5i''@;'; put 'put ''aXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5t''@;'; put 'put ''aW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWllLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJu''@;'; put 'put ''IHAud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxwfSxpZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihwKXt2YXIgeCxiPXA7ZG97dGhpcy5zcGxpdChiLHRoaXMudG1wKSx4PShiPShiPXRoaXMuaW11bEsoYikpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13''@;'; put 'put ''aGlsZSh4PnRoaXMubik7dmFyIEM9eDx0aGlzLm4/LTE6Yi51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1DPyhiLndvcmRzWzBdPTAsYi5sZW5ndGg9MSk6Qz4wP2IuaXN1Yih0aGlzLnApOnZvaWQgMCE9PWIuc3RyaXA/Yi5zdHJpcCgpOmIuX3N0cmlwKCksYn0saWUucHJvdG90eXBlLnNwbGl0''@;'; put 'put ''PWZ1bmN0aW9uKHAsYil7cC5pdXNocm4odGhpcy5uLDAsYil9LGllLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pbXVsKHRoaXMuayl9LEIobGUsaWUpLGxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4ocC5s''@;'; put 'put ''ZW5ndGgsOSksVD0wO1Q8QztUKyspYi53b3Jkc1tUXT1wLndvcmRzW1RdO2lmKGIubGVuZ3RoPUMscC5sZW5ndGg8PTkpcmV0dXJuIHAud29yZHNbMF09MCx2b2lkKHAubGVuZ3RoPTEpO3ZhciBIPXAud29yZHNbOV07Zm9yKGIud29yZHNbYi5sZW5ndGgrK109SCZ4LFQ9MTA7VDxwLmxlbmd0''@;'; put 'put ''aDtUKyspe3ZhciBqPTB8cC53b3Jkc1tUXTtwLndvcmRzW1QtMTBdPShqJngpPDw0fEg+Pj4yMixIPWp9cC53b3Jkc1tULTEwXT1IPj4+PTIyLHAubGVuZ3RoLT0wPT09SCYmcC5sZW5ndGg+MTA/MTA6OX0sbGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3Aud29yZHNbcC5sZW5ndGhd''@;'; put 'put ''PTAscC53b3Jkc1twLmxlbmd0aCsxXT0wLHAubGVuZ3RoKz0yO2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MHxwLndvcmRzW3hdO3Aud29yZHNbeF09NjcxMDg4NjMmKGIrPTk3NypDKSxiPTY0KkMrKGIvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1wLndvcmRzW3AubGVu''@;'; put 'put ''Z3RoLTFdJiYocC5sZW5ndGgtLSwwPT09cC53b3Jkc1twLmxlbmd0aC0xXSYmcC5sZW5ndGgtLSkscH0sQihtZSxpZSksQihfZSxpZSksQihUZSxpZSksVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8cC53''@;'; put 'put ''b3Jkc1t4XSkrYixUPTY3MTA4ODYzJkM7Qz4+Pj0yNixwLndvcmRzW3hdPVQsYj1DfXJldHVybiAwIT09YiYmKHAud29yZHNbcC5sZW5ndGgrK109YikscH0sdy5fcHJpbWU9ZnVuY3Rpb24ocCl7aWYocmVbcF0pcmV0dXJuIHJlW3BdO3ZhciBiO2lmKCJrMjU2Ij09PXApYj1uZXcgbGU7ZWxz''@;'; put 'put ''ZSBpZigicDIyNCI9PT1wKWI9bmV3IG1lO2Vsc2UgaWYoInAxOTIiPT09cCliPW5ldyBfZTtlbHNle2lmKCJwMjU1MTkiIT09cCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitwKTtiPW5ldyBUZX1yZXR1cm4gcmVbcF09YixifSxTZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rp''@;'; put 'put ''b24ocCl7ZygwPT09cC5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKHAucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihwLGIpe2coIShwLm5lZ2F0aXZlfGIubmVnYXRpdmUpLCJy''@;'; put 'put ''ZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQmJnAucmVkPT09Yi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHApLl9mb3Jj''@;'; put 'put ''ZVJlZCh0aGlzKTpwLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaXNaZXJvKCk/cC5jbG9uZSgpOnRoaXMubS5zdWIocCkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHAsYil7dGhp''@;'; put 'put ''cy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pYWRkKGIpO3JldHVybiB4''@;'; put 'put ''LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlw''@;'; put 'put ''ZS5pc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuaXN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShwKSx0aGlzLmltb2QocC51c2hs''@;'; put 'put ''bihiKSl9LFNlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5pbXVsKGIpKX0sU2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAsYiksdGhpcy5pbW9kKHAubXVsKGIpKX0s''@;'; put 'put ''U2UucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW11bChwLHAuY2xvbmUoKSl9LFNlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubXVsKHAscCl9LFNlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHApe2lmKHAuaXNaZXJvKCkpcmV0dXJuIHAu''@;'; put 'put ''Y2xvbmUoKTt2YXIgYj10aGlzLm0uYW5kbG4oMyk7aWYoZyhiJTI9PTEpLDM9PT1iKXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHAseCl9Zm9yKHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7''@;'; put 'put ''KVQrKyxDLml1c2hybigxKTtnKCFDLmlzWmVybygpKTt2YXIgSD1uZXcgdygxKS50b1JlZCh0aGlzKSxqPUgucmVkTmVnKCksRT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyht''@;'; put 'put ''LEUpLmNtcChqKTspbS5yZWRJQWRkKGopO2Zvcih2YXIgQT10aGlzLnBvdyhtLEMpLG9lPXRoaXMucG93KHAsQy5hZGRuKDEpLml1c2hybigxKSksdGU9dGhpcy5wb3cocCxDKSxzZT1UOzAhPT10ZS5jbXAoSCk7KXtmb3IodmFyIHdlPXRlLFVlPTA7MCE9PXdlLmNtcChIKTtVZSsrKXdlPXdl''@;'; put 'put ''LnJlZFNxcigpO2coVWU8c2UpO3ZhciBKZT10aGlzLnBvdyhBLG5ldyB3KDEpLml1c2hsbihzZS1VZS0xKSk7b2U9b2UucmVkTXVsKEplKSxBPUplLnJlZFNxcigpLHRlPXRlLnJlZE11bChBKSxzZT1VZX1yZXR1cm4gb2V9LFNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3ZhciBiPXAu''@;'; put 'put ''X2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1iLm5lZ2F0aXZlPyhiLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKGIpLnJlZE5lZygpKTp0aGlzLmltb2QoYil9LFNlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCxiKXtpZihiLmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigw''@;'; put 'put ''PT09Yi5jbXBuKDEpKXJldHVybiBwLmNsb25lKCk7dmFyIEM9bmV3IEFycmF5KDE2KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09cDtmb3IodmFyIFQ9MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENbVC0xXSxwKTt2YXIgSD1DWzBdLGo9MCxFPTAsbT1iLmJpdExlbmd0''@;'; put 'put ''aCgpJTI2O2ZvcigwPT09bSYmKG09MjYpLFQ9Yi5sZW5ndGgtMTtUPj0wO1QtLSl7Zm9yKHZhciBBPWIud29yZHNbVF0sb2U9bS0xO29lPj0wO29lLS0pe3ZhciB0ZT1BPj5vZSYxO0ghPT1DWzBdJiYoSD10aGlzLnNxcihIKSksMCE9PXRlfHwwIT09aj8oajw8PTEsanw9dGUsKDQ9PSsrRXx8''@;'; put 'put ''MD09PVQmJjA9PT1vZSkmJihIPXRoaXMubXVsKEgsQ1tqXSksRT0wLGo9MCkpOkU9MH1tPTI2fXJldHVybiBIfSxTZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3ZhciBiPXAudW1vZCh0aGlzLm0pO3JldHVybiBiPT09cD9iLmNsb25lKCk6Yn0sU2UucHJvdG90eXBlLmNvbnZl''@;'; put 'put ''cnRGcm9tPWZ1bmN0aW9uKHApe3ZhciBiPXAuY2xvbmUoKTtyZXR1cm4gYi5yZWQ9bnVsbCxifSx3Lm1vbnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyB6ZShwKX0sQih6ZSxTZSksemUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAudXNobG4odGhp''@;'; put 'put ''cy5zaGlmdCkpfSx6ZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5pbW9kKHAubXVsKHRoaXMucmludikpO3JldHVybiBiLnJlZD1udWxsLGJ9LHplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1''@;'; put 'put ''cm4gcC53b3Jkc1swXT0wLHAubGVuZ3RoPTEscDt2YXIgeD1wLmltdWwoYiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlz''@;'; put 'put ''Lm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0semUucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2''@;'; put 'put ''YXIgeD1wLm11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4o''@;'; put 'put ''MCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSx6ZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSh1ZT1fLm5tZCh1ZSksdGhpcyl9LDU1MTg4''@;'; put 'put ''Oih1ZSxxKT0+eyFmdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijtmb3IodmFyIF89IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLEk9bmV3IFVpbnQ4QXJyYXkoMjU2KSx5PTA7eTw2NDt5KyspSVtfLmNoYXJDb2RlQXQoeSld''@;'; put 'put ''PXk7cS5sPWZ1bmN0aW9uKGcpe3ZhciB3LEI9bmV3IFVpbnQ4QXJyYXkoZyksUD1CLmxlbmd0aCxGPSIiO2Zvcih3PTA7dzxQO3crPTMpRis9X1tCW3ddPj4yXSxGKz1fWygzJkJbd10pPDw0fEJbdysxXT4+NF0sRis9X1soMTUmQlt3KzFdKTw8MnxCW3crMl0+PjZdLEYrPV9bNjMmQlt3KzJd''@;'; put 'put ''XTtyZXR1cm4gUCUzPT0yP0Y9Ri5zdWJzdHJpbmcoMCxGLmxlbmd0aC0xKSsiPSI6UCUzPT0xJiYoRj1GLnN1YnN0cmluZygwLEYubGVuZ3RoLTIpKyI9PSIpLEZ9LHEuRD1mdW5jdGlvbihnKXt2YXIgUCxPLHosTixMLEI9Ljc1KmcubGVuZ3RoLHc9Zy5sZW5ndGgsRj0wOyI9Ij09PWdbZy5s''@;'; put 'put ''ZW5ndGgtMV0mJihCLS0sIj0iPT09Z1tnLmxlbmd0aC0yXSYmQi0tKTt2YXIgSz1uZXcgQXJyYXlCdWZmZXIoQiksVT1uZXcgVWludDhBcnJheShLKTtmb3IoUD0wO1A8dztQKz00KU89SVtnLmNoYXJDb2RlQXQoUCldLHo9SVtnLmNoYXJDb2RlQXQoUCsxKV0sTj1JW2cuY2hhckNvZGVBdChQ''@;'; put 'put ''KzIpXSxMPUlbZy5jaGFyQ29kZUF0KFArMyldLFVbRisrXT1PPDwyfHo+PjQsVVtGKytdPSgxNSZ6KTw8NHxOPj4yLFVbRisrXT0oMyZOKTw8Nnw2MyZMO3JldHVybiBLfX0oKX0sMTM5ODE6KHVlLHEpPT57InVzZSBzdHJpY3QiO3EuYnl0ZUxlbmd0aD1mdW5jdGlvbiBGKFUpe3ZhciBXPVAo''@;'; put 'put ''VSksWD1XWzFdO3JldHVybiAzKihXWzBdK1gpLzQtWH0scS50b0J5dGVBcnJheT1mdW5jdGlvbiB6KFUpe3ZhciBXLGxlLFk9UChVKSxYPVlbMF0sZWU9WVsxXSxKPW5ldyB5KGZ1bmN0aW9uIE8oVSxXLFkpe3JldHVybiAzKihXK1kpLzQtWX0oMCxYLGVlKSkscmU9MCxpZT1lZT4wP1gtNDpY''@;'; put 'put ''O2ZvcihsZT0wO2xlPGllO2xlKz00KVc9SVtVLmNoYXJDb2RlQXQobGUpXTw8MTh8SVtVLmNoYXJDb2RlQXQobGUrMSldPDwxMnxJW1UuY2hhckNvZGVBdChsZSsyKV08PDZ8SVtVLmNoYXJDb2RlQXQobGUrMyldLEpbcmUrK109Vz4+MTYmMjU1LEpbcmUrK109Vz4+OCYyNTUsSltyZSsrXT0y''@;'; put 'put ''NTUmVztyZXR1cm4gMj09PWVlJiYoVz1JW1UuY2hhckNvZGVBdChsZSldPDwyfElbVS5jaGFyQ29kZUF0KGxlKzEpXT4+NCxKW3JlKytdPTI1NSZXKSwxPT09ZWUmJihXPUlbVS5jaGFyQ29kZUF0KGxlKV08PDEwfElbVS5jaGFyQ29kZUF0KGxlKzEpXTw8NHxJW1UuY2hhckNvZGVBdChsZSsy''@;'; put 'put ''KV0+PjIsSltyZSsrXT1XPj44JjI1NSxKW3JlKytdPTI1NSZXKSxKfSxxLmZyb21CeXRlQXJyYXk9ZnVuY3Rpb24gSyhVKXtmb3IodmFyIFcsWT1VLmxlbmd0aCxYPVklMyxlZT1bXSxKPTE2MzgzLHJlPTAsaWU9WS1YO3JlPGllO3JlKz1KKWVlLnB1c2goTChVLHJlLHJlK0o+aWU/aWU6cmUr''@;'; put 'put ''SikpO3JldHVybiAxPT09WD9lZS5wdXNoKF9bKFc9VVtZLTFdKT4+Ml0rX1tXPDw0JjYzXSsiPT0iKToyPT09WCYmZWUucHVzaChfWyhXPShVW1ktMl08PDgpK1VbWS0xXSk+PjEwXStfW1c+PjQmNjNdK19bVzw8MiY2M10rIj0iKSxlZS5qb2luKCIiKX07Zm9yKHZhciBfPVtdLEk9W10seT10''@;'; put 'put ''eXBlb2YgVWludDhBcnJheTwidSI/VWludDhBcnJheTpBcnJheSxnPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIixCPTA7Qjw2NDsrK0IpX1tCXT1nW0JdLElbZy5jaGFyQ29kZUF0KEIpXT1CO2Z1bmN0aW9uIFAoVSl7''@;'; put 'put ''dmFyIFc9VS5sZW5ndGg7aWYoVyU0PjApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Iik7dmFyIFk9VS5pbmRleE9mKCI9Iik7cmV0dXJuLTE9PT1ZJiYoWT1XKSxbWSxZPT09Vz8wOjQtWSU0XX1mdW5jdGlvbiBOKFUpe3Jl''@;'; put 'put ''dHVybiBfW1U+PjE4JjYzXStfW1U+PjEyJjYzXStfW1U+PjYmNjNdK19bNjMmVV19ZnVuY3Rpb24gTChVLFcsWSl7Zm9yKHZhciBlZT1bXSxKPVc7SjxZO0orPTMpZWUucHVzaChOKChVW0pdPDwxNiYxNjcxMTY4MCkrKFVbSisxXTw8OCY2NTI4MCkrKDI1NSZVW0orMl0pKSk7cmV0dXJuIGVl''@;'; put 'put ''LmpvaW4oIiIpfUlbNDVdPTYyLElbOTVdPTYzfSw5MTc6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSx5KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZyh4LEMpe2lmKCF4KXRocm93IG5ldyBFcnJvcihDfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIEIoeCxDKXt4LnN1cGVyXz1D''@;'; put 'put ''O3ZhciBUPWZ1bmN0aW9uKCl7fTtULnByb3RvdHlwZT1DLnByb3RvdHlwZSx4LnByb3RvdHlwZT1uZXcgVCx4LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj14fWZ1bmN0aW9uIHcoeCxDLFQpe2lmKHcuaXNCTih4KSlyZXR1cm4geDt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMu''@;'; put 'put ''bGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09eCYmKCgibGUiPT09Q3x8ImJlIj09PUMpJiYoVD1DLEM9MTApLHRoaXMuX2luaXQoeHx8MCxDfHwxMCxUfHwiYmUiKSl9dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBJP0kuZXhwb3J0cz13OnkuQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0''@;'; put 'put ''cnl7UD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6Xyg0Nzc5MCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKHgsQyl7dmFyIFQ9eC5jaGFyQ29kZUF0KEMpO3JldHVybiBUPj00OCYmVDw9NTc/VC00ODpUPj02NSYmVDw9NzA/VC01''@;'; put 'put ''NTpUPj05NyYmVDw9MTAyP1QtODc6dm9pZCBnKCExLCJJbnZhbGlkIGNoYXJhY3RlciBpbiAiK3gpfWZ1bmN0aW9uIE8oeCxDLFQpe3ZhciBIPUYoeCxUKTtyZXR1cm4gVC0xPj1DJiYoSHw9Rih4LFQtMSk8PDQpLEh9ZnVuY3Rpb24geih4LEMsVCxIKXtmb3IodmFyIGo9MCxFPTAsbT1NYXRo''@;'; put 'put ''Lm1pbih4Lmxlbmd0aCxUKSxBPUM7QTxtO0ErKyl7dmFyIG9lPXguY2hhckNvZGVBdChBKS00ODtqKj1ILEU9b2U+PTQ5P29lLTQ5KzEwOm9lPj0xNz9vZS0xNysxMDpvZSxnKG9lPj0wJiZFPEgsIkludmFsaWQgY2hhcmFjdGVyIiksais9RX1yZXR1cm4gan1mdW5jdGlvbiBOKHgsQyl7eC53''@;'; put 'put ''b3Jkcz1DLndvcmRzLHgubGVuZ3RoPUMubGVuZ3RoLHgubmVnYXRpdmU9Qy5uZWdhdGl2ZSx4LnJlZD1DLnJlZH1pZih3LmlzQk49ZnVuY3Rpb24oQyl7cmV0dXJuIEMgaW5zdGFuY2VvZiB3fHxudWxsIT09QyYmIm9iamVjdCI9PXR5cGVvZiBDJiZDLmNvbnN0cnVjdG9yLndvcmRTaXplPT09''@;'; put 'put ''dy53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShDLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gQy5jbXAoVCk+MD9DOlR9LHcubWluPWZ1bmN0aW9uKEMsVCl7cmV0dXJuIEMuY21wKFQpPDA/QzpUfSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihDLFQsSCl7aWYoIm51bWJl''@;'; put 'put ''ciI9PXR5cGVvZiBDKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKEMsVCxIKTtpZigib2JqZWN0Ij09dHlwZW9mIEMpcmV0dXJuIHRoaXMuX2luaXRBcnJheShDLFQsSCk7ImhleCI9PT1UJiYoVD0xNiksZyhUPT09KDB8VCkmJlQ+PTImJlQ8PTM2KTt2YXIgaj0wOyItIj09PShDPUMudG9TdHJp''@;'; put 'put ''bmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoaisrLHRoaXMubmVnYXRpdmU9MSksajxDLmxlbmd0aCYmKDE2PT09VD90aGlzLl9wYXJzZUhleChDLGosSCk6KHRoaXMuX3BhcnNlQmFzZShDLFQsaiksImxlIj09PUgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxULEgpKSl9''@;'; put 'put ''LHcucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKEMsVCxIKXtDPDAmJih0aGlzLm5lZ2F0aXZlPTEsQz0tQyksQzw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmQ10sdGhpcy5sZW5ndGg9MSk6Qzw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZDLEMv''@;'; put 'put ''NjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihnKEM8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmQyxDLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT1IJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksVCxIKX0s''@;'; put 'put ''dy5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihDLFQsSCl7aWYoZygibnVtYmVyIj09dHlwZW9mIEMubGVuZ3RoKSxDLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChDLmxlbmd0aC8zKSx0aGlzLndv''@;'; put 'put ''cmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBqPTA7ajx0aGlzLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT0wO3ZhciBFLG0sQT0wO2lmKCJiZSI9PT1IKWZvcihqPUMubGVuZ3RoLTEsRT0wO2o+PTA7ai09Myl0aGlzLndvcmRzW0VdfD0obT1DW2pdfENbai0xXTw8OHxDW2ot''@;'; put 'put ''Ml08PDE2KTw8QSY2NzEwODg2Myx0aGlzLndvcmRzW0UrMV09bT4+PjI2LUEmNjcxMDg4NjMsKEErPTI0KT49MjYmJihBLT0yNixFKyspO2Vsc2UgaWYoImxlIj09PUgpZm9yKGo9MCxFPTA7ajxDLmxlbmd0aDtqKz0zKXRoaXMud29yZHNbRV18PShtPUNbal18Q1tqKzFdPDw4fENbaisyXTw8''@;'; put 'put ''MTYpPDxBJjY3MTA4ODYzLHRoaXMud29yZHNbRSsxXT1tPj4+MjYtQSY2NzEwODg2MywoQSs9MjQpPj0yNiYmKEEtPTI2LEUrKyk7cmV0dXJuIHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihDLFQsSCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChDLmxlbmd0''@;'; put 'put ''aC1UKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBqPTA7ajx0aGlzLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT0wO3ZhciBBLEU9MCxtPTA7aWYoImJlIj09PUgpZm9yKGo9Qy5sZW5ndGgtMTtqPj1UO2otPTIpQT1PKEMsVCxqKTw8RSx0aGlzLndvcmRz''@;'; put 'put ''W21dfD02NzEwODg2MyZBLEU+PTE4PyhFLT0xOCx0aGlzLndvcmRzW20rPTFdfD1BPj4+MjYpOkUrPTg7ZWxzZSBmb3Ioaj0oQy5sZW5ndGgtVCklMj09MD9UKzE6VDtqPEMubGVuZ3RoO2orPTIpQT1PKEMsVCxqKTw8RSx0aGlzLndvcmRzW21dfD02NzEwODg2MyZBLEU+PTE4PyhFLT0xOCx0''@;'; put 'put ''aGlzLndvcmRzW20rPTFdfD1BPj4+MjYpOkUrPTg7dGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbihDLFQsSCl7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIGo9MCxFPTE7RTw9NjcxMDg4NjM7RSo9VClqKys7ai0tLEU9RS9UfDA7Zm9y''@;'; put 'put ''KHZhciBtPUMubGVuZ3RoLUgsQT1tJWosb2U9TWF0aC5taW4obSxtLUEpK0gsdGU9MCxzZT1IO3NlPG9lO3NlKz1qKXRlPXooQyxzZSxzZStqLFQpLHRoaXMuaW11bG4oRSksdGhpcy53b3Jkc1swXSt0ZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz10ZTp0aGlzLl9pYWRkbih0ZSk7aWYoMCE9''@;'; put 'put ''PUEpe3ZhciB3ZT0xO2Zvcih0ZT16KEMsc2UsQy5sZW5ndGgsVCksc2U9MDtzZTxBO3NlKyspd2UqPVQ7dGhpcy5pbXVsbih3ZSksdGhpcy53b3Jkc1swXSt0ZTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz10ZTp0aGlzLl9pYWRkbih0ZSl9dGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuY29w''@;'; put 'put ''eT1mdW5jdGlvbihDKXtDLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBUPTA7VDx0aGlzLmxlbmd0aDtUKyspQy53b3Jkc1tUXT10aGlzLndvcmRzW1RdO0MubGVuZ3RoPXRoaXMubGVuZ3RoLEMubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSxDLnJlZD10aGlzLnJlZH0sdy5w''@;'; put 'put ''cm90b3R5cGUuX21vdmU9ZnVuY3Rpb24oQyl7TihDLHRoaXMpfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBDPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkoQyksQ30sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihDKXtmb3IoO3RoaXMubGVuZ3RoPEM7KXRoaXMu''@;'; put 'put ''d29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuX3N0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sdy5wcm90b3R5''@;'; put 'put ''cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LHR5cGVvZiBTeW1ib2w8InUiJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sLmZvcil0cnl7dy5wcm90b3R5cGVbU3ltYm9sLmZv''@;'; put 'put ''cigibm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20iKV09TH1jYXRjaHt3LnByb3RvdHlwZS5pbnNwZWN0PUx9ZWxzZSB3LnByb3RvdHlwZS5pbnNwZWN0PUw7ZnVuY3Rpb24gTCgpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifXZhciBL''@;'; put 'put ''PVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLFU9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sVz1bMCww''@;'; put 'put ''LDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4''@;'; put 'put ''NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBlZSh4LEMsVCl7VC5uZWdhdGl2ZT1D''@;'; put 'put ''Lm5lZ2F0aXZlXngubmVnYXRpdmU7dmFyIEg9eC5sZW5ndGgrQy5sZW5ndGh8MDtULmxlbmd0aD1ILEg9SC0xfDA7dmFyIGo9MHx4LndvcmRzWzBdLEU9MHxDLndvcmRzWzBdLG09aipFLG9lPW0vNjcxMDg4NjR8MDtULndvcmRzWzBdPTY3MTA4ODYzJm07Zm9yKHZhciB0ZT0xO3RlPEg7dGUr''@;'; put 'put ''Kyl7Zm9yKHZhciBzZT1vZT4+PjI2LHdlPTY3MTA4ODYzJm9lLFVlPU1hdGgubWluKHRlLEMubGVuZ3RoLTEpLEplPU1hdGgubWF4KDAsdGUteC5sZW5ndGgrMSk7SmU8PVVlO0plKyspc2UrPShtPShqPTB8eC53b3Jkc1t0ZS1KZXwwXSkqKEU9MHxDLndvcmRzW0plXSkrd2UpLzY3MTA4ODY0''@;'; put 'put ''fDAsd2U9NjcxMDg4NjMmbTtULndvcmRzW3RlXT0wfHdlLG9lPTB8c2V9cmV0dXJuIDAhPT1vZT9ULndvcmRzW3RlXT0wfG9lOlQubGVuZ3RoLS0sVC5fc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihDLFQpe3ZhciBIO2lmKFQ9MHxUfHwxLDE2PT09KEM9Q3x8MTApfHwi''@;'; put 'put ''aGV4Ij09PUMpe0g9IiI7Zm9yKHZhciBqPTAsRT0wLG09MDttPHRoaXMubGVuZ3RoO20rKyl7dmFyIEE9dGhpcy53b3Jkc1ttXSxvZT0oMTY3NzcyMTUmKEE8PGp8RSkpLnRvU3RyaW5nKDE2KTtFPUE+Pj4yNC1qJjE2Nzc3MjE1LChqKz0yKT49MjYmJihqLT0yNixtLS0pLEg9MCE9PUV8fG0h''@;'; put 'put ''PT10aGlzLmxlbmd0aC0xP0tbNi1vZS5sZW5ndGhdK29lK0g6b2UrSH1mb3IoMCE9PUUmJihIPUUudG9TdHJpbmcoMTYpK0gpO0gubGVuZ3RoJVQhPTA7KUg9IjAiK0g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoSD0iLSIrSCksSH1pZihDPT09KDB8QykmJkM+PTImJkM8PTM2KXt2YXIg''@;'; put 'put ''dGU9VVtDXSxzZT1XW0NdO0g9IiI7dmFyIHdlPXRoaXMuY2xvbmUoKTtmb3Iod2UubmVnYXRpdmU9MDshd2UuaXNaZXJvKCk7KXt2YXIgVWU9d2UubW9kcm4oc2UpLnRvU3RyaW5nKEMpO0g9KHdlPXdlLmlkaXZuKHNlKSkuaXNaZXJvKCk/VWUrSDpLW3RlLVVlLmxlbmd0aF0rVWUrSH1mb3Io''@;'; put 'put ''dGhpcy5pc1plcm8oKSYmKEg9IjAiK0gpO0gubGVuZ3RoJVQhPTA7KUg9IjAiK0g7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYoSD0iLSIrSCksSH1nKCExLCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2Iil9LHcucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIEM9''@;'; put 'put ''dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP0MrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT9DKz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmZyghMSwiTnVt''@;'; put 'put ''YmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzIiksMCE9PXRoaXMubmVnYXRpdmU/LUM6Q30sdy5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYsMil9LFAmJih3LnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbihDLFQpe3Jl''@;'; put 'put ''dHVybiB0aGlzLnRvQXJyYXlMaWtlKFAsQyxUKX0pLHcucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24oQyxUKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSxDLFQpfSx3LnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbihDLFQsSCl7dGhpcy5fc3RyaXAoKTt2YXIgaj10aGlz''@;'; put 'put ''LmJ5dGVMZW5ndGgoKSxFPUh8fE1hdGgubWF4KDEsaik7ZyhqPD1FLCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksZyhFPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpO3ZhciBtPWZ1bmN0aW9uKEMsVCl7cmV0dXJuIEMuYWxsb2NVbnNhZmU/Qy5hbGxv''@;'; put 'put ''Y1Vuc2FmZShUKTpuZXcgQyhUKX0oQyxFKTtyZXR1cm4gdGhpc1siX3RvQXJyYXlMaWtlIisoImxlIj09PVQ/IkxFIjoiQkUiKV0obSxqKSxtfSx3LnByb3RvdHlwZS5fdG9BcnJheUxpa2VMRT1mdW5jdGlvbihDLFQpe2Zvcih2YXIgSD0wLGo9MCxFPTAsbT0wO0U8dGhpcy5sZW5ndGg7RSsr''@;'; put 'put ''KXt2YXIgQT10aGlzLndvcmRzW0VdPDxtfGo7Q1tIKytdPTI1NSZBLEg8Qy5sZW5ndGgmJihDW0grK109QT4+OCYyNTUpLEg8Qy5sZW5ndGgmJihDW0grK109QT4+MTYmMjU1KSw2PT09bT8oSDxDLmxlbmd0aCYmKENbSCsrXT1BPj4yNCYyNTUpLGo9MCxtPTApOihqPUE+Pj4yNCxtKz0yKX1p''@;'; put 'put ''ZihIPEMubGVuZ3RoKWZvcihDW0grK109ajtIPEMubGVuZ3RoOylDW0grK109MH0sdy5wcm90b3R5cGUuX3RvQXJyYXlMaWtlQkU9ZnVuY3Rpb24oQyxUKXtmb3IodmFyIEg9Qy5sZW5ndGgtMSxqPTAsRT0wLG09MDtFPHRoaXMubGVuZ3RoO0UrKyl7dmFyIEE9dGhpcy53b3Jkc1tFXTw8bXxq''@;'; put 'put ''O0NbSC0tXT0yNTUmQSxIPj0wJiYoQ1tILS1dPUE+PjgmMjU1KSxIPj0wJiYoQ1tILS1dPUE+PjE2JjI1NSksNj09PW0/KEg+PTAmJihDW0gtLV09QT4+MjQmMjU1KSxqPTAsbT0wKTooaj1BPj4+MjQsbSs9Mil9aWYoSD49MClmb3IoQ1tILS1dPWo7SD49MDspQ1tILS1dPTB9LHcucHJvdG90''@;'; put 'put ''eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihDKXtyZXR1cm4gMzItTWF0aC5jbHozMihDKX06ZnVuY3Rpb24oQyl7dmFyIFQ9QyxIPTA7cmV0dXJuIFQ+PTQwOTYmJihIKz0xMyxUPj4+PTEzKSxUPj02NCYmKEgrPTcsVD4+Pj03KSxUPj04JiYoSCs9NCxUPj4+PTQpLFQ+PTIm''@;'; put 'put ''JihIKz0yLFQ+Pj49MiksSCtUfSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24oQyl7aWYoMD09PUMpcmV0dXJuIDI2O3ZhciBUPUMsSD0wO3JldHVybiA4MTkxJlR8fChIKz0xMyxUPj4+PTEzKSwxMjcmVHx8KEgrPTcsVD4+Pj03KSwxNSZUfHwoSCs9NCxUPj4+PTQpLDMmVHx8KEgr''@;'; put 'put ''PTIsVD4+Pj0yKSwxJlR8fEgrKyxIfSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgVD10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStUfSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigp''@;'; put 'put ''e2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBDPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgSD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW1RdKTtpZihDKz1ILDI2IT09SClicmVha31yZXR1cm4gQ30sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKEMpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKEMpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24o''@;'; put 'put ''Qyl7cmV0dXJuIHRoaXMudGVzdG4oQy0xKT90aGlzLm5vdG4oQykuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNs''@;'; put 'put ''b25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKEMpe2Zvcig7dGhpcy5sZW5ndGg8Qy5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5n''@;'; put 'put ''dGgrK109MDtmb3IodmFyIFQ9MDtUPEMubGVuZ3RoO1QrKyl0aGlzLndvcmRzW1RdPXRoaXMud29yZHNbVF18Qy53b3Jkc1tUXTtyZXR1cm4gdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKEMpe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxDLm5lZ2F0aXZlKSksdGhp''@;'; put 'put ''cy5pdW9yKEMpfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5sZW5ndGg+Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihDKTpDLmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3Ro''@;'; put 'put ''aXMuY2xvbmUoKS5pdW9yKEMpOkMuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihDKXt2YXIgVDtUPXRoaXMubGVuZ3RoPkMubGVuZ3RoP0M6dGhpcztmb3IodmFyIEg9MDtIPFQubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPXRoaXMud29yZHNbSF0mQy53''@;'; put 'put ''b3Jkc1tIXTtyZXR1cm4gdGhpcy5sZW5ndGg9VC5sZW5ndGgsdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbihDKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8Qy5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQoQyl9LHcucHJvdG90eXBlLmFuZD1mdW5jdGlvbihDKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5sZW5ndGg+Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQoQyk6Qy5jbG9uZSgpLmlhbmQodGhpcyl9LHcucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZChDKTpDLmNsb25lKCkuaXVhbmQodGhp''@;'; put 'put ''cyl9LHcucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKEMpe3ZhciBULEg7dGhpcy5sZW5ndGg+Qy5sZW5ndGg/KFQ9dGhpcyxIPUMpOihUPUMsSD10aGlzKTtmb3IodmFyIGo9MDtqPEgubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPVQud29yZHNbal1eSC53b3Jkc1tqXTtpZih0aGlzIT09VClm''@;'; put 'put ''b3IoO2o8VC5sZW5ndGg7aisrKXRoaXMud29yZHNbal09VC53b3Jkc1tqXTtyZXR1cm4gdGhpcy5sZW5ndGg9VC5sZW5ndGgsdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihDKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8Qy5uZWdhdGl2ZSkpLHRoaXMuaXV4b3Io''@;'; put 'put ''Qyl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5sZW5ndGg+Qy5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IoQyk6Qy5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMu''@;'; put 'put ''Y2xvbmUoKS5pdXhvcihDKTpDLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKEMpe2coIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKTt2YXIgVD0wfE1hdGguY2VpbChDLzI2KSxIPUMlMjY7dGhpcy5fZXhwYW5kKFQpLEg+MCYmVC0tO2Zvcih2YXIgaj0w''@;'; put 'put ''O2o8VDtqKyspdGhpcy53b3Jkc1tqXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tqXTtyZXR1cm4gSD4wJiYodGhpcy53b3Jkc1tqXT1+dGhpcy53b3Jkc1tqXSY2NzEwODg2Mz4+MjYtSCksdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9u''@;'; put 'put ''ZSgpLmlub3RuKEMpfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKEMsVCl7ZygibnVtYmVyIj09dHlwZW9mIEMmJkM+PTApO3ZhciBIPUMvMjZ8MCxqPUMlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChIKzEpLHRoaXMud29yZHNbSF09VD90aGlzLndvcmRzW0hdfDE8PGo6dGhpcy53b3Jkc1tI''@;'; put 'put ''XSZ+KDE8PGopLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24oQyl7dmFyIFQsSCxqO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09Qy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLFQ9dGhpcy5pc3ViKEMpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9y''@;'; put 'put ''bVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PUMubmVnYXRpdmUpcmV0dXJuIEMubmVnYXRpdmU9MCxUPXRoaXMuaXN1YihDKSxDLm5lZ2F0aXZlPTEsVC5fbm9ybVNpZ24oKTt0aGlzLmxlbmd0aD5DLmxlbmd0aD8oSD10aGlzLGo9Qyk6KEg9QyxqPXRoaXMpO2Zvcih2YXIgRT0w''@;'; put 'put ''LG09MDttPGoubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPTY3MTA4ODYzJihUPSgwfEgud29yZHNbbV0pKygwfGoud29yZHNbbV0pK0UpLEU9VD4+PjI2O2Zvcig7MCE9PUUmJm08SC5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09NjcxMDg4NjMmKFQ9KDB8SC53b3Jkc1ttXSkrRSksRT1UPj4+''@;'; put 'put ''MjY7aWYodGhpcy5sZW5ndGg9SC5sZW5ndGgsMCE9PUUpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09RSx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYoSCE9PXRoaXMpZm9yKDttPEgubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPUgud29yZHNbbV07cmV0dXJuIHRoaXN9LHcucHJvdG90eXBlLmFkZD1m''@;'; put 'put ''dW5jdGlvbihDKXt2YXIgVDtyZXR1cm4gMCE9PUMubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyhDLm5lZ2F0aXZlPTAsVD10aGlzLnN1YihDKSxDLm5lZ2F0aXZlXj0xLFQpOjA9PT1DLm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLFQ9Qy5zdWIodGhp''@;'; put 'put ''cyksdGhpcy5uZWdhdGl2ZT0xLFQpOnRoaXMubGVuZ3RoPkMubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKEMpOkMuY2xvbmUoKS5pYWRkKHRoaXMpfSx3LnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKEMpe2lmKDAhPT1DLm5lZ2F0aXZlKXtDLm5lZ2F0aXZlPTA7dmFyIFQ9dGhpcy5pYWRkKEMp''@;'; put 'put ''O3JldHVybiBDLm5lZ2F0aXZlPTEsVC5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZChDKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgaixFLEg9dGhpcy5jbXAoQyk7aWYoMD09PUgpcmV0dXJuIHRo''@;'; put 'put ''aXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO0g+MD8oaj10aGlzLEU9Qyk6KGo9QyxFPXRoaXMpO2Zvcih2YXIgbT0wLEE9MDtBPEUubGVuZ3RoO0ErKyltPShUPSgwfGoud29yZHNbQV0pLSgwfEUud29yZHNbQV0pK20pPj4yNix0aGlzLndvcmRzW0Fd''@;'; put 'put ''PTY3MTA4ODYzJlQ7Zm9yKDswIT09bSYmQTxqLmxlbmd0aDtBKyspbT0oVD0oMHxqLndvcmRzW0FdKSttKT4+MjYsdGhpcy53b3Jkc1tBXT02NzEwODg2MyZUO2lmKDA9PT1tJiZBPGoubGVuZ3RoJiZqIT09dGhpcylmb3IoO0E8ai5sZW5ndGg7QSsrKXRoaXMud29yZHNbQV09ai53b3Jkc1tB''@;'; put 'put ''XTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsQSksaiE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIoQyl9O3ZhciBKPWZ1bmN0aW9uKEMsVCxI''@;'; put 'put ''KXt2YXIgb2UsdGUsc2Usaj1DLndvcmRzLEU9VC53b3JkcyxtPUgud29yZHMsQT0wLHdlPTB8alswXSxVZT04MTkxJndlLEplPXdlPj4+MTMsYXQ9MHxqWzFdLE1lPTgxOTEmYXQsdmU9YXQ+Pj4xMyxYZT0wfGpbMl0samU9ODE5MSZYZSxEZT1YZT4+PjEzLEZlPTB8alszXSxSZT04MTkxJkZl''@;'; put 'put ''LEllPUZlPj4+MTMsVmU9MHxqWzRdLGtlPTgxOTEmVmUsQWU9VmU+Pj4xMyxfdD0wfGpbNV0scnQ9ODE5MSZfdCxRZT1fdD4+PjEzLGRuPTB8als2XSx5dD04MTkxJmRuLE10PWRuPj4+MTMsRHQ9MHxqWzddLGl0PTgxOTEmRHQsJGU9RHQ+Pj4xMyx0dD0wfGpbOF0sSGU9ODE5MSZ0dCxkdD10''@;'; put 'put ''dD4+PjEzLHF0PTB8als5XSxSdD04MTkxJnF0LFB0PXF0Pj4+MTMsYWk9MHxFWzBdLFF0PTgxOTEmYWksc249YWk+Pj4xMyxSaT0wfEVbMV0sZm49ODE5MSZSaSxmdD1SaT4+PjEzLFByPTB8RVsyXSxadD04MTkxJlByLEF0PVByPj4+MTMsTG49MHxFWzNdLHN0PTgxOTEmTG4senQ9TG4+Pj4x''@;'; put 'put ''MyxuaT0wfEVbNF0sV2U9ODE5MSZuaSxUdD1uaT4+PjEzLHJyPTB8RVs1XSxodD04MTkxJnJyLHh0PXJyPj4+MTMsQm49MHxFWzZdLG9uPTgxOTEmQm4sanQ9Qm4+Pj4xMyxkaT0wfEVbN10sY249ODE5MSZkaSxwbj1kaT4+PjEzLElpPTB8RVs4XSxYdD04MTkxJklpLGVuPUlpPj4+MTMsaG89''@;'; put 'put ''MHxFWzldLE1pPTgxOTEmaG8scHI9aG8+Pj4xMztILm5lZ2F0aXZlPUMubmVnYXRpdmVeVC5uZWdhdGl2ZSxILmxlbmd0aD0xOTt2YXIgV249KEErKG9lPU1hdGguaW11bChVZSxRdCkpfDApKygoODE5MSYodGU9KHRlPU1hdGguaW11bChVZSxzbikpK01hdGguaW11bChKZSxRdCl8MCkpPDwx''@;'; put 'put ''Myl8MDtBPSgoc2U9TWF0aC5pbXVsKEplLHNuKSkrKHRlPj4+MTMpfDApKyhXbj4+PjI2KXwwLFduJj02NzEwODg2MyxvZT1NYXRoLmltdWwoTWUsUXQpLHRlPSh0ZT1NYXRoLmltdWwoTWUsc24pKStNYXRoLmltdWwodmUsUXQpfDAsc2U9TWF0aC5pbXVsKHZlLHNuKTt2YXIgS2k9KEErKG9l''@;'; put 'put ''PW9lK01hdGguaW11bChVZSxmbil8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLGZ0KXwwKStNYXRoLmltdWwoSmUsZm4pfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxmdCl8MCkrKHRlPj4+MTMpfDApKyhLaT4+PjI2KXwwLEtpJj02NzEwODg2MyxvZT1N''@;'; put 'put ''YXRoLmltdWwoamUsUXQpLHRlPSh0ZT1NYXRoLmltdWwoamUsc24pKStNYXRoLmltdWwoRGUsUXQpfDAsc2U9TWF0aC5pbXVsKERlLHNuKSxvZT1vZStNYXRoLmltdWwoTWUsZm4pfDAsdGU9KHRlPXRlK01hdGguaW11bChNZSxmdCl8MCkrTWF0aC5pbXVsKHZlLGZuKXwwLHNlPXNlK01hdGgu''@;'; put 'put ''aW11bCh2ZSxmdCl8MDt2YXIgUXI9KEErKG9lPW9lK01hdGguaW11bChVZSxadCl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwoSmUsWnQpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxBdCl8MCkrKHRlPj4+MTMpfDApKyhR''@;'; put 'put ''cj4+PjI2KXwwLFFyJj02NzEwODg2MyxvZT1NYXRoLmltdWwoUmUsUXQpLHRlPSh0ZT1NYXRoLmltdWwoUmUsc24pKStNYXRoLmltdWwoSWUsUXQpfDAsc2U9TWF0aC5pbXVsKEllLHNuKSxvZT1vZStNYXRoLmltdWwoamUsZm4pfDAsdGU9KHRlPXRlK01hdGguaW11bChqZSxmdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKERlLGZuKXwwLHNlPXNlK01hdGguaW11bChEZSxmdCl8MCxvZT1vZStNYXRoLmltdWwoTWUsWnQpfDAsdGU9KHRlPXRlK01hdGguaW11bChNZSxBdCl8MCkrTWF0aC5pbXVsKHZlLFp0KXwwLHNlPXNlK01hdGguaW11bCh2ZSxBdCl8MDt2YXIgSnI9KEErKG9lPW9lK01hdGguaW11''@;'; put 'put ''bChVZSxzdCl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoSmUsc3QpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSx6dCl8MCkrKHRlPj4+MTMpfDApKyhKcj4+PjI2KXwwLEpyJj02NzEwODg2MyxvZT1NYXRoLmltdWwoa2Us''@;'; put 'put ''UXQpLHRlPSh0ZT1NYXRoLmltdWwoa2Usc24pKStNYXRoLmltdWwoQWUsUXQpfDAsc2U9TWF0aC5pbXVsKEFlLHNuKSxvZT1vZStNYXRoLmltdWwoUmUsZm4pfDAsdGU9KHRlPXRlK01hdGguaW11bChSZSxmdCl8MCkrTWF0aC5pbXVsKEllLGZuKXwwLHNlPXNlK01hdGguaW11bChJZSxmdCl8''@;'; put 'put ''MCxvZT1vZStNYXRoLmltdWwoamUsWnQpfDAsdGU9KHRlPXRlK01hdGguaW11bChqZSxBdCl8MCkrTWF0aC5pbXVsKERlLFp0KXwwLHNlPXNlK01hdGguaW11bChEZSxBdCl8MCxvZT1vZStNYXRoLmltdWwoTWUsc3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChNZSx6dCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KHZlLHN0KXwwLHNlPXNlK01hdGguaW11bCh2ZSx6dCl8MDt2YXIgQmk9KEErKG9lPW9lK01hdGguaW11bChVZSxXZSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLFR0KXwwKStNYXRoLmltdWwoSmUsV2UpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxU''@;'; put 'put ''dCl8MCkrKHRlPj4+MTMpfDApKyhCaT4+PjI2KXwwLEJpJj02NzEwODg2MyxvZT1NYXRoLmltdWwocnQsUXQpLHRlPSh0ZT1NYXRoLmltdWwocnQsc24pKStNYXRoLmltdWwoUWUsUXQpfDAsc2U9TWF0aC5pbXVsKFFlLHNuKSxvZT1vZStNYXRoLmltdWwoa2UsZm4pfDAsdGU9KHRlPXRlK01h''@;'; put 'put ''dGguaW11bChrZSxmdCl8MCkrTWF0aC5pbXVsKEFlLGZuKXwwLHNlPXNlK01hdGguaW11bChBZSxmdCl8MCxvZT1vZStNYXRoLmltdWwoUmUsWnQpfDAsdGU9KHRlPXRlK01hdGguaW11bChSZSxBdCl8MCkrTWF0aC5pbXVsKEllLFp0KXwwLHNlPXNlK01hdGguaW11bChJZSxBdCl8MCxvZT1v''@;'; put 'put ''ZStNYXRoLmltdWwoamUsc3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChqZSx6dCl8MCkrTWF0aC5pbXVsKERlLHN0KXwwLHNlPXNlK01hdGguaW11bChEZSx6dCl8MCxvZT1vZStNYXRoLmltdWwoTWUsV2UpfDAsdGU9KHRlPXRlK01hdGguaW11bChNZSxUdCl8MCkrTWF0aC5pbXVsKHZlLFdl''@;'; put 'put ''KXwwLHNlPXNlK01hdGguaW11bCh2ZSxUdCl8MDt2YXIgVmk9KEErKG9lPW9lK01hdGguaW11bChVZSxodCl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLHh0KXwwKStNYXRoLmltdWwoSmUsaHQpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSx4dCl8MCkr''@;'; put 'put ''KHRlPj4+MTMpfDApKyhWaT4+PjI2KXwwLFZpJj02NzEwODg2MyxvZT1NYXRoLmltdWwoeXQsUXQpLHRlPSh0ZT1NYXRoLmltdWwoeXQsc24pKStNYXRoLmltdWwoTXQsUXQpfDAsc2U9TWF0aC5pbXVsKE10LHNuKSxvZT1vZStNYXRoLmltdWwocnQsZm4pfDAsdGU9KHRlPXRlK01hdGguaW11''@;'; put 'put ''bChydCxmdCl8MCkrTWF0aC5pbXVsKFFlLGZuKXwwLHNlPXNlK01hdGguaW11bChRZSxmdCl8MCxvZT1vZStNYXRoLmltdWwoa2UsWnQpfDAsdGU9KHRlPXRlK01hdGguaW11bChrZSxBdCl8MCkrTWF0aC5pbXVsKEFlLFp0KXwwLHNlPXNlK01hdGguaW11bChBZSxBdCl8MCxvZT1vZStNYXRo''@;'; put 'put ''LmltdWwoUmUsc3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChSZSx6dCl8MCkrTWF0aC5pbXVsKEllLHN0KXwwLHNlPXNlK01hdGguaW11bChJZSx6dCl8MCxvZT1vZStNYXRoLmltdWwoamUsV2UpfDAsdGU9KHRlPXRlK01hdGguaW11bChqZSxUdCl8MCkrTWF0aC5pbXVsKERlLFdlKXwwLHNl''@;'; put 'put ''PXNlK01hdGguaW11bChEZSxUdCl8MCxvZT1vZStNYXRoLmltdWwoTWUsaHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChNZSx4dCl8MCkrTWF0aC5pbXVsKHZlLGh0KXwwLHNlPXNlK01hdGguaW11bCh2ZSx4dCl8MDt2YXIgSW89KEErKG9lPW9lK01hdGguaW11bChVZSxvbil8MCl8MCkrKCg4''@;'; put 'put ''MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLGp0KXwwKStNYXRoLmltdWwoSmUsb24pfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxqdCl8MCkrKHRlPj4+MTMpfDApKyhJbz4+PjI2KXwwLElvJj02NzEwODg2MyxvZT1NYXRoLmltdWwoaXQsUXQpLHRlPSh0ZT1NYXRoLmlt''@;'; put 'put ''dWwoaXQsc24pKStNYXRoLmltdWwoJGUsUXQpfDAsc2U9TWF0aC5pbXVsKCRlLHNuKSxvZT1vZStNYXRoLmltdWwoeXQsZm4pfDAsdGU9KHRlPXRlK01hdGguaW11bCh5dCxmdCl8MCkrTWF0aC5pbXVsKE10LGZuKXwwLHNlPXNlK01hdGguaW11bChNdCxmdCl8MCxvZT1vZStNYXRoLmltdWwo''@;'; put 'put ''cnQsWnQpfDAsdGU9KHRlPXRlK01hdGguaW11bChydCxBdCl8MCkrTWF0aC5pbXVsKFFlLFp0KXwwLHNlPXNlK01hdGguaW11bChRZSxBdCl8MCxvZT1vZStNYXRoLmltdWwoa2Usc3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChrZSx6dCl8MCkrTWF0aC5pbXVsKEFlLHN0KXwwLHNlPXNlK01h''@;'; put 'put ''dGguaW11bChBZSx6dCl8MCxvZT1vZStNYXRoLmltdWwoUmUsV2UpfDAsdGU9KHRlPXRlK01hdGguaW11bChSZSxUdCl8MCkrTWF0aC5pbXVsKEllLFdlKXwwLHNlPXNlK01hdGguaW11bChJZSxUdCl8MCxvZT1vZStNYXRoLmltdWwoamUsaHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChqZSx4''@;'; put 'put ''dCl8MCkrTWF0aC5pbXVsKERlLGh0KXwwLHNlPXNlK01hdGguaW11bChEZSx4dCl8MCxvZT1vZStNYXRoLmltdWwoTWUsb24pfDAsdGU9KHRlPXRlK01hdGguaW11bChNZSxqdCl8MCkrTWF0aC5pbXVsKHZlLG9uKXwwLHNlPXNlK01hdGguaW11bCh2ZSxqdCl8MDt2YXIgT3I9KEErKG9lPW9l''@;'; put 'put ''K01hdGguaW11bChVZSxjbil8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLHBuKXwwKStNYXRoLmltdWwoSmUsY24pfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxwbil8MCkrKHRlPj4+MTMpfDApKyhPcj4+PjI2KXwwLE9yJj02NzEwODg2MyxvZT1NYXRo''@;'; put 'put ''LmltdWwoSGUsUXQpLHRlPSh0ZT1NYXRoLmltdWwoSGUsc24pKStNYXRoLmltdWwoZHQsUXQpfDAsc2U9TWF0aC5pbXVsKGR0LHNuKSxvZT1vZStNYXRoLmltdWwoaXQsZm4pfDAsdGU9KHRlPXRlK01hdGguaW11bChpdCxmdCl8MCkrTWF0aC5pbXVsKCRlLGZuKXwwLHNlPXNlK01hdGguaW11''@;'; put 'put ''bCgkZSxmdCl8MCxvZT1vZStNYXRoLmltdWwoeXQsWnQpfDAsdGU9KHRlPXRlK01hdGguaW11bCh5dCxBdCl8MCkrTWF0aC5pbXVsKE10LFp0KXwwLHNlPXNlK01hdGguaW11bChNdCxBdCl8MCxvZT1vZStNYXRoLmltdWwocnQsc3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChydCx6dCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKFFlLHN0KXwwLHNlPXNlK01hdGguaW11bChRZSx6dCl8MCxvZT1vZStNYXRoLmltdWwoa2UsV2UpfDAsdGU9KHRlPXRlK01hdGguaW11bChrZSxUdCl8MCkrTWF0aC5pbXVsKEFlLFdlKXwwLHNlPXNlK01hdGguaW11bChBZSxUdCl8MCxvZT1vZStNYXRoLmltdWwoUmUsaHQp''@;'; put 'put ''fDAsdGU9KHRlPXRlK01hdGguaW11bChSZSx4dCl8MCkrTWF0aC5pbXVsKEllLGh0KXwwLHNlPXNlK01hdGguaW11bChJZSx4dCl8MCxvZT1vZStNYXRoLmltdWwoamUsb24pfDAsdGU9KHRlPXRlK01hdGguaW11bChqZSxqdCl8MCkrTWF0aC5pbXVsKERlLG9uKXwwLHNlPXNlK01hdGguaW11''@;'; put 'put ''bChEZSxqdCl8MCxvZT1vZStNYXRoLmltdWwoTWUsY24pfDAsdGU9KHRlPXRlK01hdGguaW11bChNZSxwbil8MCkrTWF0aC5pbXVsKHZlLGNuKXwwLHNlPXNlK01hdGguaW11bCh2ZSxwbil8MDt2YXIgWWk9KEErKG9lPW9lK01hdGguaW11bChVZSxYdCl8MCl8MCkrKCg4MTkxJih0ZT0odGU9''@;'; put 'put ''dGUrTWF0aC5pbXVsKFVlLGVuKXwwKStNYXRoLmltdWwoSmUsWHQpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxlbil8MCkrKHRlPj4+MTMpfDApKyhZaT4+PjI2KXwwLFlpJj02NzEwODg2MyxvZT1NYXRoLmltdWwoUnQsUXQpLHRlPSh0ZT1NYXRoLmltdWwoUnQsc24pKStN''@;'; put 'put ''YXRoLmltdWwoUHQsUXQpfDAsc2U9TWF0aC5pbXVsKFB0LHNuKSxvZT1vZStNYXRoLmltdWwoSGUsZm4pfDAsdGU9KHRlPXRlK01hdGguaW11bChIZSxmdCl8MCkrTWF0aC5pbXVsKGR0LGZuKXwwLHNlPXNlK01hdGguaW11bChkdCxmdCl8MCxvZT1vZStNYXRoLmltdWwoaXQsWnQpfDAsdGU9''@;'; put 'put ''KHRlPXRlK01hdGguaW11bChpdCxBdCl8MCkrTWF0aC5pbXVsKCRlLFp0KXwwLHNlPXNlK01hdGguaW11bCgkZSxBdCl8MCxvZT1vZStNYXRoLmltdWwoeXQsc3QpfDAsdGU9KHRlPXRlK01hdGguaW11bCh5dCx6dCl8MCkrTWF0aC5pbXVsKE10LHN0KXwwLHNlPXNlK01hdGguaW11bChNdCx6''@;'; put 'put ''dCl8MCxvZT1vZStNYXRoLmltdWwocnQsV2UpfDAsdGU9KHRlPXRlK01hdGguaW11bChydCxUdCl8MCkrTWF0aC5pbXVsKFFlLFdlKXwwLHNlPXNlK01hdGguaW11bChRZSxUdCl8MCxvZT1vZStNYXRoLmltdWwoa2UsaHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChrZSx4dCl8MCkrTWF0aC5p''@;'; put 'put ''bXVsKEFlLGh0KXwwLHNlPXNlK01hdGguaW11bChBZSx4dCl8MCxvZT1vZStNYXRoLmltdWwoUmUsb24pfDAsdGU9KHRlPXRlK01hdGguaW11bChSZSxqdCl8MCkrTWF0aC5pbXVsKEllLG9uKXwwLHNlPXNlK01hdGguaW11bChJZSxqdCl8MCxvZT1vZStNYXRoLmltdWwoamUsY24pfDAsdGU9''@;'; put 'put ''KHRlPXRlK01hdGguaW11bChqZSxwbil8MCkrTWF0aC5pbXVsKERlLGNuKXwwLHNlPXNlK01hdGguaW11bChEZSxwbil8MCxvZT1vZStNYXRoLmltdWwoTWUsWHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChNZSxlbil8MCkrTWF0aC5pbXVsKHZlLFh0KXwwLHNlPXNlK01hdGguaW11bCh2ZSxl''@;'; put 'put ''bil8MDt2YXIgZ289KEErKG9lPW9lK01hdGguaW11bChVZSxNaSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFVlLHByKXwwKStNYXRoLmltdWwoSmUsTWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChKZSxwcil8MCkrKHRlPj4+MTMpfDApKyhnbz4+PjI2KXww''@;'; put 'put ''LGdvJj02NzEwODg2MyxvZT1NYXRoLmltdWwoUnQsZm4pLHRlPSh0ZT1NYXRoLmltdWwoUnQsZnQpKStNYXRoLmltdWwoUHQsZm4pfDAsc2U9TWF0aC5pbXVsKFB0LGZ0KSxvZT1vZStNYXRoLmltdWwoSGUsWnQpfDAsdGU9KHRlPXRlK01hdGguaW11bChIZSxBdCl8MCkrTWF0aC5pbXVsKGR0''@;'; put 'put ''LFp0KXwwLHNlPXNlK01hdGguaW11bChkdCxBdCl8MCxvZT1vZStNYXRoLmltdWwoaXQsc3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChpdCx6dCl8MCkrTWF0aC5pbXVsKCRlLHN0KXwwLHNlPXNlK01hdGguaW11bCgkZSx6dCl8MCxvZT1vZStNYXRoLmltdWwoeXQsV2UpfDAsdGU9KHRlPXRl''@;'; put 'put ''K01hdGguaW11bCh5dCxUdCl8MCkrTWF0aC5pbXVsKE10LFdlKXwwLHNlPXNlK01hdGguaW11bChNdCxUdCl8MCxvZT1vZStNYXRoLmltdWwocnQsaHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChydCx4dCl8MCkrTWF0aC5pbXVsKFFlLGh0KXwwLHNlPXNlK01hdGguaW11bChRZSx4dCl8MCxv''@;'; put 'put ''ZT1vZStNYXRoLmltdWwoa2Usb24pfDAsdGU9KHRlPXRlK01hdGguaW11bChrZSxqdCl8MCkrTWF0aC5pbXVsKEFlLG9uKXwwLHNlPXNlK01hdGguaW11bChBZSxqdCl8MCxvZT1vZStNYXRoLmltdWwoUmUsY24pfDAsdGU9KHRlPXRlK01hdGguaW11bChSZSxwbil8MCkrTWF0aC5pbXVsKEll''@;'; put 'put ''LGNuKXwwLHNlPXNlK01hdGguaW11bChJZSxwbil8MCxvZT1vZStNYXRoLmltdWwoamUsWHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChqZSxlbil8MCkrTWF0aC5pbXVsKERlLFh0KXwwLHNlPXNlK01hdGguaW11bChEZSxlbil8MDt2YXIgZXI9KEErKG9lPW9lK01hdGguaW11bChNZSxNaSl8''@;'; put 'put ''MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKE1lLHByKXwwKStNYXRoLmltdWwodmUsTWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bCh2ZSxwcil8MCkrKHRlPj4+MTMpfDApKyhlcj4+PjI2KXwwLGVyJj02NzEwODg2MyxvZT1NYXRoLmltdWwoUnQsWnQpLHRlPSh0''@;'; put 'put ''ZT1NYXRoLmltdWwoUnQsQXQpKStNYXRoLmltdWwoUHQsWnQpfDAsc2U9TWF0aC5pbXVsKFB0LEF0KSxvZT1vZStNYXRoLmltdWwoSGUsc3QpfDAsdGU9KHRlPXRlK01hdGguaW11bChIZSx6dCl8MCkrTWF0aC5pbXVsKGR0LHN0KXwwLHNlPXNlK01hdGguaW11bChkdCx6dCl8MCxvZT1vZStN''@;'; put 'put ''YXRoLmltdWwoaXQsV2UpfDAsdGU9KHRlPXRlK01hdGguaW11bChpdCxUdCl8MCkrTWF0aC5pbXVsKCRlLFdlKXwwLHNlPXNlK01hdGguaW11bCgkZSxUdCl8MCxvZT1vZStNYXRoLmltdWwoeXQsaHQpfDAsdGU9KHRlPXRlK01hdGguaW11bCh5dCx4dCl8MCkrTWF0aC5pbXVsKE10LGh0KXww''@;'; put 'put ''LHNlPXNlK01hdGguaW11bChNdCx4dCl8MCxvZT1vZStNYXRoLmltdWwocnQsb24pfDAsdGU9KHRlPXRlK01hdGguaW11bChydCxqdCl8MCkrTWF0aC5pbXVsKFFlLG9uKXwwLHNlPXNlK01hdGguaW11bChRZSxqdCl8MCxvZT1vZStNYXRoLmltdWwoa2UsY24pfDAsdGU9KHRlPXRlK01hdGgu''@;'; put 'put ''aW11bChrZSxwbil8MCkrTWF0aC5pbXVsKEFlLGNuKXwwLHNlPXNlK01hdGguaW11bChBZSxwbil8MCxvZT1vZStNYXRoLmltdWwoUmUsWHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChSZSxlbil8MCkrTWF0aC5pbXVsKEllLFh0KXwwLHNlPXNlK01hdGguaW11bChJZSxlbil8MDt2YXIgY289''@;'; put 'put ''KEErKG9lPW9lK01hdGguaW11bChqZSxNaSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKGplLHByKXwwKStNYXRoLmltdWwoRGUsTWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChEZSxwcil8MCkrKHRlPj4+MTMpfDApKyhjbz4+PjI2KXwwLGNvJj02NzEwODg2''@;'; put 'put ''MyxvZT1NYXRoLmltdWwoUnQsc3QpLHRlPSh0ZT1NYXRoLmltdWwoUnQsenQpKStNYXRoLmltdWwoUHQsc3QpfDAsc2U9TWF0aC5pbXVsKFB0LHp0KSxvZT1vZStNYXRoLmltdWwoSGUsV2UpfDAsdGU9KHRlPXRlK01hdGguaW11bChIZSxUdCl8MCkrTWF0aC5pbXVsKGR0LFdlKXwwLHNlPXNl''@;'; put 'put ''K01hdGguaW11bChkdCxUdCl8MCxvZT1vZStNYXRoLmltdWwoaXQsaHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChpdCx4dCl8MCkrTWF0aC5pbXVsKCRlLGh0KXwwLHNlPXNlK01hdGguaW11bCgkZSx4dCl8MCxvZT1vZStNYXRoLmltdWwoeXQsb24pfDAsdGU9KHRlPXRlK01hdGguaW11bCh5''@;'; put 'put ''dCxqdCl8MCkrTWF0aC5pbXVsKE10LG9uKXwwLHNlPXNlK01hdGguaW11bChNdCxqdCl8MCxvZT1vZStNYXRoLmltdWwocnQsY24pfDAsdGU9KHRlPXRlK01hdGguaW11bChydCxwbil8MCkrTWF0aC5pbXVsKFFlLGNuKXwwLHNlPXNlK01hdGguaW11bChRZSxwbil8MCxvZT1vZStNYXRoLmlt''@;'; put 'put ''dWwoa2UsWHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChrZSxlbil8MCkrTWF0aC5pbXVsKEFlLFh0KXwwLHNlPXNlK01hdGguaW11bChBZSxlbil8MDt2YXIgX289KEErKG9lPW9lK01hdGguaW11bChSZSxNaSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKFJlLHByKXwwKStN''@;'; put 'put ''YXRoLmltdWwoSWUsTWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChJZSxwcil8MCkrKHRlPj4+MTMpfDApKyhfbz4+PjI2KXwwLF9vJj02NzEwODg2MyxvZT1NYXRoLmltdWwoUnQsV2UpLHRlPSh0ZT1NYXRoLmltdWwoUnQsVHQpKStNYXRoLmltdWwoUHQsV2UpfDAsc2U9TWF0''@;'; put 'put ''aC5pbXVsKFB0LFR0KSxvZT1vZStNYXRoLmltdWwoSGUsaHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChIZSx4dCl8MCkrTWF0aC5pbXVsKGR0LGh0KXwwLHNlPXNlK01hdGguaW11bChkdCx4dCl8MCxvZT1vZStNYXRoLmltdWwoaXQsb24pfDAsdGU9KHRlPXRlK01hdGguaW11bChpdCxqdCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKCRlLG9uKXwwLHNlPXNlK01hdGguaW11bCgkZSxqdCl8MCxvZT1vZStNYXRoLmltdWwoeXQsY24pfDAsdGU9KHRlPXRlK01hdGguaW11bCh5dCxwbil8MCkrTWF0aC5pbXVsKE10LGNuKXwwLHNlPXNlK01hdGguaW11bChNdCxwbil8MCxvZT1vZStNYXRoLmltdWwocnQs''@;'; put 'put ''WHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChydCxlbil8MCkrTWF0aC5pbXVsKFFlLFh0KXwwLHNlPXNlK01hdGguaW11bChRZSxlbil8MDt2YXIgT289KEErKG9lPW9lK01hdGguaW11bChrZSxNaSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKGtlLHByKXwwKStNYXRoLmlt''@;'; put 'put ''dWwoQWUsTWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChBZSxwcil8MCkrKHRlPj4+MTMpfDApKyhPbz4+PjI2KXwwLE9vJj02NzEwODg2MyxvZT1NYXRoLmltdWwoUnQsaHQpLHRlPSh0ZT1NYXRoLmltdWwoUnQseHQpKStNYXRoLmltdWwoUHQsaHQpfDAsc2U9TWF0aC5pbXVs''@;'; put 'put ''KFB0LHh0KSxvZT1vZStNYXRoLmltdWwoSGUsb24pfDAsdGU9KHRlPXRlK01hdGguaW11bChIZSxqdCl8MCkrTWF0aC5pbXVsKGR0LG9uKXwwLHNlPXNlK01hdGguaW11bChkdCxqdCl8MCxvZT1vZStNYXRoLmltdWwoaXQsY24pfDAsdGU9KHRlPXRlK01hdGguaW11bChpdCxwbil8MCkrTWF0''@;'; put 'put ''aC5pbXVsKCRlLGNuKXwwLHNlPXNlK01hdGguaW11bCgkZSxwbil8MCxvZT1vZStNYXRoLmltdWwoeXQsWHQpfDAsdGU9KHRlPXRlK01hdGguaW11bCh5dCxlbil8MCkrTWF0aC5pbXVsKE10LFh0KXwwLHNlPXNlK01hdGguaW11bChNdCxlbil8MDt2YXIgSG89KEErKG9lPW9lK01hdGguaW11''@;'; put 'put ''bChydCxNaSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKHJ0LHByKXwwKStNYXRoLmltdWwoUWUsTWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChRZSxwcil8MCkrKHRlPj4+MTMpfDApKyhIbz4+PjI2KXwwLEhvJj02NzEwODg2MyxvZT1NYXRoLmltdWwoUnQs''@;'; put 'put ''b24pLHRlPSh0ZT1NYXRoLmltdWwoUnQsanQpKStNYXRoLmltdWwoUHQsb24pfDAsc2U9TWF0aC5pbXVsKFB0LGp0KSxvZT1vZStNYXRoLmltdWwoSGUsY24pfDAsdGU9KHRlPXRlK01hdGguaW11bChIZSxwbil8MCkrTWF0aC5pbXVsKGR0LGNuKXwwLHNlPXNlK01hdGguaW11bChkdCxwbil8''@;'; put 'put ''MCxvZT1vZStNYXRoLmltdWwoaXQsWHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChpdCxlbil8MCkrTWF0aC5pbXVsKCRlLFh0KXwwLHNlPXNlK01hdGguaW11bCgkZSxlbil8MDt2YXIgZWk9KEErKG9lPW9lK01hdGguaW11bCh5dCxNaSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5p''@;'; put 'put ''bXVsKHl0LHByKXwwKStNYXRoLmltdWwoTXQsTWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bChNdCxwcil8MCkrKHRlPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxvZT1NYXRoLmltdWwoUnQsY24pLHRlPSh0ZT1NYXRoLmltdWwoUnQscG4pKStNYXRoLmltdWwo''@;'; put 'put ''UHQsY24pfDAsc2U9TWF0aC5pbXVsKFB0LHBuKSxvZT1vZStNYXRoLmltdWwoSGUsWHQpfDAsdGU9KHRlPXRlK01hdGguaW11bChIZSxlbil8MCkrTWF0aC5pbXVsKGR0LFh0KXwwLHNlPXNlK01hdGguaW11bChkdCxlbil8MDt2YXIgZ2E9KEErKG9lPW9lK01hdGguaW11bChpdCxNaSl8MCl8''@;'; put 'put ''MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKGl0LHByKXwwKStNYXRoLmltdWwoJGUsTWkpfDApKTw8MTMpfDA7QT0oKHNlPXNlK01hdGguaW11bCgkZSxwcil8MCkrKHRlPj4+MTMpfDApKyhnYT4+PjI2KXwwLGdhJj02NzEwODg2MyxvZT1NYXRoLmltdWwoUnQsWHQpLHRlPSh0ZT1N''@;'; put 'put ''YXRoLmltdWwoUnQsZW4pKStNYXRoLmltdWwoUHQsWHQpfDAsc2U9TWF0aC5pbXVsKFB0LGVuKTt2YXIgTnM9KEErKG9lPW9lK01hdGguaW11bChIZSxNaSl8MCl8MCkrKCg4MTkxJih0ZT0odGU9dGUrTWF0aC5pbXVsKEhlLHByKXwwKStNYXRoLmltdWwoZHQsTWkpfDApKTw8MTMpfDA7QT0o''@;'; put 'put ''KHNlPXNlK01hdGguaW11bChkdCxwcil8MCkrKHRlPj4+MTMpfDApKyhOcz4+PjI2KXwwLE5zJj02NzEwODg2Mzt2YXIgbWw9KEErKG9lPU1hdGguaW11bChSdCxNaSkpfDApKygoODE5MSYodGU9KHRlPU1hdGguaW11bChSdCxwcikpK01hdGguaW11bChQdCxNaSl8MCkpPDwxMyl8MDtyZXR1''@;'; put 'put ''cm4gQT0oKHNlPU1hdGguaW11bChQdCxwcikpKyh0ZT4+PjEzKXwwKSsobWw+Pj4yNil8MCxtbCY9NjcxMDg4NjMsbVswXT1XbixtWzFdPUtpLG1bMl09UXIsbVszXT1KcixtWzRdPUJpLG1bNV09VmksbVs2XT1JbyxtWzddPU9yLG1bOF09WWksbVs5XT1nbyxtWzEwXT1lcixtWzExXT1jbyxt''@;'; put 'put ''WzEyXT1fbyxtWzEzXT1PbyxtWzE0XT1IbyxtWzE1XT1laSxtWzE2XT1nYSxtWzE3XT1OcyxtWzE4XT1tbCwwIT09QSYmKG1bMTldPUEsSC5sZW5ndGgrKyksSH07ZnVuY3Rpb24gcmUoeCxDLFQpe1QubmVnYXRpdmU9Qy5uZWdhdGl2ZV54Lm5lZ2F0aXZlLFQubGVuZ3RoPXgubGVuZ3RoK0Mu''@;'; put 'put ''bGVuZ3RoO2Zvcih2YXIgSD0wLGo9MCxFPTA7RTxULmxlbmd0aC0xO0UrKyl7dmFyIG09ajtqPTA7Zm9yKHZhciBBPTY3MTA4ODYzJkgsb2U9TWF0aC5taW4oRSxDLmxlbmd0aC0xKSx0ZT1NYXRoLm1heCgwLEUteC5sZW5ndGgrMSk7dGU8PW9lO3RlKyspe3ZhciBKZT0oMHx4LndvcmRzW0Ut''@;'; put 'put ''dGVdKSooMHxDLndvcmRzW3RlXSksYXQ9NjcxMDg4NjMmSmU7QT02NzEwODg2MyYoYXQ9YXQrQXwwKSxqKz0obT0obT1tKyhKZS82NzEwODg2NHwwKXwwKSsoYXQ+Pj4yNil8MCk+Pj4yNixtJj02NzEwODg2M31ULndvcmRzW0VdPUEsSD1tLG09an1yZXR1cm4gMCE9PUg/VC53b3Jkc1tFXT1I''@;'; put 'put ''OlQubGVuZ3RoLS0sVC5fc3RyaXAoKX1mdW5jdGlvbiBpZSh4LEMsVCl7cmV0dXJuIHJlKHgsQyxUKX1mdW5jdGlvbiBsZSh4LEMpe3RoaXMueD14LHRoaXMueT1DfU1hdGguaW11bHx8KEo9ZWUpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKEMsVCl7dmFyIGo9dGhpcy5sZW5ndGgrQy5s''@;'; put 'put ''ZW5ndGg7cmV0dXJuIDEwPT09dGhpcy5sZW5ndGgmJjEwPT09Qy5sZW5ndGg/Sih0aGlzLEMsVCk6ajw2Mz9lZSh0aGlzLEMsVCk6ajwxMDI0P3JlKHRoaXMsQyxUKTppZSh0aGlzLEMsVCl9LGxlLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKEMpe2Zvcih2YXIgVD1uZXcgQXJyYXkoQyks''@;'; put 'put ''SD13LnByb3RvdHlwZS5fY291bnRCaXRzKEMpLTEsaj0wO2o8QztqKyspVFtqXT10aGlzLnJldkJpbihqLEgsQyk7cmV0dXJuIFR9LGxlLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24oQyxULEgpe2lmKDA9PT1DfHxDPT09SC0xKXJldHVybiBDO2Zvcih2YXIgaj0wLEU9MDtFPFQ7RSsrKWp8''@;'; put 'put ''PSgxJkMpPDxULUUtMSxDPj49MTtyZXR1cm4gan0sbGUucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24oQyxULEgsaixFLG0pe2Zvcih2YXIgQT0wO0E8bTtBKyspaltBXT1UW0NbQV1dLEVbQV09SFtDW0FdXX0sbGUucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbihDLFQsSCxqLEUsbSl7''@;'; put 'put ''dGhpcy5wZXJtdXRlKG0sQyxULEgsaixFKTtmb3IodmFyIEE9MTtBPEU7QTw8PTEpZm9yKHZhciBvZT1BPDwxLHRlPU1hdGguY29zKDIqTWF0aC5QSS9vZSksc2U9TWF0aC5zaW4oMipNYXRoLlBJL29lKSx3ZT0wO3dlPEU7d2UrPW9lKWZvcih2YXIgVWU9dGUsSmU9c2UsYXQ9MDthdDxBO2F0''@;'; put 'put ''Kyspe3ZhciBNZT1IW3dlK2F0XSx2ZT1qW3dlK2F0XSxYZT1IW3dlK2F0K0FdLGplPWpbd2UrYXQrQV0sRGU9VWUqWGUtSmUqamU7amU9VWUqamUrSmUqWGUsSFt3ZSthdF09TWUrKFhlPURlKSxqW3dlK2F0XT12ZStqZSxIW3dlK2F0K0FdPU1lLVhlLGpbd2UrYXQrQV09dmUtamUsYXQhPT1v''@;'; put 'put ''ZSYmKERlPXRlKlVlLXNlKkplLEplPXRlKkplK3NlKlVlLFVlPURlKX19LGxlLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihDLFQpe3ZhciBIPTF8TWF0aC5tYXgoVCxDKSxqPTEmSCxFPTA7Zm9yKEg9SC8yfDA7SDtIPj4+PTEpRSsrO3JldHVybiAxPDxFKzEran0sbGUucHJvdG90''@;'; put 'put ''eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbihDLFQsSCl7aWYoIShIPD0xKSlmb3IodmFyIGo9MDtqPEgvMjtqKyspe3ZhciBFPUNbal07Q1tqXT1DW0gtai0xXSxDW0gtai0xXT1FLEU9VFtqXSxUW2pdPS1UW0gtai0xXSxUW0gtai0xXT0tRX19LGxlLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVu''@;'; put 'put ''Y3Rpb24oQyxUKXtmb3IodmFyIEg9MCxqPTA7ajxULzI7aisrKXt2YXIgRT04MTkyKk1hdGgucm91bmQoQ1syKmorMV0vVCkrTWF0aC5yb3VuZChDWzIqal0vVCkrSDtDW2pdPTY3MTA4ODYzJkUsSD1FPDY3MTA4ODY0PzA6RS82NzEwODg2NHwwfXJldHVybiBDfSxsZS5wcm90b3R5cGUuY29u''@;'; put 'put ''dmVydDEzYj1mdW5jdGlvbihDLFQsSCxqKXtmb3IodmFyIEU9MCxtPTA7bTxUO20rKylIWzIqbV09ODE5MSYoRSs9MHxDW21dKSxIWzIqbSsxXT04MTkxJihFPj4+PTEzKSxFPj4+PTEzO2ZvcihtPTIqVDttPGo7KyttKUhbbV09MDtnKDA9PT1FKSxnKCEoLTgxOTImRSkpfSxsZS5wcm90b3R5''@;'; put 'put ''cGUuc3R1Yj1mdW5jdGlvbihDKXtmb3IodmFyIFQ9bmV3IEFycmF5KEMpLEg9MDtIPEM7SCsrKVRbSF09MDtyZXR1cm4gVH0sbGUucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24oQyxULEgpe3ZhciBqPTIqdGhpcy5ndWVzc0xlbjEzYihDLmxlbmd0aCxULmxlbmd0aCksRT10aGlzLm1ha2VSQlQo''@;'; put 'put ''aiksbT10aGlzLnN0dWIoaiksQT1uZXcgQXJyYXkoaiksb2U9bmV3IEFycmF5KGopLHRlPW5ldyBBcnJheShqKSxzZT1uZXcgQXJyYXkoaiksd2U9bmV3IEFycmF5KGopLFVlPW5ldyBBcnJheShqKSxKZT1ILndvcmRzO0plLmxlbmd0aD1qLHRoaXMuY29udmVydDEzYihDLndvcmRzLEMubGVu''@;'; put 'put ''Z3RoLEEsaiksdGhpcy5jb252ZXJ0MTNiKFQud29yZHMsVC5sZW5ndGgsc2UsaiksdGhpcy50cmFuc2Zvcm0oQSxtLG9lLHRlLGosRSksdGhpcy50cmFuc2Zvcm0oc2UsbSx3ZSxVZSxqLEUpO2Zvcih2YXIgYXQ9MDthdDxqO2F0Kyspe3ZhciBNZT1vZVthdF0qd2VbYXRdLXRlW2F0XSpVZVth''@;'; put 'put ''dF07dGVbYXRdPW9lW2F0XSpVZVthdF0rdGVbYXRdKndlW2F0XSxvZVthdF09TWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKG9lLHRlLGopLHRoaXMudHJhbnNmb3JtKG9lLHRlLEplLG0saixFKSx0aGlzLmNvbmp1Z2F0ZShKZSxtLGopLHRoaXMubm9ybWFsaXplMTNiKEplLGopLEgubmVnYXRp''@;'; put 'put ''dmU9Qy5uZWdhdGl2ZV5ULm5lZ2F0aXZlLEgubGVuZ3RoPUMubGVuZ3RoK1QubGVuZ3RoLEguX3N0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihDKXt2YXIgVD1uZXcgdyhudWxsKTtyZXR1cm4gVC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrQy5sZW5ndGgpLHRoaXMubXVs''@;'; put 'put ''VG8oQyxUKX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihDKXt2YXIgVD1uZXcgdyhudWxsKTtyZXR1cm4gVC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrQy5sZW5ndGgpLGllKHRoaXMsQyxUKX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgp''@;'; put 'put ''Lm11bFRvKEMsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKEMpe3ZhciBUPUM8MDtUJiYoQz0tQyksZygibnVtYmVyIj09dHlwZW9mIEMpLGcoQzw2NzEwODg2NCk7Zm9yKHZhciBIPTAsaj0wO2o8dGhpcy5sZW5ndGg7aisrKXt2YXIgRT0oMHx0aGlzLndvcmRzW2pdKSpDLG09''@;'; put 'put ''KDY3MTA4ODYzJkUpKyg2NzEwODg2MyZIKTtIPj49MjYsSCs9RS82NzEwODg2NHwwLEgrPW0+Pj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJm19cmV0dXJuIDAhPT1IJiYodGhpcy53b3Jkc1tqXT1ILHRoaXMubGVuZ3RoKyspLFQ/dGhpcy5pbmVnKCk6dGhpc30sdy5wcm90b3R5cGUubXVs''@;'; put 'put ''bj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKEMpfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBl''@;'; put 'put ''LnBvdz1mdW5jdGlvbihDKXt2YXIgVD1mdW5jdGlvbiBYKHgpe2Zvcih2YXIgQz1uZXcgQXJyYXkoeC5iaXRMZW5ndGgoKSksVD0wO1Q8Qy5sZW5ndGg7VCsrKUNbVF09eC53b3Jkc1tULzI2fDBdPj4+VCUyNiYxO3JldHVybiBDfShDKTtpZigwPT09VC5sZW5ndGgpcmV0dXJuIG5ldyB3KDEp''@;'; put 'put ''O2Zvcih2YXIgSD10aGlzLGo9MDtqPFQubGVuZ3RoJiYwPT09VFtqXTtqKyssSD1ILnNxcigpKTtpZigrK2o8VC5sZW5ndGgpZm9yKHZhciBFPUguc3FyKCk7ajxULmxlbmd0aDtqKyssRT1FLnNxcigpKTAhPT1UW2pdJiYoSD1ILm11bChFKSk7cmV0dXJuIEh9LHcucHJvdG90eXBlLml1c2hs''@;'; put 'put ''bj1mdW5jdGlvbihDKXtnKCJudW1iZXIiPT10eXBlb2YgQyYmQz49MCk7dmFyIEUsVD1DJTI2LEg9KEMtVCkvMjYsaj02NzEwODg2Mz4+PjI2LVQ8PDI2LVQ7aWYoMCE9PVQpe3ZhciBtPTA7Zm9yKEU9MDtFPHRoaXMubGVuZ3RoO0UrKyl7dmFyIEE9dGhpcy53b3Jkc1tFXSZqO3RoaXMud29y''@;'; put 'put ''ZHNbRV09KDB8dGhpcy53b3Jkc1tFXSktQTw8VHxtLG09QT4+PjI2LVR9bSYmKHRoaXMud29yZHNbRV09bSx0aGlzLmxlbmd0aCsrKX1pZigwIT09SCl7Zm9yKEU9dGhpcy5sZW5ndGgtMTtFPj0wO0UtLSl0aGlzLndvcmRzW0UrSF09dGhpcy53b3Jkc1tFXTtmb3IoRT0wO0U8SDtFKyspdGhp''@;'; put 'put ''cy53b3Jkc1tFXT0wO3RoaXMubGVuZ3RoKz1IfXJldHVybiB0aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihDKXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4oQyl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihDLFQsSCl7dmFyIGo7''@;'; put 'put ''ZygibnVtYmVyIj09dHlwZW9mIEMmJkM+PTApLGo9VD8oVC1UJTI2KS8yNjowO3ZhciBFPUMlMjYsbT1NYXRoLm1pbigoQy1FKS8yNix0aGlzLmxlbmd0aCksQT02NzEwODg2M142NzEwODg2Mz4+PkU8PEUsb2U9SDtpZihqLT1tLGo9TWF0aC5tYXgoMCxqKSxvZSl7Zm9yKHZhciB0ZT0wO3Rl''@;'; put 'put ''PG07dGUrKylvZS53b3Jkc1t0ZV09dGhpcy53b3Jkc1t0ZV07b2UubGVuZ3RoPW19aWYoMCE9PW0paWYodGhpcy5sZW5ndGg+bSlmb3IodGhpcy5sZW5ndGgtPW0sdGU9MDt0ZTx0aGlzLmxlbmd0aDt0ZSsrKXRoaXMud29yZHNbdGVdPXRoaXMud29yZHNbdGUrbV07ZWxzZSB0aGlzLndvcmRz''@;'; put 'put ''WzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgc2U9MDtmb3IodGU9dGhpcy5sZW5ndGgtMTt0ZT49MCYmKDAhPT1zZXx8dGU+PWopO3RlLS0pe3ZhciB3ZT0wfHRoaXMud29yZHNbdGVdO3RoaXMud29yZHNbdGVdPXNlPDwyNi1FfHdlPj4+RSxzZT13ZSZBfXJldHVybiBvZSYmMCE9PXNlJiYob2Uu''@;'; put 'put ''d29yZHNbb2UubGVuZ3RoKytdPXNlKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5fc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24oQyxULEgpe3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihDLFQs''@;'; put 'put ''SCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihDKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4oQyl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMu''@;'; put 'put ''Y2xvbmUoKS5pc2hybihDKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4oQyl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKEMpe2coIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKTt2YXIgVD1DJTI2LEg9KEMtVCkvMjY7cmV0dXJu''@;'; put 'put ''ISh0aGlzLmxlbmd0aDw9SHx8ISh0aGlzLndvcmRzW0hdJjE8PFQpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKEMpe2coIm51bWJlciI9PXR5cGVvZiBDJiZDPj0wKTt2YXIgVD1DJTI2LEg9KEMtVCkvMjY7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBv''@;'; put 'put ''bmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD1IP3RoaXM6KDAhPT1UJiZIKyssdGhpcy5sZW5ndGg9TWF0aC5taW4oSCx0aGlzLmxlbmd0aCksMCE9PVQmJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQpLHRoaXMuX3N0''@;'; put 'put ''cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihDKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24oQyl7cmV0dXJuIGcoIm51bWJlciI9PXR5cGVvZiBDKSxnKEM8NjcxMDg4NjQpLEM8MD90aGlzLmlzdWJuKC1DKTowIT09''@;'; put 'put ''dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPD1DPyh0aGlzLndvcmRzWzBdPUMtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3VibihDKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhp''@;'; put 'put ''cy5faWFkZG4oQyl9LHcucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbihDKXt0aGlzLndvcmRzWzBdKz1DO2Zvcih2YXIgVD0wO1Q8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbVF0+PTY3MTA4ODY0O1QrKyl0aGlzLndvcmRzW1RdLT02NzEwODg2NCxUPT09dGhpcy5sZW5ndGgtMT90aGlzLndv''@;'; put 'put ''cmRzW1QrMV09MTp0aGlzLndvcmRzW1QrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsVCsxKSx0aGlzfSx3LnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbihDKXtpZihnKCJudW1iZXIiPT10eXBlb2YgQyksZyhDPDY3MTA4ODY0KSxDPDApcmV0dXJuIHRoaXMu''@;'; put 'put ''aWFkZG4oLUMpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbihDKSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT1DLDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29y''@;'; put 'put ''ZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBUPTA7VDx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tUXTwwO1QrKyl0aGlzLndvcmRzW1RdKz02NzEwODg2NCx0aGlzLndvcmRzW1QrMV0tPTE7cmV0dXJuIHRoaXMuX3N0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24o''@;'; put 'put ''Qyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihDKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKEMpfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKEMsVCxIKXt2YXIgRTt0aGlzLl9leHBhbmQoQy5sZW5ndGgrSCk7dmFyIG0sQT0wO2ZvcihFPTA7RTxDLmxlbmd0aDtFKyspe209KDB8dGhpcy53b3Jkc1tFK0hd''@;'; put 'put ''KStBO3ZhciBvZT0oMHxDLndvcmRzW0VdKSpUO0E9KChtLT02NzEwODg2MyZvZSk+PjI2KS0ob2UvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tFK0hdPTY3MTA4ODYzJm19Zm9yKDtFPHRoaXMubGVuZ3RoLUg7RSsrKUE9KG09KDB8dGhpcy53b3Jkc1tFK0hdKStBKT4+MjYsdGhpcy53b3Jkc1tF''@;'; put 'put ''K0hdPTY3MTA4ODYzJm07aWYoMD09PUEpcmV0dXJuIHRoaXMuX3N0cmlwKCk7Zm9yKGcoLTE9PT1BKSxBPTAsRT0wO0U8dGhpcy5sZW5ndGg7RSsrKUE9KG09LSgwfHRoaXMud29yZHNbRV0pK0EpPj4yNix0aGlzLndvcmRzW0VdPTY3MTA4ODYzJm07cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0''@;'; put 'put ''aGlzLl9zdHJpcCgpfSx3LnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbihDLFQpe3ZhciBILGo9dGhpcy5jbG9uZSgpLEU9QyxtPTB8RS53b3Jkc1tFLmxlbmd0aC0xXTswIT0oSD0yNi10aGlzLl9jb3VudEJpdHMobSkpJiYoRT1FLnVzaGxuKEgpLGouaXVzaGxuKEgpLG09MHxFLndvcmRz''@;'; put 'put ''W0UubGVuZ3RoLTFdKTt2YXIgdGUsb2U9ai5sZW5ndGgtRS5sZW5ndGg7aWYoIm1vZCIhPT1UKXsodGU9bmV3IHcobnVsbCkpLmxlbmd0aD1vZSsxLHRlLndvcmRzPW5ldyBBcnJheSh0ZS5sZW5ndGgpO2Zvcih2YXIgc2U9MDtzZTx0ZS5sZW5ndGg7c2UrKyl0ZS53b3Jkc1tzZV09MH12YXIg''@;'; put 'put ''d2U9ai5jbG9uZSgpLl9pc2hsbnN1Ym11bChFLDEsb2UpOzA9PT13ZS5uZWdhdGl2ZSYmKGo9d2UsdGUmJih0ZS53b3Jkc1tvZV09MSkpO2Zvcih2YXIgVWU9b2UtMTtVZT49MDtVZS0tKXt2YXIgSmU9NjcxMDg4NjQqKDB8ai53b3Jkc1tFLmxlbmd0aCtVZV0pKygwfGoud29yZHNbRS5sZW5n''@;'; put 'put ''dGgrVWUtMV0pO2ZvcihKZT1NYXRoLm1pbihKZS9tfDAsNjcxMDg4NjMpLGouX2lzaGxuc3VibXVsKEUsSmUsVWUpOzAhPT1qLm5lZ2F0aXZlOylKZS0tLGoubmVnYXRpdmU9MCxqLl9pc2hsbnN1Ym11bChFLDEsVWUpLGouaXNaZXJvKCl8fChqLm5lZ2F0aXZlXj0xKTt0ZSYmKHRlLndvcmRz''@;'; put 'put ''W1VlXT1KZSl9cmV0dXJuIHRlJiZ0ZS5fc3RyaXAoKSxqLl9zdHJpcCgpLCJkaXYiIT09VCYmMCE9PUgmJmouaXVzaHJuKEgpLHtkaXY6dGV8fG51bGwsbW9kOmp9fSx3LnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24oQyxULEgpe3JldHVybiBnKCFDLmlzWmVybygpKSx0aGlzLmlzWmVybygp''@;'; put 'put ''P3tkaXY6bmV3IHcoMCksbW9kOm5ldyB3KDApfTowIT09dGhpcy5uZWdhdGl2ZSYmMD09PUMubmVnYXRpdmU/KG09dGhpcy5uZWcoKS5kaXZtb2QoQyxUKSwibW9kIiE9PVQmJihqPW0uZGl2Lm5lZygpKSwiZGl2IiE9PVQmJihFPW0ubW9kLm5lZygpLEgmJjAhPT1FLm5lZ2F0aXZlJiZFLmlh''@;'; put 'put ''ZGQoQykpLHtkaXY6aixtb2Q6RX0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Qy5uZWdhdGl2ZT8obT10aGlzLmRpdm1vZChDLm5lZygpLFQpLCJtb2QiIT09VCYmKGo9bS5kaXYubmVnKCkpLHtkaXY6aixtb2Q6bS5tb2R9KTp0aGlzLm5lZ2F0aXZlJkMubmVnYXRpdmU/KG09dGhpcy5uZWco''@;'; put 'put ''KS5kaXZtb2QoQy5uZWcoKSxUKSwiZGl2IiE9PVQmJihFPW0ubW9kLm5lZygpLEgmJjAhPT1FLm5lZ2F0aXZlJiZFLmlzdWIoQykpLHtkaXY6bS5kaXYsbW9kOkV9KTpDLmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAoQyk8MD97ZGl2Om5ldyB3KDApLG1vZDp0aGlzfToxPT09Qy5sZW5n''@;'; put 'put ''dGg/ImRpdiI9PT1UP3tkaXY6dGhpcy5kaXZuKEMud29yZHNbMF0pLG1vZDpudWxsfToibW9kIj09PVQ/e2RpdjpudWxsLG1vZDpuZXcgdyh0aGlzLm1vZHJuKEMud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4oQy53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kcm4oQy53b3Jkc1swXSkp''@;'; put 'put ''fTp0aGlzLl93b3JkRGl2KEMsVCk7dmFyIGosRSxtfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuZGl2bW9kKEMsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmRpdm1vZChDLCJtb2QiLCExKS5tb2R9LHcucHJv''@;'; put 'put ''dG90eXBlLnVtb2Q9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuZGl2bW9kKEMsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24oQyl7dmFyIFQ9dGhpcy5kaXZtb2QoQyk7aWYoVC5tb2QuaXNaZXJvKCkpcmV0dXJuIFQuZGl2O3ZhciBIPTAhPT1ULmRpdi5uZWdh''@;'; put 'put ''dGl2ZT9ULm1vZC5pc3ViKEMpOlQubW9kLGo9Qy51c2hybigxKSxFPUMuYW5kbG4oMSksbT1ILmNtcChqKTtyZXR1cm4gbTwwfHwxPT09RSYmMD09PW0/VC5kaXY6MCE9PVQuZGl2Lm5lZ2F0aXZlP1QuZGl2LmlzdWJuKDEpOlQuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2Rybj1mdW5j''@;'; put 'put ''dGlvbihDKXt2YXIgVD1DPDA7VCYmKEM9LUMpLGcoQzw9NjcxMDg4NjMpO2Zvcih2YXIgSD0oMTw8MjYpJUMsaj0wLEU9dGhpcy5sZW5ndGgtMTtFPj0wO0UtLSlqPShIKmorKDB8dGhpcy53b3Jkc1tFXSkpJUM7cmV0dXJuIFQ/LWo6an0sdy5wcm90b3R5cGUubW9kbj1mdW5jdGlvbihDKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5tb2RybihDKX0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24oQyl7dmFyIFQ9QzwwO1QmJihDPS1DKSxnKEM8PTY3MTA4ODYzKTtmb3IodmFyIEg9MCxqPXRoaXMubGVuZ3RoLTE7aj49MDtqLS0pe3ZhciBFPSgwfHRoaXMud29yZHNbal0pKzY3MTA4ODY0Kkg7dGhpcy53''@;'; put 'put ''b3Jkc1tqXT1FL0N8MCxIPUUlQ31yZXR1cm4gdGhpcy5fc3RyaXAoKSxUP3RoaXMuaW5lZygpOnRoaXN9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihDKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihDKXtnKDA9PT1DLm5lZ2F0aXZl''@;'; put 'put ''KSxnKCFDLmlzWmVybygpKTt2YXIgVD10aGlzLEg9Qy5jbG9uZSgpO1Q9MCE9PVQubmVnYXRpdmU/VC51bW9kKEMpOlQuY2xvbmUoKTtmb3IodmFyIGo9bmV3IHcoMSksRT1uZXcgdygwKSxtPW5ldyB3KDApLEE9bmV3IHcoMSksb2U9MDtULmlzRXZlbigpJiZILmlzRXZlbigpOylULml1c2hy''@;'; put 'put ''bigxKSxILml1c2hybigxKSwrK29lO2Zvcih2YXIgdGU9SC5jbG9uZSgpLHNlPVQuY2xvbmUoKTshVC5pc1plcm8oKTspe2Zvcih2YXIgd2U9MCxVZT0xOyEoVC53b3Jkc1swXSZVZSkmJndlPDI2Oysrd2UsVWU8PD0xKTtpZih3ZT4wKWZvcihULml1c2hybih3ZSk7d2UtLSA+MDspKGouaXNP''@;'; put 'put ''ZGQoKXx8RS5pc09kZCgpKSYmKGouaWFkZCh0ZSksRS5pc3ViKHNlKSksai5pdXNocm4oMSksRS5pdXNocm4oMSk7Zm9yKHZhciBKZT0wLGF0PTE7IShILndvcmRzWzBdJmF0KSYmSmU8MjY7KytKZSxhdDw8PTEpO2lmKEplPjApZm9yKEguaXVzaHJuKEplKTtKZS0tID4wOykobS5pc09kZCgp''@;'; put 'put ''fHxBLmlzT2RkKCkpJiYobS5pYWRkKHRlKSxBLmlzdWIoc2UpKSxtLml1c2hybigxKSxBLml1c2hybigxKTtULmNtcChIKT49MD8oVC5pc3ViKEgpLGouaXN1YihtKSxFLmlzdWIoQSkpOihILmlzdWIoVCksbS5pc3ViKGopLEEuaXN1YihFKSl9cmV0dXJue2E6bSxiOkEsZ2NkOkguaXVzaGxu''@;'; put 'put ''KG9lKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihDKXtnKDA9PT1DLm5lZ2F0aXZlKSxnKCFDLmlzWmVybygpKTt2YXIgd2UsVD10aGlzLEg9Qy5jbG9uZSgpO1Q9MCE9PVQubmVnYXRpdmU/VC51bW9kKEMpOlQuY2xvbmUoKTtmb3IodmFyIGo9bmV3IHcoMSksRT1uZXcgdygwKSxt''@;'; put 'put ''PUguY2xvbmUoKTtULmNtcG4oMSk+MCYmSC5jbXBuKDEpPjA7KXtmb3IodmFyIEE9MCxvZT0xOyEoVC53b3Jkc1swXSZvZSkmJkE8MjY7KytBLG9lPDw9MSk7aWYoQT4wKWZvcihULml1c2hybihBKTtBLS0gPjA7KWouaXNPZGQoKSYmai5pYWRkKG0pLGouaXVzaHJuKDEpO2Zvcih2YXIgdGU9''@;'; put 'put ''MCxzZT0xOyEoSC53b3Jkc1swXSZzZSkmJnRlPDI2OysrdGUsc2U8PD0xKTtpZih0ZT4wKWZvcihILml1c2hybih0ZSk7dGUtLSA+MDspRS5pc09kZCgpJiZFLmlhZGQobSksRS5pdXNocm4oMSk7VC5jbXAoSCk+PTA/KFQuaXN1YihIKSxqLmlzdWIoRSkpOihILmlzdWIoVCksRS5pc3ViKGop''@;'; put 'put ''KX1yZXR1cm4od2U9MD09PVQuY21wbigxKT9qOkUpLmNtcG4oMCk8MCYmd2UuaWFkZChDKSx3ZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKEMpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIEMuYWJzKCk7aWYoQy5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgVD10aGlzLmNsb25l''@;'; put 'put ''KCksSD1DLmNsb25lKCk7VC5uZWdhdGl2ZT0wLEgubmVnYXRpdmU9MDtmb3IodmFyIGo9MDtULmlzRXZlbigpJiZILmlzRXZlbigpO2orKylULml1c2hybigxKSxILml1c2hybigxKTtmb3IoOzspe2Zvcig7VC5pc0V2ZW4oKTspVC5pdXNocm4oMSk7Zm9yKDtILmlzRXZlbigpOylILml1c2hy''@;'; put 'put ''bigxKTt2YXIgRT1ULmNtcChIKTtpZihFPDApe3ZhciBtPVQ7VD1ILEg9bX1lbHNlIGlmKDA9PT1FfHwwPT09SC5jbXBuKDEpKWJyZWFrO1QuaXN1YihIKX1yZXR1cm4gSC5pdXNobG4oail9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuZWdjZChDKS5hLnVtb2Qo''@;'; put 'put ''Qyl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy53b3Jkc1sw''@;'; put 'put ''XSZDfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihDKXtnKCJudW1iZXIiPT10eXBlb2YgQyk7dmFyIFQ9QyUyNixIPShDLVQpLzI2LGo9MTw8VDtpZih0aGlzLmxlbmd0aDw9SClyZXR1cm4gdGhpcy5fZXhwYW5kKEgrMSksdGhpcy53b3Jkc1tIXXw9aix0aGlzO2Zvcih2YXIgRT1qLG09''@;'; put 'put ''SDswIT09RSYmbTx0aGlzLmxlbmd0aDttKyspe3ZhciBBPTB8dGhpcy53b3Jkc1ttXTtFPShBKz1FKT4+PjI2LHRoaXMud29yZHNbbV09QSY9NjcxMDg4NjN9cmV0dXJuIDAhPT1FJiYodGhpcy53b3Jkc1ttXT1FLHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKEMpe3ZhciBILFQ9QzwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhVClyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmVClyZXR1cm4gMTtpZih0aGlz''@;'; put 'put ''Ll9zdHJpcCgpLHRoaXMubGVuZ3RoPjEpSD0xO2Vsc2V7VCYmKEM9LUMpLGcoQzw9NjcxMDg4NjMsIk51bWJlciBpcyB0b28gYmlnIik7dmFyIGo9MHx0aGlzLndvcmRzWzBdO0g9aj09PUM/MDpqPEM/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtSDpIfSx3LnByb3RvdHlwZS5j''@;'; put 'put ''bXA9ZnVuY3Rpb24oQyl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1DLm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09Qy5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgVD10aGlzLnVjbXAoQyk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LVQ6VH0sdy5wcm90''@;'; put 'put ''b3R5cGUudWNtcD1mdW5jdGlvbihDKXtpZih0aGlzLmxlbmd0aD5DLmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDxDLmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIFQ9MCxIPXRoaXMubGVuZ3RoLTE7SD49MDtILS0pe3ZhciBqPTB8dGhpcy53b3Jkc1tIXSxFPTB8Qy53b3Jkc1tIXTtp''@;'; put 'put ''ZihqIT09RSl7ajxFP1Q9LTE6aj5FJiYoVD0xKTticmVha319cmV0dXJuIFR9LHcucHJvdG90eXBlLmd0bj1mdW5jdGlvbihDKXtyZXR1cm4gMT09PXRoaXMuY21wbihDKX0sdy5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24oQyl7cmV0dXJuIDE9PT10aGlzLmNtcChDKX0sdy5wcm90b3R5cGUuZ3Rl''@;'; put 'put ''bj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5jbXBuKEMpPj0wfSx3LnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY21wKEMpPj0wfSx3LnByb3RvdHlwZS5sdG49ZnVuY3Rpb24oQyl7cmV0dXJuLTE9PT10aGlzLmNtcG4oQyl9LHcucHJvdG90eXBlLmx0PWZ1bmN0aW9u''@;'; put 'put ''KEMpe3JldHVybi0xPT09dGhpcy5jbXAoQyl9LHcucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24oQyl7cmV0dXJuIHRoaXMuY21wbihDKTw9MH0sdy5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLmNtcChDKTw9MH0sdy5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKEMpe3JldHVy''@;'; put 'put ''biAwPT09dGhpcy5jbXBuKEMpfSx3LnByb3RvdHlwZS5lcT1mdW5jdGlvbihDKXtyZXR1cm4gMD09PXRoaXMuY21wKEMpfSx3LnJlZD1mdW5jdGlvbihDKXtyZXR1cm4gbmV3IHAoQyl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKEMpe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBh''@;'; put 'put ''IG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLGcoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksQy5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKEMpfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQs''@;'; put 'put ''ImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLnJlZD1DLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1''@;'; put 'put ''bmN0aW9uKEMpe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKEMpfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24oQyl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVk''@;'; put 'put ''IG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxDKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihDKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMsQyl9LHcucHJvdG90eXBlLnJlZFN1Yj1m''@;'; put 'put ''dW5jdGlvbihDKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLEMpfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKEMpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCBy''@;'; put 'put ''ZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxDKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKEMpe3JldHVybiBnKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMsQyl9LHcucHJvdG90eXBlLnJlZE11bD1m''@;'; put 'put ''dW5jdGlvbihDKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsQyksdGhpcy5yZWQubXVsKHRoaXMsQyl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24oQyl7cmV0dXJuIGcodGhpcy5yZWQs''@;'; put 'put ''InJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLEMpLHRoaXMucmVkLmltdWwodGhpcyxDKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51''@;'; put 'put ''bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0''@;'; put 'put ''aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''cmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMu''@;'; put 'put ''cmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24oQyl7cmV0dXJuIGcodGhpcy5yZWQmJiFDLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0''@;'; put 'put ''aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxDKX07dmFyIG1lPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gX2UoeCxDKXt0aGlzLm5hbWU9eCx0aGlzLnA9bmV3IHcoQywxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5n''@;'; put 'put ''dGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIFRlKCl7X2UuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZm''@;'; put 'put ''ZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBTZSgpe19lLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gemUoKXtfZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZm''@;'; put 'put ''ZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFYoKXtfZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIHAoeCl7aWYoInN0''@;'; put 'put ''cmluZyI9PXR5cGVvZiB4KXt2YXIgQz13Ll9wcmltZSh4KTt0aGlzLm09Qy5wLHRoaXMucHJpbWU9Q31lbHNlIGcoeC5ndG4oMSksIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMSIpLHRoaXMubT14LHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBiKHgpe3AuY2FsbCh0aGlzLHgpLHRo''@;'; put 'put ''aXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52''@;'; put 'put ''bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9X2UucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgQz1u''@;'; put 'put ''ZXcgdyhudWxsKTtyZXR1cm4gQy53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLEN9LF9lLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKEMpe3ZhciBILFQ9Qztkb3t0aGlzLnNwbGl0KFQsdGhpcy50bXApLEg9KFQ9KFQ9dGhpcy5pbXVsSyhUKSkuaWFkZCh0aGlzLnRt''@;'; put 'put ''cCkpLmJpdExlbmd0aCgpfXdoaWxlKEg+dGhpcy5uKTt2YXIgaj1IPHRoaXMubj8tMTpULnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PWo/KFQud29yZHNbMF09MCxULmxlbmd0aD0xKTpqPjA/VC5pc3ViKHRoaXMucCk6dm9pZCAwIT09VC5zdHJpcD9ULnN0cmlwKCk6VC5fc3RyaXAoKSxUfSxf''@;'; put 'put ''ZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24oQyxUKXtDLml1c2hybih0aGlzLm4sMCxUKX0sX2UucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKEMpe3JldHVybiBDLmltdWwodGhpcy5rKX0sQihUZSxfZSksVGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKEMsVCl7Zm9yKHZhciBIPTQxOTQz''@;'; put 'put ''MDMsaj1NYXRoLm1pbihDLmxlbmd0aCw5KSxFPTA7RTxqO0UrKylULndvcmRzW0VdPUMud29yZHNbRV07aWYoVC5sZW5ndGg9aixDLmxlbmd0aDw9OSlyZXR1cm4gQy53b3Jkc1swXT0wLHZvaWQoQy5sZW5ndGg9MSk7dmFyIG09Qy53b3Jkc1s5XTtmb3IoVC53b3Jkc1tULmxlbmd0aCsrXT1t''@;'; put 'put ''JkgsRT0xMDtFPEMubGVuZ3RoO0UrKyl7dmFyIEE9MHxDLndvcmRzW0VdO0Mud29yZHNbRS0xMF09KEEmSCk8PDR8bT4+PjIyLG09QX1DLndvcmRzW0UtMTBdPW0+Pj49MjIsQy5sZW5ndGgtPTA9PT1tJiZDLmxlbmd0aD4xMD8xMDo5fSxUZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24oQyl7''@;'; put 'put ''Qy53b3Jkc1tDLmxlbmd0aF09MCxDLndvcmRzW0MubGVuZ3RoKzFdPTAsQy5sZW5ndGgrPTI7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXt2YXIgaj0wfEMud29yZHNbSF07Qy53b3Jkc1tIXT02NzEwODg2MyYoVCs9OTc3KmopLFQ9NjQqaisoVC82NzEwODg2NHwwKX1yZXR1cm4g''@;'; put 'put ''MD09PUMud29yZHNbQy5sZW5ndGgtMV0mJihDLmxlbmd0aC0tLDA9PT1DLndvcmRzW0MubGVuZ3RoLTFdJiZDLmxlbmd0aC0tKSxDfSxCKFNlLF9lKSxCKHplLF9lKSxCKFYsX2UpLFYucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKEMpe2Zvcih2YXIgVD0wLEg9MDtIPEMubGVuZ3RoO0grKyl7''@;'; put 'put ''dmFyIGo9MTkqKDB8Qy53b3Jkc1tIXSkrVCxFPTY3MTA4ODYzJmo7aj4+Pj0yNixDLndvcmRzW0hdPUUsVD1qfXJldHVybiAwIT09VCYmKEMud29yZHNbQy5sZW5ndGgrK109VCksQ30sdy5fcHJpbWU9ZnVuY3Rpb24oQyl7aWYobWVbQ10pcmV0dXJuIG1lW0NdO3ZhciBUO2lmKCJrMjU2Ij09''@;'; put 'put ''PUMpVD1uZXcgVGU7ZWxzZSBpZigicDIyNCI9PT1DKVQ9bmV3IFNlO2Vsc2UgaWYoInAxOTIiPT09QylUPW5ldyB6ZTtlbHNle2lmKCJwMjU1MTkiIT09Qyl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitDKTtUPW5ldyBWfXJldHVybiBtZVtDXT1ULFR9LHAucHJvdG90eXBlLl92''@;'; put 'put ''ZXJpZnkxPWZ1bmN0aW9uKEMpe2coMD09PUMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhDLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxwLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihDLFQpe2coIShDLm5lZ2F0aXZlfFQu''@;'; put 'put ''bmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcoQy5yZWQmJkMucmVkPT09VC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0scC5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1''@;'; put 'put ''Y2UoQykuX2ZvcmNlUmVkKHRoaXMpOihOKEMsQy51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpKSxDKX0scC5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKEMpe3JldHVybiBDLmlzWmVybygpP0MuY2xvbmUoKTp0aGlzLm0uc3ViKEMpLl9mb3JjZVJlZCh0aGlzKX0scC5wcm90b3R5cGUuYWRk''@;'; put 'put ''PWZ1bmN0aW9uKEMsVCl7dGhpcy5fdmVyaWZ5MihDLFQpO3ZhciBIPUMuYWRkKFQpO3JldHVybiBILmNtcCh0aGlzLm0pPj0wJiZILmlzdWIodGhpcy5tKSxILl9mb3JjZVJlZCh0aGlzKX0scC5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihDLFQpe3RoaXMuX3ZlcmlmeTIoQyxUKTt2YXIgSD1D''@;'; put 'put ''LmlhZGQoVCk7cmV0dXJuIEguY21wKHRoaXMubSk+PTAmJkguaXN1Yih0aGlzLm0pLEh9LHAucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihDLFQpe3RoaXMuX3ZlcmlmeTIoQyxUKTt2YXIgSD1DLnN1YihUKTtyZXR1cm4gSC5jbXBuKDApPDAmJkguaWFkZCh0aGlzLm0pLEguX2ZvcmNlUmVkKHRo''@;'; put 'put ''aXMpfSxwLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKEMsVCl7dGhpcy5fdmVyaWZ5MihDLFQpO3ZhciBIPUMuaXN1YihUKTtyZXR1cm4gSC5jbXBuKDApPDAmJkguaWFkZCh0aGlzLm0pLEh9LHAucHJvdG90eXBlLnNobD1mdW5jdGlvbihDLFQpe3JldHVybiB0aGlzLl92ZXJpZnkxKEMpLHRo''@;'; put 'put ''aXMuaW1vZChDLnVzaGxuKFQpKX0scC5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihDLFQpe3JldHVybiB0aGlzLl92ZXJpZnkyKEMsVCksdGhpcy5pbW9kKEMuaW11bChUKSl9LHAucHJvdG90eXBlLm11bD1mdW5jdGlvbihDLFQpe3JldHVybiB0aGlzLl92ZXJpZnkyKEMsVCksdGhpcy5pbW9k''@;'; put 'put ''KEMubXVsKFQpKX0scC5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5pbXVsKEMsQy5jbG9uZSgpKX0scC5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKEMpe3JldHVybiB0aGlzLm11bChDLEMpfSxwLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKEMpe2lmKEMuaXNaZXJvKCkp''@;'; put 'put ''cmV0dXJuIEMuY2xvbmUoKTt2YXIgVD10aGlzLm0uYW5kbG4oMyk7aWYoZyhUJTI9PTEpLDM9PT1UKXt2YXIgSD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KEMsSCl9Zm9yKHZhciBqPXRoaXMubS5zdWJuKDEpLEU9MDshai5pc1plcm8oKSYmMD09PWou''@;'; put 'put ''YW5kbG4oMSk7KUUrKyxqLml1c2hybigxKTtnKCFqLmlzWmVybygpKTt2YXIgbT1uZXcgdygxKS50b1JlZCh0aGlzKSxBPW0ucmVkTmVnKCksb2U9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLHRlPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IodGU9bmV3IHcoMip0ZSp0ZSkudG9SZWQodGhpcyk7''@;'; put 'put ''MCE9PXRoaXMucG93KHRlLG9lKS5jbXAoQSk7KXRlLnJlZElBZGQoQSk7Zm9yKHZhciBzZT10aGlzLnBvdyh0ZSxqKSx3ZT10aGlzLnBvdyhDLGouYWRkbigxKS5pdXNocm4oMSkpLFVlPXRoaXMucG93KEMsaiksSmU9RTswIT09VWUuY21wKG0pOyl7Zm9yKHZhciBhdD1VZSxNZT0wOzAhPT1h''@;'; put 'put ''dC5jbXAobSk7TWUrKylhdD1hdC5yZWRTcXIoKTtnKE1lPEplKTt2YXIgdmU9dGhpcy5wb3coc2UsbmV3IHcoMSkuaXVzaGxuKEplLU1lLTEpKTt3ZT13ZS5yZWRNdWwodmUpLHNlPXZlLnJlZFNxcigpLFVlPVVlLnJlZE11bChzZSksSmU9TWV9cmV0dXJuIHdlfSxwLnByb3RvdHlwZS5pbnZt''@;'; put 'put ''PWZ1bmN0aW9uKEMpe3ZhciBUPUMuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1ULm5lZ2F0aXZlPyhULm5lZ2F0aXZlPTAsdGhpcy5pbW9kKFQpLnJlZE5lZygpKTp0aGlzLmltb2QoVCl9LHAucHJvdG90eXBlLnBvdz1mdW5jdGlvbihDLFQpe2lmKFQuaXNaZXJvKCkpcmV0dXJuIG5ldyB3''@;'; put 'put ''KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1ULmNtcG4oMSkpcmV0dXJuIEMuY2xvbmUoKTt2YXIgaj1uZXcgQXJyYXkoMTYpO2pbMF09bmV3IHcoMSkudG9SZWQodGhpcyksalsxXT1DO2Zvcih2YXIgRT0yO0U8ai5sZW5ndGg7RSsrKWpbRV09dGhpcy5tdWwoaltFLTFdLEMpO3ZhciBtPWpbMF0s''@;'; put 'put ''QT0wLG9lPTAsdGU9VC5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXRlJiYodGU9MjYpLEU9VC5sZW5ndGgtMTtFPj0wO0UtLSl7Zm9yKHZhciBzZT1ULndvcmRzW0VdLHdlPXRlLTE7d2U+PTA7d2UtLSl7dmFyIFVlPXNlPj53ZSYxO20hPT1qWzBdJiYobT10aGlzLnNxcihtKSksMCE9PVVlfHww''@;'; put 'put ''IT09QT8oQTw8PTEsQXw9VWUsKDQ9PSsrb2V8fDA9PT1FJiYwPT09d2UpJiYobT10aGlzLm11bChtLGpbQV0pLG9lPTAsQT0wKSk6b2U9MH10ZT0yNn1yZXR1cm4gbX0scC5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKEMpe3ZhciBUPUMudW1vZCh0aGlzLm0pO3JldHVybiBUPT09Qz9U''@;'; put 'put ''LmNsb25lKCk6VH0scC5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oQyl7dmFyIFQ9Qy5jbG9uZSgpO3JldHVybiBULnJlZD1udWxsLFR9LHcubW9udD1mdW5jdGlvbihDKXtyZXR1cm4gbmV3IGIoQyl9LEIoYixwKSxiLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24oQyl7cmV0''@;'; put 'put ''dXJuIHRoaXMuaW1vZChDLnVzaGxuKHRoaXMuc2hpZnQpKX0sYi5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24oQyl7dmFyIFQ9dGhpcy5pbW9kKEMubXVsKHRoaXMucmludikpO3JldHVybiBULnJlZD1udWxsLFR9LGIucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24oQyxUKXtpZihDLmlz''@;'; put 'put ''WmVybygpfHxULmlzWmVybygpKXJldHVybiBDLndvcmRzWzBdPTAsQy5sZW5ndGg9MSxDO3ZhciBIPUMuaW11bChUKSxqPUgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLEU9SC5pc3ViKGopLml1c2hybih0aGlzLnNoaWZ0''@;'; put 'put ''KSxtPUU7cmV0dXJuIEUuY21wKHRoaXMubSk+PTA/bT1FLmlzdWIodGhpcy5tKTpFLmNtcG4oMCk8MCYmKG09RS5pYWRkKHRoaXMubSkpLG0uX2ZvcmNlUmVkKHRoaXMpfSxiLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oQyxUKXtpZihDLmlzWmVybygpfHxULmlzWmVybygpKXJldHVybiBuZXcg''@;'; put 'put ''dygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIEg9Qy5tdWwoVCksaj1ILm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxFPUguaXN1YihqKS5pdXNocm4odGhpcy5zaGlmdCksbT1FO3JldHVybiBFLmNtcCh0aGlzLm0pPj0wP209''@;'; put 'put ''RS5pc3ViKHRoaXMubSk6RS5jbXBuKDApPDAmJihtPUUuaWFkZCh0aGlzLm0pKSxtLl9mb3JjZVJlZCh0aGlzKX0sYi5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihDKXtyZXR1cm4gdGhpcy5pbW9kKEMuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSh1ZT1f''@;'; put 'put ''Lm5tZCh1ZSksdGhpcyl9LDM1Mjk0Oih1ZSxxLF8pPT57dmFyIEk7ZnVuY3Rpb24geShCKXt0aGlzLnJhbmQ9Qn1pZih1ZS5leHBvcnRzPWZ1bmN0aW9uKHcpe3JldHVybiBJfHwoST1uZXcgeShudWxsKSksSS5nZW5lcmF0ZSh3KX0sdWUuZXhwb3J0cy5SYW5kPXkseS5wcm90b3R5cGUuZ2Vu''@;'; put 'put ''ZXJhdGU9ZnVuY3Rpb24odyl7cmV0dXJuIHRoaXMuX3JhbmQodyl9LHkucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHcpe2lmKHRoaXMucmFuZC5nZXRCeXRlcylyZXR1cm4gdGhpcy5yYW5kLmdldEJ5dGVzKHcpO2Zvcih2YXIgUD1uZXcgVWludDhBcnJheSh3KSxGPTA7RjxQLmxlbmd0aDtG''@;'; put 'put ''KyspUFtGXT10aGlzLnJhbmQuZ2V0Qnl0ZSgpO3JldHVybiBQfSwib2JqZWN0Ij09dHlwZW9mIHNlbGYpc2VsZi5jcnlwdG8mJnNlbGYuY3J5cHRvLmdldFJhbmRvbVZhbHVlcz95LnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih3KXt2YXIgUD1uZXcgVWludDhBcnJheSh3KTtyZXR1cm4gc2Vs''@;'; put 'put ''Zi5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKFApLFB9OnNlbGYubXNDcnlwdG8mJnNlbGYubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzP3kucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHcpe3ZhciBQPW5ldyBVaW50OEFycmF5KHcpO3JldHVybiBzZWxmLm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVl''@;'; put 'put ''cyhQKSxQfToib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmKHkucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQgeWV0Iil9KTtlbHNlIHRyeXt2YXIgZz1fKDkxNDI2KTtpZigiZnVuY3Rpb24iIT10eXBlb2YgZy5yYW5kb21CeXRlcyl0''@;'; put 'put ''aHJvdyBuZXcgRXJyb3IoIk5vdCBzdXBwb3J0ZWQiKTt5LnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih3KXtyZXR1cm4gZy5yYW5kb21CeXRlcyh3KX19Y2F0Y2h7fX0sMTIzNzU6KHVlLHEsXyk9Pnt2YXIgST1fKDI3MDU0KS5CdWZmZXI7ZnVuY3Rpb24geShPKXtJLmlzQnVmZmVyKE8pfHwo''@;'; put 'put ''Tz1JLmZyb20oTykpO2Zvcih2YXIgej1PLmxlbmd0aC80fDAsTj1uZXcgQXJyYXkoeiksTD0wO0w8ejtMKyspTltMXT1PLnJlYWRVSW50MzJCRSg0KkwpO3JldHVybiBOfWZ1bmN0aW9uIGcoTyl7Zm9yKDswPE8ubGVuZ3RoO08rKylPWzBdPTB9ZnVuY3Rpb24gQihPLHosTixMLEspe2Zvcih2''@;'; put 'put ''YXIgbGUsbWUsX2UsVGUsVT1OWzBdLFc9TlsxXSxZPU5bMl0sWD1OWzNdLGVlPU9bMF1eelswXSxKPU9bMV1eelsxXSxyZT1PWzJdXnpbMl0saWU9T1szXV56WzNdLFNlPTQsemU9MTt6ZTxLO3plKyspbGU9VVtlZT4+PjI0XV5XW0o+Pj4xNiYyNTVdXllbcmU+Pj44JjI1NV1eWFsyNTUmaWVd''@;'; put 'put ''XnpbU2UrK10sbWU9VVtKPj4+MjRdXldbcmU+Pj4xNiYyNTVdXllbaWU+Pj44JjI1NV1eWFsyNTUmZWVdXnpbU2UrK10sX2U9VVtyZT4+PjI0XV5XW2llPj4+MTYmMjU1XV5ZW2VlPj4+OCYyNTVdXlhbMjU1JkpdXnpbU2UrK10sVGU9VVtpZT4+PjI0XV5XW2VlPj4+MTYmMjU1XV5ZW0o+Pj44''@;'; put 'put ''JjI1NV1eWFsyNTUmcmVdXnpbU2UrK10sZWU9bGUsSj1tZSxyZT1fZSxpZT1UZTtyZXR1cm4gbGU9KExbZWU+Pj4yNF08PDI0fExbSj4+PjE2JjI1NV08PDE2fExbcmU+Pj44JjI1NV08PDh8TFsyNTUmaWVdKV56W1NlKytdLG1lPShMW0o+Pj4yNF08PDI0fExbcmU+Pj4xNiYyNTVdPDwxNnxM''@;'; put 'put ''W2llPj4+OCYyNTVdPDw4fExbMjU1JmVlXSleeltTZSsrXSxfZT0oTFtyZT4+PjI0XTw8MjR8TFtpZT4+PjE2JjI1NV08PDE2fExbZWU+Pj44JjI1NV08PDh8TFsyNTUmSl0pXnpbU2UrK10sVGU9KExbaWU+Pj4yNF08PDI0fExbZWU+Pj4xNiYyNTVdPDwxNnxMW0o+Pj44JjI1NV08PDh8TFsy''@;'; put 'put ''NTUmcmVdKV56W1NlKytdLFtsZT4+Pj0wLG1lPj4+PTAsX2U+Pj49MCxUZT4+Pj0wXX12YXIgdz1bMCwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NF0sUD1mdW5jdGlvbigpe2Zvcih2YXIgTz1uZXcgQXJyYXkoMjU2KSx6PTA7ejwyNTY7eisrKU9bel09ejwxMjg/ejw8MTp6PDwxXjI4Mztm''@;'; put 'put ''b3IodmFyIE49W10sTD1bXSxLPVtbXSxbXSxbXSxbXV0sVT1bW10sW10sW10sW11dLFc9MCxZPTAsWD0wO1g8MjU2OysrWCl7dmFyIGVlPVleWTw8MV5ZPDwyXlk8PDNeWTw8NDtOW1ddPWVlPWVlPj4+OF4yNTUmZWVeOTksTFtlZV09Vzt2YXIgSj1PW1ddLHJlPU9bSl0saWU9T1tyZV0sbGU9''@;'; put 'put ''MjU3Kk9bZWVdXjE2ODQzMDA4KmVlO0tbMF1bV109bGU8PDI0fGxlPj4+OCxLWzFdW1ddPWxlPDwxNnxsZT4+PjE2LEtbMl1bV109bGU8PDh8bGU+Pj4yNCxLWzNdW1ddPWxlLFVbMF1bZWVdPShsZT0xNjg0MzAwOSppZV42NTUzNypyZV4yNTcqSl4xNjg0MzAwOCpXKTw8MjR8bGU+Pj44LFVb''@;'; put 'put ''MV1bZWVdPWxlPDwxNnxsZT4+PjE2LFVbMl1bZWVdPWxlPDw4fGxlPj4+MjQsVVszXVtlZV09bGUsMD09PVc/Vz1ZPTE6KFc9Sl5PW09bT1tpZV5KXV1dLFlePU9bT1tZXV0pfXJldHVybntTQk9YOk4sSU5WX1NCT1g6TCxTVUJfTUlYOkssSU5WX1NVQl9NSVg6VX19KCk7ZnVuY3Rpb24gRihP''@;'; put 'put ''KXt0aGlzLl9rZXk9eShPKSx0aGlzLl9yZXNldCgpfUYuYmxvY2tTaXplPTE2LEYua2V5U2l6ZT0zMixGLnByb3RvdHlwZS5ibG9ja1NpemU9Ri5ibG9ja1NpemUsRi5wcm90b3R5cGUua2V5U2l6ZT1GLmtleVNpemUsRi5wcm90b3R5cGUuX3Jlc2V0PWZ1bmN0aW9uKCl7Zm9yKHZhciBPPXRo''@;'; put 'put ''aXMuX2tleSx6PU8ubGVuZ3RoLE49eis2LEw9NCooTisxKSxLPVtdLFU9MDtVPHo7VSsrKUtbVV09T1tVXTtmb3IoVT16O1U8TDtVKyspe3ZhciBXPUtbVS0xXTtVJXo9PTA/KFc9UC5TQk9YWyhXPVc8PDh8Vz4+PjI0KT4+PjI0XTw8MjR8UC5TQk9YW1c+Pj4xNiYyNTVdPDwxNnxQLlNCT1hb''@;'; put 'put ''Vz4+PjgmMjU1XTw8OHxQLlNCT1hbMjU1JlddLFdePXdbVS96fDBdPDwyNCk6ej42JiZVJXo9PTQmJihXPVAuU0JPWFtXPj4+MjRdPDwyNHxQLlNCT1hbVz4+PjE2JjI1NV08PDE2fFAuU0JPWFtXPj4+OCYyNTVdPDw4fFAuU0JPWFsyNTUmV10pLEtbVV09S1tVLXpdXld9Zm9yKHZhciBZPVtd''@;'; put 'put ''LFg9MDtYPEw7WCsrKXt2YXIgZWU9TC1YLEo9S1tlZS0oWCU0PzA6NCldO1lbWF09WDw0fHxlZTw9ND9KOlAuSU5WX1NVQl9NSVhbMF1bUC5TQk9YW0o+Pj4yNF1dXlAuSU5WX1NVQl9NSVhbMV1bUC5TQk9YW0o+Pj4xNiYyNTVdXV5QLklOVl9TVUJfTUlYWzJdW1AuU0JPWFtKPj4+OCYyNTVd''@;'; put 'put ''XV5QLklOVl9TVUJfTUlYWzNdW1AuU0JPWFsyNTUmSl1dfXRoaXMuX25Sb3VuZHM9Tix0aGlzLl9rZXlTY2hlZHVsZT1LLHRoaXMuX2ludktleVNjaGVkdWxlPVl9LEYucHJvdG90eXBlLmVuY3J5cHRCbG9ja1Jhdz1mdW5jdGlvbihPKXtyZXR1cm4gQihPPXkoTyksdGhpcy5fa2V5U2NoZWR1''@;'; put 'put ''bGUsUC5TVUJfTUlYLFAuU0JPWCx0aGlzLl9uUm91bmRzKX0sRi5wcm90b3R5cGUuZW5jcnlwdEJsb2NrPWZ1bmN0aW9uKE8pe3ZhciB6PXRoaXMuZW5jcnlwdEJsb2NrUmF3KE8pLE49SS5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIE4ud3JpdGVVSW50MzJCRSh6WzBdLDApLE4ud3JpdGVVSW50''@;'; put 'put ''MzJCRSh6WzFdLDQpLE4ud3JpdGVVSW50MzJCRSh6WzJdLDgpLE4ud3JpdGVVSW50MzJCRSh6WzNdLDEyKSxOfSxGLnByb3RvdHlwZS5kZWNyeXB0QmxvY2s9ZnVuY3Rpb24oTyl7dmFyIHo9KE89eShPKSlbMV07T1sxXT1PWzNdLE9bM109ejt2YXIgTj1CKE8sdGhpcy5faW52S2V5U2NoZWR1''@;'; put 'put ''bGUsUC5JTlZfU1VCX01JWCxQLklOVl9TQk9YLHRoaXMuX25Sb3VuZHMpLEw9SS5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIEwud3JpdGVVSW50MzJCRShOWzBdLDApLEwud3JpdGVVSW50MzJCRShOWzNdLDQpLEwud3JpdGVVSW50MzJCRShOWzJdLDgpLEwud3JpdGVVSW50MzJCRShOWzFdLDEy''@;'; put 'put ''KSxMfSxGLnByb3RvdHlwZS5zY3J1Yj1mdW5jdGlvbigpe2codGhpcy5fa2V5U2NoZWR1bGUpLGcodGhpcy5faW52S2V5U2NoZWR1bGUpLGcodGhpcy5fa2V5KX0sdWUuZXhwb3J0cy5BRVM9Rn0sMTkzMDc6KHVlLHEsXyk9Pnt2YXIgST1fKDEyMzc1KSx5PV8oMjcwNTQpLkJ1ZmZlcixnPV8o''@;'; put 'put ''MzI0NyksQj1fKDcxOTkzKSx3PV8oODU5MTcpLFA9XygxMzU0NiksRj1fKDk1NzI1KTtmdW5jdGlvbiBOKEwsSyxVLFcpe2cuY2FsbCh0aGlzKTt2YXIgWT15LmFsbG9jKDQsMCk7dGhpcy5fY2lwaGVyPW5ldyBJLkFFUyhLKTt2YXIgWD10aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKFkpO3Ro''@;'; put 'put ''aXMuX2doYXNoPW5ldyB3KFgpLFU9ZnVuY3Rpb24geihMLEssVSl7aWYoMTI9PT1LLmxlbmd0aClyZXR1cm4gTC5fZmluSUQ9eS5jb25jYXQoW0sseS5mcm9tKFswLDAsMCwxXSldKSx5LmNvbmNhdChbSyx5LmZyb20oWzAsMCwwLDJdKV0pO3ZhciBXPW5ldyB3KFUpLFk9Sy5sZW5ndGgsWD1Z''@;'; put 'put ''JTE2O1cudXBkYXRlKEspLFgmJlcudXBkYXRlKHkuYWxsb2MoWD0xNi1YLDApKSxXLnVwZGF0ZSh5LmFsbG9jKDgsMCkpO3ZhciBlZT04KlksSj15LmFsbG9jKDgpO0oud3JpdGVVSW50QkUoZWUsMCw4KSxXLnVwZGF0ZShKKSxMLl9maW5JRD1XLnN0YXRlO3ZhciByZT15LmZyb20oTC5fZmlu''@;'; put 'put ''SUQpO3JldHVybiBGKHJlKSxyZX0odGhpcyxVLFgpLHRoaXMuX3ByZXY9eS5mcm9tKFUpLHRoaXMuX2NhY2hlPXkuYWxsb2NVbnNhZmUoMCksdGhpcy5fc2VjQ2FjaGU9eS5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9kZWNyeXB0PVcsdGhpcy5fYWxlbj0wLHRoaXMuX2xlbj0wLHRoaXMuX21vZGU9''@;'; put 'put ''TCx0aGlzLl9hdXRoVGFnPW51bGwsdGhpcy5fY2FsbGVkPSExfUIoTixnKSxOLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEwpe2lmKCF0aGlzLl9jYWxsZWQmJnRoaXMuX2FsZW4pe3ZhciBLPTE2LXRoaXMuX2FsZW4lMTY7SzwxNiYmKEs9eS5hbGxvYyhLLDApLHRoaXMuX2doYXNoLnVw''@;'; put 'put ''ZGF0ZShLKSl9dGhpcy5fY2FsbGVkPSEwO3ZhciBVPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLEwpO3JldHVybiB0aGlzLl9naGFzaC51cGRhdGUodGhpcy5fZGVjcnlwdD9MOlUpLHRoaXMuX2xlbis9TC5sZW5ndGgsVX0sTi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7aWYodGhpcy5f''@;'; put 'put ''ZGVjcnlwdCYmIXRoaXMuX2F1dGhUYWcpdGhyb3cgbmV3IEVycm9yKCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGEiKTt2YXIgTD1QKHRoaXMuX2doYXNoLmZpbmFsKDgqdGhpcy5fYWxlbiw4KnRoaXMuX2xlbiksdGhpcy5fY2lwaGVyLmVuY3J5cHRC''@;'; put 'put ''bG9jayh0aGlzLl9maW5JRCkpO2lmKHRoaXMuX2RlY3J5cHQmJmZ1bmN0aW9uIE8oTCxLKXt2YXIgVT0wO0wubGVuZ3RoIT09Sy5sZW5ndGgmJlUrKztmb3IodmFyIFc9TWF0aC5taW4oTC5sZW5ndGgsSy5sZW5ndGgpLFk9MDtZPFc7KytZKVUrPUxbWV1eS1tZXTtyZXR1cm4gVX0oTCx0aGlz''@;'; put 'put ''Ll9hdXRoVGFnKSl0aHJvdyBuZXcgRXJyb3IoIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YSIpO3RoaXMuX2F1dGhUYWc9TCx0aGlzLl9jaXBoZXIuc2NydWIoKX0sTi5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe2lmKHRoaXMuX2RlY3J5''@;'; put 'put ''cHR8fCF5LmlzQnVmZmVyKHRoaXMuX2F1dGhUYWcpKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKTtyZXR1cm4gdGhpcy5fYXV0aFRhZ30sTi5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbihLKXtpZighdGhpcy5f''@;'; put 'put ''ZGVjcnlwdCl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7dGhpcy5fYXV0aFRhZz1LfSxOLnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oSyl7aWYodGhpcy5fY2FsbGVkKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGlu''@;'; put 'put ''ZyB0byBzZXQgQUFEIGluIHVuc3VwcG9ydGVkIHN0YXRlIik7dGhpcy5fZ2hhc2gudXBkYXRlKEspLHRoaXMuX2FsZW4rPUsubGVuZ3RofSx1ZS5leHBvcnRzPU59LDQzMzg4Oih1ZSxxLF8pPT57dmFyIEk9XygzNTApLHk9Xyg2MDEwMiksZz1fKDMyMTkpO3EuY3JlYXRlQ2lwaGVyPXEuQ2lw''@;'; put 'put ''aGVyPUkuY3JlYXRlQ2lwaGVyLHEuY3JlYXRlQ2lwaGVyaXY9cS5DaXBoZXJpdj1JLmNyZWF0ZUNpcGhlcml2LHEuY3JlYXRlRGVjaXBoZXI9cS5EZWNpcGhlcj15LmNyZWF0ZURlY2lwaGVyLHEuY3JlYXRlRGVjaXBoZXJpdj1xLkRlY2lwaGVyaXY9eS5jcmVhdGVEZWNpcGhlcml2LHEubGlz''@;'; put 'put ''dENpcGhlcnM9cS5nZXRDaXBoZXJzPWZ1bmN0aW9uIEIoKXtyZXR1cm4gT2JqZWN0LmtleXMoZyl9fSw2MDEwMjoodWUscSxfKT0+e3ZhciBJPV8oMTkzMDcpLHk9XygyNzA1NCkuQnVmZmVyLGc9Xyg2MDUwMyksQj1fKDkxODIxKSx3PV8oMzI0NyksUD1fKDEyMzc1KSxGPV8oMTgyMTEpO2Z1''@;'; put 'put ''bmN0aW9uIHooVyxZLFgpe3cuY2FsbCh0aGlzKSx0aGlzLl9jYWNoZT1uZXcgTix0aGlzLl9sYXN0PXZvaWQgMCx0aGlzLl9jaXBoZXI9bmV3IFAuQUVTKFkpLHRoaXMuX3ByZXY9eS5mcm9tKFgpLHRoaXMuX21vZGU9Vyx0aGlzLl9hdXRvcGFkZGluZz0hMH1mdW5jdGlvbiBOKCl7dGhpcy5j''@;'; put 'put ''YWNoZT15LmFsbG9jVW5zYWZlKDApfWZ1bmN0aW9uIEsoVyxZLFgpe3ZhciBlZT1nW1cudG9Mb3dlckNhc2UoKV07aWYoIWVlKXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgWCYmKFg9eS5mcm9tKFgpKSwiR0NNIiE9PWVlLm1v''@;'; put 'put ''ZGUmJlgubGVuZ3RoIT09ZWUuaXYpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBpdiBsZW5ndGggIitYLmxlbmd0aCk7aWYoInN0cmluZyI9PXR5cGVvZiBZJiYoWT15LmZyb20oWSkpLFkubGVuZ3RoIT09ZWUua2V5LzgpdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBrZXkgbGVu''@;'; put 'put ''Z3RoICIrWS5sZW5ndGgpO3JldHVybiJzdHJlYW0iPT09ZWUudHlwZT9uZXcgQihlZS5tb2R1bGUsWSxYLCEwKToiYXV0aCI9PT1lZS50eXBlP25ldyBJKGVlLm1vZHVsZSxZLFgsITApOm5ldyB6KGVlLm1vZHVsZSxZLFgpfV8oNzE5OTMpKHosdyksei5wcm90b3R5cGUuX3VwZGF0ZT1mdW5j''@;'; put 'put ''dGlvbihXKXt0aGlzLl9jYWNoZS5hZGQoVyk7Zm9yKHZhciBZLFgsZWU9W107WT10aGlzLl9jYWNoZS5nZXQodGhpcy5fYXV0b3BhZGRpbmcpOylYPXRoaXMuX21vZGUuZGVjcnlwdCh0aGlzLFkpLGVlLnB1c2goWCk7cmV0dXJuIHkuY29uY2F0KGVlKX0sei5wcm90b3R5cGUuX2ZpbmFsPWZ1''@;'; put 'put ''bmN0aW9uKCl7dmFyIFc9dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZylyZXR1cm4gZnVuY3Rpb24gTChXKXt2YXIgWT1XWzE1XTtpZihZPDF8fFk+MTYpdGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gZGVjcnlwdCBkYXRhIik7Zm9yKHZhciBYPS0xOysrWDxZOylp''@;'; put 'put ''ZihXW1grKDE2LVkpXSE9PVkpdGhyb3cgbmV3IEVycm9yKCJ1bmFibGUgdG8gZGVjcnlwdCBkYXRhIik7aWYoMTYhPT1ZKXJldHVybiBXLnNsaWNlKDAsMTYtWSl9KHRoaXMuX21vZGUuZGVjcnlwdCh0aGlzLFcpKTtpZihXKXRocm93IG5ldyBFcnJvcigiZGF0YSBub3QgbXVsdGlwbGUgb2Yg''@;'; put 'put ''YmxvY2sgbGVuZ3RoIil9LHoucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKFcpe3JldHVybiB0aGlzLl9hdXRvcGFkZGluZz0hIVcsdGhpc30sTi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKFcpe3RoaXMuY2FjaGU9eS5jb25jYXQoW3RoaXMuY2FjaGUsV10pfSxOLnByb3RvdHlw''@;'; put 'put ''ZS5nZXQ9ZnVuY3Rpb24oVyl7dmFyIFk7aWYoVyl7aWYodGhpcy5jYWNoZS5sZW5ndGg+MTYpcmV0dXJuIFk9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLFl9ZWxzZSBpZih0aGlzLmNhY2hlLmxlbmd0aD49MTYpcmV0dXJuIFk9dGhpcy5j''@;'; put 'put ''YWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLFk7cmV0dXJuIG51bGx9LE4ucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGgpcmV0dXJuIHRoaXMuY2FjaGV9LHEuY3JlYXRlRGVjaXBoZXI9ZnVuY3Rpb24gVShXLFkp''@;'; put 'put ''e3ZhciBYPWdbVy50b0xvd2VyQ2FzZSgpXTtpZighWCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTt2YXIgZWU9RihZLCExLFgua2V5LFguaXYpO3JldHVybiBLKFcsZWUua2V5LGVlLml2KX0scS5jcmVhdGVEZWNpcGhlcml2PUt9LDM1MDoodWUscSxfKT0+e3Zh''@;'; put 'put ''ciBJPV8oNjA1MDMpLHk9XygxOTMwNyksZz1fKDI3MDU0KS5CdWZmZXIsQj1fKDkxODIxKSx3PV8oMzI0NyksUD1fKDEyMzc1KSxGPV8oMTgyMTEpO2Z1bmN0aW9uIHooVyxZLFgpe3cuY2FsbCh0aGlzKSx0aGlzLl9jYWNoZT1uZXcgTCx0aGlzLl9jaXBoZXI9bmV3IFAuQUVTKFkpLHRoaXMu''@;'; put 'put ''X3ByZXY9Zy5mcm9tKFgpLHRoaXMuX21vZGU9Vyx0aGlzLl9hdXRvcGFkZGluZz0hMH1fKDcxOTkzKSh6LHcpLHoucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oVyl7dGhpcy5fY2FjaGUuYWRkKFcpO2Zvcih2YXIgWSxYLGVlPVtdO1k9dGhpcy5fY2FjaGUuZ2V0KCk7KVg9dGhpcy5fbW9k''@;'; put 'put ''ZS5lbmNyeXB0KHRoaXMsWSksZWUucHVzaChYKTtyZXR1cm4gZy5jb25jYXQoZWUpfTt2YXIgTj1nLmFsbG9jKDE2LDE2KTtmdW5jdGlvbiBMKCl7dGhpcy5jYWNoZT1nLmFsbG9jVW5zYWZlKDApfWZ1bmN0aW9uIEsoVyxZLFgpe3ZhciBlZT1JW1cudG9Mb3dlckNhc2UoKV07aWYoIWVlKXRo''@;'; put 'put ''cm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpO2lmKCJzdHJpbmciPT10eXBlb2YgWSYmKFk9Zy5mcm9tKFkpKSxZLmxlbmd0aCE9PWVlLmtleS84KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQga2V5IGxlbmd0aCAiK1kubGVuZ3RoKTtpZigic3RyaW5nIj09dHlw''@;'; put 'put ''ZW9mIFgmJihYPWcuZnJvbShYKSksIkdDTSIhPT1lZS5tb2RlJiZYLmxlbmd0aCE9PWVlLml2KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgaXYgbGVuZ3RoICIrWC5sZW5ndGgpO3JldHVybiJzdHJlYW0iPT09ZWUudHlwZT9uZXcgQihlZS5tb2R1bGUsWSxYKToiYXV0aCI9PT1lZS50''@;'; put 'put ''eXBlP25ldyB5KGVlLm1vZHVsZSxZLFgpOm5ldyB6KGVlLm1vZHVsZSxZLFgpfXoucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBXPXRoaXMuX2NhY2hlLmZsdXNoKCk7aWYodGhpcy5fYXV0b3BhZGRpbmcpcmV0dXJuIFc9dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsVyksdGhpcy5f''@;'; put 'put ''Y2lwaGVyLnNjcnViKCksVztpZighVy5lcXVhbHMoTikpdGhyb3cgdGhpcy5fY2lwaGVyLnNjcnViKCksbmV3IEVycm9yKCJkYXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGgiKX0sei5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oVyl7cmV0dXJuIHRoaXMuX2F1dG9w''@;'; put 'put ''YWRkaW5nPSEhVyx0aGlzfSxMLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oVyl7dGhpcy5jYWNoZT1nLmNvbmNhdChbdGhpcy5jYWNoZSxXXSl9LEwucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE1KXt2YXIgVz10aGlzLmNhY2hlLnNsaWNlKDAsMTYpO3Jl''@;'; put 'put ''dHVybiB0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLFd9cmV0dXJuIG51bGx9LEwucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7Zm9yKHZhciBXPTE2LXRoaXMuY2FjaGUubGVuZ3RoLFk9Zy5hbGxvY1Vuc2FmZShXKSxYPS0xOysrWDxXOylZLndyaXRlVUludDgoVyxYKTtyZXR1''@;'; put 'put ''cm4gZy5jb25jYXQoW3RoaXMuY2FjaGUsWV0pfSxxLmNyZWF0ZUNpcGhlcml2PUsscS5jcmVhdGVDaXBoZXI9ZnVuY3Rpb24gVShXLFkpe3ZhciBYPUlbVy50b0xvd2VyQ2FzZSgpXTtpZighWCl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTt2YXIgZWU9RihZLCEx''@;'; put 'put ''LFgua2V5LFguaXYpO3JldHVybiBLKFcsZWUua2V5LGVlLml2KX19LDg1OTE3Oih1ZSxxLF8pPT57dmFyIEk9XygyNzA1NCkuQnVmZmVyLHk9SS5hbGxvYygxNiwwKTtmdW5jdGlvbiBCKFApe3ZhciBGPUkuYWxsb2NVbnNhZmUoMTYpO3JldHVybiBGLndyaXRlVUludDMyQkUoUFswXT4+PjAs''@;'; put 'put ''MCksRi53cml0ZVVJbnQzMkJFKFBbMV0+Pj4wLDQpLEYud3JpdGVVSW50MzJCRShQWzJdPj4+MCw4KSxGLndyaXRlVUludDMyQkUoUFszXT4+PjAsMTIpLEZ9ZnVuY3Rpb24gdyhQKXt0aGlzLmg9UCx0aGlzLnN0YXRlPUkuYWxsb2MoMTYsMCksdGhpcy5jYWNoZT1JLmFsbG9jVW5zYWZlKDAp''@;'; put 'put ''fXcucHJvdG90eXBlLmdoYXNoPWZ1bmN0aW9uKFApe2Zvcih2YXIgRj0tMTsrK0Y8UC5sZW5ndGg7KXRoaXMuc3RhdGVbRl1ePVBbRl07dGhpcy5fbXVsdGlwbHkoKX0sdy5wcm90b3R5cGUuX211bHRpcGx5PWZ1bmN0aW9uKCl7Zm9yKHZhciBPLE4sUD1mdW5jdGlvbiBnKFApe3JldHVybltQ''@;'; put 'put ''LnJlYWRVSW50MzJCRSgwKSxQLnJlYWRVSW50MzJCRSg0KSxQLnJlYWRVSW50MzJCRSg4KSxQLnJlYWRVSW50MzJCRSgxMildfSh0aGlzLmgpLEY9WzAsMCwwLDBdLEw9LTE7KytMPDEyODspe2ZvcighISh0aGlzLnN0YXRlW35+KEwvOCldJjE8PDctTCU4KSYmKEZbMF1ePVBbMF0sRlsxXV49''@;'; put 'put ''UFsxXSxGWzJdXj1QWzJdLEZbM11ePVBbM10pLE49ISEoMSZQWzNdKSxPPTM7Tz4wO08tLSlQW09dPVBbT10+Pj4xfCgxJlBbTy0xXSk8PDMxO1BbMF09UFswXT4+PjEsTiYmKFBbMF09UFswXV4yMjU8PDI0KX10aGlzLnN0YXRlPUIoRil9LHcucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihQ''@;'; put 'put ''KXt0aGlzLmNhY2hlPUkuY29uY2F0KFt0aGlzLmNhY2hlLFBdKTtmb3IodmFyIEY7dGhpcy5jYWNoZS5sZW5ndGg+PTE2OylGPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSx0aGlzLmdoYXNoKEYpfSx3LnByb3RvdHlwZS5maW5hbD1mdW5j''@;'; put 'put ''dGlvbihQLEYpe3JldHVybiB0aGlzLmNhY2hlLmxlbmd0aCYmdGhpcy5naGFzaChJLmNvbmNhdChbdGhpcy5jYWNoZSx5XSwxNikpLHRoaXMuZ2hhc2goQihbMCxQLDAsRl0pKSx0aGlzLnN0YXRlfSx1ZS5leHBvcnRzPXd9LDk1NzI1OnVlPT57dWUuZXhwb3J0cz1mdW5jdGlvbiBxKF8pe2Zv''@;'; put 'put ''cih2YXIgeSxJPV8ubGVuZ3RoO0ktLTspe2lmKDI1NSE9PSh5PV8ucmVhZFVJbnQ4KEkpKSl7eSsrLF8ud3JpdGVVSW50OCh5LEkpO2JyZWFrfV8ud3JpdGVVSW50OCgwLEkpfX19LDM0MTMzOih1ZSxxLF8pPT57dmFyIEk9XygxMzU0Nik7cS5lbmNyeXB0PWZ1bmN0aW9uKHksZyl7dmFyIEI9''@;'; put 'put ''SShnLHkuX3ByZXYpO3JldHVybiB5Ll9wcmV2PXkuX2NpcGhlci5lbmNyeXB0QmxvY2soQikseS5fcHJldn0scS5kZWNyeXB0PWZ1bmN0aW9uKHksZyl7dmFyIEI9eS5fcHJldjt5Ll9wcmV2PWc7dmFyIHc9eS5fY2lwaGVyLmRlY3J5cHRCbG9jayhnKTtyZXR1cm4gSSh3LEIpfX0sMTcwOTA6''@;'; put 'put ''KHVlLHEsXyk9Pnt2YXIgST1fKDI3MDU0KS5CdWZmZXIseT1fKDEzNTQ2KTtmdW5jdGlvbiBnKEIsdyxQKXt2YXIgRj13Lmxlbmd0aCxPPXkodyxCLl9jYWNoZSk7cmV0dXJuIEIuX2NhY2hlPUIuX2NhY2hlLnNsaWNlKEYpLEIuX3ByZXY9SS5jb25jYXQoW0IuX3ByZXYsUD93Ok9dKSxPfXEu''@;'; put 'put ''ZW5jcnlwdD1mdW5jdGlvbihCLHcsUCl7Zm9yKHZhciBPLEY9SS5hbGxvY1Vuc2FmZSgwKTt3Lmxlbmd0aDspe2lmKDA9PT1CLl9jYWNoZS5sZW5ndGgmJihCLl9jYWNoZT1CLl9jaXBoZXIuZW5jcnlwdEJsb2NrKEIuX3ByZXYpLEIuX3ByZXY9SS5hbGxvY1Vuc2FmZSgwKSksIShCLl9jYWNo''@;'; put 'put ''ZS5sZW5ndGg8PXcubGVuZ3RoKSl7Rj1JLmNvbmNhdChbRixnKEIsdyxQKV0pO2JyZWFrfUY9SS5jb25jYXQoW0YsZyhCLHcuc2xpY2UoMCxPPUIuX2NhY2hlLmxlbmd0aCksUCldKSx3PXcuc2xpY2UoTyl9cmV0dXJuIEZ9fSw3MTAzOToodWUscSxfKT0+e3ZhciBJPV8oMjcwNTQpLkJ1ZmZl''@;'; put 'put ''cjtmdW5jdGlvbiB5KEIsdyxQKXtmb3IodmFyIEwsSyxPPS0xLE49MDsrK088ODspTis9KDEyOCYoSz1CLl9jaXBoZXIuZW5jcnlwdEJsb2NrKEIuX3ByZXYpWzBdXihMPXcmMTw8Ny1PPzEyODowKSkpPj5PJTgsQi5fcHJldj1nKEIuX3ByZXYsUD9MOkspO3JldHVybiBOfWZ1bmN0aW9uIGco''@;'; put 'put ''Qix3KXt2YXIgUD1CLmxlbmd0aCxGPS0xLE89SS5hbGxvY1Vuc2FmZShCLmxlbmd0aCk7Zm9yKEI9SS5jb25jYXQoW0IsSS5mcm9tKFt3XSldKTsrK0Y8UDspT1tGXT1CW0ZdPDwxfEJbRisxXT4+NztyZXR1cm4gT31xLmVuY3J5cHQ9ZnVuY3Rpb24oQix3LFApe2Zvcih2YXIgRj13Lmxlbmd0''@;'; put 'put ''aCxPPUkuYWxsb2NVbnNhZmUoRiksej0tMTsrK3o8RjspT1t6XT15KEIsd1t6XSxQKTtyZXR1cm4gT319LDcyNTc2Oih1ZSxxLF8pPT57dmFyIEk9XygyNzA1NCkuQnVmZmVyO2Z1bmN0aW9uIHkoZyxCLHcpe3ZhciBGPWcuX2NpcGhlci5lbmNyeXB0QmxvY2soZy5fcHJldilbMF1eQjtyZXR1''@;'; put 'put ''cm4gZy5fcHJldj1JLmNvbmNhdChbZy5fcHJldi5zbGljZSgxKSxJLmZyb20oW3c/QjpGXSldKSxGfXEuZW5jcnlwdD1mdW5jdGlvbihnLEIsdyl7Zm9yKHZhciBQPUIubGVuZ3RoLEY9SS5hbGxvY1Vuc2FmZShQKSxPPS0xOysrTzxQOylGW09dPXkoZyxCW09dLHcpO3JldHVybiBGfX0sNzAz''@;'; put 'put ''MzY6KHVlLHEsXyk9Pnt2YXIgST1fKDEzNTQ2KSx5PV8oMjcwNTQpLkJ1ZmZlcixnPV8oOTU3MjUpO2Z1bmN0aW9uIEIoUCl7dmFyIEY9UC5fY2lwaGVyLmVuY3J5cHRCbG9ja1JhdyhQLl9wcmV2KTtyZXR1cm4gZyhQLl9wcmV2KSxGfXEuZW5jcnlwdD1mdW5jdGlvbihQLEYpe3ZhciBPPU1h''@;'; put 'put ''dGguY2VpbChGLmxlbmd0aC8xNiksej1QLl9jYWNoZS5sZW5ndGg7UC5fY2FjaGU9eS5jb25jYXQoW1AuX2NhY2hlLHkuYWxsb2NVbnNhZmUoMTYqTyldKTtmb3IodmFyIE49MDtOPE87TisrKXt2YXIgTD1CKFApLEs9eisxNipOO1AuX2NhY2hlLndyaXRlVUludDMyQkUoTFswXSxLKzApLFAu''@;'; put 'put ''X2NhY2hlLndyaXRlVUludDMyQkUoTFsxXSxLKzQpLFAuX2NhY2hlLndyaXRlVUludDMyQkUoTFsyXSxLKzgpLFAuX2NhY2hlLndyaXRlVUludDMyQkUoTFszXSxLKzEyKX12YXIgVT1QLl9jYWNoZS5zbGljZSgwLEYubGVuZ3RoKTtyZXR1cm4gUC5fY2FjaGU9UC5fY2FjaGUuc2xpY2UoRi5s''@;'; put 'put ''ZW5ndGgpLEkoRixVKX19LDM3NTEzOih1ZSxxKT0+e3EuZW5jcnlwdD1mdW5jdGlvbihfLEkpe3JldHVybiBfLl9jaXBoZXIuZW5jcnlwdEJsb2NrKEkpfSxxLmRlY3J5cHQ9ZnVuY3Rpb24oXyxJKXtyZXR1cm4gXy5fY2lwaGVyLmRlY3J5cHRCbG9jayhJKX19LDYwNTAzOih1ZSxxLF8pPT57''@;'; put 'put ''dmFyIEk9e0VDQjpfKDM3NTEzKSxDQkM6XygzNDEzMyksQ0ZCOl8oMTcwOTApLENGQjg6Xyg3MjU3NiksQ0ZCMTpfKDcxMDM5KSxPRkI6Xyg0Njg1NCksQ1RSOl8oNzAzMzYpLEdDTTpfKDcwMzM2KX0seT1fKDMyMTkpO2Zvcih2YXIgZyBpbiB5KXlbZ10ubW9kdWxlPUlbeVtnXS5tb2RlXTt1''@;'; put 'put ''ZS5leHBvcnRzPXl9LDQ2ODU0Oih1ZSxxLF8pPT57dmFyIEk9XygxMzU0Nik7ZnVuY3Rpb24geShnKXtyZXR1cm4gZy5fcHJldj1nLl9jaXBoZXIuZW5jcnlwdEJsb2NrKGcuX3ByZXYpLGcuX3ByZXZ9cS5lbmNyeXB0PWZ1bmN0aW9uKGcsQil7Zm9yKDtnLl9jYWNoZS5sZW5ndGg8Qi5sZW5n''@;'; put 'put ''dGg7KWcuX2NhY2hlPUJ1ZmZlci5jb25jYXQoW2cuX2NhY2hlLHkoZyldKTt2YXIgdz1nLl9jYWNoZS5zbGljZSgwLEIubGVuZ3RoKTtyZXR1cm4gZy5fY2FjaGU9Zy5fY2FjaGUuc2xpY2UoQi5sZW5ndGgpLEkoQix3KX19LDkxODIxOih1ZSxxLF8pPT57dmFyIEk9XygxMjM3NSkseT1fKDI3''@;'; put 'put ''MDU0KS5CdWZmZXIsZz1fKDMyNDcpO2Z1bmN0aW9uIHcoUCxGLE8seil7Zy5jYWxsKHRoaXMpLHRoaXMuX2NpcGhlcj1uZXcgSS5BRVMoRiksdGhpcy5fcHJldj15LmZyb20oTyksdGhpcy5fY2FjaGU9eS5hbGxvY1Vuc2FmZSgwKSx0aGlzLl9zZWNDYWNoZT15LmFsbG9jVW5zYWZlKDApLHRo''@;'; put 'put ''aXMuX2RlY3J5cHQ9eix0aGlzLl9tb2RlPVB9Xyg3MTk5MykodyxnKSx3LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFApe3JldHVybiB0aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxQLHRoaXMuX2RlY3J5cHQpfSx3LnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt0aGlzLl9jaXBoZXIu''@;'; put 'put ''c2NydWIoKX0sdWUuZXhwb3J0cz13fSw4ODg2MjoodWUscSxfKT0+e3ZhciBJPV8oMzk3OTkpLHk9Xyg0MzM4OCksZz1fKDYwNTAzKSxCPV8oNTk1NzEpLHc9XygxODIxMSk7ZnVuY3Rpb24gTyhMLEssVSl7aWYoTD1MLnRvTG93ZXJDYXNlKCksZ1tMXSlyZXR1cm4geS5jcmVhdGVDaXBoZXJp''@;'; put 'put ''dihMLEssVSk7aWYoQltMXSlyZXR1cm4gbmV3IEkoe2tleTpLLGl2OlUsbW9kZTpMfSk7dGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0eXBlIil9ZnVuY3Rpb24geihMLEssVSl7aWYoTD1MLnRvTG93ZXJDYXNlKCksZ1tMXSlyZXR1cm4geS5jcmVhdGVEZWNpcGhlcml2KEws''@;'; put 'put ''SyxVKTtpZihCW0xdKXJldHVybiBuZXcgSSh7a2V5OkssaXY6VSxtb2RlOkwsZGVjcnlwdDohMH0pO3Rocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgc3VpdGUgdHlwZSIpfXEuY3JlYXRlQ2lwaGVyPXEuQ2lwaGVyPWZ1bmN0aW9uIFAoTCxLKXt2YXIgVSxXO2lmKEw9TC50b0xvd2VyQ2Fz''@;'; put 'put ''ZSgpLGdbTF0pVT1nW0xdLmtleSxXPWdbTF0uaXY7ZWxzZXtpZighQltMXSl0aHJvdyBuZXcgVHlwZUVycm9yKCJpbnZhbGlkIHN1aXRlIHR5cGUiKTtVPTgqQltMXS5rZXksVz1CW0xdLml2fXZhciBZPXcoSywhMSxVLFcpO3JldHVybiBPKEwsWS5rZXksWS5pdil9LHEuY3JlYXRlQ2lwaGVy''@;'; put 'put ''aXY9cS5DaXBoZXJpdj1PLHEuY3JlYXRlRGVjaXBoZXI9cS5EZWNpcGhlcj1mdW5jdGlvbiBGKEwsSyl7dmFyIFUsVztpZihMPUwudG9Mb3dlckNhc2UoKSxnW0xdKVU9Z1tMXS5rZXksVz1nW0xdLml2O2Vsc2V7aWYoIUJbTF0pdGhyb3cgbmV3IFR5cGVFcnJvcigiaW52YWxpZCBzdWl0ZSB0''@;'; put 'put ''eXBlIik7VT04KkJbTF0ua2V5LFc9QltMXS5pdn12YXIgWT13KEssITEsVSxXKTtyZXR1cm4geihMLFkua2V5LFkuaXYpfSxxLmNyZWF0ZURlY2lwaGVyaXY9cS5EZWNpcGhlcml2PXoscS5saXN0Q2lwaGVycz1xLmdldENpcGhlcnM9ZnVuY3Rpb24gTigpe3JldHVybiBPYmplY3Qua2V5cyhC''@;'; put 'put ''KS5jb25jYXQoeS5nZXRDaXBoZXJzKCkpfX0sMzk3OTk6KHVlLHEsXyk9Pnt2YXIgST1fKDMyNDcpLHk9Xyg3MTU0OSksZz1fKDcxOTkzKSxCPV8oMjcwNTQpLkJ1ZmZlcix3PXsiZGVzLWVkZTMtY2JjIjp5LkNCQy5pbnN0YW50aWF0ZSh5LkVERSksImRlcy1lZGUzIjp5LkVERSwiZGVzLWVk''@;'; put 'put ''ZS1jYmMiOnkuQ0JDLmluc3RhbnRpYXRlKHkuRURFKSwiZGVzLWVkZSI6eS5FREUsImRlcy1jYmMiOnkuQ0JDLmluc3RhbnRpYXRlKHkuREVTKSwiZGVzLWVjYiI6eS5ERVN9O2Z1bmN0aW9uIFAoRil7SS5jYWxsKHRoaXMpO3ZhciBOLE89Ri5tb2RlLnRvTG93ZXJDYXNlKCksej13W09dO049''@;'; put 'put ''Ri5kZWNyeXB0PyJkZWNyeXB0IjoiZW5jcnlwdCI7dmFyIEw9Ri5rZXk7Qi5pc0J1ZmZlcihMKXx8KEw9Qi5mcm9tKEwpKSwoImRlcy1lZGUiPT09T3x8ImRlcy1lZGUtY2JjIj09PU8pJiYoTD1CLmNvbmNhdChbTCxMLnNsaWNlKDAsOCldKSk7dmFyIEs9Ri5pdjtCLmlzQnVmZmVyKEspfHwo''@;'; put 'put ''Sz1CLmZyb20oSykpLHRoaXMuX2Rlcz16LmNyZWF0ZSh7a2V5OkwsaXY6Syx0eXBlOk59KX13LmRlcz13WyJkZXMtY2JjIl0sdy5kZXMzPXdbImRlcy1lZGUzLWNiYyJdLHVlLmV4cG9ydHM9UCxnKFAsSSksUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihGKXtyZXR1cm4gQi5mcm9tKHRo''@;'; put 'put ''aXMuX2Rlcy51cGRhdGUoRikpfSxQLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXtyZXR1cm4gQi5mcm9tKHRoaXMuX2Rlcy5maW5hbCgpKX19LDU5NTcxOih1ZSxxKT0+e3FbImRlcy1lY2IiXT17a2V5OjgsaXY6MH0scVsiZGVzLWNiYyJdPXEuZGVzPXtrZXk6OCxpdjo4fSxxWyJkZXMt''@;'; put 'put ''ZWRlMy1jYmMiXT1xLmRlczM9e2tleToyNCxpdjo4fSxxWyJkZXMtZWRlMyJdPXtrZXk6MjQsaXY6MH0scVsiZGVzLWVkZS1jYmMiXT17a2V5OjE2LGl2Ojh9LHFbImRlcy1lZGUiXT17a2V5OjE2LGl2OjB9fSwxNDEwNToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDkxNykseT1f''@;'; put 'put ''KDMzNDIpLGc9XygyNzA1NCkuQnVmZmVyO2Z1bmN0aW9uIEIoRil7dmFyIHosTz1GLm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2Rve3o9bmV3IEkoeShPKSl9d2hpbGUoei5jbXAoRi5tb2R1bHVzKT49MHx8IXoudW1vZChGLnByaW1lMSl8fCF6LnVtb2QoRi5wcmltZTIpKTtyZXR1cm4gen1mdW5j''@;'; put 'put ''dGlvbiBQKEYsTyl7dmFyIHo9ZnVuY3Rpb24gdyhGKXt2YXIgTz1CKEYpO3JldHVybntibGluZGVyOk8udG9SZWQoSS5tb250KEYubW9kdWx1cykpLnJlZFBvdyhuZXcgSShGLnB1YmxpY0V4cG9uZW50KSkuZnJvbVJlZCgpLHVuYmxpbmRlcjpPLmludm0oRi5tb2R1bHVzKX19KE8pLE49Ty5t''@;'; put 'put ''b2R1bHVzLmJ5dGVMZW5ndGgoKSxMPW5ldyBJKEYpLm11bCh6LmJsaW5kZXIpLnVtb2QoTy5tb2R1bHVzKSxLPUwudG9SZWQoSS5tb250KE8ucHJpbWUxKSksVT1MLnRvUmVkKEkubW9udChPLnByaW1lMikpLFc9Ty5jb2VmZmljaWVudCxZPU8ucHJpbWUxLFg9Ty5wcmltZTIsZWU9Sy5yZWRQ''@;'; put 'put ''b3coTy5leHBvbmVudDEpLmZyb21SZWQoKSxKPVUucmVkUG93KE8uZXhwb25lbnQyKS5mcm9tUmVkKCkscmU9ZWUuaXN1YihKKS5pbXVsKFcpLnVtb2QoWSkuaW11bChYKTtyZXR1cm4gSi5pYWRkKHJlKS5pbXVsKHoudW5ibGluZGVyKS51bW9kKE8ubW9kdWx1cykudG9BcnJheUxpa2UoZywi''@;'; put 'put ''YmUiLE4pfVAuZ2V0cj1CLHVlLmV4cG9ydHM9UH0sOTk1NjA6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1fKDYyOTUxKX0sNzkxNDM6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9XygyNzA1NCkuQnVmZmVyLHk9Xyg2NzIxMSksZz1fKDU5NDIpLEI9Xyg3MTk5Myks''@;'; put 'put ''dz1fKDQzMTUwKSxQPV8oNzQ3NTQpLEY9Xyg2Mjk1MSk7ZnVuY3Rpb24gTyhLKXtnLldyaXRhYmxlLmNhbGwodGhpcyk7dmFyIFU9RltLXTtpZighVSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gbWVzc2FnZSBkaWdlc3QiKTt0aGlzLl9oYXNoVHlwZT1VLmhhc2gsdGhpcy5faGFzaD15KFUu''@;'; put 'put ''aGFzaCksdGhpcy5fdGFnPVUuaWQsdGhpcy5fc2lnblR5cGU9VS5zaWdufWZ1bmN0aW9uIHooSyl7Zy5Xcml0YWJsZS5jYWxsKHRoaXMpO3ZhciBVPUZbS107aWYoIVUpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIG1lc3NhZ2UgZGlnZXN0Iik7dGhpcy5faGFzaD15KFUuaGFzaCksdGhpcy5f''@;'; put 'put ''dGFnPVUuaWQsdGhpcy5fc2lnblR5cGU9VS5zaWdufWZ1bmN0aW9uIE4oSyl7cmV0dXJuIG5ldyBPKEspfWZ1bmN0aW9uIEwoSyl7cmV0dXJuIG5ldyB6KEspfU9iamVjdC5rZXlzKEYpLmZvckVhY2goZnVuY3Rpb24oSyl7RltLXS5pZD1JLmZyb20oRltLXS5pZCwiaGV4IiksRltLLnRvTG93''@;'; put 'put ''ZXJDYXNlKCldPUZbS119KSxCKE8sZy5Xcml0YWJsZSksTy5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKFUsVyxZKXt0aGlzLl9oYXNoLnVwZGF0ZShVKSxZKCl9LE8ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihVLFcpe3JldHVybiB0aGlzLl9oYXNoLnVwZGF0ZSgic3RyaW5nIj09dHlw''@;'; put 'put ''ZW9mIFU/SS5mcm9tKFUsVyk6VSksdGhpc30sTy5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihVLFcpe3RoaXMuZW5kKCk7dmFyIFk9dGhpcy5faGFzaC5kaWdlc3QoKSxYPXcoWSxVLHRoaXMuX2hhc2hUeXBlLHRoaXMuX3NpZ25UeXBlLHRoaXMuX3RhZyk7cmV0dXJuIFc/WC50b1N0cmluZyhX''@;'; put 'put ''KTpYfSxCKHosZy5Xcml0YWJsZSksei5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKFUsVyxZKXt0aGlzLl9oYXNoLnVwZGF0ZShVKSxZKCl9LHoucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihVLFcpe3JldHVybiB0aGlzLl9oYXNoLnVwZGF0ZSgic3RyaW5nIj09dHlwZW9mIFU/SS5mcm9t''@;'; put 'put ''KFUsVyk6VSksdGhpc30sei5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKFUsVyxZKXt2YXIgWD0ic3RyaW5nIj09dHlwZW9mIFc/SS5mcm9tKFcsWSk6Vzt0aGlzLmVuZCgpO3ZhciBlZT10aGlzLl9oYXNoLmRpZ2VzdCgpO3JldHVybiBQKFgsZWUsVSx0aGlzLl9zaWduVHlwZSx0aGlzLl90''@;'; put 'put ''YWcpfSx1ZS5leHBvcnRzPXtTaWduOk4sVmVyaWZ5OkwsY3JlYXRlU2lnbjpOLGNyZWF0ZVZlcmlmeTpMfX0sNDMxNTA6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9XygyNzA1NCkuQnVmZmVyLHk9Xyg1NjQzMiksZz1fKDE0MTA1KSxCPV8oOTA1MTgpLmVjLHc9Xyg5MTcpLFA9Xyg2''@;'; put 'put ''NTY2NyksRj1fKDY0NTg5KTtmdW5jdGlvbiBVKEoscmUsaWUsbGUpe2lmKChKPUkuZnJvbShKLnRvQXJyYXkoKSkpLmxlbmd0aDxyZS5ieXRlTGVuZ3RoKCkpe3ZhciBtZT1JLmFsbG9jKHJlLmJ5dGVMZW5ndGgoKS1KLmxlbmd0aCk7Sj1JLmNvbmNhdChbbWUsSl0pfXZhciBfZT1pZS5sZW5n''@;'; put 'put ''dGgsVGU9ZnVuY3Rpb24gWShKLHJlKXtKPShKPVcoSixyZSkpLm1vZChyZSk7dmFyIGllPUkuZnJvbShKLnRvQXJyYXkoKSk7aWYoaWUubGVuZ3RoPHJlLmJ5dGVMZW5ndGgoKSl7dmFyIGxlPUkuYWxsb2MocmUuYnl0ZUxlbmd0aCgpLWllLmxlbmd0aCk7aWU9SS5jb25jYXQoW2xlLGllXSl9''@;'; put 'put ''cmV0dXJuIGllfShpZSxyZSksU2U9SS5hbGxvYyhfZSk7U2UuZmlsbCgxKTt2YXIgemU9SS5hbGxvYyhfZSk7cmV0dXJuIHplPXkobGUsemUpLnVwZGF0ZShTZSkudXBkYXRlKEkuZnJvbShbMF0pKS51cGRhdGUoSikudXBkYXRlKFRlKS5kaWdlc3QoKSxTZT15KGxlLHplKS51cGRhdGUoU2Up''@;'; put 'put ''LmRpZ2VzdCgpLHtrOnplPXkobGUsemUpLnVwZGF0ZShTZSkudXBkYXRlKEkuZnJvbShbMV0pKS51cGRhdGUoSikudXBkYXRlKFRlKS5kaWdlc3QoKSx2OlNlPXkobGUsemUpLnVwZGF0ZShTZSkuZGlnZXN0KCl9fWZ1bmN0aW9uIFcoSixyZSl7dmFyIGllPW5ldyB3KEopLGxlPShKLmxlbmd0''@;'; put 'put ''aDw8MyktcmUuYml0TGVuZ3RoKCk7cmV0dXJuIGxlPjAmJmllLmlzaHJuKGxlKSxpZX1mdW5jdGlvbiBYKEoscmUsaWUpe3ZhciBsZSxtZTtkb3tmb3IobGU9SS5hbGxvYygwKTs4KmxlLmxlbmd0aDxKLmJpdExlbmd0aCgpOylyZS52PXkoaWUscmUuaykudXBkYXRlKHJlLnYpLmRpZ2VzdCgp''@;'; put 'put ''LGxlPUkuY29uY2F0KFtsZSxyZS52XSk7bWU9VyhsZSxKKSxyZS5rPXkoaWUscmUuaykudXBkYXRlKHJlLnYpLnVwZGF0ZShJLmZyb20oWzBdKSkuZGlnZXN0KCkscmUudj15KGllLHJlLmspLnVwZGF0ZShyZS52KS5kaWdlc3QoKX13aGlsZSgtMSE9PW1lLmNtcChKKSk7cmV0dXJuIG1lfWZ1''@;'; put 'put ''bmN0aW9uIGVlKEoscmUsaWUsbGUpe3JldHVybiBKLnRvUmVkKHcubW9udChpZSkpLnJlZFBvdyhyZSkuZnJvbVJlZCgpLm1vZChsZSl9dWUuZXhwb3J0cz1mdW5jdGlvbiB6KEoscmUsaWUsbGUsbWUpe3ZhciBfZT1QKHJlKTtpZihfZS5jdXJ2ZSl7aWYoImVjZHNhIiE9PWxlJiYiZWNkc2Ev''@;'; put 'put ''cnNhIiE9PWxlKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBOKEoscmUpe3ZhciBpZT1GW3JlLmN1cnZlLmpvaW4oIi4iKV07aWYoIWllKXRocm93IG5ldyBFcnJvcigidW5rbm93biBjdXJ2ZSAiK3JlLmN1cnZlLmpvaW4oIi4iKSk7''@;'; put 'put ''dmFyIF9lPW5ldyBCKGllKS5rZXlGcm9tUHJpdmF0ZShyZS5wcml2YXRlS2V5KS5zaWduKEopO3JldHVybiBJLmZyb20oX2UudG9ERVIoKSl9KEosX2UpfWlmKCJkc2EiPT09X2UudHlwZSl7aWYoImRzYSIhPT1sZSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUiKTty''@;'; put 'put ''ZXR1cm4gZnVuY3Rpb24gTChKLHJlLGllKXtmb3IodmFyIHplLGxlPXJlLnBhcmFtcy5wcml2X2tleSxtZT1yZS5wYXJhbXMucCxfZT1yZS5wYXJhbXMucSxUZT1yZS5wYXJhbXMuZyxTZT1uZXcgdygwKSxWPVcoSixfZSkubW9kKF9lKSxwPSExLGI9VShsZSxfZSxKLGllKTshMT09PXA7KVNl''@;'; put 'put ''PWVlKFRlLHplPVgoX2UsYixpZSksbWUsX2UpLDA9PT0ocD16ZS5pbnZtKF9lKS5pbXVsKFYuYWRkKGxlLm11bChTZSkpKS5tb2QoX2UpKS5jbXBuKDApJiYocD0hMSxTZT1uZXcgdygwKSk7cmV0dXJuIGZ1bmN0aW9uIEsoSixyZSl7Sj1KLnRvQXJyYXkoKSxyZT1yZS50b0FycmF5KCksMTI4''@;'; put 'put ''JkpbMF0mJihKPVswXS5jb25jYXQoSikpLDEyOCZyZVswXSYmKHJlPVswXS5jb25jYXQocmUpKTt2YXIgbGU9WzQ4LEoubGVuZ3RoK3JlLmxlbmd0aCs0LDIsSi5sZW5ndGhdO3JldHVybiBsZT1sZS5jb25jYXQoSixbMixyZS5sZW5ndGhdLHJlKSxJLmZyb20obGUpfShTZSxwKX0oSixfZSxp''@;'; put 'put ''ZSl9aWYoInJzYSIhPT1sZSYmImVjZHNhL3JzYSIhPT1sZSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHByaXZhdGUga2V5IHR5cGUiKTtpZih2b2lkIDAhPT1yZS5wYWRkaW5nJiYxIT09cmUucGFkZGluZyl0aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgb3IgdW5zdXBwb3J0ZWQgcGFkZGluZyBt''@;'; put 'put ''b2RlIik7Sj1JLmNvbmNhdChbbWUsSl0pO2Zvcih2YXIgVGU9X2UubW9kdWx1cy5ieXRlTGVuZ3RoKCksU2U9WzAsMV07Si5sZW5ndGgrU2UubGVuZ3RoKzE8VGU7KVNlLnB1c2goMjU1KTtTZS5wdXNoKDApO2Zvcih2YXIgemU9LTE7Kyt6ZTxKLmxlbmd0aDspU2UucHVzaChKW3plXSk7cmV0''@;'; put 'put ''dXJuIGcoU2UsX2UpfSx1ZS5leHBvcnRzLmdldEtleT1VLHVlLmV4cG9ydHMubWFrZUtleT1YfSw3NDc1NDoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDI3MDU0KS5CdWZmZXIseT1fKDkxNyksZz1fKDkwNTE4KS5lYyxCPV8oNjU2NjcpLHc9Xyg2NDU4OSk7ZnVuY3Rpb24geihO''@;'; put 'put ''LEwpe2lmKE4uY21wbigwKTw9MCl0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgc2lnIik7aWYoTi5jbXAoTCk+PTApdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHNpZyIpfXVlLmV4cG9ydHM9ZnVuY3Rpb24gUChOLEwsSyxVLFcpe3ZhciBZPUIoSyk7aWYoImVjIj09PVkudHlwZSl7aWYoImVj''@;'; put 'put ''ZHNhIiE9PVUmJiJlY2RzYS9yc2EiIT09VSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1YmxpYyBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBGKE4sTCxLKXt2YXIgVT13W0suZGF0YS5hbGdvcml0aG0uY3VydmUuam9pbigiLiIpXTtpZighVSl0aHJvdyBuZXcgRXJyb3IoInVua25vd24g''@;'; put 'put ''Y3VydmUgIitLLmRhdGEuYWxnb3JpdGhtLmN1cnZlLmpvaW4oIi4iKSk7cmV0dXJuIG5ldyBnKFUpLnZlcmlmeShMLE4sSy5kYXRhLnN1YmplY3RQcml2YXRlS2V5LmRhdGEpfShOLEwsWSl9aWYoImRzYSI9PT1ZLnR5cGUpe2lmKCJkc2EiIT09VSl0aHJvdyBuZXcgRXJyb3IoIndyb25nIHB1''@;'; put 'put ''YmxpYyBrZXkgdHlwZSIpO3JldHVybiBmdW5jdGlvbiBPKE4sTCxLKXt2YXIgVT1LLmRhdGEucCxXPUsuZGF0YS5xLFk9Sy5kYXRhLmcsWD1LLmRhdGEucHViX2tleSxlZT1CLnNpZ25hdHVyZS5kZWNvZGUoTiwiZGVyIiksSj1lZS5zLHJlPWVlLnI7eihKLFcpLHoocmUsVyk7dmFyIGllPXku''@;'; put 'put ''bW9udChVKSxsZT1KLmludm0oVyk7cmV0dXJuIDA9PT1ZLnRvUmVkKGllKS5yZWRQb3cobmV3IHkoTCkubXVsKGxlKS5tb2QoVykpLmZyb21SZWQoKS5tdWwoWC50b1JlZChpZSkucmVkUG93KHJlLm11bChsZSkubW9kKFcpKS5mcm9tUmVkKCkpLm1vZChVKS5tb2QoVykuY21wKHJlKX0oTixM''@;'; put 'put ''LFkpfWlmKCJyc2EiIT09VSYmImVjZHNhL3JzYSIhPT1VKXRocm93IG5ldyBFcnJvcigid3JvbmcgcHVibGljIGtleSB0eXBlIik7TD1JLmNvbmNhdChbVyxMXSk7Zm9yKHZhciBYPVkubW9kdWx1cy5ieXRlTGVuZ3RoKCksZWU9WzFdLEo9MDtMLmxlbmd0aCtlZS5sZW5ndGgrMjxYOyllZS5w''@;'; put 'put ''dXNoKDI1NSksSis9MTtlZS5wdXNoKDApO2Zvcih2YXIgcmU9LTE7KytyZTxMLmxlbmd0aDspZWUucHVzaChMW3JlXSk7ZWU9SS5mcm9tKGVlKTt2YXIgaWU9eS5tb250KFkubW9kdWx1cyk7Tj0oTj1uZXcgeShOKS50b1JlZChpZSkpLnJlZFBvdyhuZXcgeShZLnB1YmxpY0V4cG9uZW50KSks''@;'; put 'put ''Tj1JLmZyb20oTi5mcm9tUmVkKCkudG9BcnJheSgpKTt2YXIgbGU9Sjw4PzE6MDtmb3IoWD1NYXRoLm1pbihOLmxlbmd0aCxlZS5sZW5ndGgpLE4ubGVuZ3RoIT09ZWUubGVuZ3RoJiYobGU9MSkscmU9LTE7KytyZTxYOylsZXw9TltyZV1eZWVbcmVdO3JldHVybiAwPT09bGV9fSwxMzU0Njp1''@;'; put 'put ''ZT0+e3VlLmV4cG9ydHM9ZnVuY3Rpb24oXyxJKXtmb3IodmFyIHk9TWF0aC5taW4oXy5sZW5ndGgsSS5sZW5ndGgpLGc9bmV3IEJ1ZmZlcih5KSxCPTA7Qjx5OysrQilnW0JdPV9bQl1eSVtCXTtyZXR1cm4gZ319LDgzODM4Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMTM5ODEp''@;'; put 'put ''LHk9XygyMjAyMCksZz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sLmZvcj9TeW1ib2wuZm9yKCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbSIpOm51bGw7cS5CdWZmZXI9RixxLlNsb3dCdWZmZXI9ZnVuY3Rpb24gSihJZSl7cmV0dXJuK0ll''@;'; put 'put ''IT1JZSYmKEllPTApLEYuYWxsb2MoK0llKX0scS5JTlNQRUNUX01BWF9CWVRFUz01MDt2YXIgQj0yMTQ3NDgzNjQ3O2Z1bmN0aW9uIFAoSWUpe2lmKEllPkIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSAiJytJZSsnIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gInNpemUiJyk7dmFy''@;'; put 'put ''IFZlPW5ldyBVaW50OEFycmF5KEllKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKFZlLEYucHJvdG90eXBlKSxWZX1mdW5jdGlvbiBGKEllLFZlLGtlKXtpZigibnVtYmVyIj09dHlwZW9mIEllKXtpZigic3RyaW5nIj09dHlwZW9mIFZlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAi''@;'; put 'put ''c3RyaW5nIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpO3JldHVybiBMKEllKX1yZXR1cm4gTyhJZSxWZSxrZSl9ZnVuY3Rpb24gTyhJZSxWZSxrZSl7aWYoInN0cmluZyI9PXR5cGVvZiBJZSlyZXR1cm4gZnVuY3Rpb24gSyhJZSxWZSl7''@;'; put 'put ''aWYoKCJzdHJpbmciIT10eXBlb2YgVmV8fCIiPT09VmUpJiYoVmU9InV0ZjgiKSwhRi5pc0VuY29kaW5nKFZlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK1ZlKTt2YXIga2U9MHxyZShJZSxWZSksQWU9UChrZSksX3Q9QWUud3JpdGUoSWUsVmUpO3JldHVybiBf''@;'; put 'put ''dCE9PWtlJiYoQWU9QWUuc2xpY2UoMCxfdCkpLEFlfShJZSxWZSk7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KEllKSlyZXR1cm4gZnVuY3Rpb24gVyhJZSl7aWYoRGUoSWUsVWludDhBcnJheSkpe3ZhciBWZT1uZXcgVWludDhBcnJheShJZSk7cmV0dXJuIFkoVmUuYnVmZmVyLFZlLmJ5dGVPZmZz''@;'; put 'put ''ZXQsVmUuYnl0ZUxlbmd0aCl9cmV0dXJuIFUoSWUpfShJZSk7aWYobnVsbD09SWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3Qu''@;'; put 'put ''IFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgSWUpO2lmKERlKEllLEFycmF5QnVmZmVyKXx8SWUmJkRlKEllLmJ1ZmZlcixBcnJheUJ1ZmZlcil8fHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlcjwidSImJihEZShJZSxTaGFyZWRBcnJheUJ1ZmZlcil8fEllJiZEZShJZS5idWZmZXIsU2hhcmVkQXJy''@;'; put 'put ''YXlCdWZmZXIpKSlyZXR1cm4gWShJZSxWZSxrZSk7aWYoIm51bWJlciI9PXR5cGVvZiBJZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKTt2YXIgQWU9SWUudmFsdWVPZiYm''@;'; put 'put ''SWUudmFsdWVPZigpO2lmKG51bGwhPUFlJiZBZSE9PUllKXJldHVybiBGLmZyb20oQWUsVmUsa2UpO3ZhciBfdD1mdW5jdGlvbiBYKEllKXtpZihGLmlzQnVmZmVyKEllKSl7dmFyIFZlPTB8ZWUoSWUubGVuZ3RoKSxrZT1QKFZlKTtyZXR1cm4gMD09PWtlLmxlbmd0aHx8SWUuY29weShrZSww''@;'; put 'put ''LDAsVmUpLGtlfXJldHVybiB2b2lkIDAhPT1JZS5sZW5ndGg/Im51bWJlciIhPXR5cGVvZiBJZS5sZW5ndGh8fEZlKEllLmxlbmd0aCk/UCgwKTpVKEllKToiQnVmZmVyIj09PUllLnR5cGUmJkFycmF5LmlzQXJyYXkoSWUuZGF0YSk/VShJZS5kYXRhKTp2b2lkIDB9KEllKTtpZihfdClyZXR1''@;'; put 'put ''cm4gX3Q7aWYodHlwZW9mIFN5bWJvbDwidSImJm51bGwhPVN5bWJvbC50b1ByaW1pdGl2ZSYmImZ1bmN0aW9uIj09dHlwZW9mIEllW1N5bWJvbC50b1ByaW1pdGl2ZV0pcmV0dXJuIEYuZnJvbShJZVtTeW1ib2wudG9QcmltaXRpdmVdKCJzdHJpbmciKSxWZSxrZSk7dGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgQXJyYXktbGlrZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgIit0eXBlb2YgSWUpfWZ1bmN0aW9uIHooSWUpe2lmKCJudW1iZXIiIT10eXBlb2Yg''@;'; put 'put ''SWUpdGhyb3cgbmV3IFR5cGVFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKTtpZihJZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgIicrSWUrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpfWZ1bmN0aW9uIEwoSWUpe3JldHVy''@;'; put 'put ''biB6KEllKSxQKEllPDA/MDowfGVlKEllKSl9ZnVuY3Rpb24gVShJZSl7Zm9yKHZhciBWZT1JZS5sZW5ndGg8MD8wOjB8ZWUoSWUubGVuZ3RoKSxrZT1QKFZlKSxBZT0wO0FlPFZlO0FlKz0xKWtlW0FlXT0yNTUmSWVbQWVdO3JldHVybiBrZX1mdW5jdGlvbiBZKEllLFZlLGtlKXtpZihWZTww''@;'; put 'put ''fHxJZS5ieXRlTGVuZ3RoPFZlKXRocm93IG5ldyBSYW5nZUVycm9yKCcib2Zmc2V0IiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKTtpZihJZS5ieXRlTGVuZ3RoPFZlKyhrZXx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJsZW5ndGgiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5k''@;'; put 'put ''cycpO3ZhciBBZTtyZXR1cm4gQWU9dm9pZCAwPT09VmUmJnZvaWQgMD09PWtlP25ldyBVaW50OEFycmF5KEllKTp2b2lkIDA9PT1rZT9uZXcgVWludDhBcnJheShJZSxWZSk6bmV3IFVpbnQ4QXJyYXkoSWUsVmUsa2UpLE9iamVjdC5zZXRQcm90b3R5cGVPZihBZSxGLnByb3RvdHlwZSksQWV9''@;'; put 'put ''ZnVuY3Rpb24gZWUoSWUpe2lmKEllPj1CKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IitCLnRvU3RyaW5nKDE2KSsiIGJ5dGVzIik7cmV0dXJuIDB8SWV9ZnVuY3Rpb24gcmUoSWUsVmUpe2lmKEYu''@;'; put 'put ''aXNCdWZmZXIoSWUpKXJldHVybiBJZS5sZW5ndGg7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KEllKXx8RGUoSWUsQXJyYXlCdWZmZXIpKXJldHVybiBJZS5ieXRlTGVuZ3RoO2lmKCJzdHJpbmciIT10eXBlb2YgSWUpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJzdHJpbmciIGFyZ3VtZW50IG11''@;'; put 'put ''c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIG9yIEFycmF5QnVmZmVyLiBSZWNlaXZlZCB0eXBlICcrdHlwZW9mIEllKTt2YXIga2U9SWUubGVuZ3RoLEFlPWFyZ3VtZW50cy5sZW5ndGg+MiYmITA9PT1hcmd1bWVudHNbMl07aWYoIUFlJiYwPT09a2UpcmV0dXJuIDA7Zm9yKHZh''@;'; put 'put ''ciBfdD0hMTs7KXN3aXRjaChWZSl7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4ga2U7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gYXQoSWUpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6''@;'; put 'put ''cmV0dXJuIDIqa2U7Y2FzZSJoZXgiOnJldHVybiBrZT4+PjE7Y2FzZSJiYXNlNjQiOnJldHVybiBYZShJZSkubGVuZ3RoO2RlZmF1bHQ6aWYoX3QpcmV0dXJuIEFlPy0xOmF0KEllKS5sZW5ndGg7VmU9KCIiK1ZlKS50b0xvd2VyQ2FzZSgpLF90PSEwfX1mdW5jdGlvbiBpZShJZSxWZSxrZSl7''@;'; put 'put ''dmFyIEFlPSExO2lmKCh2b2lkIDA9PT1WZXx8VmU8MCkmJihWZT0wKSxWZT50aGlzLmxlbmd0aHx8KCh2b2lkIDA9PT1rZXx8a2U+dGhpcy5sZW5ndGgpJiYoa2U9dGhpcy5sZW5ndGgpLGtlPD0wKXx8KGtlPj4+PTApPD0oVmU+Pj49MCkpcmV0dXJuIiI7Zm9yKEllfHwoSWU9InV0ZjgiKTs7''@;'; put 'put ''KXN3aXRjaChJZSl7Y2FzZSJoZXgiOnJldHVybiBFKHRoaXMsVmUsa2UpO2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuIHgodGhpcyxWZSxrZSk7Y2FzZSJhc2NpaSI6cmV0dXJuIEgodGhpcyxWZSxrZSk7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gaih0aGlzLFZlLGtl''@;'; put 'put ''KTtjYXNlImJhc2U2NCI6cmV0dXJuIGIodGhpcyxWZSxrZSk7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBtKHRoaXMsVmUsa2UpO2RlZmF1bHQ6aWYoQWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitJ''@;'; put 'put ''ZSk7SWU9KEllKyIiKS50b0xvd2VyQ2FzZSgpLEFlPSEwfX1mdW5jdGlvbiBsZShJZSxWZSxrZSl7dmFyIEFlPUllW1ZlXTtJZVtWZV09SWVba2VdLEllW2tlXT1BZX1mdW5jdGlvbiBtZShJZSxWZSxrZSxBZSxfdCl7aWYoMD09PUllLmxlbmd0aClyZXR1cm4tMTtpZigic3RyaW5nIj09dHlw''@;'; put 'put ''ZW9mIGtlPyhBZT1rZSxrZT0wKTprZT4yMTQ3NDgzNjQ3P2tlPTIxNDc0ODM2NDc6a2U8LTIxNDc0ODM2NDgmJihrZT0tMjE0NzQ4MzY0OCksRmUoa2U9K2tlKSYmKGtlPV90PzA6SWUubGVuZ3RoLTEpLGtlPDAmJihrZT1JZS5sZW5ndGgra2UpLGtlPj1JZS5sZW5ndGgpe2lmKF90KXJldHVy''@;'; put 'put ''bi0xO2tlPUllLmxlbmd0aC0xfWVsc2UgaWYoa2U8MCl7aWYoIV90KXJldHVybi0xO2tlPTB9aWYoInN0cmluZyI9PXR5cGVvZiBWZSYmKFZlPUYuZnJvbShWZSxBZSkpLEYuaXNCdWZmZXIoVmUpKXJldHVybiAwPT09VmUubGVuZ3RoPy0xOl9lKEllLFZlLGtlLEFlLF90KTtpZigibnVtYmVy''@;'; put 'put ''Ij09dHlwZW9mIFZlKXJldHVybiBWZSY9MjU1LCJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP190P1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChJZSxWZSxrZSk6VWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChJZSxW''@;'; put 'put ''ZSxrZSk6X2UoSWUsW1ZlXSxrZSxBZSxfdCk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIil9ZnVuY3Rpb24gX2UoSWUsVmUsa2UsQWUsX3Qpe3ZhciBNdCxydD0xLFFlPUllLmxlbmd0aCxkbj1WZS5sZW5ndGg7aWYodm9pZCAwIT09''@;'; put 'put ''QWUmJigidWNzMiI9PT0oQWU9U3RyaW5nKEFlKS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PUFlfHwidXRmMTZsZSI9PT1BZXx8InV0Zi0xNmxlIj09PUFlKSl7aWYoSWUubGVuZ3RoPDJ8fFZlLmxlbmd0aDwyKXJldHVybi0xO3J0PTIsUWUvPTIsZG4vPTIsa2UvPTJ9ZnVuY3Rpb24geXQo''@;'; put 'put ''dHQsSGUpe3JldHVybiAxPT09cnQ/dHRbSGVdOnR0LnJlYWRVSW50MTZCRShIZSpydCl9aWYoX3Qpe3ZhciBEdD0tMTtmb3IoTXQ9a2U7TXQ8UWU7TXQrKylpZih5dChJZSxNdCk9PT15dChWZSwtMT09PUR0PzA6TXQtRHQpKXtpZigtMT09PUR0JiYoRHQ9TXQpLE10LUR0KzE9PT1kbilyZXR1''@;'; put 'put ''cm4gRHQqcnR9ZWxzZS0xIT09RHQmJihNdC09TXQtRHQpLER0PS0xfWVsc2UgZm9yKGtlK2RuPlFlJiYoa2U9UWUtZG4pLE10PWtlO010Pj0wO010LS0pe2Zvcih2YXIgaXQ9ITAsJGU9MDskZTxkbjskZSsrKWlmKHl0KEllLE10KyRlKSE9PXl0KFZlLCRlKSl7aXQ9ITE7YnJlYWt9aWYoaXQp''@;'; put 'put ''cmV0dXJuIE10fXJldHVybi0xfWZ1bmN0aW9uIFRlKEllLFZlLGtlLEFlKXtrZT1OdW1iZXIoa2UpfHwwO3ZhciBfdD1JZS5sZW5ndGgta2U7QWU/KEFlPU51bWJlcihBZSkpPl90JiYoQWU9X3QpOkFlPV90O3ZhciBydD1WZS5sZW5ndGg7QWU+cnQvMiYmKEFlPXJ0LzIpO2Zvcih2YXIgUWU9''@;'; put 'put ''MDtRZTxBZTsrK1FlKXt2YXIgZG49cGFyc2VJbnQoVmUuc3Vic3RyKDIqUWUsMiksMTYpO2lmKEZlKGRuKSlyZXR1cm4gUWU7SWVba2UrUWVdPWRufXJldHVybiBRZX1mdW5jdGlvbiBTZShJZSxWZSxrZSxBZSl7cmV0dXJuIGplKGF0KFZlLEllLmxlbmd0aC1rZSksSWUsa2UsQWUpfWZ1bmN0''@;'; put 'put ''aW9uIHplKEllLFZlLGtlLEFlKXtyZXR1cm4gamUoZnVuY3Rpb24gTWUoSWUpe2Zvcih2YXIgVmU9W10sa2U9MDtrZTxJZS5sZW5ndGg7KytrZSlWZS5wdXNoKDI1NSZJZS5jaGFyQ29kZUF0KGtlKSk7cmV0dXJuIFZlfShWZSksSWUsa2UsQWUpfWZ1bmN0aW9uIFYoSWUsVmUsa2UsQWUpe3Jl''@;'; put 'put ''dHVybiBqZShYZShWZSksSWUsa2UsQWUpfWZ1bmN0aW9uIHAoSWUsVmUsa2UsQWUpe3JldHVybiBqZShmdW5jdGlvbiB2ZShJZSxWZSl7Zm9yKHZhciBrZSxBZSxydD1bXSxRZT0wO1FlPEllLmxlbmd0aCYmISgoVmUtPTIpPDApOysrUWUpQWU9KGtlPUllLmNoYXJDb2RlQXQoUWUpKT4+OCxy''@;'; put 'put ''dC5wdXNoKGtlJTI1NikscnQucHVzaChBZSk7cmV0dXJuIHJ0fShWZSxJZS5sZW5ndGgta2UpLEllLGtlLEFlKX1mdW5jdGlvbiBiKEllLFZlLGtlKXtyZXR1cm4gSS5mcm9tQnl0ZUFycmF5KDA9PT1WZSYma2U9PT1JZS5sZW5ndGg/SWU6SWUuc2xpY2UoVmUsa2UpKX1mdW5jdGlvbiB4KEll''@;'; put 'put ''LFZlLGtlKXtrZT1NYXRoLm1pbihJZS5sZW5ndGgsa2UpO2Zvcih2YXIgQWU9W10sX3Q9VmU7X3Q8a2U7KXt2YXIgeXQsTXQsRHQsaXQscnQ9SWVbX3RdLFFlPW51bGwsZG49cnQ+MjM5PzQ6cnQ+MjIzPzM6cnQ+MTkxPzI6MTtpZihfdCtkbjw9a2Upc3dpdGNoKGRuKXtjYXNlIDE6cnQ8MTI4''@;'; put 'put ''JiYoUWU9cnQpO2JyZWFrO2Nhc2UgMjoxMjg9PSgxOTImKHl0PUllW190KzFdKSkmJihpdD0oMzEmcnQpPDw2fDYzJnl0KT4xMjcmJihRZT1pdCk7YnJlYWs7Y2FzZSAzOk10PUllW190KzJdLDEyOD09KDE5MiYoeXQ9SWVbX3QrMV0pKSYmMTI4PT0oMTkyJk10KSYmKGl0PSgxNSZydCk8PDEy''@;'; put 'put ''fCg2MyZ5dCk8PDZ8NjMmTXQpPjIwNDcmJihpdDw1NTI5Nnx8aXQ+NTczNDMpJiYoUWU9aXQpO2JyZWFrO2Nhc2UgNDpNdD1JZVtfdCsyXSxEdD1JZVtfdCszXSwxMjg9PSgxOTImKHl0PUllW190KzFdKSkmJjEyOD09KDE5MiZNdCkmJjEyOD09KDE5MiZEdCkmJihpdD0oMTUmcnQpPDwxOHwo''@;'; put 'put ''NjMmeXQpPDwxMnwoNjMmTXQpPDw2fDYzJkR0KT42NTUzNSYmaXQ8MTExNDExMiYmKFFlPWl0KX1udWxsPT09UWU/KFFlPTY1NTMzLGRuPTEpOlFlPjY1NTM1JiYoQWUucHVzaCgoUWUtPTY1NTM2KT4+PjEwJjEwMjN8NTUyOTYpLFFlPTU2MzIwfDEwMjMmUWUpLEFlLnB1c2goUWUpLF90Kz1k''@;'; put 'put ''bn1yZXR1cm4gZnVuY3Rpb24gVChJZSl7dmFyIFZlPUllLmxlbmd0aDtpZihWZTw9QylyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsSWUpO2Zvcih2YXIga2U9IiIsQWU9MDtBZTxWZTspa2UrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLEllLnNsaWNl''@;'; put 'put ''KEFlLEFlKz1DKSk7cmV0dXJuIGtlfShBZSl9cS5rTWF4TGVuZ3RoPUIsIShGLlRZUEVEX0FSUkFZX1NVUFBPUlQ9ZnVuY3Rpb24gdygpe3RyeXt2YXIgSWU9bmV3IFVpbnQ4QXJyYXkoMSksVmU9e2ZvbzpmdW5jdGlvbigpe3JldHVybiA0Mn19O3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBl''@;'; put 'put ''T2YoVmUsVWludDhBcnJheS5wcm90b3R5cGUpLE9iamVjdC5zZXRQcm90b3R5cGVPZihJZSxWZSksNDI9PT1JZS5mb28oKX1jYXRjaHtyZXR1cm4hMX19KCkpJiZ0eXBlb2YgY29uc29sZTwidSImJiJmdW5jdGlvbiI9PXR5cGVvZiBjb25zb2xlLmVycm9yJiZjb25zb2xlLmVycm9yKCJUaGlz''@;'; put 'put ''IGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgYGJ1ZmZlcmAgdjUueC4gVXNlIGBidWZmZXJgIHY0LnggaWYgeW91IHJlcXVpcmUgb2xkIGJyb3dzZXIgc3VwcG9ydC4iKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5w''@;'; put 'put ''cm90b3R5cGUsInBhcmVudCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7aWYoRi5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdGhpcy5idWZmZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KEYucHJvdG90eXBlLCJvZmZzZXQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe2lm''@;'; put 'put ''KEYuaXNCdWZmZXIodGhpcykpcmV0dXJuIHRoaXMuYnl0ZU9mZnNldH19KSxGLnBvb2xTaXplPTgxOTIsRi5mcm9tPWZ1bmN0aW9uKEllLFZlLGtlKXtyZXR1cm4gTyhJZSxWZSxrZSl9LE9iamVjdC5zZXRQcm90b3R5cGVPZihGLnByb3RvdHlwZSxVaW50OEFycmF5LnByb3RvdHlwZSksT2Jq''@;'; put 'put ''ZWN0LnNldFByb3RvdHlwZU9mKEYsVWludDhBcnJheSksRi5hbGxvYz1mdW5jdGlvbihJZSxWZSxrZSl7cmV0dXJuIGZ1bmN0aW9uIE4oSWUsVmUsa2Upe3JldHVybiB6KEllKSxJZTw9MD9QKEllKTp2b2lkIDAhPT1WZT8ic3RyaW5nIj09dHlwZW9mIGtlP1AoSWUpLmZpbGwoVmUsa2UpOlAo''@;'; put 'put ''SWUpLmZpbGwoVmUpOlAoSWUpfShJZSxWZSxrZSl9LEYuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oSWUpe3JldHVybiBMKEllKX0sRi5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24oSWUpe3JldHVybiBMKEllKX0sRi5pc0J1ZmZlcj1mdW5jdGlvbihWZSl7cmV0dXJuIG51bGwhPVZlJiYhMD09PVZl''@;'; put 'put ''Ll9pc0J1ZmZlciYmVmUhPT1GLnByb3RvdHlwZX0sRi5jb21wYXJlPWZ1bmN0aW9uKFZlLGtlKXtpZihEZShWZSxVaW50OEFycmF5KSYmKFZlPUYuZnJvbShWZSxWZS5vZmZzZXQsVmUuYnl0ZUxlbmd0aCkpLERlKGtlLFVpbnQ4QXJyYXkpJiYoa2U9Ri5mcm9tKGtlLGtlLm9mZnNldCxrZS5i''@;'; put 'put ''eXRlTGVuZ3RoKSksIUYuaXNCdWZmZXIoVmUpfHwhRi5pc0J1ZmZlcihrZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJidWYxIiwgImJ1ZjIiIGFyZ3VtZW50cyBtdXN0IGJlIG9uZSBvZiB0eXBlIEJ1ZmZlciBvciBVaW50OEFycmF5Jyk7aWYoVmU9PT1rZSlyZXR1cm4gMDtmb3IodmFy''@;'; put 'put ''IEFlPVZlLmxlbmd0aCxfdD1rZS5sZW5ndGgscnQ9MCxRZT1NYXRoLm1pbihBZSxfdCk7cnQ8UWU7KytydClpZihWZVtydF0hPT1rZVtydF0pe0FlPVZlW3J0XSxfdD1rZVtydF07YnJlYWt9cmV0dXJuIEFlPF90Py0xOl90PEFlPzE6MH0sRi5pc0VuY29kaW5nPWZ1bmN0aW9uKFZlKXtzd2l0''@;'; put 'put ''Y2goU3RyaW5nKFZlKS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6''@;'; put 'put ''cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LEYuY29uY2F0PWZ1bmN0aW9uKFZlLGtlKXtpZighQXJyYXkuaXNBcnJheShWZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKDA9PT1WZS5sZW5ndGgpcmV0dXJu''@;'; put 'put ''IEYuYWxsb2MoMCk7dmFyIEFlO2lmKHZvaWQgMD09PWtlKWZvcihrZT0wLEFlPTA7QWU8VmUubGVuZ3RoOysrQWUpa2UrPVZlW0FlXS5sZW5ndGg7dmFyIF90PUYuYWxsb2NVbnNhZmUoa2UpLHJ0PTA7Zm9yKEFlPTA7QWU8VmUubGVuZ3RoOysrQWUpe3ZhciBRZT1WZVtBZV07aWYoRGUoUWUs''@;'; put 'put ''VWludDhBcnJheSkpcnQrUWUubGVuZ3RoPl90Lmxlbmd0aD9GLmZyb20oUWUpLmNvcHkoX3QscnQpOlVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKF90LFFlLHJ0KTtlbHNle2lmKCFGLmlzQnVmZmVyKFFlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBi''@;'; put 'put ''ZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7UWUuY29weShfdCxydCl9cnQrPVFlLmxlbmd0aH1yZXR1cm4gX3R9LEYuYnl0ZUxlbmd0aD1yZSxGLnByb3RvdHlwZS5faXNCdWZmZXI9ITAsRi5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIFZlPXRoaXMubGVuZ3RoO2lmKFZlJTIhPTAp''@;'; put 'put ''dGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzIik7Zm9yKHZhciBrZT0wO2tlPFZlO2tlKz0yKWxlKHRoaXMsa2Usa2UrMSk7cmV0dXJuIHRoaXN9LEYucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe3ZhciBWZT10aGlzLmxl''@;'; put 'put ''bmd0aDtpZihWZSU0IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cyIpO2Zvcih2YXIga2U9MDtrZTxWZTtrZSs9NClsZSh0aGlzLGtlLGtlKzMpLGxlKHRoaXMsa2UrMSxrZSsyKTtyZXR1cm4gdGhpc30sRi5wcm90b3R5''@;'; put 'put ''cGUuc3dhcDY0PWZ1bmN0aW9uKCl7dmFyIFZlPXRoaXMubGVuZ3RoO2lmKFZlJTghPTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciBrZT0wO2tlPFZlO2tlKz04KWxlKHRoaXMsa2Usa2UrNyksbGUodGhp''@;'; put 'put ''cyxrZSsxLGtlKzYpLGxlKHRoaXMsa2UrMixrZSs1KSxsZSh0aGlzLGtlKzMsa2UrNCk7cmV0dXJuIHRoaXN9LEYucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nPUYucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIFZlPXRoaXMubGVuZ3RoO3JldHVybiAwPT09VmU/IiI6MD09PWFy''@;'; put 'put ''Z3VtZW50cy5sZW5ndGg/eCh0aGlzLDAsVmUpOmllLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sRi5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKFZlKXtpZighRi5pc0J1ZmZlcihWZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO3JldHVybiB0aGlz''@;'; put 'put ''PT09VmV8fDA9PT1GLmNvbXBhcmUodGhpcyxWZSl9LEYucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXt2YXIgVmU9IiIsa2U9cS5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gVmU9dGhpcy50b1N0cmluZygiaGV4IiwwLGtlKS5yZXBsYWNlKC8oLnsyfSkvZywiJDEgIikudHJpbSgpLHRo''@;'; put 'put ''aXMubGVuZ3RoPmtlJiYoVmUrPSIgLi4uICIpLCI8QnVmZmVyICIrVmUrIj4ifSxnJiYoRi5wcm90b3R5cGVbZ109Ri5wcm90b3R5cGUuaW5zcGVjdCksRi5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihWZSxrZSxBZSxfdCxydCl7aWYoRGUoVmUsVWludDhBcnJheSkmJihWZT1GLmZyb20o''@;'; put 'put ''VmUsVmUub2Zmc2V0LFZlLmJ5dGVMZW5ndGgpKSwhRi5pc0J1ZmZlcihWZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ0YXJnZXQiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXkuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgVmUpO2lmKHZvaWQg''@;'; put 'put ''MD09PWtlJiYoa2U9MCksdm9pZCAwPT09QWUmJihBZT1WZT9WZS5sZW5ndGg6MCksdm9pZCAwPT09X3QmJihfdD0wKSx2b2lkIDA9PT1ydCYmKHJ0PXRoaXMubGVuZ3RoKSxrZTwwfHxBZT5WZS5sZW5ndGh8fF90PDB8fHJ0PnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQg''@;'; put 'put ''b2YgcmFuZ2UgaW5kZXgiKTtpZihfdD49cnQmJmtlPj1BZSlyZXR1cm4gMDtpZihfdD49cnQpcmV0dXJuLTE7aWYoa2U+PUFlKXJldHVybiAxO2lmKHRoaXM9PT1WZSlyZXR1cm4gMDtmb3IodmFyIFFlPShydD4+Pj0wKS0oX3Q+Pj49MCksZG49KEFlPj4+PTApLShrZT4+Pj0wKSx5dD1NYXRo''@;'; put 'put ''Lm1pbihRZSxkbiksTXQ9dGhpcy5zbGljZShfdCxydCksRHQ9VmUuc2xpY2Uoa2UsQWUpLGl0PTA7aXQ8eXQ7KytpdClpZihNdFtpdF0hPT1EdFtpdF0pe1FlPU10W2l0XSxkbj1EdFtpdF07YnJlYWt9cmV0dXJuIFFlPGRuPy0xOmRuPFFlPzE6MH0sRi5wcm90b3R5cGUuaW5jbHVkZXM9ZnVu''@;'; put 'put ''Y3Rpb24oVmUsa2UsQWUpe3JldHVybi0xIT09dGhpcy5pbmRleE9mKFZlLGtlLEFlKX0sRi5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbihWZSxrZSxBZSl7cmV0dXJuIG1lKHRoaXMsVmUsa2UsQWUsITApfSxGLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihWZSxrZSxBZSl7cmV0''@;'; put 'put ''dXJuIG1lKHRoaXMsVmUsa2UsQWUsITEpfSxGLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihWZSxrZSxBZSxfdCl7aWYodm9pZCAwPT09a2UpX3Q9InV0ZjgiLEFlPXRoaXMubGVuZ3RoLGtlPTA7ZWxzZSBpZih2b2lkIDA9PT1BZSYmInN0cmluZyI9PXR5cGVvZiBrZSlfdD1rZSxBZT10aGlz''@;'; put 'put ''Lmxlbmd0aCxrZT0wO2Vsc2V7aWYoIWlzRmluaXRlKGtlKSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkIik7a2U+Pj49MCxpc0Zpbml0ZShBZSk/KEFlPj4+PTAsdm9pZCAwPT09''@;'; put 'put ''X3QmJihfdD0idXRmOCIpKTooX3Q9QWUsQWU9dm9pZCAwKX12YXIgcnQ9dGhpcy5sZW5ndGgta2U7aWYoKHZvaWQgMD09PUFlfHxBZT5ydCkmJihBZT1ydCksVmUubGVuZ3RoPjAmJihBZTwwfHxrZTwwKXx8a2U+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkF0dGVtcHQgdG8g''@;'; put 'put ''d3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzIik7X3R8fChfdD0idXRmOCIpO2Zvcih2YXIgUWU9ITE7Oylzd2l0Y2goX3Qpe2Nhc2UiaGV4IjpyZXR1cm4gVGUodGhpcyxWZSxrZSxBZSk7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gU2UodGhpcyxWZSxrZSxBZSk7Y2FzZSJhc2Np''@;'; put 'put ''aSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gemUodGhpcyxWZSxrZSxBZSk7Y2FzZSJiYXNlNjQiOnJldHVybiBWKHRoaXMsVmUsa2UsQWUpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4gcCh0aGlzLFZlLGtlLEFl''@;'; put 'put ''KTtkZWZhdWx0OmlmKFFlKXRocm93IG5ldyBUeXBlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrX3QpO190PSgiIitfdCkudG9Mb3dlckNhc2UoKSxRZT0hMH19LEYucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOiJCdWZmZXIiLGRhdGE6QXJyYXkucHJvdG90eXBl''@;'; put 'put ''LnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyIEM9NDA5NjtmdW5jdGlvbiBIKEllLFZlLGtlKXt2YXIgQWU9IiI7a2U9TWF0aC5taW4oSWUubGVuZ3RoLGtlKTtmb3IodmFyIF90PVZlO190PGtlOysrX3QpQWUrPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JkllW190XSk7cmV0''@;'; put 'put ''dXJuIEFlfWZ1bmN0aW9uIGooSWUsVmUsa2Upe3ZhciBBZT0iIjtrZT1NYXRoLm1pbihJZS5sZW5ndGgsa2UpO2Zvcih2YXIgX3Q9VmU7X3Q8a2U7KytfdClBZSs9U3RyaW5nLmZyb21DaGFyQ29kZShJZVtfdF0pO3JldHVybiBBZX1mdW5jdGlvbiBFKEllLFZlLGtlKXt2YXIgQWU9SWUubGVu''@;'; put 'put ''Z3RoOyghVmV8fFZlPDApJiYoVmU9MCksKCFrZXx8a2U8MHx8a2U+QWUpJiYoa2U9QWUpO2Zvcih2YXIgX3Q9IiIscnQ9VmU7cnQ8a2U7KytydClfdCs9UmVbSWVbcnRdXTtyZXR1cm4gX3R9ZnVuY3Rpb24gbShJZSxWZSxrZSl7Zm9yKHZhciBBZT1JZS5zbGljZShWZSxrZSksX3Q9IiIscnQ9''@;'; put 'put ''MDtydDxBZS5sZW5ndGgtMTtydCs9MilfdCs9U3RyaW5nLmZyb21DaGFyQ29kZShBZVtydF0rMjU2KkFlW3J0KzFdKTtyZXR1cm4gX3R9ZnVuY3Rpb24gQShJZSxWZSxrZSl7aWYoSWUlMSE9MHx8SWU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IGlzIG5vdCB1aW50Iik7aWYoSWUr''@;'; put 'put ''VmU+a2UpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgiKX1mdW5jdGlvbiBvZShJZSxWZSxrZSxBZSxfdCxydCl7aWYoIUYuaXNCdWZmZXIoSWUpKXRocm93IG5ldyBUeXBlRXJyb3IoJyJidWZmZXIiIGFyZ3VtZW50IG11c3QgYmUg''@;'; put 'put ''YSBCdWZmZXIgaW5zdGFuY2UnKTtpZihWZT5fdHx8VmU8cnQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKGtlK0FlPkllLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24g''@;'; put 'put ''dGUoSWUsVmUsa2UsQWUsX3QscnQpe2lmKGtlK0FlPkllLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIik7aWYoa2U8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW5kZXggb3V0IG9mIHJhbmdlIil9ZnVuY3Rpb24gc2UoSWUsVmUsa2UsQWUsX3Qpe3Jl''@;'; put 'put ''dHVybiBWZT0rVmUsa2U+Pj49MCxfdHx8dGUoSWUsMCxrZSw0KSx5LndyaXRlKEllLFZlLGtlLEFlLDIzLDQpLGtlKzR9ZnVuY3Rpb24gd2UoSWUsVmUsa2UsQWUsX3Qpe3JldHVybiBWZT0rVmUsa2U+Pj49MCxfdHx8dGUoSWUsMCxrZSw4KSx5LndyaXRlKEllLFZlLGtlLEFlLDUyLDgpLGtl''@;'; put 'put ''Kzh9Ri5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oVmUsa2Upe3ZhciBBZT10aGlzLmxlbmd0aDsoVmU9fn5WZSk8MD8oVmUrPUFlKTwwJiYoVmU9MCk6VmU+QWUmJihWZT1BZSksKGtlPXZvaWQgMD09PWtlP0FlOn5+a2UpPDA/KGtlKz1BZSk8MCYmKGtlPTApOmtlPkFlJiYoa2U9QWUpLGtl''@;'; put 'put ''PFZlJiYoa2U9VmUpO3ZhciBfdD10aGlzLnN1YmFycmF5KFZlLGtlKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKF90LEYucHJvdG90eXBlKSxfdH0sRi5wcm90b3R5cGUucmVhZFVpbnRMRT1GLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKFZlLGtlLEFlKXtWZT4+Pj0wLGtl''@;'; put 'put ''Pj4+PTAsQWV8fEEoVmUsa2UsdGhpcy5sZW5ndGgpO2Zvcih2YXIgX3Q9dGhpc1tWZV0scnQ9MSxRZT0wOysrUWU8a2UmJihydCo9MjU2KTspX3QrPXRoaXNbVmUrUWVdKnJ0O3JldHVybiBfdH0sRi5wcm90b3R5cGUucmVhZFVpbnRCRT1GLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9u''@;'; put 'put ''KFZlLGtlLEFlKXtWZT4+Pj0wLGtlPj4+PTAsQWV8fEEoVmUsa2UsdGhpcy5sZW5ndGgpO2Zvcih2YXIgX3Q9dGhpc1tWZSstLWtlXSxydD0xO2tlPjAmJihydCo9MjU2KTspX3QrPXRoaXNbVmUrLS1rZV0qcnQ7cmV0dXJuIF90fSxGLnByb3RvdHlwZS5yZWFkVWludDg9Ri5wcm90b3R5cGUu''@;'; put 'put ''cmVhZFVJbnQ4PWZ1bmN0aW9uKFZlLGtlKXtyZXR1cm4gVmU+Pj49MCxrZXx8QShWZSwxLHRoaXMubGVuZ3RoKSx0aGlzW1ZlXX0sRi5wcm90b3R5cGUucmVhZFVpbnQxNkxFPUYucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbihWZSxrZSl7cmV0dXJuIFZlPj4+PTAsa2V8fEEoVmUs''@;'; put 'put ''Mix0aGlzLmxlbmd0aCksdGhpc1tWZV18dGhpc1tWZSsxXTw8OH0sRi5wcm90b3R5cGUucmVhZFVpbnQxNkJFPUYucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbihWZSxrZSl7cmV0dXJuIFZlPj4+PTAsa2V8fEEoVmUsMix0aGlzLmxlbmd0aCksdGhpc1tWZV08PDh8dGhpc1tWZSsx''@;'; put 'put ''XX0sRi5wcm90b3R5cGUucmVhZFVpbnQzMkxFPUYucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbihWZSxrZSl7cmV0dXJuIFZlPj4+PTAsa2V8fEEoVmUsNCx0aGlzLmxlbmd0aCksKHRoaXNbVmVdfHRoaXNbVmUrMV08PDh8dGhpc1tWZSsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbVmUr''@;'; put 'put ''M119LEYucHJvdG90eXBlLnJlYWRVaW50MzJCRT1GLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24oVmUsa2Upe3JldHVybiBWZT4+Pj0wLGtlfHxBKFZlLDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbVmVdKyh0aGlzW1ZlKzFdPDwxNnx0aGlzW1ZlKzJdPDw4fHRoaXNbVmUr''@;'; put 'put ''M10pfSxGLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24oVmUsa2UsQWUpe1ZlPj4+PTAsa2U+Pj49MCxBZXx8QShWZSxrZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBfdD10aGlzW1ZlXSxydD0xLFFlPTA7KytRZTxrZSYmKHJ0Kj0yNTYpOylfdCs9dGhpc1tWZStRZV0qcnQ7cmV0dXJuIF90''@;'; put 'put ''Pj0ocnQqPTEyOCkmJihfdC09TWF0aC5wb3coMiw4KmtlKSksX3R9LEYucHJvdG90eXBlLnJlYWRJbnRCRT1mdW5jdGlvbihWZSxrZSxBZSl7VmU+Pj49MCxrZT4+Pj0wLEFlfHxBKFZlLGtlLHRoaXMubGVuZ3RoKTtmb3IodmFyIF90PWtlLHJ0PTEsUWU9dGhpc1tWZSstLV90XTtfdD4wJiYo''@;'; put 'put ''cnQqPTI1Nik7KVFlKz10aGlzW1ZlKy0tX3RdKnJ0O3JldHVybiBRZT49KHJ0Kj0xMjgpJiYoUWUtPU1hdGgucG93KDIsOCprZSkpLFFlfSxGLnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbihWZSxrZSl7cmV0dXJuIFZlPj4+PTAsa2V8fEEoVmUsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNb''@;'; put 'put ''VmVdPy0xKigyNTUtdGhpc1tWZV0rMSk6dGhpc1tWZV19LEYucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKFZlLGtlKXtWZT4+Pj0wLGtlfHxBKFZlLDIsdGhpcy5sZW5ndGgpO3ZhciBBZT10aGlzW1ZlXXx0aGlzW1ZlKzFdPDw4O3JldHVybiAzMjc2OCZBZT80Mjk0OTAxNzYwfEFl''@;'; put 'put ''OkFlfSxGLnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbihWZSxrZSl7VmU+Pj49MCxrZXx8QShWZSwyLHRoaXMubGVuZ3RoKTt2YXIgQWU9dGhpc1tWZSsxXXx0aGlzW1ZlXTw8ODtyZXR1cm4gMzI3NjgmQWU/NDI5NDkwMTc2MHxBZTpBZX0sRi5wcm90b3R5cGUucmVhZEludDMyTEU9''@;'; put 'put ''ZnVuY3Rpb24oVmUsa2Upe3JldHVybiBWZT4+Pj0wLGtlfHxBKFZlLDQsdGhpcy5sZW5ndGgpLHRoaXNbVmVdfHRoaXNbVmUrMV08PDh8dGhpc1tWZSsyXTw8MTZ8dGhpc1tWZSszXTw8MjR9LEYucHJvdG90eXBlLnJlYWRJbnQzMkJFPWZ1bmN0aW9uKFZlLGtlKXtyZXR1cm4gVmU+Pj49MCxr''@;'; put 'put ''ZXx8QShWZSw0LHRoaXMubGVuZ3RoKSx0aGlzW1ZlXTw8MjR8dGhpc1tWZSsxXTw8MTZ8dGhpc1tWZSsyXTw8OHx0aGlzW1ZlKzNdfSxGLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbihWZSxrZSl7cmV0dXJuIFZlPj4+PTAsa2V8fEEoVmUsNCx0aGlzLmxlbmd0aCkseS5yZWFkKHRo''@;'; put 'put ''aXMsVmUsITAsMjMsNCl9LEYucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKFZlLGtlKXtyZXR1cm4gVmU+Pj49MCxrZXx8QShWZSw0LHRoaXMubGVuZ3RoKSx5LnJlYWQodGhpcyxWZSwhMSwyMyw0KX0sRi5wcm90b3R5cGUucmVhZERvdWJsZUxFPWZ1bmN0aW9uKFZlLGtlKXtyZXR1''@;'; put 'put ''cm4gVmU+Pj49MCxrZXx8QShWZSw4LHRoaXMubGVuZ3RoKSx5LnJlYWQodGhpcyxWZSwhMCw1Miw4KX0sRi5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKFZlLGtlKXtyZXR1cm4gVmU+Pj49MCxrZXx8QShWZSw4LHRoaXMubGVuZ3RoKSx5LnJlYWQodGhpcyxWZSwhMSw1Miw4KX0s''@;'; put 'put ''Ri5wcm90b3R5cGUud3JpdGVVaW50TEU9Ri5wcm90b3R5cGUud3JpdGVVSW50TEU9ZnVuY3Rpb24oVmUsa2UsQWUsX3Qpe1ZlPStWZSxrZT4+Pj0wLEFlPj4+PTAsX3R8fG9lKHRoaXMsVmUsa2UsQWUsTWF0aC5wb3coMiw4KkFlKS0xLDApO3ZhciBRZT0xLGRuPTA7Zm9yKHRoaXNba2VdPTI1''@;'; put 'put ''NSZWZTsrK2RuPEFlJiYoUWUqPTI1Nik7KXRoaXNba2UrZG5dPVZlL1FlJjI1NTtyZXR1cm4ga2UrQWV9LEYucHJvdG90eXBlLndyaXRlVWludEJFPUYucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKFZlLGtlLEFlLF90KXtWZT0rVmUsa2U+Pj49MCxBZT4+Pj0wLF90fHxvZSh0aGlz''@;'; put 'put ''LFZlLGtlLEFlLE1hdGgucG93KDIsOCpBZSktMSwwKTt2YXIgUWU9QWUtMSxkbj0xO2Zvcih0aGlzW2tlK1FlXT0yNTUmVmU7LS1RZT49MCYmKGRuKj0yNTYpOyl0aGlzW2tlK1FlXT1WZS9kbiYyNTU7cmV0dXJuIGtlK0FlfSxGLnByb3RvdHlwZS53cml0ZVVpbnQ4PUYucHJvdG90eXBlLndy''@;'; put 'put ''aXRlVUludDg9ZnVuY3Rpb24oVmUsa2UsQWUpe3JldHVybiBWZT0rVmUsa2U+Pj49MCxBZXx8b2UodGhpcyxWZSxrZSwxLDI1NSwwKSx0aGlzW2tlXT0yNTUmVmUsa2UrMX0sRi5wcm90b3R5cGUud3JpdGVVaW50MTZMRT1GLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKFZlLGtl''@;'; put 'put ''LEFlKXtyZXR1cm4gVmU9K1ZlLGtlPj4+PTAsQWV8fG9lKHRoaXMsVmUsa2UsMiw2NTUzNSwwKSx0aGlzW2tlXT0yNTUmVmUsdGhpc1trZSsxXT1WZT4+Pjgsa2UrMn0sRi5wcm90b3R5cGUud3JpdGVVaW50MTZCRT1GLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKFZlLGtlLEFl''@;'; put 'put ''KXtyZXR1cm4gVmU9K1ZlLGtlPj4+PTAsQWV8fG9lKHRoaXMsVmUsa2UsMiw2NTUzNSwwKSx0aGlzW2tlXT1WZT4+PjgsdGhpc1trZSsxXT0yNTUmVmUsa2UrMn0sRi5wcm90b3R5cGUud3JpdGVVaW50MzJMRT1GLnByb3RvdHlwZS53cml0ZVVJbnQzMkxFPWZ1bmN0aW9uKFZlLGtlLEFlKXty''@;'; put 'put ''ZXR1cm4gVmU9K1ZlLGtlPj4+PTAsQWV8fG9lKHRoaXMsVmUsa2UsNCw0Mjk0OTY3Mjk1LDApLHRoaXNba2UrM109VmU+Pj4yNCx0aGlzW2tlKzJdPVZlPj4+MTYsdGhpc1trZSsxXT1WZT4+PjgsdGhpc1trZV09MjU1JlZlLGtlKzR9LEYucHJvdG90eXBlLndyaXRlVWludDMyQkU9Ri5wcm90''@;'; put 'put ''b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihWZSxrZSxBZSl7cmV0dXJuIFZlPStWZSxrZT4+Pj0wLEFlfHxvZSh0aGlzLFZlLGtlLDQsNDI5NDk2NzI5NSwwKSx0aGlzW2tlXT1WZT4+PjI0LHRoaXNba2UrMV09VmU+Pj4xNix0aGlzW2tlKzJdPVZlPj4+OCx0aGlzW2tlKzNdPTI1NSZW''@;'; put 'put ''ZSxrZSs0fSxGLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKFZlLGtlLEFlLF90KXtpZihWZT0rVmUsa2U+Pj49MCwhX3Qpe3ZhciBydD1NYXRoLnBvdygyLDgqQWUtMSk7b2UodGhpcyxWZSxrZSxBZSxydC0xLC1ydCl9dmFyIFFlPTAsZG49MSx5dD0wO2Zvcih0aGlzW2tlXT0yNTUm''@;'; put 'put ''VmU7KytRZTxBZSYmKGRuKj0yNTYpOylWZTwwJiYwPT09eXQmJjAhPT10aGlzW2tlK1FlLTFdJiYoeXQ9MSksdGhpc1trZStRZV09KFZlL2RufDApLXl0JjI1NTtyZXR1cm4ga2UrQWV9LEYucHJvdG90eXBlLndyaXRlSW50QkU9ZnVuY3Rpb24oVmUsa2UsQWUsX3Qpe2lmKFZlPStWZSxrZT4+''@;'; put 'put ''Pj0wLCFfdCl7dmFyIHJ0PU1hdGgucG93KDIsOCpBZS0xKTtvZSh0aGlzLFZlLGtlLEFlLHJ0LTEsLXJ0KX12YXIgUWU9QWUtMSxkbj0xLHl0PTA7Zm9yKHRoaXNba2UrUWVdPTI1NSZWZTstLVFlPj0wJiYoZG4qPTI1Nik7KVZlPDAmJjA9PT15dCYmMCE9PXRoaXNba2UrUWUrMV0mJih5dD0x''@;'; put 'put ''KSx0aGlzW2tlK1FlXT0oVmUvZG58MCkteXQmMjU1O3JldHVybiBrZStBZX0sRi5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKFZlLGtlLEFlKXtyZXR1cm4gVmU9K1ZlLGtlPj4+PTAsQWV8fG9lKHRoaXMsVmUsa2UsMSwxMjcsLTEyOCksVmU8MCYmKFZlPTI1NStWZSsxKSx0aGlzW2tl''@;'; put 'put ''XT0yNTUmVmUsa2UrMX0sRi5wcm90b3R5cGUud3JpdGVJbnQxNkxFPWZ1bmN0aW9uKFZlLGtlLEFlKXtyZXR1cm4gVmU9K1ZlLGtlPj4+PTAsQWV8fG9lKHRoaXMsVmUsa2UsMiwzMjc2NywtMzI3NjgpLHRoaXNba2VdPTI1NSZWZSx0aGlzW2tlKzFdPVZlPj4+OCxrZSsyfSxGLnByb3RvdHlw''@;'; put 'put ''ZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oVmUsa2UsQWUpe3JldHVybiBWZT0rVmUsa2U+Pj49MCxBZXx8b2UodGhpcyxWZSxrZSwyLDMyNzY3LC0zMjc2OCksdGhpc1trZV09VmU+Pj44LHRoaXNba2UrMV09MjU1JlZlLGtlKzJ9LEYucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihW''@;'; put 'put ''ZSxrZSxBZSl7cmV0dXJuIFZlPStWZSxrZT4+Pj0wLEFlfHxvZSh0aGlzLFZlLGtlLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdGhpc1trZV09MjU1JlZlLHRoaXNba2UrMV09VmU+Pj44LHRoaXNba2UrMl09VmU+Pj4xNix0aGlzW2tlKzNdPVZlPj4+MjQsa2UrNH0sRi5wcm90b3R5cGUu''@;'; put 'put ''d3JpdGVJbnQzMkJFPWZ1bmN0aW9uKFZlLGtlLEFlKXtyZXR1cm4gVmU9K1ZlLGtlPj4+PTAsQWV8fG9lKHRoaXMsVmUsa2UsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxWZTwwJiYoVmU9NDI5NDk2NzI5NStWZSsxKSx0aGlzW2tlXT1WZT4+PjI0LHRoaXNba2UrMV09VmU+Pj4xNix0aGlz''@;'; put 'put ''W2tlKzJdPVZlPj4+OCx0aGlzW2tlKzNdPTI1NSZWZSxrZSs0fSxGLnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24oVmUsa2UsQWUpe3JldHVybiBzZSh0aGlzLFZlLGtlLCEwLEFlKX0sRi5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKFZlLGtlLEFlKXtyZXR1cm4gc2Uo''@;'; put 'put ''dGhpcyxWZSxrZSwhMSxBZSl9LEYucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24oVmUsa2UsQWUpe3JldHVybiB3ZSh0aGlzLFZlLGtlLCEwLEFlKX0sRi5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbihWZSxrZSxBZSl7cmV0dXJuIHdlKHRoaXMsVmUsa2UsITEsQWUp''@;'; put 'put ''fSxGLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKFZlLGtlLEFlLF90KXtpZighRi5pc0J1ZmZlcihWZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiYXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyIik7aWYoQWV8fChBZT0wKSwhX3QmJjAhPT1fdCYmKF90PXRoaXMubGVuZ3RoKSxrZT49VmUubGVu''@;'; put 'put ''Z3RoJiYoa2U9VmUubGVuZ3RoKSxrZXx8KGtlPTApLF90PjAmJl90PEFlJiYoX3Q9QWUpLF90PT09QWV8fDA9PT1WZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZihrZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYoQWU8''@;'; put 'put ''MHx8QWU+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihfdDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kcyIpO190PnRoaXMubGVuZ3RoJiYoX3Q9dGhpcy5sZW5ndGgpLFZlLmxlbmd0aC1rZTxf''@;'; put 'put ''dC1BZSYmKF90PVZlLmxlbmd0aC1rZStBZSk7dmFyIHJ0PV90LUFlO3JldHVybiB0aGlzPT09VmUmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluP3RoaXMuY29weVdpdGhpbihrZSxBZSxfdCk6VWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwo''@;'; put 'put ''VmUsdGhpcy5zdWJhcnJheShBZSxfdCksa2UpLHJ0fSxGLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKFZlLGtlLEFlLF90KXtpZigic3RyaW5nIj09dHlwZW9mIFZlKXtpZigic3RyaW5nIj09dHlwZW9mIGtlPyhfdD1rZSxrZT0wLEFlPXRoaXMubGVuZ3RoKToic3RyaW5nIj09dHlwZW9mIEFl''@;'; put 'put ''JiYoX3Q9QWUsQWU9dGhpcy5sZW5ndGgpLHZvaWQgMCE9PV90JiYic3RyaW5nIiE9dHlwZW9mIF90KXRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5nIj09dHlwZW9mIF90JiYhRi5pc0VuY29kaW5nKF90KSl0aHJvdyBuZXcgVHlwZUVy''@;'; put 'put ''cm9yKCJVbmtub3duIGVuY29kaW5nOiAiK190KTtpZigxPT09VmUubGVuZ3RoKXt2YXIgcnQ9VmUuY2hhckNvZGVBdCgwKTsoInV0ZjgiPT09X3QmJnJ0PDEyOHx8ImxhdGluMSI9PT1fdCkmJihWZT1ydCl9fWVsc2UibnVtYmVyIj09dHlwZW9mIFZlP1ZlJj0yNTU6ImJvb2xlYW4iPT10eXBl''@;'; put 'put ''b2YgVmUmJihWZT1OdW1iZXIoVmUpKTtpZihrZTwwfHx0aGlzLmxlbmd0aDxrZXx8dGhpcy5sZW5ndGg8QWUpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk91dCBvZiByYW5nZSBpbmRleCIpO2lmKEFlPD1rZSlyZXR1cm4gdGhpczt2YXIgUWU7aWYoa2U+Pj49MCxBZT12b2lkIDA9PT1BZT90aGlz''@;'; put 'put ''Lmxlbmd0aDpBZT4+PjAsVmV8fChWZT0wKSwibnVtYmVyIj09dHlwZW9mIFZlKWZvcihRZT1rZTtRZTxBZTsrK1FlKXRoaXNbUWVdPVZlO2Vsc2V7dmFyIGRuPUYuaXNCdWZmZXIoVmUpP1ZlOkYuZnJvbShWZSxfdCkseXQ9ZG4ubGVuZ3RoO2lmKDA9PT15dCl0aHJvdyBuZXcgVHlwZUVycm9y''@;'; put 'put ''KCdUaGUgdmFsdWUgIicrVmUrJyIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgInZhbHVlIicpO2ZvcihRZT0wO1FlPEFlLWtlOysrUWUpdGhpc1tRZStrZV09ZG5bUWUleXRdfXJldHVybiB0aGlzfTt2YXIgVWU9L1teKy8wLTlBLVphLXotX10vZztmdW5jdGlvbiBhdChJZSxWZSl7VmU9VmV8''@;'; put 'put ''fDEvMDtmb3IodmFyIGtlLEFlPUllLmxlbmd0aCxfdD1udWxsLHJ0PVtdLFFlPTA7UWU8QWU7KytRZSl7aWYoKGtlPUllLmNoYXJDb2RlQXQoUWUpKT41NTI5NSYma2U8NTczNDQpe2lmKCFfdCl7aWYoa2U+NTYzMTkpeyhWZS09Myk+LTEmJnJ0LnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVl''@;'; put 'put ''fWlmKFFlKzE9PT1BZSl7KFZlLT0zKT4tMSYmcnQucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9X3Q9a2U7Y29udGludWV9aWYoa2U8NTYzMjApeyhWZS09Myk+LTEmJnJ0LnB1c2goMjM5LDE5MSwxODkpLF90PWtlO2NvbnRpbnVlfWtlPTY1NTM2KyhfdC01NTI5Njw8MTB8a2UtNTYzMjAp''@;'; put 'put ''fWVsc2UgX3QmJihWZS09Myk+LTEmJnJ0LnB1c2goMjM5LDE5MSwxODkpO2lmKF90PW51bGwsa2U8MTI4KXtpZigoVmUtPTEpPDApYnJlYWs7cnQucHVzaChrZSl9ZWxzZSBpZihrZTwyMDQ4KXtpZigoVmUtPTIpPDApYnJlYWs7cnQucHVzaChrZT4+NnwxOTIsNjMma2V8MTI4KX1lbHNlIGlm''@;'; put 'put ''KGtlPDY1NTM2KXtpZigoVmUtPTMpPDApYnJlYWs7cnQucHVzaChrZT4+MTJ8MjI0LGtlPj42JjYzfDEyOCw2MyZrZXwxMjgpfWVsc2V7aWYoIShrZTwxMTE0MTEyKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgY29kZSBwb2ludCIpO2lmKChWZS09NCk8MClicmVhaztydC5wdXNoKGtlPj4x''@;'; put 'put ''OHwyNDAsa2U+PjEyJjYzfDEyOCxrZT4+NiY2M3wxMjgsNjMma2V8MTI4KX19cmV0dXJuIHJ0fWZ1bmN0aW9uIFhlKEllKXtyZXR1cm4gSS50b0J5dGVBcnJheShmdW5jdGlvbiBKZShJZSl7aWYoKEllPShJZT1JZS5zcGxpdCgiPSIpWzBdKS50cmltKCkucmVwbGFjZShVZSwiIikpLmxlbmd0''@;'; put 'put ''aDwyKXJldHVybiIiO2Zvcig7SWUubGVuZ3RoJTQhPTA7KUllKz0iPSI7cmV0dXJuIEllfShJZSkpfWZ1bmN0aW9uIGplKEllLFZlLGtlLEFlKXtmb3IodmFyIF90PTA7X3Q8QWUmJiEoX3Qra2U+PVZlLmxlbmd0aHx8X3Q+PUllLmxlbmd0aCk7KytfdClWZVtfdCtrZV09SWVbX3RdO3JldHVy''@;'; put 'put ''biBfdH1mdW5jdGlvbiBEZShJZSxWZSl7cmV0dXJuIEllIGluc3RhbmNlb2YgVmV8fG51bGwhPUllJiZudWxsIT1JZS5jb25zdHJ1Y3RvciYmbnVsbCE9SWUuY29uc3RydWN0b3IubmFtZSYmSWUuY29uc3RydWN0b3IubmFtZT09PVZlLm5hbWV9ZnVuY3Rpb24gRmUoSWUpe3JldHVybiBJZSE9''@;'; put 'put ''SWV9dmFyIFJlPWZ1bmN0aW9uKCl7Zm9yKHZhciBJZT0iMDEyMzQ1Njc4OWFiY2RlZiIsVmU9bmV3IEFycmF5KDI1Niksa2U9MDtrZTwxNjsrK2tlKWZvcih2YXIgQWU9MTYqa2UsX3Q9MDtfdDwxNjsrK190KVZlW0FlK190XT1JZVtrZV0rSWVbX3RdO3JldHVybiBWZX0oKX0sMzI0NzoodWUs''@;'; put 'put ''cSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDI3MDU0KS5CdWZmZXIseT1fKDcwNDUpLlRyYW5zZm9ybSxnPV8oNzg0NTQpLkk7ZnVuY3Rpb24gdyh6KXt5LmNhbGwodGhpcyksdGhpcy5oYXNoTW9kZT0ic3RyaW5nIj09dHlwZW9mIHosdGhpcy5oYXNoTW9kZT90aGlzW3pdPXRoaXMuX2Zp''@;'; put 'put ''bmFsT3JEaWdlc3Q6dGhpcy5maW5hbD10aGlzLl9maW5hbE9yRGlnZXN0LHRoaXMuX2ZpbmFsJiYodGhpcy5fX2ZpbmFsPXRoaXMuX2ZpbmFsLHRoaXMuX2ZpbmFsPW51bGwpLHRoaXMuX2RlY29kZXI9bnVsbCx0aGlzLl9lbmNvZGluZz1udWxsfV8oNzE5OTMpKHcseSk7dmFyIFA9dHlwZW9m''@;'; put 'put ''IFVpbnQ4QXJyYXk8InUiLEY9dHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmdHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXcmJihJLnByb3RvdHlwZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fEkuVFlQRURfQVJSQVlfU1VQUE9SVCk7dy5wcm90b3R5cGUudXBkYXRlPWZ1''@;'; put 'put ''bmN0aW9uKHosTixMKXt2YXIgSz1mdW5jdGlvbiBPKHosTil7aWYoeiBpbnN0YW5jZW9mIEkpcmV0dXJuIHo7aWYoInN0cmluZyI9PXR5cGVvZiB6KXJldHVybiBJLmZyb20oeixOKTtpZihGJiZBcnJheUJ1ZmZlci5pc1ZpZXcoeikpe2lmKDA9PT16LmJ5dGVMZW5ndGgpcmV0dXJuIEkuYWxs''@;'; put 'put ''b2MoMCk7dmFyIEw9SS5mcm9tKHouYnVmZmVyLHouYnl0ZU9mZnNldCx6LmJ5dGVMZW5ndGgpO2lmKEwuYnl0ZUxlbmd0aD09PXouYnl0ZUxlbmd0aClyZXR1cm4gTH1pZihQJiZ6IGluc3RhbmNlb2YgVWludDhBcnJheXx8SS5pc0J1ZmZlcih6KSYmei5jb25zdHJ1Y3RvciYmImZ1bmN0aW9u''@;'; put 'put ''Ij09dHlwZW9mIHouY29uc3RydWN0b3IuaXNCdWZmZXImJnouY29uc3RydWN0b3IuaXNCdWZmZXIoeikpcmV0dXJuIEkuZnJvbSh6KTt0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgImRhdGEiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcgb3IgYW4gaW5zdGFuY2Ugb2YgQnVmZmVy''@;'; put 'put ''LCBUeXBlZEFycmF5LCBvciBEYXRhVmlldy4nKX0oeixOKSxVPXRoaXMuX3VwZGF0ZShLKTtyZXR1cm4gdGhpcy5oYXNoTW9kZT90aGlzOihMJiYoVT10aGlzLl90b1N0cmluZyhVLEwpKSxVKX0sdy5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oKXt9LHcucHJvdG90eXBlLmdl''@;'; put 'put ''dEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGUiKX0sdy5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigidHJ5aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1''@;'; put 'put ''cHBvcnRlZCBzdGF0ZSIpfSx3LnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoInRyeWluZyB0byBzZXQgYWFkIGluIHVuc3VwcG9ydGVkIHN0YXRlIil9LHcucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oeixOLEwpe3ZhciBLO3RyeXt0aGlzLmhhc2hN''@;'; put 'put ''b2RlP3RoaXMuX3VwZGF0ZSh6KTp0aGlzLnB1c2godGhpcy5fdXBkYXRlKHopKX1jYXRjaChVKXtLPVV9ZmluYWxseXtMKEspfX0sdy5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKHope3ZhciBOO3RyeXt0aGlzLnB1c2godGhpcy5fX2ZpbmFsKCkpfWNhdGNoKEwpe049TH16KE4pfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5fZmluYWxPckRpZ2VzdD1mdW5jdGlvbih6KXt2YXIgTj10aGlzLl9fZmluYWwoKXx8SS5hbGxvYygwKTtyZXR1cm4geiYmKE49dGhpcy5fdG9TdHJpbmcoTix6LCEwKSksTn0sdy5wcm90b3R5cGUuX3RvU3RyaW5nPWZ1bmN0aW9uKHosTixMKXtpZih0aGlzLl9kZWNvZGVyfHwo''@;'; put 'put ''dGhpcy5fZGVjb2Rlcj1uZXcgZyhOKSx0aGlzLl9lbmNvZGluZz1OKSx0aGlzLl9lbmNvZGluZyE9PU4pdGhyb3cgbmV3IEVycm9yKCJjYW5cdTIwMTl0IHN3aXRjaCBlbmNvZGluZ3MiKTt2YXIgSz10aGlzLl9kZWNvZGVyLndyaXRlKHopO3JldHVybiBMJiYoSys9dGhpcy5fZGVjb2Rlci5l''@;'; put 'put ''bmQoKSksS30sdWUuZXhwb3J0cz13fSwyNzYzNzoodWUscSxfKT0+e2Z1bmN0aW9uIFkoWCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChYKX1xLmlzQXJyYXk9ZnVuY3Rpb24gSShYKXtyZXR1cm4gQXJyYXkuaXNBcnJheT9BcnJheS5pc0FycmF5KFgpOiJbb2JqZWN0''@;'; put 'put ''IEFycmF5XSI9PT1ZKFgpfSxxLmlzQm9vbGVhbj1mdW5jdGlvbiB5KFgpe3JldHVybiJib29sZWFuIj09dHlwZW9mIFh9LHEuaXNOdWxsPWZ1bmN0aW9uIGcoWCl7cmV0dXJuIG51bGw9PT1YfSxxLmlzTnVsbE9yVW5kZWZpbmVkPWZ1bmN0aW9uIEIoWCl7cmV0dXJuIG51bGw9PVh9LHEuaXNO''@;'; put 'put ''dW1iZXI9ZnVuY3Rpb24gdyhYKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIFh9LHEuaXNTdHJpbmc9ZnVuY3Rpb24gUChYKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIFh9LHEuaXNTeW1ib2w9ZnVuY3Rpb24gRihYKXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIFh9LHEuaXNVbmRlZmluZWQ9ZnVu''@;'; put 'put ''Y3Rpb24gTyhYKXtyZXR1cm4gdm9pZCAwPT09WH0scS5pc1JlZ0V4cD1mdW5jdGlvbiB6KFgpe3JldHVybiJbb2JqZWN0IFJlZ0V4cF0iPT09WShYKX0scS5pc09iamVjdD1mdW5jdGlvbiBOKFgpe3JldHVybiJvYmplY3QiPT10eXBlb2YgWCYmbnVsbCE9PVh9LHEuaXNEYXRlPWZ1bmN0aW9u''@;'; put 'put ''IEwoWCl7cmV0dXJuIltvYmplY3QgRGF0ZV0iPT09WShYKX0scS5pc0Vycm9yPWZ1bmN0aW9uIEsoWCl7cmV0dXJuIltvYmplY3QgRXJyb3JdIj09PVkoWCl8fFggaW5zdGFuY2VvZiBFcnJvcn0scS5pc0Z1bmN0aW9uPWZ1bmN0aW9uIFUoWCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIFh9''@;'; put 'put ''LHEuaXNQcmltaXRpdmU9ZnVuY3Rpb24gVyhYKXtyZXR1cm4gbnVsbD09PVh8fCJib29sZWFuIj09dHlwZW9mIFh8fCJudW1iZXIiPT10eXBlb2YgWHx8InN0cmluZyI9PXR5cGVvZiBYfHwic3ltYm9sIj09dHlwZW9mIFh8fHR5cGVvZiBYPiJ1In0scS5pc0J1ZmZlcj1fKDgzODM4KS5CdWZm''@;'; put 'put ''ZXIuaXNCdWZmZXJ9LDg3MzAzOih1ZSxxLF8pPT57dmFyIEk9Xyg5MDUxOCkseT1fKDg5NjA2KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKEYpe3JldHVybiBuZXcgQihGKX07dmFyIGc9e3NlY3AyNTZrMTp7bmFtZToic2VjcDI1NmsxIixieXRlTGVuZ3RoOjMyfSxzZWNwMjI0cjE6e25hbWU6InAy''@;'; put 'put ''MjQiLGJ5dGVMZW5ndGg6Mjh9LHByaW1lMjU2djE6e25hbWU6InAyNTYiLGJ5dGVMZW5ndGg6MzJ9LHByaW1lMTkydjE6e25hbWU6InAxOTIiLGJ5dGVMZW5ndGg6MjR9LGVkMjU1MTk6e25hbWU6ImVkMjU1MTkiLGJ5dGVMZW5ndGg6MzJ9LHNlY3AzODRyMTp7bmFtZToicDM4NCIsYnl0ZUxl''@;'; put 'put ''bmd0aDo0OH0sc2VjcDUyMXIxOntuYW1lOiJwNTIxIixieXRlTGVuZ3RoOjY2fX07ZnVuY3Rpb24gQihQKXt0aGlzLmN1cnZlVHlwZT1nW1BdLHRoaXMuY3VydmVUeXBlfHwodGhpcy5jdXJ2ZVR5cGU9e25hbWU6UH0pLHRoaXMuY3VydmU9bmV3IEkuZWModGhpcy5jdXJ2ZVR5cGUubmFtZSks''@;'; put 'put ''dGhpcy5rZXlzPXZvaWQgMH1mdW5jdGlvbiB3KFAsRixPKXtBcnJheS5pc0FycmF5KFApfHwoUD1QLnRvQXJyYXkoKSk7dmFyIHo9bmV3IEJ1ZmZlcihQKTtpZihPJiZ6Lmxlbmd0aDxPKXt2YXIgTj1uZXcgQnVmZmVyKE8tei5sZW5ndGgpO04uZmlsbCgwKSx6PUJ1ZmZlci5jb25jYXQoW04s''@;'; put 'put ''el0pfXJldHVybiBGP3oudG9TdHJpbmcoRik6en1nLnAyMjQ9Zy5zZWNwMjI0cjEsZy5wMjU2PWcuc2VjcDI1NnIxPWcucHJpbWUyNTZ2MSxnLnAxOTI9Zy5zZWNwMTkycjE9Zy5wcmltZTE5MnYxLGcucDM4ND1nLnNlY3AzODRyMSxnLnA1MjE9Zy5zZWNwNTIxcjEsQi5wcm90b3R5cGUuZ2Vu''@;'; put 'put ''ZXJhdGVLZXlzPWZ1bmN0aW9uKFAsRil7cmV0dXJuIHRoaXMua2V5cz10aGlzLmN1cnZlLmdlbktleVBhaXIoKSx0aGlzLmdldFB1YmxpY0tleShQLEYpfSxCLnByb3RvdHlwZS5jb21wdXRlU2VjcmV0PWZ1bmN0aW9uKFAsRixPKXtyZXR1cm4gRj1GfHwidXRmOCIsQnVmZmVyLmlzQnVmZmVy''@;'; put 'put ''KFApfHwoUD1uZXcgQnVmZmVyKFAsRikpLHcodGhpcy5jdXJ2ZS5rZXlGcm9tUHVibGljKFApLmdldFB1YmxpYygpLm11bCh0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpKS5nZXRYKCksTyx0aGlzLmN1cnZlVHlwZS5ieXRlTGVuZ3RoKX0sQi5wcm90b3R5cGUuZ2V0UHVibGljS2V5PWZ1bmN0aW9u''@;'; put 'put ''KFAsRil7dmFyIE89dGhpcy5rZXlzLmdldFB1YmxpYygiY29tcHJlc3NlZCI9PT1GLCEwKTtyZXR1cm4iaHlicmlkIj09PUYmJihPWzBdPU9bTy5sZW5ndGgtMV0lMj83OjYpLHcoTyxQKX0sQi5wcm90b3R5cGUuZ2V0UHJpdmF0ZUtleT1mdW5jdGlvbihQKXtyZXR1cm4gdyh0aGlzLmtleXMu''@;'; put 'put ''Z2V0UHJpdmF0ZSgpLFApfSxCLnByb3RvdHlwZS5zZXRQdWJsaWNLZXk9ZnVuY3Rpb24oUCxGKXtyZXR1cm4gRj1GfHwidXRmOCIsQnVmZmVyLmlzQnVmZmVyKFApfHwoUD1uZXcgQnVmZmVyKFAsRikpLHRoaXMua2V5cy5faW1wb3J0UHVibGljKFApLHRoaXN9LEIucHJvdG90eXBlLnNldFBy''@;'; put 'put ''aXZhdGVLZXk9ZnVuY3Rpb24oUCxGKXtGPUZ8fCJ1dGY4IixCdWZmZXIuaXNCdWZmZXIoUCl8fChQPW5ldyBCdWZmZXIoUCxGKSk7dmFyIE89bmV3IHkoUCk7cmV0dXJuIE89Ty50b1N0cmluZygxNiksdGhpcy5rZXlzPXRoaXMuY3VydmUuZ2VuS2V5UGFpcigpLHRoaXMua2V5cy5faW1wb3J0''@;'; put 'put ''UHJpdmF0ZShPKSx0aGlzfX0sODk2MDY6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSx5KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZyhWLHApe2lmKCFWKXRocm93IG5ldyBFcnJvcihwfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIEIoVixwKXtWLnN1cGVyXz1wO3ZhciBiPWZ1''@;'; put 'put ''bmN0aW9uKCl7fTtiLnByb3RvdHlwZT1wLnByb3RvdHlwZSxWLnByb3RvdHlwZT1uZXcgYixWLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1WfWZ1bmN0aW9uIHcoVixwLGIpe2lmKHcuaXNCTihWKSlyZXR1cm4gVjt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAs''@;'; put 'put ''dGhpcy5yZWQ9bnVsbCxudWxsIT09ViYmKCgibGUiPT09cHx8ImJlIj09PXApJiYoYj1wLHA9MTApLHRoaXMuX2luaXQoVnx8MCxwfHwxMCxifHwiYmUiKSl9dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBJP0kuZXhwb3J0cz13OnkuQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7UD10eXBl''@;'; put 'put ''b2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZmZXI6Xyg3Nzk2NSkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKFYscCl7dmFyIGI9Vi5jaGFyQ29kZUF0KHApO3JldHVybiBiPj02NSYmYjw9NzA/Yi01NTpiPj05NyYmYjw9MTAyP2ItODc6Yi00OCYx''@;'; put 'put ''NX1mdW5jdGlvbiBPKFYscCxiKXt2YXIgeD1GKFYsYik7cmV0dXJuIGItMT49cCYmKHh8PUYoVixiLTEpPDw0KSx4fWZ1bmN0aW9uIHooVixwLGIseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1pbihWLmxlbmd0aCxiKSxIPXA7SDxUO0grKyl7dmFyIGo9Vi5jaGFyQ29kZUF0KEgpLTQ4O0MqPXgs''@;'; put 'put ''Qys9aj49NDk/ai00OSsxMDpqPj0xNz9qLTE3KzEwOmp9cmV0dXJuIEN9dy5pc0JOPWZ1bmN0aW9uKHApe3JldHVybiBwIGluc3RhbmNlb2Ygd3x8bnVsbCE9PXAmJiJvYmplY3QiPT10eXBlb2YgcCYmcC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXko''@;'; put 'put ''cC53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPjA/cDpifSx3Lm1pbj1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKTwwP3A6Yn0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24ocCxiLHgpe2lmKCJudW1iZXIiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5f''@;'; put 'put ''aW5pdE51bWJlcihwLGIseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0QXJyYXkocCxiLHgpOyJoZXgiPT09YiYmKGI9MTYpLGcoYj09PSgwfGIpJiZiPj0yJiZiPD0zNik7dmFyIEM9MDsiLSI9PT0ocD1wLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVsw''@;'; put 'put ''XSYmKEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8cC5sZW5ndGgmJigxNj09PWI/dGhpcy5fcGFyc2VIZXgocCxDLHgpOih0aGlzLl9wYXJzZUJhc2UocCxiLEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1m''@;'; put 'put ''dW5jdGlvbihwLGIseCl7cDwwJiYodGhpcy5uZWdhdGl2ZT0xLHA9LXApLHA8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnBdLHRoaXMubGVuZ3RoPTEpOnA8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxl''@;'; put 'put ''bmd0aD0yKTooZyhwPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnAscC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVu''@;'; put 'put ''Y3Rpb24ocCxiLHgpe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwLmxlbmd0aCkscC5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwocC5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgp''@;'; put 'put ''O2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIgVCxILGo9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MtMV08PDh8cFtDLTJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53''@;'; put 'put ''b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsrKTtlbHNlIGlmKCJsZSI9PT14KWZvcihDPTAsVD0wO0M8cC5sZW5ndGg7Qys9Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQysxXTw8OHxwW0MrMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRz''@;'; put 'put ''W1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihwLGIseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChwLmxlbmd0aC1iKS82KSx0aGlzLndvcmRzPW5ldyBBcnJh''@;'; put 'put ''eSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBqLFQ9MCxIPTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMTtDPj1iO0MtPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0x''@;'; put 'put ''OCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0ocC5sZW5ndGgtYiklMj09MD9iKzE6YjtDPHAubGVuZ3RoO0MrPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQr''@;'; put 'put ''PTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHAsYix4KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEwODg2MztUKj1iKUMrKztDLS0sVD1UL2J8MDtmb3IodmFyIEg9cC5sZW5ndGgteCxqPUglQyxFPU1h''@;'; put 'put ''dGgubWluKEgsSC1qKSt4LG09MCxBPXg7QTxFO0ErPUMpbT16KHAsQSxBK0MsYiksdGhpcy5pbXVsbihUKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKTtpZigwIT09ail7dmFyIG9lPTE7Zm9yKG09eihwLEEscC5sZW5ndGgsYiksQT0w''@;'; put 'put ''O0E8ajtBKyspb2UqPWI7dGhpcy5pbXVsbihvZSksdGhpcy53b3Jkc1swXSttPDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHApe3Aud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3Io''@;'; put 'put ''dmFyIGI9MDtiPHRoaXMubGVuZ3RoO2IrKylwLndvcmRzW2JdPXRoaXMud29yZHNbYl07cC5sZW5ndGg9dGhpcy5sZW5ndGgscC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHAucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwpO3JldHVy''@;'; put 'put ''biB0aGlzLmNvcHkocCkscH0sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHA7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10''@;'; put 'put ''aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30s''@;'; put 'put ''dy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJOLVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgTj1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAw''@;'; put 'put ''MDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAiXSxMPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEs9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0Njcy''@;'; put 'put ''MSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0''@;'; put 'put ''OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVyhWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmU7dmFyIHg9Vi5sZW5ndGgrcC5sZW5ndGh8MDtiLmxlbmd0aD14LHg9eC0xfDA7dmFyIEM9''@;'; put 'put ''MHxWLndvcmRzWzBdLFQ9MHxwLndvcmRzWzBdLEg9QypULEU9SC82NzEwODg2NHwwO2Iud29yZHNbMF09NjcxMDg4NjMmSDtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2LG9lPTY3MTA4ODYzJkUsdGU9TWF0aC5taW4obSxwLmxlbmd0aC0xKSxzZT1NYXRoLm1heCgwLG0t''@;'; put 'put ''Vi5sZW5ndGgrMSk7c2U8PXRlO3NlKyspQSs9KEg9KEM9MHxWLndvcmRzW20tc2V8MF0pKihUPTB8cC53b3Jkc1tzZV0pK29lKS82NzEwODg2NHwwLG9lPTY3MTA4ODYzJkg7Yi53b3Jkc1ttXT0wfG9lLEU9MHxBfXJldHVybiAwIT09RT9iLndvcmRzW21dPTB8RTpiLmxlbmd0aC0tLGIuc3Ry''@;'; put 'put ''aXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihwLGIpe3ZhciB4O2lmKGI9MHxifHwxLDE2PT09KHA9cHx8MTApfHwiaGV4Ij09PXApe3g9IiI7Zm9yKHZhciBDPTAsVD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9dGhpcy53b3Jkc1tIXSxFPSgxNjc3NzIxNSYoajw8''@;'; put 'put ''Q3xUKSkudG9TdHJpbmcoMTYpO1Q9aj4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYmKEMtPTI2LEgtLSkseD0wIT09VHx8SCE9PXRoaXMubGVuZ3RoLTE/Tls2LUUubGVuZ3RoXStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygxNikreCk7eC5sZW5ndGglYiE9MDspeD0iMCIr''@;'; put 'put ''eDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKHA9PT0oMHxwKSYmcD49MiYmcDw9MzYpe3ZhciBtPUxbcF0sQT1LW3BdO3g9IiI7dmFyIG9lPXRoaXMuY2xvbmUoKTtmb3Iob2UubmVnYXRpdmU9MDshb2UuaXNaZXJvKCk7KXt2YXIgdGU9b2UubW9kbihBKS50b1N0''@;'; put 'put ''cmluZyhwKTt4PShvZT1vZS5pZGl2bihBKSkuaXNaZXJvKCk/dGUreDpOW20tdGUubGVuZ3RoXSt0ZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWcoITEsIkJhc2Ugc2hv''@;'; put 'put ''dWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgcD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/cCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3Ar''@;'; put 'put ''PTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZnKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tcDpwfSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gdGhpcy50b1N0cmluZygxNil9LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHAsYil7cmV0dXJuIGcodHlwZW9mIFA8InUiKSx0aGlzLnRvQXJyYXlMaWtlKFAscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFy''@;'; put 'put ''cmF5LHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz10aGlzLmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7ZyhDPD1ULCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksZyhUPjAsIlJlcXVlc3RlZCBhcnJheSBs''@;'; put 'put ''ZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRSxtLEg9ImxlIj09PWIsaj1uZXcgcChUKSxBPXRoaXMuY2xvbmUoKTtpZihIKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW21dPUU7Zm9yKDttPFQ7bSsrKWpbbV09MH1lbHNle2Zvciht''@;'; put 'put ''PTA7bTxULUM7bSsrKWpbbV09MDtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW1QtbS0xXT1FfXJldHVybiBqfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24ocCl7cmV0dXJuIDMyLU1hdGguY2x6MzIocCl9OmZ1''@;'; put 'put ''bmN0aW9uKHApe3ZhciBiPXAseD0wO3JldHVybiBiPj00MDk2JiYoeCs9MTMsYj4+Pj0xMyksYj49NjQmJih4Kz03LGI+Pj49NyksYj49OCYmKHgrPTQsYj4+Pj00KSxiPj0yJiYoeCs9MixiPj4+PTIpLHgrYn0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHApe2lmKDA9PT1wKXJl''@;'; put 'put ''dHVybiAyNjt2YXIgYj1wLHg9MDtyZXR1cm4gODE5MSZifHwoeCs9MTMsYj4+Pj0xMyksMTI3JmJ8fCh4Kz03LGI+Pj49NyksMTUmYnx8KHgrPTQsYj4+Pj00KSwzJmJ8fCh4Kz0yLGI+Pj49MiksMSZifHx4KysseH0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIGI9dGhp''@;'; put 'put ''cy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrYn0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgcD0wLGI9MDtiPHRoaXMubGVuZ3RoO2IrKyl7dmFy''@;'; put 'put ''IHg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tiXSk7aWYocCs9eCwyNiE9PXgpYnJlYWt9cmV0dXJuIHB9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihw''@;'; put 'put ''KXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihwKS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnRlc3RuKHAtMSk/dGhpcy5ub3RuKHApLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25l''@;'; put 'put ''KCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwo''@;'; put 'put ''dGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihwKXtmb3IoO3RoaXMubGVuZ3RoPHAubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBiPTA7YjxwLmxlbmd0aDtiKyspdGhpcy53b3Jkc1tiXT10aGlzLndvcmRzW2JdfHAu''@;'; put 'put ''d29yZHNbYl07cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdW9yKHApfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/''@;'; put 'put ''dGhpcy5jbG9uZSgpLmlvcihwKTpwLmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3RvdHlwZS51b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHApOnAuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlv''@;'; put 'put ''bihwKXt2YXIgYjtiPXRoaXMubGVuZ3RoPnAubGVuZ3RoP3A6dGhpcztmb3IodmFyIHg9MDt4PGIubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPXRoaXMud29yZHNbeF0mcC53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYW5k''@;'; put 'put ''PWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdWFuZChwKX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChwKTpwLmNsb25lKCkuaWFuZCh0aGlzKX0s''@;'; put 'put ''dy5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHApOnAuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24ocCl7dmFyIGIseDt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oYj10''@;'; put 'put ''aGlzLHg9cCk6KGI9cCx4PXRoaXMpO2Zvcih2YXIgQz0wO0M8eC5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109Yi53b3Jkc1tDXV54LndvcmRzW0NdO2lmKHRoaXMhPT1iKWZvcig7QzxiLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxl''@;'; put 'put ''bmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1eG9yKHApfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xv''@;'; put 'put ''bmUoKS5peG9yKHApOnAuY2xvbmUoKS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IocCk6cC5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihw''@;'; put 'put ''KXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9MHxNYXRoLmNlaWwocC8yNikseD1wJTI2O3RoaXMuX2V4cGFuZChiKSx4PjAmJmItLTtmb3IodmFyIEM9MDtDPGI7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmfnRoaXMud29yZHNbQ107cmV0dXJuIHg+MCYmKHRoaXMud29y''@;'; put 'put ''ZHNbQ109fnRoaXMud29yZHNbQ10mNjcxMDg4NjM+PjI2LXgpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHApfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHAsYil7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+''@;'; put 'put ''PTApO3ZhciB4PXAvMjZ8MCxDPXAlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRoaXMud29yZHNbeF09Yj90aGlzLndvcmRzW3hdfDE8PEM6dGhpcy53b3Jkc1t4XSZ+KDE8PEMpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwKXt2YXIgYix4LEM7aWYoMCE9''@;'; put 'put ''PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZSlyZXR1cm4gcC5uZWdhdGl2ZT0wLGI9dGhp''@;'; put 'put ''cy5pc3ViKHApLHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPnAubGVuZ3RoPyh4PXRoaXMsQz1wKTooeD1wLEM9dGhpcyk7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKGI9KDB8eC53b3Jkc1tIXSkrKDB8Qy53b3Jk''@;'; put 'put ''c1tIXSkrVCksVD1iPj4+MjY7Zm9yKDswIT09VCYmSDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKStUKSxUPWI+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1ULHRoaXMubGVuZ3Ro''@;'; put 'put ''Kys7ZWxzZSBpZih4IT09dGhpcylmb3IoO0g8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09eC53b3Jkc1tIXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHApe3ZhciBiO3JldHVybiAwIT09cC5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHAubmVnYXRpdmU9''@;'; put 'put ''MCxiPXRoaXMuc3ViKHApLHAubmVnYXRpdmVePTEsYik6MD09PXAubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsYj1wLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsYik6dGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQocCk6cC5jbG9u''@;'; put 'put ''ZSgpLmlhZGQodGhpcyl9LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCl7aWYoMCE9PXAubmVnYXRpdmUpe3AubmVnYXRpdmU9MDt2YXIgYj10aGlzLmlhZGQocCk7cmV0dXJuIHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5l''@;'; put 'put ''Z2F0aXZlPTAsdGhpcy5pYWRkKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciBDLFQseD10aGlzLmNtcChwKTtpZigwPT09eClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7eD4wPyhDPXRoaXMsVD1wKTooQz1w''@;'; put 'put ''LFQ9dGhpcyk7Zm9yKHZhciBIPTAsaj0wO2o8VC5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSktKDB8VC53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtmb3IoOzAhPT1IJiZqPEMubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNbal0pK0gpPj4yNix0aGlz''@;'; put 'put ''LndvcmRzW2pdPTY3MTA4ODYzJmI7aWYoMD09PUgmJmo8Qy5sZW5ndGgmJkMhPT10aGlzKWZvcig7ajxDLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1DLndvcmRzW2pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxqKSxDIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9''@;'; put 'put ''MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHApfTt2YXIgWT1mdW5jdGlvbihwLGIseCl7dmFyIEUsbSxBLEM9cC53b3JkcyxUPWIud29yZHMsSD14LndvcmRzLGo9MCxvZT0wfENbMF0sdGU9ODE5MSZvZSxzZT1v''@;'; put 'put ''ZT4+PjEzLHdlPTB8Q1sxXSxVZT04MTkxJndlLEplPXdlPj4+MTMsYXQ9MHxDWzJdLE1lPTgxOTEmYXQsdmU9YXQ+Pj4xMyxYZT0wfENbM10samU9ODE5MSZYZSxEZT1YZT4+PjEzLEZlPTB8Q1s0XSxSZT04MTkxJkZlLEllPUZlPj4+MTMsVmU9MHxDWzVdLGtlPTgxOTEmVmUsQWU9VmU+Pj4x''@;'; put 'put ''MyxfdD0wfENbNl0scnQ9ODE5MSZfdCxRZT1fdD4+PjEzLGRuPTB8Q1s3XSx5dD04MTkxJmRuLE10PWRuPj4+MTMsRHQ9MHxDWzhdLGl0PTgxOTEmRHQsJGU9RHQ+Pj4xMyx0dD0wfENbOV0sSGU9ODE5MSZ0dCxkdD10dD4+PjEzLHF0PTB8VFswXSxSdD04MTkxJnF0LFB0PXF0Pj4+MTMsYWk9''@;'; put 'put ''MHxUWzFdLFF0PTgxOTEmYWksc249YWk+Pj4xMyxSaT0wfFRbMl0sZm49ODE5MSZSaSxmdD1SaT4+PjEzLFByPTB8VFszXSxadD04MTkxJlByLEF0PVByPj4+MTMsTG49MHxUWzRdLHN0PTgxOTEmTG4senQ9TG4+Pj4xMyxuaT0wfFRbNV0sV2U9ODE5MSZuaSxUdD1uaT4+PjEzLHJyPTB8VFs2''@;'; put 'put ''XSxodD04MTkxJnJyLHh0PXJyPj4+MTMsQm49MHxUWzddLG9uPTgxOTEmQm4sanQ9Qm4+Pj4xMyxkaT0wfFRbOF0sY249ODE5MSZkaSxwbj1kaT4+PjEzLElpPTB8VFs5XSxYdD04MTkxJklpLGVuPUlpPj4+MTM7eC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9MTk7''@;'; put 'put ''dmFyIGhvPShqKyhFPU1hdGguaW11bCh0ZSxSdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwodGUsUHQpKStNYXRoLmltdWwoc2UsUnQpfDApKTw8MTMpfDA7aj0oKEE9TWF0aC5pbXVsKHNlLFB0KSkrKG0+Pj4xMyl8MCkrKGhvPj4+MjYpfDAsaG8mPTY3MTA4ODYzLEU9TWF0aC5pbXVs''@;'; put 'put ''KFVlLFJ0KSxtPShtPU1hdGguaW11bChVZSxQdCkpK01hdGguaW11bChKZSxSdCl8MCxBPU1hdGguaW11bChKZSxQdCk7dmFyIE1pPShqKyhFPUUrTWF0aC5pbXVsKHRlLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsc24pfDApK01hdGguaW11bChzZSxRdCl8MCkpPDwx''@;'; put 'put ''Myl8MDtqPSgoQT1BK01hdGguaW11bChzZSxzbil8MCkrKG0+Pj4xMyl8MCkrKE1pPj4+MjYpfDAsTWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE1lLFJ0KSxtPShtPU1hdGguaW11bChNZSxQdCkpK01hdGguaW11bCh2ZSxSdCl8MCxBPU1hdGguaW11bCh2ZSxQdCksRT1FK01hdGguaW11bChV''@;'; put 'put ''ZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHNuKXwwKStNYXRoLmltdWwoSmUsUXQpfDAsQT1BK01hdGguaW11bChKZSxzbil8MDt2YXIgcHI9KGorKEU9RStNYXRoLmltdWwodGUsZm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmdCl8MCkrTWF0aC5pbXVsKHNlLGZu''@;'; put 'put ''KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZ0KXwwKSsobT4+PjEzKXwwKSsocHI+Pj4yNil8MCxwciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoamUsUnQpLG09KG09TWF0aC5pbXVsKGplLFB0KSkrTWF0aC5pbXVsKERlLFJ0KXwwLEE9TWF0aC5pbXVsKERlLFB0KSxFPUUrTWF0''@;'; put 'put ''aC5pbXVsKE1lLFF0KXwwLG09KG09bStNYXRoLmltdWwoTWUsc24pfDApK01hdGguaW11bCh2ZSxRdCl8MCxBPUErTWF0aC5pbXVsKHZlLHNuKXwwLEU9RStNYXRoLmltdWwoVWUsZm4pfDAsbT0obT1tK01hdGguaW11bChVZSxmdCl8MCkrTWF0aC5pbXVsKEplLGZuKXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwoSmUsZnQpfDA7dmFyIFduPShqKyhFPUUrTWF0aC5pbXVsKHRlLFp0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsQXQpfDApK01hdGguaW11bChzZSxadCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxBdCl8MCkrKG0+Pj4xMyl8MCkrKFduPj4+MjYpfDAs''@;'; put 'put ''V24mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFJlLFJ0KSxtPShtPU1hdGguaW11bChSZSxQdCkpK01hdGguaW11bChJZSxSdCl8MCxBPU1hdGguaW11bChJZSxQdCksRT1FK01hdGguaW11bChqZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLHNuKXwwKStNYXRoLmltdWwoRGUsUXQpfDAsQT1B''@;'; put 'put ''K01hdGguaW11bChEZSxzbil8MCxFPUUrTWF0aC5pbXVsKE1lLGZuKXwwLG09KG09bStNYXRoLmltdWwoTWUsZnQpfDApK01hdGguaW11bCh2ZSxmbil8MCxBPUErTWF0aC5pbXVsKHZlLGZ0KXwwLEU9RStNYXRoLmltdWwoVWUsWnQpfDAsbT0obT1tK01hdGguaW11bChVZSxBdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKEplLFp0KXwwLEE9QStNYXRoLmltdWwoSmUsQXQpfDA7dmFyIEtpPShqKyhFPUUrTWF0aC5pbXVsKHRlLHN0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsenQpfDApK01hdGguaW11bChzZSxzdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx6dCl8''@;'; put 'put ''MCkrKG0+Pj4xMyl8MCkrKEtpPj4+MjYpfDAsS2kmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGtlLFJ0KSxtPShtPU1hdGguaW11bChrZSxQdCkpK01hdGguaW11bChBZSxSdCl8MCxBPU1hdGguaW11bChBZSxQdCksRT1FK01hdGguaW11bChSZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHNu''@;'; put 'put ''KXwwKStNYXRoLmltdWwoSWUsUXQpfDAsQT1BK01hdGguaW11bChJZSxzbil8MCxFPUUrTWF0aC5pbXVsKGplLGZuKXwwLG09KG09bStNYXRoLmltdWwoamUsZnQpfDApK01hdGguaW11bChEZSxmbil8MCxBPUErTWF0aC5pbXVsKERlLGZ0KXwwLEU9RStNYXRoLmltdWwoTWUsWnQpfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChNZSxBdCl8MCkrTWF0aC5pbXVsKHZlLFp0KXwwLEE9QStNYXRoLmltdWwodmUsQXQpfDAsRT1FK01hdGguaW11bChVZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoSmUsc3QpfDAsQT1BK01hdGguaW11bChKZSx6dCl8MDt2YXIgUXI9''@;'; put 'put ''KGorKEU9RStNYXRoLmltdWwodGUsV2UpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxUdCl8MCkrTWF0aC5pbXVsKHNlLFdlKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFR0KXwwKSsobT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxRciY9NjcxMDg4NjMsRT1NYXRo''@;'; put 'put ''LmltdWwocnQsUnQpLG09KG09TWF0aC5pbXVsKHJ0LFB0KSkrTWF0aC5pbXVsKFFlLFJ0KXwwLEE9TWF0aC5pbXVsKFFlLFB0KSxFPUUrTWF0aC5pbXVsKGtlLFF0KXwwLG09KG09bStNYXRoLmltdWwoa2Usc24pfDApK01hdGguaW11bChBZSxRdCl8MCxBPUErTWF0aC5pbXVsKEFlLHNuKXww''@;'; put 'put ''LEU9RStNYXRoLmltdWwoUmUsZm4pfDAsbT0obT1tK01hdGguaW11bChSZSxmdCl8MCkrTWF0aC5pbXVsKEllLGZuKXwwLEE9QStNYXRoLmltdWwoSWUsZnQpfDAsRT1FK01hdGguaW11bChqZSxadCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLEF0KXwwKStNYXRoLmltdWwoRGUsWnQpfDAsQT1B''@;'; put 'put ''K01hdGguaW11bChEZSxBdCl8MCxFPUUrTWF0aC5pbXVsKE1lLHN0KXwwLG09KG09bStNYXRoLmltdWwoTWUsenQpfDApK01hdGguaW11bCh2ZSxzdCl8MCxBPUErTWF0aC5pbXVsKHZlLHp0KXwwLEU9RStNYXRoLmltdWwoVWUsV2UpfDAsbT0obT1tK01hdGguaW11bChVZSxUdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKEplLFdlKXwwLEE9QStNYXRoLmltdWwoSmUsVHQpfDA7dmFyIEpyPShqKyhFPUUrTWF0aC5pbXVsKHRlLGh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUseHQpfDApK01hdGguaW11bChzZSxodCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx4dCl8''@;'; put 'put ''MCkrKG0+Pj4xMyl8MCkrKEpyPj4+MjYpfDAsSnImPTY3MTA4ODYzLEU9TWF0aC5pbXVsKHl0LFJ0KSxtPShtPU1hdGguaW11bCh5dCxQdCkpK01hdGguaW11bChNdCxSdCl8MCxBPU1hdGguaW11bChNdCxQdCksRT1FK01hdGguaW11bChydCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LHNu''@;'; put 'put ''KXwwKStNYXRoLmltdWwoUWUsUXQpfDAsQT1BK01hdGguaW11bChRZSxzbil8MCxFPUUrTWF0aC5pbXVsKGtlLGZuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZnQpfDApK01hdGguaW11bChBZSxmbil8MCxBPUErTWF0aC5pbXVsKEFlLGZ0KXwwLEU9RStNYXRoLmltdWwoUmUsWnQpfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChSZSxBdCl8MCkrTWF0aC5pbXVsKEllLFp0KXwwLEE9QStNYXRoLmltdWwoSWUsQXQpfDAsRT1FK01hdGguaW11bChqZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLHp0KXwwKStNYXRoLmltdWwoRGUsc3QpfDAsQT1BK01hdGguaW11bChEZSx6dCl8MCxFPUUrTWF0''@;'; put 'put ''aC5pbXVsKE1lLFdlKXwwLG09KG09bStNYXRoLmltdWwoTWUsVHQpfDApK01hdGguaW11bCh2ZSxXZSl8MCxBPUErTWF0aC5pbXVsKHZlLFR0KXwwLEU9RStNYXRoLmltdWwoVWUsaHQpfDAsbT0obT1tK01hdGguaW11bChVZSx4dCl8MCkrTWF0aC5pbXVsKEplLGh0KXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwoSmUseHQpfDA7dmFyIEJpPShqKyhFPUUrTWF0aC5pbXVsKHRlLG9uKXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsanQpfDApK01hdGguaW11bChzZSxvbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxqdCl8MCkrKG0+Pj4xMyl8MCkrKEJpPj4+MjYpfDAs''@;'; put 'put ''QmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGl0LFJ0KSxtPShtPU1hdGguaW11bChpdCxQdCkpK01hdGguaW11bCgkZSxSdCl8MCxBPU1hdGguaW11bCgkZSxQdCksRT1FK01hdGguaW11bCh5dCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHNuKXwwKStNYXRoLmltdWwoTXQsUXQpfDAsQT1B''@;'; put 'put ''K01hdGguaW11bChNdCxzbil8MCxFPUUrTWF0aC5pbXVsKHJ0LGZuKXwwLG09KG09bStNYXRoLmltdWwocnQsZnQpfDApK01hdGguaW11bChRZSxmbil8MCxBPUErTWF0aC5pbXVsKFFlLGZ0KXwwLEU9RStNYXRoLmltdWwoa2UsWnQpfDAsbT0obT1tK01hdGguaW11bChrZSxBdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKEFlLFp0KXwwLEE9QStNYXRoLmltdWwoQWUsQXQpfDAsRT1FK01hdGguaW11bChSZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHp0KXwwKStNYXRoLmltdWwoSWUsc3QpfDAsQT1BK01hdGguaW11bChJZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGplLFdlKXwwLG09KG09bStNYXRo''@;'; put 'put ''LmltdWwoamUsVHQpfDApK01hdGguaW11bChEZSxXZSl8MCxBPUErTWF0aC5pbXVsKERlLFR0KXwwLEU9RStNYXRoLmltdWwoTWUsaHQpfDAsbT0obT1tK01hdGguaW11bChNZSx4dCl8MCkrTWF0aC5pbXVsKHZlLGh0KXwwLEE9QStNYXRoLmltdWwodmUseHQpfDAsRT1FK01hdGguaW11bChV''@;'; put 'put ''ZSxvbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGp0KXwwKStNYXRoLmltdWwoSmUsb24pfDAsQT1BK01hdGguaW11bChKZSxqdCl8MDt2YXIgVmk9KGorKEU9RStNYXRoLmltdWwodGUsY24pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxwbil8MCkrTWF0aC5pbXVsKHNlLGNu''@;'; put 'put ''KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHBuKXwwKSsobT4+PjEzKXwwKSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUnQpLG09KG09TWF0aC5pbXVsKEhlLFB0KSkrTWF0aC5pbXVsKGR0LFJ0KXwwLEE9TWF0aC5pbXVsKGR0LFB0KSxFPUUrTWF0''@;'; put 'put ''aC5pbXVsKGl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoaXQsc24pfDApK01hdGguaW11bCgkZSxRdCl8MCxBPUErTWF0aC5pbXVsKCRlLHNuKXwwLEU9RStNYXRoLmltdWwoeXQsZm4pfDAsbT0obT1tK01hdGguaW11bCh5dCxmdCl8MCkrTWF0aC5pbXVsKE10LGZuKXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwoTXQsZnQpfDAsRT1FK01hdGguaW11bChydCxadCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LEF0KXwwKStNYXRoLmltdWwoUWUsWnQpfDAsQT1BK01hdGguaW11bChRZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGtlLHN0KXwwLG09KG09bStNYXRoLmltdWwoa2UsenQpfDApK01hdGguaW11bChB''@;'; put 'put ''ZSxzdCl8MCxBPUErTWF0aC5pbXVsKEFlLHp0KXwwLEU9RStNYXRoLmltdWwoUmUsV2UpfDAsbT0obT1tK01hdGguaW11bChSZSxUdCl8MCkrTWF0aC5pbXVsKEllLFdlKXwwLEE9QStNYXRoLmltdWwoSWUsVHQpfDAsRT1FK01hdGguaW11bChqZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGpl''@;'; put 'put ''LHh0KXwwKStNYXRoLmltdWwoRGUsaHQpfDAsQT1BK01hdGguaW11bChEZSx4dCl8MCxFPUUrTWF0aC5pbXVsKE1lLG9uKXwwLG09KG09bStNYXRoLmltdWwoTWUsanQpfDApK01hdGguaW11bCh2ZSxvbil8MCxBPUErTWF0aC5pbXVsKHZlLGp0KXwwLEU9RStNYXRoLmltdWwoVWUsY24pfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bChVZSxwbil8MCkrTWF0aC5pbXVsKEplLGNuKXwwLEE9QStNYXRoLmltdWwoSmUscG4pfDA7dmFyIElvPShqKyhFPUUrTWF0aC5pbXVsKHRlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZW4pfDApK01hdGguaW11bChzZSxYdCl8MCkpPDwx''@;'; put 'put ''Myl8MDtqPSgoQT1BK01hdGguaW11bChzZSxlbil8MCkrKG0+Pj4xMyl8MCkrKElvPj4+MjYpfDAsSW8mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFF0KSxtPShtPU1hdGguaW11bChIZSxzbikpK01hdGguaW11bChkdCxRdCl8MCxBPU1hdGguaW11bChkdCxzbiksRT1FK01hdGguaW11bChp''@;'; put 'put ''dCxmbil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZ0KXwwKStNYXRoLmltdWwoJGUsZm4pfDAsQT1BK01hdGguaW11bCgkZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFp0KXwwLG09KG09bStNYXRoLmltdWwoeXQsQXQpfDApK01hdGguaW11bChNdCxadCl8MCxBPUErTWF0aC5pbXVsKE10LEF0''@;'; put 'put ''KXwwLEU9RStNYXRoLmltdWwocnQsc3QpfDAsbT0obT1tK01hdGguaW11bChydCx6dCl8MCkrTWF0aC5pbXVsKFFlLHN0KXwwLEE9QStNYXRoLmltdWwoUWUsenQpfDAsRT1FK01hdGguaW11bChrZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLFR0KXwwKStNYXRoLmltdWwoQWUsV2UpfDAs''@;'; put 'put ''QT1BK01hdGguaW11bChBZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFJlLGh0KXwwLG09KG09bStNYXRoLmltdWwoUmUseHQpfDApK01hdGguaW11bChJZSxodCl8MCxBPUErTWF0aC5pbXVsKEllLHh0KXwwLEU9RStNYXRoLmltdWwoamUsb24pfDAsbT0obT1tK01hdGguaW11bChqZSxqdCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKERlLG9uKXwwLEE9QStNYXRoLmltdWwoRGUsanQpfDAsRT1FK01hdGguaW11bChNZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHBuKXwwKStNYXRoLmltdWwodmUsY24pfDAsQT1BK01hdGguaW11bCh2ZSxwbil8MDt2YXIgT3I9KGorKEU9RStNYXRoLmltdWwoVWUsWHQp''@;'; put 'put ''fDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChVZSxlbil8MCkrTWF0aC5pbXVsKEplLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEplLGVuKXwwKSsobT4+PjEzKXwwKSsoT3I+Pj4yNil8MCxPciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsZm4pLG09KG09TWF0aC5p''@;'; put 'put ''bXVsKEhlLGZ0KSkrTWF0aC5pbXVsKGR0LGZuKXwwLEE9TWF0aC5pbXVsKGR0LGZ0KSxFPUUrTWF0aC5pbXVsKGl0LFp0KXwwLG09KG09bStNYXRoLmltdWwoaXQsQXQpfDApK01hdGguaW11bCgkZSxadCl8MCxBPUErTWF0aC5pbXVsKCRlLEF0KXwwLEU9RStNYXRoLmltdWwoeXQsc3QpfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bCh5dCx6dCl8MCkrTWF0aC5pbXVsKE10LHN0KXwwLEE9QStNYXRoLmltdWwoTXQsenQpfDAsRT1FK01hdGguaW11bChydCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LFR0KXwwKStNYXRoLmltdWwoUWUsV2UpfDAsQT1BK01hdGguaW11bChRZSxUdCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKGtlLGh0KXwwLG09KG09bStNYXRoLmltdWwoa2UseHQpfDApK01hdGguaW11bChBZSxodCl8MCxBPUErTWF0aC5pbXVsKEFlLHh0KXwwLEU9RStNYXRoLmltdWwoUmUsb24pfDAsbT0obT1tK01hdGguaW11bChSZSxqdCl8MCkrTWF0aC5pbXVsKEllLG9uKXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoSWUsanQpfDAsRT1FK01hdGguaW11bChqZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGplLHBuKXwwKStNYXRoLmltdWwoRGUsY24pfDAsQT1BK01hdGguaW11bChEZSxwbil8MDt2YXIgWWk9KGorKEU9RStNYXRoLmltdWwoTWUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGgu''@;'; put 'put ''aW11bChNZSxlbil8MCkrTWF0aC5pbXVsKHZlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHZlLGVuKXwwKSsobT4+PjEzKXwwKSsoWWk+Pj4yNil8MCxZaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsWnQpLG09KG09TWF0aC5pbXVsKEhlLEF0KSkrTWF0aC5pbXVsKGR0LFp0''@;'; put 'put ''KXwwLEE9TWF0aC5pbXVsKGR0LEF0KSxFPUUrTWF0aC5pbXVsKGl0LHN0KXwwLG09KG09bStNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCgkZSxzdCl8MCxBPUErTWF0aC5pbXVsKCRlLHp0KXwwLEU9RStNYXRoLmltdWwoeXQsV2UpfDAsbT0obT1tK01hdGguaW11bCh5dCxUdCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKE10LFdlKXwwLEE9QStNYXRoLmltdWwoTXQsVHQpfDAsRT1FK01hdGguaW11bChydCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LHh0KXwwKStNYXRoLmltdWwoUWUsaHQpfDAsQT1BK01hdGguaW11bChRZSx4dCl8MCxFPUUrTWF0aC5pbXVsKGtlLG9uKXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoa2UsanQpfDApK01hdGguaW11bChBZSxvbil8MCxBPUErTWF0aC5pbXVsKEFlLGp0KXwwLEU9RStNYXRoLmltdWwoUmUsY24pfDAsbT0obT1tK01hdGguaW11bChSZSxwbil8MCkrTWF0aC5pbXVsKEllLGNuKXwwLEE9QStNYXRoLmltdWwoSWUscG4pfDA7dmFyIGdvPShqKyhF''@;'; put 'put ''PUUrTWF0aC5pbXVsKGplLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwoamUsZW4pfDApK01hdGguaW11bChEZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChEZSxlbil8MCkrKG0+Pj4xMyl8MCkrKGdvPj4+MjYpfDAsZ28mPTY3MTA4ODYzLEU9TWF0aC5pbXVs''@;'; put 'put ''KEhlLHN0KSxtPShtPU1hdGguaW11bChIZSx6dCkpK01hdGguaW11bChkdCxzdCl8MCxBPU1hdGguaW11bChkdCx6dCksRT1FK01hdGguaW11bChpdCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFR0KXwwKStNYXRoLmltdWwoJGUsV2UpfDAsQT1BK01hdGguaW11bCgkZSxUdCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKHl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoeXQseHQpfDApK01hdGguaW11bChNdCxodCl8MCxBPUErTWF0aC5pbXVsKE10LHh0KXwwLEU9RStNYXRoLmltdWwocnQsb24pfDAsbT0obT1tK01hdGguaW11bChydCxqdCl8MCkrTWF0aC5pbXVsKFFlLG9uKXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoUWUsanQpfDAsRT1FK01hdGguaW11bChrZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGtlLHBuKXwwKStNYXRoLmltdWwoQWUsY24pfDAsQT1BK01hdGguaW11bChBZSxwbil8MDt2YXIgZXI9KGorKEU9RStNYXRoLmltdWwoUmUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGgu''@;'; put 'put ''aW11bChSZSxlbil8MCkrTWF0aC5pbXVsKEllLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEllLGVuKXwwKSsobT4+PjEzKXwwKSsoZXI+Pj4yNil8MCxlciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV2UpLG09KG09TWF0aC5pbXVsKEhlLFR0KSkrTWF0aC5pbXVsKGR0LFdl''@;'; put 'put ''KXwwLEE9TWF0aC5pbXVsKGR0LFR0KSxFPUUrTWF0aC5pbXVsKGl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoaXQseHQpfDApK01hdGguaW11bCgkZSxodCl8MCxBPUErTWF0aC5pbXVsKCRlLHh0KXwwLEU9RStNYXRoLmltdWwoeXQsb24pfDAsbT0obT1tK01hdGguaW11bCh5dCxqdCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKE10LG9uKXwwLEE9QStNYXRoLmltdWwoTXQsanQpfDAsRT1FK01hdGguaW11bChydCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LHBuKXwwKStNYXRoLmltdWwoUWUsY24pfDAsQT1BK01hdGguaW11bChRZSxwbil8MDt2YXIgY289KGorKEU9RStNYXRoLmltdWwoa2UsWHQp''@;'; put 'put ''fDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChrZSxlbil8MCkrTWF0aC5pbXVsKEFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEFlLGVuKXwwKSsobT4+PjEzKXwwKSsoY28+Pj4yNil8MCxjbyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaHQpLG09KG09TWF0aC5p''@;'; put 'put ''bXVsKEhlLHh0KSkrTWF0aC5pbXVsKGR0LGh0KXwwLEE9TWF0aC5pbXVsKGR0LHh0KSxFPUUrTWF0aC5pbXVsKGl0LG9uKXwwLG09KG09bStNYXRoLmltdWwoaXQsanQpfDApK01hdGguaW11bCgkZSxvbil8MCxBPUErTWF0aC5pbXVsKCRlLGp0KXwwLEU9RStNYXRoLmltdWwoeXQsY24pfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bCh5dCxwbil8MCkrTWF0aC5pbXVsKE10LGNuKXwwLEE9QStNYXRoLmltdWwoTXQscG4pfDA7dmFyIF9vPShqKyhFPUUrTWF0aC5pbXVsKHJ0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwocnQsZW4pfDApK01hdGguaW11bChRZSxYdCl8MCkpPDwx''@;'; put 'put ''Myl8MDtqPSgoQT1BK01hdGguaW11bChRZSxlbil8MCkrKG0+Pj4xMyl8MCkrKF9vPj4+MjYpfDAsX28mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLG9uKSxtPShtPU1hdGguaW11bChIZSxqdCkpK01hdGguaW11bChkdCxvbil8MCxBPU1hdGguaW11bChkdCxqdCksRT1FK01hdGguaW11bChp''@;'; put 'put ''dCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHBuKXwwKStNYXRoLmltdWwoJGUsY24pfDAsQT1BK01hdGguaW11bCgkZSxwbil8MDt2YXIgT289KGorKEU9RStNYXRoLmltdWwoeXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh5dCxlbil8MCkrTWF0aC5pbXVsKE10LFh0''@;'; put 'put ''KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKE10LGVuKXwwKSsobT4+PjEzKXwwKSsoT28+Pj4yNil8MCxPbyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsY24pLG09KG09TWF0aC5pbXVsKEhlLHBuKSkrTWF0aC5pbXVsKGR0LGNuKXwwLEE9TWF0aC5pbXVsKGR0LHBuKTt2YXIgSG89''@;'; put 'put ''KGorKEU9RStNYXRoLmltdWwoaXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChpdCxlbil8MCkrTWF0aC5pbXVsKCRlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKCRlLGVuKXwwKSsobT4+PjEzKXwwKSsoSG8+Pj4yNil8MCxIbyY9NjcxMDg4NjM7dmFyIGVp''@;'; put 'put ''PShqKyhFPU1hdGguaW11bChIZSxYdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwoSGUsZW4pKStNYXRoLmltdWwoZHQsWHQpfDApKTw8MTMpfDA7cmV0dXJuIGo9KChBPU1hdGguaW11bChkdCxlbikpKyhtPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxIWzBdPWhvLEhb''@;'; put 'put ''MV09TWksSFsyXT1wcixIWzNdPVduLEhbNF09S2ksSFs1XT1RcixIWzZdPUpyLEhbN109QmksSFs4XT1WaSxIWzldPUlvLEhbMTBdPU9yLEhbMTFdPVlpLEhbMTJdPWdvLEhbMTNdPWVyLEhbMTRdPWNvLEhbMTVdPV9vLEhbMTZdPU9vLEhbMTddPUhvLEhbMThdPWVpLDAhPT1qJiYoSFsxOV09''@;'; put 'put ''aix4Lmxlbmd0aCsrKSx4fTtmdW5jdGlvbiBlZShWLHAsYil7cmV0dXJuKG5ldyBKKS5tdWxwKFYscCxiKX1mdW5jdGlvbiBKKFYscCl7dGhpcy54PVYsdGhpcy55PXB9TWF0aC5pbXVsfHwoWT1XKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5sZW5ndGgr''@;'; put 'put ''cC5sZW5ndGg7cmV0dXJuIHg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1wLmxlbmd0aD9ZKHRoaXMscCxiKTpDPDYzP1codGhpcyxwLGIpOkM8MTAyND9mdW5jdGlvbiBYKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZSxiLmxlbmd0aD1WLmxlbmd0aCtwLmxlbmd0aDtm''@;'; put 'put ''b3IodmFyIHg9MCxDPTAsVD0wO1Q8Yi5sZW5ndGgtMTtUKyspe3ZhciBIPUM7Qz0wO2Zvcih2YXIgaj02NzEwODg2MyZ4LEU9TWF0aC5taW4oVCxwLmxlbmd0aC0xKSxtPU1hdGgubWF4KDAsVC1WLmxlbmd0aCsxKTttPD1FO20rKyl7dmFyIHNlPSgwfFYud29yZHNbVC1tXSkqKDB8cC53b3Jk''@;'; put 'put ''c1ttXSksd2U9NjcxMDg4NjMmc2U7aj02NzEwODg2MyYod2U9d2UranwwKSxDKz0oSD0oSD1IKyhzZS82NzEwODg2NHwwKXwwKSsod2U+Pj4yNil8MCk+Pj4yNixIJj02NzEwODg2M31iLndvcmRzW1RdPWoseD1ILEg9Q31yZXR1cm4gMCE9PXg/Yi53b3Jkc1tUXT14OmIubGVuZ3RoLS0sYi5z''@;'; put 'put ''dHJpcCgpfSh0aGlzLHAsYik6ZWUodGhpcyxwLGIpLHh9LEoucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PXcucHJvdG90eXBlLl9jb3VudEJpdHMocCktMSxDPTA7QzxwO0MrKyliW0NdPXRoaXMucmV2QmluKEMseCxwKTtyZXR1cm4gYn0s''@;'; put 'put ''Si5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHAsYix4KXtpZigwPT09cHx8cD09PXgtMSlyZXR1cm4gcDtmb3IodmFyIEM9MCxUPTA7VDxiO1QrKylDfD0oMSZwKTw8Yi1ULTEscD4+PTE7cmV0dXJuIEN9LEoucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24ocCxiLHgsQyxULEgpe2Zvcih2''@;'; put 'put ''YXIgaj0wO2o8SDtqKyspQ1tqXT1iW3Bbal1dLFRbal09eFtwW2pdXX0sSi5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXt0aGlzLnBlcm11dGUoSCxwLGIseCxDLFQpO2Zvcih2YXIgaj0xO2o8VDtqPDw9MSlmb3IodmFyIEU9ajw8MSxtPU1hdGguY29zKDIqTWF0''@;'; put 'put ''aC5QSS9FKSxBPU1hdGguc2luKDIqTWF0aC5QSS9FKSxvZT0wO29lPFQ7b2UrPUUpZm9yKHZhciB0ZT1tLHNlPUEsd2U9MDt3ZTxqO3dlKyspe3ZhciBVZT14W29lK3dlXSxKZT1DW29lK3dlXSxhdD14W29lK3dlK2pdLE1lPUNbb2Urd2Ural0sdmU9dGUqYXQtc2UqTWU7TWU9dGUqTWUrc2Uq''@;'; put 'put ''YXQseFtvZSt3ZV09VWUrKGF0PXZlKSxDW29lK3dlXT1KZStNZSx4W29lK3dlK2pdPVVlLWF0LENbb2Urd2Ural09SmUtTWUsd2UhPT1FJiYodmU9bSp0ZS1BKnNlLHNlPW0qc2UrQSp0ZSx0ZT12ZSl9fSxKLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihwLGIpe3ZhciB4PTF8TWF0''@;'; put 'put ''aC5tYXgoYixwKSxDPTEmeCxUPTA7Zm9yKHg9eC8yfDA7eDt4Pj4+PTEpVCsrO3JldHVybiAxPDxUKzErQ30sSi5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHAsYix4KXtpZighKHg8PTEpKWZvcih2YXIgQz0wO0M8eC8yO0MrKyl7dmFyIFQ9cFtDXTtwW0NdPXBbeC1DLTFdLHBbeC1D''@;'; put 'put ''LTFdPVQsVD1iW0NdLGJbQ109LWJbeC1DLTFdLGJbeC1DLTFdPS1UfX0sSi5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTAsQz0wO0M8Yi8yO0MrKyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5kKHBbMipDKzFdL2IpK01hdGgucm91bmQocFsyKkNdL2IpK3g7''@;'; put 'put ''cFtDXT02NzEwODg2MyZULHg9VDw2NzEwODg2ND8wOlQvNjcxMDg4NjR8MH1yZXR1cm4gcH0sSi5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihwLGIseCxDKXtmb3IodmFyIFQ9MCxIPTA7SDxiO0grKyl4WzIqSF09ODE5MSYoVCs9MHxwW0hdKSx4WzIqSCsxXT04MTkxJihUPj4+PTEz''@;'; put 'put ''KSxUPj4+PTEzO2ZvcihIPTIqYjtIPEM7KytIKXhbSF09MDtnKDA9PT1UKSxnKCEoLTgxOTImVCkpfSxKLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD0wO3g8cDt4KyspYlt4XT0wO3JldHVybiBifSxKLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9u''@;'; put 'put ''KHAsYix4KXt2YXIgQz0yKnRoaXMuZ3Vlc3NMZW4xM2IocC5sZW5ndGgsYi5sZW5ndGgpLFQ9dGhpcy5tYWtlUkJUKEMpLEg9dGhpcy5zdHViKEMpLGo9bmV3IEFycmF5KEMpLEU9bmV3IEFycmF5KEMpLG09bmV3IEFycmF5KEMpLEE9bmV3IEFycmF5KEMpLG9lPW5ldyBBcnJheShDKSx0ZT1u''@;'; put 'put ''ZXcgQXJyYXkoQyksc2U9eC53b3JkcztzZS5sZW5ndGg9Qyx0aGlzLmNvbnZlcnQxM2IocC53b3JkcyxwLmxlbmd0aCxqLEMpLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLEEsQyksdGhpcy50cmFuc2Zvcm0oaixILEUsbSxDLFQpLHRoaXMudHJhbnNmb3JtKEEsSCxvZSx0ZSxD''@;'; put 'put ''LFQpO2Zvcih2YXIgd2U9MDt3ZTxDO3dlKyspe3ZhciBVZT1FW3dlXSpvZVt3ZV0tbVt3ZV0qdGVbd2VdO21bd2VdPUVbd2VdKnRlW3dlXSttW3dlXSpvZVt3ZV0sRVt3ZV09VWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKEUsbSxDKSx0aGlzLnRyYW5zZm9ybShFLG0sc2UsSCxDLFQpLHRoaXMu''@;'; put 'put ''Y29uanVnYXRlKHNlLEgsQyksdGhpcy5ub3JtYWxpemUxM2Ioc2UsQykseC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9cC5sZW5ndGgrYi5sZW5ndGgseC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJu''@;'; put 'put ''IGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSx0aGlzLm11bFRvKHAsYil9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSxlZSh0aGlzLHAsYil9''@;'; put 'put ''LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyhwLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KTtmb3IodmFyIGI9MCx4PTA7eDx0aGlzLmxlbmd0aDt4Kysp''@;'; put 'put ''e3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKnAsVD0oNjcxMDg4NjMmQykrKDY3MTA4ODYzJmIpO2I+Pj0yNixiKz1DLzY3MTA4ODY0fDAsYis9VD4+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PWImJih0aGlzLndvcmRzW3hdPWIsdGhpcy5sZW5ndGgrKyksdGhpc30s''@;'; put 'put ''dy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHApfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUo''@;'; put 'put ''KSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwKXt2YXIgYj1mdW5jdGlvbiBVKFYpe2Zvcih2YXIgcD1uZXcgQXJyYXkoVi5iaXRMZW5ndGgoKSksYj0wO2I8cC5sZW5ndGg7YisrKXt2YXIgQz1iJTI2O3BbYl09KFYud29yZHNbYi8yNnwwXSYxPDxDKT4+PkN9cmV0dXJuIHB9KHApO2lm''@;'; put 'put ''KDA9PT1iLmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciB4PXRoaXMsQz0wO0M8Yi5sZW5ndGgmJjA9PT1iW0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzxiLmxlbmd0aClmb3IodmFyIFQ9eC5zcXIoKTtDPGIubGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PWJbQ10mJih4PXgubXVsKFQp''@;'; put 'put ''KTtyZXR1cm4geH0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgVCxiPXAlMjYseD0ocC1iKS8yNixDPTY3MTA4ODYzPj4+MjYtYjw8MjYtYjtpZigwIT09Yil7dmFyIEg9MDtmb3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2''@;'; put 'put ''YXIgaj10aGlzLndvcmRzW1RdJkM7dGhpcy53b3Jkc1tUXT0oMHx0aGlzLndvcmRzW1RdKS1qPDxifEgsSD1qPj4+MjYtYn1IJiYodGhpcy53b3Jkc1tUXT1ILHRoaXMubGVuZ3RoKyspfWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlz''@;'; put 'put ''LndvcmRzW1RdO2ZvcihUPTA7VDx4O1QrKyl0aGlzLndvcmRzW1RdPTA7dGhpcy5sZW5ndGgrPXh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5p''@;'; put 'put ''dXNocm49ZnVuY3Rpb24ocCxiLHgpe3ZhciBDO2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKSxDPWI/KGItYiUyNikvMjY6MDt2YXIgVD1wJTI2LEg9TWF0aC5taW4oKHAtVCkvMjYsdGhpcy5sZW5ndGgpLGo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtpZihDLT1ILEM9TWF0aC5t''@;'; put 'put ''YXgoMCxDKSxFKXtmb3IodmFyIG09MDttPEg7bSsrKUUud29yZHNbbV09dGhpcy53b3Jkc1ttXTtFLmxlbmd0aD1IfWlmKDAhPT1IKWlmKHRoaXMubGVuZ3RoPkgpZm9yKHRoaXMubGVuZ3RoLT1ILG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRoaXMud29yZHNbbStIXTtl''@;'; put 'put ''bHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBBPTA7Zm9yKG09dGhpcy5sZW5ndGgtMTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIG9lPTB8dGhpcy53b3Jkc1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8b2U+Pj5ULEE9b2Uman1yZXR1cm4gRSYmMCE9PUEmJihF''@;'; put 'put ''LndvcmRzW0UubGVuZ3RoKytdPUEpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4ocCxiLHgp''@;'; put 'put ''fSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4ocCl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNs''@;'; put 'put ''b25lKCkuaXNocm4ocCl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHApfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiEo''@;'; put 'put ''dGhpcy5sZW5ndGg8PXh8fCEodGhpcy53b3Jkc1t4XSYxPDxiKSl9LHcucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25s''@;'; put 'put ''eSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9eD90aGlzOigwIT09YiYmeCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT1iJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5iPDxiKSx0aGlzLnN0cmlw''@;'; put 'put ''KCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbihwKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MD90aGlzLmlzdWJuKC1wKTowIT09dGhp''@;'; put 'put ''cy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHA/KHRoaXMud29yZHNbMF09cC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9p''@;'; put 'put ''YWRkbihwKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHApe3RoaXMud29yZHNbMF0rPXA7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXT49NjcxMDg4NjQ7YisrKXRoaXMud29yZHNbYl0tPTY3MTA4ODY0LGI9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNb''@;'; put 'put ''YisxXT0xOnRoaXMud29yZHNbYisxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxiKzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHApe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MClyZXR1cm4gdGhpcy5pYWRk''@;'; put 'put ''bigtcCk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXAsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1sw''@;'; put 'put ''XSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPDA7YisrKXRoaXMud29yZHNbYl0rPTY3MTA4ODY0LHRoaXMud29yZHNbYisxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHApe3Jl''@;'; put 'put ''dHVybiB0aGlzLmNsb25lKCkuaWFkZG4ocCl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihwKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbihwLGIseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKHAubGVuZ3RoK3gpO3ZhciBILGo9MDtmb3IoVD0wO1Q8cC5sZW5ndGg7VCsrKXtIPSgwfHRoaXMud29yZHNbVCt4XSkrajt2''@;'; put 'put ''YXIgRT0oMHxwLndvcmRzW1RdKSpiO2o9KChILT02NzEwODg2MyZFKT4+MjYpLShFLzY3MTA4ODY0fDApLHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIfWZvcig7VDx0aGlzLmxlbmd0aC14O1QrKylqPShIPSgwfHRoaXMud29yZHNbVCt4XSkraik+PjI2LHRoaXMud29yZHNbVCt4XT02NzEw''@;'; put 'put ''ODg2MyZIO2lmKDA9PT1qKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKGcoLTE9PT1qKSxqPTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKWo9KEg9LSgwfHRoaXMud29yZHNbVF0pK2opPj4yNix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJkg7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlw''@;'; put 'put ''KCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmNsb25lKCksVD1wLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRoaXMuX2NvdW50Qml0cyhIKSkmJihUPVQudXNobG4oeCksQy5pdXNobG4oeCksSD0wfFQud29yZHNbVC5sZW5ndGgt''@;'; put 'put ''MV0pO3ZhciBtLEU9Qy5sZW5ndGgtVC5sZW5ndGg7aWYoIm1vZCIhPT1iKXsobT1uZXcgdyhudWxsKSkubGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0aCk7Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0wfXZhciBvZT1DLmNsb25lKCkuX2lzaGxuc3Vi''@;'; put 'put ''bXVsKFQsMSxFKTswPT09b2UubmVnYXRpdmUmJihDPW9lLG0mJihtLndvcmRzW0VdPTEpKTtmb3IodmFyIHRlPUUtMTt0ZT49MDt0ZS0tKXt2YXIgc2U9NjcxMDg4NjQqKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZV0pKygwfEMud29yZHNbVC5sZW5ndGgrdGUtMV0pO2ZvcihzZT1NYXRoLm1pbihz''@;'; put 'put ''ZS9IfDAsNjcxMDg4NjMpLEMuX2lzaGxuc3VibXVsKFQsc2UsdGUpOzAhPT1DLm5lZ2F0aXZlOylzZS0tLEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsdGUpLEMuaXNaZXJvKCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1t0ZV09c2UpfXJldHVybiBtJiZtLnN0cmlwKCks''@;'; put 'put ''Qy5zdHJpcCgpLCJkaXYiIT09YiYmMCE9PXgmJkMuaXVzaHJuKHgpLHtkaXY6bXx8bnVsbCxtb2Q6Q319LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGcoIXAuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10''@;'; put 'put ''aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLGIpLCJtb2QiIT09YiYmKEM9SC5kaXYubmVnKCkpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChwKSkse2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVn''@;'; put 'put ''YXRpdmUmJjAhPT1wLm5lZ2F0aXZlPyhIPXRoaXMuZGl2bW9kKHAubmVnKCksYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSkse2RpdjpDLG1vZDpILm1vZH0pOnRoaXMubmVnYXRpdmUmcC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLm5lZygpLGIpLCJkaXYiIT09YiYmKFQ9''@;'; put 'put ''SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaXN1YihwKSkse2RpdjpILmRpdixtb2Q6VH0pOnAubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChwKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1wLmxlbmd0aD8iZGl2Ij09PWI/e2Rpdjp0aGlzLmRpdm4ocC53b3Jk''@;'; put 'put ''c1swXSksbW9kOm51bGx9OiJtb2QiPT09Yj97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHAsYik7dmFyIEMsVCxIfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5kaXY9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsImRpdiIsITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''ZGl2bW9kKHAsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5kaXZtb2QocCk7aWYoYi5tb2QuaXNaZXJvKCkpcmV0dXJuIGIuZGl2O3ZhciB4PTAhPT1iLmRpdi5uZWdhdGl2ZT9iLm1vZC5pc3ViKHApOmIubW9kLEM9cC51c2hybigx''@;'; put 'put ''KSxUPXAuYW5kbG4oMSksSD14LmNtcChDKTtyZXR1cm4gSDwwfHwxPT09VCYmMD09PUg/Yi5kaXY6MCE9PWIuZGl2Lm5lZ2F0aXZlP2IuZGl2LmlzdWJuKDEpOmIuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0oMTw8''@;'; put 'put ''MjYpJXAseD0wLEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl4PShiKngrKDB8dGhpcy53b3Jkc1tDXSkpJXA7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8''@;'; put 'put ''dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQqYjt0aGlzLndvcmRzW3hdPUMvcHwwLGI9QyVwfXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihwKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihwKXtnKDA9''@;'; put 'put ''PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPW5ldyB3KDApLGo9bmV3IHcoMSksRT0wO2IuaXNFdmVuKCkmJnguaXNFdmVu''@;'; put 'put ''KCk7KWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpLCsrRTtmb3IodmFyIG09eC5jbG9uZSgpLEE9Yi5jbG9uZSgpOyFiLmlzWmVybygpOyl7Zm9yKHZhciBvZT0wLHRlPTE7IShiLndvcmRzWzBdJnRlKSYmb2U8MjY7KytvZSx0ZTw8PTEpO2lmKG9lPjApZm9yKGIuaXVzaHJuKG9lKTtvZS0tID4w''@;'; put 'put ''OykoQy5pc09kZCgpfHxULmlzT2RkKCkpJiYoQy5pYWRkKG0pLFQuaXN1YihBKSksQy5pdXNocm4oMSksVC5pdXNocm4oMSk7Zm9yKHZhciBzZT0wLHdlPTE7ISh4LndvcmRzWzBdJndlKSYmc2U8MjY7KytzZSx3ZTw8PTEpO2lmKHNlPjApZm9yKHguaXVzaHJuKHNlKTtzZS0tID4wOykoSC5p''@;'; put 'put ''c09kZCgpfHxqLmlzT2RkKCkpJiYoSC5pYWRkKG0pLGouaXN1YihBKSksSC5pdXNocm4oMSksai5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoSCksVC5pc3ViKGopKTooeC5pc3ViKGIpLEguaXN1YihDKSxqLmlzdWIoVCkpfXJldHVybnthOkgsYjpqLGdjZDp4Lml1''@;'; put 'put ''c2hsbihFKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgb2UsYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygw''@;'; put 'put ''KSxIPXguY2xvbmUoKTtiLmNtcG4oMSk+MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFyIGo9MCxFPTE7IShiLndvcmRzWzBdJkUpJiZqPDI2OysraixFPDw9MSk7aWYoaj4wKWZvcihiLml1c2hybihqKTtqLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKEgpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0w''@;'; put 'put ''LEE9MTshKHgud29yZHNbMF0mQSkmJm08MjY7KyttLEE8PD0xKTtpZihtPjApZm9yKHguaXVzaHJuKG0pO20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoSCksVC5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoVCkpOih4LmlzdWIoYiksVC5pc3ViKEMpKX1yZXR1cm4o''@;'; put 'put ''b2U9MD09PWIuY21wbigxKT9DOlQpLmNtcG4oMCk8MCYmb2UuaWFkZChwKSxvZX0sdy5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHApe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHAuYWJzKCk7aWYocC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgYj10aGlzLmNsb25lKCkseD1wLmNs''@;'; put 'put ''b25lKCk7Yi5uZWdhdGl2ZT0wLHgubmVnYXRpdmU9MDtmb3IodmFyIEM9MDtiLmlzRXZlbigpJiZ4LmlzRXZlbigpO0MrKyliLml1c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zvcig7Yi5pc0V2ZW4oKTspYi5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIg''@;'; put 'put ''VD1iLmNtcCh4KTtpZihUPDApe3ZhciBIPWI7Yj14LHg9SH1lbHNlIGlmKDA9PT1UfHwwPT09eC5jbXBuKDEpKWJyZWFrO2IuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZWdjZChwKS5hLnVtb2QocCl9LHcucHJv''@;'; put 'put ''dG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0sdy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZwfSx3LnBy''@;'; put 'put ''b3RvdHlwZS5iaW5jbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCk7dmFyIGI9cCUyNix4PShwLWIpLzI2LEM9MTw8YjtpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIgVD1DLEg9eDswIT09VCYm''@;'; put 'put ''SDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPTB8dGhpcy53b3Jkc1tIXTtUPShqKz1UKT4+PjI2LHRoaXMud29yZHNbSF09aiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYodGhpcy53b3Jkc1tIXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3Jl''@;'; put 'put ''dHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhYilyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmYilyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCks''@;'; put 'put ''dGhpcy5sZW5ndGg+MSl4PTE7ZWxzZXtiJiYocD0tcCksZyhwPD02NzEwODg2MywiTnVtYmVyIGlzIHRvbyBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09cD8wOkM8cD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlv''@;'; put 'put ''bihwKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBiPXRoaXMudWNtcChwKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtYjpifSx3LnByb3RvdHlwZS51Y21w''@;'; put 'put ''PWZ1bmN0aW9uKHApe2lmKHRoaXMubGVuZ3RoPnAubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHAubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9MHxwLndvcmRzW3hdO2lmKEMhPT1UKXtD''@;'; put 'put ''PFQ/Yj0tMTpDPlQmJihiPTEpO2JyZWFrfX1yZXR1cm4gYn0sdy5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9u''@;'; put 'put ''KHApe3JldHVybiB0aGlzLmNtcG4ocCk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24ocCl7cmV0dXJu''@;'; put 'put ''LTE9PT10aGlzLmNtcChwKX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXBuKHApPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlz''@;'; put 'put ''LmNtcG4ocCl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhpcy5jbXAocCl9LHcucmVkPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgU2UocCl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBp''@;'; put 'put ''biByZWR1Y3Rpb24gY29udGV4dCIpLGcoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIikscC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsImZyb21SZWQg''@;'; put 'put ''d29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnJlZD1wLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHAp''@;'; put 'put ''e3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMi''@;'; put 'put ''KSx0aGlzLnJlZC5hZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihw''@;'; put 'put ''KXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVy''@;'; put 'put ''cyIpLHRoaXMucmVkLmlzdWIodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihw''@;'; put 'put ''KXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQubXVsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3''@;'; put 'put ''b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHApLHRoaXMucmVkLmltdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0''@;'; put 'put ''aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5p''@;'; put 'put ''c3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRO''@;'; put 'put ''ZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQmJiFwLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5f''@;'; put 'put ''dmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxwKX07dmFyIHJlPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gaWUoVixwKXt0aGlzLm5hbWU9Vix0aGlzLnA9bmV3IHcocCwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlz''@;'; put 'put ''Lms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIGxlKCl7aWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZj''@;'; put 'put ''MmYiKX1mdW5jdGlvbiBtZSgpe2llLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gX2UoKXtpZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZm''@;'; put 'put ''ZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFRlKCl7aWUuY2FsbCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBTZShWKXtpZigic3RyaW5nIj09''@;'; put 'put ''dHlwZW9mIFYpe3ZhciBwPXcuX3ByaW1lKFYpO3RoaXMubT1wLnAsdGhpcy5wcmltZT1wfWVsc2UgZyhWLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPVYsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIHplKFYpe1NlLmNhbGwodGhpcyxWKSx0aGlzLnNo''@;'; put 'put ''aWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRo''@;'; put 'put ''aXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWllLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHco''@;'; put 'put ''bnVsbCk7cmV0dXJuIHAud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSxwfSxpZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihwKXt2YXIgeCxiPXA7ZG97dGhpcy5zcGxpdChiLHRoaXMudG1wKSx4PShiPShiPXRoaXMuaW11bEsoYikpLmlhZGQodGhpcy50bXApKS5i''@;'; put 'put ''aXRMZW5ndGgoKX13aGlsZSh4PnRoaXMubik7dmFyIEM9eDx0aGlzLm4/LTE6Yi51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1DPyhiLndvcmRzWzBdPTAsYi5sZW5ndGg9MSk6Qz4wP2IuaXN1Yih0aGlzLnApOnZvaWQgMCE9PWIuc3RyaXA/Yi5zdHJpcCgpOmIuX3N0cmlwKCksYn0saWUucHJv''@;'; put 'put ''dG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7cC5pdXNocm4odGhpcy5uLDAsYil9LGllLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pbXVsKHRoaXMuayl9LEIobGUsaWUpLGxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD00MTk0MzAzLEM9''@;'; put 'put ''TWF0aC5taW4ocC5sZW5ndGgsOSksVD0wO1Q8QztUKyspYi53b3Jkc1tUXT1wLndvcmRzW1RdO2lmKGIubGVuZ3RoPUMscC5sZW5ndGg8PTkpcmV0dXJuIHAud29yZHNbMF09MCx2b2lkKHAubGVuZ3RoPTEpO3ZhciBIPXAud29yZHNbOV07Zm9yKGIud29yZHNbYi5sZW5ndGgrK109SCZ4LFQ9''@;'; put 'put ''MTA7VDxwLmxlbmd0aDtUKyspe3ZhciBqPTB8cC53b3Jkc1tUXTtwLndvcmRzW1QtMTBdPShqJngpPDw0fEg+Pj4yMixIPWp9cC53b3Jkc1tULTEwXT1IPj4+PTIyLHAubGVuZ3RoLT0wPT09SCYmcC5sZW5ndGg+MTA/MTA6OX0sbGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3Aud29y''@;'; put 'put ''ZHNbcC5sZW5ndGhdPTAscC53b3Jkc1twLmxlbmd0aCsxXT0wLHAubGVuZ3RoKz0yO2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MHxwLndvcmRzW3hdO3Aud29yZHNbeF09NjcxMDg4NjMmKGIrPTk3NypDKSxiPTY0KkMrKGIvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1w''@;'; put 'put ''LndvcmRzW3AubGVuZ3RoLTFdJiYocC5sZW5ndGgtLSwwPT09cC53b3Jkc1twLmxlbmd0aC0xXSYmcC5sZW5ndGgtLSkscH0sQihtZSxpZSksQihfZSxpZSksQihUZSxpZSksVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFy''@;'; put 'put ''IEM9MTkqKDB8cC53b3Jkc1t4XSkrYixUPTY3MTA4ODYzJkM7Qz4+Pj0yNixwLndvcmRzW3hdPVQsYj1DfXJldHVybiAwIT09YiYmKHAud29yZHNbcC5sZW5ndGgrK109YikscH0sdy5fcHJpbWU9ZnVuY3Rpb24ocCl7aWYocmVbcF0pcmV0dXJuIHJlW3BdO3ZhciBiO2lmKCJrMjU2Ij09PXAp''@;'; put 'put ''Yj1uZXcgbGU7ZWxzZSBpZigicDIyNCI9PT1wKWI9bmV3IG1lO2Vsc2UgaWYoInAxOTIiPT09cCliPW5ldyBfZTtlbHNle2lmKCJwMjU1MTkiIT09cCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitwKTtiPW5ldyBUZX1yZXR1cm4gcmVbcF09YixifSxTZS5wcm90b3R5cGUuX3Zl''@;'; put 'put ''cmlmeTE9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxnKHAucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihwLGIpe2coIShwLm5lZ2F0aXZlfGIu''@;'; put 'put ''bmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQmJnAucmVkPT09Yi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVk''@;'; put 'put ''dWNlKHApLl9mb3JjZVJlZCh0aGlzKTpwLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaXNaZXJvKCk/cC5jbG9uZSgpOnRoaXMubS5zdWIocCkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuYWRkPWZ1bmN0''@;'; put 'put ''aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pYWRk''@;'; put 'put ''KGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxTZS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9''@;'; put 'put ''LFNlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuaXN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShwKSx0aGlz''@;'; put 'put ''Lmltb2QocC51c2hsbihiKSl9LFNlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5pbXVsKGIpKX0sU2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAsYiksdGhpcy5pbW9k''@;'; put 'put ''KHAubXVsKGIpKX0sU2UucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuaW11bChwLHAuY2xvbmUoKSl9LFNlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubXVsKHAscCl9LFNlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHApe2lmKHAuaXNaZXJv''@;'; put 'put ''KCkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgYj10aGlzLm0uYW5kbG4oMyk7aWYoZyhiJTI9PTEpLDM9PT1iKXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHAseCl9Zm9yKHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09''@;'; put 'put ''PUMuYW5kbG4oMSk7KVQrKyxDLml1c2hybigxKTtnKCFDLmlzWmVybygpKTt2YXIgSD1uZXcgdygxKS50b1JlZCh0aGlzKSxqPUgucmVkTmVnKCksRT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAh''@;'; put 'put ''PT10aGlzLnBvdyhtLEUpLmNtcChqKTspbS5yZWRJQWRkKGopO2Zvcih2YXIgQT10aGlzLnBvdyhtLEMpLG9lPXRoaXMucG93KHAsQy5hZGRuKDEpLml1c2hybigxKSksdGU9dGhpcy5wb3cocCxDKSxzZT1UOzAhPT10ZS5jbXAoSCk7KXtmb3IodmFyIHdlPXRlLFVlPTA7MCE9PXdlLmNtcChI''@;'; put 'put ''KTtVZSsrKXdlPXdlLnJlZFNxcigpO2coVWU8c2UpO3ZhciBKZT10aGlzLnBvdyhBLG5ldyB3KDEpLml1c2hsbihzZS1VZS0xKSk7b2U9b2UucmVkTXVsKEplKSxBPUplLnJlZFNxcigpLHRlPXRlLnJlZE11bChBKSxzZT1VZX1yZXR1cm4gb2V9LFNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9u''@;'; put 'put ''KHApe3ZhciBiPXAuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1iLm5lZ2F0aXZlPyhiLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKGIpLnJlZE5lZygpKTp0aGlzLmltb2QoYil9LFNlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCxiKXtpZihiLmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1Jl''@;'; put 'put ''ZCh0aGlzKTtpZigwPT09Yi5jbXBuKDEpKXJldHVybiBwLmNsb25lKCk7dmFyIEM9bmV3IEFycmF5KDE2KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09cDtmb3IodmFyIFQ9MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENbVC0xXSxwKTt2YXIgSD1DWzBdLGo9MCxFPTAs''@;'; put 'put ''bT1iLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bSYmKG09MjYpLFQ9Yi5sZW5ndGgtMTtUPj0wO1QtLSl7Zm9yKHZhciBBPWIud29yZHNbVF0sb2U9bS0xO29lPj0wO29lLS0pe3ZhciB0ZT1BPj5vZSYxO0ghPT1DWzBdJiYoSD10aGlzLnNxcihIKSksMCE9PXRlfHwwIT09aj8oajw8PTEsanw9''@;'; put 'put ''dGUsKDQ9PSsrRXx8MD09PVQmJjA9PT1vZSkmJihIPXRoaXMubXVsKEgsQ1tqXSksRT0wLGo9MCkpOkU9MH1tPTI2fXJldHVybiBIfSxTZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3ZhciBiPXAudW1vZCh0aGlzLm0pO3JldHVybiBiPT09cD9iLmNsb25lKCk6Yn0sU2UucHJv''@;'; put 'put ''dG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHApe3ZhciBiPXAuY2xvbmUoKTtyZXR1cm4gYi5yZWQ9bnVsbCxifSx3Lm1vbnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyB6ZShwKX0sQih6ZSxTZSksemUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9k''@;'; put 'put ''KHAudXNobG4odGhpcy5zaGlmdCkpfSx6ZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9dGhpcy5pbW9kKHAubXVsKHRoaXMucmludikpO3JldHVybiBiLnJlZD1udWxsLGJ9LHplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5p''@;'; put 'put ''c1plcm8oKSlyZXR1cm4gcC53b3Jkc1swXT0wLHAubGVuZ3RoPTEscDt2YXIgeD1wLmltdWwoYiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVy''@;'; put 'put ''biBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihIPVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0semUucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3Jj''@;'; put 'put ''ZVJlZCh0aGlzKTt2YXIgeD1wLm11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhp''@;'; put 'put ''cy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSx6ZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSh1ZT1fLm5tZCh1ZSks''@;'; put 'put ''dGhpcyl9LDY3MjExOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNzE5OTMpLHk9XygzNDcyNSksZz1fKDM2NjM2KSxCPV8oMjU0NDMpLHc9XygzMjQ3KTtmdW5jdGlvbiBQKEYpe3cuY2FsbCh0aGlzLCJkaWdlc3QiKSx0aGlzLl9oYXNoPUZ9SShQLHcpLFAucHJvdG90eXBlLl91''@;'; put 'put ''cGRhdGU9ZnVuY3Rpb24oRil7dGhpcy5faGFzaC51cGRhdGUoRil9LFAucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9oYXNoLmRpZ2VzdCgpfSx1ZS5leHBvcnRzPWZ1bmN0aW9uKE8pe3JldHVybiJtZDUiPT09KE89Ty50b0xvd2VyQ2FzZSgpKT9uZXcgeToicm1k''@;'; put 'put ''MTYwIj09PU98fCJyaXBlbWQxNjAiPT09Tz9uZXcgZzpuZXcgUChCKE8pKX19LDgzNDA3Oih1ZSxxLF8pPT57dmFyIEk9XygzNDcyNSk7dWUuZXhwb3J0cz1mdW5jdGlvbih5KXtyZXR1cm4obmV3IEkpLnVwZGF0ZSh5KS5kaWdlc3QoKX19LDU2NDMyOih1ZSxxLF8pPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBJPV8oNzE5OTMpLHk9Xyg5MDUwOSksZz1fKDMyNDcpLEI9XygyNzA1NCkuQnVmZmVyLHc9Xyg4MzQwNyksUD1fKDM2NjM2KSxGPV8oMjU0NDMpLE89Qi5hbGxvYygxMjgpO2Z1bmN0aW9uIHooTixMKXtnLmNhbGwodGhpcywiZGlnZXN0IiksInN0cmluZyI9PXR5cGVvZiBMJiYoTD1C''@;'; put 'put ''LmZyb20oTCkpO3ZhciBLPSJzaGE1MTIiPT09Tnx8InNoYTM4NCI9PT1OPzEyODo2NDt0aGlzLl9hbGc9Tix0aGlzLl9rZXk9TCxMLmxlbmd0aD5LP0w9KCJybWQxNjAiPT09Tj9uZXcgUDpGKE4pKS51cGRhdGUoTCkuZGlnZXN0KCk6TC5sZW5ndGg8SyYmKEw9Qi5jb25jYXQoW0wsT10sSykp''@;'; put 'put ''O2Zvcih2YXIgVz10aGlzLl9pcGFkPUIuYWxsb2NVbnNhZmUoSyksWT10aGlzLl9vcGFkPUIuYWxsb2NVbnNhZmUoSyksWD0wO1g8SztYKyspV1tYXT01NF5MW1hdLFlbWF09OTJeTFtYXTt0aGlzLl9oYXNoPSJybWQxNjAiPT09Tj9uZXcgUDpGKE4pLHRoaXMuX2hhc2gudXBkYXRlKFcpfUko''@;'; put 'put ''eixnKSx6LnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKE4pe3RoaXMuX2hhc2gudXBkYXRlKE4pfSx6LnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgTj10aGlzLl9oYXNoLmRpZ2VzdCgpO3JldHVybigicm1kMTYwIj09PXRoaXMuX2FsZz9uZXcgUDpGKHRoaXMuX2FsZykpLnVw''@;'; put 'put ''ZGF0ZSh0aGlzLl9vcGFkKS51cGRhdGUoTikuZGlnZXN0KCl9LHVlLmV4cG9ydHM9ZnVuY3Rpb24oTCxLKXtyZXR1cm4icm1kMTYwIj09PShMPUwudG9Mb3dlckNhc2UoKSl8fCJyaXBlbWQxNjAiPT09TD9uZXcgeigicm1kMTYwIixLKToibWQ1Ij09PUw/bmV3IHkodyxLKTpuZXcgeihMLEsp''@;'; put 'put ''fX0sOTA1MDk6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg3MTk5MykseT1fKDI3MDU0KS5CdWZmZXIsZz1fKDMyNDcpLEI9eS5hbGxvYygxMjgpLHc9NjQ7ZnVuY3Rpb24gUChGLE8pe2cuY2FsbCh0aGlzLCJkaWdlc3QiKSwic3RyaW5nIj09dHlwZW9mIE8mJihPPXkuZnJvbShP''@;'; put 'put ''KSksdGhpcy5fYWxnPUYsdGhpcy5fa2V5PU8sTy5sZW5ndGg+dz9PPUYoTyk6Ty5sZW5ndGg8dyYmKE89eS5jb25jYXQoW08sQl0sdykpO2Zvcih2YXIgej10aGlzLl9pcGFkPXkuYWxsb2NVbnNhZmUodyksTj10aGlzLl9vcGFkPXkuYWxsb2NVbnNhZmUodyksTD0wO0w8dztMKyspeltMXT01''@;'; put 'put ''NF5PW0xdLE5bTF09OTJeT1tMXTt0aGlzLl9oYXNoPVt6XX1JKFAsZyksUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihGKXt0aGlzLl9oYXNoLnB1c2goRil9LFAucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciBGPXRoaXMuX2FsZyh5LmNvbmNhdCh0aGlzLl9oYXNoKSk7cmV0''@;'; put 'put ''dXJuIHRoaXMuX2FsZyh5LmNvbmNhdChbdGhpcy5fb3BhZCxGXSkpfSx1ZS5leHBvcnRzPVB9LDkxNDI2Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3EucmFuZG9tQnl0ZXM9cS5ybmc9cS5wc2V1ZG9SYW5kb21CeXRlcz1xLnBybmc9XygzMzQyKSxxLmNyZWF0ZUhhc2g9cS5IYXNoPV8oNjcy''@;'; put 'put ''MTEpLHEuY3JlYXRlSG1hYz1xLkhtYWM9Xyg1NjQzMik7dmFyIEk9Xyg5OTU2MCkseT1PYmplY3Qua2V5cyhJKSxnPVsic2hhMSIsInNoYTIyNCIsInNoYTI1NiIsInNoYTM4NCIsInNoYTUxMiIsIm1kNSIsInJtZDE2MCJdLmNvbmNhdCh5KTtxLmdldEhhc2hlcz1mdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biBnfTt2YXIgQj1fKDkzMzk3KTtxLnBia2RmMj1CLnBia2RmMixxLnBia2RmMlN5bmM9Qi5wYmtkZjJTeW5jO3ZhciB3PV8oODg4NjIpO3EuQ2lwaGVyPXcuQ2lwaGVyLHEuY3JlYXRlQ2lwaGVyPXcuY3JlYXRlQ2lwaGVyLHEuQ2lwaGVyaXY9dy5DaXBoZXJpdixxLmNyZWF0ZUNpcGhlcml2''@;'; put 'put ''PXcuY3JlYXRlQ2lwaGVyaXYscS5EZWNpcGhlcj13LkRlY2lwaGVyLHEuY3JlYXRlRGVjaXBoZXI9dy5jcmVhdGVEZWNpcGhlcixxLkRlY2lwaGVyaXY9dy5EZWNpcGhlcml2LHEuY3JlYXRlRGVjaXBoZXJpdj13LmNyZWF0ZURlY2lwaGVyaXYscS5nZXRDaXBoZXJzPXcuZ2V0Q2lwaGVycyxx''@;'; put 'put ''Lmxpc3RDaXBoZXJzPXcubGlzdENpcGhlcnM7dmFyIFA9Xyg0Mzc3KTtxLkRpZmZpZUhlbGxtYW5Hcm91cD1QLkRpZmZpZUhlbGxtYW5Hcm91cCxxLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cD1QLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cCxxLmdldERpZmZpZUhlbGxtYW49UC5nZXREaWZm''@;'; put 'put ''aWVIZWxsbWFuLHEuY3JlYXRlRGlmZmllSGVsbG1hbj1QLmNyZWF0ZURpZmZpZUhlbGxtYW4scS5EaWZmaWVIZWxsbWFuPVAuRGlmZmllSGVsbG1hbjt2YXIgRj1fKDc5MTQzKTtxLmNyZWF0ZVNpZ249Ri5jcmVhdGVTaWduLHEuU2lnbj1GLlNpZ24scS5jcmVhdGVWZXJpZnk9Ri5jcmVhdGVW''@;'; put 'put ''ZXJpZnkscS5WZXJpZnk9Ri5WZXJpZnkscS5jcmVhdGVFQ0RIPV8oODczMDMpO3ZhciBPPV8oNTI5NjUpO3EucHVibGljRW5jcnlwdD1PLnB1YmxpY0VuY3J5cHQscS5wcml2YXRlRW5jcnlwdD1PLnByaXZhdGVFbmNyeXB0LHEucHVibGljRGVjcnlwdD1PLnB1YmxpY0RlY3J5cHQscS5wcml2''@;'; put 'put ''YXRlRGVjcnlwdD1PLnByaXZhdGVEZWNyeXB0O3ZhciB6PV8oOTY4Mik7cS5yYW5kb21GaWxsPXoucmFuZG9tRmlsbCxxLnJhbmRvbUZpbGxTeW5jPXoucmFuZG9tRmlsbFN5bmMscS5jcmVhdGVDcmVkZW50aWFscz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigic29ycnksIGNyZWF0ZUNy''@;'; put 'put ''ZWRlbnRpYWxzIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXRcbndlIGFjY2VwdCBwdWxsIHJlcXVlc3RzXG5odHRwczovL2dpdGh1Yi5jb20vYnJvd3NlcmlmeS9jcnlwdG8tYnJvd3NlcmlmeSIpfSxxLmNvbnN0YW50cz17REhfQ0hFQ0tfUF9OT1RfU0FGRV9QUklNRToyLERIX0NIRUNLX1BfTk9U''@;'; put 'put ''X1BSSU1FOjEsREhfVU5BQkxFX1RPX0NIRUNLX0dFTkVSQVRPUjo0LERIX05PVF9TVUlUQUJMRV9HRU5FUkFUT1I6OCxOUE5fRU5BQkxFRDoxLEFMUE5fRU5BQkxFRDoxLFJTQV9QS0NTMV9QQURESU5HOjEsUlNBX1NTTFYyM19QQURESU5HOjIsUlNBX05PX1BBRERJTkc6MyxSU0FfUEtDUzFf''@;'; put 'put ''T0FFUF9QQURESU5HOjQsUlNBX1g5MzFfUEFERElORzo1LFJTQV9QS0NTMV9QU1NfUEFERElORzo2LFBPSU5UX0NPTlZFUlNJT05fQ09NUFJFU1NFRDoyLFBPSU5UX0NPTlZFUlNJT05fVU5DT01QUkVTU0VEOjQsUE9JTlRfQ09OVkVSU0lPTl9IWUJSSUQ6Nn19LDE3NjU2OmZ1bmN0aW9uKHVl''@;'; put 'put ''LHEsXyl7dmFyIEk7dWUuZXhwb3J0cz0oST1JfHxmdW5jdGlvbih5LGcpe3ZhciBCO2lmKHR5cGVvZiB3aW5kb3c8InUiJiZ3aW5kb3cuY3J5cHRvJiYoQj13aW5kb3cuY3J5cHRvKSx0eXBlb2Ygc2VsZjwidSImJnNlbGYuY3J5cHRvJiYoQj1zZWxmLmNyeXB0byksdHlwZW9mIGdsb2JhbFRo''@;'; put 'put ''aXM8InUiJiZnbG9iYWxUaGlzLmNyeXB0byYmKEI9Z2xvYmFsVGhpcy5jcnlwdG8pLCFCJiZ0eXBlb2Ygd2luZG93PCJ1IiYmd2luZG93Lm1zQ3J5cHRvJiYoQj13aW5kb3cubXNDcnlwdG8pLCFCJiZ0eXBlb2YgZ2xvYmFsPCJ1IiYmZ2xvYmFsLmNyeXB0byYmKEI9Z2xvYmFsLmNyeXB0byks''@;'; put 'put ''IUIpdHJ5e0I9Xyg5MTQyNil9Y2F0Y2h7fXZhciB3PWZ1bmN0aW9uKCl7aWYoQil7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEIuZ2V0UmFuZG9tVmFsdWVzKXRyeXtyZXR1cm4gQi5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDEpKVswXX1jYXRjaHt9aWYoImZ1bmN0aW9uIj09dHlw''@;'; put 'put ''ZW9mIEIucmFuZG9tQnl0ZXMpdHJ5e3JldHVybiBCLnJhbmRvbUJ5dGVzKDQpLnJlYWRJbnQzMkxFKCl9Y2F0Y2h7fX10aHJvdyBuZXcgRXJyb3IoIk5hdGl2ZSBjcnlwdG8gbW9kdWxlIGNvdWxkIG5vdCBiZSB1c2VkIHRvIGdldCBzZWN1cmUgcmFuZG9tIG51bWJlci4iKX0sUD1PYmplY3Qu''@;'; put 'put ''Y3JlYXRlfHxmdW5jdGlvbigpe2Z1bmN0aW9uIEooKXt9cmV0dXJuIGZ1bmN0aW9uKHJlKXt2YXIgaWU7cmV0dXJuIEoucHJvdG90eXBlPXJlLGllPW5ldyBKLEoucHJvdG90eXBlPW51bGwsaWV9fSgpLEY9e30sTz1GLmxpYj17fSx6PU8uQmFzZT1mdW5jdGlvbigpe3JldHVybntleHRlbmQ6''@;'; put 'put ''ZnVuY3Rpb24oSil7dmFyIHJlPVAodGhpcyk7cmV0dXJuIEomJnJlLm1peEluKEopLCghcmUuaGFzT3duUHJvcGVydHkoImluaXQiKXx8dGhpcy5pbml0PT09cmUuaW5pdCkmJihyZS5pbml0PWZ1bmN0aW9uKCl7cmUuJHN1cGVyLmluaXQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSkscmUuaW5p''@;'; put 'put ''dC5wcm90b3R5cGU9cmUscmUuJHN1cGVyPXRoaXMscmV9LGNyZWF0ZTpmdW5jdGlvbigpe3ZhciBKPXRoaXMuZXh0ZW5kKCk7cmV0dXJuIEouaW5pdC5hcHBseShKLGFyZ3VtZW50cyksSn0saW5pdDpmdW5jdGlvbigpe30sbWl4SW46ZnVuY3Rpb24oSil7Zm9yKHZhciByZSBpbiBKKUouaGFz''@;'; put 'put ''T3duUHJvcGVydHkocmUpJiYodGhpc1tyZV09SltyZV0pO0ouaGFzT3duUHJvcGVydHkoInRvU3RyaW5nIikmJih0aGlzLnRvU3RyaW5nPUoudG9TdHJpbmcpfSxjbG9uZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmluaXQucHJvdG90eXBlLmV4dGVuZCh0aGlzKX19fSgpLE49Ty5Xb3JkQXJy''@;'; put 'put ''YXk9ei5leHRlbmQoe2luaXQ6ZnVuY3Rpb24oSixyZSl7Sj10aGlzLndvcmRzPUp8fFtdLHRoaXMuc2lnQnl0ZXM9bnVsbCE9cmU/cmU6NCpKLmxlbmd0aH0sdG9TdHJpbmc6ZnVuY3Rpb24oSil7cmV0dXJuKEp8fEspLnN0cmluZ2lmeSh0aGlzKX0sY29uY2F0OmZ1bmN0aW9uKEope3ZhciBy''@;'; put 'put ''ZT10aGlzLndvcmRzLGllPUoud29yZHMsbGU9dGhpcy5zaWdCeXRlcyxtZT1KLnNpZ0J5dGVzO2lmKHRoaXMuY2xhbXAoKSxsZSU0KWZvcih2YXIgX2U9MDtfZTxtZTtfZSsrKXJlW2xlK19lPj4+Ml18PShpZVtfZT4+PjJdPj4+MjQtX2UlNCo4JjI1NSk8PDI0LShsZStfZSklNCo4O2Vsc2Ug''@;'; put 'put ''Zm9yKHZhciBTZT0wO1NlPG1lO1NlKz00KXJlW2xlK1NlPj4+Ml09aWVbU2U+Pj4yXTtyZXR1cm4gdGhpcy5zaWdCeXRlcys9bWUsdGhpc30sY2xhbXA6ZnVuY3Rpb24oKXt2YXIgSj10aGlzLndvcmRzLHJlPXRoaXMuc2lnQnl0ZXM7SltyZT4+PjJdJj00Mjk0OTY3Mjk1PDwzMi1yZSU0Kjgs''@;'; put 'put ''Si5sZW5ndGg9eS5jZWlsKHJlLzQpfSxjbG9uZTpmdW5jdGlvbigpe3ZhciBKPXouY2xvbmUuY2FsbCh0aGlzKTtyZXR1cm4gSi53b3Jkcz10aGlzLndvcmRzLnNsaWNlKDApLEp9LHJhbmRvbTpmdW5jdGlvbihKKXtmb3IodmFyIHJlPVtdLGllPTA7aWU8SjtpZSs9NClyZS5wdXNoKHcoKSk7''@;'; put 'put ''cmV0dXJuIG5ldyBOLmluaXQocmUsSil9fSksTD1GLmVuYz17fSxLPUwuSGV4PXtzdHJpbmdpZnk6ZnVuY3Rpb24oSil7Zm9yKHZhciByZT1KLndvcmRzLGllPUouc2lnQnl0ZXMsbGU9W10sbWU9MDttZTxpZTttZSsrKXt2YXIgX2U9cmVbbWU+Pj4yXT4+PjI0LW1lJTQqOCYyNTU7bGUucHVz''@;'; put 'put ''aCgoX2U+Pj40KS50b1N0cmluZygxNikpLGxlLnB1c2goKDE1Jl9lKS50b1N0cmluZygxNikpfXJldHVybiBsZS5qb2luKCIiKX0scGFyc2U6ZnVuY3Rpb24oSil7Zm9yKHZhciByZT1KLmxlbmd0aCxpZT1bXSxsZT0wO2xlPHJlO2xlKz0yKWllW2xlPj4+M118PXBhcnNlSW50KEouc3Vic3Ry''@;'; put 'put ''KGxlLDIpLDE2KTw8MjQtbGUlOCo0O3JldHVybiBuZXcgTi5pbml0KGllLHJlLzIpfX0sVT1MLkxhdGluMT17c3RyaW5naWZ5OmZ1bmN0aW9uKEope2Zvcih2YXIgcmU9Si53b3JkcyxpZT1KLnNpZ0J5dGVzLGxlPVtdLG1lPTA7bWU8aWU7bWUrKylsZS5wdXNoKFN0cmluZy5mcm9tQ2hhckNv''@;'; put 'put ''ZGUocmVbbWU+Pj4yXT4+PjI0LW1lJTQqOCYyNTUpKTtyZXR1cm4gbGUuam9pbigiIil9LHBhcnNlOmZ1bmN0aW9uKEope2Zvcih2YXIgcmU9Si5sZW5ndGgsaWU9W10sbGU9MDtsZTxyZTtsZSsrKWllW2xlPj4+Ml18PSgyNTUmSi5jaGFyQ29kZUF0KGxlKSk8PDI0LWxlJTQqODtyZXR1cm4g''@;'; put 'put ''bmV3IE4uaW5pdChpZSxyZSl9fSxXPUwuVXRmOD17c3RyaW5naWZ5OmZ1bmN0aW9uKEope3RyeXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShVLnN0cmluZ2lmeShKKSkpfWNhdGNoe3Rocm93IG5ldyBFcnJvcigiTWFsZm9ybWVkIFVURi04IGRhdGEiKX19LHBhcnNlOmZ1bmN0''@;'; put 'put ''aW9uKEope3JldHVybiBVLnBhcnNlKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKKSkpfX0sWT1PLkJ1ZmZlcmVkQmxvY2tBbGdvcml0aG09ei5leHRlbmQoe3Jlc2V0OmZ1bmN0aW9uKCl7dGhpcy5fZGF0YT1uZXcgTi5pbml0LHRoaXMuX25EYXRhQnl0ZXM9MH0sX2FwcGVuZDpmdW5j''@;'; put 'put ''dGlvbihKKXsic3RyaW5nIj09dHlwZW9mIEomJihKPVcucGFyc2UoSikpLHRoaXMuX2RhdGEuY29uY2F0KEopLHRoaXMuX25EYXRhQnl0ZXMrPUouc2lnQnl0ZXN9LF9wcm9jZXNzOmZ1bmN0aW9uKEope3ZhciByZSxpZT10aGlzLl9kYXRhLGxlPWllLndvcmRzLG1lPWllLnNpZ0J5dGVzLF9l''@;'; put 'put ''PXRoaXMuYmxvY2tTaXplLFNlPW1lLyg0Kl9lKSx6ZT0oU2U9Sj95LmNlaWwoU2UpOnkubWF4KCgwfFNlKS10aGlzLl9taW5CdWZmZXJTaXplLDApKSpfZSxWPXkubWluKDQqemUsbWUpO2lmKHplKXtmb3IodmFyIHA9MDtwPHplO3ArPV9lKXRoaXMuX2RvUHJvY2Vzc0Jsb2NrKGxlLHApO3Jl''@;'; put 'put ''PWxlLnNwbGljZSgwLHplKSxpZS5zaWdCeXRlcy09Vn1yZXR1cm4gbmV3IE4uaW5pdChyZSxWKX0sY2xvbmU6ZnVuY3Rpb24oKXt2YXIgSj16LmNsb25lLmNhbGwodGhpcyk7cmV0dXJuIEouX2RhdGE9dGhpcy5fZGF0YS5jbG9uZSgpLEp9LF9taW5CdWZmZXJTaXplOjB9KSxlZT0oTy5IYXNo''@;'; put 'put ''ZXI9WS5leHRlbmQoe2NmZzp6LmV4dGVuZCgpLGluaXQ6ZnVuY3Rpb24oSil7dGhpcy5jZmc9dGhpcy5jZmcuZXh0ZW5kKEopLHRoaXMucmVzZXQoKX0scmVzZXQ6ZnVuY3Rpb24oKXtZLnJlc2V0LmNhbGwodGhpcyksdGhpcy5fZG9SZXNldCgpfSx1cGRhdGU6ZnVuY3Rpb24oSil7cmV0dXJu''@;'; put 'put ''IHRoaXMuX2FwcGVuZChKKSx0aGlzLl9wcm9jZXNzKCksdGhpc30sZmluYWxpemU6ZnVuY3Rpb24oSil7cmV0dXJuIEomJnRoaXMuX2FwcGVuZChKKSx0aGlzLl9kb0ZpbmFsaXplKCl9LGJsb2NrU2l6ZToxNixfY3JlYXRlSGVscGVyOmZ1bmN0aW9uKEope3JldHVybiBmdW5jdGlvbihyZSxp''@;'; put 'put ''ZSl7cmV0dXJuIG5ldyBKLmluaXQoaWUpLmZpbmFsaXplKHJlKX19LF9jcmVhdGVIbWFjSGVscGVyOmZ1bmN0aW9uKEope3JldHVybiBmdW5jdGlvbihyZSxpZSl7cmV0dXJuIG5ldyBlZS5ITUFDLmluaXQoSixpZSkuZmluYWxpemUocmUpfX19KSxGLmFsZ289e30pO3JldHVybiBGfShNYXRo''@;'; put 'put ''KSxJKX0sNzg4NTU6ZnVuY3Rpb24odWUscSxfKXt2YXIgSTt1ZS5leHBvcnRzPShJPV8oMTc2NTYpLGZ1bmN0aW9uKHkpe3ZhciBnPUksQj1nLmxpYix3PUIuV29yZEFycmF5LFA9Qi5IYXNoZXIsRj1nLmFsZ28sTz1bXTshZnVuY3Rpb24oKXtmb3IodmFyIFc9MDtXPDY0O1crKylPW1ddPTQy''@;'; put 'put ''OTQ5NjcyOTYqeS5hYnMoeS5zaW4oVysxKSl8MH0oKTt2YXIgej1GLk1ENT1QLmV4dGVuZCh7X2RvUmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9oYXNoPW5ldyB3LmluaXQoWzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OF0pfSxfZG9Qcm9jZXNzQmxvY2s6ZnVuY3Rp''@;'; put 'put ''b24oVyxZKXtmb3IodmFyIFg9MDtYPDE2O1grKyl7dmFyIGVlPVkrWCxKPVdbZWVdO1dbZWVdPTE2NzExOTM1JihKPDw4fEo+Pj4yNCl8NDI3ODI1NTM2MCYoSjw8MjR8Sj4+PjgpfXZhciByZT10aGlzLl9oYXNoLndvcmRzLGllPVdbWSswXSxsZT1XW1krMV0sbWU9V1tZKzJdLF9lPVdbWSsz''@;'; put 'put ''XSxUZT1XW1krNF0sU2U9V1tZKzVdLHplPVdbWSs2XSxWPVdbWSs3XSxwPVdbWSs4XSxiPVdbWSs5XSx4PVdbWSsxMF0sQz1XW1krMTFdLFQ9V1tZKzEyXSxIPVdbWSsxM10saj1XW1krMTRdLEU9V1tZKzE1XSxtPXJlWzBdLEE9cmVbMV0sb2U9cmVbMl0sdGU9cmVbM107bT1OKG0sQSxvZSx0''@;'; put 'put ''ZSxpZSw3LE9bMF0pLHRlPU4odGUsbSxBLG9lLGxlLDEyLE9bMV0pLG9lPU4ob2UsdGUsbSxBLG1lLDE3LE9bMl0pLEE9TihBLG9lLHRlLG0sX2UsMjIsT1szXSksbT1OKG0sQSxvZSx0ZSxUZSw3LE9bNF0pLHRlPU4odGUsbSxBLG9lLFNlLDEyLE9bNV0pLG9lPU4ob2UsdGUsbSxBLHplLDE3''@;'; put 'put ''LE9bNl0pLEE9TihBLG9lLHRlLG0sViwyMixPWzddKSxtPU4obSxBLG9lLHRlLHAsNyxPWzhdKSx0ZT1OKHRlLG0sQSxvZSxiLDEyLE9bOV0pLG9lPU4ob2UsdGUsbSxBLHgsMTcsT1sxMF0pLEE9TihBLG9lLHRlLG0sQywyMixPWzExXSksbT1OKG0sQSxvZSx0ZSxULDcsT1sxMl0pLHRlPU4o''@;'; put 'put ''dGUsbSxBLG9lLEgsMTIsT1sxM10pLG9lPU4ob2UsdGUsbSxBLGosMTcsT1sxNF0pLG09TChtLEE9TihBLG9lLHRlLG0sRSwyMixPWzE1XSksb2UsdGUsbGUsNSxPWzE2XSksdGU9TCh0ZSxtLEEsb2UsemUsOSxPWzE3XSksb2U9TChvZSx0ZSxtLEEsQywxNCxPWzE4XSksQT1MKEEsb2UsdGUs''@;'; put 'put ''bSxpZSwyMCxPWzE5XSksbT1MKG0sQSxvZSx0ZSxTZSw1LE9bMjBdKSx0ZT1MKHRlLG0sQSxvZSx4LDksT1syMV0pLG9lPUwob2UsdGUsbSxBLEUsMTQsT1syMl0pLEE9TChBLG9lLHRlLG0sVGUsMjAsT1syM10pLG09TChtLEEsb2UsdGUsYiw1LE9bMjRdKSx0ZT1MKHRlLG0sQSxvZSxqLDks''@;'; put 'put ''T1syNV0pLG9lPUwob2UsdGUsbSxBLF9lLDE0LE9bMjZdKSxBPUwoQSxvZSx0ZSxtLHAsMjAsT1syN10pLG09TChtLEEsb2UsdGUsSCw1LE9bMjhdKSx0ZT1MKHRlLG0sQSxvZSxtZSw5LE9bMjldKSxvZT1MKG9lLHRlLG0sQSxWLDE0LE9bMzBdKSxtPUsobSxBPUwoQSxvZSx0ZSxtLFQsMjAs''@;'; put 'put ''T1szMV0pLG9lLHRlLFNlLDQsT1szMl0pLHRlPUsodGUsbSxBLG9lLHAsMTEsT1szM10pLG9lPUsob2UsdGUsbSxBLEMsMTYsT1szNF0pLEE9SyhBLG9lLHRlLG0saiwyMyxPWzM1XSksbT1LKG0sQSxvZSx0ZSxsZSw0LE9bMzZdKSx0ZT1LKHRlLG0sQSxvZSxUZSwxMSxPWzM3XSksb2U9Syhv''@;'; put 'put ''ZSx0ZSxtLEEsViwxNixPWzM4XSksQT1LKEEsb2UsdGUsbSx4LDIzLE9bMzldKSxtPUsobSxBLG9lLHRlLEgsNCxPWzQwXSksdGU9Syh0ZSxtLEEsb2UsaWUsMTEsT1s0MV0pLG9lPUsob2UsdGUsbSxBLF9lLDE2LE9bNDJdKSxBPUsoQSxvZSx0ZSxtLHplLDIzLE9bNDNdKSxtPUsobSxBLG9l''@;'; put 'put ''LHRlLGIsNCxPWzQ0XSksdGU9Syh0ZSxtLEEsb2UsVCwxMSxPWzQ1XSksb2U9SyhvZSx0ZSxtLEEsRSwxNixPWzQ2XSksbT1VKG0sQT1LKEEsb2UsdGUsbSxtZSwyMyxPWzQ3XSksb2UsdGUsaWUsNixPWzQ4XSksdGU9VSh0ZSxtLEEsb2UsViwxMCxPWzQ5XSksb2U9VShvZSx0ZSxtLEEsaiwx''@;'; put 'put ''NSxPWzUwXSksQT1VKEEsb2UsdGUsbSxTZSwyMSxPWzUxXSksbT1VKG0sQSxvZSx0ZSxULDYsT1s1Ml0pLHRlPVUodGUsbSxBLG9lLF9lLDEwLE9bNTNdKSxvZT1VKG9lLHRlLG0sQSx4LDE1LE9bNTRdKSxBPVUoQSxvZSx0ZSxtLGxlLDIxLE9bNTVdKSxtPVUobSxBLG9lLHRlLHAsNixPWzU2''@;'; put 'put ''XSksdGU9VSh0ZSxtLEEsb2UsRSwxMCxPWzU3XSksb2U9VShvZSx0ZSxtLEEsemUsMTUsT1s1OF0pLEE9VShBLG9lLHRlLG0sSCwyMSxPWzU5XSksbT1VKG0sQSxvZSx0ZSxUZSw2LE9bNjBdKSx0ZT1VKHRlLG0sQSxvZSxDLDEwLE9bNjFdKSxvZT1VKG9lLHRlLG0sQSxtZSwxNSxPWzYyXSks''@;'; put 'put ''QT1VKEEsb2UsdGUsbSxiLDIxLE9bNjNdKSxyZVswXT1yZVswXSttfDAscmVbMV09cmVbMV0rQXwwLHJlWzJdPXJlWzJdK29lfDAscmVbM109cmVbM10rdGV8MH0sX2RvRmluYWxpemU6ZnVuY3Rpb24oKXt2YXIgVz10aGlzLl9kYXRhLFk9Vy53b3JkcyxYPTgqdGhpcy5fbkRhdGFCeXRlcyxl''@;'; put 'put ''ZT04Klcuc2lnQnl0ZXM7WVtlZT4+PjVdfD0xMjg8PDI0LWVlJTMyO3ZhciBKPXkuZmxvb3IoWC80Mjk0OTY3Mjk2KSxyZT1YO1lbMTUrKGVlKzY0Pj4+OTw8NCldPTE2NzExOTM1JihKPDw4fEo+Pj4yNCl8NDI3ODI1NTM2MCYoSjw8MjR8Sj4+PjgpLFlbMTQrKGVlKzY0Pj4+OTw8NCldPTE2''@;'; put 'put ''NzExOTM1JihyZTw8OHxyZT4+PjI0KXw0Mjc4MjU1MzYwJihyZTw8MjR8cmU+Pj44KSxXLnNpZ0J5dGVzPTQqKFkubGVuZ3RoKzEpLHRoaXMuX3Byb2Nlc3MoKTtmb3IodmFyIGllPXRoaXMuX2hhc2gsbGU9aWUud29yZHMsbWU9MDttZTw0O21lKyspe3ZhciBfZT1sZVttZV07bGVbbWVdPTE2''@;'; put 'put ''NzExOTM1JihfZTw8OHxfZT4+PjI0KXw0Mjc4MjU1MzYwJihfZTw8MjR8X2U+Pj44KX1yZXR1cm4gaWV9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIFc9UC5jbG9uZS5jYWxsKHRoaXMpO3JldHVybiBXLl9oYXNoPXRoaXMuX2hhc2guY2xvbmUoKSxXfX0pO2Z1bmN0aW9uIE4oVyxZLFgsZWUsSixy''@;'; put 'put ''ZSxpZSl7dmFyIGxlPVcrKFkmWHx+WSZlZSkrSitpZTtyZXR1cm4obGU8PHJlfGxlPj4+MzItcmUpK1l9ZnVuY3Rpb24gTChXLFksWCxlZSxKLHJlLGllKXt2YXIgbGU9VysoWSZlZXxYJn5lZSkrSitpZTtyZXR1cm4obGU8PHJlfGxlPj4+MzItcmUpK1l9ZnVuY3Rpb24gSyhXLFksWCxlZSxK''@;'; put 'put ''LHJlLGllKXt2YXIgbGU9VysoWV5YXmVlKStKK2llO3JldHVybihsZTw8cmV8bGU+Pj4zMi1yZSkrWX1mdW5jdGlvbiBVKFcsWSxYLGVlLEoscmUsaWUpe3ZhciBsZT1XKyhYXihZfH5lZSkpK0oraWU7cmV0dXJuKGxlPDxyZXxsZT4+PjMyLXJlKStZfWcuTUQ1PVAuX2NyZWF0ZUhlbHBlcih6''@;'; put 'put ''KSxnLkhtYWNNRDU9UC5fY3JlYXRlSG1hY0hlbHBlcih6KX0oTWF0aCksSS5NRDUpfSw3MTU0OToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0IjtxLnV0aWxzPV8oODU2NzEpLHEuQ2lwaGVyPV8oMTAyMTkpLHEuREVTPV8oNjQxNjYpLHEuQ0JDPV8oODg4MDApLHEuRURFPV8oNjIxMjIpfSw4ODgw''@;'; put 'put ''MDoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDM5MjEwKSx5PV8oNzE5OTMpLGc9e307ZnVuY3Rpb24gQihQKXtJLmVxdWFsKFAubGVuZ3RoLDgsIkludmFsaWQgSVYgbGVuZ3RoIiksdGhpcy5pdj1uZXcgQXJyYXkoOCk7Zm9yKHZhciBGPTA7Rjx0aGlzLml2Lmxlbmd0aDtGKysp''@;'; put 'put ''dGhpcy5pdltGXT1QW0ZdfXEuaW5zdGFudGlhdGU9ZnVuY3Rpb24gdyhQKXtmdW5jdGlvbiBGKEwpe1AuY2FsbCh0aGlzLEwpLHRoaXMuX2NiY0luaXQoKX15KEYsUCk7Zm9yKHZhciBPPU9iamVjdC5rZXlzKGcpLHo9MDt6PE8ubGVuZ3RoO3orKyl7dmFyIE49T1t6XTtGLnByb3RvdHlwZVtO''@;'; put 'put ''XT1nW05dfXJldHVybiBGLmNyZWF0ZT1mdW5jdGlvbihLKXtyZXR1cm4gbmV3IEYoSyl9LEZ9LGcuX2NiY0luaXQ9ZnVuY3Rpb24oKXt2YXIgRj1uZXcgQih0aGlzLm9wdGlvbnMuaXYpO3RoaXMuX2NiY1N0YXRlPUZ9LGcuX3VwZGF0ZT1mdW5jdGlvbihGLE8seixOKXt2YXIgSz10aGlzLmNv''@;'; put 'put ''bnN0cnVjdG9yLnN1cGVyXy5wcm90b3R5cGUsVT10aGlzLl9jYmNTdGF0ZS5pdjtpZigiZW5jcnlwdCI9PT10aGlzLnR5cGUpe2Zvcih2YXIgVz0wO1c8dGhpcy5ibG9ja1NpemU7VysrKVVbV11ePUZbTytXXTtmb3IoSy5fdXBkYXRlLmNhbGwodGhpcyxVLDAseixOKSxXPTA7Vzx0aGlzLmJs''@;'; put 'put ''b2NrU2l6ZTtXKyspVVtXXT16W04rV119ZWxzZXtmb3IoSy5fdXBkYXRlLmNhbGwodGhpcyxGLE8seixOKSxXPTA7Vzx0aGlzLmJsb2NrU2l6ZTtXKyspeltOK1ddXj1VW1ddO2ZvcihXPTA7Vzx0aGlzLmJsb2NrU2l6ZTtXKyspVVtXXT1GW08rV119fX0sMTAyMTk6KHVlLHEsXyk9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIEk9XygzOTIxMCk7ZnVuY3Rpb24geShnKXt0aGlzLm9wdGlvbnM9Zyx0aGlzLnR5cGU9dGhpcy5vcHRpb25zLnR5cGUsdGhpcy5ibG9ja1NpemU9OCx0aGlzLl9pbml0KCksdGhpcy5idWZmZXI9bmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKSx0aGlzLmJ1ZmZlck9mZj0w''@;'; put 'put ''LHRoaXMucGFkZGluZz0hMSE9PWcucGFkZGluZ311ZS5leHBvcnRzPXkseS5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oKXt9LHkucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihCKXtyZXR1cm4gMD09PUIubGVuZ3RoP1tdOiJkZWNyeXB0Ij09PXRoaXMudHlwZT90aGlzLl91cGRhdGVEZWNy''@;'; put 'put ''eXB0KEIpOnRoaXMuX3VwZGF0ZUVuY3J5cHQoQil9LHkucHJvdG90eXBlLl9idWZmZXI9ZnVuY3Rpb24oQix3KXtmb3IodmFyIFA9TWF0aC5taW4odGhpcy5idWZmZXIubGVuZ3RoLXRoaXMuYnVmZmVyT2ZmLEIubGVuZ3RoLXcpLEY9MDtGPFA7RisrKXRoaXMuYnVmZmVyW3RoaXMuYnVmZmVy''@;'; put 'put ''T2ZmK0ZdPUJbdytGXTtyZXR1cm4gdGhpcy5idWZmZXJPZmYrPVAsUH0seS5wcm90b3R5cGUuX2ZsdXNoQnVmZmVyPWZ1bmN0aW9uKEIsdyl7cmV0dXJuIHRoaXMuX3VwZGF0ZSh0aGlzLmJ1ZmZlciwwLEIsdyksdGhpcy5idWZmZXJPZmY9MCx0aGlzLmJsb2NrU2l6ZX0seS5wcm90b3R5cGUu''@;'; put 'put ''X3VwZGF0ZUVuY3J5cHQ9ZnVuY3Rpb24oQil7dmFyIHc9MCxQPTAsTz1uZXcgQXJyYXkoKCh0aGlzLmJ1ZmZlck9mZitCLmxlbmd0aCkvdGhpcy5ibG9ja1NpemV8MCkqdGhpcy5ibG9ja1NpemUpOzAhPT10aGlzLmJ1ZmZlck9mZiYmKHcrPXRoaXMuX2J1ZmZlcihCLHcpLHRoaXMuYnVmZmVy''@;'; put 'put ''T2ZmPT09dGhpcy5idWZmZXIubGVuZ3RoJiYoUCs9dGhpcy5fZmx1c2hCdWZmZXIoTyxQKSkpO2Zvcih2YXIgej1CLmxlbmd0aC0oQi5sZW5ndGgtdykldGhpcy5ibG9ja1NpemU7dzx6O3crPXRoaXMuYmxvY2tTaXplKXRoaXMuX3VwZGF0ZShCLHcsTyxQKSxQKz10aGlzLmJsb2NrU2l6ZTtm''@;'; put 'put ''b3IoO3c8Qi5sZW5ndGg7dysrLHRoaXMuYnVmZmVyT2ZmKyspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJPZmZdPUJbd107cmV0dXJuIE99LHkucHJvdG90eXBlLl91cGRhdGVEZWNyeXB0PWZ1bmN0aW9uKEIpe2Zvcih2YXIgdz0wLFA9MCxGPU1hdGguY2VpbCgodGhpcy5idWZmZXJPZmYrQi5s''@;'; put 'put ''ZW5ndGgpL3RoaXMuYmxvY2tTaXplKS0xLE89bmV3IEFycmF5KEYqdGhpcy5ibG9ja1NpemUpO0Y+MDtGLS0pdys9dGhpcy5fYnVmZmVyKEIsdyksUCs9dGhpcy5fZmx1c2hCdWZmZXIoTyxQKTtyZXR1cm4gdys9dGhpcy5fYnVmZmVyKEIsdyksT30seS5wcm90b3R5cGUuZmluYWw9ZnVuY3Rp''@;'; put 'put ''b24oQil7dmFyIHcsUDtyZXR1cm4gQiYmKHc9dGhpcy51cGRhdGUoQikpLFA9ImVuY3J5cHQiPT09dGhpcy50eXBlP3RoaXMuX2ZpbmFsRW5jcnlwdCgpOnRoaXMuX2ZpbmFsRGVjcnlwdCgpLHc/dy5jb25jYXQoUCk6UH0seS5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbihCLHcpe2lmKDA9PT13''@;'; put 'put ''KXJldHVybiExO2Zvcig7dzxCLmxlbmd0aDspQlt3KytdPTA7cmV0dXJuITB9LHkucHJvdG90eXBlLl9maW5hbEVuY3J5cHQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fcGFkKHRoaXMuYnVmZmVyLHRoaXMuYnVmZmVyT2ZmKSlyZXR1cm5bXTt2YXIgQj1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUp''@;'; put 'put ''O3JldHVybiB0aGlzLl91cGRhdGUodGhpcy5idWZmZXIsMCxCLDApLEJ9LHkucHJvdG90eXBlLl91bnBhZD1mdW5jdGlvbihCKXtyZXR1cm4gQn0seS5wcm90b3R5cGUuX2ZpbmFsRGVjcnlwdD1mdW5jdGlvbigpe0kuZXF1YWwodGhpcy5idWZmZXJPZmYsdGhpcy5ibG9ja1NpemUsIk5vdCBl''@;'; put 'put ''bm91Z2ggZGF0YSB0byBkZWNyeXB0Iik7dmFyIEI9bmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKTtyZXR1cm4gdGhpcy5fZmx1c2hCdWZmZXIoQiwwKSx0aGlzLl91bnBhZChCKX19LDY0MTY2Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMzkyMTApLHk9Xyg3MTk5MyksZz1fKDg1''@;'; put 'put ''NjcxKSxCPV8oMTAyMTkpO2Z1bmN0aW9uIHcoKXt0aGlzLnRtcD1uZXcgQXJyYXkoMiksdGhpcy5rZXlzPW51bGx9ZnVuY3Rpb24gUChPKXtCLmNhbGwodGhpcyxPKTt2YXIgej1uZXcgdzt0aGlzLl9kZXNTdGF0ZT16LHRoaXMuZGVyaXZlS2V5cyh6LE8ua2V5KX15KFAsQiksdWUuZXhwb3J0''@;'; put 'put ''cz1QLFAuY3JlYXRlPWZ1bmN0aW9uKHope3JldHVybiBuZXcgUCh6KX07dmFyIEY9WzEsMSwyLDIsMiwyLDIsMiwxLDIsMiwyLDIsMiwyLDFdO1AucHJvdG90eXBlLmRlcml2ZUtleXM9ZnVuY3Rpb24oeixOKXt6LmtleXM9bmV3IEFycmF5KDMyKSxJLmVxdWFsKE4ubGVuZ3RoLHRoaXMuYmxv''@;'; put 'put ''Y2tTaXplLCJJbnZhbGlkIGtleSBsZW5ndGgiKTt2YXIgTD1nLnJlYWRVSW50MzJCRShOLDApLEs9Zy5yZWFkVUludDMyQkUoTiw0KTtnLnBjMShMLEssei50bXAsMCksTD16LnRtcFswXSxLPXoudG1wWzFdO2Zvcih2YXIgVT0wO1U8ei5rZXlzLmxlbmd0aDtVKz0yKXt2YXIgVz1GW1U+Pj4x''@;'; put 'put ''XTtMPWcucjI4c2hsKEwsVyksSz1nLnIyOHNobChLLFcpLGcucGMyKEwsSyx6LmtleXMsVSl9fSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHosTixMLEspe3ZhciBVPXRoaXMuX2Rlc1N0YXRlLFc9Zy5yZWFkVUludDMyQkUoeixOKSxZPWcucmVhZFVJbnQzMkJFKHosTis0KTtnLmlw''@;'; put 'put ''KFcsWSxVLnRtcCwwKSxXPVUudG1wWzBdLFk9VS50bXBbMV0sImVuY3J5cHQiPT09dGhpcy50eXBlP3RoaXMuX2VuY3J5cHQoVSxXLFksVS50bXAsMCk6dGhpcy5fZGVjcnlwdChVLFcsWSxVLnRtcCwwKSxZPVUudG1wWzFdLGcud3JpdGVVSW50MzJCRShMLFc9VS50bXBbMF0sSyksZy53cml0''@;'; put 'put ''ZVVJbnQzMkJFKEwsWSxLKzQpfSxQLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKHosTil7aWYoITE9PT10aGlzLnBhZGRpbmcpcmV0dXJuITE7Zm9yKHZhciBMPXoubGVuZ3RoLU4sSz1OO0s8ei5sZW5ndGg7SysrKXpbS109TDtyZXR1cm4hMH0sUC5wcm90b3R5cGUuX3VucGFkPWZ1bmN0aW9u''@;'; put 'put ''KHope2lmKCExPT09dGhpcy5wYWRkaW5nKXJldHVybiB6O2Zvcih2YXIgTj16W3oubGVuZ3RoLTFdLEw9ei5sZW5ndGgtTjtMPHoubGVuZ3RoO0wrKylJLmVxdWFsKHpbTF0sTik7cmV0dXJuIHouc2xpY2UoMCx6Lmxlbmd0aC1OKX0sUC5wcm90b3R5cGUuX2VuY3J5cHQ9ZnVuY3Rpb24oeixO''@;'; put 'put ''LEwsSyxVKXtmb3IodmFyIFc9TixZPUwsWD0wO1g8ei5rZXlzLmxlbmd0aDtYKz0yKXt2YXIgZWU9ei5rZXlzW1hdLEo9ei5rZXlzW1grMV07Zy5leHBhbmQoWSx6LnRtcCwwKTt2YXIgcmU9Zy5zdWJzdGl0dXRlKGVlXj16LnRtcFswXSxKXj16LnRtcFsxXSksbGU9WTtZPShXXmcucGVybXV0''@;'; put 'put ''ZShyZSkpPj4+MCxXPWxlfWcucmlwKFksVyxLLFUpfSxQLnByb3RvdHlwZS5fZGVjcnlwdD1mdW5jdGlvbih6LE4sTCxLLFUpe2Zvcih2YXIgVz1MLFk9TixYPXoua2V5cy5sZW5ndGgtMjtYPj0wO1gtPTIpe3ZhciBlZT16LmtleXNbWF0sSj16LmtleXNbWCsxXTtnLmV4cGFuZChXLHoudG1w''@;'; put 'put ''LDApO3ZhciByZT1nLnN1YnN0aXR1dGUoZWVePXoudG1wWzBdLEpePXoudG1wWzFdKSxsZT1XO1c9KFleZy5wZXJtdXRlKHJlKSk+Pj4wLFk9bGV9Zy5yaXAoVyxZLEssVSl9fSw2MjEyMjoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDM5MjEwKSx5PV8oNzE5OTMpLGc9XygxMDIx''@;'; put 'put ''OSksQj1fKDY0MTY2KTtmdW5jdGlvbiB3KEYsTyl7SS5lcXVhbChPLmxlbmd0aCwyNCwiSW52YWxpZCBrZXkgbGVuZ3RoIik7dmFyIHo9Ty5zbGljZSgwLDgpLE49Ty5zbGljZSg4LDE2KSxMPU8uc2xpY2UoMTYsMjQpO3RoaXMuY2lwaGVycz0iZW5jcnlwdCI9PT1GP1tCLmNyZWF0ZSh7dHlw''@;'; put 'put ''ZToiZW5jcnlwdCIsa2V5Onp9KSxCLmNyZWF0ZSh7dHlwZToiZGVjcnlwdCIsa2V5Ok59KSxCLmNyZWF0ZSh7dHlwZToiZW5jcnlwdCIsa2V5Okx9KV06W0IuY3JlYXRlKHt0eXBlOiJkZWNyeXB0IixrZXk6TH0pLEIuY3JlYXRlKHt0eXBlOiJlbmNyeXB0IixrZXk6Tn0pLEIuY3JlYXRlKHt0''@;'; put 'put ''eXBlOiJkZWNyeXB0IixrZXk6en0pXX1mdW5jdGlvbiBQKEYpe2cuY2FsbCh0aGlzLEYpO3ZhciBPPW5ldyB3KHRoaXMudHlwZSx0aGlzLm9wdGlvbnMua2V5KTt0aGlzLl9lZGVTdGF0ZT1PfXkoUCxnKSx1ZS5leHBvcnRzPVAsUC5jcmVhdGU9ZnVuY3Rpb24oTyl7cmV0dXJuIG5ldyBQKE8p''@;'; put 'put ''fSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKE8seixOLEwpe3ZhciBLPXRoaXMuX2VkZVN0YXRlO0suY2lwaGVyc1swXS5fdXBkYXRlKE8seixOLEwpLEsuY2lwaGVyc1sxXS5fdXBkYXRlKE4sTCxOLEwpLEsuY2lwaGVyc1syXS5fdXBkYXRlKE4sTCxOLEwpfSxQLnByb3RvdHlwZS5f''@;'; put 'put ''cGFkPUIucHJvdG90eXBlLl9wYWQsUC5wcm90b3R5cGUuX3VucGFkPUIucHJvdG90eXBlLl91bnBhZH0sODU2NzE6KHVlLHEpPT57InVzZSBzdHJpY3QiO3EucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKEIsdyl7cmV0dXJuKEJbMCt3XTw8MjR8QlsxK3ddPDwxNnxCWzIrd108PDh8QlszK3ddKT4+''@;'; put 'put ''PjB9LHEud3JpdGVVSW50MzJCRT1mdW5jdGlvbihCLHcsUCl7QlswK1BdPXc+Pj4yNCxCWzErUF09dz4+PjE2JjI1NSxCWzIrUF09dz4+PjgmMjU1LEJbMytQXT0yNTUmd30scS5pcD1mdW5jdGlvbihCLHcsUCxGKXtmb3IodmFyIE89MCx6PTAsTj02O04+PTA7Ti09Mil7Zm9yKHZhciBMPTA7''@;'; put 'put ''TDw9MjQ7TCs9OClPPDw9MSxPfD13Pj4+TCtOJjE7Zm9yKEw9MDtMPD0yNDtMKz04KU88PD0xLE98PUI+Pj5MK04mMX1mb3IoTj02O04+PTA7Ti09Mil7Zm9yKEw9MTtMPD0yNTtMKz04KXo8PD0xLHp8PXc+Pj5MK04mMTtmb3IoTD0xO0w8PTI1O0wrPTgpejw8PTEsenw9Qj4+PkwrTiYxfVBb''@;'; put 'put ''RiswXT1PPj4+MCxQW0YrMV09ej4+PjB9LHEucmlwPWZ1bmN0aW9uKEIsdyxQLEYpe2Zvcih2YXIgTz0wLHo9MCxOPTA7Tjw0O04rKylmb3IodmFyIEw9MjQ7TD49MDtMLT04KU88PD0xLE98PXc+Pj5MK04mMSxPPDw9MSxPfD1CPj4+TCtOJjE7Zm9yKE49NDtOPDg7TisrKWZvcihMPTI0O0w+''@;'; put 'put ''PTA7TC09OCl6PDw9MSx6fD13Pj4+TCtOJjEsejw8PTEsenw9Qj4+PkwrTiYxO1BbRiswXT1PPj4+MCxQW0YrMV09ej4+PjB9LHEucGMxPWZ1bmN0aW9uKEIsdyxQLEYpe2Zvcih2YXIgTz0wLHo9MCxOPTc7Tj49NTtOLS0pe2Zvcih2YXIgTD0wO0w8PTI0O0wrPTgpTzw8PTEsT3w9dz4+TCtO''@;'; put 'put ''JjE7Zm9yKEw9MDtMPD0yNDtMKz04KU88PD0xLE98PUI+PkwrTiYxfWZvcihMPTA7TDw9MjQ7TCs9OClPPDw9MSxPfD13Pj5MK04mMTtmb3IoTj0xO048PTM7TisrKXtmb3IoTD0wO0w8PTI0O0wrPTgpejw8PTEsenw9dz4+TCtOJjE7Zm9yKEw9MDtMPD0yNDtMKz04KXo8PD0xLHp8PUI+Pkwr''@;'; put 'put ''TiYxfWZvcihMPTA7TDw9MjQ7TCs9OCl6PDw9MSx6fD1CPj5MK04mMTtQW0YrMF09Tz4+PjAsUFtGKzFdPXo+Pj4wfSxxLnIyOHNobD1mdW5jdGlvbihCLHcpe3JldHVybiBCPDx3JjI2ODQzNTQ1NXxCPj4+Mjgtd307dmFyIF89WzE0LDExLDE3LDQsMjcsMjMsMjUsMCwxMywyMiw3LDE4LDUs''@;'; put 'put ''OSwxNiwyNCwyLDIwLDEyLDIxLDEsOCwxNSwyNiwxNSw0LDI1LDE5LDksMSwyNiwxNiw1LDExLDIzLDgsMTIsNywxNywwLDIyLDMsMTAsMTQsNiwyMCwyNywyNF07cS5wYzI9ZnVuY3Rpb24oQix3LFAsRil7Zm9yKHZhciBPPTAsej0wLE49Xy5sZW5ndGg+Pj4xLEw9MDtMPE47TCsrKU88PD0x''@;'; put 'put ''LE98PUI+Pj5fW0xdJjE7Zm9yKEw9TjtMPF8ubGVuZ3RoO0wrKyl6PDw9MSx6fD13Pj4+X1tMXSYxO1BbRiswXT1PPj4+MCxQW0YrMV09ej4+PjB9LHEuZXhwYW5kPWZ1bmN0aW9uKEIsdyxQKXt2YXIgRj0wLE89MDtGPSgxJkIpPDw1fEI+Pj4yNztmb3IodmFyIHo9MjM7ej49MTU7ei09NClG''@;'; put 'put ''PDw9NixGfD1CPj4+eiY2Mztmb3Ioej0xMTt6Pj0zO3otPTQpT3w9Qj4+PnomNjMsTzw8PTY7T3w9KDMxJkIpPDwxfEI+Pj4zMSx3W1ArMF09Rj4+PjAsd1tQKzFdPU8+Pj4wfTt2YXIgST1bMTQsMCw0LDE1LDEzLDcsMSw0LDIsMTQsMTUsMiwxMSwxMyw4LDEsMywxMCwxMCw2LDYsMTIsMTIs''@;'; put 'put ''MTEsNSw5LDksNSwwLDMsNyw4LDQsMTUsMSwxMiwxNCw4LDgsMiwxMyw0LDYsOSwyLDEsMTEsNywxNSw1LDEyLDExLDksMyw3LDE0LDMsMTAsMTAsMCw1LDYsMCwxMywxNSwzLDEsMTMsOCw0LDE0LDcsNiwxNSwxMSwyLDMsOCw0LDE0LDksMTIsNywwLDIsMSwxMywxMCwxMiw2LDAsOSw1LDEx''@;'; put 'put ''LDEwLDUsMCwxMywxNCw4LDcsMTAsMTEsMSwxMCwzLDQsMTUsMTMsNCwxLDIsNSwxMSw4LDYsMTIsNyw2LDEyLDksMCwzLDUsMiwxNCwxNSw5LDEwLDEzLDAsNyw5LDAsMTQsOSw2LDMsMyw0LDE1LDYsNSwxMCwxLDIsMTMsOCwxMiw1LDcsMTQsMTEsMTIsNCwxMSwyLDE1LDgsMSwxMywxLDYs''@;'; put 'put ''MTAsNCwxMyw5LDAsOCw2LDE1LDksMyw4LDAsNywxMSw0LDEsMTUsMiwxNCwxMiwzLDUsMTEsMTAsNSwxNCwyLDcsMTIsNywxMywxMyw4LDE0LDExLDMsNSwwLDYsNiwxNSw5LDAsMTAsMywxLDQsMiw3LDgsMiw1LDEyLDExLDEsMTIsMTAsNCwxNCwxNSw5LDEwLDMsNiwxNSw5LDAsMCw2LDEy''@;'; put 'put ''LDEwLDExLDEsNywxMywxMyw4LDE1LDksMSw0LDMsNSwxNCwxMSw1LDEyLDIsNyw4LDIsNCwxNCwyLDE0LDEyLDExLDQsMiwxLDEyLDcsNCwxMCw3LDExLDEzLDYsMSw4LDUsNSwwLDMsMTUsMTUsMTAsMTMsMywwLDksMTQsOCw5LDYsNCwxMSwyLDgsMSwxMiwxMSw3LDEwLDEsMTMsMTQsNywy''@;'; put 'put ''LDgsMTMsMTUsNiw5LDE1LDEyLDAsNSw5LDYsMTAsMyw0LDAsNSwxNCwzLDEyLDEwLDEsMTUsMTAsNCwxNSwyLDksNywyLDEyLDYsOSw4LDUsMCw2LDEzLDEsMywxMyw0LDE0LDE0LDAsNywxMSw1LDMsMTEsOCw5LDQsMTQsMywxNSwyLDUsMTIsMiw5LDgsNSwxMiwxNSwzLDEwLDcsMTEsMCwx''@;'; put 'put ''NCw0LDEsMTAsNywxLDYsMTMsMCwxMSw4LDYsMTMsNCwxMywxMSwwLDIsMTEsMTQsNywxNSw0LDAsOSw4LDEsMTMsMTAsMywxNCwxMiwzLDksNSw3LDEyLDUsMiwxMCwxNSw2LDgsMSw2LDEsNiw0LDExLDExLDEzLDEzLDgsMTIsMSwzLDQsNywxMCwxNCw3LDEwLDksMTUsNSw2LDAsOCwxNSww''@;'; put 'put ''LDE0LDUsMiw5LDMsMiwxMiwxMywxLDIsMTUsOCwxMyw0LDgsNiwxMCwxNSwzLDExLDcsMSw0LDEwLDEyLDksNSwzLDYsMTQsMTEsNSwwLDAsMTQsMTIsOSw3LDIsNywyLDExLDEsNCwxNCwxLDcsOSw0LDEyLDEwLDE0LDgsMiwxMywwLDE1LDYsMTIsMTAsOSwxMywwLDE1LDMsMyw1LDUsNiw4''@;'; put 'put ''LDExXTtxLnN1YnN0aXR1dGU9ZnVuY3Rpb24oQix3KXtmb3IodmFyIFA9MCxGPTA7Rjw0O0YrKylQPDw9NCxQfD1JWzY0KkYrKEI+Pj4xOC02KkYmNjMpXTtmb3IoRj0wO0Y8NDtGKyspUDw8PTQsUHw9SVsyNTYrNjQqRisodz4+PjE4LTYqRiY2MyldO3JldHVybiBQPj4+MH07dmFyIHk9WzE2''@;'; put 'put ''LDI1LDEyLDExLDMsMjAsNCwxNSwzMSwxNyw5LDYsMjcsMTQsMSwyMiwzMCwyNCw4LDE4LDAsNSwyOSwyMywxMywxOSwyLDI2LDEwLDIxLDI4LDddO3EucGVybXV0ZT1mdW5jdGlvbihCKXtmb3IodmFyIHc9MCxQPTA7UDx5Lmxlbmd0aDtQKyspdzw8PTEsd3w9Qj4+PnlbUF0mMTtyZXR1cm4g''@;'; put 'put ''dz4+PjB9LHEucGFkU3BsaXQ9ZnVuY3Rpb24oQix3LFApe2Zvcih2YXIgRj1CLnRvU3RyaW5nKDIpO0YubGVuZ3RoPHc7KUY9IjAiK0Y7Zm9yKHZhciBPPVtdLHo9MDt6PHc7eis9UClPLnB1c2goRi5zbGljZSh6LHorUCkpO3JldHVybiBPLmpvaW4oIiAiKX19LDQzNzc6KHVlLHEsXyk9Pnt2''@;'; put 'put ''YXIgST1fKDEyNzI3KSx5PV8oMjMyNDEpLGc9Xyg5NDU5Myksdz17YmluYXJ5OiEwLGhleDohMCxiYXNlNjQ6ITB9O3EuRGlmZmllSGVsbG1hbkdyb3VwPXEuY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwPXEuZ2V0RGlmZmllSGVsbG1hbj1mdW5jdGlvbiBCKEYpe3ZhciBPPW5ldyBCdWZmZXIo''@;'; put 'put ''eVtGXS5wcmltZSwiaGV4Iiksej1uZXcgQnVmZmVyKHlbRl0uZ2VuLCJoZXgiKTtyZXR1cm4gbmV3IGcoTyx6KX0scS5jcmVhdGVEaWZmaWVIZWxsbWFuPXEuRGlmZmllSGVsbG1hbj1mdW5jdGlvbiBQKEYsTyx6LE4pe3JldHVybiBCdWZmZXIuaXNCdWZmZXIoTyl8fHZvaWQgMD09PXdbT10/''@;'; put 'put ''UChGLCJiaW5hcnkiLE8seik6KE89T3x8ImJpbmFyeSIsTj1OfHwiYmluYXJ5Iix6PXp8fG5ldyBCdWZmZXIoWzJdKSxCdWZmZXIuaXNCdWZmZXIoeil8fCh6PW5ldyBCdWZmZXIoeixOKSksIm51bWJlciI9PXR5cGVvZiBGP25ldyBnKEkoRix6KSx6LCEwKTooQnVmZmVyLmlzQnVmZmVyKEYp''@;'; put 'put ''fHwoRj1uZXcgQnVmZmVyKEYsTykpLG5ldyBnKEYseiwhMCkpKX19LDk0NTkzOih1ZSxxLF8pPT57dmFyIEk9XygzODI4MCksZz1uZXcoXyg1MzQ1OSkpLEI9bmV3IEkoMjQpLHc9bmV3IEkoMTEpLFA9bmV3IEkoMTApLEY9bmV3IEkoMyksTz1uZXcgSSg3KSx6PV8oMTI3MjcpLE49XygzMzQy''@;'; put 'put ''KTtmdW5jdGlvbiBMKGVlLEope3JldHVybiBKPUp8fCJ1dGY4IixCdWZmZXIuaXNCdWZmZXIoZWUpfHwoZWU9bmV3IEJ1ZmZlcihlZSxKKSksdGhpcy5fcHViPW5ldyBJKGVlKSx0aGlzfWZ1bmN0aW9uIEsoZWUsSil7cmV0dXJuIEo9Snx8InV0ZjgiLEJ1ZmZlci5pc0J1ZmZlcihlZSl8fChl''@;'; put 'put ''ZT1uZXcgQnVmZmVyKGVlLEopKSx0aGlzLl9wcml2PW5ldyBJKGVlKSx0aGlzfXVlLmV4cG9ydHM9WTt2YXIgVT17fTtmdW5jdGlvbiBZKGVlLEoscmUpe3RoaXMuc2V0R2VuZXJhdG9yKEopLHRoaXMuX19wcmltZT1uZXcgSShlZSksdGhpcy5fcHJpbWU9SS5tb250KHRoaXMuX19wcmltZSks''@;'; put 'put ''dGhpcy5fcHJpbWVMZW49ZWUubGVuZ3RoLHRoaXMuX3B1Yj12b2lkIDAsdGhpcy5fcHJpdj12b2lkIDAsdGhpcy5fcHJpbWVDb2RlPXZvaWQgMCxyZT8odGhpcy5zZXRQdWJsaWNLZXk9TCx0aGlzLnNldFByaXZhdGVLZXk9Syk6dGhpcy5fcHJpbWVDb2RlPTh9ZnVuY3Rpb24gWChlZSxKKXt2''@;'; put 'put ''YXIgcmU9bmV3IEJ1ZmZlcihlZS50b0FycmF5KCkpO3JldHVybiBKP3JlLnRvU3RyaW5nKEopOnJlfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShZLnByb3RvdHlwZSwidmVyaWZ5RXJyb3IiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiJudW1iZXIiIT10eXBlb2YgdGhpcy5f''@;'; put 'put ''cHJpbWVDb2RlJiYodGhpcy5fcHJpbWVDb2RlPWZ1bmN0aW9uIFcoZWUsSil7dmFyIHJlPUoudG9TdHJpbmcoImhleCIpLGllPVtyZSxlZS50b1N0cmluZygxNildLmpvaW4oIl8iKTtpZihpZSBpbiBVKXJldHVybiBVW2llXTt2YXIgbWUsbGU9MDtpZihlZS5pc0V2ZW4oKXx8IXouc2ltcGxl''@;'; put 'put ''U2lldmV8fCF6LmZlcm1hdFRlc3QoZWUpfHwhZy50ZXN0KGVlKSlyZXR1cm4gbGUrPTEsVVtpZV09bGUrPSIwMiI9PT1yZXx8IjA1Ij09PXJlPzg6NCxsZTtzd2l0Y2goZy50ZXN0KGVlLnNocm4oMSkpfHwobGUrPTIpLHJlKXtjYXNlIjAyIjplZS5tb2QoQikuY21wKHcpJiYobGUrPTgpO2Jy''@;'; put 'put ''ZWFrO2Nhc2UiMDUiOihtZT1lZS5tb2QoUCkpLmNtcChGKSYmbWUuY21wKE8pJiYobGUrPTgpO2JyZWFrO2RlZmF1bHQ6bGUrPTR9cmV0dXJuIFVbaWVdPWxlLGxlfSh0aGlzLl9fcHJpbWUsdGhpcy5fX2dlbikpLHRoaXMuX3ByaW1lQ29kZX19KSxZLnByb3RvdHlwZS5nZW5lcmF0ZUtleXM9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdnx8KHRoaXMuX3ByaXY9bmV3IEkoTih0aGlzLl9wcmltZUxlbikpKSx0aGlzLl9wdWI9dGhpcy5fZ2VuLnRvUmVkKHRoaXMuX3ByaW1lKS5yZWRQb3codGhpcy5fcHJpdikuZnJvbVJlZCgpLHRoaXMuZ2V0UHVibGljS2V5KCl9LFkucHJvdG90''@;'; put 'put ''eXBlLmNvbXB1dGVTZWNyZXQ9ZnVuY3Rpb24oZWUpe3ZhciBKPShlZT0oZWU9bmV3IEkoZWUpKS50b1JlZCh0aGlzLl9wcmltZSkpLnJlZFBvdyh0aGlzLl9wcml2KS5mcm9tUmVkKCkscmU9bmV3IEJ1ZmZlcihKLnRvQXJyYXkoKSksaWU9dGhpcy5nZXRQcmltZSgpO2lmKHJlLmxlbmd0aDxp''@;'; put 'put ''ZS5sZW5ndGgpe3ZhciBsZT1uZXcgQnVmZmVyKGllLmxlbmd0aC1yZS5sZW5ndGgpO2xlLmZpbGwoMCkscmU9QnVmZmVyLmNvbmNhdChbbGUscmVdKX1yZXR1cm4gcmV9LFkucHJvdG90eXBlLmdldFB1YmxpY0tleT1mdW5jdGlvbihKKXtyZXR1cm4gWCh0aGlzLl9wdWIsSil9LFkucHJvdG90''@;'; put 'put ''eXBlLmdldFByaXZhdGVLZXk9ZnVuY3Rpb24oSil7cmV0dXJuIFgodGhpcy5fcHJpdixKKX0sWS5wcm90b3R5cGUuZ2V0UHJpbWU9ZnVuY3Rpb24oZWUpe3JldHVybiBYKHRoaXMuX19wcmltZSxlZSl9LFkucHJvdG90eXBlLmdldEdlbmVyYXRvcj1mdW5jdGlvbihlZSl7cmV0dXJuIFgodGhp''@;'; put 'put ''cy5fZ2VuLGVlKX0sWS5wcm90b3R5cGUuc2V0R2VuZXJhdG9yPWZ1bmN0aW9uKGVlLEope3JldHVybiBKPUp8fCJ1dGY4IixCdWZmZXIuaXNCdWZmZXIoZWUpfHwoZWU9bmV3IEJ1ZmZlcihlZSxKKSksdGhpcy5fX2dlbj1lZSx0aGlzLl9nZW49bmV3IEkoZWUpLHRoaXN9fSwxMjcyNzoodWUs''@;'; put 'put ''cSxfKT0+e3ZhciBJPV8oMzM0Mik7dWUuZXhwb3J0cz1sZSxsZS5zaW1wbGVTaWV2ZT1yZSxsZS5mZXJtYXRUZXN0PWllO3ZhciB5PV8oMzgyODApLGc9bmV3IHkoMjQpLHc9bmV3KF8oNTM0NTkpKSxQPW5ldyB5KDEpLEY9bmV3IHkoMiksTz1uZXcgeSg1KSxMPShuZXcgeSgxNiksbmV3IHko''@;'; put 'put ''OCksbmV3IHkoMTApKSxLPW5ldyB5KDMpLFc9KG5ldyB5KDcpLG5ldyB5KDExKSksWT1uZXcgeSg0KSxlZT0obmV3IHkoMTIpLG51bGwpO2Z1bmN0aW9uIHJlKG1lKXtmb3IodmFyIF9lPWZ1bmN0aW9uIEooKXtpZihudWxsIT09ZWUpcmV0dXJuIGVlO3ZhciBfZT1bXTtfZVswXT0yO2Zvcih2''@;'; put 'put ''YXIgVGU9MSxTZT0zO1NlPDEwNDg1NzY7U2UrPTIpe2Zvcih2YXIgemU9TWF0aC5jZWlsKE1hdGguc3FydChTZSkpLFY9MDtWPFRlJiZfZVtWXTw9emUmJlNlJV9lW1ZdIT0wO1YrKyk7VGUhPT1WJiZfZVtWXTw9emV8fChfZVtUZSsrXT1TZSl9cmV0dXJuIGVlPV9lLF9lfSgpLFRlPTA7VGU8''@;'; put 'put ''X2UubGVuZ3RoO1RlKyspaWYoMD09PW1lLm1vZG4oX2VbVGVdKSlyZXR1cm4gMD09PW1lLmNtcG4oX2VbVGVdKTtyZXR1cm4hMH1mdW5jdGlvbiBpZShtZSl7dmFyIF9lPXkubW9udChtZSk7cmV0dXJuIDA9PT1GLnRvUmVkKF9lKS5yZWRQb3cobWUuc3VibigxKSkuZnJvbVJlZCgpLmNtcG4o''@;'; put 'put ''MSl9ZnVuY3Rpb24gbGUobWUsX2Upe2lmKG1lPDE2KXJldHVybiBuZXcgeSgyPT09X2V8fDU9PT1fZT9bMTQwLDEyM106WzE0MCwzOV0pO19lPW5ldyB5KF9lKTtmb3IodmFyIFRlLFNlOzspe2ZvcihUZT1uZXcgeShJKE1hdGguY2VpbChtZS84KSkpO1RlLmJpdExlbmd0aCgpPm1lOylUZS5p''@;'; put 'put ''c2hybigxKTtpZihUZS5pc0V2ZW4oKSYmVGUuaWFkZChQKSxUZS50ZXN0bigxKXx8VGUuaWFkZChGKSxfZS5jbXAoRikpe2lmKCFfZS5jbXAoTykpZm9yKDtUZS5tb2QoTCkuY21wKEspOylUZS5pYWRkKFkpfWVsc2UgZm9yKDtUZS5tb2QoZykuY21wKFcpOylUZS5pYWRkKFkpO2lmKHJlKFNl''@;'; put 'put ''PVRlLnNocm4oMSkpJiZyZShUZSkmJmllKFNlKSYmaWUoVGUpJiZ3LnRlc3QoU2UpJiZ3LnRlc3QoVGUpKXJldHVybiBUZX19fSwzODI4MDpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJLHkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBnKFYscCl7aWYoIVYpdGhyb3cgbmV3IEVycm9yKHB8''@;'; put 'put ''fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gQihWLHApe1Yuc3VwZXJfPXA7dmFyIGI9ZnVuY3Rpb24oKXt9O2IucHJvdG90eXBlPXAucHJvdG90eXBlLFYucHJvdG90eXBlPW5ldyBiLFYucHJvdG90eXBlLmNvbnN0cnVjdG9yPVZ9ZnVuY3Rpb24gdyhWLHAsYil7aWYody5pc0JOKFYp''@;'; put 'put ''KXJldHVybiBWO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1WJiYoKCJsZSI9PT1wfHwiYmUiPT09cCkmJihiPXAscD0xMCksdGhpcy5faW5pdChWfHwwLHB8fDEwLGJ8fCJiZSIpKX12YXIgUDsib2JqZWN0Ij09dHlw''@;'; put 'put ''ZW9mIEk/SS5leHBvcnRzPXc6eS5CTj13LHcuQk49dyx3LndvcmRTaXplPTI2O3RyeXtQPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpfKDY2MDg5KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEYoVixwKXt2YXIgYj1WLmNoYXJDb2Rl''@;'; put 'put ''QXQocCk7cmV0dXJuIGI+PTY1JiZiPD03MD9iLTU1OmI+PTk3JiZiPD0xMDI/Yi04NzpiLTQ4JjE1fWZ1bmN0aW9uIE8oVixwLGIpe3ZhciB4PUYoVixiKTtyZXR1cm4gYi0xPj1wJiYoeHw9RihWLGItMSk8PDQpLHh9ZnVuY3Rpb24geihWLHAsYix4KXtmb3IodmFyIEM9MCxUPU1hdGgubWlu''@;'; put 'put ''KFYubGVuZ3RoLGIpLEg9cDtIPFQ7SCsrKXt2YXIgaj1WLmNoYXJDb2RlQXQoSCktNDg7Qyo9eCxDKz1qPj00OT9qLTQ5KzEwOmo+PTE3P2otMTcrMTA6an1yZXR1cm4gQ313LmlzQk49ZnVuY3Rpb24ocCl7cmV0dXJuIHAgaW5zdGFuY2VvZiB3fHxudWxsIT09cCYmIm9iamVjdCI9PXR5cGVv''@;'; put 'put ''ZiBwJiZwLmNvbnN0cnVjdG9yLndvcmRTaXplPT09dy53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShwLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gcC5jbXAoYik+MD9wOmJ9LHcubWluPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPDA/cDpifSx3LnByb3RvdHlwZS5f''@;'; put 'put ''aW5pdD1mdW5jdGlvbihwLGIseCl7aWYoIm51bWJlciI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHAsYix4KTtpZigib2JqZWN0Ij09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXRBcnJheShwLGIseCk7ImhleCI9PT1iJiYoYj0xNiksZyhiPT09KDB8YikmJmI+PTImJmI8''@;'; put 'put ''PTM2KTt2YXIgQz0wOyItIj09PShwPXAudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoQysrLHRoaXMubmVnYXRpdmU9MSksQzxwLmxlbmd0aCYmKDE2PT09Yj90aGlzLl9wYXJzZUhleChwLEMseCk6KHRoaXMuX3BhcnNlQmFzZShwLGIsQyksImxlIj09PXgmJnRoaXMuX2lu''@;'; put 'put ''aXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiLHgpKSl9LHcucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKHAsYix4KXtwPDAmJih0aGlzLm5lZ2F0aXZlPTEscD0tcCkscDw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcF0sdGhpcy5sZW5ndGg9MSk6cDw0NTAzNTk5NjI3Mzcw''@;'; put 'put ''NDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZwLHAvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihnKHA8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0aGlzLl9p''@;'; put 'put ''bml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KX0sdy5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihwLGIseCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHAubGVuZ3RoKSxwLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3Ro''@;'; put 'put ''PU1hdGguY2VpbChwLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULEgsaj0wO2lmKCJiZSI9PT14KWZvcihDPXAubGVuZ3RoLTEsVD0wO0M+PTA7Qy09Myl0aGlzLndv''@;'; put 'put ''cmRzW1RdfD0oSD1wW0NdfHBbQy0xXTw8OHxwW0MtMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO2Vsc2UgaWYoImxlIj09PXgpZm9yKEM9MCxUPTA7QzxwLmxlbmd0aDtDKz0zKXRoaXMud29yZHNb''@;'; put 'put ''VF18PShIPXBbQ118cFtDKzFdPDw4fHBbQysyXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHAsYix4KXt0''@;'; put 'put ''aGlzLmxlbmd0aD1NYXRoLmNlaWwoKHAubGVuZ3RoLWIpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIGosVD0wLEg9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xO0M+PWI7''@;'; put 'put ''Qy09MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODtlbHNlIGZvcihDPShwLmxlbmd0aC1iKSUyPT0wP2IrMTpiO0M8cC5sZW5ndGg7Qys9MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNb''@;'; put 'put ''SF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODt0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24ocCxiLHgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBDPTAsVD0xO1Q8PTY3MTA4''@;'; put 'put ''ODYzO1QqPWIpQysrO0MtLSxUPVQvYnwwO2Zvcih2YXIgSD1wLmxlbmd0aC14LGo9SCVDLEU9TWF0aC5taW4oSCxILWopK3gsbT0wLEE9eDtBPEU7QSs9QyltPXoocCxBLEErQyxiKSx0aGlzLmltdWxuKFQpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMu''@;'; put 'put ''X2lhZGRuKG0pO2lmKDAhPT1qKXt2YXIgb2U9MTtmb3IobT16KHAsQSxwLmxlbmd0aCxiKSxBPTA7QTxqO0ErKylvZSo9Yjt0aGlzLmltdWxuKG9lKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKX10aGlzLnN0cmlwKCl9LHcucHJvdG90''@;'; put 'put ''eXBlLmNvcHk9ZnVuY3Rpb24ocCl7cC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGg7YisrKXAud29yZHNbYl09dGhpcy53b3Jkc1tiXTtwLmxlbmd0aD10aGlzLmxlbmd0aCxwLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUscC5yZWQ9dGhpcy5y''@;'; put 'put ''ZWR9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHRoaXMuY29weShwKSxwfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlz''@;'; put 'put ''fSx3LnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09''@;'; put 'put ''dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx3LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBOPVsiIiwiMCIsIjAwIiwi''@;'; put 'put ''MDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLEw9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sSz1bMCwwLDMzNTU0NDMyLDQzMDQ2''@;'; put 'put ''NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0''@;'; put 'put ''MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBXKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdh''@;'; put 'put ''dGl2ZTt2YXIgeD1WLmxlbmd0aCtwLmxlbmd0aHwwO2IubGVuZ3RoPXgseD14LTF8MDt2YXIgQz0wfFYud29yZHNbMF0sVD0wfHAud29yZHNbMF0sSD1DKlQsRT1ILzY3MTA4ODY0fDA7Yi53b3Jkc1swXT02NzEwODg2MyZIO2Zvcih2YXIgbT0xO208eDttKyspe2Zvcih2YXIgQT1FPj4+MjYs''@;'; put 'put ''b2U9NjcxMDg4NjMmRSx0ZT1NYXRoLm1pbihtLHAubGVuZ3RoLTEpLHNlPU1hdGgubWF4KDAsbS1WLmxlbmd0aCsxKTtzZTw9dGU7c2UrKylBKz0oSD0oQz0wfFYud29yZHNbbS1zZXwwXSkqKFQ9MHxwLndvcmRzW3NlXSkrb2UpLzY3MTA4ODY0fDAsb2U9NjcxMDg4NjMmSDtiLndvcmRzW21d''@;'; put 'put ''PTB8b2UsRT0wfEF9cmV0dXJuIDAhPT1FP2Iud29yZHNbbV09MHxFOmIubGVuZ3RoLS0sYi5zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHAsYil7dmFyIHg7aWYoYj0wfGJ8fDEsMTY9PT0ocD1wfHwxMCl8fCJoZXgiPT09cCl7eD0iIjtmb3IodmFyIEM9MCxUPTAsSD0w''@;'; put 'put ''O0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj10aGlzLndvcmRzW0hdLEU9KDE2Nzc3MjE1JihqPDxDfFQpKS50b1N0cmluZygxNik7VD1qPj4+MjQtQyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09MjYsSC0tKSx4PTAhPT1UfHxIIT09dGhpcy5sZW5ndGgtMT9OWzYtRS5sZW5ndGhdK0UreDpF''@;'; put 'put ''K3h9Zm9yKDAhPT1UJiYoeD1ULnRvU3RyaW5nKDE2KSt4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYocD09PSgwfHApJiZwPj0yJiZwPD0zNil7dmFyIG09TFtwXSxBPUtbcF07eD0iIjt2YXIgb2U9dGhpcy5jbG9uZSgp''@;'; put 'put ''O2ZvcihvZS5uZWdhdGl2ZT0wOyFvZS5pc1plcm8oKTspe3ZhciB0ZT1vZS5tb2RuKEEpLnRvU3RyaW5nKHApO3g9KG9lPW9lLmlkaXZuKEEpKS5pc1plcm8oKT90ZSt4Ok5bbS10ZS5sZW5ndGhdK3RlK3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4Lmxlbmd0aCViIT0wOyl4PSIw''@;'; put 'put ''Iit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9ZyghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBwPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9wKz02NzEw''@;'; put 'put ''ODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/cCs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJmcoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAh''@;'; put 'put ''PT10aGlzLm5lZ2F0aXZlPy1wOnB9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gZyh0eXBlb2YgUDwidSIpLHRoaXMudG9BcnJheUxpa2UoUCxwLGIpfSx3LnBy''@;'; put 'put ''b3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXkscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPXRoaXMuYnl0ZUxlbmd0aCgpLFQ9eHx8TWF0aC5tYXgoMSxDKTtnKEM8PVQsImJ5dGUgYXJy''@;'; put 'put ''YXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxnKFQ+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBFLG0sSD0ibGUiPT09YixqPW5ldyBwKFQpLEE9dGhpcy5jbG9uZSgpO2lmKEgpe2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRs''@;'; put 'put ''bigyNTUpLEEuaXVzaHJuKDgpLGpbbV09RTtmb3IoO208VDttKyspalttXT0wfWVsc2V7Zm9yKG09MDttPFQtQzttKyspalttXT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbVC1tLTFdPUV9cmV0dXJuIGp9LHcucHJvdG90eXBlLl9jb3Vu''@;'; put 'put ''dEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihwKXtyZXR1cm4gMzItTWF0aC5jbHozMihwKX06ZnVuY3Rpb24ocCl7dmFyIGI9cCx4PTA7cmV0dXJuIGI+PTQwOTYmJih4Kz0xMyxiPj4+PTEzKSxiPj02NCYmKHgrPTcsYj4+Pj03KSxiPj04JiYoeCs9NCxiPj4+PTQpLGI+PTImJih4Kz0yLGI+''@;'; put 'put ''Pj49MikseCtifSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24ocCl7aWYoMD09PXApcmV0dXJuIDI2O3ZhciBiPXAseD0wO3JldHVybiA4MTkxJmJ8fCh4Kz0xMyxiPj4+PTEzKSwxMjcmYnx8KHgrPTcsYj4+Pj03KSwxNSZifHwoeCs9NCxiPj4+PTQpLDMmYnx8KHgrPTIsYj4+Pj0y''@;'; put 'put ''KSwxJmJ8fHgrKyx4fSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStifSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMu''@;'; put 'put ''aXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBwPTAsYj0wO2I8dGhpcy5sZW5ndGg7YisrKXt2YXIgeD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2JdKTtpZihwKz14LDI2IT09eClicmVha31yZXR1cm4gcH0sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRo''@;'; put 'put ''LmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHApe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHApLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24ocCl7cmV0dXJu''@;'; put 'put ''IHRoaXMudGVzdG4ocC0xKT90aGlzLm5vdG4ocCkuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5l''@;'; put 'put ''ZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cC5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtm''@;'; put 'put ''b3IodmFyIGI9MDtiPHAubGVuZ3RoO2IrKyl0aGlzLndvcmRzW2JdPXRoaXMud29yZHNbYl18cC53b3Jkc1tiXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1b3IocCl9''@;'; put 'put ''LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHApOnAuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgp''@;'; put 'put ''Lml1b3IocCk6cC5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHApe3ZhciBiO2I9dGhpcy5sZW5ndGg+cC5sZW5ndGg/cDp0aGlzO2Zvcih2YXIgeD0wO3g8Yi5sZW5ndGg7eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jkc1t4XSZwLndvcmRzW3hdO3Jl''@;'; put 'put ''dHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1YW5kKHApfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVu''@;'; put 'put ''Z3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKHApOnAuY2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQocCk6cC5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5pdXhvcj1mdW5jdGlvbihwKXt2YXIgYix4O3RoaXMubGVuZ3RoPnAubGVuZ3RoPyhiPXRoaXMseD1wKTooYj1wLHg9dGhpcyk7Zm9yKHZhciBDPTA7Qzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdXngud29yZHNbQ107aWYodGhpcyE9PWIpZm9yKDtDPGIubGVu''@;'; put 'put ''Z3RoO0MrKyl0aGlzLndvcmRzW0NdPWIud29yZHNbQ107cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IocCl9LHcucHJvdG90''@;'; put 'put ''eXBlLnhvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IocCk6cC5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhv''@;'; put 'put ''cihwKTpwLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj0wfE1hdGguY2VpbChwLzI2KSx4PXAlMjY7dGhpcy5fZXhwYW5kKGIpLHg+MCYmYi0tO2Zvcih2YXIgQz0wO0M8YjtDKyspdGhp''@;'; put 'put ''cy53b3Jkc1tDXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tDXTtyZXR1cm4geD4wJiYodGhpcy53b3Jkc1tDXT1+dGhpcy53b3Jkc1tDXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4ocCl9''@;'; put 'put ''LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24ocCxiKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIHg9cC8yNnwwLEM9cCUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XT1iP3RoaXMud29yZHNbeF18MTw8Qzp0aGlzLndvcmRzW3hdJn4oMTw8QyksdGhp''@;'; put 'put ''cy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHApe3ZhciBiLHgsQztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihwKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09''@;'; put 'put ''PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiBwLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCkscC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KHg9dGhpcyxDPXApOih4PXAsQz10aGlzKTtmb3IodmFyIFQ9MCxIPTA7SDxDLmxlbmd0''@;'; put 'put ''aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKSsoMHxDLndvcmRzW0hdKStUKSxUPWI+Pj4yNjtmb3IoOzAhPT1UJiZIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJihiPSgwfHgud29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2lmKHRoaXMubGVu''@;'; put 'put ''Z3RoPXgubGVuZ3RoLDAhPT1UKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPVQsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHghPT10aGlzKWZvcig7SDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT14LndvcmRzW0hdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCl7dmFy''@;'; put 'put ''IGI7cmV0dXJuIDAhPT1wLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8ocC5uZWdhdGl2ZT0wLGI9dGhpcy5zdWIocCkscC5uZWdhdGl2ZV49MSxiKTowPT09cC5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxiPXAuc3ViKHRoaXMpLHRoaXMubmVnYXRp''@;'; put 'put ''dmU9MSxiKTp0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChwKTpwLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihwKXtpZigwIT09cC5uZWdhdGl2ZSl7cC5uZWdhdGl2ZT0wO3ZhciBiPXRoaXMuaWFkZChwKTtyZXR1cm4gcC5uZWdh''@;'; put 'put ''dGl2ZT0xLGIuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIEMsVCx4PXRoaXMuY21wKHApO2lmKDA9PT14KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAs''@;'; put 'put ''dGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt4PjA/KEM9dGhpcyxUPXApOihDPXAsVD10aGlzKTtmb3IodmFyIEg9MCxqPTA7ajxULmxlbmd0aDtqKyspSD0oYj0oMHxDLndvcmRzW2pdKS0oMHxULndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2Zv''@;'; put 'put ''cig7MCE9PUgmJmo8Qy5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtpZigwPT09SCYmajxDLmxlbmd0aCYmQyE9PXRoaXMpZm9yKDtqPEMubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPUMud29yZHNbal07cmV0dXJuIHRoaXMu''@;'; put 'put ''bGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGopLEMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIocCl9O3ZhciBZPWZ1bmN0aW9uKHAsYix4KXt2YXIgRSxtLEEsQz1w''@;'; put 'put ''LndvcmRzLFQ9Yi53b3JkcyxIPXgud29yZHMsaj0wLG9lPTB8Q1swXSx0ZT04MTkxJm9lLHNlPW9lPj4+MTMsd2U9MHxDWzFdLFVlPTgxOTEmd2UsSmU9d2U+Pj4xMyxhdD0wfENbMl0sTWU9ODE5MSZhdCx2ZT1hdD4+PjEzLFhlPTB8Q1szXSxqZT04MTkxJlhlLERlPVhlPj4+MTMsRmU9MHxD''@;'; put 'put ''WzRdLFJlPTgxOTEmRmUsSWU9RmU+Pj4xMyxWZT0wfENbNV0sa2U9ODE5MSZWZSxBZT1WZT4+PjEzLF90PTB8Q1s2XSxydD04MTkxJl90LFFlPV90Pj4+MTMsZG49MHxDWzddLHl0PTgxOTEmZG4sTXQ9ZG4+Pj4xMyxEdD0wfENbOF0saXQ9ODE5MSZEdCwkZT1EdD4+PjEzLHR0PTB8Q1s5XSxI''@;'; put 'put ''ZT04MTkxJnR0LGR0PXR0Pj4+MTMscXQ9MHxUWzBdLFJ0PTgxOTEmcXQsUHQ9cXQ+Pj4xMyxhaT0wfFRbMV0sUXQ9ODE5MSZhaSxzbj1haT4+PjEzLFJpPTB8VFsyXSxmbj04MTkxJlJpLGZ0PVJpPj4+MTMsUHI9MHxUWzNdLFp0PTgxOTEmUHIsQXQ9UHI+Pj4xMyxMbj0wfFRbNF0sc3Q9ODE5''@;'; put 'put ''MSZMbix6dD1Mbj4+PjEzLG5pPTB8VFs1XSxXZT04MTkxJm5pLFR0PW5pPj4+MTMscnI9MHxUWzZdLGh0PTgxOTEmcnIseHQ9cnI+Pj4xMyxCbj0wfFRbN10sb249ODE5MSZCbixqdD1Cbj4+PjEzLGRpPTB8VFs4XSxjbj04MTkxJmRpLHBuPWRpPj4+MTMsSWk9MHxUWzldLFh0PTgxOTEmSWks''@;'; put 'put ''ZW49SWk+Pj4xMzt4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD0xOTt2YXIgaG89KGorKEU9TWF0aC5pbXVsKHRlLFJ0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bCh0ZSxQdCkpK01hdGguaW11bChzZSxSdCl8MCkpPDwxMyl8MDtqPSgoQT1NYXRoLmltdWwo''@;'; put 'put ''c2UsUHQpKSsobT4+PjEzKXwwKSsoaG8+Pj4yNil8MCxobyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoVWUsUnQpLG09KG09TWF0aC5pbXVsKFVlLFB0KSkrTWF0aC5pbXVsKEplLFJ0KXwwLEE9TWF0aC5pbXVsKEplLFB0KTt2YXIgTWk9KGorKEU9RStNYXRoLmltdWwodGUsUXQpfDApfDApKygo''@;'; put 'put ''ODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxzbil8MCkrTWF0aC5pbXVsKHNlLFF0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHNuKXwwKSsobT4+PjEzKXwwKSsoTWk+Pj4yNil8MCxNaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTWUsUnQpLG09KG09TWF0aC5pbXVsKE1lLFB0''@;'; put 'put ''KSkrTWF0aC5pbXVsKHZlLFJ0KXwwLEE9TWF0aC5pbXVsKHZlLFB0KSxFPUUrTWF0aC5pbXVsKFVlLFF0KXwwLG09KG09bStNYXRoLmltdWwoVWUsc24pfDApK01hdGguaW11bChKZSxRdCl8MCxBPUErTWF0aC5pbXVsKEplLHNuKXwwO3ZhciBwcj0oaisoRT1FK01hdGguaW11bCh0ZSxmbil8''@;'; put 'put ''MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZ0KXwwKStNYXRoLmltdWwoc2UsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZnQpfDApKyhtPj4+MTMpfDApKyhwcj4+PjI2KXwwLHByJj02NzEwODg2MyxFPU1hdGguaW11bChqZSxSdCksbT0obT1NYXRoLmlt''@;'; put 'put ''dWwoamUsUHQpKStNYXRoLmltdWwoRGUsUnQpfDAsQT1NYXRoLmltdWwoRGUsUHQpLEU9RStNYXRoLmltdWwoTWUsUXQpfDAsbT0obT1tK01hdGguaW11bChNZSxzbil8MCkrTWF0aC5pbXVsKHZlLFF0KXwwLEE9QStNYXRoLmltdWwodmUsc24pfDAsRT1FK01hdGguaW11bChVZSxmbil8MCxt''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKFVlLGZ0KXwwKStNYXRoLmltdWwoSmUsZm4pfDAsQT1BK01hdGguaW11bChKZSxmdCl8MDt2YXIgV249KGorKEU9RStNYXRoLmltdWwodGUsWnQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxBdCl8MCkrTWF0aC5pbXVsKHNlLFp0KXwwKSk8PDEz''@;'; put 'put ''KXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLEF0KXwwKSsobT4+PjEzKXwwKSsoV24+Pj4yNil8MCxXbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoUmUsUnQpLG09KG09TWF0aC5pbXVsKFJlLFB0KSkrTWF0aC5pbXVsKEllLFJ0KXwwLEE9TWF0aC5pbXVsKEllLFB0KSxFPUUrTWF0aC5pbXVsKGpl''@;'; put 'put ''LFF0KXwwLG09KG09bStNYXRoLmltdWwoamUsc24pfDApK01hdGguaW11bChEZSxRdCl8MCxBPUErTWF0aC5pbXVsKERlLHNuKXwwLEU9RStNYXRoLmltdWwoTWUsZm4pfDAsbT0obT1tK01hdGguaW11bChNZSxmdCl8MCkrTWF0aC5pbXVsKHZlLGZuKXwwLEE9QStNYXRoLmltdWwodmUsZnQp''@;'; put 'put ''fDAsRT1FK01hdGguaW11bChVZSxadCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwoSmUsWnQpfDAsQT1BK01hdGguaW11bChKZSxBdCl8MDt2YXIgS2k9KGorKEU9RStNYXRoLmltdWwodGUsc3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx6dCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKHNlLHN0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHp0KXwwKSsobT4+PjEzKXwwKSsoS2k+Pj4yNil8MCxLaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoa2UsUnQpLG09KG09TWF0aC5pbXVsKGtlLFB0KSkrTWF0aC5pbXVsKEFlLFJ0KXwwLEE9TWF0aC5p''@;'; put 'put ''bXVsKEFlLFB0KSxFPUUrTWF0aC5pbXVsKFJlLFF0KXwwLG09KG09bStNYXRoLmltdWwoUmUsc24pfDApK01hdGguaW11bChJZSxRdCl8MCxBPUErTWF0aC5pbXVsKEllLHNuKXwwLEU9RStNYXRoLmltdWwoamUsZm4pfDAsbT0obT1tK01hdGguaW11bChqZSxmdCl8MCkrTWF0aC5pbXVsKERl''@;'; put 'put ''LGZuKXwwLEE9QStNYXRoLmltdWwoRGUsZnQpfDAsRT1FK01hdGguaW11bChNZSxadCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLEF0KXwwKStNYXRoLmltdWwodmUsWnQpfDAsQT1BK01hdGguaW11bCh2ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFVlLHN0KXwwLG09KG09bStNYXRoLmltdWwoVWUs''@;'; put 'put ''enQpfDApK01hdGguaW11bChKZSxzdCl8MCxBPUErTWF0aC5pbXVsKEplLHp0KXwwO3ZhciBRcj0oaisoRT1FK01hdGguaW11bCh0ZSxXZSl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLFR0KXwwKStNYXRoLmltdWwoc2UsV2UpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmlt''@;'; put 'put ''dWwoc2UsVHQpfDApKyhtPj4+MTMpfDApKyhRcj4+PjI2KXwwLFFyJj02NzEwODg2MyxFPU1hdGguaW11bChydCxSdCksbT0obT1NYXRoLmltdWwocnQsUHQpKStNYXRoLmltdWwoUWUsUnQpfDAsQT1NYXRoLmltdWwoUWUsUHQpLEU9RStNYXRoLmltdWwoa2UsUXQpfDAsbT0obT1tK01hdGgu''@;'; put 'put ''aW11bChrZSxzbil8MCkrTWF0aC5pbXVsKEFlLFF0KXwwLEE9QStNYXRoLmltdWwoQWUsc24pfDAsRT1FK01hdGguaW11bChSZSxmbil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLGZ0KXwwKStNYXRoLmltdWwoSWUsZm4pfDAsQT1BK01hdGguaW11bChJZSxmdCl8MCxFPUUrTWF0aC5pbXVsKGpl''@;'; put 'put ''LFp0KXwwLG09KG09bStNYXRoLmltdWwoamUsQXQpfDApK01hdGguaW11bChEZSxadCl8MCxBPUErTWF0aC5pbXVsKERlLEF0KXwwLEU9RStNYXRoLmltdWwoTWUsc3QpfDAsbT0obT1tK01hdGguaW11bChNZSx6dCl8MCkrTWF0aC5pbXVsKHZlLHN0KXwwLEE9QStNYXRoLmltdWwodmUsenQp''@;'; put 'put ''fDAsRT1FK01hdGguaW11bChVZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFR0KXwwKStNYXRoLmltdWwoSmUsV2UpfDAsQT1BK01hdGguaW11bChKZSxUdCl8MDt2YXIgSnI9KGorKEU9RStNYXRoLmltdWwodGUsaHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx4dCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKHNlLGh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHh0KXwwKSsobT4+PjEzKXwwKSsoSnI+Pj4yNil8MCxKciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeXQsUnQpLG09KG09TWF0aC5pbXVsKHl0LFB0KSkrTWF0aC5pbXVsKE10LFJ0KXwwLEE9TWF0aC5p''@;'; put 'put ''bXVsKE10LFB0KSxFPUUrTWF0aC5pbXVsKHJ0LFF0KXwwLG09KG09bStNYXRoLmltdWwocnQsc24pfDApK01hdGguaW11bChRZSxRdCl8MCxBPUErTWF0aC5pbXVsKFFlLHNuKXwwLEU9RStNYXRoLmltdWwoa2UsZm4pfDAsbT0obT1tK01hdGguaW11bChrZSxmdCl8MCkrTWF0aC5pbXVsKEFl''@;'; put 'put ''LGZuKXwwLEE9QStNYXRoLmltdWwoQWUsZnQpfDAsRT1FK01hdGguaW11bChSZSxadCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLEF0KXwwKStNYXRoLmltdWwoSWUsWnQpfDAsQT1BK01hdGguaW11bChJZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGplLHN0KXwwLG09KG09bStNYXRoLmltdWwoamUs''@;'; put 'put ''enQpfDApK01hdGguaW11bChEZSxzdCl8MCxBPUErTWF0aC5pbXVsKERlLHp0KXwwLEU9RStNYXRoLmltdWwoTWUsV2UpfDAsbT0obT1tK01hdGguaW11bChNZSxUdCl8MCkrTWF0aC5pbXVsKHZlLFdlKXwwLEE9QStNYXRoLmltdWwodmUsVHQpfDAsRT1FK01hdGguaW11bChVZSxodCl8MCxt''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKFVlLHh0KXwwKStNYXRoLmltdWwoSmUsaHQpfDAsQT1BK01hdGguaW11bChKZSx4dCl8MDt2YXIgQmk9KGorKEU9RStNYXRoLmltdWwodGUsb24pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxqdCl8MCkrTWF0aC5pbXVsKHNlLG9uKXwwKSk8PDEz''@;'; put 'put ''KXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGp0KXwwKSsobT4+PjEzKXwwKSsoQmk+Pj4yNil8MCxCaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoaXQsUnQpLG09KG09TWF0aC5pbXVsKGl0LFB0KSkrTWF0aC5pbXVsKCRlLFJ0KXwwLEE9TWF0aC5pbXVsKCRlLFB0KSxFPUUrTWF0aC5pbXVsKHl0''@;'; put 'put ''LFF0KXwwLG09KG09bStNYXRoLmltdWwoeXQsc24pfDApK01hdGguaW11bChNdCxRdCl8MCxBPUErTWF0aC5pbXVsKE10LHNuKXwwLEU9RStNYXRoLmltdWwocnQsZm4pfDAsbT0obT1tK01hdGguaW11bChydCxmdCl8MCkrTWF0aC5pbXVsKFFlLGZuKXwwLEE9QStNYXRoLmltdWwoUWUsZnQp''@;'; put 'put ''fDAsRT1FK01hdGguaW11bChrZSxadCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLEF0KXwwKStNYXRoLmltdWwoQWUsWnQpfDAsQT1BK01hdGguaW11bChBZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFJlLHN0KXwwLG09KG09bStNYXRoLmltdWwoUmUsenQpfDApK01hdGguaW11bChJZSxzdCl8MCxB''@;'; put 'put ''PUErTWF0aC5pbXVsKEllLHp0KXwwLEU9RStNYXRoLmltdWwoamUsV2UpfDAsbT0obT1tK01hdGguaW11bChqZSxUdCl8MCkrTWF0aC5pbXVsKERlLFdlKXwwLEE9QStNYXRoLmltdWwoRGUsVHQpfDAsRT1FK01hdGguaW11bChNZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHh0KXwwKStN''@;'; put 'put ''YXRoLmltdWwodmUsaHQpfDAsQT1BK01hdGguaW11bCh2ZSx4dCl8MCxFPUUrTWF0aC5pbXVsKFVlLG9uKXwwLG09KG09bStNYXRoLmltdWwoVWUsanQpfDApK01hdGguaW11bChKZSxvbil8MCxBPUErTWF0aC5pbXVsKEplLGp0KXwwO3ZhciBWaT0oaisoRT1FK01hdGguaW11bCh0ZSxjbil8''@;'; put 'put ''MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHBuKXwwKStNYXRoLmltdWwoc2UsY24pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UscG4pfDApKyhtPj4+MTMpfDApKyhWaT4+PjI2KXwwLFZpJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxSdCksbT0obT1NYXRoLmlt''@;'; put 'put ''dWwoSGUsUHQpKStNYXRoLmltdWwoZHQsUnQpfDAsQT1NYXRoLmltdWwoZHQsUHQpLEU9RStNYXRoLmltdWwoaXQsUXQpfDAsbT0obT1tK01hdGguaW11bChpdCxzbil8MCkrTWF0aC5pbXVsKCRlLFF0KXwwLEE9QStNYXRoLmltdWwoJGUsc24pfDAsRT1FK01hdGguaW11bCh5dCxmbil8MCxt''@;'; put 'put ''PShtPW0rTWF0aC5pbXVsKHl0LGZ0KXwwKStNYXRoLmltdWwoTXQsZm4pfDAsQT1BK01hdGguaW11bChNdCxmdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LFp0KXwwLG09KG09bStNYXRoLmltdWwocnQsQXQpfDApK01hdGguaW11bChRZSxadCl8MCxBPUErTWF0aC5pbXVsKFFlLEF0KXwwLEU9RStN''@;'; put 'put ''YXRoLmltdWwoa2Usc3QpfDAsbT0obT1tK01hdGguaW11bChrZSx6dCl8MCkrTWF0aC5pbXVsKEFlLHN0KXwwLEE9QStNYXRoLmltdWwoQWUsenQpfDAsRT1FK01hdGguaW11bChSZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLFR0KXwwKStNYXRoLmltdWwoSWUsV2UpfDAsQT1BK01hdGgu''@;'; put 'put ''aW11bChJZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGplLGh0KXwwLG09KG09bStNYXRoLmltdWwoamUseHQpfDApK01hdGguaW11bChEZSxodCl8MCxBPUErTWF0aC5pbXVsKERlLHh0KXwwLEU9RStNYXRoLmltdWwoTWUsb24pfDAsbT0obT1tK01hdGguaW11bChNZSxqdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KHZlLG9uKXwwLEE9QStNYXRoLmltdWwodmUsanQpfDAsRT1FK01hdGguaW11bChVZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHBuKXwwKStNYXRoLmltdWwoSmUsY24pfDAsQT1BK01hdGguaW11bChKZSxwbil8MDt2YXIgSW89KGorKEU9RStNYXRoLmltdWwodGUsWHQpfDApfDApKygo''@;'; put 'put ''ODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxlbil8MCkrTWF0aC5pbXVsKHNlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGVuKXwwKSsobT4+PjEzKXwwKSsoSW8+Pj4yNil8MCxJbyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUXQpLG09KG09TWF0aC5pbXVsKEhlLHNu''@;'; put 'put ''KSkrTWF0aC5pbXVsKGR0LFF0KXwwLEE9TWF0aC5pbXVsKGR0LHNuKSxFPUUrTWF0aC5pbXVsKGl0LGZuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCgkZSxmbil8MCxBPUErTWF0aC5pbXVsKCRlLGZ0KXwwLEU9RStNYXRoLmltdWwoeXQsWnQpfDAsbT0obT1tK01h''@;'; put 'put ''dGguaW11bCh5dCxBdCl8MCkrTWF0aC5pbXVsKE10LFp0KXwwLEE9QStNYXRoLmltdWwoTXQsQXQpfDAsRT1FK01hdGguaW11bChydCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LHp0KXwwKStNYXRoLmltdWwoUWUsc3QpfDAsQT1BK01hdGguaW11bChRZSx6dCl8MCxFPUUrTWF0aC5pbXVs''@;'; put 'put ''KGtlLFdlKXwwLG09KG09bStNYXRoLmltdWwoa2UsVHQpfDApK01hdGguaW11bChBZSxXZSl8MCxBPUErTWF0aC5pbXVsKEFlLFR0KXwwLEU9RStNYXRoLmltdWwoUmUsaHQpfDAsbT0obT1tK01hdGguaW11bChSZSx4dCl8MCkrTWF0aC5pbXVsKEllLGh0KXwwLEE9QStNYXRoLmltdWwoSWUs''@;'; put 'put ''eHQpfDAsRT1FK01hdGguaW11bChqZSxvbil8MCxtPShtPW0rTWF0aC5pbXVsKGplLGp0KXwwKStNYXRoLmltdWwoRGUsb24pfDAsQT1BK01hdGguaW11bChEZSxqdCl8MCxFPUUrTWF0aC5pbXVsKE1lLGNuKXwwLG09KG09bStNYXRoLmltdWwoTWUscG4pfDApK01hdGguaW11bCh2ZSxjbil8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKHZlLHBuKXwwO3ZhciBPcj0oaisoRT1FK01hdGguaW11bChVZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFVlLGVuKXwwKStNYXRoLmltdWwoSmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSmUsZW4pfDApKyhtPj4+MTMpfDAp''@;'; put 'put ''KyhPcj4+PjI2KXwwLE9yJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxmbiksbT0obT1NYXRoLmltdWwoSGUsZnQpKStNYXRoLmltdWwoZHQsZm4pfDAsQT1NYXRoLmltdWwoZHQsZnQpLEU9RStNYXRoLmltdWwoaXQsWnQpfDAsbT0obT1tK01hdGguaW11bChpdCxBdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KCRlLFp0KXwwLEE9QStNYXRoLmltdWwoJGUsQXQpfDAsRT1FK01hdGguaW11bCh5dCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHp0KXwwKStNYXRoLmltdWwoTXQsc3QpfDAsQT1BK01hdGguaW11bChNdCx6dCl8MCxFPUUrTWF0aC5pbXVsKHJ0LFdlKXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''cnQsVHQpfDApK01hdGguaW11bChRZSxXZSl8MCxBPUErTWF0aC5pbXVsKFFlLFR0KXwwLEU9RStNYXRoLmltdWwoa2UsaHQpfDAsbT0obT1tK01hdGguaW11bChrZSx4dCl8MCkrTWF0aC5pbXVsKEFlLGh0KXwwLEE9QStNYXRoLmltdWwoQWUseHQpfDAsRT1FK01hdGguaW11bChSZSxvbil8''@;'; put 'put ''MCxtPShtPW0rTWF0aC5pbXVsKFJlLGp0KXwwKStNYXRoLmltdWwoSWUsb24pfDAsQT1BK01hdGguaW11bChJZSxqdCl8MCxFPUUrTWF0aC5pbXVsKGplLGNuKXwwLG09KG09bStNYXRoLmltdWwoamUscG4pfDApK01hdGguaW11bChEZSxjbil8MCxBPUErTWF0aC5pbXVsKERlLHBuKXwwO3Zh''@;'; put 'put ''ciBZaT0oaisoRT1FK01hdGguaW11bChNZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKE1lLGVuKXwwKStNYXRoLmltdWwodmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwodmUsZW4pfDApKyhtPj4+MTMpfDApKyhZaT4+PjI2KXwwLFlpJj02NzEwODg2MyxF''@;'; put 'put ''PU1hdGguaW11bChIZSxadCksbT0obT1NYXRoLmltdWwoSGUsQXQpKStNYXRoLmltdWwoZHQsWnQpfDAsQT1NYXRoLmltdWwoZHQsQXQpLEU9RStNYXRoLmltdWwoaXQsc3QpfDAsbT0obT1tK01hdGguaW11bChpdCx6dCl8MCkrTWF0aC5pbXVsKCRlLHN0KXwwLEE9QStNYXRoLmltdWwoJGUs''@;'; put 'put ''enQpfDAsRT1FK01hdGguaW11bCh5dCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFR0KXwwKStNYXRoLmltdWwoTXQsV2UpfDAsQT1BK01hdGguaW11bChNdCxUdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LGh0KXwwLG09KG09bStNYXRoLmltdWwocnQseHQpfDApK01hdGguaW11bChRZSxodCl8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKFFlLHh0KXwwLEU9RStNYXRoLmltdWwoa2Usb24pfDAsbT0obT1tK01hdGguaW11bChrZSxqdCl8MCkrTWF0aC5pbXVsKEFlLG9uKXwwLEE9QStNYXRoLmltdWwoQWUsanQpfDAsRT1FK01hdGguaW11bChSZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHBuKXww''@;'; put 'put ''KStNYXRoLmltdWwoSWUsY24pfDAsQT1BK01hdGguaW11bChJZSxwbil8MDt2YXIgZ289KGorKEU9RStNYXRoLmltdWwoamUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChqZSxlbil8MCkrTWF0aC5pbXVsKERlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKERl''@;'; put 'put ''LGVuKXwwKSsobT4+PjEzKXwwKSsoZ28+Pj4yNil8MCxnbyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsc3QpLG09KG09TWF0aC5pbXVsKEhlLHp0KSkrTWF0aC5pbXVsKGR0LHN0KXwwLEE9TWF0aC5pbXVsKGR0LHp0KSxFPUUrTWF0aC5pbXVsKGl0LFdlKXwwLG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''aXQsVHQpfDApK01hdGguaW11bCgkZSxXZSl8MCxBPUErTWF0aC5pbXVsKCRlLFR0KXwwLEU9RStNYXRoLmltdWwoeXQsaHQpfDAsbT0obT1tK01hdGguaW11bCh5dCx4dCl8MCkrTWF0aC5pbXVsKE10LGh0KXwwLEE9QStNYXRoLmltdWwoTXQseHQpfDAsRT1FK01hdGguaW11bChydCxvbil8''@;'; put 'put ''MCxtPShtPW0rTWF0aC5pbXVsKHJ0LGp0KXwwKStNYXRoLmltdWwoUWUsb24pfDAsQT1BK01hdGguaW11bChRZSxqdCl8MCxFPUUrTWF0aC5pbXVsKGtlLGNuKXwwLG09KG09bStNYXRoLmltdWwoa2UscG4pfDApK01hdGguaW11bChBZSxjbil8MCxBPUErTWF0aC5pbXVsKEFlLHBuKXwwO3Zh''@;'; put 'put ''ciBlcj0oaisoRT1FK01hdGguaW11bChSZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFJlLGVuKXwwKStNYXRoLmltdWwoSWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSWUsZW4pfDApKyhtPj4+MTMpfDApKyhlcj4+PjI2KXwwLGVyJj02NzEwODg2MyxF''@;'; put 'put ''PU1hdGguaW11bChIZSxXZSksbT0obT1NYXRoLmltdWwoSGUsVHQpKStNYXRoLmltdWwoZHQsV2UpfDAsQT1NYXRoLmltdWwoZHQsVHQpLEU9RStNYXRoLmltdWwoaXQsaHQpfDAsbT0obT1tK01hdGguaW11bChpdCx4dCl8MCkrTWF0aC5pbXVsKCRlLGh0KXwwLEE9QStNYXRoLmltdWwoJGUs''@;'; put 'put ''eHQpfDAsRT1FK01hdGguaW11bCh5dCxvbil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGp0KXwwKStNYXRoLmltdWwoTXQsb24pfDAsQT1BK01hdGguaW11bChNdCxqdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LGNuKXwwLG09KG09bStNYXRoLmltdWwocnQscG4pfDApK01hdGguaW11bChRZSxjbil8''@;'; put 'put ''MCxBPUErTWF0aC5pbXVsKFFlLHBuKXwwO3ZhciBjbz0oaisoRT1FK01hdGguaW11bChrZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGtlLGVuKXwwKStNYXRoLmltdWwoQWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoQWUsZW4pfDApKyhtPj4+MTMpfDAp''@;'; put 'put ''Kyhjbz4+PjI2KXwwLGNvJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxodCksbT0obT1NYXRoLmltdWwoSGUseHQpKStNYXRoLmltdWwoZHQsaHQpfDAsQT1NYXRoLmltdWwoZHQseHQpLEU9RStNYXRoLmltdWwoaXQsb24pfDAsbT0obT1tK01hdGguaW11bChpdCxqdCl8MCkrTWF0aC5pbXVs''@;'; put 'put ''KCRlLG9uKXwwLEE9QStNYXRoLmltdWwoJGUsanQpfDAsRT1FK01hdGguaW11bCh5dCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHBuKXwwKStNYXRoLmltdWwoTXQsY24pfDAsQT1BK01hdGguaW11bChNdCxwbil8MDt2YXIgX289KGorKEU9RStNYXRoLmltdWwocnQsWHQpfDApfDApKygo''@;'; put 'put ''ODE5MSYobT0obT1tK01hdGguaW11bChydCxlbil8MCkrTWF0aC5pbXVsKFFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFFlLGVuKXwwKSsobT4+PjEzKXwwKSsoX28+Pj4yNil8MCxfbyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsb24pLG09KG09TWF0aC5pbXVsKEhlLGp0''@;'; put 'put ''KSkrTWF0aC5pbXVsKGR0LG9uKXwwLEE9TWF0aC5pbXVsKGR0LGp0KSxFPUUrTWF0aC5pbXVsKGl0LGNuKXwwLG09KG09bStNYXRoLmltdWwoaXQscG4pfDApK01hdGguaW11bCgkZSxjbil8MCxBPUErTWF0aC5pbXVsKCRlLHBuKXwwO3ZhciBPbz0oaisoRT1FK01hdGguaW11bCh5dCxYdCl8''@;'; put 'put ''MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHl0LGVuKXwwKStNYXRoLmltdWwoTXQsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoTXQsZW4pfDApKyhtPj4+MTMpfDApKyhPbz4+PjI2KXwwLE9vJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxjbiksbT0obT1NYXRoLmlt''@;'; put 'put ''dWwoSGUscG4pKStNYXRoLmltdWwoZHQsY24pfDAsQT1NYXRoLmltdWwoZHQscG4pO3ZhciBIbz0oaisoRT1FK01hdGguaW11bChpdCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGl0LGVuKXwwKStNYXRoLmltdWwoJGUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmlt''@;'; put 'put ''dWwoJGUsZW4pfDApKyhtPj4+MTMpfDApKyhIbz4+PjI2KXwwLEhvJj02NzEwODg2Mzt2YXIgZWk9KGorKEU9TWF0aC5pbXVsKEhlLFh0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChIZSxlbikpK01hdGguaW11bChkdCxYdCl8MCkpPDwxMyl8MDtyZXR1cm4gaj0oKEE9TWF0aC5pbXVs''@;'; put 'put ''KGR0LGVuKSkrKG0+Pj4xMyl8MCkrKGVpPj4+MjYpfDAsZWkmPTY3MTA4ODYzLEhbMF09aG8sSFsxXT1NaSxIWzJdPXByLEhbM109V24sSFs0XT1LaSxIWzVdPVFyLEhbNl09SnIsSFs3XT1CaSxIWzhdPVZpLEhbOV09SW8sSFsxMF09T3IsSFsxMV09WWksSFsxMl09Z28sSFsxM109ZXIsSFsx''@;'; put 'put ''NF09Y28sSFsxNV09X28sSFsxNl09T28sSFsxN109SG8sSFsxOF09ZWksMCE9PWomJihIWzE5XT1qLHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIGVlKFYscCxiKXtyZXR1cm4obmV3IEopLm11bHAoVixwLGIpfWZ1bmN0aW9uIEooVixwKXt0aGlzLng9Vix0aGlzLnk9cH1NYXRoLmltdWx8fChZ''@;'; put 'put ''PVcpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmxlbmd0aCtwLmxlbmd0aDtyZXR1cm4geD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PXAubGVuZ3RoP1kodGhpcyxwLGIpOkM8NjM/Vyh0aGlzLHAsYik6QzwxMDI0P2Z1bmN0aW9uIFgoVixwLGIpe2IubmVn''@;'; put 'put ''YXRpdmU9cC5uZWdhdGl2ZV5WLm5lZ2F0aXZlLGIubGVuZ3RoPVYubGVuZ3RoK3AubGVuZ3RoO2Zvcih2YXIgeD0wLEM9MCxUPTA7VDxiLmxlbmd0aC0xO1QrKyl7dmFyIEg9QztDPTA7Zm9yKHZhciBqPTY3MTA4ODYzJngsRT1NYXRoLm1pbihULHAubGVuZ3RoLTEpLG09TWF0aC5tYXgoMCxU''@;'; put 'put ''LVYubGVuZ3RoKzEpO208PUU7bSsrKXt2YXIgc2U9KDB8Vi53b3Jkc1tULW1dKSooMHxwLndvcmRzW21dKSx3ZT02NzEwODg2MyZzZTtqPTY3MTA4ODYzJih3ZT13ZStqfDApLEMrPShIPShIPUgrKHNlLzY3MTA4ODY0fDApfDApKyh3ZT4+PjI2KXwwKT4+PjI2LEgmPTY3MTA4ODYzfWIud29y''@;'; put 'put ''ZHNbVF09aix4PUgsSD1DfXJldHVybiAwIT09eD9iLndvcmRzW1RdPXg6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9KHRoaXMscCxiKTplZSh0aGlzLHAsYikseH0sSi5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihwKXtmb3IodmFyIGI9bmV3IEFycmF5KHApLHg9dy5wcm90b3R5cGUuX2NvdW50''@;'; put 'put ''Qml0cyhwKS0xLEM9MDtDPHA7QysrKWJbQ109dGhpcy5yZXZCaW4oQyx4LHApO3JldHVybiBifSxKLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24ocCxiLHgpe2lmKDA9PT1wfHxwPT09eC0xKXJldHVybiBwO2Zvcih2YXIgQz0wLFQ9MDtUPGI7VCsrKUN8PSgxJnApPDxiLVQtMSxwPj49MTty''@;'; put 'put ''ZXR1cm4gQ30sSi5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihwLGIseCxDLFQsSCl7Zm9yKHZhciBqPTA7ajxIO2orKylDW2pdPWJbcFtqXV0sVFtqXT14W3Bbal1dfSxKLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24ocCxiLHgsQyxULEgpe3RoaXMucGVybXV0ZShILHAsYix4LEMs''@;'; put 'put ''VCk7Zm9yKHZhciBqPTE7ajxUO2o8PD0xKWZvcih2YXIgRT1qPDwxLG09TWF0aC5jb3MoMipNYXRoLlBJL0UpLEE9TWF0aC5zaW4oMipNYXRoLlBJL0UpLG9lPTA7b2U8VDtvZSs9RSlmb3IodmFyIHRlPW0sc2U9QSx3ZT0wO3dlPGo7d2UrKyl7dmFyIFVlPXhbb2Urd2VdLEplPUNbb2Urd2Vd''@;'; put 'put ''LGF0PXhbb2Urd2Ural0sTWU9Q1tvZSt3ZStqXSx2ZT10ZSphdC1zZSpNZTtNZT10ZSpNZStzZSphdCx4W29lK3dlXT1VZSsoYXQ9dmUpLENbb2Urd2VdPUplK01lLHhbb2Urd2Ural09VWUtYXQsQ1tvZSt3ZStqXT1KZS1NZSx3ZSE9PUUmJih2ZT1tKnRlLUEqc2Usc2U9bSpzZStBKnRlLHRl''@;'; put 'put ''PXZlKX19LEoucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKHAsYil7dmFyIHg9MXxNYXRoLm1heChiLHApLEM9MSZ4LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlUKys7cmV0dXJuIDE8PFQrMStDfSxKLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24ocCxiLHgpe2lmKCEoeDw9''@;'; put 'put ''MSkpZm9yKHZhciBDPTA7Qzx4LzI7QysrKXt2YXIgVD1wW0NdO3BbQ109cFt4LUMtMV0scFt4LUMtMV09VCxUPWJbQ10sYltDXT0tYlt4LUMtMV0sYlt4LUMtMV09LVR9fSxKLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24ocCxiKXtmb3IodmFyIHg9MCxDPTA7QzxiLzI7QysrKXt2''@;'; put 'put ''YXIgVD04MTkyKk1hdGgucm91bmQocFsyKkMrMV0vYikrTWF0aC5yb3VuZChwWzIqQ10vYikreDtwW0NdPTY3MTA4ODYzJlQseD1UPDY3MTA4ODY0PzA6VC82NzEwODg2NHwwfXJldHVybiBwfSxKLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHAsYix4LEMpe2Zvcih2YXIgVD0wLEg9''@;'; put 'put ''MDtIPGI7SCsrKXhbMipIXT04MTkxJihUKz0wfHBbSF0pLHhbMipIKzFdPTgxOTEmKFQ+Pj49MTMpLFQ+Pj49MTM7Zm9yKEg9MipiO0g8QzsrK0gpeFtIXT0wO2coMD09PVQpLGcoISgtODE5MiZUKSl9LEoucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShw''@;'; put 'put ''KSx4PTA7eDxwO3grKyliW3hdPTA7cmV0dXJuIGJ9LEoucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPTIqdGhpcy5ndWVzc0xlbjEzYihwLmxlbmd0aCxiLmxlbmd0aCksVD10aGlzLm1ha2VSQlQoQyksSD10aGlzLnN0dWIoQyksaj1uZXcgQXJyYXkoQyksRT1uZXcgQXJy''@;'; put 'put ''YXkoQyksbT1uZXcgQXJyYXkoQyksQT1uZXcgQXJyYXkoQyksb2U9bmV3IEFycmF5KEMpLHRlPW5ldyBBcnJheShDKSxzZT14LndvcmRzO3NlLmxlbmd0aD1DLHRoaXMuY29udmVydDEzYihwLndvcmRzLHAubGVuZ3RoLGosQyksdGhpcy5jb252ZXJ0MTNiKGIud29yZHMsYi5sZW5ndGgsQSxD''@;'; put 'put ''KSx0aGlzLnRyYW5zZm9ybShqLEgsRSxtLEMsVCksdGhpcy50cmFuc2Zvcm0oQSxILG9lLHRlLEMsVCk7Zm9yKHZhciB3ZT0wO3dlPEM7d2UrKyl7dmFyIFVlPUVbd2VdKm9lW3dlXS1tW3dlXSp0ZVt3ZV07bVt3ZV09RVt3ZV0qdGVbd2VdK21bd2VdKm9lW3dlXSxFW3dlXT1VZX1yZXR1cm4g''@;'; put 'put ''dGhpcy5jb25qdWdhdGUoRSxtLEMpLHRoaXMudHJhbnNmb3JtKEUsbSxzZSxILEMsVCksdGhpcy5jb25qdWdhdGUoc2UsSCxDKSx0aGlzLm5vcm1hbGl6ZTEzYihzZSxDKSx4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD1wLmxlbmd0aCtiLmxlbmd0aCx4LnN0cmlw''@;'; put 'put ''KCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLHRoaXMubXVsVG8ocCxiKX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1''@;'; put 'put ''cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLGVlKHRoaXMscCxiKX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHAsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5''@;'; put 'put ''cGVvZiBwKSxnKHA8NjcxMDg4NjQpO2Zvcih2YXIgYj0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkqcCxUPSg2NzEwODg2MyZDKSsoNjcxMDg4NjMmYik7Yj4+PTI2LGIrPUMvNjcxMDg4NjR8MCxiKz1UPj4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2''@;'; put 'put ''MyZUfXJldHVybiAwIT09YiYmKHRoaXMud29yZHNbeF09Yix0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4ocCl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0s''@;'; put 'put ''dy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHApe3ZhciBiPWZ1bmN0aW9uIFUoVil7Zm9yKHZhciBwPW5ldyBBcnJheShWLmJpdExlbmd0aCgpKSxiPTA7YjxwLmxlbmd0aDtiKyspe3Zh''@;'; put 'put ''ciBDPWIlMjY7cFtiXT0oVi53b3Jkc1tiLzI2fDBdJjE8PEMpPj4+Q31yZXR1cm4gcH0ocCk7aWYoMD09PWIubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIHg9dGhpcyxDPTA7QzxiLmxlbmd0aCYmMD09PWJbQ107QysrLHg9eC5zcXIoKSk7aWYoKytDPGIubGVuZ3RoKWZvcih2YXIg''@;'; put 'put ''VD14LnNxcigpO0M8Yi5sZW5ndGg7QysrLFQ9VC5zcXIoKSkwIT09YltDXSYmKHg9eC5tdWwoVCkpO3JldHVybiB4fSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBULGI9cCUyNix4PShwLWIpLzI2LEM9NjcxMDg4NjM+Pj4y''@;'; put 'put ''Ni1iPDwyNi1iO2lmKDAhPT1iKXt2YXIgSD0wO2ZvcihUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBqPXRoaXMud29yZHNbVF0mQzt0aGlzLndvcmRzW1RdPSgwfHRoaXMud29yZHNbVF0pLWo8PGJ8SCxIPWo+Pj4yNi1ifUgmJih0aGlzLndvcmRzW1RdPUgsdGhpcy5sZW5ndGgrKyl9aWYo''@;'; put 'put ''MCE9PXgpe2ZvcihUPXRoaXMubGVuZ3RoLTE7VD49MDtULS0pdGhpcy53b3Jkc1tUK3hdPXRoaXMud29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsrKXRoaXMud29yZHNbVF09MDt0aGlzLmxlbmd0aCs9eH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihwKXty''@;'; put 'put ''ZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4ocCl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihwLGIseCl7dmFyIEM7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApLEM9Yj8oYi1iJTI2KS8yNjowO3ZhciBUPXAlMjYsSD1NYXRoLm1pbigocC1UKS8yNix0aGlz''@;'; put 'put ''Lmxlbmd0aCksaj02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQsRT14O2lmKEMtPUgsQz1NYXRoLm1heCgwLEMpLEUpe2Zvcih2YXIgbT0wO208SDttKyspRS53b3Jkc1ttXT10aGlzLndvcmRzW21dO0UubGVuZ3RoPUh9aWYoMCE9PUgpaWYodGhpcy5sZW5ndGg+SClmb3IodGhpcy5sZW5ndGgt''@;'; put 'put ''PUgsbT0wO208dGhpcy5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09dGhpcy53b3Jkc1ttK0hdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEE9MDtmb3IobT10aGlzLmxlbmd0aC0xO20+PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIgb2U9MHx0aGlzLndvcmRzW21d''@;'; put 'put ''O3RoaXMud29yZHNbbV09QTw8MjYtVHxvZT4+PlQsQT1vZSZqfXJldHVybiBFJiYwIT09QSYmKEUud29yZHNbRS5sZW5ndGgrK109QSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rp''@;'; put 'put ''b24ocCxiLHgpe3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihwLGIseCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihwKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUo''@;'; put 'put ''KS5pdXNobG4ocCl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihwKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4ocCl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHApe2co''@;'; put 'put ''Im51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8PGIpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2''@;'; put 'put ''LHg9KHAtYikvMjY7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6KDAhPT1iJiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9PWImJih0aGlzLndv''@;'; put 'put ''cmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PmI8PGIpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHApfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gZygibnVt''@;'; put 'put ''YmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwP3RoaXMuaXN1Ym4oLXApOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8cD8odGhpcy53b3Jkc1swXT1wLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhp''@;'; put 'put ''cy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKHApfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24ocCl7dGhpcy53b3Jkc1swXSs9cDtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPj02NzEwODg2NDti''@;'; put 'put ''KyspdGhpcy53b3Jkc1tiXS09NjcxMDg4NjQsYj09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tiKzFdPTE6dGhpcy53b3Jkc1tiKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGIrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24ocCl7aWYo''@;'; put 'put ''ZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwKXJldHVybiB0aGlzLmlhZGRuKC1wKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09cCwxPT09''@;'; put 'put ''dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl08MDtiKyspdGhpcy53b3Jkc1tiXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tiKzFd''@;'; put 'put ''LT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihwKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHApfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHAsYix4KXt2YXIgVDt0aGlzLl9leHBhbmQocC5sZW5ndGgreCk7dmFy''@;'; put 'put ''IEgsaj0wO2ZvcihUPTA7VDxwLmxlbmd0aDtUKyspe0g9KDB8dGhpcy53b3Jkc1tUK3hdKStqO3ZhciBFPSgwfHAud29yZHNbVF0pKmI7aj0oKEgtPTY3MTA4ODYzJkUpPj4yNiktKEUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkh9Zm9yKDtUPHRoaXMubGVuZ3RoLXg7''@;'; put 'put ''VCsrKWo9KEg9KDB8dGhpcy53b3Jkc1tUK3hdKStqKT4+MjYsdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkg7aWYoMD09PWopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoZygtMT09PWopLGo9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspaj0oSD0tKDB8dGhpcy53b3Jkc1tUXSkraik+PjI2LHRo''@;'; put 'put ''aXMud29yZHNbVF09NjcxMDg4NjMmSDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMuY2xvbmUoKSxUPXAsSD0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9KHg9MjYtdGhpcy5fY291bnRC''@;'; put 'put ''aXRzKEgpKSYmKFQ9VC51c2hsbih4KSxDLml1c2hsbih4KSxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxlbmd0aDtpZigibW9kIiE9PWIpeyhtPW5ldyB3KG51bGwpKS5sZW5ndGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0ubGVuZ3RoKTtmb3IodmFyIEE9''@;'; put 'put ''MDtBPG0ubGVuZ3RoO0ErKyltLndvcmRzW0FdPTB9dmFyIG9lPUMuY2xvbmUoKS5faXNobG5zdWJtdWwoVCwxLEUpOzA9PT1vZS5uZWdhdGl2ZSYmKEM9b2UsbSYmKG0ud29yZHNbRV09MSkpO2Zvcih2YXIgdGU9RS0xO3RlPj0wO3RlLS0pe3ZhciBzZT02NzEwODg2NCooMHxDLndvcmRzW1Qu''@;'; put 'put ''bGVuZ3RoK3RlXSkrKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZS0xXSk7Zm9yKHNlPU1hdGgubWluKHNlL0h8MCw2NzEwODg2MyksQy5faXNobG5zdWJtdWwoVCxzZSx0ZSk7MCE9PUMubmVnYXRpdmU7KXNlLS0sQy5uZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSx0ZSksQy5pc1plcm8oKXx8''@;'; put 'put ''KEMubmVnYXRpdmVePTEpO20mJihtLndvcmRzW3RlXT1zZSl9cmV0dXJuIG0mJm0uc3RyaXAoKSxDLnN0cmlwKCksImRpdiIhPT1iJiYwIT09eCYmQy5pdXNocm4oeCkse2RpdjptfHxudWxsLG1vZDpDfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZyghcC5p''@;'; put 'put ''c1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAsYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4''@;'; put 'put ''JiYwIT09VC5uZWdhdGl2ZSYmVC5pYWRkKHApKSx7ZGl2OkMsbW9kOlR9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmU/KEg9dGhpcy5kaXZtb2QocC5uZWcoKSxiKSwibW9kIiE9PWImJihDPUguZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOkgubW9kfSk6dGhpcy5uZWdhdGl2ZSZw''@;'; put 'put ''Lm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAubmVnKCksYiksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pc3ViKHApKSx7ZGl2OkguZGl2LG1vZDpUfSk6cC5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHApPDA/e2RpdjpuZXcgdygw''@;'; put 'put ''KSxtb2Q6dGhpc306MT09PXAubGVuZ3RoPyJkaXYiPT09Yj97ZGl2OnRoaXMuZGl2bihwLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1iP3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKHAud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm5ldyB3KHRo''@;'; put 'put ''aXMubW9kbihwLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYocCxiKTt2YXIgQyxULEh9LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAs''@;'; put 'put ''Im1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmRpdm1vZChwKTtpZihiLm1vZC5pc1plcm8oKSlyZXR1cm4gYi5kaXY7''@;'; put 'put ''dmFyIHg9MCE9PWIuZGl2Lm5lZ2F0aXZlP2IubW9kLmlzdWIocCk6Yi5tb2QsQz1wLnVzaHJuKDEpLFQ9cC5hbmRsbigxKSxIPXguY21wKEMpO3JldHVybiBIPDB8fDE9PT1UJiYwPT09SD9iLmRpdjowIT09Yi5kaXYubmVnYXRpdmU/Yi5kaXYuaXN1Ym4oMSk6Yi5kaXYuaWFkZG4oMSl9LHcu''@;'; put 'put ''cHJvdG90eXBlLm1vZG49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPSgxPDwyNiklcCx4PTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXg9KGIqeCsoMHx0aGlzLndvcmRzW0NdKSklcDtyZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24ocCl7ZyhwPD02''@;'; put 'put ''NzEwODg2Myk7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCpiO3RoaXMud29yZHNbeF09Qy9wfDAsYj1DJXB9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihwKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5jbG9uZSgpLmlkaXZuKHApfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxU''@;'; put 'put ''PW5ldyB3KDApLEg9bmV3IHcoMCksaj1uZXcgdygxKSxFPTA7Yi5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTspYi5pdXNocm4oMSkseC5pdXNocm4oMSksKytFO2Zvcih2YXIgbT14LmNsb25lKCksQT1iLmNsb25lKCk7IWIuaXNaZXJvKCk7KXtmb3IodmFyIG9lPTAsdGU9MTshKGIud29yZHNbMF0m''@;'; put 'put ''dGUpJiZvZTwyNjsrK29lLHRlPDw9MSk7aWYob2U+MClmb3IoYi5pdXNocm4ob2UpO29lLS0gPjA7KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkmJihDLmlhZGQobSksVC5pc3ViKEEpKSxDLml1c2hybigxKSxULml1c2hybigxKTtmb3IodmFyIHNlPTAsd2U9MTshKHgud29yZHNbMF0md2UpJiZz''@;'; put 'put ''ZTwyNjsrK3NlLHdlPDw9MSk7aWYoc2U+MClmb3IoeC5pdXNocm4oc2UpO3NlLS0gPjA7KShILmlzT2RkKCl8fGouaXNPZGQoKSkmJihILmlhZGQobSksai5pc3ViKEEpKSxILml1c2hybigxKSxqLml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihIKSxULmlzdWIoaikp''@;'; put 'put ''Oih4LmlzdWIoYiksSC5pc3ViKEMpLGouaXN1YihUKSl9cmV0dXJue2E6SCxiOmosZ2NkOnguaXVzaGxuKEUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBvZSxiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5u''@;'; put 'put ''ZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9eC5jbG9uZSgpO2IuY21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2YXIgaj0wLEU9MTshKGIud29yZHNbMF0mRSkmJmo8MjY7KytqLEU8PD0xKTtpZihqPjApZm9yKGIuaXVzaHJu''@;'; put 'put ''KGopO2otLSA+MDspQy5pc09kZCgpJiZDLmlhZGQoSCksQy5pdXNocm4oMSk7Zm9yKHZhciBtPTAsQT0xOyEoeC53b3Jkc1swXSZBKSYmbTwyNjsrK20sQTw8PTEpO2lmKG0+MClmb3IoeC5pdXNocm4obSk7bS0tID4wOylULmlzT2RkKCkmJlQuaWFkZChIKSxULml1c2hybigxKTtiLmNtcCh4''@;'; put 'put ''KT49MD8oYi5pc3ViKHgpLEMuaXN1YihUKSk6KHguaXN1YihiKSxULmlzdWIoQykpfXJldHVybihvZT0wPT09Yi5jbXBuKDEpP0M6VCkuY21wbigwKTwwJiZvZS5pYWRkKHApLG9lfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24ocCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gcC5hYnMoKTtp''@;'; put 'put ''ZihwLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBiPXRoaXMuY2xvbmUoKSx4PXAuY2xvbmUoKTtiLm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgQz0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7QysrKWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDti''@;'; put 'put ''LmlzRXZlbigpOyliLml1c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBUPWIuY21wKHgpO2lmKFQ8MCl7dmFyIEg9YjtiPXgseD1IfWVsc2UgaWYoMD09PVR8fDA9PT14LmNtcG4oMSkpYnJlYWs7Yi5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihDKX0sdy5wcm90b3R5''@;'; put 'put ''cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5lZ2NkKHApLmEudW1vZChwKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHcu''@;'; put 'put ''cHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLndvcmRzWzBdJnB9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKTt2YXIgYj1wJTI2LHg9KHAtYikvMjYsQz0xPDxiO2lmKHRoaXMubGVuZ3RoPD14KXJldHVybiB0aGlzLl9l''@;'; put 'put ''eHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdfD1DLHRoaXM7Zm9yKHZhciBUPUMsSD14OzAhPT1UJiZIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9MHx0aGlzLndvcmRzW0hdO1Q9KGorPVQpPj4+MjYsdGhpcy53b3Jkc1tIXT1qJj02NzEwODg2M31yZXR1cm4gMCE9PVQmJih0aGlzLndvcmRzW0hd''@;'; put 'put ''PVQsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24ocCl7dmFyIHgsYj1wPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFiKXJl''@;'; put 'put ''dHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZiKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXg9MTtlbHNle2ImJihwPS1wKSxnKHA8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9PT1wPzA6QzxwPy0xOjF9''@;'; put 'put ''cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXg6eH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKHApe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIDE7dmFyIGI9dGhpcy51''@;'; put 'put ''Y21wKHApO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1iOmJ9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24ocCl7aWYodGhpcy5sZW5ndGg+cC5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8cC5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+''@;'; put 'put ''PTA7eC0tKXt2YXIgQz0wfHRoaXMud29yZHNbeF0sVD0wfHAud29yZHNbeF07aWYoQyE9PVQpe0M8VD9iPS0xOkM+VCYmKGI9MSk7YnJlYWt9fXJldHVybiBifSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24ocCl7cmV0dXJuIDE9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmd0PWZ1bmN0''@;'; put 'put ''aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXAocCl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wbihwKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcChwKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHApe3Jl''@;'; put 'put ''dHVybi0xPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhp''@;'; put 'put ''cy5jbXAocCk8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihwKXtyZXR1cm4gMD09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcChwKX0sdy5yZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBTZShwKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''dG9SZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksZygwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQocCl9LHcu''@;'; put 'put ''cHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7''@;'; put 'put ''cmV0dXJuIHRoaXMucmVkPXAsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihw''@;'; put 'put ''KXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVy''@;'; put 'put ''cyIpLHRoaXMucmVkLmlhZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24o''@;'; put 'put ''cCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJl''@;'; put 'put ''cnMiKSx0aGlzLnJlZC5zaGwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5tdWwodGhpcyxwKX0sdy5w''@;'; put 'put ''cm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQuaW11bCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9u''@;'; put 'put ''bHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5f''@;'; put 'put ''dmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlz''@;'; put 'put ''KX0sdy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihwKXty''@;'; put 'put ''ZXR1cm4gZyh0aGlzLnJlZCYmIXAucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHApfTt2YXIgcmU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBpZShWLHApe3RoaXMu''@;'; put 'put ''bmFtZT1WLHRoaXMucD1uZXcgdyhwLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gbGUoKXtpZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZm''@;'; put 'put ''ZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIG1lKCl7aWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5j''@;'; put 'put ''dGlvbiBfZSgpe2llLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVGUoKXtpZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZm''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIFNlKFYpe2lmKCJzdHJpbmciPT10eXBlb2YgVil7dmFyIHA9dy5fcHJpbWUoVik7dGhpcy5tPXAucCx0aGlzLnByaW1lPXB9ZWxzZSBnKFYuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09''@;'; put 'put ''Vix0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gemUoVil7U2UuY2FsbCh0aGlzLFYpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRo''@;'; put 'put ''aXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIu''@;'; put 'put ''c3ViKHRoaXMubWludil9aWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhudWxsKTtyZXR1cm4gcC53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHB9LGllLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDtkb3t0aGlzLnNw''@;'; put 'put ''bGl0KGIsdGhpcy50bXApLHg9KGI9KGI9dGhpcy5pbXVsSyhiKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHg+dGhpcy5uKTt2YXIgQz14PHRoaXMubj8tMTpiLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUM/KGIud29yZHNbMF09MCxiLmxlbmd0aD0xKTpDPjA/Yi5pc3Vi''@;'; put 'put ''KHRoaXMucCk6dm9pZCAwIT09Yi5zdHJpcD9iLnN0cmlwKCk6Yi5fc3RyaXAoKSxifSxpZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxiKXtwLml1c2hybih0aGlzLm4sMCxiKX0saWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3JldHVybiBwLmltdWwodGhpcy5rKX0sQihsZSxp''@;'; put 'put ''ZSksbGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTQxOTQzMDMsQz1NYXRoLm1pbihwLmxlbmd0aCw5KSxUPTA7VDxDO1QrKyliLndvcmRzW1RdPXAud29yZHNbVF07aWYoYi5sZW5ndGg9QyxwLmxlbmd0aDw9OSlyZXR1cm4gcC53b3Jkc1swXT0wLHZvaWQocC5s''@;'; put 'put ''ZW5ndGg9MSk7dmFyIEg9cC53b3Jkc1s5XTtmb3IoYi53b3Jkc1tiLmxlbmd0aCsrXT1IJngsVD0xMDtUPHAubGVuZ3RoO1QrKyl7dmFyIGo9MHxwLndvcmRzW1RdO3Aud29yZHNbVC0xMF09KGomeCk8PDR8SD4+PjIyLEg9an1wLndvcmRzW1QtMTBdPUg+Pj49MjIscC5sZW5ndGgtPTA9PT1I''@;'; put 'put ''JiZwLmxlbmd0aD4xMD8xMDo5fSxsZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7cC53b3Jkc1twLmxlbmd0aF09MCxwLndvcmRzW3AubGVuZ3RoKzFdPTAscC5sZW5ndGgrPTI7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0wfHAud29yZHNbeF07cC53b3Jkc1t4''@;'; put 'put ''XT02NzEwODg2MyYoYis9OTc3KkMpLGI9NjQqQysoYi82NzEwODg2NHwwKX1yZXR1cm4gMD09PXAud29yZHNbcC5sZW5ndGgtMV0mJihwLmxlbmd0aC0tLDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiZwLmxlbmd0aC0tKSxwfSxCKG1lLGllKSxCKF9lLGllKSxCKFRlLGllKSxUZS5wcm90b3R5''@;'; put 'put ''cGUuaW11bEs9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0xOSooMHxwLndvcmRzW3hdKStiLFQ9NjcxMDg4NjMmQztDPj4+PTI2LHAud29yZHNbeF09VCxiPUN9cmV0dXJuIDAhPT1iJiYocC53b3Jkc1twLmxlbmd0aCsrXT1iKSxwfSx3Ll9wcmlt''@;'; put 'put ''ZT1mdW5jdGlvbihwKXtpZihyZVtwXSlyZXR1cm4gcmVbcF07dmFyIGI7aWYoImsyNTYiPT09cCliPW5ldyBsZTtlbHNlIGlmKCJwMjI0Ij09PXApYj1uZXcgbWU7ZWxzZSBpZigicDE5MiI9PT1wKWI9bmV3IF9lO2Vsc2V7aWYoInAyNTUxOSIhPT1wKXRocm93IG5ldyBFcnJvcigiVW5rbm93''@;'; put 'put ''biBwcmltZSAiK3ApO2I9bmV3IFRlfXJldHVybiByZVtwXT1iLGJ9LFNlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMi''@;'; put 'put ''KX0sU2UucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHAsYil7ZyghKHAubmVnYXRpdmV8Yi5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhwLnJlZCYmcC5yZWQ9PT1iLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90''@;'; put 'put ''b3R5cGUuaW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UocCkuX2ZvcmNlUmVkKHRoaXMpOnAudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLm5lZz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pc1plcm8oKT9wLmNsb25l''@;'; put 'put ''KCk6dGhpcy5tLnN1YihwKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5hZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90''@;'; put 'put ''b3R5cGUuaWFkZD1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmlhZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5zdWIo''@;'; put 'put ''Yik7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseH0sU2Uu''@;'; put 'put ''cHJvdG90eXBlLnNobD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkxKHApLHRoaXMuaW1vZChwLnVzaGxuKGIpKX0sU2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIpLHRoaXMuaW1vZChwLmltdWwoYikpfSxTZS5wcm90b3R5''@;'; put 'put ''cGUubXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5tdWwoYikpfSxTZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbXVsKHAscC5jbG9uZSgpKX0sU2UucHJvdG90eXBlLnNxcj1mdW5jdGlvbihwKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5tdWwocCxwKX0sU2UucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24ocCl7aWYocC5pc1plcm8oKSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBiPXRoaXMubS5hbmRsbigzKTtpZihnKGIlMj09MSksMz09PWIpe3ZhciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhp''@;'; put 'put ''cy5wb3cocCx4KX1mb3IodmFyIEM9dGhpcy5tLnN1Ym4oMSksVD0wOyFDLmlzWmVybygpJiYwPT09Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJuKDEpO2coIUMuaXNaZXJvKCkpO3ZhciBIPW5ldyB3KDEpLnRvUmVkKHRoaXMpLGo9SC5yZWROZWcoKSxFPXRoaXMubS5zdWJuKDEpLml1c2hybigx''@;'; put 'put ''KSxtPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobT1uZXcgdygyKm0qbSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG0sRSkuY21wKGopOyltLnJlZElBZGQoaik7Zm9yKHZhciBBPXRoaXMucG93KG0sQyksb2U9dGhpcy5wb3cocCxDLmFkZG4oMSkuaXVzaHJuKDEpKSx0ZT10aGlzLnBvdyhw''@;'; put 'put ''LEMpLHNlPVQ7MCE9PXRlLmNtcChIKTspe2Zvcih2YXIgd2U9dGUsVWU9MDswIT09d2UuY21wKEgpO1VlKyspd2U9d2UucmVkU3FyKCk7ZyhVZTxzZSk7dmFyIEplPXRoaXMucG93KEEsbmV3IHcoMSkuaXVzaGxuKHNlLVVlLTEpKTtvZT1vZS5yZWRNdWwoSmUpLEE9SmUucmVkU3FyKCksdGU9''@;'; put 'put ''dGUucmVkTXVsKEEpLHNlPVVlfXJldHVybiBvZX0sU2UucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7dmFyIGI9cC5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWIubmVnYXRpdmU/KGIubmVnYXRpdmU9MCx0aGlzLmltb2QoYikucmVkTmVnKCkpOnRoaXMuaW1vZChiKX0sU2UucHJvdG90''@;'; put 'put ''eXBlLnBvdz1mdW5jdGlvbihwLGIpe2lmKGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1iLmNtcG4oMSkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgQz1uZXcgQXJyYXkoMTYpO0NbMF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sxXT1wO2Zvcih2YXIgVD0yO1Q8''@;'; put 'put ''Qy5sZW5ndGg7VCsrKUNbVF09dGhpcy5tdWwoQ1tULTFdLHApO3ZhciBIPUNbMF0saj0wLEU9MCxtPWIuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1tJiYobT0yNiksVD1iLmxlbmd0aC0xO1Q+PTA7VC0tKXtmb3IodmFyIEE9Yi53b3Jkc1tUXSxvZT1tLTE7b2U+PTA7b2UtLSl7dmFyIHRlPUE+''@;'; put 'put ''Pm9lJjE7SCE9PUNbMF0mJihIPXRoaXMuc3FyKEgpKSwwIT09dGV8fDAhPT1qPyhqPDw9MSxqfD10ZSwoND09KytFfHwwPT09VCYmMD09PW9lKSYmKEg9dGhpcy5tdWwoSCxDW2pdKSxFPTAsaj0wKSk6RT0wfW09MjZ9cmV0dXJuIEh9LFNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24o''@;'; put 'put ''cCl7dmFyIGI9cC51bW9kKHRoaXMubSk7cmV0dXJuIGI9PT1wP2IuY2xvbmUoKTpifSxTZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9cC5jbG9uZSgpO3JldHVybiBiLnJlZD1udWxsLGJ9LHcubW9udD1mdW5jdGlvbihwKXtyZXR1cm4gbmV3IHplKHApfSxCKHpl''@;'; put 'put ''LFNlKSx6ZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC51c2hsbih0aGlzLnNoaWZ0KSl9LHplLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmltb2QocC5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGIucmVkPW51''@;'; put 'put ''bGwsYn0semUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtpZihwLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBwLndvcmRzWzBdPTAscC5sZW5ndGg9MSxwO3ZhciB4PXAuaW11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hp''@;'; put 'put ''ZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSx6ZS5wcm90b3R5cGUubXVsPWZ1bmN0''@;'; put 'put ''aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB4PXAubXVsKGIpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVz''@;'; put 'put ''aHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LHplLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC5faW52''@;'; put 'put ''bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KHVlPV8ubm1kKHVlKSx0aGlzKX0sOTA1MTg6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9cTtJLnZlcnNpb249XygxNjM2KS5yRSxJLnV0aWxzPV8oMzEzNiksSS5yYW5kPV8oMzUyOTQpLEkuY3VydmU9Xyg4''@;'; put 'put ''NzI5KSxJLmN1cnZlcz1fKDIzNDAxKSxJLmVjPV8oMjkwNDIpLEkuZWRkc2E9Xyg4MzA0NSl9LDk4ODI4Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oODg3MjMpLHk9XygzMTM2KSxnPXkuZ2V0TkFGLEI9eS5nZXRKU0Ysdz15LmFzc2VydDtmdW5jdGlvbiBQKE8seil7dGhpcy50''@;'; put 'put ''eXBlPU8sdGhpcy5wPW5ldyBJKHoucCwxNiksdGhpcy5yZWQ9ei5wcmltZT9JLnJlZCh6LnByaW1lKTpJLm1vbnQodGhpcy5wKSx0aGlzLnplcm89bmV3IEkoMCkudG9SZWQodGhpcy5yZWQpLHRoaXMub25lPW5ldyBJKDEpLnRvUmVkKHRoaXMucmVkKSx0aGlzLnR3bz1uZXcgSSgyKS50b1Jl''@;'; put 'put ''ZCh0aGlzLnJlZCksdGhpcy5uPXoubiYmbmV3IEkoei5uLDE2KSx0aGlzLmc9ei5nJiZ0aGlzLnBvaW50RnJvbUpTT04oei5nLHouZ1JlZCksdGhpcy5fd25hZlQxPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDI9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUMz1uZXcgQXJyYXkoNCksdGhpcy5f''@;'; put 'put ''d25hZlQ0PW5ldyBBcnJheSg0KSx0aGlzLl9iaXRMZW5ndGg9dGhpcy5uP3RoaXMubi5iaXRMZW5ndGgoKTowO3ZhciBOPXRoaXMubiYmdGhpcy5wLmRpdih0aGlzLm4pOyFOfHxOLmNtcG4oMTAwKT4wP3RoaXMucmVkTj1udWxsOih0aGlzLl9tYXh3ZWxsVHJpY2s9ITAsdGhpcy5yZWROPXRo''@;'; put 'put ''aXMubi50b1JlZCh0aGlzLnJlZCkpfWZ1bmN0aW9uIEYoTyx6KXt0aGlzLmN1cnZlPU8sdGhpcy50eXBlPXosdGhpcy5wcmVjb21wdXRlZD1udWxsfXVlLmV4cG9ydHM9UCxQLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9LFAu''@;'; put 'put ''cHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sUC5wcm90b3R5cGUuX2ZpeGVkTmFmTXVsPWZ1bmN0aW9uKHosTil7dyh6LnByZWNvbXB1dGVkKTt2YXIgTD16Ll9nZXREb3VibGVzKCksSz1nKE4sMSx0aGlzLl9iaXRMZW5n''@;'; put 'put ''dGgpLFU9KDE8PEwuc3RlcCsxKS0oTC5zdGVwJTI9PTA/MjoxKTtVLz0zO3ZhciBZLFgsVz1bXTtmb3IoWT0wO1k8Sy5sZW5ndGg7WSs9TC5zdGVwKXtYPTA7Zm9yKHZhciBlZT1ZK0wuc3RlcC0xO2VlPj1ZO2VlLS0pWD0oWDw8MSkrS1tlZV07Vy5wdXNoKFgpfWZvcih2YXIgSj10aGlzLmpw''@;'; put 'put ''b2ludChudWxsLG51bGwsbnVsbCkscmU9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLGllPVU7aWU+MDtpZS0tKXtmb3IoWT0wO1k8Vy5sZW5ndGg7WSsrKShYPVdbWV0pPT09aWU/cmU9cmUubWl4ZWRBZGQoTC5wb2ludHNbWV0pOlg9PT0taWUmJihyZT1yZS5taXhlZEFkZChMLnBvaW50''@;'; put 'put ''c1tZXS5uZWcoKSkpO0o9Si5hZGQocmUpfXJldHVybiBKLnRvUCgpfSxQLnByb3RvdHlwZS5fd25hZk11bD1mdW5jdGlvbih6LE4pe2Zvcih2YXIgTD00LEs9ei5fZ2V0TkFGUG9pbnRzKEwpLFU9Sy5wb2ludHMsVz1nKE4sTD1LLnduZCx0aGlzLl9iaXRMZW5ndGgpLFk9dGhpcy5qcG9pbnQo''@;'; put 'put ''bnVsbCxudWxsLG51bGwpLFg9Vy5sZW5ndGgtMTtYPj0wO1gtLSl7Zm9yKHZhciBlZT0wO1g+PTAmJjA9PT1XW1hdO1gtLSllZSsrO2lmKFg+PTAmJmVlKyssWT1ZLmRibHAoZWUpLFg8MClicmVhazt2YXIgSj1XW1hdO3coMCE9PUopLFk9ImFmZmluZSI9PT16LnR5cGU/WS5taXhlZEFkZChK''@;'; put 'put ''PjA/VVtKLTE+PjFdOlVbLUotMT4+MV0ubmVnKCkpOlkuYWRkKEo+MD9VW0otMT4+MV06VVstSi0xPj4xXS5uZWcoKSl9cmV0dXJuImFmZmluZSI9PT16LnR5cGU/WS50b1AoKTpZfSxQLnByb3RvdHlwZS5fd25hZk11bEFkZD1mdW5jdGlvbih6LE4sTCxLLFUpe3ZhciBKLHJlLGllLFc9dGhp''@;'; put 'put ''cy5fd25hZlQxLFk9dGhpcy5fd25hZlQyLFg9dGhpcy5fd25hZlQzLGVlPTA7Zm9yKEo9MDtKPEs7SisrKXt2YXIgbGU9KGllPU5bSl0pLl9nZXROQUZQb2ludHMoeik7V1tKXT1sZS53bmQsWVtKXT1sZS5wb2ludHN9Zm9yKEo9Sy0xO0o+PTE7Si09Mil7dmFyIG1lPUotMSxfZT1KO2lmKDE9''@;'; put 'put ''PT1XW21lXSYmMT09PVdbX2VdKXt2YXIgVGU9W05bbWVdLG51bGwsbnVsbCxOW19lXV07MD09PU5bbWVdLnkuY21wKE5bX2VdLnkpPyhUZVsxXT1OW21lXS5hZGQoTltfZV0pLFRlWzJdPU5bbWVdLnRvSigpLm1peGVkQWRkKE5bX2VdLm5lZygpKSk6MD09PU5bbWVdLnkuY21wKE5bX2VdLnku''@;'; put 'put ''cmVkTmVnKCkpPyhUZVsxXT1OW21lXS50b0ooKS5taXhlZEFkZChOW19lXSksVGVbMl09TlttZV0uYWRkKE5bX2VdLm5lZygpKSk6KFRlWzFdPU5bbWVdLnRvSigpLm1peGVkQWRkKE5bX2VdKSxUZVsyXT1OW21lXS50b0ooKS5taXhlZEFkZChOW19lXS5uZWcoKSkpO3ZhciBTZT1bLTMsLTEs''@;'; put 'put ''LTUsLTcsMCw3LDUsMSwzXSx6ZT1CKExbbWVdLExbX2VdKTtmb3IoZWU9TWF0aC5tYXgoemVbMF0ubGVuZ3RoLGVlKSxYW21lXT1uZXcgQXJyYXkoZWUpLFhbX2VdPW5ldyBBcnJheShlZSkscmU9MDtyZTxlZTtyZSsrKVhbbWVdW3JlXT1TZVszKigxKygwfHplWzBdW3JlXSkpKygxKygwfHpl''@;'; put 'put ''WzFdW3JlXSkpXSxYW19lXVtyZV09MCxZW21lXT1UZX1lbHNlIFhbbWVdPWcoTFttZV0sV1ttZV0sdGhpcy5fYml0TGVuZ3RoKSxYW19lXT1nKExbX2VdLFdbX2VdLHRoaXMuX2JpdExlbmd0aCksZWU9TWF0aC5tYXgoWFttZV0ubGVuZ3RoLGVlKSxlZT1NYXRoLm1heChYW19lXS5sZW5ndGgs''@;'; put 'put ''ZWUpfXZhciBiPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSx4PXRoaXMuX3duYWZUNDtmb3IoSj1lZTtKPj0wO0otLSl7Zm9yKHZhciBDPTA7Sj49MDspe3ZhciBUPSEwO2ZvcihyZT0wO3JlPEs7cmUrKyl4W3JlXT0wfFhbcmVdW0pdLDAhPT14W3JlXSYmKFQ9ITEpO2lmKCFUKWJyZWFr''@;'; put 'put ''O0MrKyxKLS19aWYoSj49MCYmQysrLGI9Yi5kYmxwKEMpLEo8MClicmVhaztmb3IocmU9MDtyZTxLO3JlKyspe3ZhciBIPXhbcmVdOzAhPT1IJiYoSD4wP2llPVlbcmVdW0gtMT4+MV06SDwwJiYoaWU9WVtyZV1bLUgtMT4+MV0ubmVnKCkpLGI9ImFmZmluZSI9PT1pZS50eXBlP2IubWl4ZWRB''@;'; put 'put ''ZGQoaWUpOmIuYWRkKGllKSl9fWZvcihKPTA7SjxLO0orKylZW0pdPW51bGw7cmV0dXJuIFU/YjpiLnRvUCgpfSxQLkJhc2VQb2ludD1GLEYucHJvdG90eXBlLmVxPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQiKX0sRi5wcm90b3R5cGUudmFsaWRhdGU9ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS52YWxpZGF0ZSh0aGlzKX0sUC5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24oeixOKXt6PXkudG9BcnJheSh6LE4pO3ZhciBMPXRoaXMucC5ieXRlTGVuZ3RoKCk7aWYoKDQ9PT16WzBdfHw2PT09elswXXx8Nz09PXpbMF0pJiZ6Lmxlbmd0''@;'; put 'put ''aC0xPT0yKkwpcmV0dXJuIDY9PT16WzBdP3coelt6Lmxlbmd0aC0xXSUyPT0wKTo3PT09elswXSYmdyh6W3oubGVuZ3RoLTFdJTI9PTEpLHRoaXMucG9pbnQoei5zbGljZSgxLDErTCksei5zbGljZSgxK0wsMSsyKkwpKTtpZigoMj09PXpbMF18fDM9PT16WzBdKSYmei5sZW5ndGgtMT09PUwp''@;'; put 'put ''cmV0dXJuIHRoaXMucG9pbnRGcm9tWCh6LnNsaWNlKDEsMStMKSwzPT09elswXSk7dGhyb3cgbmV3IEVycm9yKCJVbmtub3duIHBvaW50IGZvcm1hdCIpfSxGLnByb3RvdHlwZS5lbmNvZGVDb21wcmVzc2VkPWZ1bmN0aW9uKHope3JldHVybiB0aGlzLmVuY29kZSh6LCEwKX0sRi5wcm90b3R5''@;'; put 'put ''cGUuX2VuY29kZT1mdW5jdGlvbih6KXt2YXIgTj10aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpLEw9dGhpcy5nZXRYKCkudG9BcnJheSgiYmUiLE4pO3JldHVybiB6P1t0aGlzLmdldFkoKS5pc0V2ZW4oKT8yOjNdLmNvbmNhdChMKTpbNF0uY29uY2F0KEwsdGhpcy5nZXRZKCkudG9BcnJheSgi''@;'; put 'put ''YmUiLE4pKX0sRi5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHosTil7cmV0dXJuIHkuZW5jb2RlKHRoaXMuX2VuY29kZShOKSx6KX0sRi5wcm90b3R5cGUucHJlY29tcHV0ZT1mdW5jdGlvbih6KXtpZih0aGlzLnByZWNvbXB1dGVkKXJldHVybiB0aGlzO3ZhciBOPXtkb3VibGVzOm51bGws''@;'; put 'put ''bmFmOm51bGwsYmV0YTpudWxsfTtyZXR1cm4gTi5uYWY9dGhpcy5fZ2V0TkFGUG9pbnRzKDgpLE4uZG91Ymxlcz10aGlzLl9nZXREb3VibGVzKDQseiksTi5iZXRhPXRoaXMuX2dldEJldGEoKSx0aGlzLnByZWNvbXB1dGVkPU4sdGhpc30sRi5wcm90b3R5cGUuX2hhc0RvdWJsZXM9ZnVuY3Rp''@;'; put 'put ''b24oeil7aWYoIXRoaXMucHJlY29tcHV0ZWQpcmV0dXJuITE7dmFyIE49dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO3JldHVybiEhTiYmTi5wb2ludHMubGVuZ3RoPj1NYXRoLmNlaWwoKHouYml0TGVuZ3RoKCkrMSkvTi5zdGVwKX0sRi5wcm90b3R5cGUuX2dldERvdWJsZXM9ZnVuY3Rpb24o''@;'; put 'put ''eixOKXtpZih0aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMpcmV0dXJuIHRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcztmb3IodmFyIEw9W3RoaXNdLEs9dGhpcyxVPTA7VTxOO1UrPXope2Zvcih2YXIgVz0wO1c8ejtXKyspSz1LLmRibCgpO0wucHVzaChLKX1yZXR1''@;'; put 'put ''cm57c3RlcDp6LHBvaW50czpMfX0sRi5wcm90b3R5cGUuX2dldE5BRlBvaW50cz1mdW5jdGlvbih6KXtpZih0aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLm5hZilyZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5uYWY7Zm9yKHZhciBOPVt0aGlzXSxMPSgxPDx6KS0xLEs9MT09PUw/''@;'; put 'put ''bnVsbDp0aGlzLmRibCgpLFU9MTtVPEw7VSsrKU5bVV09TltVLTFdLmFkZChLKTtyZXR1cm57d25kOnoscG9pbnRzOk59fSxGLnByb3RvdHlwZS5fZ2V0QmV0YT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxGLnByb3RvdHlwZS5kYmxwPWZ1bmN0aW9uKHope2Zvcih2YXIgTj10aGlzLEw9MDtM''@;'; put 'put ''PHo7TCsrKU49Ti5kYmwoKTtyZXR1cm4gTn19LDU1NTM3Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMzEzNikseT1fKDg4NzIzKSxnPV8oNzE5OTMpLEI9Xyg5ODgyOCksdz1JLmFzc2VydDtmdW5jdGlvbiBQKE8pe3RoaXMudHdpc3RlZD0xIT0oMHxPLmEpLHRoaXMubU9uZUE9''@;'; put 'put ''dGhpcy50d2lzdGVkJiYtMT09KDB8Ty5hKSx0aGlzLmV4dGVuZGVkPXRoaXMubU9uZUEsQi5jYWxsKHRoaXMsImVkd2FyZHMiLE8pLHRoaXMuYT1uZXcgeShPLmEsMTYpLnVtb2QodGhpcy5yZWQubSksdGhpcy5hPXRoaXMuYS50b1JlZCh0aGlzLnJlZCksdGhpcy5jPW5ldyB5KE8uYywxNiku''@;'; put 'put ''dG9SZWQodGhpcy5yZWQpLHRoaXMuYzI9dGhpcy5jLnJlZFNxcigpLHRoaXMuZD1uZXcgeShPLmQsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmRkPXRoaXMuZC5yZWRBZGQodGhpcy5kKSx3KCF0aGlzLnR3aXN0ZWR8fDA9PT10aGlzLmMuZnJvbVJlZCgpLmNtcG4oMSkpLHRoaXMub25lQz0x''@;'; put 'put ''PT0oMHxPLmMpfWZ1bmN0aW9uIEYoTyx6LE4sTCxLKXtCLkJhc2VQb2ludC5jYWxsKHRoaXMsTywicHJvamVjdGl2ZSIpLG51bGw9PT16JiZudWxsPT09TiYmbnVsbD09PUw/KHRoaXMueD10aGlzLmN1cnZlLnplcm8sdGhpcy55PXRoaXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLm9u''@;'; put 'put ''ZSx0aGlzLnQ9dGhpcy5jdXJ2ZS56ZXJvLHRoaXMuek9uZT0hMCk6KHRoaXMueD1uZXcgeSh6LDE2KSx0aGlzLnk9bmV3IHkoTiwxNiksdGhpcy56PUw/bmV3IHkoTCwxNik6dGhpcy5jdXJ2ZS5vbmUsdGhpcy50PUsmJm5ldyB5KEssMTYpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRv''@;'; put 'put ''UmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMudCYmIXRoaXMudC5yZWQmJih0aGlzLnQ9dGhpcy50LnRvUmVkKHRo''@;'; put 'put ''aXMuY3VydmUucmVkKSksdGhpcy56T25lPXRoaXMuej09PXRoaXMuY3VydmUub25lLHRoaXMuY3VydmUuZXh0ZW5kZWQmJiF0aGlzLnQmJih0aGlzLnQ9dGhpcy54LnJlZE11bCh0aGlzLnkpLHRoaXMuek9uZXx8KHRoaXMudD10aGlzLnQucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpKSkpfWco''@;'; put 'put ''UCxCKSx1ZS5leHBvcnRzPVAsUC5wcm90b3R5cGUuX211bEE9ZnVuY3Rpb24oeil7cmV0dXJuIHRoaXMubU9uZUE/ei5yZWROZWcoKTp0aGlzLmEucmVkTXVsKHopfSxQLnByb3RvdHlwZS5fbXVsQz1mdW5jdGlvbih6KXtyZXR1cm4gdGhpcy5vbmVDP3o6dGhpcy5jLnJlZE11bCh6KX0sUC5w''@;'; put 'put ''cm90b3R5cGUuanBvaW50PWZ1bmN0aW9uKHosTixMLEspe3JldHVybiB0aGlzLnBvaW50KHosTixMLEspfSxQLnByb3RvdHlwZS5wb2ludEZyb21YPWZ1bmN0aW9uKHosTil7KHo9bmV3IHkoeiwxNikpLnJlZHx8KHo9ei50b1JlZCh0aGlzLnJlZCkpO3ZhciBMPXoucmVkU3FyKCksSz10aGlz''@;'; put 'put ''LmMyLnJlZFN1Yih0aGlzLmEucmVkTXVsKEwpKSxVPXRoaXMub25lLnJlZFN1Yih0aGlzLmMyLnJlZE11bCh0aGlzLmQpLnJlZE11bChMKSksVz1LLnJlZE11bChVLnJlZEludm0oKSksWT1XLnJlZFNxcnQoKTtpZigwIT09WS5yZWRTcXIoKS5yZWRTdWIoVykuY21wKHRoaXMuemVybykpdGhy''@;'; put 'put ''b3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7dmFyIFg9WS5mcm9tUmVkKCkuaXNPZGQoKTtyZXR1cm4oTiYmIVh8fCFOJiZYKSYmKFk9WS5yZWROZWcoKSksdGhpcy5wb2ludCh6LFkpfSxQLnByb3RvdHlwZS5wb2ludEZyb21ZPWZ1bmN0aW9uKHosTil7KHo9bmV3IHkoeiwxNikpLnJl''@;'; put 'put ''ZHx8KHo9ei50b1JlZCh0aGlzLnJlZCkpO3ZhciBMPXoucmVkU3FyKCksSz1MLnJlZFN1Yih0aGlzLmMyKSxVPUwucmVkTXVsKHRoaXMuZCkucmVkTXVsKHRoaXMuYzIpLnJlZFN1Yih0aGlzLmEpLFc9Sy5yZWRNdWwoVS5yZWRJbnZtKCkpO2lmKDA9PT1XLmNtcCh0aGlzLnplcm8pKXtpZihO''@;'; put 'put ''KXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3JldHVybiB0aGlzLnBvaW50KHRoaXMuemVybyx6KX12YXIgWT1XLnJlZFNxcnQoKTtpZigwIT09WS5yZWRTcXIoKS5yZWRTdWIoVykuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIHBvaW50Iik7cmV0dXJu''@;'; put 'put ''IFkuZnJvbVJlZCgpLmlzT2RkKCkhPT1OJiYoWT1ZLnJlZE5lZygpKSx0aGlzLnBvaW50KFkseil9LFAucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKHope2lmKHouaXNJbmZpbml0eSgpKXJldHVybiEwO3oubm9ybWFsaXplKCk7dmFyIE49ei54LnJlZFNxcigpLEw9ei55LnJlZFNxcigp''@;'; put 'put ''LEs9Ti5yZWRNdWwodGhpcy5hKS5yZWRBZGQoTCksVT10aGlzLmMyLnJlZE11bCh0aGlzLm9uZS5yZWRBZGQodGhpcy5kLnJlZE11bChOKS5yZWRNdWwoTCkpKTtyZXR1cm4gMD09PUsuY21wKFUpfSxnKEYsQi5CYXNlUG9pbnQpLFAucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24o''@;'; put 'put ''eil7cmV0dXJuIEYuZnJvbUpTT04odGhpcyx6KX0sUC5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oeixOLEwsSyl7cmV0dXJuIG5ldyBGKHRoaXMseixOLEwsSyl9LEYuZnJvbUpTT049ZnVuY3Rpb24oeixOKXtyZXR1cm4gbmV3IEYoeixOWzBdLE5bMV0sTlsyXSl9LEYucHJvdG90eXBlLmlu''@;'; put 'put ''c3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBQb2ludCBJbmZpbml0eT4iOiI8RUMgUG9pbnQgeDogIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgeTogIit0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgejogIit0aGlzLnou''@;'; put 'put ''ZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyI+In0sRi5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy54LmNtcG4oMCkmJigwPT09dGhpcy55LmNtcCh0aGlzLnopfHx0aGlzLnpPbmUmJjA9PT10aGlzLnkuY21wKHRoaXMuY3VydmUuYykpfSxGLnByb3Rv''@;'; put 'put ''dHlwZS5fZXh0RGJsPWZ1bmN0aW9uKCl7dmFyIHo9dGhpcy54LnJlZFNxcigpLE49dGhpcy55LnJlZFNxcigpLEw9dGhpcy56LnJlZFNxcigpO0w9TC5yZWRJQWRkKEwpO3ZhciBLPXRoaXMuY3VydmUuX211bEEoeiksVT10aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3FyKCkucmVkSVN1Yih6''@;'; put 'put ''KS5yZWRJU3ViKE4pLFc9Sy5yZWRBZGQoTiksWT1XLnJlZFN1YihMKSxYPUsucmVkU3ViKE4pLGVlPVUucmVkTXVsKFkpLEo9Vy5yZWRNdWwoWCkscmU9VS5yZWRNdWwoWCksaWU9WS5yZWRNdWwoVyk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoZWUsSixpZSxyZSl9LEYucHJvdG90eXBlLl9w''@;'; put 'put ''cm9qRGJsPWZ1bmN0aW9uKCl7dmFyIEssVSxXLFksWCxlZSx6PXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKSxOPXRoaXMueC5yZWRTcXIoKSxMPXRoaXMueS5yZWRTcXIoKTtpZih0aGlzLmN1cnZlLnR3aXN0ZWQpe3ZhciBKPShZPXRoaXMuY3VydmUuX211bEEoTikpLnJlZEFkZChM''@;'; put 'put ''KTt0aGlzLnpPbmU/KEs9ei5yZWRTdWIoTikucmVkU3ViKEwpLnJlZE11bChKLnJlZFN1Yih0aGlzLmN1cnZlLnR3bykpLFU9Si5yZWRNdWwoWS5yZWRTdWIoTCkpLFc9Si5yZWRTcXIoKS5yZWRTdWIoSikucmVkU3ViKEopKTooWD10aGlzLnoucmVkU3FyKCksZWU9Si5yZWRTdWIoWCkucmVk''@;'; put 'put ''SVN1YihYKSxLPXoucmVkU3ViKE4pLnJlZElTdWIoTCkucmVkTXVsKGVlKSxVPUoucmVkTXVsKFkucmVkU3ViKEwpKSxXPUoucmVkTXVsKGVlKSl9ZWxzZSBZPU4ucmVkQWRkKEwpLFg9dGhpcy5jdXJ2ZS5fbXVsQyh0aGlzLnopLnJlZFNxcigpLGVlPVkucmVkU3ViKFgpLnJlZFN1YihYKSxL''@;'; put 'put ''PXRoaXMuY3VydmUuX211bEMoei5yZWRJU3ViKFkpKS5yZWRNdWwoZWUpLFU9dGhpcy5jdXJ2ZS5fbXVsQyhZKS5yZWRNdWwoTi5yZWRJU3ViKEwpKSxXPVkucmVkTXVsKGVlKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChLLFUsVyl9LEYucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biB0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuZXh0ZW5kZWQ/dGhpcy5fZXh0RGJsKCk6dGhpcy5fcHJvakRibCgpfSxGLnByb3RvdHlwZS5fZXh0QWRkPWZ1bmN0aW9uKHope3ZhciBOPXRoaXMueS5yZWRTdWIodGhpcy54KS5yZWRNdWwoei55LnJlZFN1Yih6LngpKSxMPXRo''@;'; put 'put ''aXMueS5yZWRBZGQodGhpcy54KS5yZWRNdWwoei55LnJlZEFkZCh6LngpKSxLPXRoaXMudC5yZWRNdWwodGhpcy5jdXJ2ZS5kZCkucmVkTXVsKHoudCksVT10aGlzLnoucmVkTXVsKHouei5yZWRBZGQoei56KSksVz1MLnJlZFN1YihOKSxZPVUucmVkU3ViKEspLFg9VS5yZWRBZGQoSyksZWU9''@;'; put 'put ''TC5yZWRBZGQoTiksSj1XLnJlZE11bChZKSxyZT1YLnJlZE11bChlZSksaWU9Vy5yZWRNdWwoZWUpLGxlPVkucmVkTXVsKFgpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEoscmUsbGUsaWUpfSxGLnByb3RvdHlwZS5fcHJvakFkZD1mdW5jdGlvbih6KXt2YXIgcmUsaWUsTj10aGlzLnoucmVk''@;'; put 'put ''TXVsKHoueiksTD1OLnJlZFNxcigpLEs9dGhpcy54LnJlZE11bCh6LngpLFU9dGhpcy55LnJlZE11bCh6LnkpLFc9dGhpcy5jdXJ2ZS5kLnJlZE11bChLKS5yZWRNdWwoVSksWT1MLnJlZFN1YihXKSxYPUwucmVkQWRkKFcpLGVlPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRNdWwoei54LnJl''@;'; put 'put ''ZEFkZCh6LnkpKS5yZWRJU3ViKEspLnJlZElTdWIoVSksSj1OLnJlZE11bChZKS5yZWRNdWwoZWUpO3JldHVybiB0aGlzLmN1cnZlLnR3aXN0ZWQ/KHJlPU4ucmVkTXVsKFgpLnJlZE11bChVLnJlZFN1Yih0aGlzLmN1cnZlLl9tdWxBKEspKSksaWU9WS5yZWRNdWwoWCkpOihyZT1OLnJlZE11''@;'; put 'put ''bChYKS5yZWRNdWwoVS5yZWRTdWIoSykpLGllPXRoaXMuY3VydmUuX211bEMoWSkucmVkTXVsKFgpKSx0aGlzLmN1cnZlLnBvaW50KEoscmUsaWUpfSxGLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oeil7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP3o6ei5pc0luZmluaXR5KCk/dGhpczp0aGlz''@;'; put 'put ''LmN1cnZlLmV4dGVuZGVkP3RoaXMuX2V4dEFkZCh6KTp0aGlzLl9wcm9qQWRkKHopfSxGLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oeil7cmV0dXJuIHRoaXMuX2hhc0RvdWJsZXMoeik/dGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcyx6KTp0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMseil9''@;'; put 'put ''LEYucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbih6LE4sTCl7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyxOXSxbeixMXSwyLCExKX0sRi5wcm90b3R5cGUuam11bEFkZD1mdW5jdGlvbih6LE4sTCl7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyxO''@;'; put 'put ''XSxbeixMXSwyLCEwKX0sRi5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7aWYodGhpcy56T25lKXJldHVybiB0aGlzO3ZhciB6PXRoaXMuei5yZWRJbnZtKCk7cmV0dXJuIHRoaXMueD10aGlzLngucmVkTXVsKHopLHRoaXMueT10aGlzLnkucmVkTXVsKHopLHRoaXMudCYmKHRoaXMu''@;'; put 'put ''dD10aGlzLnQucmVkTXVsKHopKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56T25lPSEwLHRoaXN9LEYucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHRoaXMueC5yZWROZWcoKSx0aGlzLnksdGhpcy56LHRoaXMudCYmdGhpcy50LnJlZE5lZygp''@;'; put 'put ''KX0sRi5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9LEYucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnkuZnJvbVJlZCgpfSxGLnByb3RvdHlwZS5lcT1mdW5jdGlv''@;'; put 'put ''bih6KXtyZXR1cm4gdGhpcz09PXp8fDA9PT10aGlzLmdldFgoKS5jbXAoei5nZXRYKCkpJiYwPT09dGhpcy5nZXRZKCkuY21wKHouZ2V0WSgpKX0sRi5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKHope3ZhciBOPXoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bCh0aGlzLnopO2lmKDA9''@;'; put 'put ''PT10aGlzLnguY21wKE4pKXJldHVybiEwO2Zvcih2YXIgTD16LmNsb25lKCksSz10aGlzLmN1cnZlLnJlZE4ucmVkTXVsKHRoaXMueik7Oyl7aWYoTC5pYWRkKHRoaXMuY3VydmUubiksTC5jbXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4hMTtpZihOLnJlZElBZGQoSyksMD09PXRoaXMueC5j''@;'; put 'put ''bXAoTikpcmV0dXJuITB9fSxGLnByb3RvdHlwZS50b1A9Ri5wcm90b3R5cGUubm9ybWFsaXplLEYucHJvdG90eXBlLm1peGVkQWRkPUYucHJvdG90eXBlLmFkZH0sODcyOToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1xO0kuYmFzZT1fKDk4ODI4KSxJLnNob3J0PV8oNjgwNzUpLEku''@;'; put 'put ''bW9udD1fKDY0OTQ3KSxJLmVkd2FyZHM9Xyg1NTUzNyl9LDY0OTQ3Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oODg3MjMpLHk9Xyg3MTk5MyksZz1fKDk4ODI4KSxCPV8oMzEzNik7ZnVuY3Rpb24gdyhGKXtnLmNhbGwodGhpcywibW9udCIsRiksdGhpcy5hPW5ldyBJKEYuYSwx''@;'; put 'put ''NikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgSShGLmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmk0PW5ldyBJKDQpLnRvUmVkKHRoaXMucmVkKS5yZWRJbnZtKCksdGhpcy50d289bmV3IEkoMikudG9SZWQodGhpcy5yZWQpLHRoaXMuYTI0PXRoaXMuaTQucmVkTXVsKHRoaXMuYS5y''@;'; put 'put ''ZWRBZGQodGhpcy50d28pKX1mdW5jdGlvbiBQKEYsTyx6KXtnLkJhc2VQb2ludC5jYWxsKHRoaXMsRiwicHJvamVjdGl2ZSIpLG51bGw9PT1PJiZudWxsPT09ej8odGhpcy54PXRoaXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLnplcm8pOih0aGlzLng9bmV3IEkoTywxNiksdGhpcy56''@;'; put 'put ''PW5ldyBJKHosMTYpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSl9eSh3LGcpLHVlLmV4cG9ydHM9dyx3LnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbihP''@;'; put 'put ''KXt2YXIgej1PLm5vcm1hbGl6ZSgpLngsTj16LnJlZFNxcigpLEw9Ti5yZWRNdWwoeikucmVkQWRkKE4ucmVkTXVsKHRoaXMuYSkpLnJlZEFkZCh6KTtyZXR1cm4gMD09PUwucmVkU3FydCgpLnJlZFNxcigpLmNtcChMKX0seShQLGcuQmFzZVBvaW50KSx3LnByb3RvdHlwZS5kZWNvZGVQb2lu''@;'; put 'put ''dD1mdW5jdGlvbihPLHope3JldHVybiB0aGlzLnBvaW50KEIudG9BcnJheShPLHopLDEpfSx3LnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbihPLHope3JldHVybiBuZXcgUCh0aGlzLE8seil9LHcucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24oTyl7cmV0dXJuIFAuZnJvbUpTT04o''@;'; put 'put ''dGhpcyxPKX0sUC5wcm90b3R5cGUucHJlY29tcHV0ZT1mdW5jdGlvbigpe30sUC5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmdldFgoKS50b0FycmF5KCJiZSIsdGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSl9LFAuZnJvbUpTT049ZnVuY3Rpb24oTyx6KXtyZXR1''@;'; put 'put ''cm4gbmV3IFAoTyx6WzBdLHpbMV18fE8ub25lKX0sUC5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT8iPEVDIFBvaW50IEluZmluaXR5PiI6IjxFQyBQb2ludCB4OiAiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIiB6OiAiK3Ro''@;'; put 'put ''aXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrIj4ifSxQLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnouY21wbigwKX0sUC5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7dmFyIHo9dGhpcy54LnJlZEFkZCh0aGlzLnopLnJlZFNxcigpLEw9dGhp''@;'; put 'put ''cy54LnJlZFN1Yih0aGlzLnopLnJlZFNxcigpLEs9ei5yZWRTdWIoTCksVT16LnJlZE11bChMKSxXPUsucmVkTXVsKEwucmVkQWRkKHRoaXMuY3VydmUuYTI0LnJlZE11bChLKSkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFUsVyl9LFAucHJvdG90eXBlLmFkZD1mdW5jdGlvbigpe3Rocm93''@;'; put 'put ''IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LFAucHJvdG90eXBlLmRpZmZBZGQ9ZnVuY3Rpb24oTyx6KXt2YXIgTj10aGlzLngucmVkQWRkKHRoaXMueiksTD10aGlzLngucmVkU3ViKHRoaXMueiksSz1PLngucmVkQWRkKE8ueiksVz1PLngucmVkU3Vi''@;'; put 'put ''KE8ueikucmVkTXVsKE4pLFk9Sy5yZWRNdWwoTCksWD16LnoucmVkTXVsKFcucmVkQWRkKFkpLnJlZFNxcigpKSxlZT16LngucmVkTXVsKFcucmVkSVN1YihZKS5yZWRTcXIoKSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQoWCxlZSl9LFAucHJvdG90eXBlLm11bD1mdW5jdGlvbihPKXtmb3Io''@;'; put 'put ''dmFyIHo9Ty5jbG9uZSgpLE49dGhpcyxMPXRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKSxVPVtdOzAhPT16LmNtcG4oMCk7ei5pdXNocm4oMSkpVS5wdXNoKHouYW5kbG4oMSkpO2Zvcih2YXIgVz1VLmxlbmd0aC0xO1c+PTA7Vy0tKTA9PT1VW1ddPyhOPU4uZGlmZkFkZChMLHRoaXMpLEw9''@;'; put 'put ''TC5kYmwoKSk6KEw9Ti5kaWZmQWRkKEwsdGhpcyksTj1OLmRibCgpKTtyZXR1cm4gTH0sUC5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmUiKX0sUC5wcm90b3R5cGUuanVtbEFkZD1mdW5jdGlvbigp''@;'; put 'put ''e3Rocm93IG5ldyBFcnJvcigiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlIil9LFAucHJvdG90eXBlLmVxPWZ1bmN0aW9uKE8pe3JldHVybiAwPT09dGhpcy5nZXRYKCkuY21wKE8uZ2V0WCgpKX0sUC5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMu''@;'; put 'put ''eD10aGlzLngucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzfSxQLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy54LmZyb21SZWQoKX19LDY4MDc1Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3Zh''@;'; put 'put ''ciBJPV8oMzEzNikseT1fKDg4NzIzKSxnPV8oNzE5OTMpLEI9Xyg5ODgyOCksdz1JLmFzc2VydDtmdW5jdGlvbiBQKHope0IuY2FsbCh0aGlzLCJzaG9ydCIseiksdGhpcy5hPW5ldyB5KHouYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgeSh6LmIsMTYpLnRvUmVkKHRoaXMucmVk''@;'; put 'put ''KSx0aGlzLnRpbnY9dGhpcy50d28ucmVkSW52bSgpLHRoaXMuemVyb0E9MD09PXRoaXMuYS5mcm9tUmVkKCkuY21wbigwKSx0aGlzLnRocmVlQT0wPT09dGhpcy5hLmZyb21SZWQoKS5zdWIodGhpcy5wKS5jbXBuKC0zKSx0aGlzLmVuZG89dGhpcy5fZ2V0RW5kb21vcnBoaXNtKHopLHRoaXMu''@;'; put 'put ''X2VuZG9XbmFmVDE9bmV3IEFycmF5KDQpLHRoaXMuX2VuZG9XbmFmVDI9bmV3IEFycmF5KDQpfWZ1bmN0aW9uIEYoeixOLEwsSyl7Qi5CYXNlUG9pbnQuY2FsbCh0aGlzLHosImFmZmluZSIpLG51bGw9PT1OJiZudWxsPT09TD8odGhpcy54PW51bGwsdGhpcy55PW51bGwsdGhpcy5pbmY9ITAp''@;'; put 'put ''Oih0aGlzLng9bmV3IHkoTiwxNiksdGhpcy55PW5ldyB5KEwsMTYpLEsmJih0aGlzLnguZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpLHRoaXMueS5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55''@;'; put 'put ''LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLmluZj0hMSl9ZnVuY3Rpb24gTyh6LE4sTCxLKXtCLkJhc2VQb2ludC5jYWxsKHRoaXMseiwiamFjb2JpYW4iKSxudWxsPT09TiYmbnVsbD09PUwmJm51bGw9PT1LPyh0aGlzLng9dGhpcy5jdXJ2ZS5vbmUs''@;'; put 'put ''dGhpcy55PXRoaXMuY3VydmUub25lLHRoaXMuej1uZXcgeSgwKSk6KHRoaXMueD1uZXcgeShOLDE2KSx0aGlzLnk9bmV3IHkoTCwxNiksdGhpcy56PW5ldyB5KEssMTYpKSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlz''@;'; put 'put ''Lnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnpPbmU9dGhpcy56PT09dGhpcy5jdXJ2ZS5vbmV9ZyhQLEIpLHVlLmV4cG9ydHM9UCxQLnByb3RvdHlwZS5fZ2V0RW5kb21vcnBoaXNt''@;'; put 'put ''PWZ1bmN0aW9uKE4pe2lmKHRoaXMuemVyb0EmJnRoaXMuZyYmdGhpcy5uJiYxPT09dGhpcy5wLm1vZG4oMykpe3ZhciBMLEs7aWYoTi5iZXRhKUw9bmV3IHkoTi5iZXRhLDE2KS50b1JlZCh0aGlzLnJlZCk7ZWxzZXt2YXIgVT10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5wKTtMPShMPVVbMF0u''@;'; put 'put ''Y21wKFVbMV0pPDA/VVswXTpVWzFdKS50b1JlZCh0aGlzLnJlZCl9aWYoTi5sYW1iZGEpSz1uZXcgeShOLmxhbWJkYSwxNik7ZWxzZXt2YXIgVz10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5uKTswPT09dGhpcy5nLm11bChXWzBdKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoTCkpP0s9V1swXTp3''@;'; put 'put ''KDA9PT10aGlzLmcubXVsKEs9V1sxXSkueC5jbXAodGhpcy5nLngucmVkTXVsKEwpKSl9cmV0dXJue2JldGE6TCxsYW1iZGE6SyxiYXNpczpOLmJhc2lzP04uYmFzaXMubWFwKGZ1bmN0aW9uKFgpe3JldHVybnthOm5ldyB5KFguYSwxNiksYjpuZXcgeShYLmIsMTYpfX0pOnRoaXMuX2dldEVu''@;'; put 'put ''ZG9CYXNpcyhLKX19fSxQLnByb3RvdHlwZS5fZ2V0RW5kb1Jvb3RzPWZ1bmN0aW9uKE4pe3ZhciBMPU49PT10aGlzLnA/dGhpcy5yZWQ6eS5tb250KE4pLEs9bmV3IHkoMikudG9SZWQoTCkucmVkSW52bSgpLFU9Sy5yZWROZWcoKSxXPW5ldyB5KDMpLnRvUmVkKEwpLnJlZE5lZygpLnJlZFNx''@;'; put 'put ''cnQoKS5yZWRNdWwoSyk7cmV0dXJuW1UucmVkQWRkKFcpLmZyb21SZWQoKSxVLnJlZFN1YihXKS5mcm9tUmVkKCldfSxQLnByb3RvdHlwZS5fZ2V0RW5kb0Jhc2lzPWZ1bmN0aW9uKE4pe2Zvcih2YXIgSixyZSxpZSxsZSxtZSxfZSxUZSx6ZSxWLEw9dGhpcy5uLnVzaHJuKE1hdGguZmxvb3Io''@;'; put 'put ''dGhpcy5uLmJpdExlbmd0aCgpLzIpKSxLPU4sVT10aGlzLm4uY2xvbmUoKSxXPW5ldyB5KDEpLFk9bmV3IHkoMCksWD1uZXcgeSgwKSxlZT1uZXcgeSgxKSxTZT0wOzAhPT1LLmNtcG4oMCk7KXt2YXIgcD1VLmRpdihLKTt6ZT1VLnN1YihwLm11bChLKSksVj1YLnN1YihwLm11bChXKSk7dmFy''@;'; put 'put ''IGI9ZWUuc3ViKHAubXVsKFkpKTtpZighaWUmJnplLmNtcChMKTwwKUo9VGUubmVnKCkscmU9VyxpZT16ZS5uZWcoKSxsZT1WO2Vsc2UgaWYoaWUmJjI9PSsrU2UpYnJlYWs7VGU9emUsVT1LLEs9emUsWD1XLFc9VixlZT1ZLFk9Yn1tZT16ZS5uZWcoKSxfZT1WO3ZhciB4PWllLnNxcigpLmFk''@;'; put 'put ''ZChsZS5zcXIoKSk7cmV0dXJuIG1lLnNxcigpLmFkZChfZS5zcXIoKSkuY21wKHgpPj0wJiYobWU9SixfZT1yZSksaWUubmVnYXRpdmUmJihpZT1pZS5uZWcoKSxsZT1sZS5uZWcoKSksbWUubmVnYXRpdmUmJihtZT1tZS5uZWcoKSxfZT1fZS5uZWcoKSksW3thOmllLGI6bGV9LHthOm1lLGI6''@;'; put 'put ''X2V9XX0sUC5wcm90b3R5cGUuX2VuZG9TcGxpdD1mdW5jdGlvbihOKXt2YXIgTD10aGlzLmVuZG8uYmFzaXMsSz1MWzBdLFU9TFsxXSxXPVUuYi5tdWwoTikuZGl2Um91bmQodGhpcy5uKSxZPUsuYi5uZWcoKS5tdWwoTikuZGl2Um91bmQodGhpcy5uKSxYPVcubXVsKEsuYSksZWU9WS5tdWwo''@;'; put 'put ''VS5hKSxKPVcubXVsKEsuYikscmU9WS5tdWwoVS5iKTtyZXR1cm57azE6Ti5zdWIoWCkuc3ViKGVlKSxrMjpKLmFkZChyZSkubmVnKCl9fSxQLnByb3RvdHlwZS5wb2ludEZyb21YPWZ1bmN0aW9uKE4sTCl7KE49bmV3IHkoTiwxNikpLnJlZHx8KE49Ti50b1JlZCh0aGlzLnJlZCkpO3ZhciBL''@;'; put 'put ''PU4ucmVkU3FyKCkucmVkTXVsKE4pLnJlZElBZGQoTi5yZWRNdWwodGhpcy5hKSkucmVkSUFkZCh0aGlzLmIpLFU9Sy5yZWRTcXJ0KCk7aWYoMCE9PVUucmVkU3FyKCkucmVkU3ViKEspLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcigiaW52YWxpZCBwb2ludCIpO3ZhciBXPVUuZnJv''@;'; put 'put ''bVJlZCgpLmlzT2RkKCk7cmV0dXJuKEwmJiFXfHwhTCYmVykmJihVPVUucmVkTmVnKCkpLHRoaXMucG9pbnQoTixVKX0sUC5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oTil7aWYoTi5pbmYpcmV0dXJuITA7dmFyIEw9Ti54LEs9Ti55LFU9dGhpcy5hLnJlZE11bChMKSxXPUwucmVkU3Fy''@;'; put 'put ''KCkucmVkTXVsKEwpLnJlZElBZGQoVSkucmVkSUFkZCh0aGlzLmIpO3JldHVybiAwPT09Sy5yZWRTcXIoKS5yZWRJU3ViKFcpLmNtcG4oMCl9LFAucHJvdG90eXBlLl9lbmRvV25hZk11bEFkZD1mdW5jdGlvbihOLEwsSyl7Zm9yKHZhciBVPXRoaXMuX2VuZG9XbmFmVDEsVz10aGlzLl9lbmRv''@;'; put 'put ''V25hZlQyLFk9MDtZPE4ubGVuZ3RoO1krKyl7dmFyIFg9dGhpcy5fZW5kb1NwbGl0KExbWV0pLGVlPU5bWV0sSj1lZS5fZ2V0QmV0YSgpO1guazEubmVnYXRpdmUmJihYLmsxLmluZWcoKSxlZT1lZS5uZWcoITApKSxYLmsyLm5lZ2F0aXZlJiYoWC5rMi5pbmVnKCksSj1KLm5lZyghMCkpLFVb''@;'; put 'put ''MipZXT1lZSxVWzIqWSsxXT1KLFdbMipZXT1YLmsxLFdbMipZKzFdPVguazJ9Zm9yKHZhciByZT10aGlzLl93bmFmTXVsQWRkKDEsVSxXLDIqWSxLKSxpZT0wO2llPDIqWTtpZSsrKVVbaWVdPW51bGwsV1tpZV09bnVsbDtyZXR1cm4gcmV9LGcoRixCLkJhc2VQb2ludCksUC5wcm90b3R5cGUu''@;'; put 'put ''cG9pbnQ9ZnVuY3Rpb24oTixMLEspe3JldHVybiBuZXcgRih0aGlzLE4sTCxLKX0sUC5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbihOLEwpe3JldHVybiBGLmZyb21KU09OKHRoaXMsTixMKX0sRi5wcm90b3R5cGUuX2dldEJldGE9ZnVuY3Rpb24oKXtpZih0aGlzLmN1cnZlLmVu''@;'; put 'put ''ZG8pe3ZhciBOPXRoaXMucHJlY29tcHV0ZWQ7aWYoTiYmTi5iZXRhKXJldHVybiBOLmJldGE7dmFyIEw9dGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngucmVkTXVsKHRoaXMuY3VydmUuZW5kby5iZXRhKSx0aGlzLnkpO2lmKE4pe3ZhciBLPXRoaXMuY3VydmUsVT1mdW5jdGlvbihXKXtyZXR1cm4g''@;'; put 'put ''Sy5wb2ludChXLngucmVkTXVsKEsuZW5kby5iZXRhKSxXLnkpfTtOLmJldGE9TCxMLnByZWNvbXB1dGVkPXtiZXRhOm51bGwsbmFmOk4ubmFmJiZ7d25kOk4ubmFmLnduZCxwb2ludHM6Ti5uYWYucG9pbnRzLm1hcChVKX0sZG91YmxlczpOLmRvdWJsZXMmJntzdGVwOk4uZG91Ymxlcy5zdGVw''@;'; put 'put ''LHBvaW50czpOLmRvdWJsZXMucG9pbnRzLm1hcChVKX19fXJldHVybiBMfX0sRi5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJlY29tcHV0ZWQ/W3RoaXMueCx0aGlzLnksdGhpcy5wcmVjb21wdXRlZCYme2RvdWJsZXM6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVz''@;'; put 'put ''JiZ7c3RlcDp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMuc3RlcCxwb2ludHM6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnBvaW50cy5zbGljZSgxKX0sbmFmOnRoaXMucHJlY29tcHV0ZWQubmFmJiZ7d25kOnRoaXMucHJlY29tcHV0ZWQubmFmLnduZCxwb2ludHM6dGhpcy5wcmVjb21wdXRl''@;'; put 'put ''ZC5uYWYucG9pbnRzLnNsaWNlKDEpfX1dOlt0aGlzLngsdGhpcy55XX0sRi5mcm9tSlNPTj1mdW5jdGlvbihOLEwsSyl7InN0cmluZyI9PXR5cGVvZiBMJiYoTD1KU09OLnBhcnNlKEwpKTt2YXIgVT1OLnBvaW50KExbMF0sTFsxXSxLKTtpZighTFsyXSlyZXR1cm4gVTtmdW5jdGlvbiBXKFgp''@;'; put 'put ''e3JldHVybiBOLnBvaW50KFhbMF0sWFsxXSxLKX12YXIgWT1MWzJdO3JldHVybiBVLnByZWNvbXB1dGVkPXtiZXRhOm51bGwsZG91YmxlczpZLmRvdWJsZXMmJntzdGVwOlkuZG91Ymxlcy5zdGVwLHBvaW50czpbVV0uY29uY2F0KFkuZG91Ymxlcy5wb2ludHMubWFwKFcpKX0sbmFmOlkubmFm''@;'; put 'put ''JiZ7d25kOlkubmFmLnduZCxwb2ludHM6W1VdLmNvbmNhdChZLm5hZi5wb2ludHMubWFwKFcpKX19LFV9LEYucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/IjxFQyBQb2ludCBJbmZpbml0eT4iOiI8RUMgUG9pbnQgeDogIit0aGlzLnguZnJv''@;'; put 'put ''bVJlZCgpLnRvU3RyaW5nKDE2LDIpKyIgeTogIit0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpKyI+In0sRi5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmluZn0sRi5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKE4pe2lmKHRoaXMuaW5mKXJldHVybiBO''@;'; put 'put ''O2lmKE4uaW5mKXJldHVybiB0aGlzO2lmKHRoaXMuZXEoTikpcmV0dXJuIHRoaXMuZGJsKCk7aWYodGhpcy5uZWcoKS5lcShOKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO2lmKDA9PT10aGlzLnguY21wKE4ueCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxs''@;'; put 'put ''KTt2YXIgTD10aGlzLnkucmVkU3ViKE4ueSk7MCE9PUwuY21wbigwKSYmKEw9TC5yZWRNdWwodGhpcy54LnJlZFN1YihOLngpLnJlZEludm0oKSkpO3ZhciBLPUwucmVkU3FyKCkucmVkSVN1Yih0aGlzLngpLnJlZElTdWIoTi54KSxVPUwucmVkTXVsKHRoaXMueC5yZWRTdWIoSykpLnJlZElT''@;'; put 'put ''dWIodGhpcy55KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChLLFUpfSxGLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgTj10aGlzLnkucmVkQWRkKHRoaXMueSk7aWYoMD09PU4uY21wbigwKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxs''@;'; put 'put ''LG51bGwpO3ZhciBMPXRoaXMuY3VydmUuYSxLPXRoaXMueC5yZWRTcXIoKSxVPU4ucmVkSW52bSgpLFc9Sy5yZWRBZGQoSykucmVkSUFkZChLKS5yZWRJQWRkKEwpLnJlZE11bChVKSxZPVcucmVkU3FyKCkucmVkSVN1Yih0aGlzLngucmVkQWRkKHRoaXMueCkpLFg9Vy5yZWRNdWwodGhpcy54''@;'; put 'put ''LnJlZFN1YihZKSkucmVkSVN1Yih0aGlzLnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KFksWCl9LEYucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54LmZyb21SZWQoKX0sRi5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnkuZnJvbVJlZCgpfSxG''@;'; put 'put ''LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24oTil7cmV0dXJuIE49bmV3IHkoTiwxNiksdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLl9oYXNEb3VibGVzKE4pP3RoaXMuY3VydmUuX2ZpeGVkTmFmTXVsKHRoaXMsTik6dGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRk''@;'; put 'put ''KFt0aGlzXSxbTl0pOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyxOKX0sRi5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKE4sTCxLKXt2YXIgVT1bdGhpcyxMXSxXPVtOLEtdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoVSxXKTp0aGlzLmN1cnZl''@;'; put 'put ''Ll93bmFmTXVsQWRkKDEsVSxXLDIpfSxGLnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKE4sTCxLKXt2YXIgVT1bdGhpcyxMXSxXPVtOLEtdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoVSxXLCEwKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEs''@;'; put 'put ''VSxXLDIsITApfSxGLnByb3RvdHlwZS5lcT1mdW5jdGlvbihOKXtyZXR1cm4gdGhpcz09PU58fHRoaXMuaW5mPT09Ti5pbmYmJih0aGlzLmluZnx8MD09PXRoaXMueC5jbXAoTi54KSYmMD09PXRoaXMueS5jbXAoTi55KSl9LEYucHJvdG90eXBlLm5lZz1mdW5jdGlvbihOKXtpZih0aGlzLmlu''@;'; put 'put ''ZilyZXR1cm4gdGhpczt2YXIgTD10aGlzLmN1cnZlLnBvaW50KHRoaXMueCx0aGlzLnkucmVkTmVnKCkpO2lmKE4mJnRoaXMucHJlY29tcHV0ZWQpe3ZhciBLPXRoaXMucHJlY29tcHV0ZWQsVT1mdW5jdGlvbihXKXtyZXR1cm4gVy5uZWcoKX07TC5wcmVjb21wdXRlZD17bmFmOksubmFmJiZ7''@;'; put 'put ''d25kOksubmFmLnduZCxwb2ludHM6Sy5uYWYucG9pbnRzLm1hcChVKX0sZG91YmxlczpLLmRvdWJsZXMmJntzdGVwOksuZG91Ymxlcy5zdGVwLHBvaW50czpLLmRvdWJsZXMucG9pbnRzLm1hcChVKX19fXJldHVybiBMfSxGLnByb3RvdHlwZS50b0o9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5p''@;'; put 'put ''bmY/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuY3VydmUuanBvaW50KHRoaXMueCx0aGlzLnksdGhpcy5jdXJ2ZS5vbmUpfSxnKE8sQi5CYXNlUG9pbnQpLFAucHJvdG90eXBlLmpwb2ludD1mdW5jdGlvbihOLEwsSyl7cmV0dXJuIG5ldyBPKHRoaXMsTixMLEspfSxP''@;'; put 'put ''LnByb3RvdHlwZS50b1A9ZnVuY3Rpb24oKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBOPXRoaXMuei5yZWRJbnZtKCksTD1OLnJlZFNxcigpLEs9dGhpcy54LnJlZE11bChMKSxVPXRoaXMueS5yZWRNdWwoTCkucmVkTXVsKE4p''@;'; put 'put ''O3JldHVybiB0aGlzLmN1cnZlLnBvaW50KEssVSl9LE8ucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsdGhpcy55LnJlZE5lZygpLHRoaXMueil9LE8ucHJvdG90eXBlLmFkZD1mdW5jdGlvbihOKXtpZih0aGlzLmlzSW5maW5pdHkoKSly''@;'; put 'put ''ZXR1cm4gTjtpZihOLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpczt2YXIgTD1OLnoucmVkU3FyKCksSz10aGlzLnoucmVkU3FyKCksVT10aGlzLngucmVkTXVsKEwpLFc9Ti54LnJlZE11bChLKSxZPXRoaXMueS5yZWRNdWwoTC5yZWRNdWwoTi56KSksWD1OLnkucmVkTXVsKEsucmVkTXVsKHRo''@;'; put 'put ''aXMueikpLGVlPVUucmVkU3ViKFcpLEo9WS5yZWRTdWIoWCk7aWYoMD09PWVlLmNtcG4oMCkpcmV0dXJuIDAhPT1KLmNtcG4oMCk/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuZGJsKCk7dmFyIHJlPWVlLnJlZFNxcigpLGllPXJlLnJlZE11bChlZSksbGU9VS5yZWRN''@;'; put 'put ''dWwocmUpLG1lPUoucmVkU3FyKCkucmVkSUFkZChpZSkucmVkSVN1YihsZSkucmVkSVN1YihsZSksX2U9Si5yZWRNdWwobGUucmVkSVN1YihtZSkpLnJlZElTdWIoWS5yZWRNdWwoaWUpKSxUZT10aGlzLnoucmVkTXVsKE4ueikucmVkTXVsKGVlKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQo''@;'; put 'put ''bWUsX2UsVGUpfSxPLnByb3RvdHlwZS5taXhlZEFkZD1mdW5jdGlvbihOKXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gTi50b0ooKTtpZihOLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpczt2YXIgTD10aGlzLnoucmVkU3FyKCksSz10aGlzLngsVT1OLngucmVkTXVsKEwpLFc9dGhpcy55''@;'; put 'put ''LFk9Ti55LnJlZE11bChMKS5yZWRNdWwodGhpcy56KSxYPUsucmVkU3ViKFUpLGVlPVcucmVkU3ViKFkpO2lmKDA9PT1YLmNtcG4oMCkpcmV0dXJuIDAhPT1lZS5jbXBuKDApP3RoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTp0aGlzLmRibCgpO3ZhciBKPVgucmVkU3FyKCkscmU9''@;'; put 'put ''Si5yZWRNdWwoWCksaWU9Sy5yZWRNdWwoSiksbGU9ZWUucmVkU3FyKCkucmVkSUFkZChyZSkucmVkSVN1YihpZSkucmVkSVN1YihpZSksbWU9ZWUucmVkTXVsKGllLnJlZElTdWIobGUpKS5yZWRJU3ViKFcucmVkTXVsKHJlKSksX2U9dGhpcy56LnJlZE11bChYKTtyZXR1cm4gdGhpcy5jdXJ2''@;'; put 'put ''ZS5qcG9pbnQobGUsbWUsX2UpfSxPLnByb3RvdHlwZS5kYmxwPWZ1bmN0aW9uKE4pe2lmKDA9PT1OKXJldHVybiB0aGlzO2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO2lmKCFOKXJldHVybiB0aGlzLmRibCgpO3ZhciBMO2lmKHRoaXMuY3VydmUuemVyb0F8fHRoaXMuY3VydmUu''@;'; put 'put ''dGhyZWVBKXt2YXIgSz10aGlzO2ZvcihMPTA7TDxOO0wrKylLPUsuZGJsKCk7cmV0dXJuIEt9dmFyIFU9dGhpcy5jdXJ2ZS5hLFc9dGhpcy5jdXJ2ZS50aW52LFk9dGhpcy54LFg9dGhpcy55LGVlPXRoaXMueixKPWVlLnJlZFNxcigpLnJlZFNxcigpLHJlPVgucmVkQWRkKFgpO2ZvcihMPTA7''@;'; put 'put ''TDxOO0wrKyl7dmFyIGllPVkucmVkU3FyKCksbGU9cmUucmVkU3FyKCksbWU9bGUucmVkU3FyKCksX2U9aWUucmVkQWRkKGllKS5yZWRJQWRkKGllKS5yZWRJQWRkKFUucmVkTXVsKEopKSxUZT1ZLnJlZE11bChsZSksU2U9X2UucmVkU3FyKCkucmVkSVN1YihUZS5yZWRBZGQoVGUpKSx6ZT1U''@;'; put 'put ''ZS5yZWRJU3ViKFNlKSxWPV9lLnJlZE11bCh6ZSk7Vj1WLnJlZElBZGQoVikucmVkSVN1YihtZSk7dmFyIHA9cmUucmVkTXVsKGVlKTtMKzE8TiYmKEo9Si5yZWRNdWwobWUpKSxZPVNlLGVlPXAscmU9Vn1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoWSxyZS5yZWRNdWwoVyksZWUpfSxPLnBy''@;'; put 'put ''b3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLnplcm9BP3RoaXMuX3plcm9EYmwoKTp0aGlzLmN1cnZlLnRocmVlQT90aGlzLl90aHJlZURibCgpOnRoaXMuX2RibCgpfSxPLnByb3RvdHlwZS5femVyb0RibD1mdW5jdGlvbigp''@;'; put 'put ''e3ZhciBOLEwsSztpZih0aGlzLnpPbmUpe3ZhciBVPXRoaXMueC5yZWRTcXIoKSxXPXRoaXMueS5yZWRTcXIoKSxZPVcucmVkU3FyKCksWD10aGlzLngucmVkQWRkKFcpLnJlZFNxcigpLnJlZElTdWIoVSkucmVkSVN1YihZKTtYPVgucmVkSUFkZChYKTt2YXIgZWU9VS5yZWRBZGQoVSkucmVk''@;'; put 'put ''SUFkZChVKSxKPWVlLnJlZFNxcigpLnJlZElTdWIoWCkucmVkSVN1YihYKSxyZT1ZLnJlZElBZGQoWSk7cmU9KHJlPXJlLnJlZElBZGQocmUpKS5yZWRJQWRkKHJlKSxOPUosTD1lZS5yZWRNdWwoWC5yZWRJU3ViKEopKS5yZWRJU3ViKHJlKSxLPXRoaXMueS5yZWRBZGQodGhpcy55KX1lbHNl''@;'; put 'put ''e3ZhciBpZT10aGlzLngucmVkU3FyKCksbGU9dGhpcy55LnJlZFNxcigpLG1lPWxlLnJlZFNxcigpLF9lPXRoaXMueC5yZWRBZGQobGUpLnJlZFNxcigpLnJlZElTdWIoaWUpLnJlZElTdWIobWUpO19lPV9lLnJlZElBZGQoX2UpO3ZhciBUZT1pZS5yZWRBZGQoaWUpLnJlZElBZGQoaWUpLFNl''@;'; put 'put ''PVRlLnJlZFNxcigpLHplPW1lLnJlZElBZGQobWUpO3plPSh6ZT16ZS5yZWRJQWRkKHplKSkucmVkSUFkZCh6ZSksTj1TZS5yZWRJU3ViKF9lKS5yZWRJU3ViKF9lKSxMPVRlLnJlZE11bChfZS5yZWRJU3ViKE4pKS5yZWRJU3ViKHplKSxLPShLPXRoaXMueS5yZWRNdWwodGhpcy56KSkucmVk''@;'; put 'put ''SUFkZChLKX1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoTixMLEspfSxPLnByb3RvdHlwZS5fdGhyZWVEYmw9ZnVuY3Rpb24oKXt2YXIgTixMLEs7aWYodGhpcy56T25lKXt2YXIgVT10aGlzLngucmVkU3FyKCksVz10aGlzLnkucmVkU3FyKCksWT1XLnJlZFNxcigpLFg9dGhpcy54LnJlZEFk''@;'; put 'put ''ZChXKS5yZWRTcXIoKS5yZWRJU3ViKFUpLnJlZElTdWIoWSk7WD1YLnJlZElBZGQoWCk7dmFyIGVlPVUucmVkQWRkKFUpLnJlZElBZGQoVSkucmVkSUFkZCh0aGlzLmN1cnZlLmEpLEo9ZWUucmVkU3FyKCkucmVkSVN1YihYKS5yZWRJU3ViKFgpO049Sjt2YXIgcmU9WS5yZWRJQWRkKFkpO3Jl''@;'; put 'put ''PShyZT1yZS5yZWRJQWRkKHJlKSkucmVkSUFkZChyZSksTD1lZS5yZWRNdWwoWC5yZWRJU3ViKEopKS5yZWRJU3ViKHJlKSxLPXRoaXMueS5yZWRBZGQodGhpcy55KX1lbHNle3ZhciBpZT10aGlzLnoucmVkU3FyKCksbGU9dGhpcy55LnJlZFNxcigpLG1lPXRoaXMueC5yZWRNdWwobGUpLF9l''@;'; put 'put ''PXRoaXMueC5yZWRTdWIoaWUpLnJlZE11bCh0aGlzLngucmVkQWRkKGllKSk7X2U9X2UucmVkQWRkKF9lKS5yZWRJQWRkKF9lKTt2YXIgVGU9bWUucmVkSUFkZChtZSksU2U9KFRlPVRlLnJlZElBZGQoVGUpKS5yZWRBZGQoVGUpO049X2UucmVkU3FyKCkucmVkSVN1YihTZSksSz10aGlzLnku''@;'; put 'put ''cmVkQWRkKHRoaXMueikucmVkU3FyKCkucmVkSVN1YihsZSkucmVkSVN1YihpZSk7dmFyIHplPWxlLnJlZFNxcigpO3plPSh6ZT0oemU9emUucmVkSUFkZCh6ZSkpLnJlZElBZGQoemUpKS5yZWRJQWRkKHplKSxMPV9lLnJlZE11bChUZS5yZWRJU3ViKE4pKS5yZWRJU3ViKHplKX1yZXR1cm4g''@;'; put 'put ''dGhpcy5jdXJ2ZS5qcG9pbnQoTixMLEspfSxPLnByb3RvdHlwZS5fZGJsPWZ1bmN0aW9uKCl7dmFyIE49dGhpcy5jdXJ2ZS5hLEw9dGhpcy54LEs9dGhpcy55LFU9dGhpcy56LFc9VS5yZWRTcXIoKS5yZWRTcXIoKSxZPUwucmVkU3FyKCksWD1LLnJlZFNxcigpLGVlPVkucmVkQWRkKFkpLnJl''@;'; put 'put ''ZElBZGQoWSkucmVkSUFkZChOLnJlZE11bChXKSksSj1MLnJlZEFkZChMKSxyZT0oSj1KLnJlZElBZGQoSikpLnJlZE11bChYKSxpZT1lZS5yZWRTcXIoKS5yZWRJU3ViKHJlLnJlZEFkZChyZSkpLGxlPXJlLnJlZElTdWIoaWUpLG1lPVgucmVkU3FyKCk7bWU9KG1lPShtZT1tZS5yZWRJQWRk''@;'; put 'put ''KG1lKSkucmVkSUFkZChtZSkpLnJlZElBZGQobWUpO3ZhciBfZT1lZS5yZWRNdWwobGUpLnJlZElTdWIobWUpLFRlPUsucmVkQWRkKEspLnJlZE11bChVKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoaWUsX2UsVGUpfSxPLnByb3RvdHlwZS50cnBsPWZ1bmN0aW9uKCl7aWYoIXRoaXMuY3Vy''@;'; put 'put ''dmUuemVyb0EpcmV0dXJuIHRoaXMuZGJsKCkuYWRkKHRoaXMpO3ZhciBOPXRoaXMueC5yZWRTcXIoKSxMPXRoaXMueS5yZWRTcXIoKSxLPXRoaXMuei5yZWRTcXIoKSxVPUwucmVkU3FyKCksVz1OLnJlZEFkZChOKS5yZWRJQWRkKE4pLFk9Vy5yZWRTcXIoKSxYPXRoaXMueC5yZWRBZGQoTCku''@;'; put 'put ''cmVkU3FyKCkucmVkSVN1YihOKS5yZWRJU3ViKFUpLGVlPShYPShYPShYPVgucmVkSUFkZChYKSkucmVkQWRkKFgpLnJlZElBZGQoWCkpLnJlZElTdWIoWSkpLnJlZFNxcigpLEo9VS5yZWRJQWRkKFUpO0o9KEo9KEo9Si5yZWRJQWRkKEopKS5yZWRJQWRkKEopKS5yZWRJQWRkKEopO3ZhciBy''@;'; put 'put ''ZT1XLnJlZElBZGQoWCkucmVkU3FyKCkucmVkSVN1YihZKS5yZWRJU3ViKGVlKS5yZWRJU3ViKEopLGllPUwucmVkTXVsKHJlKTtpZT0oaWU9aWUucmVkSUFkZChpZSkpLnJlZElBZGQoaWUpO3ZhciBsZT10aGlzLngucmVkTXVsKGVlKS5yZWRJU3ViKGllKTtsZT0obGU9bGUucmVkSUFkZChs''@;'; put 'put ''ZSkpLnJlZElBZGQobGUpO3ZhciBtZT10aGlzLnkucmVkTXVsKHJlLnJlZE11bChKLnJlZElTdWIocmUpKS5yZWRJU3ViKFgucmVkTXVsKGVlKSkpO21lPShtZT0obWU9bWUucmVkSUFkZChtZSkpLnJlZElBZGQobWUpKS5yZWRJQWRkKG1lKTt2YXIgX2U9dGhpcy56LnJlZEFkZChYKS5yZWRT''@;'; put 'put ''cXIoKS5yZWRJU3ViKEspLnJlZElTdWIoZWUpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChsZSxtZSxfZSl9LE8ucHJvdG90eXBlLm11bD1mdW5jdGlvbihOLEwpe3JldHVybiBOPW5ldyB5KE4sTCksdGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLE4pfSxPLnByb3RvdHlwZS5lcT1mdW5jdGlv''@;'; put 'put ''bihOKXtpZigiYWZmaW5lIj09PU4udHlwZSlyZXR1cm4gdGhpcy5lcShOLnRvSigpKTtpZih0aGlzPT09TilyZXR1cm4hMDt2YXIgTD10aGlzLnoucmVkU3FyKCksSz1OLnoucmVkU3FyKCk7aWYoMCE9PXRoaXMueC5yZWRNdWwoSykucmVkSVN1YihOLngucmVkTXVsKEwpKS5jbXBuKDApKXJl''@;'; put 'put ''dHVybiExO3ZhciBVPUwucmVkTXVsKHRoaXMueiksVz1LLnJlZE11bChOLnopO3JldHVybiAwPT09dGhpcy55LnJlZE11bChXKS5yZWRJU3ViKE4ueS5yZWRNdWwoVSkpLmNtcG4oMCl9LE8ucHJvdG90eXBlLmVxWFRvUD1mdW5jdGlvbihOKXt2YXIgTD10aGlzLnoucmVkU3FyKCksSz1OLnRv''@;'; put 'put ''UmVkKHRoaXMuY3VydmUucmVkKS5yZWRNdWwoTCk7aWYoMD09PXRoaXMueC5jbXAoSykpcmV0dXJuITA7Zm9yKHZhciBVPU4uY2xvbmUoKSxXPXRoaXMuY3VydmUucmVkTi5yZWRNdWwoTCk7Oyl7aWYoVS5pYWRkKHRoaXMuY3VydmUubiksVS5jbXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4h''@;'; put 'put ''MTtpZihLLnJlZElBZGQoVyksMD09PXRoaXMueC5jbXAoSykpcmV0dXJuITB9fSxPLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpPyI8RUMgSlBvaW50IEluZmluaXR5PiI6IjxFQyBKUG9pbnQgeDogIit0aGlzLngudG9TdHJpbmcoMTYsMikr''@;'; put 'put ''IiB5OiAiK3RoaXMueS50b1N0cmluZygxNiwyKSsiIHo6ICIrdGhpcy56LnRvU3RyaW5nKDE2LDIpKyI+In0sTy5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy56LmNtcG4oMCl9fSwyMzQwMToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgTyxJPXEs''@;'; put 'put ''eT1fKDUyNTI5KSxnPV8oODcyOSksdz1fKDMxMzYpLmFzc2VydDtmdW5jdGlvbiBQKHope3RoaXMuY3VydmU9InNob3J0Ij09PXoudHlwZT9uZXcgZy5zaG9ydCh6KToiZWR3YXJkcyI9PT16LnR5cGU/bmV3IGcuZWR3YXJkcyh6KTpuZXcgZy5tb250KHopLHRoaXMuZz10aGlzLmN1cnZlLmcs''@;'; put 'put ''dGhpcy5uPXRoaXMuY3VydmUubix0aGlzLmhhc2g9ei5oYXNoLHcodGhpcy5nLnZhbGlkYXRlKCksIkludmFsaWQgY3VydmUiKSx3KHRoaXMuZy5tdWwodGhpcy5uKS5pc0luZmluaXR5KCksIkludmFsaWQgY3VydmUsIEcqTiAhPSBPIil9ZnVuY3Rpb24gRih6LE4pe09iamVjdC5kZWZpbmVQ''@;'; put 'put ''cm9wZXJ0eShJLHose2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciBMPW5ldyBQKE4pO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoSSx6LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpMfSksTH19KX1JLlByZXNldEN1cnZl''@;'; put 'put ''PVAsRigicDE5MiIse3R5cGU6InNob3J0IixwcmltZToicDE5MiIscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYiLGE6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZjIixiOiI2NDIxMDUx''@;'; put 'put ''OSBlNTljODBlNyAwZmE3ZTlhYiA3MjI0MzA0OSBmZWI4ZGVlYyBjMTQ2YjliMSIsbjoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgOTlkZWY4MzYgMTQ2YmM5YjEgYjRkMjI4MzEiLGhhc2g6eS5zaGEyNTYsZ1JlZDohMSxnOlsiMTg4ZGE4MGUgYjAzMDkwZjYgN2NiZjIwZWIgNDNhMTg4''@;'; put 'put ''MDAgZjRmZjBhZmQgODJmZjEwMTIiLCIwNzE5MmI5NSBmZmM4ZGE3OCA2MzEwMTFlZCA2YjI0Y2RkNSA3M2Y5NzdhMSAxZTc5NDgxMSJdfSksRigicDIyNCIse3R5cGU6InNob3J0IixwcmltZToicDIyNCIscDoiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAg''@;'; put 'put ''MDAwMDAwMDAgMDAwMDAwMDEiLGE6ImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIixiOiJiNDA1MGE4NSAwYzA0YjNhYiBmNTQxMzI1NiA1MDQ0YjBiNyBkN2JmZDhiYSAyNzBiMzk0MyAyMzU1ZmZiNCIsbjoiZmZmZmZmZmYg''@;'; put 'put ''ZmZmZmZmZmYgZmZmZmZmZmYgZmZmZjE2YTIgZTBiOGYwM2UgMTNkZDI5NDUgNWM1YzJhM2QiLGhhc2g6eS5zaGEyNTYsZ1JlZDohMSxnOlsiYjcwZTBjYmQgNmJiNGJmN2YgMzIxMzkwYjkgNGEwM2MxZDMgNTZjMjExMjIgMzQzMjgwZDYgMTE1YzFkMjEiLCJiZDM3NjM4OCBiNWY3MjNmYiA0''@;'; put 'put ''YzIyZGZlNiBjZDQzNzVhMCA1YTA3NDc2NCA0NGQ1ODE5OSA4NTAwN2UzNCJdfSksRigicDI1NiIse3R5cGU6InNob3J0IixwcmltZTpudWxsLHA6ImZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIixhOiJmZmZm''@;'; put 'put ''ZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYyIsYjoiNWFjNjM1ZDggYWEzYTkzZTcgYjNlYmJkNTUgNzY5ODg2YmMgNjUxZDA2YjAgY2M1M2IwZjYgM2JjZTNjM2UgMjdkMjYwNGIiLG46ImZmZmZmZmZmIDAwMDAwMDAw''@;'; put 'put ''IGZmZmZmZmZmIGZmZmZmZmZmIGJjZTZmYWFkIGE3MTc5ZTg0IGYzYjljYWMyIGZjNjMyNTUxIixoYXNoOnkuc2hhMjU2LGdSZWQ6ITEsZzpbIjZiMTdkMWYyIGUxMmM0MjQ3IGY4YmNlNmU1IDYzYTQ0MGYyIDc3MDM3ZDgxIDJkZWIzM2EwIGY0YTEzOTQ1IGQ4OThjMjk2IiwiNGZlMzQyZTIg''@;'; put 'put ''ZmUxYTdmOWIgOGVlN2ViNGEgN2MwZjllMTYgMmJjZTMzNTcgNmIzMTVlY2UgY2JiNjQwNjggMzdiZjUxZjUiXX0pLEYoInAzODQiLHt0eXBlOiJzaG9ydCIscHJpbWU6bnVsbCxwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZm''@;'; put 'put ''ZiBmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiIsYToiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmMiLGI6ImIz''@;'; put 'put ''MzEyZmE3IGUyM2VlN2U0IDk4OGUwNTZiIGUzZjgyZDE5IDE4MWQ5YzZlIGZlODE0MTEyIDAzMTQwODhmIDUwMTM4NzVhIGM2NTYzOThkIDhhMmVkMTlkIDJhODVjOGVkIGQzZWMyYWVmIixuOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBj''@;'; put 'put ''NzYzNGQ4MSBmNDM3MmRkZiA1ODFhMGRiMiA0OGIwYTc3YSBlY2VjMTk2YSBjY2M1Mjk3MyIsaGFzaDp5LnNoYTM4NCxnUmVkOiExLGc6WyJhYTg3Y2EyMiBiZThiMDUzNyA4ZWIxYzcxZSBmMzIwYWQ3NCA2ZTFkM2I2MiA4YmE3OWI5OCA1OWY3NDFlMCA4MjU0MmEzOCA1NTAyZjI1ZCBiZjU1''@;'; put 'put ''Mjk2YyAzYTU0NWUzOCA3Mjc2MGFiNyIsIjM2MTdkZTRhIDk2MjYyYzZmIDVkOWU5OGJmIDkyOTJkYzI5IGY4ZjQxZGJkIDI4OWExNDdjIGU5ZGEzMTEzIGI1ZjBiOGMwIDBhNjBiMWNlIDFkN2U4MTlkIDdhNDMxZDdjIDkwZWEwZTVmIl19KSxGKCJwNTIxIix7dHlwZToic2hvcnQiLHByaW1l''@;'; put 'put ''Om51bGwscDoiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYiLGE6''@;'; put 'put ''IjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjIixiOiIwMDAwMDA1''@;'; put 'put ''MSA5NTNlYjk2MSA4ZTFjOWExZiA5MjlhMjFhMCBiNjg1NDBlZSBhMmRhNzI1YiA5OWIzMTVmMyBiOGI0ODk5MSA4ZWYxMDllMSA1NjE5Mzk1MSBlYzdlOTM3YiAxNjUyYzBiZCAzYmIxYmYwNyAzNTczZGY4OCAzZDJjMzRmMSBlZjQ1MWZkNCA2YjUwM2YwMCIsbjoiMDAwMDAxZmYgZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmEgNTE4Njg3ODMgYmYyZjk2NmIgN2ZjYzAxNDggZjcwOWE1ZDAgM2JiNWM5YjggODk5YzQ3YWUgYmI2ZmI3MWUgOTEzODY0MDkiLGhhc2g6eS5zaGE1MTIsZ1JlZDohMSxnOlsi''@;'; put 'put ''MDAwMDAwYzYgODU4ZTA2YjcgMDQwNGU5Y2QgOWUzZWNiNjYgMjM5NWI0NDIgOWM2NDgxMzkgMDUzZmI1MjEgZjgyOGFmNjAgNmI0ZDNkYmEgYTE0YjVlNzcgZWZlNzU5MjggZmUxZGMxMjcgYTJmZmE4ZGUgMzM0OGIzYzEgODU2YTQyOWIgZjk3ZTdlMzEgYzJlNWJkNjYiLCIwMDAwMDExOCAz''@;'; put 'put ''OTI5NmE3OCA5YTNiYzAwNCA1YzhhNWZiNCAyYzdkMWJkOSA5OGY1NDQ0OSA1NzliNDQ2OCAxN2FmYmQxNyAyNzNlNjYyYyA5N2VlNzI5OSA1ZWY0MjY0MCBjNTUwYjkwMSAzZmFkMDc2MSAzNTNjNzA4NiBhMjcyYzI0MCA4OGJlOTQ3NiA5ZmQxNjY1MCJdfSksRigiY3VydmUyNTUxOSIse3R5''@;'; put 'put ''cGU6Im1vbnQiLHByaW1lOiJwMjU1MTkiLHA6IjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiLGE6Ijc2ZDA2IixiOiIxIixuOiIxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNk''@;'; put 'put ''NiA1ODEyNjMxYTVjZjVkM2VkIixoYXNoOnkuc2hhMjU2LGdSZWQ6ITEsZzpbIjkiXX0pLEYoImVkMjU1MTkiLHt0eXBlOiJlZHdhcmRzIixwcmltZToicDI1NTE5IixwOiI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVk''@;'; put 'put ''IixhOiItMSIsYzoiMSIsZDoiNTIwMzZjZWUyYjZmZmU3MyA4Y2M3NDA3OTc3NzllODk4IDAwNzAwYTRkNDE0MWQ4YWIgNzVlYjRkY2ExMzU5NzhhMyIsbjoiMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDE0ZGVmOWRlYTJmNzljZDYgNTgxMjYzMWE1Y2Y1ZDNlZCIsaGFzaDp5''@;'; put 'put ''LnNoYTI1NixnUmVkOiExLGc6WyIyMTY5MzZkM2NkNmU1M2ZlYzBhNGUyMzFmZGQ2ZGM1YzY5MmNjNzYwOTUyNWE3YjJjOTU2MmQ2MDhmMjVkNTFhIiwiNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY1OCJdfSk7dHJ5e089Xyg1''@;'; put 'put ''MTQxNil9Y2F0Y2h7Tz12b2lkIDB9Rigic2VjcDI1NmsxIix7dHlwZToic2hvcnQiLHByaW1lOiJrMjU2IixwOiJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIsYToiMCIsYjoiNyIsbjoiZmZmZmZmZmYgZmZm''@;'; put 'put ''ZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgYmFhZWRjZTYgYWY0OGEwM2IgYmZkMjVlOGMgZDAzNjQxNDEiLGg6IjEiLGhhc2g6eS5zaGEyNTYsYmV0YToiN2FlOTZhMmI2NTdjMDcxMDZlNjQ0NzllYWMzNDM0ZTk5Y2YwNDk3NTEyZjU4OTk1YzEzOTZjMjg3MTk1MDFlZSIsbGFtYmRhOiI1MzYz''@;'; put 'put ''YWQ0Y2MwNWMzMGUwYTUyNjFjMDI4ODEyNjQ1YTEyMmUyMmVhMjA4MTY2NzhkZjAyOTY3YzFiMjNiZDcyIixiYXNpczpbe2E6IjMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1IixiOiItZTQ0MzdlZDYwMTBlODgyODZmNTQ3ZmE5MGFiZmU0YzMifSx7YToiMTE0Y2E1MGY3YThlMmYz''@;'; put 'put ''ZjY1N2MxMTA4ZDlkNDRjZmQ4IixiOiIzMDg2ZDIyMWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNSJ9XSxnUmVkOiExLGc6WyI3OWJlNjY3ZWY5ZGNiYmFjNTVhMDYyOTVjZTg3MGIwNzAyOWJmY2RiMmRjZTI4ZDk1OWYyODE1YjE2ZjgxNzk4IiwiNDgzYWRhNzcyNmEzYzQ2NTVkYTRmYmZjMGUx''@;'; put 'put ''MTA4YThmZDE3YjQ0OGE2ODU1NDE5OWM0N2QwOGZmYjEwZDRiOCIsT119KX0sMjkwNDI6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg4ODcyMykseT1fKDMzNTU2KSxnPV8oMzEzNiksQj1fKDIzNDAxKSx3PV8oMzUyOTQpLFA9Zy5hc3NlcnQsRj1fKDYwNTQxKSxPPV8oNDA0ODQp''@;'; put 'put ''O2Z1bmN0aW9uIHooTil7aWYoISh0aGlzIGluc3RhbmNlb2YgeikpcmV0dXJuIG5ldyB6KE4pOyJzdHJpbmciPT10eXBlb2YgTiYmKFAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEIsTiksIlVua25vd24gY3VydmUgIitOKSxOPUJbTl0pLE4gaW5zdGFuY2VvZiBCLlBy''@;'; put 'put ''ZXNldEN1cnZlJiYoTj17Y3VydmU6Tn0pLHRoaXMuY3VydmU9Ti5jdXJ2ZS5jdXJ2ZSx0aGlzLm49dGhpcy5jdXJ2ZS5uLHRoaXMubmg9dGhpcy5uLnVzaHJuKDEpLHRoaXMuZz10aGlzLmN1cnZlLmcsdGhpcy5nPU4uY3VydmUuZyx0aGlzLmcucHJlY29tcHV0ZShOLmN1cnZlLm4uYml0TGVu''@;'; put 'put ''Z3RoKCkrMSksdGhpcy5oYXNoPU4uaGFzaHx8Ti5jdXJ2ZS5oYXNofXVlLmV4cG9ydHM9eix6LnByb3RvdHlwZS5rZXlQYWlyPWZ1bmN0aW9uKEwpe3JldHVybiBuZXcgRih0aGlzLEwpfSx6LnByb3RvdHlwZS5rZXlGcm9tUHJpdmF0ZT1mdW5jdGlvbihMLEspe3JldHVybiBGLmZyb21Qcml2''@;'; put 'put ''YXRlKHRoaXMsTCxLKX0sei5wcm90b3R5cGUua2V5RnJvbVB1YmxpYz1mdW5jdGlvbihMLEspe3JldHVybiBGLmZyb21QdWJsaWModGhpcyxMLEspfSx6LnByb3RvdHlwZS5nZW5LZXlQYWlyPWZ1bmN0aW9uKEwpe0x8fChMPXt9KTtmb3IodmFyIEs9bmV3IHkoe2hhc2g6dGhpcy5oYXNoLHBl''@;'; put 'put ''cnM6TC5wZXJzLHBlcnNFbmM6TC5wZXJzRW5jfHwidXRmOCIsZW50cm9weTpMLmVudHJvcHl8fHcodGhpcy5oYXNoLmhtYWNTdHJlbmd0aCksZW50cm9weUVuYzpMLmVudHJvcHkmJkwuZW50cm9weUVuY3x8InV0ZjgiLG5vbmNlOnRoaXMubi50b0FycmF5KCl9KSxVPXRoaXMubi5ieXRlTGVu''@;'; put 'put ''Z3RoKCksVz10aGlzLm4uc3ViKG5ldyBJKDIpKTs7KXt2YXIgWT1uZXcgSShLLmdlbmVyYXRlKFUpKTtpZighKFkuY21wKFcpPjApKXJldHVybiBZLmlhZGRuKDEpLHRoaXMua2V5RnJvbVByaXZhdGUoWSl9fSx6LnByb3RvdHlwZS5fdHJ1bmNhdGVUb049ZnVuY3Rpb24oTCxLLFUpe3ZhciBX''@;'; put 'put ''O2lmKEkuaXNCTihMKXx8Im51bWJlciI9PXR5cGVvZiBMKVc9KEw9bmV3IEkoTCwxNikpLmJ5dGVMZW5ndGgoKTtlbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgTClXPUwubGVuZ3RoLEw9bmV3IEkoTCwxNik7ZWxzZXt2YXIgWT1MLnRvU3RyaW5nKCk7Vz1ZLmxlbmd0aCsxPj4+MSxMPW5ldyBJ''@;'; put 'put ''KFksMTYpfSJudW1iZXIiIT10eXBlb2YgVSYmKFU9OCpXKTt2YXIgWD1VLXRoaXMubi5iaXRMZW5ndGgoKTtyZXR1cm4gWD4wJiYoTD1MLnVzaHJuKFgpKSwhSyYmTC5jbXAodGhpcy5uKT49MD9MLnN1Yih0aGlzLm4pOkx9LHoucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oTCxLLFUsVyl7aWYo''@;'; put 'put ''Im9iamVjdCI9PXR5cGVvZiBVJiYoVz1VLFU9bnVsbCksV3x8KFc9e30pLCJzdHJpbmciIT10eXBlb2YgTCYmIm51bWJlciIhPXR5cGVvZiBMJiYhSS5pc0JOKEwpKXtQKCJvYmplY3QiPT10eXBlb2YgTCYmTCYmIm51bWJlciI9PXR5cGVvZiBMLmxlbmd0aCwiRXhwZWN0ZWQgbWVzc2FnZSB0''@;'; put 'put ''byBiZSBhbiBhcnJheS1saWtlLCBhIGhleCBzdHJpbmcsIG9yIGEgQk4gaW5zdGFuY2UiKSxQKEwubGVuZ3RoPj4+MD09PUwubGVuZ3RoKTtmb3IodmFyIFk9MDtZPEwubGVuZ3RoO1krKylQKCgyNTUmTFtZXSk9PT1MW1ldKX1LPXRoaXMua2V5RnJvbVByaXZhdGUoSyxVKSxMPXRoaXMuX3Ry''@;'; put 'put ''dW5jYXRlVG9OKEwsITEsVy5tc2dCaXRMZW5ndGgpLFAoIUwuaXNOZWcoKSwiQ2FuIG5vdCBzaWduIGEgbmVnYXRpdmUgbWVzc2FnZSIpO3ZhciBYPXRoaXMubi5ieXRlTGVuZ3RoKCksZWU9Sy5nZXRQcml2YXRlKCkudG9BcnJheSgiYmUiLFgpLEo9TC50b0FycmF5KCJiZSIsWCk7UChuZXcg''@;'; put 'put ''SShKKS5lcShMKSwiQ2FuIG5vdCBzaWduIG1lc3NhZ2UiKTtmb3IodmFyIHJlPW5ldyB5KHtoYXNoOnRoaXMuaGFzaCxlbnRyb3B5OmVlLG5vbmNlOkoscGVyczpXLnBlcnMscGVyc0VuYzpXLnBlcnNFbmN8fCJ1dGY4In0pLGllPXRoaXMubi5zdWIobmV3IEkoMSkpLGxlPTA7O2xlKyspe3Zh''@;'; put 'put ''ciBtZT1XLms/Vy5rKGxlKTpuZXcgSShyZS5nZW5lcmF0ZSh0aGlzLm4uYnl0ZUxlbmd0aCgpKSk7aWYoISgobWU9dGhpcy5fdHJ1bmNhdGVUb04obWUsITApKS5jbXBuKDEpPD0wfHxtZS5jbXAoaWUpPj0wKSl7dmFyIF9lPXRoaXMuZy5tdWwobWUpO2lmKCFfZS5pc0luZmluaXR5KCkpe3Zh''@;'; put 'put ''ciBUZT1fZS5nZXRYKCksU2U9VGUudW1vZCh0aGlzLm4pO2lmKDAhPT1TZS5jbXBuKDApKXt2YXIgemU9bWUuaW52bSh0aGlzLm4pLm11bChTZS5tdWwoSy5nZXRQcml2YXRlKCkpLmlhZGQoTCkpO2lmKDAhPT0oemU9emUudW1vZCh0aGlzLm4pKS5jbXBuKDApKXt2YXIgVj0oX2UuZ2V0WSgp''@;'; put 'put ''LmlzT2RkKCk/MTowKXwoMCE9PVRlLmNtcChTZSk/MjowKTtyZXR1cm4gVy5jYW5vbmljYWwmJnplLmNtcCh0aGlzLm5oKT4wJiYoemU9dGhpcy5uLnN1Yih6ZSksVl49MSksbmV3IE8oe3I6U2Usczp6ZSxyZWNvdmVyeVBhcmFtOlZ9KX19fX19fSx6LnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rp''@;'; put 'put ''b24oTCxLLFUsVyxZKXtZfHwoWT17fSksTD10aGlzLl90cnVuY2F0ZVRvTihMLCExLFkubXNnQml0TGVuZ3RoKSxVPXRoaXMua2V5RnJvbVB1YmxpYyhVLFcpO3ZhciBYPShLPW5ldyBPKEssImhleCIpKS5yLGVlPUsucztpZihYLmNtcG4oMSk8MHx8WC5jbXAodGhpcy5uKT49MHx8ZWUuY21w''@;'; put 'put ''bigxKTwwfHxlZS5jbXAodGhpcy5uKT49MClyZXR1cm4hMTt2YXIgbGUsSj1lZS5pbnZtKHRoaXMubikscmU9Si5tdWwoTCkudW1vZCh0aGlzLm4pLGllPUoubXVsKFgpLnVtb2QodGhpcy5uKTtyZXR1cm4gdGhpcy5jdXJ2ZS5fbWF4d2VsbFRyaWNrPyEobGU9dGhpcy5nLmptdWxBZGQocmUs''@;'; put 'put ''VS5nZXRQdWJsaWMoKSxpZSkpLmlzSW5maW5pdHkoKSYmbGUuZXFYVG9QKFgpOiEobGU9dGhpcy5nLm11bEFkZChyZSxVLmdldFB1YmxpYygpLGllKSkuaXNJbmZpbml0eSgpJiYwPT09bGUuZ2V0WCgpLnVtb2QodGhpcy5uKS5jbXAoWCl9LHoucHJvdG90eXBlLnJlY292ZXJQdWJLZXk9ZnVu''@;'; put 'put ''Y3Rpb24oTixMLEssVSl7UCgoMyZLKT09PUssIlRoZSByZWNvdmVyeSBwYXJhbSBpcyBtb3JlIHRoYW4gdHdvIGJpdHMiKSxMPW5ldyBPKEwsVSk7dmFyIFc9dGhpcy5uLFk9bmV3IEkoTiksWD1MLnIsZWU9TC5zLEo9MSZLLHJlPUs+PjE7aWYoWC5jbXAodGhpcy5jdXJ2ZS5wLnVtb2QodGhp''@;'; put 'put ''cy5jdXJ2ZS5uKSk+PTAmJnJlKXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGZpbmQgc2VuY29uZCBrZXkgY2FuZGluYXRlIik7WD10aGlzLmN1cnZlLnBvaW50RnJvbVgocmU/WC5hZGQodGhpcy5jdXJ2ZS5uKTpYLEopO3ZhciBpZT1MLnIuaW52bShXKSxsZT1XLnN1YihZKS5tdWwoaWUp''@;'; put 'put ''LnVtb2QoVyksbWU9ZWUubXVsKGllKS51bW9kKFcpO3JldHVybiB0aGlzLmcubXVsQWRkKGxlLFgsbWUpfSx6LnByb3RvdHlwZS5nZXRLZXlSZWNvdmVyeVBhcmFtPWZ1bmN0aW9uKE4sTCxLLFUpe2lmKG51bGwhPT0oTD1uZXcgTyhMLFUpKS5yZWNvdmVyeVBhcmFtKXJldHVybiBMLnJlY292''@;'; put 'put ''ZXJ5UGFyYW07Zm9yKHZhciBXPTA7Vzw0O1crKyl7dmFyIFk7dHJ5e1k9dGhpcy5yZWNvdmVyUHViS2V5KE4sTCxXKX1jYXRjaHtjb250aW51ZX1pZihZLmVxKEspKXJldHVybiBXfXRocm93IG5ldyBFcnJvcigiVW5hYmxlIHRvIGZpbmQgdmFsaWQgcmVjb3ZlcnkgZmFjdG9yIil9fSw2MDU0''@;'; put 'put ''MToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDg4NzIzKSxnPV8oMzEzNikuYXNzZXJ0O2Z1bmN0aW9uIEIodyxQKXt0aGlzLmVjPXcsdGhpcy5wcml2PW51bGwsdGhpcy5wdWI9bnVsbCxQLnByaXYmJnRoaXMuX2ltcG9ydFByaXZhdGUoUC5wcml2LFAucHJpdkVuYyksUC5wdWIm''@;'; put 'put ''JnRoaXMuX2ltcG9ydFB1YmxpYyhQLnB1YixQLnB1YkVuYyl9dWUuZXhwb3J0cz1CLEIuZnJvbVB1YmxpYz1mdW5jdGlvbihQLEYsTyl7cmV0dXJuIEYgaW5zdGFuY2VvZiBCP0Y6bmV3IEIoUCx7cHViOkYscHViRW5jOk99KX0sQi5mcm9tUHJpdmF0ZT1mdW5jdGlvbihQLEYsTyl7cmV0dXJu''@;'; put 'put ''IEYgaW5zdGFuY2VvZiBCP0Y6bmV3IEIoUCx7cHJpdjpGLHByaXZFbmM6T30pfSxCLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3ZhciBQPXRoaXMuZ2V0UHVibGljKCk7cmV0dXJuIFAuaXNJbmZpbml0eSgpP3tyZXN1bHQ6ITEscmVhc29uOiJJbnZhbGlkIHB1YmxpYyBrZXkifTpQ''@;'; put 'put ''LnZhbGlkYXRlKCk/UC5tdWwodGhpcy5lYy5jdXJ2ZS5uKS5pc0luZmluaXR5KCk/e3Jlc3VsdDohMCxyZWFzb246bnVsbH06e3Jlc3VsdDohMSxyZWFzb246IlB1YmxpYyBrZXkgKiBOICE9IE8ifTp7cmVzdWx0OiExLHJlYXNvbjoiUHVibGljIGtleSBpcyBub3QgYSBwb2ludCJ9fSxCLnBy''@;'; put 'put ''b3RvdHlwZS5nZXRQdWJsaWM9ZnVuY3Rpb24oUCxGKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIFAmJihGPVAsUD1udWxsKSx0aGlzLnB1Ynx8KHRoaXMucHViPXRoaXMuZWMuZy5tdWwodGhpcy5wcml2KSksRj90aGlzLnB1Yi5lbmNvZGUoRixQKTp0aGlzLnB1Yn0sQi5wcm90b3R5cGUuZ2V0''@;'; put 'put ''UHJpdmF0ZT1mdW5jdGlvbihQKXtyZXR1cm4iaGV4Ij09PVA/dGhpcy5wcml2LnRvU3RyaW5nKDE2LDIpOnRoaXMucHJpdn0sQi5wcm90b3R5cGUuX2ltcG9ydFByaXZhdGU9ZnVuY3Rpb24oUCxGKXt0aGlzLnByaXY9bmV3IEkoUCxGfHwxNiksdGhpcy5wcml2PXRoaXMucHJpdi51bW9kKHRo''@;'; put 'put ''aXMuZWMuY3VydmUubil9LEIucHJvdG90eXBlLl9pbXBvcnRQdWJsaWM9ZnVuY3Rpb24oUCxGKXtpZihQLnh8fFAueSlyZXR1cm4ibW9udCI9PT10aGlzLmVjLmN1cnZlLnR5cGU/ZyhQLngsIk5lZWQgeCBjb29yZGluYXRlIik6KCJzaG9ydCI9PT10aGlzLmVjLmN1cnZlLnR5cGV8fCJlZHdh''@;'; put 'put ''cmRzIj09PXRoaXMuZWMuY3VydmUudHlwZSkmJmcoUC54JiZQLnksIk5lZWQgYm90aCB4IGFuZCB5IGNvb3JkaW5hdGUiKSx2b2lkKHRoaXMucHViPXRoaXMuZWMuY3VydmUucG9pbnQoUC54LFAueSkpO3RoaXMucHViPXRoaXMuZWMuY3VydmUuZGVjb2RlUG9pbnQoUCxGKX0sQi5wcm90b3R5''@;'; put 'put ''cGUuZGVyaXZlPWZ1bmN0aW9uKFApe3JldHVybiBQLnZhbGlkYXRlKCl8fGcoUC52YWxpZGF0ZSgpLCJwdWJsaWMgcG9pbnQgbm90IHZhbGlkYXRlZCIpLFAubXVsKHRoaXMucHJpdikuZ2V0WCgpfSxCLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKFAsRixPKXtyZXR1cm4gdGhpcy5lYy5zaWdu''@;'; put 'put ''KFAsdGhpcyxGLE8pfSxCLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oUCxGLE8pe3JldHVybiB0aGlzLmVjLnZlcmlmeShQLEYsdGhpcyx2b2lkIDAsTyl9LEIucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4iPEtleSBwcml2OiAiKyh0aGlzLnByaXYmJnRoaXMucHJpdi50''@;'; put 'put ''b1N0cmluZygxNiwyKSkrIiBwdWI6ICIrKHRoaXMucHViJiZ0aGlzLnB1Yi5pbnNwZWN0KCkpKyIgPiJ9fSw0MDQ4NDoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDg4NzIzKSx5PV8oMzEzNiksZz15LmFzc2VydDtmdW5jdGlvbiBCKHosTil7aWYoeiBpbnN0YW5jZW9mIEIpcmV0''@;'; put 'put ''dXJuIHo7dGhpcy5faW1wb3J0REVSKHosTil8fChnKHouciYmei5zLCJTaWduYXR1cmUgd2l0aG91dCByIG9yIHMiKSx0aGlzLnI9bmV3IEkoei5yLDE2KSx0aGlzLnM9bmV3IEkoei5zLDE2KSx0aGlzLnJlY292ZXJ5UGFyYW09dm9pZCAwPT09ei5yZWNvdmVyeVBhcmFtP251bGw6ei5yZWNv''@;'; put 'put ''dmVyeVBhcmFtKX1mdW5jdGlvbiB3KCl7dGhpcy5wbGFjZT0wfWZ1bmN0aW9uIFAoeixOKXt2YXIgTD16W04ucGxhY2UrK107aWYoISgxMjgmTCkpcmV0dXJuIEw7dmFyIEs9MTUmTDtpZigwPT09S3x8Sz40fHwwPT09eltOLnBsYWNlXSlyZXR1cm4hMTtmb3IodmFyIFU9MCxXPTAsWT1OLnBs''@;'; put 'put ''YWNlO1c8SztXKyssWSsrKVU8PD04LFV8PXpbWV0sVT4+Pj0wO3JldHVybiEoVTw9MTI3KSYmKE4ucGxhY2U9WSxVKX1mdW5jdGlvbiBGKHope2Zvcih2YXIgTj0wLEw9ei5sZW5ndGgtMTsheltOXSYmISgxMjgmeltOKzFdKSYmTjxMOylOKys7cmV0dXJuIDA9PT1OP3o6ei5zbGljZShOKX1m''@;'; put 'put ''dW5jdGlvbiBPKHosTil7aWYoTjwxMjgpei5wdXNoKE4pO2Vsc2V7dmFyIEw9MSsoTWF0aC5sb2coTikvTWF0aC5MTjI+Pj4zKTtmb3Ioei5wdXNoKDEyOHxMKTstLUw7KXoucHVzaChOPj4+KEw8PDMpJjI1NSk7ei5wdXNoKE4pfX11ZS5leHBvcnRzPUIsQi5wcm90b3R5cGUuX2ltcG9ydERF''@;'; put 'put ''Uj1mdW5jdGlvbihOLEwpe049eS50b0FycmF5KE4sTCk7dmFyIEs9bmV3IHc7aWYoNDghPT1OW0sucGxhY2UrK10pcmV0dXJuITE7dmFyIFU9UChOLEspO2lmKCExPT09VXx8VStLLnBsYWNlIT09Ti5sZW5ndGh8fDIhPT1OW0sucGxhY2UrK10pcmV0dXJuITE7dmFyIFc9UChOLEspO2lmKCEx''@;'; put 'put ''PT09V3x8MTI4Jk5bSy5wbGFjZV0pcmV0dXJuITE7dmFyIFk9Ti5zbGljZShLLnBsYWNlLFcrSy5wbGFjZSk7aWYoSy5wbGFjZSs9VywyIT09TltLLnBsYWNlKytdKXJldHVybiExO3ZhciBYPVAoTixLKTtpZighMT09PVh8fE4ubGVuZ3RoIT09WCtLLnBsYWNlfHwxMjgmTltLLnBsYWNlXSly''@;'; put 'put ''ZXR1cm4hMTt2YXIgZWU9Ti5zbGljZShLLnBsYWNlLFgrSy5wbGFjZSk7aWYoMD09PVlbMF0pe2lmKCEoMTI4JllbMV0pKXJldHVybiExO1k9WS5zbGljZSgxKX1pZigwPT09ZWVbMF0pe2lmKCEoMTI4JmVlWzFdKSlyZXR1cm4hMTtlZT1lZS5zbGljZSgxKX1yZXR1cm4gdGhpcy5yPW5ldyBJ''@;'; put 'put ''KFkpLHRoaXMucz1uZXcgSShlZSksdGhpcy5yZWNvdmVyeVBhcmFtPW51bGwsITB9LEIucHJvdG90eXBlLnRvREVSPWZ1bmN0aW9uKE4pe3ZhciBMPXRoaXMuci50b0FycmF5KCksSz10aGlzLnMudG9BcnJheSgpO2ZvcigxMjgmTFswXSYmKEw9WzBdLmNvbmNhdChMKSksMTI4JktbMF0mJihL''@;'; put 'put ''PVswXS5jb25jYXQoSykpLEw9RihMKSxLPUYoSyk7IShLWzBdfHwxMjgmS1sxXSk7KUs9Sy5zbGljZSgxKTt2YXIgVT1bMl07TyhVLEwubGVuZ3RoKSwoVT1VLmNvbmNhdChMKSkucHVzaCgyKSxPKFUsSy5sZW5ndGgpO3ZhciBXPVUuY29uY2F0KEspLFk9WzQ4XTtyZXR1cm4gTyhZLFcubGVu''@;'; put 'put ''Z3RoKSxZPVkuY29uY2F0KFcpLHkuZW5jb2RlKFksTil9fSw4MzA0NToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDUyNTI5KSx5PV8oMjM0MDEpLGc9XygzMTM2KSxCPWcuYXNzZXJ0LHc9Zy5wYXJzZUJ5dGVzLFA9Xyg4NzIyMiksRj1fKDU0NTEpO2Z1bmN0aW9uIE8oeil7aWYo''@;'; put 'put ''QigiZWQyNTUxOSI9PT16LCJvbmx5IHRlc3RlZCB3aXRoIGVkMjU1MTkgc28gZmFyIiksISh0aGlzIGluc3RhbmNlb2YgTykpcmV0dXJuIG5ldyBPKHopO3RoaXMuY3VydmU9ej15W3pdLmN1cnZlLHRoaXMuZz16LmcsdGhpcy5nLnByZWNvbXB1dGUoei5uLmJpdExlbmd0aCgpKzEpLHRoaXMu''@;'; put 'put ''cG9pbnRDbGFzcz16LnBvaW50KCkuY29uc3RydWN0b3IsdGhpcy5lbmNvZGluZ0xlbmd0aD1NYXRoLmNlaWwoei5uLmJpdExlbmd0aCgpLzgpLHRoaXMuaGFzaD1JLnNoYTUxMn11ZS5leHBvcnRzPU8sTy5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbihOLEwpe049dyhOKTt2YXIgSz10aGlzLmtl''@;'; put 'put ''eUZyb21TZWNyZXQoTCksVT10aGlzLmhhc2hJbnQoSy5tZXNzYWdlUHJlZml4KCksTiksVz10aGlzLmcubXVsKFUpLFk9dGhpcy5lbmNvZGVQb2ludChXKSxYPXRoaXMuaGFzaEludChZLEsucHViQnl0ZXMoKSxOKS5tdWwoSy5wcml2KCkpLGVlPVUuYWRkKFgpLnVtb2QodGhpcy5jdXJ2ZS5u''@;'; put 'put ''KTtyZXR1cm4gdGhpcy5tYWtlU2lnbmF0dXJlKHtSOlcsUzplZSxSZW5jb2RlZDpZfSl9LE8ucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbihOLEwsSyl7aWYoTj13KE4pLChMPXRoaXMubWFrZVNpZ25hdHVyZShMKSkuUygpLmd0ZShMLmVkZHNhLmN1cnZlLm4pfHxMLlMoKS5pc05lZygpKXJl''@;'; put 'put ''dHVybiExO3ZhciBVPXRoaXMua2V5RnJvbVB1YmxpYyhLKSxXPXRoaXMuaGFzaEludChMLlJlbmNvZGVkKCksVS5wdWJCeXRlcygpLE4pLFk9dGhpcy5nLm11bChMLlMoKSk7cmV0dXJuIEwuUigpLmFkZChVLnB1YigpLm11bChXKSkuZXEoWSl9LE8ucHJvdG90eXBlLmhhc2hJbnQ9ZnVuY3Rp''@;'; put 'put ''b24oKXtmb3IodmFyIE49dGhpcy5oYXNoKCksTD0wO0w8YXJndW1lbnRzLmxlbmd0aDtMKyspTi51cGRhdGUoYXJndW1lbnRzW0xdKTtyZXR1cm4gZy5pbnRGcm9tTEUoTi5kaWdlc3QoKSkudW1vZCh0aGlzLmN1cnZlLm4pfSxPLnByb3RvdHlwZS5rZXlGcm9tUHVibGljPWZ1bmN0aW9uKE4p''@;'; put 'put ''e3JldHVybiBQLmZyb21QdWJsaWModGhpcyxOKX0sTy5wcm90b3R5cGUua2V5RnJvbVNlY3JldD1mdW5jdGlvbihOKXtyZXR1cm4gUC5mcm9tU2VjcmV0KHRoaXMsTil9LE8ucHJvdG90eXBlLm1ha2VTaWduYXR1cmU9ZnVuY3Rpb24oTil7cmV0dXJuIE4gaW5zdGFuY2VvZiBGP046bmV3IEYo''@;'; put 'put ''dGhpcyxOKX0sTy5wcm90b3R5cGUuZW5jb2RlUG9pbnQ9ZnVuY3Rpb24oTil7dmFyIEw9Ti5nZXRZKCkudG9BcnJheSgibGUiLHRoaXMuZW5jb2RpbmdMZW5ndGgpO3JldHVybiBMW3RoaXMuZW5jb2RpbmdMZW5ndGgtMV18PU4uZ2V0WCgpLmlzT2RkKCk/MTI4OjAsTH0sTy5wcm90b3R5cGUu''@;'; put 'put ''ZGVjb2RlUG9pbnQ9ZnVuY3Rpb24oTil7dmFyIEw9KE49Zy5wYXJzZUJ5dGVzKE4pKS5sZW5ndGgtMSxLPU4uc2xpY2UoMCxMKS5jb25jYXQoLTEyOSZOW0xdKSxVPSEhKDEyOCZOW0xdKSxXPWcuaW50RnJvbUxFKEspO3JldHVybiB0aGlzLmN1cnZlLnBvaW50RnJvbVkoVyxVKX0sTy5wcm90''@;'; put 'put ''b3R5cGUuZW5jb2RlSW50PWZ1bmN0aW9uKE4pe3JldHVybiBOLnRvQXJyYXkoImxlIix0aGlzLmVuY29kaW5nTGVuZ3RoKX0sTy5wcm90b3R5cGUuZGVjb2RlSW50PWZ1bmN0aW9uKE4pe3JldHVybiBnLmludEZyb21MRShOKX0sTy5wcm90b3R5cGUuaXNQb2ludD1mdW5jdGlvbihOKXtyZXR1''@;'; put 'put ''cm4gTiBpbnN0YW5jZW9mIHRoaXMucG9pbnRDbGFzc319LDg3MjIyOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMzEzNikseT1JLmFzc2VydCxnPUkucGFyc2VCeXRlcyxCPUkuY2FjaGVkUHJvcGVydHk7ZnVuY3Rpb24gdyhQLEYpe3RoaXMuZWRkc2E9UCx0aGlzLl9zZWNyZXQ9''@;'; put 'put ''ZyhGLnNlY3JldCksUC5pc1BvaW50KEYucHViKT90aGlzLl9wdWI9Ri5wdWI6dGhpcy5fcHViQnl0ZXM9ZyhGLnB1Yil9dy5mcm9tUHVibGljPWZ1bmN0aW9uKEYsTyl7cmV0dXJuIE8gaW5zdGFuY2VvZiB3P086bmV3IHcoRix7cHViOk99KX0sdy5mcm9tU2VjcmV0PWZ1bmN0aW9uKEYsTyl7''@;'; put 'put ''cmV0dXJuIE8gaW5zdGFuY2VvZiB3P086bmV3IHcoRix7c2VjcmV0Ok99KX0sdy5wcm90b3R5cGUuc2VjcmV0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlY3JldH0sQih3LCJwdWJCeXRlcyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLnB1YigpKX0p''@;'; put 'put ''LEIodywicHViIixmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wdWJCeXRlcz90aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuX3B1YkJ5dGVzKTp0aGlzLmVkZHNhLmcubXVsKHRoaXMucHJpdigpKX0pLEIodywicHJpdkJ5dGVzIixmdW5jdGlvbigpe3ZhciBGPXRoaXMuZWRkc2EsTz10aGlz''@;'; put 'put ''Lmhhc2goKSx6PUYuZW5jb2RpbmdMZW5ndGgtMSxOPU8uc2xpY2UoMCxGLmVuY29kaW5nTGVuZ3RoKTtyZXR1cm4gTlswXSY9MjQ4LE5bel0mPTEyNyxOW3pdfD02NCxOfSksQih3LCJwcml2IixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLnByaXZCeXRlcygp''@;'; put 'put ''KX0pLEIodywiaGFzaCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5oYXNoKCkudXBkYXRlKHRoaXMuc2VjcmV0KCkpLmRpZ2VzdCgpfSksQih3LCJtZXNzYWdlUHJlZml4IixmdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc2goKS5zbGljZSh0aGlzLmVkZHNhLmVuY29kaW5nTGVuZ3Ro''@;'; put 'put ''KX0pLHcucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24oRil7cmV0dXJuIHkodGhpcy5fc2VjcmV0LCJLZXlQYWlyIGNhbiBvbmx5IHZlcmlmeSIpLHRoaXMuZWRkc2Euc2lnbihGLHRoaXMpfSx3LnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24oRixPKXtyZXR1cm4gdGhpcy5lZGRzYS52ZXJpZnko''@;'; put 'put ''RixPLHRoaXMpfSx3LnByb3RvdHlwZS5nZXRTZWNyZXQ9ZnVuY3Rpb24oRil7cmV0dXJuIHkodGhpcy5fc2VjcmV0LCJLZXlQYWlyIGlzIHB1YmxpYyBvbmx5IiksSS5lbmNvZGUodGhpcy5zZWNyZXQoKSxGKX0sdy5wcm90b3R5cGUuZ2V0UHVibGljPWZ1bmN0aW9uKEYpe3JldHVybiBJLmVu''@;'; put 'put ''Y29kZSh0aGlzLnB1YkJ5dGVzKCksRil9LHVlLmV4cG9ydHM9d30sNTQ1MToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDg4NzIzKSx5PV8oMzEzNiksZz15LmFzc2VydCxCPXkuY2FjaGVkUHJvcGVydHksdz15LnBhcnNlQnl0ZXM7ZnVuY3Rpb24gUChGLE8pe3RoaXMuZWRkc2E9''@;'; put 'put ''Riwib2JqZWN0IiE9dHlwZW9mIE8mJihPPXcoTykpLEFycmF5LmlzQXJyYXkoTykmJihnKE8ubGVuZ3RoPT09MipGLmVuY29kaW5nTGVuZ3RoLCJTaWduYXR1cmUgaGFzIGludmFsaWQgc2l6ZSIpLE89e1I6Ty5zbGljZSgwLEYuZW5jb2RpbmdMZW5ndGgpLFM6Ty5zbGljZShGLmVuY29kaW5n''@;'; put 'put ''TGVuZ3RoKX0pLGcoTy5SJiZPLlMsIlNpZ25hdHVyZSB3aXRob3V0IFIgb3IgUyIpLEYuaXNQb2ludChPLlIpJiYodGhpcy5fUj1PLlIpLE8uUyBpbnN0YW5jZW9mIEkmJih0aGlzLl9TPU8uUyksdGhpcy5fUmVuY29kZWQ9QXJyYXkuaXNBcnJheShPLlIpP08uUjpPLlJlbmNvZGVkLHRoaXMu''@;'; put 'put ''X1NlbmNvZGVkPUFycmF5LmlzQXJyYXkoTy5TKT9PLlM6Ty5TZW5jb2RlZH1CKFAsIlMiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMuU2VuY29kZWQoKSl9KSxCKFAsIlIiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5S''@;'; put 'put ''ZW5jb2RlZCgpKX0pLEIoUCwiUmVuY29kZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlUG9pbnQodGhpcy5SKCkpfSksQihQLCJTZW5jb2RlZCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVJbnQodGhpcy5TKCkpfSksUC5wcm90b3R5cGUudG9CeXRl''@;'; put 'put ''cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlJlbmNvZGVkKCkuY29uY2F0KHRoaXMuU2VuY29kZWQoKSl9LFAucHJvdG90eXBlLnRvSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIHkuZW5jb2RlKHRoaXMudG9CeXRlcygpLCJoZXgiKS50b1VwcGVyQ2FzZSgpfSx1ZS5leHBvcnRzPVB9LDUxNDE2OnVl''@;'; put 'put ''PT57dWUuZXhwb3J0cz17ZG91Ymxlczp7c3RlcDo0LHBvaW50czpbWyJlNjBmY2U5M2I1OWU5ZWM1MzAxMWFhYmMyMWMyM2U5N2IyYTMxMzY5Yjg3YTVhZTljNDRlZTg5ZTJhNmRlYzBhIiwiZjdlMzUwNzM5OWU1OTU5MjlkYjk5ZjM0ZjU3OTM3MTAxMjk2ODkxZTQ0ZDIzZjBiZTFmMzJjY2U2''@;'; put 'put ''OTYxNjgyMSJdLFsiODI4MjI2MzIxMmM2MDlkOWVhMmE2ZTNlMTcyZGUyMzhkOGMzOWNhYmQ1YWMxY2ExMDY0NmUyM2ZkNWY1MTUwOCIsIjExZjhhODA5ODU1N2RmZTQ1ZTgyNTZlODMwYjYwYWNlNjJkNjEzYWMyZjdiMTdiZWQzMWI2ZWFmZjZlMjZjYWYiXSxbIjE3NWUxNTlmNzI4Yjg2NWE3''@;'; put 'put ''MmY5OWNjNmM2ZmM4NDZkZTBiOTM4MzNmZDIyMjJlZDczZmNlNWI1NTFlNWI3MzkiLCJkMzUwNmUwZDllM2M3OWViYTRlZjk3YTUxZmY3MWY1ZWFjYjU5NTVhZGQyNDM0NWM2ZWZhNmZmZWU5ZmVkNjk1Il0sWyIzNjNkOTBkNDQ3YjAwYzljOTljZWFjMDViNjI2MmVlMDUzNDQxYzdlNTU1NTJm''@;'; put 'put ''ZmU1MjZiYWQ4ZjgzZmY0NjQwIiwiNGUyNzNhZGZjNzMyMjIxOTUzYjQ0NTM5N2YzMzYzMTQ1YjlhODkwMDgxOTllY2I2MjAwM2M3ZjNiZWU5ZGU5Il0sWyI4YjRiNWYxNjVkZjNjMmJlOGM2MjQ0YjViNzQ1NjM4ODQzZTRhNzgxYTE1YmNkMWI2OWY3OWE1NWRmZmRmODBjIiwiNGFhZDBhNmY2''@;'; put 'put ''OGQzMDhiNGIzZmJkNzgxM2FiMGRhMDRmOWUzMzY1NDYxNjJlZTU2YjNlZmYwYzY1ZmQ0ZmQzNiJdLFsiNzIzY2JhYTZlNWRiOTk2ZDZiZjc3MWMwMGJkNTQ4YzdiNzAwZGJmZmE2YzBlNzdiY2I2MTE1OTI1MjMyZmNkYSIsIjk2ZTg2N2I1NTk1Y2M0OThhOTIxMTM3NDg4ODI0ZDZlMjY2MGEw''@;'; put 'put ''NjUzNzc5NDk0ODAxZGMwNjlkOWViMzlmNWYiXSxbImVlYmZhNGQ0OTNiZWJmOThiYTVmZWVjODEyYzJkM2I1MDk0Nzk2MTIzN2E5MTk4MzlhNTMzZWNhMGU3ZGQ3ZmEiLCI1ZDlhOGNhMzk3MGVmMGYyNjllZTdlZGFmMTc4MDg5ZDlhZTRjZGMzYTcxMWY3MTJkZGZkNGZkYWUxZGU4OTk5Il0s''@;'; put 'put ''WyIxMDBmNDRkYTY5NmU3MTY3Mjc5MWQwYTA5YjdiZGU0NTlmMTIxNWEyOWIzYzAzYmZlZmQ3ODM1YjM5YTQ4ZGIwIiwiY2RkOWUxMzE5MmEwMGI3NzJlYzhmMzMwMGMwOTA2NjZiN2ZmNGExOGZmNTE5NWFjMGZiZDVjZDYyYmM2NWEwOSJdLFsiZTEwMzFiZTI2MmM3ZWQxYjFkYzkyMjdhNGEw''@;'; put 'put ''NGMwMTdhNzdmOGQ0NDY0ZjNiMzg1MmM4YWNkZTZlNTM0ZmQyZCIsIjlkNzA2MTkyODk0MDQwNWU2YmI2YTQxNzY1OTc1MzVhZjI5MmRkNDE5ZTFjZWQ3OWE0NGYxOGYyOTQ1NmEwMGQiXSxbImZlZWE2Y2FlNDZkNTViNTMwYWMyODM5ZjE0M2JkN2VjNWNmOGIyNjZhNDFkNmFmNTJkNWU2ODhk''@;'; put 'put ''OTA5NDY5NmQiLCJlNTdjNmI2Yzk3ZGNlMWJhYjA2ZTRlMTJiZjNlY2Q1Yzk4MWM4OTU3Y2M0MTQ0MmQzMTU1ZGViZjE4MDkwMDg4Il0sWyJkYTY3YTkxZDkxMDQ5Y2RjYjM2N2JlNGJlNmZmY2EzY2ZlZWQ2NTdkODA4NTgzZGUzM2ZhOTc4YmMxZWM2Y2IxIiwiOWJhY2FhMzU0ODE2NDJiYzQx''@;'; put 'put ''ZjQ2M2Y3ZWM5NzgwZTVkZWM3YWRjNTA4Zjc0MGExN2U5ZWE4ZTI3YTY4YmUxZCJdLFsiNTM5MDRmYWEwYjMzNGNkZGE2ZTAwMDkzNWVmMjIxNTFlYzA4ZDBmN2JiMTEwNjlmNTc1NDVjY2MxYTM3YjdjMCIsIjViYzA4N2QwYmM4MDEwNmQ4OGM5ZWNjYWMyMGQzYzFjMTM5OTk5ODFlMTQ0MzQ2''@;'; put 'put ''OTlkY2IwOTZiMDIyNzcxYzgiXSxbIjhlN2JjZDBiZDM1OTgzYTc3MTljY2E3NzY0Y2E5MDY3NzliNTNhMDQzYTliOGJjYWVmZjk1OWY0M2FkODYwNDciLCIxMGI3NzcwYjJhM2RhNGIzOTQwMzEwNDIwY2E5NTE0NTc5ZTg4ZTJlNDdmZDY4YjNlYTEwMDQ3ZTg0NjAzNzJhIl0sWyIzODVlZWQz''@;'; put 'put ''NGMxY2RmZjIxZTZkMDgxODY4OWI4MWJkZTcxYTdmNGYxODM5N2U2NjkwYTg0MWUxNTk5YzQzODYyIiwiMjgzYmViYzNlOGVhMjNmNTY3MDFkZTE5ZTllYmY0NTc2YjMwNGVlYzIwODZkYzhjYzA0NThmZTU1NDJlNTQ1MyJdLFsiNmY5ZDliODAzZWNmMTkxNjM3YzczYTQ0MTNkZmExODBmZGRm''@;'; put 'put ''ODRhNTk0N2ZiYzljNjA2ZWQ4NmMzZmFjM2E3IiwiN2M4MGM2OGU2MDMwNTliYTY5YjhlMmEzMGU0NWM0ZDQ3ZWE0ZGQyZjVjMjgxMDAyZDg2ODkwNjAzYTg0MjE2MCJdLFsiMzMyMmQ0MDEyNDNjNGUyNTgyYTIxNDdjMTA0ZDZlY2JmNzc0ZDE2M2RiMGY1ZTUzMTNiN2UwZTc0MmQwZTZiZCIs''@;'; put 'put ''IjU2ZTcwNzk3ZTk2NjRlZjViZmIwMTliYzRkZGFmOWI3MjgwNWY2M2VhMjg3M2FmNjI0ZjNhMmU5NmMyOGIyYTAiXSxbIjg1NjcyYzdkMmRlMGI3ZGEyYmQxNzcwZDg5NjY1ODY4NzQxYjNmOWFmNzY0MzM5NzcyMWQ3NGQyODEzNGFiODMiLCI3YzQ4MWI5YjViNDNiMmViNjM3NDA0OWJmYTYy''@;'; put 'put ''YzJlNWU3N2YxN2ZjYzUyOThmNDRjOGUzMDk0Zjc5MDMxM2E2Il0sWyI5NDhiZjgwOWIxOTg4YTQ2YjA2YzlmMTkxOTQxM2IxMGY5MjI2YzYwZjY2ODgzMmZmZDk1OWFmNjBjODJhMGEiLCI1M2E1NjI4NTZkY2I2NjQ2ZGM2Yjc0YzVkMWMzNDE4YzZkNGRmZjA4Yzk3Y2QyYmVkNGNiN2Y4OGQ4''@;'; put 'put ''YzhlNTg5Il0sWyI2MjYwY2U3ZjQ2MTgwMWMzNGYwNjdjZTBmMDI4NzNhOGYxYjBlNDRkZmM2OTc1MmFjY2VjZDgxOWYzOGZkOGU4IiwiYmMyZGE4MmI2ZmE1YjU3MWE3ZjA5MDQ5Nzc2YTFlZjdlY2QyOTIyMzgwNTFjMTk4YzFhODRlOTViMmI0YWUxNyJdLFsiZTUwMzdkZTBhZmMxZDhkNDNk''@;'; put 'put ''ODM0ODQxNGJiZjQxMDMwNDNlYzhmNTc1YmZkYzQzMjk1M2NjOGQyMDM3ZmEyZCIsIjQ1NzE1MzRiYWE5NGQzYjVmOWY5OGQwOWZiOTkwYmRkYmQ1ZjViMDNlYzQ4MWYxMGUwZTVkYzg0MWQ3NTViZGEiXSxbImUwNjM3MmIwZjRhMjA3YWRmNWVhOTA1ZThmMTc3MWI0ZTdlOGRiZDFjNmE2YzVi''@;'; put 'put ''NzI1ODY2YTBhZTRmY2U3MjUiLCI3YTkwODk3NGJjZTE4Y2ZlMTJhMjdiYjJhZDVhNDg4Y2Q3NDg0YTc3ODcxMDQ4NzBiMjcwMzRmOTRlZWUzMWRkIl0sWyIyMTNjN2E3MTVjZDVkNDUzNThkMGJiZjlkYzBjZTAyMjA0YjEwYmRkZTJhM2Y1ODU0MGFkNjkwOGQwNTU5NzU0IiwiNGI2ZGFkMGI1''@;'; put 'put ''YWU0NjI1MDcwMTNhZDA2MjQ1YmExOTBiYjQ4NTBmNWYzNmE3ZWVkZGZmMmMyNzUzNGI0NThmMiJdLFsiNGU3YzI3MmE3YWY0YjM0ZThkYmI5MzUyYTU0MTlhODdlMjgzOGM3MGFkYzYyY2RkZjBjYzNhM2IwOGZiZDUzYyIsIjE3NzQ5Yzc2NmM5ZDBiMThlMTZmZDA5ZjZkZWY2ODFiNTMwYjk2''@;'; put 'put ''MTRiZmY3ZGQzM2UwYjM5NDE4MTdkY2FhZTYiXSxbImZlYTc0ZTNkYmU3NzhiMWIxMGYyMzhhZDYxNjg2YWE1Yzc2ZTNkYjJiZTQzMDU3NjMyNDI3ZTI4NDBmYjI3YjYiLCI2ZTA1NjhkYjliMGIxMzI5N2NmNjc0ZGVjY2I2YWY5MzEyNmI1OTZiOTczZjdiNzc3MDFkM2RiN2YyM2NiOTZmIl0s''@;'; put 'put ''WyI3NmU2NDExM2Y2NzdjZjBlMTBhMjU3MGQ1OTk5NjhkMzE1NDRlMTc5Yjc2MDQzMjk1MmMwMmE0NDE3YmRkZTM5IiwiYzkwZGRmOGRlZTRlOTVjZjU3NzA2NmQ3MDY4MWYwZDM1ZTJhMzNkMmI1NmQyMDMyYjRiMTc1MmQxOTAxYWMwMSJdLFsiYzczOGM1NmIwM2IyYWJlMWU4MjgxYmFhNzQz''@;'; put 'put ''ZjhmOWE4ZjdjYzY0M2RmMjZjYmVlM2FiMTUwMjQyYmNiYjg5MSIsIjg5M2ZiNTc4OTUxYWQyNTM3ZjcxOGYyZWFjYmZiYmJiODIzMTRlZWY3ODgwY2ZlOTE3ZTczNWQ5Njk5YTg0YzMiXSxbImQ4OTU2MjY1NDhiNjViODFlMjY0Yzc2MzdjOTcyODc3ZDFkNzJlNWYzYTkyNTAxNDM3MmU5ZjY1''@;'; put 'put ''ODhmNmMxNGIiLCJmZWJmYWEzOGYyYmM3ZWFlNzI4ZWM2MDgxOGMzNDBlYjAzNDI4ZDYzMmJiMDY3ZTE3OTM2M2VkNzVkN2Q5OTFmIl0sWyJiOGRhOTQwMzJhOTU3NTE4ZWIwZjY0MzM1NzFlODc2MWNlZmZjNzM2OTNlODRlZGQ0OTE1MGE1NjRmNjc2ZTAzIiwiMjgwNGRmYTQ0ODA1YTFlNGQ3''@;'; put 'put ''Yzk5Y2M5NzYyODA4YjA5MmNjNTg0ZDk1ZmYzYjUxMTQ4OGU0ZTc0ZWZkZjZlNyJdLFsiZTgwZmVhMTQ0NDFmYjMzYTdkOGFkYWI5NDc1ZDdmYWIyMDE5ZWZmYjUxNTZhNzkyZjFhMTE3NzhlM2MwZGY1ZCIsImVlZDFkZTdmNjM4ZTAwNzcxZTg5NzY4Y2EzY2E5NDQ3MmQxNTVlODBhZjMyMmVh''@;'; put 'put ''OWZjYjQyOTFiNmFjOWVjNzgiXSxbImEzMDE2OTdiZGZjZDcwNDMxM2JhNDhlNTFkNTY3NTQzZjJhMTgyMDMxZWZkNjkxNWRkYzA3YmJjYzRlMTYwNzAiLCI3MzcwZjkxY2ZiNjdlNGY1MDgxODA5ZmEyNWQ0MGY5YjE3MzVkYmY3YzBhMTFhMTMwYzBkMWEwNDFlMTc3ZWExIl0sWyI5MGFkODVi''@;'; put 'put ''Mzg5ZDZiOTM2NDYzZjlkMDUxMjY3OGRlMjA4Y2MzMzBiMTEzMDdmZmZhYjdhYzYzZTNmYjA0ZWQ0IiwiZTUwN2EzNjIwYTM4MjYxYWZmZGNiZDk0MjcyMjJiODM5YWVmYWJlMTU4Mjg5NGQ5OTFkNGQ0OGNiNmVmMTUwIl0sWyI4ZjY4YjlkMmY2M2I1ZjMzOTIzOWMxYWQ5ODFmMTYyZWU4OGM1''@;'; put 'put ''Njc4NzIzZWEzMzUxYjdiNDQ0YzllYzRjMGRhIiwiNjYyYTlmMmRiYTA2Mzk4NmRlMWQ5MGMyYjZiZTIxNWRiYmVhMmNmZTk1NTEwYmZkZjIzY2JmNzk1MDFmZmY4MiJdLFsiZTRmM2ZiMDE3NmFmODVkNjVmZjk5ZmY5MTk4YzM2MDkxZjQ4ZTg2NTAzNjgxZTNlNjY4NmZkNTA1MzIzMWUxMSIs''@;'; put 'put ''IjFlNjM2MzNhZDBlZjRmMWMxNjYxYTZkMGVhMDJiNzI4NmNjN2U3NGVjOTUxZDFjOTgyMmMzODU3NmZlYjczYmMiXSxbIjhjMDBmYTliMThlYmYzMzFlYjk2MTUzN2E0NWE0MjY2YzcwMzRmMmYwZDRlMWQwNzE2ZmI2ZWFlMjBlYWUyOWUiLCJlZmE0NzI2N2ZlYTUyMWExYTlkYzM0M2EzNzM2''@;'; put 'put ''Yzk3NGMyZmFkYWZhODFlMzZjNTRlN2QyYTRjNjY3MDI0MTRiIl0sWyJlN2EyNmNlNjlkZDQ4MjlmM2UxMGNlYzBhOWU5OGVkMzE0M2QwODRmMzA4YjkyYzA5OTdmZGRmYzYwY2IzZTQxIiwiMmE3NThlMzAwZmE3OTg0YjQ3MWIwMDZhMWFhZmJiMThkMGE2YjJjMDQyMGU4M2UyMGU4YTk0MjFj''@;'; put 'put ''ZjJjZmQ1MSJdLFsiYjY0NTllMGVlMzY2MmVjOGQyMzU0MGMyMjNiY2JkYzU3MWNiY2I5NjdkNzk0MjRmM2NmMjllYjNkZTZiODBlZiIsIjY3Yzg3NmQwNmYzZTA2ZGUxZGFkZjE2ZTU2NjFkYjNjNGIzYWU2ZDQ4ZTM1YjJmZjMwYmYwYjYxYTcxYmE0NSJdLFsiZDY4YTgwYzgyODBiYjg0MDc5''@;'; put 'put ''MzIzNGFhMTE4ZjA2MjMxZDZmMWZjNjdlNzNjNWE1ZGVkYTBmNWI0OTY5NDNlOCIsImRiOGJhOWZmZjRiNTg2ZDAwYzRiMWY5MTc3YjBlMjhiNWIwZTdiOGY3ODQ1Mjk1YTI5NGM4NDI2NmIxMzMxMjAiXSxbIjMyNGFlZDdkZjY1YzgwNDI1MmRjMDI3MDkwN2EzMGIwOTYxMmFlYjk3MzQ0OWNl''@;'; put 'put ''YTQwOTU5ODBmYzI4ZDNkNWQiLCI2NDhhMzY1Nzc0YjYxZjJmZjEzMGMwYzM1YWVjMWY0ZjE5MjEzYjBjN2UzMzI4NDM5NjcyMjRhZjk2YWI3Yzg0Il0sWyI0ZGY5YzE0OTE5Y2RlNjFmNmQ1MWRmZGJlNWZlZTVkY2VlYzQxNDNiYThkMWNhODg4ZThiZDM3M2ZkMDU0Yzk2IiwiMzVlYzUxMDky''@;'; put 'put ''ZDg3MjgwNTA5NzRjMjNhMWQ4NWQ0YjVkNTA2Y2RjMjg4NDkwMTkyZWJhYzA2Y2FkMTBkNWQiXSxbIjljMzkxOWE4NGE0NzQ4NzBmYWVkOGE5YzFjYzY2MDIxNTIzNDg5MDU0ZDdmMDMwOGNiZmM5OWM4YWMxZjk4Y2QiLCJkZGI4NGYwZjRhNGRkZDU3NTg0ZjA0NGJmMjYwZTY0MTkwNTMyNmY3''@;'; put 'put ''NmM2NGM4ZTZiZTdlNWUwM2Q0ZmM1OTlkIl0sWyI2MDU3MTcwYjFkZDEyZmRmOGRlMDVmMjgxZDhlMDZiYjkxZTE0OTNhOGI5MWQ0Y2M1YTIxMzgyMTIwYTk1OWU1IiwiOWExYWYwYjI2YTZhNDgwN2FkZDlhMmRhZjcxZGYyNjI0NjUxNTJiYzNlZTI0YzY1ZTg5OWJlOTMyMzg1YTJhOCJdLFsi''@;'; put 'put ''YTU3NmRmOGUyM2EwODQxMTQyMTQzOWE0NTE4ZGEzMTg4MGNlZjBmYmE3ZDRkZjEyYjFhNjk3M2VlY2I5NDI2NiIsIjQwYTZiZjIwZTc2NjQwYjJjOTJiOTdhZmU1OGNkODJjNDMyZTEwYTdmNTE0ZDlmM2VlOGJlMTFhZTFiMjhlYzgiXSxbIjc3NzhhNzhjMjhkZWMzZTMwYTA1ZmU5NjI5ZGU4''@;'; put 'put ''YzM4YmIzMGQxZjVjZjlhM2EyMDhmNzYzODg5YmU1OGFkNzEiLCIzNDYyNmQ5YWI1YTViMjJmZjcwOThlMTJmMmZmNTgwMDg3YjM4NDExZmYyNGFjNTYzYjUxM2ZjMWZkOWY0M2FjIl0sWyI5Mjg5NTVlZTYzN2E4NDQ2MzcyOWZkMzBlN2FmZDJlZDVmOTYyNzRlNWFkN2U1Y2IwOWVkYTljMDZk''@;'; put 'put ''OTAzYWMiLCJjMjU2MjEwMDNkM2Y0MmE4MjdiNzhhMTMwOTNhOTVlZWFjM2QyNmVmYThhOGQ4M2ZjNTE4MGU5MzViY2QwOTFmIl0sWyI4NWQwZmVmM2VjNmRiMTA5Mzk5MDY0ZjNhMGUzYjI4NTU2NDViNGE5MDdhZDM1NDUyN2FhZTc1MTYzZDgyNzUxIiwiMWYwMzY0ODQxM2EzOGMwYmUyOWQ0''@;'; put 'put ''OTZlNTgyY2Y1NjYzZTg3NTFlOTY4NzczMzE1ODJjMjM3YTI0ZWIxZjk2MiJdLFsiZmYyYjBkY2U5N2VlY2U5N2MxYzliNjA0MTc5OGI4NWRmZGZiNmQ4ODgyZGEyMDMwOGY1NDA0ODI0NTI2MDg3ZSIsIjQ5M2QxM2ZlZjUyNGJhMTg4YWY0YzRkYzU0ZDA3OTM2YzdiN2VkNmZiOTBlMmNlYjJj''@;'; put 'put ''OTUxZTAxZjBjMjk5MDciXSxbIjgyN2ZiYmU0YjFlODgwZWE5ZWQyYjJlNjMwMWIyMTJiNTdmMWVlMTQ4Y2Q2ZGQyODc4MGU1ZTJjZjg1NmUyNDEiLCJjNjBmOWM5MjNjNzI3YjBiNzFiZWYyYzY3ZDFkMTI2ODdmZjdhNjMxODY5MDMxNjZkNjA1YjY4YmFlYzI5M2VjIl0sWyJlYWE2NDlmMjFm''@;'; put 'put ''NTFiZGJhZTdiZTRhZTM0Y2U2ZTUyMTdhNThmZGNlN2Y0N2Y5YWE3ZjNiNThmYTIxMjBlMmIzIiwiYmUzMjc5ZWQ1YmJiYjAzYWM2OWE4MGY4OTg3OWFhNWEwMWE2Yjk2NWYxM2Y3ZTU5ZDQ3YTUzMDViYTVhZDkzZCJdLFsiZTRhNDJkNDNjNWNmMTY5ZDkzOTFkZjZkZWNmNDJlZTU0MWI2ZDhm''@;'; put 'put ''MGM5YTEzNzQwMWUyMzYzMmRkYTM0ZDI0ZiIsIjRkOWY5MmU3MTZkMWM3MzUyNmZjOTljY2ZiOGFkMzRjZTg4NmVlZGZhOGQ4ZTRmMTNhN2Y3MTMxZGViYTk0MTQiXSxbIjFlYzgwZmVmMzYwY2JkZDk1NDE2MGZhZGFiMzUyYjZiOTJiNTM1NzZhODhmZWE0OTQ3MTczYjlkNDMwMGJmMTkiLCJh''@;'; put 'put ''ZWVmZTkzNzU2YjUzNDBkMmYzYTQ5NThhN2FiYmY1ZTAxNDZlNzdmNjI5NWEwN2I2NzFjZGMxY2MxMDdjZWZkIl0sWyIxNDZhNzc4YzA0NjcwYzJmOTFiMDBhZjQ2ODBkZmE4YmNlMzQ5MDcxN2Q1OGJhODg5ZGRiNTkyODM2NjY0MmJlIiwiYjMxOGUwZWMzMzU0MDI4YWRkNjY5ODI3ZjlkNGIy''@;'; put 'put ''ODcwYWFhOTcxZDJmN2U1ZWQxZDBiMjk3NDgzZDgzZWZkMCJdLFsiZmE1MGMwZjYxZDIyZTVmMDdlM2FjZWJiMWFhMDdiMTI4ZDAwMTIyMDlhMjhiOTc3NmQ3NmE4NzkzMTgwZWVmOSIsIjZiODRjNjkyMjM5N2ViYTliNzJjZDI4NzIyODFhNjhhNWU2ODMyOTNhNTdhMjEzYjM4Y2Q4ZDdkM2Y0''@;'; put 'put ''ZjI4MTEiXSxbImRhMWQ2MWQwY2E3MjFhMTFiMWE1YmY2YjdkODhlODQyMWEyODhhYjVkNWJiYTUyMjBlNTNkMzJiNWYwNjdlYzIiLCI4MTU3ZjU1YTdjOTkzMDZjNzljMDc2NjE2MWM5MWUyOTY2YTczODk5ZDI3OWI0OGE2NTVmYmEwZjFhZDgzNmYxIl0sWyJhOGUyODJmZjBjOTcwNjkwNzIx''@;'; put 'put ''NWZmOThlOGZkNDE2NjE1MzExZGUwNDQ2ZjFlMDYyYTczYjA2MTBkMDY0ZTEzIiwiN2Y5NzM1NWI4ZGI4MWMwOWFiZmI3ZjNjNWIyNTE1ODg4YjY3OWEzZTUwZGQ2YmQ2Y2VmN2M3MzExMWY0Y2MwYyJdLFsiMTc0YTUzYjljOWEyODU4NzJkMzllNTZlNjkxM2NhYjE1ZDU5YjFmYTUxMjUwOGMw''@;'; put 'put ''MjJmMzgyZGU4MzE5NDk3YyIsImNjYzlkYzM3YWJmYzljMTY1N2I0MTU1ZjJjNDdmOWU2NjQ2YjNhMWQ4Y2I5ODU0MzgzZGExM2FjMDc5YWZhNzMiXSxbIjk1OTM5Njk4MTk0Mzc4NWMzZDNlNTdlZGY1MDE4Y2RiZTAzOWU3MzBlNDkxOGIzZDg4NGZkZmYwOTQ3NWI3YmEiLCIyZTdlNTUyODg4''@;'; put 'put ''YzMzMWRkOGJhMDM4NmE0YjljZDY4NDljNjUzZjY0Yzg3MDkzODVlOWI4YWJmODc1MjRmMmZkIl0sWyJkMmE2M2E1MGFlNDAxZTU2ZDY0NWExMTUzYjEwOWE4ZmNjYTBhNDNkNTYxZmJhMmRiYjUxMzQwYzlkODJiMTUxIiwiZTgyZDg2ZmI2NDQzZmNiNzU2NWFlZTU4YjI5NDgyMjBhNzBmNzUw''@;'; put 'put ''YWY0ODRjYTUyZDQxNDIxNzRkY2Y4OTQwNSJdLFsiNjQ1ODdlMjMzNTQ3MWViODkwZWU3ODk2ZDdjZmRjODY2YmFjYmRiZDM4MzkzMTdiMzQzNmY5YjQ1NjE3ZTA3MyIsImQ5OWZjZGQ1YmY2OTAyZTJhZTk2ZGQ2NDQ3YzI5OWExODViOTBhMzkxMzNhZWFiMzU4Mjk5ZTVlOWZhZjY1ODkiXSxb''@;'; put 'put ''Ijg0ODFiZGUwZTRlNGQ4ODViM2E1NDZkM2U1NDlkZTA0MmYwYWE2Y2VhMjUwZTdmZDM1OGQ2Yzg2ZGQ0NWU0NTgiLCIzOGVlN2I4Y2JhNTQwNGRkODRhMjViZjM5Y2VjYjJjYTkwMGE3OWM0MmIyNjJlNTU2ZDY0YjFiNTk3NzkwNTdlIl0sWyIxMzQ2NGE1N2E3ODEwMmFhNjJiNjk3OWFlODE3''@;'; put 'put ''ZjQ2MzdmZmNmZWQzYzRiMWNlMzBiY2Q2MzAzZjZjYWY2NjZiIiwiNjliZTE1OTAwNDYxNDU4MGVmN2U0MzM0NTNjY2IwY2E0OGYzMDBhODFkMDk0MmUxM2Y0OTVhOTA3ZjZlY2MyNyJdLFsiYmM0YTlkZjViNzEzZmUyZTlhZWY0MzBiY2MxZGM5N2EwY2Q5Y2NlZGUyZjI4NTg4Y2FkYTNhMGQy''@;'; put 'put ''ZDgzZjM2NiIsImQzYTgxY2E2ZTc4NWMwNjM4MzkzN2FkZjRiNzk4Y2FhNmU4YTlmYmZhNTQ3YjE2ZDc1OGQ2NjY1ODFmMzNjMSJdLFsiOGMyOGE5N2JmODI5OGJjMGQyM2Q4Yzc0OTQ1MmEzMmU2OTRiNjVlMzBhOTQ3MmEzOTU0YWIzMGZlNTMyNGNhYSIsIjQwYTMwNDYzYTMzMDUxOTMzNzhm''@;'; put 'put ''ZWRmMzFmN2NjMGViN2FlNzg0ZjA0NTFjYjk0NTllNzFkYzczY2JlZjk0ODIiXSxbIjhlYTk2NjYxMzk1MjdhOGMxZGQ5NGNlNGYwNzFmZDIzYzhiMzUwYzVhNGJiMzM3NDhjNGJhMTExZmFjY2FlMCIsIjYyMGVmYWJiYzhlZTI3ODJlMjRlN2MwY2ZiOTVjNWQ3MzViNzgzYmU5Y2YwZjhlOTU1''@;'; put 'put ''YWYzNGEzMGU2MmI5NDUiXSxbImRkMzYyNWZhZWY1YmEwNjA3NDY2OTcxNmJiZDM3ODhkODliZGRlODE1OTU5OTY4MDkyZjc2Y2M0ZWI5YTk3ODciLCI3YTE4OGZhMzUyMGUzMGQ0NjFkYTI1MDEwNDU3MzFjYTk0MTQ2MTk4Mjg4MzM5NTkzN2Y2OGQwMGM2NDRhNTczIl0sWyJmNzEwZDc5ZDll''@;'; put 'put ''Yjk2MjI5N2U0ZjYyMzJiNDBlOGY3ZmViMmJjNjM4MTQ2MTRkNjkyYzEyZGU3NTI0MDgyMjFlIiwiZWE5OGU2NzIzMmQzYjMyOTVkM2I1MzU1MzIxMTVjY2FjODYxMmM3MjE4NTE2MTc1MjZhZTQ3YTljNzdiZmM4MiJdXX0sbmFmOnt3bmQ6Nyxwb2ludHM6W1siZjkzMDhhMDE5MjU4YzMxMDQ5''@;'; put 'put ''MzQ0Zjg1Zjg5ZDUyMjliNTMxYzg0NTgzNmY5OWIwODYwMWYxMTNiY2UwMzZmOSIsIjM4OGY3YjBmNjMyZGU4MTQwZmUzMzdlNjJhMzdmMzU2NjUwMGE5OTkzNGMyMjMxYjZjYjlmZDc1ODRiOGU2NzIiXSxbIjJmOGJkZTRkMWEwNzIwOTM1NWI0YTcyNTBhNWM1MTI4ZTg4Yjg0YmRkYzYxOWFi''@;'; put 'put ''N2NiYThkNTY5YjI0MGVmZTQiLCJkOGFjMjIyNjM2ZTVlM2Q2ZDRkYmE5ZGRhNmM5YzQyNmY3ODgyNzFiYWIwZDY4NDBkY2E4N2QzYWE2YWM2MmQ2Il0sWyI1Y2JkZjA2NDZlNWRiNGVhYTM5OGYzNjVmMmVhN2EwZTNkNDE5YjdlMDMzMGUzOWNlOTJiZGRlZGNhYzRmOWJjIiwiNmFlYmNhNDBi''@;'; put 'put ''YTI1NTk2MGEzMTc4ZDZkODYxYTU0ZGJhODEzZDBiODEzZmRlN2I1YTUwODI2MjgwODcyNjRkYSJdLFsiYWNkNDg0ZTJmMGM3ZjY1MzA5YWQxNzhhOWY1NTlhYmRlMDk3OTY5NzRjNTdlNzE0YzM1ZjExMGRmYzI3Y2NiZSIsImNjMzM4OTIxYjBhN2Q5ZmQ2NDM4MDk3MTc2M2I2MWU5YWRkODg4''@;'; put 'put ''YTQzNzVmOGUwZjA1Y2MyNjJhYzY0ZjljMzciXSxbIjc3NGFlN2Y4NThhOTQxMWU1ZWY0MjQ2YjcwYzY1YWFjNTY0OTk4MGJlNWMxNzg5MWJiZWMxNzg5NWRhMDA4Y2IiLCJkOTg0YTAzMmViNmI1ZTE5MDI0M2RkNTZkN2I3YjM2NTM3MmRiMWUyZGZmOWQ2YTgzMDFkNzRjOWM5NTNjNjFiIl0s''@;'; put 'put ''WyJmMjg3NzNjMmQ5NzUyODhiYzdkMWQyMDVjMzc0ODY1MWIwNzVmYmM2NjEwZTU4Y2RkZWVkZGY4ZjE5NDA1YWE4IiwiYWIwOTAyZThkODgwYTg5NzU4MjEyZWI2NWNkYWY0NzNhMWEwNmRhNTIxZmE5MWYyOWI1Y2I1MmRiMDNlZDgxIl0sWyJkNzkyNGQ0ZjdkNDNlYTk2NWE0NjVhZTMwOTVm''@;'; put 'put ''ZjQxMTMxZTU5NDZmM2M4NWY3OWU0NGFkYmNmOGUyN2UwODBlIiwiNTgxZTI4NzJhODZjNzJhNjgzODQyZWMyMjhjYzZkZWZlYTQwYWYyYmQ4OTZkM2E1YzUwNGRjOWZmNmEyNmI1OCJdLFsiZGVmZGVhNGNkYjY3Nzc1MGE0MjBmZWU4MDdlYWNmMjFlYjk4OThhZTc5Yjk3Njg3NjZlNGZhYTA0''@;'; put 'put ''YTJkNGEzNCIsIjQyMTFhYjA2OTQ2MzUxNjhlOTk3YjBlYWQyYTkzZGFlY2VkMWY0YTA0YTk1YzBmNmNmYjE5OWY2OWU1NmViNzciXSxbIjJiNGVhMGE3OTdhNDQzZDI5M2VmNWNmZjQ0NGY0OTc5ZjA2YWNmZWJkN2U4NmQyNzc0NzU2NTYxMzgzODViNmMiLCI4NWU4OWJjMDM3OTQ1ZDkzYjM0''@;'; put 'put ''MzA4M2I1YTFjODYxMzFhMDFmNjBjNTAyNjk3NjNiNTcwYzg1NGU1YzA5YjdhIl0sWyIzNTJiYmY0YTRjZGQxMjU2NGY5M2ZhMzMyY2UzMzMzMDFkOWFkNDAyNzFmODEwNzE4MTM0MGFlZjI1YmU1OWQ1IiwiMzIxZWI0MDc1MzQ4ZjUzNGQ1OWMxODI1OWRkYTNlMWY0YTFiM2IyZTcxYjEwMzlj''@;'; put 'put ''NjdiZDNkOGJjZjgxOTk4YyJdLFsiMmZhMjEwNGQ2YjM4ZDExYjAyMzAwMTA1NTk4NzkxMjRlNDJhYjhkZmVmZjVmZjI5ZGM5Y2RhZGQ0ZWNhY2MzZiIsIjJkZTEwNjgyOTVkZDg2NWI2NDU2OTMzNWJkNWRkODAxODFkNzBlY2ZjODgyNjQ4NDIzYmE3NmI1MzJiN2Q2NyJdLFsiOTI0ODI3OWIw''@;'; put 'put ''OWI0ZDY4ZGFiMjFhOWIwNjZlZGRhODMyNjNjM2Q4NGUwOTU3MmUyNjljYTBjZDdmNTQ1MzcxNCIsIjczMDE2ZjdiZjIzNGFhZGU1ZDFhYTcxYmRlYTJiMWZmM2ZjMGRlMmE4ODc5MTJmZmU1NGEzMmNlOTdjYjM0MDIiXSxbImRhZWQ0ZjJiZTNhOGJmMjc4ZTcwMTMyZmIwYmViNzUyMmY1NzBl''@;'; put 'put ''MTQ0YmY2MTVjMDdlOTk2ZDQ0M2RlZTg3MjkiLCJhNjlkY2U0YTdkNmM5OGU4ZDRhMWFjYTg3ZWY4ZDcwMDNmODNjMjMwZjNhZmE3MjZhYjQwZTUyMjkwYmUxYzU1Il0sWyJjNDRkMTJjNzA2NWQ4MTJlOGFjZjI4ZDdjYmIxOWY5MDExZWNkOWU5ZmRmMjgxYjBlNmEzYjVlODdkMjJlN2RiIiwi''@;'; put 'put ''MjExOWE0NjBjZTMyNmNkYzc2YzQ1OTI2Yzk4MmZkYWMwZTEwNmU4NjFlZGY2MWM1YTAzOTA2M2YwZTBlNjQ4MiJdLFsiNmEyNDViZjZkYzY5ODUwNGM4OWEyMGNmZGVkNjA4NTMxNTJiNjk1MzM2YzI4MDYzYjYxYzY1Y2JkMjY5ZTZiNCIsImUwMjJjZjQyYzJiZDRhNzA4YjNmNTEyNmYxNmEy''@;'; put 'put ''NGFkOGIzM2JhNDhkMDQyM2I2ZWZkNWU2MzQ4MTAwZDhhODIiXSxbIjE2OTdmZmE2ZmQ5ZGU2MjdjMDc3ZTNkMmZlNTQxMDg0Y2UxMzMwMGIwYmVjMTE0NmY5NWFlNTdmMGQwYmQ2YTUiLCJiOWMzOThmMTg2ODA2ZjVkMjc1NjE1MDZlNDU1NzQzM2EyY2YxNTAwOWU0OThhZTdhZGVlOWQ2M2Qw''@;'; put 'put ''MWIyMzk2Il0sWyI2MDViZGIwMTk5ODE3MThiOTg2ZDBmMDdlODM0Y2IwZDlkZWI4MzYwZmZiN2Y2MWRmOTgyMzQ1ZWYyN2E3NDc5IiwiMjk3MmQyZGU0ZjhkMjA2ODFhNzhkOTNlYzk2ZmUyM2MyNmJmYWU4NGZiMTRkYjQzYjAxZTFlOTA1NmI4YzQ5Il0sWyI2MmQxNGRhYjQxNTBiZjQ5NzQw''@;'; put 'put ''MmZkYzQ1YTIxNWUxMGRjYjAxYzM1NDk1OWIxMGNmZTMxYzdlOWQ4N2ZmMzNkIiwiODBmYzA2YmQ4Y2M1YjAxMDk4MDg4YTE5NTBlZWQwZGIwMWFhMTMyOTY3YWI0NzIyMzVmNTY0MjQ4M2IyNWVhZiJdLFsiODBjNjBhZDAwNDBmMjdkYWRlNWI0YjA2YzQwOGU1NmIyYzUwZTlmNTZiOWI4YjQy''@;'; put 'put ''NWU1NTVjMmY4NjMwOGI2ZiIsIjFjMzgzMDNmMWNjNWMzMGYyNmU2NmJhZDdmZTcyZjcwYTY1ZWVkNGNiZTcwMjRlYjFhYTAxZjU2NDMwYmQ1N2EiXSxbIjdhOTM3NWFkNjE2N2FkNTRhYTc0YzYzNDhjYzU0ZDM0NGNjNWRjOTQ4N2Q4NDcwNDlkNWVhYmIwZmEwM2M4ZmIiLCJkMGUzZmE5ZWNh''@;'; put 'put ''ODcyNjkwOTU1OWUwZDc5MjY5MDQ2YmRjNTllYTEwYzcwY2UyYjAyZDQ5OWVjMjI0ZGM3ZjciXSxbImQ1MjhlY2Q5YjY5NmI1NGM5MDdhOWVkMDQ1NDQ3YTc5YmI0MDhlYzM5YjY4ZGY1MDRiYjUxZjQ1OWJjM2ZmYzkiLCJlZWNmNDEyNTMxMzZlNWY5OTk2NmYyMTg4MWZkNjU2ZWJjNDM0NTQw''@;'; put 'put ''NWM1MjBkYmMwNjM0NjViNTIxNDA5OTMzIl0sWyI0OTM3MGE0YjVmNDM0MTJlYTI1ZjUxNGU4ZWNkYWQwNTI2NjExNWU0YTdlY2IxMzg3MjMxODA4ZjhiNDU5NjMiLCI3NThmM2Y0MWFmZDZlZDQyOGIzMDgxYjA1MTJmZDYyYTU0YzNmM2FmYmI1YjY3NjRiNjUzMDUyYTEyOTQ5YzlhIl0sWyI3''@;'; put 'put ''N2YyMzA5MzZlZTg4Y2JiZDczZGY5MzBkNjQ3MDJlZjg4MWQ4MTFlMGUxNDk4ZTJmMWMxM2ViMWZjMzQ1ZDc0IiwiOTU4ZWY0MmE3ODg2YjY0MDBhMDgyNjZlOWJhMWIzNzg5NmM5NTMzMGQ5NzA3N2NiYmU4ZWIzYzc2NzFjNjBkNiJdLFsiZjJkYWM5OTFjYzRjZTRiOWVhNDQ4ODdlNWM3YzBi''@;'; put 'put ''Y2U1OGM4MDA3NGFiOWQ0ZGJhZWIyODUzMWI3NzM5ZjUzMCIsImUwZGVkYzliM2IyZjhkYWQ0ZGExZjMyZGVjMjUzMWRmOWViNWZiZWIwNTk4ZTRmZDFhMTE3ZGJhNzAzYTNjMzciXSxbIjQ2M2IzZDlmNjYyNjIxZmIxYjRiZThmYmJlMjUyMDEyNWEyMTZjZGZjOWRhZTNkZWJjYmE0ODUwYzY5''@;'; put 'put ''MGQ0NWIiLCI1ZWQ0MzBkNzhjMjk2YzM1NDMxMTQzMDZkZDg2MjJkN2M2MjJlMjdjOTcwYTFkZTMxY2IzNzdiMDFhZjczMDdlIl0sWyJmMTZmODA0MjQ0ZTQ2ZTJhMDkyMzJkNGFmZjNiNTk5NzZiOThmYWMxNDMyOGEyZDFhMzI0OTZiNDk5OThmMjQ3IiwiY2VkYWJkOWI4MjIwM2Y3ZTEzZDIw''@;'; put 'put ''NmZjZGY0ZTMzZDkyYTZjNTNjMjZlNWNjZTI2ZDY1Nzk5NjJjNGUzMWRmNiJdLFsiY2FmNzU0MjcyZGM4NDU2M2IwMzUyYjdhMTQzMTFhZjU1ZDI0NTMxNWFjZTI3YzY1MzY5ZTE1ZjcxNTFkNDFkMSIsImNiNDc0NjYwZWYzNWY1ZjJhNDFiNjQzZmE1ZTQ2MDU3NWY0ZmE5Yjc5NjIyMzJhNWMz''@;'; put 'put ''MmY5MDgzMThhMDQ0NzYiXSxbIjI2MDBjYTRiMjgyY2I5ODZmODVkMGYxNzA5OTc5ZDhiNDRhMDljMDdjYjg2ZDdjMTI0NDk3YmM4NmYwODIxMjAiLCI0MTE5Yjg4NzUzYzE1YmQ2YTY5M2IwM2ZjZGRiYjQ1ZDVhYzZiZTc0YWI1ZjBlZjQ0YjBiZTk0NzVhN2U0YjQwIl0sWyI3NjM1Y2E3MmQ3''@;'; put 'put ''ZTg0MzJjMzM4ZWM1M2NkMTIyMjBiYzAxYzQ4Njg1ZTI0ZjdkYzhjNjAyYTc3NDY5OThlNDM1IiwiOTFiNjQ5NjA5NDg5ZDYxM2QxZDVlNTkwZjc4ZTZkNzRlY2ZjMDYxZDU3MDQ4YmFkOWU3NmYzMDJjNWI5YzYxIl0sWyI3NTRlMzIzOWYzMjU1NzBjZGJiZjRhODdkZWVlOGE2NmI3ZjJiMzM0''@;'; put 'put ''NzlkNDY4ZmJjMWE1MDc0M2JmNTZjYzE4IiwiNjczZmI4NmU1YmRhMzBmYjNjZDBlZDMwNGVhNDlhMDIzZWUzM2QwMTk3YTY5NWQwYzVkOTgwOTNjNTM2NjgzIl0sWyJlM2U2YmQxMDcxYTFlOTZhZmY1Nzg1OWM4MmQ1NzBmMDMzMDgwMDY2MWQxYzk1MmY5ZmUyNjk0NjkxZDliOWU4IiwiNTlj''@;'; put 'put ''OWUwYmJhMzk0ZTc2ZjQwYzBhYTU4Mzc5YTNjYjZhNWEyMjgzOTkzZTkwYzQxNjcwMDJhZjQ5MjBlMzdmNSJdLFsiMTg2YjQ4M2QwNTZhMDMzODI2YWU3M2Q4OGY3MzI5ODVjNGNjYjFmMzJiYTM1ZjRiNGNjNDdmZGNmMDRhYTZlYiIsIjNiOTUyZDMyYzY3Y2Y3N2UyZTE3NDQ2ZTIwNDE4MGFi''@;'; put 'put ''MjFmYjgwOTA4OTUxMzhiNGE0YTc5N2Y4NmU4MDg4OGIiXSxbImRmOWQ3MGE2Yjk4NzZjZTU0NGM5ODU2MWY0YmU0ZjcyNTQ0MmU2ZDJiNzM3ZDljOTFhODMyMTcyNGNlMDk2M2YiLCI1NWViMmRhZmQ4NGQ2Y2NkNWY4NjJiNzg1ZGMzOWQ0YWIxNTcyMjI3MjBlZjlkYTIxN2I4YzQ1Y2YyYmEy''@;'; put 'put ''NDE3Il0sWyI1ZWRkNWNjMjNjNTFlODdhNDk3Y2E4MTVkNWRjZTBmOGFiNTI1NTRmODQ5ZWQ4OTk1ZGU2NGM1ZjM0Y2U3MTQzIiwiZWZhZTljOGRiYzE0MTMwNjYxZThjZWMwMzBjODlhZDBjMTNjNjZjMGQxN2EyOTA1Y2RjNzA2YWI3Mzk5YTg2OCJdLFsiMjkwNzk4YzJiNjQ3NjgzMGRhMTJm''@;'; put 'put ''ZTAyMjg3ZTllNzc3YWEzZmJhMWMzNTViMTdhNzIyZDM2MmY4NDYxNGZiYSIsImUzOGRhNzZkY2Q0NDA2MjE5ODhkMDBiY2Y3OWFmMjVkNWIyOWMwOTRkYjJhMjMxNDZkMDAzYWZkNDE5NDNlN2EiXSxbImFmM2M0MjNhOTVkOWY1YjMwNTQ3NTRlZmExNTBhYzM5Y2QyOTU1MmZlMzYwMjU3MzYy''@;'; put 'put ''ZGZkZWNlZjQwNTNiNDUiLCJmOThhM2ZkODMxZWIyYjc0OWE5M2IwZTZmMzVjZmI0MGM4Y2Q1YWE2NjdhMTU1ODFiYzJmZWRlZDQ5OGZkOWM2Il0sWyI3NjZkYmIyNGQxMzRlNzQ1Y2NjYWEyOGM5OWJmMjc0OTA2YmI2NmIyNmRjZjk4ZGY4ZDJmZWQ1MGQ4ODQyNDlhIiwiNzQ0YjExNTJlYWNi''@;'; put 'put ''ZTVlMzhkY2M4ODc5ODBkYTM4Yjg5NzU4NGE2NWZhMDZjZWRkMmM5MjRmOTdjYmFjNTk5NiJdLFsiNTlkYmY0NmY4Yzk0NzU5YmEyMTI3N2MzMzc4NGY0MTY0NWY3YjQ0ZjZjNTk2YTU4Y2U5MmU2NjYxOTFhYmUzZSIsImM1MzRhZDQ0MTc1ZmJjMzAwZjRlYTZjZTY0ODMwOWEwNDJjZTczOWE3''@;'; put 'put ''OTE5Nzk4Y2Q4NWUyMTZjNGEzMDdmNmUiXSxbImYxM2FkYTk1MTAzYzQ1MzczMDVlNjkxZTc0ZTlhNGE4ZGQ2NDdlNzExYTk1ZTczY2I2MmRjNjAxOGNmZDg3YjgiLCJlMTM4MTdiNDRlZTE0ZGU2NjNiZjRiYzgwODM0MWYzMjY5NDllMjFhNmE3NWMyNTcwNzc4NDE5YmRhZjU3MzNkIl0sWyI3''@;'; put 'put ''NzU0YjRmYTBlOGFjZWQwNmQ0MTY3YTJjNTljY2E0Y2RhMTg2OWMwNmViYWRmYjY0ODg1NTAwMTVhODg1MjJjIiwiMzBlOTNlODY0ZTY2OWQ4MjIyNGI5NjdjMzAyMGI4ZmE4ZDFlNGUzNTBiNmNiY2M1MzdhNDhiNTc4NDExNjNhMiJdLFsiOTQ4ZGNhZGY1OTkwZTA0OGFhMzg3NGQ0NmFiZWY5''@;'; put 'put ''ZDcwMTg1OGY5NWRlODA0MWQyYTY4MjhjOTllMjI2MjUxOSIsImU0OTFhNDI1MzdmNmU1OTdkNWQyOGEzMjI0YjFiYzI1ZGY5MTU0ZWZiZDJlZjFkMmNiYmEyY2FlNTM0N2Q1N2UiXSxbIjc5NjI0MTQ0NTBjNzZjMTY4OWM3YjQ4ZjgyMDJlYzM3ZmIyMjRjZjVhYzBiZmExNTcwMzI4YThhM2Q3''@;'; put 'put ''Yzc3YWIiLCIxMDBiNjEwZWM0ZmZiNDc2MGQ1YzFmYzEzM2VmNmY2YjEyNTA3YTA1MWYwNGFjNTc2MGFmYTViMjlkYjgzNDM3Il0sWyIzNTE0MDg3ODM0OTY0YjU0YjE1YjE2MDY0NGQ5MTU0ODVhMTY5NzcyMjViODg0N2JiMGRkMDg1MTM3ZWM0N2NhIiwiZWYwYWZiYjIwNTYyMDU0NDhlMTY1''@;'; put 'put ''MmM0OGU4MTI3ZmM2MDM5ZTc3YzE1YzIzNzhiN2U3ZDE1YTBkZTI5MzMxMSJdLFsiZDNjYzMwYWQ2YjQ4M2U0YmM3OWNlMmM5ZGQ4YmM1NDk5M2U5NDdlYjhkZjc4N2I0NDI5NDNkM2Y3YjUyN2VhZiIsIjhiMzc4YTIyZDgyNzI3OGQ4OWM1ZTliZThmOTUwOGFlM2MyYWQ0NjI5MDM1ODYzMGFm''@;'; put 'put ''YjM0ZGIwNGVlZGUwYTQiXSxbIjE2MjRkODQ3ODA3MzI4NjBjZTFjNzhmY2JmZWZlMDhiMmIyOTgyM2RiOTEzZjY0OTM5NzViYTBmZjQ4NDc2MTAiLCI2ODY1MWNmOWI2ZGE5MDNlMDkxNDQ0OGM2Y2Q5ZDRjYTg5Njg3OGY1MjgyYmU0YzhjYzA2ZTJhNDA0MDc4NTc1Il0sWyI3MzNjZTgwZGE5''@;'; put 'put ''NTVhOGEyNjkwMmM5NTYzM2U2MmE5ODUxOTI0NzRiNWFmMjA3ZGE2ZGY3YjRmZDVmYzYxY2Q0IiwiZjU0MzVhMmJkMmJhZGY3ZDQ4NWE0ZDhiOGRiOWZjY2UzZTFlZjhlMDIwMWU0NTc4YzU0NjczYmMxZGM1ZWExZCJdLFsiMTVkOTQ0MTI1NDk0NTA2NGNmMWExYzMzYmJkM2I0OWY4OTY2YzUw''@;'; put 'put ''OTIxNzFlNjk5ZWYyNThkZmFiODFjMDQ1YyIsImQ1NmViMzBiNjk0NjNlNzIzNGY1MTM3YjczYjg0MTc3NDM0ODAwYmFjZWJmYzY4NWZjMzdiYmU5ZWZlNDA3MGQiXSxbImExZDBmY2YyZWM5ZGU2NzViNjEyMTM2ZTVjZTcwZDI3MWMyMTQxN2M5ZDJiOGFhYWFjMTM4NTk5ZDA3MTc5NDAiLCJl''@;'; put 'put ''ZGQ3N2Y1MGJjYjVhM2NhYjJlOTA3MzczMDk2NjdmMjY0MTQ2MmE1NDA3MGYzZDUxOTIxMmQzOWMxOTdhNjI5Il0sWyJlMjJmYmUxNWMwYWY4Y2NjNTc4MGMwNzM1Zjg0ZGJlOWE3OTBiYWRlZTgyNDVjMDZjN2NhMzczMzFjYjM2OTgwIiwiYTg1NWJhYmFkNWNkNjBjODhiNDMwYTY5ZjUzYTFh''@;'; put 'put ''N2EzODI4OTE1NDk2NDc5OWJlNDNkMDZkNzdkMzFkYTA2Il0sWyIzMTEwOTFkZDk4NjBlOGUyMGVlMTM0NzNjMTE1NWY1ZjY5NjM1ZTM5NDcwNGVhYTc0MDA5NDUyMjQ2Y2ZhOWIzIiwiNjZkYjY1NmY4N2QxZjA0ZmZmZDFmMDQ3ODhjMDY4MzA4NzFlYzVhNjRmZWVlNjg1YmQ4MGYwYjEyODZk''@;'; put 'put ''ODM3NCJdLFsiMzRjMWZkMDRkMzAxYmU4OWIzMWMwNDQyZDNlNmFjMjQ4ODM5MjhiNDVhOTM0MDc4MTg2N2Q0MjMyZWMyZGJkZiIsIjk0MTQ2ODVlOTdiMWI1OTU0YmQ0NmY3MzAxNzQxMzZkNTdmMWNlZWI0ODc0NDNkYzUzMjE4NTdiYTczYWJlZSJdLFsiZjIxOWVhNWQ2YjU0NzAxYzFjMTRk''@;'; put 'put ''ZTViNTU3ZWI0MmE4ZDEzZjNhYmJjZDA4YWZmY2MyYTVlNmIwNDliOGQ2MyIsIjRjYjk1OTU3ZTgzZDQwYjBmNzNhZjQ1NDRjY2NmNmIxZjRiMDhkM2MwN2IyN2ZiOGQ4YzI5NjJhNDAwNzY2ZDEiXSxbImQ3Yjg3NDBmNzRhOGZiYWFiMWY2ODNkYjhmNDVkZTI2NTQzYTU0OTBiY2E2MjcwODcy''@;'; put 'put ''MzY5MTI0NjlhMGI0NDgiLCJmYTc3OTY4MTI4ZDljOTJlZTEwMTBmMzM3YWQ0NzE3ZWZmMTVkYjVlZDNjMDQ5YjM0MTFlMDMxNWVhYTQ1OTNiIl0sWyIzMmQzMWMyMjJmOGY2ZjBlZjg2ZjdjOThkM2EzMzM1ZWFkNWJjZDMyYWJkZDk0Mjg5ZmU0ZDMwOTFhYTgyNGJmIiwiNWYzMDMyZjU4OTIx''@;'; put 'put ''NTZlMzljY2QzZDc5MTViOWUxZGEyZTZkYWM5ZTZmMjZlOTYxMTE4ZDE0Yjg0NjJlMTY2MSJdLFsiNzQ2MWYzNzE5MTRhYjMyNjcxMDQ1YTE1NWQ5ODMxZWE4NzkzZDc3Y2Q1OTU5MmM0MzQwZjg2Y2JjMTgzNDdiNSIsIjhlYzBiYTIzOGI5NmJlYzBjYmRkZGNhZTBhYTQ0MjU0MmVlZTFmZjUw''@;'; put 'put ''Yzk4NmVhNmIzOTg0N2IzY2MwOTJmZjYiXSxbImVlMDc5YWRiMWRmMTg2MDA3NDM1NmEyNWFhMzgyMDZhNmQ3MTZiMmMzZTY3NDUzZDI4NzY5OGJhZDdiMmIyZDYiLCI4ZGMyNDEyYWFmZTNiZTVjNGM1ZjM3ZTBlY2M1ZjlmNmE0NDY5ODlhZjA0YzRlMjVlYmFhYzQ3OWVjMWM4YzFlIl0sWyIx''@;'; put 'put ''NmVjOTNlNDQ3ZWM4M2YwNDY3YjE4MzAyZWU2MjBmN2U2NWRlMzMxODc0YzlkYzcyYmZkODYxNmJhOWRhNmI1IiwiNWU0NjMxMTUwZTYyZmI0MGQwZThjMmE3Y2E1ODA0YTM5ZDU4MTg2YTUwZTQ5NzEzOTYyNjc3OGUyNWIwNjc0ZCJdLFsiZWFhNWY5ODBjMjQ1ZjZmMDM4OTc4MjkwYWZhNzBi''@;'; put 'put ''NmJkODg1NTg5N2Y5OGI2YWE0ODViOTYwNjVkNTM3YmQ5OSIsImY2NWY1ZDNlMjkyYzJlMDgxOWE1MjgzOTFjOTk0NjI0ZDc4NDg2OWQ3ZTZlYTY3ZmIxODA0MTAyNGVkYzA3ZGMiXSxbIjc4Yzk0MDc1NDRhYzEzMjY5MmVlMTkxMGEwMjQzOTk1OGFlMDQ4NzcxNTEzNDJlYTk2YzRiNmIzNWE0''@;'; put 'put ''OWY1MSIsImYzZTAzMTkxNjllYjliODVkNTQwNDc5NTUzOWE1ZTY4ZmExZmJkNTgzYzA2NGQyNDYyYjY3NWYxOTRhM2RkYjQiXSxbIjQ5NGY0YmUyMTlhMWE3NzAxNmRjZDgzODQzMWFlYTAwMDFjZGM4YWU3YTZmYzY4ODcyNjU3OGQ5NzAyODU3YTUiLCI0MjI0MmE5NjkyODNhNWYzMzliYTdm''@;'; put 'put ''MDc1ZTM2YmEyYWY5MjVjZTMwZDc2N2VkNmU1NWY0YjAzMTg4MGQ1NjJjIl0sWyJhNTk4YTgwMzBkYTZkODZjNmJjN2YyZjUxNDRlYTU0OWQyODIxMWVhNThmYWE3MGViZjRjMWU2NjVjMWZlOWI1IiwiMjA0YjVkNmY4NDgyMmMzMDdlNGI0YTcxNDA3MzdhZWMyM2ZjNjNiNjViMzVmODZhMTAw''@;'; put 'put ''MjZkYmQyZDg2NGU2YiJdLFsiYzQxOTE2MzY1YWJiMmI1ZDA5MTkyZjVmMmRiZWFmZWMyMDhmMDIwZjEyNTcwYTE4NGRiYWRjM2U1ODU5NTk5NyIsIjRmMTQzNTFkMDA4N2VmYTQ5ZDI0NWIzMjg5ODQ5ODlkNWNhZjk0NTBmMzRiZmMwZWQxNmU5NmI1OGZhOTkxMyJdLFsiODQxZDYwNjNhNTg2''@;'; put 'put ''ZmE0NzVhNzI0NjA0ZGEwM2JjNWI5MmEyZTBkMmUwYTM2YWNmZTRjNzNhNTUxNDc0Mjg4MSIsIjczODY3ZjU5YzA2NTllODE5MDRmOWExYzc1NDM2OThlNjI1NjJkNjc0NGMxNjljZTdhMzZkZTAxYThkNjE1NCJdLFsiNWU5NWJiMzk5YTY5NzFkMzc2MDI2OTQ3Zjg5YmRlMmYyODJiMzM4MTA5''@;'; put 'put ''MjhiZTRkZWQxMTJhYzRkNzBlMjBkNSIsIjM5ZjIzZjM2NjgwOTA4NWJlZWJmYzcxMTgxMzEzNzc1YTk5YzlhZWQ3ZDhiYTM4YjE2MTM4NGM3NDYwMTI4NjUiXSxbIjM2ZTQ2NDFhNTM5NDhmZDQ3NmMzOWY4YTk5ZmQ5NzRlNWVjMDc1NjRiNTMxNWQ4YmY5OTQ3MWJjYTBlZjJmNjYiLCJkMjQy''@;'; put 'put ''NGIxYjFhYmU0ZWI4MTY0MjI3YjA4NWM5YWE5NDU2ZWExMzQ5M2ZkNTYzZTA2ZmQ1MWNmNTY5NGM3OGZjIl0sWyIzMzY1ODFlYTdiZmJiYjI5MGMxOTFhMmY1MDdhNDFjZjU2NDM4NDIxNzBlOTE0ZmFlYWIyN2MyYzU3OWY3MjYiLCJlYWQxMjE2ODU5NWZlMWJlOTkyNTIxMjliNmU1NmIzMzkx''@;'; put 'put ''ZjdhYjE0MTBjZDFlMGVmM2RjZGNhYmQyZmRhMjI0Il0sWyI4YWI4OTgxNmRhZGZkNmI2YTFmMjYzNGZjZjAwZWM4NDAzNzgxMDI1ZWQ2ODkwYzQ4NDk3NDI3MDZiZDQzZWRlIiwiNmZkY2VmMDlmMmY2ZDBhMDQ0ZTY1NGFlZjYyNDEzNmY1MDNkNDU5YzNlODk4NDU4NThhNDdhOTEyOWNkZDI0''@;'; put 'put ''ZSJdLFsiMWUzM2YxYTc0NmM5YzU3NzgxMzMzNDRkOTI5OWZjYWEyMGIwOTM4ZThhY2ZmMjU0NGJiNDAyODRiOGM1ZmI5NCIsIjYwNjYwMjU3ZGQxMWIzYWE5YzhlZDYxOGQyNGVkZmYyMzA2ZDMyMGYxZDAzMDEwZTMzYTdkMjA1N2YzYjNiNiJdLFsiODViN2MxZGNiM2NlYzFiN2VlN2YzMGRl''@;'; put 'put ''ZDc5ZGQyMGEwZWQxZjRjYzE4Y2JjZmNmYTQxMDM2MWZkOGYwOGYzMSIsIjNkOThhOWNkZDAyNmRkNDNmMzkwNDhmMjVhODg0N2Y0ZmNhZmFkMTg5NWQ3YTYzM2M2ZmVkM2MzNWU5OTk1MTEiXSxbIjI5ZGY5ZmJkOGQ5ZTQ2NTA5Mjc1ZjRiMTI1ZDZkNDVkN2ZiZTlhM2I4NzhhN2FmODcyYTI4''@;'; put 'put ''MDA2NjFhYzVmNTEiLCJiNGM0ZmU5OWM3NzVhNjA2ZTJkODg2MjE3OTEzOWZmZGE2MWRjODYxYzAxOWU1NWNkMjg3NmViMmEyN2Q4NGIiXSxbImEwYjFjYWUwNmIwYTg0N2EzZmVhNmU2NzFhYWY4YWRmZGZlNThjYTJmNzY4MTA1YzgwODJiMmU0NDlmY2UyNTIiLCJhZTQzNDEwMmVkZGUwOTU4''@;'; put 'put ''ZWM0YjE5ZDkxN2E2YTI4ZTZiNzJkYTE4MzRhZmYwZTY1MGYwNDk1MDNhMjk2Y2YyIl0sWyI0ZThjZWFmYjliM2U5YTEzNmRjN2ZmNjdlODQwMjk1YjQ5OWRmYjNiMjEzM2U0YmExMTNmMmU0YzBlMTIxZTUiLCJjZjIxNzQxMThjOGI2ZDdhNGI0OGY2ZDUzNGNlNWM3OTQyMmMwODZhNjM0NjA1''@;'; put 'put ''MDJiODI3Y2U2MmEzMjY2ODNjIl0sWyJkMjRhNDRlMDQ3ZTE5YjZmNWFmYjgxYzdjYTJmNjkwODBhNTA3NjY4OWEwMTA5MTlmNDI3MjVjMmI3ODlhMzNiIiwiNmZiOGQ1NTkxYjQ2NmY4ZmM2M2RiNTBmMWMwZjFjNjkwMTNmOTk2ODg3YjgyNDRkMmNkZWM0MTdhZmVhOGZhMyJdLFsiZWEwMTYw''@;'; put 'put ''NmE3YTZjOWNkZDI0OWZkZmNmYWNiOTk1ODQwMDFlZGQyOGFiYmFiNzdiNTEwNGU5OGU4ZTNiMzVkNCIsIjMyMmFmNDkwOGM3MzEyYjBjZmJmZTM2OWY3YTdiM2NkYjdkNDQ5NGJjMjgyMzcwMGNmZDY1MjE4OGEzZWE5OGQiXSxbImFmOGFkZGJmMmI2NjFjOGE2YzYzMjg2NTVlYjk2NjUxMjUy''@;'; put 'put ''MDA3ZDhjNWVhMzFiZTRhZDE5NmRlOGNlMjEzMWYiLCI2NzQ5ZTY3YzAyOWI4NWY1MmEwMzRlYWZkMDk2ODM2YjI1MjA4MTg2ODBlMjZhYzhmM2RmYmNkYjcxNzQ5NzAwIl0sWyJlM2FlMTk3NDU2NmNhMDZjYzUxNmQ0N2UwZmIxNjVhNjc0YTNkYWJjZmNhMTVlNzIyZjBlMzQ1MGY0NTg4OSIs''@;'; put 'put ''IjJhZWFiZTdlNDUzMTUxMDExNjIxN2YwN2JmNGQwNzMwMGRlOTdlNDg3NGY4MWY1MzM0MjBhNzJlZWIwYmQ2YTQiXSxbIjU5MWVlMzU1MzEzZDk5NzIxY2Y2OTkzZmZlZDFlM2UzMDE5OTNmZjNlZDI1ODgwMjA3NWVhOGNlZDM5N2UyNDYiLCJiMGVhNTU4YTExM2MzMGJlYTYwZmM0Nzc1NDYw''@;'; put 'put ''Yzc5MDFmZjBiMDUzZDI1Y2EyYmRlZWU5OGYxYTRiZTVkMTk2Il0sWyIxMTM5NmQ1NWZkYTU0YzQ5ZjE5YWE5NzMxOGQ4ZGE2MWZhODU4NGU0N2IwODQ5NDUwNzdjZjAzMjU1YjUyOTg0IiwiOTk4Yzc0YThjZDQ1YWMwMTI4OWQ1ODMzYTdiZWI0NzQ0ZmY1MzZiMDFiMjU3YmU0YzU3NjdiZWE5''@;'; put 'put ''M2VhNTdhNCJdLFsiM2M1ZDJhMWJhMzljNWExNzkwMDAwNzM4YzllMGM0MGI4ZGNkZmQ1NDY4NzU0YjY0MDU1NDAxNTdlMDE3YWE3YSIsImIyMjg0Mjc5OTk1YTM0ZTJmOWQ0ZGU3Mzk2ZmMxOGI4MGY5YjhiOWZkZDI3MGY2NjYxZjc5Y2E0YzgxYmQyNTciXSxbImNjODcwNGI4YTYwYTBkZWZh''@;'; put 'put ''M2E5OWE3Mjk5ZjJlOWMzZmJjMzk1YWZiMDRhYzA3ODQyNWVmOGExNzkzY2MwMzAiLCJiZGQ0NjAzOWZlZWQxNzg4MWQxZTA4NjJkYjM0N2Y4Y2YzOTViNzRmYzRiY2RjNGU5NDBiNzRlM2FjMWYxYjEzIl0sWyJjNTMzZTRmN2VhODU1NWFhY2Q5Nzc3YWM1Y2FkMjliOTdkZDRkZWZjY2M1M2Vl''@;'; put 'put ''N2VhMjA0MTE5YjI4ODliMTk3IiwiNmYwYTI1NmJjNWVmZGY0MjlhMmZiNjI0MmYxYTQzYTJkOWI5MjViYjRhNGIzYTI2YmI4ZTBmNDVlYjU5NjA5NiJdLFsiYzE0ZjhmMmNjYjI3ZDZmMTA5ZjZkMDhkMDNjYzk2YTY5YmE4YzM0ZWVjMDdiYmNmNTY2ZDQ4ZTMzZGE2NTkzIiwiYzM1OWQ2OTIz''@;'; put 'put ''YmIzOThmN2ZkNDQ3M2UxNmZlMWMyODQ3NWI3NDBkZDA5ODA3NWU2YzBlODY0OTExM2RjM2EzOCJdLFsiYTZjYmMzMDQ2YmM2YTQ1MGJhYzI0Nzg5ZmExNzExNWE0Yzk3MzllZDc1ZjhmMjFjZTQ0MWY3MmUwYjkwZTZlZiIsIjIxYWU3ZjQ2ODBlODg5YmIxMzA2MTllMmMwZjk1YTM2MGNlYjU3''@;'; put 'put ''M2M3MDYwMzEzOTg2MmFmZDYxN2ZhOWI5ZiJdLFsiMzQ3ZDZkOWEwMmM0ODkyN2ViZmI4NmMxMzU5YjFjYWYxMzBhM2MwMjY3ZDExY2U2MzQ0YjM5Zjk5ZDQzY2MzOCIsIjYwZWE3ZjYxYTM1MzUyNGQxYzk4N2Y2ZWNlYzkyZjA4NmQ1NjVhYjY4Nzg3MGNiMTI2ODlmZjFlMzFjNzQ0NDgiXSxb''@;'; put 'put ''ImRhNjU0NWQyMTgxZGI4ZDk4M2Y3ZGNiMzc1ZWY1ODY2ZDQ3YzY3YjFiZjMxYzhjZjg1NWVmNzQzN2I3MjY1NmEiLCI0OWI5NjcxNWFiNjg3OGE3OWU3OGYwN2NlNTY4MGM1ZDY2NzMwNTFiNDkzNWJkODk3ZmVhODI0Yjc3ZGMyMDhhIl0sWyJjNDA3NDdjYzlkMDEyY2IxYTEzYjgxNDgzMDlj''@;'; put 'put ''NmRlN2VjMjVkNjk0NWQ2NTcxNDZiOWQ1OTk0YjhmZWIxMTExIiwiNWNhNTYwNzUzYmUyYTEyZmM2ZGU2Y2FmMmNiNDg5NTY1ZGI5MzYxNTZiOTUxNGUxYmI1ZTgzMDM3ZTBmYTJkNCJdLFsiNGU0MmM4ZWM4MmM5OTc5OGNjZjNhNjEwYmU4NzBlNzgzMzhjN2Y3MTMzNDhiZDM0YzgyMDNlZjQw''@;'; put 'put ''MzdmMzUwMiIsIjc1NzFkNzRlZTVlMGZiOTJhN2E4YjMzYTA3NzgzMzQxYTU0OTIxNDRjYzU0YmNjNDBhOTQ0NzM2OTM2MDY0MzciXSxbIjM3NzVhYjcwODliYzZhZjgyM2FiYTJlMWFmNzBiMjM2ZDI1MWNhZGIwYzg2NzQzMjg3NTIyYTFiM2IwZGVkZWEiLCJiZTUyZDEwN2JjZmEwOWQ4YmNi''@;'; put 'put ''OTczNmE4MjhjZmE3ZmFjOGRiMTdiZjdhNzZhMmM0MmFkOTYxNDA5MDE4Y2Y3Il0sWyJjZWUzMWNiZjdlMzRlYzM3OWQ5NGZiODE0ZDNkNzc1YWQ5NTQ1OTVkMTMxNGJhODg0Njk1OWUzZTgyZjc0ZTI2IiwiOGZkNjRhMTRjMDZiNTg5YzI2Yjk0N2FlMmJjZjZiZmEwMTQ5ZWYwYmUxNGVkNGQ4''@;'; put 'put ''MGY0NDhhMDFjNDNiMWM2ZCJdLFsiYjRmOWVhZWEwOWI2OTE3NjE5ZjZlYTZhNGViNTQ2NGVmZGRiNThmZDQ1YjFlYmVmY2RjMWEwMWQwOGI0Nzk4NiIsIjM5ZTVjOTkyNWI1YTU0YjA3NDMzYTRmMThjNjE3MjZmOGJiMTMxYzAxMmNhNTQyZWIyNGE4YWMwNzIwMDY4MmEiXSxbImQ0MjYzZGZj''@;'; put 'put ''M2QyZGY5MjNhMDE3OWE0ODk2NmQzMGNlODRlMjUxNWFmYzNkY2NjMWI3NzkwNzc5MmViY2M2MGUiLCI2MmRmYWYwN2EwZjc4ZmViMzBlMzBkNjI5NTg1M2NlMTg5ZTEyNzc2MGFkNmNmN2ZhZTE2NGUxMjJhMjA4ZDU0Il0sWyI0ODQ1NzUyNDgyMGZhNjVhNGY4ZDM1ZWI2OTMwODU3YzAwMzJh''@;'; put 'put ''Y2MwYTRhMmRlNDIyMjMzZWVkYTg5NzYxMmM0IiwiMjVhNzQ4YWIzNjc5NzlkOTg3MzNjMzhhMWZhMWMyZTdkYzZjYzA3ZGIyZDYwYTlhZTdhNzZhYWE0OWJkMGY3NyJdLFsiZGZlZWVmMTg4MTEwMWYyY2IxMTY0NGYzYTJhZmRmYzIwNDVlMTk5MTkxNTI5MjNmMzY3YTE3NjdjMTFjY2VkYSIs''@;'; put 'put ''ImVjZmI3MDU2Y2YxZGUwNDJmOTQyMGJhYjM5Njc5M2MwYzM5MGJkZTc0YjRiYmRmZjE2YTgzYWUwOWE5YTc1MTciXSxbIjZkN2VmNmIxNzU0M2Y4MzczYzU3M2Y0NGUxZjM4OTgzNWQ4OWJjYmM2MDYyY2VkMzZjODJkZjgzYjhmYWU4NTkiLCJjZDQ1MGVjMzM1NDM4OTg2ZGZlZmExMGM1N2Zl''@;'; put 'put ''YTliY2M1MjFhMDk1OWIyZDgwYmJmNzRiMTkwZGNhNzEyZDEwIl0sWyJlNzU2MDVkNTkxMDJhNWEyNjg0NTAwZDNiOTkxZjJlM2YzYzg4YjkzMjI1NTQ3MDM1YWYyNWFmNjZlMDQ1NDFmIiwiZjVjNTQ3NTRhOGY3MWVlNTQwYjliNDg3Mjg0NzNlMzE0ZjcyOWFjNTMwOGIwNjkzODM2MDk5MGUy''@;'; put 'put ''YmZhZDEyNSJdLFsiZWI5ODY2MGY0YzRkZmFhMDZhMmJlNDUzZDUwMjBiYzk5YTBjMmU2MGFiZTM4ODQ1N2RkNDNmZWZiMWVkNjIwYyIsIjZjYjlhODg3NmQ5Y2I4NTIwNjA5YWYzYWRkMjZjZDIwYTBhN2NkOGE5NDExMTMxY2U4NWY0NDEwMDA5OTIyM2UiXSxbIjEzZTg3YjAyN2Q4NTE0ZDM1''@;'; put 'put ''OTM5ZjJlNjg5MmIxOTkyMjE1NDU5Njk0MTg4ODMzNmRjMzU2M2UzYjhkYmE5NDIiLCJmZWY1YTNjNjgwNTlhNmRlYzVkNjI0MTE0YmYxZTkxYWFjMmI5ZGE1NjhkNmFiZWIyNTcwZDU1NjQ2YjhhZGYxIl0sWyJlZTE2MzAyNmU5ZmQ2ZmUwMTdjMzhmMDZhNWJlNmZjMTI1NDI0YjM3MWNlMjcw''@;'; put 'put ''OGU3YmY0NDkxNjkxZTU3NjRhIiwiMWFjYjI1MGYyNTVkZDYxYzQzZDk0Y2NjNjcwZDBmNThmNDlhZTNmYTE1Yjk2NjIzZTU0MzBkYTBhZDZjNjJiMiJdLFsiYjI2OGY1ZWY5YWQ1MWU0ZDc4ZGUzYTc1MGMyZGM4OWIxZTYyNmQ0MzUwNTg2Nzk5OTkzMmU1ZGIzM2FmM2Q4MCIsIjVmMzEwZDRi''@;'; put 'put ''M2M5OWI5ZWJiMTlmNzdkNDFjMWRlZTAxOGNmMGQzNGZkNDE5MTYxNDAwM2U5NDVhMTIxNmU0MjMiXSxbImZmMDdmMzExOGE5ZGYwMzVlOWZhZDg1ZWI2YzdiZmU0MmIwMmYwMWNhOTljZWVhM2JmN2ZmZGJhOTNjNDc1MGQiLCI0MzgxMzZkNjAzZTg1OGEzYTVjNDQwYzM4ZWNjYmFkZGMxZDI5''@;'; put 'put ''NDIxMTRlMmVkZGQ0NzQwZDA5OGNlZDFmMGQ4Il0sWyI4ZDhiOTg1NWM3YzA1MmEzNDE0NmZkMjBmZmI2NThiZWE0YjlmNjllMGQ4MjVlYmVjMTZlOGMzY2UyYjUyNmExIiwiY2RiNTU5ZWVkYzJkNzlmOTI2YmFmNDRmYjg0ZWE0ZDQ0YmNmNTBmZWU1MWQ3Y2ViMzBlMmU3ZjQ2MzAzNjc1OCJd''@;'; put 'put ''LFsiNTJkYjBiNTM4NGRmYmYwNWJmYTlkNDcyZDdhZTI2ZGZlNGI4NTFjZWNhOTFiMWViYTU0MjYzMTgwZGEzMmI2MyIsImMzYjk5N2QwNTBlZTVkNDIzZWJhZjY2YTZkYjlmNTdiMzE4MGM5MDI4NzU2NzlkZTkyNGI2OWQ4NGE3YjM3NSJdLFsiZTYyZjk0OTBkM2Q1MWRhNjM5NWVmZDI0ZTgw''@;'; put 'put ''OTE5Y2M3ZDBmMjljM2YzZmE0OGM2ZmZmNTQzYmVjYmQ0MzM1MiIsIjZkODlhZDdiYTQ4NzZiMGIyMmMyY2EyODBjNjgyODYyZjM0MmM4NTkxZjFkYWY1MTcwZTA3YmZkOWNjYWZhN2QiXSxbIjdmMzBlYTI0NzZiMzk5YjQ5NTc1MDljODhmNzdkMDE5MWFmYTJmZjVjYjdiMTRmZDZkOGU3ZDY1''@;'; put 'put ''YWFhYjExOTMiLCJjYTVlZjdkNGIyMzFjOTRjM2IxNTM4OWE1ZjYzMTFlOWRhZmY3YmI2N2IxMDNlOTg4MGVmNGJmZjYzN2FjYWVjIl0sWyI1MDk4ZmYxZTFkOWYxNGZiNDZhMjEwZmFkYTZjOTAzZmVmMGZiN2I0YTFkZDFkOWFjNjBhMDM2MTgwMGI3YTAwIiwiOTczMTE0MWQ4MWZjOGY4MDg0''@;'; put 'put ''ZDM3YzZlNzU0MjAwNmIzZWUxYjQwZDYwZGZlNTM2MmE1YjEzMmZkMTdkZGMwIl0sWyIzMmI3OGM3ZGU5ZWU1MTJhNzI4OTViZTZiOWNiZWZhNmUyZjNjNGNjY2U0NDVjOTZiOWYyYzgxZTI3NzhhZDU4IiwiZWUxODQ5ZjUxM2RmNzFlMzJlZmMzODk2ZWUyODI2MGM3M2JiODA1NDdhZTIyNzVi''@;'; put 'put ''YTQ5NzIzNzc5NGM4NzUzYyJdLFsiZTJjYjc0ZmRkYzhlOWZiY2QwNzZlZWYyYTdjNzJiMGNlMzdkNTBmMDgyNjlkZmMwNzRiNTgxNTUwNTQ3YTRmNyIsImQzYWEyZWQ3MWM5ZGQyMjQ3YTYyZGYwNjI3MzZlYjBiYWRkZWE5ZTM2MTIyZDJiZTg2NDFhYmNiMDA1Y2M0YTQiXSxbIjg0Mzg0NDc1''@;'; put 'put ''NjZkNGQ3YmVkYWRjMjk5NDk2YWIzNTc0MjYwMDlhMzVmMjM1Y2IxNDFiZTBkOTljZDEwYWUzYTgiLCJjNGUxMDIwOTE2OTgwYTRkYTVkMDFhYzVlNmFkMzMwNzM0ZWYwZDc5MDY2MzFjNGYyMzkwNDI2YjJlZGQ3OTFmIl0sWyI0MTYyZDQ4OGI4OTQwMjAzOWI1ODRjNmZjNmMzMDg4NzA1ODdk''@;'; put 'put ''OWM0NmY2NjBiODc4YWI2NWM4MmM3MTFkNjdlIiwiNjcxNjNlOTAzMjM2Mjg5Zjc3NmYyMmMyNWZiOGEzYWZjMTczMmYyYjg0YjRlOTVkYmRhNDdhZTVhMDg1MjY0OSJdLFsiM2ZhZDNmYTg0Y2FmMGYzNGYwZjg5YmZkMmRjZjU0ZmMxNzVkNzY3YWVjM2U1MDY4NGYzYmE0YTRiZjVmNjgzZCIs''@;'; put 'put ''ImNkMWJjN2NiNmNjNDA3YmIyZjBjYTY0N2M3MThhNzMwY2Y3MTg3MmU3ZDBkMmE1M2ZhMjBlZmNkZmU2MTgyNiJdLFsiNjc0ZjI2MDBhMzAwN2EwMDU2OGMxYTdjZTA1ZDA4MTZjMWZiODRiZjEzNzA3OThmMWM2OTUzMmZhZWIxYTg2YiIsIjI5OWQyMWY5NDEzZjMzYjNlZGY0M2IyNTcwMDQ1''@;'; put 'put ''ODBiNzBkYjU3ZGEwYjE4MjI1OWUwOWVlY2M2OWUwZDM4YTUiXSxbImQzMmY0ZGE1NGFkZTc0YWJiODFiODE1YWQxZmIzYjI2M2Q4MmQ2YzY5MjcxNGJjZmY4N2QyOWJkNWVlOWYwOGYiLCJmOTQyOWU3MzhiOGU1M2I5NjhlOTkwMTZjMDU5NzA3NzgyZTE0ZjQ1MzUzNTlkNTgyZmM0MTY5MTBi''@;'; put 'put ''M2VlYTg3Il0sWyIzMGU0ZTY3MDQzNTM4NTU1NmU1OTM2NTcxMzU4NDVkMzZmYmI2OTMxZjcyYjA4Y2IxZWQ5NTRmMWUzY2UzZmY2IiwiNDYyZjliY2U2MTk4OTg2Mzg0OTkzNTAxMTNiYmM5YjEwYTg3OGQzNWRhNzA3NDBkYzY5NWE1NTllYjg4ZGI3YiJdLFsiYmUyMDYyMDAzYzUxY2MzMDA0''@;'; put 'put ''NjgyOTA0MzMwZTRkZWU3ZjNkY2QxMGIwMWU1ODBiZjE5NzFiMDRkNGNhZDI5NyIsIjYyMTg4YmM0OWQ2MWU1NDI4NTczZDQ4YTc0ZTFjNjU1YjFjNjEwOTA5MDU2ODJhMGQ1NTU4ZWQ3MmRjY2I5YmMiXSxbIjkzMTQ0NDIzYWNlMzQ1MWVkMjllMGZiOWFjMmFmMjExY2I2ZTg0YTYwMWRmNTk5''@;'; put 'put ''M2M0MTk4NTlmZmY1ZGYwNGEiLCI3YzEwZGZiMTY0YzM0MjVmNWM3MWEzZjlkNzk5MjAzOGYxMDY1MjI0ZjcyYmI5ZDFkOTAyYTZkMTMwMzdiNDdjIl0sWyJiMDE1ZjgwNDRmNWZjYmRjZjIxY2EyNmQ2YzM0ZmI4MTk3ODI5MjA1YzdiN2QyYTdjYjY2NDE4YzE1N2IxMTJjIiwiYWI4YzFlMDg2''@;'; put 'put ''ZDA0ZTgxMzc0NGE2NTViMmRmOGQ1ZjgzYjNjZGM2ZmFhMzA4OGMxZDNhZWExNDU0ZTNhMWQ1ZiJdLFsiZDVlOWUxZGE2NDlkOTdkODllNDg2ODExN2E0NjVhM2E0ZjhhMThkZTU3YTE0MGQzNmIzZjJhZjM0MWEyMWI1MiIsIjRjYjA0NDM3ZjM5MWVkNzMxMTFhMTNjYzFkNGRkMGRiMTY5MzQ2''@;'; put 'put ''NWMyMjQwNDgwZDg5NTVlODU5MmYyNzQ0N2EiXSxbImQzYWU0MTA0N2RkN2NhMDY1ZGJmOGVkNzdiOTkyNDM5OTgzMDA1Y2Q3MmUxNmQ2Zjk5NmE1MzE2ZDM2OTY2YmIiLCJiZDFhZWIyMWFkMjJlYmIyMmExMGYwMzAzNDE3YzZkOTY0ZjhjZGQ3ZGYwYWNhNjE0YjEwZGMxNGQxMjVhYzQ2Il0s''@;'; put 'put ''WyI0NjNlMjc2M2Q4ODVmOTU4ZmM2NmNkZDIyODAwZjBhNDg3MTk3ZDBhODJlMzc3YjQ5ZjgwYWY4N2M4OTdiMDY1IiwiYmZlZmFjZGIwZTVkMGZkN2RmM2EzMTFhOTRkZTA2MmIyNmI4MGM2MWZiYzk3NTA4Yjc5OTkyNjcxZWY3Y2E3ZiJdLFsiNzk4NWZkZmQxMjdjMDU2N2M2ZjUzZWMxYmI2''@;'; put 'put ''M2VjMzE1OGU1OTdjNDBiZmU3NDdjODNjZGRmYzkxMDY0MTkxNyIsIjYwM2MxMmRhZjNkOTg2MmVmMmIyNWZlMWRlMjg5YWVkMjRlZDI5MWUwZWM2NzA4NzAzYTViZDU2N2YzMmVkMDMiXSxbIjc0YTFhZDZiNWY3NmUzOWRiMmRkMjQ5NDEwZWFjN2Y5OWU3NGM1OWNiODNkMmQwZWQ1ZmYxNTQz''@;'; put 'put ''ZGE3NzAzZTkiLCJjYzYxNTdlZjE4YzljNjNjZDYxOTNkODM2MzFiYmVhMDA5M2UwOTY4OTQyZThjMzNkNTczN2ZkNzkwZTBkYjA4Il0sWyIzMDY4MmE1MDcwMzM3NWY2MDJkNDE2NjY0YmExOWI3ZmM5YmFiNDJjNzI3NDc0NjNhNzFkMDg5NmIyMmY2ZGEzIiwiNTUzZTA0ZjZiMDE4YjRmYTZj''@;'; put 'put ''OGYzOWU3ZjMxMWQzMTc2MjkwZDBlMGYxOWNhNzNmMTc3MTRkOTk3N2EyMmZmOCJdLFsiOWUyMTU4ZjBkN2MwZDVmMjZjMzc5MWVmZWZhNzk1OTc2NTRlN2EyYjI0NjRmNTJiMWVlNmMxMzQ3NzY5ZWY1NyIsIjcxMmZjZGQxYjkwNTNmMDkwMDNhMzQ4MWZhNzc2MmU5ZmZkN2M4ZWYzNWEzODUw''@;'; put 'put ''OWUyZmJmMjYyOTAwODM3MyJdLFsiMTc2ZTI2OTg5YTQzYzljZmViYTQwMjljMjAyNTM4YzI4MTcyZTU2NmUzYzRmY2U3MzIyODU3ZjNiZTMyN2Q2NiIsImVkOGNjOWQwNGIyOWViODc3ZDI3MGI0ODc4ZGM0M2MxOWFlZmQzMWY0ZWVlMDllZTdiNDc4MzRjMWZhNGIxYzMiXSxbIjc1ZDQ2ZWZl''@;'; put 'put ''YTM3NzFlNmU2OGFiYjg5YTEzYWQ3NDdlY2YxODkyMzkzZGZjNGYxYjcwMDQ3ODhjNTAzNzRkYTgiLCI5ODUyMzkwYTk5NTA3Njc5ZmQwYjg2ZmQyYjM5YTg2OGQ3ZWZjMjIxNTEzNDZlMWEzY2E0NzI2NTg2YTZiZWQ4Il0sWyI4MDlhMjBjNjdkNjQ5MDBmZmI2OThjNGM4MjVmNmQ1ZjIzMTBm''@;'; put 'put ''YjA0NTFjODY5MzQ1YjczMTlmNjQ1NjA1NzIxIiwiOWU5OTQ5ODBkOTkxN2UyMmI3NmIwNjE5MjdmYTA0MTQzZDA5NmNjYzU0OTYzZTZhNWViZmE1ZjNmOGUyODZjMSJdLFsiMWIzODkwM2E0M2Y3ZjExNGVkNDUwMGI0ZWFjNzA4M2ZkZWZlY2UxY2YyOWM2MzUyOGQ1NjM0NDZmOTcyYzE4MCIs''@;'; put 'put ''IjQwMzZlZGM5MzFhNjBhZTg4OTM1M2Y3N2ZkNTNkZTRhMjcwOGIyNmI2ZjVkYTcyYWQzMzk0MTE5ZGFmNDA4ZjkiXV19fX0sMzEzNjoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1xLHk9Xyg4ODcyMyksZz1fKDM5MjEwKSxCPV8oMjE4MzIpO0kuYXNzZXJ0PWcsSS50b0FycmF5PUIu''@;'; put 'put ''dG9BcnJheSxJLnplcm8yPUIuemVybzIsSS50b0hleD1CLnRvSGV4LEkuZW5jb2RlPUIuZW5jb2RlLEkuZ2V0TkFGPWZ1bmN0aW9uIHcoTixMLEspe3ZhciBXLFU9bmV3IEFycmF5KE1hdGgubWF4KE4uYml0TGVuZ3RoKCksSykrMSk7Zm9yKFc9MDtXPFUubGVuZ3RoO1crPTEpVVtXXT0wO3Zh''@;'; put 'put ''ciBZPTE8PEwrMSxYPU4uY2xvbmUoKTtmb3IoVz0wO1c8VS5sZW5ndGg7VysrKXt2YXIgZWUsSj1YLmFuZGxuKFktMSk7WC5pc09kZCgpP1guaXN1Ym4oZWU9Sj4oWT4+MSktMT8oWT4+MSktSjpKKTplZT0wLFVbV109ZWUsWC5pdXNocm4oMSl9cmV0dXJuIFV9LEkuZ2V0SlNGPWZ1bmN0aW9u''@;'; put 'put ''IFAoTixMKXt2YXIgSz1bW10sW11dO049Ti5jbG9uZSgpLEw9TC5jbG9uZSgpO2Zvcih2YXIgWSxVPTAsVz0wO04uY21wbigtVSk+MHx8TC5jbXBuKC1XKT4wOyl7dmFyIEoscmUsWD1OLmFuZGxuKDMpK1UmMyxlZT1MLmFuZGxuKDMpK1cmMzszPT09WCYmKFg9LTEpLDM9PT1lZSYmKGVlPS0x''@;'; put 'put ''KSxKPTEmWD8zIT0oWT1OLmFuZGxuKDcpK1UmNykmJjUhPT1ZfHwyIT09ZWU/WDotWDowLEtbMF0ucHVzaChKKSxyZT0xJmVlPzMhPShZPUwuYW5kbG4oNykrVyY3KSYmNSE9PVl8fDIhPT1YP2VlOi1lZTowLEtbMV0ucHVzaChyZSksMipVPT09SisxJiYoVT0xLVUpLDIqVz09PXJlKzEmJihX''@;'; put 'put ''PTEtVyksTi5pdXNocm4oMSksTC5pdXNocm4oMSl9cmV0dXJuIEt9LEkuY2FjaGVkUHJvcGVydHk9ZnVuY3Rpb24gRihOLEwsSyl7dmFyIFU9Il8iK0w7Ti5wcm90b3R5cGVbTF09ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpc1tVXT90aGlzW1VdOnRoaXNbVV09Sy5jYWxsKHRoaXMp''@;'; put 'put ''fX0sSS5wYXJzZUJ5dGVzPWZ1bmN0aW9uIE8oTil7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBOP0kudG9BcnJheShOLCJoZXgiKTpOfSxJLmludEZyb21MRT1mdW5jdGlvbiB6KE4pe3JldHVybiBuZXcgeShOLCJoZXgiLCJsZSIpfX0sODg3MjM6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24o''@;'; put 'put ''SSx5KXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZyhWLHApe2lmKCFWKXRocm93IG5ldyBFcnJvcihwfHwiQXNzZXJ0aW9uIGZhaWxlZCIpfWZ1bmN0aW9uIEIoVixwKXtWLnN1cGVyXz1wO3ZhciBiPWZ1bmN0aW9uKCl7fTtiLnByb3RvdHlwZT1wLnByb3RvdHlwZSxWLnByb3RvdHlwZT1uZXcg''@;'; put 'put ''YixWLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1WfWZ1bmN0aW9uIHcoVixwLGIpe2lmKHcuaXNCTihWKSlyZXR1cm4gVjt0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCxudWxsIT09ViYmKCgibGUiPT09cHx8ImJlIj09PXApJiYoYj1w''@;'; put 'put ''LHA9MTApLHRoaXMuX2luaXQoVnx8MCxwfHwxMCxifHwiYmUiKSl9dmFyIFA7Im9iamVjdCI9PXR5cGVvZiBJP0kuZXhwb3J0cz13OnkuQk49dyx3LkJOPXcsdy53b3JkU2l6ZT0yNjt0cnl7UD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIHdpbmRvdy5CdWZmZXI8InUiP3dpbmRvdy5CdWZm''@;'; put 'put ''ZXI6Xyg3OTM2OCkuQnVmZmVyfWNhdGNoe31mdW5jdGlvbiBGKFYscCl7dmFyIGI9Vi5jaGFyQ29kZUF0KHApO3JldHVybiBiPj02NSYmYjw9NzA/Yi01NTpiPj05NyYmYjw9MTAyP2ItODc6Yi00OCYxNX1mdW5jdGlvbiBPKFYscCxiKXt2YXIgeD1GKFYsYik7cmV0dXJuIGItMT49cCYmKHh8''@;'; put 'put ''PUYoVixiLTEpPDw0KSx4fWZ1bmN0aW9uIHooVixwLGIseCl7Zm9yKHZhciBDPTAsVD1NYXRoLm1pbihWLmxlbmd0aCxiKSxIPXA7SDxUO0grKyl7dmFyIGo9Vi5jaGFyQ29kZUF0KEgpLTQ4O0MqPXgsQys9aj49NDk/ai00OSsxMDpqPj0xNz9qLTE3KzEwOmp9cmV0dXJuIEN9dy5pc0JOPWZ1''@;'; put 'put ''bmN0aW9uKHApe3JldHVybiBwIGluc3RhbmNlb2Ygd3x8bnVsbCE9PXAmJiJvYmplY3QiPT10eXBlb2YgcCYmcC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PXcud29yZFNpemUmJkFycmF5LmlzQXJyYXkocC53b3Jkcyl9LHcubWF4PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPjA/cDpi''@;'; put 'put ''fSx3Lm1pbj1mdW5jdGlvbihwLGIpe3JldHVybiBwLmNtcChiKTwwP3A6Yn0sdy5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24ocCxiLHgpe2lmKCJudW1iZXIiPT10eXBlb2YgcClyZXR1cm4gdGhpcy5faW5pdE51bWJlcihwLGIseCk7aWYoIm9iamVjdCI9PXR5cGVvZiBwKXJldHVybiB0aGlz''@;'; put 'put ''Ll9pbml0QXJyYXkocCxiLHgpOyJoZXgiPT09YiYmKGI9MTYpLGcoYj09PSgwfGIpJiZiPj0yJiZiPD0zNik7dmFyIEM9MDsiLSI9PT0ocD1wLnRvU3RyaW5nKCkucmVwbGFjZSgvXHMrL2csIiIpKVswXSYmKEMrKyx0aGlzLm5lZ2F0aXZlPTEpLEM8cC5sZW5ndGgmJigxNj09PWI/dGhpcy5f''@;'; put 'put ''cGFyc2VIZXgocCxDLHgpOih0aGlzLl9wYXJzZUJhc2UocCxiLEMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KSkpfSx3LnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbihwLGIseCl7cDwwJiYodGhpcy5uZWdhdGl2ZT0xLHA9LXApLHA8NjcxMDg4''@;'; put 'put ''NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnBdLHRoaXMubGVuZ3RoPTEpOnA8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKTooZyhwPDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYz''@;'; put 'put ''JnAscC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSwibGUiPT09eCYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGIseCl9LHcucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24ocCxiLHgpe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwLmxlbmd0aCkscC5sZW5n''@;'; put 'put ''dGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwocC5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgQz0wO0M8dGhpcy5sZW5ndGg7QysrKXRoaXMud29yZHNbQ109MDt2YXIg''@;'; put 'put ''VCxILGo9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xLFQ9MDtDPj0wO0MtPTMpdGhpcy53b3Jkc1tUXXw9KEg9cFtDXXxwW0MtMV08PDh8cFtDLTJdPDwxNik8PGomNjcxMDg4NjMsdGhpcy53b3Jkc1tUKzFdPUg+Pj4yNi1qJjY3MTA4ODYzLChqKz0yNCk+PTI2JiYoai09MjYsVCsr''@;'; put 'put ''KTtlbHNlIGlmKCJsZSI9PT14KWZvcihDPTAsVD0wO0M8cC5sZW5ndGg7Qys9Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQysxXTw8OHxwW0MrMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO3Jl''@;'; put 'put ''dHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbihwLGIseCl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKChwLmxlbmd0aC1iKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53''@;'; put 'put ''b3Jkc1tDXT0wO3ZhciBqLFQ9MCxIPTA7aWYoImJlIj09PXgpZm9yKEM9cC5sZW5ndGgtMTtDPj1iO0MtPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7ZWxzZSBmb3IoQz0ocC5sZW5n''@;'; put 'put ''dGgtYiklMj09MD9iKzE6YjtDPHAubGVuZ3RoO0MrPTIpaj1PKHAsYixDKTw8VCx0aGlzLndvcmRzW0hdfD02NzEwODg2MyZqLFQ+PTE4PyhULT0xOCx0aGlzLndvcmRzW0grPTFdfD1qPj4+MjYpOlQrPTg7dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHAs''@;'; put 'put ''Yix4KXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgQz0wLFQ9MTtUPD02NzEwODg2MztUKj1iKUMrKztDLS0sVD1UL2J8MDtmb3IodmFyIEg9cC5sZW5ndGgteCxqPUglQyxFPU1hdGgubWluKEgsSC1qKSt4LG09MCxBPXg7QTxFO0ErPUMpbT16KHAsQSxBK0MsYiksdGhp''@;'; put 'put ''cy5pbXVsbihUKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKTtpZigwIT09ail7dmFyIG9lPTE7Zm9yKG09eihwLEEscC5sZW5ndGgsYiksQT0wO0E8ajtBKyspb2UqPWI7dGhpcy5pbXVsbihvZSksdGhpcy53b3Jkc1swXSttPDY3MTA4''@;'; put 'put ''ODY0P3RoaXMud29yZHNbMF0rPW06dGhpcy5faWFkZG4obSl9dGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHApe3Aud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoO2IrKylwLndvcmRzW2JdPXRoaXMud29yZHNbYl07''@;'; put 'put ''cC5sZW5ndGg9dGhpcy5sZW5ndGgscC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHAucmVkPXRoaXMucmVkfSx3LnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciBwPW5ldyB3KG51bGwpO3JldHVybiB0aGlzLmNvcHkocCkscH0sdy5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbihwKXtm''@;'; put 'put ''b3IoO3RoaXMubGVuZ3RoPHA7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlz''@;'; put 'put ''Ll9ub3JtU2lnbigpfSx3LnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sdy5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD8iPEJO''@;'; put 'put ''LVI6ICI6IjxCTjogIikrdGhpcy50b1N0cmluZygxNikrIj4ifTt2YXIgTj1bIiIsIjAiLCIwMCIsIjAwMCIsIjAwMDAiLCIwMDAwMCIsIjAwMDAwMCIsIjAwMDAwMDAiLCIwMDAwMDAwMCIsIjAwMDAwMDAwMCIsIjAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMCIsIjAw''@;'; put 'put ''MDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiLCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiXSxMPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYs''@;'; put 'put ''Niw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLEs9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwx''@;'; put 'put ''Njc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3''@;'; put 'put ''NSw2MDQ2NjE3Nl07ZnVuY3Rpb24gVyhWLHAsYil7Yi5uZWdhdGl2ZT1wLm5lZ2F0aXZlXlYubmVnYXRpdmU7dmFyIHg9Vi5sZW5ndGgrcC5sZW5ndGh8MDtiLmxlbmd0aD14LHg9eC0xfDA7dmFyIEM9MHxWLndvcmRzWzBdLFQ9MHxwLndvcmRzWzBdLEg9QypULEU9SC82NzEwODg2NHwwO2Iu''@;'; put 'put ''d29yZHNbMF09NjcxMDg4NjMmSDtmb3IodmFyIG09MTttPHg7bSsrKXtmb3IodmFyIEE9RT4+PjI2LG9lPTY3MTA4ODYzJkUsdGU9TWF0aC5taW4obSxwLmxlbmd0aC0xKSxzZT1NYXRoLm1heCgwLG0tVi5sZW5ndGgrMSk7c2U8PXRlO3NlKyspQSs9KEg9KEM9MHxWLndvcmRzW20tc2V8MF0p''@;'; put 'put ''KihUPTB8cC53b3Jkc1tzZV0pK29lKS82NzEwODg2NHwwLG9lPTY3MTA4ODYzJkg7Yi53b3Jkc1ttXT0wfG9lLEU9MHxBfXJldHVybiAwIT09RT9iLndvcmRzW21dPTB8RTpiLmxlbmd0aC0tLGIuc3RyaXAoKX13LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbihwLGIpe3ZhciB4O2lmKGI9''@;'; put 'put ''MHxifHwxLDE2PT09KHA9cHx8MTApfHwiaGV4Ij09PXApe3g9IiI7Zm9yKHZhciBDPTAsVD0wLEg9MDtIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9dGhpcy53b3Jkc1tIXSxFPSgxNjc3NzIxNSYoajw8Q3xUKSkudG9TdHJpbmcoMTYpO1Q9aj4+PjI0LUMmMTY3NzcyMTUsKEMrPTIpPj0yNiYm''@;'; put 'put ''KEMtPTI2LEgtLSkseD0wIT09VHx8SCE9PXRoaXMubGVuZ3RoLTE/Tls2LUUubGVuZ3RoXStFK3g6RSt4fWZvcigwIT09VCYmKHg9VC50b1N0cmluZygxNikreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWlmKHA9PT0oMHxw''@;'; put 'put ''KSYmcD49MiYmcDw9MzYpe3ZhciBtPUxbcF0sQT1LW3BdO3g9IiI7dmFyIG9lPXRoaXMuY2xvbmUoKTtmb3Iob2UubmVnYXRpdmU9MDshb2UuaXNaZXJvKCk7KXt2YXIgdGU9b2UubW9kbihBKS50b1N0cmluZyhwKTt4PShvZT1vZS5pZGl2bihBKSkuaXNaZXJvKCk/dGUreDpOW20tdGUubGVu''@;'; put 'put ''Z3RoXSt0ZSt4fWZvcih0aGlzLmlzWmVybygpJiYoeD0iMCIreCk7eC5sZW5ndGglYiE9MDspeD0iMCIreDtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJih4PSItIit4KSx4fWcoITEsIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzYiKX0sdy5wcm90b3R5cGUudG9OdW1iZXI9ZnVu''@;'; put 'put ''Y3Rpb24oKXt2YXIgcD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/cCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3ArPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0''@;'; put 'put ''aD4yJiZnKCExLCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHMiKSwwIT09dGhpcy5uZWdhdGl2ZT8tcDpwfSx3LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LHcucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9u''@;'; put 'put ''KHAsYil7cmV0dXJuIGcodHlwZW9mIFA8InUiKSx0aGlzLnRvQXJyYXlMaWtlKFAscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LHAsYil9LHcucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHAsYix4KXt2''@;'; put 'put ''YXIgQz10aGlzLmJ5dGVMZW5ndGgoKSxUPXh8fE1hdGgubWF4KDEsQyk7ZyhDPD1ULCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoIiksZyhUPjAsIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMCIpLHRoaXMuc3RyaXAoKTt2YXIgRSxtLEg9ImxlIj09PWIsaj1uZXcg''@;'; put 'put ''cChUKSxBPXRoaXMuY2xvbmUoKTtpZihIKXtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5kbG4oMjU1KSxBLml1c2hybig4KSxqW21dPUU7Zm9yKDttPFQ7bSsrKWpbbV09MH1lbHNle2ZvcihtPTA7bTxULUM7bSsrKWpbbV09MDtmb3IobT0wOyFBLmlzWmVybygpO20rKylFPUEuYW5k''@;'; put 'put ''bG4oMjU1KSxBLml1c2hybig4KSxqW1QtbS0xXT1FfXJldHVybiBqfSx3LnByb3RvdHlwZS5fY291bnRCaXRzPU1hdGguY2x6MzI/ZnVuY3Rpb24ocCl7cmV0dXJuIDMyLU1hdGguY2x6MzIocCl9OmZ1bmN0aW9uKHApe3ZhciBiPXAseD0wO3JldHVybiBiPj00MDk2JiYoeCs9MTMsYj4+Pj0x''@;'; put 'put ''MyksYj49NjQmJih4Kz03LGI+Pj49NyksYj49OCYmKHgrPTQsYj4+Pj00KSxiPj0yJiYoeCs9MixiPj4+PTIpLHgrYn0sdy5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHApe2lmKDA9PT1wKXJldHVybiAyNjt2YXIgYj1wLHg9MDtyZXR1cm4gODE5MSZifHwoeCs9MTMsYj4+Pj0xMyks''@;'; put 'put ''MTI3JmJ8fCh4Kz03LGI+Pj49NyksMTUmYnx8KHgrPTQsYj4+Pj00KSwzJmJ8fCh4Kz0yLGI+Pj49MiksMSZifHx4KysseH0sdy5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIGI9dGhpcy5fY291bnRCaXRzKHRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0pO3JldHVybiAyNioo''@;'; put 'put ''dGhpcy5sZW5ndGgtMSkrYn0sdy5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgcD0wLGI9MDtiPHRoaXMubGVuZ3RoO2IrKyl7dmFyIHg9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tiXSk7aWYocCs9eCwyNiE9PXgpYnJl''@;'; put 'put ''YWt9cmV0dXJuIHB9LHcucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LHcucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbihwKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bihwKS5pYWRk''@;'; put 'put ''bigxKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnRlc3RuKHAtMSk/dGhpcy5ub3RuKHApLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LHcucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5l''@;'; put 'put ''Z2F0aXZlfSx3LnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sdy5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sdy5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbihw''@;'; put 'put ''KXtmb3IoO3RoaXMubGVuZ3RoPHAubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBiPTA7YjxwLmxlbmd0aDtiKyspdGhpcy53b3Jkc1tiXT10aGlzLndvcmRzW2JdfHAud29yZHNbYl07cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaW9yPWZ1bmN0''@;'; put 'put ''aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSksdGhpcy5pdW9yKHApfSx3LnByb3RvdHlwZS5vcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcihwKTpwLmNsb25lKCkuaW9yKHRoaXMpfSx3LnByb3RvdHlw''@;'; put 'put ''ZS51b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHApOnAuY2xvbmUoKS5pdW9yKHRoaXMpfSx3LnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbihwKXt2YXIgYjtiPXRoaXMubGVuZ3RoPnAubGVuZ3RoP3A6dGhpcztmb3IodmFyIHg9''@;'; put 'put ''MDt4PGIubGVuZ3RoO3grKyl0aGlzLndvcmRzW3hdPXRoaXMud29yZHNbeF0mcC53b3Jkc1t4XTtyZXR1cm4gdGhpcy5sZW5ndGg9Yi5sZW5ndGgsdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHApe3JldHVybiBnKCEodGhpcy5uZWdhdGl2ZXxwLm5lZ2F0aXZlKSks''@;'; put 'put ''dGhpcy5pdWFuZChwKX0sdy5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZChwKTpwLmNsb25lKCkuaWFuZCh0aGlzKX0sdy5wcm90b3R5cGUudWFuZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5s''@;'; put 'put ''ZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHApOnAuY2xvbmUoKS5pdWFuZCh0aGlzKX0sdy5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24ocCl7dmFyIGIseDt0aGlzLmxlbmd0aD5wLmxlbmd0aD8oYj10aGlzLHg9cCk6KGI9cCx4PXRoaXMpO2Zvcih2YXIgQz0wO0M8eC5sZW5ndGg7QysrKXRo''@;'; put 'put ''aXMud29yZHNbQ109Yi53b3Jkc1tDXV54LndvcmRzW0NdO2lmKHRoaXMhPT1iKWZvcig7QzxiLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24ocCl7cmV0''@;'; put 'put ''dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1eG9yKHApfSx3LnByb3RvdHlwZS54b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHApOnAuY2xvbmUoKS5peG9yKHRoaXMpfSx3LnByb3RvdHlwZS51eG9y''@;'; put 'put ''PWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IocCk6cC5jbG9uZSgpLml1eG9yKHRoaXMpfSx3LnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9MHxNYXRoLmNlaWwocC8y''@;'; put 'put ''NikseD1wJTI2O3RoaXMuX2V4cGFuZChiKSx4PjAmJmItLTtmb3IodmFyIEM9MDtDPGI7QysrKXRoaXMud29yZHNbQ109NjcxMDg4NjMmfnRoaXMud29yZHNbQ107cmV0dXJuIHg+MCYmKHRoaXMud29yZHNbQ109fnRoaXMud29yZHNbQ10mNjcxMDg4NjM+PjI2LXgpLHRoaXMuc3RyaXAoKX0s''@;'; put 'put ''dy5wcm90b3R5cGUubm90bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHApfSx3LnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHAsYil7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciB4PXAvMjZ8MCxDPXAlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZCh4KzEpLHRo''@;'; put 'put ''aXMud29yZHNbeF09Yj90aGlzLndvcmRzW3hdfDE8PEM6dGhpcy53b3Jkc1t4XSZ+KDE8PEMpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwKXt2YXIgYix4LEM7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZl''@;'; put 'put ''PTAsYj10aGlzLmlzdWIocCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09cC5uZWdhdGl2ZSlyZXR1cm4gcC5uZWdhdGl2ZT0wLGI9dGhpcy5pc3ViKHApLHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpO3RoaXMubGVuZ3RoPnAu''@;'; put 'put ''bGVuZ3RoPyh4PXRoaXMsQz1wKTooeD1wLEM9dGhpcyk7Zm9yKHZhciBUPTAsSD0wO0g8Qy5sZW5ndGg7SCsrKXRoaXMud29yZHNbSF09NjcxMDg4NjMmKGI9KDB8eC53b3Jkc1tIXSkrKDB8Qy53b3Jkc1tIXSkrVCksVD1iPj4+MjY7Zm9yKDswIT09VCYmSDx4Lmxlbmd0aDtIKyspdGhpcy53''@;'; put 'put ''b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKStUKSxUPWI+Pj4yNjtpZih0aGlzLmxlbmd0aD14Lmxlbmd0aCwwIT09VCl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1ULHRoaXMubGVuZ3RoKys7ZWxzZSBpZih4IT09dGhpcylmb3IoO0g8eC5sZW5ndGg7SCsrKXRoaXMud29yZHNb''@;'; put 'put ''SF09eC53b3Jkc1tIXTtyZXR1cm4gdGhpc30sdy5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHApe3ZhciBiO3JldHVybiAwIT09cC5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHAubmVnYXRpdmU9MCxiPXRoaXMuc3ViKHApLHAubmVnYXRpdmVePTEsYik6MD09PXAubmVnYXRpdmUmJjAh''@;'; put 'put ''PT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsYj1wLnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsYik6dGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQocCk6cC5jbG9uZSgpLmlhZGQodGhpcyl9LHcucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCl7aWYoMCE9''@;'; put 'put ''PXAubmVnYXRpdmUpe3AubmVnYXRpdmU9MDt2YXIgYj10aGlzLmlhZGQocCk7cmV0dXJuIHAubmVnYXRpdmU9MSxiLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2ln''@;'; put 'put ''bigpO3ZhciBDLFQseD10aGlzLmNtcChwKTtpZigwPT09eClyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7eD4wPyhDPXRoaXMsVD1wKTooQz1wLFQ9dGhpcyk7Zm9yKHZhciBIPTAsaj0wO2o8VC5sZW5ndGg7aisrKUg9KGI9KDB8Qy53''@;'; put 'put ''b3Jkc1tqXSktKDB8VC53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtmb3IoOzAhPT1IJiZqPEMubGVuZ3RoO2orKylIPShiPSgwfEMud29yZHNbal0pK0gpPj4yNix0aGlzLndvcmRzW2pdPTY3MTA4ODYzJmI7aWYoMD09PUgmJmo8Qy5sZW5ndGgmJkMhPT10aGlz''@;'; put 'put ''KWZvcig7ajxDLmxlbmd0aDtqKyspdGhpcy53b3Jkc1tqXT1DLndvcmRzW2pdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxqKSxDIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCl7cmV0dXJu''@;'; put 'put ''IHRoaXMuY2xvbmUoKS5pc3ViKHApfTt2YXIgWT1mdW5jdGlvbihwLGIseCl7dmFyIEUsbSxBLEM9cC53b3JkcyxUPWIud29yZHMsSD14LndvcmRzLGo9MCxvZT0wfENbMF0sdGU9ODE5MSZvZSxzZT1vZT4+PjEzLHdlPTB8Q1sxXSxVZT04MTkxJndlLEplPXdlPj4+MTMsYXQ9MHxDWzJdLE1l''@;'; put 'put ''PTgxOTEmYXQsdmU9YXQ+Pj4xMyxYZT0wfENbM10samU9ODE5MSZYZSxEZT1YZT4+PjEzLEZlPTB8Q1s0XSxSZT04MTkxJkZlLEllPUZlPj4+MTMsVmU9MHxDWzVdLGtlPTgxOTEmVmUsQWU9VmU+Pj4xMyxfdD0wfENbNl0scnQ9ODE5MSZfdCxRZT1fdD4+PjEzLGRuPTB8Q1s3XSx5dD04MTkx''@;'; put 'put ''JmRuLE10PWRuPj4+MTMsRHQ9MHxDWzhdLGl0PTgxOTEmRHQsJGU9RHQ+Pj4xMyx0dD0wfENbOV0sSGU9ODE5MSZ0dCxkdD10dD4+PjEzLHF0PTB8VFswXSxSdD04MTkxJnF0LFB0PXF0Pj4+MTMsYWk9MHxUWzFdLFF0PTgxOTEmYWksc249YWk+Pj4xMyxSaT0wfFRbMl0sZm49ODE5MSZSaSxm''@;'; put 'put ''dD1SaT4+PjEzLFByPTB8VFszXSxadD04MTkxJlByLEF0PVByPj4+MTMsTG49MHxUWzRdLHN0PTgxOTEmTG4senQ9TG4+Pj4xMyxuaT0wfFRbNV0sV2U9ODE5MSZuaSxUdD1uaT4+PjEzLHJyPTB8VFs2XSxodD04MTkxJnJyLHh0PXJyPj4+MTMsQm49MHxUWzddLG9uPTgxOTEmQm4sanQ9Qm4+''@;'; put 'put ''Pj4xMyxkaT0wfFRbOF0sY249ODE5MSZkaSxwbj1kaT4+PjEzLElpPTB8VFs5XSxYdD04MTkxJklpLGVuPUlpPj4+MTM7eC5uZWdhdGl2ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9MTk7dmFyIGhvPShqKyhFPU1hdGguaW11bCh0ZSxSdCkpfDApKygoODE5MSYobT0obT1NYXRo''@;'; put 'put ''LmltdWwodGUsUHQpKStNYXRoLmltdWwoc2UsUnQpfDApKTw8MTMpfDA7aj0oKEE9TWF0aC5pbXVsKHNlLFB0KSkrKG0+Pj4xMyl8MCkrKGhvPj4+MjYpfDAsaG8mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFVlLFJ0KSxtPShtPU1hdGguaW11bChVZSxQdCkpK01hdGguaW11bChKZSxSdCl8MCxB''@;'; put 'put ''PU1hdGguaW11bChKZSxQdCk7dmFyIE1pPShqKyhFPUUrTWF0aC5pbXVsKHRlLFF0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsc24pfDApK01hdGguaW11bChzZSxRdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxzbil8MCkrKG0+Pj4xMyl8MCkrKE1pPj4+''@;'; put 'put ''MjYpfDAsTWkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKE1lLFJ0KSxtPShtPU1hdGguaW11bChNZSxQdCkpK01hdGguaW11bCh2ZSxSdCl8MCxBPU1hdGguaW11bCh2ZSxQdCksRT1FK01hdGguaW11bChVZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHNuKXwwKStNYXRoLmltdWwoSmUsUXQp''@;'; put 'put ''fDAsQT1BK01hdGguaW11bChKZSxzbil8MDt2YXIgcHI9KGorKEU9RStNYXRoLmltdWwodGUsZm4pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxmdCl8MCkrTWF0aC5pbXVsKHNlLGZuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGZ0KXwwKSsobT4+PjEzKXww''@;'; put 'put ''KSsocHI+Pj4yNil8MCxwciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoamUsUnQpLG09KG09TWF0aC5pbXVsKGplLFB0KSkrTWF0aC5pbXVsKERlLFJ0KXwwLEE9TWF0aC5pbXVsKERlLFB0KSxFPUUrTWF0aC5pbXVsKE1lLFF0KXwwLG09KG09bStNYXRoLmltdWwoTWUsc24pfDApK01hdGguaW11''@;'; put 'put ''bCh2ZSxRdCl8MCxBPUErTWF0aC5pbXVsKHZlLHNuKXwwLEU9RStNYXRoLmltdWwoVWUsZm4pfDAsbT0obT1tK01hdGguaW11bChVZSxmdCl8MCkrTWF0aC5pbXVsKEplLGZuKXwwLEE9QStNYXRoLmltdWwoSmUsZnQpfDA7dmFyIFduPShqKyhFPUUrTWF0aC5pbXVsKHRlLFp0KXwwKXwwKSso''@;'; put 'put ''KDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsQXQpfDApK01hdGguaW11bChzZSxadCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxBdCl8MCkrKG0+Pj4xMyl8MCkrKFduPj4+MjYpfDAsV24mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKFJlLFJ0KSxtPShtPU1hdGguaW11bChSZSxQ''@;'; put 'put ''dCkpK01hdGguaW11bChJZSxSdCl8MCxBPU1hdGguaW11bChJZSxQdCksRT1FK01hdGguaW11bChqZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLHNuKXwwKStNYXRoLmltdWwoRGUsUXQpfDAsQT1BK01hdGguaW11bChEZSxzbil8MCxFPUUrTWF0aC5pbXVsKE1lLGZuKXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoTWUsZnQpfDApK01hdGguaW11bCh2ZSxmbil8MCxBPUErTWF0aC5pbXVsKHZlLGZ0KXwwLEU9RStNYXRoLmltdWwoVWUsWnQpfDAsbT0obT1tK01hdGguaW11bChVZSxBdCl8MCkrTWF0aC5pbXVsKEplLFp0KXwwLEE9QStNYXRoLmltdWwoSmUsQXQpfDA7dmFyIEtpPShqKyhF''@;'; put 'put ''PUUrTWF0aC5pbXVsKHRlLHN0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsenQpfDApK01hdGguaW11bChzZSxzdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx6dCl8MCkrKG0+Pj4xMyl8MCkrKEtpPj4+MjYpfDAsS2kmPTY3MTA4ODYzLEU9TWF0aC5pbXVs''@;'; put 'put ''KGtlLFJ0KSxtPShtPU1hdGguaW11bChrZSxQdCkpK01hdGguaW11bChBZSxSdCl8MCxBPU1hdGguaW11bChBZSxQdCksRT1FK01hdGguaW11bChSZSxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHNuKXwwKStNYXRoLmltdWwoSWUsUXQpfDAsQT1BK01hdGguaW11bChJZSxzbil8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKGplLGZuKXwwLG09KG09bStNYXRoLmltdWwoamUsZnQpfDApK01hdGguaW11bChEZSxmbil8MCxBPUErTWF0aC5pbXVsKERlLGZ0KXwwLEU9RStNYXRoLmltdWwoTWUsWnQpfDAsbT0obT1tK01hdGguaW11bChNZSxBdCl8MCkrTWF0aC5pbXVsKHZlLFp0KXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwodmUsQXQpfDAsRT1FK01hdGguaW11bChVZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHp0KXwwKStNYXRoLmltdWwoSmUsc3QpfDAsQT1BK01hdGguaW11bChKZSx6dCl8MDt2YXIgUXI9KGorKEU9RStNYXRoLmltdWwodGUsV2UpfDApfDApKygoODE5MSYobT0obT1tK01hdGgu''@;'; put 'put ''aW11bCh0ZSxUdCl8MCkrTWF0aC5pbXVsKHNlLFdlKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLFR0KXwwKSsobT4+PjEzKXwwKSsoUXI+Pj4yNil8MCxRciY9NjcxMDg4NjMsRT1NYXRoLmltdWwocnQsUnQpLG09KG09TWF0aC5pbXVsKHJ0LFB0KSkrTWF0aC5pbXVsKFFlLFJ0''@;'; put 'put ''KXwwLEE9TWF0aC5pbXVsKFFlLFB0KSxFPUUrTWF0aC5pbXVsKGtlLFF0KXwwLG09KG09bStNYXRoLmltdWwoa2Usc24pfDApK01hdGguaW11bChBZSxRdCl8MCxBPUErTWF0aC5pbXVsKEFlLHNuKXwwLEU9RStNYXRoLmltdWwoUmUsZm4pfDAsbT0obT1tK01hdGguaW11bChSZSxmdCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKEllLGZuKXwwLEE9QStNYXRoLmltdWwoSWUsZnQpfDAsRT1FK01hdGguaW11bChqZSxadCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLEF0KXwwKStNYXRoLmltdWwoRGUsWnQpfDAsQT1BK01hdGguaW11bChEZSxBdCl8MCxFPUUrTWF0aC5pbXVsKE1lLHN0KXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoTWUsenQpfDApK01hdGguaW11bCh2ZSxzdCl8MCxBPUErTWF0aC5pbXVsKHZlLHp0KXwwLEU9RStNYXRoLmltdWwoVWUsV2UpfDAsbT0obT1tK01hdGguaW11bChVZSxUdCl8MCkrTWF0aC5pbXVsKEplLFdlKXwwLEE9QStNYXRoLmltdWwoSmUsVHQpfDA7dmFyIEpyPShqKyhF''@;'; put 'put ''PUUrTWF0aC5pbXVsKHRlLGh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUseHQpfDApK01hdGguaW11bChzZSxodCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSx4dCl8MCkrKG0+Pj4xMyl8MCkrKEpyPj4+MjYpfDAsSnImPTY3MTA4ODYzLEU9TWF0aC5pbXVs''@;'; put 'put ''KHl0LFJ0KSxtPShtPU1hdGguaW11bCh5dCxQdCkpK01hdGguaW11bChNdCxSdCl8MCxBPU1hdGguaW11bChNdCxQdCksRT1FK01hdGguaW11bChydCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LHNuKXwwKStNYXRoLmltdWwoUWUsUXQpfDAsQT1BK01hdGguaW11bChRZSxzbil8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKGtlLGZuKXwwLG09KG09bStNYXRoLmltdWwoa2UsZnQpfDApK01hdGguaW11bChBZSxmbil8MCxBPUErTWF0aC5pbXVsKEFlLGZ0KXwwLEU9RStNYXRoLmltdWwoUmUsWnQpfDAsbT0obT1tK01hdGguaW11bChSZSxBdCl8MCkrTWF0aC5pbXVsKEllLFp0KXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoSWUsQXQpfDAsRT1FK01hdGguaW11bChqZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLHp0KXwwKStNYXRoLmltdWwoRGUsc3QpfDAsQT1BK01hdGguaW11bChEZSx6dCl8MCxFPUUrTWF0aC5pbXVsKE1lLFdlKXwwLG09KG09bStNYXRoLmltdWwoTWUsVHQpfDApK01hdGguaW11''@;'; put 'put ''bCh2ZSxXZSl8MCxBPUErTWF0aC5pbXVsKHZlLFR0KXwwLEU9RStNYXRoLmltdWwoVWUsaHQpfDAsbT0obT1tK01hdGguaW11bChVZSx4dCl8MCkrTWF0aC5pbXVsKEplLGh0KXwwLEE9QStNYXRoLmltdWwoSmUseHQpfDA7dmFyIEJpPShqKyhFPUUrTWF0aC5pbXVsKHRlLG9uKXwwKXwwKSso''@;'; put 'put ''KDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsanQpfDApK01hdGguaW11bChzZSxvbil8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxqdCl8MCkrKG0+Pj4xMyl8MCkrKEJpPj4+MjYpfDAsQmkmPTY3MTA4ODYzLEU9TWF0aC5pbXVsKGl0LFJ0KSxtPShtPU1hdGguaW11bChpdCxQ''@;'; put 'put ''dCkpK01hdGguaW11bCgkZSxSdCl8MCxBPU1hdGguaW11bCgkZSxQdCksRT1FK01hdGguaW11bCh5dCxRdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHNuKXwwKStNYXRoLmltdWwoTXQsUXQpfDAsQT1BK01hdGguaW11bChNdCxzbil8MCxFPUUrTWF0aC5pbXVsKHJ0LGZuKXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwocnQsZnQpfDApK01hdGguaW11bChRZSxmbil8MCxBPUErTWF0aC5pbXVsKFFlLGZ0KXwwLEU9RStNYXRoLmltdWwoa2UsWnQpfDAsbT0obT1tK01hdGguaW11bChrZSxBdCl8MCkrTWF0aC5pbXVsKEFlLFp0KXwwLEE9QStNYXRoLmltdWwoQWUsQXQpfDAsRT1FK01hdGguaW11''@;'; put 'put ''bChSZSxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHp0KXwwKStNYXRoLmltdWwoSWUsc3QpfDAsQT1BK01hdGguaW11bChJZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGplLFdlKXwwLG09KG09bStNYXRoLmltdWwoamUsVHQpfDApK01hdGguaW11bChEZSxXZSl8MCxBPUErTWF0aC5pbXVsKERl''@;'; put 'put ''LFR0KXwwLEU9RStNYXRoLmltdWwoTWUsaHQpfDAsbT0obT1tK01hdGguaW11bChNZSx4dCl8MCkrTWF0aC5pbXVsKHZlLGh0KXwwLEE9QStNYXRoLmltdWwodmUseHQpfDAsRT1FK01hdGguaW11bChVZSxvbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGp0KXwwKStNYXRoLmltdWwoSmUsb24p''@;'; put 'put ''fDAsQT1BK01hdGguaW11bChKZSxqdCl8MDt2YXIgVmk9KGorKEU9RStNYXRoLmltdWwodGUsY24pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxwbil8MCkrTWF0aC5pbXVsKHNlLGNuKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHBuKXwwKSsobT4+PjEzKXww''@;'; put 'put ''KSsoVmk+Pj4yNil8MCxWaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUnQpLG09KG09TWF0aC5pbXVsKEhlLFB0KSkrTWF0aC5pbXVsKGR0LFJ0KXwwLEE9TWF0aC5pbXVsKGR0LFB0KSxFPUUrTWF0aC5pbXVsKGl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoaXQsc24pfDApK01hdGguaW11''@;'; put 'put ''bCgkZSxRdCl8MCxBPUErTWF0aC5pbXVsKCRlLHNuKXwwLEU9RStNYXRoLmltdWwoeXQsZm4pfDAsbT0obT1tK01hdGguaW11bCh5dCxmdCl8MCkrTWF0aC5pbXVsKE10LGZuKXwwLEE9QStNYXRoLmltdWwoTXQsZnQpfDAsRT1FK01hdGguaW11bChydCxadCl8MCxtPShtPW0rTWF0aC5pbXVs''@;'; put 'put ''KHJ0LEF0KXwwKStNYXRoLmltdWwoUWUsWnQpfDAsQT1BK01hdGguaW11bChRZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGtlLHN0KXwwLG09KG09bStNYXRoLmltdWwoa2UsenQpfDApK01hdGguaW11bChBZSxzdCl8MCxBPUErTWF0aC5pbXVsKEFlLHp0KXwwLEU9RStNYXRoLmltdWwoUmUsV2Up''@;'; put 'put ''fDAsbT0obT1tK01hdGguaW11bChSZSxUdCl8MCkrTWF0aC5pbXVsKEllLFdlKXwwLEE9QStNYXRoLmltdWwoSWUsVHQpfDAsRT1FK01hdGguaW11bChqZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKGplLHh0KXwwKStNYXRoLmltdWwoRGUsaHQpfDAsQT1BK01hdGguaW11bChEZSx4dCl8MCxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKE1lLG9uKXwwLG09KG09bStNYXRoLmltdWwoTWUsanQpfDApK01hdGguaW11bCh2ZSxvbil8MCxBPUErTWF0aC5pbXVsKHZlLGp0KXwwLEU9RStNYXRoLmltdWwoVWUsY24pfDAsbT0obT1tK01hdGguaW11bChVZSxwbil8MCkrTWF0aC5pbXVsKEplLGNuKXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoSmUscG4pfDA7dmFyIElvPShqKyhFPUUrTWF0aC5pbXVsKHRlLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwodGUsZW4pfDApK01hdGguaW11bChzZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChzZSxlbil8MCkrKG0+Pj4xMyl8MCkrKElvPj4+''@;'; put 'put ''MjYpfDAsSW8mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLFF0KSxtPShtPU1hdGguaW11bChIZSxzbikpK01hdGguaW11bChkdCxRdCl8MCxBPU1hdGguaW11bChkdCxzbiksRT1FK01hdGguaW11bChpdCxmbil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LGZ0KXwwKStNYXRoLmltdWwoJGUsZm4p''@;'; put 'put ''fDAsQT1BK01hdGguaW11bCgkZSxmdCl8MCxFPUUrTWF0aC5pbXVsKHl0LFp0KXwwLG09KG09bStNYXRoLmltdWwoeXQsQXQpfDApK01hdGguaW11bChNdCxadCl8MCxBPUErTWF0aC5pbXVsKE10LEF0KXwwLEU9RStNYXRoLmltdWwocnQsc3QpfDAsbT0obT1tK01hdGguaW11bChydCx6dCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKFFlLHN0KXwwLEE9QStNYXRoLmltdWwoUWUsenQpfDAsRT1FK01hdGguaW11bChrZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLFR0KXwwKStNYXRoLmltdWwoQWUsV2UpfDAsQT1BK01hdGguaW11bChBZSxUdCl8MCxFPUUrTWF0aC5pbXVsKFJlLGh0KXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwoUmUseHQpfDApK01hdGguaW11bChJZSxodCl8MCxBPUErTWF0aC5pbXVsKEllLHh0KXwwLEU9RStNYXRoLmltdWwoamUsb24pfDAsbT0obT1tK01hdGguaW11bChqZSxqdCl8MCkrTWF0aC5pbXVsKERlLG9uKXwwLEE9QStNYXRoLmltdWwoRGUsanQpfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bChNZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHBuKXwwKStNYXRoLmltdWwodmUsY24pfDAsQT1BK01hdGguaW11bCh2ZSxwbil8MDt2YXIgT3I9KGorKEU9RStNYXRoLmltdWwoVWUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChVZSxlbil8MCkrTWF0aC5pbXVs''@;'; put 'put ''KEplLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEplLGVuKXwwKSsobT4+PjEzKXwwKSsoT3I+Pj4yNil8MCxPciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsZm4pLG09KG09TWF0aC5pbXVsKEhlLGZ0KSkrTWF0aC5pbXVsKGR0LGZuKXwwLEE9TWF0aC5pbXVsKGR0LGZ0KSxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKGl0LFp0KXwwLG09KG09bStNYXRoLmltdWwoaXQsQXQpfDApK01hdGguaW11bCgkZSxadCl8MCxBPUErTWF0aC5pbXVsKCRlLEF0KXwwLEU9RStNYXRoLmltdWwoeXQsc3QpfDAsbT0obT1tK01hdGguaW11bCh5dCx6dCl8MCkrTWF0aC5pbXVsKE10LHN0KXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoTXQsenQpfDAsRT1FK01hdGguaW11bChydCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LFR0KXwwKStNYXRoLmltdWwoUWUsV2UpfDAsQT1BK01hdGguaW11bChRZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGtlLGh0KXwwLG09KG09bStNYXRoLmltdWwoa2UseHQpfDApK01hdGgu''@;'; put 'put ''aW11bChBZSxodCl8MCxBPUErTWF0aC5pbXVsKEFlLHh0KXwwLEU9RStNYXRoLmltdWwoUmUsb24pfDAsbT0obT1tK01hdGguaW11bChSZSxqdCl8MCkrTWF0aC5pbXVsKEllLG9uKXwwLEE9QStNYXRoLmltdWwoSWUsanQpfDAsRT1FK01hdGguaW11bChqZSxjbil8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKGplLHBuKXwwKStNYXRoLmltdWwoRGUsY24pfDAsQT1BK01hdGguaW11bChEZSxwbil8MDt2YXIgWWk9KGorKEU9RStNYXRoLmltdWwoTWUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChNZSxlbil8MCkrTWF0aC5pbXVsKHZlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUEr''@;'; put 'put ''TWF0aC5pbXVsKHZlLGVuKXwwKSsobT4+PjEzKXwwKSsoWWk+Pj4yNil8MCxZaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsWnQpLG09KG09TWF0aC5pbXVsKEhlLEF0KSkrTWF0aC5pbXVsKGR0LFp0KXwwLEE9TWF0aC5pbXVsKGR0LEF0KSxFPUUrTWF0aC5pbXVsKGl0LHN0KXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwoaXQsenQpfDApK01hdGguaW11bCgkZSxzdCl8MCxBPUErTWF0aC5pbXVsKCRlLHp0KXwwLEU9RStNYXRoLmltdWwoeXQsV2UpfDAsbT0obT1tK01hdGguaW11bCh5dCxUdCl8MCkrTWF0aC5pbXVsKE10LFdlKXwwLEE9QStNYXRoLmltdWwoTXQsVHQpfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bChydCxodCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LHh0KXwwKStNYXRoLmltdWwoUWUsaHQpfDAsQT1BK01hdGguaW11bChRZSx4dCl8MCxFPUUrTWF0aC5pbXVsKGtlLG9uKXwwLG09KG09bStNYXRoLmltdWwoa2UsanQpfDApK01hdGguaW11bChBZSxvbil8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KEFlLGp0KXwwLEU9RStNYXRoLmltdWwoUmUsY24pfDAsbT0obT1tK01hdGguaW11bChSZSxwbil8MCkrTWF0aC5pbXVsKEllLGNuKXwwLEE9QStNYXRoLmltdWwoSWUscG4pfDA7dmFyIGdvPShqKyhFPUUrTWF0aC5pbXVsKGplLFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwo''@;'; put 'put ''amUsZW4pfDApK01hdGguaW11bChEZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChEZSxlbil8MCkrKG0+Pj4xMyl8MCkrKGdvPj4+MjYpfDAsZ28mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLHN0KSxtPShtPU1hdGguaW11bChIZSx6dCkpK01hdGguaW11bChkdCxzdCl8MCxB''@;'; put 'put ''PU1hdGguaW11bChkdCx6dCksRT1FK01hdGguaW11bChpdCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKGl0LFR0KXwwKStNYXRoLmltdWwoJGUsV2UpfDAsQT1BK01hdGguaW11bCgkZSxUdCl8MCxFPUUrTWF0aC5pbXVsKHl0LGh0KXwwLG09KG09bStNYXRoLmltdWwoeXQseHQpfDApK01hdGgu''@;'; put 'put ''aW11bChNdCxodCl8MCxBPUErTWF0aC5pbXVsKE10LHh0KXwwLEU9RStNYXRoLmltdWwocnQsb24pfDAsbT0obT1tK01hdGguaW11bChydCxqdCl8MCkrTWF0aC5pbXVsKFFlLG9uKXwwLEE9QStNYXRoLmltdWwoUWUsanQpfDAsRT1FK01hdGguaW11bChrZSxjbil8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKGtlLHBuKXwwKStNYXRoLmltdWwoQWUsY24pfDAsQT1BK01hdGguaW11bChBZSxwbil8MDt2YXIgZXI9KGorKEU9RStNYXRoLmltdWwoUmUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChSZSxlbil8MCkrTWF0aC5pbXVsKEllLFh0KXwwKSk8PDEzKXwwO2o9KChBPUEr''@;'; put 'put ''TWF0aC5pbXVsKEllLGVuKXwwKSsobT4+PjEzKXwwKSsoZXI+Pj4yNil8MCxlciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsV2UpLG09KG09TWF0aC5pbXVsKEhlLFR0KSkrTWF0aC5pbXVsKGR0LFdlKXwwLEE9TWF0aC5pbXVsKGR0LFR0KSxFPUUrTWF0aC5pbXVsKGl0LGh0KXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwoaXQseHQpfDApK01hdGguaW11bCgkZSxodCl8MCxBPUErTWF0aC5pbXVsKCRlLHh0KXwwLEU9RStNYXRoLmltdWwoeXQsb24pfDAsbT0obT1tK01hdGguaW11bCh5dCxqdCl8MCkrTWF0aC5pbXVsKE10LG9uKXwwLEE9QStNYXRoLmltdWwoTXQsanQpfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bChydCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LHBuKXwwKStNYXRoLmltdWwoUWUsY24pfDAsQT1BK01hdGguaW11bChRZSxwbil8MDt2YXIgY289KGorKEU9RStNYXRoLmltdWwoa2UsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChrZSxlbil8MCkrTWF0aC5pbXVs''@;'; put 'put ''KEFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKEFlLGVuKXwwKSsobT4+PjEzKXwwKSsoY28+Pj4yNil8MCxjbyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsaHQpLG09KG09TWF0aC5pbXVsKEhlLHh0KSkrTWF0aC5pbXVsKGR0LGh0KXwwLEE9TWF0aC5pbXVsKGR0LHh0KSxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKGl0LG9uKXwwLG09KG09bStNYXRoLmltdWwoaXQsanQpfDApK01hdGguaW11bCgkZSxvbil8MCxBPUErTWF0aC5pbXVsKCRlLGp0KXwwLEU9RStNYXRoLmltdWwoeXQsY24pfDAsbT0obT1tK01hdGguaW11bCh5dCxwbil8MCkrTWF0aC5pbXVsKE10LGNuKXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoTXQscG4pfDA7dmFyIF9vPShqKyhFPUUrTWF0aC5pbXVsKHJ0LFh0KXwwKXwwKSsoKDgxOTEmKG09KG09bStNYXRoLmltdWwocnQsZW4pfDApK01hdGguaW11bChRZSxYdCl8MCkpPDwxMyl8MDtqPSgoQT1BK01hdGguaW11bChRZSxlbil8MCkrKG0+Pj4xMyl8MCkrKF9vPj4+''@;'; put 'put ''MjYpfDAsX28mPTY3MTA4ODYzLEU9TWF0aC5pbXVsKEhlLG9uKSxtPShtPU1hdGguaW11bChIZSxqdCkpK01hdGguaW11bChkdCxvbil8MCxBPU1hdGguaW11bChkdCxqdCksRT1FK01hdGguaW11bChpdCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKGl0LHBuKXwwKStNYXRoLmltdWwoJGUsY24p''@;'; put 'put ''fDAsQT1BK01hdGguaW11bCgkZSxwbil8MDt2YXIgT289KGorKEU9RStNYXRoLmltdWwoeXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh5dCxlbil8MCkrTWF0aC5pbXVsKE10LFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKE10LGVuKXwwKSsobT4+PjEzKXww''@;'; put 'put ''KSsoT28+Pj4yNil8MCxPbyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsY24pLG09KG09TWF0aC5pbXVsKEhlLHBuKSkrTWF0aC5pbXVsKGR0LGNuKXwwLEE9TWF0aC5pbXVsKGR0LHBuKTt2YXIgSG89KGorKEU9RStNYXRoLmltdWwoaXQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGgu''@;'; put 'put ''aW11bChpdCxlbil8MCkrTWF0aC5pbXVsKCRlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKCRlLGVuKXwwKSsobT4+PjEzKXwwKSsoSG8+Pj4yNil8MCxIbyY9NjcxMDg4NjM7dmFyIGVpPShqKyhFPU1hdGguaW11bChIZSxYdCkpfDApKygoODE5MSYobT0obT1NYXRoLmltdWwo''@;'; put 'put ''SGUsZW4pKStNYXRoLmltdWwoZHQsWHQpfDApKTw8MTMpfDA7cmV0dXJuIGo9KChBPU1hdGguaW11bChkdCxlbikpKyhtPj4+MTMpfDApKyhlaT4+PjI2KXwwLGVpJj02NzEwODg2MyxIWzBdPWhvLEhbMV09TWksSFsyXT1wcixIWzNdPVduLEhbNF09S2ksSFs1XT1RcixIWzZdPUpyLEhbN109''@;'; put 'put ''QmksSFs4XT1WaSxIWzldPUlvLEhbMTBdPU9yLEhbMTFdPVlpLEhbMTJdPWdvLEhbMTNdPWVyLEhbMTRdPWNvLEhbMTVdPV9vLEhbMTZdPU9vLEhbMTddPUhvLEhbMThdPWVpLDAhPT1qJiYoSFsxOV09aix4Lmxlbmd0aCsrKSx4fTtmdW5jdGlvbiBlZShWLHAsYil7cmV0dXJuKG5ldyBKKS5t''@;'; put 'put ''dWxwKFYscCxiKX1mdW5jdGlvbiBKKFYscCl7dGhpcy54PVYsdGhpcy55PXB9TWF0aC5pbXVsfHwoWT1XKSx3LnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbihwLGIpe3ZhciB4LEM9dGhpcy5sZW5ndGgrcC5sZW5ndGg7cmV0dXJuIHg9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT1wLmxlbmd0aD9Z''@;'; put 'put ''KHRoaXMscCxiKTpDPDYzP1codGhpcyxwLGIpOkM8MTAyND9mdW5jdGlvbiBYKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZSxiLmxlbmd0aD1WLmxlbmd0aCtwLmxlbmd0aDtmb3IodmFyIHg9MCxDPTAsVD0wO1Q8Yi5sZW5ndGgtMTtUKyspe3ZhciBIPUM7Qz0wO2Zv''@;'; put 'put ''cih2YXIgaj02NzEwODg2MyZ4LEU9TWF0aC5taW4oVCxwLmxlbmd0aC0xKSxtPU1hdGgubWF4KDAsVC1WLmxlbmd0aCsxKTttPD1FO20rKyl7dmFyIHNlPSgwfFYud29yZHNbVC1tXSkqKDB8cC53b3Jkc1ttXSksd2U9NjcxMDg4NjMmc2U7aj02NzEwODg2MyYod2U9d2UranwwKSxDKz0oSD0o''@;'; put 'put ''SD1IKyhzZS82NzEwODg2NHwwKXwwKSsod2U+Pj4yNil8MCk+Pj4yNixIJj02NzEwODg2M31iLndvcmRzW1RdPWoseD1ILEg9Q31yZXR1cm4gMCE9PXg/Yi53b3Jkc1tUXT14OmIubGVuZ3RoLS0sYi5zdHJpcCgpfSh0aGlzLHAsYik6ZWUodGhpcyxwLGIpLHh9LEoucHJvdG90eXBlLm1ha2VS''@;'; put 'put ''QlQ9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PXcucHJvdG90eXBlLl9jb3VudEJpdHMocCktMSxDPTA7QzxwO0MrKyliW0NdPXRoaXMucmV2QmluKEMseCxwKTtyZXR1cm4gYn0sSi5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHAsYix4KXtpZigwPT09cHx8cD09PXgt''@;'; put 'put ''MSlyZXR1cm4gcDtmb3IodmFyIEM9MCxUPTA7VDxiO1QrKylDfD0oMSZwKTw8Yi1ULTEscD4+PTE7cmV0dXJuIEN9LEoucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24ocCxiLHgsQyxULEgpe2Zvcih2YXIgaj0wO2o8SDtqKyspQ1tqXT1iW3Bbal1dLFRbal09eFtwW2pdXX0sSi5wcm90b3R5''@;'; put 'put ''cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHAsYix4LEMsVCxIKXt0aGlzLnBlcm11dGUoSCxwLGIseCxDLFQpO2Zvcih2YXIgaj0xO2o8VDtqPDw9MSlmb3IodmFyIEU9ajw8MSxtPU1hdGguY29zKDIqTWF0aC5QSS9FKSxBPU1hdGguc2luKDIqTWF0aC5QSS9FKSxvZT0wO29lPFQ7b2UrPUUpZm9y''@;'; put 'put ''KHZhciB0ZT1tLHNlPUEsd2U9MDt3ZTxqO3dlKyspe3ZhciBVZT14W29lK3dlXSxKZT1DW29lK3dlXSxhdD14W29lK3dlK2pdLE1lPUNbb2Urd2Ural0sdmU9dGUqYXQtc2UqTWU7TWU9dGUqTWUrc2UqYXQseFtvZSt3ZV09VWUrKGF0PXZlKSxDW29lK3dlXT1KZStNZSx4W29lK3dlK2pdPVVl''@;'; put 'put ''LWF0LENbb2Urd2Ural09SmUtTWUsd2UhPT1FJiYodmU9bSp0ZS1BKnNlLHNlPW0qc2UrQSp0ZSx0ZT12ZSl9fSxKLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbihwLGIpe3ZhciB4PTF8TWF0aC5tYXgoYixwKSxDPTEmeCxUPTA7Zm9yKHg9eC8yfDA7eDt4Pj4+PTEpVCsrO3JldHVy''@;'; put 'put ''biAxPDxUKzErQ30sSi5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHAsYix4KXtpZighKHg8PTEpKWZvcih2YXIgQz0wO0M8eC8yO0MrKyl7dmFyIFQ9cFtDXTtwW0NdPXBbeC1DLTFdLHBbeC1DLTFdPVQsVD1iW0NdLGJbQ109LWJbeC1DLTFdLGJbeC1DLTFdPS1UfX0sSi5wcm90b3R5''@;'; put 'put ''cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTAsQz0wO0M8Yi8yO0MrKyl7dmFyIFQ9ODE5MipNYXRoLnJvdW5kKHBbMipDKzFdL2IpK01hdGgucm91bmQocFsyKkNdL2IpK3g7cFtDXT02NzEwODg2MyZULHg9VDw2NzEwODg2ND8wOlQvNjcxMDg4NjR8MH1yZXR1cm4g''@;'; put 'put ''cH0sSi5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbihwLGIseCxDKXtmb3IodmFyIFQ9MCxIPTA7SDxiO0grKyl4WzIqSF09ODE5MSYoVCs9MHxwW0hdKSx4WzIqSCsxXT04MTkxJihUPj4+PTEzKSxUPj4+PTEzO2ZvcihIPTIqYjtIPEM7KytIKXhbSF09MDtnKDA9PT1UKSxnKCEoLTgx''@;'; put 'put ''OTImVCkpfSxKLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj1uZXcgQXJyYXkocCkseD0wO3g8cDt4KyspYlt4XT0wO3JldHVybiBifSxKLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHAsYix4KXt2YXIgQz0yKnRoaXMuZ3Vlc3NMZW4xM2IocC5sZW5ndGgsYi5sZW5ndGgp''@;'; put 'put ''LFQ9dGhpcy5tYWtlUkJUKEMpLEg9dGhpcy5zdHViKEMpLGo9bmV3IEFycmF5KEMpLEU9bmV3IEFycmF5KEMpLG09bmV3IEFycmF5KEMpLEE9bmV3IEFycmF5KEMpLG9lPW5ldyBBcnJheShDKSx0ZT1uZXcgQXJyYXkoQyksc2U9eC53b3JkcztzZS5sZW5ndGg9Qyx0aGlzLmNvbnZlcnQxM2Io''@;'; put 'put ''cC53b3JkcyxwLmxlbmd0aCxqLEMpLHRoaXMuY29udmVydDEzYihiLndvcmRzLGIubGVuZ3RoLEEsQyksdGhpcy50cmFuc2Zvcm0oaixILEUsbSxDLFQpLHRoaXMudHJhbnNmb3JtKEEsSCxvZSx0ZSxDLFQpO2Zvcih2YXIgd2U9MDt3ZTxDO3dlKyspe3ZhciBVZT1FW3dlXSpvZVt3ZV0tbVt3''@;'; put 'put ''ZV0qdGVbd2VdO21bd2VdPUVbd2VdKnRlW3dlXSttW3dlXSpvZVt3ZV0sRVt3ZV09VWV9cmV0dXJuIHRoaXMuY29uanVnYXRlKEUsbSxDKSx0aGlzLnRyYW5zZm9ybShFLG0sc2UsSCxDLFQpLHRoaXMuY29uanVnYXRlKHNlLEgsQyksdGhpcy5ub3JtYWxpemUxM2Ioc2UsQykseC5uZWdhdGl2''@;'; put 'put ''ZT1wLm5lZ2F0aXZlXmIubmVnYXRpdmUseC5sZW5ndGg9cC5sZW5ndGgrYi5sZW5ndGgseC5zdHJpcCgpfSx3LnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSx0aGlzLm11bFRv''@;'; put 'put ''KHAsYil9LHcucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24ocCl7dmFyIGI9bmV3IHcobnVsbCk7cmV0dXJuIGIud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3AubGVuZ3RoKSxlZSh0aGlzLHAsYil9LHcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5t''@;'; put 'put ''dWxUbyhwLHRoaXMpfSx3LnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCksZyhwPDY3MTA4ODY0KTtmb3IodmFyIGI9MCx4PTA7eDx0aGlzLmxlbmd0aDt4Kyspe3ZhciBDPSgwfHRoaXMud29yZHNbeF0pKnAsVD0oNjcxMDg4NjMmQykrKDY3MTA4ODYz''@;'; put 'put ''JmIpO2I+Pj0yNixiKz1DLzY3MTA4ODY0fDAsYis9VD4+PjI2LHRoaXMud29yZHNbeF09NjcxMDg4NjMmVH1yZXR1cm4gMCE9PWImJih0aGlzLndvcmRzW3hdPWIsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUubXVsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlt''@;'; put 'put ''dWxuKHApfSx3LnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LHcucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LHcucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwKXt2YXIgYj1mdW5jdGlvbiBVKFYp''@;'; put 'put ''e2Zvcih2YXIgcD1uZXcgQXJyYXkoVi5iaXRMZW5ndGgoKSksYj0wO2I8cC5sZW5ndGg7YisrKXt2YXIgQz1iJTI2O3BbYl09KFYud29yZHNbYi8yNnwwXSYxPDxDKT4+PkN9cmV0dXJuIHB9KHApO2lmKDA9PT1iLmxlbmd0aClyZXR1cm4gbmV3IHcoMSk7Zm9yKHZhciB4PXRoaXMsQz0wO0M8''@;'; put 'put ''Yi5sZW5ndGgmJjA9PT1iW0NdO0MrKyx4PXguc3FyKCkpO2lmKCsrQzxiLmxlbmd0aClmb3IodmFyIFQ9eC5zcXIoKTtDPGIubGVuZ3RoO0MrKyxUPVQuc3FyKCkpMCE9PWJbQ10mJih4PXgubXVsKFQpKTtyZXR1cm4geH0sdy5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHApe2coIm51bWJl''@;'; put 'put ''ciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgVCxiPXAlMjYseD0ocC1iKS8yNixDPTY3MTA4ODYzPj4+MjYtYjw8MjYtYjtpZigwIT09Yil7dmFyIEg9MDtmb3IoVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKXt2YXIgaj10aGlzLndvcmRzW1RdJkM7dGhpcy53b3Jkc1tUXT0oMHx0aGlzLndvcmRzW1Rd''@;'; put 'put ''KS1qPDxifEgsSD1qPj4+MjYtYn1IJiYodGhpcy53b3Jkc1tUXT1ILHRoaXMubGVuZ3RoKyspfWlmKDAhPT14KXtmb3IoVD10aGlzLmxlbmd0aC0xO1Q+PTA7VC0tKXRoaXMud29yZHNbVCt4XT10aGlzLndvcmRzW1RdO2ZvcihUPTA7VDx4O1QrKyl0aGlzLndvcmRzW1RdPTA7dGhpcy5sZW5n''@;'; put 'put ''dGgrPXh9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24ocCxiLHgpe3ZhciBDO2coIm51bWJlciI9PXR5cGVvZiBwJiZw''@;'; put 'put ''Pj0wKSxDPWI/KGItYiUyNikvMjY6MDt2YXIgVD1wJTI2LEg9TWF0aC5taW4oKHAtVCkvMjYsdGhpcy5sZW5ndGgpLGo9NjcxMDg4NjNeNjcxMDg4NjM+Pj5UPDxULEU9eDtpZihDLT1ILEM9TWF0aC5tYXgoMCxDKSxFKXtmb3IodmFyIG09MDttPEg7bSsrKUUud29yZHNbbV09dGhpcy53b3Jk''@;'; put 'put ''c1ttXTtFLmxlbmd0aD1IfWlmKDAhPT1IKWlmKHRoaXMubGVuZ3RoPkgpZm9yKHRoaXMubGVuZ3RoLT1ILG09MDttPHRoaXMubGVuZ3RoO20rKyl0aGlzLndvcmRzW21dPXRoaXMud29yZHNbbStIXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBBPTA7Zm9yKG09dGhp''@;'; put 'put ''cy5sZW5ndGgtMTttPj0wJiYoMCE9PUF8fG0+PUMpO20tLSl7dmFyIG9lPTB8dGhpcy53b3Jkc1ttXTt0aGlzLndvcmRzW21dPUE8PDI2LVR8b2U+Pj5ULEE9b2Uman1yZXR1cm4gRSYmMCE9PUEmJihFLndvcmRzW0UubGVuZ3RoKytdPUEpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNb''@;'; put 'put ''MF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4ocCxiLHgpfSx3LnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCku''@;'; put 'put ''aXNobG4ocCl9LHcucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHApfSx3LnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4ocCl9LHcucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHApe3JldHVy''@;'; put 'put ''biB0aGlzLmNsb25lKCkuaXVzaHJuKHApfSx3LnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiEodGhpcy5sZW5ndGg8PXh8fCEodGhpcy53b3Jkc1t4XSYxPDxiKSl9LHcucHJvdG90eXBl''@;'; put 'put ''LmltYXNrbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIGI9cCUyNix4PShwLWIpLzI2O3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlLCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnMiKSx0aGlzLmxlbmd0aDw9eD90aGlzOigwIT09''@;'; put 'put ''YiYmeCsrLHRoaXMubGVuZ3RoPU1hdGgubWluKHgsdGhpcy5sZW5ndGgpLDAhPT1iJiYodGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5iPDxiKSx0aGlzLnN0cmlwKCkpfSx3LnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9u''@;'; put 'put ''ZSgpLmltYXNrbihwKX0sdy5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MD90aGlzLmlzdWJuKC1wKTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHA/KHRo''@;'; put 'put ''aXMud29yZHNbMF09cC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbihwKX0sdy5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHApe3RoaXMud29yZHNb''@;'; put 'put ''MF0rPXA7Zm9yKHZhciBiPTA7Yjx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tiXT49NjcxMDg4NjQ7YisrKXRoaXMud29yZHNbYl0tPTY3MTA4ODY0LGI9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbYisxXT0xOnRoaXMud29yZHNbYisxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1h''@;'; put 'put ''eCh0aGlzLmxlbmd0aCxiKzEpLHRoaXN9LHcucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHApe2lmKGcoIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpLHA8MClyZXR1cm4gdGhpcy5pYWRkbigtcCk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0''@;'; put 'put ''aGlzLmlhZGRuKHApLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXAsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0''@;'; put 'put ''aGlzLndvcmRzW2JdPDA7YisrKXRoaXMud29yZHNbYl0rPTY3MTA4ODY0LHRoaXMud29yZHNbYisxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4ocCl9LHcucHJvdG90eXBlLnN1Ym49ZnVuY3Rp''@;'; put 'put ''b24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3VibihwKX0sdy5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sdy5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LHcucHJvdG90eXBlLl9pc2hs''@;'; put 'put ''bnN1Ym11bD1mdW5jdGlvbihwLGIseCl7dmFyIFQ7dGhpcy5fZXhwYW5kKHAubGVuZ3RoK3gpO3ZhciBILGo9MDtmb3IoVD0wO1Q8cC5sZW5ndGg7VCsrKXtIPSgwfHRoaXMud29yZHNbVCt4XSkrajt2YXIgRT0oMHxwLndvcmRzW1RdKSpiO2o9KChILT02NzEwODg2MyZFKT4+MjYpLShFLzY3''@;'; put 'put ''MTA4ODY0fDApLHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIfWZvcig7VDx0aGlzLmxlbmd0aC14O1QrKylqPShIPSgwfHRoaXMud29yZHNbVCt4XSkraik+PjI2LHRoaXMud29yZHNbVCt4XT02NzEwODg2MyZIO2lmKDA9PT1qKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKGcoLTE9PT1qKSxq''@;'; put 'put ''PTAsVD0wO1Q8dGhpcy5sZW5ndGg7VCsrKWo9KEg9LSgwfHRoaXMud29yZHNbVF0pK2opPj4yNix0aGlzLndvcmRzW1RdPTY3MTA4ODYzJkg7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlz''@;'; put 'put ''LmNsb25lKCksVD1wLEg9MHxULndvcmRzW1QubGVuZ3RoLTFdOzAhPSh4PTI2LXRoaXMuX2NvdW50Qml0cyhIKSkmJihUPVQudXNobG4oeCksQy5pdXNobG4oeCksSD0wfFQud29yZHNbVC5sZW5ndGgtMV0pO3ZhciBtLEU9Qy5sZW5ndGgtVC5sZW5ndGg7aWYoIm1vZCIhPT1iKXsobT1uZXcg''@;'; put 'put ''dyhudWxsKSkubGVuZ3RoPUUrMSxtLndvcmRzPW5ldyBBcnJheShtLmxlbmd0aCk7Zm9yKHZhciBBPTA7QTxtLmxlbmd0aDtBKyspbS53b3Jkc1tBXT0wfXZhciBvZT1DLmNsb25lKCkuX2lzaGxuc3VibXVsKFQsMSxFKTswPT09b2UubmVnYXRpdmUmJihDPW9lLG0mJihtLndvcmRzW0VdPTEp''@;'; put 'put ''KTtmb3IodmFyIHRlPUUtMTt0ZT49MDt0ZS0tKXt2YXIgc2U9NjcxMDg4NjQqKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZV0pKygwfEMud29yZHNbVC5sZW5ndGgrdGUtMV0pO2ZvcihzZT1NYXRoLm1pbihzZS9IfDAsNjcxMDg4NjMpLEMuX2lzaGxuc3VibXVsKFQsc2UsdGUpOzAhPT1DLm5lZ2F0''@;'; put 'put ''aXZlOylzZS0tLEMubmVnYXRpdmU9MCxDLl9pc2hsbnN1Ym11bChULDEsdGUpLEMuaXNaZXJvKCl8fChDLm5lZ2F0aXZlXj0xKTttJiYobS53b3Jkc1t0ZV09c2UpfXJldHVybiBtJiZtLnN0cmlwKCksQy5zdHJpcCgpLCJkaXYiIT09YiYmMCE9PXgmJkMuaXVzaHJuKHgpLHtkaXY6bXx8bnVs''@;'; put 'put ''bCxtb2Q6Q319LHcucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbihwLGIseCl7cmV0dXJuIGcoIXAuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCk/e2RpdjpuZXcgdygwKSxtb2Q6bmV3IHcoMCl9OjAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChw''@;'; put 'put ''LGIpLCJtb2QiIT09YiYmKEM9SC5kaXYubmVnKCkpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaWFkZChwKSkse2RpdjpDLG1vZDpUfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlPyhIPXRoaXMuZGl2bW9kKHAubmVnKCksYiksIm1v''@;'; put 'put ''ZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSkse2RpdjpDLG1vZDpILm1vZH0pOnRoaXMubmVnYXRpdmUmcC5uZWdhdGl2ZT8oSD10aGlzLm5lZygpLmRpdm1vZChwLm5lZygpLGIpLCJkaXYiIT09YiYmKFQ9SC5tb2QubmVnKCkseCYmMCE9PVQubmVnYXRpdmUmJlQuaXN1YihwKSkse2RpdjpILmRp''@;'; put 'put ''dixtb2Q6VH0pOnAubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcChwKTwwP3tkaXY6bmV3IHcoMCksbW9kOnRoaXN9OjE9PT1wLmxlbmd0aD8iZGl2Ij09PWI/e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm51bGx9OiJtb2QiPT09Yj97ZGl2Om51bGwsbW9kOm5ldyB3KHRoaXMu''@;'; put 'put ''bW9kbihwLndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHAud29yZHNbMF0pLG1vZDpuZXcgdyh0aGlzLm1vZG4ocC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHAsYik7dmFyIEMsVCxIfSx3LnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsImRpdiIs''@;'; put 'put ''ITEpLmRpdn0sdy5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmRpdm1vZChwLCJtb2QiLCExKS5tb2R9LHcucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITApLm1vZH0sdy5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rp''@;'; put 'put ''b24ocCl7dmFyIGI9dGhpcy5kaXZtb2QocCk7aWYoYi5tb2QuaXNaZXJvKCkpcmV0dXJuIGIuZGl2O3ZhciB4PTAhPT1iLmRpdi5uZWdhdGl2ZT9iLm1vZC5pc3ViKHApOmIubW9kLEM9cC51c2hybigxKSxUPXAuYW5kbG4oMSksSD14LmNtcChDKTtyZXR1cm4gSDwwfHwxPT09VCYmMD09PUg/''@;'; put 'put ''Yi5kaXY6MCE9PWIuZGl2Lm5lZ2F0aXZlP2IuZGl2LmlzdWJuKDEpOmIuZGl2LmlhZGRuKDEpfSx3LnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0oMTw8MjYpJXAseD0wLEM9dGhpcy5sZW5ndGgtMTtDPj0wO0MtLSl4PShiKngrKDB8dGhpcy53''@;'; put 'put ''b3Jkc1tDXSkpJXA7cmV0dXJuIHh9LHcucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHApe2cocDw9NjcxMDg4NjMpO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkrNjcxMDg4NjQqYjt0aGlzLndvcmRzW3hdPUMvcHwwLGI9QyVw''@;'; put 'put ''fXJldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bihwKX0sdy5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgYj10aGlzLHg9cC5jbG9uZSgp''@;'; put 'put ''O2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPW5ldyB3KDApLGo9bmV3IHcoMSksRT0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7KWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpLCsrRTtmb3IodmFyIG09eC5jbG9uZSgp''@;'; put 'put ''LEE9Yi5jbG9uZSgpOyFiLmlzWmVybygpOyl7Zm9yKHZhciBvZT0wLHRlPTE7IShiLndvcmRzWzBdJnRlKSYmb2U8MjY7KytvZSx0ZTw8PTEpO2lmKG9lPjApZm9yKGIuaXVzaHJuKG9lKTtvZS0tID4wOykoQy5pc09kZCgpfHxULmlzT2RkKCkpJiYoQy5pYWRkKG0pLFQuaXN1YihBKSksQy5p''@;'; put 'put ''dXNocm4oMSksVC5pdXNocm4oMSk7Zm9yKHZhciBzZT0wLHdlPTE7ISh4LndvcmRzWzBdJndlKSYmc2U8MjY7KytzZSx3ZTw8PTEpO2lmKHNlPjApZm9yKHguaXVzaHJuKHNlKTtzZS0tID4wOykoSC5pc09kZCgpfHxqLmlzT2RkKCkpJiYoSC5pYWRkKG0pLGouaXN1YihBKSksSC5pdXNocm4o''@;'; put 'put ''MSksai5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoSCksVC5pc3ViKGopKTooeC5pc3ViKGIpLEguaXN1YihDKSxqLmlzdWIoVCkpfXJldHVybnthOkgsYjpqLGdjZDp4Lml1c2hsbihFKX19LHcucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbihwKXtnKDA9PT1wLm5l''@;'; put 'put ''Z2F0aXZlKSxnKCFwLmlzWmVybygpKTt2YXIgb2UsYj10aGlzLHg9cC5jbG9uZSgpO2I9MCE9PWIubmVnYXRpdmU/Yi51bW9kKHApOmIuY2xvbmUoKTtmb3IodmFyIEM9bmV3IHcoMSksVD1uZXcgdygwKSxIPXguY2xvbmUoKTtiLmNtcG4oMSk+MCYmeC5jbXBuKDEpPjA7KXtmb3IodmFyIGo9''@;'; put 'put ''MCxFPTE7IShiLndvcmRzWzBdJkUpJiZqPDI2OysraixFPDw9MSk7aWYoaj4wKWZvcihiLml1c2hybihqKTtqLS0gPjA7KUMuaXNPZGQoKSYmQy5pYWRkKEgpLEMuaXVzaHJuKDEpO2Zvcih2YXIgbT0wLEE9MTshKHgud29yZHNbMF0mQSkmJm08MjY7KyttLEE8PD0xKTtpZihtPjApZm9yKHgu''@;'; put 'put ''aXVzaHJuKG0pO20tLSA+MDspVC5pc09kZCgpJiZULmlhZGQoSCksVC5pdXNocm4oMSk7Yi5jbXAoeCk+PTA/KGIuaXN1Yih4KSxDLmlzdWIoVCkpOih4LmlzdWIoYiksVC5pc3ViKEMpKX1yZXR1cm4ob2U9MD09PWIuY21wbigxKT9DOlQpLmNtcG4oMCk8MCYmb2UuaWFkZChwKSxvZX0sdy5w''@;'; put 'put ''cm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHApe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHAuYWJzKCk7aWYocC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgYj10aGlzLmNsb25lKCkseD1wLmNsb25lKCk7Yi5uZWdhdGl2ZT0wLHgubmVnYXRpdmU9MDtmb3IodmFyIEM9MDtiLmlzRXZl''@;'; put 'put ''bigpJiZ4LmlzRXZlbigpO0MrKyliLml1c2hybigxKSx4Lml1c2hybigxKTtmb3IoOzspe2Zvcig7Yi5pc0V2ZW4oKTspYi5pdXNocm4oMSk7Zm9yKDt4LmlzRXZlbigpOyl4Lml1c2hybigxKTt2YXIgVD1iLmNtcCh4KTtpZihUPDApe3ZhciBIPWI7Yj14LHg9SH1lbHNlIGlmKDA9PT1UfHww''@;'; put 'put ''PT09eC5jbXBuKDEpKWJyZWFrO2IuaXN1Yih4KX1yZXR1cm4geC5pdXNobG4oQyl9LHcucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZWdjZChwKS5hLnVtb2QocCl9LHcucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiEoMSZ0aGlzLndvcmRzWzBdKX0s''@;'; put 'put ''dy5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4hKDEmfnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy53b3Jkc1swXSZwfSx3LnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbihwKXtnKCJudW1iZXIiPT10eXBlb2YgcCk7dmFy''@;'; put 'put ''IGI9cCUyNix4PShwLWIpLzI2LEM9MTw8YjtpZih0aGlzLmxlbmd0aDw9eClyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XXw9Qyx0aGlzO2Zvcih2YXIgVD1DLEg9eDswIT09VCYmSDx0aGlzLmxlbmd0aDtIKyspe3ZhciBqPTB8dGhpcy53b3Jkc1tIXTtUPShqKz1UKT4+''@;'; put 'put ''PjI2LHRoaXMud29yZHNbSF09aiY9NjcxMDg4NjN9cmV0dXJuIDAhPT1UJiYodGhpcy53b3Jkc1tIXT1ULHRoaXMubGVuZ3RoKyspLHRoaXN9LHcucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSx3LnByb3RvdHlw''@;'; put 'put ''ZS5jbXBuPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhYilyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmYilyZXR1cm4gMTtpZih0aGlzLnN0cmlwKCksdGhpcy5sZW5ndGg+MSl4PTE7ZWxzZXtiJiYocD0tcCksZyhwPD02NzEwODg2MywiTnVt''@;'; put 'put ''YmVyIGlzIHRvbyBiaWciKTt2YXIgQz0wfHRoaXMud29yZHNbMF07eD1DPT09cD8wOkM8cD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC14Onh9LHcucHJvdG90eXBlLmNtcD1mdW5jdGlvbihwKXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuLTE7''@;'; put 'put ''aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiAxO3ZhciBiPXRoaXMudWNtcChwKTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtYjpifSx3LnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHApe2lmKHRoaXMubGVuZ3RoPnAubGVuZ3RoKXJldHVybiAxO2lmKHRo''@;'; put 'put ''aXMubGVuZ3RoPHAubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgYj0wLHg9dGhpcy5sZW5ndGgtMTt4Pj0wO3gtLSl7dmFyIEM9MHx0aGlzLndvcmRzW3hdLFQ9MHxwLndvcmRzW3hdO2lmKEMhPT1UKXtDPFQ/Yj0tMTpDPlQmJihiPTEpO2JyZWFrfX1yZXR1cm4gYn0sdy5wcm90b3R5cGUuZ3Ru''@;'; put 'put ''PWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5ndD1mdW5jdGlvbihwKXtyZXR1cm4gMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk+PTB9LHcucHJvdG90eXBlLmd0ZT1mdW5jdGlv''@;'; put 'put ''bihwKXtyZXR1cm4gdGhpcy5jbXAocCk+PTB9LHcucHJvdG90eXBlLmx0bj1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUubHQ9ZnVuY3Rpb24ocCl7cmV0dXJuLTE9PT10aGlzLmNtcChwKX0sdy5wcm90b3R5cGUubHRlbj1mdW5jdGlvbihwKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5jbXBuKHApPD0wfSx3LnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wKHApPD0wfSx3LnByb3RvdHlwZS5lcW49ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHApe3JldHVybiAwPT09dGhp''@;'; put 'put ''cy5jbXAocCl9LHcucmVkPWZ1bmN0aW9uKHApe3JldHVybiBuZXcgU2UocCl9LHcucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dCIpLGcoMD09PXRoaXMubmVnYXRpdmUsInJlZCB3b3Jr''@;'; put 'put ''cyBvbmx5IHdpdGggcG9zaXRpdmVzIikscC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHQiKSx0aGlz''@;'; put 'put ''LnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sdy5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLnJlZD1wLHRoaXN9LHcucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHApe3JldHVybiBnKCF0aGlzLnJlZCwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24g''@;'; put 'put ''Y29udGV4dCIpLHRoaXMuX2ZvcmNlUmVkKHApfSx3LnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5hZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlv''@;'; put 'put ''bihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5pYWRkKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVt''@;'; put 'put ''YmVycyIpLHRoaXMucmVkLnN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlzdWIodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU2hsPWZ1bmN0''@;'; put 'put ''aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc2hsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVt''@;'; put 'put ''YmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQubXVsKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlz''@;'; put 'put ''LHApLHRoaXMucmVkLmltdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LHcucHJvdG90''@;'; put 'put ''eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIGco''@;'; put 'put ''dGhpcy5yZWQsInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sdy5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0''@;'; put 'put ''aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LHcucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEo''@;'; put 'put ''dGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSx3LnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQmJiFwLnJlZCwicmVkUG93KG5vcm1hbE51bSkiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyxwKX07dmFyIHJlPXtrMjU2Om51''@;'; put 'put ''bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07ZnVuY3Rpb24gaWUoVixwKXt0aGlzLm5hbWU9Vix0aGlzLnA9bmV3IHcocCwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IHcoMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRo''@;'; put 'put ''aXMuX3RtcCgpfWZ1bmN0aW9uIGxlKCl7aWUuY2FsbCh0aGlzLCJrMjU2IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmYiKX1mdW5jdGlvbiBtZSgpe2llLmNhbGwodGhpcywicDIyNCIsImZmZmZmZmZmIGZm''@;'; put 'put ''ZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxIil9ZnVuY3Rpb24gX2UoKXtpZS5jYWxsKHRoaXMsInAxOTIiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZiIpfWZ1bmN0aW9uIFRlKCl7aWUuY2Fs''@;'; put 'put ''bCh0aGlzLCIyNTUxOSIsIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWQiKX1mdW5jdGlvbiBTZShWKXtpZigic3RyaW5nIj09dHlwZW9mIFYpe3ZhciBwPXcuX3ByaW1lKFYpO3RoaXMubT1wLnAsdGhpcy5wcmltZT1w''@;'; put 'put ''fWVsc2UgZyhWLmd0bigxKSwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxIiksdGhpcy5tPVYsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIHplKFYpe1NlLmNhbGwodGhpcyxWKSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT0wJiYodGhpcy5zaGlm''@;'; put 'put ''dCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyB3KDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYo''@;'; put 'put ''dGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfWllLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHAud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMp''@;'; put 'put ''KSxwfSxpZS5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbihwKXt2YXIgeCxiPXA7ZG97dGhpcy5zcGxpdChiLHRoaXMudG1wKSx4PShiPShiPXRoaXMuaW11bEsoYikpLmlhZGQodGhpcy50bXApKS5iaXRMZW5ndGgoKX13aGlsZSh4PnRoaXMubik7dmFyIEM9eDx0aGlzLm4/LTE6Yi51Y21w''@;'; put 'put ''KHRoaXMucCk7cmV0dXJuIDA9PT1DPyhiLndvcmRzWzBdPTAsYi5sZW5ndGg9MSk6Qz4wP2IuaXN1Yih0aGlzLnApOnZvaWQgMCE9PWIuc3RyaXA/Yi5zdHJpcCgpOmIuX3N0cmlwKCksYn0saWUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7cC5pdXNocm4odGhpcy5uLDAsYil9LGll''@;'; put 'put ''LnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pbXVsKHRoaXMuayl9LEIobGUsaWUpLGxlLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbihwLGIpe2Zvcih2YXIgeD00MTk0MzAzLEM9TWF0aC5taW4ocC5sZW5ndGgsOSksVD0wO1Q8QztUKyspYi53b3Jkc1tUXT1wLndvcmRz''@;'; put 'put ''W1RdO2lmKGIubGVuZ3RoPUMscC5sZW5ndGg8PTkpcmV0dXJuIHAud29yZHNbMF09MCx2b2lkKHAubGVuZ3RoPTEpO3ZhciBIPXAud29yZHNbOV07Zm9yKGIud29yZHNbYi5sZW5ndGgrK109SCZ4LFQ9MTA7VDxwLmxlbmd0aDtUKyspe3ZhciBqPTB8cC53b3Jkc1tUXTtwLndvcmRzW1QtMTBd''@;'; put 'put ''PShqJngpPDw0fEg+Pj4yMixIPWp9cC53b3Jkc1tULTEwXT1IPj4+PTIyLHAubGVuZ3RoLT0wPT09SCYmcC5sZW5ndGg+MTA/MTA6OX0sbGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3Aud29yZHNbcC5sZW5ndGhdPTAscC53b3Jkc1twLmxlbmd0aCsxXT0wLHAubGVuZ3RoKz0yO2Zv''@;'; put 'put ''cih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MHxwLndvcmRzW3hdO3Aud29yZHNbeF09NjcxMDg4NjMmKGIrPTk3NypDKSxiPTY0KkMrKGIvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiYocC5sZW5ndGgtLSwwPT09cC53b3Jkc1twLmxlbmd0''@;'; put 'put ''aC0xXSYmcC5sZW5ndGgtLSkscH0sQihtZSxpZSksQihfZSxpZSksQihUZSxpZSksVGUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe2Zvcih2YXIgYj0wLHg9MDt4PHAubGVuZ3RoO3grKyl7dmFyIEM9MTkqKDB8cC53b3Jkc1t4XSkrYixUPTY3MTA4ODYzJkM7Qz4+Pj0yNixwLndvcmRz''@;'; put 'put ''W3hdPVQsYj1DfXJldHVybiAwIT09YiYmKHAud29yZHNbcC5sZW5ndGgrK109YikscH0sdy5fcHJpbWU9ZnVuY3Rpb24ocCl7aWYocmVbcF0pcmV0dXJuIHJlW3BdO3ZhciBiO2lmKCJrMjU2Ij09PXApYj1uZXcgbGU7ZWxzZSBpZigicDIyNCI9PT1wKWI9bmV3IG1lO2Vsc2UgaWYoInAxOTIi''@;'; put 'put ''PT09cCliPW5ldyBfZTtlbHNle2lmKCJwMjU1MTkiIT09cCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gcHJpbWUgIitwKTtiPW5ldyBUZX1yZXR1cm4gcmVbcF09YixifSxTZS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24ocCl7ZygwPT09cC5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkg''@;'; put 'put ''d2l0aCBwb3NpdGl2ZXMiKSxnKHAucmVkLCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIil9LFNlLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbihwLGIpe2coIShwLm5lZ2F0aXZlfGIubmVnYXRpdmUpLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQm''@;'; put 'put ''JnAucmVkPT09Yi5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHApLl9mb3JjZVJlZCh0aGlzKTpwLnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhp''@;'; put 'put ''cyl9LFNlLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24ocCl7cmV0dXJuIHAuaXNaZXJvKCk/cC5jbG9uZSgpOnRoaXMubS5zdWIocCkuX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuYWRkKGIpO3JldHVybiB4''@;'; put 'put ''LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pYWRkKGIpO3JldHVybiB4LmNtcCh0aGlzLm0pPj0wJiZ4LmlzdWIodGhpcy5tKSx4fSxTZS5w''@;'; put 'put ''cm90b3R5cGUuc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIpO3ZhciB4PXAuc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseC5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHAsYil7dGhpcy5fdmVyaWZ5MihwLGIp''@;'; put 'put ''O3ZhciB4PXAuaXN1YihiKTtyZXR1cm4geC5jbXBuKDApPDAmJnguaWFkZCh0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MShwKSx0aGlzLmltb2QocC51c2hsbihiKSl9LFNlLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7''@;'; put 'put ''cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5pbXVsKGIpKX0sU2UucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkyKHAsYiksdGhpcy5pbW9kKHAubXVsKGIpKX0sU2UucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuaW11bChwLHAuY2xvbmUoKSl9LFNlLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubXVsKHAscCl9LFNlLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHApe2lmKHAuaXNaZXJvKCkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgYj10aGlzLm0uYW5kbG4oMyk7aWYoZyhiJTI9''@;'; put 'put ''PTEpLDM9PT1iKXt2YXIgeD10aGlzLm0uYWRkKG5ldyB3KDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHAseCl9Zm9yKHZhciBDPXRoaXMubS5zdWJuKDEpLFQ9MDshQy5pc1plcm8oKSYmMD09PUMuYW5kbG4oMSk7KVQrKyxDLml1c2hybigxKTtnKCFDLmlzWmVybygpKTt2YXIgSD1u''@;'; put 'put ''ZXcgdygxKS50b1JlZCh0aGlzKSxqPUgucmVkTmVnKCksRT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksbT10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKG09bmV3IHcoMiptKm0pLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhtLEUpLmNtcChqKTspbS5yZWRJQWRkKGopO2Zvcih2YXIgQT10aGlz''@;'; put 'put ''LnBvdyhtLEMpLG9lPXRoaXMucG93KHAsQy5hZGRuKDEpLml1c2hybigxKSksdGU9dGhpcy5wb3cocCxDKSxzZT1UOzAhPT10ZS5jbXAoSCk7KXtmb3IodmFyIHdlPXRlLFVlPTA7MCE9PXdlLmNtcChIKTtVZSsrKXdlPXdlLnJlZFNxcigpO2coVWU8c2UpO3ZhciBKZT10aGlzLnBvdyhBLG5l''@;'; put 'put ''dyB3KDEpLml1c2hsbihzZS1VZS0xKSk7b2U9b2UucmVkTXVsKEplKSxBPUplLnJlZFNxcigpLHRlPXRlLnJlZE11bChBKSxzZT1VZX1yZXR1cm4gb2V9LFNlLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3ZhciBiPXAuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1iLm5lZ2F0aXZlPyhi''@;'; put 'put ''Lm5lZ2F0aXZlPTAsdGhpcy5pbW9kKGIpLnJlZE5lZygpKTp0aGlzLmltb2QoYil9LFNlLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24ocCxiKXtpZihiLmlzWmVybygpKXJldHVybiBuZXcgdygxKS50b1JlZCh0aGlzKTtpZigwPT09Yi5jbXBuKDEpKXJldHVybiBwLmNsb25lKCk7dmFyIEM9bmV3''@;'; put 'put ''IEFycmF5KDE2KTtDWzBdPW5ldyB3KDEpLnRvUmVkKHRoaXMpLENbMV09cDtmb3IodmFyIFQ9MjtUPEMubGVuZ3RoO1QrKylDW1RdPXRoaXMubXVsKENbVC0xXSxwKTt2YXIgSD1DWzBdLGo9MCxFPTAsbT1iLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09bSYmKG09MjYpLFQ9Yi5sZW5ndGgtMTtU''@;'; put 'put ''Pj0wO1QtLSl7Zm9yKHZhciBBPWIud29yZHNbVF0sb2U9bS0xO29lPj0wO29lLS0pe3ZhciB0ZT1BPj5vZSYxO0ghPT1DWzBdJiYoSD10aGlzLnNxcihIKSksMCE9PXRlfHwwIT09aj8oajw8PTEsanw9dGUsKDQ9PSsrRXx8MD09PVQmJjA9PT1vZSkmJihIPXRoaXMubXVsKEgsQ1tqXSksRT0w''@;'; put 'put ''LGo9MCkpOkU9MH1tPTI2fXJldHVybiBIfSxTZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3ZhciBiPXAudW1vZCh0aGlzLm0pO3JldHVybiBiPT09cD9iLmNsb25lKCk6Yn0sU2UucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHApe3ZhciBiPXAuY2xvbmUoKTtyZXR1''@;'; put 'put ''cm4gYi5yZWQ9bnVsbCxifSx3Lm1vbnQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyB6ZShwKX0sQih6ZSxTZSksemUucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAudXNobG4odGhpcy5zaGlmdCkpfSx6ZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVu''@;'; put 'put ''Y3Rpb24ocCl7dmFyIGI9dGhpcy5pbW9kKHAubXVsKHRoaXMucmludikpO3JldHVybiBiLnJlZD1udWxsLGJ9LHplLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gcC53b3Jkc1swXT0wLHAubGVuZ3RoPTEscDt2YXIgeD1wLmlt''@;'; put 'put ''dWwoYiksQz14Lm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxUPXguaXN1YihDKS5pdXNocm4odGhpcy5zaGlmdCksSD1UO3JldHVybiBULmNtcCh0aGlzLm0pPj0wP0g9VC5pc3ViKHRoaXMubSk6VC5jbXBuKDApPDAmJihI''@;'; put 'put ''PVQuaWFkZCh0aGlzLm0pKSxILl9mb3JjZVJlZCh0aGlzKX0semUucHJvdG90eXBlLm11bD1mdW5jdGlvbihwLGIpe2lmKHAuaXNaZXJvKCl8fGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgeD1wLm11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVs''@;'; put 'put ''KHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRo''@;'; put 'put ''aXMpfSx6ZS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbW9kKHAuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKS5fZm9yY2VSZWQodGhpcyl9fSh1ZT1fLm5tZCh1ZSksdGhpcyl9LDQ0MzU2OnVlPT57InVzZSBzdHJpY3QiO3ZhciBJLHE9Im9iamVjdCI9PXR5''@;'; put 'put ''cGVvZiBSZWZsZWN0P1JlZmxlY3Q6bnVsbCxfPXEmJiJmdW5jdGlvbiI9PXR5cGVvZiBxLmFwcGx5P3EuYXBwbHk6ZnVuY3Rpb24oaWUsbGUsbWUpe3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChpZSxsZSxtZSl9O0k9cSYmImZ1bmN0aW9uIj09dHlwZW9mIHEub3duS2V5''@;'; put 'put ''cz9xLm93bktleXM6T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scz9mdW5jdGlvbihpZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGllKS5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhpZSkpfTpmdW5jdGlvbihpZSl7cmV0dXJuIE9iamVjdC5nZXRP''@;'; put 'put ''d25Qcm9wZXJ0eU5hbWVzKGllKX07dmFyIGc9TnVtYmVyLmlzTmFOfHxmdW5jdGlvbihpZSl7cmV0dXJuIGllIT1pZX07ZnVuY3Rpb24gQigpe0IuaW5pdC5jYWxsKHRoaXMpfXVlLmV4cG9ydHM9Qix1ZS5leHBvcnRzLm9uY2U9ZnVuY3Rpb24gWChyZSxpZSl7cmV0dXJuIG5ldyBQcm9taXNl''@;'; put 'put ''KGZ1bmN0aW9uKGxlLG1lKXtmdW5jdGlvbiBfZShTZSl7cmUucmVtb3ZlTGlzdGVuZXIoaWUsVGUpLG1lKFNlKX1mdW5jdGlvbiBUZSgpeyJmdW5jdGlvbiI9PXR5cGVvZiByZS5yZW1vdmVMaXN0ZW5lciYmcmUucmVtb3ZlTGlzdGVuZXIoImVycm9yIixfZSksbGUoW10uc2xpY2UuY2FsbChh''@;'; put 'put ''cmd1bWVudHMpKX1KKHJlLGllLFRlLHtvbmNlOiEwfSksImVycm9yIiE9PWllJiZmdW5jdGlvbiBlZShyZSxpZSxsZSl7ImZ1bmN0aW9uIj09dHlwZW9mIHJlLm9uJiZKKHJlLCJlcnJvciIsaWUsbGUpfShyZSxfZSx7b25jZTohMH0pfSl9LEIuRXZlbnRFbWl0dGVyPUIsQi5wcm90b3R5cGUu''@;'; put 'put ''X2V2ZW50cz12b2lkIDAsQi5wcm90b3R5cGUuX2V2ZW50c0NvdW50PTAsQi5wcm90b3R5cGUuX21heExpc3RlbmVycz12b2lkIDA7dmFyIHc9MTA7ZnVuY3Rpb24gUChyZSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHJlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAibGlzdGVuZXIiIGFyZ3Vt''@;'; put 'put ''ZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiByZSl9ZnVuY3Rpb24gRihyZSl7cmV0dXJuIHZvaWQgMD09PXJlLl9tYXhMaXN0ZW5lcnM/Qi5kZWZhdWx0TWF4TGlzdGVuZXJzOnJlLl9tYXhMaXN0ZW5lcnN9ZnVuY3Rpb24gTyhyZSxpZSxsZSxt''@;'; put 'put ''ZSl7dmFyIF9lLFRlLFNlO2lmKFAobGUpLHZvaWQgMD09PShUZT1yZS5fZXZlbnRzKT8oVGU9cmUuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpLHJlLl9ldmVudHNDb3VudD0wKToodm9pZCAwIT09VGUubmV3TGlzdGVuZXImJihyZS5lbWl0KCJuZXdMaXN0ZW5lciIsaWUsbGUubGlzdGVu''@;'; put 'put ''ZXI/bGUubGlzdGVuZXI6bGUpLFRlPXJlLl9ldmVudHMpLFNlPVRlW2llXSksdm9pZCAwPT09U2UpU2U9VGVbaWVdPWxlLCsrcmUuX2V2ZW50c0NvdW50O2Vsc2UgaWYoImZ1bmN0aW9uIj09dHlwZW9mIFNlP1NlPVRlW2llXT1tZT9bbGUsU2VdOltTZSxsZV06bWU/U2UudW5zaGlmdChsZSk6''@;'; put 'put ''U2UucHVzaChsZSksKF9lPUYocmUpKT4wJiZTZS5sZW5ndGg+X2UmJiFTZS53YXJuZWQpe1NlLndhcm5lZD0hMDt2YXIgemU9bmV3IEVycm9yKCJQb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5IGxlYWsgZGV0ZWN0ZWQuICIrU2UubGVuZ3RoKyIgIitTdHJpbmcoaWUpKyIgbGlzdGVuZXJz''@;'; put 'put ''IGFkZGVkLiBVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1pdCIpO3plLm5hbWU9Ik1heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZyIsemUuZW1pdHRlcj1yZSx6ZS50eXBlPWllLHplLmNvdW50PVNlLmxlbmd0aCxmdW5jdGlvbiB5KHJlKXtjb25zb2xlJiZj''@;'; put 'put ''b25zb2xlLndhcm4mJmNvbnNvbGUud2FybihyZSl9KHplKX1yZXR1cm4gcmV9ZnVuY3Rpb24geigpe2lmKCF0aGlzLmZpcmVkKXJldHVybiB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsdGhpcy53cmFwRm4pLHRoaXMuZmlyZWQ9ITAsMD09PWFyZ3VtZW50cy5sZW5ndGg/''@;'; put 'put ''dGhpcy5saXN0ZW5lci5jYWxsKHRoaXMudGFyZ2V0KTp0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LGFyZ3VtZW50cyl9ZnVuY3Rpb24gTihyZSxpZSxsZSl7dmFyIG1lPXtmaXJlZDohMSx3cmFwRm46dm9pZCAwLHRhcmdldDpyZSx0eXBlOmllLGxpc3RlbmVyOmxlfSxfZT16LmJp''@;'; put 'put ''bmQobWUpO3JldHVybiBfZS5saXN0ZW5lcj1sZSxtZS53cmFwRm49X2UsX2V9ZnVuY3Rpb24gTChyZSxpZSxsZSl7dmFyIG1lPXJlLl9ldmVudHM7aWYodm9pZCAwPT09bWUpcmV0dXJuW107dmFyIF9lPW1lW2llXTtyZXR1cm4gdm9pZCAwPT09X2U/W106ImZ1bmN0aW9uIj09dHlwZW9mIF9l''@;'; put 'put ''P2xlP1tfZS5saXN0ZW5lcnx8X2VdOltfZV06bGU/ZnVuY3Rpb24gWShyZSl7Zm9yKHZhciBpZT1uZXcgQXJyYXkocmUubGVuZ3RoKSxsZT0wO2xlPGllLmxlbmd0aDsrK2xlKWllW2xlXT1yZVtsZV0ubGlzdGVuZXJ8fHJlW2xlXTtyZXR1cm4gaWV9KF9lKTpVKF9lLF9lLmxlbmd0aCl9ZnVu''@;'; put 'put ''Y3Rpb24gSyhyZSl7dmFyIGllPXRoaXMuX2V2ZW50cztpZih2b2lkIDAhPT1pZSl7dmFyIGxlPWllW3JlXTtpZigiZnVuY3Rpb24iPT10eXBlb2YgbGUpcmV0dXJuIDE7aWYodm9pZCAwIT09bGUpcmV0dXJuIGxlLmxlbmd0aH1yZXR1cm4gMH1mdW5jdGlvbiBVKHJlLGllKXtmb3IodmFyIGxl''@;'; put 'put ''PW5ldyBBcnJheShpZSksbWU9MDttZTxpZTsrK21lKWxlW21lXT1yZVttZV07cmV0dXJuIGxlfWZ1bmN0aW9uIEoocmUsaWUsbGUsbWUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiByZS5vbiltZS5vbmNlP3JlLm9uY2UoaWUsbGUpOnJlLm9uKGllLGxlKTtlbHNle2lmKCJmdW5jdGlvbiIhPXR5''@;'; put 'put ''cGVvZiByZS5hZGRFdmVudExpc3RlbmVyKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAiZW1pdHRlciIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIEV2ZW50RW1pdHRlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiByZSk7cmUuYWRkRXZlbnRMaXN0ZW5lcihpZSxmdW5jdGlvbiBfZShUZSl7''@;'; put 'put ''bWUub25jZSYmcmUucmVtb3ZlRXZlbnRMaXN0ZW5lcihpZSxfZSksbGUoVGUpfSl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShCLCJkZWZhdWx0TWF4TGlzdGVuZXJzIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gd30sc2V0OmZ1bmN0aW9uKHJlKXtpZigibnVtYmVyIiE9''@;'; put 'put ''dHlwZW9mIHJlfHxyZTwwfHxnKHJlKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mICJkZWZhdWx0TWF4TGlzdGVuZXJzIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnK3JlKyIuIik7dz1yZX19KSxCLmluaXQ9''@;'; put 'put ''ZnVuY3Rpb24oKXsodm9pZCAwPT09dGhpcy5fZXZlbnRzfHx0aGlzLl9ldmVudHM9PT1PYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykuX2V2ZW50cykmJih0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wKSx0aGlzLl9tYXhMaXN0ZW5lcnM9dGhp''@;'; put 'put ''cy5fbWF4TGlzdGVuZXJzfHx2b2lkIDB9LEIucHJvdG90eXBlLnNldE1heExpc3RlbmVycz1mdW5jdGlvbihpZSl7aWYoIm51bWJlciIhPXR5cGVvZiBpZXx8aWU8MHx8ZyhpZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiAibiIgaXMgb3V0IG9mIHJhbmdlLiBJdCBtdXN0''@;'; put 'put ''IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlci4gUmVjZWl2ZWQgJytpZSsiLiIpO3JldHVybiB0aGlzLl9tYXhMaXN0ZW5lcnM9aWUsdGhpc30sQi5wcm90b3R5cGUuZ2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKCl7cmV0dXJuIEYodGhpcyl9LEIucHJvdG90eXBlLmVtaXQ9ZnVuY3Rpb24oaWUp''@;'; put 'put ''e2Zvcih2YXIgbGU9W10sbWU9MTttZTxhcmd1bWVudHMubGVuZ3RoO21lKyspbGUucHVzaChhcmd1bWVudHNbbWVdKTt2YXIgX2U9ImVycm9yIj09PWllLFRlPXRoaXMuX2V2ZW50cztpZih2b2lkIDAhPT1UZSlfZT1fZSYmdm9pZCAwPT09VGUuZXJyb3I7ZWxzZSBpZighX2UpcmV0dXJuITE7''@;'; put 'put ''aWYoX2Upe3ZhciBTZTtpZihsZS5sZW5ndGg+MCYmKFNlPWxlWzBdKSxTZSBpbnN0YW5jZW9mIEVycm9yKXRocm93IFNlO3ZhciB6ZT1uZXcgRXJyb3IoIlVuaGFuZGxlZCBlcnJvci4iKyhTZT8iICgiK1NlLm1lc3NhZ2UrIikiOiIiKSk7dGhyb3cgemUuY29udGV4dD1TZSx6ZX12YXIgVj1U''@;'; put 'put ''ZVtpZV07aWYodm9pZCAwPT09VilyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgVilfKFYsdGhpcyxsZSk7ZWxzZXt2YXIgcD1WLmxlbmd0aCxiPVUoVixwKTtmb3IobWU9MDttZTxwOysrbWUpXyhiW21lXSx0aGlzLGxlKX1yZXR1cm4hMH0sQi5wcm90b3R5cGUub249Qi5wcm90b3R5''@;'; put 'put ''cGUuYWRkTGlzdGVuZXI9ZnVuY3Rpb24oaWUsbGUpe3JldHVybiBPKHRoaXMsaWUsbGUsITEpfSxCLnByb3RvdHlwZS5wcmVwZW5kTGlzdGVuZXI9ZnVuY3Rpb24oaWUsbGUpe3JldHVybiBPKHRoaXMsaWUsbGUsITApfSxCLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKGllLGxlKXtyZXR1cm4g''@;'; put 'put ''UChsZSksdGhpcy5vbihpZSxOKHRoaXMsaWUsbGUpKSx0aGlzfSxCLnByb3RvdHlwZS5wcmVwZW5kT25jZUxpc3RlbmVyPWZ1bmN0aW9uKGllLGxlKXtyZXR1cm4gUChsZSksdGhpcy5wcmVwZW5kTGlzdGVuZXIoaWUsTih0aGlzLGllLGxlKSksdGhpc30sQi5wcm90b3R5cGUub2ZmPUIucHJv''@;'; put 'put ''dG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKGllLGxlKXt2YXIgbWUsX2UsVGUsU2UsemU7aWYoUChsZSksdm9pZCAwPT09KF9lPXRoaXMuX2V2ZW50cykpcmV0dXJuIHRoaXM7aWYodm9pZCAwPT09KG1lPV9lW2llXSkpcmV0dXJuIHRoaXM7aWYobWU9PT1sZXx8bWUubGlzdGVuZXI9''@;'; put 'put ''PT1sZSkwPT0tLXRoaXMuX2V2ZW50c0NvdW50P3RoaXMuX2V2ZW50cz1PYmplY3QuY3JlYXRlKG51bGwpOihkZWxldGUgX2VbaWVdLF9lLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoInJlbW92ZUxpc3RlbmVyIixpZSxtZS5saXN0ZW5lcnx8bGUpKTtlbHNlIGlmKCJmdW5jdGlvbiIhPXR5''@;'; put 'put ''cGVvZiBtZSl7Zm9yKFRlPS0xLFNlPW1lLmxlbmd0aC0xO1NlPj0wO1NlLS0paWYobWVbU2VdPT09bGV8fG1lW1NlXS5saXN0ZW5lcj09PWxlKXt6ZT1tZVtTZV0ubGlzdGVuZXIsVGU9U2U7YnJlYWt9aWYoVGU8MClyZXR1cm4gdGhpczswPT09VGU/bWUuc2hpZnQoKTpmdW5jdGlvbiBXKHJl''@;'; put 'put ''LGllKXtmb3IoO2llKzE8cmUubGVuZ3RoO2llKyspcmVbaWVdPXJlW2llKzFdO3JlLnBvcCgpfShtZSxUZSksMT09PW1lLmxlbmd0aCYmKF9lW2llXT1tZVswXSksdm9pZCAwIT09X2UucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdCgicmVtb3ZlTGlzdGVuZXIiLGllLHplfHxsZSl9cmV0dXJu''@;'; put 'put ''IHRoaXN9LEIucHJvdG90eXBlLnJlbW92ZUFsbExpc3RlbmVycz1mdW5jdGlvbihpZSl7dmFyIGxlLG1lLF9lO2lmKHZvaWQgMD09PShtZT10aGlzLl9ldmVudHMpKXJldHVybiB0aGlzO2lmKHZvaWQgMD09PW1lLnJlbW92ZUxpc3RlbmVyKXJldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD8o''@;'; put 'put ''dGhpcy5fZXZlbnRzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZXZlbnRzQ291bnQ9MCk6dm9pZCAwIT09bWVbaWVdJiYoMD09LS10aGlzLl9ldmVudHNDb3VudD90aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKTpkZWxldGUgbWVbaWVdKSx0aGlzO2lmKDA9PT1hcmd1bWVudHMu''@;'; put 'put ''bGVuZ3RoKXt2YXIgU2UsVGU9T2JqZWN0LmtleXMobWUpO2ZvcihfZT0wO19lPFRlLmxlbmd0aDsrK19lKSJyZW1vdmVMaXN0ZW5lciIhPT0oU2U9VGVbX2VdKSYmdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoU2UpO3JldHVybiB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygicmVtb3ZlTGlzdGVu''@;'; put 'put ''ZXIiKSx0aGlzLl9ldmVudHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLl9ldmVudHNDb3VudD0wLHRoaXN9aWYoImZ1bmN0aW9uIj09dHlwZW9mKGxlPW1lW2llXSkpdGhpcy5yZW1vdmVMaXN0ZW5lcihpZSxsZSk7ZWxzZSBpZih2b2lkIDAhPT1sZSlmb3IoX2U9bGUubGVuZ3RoLTE7X2U+''@;'; put 'put ''PTA7X2UtLSl0aGlzLnJlbW92ZUxpc3RlbmVyKGllLGxlW19lXSk7cmV0dXJuIHRoaXN9LEIucHJvdG90eXBlLmxpc3RlbmVycz1mdW5jdGlvbihpZSl7cmV0dXJuIEwodGhpcyxpZSwhMCl9LEIucHJvdG90eXBlLnJhd0xpc3RlbmVycz1mdW5jdGlvbihpZSl7cmV0dXJuIEwodGhpcyxpZSwh''@;'; put 'put ''MSl9LEIubGlzdGVuZXJDb3VudD1mdW5jdGlvbihyZSxpZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHJlLmxpc3RlbmVyQ291bnQ/cmUubGlzdGVuZXJDb3VudChpZSk6Sy5jYWxsKHJlLGllKX0sQi5wcm90b3R5cGUubGlzdGVuZXJDb3VudD1LLEIucHJvdG90eXBlLmV2ZW50TmFtZXM9''@;'; put 'put ''ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQ+MD9JKHRoaXMuX2V2ZW50cyk6W119fSwxODIxMToodWUscSxfKT0+e3ZhciBJPV8oMjcwNTQpLkJ1ZmZlcix5PV8oMzQ3MjUpO3VlLmV4cG9ydHM9ZnVuY3Rpb24gZyhCLHcsUCxGKXtpZihJLmlzQnVmZmVyKEIpfHwoQj1JLmZy''@;'; put 'put ''b20oQiwiYmluYXJ5IikpLHcmJihJLmlzQnVmZmVyKHcpfHwodz1JLmZyb20odywiYmluYXJ5IikpLDghPT13Lmxlbmd0aCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInNhbHQgc2hvdWxkIGJlIEJ1ZmZlciB3aXRoIDggYnl0ZSBsZW5ndGgiKTtmb3IodmFyIE89UC84LHo9SS5hbGxvYyhPKSxO''@;'; put 'put ''PUkuYWxsb2MoRnx8MCksTD1JLmFsbG9jKDApO08+MHx8Rj4wOyl7dmFyIEs9bmV3IHk7Sy51cGRhdGUoTCksSy51cGRhdGUoQiksdyYmSy51cGRhdGUodyksTD1LLmRpZ2VzdCgpO3ZhciBVPTA7aWYoTz4wKXt2YXIgVz16Lmxlbmd0aC1PO1U9TWF0aC5taW4oTyxMLmxlbmd0aCksTC5jb3B5''@;'; put 'put ''KHosVywwLFUpLE8tPVV9aWYoVTxMLmxlbmd0aCYmRj4wKXt2YXIgWT1OLmxlbmd0aC1GLFg9TWF0aC5taW4oRixMLmxlbmd0aC1VKTtMLmNvcHkoTixZLFUsVStYKSxGLT1YfX1yZXR1cm4gTC5maWxsKDApLHtrZXk6eixpdjpOfX19LDEzNjg2Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3Zh''@;'; put 'put ''ciBJPV8oMjcwNTQpLkJ1ZmZlcix5PV8oNzA0NSkuVHJhbnNmb3JtO2Z1bmN0aW9uIEIoTyl7eS5jYWxsKHRoaXMpLHRoaXMuX2Jsb2NrPUkuYWxsb2NVbnNhZmUoTyksdGhpcy5fYmxvY2tTaXplPU8sdGhpcy5fYmxvY2tPZmZzZXQ9MCx0aGlzLl9sZW5ndGg9WzAsMCwwLDBdLHRoaXMuX2Zp''@;'; put 'put ''bmFsaXplZD0hMX1fKDcxOTkzKShCLHkpLEIucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oTyx6LE4pe3ZhciBMPW51bGw7dHJ5e3RoaXMudXBkYXRlKE8seil9Y2F0Y2goSyl7TD1LfU4oTCl9LEIucHJvdG90eXBlLl9mbHVzaD1mdW5jdGlvbihPKXt2YXIgej1udWxsO3RyeXt0aGlz''@;'; put 'put ''LnB1c2godGhpcy5kaWdlc3QoKSl9Y2F0Y2goTil7ej1OfU8oeil9O3ZhciB3PXR5cGVvZiBVaW50OEFycmF5PCJ1IixQPXR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJnR5cGVvZiBVaW50OEFycmF5PCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3JiYoSS5wcm90b3R5cGUgaW5zdGFuY2VvZiBVaW50''@;'; put 'put ''OEFycmF5fHxJLlRZUEVEX0FSUkFZX1NVUFBPUlQpO0IucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihPLHope2lmKHRoaXMuX2ZpbmFsaXplZCl0aHJvdyBuZXcgRXJyb3IoIkRpZ2VzdCBhbHJlYWR5IGNhbGxlZCIpO089ZnVuY3Rpb24gRihPLHope2lmKE8gaW5zdGFuY2VvZiBJKXJldHVy''@;'; put 'put ''biBPO2lmKCJzdHJpbmciPT10eXBlb2YgTylyZXR1cm4gSS5mcm9tKE8seik7aWYoUCYmQXJyYXlCdWZmZXIuaXNWaWV3KE8pKXtpZigwPT09Ty5ieXRlTGVuZ3RoKXJldHVybiBJLmFsbG9jKDApO3ZhciBOPUkuZnJvbShPLmJ1ZmZlcixPLmJ5dGVPZmZzZXQsTy5ieXRlTGVuZ3RoKTtpZihO''@;'; put 'put ''LmJ5dGVMZW5ndGg9PT1PLmJ5dGVMZW5ndGgpcmV0dXJuIE59aWYodyYmTyBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fEkuaXNCdWZmZXIoTykmJk8uY29uc3RydWN0b3ImJiJmdW5jdGlvbiI9PXR5cGVvZiBPLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZPLmNvbnN0cnVjdG9yLmlzQnVmZmVyKE8p''@;'; put 'put ''KXJldHVybiBJLmZyb20oTyk7dGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJkYXRhIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nIG9yIGFuIGluc3RhbmNlIG9mIEJ1ZmZlciwgVHlwZWRBcnJheSwgb3IgRGF0YVZpZXcuJyl9KE8seik7Zm9yKHZhciBOPXRoaXMuX2Jsb2NrLEw9''@;'; put 'put ''MDt0aGlzLl9ibG9ja09mZnNldCtPLmxlbmd0aC1MPj10aGlzLl9ibG9ja1NpemU7KXtmb3IodmFyIEs9dGhpcy5fYmxvY2tPZmZzZXQ7Szx0aGlzLl9ibG9ja1NpemU7KU5bSysrXT1PW0wrK107dGhpcy5fdXBkYXRlKCksdGhpcy5fYmxvY2tPZmZzZXQ9MH1mb3IoO0w8Ty5sZW5ndGg7KU5b''@;'; put 'put ''dGhpcy5fYmxvY2tPZmZzZXQrK109T1tMKytdO2Zvcih2YXIgVT0wLFc9OCpPLmxlbmd0aDtXPjA7KytVKXRoaXMuX2xlbmd0aFtVXSs9VywoVz10aGlzLl9sZW5ndGhbVV0vNDI5NDk2NzI5NnwwKT4wJiYodGhpcy5fbGVuZ3RoW1VdLT00Mjk0OTY3Mjk2KlcpO3JldHVybiB0aGlzfSxCLnBy''@;'; put 'put ''b3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJfdXBkYXRlIGlzIG5vdCBpbXBsZW1lbnRlZCIpfSxCLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24oTyl7aWYodGhpcy5fZmluYWxpemVkKXRocm93IG5ldyBFcnJvcigiRGlnZXN0IGFscmVhZHkgY2FsbGVkIik7''@;'; put 'put ''dGhpcy5fZmluYWxpemVkPSEwO3ZhciB6PXRoaXMuX2RpZ2VzdCgpO3ZvaWQgMCE9PU8mJih6PXoudG9TdHJpbmcoTykpLHRoaXMuX2Jsb2NrLmZpbGwoMCksdGhpcy5fYmxvY2tPZmZzZXQ9MDtmb3IodmFyIE49MDtOPDQ7KytOKXRoaXMuX2xlbmd0aFtOXT0wO3JldHVybiB6fSxCLnByb3Rv''@;'; put 'put ''dHlwZS5fZGlnZXN0PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJfZGlnZXN0IGlzIG5vdCBpbXBsZW1lbnRlZCIpfSx1ZS5leHBvcnRzPUJ9LDUyNTI5Oih1ZSxxLF8pPT57dmFyIEk9cTtJLnV0aWxzPV8oNjgyODMpLEkuY29tbW9uPV8oMTI5MDEpLEkuc2hhPV8oNzg1MjgpLEkucmlw''@;'; put 'put ''ZW1kPV8oMTUyODMpLEkuaG1hYz1fKDM3MTYzKSxJLnNoYTE9SS5zaGEuc2hhMSxJLnNoYTI1Nj1JLnNoYS5zaGEyNTYsSS5zaGEyMjQ9SS5zaGEuc2hhMjI0LEkuc2hhMzg0PUkuc2hhLnNoYTM4NCxJLnNoYTUxMj1JLnNoYS5zaGE1MTIsSS5yaXBlbWQxNjA9SS5yaXBlbWQucmlwZW1kMTYw''@;'; put 'put ''fSwxMjkwMToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDY4MjgzKSx5PV8oMzkyMTApO2Z1bmN0aW9uIGcoKXt0aGlzLnBlbmRpbmc9bnVsbCx0aGlzLnBlbmRpbmdUb3RhbD0wLHRoaXMuYmxvY2tTaXplPXRoaXMuY29uc3RydWN0b3IuYmxvY2tTaXplLHRoaXMub3V0U2l6ZT10''@;'; put 'put ''aGlzLmNvbnN0cnVjdG9yLm91dFNpemUsdGhpcy5obWFjU3RyZW5ndGg9dGhpcy5jb25zdHJ1Y3Rvci5obWFjU3RyZW5ndGgsdGhpcy5wYWRMZW5ndGg9dGhpcy5jb25zdHJ1Y3Rvci5wYWRMZW5ndGgvOCx0aGlzLmVuZGlhbj0iYmlnIix0aGlzLl9kZWx0YTg9dGhpcy5ibG9ja1NpemUvOCx0''@;'; put 'put ''aGlzLl9kZWx0YTMyPXRoaXMuYmxvY2tTaXplLzMyfXEuQmxvY2tIYXNoPWcsZy5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHcsUCl7aWYodz1JLnRvQXJyYXkodyxQKSx0aGlzLnBlbmRpbmc9dGhpcy5wZW5kaW5nP3RoaXMucGVuZGluZy5jb25jYXQodyk6dyx0aGlzLnBlbmRpbmdUb3Rh''@;'; put 'put ''bCs9dy5sZW5ndGgsdGhpcy5wZW5kaW5nLmxlbmd0aD49dGhpcy5fZGVsdGE4KXt2YXIgRj0odz10aGlzLnBlbmRpbmcpLmxlbmd0aCV0aGlzLl9kZWx0YTg7dGhpcy5wZW5kaW5nPXcuc2xpY2Uody5sZW5ndGgtRix3Lmxlbmd0aCksMD09PXRoaXMucGVuZGluZy5sZW5ndGgmJih0aGlzLnBl''@;'; put 'put ''bmRpbmc9bnVsbCksdz1JLmpvaW4zMih3LDAsdy5sZW5ndGgtRix0aGlzLmVuZGlhbik7Zm9yKHZhciBPPTA7Tzx3Lmxlbmd0aDtPKz10aGlzLl9kZWx0YTMyKXRoaXMuX3VwZGF0ZSh3LE8sTyt0aGlzLl9kZWx0YTMyKX1yZXR1cm4gdGhpc30sZy5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9u''@;'; put 'put ''KHcpe3JldHVybiB0aGlzLnVwZGF0ZSh0aGlzLl9wYWQoKSkseShudWxsPT09dGhpcy5wZW5kaW5nKSx0aGlzLl9kaWdlc3Qodyl9LGcucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24oKXt2YXIgdz10aGlzLnBlbmRpbmdUb3RhbCxQPXRoaXMuX2RlbHRhOCxGPVAtKHcrdGhpcy5wYWRMZW5ndGgp''@;'; put 'put ''JVAsTz1uZXcgQXJyYXkoRit0aGlzLnBhZExlbmd0aCk7T1swXT0xMjg7Zm9yKHZhciB6PTE7ejxGO3orKylPW3pdPTA7aWYodzw8PTMsImJpZyI9PT10aGlzLmVuZGlhbil7Zm9yKHZhciBOPTg7Tjx0aGlzLnBhZExlbmd0aDtOKyspT1t6KytdPTA7T1t6KytdPTAsT1t6KytdPTAsT1t6Kytd''@;'; put 'put ''PTAsT1t6KytdPTAsT1t6KytdPXc+Pj4yNCYyNTUsT1t6KytdPXc+Pj4xNiYyNTUsT1t6KytdPXc+Pj44JjI1NSxPW3orK109MjU1Jnd9ZWxzZSBmb3IoT1t6KytdPTI1NSZ3LE9beisrXT13Pj4+OCYyNTUsT1t6KytdPXc+Pj4xNiYyNTUsT1t6KytdPXc+Pj4yNCYyNTUsT1t6KytdPTAsT1t6''@;'; put 'put ''KytdPTAsT1t6KytdPTAsT1t6KytdPTAsTj04O048dGhpcy5wYWRMZW5ndGg7TisrKU9beisrXT0wO3JldHVybiBPfX0sMzcxNjM6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg2ODI4MykseT1fKDM5MjEwKTtmdW5jdGlvbiBnKEIsdyxQKXtpZighKHRoaXMgaW5zdGFuY2VvZiBn''@;'; put 'put ''KSlyZXR1cm4gbmV3IGcoQix3LFApO3RoaXMuSGFzaD1CLHRoaXMuYmxvY2tTaXplPUIuYmxvY2tTaXplLzgsdGhpcy5vdXRTaXplPUIub3V0U2l6ZS84LHRoaXMuaW5uZXI9bnVsbCx0aGlzLm91dGVyPW51bGwsdGhpcy5faW5pdChJLnRvQXJyYXkodyxQKSl9dWUuZXhwb3J0cz1nLGcucHJv''@;'; put 'put ''dG90eXBlLl9pbml0PWZ1bmN0aW9uKHcpe3cubGVuZ3RoPnRoaXMuYmxvY2tTaXplJiYodz0obmV3IHRoaXMuSGFzaCkudXBkYXRlKHcpLmRpZ2VzdCgpKSx5KHcubGVuZ3RoPD10aGlzLmJsb2NrU2l6ZSk7Zm9yKHZhciBQPXcubGVuZ3RoO1A8dGhpcy5ibG9ja1NpemU7UCsrKXcucHVzaCgw''@;'; put 'put ''KTtmb3IoUD0wO1A8dy5sZW5ndGg7UCsrKXdbUF1ePTU0O2Zvcih0aGlzLmlubmVyPShuZXcgdGhpcy5IYXNoKS51cGRhdGUodyksUD0wO1A8dy5sZW5ndGg7UCsrKXdbUF1ePTEwNjt0aGlzLm91dGVyPShuZXcgdGhpcy5IYXNoKS51cGRhdGUodyl9LGcucHJvdG90eXBlLnVwZGF0ZT1mdW5j''@;'; put 'put ''dGlvbih3LFApe3JldHVybiB0aGlzLmlubmVyLnVwZGF0ZSh3LFApLHRoaXN9LGcucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbih3KXtyZXR1cm4gdGhpcy5vdXRlci51cGRhdGUodGhpcy5pbm5lci5kaWdlc3QoKSksdGhpcy5vdXRlci5kaWdlc3Qodyl9fSwxNTI4MzoodWUscSxfKT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgST1fKDY4MjgzKSx5PV8oMTI5MDEpLGc9SS5yb3RsMzIsQj1JLnN1bTMyLHc9SS5zdW0zMl8zLFA9SS5zdW0zMl80LEY9eS5CbG9ja0hhc2g7ZnVuY3Rpb24gTygpe2lmKCEodGhpcyBpbnN0YW5jZW9mIE8pKXJldHVybiBuZXcgTztGLmNhbGwodGhpcyksdGhpcy5o''@;'; put 'put ''PVsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzgsMzI4NTM3NzUyMF0sdGhpcy5lbmRpYW49ImxpdHRsZSJ9ZnVuY3Rpb24geihYLGVlLEoscmUpe3JldHVybiBYPD0xNT9lZV5KXnJlOlg8PTMxP2VlJkp8fmVlJnJlOlg8PTQ3PyhlZXx+SilecmU6WDw9NjM/ZWUm''@;'; put 'put ''cmV8SiZ+cmU6ZWVeKEp8fnJlKX1mdW5jdGlvbiBMKFgpe3JldHVybiBYPD0xNT8xMzUyODI5OTI2Olg8PTMxPzE1NDg2MDM2ODQ6WDw9NDc/MTgzNjA3MjY5MTpYPD02Mz8yMDUzOTk0MjE3OjB9SS5pbmhlcml0cyhPLEYpLHEucmlwZW1kMTYwPU8sTy5ibG9ja1NpemU9NTEyLE8ub3V0U2l6''@;'; put 'put ''ZT0xNjAsTy5obWFjU3RyZW5ndGg9MTkyLE8ucGFkTGVuZ3RoPTY0LE8ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZWUsSil7Zm9yKHZhciByZT10aGlzLmhbMF0saWU9dGhpcy5oWzFdLGxlPXRoaXMuaFsyXSxtZT10aGlzLmhbM10sX2U9dGhpcy5oWzRdLFRlPXJlLFNlPWllLHplPWxl''@;'; put 'put ''LFY9bWUscD1fZSxiPTA7Yjw4MDtiKyspe3ZhciB4PUIoZyhQKHJlLHooYixpZSxsZSxtZSksZWVbS1tiXStKXSwoWD1iKTw9MTU/MDpYPD0zMT8xNTE4NTAwMjQ5Olg8PTQ3PzE4NTk3NzUzOTM6WDw9NjM/MjQwMDk1OTcwODoyODQwODUzODM4KSxXW2JdKSxfZSk7cmU9X2UsX2U9bWUsbWU9''@;'; put 'put ''ZyhsZSwxMCksbGU9aWUsaWU9eCx4PUIoZyhQKFRlLHooNzktYixTZSx6ZSxWKSxlZVtVW2JdK0pdLEwoYikpLFlbYl0pLHApLFRlPXAscD1WLFY9Zyh6ZSwxMCksemU9U2UsU2U9eH12YXIgWDt4PXcodGhpcy5oWzFdLGxlLFYpLHRoaXMuaFsxXT13KHRoaXMuaFsyXSxtZSxwKSx0aGlzLmhb''@;'; put 'put ''Ml09dyh0aGlzLmhbM10sX2UsVGUpLHRoaXMuaFszXT13KHRoaXMuaFs0XSxyZSxTZSksdGhpcy5oWzRdPXcodGhpcy5oWzBdLGllLHplKSx0aGlzLmhbMF09eH0sTy5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbihlZSl7cmV0dXJuImhleCI9PT1lZT9JLnRvSGV4MzIodGhpcy5oLCJsaXR0''@;'; put 'put ''bGUiKTpJLnNwbGl0MzIodGhpcy5oLCJsaXR0bGUiKX07dmFyIEs9WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsNyw0LDEzLDEsMTAsNiwxNSwzLDEyLDAsOSw1LDIsMTQsMTEsOCwzLDEwLDE0LDQsOSwxNSw4LDEsMiw3LDAsNiwxMywxMSw1LDEyLDEsOSwxMSwxMCww''@;'; put 'put ''LDgsMTIsNCwxMywzLDcsMTUsMTQsNSw2LDIsNCwwLDUsOSw3LDEyLDIsMTAsMTQsMSwzLDgsMTEsNiwxNSwxM10sVT1bNSwxNCw3LDAsOSwyLDExLDQsMTMsNiwxNSw4LDEsMTAsMywxMiw2LDExLDMsNywwLDEzLDUsMTAsMTQsMTUsOCwxMiw0LDksMSwyLDE1LDUsMSwzLDcsMTQsNiw5LDEx''@;'; put 'put ''LDgsMTIsMiwxMCwwLDQsMTMsOCw2LDQsMSwzLDExLDE1LDAsNSwxMiwyLDEzLDksNywxMCwxNCwxMiwxNSwxMCw0LDEsNSw4LDcsNiwyLDEzLDE0LDAsMyw5LDExXSxXPVsxMSwxNCwxNSwxMiw1LDgsNyw5LDExLDEzLDE0LDE1LDYsNyw5LDgsNyw2LDgsMTMsMTEsOSw3LDE1LDcsMTIsMTUs''@;'; put 'put ''OSwxMSw3LDEzLDEyLDExLDEzLDYsNywxNCw5LDEzLDE1LDE0LDgsMTMsNiw1LDEyLDcsNSwxMSwxMiwxNCwxNSwxNCwxNSw5LDgsOSwxNCw1LDYsOCw2LDUsMTIsOSwxNSw1LDExLDYsOCwxMywxMiw1LDEyLDEzLDE0LDExLDgsNSw2XSxZPVs4LDksOSwxMSwxMywxNSwxNSw1LDcsNyw4LDEx''@;'; put 'put ''LDE0LDE0LDEyLDYsOSwxMywxNSw3LDEyLDgsOSwxMSw3LDcsMTIsNyw2LDE1LDEzLDExLDksNywxNSwxMSw4LDYsNiwxNCwxMiwxMyw1LDE0LDEzLDEzLDcsNSwxNSw1LDgsMTEsMTQsMTQsNiwxNCw2LDksMTIsOSwxMiw1LDE1LDgsOCw1LDEyLDksMTIsNSwxNCw2LDgsMTMsNiw1LDE1LDEz''@;'; put 'put ''LDExLDExXX0sNzg1Mjg6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7cS5zaGExPV8oMzM0NjgpLHEuc2hhMjI0PV8oNTU2MykscS5zaGEyNTY9XygyNzEzOCkscS5zaGEzODQ9Xyg5Mzg5OCkscS5zaGE1MTI9XygxMDgyNyl9LDMzNDY4Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8o''@;'; put 'put ''NjgyODMpLHk9XygxMjkwMSksZz1fKDk1NTQyKSxCPUkucm90bDMyLHc9SS5zdW0zMixQPUkuc3VtMzJfNSxGPWcuZnRfMSxPPXkuQmxvY2tIYXNoLHo9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDMzOTU0Njk3ODJdO2Z1bmN0aW9uIE4oKXtpZighKHRoaXMgaW5zdGFuY2Vv''@;'; put 'put ''ZiBOKSlyZXR1cm4gbmV3IE47Ty5jYWxsKHRoaXMpLHRoaXMuaD1bMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4LDMyODUzNzc1MjBdLHRoaXMuVz1uZXcgQXJyYXkoODApfUkuaW5oZXJpdHMoTixPKSx1ZS5leHBvcnRzPU4sTi5ibG9ja1NpemU9NTEyLE4ub3V0''@;'; put 'put ''U2l6ZT0xNjAsTi5obWFjU3RyZW5ndGg9ODAsTi5wYWRMZW5ndGg9NjQsTi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihLLFUpe2Zvcih2YXIgVz10aGlzLlcsWT0wO1k8MTY7WSsrKVdbWV09S1tVK1ldO2Zvcig7WTxXLmxlbmd0aDtZKyspV1tZXT1CKFdbWS0zXV5XW1ktOF1eV1tZLTE0''@;'; put 'put ''XV5XW1ktMTZdLDEpO3ZhciBYPXRoaXMuaFswXSxlZT10aGlzLmhbMV0sSj10aGlzLmhbMl0scmU9dGhpcy5oWzNdLGllPXRoaXMuaFs0XTtmb3IoWT0wO1k8Vy5sZW5ndGg7WSsrKXt2YXIgbGU9fn4oWS8yMCksbWU9UChCKFgsNSksRihsZSxlZSxKLHJlKSxpZSxXW1ldLHpbbGVdKTtpZT1y''@;'; put 'put ''ZSxyZT1KLEo9QihlZSwzMCksZWU9WCxYPW1lfXRoaXMuaFswXT13KHRoaXMuaFswXSxYKSx0aGlzLmhbMV09dyh0aGlzLmhbMV0sZWUpLHRoaXMuaFsyXT13KHRoaXMuaFsyXSxKKSx0aGlzLmhbM109dyh0aGlzLmhbM10scmUpLHRoaXMuaFs0XT13KHRoaXMuaFs0XSxpZSl9LE4ucHJvdG90''@;'; put 'put ''eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oSyl7cmV0dXJuImhleCI9PT1LP0kudG9IZXgzMih0aGlzLmgsImJpZyIpOkkuc3BsaXQzMih0aGlzLmgsImJpZyIpfX0sNTU2MzoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDY4MjgzKSx5PV8oMjcxMzgpO2Z1bmN0aW9uIGcoKXtpZighKHRo''@;'; put 'put ''aXMgaW5zdGFuY2VvZiBnKSlyZXR1cm4gbmV3IGc7eS5jYWxsKHRoaXMpLHRoaXMuaD1bMzIzODM3MTAzMiw5MTQxNTA2NjMsODEyNzAyOTk5LDQxNDQ5MTI2OTcsNDI5MDc3NTg1NywxNzUwNjAzMDI1LDE2OTQwNzY4MzksMzIwNDA3NTQyOF19SS5pbmhlcml0cyhnLHkpLHVlLmV4cG9ydHM9''@;'; put 'put ''ZyxnLmJsb2NrU2l6ZT01MTIsZy5vdXRTaXplPTIyNCxnLmhtYWNTdHJlbmd0aD0xOTIsZy5wYWRMZW5ndGg9NjQsZy5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbih3KXtyZXR1cm4iaGV4Ij09PXc/SS50b0hleDMyKHRoaXMuaC5zbGljZSgwLDcpLCJiaWciKTpJLnNwbGl0MzIodGhpcy5o''@;'; put 'put ''LnNsaWNlKDAsNyksImJpZyIpfX0sMjcxMzg6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg2ODI4MykseT1fKDEyOTAxKSxnPV8oOTU1NDIpLEI9XygzOTIxMCksdz1JLnN1bTMyLFA9SS5zdW0zMl80LEY9SS5zdW0zMl81LE89Zy5jaDMyLHo9Zy5tYWozMixOPWcuczBfMjU2LEw9''@;'; put 'put ''Zy5zMV8yNTYsSz1nLmcwXzI1NixVPWcuZzFfMjU2LFc9eS5CbG9ja0hhc2gsWT1bMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4''@;'; put 'put ''LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5''@;'; put 'put ''NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMw''@;'; put 'put ''MjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwy''@;'; put 'put ''MDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XTtmdW5jdGlvbiBYKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgWCkpcmV0dXJuIG5ldyBYO1cuY2FsbCh0aGlzKSx0aGlzLmg9WzE3NzkwMzM3MDMsMzE0NDEz''@;'; put 'put ''NDI3NywxMDEzOTA0MjQyLDI3NzM0ODA3NjIsMTM1OTg5MzExOSwyNjAwODIyOTI0LDUyODczNDYzNSwxNTQxNDU5MjI1XSx0aGlzLms9WSx0aGlzLlc9bmV3IEFycmF5KDY0KX1JLmluaGVyaXRzKFgsVyksdWUuZXhwb3J0cz1YLFguYmxvY2tTaXplPTUxMixYLm91dFNpemU9MjU2LFguaG1h''@;'; put 'put ''Y1N0cmVuZ3RoPTE5MixYLnBhZExlbmd0aD02NCxYLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKEoscmUpe2Zvcih2YXIgaWU9dGhpcy5XLGxlPTA7bGU8MTY7bGUrKylpZVtsZV09SltyZStsZV07Zm9yKDtsZTxpZS5sZW5ndGg7bGUrKylpZVtsZV09UChVKGllW2xlLTJdKSxpZVtsZS03''@;'; put 'put ''XSxLKGllW2xlLTE1XSksaWVbbGUtMTZdKTt2YXIgbWU9dGhpcy5oWzBdLF9lPXRoaXMuaFsxXSxUZT10aGlzLmhbMl0sU2U9dGhpcy5oWzNdLHplPXRoaXMuaFs0XSxWPXRoaXMuaFs1XSxwPXRoaXMuaFs2XSxiPXRoaXMuaFs3XTtmb3IoQih0aGlzLmsubGVuZ3RoPT09aWUubGVuZ3RoKSxs''@;'; put 'put ''ZT0wO2xlPGllLmxlbmd0aDtsZSsrKXt2YXIgeD1GKGIsTCh6ZSksTyh6ZSxWLHApLHRoaXMua1tsZV0saWVbbGVdKSxDPXcoTihtZSkseihtZSxfZSxUZSkpO2I9cCxwPVYsVj16ZSx6ZT13KFNlLHgpLFNlPVRlLFRlPV9lLF9lPW1lLG1lPXcoeCxDKX10aGlzLmhbMF09dyh0aGlzLmhbMF0s''@;'; put 'put ''bWUpLHRoaXMuaFsxXT13KHRoaXMuaFsxXSxfZSksdGhpcy5oWzJdPXcodGhpcy5oWzJdLFRlKSx0aGlzLmhbM109dyh0aGlzLmhbM10sU2UpLHRoaXMuaFs0XT13KHRoaXMuaFs0XSx6ZSksdGhpcy5oWzVdPXcodGhpcy5oWzVdLFYpLHRoaXMuaFs2XT13KHRoaXMuaFs2XSxwKSx0aGlzLmhb''@;'; put 'put ''N109dyh0aGlzLmhbN10sYil9LFgucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oSil7cmV0dXJuImhleCI9PT1KP0kudG9IZXgzMih0aGlzLmgsImJpZyIpOkkuc3BsaXQzMih0aGlzLmgsImJpZyIpfX0sOTM4OTg6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg2ODI4MykseT1f''@;'; put 'put ''KDEwODI3KTtmdW5jdGlvbiBnKCl7aWYoISh0aGlzIGluc3RhbmNlb2YgZykpcmV0dXJuIG5ldyBnO3kuY2FsbCh0aGlzKSx0aGlzLmg9WzM0MTgwNzAzNjUsMzIzODM3MTAzMiwxNjU0MjcwMjUwLDkxNDE1MDY2MywyNDM4NTI5MzcwLDgxMjcwMjk5OSwzNTU0NjIzNjAsNDE0NDkxMjY5Nywx''@;'; put 'put ''NzMxNDA1NDE1LDQyOTA3NzU4NTcsMjM5NDE4MDIzMSwxNzUwNjAzMDI1LDM2NzUwMDg1MjUsMTY5NDA3NjgzOSwxMjAzMDYyODEzLDMyMDQwNzU0MjhdfUkuaW5oZXJpdHMoZyx5KSx1ZS5leHBvcnRzPWcsZy5ibG9ja1NpemU9MTAyNCxnLm91dFNpemU9Mzg0LGcuaG1hY1N0cmVuZ3RoPTE5''@;'; put 'put ''MixnLnBhZExlbmd0aD0xMjgsZy5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbih3KXtyZXR1cm4iaGV4Ij09PXc/SS50b0hleDMyKHRoaXMuaC5zbGljZSgwLDEyKSwiYmlnIik6SS5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLDEyKSwiYmlnIil9fSwxMDgyNzoodWUscSxfKT0+eyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgST1fKDY4MjgzKSx5PV8oMTI5MDEpLGc9XygzOTIxMCksQj1JLnJvdHI2NF9oaSx3PUkucm90cjY0X2xvLFA9SS5zaHI2NF9oaSxGPUkuc2hyNjRfbG8sTz1JLnN1bTY0LHo9SS5zdW02NF9oaSxOPUkuc3VtNjRfbG8sTD1JLnN1bTY0XzRfaGksSz1JLnN1bTY0XzRfbG8sVT1J''@;'; put 'put ''LnN1bTY0XzVfaGksVz1JLnN1bTY0XzVfbG8sWT15LkJsb2NrSGFzaCxYPVsxMTE2MzUyNDA4LDM2MDk3Njc0NTgsMTg5OTQ0NzQ0MSw2MDI4OTE3MjUsMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5LDM5MjEwMDk1NzMsMjE3MzI5NTU0OCw5NjE5ODcxNjMsNDA4MTYyODQ3MiwxNTA4OTcwOTkzLDMw''@;'; put 'put ''NTM4MzQyNjUsMjQ1MzYzNTc0OCwyOTM3NjcxNTc5LDI4NzA3NjMyMjEsMzY2NDYwOTU2MCwzNjI0MzgxMDgwLDI3MzQ4ODMzOTQsMzEwNTk4NDAxLDExNjQ5OTY1NDIsNjA3MjI1Mjc4LDEzMjM2MTA3NjQsMTQyNjg4MTk4NywzNTkwMzA0OTk0LDE5MjUwNzgzODgsNDA2ODE4MjM4MywyMTYy''@;'; put 'put ''MDc4MjA2LDk5MTMzNjExMywyNjE0ODg4MTAzLDYzMzgwMzMxNywzMjQ4MjIyNTgwLDM0Nzk3NzQ4NjgsMzgzNTM5MDQwMSwyNjY2NjEzNDU4LDQwMjIyMjQ3NzQsOTQ0NzExMTM5LDI2NDM0NzA3OCwyMzQxMjYyNzczLDYwNDgwNzYyOCwyMDA3ODAwOTMzLDc3MDI1NTk4MywxNDk1OTkwOTAx''@;'; put 'put ''LDEyNDkxNTAxMjIsMTg1NjQzMTIzNSwxNTU1MDgxNjkyLDMxNzUyMTgxMzIsMTk5NjA2NDk4NiwyMTk4OTUwODM3LDI1NTQyMjA4ODIsMzk5OTcxOTMzOSwyODIxODM0MzQ5LDc2Njc4NDAxNiwyOTUyOTk2ODA4LDI1NjY1OTQ4NzksMzIxMDMxMzY3MSwzMjAzMzM3OTU2LDMzMzY1NzE4OTEs''@;'; put 'put ''MTAzNDQ1NzAyNiwzNTg0NTI4NzExLDI0NjY5NDg5MDEsMTEzOTI2OTkzLDM3NTgzMjYzODMsMzM4MjQxODk1LDE2ODcxNzkzNiw2NjYzMDcyMDUsMTE4ODE3OTk2NCw3NzM1Mjk5MTIsMTU0NjA0NTczNCwxMjk0NzU3MzcyLDE1MjI4MDU0ODUsMTM5NjE4MjI5MSwyNjQzODMzODIzLDE2OTUx''@;'; put 'put ''ODM3MDAsMjM0MzUyNzM5MCwxOTg2NjYxMDUxLDEwMTQ0Nzc0ODAsMjE3NzAyNjM1MCwxMjA2NzU5MTQyLDI0NTY5NTYwMzcsMzQ0MDc3NjI3LDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCwyODIwMzAyNDExLDMxNTg0NTQyNzMsMzI1OTczMDgwMCwzNTA1OTUyNjU3LDMzNDU3NjQ3NzEsMTA2MjE3''@;'; put 'put ''MDA4LDM1MTYwNjU4MTcsMzYwNjAwODM0NCwzNjAwMzUyODA0LDE0MzI3MjU3NzYsNDA5NDU3MTkwOSwxNDY3MDMxNTk0LDI3NTQyMzM0NCw4NTExNjk3MjAsNDMwMjI3NzM0LDMxMDA4MjM3NTIsNTA2OTQ4NjE2LDEzNjMyNTgxOTUsNjU5MDYwNTU2LDM3NTA2ODU1OTMsODgzOTk3ODc3LDM3''@;'; put 'put ''ODUwNTAyODAsOTU4MTM5NTcxLDMzMTgzMDc0MjcsMTMyMjgyMjIxOCwzODEyNzIzNDAzLDE1MzcwMDIwNjMsMjAwMzAzNDk5NSwxNzQ3ODczNzc5LDM2MDIwMzY4OTksMTk1NTU2MjIyMiwxNTc1OTkwMDEyLDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCwyMjI3NzMwNDUyLDI3MTY5MDQzMDYsMjM2''@;'; put 'put ''MTg1MjQyNCw0NDI3NzYwNDQsMjQyODQzNjQ3NCw1OTM2OTgzNDQsMjc1NjczNDE4NywzNzMzMTEwMjQ5LDMyMDQwMzE0NzksMjk5OTM1MTU3MywzMzI5MzI1Mjk4LDM4MTU5MjA0MjcsMzM5MTU2OTYxNCwzOTI4MzgzOTAwLDM1MTUyNjcyNzEsNTY2MjgwNzExLDM5NDAxODc2MDYsMzQ1NDA2''@;'; put 'put ''OTUzNCw0MTE4NjMwMjcxLDQwMDAyMzk5OTIsMTE2NDE4NDc0LDE5MTQxMzg1NTQsMTc0MjkyNDIxLDI3MzEwNTUyNzAsMjg5MzgwMzU2LDMyMDM5OTMwMDYsNDYwMzkzMjY5LDMyMDYyMDMxNSw2ODU0NzE3MzMsNTg3NDk2ODM2LDg1MjE0Mjk3MSwxMDg2NzkyODUxLDEwMTcwMzYyOTgsMzY1''@;'; put 'put ''NTQzMTAwLDExMjYwMDA1ODAsMjYxODI5NzY3NiwxMjg4MDMzNDcwLDM0MDk4NTUxNTgsMTUwMTUwNTk0OCw0MjM0NTA5ODY2LDE2MDcxNjc5MTUsOTg3MTY3NDY4LDE4MTY0MDIzMTYsMTI0NjE4OTU5MV07ZnVuY3Rpb24gZWUoKXtpZighKHRoaXMgaW5zdGFuY2VvZiBlZSkpcmV0dXJuIG5l''@;'; put 'put ''dyBlZTtZLmNhbGwodGhpcyksdGhpcy5oPVsxNzc5MDMzNzAzLDQwODkyMzU3MjAsMzE0NDEzNDI3NywyMjI3ODczNTk1LDEwMTM5MDQyNDIsNDI3MTE3NTcyMywyNzczNDgwNzYyLDE1OTU3NTAxMjksMTM1OTg5MzExOSwyOTE3NTY1MTM3LDI2MDA4MjI5MjQsNzI1NTExMTk5LDUyODczNDYz''@;'; put 'put ''NSw0MjE1Mzg5NTQ3LDE1NDE0NTkyMjUsMzI3MDMzMjA5XSx0aGlzLms9WCx0aGlzLlc9bmV3IEFycmF5KDE2MCl9ZnVuY3Rpb24gSih4LEMsVCxILGope3ZhciBFPXgmVF5+eCZqO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIHJlKHgsQyxULEgsaixFKXt2YXIgbT1D''@;'; put 'put ''JkhefkMmRTtyZXR1cm4gbTwwJiYobSs9NDI5NDk2NzI5NiksbX1mdW5jdGlvbiBpZSh4LEMsVCxILGope3ZhciBFPXgmVF54JmpeVCZqO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIGxlKHgsQyxULEgsaixFKXt2YXIgbT1DJkheQyZFXkgmRTtyZXR1cm4gbTwwJiYo''@;'; put 'put ''bSs9NDI5NDk2NzI5NiksbX1mdW5jdGlvbiBtZSh4LEMpe3ZhciBFPUIoeCxDLDI4KV5CKEMseCwyKV5CKEMseCw3KTtyZXR1cm4gRTwwJiYoRSs9NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBfZSh4LEMpe3ZhciBFPXcoeCxDLDI4KV53KEMseCwyKV53KEMseCw3KTtyZXR1cm4gRTwwJiYoRSs9''@;'; put 'put ''NDI5NDk2NzI5NiksRX1mdW5jdGlvbiBUZSh4LEMpe3ZhciBFPUIoeCxDLDE0KV5CKHgsQywxOCleQihDLHgsOSk7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gU2UoeCxDKXt2YXIgRT13KHgsQywxNCledyh4LEMsMTgpXncoQyx4LDkpO3JldHVybiBFPDAmJihFKz00''@;'; put 'put ''Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIHplKHgsQyl7dmFyIEU9Qih4LEMsMSleQih4LEMsOCleUCh4LEMsNyk7cmV0dXJuIEU8MCYmKEUrPTQyOTQ5NjcyOTYpLEV9ZnVuY3Rpb24gVih4LEMpe3ZhciBFPXcoeCxDLDEpXncoeCxDLDgpXkYoeCxDLDcpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3''@;'; put 'put ''Mjk2KSxFfWZ1bmN0aW9uIHAoeCxDKXt2YXIgRT1CKHgsQywxOSleQihDLHgsMjkpXlAoeCxDLDYpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2KSxFfWZ1bmN0aW9uIGIoeCxDKXt2YXIgRT13KHgsQywxOSledyhDLHgsMjkpXkYoeCxDLDYpO3JldHVybiBFPDAmJihFKz00Mjk0OTY3Mjk2''@;'; put 'put ''KSxFfUkuaW5oZXJpdHMoZWUsWSksdWUuZXhwb3J0cz1lZSxlZS5ibG9ja1NpemU9MTAyNCxlZS5vdXRTaXplPTUxMixlZS5obWFjU3RyZW5ndGg9MTkyLGVlLnBhZExlbmd0aD0xMjgsZWUucHJvdG90eXBlLl9wcmVwYXJlQmxvY2s9ZnVuY3Rpb24oQyxUKXtmb3IodmFyIEg9dGhpcy5XLGo9''@;'; put 'put ''MDtqPDMyO2orKylIW2pdPUNbVCtqXTtmb3IoO2o8SC5sZW5ndGg7ais9Mil7dmFyIEU9cChIW2otNF0sSFtqLTNdKSxtPWIoSFtqLTRdLEhbai0zXSksQT1IW2otMTRdLG9lPUhbai0xM10sdGU9emUoSFtqLTMwXSxIW2otMjldKSxzZT1WKEhbai0zMF0sSFtqLTI5XSksd2U9SFtqLTMyXSxV''@;'; put 'put ''ZT1IW2otMzFdO0hbal09TChFLG0sQSxvZSx0ZSxzZSx3ZSxVZSksSFtqKzFdPUsoRSxtLEEsb2UsdGUsc2Usd2UsVWUpfX0sZWUucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oQyxUKXt0aGlzLl9wcmVwYXJlQmxvY2soQyxUKTt2YXIgSD10aGlzLlcsaj10aGlzLmhbMF0sRT10aGlzLmhb''@;'; put 'put ''MV0sbT10aGlzLmhbMl0sQT10aGlzLmhbM10sb2U9dGhpcy5oWzRdLHRlPXRoaXMuaFs1XSxzZT10aGlzLmhbNl0sd2U9dGhpcy5oWzddLFVlPXRoaXMuaFs4XSxKZT10aGlzLmhbOV0sYXQ9dGhpcy5oWzEwXSxNZT10aGlzLmhbMTFdLHZlPXRoaXMuaFsxMl0sWGU9dGhpcy5oWzEzXSxqZT10''@;'; put 'put ''aGlzLmhbMTRdLERlPXRoaXMuaFsxNV07Zyh0aGlzLmsubGVuZ3RoPT09SC5sZW5ndGgpO2Zvcih2YXIgRmU9MDtGZTxILmxlbmd0aDtGZSs9Mil7dmFyIFJlPWplLEllPURlLFZlPVRlKFVlLEplKSxrZT1TZShVZSxKZSksQWU9SihVZSwwLGF0LDAsdmUpLF90PXJlKDAsSmUsMCxNZSwwLFhl''@;'; put 'put ''KSxydD10aGlzLmtbRmVdLFFlPXRoaXMua1tGZSsxXSxkbj1IW0ZlXSx5dD1IW0ZlKzFdLE10PVUoUmUsSWUsVmUsa2UsQWUsX3QscnQsUWUsZG4seXQpLER0PVcoUmUsSWUsVmUsa2UsQWUsX3QscnQsUWUsZG4seXQpO1JlPW1lKGosRSksSWU9X2UoaixFKSxWZT1pZShqLDAsbSwwLG9lKSxr''@;'; put 'put ''ZT1sZSgwLEUsMCxBLDAsdGUpO3ZhciBpdD16KFJlLEllLFZlLGtlKSwkZT1OKFJlLEllLFZlLGtlKTtqZT12ZSxEZT1YZSx2ZT1hdCxYZT1NZSxhdD1VZSxNZT1KZSxVZT16KHNlLHdlLE10LER0KSxKZT1OKHdlLHdlLE10LER0KSxzZT1vZSx3ZT10ZSxvZT1tLHRlPUEsbT1qLEE9RSxqPXoo''@;'; put 'put ''TXQsRHQsaXQsJGUpLEU9TihNdCxEdCxpdCwkZSl9Tyh0aGlzLmgsMCxqLEUpLE8odGhpcy5oLDIsbSxBKSxPKHRoaXMuaCw0LG9lLHRlKSxPKHRoaXMuaCw2LHNlLHdlKSxPKHRoaXMuaCw4LFVlLEplKSxPKHRoaXMuaCwxMCxhdCxNZSksTyh0aGlzLmgsMTIsdmUsWGUpLE8odGhpcy5oLDE0''@;'; put 'put ''LGplLERlKX0sZWUucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24oQyl7cmV0dXJuImhleCI9PT1DP0kudG9IZXgzMih0aGlzLmgsImJpZyIpOkkuc3BsaXQzMih0aGlzLmgsImJpZyIpfX0sOTU1NDI6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIHk9Xyg2ODI4Mykucm90cjMyO2Z1bmN0''@;'; put 'put ''aW9uIEIoTCxLLFUpe3JldHVybiBMJktefkwmVX1mdW5jdGlvbiB3KEwsSyxVKXtyZXR1cm4gTCZLXkwmVV5LJlV9ZnVuY3Rpb24gUChMLEssVSl7cmV0dXJuIExeS15VfXEuZnRfMT1mdW5jdGlvbiBnKEwsSyxVLFcpe3JldHVybiAwPT09TD9CKEssVSxXKToxPT09THx8Mz09PUw/UChLLFUs''@;'; put 'put ''Vyk6Mj09PUw/dyhLLFUsVyk6dm9pZCAwfSxxLmNoMzI9QixxLm1hajMyPXcscS5wMzI9UCxxLnMwXzI1Nj1mdW5jdGlvbiBGKEwpe3JldHVybiB5KEwsMileeShMLDEzKV55KEwsMjIpfSxxLnMxXzI1Nj1mdW5jdGlvbiBPKEwpe3JldHVybiB5KEwsNileeShMLDExKV55KEwsMjUpfSxxLmcw''@;'; put 'put ''XzI1Nj1mdW5jdGlvbiB6KEwpe3JldHVybiB5KEwsNyleeShMLDE4KV5MPj4+M30scS5nMV8yNTY9ZnVuY3Rpb24gTihMKXtyZXR1cm4geShMLDE3KV55KEwsMTkpXkw+Pj4xMH19LDY4MjgzOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMzkyMTApLHk9Xyg3MTk5Myk7ZnVuY3Rp''@;'; put 'put ''b24gZyhiLHgpe3JldHVybiEoNTUyOTYhPSg2NDUxMiZiLmNoYXJDb2RlQXQoeCkpfHx4PDB8fHgrMT49Yi5sZW5ndGgpJiY1NjMyMD09KDY0NTEyJmIuY2hhckNvZGVBdCh4KzEpKX1mdW5jdGlvbiBQKGIpe3JldHVybihiPj4+MjR8Yj4+PjgmNjUyODB8Yjw8OCYxNjcxMTY4MHwoMjU1JmIp''@;'; put 'put ''PDwyNCk+Pj4wfWZ1bmN0aW9uIE8oYil7cmV0dXJuIDE9PT1iLmxlbmd0aD8iMCIrYjpifWZ1bmN0aW9uIHooYil7cmV0dXJuIDc9PT1iLmxlbmd0aD8iMCIrYjo2PT09Yi5sZW5ndGg/IjAwIitiOjU9PT1iLmxlbmd0aD8iMDAwIitiOjQ9PT1iLmxlbmd0aD8iMDAwMCIrYjozPT09Yi5sZW5n''@;'; put 'put ''dGg/IjAwMDAwIitiOjI9PT1iLmxlbmd0aD8iMDAwMDAwIitiOjE9PT1iLmxlbmd0aD8iMDAwMDAwMCIrYjpifXEuaW5oZXJpdHM9eSxxLnRvQXJyYXk9ZnVuY3Rpb24gQihiLHgpe2lmKEFycmF5LmlzQXJyYXkoYikpcmV0dXJuIGIuc2xpY2UoKTtpZighYilyZXR1cm5bXTt2YXIgQz1bXTtp''@;'; put 'put ''Zigic3RyaW5nIj09dHlwZW9mIGIpaWYoeCl7aWYoImhleCI9PT14KWZvcigoYj1iLnJlcGxhY2UoL1teYS16MC05XSsvZ2ksIiIpKS5sZW5ndGglMiE9MCYmKGI9IjAiK2IpLEg9MDtIPGIubGVuZ3RoO0grPTIpQy5wdXNoKHBhcnNlSW50KGJbSF0rYltIKzFdLDE2KSl9ZWxzZSBmb3IodmFy''@;'; put 'put ''IFQ9MCxIPTA7SDxiLmxlbmd0aDtIKyspe3ZhciBqPWIuY2hhckNvZGVBdChIKTtqPDEyOD9DW1QrK109ajpqPDIwNDg/KENbVCsrXT1qPj42fDE5MixDW1QrK109NjMmanwxMjgpOmcoYixIKT8oaj02NTUzNisoKDEwMjMmaik8PDEwKSsoMTAyMyZiLmNoYXJDb2RlQXQoKytIKSksQ1tUKytd''@;'; put 'put ''PWo+PjE4fDI0MCxDW1QrK109aj4+MTImNjN8MTI4LENbVCsrXT1qPj42JjYzfDEyOCxDW1QrK109NjMmanwxMjgpOihDW1QrK109aj4+MTJ8MjI0LENbVCsrXT1qPj42JjYzfDEyOCxDW1QrK109NjMmanwxMjgpfWVsc2UgZm9yKEg9MDtIPGIubGVuZ3RoO0grKylDW0hdPTB8YltIXTtyZXR1''@;'; put 'put ''cm4gQ30scS50b0hleD1mdW5jdGlvbiB3KGIpe2Zvcih2YXIgeD0iIixDPTA7QzxiLmxlbmd0aDtDKyspeCs9TyhiW0NdLnRvU3RyaW5nKDE2KSk7cmV0dXJuIHh9LHEuaHRvbmw9UCxxLnRvSGV4MzI9ZnVuY3Rpb24gRihiLHgpe2Zvcih2YXIgQz0iIixUPTA7VDxiLmxlbmd0aDtUKyspe3Zh''@;'; put 'put ''ciBIPWJbVF07ImxpdHRsZSI9PT14JiYoSD1QKEgpKSxDKz16KEgudG9TdHJpbmcoMTYpKX1yZXR1cm4gQ30scS56ZXJvMj1PLHEuemVybzg9eixxLmpvaW4zMj1mdW5jdGlvbiBOKGIseCxDLFQpe3ZhciBIPUMteDtJKEglND09MCk7Zm9yKHZhciBqPW5ldyBBcnJheShILzQpLEU9MCxtPXg7''@;'; put 'put ''RTxqLmxlbmd0aDtFKyssbSs9NClqW0VdPSgiYmlnIj09PVQ/YlttXTw8MjR8YlttKzFdPDwxNnxiW20rMl08PDh8YlttKzNdOmJbbSszXTw8MjR8YlttKzJdPDwxNnxiW20rMV08PDh8YlttXSk+Pj4wO3JldHVybiBqfSxxLnNwbGl0MzI9ZnVuY3Rpb24gTChiLHgpe2Zvcih2YXIgQz1uZXcg''@;'; put 'put ''QXJyYXkoNCpiLmxlbmd0aCksVD0wLEg9MDtUPGIubGVuZ3RoO1QrKyxIKz00KXt2YXIgaj1iW1RdOyJiaWciPT09eD8oQ1tIXT1qPj4+MjQsQ1tIKzFdPWo+Pj4xNiYyNTUsQ1tIKzJdPWo+Pj44JjI1NSxDW0grM109MjU1JmopOihDW0grM109aj4+PjI0LENbSCsyXT1qPj4+MTYmMjU1LENb''@;'; put 'put ''SCsxXT1qPj4+OCYyNTUsQ1tIXT0yNTUmail9cmV0dXJuIEN9LHEucm90cjMyPWZ1bmN0aW9uIEsoYix4KXtyZXR1cm4gYj4+Pnh8Yjw8MzIteH0scS5yb3RsMzI9ZnVuY3Rpb24gVShiLHgpe3JldHVybiBiPDx4fGI+Pj4zMi14fSxxLnN1bTMyPWZ1bmN0aW9uIFcoYix4KXtyZXR1cm4gYit4''@;'; put 'put ''Pj4+MH0scS5zdW0zMl8zPWZ1bmN0aW9uIFkoYix4LEMpe3JldHVybiBiK3grQz4+PjB9LHEuc3VtMzJfND1mdW5jdGlvbiBYKGIseCxDLFQpe3JldHVybiBiK3grQytUPj4+MH0scS5zdW0zMl81PWZ1bmN0aW9uIGVlKGIseCxDLFQsSCl7cmV0dXJuIGIreCtDK1QrSD4+PjB9LHEuc3VtNjQ9''@;'; put 'put ''ZnVuY3Rpb24gSihiLHgsQyxUKXt2YXIgRT1UK2JbeCsxXT4+PjA7Ylt4XT0oRTxUPzE6MCkrQytiW3hdPj4+MCxiW3grMV09RX0scS5zdW02NF9oaT1mdW5jdGlvbiByZShiLHgsQyxUKXtyZXR1cm4oeCtUPj4+MDx4PzE6MCkrYitDPj4+MH0scS5zdW02NF9sbz1mdW5jdGlvbiBpZShiLHgs''@;'; put 'put ''QyxUKXtyZXR1cm4geCtUPj4+MH0scS5zdW02NF80X2hpPWZ1bmN0aW9uIGxlKGIseCxDLFQsSCxqLEUsbSl7dmFyIEE9MCxvZT14O3JldHVybiBBKz0ob2U9b2UrVD4+PjApPHg/MTowLEErPShvZT1vZStqPj4+MCk8aj8xOjAsYitDK0grRSsoQSs9KG9lPW9lK20+Pj4wKTxtPzE6MCk+Pj4w''@;'; put 'put ''fSxxLnN1bTY0XzRfbG89ZnVuY3Rpb24gbWUoYix4LEMsVCxILGosRSxtKXtyZXR1cm4geCtUK2orbT4+PjB9LHEuc3VtNjRfNV9oaT1mdW5jdGlvbiBfZShiLHgsQyxULEgsaixFLG0sQSxvZSl7dmFyIHRlPTAsc2U9eDtyZXR1cm4gdGUrPShzZT1zZStUPj4+MCk8eD8xOjAsdGUrPShzZT1z''@;'; put 'put ''ZStqPj4+MCk8aj8xOjAsdGUrPShzZT1zZSttPj4+MCk8bT8xOjAsYitDK0grRStBKyh0ZSs9KHNlPXNlK29lPj4+MCk8b2U/MTowKT4+PjB9LHEuc3VtNjRfNV9sbz1mdW5jdGlvbiBUZShiLHgsQyxULEgsaixFLG0sQSxvZSl7cmV0dXJuIHgrVCtqK20rb2U+Pj4wfSxxLnJvdHI2NF9oaT1m''@;'; put 'put ''dW5jdGlvbiBTZShiLHgsQyl7cmV0dXJuKHg8PDMyLUN8Yj4+PkMpPj4+MH0scS5yb3RyNjRfbG89ZnVuY3Rpb24gemUoYix4LEMpe3JldHVybihiPDwzMi1DfHg+Pj5DKT4+PjB9LHEuc2hyNjRfaGk9ZnVuY3Rpb24gVihiLHgsQyl7cmV0dXJuIGI+Pj5DfSxxLnNocjY0X2xvPWZ1bmN0aW9u''@;'; put 'put ''IHAoYix4LEMpe3JldHVybihiPDwzMi1DfHg+Pj5DKT4+PjB9fSwzMzU1NjoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDUyNTI5KSx5PV8oMjE4MzIpLGc9XygzOTIxMCk7ZnVuY3Rpb24gQih3KXtpZighKHRoaXMgaW5zdGFuY2VvZiBCKSlyZXR1cm4gbmV3IEIodyk7dGhpcy5o''@;'; put 'put ''YXNoPXcuaGFzaCx0aGlzLnByZWRSZXNpc3Q9ISF3LnByZWRSZXNpc3QsdGhpcy5vdXRMZW49dGhpcy5oYXNoLm91dFNpemUsdGhpcy5taW5FbnRyb3B5PXcubWluRW50cm9weXx8dGhpcy5oYXNoLmhtYWNTdHJlbmd0aCx0aGlzLl9yZXNlZWQ9bnVsbCx0aGlzLnJlc2VlZEludGVydmFsPW51''@;'; put 'put ''bGwsdGhpcy5LPW51bGwsdGhpcy5WPW51bGw7dmFyIFA9eS50b0FycmF5KHcuZW50cm9weSx3LmVudHJvcHlFbmN8fCJoZXgiKSxGPXkudG9BcnJheSh3Lm5vbmNlLHcubm9uY2VFbmN8fCJoZXgiKSxPPXkudG9BcnJheSh3LnBlcnMsdy5wZXJzRW5jfHwiaGV4Iik7ZyhQLmxlbmd0aD49dGhp''@;'; put 'put ''cy5taW5FbnRyb3B5LzgsIk5vdCBlbm91Z2ggZW50cm9weS4gTWluaW11bSBpczogIit0aGlzLm1pbkVudHJvcHkrIiBiaXRzIiksdGhpcy5faW5pdChQLEYsTyl9dWUuZXhwb3J0cz1CLEIucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKFAsRixPKXt2YXIgej1QLmNvbmNhdChGKS5jb25jYXQo''@;'; put 'put ''Tyk7dGhpcy5LPW5ldyBBcnJheSh0aGlzLm91dExlbi84KSx0aGlzLlY9bmV3IEFycmF5KHRoaXMub3V0TGVuLzgpO2Zvcih2YXIgTj0wO048dGhpcy5WLmxlbmd0aDtOKyspdGhpcy5LW05dPTAsdGhpcy5WW05dPTE7dGhpcy5fdXBkYXRlKHopLHRoaXMuX3Jlc2VlZD0xLHRoaXMucmVzZWVk''@;'; put 'put ''SW50ZXJ2YWw9MjgxNDc0OTc2NzEwNjU2fSxCLnByb3RvdHlwZS5faG1hYz1mdW5jdGlvbigpe3JldHVybiBuZXcgSS5obWFjKHRoaXMuaGFzaCx0aGlzLkspfSxCLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFApe3ZhciBGPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS51cGRhdGUo''@;'; put 'put ''WzBdKTtQJiYoRj1GLnVwZGF0ZShQKSksdGhpcy5LPUYuZGlnZXN0KCksdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSxQJiYodGhpcy5LPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS51cGRhdGUoWzFdKS51cGRhdGUoUCkuZGlnZXN0KCksdGhpcy5WPXRo''@;'; put 'put ''aXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSl9LEIucHJvdG90eXBlLnJlc2VlZD1mdW5jdGlvbihQLEYsTyx6KXsic3RyaW5nIiE9dHlwZW9mIEYmJih6PU8sTz1GLEY9bnVsbCksUD15LnRvQXJyYXkoUCxGKSxPPXkudG9BcnJheShPLHopLGcoUC5sZW5ndGg+PXRoaXMubWlu''@;'; put 'put ''RW50cm9weS84LCJOb3QgZW5vdWdoIGVudHJvcHkuIE1pbmltdW0gaXM6ICIrdGhpcy5taW5FbnRyb3B5KyIgYml0cyIpLHRoaXMuX3VwZGF0ZShQLmNvbmNhdChPfHxbXSkpLHRoaXMuX3Jlc2VlZD0xfSxCLnByb3RvdHlwZS5nZW5lcmF0ZT1mdW5jdGlvbihQLEYsTyx6KXtpZih0aGlzLl9y''@;'; put 'put ''ZXNlZWQ+dGhpcy5yZXNlZWRJbnRlcnZhbCl0aHJvdyBuZXcgRXJyb3IoIlJlc2VlZCBpcyByZXF1aXJlZCIpOyJzdHJpbmciIT10eXBlb2YgRiYmKHo9TyxPPUYsRj1udWxsKSxPJiYoTz15LnRvQXJyYXkoTyx6fHwiaGV4IiksdGhpcy5fdXBkYXRlKE8pKTtmb3IodmFyIE49W107Ti5sZW5n''@;'; put 'put ''dGg8UDspdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSxOPU4uY29uY2F0KHRoaXMuVik7dmFyIEw9Ti5zbGljZSgwLFApO3JldHVybiB0aGlzLl91cGRhdGUoTyksdGhpcy5fcmVzZWVkKysseS5lbmNvZGUoTCxGKX19LDkzNjk0Oih1ZSxxLF8pPT57InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciBJPV8oOTM4MDcpLkJ1ZmZlcjtxLl9kYmNzPXo7Zm9yKHZhciB5PS0xLGc9LTIsQj0tMTAsdz0tMWUzLFA9bmV3IEFycmF5KDI1NiksTz0wO088MjU2O08rKylQW09dPXk7ZnVuY3Rpb24geihVLFcpe2lmKHRoaXMuZW5jb2RpbmdOYW1lPVUuZW5jb2RpbmdOYW1lLCFVKXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcigiREJDUyBjb2RlYyBpcyBjYWxsZWQgd2l0aG91dCB0aGUgZGF0YS4iKTtpZighVS50YWJsZSl0aHJvdyBuZXcgRXJyb3IoIkVuY29kaW5nICciK3RoaXMuZW5jb2RpbmdOYW1lKyInIGhhcyBubyBkYXRhLiIpO3ZhciBZPVUudGFibGUoKTt0aGlzLmRlY29kZVRhYmxl''@;'; put 'put ''cz1bXSx0aGlzLmRlY29kZVRhYmxlc1swXT1QLnNsaWNlKDApLHRoaXMuZGVjb2RlVGFibGVTZXE9W107Zm9yKHZhciBYPTA7WDxZLmxlbmd0aDtYKyspdGhpcy5fYWRkRGVjb2RlQ2h1bmsoWVtYXSk7dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU9Vy5kZWZhdWx0Q2hhclVuaWNvZGUsdGhpcy5l''@;'; put 'put ''bmNvZGVUYWJsZT1bXSx0aGlzLmVuY29kZVRhYmxlU2VxPVtdO3ZhciBlZT17fTtpZihVLmVuY29kZVNraXBWYWxzKWZvcihYPTA7WDxVLmVuY29kZVNraXBWYWxzLmxlbmd0aDtYKyspe3ZhciBKPVUuZW5jb2RlU2tpcFZhbHNbWF07aWYoIm51bWJlciI9PXR5cGVvZiBKKWVlW0pdPSEwO2Vs''@;'; put 'put ''c2UgZm9yKHZhciByZT1KLmZyb207cmU8PUoudG87cmUrKyllZVtyZV09ITB9aWYodGhpcy5fZmlsbEVuY29kZVRhYmxlKDAsMCxlZSksVS5lbmNvZGVBZGQpZm9yKHZhciBpZSBpbiBVLmVuY29kZUFkZClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoVS5lbmNvZGVBZGQs''@;'; put 'put ''aWUpJiZ0aGlzLl9zZXRFbmNvZGVDaGFyKGllLmNoYXJDb2RlQXQoMCksVS5lbmNvZGVBZGRbaWVdKTtpZih0aGlzLmRlZkNoYXJTQj10aGlzLmVuY29kZVRhYmxlWzBdW1cuZGVmYXVsdENoYXJTaW5nbGVCeXRlLmNoYXJDb2RlQXQoMCldLHRoaXMuZGVmQ2hhclNCPT09eSYmKHRoaXMuZGVm''@;'; put 'put ''Q2hhclNCPXRoaXMuZW5jb2RlVGFibGVbMF1bIj8iXSksdGhpcy5kZWZDaGFyU0I9PT15JiYodGhpcy5kZWZDaGFyU0I9NjMpLCJmdW5jdGlvbiI9PXR5cGVvZiBVLmdiMTgwMzApe3RoaXMuZ2IxODAzMD1VLmdiMTgwMzAoKTt2YXIgbGU9dGhpcy5kZWNvZGVUYWJsZXMubGVuZ3RoLG1lPXRo''@;'; put 'put ''aXMuZGVjb2RlVGFibGVzW2xlXT1QLnNsaWNlKDApLF9lPXRoaXMuZGVjb2RlVGFibGVzLmxlbmd0aCxUZT10aGlzLmRlY29kZVRhYmxlc1tfZV09UC5zbGljZSgwKTtmb3IoWD0xMjk7WDw9MjU0O1grKyl7dmFyIHplPXRoaXMuZGVjb2RlVGFibGVzW3ctdGhpcy5kZWNvZGVUYWJsZXNbMF1b''@;'; put 'put ''WF1dO2ZvcihyZT00ODtyZTw9NTc7cmUrKyl6ZVtyZV09dy1sZX1mb3IoWD0xMjk7WDw9MjU0O1grKyltZVtYXT13LV9lO2ZvcihYPTQ4O1g8PTU3O1grKylUZVtYXT1nfX1mdW5jdGlvbiBOKFUsVyl7dGhpcy5sZWFkU3Vycm9nYXRlPS0xLHRoaXMuc2VxT2JqPXZvaWQgMCx0aGlzLmVuY29k''@;'; put 'put ''ZVRhYmxlPVcuZW5jb2RlVGFibGUsdGhpcy5lbmNvZGVUYWJsZVNlcT1XLmVuY29kZVRhYmxlU2VxLHRoaXMuZGVmYXVsdENoYXJTaW5nbGVCeXRlPVcuZGVmQ2hhclNCLHRoaXMuZ2IxODAzMD1XLmdiMTgwMzB9ZnVuY3Rpb24gTChVLFcpe3RoaXMubm9kZUlkeD0wLHRoaXMucHJldkJ1Zj1J''@;'; put 'put ''LmFsbG9jKDApLHRoaXMuZGVjb2RlVGFibGVzPVcuZGVjb2RlVGFibGVzLHRoaXMuZGVjb2RlVGFibGVTZXE9Vy5kZWNvZGVUYWJsZVNlcSx0aGlzLmRlZmF1bHRDaGFyVW5pY29kZT1XLmRlZmF1bHRDaGFyVW5pY29kZSx0aGlzLmdiMTgwMzA9Vy5nYjE4MDMwfWZ1bmN0aW9uIEsoVSxXKXtp''@;'; put 'put ''ZihVWzBdPlcpcmV0dXJuLTE7Zm9yKHZhciBZPTAsWD1VLmxlbmd0aDtZPFgtMTspe3ZhciBlZT1ZK01hdGguZmxvb3IoKFgtWSsxKS8yKTtVW2VlXTw9Vz9ZPWVlOlg9ZWV9cmV0dXJuIFl9ei5wcm90b3R5cGUuZW5jb2Rlcj1OLHoucHJvdG90eXBlLmRlY29kZXI9TCx6LnByb3RvdHlwZS5f''@;'; put 'put ''Z2V0RGVjb2RlVHJpZU5vZGU9ZnVuY3Rpb24oVSl7Zm9yKHZhciBXPVtdO1U+MDtVPj49OClXLnB1c2goMjU1JlUpOzA9PVcubGVuZ3RoJiZXLnB1c2goMCk7Zm9yKHZhciBZPXRoaXMuZGVjb2RlVGFibGVzWzBdLFg9Vy5sZW5ndGgtMTtYPjA7WC0tKXt2YXIgZWU9WVtXW1hdXTtpZihlZT09''@;'; put 'put ''eSlZW1dbWF1dPXctdGhpcy5kZWNvZGVUYWJsZXMubGVuZ3RoLHRoaXMuZGVjb2RlVGFibGVzLnB1c2goWT1QLnNsaWNlKDApKTtlbHNle2lmKCEoZWU8PXcpKXRocm93IG5ldyBFcnJvcigiT3ZlcndyaXRlIGJ5dGUgaW4gIit0aGlzLmVuY29kaW5nTmFtZSsiLCBhZGRyOiAiK1UudG9TdHJp''@;'; put 'put ''bmcoMTYpKTtZPXRoaXMuZGVjb2RlVGFibGVzW3ctZWVdfX1yZXR1cm4gWX0sei5wcm90b3R5cGUuX2FkZERlY29kZUNodW5rPWZ1bmN0aW9uKFUpe3ZhciBXPXBhcnNlSW50KFVbMF0sMTYpLFk9dGhpcy5fZ2V0RGVjb2RlVHJpZU5vZGUoVyk7VyY9MjU1O2Zvcih2YXIgWD0xO1g8VS5sZW5n''@;'; put 'put ''dGg7WCsrKXt2YXIgZWU9VVtYXTtpZigic3RyaW5nIj09dHlwZW9mIGVlKWZvcih2YXIgSj0wO0o8ZWUubGVuZ3RoOyl7dmFyIHJlPWVlLmNoYXJDb2RlQXQoSisrKTtpZig1NTI5Njw9cmUmJnJlPDU2MzIwKXt2YXIgaWU9ZWUuY2hhckNvZGVBdChKKyspO2lmKCEoNTYzMjA8PWllJiZpZTw1''@;'; put 'put ''NzM0NCkpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3Qgc3Vycm9nYXRlIHBhaXIgaW4gIit0aGlzLmVuY29kaW5nTmFtZSsiIGF0IGNodW5rICIrVVswXSk7WVtXKytdPTY1NTM2KzEwMjQqKHJlLTU1Mjk2KSsoaWUtNTYzMjApfWVsc2UgaWYoNDA4MDxyZSYmcmU8PTQwOTUpe2Zvcih2YXIg''@;'; put 'put ''bGU9NDA5NS1yZSsyLG1lPVtdLF9lPTA7X2U8bGU7X2UrKyltZS5wdXNoKGVlLmNoYXJDb2RlQXQoSisrKSk7WVtXKytdPUItdGhpcy5kZWNvZGVUYWJsZVNlcS5sZW5ndGgsdGhpcy5kZWNvZGVUYWJsZVNlcS5wdXNoKG1lKX1lbHNlIFlbVysrXT1yZX1lbHNle2lmKCJudW1iZXIiIT10eXBl''@;'; put 'put ''b2YgZWUpdGhyb3cgbmV3IEVycm9yKCJJbmNvcnJlY3QgdHlwZSAnIit0eXBlb2YgZWUrIicgZ2l2ZW4gaW4gIit0aGlzLmVuY29kaW5nTmFtZSsiIGF0IGNodW5rICIrVVswXSk7dmFyIFRlPVlbVy0xXSsxO2ZvcihKPTA7SjxlZTtKKyspWVtXKytdPVRlKyt9fWlmKFc+MjU1KXRocm93IG5l''@;'; put 'put ''dyBFcnJvcigiSW5jb3JyZWN0IGNodW5rIGluICIrdGhpcy5lbmNvZGluZ05hbWUrIiBhdCBhZGRyICIrVVswXSsiOiB0b28gbG9uZyIrVyl9LHoucHJvdG90eXBlLl9nZXRFbmNvZGVCdWNrZXQ9ZnVuY3Rpb24oVSl7dmFyIFc9VT4+ODtyZXR1cm4gdm9pZCAwPT09dGhpcy5lbmNvZGVUYWJs''@;'; put 'put ''ZVtXXSYmKHRoaXMuZW5jb2RlVGFibGVbV109UC5zbGljZSgwKSksdGhpcy5lbmNvZGVUYWJsZVtXXX0sei5wcm90b3R5cGUuX3NldEVuY29kZUNoYXI9ZnVuY3Rpb24oVSxXKXt2YXIgWT10aGlzLl9nZXRFbmNvZGVCdWNrZXQoVSksWD0yNTUmVTtZW1hdPD1CP3RoaXMuZW5jb2RlVGFibGVT''@;'; put 'put ''ZXFbQi1ZW1hdXVstMV09VzpZW1hdPT15JiYoWVtYXT1XKX0sei5wcm90b3R5cGUuX3NldEVuY29kZVNlcXVlbmNlPWZ1bmN0aW9uKFUsVyl7dmFyIEosWT1VWzBdLFg9dGhpcy5fZ2V0RW5jb2RlQnVja2V0KFkpLGVlPTI1NSZZO1hbZWVdPD1CP0o9dGhpcy5lbmNvZGVUYWJsZVNlcVtCLVhb''@;'; put 'put ''ZWVdXTooSj17fSxYW2VlXSE9PXkmJihKWy0xXT1YW2VlXSksWFtlZV09Qi10aGlzLmVuY29kZVRhYmxlU2VxLmxlbmd0aCx0aGlzLmVuY29kZVRhYmxlU2VxLnB1c2goSikpO2Zvcih2YXIgcmU9MTtyZTxVLmxlbmd0aC0xO3JlKyspe3ZhciBpZT1KW1ldOyJvYmplY3QiPT10eXBlb2YgaWU/''@;'; put 'put ''Sj1pZTooSj1KW1ldPXt9LHZvaWQgMCE9PWllJiYoSlstMV09aWUpKX1KW1k9VVtVLmxlbmd0aC0xXV09V30sei5wcm90b3R5cGUuX2ZpbGxFbmNvZGVUYWJsZT1mdW5jdGlvbihVLFcsWSl7Zm9yKHZhciBYPXRoaXMuZGVjb2RlVGFibGVzW1VdLGVlPTA7ZWU8MjU2O2VlKyspe3ZhciBKPVhb''@;'; put 'put ''ZWVdLHJlPVcrZWU7WVtyZV18fChKPj0wP3RoaXMuX3NldEVuY29kZUNoYXIoSixyZSk6Sjw9dz90aGlzLl9maWxsRW5jb2RlVGFibGUody1KLHJlPDw4LFkpOko8PUImJnRoaXMuX3NldEVuY29kZVNlcXVlbmNlKHRoaXMuZGVjb2RlVGFibGVTZXFbQi1KXSxyZSkpfX0sTi5wcm90b3R5cGUu''@;'; put 'put ''d3JpdGU9ZnVuY3Rpb24oVSl7Zm9yKHZhciBXPUkuYWxsb2MoVS5sZW5ndGgqKHRoaXMuZ2IxODAzMD80OjMpKSxZPXRoaXMubGVhZFN1cnJvZ2F0ZSxYPXRoaXMuc2VxT2JqLGVlPS0xLEo9MCxyZT0wOzspe2lmKC0xPT09ZWUpe2lmKEo9PVUubGVuZ3RoKWJyZWFrO3ZhciBpZT1VLmNoYXJD''@;'; put 'put ''b2RlQXQoSisrKX1lbHNlIGllPWVlLGVlPS0xO2lmKDU1Mjk2PD1pZSYmaWU8NTczNDQpaWYoaWU8NTYzMjApe2lmKC0xPT09WSl7WT1pZTtjb250aW51ZX1ZPWllLGllPXl9ZWxzZS0xIT09WT8oaWU9NjU1MzYrMTAyNCooWS01NTI5NikrKGllLTU2MzIwKSxZPS0xKTppZT15O2Vsc2UtMSE9''@;'; put 'put ''PVkmJihlZT1pZSxpZT15LFk9LTEpO3ZhciBsZT15O2lmKHZvaWQgMCE9PVgmJmllIT15KXt2YXIgbWU9WFtpZV07aWYoIm9iamVjdCI9PXR5cGVvZiBtZSl7WD1tZTtjb250aW51ZX0ibnVtYmVyIj09dHlwZW9mIG1lP2xlPW1lOm51bGw9PW1lJiZ2b2lkIDAhPT0obWU9WFstMV0pJiYobGU9''@;'; put 'put ''bWUsZWU9aWUpLFg9dm9pZCAwfWVsc2UgaWYoaWU+PTApe3ZhciBfZT10aGlzLmVuY29kZVRhYmxlW2llPj44XTtpZih2b2lkIDAhPT1fZSYmKGxlPV9lWzI1NSZpZV0pLGxlPD1CKXtYPXRoaXMuZW5jb2RlVGFibGVTZXFbQi1sZV07Y29udGludWV9aWYobGU9PXkmJnRoaXMuZ2IxODAzMCl7''@;'; put 'put ''dmFyIFRlPUsodGhpcy5nYjE4MDMwLnVDaGFycyxpZSk7aWYoLTEhPVRlKXtsZT10aGlzLmdiMTgwMzAuZ2JDaGFyc1tUZV0rKGllLXRoaXMuZ2IxODAzMC51Q2hhcnNbVGVdKSxXW3JlKytdPTEyOStNYXRoLmZsb29yKGxlLzEyNjAwKSxsZSU9MTI2MDAsV1tyZSsrXT00OCtNYXRoLmZsb29y''@;'; put 'put ''KGxlLzEyNjApLGxlJT0xMjYwLFdbcmUrK109MTI5K01hdGguZmxvb3IobGUvMTApLFdbcmUrK109NDgrKGxlJT0xMCk7Y29udGludWV9fX1sZT09PXkmJihsZT10aGlzLmRlZmF1bHRDaGFyU2luZ2xlQnl0ZSksbGU8MjU2P1dbcmUrK109bGU6bGU8NjU1MzY/KFdbcmUrK109bGU+PjgsV1ty''@;'; put 'put ''ZSsrXT0yNTUmbGUpOihXW3JlKytdPWxlPj4xNixXW3JlKytdPWxlPj44JjI1NSxXW3JlKytdPTI1NSZsZSl9cmV0dXJuIHRoaXMuc2VxT2JqPVgsdGhpcy5sZWFkU3Vycm9nYXRlPVksVy5zbGljZSgwLHJlKX0sTi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7aWYoLTEhPT10aGlzLmxlYWRT''@;'; put 'put ''dXJyb2dhdGV8fHZvaWQgMCE9PXRoaXMuc2VxT2JqKXt2YXIgVT1JLmFsbG9jKDEwKSxXPTA7aWYodGhpcy5zZXFPYmope3ZhciBZPXRoaXMuc2VxT2JqWy0xXTt2b2lkIDAhPT1ZJiYoWTwyNTY/VVtXKytdPVk6KFVbVysrXT1ZPj44LFVbVysrXT0yNTUmWSkpLHRoaXMuc2VxT2JqPXZvaWQg''@;'; put 'put ''MH1yZXR1cm4tMSE9PXRoaXMubGVhZFN1cnJvZ2F0ZSYmKFVbVysrXT10aGlzLmRlZmF1bHRDaGFyU2luZ2xlQnl0ZSx0aGlzLmxlYWRTdXJyb2dhdGU9LTEpLFUuc2xpY2UoMCxXKX19LE4ucHJvdG90eXBlLmZpbmRJZHg9SyxMLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihVKXt2YXIgVz1J''@;'; put 'put ''LmFsbG9jKDIqVS5sZW5ndGgpLFk9dGhpcy5ub2RlSWR4LFg9dGhpcy5wcmV2QnVmLGVlPXRoaXMucHJldkJ1Zi5sZW5ndGgsSj0tdGhpcy5wcmV2QnVmLmxlbmd0aDtlZT4wJiYoWD1JLmNvbmNhdChbWCxVLnNsaWNlKDAsMTApXSkpO2Zvcih2YXIgaWU9MCxsZT0wO2llPFUubGVuZ3RoO2ll''@;'; put 'put ''Kyspe3ZhciByZSxtZT1pZT49MD9VW2llXTpYW2llK2VlXTtpZighKChyZT10aGlzLmRlY29kZVRhYmxlc1tZXVttZV0pPj0wKSlpZihyZT09PXkpaWU9SixyZT10aGlzLmRlZmF1bHRDaGFyVW5pY29kZS5jaGFyQ29kZUF0KDApO2Vsc2UgaWYocmU9PT1nKXt2YXIgX2U9Sj49MD9VLnNsaWNl''@;'; put 'put ''KEosaWUrMSk6WC5zbGljZShKK2VlLGllKzErZWUpLFRlPTEyNjAwKihfZVswXS0xMjkpKzEyNjAqKF9lWzFdLTQ4KSsxMCooX2VbMl0tMTI5KSsoX2VbM10tNDgpLFNlPUsodGhpcy5nYjE4MDMwLmdiQ2hhcnMsVGUpO3JlPXRoaXMuZ2IxODAzMC51Q2hhcnNbU2VdK1RlLXRoaXMuZ2IxODAz''@;'; put 'put ''MC5nYkNoYXJzW1NlXX1lbHNle2lmKHJlPD13KXtZPXctcmU7Y29udGludWV9aWYoIShyZTw9QikpdGhyb3cgbmV3IEVycm9yKCJpY29udi1saXRlIGludGVybmFsIGVycm9yOiBpbnZhbGlkIGRlY29kaW5nIHRhYmxlIHZhbHVlICIrcmUrIiBhdCAiK1krIi8iK21lKTtmb3IodmFyIHplPXRo''@;'; put 'put ''aXMuZGVjb2RlVGFibGVTZXFbQi1yZV0sVj0wO1Y8emUubGVuZ3RoLTE7VisrKVdbbGUrK109MjU1JihyZT16ZVtWXSksV1tsZSsrXT1yZT4+ODtyZT16ZVt6ZS5sZW5ndGgtMV19aWYocmU+NjU1MzUpe3JlLT02NTUzNjt2YXIgcD01NTI5NitNYXRoLmZsb29yKHJlLzEwMjQpO1dbbGUrK109''@;'; put 'put ''MjU1JnAsV1tsZSsrXT1wPj44LHJlPTU2MzIwK3JlJTEwMjR9V1tsZSsrXT0yNTUmcmUsV1tsZSsrXT1yZT4+OCxZPTAsSj1pZSsxfXJldHVybiB0aGlzLm5vZGVJZHg9WSx0aGlzLnByZXZCdWY9Sj49MD9VLnNsaWNlKEopOlguc2xpY2UoSitlZSksVy5zbGljZSgwLGxlKS50b1N0cmluZygi''@;'; put 'put ''dWNzMiIpfSxMLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtmb3IodmFyIFU9IiI7dGhpcy5wcmV2QnVmLmxlbmd0aD4wOyl7VSs9dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU7dmFyIFc9dGhpcy5wcmV2QnVmLnNsaWNlKDEpO3RoaXMucHJldkJ1Zj1JLmFsbG9jKDApLHRoaXMubm9kZUlkeD0w''@;'; put 'put ''LFcubGVuZ3RoPjAmJihVKz10aGlzLndyaXRlKFcpKX1yZXR1cm4gdGhpcy5ub2RlSWR4PTAsVX19LDQ1Mjc4Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9e3NoaWZ0amlzOnt0eXBlOiJfZGJjcyIsdGFibGU6ZnVuY3Rpb24oKXtyZXR1cm4gXyg0MDY3OSl9LGVuY29kZUFk''@;'; put 'put ''ZDp7Ilx4YTUiOjkyLCJcdTIwM2UiOjEyNn0sZW5jb2RlU2tpcFZhbHM6W3tmcm9tOjYwNzM2LHRvOjYzODA4fV19LGNzc2hpZnRqaXM6InNoaWZ0amlzIixtc2thbmppOiJzaGlmdGppcyIsc2ppczoic2hpZnRqaXMiLHdpbmRvd3MzMWo6InNoaWZ0amlzIixtczMxajoic2hpZnRqaXMiLHhz''@;'; put 'put ''amlzOiJzaGlmdGppcyIsd2luZG93czkzMjoic2hpZnRqaXMiLG1zOTMyOiJzaGlmdGppcyIsOTMyOiJzaGlmdGppcyIsY3A5MzI6InNoaWZ0amlzIixldWNqcDp7dHlwZToiX2RiY3MiLHRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIF8oNTY0MDYpfSxlbmNvZGVBZGQ6eyJceGE1Ijo5MiwiXHUy''@;'; put 'put ''MDNlIjoxMjZ9fSxnYjIzMTI6ImNwOTM2IixnYjIzMTI4MDoiY3A5MzYiLGdiMjMxMjE5ODA6ImNwOTM2Iixjc2diMjMxMjoiY3A5MzYiLGNzaXNvNThnYjIzMTI4MDoiY3A5MzYiLGV1Y2NuOiJjcDkzNiIsd2luZG93czkzNjoiY3A5MzYiLG1zOTM2OiJjcDkzNiIsOTM2OiJjcDkzNiIsY3A5''@;'; put 'put ''MzY6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiBfKDc0NDg4KX19LGdiazp7dHlwZToiX2RiY3MiLHRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIF8oNzQ0ODgpLmNvbmNhdChfKDU1OTE0KSl9fSx4Z2JrOiJnYmsiLGlzb2lyNTg6ImdiayIsZ2IxODAzMDp7dHlwZToiX2Ri''@;'; put 'put ''Y3MiLHRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIF8oNzQ0ODgpLmNvbmNhdChfKDU1OTE0KSl9LGdiMTgwMzA6ZnVuY3Rpb24oKXtyZXR1cm4gXyg5OTEyOSl9LGVuY29kZVNraXBWYWxzOlsxMjhdLGVuY29kZUFkZDp7Ilx1MjBhYyI6NDE2OTl9fSxjaGluZXNlOiJnYjE4MDMwIix3aW5kb3dz''@;'; put 'put ''OTQ5OiJjcDk0OSIsbXM5NDk6ImNwOTQ5Iiw5NDk6ImNwOTQ5IixjcDk0OTp7dHlwZToiX2RiY3MiLHRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIF8oMjExNjYpfX0sY3NldWNrcjoiY3A5NDkiLGNza3NjNTYwMTE5ODc6ImNwOTQ5IixldWNrcjoiY3A5NDkiLGlzb2lyMTQ5OiJjcDk0OSIsa29y''@;'; put 'put ''ZWFuOiJjcDk0OSIsa3NjNTYwMTE5ODc6ImNwOTQ5Iixrc2M1NjAxMTk4OToiY3A5NDkiLGtzYzU2MDE6ImNwOTQ5Iix3aW5kb3dzOTUwOiJjcDk1MCIsbXM5NTA6ImNwOTUwIiw5NTA6ImNwOTUwIixjcDk1MDp7dHlwZToiX2RiY3MiLHRhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIF8oNzIzMjQp''@;'; put 'put ''fX0sYmlnNToiYmlnNWhrc2NzIixiaWc1aGtzY3M6e3R5cGU6Il9kYmNzIix0YWJsZTpmdW5jdGlvbigpe3JldHVybiBfKDcyMzI0KS5jb25jYXQoXyg0MzI2NykpfSxlbmNvZGVTa2lwVmFsczpbNDE2NzZdfSxjbmJpZzU6ImJpZzVoa3NjcyIsY3NiaWc1OiJiaWc1aGtzY3MiLHh4YmlnNToi''@;'; put 'put ''YmlnNWhrc2NzIn19LDcyODkzOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO2Zvcih2YXIgST1bXygzNzY0MCksXygzNTA4OSksXyg3MTc1KSxfKDk3NDcpLF8oNTg2NzcpLF8oNzYyMyksXygzMDE4NyksXyg5MzY5NCksXyg0NTI3OCldLHk9MDt5PEkubGVuZ3RoO3krKyl7dmFyIGc9SVt5XTtm''@;'; put 'put ''b3IodmFyIEIgaW4gZylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZyxCKSYmKHFbQl09Z1tCXSl9fSwzNzY0MDoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDkzODA3KS5CdWZmZXI7ZnVuY3Rpb24geSh6LE4pe3RoaXMuZW5jPXouZW5jb2RpbmdOYW1lLHRo''@;'; put 'put ''aXMuYm9tQXdhcmU9ei5ib21Bd2FyZSwiYmFzZTY0Ij09PXRoaXMuZW5jP3RoaXMuZW5jb2Rlcj1QOiJjZXN1OCI9PT10aGlzLmVuYyYmKHRoaXMuZW5jPSJ1dGY4Iix0aGlzLmVuY29kZXI9RiwiXHV7MWY0YTl9IiE9PUkuZnJvbSgiZWRhMGJkZWRiMmE5IiwiaGV4IikudG9TdHJpbmcoKSYm''@;'; put 'put ''KHRoaXMuZGVjb2Rlcj1PLHRoaXMuZGVmYXVsdENoYXJVbmljb2RlPU4uZGVmYXVsdENoYXJVbmljb2RlKSl9dWUuZXhwb3J0cz17dXRmODp7dHlwZToiX2ludGVybmFsIixib21Bd2FyZTohMH0sY2VzdTg6e3R5cGU6Il9pbnRlcm5hbCIsYm9tQXdhcmU6ITB9LHVuaWNvZGUxMXV0Zjg6InV0''@;'; put 'put ''ZjgiLHVjczI6e3R5cGU6Il9pbnRlcm5hbCIsYm9tQXdhcmU6ITB9LHV0ZjE2bGU6InVjczIiLGJpbmFyeTp7dHlwZToiX2ludGVybmFsIn0sYmFzZTY0Ont0eXBlOiJfaW50ZXJuYWwifSxoZXg6e3R5cGU6Il9pbnRlcm5hbCJ9LF9pbnRlcm5hbDp5fSx5LnByb3RvdHlwZS5lbmNvZGVyPXcs''@;'; put 'put ''eS5wcm90b3R5cGUuZGVjb2Rlcj1CO3ZhciBnPV8oNzg0NTQpLkk7ZnVuY3Rpb24gQih6LE4pe2cuY2FsbCh0aGlzLE4uZW5jKX1mdW5jdGlvbiB3KHosTil7dGhpcy5lbmM9Ti5lbmN9ZnVuY3Rpb24gUCh6LE4pe3RoaXMucHJldlN0cj0iIn1mdW5jdGlvbiBGKHosTil7fWZ1bmN0aW9uIE8o''@;'; put 'put ''eixOKXt0aGlzLmFjYz0wLHRoaXMuY29udEJ5dGVzPTAsdGhpcy5hY2NCeXRlcz0wLHRoaXMuZGVmYXVsdENoYXJVbmljb2RlPU4uZGVmYXVsdENoYXJVbmljb2RlfWcucHJvdG90eXBlLmVuZHx8KGcucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe30pLEIucHJvdG90eXBlPWcucHJvdG90eXBl''@;'; put 'put ''LHcucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHope3JldHVybiBJLmZyb20oeix0aGlzLmVuYyl9LHcucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe30sUC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oeil7dmFyIE49KHo9dGhpcy5wcmV2U3RyK3opLmxlbmd0aC16Lmxlbmd0aCU0O3JldHVy''@;'; put 'put ''biB0aGlzLnByZXZTdHI9ei5zbGljZShOKSx6PXouc2xpY2UoMCxOKSxJLmZyb20oeiwiYmFzZTY0Iil9LFAucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3JldHVybiBJLmZyb20odGhpcy5wcmV2U3RyLCJiYXNlNjQiKX0sRi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oeil7Zm9yKHZhciBO''@;'; put 'put ''PUkuYWxsb2MoMyp6Lmxlbmd0aCksTD0wLEs9MDtLPHoubGVuZ3RoO0srKyl7dmFyIFU9ei5jaGFyQ29kZUF0KEspO1U8MTI4P05bTCsrXT1VOlU8MjA0OD8oTltMKytdPTE5MisoVT4+PjYpLE5bTCsrXT0xMjgrKDYzJlUpKTooTltMKytdPTIyNCsoVT4+PjEyKSxOW0wrK109MTI4KyhVPj4+''@;'; put 'put ''NiY2MyksTltMKytdPTEyOCsoNjMmVSkpfXJldHVybiBOLnNsaWNlKDAsTCl9LEYucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe30sTy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oeil7Zm9yKHZhciBOPXRoaXMuYWNjLEw9dGhpcy5jb250Qnl0ZXMsSz10aGlzLmFjY0J5dGVzLFU9IiIsVz0w''@;'; put 'put ''O1c8ei5sZW5ndGg7VysrKXt2YXIgWT16W1ddOzEyOCE9KDE5MiZZKT8oTD4wJiYoVSs9dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGUsTD0wKSxZPDEyOD9VKz1TdHJpbmcuZnJvbUNoYXJDb2RlKFkpOlk8MjI0PyhOPTMxJlksTD0xLEs9MSk6WTwyNDA/KE49MTUmWSxMPTIsSz0xKTpVKz10aGlz''@;'; put 'put ''LmRlZmF1bHRDaGFyVW5pY29kZSk6TD4wPyhOPU48PDZ8NjMmWSxLKyssMD09LS1MJiYoVSs9Mj09PUsmJk48MTI4JiZOPjB8fDM9PT1LJiZOPDIwNDg/dGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU6U3RyaW5nLmZyb21DaGFyQ29kZShOKSkpOlUrPXRoaXMuZGVmYXVsdENoYXJVbmljb2RlfXJl''@;'; put 'put ''dHVybiB0aGlzLmFjYz1OLHRoaXMuY29udEJ5dGVzPUwsdGhpcy5hY2NCeXRlcz1LLFV9LE8ucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe3ZhciB6PTA7cmV0dXJuIHRoaXMuY29udEJ5dGVzPjAmJih6Kz10aGlzLmRlZmF1bHRDaGFyVW5pY29kZSksen19LDU4Njc3Oih1ZSxxLF8pPT57InVz''@;'; put 'put ''ZSBzdHJpY3QiO3ZhciBJPV8oOTM4MDcpLkJ1ZmZlcjtmdW5jdGlvbiB5KHcsUCl7aWYoIXcpdGhyb3cgbmV3IEVycm9yKCJTQkNTIGNvZGVjIGlzIGNhbGxlZCB3aXRob3V0IHRoZSBkYXRhLiIpO2lmKCF3LmNoYXJzfHwxMjghPT13LmNoYXJzLmxlbmd0aCYmMjU2IT09dy5jaGFycy5sZW5n''@;'; put 'put ''dGgpdGhyb3cgbmV3IEVycm9yKCJFbmNvZGluZyAnIit3LnR5cGUrIicgaGFzIGluY29ycmVjdCAnY2hhcnMnIChtdXN0IGJlIG9mIGxlbiAxMjggb3IgMjU2KSIpO2lmKDEyOD09PXcuY2hhcnMubGVuZ3RoKXtmb3IodmFyIEY9IiIsTz0wO088MTI4O08rKylGKz1TdHJpbmcuZnJvbUNoYXJD''@;'; put 'put ''b2RlKE8pO3cuY2hhcnM9Rit3LmNoYXJzfXRoaXMuZGVjb2RlQnVmPUkuZnJvbSh3LmNoYXJzLCJ1Y3MyIik7dmFyIHo9SS5hbGxvYyg2NTUzNixQLmRlZmF1bHRDaGFyU2luZ2xlQnl0ZS5jaGFyQ29kZUF0KDApKTtmb3IoTz0wO088dy5jaGFycy5sZW5ndGg7TysrKXpbdy5jaGFycy5jaGFy''@;'; put 'put ''Q29kZUF0KE8pXT1PO3RoaXMuZW5jb2RlQnVmPXp9ZnVuY3Rpb24gZyh3LFApe3RoaXMuZW5jb2RlQnVmPVAuZW5jb2RlQnVmfWZ1bmN0aW9uIEIodyxQKXt0aGlzLmRlY29kZUJ1Zj1QLmRlY29kZUJ1Zn1xLl9zYmNzPXkseS5wcm90b3R5cGUuZW5jb2Rlcj1nLHkucHJvdG90eXBlLmRlY29k''@;'; put 'put ''ZXI9QixnLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih3KXtmb3IodmFyIFA9SS5hbGxvYyh3Lmxlbmd0aCksRj0wO0Y8dy5sZW5ndGg7RisrKVBbRl09dGhpcy5lbmNvZGVCdWZbdy5jaGFyQ29kZUF0KEYpXTtyZXR1cm4gUH0sZy5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7fSxCLnByb3Rv''@;'; put 'put ''dHlwZS53cml0ZT1mdW5jdGlvbih3KXtmb3IodmFyIFA9dGhpcy5kZWNvZGVCdWYsRj1JLmFsbG9jKDIqdy5sZW5ndGgpLE89MCx6PTAsTj0wO048dy5sZW5ndGg7TisrKUZbej0yKk5dPVBbTz0yKndbTl1dLEZbeisxXT1QW08rMV07cmV0dXJuIEYudG9TdHJpbmcoInVjczIiKX0sQi5wcm90''@;'; put 'put ''b3R5cGUuZW5kPWZ1bmN0aW9uKCl7fX0sMzAxODc6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz17NDM3OiJjcDQzNyIsNzM3OiJjcDczNyIsNzc1OiJjcDc3NSIsODUwOiJjcDg1MCIsODUyOiJjcDg1MiIsODU1OiJjcDg1NSIsODU2OiJjcDg1NiIsODU3OiJjcDg1NyIsODU4OiJjcDg1''@;'; put 'put ''OCIsODYwOiJjcDg2MCIsODYxOiJjcDg2MSIsODYyOiJjcDg2MiIsODYzOiJjcDg2MyIsODY0OiJjcDg2NCIsODY1OiJjcDg2NSIsODY2OiJjcDg2NiIsODY5OiJjcDg2OSIsODc0OiJ3aW5kb3dzODc0Iiw5MjI6ImNwOTIyIiwxMDQ2OiJjcDEwNDYiLDExMjQ6ImNwMTEyNCIsMTEyNToiY3Ax''@;'; put 'put ''MTI1IiwxMTI5OiJjcDExMjkiLDExMzM6ImNwMTEzMyIsMTE2MToiY3AxMTYxIiwxMTYyOiJjcDExNjIiLDExNjM6ImNwMTE2MyIsMTI1MDoid2luZG93czEyNTAiLDEyNTE6IndpbmRvd3MxMjUxIiwxMjUyOiJ3aW5kb3dzMTI1MiIsMTI1Mzoid2luZG93czEyNTMiLDEyNTQ6IndpbmRvd3Mx''@;'; put 'put ''MjU0IiwxMjU1OiJ3aW5kb3dzMTI1NSIsMTI1Njoid2luZG93czEyNTYiLDEyNTc6IndpbmRvd3MxMjU3IiwxMjU4OiJ3aW5kb3dzMTI1OCIsMjg1OTE6Imlzbzg4NTkxIiwyODU5MjoiaXNvODg1OTIiLDI4NTkzOiJpc284ODU5MyIsMjg1OTQ6Imlzbzg4NTk0IiwyODU5NToiaXNvODg1OTUi''@;'; put 'put ''LDI4NTk2OiJpc284ODU5NiIsMjg1OTc6Imlzbzg4NTk3IiwyODU5ODoiaXNvODg1OTgiLDI4NTk5OiJpc284ODU5OSIsMjg2MDA6Imlzbzg4NTkxMCIsMjg2MDE6Imlzbzg4NTkxMSIsMjg2MDM6Imlzbzg4NTkxMyIsMjg2MDQ6Imlzbzg4NTkxNCIsMjg2MDU6Imlzbzg4NTkxNSIsMjg2MDY6''@;'; put 'put ''Imlzbzg4NTkxNiIsd2luZG93czg3NDp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMjZcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNc''@;'; put 'put ''dTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGEwXHUwZTAxXHUwZTAyXHUwZTAzXHUwZTA0XHUwZTA1XHUwZTA2XHUwZTA3XHUwZTA4XHUwZTA5XHUwZTBhXHUwZTBiXHUwZTBjXHUwZTBkXHUwZTBlXHUwZTBm''@;'; put 'put ''XHUwZTEwXHUwZTExXHUwZTEyXHUwZTEzXHUwZTE0XHUwZTE1XHUwZTE2XHUwZTE3XHUwZTE4XHUwZTE5XHUwZTFhXHUwZTFiXHUwZTFjXHUwZTFkXHUwZTFlXHUwZTFmXHUwZTIwXHUwZTIxXHUwZTIyXHUwZTIzXHUwZTI0XHUwZTI1XHUwZTI2XHUwZTI3XHUwZTI4XHUwZTI5XHUwZTJhXHUw''@;'; put 'put ''ZTJiXHUwZTJjXHUwZTJkXHUwZTJlXHUwZTJmXHUwZTMwXHUwZTMxXHUwZTMyXHUwZTMzXHUwZTM0XHUwZTM1XHUwZTM2XHUwZTM3XHUwZTM4XHUwZTM5XHUwZTNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZTNmXHUwZTQwXHUwZTQxXHUwZTQyXHUwZTQzXHUwZTQ0XHUwZTQ1XHUwZTQ2''@;'; put 'put ''XHUwZTQ3XHUwZTQ4XHUwZTQ5XHUwZTRhXHUwZTRiXHUwZTRjXHUwZTRkXHUwZTRlXHUwZTRmXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUwZTU3XHUwZTU4XHUwZTU5XHUwZTVhXHUwZTViXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn0sd2luODc0OiJ3aW5k''@;'; put 'put ''b3dzODc0IixjcDg3NDoid2luZG93czg3NCIsd2luZG93czEyNTA6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHVmZmZkXHUyMDFhXHVmZmZkXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHVmZmZkXHUyMDMwXHUwMTYwXHUyMDM5XHUwMTVhXHUwMTY0XHUwMTdkXHUwMTc5XHVmZmZkXHUy''@;'; put 'put ''MDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZkXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTViXHUwMTY1XHUwMTdlXHUwMTdhXHhhMFx1MDJjN1x1MDJkOFx1MDE0MVx4YTRcdTAxMDRceGE2XHhhN1x4YThceGE5XHUwMTVlXHhhYlx4YWNceGFkXHhhZVx1MDE3Ylx4''@;'; put 'put ''YjBceGIxXHUwMmRiXHUwMTQyXHhiNFx4YjVceGI2XHhiN1x4YjhcdTAxMDVcdTAxNWZceGJiXHUwMTNkXHUwMmRkXHUwMTNlXHUwMTdjXHUwMTU0XHhjMVx4YzJcdTAxMDJceGM0XHUwMTM5XHUwMTA2XHhjN1x1MDEwY1x4YzlcdTAxMThceGNiXHUwMTFhXHhjZFx4Y2VcdTAxMGVcdTAxMTBc''@;'; put 'put ''dTAxNDNcdTAxNDdceGQzXHhkNFx1MDE1MFx4ZDZceGQ3XHUwMTU4XHUwMTZlXHhkYVx1MDE3MFx4ZGNceGRkXHUwMTYyXHhkZlx1MDE1NVx4ZTFceGUyXHUwMTAzXHhlNFx1MDEzYVx1MDEwN1x4ZTdcdTAxMGRceGU5XHUwMTE5XHhlYlx1MDExYlx4ZWRceGVlXHUwMTBmXHUwMTExXHUwMTQ0''@;'; put 'put ''XHUwMTQ4XHhmM1x4ZjRcdTAxNTFceGY2XHhmN1x1MDE1OVx1MDE2Zlx4ZmFcdTAxNzFceGZjXHhmZFx1MDE2M1x1MDJkOSJ9LHdpbjEyNTA6IndpbmRvd3MxMjUwIixjcDEyNTA6IndpbmRvd3MxMjUwIix3aW5kb3dzMTI1MTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0MDJcdTA0MDNcdTIw''@;'; put 'put ''MWFcdTA0NTNcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTIwYWNcdTIwMzBcdTA0MDlcdTIwMzlcdTA0MGFcdTA0MGNcdTA0MGJcdTA0MGZcdTA0NTJcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdTA0NTlcdTIwM2FcdTA0NWFcdTA0NWNc''@;'; put 'put ''dTA0NWJcdTA0NWZceGEwXHUwNDBlXHUwNDVlXHUwNDA4XHhhNFx1MDQ5MFx4YTZceGE3XHUwNDAxXHhhOVx1MDQwNFx4YWJceGFjXHhhZFx4YWVcdTA0MDdceGIwXHhiMVx1MDQwNlx1MDQ1Nlx1MDQ5MVx4YjVceGI2XHhiN1x1MDQ1MVx1MjExNlx1MDQ1NFx4YmJcdTA0NThcdTA0MDVcdTA0''@;'; put 'put ''NTVcdTA0NTdcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0Mjlc''@;'; put 'put ''dTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0''@;'; put 'put ''NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGYifSx3aW4xMjUxOiJ3aW5kb3dzMTI1MSIsY3AxMjUxOiJ3aW5kb3dzMTI1MSIsd2luZG93czEyNTI6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTky''@;'; put 'put ''XHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwMTYwXHUyMDM5XHUwMTUyXHVmZmZkXHUwMTdkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHUwMTYxXHUyMDNhXHUwMTUzXHVmZmZkXHUwMTdlXHUw''@;'; put 'put ''MTc4XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4''@;'; put 'put ''YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHhkMFx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x4ZGRceGRlXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZceGYwXHhm''@;'; put 'put ''MVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx4ZmVceGZmIn0sd2luMTI1Mjoid2luZG93czEyNTIiLGNwMTI1Mjoid2luZG93czEyNTIiLHdpbmRvd3MxMjUzOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1ZmZmZFx1MjAxYVx1MDE5Mlx1MjAx''@;'; put 'put ''ZVx1MjAyNlx1MjAyMFx1MjAyMVx1ZmZmZFx1MjAzMFx1ZmZmZFx1MjAzOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1ZmZmZFx1MjAzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4''@;'; put 'put ''YTBcdTAzODVcdTAzODZceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHVmZmZkXHhhYlx4YWNceGFkXHhhZVx1MjAxNVx4YjBceGIxXHhiMlx4YjNcdTAzODRceGI1XHhiNlx4YjdcdTAzODhcdTAzODlcdTAzOGFceGJiXHUwMzhjXHhiZFx1MDM4ZVx1MDM4Zlx1MDM5MFx1MDM5MVx1MDM5''@;'; put 'put ''Mlx1MDM5M1x1MDM5NFx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OFx1MDM5OVx1MDM5YVx1MDM5Ylx1MDM5Y1x1MDM5ZFx1MDM5ZVx1MDM5Zlx1MDNhMFx1MDNhMVx1ZmZmZFx1MDNhM1x1MDNhNFx1MDNhNVx1MDNhNlx1MDNhN1x1MDNhOFx1MDNhOVx1MDNhYVx1MDNhYlx1MDNhY1x1MDNhZFx1''@;'; put 'put ''MDNhZVx1MDNhZlx1MDNiMFx1MDNiMVx1MDNiMlx1MDNiM1x1MDNiNFx1MDNiNVx1MDNiNlx1MDNiN1x1MDNiOFx1MDNiOVx1MDNiYVx1MDNiYlx1MDNiY1x1MDNiZFx1MDNiZVx1MDNiZlx1MDNjMFx1MDNjMVx1MDNjMlx1MDNjM1x1MDNjNFx1MDNjNVx1MDNjNlx1MDNjN1x1MDNjOFx1MDNj''@;'; put 'put ''OVx1MDNjYVx1MDNjYlx1MDNjY1x1MDNjZFx1MDNjZVx1ZmZmZCJ9LHdpbjEyNTM6IndpbmRvd3MxMjUzIixjcDEyNTM6IndpbmRvd3MxMjUzIix3aW5kb3dzMTI1NDp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFc''@;'; put 'put ''dTAyYzZcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdTAxNjFcdTIwM2FcdTAxNTNcdWZmZmRcdWZmZmRcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4''@;'; put 'put ''YTVceGE2XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhj''@;'; put 'put ''ZVx4Y2ZcdTAxMWVceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAxMzBcdTAxNWVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx1MDExZlx4ZjFceGYyXHhmM1x4ZjRceGY1''@;'; put 'put ''XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDEzMVx1MDE1Zlx4ZmYifSx3aW4xMjU0OiJ3aW5kb3dzMTI1NCIsY3AxMjU0OiJ3aW5kb3dzMTI1NCIsd2luZG93czEyNTU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyMGFjXHVmZmZkXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIw''@;'; put 'put ''XHUyMDIxXHUwMmM2XHUyMDMwXHVmZmZkXHUyMDM5XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHUwMmRjXHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHhhMFx4YTFceGEyXHhh''@;'; put 'put ''M1x1MjBhYVx4YTVceGE2XHhhN1x4YThceGE5XHhkN1x4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4ZjdceGJiXHhiY1x4YmRceGJlXHhiZlx1MDViMFx1MDViMVx1MDViMlx1MDViM1x1MDViNFx1MDViNVx1MDViNlx1MDViN1x1''@;'; put 'put ''MDViOFx1MDViOVx1MDViYVx1MDViYlx1MDViY1x1MDViZFx1MDViZVx1MDViZlx1MDVjMFx1MDVjMVx1MDVjMlx1MDVjM1x1MDVmMFx1MDVmMVx1MDVmMlx1MDVmM1x1MDVmNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDVkMFx1MDVkMVx1MDVkMlx1MDVk''@;'; put 'put ''M1x1MDVkNFx1MDVkNVx1MDVkNlx1MDVkN1x1MDVkOFx1MDVkOVx1MDVkYVx1MDVkYlx1MDVkY1x1MDVkZFx1MDVkZVx1MDVkZlx1MDVlMFx1MDVlMVx1MDVlMlx1MDVlM1x1MDVlNFx1MDVlNVx1MDVlNlx1MDVlN1x1MDVlOFx1MDVlOVx1MDVlYVx1ZmZmZFx1ZmZmZFx1MjAwZVx1MjAwZlx1''@;'; put 'put ''ZmZmZCJ9LHdpbjEyNTU6IndpbmRvd3MxMjU1IixjcDEyNTU6IndpbmRvd3MxMjU1Iix3aW5kb3dzMTI1Njp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNcdTA2N2VcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZcdTIwMzBcdTA2NzlcdTIwMzlcdTAxNTJcdTA2''@;'; put 'put ''ODZcdTA2OThcdTA2ODhcdTA2YWZcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTA2YTlcdTIxMjJcdTA2OTFcdTIwM2FcdTAxNTNcdTIwMGNcdTIwMGRcdTA2YmFceGEwXHUwNjBjXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlcdTA2YmVceGFiXHhh''@;'; put 'put ''Y1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlcdTA2MWJceGJiXHhiY1x4YmRceGJlXHUwNjFmXHUwNmMxXHUwNjIxXHUwNjIyXHUwNjIzXHUwNjI0XHUwNjI1XHUwNjI2XHUwNjI3XHUwNjI4XHUwNjI5XHUwNjJhXHUwNjJiXHUwNjJjXHUwNjJk''@;'; put 'put ''XHUwNjJlXHUwNjJmXHUwNjMwXHUwNjMxXHUwNjMyXHUwNjMzXHUwNjM0XHUwNjM1XHUwNjM2XHhkN1x1MDYzN1x1MDYzOFx1MDYzOVx1MDYzYVx1MDY0MFx1MDY0MVx1MDY0Mlx1MDY0M1x4ZTBcdTA2NDRceGUyXHUwNjQ1XHUwNjQ2XHUwNjQ3XHUwNjQ4XHhlN1x4ZThceGU5XHhlYVx4ZWJc''@;'; put 'put ''dTA2NDlcdTA2NGFceGVlXHhlZlx1MDY0Ylx1MDY0Y1x1MDY0ZFx1MDY0ZVx4ZjRcdTA2NGZcdTA2NTBceGY3XHUwNjUxXHhmOVx1MDY1Mlx4ZmJceGZjXHUyMDBlXHUyMDBmXHUwNmQyIn0sd2luMTI1Njoid2luZG93czEyNTYiLGNwMTI1Njoid2luZG93czEyNTYiLHdpbmRvd3MxMjU3Ont0''@;'; put 'put ''eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjBhY1x1ZmZmZFx1MjAxYVx1ZmZmZFx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1ZmZmZFx1MjAzMFx1ZmZmZFx1MjAzOVx1ZmZmZFx4YThcdTAyYzdceGI4XHVmZmZkXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUyMDIyXHUyMDEzXHUyMDE0XHVmZmZk''@;'; put 'put ''XHUyMTIyXHVmZmZkXHUyMDNhXHVmZmZkXHhhZlx1MDJkYlx1ZmZmZFx4YTBcdWZmZmRceGEyXHhhM1x4YTRcdWZmZmRceGE2XHhhN1x4ZDhceGE5XHUwMTU2XHhhYlx4YWNceGFkXHhhZVx4YzZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4ZjhceGI5XHUwMTU3XHhiYlx4YmNc''@;'; put 'put ''eGJkXHhiZVx4ZTZcdTAxMDRcdTAxMmVcdTAxMDBcdTAxMDZceGM0XHhjNVx1MDExOFx1MDExMlx1MDEwY1x4YzlcdTAxNzlcdTAxMTZcdTAxMjJcdTAxMzZcdTAxMmFcdTAxM2JcdTAxNjBcdTAxNDNcdTAxNDVceGQzXHUwMTRjXHhkNVx4ZDZceGQ3XHUwMTcyXHUwMTQxXHUwMTVhXHUwMTZh''@;'; put 'put ''XHhkY1x1MDE3Ylx1MDE3ZFx4ZGZcdTAxMDVcdTAxMmZcdTAxMDFcdTAxMDdceGU0XHhlNVx1MDExOVx1MDExM1x1MDEwZFx4ZTlcdTAxN2FcdTAxMTdcdTAxMjNcdTAxMzdcdTAxMmJcdTAxM2NcdTAxNjFcdTAxNDRcdTAxNDZceGYzXHUwMTRkXHhmNVx4ZjZceGY3XHUwMTczXHUwMTQyXHUw''@;'; put 'put ''MTViXHUwMTZiXHhmY1x1MDE3Y1x1MDE3ZVx1MDJkOSJ9LHdpbjEyNTc6IndpbmRvd3MxMjU3IixjcDEyNTc6IndpbmRvd3MxMjU3Iix3aW5kb3dzMTI1ODp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNcdWZmZmRcdTIwMWFcdTAxOTJcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyYzZc''@;'; put 'put ''dTIwMzBcdWZmZmRcdTIwMzlcdTAxNTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdWZmZmRcdTIwM2FcdTAxNTNcdWZmZmRcdWZmZmRcdTAxNzhceGEwXHhhMVx4YTJceGEzXHhhNFx4YTVceGE2''@;'; put 'put ''XHhhN1x4YThceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhiNlx4YjdceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx1MDEwMlx4YzRceGM1XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHUwMzAwXHhjZFx4Y2Vc''@;'; put 'put ''eGNmXHUwMTEwXHhkMVx1MDMwOVx4ZDNceGQ0XHUwMWEwXHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x1MDFhZlx1MDMwM1x4ZGZceGUwXHhlMVx4ZTJcdTAxMDNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx1MDMwMVx4ZWRceGVlXHhlZlx1MDExMVx4ZjFcdTAzMjNceGYz''@;'; put 'put ''XHhmNFx1MDFhMVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNcdTAxYjBcdTIwYWJceGZmIn0sd2luMTI1ODoid2luZG93czEyNTgiLGNwMTI1ODoid2luZG93czEyNTgiLGlzbzg4NTkxOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4''@;'; put 'put ''OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIx''@;'; put 'put ''XHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHhkMFx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFc''@;'; put 'put ''eGRiXHhkY1x4ZGRceGRlXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx4ZmVceGZmIn0sY3AyODU5MToiaXNvODg1''@;'; put 'put ''OTEiLGlzbzg4NTkyOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhh''@;'; put 'put ''MFx1MDEwNFx1MDJkOFx1MDE0MVx4YTRcdTAxM2RcdTAxNWFceGE3XHhhOFx1MDE2MFx1MDE1ZVx1MDE2NFx1MDE3OVx4YWRcdTAxN2RcdTAxN2JceGIwXHUwMTA1XHUwMmRiXHUwMTQyXHhiNFx1MDEzZVx1MDE1Ylx1MDJjN1x4YjhcdTAxNjFcdTAxNWZcdTAxNjVcdTAxN2FcdTAyZGRcdTAx''@;'; put 'put ''N2VcdTAxN2NcdTAxNTRceGMxXHhjMlx1MDEwMlx4YzRcdTAxMzlcdTAxMDZceGM3XHUwMTBjXHhjOVx1MDExOFx4Y2JcdTAxMWFceGNkXHhjZVx1MDEwZVx1MDExMFx1MDE0M1x1MDE0N1x4ZDNceGQ0XHUwMTUwXHhkNlx4ZDdcdTAxNThcdTAxNmVceGRhXHUwMTcwXHhkY1x4ZGRcdTAxNjJc''@;'; put 'put ''eGRmXHUwMTU1XHhlMVx4ZTJcdTAxMDNceGU0XHUwMTNhXHUwMTA3XHhlN1x1MDEwZFx4ZTlcdTAxMTlceGViXHUwMTFiXHhlZFx4ZWVcdTAxMGZcdTAxMTFcdTAxNDRcdTAxNDhceGYzXHhmNFx1MDE1MVx4ZjZceGY3XHUwMTU5XHUwMTZmXHhmYVx1MDE3MVx4ZmNceGZkXHUwMTYzXHUwMmQ5''@;'; put 'put ''In0sY3AyODU5MjoiaXNvODg1OTIiLGlzbzg4NTkzOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJc''@;'; put 'put ''eDljXHg5ZFx4OWVceDlmXHhhMFx1MDEyNlx1MDJkOFx4YTNceGE0XHVmZmZkXHUwMTI0XHhhN1x4YThcdTAxMzBcdTAxNWVcdTAxMWVcdTAxMzRceGFkXHVmZmZkXHUwMTdiXHhiMFx1MDEyN1x4YjJceGIzXHhiNFx4YjVcdTAxMjVceGI3XHhiOFx1MDEzMVx1MDE1Zlx1MDExZlx1MDEzNVx4''@;'; put 'put ''YmRcdWZmZmRcdTAxN2NceGMwXHhjMVx4YzJcdWZmZmRceGM0XHUwMTBhXHUwMTA4XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHVmZmZkXHhkMVx4ZDJceGQzXHhkNFx1MDEyMFx4ZDZceGQ3XHUwMTFjXHhkOVx4ZGFceGRiXHhkY1x1MDE2Y1x1MDE1Y1x4ZGZceGUwXHhl''@;'; put 'put ''MVx4ZTJcdWZmZmRceGU0XHUwMTBiXHUwMTA5XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHVmZmZkXHhmMVx4ZjJceGYzXHhmNFx1MDEyMVx4ZjZceGY3XHUwMTFkXHhmOVx4ZmFceGZiXHhmY1x1MDE2ZFx1MDE1ZFx1MDJkOSJ9LGNwMjg1OTM6Imlzbzg4NTkzIixpc284''@;'; put 'put ''ODU5NDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTAxMDRc''@;'; put 'put ''dTAxMzhcdTAxNTZceGE0XHUwMTI4XHUwMTNiXHhhN1x4YThcdTAxNjBcdTAxMTJcdTAxMjJcdTAxNjZceGFkXHUwMTdkXHhhZlx4YjBcdTAxMDVcdTAyZGJcdTAxNTdceGI0XHUwMTI5XHUwMTNjXHUwMmM3XHhiOFx1MDE2MVx1MDExM1x1MDEyM1x1MDE2N1x1MDE0YVx1MDE3ZVx1MDE0Ylx1''@;'; put 'put ''MDEwMFx4YzFceGMyXHhjM1x4YzRceGM1XHhjNlx1MDEyZVx1MDEwY1x4YzlcdTAxMThceGNiXHUwMTE2XHhjZFx4Y2VcdTAxMmFcdTAxMTBcdTAxNDVcdTAxNGNcdTAxMzZceGQ0XHhkNVx4ZDZceGQ3XHhkOFx1MDE3Mlx4ZGFceGRiXHhkY1x1MDE2OFx1MDE2YVx4ZGZcdTAxMDFceGUxXHhl''@;'; put 'put ''Mlx4ZTNceGU0XHhlNVx4ZTZcdTAxMmZcdTAxMGRceGU5XHUwMTE5XHhlYlx1MDExN1x4ZWRceGVlXHUwMTJiXHUwMTExXHUwMTQ2XHUwMTRkXHUwMTM3XHhmNFx4ZjVceGY2XHhmN1x4ZjhcdTAxNzNceGZhXHhmYlx4ZmNcdTAxNjlcdTAxNmJcdTAyZDkifSxjcDI4NTk0OiJpc284ODU5NCIs''@;'; put 'put ''aXNvODg1OTU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUw''@;'; put 'put ''NDAxXHUwNDAyXHUwNDAzXHUwNDA0XHUwNDA1XHUwNDA2XHUwNDA3XHUwNDA4XHUwNDA5XHUwNDBhXHUwNDBiXHUwNDBjXHhhZFx1MDQwZVx1MDQwZlx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1''@;'; put 'put ''MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQz''@;'; put 'put ''OFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MjExNlx1MDQ1MVx1MDQ1Mlx1MDQ1M1x1''@;'; put 'put ''MDQ1NFx1MDQ1NVx1MDQ1Nlx1MDQ1N1x1MDQ1OFx1MDQ1OVx1MDQ1YVx1MDQ1Ylx1MDQ1Y1x4YTdcdTA0NWVcdTA0NWYifSxjcDI4NTk1OiJpc284ODU5NSIsaXNvODg1OTY6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFc''@;'; put 'put ''eDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHVmZmZkXHVmZmZkXHVmZmZkXHhhNFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDYwY1x4YWRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA2MWJcdWZmZmRcdWZmZmRcdWZmZmRcdTA2MWZcdWZmZmRcdTA2MjFcdTA2MjJcdTA2MjNcdTA2MjRcdTA2MjVcdTA2MjZcdTA2MjdcdTA2MjhcdTA2Mjlc''@;'; put 'put ''dTA2MmFcdTA2MmJcdTA2MmNcdTA2MmRcdTA2MmVcdTA2MmZcdTA2MzBcdTA2MzFcdTA2MzJcdTA2MzNcdTA2MzRcdTA2MzVcdTA2MzZcdTA2MzdcdTA2MzhcdTA2MzlcdTA2M2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTA2NDBcdTA2NDFcdTA2NDJcdTA2NDNcdTA2NDRcdTA2''@;'; put 'put ''NDVcdTA2NDZcdTA2NDdcdTA2NDhcdTA2NDlcdTA2NGFcdTA2NGJcdTA2NGNcdTA2NGRcdTA2NGVcdTA2NGZcdTA2NTBcdTA2NTFcdTA2NTJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifSxjcDI4''@;'; put 'put ''NTk2OiJpc284ODU5NiIsaXNvODg1OTc6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlk''@;'; put 'put ''XHg5ZVx4OWZceGEwXHUyMDE4XHUyMDE5XHhhM1x1MjBhY1x1MjBhZlx4YTZceGE3XHhhOFx4YTlcdTAzN2FceGFiXHhhY1x4YWRcdWZmZmRcdTIwMTVceGIwXHhiMVx4YjJceGIzXHUwMzg0XHUwMzg1XHUwMzg2XHhiN1x1MDM4OFx1MDM4OVx1MDM4YVx4YmJcdTAzOGNceGJkXHUwMzhlXHUw''@;'; put 'put ''MzhmXHUwMzkwXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHVmZmZkXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHUwM2Fh''@;'; put 'put ''XHUwM2FiXHUwM2FjXHUwM2FkXHUwM2FlXHUwM2FmXHUwM2IwXHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MyXHUwM2MzXHUwM2M0XHUwM2M1XHUw''@;'; put 'put ''M2M2XHUwM2M3XHUwM2M4XHUwM2M5XHUwM2NhXHUwM2NiXHUwM2NjXHUwM2NkXHUwM2NlXHVmZmZkIn0sY3AyODU5NzoiaXNvODg1OTciLGlzbzg4NTk4Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhk''@;'; put 'put ''XHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1ZmZmZFx4YTJceGEzXHhhNFx4YTVceGE2XHhhN1x4YThceGE5XHhkN1x4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x4YjRceGI1XHhi''@;'; put 'put ''Nlx4YjdceGI4XHhiOVx4ZjdceGJiXHhiY1x4YmRceGJlXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyMDE3XHUwNWQwXHUwNWQxXHUwNWQyXHUwNWQzXHUwNWQ0XHUwNWQ1XHUwNWQ2XHUwNWQ3XHUwNWQ4XHUwNWQ5XHUwNWRhXHUwNWRiXHUwNWRjXHUwNWRkXHUwNWRlXHUwNWRmXHUw''@;'; put 'put ''NWUwXHUwNWUxXHUwNWUyXHUwNWUzXHUwNWU0XHUwNWU1XHUwNWU2XHUwNWU3XHUwNWU4XHUwNWU5XHUwNWVhXHVmZmZkXHVmZmZkXHUyMDBlXHUyMDBmXHVmZmZkIn0sY3AyODU5ODoiaXNvODg1OTgiLGlzbzg4NTk5Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0''@;'; put 'put ''XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRc''@;'; put 'put ''eGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmXHUwMTFlXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2''@;'; put 'put ''XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHUwMTMwXHUwMTVlXHhkZlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZcdTAxMWZceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNcdTAxMzFc''@;'; put 'put ''dTAxNWZceGZmIn0sY3AyODU5OToiaXNvODg1OTkiLGlzbzg4NTkxMDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5''@;'; put 'put ''OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTAxMDRcdTAxMTJcdTAxMjJcdTAxMmFcdTAxMjhcdTAxMzZceGE3XHUwMTNiXHUwMTEwXHUwMTYwXHUwMTY2XHUwMTdkXHhhZFx1MDE2YVx1MDE0YVx4YjBcdTAxMDVcdTAxMTNcdTAxMjNcdTAxMmJcdTAxMjlcdTAxMzdceGI3XHUwMTNj''@;'; put 'put ''XHUwMTExXHUwMTYxXHUwMTY3XHUwMTdlXHUyMDE1XHUwMTZiXHUwMTRiXHUwMTAwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHUwMTJlXHUwMTBjXHhjOVx1MDExOFx4Y2JcdTAxMTZceGNkXHhjZVx4Y2ZceGQwXHUwMTQ1XHUwMTRjXHhkM1x4ZDRceGQ1XHhkNlx1MDE2OFx4ZDhcdTAxNzJc''@;'; put 'put ''eGRhXHhkYlx4ZGNceGRkXHhkZVx4ZGZcdTAxMDFceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZcdTAxMmZcdTAxMGRceGU5XHUwMTE5XHhlYlx1MDExN1x4ZWRceGVlXHhlZlx4ZjBcdTAxNDZcdTAxNGRceGYzXHhmNFx4ZjVceGY2XHUwMTY5XHhmOFx1MDE3M1x4ZmFceGZiXHhmY1x4ZmRceGZl''@;'; put 'put ''XHUwMTM4In0sY3AyODYwMDoiaXNvODg1OTEwIixpc284ODU5MTE6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlc''@;'; put 'put ''eDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwZTAxXHUwZTAyXHUwZTAzXHUwZTA0XHUwZTA1XHUwZTA2XHUwZTA3XHUwZTA4XHUwZTA5XHUwZTBhXHUwZTBiXHUwZTBjXHUwZTBkXHUwZTBlXHUwZTBmXHUwZTEwXHUwZTExXHUwZTEyXHUwZTEzXHUwZTE0XHUwZTE1XHUwZTE2XHUwZTE3''@;'; put 'put ''XHUwZTE4XHUwZTE5XHUwZTFhXHUwZTFiXHUwZTFjXHUwZTFkXHUwZTFlXHUwZTFmXHUwZTIwXHUwZTIxXHUwZTIyXHUwZTIzXHUwZTI0XHUwZTI1XHUwZTI2XHUwZTI3XHUwZTI4XHUwZTI5XHUwZTJhXHUwZTJiXHUwZTJjXHUwZTJkXHUwZTJlXHUwZTJmXHUwZTMwXHUwZTMxXHUwZTMyXHUw''@;'; put 'put ''ZTMzXHUwZTM0XHUwZTM1XHUwZTM2XHUwZTM3XHUwZTM4XHUwZTM5XHUwZTNhXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZTNmXHUwZTQwXHUwZTQxXHUwZTQyXHUwZTQzXHUwZTQ0XHUwZTQ1XHUwZTQ2XHUwZTQ3XHUwZTQ4XHUwZTQ5XHUwZTRhXHUwZTRiXHUwZTRjXHUwZTRkXHUwZTRl''@;'; put 'put ''XHUwZTRmXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUwZTU3XHUwZTU4XHUwZTU5XHUwZTVhXHUwZTViXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn0sY3AyODYwMToiaXNvODg1OTExIixpc284ODU5MTM6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFc''@;'; put 'put ''eDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUyMDFkXHhhMlx4YTNceGE0XHUyMDFlXHhhNlx4YTdceGQ4XHhhOVx1''@;'; put 'put ''MDE1Nlx4YWJceGFjXHhhZFx4YWVceGM2XHhiMFx4YjFceGIyXHhiM1x1MjAxY1x4YjVceGI2XHhiN1x4ZjhceGI5XHUwMTU3XHhiYlx4YmNceGJkXHhiZVx4ZTZcdTAxMDRcdTAxMmVcdTAxMDBcdTAxMDZceGM0XHhjNVx1MDExOFx1MDExMlx1MDEwY1x4YzlcdTAxNzlcdTAxMTZcdTAxMjJc''@;'; put 'put ''dTAxMzZcdTAxMmFcdTAxM2JcdTAxNjBcdTAxNDNcdTAxNDVceGQzXHUwMTRjXHhkNVx4ZDZceGQ3XHUwMTcyXHUwMTQxXHUwMTVhXHUwMTZhXHhkY1x1MDE3Ylx1MDE3ZFx4ZGZcdTAxMDVcdTAxMmZcdTAxMDFcdTAxMDdceGU0XHhlNVx1MDExOVx1MDExM1x1MDEwZFx4ZTlcdTAxN2FcdTAx''@;'; put 'put ''MTdcdTAxMjNcdTAxMzdcdTAxMmJcdTAxM2NcdTAxNjFcdTAxNDRcdTAxNDZceGYzXHUwMTRkXHhmNVx4ZjZceGY3XHUwMTczXHUwMTQyXHUwMTViXHUwMTZiXHhmY1x1MDE3Y1x1MDE3ZVx1MjAxOSJ9LGNwMjg2MDM6Imlzbzg4NTkxMyIsaXNvODg1OTE0Ont0eXBlOiJfc2JjcyIsY2hhcnM6''@;'; put 'put ''Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmXHhhMFx1MWUwMlx1MWUwM1x4YTNcdTAxMGFcdTAxMGJcdTFl''@;'; put 'put ''MGFceGE3XHUxZTgwXHhhOVx1MWU4Mlx1MWUwYlx1MWVmMlx4YWRceGFlXHUwMTc4XHUxZTFlXHUxZTFmXHUwMTIwXHUwMTIxXHUxZTQwXHUxZTQxXHhiNlx1MWU1Nlx1MWU4MVx1MWU1N1x1MWU4M1x1MWU2MFx1MWVmM1x1MWU4NFx1MWU4NVx1MWU2MVx4YzBceGMxXHhjMlx4YzNceGM0XHhj''@;'; put 'put ''NVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZcdTAxNzRceGQxXHhkMlx4ZDNceGQ0XHhkNVx4ZDZcdTFlNmFceGQ4XHhkOVx4ZGFceGRiXHhkY1x4ZGRcdTAxNzZceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4''@;'; put 'put ''ZWRceGVlXHhlZlx1MDE3NVx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx1MWU2Ylx4ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx1MDE3N1x4ZmYifSxjcDI4NjA0OiJpc284ODU5MTQiLGlzbzg4NTkxNTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4''@;'; put 'put ''N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNcdTIwYWNceGE1XHUwMTYwXHhhN1x1MDE2MVx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4''@;'; put 'put ''YWZceGIwXHhiMVx4YjJceGIzXHUwMTdkXHhiNVx4YjZceGI3XHUwMTdlXHhiOVx4YmFceGJiXHUwMTUyXHUwMTUzXHUwMTc4XHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2ZceGQwXHhkMVx4ZDJceGQzXHhkNFx4ZDVc''@;'; put 'put ''eGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceGRmXHhlMFx4ZTFceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4''@;'; put 'put ''ZmYifSxjcDI4NjA1OiJpc284ODU5MTUiLGlzbzg4NTkxNjp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFc''@;'; put 'put ''eDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTAxMDRcdTAxMDVcdTAxNDFcdTIwYWNcdTIwMWVcdTAxNjBceGE3XHUwMTYxXHhhOVx1MDIxOFx4YWJcdTAxNzlceGFkXHUwMTdhXHUwMTdiXHhiMFx4YjFcdTAxMGNcdTAxNDJcdTAxN2RcdTIwMWRceGI2XHhiN1x1MDE3ZVx1MDEwZFx1MDIxOVx4''@;'; put 'put ''YmJcdTAxNTJcdTAxNTNcdTAxNzhcdTAxN2NceGMwXHhjMVx4YzJcdTAxMDJceGM0XHUwMTA2XHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx1MDExMFx1MDE0M1x4ZDJceGQzXHhkNFx1MDE1MFx4ZDZcdTAxNWFcdTAxNzBceGQ5XHhkYVx4ZGJceGRjXHUwMTE4XHUw''@;'; put 'put ''MjFhXHhkZlx4ZTBceGUxXHhlMlx1MDEwM1x4ZTRcdTAxMDdceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHUwMTExXHUwMTQ0XHhmMlx4ZjNceGY0XHUwMTUxXHhmNlx1MDE1Ylx1MDE3MVx4ZjlceGZhXHhmYlx4ZmNcdTAxMTlcdTAyMWJceGZmIn0sY3AyODYwNjoi''@;'; put 'put ''aXNvODg1OTE2IixjcDQzNzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHhlY1x4YzRceGM1XHhjOVx4ZTZceGM2XHhmNFx4ZjZceGYyXHhmYlx4ZjlceGZmXHhkNlx4ZGNceGEyXHhhM1x4YTVcdTIwYTdc''@;'; put 'put ''dTAxOTJceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhiYVx4YmZcdTIzMTBceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1''@;'; put 'put ''MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNc''@;'; put 'put ''dTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4''@;'; put 'put ''XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCJ9LGlibTQzNzoiY3A0MzciLGNzaWJtNDM3OiJjcDQzNyIsY3A3Mzc6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMzk4XHUwMzk5XHUwMzlhXHUw''@;'; put 'put ''MzliXHUwMzljXHUwMzlkXHUwMzllXHUwMzlmXHUwM2EwXHUwM2ExXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHUwM2IxXHUwM2IyXHUwM2IzXHUwM2I0XHUwM2I1XHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2Jl''@;'; put 'put ''XHUwM2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2MyXHUwM2M0XHUwM2M1XHUwM2M2XHUwM2M3XHUwM2M4XHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUy''@;'; put 'put ''NTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0''@;'; put 'put ''XHUyNThjXHUyNTkwXHUyNTgwXHUwM2M5XHUwM2FjXHUwM2FkXHUwM2FlXHUwM2NhXHUwM2FmXHUwM2NjXHUwM2NkXHUwM2NiXHUwM2NlXHUwMzg2XHUwMzg4XHUwMzg5XHUwMzhhXHUwMzhjXHUwMzhlXHUwMzhmXHhiMVx1MjI2NVx1MjI2NFx1MDNhYVx1MDNhYlx4ZjdcdTIyNDhceGIwXHUy''@;'; put 'put ''MjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0saWJtNzM3OiJjcDczNyIsY3NpYm03Mzc6ImNwNzM3IixjcDc3NTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTAxMDZceGZjXHhlOVx1MDEwMVx4ZTRcdTAxMjNceGU1XHUwMTA3XHUwMTQyXHUwMTEzXHUwMTU2XHUwMTU3XHUwMTJi''@;'; put 'put ''XHUwMTc5XHhjNFx4YzVceGM5XHhlNlx4YzZcdTAxNGRceGY2XHUwMTIyXHhhMlx1MDE1YVx1MDE1Ylx4ZDZceGRjXHhmOFx4YTNceGQ4XHhkN1x4YTRcdTAxMDBcdTAxMmFceGYzXHUwMTdiXHUwMTdjXHUwMTdhXHUyMDFkXHhhNlx4YTlceGFlXHhhY1x4YmRceGJjXHUwMTQxXHhhYlx4YmJc''@;'; put 'put ''dTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTAxMDRcdTAxMGNcdTAxMThcdTAxMTZcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTAxMmVcdTAxNjBcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTAxNzJcdTAxNmFcdTI1NWFcdTI1NTRcdTI1NjlcdTI1''@;'; put 'put ''NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTAxN2RcdTAxMDVcdTAxMGRcdTAxMTlcdTAxMTdcdTAxMmZcdTAxNjFcdTAxNzNcdTAxNmJcdTAxN2VcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBceGQzXHhkZlx1MDE0Y1x1MDE0M1x4ZjVceGQ1XHhiNVx1MDE0NFx1MDEz''@;'; put 'put ''Nlx1MDEzN1x1MDEzYlx1MDEzY1x1MDE0Nlx1MDExMlx1MDE0NVx1MjAxOVx4YWRceGIxXHUyMDFjXHhiZVx4YjZceGE3XHhmN1x1MjAxZVx4YjBcdTIyMTlceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCJ9LGlibTc3NToiY3A3NzUiLGNzaWJtNzc1OiJjcDc3NSIsY3A4NTA6e3R5cGU6Il9z''@;'; put 'put ''YmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGVmXHhlZVx4ZWNceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmMlx4ZmJceGY5XHhmZlx4ZDZceGRjXHhmOFx4YTNceGQ4XHhkN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhk''@;'; put 'put ''MVx4YWFceGJhXHhiZlx4YWVceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRceGMxXHhjMlx4YzBceGE5XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHhhMlx4YTVcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NceGUz''@;'; put 'put ''XHhjM1x1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4YTRceGYwXHhkMFx4Y2FceGNiXHhjOFx1MDEzMVx4Y2RceGNlXHhjZlx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx4YTZceGNjXHUyNTgwXHhkM1x4ZGZceGQ0XHhkMlx4ZjVceGQ1XHhiNVx4ZmVceGRlXHhk''@;'; put 'put ''YVx4ZGJceGQ5XHhmZFx4ZGRceGFmXHhiNFx4YWRceGIxXHUyMDE3XHhiZVx4YjZceGE3XHhmN1x4YjhceGIwXHhhOFx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIn0saWJtODUwOiJjcDg1MCIsY3NpYm04NTA6ImNwODUwIixjcDg1Mjp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4''@;'; put 'put ''ZTlceGUyXHhlNFx1MDE2Zlx1MDEwN1x4ZTdcdTAxNDJceGViXHUwMTUwXHUwMTUxXHhlZVx1MDE3OVx4YzRcdTAxMDZceGM5XHUwMTM5XHUwMTNhXHhmNFx4ZjZcdTAxM2RcdTAxM2VcdTAxNWFcdTAxNWJceGQ2XHhkY1x1MDE2NFx1MDE2NVx1MDE0MVx4ZDdcdTAxMGRceGUxXHhlZFx4ZjNc''@;'; put 'put ''eGZhXHUwMTA0XHUwMTA1XHUwMTdkXHUwMTdlXHUwMTE4XHUwMTE5XHhhY1x1MDE3YVx1MDEwY1x1MDE1Zlx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJcdTAxMWFcdTAxNWVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTAxN2JcdTAxN2NcdTI1MTBcdTI1''@;'; put 'put ''MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTAxMDJcdTAxMDNcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHUwMTExXHUwMTEwXHUwMTBlXHhjYlx1MDEwZlx1MDE0N1x4Y2RceGNlXHUwMTFiXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUw''@;'; put 'put ''MTYyXHUwMTZlXHUyNTgwXHhkM1x4ZGZceGQ0XHUwMTQzXHUwMTQ0XHUwMTQ4XHUwMTYwXHUwMTYxXHUwMTU0XHhkYVx1MDE1NVx1MDE3MFx4ZmRceGRkXHUwMTYzXHhiNFx4YWRcdTAyZGRcdTAyZGJcdTAyYzdcdTAyZDhceGE3XHhmN1x4YjhceGIwXHhhOFx1MDJkOVx1MDE3MVx1MDE1OFx1''@;'; put 'put ''MDE1OVx1MjVhMFx4YTAifSxpYm04NTI6ImNwODUyIixjc2libTg1MjoiY3A4NTIiLGNwODU1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQ1Mlx1MDQwMlx1MDQ1M1x1MDQwM1x1MDQ1MVx1MDQwMVx1MDQ1NFx1MDQwNFx1MDQ1NVx1MDQwNVx1MDQ1Nlx1MDQwNlx1MDQ1N1x1MDQwN1x1MDQ1''@;'; put 'put ''OFx1MDQwOFx1MDQ1OVx1MDQwOVx1MDQ1YVx1MDQwYVx1MDQ1Ylx1MDQwYlx1MDQ1Y1x1MDQwY1x1MDQ1ZVx1MDQwZVx1MDQ1Zlx1MDQwZlx1MDQ0ZVx1MDQyZVx1MDQ0YVx1MDQyYVx1MDQzMFx1MDQxMFx1MDQzMVx1MDQxMVx1MDQ0Nlx1MDQyNlx1MDQzNFx1MDQxNFx1MDQzNVx1MDQxNVx1''@;'; put 'put ''MDQ0NFx1MDQyNFx1MDQzM1x1MDQxM1x4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUwNDQ1XHUwNDI1XHUwNDM4XHUwNDE4XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUwNDM5XHUwNDE5XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUw''@;'; put 'put ''NDNhXHUwNDFhXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHhhNFx1MDQzYlx1MDQxYlx1MDQzY1x1MDQxY1x1MDQzZFx1MDQxZFx1MDQzZVx1MDQxZVx1MDQzZlx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MDQxZlx1MDQ0Zlx1MjU4MFx1MDQyZlx1MDQ0MFx1''@;'; put 'put ''MDQyMFx1MDQ0MVx1MDQyMVx1MDQ0Mlx1MDQyMlx1MDQ0M1x1MDQyM1x1MDQzNlx1MDQxNlx1MDQzMlx1MDQxMlx1MDQ0Y1x1MDQyY1x1MjExNlx4YWRcdTA0NGJcdTA0MmJcdTA0MzdcdTA0MTdcdTA0NDhcdTA0MjhcdTA0NGRcdTA0MmRcdTA0NDlcdTA0MjlcdTA0NDdcdTA0MjdceGE3XHUy''@;'; put 'put ''NWEwXHhhMCJ9LGlibTg1NToiY3A4NTUiLGNzaWJtODU1OiJjcDg1NSIsY3A4NTY6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNWQwXHUwNWQxXHUwNWQyXHUwNWQzXHUwNWQ0XHUwNWQ1XHUwNWQ2XHUwNWQ3XHUwNWQ4XHUwNWQ5XHUwNWRhXHUwNWRiXHUwNWRjXHUwNWRkXHUwNWRlXHUwNWRm''@;'; put 'put ''XHUwNWUwXHUwNWUxXHUwNWUyXHUwNWUzXHUwNWU0XHUwNWU1XHUwNWU2XHUwNWU3XHUwNWU4XHUwNWU5XHUwNWVhXHVmZmZkXHhhM1x1ZmZmZFx4ZDdcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGFlXHhhY1x4YmRceGJjXHVm''@;'; put 'put ''ZmZkXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdWZmZmRcdWZmZmRcdWZmZmRceGE5XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHhhMlx4YTVcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdWZmZmRcdWZmZmRcdTI1NWFcdTI1NTRcdTI1''@;'; put 'put ''NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHhhNlx1ZmZmZFx1MjU4MFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx4YjVc''@;'; put 'put ''dWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRceGFmXHhiNFx4YWRceGIxXHUyMDE3XHhiZVx4YjZceGE3XHhmN1x4YjhceGIwXHhhOFx4YjdceGI5XHhiM1x4YjJcdTI1YTBceGEwIn0saWJtODU2OiJjcDg1NiIsY3NpYm04NTY6ImNwODU2IixjcDg1Nzp7dHlwZToi''@;'; put 'put ''X3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhlNFx4ZTBceGU1XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHUwMTMxXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx1MDEzMFx4ZDZceGRjXHhmOFx4YTNceGQ4XHUwMTVlXHUwMTVmXHhlMVx4ZWRceGYzXHhm''@;'; put 'put ''YVx4ZjFceGQxXHUwMTFlXHUwMTFmXHhiZlx4YWVceGFjXHhiZFx4YmNceGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRceGMxXHhjMlx4YzBceGE5XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHhhMlx4YTVcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1''@;'; put 'put ''MDBcdTI1M2NceGUzXHhjM1x1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x4YTRceGJhXHhhYVx4Y2FceGNiXHhjOFx1ZmZmZFx4Y2RceGNlXHhjZlx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx4YTZceGNjXHUyNTgwXHhkM1x4ZGZceGQ0XHhkMlx4ZjVceGQ1XHhi''@;'; put 'put ''NVx1ZmZmZFx4ZDdceGRhXHhkYlx4ZDlceGVjXHhmZlx4YWZceGI0XHhhZFx4YjFcdWZmZmRceGJlXHhiNlx4YTdceGY3XHhiOFx4YjBceGE4XHhiN1x4YjlceGIzXHhiMlx1MjVhMFx4YTAifSxpYm04NTc6ImNwODU3Iixjc2libTg1NzoiY3A4NTciLGNwODU4Ont0eXBlOiJfc2JjcyIsY2hh''@;'; put 'put ''cnM6Ilx4YzdceGZjXHhlOVx4ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4ZjhceGEzXHhkOFx4ZDdcdTAxOTJceGUxXHhlZFx4ZjNceGZhXHhmMVx4ZDFceGFhXHhi''@;'; put 'put ''YVx4YmZceGFlXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHhjMVx4YzJceGMwXHhhOVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx4YTJceGE1XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHhlM1x4YzNcdTI1''@;'; put 'put ''NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNceGE0XHhmMFx4ZDBceGNhXHhjYlx4YzhcdTIwYWNceGNkXHhjZVx4Y2ZcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRceGE2XHhjY1x1MjU4MFx4ZDNceGRmXHhkNFx4ZDJceGY1XHhkNVx4YjVceGZlXHhkZVx4ZGFceGRiXHhk''@;'; put 'put ''OVx4ZmRceGRkXHhhZlx4YjRceGFkXHhiMVx1MjAxN1x4YmVceGI2XHhhN1x4ZjdceGI4XHhiMFx4YThceGI3XHhiOVx4YjNceGIyXHUyNWEwXHhhMCJ9LGlibTg1ODoiY3A4NTgiLGNzaWJtODU4OiJjcDg1OCIsY3A4NjA6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4''@;'; put 'put ''ZTNceGUwXHhjMVx4ZTdceGVhXHhjYVx4ZThceGNkXHhkNFx4ZWNceGMzXHhjMlx4YzlceGMwXHhjOFx4ZjRceGY1XHhmMlx4ZGFceGY5XHhjY1x4ZDVceGRjXHhhMlx4YTNceGQ5XHUyMGE3XHhkM1x4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx4ZDJceGFjXHhiZFx4YmNc''@;'; put 'put ''eGExXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1''@;'; put 'put ''NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUw''@;'; put 'put ''M2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCJ9LGlibTg2MDoiY3A4NjAiLGNz''@;'; put 'put ''aWJtODYwOiJjcDg2MCIsY3A4NjE6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjN1x4ZmNceGU5XHhlMlx4ZTRceGUwXHhlNVx4ZTdceGVhXHhlYlx4ZThceGQwXHhmMFx4ZGVceGM0XHhjNVx4YzlceGU2XHhjNlx4ZjRceGY2XHhmZVx4ZmJceGRkXHhmZFx4ZDZceGRjXHhmOFx4YTNceGQ4XHUy''@;'; put 'put ''MGE3XHUwMTkyXHhlMVx4ZWRceGYzXHhmYVx4YzFceGNkXHhkM1x4ZGFceGJmXHUyMzEwXHhhY1x4YmRceGJjXHhhMVx4YWJceGJiXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTVi''@;'; put 'put ''XHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUy''@;'; put 'put ''NTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHhmN1x1''@;'; put 'put ''MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxpYm04NjE6ImNwODYxIixjc2libTg2MToiY3A4NjEiLGNwODYyOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDVkMFx1MDVkMVx1MDVkMlx1MDVkM1x1MDVkNFx1MDVkNVx1MDVkNlx1MDVkN1x1MDVkOFx1MDVk''@;'; put 'put ''OVx1MDVkYVx1MDVkYlx1MDVkY1x1MDVkZFx1MDVkZVx1MDVkZlx1MDVlMFx1MDVlMVx1MDVlMlx1MDVlM1x1MDVlNFx1MDVlNVx1MDVlNlx1MDVlN1x1MDVlOFx1MDVlOVx1MDVlYVx4YTJceGEzXHhhNVx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx1''@;'; put 'put ''MjMxMFx4YWNceGJkXHhiY1x4YTFceGFiXHhiYlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1''@;'; put 'put ''ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAz''@;'; put 'put ''OTNcdTAzYzBcdTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0s''@;'; put 'put ''aWJtODYyOiJjcDg2MiIsY3NpYm04NjI6ImNwODYyIixjcDg2Mzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM3XHhmY1x4ZTlceGUyXHhjMlx4ZTBceGI2XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHUyMDE3XHhjMFx4YTdceGM5XHhjOFx4Y2FceGY0XHhjYlx4Y2ZceGZiXHhmOVx4YTRceGQ0''@;'; put 'put ''XHhkY1x4YTJceGEzXHhkOVx4ZGJcdTAxOTJceGE2XHhiNFx4ZjNceGZhXHhhOFx4YjhceGIzXHhhZlx4Y2VcdTIzMTBceGFjXHhiZFx4YmNceGJlXHhhYlx4YmJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdc''@;'; put 'put ''dTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1''@;'; put 'put ''NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTAzYjFceGRmXHUwMzkzXHUwM2MwXHUwM2EzXHUwM2MzXHhiNVx1MDNjNFx1MDNhNlx1MDM5OFx1MDNhOVx1MDNiNFx1MjIxZVx1MDNjNlx1MDNiNVx1MjIyOVx1MjI2MVx4YjFcdTIyNjVcdTIyNjRc''@;'; put 'put ''dTIzMjBcdTIzMjFceGY3XHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCJ9LGlibTg2MzoiY3A4NjMiLGNzaWJtODYzOiJjcDg2MyIsY3A4NjQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XGJcdFxuXHZcZlxy''@;'; put 'put ''XHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkXHUwNjZhJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1''@;'; put 'put ''dnd4eXp7fH1+XHg3Zlx4YjBceGI3XHUyMjE5XHUyMjFhXHUyNTkyXHUyNTAwXHUyNTAyXHUyNTNjXHUyNTI0XHUyNTJjXHUyNTFjXHUyNTM0XHUyNTEwXHUyNTBjXHUyNTE0XHUyNTE4XHUwM2IyXHUyMjFlXHUwM2M2XHhiMVx4YmRceGJjXHUyMjQ4XHhhYlx4YmJcdWZlZjdcdWZlZjhcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZlZmJcdWZlZmNcdWZmZmRceGEwXHhhZFx1ZmU4Mlx4YTNceGE0XHVmZTg0XHVmZmZkXHVmZmZkXHVmZThlXHVmZThmXHVmZTk1XHVmZTk5XHUwNjBjXHVmZTlkXHVmZWExXHVmZWE1XHUwNjYwXHUwNjYxXHUwNjYyXHUwNjYzXHUwNjY0XHUwNjY1XHUwNjY2XHUwNjY3XHUw''@;'; put 'put ''NjY4XHUwNjY5XHVmZWQxXHUwNjFiXHVmZWIxXHVmZWI1XHVmZWI5XHUwNjFmXHhhMlx1ZmU4MFx1ZmU4MVx1ZmU4M1x1ZmU4NVx1ZmVjYVx1ZmU4Ylx1ZmU4ZFx1ZmU5MVx1ZmU5M1x1ZmU5N1x1ZmU5Ylx1ZmU5Zlx1ZmVhM1x1ZmVhN1x1ZmVhOVx1ZmVhYlx1ZmVhZFx1ZmVhZlx1ZmViM1x1''@;'; put 'put ''ZmViN1x1ZmViYlx1ZmViZlx1ZmVjMVx1ZmVjNVx1ZmVjYlx1ZmVjZlx4YTZceGFjXHhmN1x4ZDdcdWZlYzlcdTA2NDBcdWZlZDNcdWZlZDdcdWZlZGJcdWZlZGZcdWZlZTNcdWZlZTdcdWZlZWJcdWZlZWRcdWZlZWZcdWZlZjNcdWZlYmRcdWZlY2NcdWZlY2VcdWZlY2RcdWZlZTFcdWZlN2Rc''@;'; put 'put ''dTA2NTFcdWZlZTVcdWZlZTlcdWZlZWNcdWZlZjBcdWZlZjJcdWZlZDBcdWZlZDVcdWZlZjVcdWZlZjZcdWZlZGRcdWZlZDlcdWZlZjFcdTI1YTBcdWZmZmQifSxpYm04NjQ6ImNwODY0Iixjc2libTg2NDoiY3A4NjQiLGNwODY1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzdceGZjXHhlOVx4''@;'; put 'put ''ZTJceGU0XHhlMFx4ZTVceGU3XHhlYVx4ZWJceGU4XHhlZlx4ZWVceGVjXHhjNFx4YzVceGM5XHhlNlx4YzZceGY0XHhmNlx4ZjJceGZiXHhmOVx4ZmZceGQ2XHhkY1x4ZjhceGEzXHhkOFx1MjBhN1x1MDE5Mlx4ZTFceGVkXHhmM1x4ZmFceGYxXHhkMVx4YWFceGJhXHhiZlx1MjMxMFx4YWNc''@;'; put 'put ''eGJkXHhiY1x4YTFceGFiXHhhNFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1''@;'; put 'put ''MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDNiMVx4ZGZcdTAzOTNcdTAzYzBc''@;'; put 'put ''dTAzYTNcdTAzYzNceGI1XHUwM2M0XHUwM2E2XHUwMzk4XHUwM2E5XHUwM2I0XHUyMjFlXHUwM2M2XHUwM2I1XHUyMjI5XHUyMjYxXHhiMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx4ZjdcdTIyNDhceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjA3Zlx4YjJcdTI1YTBceGEwIn0saWJtODY1OiJj''@;'; put 'put ''cDg2NSIsY3NpYm04NjU6ImNwODY1IixjcDg2Njp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJc''@;'; put 'put ''dTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0''@;'; put 'put ''M2VcdTA0M2ZcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRc''@;'; put 'put ''dTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0''@;'; put 'put ''NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGZcdTA0MDFcdTA0NTFcdTA0MDRcdTA0NTRcdTA0MDdcdTA0NTdcdTA0MGVcdTA0NWVceGIwXHUyMjE5XHhiN1x1MjIxYVx1MjExNlx4YTRcdTI1YTBceGEwIn0saWJtODY2OiJjcDg2''@;'; put 'put ''NiIsY3NpYm04NjY6ImNwODY2IixjcDg2OTp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTAzODZcdWZmZmRceGI3XHhhY1x4YTZcdTIwMThcdTIwMTlcdTAzODhcdTIwMTVcdTAzODlcdTAzOGFcdTAzYWFcdTAzOGNcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdTAzOGVcdTAzYWJceGE5XHUwMzhmXHhiMlx4YjNcdTAzYWNceGEzXHUwM2FkXHUwM2FlXHUwM2FmXHUwM2NhXHUwMzkwXHUwM2NjXHUwM2NkXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHhiZFx1MDM5OFx1MDM5OVx4YWJceGJiXHUyNTkxXHUyNTkyXHUy''@;'; put 'put ''NTkzXHUyNTAyXHUyNTI0XHUwMzlhXHUwMzliXHUwMzljXHUwMzlkXHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUwMzllXHUwMzlmXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUwM2EwXHUwM2ExXHUyNTVhXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUw''@;'; put 'put ''XHUyNTZjXHUwM2EzXHUwM2E0XHUwM2E1XHUwM2E2XHUwM2E3XHUwM2E4XHUwM2E5XHUwM2IxXHUwM2IyXHUwM2IzXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUwM2I0XHUwM2I1XHUyNTgwXHUwM2I2XHUwM2I3XHUwM2I4XHUwM2I5XHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JlXHUw''@;'; put 'put ''M2JmXHUwM2MwXHUwM2MxXHUwM2MzXHUwM2MyXHUwM2M0XHUwMzg0XHhhZFx4YjFcdTAzYzVcdTAzYzZcdTAzYzdceGE3XHUwM2M4XHUwMzg1XHhiMFx4YThcdTAzYzlcdTAzY2JcdTAzYjBcdTAzY2VcdTI1YTBceGEwIn0saWJtODY5OiJjcDg2OSIsY3NpYm04Njk6ImNwODY5IixjcDkyMjp7''@;'; put 'put ''dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBceGExXHhhMlx4YTNc''@;'; put 'put ''eGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx1MjAzZVx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNj''@;'; put 'put ''XHhjZFx4Y2VceGNmXHUwMTYwXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx1MDE3ZFx4ZGZceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmXHUwMTYxXHhmMVx4ZjJceGYzXHhm''@;'; put 'put ''NFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx1MDE3ZVx4ZmYifSxpYm05MjI6ImNwOTIyIixjc2libTkyMjoiY3A5MjIiLGNwMTA0Njp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdWZlODhceGQ3XHhmN1x1ZjhmNlx1ZjhmNVx1ZjhmNFx1ZjhmN1x1ZmU3MVx4ODhcdTI1YTBc''@;'; put 'put ''dTI1MDJcdTI1MDBcdTI1MTBcdTI1MGNcdTI1MTRcdTI1MThcdWZlNzlcdWZlN2JcdWZlN2RcdWZlN2ZcdWZlNzdcdWZlOGFcdWZlZjBcdWZlZjNcdWZlZjJcdWZlY2VcdWZlY2ZcdWZlZDBcdWZlZjZcdWZlZjhcdWZlZmFcdWZlZmNceGEwXHVmOGZhXHVmOGY5XHVmOGY4XHhhNFx1ZjhmYlx1''@;'; put 'put ''ZmU4Ylx1ZmU5MVx1ZmU5N1x1ZmU5Ylx1ZmU5Zlx1ZmVhM1x1MDYwY1x4YWRcdWZlYTdcdWZlYjNcdTA2NjBcdTA2NjFcdTA2NjJcdTA2NjNcdTA2NjRcdTA2NjVcdTA2NjZcdTA2NjdcdTA2NjhcdTA2NjlcdWZlYjdcdTA2MWJcdWZlYmJcdWZlYmZcdWZlY2FcdTA2MWZcdWZlY2JcdTA2MjFc''@;'; put 'put ''dTA2MjJcdTA2MjNcdTA2MjRcdTA2MjVcdTA2MjZcdTA2MjdcdTA2MjhcdTA2MjlcdTA2MmFcdTA2MmJcdTA2MmNcdTA2MmRcdTA2MmVcdTA2MmZcdTA2MzBcdTA2MzFcdTA2MzJcdTA2MzNcdTA2MzRcdTA2MzVcdTA2MzZcdTA2MzdcdWZlYzdcdTA2MzlcdTA2M2FcdWZlY2NcdWZlODJcdWZl''@;'; put 'put ''ODRcdWZlOGVcdWZlZDNcdTA2NDBcdTA2NDFcdTA2NDJcdTA2NDNcdTA2NDRcdTA2NDVcdTA2NDZcdTA2NDdcdTA2NDhcdTA2NDlcdTA2NGFcdTA2NGJcdTA2NGNcdTA2NGRcdTA2NGVcdTA2NGZcdTA2NTBcdTA2NTFcdTA2NTJcdWZlZDdcdWZlZGJcdWZlZGZcdWY4ZmNcdWZlZjVcdWZlZjdc''@;'; put 'put ''dWZlZjlcdWZlZmJcdWZlZTNcdWZlZTdcdWZlZWNcdWZlZTlcdWZmZmQifSxpYm0xMDQ2OiJjcDEwNDYiLGNzaWJtMTA0NjoiY3AxMDQ2IixjcDExMjQ6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRc''@;'; put 'put ''eDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHUwNDAxXHUwNDAyXHUwNDkwXHUwNDA0XHUwNDA1XHUwNDA2XHUwNDA3XHUwNDA4XHUwNDA5XHUwNDBhXHUwNDBiXHUwNDBjXHhhZFx1MDQwZVx1MDQwZlx1''@;'; put 'put ''MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQy''@;'; put 'put ''Ylx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1''@;'; put 'put ''MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0ZFx1MDQ0ZVx1MDQ0Zlx1MjExNlx1MDQ1MVx1MDQ1Mlx1MDQ5MVx1MDQ1NFx1MDQ1NVx1MDQ1Nlx1MDQ1N1x1MDQ1OFx1MDQ1OVx1MDQ1YVx1MDQ1Ylx1MDQ1Y1x4YTdcdTA0NWVcdTA0NWYifSxpYm0xMTI0OiJjcDExMjQi''@;'; put 'put ''LGNzaWJtMTEyNDoiY3AxMTI0IixjcDExMjU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUw''@;'; put 'put ''NDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNl''@;'; put 'put ''XHUwNDNmXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVkXHUyNTVjXHUyNTViXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJjXHUyNTFjXHUyNTAwXHUyNTNjXHUyNTVlXHUyNTVmXHUyNTVhXHUyNTU0XHUy''@;'; put 'put ''NTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZjXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZiXHUyNTZhXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1''@;'; put 'put ''XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmXHUwNDAxXHUwNDUxXHUwNDkwXHUwNDkxXHUwNDA0XHUwNDU0XHUwNDA2XHUwNDU2XHUwNDA3XHUwNDU3XHhiN1x1MjIxYVx1MjExNlx4YTRcdTI1YTBceGEwIn0saWJtMTEyNToiY3Ax''@;'; put 'put ''MTI1Iixjc2libTExMjU6ImNwMTEyNSIsY3AxMTI5Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGZceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJc''@;'; put 'put ''eDljXHg5ZFx4OWVceDlmXHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdcdTAxNTNceGE5XHhhYVx4YWJceGFjXHhhZFx4YWVceGFmXHhiMFx4YjFceGIyXHhiM1x1MDE3OFx4YjVceGI2XHhiN1x1MDE1Mlx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZceGMwXHhjMVx4YzJcdTAx''@;'; put 'put ''MDJceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx1MDMwMFx4Y2RceGNlXHhjZlx1MDExMFx4ZDFcdTAzMDlceGQzXHhkNFx1MDFhMFx4ZDZceGQ3XHhkOFx4ZDlceGRhXHhkYlx4ZGNcdTAxYWZcdTAzMDNceGRmXHhlMFx4ZTFceGUyXHUwMTAzXHhlNFx4ZTVceGU2XHhlN1x4ZThc''@;'; put 'put ''eGU5XHhlYVx4ZWJcdTAzMDFceGVkXHhlZVx4ZWZcdTAxMTFceGYxXHUwMzIzXHhmM1x4ZjRcdTAxYTFceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHUwMWIwXHUyMGFiXHhmZiJ9LGlibTExMjk6ImNwMTEyOSIsY3NpYm0xMTI5OiJjcDExMjkiLGNwMTEzMzp7dHlwZToiX3NiY3MiLGNo''@;'; put 'put ''YXJzOiJceDgwXHg4MVx4ODJceDgzXHg4NFx4ODVceDg2XHg4N1x4ODhceDg5XHg4YVx4OGJceDhjXHg4ZFx4OGVceDhmXHg5MFx4OTFceDkyXHg5M1x4OTRceDk1XHg5Nlx4OTdceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTBlODFcdTBlODJcdTBlODRcdTBlODdcdTBl''@;'; put 'put ''ODhcdTBlYWFcdTBlOGFcdTBlOGRcdTBlOTRcdTBlOTVcdTBlOTZcdTBlOTdcdTBlOTlcdTBlOWFcdTBlOWJcdTBlOWNcdTBlOWRcdTBlOWVcdTBlOWZcdTBlYTFcdTBlYTJcdTBlYTNcdTBlYTVcdTBlYTdcdTBlYWJcdTBlYWRcdTBlYWVcdWZmZmRcdWZmZmRcdWZmZmRcdTBlYWZcdTBlYjBc''@;'; put 'put ''dTBlYjJcdTBlYjNcdTBlYjRcdTBlYjVcdTBlYjZcdTBlYjdcdTBlYjhcdTBlYjlcdTBlYmNcdTBlYjFcdTBlYmJcdTBlYmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlYzBcdTBlYzFcdTBlYzJcdTBlYzNcdTBlYzRcdTBlYzhcdTBlYzlcdTBlY2FcdTBlY2JcdTBlY2NcdTBlY2RcdTBlYzZcdWZm''@;'; put 'put ''ZmRcdTBlZGNcdTBlZGRcdTIwYWRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlZDBcdTBlZDFcdTBlZDJcdTBlZDNcdTBlZDRcdTBlZDVcdTBlZDZcdTBlZDdc''@;'; put 'put ''dTBlZDhcdTBlZDlcdWZmZmRcdWZmZmRceGEyXHhhY1x4YTZcdWZmZmQifSxpYm0xMTMzOiJjcDExMzMiLGNzaWJtMTEzMzoiY3AxMTMzIixjcDExNjE6e3R5cGU6Il9zYmNzIixjaGFyczoiXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHUwZTQ4XHUwZTAxXHUwZTAyXHUwZTAzXHUwZTA0''@;'; put 'put ''XHUwZTA1XHUwZTA2XHUwZTA3XHUwZTA4XHUwZTA5XHUwZTBhXHUwZTBiXHUwZTBjXHUwZTBkXHUwZTBlXHUwZTBmXHUwZTEwXHUwZTExXHUwZTEyXHUwZTEzXHUwZTE0XHUwZTE1XHUwZTE2XHUwZTE3XHUwZTE4XHUwZTE5XHUwZTFhXHUwZTFiXHUwZTFjXHUwZTFkXHUwZTFlXHUwZTFmXHUw''@;'; put 'put ''ZTIwXHUwZTIxXHUwZTIyXHUwZTIzXHUwZTI0XHUwZTI1XHUwZTI2XHUwZTI3XHUwZTI4XHUwZTI5XHUwZTJhXHUwZTJiXHUwZTJjXHUwZTJkXHUwZTJlXHUwZTJmXHUwZTMwXHUwZTMxXHUwZTMyXHUwZTMzXHUwZTM0XHUwZTM1XHUwZTM2XHUwZTM3XHUwZTM4XHUwZTM5XHUwZTNhXHUwZTQ5''@;'; put 'put ''XHUwZTRhXHUwZTRiXHUyMGFjXHUwZTNmXHUwZTQwXHUwZTQxXHUwZTQyXHUwZTQzXHUwZTQ0XHUwZTQ1XHUwZTQ2XHUwZTQ3XHUwZTQ4XHUwZTQ5XHUwZTRhXHUwZTRiXHUwZTRjXHUwZTRkXHUwZTRlXHUwZTRmXHUwZTUwXHUwZTUxXHUwZTUyXHUwZTUzXHUwZTU0XHUwZTU1XHUwZTU2XHUw''@;'; put 'put ''ZTU3XHUwZTU4XHUwZTU5XHUwZTVhXHUwZTViXHhhMlx4YWNceGE2XHhhMCJ9LGlibTExNjE6ImNwMTE2MSIsY3NpYm0xMTYxOiJjcDExNjEiLGNwMTE2Mjp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTIwYWNceDgxXHg4Mlx4ODNceDg0XHUyMDI2XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4''@;'; put 'put ''Y1x4OGRceDhlXHg4Zlx4OTBcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRceDk4XHg5OVx4OWFceDliXHg5Y1x4OWRceDllXHg5Zlx4YTBcdTBlMDFcdTBlMDJcdTBlMDNcdTBlMDRcdTBlMDVcdTBlMDZcdTBlMDdcdTBlMDhcdTBlMDlcdTBlMGFcdTBlMGJcdTBl''@;'; put 'put ''MGNcdTBlMGRcdTBlMGVcdTBlMGZcdTBlMTBcdTBlMTFcdTBlMTJcdTBlMTNcdTBlMTRcdTBlMTVcdTBlMTZcdTBlMTdcdTBlMThcdTBlMTlcdTBlMWFcdTBlMWJcdTBlMWNcdTBlMWRcdTBlMWVcdTBlMWZcdTBlMjBcdTBlMjFcdTBlMjJcdTBlMjNcdTBlMjRcdTBlMjVcdTBlMjZcdTBlMjdc''@;'; put 'put ''dTBlMjhcdTBlMjlcdTBlMmFcdTBlMmJcdTBlMmNcdTBlMmRcdTBlMmVcdTBlMmZcdTBlMzBcdTBlMzFcdTBlMzJcdTBlMzNcdTBlMzRcdTBlMzVcdTBlMzZcdTBlMzdcdTBlMzhcdTBlMzlcdTBlM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlM2ZcdTBlNDBcdTBlNDFcdTBlNDJcdTBl''@;'; put 'put ''NDNcdTBlNDRcdTBlNDVcdTBlNDZcdTBlNDdcdTBlNDhcdTBlNDlcdTBlNGFcdTBlNGJcdTBlNGNcdTBlNGRcdTBlNGVcdTBlNGZcdTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTlcdTBlNWFcdTBlNWJcdWZmZmRcdWZmZmRcdWZmZmRc''@;'; put 'put ''dWZmZmQifSxpYm0xMTYyOiJjcDExNjIiLGNzaWJtMTE2MjoiY3AxMTYyIixjcDExNjM6e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZc''@;'; put 'put ''eDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhhMVx4YTJceGEzXHUyMGFjXHhhNVx4YTZceGE3XHUwMTUzXHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNcdTAxNzhceGI1XHhiNlx4YjdcdTAxNTJceGI5XHhiYVx4YmJceGJjXHhiZFx4''@;'; put 'put ''YmVceGJmXHhjMFx4YzFceGMyXHUwMTAyXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JcdTAzMDBceGNkXHhjZVx4Y2ZcdTAxMTBceGQxXHUwMzA5XHhkM1x4ZDRcdTAxYTBceGQ2XHhkN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHUwMWFmXHUwMzAzXHhkZlx4ZTBceGUxXHhlMlx1MDEw''@;'; put 'put ''M1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHUwMzAxXHhlZFx4ZWVceGVmXHUwMTExXHhmMVx1MDMyM1x4ZjNceGY0XHUwMWExXHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x1MDFiMFx1MjBhYlx4ZmYifSxpYm0xMTYzOiJjcDExNjMiLGNzaWJtMTE2MzoiY3AxMTYzIixt''@;'; put 'put ''YWNjcm9hdGlhbjp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x1MjAy''@;'; put 'put ''MFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVcdTAxNjBcdTIxMjJceGI0XHhhOFx1MjI2MFx1MDE3ZFx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHUyMjA2XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDE2MVx1MjIyYlx4YWFceGJhXHUyMTI2XHUwMTdlXHhmOFx4YmZceGEx''@;'; put 'put ''XHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MDEwNlx4YWJcdTAxMGNcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUwMTUyXHUwMTUzXHUwMTEwXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx1ZmZmZFx4YTlcdTIwNDRceGE0XHUyMDM5XHUyMDNhXHhjNlx4YmJcdTIwMTNc''@;'; put 'put ''eGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx1MDEwN1x4YzFcdTAxMGRceGM4XHhjZFx4Y2VceGNmXHhjY1x4ZDNceGQ0XHUwMTExXHhkMlx4ZGFceGRiXHhkOVx1MDEzMVx1MDJjNlx1MDJkY1x4YWZcdTAzYzBceGNiXHUwMmRhXHhiOFx4Y2FceGU2XHUwMmM3In0sbWFjY3lyaWxsaWM6e3R5''@;'; put 'put ''cGU6Il9zYmNzIixjaGFyczoiXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUw''@;'; put 'put ''NDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZcdTA0MDZceGFlXHhhOVx1MjEyMlx1MDQwMlx1MDQ1Mlx1MjI2MFx1MDQwM1x1MDQ1M1x1MjIxZVx4YjFcdTIyNjRcdTIyNjVcdTA0NTZceGI1XHUyMjAy''@;'; put 'put ''XHUwNDA4XHUwNDA0XHUwNDU0XHUwNDA3XHUwNDU3XHUwNDA5XHUwNDU5XHUwNDBhXHUwNDVhXHUwNDU4XHUwNDA1XHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx1MDQwYlx1MDQ1Ylx1MDQwY1x1MDQ1Y1x1MDQ1NVx1MjAxM1x1MjAxNFx1MjAxY1x1MjAx''@;'; put 'put ''ZFx1MjAxOFx1MjAxOVx4ZjdcdTIwMWVcdTA0MGVcdTA0NWVcdTA0MGZcdTA0NWZcdTIxMTZcdTA0MDFcdTA0NTFcdTA0NGZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0''@;'; put 'put ''M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVceGE0In0sbWFjZ3JlZWs6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjNFx4YjlceGIyXHhjOVx4YjNceGQ2XHhkY1x1MDM4NVx4''@;'; put 'put ''ZTBceGUyXHhlNFx1MDM4NFx4YThceGU3XHhlOVx4ZThceGVhXHhlYlx4YTNcdTIxMjJceGVlXHhlZlx1MjAyMlx4YmRcdTIwMzBceGY0XHhmNlx4YTZceGFkXHhmOVx4ZmJceGZjXHUyMDIwXHUwMzkzXHUwMzk0XHUwMzk4XHUwMzliXHUwMzllXHUwM2EwXHhkZlx4YWVceGE5XHUwM2EzXHUw''@;'; put 'put ''M2FhXHhhN1x1MjI2MFx4YjBcdTAzODdcdTAzOTFceGIxXHUyMjY0XHUyMjY1XHhhNVx1MDM5Mlx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OVx1MDM5YVx1MDM5Y1x1MDNhNlx1MDNhYlx1MDNhOFx1MDNhOVx1MDNhY1x1MDM5ZFx4YWNcdTAzOWZcdTAzYTFcdTIyNDhcdTAzYTRceGFiXHhiYlx1''@;'; put 'put ''MjAyNlx4YTBcdTAzYTVcdTAzYTdcdTAzODZcdTAzODhcdTAxNTNcdTIwMTNcdTIwMTVcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUwMzg5XHUwMzhhXHUwMzhjXHUwMzhlXHUwM2FkXHUwM2FlXHUwM2FmXHUwM2NjXHUwMzhmXHUwM2NkXHUwM2IxXHUwM2IyXHUwM2M4XHUwM2I0XHUw''@;'; put 'put ''M2I1XHUwM2M2XHUwM2IzXHUwM2I3XHUwM2I5XHUwM2JlXHUwM2JhXHUwM2JiXHUwM2JjXHUwM2JkXHUwM2JmXHUwM2MwXHUwM2NlXHUwM2MxXHUwM2MzXHUwM2M0XHUwM2I4XHUwM2M5XHUwM2MyXHUwM2M3XHUwM2M1XHUwM2I2XHUwM2NhXHUwM2NiXHUwMzkwXHUwM2IwXHVmZmZkIn0sbWFj''@;'; put 'put ''aWNlbGFuZDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x4ZGRceGIw''@;'; put 'put ''XHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUyMjYwXHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIyMDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUw''@;'; put 'put ''MTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTIwNDRceGE0XHhkMFx4ZjBceGRlXHhmZVx4ZmRceGI3XHUyMDFhXHUyMDFlXHUyMDMw''@;'; put 'put ''XHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHUwMTMxXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzcifSxtYWNyb21hbjp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0''@;'; put 'put ''XHhjNVx4YzdceGM5XHhkMVx4ZDZceGRjXHhlMVx4ZTBceGUyXHhlNFx4ZTNceGU1XHhlN1x4ZTlceGU4XHhlYVx4ZWJceGVkXHhlY1x4ZWVceGVmXHhmMVx4ZjNceGYyXHhmNFx4ZjZceGY1XHhmYVx4ZjlceGZiXHhmY1x1MjAyMFx4YjBceGEyXHhhM1x4YTdcdTIwMjJceGI2XHhkZlx4YWVc''@;'; put 'put ''eGE5XHUyMTIyXHhiNFx4YThcdTIyNjBceGM2XHhkOFx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHhlNlx4ZjhceGJmXHhhMVx4YWNcdTIyMWFcdTAxOTJcdTIyNDhcdTIyMDZceGFiXHhiYlx1MjAyNlx4''@;'; put 'put ''YTBceGMwXHhjM1x4ZDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHhmZlx1MDE3OFx1MjA0NFx4YTRcdTIwMzlcdTIwM2FcdWZiMDFcdWZiMDJcdTIwMjFceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4Yzhc''@;'; put 'put ''eGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHUwMTMxXHUwMmM2XHUwMmRjXHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzcifSxtYWNyb21hbmlhOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRceGM1XHhjN1x4YzlceGQxXHhk''@;'; put 'put ''Nlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVjXHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1''@;'; put 'put ''MjI2MFx1MDEwMlx1MDE1ZVx1MjIxZVx4YjFcdTIyNjRcdTIyNjVceGE1XHhiNVx1MjIwMlx1MjIxMVx1MjIwZlx1MDNjMFx1MjIyYlx4YWFceGJhXHUyMTI2XHUwMTAzXHUwMTVmXHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNc''@;'; put 'put ''eGQ1XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhmN1x1MjVjYVx4ZmZcdTAxNzhcdTIwNDRceGE0XHUyMDM5XHUyMDNhXHUwMTYyXHUwMTYzXHUyMDIxXHhiN1x1MjAxYVx1MjAxZVx1MjAzMFx4YzJceGNhXHhjMVx4Y2JceGM4XHhjZFx4Y2VceGNm''@;'; put 'put ''XHhjY1x4ZDNceGQ0XHVmZmZkXHhkMlx4ZGFceGRiXHhkOVx1MDEzMVx1MDJjNlx1MDJkY1x4YWZcdTAyZDhcdTAyZDlcdTAyZGFceGI4XHUwMmRkXHUwMmRiXHUwMmM3In0sbWFjdGhhaTp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGFiXHhiYlx1MjAyNlx1Zjg4Y1x1Zjg4Zlx1Zjg5Mlx1Zjg5''@;'; put 'put ''NVx1Zjg5OFx1Zjg4Ylx1Zjg4ZVx1Zjg5MVx1Zjg5NFx1Zjg5N1x1MjAxY1x1MjAxZFx1Zjg5OVx1ZmZmZFx1MjAyMlx1Zjg4NFx1Zjg4OVx1Zjg4NVx1Zjg4Nlx1Zjg4N1x1Zjg4OFx1Zjg4YVx1Zjg4ZFx1Zjg5MFx1Zjg5M1x1Zjg5Nlx1MjAxOFx1MjAxOVx1ZmZmZFx4YTBcdTBlMDFcdTBl''@;'; put 'put ''MDJcdTBlMDNcdTBlMDRcdTBlMDVcdTBlMDZcdTBlMDdcdTBlMDhcdTBlMDlcdTBlMGFcdTBlMGJcdTBlMGNcdTBlMGRcdTBlMGVcdTBlMGZcdTBlMTBcdTBlMTFcdTBlMTJcdTBlMTNcdTBlMTRcdTBlMTVcdTBlMTZcdTBlMTdcdTBlMThcdTBlMTlcdTBlMWFcdTBlMWJcdTBlMWNcdTBlMWRc''@;'; put 'put ''dTBlMWVcdTBlMWZcdTBlMjBcdTBlMjFcdTBlMjJcdTBlMjNcdTBlMjRcdTBlMjVcdTBlMjZcdTBlMjdcdTBlMjhcdTBlMjlcdTBlMmFcdTBlMmJcdTBlMmNcdTBlMmRcdTBlMmVcdTBlMmZcdTBlMzBcdTBlMzFcdTBlMzJcdTBlMzNcdTBlMzRcdTBlMzVcdTBlMzZcdTBlMzdcdTBlMzhcdTBl''@;'; put 'put ''MzlcdTBlM2FcdWZlZmZcdTIwMGJcdTIwMTNcdTIwMTRcdTBlM2ZcdTBlNDBcdTBlNDFcdTBlNDJcdTBlNDNcdTBlNDRcdTBlNDVcdTBlNDZcdTBlNDdcdTBlNDhcdTBlNDlcdTBlNGFcdTBlNGJcdTBlNGNcdTBlNGRcdTIxMjJcdTBlNGZcdTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRc''@;'; put 'put ''dTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTlceGFlXHhhOVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZCJ9LG1hY3R1cmtpc2g6e3R5cGU6Il9zYmNzIixjaGFyczoiXHhjNFx4YzVceGM3XHhjOVx4ZDFceGQ2XHhkY1x4ZTFceGUwXHhlMlx4ZTRceGUzXHhlNVx4ZTdceGU5XHhlOFx4ZWFc''@;'; put 'put ''eGViXHhlZFx4ZWNceGVlXHhlZlx4ZjFceGYzXHhmMlx4ZjRceGY2XHhmNVx4ZmFceGY5XHhmYlx4ZmNcdTIwMjBceGIwXHhhMlx4YTNceGE3XHUyMDIyXHhiNlx4ZGZceGFlXHhhOVx1MjEyMlx4YjRceGE4XHUyMjYwXHhjNlx4ZDhcdTIyMWVceGIxXHUyMjY0XHUyMjY1XHhhNVx4YjVcdTIy''@;'; put 'put ''MDJcdTIyMTFcdTIyMGZcdTAzYzBcdTIyMmJceGFhXHhiYVx1MjEyNlx4ZTZceGY4XHhiZlx4YTFceGFjXHUyMjFhXHUwMTkyXHUyMjQ4XHUyMjA2XHhhYlx4YmJcdTIwMjZceGEwXHhjMFx4YzNceGQ1XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFjXHUyMDFkXHUyMDE4XHUyMDE5XHhm''@;'; put 'put ''N1x1MjVjYVx4ZmZcdTAxNzhcdTAxMWVcdTAxMWZcdTAxMzBcdTAxMzFcdTAxNWVcdTAxNWZcdTIwMjFceGI3XHUyMDFhXHUyMDFlXHUyMDMwXHhjMlx4Y2FceGMxXHhjYlx4YzhceGNkXHhjZVx4Y2ZceGNjXHhkM1x4ZDRcdWZmZmRceGQyXHhkYVx4ZGJceGQ5XHVmZmZkXHUwMmM2XHUwMmRj''@;'; put 'put ''XHhhZlx1MDJkOFx1MDJkOVx1MDJkYVx4YjhcdTAyZGRcdTAyZGJcdTAyYzcifSxtYWN1a3JhaW5lOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1''@;'; put 'put ''MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MjAyMFx4YjBcdTA0OTBceGEzXHhhN1x1MjAyMlx4YjZcdTA0MDZceGFlXHhhOVx1MjEyMlx1MDQw''@;'; put 'put ''Mlx1MDQ1Mlx1MjI2MFx1MDQwM1x1MDQ1M1x1MjIxZVx4YjFcdTIyNjRcdTIyNjVcdTA0NTZceGI1XHUwNDkxXHUwNDA4XHUwNDA0XHUwNDU0XHUwNDA3XHUwNDU3XHUwNDA5XHUwNDU5XHUwNDBhXHUwNDVhXHUwNDU4XHUwNDA1XHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJi''@;'; put 'put ''XHUyMDI2XHhhMFx1MDQwYlx1MDQ1Ylx1MDQwY1x1MDQ1Y1x1MDQ1NVx1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTIwMWVcdTA0MGVcdTA0NWVcdTA0MGZcdTA0NWZcdTIxMTZcdTA0MDFcdTA0NTFcdTA0NGZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRc''@;'; put 'put ''dTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVceGE0In0sa29p''@;'; put 'put ''OHI6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyNTAwXHUyNTAyXHUyNTBjXHUyNTEwXHUyNTE0XHUyNTE4XHUyNTFjXHUyNTI0XHUyNTJjXHUyNTM0XHUyNTNjXHUyNTgwXHUyNTg0XHUyNTg4XHUyNThjXHUyNTkwXHUyNTkxXHUyNTkyXHUyNTkzXHUyMzIwXHUyNWEwXHUyMjE5XHUyMjFhXHUy''@;'; put 'put ''MjQ4XHUyMjY0XHUyMjY1XHhhMFx1MjMyMVx4YjBceGIyXHhiN1x4ZjdcdTI1NTBcdTI1NTFcdTI1NTJcdTA0NTFcdTI1NTNcdTI1NTRcdTI1NTVcdTI1NTZcdTI1NTdcdTI1NThcdTI1NTlcdTI1NWFcdTI1NWJcdTI1NWNcdTI1NWRcdTI1NWVcdTI1NWZcdTI1NjBcdTI1NjFcdTA0MDFcdTI1''@;'; put 'put ''NjJcdTI1NjNcdTI1NjRcdTI1NjVcdTI1NjZcdTI1NjdcdTI1NjhcdTI1NjlcdTI1NmFcdTI1NmJcdTI1NmNceGE5XHUwNDRlXHUwNDMwXHUwNDMxXHUwNDQ2XHUwNDM0XHUwNDM1XHUwNDQ0XHUwNDMzXHUwNDQ1XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUw''@;'; put 'put ''NDNmXHUwNDRmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDM2XHUwNDMyXHUwNDRjXHUwNDRiXHUwNDM3XHUwNDQ4XHUwNDRkXHUwNDQ5XHUwNDQ3XHUwNDRhXHUwNDJlXHUwNDEwXHUwNDExXHUwNDI2XHUwNDE0XHUwNDE1XHUwNDI0XHUwNDEzXHUwNDI1XHUwNDE4XHUwNDE5XHUwNDFh''@;'; put 'put ''XHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDJmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDE2XHUwNDEyXHUwNDJjXHUwNDJiXHUwNDE3XHUwNDI4XHUwNDJkXHUwNDI5XHUwNDI3XHUwNDJhIn0sa29pOHU6e3R5cGU6Il9zYmNzIixjaGFyczoiXHUyNTAwXHUyNTAyXHUy''@;'; put 'put ''NTBjXHUyNTEwXHUyNTE0XHUyNTE4XHUyNTFjXHUyNTI0XHUyNTJjXHUyNTM0XHUyNTNjXHUyNTgwXHUyNTg0XHUyNTg4XHUyNThjXHUyNTkwXHUyNTkxXHUyNTkyXHUyNTkzXHUyMzIwXHUyNWEwXHUyMjE5XHUyMjFhXHUyMjQ4XHUyMjY0XHUyMjY1XHhhMFx1MjMyMVx4YjBceGIyXHhiN1x4''@;'; put 'put ''ZjdcdTI1NTBcdTI1NTFcdTI1NTJcdTA0NTFcdTA0NTRcdTI1NTRcdTA0NTZcdTA0NTdcdTI1NTdcdTI1NThcdTI1NTlcdTI1NWFcdTI1NWJcdTA0OTFcdTI1NWRcdTI1NWVcdTI1NWZcdTI1NjBcdTI1NjFcdTA0MDFcdTA0MDRcdTI1NjNcdTA0MDZcdTA0MDdcdTI1NjZcdTI1NjdcdTI1Njhc''@;'; put 'put ''dTI1NjlcdTI1NmFcdTA0OTBcdTI1NmNceGE5XHUwNDRlXHUwNDMwXHUwNDMxXHUwNDQ2XHUwNDM0XHUwNDM1XHUwNDQ0XHUwNDMzXHUwNDQ1XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDRmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDM2''@;'; put 'put ''XHUwNDMyXHUwNDRjXHUwNDRiXHUwNDM3XHUwNDQ4XHUwNDRkXHUwNDQ5XHUwNDQ3XHUwNDRhXHUwNDJlXHUwNDEwXHUwNDExXHUwNDI2XHUwNDE0XHUwNDE1XHUwNDI0XHUwNDEzXHUwNDI1XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDJmXHUw''@;'; put 'put ''NDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDE2XHUwNDEyXHUwNDJjXHUwNDJiXHUwNDE3XHUwNDI4XHUwNDJkXHUwNDI5XHUwNDI3XHUwNDJhIn0sa29pOHJ1Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxNFx1MjUxOFx1MjUxY1x1MjUyNFx1MjUy''@;'; put 'put ''Y1x1MjUzNFx1MjUzY1x1MjU4MFx1MjU4NFx1MjU4OFx1MjU4Y1x1MjU5MFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjMyMFx1MjVhMFx1MjIxOVx1MjIxYVx1MjI0OFx1MjI2NFx1MjI2NVx4YTBcdTIzMjFceGIwXHhiMlx4YjdceGY3XHUyNTUwXHUyNTUxXHUyNTUyXHUwNDUxXHUwNDU0XHUyNTU0''@;'; put 'put ''XHUwNDU2XHUwNDU3XHUyNTU3XHUyNTU4XHUyNTU5XHUyNTVhXHUyNTViXHUwNDkxXHUwNDVlXHUyNTVlXHUyNTVmXHUyNTYwXHUyNTYxXHUwNDAxXHUwNDA0XHUyNTYzXHUwNDA2XHUwNDA3XHUyNTY2XHUyNTY3XHUyNTY4XHUyNTY5XHUyNTZhXHUwNDkwXHUwNDBlXHhhOVx1MDQ0ZVx1MDQz''@;'; put 'put ''MFx1MDQzMVx1MDQ0Nlx1MDQzNFx1MDQzNVx1MDQ0NFx1MDQzM1x1MDQ0NVx1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MDQ0Zlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzNlx1MDQzMlx1MDQ0Y1x1MDQ0Ylx1MDQzN1x1MDQ0OFx1MDQ0ZFx1''@;'; put 'put ''MDQ0OVx1MDQ0N1x1MDQ0YVx1MDQyZVx1MDQxMFx1MDQxMVx1MDQyNlx1MDQxNFx1MDQxNVx1MDQyNFx1MDQxM1x1MDQyNVx1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQxNlx1MDQxMlx1MDQy''@;'; put 'put ''Y1x1MDQyYlx1MDQxN1x1MDQyOFx1MDQyZFx1MDQyOVx1MDQyN1x1MDQyYSJ9LGtvaTh0Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1MDQ5Ylx1MDQ5M1x1MjAxYVx1MDQ5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1ZmZmZFx1MjAzMFx1MDRiM1x1MjAzOVx1MDRiMlx1MDRiN1x1MDRiNlx1''@;'; put 'put ''ZmZmZFx1MDQ5YVx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1ZmZmZFx1MjEyMlx1ZmZmZFx1MjAzYVx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1MDRlZlx1MDRlZVx1MDQ1MVx4YTRcdTA0ZTNceGE2XHhhN1x1ZmZmZFx1ZmZmZFx1ZmZmZFx4YWJc''@;'; put 'put ''eGFjXHhhZFx4YWVcdWZmZmRceGIwXHhiMVx4YjJcdTA0MDFcdWZmZmRcdTA0ZTJceGI2XHhiN1x1ZmZmZFx1MjExNlx1ZmZmZFx4YmJcdWZmZmRcdWZmZmRcdWZmZmRceGE5XHUwNDRlXHUwNDMwXHUwNDMxXHUwNDQ2XHUwNDM0XHUwNDM1XHUwNDQ0XHUwNDMzXHUwNDQ1XHUwNDM4XHUwNDM5''@;'; put 'put ''XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUwNDNlXHUwNDNmXHUwNDRmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDM2XHUwNDMyXHUwNDRjXHUwNDRiXHUwNDM3XHUwNDQ4XHUwNDRkXHUwNDQ5XHUwNDQ3XHUwNDRhXHUwNDJlXHUwNDEwXHUwNDExXHUwNDI2XHUwNDE0XHUwNDE1XHUw''@;'; put 'put ''NDI0XHUwNDEzXHUwNDI1XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDJmXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDE2XHUwNDEyXHUwNDJjXHUwNDJiXHUwNDE3XHUwNDI4XHUwNDJkXHUwNDI5XHUwNDI3XHUwNDJhIn0sYXJtc2NpaTg6''@;'; put 'put ''e3R5cGU6Il9zYmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHVmZmZkXHUwNTg3''@;'; put 'put ''XHUwNTg5KShceGJiXHhhYlx1MjAxNC5cdTA1NWQsLVx1MDU4YVx1MjAyNlx1MDU1Y1x1MDU1Ylx1MDU1ZVx1MDUzMVx1MDU2MVx1MDUzMlx1MDU2Mlx1MDUzM1x1MDU2M1x1MDUzNFx1MDU2NFx1MDUzNVx1MDU2NVx1MDUzNlx1MDU2Nlx1MDUzN1x1MDU2N1x1MDUzOFx1MDU2OFx1MDUzOVx1''@;'; put 'put ''MDU2OVx1MDUzYVx1MDU2YVx1MDUzYlx1MDU2Ylx1MDUzY1x1MDU2Y1x1MDUzZFx1MDU2ZFx1MDUzZVx1MDU2ZVx1MDUzZlx1MDU2Zlx1MDU0MFx1MDU3MFx1MDU0MVx1MDU3MVx1MDU0Mlx1MDU3Mlx1MDU0M1x1MDU3M1x1MDU0NFx1MDU3NFx1MDU0NVx1MDU3NVx1MDU0Nlx1MDU3Nlx1MDU0''@;'; put 'put ''N1x1MDU3N1x1MDU0OFx1MDU3OFx1MDU0OVx1MDU3OVx1MDU0YVx1MDU3YVx1MDU0Ylx1MDU3Ylx1MDU0Y1x1MDU3Y1x1MDU0ZFx1MDU3ZFx1MDU0ZVx1MDU3ZVx1MDU0Zlx1MDU3Zlx1MDU1MFx1MDU4MFx1MDU1MVx1MDU4MVx1MDU1Mlx1MDU4Mlx1MDU1M1x1MDU4M1x1MDU1NFx1MDU4NFx1''@;'; put 'put ''MDU1NVx1MDU4NVx1MDU1Nlx1MDU4Nlx1MDU1YVx1ZmZmZCJ9LHJrMTA0ODp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0MDJcdTA0MDNcdTIwMWFcdTA0NTNcdTIwMWVcdTIwMjZcdTIwMjBcdTIwMjFcdTIwYWNcdTIwMzBcdTA0MDlcdTIwMzlcdTA0MGFcdTA0OWFcdTA0YmFcdTA0MGZcdTA0''@;'; put 'put ''NTJcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdWZmZmRcdTIxMjJcdTA0NTlcdTIwM2FcdTA0NWFcdTA0OWJcdTA0YmJcdTA0NWZceGEwXHUwNGIwXHUwNGIxXHUwNGQ4XHhhNFx1MDRlOFx4YTZceGE3XHUwNDAxXHhhOVx1MDQ5Mlx4YWJceGFjXHhhZFx4YWVc''@;'; put 'put ''dTA0YWVceGIwXHhiMVx1MDQwNlx1MDQ1Nlx1MDRlOVx4YjVceGI2XHhiN1x1MDQ1MVx1MjExNlx1MDQ5M1x4YmJcdTA0ZDlcdTA0YTJcdTA0YTNcdTA0YWZcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0''@;'; put 'put ''MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0Mzdc''@;'; put 'put ''dTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0NGNcdTA0NGRcdTA0NGVcdTA0NGYifSx0Y3ZuOnt0eXBlOiJfc2JjcyIs''@;'; put 'put ''Y2hhcnM6IlwwXHhkYVx1MWVlNFx4MDNcdTFlZWFcdTFlZWNcdTFlZWVceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHUxZWU4XHUxZWYwXHUxZWYyXHUxZWY2XHUxZWY4XHhkZFx1MWVmNFx4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2''@;'; put 'put ''Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx4N2ZceGMwXHUxZWEyXHhjM1x4YzFcdTFlYTBcdTFlYjZcdTFlYWNceGM4XHUxZWJhXHUxZWJjXHhjOVx1MWViOFx1MWVjNlx4Y2NcdTFlYzhcdTAxMjhceGNk''@;'; put 'put ''XHUxZWNhXHhkMlx1MWVjZVx4ZDVceGQzXHUxZWNjXHUxZWQ4XHUxZWRjXHUxZWRlXHUxZWUwXHUxZWRhXHUxZWUyXHhkOVx1MWVlNlx1MDE2OFx4YTBcdTAxMDJceGMyXHhjYVx4ZDRcdTAxYTBcdTAxYWZcdTAxMTBcdTAxMDNceGUyXHhlYVx4ZjRcdTAxYTFcdTAxYjBcdTAxMTFcdTFlYjBc''@;'; put 'put ''dTAzMDBcdTAzMDlcdTAzMDNcdTAzMDFcdTAzMjNceGUwXHUxZWEzXHhlM1x4ZTFcdTFlYTFcdTFlYjJcdTFlYjFcdTFlYjNcdTFlYjVcdTFlYWZcdTFlYjRcdTFlYWVcdTFlYTZcdTFlYThcdTFlYWFcdTFlYTRcdTFlYzBcdTFlYjdcdTFlYTdcdTFlYTlcdTFlYWJcdTFlYTVcdTFlYWRceGU4''@;'; put 'put ''XHUxZWMyXHUxZWJiXHUxZWJkXHhlOVx1MWViOVx1MWVjMVx1MWVjM1x1MWVjNVx1MWViZlx1MWVjN1x4ZWNcdTFlYzlcdTFlYzRcdTFlYmVcdTFlZDJcdTAxMjlceGVkXHUxZWNiXHhmMlx1MWVkNFx1MWVjZlx4ZjVceGYzXHUxZWNkXHUxZWQzXHUxZWQ1XHUxZWQ3XHUxZWQxXHUxZWQ5XHUx''@;'; put 'put ''ZWRkXHUxZWRmXHUxZWUxXHUxZWRiXHUxZWUzXHhmOVx1MWVkNlx1MWVlN1x1MDE2OVx4ZmFcdTFlZTVcdTFlZWJcdTFlZWRcdTFlZWZcdTFlZTlcdTFlZjFcdTFlZjNcdTFlZjdcdTFlZjlceGZkXHUxZWY1XHUxZWQwIn0sZ2VvcmdpYW5hY2FkZW15Ont0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4''@;'; put 'put ''ODBceDgxXHUyMDFhXHUwMTkyXHUyMDFlXHUyMDI2XHUyMDIwXHUyMDIxXHUwMmM2XHUyMDMwXHUwMTYwXHUyMDM5XHUwMTUyXHg4ZFx4OGVceDhmXHg5MFx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJkY1x1MjEyMlx1MDE2MVx1MjAzYVx1MDE1M1x4OWRc''@;'; put 'put ''eDllXHUwMTc4XHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmZcdTEwZDBcdTEwZDFcdTEwZDJcdTEwZDNcdTEw''@;'; put 'put ''ZDRcdTEwZDVcdTEwZDZcdTEwZDdcdTEwZDhcdTEwZDlcdTEwZGFcdTEwZGJcdTEwZGNcdTEwZGRcdTEwZGVcdTEwZGZcdTEwZTBcdTEwZTFcdTEwZTJcdTEwZTNcdTEwZTRcdTEwZTVcdTEwZTZcdTEwZTdcdTEwZThcdTEwZTlcdTEwZWFcdTEwZWJcdTEwZWNcdTEwZWRcdTEwZWVcdTEwZWZc''@;'; put 'put ''dTEwZjBcdTEwZjFcdTEwZjJcdTEwZjNcdTEwZjRcdTEwZjVcdTEwZjZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWZceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx4ZmVceGZmIn0sZ2VvcmdpYW5wczp7dHlwZToiX3Ni''@;'; put 'put ''Y3MiLGNoYXJzOiJceDgwXHg4MVx1MjAxYVx1MDE5Mlx1MjAxZVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJjNlx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1Mlx4OGRceDhlXHg4Zlx4OTBcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTAyZGNcdTIxMjJcdTAxNjFcdTIw''@;'; put 'put ''M2FcdTAxNTNceDlkXHg5ZVx1MDE3OFx4YTBceGExXHhhMlx4YTNceGE0XHhhNVx4YTZceGE3XHhhOFx4YTlceGFhXHhhYlx4YWNceGFkXHhhZVx4YWZceGIwXHhiMVx4YjJceGIzXHhiNFx4YjVceGI2XHhiN1x4YjhceGI5XHhiYVx4YmJceGJjXHhiZFx4YmVceGJmXHUxMGQwXHUxMGQxXHUx''@;'; put 'put ''MGQyXHUxMGQzXHUxMGQ0XHUxMGQ1XHUxMGQ2XHUxMGYxXHUxMGQ3XHUxMGQ4XHUxMGQ5XHUxMGRhXHUxMGRiXHUxMGRjXHUxMGYyXHUxMGRkXHUxMGRlXHUxMGRmXHUxMGUwXHUxMGUxXHUxMGUyXHUxMGYzXHUxMGUzXHUxMGU0XHUxMGU1XHUxMGU2XHUxMGU3XHUxMGU4XHUxMGU5XHUxMGVh''@;'; put 'put ''XHUxMGViXHUxMGVjXHUxMGVkXHUxMGVlXHUxMGY0XHUxMGVmXHUxMGYwXHUxMGY1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZlx4ZjBceGYxXHhmMlx4ZjNceGY0XHhmNVx4ZjZceGY3XHhmOFx4ZjlceGZhXHhmYlx4ZmNceGZkXHhmZVx4ZmYifSxwdDE1NDp7dHlw''@;'; put 'put ''ZToiX3NiY3MiLGNoYXJzOiJcdTA0OTZcdTA0OTJcdTA0ZWVcdTA0OTNcdTIwMWVcdTIwMjZcdTA0YjZcdTA0YWVcdTA0YjJcdTA0YWZcdTA0YTBcdTA0ZTJcdTA0YTJcdTA0OWFcdTA0YmFcdTA0YjhcdTA0OTdcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdTIwMjJcdTIwMTNcdTIwMTRcdTA0''@;'; put 'put ''YjNcdTA0YjdcdTA0YTFcdTA0ZTNcdTA0YTNcdTA0OWJcdTA0YmJcdTA0YjlceGEwXHUwNDBlXHUwNDVlXHUwNDA4XHUwNGU4XHUwNDk4XHUwNGIwXHhhN1x1MDQwMVx4YTlcdTA0ZDhceGFiXHhhY1x1MDRlZlx4YWVcdTA0OWNceGIwXHUwNGIxXHUwNDA2XHUwNDU2XHUwNDk5XHUwNGU5XHhi''@;'; put 'put ''Nlx4YjdcdTA0NTFcdTIxMTZcdTA0ZDlceGJiXHUwNDU4XHUwNGFhXHUwNGFiXHUwNDlkXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFhXHUwNDFiXHUwNDFjXHUwNDFkXHUwNDFlXHUwNDFmXHUwNDIwXHUwNDIxXHUwNDIy''@;'; put 'put ''XHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJhXHUwNDJiXHUwNDJjXHUwNDJkXHUwNDJlXHUwNDJmXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNhXHUwNDNiXHUwNDNjXHUwNDNkXHUw''@;'; put 'put ''NDNlXHUwNDNmXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRhXHUwNDRiXHUwNDRjXHUwNDRkXHUwNDRlXHUwNDRmIn0sdmlzY2lpOnt0eXBlOiJfc2JjcyIsY2hhcnM6IlwwXHgwMVx1MWViMlx4MDNceDA0XHUxZWI0XHUx''@;'; put 'put ''ZWFhXHgwN1xiXHRcblx2XGZcclx4MGVceDBmXHgxMFx4MTFceDEyXHgxM1x1MWVmNlx4MTVceDE2XHgxN1x4MThcdTFlZjhceDFhXHgxYlx4MWNceDFkXHUxZWY0XHgxZiAhXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eX2Bh''@;'; put 'put ''YmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5ceDdmXHUxZWEwXHUxZWFlXHUxZWIwXHUxZWI2XHUxZWE0XHUxZWE2XHUxZWE4XHUxZWFjXHUxZWJjXHUxZWI4XHUxZWJlXHUxZWMwXHUxZWMyXHUxZWM0XHUxZWM2XHUxZWQwXHUxZWQyXHUxZWQ0XHUxZWQ2XHUxZWQ4XHUxZWUyXHUxZWRh''@;'; put 'put ''XHUxZWRjXHUxZWRlXHUxZWNhXHUxZWNlXHUxZWNjXHUxZWM4XHUxZWU2XHUwMTY4XHUxZWU0XHUxZWYyXHhkNVx1MWVhZlx1MWViMVx1MWViN1x1MWVhNVx1MWVhN1x1MWVhOVx1MWVhZFx1MWViZFx1MWViOVx1MWViZlx1MWVjMVx1MWVjM1x1MWVjNVx1MWVjN1x1MWVkMVx1MWVkM1x1MWVk''@;'; put 'put ''NVx1MWVkN1x1MWVlMFx1MDFhMFx1MWVkOVx1MWVkZFx1MWVkZlx1MWVjYlx1MWVmMFx1MWVlOFx1MWVlYVx1MWVlY1x1MDFhMVx1MWVkYlx1MDFhZlx4YzBceGMxXHhjMlx4YzNcdTFlYTJcdTAxMDJcdTFlYjNcdTFlYjVceGM4XHhjOVx4Y2FcdTFlYmFceGNjXHhjZFx1MDEyOFx1MWVmM1x1''@;'; put 'put ''MDExMFx1MWVlOVx4ZDJceGQzXHhkNFx1MWVhMVx1MWVmN1x1MWVlYlx1MWVlZFx4ZDlceGRhXHUxZWY5XHUxZWY1XHhkZFx1MWVlMVx1MDFiMFx4ZTBceGUxXHhlMlx4ZTNcdTFlYTNcdTAxMDNcdTFlZWZcdTFlYWJceGU4XHhlOVx4ZWFcdTFlYmJceGVjXHhlZFx1MDEyOVx1MWVjOVx1MDEx''@;'; put 'put ''MVx1MWVmMVx4ZjJceGYzXHhmNFx4ZjVcdTFlY2ZcdTFlY2RcdTFlZTVceGY5XHhmYVx1MDE2OVx1MWVlN1x4ZmRcdTFlZTNcdTFlZWUifSxpc282NDZjbjp7dHlwZToiX3NiY3MiLGNoYXJzOiJcMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdcYlx0XG5cdlxmXHJceDBlXHgwZlx4MTBc''@;'; put 'put ''eDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWYgIVwiI1x4YTUlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1cdTIwM2Vc''@;'; put 'put ''eDdmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn0saXNvNjQ2anA6e3R5cGU6Il9zYmNzIixjaGFyczoiXDBceDAxXHgwMlx4MDNceDA0XHgw''@;'; put 'put ''NVx4MDZceDA3XGJcdFxuXHZcZlxyXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmICFcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1x4YTVdXl9gYWJj''@;'; put 'put ''ZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1cdTIwM2VceDdmXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVm''@;'; put 'put ''ZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZk''@;'; put 'put ''XHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkXHVmZmZkIn0saHByb21hbjg6e3R5cGU6Il9z''@;'; put 'put ''YmNzIixjaGFyczoiXHg4MFx4ODFceDgyXHg4M1x4ODRceDg1XHg4Nlx4ODdceDg4XHg4OVx4OGFceDhiXHg4Y1x4OGRceDhlXHg4Zlx4OTBceDkxXHg5Mlx4OTNceDk0XHg5NVx4OTZceDk3XHg5OFx4OTlceDlhXHg5Ylx4OWNceDlkXHg5ZVx4OWZceGEwXHhjMFx4YzJceGM4XHhjYVx4Y2Jc''@;'; put 'put ''eGNlXHhjZlx4YjRcdTAyY2JcdTAyYzZceGE4XHUwMmRjXHhkOVx4ZGJcdTIwYTRceGFmXHhkZFx4ZmRceGIwXHhjN1x4ZTdceGQxXHhmMVx4YTFceGJmXHhhNFx4YTNceGE1XHhhN1x1MDE5Mlx4YTJceGUyXHhlYVx4ZjRceGZiXHhlMVx4ZTlceGYzXHhmYVx4ZTBceGU4XHhmMlx4ZjlceGU0''@;'; put 'put ''XHhlYlx4ZjZceGZjXHhjNVx4ZWVceGQ4XHhjNlx4ZTVceGVkXHhmOFx4ZTZceGM0XHhlY1x4ZDZceGRjXHhjOVx4ZWZceGRmXHhkNFx4YzFceGMzXHhlM1x4ZDBceGYwXHhjZFx4Y2NceGQzXHhkMlx4ZDVceGY1XHUwMTYwXHUwMTYxXHhkYVx1MDE3OFx4ZmZceGRlXHhmZVx4YjdceGI1XHhi''@;'; put 'put ''Nlx4YmVcdTIwMTRceGJjXHhiZFx4YWFceGJhXHhhYlx1MjVhMFx4YmJceGIxXHVmZmZkIn0sbWFjaW50b3NoOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx4YzRceGM1XHhjN1x4YzlceGQxXHhkNlx4ZGNceGUxXHhlMFx4ZTJceGU0XHhlM1x4ZTVceGU3XHhlOVx4ZThceGVhXHhlYlx4ZWRceGVj''@;'; put 'put ''XHhlZVx4ZWZceGYxXHhmM1x4ZjJceGY0XHhmNlx4ZjVceGZhXHhmOVx4ZmJceGZjXHUyMDIwXHhiMFx4YTJceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJceGI0XHhhOFx1MjI2MFx4YzZceGQ4XHUyMjFlXHhiMVx1MjI2NFx1MjI2NVx4YTVceGI1XHUyMjAyXHUyMjExXHUy''@;'; put 'put ''MjBmXHUwM2MwXHUyMjJiXHhhYVx4YmFcdTIxMjZceGU2XHhmOFx4YmZceGExXHhhY1x1MjIxYVx1MDE5Mlx1MjI0OFx1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx4YzBceGMzXHhkNVx1MDE1Mlx1MDE1M1x1MjAxM1x1MjAxNFx1MjAxY1x1MjAxZFx1MjAxOFx1MjAxOVx4ZjdcdTI1Y2FceGZm''@;'; put 'put ''XHUwMTc4XHUyMDQ0XHhhNFx1MjAzOVx1MjAzYVx1ZmIwMVx1ZmIwMlx1MjAyMVx4YjdcdTIwMWFcdTIwMWVcdTIwMzBceGMyXHhjYVx4YzFceGNiXHhjOFx4Y2RceGNlXHhjZlx4Y2NceGQzXHhkNFx1ZmZmZFx4ZDJceGRhXHhkYlx4ZDlcdTAxMzFcdTAyYzZcdTAyZGNceGFmXHUwMmQ4XHUw''@;'; put 'put ''MmQ5XHUwMmRhXHhiOFx1MDJkZFx1MDJkYlx1MDJjNyJ9LGFzY2lpOnt0eXBlOiJfc2JjcyIsY2hhcnM6Ilx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZm''@;'; put 'put ''ZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1ZmZmZFx1''@;'; put 'put ''ZmZmZCJ9LHRpczYyMDp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZm''@;'; put 'put ''ZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlMDFcdTBlMDJcdTBlMDNcdTBlMDRcdTBlMDVcdTBlMDZcdTBlMDdcdTBlMDhcdTBlMDlcdTBlMGFcdTBlMGJcdTBlMGNcdTBlMGRcdTBlMGVcdTBlMGZcdTBlMTBc''@;'; put 'put ''dTBlMTFcdTBlMTJcdTBlMTNcdTBlMTRcdTBlMTVcdTBlMTZcdTBlMTdcdTBlMThcdTBlMTlcdTBlMWFcdTBlMWJcdTBlMWNcdTBlMWRcdTBlMWVcdTBlMWZcdTBlMjBcdTBlMjFcdTBlMjJcdTBlMjNcdTBlMjRcdTBlMjVcdTBlMjZcdTBlMjdcdTBlMjhcdTBlMjlcdTBlMmFcdTBlMmJcdTBl''@;'; put 'put ''MmNcdTBlMmRcdTBlMmVcdTBlMmZcdTBlMzBcdTBlMzFcdTBlMzJcdTBlMzNcdTBlMzRcdTBlMzVcdTBlMzZcdTBlMzdcdTBlMzhcdTBlMzlcdTBlM2FcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmRcdTBlM2ZcdTBlNDBcdTBlNDFcdTBlNDJcdTBlNDNcdTBlNDRcdTBlNDVcdTBlNDZcdTBlNDdc''@;'; put 'put ''dTBlNDhcdTBlNDlcdTBlNGFcdTBlNGJcdTBlNGNcdTBlNGRcdTBlNGVcdTBlNGZcdTBlNTBcdTBlNTFcdTBlNTJcdTBlNTNcdTBlNTRcdTBlNTVcdTBlNTZcdTBlNTdcdTBlNThcdTBlNTlcdTBlNWFcdTBlNWJcdWZmZmRcdWZmZmRcdWZmZmRcdWZmZmQifX19LDc2MjM6dWU9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dWUuZXhwb3J0cz17MTAwMjk6Im1hY2NlbnRldXJvIixtYWNjZW50ZXVybzp7dHlwZToiX3NiY3MiLGNoYXJzOiJceGM0XHUwMTAwXHUwMTAxXHhjOVx1MDEwNFx4ZDZceGRjXHhlMVx1MDEwNVx1MDEwY1x4ZTRcdTAxMGRcdTAxMDZcdTAxMDdceGU5XHUwMTc5XHUwMTdhXHUwMTBl''@;'; put 'put ''XHhlZFx1MDEwZlx1MDExMlx1MDExM1x1MDExNlx4ZjNcdTAxMTdceGY0XHhmNlx4ZjVceGZhXHUwMTFhXHUwMTFiXHhmY1x1MjAyMFx4YjBcdTAxMThceGEzXHhhN1x1MjAyMlx4YjZceGRmXHhhZVx4YTlcdTIxMjJcdTAxMTlceGE4XHUyMjYwXHUwMTIzXHUwMTJlXHUwMTJmXHUwMTJhXHUy''@;'; put 'put ''MjY0XHUyMjY1XHUwMTJiXHUwMTM2XHUyMjAyXHUyMjExXHUwMTQyXHUwMTNiXHUwMTNjXHUwMTNkXHUwMTNlXHUwMTM5XHUwMTNhXHUwMTQ1XHUwMTQ2XHUwMTQzXHhhY1x1MjIxYVx1MDE0NFx1MDE0N1x1MjIwNlx4YWJceGJiXHUyMDI2XHhhMFx1MDE0OFx1MDE1MFx4ZDVcdTAxNTFcdTAx''@;'; put 'put ''NGNcdTIwMTNcdTIwMTRcdTIwMWNcdTIwMWRcdTIwMThcdTIwMTlceGY3XHUyNWNhXHUwMTRkXHUwMTU0XHUwMTU1XHUwMTU4XHUyMDM5XHUyMDNhXHUwMTU5XHUwMTU2XHUwMTU3XHUwMTYwXHUyMDFhXHUyMDFlXHUwMTYxXHUwMTVhXHUwMTViXHhjMVx1MDE2NFx1MDE2NVx4Y2RcdTAxN2Rc''@;'; put 'put ''dTAxN2VcdTAxNmFceGQzXHhkNFx1MDE2Ylx1MDE2ZVx4ZGFcdTAxNmZcdTAxNzBcdTAxNzFcdTAxNzJcdTAxNzNceGRkXHhmZFx1MDEzN1x1MDE3Ylx1MDE0MVx1MDE3Y1x1MDEyMlx1MDJjNyJ9LDgwODoiY3A4MDgiLGlibTgwODoiY3A4MDgiLGNwODA4Ont0eXBlOiJfc2JjcyIsY2hhcnM6''@;'; put 'put ''Ilx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxYVx1MDQxYlx1MDQxY1x1MDQxZFx1MDQxZVx1MDQxZlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyYVx1''@;'; put 'put ''MDQyYlx1MDQyY1x1MDQyZFx1MDQyZVx1MDQyZlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzYVx1MDQzYlx1MDQzY1x1MDQzZFx1MDQzZVx1MDQzZlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2''@;'; put 'put ''Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1ZFx1MjU1Y1x1MjU1Ylx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyY1x1MjUxY1x1MjUwMFx1MjUzY1x1MjU1ZVx1MjU1Zlx1MjU1YVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Y1x1MjU2N1x1MjU2OFx1MjU2NFx1''@;'; put 'put ''MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Ylx1MjU2YVx1MjUxOFx1MjUwY1x1MjU4OFx1MjU4NFx1MjU4Y1x1MjU5MFx1MjU4MFx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0YVx1MDQ0Ylx1MDQ0Y1x1MDQ0''@;'; put 'put ''ZFx1MDQ0ZVx1MDQ0Zlx1MDQwMVx1MDQ1MVx1MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1N1x1MDQwZVx1MDQ1ZVx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMTE2XHUyMGFjXHUyNWEwXHhhMCJ9LG1pazp7dHlwZToiX3NiY3MiLGNoYXJzOiJcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0''@;'; put 'put ''MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MWFcdTA0MWJcdTA0MWNcdTA0MWRcdTA0MWVcdTA0MWZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MmFcdTA0MmJcdTA0MmNcdTA0MmRcdTA0MmVcdTA0MmZcdTA0MzBc''@;'; put 'put ''dTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M2FcdTA0M2JcdTA0M2NcdTA0M2RcdTA0M2VcdTA0M2ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NGFcdTA0NGJcdTA0''@;'; put 'put ''NGNcdTA0NGRcdTA0NGVcdTA0NGZcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NjNcdTI1NTFcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NmNcdTI1MTBcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTIxMTZceGE3XHUyNTU3XHUy''@;'; put 'put ''NTVkXHUyNTE4XHUyNTBjXHUyNTg4XHUyNTg0XHUyNThjXHUyNTkwXHUyNTgwXHUwM2IxXHhkZlx1MDM5M1x1MDNjMFx1MDNhM1x1MDNjM1x4YjVcdTAzYzRcdTAzYTZcdTAzOThcdTAzYTlcdTAzYjRcdTIyMWVcdTAzYzZcdTAzYjVcdTIyMjlcdTIyNjFceGIxXHUyMjY1XHUyMjY0XHUyMzIw''@;'; put 'put ''XHUyMzIxXHhmN1x1MjI0OFx4YjBcdTIyMTlceGI3XHUyMjFhXHUyMDdmXHhiMlx1MjVhMFx4YTAifSxjcDcyMDp7dHlwZToiX3NiY3MiLGNoYXJzOiJceDgwXHg4MVx4ZTlceGUyXHg4NFx4ZTBceDg2XHhlN1x4ZWFceGViXHhlOFx4ZWZceGVlXHg4ZFx4OGVceDhmXHg5MFx1MDY1MVx1MDY1''@;'; put 'put ''Mlx4ZjRceGE0XHUwNjQwXHhmYlx4ZjlcdTA2MjFcdTA2MjJcdTA2MjNcdTA2MjRceGEzXHUwNjI1XHUwNjI2XHUwNjI3XHUwNjI4XHUwNjI5XHUwNjJhXHUwNjJiXHUwNjJjXHUwNjJkXHUwNjJlXHUwNjJmXHUwNjMwXHUwNjMxXHUwNjMyXHUwNjMzXHUwNjM0XHUwNjM1XHhhYlx4YmJcdTI1''@;'; put 'put ''OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NWRcdTI1NWNcdTI1NWJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MmNcdTI1MWNcdTI1MDBcdTI1M2NcdTI1NWVcdTI1NWZcdTI1NWFcdTI1NTRcdTI1NjlcdTI1NjZc''@;'; put 'put ''dTI1NjBcdTI1NTBcdTI1NmNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NmJcdTI1NmFcdTI1MThcdTI1MGNcdTI1ODhcdTI1ODRcdTI1OGNcdTI1OTBcdTI1ODBcdTA2MzZcdTA2MzdcdTA2MzhcdTA2MzlcdTA2M2FcdTA2NDFceGI1XHUwNjQy''@;'; put 'put ''XHUwNjQzXHUwNjQ0XHUwNjQ1XHUwNjQ2XHUwNjQ3XHUwNjQ4XHUwNjQ5XHUwNjRhXHUyMjYxXHUwNjRiXHUwNjRjXHUwNjRkXHUwNjRlXHUwNjRmXHUwNjUwXHUyMjQ4XHhiMFx1MjIxOVx4YjdcdTIyMWFcdTIwN2ZceGIyXHUyNWEwXHhhMCJ9LGFzY2lpOGJpdDoiYXNjaWkiLHVzYXNjaWk6''@;'; put 'put ''ImFzY2lpIixhbnNpeDM0OiJhc2NpaSIsYW5zaXgzNDE5Njg6ImFzY2lpIixhbnNpeDM0MTk4NjoiYXNjaWkiLGNzYXNjaWk6ImFzY2lpIixjcDM2NzoiYXNjaWkiLGlibTM2NzoiYXNjaWkiLGlzb2lyNjoiYXNjaWkiLGlzbzY0NnVzOiJhc2NpaSIsaXNvNjQ2aXJ2OiJhc2NpaSIsdXM6ImFz''@;'; put 'put ''Y2lpIixsYXRpbjE6Imlzbzg4NTkxIixsYXRpbjI6Imlzbzg4NTkyIixsYXRpbjM6Imlzbzg4NTkzIixsYXRpbjQ6Imlzbzg4NTk0IixsYXRpbjU6Imlzbzg4NTk5IixsYXRpbjY6Imlzbzg4NTkxMCIsbGF0aW43OiJpc284ODU5MTMiLGxhdGluODoiaXNvODg1OTE0IixsYXRpbjk6Imlzbzg4''@;'; put 'put ''NTkxNSIsbGF0aW4xMDoiaXNvODg1OTE2Iixjc2lzb2xhdGluMToiaXNvODg1OTEiLGNzaXNvbGF0aW4yOiJpc284ODU5MiIsY3Npc29sYXRpbjM6Imlzbzg4NTkzIixjc2lzb2xhdGluNDoiaXNvODg1OTQiLGNzaXNvbGF0aW5jeXJpbGxpYzoiaXNvODg1OTUiLGNzaXNvbGF0aW5hcmFiaWM6''@;'; put 'put ''Imlzbzg4NTk2Iixjc2lzb2xhdGluZ3JlZWs6Imlzbzg4NTk3Iixjc2lzb2xhdGluaGVicmV3OiJpc284ODU5OCIsY3Npc29sYXRpbjU6Imlzbzg4NTk5Iixjc2lzb2xhdGluNjoiaXNvODg1OTEwIixsMToiaXNvODg1OTEiLGwyOiJpc284ODU5MiIsbDM6Imlzbzg4NTkzIixsNDoiaXNvODg1''@;'; put 'put ''OTQiLGw1OiJpc284ODU5OSIsbDY6Imlzbzg4NTkxMCIsbDc6Imlzbzg4NTkxMyIsbDg6Imlzbzg4NTkxNCIsbDk6Imlzbzg4NTkxNSIsbDEwOiJpc284ODU5MTYiLGlzb2lyMTQ6ImlzbzY0NmpwIixpc29pcjU3OiJpc282NDZjbiIsaXNvaXIxMDA6Imlzbzg4NTkxIixpc29pcjEwMToiaXNv''@;'; put 'put ''ODg1OTIiLGlzb2lyMTA5OiJpc284ODU5MyIsaXNvaXIxMTA6Imlzbzg4NTk0Iixpc29pcjE0NDoiaXNvODg1OTUiLGlzb2lyMTI3OiJpc284ODU5NiIsaXNvaXIxMjY6Imlzbzg4NTk3Iixpc29pcjEzODoiaXNvODg1OTgiLGlzb2lyMTQ4OiJpc284ODU5OSIsaXNvaXIxNTc6Imlzbzg4NTkx''@;'; put 'put ''MCIsaXNvaXIxNjY6InRpczYyMCIsaXNvaXIxNzk6Imlzbzg4NTkxMyIsaXNvaXIxOTk6Imlzbzg4NTkxNCIsaXNvaXIyMDM6Imlzbzg4NTkxNSIsaXNvaXIyMjY6Imlzbzg4NTkxNiIsY3A4MTk6Imlzbzg4NTkxIixpYm04MTk6Imlzbzg4NTkxIixjeXJpbGxpYzoiaXNvODg1OTUiLGFyYWJp''@;'; put 'put ''YzoiaXNvODg1OTYiLGFyYWJpYzg6Imlzbzg4NTk2IixlY21hMTE0OiJpc284ODU5NiIsYXNtbzcwODoiaXNvODg1OTYiLGdyZWVrOiJpc284ODU5NyIsZ3JlZWs4OiJpc284ODU5NyIsZWNtYTExODoiaXNvODg1OTciLGVsb3Q5Mjg6Imlzbzg4NTk3IixoZWJyZXc6Imlzbzg4NTk4IixoZWJy''@;'; put 'put ''ZXc4OiJpc284ODU5OCIsdHVya2lzaDoiaXNvODg1OTkiLHR1cmtpc2g4OiJpc284ODU5OSIsdGhhaToiaXNvODg1OTExIix0aGFpODoiaXNvODg1OTExIixjZWx0aWM6Imlzbzg4NTkxNCIsY2VsdGljODoiaXNvODg1OTE0Iixpc29jZWx0aWM6Imlzbzg4NTkxNCIsdGlzNjIwMDoidGlzNjIw''@;'; put 'put ''Iix0aXM2MjAyNTI5MToidGlzNjIwIix0aXM2MjAyNTMzMDoidGlzNjIwIiwxZTQ6Im1hY3JvbWFuIiwxMDAwNjoibWFjZ3JlZWsiLDEwMDA3OiJtYWNjeXJpbGxpYyIsMTAwNzk6Im1hY2ljZWxhbmQiLDEwMDgxOiJtYWN0dXJraXNoIixjc3BjOGNvZGVwYWdlNDM3OiJjcDQzNyIsY3NwYzc3''@;'; put 'put ''NWJhbHRpYzoiY3A3NzUiLGNzcGM4NTBtdWx0aWxpbmd1YWw6ImNwODUwIixjc3BjcDg1MjoiY3A4NTIiLGNzcGM4NjJsYXRpbmhlYnJldzoiY3A4NjIiLGNwZ3I6ImNwODY5Iixtc2VlOiJjcDEyNTAiLG1zY3lybDoiY3AxMjUxIixtc2Fuc2k6ImNwMTI1MiIsbXNncmVlazoiY3AxMjUzIixt''@;'; put 'put ''c3R1cms6ImNwMTI1NCIsbXNoZWJyOiJjcDEyNTUiLG1zYXJhYjoiY3AxMjU2Iix3aW5iYWx0cmltOiJjcDEyNTciLGNwMjA4NjY6ImtvaThyIiwyMDg2Njoia29pOHIiLGlibTg3ODoia29pOHIiLGNza29pOHI6ImtvaThyIixjcDIxODY2OiJrb2k4dSIsMjE4NjY6ImtvaTh1IixpYm0xMTY4''@;'; put 'put ''OiJrb2k4dSIsc3RyazEwNDgyMDAyOiJyazEwNDgiLHRjdm41NzEyOiJ0Y3ZuIix0Y3ZuNTcxMjE6InRjdm4iLGdiMTk4ODgwOiJpc282NDZjbiIsY246ImlzbzY0NmNuIixjc2lzbzE0amlzYzYyMjBybzoiaXNvNjQ2anAiLGppc2M2MjIwMTk2OXJvOiJpc282NDZqcCIsanA6ImlzbzY0Nmpw''@;'; put 'put ''Iixjc2hwcm9tYW44OiJocHJvbWFuOCIscjg6Imhwcm9tYW44Iixyb21hbjg6Imhwcm9tYW44Iix4cm9tYW44OiJocHJvbWFuOCIsaWJtMTA1MToiaHByb21hbjgiLG1hYzoibWFjaW50b3NoIixjc21hY2ludG9zaDoibWFjaW50b3NoIn19LDcxNzU6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIEk9Xyg5MzgwNykuQnVmZmVyO2Z1bmN0aW9uIHkoKXt9ZnVuY3Rpb24gZygpe31mdW5jdGlvbiBCKCl7dGhpcy5vdmVyZmxvd0J5dGU9LTF9ZnVuY3Rpb24gdyh6LE4pe3RoaXMuaWNvbnY9Tn1mdW5jdGlvbiBQKHosTil7dm9pZCAwPT09KHo9enx8e30pLmFkZEJPTSYmKHouYWRkQk9N''@;'; put 'put ''PSEwKSx0aGlzLmVuY29kZXI9Ti5pY29udi5nZXRFbmNvZGVyKCJ1dGYtMTZsZSIseil9ZnVuY3Rpb24gRih6LE4pe3RoaXMuZGVjb2Rlcj1udWxsLHRoaXMuaW5pdGlhbEJ5dGVzPVtdLHRoaXMuaW5pdGlhbEJ5dGVzTGVuPTAsdGhpcy5vcHRpb25zPXp8fHt9LHRoaXMuaWNvbnY9Ti5pY29u''@;'; put 'put ''dn1mdW5jdGlvbiBPKHosTil7dmFyIEw9Tnx8InV0Zi0xNmxlIjtpZih6Lmxlbmd0aD49MilpZigyNTQ9PXpbMF0mJjI1NT09elsxXSlMPSJ1dGYtMTZiZSI7ZWxzZSBpZigyNTU9PXpbMF0mJjI1ND09elsxXSlMPSJ1dGYtMTZsZSI7ZWxzZXtmb3IodmFyIEs9MCxVPTAsVz1NYXRoLm1pbih6''@;'; put 'put ''Lmxlbmd0aC16Lmxlbmd0aCUyLDY0KSxZPTA7WTxXO1krPTIpMD09PXpbWV0mJjAhPT16W1krMV0mJlUrKywwIT09eltZXSYmMD09PXpbWSsxXSYmSysrO1U+Sz9MPSJ1dGYtMTZiZSI6VTxLJiYoTD0idXRmLTE2bGUiKX1yZXR1cm4gTH1xLnV0ZjE2YmU9eSx5LnByb3RvdHlwZS5lbmNvZGVy''@;'; put 'put ''PWcseS5wcm90b3R5cGUuZGVjb2Rlcj1CLHkucHJvdG90eXBlLmJvbUF3YXJlPSEwLGcucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHope2Zvcih2YXIgTj1JLmZyb20oeiwidWNzMiIpLEw9MDtMPE4ubGVuZ3RoO0wrPTIpe3ZhciBLPU5bTF07TltMXT1OW0wrMV0sTltMKzFdPUt9cmV0dXJu''@;'; put 'put ''IE59LGcucHJvdG90eXBlLmVuZD1mdW5jdGlvbigpe30sQi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oeil7aWYoMD09ei5sZW5ndGgpcmV0dXJuIiI7dmFyIE49SS5hbGxvYyh6Lmxlbmd0aCsxKSxMPTAsSz0wO2ZvcigtMSE9PXRoaXMub3ZlcmZsb3dCeXRlJiYoTlswXT16WzBdLE5bMV09''@;'; put 'put ''dGhpcy5vdmVyZmxvd0J5dGUsTD0xLEs9Mik7TDx6Lmxlbmd0aC0xO0wrPTIsSys9MilOW0tdPXpbTCsxXSxOW0srMV09eltMXTtyZXR1cm4gdGhpcy5vdmVyZmxvd0J5dGU9TD09ei5sZW5ndGgtMT96W3oubGVuZ3RoLTFdOi0xLE4uc2xpY2UoMCxLKS50b1N0cmluZygidWNzMiIpfSxCLnBy''@;'; put 'put ''b3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt9LHEudXRmMTY9dyx3LnByb3RvdHlwZS5lbmNvZGVyPVAsdy5wcm90b3R5cGUuZGVjb2Rlcj1GLFAucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHope3JldHVybiB0aGlzLmVuY29kZXIud3JpdGUoeil9LFAucHJvdG90eXBlLmVuZD1mdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiB0aGlzLmVuY29kZXIuZW5kKCl9LEYucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHope2lmKCF0aGlzLmRlY29kZXIpe2lmKHRoaXMuaW5pdGlhbEJ5dGVzLnB1c2goeiksdGhpcy5pbml0aWFsQnl0ZXNMZW4rPXoubGVuZ3RoLHRoaXMuaW5pdGlhbEJ5dGVzTGVuPDE2KXJldHVy''@;'; put 'put ''biIiO3ZhciBOPU8oej1JLmNvbmNhdCh0aGlzLmluaXRpYWxCeXRlcyksdGhpcy5vcHRpb25zLmRlZmF1bHRFbmNvZGluZyk7dGhpcy5kZWNvZGVyPXRoaXMuaWNvbnYuZ2V0RGVjb2RlcihOLHRoaXMub3B0aW9ucyksdGhpcy5pbml0aWFsQnl0ZXMubGVuZ3RoPXRoaXMuaW5pdGlhbEJ5dGVz''@;'; put 'put ''TGVuPTB9cmV0dXJuIHRoaXMuZGVjb2Rlci53cml0ZSh6KX0sRi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7aWYoIXRoaXMuZGVjb2Rlcil7dmFyIHo9SS5jb25jYXQodGhpcy5pbml0aWFsQnl0ZXMpLE49Tyh6LHRoaXMub3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcpO3RoaXMuZGVjb2Rlcj10''@;'; put 'put ''aGlzLmljb252LmdldERlY29kZXIoTix0aGlzLm9wdGlvbnMpO3ZhciBMPXRoaXMuZGVjb2Rlci53cml0ZSh6KSxLPXRoaXMuZGVjb2Rlci5lbmQoKTtyZXR1cm4gSz9MK0s6TH1yZXR1cm4gdGhpcy5kZWNvZGVyLmVuZCgpfX0sMzUwODk6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9''@;'; put 'put ''Xyg5MzgwNykuQnVmZmVyO2Z1bmN0aW9uIHkoeixOKXt0aGlzLmljb252PU4sdGhpcy5ib21Bd2FyZT0hMCx0aGlzLmlzTEU9ei5pc0xFfWZ1bmN0aW9uIGcoeixOKXt0aGlzLmlzTEU9Ti5pc0xFLHRoaXMuaGlnaFN1cnJvZ2F0ZT0wfWZ1bmN0aW9uIEIoeixOKXt0aGlzLmlzTEU9Ti5pc0xF''@;'; put 'put ''LHRoaXMuYmFkQ2hhcj1OLmljb252LmRlZmF1bHRDaGFyVW5pY29kZS5jaGFyQ29kZUF0KDApLHRoaXMub3ZlcmZsb3c9bnVsbH1mdW5jdGlvbiB3KHosTil7dGhpcy5pY29udj1OfWZ1bmN0aW9uIFAoeixOKXt2b2lkIDA9PT0oej16fHx7fSkuYWRkQk9NJiYoei5hZGRCT009ITApLHRoaXMu''@;'; put 'put ''ZW5jb2Rlcj1OLmljb252LmdldEVuY29kZXIoei5kZWZhdWx0RW5jb2Rpbmd8fCJ1dGYtMzJsZSIseil9ZnVuY3Rpb24gRih6LE4pe3RoaXMuZGVjb2Rlcj1udWxsLHRoaXMuaW5pdGlhbEJ5dGVzPVtdLHRoaXMuaW5pdGlhbEJ5dGVzTGVuPTAsdGhpcy5vcHRpb25zPXp8fHt9LHRoaXMuaWNv''@;'; put 'put ''bnY9Ti5pY29udn1mdW5jdGlvbiBPKHosTil7dmFyIEw9Tnx8InV0Zi0zMmxlIjtpZih6Lmxlbmd0aD49NClpZig2NTI3OT09PXoucmVhZFVJbnQzMkJFKDApKUw9InV0Zi0zMmJlIjtlbHNlIGlmKDY1Mjc5PT09ei5yZWFkVUludDMyTEUoMCkpTD0idXRmLTMybGUiO2Vsc2V7Zm9yKHZhciBL''@;'; put 'put ''PTAsVT0wLFc9MCxZPTAsWD1NYXRoLm1pbih6Lmxlbmd0aC16Lmxlbmd0aCU0LDEyOCksZWU9MDtlZTxYO2VlKz00KXt2YXIgSj16W2VlXSxyZT16W2VlKzFdLGllPXpbZWUrMl0sbGU9eltlZSszXTsoMCE9PUp8fHJlPjE2KSYmKytVLCgwIT09bGV8fGllPjE2KSYmKytLLDA9PT1KJiYwPT09''@;'; put 'put ''cmUmJjA9PT1pZSYmMCE9PWxlJiZZKyssMCE9PUomJjA9PT1yZSYmMD09PWllJiYwPT09bGUmJlcrK31VPEs/TD0idXRmLTMyYmUiOks8VSYmKEw9InV0Zi0zMmxlIiksWT5XP0w9InV0Zi0zMmJlIjpZPFcmJihMPSJ1dGYtMzJsZSIpfXJldHVybiBMfXEuX3V0ZjMyPXkscS51dGYzMmxlPXt0''@;'; put 'put ''eXBlOiJfdXRmMzIiLGlzTEU6ITB9LHEudXRmMzJiZT17dHlwZToiX3V0ZjMyIixpc0xFOiExfSxxLnVjczRsZT0idXRmMzJsZSIscS51Y3M0YmU9InV0ZjMyYmUiLHkucHJvdG90eXBlLmVuY29kZXI9Zyx5LnByb3RvdHlwZS5kZWNvZGVyPUIsZy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24o''@;'; put 'put ''eil7Zm9yKHZhciBOPUkuZnJvbSh6LCJ1Y3MyIiksTD1JLmFsbG9jKDIqTi5sZW5ndGgpLEs9dGhpcy5pc0xFP0wud3JpdGVVSW50MzJMRTpMLndyaXRlVUludDMyQkUsVT0wLFc9MDtXPE4ubGVuZ3RoO1crPTIpe3ZhciBZPU4ucmVhZFVJbnQxNkxFKFcpLFg9NTUyOTY8PVkmJlk8NTYzMjA7''@;'; put 'put ''aWYodGhpcy5oaWdoU3Vycm9nYXRlKXtpZighWCYmNTYzMjA8PVkmJlk8NTczNDQpe0suY2FsbChMLDY1NTM2Kyh0aGlzLmhpZ2hTdXJyb2dhdGUtNTUyOTY8PDEwfFktNTYzMjApLFUpLFUrPTQsdGhpcy5oaWdoU3Vycm9nYXRlPTA7Y29udGludWV9Sy5jYWxsKEwsdGhpcy5oaWdoU3Vycm9n''@;'; put 'put ''YXRlLFUpLFUrPTR9WD90aGlzLmhpZ2hTdXJyb2dhdGU9WTooSy5jYWxsKEwsWSxVKSxVKz00LHRoaXMuaGlnaFN1cnJvZ2F0ZT0wKX1yZXR1cm4gVTxMLmxlbmd0aCYmKEw9TC5zbGljZSgwLFUpKSxMfSxnLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtpZih0aGlzLmhpZ2hTdXJyb2dhdGUp''@;'; put 'put ''e3ZhciB6PUkuYWxsb2MoNCk7cmV0dXJuIHRoaXMuaXNMRT96LndyaXRlVUludDMyTEUodGhpcy5oaWdoU3Vycm9nYXRlLDApOnoud3JpdGVVSW50MzJCRSh0aGlzLmhpZ2hTdXJyb2dhdGUsMCksdGhpcy5oaWdoU3Vycm9nYXRlPTAsen19LEIucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHop''@;'; put 'put ''e2lmKDA9PT16Lmxlbmd0aClyZXR1cm4iIjt0aGlzLm92ZXJmbG93JiYoej1JLmNvbmNhdChbdGhpcy5vdmVyZmxvdyx6XSkpO3ZhciBOPXoubGVuZ3RoLXoubGVuZ3RoJTQ7ei5sZW5ndGghPT1OPyh0aGlzLm92ZXJmbG93PXouc2xpY2UoTiksej16LnNsaWNlKDAsTikpOnRoaXMub3ZlcmZs''@;'; put 'put ''b3c9bnVsbDtmb3IodmFyIEw9SS5hbGxvYyhOKSxLPTAsVT0wO1U8TjtVKz00KXt2YXIgVz10aGlzLmlzTEU/ei5yZWFkVUludDMyTEUoVSk6ei5yZWFkVUludDMyQkUoVSk7aWYoVzw2NTUzNilMLndyaXRlVUludDE2TEUoVyxLKSxLKz0yO2Vsc2UgaWYoVz4xMTE0MTExKUwud3JpdGVVSW50''@;'; put 'put ''MTZMRSh0aGlzLmJhZENoYXIsSyksSys9MjtlbHNle3ZhciBYPTU2MzIwKygxMDIzJihXLT02NTUzNikpO0wud3JpdGVVSW50MTZMRSg1NTI5NnxXPj4xMCxLKSxMLndyaXRlVUludDE2TEUoWCxLKz0yKSxLKz0yfX1yZXR1cm4gTC5zbGljZSgwLEspLnRvU3RyaW5nKCJ1Y3MyIil9LEIucHJv''@;'; put 'put ''dG90eXBlLmVuZD1mdW5jdGlvbigpe3RoaXMub3ZlcmZsb3c9bnVsbH0scS51dGYzMj13LHEudWNzND13LHcucHJvdG90eXBlLmVuY29kZXI9UCx3LnByb3RvdHlwZS5kZWNvZGVyPUYsUC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oeil7cmV0dXJuIHRoaXMuZW5jb2Rlci53cml0ZSh6KX0s''@;'; put 'put ''UC5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5jb2Rlci5lbmQoKX0sRi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oeil7aWYoIXRoaXMuZGVjb2Rlcil7aWYodGhpcy5pbml0aWFsQnl0ZXMucHVzaCh6KSx0aGlzLmluaXRpYWxCeXRlc0xlbis9ei5sZW5ndGgsdGhp''@;'; put 'put ''cy5pbml0aWFsQnl0ZXNMZW48MzIpcmV0dXJuIiI7dmFyIEw9TyhJLmNvbmNhdCh0aGlzLmluaXRpYWxCeXRlcyksdGhpcy5vcHRpb25zLmRlZmF1bHRFbmNvZGluZyk7dGhpcy5kZWNvZGVyPXRoaXMuaWNvbnYuZ2V0RGVjb2RlcihMLHRoaXMub3B0aW9ucyksdGhpcy5pbml0aWFsQnl0ZXMu''@;'; put 'put ''bGVuZ3RoPXRoaXMuaW5pdGlhbEJ5dGVzTGVuPTB9cmV0dXJuIHRoaXMuZGVjb2Rlci53cml0ZSh6KX0sRi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7aWYoIXRoaXMuZGVjb2Rlcil7dmFyIHo9SS5jb25jYXQodGhpcy5pbml0aWFsQnl0ZXMpLE49Tyh6LHRoaXMub3B0aW9ucy5kZWZhdWx0''@;'; put 'put ''RW5jb2RpbmcpO3RoaXMuZGVjb2Rlcj10aGlzLmljb252LmdldERlY29kZXIoTix0aGlzLm9wdGlvbnMpO3ZhciBMPXRoaXMuZGVjb2Rlci53cml0ZSh6KSxLPXRoaXMuZGVjb2Rlci5lbmQoKTtyZXR1cm4gSz9MK0s6TH1yZXR1cm4gdGhpcy5kZWNvZGVyLmVuZCgpfX0sOTc0NzoodWUscSxf''@;'; put 'put ''KT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDkzODA3KS5CdWZmZXI7ZnVuY3Rpb24geShYLGVlKXt0aGlzLmljb252PWVlfXEudXRmNz15LHEudW5pY29kZTExdXRmNz0idXRmNyIseS5wcm90b3R5cGUuZW5jb2Rlcj1CLHkucHJvdG90eXBlLmRlY29kZXI9dyx5LnByb3RvdHlwZS5ib21Bd2Fy''@;'; put 'put ''ZT0hMDt2YXIgZz0vW15BLVphLXowLTknXChcKSwtXC5cLzpcPyBcblxyXHRdKy9nO2Z1bmN0aW9uIEIoWCxlZSl7dGhpcy5pY29udj1lZS5pY29udn1mdW5jdGlvbiB3KFgsZWUpe3RoaXMuaWNvbnY9ZWUuaWNvbnYsdGhpcy5pbkJhc2U2ND0hMSx0aGlzLmJhc2U2NEFjY3VtPSIifUIucHJv''@;'; put 'put ''dG90eXBlLndyaXRlPWZ1bmN0aW9uKFgpe3JldHVybiBJLmZyb20oWC5yZXBsYWNlKGcsZnVuY3Rpb24oZWUpe3JldHVybiIrIisoIisiPT09ZWU/IiI6dGhpcy5pY29udi5lbmNvZGUoZWUsInV0ZjE2LWJlIikudG9TdHJpbmcoImJhc2U2NCIpLnJlcGxhY2UoLz0rJC8sIiIpKSsiLSJ9LmJp''@;'; put 'put ''bmQodGhpcykpKX0sQi5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7fTtmb3IodmFyIFA9L1tBLVphLXowLTlcLytdLyxGPVtdLE89MDtPPDI1NjtPKyspRltPXT1QLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShPKSk7dmFyIE49NDU7ZnVuY3Rpb24gSyhYLGVlKXt0aGlzLmljb252PWVlfWZ1''@;'; put 'put ''bmN0aW9uIFUoWCxlZSl7dGhpcy5pY29udj1lZS5pY29udix0aGlzLmluQmFzZTY0PSExLHRoaXMuYmFzZTY0QWNjdW09SS5hbGxvYyg2KSx0aGlzLmJhc2U2NEFjY3VtSWR4PTB9ZnVuY3Rpb24gVyhYLGVlKXt0aGlzLmljb252PWVlLmljb252LHRoaXMuaW5CYXNlNjQ9ITEsdGhpcy5iYXNl''@;'; put 'put ''NjRBY2N1bT0iIn13LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihYKXtmb3IodmFyIGVlPSIiLEo9MCxyZT10aGlzLmluQmFzZTY0LGllPXRoaXMuYmFzZTY0QWNjdW0sbGU9MDtsZTxYLmxlbmd0aDtsZSsrKWlmKHJlKXtpZighRltYW2xlXV0pe2lmKGxlPT1KJiZYW2xlXT09TillZSs9Iisi''@;'; put 'put ''O2Vsc2V7dmFyIG1lPWllK1guc2xpY2UoSixsZSkudG9TdHJpbmcoKTtlZSs9dGhpcy5pY29udi5kZWNvZGUoSS5mcm9tKG1lLCJiYXNlNjQiKSwidXRmMTYtYmUiKX1YW2xlXSE9TiYmbGUtLSxKPWxlKzEscmU9ITEsaWU9IiJ9fWVsc2UgNDM9PVhbbGVdJiYoZWUrPXRoaXMuaWNvbnYuZGVj''@;'; put 'put ''b2RlKFguc2xpY2UoSixsZSksImFzY2lpIiksSj1sZSsxLHJlPSEwKTtpZihyZSl7dmFyIF9lPShtZT1pZStYLnNsaWNlKEopLnRvU3RyaW5nKCkpLmxlbmd0aC1tZS5sZW5ndGglODtpZT1tZS5zbGljZShfZSksbWU9bWUuc2xpY2UoMCxfZSksZWUrPXRoaXMuaWNvbnYuZGVjb2RlKEkuZnJv''@;'; put 'put ''bShtZSwiYmFzZTY0IiksInV0ZjE2LWJlIil9ZWxzZSBlZSs9dGhpcy5pY29udi5kZWNvZGUoWC5zbGljZShKKSwiYXNjaWkiKTtyZXR1cm4gdGhpcy5pbkJhc2U2ND1yZSx0aGlzLmJhc2U2NEFjY3VtPWllLGVlfSx3LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXt2YXIgWD0iIjtyZXR1cm4g''@;'; put 'put ''dGhpcy5pbkJhc2U2NCYmdGhpcy5iYXNlNjRBY2N1bS5sZW5ndGg+MCYmKFg9dGhpcy5pY29udi5kZWNvZGUoSS5mcm9tKHRoaXMuYmFzZTY0QWNjdW0sImJhc2U2NCIpLCJ1dGYxNi1iZSIpKSx0aGlzLmluQmFzZTY0PSExLHRoaXMuYmFzZTY0QWNjdW09IiIsWH0scS51dGY3aW1hcD1LLEsu''@;'; put 'put ''cHJvdG90eXBlLmVuY29kZXI9VSxLLnByb3RvdHlwZS5kZWNvZGVyPVcsSy5wcm90b3R5cGUuYm9tQXdhcmU9ITAsVS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oWCl7Zm9yKHZhciBlZT10aGlzLmluQmFzZTY0LEo9dGhpcy5iYXNlNjRBY2N1bSxyZT10aGlzLmJhc2U2NEFjY3VtSWR4LGll''@;'; put 'put ''PUkuYWxsb2MoNSpYLmxlbmd0aCsxMCksbGU9MCxtZT0wO21lPFgubGVuZ3RoO21lKyspe3ZhciBfZT1YLmNoYXJDb2RlQXQobWUpOzMyPD1fZSYmX2U8PTEyNj8oZWUmJihyZT4wJiYobGUrPWllLndyaXRlKEouc2xpY2UoMCxyZSkudG9TdHJpbmcoImJhc2U2NCIpLnJlcGxhY2UoL1wvL2cs''@;'; put 'put ''IiwiKS5yZXBsYWNlKC89KyQvLCIiKSxsZSkscmU9MCksaWVbbGUrK109TixlZT0hMSksZWV8fChpZVtsZSsrXT1fZSwzOD09PV9lJiYoaWVbbGUrK109TikpKTooZWV8fChpZVtsZSsrXT0zOCxlZT0hMCksZWUmJihKW3JlKytdPV9lPj44LEpbcmUrK109MjU1Jl9lLHJlPT1KLmxlbmd0aCYm''@;'; put 'put ''KGxlKz1pZS53cml0ZShKLnRvU3RyaW5nKCJiYXNlNjQiKS5yZXBsYWNlKC9cLy9nLCIsIiksbGUpLHJlPTApKSl9cmV0dXJuIHRoaXMuaW5CYXNlNjQ9ZWUsdGhpcy5iYXNlNjRBY2N1bUlkeD1yZSxpZS5zbGljZSgwLGxlKX0sVS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dmFyIFg9SS5h''@;'; put 'put ''bGxvYygxMCksZWU9MDtyZXR1cm4gdGhpcy5pbkJhc2U2NCYmKHRoaXMuYmFzZTY0QWNjdW1JZHg+MCYmKGVlKz1YLndyaXRlKHRoaXMuYmFzZTY0QWNjdW0uc2xpY2UoMCx0aGlzLmJhc2U2NEFjY3VtSWR4KS50b1N0cmluZygiYmFzZTY0IikucmVwbGFjZSgvXC8vZywiLCIpLnJlcGxhY2Uo''@;'; put 'put ''Lz0rJC8sIiIpLGVlKSx0aGlzLmJhc2U2NEFjY3VtSWR4PTApLFhbZWUrK109Tix0aGlzLmluQmFzZTY0PSExKSxYLnNsaWNlKDAsZWUpfTt2YXIgWT1GLnNsaWNlKCk7WVs0NF09ITAsVy5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oWCl7Zm9yKHZhciBlZT0iIixKPTAscmU9dGhpcy5pbkJh''@;'; put 'put ''c2U2NCxpZT10aGlzLmJhc2U2NEFjY3VtLGxlPTA7bGU8WC5sZW5ndGg7bGUrKylpZihyZSl7aWYoIVlbWFtsZV1dKXtpZihsZT09SiYmWFtsZV09PU4pZWUrPSImIjtlbHNle3ZhciBtZT1pZStYLnNsaWNlKEosbGUpLnRvU3RyaW5nKCkucmVwbGFjZSgvLC9nLCIvIik7ZWUrPXRoaXMuaWNv''@;'; put 'put ''bnYuZGVjb2RlKEkuZnJvbShtZSwiYmFzZTY0IiksInV0ZjE2LWJlIil9WFtsZV0hPU4mJmxlLS0sSj1sZSsxLHJlPSExLGllPSIifX1lbHNlIDM4PT1YW2xlXSYmKGVlKz10aGlzLmljb252LmRlY29kZShYLnNsaWNlKEosbGUpLCJhc2NpaSIpLEo9bGUrMSxyZT0hMCk7aWYocmUpe3ZhciBf''@;'; put 'put ''ZT0obWU9aWUrWC5zbGljZShKKS50b1N0cmluZygpLnJlcGxhY2UoLywvZywiLyIpKS5sZW5ndGgtbWUubGVuZ3RoJTg7aWU9bWUuc2xpY2UoX2UpLG1lPW1lLnNsaWNlKDAsX2UpLGVlKz10aGlzLmljb252LmRlY29kZShJLmZyb20obWUsImJhc2U2NCIpLCJ1dGYxNi1iZSIpfWVsc2UgZWUr''@;'; put 'put ''PXRoaXMuaWNvbnYuZGVjb2RlKFguc2xpY2UoSiksImFzY2lpIik7cmV0dXJuIHRoaXMuaW5CYXNlNjQ9cmUsdGhpcy5iYXNlNjRBY2N1bT1pZSxlZX0sVy5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKCl7dmFyIFg9IiI7cmV0dXJuIHRoaXMuaW5CYXNlNjQmJnRoaXMuYmFzZTY0QWNjdW0ubGVu''@;'; put 'put ''Z3RoPjAmJihYPXRoaXMuaWNvbnYuZGVjb2RlKEkuZnJvbSh0aGlzLmJhc2U2NEFjY3VtLCJiYXNlNjQiKSwidXRmMTYtYmUiKSksdGhpcy5pbkJhc2U2ND0hMSx0aGlzLmJhc2U2NEFjY3VtPSIiLFh9fSwyOTQyMjoodWUscSk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSShnLEIpe3RoaXMu''@;'; put 'put ''ZW5jb2Rlcj1nLHRoaXMuYWRkQk9NPSEwfWZ1bmN0aW9uIHkoZyxCKXt0aGlzLmRlY29kZXI9Zyx0aGlzLnBhc3M9ITEsdGhpcy5vcHRpb25zPUJ8fHt9fXEuUHJlcGVuZEJPTT1JLEkucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKGcpe3JldHVybiB0aGlzLmFkZEJPTSYmKGc9Ilx1ZmVmZiIr''@;'; put 'put ''Zyx0aGlzLmFkZEJPTT0hMSksdGhpcy5lbmNvZGVyLndyaXRlKGcpfSxJLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmNvZGVyLmVuZCgpfSxxLlN0cmlwQk9NPXkseS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oZyl7dmFyIEI9dGhpcy5kZWNvZGVyLndyaXRlKGcp''@;'; put 'put ''O3JldHVybiB0aGlzLnBhc3N8fCFCfHwoIlx1ZmVmZiI9PT1CWzBdJiYoQj1CLnNsaWNlKDEpLCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzLm9wdGlvbnMuc3RyaXBCT00mJnRoaXMub3B0aW9ucy5zdHJpcEJPTSgpKSx0aGlzLnBhc3M9ITApLEJ9LHkucHJvdG90eXBlLmVuZD1mdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiB0aGlzLmRlY29kZXIuZW5kKCl9fSw5NDI0ODoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDkzODA3KS5CdWZmZXIseT1fKDI5NDIyKSxnPXVlLmV4cG9ydHM7Zy5lbmNvZGluZ3M9bnVsbCxnLmRlZmF1bHRDaGFyVW5pY29kZT0iXHVmZmZkIixnLmRlZmF1bHRDaGFy''@;'; put 'put ''U2luZ2xlQnl0ZT0iPyIsZy5lbmNvZGU9ZnVuY3Rpb24oRixPLHope0Y9IiIrKEZ8fCIiKTt2YXIgTj1nLmdldEVuY29kZXIoTyx6KSxMPU4ud3JpdGUoRiksSz1OLmVuZCgpO3JldHVybiBLJiZLLmxlbmd0aD4wP0kuY29uY2F0KFtMLEtdKTpMfSxnLmRlY29kZT1mdW5jdGlvbihGLE8seil7''@;'; put 'put ''InN0cmluZyI9PXR5cGVvZiBGJiYoZy5za2lwRGVjb2RlV2FybmluZ3x8KGNvbnNvbGUuZXJyb3IoIkljb252LWxpdGUgd2FybmluZzogZGVjb2RlKCktaW5nIHN0cmluZ3MgaXMgZGVwcmVjYXRlZC4gUmVmZXIgdG8gaHR0cHM6Ly9naXRodWIuY29tL2FzaHR1Y2hraW4vaWNvbnYtbGl0ZS93''@;'; put 'put ''aWtpL1VzZS1CdWZmZXJzLXdoZW4tZGVjb2RpbmciKSxnLnNraXBEZWNvZGVXYXJuaW5nPSEwKSxGPUkuZnJvbSgiIisoRnx8IiIpLCJiaW5hcnkiKSk7dmFyIE49Zy5nZXREZWNvZGVyKE8seiksTD1OLndyaXRlKEYpLEs9Ti5lbmQoKTtyZXR1cm4gSz9MK0s6TH0sZy5lbmNvZGluZ0V4aXN0''@;'; put 'put ''cz1mdW5jdGlvbihGKXt0cnl7cmV0dXJuIGcuZ2V0Q29kZWMoRiksITB9Y2F0Y2h7cmV0dXJuITF9fSxnLnRvRW5jb2Rpbmc9Zy5lbmNvZGUsZy5mcm9tRW5jb2Rpbmc9Zy5kZWNvZGUsZy5fY29kZWNEYXRhQ2FjaGU9e30sZy5nZXRDb2RlYz1mdW5jdGlvbihGKXtnLmVuY29kaW5nc3x8KGcu''@;'; put 'put ''ZW5jb2RpbmdzPV8oNzI4OTMpKTtmb3IodmFyIE89Zy5fY2Fub25pY2FsaXplRW5jb2RpbmcoRiksej17fTs7KXt2YXIgTj1nLl9jb2RlY0RhdGFDYWNoZVtPXTtpZihOKXJldHVybiBOO3ZhciBMPWcuZW5jb2RpbmdzW09dO3N3aXRjaCh0eXBlb2YgTCl7Y2FzZSJzdHJpbmciOk89TDticmVh''@;'; put 'put ''aztjYXNlIm9iamVjdCI6Zm9yKHZhciBLIGluIEwpeltLXT1MW0tdO3ouZW5jb2RpbmdOYW1lfHwoei5lbmNvZGluZ05hbWU9TyksTz1MLnR5cGU7YnJlYWs7Y2FzZSJmdW5jdGlvbiI6cmV0dXJuIHouZW5jb2RpbmdOYW1lfHwoei5lbmNvZGluZ05hbWU9TyksTj1uZXcgTCh6LGcpLGcuX2Nv''@;'; put 'put ''ZGVjRGF0YUNhY2hlW3ouZW5jb2RpbmdOYW1lXT1OLE47ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkVuY29kaW5nIG5vdCByZWNvZ25pemVkOiAnIitGKyInIChzZWFyY2hlZCBhczogJyIrTysiJykiKX19fSxnLl9jYW5vbmljYWxpemVFbmNvZGluZz1mdW5jdGlvbihQKXtyZXR1cm4oIiIr''@;'; put 'put ''UCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC86XGR7NH0kfFteMC05YS16XS9nLCIiKX0sZy5nZXRFbmNvZGVyPWZ1bmN0aW9uKEYsTyl7dmFyIHo9Zy5nZXRDb2RlYyhGKSxOPW5ldyB6LmVuY29kZXIoTyx6KTtyZXR1cm4gei5ib21Bd2FyZSYmTyYmTy5hZGRCT00mJihOPW5ldyB5LlByZXBl''@;'; put 'put ''bmRCT00oTixPKSksTn0sZy5nZXREZWNvZGVyPWZ1bmN0aW9uKEYsTyl7dmFyIHo9Zy5nZXRDb2RlYyhGKSxOPW5ldyB6LmRlY29kZXIoTyx6KTtyZXR1cm4gei5ib21Bd2FyZSYmIShPJiYhMT09PU8uc3RyaXBCT00pJiYoTj1uZXcgeS5TdHJpcEJPTShOLE8pKSxOfTt2YXIgQj10eXBlb2Yg''@;'; put 'put ''cHJvY2VzczwidSImJnByb2Nlc3MudmVyc2lvbnMmJnByb2Nlc3MudmVyc2lvbnMubm9kZTtpZihCKXt2YXIgdz1CLnNwbGl0KCIuIikubWFwKE51bWJlcik7KHdbMF0+MHx8d1sxXT49MTApJiZfKDYxMDkzKShnKSxfKDE1NzkxKShnKX19LDIyMDIwOih1ZSxxKT0+e3EucmVhZD1mdW5jdGlv''@;'; put 'put ''bihfLEkseSxnLEIpe3ZhciB3LFAsRj04KkItZy0xLE89KDE8PEYpLTEsej1PPj4xLE49LTcsTD15P0ItMTowLEs9eT8tMToxLFU9X1tJK0xdO2ZvcihMKz1LLHc9VSYoMTw8LU4pLTEsVT4+PS1OLE4rPUY7Tj4wO3c9MjU2KncrX1tJK0xdLEwrPUssTi09OCk7Zm9yKFA9dyYoMTw8LU4pLTEs''@;'; put 'put ''dz4+PS1OLE4rPWc7Tj4wO1A9MjU2KlArX1tJK0xdLEwrPUssTi09OCk7aWYoMD09PXcpdz0xLXo7ZWxzZXtpZih3PT09TylyZXR1cm4gUD9OYU46MS8wKihVPy0xOjEpO1ArPU1hdGgucG93KDIsZyksdy09en1yZXR1cm4oVT8tMToxKSpQKk1hdGgucG93KDIsdy1nKX0scS53cml0ZT1mdW5j''@;'; put 'put ''dGlvbihfLEkseSxnLEIsdyl7dmFyIFAsRixPLHo9OCp3LUItMSxOPSgxPDx6KS0xLEw9Tj4+MSxLPTIzPT09Qj9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAsVT1nPzA6dy0xLFc9Zz8xOi0xLFk9STwwfHwwPT09SSYmMS9JPDA/MTowO2ZvcihJPU1hdGguYWJzKEkpLGlzTmFO''@;'; put 'put ''KEkpfHxJPT09MS8wPyhGPWlzTmFOKEkpPzE6MCxQPU4pOihQPU1hdGguZmxvb3IoTWF0aC5sb2coSSkvTWF0aC5MTjIpLEkqKE89TWF0aC5wb3coMiwtUCkpPDEmJihQLS0sTyo9MiksKEkrPVArTD49MT9LL086SypNYXRoLnBvdygyLDEtTCkpKk8+PTImJihQKyssTy89MiksUCtMPj1OPyhG''@;'; put 'put ''PTAsUD1OKTpQK0w+PTE/KEY9KEkqTy0xKSpNYXRoLnBvdygyLEIpLFArPUwpOihGPUkqTWF0aC5wb3coMixMLTEpKk1hdGgucG93KDIsQiksUD0wKSk7Qj49ODtfW3krVV09MjU1JkYsVSs9VyxGLz0yNTYsQi09OCk7Zm9yKFA9UDw8QnxGLHorPUI7ej4wO19beStVXT0yNTUmUCxVKz1XLFAv''@;'; put 'put ''PTI1Nix6LT04KTtfW3krVS1XXXw9MTI4Kll9fSw3MTk5Mzp1ZT0+e3VlLmV4cG9ydHM9ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oXyxJKXtJJiYoXy5zdXBlcl89SSxfLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEkucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7''@;'; put 'put ''dmFsdWU6XyxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSl9OmZ1bmN0aW9uKF8sSSl7aWYoSSl7Xy5zdXBlcl89STt2YXIgeT1mdW5jdGlvbigpe307eS5wcm90b3R5cGU9SS5wcm90b3R5cGUsXy5wcm90b3R5cGU9bmV3IHksXy5wcm90b3R5cGUuY29uc3Ry''@;'; put 'put ''dWN0b3I9X319fSwyMDA1Mzp1ZT0+e3ZhciBxPXt9LnRvU3RyaW5nO3VlLmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oXyl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09cS5jYWxsKF8pfX0sMzQ3MjU6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg3MTk5MykseT1fKDEz''@;'; put 'put ''Njg2KSxnPV8oMjcwNTQpLkJ1ZmZlcixCPW5ldyBBcnJheSgxNik7ZnVuY3Rpb24gdygpe3kuY2FsbCh0aGlzLDY0KSx0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OH1mdW5jdGlvbiBQKEwsSyl7cmV0dXJu''@;'; put 'put ''IEw8PEt8TD4+PjMyLUt9ZnVuY3Rpb24gRihMLEssVSxXLFksWCxlZSl7cmV0dXJuIFAoTCsoSyZVfH5LJlcpK1krWHwwLGVlKStLfDB9ZnVuY3Rpb24gTyhMLEssVSxXLFksWCxlZSl7cmV0dXJuIFAoTCsoSyZXfFUmflcpK1krWHwwLGVlKStLfDB9ZnVuY3Rpb24geihMLEssVSxXLFksWCxl''@;'; put 'put ''ZSl7cmV0dXJuIFAoTCsoS15VXlcpK1krWHwwLGVlKStLfDB9ZnVuY3Rpb24gTihMLEssVSxXLFksWCxlZSl7cmV0dXJuIFAoTCsoVV4oS3x+VykpK1krWHwwLGVlKStLfDB9SSh3LHkpLHcucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oKXtmb3IodmFyIEw9QixLPTA7SzwxNjsrK0spTFtL''@;'; put 'put ''XT10aGlzLl9ibG9jay5yZWFkSW50MzJMRSg0KkspO3ZhciBVPXRoaXMuX2EsVz10aGlzLl9iLFk9dGhpcy5fYyxYPXRoaXMuX2Q7VT1GKFUsVyxZLFgsTFswXSwzNjE0MDkwMzYwLDcpLFg9RihYLFUsVyxZLExbMV0sMzkwNTQwMjcxMCwxMiksWT1GKFksWCxVLFcsTFsyXSw2MDYxMDU4MTks''@;'; put 'put ''MTcpLFc9RihXLFksWCxVLExbM10sMzI1MDQ0MTk2NiwyMiksVT1GKFUsVyxZLFgsTFs0XSw0MTE4NTQ4Mzk5LDcpLFg9RihYLFUsVyxZLExbNV0sMTIwMDA4MDQyNiwxMiksWT1GKFksWCxVLFcsTFs2XSwyODIxNzM1OTU1LDE3KSxXPUYoVyxZLFgsVSxMWzddLDQyNDkyNjEzMTMsMjIpLFU9''@;'; put 'put ''RihVLFcsWSxYLExbOF0sMTc3MDAzNTQxNiw3KSxYPUYoWCxVLFcsWSxMWzldLDIzMzY1NTI4NzksMTIpLFk9RihZLFgsVSxXLExbMTBdLDQyOTQ5MjUyMzMsMTcpLFc9RihXLFksWCxVLExbMTFdLDIzMDQ1NjMxMzQsMjIpLFU9RihVLFcsWSxYLExbMTJdLDE4MDQ2MDM2ODIsNyksWD1GKFgs''@;'; put 'put ''VSxXLFksTFsxM10sNDI1NDYyNjE5NSwxMiksWT1GKFksWCxVLFcsTFsxNF0sMjc5Mjk2NTAwNiwxNyksVT1PKFUsVz1GKFcsWSxYLFUsTFsxNV0sMTIzNjUzNTMyOSwyMiksWSxYLExbMV0sNDEyOTE3MDc4Niw1KSxYPU8oWCxVLFcsWSxMWzZdLDMyMjU0NjU2NjQsOSksWT1PKFksWCxVLFcs''@;'; put 'put ''TFsxMV0sNjQzNzE3NzEzLDE0KSxXPU8oVyxZLFgsVSxMWzBdLDM5MjEwNjk5OTQsMjApLFU9TyhVLFcsWSxYLExbNV0sMzU5MzQwODYwNSw1KSxYPU8oWCxVLFcsWSxMWzEwXSwzODAxNjA4Myw5KSxZPU8oWSxYLFUsVyxMWzE1XSwzNjM0NDg4OTYxLDE0KSxXPU8oVyxZLFgsVSxMWzRdLDM4''@;'; put 'put ''ODk0Mjk0NDgsMjApLFU9TyhVLFcsWSxYLExbOV0sNTY4NDQ2NDM4LDUpLFg9TyhYLFUsVyxZLExbMTRdLDMyNzUxNjM2MDYsOSksWT1PKFksWCxVLFcsTFszXSw0MTA3NjAzMzM1LDE0KSxXPU8oVyxZLFgsVSxMWzhdLDExNjM1MzE1MDEsMjApLFU9TyhVLFcsWSxYLExbMTNdLDI4NTAyODU4''@;'; put 'put ''MjksNSksWD1PKFgsVSxXLFksTFsyXSw0MjQzNTYzNTEyLDkpLFk9TyhZLFgsVSxXLExbN10sMTczNTMyODQ3MywxNCksVT16KFUsVz1PKFcsWSxYLFUsTFsxMl0sMjM2ODM1OTU2MiwyMCksWSxYLExbNV0sNDI5NDU4ODczOCw0KSxYPXooWCxVLFcsWSxMWzhdLDIyNzIzOTI4MzMsMTEpLFk9''@;'; put 'put ''eihZLFgsVSxXLExbMTFdLDE4MzkwMzA1NjIsMTYpLFc9eihXLFksWCxVLExbMTRdLDQyNTk2NTc3NDAsMjMpLFU9eihVLFcsWSxYLExbMV0sMjc2Mzk3NTIzNiw0KSxYPXooWCxVLFcsWSxMWzRdLDEyNzI4OTMzNTMsMTEpLFk9eihZLFgsVSxXLExbN10sNDEzOTQ2OTY2NCwxNiksVz16KFcs''@;'; put 'put ''WSxYLFUsTFsxMF0sMzIwMDIzNjY1NiwyMyksVT16KFUsVyxZLFgsTFsxM10sNjgxMjc5MTc0LDQpLFg9eihYLFUsVyxZLExbMF0sMzkzNjQzMDA3NCwxMSksWT16KFksWCxVLFcsTFszXSwzNTcyNDQ1MzE3LDE2KSxXPXooVyxZLFgsVSxMWzZdLDc2MDI5MTg5LDIzKSxVPXooVSxXLFksWCxM''@;'; put 'put ''WzldLDM2NTQ2MDI4MDksNCksWD16KFgsVSxXLFksTFsxMl0sMzg3MzE1MTQ2MSwxMSksWT16KFksWCxVLFcsTFsxNV0sNTMwNzQyNTIwLDE2KSxVPU4oVSxXPXooVyxZLFgsVSxMWzJdLDMyOTk2Mjg2NDUsMjMpLFksWCxMWzBdLDQwOTYzMzY0NTIsNiksWD1OKFgsVSxXLFksTFs3XSwxMTI2''@;'; put 'put ''ODkxNDE1LDEwKSxZPU4oWSxYLFUsVyxMWzE0XSwyODc4NjEyMzkxLDE1KSxXPU4oVyxZLFgsVSxMWzVdLDQyMzc1MzMyNDEsMjEpLFU9TihVLFcsWSxYLExbMTJdLDE3MDA0ODU1NzEsNiksWD1OKFgsVSxXLFksTFszXSwyMzk5OTgwNjkwLDEwKSxZPU4oWSxYLFUsVyxMWzEwXSw0MjkzOTE1''@;'; put 'put ''NzczLDE1KSxXPU4oVyxZLFgsVSxMWzFdLDIyNDAwNDQ0OTcsMjEpLFU9TihVLFcsWSxYLExbOF0sMTg3MzMxMzM1OSw2KSxYPU4oWCxVLFcsWSxMWzE1XSw0MjY0MzU1NTUyLDEwKSxZPU4oWSxYLFUsVyxMWzZdLDI3MzQ3Njg5MTYsMTUpLFc9TihXLFksWCxVLExbMTNdLDEzMDkxNTE2NDks''@;'; put 'put ''MjEpLFU9TihVLFcsWSxYLExbNF0sNDE0OTQ0NDIyNiw2KSxYPU4oWCxVLFcsWSxMWzExXSwzMTc0NzU2OTE3LDEwKSxZPU4oWSxYLFUsVyxMWzJdLDcxODc4NzI1OSwxNSksVz1OKFcsWSxYLFUsTFs5XSwzOTUxNDgxNzQ1LDIxKSx0aGlzLl9hPXRoaXMuX2ErVXwwLHRoaXMuX2I9dGhpcy5f''@;'; put 'put ''YitXfDAsdGhpcy5fYz10aGlzLl9jK1l8MCx0aGlzLl9kPXRoaXMuX2QrWHwwfSx3LnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKCl7dGhpcy5fYmxvY2tbdGhpcy5fYmxvY2tPZmZzZXQrK109MTI4LHRoaXMuX2Jsb2NrT2Zmc2V0PjU2JiYodGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Js''@;'; put 'put ''b2NrT2Zmc2V0LDY0KSx0aGlzLl91cGRhdGUoKSx0aGlzLl9ibG9ja09mZnNldD0wKSx0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzBdLDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRo''@;'; put 'put ''aXMuX2xlbmd0aFsxXSw2MCksdGhpcy5fdXBkYXRlKCk7dmFyIEw9Zy5hbGxvY1Vuc2FmZSgxNik7cmV0dXJuIEwud3JpdGVJbnQzMkxFKHRoaXMuX2EsMCksTC53cml0ZUludDMyTEUodGhpcy5fYiw0KSxMLndyaXRlSW50MzJMRSh0aGlzLl9jLDgpLEwud3JpdGVJbnQzMkxFKHRoaXMuX2Qs''@;'; put 'put ''MTIpLEx9LHVlLmV4cG9ydHM9d30sNTM0NTk6KHVlLHEsXyk9Pnt2YXIgST1fKDU3MjIzKSx5PV8oMzUyOTQpO2Z1bmN0aW9uIGcoQil7dGhpcy5yYW5kPUJ8fG5ldyB5LlJhbmR9dWUuZXhwb3J0cz1nLGcuY3JlYXRlPWZ1bmN0aW9uKHcpe3JldHVybiBuZXcgZyh3KX0sZy5wcm90b3R5cGUu''@;'; put 'put ''X3JhbmRiZWxvdz1mdW5jdGlvbih3KXt2YXIgUD13LmJpdExlbmd0aCgpLEY9TWF0aC5jZWlsKFAvOCk7ZG97dmFyIE89bmV3IEkodGhpcy5yYW5kLmdlbmVyYXRlKEYpKX13aGlsZShPLmNtcCh3KT49MCk7cmV0dXJuIE99LGcucHJvdG90eXBlLl9yYW5kcmFuZ2U9ZnVuY3Rpb24odyxQKXt2''@;'; put 'put ''YXIgRj1QLnN1Yih3KTtyZXR1cm4gdy5hZGQodGhpcy5fcmFuZGJlbG93KEYpKX0sZy5wcm90b3R5cGUudGVzdD1mdW5jdGlvbih3LFAsRil7dmFyIE89dy5iaXRMZW5ndGgoKSx6PUkubW9udCh3KSxOPW5ldyBJKDEpLnRvUmVkKHopO1B8fChQPU1hdGgubWF4KDEsTy80OHwwKSk7Zm9yKHZh''@;'; put 'put ''ciBMPXcuc3VibigxKSxLPTA7IUwudGVzdG4oSyk7SysrKTtmb3IodmFyIFU9dy5zaHJuKEspLFc9TC50b1JlZCh6KTtQPjA7UC0tKXt2YXIgWD10aGlzLl9yYW5kcmFuZ2UobmV3IEkoMiksTCk7RiYmRihYKTt2YXIgZWU9WC50b1JlZCh6KS5yZWRQb3coVSk7aWYoMCE9PWVlLmNtcChOKSYm''@;'; put 'put ''MCE9PWVlLmNtcChXKSl7Zm9yKHZhciBKPTE7SjxLO0orKyl7aWYoMD09PShlZT1lZS5yZWRTcXIoKSkuY21wKE4pKXJldHVybiExO2lmKDA9PT1lZS5jbXAoVykpYnJlYWt9aWYoSj09PUspcmV0dXJuITF9fXJldHVybiEwfSxnLnByb3RvdHlwZS5nZXREaXZpc29yPWZ1bmN0aW9uKHcsUCl7''@;'; put 'put ''dmFyIEY9dy5iaXRMZW5ndGgoKSxPPUkubW9udCh3KSx6PW5ldyBJKDEpLnRvUmVkKE8pO1B8fChQPU1hdGgubWF4KDEsRi80OHwwKSk7Zm9yKHZhciBOPXcuc3VibigxKSxMPTA7IU4udGVzdG4oTCk7TCsrKTtmb3IodmFyIEs9dy5zaHJuKEwpLFU9Ti50b1JlZChPKTtQPjA7UC0tKXt2YXIg''@;'; put 'put ''Vz10aGlzLl9yYW5kcmFuZ2UobmV3IEkoMiksTiksWT13LmdjZChXKTtpZigwIT09WS5jbXBuKDEpKXJldHVybiBZO3ZhciBYPVcudG9SZWQoTykucmVkUG93KEspO2lmKDAhPT1YLmNtcCh6KSYmMCE9PVguY21wKFUpKXtmb3IodmFyIGVlPTE7ZWU8TDtlZSsrKXtpZigwPT09KFg9WC5yZWRT''@;'; put 'put ''cXIoKSkuY21wKHopKXJldHVybiBYLmZyb21SZWQoKS5zdWJuKDEpLmdjZCh3KTtpZigwPT09WC5jbXAoVSkpYnJlYWt9aWYoZWU9PT1MKXJldHVybihYPVgucmVkU3FyKCkpLmZyb21SZWQoKS5zdWJuKDEpLmdjZCh3KX19cmV0dXJuITF9fSw1NzIyMzpmdW5jdGlvbih1ZSxxLF8peyFmdW5j''@;'; put 'put ''dGlvbihJLHkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBnKFYscCl7aWYoIVYpdGhyb3cgbmV3IEVycm9yKHB8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gQihWLHApe1Yuc3VwZXJfPXA7dmFyIGI9ZnVuY3Rpb24oKXt9O2IucHJvdG90eXBlPXAucHJvdG90eXBlLFYucHJvdG90eXBl''@;'; put 'put ''PW5ldyBiLFYucHJvdG90eXBlLmNvbnN0cnVjdG9yPVZ9ZnVuY3Rpb24gdyhWLHAsYil7aWYody5pc0JOKFYpKXJldHVybiBWO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1WJiYoKCJsZSI9PT1wfHwiYmUiPT09cCkm''@;'; put 'put ''JihiPXAscD0xMCksdGhpcy5faW5pdChWfHwwLHB8fDEwLGJ8fCJiZSIpKX12YXIgUDsib2JqZWN0Ij09dHlwZW9mIEk/SS5leHBvcnRzPXc6eS5CTj13LHcuQk49dyx3LndvcmRTaXplPTI2O3RyeXtQPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93''@;'; put 'put ''LkJ1ZmZlcjpfKDY0Njg4KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEYoVixwKXt2YXIgYj1WLmNoYXJDb2RlQXQocCk7cmV0dXJuIGI+PTY1JiZiPD03MD9iLTU1OmI+PTk3JiZiPD0xMDI/Yi04NzpiLTQ4JjE1fWZ1bmN0aW9uIE8oVixwLGIpe3ZhciB4PUYoVixiKTtyZXR1cm4gYi0xPj1w''@;'; put 'put ''JiYoeHw9RihWLGItMSk8PDQpLHh9ZnVuY3Rpb24geihWLHAsYix4KXtmb3IodmFyIEM9MCxUPU1hdGgubWluKFYubGVuZ3RoLGIpLEg9cDtIPFQ7SCsrKXt2YXIgaj1WLmNoYXJDb2RlQXQoSCktNDg7Qyo9eCxDKz1qPj00OT9qLTQ5KzEwOmo+PTE3P2otMTcrMTA6an1yZXR1cm4gQ313Lmlz''@;'; put 'put ''Qk49ZnVuY3Rpb24ocCl7cmV0dXJuIHAgaW5zdGFuY2VvZiB3fHxudWxsIT09cCYmIm9iamVjdCI9PXR5cGVvZiBwJiZwLmNvbnN0cnVjdG9yLndvcmRTaXplPT09dy53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheShwLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gcC5jbXAoYik+''@;'; put 'put ''MD9wOmJ9LHcubWluPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPDA/cDpifSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihwLGIseCl7aWYoIm51bWJlciI9PXR5cGVvZiBwKXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHAsYix4KTtpZigib2JqZWN0Ij09dHlwZW9mIHApcmV0dXJu''@;'; put 'put ''IHRoaXMuX2luaXRBcnJheShwLGIseCk7ImhleCI9PT1iJiYoYj0xNiksZyhiPT09KDB8YikmJmI+PTImJmI8PTM2KTt2YXIgQz0wOyItIj09PShwPXAudG9TdHJpbmcoKS5yZXBsYWNlKC9ccysvZywiIikpWzBdJiYoQysrLHRoaXMubmVnYXRpdmU9MSksQzxwLmxlbmd0aCYmKDE2PT09Yj90''@;'; put 'put ''aGlzLl9wYXJzZUhleChwLEMseCk6KHRoaXMuX3BhcnNlQmFzZShwLGIsQyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiLHgpKSl9LHcucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKHAsYix4KXtwPDAmJih0aGlzLm5lZ2F0aXZlPTEscD0tcCkscDw2''@;'; put 'put ''NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcF0sdGhpcy5sZW5ndGg9MSk6cDw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZwLHAvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihnKHA8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcx''@;'; put 'put ''MDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KX0sdy5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbihwLGIseCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHAubGVuZ3RoKSxw''@;'; put 'put ''Lmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChwLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0w''@;'; put 'put ''O3ZhciBULEgsaj0wO2lmKCJiZSI9PT14KWZvcihDPXAubGVuZ3RoLTEsVD0wO0M+PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQy0xXTw8OHxwW0MtMl08PDE2KTw8aiY2NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0y''@;'; put 'put ''NixUKyspO2Vsc2UgaWYoImxlIj09PXgpZm9yKEM9MCxUPTA7QzxwLmxlbmd0aDtDKz0zKXRoaXMud29yZHNbVF18PShIPXBbQ118cFtDKzFdPDw4fHBbQysyXTw8MTYpPDxqJjY3MTA4ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQr''@;'; put 'put ''Kyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHAsYix4KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKHAubGVuZ3RoLWIpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0''@;'; put 'put ''aGlzLndvcmRzW0NdPTA7dmFyIGosVD0wLEg9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xO0M+PWI7Qy09MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODtlbHNlIGZvcihDPShw''@;'; put 'put ''Lmxlbmd0aC1iKSUyPT0wP2IrMTpiO0M8cC5sZW5ndGg7Qys9MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODt0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rp''@;'; put 'put ''b24ocCxiLHgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBDPTAsVD0xO1Q8PTY3MTA4ODYzO1QqPWIpQysrO0MtLSxUPVQvYnwwO2Zvcih2YXIgSD1wLmxlbmd0aC14LGo9SCVDLEU9TWF0aC5taW4oSCxILWopK3gsbT0wLEE9eDtBPEU7QSs9QyltPXoocCxBLEErQyxi''@;'; put 'put ''KSx0aGlzLmltdWxuKFQpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pO2lmKDAhPT1qKXt2YXIgb2U9MTtmb3IobT16KHAsQSxwLmxlbmd0aCxiKSxBPTA7QTxqO0ErKylvZSo9Yjt0aGlzLmltdWxuKG9lKSx0aGlzLndvcmRzWzBdK208''@;'; put 'put ''NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKX10aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24ocCl7cC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGg7YisrKXAud29yZHNbYl09dGhpcy53b3Jk''@;'; put 'put ''c1tiXTtwLmxlbmd0aD10aGlzLmxlbmd0aCxwLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUscC5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHA9bmV3IHcobnVsbCk7cmV0dXJuIHRoaXMuY29weShwKSxwfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9u''@;'; put 'put ''KHApe2Zvcig7dGhpcy5sZW5ndGg8cDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJu''@;'; put 'put ''IHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSx3LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVk''@;'; put 'put ''PyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBOPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAwMDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAw''@;'; put 'put ''IiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCJdLEw9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2''@;'; put 'put ''LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sSz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkw''@;'; put 'put ''NjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUy''@;'; put 'put ''NTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBXKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZTt2YXIgeD1WLmxlbmd0aCtwLmxlbmd0aHwwO2IubGVuZ3RoPXgseD14LTF8MDt2YXIgQz0wfFYud29yZHNbMF0sVD0wfHAud29yZHNbMF0sSD1DKlQsRT1ILzY3MTA4ODY0''@;'; put 'put ''fDA7Yi53b3Jkc1swXT02NzEwODg2MyZIO2Zvcih2YXIgbT0xO208eDttKyspe2Zvcih2YXIgQT1FPj4+MjYsb2U9NjcxMDg4NjMmRSx0ZT1NYXRoLm1pbihtLHAubGVuZ3RoLTEpLHNlPU1hdGgubWF4KDAsbS1WLmxlbmd0aCsxKTtzZTw9dGU7c2UrKylBKz0oSD0oQz0wfFYud29yZHNbbS1z''@;'; put 'put ''ZXwwXSkqKFQ9MHxwLndvcmRzW3NlXSkrb2UpLzY3MTA4ODY0fDAsb2U9NjcxMDg4NjMmSDtiLndvcmRzW21dPTB8b2UsRT0wfEF9cmV0dXJuIDAhPT1FP2Iud29yZHNbbV09MHxFOmIubGVuZ3RoLS0sYi5zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHAsYil7dmFyIHg7''@;'; put 'put ''aWYoYj0wfGJ8fDEsMTY9PT0ocD1wfHwxMCl8fCJoZXgiPT09cCl7eD0iIjtmb3IodmFyIEM9MCxUPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj10aGlzLndvcmRzW0hdLEU9KDE2Nzc3MjE1JihqPDxDfFQpKS50b1N0cmluZygxNik7VD1qPj4+MjQtQyYxNjc3NzIxNSwoQys9Mik+''@;'; put 'put ''PTI2JiYoQy09MjYsSC0tKSx4PTAhPT1UfHxIIT09dGhpcy5sZW5ndGgtMT9OWzYtRS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAhPT1UJiYoeD1ULnRvU3RyaW5nKDE2KSt4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYocD09''@;'; put 'put ''PSgwfHApJiZwPj0yJiZwPD0zNil7dmFyIG09TFtwXSxBPUtbcF07eD0iIjt2YXIgb2U9dGhpcy5jbG9uZSgpO2ZvcihvZS5uZWdhdGl2ZT0wOyFvZS5pc1plcm8oKTspe3ZhciB0ZT1vZS5tb2RuKEEpLnRvU3RyaW5nKHApO3g9KG9lPW9lLmlkaXZuKEEpKS5pc1plcm8oKT90ZSt4Ok5bbS10''@;'; put 'put ''ZS5sZW5ndGhdK3RlK3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9ZyghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJl''@;'; put 'put ''cj1mdW5jdGlvbigpe3ZhciBwPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9wKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/cCs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMu''@;'; put 'put ''bGVuZ3RoPjImJmcoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1wOnB9LHcucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVu''@;'; put 'put ''Y3Rpb24ocCxiKXtyZXR1cm4gZyh0eXBlb2YgUDwidSIpLHRoaXMudG9BcnJheUxpa2UoUCxwLGIpfSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXkscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24ocCxi''@;'; put 'put ''LHgpe3ZhciBDPXRoaXMuYnl0ZUxlbmd0aCgpLFQ9eHx8TWF0aC5tYXgoMSxDKTtnKEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxnKFQ+MCwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBFLG0sSD0ibGUiPT09Yixq''@;'; put 'put ''PW5ldyBwKFQpLEE9dGhpcy5jbG9uZSgpO2lmKEgpe2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbbV09RTtmb3IoO208VDttKyspalttXT0wfWVsc2V7Zm9yKG09MDttPFQtQzttKyspalttXT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9''@;'; put 'put ''QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbVC1tLTFdPUV9cmV0dXJuIGp9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihwKXtyZXR1cm4gMzItTWF0aC5jbHozMihwKX06ZnVuY3Rpb24ocCl7dmFyIGI9cCx4PTA7cmV0dXJuIGI+PTQwOTYmJih4Kz0xMyxi''@;'; put 'put ''Pj4+PTEzKSxiPj02NCYmKHgrPTcsYj4+Pj03KSxiPj04JiYoeCs9NCxiPj4+PTQpLGI+PTImJih4Kz0yLGI+Pj49MikseCtifSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24ocCl7aWYoMD09PXApcmV0dXJuIDI2O3ZhciBiPXAseD0wO3JldHVybiA4MTkxJmJ8fCh4Kz0xMyxiPj4+''@;'; put 'put ''PTEzKSwxMjcmYnx8KHgrPTcsYj4+Pj03KSwxNSZifHwoeCs9NCxiPj4+PTQpLDMmYnx8KHgrPTIsYj4+Pj0yKSwxJmJ8fHgrKyx4fSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgYj10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJu''@;'; put 'put ''IDI2Kih0aGlzLmxlbmd0aC0xKStifSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBwPTAsYj0wO2I8dGhpcy5sZW5ndGg7YisrKXt2YXIgeD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2JdKTtpZihwKz14LDI2IT09''@;'; put 'put ''eClicmVha31yZXR1cm4gcH0sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHApe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHAp''@;'; put 'put ''LmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMudGVzdG4ocC0xKT90aGlzLm5vdG4ocCkuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRo''@;'; put 'put ''aXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0''@;'; put 'put ''aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cC5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGI9MDtiPHAubGVuZ3RoO2IrKyl0aGlzLndvcmRzW2JdPXRoaXMud29yZHNbYl18cC53b3Jkc1tiXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9''@;'; put 'put ''ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1b3IocCl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHApOnAuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJv''@;'; put 'put ''dG90eXBlLnVvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IocCk6cC5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHApe3ZhciBiO2I9dGhpcy5sZW5ndGg+cC5sZW5ndGg/cDp0aGlzO2Zvcih2''@;'; put 'put ''YXIgeD0wO3g8Yi5sZW5ndGg7eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jkc1t4XSZwLndvcmRzW3hdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRp''@;'; put 'put ''dmUpKSx0aGlzLml1YW5kKHApfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKHApOnAuY2xvbmUoKS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0''@;'; put 'put ''aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQocCk6cC5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihwKXt2YXIgYix4O3RoaXMubGVuZ3RoPnAubGVuZ3RoPyhiPXRoaXMseD1wKTooYj1wLHg9dGhpcyk7Zm9yKHZhciBDPTA7Qzx4Lmxlbmd0aDtD''@;'; put 'put ''KyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdXngud29yZHNbQ107aWYodGhpcyE9PWIpZm9yKDtDPGIubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPWIud29yZHNbQ107cmV0dXJuIHRoaXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihw''@;'; put 'put ''KXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IocCl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IocCk6cC5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBl''@;'; put 'put ''LnV4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihwKTpwLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj0wfE1hdGguY2Vp''@;'; put 'put ''bChwLzI2KSx4PXAlMjY7dGhpcy5fZXhwYW5kKGIpLHg+MCYmYi0tO2Zvcih2YXIgQz0wO0M8YjtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tDXTtyZXR1cm4geD4wJiYodGhpcy53b3Jkc1tDXT1+dGhpcy53b3Jkc1tDXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJp''@;'; put 'put ''cCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4ocCl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24ocCxiKXtnKCJudW1iZXIiPT10eXBlb2YgcCYmcD49MCk7dmFyIHg9cC8yNnwwLEM9cCUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgr''@;'; put 'put ''MSksdGhpcy53b3Jkc1t4XT1iP3RoaXMud29yZHNbeF18MTw8Qzp0aGlzLndvcmRzW3hdJn4oMTw8QyksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHApe3ZhciBiLHgsQztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVn''@;'; put 'put ''YXRpdmU9MCxiPXRoaXMuaXN1YihwKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiBwLm5lZ2F0aXZlPTAsYj10aGlzLmlzdWIocCkscC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCk7dGhpcy5sZW5n''@;'; put 'put ''dGg+cC5sZW5ndGg/KHg9dGhpcyxDPXApOih4PXAsQz10aGlzKTtmb3IodmFyIFQ9MCxIPTA7SDxDLmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRzW0hdKSsoMHxDLndvcmRzW0hdKStUKSxUPWI+Pj4yNjtmb3IoOzAhPT1UJiZIPHgubGVuZ3RoO0grKyl0''@;'; put 'put ''aGlzLndvcmRzW0hdPTY3MTA4ODYzJihiPSgwfHgud29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2lmKHRoaXMubGVuZ3RoPXgubGVuZ3RoLDAhPT1UKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPVQsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHghPT10aGlzKWZvcig7SDx4Lmxlbmd0aDtIKyspdGhpcy53''@;'; put 'put ''b3Jkc1tIXT14LndvcmRzW0hdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCl7dmFyIGI7cmV0dXJuIDAhPT1wLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8ocC5uZWdhdGl2ZT0wLGI9dGhpcy5zdWIocCkscC5uZWdhdGl2ZV49MSxiKTowPT09cC5uZWdhdGl2''@;'; put 'put ''ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxiPXAuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxiKTp0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZChwKTpwLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihwKXtp''@;'; put 'put ''ZigwIT09cC5uZWdhdGl2ZSl7cC5uZWdhdGl2ZT0wO3ZhciBiPXRoaXMuaWFkZChwKTtyZXR1cm4gcC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25v''@;'; put 'put ''cm1TaWduKCk7dmFyIEMsVCx4PXRoaXMuY21wKHApO2lmKDA9PT14KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt4PjA/KEM9dGhpcyxUPXApOihDPXAsVD10aGlzKTtmb3IodmFyIEg9MCxqPTA7ajxULmxlbmd0aDtqKyspSD0oYj0o''@;'; put 'put ''MHxDLndvcmRzW2pdKS0oMHxULndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2Zvcig7MCE9PUgmJmo8Qy5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tqXSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtpZigwPT09SCYmajxDLmxlbmd0aCYmQyE9''@;'; put 'put ''PXRoaXMpZm9yKDtqPEMubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPUMud29yZHNbal07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGopLEMhPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihwKXty''@;'; put 'put ''ZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIocCl9O3ZhciBZPWZ1bmN0aW9uKHAsYix4KXt2YXIgRSxtLEEsQz1wLndvcmRzLFQ9Yi53b3JkcyxIPXgud29yZHMsaj0wLG9lPTB8Q1swXSx0ZT04MTkxJm9lLHNlPW9lPj4+MTMsd2U9MHxDWzFdLFVlPTgxOTEmd2UsSmU9d2U+Pj4xMyxhdD0wfENb''@;'; put 'put ''Ml0sTWU9ODE5MSZhdCx2ZT1hdD4+PjEzLFhlPTB8Q1szXSxqZT04MTkxJlhlLERlPVhlPj4+MTMsRmU9MHxDWzRdLFJlPTgxOTEmRmUsSWU9RmU+Pj4xMyxWZT0wfENbNV0sa2U9ODE5MSZWZSxBZT1WZT4+PjEzLF90PTB8Q1s2XSxydD04MTkxJl90LFFlPV90Pj4+MTMsZG49MHxDWzddLHl0''@;'; put 'put ''PTgxOTEmZG4sTXQ9ZG4+Pj4xMyxEdD0wfENbOF0saXQ9ODE5MSZEdCwkZT1EdD4+PjEzLHR0PTB8Q1s5XSxIZT04MTkxJnR0LGR0PXR0Pj4+MTMscXQ9MHxUWzBdLFJ0PTgxOTEmcXQsUHQ9cXQ+Pj4xMyxhaT0wfFRbMV0sUXQ9ODE5MSZhaSxzbj1haT4+PjEzLFJpPTB8VFsyXSxmbj04MTkx''@;'; put 'put ''JlJpLGZ0PVJpPj4+MTMsUHI9MHxUWzNdLFp0PTgxOTEmUHIsQXQ9UHI+Pj4xMyxMbj0wfFRbNF0sc3Q9ODE5MSZMbix6dD1Mbj4+PjEzLG5pPTB8VFs1XSxXZT04MTkxJm5pLFR0PW5pPj4+MTMscnI9MHxUWzZdLGh0PTgxOTEmcnIseHQ9cnI+Pj4xMyxCbj0wfFRbN10sb249ODE5MSZCbixq''@;'; put 'put ''dD1Cbj4+PjEzLGRpPTB8VFs4XSxjbj04MTkxJmRpLHBuPWRpPj4+MTMsSWk9MHxUWzldLFh0PTgxOTEmSWksZW49SWk+Pj4xMzt4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD0xOTt2YXIgaG89KGorKEU9TWF0aC5pbXVsKHRlLFJ0KSl8MCkrKCg4MTkxJihtPSht''@;'; put 'put ''PU1hdGguaW11bCh0ZSxQdCkpK01hdGguaW11bChzZSxSdCl8MCkpPDwxMyl8MDtqPSgoQT1NYXRoLmltdWwoc2UsUHQpKSsobT4+PjEzKXwwKSsoaG8+Pj4yNil8MCxobyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoVWUsUnQpLG09KG09TWF0aC5pbXVsKFVlLFB0KSkrTWF0aC5pbXVsKEplLFJ0''@;'; put 'put ''KXwwLEE9TWF0aC5pbXVsKEplLFB0KTt2YXIgTWk9KGorKEU9RStNYXRoLmltdWwodGUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxzbil8MCkrTWF0aC5pbXVsKHNlLFF0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHNuKXwwKSsobT4+PjEzKXwwKSso''@;'; put 'put ''TWk+Pj4yNil8MCxNaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTWUsUnQpLG09KG09TWF0aC5pbXVsKE1lLFB0KSkrTWF0aC5pbXVsKHZlLFJ0KXwwLEE9TWF0aC5pbXVsKHZlLFB0KSxFPUUrTWF0aC5pbXVsKFVlLFF0KXwwLG09KG09bStNYXRoLmltdWwoVWUsc24pfDApK01hdGguaW11bChK''@;'; put 'put ''ZSxRdCl8MCxBPUErTWF0aC5pbXVsKEplLHNuKXwwO3ZhciBwcj0oaisoRT1FK01hdGguaW11bCh0ZSxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZ0KXwwKStNYXRoLmltdWwoc2UsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZnQpfDApKyhtPj4+''@;'; put 'put ''MTMpfDApKyhwcj4+PjI2KXwwLHByJj02NzEwODg2MyxFPU1hdGguaW11bChqZSxSdCksbT0obT1NYXRoLmltdWwoamUsUHQpKStNYXRoLmltdWwoRGUsUnQpfDAsQT1NYXRoLmltdWwoRGUsUHQpLEU9RStNYXRoLmltdWwoTWUsUXQpfDAsbT0obT1tK01hdGguaW11bChNZSxzbil8MCkrTWF0''@;'; put 'put ''aC5pbXVsKHZlLFF0KXwwLEE9QStNYXRoLmltdWwodmUsc24pfDAsRT1FK01hdGguaW11bChVZSxmbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZ0KXwwKStNYXRoLmltdWwoSmUsZm4pfDAsQT1BK01hdGguaW11bChKZSxmdCl8MDt2YXIgV249KGorKEU9RStNYXRoLmltdWwodGUsWnQpfDAp''@;'; put 'put ''fDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxBdCl8MCkrTWF0aC5pbXVsKHNlLFp0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLEF0KXwwKSsobT4+PjEzKXwwKSsoV24+Pj4yNil8MCxXbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoUmUsUnQpLG09KG09TWF0aC5pbXVs''@;'; put 'put ''KFJlLFB0KSkrTWF0aC5pbXVsKEllLFJ0KXwwLEE9TWF0aC5pbXVsKEllLFB0KSxFPUUrTWF0aC5pbXVsKGplLFF0KXwwLG09KG09bStNYXRoLmltdWwoamUsc24pfDApK01hdGguaW11bChEZSxRdCl8MCxBPUErTWF0aC5pbXVsKERlLHNuKXwwLEU9RStNYXRoLmltdWwoTWUsZm4pfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChNZSxmdCl8MCkrTWF0aC5pbXVsKHZlLGZuKXwwLEE9QStNYXRoLmltdWwodmUsZnQpfDAsRT1FK01hdGguaW11bChVZSxadCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLEF0KXwwKStNYXRoLmltdWwoSmUsWnQpfDAsQT1BK01hdGguaW11bChKZSxBdCl8MDt2YXIgS2k9''@;'; put 'put ''KGorKEU9RStNYXRoLmltdWwodGUsc3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx6dCl8MCkrTWF0aC5pbXVsKHNlLHN0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHp0KXwwKSsobT4+PjEzKXwwKSsoS2k+Pj4yNil8MCxLaSY9NjcxMDg4NjMsRT1NYXRo''@;'; put 'put ''LmltdWwoa2UsUnQpLG09KG09TWF0aC5pbXVsKGtlLFB0KSkrTWF0aC5pbXVsKEFlLFJ0KXwwLEE9TWF0aC5pbXVsKEFlLFB0KSxFPUUrTWF0aC5pbXVsKFJlLFF0KXwwLG09KG09bStNYXRoLmltdWwoUmUsc24pfDApK01hdGguaW11bChJZSxRdCl8MCxBPUErTWF0aC5pbXVsKEllLHNuKXww''@;'; put 'put ''LEU9RStNYXRoLmltdWwoamUsZm4pfDAsbT0obT1tK01hdGguaW11bChqZSxmdCl8MCkrTWF0aC5pbXVsKERlLGZuKXwwLEE9QStNYXRoLmltdWwoRGUsZnQpfDAsRT1FK01hdGguaW11bChNZSxadCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLEF0KXwwKStNYXRoLmltdWwodmUsWnQpfDAsQT1B''@;'; put 'put ''K01hdGguaW11bCh2ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFVlLHN0KXwwLG09KG09bStNYXRoLmltdWwoVWUsenQpfDApK01hdGguaW11bChKZSxzdCl8MCxBPUErTWF0aC5pbXVsKEplLHp0KXwwO3ZhciBRcj0oaisoRT1FK01hdGguaW11bCh0ZSxXZSl8MCl8MCkrKCg4MTkxJihtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKHRlLFR0KXwwKStNYXRoLmltdWwoc2UsV2UpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVHQpfDApKyhtPj4+MTMpfDApKyhRcj4+PjI2KXwwLFFyJj02NzEwODg2MyxFPU1hdGguaW11bChydCxSdCksbT0obT1NYXRoLmltdWwocnQsUHQpKStNYXRoLmltdWwo''@;'; put 'put ''UWUsUnQpfDAsQT1NYXRoLmltdWwoUWUsUHQpLEU9RStNYXRoLmltdWwoa2UsUXQpfDAsbT0obT1tK01hdGguaW11bChrZSxzbil8MCkrTWF0aC5pbXVsKEFlLFF0KXwwLEE9QStNYXRoLmltdWwoQWUsc24pfDAsRT1FK01hdGguaW11bChSZSxmbil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLGZ0''@;'; put 'put ''KXwwKStNYXRoLmltdWwoSWUsZm4pfDAsQT1BK01hdGguaW11bChJZSxmdCl8MCxFPUUrTWF0aC5pbXVsKGplLFp0KXwwLG09KG09bStNYXRoLmltdWwoamUsQXQpfDApK01hdGguaW11bChEZSxadCl8MCxBPUErTWF0aC5pbXVsKERlLEF0KXwwLEU9RStNYXRoLmltdWwoTWUsc3QpfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChNZSx6dCl8MCkrTWF0aC5pbXVsKHZlLHN0KXwwLEE9QStNYXRoLmltdWwodmUsenQpfDAsRT1FK01hdGguaW11bChVZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLFR0KXwwKStNYXRoLmltdWwoSmUsV2UpfDAsQT1BK01hdGguaW11bChKZSxUdCl8MDt2YXIgSnI9''@;'; put 'put ''KGorKEU9RStNYXRoLmltdWwodGUsaHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx4dCl8MCkrTWF0aC5pbXVsKHNlLGh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHh0KXwwKSsobT4+PjEzKXwwKSsoSnI+Pj4yNil8MCxKciY9NjcxMDg4NjMsRT1NYXRo''@;'; put 'put ''LmltdWwoeXQsUnQpLG09KG09TWF0aC5pbXVsKHl0LFB0KSkrTWF0aC5pbXVsKE10LFJ0KXwwLEE9TWF0aC5pbXVsKE10LFB0KSxFPUUrTWF0aC5pbXVsKHJ0LFF0KXwwLG09KG09bStNYXRoLmltdWwocnQsc24pfDApK01hdGguaW11bChRZSxRdCl8MCxBPUErTWF0aC5pbXVsKFFlLHNuKXww''@;'; put 'put ''LEU9RStNYXRoLmltdWwoa2UsZm4pfDAsbT0obT1tK01hdGguaW11bChrZSxmdCl8MCkrTWF0aC5pbXVsKEFlLGZuKXwwLEE9QStNYXRoLmltdWwoQWUsZnQpfDAsRT1FK01hdGguaW11bChSZSxadCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLEF0KXwwKStNYXRoLmltdWwoSWUsWnQpfDAsQT1B''@;'; put 'put ''K01hdGguaW11bChJZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGplLHN0KXwwLG09KG09bStNYXRoLmltdWwoamUsenQpfDApK01hdGguaW11bChEZSxzdCl8MCxBPUErTWF0aC5pbXVsKERlLHp0KXwwLEU9RStNYXRoLmltdWwoTWUsV2UpfDAsbT0obT1tK01hdGguaW11bChNZSxUdCl8MCkrTWF0''@;'; put 'put ''aC5pbXVsKHZlLFdlKXwwLEE9QStNYXRoLmltdWwodmUsVHQpfDAsRT1FK01hdGguaW11bChVZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHh0KXwwKStNYXRoLmltdWwoSmUsaHQpfDAsQT1BK01hdGguaW11bChKZSx4dCl8MDt2YXIgQmk9KGorKEU9RStNYXRoLmltdWwodGUsb24pfDAp''@;'; put 'put ''fDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxqdCl8MCkrTWF0aC5pbXVsKHNlLG9uKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGp0KXwwKSsobT4+PjEzKXwwKSsoQmk+Pj4yNil8MCxCaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoaXQsUnQpLG09KG09TWF0aC5pbXVs''@;'; put 'put ''KGl0LFB0KSkrTWF0aC5pbXVsKCRlLFJ0KXwwLEE9TWF0aC5pbXVsKCRlLFB0KSxFPUUrTWF0aC5pbXVsKHl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoeXQsc24pfDApK01hdGguaW11bChNdCxRdCl8MCxBPUErTWF0aC5pbXVsKE10LHNuKXwwLEU9RStNYXRoLmltdWwocnQsZm4pfDAsbT0o''@;'; put 'put ''bT1tK01hdGguaW11bChydCxmdCl8MCkrTWF0aC5pbXVsKFFlLGZuKXwwLEE9QStNYXRoLmltdWwoUWUsZnQpfDAsRT1FK01hdGguaW11bChrZSxadCl8MCxtPShtPW0rTWF0aC5pbXVsKGtlLEF0KXwwKStNYXRoLmltdWwoQWUsWnQpfDAsQT1BK01hdGguaW11bChBZSxBdCl8MCxFPUUrTWF0''@;'; put 'put ''aC5pbXVsKFJlLHN0KXwwLG09KG09bStNYXRoLmltdWwoUmUsenQpfDApK01hdGguaW11bChJZSxzdCl8MCxBPUErTWF0aC5pbXVsKEllLHp0KXwwLEU9RStNYXRoLmltdWwoamUsV2UpfDAsbT0obT1tK01hdGguaW11bChqZSxUdCl8MCkrTWF0aC5pbXVsKERlLFdlKXwwLEE9QStNYXRoLmlt''@;'; put 'put ''dWwoRGUsVHQpfDAsRT1FK01hdGguaW11bChNZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHh0KXwwKStNYXRoLmltdWwodmUsaHQpfDAsQT1BK01hdGguaW11bCh2ZSx4dCl8MCxFPUUrTWF0aC5pbXVsKFVlLG9uKXwwLG09KG09bStNYXRoLmltdWwoVWUsanQpfDApK01hdGguaW11bChK''@;'; put 'put ''ZSxvbil8MCxBPUErTWF0aC5pbXVsKEplLGp0KXwwO3ZhciBWaT0oaisoRT1FK01hdGguaW11bCh0ZSxjbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHBuKXwwKStNYXRoLmltdWwoc2UsY24pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UscG4pfDApKyhtPj4+''@;'; put 'put ''MTMpfDApKyhWaT4+PjI2KXwwLFZpJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxSdCksbT0obT1NYXRoLmltdWwoSGUsUHQpKStNYXRoLmltdWwoZHQsUnQpfDAsQT1NYXRoLmltdWwoZHQsUHQpLEU9RStNYXRoLmltdWwoaXQsUXQpfDAsbT0obT1tK01hdGguaW11bChpdCxzbil8MCkrTWF0''@;'; put 'put ''aC5pbXVsKCRlLFF0KXwwLEE9QStNYXRoLmltdWwoJGUsc24pfDAsRT1FK01hdGguaW11bCh5dCxmbil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZ0KXwwKStNYXRoLmltdWwoTXQsZm4pfDAsQT1BK01hdGguaW11bChNdCxmdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LFp0KXwwLG09KG09bStNYXRo''@;'; put 'put ''LmltdWwocnQsQXQpfDApK01hdGguaW11bChRZSxadCl8MCxBPUErTWF0aC5pbXVsKFFlLEF0KXwwLEU9RStNYXRoLmltdWwoa2Usc3QpfDAsbT0obT1tK01hdGguaW11bChrZSx6dCl8MCkrTWF0aC5pbXVsKEFlLHN0KXwwLEE9QStNYXRoLmltdWwoQWUsenQpfDAsRT1FK01hdGguaW11bChS''@;'; put 'put ''ZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLFR0KXwwKStNYXRoLmltdWwoSWUsV2UpfDAsQT1BK01hdGguaW11bChJZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGplLGh0KXwwLG09KG09bStNYXRoLmltdWwoamUseHQpfDApK01hdGguaW11bChEZSxodCl8MCxBPUErTWF0aC5pbXVsKERlLHh0''@;'; put 'put ''KXwwLEU9RStNYXRoLmltdWwoTWUsb24pfDAsbT0obT1tK01hdGguaW11bChNZSxqdCl8MCkrTWF0aC5pbXVsKHZlLG9uKXwwLEE9QStNYXRoLmltdWwodmUsanQpfDAsRT1FK01hdGguaW11bChVZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHBuKXwwKStNYXRoLmltdWwoSmUsY24pfDAs''@;'; put 'put ''QT1BK01hdGguaW11bChKZSxwbil8MDt2YXIgSW89KGorKEU9RStNYXRoLmltdWwodGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxlbil8MCkrTWF0aC5pbXVsKHNlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGVuKXwwKSsobT4+PjEzKXwwKSso''@;'; put 'put ''SW8+Pj4yNil8MCxJbyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUXQpLG09KG09TWF0aC5pbXVsKEhlLHNuKSkrTWF0aC5pbXVsKGR0LFF0KXwwLEE9TWF0aC5pbXVsKGR0LHNuKSxFPUUrTWF0aC5pbXVsKGl0LGZuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCgk''@;'; put 'put ''ZSxmbil8MCxBPUErTWF0aC5pbXVsKCRlLGZ0KXwwLEU9RStNYXRoLmltdWwoeXQsWnQpfDAsbT0obT1tK01hdGguaW11bCh5dCxBdCl8MCkrTWF0aC5pbXVsKE10LFp0KXwwLEE9QStNYXRoLmltdWwoTXQsQXQpfDAsRT1FK01hdGguaW11bChydCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0''@;'; put 'put ''LHp0KXwwKStNYXRoLmltdWwoUWUsc3QpfDAsQT1BK01hdGguaW11bChRZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGtlLFdlKXwwLG09KG09bStNYXRoLmltdWwoa2UsVHQpfDApK01hdGguaW11bChBZSxXZSl8MCxBPUErTWF0aC5pbXVsKEFlLFR0KXwwLEU9RStNYXRoLmltdWwoUmUsaHQpfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bChSZSx4dCl8MCkrTWF0aC5pbXVsKEllLGh0KXwwLEE9QStNYXRoLmltdWwoSWUseHQpfDAsRT1FK01hdGguaW11bChqZSxvbil8MCxtPShtPW0rTWF0aC5pbXVsKGplLGp0KXwwKStNYXRoLmltdWwoRGUsb24pfDAsQT1BK01hdGguaW11bChEZSxqdCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKE1lLGNuKXwwLG09KG09bStNYXRoLmltdWwoTWUscG4pfDApK01hdGguaW11bCh2ZSxjbil8MCxBPUErTWF0aC5pbXVsKHZlLHBuKXwwO3ZhciBPcj0oaisoRT1FK01hdGguaW11bChVZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFVlLGVuKXwwKStNYXRo''@;'; put 'put ''LmltdWwoSmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSmUsZW4pfDApKyhtPj4+MTMpfDApKyhPcj4+PjI2KXwwLE9yJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxmbiksbT0obT1NYXRoLmltdWwoSGUsZnQpKStNYXRoLmltdWwoZHQsZm4pfDAsQT1NYXRoLmltdWwoZHQs''@;'; put 'put ''ZnQpLEU9RStNYXRoLmltdWwoaXQsWnQpfDAsbT0obT1tK01hdGguaW11bChpdCxBdCl8MCkrTWF0aC5pbXVsKCRlLFp0KXwwLEE9QStNYXRoLmltdWwoJGUsQXQpfDAsRT1FK01hdGguaW11bCh5dCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHp0KXwwKStNYXRoLmltdWwoTXQsc3QpfDAs''@;'; put 'put ''QT1BK01hdGguaW11bChNdCx6dCl8MCxFPUUrTWF0aC5pbXVsKHJ0LFdlKXwwLG09KG09bStNYXRoLmltdWwocnQsVHQpfDApK01hdGguaW11bChRZSxXZSl8MCxBPUErTWF0aC5pbXVsKFFlLFR0KXwwLEU9RStNYXRoLmltdWwoa2UsaHQpfDAsbT0obT1tK01hdGguaW11bChrZSx4dCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKEFlLGh0KXwwLEE9QStNYXRoLmltdWwoQWUseHQpfDAsRT1FK01hdGguaW11bChSZSxvbil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLGp0KXwwKStNYXRoLmltdWwoSWUsb24pfDAsQT1BK01hdGguaW11bChJZSxqdCl8MCxFPUUrTWF0aC5pbXVsKGplLGNuKXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoamUscG4pfDApK01hdGguaW11bChEZSxjbil8MCxBPUErTWF0aC5pbXVsKERlLHBuKXwwO3ZhciBZaT0oaisoRT1FK01hdGguaW11bChNZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKE1lLGVuKXwwKStNYXRoLmltdWwodmUsWHQpfDApKTw8MTMpfDA7aj0o''@;'; put 'put ''KEE9QStNYXRoLmltdWwodmUsZW4pfDApKyhtPj4+MTMpfDApKyhZaT4+PjI2KXwwLFlpJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxadCksbT0obT1NYXRoLmltdWwoSGUsQXQpKStNYXRoLmltdWwoZHQsWnQpfDAsQT1NYXRoLmltdWwoZHQsQXQpLEU9RStNYXRoLmltdWwoaXQsc3QpfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bChpdCx6dCl8MCkrTWF0aC5pbXVsKCRlLHN0KXwwLEE9QStNYXRoLmltdWwoJGUsenQpfDAsRT1FK01hdGguaW11bCh5dCxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LFR0KXwwKStNYXRoLmltdWwoTXQsV2UpfDAsQT1BK01hdGguaW11bChNdCxUdCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKHJ0LGh0KXwwLG09KG09bStNYXRoLmltdWwocnQseHQpfDApK01hdGguaW11bChRZSxodCl8MCxBPUErTWF0aC5pbXVsKFFlLHh0KXwwLEU9RStNYXRoLmltdWwoa2Usb24pfDAsbT0obT1tK01hdGguaW11bChrZSxqdCl8MCkrTWF0aC5pbXVsKEFlLG9uKXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoQWUsanQpfDAsRT1FK01hdGguaW11bChSZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHBuKXwwKStNYXRoLmltdWwoSWUsY24pfDAsQT1BK01hdGguaW11bChJZSxwbil8MDt2YXIgZ289KGorKEU9RStNYXRoLmltdWwoamUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGgu''@;'; put 'put ''aW11bChqZSxlbil8MCkrTWF0aC5pbXVsKERlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKERlLGVuKXwwKSsobT4+PjEzKXwwKSsoZ28+Pj4yNil8MCxnbyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsc3QpLG09KG09TWF0aC5pbXVsKEhlLHp0KSkrTWF0aC5pbXVsKGR0LHN0''@;'; put 'put ''KXwwLEE9TWF0aC5pbXVsKGR0LHp0KSxFPUUrTWF0aC5pbXVsKGl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoaXQsVHQpfDApK01hdGguaW11bCgkZSxXZSl8MCxBPUErTWF0aC5pbXVsKCRlLFR0KXwwLEU9RStNYXRoLmltdWwoeXQsaHQpfDAsbT0obT1tK01hdGguaW11bCh5dCx4dCl8MCkr''@;'; put 'put ''TWF0aC5pbXVsKE10LGh0KXwwLEE9QStNYXRoLmltdWwoTXQseHQpfDAsRT1FK01hdGguaW11bChydCxvbil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LGp0KXwwKStNYXRoLmltdWwoUWUsb24pfDAsQT1BK01hdGguaW11bChRZSxqdCl8MCxFPUUrTWF0aC5pbXVsKGtlLGNuKXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoa2UscG4pfDApK01hdGguaW11bChBZSxjbil8MCxBPUErTWF0aC5pbXVsKEFlLHBuKXwwO3ZhciBlcj0oaisoRT1FK01hdGguaW11bChSZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFJlLGVuKXwwKStNYXRoLmltdWwoSWUsWHQpfDApKTw8MTMpfDA7aj0o''@;'; put 'put ''KEE9QStNYXRoLmltdWwoSWUsZW4pfDApKyhtPj4+MTMpfDApKyhlcj4+PjI2KXwwLGVyJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXZSksbT0obT1NYXRoLmltdWwoSGUsVHQpKStNYXRoLmltdWwoZHQsV2UpfDAsQT1NYXRoLmltdWwoZHQsVHQpLEU9RStNYXRoLmltdWwoaXQsaHQpfDAs''@;'; put 'put ''bT0obT1tK01hdGguaW11bChpdCx4dCl8MCkrTWF0aC5pbXVsKCRlLGh0KXwwLEE9QStNYXRoLmltdWwoJGUseHQpfDAsRT1FK01hdGguaW11bCh5dCxvbil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGp0KXwwKStNYXRoLmltdWwoTXQsb24pfDAsQT1BK01hdGguaW11bChNdCxqdCl8MCxFPUUr''@;'; put 'put ''TWF0aC5pbXVsKHJ0LGNuKXwwLG09KG09bStNYXRoLmltdWwocnQscG4pfDApK01hdGguaW11bChRZSxjbil8MCxBPUErTWF0aC5pbXVsKFFlLHBuKXwwO3ZhciBjbz0oaisoRT1FK01hdGguaW11bChrZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGtlLGVuKXwwKStNYXRo''@;'; put 'put ''LmltdWwoQWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoQWUsZW4pfDApKyhtPj4+MTMpfDApKyhjbz4+PjI2KXwwLGNvJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxodCksbT0obT1NYXRoLmltdWwoSGUseHQpKStNYXRoLmltdWwoZHQsaHQpfDAsQT1NYXRoLmltdWwoZHQs''@;'; put 'put ''eHQpLEU9RStNYXRoLmltdWwoaXQsb24pfDAsbT0obT1tK01hdGguaW11bChpdCxqdCl8MCkrTWF0aC5pbXVsKCRlLG9uKXwwLEE9QStNYXRoLmltdWwoJGUsanQpfDAsRT1FK01hdGguaW11bCh5dCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHBuKXwwKStNYXRoLmltdWwoTXQsY24pfDAs''@;'; put 'put ''QT1BK01hdGguaW11bChNdCxwbil8MDt2YXIgX289KGorKEU9RStNYXRoLmltdWwocnQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChydCxlbil8MCkrTWF0aC5pbXVsKFFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFFlLGVuKXwwKSsobT4+PjEzKXwwKSso''@;'; put 'put ''X28+Pj4yNil8MCxfbyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsb24pLG09KG09TWF0aC5pbXVsKEhlLGp0KSkrTWF0aC5pbXVsKGR0LG9uKXwwLEE9TWF0aC5pbXVsKGR0LGp0KSxFPUUrTWF0aC5pbXVsKGl0LGNuKXwwLG09KG09bStNYXRoLmltdWwoaXQscG4pfDApK01hdGguaW11bCgk''@;'; put 'put ''ZSxjbil8MCxBPUErTWF0aC5pbXVsKCRlLHBuKXwwO3ZhciBPbz0oaisoRT1FK01hdGguaW11bCh5dCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHl0LGVuKXwwKStNYXRoLmltdWwoTXQsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoTXQsZW4pfDApKyhtPj4+''@;'; put 'put ''MTMpfDApKyhPbz4+PjI2KXwwLE9vJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxjbiksbT0obT1NYXRoLmltdWwoSGUscG4pKStNYXRoLmltdWwoZHQsY24pfDAsQT1NYXRoLmltdWwoZHQscG4pO3ZhciBIbz0oaisoRT1FK01hdGguaW11bChpdCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0r''@;'; put 'put ''TWF0aC5pbXVsKGl0LGVuKXwwKStNYXRoLmltdWwoJGUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoJGUsZW4pfDApKyhtPj4+MTMpfDApKyhIbz4+PjI2KXwwLEhvJj02NzEwODg2Mzt2YXIgZWk9KGorKEU9TWF0aC5pbXVsKEhlLFh0KSl8MCkrKCg4MTkxJihtPShtPU1hdGgu''@;'; put 'put ''aW11bChIZSxlbikpK01hdGguaW11bChkdCxYdCl8MCkpPDwxMyl8MDtyZXR1cm4gaj0oKEE9TWF0aC5pbXVsKGR0LGVuKSkrKG0+Pj4xMyl8MCkrKGVpPj4+MjYpfDAsZWkmPTY3MTA4ODYzLEhbMF09aG8sSFsxXT1NaSxIWzJdPXByLEhbM109V24sSFs0XT1LaSxIWzVdPVFyLEhbNl09SnIs''@;'; put 'put ''SFs3XT1CaSxIWzhdPVZpLEhbOV09SW8sSFsxMF09T3IsSFsxMV09WWksSFsxMl09Z28sSFsxM109ZXIsSFsxNF09Y28sSFsxNV09X28sSFsxNl09T28sSFsxN109SG8sSFsxOF09ZWksMCE9PWomJihIWzE5XT1qLHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIGVlKFYscCxiKXtyZXR1cm4obmV3''@;'; put 'put ''IEopLm11bHAoVixwLGIpfWZ1bmN0aW9uIEooVixwKXt0aGlzLng9Vix0aGlzLnk9cH1NYXRoLmltdWx8fChZPVcpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHAsYil7dmFyIHgsQz10aGlzLmxlbmd0aCtwLmxlbmd0aDtyZXR1cm4geD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PXAubGVu''@;'; put 'put ''Z3RoP1kodGhpcyxwLGIpOkM8NjM/Vyh0aGlzLHAsYik6QzwxMDI0P2Z1bmN0aW9uIFgoVixwLGIpe2IubmVnYXRpdmU9cC5uZWdhdGl2ZV5WLm5lZ2F0aXZlLGIubGVuZ3RoPVYubGVuZ3RoK3AubGVuZ3RoO2Zvcih2YXIgeD0wLEM9MCxUPTA7VDxiLmxlbmd0aC0xO1QrKyl7dmFyIEg9QztD''@;'; put 'put ''PTA7Zm9yKHZhciBqPTY3MTA4ODYzJngsRT1NYXRoLm1pbihULHAubGVuZ3RoLTEpLG09TWF0aC5tYXgoMCxULVYubGVuZ3RoKzEpO208PUU7bSsrKXt2YXIgc2U9KDB8Vi53b3Jkc1tULW1dKSooMHxwLndvcmRzW21dKSx3ZT02NzEwODg2MyZzZTtqPTY3MTA4ODYzJih3ZT13ZStqfDApLEMr''@;'; put 'put ''PShIPShIPUgrKHNlLzY3MTA4ODY0fDApfDApKyh3ZT4+PjI2KXwwKT4+PjI2LEgmPTY3MTA4ODYzfWIud29yZHNbVF09aix4PUgsSD1DfXJldHVybiAwIT09eD9iLndvcmRzW1RdPXg6Yi5sZW5ndGgtLSxiLnN0cmlwKCl9KHRoaXMscCxiKTplZSh0aGlzLHAsYikseH0sSi5wcm90b3R5cGUu''@;'; put 'put ''bWFrZVJCVD1mdW5jdGlvbihwKXtmb3IodmFyIGI9bmV3IEFycmF5KHApLHg9dy5wcm90b3R5cGUuX2NvdW50Qml0cyhwKS0xLEM9MDtDPHA7QysrKWJbQ109dGhpcy5yZXZCaW4oQyx4LHApO3JldHVybiBifSxKLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24ocCxiLHgpe2lmKDA9PT1wfHxw''@;'; put 'put ''PT09eC0xKXJldHVybiBwO2Zvcih2YXIgQz0wLFQ9MDtUPGI7VCsrKUN8PSgxJnApPDxiLVQtMSxwPj49MTtyZXR1cm4gQ30sSi5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihwLGIseCxDLFQsSCl7Zm9yKHZhciBqPTA7ajxIO2orKylDW2pdPWJbcFtqXV0sVFtqXT14W3Bbal1dfSxKLnBy''@;'; put 'put ''b3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24ocCxiLHgsQyxULEgpe3RoaXMucGVybXV0ZShILHAsYix4LEMsVCk7Zm9yKHZhciBqPTE7ajxUO2o8PD0xKWZvcih2YXIgRT1qPDwxLG09TWF0aC5jb3MoMipNYXRoLlBJL0UpLEE9TWF0aC5zaW4oMipNYXRoLlBJL0UpLG9lPTA7b2U8VDtvZSs9''@;'; put 'put ''RSlmb3IodmFyIHRlPW0sc2U9QSx3ZT0wO3dlPGo7d2UrKyl7dmFyIFVlPXhbb2Urd2VdLEplPUNbb2Urd2VdLGF0PXhbb2Urd2Ural0sTWU9Q1tvZSt3ZStqXSx2ZT10ZSphdC1zZSpNZTtNZT10ZSpNZStzZSphdCx4W29lK3dlXT1VZSsoYXQ9dmUpLENbb2Urd2VdPUplK01lLHhbb2Urd2Ur''@;'; put 'put ''al09VWUtYXQsQ1tvZSt3ZStqXT1KZS1NZSx3ZSE9PUUmJih2ZT1tKnRlLUEqc2Usc2U9bSpzZStBKnRlLHRlPXZlKX19LEoucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKHAsYil7dmFyIHg9MXxNYXRoLm1heChiLHApLEM9MSZ4LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlUKys7''@;'; put 'put ''cmV0dXJuIDE8PFQrMStDfSxKLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24ocCxiLHgpe2lmKCEoeDw9MSkpZm9yKHZhciBDPTA7Qzx4LzI7QysrKXt2YXIgVD1wW0NdO3BbQ109cFt4LUMtMV0scFt4LUMtMV09VCxUPWJbQ10sYltDXT0tYlt4LUMtMV0sYlt4LUMtMV09LVR9fSxKLnBy''@;'; put 'put ''b3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24ocCxiKXtmb3IodmFyIHg9MCxDPTA7QzxiLzI7QysrKXt2YXIgVD04MTkyKk1hdGgucm91bmQocFsyKkMrMV0vYikrTWF0aC5yb3VuZChwWzIqQ10vYikreDtwW0NdPTY3MTA4ODYzJlQseD1UPDY3MTA4ODY0PzA6VC82NzEwODg2NHwwfXJl''@;'; put 'put ''dHVybiBwfSxKLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHAsYix4LEMpe2Zvcih2YXIgVD0wLEg9MDtIPGI7SCsrKXhbMipIXT04MTkxJihUKz0wfHBbSF0pLHhbMipIKzFdPTgxOTEmKFQ+Pj49MTMpLFQ+Pj49MTM7Zm9yKEg9MipiO0g8QzsrK0gpeFtIXT0wO2coMD09PVQpLGco''@;'; put 'put ''ISgtODE5MiZUKSl9LEoucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PTA7eDxwO3grKyliW3hdPTA7cmV0dXJuIGJ9LEoucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPTIqdGhpcy5ndWVzc0xlbjEzYihwLmxlbmd0aCxiLmxl''@;'; put 'put ''bmd0aCksVD10aGlzLm1ha2VSQlQoQyksSD10aGlzLnN0dWIoQyksaj1uZXcgQXJyYXkoQyksRT1uZXcgQXJyYXkoQyksbT1uZXcgQXJyYXkoQyksQT1uZXcgQXJyYXkoQyksb2U9bmV3IEFycmF5KEMpLHRlPW5ldyBBcnJheShDKSxzZT14LndvcmRzO3NlLmxlbmd0aD1DLHRoaXMuY29udmVy''@;'; put 'put ''dDEzYihwLndvcmRzLHAubGVuZ3RoLGosQyksdGhpcy5jb252ZXJ0MTNiKGIud29yZHMsYi5sZW5ndGgsQSxDKSx0aGlzLnRyYW5zZm9ybShqLEgsRSxtLEMsVCksdGhpcy50cmFuc2Zvcm0oQSxILG9lLHRlLEMsVCk7Zm9yKHZhciB3ZT0wO3dlPEM7d2UrKyl7dmFyIFVlPUVbd2VdKm9lW3dl''@;'; put 'put ''XS1tW3dlXSp0ZVt3ZV07bVt3ZV09RVt3ZV0qdGVbd2VdK21bd2VdKm9lW3dlXSxFW3dlXT1VZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoRSxtLEMpLHRoaXMudHJhbnNmb3JtKEUsbSxzZSxILEMsVCksdGhpcy5jb25qdWdhdGUoc2UsSCxDKSx0aGlzLm5vcm1hbGl6ZTEzYihzZSxDKSx4Lm5l''@;'; put 'put ''Z2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD1wLmxlbmd0aCtiLmxlbmd0aCx4LnN0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLHRoaXMu''@;'; put 'put ''bXVsVG8ocCxiKX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLGVlKHRoaXMscCxiKX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9u''@;'; put 'put ''ZSgpLm11bFRvKHAsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpO2Zvcih2YXIgYj0wLHg9MDt4PHRoaXMubGVuZ3RoO3grKyl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkqcCxUPSg2NzEwODg2MyZDKSsoNjcx''@;'; put 'put ''MDg4NjMmYik7Yj4+PTI2LGIrPUMvNjcxMDg4NjR8MCxiKz1UPj4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2MyZUfXJldHVybiAwIT09YiYmKHRoaXMud29yZHNbeF09Yix0aGlzLmxlbmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25l''@;'; put 'put ''KCkuaW11bG4ocCl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHApe3ZhciBiPWZ1bmN0aW9u''@;'; put 'put ''IFUoVil7Zm9yKHZhciBwPW5ldyBBcnJheShWLmJpdExlbmd0aCgpKSxiPTA7YjxwLmxlbmd0aDtiKyspe3ZhciBDPWIlMjY7cFtiXT0oVi53b3Jkc1tiLzI2fDBdJjE8PEMpPj4+Q31yZXR1cm4gcH0ocCk7aWYoMD09PWIubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIHg9dGhpcyxD''@;'; put 'put ''PTA7QzxiLmxlbmd0aCYmMD09PWJbQ107QysrLHg9eC5zcXIoKSk7aWYoKytDPGIubGVuZ3RoKWZvcih2YXIgVD14LnNxcigpO0M8Yi5sZW5ndGg7QysrLFQ9VC5zcXIoKSkwIT09YltDXSYmKHg9eC5tdWwoVCkpO3JldHVybiB4fSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24ocCl7Zygi''@;'; put 'put ''bnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBULGI9cCUyNix4PShwLWIpLzI2LEM9NjcxMDg4NjM+Pj4yNi1iPDwyNi1iO2lmKDAhPT1iKXt2YXIgSD0wO2ZvcihUPTA7VDx0aGlzLmxlbmd0aDtUKyspe3ZhciBqPXRoaXMud29yZHNbVF0mQzt0aGlzLndvcmRzW1RdPSgwfHRoaXMud29y''@;'; put 'put ''ZHNbVF0pLWo8PGJ8SCxIPWo+Pj4yNi1ifUgmJih0aGlzLndvcmRzW1RdPUgsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXgpe2ZvcihUPXRoaXMubGVuZ3RoLTE7VD49MDtULS0pdGhpcy53b3Jkc1tUK3hdPXRoaXMud29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsrKXRoaXMud29yZHNbVF09MDt0aGlz''@;'; put 'put ''Lmxlbmd0aCs9eH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4ocCl9LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihwLGIseCl7dmFyIEM7ZygibnVtYmVyIj09dHlwZW9m''@;'; put 'put ''IHAmJnA+PTApLEM9Yj8oYi1iJTI2KS8yNjowO3ZhciBUPXAlMjYsSD1NYXRoLm1pbigocC1UKS8yNix0aGlzLmxlbmd0aCksaj02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQsRT14O2lmKEMtPUgsQz1NYXRoLm1heCgwLEMpLEUpe2Zvcih2YXIgbT0wO208SDttKyspRS53b3Jkc1ttXT10aGlz''@;'; put 'put ''LndvcmRzW21dO0UubGVuZ3RoPUh9aWYoMCE9PUgpaWYodGhpcy5sZW5ndGg+SClmb3IodGhpcy5sZW5ndGgtPUgsbT0wO208dGhpcy5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09dGhpcy53b3Jkc1ttK0hdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEE9MDtmb3Io''@;'; put 'put ''bT10aGlzLmxlbmd0aC0xO20+PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIgb2U9MHx0aGlzLndvcmRzW21dO3RoaXMud29yZHNbbV09QTw8MjYtVHxvZT4+PlQsQT1vZSZqfXJldHVybiBFJiYwIT09QSYmKEUud29yZHNbRS5sZW5ndGgrK109QSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53''@;'; put 'put ''b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24ocCxiLHgpe3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybihwLGIseCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xv''@;'; put 'put ''bmUoKS5pc2hsbihwKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4ocCl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihwKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24ocCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4ocCl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8PGIpKX0sdy5wcm90''@;'; put 'put ''b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUsImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6''@;'; put 'put ''KDAhPT1iJiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9PWImJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PmI8PGIpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlz''@;'; put 'put ''LmNsb25lKCkuaW1hc2tuKHApfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwP3RoaXMuaXN1Ym4oLXApOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8''@;'; put 'put ''cD8odGhpcy53b3Jkc1swXT1wLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKHApfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24ocCl7dGhpcy53''@;'; put 'put ''b3Jkc1swXSs9cDtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPj02NzEwODg2NDtiKyspdGhpcy53b3Jkc1tiXS09NjcxMDg4NjQsYj09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tiKzFdPTE6dGhpcy53b3Jkc1tiKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1h''@;'; put 'put ''dGgubWF4KHRoaXMubGVuZ3RoLGIrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24ocCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwKXJldHVybiB0aGlzLmlhZGRuKC1wKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2''@;'; put 'put ''ZT0wLHRoaXMuaWFkZG4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09cCwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgYj0wO2I8dGhpcy5sZW5n''@;'; put 'put ''dGgmJnRoaXMud29yZHNbYl08MDtiKyspdGhpcy53b3Jkc1tiXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tiKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihwKX0sdy5wcm90b3R5cGUuc3Vibj1m''@;'; put 'put ''dW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHApfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUu''@;'; put 'put ''X2lzaGxuc3VibXVsPWZ1bmN0aW9uKHAsYix4KXt2YXIgVDt0aGlzLl9leHBhbmQocC5sZW5ndGgreCk7dmFyIEgsaj0wO2ZvcihUPTA7VDxwLmxlbmd0aDtUKyspe0g9KDB8dGhpcy53b3Jkc1tUK3hdKStqO3ZhciBFPSgwfHAud29yZHNbVF0pKmI7aj0oKEgtPTY3MTA4ODYzJkUpPj4yNikt''@;'; put 'put ''KEUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkh9Zm9yKDtUPHRoaXMubGVuZ3RoLXg7VCsrKWo9KEg9KDB8dGhpcy53b3Jkc1tUK3hdKStqKT4+MjYsdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkg7aWYoMD09PWopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoZygtMT09''@;'; put 'put ''PWopLGo9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspaj0oSD0tKDB8dGhpcy53b3Jkc1tUXSkraik+PjI2LHRoaXMud29yZHNbVF09NjcxMDg4NjMmSDtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24ocCxiKXt2YXIgeCxD''@;'; put 'put ''PXRoaXMuY2xvbmUoKSxUPXAsSD0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9KHg9MjYtdGhpcy5fY291bnRCaXRzKEgpKSYmKFQ9VC51c2hsbih4KSxDLml1c2hsbih4KSxIPTB8VC53b3Jkc1tULmxlbmd0aC0xXSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxlbmd0aDtpZigibW9kIiE9PWIpeyht''@;'; put 'put ''PW5ldyB3KG51bGwpKS5sZW5ndGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0ubGVuZ3RoKTtmb3IodmFyIEE9MDtBPG0ubGVuZ3RoO0ErKyltLndvcmRzW0FdPTB9dmFyIG9lPUMuY2xvbmUoKS5faXNobG5zdWJtdWwoVCwxLEUpOzA9PT1vZS5uZWdhdGl2ZSYmKEM9b2UsbSYmKG0ud29yZHNb''@;'; put 'put ''RV09MSkpO2Zvcih2YXIgdGU9RS0xO3RlPj0wO3RlLS0pe3ZhciBzZT02NzEwODg2NCooMHxDLndvcmRzW1QubGVuZ3RoK3RlXSkrKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZS0xXSk7Zm9yKHNlPU1hdGgubWluKHNlL0h8MCw2NzEwODg2MyksQy5faXNobG5zdWJtdWwoVCxzZSx0ZSk7MCE9PUMu''@;'; put 'put ''bmVnYXRpdmU7KXNlLS0sQy5uZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSx0ZSksQy5pc1plcm8oKXx8KEMubmVnYXRpdmVePTEpO20mJihtLndvcmRzW3RlXT1zZSl9cmV0dXJuIG0mJm0uc3RyaXAoKSxDLnN0cmlwKCksImRpdiIhPT1iJiYwIT09eCYmQy5pdXNocm4oeCkse2Rpdjpt''@;'; put 'put ''fHxudWxsLG1vZDpDfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZyghcC5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpuZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2''@;'; put 'put ''bW9kKHAsYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pYWRkKHApKSx7ZGl2OkMsbW9kOlR9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmU/KEg9dGhpcy5kaXZtb2QocC5uZWcoKSxi''@;'; put 'put ''KSwibW9kIiE9PWImJihDPUguZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOkgubW9kfSk6dGhpcy5uZWdhdGl2ZSZwLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAubmVnKCksYiksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pc3ViKHApKSx7ZGl2''@;'; put 'put ''OkguZGl2LG1vZDpUfSk6cC5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHApPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PXAubGVuZ3RoPyJkaXYiPT09Yj97ZGl2OnRoaXMuZGl2bihwLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1iP3tkaXY6bnVsbCxtb2Q6bmV3IHco''@;'; put 'put ''dGhpcy5tb2RuKHAud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYocCxiKTt2YXIgQyxULEh9LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwi''@;'; put 'put ''ZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1m''@;'; put 'put ''dW5jdGlvbihwKXt2YXIgYj10aGlzLmRpdm1vZChwKTtpZihiLm1vZC5pc1plcm8oKSlyZXR1cm4gYi5kaXY7dmFyIHg9MCE9PWIuZGl2Lm5lZ2F0aXZlP2IubW9kLmlzdWIocCk6Yi5tb2QsQz1wLnVzaHJuKDEpLFQ9cC5hbmRsbigxKSxIPXguY21wKEMpO3JldHVybiBIPDB8fDE9PT1UJiYw''@;'; put 'put ''PT09SD9iLmRpdjowIT09Yi5kaXYubmVnYXRpdmU/Yi5kaXYuaXN1Ym4oMSk6Yi5kaXYuaWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPSgxPDwyNiklcCx4PTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXg9KGIqeCsoMHx0''@;'; put 'put ''aGlzLndvcmRzW0NdKSklcDtyZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCpiO3RoaXMud29yZHNbeF09Qy9wfDAs''@;'; put 'put ''Yj1DJXB9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHApfSx3LnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBiPXRoaXMseD1wLmNs''@;'; put 'put ''b25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9bmV3IHcoMCksaj1uZXcgdygxKSxFPTA7Yi5pc0V2ZW4oKSYmeC5pc0V2ZW4oKTspYi5pdXNocm4oMSkseC5pdXNocm4oMSksKytFO2Zvcih2YXIgbT14LmNs''@;'; put 'put ''b25lKCksQT1iLmNsb25lKCk7IWIuaXNaZXJvKCk7KXtmb3IodmFyIG9lPTAsdGU9MTshKGIud29yZHNbMF0mdGUpJiZvZTwyNjsrK29lLHRlPDw9MSk7aWYob2U+MClmb3IoYi5pdXNocm4ob2UpO29lLS0gPjA7KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkmJihDLmlhZGQobSksVC5pc3ViKEEp''@;'; put 'put ''KSxDLml1c2hybigxKSxULml1c2hybigxKTtmb3IodmFyIHNlPTAsd2U9MTshKHgud29yZHNbMF0md2UpJiZzZTwyNjsrK3NlLHdlPDw9MSk7aWYoc2U+MClmb3IoeC5pdXNocm4oc2UpO3NlLS0gPjA7KShILmlzT2RkKCl8fGouaXNPZGQoKSkmJihILmlhZGQobSksai5pc3ViKEEpKSxILml1''@;'; put 'put ''c2hybigxKSxqLml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihIKSxULmlzdWIoaikpOih4LmlzdWIoYiksSC5pc3ViKEMpLGouaXN1YihUKSl9cmV0dXJue2E6SCxiOmosZ2NkOnguaXVzaGxuKEUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHApe2coMD09''@;'; put 'put ''PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBvZSxiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9eC5jbG9uZSgpO2IuY21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2''@;'; put 'put ''YXIgaj0wLEU9MTshKGIud29yZHNbMF0mRSkmJmo8MjY7KytqLEU8PD0xKTtpZihqPjApZm9yKGIuaXVzaHJuKGopO2otLSA+MDspQy5pc09kZCgpJiZDLmlhZGQoSCksQy5pdXNocm4oMSk7Zm9yKHZhciBtPTAsQT0xOyEoeC53b3Jkc1swXSZBKSYmbTwyNjsrK20sQTw8PTEpO2lmKG0+MClm''@;'; put 'put ''b3IoeC5pdXNocm4obSk7bS0tID4wOylULmlzT2RkKCkmJlQuaWFkZChIKSxULml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihUKSk6KHguaXN1YihiKSxULmlzdWIoQykpfXJldHVybihvZT0wPT09Yi5jbXBuKDEpP0M6VCkuY21wbigwKTwwJiZvZS5pYWRkKHApLG9l''@;'; put 'put ''fSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24ocCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gcC5hYnMoKTtpZihwLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBiPXRoaXMuY2xvbmUoKSx4PXAuY2xvbmUoKTtiLm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgQz0wO2Iu''@;'; put 'put ''aXNFdmVuKCkmJnguaXNFdmVuKCk7QysrKWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtiLmlzRXZlbigpOyliLml1c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXguaXVzaHJuKDEpO3ZhciBUPWIuY21wKHgpO2lmKFQ8MCl7dmFyIEg9YjtiPXgseD1IfWVsc2UgaWYoMD09''@;'; put 'put ''PVR8fDA9PT14LmNtcG4oMSkpYnJlYWs7Yi5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihDKX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5lZ2NkKHApLmEudW1vZChwKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNb''@;'; put 'put ''MF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLndvcmRzWzBdJnB9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBw''@;'; put 'put ''KTt2YXIgYj1wJTI2LHg9KHAtYikvMjYsQz0xPDxiO2lmKHRoaXMubGVuZ3RoPD14KXJldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdfD1DLHRoaXM7Zm9yKHZhciBUPUMsSD14OzAhPT1UJiZIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9MHx0aGlzLndvcmRzW0hdO1Q9KGor''@;'; put 'put ''PVQpPj4+MjYsdGhpcy53b3Jkc1tIXT1qJj02NzEwODg2M31yZXR1cm4gMCE9PVQmJih0aGlzLndvcmRzW0hdPVQsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJv''@;'; put 'put ''dG90eXBlLmNtcG49ZnVuY3Rpb24ocCl7dmFyIHgsYj1wPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFiKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZiKXJldHVybiAxO2lmKHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXg9MTtlbHNle2ImJihwPS1wKSxnKHA8PTY3MTA4ODYz''@;'; put 'put ''LCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9PT1wPzA6QzxwPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXg6eH0sdy5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKHApe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1''@;'; put 'put ''cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIDE7dmFyIGI9dGhpcy51Y21wKHApO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1iOmJ9LHcucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24ocCl7aWYodGhpcy5sZW5ndGg+cC5sZW5ndGgpcmV0dXJuIDE7''@;'; put 'put ''aWYodGhpcy5sZW5ndGg8cC5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0wfHRoaXMud29yZHNbeF0sVD0wfHAud29yZHNbeF07aWYoQyE9PVQpe0M8VD9iPS0xOkM+VCYmKGI9MSk7YnJlYWt9fXJldHVybiBifSx3LnByb3RvdHlw''@;'; put 'put ''ZS5ndG49ZnVuY3Rpb24ocCl7cmV0dXJuIDE9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmd0PWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXAocCl9LHcucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wbihwKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1''@;'; put 'put ''bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcChwKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHApe3JldHVybi0xPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5sdD1mdW5jdGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHAp''@;'; put 'put ''e3JldHVybiB0aGlzLmNtcG4ocCk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihwKXtyZXR1cm4gMD09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24ocCl7cmV0dXJuIDA9''@;'; put 'put ''PT10aGlzLmNtcChwKX0sdy5yZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBTZShwKX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksZygwPT09dGhpcy5uZWdhdGl2ZSwicmVk''@;'; put 'put ''IHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIp''@;'; put 'put ''LHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucmVkPXAsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVj''@;'; put 'put ''dGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1''@;'; put 'put ''bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJl''@;'; put 'put ''ZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTaGw9''@;'; put 'put ''ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJl''@;'; put 'put ''ZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5tdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnky''@;'; put 'put ''KHRoaXMscCksdGhpcy5yZWQuaW11bCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5w''@;'; put 'put ''cm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1''@;'; put 'put ''cm4gZyh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25s''@;'; put 'put ''eSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVy''@;'; put 'put ''aWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCYmIXAucmVkLCJyZWRQb3cobm9ybWFsTnVtKSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHApfTt2YXIgcmU9e2sy''@;'; put 'put ''NTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBpZShWLHApe3RoaXMubmFtZT1WLHRoaXMucD1uZXcgdyhwLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50''@;'; put 'put ''bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gbGUoKXtpZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIG1lKCl7aWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZm''@;'; put 'put ''ZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBfZSgpe2llLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVGUoKXtp''@;'; put 'put ''ZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIFNlKFYpe2lmKCJzdHJpbmciPT10eXBlb2YgVil7dmFyIHA9dy5fcHJpbWUoVik7dGhpcy5tPXAucCx0aGlzLnBy''@;'; put 'put ''aW1lPXB9ZWxzZSBnKFYuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Vix0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gemUoVil7U2UuY2FsbCh0aGlzLFYpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlz''@;'; put 'put ''LnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEp''@;'; put 'put ''LmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9aWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgcD1uZXcgdyhudWxsKTtyZXR1cm4gcC53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMu''@;'; put 'put ''bi8xMykpLHB9LGllLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDtkb3t0aGlzLnNwbGl0KGIsdGhpcy50bXApLHg9KGI9KGI9dGhpcy5pbXVsSyhiKSkuaWFkZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHg+dGhpcy5uKTt2YXIgQz14PHRoaXMubj8tMTpi''@;'; put 'put ''LnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUM/KGIud29yZHNbMF09MCxiLmxlbmd0aD0xKTpDPjA/Yi5pc3ViKHRoaXMucCk6dm9pZCAwIT09Yi5zdHJpcD9iLnN0cmlwKCk6Yi5fc3RyaXAoKSxifSxpZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxiKXtwLml1c2hybih0aGlzLm4sMCxi''@;'; put 'put ''KX0saWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3JldHVybiBwLmltdWwodGhpcy5rKX0sQihsZSxpZSksbGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7Zm9yKHZhciB4PTQxOTQzMDMsQz1NYXRoLm1pbihwLmxlbmd0aCw5KSxUPTA7VDxDO1QrKyliLndvcmRzW1RdPXAu''@;'; put 'put ''d29yZHNbVF07aWYoYi5sZW5ndGg9QyxwLmxlbmd0aDw9OSlyZXR1cm4gcC53b3Jkc1swXT0wLHZvaWQocC5sZW5ndGg9MSk7dmFyIEg9cC53b3Jkc1s5XTtmb3IoYi53b3Jkc1tiLmxlbmd0aCsrXT1IJngsVD0xMDtUPHAubGVuZ3RoO1QrKyl7dmFyIGo9MHxwLndvcmRzW1RdO3Aud29yZHNb''@;'; put 'put ''VC0xMF09KGomeCk8PDR8SD4+PjIyLEg9an1wLndvcmRzW1QtMTBdPUg+Pj49MjIscC5sZW5ndGgtPTA9PT1IJiZwLmxlbmd0aD4xMD8xMDo5fSxsZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7cC53b3Jkc1twLmxlbmd0aF09MCxwLndvcmRzW3AubGVuZ3RoKzFdPTAscC5sZW5ndGgr''@;'; put 'put ''PTI7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0wfHAud29yZHNbeF07cC53b3Jkc1t4XT02NzEwODg2MyYoYis9OTc3KkMpLGI9NjQqQysoYi82NzEwODg2NHwwKX1yZXR1cm4gMD09PXAud29yZHNbcC5sZW5ndGgtMV0mJihwLmxlbmd0aC0tLDA9PT1wLndvcmRzW3Au''@;'; put 'put ''bGVuZ3RoLTFdJiZwLmxlbmd0aC0tKSxwfSxCKG1lLGllKSxCKF9lLGllKSxCKFRlLGllKSxUZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0xOSooMHxwLndvcmRzW3hdKStiLFQ9NjcxMDg4NjMmQztDPj4+PTI2LHAu''@;'; put 'put ''d29yZHNbeF09VCxiPUN9cmV0dXJuIDAhPT1iJiYocC53b3Jkc1twLmxlbmd0aCsrXT1iKSxwfSx3Ll9wcmltZT1mdW5jdGlvbihwKXtpZihyZVtwXSlyZXR1cm4gcmVbcF07dmFyIGI7aWYoImsyNTYiPT09cCliPW5ldyBsZTtlbHNlIGlmKCJwMjI0Ij09PXApYj1uZXcgbWU7ZWxzZSBpZigi''@;'; put 'put ''cDE5MiI9PT1wKWI9bmV3IF9lO2Vsc2V7aWYoInAyNTUxOSIhPT1wKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK3ApO2I9bmV3IFRlfXJldHVybiByZVtwXT1iLGJ9LFNlLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlLCJyZWQgd29ya3Mg''@;'; put 'put ''b25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHAsYil7ZyghKHAubmVnYXRpdmV8Yi5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhw''@;'; put 'put ''LnJlZCYmcC5yZWQ9PT1iLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UocCkuX2ZvcmNlUmVkKHRoaXMpOnAudW1vZCh0aGlzLm0pLl9mb3JjZVJl''@;'; put 'put ''ZCh0aGlzKX0sU2UucHJvdG90eXBlLm5lZz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pc1plcm8oKT9wLmNsb25lKCk6dGhpcy5tLnN1YihwKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5hZGQoYik7cmV0''@;'; put 'put ''dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxiKTt2YXIgeD1wLmlhZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9''@;'; put 'put ''LFNlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5zdWIoYik7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnky''@;'; put 'put ''KHAsYik7dmFyIHg9cC5pc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnNobD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92ZXJpZnkxKHApLHRoaXMuaW1vZChwLnVzaGxuKGIpKX0sU2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24o''@;'; put 'put ''cCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIpLHRoaXMuaW1vZChwLmltdWwoYikpfSxTZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIocCxiKSx0aGlzLmltb2QocC5tdWwoYikpfSxTZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihwKXtyZXR1''@;'; put 'put ''cm4gdGhpcy5pbXVsKHAscC5jbG9uZSgpKX0sU2UucHJvdG90eXBlLnNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5tdWwocCxwKX0sU2UucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24ocCl7aWYocC5pc1plcm8oKSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBiPXRoaXMubS5hbmRsbigzKTtpZihn''@;'; put 'put ''KGIlMj09MSksMz09PWIpe3ZhciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3cocCx4KX1mb3IodmFyIEM9dGhpcy5tLnN1Ym4oMSksVD0wOyFDLmlzWmVybygpJiYwPT09Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJuKDEpO2coIUMuaXNaZXJvKCkpO3Zh''@;'; put 'put ''ciBIPW5ldyB3KDEpLnRvUmVkKHRoaXMpLGo9SC5yZWROZWcoKSxFPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxtPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobT1uZXcgdygyKm0qbSkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG0sRSkuY21wKGopOyltLnJlZElBZGQoaik7Zm9yKHZhciBB''@;'; put 'put ''PXRoaXMucG93KG0sQyksb2U9dGhpcy5wb3cocCxDLmFkZG4oMSkuaXVzaHJuKDEpKSx0ZT10aGlzLnBvdyhwLEMpLHNlPVQ7MCE9PXRlLmNtcChIKTspe2Zvcih2YXIgd2U9dGUsVWU9MDswIT09d2UuY21wKEgpO1VlKyspd2U9d2UucmVkU3FyKCk7ZyhVZTxzZSk7dmFyIEplPXRoaXMucG93''@;'; put 'put ''KEEsbmV3IHcoMSkuaXVzaGxuKHNlLVVlLTEpKTtvZT1vZS5yZWRNdWwoSmUpLEE9SmUucmVkU3FyKCksdGU9dGUucmVkTXVsKEEpLHNlPVVlfXJldHVybiBvZX0sU2UucHJvdG90eXBlLmludm09ZnVuY3Rpb24ocCl7dmFyIGI9cC5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWIubmVnYXRp''@;'; put 'put ''dmU/KGIubmVnYXRpdmU9MCx0aGlzLmltb2QoYikucmVkTmVnKCkpOnRoaXMuaW1vZChiKX0sU2UucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwLGIpe2lmKGIuaXNaZXJvKCkpcmV0dXJuIG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1iLmNtcG4oMSkpcmV0dXJuIHAuY2xvbmUoKTt2YXIg''@;'; put 'put ''Qz1uZXcgQXJyYXkoMTYpO0NbMF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sxXT1wO2Zvcih2YXIgVD0yO1Q8Qy5sZW5ndGg7VCsrKUNbVF09dGhpcy5tdWwoQ1tULTFdLHApO3ZhciBIPUNbMF0saj0wLEU9MCxtPWIuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1tJiYobT0yNiksVD1iLmxlbmd0''@;'; put 'put ''aC0xO1Q+PTA7VC0tKXtmb3IodmFyIEE9Yi53b3Jkc1tUXSxvZT1tLTE7b2U+PTA7b2UtLSl7dmFyIHRlPUE+Pm9lJjE7SCE9PUNbMF0mJihIPXRoaXMuc3FyKEgpKSwwIT09dGV8fDAhPT1qPyhqPDw9MSxqfD10ZSwoND09KytFfHwwPT09VCYmMD09PW9lKSYmKEg9dGhpcy5tdWwoSCxDW2pd''@;'; put 'put ''KSxFPTAsaj0wKSk6RT0wfW09MjZ9cmV0dXJuIEh9LFNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7dmFyIGI9cC51bW9kKHRoaXMubSk7cmV0dXJuIGI9PT1wP2IuY2xvbmUoKTpifSxTZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9cC5jbG9uZSgp''@;'; put 'put ''O3JldHVybiBiLnJlZD1udWxsLGJ9LHcubW9udD1mdW5jdGlvbihwKXtyZXR1cm4gbmV3IHplKHApfSxCKHplLFNlKSx6ZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC51c2hsbih0aGlzLnNoaWZ0KSl9LHplLnByb3RvdHlwZS5jb252ZXJ0RnJv''@;'; put 'put ''bT1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmltb2QocC5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGIucmVkPW51bGwsYn0semUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtpZihwLmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBwLndvcmRzWzBdPTAscC5sZW5ndGg9MSxwO3ZhciB4''@;'; put 'put ''PXAuaW11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNoaWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8''@;'; put 'put ''MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSx6ZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4gbmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB4PXAubXVsKGIpLEM9eC5tYXNrbih0aGlzLnNoaWZ0''@;'; put 'put ''KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VS''@;'; put 'put ''ZWQodGhpcyl9LHplLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19KHVlPV8ubm1kKHVlKSx0aGlzKX0sMzkyMTA6dWU9PntmdW5jdGlvbiBxKF8sSSl7aWYoIV8pdGhyb3cg''@;'; put 'put ''bmV3IEVycm9yKEl8fCJBc3NlcnRpb24gZmFpbGVkIil9dWUuZXhwb3J0cz1xLHEuZXF1YWw9ZnVuY3Rpb24oSSx5LGcpe2lmKEkhPXkpdGhyb3cgbmV3IEVycm9yKGd8fCJBc3NlcnRpb24gZmFpbGVkOiAiK0krIiAhPSAiK3kpfX0sMjE4MzI6KHVlLHEpPT57InVzZSBzdHJpY3QiO3ZhciBf''@;'; put 'put ''PXE7ZnVuY3Rpb24geShCKXtyZXR1cm4gMT09PUIubGVuZ3RoPyIwIitCOkJ9ZnVuY3Rpb24gZyhCKXtmb3IodmFyIHc9IiIsUD0wO1A8Qi5sZW5ndGg7UCsrKXcrPXkoQltQXS50b1N0cmluZygxNikpO3JldHVybiB3fV8udG9BcnJheT1mdW5jdGlvbiBJKEIsdyl7aWYoQXJyYXkuaXNBcnJh''@;'; put 'put ''eShCKSlyZXR1cm4gQi5zbGljZSgpO2lmKCFCKXJldHVybltdO3ZhciBQPVtdO2lmKCJzdHJpbmciIT10eXBlb2YgQil7Zm9yKHZhciBGPTA7RjxCLmxlbmd0aDtGKyspUFtGXT0wfEJbRl07cmV0dXJuIFB9aWYoImhleCI9PT13KWZvcigoQj1CLnJlcGxhY2UoL1teYS16MC05XSsvZ2ksIiIp''@;'; put 'put ''KS5sZW5ndGglMiE9MCYmKEI9IjAiK0IpLEY9MDtGPEIubGVuZ3RoO0YrPTIpUC5wdXNoKHBhcnNlSW50KEJbRl0rQltGKzFdLDE2KSk7ZWxzZSBmb3IoRj0wO0Y8Qi5sZW5ndGg7RisrKXt2YXIgTz1CLmNoYXJDb2RlQXQoRiksej1PPj44LE49MjU1Jk87ej9QLnB1c2goeixOKTpQLnB1c2go''@;'; put 'put ''Til9cmV0dXJuIFB9LF8uemVybzI9eSxfLnRvSGV4PWcsXy5lbmNvZGU9ZnVuY3Rpb24odyxQKXtyZXR1cm4iaGV4Ij09PVA/Zyh3KTp3fX0sMTE1NDQ6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJhZiIse21vbnRoczoiSmFudWFy''@;'; put 'put ''aWVfRmVicnVhcmllX01hYXJ0X0FwcmlsX01laV9KdW5pZV9KdWxpZV9BdWd1c3R1c19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NcnRfQXByX01laV9KdW5fSnVsX0F1Z19TZXBfT2t0X05vdl9EZXMiLnNwbGl0''@;'; put 'put ''KCJfIiksd2Vla2RheXM6IlNvbmRhZ19NYWFuZGFnX0RpbnNkYWdfV29lbnNkYWdfRG9uZGVyZGFnX1ZyeWRhZ19TYXRlcmRhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTb25fTWFhX0Rpbl9Xb2VfRG9uX1ZyeV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNvX01hX0RpX1dv''@;'; put 'put ''X0RvX1ZyX1NhIi5zcGxpdCgiXyIpLG1lcmlkaWVtUGFyc2U6L3ZtfG5tL2ksaXNQTTpmdW5jdGlvbihnKXtyZXR1cm4vXm5tJC9pLnRlc3QoZyl9LG1lcmlkaWVtOmZ1bmN0aW9uKGcsQix3KXtyZXR1cm4gZzwxMj93PyJ2bSI6IlZNIjp3PyJubSI6Ik5NIn0sbG9uZ0RhdGVGb3JtYXQ6e0xU''@;'; put 'put ''OiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVmFuZGFnIG9tXSBMVCIsbmV4dERheToiW01ceGY0cmUg''@;'; put 'put ''b21dIExUIixuZXh0V2VlazoiZGRkZCBbb21dIExUIixsYXN0RGF5OiJbR2lzdGVyIG9tXSBMVCIsbGFzdFdlZWs6IltMYWFzXSBkZGRkIFtvbV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im9vciAlcyIscGFzdDoiJXMgZ2VsZWRlIixzOiInbiBwYWFyIHNla29u''@;'; put 'put ''ZGVzIixzczoiJWQgc2Vrb25kZXMiLG06IiduIG1pbnV1dCIsbW06IiVkIG1pbnV0ZSIsaDoiJ24gdXVyIixoaDoiJWQgdXJlIixkOiInbiBkYWciLGRkOiIlZCBkYWUiLE06IiduIG1hYW5kIixNTToiJWQgbWFhbmRlIix5OiInbiBqYWFyIix5eToiJWQgamFhciJ9LGRheU9mTW9udGhPcmRp''@;'; put 'put ''bmFsUGFyc2U6L1xkezEsMn0oc3RlfGRlKS8sb3JkaW5hbDpmdW5jdGlvbihnKXtyZXR1cm4gZysoMT09PWd8fDg9PT1nfHxnPj0yMD8ic3RlIjoiZGUiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KF8oOTc1ODYpKX0sNTIxNTU6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSl7InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciB5PWZ1bmN0aW9uKEYpe3JldHVybiAwPT09Rj8wOjE9PT1GPzE6Mj09PUY/MjpGJTEwMD49MyYmRiUxMDA8PTEwPzM6RiUxMDA+PTExPzQ6NX0sZz17czpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5Iiwi''@;'; put 'put ''XHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjJi''@;'; put 'put ''XHUwNjQ4XHUwNjI3XHUwNjQ2IiwiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IiwiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5Il0sbTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IiwiXHUw''@;'; put 'put ''NjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjJmXHUw''@;'; put 'put ''NjQyXHUwNjI3XHUwNjI2XHUwNjQyIiwiJWQgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IiwiJWQgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5Il0saDpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IiwiXHUwNjMz''@;'; put 'put ''XHUwNjI3XHUwNjM5XHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJh''@;'; put 'put ''IiwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IiwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5Il0sZDpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjRhXHUwNjQ4XHUwNjQ1IiwiXHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIs''@;'; put 'put ''WyJcdTA2NGFcdTA2NDhcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2NGFcdTA2NDhcdTA2NDVcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IiwiJWQgXHUwNjRhXHUwNjQ4XHUwNjQ1XHUwNjRiXHUwNjI3IiwiJWQgXHUwNjRhXHUwNjQ4XHUwNjQ1Il0sTTpbIlx1''@;'; put 'put ''MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjM0XHUwNjQ3XHUwNjMxIiwiXHUwNjM0XHUwNjQ3XHUwNjMxIFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2MzRcdTA2NDdcdTA2MzFcdTA2MjdcdTA2NDYiLCJcdTA2MzRcdTA2NDdcdTA2MzFcdTA2NGFcdTA2NDYiXSwi''@;'; put 'put ''JWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIiwiJWQgXHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjI3IiwiJWQgXHUwNjM0XHUwNjQ3XHUwNjMxIl0seTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjM5XHUwNjI3XHUwNjQ1IiwiXHUwNjM5XHUwNjI3XHUwNjQ1IFx1MDY0''@;'; put 'put ''OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2MzlcdTA2MjdcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2MzlcdTA2MjdcdTA2NDVcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjM5XHUwNjQ4XHUwNjI3XHUwNjQ1IiwiJWQgXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjRiXHUwNjI3IiwiJWQg''@;'; put 'put ''XHUwNjM5XHUwNjI3XHUwNjQ1Il19LEI9ZnVuY3Rpb24oRil7cmV0dXJuIGZ1bmN0aW9uKE8seixOLEwpe3ZhciBLPXkoTyksVT1nW0ZdW3koTyldO3JldHVybiAyPT09SyYmKFU9VVt6PzA6MV0pLFUucmVwbGFjZSgvJWQvaSxPKX19LHc9WyJcdTA2MmNcdTA2MjdcdTA2NDZcdTA2NDFcdTA2''@;'; put 'put ''NGEiLCJcdTA2NDFcdTA2NGFcdTA2NDFcdTA2MzFcdTA2NGEiLCJcdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzMiLCJcdTA2MjNcdTA2NDFcdTA2MzFcdTA2NGFcdTA2NDQiLCJcdTA2NDVcdTA2MjdcdTA2NGEiLCJcdTA2MmNcdTA2NDhcdTA2MjdcdTA2NDYiLCJcdTA2MmNcdTA2NDhcdTA2NGFc''@;'; put 'put ''dTA2NDRcdTA2NGFcdTA2MjkiLCJcdTA2MjNcdTA2NDhcdTA2MmEiLCJcdTA2MzNcdTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzEiLCJcdTA2NDZcdTA2NDhcdTA2NDFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MmZc''@;'; put 'put ''dTA2NGFcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEiXTtJLmRlZmluZUxvY2FsZSgiYXItZHoiLHttb250aHM6dyxtb250aHNTaG9ydDp3LHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1''@;'; put 'put ''MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1''@;'; put 'put ''MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjIzXHUwNjMxXHUw''@;'; put 'put ''NjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMi''@;'; put 'put ''LnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkQvXHUyMDBmTS9cdTIwMGZZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkg''@;'; put 'put ''SEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2MzV8XHUwNjQ1Lyxpc1BNOmZ1bmN0aW9uKEYpe3JldHVybiJcdTA2NDUiPT09Rn0sbWVyaWRpZW06ZnVuY3Rpb24oRixPLHope3JldHVybiBGPDEyPyJcdTA2MzUiOiJcdTA2NDUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1''@;'; put 'put ''MDY0YVx1MDY0OFx1MDY0NSBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDY0Ylx1MDYyNyBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUw''@;'; put 'put ''NjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2Mzlc''@;'; put 'put ''dTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDYyOFx1MDYzOVx1MDYyZiAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2''@;'; put 'put ''XHUwNjMwICVzIixzOkIoInMiKSxzczpCKCJzIiksbTpCKCJtIiksbW06QigibSIpLGg6QigiaCIpLGhoOkIoImgiKSxkOkIoImQiKSxkZDpCKCJkIiksTTpCKCJNIiksTU06QigiTSIpLHk6QigieSIpLHl5OkIoInkiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihGKXtyZXR1cm4gRi5yZXBsYWNl''@;'; put 'put ''KC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6MCxkb3k6NH19KX0oXyg5NzU4NikpfSw1MzU4MzpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImFyLWt3Iix7bW9udGhzOiJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzFfXHUw''@;'; put 'put ''NjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFc''@;'; put 'put ''dTA2NDhcdTA2MzJfXHUwNjNhXHUwNjM0XHUwNjJhX1x1MDYzNFx1MDYyYVx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDYyY1x1MDY0Nlx1MDYyOFx1MDYzMSIuc3Bs''@;'; put 'put ''aXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9c''@;'; put 'put ''dTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4XHUwNjMyX1x1MDYzYVx1MDYzNFx1MDYyYV9cdTA2MzRcdTA2MmFcdTA2NDZcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0''@;'; put 'put ''OFx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2MmNcdTA2NDZcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2NDRcdTA2MjVcdTA2MmFcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJi''@;'; put 'put ''XHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0''@;'; put 'put ''NFx1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjdcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjJhXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2MzFcdTA2MjhcdTA2MzlcdTA2Mjdc''@;'; put 'put ''dTA2MjFfXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDYyZF9cdTA2NDZfXHUwNjJiX1x1MDYzMV9cdTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVr''@;'; put 'put ''ZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6''@;'; put 'put ''IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZcdTA2MjcgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYy''@;'; put 'put ''N1x1MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0NVx1MDYzMyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUw''@;'; put 'put ''NjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2NDFcdTA2NGEgJXMiLHBhc3Q6Ilx1MDY0NVx1''@;'; put 'put ''MDY0Nlx1MDYzMCAlcyIsczoiXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IixzczoiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IixtOiJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLG1tOiIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLGg6Ilx1MDYz''@;'; put 'put ''M1x1MDYyN1x1MDYzOVx1MDYyOSIsaGg6IiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsZDoiXHUwNjRhXHUwNjQ4XHUwNjQ1IixkZDoiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IixNOiJcdTA2MzRcdTA2NDdcdTA2MzEiLE1NOiIlZCBcdTA2MjNcdTA2MzRcdTA2NDdc''@;'; put 'put ''dTA2MzEiLHk6Ilx1MDYzM1x1MDY0Nlx1MDYyOSIseXk6IiVkIFx1MDYzM1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDYyYSJ9LHdlZWs6e2RvdzowLGRveToxMn19KX0oXyg5NzU4NikpfSw0MTYzODpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIHk9ezE6IjEi''@;'; put 'put ''LDI6IjIiLDM6IjMiLDQ6IjQiLDU6IjUiLDY6IjYiLDc6IjciLDg6IjgiLDk6IjkiLDA6IjAifSxnPWZ1bmN0aW9uKE8pe3JldHVybiAwPT09Tz8wOjE9PT1PPzE6Mj09PU8/MjpPJTEwMD49MyYmTyUxMDA8PTEwPzM6TyUxMDA+PTExPzQ6NX0sQj17czpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBc''@;'; put 'put ''dTA2NDVcdTA2NDYgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IiwiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MmJcdTA2''@;'; put 'put ''MjdcdTA2NDZcdTA2NGFcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IiwiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IiwiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5Il0sbTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2''@;'; put 'put ''NDVcdTA2NDYgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IiwiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MmZcdTA2NDJc''@;'; put 'put ''dTA2NGFcdTA2NDJcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIiwiJWQgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IiwiJWQgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5Il0saDpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBc''@;'; put 'put ''dTA2NDVcdTA2NDYgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IiwiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFcdTA2''@;'; put 'put ''NGFcdTA2NDYiXSwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJhIiwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IiwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5Il0sZDpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjRhXHUwNjQ4XHUwNjQ1Iiwi''@;'; put 'put ''XHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2NGFcdTA2NDhcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2NGFcdTA2NDhcdTA2NDVcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IiwiJWQgXHUwNjRhXHUwNjQ4XHUwNjQ1''@;'; put 'put ''XHUwNjRiXHUwNjI3IiwiJWQgXHUwNjRhXHUwNjQ4XHUwNjQ1Il0sTTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjM0XHUwNjQ3XHUwNjMxIiwiXHUwNjM0XHUwNjQ3XHUwNjMxIFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2MzRcdTA2NDdcdTA2MzFcdTA2''@;'; put 'put ''MjdcdTA2NDYiLCJcdTA2MzRcdTA2NDdcdTA2MzFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIiwiJWQgXHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjI3IiwiJWQgXHUwNjM0XHUwNjQ3XHUwNjMxIl0seTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYg''@;'; put 'put ''XHUwNjM5XHUwNjI3XHUwNjQ1IiwiXHUwNjM5XHUwNjI3XHUwNjQ1IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2MzlcdTA2MjdcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2MzlcdTA2MjdcdTA2NDVcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjM5XHUwNjQ4XHUwNjI3XHUw''@;'; put 'put ''NjQ1IiwiJWQgXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjRiXHUwNjI3IiwiJWQgXHUwNjM5XHUwNjI3XHUwNjQ1Il19LHc9ZnVuY3Rpb24oTyl7cmV0dXJuIGZ1bmN0aW9uKHosTixMLEspe3ZhciBVPWcoeiksVz1CW09dW2coeildO3JldHVybiAyPT09VSYmKFc9V1tOPzA6MV0pLFcucmVwbGFj''@;'; put 'put ''ZSgvJWQvaSx6KX19LFA9WyJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzEiLCJcdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzEiLCJcdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzMiLCJcdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDQiLCJcdTA2NDVcdTA2MjdcdTA2''@;'; put 'put ''NGFcdTA2NDgiLCJcdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDgiLCJcdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDgiLCJcdTA2MjNcdTA2M2FcdTA2MzNcdTA2MzdcdTA2MzMiLCJcdTA2MzNcdTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MjNcdTA2NDNcdTA2''@;'; put 'put ''MmFcdTA2NDhcdTA2MjhcdTA2MzEiLCJcdTA2NDZcdTA2NDhcdTA2NDFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEiXTtJLmRlZmluZUxvY2FsZSgiYXItbHkiLHttb250aHM6UCxtb250aHNTaG9ydDpQLHdlZWtkYXlzOiJcdTA2Mjdc''@;'; put 'put ''dTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFf''@;'; put 'put ''XHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyNVx1MDYyYlx1''@;'; put 'put ''MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxp''@;'; put 'put ''dCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkQvXHUyMDBmTS9cdTIwMGZZ''@;'; put 'put ''WVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2MzV8XHUwNjQ1Lyxpc1BNOmZ1bmN0aW9uKE8pe3JldHVybiJcdTA2NDUiPT09T30sbWVyaWRpZW06ZnVuY3Rpb24oTyx6''@;'; put 'put ''LE4pe3JldHVybiBPPDEyPyJcdTA2MzUiOiJcdTA2NDUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1''@;'; put 'put ''MDYyZlx1MDY0Ylx1MDYyNyBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJb''@;'; put 'put ''XHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNl''@;'; put 'put ''OiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDYyOFx1MDYzOVx1MDYyZiAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOncoInMiKSxzczp3KCJzIiksbTp3KCJtIiksbW06dygibSIpLGg6dygiaCIpLGhoOncoImgiKSxkOncoImQiKSxkZDp3KCJkIiksTTp3KCJNIiks''@;'; put 'put ''TU06dygiTSIpLHk6dygieSIpLHl5OncoInkiKX0scHJlcGFyc2U6ZnVuY3Rpb24oTyl7cmV0dXJuIE8ucmVwbGFjZSgvXHUwNjBjL2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihPKXtyZXR1cm4gTy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKHope3JldHVybiB5W3pdfSkucmVwbGFjZSgv''@;'; put 'put ''LC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjYsZG95OjEyfX0pfShfKDk3NTg2KSl9LDg3ODIzOmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiYXItbWEiLHttb250aHM6Ilx1MDY0YVx1MDY0Nlx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2''@;'; put 'put ''NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyM1x1MDYyOFx1MDYzMVx1MDY0YVx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFfXHUwNjRhXHUwNjQ4XHUwNjQ2XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0NFx1MDY0YVx1''@;'; put 'put ''MDY0OFx1MDYzMl9cdTA2M2FcdTA2MzRcdTA2MmFfXHUwNjM0XHUwNjJhXHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyM1x1MDY0M1x1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NDZcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjJjXHUwNjQ2XHUwNjI4XHUwNjMxIi5zcGxp''@;'; put 'put ''dCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQxXHUwNjI4XHUwNjMxXHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1''@;'; put 'put ''MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDhcdTA2MzJfXHUwNjNhXHUwNjM0XHUwNjJhX1x1MDYzNFx1MDYyYVx1MDY0Nlx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4''@;'; put 'put ''XHUwNjQ2XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDYyY1x1MDY0Nlx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyN1x1MDY0NFx1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MjdcdTA2NDRcdTA2MmJc''@;'; put 'put ''dTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MjdcdTA2NDRcdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjI3XHUwNjQ0''@;'; put 'put ''XHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDYyN1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1''@;'; put 'put ''MDYyMV9cdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNjJkX1x1MDY0Nl9cdTA2MmJfXHUwNjMxX1x1MDYyZV9cdTA2MmNfXHUwNjMzIi5zcGxpdCgiXyIpLHdlZWtk''@;'; put 'put ''YXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToi''@;'; put 'put ''W1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1MDYzYVx1MDYyZlx1MDYyNyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3''@;'; put 'put ''XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2''@;'; put 'put ''MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDY0MVx1MDY0YSAlcyIscGFzdDoiXHUwNjQ1XHUw''@;'; put 'put ''NjQ2XHUwNjMwICVzIixzOiJcdTA2MmJcdTA2NDhcdTA2MjdcdTA2NDYiLHNzOiIlZCBcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MjkiLG06Ilx1MDYyZlx1MDY0Mlx1MDY0YVx1MDY0Mlx1MDYyOSIsbW06IiVkIFx1MDYyZlx1MDY0Mlx1MDYyN1x1MDYyNlx1MDY0MiIsaDoiXHUwNjMz''@;'; put 'put ''XHUwNjI3XHUwNjM5XHUwNjI5IixoaDoiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJhIixkOiJcdTA2NGFcdTA2NDhcdTA2NDUiLGRkOiIlZCBcdTA2MjNcdTA2NGFcdTA2MjdcdTA2NDUiLE06Ilx1MDYzNFx1MDY0N1x1MDYzMSIsTU06IiVkIFx1MDYyM1x1MDYzNFx1MDY0N1x1''@;'; put 'put ''MDYzMSIseToiXHUwNjMzXHUwNjQ2XHUwNjI5Iix5eToiJWQgXHUwNjMzXHUwNjQ2XHUwNjQ4XHUwNjI3XHUwNjJhIn0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KF8oOTc1ODYpKX0sNzcxMjpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIHk9ezE6Ilx1MDY2''@;'; put 'put ''MSIsMjoiXHUwNjYyIiwzOiJcdTA2NjMiLDQ6Ilx1MDY2NCIsNToiXHUwNjY1Iiw2OiJcdTA2NjYiLDc6Ilx1MDY2NyIsODoiXHUwNjY4Iiw5OiJcdTA2NjkiLDA6Ilx1MDY2MCJ9LGc9eyJcdTA2NjEiOiIxIiwiXHUwNjYyIjoiMiIsIlx1MDY2MyI6IjMiLCJcdTA2NjQiOiI0IiwiXHUwNjY1''@;'; put 'put ''IjoiNSIsIlx1MDY2NiI6IjYiLCJcdTA2NjciOiI3IiwiXHUwNjY4IjoiOCIsIlx1MDY2OSI6IjkiLCJcdTA2NjAiOiIwIn07SS5kZWZpbmVMb2NhbGUoImFyLXBzIix7bW9udGhzOiJcdTA2NDNcdTA2MjdcdTA2NDZcdTA2NDhcdTA2NDYgXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjI3XHUwNjQ2''@;'; put 'put ''XHUwNjRhX1x1MDYzNFx1MDYyOFx1MDYyN1x1MDYzN19cdTA2MjJcdTA2MzBcdTA2MjdcdTA2MzFfXHUwNjQ2XHUwNjRhXHUwNjMzXHUwNjI3XHUwNjQ2X1x1MDYyM1x1MDY0YVx1MDY1MVx1MDYyN1x1MDYzMV9cdTA2MmRcdTA2MzJcdTA2NGFcdTA2MzFcdTA2MjdcdTA2NDZfXHUwNjJhXHUw''@;'; put 'put ''NjQ1XHUwNjUxXHUwNjQ4XHUwNjMyX1x1MDYyMlx1MDYyOF9cdTA2MjNcdTA2NGFcdTA2NDRcdTA2NDhcdTA2NDRfXHUwNjJhXHUwNjM0XHUwNjMxXHUwNjRhIFx1MDYyN1x1MDY0NFx1MDYyM1x1MDY0OFx1MDY1MVx1MDY0NF9cdTA2MmFcdTA2MzRcdTA2MzFcdTA2NGFcdTA2NDYgXHUwNjI3''@;'; put 'put ''XHUwNjQ0XHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhX1x1MDY0M1x1MDYyN1x1MDY0Nlx1MDY0OFx1MDY0NiBcdTA2MjdcdTA2NDRcdTA2MjNcdTA2NDhcdTA2NTFcdTA2NDQiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDY0M1x1MDY2Ml9cdTA2MzRcdTA2MjhcdTA2MjdcdTA2MzdfXHUw''@;'; put 'put ''NjIyXHUwNjMwXHUwNjI3XHUwNjMxX1x1MDY0Nlx1MDY0YVx1MDYzM1x1MDYyN1x1MDY0Nl9cdTA2MjNcdTA2NGFcdTA2NTFcdTA2MjdcdTA2MzFfXHUwNjJkXHUwNjMyXHUwNjRhXHUwNjMxXHUwNjI3XHUwNjQ2X1x1MDYyYVx1MDY0NVx1MDY1MVx1MDY0OFx1MDYzMl9cdTA2MjJcdTA2Mjhf''@;'; put 'put ''XHUwNjIzXHUwNjRhXHUwNjQ0XHUwNjQ4XHUwNjQ0X1x1MDYyYVx1MDY2MV9cdTA2MmFcdTA2NjJfXHUwNjQzXHUwNjYxIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2''@;'; put 'put ''X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYz''@;'; put 'put ''OVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyNVx1MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjIzXHUwNjMx''@;'; put 'put ''XHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJhIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2''@;'; put 'put ''MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9''@;'; put 'put ''LG1lcmlkaWVtUGFyc2U6L1x1MDYzNXxcdTA2NDUvLGlzUE06ZnVuY3Rpb24odyl7cmV0dXJuIlx1MDY0NSI9PT13fSxtZXJpZGllbTpmdW5jdGlvbih3LFAsRil7cmV0dXJuIHc8MTI/Ilx1MDYzNSI6Ilx1MDY0NSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ0XHUwNjRhXHUw''@;'; put 'put ''NjQ4XHUwNjQ1IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0RGF5OiJbXHUwNjNhXHUwNjJmXHUwNjI3IFx1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixuZXh0''@;'; put 'put ''V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxhc3REYXk6IltcdTA2MjNcdTA2NDVcdTA2MzMgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLGxh''@;'; put 'put ''c3RXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNjQxXHUwNjRhICVzIixwYXN0OiJcdTA2NDVcdTA2NDZcdTA2MzAgJXMiLHM6Ilx1MDYy''@;'; put 'put ''Ylx1MDY0OFx1MDYyN1x1MDY0NiIsc3M6IiVkIFx1MDYyYlx1MDYyN1x1MDY0Nlx1MDY0YVx1MDYyOSIsbToiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IixtbToiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIixoOiJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjkiLGho''@;'; put 'put ''OiIlZCBcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjdcdTA2MmEiLGQ6Ilx1MDY0YVx1MDY0OFx1MDY0NSIsZGQ6IiVkIFx1MDYyM1x1MDY0YVx1MDYyN1x1MDY0NSIsTToiXHUwNjM0XHUwNjQ3XHUwNjMxIixNTToiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIix5OiJcdTA2MzNcdTA2NDZc''@;'; put 'put ''dTA2MjkiLHl5OiIlZCBcdTA2MzNcdTA2NDZcdTA2NDhcdTA2MjdcdTA2MmEifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9bXHUwNjYzXHUwNjY0XHUwNjY1XHUwNjY2XHUwNjY3XHUwNjY4XHUwNjY5XHUwNjYwXS9nLGZ1bmN0aW9uKFApe3JldHVybiBnW1BdfSku''@;'; put 'put ''c3BsaXQoIiIpLnJldmVyc2UoKS5qb2luKCIiKS5yZXBsYWNlKC9bXHUwNjYxXHUwNjYyXSg/IVtcdTA2MmFcdTA2NDNdKS9nLGZ1bmN0aW9uKFApe3JldHVybiBnW1BdfSkuc3BsaXQoIiIpLnJldmVyc2UoKS5qb2luKCIiKS5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1''@;'; put 'put ''bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oUCl7cmV0dXJuIHlbUF19KS5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oXyg5NzU4NikpfSw3ODI2MTpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7''@;'; put 'put ''dmFyIHk9ezE6Ilx1MDY2MSIsMjoiXHUwNjYyIiwzOiJcdTA2NjMiLDQ6Ilx1MDY2NCIsNToiXHUwNjY1Iiw2OiJcdTA2NjYiLDc6Ilx1MDY2NyIsODoiXHUwNjY4Iiw5OiJcdTA2NjkiLDA6Ilx1MDY2MCJ9LGc9eyJcdTA2NjEiOiIxIiwiXHUwNjYyIjoiMiIsIlx1MDY2MyI6IjMiLCJcdTA2''@;'; put 'put ''NjQiOiI0IiwiXHUwNjY1IjoiNSIsIlx1MDY2NiI6IjYiLCJcdTA2NjciOiI3IiwiXHUwNjY4IjoiOCIsIlx1MDY2OSI6IjkiLCJcdTA2NjAiOiIwIn07SS5kZWZpbmVMb2NhbGUoImFyLXNhIix7bW9udGhzOiJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzFfXHUwNjQxXHUwNjI4XHUw''@;'; put 'put ''NjMxXHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhXHUwNjQ4X1x1MDY0YVx1MDY0OFx1MDY0Nlx1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDhf''@;'; put 'put ''XHUwNjIzXHUwNjNhXHUwNjMzXHUwNjM3XHUwNjMzX1x1MDYzM1x1MDYyOFx1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQxXHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDY0YVx1MDYzM1x1MDY0''@;'; put 'put ''NVx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNjRhXHUwNjQ2XHUwNjI3XHUwNjRhXHUwNjMxX1x1MDY0MVx1MDYyOFx1MDYzMVx1MDYyN1x1MDY0YVx1MDYzMV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIzXHUwNjI4XHUwNjMxXHUwNjRhXHUwNjQ0X1x1''@;'; put 'put ''MDY0NVx1MDYyN1x1MDY0YVx1MDY0OF9cdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDhfXHUwNjRhXHUwNjQ4XHUwNjQ0XHUwNjRhXHUwNjQ4X1x1MDYyM1x1MDYzYVx1MDYzM1x1MDYzN1x1MDYzM19cdTA2MzNcdTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQz''@;'; put 'put ''XHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2NDRc''@;'; put 'put ''dTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjQ0XHUwNjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNf''@;'; put 'put ''XHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1MDYzM1x1MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyYlx1MDY0NFx1MDYyN1x1''@;'; put 'put ''MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDYyZF9cdTA2NDZfXHUw''@;'; put 'put ''NjJiX1x1MDYzMV9cdTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixM''@;'; put 'put ''TExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjM1fFx1MDY0NS8saXNQTTpmdW5jdGlvbih3KXtyZXR1cm4iXHUwNjQ1Ij09PXd9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxGKXtyZXR1cm4gdzwxMj8iXHUwNjM1IjoiXHUwNjQ1In0sY2FsZW5kYXI6e3Nh''@;'; put 'put ''bWVEYXk6IltcdTA2MjdcdTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZcdTA2MjcgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYz''@;'; put 'put ''M1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0NVx1MDYzMyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUw''@;'; put 'put ''NjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2NDFcdTA2NGEgJXMiLHBhc3Q6Ilx1''@;'; put 'put ''MDY0NVx1MDY0Nlx1MDYzMCAlcyIsczoiXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IixzczoiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IixtOiJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLG1tOiIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLGg6''@;'; put 'put ''Ilx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOSIsaGg6IiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsZDoiXHUwNjRhXHUwNjQ4XHUwNjQ1IixkZDoiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IixNOiJcdTA2MzRcdTA2NDdcdTA2MzEiLE1NOiIlZCBcdTA2MjNcdTA2MzRc''@;'; put 'put ''dTA2NDdcdTA2MzEiLHk6Ilx1MDYzM1x1MDY0Nlx1MDYyOSIseXk6IiVkIFx1MDYzM1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDYyYSJ9LHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1tcdTA2NjFcdTA2NjJcdTA2NjNcdTA2NjRcdTA2NjVcdTA2NjZcdTA2NjdcdTA2Njhc''@;'; put 'put ''dTA2NjlcdTA2NjBdL2csZnVuY3Rpb24oUCl7cmV0dXJuIGdbUF19KS5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oUCl7cmV0dXJuIHlbUF19KS5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVr''@;'; put 'put ''Ontkb3c6MCxkb3k6Nn19KX0oXyg5NzU4NikpfSw1NjcwMzpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImFyLXRuIix7bW9udGhzOiJcdTA2MmNcdTA2MjdcdTA2NDZcdTA2NDFcdTA2NGFfXHUwNjQxXHUwNjRhXHUwNjQxXHUwNjMx''@;'; put 'put ''XHUwNjRhX1x1MDY0NVx1MDYyN1x1MDYzMVx1MDYzM19cdTA2MjNcdTA2NDFcdTA2MzFcdTA2NGFcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjRhX1x1MDYyY1x1MDY0OFx1MDYyN1x1MDY0Nl9cdTA2MmNcdTA2NDhcdTA2NGFcdTA2NDRcdTA2NGFcdTA2MjlfXHUwNjIzXHUwNjQ4XHUwNjJhX1x1''@;'; put 'put ''MDYzM1x1MDYyOFx1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MjNcdTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzFfXHUwNjQ2XHUwNjQ4XHUwNjQxXHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyZlx1MDY0YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSIuc3BsaXQoIl8iKSxtb250aHNT''@;'; put 'put ''aG9ydDoiXHUwNjJjXHUwNjI3XHUwNjQ2XHUwNjQxXHUwNjRhX1x1MDY0MVx1MDY0YVx1MDY0MVx1MDYzMVx1MDY0YV9cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIzXHUwNjQxXHUwNjMxXHUwNjRhXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9cdTA2MmNcdTA2NDhcdTA2MjdcdTA2''@;'; put 'put ''NDZfXHUwNjJjXHUwNjQ4XHUwNjRhXHUwNjQ0XHUwNjRhXHUwNjI5X1x1MDYyM1x1MDY0OFx1MDYyYV9cdTA2MzNcdTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjIzXHUwNjQzXHUwNjJhXHUwNjQ4XHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0MVx1MDY0NVx1MDYyOFx1''@;'; put 'put ''MDYzMV9cdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDYyN1x1MDY0NFx1MDYyM1x1MDYyZFx1MDYyZl9cdTA2MjdcdTA2NDRcdTA2MjVcdTA2MmJcdTA2NDZcdTA2NGFcdTA2NDZfXHUwNjI3XHUwNjQ0XHUwNjJiXHUwNjQ0XHUw''@;'; put 'put ''NjI3XHUwNjJiXHUwNjI3XHUwNjIxX1x1MDYyN1x1MDY0NFx1MDYyM1x1MDYzMVx1MDYyOFx1MDYzOVx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzNfXHUwNjI3XHUwNjQ0XHUwNjJjXHUwNjQ1XHUwNjM5XHUwNjI5X1x1MDYyN1x1MDY0NFx1MDYzM1x1''@;'; put 'put ''MDYyOFx1MDYyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2MjdcdTA2MjFfXHUw''@;'; put 'put ''NjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDYyZF9cdTA2NDZfXHUwNjJiX1x1MDYzMV9cdTA2MmVfXHUwNjJjX1x1MDYzMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNl''@;'; put 'put ''RXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2Mjdc''@;'; put 'put ''dTA2NDRcdTA2NGFcdTA2NDhcdTA2NDUgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLG5leHREYXk6IltcdTA2M2FcdTA2MmZcdTA2MjcgXHUwNjM5XHUwNjQ0XHUwNjQ5IFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1''@;'; put 'put ''MDYyOV0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbGFzdERheToiW1x1MDYyM1x1MDY0NVx1MDYzMyBcdTA2MzlcdTA2NDRcdTA2NDkgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5''@;'; put 'put ''XHUwNjI5XSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0NFx1MDY0OSBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA2NDFcdTA2NGEgJXMiLHBhc3Q6Ilx1MDY0NVx1MDY0Nlx1MDYz''@;'; put 'put ''MCAlcyIsczoiXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IixzczoiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IixtOiJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MjkiLG1tOiIlZCBcdTA2MmZcdTA2NDJcdTA2MjdcdTA2MjZcdTA2NDIiLGg6Ilx1MDYzM1x1MDYyN1x1''@;'; put 'put ''MDYzOVx1MDYyOSIsaGg6IiVkIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyN1x1MDYyYSIsZDoiXHUwNjRhXHUwNjQ4XHUwNjQ1IixkZDoiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IixNOiJcdTA2MzRcdTA2NDdcdTA2MzEiLE1NOiIlZCBcdTA2MjNcdTA2MzRcdTA2NDdcdTA2MzEiLHk6''@;'; put 'put ''Ilx1MDYzM1x1MDY0Nlx1MDYyOSIseXk6IiVkIFx1MDYzM1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDYyYSJ9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShfKDk3NTg2KSl9LDMzMTA4OmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT17MToiXHUwNjYxIiwyOiJc''@;'; put 'put ''dTA2NjIiLDM6Ilx1MDY2MyIsNDoiXHUwNjY0Iiw1OiJcdTA2NjUiLDY6Ilx1MDY2NiIsNzoiXHUwNjY3Iiw4OiJcdTA2NjgiLDk6Ilx1MDY2OSIsMDoiXHUwNjYwIn0sZz17Ilx1MDY2MSI6IjEiLCJcdTA2NjIiOiIyIiwiXHUwNjYzIjoiMyIsIlx1MDY2NCI6IjQiLCJcdTA2NjUiOiI1Iiwi''@;'; put 'put ''XHUwNjY2IjoiNiIsIlx1MDY2NyI6IjciLCJcdTA2NjgiOiI4IiwiXHUwNjY5IjoiOSIsIlx1MDY2MCI6IjAifSxCPWZ1bmN0aW9uKHope3JldHVybiAwPT09ej8wOjE9PT16PzE6Mj09PXo/Mjp6JTEwMD49MyYmeiUxMDA8PTEwPzM6eiUxMDA+PTExPzQ6NX0sdz17czpbIlx1MDYyM1x1MDY0''@;'; put 'put ''Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IiwiXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MmFcdTA2MjdcdTA2NDYiLCJc''@;'; put 'put ''dTA2MmJcdTA2MjdcdTA2NDZcdTA2NGFcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjJiXHUwNjQ4XHUwNjI3XHUwNjQ2IiwiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5IiwiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNjRhXHUwNjI5Il0sbTpbIlx1MDYyM1x1MDY0Mlx1''@;'; put 'put ''MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IiwiXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2''@;'; put 'put ''MmZcdTA2NDJcdTA2NGFcdTA2NDJcdTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjJmXHUwNjQyXHUwNjI3XHUwNjI2XHUwNjQyIiwiJWQgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5IiwiJWQgXHUwNjJmXHUwNjQyXHUwNjRhXHUwNjQyXHUwNjI5Il0saDpbIlx1MDYyM1x1MDY0''@;'; put 'put ''Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IiwiXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZlx1MDYyOSIsWyJcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MmFcdTA2MjdcdTA2NDYiLCJcdTA2MzNcdTA2MjdcdTA2Mzlc''@;'; put 'put ''dTA2MmFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI3XHUwNjJhIiwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5IiwiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5Il0sZDpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjRhXHUwNjQ4''@;'; put 'put ''XHUwNjQ1IiwiXHUwNjRhXHUwNjQ4XHUwNjQ1IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2NGFcdTA2NDhcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2NGFcdTA2NDhcdTA2NDVcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjRhXHUwNjI3XHUwNjQ1IiwiJWQgXHUwNjRhXHUw''@;'; put 'put ''NjQ4XHUwNjQ1XHUwNjRiXHUwNjI3IiwiJWQgXHUwNjRhXHUwNjQ4XHUwNjQ1Il0sTTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2NDVcdTA2NDYgXHUwNjM0XHUwNjQ3XHUwNjMxIiwiXHUwNjM0XHUwNjQ3XHUwNjMxIFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2MzRcdTA2NDdc''@;'; put 'put ''dTA2MzFcdTA2MjdcdTA2NDYiLCJcdTA2MzRcdTA2NDdcdTA2MzFcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjM0XHUwNjQ3XHUwNjMxIiwiJWQgXHUwNjM0XHUwNjQ3XHUwNjMxXHUwNjI3IiwiJWQgXHUwNjM0XHUwNjQ3XHUwNjMxIl0seTpbIlx1MDYyM1x1MDY0Mlx1MDY0NCBcdTA2''@;'; put 'put ''NDVcdTA2NDYgXHUwNjM5XHUwNjI3XHUwNjQ1IiwiXHUwNjM5XHUwNjI3XHUwNjQ1IFx1MDY0OFx1MDYyN1x1MDYyZFx1MDYyZiIsWyJcdTA2MzlcdTA2MjdcdTA2NDVcdTA2MjdcdTA2NDYiLCJcdTA2MzlcdTA2MjdcdTA2NDVcdTA2NGFcdTA2NDYiXSwiJWQgXHUwNjIzXHUwNjM5XHUwNjQ4''@;'; put 'put ''XHUwNjI3XHUwNjQ1IiwiJWQgXHUwNjM5XHUwNjI3XHUwNjQ1XHUwNjRiXHUwNjI3IiwiJWQgXHUwNjM5XHUwNjI3XHUwNjQ1Il19LFA9ZnVuY3Rpb24oeil7cmV0dXJuIGZ1bmN0aW9uKE4sTCxLLFUpe3ZhciBXPUIoTiksWT13W3pdW0IoTildO3JldHVybiAyPT09VyYmKFk9WVtMPzA6MV0p''@;'; put 'put ''LFkucmVwbGFjZSgvJWQvaSxOKX19LEY9WyJcdTA2NGFcdTA2NDZcdTA2MjdcdTA2NGFcdTA2MzEiLCJcdTA2NDFcdTA2MjhcdTA2MzFcdTA2MjdcdTA2NGFcdTA2MzEiLCJcdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzMiLCJcdTA2MjNcdTA2MjhcdTA2MzFcdTA2NGFcdTA2NDQiLCJcdTA2NDVc''@;'; put 'put ''dTA2MjdcdTA2NGFcdTA2NDgiLCJcdTA2NGFcdTA2NDhcdTA2NDZcdTA2NGFcdTA2NDgiLCJcdTA2NGFcdTA2NDhcdTA2NDRcdTA2NGFcdTA2NDgiLCJcdTA2MjNcdTA2M2FcdTA2MzNcdTA2MzdcdTA2MzMiLCJcdTA2MzNcdTA2MjhcdTA2MmFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MjNc''@;'; put 'put ''dTA2NDNcdTA2MmFcdTA2NDhcdTA2MjhcdTA2MzEiLCJcdTA2NDZcdTA2NDhcdTA2NDFcdTA2NDVcdTA2MjhcdTA2MzEiLCJcdTA2MmZcdTA2NGFcdTA2MzNcdTA2NDVcdTA2MjhcdTA2MzEiXTtJLmRlZmluZUxvY2FsZSgiYXIiLHttb250aHM6Rixtb250aHNTaG9ydDpGLHdlZWtkYXlzOiJc''@;'; put 'put ''dTA2MjdcdTA2NDRcdTA2MjNcdTA2MmRcdTA2MmZfXHUwNjI3XHUwNjQ0XHUwNjI1XHUwNjJiXHUwNjQ2XHUwNjRhXHUwNjQ2X1x1MDYyN1x1MDY0NFx1MDYyYlx1MDY0NFx1MDYyN1x1MDYyYlx1MDYyN1x1MDYyMV9cdTA2MjdcdTA2NDRcdTA2MjNcdTA2MzFcdTA2MjhcdTA2MzlcdTA2Mjdc''@;'; put 'put ''dTA2MjFfXHUwNjI3XHUwNjQ0XHUwNjJlXHUwNjQ1XHUwNjRhXHUwNjMzX1x1MDYyN1x1MDY0NFx1MDYyY1x1MDY0NVx1MDYzOVx1MDYyOV9cdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjhcdTA2MmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNjIzXHUwNjJkXHUwNjJmX1x1MDYyNVx1''@;'; put 'put ''MDYyYlx1MDY0Nlx1MDY0YVx1MDY0Nl9cdTA2MmJcdTA2NDRcdTA2MjdcdTA2MmJcdTA2MjdcdTA2MjFfXHUwNjIzXHUwNjMxXHUwNjI4XHUwNjM5XHUwNjI3XHUwNjIxX1x1MDYyZVx1MDY0NVx1MDY0YVx1MDYzM19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2MjlfXHUwNjMzXHUwNjI4XHUwNjJh''@;'; put 'put ''Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2MmRfXHUwNjQ2X1x1MDYyYl9cdTA2MzFfXHUwNjJlX1x1MDYyY19cdTA2MzMiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkQvXHUyMDBmTS9c''@;'; put 'put ''dTIwMGZZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2MzV8XHUwNjQ1Lyxpc1BNOmZ1bmN0aW9uKHope3JldHVybiJcdTA2NDUiPT09en0sbWVyaWRpZW06ZnVuY3Rp''@;'; put 'put ''b24oeixOLEwpe3JldHVybiB6PDEyPyJcdTA2MzUiOiJcdTA2NDUifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyN1x1MDY0NFx1MDY0YVx1MDY0OFx1MDY0NSBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dERheToiW1x1''@;'; put 'put ''MDYzYVx1MDYyZlx1MDY0Ylx1MDYyNyBcdTA2MzlcdTA2NDZcdTA2MmYgXHUwNjI3XHUwNjQ0XHUwNjMzXHUwNjI3XHUwNjM5XHUwNjI5XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0''@;'; put 'put ''RGF5OiJbXHUwNjIzXHUwNjQ1XHUwNjMzIFx1MDYzOVx1MDY0Nlx1MDYyZiBcdTA2MjdcdTA2NDRcdTA2MzNcdTA2MjdcdTA2MzlcdTA2MjldIExUIixsYXN0V2VlazoiZGRkZCBbXHUwNjM5XHUwNjQ2XHUwNjJmIFx1MDYyN1x1MDY0NFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyOV0gTFQiLHNh''@;'; put 'put ''bWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDYyOFx1MDYzOVx1MDYyZiAlcyIscGFzdDoiXHUwNjQ1XHUwNjQ2XHUwNjMwICVzIixzOlAoInMiKSxzczpQKCJzIiksbTpQKCJtIiksbW06UCgibSIpLGg6UCgiaCIpLGhoOlAoImgiKSxkOlAoImQiKSxkZDpQKCJkIiksTTpQ''@;'; put 'put ''KCJNIiksTU06UCgiTSIpLHk6UCgieSIpLHl5OlAoInkiKX0scHJlcGFyc2U6ZnVuY3Rpb24oeil7cmV0dXJuIHoucmVwbGFjZSgvW1x1MDY2MVx1MDY2Mlx1MDY2M1x1MDY2NFx1MDY2NVx1MDY2Nlx1MDY2N1x1MDY2OFx1MDY2OVx1MDY2MF0vZyxmdW5jdGlvbihOKXtyZXR1cm4gZ1tOXX0p''@;'; put 'put ''LnJlcGxhY2UoL1x1MDYwYy9nLCIsIil9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oeil7cmV0dXJuIHoucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihOKXtyZXR1cm4geVtOXX0pLnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2Rvdzo2LGRveToxMn19KX0oXyg5NzU4NikpfSw0NjUwODpmdW5j''@;'; put 'put ''dGlvbih1ZSxxLF8peyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIHk9ezE6Ii1pbmNpIiw1OiItaW5jaSIsODoiLWluY2kiLDcwOiItaW5jaSIsODA6Ii1pbmNpIiwyOiItbmNpIiw3OiItbmNpIiwyMDoiLW5jaSIsNTA6Ii1uY2kiLDM6Ii1ceGZjbmNceGZjIiw0OiItXHhmY25jXHhm''@;'; put 'put ''YyIsMTAwOiItXHhmY25jXHhmYyIsNjoiLW5jXHUwMTMxIiw5OiItdW5jdSIsMTA6Ii11bmN1IiwzMDoiLXVuY3UiLDYwOiItXHUwMTMxbmNcdTAxMzEiLDkwOiItXHUwMTMxbmNcdTAxMzEifTtJLmRlZmluZUxvY2FsZSgiYXoiLHttb250aHM6InlhbnZhcl9mZXZyYWxfbWFydF9hcHJlbF9t''@;'; put 'put ''YXlfaXl1bl9peXVsX2F2cXVzdF9zZW50eWFicl9va3R5YWJyX25veWFicl9kZWthYnIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Inlhbl9mZXZfbWFyX2Fwcl9tYXlfaXluX2l5bF9hdnFfc2VuX29rdF9ub3lfZGVrIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJCYXphcl9CYXphciBlcnRcdTAy''@;'; put 'put ''NTlzaV9ceGM3XHUwMjU5clx1MDE1Zlx1MDI1OW5iXHUwMjU5IGF4XHUwMTVmYW1cdTAxMzFfXHhjN1x1MDI1OXJcdTAxNWZcdTAyNTluYlx1MDI1OV9DXHhmY21cdTAyNTkgYXhcdTAxNWZhbVx1MDEzMV9DXHhmY21cdTAyNTlfXHUwMTVlXHUwMjU5bmJcdTAyNTkiLnNwbGl0KCJfIiksd2Vl''@;'; put 'put ''a2RheXNTaG9ydDoiQmF6X0J6RV9ceGM3QXhfXHhjN1x1MDI1OXJfQ0F4X0NceGZjbV9cdTAxNWVcdTAyNTluIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJCel9CRV9ceGM3QV9ceGM3XHUwMjU5X0NBX0NceGZjX1x1MDE1ZVx1MDI1OSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6''@;'; put 'put ''ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbYnVnXHhmY24gc2Fh''@;'; put 'put ''dF0gTFQiLG5leHREYXk6IltzYWJhaCBzYWF0XSBMVCIsbmV4dFdlZWs6IltnXHUwMjU5bFx1MDI1OW4gaFx1MDI1OWZ0XHUwMjU5XSBkZGRkIFtzYWF0XSBMVCIsbGFzdERheToiW2RceGZjblx1MDI1OW5dIExUIixsYXN0V2VlazoiW2tlXHhlN1x1MDI1OW4gaFx1MDI1OWZ0XHUwMjU5XSBk''@;'; put 'put ''ZGRkIFtzYWF0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgc29ucmEiLHBhc3Q6IiVzIFx1MDI1OXZ2XHUwMjU5bCIsczoiYmlyIG5lXHhlN1x1MDI1OSBzYW5peVx1MDI1OSIsc3M6IiVkIHNhbml5XHUwMjU5IixtOiJiaXIgZFx1MDI1OXFpcVx1MDI1OSIs''@;'; put 'put ''bW06IiVkIGRcdTAyNTlxaXFcdTAyNTkiLGg6ImJpciBzYWF0IixoaDoiJWQgc2FhdCIsZDoiYmlyIGdceGZjbiIsZGQ6IiVkIGdceGZjbiIsTToiYmlyIGF5IixNTToiJWQgYXkiLHk6ImJpciBpbCIseXk6IiVkIGlsIn0sbWVyaWRpZW1QYXJzZTovZ2VjXHUwMjU5fHNcdTAyNTloXHUwMjU5''@;'; put 'put ''cnxnXHhmY25kXHhmY3p8YXhcdTAxNWZhbS8saXNQTTpmdW5jdGlvbihCKXtyZXR1cm4vXihnXHhmY25kXHhmY3p8YXhcdTAxNWZhbSkkLy50ZXN0KEIpfSxtZXJpZGllbTpmdW5jdGlvbihCLHcsUCl7cmV0dXJuIEI8ND8iZ2VjXHUwMjU5IjpCPDEyPyJzXHUwMjU5aFx1MDI1OXIiOkI8MTc/''@;'; put 'put ''ImdceGZjbmRceGZjeiI6ImF4XHUwMTVmYW0ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTAxMzFuY1x1MDEzMXxpbmNpfG5jaXxceGZjbmNceGZjfG5jXHUwMTMxfHVuY3UpLyxvcmRpbmFsOmZ1bmN0aW9uKEIpe2lmKDA9PT1CKXJldHVybiBCKyItXHUwMTMxbmNcdTAx''@;'; put 'put ''MzEiO3ZhciB3PUIlMTA7cmV0dXJuIEIrKHlbd118fHlbQiUxMDAtd118fHlbQj49MTAwPzEwMDpudWxsXSl9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShfKDk3NTg2KSl9LDE2NzY2OmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBnKHcsUCxGKXty''@;'; put 'put ''ZXR1cm4ibSI9PT1GP1A/Ilx1MDQ0NVx1MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZFx1MDQzMCI6Ilx1MDQ0NVx1MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZFx1MDQ0MyI6ImgiPT09Rj9QPyJcdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2RcdTA0MzAiOiJcdTA0''@;'; put 'put ''MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2RcdTA0NDMiOncrIiAiK2Z1bmN0aW9uIHkodyxQKXt2YXIgRj13LnNwbGl0KCJfIik7cmV0dXJuIFAlMTA9PTEmJlAlMTAwIT0xMT9GWzBdOlAlMTA+PTImJlAlMTA8PTQmJihQJTEwMDwxMHx8UCUxMDA+PTIwKT9GWzFdOkZbMl19KHtz''@;'; put 'put ''czpQPyJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzBfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDRiX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCI6Ilx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQz''@;'; put 'put ''NFx1MDQ0M19cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0NGJfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixtbTpQPyJcdTA0NDVcdTA0MzJcdTA0NTZcdTA0M2JcdTA0NTZcdTA0M2RcdTA0MzBfXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNiXHUw''@;'; put 'put ''NDU2XHUwNDNkXHUwNDRiX1x1MDQ0NVx1MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZCI6Ilx1MDQ0NVx1MDQzMlx1MDQ1Nlx1MDQzYlx1MDQ1Nlx1MDQzZFx1MDQ0M19cdTA0NDVcdTA0MzJcdTA0NTZcdTA0M2JcdTA0NTZcdTA0M2RcdTA0NGJfXHUwNDQ1XHUwNDMyXHUwNDU2XHUwNDNi''@;'; put 'put ''XHUwNDU2XHUwNDNkIixoaDpQPyJcdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2RcdTA0MzBfXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDM3XHUwNDU2XHUwNDNkXHUwNDRiX1x1MDQzM1x1MDQzMFx1MDQzNFx1MDQzN1x1MDQ1Nlx1MDQzZCI6Ilx1MDQzM1x1MDQzMFx1MDQzNFx1''@;'; put 'put ''MDQzN1x1MDQ1Nlx1MDQzZFx1MDQ0M19cdTA0MzNcdTA0MzBcdTA0MzRcdTA0MzdcdTA0NTZcdTA0M2RcdTA0NGJfXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDM3XHUwNDU2XHUwNDNkIixkZDoiXHUwNDM0XHUwNDM3XHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzNFx1MDQzZFx1MDQ1Nl9cdTA0MzRc''@;'; put 'put ''dTA0MzdcdTA0NTFcdTA0M2QiLE1NOiJcdTA0M2NcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDZfXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDRmXHUwNDQ2XHUwNDRiX1x1MDQzY1x1MDQzNVx1MDQ0MVx1MDQ0Zlx1MDQ0Nlx1MDQzMFx1MDQ1ZSIseXk6Ilx1MDQzM1x1MDQzZVx1MDQzNF9cdTA0MzNc''@;'; put 'put ''dTA0MzBcdTA0MzRcdTA0NGJfXHUwNDMzXHUwNDMwXHUwNDM0XHUwNDNlXHUwNDVlIn1bRl0sK3cpfUkuZGVmaW5lTG9jYWxlKCJiZSIse21vbnRoczp7Zm9ybWF0OiJcdTA0NDFcdTA0NDJcdTA0NDNcdTA0MzRcdTA0MzdcdTA0MzVcdTA0M2RcdTA0NGZfXHUwNDNiXHUwNDRlXHUwNDQyXHUw''@;'; put 'put ''NDMwXHUwNDMzXHUwNDMwX1x1MDQ0MVx1MDQzMFx1MDQzYVx1MDQzMFx1MDQzMlx1MDQ1Nlx1MDQzYVx1MDQzMF9cdTA0M2FcdTA0NDBcdTA0MzBcdTA0NDFcdTA0MzBcdTA0MzJcdTA0NTZcdTA0M2FcdTA0MzBfXHUwNDQyXHUwNDQwXHUwNDMwXHUwNDVlXHUwNDNkXHUwNDRmX1x1MDQ0N1x1''@;'; put 'put ''MDQ0ZFx1MDQ0MFx1MDQzMlx1MDQzNVx1MDQzZFx1MDQ0Zl9cdTA0M2JcdTA0NTZcdTA0M2ZcdTA0MzVcdTA0M2RcdTA0NGZfXHUwNDM2XHUwNDNkXHUwNDU2XHUwNDVlXHUwNDNkXHUwNDRmX1x1MDQzMlx1MDQzNVx1MDQ0MFx1MDQzMFx1MDQ0MVx1MDQzZFx1MDQ0Zl9cdTA0M2FcdTA0MzBc''@;'; put 'put ''dTA0NDFcdTA0NDJcdTA0NDBcdTA0NGJcdTA0NDdcdTA0M2RcdTA0NTZcdTA0M2FcdTA0MzBfXHUwNDNiXHUwNDU2XHUwNDQxXHUwNDQyXHUwNDMwXHUwNDNmXHUwNDMwXHUwNDM0XHUwNDMwX1x1MDQ0MVx1MDQzZFx1MDQzNVx1MDQzNlx1MDQzZFx1MDQ0ZiIuc3BsaXQoIl8iKSxzdGFuZGFs''@;'; put 'put ''b25lOiJcdTA0NDFcdTA0NDJcdTA0NDNcdTA0MzRcdTA0MzdcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDNiXHUwNDRlXHUwNDQyXHUwNDRiX1x1MDQ0MVx1MDQzMFx1MDQzYVx1MDQzMFx1MDQzMlx1MDQ1Nlx1MDQzYV9cdTA0M2FcdTA0NDBcdTA0MzBcdTA0NDFcdTA0MzBcdTA0MzJcdTA0NTZc''@;'; put 'put ''dTA0M2FfXHUwNDQyXHUwNDQwXHUwNDMwXHUwNDMyXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQ0N1x1MDQ0ZFx1MDQ0MFx1MDQzMlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0M2JcdTA0NTZcdTA0M2ZcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDM2XHUwNDNkXHUwNDU2XHUwNDMyXHUwNDM1XHUwNDNk''@;'; put 'put ''XHUwNDRjX1x1MDQzMlx1MDQzNVx1MDQ0MFx1MDQzMFx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0M2FcdTA0MzBcdTA0NDFcdTA0NDJcdTA0NDBcdTA0NGJcdTA0NDdcdTA0M2RcdTA0NTZcdTA0M2FfXHUwNDNiXHUwNDU2XHUwNDQxXHUwNDQyXHUwNDMwXHUwNDNmXHUwNDMwXHUwNDM0''@;'; put 'put ''X1x1MDQ0MVx1MDQzZFx1MDQzNVx1MDQzNlx1MDQzMFx1MDQzZFx1MDQ0YyIuc3BsaXQoIl8iKX0sbW9udGhzU2hvcnQ6Ilx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzNF9cdTA0M2JcdTA0NGVcdTA0NDJfXHUwNDQxXHUwNDMwXHUwNDNhX1x1MDQzYVx1MDQ0MFx1MDQzMFx1MDQ0MV9cdTA0NDJc''@;'; put 'put ''dTA0NDBcdTA0MzBcdTA0MzJfXHUwNDQ3XHUwNDRkXHUwNDQwXHUwNDMyX1x1MDQzYlx1MDQ1Nlx1MDQzZl9cdTA0MzZcdTA0M2RcdTA0NTZcdTA0MzJfXHUwNDMyXHUwNDM1XHUwNDQwX1x1MDQzYVx1MDQzMFx1MDQ0MVx1MDQ0Ml9cdTA0M2JcdTA0NTZcdTA0NDFcdTA0NDJfXHUwNDQxXHUw''@;'; put 'put ''NDNkXHUwNDM1XHUwNDM2Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOntmb3JtYXQ6Ilx1MDQzZFx1MDQ0Zlx1MDQzNFx1MDQzN1x1MDQzNVx1MDQzYlx1MDQ0ZV9cdTA0M2ZcdTA0MzBcdTA0M2RcdTA0NGZcdTA0MzRcdTA0MzdcdTA0MzVcdTA0M2JcdTA0MzBcdTA0M2FfXHUwNDMwXHUwNDVlXHUw''@;'; put 'put ''NDQyXHUwNDNlXHUwNDQwXHUwNDMwXHUwNDNhX1x1MDQ0MVx1MDQzNVx1MDQ0MFx1MDQzMFx1MDQzNFx1MDQ0M19cdTA0NDdcdTA0MzBcdTA0NDZcdTA0MzJcdTA0MzVcdTA0NDBfXHUwNDNmXHUwNDRmXHUwNDQyXHUwNDNkXHUwNDU2XHUwNDQ2XHUwNDQzX1x1MDQ0MVx1MDQ0M1x1MDQzMVx1''@;'; put 'put ''MDQzZVx1MDQ0Mlx1MDQ0MyIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJcdTA0M2RcdTA0NGZcdTA0MzRcdTA0MzdcdTA0MzVcdTA0M2JcdTA0NGZfXHUwNDNmXHUwNDMwXHUwNDNkXHUwNDRmXHUwNDM0XHUwNDM3XHUwNDM1XHUwNDNiXHUwNDMwXHUwNDNhX1x1MDQzMFx1MDQ1ZVx1MDQ0Mlx1''@;'; put 'put ''MDQzZVx1MDQ0MFx1MDQzMFx1MDQzYV9cdTA0NDFcdTA0MzVcdTA0NDBcdTA0MzBcdTA0MzRcdTA0MzBfXHUwNDQ3XHUwNDMwXHUwNDQ2XHUwNDMyXHUwNDM1XHUwNDQwX1x1MDQzZlx1MDQ0Zlx1MDQ0Mlx1MDQzZFx1MDQ1Nlx1MDQ0Nlx1MDQzMF9cdTA0NDFcdTA0NDNcdTA0MzFcdTA0M2Vc''@;'; put 'put ''dTA0NDJcdTA0MzAiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L1xbID9bXHUwNDIzXHUwNDQzXHUwNDVlXSA/KD86XHUwNDNjXHUwNDU2XHUwNDNkXHUwNDQzXHUwNDNiXHUwNDQzXHUwNDRlfFx1MDQzZFx1MDQzMFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQzZlx1MDQzZFx1MDQ0M1x1MDQ0ZSk/ID9c''@;'; put 'put ''XSA/ZGRkZC99LHdlZWtkYXlzU2hvcnQ6Ilx1MDQzZFx1MDQzNF9cdTA0M2ZcdTA0M2RfXHUwNDMwXHUwNDQyX1x1MDQ0MVx1MDQ0MF9cdTA0NDdcdTA0NDZfXHUwNDNmXHUwNDQyX1x1MDQ0MVx1MDQzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDNkXHUwNDM0X1x1MDQzZlx1MDQz''@;'; put 'put ''ZF9cdTA0MzBcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQ0Nl9cdTA0M2ZcdTA0NDJfXHUwNDQxXHUwNDMxIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSBcdTA0MzMuIixMTEw6''@;'; put 'put ''IkQgTU1NTSBZWVlZIFx1MDQzMy4sIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBcdTA0MzMuLCBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNDIxXHUwNDUxXHUwNDNkXHUwNDNkXHUwNDRmIFx1MDQ1ZV0gTFQiLG5leHREYXk6IltcdTA0MTdcdTA0MzBcdTA0NWVcdTA0''@;'; put 'put ''NDJcdTA0NDBcdTA0MzAgXHUwNDVlXSBMVCIsbGFzdERheToiW1x1MDQyM1x1MDQ0N1x1MDQzZVx1MDQ0MFx1MDQzMCBcdTA0NWVdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJbXHUwNDIzXSBkZGRkIFtcdTA0NWVdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhp''@;'; put 'put ''cy5kYXkoKSl7Y2FzZSAwOmNhc2UgMzpjYXNlIDU6Y2FzZSA2OnJldHVybiJbXHUwNDIzIFx1MDQzY1x1MDQ1Nlx1MDQzZFx1MDQ0M1x1MDQzYlx1MDQ0M1x1MDQ0ZV0gZGRkZCBbXHUwNDVlXSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6cmV0dXJuIltcdTA0MjMgXHUwNDNjXHUwNDU2XHUw''@;'; put 'put ''NDNkXHUwNDQzXHUwNDNiXHUwNDRiXSBkZGRkIFtcdTA0NWVdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDQzZlx1MDQ0MFx1MDQzMFx1MDQzNyAlcyIscGFzdDoiJXMgXHUwNDQyXHUwNDMwXHUwNDNjXHUwNDQzIixzOiJcdTA0M2RcdTA0MzVcdTA0M2Fc''@;'; put 'put ''dTA0MzBcdTA0M2JcdTA0NGNcdTA0M2FcdTA0NTYgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixtOmcsbW06ZyxoOmcsaGg6ZyxkOiJcdTA0MzRcdTA0MzdcdTA0MzVcdTA0M2RcdTA0NGMiLGRkOmcsTToiXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDRmXHUwNDQ2IixNTTpn''@;'; put 'put ''LHk6Ilx1MDQzM1x1MDQzZVx1MDQzNCIseXk6Z30sbWVyaWRpZW1QYXJzZTovXHUwNDNkXHUwNDNlXHUwNDQ3XHUwNDRifFx1MDQ0MFx1MDQzMFx1MDQzZFx1MDQ1Nlx1MDQ0Nlx1MDQ0YnxcdTA0MzRcdTA0M2RcdTA0NGZ8XHUwNDMyXHUwNDM1XHUwNDQ3XHUwNDMwXHUwNDQwXHUwNDMwLyxp''@;'; put 'put ''c1BNOmZ1bmN0aW9uKHcpe3JldHVybi9eKFx1MDQzNFx1MDQzZFx1MDQ0ZnxcdTA0MzJcdTA0MzVcdTA0NDdcdTA0MzBcdTA0NDBcdTA0MzApJC8udGVzdCh3KX0sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3JldHVybiB3PDQ/Ilx1MDQzZFx1MDQzZVx1MDQ0N1x1MDQ0YiI6dzwxMj8iXHUw''@;'; put 'put ''NDQwXHUwNDMwXHUwNDNkXHUwNDU2XHUwNDQ2XHUwNDRiIjp3PDE3PyJcdTA0MzRcdTA0M2RcdTA0NGYiOiJcdTA0MzJcdTA0MzVcdTA0NDdcdTA0MzBcdTA0NDBcdTA0MzAifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTA0NTZ8XHUwNDRifFx1MDQzM1x1MDQzMCkvLG9y''@;'; put 'put ''ZGluYWw6ZnVuY3Rpb24odyxQKXtzd2l0Y2goUCl7Y2FzZSJNIjpjYXNlImQiOmNhc2UiREREIjpjYXNlInciOmNhc2UiVyI6cmV0dXJuIHclMTAhPTImJnclMTAhPTN8fHclMTAwPT0xMnx8dyUxMDA9PTEzP3crIi1cdTA0NGIiOncrIi1cdTA0NTYiO2Nhc2UiRCI6cmV0dXJuIHcrIi1cdTA0''@;'; put 'put ''MzNcdTA0MzAiO2RlZmF1bHQ6cmV0dXJuIHd9fSx3ZWVrOntkb3c6MSxkb3k6N319KX0oXyg5NzU4NikpfSwyODU2NDpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImJnIix7bW9udGhzOiJcdTA0NGZcdTA0M2RcdTA0NDNcdTA0MzBc''@;'; put 'put ''dTA0NDBcdTA0MzhfXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDQzXHUwNDMwXHUwNDQwXHUwNDM4X1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzhcdTA0M2JfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQ0ZVx1MDQzZFx1MDQzOF9cdTA0NGVcdTA0''@;'; put 'put ''M2JcdTA0MzhfXHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyX1x1MDQ0MVx1MDQzNVx1MDQzZlx1MDQ0Mlx1MDQzNVx1MDQzY1x1MDQzMlx1MDQ0MFx1MDQzOF9cdTA0M2VcdTA0M2FcdTA0NDJcdTA0M2VcdTA0M2NcdTA0MzJcdTA0NDBcdTA0MzhfXHUwNDNkXHUwNDNlXHUw''@;'; put 'put ''NDM1XHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4X1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQzNVx1MDQzY1x1MDQzMlx1MDQ0MFx1MDQzOCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNDRmXHUwNDNkXHUwNDQzX1x1MDQ0NFx1MDQzNVx1MDQzMl9cdTA0M2NcdTA0MzBcdTA0NDBfXHUwNDMw''@;'; put 'put ''XHUwNDNmXHUwNDQwX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0NGVcdTA0M2RcdTA0MzhfXHUwNDRlXHUwNDNiXHUwNDM4X1x1MDQzMFx1MDQzMlx1MDQzM19cdTA0NDFcdTA0MzVcdTA0M2ZfXHUwNDNlXHUwNDNhXHUwNDQyX1x1MDQzZFx1MDQzZVx1MDQzNV9cdTA0MzRcdTA0MzVcdTA0M2Ei''@;'; put 'put ''LnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzYlx1MDQ0Zl9cdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0M2RcdTA0MzhcdTA0M2FfXHUwNDMyXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDNkXHUwNDM4XHUwNDNhX1x1''@;'; put 'put ''MDQ0MVx1MDQ0MFx1MDQ0Zlx1MDQzNFx1MDQzMF9cdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0NGFcdTA0NDBcdTA0NDJcdTA0NGFcdTA0M2FfXHUwNDNmXHUwNDM1XHUwNDQyXHUwNDRhXHUwNDNhX1x1MDQ0MVx1MDQ0YVx1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzMCIuc3BsaXQoIl8iKSx3''@;'; put 'put ''ZWVrZGF5c1Nob3J0OiJcdTA0M2RcdTA0MzVcdTA0MzRfXHUwNDNmXHUwNDNlXHUwNDNkX1x1MDQzMlx1MDQ0Mlx1MDQzZV9cdTA0NDFcdTA0NDBcdTA0NGZfXHUwNDQ3XHUwNDM1XHUwNDQyX1x1MDQzZlx1MDQzNVx1MDQ0Ml9cdTA0NDFcdTA0NGFcdTA0MzEiLnNwbGl0KCJfIiksd2Vla2Rh''@;'; put 'put ''eXNNaW46Ilx1MDQzZFx1MDQzNF9cdTA0M2ZcdTA0M2RfXHUwNDMyXHUwNDQyX1x1MDQ0MVx1MDQ0MF9cdTA0NDdcdTA0NDJfXHUwNDNmXHUwNDQyX1x1MDQ0MVx1MDQzMSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiRC5NTS5ZWVlZIixM''@;'; put 'put ''TDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNDE0XHUwNDNkXHUwNDM1XHUwNDQxIFx1MDQzMl0gTFQiLG5leHREYXk6IltcdTA0MjNcdTA0NDJcdTA0NDBcdTA0MzUgXHUw''@;'; put 'put ''NDMyXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDQzMl0gTFQiLGxhc3REYXk6IltcdTA0MTJcdTA0NDdcdTA0MzVcdTA0NDBcdTA0MzAgXHUwNDMyXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOmNhc2UgMzpjYXNlIDY6cmV0dXJuIltcdTA0MWNc''@;'; put 'put ''dTA0MzhcdTA0M2RcdTA0MzBcdTA0M2JcdTA0MzBcdTA0NDJcdTA0MzBdIGRkZGQgW1x1MDQzMl0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW1x1MDQxY1x1MDQzOFx1MDQzZFx1MDQzMFx1MDQzYlx1MDQzOFx1MDQ0Zl0gZGRkZCBbXHUwNDMyXSBMVCJ9fSxzYW1l''@;'; put 'put ''RWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTA0NDFcdTA0M2JcdTA0MzVcdTA0MzQgJXMiLHBhc3Q6Ilx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzOCAlcyIsczoiXHUwNDNkXHUwNDRmXHUwNDNhXHUwNDNlXHUwNDNiXHUwNDNhXHUwNDNlIFx1MDQ0MVx1MDQzNVx1MDQz''@;'; put 'put ''YVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzOCIsc3M6IiVkIFx1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzOCIsbToiXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDMwIixtbToiJWQgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDM4Iixo''@;'; put 'put ''OiJcdTA0NDdcdTA0MzBcdTA0NDEiLGhoOiIlZCBcdTA0NDdcdTA0MzBcdTA0NDFcdTA0MzAiLGQ6Ilx1MDQzNFx1MDQzNVx1MDQzZCIsZGQ6IiVkIFx1MDQzNFx1MDQzNVx1MDQzZFx1MDQzMCIsdzoiXHUwNDQxXHUwNDM1XHUwNDM0XHUwNDNjXHUwNDM4XHUwNDQ2XHUwNDMwIix3dzoiJWQg''@;'; put 'put ''XHUwNDQxXHUwNDM1XHUwNDM0XHUwNDNjXHUwNDM4XHUwNDQ2XHUwNDM4IixNOiJcdTA0M2NcdTA0MzVcdTA0NDFcdTA0MzVcdTA0NDYiLE1NOiIlZCBcdTA0M2NcdTA0MzVcdTA0NDFcdTA0MzVcdTA0NDZcdTA0MzAiLHk6Ilx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzMCIs''@;'; put 'put ''eXk6IiVkIFx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzOCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tKFx1MDQzNVx1MDQzMnxcdTA0MzVcdTA0M2R8XHUwNDQyXHUwNDM4fFx1MDQzMlx1MDQzOHxcdTA0NDBcdTA0Mzh8XHUwNDNjXHUwNDM4KS8sb3JkaW5h''@;'; put 'put ''bDpmdW5jdGlvbihnKXt2YXIgQj1nJTEwLHc9ZyUxMDA7cmV0dXJuIDA9PT1nP2crIi1cdTA0MzVcdTA0MzIiOjA9PT13P2crIi1cdTA0MzVcdTA0M2QiOnc+MTAmJnc8MjA/ZysiLVx1MDQ0Mlx1MDQzOCI6MT09PUI/ZysiLVx1MDQzMlx1MDQzOCI6Mj09PUI/ZysiLVx1MDQ0MFx1MDQzOCI6''@;'; put 'put ''Nz09PUJ8fDg9PT1CP2crIi1cdTA0M2NcdTA0MzgiOmcrIi1cdTA0NDJcdTA0MzgifSx3ZWVrOntkb3c6MSxkb3k6N319KX0oXyg5NzU4NikpfSw5NzQ2MjpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImJtIix7bW9udGhzOiJaYW53''@;'; put 'put ''dXlla2Fsb19GZXd1cnV5ZWthbG9fTWFyaXNpa2Fsb19Bd2lyaWxpa2Fsb19NXHUwMjVia2Fsb19adXdcdTAyNWJua2Fsb19adWx1eWVrYWxvX1V0aWthbG9fU1x1MDI1YnRhbmJ1cnVrYWxvX1x1MDI1NGt1dFx1MDI1NGJ1cnVrYWxvX05vd2FuYnVydWthbG9fRGVzYW5idXJ1a2FsbyIuc3Bs''@;'; put 'put ''aXQoIl8iKSxtb250aHNTaG9ydDoiWmFuX0Zld19NYXJfQXdpX01cdTAyNWJfWnV3X1p1bF9VdGlfU1x1MDI1YnRfXHUwMjU0a3VfTm93X0RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiS2FyaV9OdFx1MDI1Ym5cdTAyNWJuX1RhcmF0YV9BcmFiYV9BbGFtaXNhX0p1bWFfU2liaXJpIi5zcGxp''@;'; put 'put ''dCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ikthcl9OdFx1MDI1Yl9UYXJfQXJhX0FsYV9KdW1fU2liIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJLYV9OdF9UYV9Bcl9BbF9KdV9TaSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9Z''@;'; put 'put ''WVlZIixMTDoiTU1NTSBbdGlsZV0gRCBbc2FuXSBZWVlZIixMTEw6Ik1NTU0gW3RpbGVdIEQgW3Nhbl0gWVlZWSBbbFx1MDI1YnJcdTAyNWJdIEhIOm1tIixMTExMOiJkZGRkIE1NTU0gW3RpbGVdIEQgW3Nhbl0gWVlZWSBbbFx1MDI1YnJcdTAyNWJdIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVE''@;'; put 'put ''YXk6IltCaSBsXHUwMjViclx1MDI1Yl0gTFQiLG5leHREYXk6IltTaW5pIGxcdTAyNWJyXHUwMjViXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2RvbiBsXHUwMjViclx1MDI1Yl0gTFQiLGxhc3REYXk6IltLdW51IGxcdTAyNWJyXHUwMjViXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3RcdTAyNWJtXHUw''@;'; put 'put ''MjVibmVuIGxcdTAyNWJyXHUwMjViXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMga1x1MDI1NG5cdTAyNTQiLHBhc3Q6ImEgYlx1MDI1YiAlcyBiXHUwMjU0IixzOiJzYW5nYSBkYW1hIGRhbWEiLHNzOiJzZWtvbmRpICVkIixtOiJtaW5pdGkga2VsZW4iLG1t''@;'; put 'put ''OiJtaW5pdGkgJWQiLGg6ImxcdTAyNWJyXHUwMjViIGtlbGVuIixoaDoibFx1MDI1YnJcdTAyNWIgJWQiLGQ6InRpbGUga2VsZW4iLGRkOiJ0aWxlICVkIixNOiJrYWxvIGtlbGVuIixNTToia2FsbyAlZCIseToic2FuIGtlbGVuIix5eToic2FuICVkIn0sd2Vlazp7ZG93OjEsZG95OjR9fSl9''@;'; put 'put ''KF8oOTc1ODYpKX0sNDM0Mzg6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciB5PXsxOiJcdTA5ZTciLDI6Ilx1MDllOCIsMzoiXHUwOWU5Iiw0OiJcdTA5ZWEiLDU6Ilx1MDllYiIsNjoiXHUwOWVjIiw3OiJcdTA5ZWQiLDg6Ilx1MDllZSIsOToiXHUwOWVm''@;'; put 'put ''IiwwOiJcdTA5ZTYifSxnPXsiXHUwOWU3IjoiMSIsIlx1MDllOCI6IjIiLCJcdTA5ZTkiOiIzIiwiXHUwOWVhIjoiNCIsIlx1MDllYiI6IjUiLCJcdTA5ZWMiOiI2IiwiXHUwOWVkIjoiNyIsIlx1MDllZSI6IjgiLCJcdTA5ZWYiOiI5IiwiXHUwOWU2IjoiMCJ9O0kuZGVmaW5lTG9jYWxlKCJi''@;'; put 'put ''bi1iZCIse21vbnRoczoiXHUwOTljXHUwOWJlXHUwOWE4XHUwOWMxXHUwOWRmXHUwOWJlXHUwOWIwXHUwOWJmX1x1MDlhYlx1MDljN1x1MDlhY1x1MDljZFx1MDliMFx1MDljMVx1MDlkZlx1MDliZVx1MDliMFx1MDliZl9cdTA5YWVcdTA5YmVcdTA5YjBcdTA5Y2RcdTA5OWFfXHUwOThmXHUw''@;'; put 'put ''OWFhXHUwOWNkXHUwOWIwXHUwOWJmXHUwOWIyX1x1MDlhZVx1MDljN19cdTA5OWNcdTA5YzFcdTA5YThfXHUwOTljXHUwOWMxXHUwOWIyXHUwOWJlXHUwOTg3X1x1MDk4Nlx1MDk5N1x1MDliOFx1MDljZFx1MDk5Zl9cdTA5YjhcdTA5YzdcdTA5YWFcdTA5Y2RcdTA5OWZcdTA5YzdcdTA5YWVc''@;'; put 'put ''dTA5Y2RcdTA5YWNcdTA5YjBfXHUwOTg1XHUwOTk1XHUwOWNkXHUwOTlmXHUwOWNiXHUwOWFjXHUwOWIwX1x1MDlhOFx1MDlhZFx1MDljN1x1MDlhZVx1MDljZFx1MDlhY1x1MDliMF9cdTA5YTFcdTA5YmZcdTA5YjhcdTA5YzdcdTA5YWVcdTA5Y2RcdTA5YWNcdTA5YjAiLnNwbGl0KCJfIiks''@;'; put 'put ''bW9udGhzU2hvcnQ6Ilx1MDk5Y1x1MDliZVx1MDlhOFx1MDljMV9cdTA5YWJcdTA5YzdcdTA5YWNcdTA5Y2RcdTA5YjBcdTA5YzFfXHUwOWFlXHUwOWJlXHUwOWIwXHUwOWNkXHUwOTlhX1x1MDk4Zlx1MDlhYVx1MDljZFx1MDliMFx1MDliZlx1MDliMl9cdTA5YWVcdTA5YzdfXHUwOTljXHUw''@;'; put 'put ''OWMxXHUwOWE4X1x1MDk5Y1x1MDljMVx1MDliMlx1MDliZVx1MDk4N19cdTA5ODZcdTA5OTdcdTA5YjhcdTA5Y2RcdTA5OWZfXHUwOWI4XHUwOWM3XHUwOWFhXHUwOWNkXHUwOTlmX1x1MDk4NVx1MDk5NVx1MDljZFx1MDk5Zlx1MDljYl9cdTA5YThcdTA5YWRcdTA5YzdfXHUwOWExXHUwOWJm''@;'; put 'put ''XHUwOWI4XHUwOWM3Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA5YjBcdTA5YWNcdTA5YmZcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWI4XHUwOWNiXHUwOWFlXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDlhZVx1MDk5OVx1MDljZFx1MDk5N1x1MDliMlx1MDlhY1x1MDliZVx1MDliMF9cdTA5YWNc''@;'; put 'put ''dTA5YzFcdTA5YTdcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWFjXHUwOWMzXHUwOWI5XHUwOWI4XHUwOWNkXHUwOWFhXHUwOWE0XHUwOWJmXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDliNlx1MDljMVx1MDk5NVx1MDljZFx1MDliMFx1MDlhY1x1MDliZVx1MDliMF9cdTA5YjZcdTA5YThcdTA5YmZc''@;'; put 'put ''dTA5YWNcdTA5YmVcdTA5YjAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwOWIwXHUwOWFjXHUwOWJmX1x1MDliOFx1MDljYlx1MDlhZV9cdTA5YWVcdTA5OTlcdTA5Y2RcdTA5OTdcdTA5YjJfXHUwOWFjXHUwOWMxXHUwOWE3X1x1MDlhY1x1MDljM1x1MDliOVx1MDliOFx1MDljZFx1''@;'; put 'put ''MDlhYVx1MDlhNFx1MDliZl9cdTA5YjZcdTA5YzFcdTA5OTVcdTA5Y2RcdTA5YjBfXHUwOWI2XHUwOWE4XHUwOWJmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA5YjBcdTA5YWNcdTA5YmZfXHUwOWI4XHUwOWNiXHUwOWFlX1x1MDlhZVx1MDk5OVx1MDljZFx1MDk5N1x1MDliMl9cdTA5''@;'; put 'put ''YWNcdTA5YzFcdTA5YTdfXHUwOWFjXHUwOWMzXHUwOWI5X1x1MDliNlx1MDljMVx1MDk5NVx1MDljZFx1MDliMF9cdTA5YjZcdTA5YThcdTA5YmYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gXHUwOWI4XHUwOWFlXHUwOWRmIixMVFM6IkEgaDptbTpzcyBcdTA5Yjhc''@;'; put 'put ''dTA5YWVcdTA5ZGYiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MDliOFx1MDlhZVx1MDlkZiIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSBcdTA5YjhcdTA5YWVcdTA5ZGYifSxjYWxlbmRhcjp7c2FtZURheToiW1x1''@;'; put 'put ''MDk4Nlx1MDk5Y10gTFQiLG5leHREYXk6IltcdTA5ODZcdTA5OTdcdTA5YmVcdTA5YWVcdTA5YzBcdTA5OTVcdTA5YmVcdTA5YjJdIExUIixuZXh0V2VlazoiZGRkZCwgTFQiLGxhc3REYXk6IltcdTA5OTdcdTA5YTRcdTA5OTVcdTA5YmVcdTA5YjJdIExUIixsYXN0V2VlazoiW1x1MDk5N1x1''@;'; put 'put ''MDlhNF0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDlhYVx1MDliMFx1MDljNyIscGFzdDoiJXMgXHUwOTg2XHUwOTk3XHUwOWM3IixzOiJcdTA5OTVcdTA5ZGZcdTA5YzdcdTA5OTUgXHUwOWI4XHUwOWM3XHUwOTk1XHUwOWM3XHUwOWE4XHUw''@;'; put 'put ''OWNkXHUwOWExIixzczoiJWQgXHUwOWI4XHUwOWM3XHUwOTk1XHUwOWM3XHUwOWE4XHUwOWNkXHUwOWExIixtOiJcdTA5OGZcdTA5OTUgXHUwOWFlXHUwOWJmXHUwOWE4XHUwOWJmXHUwOTlmIixtbToiJWQgXHUwOWFlXHUwOWJmXHUwOWE4XHUwOWJmXHUwOTlmIixoOiJcdTA5OGZcdTA5OTUg''@;'; put 'put ''XHUwOTk4XHUwOWE4XHUwOWNkXHUwOTlmXHUwOWJlIixoaDoiJWQgXHUwOTk4XHUwOWE4XHUwOWNkXHUwOTlmXHUwOWJlIixkOiJcdTA5OGZcdTA5OTUgXHUwOWE2XHUwOWJmXHUwOWE4IixkZDoiJWQgXHUwOWE2XHUwOWJmXHUwOWE4IixNOiJcdTA5OGZcdTA5OTUgXHUwOWFlXHUwOWJlXHUw''@;'; put 'put ''OWI4IixNTToiJWQgXHUwOWFlXHUwOWJlXHUwOWI4Iix5OiJcdTA5OGZcdTA5OTUgXHUwOWFjXHUwOTliXHUwOWIwIix5eToiJWQgXHUwOWFjXHUwOTliXHUwOWIwIn0scHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvW1x1MDllN1x1MDllOFx1MDllOVx1MDllYVx1MDll''@;'; put 'put ''Ylx1MDllY1x1MDllZFx1MDllZVx1MDllZlx1MDllNl0vZyxmdW5jdGlvbihQKXtyZXR1cm4gZ1tQXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oUCl7cmV0dXJuIHlbUF19KX0sbWVyaWRpZW1QYXJzZTovXHUwOWIwXHUwOWJlXHUw''@;'; put 'put ''OWE0fFx1MDlhZFx1MDljYlx1MDliMHxcdTA5YjhcdTA5OTVcdTA5YmVcdTA5YjJ8XHUwOWE2XHUwOWMxXHUwOWFhXHUwOWMxXHUwOWIwfFx1MDlhY1x1MDliZlx1MDk5NVx1MDliZVx1MDliMnxcdTA5YjhcdTA5YThcdTA5Y2RcdTA5YTdcdTA5Y2RcdTA5YWZcdTA5YmV8XHUwOWIwXHUwOWJl''@;'; put 'put ''XHUwOWE0LyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24odyxQKXtyZXR1cm4gMTI9PT13JiYodz0wKSwiXHUwOWIwXHUwOWJlXHUwOWE0Ij09PVA/dzw0P3c6dysxMjoiXHUwOWFkXHUwOWNiXHUwOWIwIj09PVB8fCJcdTA5YjhcdTA5OTVcdTA5YmVcdTA5YjIiPT09UD93OiJcdTA5YTZcdTA5YzFc''@;'; put 'put ''dTA5YWFcdTA5YzFcdTA5YjAiPT09UD93Pj0zP3c6dysxMjoiXHUwOWFjXHUwOWJmXHUwOTk1XHUwOWJlXHUwOWIyIj09PVB8fCJcdTA5YjhcdTA5YThcdTA5Y2RcdTA5YTdcdTA5Y2RcdTA5YWZcdTA5YmUiPT09UD93KzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3JldHVy''@;'; put 'put ''biB3PDQ/Ilx1MDliMFx1MDliZVx1MDlhNCI6dzw2PyJcdTA5YWRcdTA5Y2JcdTA5YjAiOnc8MTI/Ilx1MDliOFx1MDk5NVx1MDliZVx1MDliMiI6dzwxNT8iXHUwOWE2XHUwOWMxXHUwOWFhXHUwOWMxXHUwOWIwIjp3PDE4PyJcdTA5YWNcdTA5YmZcdTA5OTVcdTA5YmVcdTA5YjIiOnc8MjA/''@;'; put 'put ''Ilx1MDliOFx1MDlhOFx1MDljZFx1MDlhN1x1MDljZFx1MDlhZlx1MDliZSI6Ilx1MDliMFx1MDliZVx1MDlhNCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShfKDk3NTg2KSl9LDE3MTA3OmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT17MToiXHUwOWU3''@;'; put 'put ''IiwyOiJcdTA5ZTgiLDM6Ilx1MDllOSIsNDoiXHUwOWVhIiw1OiJcdTA5ZWIiLDY6Ilx1MDllYyIsNzoiXHUwOWVkIiw4OiJcdTA5ZWUiLDk6Ilx1MDllZiIsMDoiXHUwOWU2In0sZz17Ilx1MDllNyI6IjEiLCJcdTA5ZTgiOiIyIiwiXHUwOWU5IjoiMyIsIlx1MDllYSI6IjQiLCJcdTA5ZWIi''@;'; put 'put ''OiI1IiwiXHUwOWVjIjoiNiIsIlx1MDllZCI6IjciLCJcdTA5ZWUiOiI4IiwiXHUwOWVmIjoiOSIsIlx1MDllNiI6IjAifTtJLmRlZmluZUxvY2FsZSgiYm4iLHttb250aHM6Ilx1MDk5Y1x1MDliZVx1MDlhOFx1MDljMVx1MDlkZlx1MDliZVx1MDliMFx1MDliZl9cdTA5YWJcdTA5YzdcdTA5''@;'; put 'put ''YWNcdTA5Y2RcdTA5YjBcdTA5YzFcdTA5ZGZcdTA5YmVcdTA5YjBcdTA5YmZfXHUwOWFlXHUwOWJlXHUwOWIwXHUwOWNkXHUwOTlhX1x1MDk4Zlx1MDlhYVx1MDljZFx1MDliMFx1MDliZlx1MDliMl9cdTA5YWVcdTA5YzdfXHUwOTljXHUwOWMxXHUwOWE4X1x1MDk5Y1x1MDljMVx1MDliMlx1''@;'; put 'put ''MDliZVx1MDk4N19cdTA5ODZcdTA5OTdcdTA5YjhcdTA5Y2RcdTA5OWZfXHUwOWI4XHUwOWM3XHUwOWFhXHUwOWNkXHUwOTlmXHUwOWM3XHUwOWFlXHUwOWNkXHUwOWFjXHUwOWIwX1x1MDk4NVx1MDk5NVx1MDljZFx1MDk5Zlx1MDljYlx1MDlhY1x1MDliMF9cdTA5YThcdTA5YWRcdTA5Yzdc''@;'; put 'put ''dTA5YWVcdTA5Y2RcdTA5YWNcdTA5YjBfXHUwOWExXHUwOWJmXHUwOWI4XHUwOWM3XHUwOWFlXHUwOWNkXHUwOWFjXHUwOWIwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA5OWNcdTA5YmVcdTA5YThcdTA5YzFfXHUwOWFiXHUwOWM3XHUwOWFjXHUwOWNkXHUwOWIwXHUwOWMxX1x1MDlh''@;'; put 'put ''ZVx1MDliZVx1MDliMFx1MDljZFx1MDk5YV9cdTA5OGZcdTA5YWFcdTA5Y2RcdTA5YjBcdTA5YmZcdTA5YjJfXHUwOWFlXHUwOWM3X1x1MDk5Y1x1MDljMVx1MDlhOF9cdTA5OWNcdTA5YzFcdTA5YjJcdTA5YmVcdTA5ODdfXHUwOTg2XHUwOTk3XHUwOWI4XHUwOWNkXHUwOTlmX1x1MDliOFx1''@;'; put 'put ''MDljN1x1MDlhYVx1MDljZFx1MDk5Zl9cdTA5ODVcdTA5OTVcdTA5Y2RcdTA5OWZcdTA5Y2JfXHUwOWE4XHUwOWFkXHUwOWM3X1x1MDlhMVx1MDliZlx1MDliOFx1MDljNyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwOWIwXHUwOWFjXHUwOWJmXHUwOWFjXHUwOWJlXHUwOWIwX1x1MDliOFx1''@;'; put 'put ''MDljYlx1MDlhZVx1MDlhY1x1MDliZVx1MDliMF9cdTA5YWVcdTA5OTlcdTA5Y2RcdTA5OTdcdTA5YjJcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWFjXHUwOWMxXHUwOWE3XHUwOWFjXHUwOWJlXHUwOWIwX1x1MDlhY1x1MDljM1x1MDliOVx1MDliOFx1MDljZFx1MDlhYVx1MDlhNFx1MDliZlx1''@;'; put 'put ''MDlhY1x1MDliZVx1MDliMF9cdTA5YjZcdTA5YzFcdTA5OTVcdTA5Y2RcdTA5YjBcdTA5YWNcdTA5YmVcdTA5YjBfXHUwOWI2XHUwOWE4XHUwOWJmXHUwOWFjXHUwOWJlXHUwOWIwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDliMFx1MDlhY1x1MDliZl9cdTA5YjhcdTA5Y2JcdTA5''@;'; put 'put ''YWVfXHUwOWFlXHUwOTk5XHUwOWNkXHUwOTk3XHUwOWIyX1x1MDlhY1x1MDljMVx1MDlhN19cdTA5YWNcdTA5YzNcdTA5YjlcdTA5YjhcdTA5Y2RcdTA5YWFcdTA5YTRcdTA5YmZfXHUwOWI2XHUwOWMxXHUwOTk1XHUwOWNkXHUwOWIwX1x1MDliNlx1MDlhOFx1MDliZiIuc3BsaXQoIl8iKSx3''@;'; put 'put ''ZWVrZGF5c01pbjoiXHUwOWIwXHUwOWFjXHUwOWJmX1x1MDliOFx1MDljYlx1MDlhZV9cdTA5YWVcdTA5OTlcdTA5Y2RcdTA5OTdcdTA5YjJfXHUwOWFjXHUwOWMxXHUwOWE3X1x1MDlhY1x1MDljM1x1MDliOV9cdTA5YjZcdTA5YzFcdTA5OTVcdTA5Y2RcdTA5YjBfXHUwOWI2XHUwOWE4XHUw''@;'; put 'put ''OWJmIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFx1MDliOFx1MDlhZVx1MDlkZiIsTFRTOiJBIGg6bW06c3MgXHUwOWI4XHUwOWFlXHUwOWRmIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSBcdTA5YjhcdTA5''@;'; put 'put ''YWVcdTA5ZGYiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwOWI4XHUwOWFlXHUwOWRmIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA5ODZcdTA5OWNdIExUIixuZXh0RGF5OiJbXHUwOTg2XHUwOTk3XHUwOWJlXHUwOWFlXHUwOWMwXHUwOTk1XHUwOWJlXHUwOWIyXSBMVCIs''@;'; put 'put ''bmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwOTk3XHUwOWE0XHUwOTk1XHUwOWJlXHUwOWIyXSBMVCIsbGFzdFdlZWs6IltcdTA5OTdcdTA5YTRdIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA5YWFcdTA5YjBcdTA5YzciLHBhc3Q6''@;'; put 'put ''IiVzIFx1MDk4Nlx1MDk5N1x1MDljNyIsczoiXHUwOTk1XHUwOWRmXHUwOWM3XHUwOTk1IFx1MDliOFx1MDljN1x1MDk5NVx1MDljN1x1MDlhOFx1MDljZFx1MDlhMSIsc3M6IiVkIFx1MDliOFx1MDljN1x1MDk5NVx1MDljN1x1MDlhOFx1MDljZFx1MDlhMSIsbToiXHUwOThmXHUwOTk1IFx1''@;'; put 'put ''MDlhZVx1MDliZlx1MDlhOFx1MDliZlx1MDk5ZiIsbW06IiVkIFx1MDlhZVx1MDliZlx1MDlhOFx1MDliZlx1MDk5ZiIsaDoiXHUwOThmXHUwOTk1IFx1MDk5OFx1MDlhOFx1MDljZFx1MDk5Zlx1MDliZSIsaGg6IiVkIFx1MDk5OFx1MDlhOFx1MDljZFx1MDk5Zlx1MDliZSIsZDoiXHUwOThm''@;'; put 'put ''XHUwOTk1IFx1MDlhNlx1MDliZlx1MDlhOCIsZGQ6IiVkIFx1MDlhNlx1MDliZlx1MDlhOCIsTToiXHUwOThmXHUwOTk1IFx1MDlhZVx1MDliZVx1MDliOCIsTU06IiVkIFx1MDlhZVx1MDliZVx1MDliOCIseToiXHUwOThmXHUwOTk1IFx1MDlhY1x1MDk5Ylx1MDliMCIseXk6IiVkIFx1MDlh''@;'; put 'put ''Y1x1MDk5Ylx1MDliMCJ9LHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1tcdTA5ZTdcdTA5ZThcdTA5ZTlcdTA5ZWFcdTA5ZWJcdTA5ZWNcdTA5ZWRcdTA5ZWVcdTA5ZWZcdTA5ZTZdL2csZnVuY3Rpb24oUCl7cmV0dXJuIGdbUF19KX0scG9zdGZvcm1hdDpmdW5jdGlv''@;'; put 'put ''bih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKFApe3JldHVybiB5W1BdfSl9LG1lcmlkaWVtUGFyc2U6L1x1MDliMFx1MDliZVx1MDlhNHxcdTA5YjhcdTA5OTVcdTA5YmVcdTA5YjJ8XHUwOWE2XHUwOWMxXHUwOWFhXHUwOWMxXHUwOWIwfFx1MDlhY1x1MDliZlx1MDk5NVx1''@;'; put 'put ''MDliZVx1MDliMnxcdTA5YjBcdTA5YmVcdTA5YTQvLG1lcmlkaWVtSG91cjpmdW5jdGlvbih3LFApe3JldHVybiAxMj09PXcmJih3PTApLCJcdTA5YjBcdTA5YmVcdTA5YTQiPT09UCYmdz49NHx8Ilx1MDlhNlx1MDljMVx1MDlhYVx1MDljMVx1MDliMCI9PT1QJiZ3PDV8fCJcdTA5YWNcdTA5''@;'; put 'put ''YmZcdTA5OTVcdTA5YmVcdTA5YjIiPT09UD93KzEyOnd9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxGKXtyZXR1cm4gdzw0PyJcdTA5YjBcdTA5YmVcdTA5YTQiOnc8MTA/Ilx1MDliOFx1MDk5NVx1MDliZVx1MDliMiI6dzwxNz8iXHUwOWE2XHUwOWMxXHUwOWFhXHUwOWMxXHUwOWIwIjp3PDIw''@;'; put 'put ''PyJcdTA5YWNcdTA5YmZcdTA5OTVcdTA5YmVcdTA5YjIiOiJcdTA5YjBcdTA5YmVcdTA5YTQifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oXyg5NzU4NikpfSw5MDA0OmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT17MToiXHUwZjIxIiwyOiJcdTBmMjIi''@;'; put 'put ''LDM6Ilx1MGYyMyIsNDoiXHUwZjI0Iiw1OiJcdTBmMjUiLDY6Ilx1MGYyNiIsNzoiXHUwZjI3Iiw4OiJcdTBmMjgiLDk6Ilx1MGYyOSIsMDoiXHUwZjIwIn0sZz17Ilx1MGYyMSI6IjEiLCJcdTBmMjIiOiIyIiwiXHUwZjIzIjoiMyIsIlx1MGYyNCI6IjQiLCJcdTBmMjUiOiI1IiwiXHUwZjI2''@;'; put 'put ''IjoiNiIsIlx1MGYyNyI6IjciLCJcdTBmMjgiOiI4IiwiXHUwZjI5IjoiOSIsIlx1MGYyMCI6IjAifTtJLmRlZmluZUxvY2FsZSgiYm8iLHttb250aHM6Ilx1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1MVx1MGY0NFx1MGYwYlx1MGY1NFx1MGY3Y19cdTBmNWZcdTBmYjNcdTBm''@;'; put 'put ''MGJcdTBmNTZcdTBmMGJcdTBmNDJcdTBmNDlcdTBmNzJcdTBmNjZcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjQyXHUwZjY2XHUwZjc0XHUwZjU4XHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1Nlx1MGY1ZVx1MGY3''@;'; put 'put ''Mlx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNjNcdTBmOTRcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjUxXHUwZmIyXHUwZjc0XHUwZjQyXHUwZjBiXHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYw''@;'; put 'put ''Ylx1MGY1Nlx1MGY1MVx1MGY3NFx1MGY1M1x1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTZcdTBmNjJcdTBmOTJcdTBmYjFcdTBmNTFcdTBmMGJcdTBmNTRfXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjUxXHUwZjQyXHUwZjc0XHUwZjBi''@;'; put 'put ''XHUwZjU0X1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY1Nlx1MGY0NVx1MGY3NFx1MGYwYlx1MGY1NF9cdTBmNWZcdTBmYjNcdTBmMGJcdTBmNTZcdTBmMGJcdTBmNTZcdTBmNDVcdTBmNzRcdTBmMGJcdTBmNDJcdTBmNDVcdTBmNzJcdTBmNDJcdTBmMGJcdTBmNTRfXHUwZjVm''@;'; put 'put ''XHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiXHUwZjU2XHUwZjQ1XHUwZjc0XHUwZjBiXHUwZjQyXHUwZjQ5XHUwZjcyXHUwZjY2XHUwZjBiXHUwZjU0Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBmNWZcdTBmYjNcdTBmMGIxX1x1MGY1Zlx1MGZiM1x1MGYwYjJfXHUwZjVmXHUwZmIzXHUw''@;'; put 'put ''ZjBiM19cdTBmNWZcdTBmYjNcdTBmMGI0X1x1MGY1Zlx1MGZiM1x1MGYwYjVfXHUwZjVmXHUwZmIzXHUwZjBiNl9cdTBmNWZcdTBmYjNcdTBmMGI3X1x1MGY1Zlx1MGZiM1x1MGYwYjhfXHUwZjVmXHUwZmIzXHUwZjBiOV9cdTBmNWZcdTBmYjNcdTBmMGIxMF9cdTBmNWZcdTBmYjNcdTBmMGIx''@;'; put 'put ''MV9cdTBmNWZcdTBmYjNcdTBmMGIxMiIuc3BsaXQoIl8iKSxtb250aHNTaG9ydFJlZ2V4Oi9eKFx1MGY1Zlx1MGZiM1x1MGYwYlxkezEsMn0pLyxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTBmNDJcdTBmNWZcdTBmNjBcdTBmMGJcdTBmNDlcdTBmNzJcdTBmMGJcdTBmNThcdTBm''@;'; put 'put ''MGJfXHUwZjQyXHUwZjVmXHUwZjYwXHUwZjBiXHUwZjVmXHUwZmIzXHUwZjBiXHUwZjU2XHUwZjBiX1x1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1MGY1OFx1MGY3Mlx1MGY0Mlx1MGYwYlx1MGY1MVx1MGY1OFx1MGY2Mlx1MGYwYl9cdTBmNDJcdTBmNWZcdTBmNjBcdTBmMGJcdTBmNjNcdTBm''@;'; put 'put ''YjdcdTBmNDJcdTBmMGJcdTBmNTRcdTBmMGJfXHUwZjQyXHUwZjVmXHUwZjYwXHUwZjBiXHUwZjU1XHUwZjc0XHUwZjYyXHUwZjBiXHUwZjU2XHUwZjc0X1x1MGY0Mlx1MGY1Zlx1MGY2MFx1MGYwYlx1MGY1NFx1MGYwYlx1MGY2Nlx1MGY0NFx1MGY2Nlx1MGYwYl9cdTBmNDJcdTBmNWZcdTBm''@;'; put 'put ''NjBcdTBmMGJcdTBmNjZcdTBmYTRcdTBmN2FcdTBmNTNcdTBmMGJcdTBmNTRcdTBmMGIiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwZjQ5XHUwZjcyXHUwZjBiXHUwZjU4XHUwZjBiX1x1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYl9cdTBmNThcdTBmNzJcdTBmNDJcdTBmMGJc''@;'; put 'put ''dTBmNTFcdTBmNThcdTBmNjJcdTBmMGJfXHUwZjYzXHUwZmI3XHUwZjQyXHUwZjBiXHUwZjU0XHUwZjBiX1x1MGY1NVx1MGY3NFx1MGY2Mlx1MGYwYlx1MGY1Nlx1MGY3NF9cdTBmNTRcdTBmMGJcdTBmNjZcdTBmNDRcdTBmNjZcdTBmMGJfXHUwZjY2XHUwZmE0XHUwZjdhXHUwZjUzXHUwZjBi''@;'; put 'put ''XHUwZjU0XHUwZjBiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBmNDlcdTBmNzJfXHUwZjVmXHUwZmIzX1x1MGY1OFx1MGY3Mlx1MGY0Ml9cdTBmNjNcdTBmYjdcdTBmNDJfXHUwZjU1XHUwZjc0XHUwZjYyX1x1MGY2Nlx1MGY0NFx1MGY2Nl9cdTBmNjZcdTBmYTRcdTBmN2FcdTBmNTMi''@;'; put 'put ''LnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0iLExUUzoiQSBoOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5''@;'; put 'put ''OiJbXHUwZjUxXHUwZjcyXHUwZjBiXHUwZjYyXHUwZjcyXHUwZjQ0XSBMVCIsbmV4dERheToiW1x1MGY2Nlx1MGY0NFx1MGYwYlx1MGY0OVx1MGY3Mlx1MGY1M10gTFQiLG5leHRXZWVrOiJbXHUwZjU2XHUwZjUxXHUwZjc0XHUwZjUzXHUwZjBiXHUwZjU1XHUwZmIyXHUwZjQyXHUwZjBiXHUw''@;'; put 'put ''ZjYyXHUwZjk3XHUwZjdhXHUwZjY2XHUwZjBiXHUwZjU4XSwgTFQiLGxhc3REYXk6IltcdTBmNDFcdTBmMGJcdTBmNjZcdTBmNDRdIExUIixsYXN0V2VlazoiW1x1MGY1Nlx1MGY1MVx1MGY3NFx1MGY1M1x1MGYwYlx1MGY1NVx1MGZiMlx1MGY0Mlx1MGYwYlx1MGY1OFx1MGY1MFx1MGY2MFx1''@;'; put 'put ''MGYwYlx1MGY1OF0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MGY2M1x1MGYwYiIscGFzdDoiJXMgXHUwZjY2XHUwZjk0XHUwZjUzXHUwZjBiXHUwZjYzIixzOiJcdTBmNjNcdTBmNThcdTBmMGJcdTBmNjZcdTBmNDQiLHNzOiIlZCBcdTBmNjZc''@;'; put 'put ''dTBmOTBcdTBmNjJcdTBmMGJcdTBmNDZcdTBmMGQiLG06Ilx1MGY2Nlx1MGY5MFx1MGY2Mlx1MGYwYlx1MGY1OFx1MGYwYlx1MGY0Mlx1MGY0NVx1MGY3Mlx1MGY0MiIsbW06IiVkIFx1MGY2Nlx1MGY5MFx1MGY2Mlx1MGYwYlx1MGY1OCIsaDoiXHUwZjQ2XHUwZjc0XHUwZjBiXHUwZjVhXHUw''@;'; put 'put ''ZjdjXHUwZjUxXHUwZjBiXHUwZjQyXHUwZjQ1XHUwZjcyXHUwZjQyIixoaDoiJWQgXHUwZjQ2XHUwZjc0XHUwZjBiXHUwZjVhXHUwZjdjXHUwZjUxIixkOiJcdTBmNDlcdTBmNzJcdTBmNTNcdTBmMGJcdTBmNDJcdTBmNDVcdTBmNzJcdTBmNDIiLGRkOiIlZCBcdTBmNDlcdTBmNzJcdTBmNTNc''@;'; put 'put ''dTBmMGIiLE06Ilx1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1Nlx1MGYwYlx1MGY0Mlx1MGY0NVx1MGY3Mlx1MGY0MiIsTU06IiVkIFx1MGY1Zlx1MGZiM1x1MGYwYlx1MGY1NiIseToiXHUwZjYzXHUwZjdjXHUwZjBiXHUwZjQyXHUwZjQ1XHUwZjcyXHUwZjQyIix5eToiJWQgXHUwZjYzXHUwZjdj''@;'; put 'put ''In0scHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvW1x1MGYyMVx1MGYyMlx1MGYyM1x1MGYyNFx1MGYyNVx1MGYyNlx1MGYyN1x1MGYyOFx1MGYyOVx1MGYyMF0vZyxmdW5jdGlvbihQKXtyZXR1cm4gZ1tQXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3''@;'; put 'put ''LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oUCl7cmV0dXJuIHlbUF19KX0sbWVyaWRpZW1QYXJzZTovXHUwZjU4XHUwZjVhXHUwZjUzXHUwZjBiXHUwZjU4XHUwZjdjfFx1MGY1ZVx1MGY3Y1x1MGY0Mlx1MGY2Nlx1MGYwYlx1MGY0MFx1MGY2NnxcdTBmNDlcdTBmNzJcdTBmNTNcdTBmMGJcdTBm''@;'; put 'put ''NDJcdTBmNzRcdTBmNDR8XHUwZjUxXHUwZjQyXHUwZjdjXHUwZjQ0XHUwZjBiXHUwZjUxXHUwZjQyfFx1MGY1OFx1MGY1YVx1MGY1M1x1MGYwYlx1MGY1OFx1MGY3Yy8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKHcsUCl7cmV0dXJuIDEyPT09dyYmKHc9MCksIlx1MGY1OFx1MGY1YVx1MGY1M1x1''@;'; put 'put ''MGYwYlx1MGY1OFx1MGY3YyI9PT1QJiZ3Pj00fHwiXHUwZjQ5XHUwZjcyXHUwZjUzXHUwZjBiXHUwZjQyXHUwZjc0XHUwZjQ0Ij09PVAmJnc8NXx8Ilx1MGY1MVx1MGY0Mlx1MGY3Y1x1MGY0NFx1MGYwYlx1MGY1MVx1MGY0MiI9PT1QP3crMTI6d30sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYp''@;'; put 'put ''e3JldHVybiB3PDQ/Ilx1MGY1OFx1MGY1YVx1MGY1M1x1MGYwYlx1MGY1OFx1MGY3YyI6dzwxMD8iXHUwZjVlXHUwZjdjXHUwZjQyXHUwZjY2XHUwZjBiXHUwZjQwXHUwZjY2Ijp3PDE3PyJcdTBmNDlcdTBmNzJcdTBmNTNcdTBmMGJcdTBmNDJcdTBmNzRcdTBmNDQiOnc8MjA/Ilx1MGY1MVx1''@;'; put 'put ''MGY0Mlx1MGY3Y1x1MGY0NFx1MGYwYlx1MGY1MVx1MGY0MiI6Ilx1MGY1OFx1MGY1YVx1MGY1M1x1MGYwYlx1MGY1OFx1MGY3YyJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShfKDk3NTg2KSl9LDUwOTI3OmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlv''@;'; put 'put ''biB5KFksWCxlZSl7cmV0dXJuIFkrIiAiK2Z1bmN0aW9uIHcoWSxYKXtyZXR1cm4gMj09PVg/ZnVuY3Rpb24gUChZKXt2YXIgWD17bToidiIsYjoidiIsZDoieiJ9O3JldHVybiB2b2lkIDA9PT1YW1kuY2hhckF0KDApXT9ZOlhbWS5jaGFyQXQoMCldK1kuc3Vic3RyaW5nKDEpfShZKTpZfSh7''@;'; put 'put ''bW06Im11bnV0ZW5uIixNTToibWl6IixkZDoiZGV2ZXpoIn1bZWVdLFkpfWZ1bmN0aW9uIEIoWSl7cmV0dXJuIFk+OT9CKFklMTApOll9dmFyIEY9Wy9eZ2VuL2ksL15jW1x1MDJiY1wnXWh3ZS9pLC9ebWV1L2ksL15lYnIvaSwvXm1hZS9pLC9eKG1lenxldmUpL2ksL15nb3UvaSwvXmVvcy9p''@;'; put 'put ''LC9eZ3dlL2ksL15oZXIvaSwvXmR1L2ksL15rZXIvaV0sTz0vXihnZW52ZXJ8Y1tcdTAyYmNcJ11od2V2cmVyfG1ldXJ6aHxlYnJlbHxtYWV8bWV6aGV2ZW58Z291ZXJlfGVvc3R8Z3dlbmdvbG98aGVyZXxkdXxrZXJ6dXxnZW58Y1tcdTAyYmNcJ11od2V8bWV1fGVicnxtYWV8ZXZlfGdvdXxl''@;'; put 'put ''b3N8Z3dlfGhlcnxkdXxrZXIpL2ksVT1bL15TdS9pLC9eTHUvaSwvXk1lKFtecl18JCkvaSwvXk1lci9pLC9eWWEvaSwvXkd3L2ksL15TYS9pXTtJLmRlZmluZUxvY2FsZSgiYnIiLHttb250aHM6IkdlbnZlcl9DXHUwMmJjaHdldnJlcl9NZXVyemhfRWJyZWxfTWFlX01lemhldmVuX0dvdWVy''@;'; put 'put ''ZV9Fb3N0X0d3ZW5nb2xvX0hlcmVfRHVfS2VyenUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikdlbl9DXHUwMmJjaHdlX01ldV9FYnJfTWFlX0V2ZV9Hb3VfRW9zX0d3ZV9IZXJfRHVfS2VyIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdWxfTHVuX01ldXJ6aF9NZXJjXHUwMmJjaGVyX1lhb3Vf''@;'; put 'put ''R3dlbmVyX1NhZG9ybiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdWxfTHVuX01ldV9NZXJfWWFvX0d3ZV9TYWQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X0x1X01lX01lcl9ZYV9Hd19TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlOlUsZnVsbFdlZWtkYXlzUGFyc2U6Wy9e''@;'; put 'put ''c3VsL2ksL15sdW4vaSwvXm1ldXJ6aC9pLC9ebWVyY1tcdTAyYmNcJ11oZXIvaSwvXnlhb3UvaSwvXmd3ZW5lci9pLC9ec2Fkb3JuL2ldLHNob3J0V2Vla2RheXNQYXJzZTpbL15TdWwvaSwvXkx1bi9pLC9eTWV1L2ksL15NZXIvaSwvXllhby9pLC9eR3dlL2ksL15TYWQvaV0sbWluV2Vla2Rh''@;'; put 'put ''eXNQYXJzZTpVLG1vbnRoc1JlZ2V4Ok8sbW9udGhzU2hvcnRSZWdleDpPLG1vbnRoc1N0cmljdFJlZ2V4Oi9eKGdlbnZlcnxjW1x1MDJiY1wnXWh3ZXZyZXJ8bWV1cnpofGVicmVsfG1hZXxtZXpoZXZlbnxnb3VlcmV8ZW9zdHxnd2VuZ29sb3xoZXJlfGR1fGtlcnp1KS9pLG1vbnRoc1Nob3J0''@;'; put 'put ''U3RyaWN0UmVnZXg6L14oZ2VufGNbXHUwMmJjXCddaHdlfG1ldXxlYnJ8bWFlfGV2ZXxnb3V8ZW9zfGd3ZXxoZXJ8ZHV8a2VyKS9pLG1vbnRoc1BhcnNlOkYsbG9uZ01vbnRoc1BhcnNlOkYsc2hvcnRNb250aHNQYXJzZTpGLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06''@;'; put 'put ''c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIFthIHZpel0gTU1NTSBZWVlZIixMTEw6IkQgW2Egdml6XSBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgW2Egdml6XSBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hpeml2IGRhXSBMVCIsbmV4dERheToiW1dhcmNc''@;'; put 'put ''dTAyYmNob2F6aCBkYV0gTFQiLG5leHRXZWVrOiJkZGRkIFtkYV0gTFQiLGxhc3REYXk6IltEZWNcdTAyYmNoIGRhXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3Bhc2V0IGRhXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiYS1iZW5uICVzIixwYXN0OiIlcyBcdTAyYmN6''@;'; put 'put ''byIsczoidW4gbmViZXVkIHNlZ29uZGVubm9ceGY5IixzczoiJWQgZWlsZW5uIixtOiJ1ciB2dW51dGVubiIsbW06eSxoOiJ1biBldXIiLGhoOiIlZCBldXIiLGQ6InVuIGRldmV6aCIsZGQ6eSxNOiJ1ciBtaXoiLE1NOnkseToidXIgYmxvYXoiLHl5OmZ1bmN0aW9uIGcoWSl7c3dpdGNoKEIo''@;'; put 'put ''WSkpe2Nhc2UgMTpjYXNlIDM6Y2FzZSA0OmNhc2UgNTpjYXNlIDk6cmV0dXJuIFkrIiBibG9heiI7ZGVmYXVsdDpyZXR1cm4gWSsiIHZsb2F6In19fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGFceGYxfHZldCkvLG9yZGluYWw6ZnVuY3Rpb24oWSl7cmV0dXJuIFkrKDE9PT1Z''@;'; put 'put ''PyJhXHhmMSI6InZldCIpfSx3ZWVrOntkb3c6MSxkb3k6NH0sbWVyaWRpZW1QYXJzZTovYS5tLnxnLm0uLyxpc1BNOmZ1bmN0aW9uKFkpe3JldHVybiJnLm0uIj09PVl9LG1lcmlkaWVtOmZ1bmN0aW9uKFksWCxlZSl7cmV0dXJuIFk8MTI/ImEubS4iOiJnLm0uIn19KX0oXyg5NzU4NikpfSw4''@;'; put 'put ''Nzc2ODpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZyh3LFAsRil7dmFyIE89dysiICI7c3dpdGNoKEYpe2Nhc2Uic3MiOnJldHVybiBPKygxPT09dz8ic2VrdW5kYSI6Mj09PXd8fDM9PT13fHw0PT09dz8ic2VrdW5kZSI6InNla3VuZGkiKTtj''@;'; put 'put ''YXNlIm1tIjpyZXR1cm4gTysoMT09PXc/Im1pbnV0YSI6Mj09PXd8fDM9PT13fHw0PT09dz8ibWludXRlIjoibWludXRhIik7Y2FzZSJoIjpyZXR1cm4iamVkYW4gc2F0IjtjYXNlImhoIjpyZXR1cm4gTysoMT09PXc/InNhdCI6Mj09PXd8fDM9PT13fHw0PT09dz8ic2F0YSI6InNhdGkiKTtj''@;'; put 'put ''YXNlImRkIjpyZXR1cm4gTysoMT09PXc/ImRhbiI6ImRhbmEiKTtjYXNlIk1NIjpyZXR1cm4gTysoMT09PXc/Im1qZXNlYyI6Mj09PXd8fDM9PT13fHw0PT09dz8ibWplc2VjYSI6Im1qZXNlY2kiKTtjYXNlInl5IjpyZXR1cm4gTysoMT09PXc/ImdvZGluYSI6Mj09PXd8fDM9PT13fHw0PT09''@;'; put 'put ''dz8iZ29kaW5lIjoiZ29kaW5hIil9fUkuZGVmaW5lTG9jYWxlKCJicyIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFydF9hcHJpbF9tYWpfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iYXJfb2t0b2Jhcl9ub3ZlbWJhcl9kZWNlbWJhciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuLl9m''@;'; put 'put ''ZWIuX21hci5fYXByLl9tYWouX2p1bi5fanVsLl9hdWcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoibmVkamVsamFfcG9uZWRqZWxqYWtfdXRvcmFrX3NyaWplZGFfXHUwMTBkZXR2cnRha19wZXRha19zdWJvdGEiLnNwbGl0''@;'; put 'put ''KCJfIiksd2Vla2RheXNTaG9ydDoibmVkLl9wb24uX3V0by5fc3JpLl9cdTAxMGRldC5fcGV0Ll9zdWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb191dF9zcl9cdTAxMGRlX3BlX3N1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6''@;'; put 'put ''Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2RhbmFzIHVdIExUIixuZXh0RGF5OiJbc3V0cmEgdV0gTFQi''@;'; put 'put ''LG5leHRXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3VdIFtuZWRqZWxqdV0gW3VdIExUIjtjYXNlIDM6cmV0dXJuIlt1XSBbc3JpamVkdV0gW3VdIExUIjtjYXNlIDY6cmV0dXJuIlt1XSBbc3Vib3R1XSBbdV0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2Fz''@;'; put 'put ''ZSA0OmNhc2UgNTpyZXR1cm4iW3VdIGRkZGQgW3VdIExUIn19LGxhc3REYXk6IltqdVx1MDEwZGVyIHVdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6Y2FzZSAzOnJldHVybiJbcHJvXHUwMTYxbHVdIGRkZGQgW3VdIExUIjtjYXNlIDY6cmV0dXJu''@;'; put 'put ''Iltwcm9cdTAxNjFsZV0gW3N1Ym90ZV0gW3VdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIltwcm9cdTAxNjFsaV0gZGRkZCBbdV0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiemEgJXMiLHBhc3Q6InByaWplICVzIixzOiJwYXIgc2Vr''@;'; put 'put ''dW5kaSIsc3M6ZyxtOmZ1bmN0aW9uIHkodyxQLEYsTyl7aWYoIm0iPT09RilyZXR1cm4gUD8iamVkbmEgbWludXRhIjpPPyJqZWRudSBtaW51dHUiOiJqZWRuZSBtaW51dGUifSxtbTpnLGg6ZyxoaDpnLGQ6ImRhbiIsZGQ6ZyxNOiJtamVzZWMiLE1NOmcseToiZ29kaW51Iix5eTpnfSxkYXlP''@;'; put 'put ''Zk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KF8oOTc1ODYpKX0sNTYyOTE6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJjYSIse21vbnRoczp7c3RhbmRhbG9u''@;'; put 'put ''ZToiZ2VuZXJfZmVicmVyX21hclx4ZTdfYWJyaWxfbWFpZ19qdW55X2p1bGlvbF9hZ29zdF9zZXRlbWJyZV9vY3R1YnJlX25vdmVtYnJlX2Rlc2VtYnJlIi5zcGxpdCgiXyIpLGZvcm1hdDoiZGUgZ2VuZXJfZGUgZmVicmVyX2RlIG1hclx4ZTdfZCdhYnJpbF9kZSBtYWlnX2RlIGp1bnlfZGUg''@;'; put 'put ''anVsaW9sX2QnYWdvc3RfZGUgc2V0ZW1icmVfZCdvY3R1YnJlX2RlIG5vdmVtYnJlX2RlIGRlc2VtYnJlIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9EW29EXT8oXHMpK01NTU0vfSxtb250aHNTaG9ydDoiZ2VuLl9mZWJyLl9tYXJceGU3X2Fici5fbWFpZ19qdW55X2p1bC5fYWcuX3NldC5fb2N0''@;'; put 'put ''Ll9ub3YuX2Rlcy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiZGl1bWVuZ2VfZGlsbHVuc19kaW1hcnRzX2RpbWVjcmVzX2Rpam91c19kaXZlbmRyZXNfZGlzc2FidGUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZGcuX2RsLl9kdC5fZGMuX2RqLl9kdi5f''@;'; put 'put ''ZHMuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkZ19kbF9kdF9kY19kal9kdl9kcyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gW2RlXSBZWVlZIixsbDoi''@;'; put 'put ''RCBNTU0gWVlZWSIsTExMOiJEIE1NTU0gW2RlXSBZWVlZIFthIGxlc10gSDptbSIsbGxsOiJEIE1NTSBZWVlZLCBIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBbZGVdIFlZWVkgW2EgbGVzXSBIOm1tIixsbGxsOiJkZGQgRCBNTU0gWVlZWSwgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0''@;'; put 'put ''aW9uKCl7cmV0dXJuIlthdnVpIGEgIisoMSE9PXRoaXMuaG91cnMoKT8ibGVzIjoibGEiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2RlbVx4ZTAgYSAiKygxIT09dGhpcy5ob3VycygpPyJsZXMiOiJsYSIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4i''@;'; put 'put ''ZGRkZCBbYSAiKygxIT09dGhpcy5ob3VycygpPyJsZXMiOiJsYSIpKyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbYWhpciBhICIrKDEhPT10aGlzLmhvdXJzKCk/ImxlcyI6ImxhIikrIl0gTFQifSxsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiJbZWxdIGRkZGQgW3Bhc3Nh''@;'; put 'put ''dCBhICIrKDEhPT10aGlzLmhvdXJzKCk/ImxlcyI6ImxhIikrIl0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkJ2FxdVx4ZWQgJXMiLHBhc3Q6ImZhICVzIixzOiJ1bnMgc2Vnb25zIixzczoiJWQgc2Vnb25zIixtOiJ1biBtaW51dCIsbW06IiVkIG1pbnV0cyIs''@;'; put 'put ''aDoidW5hIGhvcmEiLGhoOiIlZCBob3JlcyIsZDoidW4gZGlhIixkZDoiJWQgZGllcyIsTToidW4gbWVzIixNTToiJWQgbWVzb3MiLHk6InVuIGFueSIseXk6IiVkIGFueXMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHJ8bnx0fFx4ZTh8YSkvLG9yZGluYWw6ZnVuY3Rpb24o''@;'; put 'put ''ZyxCKXt2YXIgdz0xPT09Zz8iciI6Mj09PWc/Im4iOjM9PT1nPyJyIjo0PT09Zz8idCI6Ilx4ZTgiO3JldHVybigidyI9PT1CfHwiVyI9PT1CKSYmKHc9ImEiKSxnK3d9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShfKDk3NTg2KSl9LDg1MzAxOmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkp''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgeT17c3RhbmRhbG9uZToibGVkZW5fXHhmYW5vcl9iXHUwMTU5ZXplbl9kdWJlbl9rdlx1MDExYnRlbl9cdTAxMGRlcnZlbl9cdTAxMGRlcnZlbmVjX3NycGVuX3pceGUxXHUwMTU5XHhlZF9cdTAxNTlceGVkamVuX2xpc3RvcGFkX3Byb3NpbmVjIi5zcGxpdCgi''@;'; put 'put ''XyIpLGZvcm1hdDoibGVkbmFfXHhmYW5vcmFfYlx1MDE1OWV6bmFfZHVibmFfa3ZcdTAxMWJ0bmFfXHUwMTBkZXJ2bmFfXHUwMTBkZXJ2ZW5jZV9zcnBuYV96XHhlMVx1MDE1OVx4ZWRfXHUwMTU5XHhlZGpuYV9saXN0b3BhZHVfcHJvc2luY2UiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L0REP1tv''@;'; put 'put ''Ll0/KFxbW15cW1xdXSpcXXxccykrTU1NTS99LGc9ImxlZF9ceGZhbm9fYlx1MDE1OWVfZHViX2t2XHUwMTFiX1x1MDEwZHZuX1x1MDEwZHZjX3NycF96XHhlMVx1MDE1OV9cdTAxNTlceGVkal9saXNfcHJvIi5zcGxpdCgiXyIpLEI9Wy9ebGVkL2ksL15ceGZhbm8vaSwvXmJcdTAxNTllL2ks''@;'; put 'put ''L15kdWIvaSwvXmt2XHUwMTFiL2ksL14oXHUwMTBkdm58XHUwMTBkZXJ2ZW4kfFx1MDEwZGVydm5hKS9pLC9eKFx1MDEwZHZjfFx1MDEwZGVydmVuZWN8XHUwMTBkZXJ2ZW5jZSkvaSwvXnNycC9pLC9eelx4ZTFcdTAxNTkvaSwvXlx1MDE1OVx4ZWRqL2ksL15saXMvaSwvXnByby9pXSx3PS9e''@;'; put 'put ''KGxlZGVufFx4ZmFub3J8Ylx1MDE1OWV6ZW58ZHViZW58a3ZcdTAxMWJ0ZW58XHUwMTBkZXJ2ZW5lY3xcdTAxMGRlcnZlbmNlfFx1MDEwZGVydmVufFx1MDEwZGVydm5hfHNycGVufHpceGUxXHUwMTU5XHhlZHxcdTAxNTlceGVkamVufGxpc3RvcGFkfHByb3NpbmVjfGxlZHxceGZhbm98Ylx1''@;'; put 'put ''MDE1OWV8ZHVifGt2XHUwMTFifFx1MDEwZHZufFx1MDEwZHZjfHNycHx6XHhlMVx1MDE1OXxcdTAxNTlceGVkanxsaXN8cHJvKS9pO2Z1bmN0aW9uIFAoeil7cmV0dXJuIHo+MSYmejw1JiYxIT1+fih6LzEwKX1mdW5jdGlvbiBGKHosTixMLEspe3ZhciBVPXorIiAiO3N3aXRjaChMKXtjYXNl''@;'; put 'put ''InMiOnJldHVybiBOfHxLPyJwXHhlMXIgc2VrdW5kIjoicFx4ZTFyIHNla3VuZGFtaSI7Y2FzZSJzcyI6cmV0dXJuIE58fEs/VSsoUCh6KT8ic2VrdW5keSI6InNla3VuZCIpOlUrInNla3VuZGFtaSI7Y2FzZSJtIjpyZXR1cm4gTj8ibWludXRhIjpLPyJtaW51dHUiOiJtaW51dG91IjtjYXNl''@;'; put 'put ''Im1tIjpyZXR1cm4gTnx8Sz9VKyhQKHopPyJtaW51dHkiOiJtaW51dCIpOlUrIm1pbnV0YW1pIjtjYXNlImgiOnJldHVybiBOPyJob2RpbmEiOks/ImhvZGludSI6ImhvZGlub3UiO2Nhc2UiaGgiOnJldHVybiBOfHxLP1UrKFAoeik/ImhvZGlueSI6ImhvZGluIik6VSsiaG9kaW5hbWkiO2Nh''@;'; put 'put ''c2UiZCI6cmV0dXJuIE58fEs/ImRlbiI6ImRuZW0iO2Nhc2UiZGQiOnJldHVybiBOfHxLP1UrKFAoeik/ImRueSI6ImRuXHhlZCIpOlUrImRueSI7Y2FzZSJNIjpyZXR1cm4gTnx8Sz8ibVx1MDExYnNceGVkYyI6Im1cdTAxMWJzXHhlZGNlbSI7Y2FzZSJNTSI6cmV0dXJuIE58fEs/VSsoUCh6''@;'; put 'put ''KT8ibVx1MDExYnNceGVkY2UiOiJtXHUwMTFic1x4ZWRjXHUwMTZmIik6VSsibVx1MDExYnNceGVkY2kiO2Nhc2UieSI6cmV0dXJuIE58fEs/InJvayI6InJva2VtIjtjYXNlInl5IjpyZXR1cm4gTnx8Sz9VKyhQKHopPyJyb2t5IjoibGV0Iik6VSsibGV0eSJ9fUkuZGVmaW5lTG9jYWxlKCJj''@;'; put 'put ''cyIse21vbnRoczp5LG1vbnRoc1Nob3J0OmcsbW9udGhzUmVnZXg6dyxtb250aHNTaG9ydFJlZ2V4OncsbW9udGhzU3RyaWN0UmVnZXg6L14obGVkZW58bGVkbmF8XHhmYW5vcmF8XHhmYW5vcnxiXHUwMTU5ZXplbnxiXHUwMTU5ZXpuYXxkdWJlbnxkdWJuYXxrdlx1MDExYnRlbnxrdlx1MDEx''@;'; put 'put ''YnRuYXxcdTAxMGRlcnZlbmVjfFx1MDEwZGVydmVuY2V8XHUwMTBkZXJ2ZW58XHUwMTBkZXJ2bmF8c3JwZW58c3JwbmF8elx4ZTFcdTAxNTlceGVkfFx1MDE1OVx4ZWRqZW58XHUwMTU5XHhlZGpuYXxsaXN0b3BhZHV8bGlzdG9wYWR8cHJvc2luZWN8cHJvc2luY2UpL2ksbW9udGhzU2hvcnRT''@;'; put 'put ''dHJpY3RSZWdleDovXihsZWR8XHhmYW5vfGJcdTAxNTllfGR1Ynxrdlx1MDExYnxcdTAxMGR2bnxcdTAxMGR2Y3xzcnB8elx4ZTFcdTAxNTl8XHUwMTU5XHhlZGp8bGlzfHBybykvaSxtb250aHNQYXJzZTpCLGxvbmdNb250aHNQYXJzZTpCLHNob3J0TW9udGhzUGFyc2U6Qix3ZWVrZGF5czoi''@;'; put 'put ''bmVkXHUwMTFibGVfcG9uZFx1MDExYmxceGVkX1x4ZmF0ZXJceGZkX3N0XHUwMTU5ZWRhX1x1MDEwZHR2cnRla19wXHhlMXRla19zb2JvdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoibmVfcG9fXHhmYXRfc3RfXHUwMTBkdF9wXHhlMV9zbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi''@;'; put 'put ''bmVfcG9fXHhmYXRfc3RfXHUwMTBkdF9wXHhlMV9zbyIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCBELiBNTU1NIFlZWVkg''@;'; put 'put ''SDptbSIsbDoiRC4gTS4gWVlZWSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbZG5lcyB2XSBMVCIsbmV4dERheToiW3pceGVkdHJhIHZdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlt2IG5lZFx1MDExYmxpIHZdIExUIjtjYXNlIDE6Y2Fz''@;'; put 'put ''ZSAyOnJldHVybiJbdl0gZGRkZCBbdl0gTFQiO2Nhc2UgMzpyZXR1cm4iW3ZlIHN0XHUwMTU5ZWR1IHZdIExUIjtjYXNlIDQ6cmV0dXJuIlt2ZSBcdTAxMGR0dnJ0ZWsgdl0gTFQiO2Nhc2UgNTpyZXR1cm4iW3YgcFx4ZTF0ZWsgdl0gTFQiO2Nhc2UgNjpyZXR1cm4iW3Ygc29ib3R1IHZdIExU''@;'; put 'put ''In19LGxhc3REYXk6Ilt2XHUwMTBkZXJhIHZdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlttaW51bG91IG5lZFx1MDExYmxpIHZdIExUIjtjYXNlIDE6Y2FzZSAyOnJldHVybiJbbWludWxceGU5XSBkZGRkIFt2XSBMVCI7Y2FzZSAz''@;'; put 'put ''OnJldHVybiJbbWludWxvdSBzdFx1MDE1OWVkdSB2XSBMVCI7Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW21pbnVsXHhmZF0gZGRkZCBbdl0gTFQiO2Nhc2UgNjpyZXR1cm4iW21pbnVsb3Ugc29ib3R1IHZdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InphICVzIixw''@;'; put 'put ''YXN0OiJwXHUwMTU5ZWQgJXMiLHM6RixzczpGLG06RixtbTpGLGg6RixoaDpGLGQ6RixkZDpGLE06RixNTTpGLHk6Rix5eTpGfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KF8oOTc1ODYpKX0sNjY2NjY6ZnVu''@;'; put 'put ''Y3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJjdiIse21vbnRoczoiXHUwNDNhXHUwNGQxXHUwNDQwXHUwNDNiXHUwNDMwXHUwNDQ3X1x1MDQzZFx1MDQzMFx1MDQ0MFx1MDRkMVx1MDQ0MV9cdTA0M2ZcdTA0NDNcdTA0NDhfXHUwNDMwXHUw''@;'; put 'put ''NDNhXHUwNDMwX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0YWJcdTA0ZDdcdTA0NDBcdTA0NDJcdTA0M2NcdTA0MzVfXHUwNDQzXHUwNDQyXHUwNGQxX1x1MDRhYlx1MDQ0M1x1MDQ0MFx1MDQzYlx1MDQzMF9cdTA0MzBcdTA0MzJcdTA0ZDFcdTA0M2RfXHUwNDRlXHUwNDNmXHUwNDMwX1x1MDQ0''@;'; put 'put ''N1x1MDRmM1x1MDQzYV9cdTA0NDBcdTA0MzBcdTA0NDhcdTA0NDJcdTA0MzBcdTA0MzIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDQzYVx1MDRkMVx1MDQ0MF9cdTA0M2RcdTA0MzBcdTA0NDBfXHUwNDNmXHUwNDQzXHUwNDQ4X1x1MDQzMFx1MDQzYVx1MDQzMF9cdTA0M2NcdTA0MzBc''@;'; put 'put ''dTA0MzlfXHUwNGFiXHUwNGQ3XHUwNDQwX1x1MDQ0M1x1MDQ0Mlx1MDRkMV9cdTA0YWJcdTA0NDNcdTA0NDBfXHUwNDMwXHUwNDMyXHUwNDNkX1x1MDQ0ZVx1MDQzZlx1MDQzMF9cdTA0NDdcdTA0ZjNcdTA0M2FfXHUwNDQwXHUwNDMwXHUwNDQ4Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA0''@;'; put 'put ''MzJcdTA0NGJcdTA0NDBcdTA0NDFcdTA0MzBcdTA0NDBcdTA0M2RcdTA0MzhcdTA0M2FcdTA0NDNcdTA0M2RfXHUwNDQyXHUwNDQzXHUwNDNkXHUwNDQyXHUwNDM4XHUwNDNhXHUwNDQzXHUwNDNkX1x1MDQ0Ylx1MDQ0Mlx1MDQzYlx1MDQzMFx1MDQ0MFx1MDQzOFx1MDQzYVx1MDQ0M1x1MDQz''@;'; put 'put ''ZF9cdTA0NGVcdTA0M2RcdTA0M2FcdTA0NDNcdTA0M2RfXHUwNDNhXHUwNGQ3XHUwNGFiXHUwNDNkXHUwNDM1XHUwNDQwXHUwNDNkXHUwNDM4XHUwNDNhXHUwNDQzXHUwNDNkX1x1MDQ0ZFx1MDQ0MFx1MDQzZFx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZF9cdTA0NDhcdTA0ZDFcdTA0M2NcdTA0''@;'; put 'put ''MzBcdTA0NDJcdTA0M2FcdTA0NDNcdTA0M2QiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNDMyXHUwNDRiXHUwNDQwX1x1MDQ0Mlx1MDQ0M1x1MDQzZF9cdTA0NGJcdTA0NDJcdTA0M2JfXHUwNDRlXHUwNDNkX1x1MDQzYVx1MDRkN1x1MDRhYl9cdTA0NGRcdTA0NDBcdTA0M2RfXHUw''@;'; put 'put ''NDQ4XHUwNGQxXHUwNDNjIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0MzJcdTA0NDBfXHUwNDQyXHUwNDNkX1x1MDQ0Ylx1MDQ0Ml9cdTA0NGVcdTA0M2RfXHUwNDNhXHUwNGFiX1x1MDQ0ZFx1MDQ0MF9cdTA0NDhcdTA0M2MiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJI''@;'; put 'put ''SDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQtTU0tWVlZWSIsTEw6IllZWVkgW1x1MDRhYlx1MDQ0M1x1MDQzYlx1MDQ0NVx1MDQzOF0gTU1NTSBbXHUwNDQzXHUwNDM5XHUwNGQxXHUwNDQ1XHUwNGQ3XHUwNDNkXSBEWy1cdTA0M2NcdTA0ZDdcdTA0NDhcdTA0ZDddIixMTEw6IllZWVkgW1x1''@;'; put 'put ''MDRhYlx1MDQ0M1x1MDQzYlx1MDQ0NVx1MDQzOF0gTU1NTSBbXHUwNDQzXHUwNDM5XHUwNGQxXHUwNDQ1XHUwNGQ3XHUwNDNkXSBEWy1cdTA0M2NcdTA0ZDdcdTA0NDhcdTA0ZDddLCBISDptbSIsTExMTDoiZGRkZCwgWVlZWSBbXHUwNGFiXHUwNDQzXHUwNDNiXHUwNDQ1XHUwNDM4XSBNTU1N''@;'; put 'put ''IFtcdTA0NDNcdTA0MzlcdTA0ZDFcdTA0NDVcdTA0ZDdcdTA0M2RdIERbLVx1MDQzY1x1MDRkN1x1MDQ0OFx1MDRkN10sIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MWZcdTA0MzBcdTA0NGZcdTA0M2RdIExUIFtcdTA0NDFcdTA0MzVcdTA0NDVcdTA0MzVcdTA0NDJcdTA0NDBc''@;'; put 'put ''dTA0MzVdIixuZXh0RGF5OiJbXHUwNDJiXHUwNDQwXHUwNDMwXHUwNDNkXSBMVCBbXHUwNDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyXHUwNDQwXHUwNDM1XSIsbGFzdERheToiW1x1MDRkNlx1MDQzZFx1MDQzNVx1MDQ0MF0gTFQgW1x1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0Mlx1''@;'; put 'put ''MDQ0MFx1MDQzNV0iLG5leHRXZWVrOiJbXHUwNGFhXHUwNDM4XHUwNDQyXHUwNDM1XHUwNDQxXSBkZGRkIExUIFtcdTA0NDFcdTA0MzVcdTA0NDVcdTA0MzVcdTA0NDJcdTA0NDBcdTA0MzVdIixsYXN0V2VlazoiW1x1MDQxOFx1MDQ0MFx1MDQ0Mlx1MDQzZFx1MDRkN10gZGRkZCBMVCBbXHUw''@;'; put 'put ''NDQxXHUwNDM1XHUwNDQ1XHUwNDM1XHUwNDQyXHUwNDQwXHUwNDM1XSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpmdW5jdGlvbihnKXtyZXR1cm4gZysoL1x1MDQ0MVx1MDQzNVx1MDQ0NVx1MDQzNVx1MDQ0MiQvaS5leGVjKGcpPyJcdTA0NDBcdTA0MzVcdTA0M2QiOi9c''@;'; put 'put ''dTA0YWJcdTA0NDNcdTA0M2IkL2kuZXhlYyhnKT8iXHUwNDQyXHUwNDMwXHUwNDNkIjoiXHUwNDQwXHUwNDMwXHUwNDNkIil9LHBhc3Q6IiVzIFx1MDQzYVx1MDQzMFx1MDQ0Zlx1MDQzYlx1MDQzYlx1MDQzMCIsczoiXHUwNDNmXHUwNGQ3XHUwNDQwLVx1MDQzOFx1MDQzYSBcdTA0YWJcdTA0''@;'; put 'put ''MzVcdTA0M2FcdTA0M2FcdTA0NDNcdTA0M2RcdTA0NDIiLHNzOiIlZCBcdTA0YWJcdTA0MzVcdTA0M2FcdTA0M2FcdTA0NDNcdTA0M2RcdTA0NDIiLG06Ilx1MDQzZlx1MDRkN1x1MDQ0MCBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDIiLG1tOiIlZCBcdTA0M2NcdTA0MzhcdTA0M2Rc''@;'; put 'put ''dTA0NDNcdTA0NDIiLGg6Ilx1MDQzZlx1MDRkN1x1MDQ0MCBcdTA0NDFcdTA0MzVcdTA0NDVcdTA0MzVcdTA0NDIiLGhoOiIlZCBcdTA0NDFcdTA0MzVcdTA0NDVcdTA0MzVcdTA0NDIiLGQ6Ilx1MDQzZlx1MDRkN1x1MDQ0MCBcdTA0M2FcdTA0NDNcdTA0M2QiLGRkOiIlZCBcdTA0M2FcdTA0''@;'; put 'put ''NDNcdTA0M2QiLE06Ilx1MDQzZlx1MDRkN1x1MDQ0MCBcdTA0NDNcdTA0MzlcdTA0ZDFcdTA0NDUiLE1NOiIlZCBcdTA0NDNcdTA0MzlcdTA0ZDFcdTA0NDUiLHk6Ilx1MDQzZlx1MDRkN1x1MDQ0MCBcdTA0YWJcdTA0NDNcdTA0M2IiLHl5OiIlZCBcdTA0YWJcdTA0NDNcdTA0M2IifSxkYXlP''@;'; put 'put ''Zk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LVx1MDQzY1x1MDRkN1x1MDQ0OC8sb3JkaW5hbDoiJWQtXHUwNDNjXHUwNGQ3XHUwNDQ4Iix3ZWVrOntkb3c6MSxkb3k6N319KX0oXyg5NzU4NikpfSw1NTE2MzpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5k''@;'; put 'put ''ZWZpbmVMb2NhbGUoImN5Iix7bW9udGhzOiJJb25hd3JfQ2h3ZWZyb3JfTWF3cnRoX0VicmlsbF9NYWlfTWVoZWZpbl9Hb3JmZmVubmFmX0F3c3RfTWVkaV9IeWRyZWZfVGFjaHdlZGRfUmhhZ2Z5ciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSW9uX0Nod2VfTWF3X0Vicl9NYWlfTWVoX0dv''@;'; put 'put ''cl9Bd3NfTWVkX0h5ZF9UYWNoX1JoYWciLnNwbGl0KCJfIiksd2Vla2RheXM6IkR5ZGQgU3VsX0R5ZGQgTGx1bl9EeWRkIE1hd3J0aF9EeWRkIE1lcmNoZXJfRHlkZCBJYXVfRHlkZCBHd2VuZXJfRHlkZCBTYWR3cm4iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VsX0xsdW5fTWF3X01l''@;'; put 'put ''cl9JYXVfR3dlX1NhZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTGxfTWFfTWVfSWFfR3dfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZ''@;'; put 'put ''WSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hlZGRpdyBhbV0gTFQiLG5leHREYXk6IltZZm9yeSBhbV0gTFQiLG5leHRXZWVrOiJkZGRkIFthbV0gTFQiLGxhc3REYXk6IltEZG9lIGFtXSBMVCIs''@;'; put 'put ''bGFzdFdlZWs6ImRkZGQgW2Rpd2V0aGFmIGFtXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToibWV3biAlcyIscGFzdDoiJXMgeW4gXHhmNGwiLHM6InljaHlkaWcgZWlsaWFkYXUiLHNzOiIlZCBlaWxpYWQiLG06Im11bnVkIixtbToiJWQgbXVudWQiLGg6ImF3ciIs''@;'; put 'put ''aGg6IiVkIGF3ciIsZDoiZGl3cm5vZCIsZGQ6IiVkIGRpd3Jub2QiLE06Im1pcyIsTU06IiVkIG1pcyIseToiYmx3eWRkeW4iLHl5OiIlZCBmbHluZWRkIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShmZWR8YWlufGFmfGlsfHlkZHxlZHxlZykvLG9yZGluYWw6ZnVuY3Rpb24o''@;'; put 'put ''Zyl7dmFyIHc9IiI7cmV0dXJuIGc+MjA/dz00MD09PWd8fDUwPT09Z3x8NjA9PT1nfHw4MD09PWd8fDEwMD09PWc/ImZlZCI6ImFpbiI6Zz4wJiYodz1bIiIsImFmIiwiaWwiLCJ5ZGQiLCJ5ZGQiLCJlZCIsImVkIiwiZWQiLCJmZWQiLCJmZWQiLCJmZWQiLCJlZyIsImZlZCIsImVnIiwiZWci''@;'; put 'put ''LCJmZWQiLCJlZyIsImVnIiwiZmVkIiwiZWciLCJmZWQiXVtnXSksZyt3fSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oXyg5NzU4NikpfSw4NzM2MDpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImRhIix7bW9udGhzOiJqYW51YXJfZmVi''@;'; put 'put ''cnVhcl9tYXJ0c19hcHJpbF9tYWpfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuX2ZlYl9tYXJfYXByX21hal9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZWMiLnNwbGl0KCJfIiksd2Vla2Rh''@;'; put 'put ''eXM6InNceGY4bmRhZ19tYW5kYWdfdGlyc2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbFx4ZjhyZGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6InNceGY4bl9tYW5fdGlyX29uc190b3JfZnJlX2xceGY4ciIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoic1x4ZjhfbWFfdGlfb25fdG9f''@;'; put 'put ''ZnJfbFx4ZjgiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgW2QuXSBELiBNTU1NIFlZWVkgW2tsLl0gSEg6bW0ifSxj''@;'; put 'put ''YWxlbmRhcjp7c2FtZURheToiW2kgZGFnIGtsLl0gTFQiLG5leHREYXk6IltpIG1vcmdlbiBrbC5dIExUIixuZXh0V2VlazoicFx4ZTUgZGRkZCBba2wuXSBMVCIsbGFzdERheToiW2kgZ1x4ZTVyIGtsLl0gTFQiLGxhc3RXZWVrOiJbaV0gZGRkZFtzIGtsLl0gTFQiLHNhbWVFbHNlOiJMIn0s''@;'; put 'put ''cmVsYXRpdmVUaW1lOntmdXR1cmU6Im9tICVzIixwYXN0OiIlcyBzaWRlbiIsczoiZlx4ZTUgc2VrdW5kZXIiLHNzOiIlZCBzZWt1bmRlciIsbToiZXQgbWludXQiLG1tOiIlZCBtaW51dHRlciIsaDoiZW4gdGltZSIsaGg6IiVkIHRpbWVyIixkOiJlbiBkYWciLGRkOiIlZCBkYWdlIixNOiJl''@;'; put 'put ''biBtXHhlNW5lZCIsTU06IiVkIG1ceGU1bmVkZXIiLHk6ImV0IFx4ZTVyIix5eToiJWQgXHhlNXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KF8oOTc1ODYpKX0sNDMyNDg6ZnVuY3Rpb24odWUscSxfKXsh''@;'; put 'put ''ZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHkoQix3LFAsRil7dmFyIE89e206WyJlaW5lIE1pbnV0ZSIsImVpbmVyIE1pbnV0ZSJdLGg6WyJlaW5lIFN0dW5kZSIsImVpbmVyIFN0dW5kZSJdLGQ6WyJlaW4gVGFnIiwiZWluZW0gVGFnIl0sZGQ6W0IrIiBUYWdlIixCKyIgVGFn''@;'; put 'put ''ZW4iXSx3OlsiZWluZSBXb2NoZSIsImVpbmVyIFdvY2hlIl0sTTpbImVpbiBNb25hdCIsImVpbmVtIE1vbmF0Il0sTU06W0IrIiBNb25hdGUiLEIrIiBNb25hdGVuIl0seTpbImVpbiBKYWhyIiwiZWluZW0gSmFociJdLHl5OltCKyIgSmFocmUiLEIrIiBKYWhyZW4iXX07cmV0dXJuIHc/T1tQ''@;'; put 'put ''XVswXTpPW1BdWzFdfUkuZGVmaW5lTG9jYWxlKCJkZS1hdCIse21vbnRoczoiSlx4ZTRubmVyX0ZlYnJ1YXJfTVx4ZTRyel9BcHJpbF9NYWlfSnVuaV9KdWxpX0F1Z3VzdF9TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXplbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSlx4ZTRu''@;'; put 'put ''Ll9GZWIuX01ceGU0cnpfQXByLl9NYWlfSnVuaV9KdWxpX0F1Zy5fU2VwLl9Pa3QuX05vdi5fRGV6LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJTb25udGFnX01vbnRhZ19EaWVuc3RhZ19NaXR0d29jaF9Eb25uZXJzdGFnX0ZyZWl0YWdfU2Ftc3RhZyIuc3Bs''@;'; put 'put ''aXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTby5fTW8uX0RpLl9NaS5fRG8uX0ZyLl9TYS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNvX01vX0RpX01pX0RvX0ZyX1NhIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhI''@;'; put 'put ''Om1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltoZXV0ZSB1bV0gTFQgW1Vocl0iLHNhbWVFbHNlOiJMIixuZXh0RGF5OiJbbW9y''@;'; put 'put ''Z2VuIHVtXSBMVCBbVWhyXSIsbmV4dFdlZWs6ImRkZGQgW3VtXSBMVCBbVWhyXSIsbGFzdERheToiW2dlc3Rlcm4gdW1dIExUIFtVaHJdIixsYXN0V2VlazoiW2xldHp0ZW5dIGRkZGQgW3VtXSBMVCBbVWhyXSJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoidm9yICVzIixz''@;'; put 'put ''OiJlaW4gcGFhciBTZWt1bmRlbiIsc3M6IiVkIFNla3VuZGVuIixtOnksbW06IiVkIE1pbnV0ZW4iLGg6eSxoaDoiJWQgU3R1bmRlbiIsZDp5LGRkOnksdzp5LHd3OiIlZCBXb2NoZW4iLE06eSxNTTp5LHkseXk6eX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFs''@;'; put 'put ''OiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShfKDk3NTg2KSl9LDgzMjIyOmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB5KEIsdyxQLEYpe3ZhciBPPXttOlsiZWluZSBNaW51dGUiLCJlaW5lciBNaW51dGUiXSxoOlsiZWluZSBTdHVuZGUi''@;'; put 'put ''LCJlaW5lciBTdHVuZGUiXSxkOlsiZWluIFRhZyIsImVpbmVtIFRhZyJdLGRkOltCKyIgVGFnZSIsQisiIFRhZ2VuIl0sdzpbImVpbmUgV29jaGUiLCJlaW5lciBXb2NoZSJdLE06WyJlaW4gTW9uYXQiLCJlaW5lbSBNb25hdCJdLE1NOltCKyIgTW9uYXRlIixCKyIgTW9uYXRlbiJdLHk6WyJl''@;'; put 'put ''aW4gSmFociIsImVpbmVtIEphaHIiXSx5eTpbQisiIEphaHJlIixCKyIgSmFocmVuIl19O3JldHVybiB3P09bUF1bMF06T1tQXVsxXX1JLmRlZmluZUxvY2FsZSgiZGUtY2giLHttb250aHM6IkphbnVhcl9GZWJydWFyX01ceGU0cnpfQXByaWxfTWFpX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVt''@;'; put 'put ''YmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbi5fRmViLl9NXHhlNHJ6X0Fwci5fTWFpX0p1bmlfSnVsaV9BdWcuX1NlcC5fT2t0Ll9Ob3YuX0Rlei4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiU29ubnRh''@;'; put 'put ''Z19Nb250YWdfRGllbnN0YWdfTWl0dHdvY2hfRG9ubmVyc3RhZ19GcmVpdGFnX1NhbXN0YWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU29fTW9fRGlfTWlfRG9fRnJfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNvX01vX0RpX01pX0RvX0ZyX1NhIi5zcGxpdCgiXyIpLHdlZWtk''@;'; put 'put ''YXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVE''@;'; put 'put ''YXk6IltoZXV0ZSB1bV0gTFQgW1Vocl0iLHNhbWVFbHNlOiJMIixuZXh0RGF5OiJbbW9yZ2VuIHVtXSBMVCBbVWhyXSIsbmV4dFdlZWs6ImRkZGQgW3VtXSBMVCBbVWhyXSIsbGFzdERheToiW2dlc3Rlcm4gdW1dIExUIFtVaHJdIixsYXN0V2VlazoiW2xldHp0ZW5dIGRkZGQgW3VtXSBMVCBb''@;'; put 'put ''VWhyXSJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoidm9yICVzIixzOiJlaW4gcGFhciBTZWt1bmRlbiIsc3M6IiVkIFNla3VuZGVuIixtOnksbW06IiVkIE1pbnV0ZW4iLGg6eSxoaDoiJWQgU3R1bmRlbiIsZDp5LGRkOnksdzp5LHd3OiIlZCBXb2NoZW4iLE06eSxNTTp5''@;'; put 'put ''LHkseXk6eX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShfKDk3NTg2KSl9LDQ1OTMyOmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB5KEIsdyxQLEYpe3ZhciBP''@;'; put 'put ''PXttOlsiZWluZSBNaW51dGUiLCJlaW5lciBNaW51dGUiXSxoOlsiZWluZSBTdHVuZGUiLCJlaW5lciBTdHVuZGUiXSxkOlsiZWluIFRhZyIsImVpbmVtIFRhZyJdLGRkOltCKyIgVGFnZSIsQisiIFRhZ2VuIl0sdzpbImVpbmUgV29jaGUiLCJlaW5lciBXb2NoZSJdLE06WyJlaW4gTW9uYXQi''@;'; put 'put ''LCJlaW5lbSBNb25hdCJdLE1NOltCKyIgTW9uYXRlIixCKyIgTW9uYXRlbiJdLHk6WyJlaW4gSmFociIsImVpbmVtIEphaHIiXSx5eTpbQisiIEphaHJlIixCKyIgSmFocmVuIl19O3JldHVybiB3P09bUF1bMF06T1tQXVsxXX1JLmRlZmluZUxvY2FsZSgiZGUiLHttb250aHM6IkphbnVhcl9G''@;'; put 'put ''ZWJydWFyX01ceGU0cnpfQXByaWxfTWFpX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbi5fRmViLl9NXHhlNHJ6X0Fwci5fTWFpX0p1bmlfSnVsaV9BdWcuX1NlcC5fT2t0Ll9Ob3YuX0Rlei4i''@;'; put 'put ''LnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiU29ubnRhZ19Nb250YWdfRGllbnN0YWdfTWl0dHdvY2hfRG9ubmVyc3RhZ19GcmVpdGFnX1NhbXN0YWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU28uX01vLl9EaS5fTWkuX0RvLl9Gci5fU2EuIi5zcGxpdCgi''@;'; put 'put ''XyIpLHdlZWtkYXlzTWluOiJTb19Nb19EaV9NaV9Eb19Gcl9TYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkg''@;'; put 'put ''SEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaGV1dGUgdW1dIExUIFtVaHJdIixzYW1lRWxzZToiTCIsbmV4dERheToiW21vcmdlbiB1bV0gTFQgW1Vocl0iLG5leHRXZWVrOiJkZGRkIFt1bV0gTFQgW1Vocl0iLGxhc3REYXk6Iltn''@;'; put 'put ''ZXN0ZXJuIHVtXSBMVCBbVWhyXSIsbGFzdFdlZWs6IltsZXR6dGVuXSBkZGRkIFt1bV0gTFQgW1Vocl0ifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6InZvciAlcyIsczoiZWluIHBhYXIgU2VrdW5kZW4iLHNzOiIlZCBTZWt1bmRlbiIsbTp5LG1tOiIlZCBNaW51dGVuIixo''@;'; put 'put ''OnksaGg6IiVkIFN0dW5kZW4iLGQ6eSxkZDp5LHc6eSx3dzoiJWQgV29jaGVuIixNOnksTU06eSx5LHl5Onl9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oXyg5NzU4NikpfSw2NDA1OmZ1bmN0aW9uKHVlLHEs''@;'; put 'put ''Xyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1bIlx1MDc5Nlx1MDdhY1x1MDc4Mlx1MDdhYVx1MDc4N1x1MDdhNlx1MDc4M1x1MDdhOSIsIlx1MDc4YVx1MDdhY1x1MDc4NFx1MDdiMFx1MDc4M1x1MDdhYVx1MDc4N1x1MDdhNlx1MDc4M1x1MDdhOSIsIlx1MDc4OVx1MDdhN1x1''@;'; put 'put ''MDc4M1x1MDdhOFx1MDc5N1x1MDdhYSIsIlx1MDc4N1x1MDdhZFx1MDc5NVx1MDdiMFx1MDc4M1x1MDdhOVx1MDc4ZFx1MDdhYSIsIlx1MDc4OVx1MDdhZCIsIlx1MDc5Nlx1MDdhYlx1MDc4Mlx1MDdiMCIsIlx1MDc5Nlx1MDdhYVx1MDc4ZFx1MDdhNlx1MDc4N1x1MDdhOCIsIlx1MDc4N1x1''@;'; put 'put ''MDdhZlx1MDc4ZVx1MDdhNlx1MDc5MFx1MDdiMFx1MDc5M1x1MDdhYSIsIlx1MDc5MFx1MDdhY1x1MDc5NVx1MDdiMFx1MDc5M1x1MDdhY1x1MDc4OVx1MDdiMFx1MDc4NFx1MDdhNlx1MDc4M1x1MDdhYSIsIlx1MDc4N1x1MDdhZVx1MDc4Nlx1MDdiMFx1MDc5M1x1MDdhZlx1MDc4NFx1MDdh''@;'; put 'put ''Nlx1MDc4M1x1MDdhYSIsIlx1MDc4Mlx1MDdhZVx1MDc4OFx1MDdhY1x1MDc4OVx1MDdiMFx1MDc4NFx1MDdhNlx1MDc4M1x1MDdhYSIsIlx1MDc5MVx1MDdhOFx1MDc5MFx1MDdhY1x1MDc4OVx1MDdiMFx1MDc4NFx1MDdhNlx1MDc4M1x1MDdhYSJdLGc9WyJcdTA3ODdcdTA3YTdcdTA3OGJc''@;'; put 'put ''dTA3YThcdTA3ODdcdTA3YjBcdTA3OGNcdTA3YTYiLCJcdTA3ODBcdTA3YWZcdTA3ODlcdTA3YTYiLCJcdTA3ODdcdTA3YTZcdTA3ODJcdTA3YjBcdTA3OGVcdTA3YTdcdTA3ODNcdTA3YTYiLCJcdTA3ODRcdTA3YWFcdTA3OGJcdTA3YTYiLCJcdTA3ODRcdTA3YWFcdTA3ODNcdTA3YTdcdTA3''@;'; put 'put ''OTBcdTA3YjBcdTA3OGFcdTA3YTZcdTA3OGNcdTA3YTgiLCJcdTA3ODBcdTA3YWFcdTA3ODZcdTA3YWFcdTA3ODNcdTA3YWEiLCJcdTA3ODBcdTA3YWVcdTA3ODJcdTA3YThcdTA3ODBcdTA3YThcdTA3ODNcdTA3YWEiXTtJLmRlZmluZUxvY2FsZSgiZHYiLHttb250aHM6eSxtb250aHNTaG9y''@;'; put 'put ''dDp5LHdlZWtkYXlzOmcsd2Vla2RheXNTaG9ydDpnLHdlZWtkYXlzTWluOiJcdTA3ODdcdTA3YTdcdTA3OGJcdTA3YThfXHUwNzgwXHUwN2FmXHUwNzg5XHUwN2E2X1x1MDc4N1x1MDdhNlx1MDc4Mlx1MDdiMF9cdTA3ODRcdTA3YWFcdTA3OGJcdTA3YTZfXHUwNzg0XHUwN2FhXHUwNzgzXHUw''@;'; put 'put ''N2E3X1x1MDc4MFx1MDdhYVx1MDc4Nlx1MDdhYV9cdTA3ODBcdTA3YWVcdTA3ODJcdTA3YTgiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiRC9NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExM''@;'; put 'put ''TDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1MDc4OVx1MDc4NnxcdTA3ODlcdTA3OGEvLGlzUE06ZnVuY3Rpb24odyl7cmV0dXJuIlx1MDc4OVx1MDc4YSI9PT13fSxtZXJpZGllbTpmdW5jdGlvbih3LFAsRil7cmV0dXJuIHc8MTI/Ilx1MDc4OVx1MDc4NiI6''@;'; put 'put ''Ilx1MDc4OVx1MDc4YSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNzg5XHUwN2E4XHUwNzg3XHUwN2E2XHUwNzhiXHUwN2FhXSBMVCIsbmV4dERheToiW1x1MDc4OVx1MDdhN1x1MDc4Ylx1MDdhNlx1MDc4OVx1MDdhN10gTFQiLG5leHRXZWVrOiJkZGRkIExUIixsYXN0RGF5OiJbXHUwNzg3''@;'; put 'put ''XHUwN2E4XHUwNzg3XHUwN2IwXHUwNzk0XHUwN2FjXSBMVCIsbGFzdFdlZWs6IltcdTA3OGFcdTA3YTdcdTA3ODdcdTA3YThcdTA3OGNcdTA3YWFcdTA3ODhcdTA3YThdIGRkZGQgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDc4Y1x1MDdhY1x1MDc4M1x1MDdh''@;'; put 'put ''ZFx1MDc4ZVx1MDdhNlx1MDc4N1x1MDdhOCAlcyIscGFzdDoiXHUwNzg2XHUwN2FhXHUwNzgzXHUwN2E4XHUwNzgyXHUwN2IwICVzIixzOiJcdTA3OTBcdTA3YThcdTA3ODZcdTA3YWFcdTA3ODJcdTA3YjBcdTA3OGNcdTA3YWFcdTA3ODZcdTA3YWVcdTA3ODVcdTA3YWNcdTA3ODdcdTA3YjAi''@;'; put 'put ''LHNzOiJkJSBcdTA3OTBcdTA3YThcdTA3ODZcdTA3YWFcdTA3ODJcdTA3YjBcdTA3OGNcdTA3YWEiLG06Ilx1MDc4OVx1MDdhOFx1MDc4Mlx1MDdhOFx1MDc5M1x1MDdhY1x1MDc4N1x1MDdiMCIsbW06Ilx1MDc4OVx1MDdhOFx1MDc4Mlx1MDdhOFx1MDc5M1x1MDdhYSAlZCIsaDoiXHUwNzhl''@;'; put 'put ''XHUwN2E2XHUwNzkxXHUwN2E4XHUwNzg3XHUwN2E4XHUwNzgzXHUwN2FjXHUwNzg3XHUwN2IwIixoaDoiXHUwNzhlXHUwN2E2XHUwNzkxXHUwN2E4XHUwNzg3XHUwN2E4XHUwNzgzXHUwN2FhICVkIixkOiJcdTA3OGJcdTA3YWFcdTA3ODhcdTA3YTZcdTA3ODBcdTA3YWNcdTA3ODdcdTA3YjAi''@;'; put 'put ''LGRkOiJcdTA3OGJcdTA3YWFcdTA3ODhcdTA3YTZcdTA3OTBcdTA3YjAgJWQiLE06Ilx1MDc4OVx1MDdhNlx1MDc4MFx1MDdhY1x1MDc4N1x1MDdiMCIsTU06Ilx1MDc4OVx1MDdhNlx1MDc5MFx1MDdiMCAlZCIseToiXHUwNzg3XHUwN2E2XHUwNzgwXHUwN2E2XHUwNzgzXHUwN2FjXHUwNzg3''@;'; put 'put ''XHUwN2IwIix5eToiXHUwNzg3XHUwN2E2XHUwNzgwXHUwN2E2XHUwNzgzXHUwN2FhICVkIn0scHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvXHUwNjBjL2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3''@;'; put 'put ''ZWVrOntkb3c6Nyxkb3k6MTJ9fSl9KF8oOTc1ODYpKX0sNjA3MTg6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJlbCIse21vbnRoc05vbWluYXRpdmVFbDoiXHUwMzk5XHUwM2IxXHUwM2JkXHUwM2JmXHUwM2M1XHUwM2FjXHUwM2Mx''@;'; put 'put ''XHUwM2I5XHUwM2JmXHUwM2MyX1x1MDNhNlx1MDNiNVx1MDNiMlx1MDNjMVx1MDNiZlx1MDNjNVx1MDNhY1x1MDNjMVx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOWNcdTAzYWNcdTAzYzFcdTAzYzRcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzkxXHUwM2MwXHUwM2MxXHUwM2FmXHUwM2JiXHUwM2I5''@;'; put 'put ''XHUwM2JmXHUwM2MyX1x1MDM5Y1x1MDNhY1x1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOTlcdTAzYmZcdTAzY2RcdTAzYmRcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzk5XHUwM2JmXHUwM2NkXHUwM2JiXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5MVx1MDNjZFx1MDNiM1x1MDNiZlx1MDNjNVx1MDNj''@;'; put 'put ''M1x1MDNjNFx1MDNiZlx1MDNjMl9cdTAzYTNcdTAzYjVcdTAzYzBcdTAzYzRcdTAzYWRcdTAzYmNcdTAzYjJcdTAzYzFcdTAzYjlcdTAzYmZcdTAzYzJfXHUwMzlmXHUwM2JhXHUwM2M0XHUwM2NlXHUwM2IyXHUwM2MxXHUwM2I5XHUwM2JmXHUwM2MyX1x1MDM5ZFx1MDNiZlx1MDNhZFx1MDNi''@;'; put 'put ''Y1x1MDNiMlx1MDNjMVx1MDNiOVx1MDNiZlx1MDNjMl9cdTAzOTRcdTAzYjVcdTAzYmFcdTAzYWRcdTAzYmNcdTAzYjJcdTAzYzFcdTAzYjlcdTAzYmZcdTAzYzIiLnNwbGl0KCJfIiksbW9udGhzR2VuaXRpdmVFbDoiXHUwMzk5XHUwM2IxXHUwM2JkXHUwM2JmXHUwM2M1XHUwM2IxXHUwM2Mx''@;'; put 'put ''XHUwM2FmXHUwM2JmXHUwM2M1X1x1MDNhNlx1MDNiNVx1MDNiMlx1MDNjMVx1MDNiZlx1MDNjNVx1MDNiMVx1MDNjMVx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOWNcdTAzYjFcdTAzYzFcdTAzYzRcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzkxXHUwM2MwXHUwM2MxXHUwM2I5XHUwM2JiXHUwM2Fm''@;'; put 'put ''XHUwM2JmXHUwM2M1X1x1MDM5Y1x1MDNiMVx1MDM5MFx1MDNiZlx1MDNjNV9cdTAzOTlcdTAzYmZcdTAzYzVcdTAzYmRcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzk5XHUwM2JmXHUwM2M1XHUwM2JiXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5MVx1MDNjNVx1MDNiM1x1MDNiZlx1MDNjZFx1MDNj''@;'; put 'put ''M1x1MDNjNFx1MDNiZlx1MDNjNV9cdTAzYTNcdTAzYjVcdTAzYzBcdTAzYzRcdTAzYjVcdTAzYmNcdTAzYjJcdTAzYzFcdTAzYWZcdTAzYmZcdTAzYzVfXHUwMzlmXHUwM2JhXHUwM2M0XHUwM2M5XHUwM2IyXHUwM2MxXHUwM2FmXHUwM2JmXHUwM2M1X1x1MDM5ZFx1MDNiZlx1MDNiNVx1MDNi''@;'; put 'put ''Y1x1MDNiMlx1MDNjMVx1MDNhZlx1MDNiZlx1MDNjNV9cdTAzOTRcdTAzYjVcdTAzYmFcdTAzYjVcdTAzYmNcdTAzYjJcdTAzYzFcdTAzYWZcdTAzYmZcdTAzYzUiLnNwbGl0KCJfIiksbW9udGhzOmZ1bmN0aW9uKEIsdyl7cmV0dXJuIEI/InN0cmluZyI9PXR5cGVvZiB3JiYvRC8udGVzdCh3''@;'; put 'put ''LnN1YnN0cmluZygwLHcuaW5kZXhPZigiTU1NTSIpKSk/dGhpcy5fbW9udGhzR2VuaXRpdmVFbFtCLm1vbnRoKCldOnRoaXMuX21vbnRoc05vbWluYXRpdmVFbFtCLm1vbnRoKCldOnRoaXMuX21vbnRoc05vbWluYXRpdmVFbH0sbW9udGhzU2hvcnQ6Ilx1MDM5OVx1MDNiMVx1MDNiZF9cdTAz''@;'; put 'put ''YTZcdTAzYjVcdTAzYjJfXHUwMzljXHUwM2IxXHUwM2MxX1x1MDM5MVx1MDNjMFx1MDNjMV9cdTAzOWNcdTAzYjFcdTAzY2FfXHUwMzk5XHUwM2JmXHUwM2M1XHUwM2JkX1x1MDM5OVx1MDNiZlx1MDNjNVx1MDNiYl9cdTAzOTFcdTAzYzVcdTAzYjNfXHUwM2EzXHUwM2I1XHUwM2MwX1x1MDM5''@;'; put 'put ''Zlx1MDNiYVx1MDNjNF9cdTAzOWRcdTAzYmZcdTAzYjVfXHUwMzk0XHUwM2I1XHUwM2JhIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTAzOWFcdTAzYzVcdTAzYzFcdTAzYjlcdTAzYjFcdTAzYmFcdTAzYWVfXHUwMzk0XHUwM2I1XHUwM2M1XHUwM2M0XHUwM2FkXHUwM2MxXHUwM2IxX1x1MDNh''@;'; put 'put ''NFx1MDNjMVx1MDNhZlx1MDNjNFx1MDNiN19cdTAzYTRcdTAzYjVcdTAzYzRcdTAzYWNcdTAzYzFcdTAzYzRcdTAzYjdfXHUwM2EwXHUwM2FkXHUwM2JjXHUwM2MwXHUwM2M0XHUwM2I3X1x1MDNhMFx1MDNiMVx1MDNjMVx1MDNiMVx1MDNjM1x1MDNiYVx1MDNiNVx1MDNjNVx1MDNhZV9cdTAz''@;'; put 'put ''YTNcdTAzYWNcdTAzYjJcdTAzYjJcdTAzYjFcdTAzYzRcdTAzYmYiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwMzlhXHUwM2M1XHUwM2MxX1x1MDM5NFx1MDNiNVx1MDNjNV9cdTAzYTRcdTAzYzFcdTAzYjlfXHUwM2E0XHUwM2I1XHUwM2M0X1x1MDNhMFx1MDNiNVx1MDNiY19cdTAz''@;'; put 'put ''YTBcdTAzYjFcdTAzYzFfXHUwM2EzXHUwM2IxXHUwM2IyIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTAzOWFcdTAzYzVfXHUwMzk0XHUwM2I1X1x1MDNhNFx1MDNjMV9cdTAzYTRcdTAzYjVfXHUwM2EwXHUwM2I1X1x1MDNhMFx1MDNiMV9cdTAzYTNcdTAzYjEiLnNwbGl0KCJfIiksbWVy''@;'; put 'put ''aWRpZW06ZnVuY3Rpb24oQix3LFApe3JldHVybiBCPjExP1A/Ilx1MDNiY1x1MDNiYyI6Ilx1MDM5Y1x1MDM5YyI6UD8iXHUwM2MwXHUwM2JjIjoiXHUwM2EwXHUwMzljIn0saXNQTTpmdW5jdGlvbihCKXtyZXR1cm4iXHUwM2JjIj09PShCKyIiKS50b0xvd2VyQ2FzZSgpWzBdfSxtZXJpZGll''@;'; put 'put ''bVBhcnNlOi9bXHUwM2EwXHUwMzljXVwuP1x1MDM5Yz9cLj8vaSxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIGg6''@;'; put 'put ''bW0gQSJ9LGNhbGVuZGFyRWw6e3NhbWVEYXk6IltcdTAzYTNcdTAzYWVcdTAzYmNcdTAzYjVcdTAzYzFcdTAzYjEge31dIExUIixuZXh0RGF5OiJbXHUwMzkxXHUwM2NkXHUwM2MxXHUwM2I5XHUwM2JmIHt9XSBMVCIsbmV4dFdlZWs6ImRkZGQgW3t9XSBMVCIsbGFzdERheToiW1x1MDNhN1x1''@;'; put 'put ''MDNiOFx1MDNiNVx1MDNjMiB7fV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDY9PT10aGlzLmRheSgpPyJbXHUwM2M0XHUwM2JmIFx1MDNjMFx1MDNjMVx1MDNiZlx1MDNiN1x1MDNiM1x1MDNiZlx1MDNjZFx1MDNiY1x1MDNiNVx1MDNiZFx1MDNiZl0gZGRkZCBbe31dIExUIjoi''@;'; put 'put ''W1x1MDNjNFx1MDNiN1x1MDNiZCBcdTAzYzBcdTAzYzFcdTAzYmZcdTAzYjdcdTAzYjNcdTAzYmZcdTAzY2RcdTAzYmNcdTAzYjVcdTAzYmRcdTAzYjddIGRkZGQgW3t9XSBMVCJ9LHNhbWVFbHNlOiJMIn0sY2FsZW5kYXI6ZnVuY3Rpb24oQix3KXt2YXIgUD10aGlzLl9jYWxlbmRhckVsW0Jd''@;'; put 'put ''LEY9dyYmdy5ob3VycygpO3JldHVybiBmdW5jdGlvbiB5KEIpe3JldHVybiB0eXBlb2YgRnVuY3Rpb248InUiJiZCIGluc3RhbmNlb2YgRnVuY3Rpb258fCJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoQil9KFApJiYoUD1QLmFwcGx5KHcpKSxQ''@;'; put 'put ''LnJlcGxhY2UoInt9IixGJTEyPT0xPyJcdTAzYzNcdTAzYzRcdTAzYjciOiJcdTAzYzNcdTAzYzRcdTAzYjlcdTAzYzIiKX0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDNjM1x1MDNiNSAlcyIscGFzdDoiJXMgXHUwM2MwXHUwM2MxXHUwM2I5XHUwM2JkIixzOiJcdTAzYmJcdTAzYWZcdTAz''@;'; put 'put ''YjNcdTAzYjEgXHUwM2I0XHUwM2I1XHUwM2M1XHUwM2M0XHUwM2I1XHUwM2MxXHUwM2NjXHUwM2JiXHUwM2I1XHUwM2MwXHUwM2M0XHUwM2IxIixzczoiJWQgXHUwM2I0XHUwM2I1XHUwM2M1XHUwM2M0XHUwM2I1XHUwM2MxXHUwM2NjXHUwM2JiXHUwM2I1XHUwM2MwXHUwM2M0XHUwM2IxIixt''@;'; put 'put ''OiJcdTAzYWRcdTAzYmRcdTAzYjEgXHUwM2JiXHUwM2I1XHUwM2MwXHUwM2M0XHUwM2NjIixtbToiJWQgXHUwM2JiXHUwM2I1XHUwM2MwXHUwM2M0XHUwM2FjIixoOiJcdTAzYmNcdTAzYWZcdTAzYjEgXHUwM2NlXHUwM2MxXHUwM2IxIixoaDoiJWQgXHUwM2NlXHUwM2MxXHUwM2I1XHUwM2My''@;'; put 'put ''IixkOiJcdTAzYmNcdTAzYWZcdTAzYjEgXHUwM2JjXHUwM2FkXHUwM2MxXHUwM2IxIixkZDoiJWQgXHUwM2JjXHUwM2FkXHUwM2MxXHUwM2I1XHUwM2MyIixNOiJcdTAzYWRcdTAzYmRcdTAzYjFcdTAzYzIgXHUwM2JjXHUwM2FlXHUwM2JkXHUwM2IxXHUwM2MyIixNTToiJWQgXHUwM2JjXHUw''@;'; put 'put ''M2FlXHUwM2JkXHUwM2I1XHUwM2MyIix5OiJcdTAzYWRcdTAzYmRcdTAzYjFcdTAzYzIgXHUwM2M3XHUwM2MxXHUwM2NjXHUwM2JkXHUwM2JmXHUwM2MyIix5eToiJWQgXHUwM2M3XHUwM2MxXHUwM2NjXHUwM2JkXHUwM2I5XHUwM2IxIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwy''@;'; put 'put ''fVx1MDNiNy8sb3JkaW5hbDoiJWRcdTAzYjciLHdlZWs6e2RvdzoxLGRveTo0fX0pfShfKDk3NTg2KSl9LDM2MzE5OmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiZW4tYXUiLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hf''@;'; put 'put ''QXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlf''@;'; put 'put ''TW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxv''@;'; put 'put ''bmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQi''@;'; put 'put ''LG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFn''@;'; put 'put ''byIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJz''@;'; put 'put ''In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24oZyl7dmFyIEI9ZyUxMDtyZXR1cm4gZysoMT09fn4oZyUxMDAvMTApPyJ0aCI6MT09PUI/InN0IjoyPT09Qj8ibmQiOjM9PT1CPyJyZCI6InRoIil9LHdlZWs6e2RvdzowLGRv''@;'; put 'put ''eTo0fX0pfShfKDk3NTg2KSl9LDgwNTk3OmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiZW4tY2EiLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9i''@;'; put 'put ''ZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9T''@;'; put 'put ''YXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIs''@;'; put 'put ''TDoiWVlZWS1NTS1ERCIsTEw6Ik1NTU0gRCwgWVlZWSIsTExMOiJNTU1NIEQsIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJk''@;'; put 'put ''ZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06''@;'; put 'put ''ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxu''@;'; put 'put ''ZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24oZyl7dmFyIEI9ZyUxMDtyZXR1cm4gZysoMT09fn4oZyUxMDAvMTApPyJ0aCI6MT09PUI/InN0IjoyPT09Qj8ibmQiOjM9PT1CPyJyZCI6InRoIil9fSl9KF8oOTc1ODYpKX0sNTE4MDA6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSl7InVz''@;'; put 'put ''ZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJlbi1nYiIse21vbnRoczoiSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJf''@;'; put 'put ''QXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJp''@;'; put 'put ''X1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExM''@;'; put 'put ''OiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFth''@;'; put 'put ''dF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRk''@;'; put 'put ''OiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKGcpe3ZhciBCPWclMTA7cmV0dXJuIGcrKDE9PX5+KGclMTAwLzEw''@;'; put 'put ''KT8idGgiOjE9PT1CPyJzdCI6Mj09PUI/Im5kIjozPT09Qj8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oXyg5NzU4NikpfSw4MDc6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJlbi1pZSIse21vbnRoczoiSmFudWFy''@;'; put 'put ''eV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMiLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXM6IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlN1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiU3VfTW9fVHVfV2VfVGhfRnJf''@;'; put 'put ''U2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltU''@;'; put 'put ''b2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMi''@;'; put 'put ''LHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIs''@;'; put 'put ''eXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24oZyl7dmFyIEI9ZyUxMDtyZXR1cm4gZysoMT09fn4oZyUxMDAvMTApPyJ0aCI6MT09PUI/InN0IjoyPT09Qj8ibmQiOjM9PT1CPyJyZCI6InRoIil9LHdl''@;'; put 'put ''ZWs6e2RvdzoxLGRveTo0fX0pfShfKDk3NTg2KSl9LDk1OTYwOmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiZW4taWwiLHttb250aHM6IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2Vw''@;'; put 'put ''dGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJz''@;'; put 'put ''ZGF5X0ZyaWRheV9TYXR1cmRheSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoi''@;'; put 'put ''SEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1RvZGF5IGF0XSBMVCIsbmV4dERheToiW1RvbW9ycm93IGF0XSBMVCIsbmV4dFdl''@;'; put 'put ''ZWs6ImRkZGQgW2F0XSBMVCIsbGFzdERheToiW1llc3RlcmRheSBhdF0gTFQiLGxhc3RXZWVrOiJbTGFzdF0gZGRkZCBbYXRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpbiAlcyIscGFzdDoiJXMgYWdvIixzOiJhIGZldyBzZWNvbmRzIixzczoiJWQgc2Vjb25k''@;'; put 'put ''cyIsbToiYSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJhbiBob3VyIixoaDoiJWQgaG91cnMiLGQ6ImEgZGF5IixkZDoiJWQgZGF5cyIsTToiYSBtb250aCIsTU06IiVkIG1vbnRocyIseToiYSB5ZWFyIix5eToiJWQgeWVhcnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9''@;'; put 'put ''KHN0fG5kfHJkfHRoKS8sb3JkaW5hbDpmdW5jdGlvbihnKXt2YXIgQj1nJTEwO3JldHVybiBnKygxPT1+fihnJTEwMC8xMCk/InRoIjoxPT09Qj8ic3QiOjI9PT1CPyJuZCI6Mz09PUI/InJkIjoidGgiKX19KX0oXyg5NzU4NikpfSw4NDQxODpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJ''@;'; put 'put ''KXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImVuLWluIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmVi''@;'; put 'put ''X01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1Ro''@;'; put 'put ''dV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBoOm1t''@;'; put 'put ''IEEiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0''@;'; put 'put ''XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoi''@;'; put 'put ''YSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKGcpe3ZhciBCPWclMTA7cmV0dXJuIGcrKDE9PX5+''@;'; put 'put ''KGclMTAwLzEwKT8idGgiOjE9PT1CPyJzdCI6Mj09PUI/Im5kIjozPT09Qj8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oXyg5NzU4NikpfSw0Njg2NTpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImVuLW56Iix7bW9u''@;'; put 'put ''dGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIu''@;'; put 'put ''c3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19U''@;'; put 'put ''dV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIGg6bW0gQSJ9LGNhbGVu''@;'; put 'put ''ZGFyOntzYW1lRGF5OiJbVG9kYXkgYXRdIExUIixuZXh0RGF5OiJbVG9tb3Jyb3cgYXRdIExUIixuZXh0V2VlazoiZGRkZCBbYXRdIExUIixsYXN0RGF5OiJbWWVzdGVyZGF5IGF0XSBMVCIsbGFzdFdlZWs6IltMYXN0XSBkZGRkIFthdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1l''@;'; put 'put ''OntmdXR1cmU6ImluICVzIixwYXN0OiIlcyBhZ28iLHM6ImEgZmV3IHNlY29uZHMiLHNzOiIlZCBzZWNvbmRzIixtOiJhIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6ImFuIGhvdXIiLGhoOiIlZCBob3VycyIsZDoiYSBkYXkiLGRkOiIlZCBkYXlzIixNOiJhIG1vbnRoIixNTToiJWQgbW9u''@;'; put 'put ''dGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3R8bmR8cmR8dGgpLyxvcmRpbmFsOmZ1bmN0aW9uKGcpe3ZhciBCPWclMTA7cmV0dXJuIGcrKDE9PX5+KGclMTAwLzEwKT8idGgiOjE9PT1CPyJzdCI6Mj09PUI/Im5kIjozPT09''@;'; put 'put ''Qj8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oXyg5NzU4NikpfSwzMjY0NzpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImVuLXNnIix7bW9udGhzOiJKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5l''@;'; put 'put ''X0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiU3VuZGF5X01vbmRheV9UdWVzZGF5''@;'; put 'put ''X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTdV9Nb19UdV9XZV9UaF9Gcl9TYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7''@;'; put 'put ''TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJv''@;'; put 'put ''dyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25k''@;'; put 'put ''cyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJzIixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLE06ImEgbW9udGgiLE1NOiIlZCBtb250aHMiLHk6ImEgeWVhciIseXk6IiVkIHllYXJzIn0sZGF5T2ZNb250aE9yZGlu''@;'; put 'put ''YWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVuY3Rpb24oZyl7dmFyIEI9ZyUxMDtyZXR1cm4gZysoMT09fn4oZyUxMDAvMTApPyJ0aCI6MT09PUI/InN0IjoyPT09Qj8ibmQiOjM9PT1CPyJyZCI6InRoIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShfKDk3NTg2KSl9''@;'; put 'put ''LDYxOTMxOmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiZW8iLHttb250aHM6ImphbnVhcm9fZmVicnVhcm9fbWFydG9fYXByaWxvX21ham9fanVuaW9fanVsaW9fYVx1MDE2ZGd1c3RvX3NlcHRlbWJyb19va3RvYnJvX25vdmVtYnJv''@;'; put 'put ''X2RlY2VtYnJvIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmViX21hcnRfYXByX21hal9qdW5fanVsX2FcdTAxNmRnX3NlcHRfb2t0X25vdl9kZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6ImRpbWFuXHUwMTA5b19sdW5kb19tYXJkb19tZXJrcmVkb19cdTAxMzVhXHUwMTZkZG9fdmVu''@;'; put 'put ''ZHJlZG9fc2FiYXRvIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRpbV9sdW5fbWFyZF9tZXJrX1x1MDEzNWFcdTAxNmRfdmVuX3NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZGlfbHVfbWFfbWVfXHUwMTM1YV92ZV9zYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhI''@;'; put 'put ''Om1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiW2xhXSBEWy1hbiBkZV0gTU1NTSwgWVlZWSIsTExMOiJbbGFdIERbLWFuIGRlXSBNTU1NLCBZWVlZIEhIOm1tIixMTExMOiJkZGRkW25dLCBbbGFdIERbLWFuIGRlXSBNTU1NLCBZWVlZIEhIOm1tIixsbGxsOiJkZGQsIFts''@;'; put 'put ''YV0gRFstYW4gZGVdIE1NTSwgWVlZWSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1thcF1cLnRcLm0vaSxpc1BNOmZ1bmN0aW9uKGcpe3JldHVybiJwIj09PWcuY2hhckF0KDApLnRvTG93ZXJDYXNlKCl9LG1lcmlkaWVtOmZ1bmN0aW9uKGcsQix3KXtyZXR1cm4gZz4xMT93PyJwLnQubS4iOiJQ''@;'; put 'put ''LlQuTS4iOnc/ImEudC5tLiI6IkEuVC5NLiJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSG9kaWFcdTAxNmQgamVdIExUIixuZXh0RGF5OiJbTW9yZ2FcdTAxNmQgamVdIExUIixuZXh0V2VlazoiZGRkZFtuIGplXSBMVCIsbGFzdERheToiW0hpZXJhXHUwMTZkIGplXSBMVCIsbGFzdFdlZWs6Iltw''@;'; put 'put ''YXNpbnRhbl0gZGRkZFtuIGplXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToicG9zdCAlcyIscGFzdDoiYW50YVx1MDE2ZCAlcyIsczoia2Vsa2FqIHNla3VuZG9qIixzczoiJWQgc2VrdW5kb2oiLG06InVudSBtaW51dG8iLG1tOiIlZCBtaW51dG9qIixoOiJ1bnUg''@;'; put 'put ''aG9ybyIsaGg6IiVkIGhvcm9qIixkOiJ1bnUgdGFnbyIsZGQ6IiVkIHRhZ29qIixNOiJ1bnUgbW9uYXRvIixNTToiJWQgbW9uYXRvaiIseToidW51IGphcm8iLHl5OiIlZCBqYXJvaiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1hLyxvcmRpbmFsOiIlZGEiLHdlZWs6e2Rvdzox''@;'; put 'put ''LGRveTo3fX0pfShfKDk3NTg2KSl9LDQxODA1OmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT0iZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28uX3NlcC5fb2N0Ll9ub3YuX2RpYy4iLnNwbGl0KCJfIiksZz0iZW5lX2ZlYl9tYXJf''@;'; put 'put ''YWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMiLnNwbGl0KCJfIiksQj1bL15lbmUvaSwvXmZlYi9pLC9ebWFyL2ksL15hYnIvaSwvXm1heS9pLC9eanVuL2ksL15qdWwvaSwvXmFnby9pLC9ec2VwL2ksL15vY3QvaSwvXm5vdi9pLC9eZGljL2ldLHc9L14oZW5lcm98ZmVicmVy''@;'; put 'put ''b3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaTtJ''@;'; put 'put ''LmRlZmluZUxvY2FsZSgiZXMtZG8iLHttb250aHM6ImVuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24oRixPKXtyZXR1cm4g''@;'; put 'put ''Rj8vLU1NTS0vLnRlc3QoTyk/Z1tGLm1vbnRoKCldOnlbRi5tb250aCgpXTp5fSxtb250aHNSZWdleDp3LG1vbnRoc1Nob3J0UmVnZXg6dyxtb250aHNTdHJpY3RSZWdleDovXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0''@;'; put 'put ''dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2ksbW9udGhzUGFyc2U6Qixsb25nTW9udGhz''@;'; put 'put ''UGFyc2U6QixzaG9ydE1vbnRoc1BhcnNlOkIsd2Vla2RheXM6ImRvbWluZ29fbHVuZXNfbWFydGVzX21pXHhlOXJjb2xlc19qdWV2ZXNfdmllcm5lc19zXHhlMWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tLl9sdW4uX21hci5fbWlceGU5Ll9qdWUuX3ZpZS5fc1x4ZTFiLiIu''@;'; put 'put ''c3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbWlfanVfdmlfc1x4ZTEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiREQvTU0vWVlZWSIsTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZ''@;'; put 'put ''WSIsTExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2hveSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4''@;'; put 'put ''dERheTpmdW5jdGlvbigpe3JldHVybiJbbWFceGYxYW5hIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFthIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiJbYXllciBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW2VsXSBkZGRkIFtwYXNhZG8gYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1l''@;'; put 'put ''OntmdXR1cmU6ImVuICVzIixwYXN0OiJoYWNlICVzIixzOiJ1bm9zIHNlZ3VuZG9zIixzczoiJWQgc2VndW5kb3MiLG06InVuIG1pbnV0byIsbW06IiVkIG1pbnV0b3MiLGg6InVuYSBob3JhIixoaDoiJWQgaG9yYXMiLGQ6InVuIGRceGVkYSIsZGQ6IiVkIGRceGVkYXMiLHc6InVuYSBzZW1h''@;'; put 'put ''bmEiLHd3OiIlZCBzZW1hbmFzIixNOiJ1biBtZXMiLE1NOiIlZCBtZXNlcyIseToidW4gYVx4ZjFvIix5eToiJWQgYVx4ZjFvcyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShfKDk3NTg2KSl9LDgz''@;'; put 'put ''NDQ1OmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT0iZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28uX3NlcC5fb2N0Ll9ub3YuX2RpYy4iLnNwbGl0KCJfIiksZz0iZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBf''@;'; put 'put ''b2N0X25vdl9kaWMiLnNwbGl0KCJfIiksQj1bL15lbmUvaSwvXmZlYi9pLC9ebWFyL2ksL15hYnIvaSwvXm1heS9pLC9eanVuL2ksL15qdWwvaSwvXmFnby9pLC9ec2VwL2ksL15vY3QvaSwvXm5vdi9pLC9eZGljL2ldLHc9L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlv''@;'; put 'put ''fGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaTtJLmRlZmluZUxvY2FsZSgiZXMtbXgiLHtt''@;'; put 'put ''b250aHM6ImVuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24oRixPKXtyZXR1cm4gRj8vLU1NTS0vLnRlc3QoTyk/Z1tGLm1v''@;'; put 'put ''bnRoKCldOnlbRi5tb250aCgpXTp5fSxtb250aHNSZWdleDp3LG1vbnRoc1Nob3J0UmVnZXg6dyxtb250aHNTdHJpY3RSZWdleDovXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJl''@;'; put 'put ''KS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2ksbW9udGhzUGFyc2U6Qixsb25nTW9udGhzUGFyc2U6QixzaG9ydE1vbnRoc1BhcnNl''@;'; put 'put ''OkIsd2Vla2RheXM6ImRvbWluZ29fbHVuZXNfbWFydGVzX21pXHhlOXJjb2xlc19qdWV2ZXNfdmllcm5lc19zXHhlMWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tLl9sdW4uX21hci5fbWlceGU5Ll9qdWUuX3ZpZS5fc1x4ZTFiLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi''@;'; put 'put ''ZG9fbHVfbWFfbWlfanVfdmlfc1x4ZTEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIixMTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZ''@;'; put 'put ''WSBIOm1tIixMTExMOiJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltob3kgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW21hXHhmMWFu''@;'; put 'put ''YSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2F5ZXIgYSBsYSIrKDEhPT10aGlzLmhv''@;'; put 'put ''dXJzKCk/InMiOiIiKSsiXSBMVCJ9LGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltlbF0gZGRkZCBbcGFzYWRvIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlbiAlcyIscGFzdDoiaGFjZSAlcyIs''@;'; put 'put ''czoidW5vcyBzZWd1bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bmEgaG9yYSIsaGg6IiVkIGhvcmFzIixkOiJ1biBkXHhlZGEiLGRkOiIlZCBkXHhlZGFzIix3OiJ1bmEgc2VtYW5hIix3dzoiJWQgc2VtYW5hcyIsTToidW4gbWVzIixN''@;'; put 'put ''TToiJWQgbWVzZXMiLHk6InVuIGFceGYxbyIseXk6IiVkIGFceGYxb3MifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MCxkb3k6NH0saW52YWxpZERhdGU6IkZlY2hhIGludlx4ZTFsaWRhIn0pfShfKDk3NTg2KSl9LDgx''@;'; put 'put ''NTE2OmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT0iZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28uX3NlcC5fb2N0Ll9ub3YuX2RpYy4iLnNwbGl0KCJfIiksZz0iZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBf''@;'; put 'put ''b2N0X25vdl9kaWMiLnNwbGl0KCJfIiksQj1bL15lbmUvaSwvXmZlYi9pLC9ebWFyL2ksL15hYnIvaSwvXm1heS9pLC9eanVuL2ksL15qdWwvaSwvXmFnby9pLC9ec2VwL2ksL15vY3QvaSwvXm5vdi9pLC9eZGljL2ldLHc9L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlv''@;'; put 'put ''fGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJlfG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaTtJLmRlZmluZUxvY2FsZSgiZXMtdXMiLHtt''@;'; put 'put ''b250aHM6ImVuZXJvX2ZlYnJlcm9fbWFyem9fYWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24oRixPKXtyZXR1cm4gRj8vLU1NTS0vLnRlc3QoTyk/Z1tGLm1v''@;'; put 'put ''bnRoKCldOnlbRi5tb250aCgpXTp5fSxtb250aHNSZWdleDp3LG1vbnRoc1Nob3J0UmVnZXg6dyxtb250aHNTdHJpY3RSZWdleDovXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJl''@;'; put 'put ''KS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2ksbW9udGhzUGFyc2U6Qixsb25nTW9udGhzUGFyc2U6QixzaG9ydE1vbnRoc1BhcnNl''@;'; put 'put ''OkIsd2Vla2RheXM6ImRvbWluZ29fbHVuZXNfbWFydGVzX21pXHhlOXJjb2xlc19qdWV2ZXNfdmllcm5lc19zXHhlMWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tLl9sdW4uX21hci5fbWlceGU5Ll9qdWUuX3ZpZS5fc1x4ZTFiLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoi''@;'; put 'put ''ZG9fbHVfbWFfbWlfanVfdmlfc1x4ZTEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiaDptbSBBIixMVFM6Img6bW06c3MgQSIsTDoiTU0vREQvWVlZWSIsTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSIsTExMOiJEIFtkZV0gTU1NTSBbZGVd''@;'; put 'put ''IFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgaDptbSBBIn0sY2FsZW5kYXI6e3NhbWVEYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2hveSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJb''@;'; put 'put ''bWFceGYxYW5hIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFthIGxhIisoMSE9PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbYXllciBhIGxhIisoMSE9''@;'; put 'put ''PXRoaXMuaG91cnMoKT8icyI6IiIpKyJdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW2VsXSBkZGRkIFtwYXNhZG8gYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImVuICVzIixwYXN0OiJo''@;'; put 'put ''YWNlICVzIixzOiJ1bm9zIHNlZ3VuZG9zIixzczoiJWQgc2VndW5kb3MiLG06InVuIG1pbnV0byIsbW06IiVkIG1pbnV0b3MiLGg6InVuYSBob3JhIixoaDoiJWQgaG9yYXMiLGQ6InVuIGRceGVkYSIsZGQ6IiVkIGRceGVkYXMiLHc6InVuYSBzZW1hbmEiLHd3OiIlZCBzZW1hbmFzIixNOiJ1''@;'; put 'put ''biBtZXMiLE1NOiIlZCBtZXNlcyIseToidW4gYVx4ZjFvIix5eToiJWQgYVx4ZjFvcyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzowLGRveTo2fX0pfShfKDk3NTg2KSl9LDQ2Njc5OmZ1bmN0aW9uKHVlLHEsXyl7IWZ1''@;'; put 'put ''bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT0iZW5lLl9mZWIuX21hci5fYWJyLl9tYXkuX2p1bi5fanVsLl9hZ28uX3NlcC5fb2N0Ll9ub3YuX2RpYy4iLnNwbGl0KCJfIiksZz0iZW5lX2ZlYl9tYXJfYWJyX21heV9qdW5fanVsX2Fnb19zZXBfb2N0X25vdl9kaWMiLnNwbGl0KCJfIiks''@;'; put 'put ''Qj1bL15lbmUvaSwvXmZlYi9pLC9ebWFyL2ksL15hYnIvaSwvXm1heS9pLC9eanVuL2ksL15qdWwvaSwvXmFnby9pLC9ec2VwL2ksL15vY3QvaSwvXm5vdi9pLC9eZGljL2ldLHc9L14oZW5lcm98ZmVicmVyb3xtYXJ6b3xhYnJpbHxtYXlvfGp1bmlvfGp1bGlvfGFnb3N0b3xzZXB0aWVtYnJl''@;'; put 'put ''fG9jdHVicmV8bm92aWVtYnJlfGRpY2llbWJyZXxlbmVcLj98ZmViXC4/fG1hclwuP3xhYnJcLj98bWF5XC4/fGp1blwuP3xqdWxcLj98YWdvXC4/fHNlcFwuP3xvY3RcLj98bm92XC4/fGRpY1wuPykvaTtJLmRlZmluZUxvY2FsZSgiZXMiLHttb250aHM6ImVuZXJvX2ZlYnJlcm9fbWFyem9f''@;'; put 'put ''YWJyaWxfbWF5b19qdW5pb19qdWxpb19hZ29zdG9fc2VwdGllbWJyZV9vY3R1YnJlX25vdmllbWJyZV9kaWNpZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24oRixPKXtyZXR1cm4gRj8vLU1NTS0vLnRlc3QoTyk/Z1tGLm1vbnRoKCldOnlbRi5tb250aCgpXTp5fSxtb250''@;'; put 'put ''aHNSZWdleDp3LG1vbnRoc1Nob3J0UmVnZXg6dyxtb250aHNTdHJpY3RSZWdleDovXihlbmVyb3xmZWJyZXJvfG1hcnpvfGFicmlsfG1heW98anVuaW98anVsaW98YWdvc3RvfHNlcHRpZW1icmV8b2N0dWJyZXxub3ZpZW1icmV8ZGljaWVtYnJlKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6''@;'; put 'put ''L14oZW5lXC4/fGZlYlwuP3xtYXJcLj98YWJyXC4/fG1heVwuP3xqdW5cLj98anVsXC4/fGFnb1wuP3xzZXBcLj98b2N0XC4/fG5vdlwuP3xkaWNcLj8pL2ksbW9udGhzUGFyc2U6Qixsb25nTW9udGhzUGFyc2U6QixzaG9ydE1vbnRoc1BhcnNlOkIsd2Vla2RheXM6ImRvbWluZ29fbHVuZXNf''@;'; put 'put ''bWFydGVzX21pXHhlOXJjb2xlc19qdWV2ZXNfdmllcm5lc19zXHhlMWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tLl9sdW4uX21hci5fbWlceGU5Ll9qdWUuX3ZpZS5fc1x4ZTFiLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZG9fbHVfbWFfbWlfanVfdmlfc1x4ZTEiLnNw''@;'; put 'put ''bGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIixMTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEIFtkZV0g''@;'; put 'put ''TU1NTSBbZGVdIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltob3kgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LG5leHREYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW21hXHhmMWFuYSBhIGxhIisoMSE9PXRoaXMuaG91cnMoKT8i''@;'; put 'put ''cyI6IiIpKyJdIExUIn0sbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iZGRkZCBbYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LGxhc3REYXk6ZnVuY3Rpb24oKXtyZXR1cm4iW2F5ZXIgYSBsYSIrKDEhPT10aGlzLmhvdXJzKCk/InMiOiIiKSsiXSBMVCJ9LGxhc3RX''@;'; put 'put ''ZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIltlbF0gZGRkZCBbcGFzYWRvIGEgbGEiKygxIT09dGhpcy5ob3VycygpPyJzIjoiIikrIl0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlbiAlcyIscGFzdDoiaGFjZSAlcyIsczoidW5vcyBzZWd1bmRvcyIsc3M6IiVkIHNl''@;'; put 'put ''Z3VuZG9zIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dG9zIixoOiJ1bmEgaG9yYSIsaGg6IiVkIGhvcmFzIixkOiJ1biBkXHhlZGEiLGRkOiIlZCBkXHhlZGFzIix3OiJ1bmEgc2VtYW5hIix3dzoiJWQgc2VtYW5hcyIsTToidW4gbWVzIixNTToiJWQgbWVzZXMiLHk6InVuIGFceGYxbyIs''@;'; put 'put ''eXk6IiVkIGFceGYxb3MifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MSxkb3k6NH0saW52YWxpZERhdGU6IkZlY2hhIGludlx4ZTFsaWRhIn0pfShfKDk3NTg2KSl9LDg4MTUwOmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0''@;'; put 'put ''aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB5KEIsdyxQLEYpe3ZhciBPPXtzOlsibVx4ZjVuZSBzZWt1bmRpIiwibVx4ZjVuaSBzZWt1bmQiLCJwYWFyIHNla3VuZGl0Il0sc3M6W0IrInNla3VuZGkiLEIrInNla3VuZGl0Il0sbTpbIlx4ZmNoZSBtaW51dGkiLCJceGZja3MgbWludXQi''@;'; put 'put ''XSxtbTpbQisiIG1pbnV0aSIsQisiIG1pbnV0aXQiXSxoOlsiXHhmY2hlIHR1bm5pIiwidHVuZCBhZWdhIiwiXHhmY2tzIHR1bmQiXSxoaDpbQisiIHR1bm5pIixCKyIgdHVuZGkiXSxkOlsiXHhmY2hlIHBceGU0ZXZhIiwiXHhmY2tzIHBceGU0ZXYiXSxNOlsia3V1IGFqYSIsImt1dSBhZWdh''@;'; put 'put ''IiwiXHhmY2tzIGt1dSJdLE1NOltCKyIga3V1IixCKyIga3V1ZCJdLHk6WyJceGZjaGUgYWFzdGEiLCJhYXN0YSIsIlx4ZmNrcyBhYXN0YSJdLHl5OltCKyIgYWFzdGEiLEIrIiBhYXN0YXQiXX07cmV0dXJuIHc/T1tQXVsyXT9PW1BdWzJdOk9bUF1bMV06Rj9PW1BdWzBdOk9bUF1bMV19SS5k''@;'; put 'put ''ZWZpbmVMb2NhbGUoImV0Iix7bW9udGhzOiJqYWFudWFyX3ZlZWJydWFyX21ceGU0cnRzX2FwcmlsbF9tYWlfanV1bmlfanV1bGlfYXVndXN0X3NlcHRlbWJlcl9va3Rvb2Jlcl9ub3ZlbWJlcl9kZXRzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ImphYW5fdmVlYnJfbVx4ZTRydHNf''@;'; put 'put ''YXByX21haV9qdXVuaV9qdXVsaV9hdWdfc2VwdF9va3Rfbm92X2RldHMiLnNwbGl0KCJfIiksd2Vla2RheXM6InBceGZjaGFwXHhlNGV2X2VzbWFzcFx4ZTRldl90ZWlzaXBceGU0ZXZfa29sbWFwXHhlNGV2X25lbGphcFx4ZTRldl9yZWVkZV9sYXVwXHhlNGV2Ii5zcGxpdCgiXyIpLHdlZWtk''@;'; put 'put ''YXlzU2hvcnQ6IlBfRV9UX0tfTl9SX0wiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlBfRV9UX0tfTl9SX0wiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZ''@;'; put 'put ''IEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUXHhlNG5hLF0gTFQiLG5leHREYXk6IltIb21tZSxdIExUIixuZXh0V2VlazoiW0pceGU0cmdtaW5lXSBkZGRkIExUIixsYXN0RGF5OiJbRWlsZSxdIExUIixsYXN0V2VlazoiW0VlbG1p''@;'; put 'put ''bmVdIGRkZGQgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIHBceGU0cmFzdCIscGFzdDoiJXMgdGFnYXNpIixzOnksc3M6eSxtOnksbW06eSxoOnksaGg6eSxkOnksZGQ6IiVkIHBceGU0ZXZhIixNOnksTU06eSx5LHl5Onl9LGRheU9mTW9udGhPcmRpbmFsUGFy''@;'; put 'put ''c2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oXyg5NzU4NikpfSw4MDc1NzpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImV1Iix7bW9udGhzOiJ1cnRhcnJpbGFfb3RzYWlsYV9tYXJ0eG9h''@;'; put 'put ''X2FwaXJpbGFfbWFpYXR6YV9la2FpbmFfdXp0YWlsYV9hYnV6dHVhX2lyYWlsYV91cnJpYV9hemFyb2FfYWJlbmR1YSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoidXJ0Ll9vdHMuX21hci5fYXBpLl9tYWkuX2VrYS5fdXp0Ll9hYnUuX2lyYS5fdXJyLl9hemEuX2FiZS4iLnNwbGl0KCJfIiks''@;'; put 'put ''bW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiaWdhbmRlYV9hc3RlbGVoZW5hX2FzdGVhcnRlYV9hc3RlYXprZW5hX29zdGVndW5hX29zdGlyYWxhX2xhcnVuYmF0YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJpZy5fYWwuX2FyLl9hei5fb2cuX29sLl9sci4iLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXNNaW46ImlnX2FsX2FyX2F6X29nX29sX2xyIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiWVlZWVtrb10gTU1NTVtyZW5dIERbYV0iLExMTDoiWVlZWVtr''@;'; put 'put ''b10gTU1NTVtyZW5dIERbYV0gSEg6bW0iLExMTEw6ImRkZGQsIFlZWVlba29dIE1NTU1bcmVuXSBEW2FdIEhIOm1tIixsOiJZWVlZLU0tRCIsbGw6IllZWVlba29dIE1NTSBEW2FdIixsbGw6IllZWVlba29dIE1NTSBEW2FdIEhIOm1tIixsbGxsOiJkZGQsIFlZWVlba29dIE1NTSBEW2FdIEhI''@;'; put 'put ''Om1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltnYXVyXSBMVFtldGFuXSIsbmV4dERheToiW2JpaGFyXSBMVFtldGFuXSIsbmV4dFdlZWs6ImRkZGQgTFRbZXRhbl0iLGxhc3REYXk6IlthdHpvXSBMVFtldGFuXSIsbGFzdFdlZWs6IlthdXJyZWtvXSBkZGRkIExUW2V0YW5dIixzYW1lRWxzZToi''@;'; put 'put ''TCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBiYXJydSIscGFzdDoiZHVlbGEgJXMiLHM6InNlZ3VuZG8gYmF0enVrIixzczoiJWQgc2VndW5kbyIsbToibWludXR1IGJhdCIsbW06IiVkIG1pbnV0dSIsaDoib3JkdSBiYXQiLGhoOiIlZCBvcmR1IixkOiJlZ3VuIGJhdCIsZGQ6IiVkIGVn''@;'; put 'put ''dW4iLE06ImhpbGFiZXRlIGJhdCIsTU06IiVkIGhpbGFiZXRlIix5OiJ1cnRlIGJhdCIseXk6IiVkIHVydGUifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KF8oOTc1ODYpKX0sNjU3NDI6ZnVuY3Rpb24odWUs''@;'; put 'put ''cSxfKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciB5PXsxOiJcdTA2ZjEiLDI6Ilx1MDZmMiIsMzoiXHUwNmYzIiw0OiJcdTA2ZjQiLDU6Ilx1MDZmNSIsNjoiXHUwNmY2Iiw3OiJcdTA2ZjciLDg6Ilx1MDZmOCIsOToiXHUwNmY5IiwwOiJcdTA2ZjAifSxnPXsiXHUwNmYxIjoiMSIs''@;'; put 'put ''Ilx1MDZmMiI6IjIiLCJcdTA2ZjMiOiIzIiwiXHUwNmY0IjoiNCIsIlx1MDZmNSI6IjUiLCJcdTA2ZjYiOiI2IiwiXHUwNmY3IjoiNyIsIlx1MDZmOCI6IjgiLCJcdTA2ZjkiOiI5IiwiXHUwNmYwIjoiMCJ9O0kuZGVmaW5lTG9jYWxlKCJmYSIse21vbnRoczoiXHUwNjk4XHUwNjI3XHUwNjQ2''@;'; put 'put ''XHUwNjQ4XHUwNmNjXHUwNjQ3X1x1MDY0MVx1MDY0OFx1MDYzMVx1MDZjY1x1MDY0N19cdTA2NDVcdTA2MjdcdTA2MzFcdTA2MzNfXHUwNjIyXHUwNjQ4XHUwNjMxXHUwNmNjXHUwNjQ0X1x1MDY0NVx1MDY0N19cdTA2OThcdTA2NDhcdTA2MjZcdTA2NDZfXHUwNjk4XHUwNjQ4XHUwNjI2XHUw''@;'; put 'put ''NmNjXHUwNjQ3X1x1MDYyN1x1MDY0OFx1MDYyYV9cdTA2MzNcdTA2N2VcdTA2MmFcdTA2MjdcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjI3XHUwNmE5XHUwNjJhXHUwNjI4XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDYyN1x1MDY0NVx1MDYyOFx1MDYzMV9cdTA2MmZcdTA2MzNcdTA2MjdcdTA2NDVc''@;'; put 'put ''dTA2MjhcdTA2MzEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDY5OFx1MDYyN1x1MDY0Nlx1MDY0OFx1MDZjY1x1MDY0N19cdTA2NDFcdTA2NDhcdTA2MzFcdTA2Y2NcdTA2NDdfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjMzX1x1MDYyMlx1MDY0OFx1MDYzMVx1MDZjY1x1MDY0NF9cdTA2''@;'; put 'put ''NDVcdTA2NDdfXHUwNjk4XHUwNjQ4XHUwNjI2XHUwNjQ2X1x1MDY5OFx1MDY0OFx1MDYyNlx1MDZjY1x1MDY0N19cdTA2MjdcdTA2NDhcdTA2MmFfXHUwNjMzXHUwNjdlXHUwNjJhXHUwNjI3XHUwNjQ1XHUwNjI4XHUwNjMxX1x1MDYyN1x1MDZhOVx1MDYyYVx1MDYyOFx1MDYzMV9cdTA2NDZc''@;'; put 'put ''dTA2NDhcdTA2MjdcdTA2NDVcdTA2MjhcdTA2MzFfXHUwNjJmXHUwNjMzXHUwNjI3XHUwNjQ1XHUwNjI4XHUwNjMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA2Y2NcdTA2YTlcdTIwMGNcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjJmXHUwNjQ4XHUwNjM0XHUwNjQ2XHUwNjI4XHUw''@;'; put 'put ''NjQ3X1x1MDYzM1x1MDY0N1x1MjAwY1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2ODZcdTA2NDdcdTA2MjdcdTA2MzFcdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDdfXHUwNjdlXHUwNjQ2XHUwNjJjXHUyMDBjXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDYyY1x1MDY0NVx1MDYzOVx1''@;'; put 'put ''MDY0N19cdTA2MzRcdTA2NDZcdTA2MjhcdTA2NDciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNmNjXHUwNmE5XHUyMDBjXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDYyZlx1MDY0OFx1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2MzNcdTA2NDdcdTIwMGNcdTA2MzRcdTA2''@;'; put 'put ''NDZcdTA2MjhcdTA2NDdfXHUwNjg2XHUwNjQ3XHUwNjI3XHUwNjMxXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3X1x1MDY3ZVx1MDY0Nlx1MDYyY1x1MjAwY1x1MDYzNFx1MDY0Nlx1MDYyOFx1MDY0N19cdTA2MmNcdTA2NDVcdTA2MzlcdTA2NDdfXHUwNjM0XHUwNjQ2XHUwNjI4XHUwNjQ3Ii5z''@;'; put 'put ''cGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2Y2NfXHUwNjJmX1x1MDYzM19cdTA2ODZfXHUwNjdlX1x1MDYyY19cdTA2MzQiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExM''@;'; put 'put ''OiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTA2NDJcdTA2MjhcdTA2NDQgXHUwNjI3XHUwNjMyIFx1MDYzOFx1MDY0N1x1MDYzMXxcdTA2MjhcdTA2MzlcdTA2MmYgXHUwNjI3XHUw''@;'; put 'put ''NjMyIFx1MDYzOFx1MDY0N1x1MDYzMS8saXNQTTpmdW5jdGlvbih3KXtyZXR1cm4vXHUwNjI4XHUwNjM5XHUwNjJmIFx1MDYyN1x1MDYzMiBcdTA2MzhcdTA2NDdcdTA2MzEvLnRlc3Qodyl9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxGKXtyZXR1cm4gdzwxMj8iXHUwNjQyXHUwNjI4XHUwNjQ0''@;'; put 'put ''IFx1MDYyN1x1MDYzMiBcdTA2MzhcdTA2NDdcdTA2MzEiOiJcdTA2MjhcdTA2MzlcdTA2MmYgXHUwNjI3XHUwNjMyIFx1MDYzOFx1MDY0N1x1MDYzMSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI3XHUwNjQ1XHUwNjMxXHUwNjQ4XHUwNjMyIFx1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYV0g''@;'; put 'put ''TFQiLG5leHREYXk6IltcdTA2NDFcdTA2MzFcdTA2MmZcdTA2MjcgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYV0gTFQiLGxhc3REYXk6IltcdTA2MmZcdTA2Y2NcdTA2MzFcdTA2NDhcdTA2MzIgXHUwNjMzXHUw''@;'; put 'put ''NjI3XHUwNjM5XHUwNjJhXSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDY3ZVx1MDZjY1x1MDYzNF0gW1x1MDYzM1x1MDYyN1x1MDYzOVx1MDYyYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDYyZlx1MDYzMSAlcyIscGFzdDoiJXMgXHUwNjdlXHUwNmNjXHUw''@;'; put 'put ''NjM0IixzOiJcdTA2ODZcdTA2NDZcdTA2MmYgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNmNjXHUwNjQ3IixzczoiJWQgXHUwNjJiXHUwNjI3XHUwNjQ2XHUwNmNjXHUwNjQ3IixtOiJcdTA2Y2NcdTA2YTkgXHUwNjJmXHUwNjQyXHUwNmNjXHUwNjQyXHUwNjQ3IixtbToiJWQgXHUwNjJmXHUwNjQy''@;'; put 'put ''XHUwNmNjXHUwNjQyXHUwNjQ3IixoOiJcdTA2Y2NcdTA2YTkgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhIixoaDoiJWQgXHUwNjMzXHUwNjI3XHUwNjM5XHUwNjJhIixkOiJcdTA2Y2NcdTA2YTkgXHUwNjMxXHUwNjQ4XHUwNjMyIixkZDoiJWQgXHUwNjMxXHUwNjQ4XHUwNjMyIixNOiJcdTA2''@;'; put 'put ''Y2NcdTA2YTkgXHUwNjQ1XHUwNjI3XHUwNjQ3IixNTToiJWQgXHUwNjQ1XHUwNjI3XHUwNjQ3Iix5OiJcdTA2Y2NcdTA2YTkgXHUwNjMzXHUwNjI3XHUwNjQ0Iix5eToiJWQgXHUwNjMzXHUwNjI3XHUwNjQ0In0scHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvW1x1MDZm''@;'; put 'put ''MC1cdTA2ZjldL2csZnVuY3Rpb24oUCl7cmV0dXJuIGdbUF19KS5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oUCl7cmV0dXJuIHlbUF19KS5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSxkYXlPZk1v''@;'; put 'put ''bnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHUwNjQ1LyxvcmRpbmFsOiIlZFx1MDY0NSIsd2Vlazp7ZG93OjYsZG95OjEyfX0pfShfKDk3NTg2KSl9LDMzOTU4OmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT0ibm9sbGEgeWtzaSBrYWtzaSBrb2xtZSBu''@;'; put 'put ''ZWxqXHhlNCB2aWlzaSBrdXVzaSBzZWl0c2VtXHhlNG4ga2FoZGVrc2FuIHloZGVrc1x4ZTRuIi5zcGxpdCgiICIpLGc9WyJub2xsYSIsInloZGVuIiwia2FoZGVuIiwia29sbWVuIiwibmVsalx4ZTRuIiwidmlpZGVuIiwia3V1ZGVuIix5WzddLHlbOF0seVs5XV07ZnVuY3Rpb24gQihGLE8s''@;'; put 'put ''eixOKXt2YXIgTD0iIjtzd2l0Y2goeil7Y2FzZSJzIjpyZXR1cm4gTj8ibXV1dGFtYW4gc2VrdW5uaW4iOiJtdXV0YW1hIHNla3VudGkiO2Nhc2Uic3MiOkw9Tj8ic2VrdW5uaW4iOiJzZWt1bnRpYSI7YnJlYWs7Y2FzZSJtIjpyZXR1cm4gTj8ibWludXV0aW4iOiJtaW51dXR0aSI7Y2FzZSJt''@;'; put 'put ''bSI6TD1OPyJtaW51dXRpbiI6Im1pbnV1dHRpYSI7YnJlYWs7Y2FzZSJoIjpyZXR1cm4gTj8idHVubmluIjoidHVudGkiO2Nhc2UiaGgiOkw9Tj8idHVubmluIjoidHVudGlhIjticmVhaztjYXNlImQiOnJldHVybiBOPyJwXHhlNGl2XHhlNG4iOiJwXHhlNGl2XHhlNCI7Y2FzZSJkZCI6TD1O''@;'; put 'put ''PyJwXHhlNGl2XHhlNG4iOiJwXHhlNGl2XHhlNFx4ZTQiO2JyZWFrO2Nhc2UiTSI6cmV0dXJuIE4/Imt1dWthdWRlbiI6Imt1dWthdXNpIjtjYXNlIk1NIjpMPU4/Imt1dWthdWRlbiI6Imt1dWthdXR0YSI7YnJlYWs7Y2FzZSJ5IjpyZXR1cm4gTj8idnVvZGVuIjoidnVvc2kiO2Nhc2UieXki''@;'; put 'put ''Okw9Tj8idnVvZGVuIjoidnVvdHRhIn1yZXR1cm4gZnVuY3Rpb24gdyhGLE8pe3JldHVybiBGPDEwP08/Z1tGXTp5W0ZdOkZ9KEYsTikrIiAiK0x9SS5kZWZpbmVMb2NhbGUoImZpIix7bW9udGhzOiJ0YW1taWt1dV9oZWxtaWt1dV9tYWFsaXNrdXVfaHVodGlrdXVfdG91a29rdXVfa2VzXHhl''@;'; put 'put ''NGt1dV9oZWluXHhlNGt1dV9lbG9rdXVfc3l5c2t1dV9sb2tha3V1X21hcnJhc2t1dV9qb3VsdWt1dSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoidGFtbWlfaGVsbWlfbWFhbGlzX2h1aHRpX3RvdWtvX2tlc1x4ZTRfaGVpblx4ZTRfZWxvX3N5eXNfbG9rYV9tYXJyYXNfam91bHUiLnNwbGl0''@;'; put 'put ''KCJfIiksd2Vla2RheXM6InN1bm51bnRhaV9tYWFuYW50YWlfdGlpc3RhaV9rZXNraXZpaWtrb190b3JzdGFpX3BlcmphbnRhaV9sYXVhbnRhaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzdV9tYV90aV9rZV90b19wZV9sYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoic3VfbWFfdGlf''@;'; put 'put ''a2VfdG9fcGVfbGEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISC5tbSIsTFRTOiJISC5tbS5zcyIsTDoiREQuTU0uWVlZWSIsTEw6IkRvIE1NTU1bdGFdIFlZWVkiLExMTDoiRG8gTU1NTVt0YV0gWVlZWSwgW2tsb10gSEgubW0iLExMTEw6ImRkZGQsIERvIE1NTU1bdGFdIFlZ''@;'; put 'put ''WVksIFtrbG9dIEhILm1tIixsOiJELk0uWVlZWSIsbGw6IkRvIE1NTSBZWVlZIixsbGw6IkRvIE1NTSBZWVlZLCBba2xvXSBISC5tbSIsbGxsbDoiZGRkLCBEbyBNTU0gWVlZWSwgW2tsb10gSEgubW0ifSxjYWxlbmRhcjp7c2FtZURheToiW3RceGU0blx4ZTRceGU0bl0gW2tsb10gTFQiLG5l''@;'; put 'put ''eHREYXk6IltodW9tZW5uYV0gW2tsb10gTFQiLG5leHRXZWVrOiJkZGRkIFtrbG9dIExUIixsYXN0RGF5OiJbZWlsZW5dIFtrbG9dIExUIixsYXN0V2VlazoiW3ZpaW1lXSBkZGRkW25hXSBba2xvXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgcFx4ZTRceGU0''@;'; put 'put ''c3RceGU0IixwYXN0OiIlcyBzaXR0ZW4iLHM6QixzczpCLG06QixtbTpCLGg6QixoaDpCLGQ6QixkZDpCLE06QixNTTpCLHk6Qix5eTpCfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KF8oOTc1ODYpKX0sNDY3''@;'; put 'put ''MjA6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJmaWwiLHttb250aHM6IkVuZXJvX1BlYnJlcm9fTWFyc29fQWJyaWxfTWF5b19IdW55b19IdWx5b19BZ29zdG9fU2V0eWVtYnJlX09rdHVicmVfTm9ieWVtYnJlX0Rpc3llbWJyZSIu''@;'; put 'put ''c3BsaXQoIl8iKSxtb250aHNTaG9ydDoiRW5lX1BlYl9NYXJfQWJyX01heV9IdW5fSHVsX0Fnb19TZXRfT2t0X05vYl9EaXMiLnNwbGl0KCJfIiksd2Vla2RheXM6Ikxpbmdnb19MdW5lc19NYXJ0ZXNfTWl5ZXJrdWxlc19IdXdlYmVzX0JpeWVybmVzX1NhYmFkbyIuc3BsaXQoIl8iKSx3ZWVr''@;'; put 'put ''ZGF5c1Nob3J0OiJMaW5fTHVuX01hcl9NaXlfSHV3X0JpeV9TYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkxpX0x1X01hX01pX0h1X0JpX1NhYiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJNTS9EL1lZWVkiLExMOiJNTU1NIEQs''@;'; put 'put ''IFlZWVkiLExMTDoiTU1NTSBELCBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBNTU1NIERELCBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IkxUIFtuZ2F5b25nIGFyYXddIixuZXh0RGF5OiJbQnVrYXMgbmddIExUIixuZXh0V2VlazoiTFQgW3NhIHN1c3Vub2QgbmFdIGRkZGQiLGxh''@;'; put 'put ''c3REYXk6IkxUIFtrYWhhcG9uXSIsbGFzdFdlZWs6IkxUIFtub29uZyBuYWthcmFhbmddIGRkZGQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InNhIGxvb2IgbmcgJXMiLHBhc3Q6IiVzIGFuZyBuYWthbGlwYXMiLHM6ImlsYW5nIHNlZ3VuZG8iLHNzOiIlZCBzZWd1bmRv''@;'; put 'put ''IixtOiJpc2FuZyBtaW51dG8iLG1tOiIlZCBtaW51dG8iLGg6ImlzYW5nIG9yYXMiLGhoOiIlZCBvcmFzIixkOiJpc2FuZyBhcmF3IixkZDoiJWQgYXJhdyIsTToiaXNhbmcgYnV3YW4iLE1NOiIlZCBidXdhbiIseToiaXNhbmcgdGFvbiIseXk6IiVkIHRhb24ifSxkYXlPZk1vbnRoT3JkaW5h''@;'; put 'put ''bFBhcnNlOi9cZHsxLDJ9LyxvcmRpbmFsOmZ1bmN0aW9uKGcpe3JldHVybiBnfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oXyg5NzU4NikpfSw5ODM1MjpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImZvIix7bW9udGhzOiJqYW51YXJf''@;'; put 'put ''ZmVicnVhcl9tYXJzX2Fwclx4ZWRsX21haV9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmViX21hcl9hcHJfbWFpX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlcyIuc3BsaXQoIl8iKSx3''@;'; put 'put ''ZWVrZGF5czoic3VubnVkYWd1cl9tXHhlMW5hZGFndXJfdFx4ZmRzZGFndXJfbWlrdWRhZ3VyX2hceGYzc2RhZ3VyX2ZyXHhlZGdnamFkYWd1cl9sZXlnYXJkYWd1ciIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzdW5fbVx4ZTFuX3RceGZkc19taWtfaFx4ZjNzX2ZyXHhlZF9sZXkiLnNw''@;'; put 'put ''bGl0KCJfIiksd2Vla2RheXNNaW46InN1X21ceGUxX3RceGZkX21pX2hceGYzX2ZyX2xlIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExM''@;'; put 'put ''TDoiZGRkZCBELiBNTU1NLCBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltceGNkIGRhZyBrbC5dIExUIixuZXh0RGF5OiJbXHhjZCBtb3JnaW4ga2wuXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2tsLl0gTFQiLGxhc3REYXk6IltceGNkIGdqXHhlMXIga2wuXSBMVCIsbGFzdFdlZWs6''@;'; put 'put ''IltzXHhlZFx4ZjBzdHVdIGRkZGQgW2tsXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToidW0gJXMiLHBhc3Q6IiVzIHNceGVkXHhmMGFuaSIsczoiZlx4ZTEgc2VrdW5kIixzczoiJWQgc2VrdW5kaXIiLG06ImVpbiBtaW51dHR1ciIsbW06IiVkIG1pbnV0dGlyIixo''@;'; put 'put ''OiJlaW4gdFx4ZWRtaSIsaGg6IiVkIHRceGVkbWFyIixkOiJlaW4gZGFndXIiLGRkOiIlZCBkYWdhciIsTToiZWluIG1ceGUxbmFceGYwdXIiLE1NOiIlZCBtXHhlMW5hXHhmMGlyIix5OiJlaXR0IFx4ZTFyIix5eToiJWQgXHhlMXIifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9''@;'; put 'put ''XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KF8oOTc1ODYpKX0sNDIwOTY6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJmci1jYSIse21vbnRoczoiamFudmllcl9mXHhlOXZyaWVyX21hcnNfYXZyaWxfbWFp''@;'; put 'put ''X2p1aW5fanVpbGxldF9hb1x4ZmJ0X3NlcHRlbWJyZV9vY3RvYnJlX25vdmVtYnJlX2RceGU5Y2VtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW52Ll9mXHhlOXZyLl9tYXJzX2F2ci5fbWFpX2p1aW5fanVpbC5fYW9ceGZidF9zZXB0Ll9vY3QuX25vdi5fZFx4ZTljLiIuc3BsaXQo''@;'; put 'put ''Il8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJkaW1hbmNoZV9sdW5kaV9tYXJkaV9tZXJjcmVkaV9qZXVkaV92ZW5kcmVkaV9zYW1lZGkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZGltLl9sdW4uX21hci5fbWVyLl9qZXUuX3Zlbi5fc2FtLiIuc3BsaXQoIl8iKSx3ZWVr''@;'; put 'put ''ZGF5c01pbjoiZGlfbHVfbWFfbWVfamVfdmVfc2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVktTU0tREQiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExM''@;'; put 'put ''TDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQXVqb3VyZFx1MjAxOWh1aSBceGUwXSBMVCIsbmV4dERheToiW0RlbWFpbiBceGUwXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x4ZTBdIExUIixsYXN0RGF5OiJbSGllciBceGUwXSBMVCIsbGFzdFdlZWs6ImRk''@;'; put 'put ''ZGQgW2Rlcm5pZXIgXHhlMF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImRhbnMgJXMiLHBhc3Q6ImlsIHkgYSAlcyIsczoicXVlbHF1ZXMgc2Vjb25kZXMiLHNzOiIlZCBzZWNvbmRlcyIsbToidW5lIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6InVuZSBoZXVy''@;'; put 'put ''ZSIsaGg6IiVkIGhldXJlcyIsZDoidW4gam91ciIsZGQ6IiVkIGpvdXJzIixNOiJ1biBtb2lzIixNTToiJWQgbW9pcyIseToidW4gYW4iLHl5OiIlZCBhbnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGVyfGUpLyxvcmRpbmFsOmZ1bmN0aW9uKGcsQil7c3dpdGNoKEIpe2Rl''@;'; put 'put ''ZmF1bHQ6Y2FzZSJNIjpjYXNlIlEiOmNhc2UiRCI6Y2FzZSJEREQiOmNhc2UiZCI6cmV0dXJuIGcrKDE9PT1nPyJlciI6ImUiKTtjYXNlInciOmNhc2UiVyI6cmV0dXJuIGcrKDE9PT1nPyJyZSI6ImUiKX19fSl9KF8oOTc1ODYpKX0sOTU3NTk6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24o''@;'; put 'put ''SSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJmci1jaCIse21vbnRoczoiamFudmllcl9mXHhlOXZyaWVyX21hcnNfYXZyaWxfbWFpX2p1aW5fanVpbGxldF9hb1x4ZmJ0X3NlcHRlbWJyZV9vY3RvYnJlX25vdmVtYnJlX2RceGU5Y2VtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0''@;'; put 'put ''OiJqYW52Ll9mXHhlOXZyLl9tYXJzX2F2ci5fbWFpX2p1aW5fanVpbC5fYW9ceGZidF9zZXB0Ll9vY3QuX25vdi5fZFx4ZTljLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJkaW1hbmNoZV9sdW5kaV9tYXJkaV9tZXJjcmVkaV9qZXVkaV92ZW5kcmVkaV9zYW1l''@;'; put 'put ''ZGkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZGltLl9sdW4uX21hci5fbWVyLl9qZXUuX3Zlbi5fc2FtLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiZGlfbHVfbWFfbWVfamVfdmVfc2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoi''@;'; put 'put ''SEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbQXVqb3VyZFx1MjAxOWh1aSBceGUwXSBMVCIsbmV4dERheToi''@;'; put 'put ''W0RlbWFpbiBceGUwXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x4ZTBdIExUIixsYXN0RGF5OiJbSGllciBceGUwXSBMVCIsbGFzdFdlZWs6ImRkZGQgW2Rlcm5pZXIgXHhlMF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImRhbnMgJXMiLHBhc3Q6ImlsIHkgYSAlcyIs''@;'; put 'put ''czoicXVlbHF1ZXMgc2Vjb25kZXMiLHNzOiIlZCBzZWNvbmRlcyIsbToidW5lIG1pbnV0ZSIsbW06IiVkIG1pbnV0ZXMiLGg6InVuZSBoZXVyZSIsaGg6IiVkIGhldXJlcyIsZDoidW4gam91ciIsZGQ6IiVkIGpvdXJzIixNOiJ1biBtb2lzIixNTToiJWQgbW9pcyIseToidW4gYW4iLHl5OiIl''@;'; put 'put ''ZCBhbnMifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGVyfGUpLyxvcmRpbmFsOmZ1bmN0aW9uKGcsQil7c3dpdGNoKEIpe2RlZmF1bHQ6Y2FzZSJNIjpjYXNlIlEiOmNhc2UiRCI6Y2FzZSJEREQiOmNhc2UiZCI6cmV0dXJuIGcrKDE9PT1nPyJlciI6ImUiKTtjYXNlInciOmNh''@;'; put 'put ''c2UiVyI6cmV0dXJuIGcrKDE9PT1nPyJyZSI6ImUiKX19LHdlZWs6e2RvdzoxLGRveTo0fX0pfShfKDk3NTg2KSl9LDQwNTk6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciBCPS8oamFudlwuP3xmXHhlOXZyXC4/fG1hcnN8YXZyXC4/fG1haXxqdWlufGp1''@;'; put 'put ''aWxcLj98YW9ceGZidHxzZXB0XC4/fG9jdFwuP3xub3ZcLj98ZFx4ZTljXC4/fGphbnZpZXJ8Zlx4ZTl2cmllcnxtYXJzfGF2cmlsfG1haXxqdWlufGp1aWxsZXR8YW9ceGZidHxzZXB0ZW1icmV8b2N0b2JyZXxub3ZlbWJyZXxkXHhlOWNlbWJyZSkvaSx3PVsvXmphbnYvaSwvXmZceGU5dnIv''@;'; put 'put ''aSwvXm1hcnMvaSwvXmF2ci9pLC9ebWFpL2ksL15qdWluL2ksL15qdWlsL2ksL15hb1x4ZmJ0L2ksL15zZXB0L2ksL15vY3QvaSwvXm5vdi9pLC9eZFx4ZTljL2ldO0kuZGVmaW5lTG9jYWxlKCJmciIse21vbnRoczoiamFudmllcl9mXHhlOXZyaWVyX21hcnNfYXZyaWxfbWFpX2p1aW5fanVp''@;'; put 'put ''bGxldF9hb1x4ZmJ0X3NlcHRlbWJyZV9vY3RvYnJlX25vdmVtYnJlX2RceGU5Y2VtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW52Ll9mXHhlOXZyLl9tYXJzX2F2ci5fbWFpX2p1aW5fanVpbC5fYW9ceGZidF9zZXB0Ll9vY3QuX25vdi5fZFx4ZTljLiIuc3BsaXQoIl8iKSxtb250''@;'; put 'put ''aHNSZWdleDpCLG1vbnRoc1Nob3J0UmVnZXg6Qixtb250aHNTdHJpY3RSZWdleDovXihqYW52aWVyfGZceGU5dnJpZXJ8bWFyc3xhdnJpbHxtYWl8anVpbnxqdWlsbGV0fGFvXHhmYnR8c2VwdGVtYnJlfG9jdG9icmV8bm92ZW1icmV8ZFx4ZTljZW1icmUpL2ksbW9udGhzU2hvcnRTdHJpY3RS''@;'; put 'put ''ZWdleDovKGphbnZcLj98Zlx4ZTl2clwuP3xtYXJzfGF2clwuP3xtYWl8anVpbnxqdWlsXC4/fGFvXHhmYnR8c2VwdFwuP3xvY3RcLj98bm92XC4/fGRceGU5Y1wuPykvaSxtb250aHNQYXJzZTp3LGxvbmdNb250aHNQYXJzZTp3LHNob3J0TW9udGhzUGFyc2U6dyx3ZWVrZGF5czoiZGltYW5j''@;'; put 'put ''aGVfbHVuZGlfbWFyZGlfbWVyY3JlZGlfamV1ZGlfdmVuZHJlZGlfc2FtZWRpIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6ImRpbS5fbHVuLl9tYXIuX21lci5famV1Ll92ZW4uX3NhbS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46ImRpX2x1X21hX21lX2plX3ZlX3NhIi5zcGxpdCgiXyIp''@;'; put 'put ''LHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2Ft''@;'; put 'put ''ZURheToiW0F1am91cmRcdTIwMTlodWkgXHhlMF0gTFQiLG5leHREYXk6IltEZW1haW4gXHhlMF0gTFQiLG5leHRXZWVrOiJkZGRkIFtceGUwXSBMVCIsbGFzdERheToiW0hpZXIgXHhlMF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtkZXJuaWVyIFx4ZTBdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0''@;'; put 'put ''aXZlVGltZTp7ZnV0dXJlOiJkYW5zICVzIixwYXN0OiJpbCB5IGEgJXMiLHM6InF1ZWxxdWVzIHNlY29uZGVzIixzczoiJWQgc2Vjb25kZXMiLG06InVuZSBtaW51dGUiLG1tOiIlZCBtaW51dGVzIixoOiJ1bmUgaGV1cmUiLGhoOiIlZCBoZXVyZXMiLGQ6InVuIGpvdXIiLGRkOiIlZCBqb3Vy''@;'; put 'put ''cyIsdzoidW5lIHNlbWFpbmUiLHd3OiIlZCBzZW1haW5lcyIsTToidW4gbW9pcyIsTU06IiVkIG1vaXMiLHk6InVuIGFuIix5eToiJWQgYW5zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShlcnwpLyxvcmRpbmFsOmZ1bmN0aW9uKEYsTyl7c3dpdGNoKE8pe2Nhc2UiRCI6cmV0''@;'; put 'put ''dXJuIEYrKDE9PT1GPyJlciI6IiIpO2RlZmF1bHQ6Y2FzZSJNIjpjYXNlIlEiOmNhc2UiREREIjpjYXNlImQiOnJldHVybiBGKygxPT09Rj8iZXIiOiJlIik7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBGKygxPT09Rj8icmUiOiJlIil9fSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oXyg5NzU4Nikp''@;'; put 'put ''fSwxNTk1ODpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIHk9Imphbi5fZmViLl9tcnQuX2Fwci5fbWFpX2p1bi5fanVsLl9hdWcuX3NlcC5fb2t0Ll9ub3YuX2Rlcy4iLnNwbGl0KCJfIiksZz0iamFuX2ZlYl9tcnRfYXByX21haV9qdW5fanVsX2F1Z19z''@;'; put 'put ''ZXBfb2t0X25vdl9kZXMiLnNwbGl0KCJfIik7SS5kZWZpbmVMb2NhbGUoImZ5Iix7bW9udGhzOiJqYW5uZXdhcmlzX2ZlYnJld2FyaXNfbWFhcnRfYXByaWxfbWFhaWVfanVueV9qdWx5X2F1Z3VzdHVzX3NlcHRpbWJlcl9va3RvYmVyX25vdmltYmVyX2Rlc2ltYmVyIi5zcGxpdCgiXyIpLG1v''@;'; put 'put ''bnRoc1Nob3J0OmZ1bmN0aW9uKHcsUCl7cmV0dXJuIHc/Ly1NTU0tLy50ZXN0KFApP2dbdy5tb250aCgpXTp5W3cubW9udGgoKV06eX0sbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoic25laW5fbW9hbmRlaV90aWlzZGVpX3dvYW5zZGVpX3RvbmdlcnNkZWlfZnJlZWRfc25lb24iLnNw''@;'; put 'put ''bGl0KCJfIiksd2Vla2RheXNTaG9ydDoic2kuX21vLl90aS5fd28uX3RvLl9mci5fc28uIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTaV9Nb19UaV9Xb19Ub19Gcl9TbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJI''@;'; put 'put ''SDptbTpzcyIsTDoiREQtTU0tWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Iltoam9lZCBvbV0gTFQiLG5leHREYXk6Ilttb2FybiBvbV0gTFQiLG5leHRXZWVrOiJk''@;'; put 'put ''ZGRkIFtvbV0gTFQiLGxhc3REYXk6IltqdXN0ZXIgb21dIExUIixsYXN0V2VlazoiW1x4ZjRmclx4ZmJuZV0gZGRkZCBbb21dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvZXIgJXMiLHBhc3Q6IiVzIGx5biIsczoiaW4gcGVhciBzZWtvbmRlbiIsc3M6IiVkIHNl''@;'; put 'put ''a29uZGVuIixtOiJpZW4gbWluXHhmYXQiLG1tOiIlZCBtaW51dGVuIixoOiJpZW4gb2VyZSIsaGg6IiVkIG9lcmVuIixkOiJpZW4gZGVpIixkZDoiJWQgZGFnZW4iLE06ImllbiBtb2FubmUiLE1NOiIlZCBtb2FubmVuIix5OiJpZW4gamllciIseXk6IiVkIGppZXJyZW4ifSxkYXlPZk1vbnRo''@;'; put 'put ''T3JkaW5hbFBhcnNlOi9cZHsxLDJ9KHN0ZXxkZSkvLG9yZGluYWw6ZnVuY3Rpb24odyl7cmV0dXJuIHcrKDE9PT13fHw4PT09d3x8dz49MjA/InN0ZSI6ImRlIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShfKDk3NTg2KSl9LDk0MTQzOmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1''@;'; put 'put ''c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiZ2EiLHttb250aHM6WyJFYW5ceGUxaXIiLCJGZWFiaHJhIiwiTVx4ZTFydGEiLCJBaWJyZVx4ZTFuIiwiQmVhbHRhaW5lIiwiTWVpdGhlYW1oIiwiSVx4ZmFpbCIsIkxceGZhbmFzYSIsIk1lXHhlMW4gRlx4ZjNtaGFpciIsIkRlaXJlYWRoIEZc''@;'; put 'put ''eGYzbWhhaXIiLCJTYW1oYWluIiwiTm9sbGFpZyJdLG1vbnRoc1Nob3J0OlsiRWFuIiwiRmVhYmgiLCJNXHhlMXJ0IiwiQWliIiwiQmVhbCIsIk1laXRoIiwiSVx4ZmFpbCIsIkxceGZhbiIsIk0uRi4iLCJELkYuIiwiU2FtaCIsIk5vbGwiXSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlz''@;'; put 'put ''OlsiRFx4ZTkgRG9taG5haWdoIiwiRFx4ZTkgTHVhaW4iLCJEXHhlOSBNXHhlMWlydCIsIkRceGU5IENceGU5YWRhb2luIiwiRFx4ZTlhcmRhb2luIiwiRFx4ZTkgaEFvaW5lIiwiRFx4ZTkgU2F0aGFpcm4iXSx3ZWVrZGF5c1Nob3J0OlsiRG9taCIsIkx1YW4iLCJNXHhlMWlydCIsIkNceGU5''@;'; put 'put ''YWQiLCJEXHhlOWFyIiwiQW9pbmUiLCJTYXRoIl0sd2Vla2RheXNNaW46WyJEbyIsIkx1IiwiTVx4ZTEiLCJDXHhlOSIsIkRceGU5IiwiQSIsIlNhIl0sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6''@;'; put 'put ''IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSW5uaXUgYWddIExUIixuZXh0RGF5OiJbQW1ceGUxcmFjaCBhZ10gTFQiLG5leHRXZWVrOiJkZGRkIFthZ10gTFQiLGxhc3REYXk6IltJbm5ceGU5IGFnXSBMVCIs''@;'; put 'put ''bGFzdFdlZWs6ImRkZGQgW3NlbyBjYWl0ZV0gW2FnXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaSAlcyIscGFzdDoiJXMgXHhmMyBzaGluIixzOiJjXHhmYXBsYSBzb2ljaW5kIixzczoiJWQgc29pY2luZCIsbToiblx4ZjNpbVx4ZTlhZCIsbW06IiVkIG5ceGYz''@;'; put 'put ''aW1ceGU5YWQiLGg6InVhaXIgYW4gY2hsb2lnIixoaDoiJWQgdWFpciBhbiBjaGxvaWciLGQ6ImxceGUxIixkZDoiJWQgbFx4ZTEiLE06Im1ceGVkIixNTToiJWQgbVx4ZWRvbm5hIix5OiJibGlhaW4iLHl5OiIlZCBibGlhaW4ifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGR8''@;'; put 'put ''bmF8bWgpLyxvcmRpbmFsOmZ1bmN0aW9uKE8pe3JldHVybiBPKygxPT09Tz8iZCI6TyUxMD09Mj8ibmEiOiJtaCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oXyg5NzU4NikpfSw2NzAyODpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUo''@;'; put 'put ''ImdkIix7bW9udGhzOlsiQW0gRmFvaWxsZWFjaCIsIkFuIEdlYXJyYW4iLCJBbSBNXHhlMHJ0IiwiQW4gR2libGVhbiIsIkFuIENceGU4aXRlYW4iLCJBbiB0LVx4ZDJnbWhpb3MiLCJBbiB0LUl1Y2hhciIsIkFuIExceGY5bmFzdGFsIiwiQW4gdC1TdWx0YWluIiwiQW4gRFx4ZTBtaGFpciIs''@;'; put 'put ''IkFuIHQtU2FtaGFpbiIsIkFuIERceGY5YmhsYWNoZCJdLG1vbnRoc1Nob3J0OlsiRmFvaSIsIkdlYXIiLCJNXHhlMHJ0IiwiR2libCIsIkNceGU4aXQiLCJceGQyZ21oIiwiSXVjaCIsIkxceGY5biIsIlN1bHQiLCJEXHhlMG1oIiwiU2FtaCIsIkRceGY5YmgiXSxtb250aHNQYXJzZUV4YWN0''@;'; put 'put ''OiEwLHdlZWtkYXlzOlsiRGlkXHhmMm1obmFpY2giLCJEaWx1YWluIiwiRGltXHhlMGlydCIsIkRpY2lhZGFpbiIsIkRpYXJkYW9pbiIsIkRpaGFvaW5lIiwiRGlzYXRoYWlybmUiXSx3ZWVrZGF5c1Nob3J0OlsiRGlkIiwiRGlsIiwiRGltIiwiRGljIiwiRGlhIiwiRGloIiwiRGlzIl0sd2Vl''@;'; put 'put ''a2RheXNNaW46WyJEXHhmMiIsIkx1IiwiTVx4ZTAiLCJDaSIsIkFyIiwiSGEiLCJTYSJdLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBN''@;'; put 'put ''TU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0FuLWRpdWdoIGFpZ10gTFQiLG5leHREYXk6IltBLW1ceGUwaXJlYWNoIGFpZ10gTFQiLG5leHRXZWVrOiJkZGRkIFthaWddIExUIixsYXN0RGF5OiJbQW4tZFx4ZTggYWlnXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3NlbyBjaGFp''@;'; put 'put ''ZGhdIFthaWddIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJhbm4gYW4gJXMiLHBhc3Q6ImJobyBjaGlvbm4gJXMiLHM6ImJlYWdhbiBkaW9nYW4iLHNzOiIlZCBkaW9nYW4iLG06Im1pb25haWQiLG1tOiIlZCBtaW9uYWlkZWFuIixoOiJ1YWlyIixoaDoiJWQgdWFp''@;'; put 'put ''cmVhbiIsZDoibGF0aGEiLGRkOiIlZCBsYXRoYSIsTToibVx4ZWNvcyIsTU06IiVkIG1ceGVjb3NhbiIseToiYmxpYWRobmEiLHl5OiIlZCBibGlhZGhuYSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oZHxuYXxtaCkvLG9yZGluYWw6ZnVuY3Rpb24oTyl7cmV0dXJuIE8rKDE9''@;'; put 'put ''PT1PPyJkIjpPJTEwPT0yPyJuYSI6Im1oIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShfKDk3NTg2KSl9LDgwNDI4OmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiZ2wiLHttb250aHM6InhhbmVpcm9fZmVicmVpcm9fbWFyem9fYWJy''@;'; put 'put ''aWxfbWFpb194dVx4ZjFvX3h1bGxvX2Fnb3N0b19zZXRlbWJyb19vdXR1YnJvX25vdmVtYnJvX2RlY2VtYnJvIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJ4YW4uX2ZlYi5fbWFyLl9hYnIuX21haS5feHVceGYxLl94dWwuX2Fnby5fc2V0Ll9vdXQuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxt''@;'; put 'put ''b250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJkb21pbmdvX2x1bnNfbWFydGVzX21ceGU5cmNvcmVzX3hvdmVzX3ZlbnJlc19zXHhlMWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tLl9sdW4uX21hci5fbVx4ZTlyLl94b3YuX3Zlbi5fc1x4ZTFiLiIuc3BsaXQoIl8iKSx3''@;'; put 'put ''ZWVrZGF5c01pbjoiZG9fbHVfbWFfbVx4ZTlfeG9fdmVfc1x4ZTEiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBbZGVdIE1NTU0gW2RlXSBZWVlZIixMTEw6IkQgW2Rl''@;'; put 'put ''XSBNTU1NIFtkZV0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OmZ1bmN0aW9uKCl7cmV0dXJuIltob3hlICIrKDEhPT10aGlzLmhvdXJzKCk/Ilx4ZTFzIjoiXHhlMSIpKyJdIExUIn0sbmV4dERheTpmdW5jdGlv''@;'; put 'put ''bigpe3JldHVybiJbbWFceGYxXHhlMSAiKygxIT09dGhpcy5ob3VycygpPyJceGUxcyI6Ilx4ZTEiKSsiXSBMVCJ9LG5leHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgWyIrKDEhPT10aGlzLmhvdXJzKCk/Ilx4ZTFzIjoiYSIpKyJdIExUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biJbb250ZSAiKygxIT09dGhpcy5ob3VycygpPyJceGUxIjoiYSIpKyJdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW29dIGRkZGQgW3Bhc2FkbyAiKygxIT09dGhpcy5ob3VycygpPyJceGUxcyI6ImEiKSsiXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1''@;'; put 'put ''cmU6ZnVuY3Rpb24oZyl7cmV0dXJuIDA9PT1nLmluZGV4T2YoInVuIik/Im4iK2c6ImVuICIrZ30scGFzdDoiaGFpICVzIixzOiJ1bnMgc2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToidW4gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW5oYSBob3JhIixoaDoiJWQgaG9yYXMiLGQ6''@;'; put 'put ''InVuIGRceGVkYSIsZGQ6IiVkIGRceGVkYXMiLE06InVuIG1lcyIsTU06IiVkIG1lc2VzIix5OiJ1biBhbm8iLHl5OiIlZCBhbm9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KF8oOTc1ODYpKX0s''@;'; put 'put ''NzY4NjE6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHkoQix3LFAsRil7dmFyIE89e3M6WyJcdTA5MjVcdTA5NGJcdTA5MjFcdTA5MmZcdTA5M2UgXHUwOTM4XHUwOTQ1XHUwOTE1XHUwOTAyXHUwOTIxXHUwOTNlXHUwOTAyXHUwOTI4XHUwOTQw''@;'; put 'put ''IiwiXHUwOTI1XHUwOTRiXHUwOTIxXHUwOTQ3IFx1MDkzOFx1MDk0NVx1MDkxNVx1MDkwMlx1MDkyMSJdLHNzOltCKyIgXHUwOTM4XHUwOTQ1XHUwOTE1XHUwOTAyXHUwOTIxXHUwOTNlXHUwOTAyXHUwOTI4XHUwOTQwIixCKyIgXHUwOTM4XHUwOTQ1XHUwOTE1XHUwOTAyXHUwOTIxIl0sbTpb''@;'; put 'put ''Ilx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MmVcdTA5M2ZcdTA5MjNcdTA5MWZcdTA5M2VcdTA5MjgiLCJcdTA5MGZcdTA5MTUgXHUwOTJlXHUwOTNmXHUwOTI4XHUwOTQyXHUwOTFmIl0sbW06W0IrIiBcdTA5MmVcdTA5M2ZcdTA5MjNcdTA5MWZcdTA5M2VcdTA5MDJcdTA5MjhcdTA5NDAiLEIr''@;'; put 'put ''IiBcdTA5MmVcdTA5M2ZcdTA5MjNcdTA5MWZcdTA5M2VcdTA5MDIiXSxoOlsiXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkzNVx1MDkzMFx1MDkzZVx1MDkyOCIsIlx1MDkwZlx1MDkxNSBcdTA5MzVcdTA5MzAiXSxoaDpbQisiIFx1MDkzNVx1MDkzMFx1MDkzZVx1MDkwMlx1MDkyOFx1MDk0MCIs''@;'; put 'put ''QisiIFx1MDkzNVx1MDkzMFx1MDkzZVx1MDkwMiJdLGQ6WyJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTI2XHUwOTNmXHUwOTM4XHUwOTNlXHUwOTI4IiwiXHUwOTBmXHUwOTE1IFx1MDkyNlx1MDk0MFx1MDkzOCJdLGRkOltCKyIgXHUwOTI2XHUwOTNmXHUwOTM4XHUwOTNlXHUwOTAyXHUwOTI4''@;'; put 'put ''XHUwOTQwIixCKyIgXHUwOTI2XHUwOTQwXHUwOTM4Il0sTTpbIlx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MmVcdTA5NGRcdTA5MzlcdTA5MmZcdTA5MjhcdTA5NGRcdTA5MmZcdTA5M2VcdTA5MjgiLCJcdTA5MGZcdTA5MTUgXHUwOTJlXHUwOTRkXHUwOTM5XHUwOTJmXHUwOTI4XHUwOTRiIl0s''@;'; put 'put ''TU06W0IrIiBcdTA5MmVcdTA5NGRcdTA5MzlcdTA5MmZcdTA5MjhcdTA5NGRcdTA5MmZcdTA5M2VcdTA5MjhcdTA5NDAiLEIrIiBcdTA5MmVcdTA5NGRcdTA5MzlcdTA5MmZcdTA5MjhcdTA5NDciXSx5OlsiXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzOFx1MDkz''@;'; put 'put ''ZVx1MDkyOCIsIlx1MDkwZlx1MDkxNSBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzgiXSx5eTpbQisiIFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzOFx1MDkzZVx1MDkwMlx1MDkyOFx1MDk0MCIsQisiIFx1MDkzNVx1MDkzMFx1MDk0ZFx1MDkzOFx1MDkzZVx1MDkwMiJdfTtyZXR1cm4gRj9PW1Bd''@;'; put 'put ''WzBdOk9bUF1bMV19SS5kZWZpbmVMb2NhbGUoImdvbS1kZXZhIix7bW9udGhzOntzdGFuZGFsb25lOiJcdTA5MWNcdTA5M2VcdTA5MjhcdTA5NDdcdTA5MzVcdTA5M2VcdTA5MzBcdTA5NDBfXHUwOTJiXHUwOTQ3XHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQxXHUwOTM1XHUwOTNlXHUwOTMwXHUw''@;'; put 'put ''OTQwX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYV9cdTA5MGZcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDBcdTA5MzJfXHUwOTJlXHUwOTQ3X1x1MDkxY1x1MDk0Mlx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzJcdTA5MmZfXHUwOTExXHUwOTE3XHUwOTM4XHUwOTRkXHUwOTFmX1x1MDkz''@;'; put 'put ''OFx1MDkyYVx1MDk0ZFx1MDkxZlx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMF9cdTA5MTFcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NGJcdTA5MmNcdTA5MzBfXHUwOTI4XHUwOTRiXHUwOTM1XHUwOTRkXHUwOTM5XHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwX1x1MDkyMVx1MDkzZlx1MDkzOFx1MDk0''@;'; put 'put ''N1x1MDkwMlx1MDkyY1x1MDkzMCIuc3BsaXQoIl8iKSxmb3JtYXQ6Ilx1MDkxY1x1MDkzZVx1MDkyOFx1MDk0N1x1MDkzNVx1MDkzZVx1MDkzMFx1MDk0MFx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MmJcdTA5NDdcdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDFcdTA5MzVcdTA5M2VcdTA5''@;'; put 'put ''MzBcdTA5NDBcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkwZlx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0MFx1MDkzMlx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5''@;'; put 'put ''MmVcdTA5NDdcdTA5MmZcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTFjXHUwOTQyXHUwOTI4XHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkxY1x1MDk0MVx1MDkzMlx1MDkyZlx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MTFcdTA5MTdcdTA5''@;'; put 'put ''MzhcdTA5NGRcdTA5MWZcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTM4XHUwOTJhXHUwOTRkXHUwOTFmXHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwXHUwOTNlXHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlX1x1MDkxMVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Ylx1MDkyY1x1MDkz''@;'; put 'put ''MFx1MDkzZVx1MDkxYVx1MDk0ZFx1MDkyZlx1MDkzZV9cdTA5MjhcdTA5NGJcdTA5MzVcdTA5NGRcdTA5MzlcdTA5NDdcdTA5MDJcdTA5MmNcdTA5MzBcdTA5M2VcdTA5MWFcdTA5NGRcdTA5MmZcdTA5M2VfXHUwOTIxXHUwOTNmXHUwOTM4XHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwXHUwOTNl''@;'; put 'put ''XHUwOTFhXHUwOTRkXHUwOTJmXHUwOTNlIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9NTU1NKFxzKStEW29EXT8vfSxtb250aHNTaG9ydDoiXHUwOTFjXHUwOTNlXHUwOTI4XHUwOTQ3Ll9cdTA5MmJcdTA5NDdcdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDEuX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0''@;'; put 'put ''ZFx1MDkxYV9cdTA5MGZcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDAuX1x1MDkyZVx1MDk0N19cdTA5MWNcdTA5NDJcdTA5MjhfXHUwOTFjXHUwOTQxXHUwOTMyLl9cdTA5MTFcdTA5MTcuX1x1MDkzOFx1MDkyYVx1MDk0ZFx1MDkxZlx1MDk0N1x1MDkwMi5fXHUwOTExXHUwOTE1XHUwOTRkXHUw''@;'; put 'put ''OTFmXHUwOTRiLl9cdTA5MjhcdTA5NGJcdTA5MzVcdTA5NGRcdTA5MzlcdTA5NDdcdTA5MDIuX1x1MDkyMVx1MDkzZlx1MDkzOFx1MDk0N1x1MDkwMi4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwOTA2XHUwOTJmXHUwOTI0XHUwOTNlXHUwOTMwX1x1MDkz''@;'; put 'put ''OFx1MDk0Ylx1MDkyZVx1MDkzZVx1MDkzMF9cdTA5MmVcdTA5MDJcdTA5MTdcdTA5MzNcdTA5M2VcdTA5MzBfXHUwOTJjXHUwOTQxXHUwOTI3XHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkyY1x1MDkzZlx1MDkzMFx1MDk0N1x1MDkzOFx1MDk0ZFx1MDkyNFx1MDkzZVx1MDkzMF9cdTA5MzhcdTA5''@;'; put 'put ''NDFcdTA5MTVcdTA5NGRcdTA5MzBcdTA5M2VcdTA5MzBfXHUwOTM2XHUwOTQ3XHUwOTI4XHUwOTM1XHUwOTNlXHUwOTMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDkwNlx1MDkyZlx1MDkyNC5fXHUwOTM4XHUwOTRiXHUwOTJlLl9cdTA5MmVcdTA5MDJcdTA5MTdcdTA5MzMuX1x1''@;'; put 'put ''MDkyY1x1MDk0MVx1MDkyNy5fXHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQ3XHUwOTM4XHUwOTRkXHUwOTI0Ll9cdTA5MzhcdTA5NDFcdTA5MTVcdTA5NGRcdTA5MzAuX1x1MDkzNlx1MDk0N1x1MDkyOC4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDkwNl9cdTA5MzhcdTA5NGJfXHUwOTJl''@;'; put 'put ''XHUwOTAyX1x1MDkyY1x1MDk0MV9cdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDdfXHUwOTM4XHUwOTQxX1x1MDkzNlx1MDk0NyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gW1x1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZVx1''@;'; put 'put ''MDkwMl0iLExUUzoiQSBoOm1tOnNzIFtcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2VcdTA5MDJdIixMOiJERC1NTS1ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgQSBoOm1tIFtcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2VcdTA5MDJdIixMTExMOiJk''@;'; put 'put ''ZGRkLCBNTU1NIERvLCBZWVlZLCBBIGg6bW0gW1x1MDkzNVx1MDkzZVx1MDkxY1x1MDkyNFx1MDkzZVx1MDkwMl0iLGxsbGw6ImRkZCwgRCBNTU0gWVlZWSwgQSBoOm1tIFtcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2VcdTA5MDJdIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA5MDZc''@;'; put 'put ''dTA5MmZcdTA5MWNdIExUIixuZXh0RGF5OiJbXHUwOTJiXHUwOTNlXHUwOTMyXHUwOTRkXHUwOTJmXHUwOTNlXHUwOTAyXSBMVCIsbmV4dFdlZWs6IltcdTA5MmJcdTA5NDFcdTA5MjFcdTA5MzJcdTA5NGJdIGRkZGRbLF0gTFQiLGxhc3REYXk6IltcdTA5MTVcdTA5M2VcdTA5MzJdIExUIixs''@;'; put 'put ''YXN0V2VlazoiW1x1MDkyYlx1MDkzZVx1MDkxZlx1MDkzMlx1MDk0Yl0gZGRkZFssXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMiLHBhc3Q6IiVzIFx1MDkwNlx1MDkyNlx1MDk0MFx1MDkwMiIsczp5LHNzOnksbTp5LG1tOnksaDp5LGhoOnksZDp5LGRkOnks''@;'; put 'put ''TTp5LE1NOnkseSx5eTp5fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KFx1MDkzNVx1MDk0N1x1MDkzMCkvLG9yZGluYWw6ZnVuY3Rpb24oQix3KXtyZXR1cm4iRCI9PT13P0IrIlx1MDkzNVx1MDk0N1x1MDkzMCI6Qn0sd2Vlazp7ZG93OjAsZG95OjN9LG1lcmlkaWVtUGFyc2U6''@;'; put 'put ''L1x1MDkzMFx1MDkzZVx1MDkyNFx1MDk0MHxcdTA5MzhcdTA5MTVcdTA5M2VcdTA5MzNcdTA5NDBcdTA5MDJ8XHUwOTI2XHUwOTI4XHUwOTJhXHUwOTNlXHUwOTMwXHUwOTNlXHUwOTAyfFx1MDkzOFx1MDkzZVx1MDkwMlx1MDkxY1x1MDk0Ny8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKEIsdyl7''@;'; put 'put ''cmV0dXJuIDEyPT09QiYmKEI9MCksIlx1MDkzMFx1MDkzZVx1MDkyNFx1MDk0MCI9PT13P0I8ND9COkIrMTI6Ilx1MDkzOFx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MFx1MDkwMiI9PT13P0I6Ilx1MDkyNlx1MDkyOFx1MDkyYVx1MDkzZVx1MDkzMFx1MDkzZVx1MDkwMiI9PT13P0I+MTI/QjpC''@;'; put 'put ''KzEyOiJcdTA5MzhcdTA5M2VcdTA5MDJcdTA5MWNcdTA5NDciPT09dz9CKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oQix3LFApe3JldHVybiBCPDQ/Ilx1MDkzMFx1MDkzZVx1MDkyNFx1MDk0MCI6QjwxMj8iXHUwOTM4XHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwXHUwOTAyIjpCPDE2''@;'; put 'put ''PyJcdTA5MjZcdTA5MjhcdTA5MmFcdTA5M2VcdTA5MzBcdTA5M2VcdTA5MDIiOkI8MjA/Ilx1MDkzOFx1MDkzZVx1MDkwMlx1MDkxY1x1MDk0NyI6Ilx1MDkzMFx1MDkzZVx1MDkyNFx1MDk0MCJ9fSl9KF8oOTc1ODYpKX0sNTc3MTg6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSl7InVz''@;'; put 'put ''ZSBzdHJpY3QiO2Z1bmN0aW9uIHkoQix3LFAsRil7dmFyIE89e3M6WyJ0aG9kZGVhIHNla29uZGFtbmkiLCJ0aG9kZGUgc2Vrb25kIl0sc3M6W0IrIiBzZWtvbmRhbW5pIixCKyIgc2Vrb25kIl0sbTpbImVrYSBtaW50YW4iLCJlayBtaW51dCJdLG1tOltCKyIgbWludGFtbmkiLEIrIiBtaW50''@;'; put 'put ''YW0iXSxoOlsiZWthIHZvcmFuIiwiZWsgdm9yIl0saGg6W0IrIiB2b3JhbW5pIixCKyIgdm9yYW0iXSxkOlsiZWthIGRpc2FuIiwiZWsgZGlzIl0sZGQ6W0IrIiBkaXNhbW5pIixCKyIgZGlzIl0sTTpbImVrYSBtaG9pbmVhbiIsImVrIG1ob2lubyJdLE1NOltCKyIgbWhvaW5lYW1uaSIsQisi''@;'; put 'put ''IG1ob2luZSJdLHk6WyJla2Egdm9yc2FuIiwiZWsgdm9yb3MiXSx5eTpbQisiIHZvcnNhbW5pIixCKyIgdm9yc2FtIl19O3JldHVybiBGP09bUF1bMF06T1tQXVsxXX1JLmRlZmluZUxvY2FsZSgiZ29tLWxhdG4iLHttb250aHM6e3N0YW5kYWxvbmU6IkphbmVyX0ZlYnJlcl9NYXJzX0Ficmls''@;'; put 'put ''X01haV9KdW5fSnVsYWlfQWdvc3RfU2V0ZW1icl9PdHVicl9Ob3ZlbWJyX0RlemVtYnIiLnNwbGl0KCJfIiksZm9ybWF0OiJKYW5lcmFjaGVhX0ZlYnJlcmFjaGVhX01hcnNhY2hlYV9BYnJpbGFjaGVhX01haWFjaGVhX0p1bmFjaGVhX0p1bGFpYWNoZWFfQWdvc3RhY2hlYV9TZXRlbWJyYWNo''@;'; put 'put ''ZWFfT3R1YnJhY2hlYV9Ob3ZlbWJyYWNoZWFfRGV6ZW1icmFjaGVhIi5zcGxpdCgiXyIpLGlzRm9ybWF0Oi9NTU1NKFxzKStEW29EXT8vfSxtb250aHNTaG9ydDoiSmFuLl9GZWIuX01hcnNfQWJyLl9NYWlfSnVuX0p1bC5fQWdvLl9TZXQuX090dS5fTm92Ll9EZXouIi5zcGxpdCgiXyIpLG1v''@;'; put 'put ''bnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6IkFpdGFyX1NvbWFyX01vbmdsbGFyX0J1ZGh2YXJfQmlyZXN0YXJfU3VrcmFyX1Nvbid2YXIiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiQWl0Ll9Tb20uX01vbi5fQnVkLl9CcmUuX1N1ay5fU29uLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01p''@;'; put 'put ''bjoiQWlfU21fTW9fQnVfQnJfU3VfU24iLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFt2YXp0YV0iLExUUzoiQSBoOm1tOnNzIFt2YXp0YV0iLEw6IkRELU1NLVlZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZ''@;'; put 'put ''WSBBIGg6bW0gW3ZhenRhXSIsTExMTDoiZGRkZCwgTU1NTSBEbywgWVlZWSwgQSBoOm1tIFt2YXp0YV0iLGxsbGw6ImRkZCwgRCBNTU0gWVlZWSwgQSBoOm1tIFt2YXp0YV0ifSxjYWxlbmRhcjp7c2FtZURheToiW0Fpel0gTFQiLG5leHREYXk6IltGYWxlYW1dIExUIixuZXh0V2VlazoiW0Z1''@;'; put 'put ''ZGRsb10gZGRkZFssXSBMVCIsbGFzdERheToiW0thbF0gTFQiLGxhc3RXZWVrOiJbRmF0dGxvXSBkZGRkWyxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyIscGFzdDoiJXMgYWRpbSIsczp5LHNzOnksbTp5LG1tOnksaDp5LGhoOnksZDp5LGRkOnksTTp5LE1N''@;'; put 'put ''OnkseSx5eTp5fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KGVyKS8sb3JkaW5hbDpmdW5jdGlvbihCLHcpe3JldHVybiJEIj09PXc/QisiZXIiOkJ9LHdlZWs6e2RvdzowLGRveTozfSxtZXJpZGllbVBhcnNlOi9yYXRpfHNva2FsbGltfGRvbnBhcmFtfHNhbmplLyxtZXJpZGll''@;'; put 'put ''bUhvdXI6ZnVuY3Rpb24oQix3KXtyZXR1cm4gMTI9PT1CJiYoQj0wKSwicmF0aSI9PT13P0I8ND9COkIrMTI6InNva2FsbGltIj09PXc/QjoiZG9ucGFyYW0iPT09dz9CPjEyP0I6QisxMjoic2FuamUiPT09dz9CKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oQix3LFApe3JldHVybiBC''@;'; put 'put ''PDQ/InJhdGkiOkI8MTI/InNva2FsbGltIjpCPDE2PyJkb25wYXJhbSI6QjwyMD8ic2FuamUiOiJyYXRpIn19KX0oXyg5NzU4NikpfSwyNjgyNzpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIHk9ezE6Ilx1MGFlNyIsMjoiXHUwYWU4IiwzOiJcdTBhZTki''@;'; put 'put ''LDQ6Ilx1MGFlYSIsNToiXHUwYWViIiw2OiJcdTBhZWMiLDc6Ilx1MGFlZCIsODoiXHUwYWVlIiw5OiJcdTBhZWYiLDA6Ilx1MGFlNiJ9LGc9eyJcdTBhZTciOiIxIiwiXHUwYWU4IjoiMiIsIlx1MGFlOSI6IjMiLCJcdTBhZWEiOiI0IiwiXHUwYWViIjoiNSIsIlx1MGFlYyI6IjYiLCJcdTBh''@;'; put 'put ''ZWQiOiI3IiwiXHUwYWVlIjoiOCIsIlx1MGFlZiI6IjkiLCJcdTBhZTYiOiIwIn07SS5kZWZpbmVMb2NhbGUoImd1Iix7bW9udGhzOiJcdTBhOWNcdTBhYmVcdTBhYThcdTBhY2RcdTBhYWZcdTBhYzFcdTBhODZcdTBhYjBcdTBhYzBfXHUwYWFiXHUwYWM3XHUwYWFjXHUwYWNkXHUwYWIwXHUw''@;'; put 'put ''YWMxXHUwYTg2XHUwYWIwXHUwYWMwX1x1MGFhZVx1MGFiZVx1MGFiMFx1MGFjZFx1MGE5YV9cdTBhOGZcdTBhYWFcdTBhY2RcdTBhYjBcdTBhYmZcdTBhYjJfXHUwYWFlXHUwYWM3X1x1MGE5Y1x1MGFjMlx1MGFhOF9cdTBhOWNcdTBhYzFcdTBhYjJcdTBhYmVcdTBhODhfXHUwYTkxXHUwYTk3''@;'; put 'put ''XHUwYWI4XHUwYWNkXHUwYTlmX1x1MGFiOFx1MGFhYVx1MGFjZFx1MGE5Zlx1MGFjN1x1MGFhZVx1MGFjZFx1MGFhY1x1MGFiMF9cdTBhOTFcdTBhOTVcdTBhY2RcdTBhOWZcdTBhY2RcdTBhYWNcdTBhYjBfXHUwYWE4XHUwYWI1XHUwYWM3XHUwYWFlXHUwYWNkXHUwYWFjXHUwYWIwX1x1MGFh''@;'; put 'put ''MVx1MGFiZlx1MGFiOFx1MGFjN1x1MGFhZVx1MGFjZFx1MGFhY1x1MGFiMCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwYTljXHUwYWJlXHUwYWE4XHUwYWNkXHUwYWFmXHUwYWMxLl9cdTBhYWJcdTBhYzdcdTBhYWNcdTBhY2RcdTBhYjBcdTBhYzEuX1x1MGFhZVx1MGFiZVx1MGFiMFx1''@;'; put 'put ''MGFjZFx1MGE5YV9cdTBhOGZcdTBhYWFcdTBhY2RcdTBhYjBcdTBhYmYuX1x1MGFhZVx1MGFjN19cdTBhOWNcdTBhYzJcdTBhYThfXHUwYTljXHUwYWMxXHUwYWIyXHUwYWJlLl9cdTBhOTFcdTBhOTcuX1x1MGFiOFx1MGFhYVx1MGFjZFx1MGE5Zlx1MGFjNy5fXHUwYTkxXHUwYTk1XHUwYWNk''@;'; put 'put ''XHUwYTlmXHUwYWNkLl9cdTBhYThcdTBhYjVcdTBhYzcuX1x1MGFhMVx1MGFiZlx1MGFiOFx1MGFjNy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwYWIwXHUwYWI1XHUwYWJmXHUwYWI1XHUwYWJlXHUwYWIwX1x1MGFiOFx1MGFjYlx1MGFhZVx1MGFiNVx1''@;'; put 'put ''MGFiZVx1MGFiMF9cdTBhYWVcdTBhODJcdTBhOTdcdTBhYjNcdTBhYjVcdTBhYmVcdTBhYjBfXHUwYWFjXHUwYWMxXHUwYWE3XHUwYWNkXHUwYWI1XHUwYWJlXHUwYWIwX1x1MGE5N1x1MGFjMVx1MGFiMFx1MGFjMVx1MGFiNVx1MGFiZVx1MGFiMF9cdTBhYjZcdTBhYzFcdTBhOTVcdTBhY2Rc''@;'; put 'put ''dTBhYjBcdTBhYjVcdTBhYmVcdTBhYjBfXHUwYWI2XHUwYWE4XHUwYWJmXHUwYWI1XHUwYWJlXHUwYWIwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MGFiMFx1MGFiNVx1MGFiZl9cdTBhYjhcdTBhY2JcdTBhYWVfXHUwYWFlXHUwYTgyXHUwYTk3XHUwYWIzX1x1MGFhY1x1MGFjMVx1''@;'; put 'put ''MGFhN1x1MGFjZF9cdTBhOTdcdTBhYzFcdTBhYjBcdTBhYzFfXHUwYWI2XHUwYWMxXHUwYTk1XHUwYWNkXHUwYWIwX1x1MGFiNlx1MGFhOFx1MGFiZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwYWIwX1x1MGFiOFx1MGFjYl9cdTBhYWVcdTBhODJfXHUwYWFjXHUwYWMxX1x1MGE5N1x1''@;'; put 'put ''MGFjMV9cdTBhYjZcdTBhYzFfXHUwYWI2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFx1MGFiNVx1MGFiZVx1MGE5N1x1MGFjZFx1MGFhZlx1MGFjNyIsTFRTOiJBIGg6bW06c3MgXHUwYWI1XHUwYWJlXHUwYTk3XHUwYWNkXHUwYWFmXHUwYWM3IixMOiJERC9NTS9Z''@;'; put 'put ''WVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSBcdTBhYjVcdTBhYmVcdTBhOTdcdTBhY2RcdTBhYWZcdTBhYzciLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gXHUwYWI1XHUwYWJlXHUwYTk3XHUwYWNkXHUwYWFmXHUwYWM3In0sY2FsZW5kYXI6''@;'; put 'put ''e3NhbWVEYXk6IltcdTBhODZcdTBhOWNdIExUIixuZXh0RGF5OiJbXHUwYTk1XHUwYWJlXHUwYWIyXHUwYWM3XSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJbXHUwYTk3XHUwYTg3XHUwYTk1XHUwYWJlXHUwYWIyXHUwYWM3XSBMVCIsbGFzdFdlZWs6IltcdTBhYWFcdTBhYmVc''@;'; put 'put ''dTBhOWJcdTBhYjJcdTBhYmVdIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTBhYWVcdTBhYmUiLHBhc3Q6IiVzIFx1MGFhYVx1MGFiOVx1MGFjN1x1MGFiMlx1MGFiZSIsczoiXHUwYTg1XHUwYWFlXHUwYWMxXHUwYTk1IFx1MGFhYVx1MGFiM1x1''@;'; put 'put ''MGFjYiIsc3M6IiVkIFx1MGFiOFx1MGFjN1x1MGE5NVx1MGE4Mlx1MGFhMSIsbToiXHUwYThmXHUwYTk1IFx1MGFhZVx1MGFiZlx1MGFhOFx1MGFiZlx1MGE5ZiIsbW06IiVkIFx1MGFhZVx1MGFiZlx1MGFhOFx1MGFiZlx1MGE5ZiIsaDoiXHUwYThmXHUwYTk1IFx1MGE5NVx1MGFiMlx1MGFi''@;'; put 'put ''ZVx1MGE5NSIsaGg6IiVkIFx1MGE5NVx1MGFiMlx1MGFiZVx1MGE5NSIsZDoiXHUwYThmXHUwYTk1IFx1MGFhNlx1MGFiZlx1MGFiNVx1MGFiOCIsZGQ6IiVkIFx1MGFhNlx1MGFiZlx1MGFiNVx1MGFiOCIsTToiXHUwYThmXHUwYTk1IFx1MGFhZVx1MGFiOVx1MGFiZlx1MGFhOFx1MGFjYiIs''@;'; put 'put ''TU06IiVkIFx1MGFhZVx1MGFiOVx1MGFiZlx1MGFhOFx1MGFjYiIseToiXHUwYThmXHUwYTk1IFx1MGFiNVx1MGFiMFx1MGFjZFx1MGFiNyIseXk6IiVkIFx1MGFiNVx1MGFiMFx1MGFjZFx1MGFiNyJ9LHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1tcdTBhZTdcdTBh''@;'; put 'put ''ZThcdTBhZTlcdTBhZWFcdTBhZWJcdTBhZWNcdTBhZWRcdTBhZWVcdTBhZWZcdTBhZTZdL2csZnVuY3Rpb24oUCl7cmV0dXJuIGdbUF19KX0scG9zdGZvcm1hdDpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKFApe3JldHVybiB5W1BdfSl9LG1lcmlkaWVtUGFy''@;'; put 'put ''c2U6L1x1MGFiMFx1MGFiZVx1MGFhNHxcdTBhYWNcdTBhYWFcdTBhY2JcdTBhYjB8XHUwYWI4XHUwYWI1XHUwYWJlXHUwYWIwfFx1MGFiOFx1MGFiZVx1MGE4Mlx1MGE5Yy8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKHcsUCl7cmV0dXJuIDEyPT09dyYmKHc9MCksIlx1MGFiMFx1MGFiZVx1MGFh''@;'; put 'put ''NCI9PT1QP3c8ND93OncrMTI6Ilx1MGFiOFx1MGFiNVx1MGFiZVx1MGFiMCI9PT1QP3c6Ilx1MGFhY1x1MGFhYVx1MGFjYlx1MGFiMCI9PT1QP3c+PTEwP3c6dysxMjoiXHUwYWI4XHUwYWJlXHUwYTgyXHUwYTljIj09PVA/dysxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxGKXty''@;'; put 'put ''ZXR1cm4gdzw0PyJcdTBhYjBcdTBhYmVcdTBhYTQiOnc8MTA/Ilx1MGFiOFx1MGFiNVx1MGFiZVx1MGFiMCI6dzwxNz8iXHUwYWFjXHUwYWFhXHUwYWNiXHUwYWIwIjp3PDIwPyJcdTBhYjhcdTBhYmVcdTBhODJcdTBhOWMiOiJcdTBhYjBcdTBhYmVcdTBhYTQifSx3ZWVrOntkb3c6MCxkb3k6''@;'; put 'put ''Nn19KX0oXyg5NzU4NikpfSwyMTkzNjpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImhlIix7bW9udGhzOiJcdTA1ZDlcdTA1ZTBcdTA1ZDVcdTA1ZDBcdTA1ZThfXHUwNWU0XHUwNWQxXHUwNWU4XHUwNWQ1XHUwNWQwXHUwNWU4X1x1''@;'; put 'put ''MDVkZVx1MDVlOFx1MDVlNV9cdTA1ZDBcdTA1ZTRcdTA1ZThcdTA1ZDlcdTA1ZGNfXHUwNWRlXHUwNWQwXHUwNWQ5X1x1MDVkOVx1MDVkNVx1MDVlMFx1MDVkOV9cdTA1ZDlcdTA1ZDVcdTA1ZGNcdTA1ZDlfXHUwNWQwXHUwNWQ1XHUwNWQyXHUwNWQ1XHUwNWUxXHUwNWQ4X1x1MDVlMVx1MDVl''@;'; put 'put ''NFx1MDVkOFx1MDVkZVx1MDVkMVx1MDVlOF9cdTA1ZDBcdTA1ZDVcdTA1ZTdcdTA1ZDhcdTA1ZDVcdTA1ZDFcdTA1ZThfXHUwNWUwXHUwNWQ1XHUwNWQxXHUwNWRlXHUwNWQxXHUwNWU4X1x1MDVkM1x1MDVlNlx1MDVkZVx1MDVkMVx1MDVlOCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUw''@;'; put 'put ''NWQ5XHUwNWUwXHUwNWQ1XHUwNWYzX1x1MDVlNFx1MDVkMVx1MDVlOFx1MDVmM19cdTA1ZGVcdTA1ZThcdTA1ZTVfXHUwNWQwXHUwNWU0XHUwNWU4XHUwNWYzX1x1MDVkZVx1MDVkMFx1MDVkOV9cdTA1ZDlcdTA1ZDVcdTA1ZTBcdTA1ZDlfXHUwNWQ5XHUwNWQ1XHUwNWRjXHUwNWQ5X1x1MDVk''@;'; put 'put ''MFx1MDVkNVx1MDVkMlx1MDVmM19cdTA1ZTFcdTA1ZTRcdTA1ZDhcdTA1ZjNfXHUwNWQwXHUwNWQ1XHUwNWU3XHUwNWYzX1x1MDVlMFx1MDVkNVx1MDVkMVx1MDVmM19cdTA1ZDNcdTA1ZTZcdTA1ZGVcdTA1ZjMiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDVlOFx1MDVkMFx1MDVlOVx1MDVk''@;'; put 'put ''NVx1MDVkZl9cdTA1ZTlcdTA1ZTBcdTA1ZDlfXHUwNWU5XHUwNWRjXHUwNWQ5XHUwNWU5XHUwNWQ5X1x1MDVlOFx1MDVkMVx1MDVkOVx1MDVlMlx1MDVkOV9cdTA1ZDdcdTA1ZGVcdTA1ZDlcdTA1ZTlcdTA1ZDlfXHUwNWU5XHUwNWQ5XHUwNWU5XHUwNWQ5X1x1MDVlOVx1MDVkMVx1MDVlYSIu''@;'; put 'put ''c3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA1ZDBcdTA1ZjNfXHUwNWQxXHUwNWYzX1x1MDVkMlx1MDVmM19cdTA1ZDNcdTA1ZjNfXHUwNWQ0XHUwNWYzX1x1MDVkNVx1MDVmM19cdTA1ZTlcdTA1ZjMiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDVkMF9cdTA1ZDFfXHUwNWQyX1x1''@;'; put 'put ''MDVkM19cdTA1ZDRfXHUwNWQ1X1x1MDVlOSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBbXHUwNWQxXU1NTU0gWVlZWSIsTExMOiJEIFtcdTA1ZDFdTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBE''@;'; put 'put ''IFtcdTA1ZDFdTU1NTSBZWVlZIEhIOm1tIixsOiJEL00vWVlZWSIsbGw6IkQgTU1NIFlZWVkiLGxsbDoiRCBNTU0gWVlZWSBISDptbSIsbGxsbDoiZGRkLCBEIE1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA1ZDRcdTA1ZDlcdTA1ZDVcdTA1ZGQgXHUwNWQxXHUwNWJl''@;'; put 'put ''XUxUIixuZXh0RGF5OiJbXHUwNWRlXHUwNWQ3XHUwNWU4IFx1MDVkMVx1MDViZV1MVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDVkMVx1MDVlOVx1MDVlMlx1MDVkNF0gTFQiLGxhc3REYXk6IltcdTA1ZDBcdTA1ZWFcdTA1ZGVcdTA1ZDVcdTA1ZGMgXHUwNWQxXHUwNWJlXUxUIixsYXN0V2Vlazoi''@;'; put 'put ''W1x1MDVkMVx1MDVkOVx1MDVkNVx1MDVkZF0gZGRkZCBbXHUwNWQ0XHUwNWQwXHUwNWQ3XHUwNWU4XHUwNWQ1XHUwNWRmIFx1MDVkMVx1MDVlOVx1MDVlMlx1MDVkNF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDVkMVx1MDVlMlx1MDVkNVx1MDVkMyAlcyIs''@;'; put 'put ''cGFzdDoiXHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ5ICVzIixzOiJcdTA1ZGVcdTA1ZTFcdTA1ZTRcdTA1ZTggXHUwNWU5XHUwNWUwXHUwNWQ5XHUwNWQ1XHUwNWVhIixzczoiJWQgXHUwNWU5XHUwNWUwXHUwNWQ5XHUwNWQ1XHUwNWVhIixtOiJcdTA1ZDNcdTA1ZTdcdTA1ZDQiLG1tOiIlZCBc''@;'; put 'put ''dTA1ZDNcdTA1ZTdcdTA1ZDVcdTA1ZWEiLGg6Ilx1MDVlOVx1MDVlMlx1MDVkNCIsaGg6ZnVuY3Rpb24oZyl7cmV0dXJuIDI9PT1nPyJcdTA1ZTlcdTA1ZTJcdTA1ZWFcdTA1ZDlcdTA1ZDlcdTA1ZGQiOmcrIiBcdTA1ZTlcdTA1ZTJcdTA1ZDVcdTA1ZWEifSxkOiJcdTA1ZDlcdTA1ZDVcdTA1''@;'; put 'put ''ZGQiLGRkOmZ1bmN0aW9uKGcpe3JldHVybiAyPT09Zz8iXHUwNWQ5XHUwNWQ1XHUwNWRlXHUwNWQ5XHUwNWQ5XHUwNWRkIjpnKyIgXHUwNWQ5XHUwNWRlXHUwNWQ5XHUwNWRkIn0sTToiXHUwNWQ3XHUwNWQ1XHUwNWQzXHUwNWU5IixNTTpmdW5jdGlvbihnKXtyZXR1cm4gMj09PWc/Ilx1MDVk''@;'; put 'put ''N1x1MDVkNVx1MDVkM1x1MDVlOVx1MDVkOVx1MDVkOVx1MDVkZCI6ZysiIFx1MDVkN1x1MDVkNVx1MDVkM1x1MDVlOVx1MDVkOVx1MDVkZCJ9LHk6Ilx1MDVlOVx1MDVlMFx1MDVkNCIseXk6ZnVuY3Rpb24oZyl7cmV0dXJuIDI9PT1nPyJcdTA1ZTlcdTA1ZTBcdTA1ZWFcdTA1ZDlcdTA1ZDlc''@;'; put 'put ''dTA1ZGQiOmclMTA9PTAmJjEwIT09Zz9nKyIgXHUwNWU5XHUwNWUwXHUwNWQ0IjpnKyIgXHUwNWU5XHUwNWUwXHUwNWQ5XHUwNWRkIn19LG1lcmlkaWVtUGFyc2U6L1x1MDVkMFx1MDVkN1x1MDVkNCJcdTA1ZTZ8XHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ0Ilx1MDVlNnxcdTA1ZDBcdTA1ZDdc''@;'; put 'put ''dTA1ZThcdTA1ZDkgXHUwNWQ0XHUwNWU2XHUwNWQ0XHUwNWU4XHUwNWQ5XHUwNWQ5XHUwNWRkfFx1MDVkY1x1MDVlNFx1MDVlMFx1MDVkOSBcdTA1ZDRcdTA1ZTZcdTA1ZDRcdTA1ZThcdTA1ZDlcdTA1ZDlcdTA1ZGR8XHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ1XHUwNWVhIFx1MDVkMVx1MDVk''@;'; put 'put ''NVx1MDVlN1x1MDVlOHxcdTA1ZDFcdTA1ZDFcdTA1ZDVcdTA1ZTdcdTA1ZTh8XHUwNWQxXHUwNWUyXHUwNWU4XHUwNWQxL2ksaXNQTTpmdW5jdGlvbihnKXtyZXR1cm4vXihcdTA1ZDBcdTA1ZDdcdTA1ZDQiXHUwNWU2fFx1MDVkMFx1MDVkN1x1MDVlOFx1MDVkOSBcdTA1ZDRcdTA1ZTZcdTA1''@;'; put 'put ''ZDRcdTA1ZThcdTA1ZDlcdTA1ZDlcdTA1ZGR8XHUwNWQxXHUwNWUyXHUwNWU4XHUwNWQxKSQvLnRlc3QoZyl9LG1lcmlkaWVtOmZ1bmN0aW9uKGcsQix3KXtyZXR1cm4gZzw1PyJcdTA1ZGNcdTA1ZTRcdTA1ZTBcdTA1ZDVcdTA1ZWEgXHUwNWQxXHUwNWQ1XHUwNWU3XHUwNWU4IjpnPDEwPyJc''@;'; put 'put ''dTA1ZDFcdTA1ZDFcdTA1ZDVcdTA1ZTdcdTA1ZTgiOmc8MTI/dz8nXHUwNWRjXHUwNWU0XHUwNWUwXHUwNWQ0Ilx1MDVlNic6Ilx1MDVkY1x1MDVlNFx1MDVlMFx1MDVkOSBcdTA1ZDRcdTA1ZTZcdTA1ZDRcdTA1ZThcdTA1ZDlcdTA1ZDlcdTA1ZGQiOmc8MTg/dz8nXHUwNWQwXHUwNWQ3XHUw''@;'; put 'put ''NWQ0Ilx1MDVlNic6Ilx1MDVkMFx1MDVkN1x1MDVlOFx1MDVkOSBcdTA1ZDRcdTA1ZTZcdTA1ZDRcdTA1ZThcdTA1ZDlcdTA1ZDlcdTA1ZGQiOiJcdTA1ZDFcdTA1ZTJcdTA1ZThcdTA1ZDEifX0pfShfKDk3NTg2KSl9LDMxMzMyOmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ug''@;'; put 'put ''c3RyaWN0Ijt2YXIgeT17MToiXHUwOTY3IiwyOiJcdTA5NjgiLDM6Ilx1MDk2OSIsNDoiXHUwOTZhIiw1OiJcdTA5NmIiLDY6Ilx1MDk2YyIsNzoiXHUwOTZkIiw4OiJcdTA5NmUiLDk6Ilx1MDk2ZiIsMDoiXHUwOTY2In0sZz17Ilx1MDk2NyI6IjEiLCJcdTA5NjgiOiIyIiwiXHUwOTY5Ijoi''@;'; put 'put ''MyIsIlx1MDk2YSI6IjQiLCJcdTA5NmIiOiI1IiwiXHUwOTZjIjoiNiIsIlx1MDk2ZCI6IjciLCJcdTA5NmUiOiI4IiwiXHUwOTZmIjoiOSIsIlx1MDk2NiI6IjAifSxCPVsvXlx1MDkxY1x1MDkyOC9pLC9eXHUwOTJiXHUwOTNjXHUwOTMwfFx1MDkyYlx1MDkzMC9pLC9eXHUwOTJlXHUwOTNl''@;'; put 'put ''XHUwOTMwXHUwOTRkXHUwOTFhL2ksL15cdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDgvaSwvXlx1MDkyZVx1MDkwOC9pLC9eXHUwOTFjXHUwOTQyXHUwOTI4L2ksL15cdTA5MWNcdTA5NDFcdTA5MzIvaSwvXlx1MDkwNVx1MDkxNy9pLC9eXHUwOTM4XHUwOTNmXHUwOTI0XHUwOTAyfFx1''@;'; put 'put ''MDkzOFx1MDkzZlx1MDkyNC9pLC9eXHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyL2ksL15cdTA5MjhcdTA5MzV8XHUwOTI4XHUwOTM1XHUwOTAyL2ksL15cdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MDJ8XHUwOTI2XHUwOTNmXHUwOTM4L2ldO0kuZGVmaW5lTG9jYWxlKCJoaSIse21vbnRo''@;'; put 'put ''czp7Zm9ybWF0OiJcdTA5MWNcdTA5MjhcdTA5MzVcdTA5MzBcdTA5NDBfXHUwOTJiXHUwOTNjXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYV9cdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDhcdTA5MzJfXHUwOTJlXHUwOTA4X1x1MDkx''@;'; put 'put ''Y1x1MDk0Mlx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzJcdTA5M2VcdTA5MDhfXHUwOTA1XHUwOTE3XHUwOTM4XHUwOTRkXHUwOTI0X1x1MDkzOFx1MDkzZlx1MDkyNFx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMF9cdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcdTA5MmNcdTA5MzBfXHUw''@;'; put 'put ''OTI4XHUwOTM1XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwX1x1MDkyNlx1MDkzZlx1MDkzOFx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMCIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJcdTA5MWNcdTA5MjhcdTA5MzVcdTA5MzBcdTA5NDBfXHUwOTJiXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwX1x1''@;'; put 'put ''MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYV9cdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDhcdTA5MzJfXHUwOTJlXHUwOTA4X1x1MDkxY1x1MDk0Mlx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzJcdTA5M2VcdTA5MDhfXHUwOTA1XHUwOTE3XHUwOTM4XHUwOTRkXHUwOTI0X1x1MDkz''@;'; put 'put ''OFx1MDkzZlx1MDkyNFx1MDkwMlx1MDkyY1x1MDkzMF9cdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcdTA5MmNcdTA5MzBfXHUwOTI4XHUwOTM1XHUwOTAyXHUwOTJjXHUwOTMwX1x1MDkyNlx1MDkzZlx1MDkzOFx1MDkwMlx1MDkyY1x1MDkzMCIuc3BsaXQoIl8iKX0sbW9udGhzU2hv''@;'; put 'put ''cnQ6Ilx1MDkxY1x1MDkyOC5fXHUwOTJiXHUwOTNjXHUwOTMwLl9cdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWFfXHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4Ll9cdTA5MmVcdTA5MDhfXHUwOTFjXHUwOTQyXHUwOTI4X1x1MDkxY1x1MDk0MVx1MDkzMi5fXHUwOTA1XHUwOTE3''@;'; put 'put ''Ll9cdTA5MzhcdTA5M2ZcdTA5MjQuX1x1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mi5fXHUwOTI4XHUwOTM1Ll9cdTA5MjZcdTA5M2ZcdTA5MzguIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA5MzBcdTA5MzVcdTA5M2ZcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTM4XHUwOTRiXHUwOTJl''@;'; put 'put ''XHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkyZVx1MDkwMlx1MDkxN1x1MDkzMlx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MmNcdTA5NDFcdTA5MjdcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTE3XHUwOTQxXHUwOTMwXHUwOTQyXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkzNlx1MDk0MVx1MDkxNVx1MDk0''@;'; put 'put ''ZFx1MDkzMFx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MzZcdTA5MjhcdTA5M2ZcdTA5MzVcdTA5M2VcdTA5MzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwOTMwXHUwOTM1XHUwOTNmX1x1MDkzOFx1MDk0Ylx1MDkyZV9cdTA5MmVcdTA5MDJcdTA5MTdcdTA5MzJfXHUwOTJjXHUwOTQx''@;'; put 'put ''XHUwOTI3X1x1MDkxN1x1MDk0MVx1MDkzMFx1MDk0Ml9cdTA5MzZcdTA5NDFcdTA5MTVcdTA5NGRcdTA5MzBfXHUwOTM2XHUwOTI4XHUwOTNmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA5MzBfXHUwOTM4XHUwOTRiX1x1MDkyZVx1MDkwMl9cdTA5MmNcdTA5NDFfXHUwOTE3XHUwOTQx''@;'; put 'put ''X1x1MDkzNlx1MDk0MV9cdTA5MzYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gXHUwOTJjXHUwOTFjXHUwOTQ3IixMVFM6IkEgaDptbTpzcyBcdTA5MmNcdTA5MWNcdTA5NDciLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwg''@;'; put 'put ''QSBoOm1tIFx1MDkyY1x1MDkxY1x1MDk0NyIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSBcdTA5MmNcdTA5MWNcdTA5NDcifSxtb250aHNQYXJzZTpCLGxvbmdNb250aHNQYXJzZTpCLHNob3J0TW9udGhzUGFyc2U6Wy9eXHUwOTFjXHUwOTI4L2ksL15cdTA5MmJcdTA5M2NcdTA5''@;'; put 'put ''MzAvaSwvXlx1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYS9pLC9eXHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4L2ksL15cdTA5MmVcdTA5MDgvaSwvXlx1MDkxY1x1MDk0Mlx1MDkyOC9pLC9eXHUwOTFjXHUwOTQxXHUwOTMyL2ksL15cdTA5MDVcdTA5MTcvaSwvXlx1MDkzOFx1''@;'; put 'put ''MDkzZlx1MDkyNC9pLC9eXHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyL2ksL15cdTA5MjhcdTA5MzUvaSwvXlx1MDkyNlx1MDkzZlx1MDkzOC9pXSxtb250aHNSZWdleDovXihcdTA5MWNcdTA5MjhcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTFjXHUwOTI4XC4/fFx1MDkyYlx1MDkzY1x1''@;'; put 'put ''MDkzMFx1MDkzNVx1MDkzMFx1MDk0MHxcdTA5MmJcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTJiXHUwOTNjXHUwOTMwXC4/fFx1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYT98XHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XHUwOTMyfFx1MDkwNVx1MDkyYVx1MDk0ZFx1''@;'; put 'put ''MDkzMFx1MDk0OFwuP3xcdTA5MmVcdTA5MDg/fFx1MDkxY1x1MDk0Mlx1MDkyOD98XHUwOTFjXHUwOTQxXHUwOTMyXHUwOTNlXHUwOTA4fFx1MDkxY1x1MDk0MVx1MDkzMlwuP3xcdTA5MDVcdTA5MTdcdTA5MzhcdTA5NGRcdTA5MjR8XHUwOTA1XHUwOTE3XC4/fFx1MDkzOFx1MDkzZlx1MDky''@;'; put 'put ''NFx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MDJcdTA5MmNcdTA5MzB8XHUwOTM4XHUwOTNmXHUwOTI0XC4/fFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mlx1MDkyY1x1MDkzMHxcdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcLj98XHUw''@;'; put 'put ''OTI4XHUwOTM1XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkyOFx1MDkzNVx1MDkwMlx1MDkyY1x1MDkzMHxcdTA5MjhcdTA5MzVcLj98XHUwOTI2XHUwOTNmXHUwOTM4XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkwMlx1MDkyY1x1MDkzMHxcdTA5''@;'; put 'put ''MjZcdTA5M2ZcdTA5MzhcLj8pL2ksbW9udGhzU2hvcnRSZWdleDovXihcdTA5MWNcdTA5MjhcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTFjXHUwOTI4XC4/fFx1MDkyYlx1MDkzY1x1MDkzMFx1MDkzNVx1MDkzMFx1MDk0MHxcdTA5MmJcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTJiXHUw''@;'; put 'put ''OTNjXHUwOTMwXC4/fFx1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYT98XHUwOTA1XHUwOTJhXHUwOTRkXHUwOTMwXHUwOTQ4XHUwOTMyfFx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFwuP3xcdTA5MmVcdTA5MDg/fFx1MDkxY1x1MDk0Mlx1MDkyOD98XHUwOTFjXHUwOTQxXHUw''@;'; put 'put ''OTMyXHUwOTNlXHUwOTA4fFx1MDkxY1x1MDk0MVx1MDkzMlwuP3xcdTA5MDVcdTA5MTdcdTA5MzhcdTA5NGRcdTA5MjR8XHUwOTA1XHUwOTE3XC4/fFx1MDkzOFx1MDkzZlx1MDkyNFx1MDkyZVx1MDk0ZFx1MDkyY1x1MDkzMHxcdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MDJcdTA5MmNcdTA5MzB8''@;'; put 'put ''XHUwOTM4XHUwOTNmXHUwOTI0XC4/fFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Mlx1MDkyY1x1MDkzMHxcdTA5MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NDJcLj98XHUwOTI4XHUwOTM1XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkyOFx1MDkzNVx1MDkwMlx1MDkyY1x1MDkz''@;'; put 'put ''MHxcdTA5MjhcdTA5MzVcLj98XHUwOTI2XHUwOTNmXHUwOTM4XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwfFx1MDkyNlx1MDkzZlx1MDkzOFx1MDkwMlx1MDkyY1x1MDkzMHxcdTA5MjZcdTA5M2ZcdTA5MzhcLj8pL2ksbW9udGhzU3RyaWN0UmVnZXg6L14oXHUwOTFjXHUwOTI4XHUwOTM1XHUw''@;'; put 'put ''OTMwXHUwOTQwP3xcdTA5MmJcdTA5M2NcdTA5MzBcdTA5MzVcdTA5MzBcdTA5NDB8XHUwOTJiXHUwOTMwXHUwOTM1XHUwOTMwXHUwOTQwP3xcdTA5MmVcdTA5M2VcdTA5MzBcdTA5NGRcdTA5MWE/fFx1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDk0OFx1MDkzMj98XHUwOTJlXHUwOTA4P3xc''@;'; put 'put ''dTA5MWNcdTA5NDJcdTA5Mjg/fFx1MDkxY1x1MDk0MVx1MDkzMlx1MDkzZVx1MDkwOD98XHUwOTA1XHUwOTE3XHUwOTM4XHUwOTRkXHUwOTI0P3xcdTA5MzhcdTA5M2ZcdTA5MjRcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTM4XHUwOTNmXHUwOTI0XHUwOTAyXHUwOTJjXHUwOTMwfFx1''@;'; put 'put ''MDkzOFx1MDkzZlx1MDkyND9cLj98XHUwOTA1XHUwOTE1XHUwOTRkXHUwOTFmXHUwOTQyXHUwOTJjXHUwOTMwfFx1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0MlwuP3xcdTA5MjhcdTA5MzVcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTI4XHUwOTM1XHUwOTAyXHUwOTJjXHUwOTMw''@;'; put 'put ''P3xcdTA5MjZcdTA5M2ZcdTA5MzhcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzB8XHUwOTI2XHUwOTNmXHUwOTM4XHUwOTAyXHUwOTJjXHUwOTMwPykvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKFx1MDkxY1x1MDkyOFwuP3xcdTA5MmJcdTA5M2NcdTA5MzBcLj98XHUwOTJlXHUwOTNlXHUw''@;'; put 'put ''OTMwXHUwOTRkXHUwOTFhP3xcdTA5MDVcdTA5MmFcdTA5NGRcdTA5MzBcdTA5NDhcLj98XHUwOTJlXHUwOTA4P3xcdTA5MWNcdTA5NDJcdTA5Mjg/fFx1MDkxY1x1MDk0MVx1MDkzMlwuP3xcdTA5MDVcdTA5MTdcLj98XHUwOTM4XHUwOTNmXHUwOTI0XC4/fFx1MDkwNVx1MDkxNVx1MDk0ZFx1''@;'; put 'put ''MDkxZlx1MDk0MlwuP3xcdTA5MjhcdTA5MzVcLj98XHUwOTI2XHUwOTNmXHUwOTM4XC4/KS9pLGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwOTA2XHUwOTFjXSBMVCIsbmV4dERheToiW1x1MDkxNVx1MDkzMl0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MDkxNVx1MDkzMl0g''@;'; put 'put ''TFQiLGxhc3RXZWVrOiJbXHUwOTJhXHUwOTNmXHUwOTFiXHUwOTMyXHUwOTQ3XSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwOTJlXHUwOTQ3XHUwOTAyIixwYXN0OiIlcyBcdTA5MmFcdTA5MzlcdTA5MzJcdTA5NDciLHM6Ilx1MDkxNVx1MDk0''@;'; put 'put ''MVx1MDkxYiBcdTA5MzlcdTA5NDAgXHUwOTE1XHUwOTRkXHUwOTM3XHUwOTIzIixzczoiJWQgXHUwOTM4XHUwOTQ3XHUwOTE1XHUwOTAyXHUwOTIxIixtOiJcdTA5MGZcdTA5MTUgXHUwOTJlXHUwOTNmXHUwOTI4XHUwOTFmIixtbToiJWQgXHUwOTJlXHUwOTNmXHUwOTI4XHUwOTFmIixoOiJc''@;'; put 'put ''dTA5MGZcdTA5MTUgXHUwOTE4XHUwOTAyXHUwOTFmXHUwOTNlIixoaDoiJWQgXHUwOTE4XHUwOTAyXHUwOTFmXHUwOTQ3IixkOiJcdTA5MGZcdTA5MTUgXHUwOTI2XHUwOTNmXHUwOTI4IixkZDoiJWQgXHUwOTI2XHUwOTNmXHUwOTI4IixNOiJcdTA5MGZcdTA5MTUgXHUwOTJlXHUwOTM5XHUw''@;'; put 'put ''OTQwXHUwOTI4XHUwOTQ3IixNTToiJWQgXHUwOTJlXHUwOTM5XHUwOTQwXHUwOTI4XHUwOTQ3Iix5OiJcdTA5MGZcdTA5MTUgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM3Iix5eToiJWQgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM3In0scHJlcGFyc2U6ZnVuY3Rpb24oRil7cmV0dXJuIEYucmVw''@;'; put 'put ''bGFjZSgvW1x1MDk2N1x1MDk2OFx1MDk2OVx1MDk2YVx1MDk2Ylx1MDk2Y1x1MDk2ZFx1MDk2ZVx1MDk2Zlx1MDk2Nl0vZyxmdW5jdGlvbihPKXtyZXR1cm4gZ1tPXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKEYpe3JldHVybiBGLnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oTyl7cmV0dXJuIHlb''@;'; put 'put ''T119KX0sbWVyaWRpZW1QYXJzZTovXHUwOTMwXHUwOTNlXHUwOTI0fFx1MDkzOFx1MDk0MVx1MDkyY1x1MDkzOXxcdTA5MjZcdTA5NGJcdTA5MmFcdTA5MzlcdTA5MzB8XHUwOTM2XHUwOTNlXHUwOTJlLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oRixPKXtyZXR1cm4gMTI9PT1GJiYoRj0wKSwi''@;'; put 'put ''XHUwOTMwXHUwOTNlXHUwOTI0Ij09PU8/Rjw0P0Y6RisxMjoiXHUwOTM4XHUwOTQxXHUwOTJjXHUwOTM5Ij09PU8/RjoiXHUwOTI2XHUwOTRiXHUwOTJhXHUwOTM5XHUwOTMwIj09PU8/Rj49MTA/RjpGKzEyOiJcdTA5MzZcdTA5M2VcdTA5MmUiPT09Tz9GKzEyOnZvaWQgMH0sbWVyaWRpZW06''@;'; put 'put ''ZnVuY3Rpb24oRixPLHope3JldHVybiBGPDQ/Ilx1MDkzMFx1MDkzZVx1MDkyNCI6RjwxMD8iXHUwOTM4XHUwOTQxXHUwOTJjXHUwOTM5IjpGPDE3PyJcdTA5MjZcdTA5NGJcdTA5MmFcdTA5MzlcdTA5MzAiOkY8MjA/Ilx1MDkzNlx1MDkzZVx1MDkyZSI6Ilx1MDkzMFx1MDkzZVx1MDkyNCJ9''@;'; put 'put ''LHdlZWs6e2RvdzowLGRveTo2fX0pfShfKDk3NTg2KSl9LDkxOTU3OmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB5KEIsdyxQKXt2YXIgRj1CKyIgIjtzd2l0Y2goUCl7Y2FzZSJzcyI6cmV0dXJuIEYrKDE9PT1CPyJzZWt1bmRhIjoyPT09Qnx8''@;'; put 'put ''Mz09PUJ8fDQ9PT1CPyJzZWt1bmRlIjoic2VrdW5kaSIpO2Nhc2UibSI6cmV0dXJuIHc/ImplZG5hIG1pbnV0YSI6ImplZG5lIG1pbnV0ZSI7Y2FzZSJtbSI6cmV0dXJuIEYrKDE9PT1CPyJtaW51dGEiOjI9PT1CfHwzPT09Qnx8ND09PUI/Im1pbnV0ZSI6Im1pbnV0YSIpO2Nhc2UiaCI6cmV0''@;'; put 'put ''dXJuIHc/ImplZGFuIHNhdCI6ImplZG5vZyBzYXRhIjtjYXNlImhoIjpyZXR1cm4gRisoMT09PUI/InNhdCI6Mj09PUJ8fDM9PT1CfHw0PT09Qj8ic2F0YSI6InNhdGkiKTtjYXNlImRkIjpyZXR1cm4gRisoMT09PUI/ImRhbiI6ImRhbmEiKTtjYXNlIk1NIjpyZXR1cm4gRisoMT09PUI/Im1q''@;'; put 'put ''ZXNlYyI6Mj09PUJ8fDM9PT1CfHw0PT09Qj8ibWplc2VjYSI6Im1qZXNlY2kiKTtjYXNlInl5IjpyZXR1cm4gRisoMT09PUI/ImdvZGluYSI6Mj09PUJ8fDM9PT1CfHw0PT09Qj8iZ29kaW5lIjoiZ29kaW5hIil9fUkuZGVmaW5lTG9jYWxlKCJociIse21vbnRoczp7Zm9ybWF0OiJzaWplXHUw''@;'; put 'put ''MTBkbmphX3ZlbGphXHUwMTBkZV9vXHUwMTdldWprYV90cmF2bmphX3N2aWJuamFfbGlwbmphX3NycG5qYV9rb2xvdm96YV9ydWpuYV9saXN0b3BhZGFfc3R1ZGVub2dhX3Byb3NpbmNhIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6InNpamVcdTAxMGRhbmpfdmVsamFcdTAxMGRhX29cdTAxN2V1''@;'; put 'put ''amFrX3RyYXZhbmpfc3ZpYmFual9saXBhbmpfc3JwYW5qX2tvbG92b3pfcnVqYW5fbGlzdG9wYWRfc3R1ZGVuaV9wcm9zaW5hYyIuc3BsaXQoIl8iKX0sbW9udGhzU2hvcnQ6InNpai5fdmVsai5fb1x1MDE3ZXUuX3RyYS5fc3ZpLl9saXAuX3NycC5fa29sLl9ydWouX2xpcy5fc3R1Ll9wcm8u''@;'; put 'put ''Ii5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Im5lZGplbGphX3BvbmVkamVsamFrX3V0b3Jha19zcmlqZWRhX1x1MDEwZGV0dnJ0YWtfcGV0YWtfc3Vib3RhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Im5lZC5fcG9uLl91dG8uX3NyaS5fXHUwMTBkZXQuX3Bl''@;'; put 'put ''dC5fc3ViLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoibmVfcG9fdXRfc3JfXHUwMTBkZV9wZV9zdSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEbyBNTU1NIFlZWVki''@;'; put 'put ''LExMTDoiRG8gTU1NTSBZWVlZIEg6bW0iLExMTEw6ImRkZGQsIERvIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltkYW5hcyB1XSBMVCIsbmV4dERheToiW3N1dHJhIHVdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJu''@;'; put 'put ''Ilt1XSBbbmVkamVsanVdIFt1XSBMVCI7Y2FzZSAzOnJldHVybiJbdV0gW3NyaWplZHVdIFt1XSBMVCI7Y2FzZSA2OnJldHVybiJbdV0gW3N1Ym90dV0gW3VdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIlt1XSBkZGRkIFt1XSBMVCJ9fSxsYXN0RGF5OiJbanVcdTAx''@;'; put 'put ''MGRlciB1XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbcHJvXHUwMTYxbHVdIFtuZWRqZWxqdV0gW3VdIExUIjtjYXNlIDM6cmV0dXJuIltwcm9cdTAxNjFsdV0gW3NyaWplZHVdIFt1XSBMVCI7Y2FzZSA2OnJldHVybiJbcHJvXHUw''@;'; put 'put ''MTYxbGVdIFtzdWJvdGVdIFt1XSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbcHJvXHUwMTYxbGldIGRkZGQgW3VdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InphICVzIixwYXN0OiJwcmlqZSAlcyIsczoicGFyIHNla3VuZGkiLHNz''@;'; put 'put ''OnksbTp5LG1tOnksaDp5LGhoOnksZDoiZGFuIixkZDp5LE06Im1qZXNlYyIsTU06eSx5OiJnb2RpbnUiLHl5Onl9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6N319KX0oXyg5NzU4NikpfSw0ODkyODpmdW5jdGlvbih1''@;'; put 'put ''ZSxxLF8peyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIHk9InZhc1x4ZTFybmFwIGhceGU5dGZcdTAxNTFuIGtlZGRlbiBzemVyZFx4ZTFuIGNzXHhmY3RceGY2cnRceGY2a1x4ZjZuIHBceGU5bnRla2VuIHN6b21iYXRvbiIuc3BsaXQoIiAiKTtmdW5jdGlvbiBnKFAsRixPLHope3Zh''@;'; put 'put ''ciBOPVA7c3dpdGNoKE8pe2Nhc2UicyI6cmV0dXJuIHp8fEY/Im5ceGU5aFx4ZTFueSBtXHhlMXNvZHBlcmMiOiJuXHhlOWhceGUxbnkgbVx4ZTFzb2RwZXJjZSI7Y2FzZSJzcyI6cmV0dXJuIE4rKHp8fEYpPyIgbVx4ZTFzb2RwZXJjIjoiIG1ceGUxc29kcGVyY2UiO2Nhc2UibSI6cmV0dXJu''@;'; put 'put ''ImVneSIrKHp8fEY/IiBwZXJjIjoiIHBlcmNlIik7Y2FzZSJtbSI6cmV0dXJuIE4rKHp8fEY/IiBwZXJjIjoiIHBlcmNlIik7Y2FzZSJoIjpyZXR1cm4iZWd5Iisoenx8Rj8iIFx4ZjNyYSI6IiBceGYzclx4ZTFqYSIpO2Nhc2UiaGgiOnJldHVybiBOKyh6fHxGPyIgXHhmM3JhIjoiIFx4ZjNy''@;'; put 'put ''XHhlMWphIik7Y2FzZSJkIjpyZXR1cm4iZWd5Iisoenx8Rj8iIG5hcCI6IiBuYXBqYSIpO2Nhc2UiZGQiOnJldHVybiBOKyh6fHxGPyIgbmFwIjoiIG5hcGphIik7Y2FzZSJNIjpyZXR1cm4iZWd5Iisoenx8Rj8iIGhceGYzbmFwIjoiIGhceGYzbmFwamEiKTtjYXNlIk1NIjpyZXR1cm4gTiso''@;'; put 'put ''enx8Rj8iIGhceGYzbmFwIjoiIGhceGYzbmFwamEiKTtjYXNlInkiOnJldHVybiJlZ3kiKyh6fHxGPyIgXHhlOXYiOiIgXHhlOXZlIik7Y2FzZSJ5eSI6cmV0dXJuIE4rKHp8fEY/IiBceGU5diI6IiBceGU5dmUiKX1yZXR1cm4iIn1mdW5jdGlvbiBCKFApe3JldHVybihQPyIiOiJbbVx4ZmFs''@;'; put 'put ''dF0gIikrIlsiK3lbdGhpcy5kYXkoKV0rIl0gTFRbLWtvcl0ifUkuZGVmaW5lTG9jYWxlKCJodSIse21vbnRoczoiamFudVx4ZTFyX2ZlYnJ1XHhlMXJfbVx4ZTFyY2l1c19ceGUxcHJpbGlzX21ceGUxanVzX2pceGZhbml1c19qXHhmYWxpdXNfYXVndXN6dHVzX3N6ZXB0ZW1iZXJfb2t0XHhm''@;'; put 'put ''M2Jlcl9ub3ZlbWJlcl9kZWNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuLl9mZWIuX21ceGUxcmMuX1x4ZTFwci5fbVx4ZTFqLl9qXHhmYW4uX2pceGZhbC5fYXVnLl9zemVwdC5fb2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5''@;'; put 'put ''czoidmFzXHhlMXJuYXBfaFx4ZTl0Zlx1MDE1MV9rZWRkX3N6ZXJkYV9jc1x4ZmN0XHhmNnJ0XHhmNmtfcFx4ZTludGVrX3N6b21iYXQiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoidmFzX2hceGU5dF9rZWRkX3N6ZV9jc1x4ZmN0X3BceGU5bl9zem8iLnNwbGl0KCJfIiksd2Vla2RheXNN''@;'; put 'put ''aW46InZfaF9rX3N6ZV9jc19wX3N6byIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiWVlZWS5NTS5ERC4iLExMOiJZWVlZLiBNTU1NIEQuIixMTEw6IllZWVkuIE1NTU0gRC4gSDptbSIsTExMTDoiWVlZWS4gTU1NTSBELiwgZGRkZCBIOm1t''@;'; put 'put ''In0sbWVyaWRpZW1QYXJzZTovZGV8ZHUvaSxpc1BNOmZ1bmN0aW9uKFApe3JldHVybiJ1Ij09PVAuY2hhckF0KDEpLnRvTG93ZXJDYXNlKCl9LG1lcmlkaWVtOmZ1bmN0aW9uKFAsRixPKXtyZXR1cm4gUDwxMj8hMD09PU8/ImRlIjoiREUiOiEwPT09Tz8iZHUiOiJEVSJ9LGNhbGVuZGFyOntz''@;'; put 'put ''YW1lRGF5OiJbbWFdIExUWy1rb3JdIixuZXh0RGF5OiJbaG9sbmFwXSBMVFsta29yXSIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gQi5jYWxsKHRoaXMsITApfSxsYXN0RGF5OiJbdGVnbmFwXSBMVFsta29yXSIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gQi5jYWxsKHRoaXMsITEp''@;'; put 'put ''fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBtXHhmYWx2YSIscGFzdDoiJXMiLHM6ZyxzczpnLG06ZyxtbTpnLGg6ZyxoaDpnLGQ6ZyxkZDpnLE06ZyxNTTpnLHk6Zyx5eTpnfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIs''@;'; put 'put ''d2Vlazp7ZG93OjEsZG95OjR9fSl9KF8oOTc1ODYpKX0sNTYyMTU6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJoeS1hbSIse21vbnRoczp7Zm9ybWF0OiJcdTA1NzBcdTA1NzhcdTA1ODJcdTA1NzZcdTA1N2VcdTA1NjFcdTA1ODBc''@;'; put 'put ''dTA1NmJfXHUwNTgzXHUwNTY1XHUwNTdmXHUwNTgwXHUwNTdlXHUwNTYxXHUwNTgwXHUwNTZiX1x1MDU3NFx1MDU2MVx1MDU4MFx1MDU3Zlx1MDU2Yl9cdTA1NjFcdTA1N2FcdTA1ODBcdTA1NmJcdTA1NmNcdTA1NmJfXHUwNTc0XHUwNTYxXHUwNTc1XHUwNTZiXHUwNTdkXHUwNTZiX1x1MDU3''@;'; put 'put ''MFx1MDU3OFx1MDU4Mlx1MDU3Nlx1MDU2Ylx1MDU3ZFx1MDU2Yl9cdTA1NzBcdTA1NzhcdTA1ODJcdTA1NmNcdTA1NmJcdTA1N2RcdTA1NmJfXHUwNTg1XHUwNTYzXHUwNTc4XHUwNTdkXHUwNTdmXHUwNTc4XHUwNTdkXHUwNTZiX1x1MDU3ZFx1MDU2NVx1MDU3YVx1MDU3Zlx1MDU2NVx1MDU3''@;'; put 'put ''NFx1MDU2Mlx1MDU2NVx1MDU4MFx1MDU2Yl9cdTA1NzBcdTA1NzhcdTA1NmZcdTA1N2ZcdTA1NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1ODBcdTA1NmJfXHUwNTc2XHUwNTc4XHUwNTc1XHUwNTY1XHUwNTc0XHUwNTYyXHUwNTY1XHUwNTgwXHUwNTZiX1x1MDU2NFx1MDU2NVx1MDU2Zlx1MDU3''@;'; put 'put ''Zlx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MFx1MDU2YiIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJcdTA1NzBcdTA1NzhcdTA1ODJcdTA1NzZcdTA1N2VcdTA1NjFcdTA1ODBfXHUwNTgzXHUwNTY1XHUwNTdmXHUwNTgwXHUwNTdlXHUwNTYxXHUwNTgwX1x1MDU3NFx1MDU2MVx1MDU4''@;'; put 'put ''MFx1MDU3Zl9cdTA1NjFcdTA1N2FcdTA1ODBcdTA1NmJcdTA1NmNfXHUwNTc0XHUwNTYxXHUwNTc1XHUwNTZiXHUwNTdkX1x1MDU3MFx1MDU3OFx1MDU4Mlx1MDU3Nlx1MDU2Ylx1MDU3ZF9cdTA1NzBcdTA1NzhcdTA1ODJcdTA1NmNcdTA1NmJcdTA1N2RfXHUwNTg1XHUwNTYzXHUwNTc4XHUw''@;'; put 'put ''NTdkXHUwNTdmXHUwNTc4XHUwNTdkX1x1MDU3ZFx1MDU2NVx1MDU3YVx1MDU3Zlx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MF9cdTA1NzBcdTA1NzhcdTA1NmZcdTA1N2ZcdTA1NjVcdTA1NzRcdTA1NjJcdTA1NjVcdTA1ODBfXHUwNTc2XHUwNTc4XHUwNTc1XHUwNTY1XHUwNTc0XHUw''@;'; put 'put ''NTYyXHUwNTY1XHUwNTgwX1x1MDU2NFx1MDU2NVx1MDU2Zlx1MDU3Zlx1MDU2NVx1MDU3NFx1MDU2Mlx1MDU2NVx1MDU4MCIuc3BsaXQoIl8iKX0sbW9udGhzU2hvcnQ6Ilx1MDU3MFx1MDU3Nlx1MDU3ZV9cdTA1ODNcdTA1N2ZcdTA1ODBfXHUwNTc0XHUwNTgwXHUwNTdmX1x1MDU2MVx1MDU3''@;'; put 'put ''YVx1MDU4MF9cdTA1NzRcdTA1NzVcdTA1N2RfXHUwNTcwXHUwNTc2XHUwNTdkX1x1MDU3MFx1MDU2Y1x1MDU3ZF9cdTA1ODVcdTA1NjNcdTA1N2RfXHUwNTdkXHUwNTdhXHUwNTdmX1x1MDU3MFx1MDU2Zlx1MDU3Zl9cdTA1NzZcdTA1NzRcdTA1NjJfXHUwNTY0XHUwNTZmXHUwNTdmIi5zcGxp''@;'; put 'put ''dCgiXyIpLHdlZWtkYXlzOiJcdTA1NmZcdTA1NmJcdTA1ODBcdTA1NjFcdTA1NmZcdTA1NmJfXHUwNTY1XHUwNTgwXHUwNTZmXHUwNTc4XHUwNTgyXHUwNTc3XHUwNTYxXHUwNTYyXHUwNTY5XHUwNTZiX1x1MDU2NVx1MDU4MFx1MDU2NVx1MDU4NFx1MDU3N1x1MDU2MVx1MDU2Mlx1MDU2OVx1''@;'; put 'put ''MDU2Yl9cdTA1NzlcdTA1NzhcdTA1ODBcdTA1NjVcdTA1ODRcdTA1NzdcdTA1NjFcdTA1NjJcdTA1NjlcdTA1NmJfXHUwNTcwXHUwNTZiXHUwNTc2XHUwNTYzXHUwNTc3XHUwNTYxXHUwNTYyXHUwNTY5XHUwNTZiX1x1MDU3OFx1MDU4Mlx1MDU4MFx1MDU2Mlx1MDU2MVx1MDU2OV9cdTA1Nzdc''@;'; put 'put ''dTA1NjFcdTA1NjJcdTA1NjFcdTA1NjkiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNTZmXHUwNTgwXHUwNTZmX1x1MDU2NVx1MDU4MFx1MDU2Zl9cdTA1NjVcdTA1ODBcdTA1ODRfXHUwNTc5XHUwNTgwXHUwNTg0X1x1MDU3MFx1MDU3Nlx1MDU2M19cdTA1NzhcdTA1ODJcdTA1ODBc''@;'; put 'put ''dTA1NjJfXHUwNTc3XHUwNTYyXHUwNTY5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA1NmZcdTA1ODBcdTA1NmZfXHUwNTY1XHUwNTgwXHUwNTZmX1x1MDU2NVx1MDU4MFx1MDU4NF9cdTA1NzlcdTA1ODBcdTA1ODRfXHUwNTcwXHUwNTc2XHUwNTYzX1x1MDU3OFx1MDU4Mlx1MDU4MFx1''@;'; put 'put ''MDU2Ml9cdTA1NzdcdTA1NjJcdTA1NjkiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIFx1MDU2OS4iLExMTDoiRCBNTU1NIFlZWVkgXHUwNTY5LiwgSEg6bW0iLExMTEw6ImRkZGQsIEQg''@;'; put 'put ''TU1NTSBZWVlZIFx1MDU2OS4sIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA1NjFcdTA1NzVcdTA1N2RcdTA1ODVcdTA1ODBdIExUIixuZXh0RGF5OiJbXHUwNTdlXHUwNTYxXHUwNTcyXHUwNTY4XSBMVCIsbGFzdERheToiW1x1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zl0gTFQiLG5l''@;'; put 'put ''eHRXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuImRkZGQgW1x1MDU4NVx1MDU4MFx1MDU2OCBcdTA1NmFcdTA1NjFcdTA1NzRcdTA1NjhdIExUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4iW1x1MDU2MVx1MDU3Nlx1MDU4MVx1MDU2MVx1MDU2ZV0gZGRkZCBbXHUwNTg1XHUwNTgwXHUwNTY4''@;'; put 'put ''IFx1MDU2YVx1MDU2MVx1MDU3NFx1MDU2OF0gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlcyBcdTA1NzBcdTA1NjVcdTA1N2ZcdTA1NzgiLHBhc3Q6IiVzIFx1MDU2MVx1MDU3Y1x1MDU2MVx1MDU3YiIsczoiXHUwNTc0XHUwNTZiIFx1MDU4NFx1MDU2MVx1MDU3''@;'; put 'put ''Nlx1MDU2YiBcdTA1N2VcdTA1NjFcdTA1NzVcdTA1ODBcdTA1NmZcdTA1NzVcdTA1NjFcdTA1NzYiLHNzOiIlZCBcdTA1N2VcdTA1NjFcdTA1NzVcdTA1ODBcdTA1NmZcdTA1NzVcdTA1NjFcdTA1NzYiLG06Ilx1MDU4MFx1MDU3OFx1MDU3YVx1MDU2NSIsbW06IiVkIFx1MDU4MFx1MDU3OFx1''@;'; put 'put ''MDU3YVx1MDU2NSIsaDoiXHUwNTZhXHUwNTYxXHUwNTc0IixoaDoiJWQgXHUwNTZhXHUwNTYxXHUwNTc0IixkOiJcdTA1ODVcdTA1ODAiLGRkOiIlZCBcdTA1ODVcdTA1ODAiLE06Ilx1MDU2MVx1MDU3NFx1MDU2Ylx1MDU3ZCIsTU06IiVkIFx1MDU2MVx1MDU3NFx1MDU2Ylx1MDU3ZCIseToi''@;'; put 'put ''XHUwNTdmXHUwNTYxXHUwNTgwXHUwNTZiIix5eToiJWQgXHUwNTdmXHUwNTYxXHUwNTgwXHUwNTZiIn0sbWVyaWRpZW1QYXJzZTovXHUwNTYzXHUwNTZiXHUwNTc3XHUwNTY1XHUwNTgwXHUwNTdlXHUwNTYxfFx1MDU2MVx1MDU3Y1x1MDU2MVx1MDU3ZVx1MDU3OFx1MDU3Zlx1MDU3ZVx1MDU2''@;'; put 'put ''MXxcdTA1ODFcdTA1NjVcdTA1ODBcdTA1NjVcdTA1NmZcdTA1N2VcdTA1NjF8XHUwNTY1XHUwNTgwXHUwNTY1XHUwNTZmXHUwNTc4XHUwNTc1XHUwNTYxXHUwNTc2Lyxpc1BNOmZ1bmN0aW9uKGcpe3JldHVybi9eKFx1MDU4MVx1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zlx1MDU3ZVx1MDU2MXxc''@;'; put 'put ''dTA1NjVcdTA1ODBcdTA1NjVcdTA1NmZcdTA1NzhcdTA1NzVcdTA1NjFcdTA1NzYpJC8udGVzdChnKX0sbWVyaWRpZW06ZnVuY3Rpb24oZyl7cmV0dXJuIGc8ND8iXHUwNTYzXHUwNTZiXHUwNTc3XHUwNTY1XHUwNTgwXHUwNTdlXHUwNTYxIjpnPDEyPyJcdTA1NjFcdTA1N2NcdTA1NjFcdTA1''@;'; put 'put ''N2VcdTA1NzhcdTA1N2ZcdTA1N2VcdTA1NjEiOmc8MTc/Ilx1MDU4MVx1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zlx1MDU3ZVx1MDU2MSI6Ilx1MDU2NVx1MDU4MFx1MDU2NVx1MDU2Zlx1MDU3OFx1MDU3NVx1MDU2MVx1MDU3NiJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn18XGR7''@;'; put 'put ''MSwyfS0oXHUwNTZiXHUwNTc2fFx1MDU4MFx1MDU2NCkvLG9yZGluYWw6ZnVuY3Rpb24oZyxCKXtzd2l0Y2goQil7Y2FzZSJEREQiOmNhc2UidyI6Y2FzZSJXIjpjYXNlIkRERG8iOnJldHVybiAxPT09Zz9nKyItXHUwNTZiXHUwNTc2IjpnKyItXHUwNTgwXHUwNTY0IjtkZWZhdWx0OnJldHVy''@;'; put 'put ''biBnfX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KF8oOTc1ODYpKX0sNTg2OmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiaWQiLHttb250aHM6IkphbnVhcmlfRmVicnVhcmlfTWFyZXRfQXByaWxfTWVpX0p1bmlfSnVsaV9BZ3VzdHVz''@;'; put 'put ''X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJKYW5fRmViX01hcl9BcHJfTWVpX0p1bl9KdWxfQWd0X1NlcF9Pa3RfTm92X0RlcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiTWluZ2d1X1NlbmluX1NlbGFzYV9SYWJ1X0thbWlzX0p1''@;'; put 'put ''bWF0X1NhYnR1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ik1pbl9TZW5fU2VsX1JhYl9LYW1fSnVtX1NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiTWdfU25fU2xfUmJfS21fSm1fU2IiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISC5tbSIsTFRTOiJISC5tbS5zcyIs''@;'; put 'put ''TDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0ifSxtZXJpZGllbVBhcnNlOi9wYWdpfHNpYW5nfHNvcmV8bWFsYW0vLG1lcmlkaWVtSG91cjpmdW5jdGlvbihn''@;'; put 'put ''LEIpe3JldHVybiAxMj09PWcmJihnPTApLCJwYWdpIj09PUI/Zzoic2lhbmciPT09Qj9nPj0xMT9nOmcrMTI6InNvcmUiPT09Qnx8Im1hbGFtIj09PUI/ZysxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKGcsQix3KXtyZXR1cm4gZzwxMT8icGFnaSI6ZzwxNT8ic2lhbmciOmc8MTk/InNv''@;'; put 'put ''cmUiOiJtYWxhbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSGFyaSBpbmkgcHVrdWxdIExUIixuZXh0RGF5OiJbQmVzb2sgcHVrdWxdIExUIixuZXh0V2VlazoiZGRkZCBbcHVrdWxdIExUIixsYXN0RGF5OiJbS2VtYXJpbiBwdWt1bF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtsYWx1IHB1a3VsXSBM''@;'; put 'put ''VCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiZGFsYW0gJXMiLHBhc3Q6IiVzIHlhbmcgbGFsdSIsczoiYmViZXJhcGEgZGV0aWsiLHNzOiIlZCBkZXRpayIsbToic2VtZW5pdCIsbW06IiVkIG1lbml0IixoOiJzZWphbSIsaGg6IiVkIGphbSIsZDoic2VoYXJpIixkZDoi''@;'; put 'put ''JWQgaGFyaSIsTToic2VidWxhbiIsTU06IiVkIGJ1bGFuIix5OiJzZXRhaHVuIix5eToiJWQgdGFodW4ifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oXyg5NzU4NikpfSw5MDIxMTpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24geSh3KXtyZXR1cm4g''@;'; put 'put ''dyUxMDA9PTExfHx3JTEwIT0xfWZ1bmN0aW9uIGcodyxQLEYsTyl7dmFyIHo9dysiICI7c3dpdGNoKEYpe2Nhc2UicyI6cmV0dXJuIFB8fE8/Im5va2tyYXIgc2VrXHhmYW5kdXIiOiJub2trcnVtIHNla1x4ZmFuZHVtIjtjYXNlInNzIjpyZXR1cm4geSh3KT96KyhQfHxPPyJzZWtceGZhbmR1''@;'; put 'put ''ciI6InNla1x4ZmFuZHVtIik6eisic2VrXHhmYW5kYSI7Y2FzZSJtIjpyZXR1cm4gUD8ibVx4ZWRuXHhmYXRhIjoibVx4ZWRuXHhmYXR1IjtjYXNlIm1tIjpyZXR1cm4geSh3KT96KyhQfHxPPyJtXHhlZG5ceGZhdHVyIjoibVx4ZWRuXHhmYXR1bSIpOlA/eisibVx4ZWRuXHhmYXRhIjp6KyJt''@;'; put 'put ''XHhlZG5ceGZhdHUiO2Nhc2UiaGgiOnJldHVybiB5KHcpP3orKFB8fE8/ImtsdWtrdXN0dW5kaXIiOiJrbHVra3VzdHVuZHVtIik6eisia2x1a2t1c3R1bmQiO2Nhc2UiZCI6cmV0dXJuIFA/ImRhZ3VyIjpPPyJkYWciOiJkZWdpIjtjYXNlImRkIjpyZXR1cm4geSh3KT9QP3orImRhZ2FyIjp6''@;'; put 'put ''KyhPPyJkYWdhIjoiZFx4ZjZndW0iKTpQP3orImRhZ3VyIjp6KyhPPyJkYWciOiJkZWdpIik7Y2FzZSJNIjpyZXR1cm4gUD8ibVx4ZTFudVx4ZjB1ciI6Tz8ibVx4ZTFudVx4ZjAiOiJtXHhlMW51XHhmMGkiO2Nhc2UiTU0iOnJldHVybiB5KHcpP1A/eisibVx4ZTFudVx4ZjBpciI6eisoTz8i''@;'; put 'put ''bVx4ZTFudVx4ZjBpIjoibVx4ZTFudVx4ZjB1bSIpOlA/eisibVx4ZTFudVx4ZjB1ciI6eisoTz8ibVx4ZTFudVx4ZjAiOiJtXHhlMW51XHhmMGkiKTtjYXNlInkiOnJldHVybiBQfHxPPyJceGUxciI6Ilx4ZTFyaSI7Y2FzZSJ5eSI6cmV0dXJuIHkodyk/eisoUHx8Tz8iXHhlMXIiOiJceGUx''@;'; put 'put ''cnVtIik6eisoUHx8Tz8iXHhlMXIiOiJceGUxcmkiKX19SS5kZWZpbmVMb2NhbGUoImlzIix7bW9udGhzOiJqYW5ceGZhYXJfZmViclx4ZmFhcl9tYXJzX2Fwclx4ZWRsX21hXHhlZF9qXHhmYW5ceGVkX2pceGZhbFx4ZWRfXHhlMWdceGZhc3Rfc2VwdGVtYmVyX29rdFx4ZjNiZXJfblx4ZjN2''@;'; put 'put ''ZW1iZXJfZGVzZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZWJfbWFyX2Fwcl9tYVx4ZWRfalx4ZmFuX2pceGZhbF9ceGUxZ1x4ZmFfc2VwX29rdF9uXHhmM3ZfZGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzdW5udWRhZ3VyX21ceGUxbnVkYWd1cl9ceGZlcmlceGYwanVk''@;'; put 'put ''YWd1cl9taVx4ZjB2aWt1ZGFndXJfZmltbXR1ZGFndXJfZlx4ZjZzdHVkYWd1cl9sYXVnYXJkYWd1ciIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzdW5fbVx4ZTFuX1x4ZmVyaV9taVx4ZjBfZmltX2ZceGY2c19sYXUiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN1X01ceGUxX1x4ZGVy''@;'; put 'put ''X01pX0ZpX0ZceGY2X0xhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBba2wuXSBIOm1tIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgW2tsLl0gSDpt''@;'; put 'put ''bSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHhlZCBkYWcga2wuXSBMVCIsbmV4dERheToiW1x4ZTEgbW9yZ3VuIGtsLl0gTFQiLG5leHRXZWVrOiJkZGRkIFtrbC5dIExUIixsYXN0RGF5OiJbXHhlZCBnXHhlNnIga2wuXSBMVCIsbGFzdFdlZWs6IltzXHhlZFx4ZjBhc3RhXSBkZGRkIFtrbC5d''@;'; put 'put ''IExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlZnRpciAlcyIscGFzdDoiZnlyaXIgJXMgc1x4ZWRceGYwYW4iLHM6ZyxzczpnLG06ZyxtbTpnLGg6ImtsdWtrdXN0dW5kIixoaDpnLGQ6ZyxkZDpnLE06ZyxNTTpnLHk6Zyx5eTpnfSxkYXlPZk1vbnRoT3JkaW5hbFBh''@;'; put 'put ''cnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KF8oOTc1ODYpKX0sMjIzNDA6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJpdC1jaCIse21vbnRoczoiZ2VubmFpb19mZWJicmFpb19tYXJ6''@;'; put 'put ''b19hcHJpbGVfbWFnZ2lvX2dpdWdub19sdWdsaW9fYWdvc3RvX3NldHRlbWJyZV9vdHRvYnJlX25vdmVtYnJlX2RpY2VtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJnZW5fZmViX21hcl9hcHJfbWFnX2dpdV9sdWdfYWdvX3NldF9vdHRfbm92X2RpYyIuc3BsaXQoIl8iKSx3ZWVrZGF5''@;'; put 'put ''czoiZG9tZW5pY2FfbHVuZWRceGVjX21hcnRlZFx4ZWNfbWVyY29sZWRceGVjX2dpb3ZlZFx4ZWNfdmVuZXJkXHhlY19zYWJhdG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tX2x1bl9tYXJfbWVyX2dpb192ZW5fc2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9t''@;'; put 'put ''ZV9naV92ZV9zYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2Ft''@;'; put 'put ''ZURheToiW09nZ2kgYWxsZV0gTFQiLG5leHREYXk6IltEb21hbmkgYWxsZV0gTFQiLG5leHRXZWVrOiJkZGRkIFthbGxlXSBMVCIsbGFzdERheToiW0llcmkgYWxsZV0gTFQiLGxhc3RXZWVrOmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmRheSgpPyJbbGEgc2NvcnNhXSBkZGRkIFthbGxl''@;'; put 'put ''XSBMVCI6IltsbyBzY29yc29dIGRkZGQgW2FsbGVdIExUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpmdW5jdGlvbihnKXtyZXR1cm4oL15bMC05XS4rJC8udGVzdChnKT8idHJhIjoiaW4iKSsiICIrZ30scGFzdDoiJXMgZmEiLHM6ImFsY3VuaSBzZWNvbmRpIixzczoi''@;'; put 'put ''JWQgc2Vjb25kaSIsbToidW4gbWludXRvIixtbToiJWQgbWludXRpIixoOiJ1bidvcmEiLGhoOiIlZCBvcmUiLGQ6InVuIGdpb3JubyIsZGQ6IiVkIGdpb3JuaSIsTToidW4gbWVzZSIsTU06IiVkIG1lc2kiLHk6InVuIGFubm8iLHl5OiIlZCBhbm5pIn0sZGF5T2ZNb250aE9yZGluYWxQYXJz''@;'; put 'put ''ZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KF8oOTc1ODYpKX0sNzAxNzA6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJpdCIse21vbnRoczoiZ2VubmFpb19mZWJicmFpb19tYXJ6''@;'; put 'put ''b19hcHJpbGVfbWFnZ2lvX2dpdWdub19sdWdsaW9fYWdvc3RvX3NldHRlbWJyZV9vdHRvYnJlX25vdmVtYnJlX2RpY2VtYnJlIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJnZW5fZmViX21hcl9hcHJfbWFnX2dpdV9sdWdfYWdvX3NldF9vdHRfbm92X2RpYyIuc3BsaXQoIl8iKSx3ZWVrZGF5''@;'; put 'put ''czoiZG9tZW5pY2FfbHVuZWRceGVjX21hcnRlZFx4ZWNfbWVyY29sZWRceGVjX2dpb3ZlZFx4ZWNfdmVuZXJkXHhlY19zYWJhdG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tX2x1bl9tYXJfbWVyX2dpb192ZW5fc2FiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb19sdV9tYV9t''@;'; put 'put ''ZV9naV92ZV9zYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2Ft''@;'; put 'put ''ZURheTpmdW5jdGlvbigpe3JldHVybiJbT2dnaSBhIisodGhpcy5ob3VycygpPjE/ImxsZSAiOjA9PT10aGlzLmhvdXJzKCk/IiAiOiJsbCciKSsiXUxUIn0sbmV4dERheTpmdW5jdGlvbigpe3JldHVybiJbRG9tYW5pIGEiKyh0aGlzLmhvdXJzKCk+MT8ibGxlICI6MD09PXRoaXMuaG91cnMo''@;'; put 'put ''KT8iICI6ImxsJyIpKyJdTFQifSxuZXh0V2VlazpmdW5jdGlvbigpe3JldHVybiJkZGRkIFthIisodGhpcy5ob3VycygpPjE/ImxsZSAiOjA9PT10aGlzLmhvdXJzKCk/IiAiOiJsbCciKSsiXUxUIn0sbGFzdERheTpmdW5jdGlvbigpe3JldHVybiJbSWVyaSBhIisodGhpcy5ob3VycygpPjE/''@;'; put 'put ''ImxsZSAiOjA9PT10aGlzLmhvdXJzKCk/IiAiOiJsbCciKSsiXUxUIn0sbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuZGF5KCk/IltMYSBzY29yc2FdIGRkZGQgW2EiKyh0aGlzLmhvdXJzKCk+MT8ibGxlICI6MD09PXRoaXMuaG91cnMoKT8iICI6ImxsJyIpKyJdTFQiOiJb''@;'; put 'put ''TG8gc2NvcnNvXSBkZGRkIFthIisodGhpcy5ob3VycygpPjE/ImxsZSAiOjA9PT10aGlzLmhvdXJzKCk/IiAiOiJsbCciKSsiXUxUIn0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToidHJhICVzIixwYXN0OiIlcyBmYSIsczoiYWxjdW5pIHNlY29uZGkiLHNzOiIlZCBzZWNv''@;'; put 'put ''bmRpIixtOiJ1biBtaW51dG8iLG1tOiIlZCBtaW51dGkiLGg6InVuJ29yYSIsaGg6IiVkIG9yZSIsZDoidW4gZ2lvcm5vIixkZDoiJWQgZ2lvcm5pIix3OiJ1bmEgc2V0dGltYW5hIix3dzoiJWQgc2V0dGltYW5lIixNOiJ1biBtZXNlIixNTToiJWQgbWVzaSIseToidW4gYW5ubyIseXk6IiVk''@;'; put 'put ''IGFubmkifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHhiYS8sb3JkaW5hbDoiJWRceGJhIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oXyg5NzU4NikpfSwzOTc3MDpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImphIix7''@;'; put 'put ''ZXJhczpbe3NpbmNlOiIyMDE5LTA1LTAxIixvZmZzZXQ6MSxuYW1lOiJcdTRlZTRcdTU0OGMiLG5hcnJvdzoiXHUzMmZmIixhYmJyOiJSIn0se3NpbmNlOiIxOTg5LTAxLTA4Iix1bnRpbDoiMjAxOS0wNC0zMCIsb2Zmc2V0OjEsbmFtZToiXHU1ZTczXHU2MjEwIixuYXJyb3c6Ilx1MzM3YiIs''@;'; put 'put ''YWJicjoiSCJ9LHtzaW5jZToiMTkyNi0xMi0yNSIsdW50aWw6IjE5ODktMDEtMDciLG9mZnNldDoxLG5hbWU6Ilx1NjYyZFx1NTQ4YyIsbmFycm93OiJcdTMzN2MiLGFiYnI6IlMifSx7c2luY2U6IjE5MTItMDctMzAiLHVudGlsOiIxOTI2LTEyLTI0IixvZmZzZXQ6MSxuYW1lOiJcdTU5Mjdc''@;'; put 'put ''dTZiNjMiLG5hcnJvdzoiXHUzMzdkIixhYmJyOiJUIn0se3NpbmNlOiIxODczLTAxLTAxIix1bnRpbDoiMTkxMi0wNy0yOSIsb2Zmc2V0OjYsbmFtZToiXHU2NjBlXHU2Y2JiIixuYXJyb3c6Ilx1MzM3ZSIsYWJicjoiTSJ9LHtzaW5jZToiMDAwMS0wMS0wMSIsdW50aWw6IjE4NzMtMTItMzEi''@;'; put 'put ''LG9mZnNldDoxLG5hbWU6Ilx1ODk3Zlx1NjZhNiIsbmFycm93OiJBRCIsYWJicjoiQUQifSx7c2luY2U6IjAwMDAtMTItMzEiLHVudGlsOi0xLzAsb2Zmc2V0OjEsbmFtZToiXHU3ZDAwXHU1MTQzXHU1MjRkIixuYXJyb3c6IkJDIixhYmJyOiJCQyJ9XSxlcmFZZWFyT3JkaW5hbFJlZ2V4Oi8o''@;'; put 'put ''XHU1MTQzfFxkKylcdTVlNzQvLGVyYVllYXJPcmRpbmFsUGFyc2U6ZnVuY3Rpb24oZyxCKXtyZXR1cm4iXHU1MTQzIj09PUJbMV0/MTpwYXJzZUludChCWzFdfHxnLDEwKX0sbW9udGhzOiIxXHU2NzA4XzJcdTY3MDhfM1x1NjcwOF80XHU2NzA4XzVcdTY3MDhfNlx1NjcwOF83XHU2NzA4Xzhc''@;'; put 'put ''dTY3MDhfOVx1NjcwOF8xMFx1NjcwOF8xMVx1NjcwOF8xMlx1NjcwOCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiMVx1NjcwOF8yXHU2NzA4XzNcdTY3MDhfNFx1NjcwOF81XHU2NzA4XzZcdTY3MDhfN1x1NjcwOF84XHU2NzA4XzlcdTY3MDhfMTBcdTY3MDhfMTFcdTY3MDhfMTJcdTY3MDgi''@;'; put 'put ''LnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1NjVlNVx1NjZkY1x1NjVlNV9cdTY3MDhcdTY2ZGNcdTY1ZTVfXHU3MDZiXHU2NmRjXHU2NWU1X1x1NmMzNFx1NjZkY1x1NjVlNV9cdTY3MjhcdTY2ZGNcdTY1ZTVfXHU5MWQxXHU2NmRjXHU2NWU1X1x1NTcxZlx1NjZkY1x1NjVlNSIuc3BsaXQoIl8i''@;'; put 'put ''KSx3ZWVrZGF5c1Nob3J0OiJcdTY1ZTVfXHU2NzA4X1x1NzA2Yl9cdTZjMzRfXHU2NzI4X1x1OTFkMV9cdTU3MWYiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1NjVlNV9cdTY3MDhfXHU3MDZiX1x1NmMzNF9cdTY3MjhfXHU5MWQxX1x1NTcxZiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1h''@;'; put 'put ''dDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZL01NL0REIixMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IixMTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSBISDptbSIsTExMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IGRkZGQgSEg6bW0iLGw6IllZWVkvTU0v''@;'; put 'put ''REQiLGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLGxsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUoZGRkKSBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1NTM0OFx1NTI0ZHxcdTUzNDhcdTVmOGMvaSxpc1BNOmZ1''@;'; put 'put ''bmN0aW9uKGcpe3JldHVybiJcdTUzNDhcdTVmOGMiPT09Z30sbWVyaWRpZW06ZnVuY3Rpb24oZyxCLHcpe3JldHVybiBnPDEyPyJcdTUzNDhcdTUyNGQiOiJcdTUzNDhcdTVmOGMifSxjYWxlbmRhcjp7c2FtZURheToiW1x1NGVjYVx1NjVlNV0gTFQiLG5leHREYXk6IltcdTY2MGVcdTY1ZTVd''@;'; put 'put ''IExUIixuZXh0V2VlazpmdW5jdGlvbihnKXtyZXR1cm4gZy53ZWVrKCkhPT10aGlzLndlZWsoKT8iW1x1Njc2NVx1OTAzMV1kZGRkIExUIjoiZGRkZCBMVCJ9LGxhc3REYXk6IltcdTY2MjhcdTY1ZTVdIExUIixsYXN0V2VlazpmdW5jdGlvbihnKXtyZXR1cm4gdGhpcy53ZWVrKCkhPT1nLndl''@;'; put 'put ''ZWsoKT8iW1x1NTE0OFx1OTAzMV1kZGRkIExUIjoiZGRkZCBMVCJ9LHNhbWVFbHNlOiJMIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx1NjVlNS8sb3JkaW5hbDpmdW5jdGlvbihnLEIpe3N3aXRjaChCKXtjYXNlInkiOnJldHVybiAxPT09Zz8iXHU1MTQzXHU1ZTc0IjpnKyJc''@;'; put 'put ''dTVlNzQiO2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRERCI6cmV0dXJuIGcrIlx1NjVlNSI7ZGVmYXVsdDpyZXR1cm4gZ319LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlc1x1NWY4YyIscGFzdDoiJXNcdTUyNGQiLHM6Ilx1NjU3MFx1NzlkMiIsc3M6IiVkXHU3OWQyIixtOiIxXHU1MjA2IixtbToi''@;'; put 'put ''JWRcdTUyMDYiLGg6IjFcdTY2NDJcdTk1OTMiLGhoOiIlZFx1NjY0Mlx1OTU5MyIsZDoiMVx1NjVlNSIsZGQ6IiVkXHU2NWU1IixNOiIxXHUzMGY2XHU2NzA4IixNTToiJWRcdTMwZjZcdTY3MDgiLHk6IjFcdTVlNzQiLHl5OiIlZFx1NWU3NCJ9fSl9KF8oOTc1ODYpKX0sNzM4NzU6ZnVuY3Rp''@;'; put 'put ''b24odWUscSxfKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJqdiIse21vbnRoczoiSmFudWFyaV9GZWJydWFyaV9NYXJldF9BcHJpbF9NZWlfSnVuaV9KdWxpX0FndXN0dXNfU2VwdGVtYmVyX09rdG9iZXJfTm9wZW1iZXJfRGVzZW1iZXIiLnNwbGl0KCJfIiks''@;'; put 'put ''bW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFyX0Fwcl9NZWlfSnVuX0p1bF9BZ3NfU2VwX09rdF9Ob3BfRGVzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJNaW5nZ3VfU2VuZW5fU2Vsb3NvX1JlYnVfS2VtaXNfSmVtdXdhaF9TZXB0dSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJNaW5fU2VuX1Nl''@;'; put 'put ''bF9SZWJfS2VtX0plbV9TZXAiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ik1nX1NuX1NsX1JiX0ttX0ptX1NwIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEgubW0iLExUUzoiSEgubW0uc3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZ''@;'; put 'put ''WSBbcHVrdWxdIEhILm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIn0sbWVyaWRpZW1QYXJzZTovZW5qaW5nfHNpeWFuZ3xzb250ZW58bmRhbHUvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihnLEIpe3JldHVybiAxMj09PWcmJihnPTApLCJlbmppbmciPT09Qj9nOiJz''@;'; put 'put ''aXlhbmciPT09Qj9nPj0xMT9nOmcrMTI6InNvbnRlbiI9PT1CfHwibmRhbHUiPT09Qj9nKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oZyxCLHcpe3JldHVybiBnPDExPyJlbmppbmciOmc8MTU/InNpeWFuZyI6ZzwxOT8ic29udGVuIjoibmRhbHUifSxjYWxlbmRhcjp7c2FtZURheToi''@;'; put 'put ''W0RpbnRlbiBwdW5pa28gcHVrdWxdIExUIixuZXh0RGF5OiJbTWJlbmphbmcgcHVrdWxdIExUIixuZXh0V2VlazoiZGRkZCBbcHVrdWxdIExUIixsYXN0RGF5OiJbS2FsYSB3aW5naSBwdWt1bF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtrZXBlbmdrZXIgcHVrdWxdIExUIixzYW1lRWxzZToiTCJ9''@;'; put 'put ''LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJ3b250ZW4gaW5nICVzIixwYXN0OiIlcyBpbmdrYW5nIGtlcGVuZ2tlciIsczoic2F3ZXRhd2lzIGRldGlrIixzczoiJWQgZGV0aWsiLG06InNldHVuZ2dhbCBtZW5pdCIsbW06IiVkIG1lbml0IixoOiJzZXR1bmdnYWwgamFtIixoaDoiJWQgamFtIixk''@;'; put 'put ''OiJzZWRpbnRlbiIsZGQ6IiVkIGRpbnRlbiIsTToic2V3dWxhbiIsTU06IiVkIHd1bGFuIix5OiJzZXRhdW4iLHl5OiIlZCB0YXVuIn0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KF8oOTc1ODYpKX0sNzk0OTk6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVm''@;'; put 'put ''aW5lTG9jYWxlKCJrYSIse21vbnRoczoiXHUxMGQ4XHUxMGQwXHUxMGRjXHUxMGQ1XHUxMGQwXHUxMGUwXHUxMGQ4X1x1MTBkN1x1MTBkNFx1MTBkMVx1MTBkNFx1MTBlMFx1MTBkNVx1MTBkMFx1MTBkYVx1MTBkOF9cdTEwZGJcdTEwZDBcdTEwZTBcdTEwZTJcdTEwZDhfXHUxMGQwXHUxMGRl''@;'; put 'put ''XHUxMGUwXHUxMGQ4XHUxMGRhXHUxMGQ4X1x1MTBkYlx1MTBkMFx1MTBkOFx1MTBlMVx1MTBkOF9cdTEwZDhcdTEwZDVcdTEwZGNcdTEwZDhcdTEwZTFcdTEwZDhfXHUxMGQ4XHUxMGQ1XHUxMGRhXHUxMGQ4XHUxMGUxXHUxMGQ4X1x1MTBkMFx1MTBkMlx1MTBkNVx1MTBkOFx1MTBlMVx1MTBl''@;'; put 'put ''Mlx1MTBkZF9cdTEwZTFcdTEwZDRcdTEwZTVcdTEwZTJcdTEwZDRcdTEwZGJcdTEwZDFcdTEwZDRcdTEwZTBcdTEwZDhfXHUxMGRkXHUxMGU1XHUxMGUyXHUxMGRkXHUxMGRiXHUxMGQxXHUxMGQ0XHUxMGUwXHUxMGQ4X1x1MTBkY1x1MTBkZFx1MTBkNFx1MTBkYlx1MTBkMVx1MTBkNFx1MTBl''@;'; put 'put ''MFx1MTBkOF9cdTEwZDNcdTEwZDRcdTEwZDlcdTEwZDRcdTEwZGJcdTEwZDFcdTEwZDRcdTEwZTBcdTEwZDgiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MTBkOFx1MTBkMFx1MTBkY19cdTEwZDdcdTEwZDRcdTEwZDFfXHUxMGRiXHUxMGQwXHUxMGUwX1x1MTBkMFx1MTBkZVx1MTBlMF9c''@;'; put 'put ''dTEwZGJcdTEwZDBcdTEwZDhfXHUxMGQ4XHUxMGQ1XHUxMGRjX1x1MTBkOFx1MTBkNVx1MTBkYV9cdTEwZDBcdTEwZDJcdTEwZDVfXHUxMGUxXHUxMGQ0XHUxMGU1X1x1MTBkZFx1MTBlNVx1MTBlMl9cdTEwZGNcdTEwZGRcdTEwZDRfXHUxMGQzXHUxMGQ0XHUxMGQ5Ii5zcGxpdCgiXyIpLHdl''@;'; put 'put ''ZWtkYXlzOntzdGFuZGFsb25lOiJcdTEwZDlcdTEwZDVcdTEwZDhcdTEwZTBcdTEwZDBfXHUxMGRkXHUxMGUwXHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGQ4X1x1MTBlMVx1MTBkMFx1MTBkYlx1MTBlOFx1MTBkMFx1MTBkMVx1MTBkMFx1MTBkN1x1MTBkOF9cdTEwZGRcdTEw''@;'; put 'put ''ZDdcdTEwZWVcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZDhfXHUxMGVlXHUxMGUzXHUxMGQ3XHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGQ4X1x1MTBkZVx1MTBkMFx1MTBlMFx1MTBkMFx1MTBlMVx1MTBkOVx1MTBkNFx1MTBkNVx1MTBkOF9cdTEwZThcdTEw''@;'; put 'put ''ZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZDgiLnNwbGl0KCJfIiksZm9ybWF0OiJcdTEwZDlcdTEwZDVcdTEwZDhcdTEwZTBcdTEwZDBcdTEwZTFfXHUxMGRkXHUxMGUwXHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGUxX1x1MTBlMVx1MTBkMFx1MTBkYlx1MTBlOFx1MTBkMFx1''@;'; put 'put ''MTBkMVx1MTBkMFx1MTBkN1x1MTBlMV9cdTEwZGRcdTEwZDdcdTEwZWVcdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZTFfXHUxMGVlXHUxMGUzXHUxMGQ3XHUxMGU4XHUxMGQwXHUxMGQxXHUxMGQwXHUxMGQ3XHUxMGUxX1x1MTBkZVx1MTBkMFx1MTBlMFx1MTBkMFx1MTBlMVx1''@;'; put 'put ''MTBkOVx1MTBkNFx1MTBkNVx1MTBlMV9cdTEwZThcdTEwZDBcdTEwZDFcdTEwZDBcdTEwZDdcdTEwZTEiLnNwbGl0KCJfIiksaXNGb3JtYXQ6LyhcdTEwZWNcdTEwZDhcdTEwZGNcdTEwZDB8XHUxMGU4XHUxMGQ0XHUxMGRiXHUxMGQzXHUxMGQ0XHUxMGQyKS99LHdlZWtkYXlzU2hvcnQ6Ilx1''@;'; put 'put ''MTBkOVx1MTBkNVx1MTBkOF9cdTEwZGRcdTEwZTBcdTEwZThfXHUxMGUxXHUxMGQwXHUxMGRiX1x1MTBkZFx1MTBkN1x1MTBlZV9cdTEwZWVcdTEwZTNcdTEwZDdfXHUxMGRlXHUxMGQwXHUxMGUwX1x1MTBlOFx1MTBkMFx1MTBkMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUxMGQ5XHUx''@;'; put 'put ''MGQ1X1x1MTBkZFx1MTBlMF9cdTEwZTFcdTEwZDBfXHUxMGRkXHUxMGQ3X1x1MTBlZVx1MTBlM19cdTEwZGVcdTEwZDBfXHUxMGU4XHUxMGQwIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZ''@;'; put 'put ''WSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MTBkM1x1MTBlNlx1MTBkNFx1MTBlMV0gTFRbLVx1MTBkNlx1MTBkNF0iLG5leHREYXk6IltcdTEwZWVcdTEwZDVcdTEwZDBcdTEwZGFdIExUWy1c''@;'; put 'put ''dTEwZDZcdTEwZDRdIixsYXN0RGF5OiJbXHUxMGQyXHUxMGUzXHUxMGU4XHUxMGQ4XHUxMGRjXSBMVFstXHUxMGQ2XHUxMGQ0XSIsbmV4dFdlZWs6IltcdTEwZThcdTEwZDRcdTEwZGJcdTEwZDNcdTEwZDRcdTEwZDJdIGRkZGQgTFRbLVx1MTBkNlx1MTBkNF0iLGxhc3RXZWVrOiJbXHUxMGVj''@;'; put 'put ''XHUxMGQ4XHUxMGRjXHUxMGQwXSBkZGRkIExULVx1MTBkNlx1MTBkNCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZTpmdW5jdGlvbihnKXtyZXR1cm4gZy5yZXBsYWNlKC8oXHUxMGVjXHUxMGQwXHUxMGRifFx1MTBlY1x1MTBlM1x1MTBkN3xcdTEwZTFcdTEwZDBcdTEwZDBc''@;'; put 'put ''dTEwZDd8XHUxMGVjXHUxMGQ0XHUxMGRhfFx1MTBkM1x1MTBlNnxcdTEwZDdcdTEwZDUpKFx1MTBkOHxcdTEwZDQpLyxmdW5jdGlvbihCLHcsUCl7cmV0dXJuIlx1MTBkOCI9PT1QP3crIlx1MTBlOFx1MTBkOCI6dytQKyJcdTEwZThcdTEwZDgifSl9LHBhc3Q6ZnVuY3Rpb24oZyl7cmV0dXJu''@;'; put 'put ''LyhcdTEwZWNcdTEwZDBcdTEwZGJcdTEwZDh8XHUxMGVjXHUxMGUzXHUxMGQ3XHUxMGQ4fFx1MTBlMVx1MTBkMFx1MTBkMFx1MTBkN1x1MTBkOHxcdTEwZDNcdTEwZTZcdTEwZDR8XHUxMGQ3XHUxMGQ1XHUxMGQ0KS8udGVzdChnKT9nLnJlcGxhY2UoLyhcdTEwZDh8XHUxMGQ0KSQvLCJcdTEw''@;'; put 'put ''ZDhcdTEwZTEgXHUxMGVjXHUxMGQ4XHUxMGRjIik6L1x1MTBlY1x1MTBkNFx1MTBkYVx1MTBkOC8udGVzdChnKT9nLnJlcGxhY2UoL1x1MTBlY1x1MTBkNFx1MTBkYVx1MTBkOCQvLCJcdTEwZWNcdTEwZGFcdTEwZDhcdTEwZTEgXHUxMGVjXHUxMGQ4XHUxMGRjIik6Z30sczoiXHUxMGUwXHUx''@;'; put 'put ''MGQwXHUxMGRiXHUxMGQzXHUxMGQ0XHUxMGRjXHUxMGQ4XHUxMGRiXHUxMGQ0IFx1MTBlY1x1MTBkMFx1MTBkYlx1MTBkOCIsc3M6IiVkIFx1MTBlY1x1MTBkMFx1MTBkYlx1MTBkOCIsbToiXHUxMGVjXHUxMGUzXHUxMGQ3XHUxMGQ4IixtbToiJWQgXHUxMGVjXHUxMGUzXHUxMGQ3XHUxMGQ4''@;'; put 'put ''IixoOiJcdTEwZTFcdTEwZDBcdTEwZDBcdTEwZDdcdTEwZDgiLGhoOiIlZCBcdTEwZTFcdTEwZDBcdTEwZDBcdTEwZDdcdTEwZDgiLGQ6Ilx1MTBkM1x1MTBlNlx1MTBkNCIsZGQ6IiVkIFx1MTBkM1x1MTBlNlx1MTBkNCIsTToiXHUxMGQ3XHUxMGQ1XHUxMGQ0IixNTToiJWQgXHUxMGQ3XHUx''@;'; put 'put ''MGQ1XHUxMGQ0Iix5OiJcdTEwZWNcdTEwZDRcdTEwZGFcdTEwZDgiLHl5OiIlZCBcdTEwZWNcdTEwZDRcdTEwZGFcdTEwZDgifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi8wfDEtXHUxMGRhXHUxMGQ4fFx1MTBkYlx1MTBkNC1cZHsxLDJ9fFxkezEsMn0tXHUxMGQ0LyxvcmRpbmFsOmZ1bmN0''@;'; put 'put ''aW9uKGcpe3JldHVybiAwPT09Zz9nOjE9PT1nP2crIi1cdTEwZGFcdTEwZDgiOmc8MjB8fGc8PTEwMCYmZyUyMD09MHx8ZyUxMDA9PTA/Ilx1MTBkYlx1MTBkNC0iK2c6ZysiLVx1MTBkNCJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShfKDk3NTg2KSl9LDkzNTczOmZ1bmN0aW9uKHVlLHEsXyl7''@;'; put 'put ''IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT17MDoiLVx1MDQ0OFx1MDQ1NiIsMToiLVx1MDQ0OFx1MDQ1NiIsMjoiLVx1MDQ0OFx1MDQ1NiIsMzoiLVx1MDQ0OFx1MDQ1NiIsNDoiLVx1MDQ0OFx1MDQ1NiIsNToiLVx1MDQ0OFx1MDQ1NiIsNjoiLVx1MDQ0OFx1MDQ0YiIsNzoiLVx1''@;'; put 'put ''MDQ0OFx1MDQ1NiIsODoiLVx1MDQ0OFx1MDQ1NiIsOToiLVx1MDQ0OFx1MDQ0YiIsMTA6Ii1cdTA0NDhcdTA0NGIiLDIwOiItXHUwNDQ4XHUwNDRiIiwzMDoiLVx1MDQ0OFx1MDQ0YiIsNDA6Ii1cdTA0NDhcdTA0NGIiLDUwOiItXHUwNDQ4XHUwNDU2Iiw2MDoiLVx1MDQ0OFx1MDQ0YiIsNzA6''@;'; put 'put ''Ii1cdTA0NDhcdTA0NTYiLDgwOiItXHUwNDQ4XHUwNDU2Iiw5MDoiLVx1MDQ0OFx1MDQ0YiIsMTAwOiItXHUwNDQ4XHUwNDU2In07SS5kZWZpbmVMb2NhbGUoImtrIix7bW9udGhzOiJcdTA0OWJcdTA0MzBcdTA0YTNcdTA0NDJcdTA0MzBcdTA0NDBfXHUwNDMwXHUwNDliXHUwNDNmXHUwNDMw''@;'; put 'put ''XHUwNDNkX1x1MDQzZFx1MDQzMFx1MDQ0M1x1MDQ0MFx1MDQ0Ylx1MDQzN19cdTA0NDFcdTA0ZDlcdTA0NDNcdTA0NTZcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDNjXHUwNDRiXHUwNDQwX1x1MDQzY1x1MDQzMFx1MDQ0M1x1MDQ0MVx1MDQ0Ylx1MDQzY19cdTA0NDhcdTA0NTZcdTA0M2JcdTA0''@;'; put 'put ''MzRcdTA0MzVfXHUwNDQyXHUwNDMwXHUwNDNjXHUwNDRiXHUwNDM3X1x1MDQ5Ylx1MDQ0Ylx1MDQ0MFx1MDQzYVx1MDRhZlx1MDQzOVx1MDQzNVx1MDQzYV9cdTA0OWJcdTA0MzBcdTA0MzdcdTA0MzBcdTA0M2RfXHUwNDliXHUwNDMwXHUwNDQwXHUwNDMwXHUwNDQ4XHUwNDMwX1x1MDQzNlx1''@;'; put 'put ''MDQzNVx1MDQzYlx1MDQ0Mlx1MDQzZVx1MDQ5Ylx1MDQ0MVx1MDQzMFx1MDQzZCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNDliXHUwNDMwXHUwNGEzX1x1MDQzMFx1MDQ5Ylx1MDQzZl9cdTA0M2RcdTA0MzBcdTA0NDNfXHUwNDQxXHUwNGQ5XHUwNDQzX1x1MDQzY1x1MDQzMFx1MDQz''@;'; put 'put ''Y19cdTA0M2NcdTA0MzBcdTA0NDNfXHUwNDQ4XHUwNDU2XHUwNDNiX1x1MDQ0Mlx1MDQzMFx1MDQzY19cdTA0OWJcdTA0NGJcdTA0NDBfXHUwNDliXHUwNDMwXHUwNDM3X1x1MDQ5Ylx1MDQzMFx1MDQ0MF9cdTA0MzZcdTA0MzVcdTA0M2IiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDQzNlx1''@;'; put 'put ''MDQzNVx1MDQzYVx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQzMVx1MDQ1Nl9cdTA0MzRcdTA0YWZcdTA0MzlcdTA0NDFcdTA0MzVcdTA0M2RcdTA0MzFcdTA0NTZfXHUwNDQxXHUwNDM1XHUwNDM5XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDMxXHUwNDU2X1x1MDQ0MVx1MDRkOVx1MDQ0MFx1MDQ0MVx1''@;'; put 'put ''MDQzNVx1MDQzZFx1MDQzMVx1MDQ1Nl9cdTA0MzFcdTA0MzVcdTA0MzlcdTA0NDFcdTA0MzVcdTA0M2RcdTA0MzFcdTA0NTZfXHUwNDM2XHUwNGIxXHUwNDNjXHUwNDMwX1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQzMVx1MDQ1NiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA0MzZcdTA0''@;'; put 'put ''MzVcdTA0M2FfXHUwNDM0XHUwNGFmXHUwNDM5X1x1MDQ0MVx1MDQzNVx1MDQzOV9cdTA0NDFcdTA0ZDlcdTA0NDBfXHUwNDMxXHUwNDM1XHUwNDM5X1x1MDQzNlx1MDRiMVx1MDQzY19cdTA0NDFcdTA0MzVcdTA0M2QiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MDQzNlx1MDQzYV9cdTA0''@;'; put 'put ''MzRcdTA0MzlfXHUwNDQxXHUwNDM5X1x1MDQ0MVx1MDQ0MF9cdTA0MzFcdTA0MzlfXHUwNDM2XHUwNDNjX1x1MDQ0MVx1MDQzZCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoi''@;'; put 'put ''RCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MTFcdTA0YWZcdTA0MzNcdTA0NTZcdTA0M2QgXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyXSBMVCIsbmV4dERheToiW1x1MDQxNVx1MDQ0MFx1MDQ0''@;'; put 'put ''Mlx1MDQzNVx1MDRhMyBcdTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBcdTA0NDJdIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyXSBMVCIsbGFzdERheToiW1x1MDQxYVx1MDQzNVx1MDQ0OFx1MDQzNSBcdTA0NDFcdTA0MzBcdTA0OTNcdTA0MzBcdTA0''@;'; put 'put ''NDJdIExUIixsYXN0V2VlazoiW1x1MDRlOFx1MDQ0Mlx1MDQzYVx1MDQzNVx1MDQzZCBcdTA0MzBcdTA0M2ZcdTA0NDJcdTA0MzBcdTA0M2RcdTA0NGJcdTA0YTNdIGRkZGQgW1x1MDQ0MVx1MDQzMFx1MDQ5M1x1MDQzMFx1MDQ0Ml0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntm''@;'; put 'put ''dXR1cmU6IiVzIFx1MDQ1Nlx1MDQ0OFx1MDQ1Nlx1MDQzZFx1MDQzNFx1MDQzNSIscGFzdDoiJXMgXHUwNDMxXHUwNGIxXHUwNDQwXHUwNDRiXHUwNDNkIixzOiJcdTA0MzFcdTA0NTZcdTA0NDBcdTA0M2RcdTA0MzVcdTA0NDhcdTA0MzUgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNk''@;'; put 'put ''XHUwNDM0IixzczoiJWQgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixtOiJcdTA0MzFcdTA0NTZcdTA0NDAgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyIixtbToiJWQgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyIixoOiJcdTA0MzFcdTA0NTZcdTA0''@;'; put 'put ''NDAgXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyIixoaDoiJWQgXHUwNDQxXHUwNDMwXHUwNDkzXHUwNDMwXHUwNDQyIixkOiJcdTA0MzFcdTA0NTZcdTA0NDAgXHUwNDNhXHUwNGFmXHUwNDNkIixkZDoiJWQgXHUwNDNhXHUwNGFmXHUwNDNkIixNOiJcdTA0MzFcdTA0NTZcdTA0NDAg''@;'; put 'put ''XHUwNDMwXHUwNDM5IixNTToiJWQgXHUwNDMwXHUwNDM5Iix5OiJcdTA0MzFcdTA0NTZcdTA0NDAgXHUwNDM2XHUwNDRiXHUwNDNiIix5eToiJWQgXHUwNDM2XHUwNDRiXHUwNDNiIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDQ4XHUwNDU2fFx1MDQ0OFx1MDQ0Yikv''@;'; put 'put ''LG9yZGluYWw6ZnVuY3Rpb24oQil7cmV0dXJuIEIrKHlbQl18fHlbQiUxMF18fHlbQj49MTAwPzEwMDpudWxsXSl9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShfKDk3NTg2KSl9LDY4ODA3OmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT17MToiXHUxN2Ux''@;'; put 'put ''IiwyOiJcdTE3ZTIiLDM6Ilx1MTdlMyIsNDoiXHUxN2U0Iiw1OiJcdTE3ZTUiLDY6Ilx1MTdlNiIsNzoiXHUxN2U3Iiw4OiJcdTE3ZTgiLDk6Ilx1MTdlOSIsMDoiXHUxN2UwIn0sZz17Ilx1MTdlMSI6IjEiLCJcdTE3ZTIiOiIyIiwiXHUxN2UzIjoiMyIsIlx1MTdlNCI6IjQiLCJcdTE3ZTUi''@;'; put 'put ''OiI1IiwiXHUxN2U2IjoiNiIsIlx1MTdlNyI6IjciLCJcdTE3ZTgiOiI4IiwiXHUxN2U5IjoiOSIsIlx1MTdlMCI6IjAifTtJLmRlZmluZUxvY2FsZSgia20iLHttb250aHM6Ilx1MTc5OFx1MTc4MFx1MTc5YVx1MTdiNl9cdTE3ODBcdTE3YmJcdTE3OThcdTE3ZDJcdTE3OTdcdTE3YzhfXHUx''@;'; put 'put ''Nzk4XHUxN2I4XHUxNzkzXHUxN2I2X1x1MTc5OFx1MTdjMVx1MTc5Zlx1MTdiNl9cdTE3YTdcdTE3OWZcdTE3OTdcdTE3YjZfXHUxNzk4XHUxN2I3XHUxNzkwXHUxN2JiXHUxNzkzXHUxN2I2X1x1MTc4MFx1MTc4MFx1MTdkMlx1MTc4MFx1MTc4YVx1MTdiNl9cdTE3OWZcdTE3YjhcdTE3YTBc''@;'; put 'put ''dTE3YjZfXHUxNzgwXHUxNzg5XHUxN2QyXHUxNzg5XHUxN2I2X1x1MTc4Zlx1MTdiYlx1MTc5Ylx1MTdiNl9cdTE3OWNcdTE3YjdcdTE3ODVcdTE3ZDJcdTE3ODZcdTE3YjdcdTE3ODBcdTE3YjZfXHUxNzkyXHUxN2QyXHUxNzkzXHUxN2JjIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTE3''@;'; put 'put ''OThcdTE3ODBcdTE3OWFcdTE3YjZfXHUxNzgwXHUxN2JiXHUxNzk4XHUxN2QyXHUxNzk3XHUxN2M4X1x1MTc5OFx1MTdiOFx1MTc5M1x1MTdiNl9cdTE3OThcdTE3YzFcdTE3OWZcdTE3YjZfXHUxN2E3XHUxNzlmXHUxNzk3XHUxN2I2X1x1MTc5OFx1MTdiN1x1MTc5MFx1MTdiYlx1MTc5M1x1''@;'; put 'put ''MTdiNl9cdTE3ODBcdTE3ODBcdTE3ZDJcdTE3ODBcdTE3OGFcdTE3YjZfXHUxNzlmXHUxN2I4XHUxN2EwXHUxN2I2X1x1MTc4MFx1MTc4OVx1MTdkMlx1MTc4OVx1MTdiNl9cdTE3OGZcdTE3YmJcdTE3OWJcdTE3YjZfXHUxNzljXHUxN2I3XHUxNzg1XHUxN2QyXHUxNzg2XHUxN2I3XHUxNzgw''@;'; put 'put ''XHUxN2I2X1x1MTc5Mlx1MTdkMlx1MTc5M1x1MTdiYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUxN2EyXHUxN2I2XHUxNzkxXHUxN2I3XHUxNzhmXHUxN2QyXHUxNzk5X1x1MTc4NVx1MTdkMFx1MTc5M1x1MTdkMlx1MTc5MV9cdTE3YTJcdTE3ODRcdTE3ZDJcdTE3ODJcdTE3YjZcdTE3OWFf''@;'; put 'put ''XHUxNzk2XHUxN2JiXHUxNzkyX1x1MTc5Nlx1MTdkMlx1MTc5YVx1MTdhMFx1MTc5Zlx1MTdkMlx1MTc5NFx1MTc4Zlx1MTdiN1x1MTdjZF9cdTE3OWZcdTE3YmJcdTE3ODBcdTE3ZDJcdTE3OWFfXHUxNzlmXHUxN2M1XHUxNzlhXHUxN2NkIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1''@;'; put 'put ''MTdhMlx1MTdiNl9cdTE3ODVfXHUxN2EyX1x1MTc5Nl9cdTE3OTZcdTE3ZDJcdTE3OWFfXHUxNzlmXHUxN2JiX1x1MTc5ZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUxN2EyXHUxN2I2X1x1MTc4NV9cdTE3YTJfXHUxNzk2X1x1MTc5Nlx1MTdkMlx1MTc5YV9cdTE3OWZcdTE3YmJfXHUx''@;'; put 'put ''NzlmIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1t''@;'; put 'put ''In0sbWVyaWRpZW1QYXJzZTovXHUxNzk2XHUxN2QyXHUxNzlhXHUxN2I5XHUxNzgwfFx1MTc5Ylx1MTdkMlx1MTc4NFx1MTdiNlx1MTc4NS8saXNQTTpmdW5jdGlvbih3KXtyZXR1cm4iXHUxNzliXHUxN2QyXHUxNzg0XHUxN2I2XHUxNzg1Ij09PXd9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxG''@;'; put 'put ''KXtyZXR1cm4gdzwxMj8iXHUxNzk2XHUxN2QyXHUxNzlhXHUxN2I5XHUxNzgwIjoiXHUxNzliXHUxN2QyXHUxNzg0XHUxN2I2XHUxNzg1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTE3OTBcdTE3ZDJcdTE3ODRcdTE3YzNcdTE3OTNcdTE3YzFcdTE3YzcgXHUxNzk4XHUxN2M5XHUxN2M0XHUx''@;'; put 'put ''Nzg0XSBMVCIsbmV4dERheToiW1x1MTc5Zlx1MTdkMlx1MTdhMlx1MTdjMlx1MTc4MCBcdTE3OThcdTE3YzlcdTE3YzRcdTE3ODRdIExUIixuZXh0V2VlazoiZGRkZCBbXHUxNzk4XHUxN2M5XHUxN2M0XHUxNzg0XSBMVCIsbGFzdERheToiW1x1MTc5OFx1MTdkMlx1MTc5Zlx1MTdiN1x1MTc5''@;'; put 'put ''Ylx1MTc5OFx1MTdiN1x1MTc4OSBcdTE3OThcdTE3YzlcdTE3YzRcdTE3ODRdIExUIixsYXN0V2VlazoiZGRkZCBbXHUxNzlmXHUxNzk0XHUxN2QyXHUxNzhmXHUxN2I2XHUxN2EwXHUxN2NkXHUxNzk4XHUxN2JiXHUxNzkzXSBbXHUxNzk4XHUxN2M5XHUxN2M0XHUxNzg0XSBMVCIsc2FtZUVs''@;'; put 'put ''c2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXNcdTE3OTFcdTE3YzBcdTE3OGYiLHBhc3Q6IiVzXHUxNzk4XHUxN2JiXHUxNzkzIixzOiJcdTE3OTRcdTE3YzlcdTE3YmJcdTE3OTNcdTE3ZDJcdTE3OThcdTE3YjZcdTE3OTNcdTE3OWNcdTE3YjdcdTE3OTNcdTE3YjZcdTE3OTFcdTE3''@;'; put 'put ''YjgiLHNzOiIlZCBcdTE3OWNcdTE3YjdcdTE3OTNcdTE3YjZcdTE3OTFcdTE3YjgiLG06Ilx1MTc5OFx1MTdiZFx1MTc5OVx1MTc5M1x1MTdiNlx1MTc5MVx1MTdiOCIsbW06IiVkIFx1MTc5M1x1MTdiNlx1MTc5MVx1MTdiOCIsaDoiXHUxNzk4XHUxN2JkXHUxNzk5XHUxNzk4XHUxN2M5XHUx''@;'; put 'put ''N2M0XHUxNzg0IixoaDoiJWQgXHUxNzk4XHUxN2M5XHUxN2M0XHUxNzg0IixkOiJcdTE3OThcdTE3YmRcdTE3OTlcdTE3OTBcdTE3ZDJcdTE3ODRcdTE3YzMiLGRkOiIlZCBcdTE3OTBcdTE3ZDJcdTE3ODRcdTE3YzMiLE06Ilx1MTc5OFx1MTdiZFx1MTc5OVx1MTc4MVx1MTdjMiIsTU06IiVk''@;'; put 'put ''IFx1MTc4MVx1MTdjMiIseToiXHUxNzk4XHUxN2JkXHUxNzk5XHUxNzg2XHUxN2QyXHUxNzkzXHUxN2I2XHUxN2M2Iix5eToiJWQgXHUxNzg2XHUxN2QyXHUxNzkzXHUxN2I2XHUxN2M2In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXHUxNzkxXHUxN2I4XGR7MSwyfS8sb3JkaW5hbDoiXHUx''@;'; put 'put ''NzkxXHUxN2I4JWQiLHByZXBhcnNlOmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1tcdTE3ZTFcdTE3ZTJcdTE3ZTNcdTE3ZTRcdTE3ZTVcdTE3ZTZcdTE3ZTdcdTE3ZThcdTE3ZTlcdTE3ZTBdL2csZnVuY3Rpb24oUCl7cmV0dXJuIGdbUF19KX0scG9zdGZvcm1hdDpmdW5jdGlvbih3''@;'; put 'put ''KXtyZXR1cm4gdy5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKFApe3JldHVybiB5W1BdfSl9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShfKDk3NTg2KSl9LDY1MDgyOmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT17MToiXHUwY2U3IiwyOiJcdTBjZTgiLDM6''@;'; put 'put ''Ilx1MGNlOSIsNDoiXHUwY2VhIiw1OiJcdTBjZWIiLDY6Ilx1MGNlYyIsNzoiXHUwY2VkIiw4OiJcdTBjZWUiLDk6Ilx1MGNlZiIsMDoiXHUwY2U2In0sZz17Ilx1MGNlNyI6IjEiLCJcdTBjZTgiOiIyIiwiXHUwY2U5IjoiMyIsIlx1MGNlYSI6IjQiLCJcdTBjZWIiOiI1IiwiXHUwY2VjIjoi''@;'; put 'put ''NiIsIlx1MGNlZCI6IjciLCJcdTBjZWUiOiI4IiwiXHUwY2VmIjoiOSIsIlx1MGNlNiI6IjAifTtJLmRlZmluZUxvY2FsZSgia24iLHttb250aHM6Ilx1MGM5Y1x1MGNhOFx1MGNiNVx1MGNiMFx1MGNiZl9cdTBjYWJcdTBjYzZcdTBjYWNcdTBjY2RcdTBjYjBcdTBjYjVcdTBjYjBcdTBjYmZf''@;'; put 'put ''XHUwY2FlXHUwY2JlXHUwY2IwXHUwY2NkXHUwYzlhXHUwY2NkX1x1MGM4Zlx1MGNhYVx1MGNjZFx1MGNiMFx1MGNiZlx1MGNiMlx1MGNjZF9cdTBjYWVcdTBjYzZcdTBjZDVfXHUwYzljXHUwY2MyXHUwY2E4XHUwY2NkX1x1MGM5Y1x1MGNjMVx1MGNiMlx1MGNjNlx1MGNkNl9cdTBjODZcdTBj''@;'; put 'put ''OTdcdTBjYjhcdTBjY2RcdTBjOWZcdTBjY2RfXHUwY2I4XHUwY2M2XHUwY2FhXHUwY2NkXHUwYzlmXHUwY2M2XHUwYzgyXHUwY2FjXHUwY2IwXHUwY2NkX1x1MGM4NVx1MGM5NVx1MGNjZFx1MGM5Zlx1MGNjNlx1MGNjMlx1MGNkNVx1MGNhY1x1MGNiMFx1MGNjZF9cdTBjYThcdTBjYjVcdTBj''@;'; put 'put ''YzZcdTBjODJcdTBjYWNcdTBjYjBcdTBjY2RfXHUwY2ExXHUwY2JmXHUwY2I4XHUwY2M2XHUwYzgyXHUwY2FjXHUwY2IwXHUwY2NkIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBjOWNcdTBjYThfXHUwY2FiXHUwY2M2XHUwY2FjXHUwY2NkXHUwY2IwX1x1MGNhZVx1MGNiZVx1MGNiMFx1''@;'; put 'put ''MGNjZFx1MGM5YVx1MGNjZF9cdTBjOGZcdTBjYWFcdTBjY2RcdTBjYjBcdTBjYmZcdTBjYjJcdTBjY2RfXHUwY2FlXHUwY2M2XHUwY2Q1X1x1MGM5Y1x1MGNjMlx1MGNhOFx1MGNjZF9cdTBjOWNcdTBjYzFcdTBjYjJcdTBjYzZcdTBjZDZfXHUwYzg2XHUwYzk3XHUwY2I4XHUwY2NkXHUwYzlm''@;'; put 'put ''XHUwY2NkX1x1MGNiOFx1MGNjNlx1MGNhYVx1MGNjZFx1MGM5Zlx1MGNjNlx1MGM4Ml9cdTBjODVcdTBjOTVcdTBjY2RcdTBjOWZcdTBjYzZcdTBjYzJcdTBjZDVfXHUwY2E4XHUwY2I1XHUwY2M2XHUwYzgyX1x1MGNhMVx1MGNiZlx1MGNiOFx1MGNjNlx1MGM4MiIuc3BsaXQoIl8iKSxtb250''@;'; put 'put ''aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTBjYWRcdTBjYmVcdTBjYThcdTBjYzFcdTBjYjVcdTBjYmVcdTBjYjBfXHUwY2I4XHUwY2M2XHUwY2MyXHUwY2Q1XHUwY2FlXHUwY2I1XHUwY2JlXHUwY2IwX1x1MGNhZVx1MGM4Mlx1MGM5N1x1MGNiM1x1MGNiNVx1MGNiZVx1MGNiMF9cdTBj''@;'; put 'put ''YWNcdTBjYzFcdTBjYTdcdTBjYjVcdTBjYmVcdTBjYjBfXHUwYzk3XHUwY2MxXHUwY2IwXHUwY2MxXHUwY2I1XHUwY2JlXHUwY2IwX1x1MGNiNlx1MGNjMVx1MGM5NVx1MGNjZFx1MGNiMFx1MGNiNVx1MGNiZVx1MGNiMF9cdTBjYjZcdTBjYThcdTBjYmZcdTBjYjVcdTBjYmVcdTBjYjAiLnNw''@;'; put 'put ''bGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwY2FkXHUwY2JlXHUwY2E4XHUwY2MxX1x1MGNiOFx1MGNjNlx1MGNjMlx1MGNkNVx1MGNhZV9cdTBjYWVcdTBjODJcdTBjOTdcdTBjYjNfXHUwY2FjXHUwY2MxXHUwY2E3X1x1MGM5N1x1MGNjMVx1MGNiMFx1MGNjMV9cdTBjYjZcdTBjYzFcdTBj''@;'; put 'put ''OTVcdTBjY2RcdTBjYjBfXHUwY2I2XHUwY2E4XHUwY2JmIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBjYWRcdTBjYmVfXHUwY2I4XHUwY2M2XHUwY2MyXHUwY2Q1X1x1MGNhZVx1MGM4Ml9cdTBjYWNcdTBjYzFfXHUwYzk3XHUwY2MxX1x1MGNiNlx1MGNjMV9cdTBjYjYiLnNwbGl0KCJf''@;'; put 'put ''IiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0iLExUUzoiQSBoOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwYzg3''@;'; put 'put ''XHUwYzgyXHUwY2E2XHUwY2MxXSBMVCIsbmV4dERheToiW1x1MGNhOFx1MGNiZVx1MGNiM1x1MGNjNl0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MGNhOFx1MGNiZlx1MGNhOFx1MGNjZFx1MGNhOFx1MGNjNl0gTFQiLGxhc3RXZWVrOiJbXHUwYzk1XHUwY2M2XHUwY2My''@;'; put 'put ''XHUwY2E4XHUwY2M2XHUwY2FmXSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwY2E4XHUwYzgyXHUwY2E0XHUwY2IwIixwYXN0OiIlcyBcdTBjYjlcdTBjYmZcdTBjODJcdTBjYTZcdTBjYzYiLHM6Ilx1MGM5NVx1MGNjNlx1MGNiMlx1MGNiNVx1''@;'; put 'put ''MGNjMSBcdTBjOTVcdTBjY2RcdTBjYjdcdTBjYTNcdTBjOTdcdTBjYjNcdTBjYzEiLHNzOiIlZCBcdTBjYjhcdTBjYzZcdTBjOTVcdTBjYzZcdTBjODJcdTBjYTFcdTBjYzFcdTBjOTdcdTBjYjNcdTBjYzEiLG06Ilx1MGM5Mlx1MGM4Mlx1MGNhNlx1MGNjMSBcdTBjYThcdTBjYmZcdTBjYWVc''@;'; put 'put ''dTBjYmZcdTBjYjciLG1tOiIlZCBcdTBjYThcdTBjYmZcdTBjYWVcdTBjYmZcdTBjYjciLGg6Ilx1MGM5Mlx1MGM4Mlx1MGNhNlx1MGNjMSBcdTBjOTdcdTBjODJcdTBjOWZcdTBjYzYiLGhoOiIlZCBcdTBjOTdcdTBjODJcdTBjOWZcdTBjYzYiLGQ6Ilx1MGM5Mlx1MGM4Mlx1MGNhNlx1MGNj''@;'; put 'put ''MSBcdTBjYTZcdTBjYmZcdTBjYTgiLGRkOiIlZCBcdTBjYTZcdTBjYmZcdTBjYTgiLE06Ilx1MGM5Mlx1MGM4Mlx1MGNhNlx1MGNjMSBcdTBjYTRcdTBjYmZcdTBjODJcdTBjOTdcdTBjYjNcdTBjYzEiLE1NOiIlZCBcdTBjYTRcdTBjYmZcdTBjODJcdTBjOTdcdTBjYjNcdTBjYzEiLHk6Ilx1''@;'; put 'put ''MGM5Mlx1MGM4Mlx1MGNhNlx1MGNjMSBcdTBjYjVcdTBjYjBcdTBjY2RcdTBjYjciLHl5OiIlZCBcdTBjYjVcdTBjYjBcdTBjY2RcdTBjYjcifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9bXHUwY2U3XHUwY2U4XHUwY2U5XHUwY2VhXHUwY2ViXHUwY2VjXHUwY2Vk''@;'; put 'put ''XHUwY2VlXHUwY2VmXHUwY2U2XS9nLGZ1bmN0aW9uKFApe3JldHVybiBnW1BdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihQKXtyZXR1cm4geVtQXX0pfSxtZXJpZGllbVBhcnNlOi9cdTBjYjBcdTBjYmVcdTBjYTRcdTBjY2RcdTBj''@;'; put 'put ''YjBcdTBjYmZ8XHUwY2FjXHUwY2M2XHUwY2IzXHUwY2JmXHUwYzk3XHUwY2NkXHUwYzk3XHUwY2M2fFx1MGNhZVx1MGNhN1x1MGNjZFx1MGNhZlx1MGNiZVx1MGNiOVx1MGNjZFx1MGNhOHxcdTBjYjhcdTBjODJcdTBjOWNcdTBjYzYvLG1lcmlkaWVtSG91cjpmdW5jdGlvbih3LFApe3JldHVy''@;'; put 'put ''biAxMj09PXcmJih3PTApLCJcdTBjYjBcdTBjYmVcdTBjYTRcdTBjY2RcdTBjYjBcdTBjYmYiPT09UD93PDQ/dzp3KzEyOiJcdTBjYWNcdTBjYzZcdTBjYjNcdTBjYmZcdTBjOTdcdTBjY2RcdTBjOTdcdTBjYzYiPT09UD93OiJcdTBjYWVcdTBjYTdcdTBjY2RcdTBjYWZcdTBjYmVcdTBjYjlc''@;'; put 'put ''dTBjY2RcdTBjYTgiPT09UD93Pj0xMD93OncrMTI6Ilx1MGNiOFx1MGM4Mlx1MGM5Y1x1MGNjNiI9PT1QP3crMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbih3LFAsRil7cmV0dXJuIHc8ND8iXHUwY2IwXHUwY2JlXHUwY2E0XHUwY2NkXHUwY2IwXHUwY2JmIjp3PDEwPyJcdTBjYWNcdTBj''@;'; put 'put ''YzZcdTBjYjNcdTBjYmZcdTBjOTdcdTBjY2RcdTBjOTdcdTBjYzYiOnc8MTc/Ilx1MGNhZVx1MGNhN1x1MGNjZFx1MGNhZlx1MGNiZVx1MGNiOVx1MGNjZFx1MGNhOCI6dzwyMD8iXHUwY2I4XHUwYzgyXHUwYzljXHUwY2M2IjoiXHUwY2IwXHUwY2JlXHUwY2E0XHUwY2NkXHUwY2IwXHUwY2Jm''@;'; put 'put ''In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShcdTBjYThcdTBjYzZcdTBjZDUpLyxvcmRpbmFsOmZ1bmN0aW9uKHcpe3JldHVybiB3KyJcdTBjYThcdTBjYzZcdTBjZDUifSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oXyg5NzU4NikpfSwyMDEzNzpmdW5jdGlvbih1ZSxxLF8peyFm''@;'; put 'put ''dW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImtvIix7bW9udGhzOiIxXHVjNmQ0XzJcdWM2ZDRfM1x1YzZkNF80XHVjNmQ0XzVcdWM2ZDRfNlx1YzZkNF83XHVjNmQ0XzhcdWM2ZDRfOVx1YzZkNF8xMFx1YzZkNF8xMVx1YzZkNF8xMlx1YzZkNCIuc3BsaXQoIl8iKSxt''@;'; put 'put ''b250aHNTaG9ydDoiMVx1YzZkNF8yXHVjNmQ0XzNcdWM2ZDRfNFx1YzZkNF81XHVjNmQ0XzZcdWM2ZDRfN1x1YzZkNF84XHVjNmQ0XzlcdWM2ZDRfMTBcdWM2ZDRfMTFcdWM2ZDRfMTJcdWM2ZDQiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1Yzc3Y1x1YzY5NFx1Yzc3Y19cdWM2ZDRcdWM2OTRc''@;'; put 'put ''dWM3N2NfXHVkNjU0XHVjNjk0XHVjNzdjX1x1YzIxOFx1YzY5NFx1Yzc3Y19cdWJhYTlcdWM2OTRcdWM3N2NfXHVhZTA4XHVjNjk0XHVjNzdjX1x1ZDFhMFx1YzY5NFx1Yzc3YyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdWM3N2NfXHVjNmQ0X1x1ZDY1NF9cdWMyMThfXHViYWE5X1x1''@;'; put 'put ''YWUwOF9cdWQxYTAiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1Yzc3Y19cdWM2ZDRfXHVkNjU0X1x1YzIxOF9cdWJhYTlfXHVhZTA4X1x1ZDFhMCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkEgaDptbSIsTFRTOiJBIGg6bW06c3MiLEw6IllZWVkuTU0uREQuIixMTDoiWVlZ''@;'; put 'put ''WVx1YjE0NCBNTU1NIERcdWM3N2MiLExMTDoiWVlZWVx1YjE0NCBNTU1NIERcdWM3N2MgQSBoOm1tIixMTExMOiJZWVlZXHViMTQ0IE1NTU0gRFx1Yzc3YyBkZGRkIEEgaDptbSIsbDoiWVlZWS5NTS5ERC4iLGxsOiJZWVlZXHViMTQ0IE1NTU0gRFx1Yzc3YyIsbGxsOiJZWVlZXHViMTQ0IE1N''@;'; put 'put ''TU0gRFx1Yzc3YyBBIGg6bW0iLGxsbGw6IllZWVlcdWIxNDQgTU1NTSBEXHVjNzdjIGRkZGQgQSBoOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Ilx1YzYyNFx1YjI5OCBMVCIsbmV4dERheToiXHViMGI0XHVjNzdjIExUIixuZXh0V2VlazoiZGRkZCBMVCIsbGFzdERheToiXHVjNWI0XHVjODFj''@;'; put 'put ''IExUIixsYXN0V2VlazoiXHVjOWMwXHViMDljXHVjOGZjIGRkZGQgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1ZDZjNCIscGFzdDoiJXMgXHVjODA0IixzOiJcdWJhODcgXHVjZDA4IixzczoiJWRcdWNkMDgiLG06IjFcdWJkODQiLG1tOiIlZFx1YmQ4NCIs''@;'; put 'put ''aDoiXHVkNTVjIFx1YzJkY1x1YWMwNCIsaGg6IiVkXHVjMmRjXHVhYzA0IixkOiJcdWQ1NThcdWI4ZTgiLGRkOiIlZFx1Yzc3YyIsTToiXHVkNTVjIFx1YjJlYyIsTU06IiVkXHViMmVjIix5OiJcdWM3N2MgXHViMTQ0Iix5eToiJWRcdWIxNDQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9c''@;'; put 'put ''ZHsxLDJ9KFx1Yzc3Y3xcdWM2ZDR8XHVjOGZjKS8sb3JkaW5hbDpmdW5jdGlvbihnLEIpe3N3aXRjaChCKXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEREQiOnJldHVybiBnKyJcdWM3N2MiO2Nhc2UiTSI6cmV0dXJuIGcrIlx1YzZkNCI7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBnKyJcdWM4ZmMi''@;'; put 'put ''O2RlZmF1bHQ6cmV0dXJuIGd9fSxtZXJpZGllbVBhcnNlOi9cdWM2MjRcdWM4MDR8XHVjNjI0XHVkNmM0Lyxpc1BNOmZ1bmN0aW9uKGcpe3JldHVybiJcdWM2MjRcdWQ2YzQiPT09Z30sbWVyaWRpZW06ZnVuY3Rpb24oZyxCLHcpe3JldHVybiBnPDEyPyJcdWM2MjRcdWM4MDQiOiJcdWM2MjRc''@;'; put 'put ''dWQ2YzQifX0pfShfKDk3NTg2KSl9LDYzNzQ0OmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB5KHcsUCxGLE8pe3ZhciB6PXtzOlsiXHhlN2VuZCBzYW5ceGVleWUiLCJceGU3ZW5kIHNhblx4ZWV5ZXlhbiJdLHNzOlt3KyIgc2FuXHhlZXllIix3''@;'; put 'put ''KyIgc2FuXHhlZXlleWFuIl0sbTpbImRlcVx4ZWVxZXllayIsImRlcVx4ZWVxZXlla1x4ZWEiXSxtbTpbdysiIGRlcVx4ZWVxZSIsdysiIGRlcVx4ZWVxZXlhbiJdLGg6WyJzYWV0ZWsiLCJzYWV0ZWtceGVhIl0saGg6W3crIiBzYWV0Iix3KyIgc2FldGFuIl0sZDpbInJvamVrIiwicm9qZWtc''@;'; put 'put ''eGVhIl0sZGQ6W3crIiByb2oiLHcrIiByb2phbiJdLHc6WyJoZWZ0ZXllayIsImhlZnRleWVrXHhlYSJdLHd3Olt3KyIgaGVmdGUiLHcrIiBoZWZ0ZXlhbiJdLE06WyJtZWhlayIsIm1laGVrXHhlYSJdLE1NOlt3KyIgbWVoIix3KyIgbWVoYW4iXSx5Olsic2FsZWsiLCJzYWxla1x4ZWEiXSx5''@;'; put 'put ''eTpbdysiIHNhbCIsdysiIHNhbGFuIl19O3JldHVybiBQP3pbRl1bMF06eltGXVsxXX1JLmRlZmluZUxvY2FsZSgia3Uta21yIix7bW9udGhzOiJSXHhlYWJlbmRhbl9TaWJhdF9BZGFyX05ceGVlc2FuX0d1bGFuX0hlelx4ZWVyYW5fVFx4ZWVybWVoX1RlYmF4X1x4Y2Vsb25fQ290bWVoX01p''@;'; put 'put ''amRhcl9CZXJmYW5iYXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IlJceGVhYl9TaWJfQWRhX05ceGVlc19HdWxfSGV6X1RceGVlcl9UZWJfXHhjZWxvX0NvdF9NaWpfQmVyIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Illla1x1MDE1ZmVtX0R1XHUwMTVmZW1f''@;'; put 'put ''U1x4ZWFcdTAxNWZlbV9ceGM3YXJcdTAxNWZlbV9QXHhlYW5jXHUwMTVmZW1fXHhjZW5fXHUwMTVlZW1ceGVlIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Illla19EdV9TXHhlYV9ceGM3YXJfUFx4ZWFuX1x4Y2VuX1x1MDE1ZWVtIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJZZV9EdV9T''@;'; put 'put ''XHhlYV9ceGM3YV9QXHhlYV9ceGNlbl9cdTAxNWVlIi5zcGxpdCgiXyIpLG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxGKXtyZXR1cm4gdzwxMj9GPyJibiI6IkJOIjpGPyJwbiI6IlBOIn0sbWVyaWRpZW1QYXJzZTovYm58Qk58cG58UE4vLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoi''@;'; put 'put ''SEg6bW06c3MiLEw6IkRELk1NLllZWVkiLExMOiJEbyBNTU1NW2FdIFlZWVlbYW5dIixMTEw6IkRvIE1NTU1bYV0gWVlZWVthbl0gSEg6bW0iLExMTEw6ImRkZGQsIERvIE1NTU1bYV0gWVlZWVthbl0gSEg6bW0iLGxsOiJEbyBNTU1bLl0gWVlZWVthbl0iLGxsbDoiRG8gTU1NWy5dIFlZWVlb''@;'; put 'put ''YW5dIEhIOm1tIixsbGxsOiJkZGRbLl0sIERvIE1NTVsuXSBZWVlZW2FuXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHhjZXJvIGRpIHNhZXRdIExUIFtkZV0iLG5leHREYXk6IltTaWJceGVhIGRpIHNhZXRdIExUIFtkZV0iLG5leHRXZWVrOiJkZGRkIFtkaSBzYWV0XSBMVCBbZGVd''@;'; put 'put ''IixsYXN0RGF5OiJbRHVoIGRpIHNhZXRdIExUIFtkZV0iLGxhc3RXZWVrOiJkZGRkW2EgYm9yXHhlZSBkaSBzYWV0XSBMVCBbZGVdIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkaSAlcyBkZSIscGFzdDoiYmVyXHhlZSAlcyIsczp5LHNzOnksbTp5LG1tOnksaDp5LGho''@;'; put 'put ''OnksZDp5LGRkOnksdzp5LHd3OnksTTp5LE1NOnkseSx5eTp5fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9KD86eVx4ZWF8XHhlYXxcLikvLG9yZGluYWw6ZnVuY3Rpb24odyxQKXt2YXIgRj1QLnRvTG93ZXJDYXNlKCk7cmV0dXJuIEYuaW5jbHVkZXMoInciKXx8Ri5pbmNsdWRl''@;'; put 'put ''cygibSIpP3crIi4iOncrZnVuY3Rpb24gZyh3KXt2YXIgUD0odz0iIit3KS5zdWJzdHJpbmcody5sZW5ndGgtMSksRj13Lmxlbmd0aD4xP3cuc3Vic3RyaW5nKHcubGVuZ3RoLTIpOiIiO3JldHVybiAxMj09Rnx8MTM9PUZ8fCIyIiE9UCYmIjMiIT1QJiYiNTAiIT1GJiYiNzAiIT1QJiYiODAi''@;'; put 'put ''IT1QPyJceGVhIjoieVx4ZWEifSh3KX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KF8oOTc1ODYpKX0sNzAxMTE6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciB5PXsxOiJcdTA2NjEiLDI6Ilx1MDY2MiIsMzoiXHUwNjYzIiw0OiJcdTA2NjQiLDU6Ilx1MDY2''@;'; put 'put ''NSIsNjoiXHUwNjY2Iiw3OiJcdTA2NjciLDg6Ilx1MDY2OCIsOToiXHUwNjY5IiwwOiJcdTA2NjAifSxnPXsiXHUwNjYxIjoiMSIsIlx1MDY2MiI6IjIiLCJcdTA2NjMiOiIzIiwiXHUwNjY0IjoiNCIsIlx1MDY2NSI6IjUiLCJcdTA2NjYiOiI2IiwiXHUwNjY3IjoiNyIsIlx1MDY2OCI6Ijgi''@;'; put 'put ''LCJcdTA2NjkiOiI5IiwiXHUwNjYwIjoiMCJ9LEI9WyJcdTA2YTlcdTA2MjdcdTA2NDZcdTA2NDhcdTA2NDZcdTA2Y2MgXHUwNjJmXHUwNjQ4XHUwNjQ4XHUwNmQ1XHUwNjQ1IiwiXHUwNjM0XHUwNjQ4XHUwNjI4XHUwNjI3XHUwNjJhIiwiXHUwNjI2XHUwNjI3XHUwNjMyXHUwNjI3XHUwNjMx''@;'; put 'put ''IiwiXHUwNjQ2XHUwNmNjXHUwNjMzXHUwNjI3XHUwNjQ2IiwiXHUwNjI2XHUwNjI3XHUwNmNjXHUwNjI3XHUwNjMxIiwiXHUwNjJkXHUwNjQ4XHUwNjMyXHUwNmQ1XHUwNmNjXHUwNjMxXHUwNjI3XHUwNjQ2IiwiXHUwNjJhXHUwNmQ1XHUwNjQ1XHUwNjQ1XHUwNjQ4XHUwNjMyIiwiXHUwNjI2''@;'; put 'put ''XHUwNjI3XHUwNjI4IiwiXHUwNjI2XHUwNmQ1XHUwNmNjXHUwNjQ0XHUwNjQ4XHUwNjQ4XHUwNjQ0IiwiXHUwNjJhXHUwNjM0XHUwNjMxXHUwNmNjXHUwNjQ2XHUwNmNjIFx1MDZjY1x1MDZkNVx1MDY0M1x1MDZkNVx1MDY0NSIsIlx1MDYyYVx1MDYzNFx1MDYzMVx1MDZjY1x1MDY0Nlx1MDZj''@;'; put 'put ''YyBcdTA2MmZcdTA2NDhcdTA2NDhcdTA2ZDVcdTA2NDUiLCJcdTA2NDNcdTA2MjdcdTA2NDZcdTA2NDhcdTA2NDZcdTA2Y2MgXHUwNmNjXHUwNmQ1XHUwNmE5XHUwNmQ1XHUwNjQ1Il07SS5kZWZpbmVMb2NhbGUoImt1Iix7bW9udGhzOkIsbW9udGhzU2hvcnQ6Qix3ZWVrZGF5czoiXHUwNmNj''@;'; put 'put ''XHUwNjQ3XHUyMDBjXHUwNjQzXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjX1x1MDYyZlx1MDY0OFx1MDY0OFx1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NVx1MDY0NVx1MDY0N1x1MjAwY19cdTA2MzNcdTA2Y2VcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVcdTA2NDVc''@;'; put 'put ''dTA2NDdcdTIwMGNfXHUwNjg2XHUwNjQ4XHUwNjI3XHUwNjMxXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjX1x1MDY3ZVx1MDZjZVx1MDY0Nlx1MDYyY1x1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NVx1MDY0NVx1MDY0N1x1MjAwY19cdTA2NDdcdTA2NDdcdTIwMGNc''@;'; put 'put ''dTA2Y2NcdTA2NDZcdTA2Y2NfXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjQ1XHUwNjQ3XHUyMDBjIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDZjY1x1MDY0N1x1MjAwY1x1MDY0M1x1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NV9cdTA2MmZcdTA2NDhcdTA2NDhcdTA2MzRcdTA2''@;'; put 'put ''NDdcdTIwMGNcdTA2NDVfXHUwNjMzXHUwNmNlXHUwNjM0XHUwNjQ3XHUyMDBjXHUwNjQ1X1x1MDY4Nlx1MDY0OFx1MDYyN1x1MDYzMVx1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NV9cdTA2N2VcdTA2Y2VcdTA2NDZcdTA2MmNcdTA2MzRcdTA2NDdcdTIwMGNcdTA2NDVfXHUwNjQ3XHUwNjQ3XHUy''@;'; put 'put ''MDBjXHUwNmNjXHUwNjQ2XHUwNmNjX1x1MDYzNFx1MDY0N1x1MjAwY1x1MDY0NVx1MDY0NVx1MDY0N1x1MjAwYyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNmNjX1x1MDYyZl9cdTA2MzNfXHUwNjg2X1x1MDY3ZV9cdTA2NDdfXHUwNjM0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VF''@;'; put 'put ''eGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjI2XHUwNmNl''@;'; put 'put ''XHUwNjQ4XHUwNjI3XHUwNjMxXHUwNjQ3XHUyMDBjfFx1MDYyOFx1MDY0N1x1MjAwY1x1MDZjY1x1MDYyN1x1MDY0Nlx1MDZjYy8saXNQTTpmdW5jdGlvbihQKXtyZXR1cm4vXHUwNjI2XHUwNmNlXHUwNjQ4XHUwNjI3XHUwNjMxXHUwNjQ3XHUyMDBjLy50ZXN0KFApfSxtZXJpZGllbTpmdW5j''@;'; put 'put ''dGlvbihQLEYsTyl7cmV0dXJuIFA8MTI/Ilx1MDYyOFx1MDY0N1x1MjAwY1x1MDZjY1x1MDYyN1x1MDY0Nlx1MDZjYyI6Ilx1MDYyNlx1MDZjZVx1MDY0OFx1MDYyN1x1MDYzMVx1MDY0N1x1MjAwYyJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNjI2XHUwNjQ3XHUyMDBjXHUwNjQ1XHUwNjMx''@;'; put 'put ''XHUwNmM2IFx1MDY0M1x1MDYyN1x1MDYyYVx1MDY5OFx1MDY0NVx1MDZjZVx1MDYzMV0gTFQiLG5leHREYXk6IltcdTA2MjhcdTA2NDdcdTIwMGNcdTA2Y2NcdTA2MjdcdTA2NDZcdTA2Y2MgXHUwNjQzXHUwNjI3XHUwNjJhXHUwNjk4XHUwNjQ1XHUwNmNlXHUwNjMxXSBMVCIsbmV4dFdlZWs6''@;'; put 'put ''ImRkZGQgW1x1MDY0M1x1MDYyN1x1MDYyYVx1MDY5OFx1MDY0NVx1MDZjZVx1MDYzMV0gTFQiLGxhc3REYXk6IltcdTA2MmZcdTA2NDhcdTA2Y2VcdTA2NDZcdTA2Y2UgXHUwNjQzXHUwNjI3XHUwNjJhXHUwNjk4XHUwNjQ1XHUwNmNlXHUwNjMxXSBMVCIsbGFzdFdlZWs6ImRkZGQgW1x1MDY0''@;'; put 'put ''M1x1MDYyN1x1MDYyYVx1MDY5OFx1MDY0NVx1MDZjZVx1MDYzMV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDY0NFx1MDY0N1x1MjAwYyAlcyIscGFzdDoiJXMiLHM6Ilx1MDY4Nlx1MDY0N1x1MjAwY1x1MDY0Nlx1MDYyZiBcdTA2ODZcdTA2MzFcdTA2NDNc''@;'; put 'put ''dTA2NDdcdTIwMGNcdTA2Y2NcdTA2NDdcdTIwMGNcdTA2NDMiLHNzOiJcdTA2ODZcdTA2MzFcdTA2NDNcdTA2NDdcdTIwMGMgJWQiLG06Ilx1MDZjY1x1MDY0N1x1MjAwY1x1MDY0MyBcdTA2MmVcdTA2NDhcdTA2NDRcdTA2NDdcdTIwMGNcdTA2NDMiLG1tOiIlZCBcdTA2MmVcdTA2NDhcdTA2''@;'; put 'put ''NDRcdTA2NDdcdTIwMGNcdTA2NDMiLGg6Ilx1MDZjY1x1MDY0N1x1MjAwY1x1MDY0MyBcdTA2NDNcdTA2MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2MzEiLGhoOiIlZCBcdTA2NDNcdTA2MjdcdTA2MmFcdTA2OThcdTA2NDVcdTA2Y2VcdTA2MzEiLGQ6Ilx1MDZjY1x1MDY0N1x1MjAw''@;'; put 'put ''Y1x1MDY0MyBcdTA2OTVcdTA2YzZcdTA2OTgiLGRkOiIlZCBcdTA2OTVcdTA2YzZcdTA2OTgiLE06Ilx1MDZjY1x1MDY0N1x1MjAwY1x1MDY0MyBcdTA2NDVcdTA2MjdcdTA2NDZcdTA2YWYiLE1NOiIlZCBcdTA2NDVcdTA2MjdcdTA2NDZcdTA2YWYiLHk6Ilx1MDZjY1x1MDY0N1x1MjAwY1x1''@;'; put 'put ''MDY0MyBcdTA2MzNcdTA2MjdcdTA2YjUiLHl5OiIlZCBcdTA2MzNcdTA2MjdcdTA2YjUifSxwcmVwYXJzZTpmdW5jdGlvbihQKXtyZXR1cm4gUC5yZXBsYWNlKC9bXHUwNjYxXHUwNjYyXHUwNjYzXHUwNjY0XHUwNjY1XHUwNjY2XHUwNjY3XHUwNjY4XHUwNjY5XHUwNjYwXS9nLGZ1bmN0aW9u''@;'; put 'put ''KEYpe3JldHVybiBnW0ZdfSkucmVwbGFjZSgvXHUwNjBjL2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihQKXtyZXR1cm4gUC5yZXBsYWNlKC9cZC9nLGZ1bmN0aW9uKEYpe3JldHVybiB5W0ZdfSkucmVwbGFjZSgvLC9nLCJcdTA2MGMiKX0sd2Vlazp7ZG93OjYsZG95OjEyfX0pfShfKDk3''@;'; put 'put ''NTg2KSl9LDk5MTg3OmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT17MDoiLVx1MDQ0N1x1MDRhZiIsMToiLVx1MDQ0N1x1MDQzOCIsMjoiLVx1MDQ0N1x1MDQzOCIsMzoiLVx1MDQ0N1x1MDRhZiIsNDoiLVx1MDQ0N1x1MDRhZiIsNToiLVx1MDQ0N1x1''@;'; put 'put ''MDQzOCIsNjoiLVx1MDQ0N1x1MDQ0YiIsNzoiLVx1MDQ0N1x1MDQzOCIsODoiLVx1MDQ0N1x1MDQzOCIsOToiLVx1MDQ0N1x1MDQ0MyIsMTA6Ii1cdTA0NDdcdTA0NDMiLDIwOiItXHUwNDQ3XHUwNDRiIiwzMDoiLVx1MDQ0N1x1MDQ0MyIsNDA6Ii1cdTA0NDdcdTA0NGIiLDUwOiItXHUwNDQ3''@;'; put 'put ''XHUwNGFmIiw2MDoiLVx1MDQ0N1x1MDQ0YiIsNzA6Ii1cdTA0NDdcdTA0MzgiLDgwOiItXHUwNDQ3XHUwNDM4Iiw5MDoiLVx1MDQ0N1x1MDQ0MyIsMTAwOiItXHUwNDQ3XHUwNGFmIn07SS5kZWZpbmVMb2NhbGUoImt5Iix7bW9udGhzOiJcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0NDBc''@;'; put 'put ''dTA0NGNfXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNiXHUwNDRjX1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JcdTA0NGNfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQzOFx1MDQ0ZVx1MDQzZFx1MDQ0Y19cdTA0MzhcdTA0''@;'; put 'put ''NGVcdTA0M2JcdTA0NGNfXHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyX1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Y19cdTA0M2VcdTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBcdTA0NGNfXHUwNDNkXHUwNDNlXHUwNDRmXHUw''@;'; put 'put ''NDMxXHUwNDQwXHUwNDRjX1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzMVx1MDQ0MFx1MDQ0YyIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwNDRmXHUwNDNkXHUwNDMyX1x1MDQ0NFx1MDQzNVx1MDQzMl9cdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJfXHUwNDMwXHUwNDNmXHUwNDQw''@;'; put 'put ''X1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0MzhcdTA0NGVcdTA0M2RcdTA0NGNfXHUwNDM4XHUwNDRlXHUwNDNiXHUwNDRjX1x1MDQzMFx1MDQzMlx1MDQzM19cdTA0NDFcdTA0MzVcdTA0M2RfXHUwNDNlXHUwNDNhXHUwNDQyX1x1MDQzZFx1MDQzZVx1MDQ0Zl9cdTA0MzRcdTA0MzVcdTA0M2Ei''@;'; put 'put ''LnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MDQxNlx1MDQzNVx1MDQzYVx1MDQ0OFx1MDQzNVx1MDQzY1x1MDQzMVx1MDQzOF9cdTA0MTRcdTA0YWZcdTA0MzlcdTA0NDhcdTA0ZTlcdTA0M2NcdTA0MzFcdTA0YWZfXHUwNDI4XHUwNDM1XHUwNDM5XHUwNDQ4XHUwNDM1XHUwNDNjXHUwNDMxXHUw''@;'; put 'put ''NDM4X1x1MDQyOFx1MDQzMFx1MDQ0MFx1MDQ0OFx1MDQzNVx1MDQzY1x1MDQzMVx1MDQzOF9cdTA0MTFcdTA0MzVcdTA0MzlcdTA0NDhcdTA0MzVcdTA0M2NcdTA0MzFcdTA0MzhfXHUwNDE2XHUwNDQzXHUwNDNjXHUwNDMwX1x1MDQxOFx1MDQ0OFx1MDQzNVx1MDQzY1x1MDQzMVx1MDQzOCIu''@;'; put 'put ''c3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTA0MTZcdTA0MzVcdTA0M2FfXHUwNDE0XHUwNGFmXHUwNDM5X1x1MDQyOFx1MDQzNVx1MDQzOV9cdTA0MjhcdTA0MzBcdTA0NDBfXHUwNDExXHUwNDM1XHUwNDM5X1x1MDQxNlx1MDQ0M1x1MDQzY19cdTA0MThcdTA0NDhcdTA0MzUiLnNwbGl0''@;'; put 'put ''KCJfIiksd2Vla2RheXNNaW46Ilx1MDQxNlx1MDQzYV9cdTA0MTRcdTA0MzlfXHUwNDI4XHUwNDM5X1x1MDQyOFx1MDQ0MF9cdTA0MTFcdTA0MzlfXHUwNDE2XHUwNDNjX1x1MDQxOFx1MDQ0OCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixM''@;'; put 'put ''OiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MTFcdTA0YWZcdTA0MzNcdTA0YWZcdTA0M2QgXHUwNDQxXHUwNDMwXHUwNDMwXHUwNDQyXSBM''@;'; put 'put ''VCIsbmV4dERheToiW1x1MDQyZFx1MDQ0MFx1MDQ0Mlx1MDQzNVx1MDRhMyBcdTA0NDFcdTA0MzBcdTA0MzBcdTA0NDJdIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNDQxXHUwNDMwXHUwNDMwXHUwNDQyXSBMVCIsbGFzdERheToiW1x1MDQxYVx1MDQzNVx1MDQ0N1x1MDQ0ZFx1MDQ0ZCBcdTA0''@;'; put 'put ''NDFcdTA0MzBcdTA0MzBcdTA0NDJdIExUIixsYXN0V2VlazoiW1x1MDRlOFx1MDQ0Mlx1MDQzYVx1MDRlOVx1MDQzZCBcdTA0MzBcdTA0M2ZcdTA0NDJcdTA0MzBcdTA0M2RcdTA0NGJcdTA0M2RdIGRkZGQgW1x1MDQzYVx1MDRhZlx1MDQzZFx1MDRhZl0gW1x1MDQ0MVx1MDQzMFx1MDQzMFx1''@;'; put 'put ''MDQ0Ml0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDQzOFx1MDQ0N1x1MDQzOFx1MDQzZFx1MDQzNFx1MDQzNSIscGFzdDoiJXMgXHUwNDNjXHUwNDQzXHUwNDQwXHUwNDQzXHUwNDNkIixzOiJcdTA0MzFcdTA0MzhcdTA0NDBcdTA0M2RcdTA0MzVcdTA0''@;'; put 'put ''NDdcdTA0MzUgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixzczoiJWQgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixtOiJcdTA0MzFcdTA0MzhcdTA0NDAgXHUwNDNjXHUwNGFmXHUwNDNkXHUwNGU5XHUwNDQyIixtbToiJWQgXHUwNDNjXHUwNGFm''@;'; put 'put ''XHUwNDNkXHUwNGU5XHUwNDQyIixoOiJcdTA0MzFcdTA0MzhcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDMwXHUwNDQyIixoaDoiJWQgXHUwNDQxXHUwNDMwXHUwNDMwXHUwNDQyIixkOiJcdTA0MzFcdTA0MzhcdTA0NDAgXHUwNDNhXHUwNGFmXHUwNDNkIixkZDoiJWQgXHUwNDNhXHUwNGFmXHUw''@;'; put 'put ''NDNkIixNOiJcdTA0MzFcdTA0MzhcdTA0NDAgXHUwNDMwXHUwNDM5IixNTToiJWQgXHUwNDMwXHUwNDM5Iix5OiJcdTA0MzFcdTA0MzhcdTA0NDAgXHUwNDM2XHUwNDRiXHUwNDNiIix5eToiJWQgXHUwNDM2XHUwNDRiXHUwNDNiIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0o''@;'; put 'put ''XHUwNDQ3XHUwNDM4fFx1MDQ0N1x1MDQ0YnxcdTA0NDdcdTA0YWZ8XHUwNDQ3XHUwNDQzKS8sb3JkaW5hbDpmdW5jdGlvbihCKXtyZXR1cm4gQisoeVtCXXx8eVtCJTEwXXx8eVtCPj0xMDA/MTAwOm51bGxdKX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KF8oOTc1ODYpKX0sMzU5Njk6ZnVuY3Rp''@;'; put 'put ''b24odWUscSxfKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHkoRixPLHosTil7dmFyIEw9e206WyJlbmcgTWludXR0IiwiZW5nZXIgTWludXR0Il0saDpbImVuZyBTdG9ubiIsImVuZ2VyIFN0b25uIl0sZDpbImVlbiBEYWciLCJlbmdlbSBEYWciXSxNOlsiZWUgTW91bnQi''@;'; put 'put ''LCJlbmdlbSBNb3VudCJdLHk6WyJlZSBKb2VyIiwiZW5nZW0gSm9lciJdfTtyZXR1cm4gTz9MW3pdWzBdOkxbel1bMV19ZnVuY3Rpb24gdyhGKXtpZihGPXBhcnNlSW50KEYsMTApLGlzTmFOKEYpKXJldHVybiExO2lmKEY8MClyZXR1cm4hMDtpZihGPDEwKXJldHVybiA0PD1GJiZGPD03O2lm''@;'; put 'put ''KEY8MTAwKXt2YXIgTz1GJTEwO3JldHVybiB3KDA9PT1PP0YvMTA6Tyl9aWYoRjwxZTQpe2Zvcig7Rj49MTA7KUYvPTEwO3JldHVybiB3KEYpfXJldHVybiB3KEYvPTFlMyl9SS5kZWZpbmVMb2NhbGUoImxiIix7bW9udGhzOiJKYW51YXJfRmVicnVhcl9NXHhlNGVyel9BYnJceGVibGxfTWVl''@;'; put 'put ''X0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbi5fRmVici5fTXJ6Ll9BYnIuX01lZV9KdW4uX0p1bC5fQXVnLl9TZXB0Ll9Pa3QuX05vdi5fRGV6LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4''@;'; put 'put ''YWN0OiEwLHdlZWtkYXlzOiJTb25uZGVnX01ceGU5aW5kZWdfRFx4ZWJuc2NoZGVnX01ceGVidHR3b2NoX0Rvbm5lc2NoZGVnX0ZyZWlkZWdfU2Ftc2NoZGVnIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlNvLl9NXHhlOS5fRFx4ZWIuX01ceGViLl9Eby5fRnIuX1NhLiIuc3BsaXQoIl8i''@;'; put 'put ''KSx3ZWVrZGF5c01pbjoiU29fTVx4ZTlfRFx4ZWJfTVx4ZWJfRG9fRnJfU2EiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSBbQXVlcl0iLExUUzoiSDptbTpzcyBbQXVlcl0iLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVki''@;'; put 'put ''LExMTDoiRC4gTU1NTSBZWVlZIEg6bW0gW0F1ZXJdIixMTExMOiJkZGRkLCBELiBNTU1NIFlZWVkgSDptbSBbQXVlcl0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hhdXQgdW1dIExUIixzYW1lRWxzZToiTCIsbmV4dERheToiW011ZXIgdW1dIExUIixuZXh0V2VlazoiZGRkZCBbdW1dIExUIixs''@;'; put 'put ''YXN0RGF5OiJbR1x4ZWJzY2h0ZXIgdW1dIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDI6Y2FzZSA0OnJldHVybiJbTGVzY2h0ZW5dIGRkZGQgW3VtXSBMVCI7ZGVmYXVsdDpyZXR1cm4iW0xlc2NodGVdIGRkZGQgW3VtXSBMVCJ9fX0scmVsYXRpdmVU''@;'; put 'put ''aW1lOntmdXR1cmU6ZnVuY3Rpb24gZyhGKXtyZXR1cm4gdyhGLnN1YnN0cigwLEYuaW5kZXhPZigiICIpKSk/ImEgIitGOiJhbiAiK0Z9LHBhc3Q6ZnVuY3Rpb24gQihGKXtyZXR1cm4gdyhGLnN1YnN0cigwLEYuaW5kZXhPZigiICIpKSk/InZpcnUgIitGOiJ2aXJ1biAiK0Z9LHM6ImUgcHVl''@;'; put 'put ''ciBTZWtvbm5lbiIsc3M6IiVkIFNla29ubmVuIixtOnksbW06IiVkIE1pbnV0dGVuIixoOnksaGg6IiVkIFN0b25uZW4iLGQ6eSxkZDoiJWQgRGVlZyIsTTp5LE1NOiIlZCBNXHhlOWludCIseSx5eToiJWQgSm9lciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5h''@;'; put 'put ''bDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oXyg5NzU4NikpfSwzMzUyNjpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoImxvIix7bW9udGhzOiJcdTBlYTFcdTBlYjFcdTBlODdcdTBlODFcdTBlYWRcdTBlOTlfXHUwZTgxXHUw''@;'; put 'put ''ZWI4XHUwZWExXHUwZTllXHUwZWIyX1x1MGVhMVx1MGViNVx1MGU5OVx1MGViMl9cdTBlYzBcdTBlYTFcdTBlYWFcdTBlYjJfXHUwZTllXHUwZWI2XHUwZTk0XHUwZWFhXHUwZWIwXHUwZTllXHUwZWIyX1x1MGVhMVx1MGViNFx1MGU5Nlx1MGViOFx1MGU5OVx1MGViMl9cdTBlODFcdTBlY2Rc''@;'; put 'put ''dTBlYTVcdTBlYjBcdTBlODFcdTBlYmJcdTBlOTRfXHUwZWFhXHUwZWI0XHUwZTg3XHUwZWFiXHUwZWIyX1x1MGU4MVx1MGViMVx1MGU5OVx1MGU4ZFx1MGViMl9cdTBlOTVcdTBlYjhcdTBlYTVcdTBlYjJfXHUwZTllXHUwZWIwXHUwZTg4XHUwZWI0XHUwZTgxX1x1MGU5N1x1MGViMVx1MGU5''@;'; put 'put ''OVx1MGVhN1x1MGViMiIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwZWExXHUwZWIxXHUwZTg3XHUwZTgxXHUwZWFkXHUwZTk5X1x1MGU4MVx1MGViOFx1MGVhMVx1MGU5ZVx1MGViMl9cdTBlYTFcdTBlYjVcdTBlOTlcdTBlYjJfXHUwZWMwXHUwZWExXHUwZWFhXHUwZWIyX1x1MGU5ZVx1''@;'; put 'put ''MGViNlx1MGU5NFx1MGVhYVx1MGViMFx1MGU5ZVx1MGViMl9cdTBlYTFcdTBlYjRcdTBlOTZcdTBlYjhcdTBlOTlcdTBlYjJfXHUwZTgxXHUwZWNkXHUwZWE1XHUwZWIwXHUwZTgxXHUwZWJiXHUwZTk0X1x1MGVhYVx1MGViNFx1MGU4N1x1MGVhYlx1MGViMl9cdTBlODFcdTBlYjFcdTBlOTlc''@;'; put 'put ''dTBlOGRcdTBlYjJfXHUwZTk1XHUwZWI4XHUwZWE1XHUwZWIyX1x1MGU5ZVx1MGViMFx1MGU4OFx1MGViNFx1MGU4MV9cdTBlOTdcdTBlYjFcdTBlOTlcdTBlYTdcdTBlYjIiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MGVhZFx1MGViMlx1MGU5N1x1MGViNFx1MGU5NF9cdTBlODhcdTBlYjFc''@;'; put 'put ''dTBlOTlfXHUwZWFkXHUwZWIxXHUwZTg3XHUwZTg0XHUwZWIyXHUwZTk5X1x1MGU5ZVx1MGViOFx1MGU5NF9cdTBlOWVcdTBlYjBcdTBlYWJcdTBlYjFcdTBlOTRfXHUwZWFhXHUwZWI4XHUwZTgxX1x1MGVjMFx1MGVhYVx1MGViYlx1MGViMiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJc''@;'; put 'put ''dTBlOTdcdTBlYjRcdTBlOTRfXHUwZTg4XHUwZWIxXHUwZTk5X1x1MGVhZFx1MGViMVx1MGU4N1x1MGU4NFx1MGViMlx1MGU5OV9cdTBlOWVcdTBlYjhcdTBlOTRfXHUwZTllXHUwZWIwXHUwZWFiXHUwZWIxXHUwZTk0X1x1MGVhYVx1MGViOFx1MGU4MV9cdTBlYzBcdTBlYWFcdTBlYmJcdTBl''@;'; put 'put ''YjIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGU5N19cdTBlODhfXHUwZWFkXHUwZTg0X1x1MGU5ZV9cdTBlOWVcdTBlYWJfXHUwZWFhXHUwZTgxX1x1MGVhYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDpt''@;'; put 'put ''bTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJcdTBlYTdcdTBlYjFcdTBlOTlkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwZTk1XHUwZWFkXHUwZTk5XHUwZWMwXHUwZThhXHUwZWJiXHUw''@;'; put 'put ''ZWM5XHUwZWIyfFx1MGU5NVx1MGVhZFx1MGU5OVx1MGVjMVx1MGVhNVx1MGU4Ny8saXNQTTpmdW5jdGlvbihnKXtyZXR1cm4iXHUwZTk1XHUwZWFkXHUwZTk5XHUwZWMxXHUwZWE1XHUwZTg3Ij09PWd9LG1lcmlkaWVtOmZ1bmN0aW9uKGcsQix3KXtyZXR1cm4gZzwxMj8iXHUwZTk1XHUwZWFk''@;'; put 'put ''XHUwZTk5XHUwZWMwXHUwZThhXHUwZWJiXHUwZWM5XHUwZWIyIjoiXHUwZTk1XHUwZWFkXHUwZTk5XHUwZWMxXHUwZWE1XHUwZTg3In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTBlYTFcdTBlYjdcdTBlYzlcdTBlOTlcdTBlYjVcdTBlYzlcdTBlYzBcdTBlYTdcdTBlYTVcdTBlYjJdIExUIixu''@;'; put 'put ''ZXh0RGF5OiJbXHUwZWExXHUwZWI3XHUwZWM5XHUwZWFkXHUwZWI3XHUwZWM4XHUwZTk5XHUwZWMwXHUwZWE3XHUwZWE1XHUwZWIyXSBMVCIsbmV4dFdlZWs6IltcdTBlYTdcdTBlYjFcdTBlOTldZGRkZFtcdTBlZGNcdTBlYzlcdTBlYjJcdTBlYzBcdTBlYTdcdTBlYTVcdTBlYjJdIExUIixs''@;'; put 'put ''YXN0RGF5OiJbXHUwZWExXHUwZWI3XHUwZWM5XHUwZWE3XHUwZWIyXHUwZTk5XHUwZTk5XHUwZWI1XHUwZWM5XHUwZWMwXHUwZWE3XHUwZWE1XHUwZWIyXSBMVCIsbGFzdFdlZWs6IltcdTBlYTdcdTBlYjFcdTBlOTldZGRkZFtcdTBlYzFcdTBlYTVcdTBlYzlcdTBlYTdcdTBlOTlcdTBlYjVc''@;'; put 'put ''dTBlYzlcdTBlYzBcdTBlYTdcdTBlYTVcdTBlYjJdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTBlYWRcdTBlYjVcdTBlODEgJXMiLHBhc3Q6IiVzXHUwZTljXHUwZWM4XHUwZWIyXHUwZTk5XHUwZWExXHUwZWIyIixzOiJcdTBlOWFcdTBlY2RcdTBlYzhcdTBl''@;'; put 'put ''YzBcdTBlOTdcdTBlYmJcdTBlYzhcdTBlYjJcdTBlYzNcdTBlOTRcdTBlYTdcdTBlYjRcdTBlOTlcdTBlYjJcdTBlOTdcdTBlYjUiLHNzOiIlZCBcdTBlYTdcdTBlYjRcdTBlOTlcdTBlYjJcdTBlOTdcdTBlYjUiLG06IjEgXHUwZTk5XHUwZWIyXHUwZTk3XHUwZWI1IixtbToiJWQgXHUwZTk5''@;'; put 'put ''XHUwZWIyXHUwZTk3XHUwZWI1IixoOiIxIFx1MGU4YVx1MGViYlx1MGVjOFx1MGVhN1x1MGVjMlx1MGVhMVx1MGU4NyIsaGg6IiVkIFx1MGU4YVx1MGViYlx1MGVjOFx1MGVhN1x1MGVjMlx1MGVhMVx1MGU4NyIsZDoiMSBcdTBlYTFcdTBlYjdcdTBlYzkiLGRkOiIlZCBcdTBlYTFcdTBlYjdc''@;'; put 'put ''dTBlYzkiLE06IjEgXHUwZWMwXHUwZTk0XHUwZWI3XHUwZWFkXHUwZTk5IixNTToiJWQgXHUwZWMwXHUwZTk0XHUwZWI3XHUwZWFkXHUwZTk5Iix5OiIxIFx1MGU5Ylx1MGViNSIseXk6IiVkIFx1MGU5Ylx1MGViNSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6LyhcdTBlOTdcdTBlYjVcdTBl''@;'; put 'put ''YzgpXGR7MSwyfS8sb3JkaW5hbDpmdW5jdGlvbihnKXtyZXR1cm4iXHUwZTk3XHUwZWI1XHUwZWM4IitnfX0pfShfKDk3NTg2KSl9LDkwNDExOmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT17c3M6InNla3VuZFx1MDExN19zZWt1bmRcdTAxN2VpXHUw''@;'; put 'put ''MTczX3Nla3VuZGVzIixtOiJtaW51dFx1MDExN19taW51dFx1MDExN3NfbWludXRcdTAxMTkiLG1tOiJtaW51dFx1MDExN3NfbWludVx1MDEwZGlcdTAxNzNfbWludXRlcyIsaDoidmFsYW5kYV92YWxhbmRvc192YWxhbmRcdTAxMDUiLGhoOiJ2YWxhbmRvc192YWxhbmRcdTAxNzNfdmFsYW5k''@;'; put 'put ''YXMiLGQ6ImRpZW5hX2RpZW5vc19kaWVuXHUwMTA1IixkZDoiZGllbm9zX2RpZW5cdTAxNzNfZGllbmFzIixNOiJtXHUwMTE3bnVvX21cdTAxMTduZXNpb19tXHUwMTE3bmVzXHUwMTJmIixNTToibVx1MDExN25lc2lhaV9tXHUwMTE3bmVzaVx1MDE3M19tXHUwMTE3bmVzaXVzIix5OiJtZXRh''@;'; put 'put ''aV9tZXRcdTAxNzNfbWV0dXMiLHl5OiJtZXRhaV9tZXRcdTAxNzNfbWV0dXMifTtmdW5jdGlvbiBCKHosTixMLEspe3JldHVybiBOP1AoTClbMF06Sz9QKEwpWzFdOlAoTClbMl19ZnVuY3Rpb24gdyh6KXtyZXR1cm4geiUxMD09MHx8ej4xMCYmejwyMH1mdW5jdGlvbiBQKHope3JldHVybiB5''@;'; put 'put ''W3pdLnNwbGl0KCJfIil9ZnVuY3Rpb24gRih6LE4sTCxLKXt2YXIgVT16KyIgIjtyZXR1cm4gMT09PXo/VStCKDAsTixMWzBdLEspOk4/VSsodyh6KT9QKEwpWzFdOlAoTClbMF0pOks/VStQKEwpWzFdOlUrKHcoeik/UChMKVsxXTpQKEwpWzJdKX1JLmRlZmluZUxvY2FsZSgibHQiLHttb250''@;'; put 'put ''aHM6e2Zvcm1hdDoic2F1c2lvX3Zhc2FyaW9fa292b19iYWxhbmRcdTAxN2Vpb19nZWd1XHUwMTdlXHUwMTE3c19iaXJcdTAxN2VlbGlvX2xpZXBvc19ydWdwalx1MDE2Ylx1MDEwZGlvX3J1Z3NcdTAxMTdqb19zcGFsaW9fbGFwa3JpXHUwMTBkaW9fZ3J1b2RcdTAxN2VpbyIuc3BsaXQoIl8i''@;'; put 'put ''KSxzdGFuZGFsb25lOiJzYXVzaXNfdmFzYXJpc19rb3Zhc19iYWxhbmRpc19nZWd1XHUwMTdlXHUwMTE3X2Jpclx1MDE3ZWVsaXNfbGllcGFfcnVncGpcdTAxNmJ0aXNfcnVnc1x1MDExN2ppc19zcGFsaXNfbGFwa3JpdGlzX2dydW9kaXMiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L0Rbb0RdPyhc''@;'; put 'put ''W1teXFtcXV0qXF18XHMpK01NTU0/fE1NTU0/KFxbW15cW1xdXSpcXXxccykrRFtvRF0/L30sbW9udGhzU2hvcnQ6InNhdV92YXNfa292X2JhbF9nZWdfYmlyX2xpZV9yZ3BfcmdzX3NwYV9sYXBfZ3JkIi5zcGxpdCgiXyIpLHdlZWtkYXlzOntmb3JtYXQ6InNla21hZGllblx1MDEyZl9waXJt''@;'; put 'put ''YWRpZW5cdTAxMmZfYW50cmFkaWVuXHUwMTJmX3RyZVx1MDEwZGlhZGllblx1MDEyZl9rZXR2aXJ0YWRpZW5cdTAxMmZfcGVua3RhZGllblx1MDEyZl9cdTAxNjFlXHUwMTYxdGFkaWVuXHUwMTJmIi5zcGxpdCgiXyIpLHN0YW5kYWxvbmU6InNla21hZGllbmlzX3Bpcm1hZGllbmlzX2FudHJh''@;'; put 'put ''ZGllbmlzX3RyZVx1MDEwZGlhZGllbmlzX2tldHZpcnRhZGllbmlzX3Blbmt0YWRpZW5pc19cdTAxNjFlXHUwMTYxdGFkaWVuaXMiLnNwbGl0KCJfIiksaXNGb3JtYXQ6L2RkZGQgSEg6bW0vfSx3ZWVrZGF5c1Nob3J0OiJTZWtfUGlyX0FudF9UcmVfS2V0X1Blbl9cdTAxNjBlXHUwMTYxIi5z''@;'; put 'put ''cGxpdCgiXyIpLHdlZWtkYXlzTWluOiJTX1BfQV9UX0tfUG5fXHUwMTYwIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiWVlZWSBbbS5dIE1NTU0gRCBbZC5dIixMTEw6''@;'; put 'put ''IllZWVkgW20uXSBNTU1NIEQgW2QuXSwgSEg6bW0gW3ZhbC5dIixMTExMOiJZWVlZIFttLl0gTU1NTSBEIFtkLl0sIGRkZGQsIEhIOm1tIFt2YWwuXSIsbDoiWVlZWS1NTS1ERCIsbGw6IllZWVkgW20uXSBNTU1NIEQgW2QuXSIsbGxsOiJZWVlZIFttLl0gTU1NTSBEIFtkLl0sIEhIOm1tIFt2''@;'; put 'put ''YWwuXSIsbGxsbDoiWVlZWSBbbS5dIE1NTU0gRCBbZC5dLCBkZGQsIEhIOm1tIFt2YWwuXSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwMTYwaWFuZGllbl0gTFQiLG5leHREYXk6IltSeXRval0gTFQiLG5leHRXZWVrOiJkZGRkIExUIixsYXN0RGF5OiJbVmFrYXJdIExUIixsYXN0V2Vlazoi''@;'; put 'put ''W1ByYVx1MDExN2p1c1x1MDEyZl0gZGRkZCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToicG8gJXMiLHBhc3Q6InByaWVcdTAxNjEgJXMiLHM6ZnVuY3Rpb24gZyh6LE4sTCxLKXtyZXR1cm4gTj8ia2VsaW9zIHNla3VuZFx1MDExN3MiOks/ImtlbGlcdTAxNzMgc2Vr''@;'; put 'put ''dW5kXHUwMTdlaVx1MDE3MyI6ImtlbGlhcyBzZWt1bmRlcyJ9LHNzOkYsbTpCLG1tOkYsaDpCLGhoOkYsZDpCLGRkOkYsTTpCLE1NOkYseTpCLHl5OkZ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0tb2ppLyxvcmRpbmFsOmZ1bmN0aW9uKHope3JldHVybiB6KyItb2ppIn0sd2Vl''@;'; put 'put ''azp7ZG93OjEsZG95OjR9fSl9KF8oOTc1ODYpKX0sMzI2MjE6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciB5PXtzczoic2VrdW5kZXNfc2VrdW5kXHUwMTEzbV9zZWt1bmRlX3Nla3VuZGVzIi5zcGxpdCgiXyIpLG06Im1pblx1MDE2YnRlc19taW5cdTAx''@;'; put 'put ''NmJ0XHUwMTEzbV9taW5cdTAxNmJ0ZV9taW5cdTAxNmJ0ZXMiLnNwbGl0KCJfIiksbW06Im1pblx1MDE2YnRlc19taW5cdTAxNmJ0XHUwMTEzbV9taW5cdTAxNmJ0ZV9taW5cdTAxNmJ0ZXMiLnNwbGl0KCJfIiksaDoic3R1bmRhc19zdHVuZFx1MDEwMW1fc3R1bmRhX3N0dW5kYXMiLnNwbGl0''@;'; put 'put ''KCJfIiksaGg6InN0dW5kYXNfc3R1bmRcdTAxMDFtX3N0dW5kYV9zdHVuZGFzIi5zcGxpdCgiXyIpLGQ6ImRpZW5hc19kaWVuXHUwMTAxbV9kaWVuYV9kaWVuYXMiLnNwbGl0KCJfIiksZGQ6ImRpZW5hc19kaWVuXHUwMTAxbV9kaWVuYV9kaWVuYXMiLnNwbGl0KCJfIiksTToibVx1MDExM25l''@;'; put 'put ''XHUwMTYxYV9tXHUwMTEzbmVcdTAxNjFpZW1fbVx1MDExM25lc2lzX21cdTAxMTNuZVx1MDE2MWkiLnNwbGl0KCJfIiksTU06Im1cdTAxMTNuZVx1MDE2MWFfbVx1MDExM25lXHUwMTYxaWVtX21cdTAxMTNuZXNpc19tXHUwMTEzbmVcdTAxNjFpIi5zcGxpdCgiXyIpLHk6ImdhZGFfZ2FkaWVt''@;'; put 'put ''X2dhZHNfZ2FkaSIuc3BsaXQoIl8iKSx5eToiZ2FkYV9nYWRpZW1fZ2Fkc19nYWRpIi5zcGxpdCgiXyIpfTtmdW5jdGlvbiBnKE8seixOKXtyZXR1cm4gTj96JTEwPT0xJiZ6JTEwMCE9MTE/T1syXTpPWzNdOnolMTA9PTEmJnolMTAwIT0xMT9PWzBdOk9bMV19ZnVuY3Rpb24gQihPLHosTil7''@;'; put 'put ''cmV0dXJuIE8rIiAiK2coeVtOXSxPLHopfWZ1bmN0aW9uIHcoTyx6LE4pe3JldHVybiBnKHlbTl0sTyx6KX1JLmRlZmluZUxvY2FsZSgibHYiLHttb250aHM6ImphbnZcdTAxMDFyaXNfZmVicnVcdTAxMDFyaXNfbWFydHNfYXByXHUwMTJibGlzX21haWpzX2pcdTAxNmJuaWpzX2pcdTAxNmJs''@;'; put 'put ''aWpzX2F1Z3VzdHNfc2VwdGVtYnJpc19va3RvYnJpc19ub3ZlbWJyaXNfZGVjZW1icmlzIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmViX21hcl9hcHJfbWFpX2pcdTAxNmJuX2pcdTAxNmJsX2F1Z19zZXBfb2t0X25vdl9kZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6InN2XHUwMTEz''@;'; put 'put ''dGRpZW5hX3Bpcm1kaWVuYV9vdHJkaWVuYV90cmVcdTAxNjFkaWVuYV9jZXR1cnRkaWVuYV9waWVrdGRpZW5hX3Nlc3RkaWVuYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTdl9QX09fVF9DX1BrX1MiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlN2X1BfT19UX0NfUGtfUyIuc3BsaXQo''@;'; put 'put ''Il8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWS4iLExMOiJZWVlZLiBbZ2FkYV0gRC4gTU1NTSIsTExMOiJZWVlZLiBbZ2FkYV0gRC4gTU1NTSwgSEg6bW0iLExMTEw6IllZWVkuIFtnYWRhXSBE''@;'; put 'put ''LiBNTU1NLCBkZGRkLCBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwMTYwb2RpZW4gcHVsa3N0ZW5dIExUIixuZXh0RGF5OiJbUlx1MDEyYnQgcHVsa3N0ZW5dIExUIixuZXh0V2VlazoiZGRkZCBbcHVsa3N0ZW5dIExUIixsYXN0RGF5OiJbVmFrYXIgcHVsa3N0ZW5dIExUIixsYXN0''@;'; put 'put ''V2VlazoiW1BhZ1x1MDEwMWp1XHUwMTYxXHUwMTAxXSBkZGRkIFtwdWxrc3Rlbl0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InBcdTAxMTNjICVzIixwYXN0OiJwaXJtcyAlcyIsczpmdW5jdGlvbiBQKE8seil7cmV0dXJuIHo/ImRhXHUwMTdlYXMgc2VrdW5kZXMi''@;'; put 'put ''OiJkYVx1MDE3ZVx1MDEwMW0gc2VrdW5kXHUwMTEzbSJ9LHNzOkIsbTp3LG1tOkIsaDp3LGhoOkIsZDp3LGRkOkIsTTp3LE1NOkIseTp3LHl5OkJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oXyg5NzU4Nikp''@;'; put 'put ''fSw4NTg2OTpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIHk9e3dvcmRzOntzczpbInNla3VuZCIsInNla3VuZGEiLCJzZWt1bmRpIl0sbTpbImplZGFuIG1pbnV0IiwiamVkbm9nIG1pbnV0YSJdLG1tOlsibWludXQiLCJtaW51dGEiLCJtaW51dGEiXSxo''@;'; put 'put ''OlsiamVkYW4gc2F0IiwiamVkbm9nIHNhdGEiXSxoaDpbInNhdCIsInNhdGEiLCJzYXRpIl0sZGQ6WyJkYW4iLCJkYW5hIiwiZGFuYSJdLE1NOlsibWplc2VjIiwibWplc2VjYSIsIm1qZXNlY2kiXSx5eTpbImdvZGluYSIsImdvZGluZSIsImdvZGluYSJdfSxjb3JyZWN0R3JhbW1hdGljYWxD''@;'; put 'put ''YXNlOmZ1bmN0aW9uKEIsdyl7cmV0dXJuIDE9PT1CP3dbMF06Qj49MiYmQjw9ND93WzFdOndbMl19LHRyYW5zbGF0ZTpmdW5jdGlvbihCLHcsUCl7dmFyIEY9eS53b3Jkc1tQXTtyZXR1cm4gMT09PVAubGVuZ3RoP3c/RlswXTpGWzFdOkIrIiAiK3kuY29ycmVjdEdyYW1tYXRpY2FsQ2FzZShC''@;'; put 'put ''LEYpfX07SS5kZWZpbmVMb2NhbGUoIm1lIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJ0X2FwcmlsX21hal9qdW5fanVsX2F2Z3VzdF9zZXB0ZW1iYXJfb2t0b2Jhcl9ub3ZlbWJhcl9kZWNlbWJhciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFuLl9mZWIuX21hci5fYXByLl9tYWpf''@;'; put 'put ''anVuX2p1bF9hdmcuX3NlcC5fb2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoibmVkamVsamFfcG9uZWRqZWxqYWtfdXRvcmFrX3NyaWplZGFfXHUwMTBkZXR2cnRha19wZXRha19zdWJvdGEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoi''@;'; put 'put ''bmVkLl9wb24uX3V0by5fc3JpLl9cdTAxMGRldC5fcGV0Ll9zdWIuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb191dF9zcl9cdTAxMGRlX3BlX3N1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIs''@;'; put 'put ''TDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2RhbmFzIHVdIExUIixuZXh0RGF5OiJbc2p1dHJhIHVdIExUIixuZXh0V2VlazpmdW5jdGlvbigp''@;'; put 'put ''e3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlt1XSBbbmVkamVsanVdIFt1XSBMVCI7Y2FzZSAzOnJldHVybiJbdV0gW3NyaWplZHVdIFt1XSBMVCI7Y2FzZSA2OnJldHVybiJbdV0gW3N1Ym90dV0gW3VdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIlt1''@;'; put 'put ''XSBkZGRkIFt1XSBMVCJ9fSxsYXN0RGF5OiJbanVcdTAxMGRlIHVdIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVyblsiW3Byb1x1MDE2MWxlXSBbbmVkamVsamVdIFt1XSBMVCIsIltwcm9cdTAxNjFsb2ddIFtwb25lZGplbGprYV0gW3VdIExUIiwiW3Byb1x1MDE2MWxvZ10gW3V0b3Jr''@;'; put 'put ''YV0gW3VdIExUIiwiW3Byb1x1MDE2MWxlXSBbc3JpamVkZV0gW3VdIExUIiwiW3Byb1x1MDE2MWxvZ10gW1x1MDEwZGV0dnJ0a2FdIFt1XSBMVCIsIltwcm9cdTAxNjFsb2ddIFtwZXRrYV0gW3VdIExUIiwiW3Byb1x1MDE2MWxlXSBbc3Vib3RlXSBbdV0gTFQiXVt0aGlzLmRheSgpXX0sc2Ft''@;'; put 'put ''ZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiemEgJXMiLHBhc3Q6InByaWplICVzIixzOiJuZWtvbGlrbyBzZWt1bmRpIixzczp5LnRyYW5zbGF0ZSxtOnkudHJhbnNsYXRlLG1tOnkudHJhbnNsYXRlLGg6eS50cmFuc2xhdGUsaGg6eS50cmFuc2xhdGUsZDoiZGFuIixkZDp5LnRy''@;'; put 'put ''YW5zbGF0ZSxNOiJtamVzZWMiLE1NOnkudHJhbnNsYXRlLHk6ImdvZGludSIseXk6eS50cmFuc2xhdGV9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6N319KX0oXyg5NzU4NikpfSwzNTg4MTpmdW5jdGlvbih1ZSxxLF8p''@;'; put 'put ''eyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoIm1pIix7bW9udGhzOiJLb2hpLXRcdTAxMDF0ZV9IdWktdGFuZ3VydV9Qb3V0XHUwMTZiLXRlLXJhbmdpX1BhZW5nYS13aFx1MDEwMXdoXHUwMTAxX0hhcmF0dWFfUGlwaXJpX0hcdTAxNGRuZ29pbmdvaV9IZXJlLXR1''@;'; put 'put ''cmkta1x1MDE0ZGtcdTAxMDFfTWFodXJ1X1doaXJpbmdhLVx1MDEwMS1udWt1X1doaXJpbmdhLVx1MDEwMS1yYW5naV9IYWtpaGVhIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJLb2hpX0h1aV9Qb3VfUGFlX0hhcmFfUGlwaV9IXHUwMTRkbmdvaV9IZXJlX01haHVfV2hpLW51X1doaS1yYV9I''@;'; put 'put ''YWtpIi5zcGxpdCgiXyIpLG1vbnRoc1JlZ2V4Oi8oPzpbJ2Etelx1MDEwMVx1MDE0RFx1MDE2Ql0rXC0/KXsxLDN9L2ksbW9udGhzU3RyaWN0UmVnZXg6Lyg/OlsnYS16XHUwMTAxXHUwMTREXHUwMTZCXStcLT8pezEsM30vaSxtb250aHNTaG9ydFJlZ2V4Oi8oPzpbJ2Etelx1MDEwMVx1MDE0''@;'; put 'put ''RFx1MDE2Ql0rXC0/KXsxLDN9L2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovKD86WydhLXpcdTAxMDFcdTAxNERcdTAxNkJdK1wtPyl7MSwyfS9pLHdlZWtkYXlzOiJSXHUwMTAxdGFwdV9NYW5lX1RcdTAxNmJyZWlfV2VuZXJlaV9UXHUwMTAxaXRlX1BhcmFpcmVfSFx1MDEwMXRhcmVpIi5z''@;'; put 'put ''cGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IlRhX01hX1RcdTAxNmJfV2VfVFx1MDEwMWlfUGFfSFx1MDEwMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiVGFfTWFfVFx1MDE2Yl9XZV9UXHUwMTAxaV9QYV9IXHUwMTAxIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExU''@;'; put 'put ''UzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBbaV0gSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFtpXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaSB0ZWllIG1haGFuYSwgaV0gTFQiLG5leHREYXk6IlthcG9w''@;'; put 'put ''byBpXSBMVCIsbmV4dFdlZWs6ImRkZGQgW2ldIExUIixsYXN0RGF5OiJbaW5hbmFoaSBpXSBMVCIsbGFzdFdlZWs6ImRkZGQgW3doYWthbXV0dW5nYSBpXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaSByb3RvIGkgJXMiLHBhc3Q6IiVzIGkgbXVhIixzOiJ0ZSBo''@;'; put 'put ''XHUwMTEza29uYSBydWFydWEiLHNzOiIlZCBoXHUwMTEza29uYSIsbToiaGUgbWVuZXRpIixtbToiJWQgbWVuZXRpIixoOiJ0ZSBoYW9yYSIsaGg6IiVkIGhhb3JhIixkOiJoZSByYSIsZGQ6IiVkIHJhIixNOiJoZSBtYXJhbWEiLE1NOiIlZCBtYXJhbWEiLHk6ImhlIHRhdSIseXk6IiVkIHRh''@;'; put 'put ''dSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShfKDk3NTg2KSl9LDkyMzkxOmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgibWsiLHttb250''@;'; put 'put ''aHM6Ilx1MDQ1OFx1MDQzMFx1MDQzZFx1MDQ0M1x1MDQzMFx1MDQ0MFx1MDQzOF9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0NDNcdTA0MzBcdTA0NDBcdTA0MzhfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzOFx1MDQzYl9cdTA0M2NcdTA0MzBc''@;'; put 'put ''dTA0NThfXHUwNDU4XHUwNDQzXHUwNDNkXHUwNDM4X1x1MDQ1OFx1MDQ0M1x1MDQzYlx1MDQzOF9cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDM1XHUwNDNmXHUwNDQyXHUwNDM1XHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4X1x1MDQzZVx1MDQzYVx1MDQ0''@;'; put 'put ''Mlx1MDQzZVx1MDQzY1x1MDQzMlx1MDQ0MFx1MDQzOF9cdTA0M2RcdTA0M2VcdTA0MzVcdTA0M2NcdTA0MzJcdTA0NDBcdTA0MzhfXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDM1XHUwNDNjXHUwNDMyXHUwNDQwXHUwNDM4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA0NThcdTA0MzBcdTA0''@;'; put 'put ''M2RfXHUwNDQ0XHUwNDM1XHUwNDMyX1x1MDQzY1x1MDQzMFx1MDQ0MF9cdTA0MzBcdTA0M2ZcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDU4X1x1MDQ1OFx1MDQ0M1x1MDQzZF9cdTA0NThcdTA0NDNcdTA0M2JfXHUwNDMwXHUwNDMyXHUwNDMzX1x1MDQ0MVx1MDQzNVx1MDQzZl9cdTA0M2VcdTA0''@;'; put 'put ''M2FcdTA0NDJfXHUwNDNkXHUwNDNlXHUwNDM1X1x1MDQzNFx1MDQzNVx1MDQzYSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNiXHUwNDMwX1x1MDQzZlx1MDQzZVx1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzYlx1MDQzZFx1MDQzOFx1MDQz''@;'; put 'put ''YV9cdTA0MzJcdTA0NDJcdTA0M2VcdTA0NDBcdTA0M2RcdTA0MzhcdTA0M2FfXHUwNDQxXHUwNDQwXHUwNDM1XHUwNDM0XHUwNDMwX1x1MDQ0N1x1MDQzNVx1MDQ0Mlx1MDQzMlx1MDQ0MFx1MDQ0Mlx1MDQzZVx1MDQzYV9cdTA0M2ZcdTA0MzVcdTA0NDJcdTA0M2VcdTA0M2FfXHUwNDQxXHUw''@;'; put 'put ''NDMwXHUwNDMxXHUwNDNlXHUwNDQyXHUwNDMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQzZFx1MDQzNVx1MDQzNF9cdTA0M2ZcdTA0M2VcdTA0M2RfXHUwNDMyXHUwNDQyXHUwNDNlX1x1MDQ0MVx1MDQ0MFx1MDQzNV9cdTA0NDdcdTA0MzVcdTA0NDJfXHUwNDNmXHUwNDM1XHUw''@;'; put 'put ''NDQyX1x1MDQ0MVx1MDQzMFx1MDQzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDNkZV9cdTA0M2ZvX1x1MDQzMlx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDM1X1x1MDQzZlx1MDQzNV9cdTA0NDFhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRT''@;'; put 'put ''OiJIOm1tOnNzIixMOiJELk1NLllZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MTRcdTA0MzVcdTA0M2RcdTA0MzVcdTA0NDEgXHUwNDMyXHUwNDNlXSBMVCIs''@;'; put 'put ''bmV4dERheToiW1x1MDQyM1x1MDQ0Mlx1MDQ0MFx1MDQzNSBcdTA0MzJcdTA0M2VdIExUIixuZXh0V2VlazoiW1x1MDQxMlx1MDQzZV0gZGRkZCBbXHUwNDMyXHUwNDNlXSBMVCIsbGFzdERheToiW1x1MDQxMlx1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzMCBcdTA0MzJcdTA0M2VdIExUIixsYXN0''@;'; put 'put ''V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6Y2FzZSAzOmNhc2UgNjpyZXR1cm4iW1x1MDQxOFx1MDQzN1x1MDQzY1x1MDQzOFx1MDQzZFx1MDQzMFx1MDQ0Mlx1MDQzMFx1MDQ0Mlx1MDQzMF0gZGRkZCBbXHUwNDMyXHUwNDNlXSBMVCI7Y2FzZSAxOmNhc2UgMjpj''@;'; put 'put ''YXNlIDQ6Y2FzZSA1OnJldHVybiJbXHUwNDE4XHUwNDM3XHUwNDNjXHUwNDM4XHUwNDNkXHUwNDMwXHUwNDQyXHUwNDM4XHUwNDNlXHUwNDQyXSBkZGRkIFtcdTA0MzJcdTA0M2VdIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MDQzN1x1MDQzMCAlcyIscGFz''@;'; put 'put ''dDoiXHUwNDNmXHUwNDQwXHUwNDM1XHUwNDM0ICVzIixzOiJcdTA0M2RcdTA0MzVcdTA0M2FcdTA0M2VcdTA0M2JcdTA0M2FcdTA0NDMgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDM4IixzczoiJWQgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0''@;'; put 'put ''XHUwNDM4IixtOiJcdTA0MzVcdTA0MzRcdTA0M2RcdTA0MzAgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDMwIixtbToiJWQgXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDM4IixoOiJcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2QgXHUwNDQ3XHUwNDMwXHUwNDQx''@;'; put 'put ''IixoaDoiJWQgXHUwNDQ3XHUwNDMwXHUwNDQxXHUwNDMwIixkOiJcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2QgXHUwNDM0XHUwNDM1XHUwNDNkIixkZDoiJWQgXHUwNDM0XHUwNDM1XHUwNDNkXHUwNDMwIixNOiJcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2QgXHUwNDNjXHUwNDM1XHUwNDQxXHUw''@;'; put 'put ''NDM1XHUwNDQ2IixNTToiJWQgXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDM1XHUwNDQ2XHUwNDM4Iix5OiJcdTA0MzVcdTA0MzRcdTA0M2RcdTA0MzAgXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDMwIix5eToiJWQgXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDM4''@;'; put 'put ''In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDM1XHUwNDMyfFx1MDQzNVx1MDQzZHxcdTA0NDJcdTA0Mzh8XHUwNDMyXHUwNDM4fFx1MDQ0MFx1MDQzOHxcdTA0M2NcdTA0MzgpLyxvcmRpbmFsOmZ1bmN0aW9uKGcpe3ZhciBCPWclMTAsdz1nJTEwMDtyZXR1cm4gMD09''@;'; put 'put ''PWc/ZysiLVx1MDQzNVx1MDQzMiI6MD09PXc/ZysiLVx1MDQzNVx1MDQzZCI6dz4xMCYmdzwyMD9nKyItXHUwNDQyXHUwNDM4IjoxPT09Qj9nKyItXHUwNDMyXHUwNDM4IjoyPT09Qj9nKyItXHUwNDQwXHUwNDM4Ijo3PT09Qnx8OD09PUI/ZysiLVx1MDQzY1x1MDQzOCI6ZysiLVx1MDQ0Mlx1''@;'; put 'put ''MDQzOCJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShfKDk3NTg2KSl9LDIxMTI2OmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgibWwiLHttb250aHM6Ilx1MGQxY1x1MGQyOFx1MGQ0MVx1MGQzNVx1MGQzMFx1MGQzZl9cdTBkMmJcdTBk''@;'; put 'put ''NDZcdTBkMmNcdTBkNGRcdTBkMzBcdTBkNDFcdTBkMzVcdTBkMzBcdTBkM2ZfXHUwZDJlXHUwZDNlXHUwZDdjXHUwZDFhXHUwZDRkXHUwZDFhXHUwZDRkX1x1MGQwZlx1MGQyYVx1MGQ0ZFx1MGQzMFx1MGQzZlx1MGQ3ZF9cdTBkMmVcdTBkNDdcdTBkMmZcdTBkNGRfXHUwZDFjXHUwZDQyXHUw''@;'; put 'put ''ZDdhX1x1MGQxY1x1MGQ0Mlx1MGQzMlx1MGQ0OF9cdTBkMTNcdTBkMTdcdTBkMzhcdTBkNGRcdTBkMzFcdTBkNGRcdTBkMzFcdTBkNGRfXHUwZDM4XHUwZDQ2XHUwZDJhXHUwZDRkXHUwZDMxXHUwZDRkXHUwZDMxXHUwZDAyXHUwZDJjXHUwZDdjX1x1MGQxMlx1MGQxNVx1MGQ0ZFx1MGQxZlx1''@;'; put 'put ''MGQ0Ylx1MGQyY1x1MGQ3Y19cdTBkMjhcdTBkMzVcdTBkMDJcdTBkMmNcdTBkN2NfXHUwZDIxXHUwZDNmXHUwZDM4XHUwZDAyXHUwZDJjXHUwZDdjIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBkMWNcdTBkMjhcdTBkNDEuX1x1MGQyYlx1MGQ0Nlx1MGQyY1x1MGQ0ZFx1MGQzMFx1MGQ0''@;'; put 'put ''MS5fXHUwZDJlXHUwZDNlXHUwZDdjLl9cdTBkMGZcdTBkMmFcdTBkNGRcdTBkMzBcdTBkM2YuX1x1MGQyZVx1MGQ0N1x1MGQyZlx1MGQ0ZF9cdTBkMWNcdTBkNDJcdTBkN2FfXHUwZDFjXHUwZDQyXHUwZDMyXHUwZDQ4Ll9cdTBkMTNcdTBkMTcuX1x1MGQzOFx1MGQ0Nlx1MGQyYVx1MGQ0ZFx1''@;'; put 'put ''MGQzMVx1MGQ0ZFx1MGQzMS5fXHUwZDEyXHUwZDE1XHUwZDRkXHUwZDFmXHUwZDRiLl9cdTBkMjhcdTBkMzVcdTBkMDIuX1x1MGQyMVx1MGQzZlx1MGQzOFx1MGQwMi4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwZDFlXHUwZDNlXHUwZDJmXHUwZDMxXHUw''@;'; put 'put ''ZDNlXHUwZDM0XHUwZDRkXHUwZDFhX1x1MGQyNFx1MGQzZlx1MGQxOVx1MGQ0ZFx1MGQxNVx1MGQzM1x1MGQzZVx1MGQzNFx1MGQ0ZFx1MGQxYV9cdTBkMWFcdTBkNGFcdTBkMzVcdTBkNGRcdTBkMzVcdTBkM2VcdTBkMzRcdTBkNGRcdTBkMWFfXHUwZDJjXHUwZDQxXHUwZDI3XHUwZDI4XHUw''@;'; put 'put ''ZDNlXHUwZDM0XHUwZDRkXHUwZDFhX1x1MGQzNVx1MGQ0ZFx1MGQyZlx1MGQzZVx1MGQzNFx1MGQzZVx1MGQzNFx1MGQ0ZFx1MGQxYV9cdTBkMzVcdTBkNDZcdTBkMzNcdTBkNGRcdTBkMzNcdTBkM2ZcdTBkMmZcdTBkM2VcdTBkMzRcdTBkNGRcdTBkMWFfXHUwZDM2XHUwZDI4XHUwZDNmXHUw''@;'; put 'put ''ZDJmXHUwZDNlXHUwZDM0XHUwZDRkXHUwZDFhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MGQxZVx1MGQzZVx1MGQyZlx1MGQ3Y19cdTBkMjRcdTBkM2ZcdTBkMTlcdTBkNGRcdTBkMTVcdTBkN2VfXHUwZDFhXHUwZDRhXHUwZDM1XHUwZDRkXHUwZDM1X1x1MGQyY1x1MGQ0MVx1MGQy''@;'; put 'put ''N1x1MGQ3Yl9cdTBkMzVcdTBkNGRcdTBkMmZcdTBkM2VcdTBkMzRcdTBkMDJfXHUwZDM1XHUwZDQ2XHUwZDMzXHUwZDRkXHUwZDMzXHUwZDNmX1x1MGQzNlx1MGQyOFx1MGQzZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwZDFlXHUwZDNlX1x1MGQyNFx1MGQzZl9cdTBkMWFcdTBkNGFf''@;'; put 'put ''XHUwZDJjXHUwZDQxX1x1MGQzNVx1MGQ0ZFx1MGQyZlx1MGQzZV9cdTBkMzVcdTBkNDZfXHUwZDM2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIC1cdTBkMjhcdTBkNDEiLExUUzoiQSBoOm1tOnNzIC1cdTBkMjhcdTBkNDEiLEw6IkREL01NL1lZWVkiLExMOiJEIE1N''@;'; put 'put ''TU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIC1cdTBkMjhcdTBkNDEiLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZLCBBIGg6bW0gLVx1MGQyOFx1MGQ0MSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwZDA3XHUwZDI4XHUwZDRkXHUwZDI4XHUwZDRkXSBMVCIsbmV4dERheToiW1x1''@;'; put 'put ''MGQyOFx1MGQzZVx1MGQzM1x1MGQ0Nl0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MGQwN1x1MGQyOFx1MGQ0ZFx1MGQyOFx1MGQzMlx1MGQ0Nl0gTFQiLGxhc3RXZWVrOiJbXHUwZDE1XHUwZDM0XHUwZDNmXHUwZDFlXHUwZDRkXHUwZDFlXSBkZGRkLCBMVCIsc2FtZUVs''@;'; put 'put ''c2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwZDE1XHUwZDM0XHUwZDNmXHUwZDFlXHUwZDRkXHUwZDFlXHUwZDRkIixwYXN0OiIlcyBcdTBkMmVcdTBkNDFcdTBkN2JcdTBkMmFcdTBkNGQiLHM6Ilx1MGQwNVx1MGQ3ZFx1MGQyYSBcdTBkMjhcdTBkM2ZcdTBkMmVcdTBkM2Zc''@;'; put 'put ''dTBkMzdcdTBkMTlcdTBkNGRcdTBkMTlcdTBkN2UiLHNzOiIlZCBcdTBkMzhcdTBkNDZcdTBkMTVcdTBkNGRcdTBkMTVcdTBkN2JcdTBkMjFcdTBkNGQiLG06Ilx1MGQxMlx1MGQzMFx1MGQ0MSBcdTBkMmVcdTBkM2ZcdTBkMjhcdTBkM2ZcdTBkMzFcdTBkNGRcdTBkMzFcdTBkNGQiLG1tOiIl''@;'; put 'put ''ZCBcdTBkMmVcdTBkM2ZcdTBkMjhcdTBkM2ZcdTBkMzFcdTBkNGRcdTBkMzFcdTBkNGQiLGg6Ilx1MGQxMlx1MGQzMFx1MGQ0MSBcdTBkMmVcdTBkMjNcdTBkM2ZcdTBkMTVcdTBkNGRcdTBkMTVcdTBkNDJcdTBkN2MiLGhoOiIlZCBcdTBkMmVcdTBkMjNcdTBkM2ZcdTBkMTVcdTBkNGRcdTBk''@;'; put 'put ''MTVcdTBkNDJcdTBkN2MiLGQ6Ilx1MGQxMlx1MGQzMFx1MGQ0MSBcdTBkMjZcdTBkM2ZcdTBkMzVcdTBkMzhcdTBkMDIiLGRkOiIlZCBcdTBkMjZcdTBkM2ZcdTBkMzVcdTBkMzhcdTBkMDIiLE06Ilx1MGQxMlx1MGQzMFx1MGQ0MSBcdTBkMmVcdTBkM2VcdTBkMzhcdTBkMDIiLE1NOiIlZCBc''@;'; put 'put ''dTBkMmVcdTBkM2VcdTBkMzhcdTBkMDIiLHk6Ilx1MGQxMlx1MGQzMFx1MGQ0MSBcdTBkMzVcdTBkN2NcdTBkMzdcdTBkMDIiLHl5OiIlZCBcdTBkMzVcdTBkN2NcdTBkMzdcdTBkMDIifSxtZXJpZGllbVBhcnNlOi9cdTBkMzBcdTBkM2VcdTBkMjRcdTBkNGRcdTBkMzBcdTBkM2Z8XHUwZDMw''@;'; put 'put ''XHUwZDNlXHUwZDM1XHUwZDNmXHUwZDMyXHUwZDQ2fFx1MGQwOVx1MGQxYVx1MGQ0ZFx1MGQxYSBcdTBkMTVcdTBkMzRcdTBkM2ZcdTBkMWVcdTBkNGRcdTBkMWVcdTBkNGR8XHUwZDM1XHUwZDQ4XHUwZDE1XHUwZDQxXHUwZDI4XHUwZDRkXHUwZDI4XHUwZDQ3XHUwZDMwXHUwZDAyfFx1MGQz''@;'; put 'put ''MFx1MGQzZVx1MGQyNFx1MGQ0ZFx1MGQzMFx1MGQzZi9pLG1lcmlkaWVtSG91cjpmdW5jdGlvbihnLEIpe3JldHVybiAxMj09PWcmJihnPTApLCJcdTBkMzBcdTBkM2VcdTBkMjRcdTBkNGRcdTBkMzBcdTBkM2YiPT09QiYmZz49NHx8Ilx1MGQwOVx1MGQxYVx1MGQ0ZFx1MGQxYSBcdTBkMTVc''@;'; put 'put ''dTBkMzRcdTBkM2ZcdTBkMWVcdTBkNGRcdTBkMWVcdTBkNGQiPT09Qnx8Ilx1MGQzNVx1MGQ0OFx1MGQxNVx1MGQ0MVx1MGQyOFx1MGQ0ZFx1MGQyOFx1MGQ0N1x1MGQzMFx1MGQwMiI9PT1CP2crMTI6Z30sbWVyaWRpZW06ZnVuY3Rpb24oZyxCLHcpe3JldHVybiBnPDQ/Ilx1MGQzMFx1MGQz''@;'; put 'put ''ZVx1MGQyNFx1MGQ0ZFx1MGQzMFx1MGQzZiI6ZzwxMj8iXHUwZDMwXHUwZDNlXHUwZDM1XHUwZDNmXHUwZDMyXHUwZDQ2IjpnPDE3PyJcdTBkMDlcdTBkMWFcdTBkNGRcdTBkMWEgXHUwZDE1XHUwZDM0XHUwZDNmXHUwZDFlXHUwZDRkXHUwZDFlXHUwZDRkIjpnPDIwPyJcdTBkMzVcdTBkNDhc''@;'; put 'put ''dTBkMTVcdTBkNDFcdTBkMjhcdTBkNGRcdTBkMjhcdTBkNDdcdTBkMzBcdTBkMDIiOiJcdTBkMzBcdTBkM2VcdTBkMjRcdTBkNGRcdTBkMzBcdTBkM2YifX0pfShfKDk3NTg2KSl9LDQ0ODkyOmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB5KEIs''@;'; put 'put ''dyxQLEYpe3N3aXRjaChQKXtjYXNlInMiOnJldHVybiB3PyJcdTA0NDVcdTA0NGRcdTA0MzRcdTA0NDVcdTA0NGRcdTA0M2QgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IjoiXHUwNDQ1XHUwNDRkXHUwNDM0XHUwNDQ1XHUwNDRkXHUwNDNkIFx1MDQ0MVx1MDQzNVx1MDQz''@;'; put 'put ''YVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0Ylx1MDQzZCI7Y2FzZSJzcyI6cmV0dXJuIEIrKHc/IiBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiOiIgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDRiXHUwNDNkIik7Y2FzZSJtIjpjYXNlIm1tIjpy''@;'; put 'put ''ZXR1cm4gQisodz8iIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiI6IiBcdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0NGJcdTA0M2QiKTtjYXNlImgiOmNhc2UiaGgiOnJldHVybiBCKyh3PyIgXHUwNDQ2XHUwNDMwXHUwNDMzIjoiIFx1MDQ0Nlx1MDQzMFx1MDQzM1x1''@;'; put 'put ''MDQzOFx1MDQzOVx1MDQzZCIpO2Nhc2UiZCI6Y2FzZSJkZCI6cmV0dXJuIEIrKHc/IiBcdTA0ZTlcdTA0MzRcdTA0ZTlcdTA0NDAiOiIgXHUwNGU5XHUwNDM0XHUwNDQwXHUwNDM4XHUwNDM5XHUwNDNkIik7Y2FzZSJNIjpjYXNlIk1NIjpyZXR1cm4gQisodz8iIFx1MDQ0MVx1MDQzMFx1MDQ0''@;'; put 'put ''MCI6IiBcdTA0NDFcdTA0MzBcdTA0NDBcdTA0NGJcdTA0M2QiKTtjYXNlInkiOmNhc2UieXkiOnJldHVybiBCKyh3PyIgXHUwNDM2XHUwNDM4XHUwNDNiIjoiIFx1MDQzNlx1MDQzOFx1MDQzYlx1MDQzOFx1MDQzOVx1MDQzZCIpO2RlZmF1bHQ6cmV0dXJuIEJ9fUkuZGVmaW5lTG9jYWxlKCJt''@;'; put 'put ''biIse21vbnRoczoiXHUwNDFkXHUwNDRkXHUwNDMzXHUwNDM0XHUwNGFmXHUwNDMzXHUwNDRkXHUwNDRkXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MjVcdTA0M2VcdTA0NTFcdTA0NDBcdTA0MzRcdTA0NDNcdTA0MzNcdTA0MzBcdTA0MzBcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQw''@;'; put 'put ''X1x1MDQxM1x1MDQ0M1x1MDQ0MFx1MDQzMFx1MDQzMlx1MDQzNFx1MDQ0M1x1MDQzM1x1MDQzMFx1MDQzMFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0NDBfXHUwNDE0XHUwNGU5XHUwNDQwXHUwNGU5XHUwNDMyXHUwNDM0XHUwNGFmXHUwNDMzXHUwNDRkXHUwNDRkXHUwNDQwIFx1MDQ0MVx1MDQz''@;'; put 'put ''MFx1MDQ0MF9cdTA0MjJcdTA0MzBcdTA0MzJcdTA0MzRcdTA0NDNcdTA0MzNcdTA0MzBcdTA0MzBcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwX1x1MDQxN1x1MDQ0M1x1MDQ0MFx1MDQzM1x1MDQzMFx1MDQzNFx1MDQ0M1x1MDQzM1x1MDQzMFx1MDQzMFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0''@;'; put 'put ''NDBfXHUwNDE0XHUwNDNlXHUwNDNiXHUwNDM0XHUwNDQzXHUwNDMzXHUwNDMwXHUwNDMwXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MWRcdTA0MzBcdTA0MzlcdTA0M2NcdTA0MzRcdTA0NDNcdTA0MzNcdTA0MzBcdTA0MzBcdTA0NDAgXHUwNDQxXHUwNDMwXHUwNDQwX1x1MDQxNVx1''@;'; put 'put ''MDQ0MVx1MDQzNFx1MDRhZlx1MDQzM1x1MDQ0ZFx1MDQ0ZFx1MDQ0MCBcdTA0NDFcdTA0MzBcdTA0NDBfXHUwNDEwXHUwNDQwXHUwNDMwXHUwNDMyXHUwNDM0XHUwNDQzXHUwNDMzXHUwNDMwXHUwNDMwXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MTBcdTA0NDBcdTA0MzJcdTA0MzBc''@;'; put 'put ''dTA0M2QgXHUwNDNkXHUwNDRkXHUwNDMzXHUwNDM0XHUwNGFmXHUwNDMzXHUwNDRkXHUwNDRkXHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MF9cdTA0MTBcdTA0NDBcdTA0MzJcdTA0MzBcdTA0M2QgXHUwNDQ1XHUwNDNlXHUwNDUxXHUwNDQwXHUwNDM0XHUwNDQzXHUwNDMzXHUwNDMwXHUwNDMw''@;'; put 'put ''XHUwNDQwIFx1MDQ0MVx1MDQzMFx1MDQ0MCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiMSBcdTA0NDFcdTA0MzBcdTA0NDBfMiBcdTA0NDFcdTA0MzBcdTA0NDBfMyBcdTA0NDFcdTA0MzBcdTA0NDBfNCBcdTA0NDFcdTA0MzBcdTA0NDBfNSBcdTA0NDFcdTA0MzBcdTA0NDBfNiBcdTA0NDFc''@;'; put 'put ''dTA0MzBcdTA0NDBfNyBcdTA0NDFcdTA0MzBcdTA0NDBfOCBcdTA0NDFcdTA0MzBcdTA0NDBfOSBcdTA0NDFcdTA0MzBcdTA0NDBfMTAgXHUwNDQxXHUwNDMwXHUwNDQwXzExIFx1MDQ0MVx1MDQzMFx1MDQ0MF8xMiBcdTA0NDFcdTA0MzBcdTA0NDAiLnNwbGl0KCJfIiksbW9udGhzUGFyc2VF''@;'; put 'put ''eGFjdDohMCx3ZWVrZGF5czoiXHUwNDFkXHUwNDRmXHUwNDNjX1x1MDQxNFx1MDQzMFx1MDQzMlx1MDQzMFx1MDQzMF9cdTA0MWNcdTA0NGZcdTA0MzNcdTA0M2NcdTA0MzBcdTA0NDBfXHUwNDFiXHUwNDQ1XHUwNDMwXHUwNDMzXHUwNDMyXHUwNDMwX1x1MDQxZlx1MDRhZlx1MDQ0MFx1MDQ0''@;'; put 'put ''ZFx1MDQzMl9cdTA0MTFcdTA0MzBcdTA0MzBcdTA0NDFcdTA0MzBcdTA0M2RfXHUwNDExXHUwNDRmXHUwNDNjXHUwNDMxXHUwNDMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQxZFx1MDQ0Zlx1MDQzY19cdTA0MTRcdTA0MzBcdTA0MzJfXHUwNDFjXHUwNDRmXHUwNDMzX1x1MDQx''@;'; put 'put ''Ylx1MDQ0NVx1MDQzMF9cdTA0MWZcdTA0YWZcdTA0NDBfXHUwNDExXHUwNDMwXHUwNDMwX1x1MDQxMVx1MDQ0Zlx1MDQzYyIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDFkXHUwNDRmX1x1MDQxNFx1MDQzMF9cdTA0MWNcdTA0NGZfXHUwNDFiXHUwNDQ1X1x1MDQxZlx1MDRhZl9cdTA0''@;'; put 'put ''MTFcdTA0MzBfXHUwNDExXHUwNDRmIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZLU1NLUREIixMTDoiWVlZWSBcdTA0M2VcdTA0M2RcdTA0NGIgTU1NTVx1MDQ0Ylx1MDQzZCBEIixMTEw6''@;'; put 'put ''IllZWVkgXHUwNDNlXHUwNDNkXHUwNDRiIE1NTU1cdTA0NGJcdTA0M2QgRCBISDptbSIsTExMTDoiZGRkZCwgWVlZWSBcdTA0M2VcdTA0M2RcdTA0NGIgTU1NTVx1MDQ0Ylx1MDQzZCBEIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNGFlXHUwNGU4fFx1MDRhZVx1MDQyNS9pLGlzUE06ZnVu''@;'; put 'put ''Y3Rpb24oQil7cmV0dXJuIlx1MDRhZVx1MDQyNSI9PT1CfSxtZXJpZGllbTpmdW5jdGlvbihCLHcsUCl7cmV0dXJuIEI8MTI/Ilx1MDRhZVx1MDRlOCI6Ilx1MDRhZVx1MDQyNSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNGU4XHUwNDNkXHUwNGU5XHUwNGU5XHUwNDM0XHUwNGU5XHUwNDQw''@;'; put 'put ''XSBMVCIsbmV4dERheToiW1x1MDQxY1x1MDQzMFx1MDQ0MFx1MDQzM1x1MDQzMFx1MDQzMFx1MDQ0OF0gTFQiLG5leHRXZWVrOiJbXHUwNDE4XHUwNDQwXHUwNDRkXHUwNDQ1XSBkZGRkIExUIixsYXN0RGF5OiJbXHUwNGU4XHUwNDQ3XHUwNDM4XHUwNDMzXHUwNDM0XHUwNGU5XHUwNDQwXSBM''@;'; put 'put ''VCIsbGFzdFdlZWs6IltcdTA0ZThcdTA0M2RcdTA0MzNcdTA0ZTlcdTA0NDBcdTA0NDFcdTA0ZTlcdTA0M2RdIGRkZGQgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDQzNFx1MDQzMFx1MDQ0MFx1MDQzMFx1MDQzMCIscGFzdDoiJXMgXHUwNGU5XHUwNDNj''@;'; put 'put ''XHUwNDNkXHUwNGU5IixzOnksc3M6eSxtOnksbW06eSxoOnksaGg6eSxkOnksZGQ6eSxNOnksTU06eSx5LHl5Onl9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0gXHUwNGU5XHUwNDM0XHUwNGU5XHUwNDQwLyxvcmRpbmFsOmZ1bmN0aW9uKEIsdyl7c3dpdGNoKHcpe2Nhc2UiZCI6''@;'; put 'put ''Y2FzZSJEIjpjYXNlIkRERCI6cmV0dXJuIEIrIiBcdTA0ZTlcdTA0MzRcdTA0ZTlcdTA0NDAiO2RlZmF1bHQ6cmV0dXJuIEJ9fX0pfShfKDk3NTg2KSl9LDU5MDgwOmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT17MToiXHUwOTY3IiwyOiJcdTA5Njgi''@;'; put 'put ''LDM6Ilx1MDk2OSIsNDoiXHUwOTZhIiw1OiJcdTA5NmIiLDY6Ilx1MDk2YyIsNzoiXHUwOTZkIiw4OiJcdTA5NmUiLDk6Ilx1MDk2ZiIsMDoiXHUwOTY2In0sZz17Ilx1MDk2NyI6IjEiLCJcdTA5NjgiOiIyIiwiXHUwOTY5IjoiMyIsIlx1MDk2YSI6IjQiLCJcdTA5NmIiOiI1IiwiXHUwOTZj''@;'; put 'put ''IjoiNiIsIlx1MDk2ZCI6IjciLCJcdTA5NmUiOiI4IiwiXHUwOTZmIjoiOSIsIlx1MDk2NiI6IjAifTtmdW5jdGlvbiBCKFAsRixPLHope3ZhciBOPSIiO2lmKEYpc3dpdGNoKE8pe2Nhc2UicyI6Tj0iXHUwOTE1XHUwOTNlXHUwOTM5XHUwOTQwIFx1MDkzOFx1MDk0N1x1MDkxNVx1MDkwMlx1''@;'; put 'put ''MDkyNiI7YnJlYWs7Y2FzZSJzcyI6Tj0iJWQgXHUwOTM4XHUwOTQ3XHUwOTE1XHUwOTAyXHUwOTI2IjticmVhaztjYXNlIm0iOk49Ilx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5M2ZcdTA5MjhcdTA5M2ZcdTA5MWYiO2JyZWFrO2Nhc2UibW0iOk49IiVkIFx1MDkyZVx1MDkzZlx1MDkyOFx1MDkz''@;'; put 'put ''Zlx1MDkxZlx1MDk0NyI7YnJlYWs7Y2FzZSJoIjpOPSJcdTA5MGZcdTA5MTUgXHUwOTI0XHUwOTNlXHUwOTM4IjticmVhaztjYXNlImhoIjpOPSIlZCBcdTA5MjRcdTA5M2VcdTA5MzgiO2JyZWFrO2Nhc2UiZCI6Tj0iXHUwOTBmXHUwOTE1IFx1MDkyNlx1MDkzZlx1MDkzNVx1MDkzOCI7YnJl''@;'; put 'put ''YWs7Y2FzZSJkZCI6Tj0iJWQgXHUwOTI2XHUwOTNmXHUwOTM1XHUwOTM4IjticmVhaztjYXNlIk0iOk49Ilx1MDkwZlx1MDkxNSBcdTA5MmVcdTA5MzlcdTA5M2ZcdTA5MjhcdTA5M2UiO2JyZWFrO2Nhc2UiTU0iOk49IiVkIFx1MDkyZVx1MDkzOVx1MDkzZlx1MDkyOFx1MDk0NyI7YnJlYWs7''@;'; put 'put ''Y2FzZSJ5IjpOPSJcdTA5MGZcdTA5MTUgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM3IjticmVhaztjYXNlInl5IjpOPSIlZCBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzdcdTA5NDcifWVsc2Ugc3dpdGNoKE8pe2Nhc2UicyI6Tj0iXHUwOTE1XHUwOTNlXHUwOTM5XHUwOTQwIFx1MDkzOFx1MDk0''@;'; put 'put ''N1x1MDkxNVx1MDkwMlx1MDkyNlx1MDkzZVx1MDkwMiI7YnJlYWs7Y2FzZSJzcyI6Tj0iJWQgXHUwOTM4XHUwOTQ3XHUwOTE1XHUwOTAyXHUwOTI2XHUwOTNlXHUwOTAyIjticmVhaztjYXNlIm0iOk49Ilx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MmVcdTA5M2ZcdTA5MjhcdTA5M2ZcdTA5MWZc''@;'; put 'put ''dTA5M2UiO2JyZWFrO2Nhc2UibW0iOk49IiVkIFx1MDkyZVx1MDkzZlx1MDkyOFx1MDkzZlx1MDkxZlx1MDkzZVx1MDkwMiI7YnJlYWs7Y2FzZSJoIjpOPSJcdTA5MGZcdTA5MTVcdTA5M2UgXHUwOTI0XHUwOTNlXHUwOTM4XHUwOTNlIjticmVhaztjYXNlImhoIjpOPSIlZCBcdTA5MjRcdTA5''@;'; put 'put ''M2VcdTA5MzhcdTA5M2VcdTA5MDIiO2JyZWFrO2Nhc2UiZCI6Tj0iXHUwOTBmXHUwOTE1XHUwOTNlIFx1MDkyNlx1MDkzZlx1MDkzNVx1MDkzOFx1MDkzZSI7YnJlYWs7Y2FzZSJkZCI6Tj0iJWQgXHUwOTI2XHUwOTNmXHUwOTM1XHUwOTM4XHUwOTNlXHUwOTAyIjticmVhaztjYXNlIk0iOk49''@;'; put 'put ''Ilx1MDkwZlx1MDkxNVx1MDkzZSBcdTA5MmVcdTA5MzlcdTA5M2ZcdTA5MjhcdTA5NGRcdTA5MmZcdTA5M2UiO2JyZWFrO2Nhc2UiTU0iOk49IiVkIFx1MDkyZVx1MDkzOVx1MDkzZlx1MDkyOFx1MDk0ZFx1MDkyZlx1MDkzZVx1MDkwMiI7YnJlYWs7Y2FzZSJ5IjpOPSJcdTA5MGZcdTA5MTVc''@;'; put 'put ''dTA5M2UgXHUwOTM1XHUwOTMwXHUwOTRkXHUwOTM3XHUwOTNlIjticmVhaztjYXNlInl5IjpOPSIlZCBcdTA5MzVcdTA5MzBcdTA5NGRcdTA5MzdcdTA5M2VcdTA5MDIifXJldHVybiBOLnJlcGxhY2UoLyVkL2ksUCl9SS5kZWZpbmVMb2NhbGUoIm1yIix7bW9udGhzOiJcdTA5MWNcdTA5M2Vc''@;'; put 'put ''dTA5MjhcdTA5NDdcdTA5MzVcdTA5M2VcdTA5MzBcdTA5NDBfXHUwOTJiXHUwOTQ3XHUwOTJjXHUwOTRkXHUwOTMwXHUwOTQxXHUwOTM1XHUwOTNlXHUwOTMwXHUwOTQwX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYV9cdTA5MGZcdTA5MmFcdTA5NGRcdTA5MzBcdTA5M2ZcdTA5MzJf''@;'; put 'put ''XHUwOTJlXHUwOTQ3X1x1MDkxY1x1MDk0Mlx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzJcdTA5NDhfXHUwOTExXHUwOTE3XHUwOTM4XHUwOTRkXHUwOTFmX1x1MDkzOFx1MDkyYVx1MDk0ZFx1MDkxZlx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMF9cdTA5MTFcdTA5MTVcdTA5NGRcdTA5MWZcdTA5''@;'; put 'put ''NGJcdTA5MmNcdTA5MzBfXHUwOTI4XHUwOTRiXHUwOTM1XHUwOTRkXHUwOTM5XHUwOTQ3XHUwOTAyXHUwOTJjXHUwOTMwX1x1MDkyMVx1MDkzZlx1MDkzOFx1MDk0N1x1MDkwMlx1MDkyY1x1MDkzMCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwOTFjXHUwOTNlXHUwOTI4XHUwOTQ3Ll9c''@;'; put 'put ''dTA5MmJcdTA5NDdcdTA5MmNcdTA5NGRcdTA5MzBcdTA5NDEuX1x1MDkyZVx1MDkzZVx1MDkzMFx1MDk0ZFx1MDkxYS5fXHUwOTBmXHUwOTJhXHUwOTRkXHUwOTMwXHUwOTNmLl9cdTA5MmVcdTA5NDcuX1x1MDkxY1x1MDk0Mlx1MDkyOC5fXHUwOTFjXHUwOTQxXHUwOTMyXHUwOTQ4Ll9cdTA5''@;'; put 'put ''MTFcdTA5MTcuX1x1MDkzOFx1MDkyYVx1MDk0ZFx1MDkxZlx1MDk0N1x1MDkwMi5fXHUwOTExXHUwOTE1XHUwOTRkXHUwOTFmXHUwOTRiLl9cdTA5MjhcdTA5NGJcdTA5MzVcdTA5NGRcdTA5MzlcdTA5NDdcdTA5MDIuX1x1MDkyMVx1MDkzZlx1MDkzOFx1MDk0N1x1MDkwMi4iLnNwbGl0KCJf''@;'; put 'put ''IiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiXHUwOTMwXHUwOTM1XHUwOTNmXHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkzOFx1MDk0Ylx1MDkyZVx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MmVcdTA5MDJcdTA5MTdcdTA5MzNcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTJjXHUwOTQxXHUw''@;'; put 'put ''OTI3XHUwOTM1XHUwOTNlXHUwOTMwX1x1MDkxN1x1MDk0MVx1MDkzMFx1MDk0Mlx1MDkzNVx1MDkzZVx1MDkzMF9cdTA5MzZcdTA5NDFcdTA5MTVcdTA5NGRcdTA5MzBcdTA5MzVcdTA5M2VcdTA5MzBfXHUwOTM2XHUwOTI4XHUwOTNmXHUwOTM1XHUwOTNlXHUwOTMwIi5zcGxpdCgiXyIpLHdl''@;'; put 'put ''ZWtkYXlzU2hvcnQ6Ilx1MDkzMFx1MDkzNVx1MDkzZl9cdTA5MzhcdTA5NGJcdTA5MmVfXHUwOTJlXHUwOTAyXHUwOTE3XHUwOTMzX1x1MDkyY1x1MDk0MVx1MDkyN19cdTA5MTdcdTA5NDFcdTA5MzBcdTA5NDJfXHUwOTM2XHUwOTQxXHUwOTE1XHUwOTRkXHUwOTMwX1x1MDkzNlx1MDkyOFx1''@;'; put 'put ''MDkzZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwOTMwX1x1MDkzOFx1MDk0Yl9cdTA5MmVcdTA5MDJfXHUwOTJjXHUwOTQxX1x1MDkxN1x1MDk0MV9cdTA5MzZcdTA5NDFfXHUwOTM2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiQSBoOm1tIFx1MDkzNVx1MDkzZVx1MDkx''@;'; put 'put ''Y1x1MDkyNFx1MDkzZSIsTFRTOiJBIGg6bW06c3MgXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSBcdTA5MzVcdTA5M2VcdTA5MWNcdTA5MjRcdTA5M2UiLExMTEw6ImRkZGQsIEQg''@;'; put 'put ''TU1NTSBZWVlZLCBBIGg6bW0gXHUwOTM1XHUwOTNlXHUwOTFjXHUwOTI0XHUwOTNlIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA5MDZcdTA5MWNdIExUIixuZXh0RGF5OiJbXHUwOTA5XHUwOTI2XHUwOTRkXHUwOTJmXHUwOTNlXSBMVCIsbmV4dFdlZWs6ImRkZGQsIExUIixsYXN0RGF5OiJb''@;'; put 'put ''XHUwOTE1XHUwOTNlXHUwOTMyXSBMVCIsbGFzdFdlZWs6IltcdTA5MmVcdTA5M2VcdTA5MTdcdTA5NDBcdTA5MzJdIGRkZGQsIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlc1x1MDkyZVx1MDkyN1x1MDk0ZFx1MDkyZlx1MDk0NyIscGFzdDoiJXNcdTA5MmFcdTA5''@;'; put 'put ''NDJcdTA5MzBcdTA5NGRcdTA5MzVcdTA5NDAiLHM6QixzczpCLG06QixtbTpCLGg6QixoaDpCLGQ6QixkZDpCLE06QixNTTpCLHk6Qix5eTpCfSxwcmVwYXJzZTpmdW5jdGlvbihQKXtyZXR1cm4gUC5yZXBsYWNlKC9bXHUwOTY3XHUwOTY4XHUwOTY5XHUwOTZhXHUwOTZiXHUwOTZjXHUwOTZk''@;'; put 'put ''XHUwOTZlXHUwOTZmXHUwOTY2XS9nLGZ1bmN0aW9uKEYpe3JldHVybiBnW0ZdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24oUCl7cmV0dXJuIFAucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihGKXtyZXR1cm4geVtGXX0pfSxtZXJpZGllbVBhcnNlOi9cdTA5MmFcdTA5MzlcdTA5M2VcdTA5MWZcdTA5''@;'; put 'put ''NDd8XHUwOTM4XHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwfFx1MDkyNlx1MDk0MVx1MDkyYVx1MDkzZVx1MDkzMFx1MDk0MHxcdTA5MzhcdTA5M2VcdTA5MmZcdTA5MDJcdTA5MTVcdTA5M2VcdTA5MzNcdTA5NDB8XHUwOTMwXHUwOTNlXHUwOTI0XHUwOTRkXHUwOTMwXHUwOTQwLyxtZXJpZGll''@;'; put 'put ''bUhvdXI6ZnVuY3Rpb24oUCxGKXtyZXR1cm4gMTI9PT1QJiYoUD0wKSwiXHUwOTJhXHUwOTM5XHUwOTNlXHUwOTFmXHUwOTQ3Ij09PUZ8fCJcdTA5MzhcdTA5MTVcdTA5M2VcdTA5MzNcdTA5NDAiPT09Rj9QOiJcdTA5MjZcdTA5NDFcdTA5MmFcdTA5M2VcdTA5MzBcdTA5NDAiPT09Rnx8Ilx1''@;'; put 'put ''MDkzOFx1MDkzZVx1MDkyZlx1MDkwMlx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MCI9PT1GfHwiXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTRkXHUwOTMwXHUwOTQwIj09PUY/UD49MTI/UDpQKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oUCxGLE8pe3JldHVybiBQPj0wJiZQPDY/Ilx1MDky''@;'; put 'put ''YVx1MDkzOVx1MDkzZVx1MDkxZlx1MDk0NyI6UDwxMj8iXHUwOTM4XHUwOTE1XHUwOTNlXHUwOTMzXHUwOTQwIjpQPDE3PyJcdTA5MjZcdTA5NDFcdTA5MmFcdTA5M2VcdTA5MzBcdTA5NDAiOlA8MjA/Ilx1MDkzOFx1MDkzZVx1MDkyZlx1MDkwMlx1MDkxNVx1MDkzZVx1MDkzM1x1MDk0MCI6''@;'; put 'put ''Ilx1MDkzMFx1MDkzZVx1MDkyNFx1MDk0ZFx1MDkzMFx1MDk0MCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShfKDk3NTg2KSl9LDI1OTUwOmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgibXMtbXkiLHttb250aHM6IkphbnVhcmlfRmVi''@;'; put 'put ''cnVhcmlfTWFjX0FwcmlsX01laV9KdW5fSnVsYWlfT2dvc19TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EaXNlbWJlciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZlYl9NYWNfQXByX01laV9KdW5fSnVsX09nc19TZXBfT2t0X05vdl9EaXMiLnNwbGl0KCJfIiksd2Vla2RheXM6''@;'; put 'put ''IkFoYWRfSXNuaW5fU2VsYXNhX1JhYnVfS2hhbWlzX0p1bWFhdF9TYWJ0dSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJBaGRfSXNuX1NlbF9SYWJfS2hhX0p1bV9TYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkFoX0lzX1NsX1JiX0ttX0ptX1NiIi5zcGxpdCgiXyIpLGxvbmdEYXRl''@;'; put 'put ''Rm9ybWF0OntMVDoiSEgubW0iLExUUzoiSEgubW0uc3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBbcHVrdWxdIEhILm1tIn0sbWVyaWRpZW1QYXJzZTovcGFnaXx0ZW5nYWhh''@;'; put 'put ''cml8cGV0YW5nfG1hbGFtLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oZyxCKXtyZXR1cm4gMTI9PT1nJiYoZz0wKSwicGFnaSI9PT1CP2c6InRlbmdhaGFyaSI9PT1CP2c+PTExP2c6ZysxMjoicGV0YW5nIj09PUJ8fCJtYWxhbSI9PT1CP2crMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihn''@;'; put 'put ''LEIsdyl7cmV0dXJuIGc8MTE/InBhZ2kiOmc8MTU/InRlbmdhaGFyaSI6ZzwxOT8icGV0YW5nIjoibWFsYW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hhcmkgaW5pIHB1a3VsXSBMVCIsbmV4dERheToiW0Vzb2sgcHVrdWxdIExUIixuZXh0V2VlazoiZGRkZCBbcHVrdWxdIExUIixsYXN0RGF5''@;'; put 'put ''OiJbS2VsbWFyaW4gcHVrdWxdIExUIixsYXN0V2VlazoiZGRkZCBbbGVwYXMgcHVrdWxdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJkYWxhbSAlcyIscGFzdDoiJXMgeWFuZyBsZXBhcyIsczoiYmViZXJhcGEgc2FhdCIsc3M6IiVkIHNhYXQiLG06InNlbWluaXQi''@;'; put 'put ''LG1tOiIlZCBtaW5pdCIsaDoic2VqYW0iLGhoOiIlZCBqYW0iLGQ6InNlaGFyaSIsZGQ6IiVkIGhhcmkiLE06InNlYnVsYW4iLE1NOiIlZCBidWxhbiIseToic2V0YWh1biIseXk6IiVkIHRhaHVuIn0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KF8oOTc1ODYpKX0sNzAzOTk6ZnVuY3Rpb24odWUs''@;'; put 'put ''cSxfKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJtcyIse21vbnRoczoiSmFudWFyaV9GZWJydWFyaV9NYWNfQXByaWxfTWVpX0p1bl9KdWxhaV9PZ29zX1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0Rpc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0''@;'; put 'put ''OiJKYW5fRmViX01hY19BcHJfTWVpX0p1bl9KdWxfT2dzX1NlcF9Pa3RfTm92X0RpcyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiQWhhZF9Jc25pbl9TZWxhc2FfUmFidV9LaGFtaXNfSnVtYWF0X1NhYnR1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkFoZF9Jc25fU2VsX1JhYl9LaGFfSnVt''@;'; put 'put ''X1NhYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiQWhfSXNfU2xfUmJfS21fSm1fU2IiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISC5tbSIsTFRTOiJISC5tbS5zcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIFtwdWt1bF0gSEgu''@;'; put 'put ''bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIFtwdWt1bF0gSEgubW0ifSxtZXJpZGllbVBhcnNlOi9wYWdpfHRlbmdhaGFyaXxwZXRhbmd8bWFsYW0vLG1lcmlkaWVtSG91cjpmdW5jdGlvbihnLEIpe3JldHVybiAxMj09PWcmJihnPTApLCJwYWdpIj09PUI/ZzoidGVuZ2FoYXJpIj09PUI/''@;'; put 'put ''Zz49MTE/ZzpnKzEyOiJwZXRhbmciPT09Qnx8Im1hbGFtIj09PUI/ZysxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKGcsQix3KXtyZXR1cm4gZzwxMT8icGFnaSI6ZzwxNT8idGVuZ2FoYXJpIjpnPDE5PyJwZXRhbmciOiJtYWxhbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSGFyaSBpbmkg''@;'; put 'put ''cHVrdWxdIExUIixuZXh0RGF5OiJbRXNvayBwdWt1bF0gTFQiLG5leHRXZWVrOiJkZGRkIFtwdWt1bF0gTFQiLGxhc3REYXk6IltLZWxtYXJpbiBwdWt1bF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtsZXBhcyBwdWt1bF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImRh''@;'; put 'put ''bGFtICVzIixwYXN0OiIlcyB5YW5nIGxlcGFzIixzOiJiZWJlcmFwYSBzYWF0IixzczoiJWQgc2FhdCIsbToic2VtaW5pdCIsbW06IiVkIG1pbml0IixoOiJzZWphbSIsaGg6IiVkIGphbSIsZDoic2VoYXJpIixkZDoiJWQgaGFyaSIsTToic2VidWxhbiIsTU06IiVkIGJ1bGFuIix5OiJzZXRh''@;'; put 'put ''aHVuIix5eToiJWQgdGFodW4ifSx3ZWVrOntkb3c6MSxkb3k6N319KX0oXyg5NzU4NikpfSw3OTkwMjpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoIm10Iix7bW9udGhzOiJKYW5uYXJfRnJhcl9NYXJ6dV9BcHJpbF9NZWpqdV9cdTAx''@;'; put 'put ''MjB1bmp1X0x1bGp1X0F3d2lzc3VfU2V0dGVtYnJ1X090dHVicnVfTm92ZW1icnVfRGlcdTAxMGJlbWJydSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0ZyYV9NYXJfQXByX01lal9cdTAxMjB1bl9MdWxfQXd3X1NldF9PdHRfTm92X0RpXHUwMTBiIi5zcGxpdCgiXyIpLHdlZWtkYXlz''@;'; put 'put ''OiJJbC1cdTAxMjZhZGRfSXQtVG5lam5fSXQtVGxpZXRhX0wtRXJiZ1x1MDEyN2FfSWwtXHUwMTI2YW1pc19JbC1cdTAxMjBpbWdcdTAxMjdhX0lzLVNpYnQiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwMTI2YWRfVG5lX1RsaV9FcmJfXHUwMTI2YW1fXHUwMTIwaW1fU2liIi5zcGxp''@;'; put 'put ''dCgiXyIpLHdlZWtkYXlzTWluOiJcdTAxMjZhX1RuX1RsX0VyX1x1MDEyNmFfXHUwMTIwaV9TaSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0i''@;'; put 'put ''LExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltJbGx1bSBmaWwtXUxUIixuZXh0RGF5OiJbR1x1MDEyN2FkYSBmaWwtXUxUIixuZXh0V2VlazoiZGRkZCBbZmlsLV1MVCIsbGFzdERheToiW0lsLWJpZXJhXHUwMTI3IGZpbC1dTFQiLGxhc3RXZWVr''@;'; put 'put ''OiJkZGRkIFtsaSBnXHUwMTI3YWRkYV0gW2ZpbC1dTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImZcdTIwMTkgJXMiLHBhc3Q6IiVzIGlsdSIsczoiZnRpdCBzZWtvbmRpIixzczoiJWQgc2Vrb25kaSIsbToibWludXRhIixtbToiJWQgbWludXRpIixoOiJzaWVnXHUw''@;'; put 'put ''MTI3YSIsaGg6IiVkIHNpZWdcdTAxMjdhdCIsZDoiXHUwMTIxdXJuYXRhIixkZDoiJWQgXHUwMTIxcmFuZXQiLE06InhhaGFyIixNTToiJWQgeGh1ciIseToic2VuYSIseXk6IiVkIHNuaSJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLHdl''@;'; put 'put ''ZWs6e2RvdzoxLGRveTo0fX0pfShfKDk3NTg2KSl9LDcyOTg1OmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT17MToiXHUxMDQxIiwyOiJcdTEwNDIiLDM6Ilx1MTA0MyIsNDoiXHUxMDQ0Iiw1OiJcdTEwNDUiLDY6Ilx1MTA0NiIsNzoiXHUxMDQ3Iiw4''@;'; put 'put ''OiJcdTEwNDgiLDk6Ilx1MTA0OSIsMDoiXHUxMDQwIn0sZz17Ilx1MTA0MSI6IjEiLCJcdTEwNDIiOiIyIiwiXHUxMDQzIjoiMyIsIlx1MTA0NCI6IjQiLCJcdTEwNDUiOiI1IiwiXHUxMDQ2IjoiNiIsIlx1MTA0NyI6IjciLCJcdTEwNDgiOiI4IiwiXHUxMDQ5IjoiOSIsIlx1MTA0MCI6IjAi''@;'; put 'put ''fTtJLmRlZmluZUxvY2FsZSgibXkiLHttb250aHM6Ilx1MTAwN1x1MTAxNFx1MTAzYVx1MTAxNFx1MTAxZFx1MTAyYlx1MTAxYlx1MTAyZV9cdTEwMTZcdTEwMzFcdTEwMTZcdTEwMzFcdTEwMmNcdTEwM2FcdTEwMWRcdTEwMmJcdTEwMWJcdTEwMmVfXHUxMDE5XHUxMDEwXHUxMDNhX1x1MTAy''@;'; put 'put ''N1x1MTAxNVx1MTAzY1x1MTAyZV9cdTEwMTlcdTEwMzFfXHUxMDA3XHUxMDNkXHUxMDE0XHUxMDNhX1x1MTAwN1x1MTAzMFx1MTAxY1x1MTAyZFx1MTAyZlx1MTAwNFx1MTAzYV9cdTEwMWVcdTEwM2NcdTEwMDJcdTEwMmZcdTEwMTBcdTEwM2FfXHUxMDA1XHUxMDAwXHUxMDNhXHUxMDEwXHUx''@;'; put 'put ''MDA0XHUxMDNhXHUxMDE4XHUxMDJjX1x1MTAyMVx1MTAzMVx1MTAyY1x1MTAwMFx1MTAzYVx1MTAxMFx1MTAyZFx1MTAyZlx1MTAxOFx1MTAyY19cdTEwMTRcdTEwMmRcdTEwMmZcdTEwMWRcdTEwMDRcdTEwM2FcdTEwMThcdTEwMmNfXHUxMDEyXHUxMDJlXHUxMDA3XHUxMDA0XHUxMDNhXHUx''@;'; put 'put ''MDE4XHUxMDJjIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTEwMDdcdTEwMTRcdTEwM2FfXHUxMDE2XHUxMDMxX1x1MTAxOVx1MTAxMFx1MTAzYV9cdTEwMTVcdTEwM2NcdTEwMmVfXHUxMDE5XHUxMDMxX1x1MTAwN1x1MTAzZFx1MTAxNFx1MTAzYV9cdTEwMWNcdTEwMmRcdTEwMmZcdTEw''@;'; put 'put ''MDRcdTEwM2FfXHUxMDFlXHUxMDNjX1x1MTAwNVx1MTAwMFx1MTAzYV9cdTEwMjFcdTEwMzFcdTEwMmNcdTEwMDBcdTEwM2FfXHUxMDE0XHUxMDJkXHUxMDJmX1x1MTAxMlx1MTAyZSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUxMDEwXHUxMDE0XHUxMDA0XHUxMDNhXHUxMDM5XHUxMDAyXHUx''@;'; put 'put ''MDE0XHUxMDNkXHUxMDMxX1x1MTAxMFx1MTAxNFx1MTAwNFx1MTAzYVx1MTAzOVx1MTAxY1x1MTAyY19cdTEwMjFcdTEwMDRcdTEwM2FcdTEwMzlcdTEwMDJcdTEwMmJfXHUxMDE3XHUxMDJmXHUxMDEyXHUxMDM5XHUxMDEzXHUxMDFmXHUxMDMwXHUxMDM4X1x1MTAwMFx1MTAzY1x1MTAyY1x1''@;'; put 'put ''MTAxZVx1MTAxNVx1MTAxMFx1MTAzMVx1MTAzOF9cdTEwMWVcdTEwMzFcdTEwMmNcdTEwMDBcdTEwM2NcdTEwMmNfXHUxMDA1XHUxMDE0XHUxMDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MTAxNFx1MTAzZFx1MTAzMV9cdTEwMWNcdTEwMmNfXHUxMDAyXHUxMDJiX1x1MTAxZlx1''@;'; put 'put ''MTAzMFx1MTAzOF9cdTEwMDBcdTEwM2NcdTEwMmNfXHUxMDFlXHUxMDMxXHUxMDJjX1x1MTAxNFx1MTAzMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUxMDE0XHUxMDNkXHUxMDMxX1x1MTAxY1x1MTAyY19cdTEwMDJcdTEwMmJfXHUxMDFmXHUxMDMwXHUxMDM4X1x1MTAwMFx1MTAzY1x1''@;'; put 'put ''MTAyY19cdTEwMWVcdTEwMzFcdTEwMmNfXHUxMDE0XHUxMDMxIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0g''@;'; put 'put ''WVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUxMDFhXHUxMDE0XHUxMDMxLl0gTFQgW1x1MTAxOVx1MTAzZVx1MTAyY10iLG5leHREYXk6IltcdTEwMTlcdTEwMTRcdTEwMDBcdTEwM2FcdTEwMTZcdTEwM2NcdTEwMTRcdTEwM2FdIExUIFtcdTEwMTlcdTEwM2VcdTEwMmNdIixu''@;'; put 'put ''ZXh0V2VlazoiZGRkZCBMVCBbXHUxMDE5XHUxMDNlXHUxMDJjXSIsbGFzdERheToiW1x1MTAxOVx1MTAxNFx1MTAzMS5cdTEwMDBdIExUIFtcdTEwMTlcdTEwM2VcdTEwMmNdIixsYXN0V2VlazoiW1x1MTAxNVx1MTAzY1x1MTAyZVx1MTAzOFx1MTAwMVx1MTAzMlx1MTAzN1x1MTAxZVx1MTAz''@;'; put 'put ''MVx1MTAyY10gZGRkZCBMVCBbXHUxMDE5XHUxMDNlXHUxMDJjXSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUxMDFjXHUxMDJjXHUxMDE5XHUxMDBhXHUxMDNhXHUxMDM3ICVzIFx1MTAxOVx1MTAzZVx1MTAyYyIscGFzdDoiXHUxMDFjXHUxMDNkXHUxMDE0XHUxMDNh''@;'; put 'put ''XHUxMDAxXHUxMDMyXHUxMDM3XHUxMDFlXHUxMDMxXHUxMDJjICVzIFx1MTAwMCIsczoiXHUxMDA1XHUxMDAwXHUxMDM5XHUxMDAwXHUxMDE0XHUxMDNhLlx1MTAyMVx1MTAxNFx1MTAwYVx1MTAzYVx1MTAzOFx1MTAwNFx1MTAxYVx1MTAzYSIsc3M6IiVkIFx1MTAwNVx1MTAwMFx1MTAzOVx1''@;'; put 'put ''MTAwMFx1MTAxNFx1MTAzN1x1MTAzYSIsbToiXHUxMDEwXHUxMDA1XHUxMDNhXHUxMDE5XHUxMDJkXHUxMDE0XHUxMDA1XHUxMDNhIixtbToiJWQgXHUxMDE5XHUxMDJkXHUxMDE0XHUxMDA1XHUxMDNhIixoOiJcdTEwMTBcdTEwMDVcdTEwM2FcdTEwMTRcdTEwMmNcdTEwMWJcdTEwMmUiLGho''@;'; put 'put ''OiIlZCBcdTEwMTRcdTEwMmNcdTEwMWJcdTEwMmUiLGQ6Ilx1MTAxMFx1MTAwNVx1MTAzYVx1MTAxYlx1MTAwMFx1MTAzYSIsZGQ6IiVkIFx1MTAxYlx1MTAwMFx1MTAzYSIsTToiXHUxMDEwXHUxMDA1XHUxMDNhXHUxMDFjIixNTToiJWQgXHUxMDFjIix5OiJcdTEwMTBcdTEwMDVcdTEwM2Fc''@;'; put 'put ''dTEwMTRcdTEwM2VcdTEwMDVcdTEwM2EiLHl5OiIlZCBcdTEwMTRcdTEwM2VcdTEwMDVcdTEwM2EifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9bXHUxMDQxXHUxMDQyXHUxMDQzXHUxMDQ0XHUxMDQ1XHUxMDQ2XHUxMDQ3XHUxMDQ4XHUxMDQ5XHUxMDQwXS9nLGZ1''@;'; put 'put ''bmN0aW9uKFApe3JldHVybiBnW1BdfSl9LHBvc3Rmb3JtYXQ6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihQKXtyZXR1cm4geVtQXX0pfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oXyg5NzU4NikpfSw2Nzg1OTpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJ''@;'; put 'put ''KXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoIm5iIix7bW9udGhzOiJqYW51YXJfZmVicnVhcl9tYXJzX2FwcmlsX21haV9qdW5pX2p1bGlfYXVndXN0X3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2Rlc2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW4uX2ZlYi5fbWFy''@;'; put 'put ''c19hcHIuX21haV9qdW5pX2p1bGlfYXVnLl9zZXAuX29rdC5fbm92Ll9kZXMuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6InNceGY4bmRhZ19tYW5kYWdfdGlyc2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbFx4ZjhyZGFnIi5zcGxpdCgiXyIpLHdlZWtkYXlz''@;'; put 'put ''U2hvcnQ6InNceGY4Ll9tYS5fdGkuX29uLl90by5fZnIuX2xceGY4LiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoic1x4ZjhfbWFfdGlfb25fdG9fZnJfbFx4ZjgiLnNwbGl0KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06''@;'; put 'put ''c3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1NIFlZWVkiLExMTDoiRC4gTU1NTSBZWVlZIFtrbC5dIEhIOm1tIixMTExMOiJkZGRkIEQuIE1NTU0gWVlZWSBba2wuXSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbaSBkYWcga2wuXSBMVCIsbmV4dERheToiW2kgbW9yZ2VuIGtsLl0g''@;'; put 'put ''TFQiLG5leHRXZWVrOiJkZGRkIFtrbC5dIExUIixsYXN0RGF5OiJbaSBnXHhlNXIga2wuXSBMVCIsbGFzdFdlZWs6Iltmb3JyaWdlXSBkZGRkIFtrbC5dIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvbSAlcyIscGFzdDoiJXMgc2lkZW4iLHM6Im5vZW4gc2VrdW5k''@;'; put 'put ''ZXIiLHNzOiIlZCBzZWt1bmRlciIsbToiZXR0IG1pbnV0dCIsbW06IiVkIG1pbnV0dGVyIixoOiJceGU5biB0aW1lIixoaDoiJWQgdGltZXIiLGQ6Ilx4ZTluIGRhZyIsZGQ6IiVkIGRhZ2VyIix3OiJceGU5biB1a2UiLHd3OiIlZCB1a2VyIixNOiJceGU5biBtXHhlNW5lZCIsTU06IiVkIG1c''@;'; put 'put ''eGU1bmVkZXIiLHk6ImV0dCBceGU1ciIseXk6IiVkIFx4ZTVyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShfKDk3NTg2KSl9LDEzNjQyOmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3Ry''@;'; put 'put ''aWN0Ijt2YXIgeT17MToiXHUwOTY3IiwyOiJcdTA5NjgiLDM6Ilx1MDk2OSIsNDoiXHUwOTZhIiw1OiJcdTA5NmIiLDY6Ilx1MDk2YyIsNzoiXHUwOTZkIiw4OiJcdTA5NmUiLDk6Ilx1MDk2ZiIsMDoiXHUwOTY2In0sZz17Ilx1MDk2NyI6IjEiLCJcdTA5NjgiOiIyIiwiXHUwOTY5IjoiMyIs''@;'; put 'put ''Ilx1MDk2YSI6IjQiLCJcdTA5NmIiOiI1IiwiXHUwOTZjIjoiNiIsIlx1MDk2ZCI6IjciLCJcdTA5NmUiOiI4IiwiXHUwOTZmIjoiOSIsIlx1MDk2NiI6IjAifTtJLmRlZmluZUxvY2FsZSgibmUiLHttb250aHM6Ilx1MDkxY1x1MDkyOFx1MDkzNVx1MDkzMFx1MDk0MF9cdTA5MmJcdTA5NDdc''@;'; put 'put ''dTA5MmNcdTA5NGRcdTA5MzBcdTA5NDFcdTA5MzVcdTA5MzBcdTA5NDBfXHUwOTJlXHUwOTNlXHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDkzZlx1MDkzMl9cdTA5MmVcdTA5MDhfXHUwOTFjXHUwOTQxXHUwOTI4X1x1MDkxY1x1MDk0MVx1MDkzMlx1MDkz''@;'; put 'put ''ZVx1MDkwOF9cdTA5MDVcdTA5MTdcdTA5MzdcdTA5NGRcdTA5MWZfXHUwOTM4XHUwOTQ3XHUwOTJhXHUwOTRkXHUwOTFmXHUwOTQ3XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwX1x1MDkwNVx1MDkxNVx1MDk0ZFx1MDkxZlx1MDk0Ylx1MDkyY1x1MDkzMF9cdTA5MjhcdTA5NGJcdTA5MmRcdTA5''@;'; put 'put ''NDdcdTA5MmVcdTA5NGRcdTA5MmNcdTA5MzBfXHUwOTIxXHUwOTNmXHUwOTM4XHUwOTQ3XHUwOTJlXHUwOTRkXHUwOTJjXHUwOTMwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA5MWNcdTA5MjguX1x1MDkyYlx1MDk0N1x1MDkyY1x1MDk0ZFx1MDkzMFx1MDk0MS5fXHUwOTJlXHUwOTNl''@;'; put 'put ''XHUwOTMwXHUwOTRkXHUwOTFhX1x1MDkwNVx1MDkyYVx1MDk0ZFx1MDkzMFx1MDkzZi5fXHUwOTJlXHUwOTA4X1x1MDkxY1x1MDk0MVx1MDkyOF9cdTA5MWNcdTA5NDFcdTA5MzJcdTA5M2VcdTA5MDguX1x1MDkwNVx1MDkxNy5fXHUwOTM4XHUwOTQ3XHUwOTJhXHUwOTRkXHUwOTFmLl9cdTA5''@;'; put 'put ''MDVcdTA5MTVcdTA5NGRcdTA5MWZcdTA5NGIuX1x1MDkyOFx1MDk0Ylx1MDkyZFx1MDk0Ny5fXHUwOTIxXHUwOTNmXHUwOTM4XHUwOTQ3LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTA5MDZcdTA5MDdcdTA5MjRcdTA5MmNcdTA5M2VcdTA5MzBfXHUwOTM4''@;'; put 'put ''XHUwOTRiXHUwOTJlXHUwOTJjXHUwOTNlXHUwOTMwX1x1MDkyZVx1MDkxOVx1MDk0ZFx1MDkxN1x1MDkzMlx1MDkyY1x1MDkzZVx1MDkzMF9cdTA5MmNcdTA5NDFcdTA5MjdcdTA5MmNcdTA5M2VcdTA5MzBfXHUwOTJjXHUwOTNmXHUwOTM5XHUwOTNmXHUwOTJjXHUwOTNlXHUwOTMwX1x1MDkz''@;'; put 'put ''Nlx1MDk0MVx1MDkxNVx1MDk0ZFx1MDkzMFx1MDkyY1x1MDkzZVx1MDkzMF9cdTA5MzZcdTA5MjhcdTA5M2ZcdTA5MmNcdTA5M2VcdTA5MzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwOTA2XHUwOTA3XHUwOTI0Ll9cdTA5MzhcdTA5NGJcdTA5MmUuX1x1MDkyZVx1MDkxOVx1MDk0''@;'; put 'put ''ZFx1MDkxN1x1MDkzMi5fXHUwOTJjXHUwOTQxXHUwOTI3Ll9cdTA5MmNcdTA5M2ZcdTA5MzlcdTA5M2YuX1x1MDkzNlx1MDk0MVx1MDkxNVx1MDk0ZFx1MDkzMC5fXHUwOTM2XHUwOTI4XHUwOTNmLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwOTA2Ll9cdTA5MzhcdTA5NGIuX1x1MDky''@;'; put 'put ''ZVx1MDkwMi5fXHUwOTJjXHUwOTQxLl9cdTA5MmNcdTA5M2YuX1x1MDkzNlx1MDk0MS5fXHUwOTM2LiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBXHUwOTE1XHUwOTRiIGg6bW0gXHUwOTJjXHUwOTFjXHUwOTQ3IixMVFM6IkFcdTA5MTVc''@;'; put 'put ''dTA5NGIgaDptbTpzcyBcdTA5MmNcdTA5MWNcdTA5NDciLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQVx1MDkxNVx1MDk0YiBoOm1tIFx1MDkyY1x1MDkxY1x1MDk0NyIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEFcdTA5MTVcdTA5NGIgaDpt''@;'; put 'put ''bSBcdTA5MmNcdTA5MWNcdTA5NDcifSxwcmVwYXJzZTpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9bXHUwOTY3XHUwOTY4XHUwOTY5XHUwOTZhXHUwOTZiXHUwOTZjXHUwOTZkXHUwOTZlXHUwOTZmXHUwOTY2XS9nLGZ1bmN0aW9uKFApe3JldHVybiBnW1BdfSl9LHBvc3Rmb3JtYXQ6''@;'; put 'put ''ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvXGQvZyxmdW5jdGlvbihQKXtyZXR1cm4geVtQXX0pfSxtZXJpZGllbVBhcnNlOi9cdTA5MzBcdTA5M2VcdTA5MjRcdTA5M2Z8XHUwOTJjXHUwOTNmXHUwOTM5XHUwOTNlXHUwOTI4fFx1MDkyNlx1MDkzZlx1MDkwOVx1MDkwMVx1MDkzOFx1''@;'; put 'put ''MDk0YnxcdTA5MzhcdTA5M2VcdTA5MDFcdTA5MWQvLG1lcmlkaWVtSG91cjpmdW5jdGlvbih3LFApe3JldHVybiAxMj09PXcmJih3PTApLCJcdTA5MzBcdTA5M2VcdTA5MjRcdTA5M2YiPT09UD93PDQ/dzp3KzEyOiJcdTA5MmNcdTA5M2ZcdTA5MzlcdTA5M2VcdTA5MjgiPT09UD93OiJcdTA5''@;'; put 'put ''MjZcdTA5M2ZcdTA5MDlcdTA5MDFcdTA5MzhcdTA5NGIiPT09UD93Pj0xMD93OncrMTI6Ilx1MDkzOFx1MDkzZVx1MDkwMVx1MDkxZCI9PT1QP3crMTI6dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbih3LFAsRil7cmV0dXJuIHc8Mz8iXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTNmIjp3PDEyPyJc''@;'; put 'put ''dTA5MmNcdTA5M2ZcdTA5MzlcdTA5M2VcdTA5MjgiOnc8MTY/Ilx1MDkyNlx1MDkzZlx1MDkwOVx1MDkwMVx1MDkzOFx1MDk0YiI6dzwyMD8iXHUwOTM4XHUwOTNlXHUwOTAxXHUwOTFkIjoiXHUwOTMwXHUwOTNlXHUwOTI0XHUwOTNmIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA5MDZcdTA5''@;'; put 'put ''MWNdIExUIixuZXh0RGF5OiJbXHUwOTJkXHUwOTRiXHUwOTMyXHUwOTNmXSBMVCIsbmV4dFdlZWs6IltcdTA5MDZcdTA5MDlcdTA5MDFcdTA5MjZcdTA5NGJdIGRkZGRbLF0gTFQiLGxhc3REYXk6IltcdTA5MzlcdTA5M2ZcdTA5MWNcdTA5NGJdIExUIixsYXN0V2VlazoiW1x1MDkxN1x1MDkw''@;'; put 'put ''Zlx1MDkxNVx1MDk0Yl0gZGRkZFssXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXNcdTA5MmVcdTA5M2UiLHBhc3Q6IiVzIFx1MDkwNVx1MDkxN1x1MDkzZVx1MDkyMVx1MDkzZiIsczoiXHUwOTE1XHUwOTQ3XHUwOTM5XHUwOTQwIFx1MDkxNVx1MDk0ZFx1MDkz''@;'; put 'put ''N1x1MDkyMyIsc3M6IiVkIFx1MDkzOFx1MDk0N1x1MDkxNVx1MDk0N1x1MDkyM1x1MDk0ZFx1MDkyMSIsbToiXHUwOTBmXHUwOTE1IFx1MDkyZVx1MDkzZlx1MDkyOFx1MDk0N1x1MDkxZiIsbW06IiVkIFx1MDkyZVx1MDkzZlx1MDkyOFx1MDk0N1x1MDkxZiIsaDoiXHUwOTBmXHUwOTE1IFx1''@;'; put 'put ''MDkxOFx1MDkyM1x1MDk0ZFx1MDkxZlx1MDkzZSIsaGg6IiVkIFx1MDkxOFx1MDkyM1x1MDk0ZFx1MDkxZlx1MDkzZSIsZDoiXHUwOTBmXHUwOTE1IFx1MDkyNlx1MDkzZlx1MDkyOCIsZGQ6IiVkIFx1MDkyNlx1MDkzZlx1MDkyOCIsTToiXHUwOTBmXHUwOTE1IFx1MDkyZVx1MDkzOVx1MDkz''@;'; put 'put ''Zlx1MDkyOFx1MDkzZSIsTU06IiVkIFx1MDkyZVx1MDkzOVx1MDkzZlx1MDkyOFx1MDkzZSIseToiXHUwOTBmXHUwOTE1IFx1MDkyY1x1MDkzMFx1MDk0ZFx1MDkzNyIseXk6IiVkIFx1MDkyY1x1MDkzMFx1MDk0ZFx1MDkzNyJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShfKDk3NTg2KSl9LDk5''@;'; put 'put ''ODc1OmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT0iamFuLl9mZWIuX21ydC5fYXByLl9tZWlfanVuLl9qdWwuX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxnPSJqYW5fZmViX21ydF9hcHJfbWVpX2p1bl9qdWxfYXVnX3NlcF9v''@;'; put 'put ''a3Rfbm92X2RlYyIuc3BsaXQoIl8iKSxCPVsvXmphbi9pLC9eZmViL2ksL14obWFhcnR8bXJ0XC4/KSQvaSwvXmFwci9pLC9ebWVpJC9pLC9eanVuW2kuXT8kL2ksL15qdWxbaS5dPyQvaSwvXmF1Zy9pLC9ec2VwL2ksL15va3QvaSwvXm5vdi9pLC9eZGVjL2ldLHc9L14oamFudWFyaXxmZWJy''@;'; put 'put ''dWFyaXxtYWFydHxhcHJpbHxtZWl8anVbbmxdaXxhdWd1c3R1c3xzZXB0ZW1iZXJ8b2t0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcnxqYW5cLj98ZmViXC4/fG1ydFwuP3xhcHJcLj98anVbbmxdXC4/fGF1Z1wuP3xzZXBcLj98b2t0XC4/fG5vdlwuP3xkZWNcLj8pL2k7SS5kZWZpbmVMb2NhbGUo''@;'; put 'put ''Im5sLWJlIix7bW9udGhzOiJqYW51YXJpX2ZlYnJ1YXJpX21hYXJ0X2FwcmlsX21laV9qdW5pX2p1bGlfYXVndXN0dXNfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6ZnVuY3Rpb24oRixPKXtyZXR1cm4gRj8vLU1NTS0vLnRlc3Qo''@;'; put 'put ''Tyk/Z1tGLm1vbnRoKCldOnlbRi5tb250aCgpXTp5fSxtb250aHNSZWdleDp3LG1vbnRoc1Nob3J0UmVnZXg6dyxtb250aHNTdHJpY3RSZWdleDovXihqYW51YXJpfGZlYnJ1YXJpfG1hYXJ0fGFwcmlsfG1laXxqdVtubF1pfGF1Z3VzdHVzfHNlcHRlbWJlcnxva3RvYmVyfG5vdmVtYmVyfGRl''@;'; put 'put ''Y2VtYmVyKS9pLG1vbnRoc1Nob3J0U3RyaWN0UmVnZXg6L14oamFuXC4/fGZlYlwuP3xtcnRcLj98YXByXC4/fG1laXxqdVtubF1cLj98YXVnXC4/fHNlcFwuP3xva3RcLj98bm92XC4/fGRlY1wuPykvaSxtb250aHNQYXJzZTpCLGxvbmdNb250aHNQYXJzZTpCLHNob3J0TW9udGhzUGFyc2U6''@;'; put 'put ''Qix3ZWVrZGF5czoiem9uZGFnX21hYW5kYWdfZGluc2RhZ193b2Vuc2RhZ19kb25kZXJkYWdfdnJpamRhZ196YXRlcmRhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJ6by5fbWEuX2RpLl93by5fZG8uX3ZyLl96YS4iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InpvX21hX2RpX3dvX2Rv''@;'; put 'put ''X3ZyX3phIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFlZWVkgSEg6''@;'; put 'put ''bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW3ZhbmRhYWcgb21dIExUIixuZXh0RGF5OiJbbW9yZ2VuIG9tXSBMVCIsbmV4dFdlZWs6ImRkZGQgW29tXSBMVCIsbGFzdERheToiW2dpc3RlcmVuIG9tXSBMVCIsbGFzdFdlZWs6IlthZmdlbG9wZW5dIGRkZGQgW29tXSBMVCIsc2FtZUVsc2U6Ikwi''@;'; put 'put ''fSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToib3ZlciAlcyIscGFzdDoiJXMgZ2VsZWRlbiIsczoiZWVuIHBhYXIgc2Vjb25kZW4iLHNzOiIlZCBzZWNvbmRlbiIsbToiXHhlOVx4ZTluIG1pbnV1dCIsbW06IiVkIG1pbnV0ZW4iLGg6Ilx4ZTlceGU5biB1dXIiLGhoOiIlZCB1dXIiLGQ6Ilx4ZTlc''@;'; put 'put ''eGU5biBkYWciLGRkOiIlZCBkYWdlbiIsTToiXHhlOVx4ZTluIG1hYW5kIixNTToiJWQgbWFhbmRlbiIseToiXHhlOVx4ZTluIGphYXIiLHl5OiIlZCBqYWFyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdGV8ZGUpLyxvcmRpbmFsOmZ1bmN0aW9uKEYpe3JldHVybiBGKygx''@;'; put 'put ''PT09Rnx8OD09PUZ8fEY+PTIwPyJzdGUiOiJkZSIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oXyg5NzU4NikpfSw2NTQ0MTpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7dmFyIHk9Imphbi5fZmViLl9tcnQuX2Fwci5fbWVpX2p1bi5fanVsLl9hdWcuX3NlcC5f''@;'; put 'put ''b2t0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksZz0iamFuX2ZlYl9tcnRfYXByX21laV9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZWMiLnNwbGl0KCJfIiksQj1bL15qYW4vaSwvXmZlYi9pLC9eKG1hYXJ0fG1ydFwuPykkL2ksL15hcHIvaSwvXm1laSQvaSwvXmp1bltpLl0/JC9pLC9eanVs''@;'; put 'put ''W2kuXT8kL2ksL15hdWcvaSwvXnNlcC9pLC9eb2t0L2ksL15ub3YvaSwvXmRlYy9pXSx3PS9eKGphbnVhcml8ZmVicnVhcml8bWFhcnR8YXByaWx8bWVpfGp1W25sXWl8YXVndXN0dXN8c2VwdGVtYmVyfG9rdG9iZXJ8bm92ZW1iZXJ8ZGVjZW1iZXJ8amFuXC4/fGZlYlwuP3xtcnRcLj98YXBy''@;'; put 'put ''XC4/fGp1W25sXVwuP3xhdWdcLj98c2VwXC4/fG9rdFwuP3xub3ZcLj98ZGVjXC4/KS9pO0kuZGVmaW5lTG9jYWxlKCJubCIse21vbnRoczoiamFudWFyaV9mZWJydWFyaV9tYWFydF9hcHJpbF9tZWlfanVuaV9qdWxpX2F1Z3VzdHVzX3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2Vt''@;'; put 'put ''YmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OmZ1bmN0aW9uKEYsTyl7cmV0dXJuIEY/Ly1NTU0tLy50ZXN0KE8pP2dbRi5tb250aCgpXTp5W0YubW9udGgoKV06eX0sbW9udGhzUmVnZXg6dyxtb250aHNTaG9ydFJlZ2V4OncsbW9udGhzU3RyaWN0UmVnZXg6L14oamFudWFyaXxmZWJydWFy''@;'; put 'put ''aXxtYWFydHxhcHJpbHxtZWl8anVbbmxdaXxhdWd1c3R1c3xzZXB0ZW1iZXJ8b2t0b2Jlcnxub3ZlbWJlcnxkZWNlbWJlcikvaSxtb250aHNTaG9ydFN0cmljdFJlZ2V4Oi9eKGphblwuP3xmZWJcLj98bXJ0XC4/fGFwclwuP3xtZWl8anVbbmxdXC4/fGF1Z1wuP3xzZXBcLj98b2t0XC4/fG5v''@;'; put 'put ''dlwuP3xkZWNcLj8pL2ksbW9udGhzUGFyc2U6Qixsb25nTW9udGhzUGFyc2U6QixzaG9ydE1vbnRoc1BhcnNlOkIsd2Vla2RheXM6InpvbmRhZ19tYWFuZGFnX2RpbnNkYWdfd29lbnNkYWdfZG9uZGVyZGFnX3ZyaWpkYWdfemF0ZXJkYWciLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiem8u''@;'; put 'put ''X21hLl9kaS5fd28uX2RvLl92ci5femEuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJ6b19tYV9kaV93b19kb192cl96YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQtTU0tWVlZWSIsTEw6''@;'; put 'put ''IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6Ilt2YW5kYWFnIG9tXSBMVCIsbmV4dERheToiW21vcmdlbiBvbV0gTFQiLG5leHRXZWVrOiJkZGRkIFtvbV0gTFQiLGxhc3REYXk6Iltn''@;'; put 'put ''aXN0ZXJlbiBvbV0gTFQiLGxhc3RXZWVrOiJbYWZnZWxvcGVuXSBkZGRkIFtvbV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im92ZXIgJXMiLHBhc3Q6IiVzIGdlbGVkZW4iLHM6ImVlbiBwYWFyIHNlY29uZGVuIixzczoiJWQgc2Vjb25kZW4iLG06Ilx4ZTlceGU5''@;'; put 'put ''biBtaW51dXQiLG1tOiIlZCBtaW51dGVuIixoOiJceGU5XHhlOW4gdXVyIixoaDoiJWQgdXVyIixkOiJceGU5XHhlOW4gZGFnIixkZDoiJWQgZGFnZW4iLHc6Ilx4ZTlceGU5biB3ZWVrIix3dzoiJWQgd2VrZW4iLE06Ilx4ZTlceGU5biBtYWFuZCIsTU06IiVkIG1hYW5kZW4iLHk6Ilx4ZTlc''@;'; put 'put ''eGU5biBqYWFyIix5eToiJWQgamFhciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oc3RlfGRlKS8sb3JkaW5hbDpmdW5jdGlvbihGKXtyZXR1cm4gRisoMT09PUZ8fDg9PT1GfHxGPj0yMD8ic3RlIjoiZGUiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KF8oOTc1ODYpKX0sODEz''@;'; put 'put ''MTE6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJubiIse21vbnRoczoiamFudWFyX2ZlYnJ1YXJfbWFyc19hcHJpbF9tYWlfanVuaV9qdWxpX2F1Z3VzdF9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZXNlbWJlciIuc3BsaXQo''@;'; put 'put ''Il8iKSxtb250aHNTaG9ydDoiamFuLl9mZWIuX21hcnNfYXByLl9tYWlfanVuaV9qdWxpX2F1Zy5fc2VwLl9va3QuX25vdi5fZGVzLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJzdW5kYWdfbVx4ZTVuZGFnX3R5c2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdf''@;'; put 'put ''bGF1cmRhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzdS5fbVx4ZTUuX3R5Ll9vbi5fdG8uX2ZyLl9sYXUuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJzdV9tXHhlNV90eV9vbl90b19mcl9sYSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6''@;'; put 'put ''e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkgW2tsLl0gSDptbSIsTExMTDoiZGRkZCBELiBNTU1NIFlZWVkgW2tsLl0gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0kgZGFnIGtsb2trYV0gTFQi''@;'; put 'put ''LG5leHREYXk6IltJIG1vcmdvbiBrbG9ra2FdIExUIixuZXh0V2VlazoiZGRkZCBba2xva2thXSBMVCIsbGFzdERheToiW0kgZ1x4ZTVyIGtsb2trYV0gTFQiLGxhc3RXZWVrOiJbRlx4ZjhyZWdceGU1YW5kZV0gZGRkZCBba2xva2thXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6''@;'; put 'put ''e2Z1dHVyZToib20gJXMiLHBhc3Q6IiVzIHNpZGFuIixzOiJub2tyZSBzZWt1bmQiLHNzOiIlZCBzZWt1bmQiLG06ImVpdCBtaW51dHQiLG1tOiIlZCBtaW51dHQiLGg6ImVpbiB0aW1lIixoaDoiJWQgdGltYXIiLGQ6ImVpbiBkYWciLGRkOiIlZCBkYWdhciIsdzoiZWkgdmVrZSIsd3c6IiVk''@;'; put 'put ''IHZla2VyIixNOiJlaW4gbVx4ZTVuYWQiLE1NOiIlZCBtXHhlNW5hZGVyIix5OiJlaXQgXHhlNXIiLHl5OiIlZCBceGU1ciJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1cLi8sb3JkaW5hbDoiJWQuIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oXyg5NzU4NikpfSw3MjU2NzpmdW5j''@;'; put 'put ''dGlvbih1ZSxxLF8peyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoIm9jLWxuYyIse21vbnRoczp7c3RhbmRhbG9uZToiZ2VuaVx4ZThyX2ZlYnJpXHhlOHJfbWFyXHhlN19hYnJpbF9tYWlfanVuaF9qdWxoZXRfYWdvc3Rfc2V0ZW1icmVfb2N0XHhmMmJyZV9ub3Zl''@;'; put 'put ''bWJyZV9kZWNlbWJyZSIuc3BsaXQoIl8iKSxmb3JtYXQ6ImRlIGdlbmlceGU4cl9kZSBmZWJyaVx4ZThyX2RlIG1hclx4ZTdfZCdhYnJpbF9kZSBtYWlfZGUganVuaF9kZSBqdWxoZXRfZCdhZ29zdF9kZSBzZXRlbWJyZV9kJ29jdFx4ZjJicmVfZGUgbm92ZW1icmVfZGUgZGVjZW1icmUiLnNw''@;'; put 'put ''bGl0KCJfIiksaXNGb3JtYXQ6L0Rbb0RdPyhccykrTU1NTS99LG1vbnRoc1Nob3J0OiJnZW4uX2ZlYnIuX21hclx4ZTdfYWJyLl9tYWlfanVuaF9qdWxoLl9hZ28uX3NldC5fb2N0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiZGltZW5nZV9k''@;'; put 'put ''aWx1bnNfZGltYXJzX2RpbVx4ZThjcmVzX2Rpalx4ZjJ1c19kaXZlbmRyZXNfZGlzc2FidGUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZGcuX2RsLl9kbS5fZGMuX2RqLl9kdi5fZHMuIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkZ19kbF9kbV9kY19kal9kdl9kcyIuc3BsaXQoIl8i''@;'; put 'put ''KSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gW2RlXSBZWVlZIixsbDoiRCBNTU0gWVlZWSIsTExMOiJEIE1NTU0gW2RlXSBZWVlZIFthXSBIOm1tIixsbGw6IkQgTU1NIFlZWVks''@;'; put 'put ''IEg6bW0iLExMTEw6ImRkZGQgRCBNTU1NIFtkZV0gWVlZWSBbYV0gSDptbSIsbGxsbDoiZGRkIEQgTU1NIFlZWVksIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW3VceGU4aSBhXSBMVCIsbmV4dERheToiW2RlbWFuIGFdIExUIixuZXh0V2VlazoiZGRkZCBbYV0gTFQiLGxhc3REYXk6Iltp''@;'; put 'put ''XHhlOHIgYV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtwYXNzYXQgYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImQnYXF1XHhlZCAlcyIscGFzdDoiZmEgJXMiLHM6InVuYXMgc2Vnb25kYXMiLHNzOiIlZCBzZWdvbmRhcyIsbToidW5hIG1pbnV0YSIsbW06IiVkIG1p''@;'; put 'put ''bnV0YXMiLGg6InVuYSBvcmEiLGhoOiIlZCBvcmFzIixkOiJ1biBqb3JuIixkZDoiJWQgam9ybnMiLE06InVuIG1lcyIsTU06IiVkIG1lc2VzIix5OiJ1biBhbiIseXk6IiVkIGFucyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0ocnxufHR8XHhlOHxhKS8sb3JkaW5hbDpmdW5j''@;'; put 'put ''dGlvbihnLEIpe3ZhciB3PTE9PT1nPyJyIjoyPT09Zz8ibiI6Mz09PWc/InIiOjQ9PT1nPyJ0IjoiXHhlOCI7cmV0dXJuKCJ3Ij09PUJ8fCJXIj09PUIpJiYodz0iYSIpLGcrd30sd2Vlazp7ZG93OjEsZG95OjR9fSl9KF8oOTc1ODYpKX0sNTY5NjI6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rp''@;'; put 'put ''b24oSSl7InVzZSBzdHJpY3QiO3ZhciB5PXsxOiJcdTBhNjciLDI6Ilx1MGE2OCIsMzoiXHUwYTY5Iiw0OiJcdTBhNmEiLDU6Ilx1MGE2YiIsNjoiXHUwYTZjIiw3OiJcdTBhNmQiLDg6Ilx1MGE2ZSIsOToiXHUwYTZmIiwwOiJcdTBhNjYifSxnPXsiXHUwYTY3IjoiMSIsIlx1MGE2OCI6IjIi''@;'; put 'put ''LCJcdTBhNjkiOiIzIiwiXHUwYTZhIjoiNCIsIlx1MGE2YiI6IjUiLCJcdTBhNmMiOiI2IiwiXHUwYTZkIjoiNyIsIlx1MGE2ZSI6IjgiLCJcdTBhNmYiOiI5IiwiXHUwYTY2IjoiMCJ9O0kuZGVmaW5lTG9jYWxlKCJwYS1pbiIse21vbnRoczoiXHUwYTFjXHUwYTI4XHUwYTM1XHUwYTMwXHUw''@;'; put 'put ''YTQwX1x1MGEyYlx1MGEzY1x1MGEzMFx1MGEzNVx1MGEzMFx1MGE0MF9cdTBhMmVcdTBhM2VcdTBhMzBcdTBhMWFfXHUwYTA1XHUwYTJhXHUwYTRkXHUwYTMwXHUwYTQ4XHUwYTMyX1x1MGEyZVx1MGEwOF9cdTBhMWNcdTBhNDJcdTBhMjhfXHUwYTFjXHUwYTQxXHUwYTMyXHUwYTNlXHUwYTA4''@;'; put 'put ''X1x1MGEwNVx1MGExN1x1MGEzOFx1MGEyNF9cdTBhMzhcdTBhMjRcdTBhNzBcdTBhMmNcdTBhMzBfXHUwYTA1XHUwYTE1XHUwYTI0XHUwYTQyXHUwYTJjXHUwYTMwX1x1MGEyOFx1MGEzNVx1MGE3MFx1MGEyY1x1MGEzMF9cdTBhMjZcdTBhMzhcdTBhNzBcdTBhMmNcdTBhMzAiLnNwbGl0KCJf''@;'; put 'put ''IiksbW9udGhzU2hvcnQ6Ilx1MGExY1x1MGEyOFx1MGEzNVx1MGEzMFx1MGE0MF9cdTBhMmJcdTBhM2NcdTBhMzBcdTBhMzVcdTBhMzBcdTBhNDBfXHUwYTJlXHUwYTNlXHUwYTMwXHUwYTFhX1x1MGEwNVx1MGEyYVx1MGE0ZFx1MGEzMFx1MGE0OFx1MGEzMl9cdTBhMmVcdTBhMDhfXHUwYTFj''@;'; put 'put ''XHUwYTQyXHUwYTI4X1x1MGExY1x1MGE0MVx1MGEzMlx1MGEzZVx1MGEwOF9cdTBhMDVcdTBhMTdcdTBhMzhcdTBhMjRfXHUwYTM4XHUwYTI0XHUwYTcwXHUwYTJjXHUwYTMwX1x1MGEwNVx1MGExNVx1MGEyNFx1MGE0Mlx1MGEyY1x1MGEzMF9cdTBhMjhcdTBhMzVcdTBhNzBcdTBhMmNcdTBh''@;'; put 'put ''MzBfXHUwYTI2XHUwYTM4XHUwYTcwXHUwYTJjXHUwYTMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTBhMTBcdTBhMjRcdTBhMzVcdTBhM2VcdTBhMzBfXHUwYTM4XHUwYTRiXHUwYTJlXHUwYTM1XHUwYTNlXHUwYTMwX1x1MGEyZVx1MGE3MFx1MGExN1x1MGEzMlx1MGEzNVx1MGEzZVx1MGEz''@;'; put 'put ''MF9cdTBhMmNcdTBhNDFcdTBhMjdcdTBhMzVcdTBhM2VcdTBhMzBfXHUwYTM1XHUwYTQwXHUwYTMwXHUwYTM1XHUwYTNlXHUwYTMwX1x1MGEzOFx1MGEzY1x1MGE0MVx1MGE3MVx1MGExNVx1MGEzMFx1MGEzNVx1MGEzZVx1MGEzMF9cdTBhMzhcdTBhM2NcdTBhMjhcdTBhNDBcdTBhMWFcdTBh''@;'; put 'put ''MzBcdTBhMzVcdTBhM2VcdTBhMzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwYTEwXHUwYTI0X1x1MGEzOFx1MGE0Ylx1MGEyZV9cdTBhMmVcdTBhNzBcdTBhMTdcdTBhMzJfXHUwYTJjXHUwYTQxXHUwYTI3X1x1MGEzNVx1MGE0MFx1MGEzMF9cdTBhMzhcdTBhM2NcdTBhNDFcdTBh''@;'; put 'put ''MTVcdTBhMzBfXHUwYTM4XHUwYTNjXHUwYTI4XHUwYTQwIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTBhMTBcdTBhMjRfXHUwYTM4XHUwYTRiXHUwYTJlX1x1MGEyZVx1MGE3MFx1MGExN1x1MGEzMl9cdTBhMmNcdTBhNDFcdTBhMjdfXHUwYTM1XHUwYTQwXHUwYTMwX1x1MGEzOFx1MGEz''@;'; put 'put ''Y1x1MGE0MVx1MGExNVx1MGEzMF9cdTBhMzhcdTBhM2NcdTBhMjhcdTBhNDAiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0gXHUwYTM1XHUwYTFjXHUwYTQ3IixMVFM6IkEgaDptbTpzcyBcdTBhMzVcdTBhMWNcdTBhNDciLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0g''@;'; put 'put ''WVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgQSBoOm1tIFx1MGEzNVx1MGExY1x1MGE0NyIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSBcdTBhMzVcdTBhMWNcdTBhNDcifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGEwNVx1MGExY10gTFQiLG5leHREYXk6IltcdTBhMTVcdTBhMzJd''@;'; put 'put ''IExUIixuZXh0V2VlazoiW1x1MGEwNVx1MGExN1x1MGEzMlx1MGEzZV0gZGRkZCwgTFQiLGxhc3REYXk6IltcdTBhMTVcdTBhMzJdIExUIixsYXN0V2VlazoiW1x1MGEyYVx1MGEzZlx1MGExYlx1MGEzMlx1MGE0N10gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1''@;'; put 'put ''cmU6IiVzIFx1MGEzNVx1MGEzZlx1MGE3MVx1MGExYSIscGFzdDoiJXMgXHUwYTJhXHUwYTNmXHUwYTFiXHUwYTMyXHUwYTQ3IixzOiJcdTBhMTVcdTBhNDFcdTBhMWQgXHUwYTM4XHUwYTE1XHUwYTNmXHUwYTcwXHUwYTFmIixzczoiJWQgXHUwYTM4XHUwYTE1XHUwYTNmXHUwYTcwXHUwYTFm''@;'; put 'put ''IixtOiJcdTBhMDdcdTBhMTUgXHUwYTJlXHUwYTNmXHUwYTcwXHUwYTFmIixtbToiJWQgXHUwYTJlXHUwYTNmXHUwYTcwXHUwYTFmIixoOiJcdTBhMDdcdTBhNzFcdTBhMTUgXHUwYTE4XHUwYTcwXHUwYTFmXHUwYTNlIixoaDoiJWQgXHUwYTE4XHUwYTcwXHUwYTFmXHUwYTQ3IixkOiJcdTBh''@;'; put 'put ''MDdcdTBhNzFcdTBhMTUgXHUwYTI2XHUwYTNmXHUwYTI4IixkZDoiJWQgXHUwYTI2XHUwYTNmXHUwYTI4IixNOiJcdTBhMDdcdTBhNzFcdTBhMTUgXHUwYTJlXHUwYTM5XHUwYTQwXHUwYTI4XHUwYTNlIixNTToiJWQgXHUwYTJlXHUwYTM5XHUwYTQwXHUwYTI4XHUwYTQ3Iix5OiJcdTBhMDdc''@;'; put 'put ''dTBhNzFcdTBhMTUgXHUwYTM4XHUwYTNlXHUwYTMyIix5eToiJWQgXHUwYTM4XHUwYTNlXHUwYTMyIn0scHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvW1x1MGE2N1x1MGE2OFx1MGE2OVx1MGE2YVx1MGE2Ylx1MGE2Y1x1MGE2ZFx1MGE2ZVx1MGE2Zlx1MGE2Nl0vZyxm''@;'; put 'put ''dW5jdGlvbihQKXtyZXR1cm4gZ1tQXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oUCl7cmV0dXJuIHlbUF19KX0sbWVyaWRpZW1QYXJzZTovXHUwYTMwXHUwYTNlXHUwYTI0fFx1MGEzOFx1MGEzNVx1MGE0N1x1MGEzMHxcdTBhMjZc''@;'; put 'put ''dTBhNDFcdTBhMmFcdTBhMzlcdTBhM2ZcdTBhMzB8XHUwYTM4XHUwYTNjXHUwYTNlXHUwYTJlLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24odyxQKXtyZXR1cm4gMTI9PT13JiYodz0wKSwiXHUwYTMwXHUwYTNlXHUwYTI0Ij09PVA/dzw0P3c6dysxMjoiXHUwYTM4XHUwYTM1XHUwYTQ3XHUwYTMw''@;'; put 'put ''Ij09PVA/dzoiXHUwYTI2XHUwYTQxXHUwYTJhXHUwYTM5XHUwYTNmXHUwYTMwIj09PVA/dz49MTA/dzp3KzEyOiJcdTBhMzhcdTBhM2NcdTBhM2VcdTBhMmUiPT09UD93KzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24odyxQLEYpe3JldHVybiB3PDQ/Ilx1MGEzMFx1MGEzZVx1MGEyNCI6''@;'; put 'put ''dzwxMD8iXHUwYTM4XHUwYTM1XHUwYTQ3XHUwYTMwIjp3PDE3PyJcdTBhMjZcdTBhNDFcdTBhMmFcdTBhMzlcdTBhM2ZcdTBhMzAiOnc8MjA/Ilx1MGEzOFx1MGEzY1x1MGEzZVx1MGEyZSI6Ilx1MGEzMFx1MGEzZVx1MGEyNCJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShfKDk3NTg2KSl9LDYx''@;'; put 'put ''MDYzOmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT0ic3R5Y3plXHUwMTQ0X2x1dHlfbWFyemVjX2t3aWVjaWVcdTAxNDRfbWFqX2N6ZXJ3aWVjX2xpcGllY19zaWVycGllXHUwMTQ0X3dyemVzaWVcdTAxNDRfcGFcdTAxN2Fkemllcm5pa19saXN0b3Bh''@;'; put 'put ''ZF9ncnVkemllXHUwMTQ0Ii5zcGxpdCgiXyIpLGc9InN0eWN6bmlhX2x1dGVnb19tYXJjYV9rd2lldG5pYV9tYWphX2N6ZXJ3Y2FfbGlwY2Ffc2llcnBuaWFfd3J6ZVx1MDE1Ym5pYV9wYVx1MDE3YWR6aWVybmlrYV9saXN0b3BhZGFfZ3J1ZG5pYSIuc3BsaXQoIl8iKSxCPVsvXnN0eS9pLC9e''@;'; put 'put ''bHV0L2ksL15tYXIvaSwvXmt3aS9pLC9ebWFqL2ksL15jemUvaSwvXmxpcC9pLC9ec2llL2ksL153cnovaSwvXnBhXHUwMTdhL2ksL15saXMvaSwvXmdydS9pXTtmdW5jdGlvbiB3KE8pe3JldHVybiBPJTEwPDUmJk8lMTA+MSYmfn4oTy8xMCklMTAhPTF9ZnVuY3Rpb24gUChPLHosTil7dmFy''@;'; put 'put ''IEw9TysiICI7c3dpdGNoKE4pe2Nhc2Uic3MiOnJldHVybiBMKyh3KE8pPyJzZWt1bmR5Ijoic2VrdW5kIik7Y2FzZSJtIjpyZXR1cm4gej8ibWludXRhIjoibWludXRcdTAxMTkiO2Nhc2UibW0iOnJldHVybiBMKyh3KE8pPyJtaW51dHkiOiJtaW51dCIpO2Nhc2UiaCI6cmV0dXJuIHo/Imdv''@;'; put 'put ''ZHppbmEiOiJnb2R6aW5cdTAxMTkiO2Nhc2UiaGgiOnJldHVybiBMKyh3KE8pPyJnb2R6aW55IjoiZ29kemluIik7Y2FzZSJ3dyI6cmV0dXJuIEwrKHcoTyk/InR5Z29kbmllIjoidHlnb2RuaSIpO2Nhc2UiTU0iOnJldHVybiBMKyh3KE8pPyJtaWVzaVx1MDEwNWNlIjoibWllc2lcdTAxMTlj''@;'; put 'put ''eSIpO2Nhc2UieXkiOnJldHVybiBMKyh3KE8pPyJsYXRhIjoibGF0Iil9fUkuZGVmaW5lTG9jYWxlKCJwbCIse21vbnRoczpmdW5jdGlvbihPLHope3JldHVybiBPPy9EIE1NTU0vLnRlc3Qoeik/Z1tPLm1vbnRoKCldOnlbTy5tb250aCgpXTp5fSxtb250aHNTaG9ydDoic3R5X2x1dF9tYXJf''@;'; put 'put ''a3dpX21hal9jemVfbGlwX3NpZV93cnpfcGFcdTAxN2FfbGlzX2dydSIuc3BsaXQoIl8iKSxtb250aHNQYXJzZTpCLGxvbmdNb250aHNQYXJzZTpCLHNob3J0TW9udGhzUGFyc2U6Qix3ZWVrZGF5czoibmllZHppZWxhX3BvbmllZHppYVx1MDE0MmVrX3d0b3Jla19cdTAxNWJyb2RhX2N6d2Fy''@;'; put 'put ''dGVrX3BpXHUwMTA1dGVrX3NvYm90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZHpfcG9uX3d0X1x1MDE1YnJfY3p3X3B0X3NvYiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiTmRfUG5fV3RfXHUwMTVhcl9Del9QdF9TbyIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhI''@;'; put 'put ''Om1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltEemlcdTAxNWIgb10gTFQiLG5leHREYXk6IltKdXRybyBvXSBM''@;'; put 'put ''VCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbVyBuaWVkemllbFx1MDExOSBvXSBMVCI7Y2FzZSAyOnJldHVybiJbV2Ugd3RvcmVrIG9dIExUIjtjYXNlIDM6cmV0dXJuIltXIFx1MDE1YnJvZFx1MDExOSBvXSBMVCI7Y2FzZSA2OnJldHVy''@;'; put 'put ''biJbVyBzb2JvdFx1MDExOSBvXSBMVCI7ZGVmYXVsdDpyZXR1cm4iW1ddIGRkZGQgW29dIExUIn19LGxhc3REYXk6IltXY3pvcmFqIG9dIExUIixsYXN0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIltXIHplc3pcdTAxNDJcdTAxMDUgbmllZHppZWxc''@;'; put 'put ''dTAxMTkgb10gTFQiO2Nhc2UgMzpyZXR1cm4iW1cgemVzelx1MDE0Mlx1MDEwNSBcdTAxNWJyb2RcdTAxMTkgb10gTFQiO2Nhc2UgNjpyZXR1cm4iW1cgemVzelx1MDE0Mlx1MDEwNSBzb2JvdFx1MDExOSBvXSBMVCI7ZGVmYXVsdDpyZXR1cm4iW1cgemVzelx1MDE0MnldIGRkZGQgW29dIExU''@;'; put 'put ''In19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InphICVzIixwYXN0OiIlcyB0ZW11IixzOiJraWxrYSBzZWt1bmQiLHNzOlAsbTpQLG1tOlAsaDpQLGhoOlAsZDoiMSBkemllXHUwMTQ0IixkZDoiJWQgZG5pIix3OiJ0eWR6aWVcdTAxNDQiLHd3OlAsTToibWllc2lcdTAx''@;'; put 'put ''MDVjIixNTTpQLHk6InJvayIseXk6UH0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShfKDk3NTg2KSl9LDk3NDc2OmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxv''@;'; put 'put ''Y2FsZSgicHQtYnIiLHttb250aHM6ImphbmVpcm9fZmV2ZXJlaXJvX21hclx4ZTdvX2FicmlsX21haW9fanVuaG9fanVsaG9fYWdvc3RvX3NldGVtYnJvX291dHVicm9fbm92ZW1icm9fZGV6ZW1icm8iLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZXZfbWFyX2Ficl9tYWlfanVuX2p1''@;'; put 'put ''bF9hZ29fc2V0X291dF9ub3ZfZGV6Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJkb21pbmdvX3NlZ3VuZGEtZmVpcmFfdGVyXHhlN2EtZmVpcmFfcXVhcnRhLWZlaXJhX3F1aW50YS1mZWlyYV9zZXh0YS1mZWlyYV9zXHhlMWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiZG9tX3NlZ190''@;'; put 'put ''ZXJfcXVhX3F1aV9zZXhfc1x4ZTFiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJkb18yXHhhYV8zXHhhYV80XHhhYV81XHhhYV82XHhhYV9zXHhlMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoi''@;'; put 'put ''REQvTU0vWVlZWSIsTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSIsTExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkgW1x4ZTBzXSBISDptbSIsTExMTDoiZGRkZCwgRCBbZGVdIE1NTU0gW2RlXSBZWVlZIFtceGUwc10gSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW0hvamUgXHhlMHNdIExU''@;'; put 'put ''IixuZXh0RGF5OiJbQW1hbmhceGUzIFx4ZTBzXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x4ZTBzXSBMVCIsbGFzdERheToiW09udGVtIFx4ZTBzXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuZGF5KCl8fDY9PT10aGlzLmRheSgpPyJbXHhkYWx0aW1vXSBkZGRkIFtc''@;'; put 'put ''eGUwc10gTFQiOiJbXHhkYWx0aW1hXSBkZGRkIFtceGUwc10gTFQifSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJlbSAlcyIscGFzdDoiaFx4ZTEgJXMiLHM6InBvdWNvcyBzZWd1bmRvcyIsc3M6IiVkIHNlZ3VuZG9zIixtOiJ1bSBtaW51dG8iLG1tOiIlZCBtaW51dG9z''@;'; put 'put ''IixoOiJ1bWEgaG9yYSIsaGg6IiVkIGhvcmFzIixkOiJ1bSBkaWEiLGRkOiIlZCBkaWFzIixNOiJ1bSBtXHhlYXMiLE1NOiIlZCBtZXNlcyIseToidW0gYW5vIix5eToiJWQgYW5vcyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn1ceGJhLyxvcmRpbmFsOiIlZFx4YmEiLGludmFs''@;'; put 'put ''aWREYXRlOiJEYXRhIGludlx4ZTFsaWRhIn0pfShfKDk3NTg2KSl9LDc4NzE5OmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgicHQiLHttb250aHM6ImphbmVpcm9fZmV2ZXJlaXJvX21hclx4ZTdvX2FicmlsX21haW9fanVuaG9fanVs''@;'; put 'put ''aG9fYWdvc3RvX3NldGVtYnJvX291dHVicm9fbm92ZW1icm9fZGV6ZW1icm8iLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbl9mZXZfbWFyX2Ficl9tYWlfanVuX2p1bF9hZ29fc2V0X291dF9ub3ZfZGV6Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJEb21pbmdvX1NlZ3VuZGEtZmVpcmFfVGVy''@;'; put 'put ''XHhlN2EtZmVpcmFfUXVhcnRhLWZlaXJhX1F1aW50YS1mZWlyYV9TZXh0YS1mZWlyYV9TXHhlMWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiRG9tX1NlZ19UZXJfUXVhX1F1aV9TZXhfU1x4ZTFiIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJEb18yXHhhYV8zXHhhYV80XHhhYV81''@;'; put 'put ''XHhhYV82XHhhYV9TXHhlMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgW2RlXSBNTU1NIFtkZV0gWVlZWSIsTExMOiJEIFtkZV0gTU1NTSBbZGVdIFlZWVkgSEg6''@;'; put 'put ''bW0iLExMTEw6ImRkZGQsIEQgW2RlXSBNTU1NIFtkZV0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSG9qZSBceGUwc10gTFQiLG5leHREYXk6IltBbWFuaFx4ZTMgXHhlMHNdIExUIixuZXh0V2VlazoiZGRkZCBbXHhlMHNdIExUIixsYXN0RGF5OiJbT250ZW0gXHhlMHNdIExU''@;'; put 'put ''IixsYXN0V2VlazpmdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy5kYXkoKXx8Nj09PXRoaXMuZGF5KCk/IltceGRhbHRpbW9dIGRkZGQgW1x4ZTBzXSBMVCI6IltceGRhbHRpbWFdIGRkZGQgW1x4ZTBzXSBMVCJ9LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6ImVtICVzIixw''@;'; put 'put ''YXN0OiJoXHhlMSAlcyIsczoic2VndW5kb3MiLHNzOiIlZCBzZWd1bmRvcyIsbToidW0gbWludXRvIixtbToiJWQgbWludXRvcyIsaDoidW1hIGhvcmEiLGhoOiIlZCBob3JhcyIsZDoidW0gZGlhIixkZDoiJWQgZGlhcyIsdzoidW1hIHNlbWFuYSIsd3c6IiVkIHNlbWFuYXMiLE06InVtIG1c''@;'; put 'put ''eGVhcyIsTU06IiVkIG1lc2VzIix5OiJ1bSBhbm8iLHl5OiIlZCBhbm9zIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVx4YmEvLG9yZGluYWw6IiVkXHhiYSIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KF8oOTc1ODYpKX0sNTEwMDQ6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24o''@;'; put 'put ''SSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHkoQix3LFApe3ZhciBPPSIgIjtyZXR1cm4oQiUxMDA+PTIwfHxCPj0xMDAmJkIlMTAwPT0wKSYmKE89IiBkZSAiKSxCK08re3NzOiJzZWN1bmRlIixtbToibWludXRlIixoaDoib3JlIixkZDoiemlsZSIsd3c6InNcdTAxMDNwdFx1MDEwM21ceGUy''@;'; put 'put ''bmkiLE1NOiJsdW5pIix5eToiYW5pIn1bUF19SS5kZWZpbmVMb2NhbGUoInJvIix7bW9udGhzOiJpYW51YXJpZV9mZWJydWFyaWVfbWFydGllX2FwcmlsaWVfbWFpX2l1bmllX2l1bGllX2F1Z3VzdF9zZXB0ZW1icmllX29jdG9tYnJpZV9ub2llbWJyaWVfZGVjZW1icmllIi5zcGxpdCgiXyIp''@;'; put 'put ''LG1vbnRoc1Nob3J0OiJpYW4uX2ZlYi5fbWFydC5fYXByLl9tYWlfaXVuLl9pdWwuX2F1Zy5fc2VwdC5fb2N0Ll9ub3YuX2RlYy4iLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiZHVtaW5pY1x1MDEwM19sdW5pX21hclx1MDIxYmlfbWllcmN1cmlfam9pX3ZpbmVy''@;'; put 'put ''aV9zXHhlMm1iXHUwMTAzdFx1MDEwMyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJEdW1fTHVuX01hcl9NaWVfSm9pX1Zpbl9TXHhlMm0iLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkR1X0x1X01hX01pX0pvX1ZpX1NceGUyIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDpt''@;'; put 'put ''bSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbYXppIGxhXSBMVCIsbmV4dERheToiW21ceGUyaW5lIGxhXSBMVCIsbmV4''@;'; put 'put ''dFdlZWs6ImRkZGQgW2xhXSBMVCIsbGFzdERheToiW2llcmkgbGFdIExUIixsYXN0V2VlazoiW2Zvc3RhXSBkZGRkIFtsYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InBlc3RlICVzIixwYXN0OiIlcyBceGVlbiB1cm1cdTAxMDMiLHM6ImNceGUydGV2YSBzZWN1''@;'; put 'put ''bmRlIixzczp5LG06InVuIG1pbnV0IixtbTp5LGg6Im8gb3JcdTAxMDMiLGhoOnksZDoibyB6aSIsZGQ6eSx3OiJvIHNcdTAxMDNwdFx1MDEwM21ceGUyblx1MDEwMyIsd3c6eSxNOiJvIGx1blx1MDEwMyIsTU06eSx5OiJ1biBhbiIseXk6eX0sd2Vlazp7ZG93OjEsZG95Ojd9fSl9KF8oOTc1''@;'; put 'put ''ODYpKX0sNTEzMjY6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGcoUCxGLE8pe3JldHVybiJtIj09PU8/Rj8iXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDMwIjoiXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDQz''@;'; put 'put ''IjpQKyIgIitmdW5jdGlvbiB5KFAsRil7dmFyIE89UC5zcGxpdCgiXyIpO3JldHVybiBGJTEwPT0xJiZGJTEwMCE9MTE/T1swXTpGJTEwPj0yJiZGJTEwPD00JiYoRiUxMDA8MTB8fEYlMTAwPj0yMCk/T1sxXTpPWzJdfSh7c3M6Rj8iXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUw''@;'; put 'put ''NDM0XHUwNDMwX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQ0Yl9cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiOiJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0NDNfXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNk''@;'; put 'put ''XHUwNDM0XHUwNDRiX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCIsbW06Rj8iXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDMwX1x1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQ0Yl9cdTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDIiOiJc''@;'; put 'put ''dTA0M2NcdTA0MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0NDNfXHUwNDNjXHUwNDM4XHUwNDNkXHUwNDQzXHUwNDQyXHUwNDRiX1x1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiIsaGg6Ilx1MDQ0N1x1MDQzMFx1MDQ0MV9cdTA0NDdcdTA0MzBcdTA0NDFcdTA0MzBfXHUwNDQ3XHUwNDMw''@;'; put 'put ''XHUwNDQxXHUwNDNlXHUwNDMyIixkZDoiXHUwNDM0XHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzNFx1MDQzZFx1MDQ0Zl9cdTA0MzRcdTA0M2RcdTA0MzVcdTA0MzkiLHd3OiJcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0NGZfXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNi''@;'; put 'put ''XHUwNDM4X1x1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzYlx1MDQ0YyIsTU06Ilx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQ0Zlx1MDQ0Nl9cdTA0M2NcdTA0MzVcdTA0NDFcdTA0NGZcdTA0NDZcdTA0MzBfXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDRmXHUwNDQ2XHUwNDM1XHUwNDMyIix5eToi''@;'; put 'put ''XHUwNDMzXHUwNDNlXHUwNDM0X1x1MDQzM1x1MDQzZVx1MDQzNFx1MDQzMF9cdTA0M2JcdTA0MzVcdTA0NDIifVtPXSwrUCl9dmFyIEI9Wy9eXHUwNDRmXHUwNDNkXHUwNDMyL2ksL15cdTA0NDRcdTA0MzVcdTA0MzIvaSwvXlx1MDQzY1x1MDQzMFx1MDQ0MC9pLC9eXHUwNDMwXHUwNDNmXHUw''@;'; put 'put ''NDQwL2ksL15cdTA0M2NcdTA0MzBbXHUwNDM5XHUwNDRmXS9pLC9eXHUwNDM4XHUwNDRlXHUwNDNkL2ksL15cdTA0MzhcdTA0NGVcdTA0M2IvaSwvXlx1MDQzMFx1MDQzMlx1MDQzMy9pLC9eXHUwNDQxXHUwNDM1XHUwNDNkL2ksL15cdTA0M2VcdTA0M2FcdTA0NDIvaSwvXlx1MDQzZFx1MDQz''@;'; put 'put ''ZVx1MDQ0Zi9pLC9eXHUwNDM0XHUwNDM1XHUwNDNhL2ldO0kuZGVmaW5lTG9jYWxlKCJydSIse21vbnRoczp7Zm9ybWF0OiJcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0NDBcdTA0NGZfXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNiXHUwNDRmX1x1MDQzY1x1MDQzMFx1''@;'; put 'put ''MDQ0MFx1MDQ0Mlx1MDQzMF9cdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JcdTA0NGZfXHUwNDNjXHUwNDMwXHUwNDRmX1x1MDQzOFx1MDQ0ZVx1MDQzZFx1MDQ0Zl9cdTA0MzhcdTA0NGVcdTA0M2JcdTA0NGZfXHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyXHUwNDMw''@;'; put 'put ''X1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Zl9cdTA0M2VcdTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBcdTA0NGZfXHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDRmX1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzMVx1MDQ0''@;'; put 'put ''MFx1MDQ0ZiIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0NDBcdTA0NGNfXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNiXHUwNDRjX1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0''@;'; put 'put ''M2JcdTA0NGNfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQzOFx1MDQ0ZVx1MDQzZFx1MDQ0Y19cdTA0MzhcdTA0NGVcdTA0M2JcdTA0NGNfXHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyX1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQ0Y19c''@;'; put 'put ''dTA0M2VcdTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBcdTA0NGNfXHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDRjX1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzMVx1MDQ0MFx1MDQ0YyIuc3BsaXQoIl8iKX0sbW9udGhzU2hvcnQ6e2Zvcm1hdDoiXHUwNDRmXHUw''@;'; put 'put ''NDNkXHUwNDMyLl9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDAuX1x1MDQzY1x1MDQzMFx1MDQ0MC5fXHUwNDMwXHUwNDNmXHUwNDQwLl9cdTA0M2NcdTA0MzBcdTA0NGZfXHUwNDM4XHUwNDRlXHUwNDNkXHUwNDRmX1x1MDQzOFx1MDQ0ZVx1MDQzYlx1MDQ0Zl9cdTA0MzBcdTA0MzJcdTA0MzMu''@;'; put 'put ''X1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mi5fXHUwNDNlXHUwNDNhXHUwNDQyLl9cdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzEuX1x1MDQzNFx1MDQzNVx1MDQzYS4iLnNwbGl0KCJfIiksc3RhbmRhbG9uZToiXHUwNDRmXHUwNDNkXHUwNDMyLl9cdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDAuX1x1''@;'; put 'put ''MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDAuX1x1MDQzY1x1MDQzMFx1MDQzOV9cdTA0MzhcdTA0NGVcdTA0M2RcdTA0NGNfXHUwNDM4XHUwNDRlXHUwNDNiXHUwNDRjX1x1MDQzMFx1MDQzMlx1MDQzMy5fXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyLl9cdTA0M2Vc''@;'; put 'put ''dTA0M2FcdTA0NDIuX1x1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMS5fXHUwNDM0XHUwNDM1XHUwNDNhLiIuc3BsaXQoIl8iKX0sd2Vla2RheXM6e3N0YW5kYWxvbmU6Ilx1MDQzMlx1MDQzZVx1MDQ0MVx1MDQzYVx1MDQ0MFx1MDQzNVx1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Y1x1MDQzNV9cdTA0''@;'; put 'put ''M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0NGNcdTA0M2RcdTA0MzhcdTA0M2FfXHUwNDMyXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDNkXHUwNDM4XHUwNDNhX1x1MDQ0MVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzMF9cdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0''@;'; put 'put ''MzVcdTA0NDBcdTA0MzNfXHUwNDNmXHUwNDRmXHUwNDQyXHUwNDNkXHUwNDM4XHUwNDQ2XHUwNDMwX1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzMCIuc3BsaXQoIl8iKSxmb3JtYXQ6Ilx1MDQzMlx1MDQzZVx1MDQ0MVx1MDQzYVx1MDQ0MFx1MDQzNVx1MDQ0MVx1''@;'; put 'put ''MDQzNVx1MDQzZFx1MDQ0Y1x1MDQzNV9cdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0M2JcdTA0NGNcdTA0M2RcdTA0MzhcdTA0M2FfXHUwNDMyXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDNkXHUwNDM4XHUwNDNhX1x1MDQ0MVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQ0M19c''@;'; put 'put ''dTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0MzVcdTA0NDBcdTA0MzNfXHUwNDNmXHUwNDRmXHUwNDQyXHUwNDNkXHUwNDM4XHUwNDQ2XHUwNDQzX1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQ0MyIuc3BsaXQoIl8iKSxpc0Zvcm1hdDovXFsgP1tcdTA0MTJcdTA0''@;'; put 'put ''MzJdID8oPzpcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2JcdTA0NDNcdTA0NGV8XHUwNDQxXHUwNDNiXHUwNDM1XHUwNDM0XHUwNDQzXHUwNDRlXHUwNDQ5XHUwNDQzXHUwNDRlfFx1MDQ0ZFx1MDQ0Mlx1MDQ0Myk/ID9dID9kZGRkL30sd2Vla2RheXNTaG9ydDoiXHUwNDMyXHUwNDQx''@;'; put 'put ''X1x1MDQzZlx1MDQzZF9cdTA0MzJcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQ0Ml9cdTA0M2ZcdTA0NDJfXHUwNDQxXHUwNDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0MzJcdTA0NDFfXHUwNDNmXHUwNDNkX1x1MDQzMlx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUw''@;'; put 'put ''NDQyX1x1MDQzZlx1MDQ0Ml9cdTA0NDFcdTA0MzEiLnNwbGl0KCJfIiksbW9udGhzUGFyc2U6Qixsb25nTW9udGhzUGFyc2U6QixzaG9ydE1vbnRoc1BhcnNlOkIsbW9udGhzUmVnZXg6L14oXHUwNDRmXHUwNDNkXHUwNDMyXHUwNDMwXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDRmXHUwNDNk''@;'; put 'put ''XHUwNDMyXC4/fFx1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MFx1MDQzMFx1MDQzYltcdTA0NGNcdTA0NGZdfFx1MDQ0NFx1MDQzNVx1MDQzMlx1MDQ0MD9cLj98XHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyXHUwNDMwP3xcdTA0M2NcdTA0MzBcdTA0NDBcLj98XHUwNDMwXHUwNDNmXHUwNDQwXHUw''@;'; put 'put ''NDM1XHUwNDNiW1x1MDQ0Y1x1MDQ0Zl18XHUwNDMwXHUwNDNmXHUwNDQwXC4/fFx1MDQzY1x1MDQzMFtcdTA0MzlcdTA0NGZdfFx1MDQzOFx1MDQ0ZVx1MDQzZFtcdTA0NGNcdTA0NGZdfFx1MDQzOFx1MDQ0ZVx1MDQzZFwuP3xcdTA0MzhcdTA0NGVcdTA0M2JbXHUwNDRjXHUwNDRmXXxcdTA0''@;'; put 'put ''MzhcdTA0NGVcdTA0M2JcLj98XHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyXHUwNDMwP3xcdTA0MzBcdTA0MzJcdTA0MzNcLj98XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQy''@;'; put 'put ''P1wuP3xcdTA0M2VcdTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBbXHUwNDRjXHUwNDRmXXxcdTA0M2VcdTA0M2FcdTA0NDJcLj98XHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Y1x1MDQ0Zl18XHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxP1wuP3xcdTA0MzRcdTA0MzVc''@;'; put 'put ''dTA0M2FcdTA0MzBcdTA0MzFcdTA0NDBbXHUwNDRjXHUwNDRmXXxcdTA0MzRcdTA0MzVcdTA0M2FcLj8pL2ksbW9udGhzU2hvcnRSZWdleDovXihcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0NDBbXHUwNDRjXHUwNDRmXXxcdTA0NGZcdTA0M2RcdTA0MzJcLj98XHUwNDQ0XHUwNDM1XHUw''@;'; put 'put ''NDMyXHUwNDQwXHUwNDMwXHUwNDNiW1x1MDQ0Y1x1MDQ0Zl18XHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwP1wuP3xcdTA0M2NcdTA0MzBcdTA0NDBcdTA0NDJcdTA0MzA/fFx1MDQzY1x1MDQzMFx1MDQ0MFwuP3xcdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JbXHUwNDRjXHUwNDRmXXxc''@;'; put 'put ''dTA0MzBcdTA0M2ZcdTA0NDBcLj98XHUwNDNjXHUwNDMwW1x1MDQzOVx1MDQ0Zl18XHUwNDM4XHUwNDRlXHUwNDNkW1x1MDQ0Y1x1MDQ0Zl18XHUwNDM4XHUwNDRlXHUwNDNkXC4/fFx1MDQzOFx1MDQ0ZVx1MDQzYltcdTA0NGNcdTA0NGZdfFx1MDQzOFx1MDQ0ZVx1MDQzYlwuP3xcdTA0MzBc''@;'; put 'put ''dTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJcdTA0MzA/fFx1MDQzMFx1MDQzMlx1MDQzM1wuP3xcdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBbXHUwNDRjXHUwNDRmXXxcdTA0NDFcdTA0MzVcdTA0M2RcdTA0NDI/XC4/fFx1MDQzZVx1MDQzYVx1MDQ0Mlx1''@;'; put 'put ''MDQ0Zlx1MDQzMVx1MDQ0MFtcdTA0NGNcdTA0NGZdfFx1MDQzZVx1MDQzYVx1MDQ0MlwuP3xcdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzFcdTA0NDBbXHUwNDRjXHUwNDRmXXxcdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzE/XC4/fFx1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzMVx1MDQ0MFtc''@;'; put 'put ''dTA0NGNcdTA0NGZdfFx1MDQzNFx1MDQzNVx1MDQzYVwuPykvaSxtb250aHNTdHJpY3RSZWdleDovXihcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0NDBbXHUwNDRmXHUwNDRjXXxcdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDBcdTA0MzBcdTA0M2JbXHUwNDRmXHUwNDRjXXxcdTA0M2NcdTA0''@;'; put 'put ''MzBcdTA0NDBcdTA0NDJcdTA0MzA/fFx1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzYltcdTA0NGZcdTA0NGNdfFx1MDQzY1x1MDQzMFtcdTA0NGZcdTA0MzldfFx1MDQzOFx1MDQ0ZVx1MDQzZFtcdTA0NGZcdTA0NGNdfFx1MDQzOFx1MDQ0ZVx1MDQzYltcdTA0NGZcdTA0NGNdfFx1MDQz''@;'; put 'put ''MFx1MDQzMlx1MDQzM1x1MDQ0M1x1MDQ0MVx1MDQ0Mlx1MDQzMD98XHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Zlx1MDQ0Y118XHUwNDNlXHUwNDNhXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwW1x1MDQ0Zlx1MDQ0Y118XHUwNDNkXHUwNDNlXHUwNDRm''@;'; put 'put ''XHUwNDMxXHUwNDQwW1x1MDQ0Zlx1MDQ0Y118XHUwNDM0XHUwNDM1XHUwNDNhXHUwNDMwXHUwNDMxXHUwNDQwW1x1MDQ0Zlx1MDQ0Y10pL2ksbW9udGhzU2hvcnRTdHJpY3RSZWdleDovXihcdTA0NGZcdTA0M2RcdTA0MzJcLnxcdTA0NDRcdTA0MzVcdTA0MzJcdTA0NDA/XC58XHUwNDNjXHUw''@;'; put 'put ''NDMwXHUwNDQwW1x1MDQ0Mi5dfFx1MDQzMFx1MDQzZlx1MDQ0MFwufFx1MDQzY1x1MDQzMFtcdTA0NGZcdTA0MzldfFx1MDQzOFx1MDQ0ZVx1MDQzZFtcdTA0NGNcdTA0NGYuXXxcdTA0MzhcdTA0NGVcdTA0M2JbXHUwNDRjXHUwNDRmLl18XHUwNDMwXHUwNDMyXHUwNDMzXC58XHUwNDQxXHUw''@;'; put 'put ''NDM1XHUwNDNkXHUwNDQyP1wufFx1MDQzZVx1MDQzYVx1MDQ0MlwufFx1MDQzZFx1MDQzZVx1MDQ0Zlx1MDQzMT9cLnxcdTA0MzRcdTA0MzVcdTA0M2FcLikvaSxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIFx1''@;'; put 'put ''MDQzMy4iLExMTDoiRCBNTU1NIFlZWVkgXHUwNDMzLiwgSDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVkgXHUwNDMzLiwgSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNDIxXHUwNDM1XHUwNDMzXHUwNDNlXHUwNDM0XHUwNDNkXHUwNDRmLCBcdTA0MzJdIExUIixuZXh0RGF5OiJb''@;'; put 'put ''XHUwNDE3XHUwNDMwXHUwNDMyXHUwNDQyXHUwNDQwXHUwNDMwLCBcdTA0MzJdIExUIixsYXN0RGF5OiJbXHUwNDEyXHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDMwLCBcdTA0MzJdIExUIixuZXh0V2VlazpmdW5jdGlvbihQKXtpZihQLndlZWsoKT09PXRoaXMud2VlaygpKXJldHVybiAyPT09dGhp''@;'; put 'put ''cy5kYXkoKT8iW1x1MDQxMlx1MDQzZV0gZGRkZCwgW1x1MDQzMl0gTFQiOiJbXHUwNDEyXSBkZGRkLCBbXHUwNDMyXSBMVCI7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW1x1MDQxMiBcdTA0NDFcdTA0M2JcdTA0MzVcdTA0MzRcdTA0NDNcdTA0NGVcdTA0NDlcdTA0MzVcdTA0''@;'; put 'put ''MzVdIGRkZGQsIFtcdTA0MzJdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpyZXR1cm4iW1x1MDQxMiBcdTA0NDFcdTA0M2JcdTA0MzVcdTA0MzRcdTA0NDNcdTA0NGVcdTA0NDlcdTA0MzhcdTA0MzldIGRkZGQsIFtcdTA0MzJdIExUIjtjYXNlIDM6Y2FzZSA1OmNhc2UgNjpyZXR1cm4iW1x1''@;'; put 'put ''MDQxMiBcdTA0NDFcdTA0M2JcdTA0MzVcdTA0MzRcdTA0NDNcdTA0NGVcdTA0NDlcdTA0NDNcdTA0NGVdIGRkZGQsIFtcdTA0MzJdIExUIn19LGxhc3RXZWVrOmZ1bmN0aW9uKFApe2lmKFAud2VlaygpPT09dGhpcy53ZWVrKCkpcmV0dXJuIDI9PT10aGlzLmRheSgpPyJbXHUwNDEyXHUwNDNl''@;'; put 'put ''XSBkZGRkLCBbXHUwNDMyXSBMVCI6IltcdTA0MTJdIGRkZGQsIFtcdTA0MzJdIExUIjtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbXHUwNDEyIFx1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQzZVx1MDQzNV0gZGRkZCwgW1x1MDQzMl0gTFQiO2Nhc2UgMTpjYXNl''@;'; put 'put ''IDI6Y2FzZSA0OnJldHVybiJbXHUwNDEyIFx1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQ0Ylx1MDQzOV0gZGRkZCwgW1x1MDQzMl0gTFQiO2Nhc2UgMzpjYXNlIDU6Y2FzZSA2OnJldHVybiJbXHUwNDEyIFx1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQ0M1x1MDQ0''@;'; put 'put ''ZV0gZGRkZCwgW1x1MDQzMl0gTFQifX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDM1XHUwNDM3ICVzIixwYXN0OiIlcyBcdTA0M2RcdTA0MzBcdTA0MzdcdTA0MzBcdTA0MzQiLHM6Ilx1MDQzZFx1MDQzNVx1MDQ0MVx1MDQzYVx1''@;'; put 'put ''MDQzZVx1MDQzYlx1MDQ0Y1x1MDQzYVx1MDQzZSBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiLHNzOmcsbTpnLG1tOmcsaDoiXHUwNDQ3XHUwNDMwXHUwNDQxIixoaDpnLGQ6Ilx1MDQzNFx1MDQzNVx1MDQzZFx1MDQ0YyIsZGQ6Zyx3OiJcdTA0M2RcdTA0MzVcdTA0MzRc''@;'; put 'put ''dTA0MzVcdTA0M2JcdTA0NGYiLHd3OmcsTToiXHUwNDNjXHUwNDM1XHUwNDQxXHUwNDRmXHUwNDQ2IixNTTpnLHk6Ilx1MDQzM1x1MDQzZVx1MDQzNCIseXk6Z30sbWVyaWRpZW1QYXJzZTovXHUwNDNkXHUwNDNlXHUwNDQ3XHUwNDM4fFx1MDQ0M1x1MDQ0Mlx1MDQ0MFx1MDQzMHxcdTA0MzRc''@;'; put 'put ''dTA0M2RcdTA0NGZ8XHUwNDMyXHUwNDM1XHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDMwL2ksaXNQTTpmdW5jdGlvbihQKXtyZXR1cm4vXihcdTA0MzRcdTA0M2RcdTA0NGZ8XHUwNDMyXHUwNDM1XHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDMwKSQvLnRlc3QoUCl9LG1lcmlkaWVtOmZ1bmN0aW9uKFAs''@;'; put 'put ''RixPKXtyZXR1cm4gUDw0PyJcdTA0M2RcdTA0M2VcdTA0NDdcdTA0MzgiOlA8MTI/Ilx1MDQ0M1x1MDQ0Mlx1MDQ0MFx1MDQzMCI6UDwxNz8iXHUwNDM0XHUwNDNkXHUwNDRmIjoiXHUwNDMyXHUwNDM1XHUwNDQ3XHUwNDM1XHUwNDQwXHUwNDMwIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTov''@;'; put 'put ''XGR7MSwyfS0oXHUwNDM5fFx1MDQzM1x1MDQzZXxcdTA0NGYpLyxvcmRpbmFsOmZ1bmN0aW9uKFAsRil7c3dpdGNoKEYpe2Nhc2UiTSI6Y2FzZSJkIjpjYXNlIkRERCI6cmV0dXJuIFArIi1cdTA0MzkiO2Nhc2UiRCI6cmV0dXJuIFArIi1cdTA0MzNcdTA0M2UiO2Nhc2UidyI6Y2FzZSJXIjpy''@;'; put 'put ''ZXR1cm4gUCsiLVx1MDQ0ZiI7ZGVmYXVsdDpyZXR1cm4gUH19LHdlZWs6e2RvdzoxLGRveTo0fX0pfShfKDk3NTg2KSl9LDcyNjA4OmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT1bIlx1MDYyY1x1MDY0Nlx1MDY0OFx1MDYzMVx1MDY0YSIsIlx1MDY0''@;'; put 'put ''MVx1MDY0YVx1MDYyOFx1MDYzMVx1MDY0OFx1MDYzMVx1MDY0YSIsIlx1MDY0NVx1MDYyN1x1MDYzMVx1MDY4NiIsIlx1MDYyN1x1MDY3ZVx1MDYzMVx1MDY0YVx1MDY0NCIsIlx1MDY0NVx1MDYyNlx1MDY0YSIsIlx1MDYyY1x1MDY0OFx1MDY0NiIsIlx1MDYyY1x1MDY0OFx1MDY0NFx1MDYy''@;'; put 'put ''N1x1MDYyMVx1MDY1MCIsIlx1MDYyMlx1MDZhZlx1MDYzM1x1MDY3ZCIsIlx1MDYzM1x1MDY0YVx1MDY3ZVx1MDY3ZFx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyMlx1MDZhYVx1MDY3ZFx1MDY0OFx1MDYyOFx1MDYzMSIsIlx1MDY0Nlx1MDY0OFx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDY4''@;'; put 'put ''YVx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSJdLGc9WyJcdTA2MjJcdTA2ODZcdTA2MzEiLCJcdTA2MzNcdTA2NDhcdTA2NDVcdTA2MzEiLCJcdTA2MjdcdTA2YjFcdTA2MjdcdTA2MzFcdTA2NDgiLCJcdTA2MjdcdTA2MzFcdTA2MjhcdTA2MzkiLCJcdTA2MmVcdTA2NDVcdTA2NGFcdTA2MzMi''@;'; put 'put ''LCJcdTA2MmNcdTA2NDVcdTA2MzkiLCJcdTA2ODdcdTA2NDZcdTA2ODdcdTA2MzEiXTtJLmRlZmluZUxvY2FsZSgic2QiLHttb250aHM6eSxtb250aHNTaG9ydDp5LHdlZWtkYXlzOmcsd2Vla2RheXNTaG9ydDpnLHdlZWtkYXlzTWluOmcsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRT''@;'; put 'put ''OiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkXHUwNjBjIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjM1XHUwNjI4XHUwNjJkfFx1MDYzNFx1MDYyN1x1MDY0NS8saXNQTTpm''@;'; put 'put ''dW5jdGlvbih3KXtyZXR1cm4iXHUwNjM0XHUwNjI3XHUwNjQ1Ij09PXd9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxGKXtyZXR1cm4gdzwxMj8iXHUwNjM1XHUwNjI4XHUwNjJkIjoiXHUwNjM0XHUwNjI3XHUwNjQ1In0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA2MjdcdTA2ODRdIExUIixuZXh0''@;'; put 'put ''RGF5OiJbXHUwNjMzXHUwNjgwXHUwNjI3XHUwNmJiXHUwNjRhXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MDYyN1x1MDZiM1x1MDY0YVx1MDY0NiBcdTA2NDdcdTA2NDFcdTA2MmFcdTA2NGEgXHUwNjJhXHUwNjRhXSBMVCIsbGFzdERheToiW1x1MDZhYVx1MDYyN1x1MDY0NFx1MDY0N1x1MDY0''@;'; put 'put ''N10gTFQiLGxhc3RXZWVrOiJbXHUwNmFmXHUwNjMyXHUwNjMxXHUwNjRhXHUwNjQ0IFx1MDY0N1x1MDY0MVx1MDYyYVx1MDY0YV0gZGRkZCBbXHUwNjJhXHUwNjRhXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwNjdlXHUwNjQ4XHUwNjIxIixwYXN0OiIl''@;'; put 'put ''cyBcdTA2MjdcdTA2YjMiLHM6Ilx1MDY4Nlx1MDY0Nlx1MDYyZiBcdTA2MzNcdTA2NGFcdTA2YWFcdTA2NDZcdTA2OGEiLHNzOiIlZCBcdTA2MzNcdTA2NGFcdTA2YWFcdTA2NDZcdTA2OGEiLG06Ilx1MDY0N1x1MDZhYSBcdTA2NDVcdTA2NDZcdTA2N2QiLG1tOiIlZCBcdTA2NDVcdTA2NDZc''@;'; put 'put ''dTA2N2QiLGg6Ilx1MDY0N1x1MDZhYSBcdTA2YWFcdTA2NDRcdTA2MjdcdTA2YWEiLGhoOiIlZCBcdTA2YWFcdTA2NDRcdTA2MjdcdTA2YWEiLGQ6Ilx1MDY0N1x1MDZhYSBcdTA2OGZcdTA2NGFcdTA2NDZcdTA2NDdcdTA2NDYiLGRkOiIlZCBcdTA2OGZcdTA2NGFcdTA2NDZcdTA2NDdcdTA2''@;'; put 'put ''NDYiLE06Ilx1MDY0N1x1MDZhYSBcdTA2NDVcdTA2NDdcdTA2NGFcdTA2NDZcdTA2NDgiLE1NOiIlZCBcdTA2NDVcdTA2NDdcdTA2NGFcdTA2NDZcdTA2MjciLHk6Ilx1MDY0N1x1MDZhYSBcdTA2MzNcdTA2MjdcdTA2NDQiLHl5OiIlZCBcdTA2MzNcdTA2MjdcdTA2NDQifSxwcmVwYXJzZTpm''@;'; put 'put ''dW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC9cdTA2MGMvZywiLCIpfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoLywvZywiXHUwNjBjIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShfKDk3NTg2KSl9LDEzOTExOmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9u''@;'; put 'put ''KEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgic2UiLHttb250aHM6Im9cdTAxMTFcdTAxMTFhamFnZW1ceGUxbm51X2d1b3Z2YW1ceGUxbm51X25qdWtcdTAxMGRhbVx4ZTFubnVfY3VvXHUwMTRib21ceGUxbm51X21pZXNzZW1ceGUxbm51X2dlYXNzZW1ceGUxbm51X3N1b2lkbmVt''@;'; put 'put ''XHhlMW5udV9ib3JnZW1ceGUxbm51X1x1MDEwZGFrXHUwMTBkYW1ceGUxbm51X2dvbGdnb3RtXHhlMW5udV9za1x4ZTFibWFtXHhlMW5udV9qdW92bGFtXHhlMW5udSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoib1x1MDExMVx1MDExMWpfZ3Vvdl9uanVrX2N1b19taWVzX2dlYXNfc3VvaV9i''@;'; put 'put ''b3JnX1x1MDEwZGFrXHUwMTBkX2dvbGdfc2tceGUxYl9qdW92Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJzb3RuYWJlYWl2aV92dW9zc1x4ZTFyZ2FfbWFcdTAxNGJcdTAxNGJlYlx4ZTFyZ2FfZ2Fza2F2YWhra3VfZHVvcmFzdGF0X2JlYXJqYWRhdF9sXHhlMXZ2YXJkYXQiLnNwbGl0KCJfIiks''@;'; put 'put ''d2Vla2RheXNTaG9ydDoic290bl92dW9zX21hXHUwMTRiX2dhc2tfZHVvcl9iZWFyX2xceGUxdiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoic192X21fZ19kX2JfTCIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixM''@;'; put 'put ''TDoiTU1NTSBELiBbYi5dIFlZWVkiLExMTDoiTU1NTSBELiBbYi5dIFlZWVkgW3RpLl0gSEg6bW0iLExMTEw6ImRkZGQsIE1NTU0gRC4gW2IuXSBZWVlZIFt0aS5dIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltvdG5lIHRpXSBMVCIsbmV4dERheToiW2lodHRpbiB0aV0gTFQiLG5leHRX''@;'; put 'put ''ZWVrOiJkZGRkIFt0aV0gTFQiLGxhc3REYXk6Iltpa3RlIHRpXSBMVCIsbGFzdFdlZWs6IltvdmRkaXRdIGRkZGQgW3RpXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgZ2VhXHUwMTdlZXMiLHBhc3Q6Im1hXHUwMTRiaXQgJXMiLHM6Im1vYWRkZSBzZWt1bmRk''@;'; put 'put ''YXQiLHNzOiIlZCBzZWt1bmRkYXQiLG06Im9rdGEgbWludWh0YSIsbW06IiVkIG1pbnVodGF0IixoOiJva3RhIGRpaW1tdSIsaGg6IiVkIGRpaW1tdXQiLGQ6Im9rdGEgYmVhaXZpIixkZDoiJWQgYmVhaXZ2aXQiLE06Im9rdGEgbVx4ZTFubnUiLE1NOiIlZCBtXHhlMW51dCIseToib2t0YSBq''@;'; put 'put ''YWhraSIseXk6IiVkIGphZ2l0In0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShfKDk3NTg2KSl9LDI1MTQ3OmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2Fs''@;'; put 'put ''ZSgic2kiLHttb250aHM6Ilx1MGRhMlx1MGRiMVx1MGRjMFx1MGRjZlx1MGRiYlx1MGRkMl9cdTBkYjRcdTBkZDlcdTBkYjZcdTBkYmJcdTBkYzBcdTBkY2ZcdTBkYmJcdTBkZDJfXHUwZGI4XHUwZGNmXHUwZGJiXHUwZGNhXHUwZGFkXHUwZGQ0X1x1MGQ4NVx1MGRiNFx1MGRjYVx1MjAwZFx1''@;'; put 'put ''MGRiYlx1MGRkYVx1MGRiZFx1MGRjYV9cdTBkYjhcdTBkZDBcdTBkYmFcdTBkZDJfXHUwZGEyXHUwZGQ2XHUwZGIxXHUwZGQyX1x1MGRhMlx1MGRkNlx1MGRiZFx1MGRkMl9cdTBkODVcdTBkOWNcdTBkZGRcdTBkYzNcdTBkY2FcdTBkYWRcdTBkZDRfXHUwZGMzXHUwZGQwXHUwZGI0XHUwZGNh''@;'; put 'put ''XHUwZGFkXHUwZGQwXHUwZGI4XHUwZGNhXHUwZGI2XHUwZGJiXHUwZGNhX1x1MGQ5NFx1MGQ5YVx1MGRjYVx1MGRhZFx1MGRkZFx1MGRiNlx1MGRiYlx1MGRjYV9cdTBkYjFcdTBkZGNcdTBkYzBcdTBkZDBcdTBkYjhcdTBkY2FcdTBkYjZcdTBkYmJcdTBkY2FfXHUwZGFmXHUwZGQ5XHUwZGMz''@;'; put 'put ''XHUwZGQwXHUwZGI4XHUwZGNhXHUwZGI2XHUwZGJiXHUwZGNhIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBkYTJcdTBkYjFfXHUwZGI0XHUwZGQ5XHUwZGI2X1x1MGRiOFx1MGRjZlx1MGRiYlx1MGRjYV9cdTBkODVcdTBkYjRcdTBkY2FfXHUwZGI4XHUwZGQwXHUwZGJhXHUwZGQyX1x1''@;'; put 'put ''MGRhMlx1MGRkNlx1MGRiMVx1MGRkMl9cdTBkYTJcdTBkZDZcdTBkYmRcdTBkZDJfXHUwZDg1XHUwZDljXHUwZGRkX1x1MGRjM1x1MGRkMFx1MGRiNFx1MGRjYV9cdTBkOTRcdTBkOWFcdTBkY2FfXHUwZGIxXHUwZGRjXHUwZGMwXHUwZGQwX1x1MGRhZlx1MGRkOVx1MGRjM1x1MGRkMCIuc3Bs''@;'; put 'put ''aXQoIl8iKSx3ZWVrZGF5czoiXHUwZDg5XHUwZGJiXHUwZGQyXHUwZGFmXHUwZGNmX1x1MGRjM1x1MGRiM1x1MGRkNFx1MGRhZlx1MGRjZl9cdTBkODVcdTBkOWZcdTBkYzRcdTBkYmJcdTBkZDRcdTBkYzBcdTBkY2ZcdTBkYWZcdTBkY2ZfXHUwZGI2XHUwZGFmXHUwZGNmXHUwZGFmXHUwZGNm''@;'; put 'put ''X1x1MGRiNlx1MGRjYVx1MjAwZFx1MGRiYlx1MGRjNFx1MGRjM1x1MGRjYVx1MGRiNFx1MGRhZFx1MGRkMlx1MGRiMVx1MGRjYVx1MGRhZlx1MGRjZl9cdTBkYzNcdTBkZDJcdTBkOWFcdTBkZDRcdTBkYmJcdTBkY2ZcdTBkYWZcdTBkY2ZfXHUwZGMzXHUwZGQ5XHUwZGIxXHUwZGMzXHUwZGQ0''@;'; put 'put ''XHUwZGJiXHUwZGNmXHUwZGFmXHUwZGNmIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MGQ4OVx1MGRiYlx1MGRkMl9cdTBkYzNcdTBkYjNcdTBkZDRfXHUwZDg1XHUwZDlmX1x1MGRiNlx1MGRhZlx1MGRjZl9cdTBkYjZcdTBkY2FcdTIwMGRcdTBkYmJcdTBkYzRfXHUwZGMzXHUwZGQy''@;'; put 'put ''XHUwZDlhXHUwZGQ0X1x1MGRjM1x1MGRkOVx1MGRiMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwZDg5X1x1MGRjM19cdTBkODVfXHUwZGI2X1x1MGRiNlx1MGRjYVx1MjAwZFx1MGRiYl9cdTBkYzNcdTBkZDJfXHUwZGMzXHUwZGQ5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFj''@;'; put 'put ''dDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6ImEgaDptbSIsTFRTOiJhIGg6bW06c3MiLEw6IllZWVkvTU0vREQiLExMOiJZWVlZIE1NTU0gRCIsTExMOiJZWVlZIE1NTU0gRCwgYSBoOm1tIixMTExMOiJZWVlZIE1NTU0gRCBbXHUwZGMwXHUwZGQwXHUwZGIxXHUwZGQyXSBkZGRkLCBhIGg6bW06''@;'; put 'put ''c3MifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGQ4NVx1MGRhZl0gTFRbXHUwZGE3XSIsbmV4dERheToiW1x1MGRjNFx1MGRkOVx1MGRhN10gTFRbXHUwZGE3XSIsbmV4dFdlZWs6ImRkZGQgTFRbXHUwZGE3XSIsbGFzdERheToiW1x1MGQ4YVx1MGRiYVx1MGRkYV0gTFRbXHUwZGE3XSIsbGFz''@;'; put 'put ''dFdlZWs6IltcdTBkYjRcdTBkYzNcdTBkZDRcdTBkOWNcdTBkZDJcdTBkYmFdIGRkZGQgTFRbXHUwZGE3XSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXNcdTBkOWFcdTBkZDJcdTBkYjFcdTBkY2EiLHBhc3Q6IiVzXHUwZDlhXHUwZGE3IFx1MGRiNFx1MGRkOVx1MGRi''@;'; put 'put ''YiIsczoiXHUwZGFkXHUwZGFkXHUwZGNhXHUwZGI0XHUwZGJiIFx1MGQ5YVx1MGRkMlx1MGRjNFx1MGRkMlx1MGRiNFx1MGRiYSIsc3M6Ilx1MGRhZFx1MGRhZFx1MGRjYVx1MGRiNFx1MGRiYiAlZCIsbToiXHUwZGI4XHUwZGQyXHUwZGIxXHUwZGQyXHUwZGFkXHUwZGNhXHUwZGFkXHUwZGQ0''@;'; put 'put ''XHUwZGMwIixtbToiXHUwZGI4XHUwZGQyXHUwZGIxXHUwZGQyXHUwZGFkXHUwZGNhXHUwZGFkXHUwZGQ0ICVkIixoOiJcdTBkYjRcdTBkZDBcdTBkYmEiLGhoOiJcdTBkYjRcdTBkZDBcdTBkYmEgJWQiLGQ6Ilx1MGRhZlx1MGRkMlx1MGRiMVx1MGRiYSIsZGQ6Ilx1MGRhZlx1MGRkMlx1MGRi''@;'; put 'put ''MSAlZCIsTToiXHUwZGI4XHUwZGNmXHUwZGMzXHUwZGJhIixNTToiXHUwZGI4XHUwZGNmXHUwZGMzICVkIix5OiJcdTBkYzBcdTBkYzNcdTBkYmIiLHl5OiJcdTBkYzBcdTBkYzNcdTBkYmIgJWQifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9IFx1MGRjMFx1MGRkMFx1MGRiMVx1''@;'; put 'put ''MGRkMi8sb3JkaW5hbDpmdW5jdGlvbihnKXtyZXR1cm4gZysiIFx1MGRjMFx1MGRkMFx1MGRiMVx1MGRkMiJ9LG1lcmlkaWVtUGFyc2U6L1x1MGRiNFx1MGRkOVx1MGRiYiBcdTBkYzBcdTBkYmJcdTBkZDR8XHUwZGI0XHUwZGMzXHUwZGNhIFx1MGRjMFx1MGRiYlx1MGRkNHxcdTBkYjRcdTBk''@;'; put 'put ''ZDkuXHUwZGMwfFx1MGRiNC5cdTBkYzAuLyxpc1BNOmZ1bmN0aW9uKGcpe3JldHVybiJcdTBkYjQuXHUwZGMwLiI9PT1nfHwiXHUwZGI0XHUwZGMzXHUwZGNhIFx1MGRjMFx1MGRiYlx1MGRkNCI9PT1nfSxtZXJpZGllbTpmdW5jdGlvbihnLEIsdyl7cmV0dXJuIGc+MTE/dz8iXHUwZGI0Llx1''@;'; put 'put ''MGRjMC4iOiJcdTBkYjRcdTBkYzNcdTBkY2EgXHUwZGMwXHUwZGJiXHUwZGQ0Ijp3PyJcdTBkYjRcdTBkZDkuXHUwZGMwLiI6Ilx1MGRiNFx1MGRkOVx1MGRiYiBcdTBkYzBcdTBkYmJcdTBkZDQifX0pfShfKDk3NTg2KSl9LDIzNzQxOmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgeT0iamFudVx4ZTFyX2ZlYnJ1XHhlMXJfbWFyZWNfYXByXHhlZGxfbVx4ZTFqX2pceGZhbl9qXHhmYWxfYXVndXN0X3NlcHRlbWJlcl9va3RceGYzYmVyX25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLGc9Imphbl9mZWJfbWFyX2Fwcl9tXHhlMWpfalx4ZmFu''@;'; put 'put ''X2pceGZhbF9hdWdfc2VwX29rdF9ub3ZfZGVjIi5zcGxpdCgiXyIpO2Z1bmN0aW9uIEIoRil7cmV0dXJuIEY+MSYmRjw1fWZ1bmN0aW9uIHcoRixPLHosTil7dmFyIEw9RisiICI7c3dpdGNoKHope2Nhc2UicyI6cmV0dXJuIE98fE4/InBceGUxciBzZWtceGZhbmQiOiJwXHhlMXIgc2VrdW5k''@;'; put 'put ''YW1pIjtjYXNlInNzIjpyZXR1cm4gT3x8Tj9MKyhCKEYpPyJzZWt1bmR5Ijoic2VrXHhmYW5kIik6TCsic2VrdW5kYW1pIjtjYXNlIm0iOnJldHVybiBPPyJtaW5ceGZhdGEiOk4/Im1pblx4ZmF0dSI6Im1pblx4ZmF0b3UiO2Nhc2UibW0iOnJldHVybiBPfHxOP0wrKEIoRik/Im1pblx4ZmF0''@;'; put 'put ''eSI6Im1pblx4ZmF0Iik6TCsibWluXHhmYXRhbWkiO2Nhc2UiaCI6cmV0dXJuIE8/ImhvZGluYSI6Tj8iaG9kaW51IjoiaG9kaW5vdSI7Y2FzZSJoaCI6cmV0dXJuIE98fE4/TCsoQihGKT8iaG9kaW55IjoiaG9kXHhlZG4iKTpMKyJob2RpbmFtaSI7Y2FzZSJkIjpyZXR1cm4gT3x8Tj8iZGVc''@;'; put 'put ''dTAxNDgiOiJkXHUwMTQ4b20iO2Nhc2UiZGQiOnJldHVybiBPfHxOP0wrKEIoRik/ImRuaSI6ImRuXHhlZCIpOkwrImRcdTAxNDhhbWkiO2Nhc2UiTSI6cmV0dXJuIE98fE4/Im1lc2lhYyI6Im1lc2lhY29tIjtjYXNlIk1NIjpyZXR1cm4gT3x8Tj9MKyhCKEYpPyJtZXNpYWNlIjoibWVzaWFj''@;'; put 'put ''b3YiKTpMKyJtZXNpYWNtaSI7Y2FzZSJ5IjpyZXR1cm4gT3x8Tj8icm9rIjoicm9rb20iO2Nhc2UieXkiOnJldHVybiBPfHxOP0wrKEIoRik/InJva3kiOiJyb2tvdiIpOkwrInJva21pIn19SS5kZWZpbmVMb2NhbGUoInNrIix7bW9udGhzOnksbW9udGhzU2hvcnQ6Zyx3ZWVrZGF5czoibmVk''@;'; put 'put ''ZVx1MDEzZWFfcG9uZGVsb2tfdXRvcm9rX3N0cmVkYV9cdTAxNjF0dnJ0b2tfcGlhdG9rX3NvYm90YSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJuZV9wb191dF9zdF9cdTAxNjF0X3BpX3NvIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJuZV9wb191dF9zdF9cdTAxNjF0X3BpX3NvIi5z''@;'; put 'put ''cGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRC4gTU1NTSBZWVlZIixMTEw6IkQuIE1NTU0gWVlZWSBIOm1tIixMTExMOiJkZGRkIEQuIE1NTU0gWVlZWSBIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltkbmVzIG9d''@;'; put 'put ''IExUIixuZXh0RGF5OiJbemFqdHJhIG9dIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNlIDA6cmV0dXJuIlt2IG5lZGVcdTAxM2V1IG9dIExUIjtjYXNlIDE6Y2FzZSAyOnJldHVybiJbdl0gZGRkZCBbb10gTFQiO2Nhc2UgMzpyZXR1cm4iW3Ygc3RyZWR1''@;'; put 'put ''IG9dIExUIjtjYXNlIDQ6cmV0dXJuIlt2byBcdTAxNjF0dnJ0b2sgb10gTFQiO2Nhc2UgNTpyZXR1cm4iW3YgcGlhdG9rIG9dIExUIjtjYXNlIDY6cmV0dXJuIlt2IHNvYm90dSBvXSBMVCJ9fSxsYXN0RGF5OiJbdlx1MDEwZGVyYSBvXSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2go''@;'; put 'put ''dGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbbWludWxceGZhIG5lZGVcdTAxM2V1IG9dIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIlttaW51bFx4ZmRdIGRkZGQgW29dIExUIjtjYXNlIDM6cmV0dXJuIlttaW51bFx4ZmEgc3RyZWR1IG9dIExUIjtjYXNlIDY6cmV0''@;'; put 'put ''dXJuIlttaW51bFx4ZmEgc29ib3R1IG9dIExUIn19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6InphICVzIixwYXN0OiJwcmVkICVzIixzOncsc3M6dyxtOncsbW06dyxoOncsaGg6dyxkOncsZGQ6dyxNOncsTU06dyx5OncseXk6d30sZGF5T2ZNb250aE9yZGluYWxQYXJz''@;'; put 'put ''ZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo0fX0pfShfKDk3NTg2KSl9LDkzZTM6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHkoQix3LFAsRil7dmFyIE89QisiICI7c3dpdGNoKFApe2Nhc2UicyI6cmV0dXJu''@;'; put 'put ''IHd8fEY/Im5la2FqIHNla3VuZCI6Im5la2FqIHNla3VuZGFtaSI7Y2FzZSJzcyI6cmV0dXJuIE8rKDE9PT1CP3c/InNla3VuZG8iOiJzZWt1bmRpIjoyPT09Qj93fHxGPyJzZWt1bmRpIjoic2VrdW5kYWgiOkI8NT93fHxGPyJzZWt1bmRlIjoic2VrdW5kYWgiOiJzZWt1bmQiKTtjYXNlIm0i''@;'; put 'put ''OnJldHVybiB3PyJlbmEgbWludXRhIjoiZW5vIG1pbnV0byI7Y2FzZSJtbSI6cmV0dXJuIE8rKDE9PT1CP3c/Im1pbnV0YSI6Im1pbnV0byI6Mj09PUI/d3x8Rj8ibWludXRpIjoibWludXRhbWEiOkI8NT93fHxGPyJtaW51dGUiOiJtaW51dGFtaSI6d3x8Rj8ibWludXQiOiJtaW51dGFtaSIp''@;'; put 'put ''O2Nhc2UiaCI6cmV0dXJuIHc/ImVuYSB1cmEiOiJlbm8gdXJvIjtjYXNlImhoIjpyZXR1cm4gTysoMT09PUI/dz8idXJhIjoidXJvIjoyPT09Qj93fHxGPyJ1cmkiOiJ1cmFtYSI6Qjw1P3d8fEY/InVyZSI6InVyYW1pIjp3fHxGPyJ1ciI6InVyYW1pIik7Y2FzZSJkIjpyZXR1cm4gd3x8Rj8i''@;'; put 'put ''ZW4gZGFuIjoiZW5pbSBkbmVtIjtjYXNlImRkIjpyZXR1cm4gTysoMT09PUI/d3x8Rj8iZGFuIjoiZG5lbSI6Mj09PUI/d3x8Rj8iZG5pIjoiZG5ldm9tYSI6d3x8Rj8iZG5pIjoiZG5ldmkiKTtjYXNlIk0iOnJldHVybiB3fHxGPyJlbiBtZXNlYyI6ImVuaW0gbWVzZWNlbSI7Y2FzZSJNTSI6''@;'; put 'put ''cmV0dXJuIE8rKDE9PT1CP3d8fEY/Im1lc2VjIjoibWVzZWNlbSI6Mj09PUI/d3x8Rj8ibWVzZWNhIjoibWVzZWNlbWEiOkI8NT93fHxGPyJtZXNlY2UiOiJtZXNlY2kiOnd8fEY/Im1lc2VjZXYiOiJtZXNlY2kiKTtjYXNlInkiOnJldHVybiB3fHxGPyJlbm8gbGV0byI6ImVuaW0gbGV0b20i''@;'; put 'put ''O2Nhc2UieXkiOnJldHVybiBPKygxPT09Qj93fHxGPyJsZXRvIjoibGV0b20iOjI9PT1CP3d8fEY/ImxldGkiOiJsZXRvbWEiOkI8NT93fHxGPyJsZXRhIjoibGV0aSI6d3x8Rj8ibGV0IjoibGV0aSIpfX1JLmRlZmluZUxvY2FsZSgic2wiLHttb250aHM6ImphbnVhcl9mZWJydWFyX21hcmVj''@;'; put 'put ''X2FwcmlsX21hal9qdW5pal9qdWxpal9hdmd1c3Rfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXIiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Imphbi5fZmViLl9tYXIuX2Fwci5fbWFqLl9qdW4uX2p1bC5fYXZnLl9zZXAuX29rdC5fbm92Ll9kZWMuIi5zcGxpdCgiXyIpLG1v''@;'; put 'put ''bnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Im5lZGVsamFfcG9uZWRlbGpla190b3Jla19zcmVkYV9cdTAxMGRldHJ0ZWtfcGV0ZWtfc29ib3RhIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Im5lZC5fcG9uLl90b3IuX3NyZS5fXHUwMTBkZXQuX3BldC5fc29iLiIuc3BsaXQoIl8iKSx3''@;'; put 'put ''ZWVrZGF5c01pbjoibmVfcG9fdG9fc3JfXHUwMTBkZV9wZV9zbyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkRELiBNTS4gWVlZWSIsTEw6IkQuIE1NTU0gWVlZWSIsTExMOiJELiBNTU1NIFlZWVkg''@;'; put 'put ''SDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZIEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW2RhbmVzIG9iXSBMVCIsbmV4dERheToiW2p1dHJpIG9iXSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbdl0gW25lZGVsam9dIFtv''@;'; put 'put ''Yl0gTFQiO2Nhc2UgMzpyZXR1cm4iW3ZdIFtzcmVkb10gW29iXSBMVCI7Y2FzZSA2OnJldHVybiJbdl0gW3NvYm90b10gW29iXSBMVCI7Y2FzZSAxOmNhc2UgMjpjYXNlIDQ6Y2FzZSA1OnJldHVybiJbdl0gZGRkZCBbb2JdIExUIn19LGxhc3REYXk6Ilt2XHUwMTBkZXJhaiBvYl0gTFQiLGxh''@;'; put 'put ''c3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpyZXR1cm4iW3ByZWpcdTAxNjFuam9dIFtuZWRlbGpvXSBbb2JdIExUIjtjYXNlIDM6cmV0dXJuIltwcmVqXHUwMTYxbmpvXSBbc3JlZG9dIFtvYl0gTFQiO2Nhc2UgNjpyZXR1cm4iW3ByZWpcdTAxNjFuam9dIFtz''@;'; put 'put ''b2JvdG9dIFtvYl0gTFQiO2Nhc2UgMTpjYXNlIDI6Y2FzZSA0OmNhc2UgNTpyZXR1cm4iW3ByZWpcdTAxNjFuamldIGRkZGQgW29iXSBMVCJ9fSxzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTAxMGRleiAlcyIscGFzdDoicHJlZCAlcyIsczp5LHNzOnksbTp5LG1tOnks''@;'; put 'put ''aDp5LGhoOnksZDp5LGRkOnksTTp5LE1NOnkseSx5eTp5fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KF8oOTc1ODYpKX0sNjA0NTE6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3Qi''@;'; put 'put ''O0kuZGVmaW5lTG9jYWxlKCJzcSIse21vbnRoczoiSmFuYXJfU2hrdXJ0X01hcnNfUHJpbGxfTWFqX1FlcnNob3JfS29ycmlrX0d1c2h0X1NodGF0b3JfVGV0b3JfTlx4ZWJudG9yX0RoamV0b3IiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9TaGtfTWFyX1ByaV9NYWpfUWVyX0tvcl9H''@;'; put 'put ''dXNfU2h0X1RldF9OXHhlYm5fRGhqIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJFIERpZWxfRSBIXHhlYm5ceGViX0UgTWFydFx4ZWJfRSBNXHhlYnJrdXJceGViX0UgRW5qdGVfRSBQcmVtdGVfRSBTaHR1blx4ZWIiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiRGllX0hceGVibl9NYXJfTVx4''@;'; put 'put ''ZWJyX0Vual9QcmVfU2h0Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJEX0hfTWFfTVx4ZWJfRV9QX1NoIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxtZXJpZGllbVBhcnNlOi9QRHxNRC8saXNQTTpmdW5jdGlvbihnKXtyZXR1cm4iTSI9PT1nLmNoYXJBdCgwKX0sbWVyaWRp''@;'; put 'put ''ZW06ZnVuY3Rpb24oZyxCLHcpe3JldHVybiBnPDEyPyJQRCI6Ik1EIn0sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBI''@;'; put 'put ''SDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbU290IG5ceGViXSBMVCIsbmV4dERheToiW05lc1x4ZWJyIG5ceGViXSBMVCIsbmV4dFdlZWs6ImRkZGQgW25ceGViXSBMVCIsbGFzdERheToiW0RqZSBuXHhlYl0gTFQiLGxhc3RXZWVrOiJkZGRkIFtlIGthbHVhciBuXHhlYl0gTFQiLHNhbWVF''@;'; put 'put ''bHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im5ceGViICVzIixwYXN0OiIlcyBtXHhlYiBwYXJceGViIixzOiJkaXNhIHNla29uZGEiLHNzOiIlZCBzZWtvbmRhIixtOiJualx4ZWIgbWludXRceGViIixtbToiJWQgbWludXRhIixoOiJualx4ZWIgb3JceGViIixoaDoiJWQgb3JceGVi''@;'; put 'put ''IixkOiJualx4ZWIgZGl0XHhlYiIsZGQ6IiVkIGRpdFx4ZWIiLE06Im5qXHhlYiBtdWFqIixNTToiJWQgbXVhaiIseToibmpceGViIHZpdCIseXk6IiVkIHZpdGUifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9''@;'; put 'put ''KF8oOTc1ODYpKX0sNDA5MDU6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciB5PXt3b3Jkczp7c3M6WyJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzAiLCJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0''@;'; put 'put ''MzUiLCJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzgiXSxtOlsiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDMwXHUwNDNkIFx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiIsIlx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzZFx1MDQzZVx1MDQzMyBcdTA0M2NcdTA0''@;'; put 'put ''MzhcdTA0M2RcdTA0NDNcdTA0NDJcdTA0MzAiXSxtbTpbIlx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0MiIsIlx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQzMCIsIlx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQ0Mlx1MDQzMCJdLGg6WyJcdTA0NThcdTA0MzVcdTA0''@;'; put 'put ''MzRcdTA0MzBcdTA0M2QgXHUwNDQxXHUwNDMwXHUwNDQyIiwiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDNkXHUwNDNlXHUwNDMzIFx1MDQ0MVx1MDQzMFx1MDQ0Mlx1MDQzMCJdLGhoOlsiXHUwNDQxXHUwNDMwXHUwNDQyIiwiXHUwNDQxXHUwNDMwXHUwNDQyXHUwNDMwIiwiXHUwNDQxXHUwNDMw''@;'; put 'put ''XHUwNDQyXHUwNDM4Il0sZDpbIlx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzMFx1MDQzZCBcdTA0MzRcdTA0MzBcdTA0M2QiLCJcdTA0NThcdTA0MzVcdTA0MzRcdTA0M2RcdTA0M2VcdTA0MzMgXHUwNDM0XHUwNDMwXHUwNDNkXHUwNDMwIl0sZGQ6WyJcdTA0MzRcdTA0MzBcdTA0M2QiLCJcdTA0''@;'; put 'put ''MzRcdTA0MzBcdTA0M2RcdTA0MzAiLCJcdTA0MzRcdTA0MzBcdTA0M2RcdTA0MzAiXSxNOlsiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDMwXHUwNDNkIFx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0NiIsIlx1MDQ1OFx1MDQzNVx1MDQzNFx1MDQzZFx1MDQzZVx1MDQzMyBcdTA0M2NcdTA0''@;'; put 'put ''MzVcdTA0NDFcdTA0MzVcdTA0NDZcdTA0MzAiXSxNTTpbIlx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0NiIsIlx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0Nlx1MDQzMCIsIlx1MDQzY1x1MDQzNVx1MDQ0MVx1MDQzNVx1MDQ0Nlx1MDQzOCJdLHk6WyJcdTA0NThcdTA0MzVcdTA0''@;'; put 'put ''MzRcdTA0M2RcdTA0NDMgXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDQzIiwiXHUwNDU4XHUwNDM1XHUwNDM0XHUwNDNkXHUwNDM1IFx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzNSJdLHl5OlsiXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDQz''@;'; put 'put ''IiwiXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDM1IiwiXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDMwIl19LGNvcnJlY3RHcmFtbWF0aWNhbENhc2U6ZnVuY3Rpb24oQix3KXtyZXR1cm4gQiUxMD49MSYmQiUxMDw9NCYmKEIlMTAwPDEwfHxCJTEwMD49MjAp''@;'; put 'put ''P0IlMTA9PTE/d1swXTp3WzFdOndbMl19LHRyYW5zbGF0ZTpmdW5jdGlvbihCLHcsUCxGKXt2YXIgeixPPXkud29yZHNbUF07cmV0dXJuIDE9PT1QLmxlbmd0aD8ieSI9PT1QJiZ3PyJcdTA0NThcdTA0MzVcdTA0MzRcdTA0M2RcdTA0MzAgXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNk''@;'; put 'put ''XHUwNDMwIjpGfHx3P09bMF06T1sxXTooej15LmNvcnJlY3RHcmFtbWF0aWNhbENhc2UoQixPKSwieXkiPT09UCYmdyYmIlx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQ0MyI9PT16P0IrIiBcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0MzAiOkIrIiAiK3opfX07''@;'; put 'put ''SS5kZWZpbmVMb2NhbGUoInNyLWN5cmwiLHttb250aHM6Ilx1MDQ1OFx1MDQzMFx1MDQzZFx1MDQ0M1x1MDQzMFx1MDQ0MF9cdTA0NDRcdTA0MzVcdTA0MzFcdTA0NDBcdTA0NDNcdTA0MzBcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzOFx1''@;'; put 'put ''MDQzYl9cdTA0M2NcdTA0MzBcdTA0NThfXHUwNDU4XHUwNDQzXHUwNDNkX1x1MDQ1OFx1MDQ0M1x1MDQzYl9cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0NDJfXHUwNDQxXHUwNDM1XHUwNDNmXHUwNDQyXHUwNDM1XHUwNDNjXHUwNDMxXHUwNDMwXHUwNDQwX1x1MDQzZVx1MDQz''@;'; put 'put ''YVx1MDQ0Mlx1MDQzZVx1MDQzMVx1MDQzMFx1MDQ0MF9cdTA0M2RcdTA0M2VcdTA0MzJcdTA0MzVcdTA0M2NcdTA0MzFcdTA0MzBcdTA0NDBfXHUwNDM0XHUwNDM1XHUwNDQ2XHUwNDM1XHUwNDNjXHUwNDMxXHUwNDMwXHUwNDQwIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTA0NThcdTA0''@;'; put 'put ''MzBcdTA0M2QuX1x1MDQ0NFx1MDQzNVx1MDQzMS5fXHUwNDNjXHUwNDMwXHUwNDQwLl9cdTA0MzBcdTA0M2ZcdTA0NDAuX1x1MDQzY1x1MDQzMFx1MDQ1OF9cdTA0NThcdTA0NDNcdTA0M2RfXHUwNDU4XHUwNDQzXHUwNDNiX1x1MDQzMFx1MDQzMlx1MDQzMy5fXHUwNDQxXHUwNDM1XHUwNDNm''@;'; put 'put ''Ll9cdTA0M2VcdTA0M2FcdTA0NDIuX1x1MDQzZFx1MDQzZVx1MDQzMi5fXHUwNDM0XHUwNDM1XHUwNDQ2LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0NTlcdTA0MzBfXHUwNDNmXHUwNDNlXHUwNDNkXHUwNDM1''@;'; put 'put ''XHUwNDM0XHUwNDM1XHUwNDU5XHUwNDMwXHUwNDNhX1x1MDQ0M1x1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzMFx1MDQzYV9cdTA0NDFcdTA0NDBcdTA0MzVcdTA0MzRcdTA0MzBfXHUwNDQ3XHUwNDM1XHUwNDQyXHUwNDMyXHUwNDQwXHUwNDQyXHUwNDMwXHUwNDNhX1x1MDQzZlx1MDQzNVx1MDQ0''@;'; put 'put ''Mlx1MDQzMFx1MDQzYV9cdTA0NDFcdTA0NDNcdTA0MzFcdTA0M2VcdTA0NDJcdTA0MzAiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNDNkXHUwNDM1XHUwNDM0Ll9cdTA0M2ZcdTA0M2VcdTA0M2QuX1x1MDQ0M1x1MDQ0Mlx1MDQzZS5fXHUwNDQxXHUwNDQwXHUwNDM1Ll9cdTA0NDdc''@;'; put 'put ''dTA0MzVcdTA0NDIuX1x1MDQzZlx1MDQzNVx1MDQ0Mi5fXHUwNDQxXHUwNDQzXHUwNDMxLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDNkXHUwNDM1X1x1MDQzZlx1MDQzZV9cdTA0NDNcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQzNV9cdTA0M2ZcdTA0MzVfXHUwNDQxXHUw''@;'; put 'put ''NDQzIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6Ikg6bW0iLExUUzoiSDptbTpzcyIsTDoiRC4gTS4gWVlZWS4iLExMOiJELiBNTU1NIFlZWVkuIixMTEw6IkQuIE1NTU0gWVlZWS4gSDptbSIsTExMTDoiZGRkZCwgRC4gTU1NTSBZWVlZLiBI''@;'; put 'put ''Om1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTA0MzRcdTA0MzBcdTA0M2RcdTA0MzBcdTA0NDEgXHUwNDQzXSBMVCIsbmV4dERheToiW1x1MDQ0MVx1MDQ0M1x1MDQ0Mlx1MDQ0MFx1MDQzMCBcdTA0NDNdIExUIixuZXh0V2VlazpmdW5jdGlvbigpe3N3aXRjaCh0aGlzLmRheSgpKXtjYXNl''@;'; put 'put ''IDA6cmV0dXJuIltcdTA0NDNdIFtcdTA0M2RcdTA0MzVcdTA0MzRcdTA0MzVcdTA0NTlcdTA0NDNdIFtcdTA0NDNdIExUIjtjYXNlIDM6cmV0dXJuIltcdTA0NDNdIFtcdTA0NDFcdTA0NDBcdTA0MzVcdTA0MzRcdTA0NDNdIFtcdTA0NDNdIExUIjtjYXNlIDY6cmV0dXJuIltcdTA0NDNdIFtc''@;'; put 'put ''dTA0NDFcdTA0NDNcdTA0MzFcdTA0M2VcdTA0NDJcdTA0NDNdIFtcdTA0NDNdIExUIjtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpjYXNlIDU6cmV0dXJuIltcdTA0NDNdIGRkZGQgW1x1MDQ0M10gTFQifX0sbGFzdERheToiW1x1MDQ1OFx1MDQ0M1x1MDQ0N1x1MDQzNSBcdTA0NDNdIExUIixsYXN0''@;'; put 'put ''V2VlazpmdW5jdGlvbigpe3JldHVyblsiW1x1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQzNV0gW1x1MDQzZFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQ1OVx1MDQzNV0gW1x1MDQ0M10gTFQiLCJbXHUwNDNmXHUwNDQwXHUwNDNlXHUwNDQ4XHUwNDNiXHUwNDNlXHUwNDMzXSBbXHUw''@;'; put 'put ''NDNmXHUwNDNlXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDU5XHUwNDNhXHUwNDMwXSBbXHUwNDQzXSBMVCIsIltcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2JcdTA0M2VcdTA0MzNdIFtcdTA0NDNcdTA0NDJcdTA0M2VcdTA0NDBcdTA0M2FcdTA0MzBdIFtcdTA0NDNdIExUIiwi''@;'; put 'put ''W1x1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQzNV0gW1x1MDQ0MVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzNV0gW1x1MDQ0M10gTFQiLCJbXHUwNDNmXHUwNDQwXHUwNDNlXHUwNDQ4XHUwNDNiXHUwNDNlXHUwNDMzXSBbXHUwNDQ3XHUwNDM1XHUwNDQyXHUwNDMyXHUwNDQwXHUw''@;'; put 'put ''NDQyXHUwNDNhXHUwNDMwXSBbXHUwNDQzXSBMVCIsIltcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0NDhcdTA0M2JcdTA0M2VcdTA0MzNdIFtcdTA0M2ZcdTA0MzVcdTA0NDJcdTA0M2FcdTA0MzBdIFtcdTA0NDNdIExUIiwiW1x1MDQzZlx1MDQ0MFx1MDQzZVx1MDQ0OFx1MDQzYlx1MDQzNV0gW1x1''@;'; put 'put ''MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzNV0gW1x1MDQ0M10gTFQiXVt0aGlzLmRheSgpXX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNDM3XHUwNDMwICVzIixwYXN0OiJcdTA0M2ZcdTA0NDBcdTA0MzUgJXMiLHM6Ilx1MDQzZFx1MDQzNVx1MDQz''@;'; put 'put ''YVx1MDQzZVx1MDQzYlx1MDQzOFx1MDQzYVx1MDQzZSBcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0MzgiLHNzOnkudHJhbnNsYXRlLG06eS50cmFuc2xhdGUsbW06eS50cmFuc2xhdGUsaDp5LnRyYW5zbGF0ZSxoaDp5LnRyYW5zbGF0ZSxkOnkudHJhbnNsYXRlLGRk''@;'; put 'put ''OnkudHJhbnNsYXRlLE06eS50cmFuc2xhdGUsTU06eS50cmFuc2xhdGUseTp5LnRyYW5zbGF0ZSx5eTp5LnRyYW5zbGF0ZX0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfVwuLyxvcmRpbmFsOiIlZC4iLHdlZWs6e2RvdzoxLGRveTo3fX0pfShfKDk3NTg2KSl9LDU1MDQ2OmZ1bmN0''@;'; put 'put ''aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0Ijt2YXIgeT17d29yZHM6e3NzOlsic2VrdW5kYSIsInNla3VuZGUiLCJzZWt1bmRpIl0sbTpbImplZGFuIG1pbnV0IiwiamVkbm9nIG1pbnV0YSJdLG1tOlsibWludXQiLCJtaW51dGEiLCJtaW51dGEiXSxoOlsiamVkYW4gc2F0''@;'; put 'put ''IiwiamVkbm9nIHNhdGEiXSxoaDpbInNhdCIsInNhdGEiLCJzYXRpIl0sZDpbImplZGFuIGRhbiIsImplZG5vZyBkYW5hIl0sZGQ6WyJkYW4iLCJkYW5hIiwiZGFuYSJdLE06WyJqZWRhbiBtZXNlYyIsImplZG5vZyBtZXNlY2EiXSxNTTpbIm1lc2VjIiwibWVzZWNhIiwibWVzZWNpIl0seTpb''@;'; put 'put ''ImplZG51IGdvZGludSIsImplZG5lIGdvZGluZSJdLHl5OlsiZ29kaW51IiwiZ29kaW5lIiwiZ29kaW5hIl19LGNvcnJlY3RHcmFtbWF0aWNhbENhc2U6ZnVuY3Rpb24oQix3KXtyZXR1cm4gQiUxMD49MSYmQiUxMDw9NCYmKEIlMTAwPDEwfHxCJTEwMD49MjApP0IlMTA9PTE/d1swXTp3WzFd''@;'; put 'put ''OndbMl19LHRyYW5zbGF0ZTpmdW5jdGlvbihCLHcsUCxGKXt2YXIgeixPPXkud29yZHNbUF07cmV0dXJuIDE9PT1QLmxlbmd0aD8ieSI9PT1QJiZ3PyJqZWRuYSBnb2RpbmEiOkZ8fHc/T1swXTpPWzFdOih6PXkuY29ycmVjdEdyYW1tYXRpY2FsQ2FzZShCLE8pLCJ5eSI9PT1QJiZ3JiYiZ29k''@;'; put 'put ''aW51Ij09PXo/QisiIGdvZGluYSI6QisiICIreil9fTtJLmRlZmluZUxvY2FsZSgic3IiLHttb250aHM6ImphbnVhcl9mZWJydWFyX21hcnRfYXByaWxfbWFqX2p1bl9qdWxfYXZndXN0X3NlcHRlbWJhcl9va3RvYmFyX25vdmVtYmFyX2RlY2VtYmFyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0''@;'; put 'put ''OiJqYW4uX2ZlYi5fbWFyLl9hcHIuX21hal9qdW5fanVsX2F2Zy5fc2VwLl9va3QuX25vdi5fZGVjLiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJuZWRlbGphX3BvbmVkZWxqYWtfdXRvcmFrX3NyZWRhX1x1MDEwZGV0dnJ0YWtfcGV0YWtfc3Vib3RhIi5zcGxp''@;'; put 'put ''dCgiXyIpLHdlZWtkYXlzU2hvcnQ6Im5lZC5fcG9uLl91dG8uX3NyZS5fXHUwMTBkZXQuX3BldC5fc3ViLiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoibmVfcG9fdXRfc3JfXHUwMTBkZV9wZV9zdSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xU''@;'; put 'put ''OiJIOm1tIixMVFM6Ikg6bW06c3MiLEw6IkQuIE0uIFlZWVkuIixMTDoiRC4gTU1NTSBZWVlZLiIsTExMOiJELiBNTU1NIFlZWVkuIEg6bW0iLExMTEw6ImRkZGQsIEQuIE1NTU0gWVlZWS4gSDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbZGFuYXMgdV0gTFQiLG5leHREYXk6IltzdXRyYSB1''@;'; put 'put ''XSBMVCIsbmV4dFdlZWs6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5kYXkoKSl7Y2FzZSAwOnJldHVybiJbdV0gW25lZGVsanVdIFt1XSBMVCI7Y2FzZSAzOnJldHVybiJbdV0gW3NyZWR1XSBbdV0gTFQiO2Nhc2UgNjpyZXR1cm4iW3VdIFtzdWJvdHVdIFt1XSBMVCI7Y2FzZSAxOmNhc2UgMjpj''@;'; put 'put ''YXNlIDQ6Y2FzZSA1OnJldHVybiJbdV0gZGRkZCBbdV0gTFQifX0sbGFzdERheToiW2p1XHUwMTBkZSB1XSBMVCIsbGFzdFdlZWs6ZnVuY3Rpb24oKXtyZXR1cm5bIltwcm9cdTAxNjFsZV0gW25lZGVsamVdIFt1XSBMVCIsIltwcm9cdTAxNjFsb2ddIFtwb25lZGVsamthXSBbdV0gTFQiLCJb''@;'; put 'put ''cHJvXHUwMTYxbG9nXSBbdXRvcmthXSBbdV0gTFQiLCJbcHJvXHUwMTYxbGVdIFtzcmVkZV0gW3VdIExUIiwiW3Byb1x1MDE2MWxvZ10gW1x1MDEwZGV0dnJ0a2FdIFt1XSBMVCIsIltwcm9cdTAxNjFsb2ddIFtwZXRrYV0gW3VdIExUIiwiW3Byb1x1MDE2MWxlXSBbc3Vib3RlXSBbdV0gTFQi''@;'; put 'put ''XVt0aGlzLmRheSgpXX0sc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiemEgJXMiLHBhc3Q6InByZSAlcyIsczoibmVrb2xpa28gc2VrdW5kaSIsc3M6eS50cmFuc2xhdGUsbTp5LnRyYW5zbGF0ZSxtbTp5LnRyYW5zbGF0ZSxoOnkudHJhbnNsYXRlLGhoOnkudHJhbnNsYXRl''@;'; put 'put ''LGQ6eS50cmFuc2xhdGUsZGQ6eS50cmFuc2xhdGUsTTp5LnRyYW5zbGF0ZSxNTTp5LnRyYW5zbGF0ZSx5OnkudHJhbnNsYXRlLHl5OnkudHJhbnNsYXRlfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95Ojd9fSl9KF8oOTc1''@;'; put 'put ''ODYpKX0sODU3NjU6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJzcyIse21vbnRoczoiQmhpbWJpZHZ3YW5lX0luZGxvdmFuYV9JbmRsb3YnbGVua2h1bHVfTWFiYXNhX0lua2h3ZWtod2V0aV9JbmhsYWJhX0tob2x3YW5lX0luZ2Np''@;'; put 'put ''X0lueW9uaV9JbXBoYWxhX0x3ZXRpX0luZ29uZ29uaSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiQmhpX0luYV9JbnVfTWFiX0lua19JbmhfS2hvX0lnY19JbnlfSW1wX0x3ZV9JZ28iLnNwbGl0KCJfIiksd2Vla2RheXM6Ikxpc29udGZvX1Vtc29tYnVsdWtvX0xlc2liaWxpX0xlc2l0c2F0''@;'; put 'put ''ZnVfTGVzaW5lX0xlc2lobGFudV9VbWdjaWJlbG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiTGlzX1VtYl9Mc2JfTGVzX0xzaV9Mc2hfVW1nIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJMaV9Vc19MYl9MdF9Mc19MaF9VZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAs''@;'; put 'put ''bG9uZ0RhdGVGb3JtYXQ6e0xUOiJoOm1tIEEiLExUUzoiaDptbTpzcyBBIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgaDptbSBBIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBoOm1tIEEifSxjYWxlbmRhcjp7c2FtZURheToiW05hbXVobGEgbmdh''@;'; put 'put ''XSBMVCIsbmV4dERheToiW0t1c2FzYSBuZ2FdIExUIixuZXh0V2VlazoiZGRkZCBbbmdhXSBMVCIsbGFzdERheToiW0l0b2xvIG5nYV0gTFQiLGxhc3RXZWVrOiJkZGRkIFtsZWxpcGhlbGlsZV0gW25nYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im5nYSAlcyIs''@;'; put 'put ''cGFzdDoid2VudGVrYSBuZ2EgJXMiLHM6ImVtaXp1endhbmEgbG9tY2FuZSIsc3M6IiVkIG16dXp3YW5hIixtOiJ1bXp1enUiLG1tOiIlZCBlbWl6dXp1IixoOiJsaWhvcmEiLGhoOiIlZCBlbWFob3JhIixkOiJsaWxhbmdhIixkZDoiJWQgZW1hbGFuZ2EiLE06ImlueWFuZ2EiLE1NOiIlZCB0''@;'; put 'put ''aW55YW5nYSIseToidW1ueWFrYSIseXk6IiVkIGltaW55YWthIn0sbWVyaWRpZW1QYXJzZTovZWt1c2VuaXxlbWluaXxlbnRzYW1iYW1hfGVidXN1a3UvLG1lcmlkaWVtOmZ1bmN0aW9uKGcsQix3KXtyZXR1cm4gZzwxMT8iZWt1c2VuaSI6ZzwxNT8iZW1pbmkiOmc8MTk/ImVudHNhbWJhbWEi''@;'; put 'put ''OiJlYnVzdWt1In0sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGcsQil7cmV0dXJuIDEyPT09ZyYmKGc9MCksImVrdXNlbmkiPT09Qj9nOiJlbWluaSI9PT1CP2c+PTExP2c6ZysxMjoiZW50c2FtYmFtYSI9PT1CfHwiZWJ1c3VrdSI9PT1CPzA9PT1nPzA6ZysxMjp2b2lkIDB9LGRheU9mTW9udGhP''@;'; put 'put ''cmRpbmFsUGFyc2U6L1xkezEsMn0vLG9yZGluYWw6IiVkIix3ZWVrOntkb3c6MSxkb3k6NH19KX0oXyg5NzU4NikpfSw5OTI5MDpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInN2Iix7bW9udGhzOiJqYW51YXJpX2ZlYnJ1YXJpX21h''@;'; put 'put ''cnNfYXByaWxfbWFqX2p1bmlfanVsaV9hdWd1c3RpX3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJqYW5fZmViX21hcl9hcHJfbWFqX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlYyIuc3BsaXQoIl8iKSx3ZWVrZGF5czoic1x4''@;'; put 'put ''ZjZuZGFnX21ceGU1bmRhZ190aXNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFnX2xceGY2cmRhZyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJzXHhmNm5fbVx4ZTVuX3Rpc19vbnNfdG9yX2ZyZV9sXHhmNnIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46InNceGY2X21ceGU1X3RpX29uX3Rv''@;'; put 'put ''X2ZyX2xceGY2Ii5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IllZWVktTU0tREQiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBba2wuXSBISDptbSIsTExMTDoiZGRkZCBEIE1NTU0gWVlZWSBba2wuXSBISDptbSIsbGxs''@;'; put 'put ''OiJEIE1NTSBZWVlZIEhIOm1tIixsbGxsOiJkZGQgRCBNTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSWRhZ10gTFQiLG5leHREYXk6IltJbW9yZ29uXSBMVCIsbGFzdERheToiW0lnXHhlNXJdIExUIixuZXh0V2VlazoiW1BceGU1XSBkZGRkIExUIixsYXN0V2VlazoiW0ld''@;'; put 'put ''IGRkZGRbc10gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im9tICVzIixwYXN0OiJmXHhmNnIgJXMgc2VkYW4iLHM6Im5ceGU1Z3JhIHNla3VuZGVyIixzczoiJWQgc2VrdW5kZXIiLG06ImVuIG1pbnV0IixtbToiJWQgbWludXRlciIsaDoiZW4gdGltbWUiLGhoOiIl''@;'; put 'put ''ZCB0aW1tYXIiLGQ6ImVuIGRhZyIsZGQ6IiVkIGRhZ2FyIixNOiJlbiBtXHhlNW5hZCIsTU06IiVkIG1ceGU1bmFkZXIiLHk6ImV0dCBceGU1ciIseXk6IiVkIFx4ZTVyIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShcOmV8XDphKS8sb3JkaW5hbDpmdW5jdGlvbihnKXt2YXIg''@;'; put 'put ''Qj1nJTEwO3JldHVybiBnKygxPT1+fihnJTEwMC8xMCk/IjplIjoxPT09Qnx8Mj09PUI/IjphIjoiOmUiKX0sd2Vlazp7ZG93OjEsZG95OjR9fSl9KF8oOTc1ODYpKX0sNTM0NDk6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJzdyIs''@;'; put 'put ''e21vbnRoczoiSmFudWFyaV9GZWJydWFyaV9NYWNoaV9BcHJpbGlfTWVpX0p1bmlfSnVsYWlfQWdvc3RpX1NlcHRlbWJhX09rdG9iYV9Ob3ZlbWJhX0Rlc2VtYmEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ikphbl9GZWJfTWFjX0Fwcl9NZWlfSnVuX0p1bF9BZ29fU2VwX09rdF9Ob3ZfRGVz''@;'; put 'put ''Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJKdW1hcGlsaV9KdW1hdGF0dV9KdW1hbm5lX0p1bWF0YW5vX0FsaGFtaXNpX0lqdW1hYV9KdW1hbW9zaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJKcGxfSnRhdF9Kbm5lX0p0YW5fQWxoX0lqbV9KbW9zIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWlu''@;'; put 'put ''OiJKMl9KM19KNF9KNV9BbF9Jal9KMSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJoaDptbSBBIixMVFM6IkhIOm1tOnNzIixMOiJERC5NTS5ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRk''@;'; put 'put ''ZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltsZW8gc2FhXSBMVCIsbmV4dERheToiW2tlc2hvIHNhYV0gTFQiLG5leHRXZWVrOiJbd2lraSBpamF5b10gZGRkZCBbc2FhdF0gTFQiLGxhc3REYXk6IltqYW5hXSBMVCIsbGFzdFdlZWs6Ilt3aWtpIGlsaXlvcGl0''@;'; put 'put ''YV0gZGRkZCBbc2FhdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIGJhYWRheWUiLHBhc3Q6InRva2VhICVzIixzOiJoaXZpIHB1bmRlIixzczoic2VrdW5kZSAlZCIsbToiZGFraWthIG1vamEiLG1tOiJkYWtpa2EgJWQiLGg6InNhYSBsaW1vamEiLGhoOiJt''@;'; put 'put ''YXNhYSAlZCIsZDoic2lrdSBtb2phIixkZDoic2lrdSAlZCIsTToibXdlemkgbW1vamEiLE1NOiJtaWV6aSAlZCIseToibXdha2EgbW1vamEiLHl5OiJtaWFrYSAlZCJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShfKDk3NTg2KSl9LDcyNjg4OmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkp''@;'; put 'put ''eyJ1c2Ugc3RyaWN0Ijt2YXIgeT17MToiXHUwYmU3IiwyOiJcdTBiZTgiLDM6Ilx1MGJlOSIsNDoiXHUwYmVhIiw1OiJcdTBiZWIiLDY6Ilx1MGJlYyIsNzoiXHUwYmVkIiw4OiJcdTBiZWUiLDk6Ilx1MGJlZiIsMDoiXHUwYmU2In0sZz17Ilx1MGJlNyI6IjEiLCJcdTBiZTgiOiIyIiwiXHUw''@;'; put 'put ''YmU5IjoiMyIsIlx1MGJlYSI6IjQiLCJcdTBiZWIiOiI1IiwiXHUwYmVjIjoiNiIsIlx1MGJlZCI6IjciLCJcdTBiZWUiOiI4IiwiXHUwYmVmIjoiOSIsIlx1MGJlNiI6IjAifTtJLmRlZmluZUxvY2FsZSgidGEiLHttb250aHM6Ilx1MGI5Y1x1MGJhOVx1MGJiNVx1MGJiMFx1MGJiZl9cdTBi''@;'; put 'put ''YWFcdTBiYmZcdTBiYWFcdTBiY2RcdTBiYjBcdTBiYjVcdTBiYjBcdTBiYmZfXHUwYmFlXHUwYmJlXHUwYmIwXHUwYmNkXHUwYjlhXHUwYmNkX1x1MGI4Zlx1MGJhYVx1MGJjZFx1MGJiMFx1MGJiMlx1MGJjZF9cdTBiYWVcdTBiYzdfXHUwYjljXHUwYmMyXHUwYmE5XHUwYmNkX1x1MGI5Y1x1''@;'; put 'put ''MGJjMlx1MGJiMlx1MGJjOF9cdTBiODZcdTBiOTVcdTBiYjhcdTBiY2RcdTBiOWZcdTBiY2RfXHUwYjlhXHUwYmM2XHUwYmFhXHUwYmNkXHUwYjlmXHUwYmM2XHUwYmFlXHUwYmNkXHUwYmFhXHUwYmIwXHUwYmNkX1x1MGI4NVx1MGI5NVx1MGJjZFx1MGI5Zlx1MGJjN1x1MGJiZVx1MGJhYVx1''@;'; put 'put ''MGJiMFx1MGJjZF9cdTBiYThcdTBiYjVcdTBiYWVcdTBiY2RcdTBiYWFcdTBiYjBcdTBiY2RfXHUwYjlmXHUwYmJmXHUwYjlhXHUwYmFlXHUwYmNkXHUwYmFhXHUwYmIwXHUwYmNkIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJcdTBiOWNcdTBiYTlcdTBiYjVcdTBiYjBcdTBiYmZfXHUwYmFh''@;'; put 'put ''XHUwYmJmXHUwYmFhXHUwYmNkXHUwYmIwXHUwYmI1XHUwYmIwXHUwYmJmX1x1MGJhZVx1MGJiZVx1MGJiMFx1MGJjZFx1MGI5YVx1MGJjZF9cdTBiOGZcdTBiYWFcdTBiY2RcdTBiYjBcdTBiYjJcdTBiY2RfXHUwYmFlXHUwYmM3X1x1MGI5Y1x1MGJjMlx1MGJhOVx1MGJjZF9cdTBiOWNcdTBi''@;'; put 'put ''YzJcdTBiYjJcdTBiYzhfXHUwYjg2XHUwYjk1XHUwYmI4XHUwYmNkXHUwYjlmXHUwYmNkX1x1MGI5YVx1MGJjNlx1MGJhYVx1MGJjZFx1MGI5Zlx1MGJjNlx1MGJhZVx1MGJjZFx1MGJhYVx1MGJiMFx1MGJjZF9cdTBiODVcdTBiOTVcdTBiY2RcdTBiOWZcdTBiYzdcdTBiYmVcdTBiYWFcdTBi''@;'; put 'put ''YjBcdTBiY2RfXHUwYmE4XHUwYmI1XHUwYmFlXHUwYmNkXHUwYmFhXHUwYmIwXHUwYmNkX1x1MGI5Zlx1MGJiZlx1MGI5YVx1MGJhZVx1MGJjZFx1MGJhYVx1MGJiMFx1MGJjZCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwYjllXHUwYmJlXHUwYmFmXHUwYmJmXHUwYmIxXHUwYmNkXHUwYmIx''@;'; put 'put ''XHUwYmMxXHUwYjk1XHUwYmNkXHUwYjk1XHUwYmJmXHUwYmI0XHUwYmFlXHUwYmM4X1x1MGJhNFx1MGJiZlx1MGI5OVx1MGJjZFx1MGI5NVx1MGI5Zlx1MGJjZFx1MGI5NVx1MGJiZlx1MGJiNFx1MGJhZVx1MGJjOF9cdTBiOWFcdTBiYzZcdTBiYjVcdTBiY2RcdTBiYjVcdTBiYmVcdTBiYWZc''@;'; put 'put ''dTBiY2RcdTBiOTVcdTBiYmZcdTBiYjRcdTBiYWVcdTBiYzhfXHUwYmFhXHUwYmMxXHUwYmE0XHUwYmE5XHUwYmNkXHUwYjk1XHUwYmJmXHUwYmI0XHUwYmFlXHUwYmM4X1x1MGJiNVx1MGJiZlx1MGJhZlx1MGJiZVx1MGJiNFx1MGI5NVx1MGJjZFx1MGI5NVx1MGJiZlx1MGJiNFx1MGJhZVx1''@;'; put 'put ''MGJjOF9cdTBiYjVcdTBiYzZcdTBiYjNcdTBiY2RcdTBiYjNcdTBiYmZcdTBiOTVcdTBiY2RcdTBiOTVcdTBiYmZcdTBiYjRcdTBiYWVcdTBiYzhfXHUwYjlhXHUwYmE5XHUwYmJmXHUwYjk1XHUwYmNkXHUwYjk1XHUwYmJmXHUwYmI0XHUwYmFlXHUwYmM4Ii5zcGxpdCgiXyIpLHdlZWtkYXlz''@;'; put 'put ''U2hvcnQ6Ilx1MGI5ZVx1MGJiZVx1MGJhZlx1MGJiZlx1MGJiMVx1MGJjMV9cdTBiYTRcdTBiYmZcdTBiOTlcdTBiY2RcdTBiOTVcdTBiYjNcdTBiY2RfXHUwYjlhXHUwYmM2XHUwYmI1XHUwYmNkXHUwYmI1XHUwYmJlXHUwYmFmXHUwYmNkX1x1MGJhYVx1MGJjMVx1MGJhNFx1MGJhOVx1MGJj''@;'; put 'put ''ZF9cdTBiYjVcdTBiYmZcdTBiYWZcdTBiYmVcdTBiYjRcdTBiYTlcdTBiY2RfXHUwYmI1XHUwYmM2XHUwYmIzXHUwYmNkXHUwYmIzXHUwYmJmX1x1MGI5YVx1MGJhOVx1MGJiZiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwYjllXHUwYmJlX1x1MGJhNFx1MGJiZl9cdTBiOWFcdTBiYzZf''@;'; put 'put ''XHUwYmFhXHUwYmMxX1x1MGJiNVx1MGJiZl9cdTBiYjVcdTBiYzZfXHUwYjlhIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSwgSEg6bW0iLExMTEw6ImRk''@;'; put 'put ''ZGQsIEQgTU1NTSBZWVlZLCBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwYjg3XHUwYmE5XHUwYmNkXHUwYmIxXHUwYmMxXSBMVCIsbmV4dERheToiW1x1MGJhOFx1MGJiZVx1MGJiM1x1MGJjOF0gTFQiLG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MGJhOFx1MGJjN1x1''@;'; put 'put ''MGJiMVx1MGJjZFx1MGJiMVx1MGJjMV0gTFQiLGxhc3RXZWVrOiJbXHUwYjk1XHUwYjlmXHUwYmE4XHUwYmNkXHUwYmE0IFx1MGJiNVx1MGJiZVx1MGJiMFx1MGJhZVx1MGJjZF0gZGRkZCwgTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MGI4N1x1MGJiMlx1''@;'; put 'put ''MGJjZCIscGFzdDoiJXMgXHUwYmFlXHUwYmMxXHUwYmE5XHUwYmNkIixzOiJcdTBiOTJcdTBiYjBcdTBiYzEgXHUwYjlhXHUwYmJmXHUwYmIyIFx1MGJiNVx1MGJiZlx1MGJhOFx1MGJiZVx1MGI5Zlx1MGJiZlx1MGI5NVx1MGJiM1x1MGJjZCIsc3M6IiVkIFx1MGJiNVx1MGJiZlx1MGJhOFx1''@;'; put 'put ''MGJiZVx1MGI5Zlx1MGJiZlx1MGI5NVx1MGJiM1x1MGJjZCIsbToiXHUwYjkyXHUwYmIwXHUwYmMxIFx1MGJhOFx1MGJiZlx1MGJhZVx1MGJiZlx1MGI5Zlx1MGJhZVx1MGJjZCIsbW06IiVkIFx1MGJhOFx1MGJiZlx1MGJhZVx1MGJiZlx1MGI5Zlx1MGI5OVx1MGJjZFx1MGI5NVx1MGJiM1x1''@;'; put 'put ''MGJjZCIsaDoiXHUwYjkyXHUwYmIwXHUwYmMxIFx1MGJhZVx1MGJhM1x1MGJiZiBcdTBiYThcdTBiYzdcdTBiYjBcdTBiYWVcdTBiY2QiLGhoOiIlZCBcdTBiYWVcdTBiYTNcdTBiYmYgXHUwYmE4XHUwYmM3XHUwYmIwXHUwYmFlXHUwYmNkIixkOiJcdTBiOTJcdTBiYjBcdTBiYzEgXHUwYmE4''@;'; put 'put ''XHUwYmJlXHUwYmIzXHUwYmNkIixkZDoiJWQgXHUwYmE4XHUwYmJlXHUwYjlmXHUwYmNkXHUwYjk1XHUwYmIzXHUwYmNkIixNOiJcdTBiOTJcdTBiYjBcdTBiYzEgXHUwYmFlXHUwYmJlXHUwYmE0XHUwYmFlXHUwYmNkIixNTToiJWQgXHUwYmFlXHUwYmJlXHUwYmE0XHUwYjk5XHUwYmNkXHUw''@;'; put 'put ''Yjk1XHUwYmIzXHUwYmNkIix5OiJcdTBiOTJcdTBiYjBcdTBiYzEgXHUwYmI1XHUwYmIwXHUwYmMxXHUwYjlmXHUwYmFlXHUwYmNkIix5eToiJWQgXHUwYjg2XHUwYmEzXHUwYmNkXHUwYjlmXHUwYmMxXHUwYjk1XHUwYmIzXHUwYmNkIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwy''@;'; put 'put ''fVx1MGJiNVx1MGJhNFx1MGJjMS8sb3JkaW5hbDpmdW5jdGlvbih3KXtyZXR1cm4gdysiXHUwYmI1XHUwYmE0XHUwYmMxIn0scHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvW1x1MGJlN1x1MGJlOFx1MGJlOVx1MGJlYVx1MGJlYlx1MGJlY1x1MGJlZFx1MGJlZVx1MGJl''@;'; put 'put ''Zlx1MGJlNl0vZyxmdW5jdGlvbihQKXtyZXR1cm4gZ1tQXX0pfSxwb3N0Zm9ybWF0OmZ1bmN0aW9uKHcpe3JldHVybiB3LnJlcGxhY2UoL1xkL2csZnVuY3Rpb24oUCl7cmV0dXJuIHlbUF19KX0sbWVyaWRpZW1QYXJzZTovXHUwYmFmXHUwYmJlXHUwYmFlXHUwYmFlXHUwYmNkfFx1MGJiNVx1''@;'; put 'put ''MGJjOFx1MGI5NVx1MGJiMVx1MGJjOHxcdTBiOTVcdTBiYmVcdTBiYjJcdTBiYzh8XHUwYmE4XHUwYmEzXHUwYmNkXHUwYmFhXHUwYjk1XHUwYmIyXHUwYmNkfFx1MGI4ZVx1MGJiMVx1MGJjZFx1MGJhYVx1MGJiZVx1MGI5Zlx1MGJjMXxcdTBiYWVcdTBiYmVcdTBiYjJcdTBiYzgvLG1lcmlk''@;'; put 'put ''aWVtOmZ1bmN0aW9uKHcsUCxGKXtyZXR1cm4gdzwyPyIgXHUwYmFmXHUwYmJlXHUwYmFlXHUwYmFlXHUwYmNkIjp3PDY/IiBcdTBiYjVcdTBiYzhcdTBiOTVcdTBiYjFcdTBiYzgiOnc8MTA/IiBcdTBiOTVcdTBiYmVcdTBiYjJcdTBiYzgiOnc8MTQ/IiBcdTBiYThcdTBiYTNcdTBiY2RcdTBi''@;'; put 'put ''YWFcdTBiOTVcdTBiYjJcdTBiY2QiOnc8MTg/IiBcdTBiOGVcdTBiYjFcdTBiY2RcdTBiYWFcdTBiYmVcdTBiOWZcdTBiYzEiOnc8MjI/IiBcdTBiYWVcdTBiYmVcdTBiYjJcdTBiYzgiOiIgXHUwYmFmXHUwYmJlXHUwYmFlXHUwYmFlXHUwYmNkIn0sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKHcs''@;'; put 'put ''UCl7cmV0dXJuIDEyPT09dyYmKHc9MCksIlx1MGJhZlx1MGJiZVx1MGJhZVx1MGJhZVx1MGJjZCI9PT1QP3c8Mj93OncrMTI6Ilx1MGJiNVx1MGJjOFx1MGI5NVx1MGJiMVx1MGJjOCI9PT1QfHwiXHUwYjk1XHUwYmJlXHUwYmIyXHUwYmM4Ij09PVB8fCJcdTBiYThcdTBiYTNcdTBiY2RcdTBi''@;'; put 'put ''YWFcdTBiOTVcdTBiYjJcdTBiY2QiPT09UCYmdz49MTA/dzp3KzEyfSx3ZWVrOntkb3c6MCxkb3k6Nn19KX0oXyg5NzU4NikpfSwzMjA2MDpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInRlIix7bW9udGhzOiJcdTBjMWNcdTBjMjhc''@;'; put 'put ''dTBjMzVcdTBjMzBcdTBjM2ZfXHUwYzJiXHUwYzNmXHUwYzJjXHUwYzRkXHUwYzMwXHUwYzM1XHUwYzMwXHUwYzNmX1x1MGMyZVx1MGMzZVx1MGMzMFx1MGM0ZFx1MGMxYVx1MGMzZl9cdTBjMGZcdTBjMmFcdTBjNGRcdTBjMzBcdTBjM2ZcdTBjMzJcdTBjNGRfXHUwYzJlXHUwYzQ3X1x1MGMx''@;'; put 'put ''Y1x1MGM0Mlx1MGMyOFx1MGM0ZF9cdTBjMWNcdTBjNDFcdTBjMzJcdTBjNDhfXHUwYzA2XHUwYzE3XHUwYzM4XHUwYzRkXHUwYzFmXHUwYzQxX1x1MGMzOFx1MGM0Nlx1MGMyYVx1MGM0ZFx1MGMxZlx1MGM0Nlx1MGMwMlx1MGMyY1x1MGMzMFx1MGM0ZF9cdTBjMDVcdTBjMTVcdTBjNGRcdTBj''@;'; put 'put ''MWZcdTBjNGJcdTBjMmNcdTBjMzBcdTBjNGRfXHUwYzI4XHUwYzM1XHUwYzAyXHUwYzJjXHUwYzMwXHUwYzRkX1x1MGMyMVx1MGMzZlx1MGMzOFx1MGM0Nlx1MGMwMlx1MGMyY1x1MGMzMFx1MGM0ZCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUwYzFjXHUwYzI4Ll9cdTBjMmJcdTBjM2Zc''@;'; put 'put ''dTBjMmNcdTBjNGRcdTBjMzAuX1x1MGMyZVx1MGMzZVx1MGMzMFx1MGM0ZFx1MGMxYVx1MGMzZl9cdTBjMGZcdTBjMmFcdTBjNGRcdTBjMzBcdTBjM2YuX1x1MGMyZVx1MGM0N19cdTBjMWNcdTBjNDJcdTBjMjhcdTBjNGRfXHUwYzFjXHUwYzQxXHUwYzMyXHUwYzQ4X1x1MGMwNlx1MGMxNy5f''@;'; put 'put ''XHUwYzM4XHUwYzQ2XHUwYzJhXHUwYzRkLl9cdTBjMDVcdTBjMTVcdTBjNGRcdTBjMWZcdTBjNGIuX1x1MGMyOFx1MGMzNS5fXHUwYzIxXHUwYzNmXHUwYzM4XHUwYzQ2LiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJcdTBjMDZcdTBjMjZcdTBjM2ZcdTBjMzVc''@;'; put 'put ''dTBjM2VcdTBjMzBcdTBjMDJfXHUwYzM4XHUwYzRiXHUwYzJlXHUwYzM1XHUwYzNlXHUwYzMwXHUwYzAyX1x1MGMyZVx1MGMwMlx1MGMxN1x1MGMzM1x1MGMzNVx1MGMzZVx1MGMzMFx1MGMwMl9cdTBjMmNcdTBjNDFcdTBjMjdcdTBjMzVcdTBjM2VcdTBjMzBcdTBjMDJfXHUwYzE3XHUwYzQx''@;'; put 'put ''XHUwYzMwXHUwYzQxXHUwYzM1XHUwYzNlXHUwYzMwXHUwYzAyX1x1MGMzNlx1MGM0MVx1MGMxNVx1MGM0ZFx1MGMzMFx1MGMzNVx1MGMzZVx1MGMzMFx1MGMwMl9cdTBjMzZcdTBjMjhcdTBjM2ZcdTBjMzVcdTBjM2VcdTBjMzBcdTBjMDIiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUw''@;'; put 'put ''YzA2XHUwYzI2XHUwYzNmX1x1MGMzOFx1MGM0Ylx1MGMyZV9cdTBjMmVcdTBjMDJcdTBjMTdcdTBjMzNfXHUwYzJjXHUwYzQxXHUwYzI3X1x1MGMxN1x1MGM0MVx1MGMzMFx1MGM0MV9cdTBjMzZcdTBjNDFcdTBjMTVcdTBjNGRcdTBjMzBfXHUwYzM2XHUwYzI4XHUwYzNmIi5zcGxpdCgiXyIp''@;'; put 'put ''LHdlZWtkYXlzTWluOiJcdTBjMDZfXHUwYzM4XHUwYzRiX1x1MGMyZVx1MGMwMl9cdTBjMmNcdTBjNDFfXHUwYzE3XHUwYzQxX1x1MGMzNlx1MGM0MV9cdTBjMzYiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJBIGg6bW0iLExUUzoiQSBoOm1tOnNzIixMOiJERC9NTS9ZWVlZIixM''@;'; put 'put ''TDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVksIEEgaDptbSIsTExMTDoiZGRkZCwgRCBNTU1NIFlZWVksIEEgaDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwYzI4XHUwYzQ3XHUwYzIxXHUwYzQxXSBMVCIsbmV4dERheToiW1x1MGMzMFx1MGM0N1x1MGMyYVx1MGM0MV0gTFQi''@;'; put 'put ''LG5leHRXZWVrOiJkZGRkLCBMVCIsbGFzdERheToiW1x1MGMyOFx1MGMzZlx1MGMyOFx1MGM0ZFx1MGMyOF0gTFQiLGxhc3RXZWVrOiJbXHUwYzE3XHUwYzI0XSBkZGRkLCBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgXHUwYzMyXHUwYzRiIixwYXN0OiIlcyBc''@;'; put 'put ''dTBjMTVcdTBjNGRcdTBjMzBcdTBjM2ZcdTBjMjRcdTBjMDIiLHM6Ilx1MGMxNVx1MGM0YVx1MGMyOFx1MGM0ZFx1MGMyOFx1MGMzZiBcdTBjMTVcdTBjNGRcdTBjMzdcdTBjMjNcdTBjM2VcdTBjMzJcdTBjNDEiLHNzOiIlZCBcdTBjMzhcdTBjNDZcdTBjMTVcdTBjMjhcdTBjNGRcdTBjMzJc''@;'; put 'put ''dTBjNDEiLG06Ilx1MGMxMlx1MGMxNSBcdTBjMjhcdTBjM2ZcdTBjMmVcdTBjM2ZcdTBjMzdcdTBjMDIiLG1tOiIlZCBcdTBjMjhcdTBjM2ZcdTBjMmVcdTBjM2ZcdTBjMzdcdTBjM2VcdTBjMzJcdTBjNDEiLGg6Ilx1MGMxMlx1MGMxNSBcdTBjMTdcdTBjMDJcdTBjMWYiLGhoOiIlZCBcdTBj''@;'; put 'put ''MTdcdTBjMDJcdTBjMWZcdTBjMzJcdTBjNDEiLGQ6Ilx1MGMxMlx1MGMxNSBcdTBjMzBcdTBjNGJcdTBjMWNcdTBjNDEiLGRkOiIlZCBcdTBjMzBcdTBjNGJcdTBjMWNcdTBjNDFcdTBjMzJcdTBjNDEiLE06Ilx1MGMxMlx1MGMxNSBcdTBjMjhcdTBjNDZcdTBjMzIiLE1NOiIlZCBcdTBjMjhc''@;'; put 'put ''dTBjNDZcdTBjMzJcdTBjMzJcdTBjNDEiLHk6Ilx1MGMxMlx1MGMxNSBcdTBjMzhcdTBjMDJcdTBjMzVcdTBjMjRcdTBjNGRcdTBjMzhcdTBjMzBcdTBjMDIiLHl5OiIlZCBcdTBjMzhcdTBjMDJcdTBjMzVcdTBjMjRcdTBjNGRcdTBjMzhcdTBjMzBcdTBjM2VcdTBjMzJcdTBjNDEifSxkYXlP''@;'; put 'put ''Zk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XHUwYzM1LyxvcmRpbmFsOiIlZFx1MGMzNSIsbWVyaWRpZW1QYXJzZTovXHUwYzMwXHUwYzNlXHUwYzI0XHUwYzRkXHUwYzMwXHUwYzNmfFx1MGMwOVx1MGMyNlx1MGMyZlx1MGMwMnxcdTBjMmVcdTBjMjdcdTBjNGRcdTBjMmZcdTBjM2VcdTBj''@;'; put 'put ''MzlcdTBjNGRcdTBjMjhcdTBjMDJ8XHUwYzM4XHUwYzNlXHUwYzJmXHUwYzAyXHUwYzI0XHUwYzRkXHUwYzMwXHUwYzAyLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oZyxCKXtyZXR1cm4gMTI9PT1nJiYoZz0wKSwiXHUwYzMwXHUwYzNlXHUwYzI0XHUwYzRkXHUwYzMwXHUwYzNmIj09PUI/Zzw0''@;'; put 'put ''P2c6ZysxMjoiXHUwYzA5XHUwYzI2XHUwYzJmXHUwYzAyIj09PUI/ZzoiXHUwYzJlXHUwYzI3XHUwYzRkXHUwYzJmXHUwYzNlXHUwYzM5XHUwYzRkXHUwYzI4XHUwYzAyIj09PUI/Zz49MTA/ZzpnKzEyOiJcdTBjMzhcdTBjM2VcdTBjMmZcdTBjMDJcdTBjMjRcdTBjNGRcdTBjMzBcdTBjMDIi''@;'; put 'put ''PT09Qj9nKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVuY3Rpb24oZyxCLHcpe3JldHVybiBnPDQ/Ilx1MGMzMFx1MGMzZVx1MGMyNFx1MGM0ZFx1MGMzMFx1MGMzZiI6ZzwxMD8iXHUwYzA5XHUwYzI2XHUwYzJmXHUwYzAyIjpnPDE3PyJcdTBjMmVcdTBjMjdcdTBjNGRcdTBjMmZcdTBjM2VcdTBj''@;'; put 'put ''MzlcdTBjNGRcdTBjMjhcdTBjMDIiOmc8MjA/Ilx1MGMzOFx1MGMzZVx1MGMyZlx1MGMwMlx1MGMyNFx1MGM0ZFx1MGMzMFx1MGMwMiI6Ilx1MGMzMFx1MGMzZVx1MGMyNFx1MGM0ZFx1MGMzMFx1MGMzZiJ9LHdlZWs6e2RvdzowLGRveTo2fX0pfShfKDk3NTg2KSl9LDkzMjkwOmZ1bmN0aW9u''@;'; put 'put ''KHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgidGV0Iix7bW9udGhzOiJKYW5laXJ1X0ZldmVyZWlydV9NYXJzdV9BYnJpbF9NYWl1X0p1XHhmMXVfSnVsbHVfQWd1c3R1X1NldGVtYnJ1X091dHVicnVfTm92ZW1icnVfRGV6ZW1icnUiLnNwbGl0KCJf''@;'; put 'put ''IiksbW9udGhzU2hvcnQ6Ikphbl9GZXZfTWFyX0Ficl9NYWlfSnVuX0p1bF9BZ29fU2V0X091dF9Ob3ZfRGV6Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJEb21pbmd1X1NlZ3VuZGFfVGVyc2FfS3VhcnRhX0tpbnRhX1Nlc3RhX1NhYmFkdSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJEb21f''@;'; put 'put ''U2VnX1RlcnNfS3VhX0tpbnRfU2VzdF9TYWIiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IkRvX1NlZ19UZV9LdV9LaV9TZXNfU2EiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6''@;'; put 'put ''IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbT2hpbiBpaGFdIExUIixuZXh0RGF5OiJbQWJhbiBpaGFdIExUIixuZXh0V2VlazoiZGRkZCBbaWhhXSBMVCIsbGFzdERheToiW0hvcmlzZWlrIGloYV0gTFQiLGxh''@;'; put 'put ''c3RXZWVrOiJkZGRkIFtzZW1hbmEga290dWtdIFtpaGFdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJpaGEgJXMiLHBhc3Q6IiVzIGxpdWJhIixzOiJzZWd1bmR1IGJhbHVuIixzczoic2VndW5kdSAlZCIsbToibWludXR1IGlkYSIsbW06Im1pbnV0dSAlZCIsaDoi''@;'; put 'put ''b3JhcyBpZGEiLGhoOiJvcmFzICVkIixkOiJsb3JvbiBpZGEiLGRkOiJsb3JvbiAlZCIsTToiZnVsYW4gaWRhIixNTToiZnVsYW4gJWQiLHk6InRpbmFuIGlkYSIseXk6InRpbmFuICVkIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShzdHxuZHxyZHx0aCkvLG9yZGluYWw6ZnVu''@;'; put 'put ''Y3Rpb24oZyl7dmFyIEI9ZyUxMDtyZXR1cm4gZysoMT09fn4oZyUxMDAvMTApPyJ0aCI6MT09PUI/InN0IjoyPT09Qj8ibmQiOjM9PT1CPyJyZCI6InRoIil9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShfKDk3NTg2KSl9LDgyOTQ6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSl7InVzZSBz''@;'; put 'put ''dHJpY3QiO3ZhciB5PXswOiItXHUwNDQzXHUwNDNjIiwxOiItXHUwNDQzXHUwNDNjIiwyOiItXHUwNDRlXHUwNDNjIiwzOiItXHUwNDRlXHUwNDNjIiw0OiItXHUwNDQzXHUwNDNjIiw1OiItXHUwNDQzXHUwNDNjIiw2OiItXHUwNDQzXHUwNDNjIiw3OiItXHUwNDQzXHUwNDNjIiw4OiItXHUw''@;'; put 'put ''NDQzXHUwNDNjIiw5OiItXHUwNDQzXHUwNDNjIiwxMDoiLVx1MDQ0M1x1MDQzYyIsMTI6Ii1cdTA0NDNcdTA0M2MiLDEzOiItXHUwNDQzXHUwNDNjIiwyMDoiLVx1MDQ0M1x1MDQzYyIsMzA6Ii1cdTA0NGVcdTA0M2MiLDQwOiItXHUwNDQzXHUwNDNjIiw1MDoiLVx1MDQ0M1x1MDQzYyIsNjA6''@;'; put 'put ''Ii1cdTA0NDNcdTA0M2MiLDcwOiItXHUwNDQzXHUwNDNjIiw4MDoiLVx1MDQ0M1x1MDQzYyIsOTA6Ii1cdTA0NDNcdTA0M2MiLDEwMDoiLVx1MDQ0M1x1MDQzYyJ9O0kuZGVmaW5lTG9jYWxlKCJ0ZyIse21vbnRoczp7Zm9ybWF0OiJcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0NDBcdTA0''@;'; put 'put ''MzhfXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNiXHUwNDM4X1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Mlx1MDQzOF9cdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JcdTA0MzhfXHUwNDNjXHUwNDMwXHUwNDM5XHUwNDM4X1x1MDQzOFx1MDQ0ZVx1MDQzZFx1MDQzOF9c''@;'; put 'put ''dTA0MzhcdTA0NGVcdTA0M2JcdTA0MzhfXHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyXHUwNDM4X1x1MDQ0MVx1MDQzNVx1MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MFx1MDQzOF9cdTA0M2VcdTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBcdTA0MzhfXHUwNDNk''@;'; put 'put ''XHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQwXHUwNDM4X1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzMVx1MDQ0MFx1MDQzOCIuc3BsaXQoIl8iKSxzdGFuZGFsb25lOiJcdTA0NGZcdTA0M2RcdTA0MzJcdTA0MzBcdTA0NDBfXHUwNDQ0XHUwNDM1XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDNi''@;'; put 'put ''X1x1MDQzY1x1MDQzMFx1MDQ0MFx1MDQ0Ml9cdTA0MzBcdTA0M2ZcdTA0NDBcdTA0MzVcdTA0M2JfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQzOFx1MDQ0ZVx1MDQzZF9cdTA0MzhcdTA0NGVcdTA0M2JfXHUwNDMwXHUwNDMyXHUwNDMzXHUwNDQzXHUwNDQxXHUwNDQyX1x1MDQ0MVx1MDQzNVx1''@;'; put 'put ''MDQzZFx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MF9cdTA0M2VcdTA0M2FcdTA0NDJcdTA0NGZcdTA0MzFcdTA0NDBfXHUwNDNkXHUwNDNlXHUwNDRmXHUwNDMxXHUwNDQwX1x1MDQzNFx1MDQzNVx1MDQzYVx1MDQzMFx1MDQzMVx1MDQ0MCIuc3BsaXQoIl8iKX0sbW9udGhzU2hvcnQ6Ilx1MDQ0''@;'; put 'put ''Zlx1MDQzZFx1MDQzMl9cdTA0NDRcdTA0MzVcdTA0MzJfXHUwNDNjXHUwNDMwXHUwNDQwX1x1MDQzMFx1MDQzZlx1MDQ0MF9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDM4XHUwNDRlXHUwNDNkX1x1MDQzOFx1MDQ0ZVx1MDQzYl9cdTA0MzBcdTA0MzJcdTA0MzNfXHUwNDQxXHUwNDM1XHUwNDNk''@;'; put 'put ''X1x1MDQzZVx1MDQzYVx1MDQ0Ml9cdTA0M2RcdTA0M2VcdTA0NGZfXHUwNDM0XHUwNDM1XHUwNDNhIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA0NGZcdTA0M2FcdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzVfXHUwNDM0XHUwNDQzXHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDM1''@;'; put 'put ''X1x1MDQ0MVx1MDQzNVx1MDQ0OFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzNV9cdTA0NDdcdTA0M2VcdTA0NDBcdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzVfXHUwNDNmXHUwNDMwXHUwNDNkXHUwNGI3XHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDM1X1x1MDRiN1x1MDQ0M1x1MDQz''@;'; put 'put ''Y1x1MDQ0YVx1MDQzMF9cdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzUiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHUwNDRmXHUwNDQ4XHUwNDMxX1x1MDQzNFx1MDQ0OFx1MDQzMV9cdTA0NDFcdTA0NDhcdTA0MzFfXHUwNDQ3XHUwNDQ4XHUwNDMxX1x1MDQzZlx1MDQ0OFx1MDQz''@;'; put 'put ''MV9cdTA0YjdcdTA0NDNcdTA0M2NfXHUwNDQ4XHUwNDNkXHUwNDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0NGZcdTA0NDhfXHUwNDM0XHUwNDQ4X1x1MDQ0MVx1MDQ0OF9cdTA0NDdcdTA0NDhfXHUwNDNmXHUwNDQ4X1x1MDRiN1x1MDQzY19cdTA0NDhcdTA0MzEiLnNwbGl0KCJf''@;'; put 'put ''IiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHUwNDE4XHUwNDNj''@;'; put 'put ''XHUwNDQwXHUwNGVmXHUwNDM3IFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0Mlx1MDQzOF0gTFQiLG5leHREYXk6IltcdTA0MjRcdTA0MzBcdTA0NDBcdTA0MzRcdTA0M2UgXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyXHUwNDM4XSBMVCIsbGFzdERheToiW1x1MDQxNFx1MDQzOFx1MDQ0MFx1MDRl''@;'; put 'put ''Zlx1MDQzNyBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDJcdTA0MzhdIExUIixuZXh0V2VlazoiZGRkZFtcdTA0MzhdIFtcdTA0YjNcdTA0MzBcdTA0NDRcdTA0NDJcdTA0MzBcdTA0MzggXHUwNDNlXHUwNDRmXHUwNDNkXHUwNDM0XHUwNDMwIFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0Mlx1MDQz''@;'; put 'put ''OF0gTFQiLGxhc3RXZWVrOiJkZGRkW1x1MDQzOF0gW1x1MDRiM1x1MDQzMFx1MDQ0NFx1MDQ0Mlx1MDQzMFx1MDQzOCBcdTA0MzNcdTA0NDNcdTA0MzdcdTA0MzBcdTA0NDhcdTA0NDJcdTA0MzAgXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyXHUwNDM4XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxh''@;'; put 'put ''dGl2ZVRpbWU6e2Z1dHVyZToiXHUwNDMxXHUwNDMwXHUwNDRhXHUwNDM0XHUwNDM4ICVzIixwYXN0OiIlcyBcdTA0M2ZcdTA0MzVcdTA0NDgiLHM6Ilx1MDQ0Zlx1MDQzYVx1MDQ0N1x1MDQzMFx1MDQzZFx1MDQzNCBcdTA0NDFcdTA0M2VcdTA0M2RcdTA0MzhcdTA0NGYiLG06Ilx1MDQ0Zlx1''@;'; put 'put ''MDQzYSBcdTA0MzRcdTA0MzBcdTA0OWJcdTA0MzhcdTA0OWJcdTA0MzAiLG1tOiIlZCBcdTA0MzRcdTA0MzBcdTA0OWJcdTA0MzhcdTA0OWJcdTA0MzAiLGg6Ilx1MDQ0Zlx1MDQzYSBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDIiLGhoOiIlZCBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDIiLGQ6''@;'; put 'put ''Ilx1MDQ0Zlx1MDQzYSBcdTA0NDBcdTA0ZWZcdTA0MzciLGRkOiIlZCBcdTA0NDBcdTA0ZWZcdTA0MzciLE06Ilx1MDQ0Zlx1MDQzYSBcdTA0M2NcdTA0M2VcdTA0YjMiLE1NOiIlZCBcdTA0M2NcdTA0M2VcdTA0YjMiLHk6Ilx1MDQ0Zlx1MDQzYSBcdTA0NDFcdTA0M2VcdTA0M2IiLHl5OiIl''@;'; put 'put ''ZCBcdTA0NDFcdTA0M2VcdTA0M2IifSxtZXJpZGllbVBhcnNlOi9cdTA0NDhcdTA0MzBcdTA0MzF8XHUwNDQxXHUwNDQzXHUwNDMxXHUwNGIzfFx1MDQ0MFx1MDRlZlx1MDQzN3xcdTA0MzFcdTA0MzVcdTA0MzNcdTA0M2VcdTA0YjMvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihCLHcpe3JldHVy''@;'; put 'put ''biAxMj09PUImJihCPTApLCJcdTA0NDhcdTA0MzBcdTA0MzEiPT09dz9CPDQ/QjpCKzEyOiJcdTA0NDFcdTA0NDNcdTA0MzFcdTA0YjMiPT09dz9COiJcdTA0NDBcdTA0ZWZcdTA0MzciPT09dz9CPj0xMT9COkIrMTI6Ilx1MDQzMVx1MDQzNVx1MDQzM1x1MDQzZVx1MDRiMyI9PT13P0IrMTI6''@;'; put 'put ''dm9pZCAwfSxtZXJpZGllbTpmdW5jdGlvbihCLHcsUCl7cmV0dXJuIEI8ND8iXHUwNDQ4XHUwNDMwXHUwNDMxIjpCPDExPyJcdTA0NDFcdTA0NDNcdTA0MzFcdTA0YjMiOkI8MTY/Ilx1MDQ0MFx1MDRlZlx1MDQzNyI6QjwxOT8iXHUwNDMxXHUwNDM1XHUwNDMzXHUwNDNlXHUwNGIzIjoiXHUw''@;'; put 'put ''NDQ4XHUwNDMwXHUwNDMxIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS0oXHUwNDQzXHUwNDNjfFx1MDQ0ZVx1MDQzYykvLG9yZGluYWw6ZnVuY3Rpb24oQil7cmV0dXJuIEIrKHlbQl18fHlbQiUxMF18fHlbQj49MTAwPzEwMDpudWxsXSl9LHdlZWs6e2RvdzoxLGRveTo3fX0p''@;'; put 'put ''fShfKDk3NTg2KSl9LDEyMzE6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJ0aCIse21vbnRoczoiXHUwZTIxXHUwZTAxXHUwZTIzXHUwZTMyXHUwZTA0XHUwZTIxX1x1MGUwMVx1MGUzOFx1MGUyMVx1MGUyMFx1MGUzMlx1MGUxZVx1''@;'; put 'put ''MGUzMVx1MGUxOVx1MGUxOFx1MGU0Y19cdTBlMjFcdTBlMzVcdTBlMTlcdTBlMzJcdTBlMDRcdTBlMjFfXHUwZTQwXHUwZTIxXHUwZTI5XHUwZTMyXHUwZTIyXHUwZTE5X1x1MGUxZVx1MGUyNFx1MGUyOVx1MGUyMFx1MGUzMlx1MGUwNFx1MGUyMV9cdTBlMjFcdTBlMzRcdTBlMTZcdTBlMzhc''@;'; put 'put ''dTBlMTlcdTBlMzJcdTBlMjJcdTBlMTlfXHUwZTAxXHUwZTIzXHUwZTAxXHUwZTBlXHUwZTMyXHUwZTA0XHUwZTIxX1x1MGUyYVx1MGUzNFx1MGUwN1x1MGUyYlx1MGUzMlx1MGUwNFx1MGUyMV9cdTBlMDFcdTBlMzFcdTBlMTlcdTBlMjJcdTBlMzJcdTBlMjJcdTBlMTlfXHUwZTE1XHUwZTM4''@;'; put 'put ''XHUwZTI1XHUwZTMyXHUwZTA0XHUwZTIxX1x1MGUxZVx1MGUyNFx1MGUyOFx1MGUwOFx1MGUzNFx1MGUwMVx1MGUzMlx1MGUyMlx1MGUxOV9cdTBlMThcdTBlMzFcdTBlMTlcdTBlMjdcdTBlMzJcdTBlMDRcdTBlMjEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MGUyMS5cdTBlMDQuX1x1''@;'; put 'put ''MGUwMS5cdTBlMWUuX1x1MGUyMVx1MGUzNS5cdTBlMDQuX1x1MGU0MFx1MGUyMS5cdTBlMjIuX1x1MGUxZS5cdTBlMDQuX1x1MGUyMVx1MGUzNC5cdTBlMjIuX1x1MGUwMS5cdTBlMDQuX1x1MGUyYS5cdTBlMDQuX1x1MGUwMS5cdTBlMjIuX1x1MGUxNS5cdTBlMDQuX1x1MGUxZS5cdTBlMjIu''@;'; put 'put ''X1x1MGUxOC5cdTBlMDQuIi5zcGxpdCgiXyIpLG1vbnRoc1BhcnNlRXhhY3Q6ITAsd2Vla2RheXM6Ilx1MGUyZFx1MGUzMlx1MGUxN1x1MGUzNFx1MGUxNVx1MGUyMlx1MGU0Y19cdTBlMDhcdTBlMzFcdTBlMTlcdTBlMTdcdTBlMjNcdTBlNGNfXHUwZTJkXHUwZTMxXHUwZTA3XHUwZTA0XHUw''@;'; put 'put ''ZTMyXHUwZTIzX1x1MGUxZVx1MGUzOFx1MGUxOF9cdTBlMWVcdTBlMjRcdTBlMmJcdTBlMzFcdTBlMmFcdTBlMWFcdTBlMTRcdTBlMzVfXHUwZTI4XHUwZTM4XHUwZTAxXHUwZTIzXHUwZTRjX1x1MGU0MFx1MGUyYVx1MGUzMlx1MGUyM1x1MGU0YyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0''@;'; put 'put ''OiJcdTBlMmRcdTBlMzJcdTBlMTdcdTBlMzRcdTBlMTVcdTBlMjJcdTBlNGNfXHUwZTA4XHUwZTMxXHUwZTE5XHUwZTE3XHUwZTIzXHUwZTRjX1x1MGUyZFx1MGUzMVx1MGUwN1x1MGUwNFx1MGUzMlx1MGUyM19cdTBlMWVcdTBlMzhcdTBlMThfXHUwZTFlXHUwZTI0XHUwZTJiXHUwZTMxXHUw''@;'; put 'put ''ZTJhX1x1MGUyOFx1MGUzOFx1MGUwMVx1MGUyM1x1MGU0Y19cdTBlNDBcdTBlMmFcdTBlMzJcdTBlMjNcdTBlNGMiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MGUyZFx1MGUzMi5fXHUwZTA4Ll9cdTBlMmQuX1x1MGUxZS5fXHUwZTFlXHUwZTI0Ll9cdTBlMjguX1x1MGUyYS4iLnNwbGl0''@;'; put 'put ''KCJfIiksd2Vla2RheXNQYXJzZUV4YWN0OiEwLGxvbmdEYXRlRm9ybWF0OntMVDoiSDptbSIsTFRTOiJIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgXHUwZTQwXHUwZTI3XHUwZTI1XHUwZTMyIEg6bW0iLExMTEw6Ilx1MGUyN1x1MGUz''@;'; put 'put ''MVx1MGUxOWRkZGRcdTBlMTdcdTBlMzVcdTBlNDggRCBNTU1NIFlZWVkgXHUwZTQwXHUwZTI3XHUwZTI1XHUwZTMyIEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTBlMDFcdTBlNDhcdTBlMmRcdTBlMTlcdTBlNDBcdTBlMTdcdTBlMzVcdTBlNDhcdTBlMjJcdTBlMDd8XHUwZTJiXHUwZTI1XHUw''@;'; put 'put ''ZTMxXHUwZTA3XHUwZTQwXHUwZTE3XHUwZTM1XHUwZTQ4XHUwZTIyXHUwZTA3Lyxpc1BNOmZ1bmN0aW9uKGcpe3JldHVybiJcdTBlMmJcdTBlMjVcdTBlMzFcdTBlMDdcdTBlNDBcdTBlMTdcdTBlMzVcdTBlNDhcdTBlMjJcdTBlMDciPT09Z30sbWVyaWRpZW06ZnVuY3Rpb24oZyxCLHcpe3Jl''@;'; put 'put ''dHVybiBnPDEyPyJcdTBlMDFcdTBlNDhcdTBlMmRcdTBlMTlcdTBlNDBcdTBlMTdcdTBlMzVcdTBlNDhcdTBlMjJcdTBlMDciOiJcdTBlMmJcdTBlMjVcdTBlMzFcdTBlMDdcdTBlNDBcdTBlMTdcdTBlMzVcdTBlNDhcdTBlMjJcdTBlMDcifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MGUyN1x1''@;'; put 'put ''MGUzMVx1MGUxOVx1MGUxOVx1MGUzNVx1MGU0OSBcdTBlNDBcdTBlMjdcdTBlMjVcdTBlMzJdIExUIixuZXh0RGF5OiJbXHUwZTFlXHUwZTIzXHUwZTM4XHUwZTQ4XHUwZTA3XHUwZTE5XHUwZTM1XHUwZTQ5IFx1MGU0MFx1MGUyN1x1MGUyNVx1MGUzMl0gTFQiLG5leHRXZWVrOiJkZGRkW1x1''@;'; put 'put ''MGUyYlx1MGUxOVx1MGU0OVx1MGUzMiBcdTBlNDBcdTBlMjdcdTBlMjVcdTBlMzJdIExUIixsYXN0RGF5OiJbXHUwZTQwXHUwZTIxXHUwZTM3XHUwZTQ4XHUwZTJkXHUwZTI3XHUwZTMyXHUwZTE5XHUwZTE5XHUwZTM1XHUwZTQ5IFx1MGU0MFx1MGUyN1x1MGUyNVx1MGUzMl0gTFQiLGxhc3RX''@;'; put 'put ''ZWVrOiJbXHUwZTI3XHUwZTMxXHUwZTE5XWRkZGRbXHUwZTE3XHUwZTM1XHUwZTQ4XHUwZTQxXHUwZTI1XHUwZTQ5XHUwZTI3IFx1MGU0MFx1MGUyN1x1MGUyNVx1MGUzMl0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Ilx1MGUyZFx1MGUzNVx1MGUwMSAlcyIscGFz''@;'; put 'put ''dDoiJXNcdTBlMTdcdTBlMzVcdTBlNDhcdTBlNDFcdTBlMjVcdTBlNDlcdTBlMjciLHM6Ilx1MGU0NFx1MGUyMVx1MGU0OFx1MGUwMVx1MGUzNVx1MGU0OFx1MGUyN1x1MGUzNFx1MGUxOVx1MGUzMlx1MGUxN1x1MGUzNSIsc3M6IiVkIFx1MGUyN1x1MGUzNFx1MGUxOVx1MGUzMlx1MGUxN1x1''@;'; put 'put ''MGUzNSIsbToiMSBcdTBlMTlcdTBlMzJcdTBlMTdcdTBlMzUiLG1tOiIlZCBcdTBlMTlcdTBlMzJcdTBlMTdcdTBlMzUiLGg6IjEgXHUwZTBhXHUwZTMxXHUwZTQ4XHUwZTI3XHUwZTQyXHUwZTIxXHUwZTA3IixoaDoiJWQgXHUwZTBhXHUwZTMxXHUwZTQ4XHUwZTI3XHUwZTQyXHUwZTIxXHUw''@;'; put 'put ''ZTA3IixkOiIxIFx1MGUyN1x1MGUzMVx1MGUxOSIsZGQ6IiVkIFx1MGUyN1x1MGUzMVx1MGUxOSIsdzoiMSBcdTBlMmFcdTBlMzFcdTBlMWJcdTBlMTRcdTBlMzJcdTBlMmJcdTBlNGMiLHd3OiIlZCBcdTBlMmFcdTBlMzFcdTBlMWJcdTBlMTRcdTBlMzJcdTBlMmJcdTBlNGMiLE06IjEgXHUw''@;'; put 'put ''ZTQwXHUwZTE0XHUwZTM3XHUwZTJkXHUwZTE5IixNTToiJWQgXHUwZTQwXHUwZTE0XHUwZTM3XHUwZTJkXHUwZTE5Iix5OiIxIFx1MGUxYlx1MGUzNSIseXk6IiVkIFx1MGUxYlx1MGUzNSJ9fSl9KF8oOTc1ODYpKX0sMzc0NjpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJKXsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIHk9ezE6IidpbmppIiw1OiInaW5qaSIsODoiJ2luamkiLDcwOiInaW5qaSIsODA6IidpbmppIiwyOiInbmppIiw3OiInbmppIiwyMDoiJ25qaSIsNTA6IiduamkiLDM6IidceGZjbmppIiw0OiInXHhmY25qaSIsMTAwOiInXHhmY25qaSIsNjoiJ25qeSIsOToiJ3VuankiLDEw''@;'; put 'put ''OiIndW5qeSIsMzA6Iid1bmp5Iiw2MDoiJ3luankiLDkwOiIneW5qeSJ9O0kuZGVmaW5lTG9jYWxlKCJ0ayIse21vbnRoczoiXHhkZGFud2FyX0Zld3JhbF9NYXJ0X0FwcmVsX01hXHhmZF9JXHhmZHVuX0lceGZkdWxfQXdndXN0X1NlbnRceGZkYWJyX09rdFx4ZmRhYnJfTm9ceGZkYWJyX0Rl''@;'; put 'put ''a2FiciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHhkZGFuX0Zld19NYXJfQXByX01hXHhmZF9JXHhmZG5fSVx4ZmRsX0F3Z19TZW5fT2t0X05vXHhmZF9EZWsiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx4ZGRla1x1MDE1ZmVuYmVfRHVcdTAxNWZlbmJlX1NpXHUwMTVmZW5iZV9ceGM3YXJc''@;'; put 'put ''dTAxNWZlbmJlX1Blblx1MDE1ZmVuYmVfQW5uYV9cdTAxNWVlbmJlIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx4ZGRla19EdVx1MDE1Zl9TaVx1MDE1Zl9ceGM3YXJfUGVuX0Fubl9cdTAxNWVlbiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHhkZGtfRFx1MDE1Zl9TXHUwMTVmX1x4''@;'; put 'put ''YzdyX1BuX0FuX1x1MDE1ZW4iLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVu''@;'; put 'put ''ZGFyOntzYW1lRGF5OiJbYnVnXHhmY24gc2FnYXRdIExUIixuZXh0RGF5OiJbZXJ0aXIgc2FnYXRdIExUIixuZXh0V2VlazoiW2luZGlraV0gZGRkZCBbc2FnYXRdIExUIixsYXN0RGF5OiJbZFx4ZmNceGZkbl0gTFQiLGxhc3RXZWVrOiJbZ2VceGU3ZW5dIGRkZGQgW3NhZ2F0XSBMVCIsc2Ft''@;'; put 'put ''ZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXMgc29cdTAxNDgiLHBhc3Q6IiVzIFx4ZjZcdTAxNDgiLHM6ImJpcm5ceGU0XHhlN2Ugc2VrdW50IixtOiJiaXIgbWludXQiLG1tOiIlZCBtaW51dCIsaDoiYmlyIHNhZ2F0IixoaDoiJWQgc2FnYXQiLGQ6ImJpciBnXHhmY24iLGRk''@;'; put 'put ''OiIlZCBnXHhmY24iLE06ImJpciBhXHhmZCIsTU06IiVkIGFceGZkIix5OiJiaXIgXHhmZHlsIix5eToiJWQgXHhmZHlsIn0sb3JkaW5hbDpmdW5jdGlvbihCLHcpe3N3aXRjaCh3KXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEbyI6Y2FzZSJERCI6cmV0dXJuIEI7ZGVmYXVsdDppZigwPT09Qily''@;'; put 'put ''ZXR1cm4gQisiJ3VuankiO3ZhciBQPUIlMTA7cmV0dXJuIEIrKHlbUF18fHlbQiUxMDAtUF18fHlbQj49MTAwPzEwMDpudWxsXSl9fSx3ZWVrOntkb3c6MSxkb3k6N319KX0oXyg5NzU4NikpfSw0OTA0MDpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZp''@;'; put 'put ''bmVMb2NhbGUoInRsLXBoIix7bW9udGhzOiJFbmVyb19QZWJyZXJvX01hcnNvX0FicmlsX01heW9fSHVueW9fSHVseW9fQWdvc3RvX1NldHllbWJyZV9Pa3R1YnJlX05vYnllbWJyZV9EaXN5ZW1icmUiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IkVuZV9QZWJfTWFyX0Ficl9NYXlfSHVuX0h1''@;'; put 'put ''bF9BZ29fU2V0X09rdF9Ob2JfRGlzIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJMaW5nZ29fTHVuZXNfTWFydGVzX01peWVya3VsZXNfSHV3ZWJlc19CaXllcm5lc19TYWJhZG8iLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiTGluX0x1bl9NYXJfTWl5X0h1d19CaXlfU2FiIi5zcGxpdCgiXyIp''@;'; put 'put ''LHdlZWtkYXlzTWluOiJMaV9MdV9NYV9NaV9IdV9CaV9TYWIiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiTU0vRC9ZWVlZIixMTDoiTU1NTSBELCBZWVlZIixMTEw6Ik1NTU0gRCwgWVlZWSBISDptbSIsTExMTDoiZGRkZCwgTU1NTSBE''@;'; put 'put ''RCwgWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJMVCBbbmdheW9uZyBhcmF3XSIsbmV4dERheToiW0J1a2FzIG5nXSBMVCIsbmV4dFdlZWs6IkxUIFtzYSBzdXN1bm9kIG5hXSBkZGRkIixsYXN0RGF5OiJMVCBba2FoYXBvbl0iLGxhc3RXZWVrOiJMVCBbbm9vbmcgbmFrYXJhYW5n''@;'; put 'put ''XSBkZGRkIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJzYSBsb29iIG5nICVzIixwYXN0OiIlcyBhbmcgbmFrYWxpcGFzIixzOiJpbGFuZyBzZWd1bmRvIixzczoiJWQgc2VndW5kbyIsbToiaXNhbmcgbWludXRvIixtbToiJWQgbWludXRvIixoOiJpc2FuZyBvcmFzIixo''@;'; put 'put ''aDoiJWQgb3JhcyIsZDoiaXNhbmcgYXJhdyIsZGQ6IiVkIGFyYXciLE06ImlzYW5nIGJ1d2FuIixNTToiJWQgYnV3YW4iLHk6ImlzYW5nIHRhb24iLHl5OiIlZCB0YW9uIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfS8sb3JkaW5hbDpmdW5jdGlvbihnKXtyZXR1cm4gZ30sd2Vl''@;'; put 'put ''azp7ZG93OjEsZG95OjR9fSl9KF8oOTc1ODYpKX0sMTcxODc6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciB5PSJwYWdoX3dhXHUyMDE5X2NoYVx1MjAxOV93ZWpfbG9TX3ZhZ2hfamF2X1NvY2hfY2hvcmdoX0h1dCIuc3BsaXQoIl8iKTtmdW5jdGlvbiB3''@;'; put 'put ''KE8seixOLEwpe3ZhciBLPWZ1bmN0aW9uIFAoTyl7dmFyIHo9TWF0aC5mbG9vcihPJTFlMy8xMDApLE49TWF0aC5mbG9vcihPJTEwMC8xMCksTD1PJTEwLEs9IiI7cmV0dXJuIHo+MCYmKEsrPXlbel0rInZhdGxoIiksTj4wJiYoSys9KCIiIT09Sz8iICI6IiIpK3lbTl0rIm1hSCIpLEw+MCYm''@;'; put 'put ''KEsrPSgiIiE9PUs/IiAiOiIiKSt5W0xdKSwiIj09PUs/InBhZ2giOkt9KE8pO3N3aXRjaChOKXtjYXNlInNzIjpyZXR1cm4gSysiIGx1cCI7Y2FzZSJtbSI6cmV0dXJuIEsrIiB0dXAiO2Nhc2UiaGgiOnJldHVybiBLKyIgcmVwIjtjYXNlImRkIjpyZXR1cm4gSysiIGphaiI7Y2FzZSJNTSI6''@;'; put 'put ''cmV0dXJuIEsrIiBqYXIiO2Nhc2UieXkiOnJldHVybiBLKyIgRElTIn19SS5kZWZpbmVMb2NhbGUoInRsaCIse21vbnRoczoidGVyYVx1MjAxOSBqYXIgd2FcdTIwMTlfdGVyYVx1MjAxOSBqYXIgY2hhXHUyMDE5X3RlcmFcdTIwMTkgamFyIHdlal90ZXJhXHUyMDE5IGphciBsb1NfdGVyYVx1''@;'; put 'put ''MjAxOSBqYXIgdmFnaF90ZXJhXHUyMDE5IGphciBqYXZfdGVyYVx1MjAxOSBqYXIgU29jaF90ZXJhXHUyMDE5IGphciBjaG9yZ2hfdGVyYVx1MjAxOSBqYXIgSHV0X3RlcmFcdTIwMTkgamFyIHdhXHUyMDE5bWFIX3RlcmFcdTIwMTkgamFyIHdhXHUyMDE5bWFIIHdhXHUyMDE5X3RlcmFcdTIw''@;'; put 'put ''MTkgamFyIHdhXHUyMDE5bWFIIGNoYVx1MjAxOSIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiamFyIHdhXHUyMDE5X2phciBjaGFcdTIwMTlfamFyIHdlal9qYXIgbG9TX2phciB2YWdoX2phciBqYXZfamFyIFNvY2hfamFyIGNob3JnaF9qYXIgSHV0X2phciB3YVx1MjAxOW1hSF9qYXIgd2Fc''@;'; put 'put ''dTIwMTltYUggd2FcdTIwMTlfamFyIHdhXHUyMDE5bWFIIGNoYVx1MjAxOSIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJsb2ptSXRqYWpfRGFTamFqX3Bvdmphal9naEl0bGhqYWpfbG9naGphal9idXFqYWpfZ2hJbmphaiIuc3BsaXQoIl8iKSx3ZWVrZGF5c1No''@;'; put 'put ''b3J0OiJsb2ptSXRqYWpfRGFTamFqX3Bvdmphal9naEl0bGhqYWpfbG9naGphal9idXFqYWpfZ2hJbmphaiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoibG9qbUl0amFqX0RhU2phal9wb3ZqYWpfZ2hJdGxoamFqX2xvZ2hqYWpfYnVxamFqX2doSW5qYWoiLnNwbGl0KCJfIiksbG9uZ0RhdGVG''@;'; put 'put ''b3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbRGFIamFqXSBMVCIsbmV4dERheToiW3dh''@;'; put 'put ''XHUyMDE5bGVTXSBMVCIsbmV4dFdlZWs6IkxMTCIsbGFzdERheToiW3dhXHUyMDE5SHVcdTIwMTldIExUIixsYXN0V2VlazoiTExMIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOmZ1bmN0aW9uIGcoTyl7dmFyIHo9TztyZXR1cm4tMSE9PU8uaW5kZXhPZigiamFqIik/ei5z''@;'; put 'put ''bGljZSgwLC0zKSsibGVTIjotMSE9PU8uaW5kZXhPZigiamFyIik/ei5zbGljZSgwLC0zKSsid2FRIjotMSE9PU8uaW5kZXhPZigiRElTIik/ei5zbGljZSgwLC0zKSsibmVtIjp6KyIgcElxIn0scGFzdDpmdW5jdGlvbiBCKE8pe3ZhciB6PU87cmV0dXJuLTEhPT1PLmluZGV4T2YoImphaiIp''@;'; put 'put ''P3ouc2xpY2UoMCwtMykrIkh1XHUyMDE5IjotMSE9PU8uaW5kZXhPZigiamFyIik/ei5zbGljZSgwLC0zKSsid2VuIjotMSE9PU8uaW5kZXhPZigiRElTIik/ei5zbGljZSgwLC0zKSsiYmVuIjp6KyIgcmV0In0sczoicHVTIGx1cCIsc3M6dyxtOiJ3YVx1MjAxOSB0dXAiLG1tOncsaDoid2Fc''@;'; put 'put ''dTIwMTkgcmVwIixoaDp3LGQ6IndhXHUyMDE5IGphaiIsZGQ6dyxNOiJ3YVx1MjAxOSBqYXIiLE1NOncseToid2FcdTIwMTkgRElTIix5eTp3fSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KF8oOTc1ODYpKX0s''@;'; put 'put ''NjAxNTM6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO3ZhciB5PXsxOiInaW5jaSIsNToiJ2luY2kiLDg6IidpbmNpIiw3MDoiJ2luY2kiLDgwOiInaW5jaSIsMjoiJ25jaSIsNzoiJ25jaSIsMjA6IiduY2kiLDUwOiInbmNpIiwzOiInXHhmY25jXHhmYyIsNDoi''@;'; put 'put ''J1x4ZmNuY1x4ZmMiLDEwMDoiJ1x4ZmNuY1x4ZmMiLDY6IiduY1x1MDEzMSIsOToiJ3VuY3UiLDEwOiIndW5jdSIsMzA6Iid1bmN1Iiw2MDoiJ1x1MDEzMW5jXHUwMTMxIiw5MDoiJ1x1MDEzMW5jXHUwMTMxIn07SS5kZWZpbmVMb2NhbGUoInRyIix7bW9udGhzOiJPY2FrX1x1MDE1ZXViYXRf''@;'; put 'put ''TWFydF9OaXNhbl9NYXlcdTAxMzFzX0hhemlyYW5fVGVtbXV6X0FcdTAxMWZ1c3Rvc19FeWxceGZjbF9Fa2ltX0thc1x1MDEzMW1fQXJhbFx1MDEzMWsiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ik9jYV9cdTAxNWV1Yl9NYXJfTmlzX01heV9IYXpfVGVtX0FcdTAxMWZ1X0V5bF9Fa2lfS2Fz''@;'; put 'put ''X0FyYSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiUGF6YXJfUGF6YXJ0ZXNpX1NhbFx1MDEzMV9ceGM3YXJcdTAxNWZhbWJhX1Blclx1MDE1ZmVtYmVfQ3VtYV9DdW1hcnRlc2kiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiUGF6X1B6dF9TYWxfXHhjN2FyX1Blcl9DdW1fQ210Ii5zcGxpdCgi''@;'; put 'put ''XyIpLHdlZWtkYXlzTWluOiJQel9QdF9TYV9ceGM3YV9QZV9DdV9DdCIuc3BsaXQoIl8iKSxtZXJpZGllbTpmdW5jdGlvbihCLHcsUCl7cmV0dXJuIEI8MTI/UD8iXHhmNlx4ZjYiOiJceGQ2XHhkNiI6UD8iXHhmNnMiOiJceGQ2UyJ9LG1lcmlkaWVtUGFyc2U6L1x4ZjZceGY2fFx4ZDZceGQ2''@;'; put 'put ''fFx4ZjZzfFx4ZDZTLyxpc1BNOmZ1bmN0aW9uKEIpe3JldHVybiJceGY2cyI9PT1CfHwiXHhkNlMiPT09Qn0sbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExM''@;'; put 'put ''OiJkZGRkLCBEIE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbYnVnXHhmY24gc2FhdF0gTFQiLG5leHREYXk6Ilt5YXJcdTAxMzFuIHNhYXRdIExUIixuZXh0V2VlazoiW2dlbGVjZWtdIGRkZGQgW3NhYXRdIExUIixsYXN0RGF5OiJbZFx4ZmNuXSBMVCIsbGFzdFdlZWs6''@;'; put 'put ''IltnZVx4ZTdlbl0gZGRkZCBbc2FhdF0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIHNvbnJhIixwYXN0OiIlcyBceGY2bmNlIixzOiJiaXJrYVx4ZTcgc2FuaXllIixzczoiJWQgc2FuaXllIixtOiJiaXIgZGFraWthIixtbToiJWQgZGFraWthIixoOiJiaXIg''@;'; put 'put ''c2FhdCIsaGg6IiVkIHNhYXQiLGQ6ImJpciBnXHhmY24iLGRkOiIlZCBnXHhmY24iLHc6ImJpciBoYWZ0YSIsd3c6IiVkIGhhZnRhIixNOiJiaXIgYXkiLE1NOiIlZCBheSIseToiYmlyIHlcdTAxMzFsIix5eToiJWQgeVx1MDEzMWwifSxvcmRpbmFsOmZ1bmN0aW9uKEIsdyl7c3dpdGNoKHcp''@;'; put 'put ''e2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRvIjpjYXNlIkREIjpyZXR1cm4gQjtkZWZhdWx0OmlmKDA9PT1CKXJldHVybiBCKyInXHUwMTMxbmNcdTAxMzEiO3ZhciBQPUIlMTA7cmV0dXJuIEIrKHlbUF18fHlbQiUxMDAtUF18fHlbQj49MTAwPzEwMDpudWxsXSl9fSx3ZWVrOntkb3c6MSxkb3k6''@;'; put 'put ''N319KX0oXyg5NzU4NikpfSw4ODUyMTpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZyhCLHcsUCxGKXt2YXIgTz17czpbInZpZW5zYXMgc2VjdW5kcyIsIidpZW5zYXMgc2VjdW5kcyJdLHNzOltCKyIgc2VjdW5kcyIsQisiIHNlY3VuZHMiXSxt''@;'; put 'put ''OlsiJ24gbVx4ZWR1dCIsIidpZW5zIG1ceGVkdXQiXSxtbTpbQisiIG1ceGVkdXRzIixCKyIgbVx4ZWR1dHMiXSxoOlsiJ24gXHhmZW9yYSIsIidpZW5zYSBceGZlb3JhIl0saGg6W0IrIiBceGZlb3JhcyIsQisiIFx4ZmVvcmFzIl0sZDpbIiduIHppdWEiLCInaWVuc2Egeml1YSJdLGRkOltC''@;'; put 'put ''KyIgeml1YXMiLEIrIiB6aXVhcyJdLE06WyInbiBtZXMiLCInaWVucyBtZXMiXSxNTTpbQisiIG1lc2VuIixCKyIgbWVzZW4iXSx5OlsiJ24gYXIiLCInaWVucyBhciJdLHl5OltCKyIgYXJzIixCKyIgYXJzIl19O3JldHVybiBGfHx3P09bUF1bMF06T1tQXVsxXX1JLmRlZmluZUxvY2FsZSgi''@;'; put 'put ''dHpsIix7bW9udGhzOiJKYW51YXJfRmV2cmFnbGhfTWFyXHhlN19BdnJceGVmdV9NYWlfR1x4ZmNuX0p1bGlhX0d1c2NodF9TZXRlbXZhcl9MaXN0b3BceGU0dHNfTm9lbXZhcl9aZWNlbXZhciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSmFuX0Zldl9NYXJfQXZyX01haV9HXHhmY25fSnVs''@;'; put 'put ''X0d1c19TZXRfTGlzX05vZV9aZWMiLnNwbGl0KCJfIiksd2Vla2RheXM6IlNceGZhbGFkaV9MXHhmYW5lXHhlN2lfTWFpdHppX01ceGUxcmN1cmlfWGhceGZhYWRpX1ZpXHhlOW5lclx4ZTdpX1NceGUxdHVyaSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTXHhmYWxfTFx4ZmFuX01haV9N''@;'; put 'put ''XHhlMXJfWGhceGZhX1ZpXHhlOV9TXHhlMXQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46IlNceGZhX0xceGZhX01hX01ceGUxX1hoX1ZpX1NceGUxIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEgubW0iLExUUzoiSEgubW0uc3MiLEw6IkRELk1NLllZWVkiLExMOiJELiBNTU1N''@;'; put 'put ''IFtkYWxsYXNdIFlZWVkiLExMTDoiRC4gTU1NTSBbZGFsbGFzXSBZWVlZIEhILm1tIixMTExMOiJkZGRkLCBbbGldIEQuIE1NTU0gW2RhbGxhc10gWVlZWSBISC5tbSJ9LG1lcmlkaWVtUGFyc2U6L2RcJ298ZFwnYS9pLGlzUE06ZnVuY3Rpb24oQil7cmV0dXJuImQnbyI9PT1CLnRvTG93ZXJD''@;'; put 'put ''YXNlKCl9LG1lcmlkaWVtOmZ1bmN0aW9uKEIsdyxQKXtyZXR1cm4gQj4xMT9QPyJkJ28iOiJEJ08iOlA/ImQnYSI6IkQnQSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbb3hoaSBceGUwXSBMVCIsbmV4dERheToiW2RlbVx4ZTAgXHhlMF0gTFQiLG5leHRXZWVrOiJkZGRkIFtceGUwXSBMVCIsbGFz''@;'; put 'put ''dERheToiW2llaXJpIFx4ZTBdIExUIixsYXN0V2VlazoiW3NceGZjciBlbF0gZGRkZCBbbGFzdGV1IFx4ZTBdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJvc3ByZWkgJXMiLHBhc3Q6ImphJXMiLHM6ZyxzczpnLG06ZyxtbTpnLGg6ZyxoaDpnLGQ6ZyxkZDpnLE06''@;'; put 'put ''ZyxNTTpnLHk6Zyx5eTpnfSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9XC4vLG9yZGluYWw6IiVkLiIsd2Vlazp7ZG93OjEsZG95OjR9fSl9KF8oOTc1ODYpKX0sMjIyMzQ6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJ0''@;'; put 'put ''em0tbGF0biIse21vbnRoczoiaW5uYXlyX2JyXHUwMmU0YXlyXHUwMmU0X21hclx1MDJlNHNcdTAyZTRfaWJyaXJfbWF5eXdfeXdueXdfeXdseXd6X1x1MDI2M3dcdTAxNjF0X1x1MDE2MXd0YW5iaXJfa3RcdTAyZTR3YnJcdTAyZTRfbnd3YW5iaXJfZHdqbmJpciIuc3BsaXQoIl8iKSxtb250''@;'; put 'put ''aHNTaG9ydDoiaW5uYXlyX2JyXHUwMmU0YXlyXHUwMmU0X21hclx1MDJlNHNcdTAyZTRfaWJyaXJfbWF5eXdfeXdueXdfeXdseXd6X1x1MDI2M3dcdTAxNjF0X1x1MDE2MXd0YW5iaXJfa3RcdTAyZTR3YnJcdTAyZTRfbnd3YW5iaXJfZHdqbmJpciIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiYXNh''@;'; put 'put ''bWFzX2F5bmFzX2FzaW5hc19ha3Jhc19ha3dhc19hc2ltd2FzX2FzaVx1MWUwZHlhcyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJhc2FtYXNfYXluYXNfYXNpbmFzX2FrcmFzX2Frd2FzX2FzaW13YXNfYXNpXHUxZTBkeWFzIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJhc2FtYXNfYXlu''@;'; put 'put ''YXNfYXNpbmFzX2FrcmFzX2Frd2FzX2FzaW13YXNfYXNpXHUxZTBkeWFzIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiZGRkZCBE''@;'; put 'put ''IE1NTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbYXNka2ggZ10gTFQiLG5leHREYXk6Ilthc2thIGddIExUIixuZXh0V2VlazoiZGRkZCBbZ10gTFQiLGxhc3REYXk6Ilthc3NhbnQgZ10gTFQiLGxhc3RXZWVrOiJkZGRkIFtnXSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2''@;'; put 'put ''ZVRpbWU6e2Z1dHVyZToiZGFka2ggcyB5YW4gJXMiLHBhc3Q6InlhbiAlcyIsczoiaW1payIsc3M6IiVkIGltaWsiLG06Im1pbnVcdTFlMGQiLG1tOiIlZCBtaW51XHUxZTBkIixoOiJzYVx1MDI1YmEiLGhoOiIlZCB0YXNzYVx1MDI1YmluIixkOiJhc3MiLGRkOiIlZCBvc3NhbiIsTToiYXlv''@;'; put 'put ''d3IiLE1NOiIlZCBpeXlpcm4iLHk6ImFzZ2FzIix5eToiJWQgaXNnYXNuIn0sd2Vlazp7ZG93OjYsZG95OjEyfX0pfShfKDk3NTg2KSl9LDE4MDEwOmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgidHptIix7bW9udGhzOiJcdTJkNDlc''@;'; put 'put ''dTJkNGZcdTJkNGZcdTJkMzBcdTJkNjJcdTJkNTRfXHUyZDMxXHUyZDU1XHUyZDMwXHUyZDYyXHUyZDU1X1x1MmQ0ZVx1MmQzMFx1MmQ1NVx1MmQ1YV9cdTJkNDlcdTJkMzFcdTJkNTRcdTJkNDlcdTJkNTRfXHUyZDRlXHUyZDMwXHUyZDYyXHUyZDYyXHUyZDUzX1x1MmQ2Mlx1MmQ1M1x1MmQ0''@;'; put 'put ''Zlx1MmQ2Mlx1MmQ1M19cdTJkNjJcdTJkNTNcdTJkNGRcdTJkNjJcdTJkNTNcdTJkNjNfXHUyZDU2XHUyZDUzXHUyZDViXHUyZDVjX1x1MmQ1Ylx1MmQ1M1x1MmQ1Y1x1MmQzMFx1MmQ0Zlx1MmQzMVx1MmQ0OVx1MmQ1NF9cdTJkM2RcdTJkNWZcdTJkNTNcdTJkMzFcdTJkNTVfXHUyZDRmXHUy''@;'; put 'put ''ZDUzXHUyZDYxXHUyZDMwXHUyZDRmXHUyZDMxXHUyZDQ5XHUyZDU0X1x1MmQzN1x1MmQ1M1x1MmQ0YVx1MmQ0Zlx1MmQzMVx1MmQ0OVx1MmQ1NCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiXHUyZDQ5XHUyZDRmXHUyZDRmXHUyZDMwXHUyZDYyXHUyZDU0X1x1MmQzMVx1MmQ1NVx1MmQzMFx1''@;'; put 'put ''MmQ2Mlx1MmQ1NV9cdTJkNGVcdTJkMzBcdTJkNTVcdTJkNWFfXHUyZDQ5XHUyZDMxXHUyZDU0XHUyZDQ5XHUyZDU0X1x1MmQ0ZVx1MmQzMFx1MmQ2Mlx1MmQ2Mlx1MmQ1M19cdTJkNjJcdTJkNTNcdTJkNGZcdTJkNjJcdTJkNTNfXHUyZDYyXHUyZDUzXHUyZDRkXHUyZDYyXHUyZDUzXHUyZDYz''@;'; put 'put ''X1x1MmQ1Nlx1MmQ1M1x1MmQ1Ylx1MmQ1Y19cdTJkNWJcdTJkNTNcdTJkNWNcdTJkMzBcdTJkNGZcdTJkMzFcdTJkNDlcdTJkNTRfXHUyZDNkXHUyZDVmXHUyZDUzXHUyZDMxXHUyZDU1X1x1MmQ0Zlx1MmQ1M1x1MmQ2MVx1MmQzMFx1MmQ0Zlx1MmQzMVx1MmQ0OVx1MmQ1NF9cdTJkMzdcdTJk''@;'; put 'put ''NTNcdTJkNGFcdTJkNGZcdTJkMzFcdTJkNDlcdTJkNTQiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1MmQzMFx1MmQ1OVx1MmQzMFx1MmQ0ZVx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNjJcdTJkNGZcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDU5XHUyZDQ5XHUyZDRmXHUyZDMwXHUyZDU5X1x1MmQz''@;'; put 'put ''MFx1MmQzZFx1MmQ1NFx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkM2RcdTJkNjFcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDU5XHUyZDQ5XHUyZDRlXHUyZDYxXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQ1OVx1MmQ0OVx1MmQzOVx1MmQ2Mlx1MmQzMFx1MmQ1OSIuc3BsaXQoIl8iKSx3ZWVrZGF5c1No''@;'; put 'put ''b3J0OiJcdTJkMzBcdTJkNTlcdTJkMzBcdTJkNGVcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDYyXHUyZDRmXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQ1OVx1MmQ0OVx1MmQ0Zlx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkM2RcdTJkNTRcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDNkXHUyZDYxXHUyZDMw''@;'; put 'put ''XHUyZDU5X1x1MmQzMFx1MmQ1OVx1MmQ0OVx1MmQ0ZVx1MmQ2MVx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkNTlcdTJkNDlcdTJkMzlcdTJkNjJcdTJkMzBcdTJkNTkiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1MmQzMFx1MmQ1OVx1MmQzMFx1MmQ0ZVx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJk''@;'; put 'put ''NjJcdTJkNGZcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDU5XHUyZDQ5XHUyZDRmXHUyZDMwXHUyZDU5X1x1MmQzMFx1MmQzZFx1MmQ1NFx1MmQzMFx1MmQ1OV9cdTJkMzBcdTJkM2RcdTJkNjFcdTJkMzBcdTJkNTlfXHUyZDMwXHUyZDU5XHUyZDQ5XHUyZDRlXHUyZDYxXHUyZDMwXHUyZDU5X1x1''@;'; put 'put ''MmQzMFx1MmQ1OVx1MmQ0OVx1MmQzOVx1MmQ2Mlx1MmQzMFx1MmQ1OSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6ImRkZGQgRCBN''@;'; put 'put ''TU1NIFlZWVkgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MmQzMFx1MmQ1OVx1MmQzN1x1MmQ0NSBcdTJkMzRdIExUIixuZXh0RGF5OiJbXHUyZDMwXHUyZDU5XHUyZDNkXHUyZDMwIFx1MmQzNF0gTFQiLG5leHRXZWVrOiJkZGRkIFtcdTJkMzRdIExUIixsYXN0RGF5OiJbXHUyZDMw''@;'; put 'put ''XHUyZDVhXHUyZDMwXHUyZDRmXHUyZDVjIFx1MmQzNF0gTFQiLGxhc3RXZWVrOiJkZGRkIFtcdTJkMzRdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiJcdTJkMzdcdTJkMzBcdTJkMzdcdTJkNDUgXHUyZDU5IFx1MmQ2Mlx1MmQzMFx1MmQ0ZiAlcyIscGFzdDoiXHUy''@;'; put 'put ''ZDYyXHUyZDMwXHUyZDRmICVzIixzOiJcdTJkNDlcdTJkNGVcdTJkNDlcdTJkM2QiLHNzOiIlZCBcdTJkNDlcdTJkNGVcdTJkNDlcdTJkM2QiLG06Ilx1MmQ0ZVx1MmQ0OVx1MmQ0Zlx1MmQ1M1x1MmQzYSIsbW06IiVkIFx1MmQ0ZVx1MmQ0OVx1MmQ0Zlx1MmQ1M1x1MmQzYSIsaDoiXHUyZDU5''@;'; put 'put ''XHUyZDMwXHUyZDQ0XHUyZDMwIixoaDoiJWQgXHUyZDVjXHUyZDMwXHUyZDU5XHUyZDU5XHUyZDMwXHUyZDQ0XHUyZDQ5XHUyZDRmIixkOiJcdTJkMzBcdTJkNTlcdTJkNTkiLGRkOiIlZCBvXHUyZDU5XHUyZDU5XHUyZDMwXHUyZDRmIixNOiJcdTJkMzBcdTJkNjJvXHUyZDUzXHUyZDU0IixN''@;'; put 'put ''TToiJWQgXHUyZDQ5XHUyZDYyXHUyZDYyXHUyZDQ5XHUyZDU0XHUyZDRmIix5OiJcdTJkMzBcdTJkNTlcdTJkMzNcdTJkMzBcdTJkNTkiLHl5OiIlZCBcdTJkNDlcdTJkNTlcdTJkMzNcdTJkMzBcdTJkNTlcdTJkNGYifSx3ZWVrOntkb3c6Nixkb3k6MTJ9fSl9KF8oOTc1ODYpKX0sNjMzNDk6''@;'; put 'put ''ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJ1Zy1jbiIse21vbnRoczoiXHUwNjRhXHUwNjI3XHUwNjQ2XHUwNmNiXHUwNjI3XHUwNjMxX1x1MDY0MVx1MDZkMFx1MDZjYlx1MDYzMVx1MDYyN1x1MDY0NF9cdTA2NDVcdTA2MjdcdTA2''@;'; put 'put ''MzFcdTA2MmFfXHUwNjI2XHUwNjI3XHUwNjdlXHUwNjMxXHUwNmQwXHUwNjQ0X1x1MDY0NVx1MDYyN1x1MDY0YV9cdTA2MjZcdTA2NDlcdTA2NGFcdTA2YzdcdTA2NDZfXHUwNjI2XHUwNjQ5XHUwNjRhXHUwNmM3XHUwNjQ0X1x1MDYyNlx1MDYyN1x1MDZjYlx1MDYzYVx1MDZjN1x1MDYzM1x1''@;'; put 'put ''MDYyYV9cdTA2MzNcdTA2ZDBcdTA2NDZcdTA2MmFcdTA2ZDVcdTA2MjhcdTA2NDlcdTA2MzFfXHUwNjI2XHUwNmM2XHUwNjQzXHUwNjJhXHUwNmQ1XHUwNjI4XHUwNjQ5XHUwNjMxX1x1MDY0Nlx1MDY0OFx1MDY0YVx1MDYyN1x1MDYyOFx1MDY0OVx1MDYzMV9cdTA2MmZcdTA2ZDBcdTA2NDNc''@;'; put 'put ''dTA2MjdcdTA2MjhcdTA2NDlcdTA2MzEiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6Ilx1MDY0YVx1MDYyN1x1MDY0Nlx1MDZjYlx1MDYyN1x1MDYzMV9cdTA2NDFcdTA2ZDBcdTA2Y2JcdTA2MzFcdTA2MjdcdTA2NDRfXHUwNjQ1XHUwNjI3XHUwNjMxXHUwNjJhX1x1MDYyNlx1MDYyN1x1MDY3''@;'; put 'put ''ZVx1MDYzMVx1MDZkMFx1MDY0NF9cdTA2NDVcdTA2MjdcdTA2NGFfXHUwNjI2XHUwNjQ5XHUwNjRhXHUwNmM3XHUwNjQ2X1x1MDYyNlx1MDY0OVx1MDY0YVx1MDZjN1x1MDY0NF9cdTA2MjZcdTA2MjdcdTA2Y2JcdTA2M2FcdTA2YzdcdTA2MzNcdTA2MmFfXHUwNjMzXHUwNmQwXHUwNjQ2XHUw''@;'; put 'put ''NjJhXHUwNmQ1XHUwNjI4XHUwNjQ5XHUwNjMxX1x1MDYyNlx1MDZjNlx1MDY0M1x1MDYyYVx1MDZkNVx1MDYyOFx1MDY0OVx1MDYzMV9cdTA2NDZcdTA2NDhcdTA2NGFcdTA2MjdcdTA2MjhcdTA2NDlcdTA2MzFfXHUwNjJmXHUwNmQwXHUwNjQzXHUwNjI3XHUwNjI4XHUwNjQ5XHUwNjMxIi5z''@;'; put 'put ''cGxpdCgiXyIpLHdlZWtkYXlzOiJcdTA2NGFcdTA2ZDVcdTA2NDNcdTA2MzRcdTA2ZDVcdTA2NDZcdTA2MjhcdTA2ZDVfXHUwNjJmXHUwNmM4XHUwNjM0XHUwNmQ1XHUwNjQ2XHUwNjI4XHUwNmQ1X1x1MDYzM1x1MDZkNVx1MDY0YVx1MDYzNFx1MDZkNVx1MDY0Nlx1MDYyOFx1MDZkNV9cdTA2''@;'; put 'put ''ODZcdTA2MjdcdTA2MzFcdTA2MzRcdTA2ZDVcdTA2NDZcdTA2MjhcdTA2ZDVfXHUwNjdlXHUwNmQ1XHUwNjRhXHUwNjM0XHUwNmQ1XHUwNjQ2XHUwNjI4XHUwNmQ1X1x1MDYyY1x1MDZjOFx1MDY0NVx1MDZkNV9cdTA2MzRcdTA2ZDVcdTA2NDZcdTA2MjhcdTA2ZDUiLnNwbGl0KCJfIiksd2Vl''@;'; put 'put ''a2RheXNTaG9ydDoiXHUwNjRhXHUwNmQ1X1x1MDYyZlx1MDZjOF9cdTA2MzNcdTA2ZDVfXHUwNjg2XHUwNjI3X1x1MDY3ZVx1MDZkNV9cdTA2MmNcdTA2YzhfXHUwNjM0XHUwNmQ1Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA2NGFcdTA2ZDVfXHUwNjJmXHUwNmM4X1x1MDYzM1x1MDZk''@;'; put 'put ''NV9cdTA2ODZcdTA2MjdfXHUwNjdlXHUwNmQ1X1x1MDYyY1x1MDZjOF9cdTA2MzRcdTA2ZDUiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS1NTS1ERCIsTEw6IllZWVktXHUwNjRhXHUwNjQ5XHUwNjQ0XHUwNjQ5TS1cdTA2MjZc''@;'; put 'put ''dTA2MjdcdTA2NGFcdTA2NDZcdTA2NDlcdTA2YWRELVx1MDY0M1x1MDZjOFx1MDY0Nlx1MDY0OSIsTExMOiJZWVlZLVx1MDY0YVx1MDY0OVx1MDY0NFx1MDY0OU0tXHUwNjI2XHUwNjI3XHUwNjRhXHUwNjQ2XHUwNjQ5XHUwNmFkRC1cdTA2NDNcdTA2YzhcdTA2NDZcdTA2NDlcdTA2MGMgSEg6''@;'; put 'put ''bW0iLExMTEw6ImRkZGRcdTA2MGMgWVlZWS1cdTA2NGFcdTA2NDlcdTA2NDRcdTA2NDlNLVx1MDYyNlx1MDYyN1x1MDY0YVx1MDY0Nlx1MDY0OVx1MDZhZEQtXHUwNjQzXHUwNmM4XHUwNjQ2XHUwNjQ5XHUwNjBjIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjRhXHUwNmQwXHUwNjMxXHUw''@;'; put 'put ''NjQ5XHUwNjQ1IFx1MDY0M1x1MDZkMFx1MDY4Nlx1MDZkNXxcdTA2MzNcdTA2ZDVcdTA2YmVcdTA2ZDVcdTA2MzF8XHUwNjg2XHUwNmM4XHUwNjM0XHUwNjJhXHUwNjQ5XHUwNjQ2IFx1MDYyOFx1MDZjN1x1MDYzMVx1MDZjN1x1MDY0NnxcdTA2ODZcdTA2YzhcdTA2MzR8XHUwNjg2XHUwNmM4''@;'; put 'put ''XHUwNjM0XHUwNjJhXHUwNjQ5XHUwNjQ2IFx1MDY0M1x1MDZkMFx1MDY0YVx1MDY0OVx1MDY0NnxcdTA2NDNcdTA2ZDVcdTA2ODYvLG1lcmlkaWVtSG91cjpmdW5jdGlvbihnLEIpe3JldHVybiAxMj09PWcmJihnPTApLCJcdTA2NGFcdTA2ZDBcdTA2MzFcdTA2NDlcdTA2NDUgXHUwNjQzXHUw''@;'; put 'put ''NmQwXHUwNjg2XHUwNmQ1Ij09PUJ8fCJcdTA2MzNcdTA2ZDVcdTA2YmVcdTA2ZDVcdTA2MzEiPT09Qnx8Ilx1MDY4Nlx1MDZjOFx1MDYzNFx1MDYyYVx1MDY0OVx1MDY0NiBcdTA2MjhcdTA2YzdcdTA2MzFcdTA2YzdcdTA2NDYiPT09Qj9nOiJcdTA2ODZcdTA2YzhcdTA2MzRcdTA2MmFcdTA2''@;'; put 'put ''NDlcdTA2NDYgXHUwNjQzXHUwNmQwXHUwNjRhXHUwNjQ5XHUwNjQ2Ij09PUJ8fCJcdTA2NDNcdTA2ZDVcdTA2ODYiPT09Qj9nKzEyOmc+PTExP2c6ZysxMn0sbWVyaWRpZW06ZnVuY3Rpb24oZyxCLHcpe3ZhciBQPTEwMCpnK0I7cmV0dXJuIFA8NjAwPyJcdTA2NGFcdTA2ZDBcdTA2MzFcdTA2''@;'; put 'put ''NDlcdTA2NDUgXHUwNjQzXHUwNmQwXHUwNjg2XHUwNmQ1IjpQPDkwMD8iXHUwNjMzXHUwNmQ1XHUwNmJlXHUwNmQ1XHUwNjMxIjpQPDExMzA/Ilx1MDY4Nlx1MDZjOFx1MDYzNFx1MDYyYVx1MDY0OVx1MDY0NiBcdTA2MjhcdTA2YzdcdTA2MzFcdTA2YzdcdTA2NDYiOlA8MTIzMD8iXHUwNjg2''@;'; put 'put ''XHUwNmM4XHUwNjM0IjpQPDE4MDA/Ilx1MDY4Nlx1MDZjOFx1MDYzNFx1MDYyYVx1MDY0OVx1MDY0NiBcdTA2NDNcdTA2ZDBcdTA2NGFcdTA2NDlcdTA2NDYiOiJcdTA2NDNcdTA2ZDVcdTA2ODYifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDYyOFx1MDZjOFx1MDZhZlx1MDZjOFx1MDY0NiBc''@;'; put 'put ''dTA2MzNcdTA2MjdcdTA2MjZcdTA2ZDVcdTA2MmFdIExUIixuZXh0RGF5OiJbXHUwNjI2XHUwNmQ1XHUwNjJhXHUwNmQ1IFx1MDYzM1x1MDYyN1x1MDYyNlx1MDZkNVx1MDYyYV0gTFQiLG5leHRXZWVrOiJbXHUwNjQzXHUwNmQwXHUwNjQ0XHUwNmQ1XHUwNjMxXHUwNjQzXHUwNjQ5XSBkZGRk''@;'; put 'put ''IFtcdTA2MzNcdTA2MjdcdTA2MjZcdTA2ZDVcdTA2MmFdIExUIixsYXN0RGF5OiJbXHUwNjJhXHUwNmM2XHUwNjQ2XHUwNmM4XHUwNmFmXHUwNmM4XHUwNjQ2XSBMVCIsbGFzdFdlZWs6IltcdTA2MjZcdTA2MjdcdTA2NDRcdTA2MmZcdTA2NDlcdTA2NDZcdTA2NDJcdTA2NDldIGRkZGQgW1x1''@;'; put 'put ''MDYzM1x1MDYyN1x1MDYyNlx1MDZkNVx1MDYyYV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDY0M1x1MDZkMFx1MDY0YVx1MDY0OVx1MDY0NiIscGFzdDoiJXMgXHUwNjI4XHUwNmM3XHUwNjMxXHUwNmM3XHUwNjQ2IixzOiJcdTA2NDZcdTA2ZDVcdTA2''@;'; put 'put ''ODZcdTA2ODZcdTA2ZDUgXHUwNjMzXHUwNmQwXHUwNjQzXHUwNjQ4XHUwNjQ2XHUwNjJhIixzczoiJWQgXHUwNjMzXHUwNmQwXHUwNjQzXHUwNjQ4XHUwNjQ2XHUwNjJhIixtOiJcdTA2MjhcdTA2NDlcdTA2MzEgXHUwNjQ1XHUwNjQ5XHUwNjQ2XHUwNmM3XHUwNjJhIixtbToiJWQgXHUwNjQ1''@;'; put 'put ''XHUwNjQ5XHUwNjQ2XHUwNmM3XHUwNjJhIixoOiJcdTA2MjhcdTA2NDlcdTA2MzEgXHUwNjMzXHUwNjI3XHUwNjI2XHUwNmQ1XHUwNjJhIixoaDoiJWQgXHUwNjMzXHUwNjI3XHUwNjI2XHUwNmQ1XHUwNjJhIixkOiJcdTA2MjhcdTA2NDlcdTA2MzEgXHUwNjQzXHUwNmM4XHUwNjQ2IixkZDoi''@;'; put 'put ''JWQgXHUwNjQzXHUwNmM4XHUwNjQ2IixNOiJcdTA2MjhcdTA2NDlcdTA2MzEgXHUwNjI2XHUwNjI3XHUwNjRhIixNTToiJWQgXHUwNjI2XHUwNjI3XHUwNjRhIix5OiJcdTA2MjhcdTA2NDlcdTA2MzEgXHUwNjRhXHUwNjQ5XHUwNjQ0Iix5eToiJWQgXHUwNjRhXHUwNjQ5XHUwNjQ0In0sZGF5''@;'; put 'put ''T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfSgtXHUwNjQzXHUwNmM4XHUwNjQ2XHUwNjQ5fC1cdTA2MjZcdTA2MjdcdTA2NGF8LVx1MDZiZVx1MDZkNVx1MDY3ZVx1MDYyYVx1MDZkNSkvLG9yZGluYWw6ZnVuY3Rpb24oZyxCKXtzd2l0Y2goQil7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiRERE''@;'; put 'put ''IjpyZXR1cm4gZysiLVx1MDY0M1x1MDZjOFx1MDY0Nlx1MDY0OSI7Y2FzZSJ3IjpjYXNlIlciOnJldHVybiBnKyItXHUwNmJlXHUwNmQ1XHUwNjdlXHUwNjJhXHUwNmQ1IjtkZWZhdWx0OnJldHVybiBnfX0scHJlcGFyc2U6ZnVuY3Rpb24oZyl7cmV0dXJuIGcucmVwbGFjZSgvXHUwNjBjL2cs''@;'; put 'put ''IiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbihnKXtyZXR1cm4gZy5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6MSxkb3k6N319KX0oXyg5NzU4NikpfSw2ODQ3OTpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZyhGLE8seil7cmV0''@;'; put 'put ''dXJuIm0iPT09ej9PPyJcdTA0NDVcdTA0MzJcdTA0MzhcdTA0M2JcdTA0MzhcdTA0M2RcdTA0MzAiOiJcdTA0NDVcdTA0MzJcdTA0MzhcdTA0M2JcdTA0MzhcdTA0M2RcdTA0NDMiOiJoIj09PXo/Tz8iXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDMwIjoiXHUwNDMzXHUwNDNl''@;'; put 'put ''XHUwNDM0XHUwNDM4XHUwNDNkXHUwNDQzIjpGKyIgIitmdW5jdGlvbiB5KEYsTyl7dmFyIHo9Ri5zcGxpdCgiXyIpO3JldHVybiBPJTEwPT0xJiZPJTEwMCE9MTE/elswXTpPJTEwPj0yJiZPJTEwPD00JiYoTyUxMDA8MTB8fE8lMTAwPj0yMCk/elsxXTp6WzJdfSh7c3M6Tz8iXHUwNDQxXHUw''@;'; put 'put ''NDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDMwX1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNFx1MDQzOF9cdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzQiOiJcdTA0NDFcdTA0MzVcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzRcdTA0NDNfXHUwNDQx''@;'; put 'put ''XHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0XHUwNDM4X1x1MDQ0MVx1MDQzNVx1MDQzYVx1MDQ0M1x1MDQzZFx1MDQzNCIsbW06Tz8iXHUwNDQ1XHUwNDMyXHUwNDM4XHUwNDNiXHUwNDM4XHUwNDNkXHUwNDMwX1x1MDQ0NVx1MDQzMlx1MDQzOFx1MDQzYlx1MDQzOFx1MDQzZFx1MDQz''@;'; put 'put ''OF9cdTA0NDVcdTA0MzJcdTA0MzhcdTA0M2JcdTA0MzhcdTA0M2QiOiJcdTA0NDVcdTA0MzJcdTA0MzhcdTA0M2JcdTA0MzhcdTA0M2RcdTA0NDNfXHUwNDQ1XHUwNDMyXHUwNDM4XHUwNDNiXHUwNDM4XHUwNDNkXHUwNDM4X1x1MDQ0NVx1MDQzMlx1MDQzOFx1MDQzYlx1MDQzOFx1MDQzZCIs''@;'; put 'put ''aGg6Tz8iXHUwNDMzXHUwNDNlXHUwNDM0XHUwNDM4XHUwNDNkXHUwNDMwX1x1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQzOF9cdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2QiOiJcdTA0MzNcdTA0M2VcdTA0MzRcdTA0MzhcdTA0M2RcdTA0NDNfXHUwNDMzXHUwNDNlXHUw''@;'; put 'put ''NDM0XHUwNDM4XHUwNDNkXHUwNDM4X1x1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZCIsZGQ6Ilx1MDQzNFx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0MzRcdTA0M2RcdTA0NTZfXHUwNDM0XHUwNDNkXHUwNDU2XHUwNDMyIixNTToiXHUwNDNjXHUwNDU2XHUwNDQxXHUwNDRmXHUwNDQ2XHUw''@;'; put 'put ''NDRjX1x1MDQzY1x1MDQ1Nlx1MDQ0MVx1MDQ0Zlx1MDQ0Nlx1MDQ1Nl9cdTA0M2NcdTA0NTZcdTA0NDFcdTA0NGZcdTA0NDZcdTA0NTZcdTA0MzIiLHl5OiJcdTA0NDBcdTA0NTZcdTA0M2FfXHUwNDQwXHUwNDNlXHUwNDNhXHUwNDM4X1x1MDQ0MFx1MDQzZVx1MDQzYVx1MDQ1Nlx1MDQzMiJ9''@;'; put 'put ''W3pdLCtGKX1mdW5jdGlvbiB3KEYpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBGKyJcdTA0M2UiKygxMT09PXRoaXMuaG91cnMoKT8iXHUwNDMxIjoiIikrIl0gTFQifX1JLmRlZmluZUxvY2FsZSgidWsiLHttb250aHM6e2Zvcm1hdDoiXHUwNDQxXHUwNDU2XHUwNDQ3XHUwNDNkXHUwNDRm''@;'; put 'put ''X1x1MDQzYlx1MDQ0ZVx1MDQ0Mlx1MDQzZVx1MDQzM1x1MDQzZV9cdTA0MzFcdTA0MzVcdTA0NDBcdTA0MzVcdTA0MzdcdTA0M2RcdTA0NGZfXHUwNDNhXHUwNDMyXHUwNDU2XHUwNDQyXHUwNDNkXHUwNDRmX1x1MDQ0Mlx1MDQ0MFx1MDQzMFx1MDQzMlx1MDQzZFx1MDQ0Zl9cdTA0NDdcdTA0''@;'; put 'put ''MzVcdTA0NDBcdTA0MzJcdTA0M2RcdTA0NGZfXHUwNDNiXHUwNDM4XHUwNDNmXHUwNDNkXHUwNDRmX1x1MDQ0MVx1MDQzNVx1MDQ0MFx1MDQzZlx1MDQzZFx1MDQ0Zl9cdTA0MzJcdTA0MzVcdTA0NDBcdTA0MzVcdTA0NDFcdTA0M2RcdTA0NGZfXHUwNDM2XHUwNDNlXHUwNDMyXHUwNDQyXHUw''@;'; put 'put ''NDNkXHUwNDRmX1x1MDQzYlx1MDQzOFx1MDQ0MVx1MDQ0Mlx1MDQzZVx1MDQzZlx1MDQzMFx1MDQzNFx1MDQzMF9cdTA0MzNcdTA0NDBcdTA0NDNcdTA0MzRcdTA0M2RcdTA0NGYiLnNwbGl0KCJfIiksc3RhbmRhbG9uZToiXHUwNDQxXHUwNDU2XHUwNDQ3XHUwNDM1XHUwNDNkXHUwNDRjX1x1''@;'; put 'put ''MDQzYlx1MDQ0ZVx1MDQ0Mlx1MDQzOFx1MDQzOV9cdTA0MzFcdTA0MzVcdTA0NDBcdTA0MzVcdTA0MzdcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDNhXHUwNDMyXHUwNDU2XHUwNDQyXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQ0Mlx1MDQ0MFx1MDQzMFx1MDQzMlx1MDQzNVx1MDQzZFx1MDQ0Y19c''@;'; put 'put ''dTA0NDdcdTA0MzVcdTA0NDBcdTA0MzJcdTA0MzVcdTA0M2RcdTA0NGNfXHUwNDNiXHUwNDM4XHUwNDNmXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQ0MVx1MDQzNVx1MDQ0MFx1MDQzZlx1MDQzNVx1MDQzZFx1MDQ0Y19cdTA0MzJcdTA0MzVcdTA0NDBcdTA0MzVcdTA0NDFcdTA0MzVcdTA0M2Rc''@;'; put 'put ''dTA0NGNfXHUwNDM2XHUwNDNlXHUwNDMyXHUwNDQyXHUwNDM1XHUwNDNkXHUwNDRjX1x1MDQzYlx1MDQzOFx1MDQ0MVx1MDQ0Mlx1MDQzZVx1MDQzZlx1MDQzMFx1MDQzNF9cdTA0MzNcdTA0NDBcdTA0NDNcdTA0MzRcdTA0MzVcdTA0M2RcdTA0NGMiLnNwbGl0KCJfIil9LG1vbnRoc1Nob3J0''@;'; put 'put ''OiJcdTA0NDFcdTA0NTZcdTA0NDdfXHUwNDNiXHUwNDRlXHUwNDQyX1x1MDQzMVx1MDQzNVx1MDQ0MF9cdTA0M2FcdTA0MzJcdTA0NTZcdTA0NDJfXHUwNDQyXHUwNDQwXHUwNDMwXHUwNDMyX1x1MDQ0N1x1MDQzNVx1MDQ0MFx1MDQzMl9cdTA0M2JcdTA0MzhcdTA0M2ZfXHUwNDQxXHUwNDM1''@;'; put 'put ''XHUwNDQwXHUwNDNmX1x1MDQzMlx1MDQzNVx1MDQ0MF9cdTA0MzZcdTA0M2VcdTA0MzJcdTA0NDJfXHUwNDNiXHUwNDM4XHUwNDQxXHUwNDQyX1x1MDQzM1x1MDQ0MFx1MDQ0M1x1MDQzNCIuc3BsaXQoIl8iKSx3ZWVrZGF5czpmdW5jdGlvbiBCKEYsTyl7dmFyIHo9e25vbWluYXRpdmU6Ilx1''@;'; put 'put ''MDQzZFx1MDQzNVx1MDQzNFx1MDQ1Nlx1MDQzYlx1MDQ0Zl9cdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0NTZcdTA0M2JcdTA0M2VcdTA0M2FfXHUwNDMyXHUwNDU2XHUwNDMyXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDNlXHUwNDNhX1x1MDQ0MVx1MDQzNVx1MDQ0MFx1MDQzNVx1''@;'; put 'put ''MDQzNFx1MDQzMF9cdTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0MzVcdTA0NDBfXHUwNDNmXHUyMDE5XHUwNDRmXHUwNDQyXHUwNDNkXHUwNDM4XHUwNDQ2XHUwNDRmX1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzMCIuc3BsaXQoIl8iKSxhY2N1c2F0aXZlOiJcdTA0M2Rc''@;'; put 'put ''dTA0MzVcdTA0MzRcdTA0NTZcdTA0M2JcdTA0NGVfXHUwNDNmXHUwNDNlXHUwNDNkXHUwNDM1XHUwNDM0XHUwNDU2XHUwNDNiXHUwNDNlXHUwNDNhX1x1MDQzMlx1MDQ1Nlx1MDQzMlx1MDQ0Mlx1MDQzZVx1MDQ0MFx1MDQzZVx1MDQzYV9cdTA0NDFcdTA0MzVcdTA0NDBcdTA0MzVcdTA0MzRc''@;'; put 'put ''dTA0NDNfXHUwNDQ3XHUwNDM1XHUwNDQyXHUwNDMyXHUwNDM1XHUwNDQwX1x1MDQzZlx1MjAxOVx1MDQ0Zlx1MDQ0Mlx1MDQzZFx1MDQzOFx1MDQ0Nlx1MDQ0ZV9cdTA0NDFcdTA0NDNcdTA0MzFcdTA0M2VcdTA0NDJcdTA0NDMiLnNwbGl0KCJfIiksZ2VuaXRpdmU6Ilx1MDQzZFx1MDQzNVx1''@;'; put 'put ''MDQzNFx1MDQ1Nlx1MDQzYlx1MDQ1Nl9cdTA0M2ZcdTA0M2VcdTA0M2RcdTA0MzVcdTA0MzRcdTA0NTZcdTA0M2JcdTA0M2FcdTA0MzBfXHUwNDMyXHUwNDU2XHUwNDMyXHUwNDQyXHUwNDNlXHUwNDQwXHUwNDNhXHUwNDMwX1x1MDQ0MVx1MDQzNVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzOF9c''@;'; put 'put ''dTA0NDdcdTA0MzVcdTA0NDJcdTA0MzJcdTA0MzVcdTA0NDBcdTA0MzNcdTA0MzBfXHUwNDNmXHUyMDE5XHUwNDRmXHUwNDQyXHUwNDNkXHUwNDM4XHUwNDQ2XHUwNDU2X1x1MDQ0MVx1MDQ0M1x1MDQzMVx1MDQzZVx1MDQ0Mlx1MDQzOCIuc3BsaXQoIl8iKX07cmV0dXJuITA9PT1GP3oubm9t''@;'; put 'put ''aW5hdGl2ZS5zbGljZSgxLDcpLmNvbmNhdCh6Lm5vbWluYXRpdmUuc2xpY2UoMCwxKSk6Rj96Wy8oXFtbXHUwNDEyXHUwNDMyXHUwNDIzXHUwNDQzXVxdKSA/ZGRkZC8udGVzdChPKT8iYWNjdXNhdGl2ZSI6L1xbPyg/Olx1MDQzY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQzYlx1MDQzZVx1MDQ1''@;'; put 'put ''N3xcdTA0M2RcdTA0MzBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0M2ZcdTA0M2RcdTA0M2VcdTA0NTcpPyA/XF0gP2RkZGQvLnRlc3QoTyk/Imdlbml0aXZlIjoibm9taW5hdGl2ZSJdW0YuZGF5KCldOnoubm9taW5hdGl2ZX0sd2Vla2RheXNTaG9ydDoiXHUwNDNkXHUwNDM0X1x1MDQzZlx1MDQz''@;'; put 'put ''ZF9cdTA0MzJcdTA0NDJfXHUwNDQxXHUwNDQwX1x1MDQ0N1x1MDQ0Ml9cdTA0M2ZcdTA0NDJfXHUwNDQxXHUwNDMxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJcdTA0M2RcdTA0MzRfXHUwNDNmXHUwNDNkX1x1MDQzMlx1MDQ0Ml9cdTA0NDFcdTA0NDBfXHUwNDQ3XHUwNDQyX1x1MDQzZlx1''@;'; put 'put ''MDQ0Ml9cdTA0NDFcdTA0MzEiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQuTU0uWVlZWSIsTEw6IkQgTU1NTSBZWVlZIFx1MDQ0MC4iLExMTDoiRCBNTU1NIFlZWVkgXHUwNDQwLiwgSEg6bW0iLExMTEw6ImRkZGQsIEQgTU1NTSBZ''@;'; put 'put ''WVlZIFx1MDQ0MC4sIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6dygiW1x1MDQyMVx1MDQ0Y1x1MDQzZVx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzZFx1MDQ1NiAiKSxuZXh0RGF5OncoIltcdTA0MTdcdTA0MzBcdTA0MzJcdTA0NDJcdTA0NDBcdTA0MzAgIiksbGFzdERheTp3KCJbXHUwNDEy''@;'; put 'put ''XHUwNDQ3XHUwNDNlXHUwNDQwXHUwNDMwICIpLG5leHRXZWVrOncoIltcdTA0MjNdIGRkZGQgWyIpLGxhc3RXZWVrOmZ1bmN0aW9uKCl7c3dpdGNoKHRoaXMuZGF5KCkpe2Nhc2UgMDpjYXNlIDM6Y2FzZSA1OmNhc2UgNjpyZXR1cm4gdygiW1x1MDQxY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQz''@;'; put 'put ''Ylx1MDQzZVx1MDQ1N10gZGRkZCBbIikuY2FsbCh0aGlzKTtjYXNlIDE6Y2FzZSAyOmNhc2UgNDpyZXR1cm4gdygiW1x1MDQxY1x1MDQzOFx1MDQzZFx1MDQ0M1x1MDQzYlx1MDQzZVx1MDQzM1x1MDQzZV0gZGRkZCBbIikuY2FsbCh0aGlzKX19LHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1l''@;'; put 'put ''OntmdXR1cmU6Ilx1MDQzN1x1MDQzMCAlcyIscGFzdDoiJXMgXHUwNDQyXHUwNDNlXHUwNDNjXHUwNDQzIixzOiJcdTA0MzRcdTA0MzVcdTA0M2FcdTA0NTZcdTA0M2JcdTA0NGNcdTA0M2FcdTA0MzAgXHUwNDQxXHUwNDM1XHUwNDNhXHUwNDQzXHUwNDNkXHUwNDM0IixzczpnLG06ZyxtbTpn''@;'; put 'put ''LGg6Ilx1MDQzM1x1MDQzZVx1MDQzNFx1MDQzOFx1MDQzZFx1MDQ0MyIsaGg6ZyxkOiJcdTA0MzRcdTA0MzVcdTA0M2RcdTA0NGMiLGRkOmcsTToiXHUwNDNjXHUwNDU2XHUwNDQxXHUwNDRmXHUwNDQ2XHUwNDRjIixNTTpnLHk6Ilx1MDQ0MFx1MDQ1Nlx1MDQzYSIseXk6Z30sbWVyaWRpZW1Q''@;'; put 'put ''YXJzZTovXHUwNDNkXHUwNDNlXHUwNDQ3XHUwNDU2fFx1MDQ0MFx1MDQzMFx1MDQzZFx1MDQzYVx1MDQ0M3xcdTA0MzRcdTA0M2RcdTA0NGZ8XHUwNDMyXHUwNDM1XHUwNDQ3XHUwNDNlXHUwNDQwXHUwNDMwLyxpc1BNOmZ1bmN0aW9uKEYpe3JldHVybi9eKFx1MDQzNFx1MDQzZFx1MDQ0Znxc''@;'; put 'put ''dTA0MzJcdTA0MzVcdTA0NDdcdTA0M2VcdTA0NDBcdTA0MzApJC8udGVzdChGKX0sbWVyaWRpZW06ZnVuY3Rpb24oRixPLHope3JldHVybiBGPDQ/Ilx1MDQzZFx1MDQzZVx1MDQ0N1x1MDQ1NiI6RjwxMj8iXHUwNDQwXHUwNDMwXHUwNDNkXHUwNDNhXHUwNDQzIjpGPDE3PyJcdTA0MzRcdTA0''@;'; put 'put ''M2RcdTA0NGYiOiJcdTA0MzJcdTA0MzVcdTA0NDdcdTA0M2VcdTA0NDBcdTA0MzAifSxkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LShcdTA0Mzl8XHUwNDMzXHUwNDNlKS8sb3JkaW5hbDpmdW5jdGlvbihGLE8pe3N3aXRjaChPKXtjYXNlIk0iOmNhc2UiZCI6Y2FzZSJEREQiOmNh''@;'; put 'put ''c2UidyI6Y2FzZSJXIjpyZXR1cm4gRisiLVx1MDQzOSI7Y2FzZSJEIjpyZXR1cm4gRisiLVx1MDQzM1x1MDQzZSI7ZGVmYXVsdDpyZXR1cm4gRn19LHdlZWs6e2RvdzoxLGRveTo3fX0pfShfKDk3NTg2KSl9LDQzMDI0OmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgeT1bIlx1MDYyY1x1MDY0Nlx1MDY0OFx1MDYzMVx1MDZjYyIsIlx1MDY0MVx1MDYzMVx1MDY0OFx1MDYzMVx1MDZjYyIsIlx1MDY0NVx1MDYyN1x1MDYzMVx1MDY4NiIsIlx1MDYyN1x1MDY3ZVx1MDYzMVx1MDZjY1x1MDY0NCIsIlx1MDY0NVx1MDYyNlx1MDZjYyIsIlx1MDYyY1x1''@;'; put 'put ''MDY0OFx1MDY0NiIsIlx1MDYyY1x1MDY0OFx1MDY0NFx1MDYyN1x1MDYyNlx1MDZjYyIsIlx1MDYyN1x1MDZhZlx1MDYzM1x1MDYyYSIsIlx1MDYzM1x1MDYyYVx1MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyN1x1MDZhOVx1MDYyYVx1MDY0OFx1MDYyOFx1MDYzMSIsIlx1MDY0Nlx1MDY0OFx1''@;'; put 'put ''MDY0NVx1MDYyOFx1MDYzMSIsIlx1MDYyZlx1MDYzM1x1MDY0NVx1MDYyOFx1MDYzMSJdLGc9WyJcdTA2MjdcdTA2MmFcdTA2NDhcdTA2MjdcdTA2MzEiLCJcdTA2N2VcdTA2Y2NcdTA2MzEiLCJcdTA2NDVcdTA2NDZcdTA2YWZcdTA2NDQiLCJcdTA2MjhcdTA2MmZcdTA2YmUiLCJcdTA2MmNc''@;'; put 'put ''dTA2NDVcdTA2MzlcdTA2MzFcdTA2MjdcdTA2MmEiLCJcdTA2MmNcdTA2NDVcdTA2MzlcdTA2YzEiLCJcdTA2YzFcdTA2NDFcdTA2MmFcdTA2YzEiXTtJLmRlZmluZUxvY2FsZSgidXIiLHttb250aHM6eSxtb250aHNTaG9ydDp5LHdlZWtkYXlzOmcsd2Vla2RheXNTaG9ydDpnLHdlZWtkYXlz''@;'; put 'put ''TWluOmcsbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiREQvTU0vWVlZWSIsTEw6IkQgTU1NTSBZWVlZIixMTEw6IkQgTU1NTSBZWVlZIEhIOm1tIixMTExMOiJkZGRkXHUwNjBjIEQgTU1NTSBZWVlZIEhIOm1tIn0sbWVyaWRpZW1QYXJzZTovXHUwNjM1XHUw''@;'; put 'put ''NjI4XHUwNjJkfFx1MDYzNFx1MDYyN1x1MDY0NS8saXNQTTpmdW5jdGlvbih3KXtyZXR1cm4iXHUwNjM0XHUwNjI3XHUwNjQ1Ij09PXd9LG1lcmlkaWVtOmZ1bmN0aW9uKHcsUCxGKXtyZXR1cm4gdzwxMj8iXHUwNjM1XHUwNjI4XHUwNjJkIjoiXHUwNjM0XHUwNjI3XHUwNjQ1In0sY2FsZW5k''@;'; put 'put ''YXI6e3NhbWVEYXk6IltcdTA2MjJcdTA2MmMgXHUwNjI4XHUwNjQ4XHUwNjQyXHUwNjJhXSBMVCIsbmV4dERheToiW1x1MDZhOVx1MDY0NCBcdTA2MjhcdTA2NDhcdTA2NDJcdTA2MmFdIExUIixuZXh0V2VlazoiZGRkZCBbXHUwNjI4XHUwNjQ4XHUwNjQyXHUwNjJhXSBMVCIsbGFzdERheToi''@;'; put 'put ''W1x1MDZhZlx1MDYzMFx1MDYzNFx1MDYyYVx1MDZjMSBcdTA2MzFcdTA2NDhcdTA2MzIgXHUwNjI4XHUwNjQ4XHUwNjQyXHUwNjJhXSBMVCIsbGFzdFdlZWs6IltcdTA2YWZcdTA2MzBcdTA2MzRcdTA2MmFcdTA2YzFdIGRkZGQgW1x1MDYyOFx1MDY0OFx1MDY0Mlx1MDYyYV0gTFQiLHNhbWVF''@;'; put 'put ''bHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzIFx1MDYyOFx1MDYzOVx1MDYyZiIscGFzdDoiJXMgXHUwNjQyXHUwNjI4XHUwNjQ0IixzOiJcdTA2ODZcdTA2NDZcdTA2MmYgXHUwNjMzXHUwNmNjXHUwNmE5XHUwNjQ2XHUwNjg4IixzczoiJWQgXHUwNjMzXHUwNmNjXHUwNmE5XHUw''@;'; put 'put ''NjQ2XHUwNjg4IixtOiJcdTA2MjdcdTA2Y2NcdTA2YTkgXHUwNjQ1XHUwNjQ2XHUwNjc5IixtbToiJWQgXHUwNjQ1XHUwNjQ2XHUwNjc5IixoOiJcdTA2MjdcdTA2Y2NcdTA2YTkgXHUwNmFmXHUwNmJlXHUwNjQ2XHUwNjc5XHUwNmMxIixoaDoiJWQgXHUwNmFmXHUwNmJlXHUwNjQ2XHUwNjc5''@;'; put 'put ''XHUwNmQyIixkOiJcdTA2MjdcdTA2Y2NcdTA2YTkgXHUwNjJmXHUwNjQ2IixkZDoiJWQgXHUwNjJmXHUwNjQ2IixNOiJcdTA2MjdcdTA2Y2NcdTA2YTkgXHUwNjQ1XHUwNjI3XHUwNmMxIixNTToiJWQgXHUwNjQ1XHUwNjI3XHUwNmMxIix5OiJcdTA2MjdcdTA2Y2NcdTA2YTkgXHUwNjMzXHUw''@;'; put 'put ''NjI3XHUwNjQ0Iix5eToiJWQgXHUwNjMzXHUwNjI3XHUwNjQ0In0scHJlcGFyc2U6ZnVuY3Rpb24odyl7cmV0dXJuIHcucmVwbGFjZSgvXHUwNjBjL2csIiwiKX0scG9zdGZvcm1hdDpmdW5jdGlvbih3KXtyZXR1cm4gdy5yZXBsYWNlKC8sL2csIlx1MDYwYyIpfSx3ZWVrOntkb3c6MSxkb3k6''@;'; put 'put ''NH19KX0oXyg5NzU4NikpfSw3MjM3NjpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInV6LWxhdG4iLHttb250aHM6IllhbnZhcl9GZXZyYWxfTWFydF9BcHJlbF9NYXlfSXl1bl9JeXVsX0F2Z3VzdF9TZW50YWJyX09rdGFicl9Ob3lh''@;'; put 'put ''YnJfRGVrYWJyIi5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiJZYW5fRmV2X01hcl9BcHJfTWF5X0l5dW5fSXl1bF9BdmdfU2VuX09rdF9Ob3lfRGVrIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJZYWtzaGFuYmFfRHVzaGFuYmFfU2VzaGFuYmFfQ2hvcnNoYW5iYV9QYXlzaGFuYmFfSnVtYV9TaGFu''@;'; put 'put ''YmEiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiWWFrX0R1c2hfU2VzaF9DaG9yX1BheV9KdW1fU2hhbiIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiWWFfRHVfU2VfQ2hvX1BhX0p1X1NoYSIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixM''@;'; put 'put ''OiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExMTEw6IkQgTU1NTSBZWVlZLCBkZGRkIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltCdWd1biBzb2F0XSBMVCBbZGFdIixuZXh0RGF5OiJbRXJ0YWdhXSBMVCBbZGFdIixuZXh0V2Vlazoi''@;'; put 'put ''ZGRkZCBba3VuaSBzb2F0XSBMVCBbZGFdIixsYXN0RGF5OiJbS2VjaGEgc29hdF0gTFQgW2RhXSIsbGFzdFdlZWs6IltPJ3RnYW5dIGRkZGQgW2t1bmkgc29hdF0gTFQgW2RhXSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiWWFxaW4gJXMgaWNoaWRhIixwYXN0OiJCaXIg''@;'; put 'put ''bmVjaGEgJXMgb2xkaW4iLHM6InNvbml5YSIsc3M6IiVkIHNvbml5YSIsbToiYmlyIGRhcWlxYSIsbW06IiVkIGRhcWlxYSIsaDoiYmlyIHNvYXQiLGhoOiIlZCBzb2F0IixkOiJiaXIga3VuIixkZDoiJWQga3VuIixNOiJiaXIgb3kiLE1NOiIlZCBveSIseToiYmlyIHlpbCIseXk6IiVkIHlp''@;'; put 'put ''bCJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShfKDk3NTg2KSl9LDE5ODAwOmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgidXoiLHttb250aHM6Ilx1MDQ0Zlx1MDQzZFx1MDQzMlx1MDQzMFx1MDQ0MF9cdTA0NDRcdTA0MzVcdTA0MzJc''@;'; put 'put ''dTA0NDBcdTA0MzBcdTA0M2JfXHUwNDNjXHUwNDMwXHUwNDQwXHUwNDQyX1x1MDQzMFx1MDQzZlx1MDQ0MFx1MDQzNVx1MDQzYl9cdTA0M2NcdTA0MzBcdTA0MzlfXHUwNDM4XHUwNDRlXHUwNDNkX1x1MDQzOFx1MDQ0ZVx1MDQzYl9cdTA0MzBcdTA0MzJcdTA0MzNcdTA0NDNcdTA0NDFcdTA0''@;'; put 'put ''NDJfXHUwNDQxXHUwNDM1XHUwNDNkXHUwNDQyXHUwNDRmXHUwNDMxXHUwNDQwX1x1MDQzZVx1MDQzYVx1MDQ0Mlx1MDQ0Zlx1MDQzMVx1MDQ0MF9cdTA0M2RcdTA0M2VcdTA0NGZcdTA0MzFcdTA0NDBfXHUwNDM0XHUwNDM1XHUwNDNhXHUwNDMwXHUwNDMxXHUwNDQwIi5zcGxpdCgiXyIpLG1v''@;'; put 'put ''bnRoc1Nob3J0OiJcdTA0NGZcdTA0M2RcdTA0MzJfXHUwNDQ0XHUwNDM1XHUwNDMyX1x1MDQzY1x1MDQzMFx1MDQ0MF9cdTA0MzBcdTA0M2ZcdTA0NDBfXHUwNDNjXHUwNDMwXHUwNDM5X1x1MDQzOFx1MDQ0ZVx1MDQzZF9cdTA0MzhcdTA0NGVcdTA0M2JfXHUwNDMwXHUwNDMyXHUwNDMzX1x1''@;'; put 'put ''MDQ0MVx1MDQzNVx1MDQzZF9cdTA0M2VcdTA0M2FcdTA0NDJfXHUwNDNkXHUwNDNlXHUwNDRmX1x1MDQzNFx1MDQzNVx1MDQzYSIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHUwNDJmXHUwNDNhXHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDMwX1x1MDQxNFx1MDQ0M1x1MDQ0OFx1MDQzMFx1''@;'; put 'put ''MDQzZFx1MDQzMVx1MDQzMF9cdTA0MjFcdTA0MzVcdTA0NDhcdTA0MzBcdTA0M2RcdTA0MzFcdTA0MzBfXHUwNDI3XHUwNDNlXHUwNDQwXHUwNDQ4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDMwX1x1MDQxZlx1MDQzMFx1MDQzOVx1MDQ0OFx1MDQzMFx1MDQzZFx1MDQzMVx1MDQzMF9cdTA0MTZc''@;'; put 'put ''dTA0NDNcdTA0M2NcdTA0MzBfXHUwNDI4XHUwNDMwXHUwNDNkXHUwNDMxXHUwNDMwIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1MDQyZlx1MDQzYVx1MDQ0OF9cdTA0MTRcdTA0NDNcdTA0NDhfXHUwNDIxXHUwNDM1XHUwNDQ4X1x1MDQyN1x1MDQzZVx1MDQ0MF9cdTA0MWZcdTA0MzBc''@;'; put 'put ''dTA0MzlfXHUwNDE2XHUwNDQzXHUwNDNjX1x1MDQyOFx1MDQzMFx1MDQzZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHUwNDJmXHUwNDNhX1x1MDQxNFx1MDQ0M19cdTA0MjFcdTA0MzVfXHUwNDI3XHUwNDNlX1x1MDQxZlx1MDQzMF9cdTA0MTZcdTA0NDNfXHUwNDI4XHUwNDMwIi5zcGxp''@;'; put 'put ''dCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBISDptbSIsTExMTDoiRCBNTU1NIFlZWVksIGRkZGQgSEg6bW0ifSxjYWxlbmRhcjp7c2FtZURheToiW1x1MDQxMVx1''@;'; put 'put ''MDQ0M1x1MDQzM1x1MDQ0M1x1MDQzZCBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDJdIExUIFtcdTA0MzRcdTA0MzBdIixuZXh0RGF5OiJbXHUwNDJkXHUwNDQwXHUwNDQyXHUwNDMwXHUwNDMzXHUwNDMwXSBMVCBbXHUwNDM0XHUwNDMwXSIsbmV4dFdlZWs6ImRkZGQgW1x1MDQzYVx1MDQ0M1x1''@;'; put 'put ''MDQzZFx1MDQzOCBcdTA0NDFcdTA0M2VcdTA0MzBcdTA0NDJdIExUIFtcdTA0MzRcdTA0MzBdIixsYXN0RGF5OiJbXHUwNDFhXHUwNDM1XHUwNDQ3XHUwNDMwIFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0Ml0gTFQgW1x1MDQzNFx1MDQzMF0iLGxhc3RXZWVrOiJbXHUwNDIzXHUwNDQyXHUwNDMz''@;'; put 'put ''XHUwNDMwXHUwNDNkXSBkZGRkIFtcdTA0M2FcdTA0NDNcdTA0M2RcdTA0MzggXHUwNDQxXHUwNDNlXHUwNDMwXHUwNDQyXSBMVCBbXHUwNDM0XHUwNDMwXSIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHUwNDJmXHUwNDNhXHUwNDM4XHUwNDNkICVzIFx1MDQzOFx1MDQ0''@;'; put 'put ''N1x1MDQzOFx1MDQzNFx1MDQzMCIscGFzdDoiXHUwNDExXHUwNDM4XHUwNDQwIFx1MDQzZFx1MDQzNVx1MDQ0N1x1MDQzMCAlcyBcdTA0M2VcdTA0M2JcdTA0MzRcdTA0MzhcdTA0M2QiLHM6Ilx1MDQ0NFx1MDQ0M1x1MDQ0MFx1MDQ0MVx1MDQzMFx1MDQ0MiIsc3M6IiVkIFx1MDQ0NFx1MDQ0''@;'; put 'put ''M1x1MDQ0MFx1MDQ0MVx1MDQzMFx1MDQ0MiIsbToiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzNFx1MDQzMFx1MDQzYVx1MDQzOFx1MDQzYVx1MDQzMCIsbW06IiVkIFx1MDQzNFx1MDQzMFx1MDQzYVx1MDQzOFx1MDQzYVx1MDQzMCIsaDoiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQ0MVx1MDQz''@;'; put 'put ''ZVx1MDQzMFx1MDQ0MiIsaGg6IiVkIFx1MDQ0MVx1MDQzZVx1MDQzMFx1MDQ0MiIsZDoiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzYVx1MDQ0M1x1MDQzZCIsZGQ6IiVkIFx1MDQzYVx1MDQ0M1x1MDQzZCIsTToiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzZVx1MDQzOSIsTU06IiVkIFx1MDQz''@;'; put 'put ''ZVx1MDQzOSIseToiXHUwNDMxXHUwNDM4XHUwNDQwIFx1MDQzOVx1MDQzOFx1MDQzYiIseXk6IiVkIFx1MDQzOVx1MDQzOFx1MDQzYiJ9LHdlZWs6e2RvdzoxLGRveTo3fX0pfShfKDk3NTg2KSl9LDg5MzY2OmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRl''@;'; put 'put ''ZmluZUxvY2FsZSgidmkiLHttb250aHM6InRoXHhlMW5nIDFfdGhceGUxbmcgMl90aFx4ZTFuZyAzX3RoXHhlMW5nIDRfdGhceGUxbmcgNV90aFx4ZTFuZyA2X3RoXHhlMW5nIDdfdGhceGUxbmcgOF90aFx4ZTFuZyA5X3RoXHhlMW5nIDEwX3RoXHhlMW5nIDExX3RoXHhlMW5nIDEyIi5zcGxp''@;'; put 'put ''dCgiXyIpLG1vbnRoc1Nob3J0OiJUaGcgMDFfVGhnIDAyX1RoZyAwM19UaGcgMDRfVGhnIDA1X1RoZyAwNl9UaGcgMDdfVGhnIDA4X1RoZyAwOV9UaGcgMTBfVGhnIDExX1RoZyAxMiIuc3BsaXQoIl8iKSxtb250aHNQYXJzZUV4YWN0OiEwLHdlZWtkYXlzOiJjaFx1MWVlNyBuaFx1MWVhZHRf''@;'; put 'put ''dGhcdTFlZTkgaGFpX3RoXHUxZWU5IGJhX3RoXHUxZWU5IHRcdTAxYjBfdGhcdTFlZTkgblx1MDEwM21fdGhcdTFlZTkgc1x4ZTF1X3RoXHUxZWU5IGJcdTFlYTN5Ii5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6IkNOX1QyX1QzX1Q0X1Q1X1Q2X1Q3Ii5zcGxpdCgiXyIpLHdlZWtkYXlzTWlu''@;'; put 'put ''OiJDTl9UMl9UM19UNF9UNV9UNl9UNyIuc3BsaXQoIl8iKSx3ZWVrZGF5c1BhcnNlRXhhY3Q6ITAsbWVyaWRpZW1QYXJzZTovc2F8Y2gvaSxpc1BNOmZ1bmN0aW9uKGcpe3JldHVybi9eY2gkL2kudGVzdChnKX0sbWVyaWRpZW06ZnVuY3Rpb24oZyxCLHcpe3JldHVybiBnPDEyP3c/InNhIjoi''@;'; put 'put ''U0EiOnc/ImNoIjoiQ0gifSxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFtuXHUwMTAzbV0gWVlZWSIsTExMOiJEIE1NTU0gW25cdTAxMDNtXSBZWVlZIEhIOm1tIixMTExMOiJkZGRkLCBEIE1NTU0gW25cdTAxMDNt''@;'; put 'put ''XSBZWVlZIEhIOm1tIixsOiJERC9NL1lZWVkiLGxsOiJEIE1NTSBZWVlZIixsbGw6IkQgTU1NIFlZWVkgSEg6bW0iLGxsbGw6ImRkZCwgRCBNTU0gWVlZWSBISDptbSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbSFx4ZjRtIG5heSBsXHhmYWNdIExUIixuZXh0RGF5OiJbTmdceGUweSBtYWkgbFx4''@;'; put 'put ''ZmFjXSBMVCIsbmV4dFdlZWs6ImRkZGQgW3R1XHUxZWE3biB0XHUxZWRiaSBsXHhmYWNdIExUIixsYXN0RGF5OiJbSFx4ZjRtIHF1YSBsXHhmYWNdIExUIixsYXN0V2VlazoiZGRkZCBbdHVcdTFlYTduIHRyXHUwMWIwXHUxZWRiYyBsXHhmYWNdIExUIixzYW1lRWxzZToiTCJ9LHJlbGF0aXZl''@;'; put 'put ''VGltZTp7ZnV0dXJlOiIlcyB0XHUxZWRiaSIscGFzdDoiJXMgdHJcdTAxYjBcdTFlZGJjIixzOiJ2XHhlMGkgZ2lceGUyeSIsc3M6IiVkIGdpXHhlMnkiLG06Im1cdTFlZDl0IHBoXHhmYXQiLG1tOiIlZCBwaFx4ZmF0IixoOiJtXHUxZWQ5dCBnaVx1MWVkZCIsaGg6IiVkIGdpXHUxZWRkIixk''@;'; put 'put ''OiJtXHUxZWQ5dCBuZ1x4ZTB5IixkZDoiJWQgbmdceGUweSIsdzoibVx1MWVkOXQgdHVcdTFlYTduIix3dzoiJWQgdHVcdTFlYTduIixNOiJtXHUxZWQ5dCB0aFx4ZTFuZyIsTU06IiVkIHRoXHhlMW5nIix5OiJtXHUxZWQ5dCBuXHUwMTAzbSIseXk6IiVkIG5cdTAxMDNtIn0sZGF5T2ZNb250''@;'; put 'put ''aE9yZGluYWxQYXJzZTovXGR7MSwyfS8sb3JkaW5hbDpmdW5jdGlvbihnKXtyZXR1cm4gZ30sd2Vlazp7ZG93OjEsZG95OjR9fSl9KF8oOTc1ODYpKX0sNjk3MDI6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJ4LXBzZXVkbyIse21v''@;'; put 'put ''bnRoczoiSn5ceGUxXHhmMVx4ZmFceGUxfnJceGZkX0Z+XHhlOWJyXHhmYX5ceGUxclx4ZmRffk1ceGUxcmN+aF9ceGMxcH5yXHhlZGxffk1ceGUxXHhmZF9+Slx4ZmFceGYxXHhlOX5fSlx4ZmFsflx4ZmRfXHhjMVx4ZmF+Z1x4ZmFzdH5fU1x4ZTlwfnRceGU5bWJ+XHhlOXJfXHhkM35jdFx4''@;'; put 'put ''ZjNiflx4ZTlyX1x4ZDF+XHhmM3ZceGU5bX5iXHhlOXJffkRceGU5Y1x4ZTl+bWJceGU5ciIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiSn5ceGUxXHhmMV9+Rlx4ZTliX35NXHhlMXJfflx4YzFwcl9+TVx4ZTFceGZkX35KXHhmYVx4ZjFffkpceGZhbF9+XHhjMVx4ZmFnX35TXHhlOXBfflx4''@;'; put 'put ''ZDNjdF9+XHhkMVx4ZjN2X35EXHhlOWMiLnNwbGl0KCJfIiksbW9udGhzUGFyc2VFeGFjdDohMCx3ZWVrZGF5czoiU35ceGZhXHhmMWRceGUxflx4ZmRfTVx4ZjN+XHhmMWRceGUxXHhmZH5fVFx4ZmFceGU5fnNkXHhlMVx4ZmR+X1dceGU5ZH5ceGYxXHhlOXNkflx4ZTFceGZkX1R+aFx4ZmFy''@;'; put 'put ''c35kXHhlMVx4ZmRffkZyXHhlZGR+XHhlMVx4ZmRfU35ceGUxdFx4ZmFyfmRceGUxXHhmZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJTflx4ZmFceGYxX35NXHhmM1x4ZjFfflRceGZhXHhlOV9+V1x4ZTlkX35UaFx4ZmFffkZyXHhlZF9+U1x4ZTF0Ii5zcGxpdCgiXyIpLHdlZWtkYXlz''@;'; put 'put ''TWluOiJTflx4ZmFfTVx4ZjN+X1RceGZhX35XXHhlOV9UfmhfRnJ+X1NceGUxIi5zcGxpdCgiXyIpLHdlZWtkYXlzUGFyc2VFeGFjdDohMCxsb25nRGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMOiJERC9NTS9ZWVlZIixMTDoiRCBNTU1NIFlZWVkiLExMTDoiRCBNTU1NIFlZWVkgSEg6bW0iLExM''@;'; put 'put ''TEw6ImRkZGQsIEQgTU1NTSBZWVlZIEhIOm1tIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltUflx4ZjNkXHhlMX5ceGZkIFx4ZTF0XSBMVCIsbmV4dERheToiW1R+XHhmM21ceGYzfnJyXHhmM353IFx4ZTF0XSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x4ZTF0XSBMVCIsbGFzdERheToiW1x4ZGR+XHhl''@;'; put 'put ''OXN0flx4ZTlyZFx4ZTF+XHhmZCBceGUxdF0gTFQiLGxhc3RXZWVrOiJbTH5ceGUxc3RdIGRkZGQgW1x4ZTF0XSBMVCIsc2FtZUVsc2U6IkwifSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiXHhlZH5ceGYxICVzIixwYXN0OiIlcyBceGUxfmdceGYzIixzOiJceGUxIH5mXHhlOXcgfnNceGU5Y1x4''@;'; put 'put ''ZjN+XHhmMWRzIixzczoiJWQgc35ceGU5Y1x4ZjNceGYxfmRzIixtOiJceGUxIH5tXHhlZFx4ZjF+XHhmYXRceGU5IixtbToiJWQgbX5ceGVkXHhmMVx4ZmF+dFx4ZTlzIixoOiJceGUxflx4ZjEgaFx4ZjN+XHhmYXIiLGhoOiIlZCBoflx4ZjNceGZhcnMiLGQ6Ilx4ZTEgfmRceGUxXHhmZCIs''@;'; put 'put ''ZGQ6IiVkIGR+XHhlMVx4ZmRzIixNOiJceGUxIH5tXHhmM1x4ZjF+dGgiLE1NOiIlZCBtflx4ZjNceGYxdH5ocyIseToiXHhlMSB+XHhmZFx4ZTlceGUxciIseXk6IiVkIFx4ZmR+XHhlOVx4ZTFycyJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0odGh8c3R8bmR8cmQpLyxvcmRp''@;'; put 'put ''bmFsOmZ1bmN0aW9uKGcpe3ZhciBCPWclMTA7cmV0dXJuIGcrKDE9PX5+KGclMTAwLzEwKT8idGgiOjE9PT1CPyJzdCI6Mj09PUI/Im5kIjozPT09Qj8icmQiOiJ0aCIpfSx3ZWVrOntkb3c6MSxkb3k6NH19KX0oXyg5NzU4NikpfSw3MjY1NTpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJ''@;'; put 'put ''KXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInlvIix7bW9udGhzOiJTXHUxZWI5XHUwMzAxclx1MWViOVx1MDMwMV9FXHUwMzAwcmVcdTAzMDBsZVx1MDMwMF9cdTFlYjhyXHUxZWI5XHUwMzAwbmFcdTAzMDBfSVx1MDMwMGdiZVx1MDMwMV9FXHUwMzAwYmliaV9PXHUwMzAwa3VcdTAz''@;'; put 'put ''MDBkdV9BZ1x1MWViOW1vX09cdTAzMDBndVx1MDMwMW5fT3dld2VfXHUxZWNjXHUwMzAwd2FcdTAzMDByYVx1MDMwMF9CZVx1MDMwMWx1XHUwMzAxX1x1MWVjY1x1MDMwMHBcdTFlYjlcdTAzMDBcdTAzMDAiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IlNcdTFlYjlcdTAzMDFyX0VcdTAzMDBy''@;'; put 'put ''bF9cdTFlYjhybl9JXHUwMzAwZ2JfRVx1MDMwMGJpX09cdTAzMDBrdVx1MDMwMF9BZ1x1MWViOV9PXHUwMzAwZ3VcdTAzMDFfT3dlX1x1MWVjY1x1MDMwMHdhXHUwMzAwX0JlXHUwMzAxbF9cdTFlY2NcdTAzMDBwXHUxZWI5XHUwMzAwXHUwMzAwIi5zcGxpdCgiXyIpLHdlZWtkYXlzOiJBXHUw''@;'; put 'put ''MzAwaVx1MDMwMGt1XHUwMzAxX0FqZVx1MDMwMV9JXHUwMzAwc1x1MWViOVx1MDMwMWd1bl9cdTFlY2NqXHUxZWNkXHUwMzAxcnVcdTAzMDFfXHUxZWNjalx1MWVjZFx1MDMwMWJcdTFlY2RfXHUxZWI4dGlcdTAzMDBfQVx1MDMwMGJhXHUwMzAxbVx1MWViOVx1MDMwMXRhIi5zcGxpdCgiXyIp''@;'; put 'put ''LHdlZWtkYXlzU2hvcnQ6IkFcdTAzMDBpXHUwMzAwa19BamVcdTAzMDFfSVx1MDMwMHNcdTFlYjlcdTAzMDFfXHUxZWNjanJfXHUxZWNjamJfXHUxZWI4dGlcdTAzMDBfQVx1MDMwMGJhXHUwMzAxIi5zcGxpdCgiXyIpLHdlZWtkYXlzTWluOiJBXHUwMzAwaVx1MDMwMF9Bal9JXHUwMzAwc19c''@;'; put 'put ''dTFlY2NyX1x1MWVjY2JfXHUxZWI4dF9BXHUwMzAwYiIuc3BsaXQoIl8iKSxsb25nRGF0ZUZvcm1hdDp7TFQ6Img6bW0gQSIsTFRTOiJoOm1tOnNzIEEiLEw6IkREL01NL1lZWVkiLExMOiJEIE1NTU0gWVlZWSIsTExMOiJEIE1NTU0gWVlZWSBoOm1tIEEiLExMTEw6ImRkZGQsIEQgTU1NTSBZ''@;'; put 'put ''WVlZIGg6bW0gQSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbT1x1MDMwMG5pXHUwMzAwIG5pXSBMVCIsbmV4dERheToiW1x1MWVjY1x1MDMwMGxhIG5pXSBMVCIsbmV4dFdlZWs6ImRkZGQgW1x1MWVjY3NcdTFlYjlcdTAzMDAgdG9cdTAzMDFuJ2JcdTFlY2RdIFtuaV0gTFQiLGxhc3REYXk6IltB''@;'; put 'put ''XHUwMzAwbmEgbmldIExUIixsYXN0V2VlazoiZGRkZCBbXHUxZWNjc1x1MWViOVx1MDMwMCB0b1x1MDMwMWxcdTFlY2RcdTAzMDFdIFtuaV0gTFQiLHNhbWVFbHNlOiJMIn0scmVsYXRpdmVUaW1lOntmdXR1cmU6Im5pXHUwMzAxICVzIixwYXN0OiIlcyBrXHUxZWNkamFcdTAzMDEiLHM6Imlc''@;'; put 'put ''dTAzMDBzXHUxZWI5anVcdTAzMDEgYWF5YVx1MDMwMSBkaWUiLHNzOiJhYXlhXHUwMzAxICVkIixtOiJpXHUwMzAwc1x1MWViOWp1XHUwMzAxIGthbiIsbW06ImlcdTAzMDBzXHUxZWI5anVcdTAzMDEgJWQiLGg6IndhXHUwMzAxa2F0aSBrYW4iLGhoOiJ3YVx1MDMwMWthdGkgJWQiLGQ6Ilx1''@;'; put 'put ''MWVjZGpcdTFlY2RcdTAzMDEga2FuIixkZDoiXHUxZWNkalx1MWVjZFx1MDMwMSAlZCIsTToib3N1XHUwMzAwIGthbiIsTU06Im9zdVx1MDMwMCAlZCIseToiXHUxZWNkZHVcdTAzMDFuIGthbiIseXk6Ilx1MWVjZGR1XHUwMzAxbiAlZCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1x1MWVj''@;'; put 'put ''ZGpcdTFlY2RcdTAzMDFcc1xkezEsMn0vLG9yZGluYWw6Ilx1MWVjZGpcdTFlY2RcdTAzMDEgJWQiLHdlZWs6e2RvdzoxLGRveTo0fX0pfShfKDk3NTg2KSl9LDU3NTpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5kZWZpbmVMb2NhbGUoInpoLWNuIix7bW9u''@;'; put 'put ''dGhzOiJcdTRlMDBcdTY3MDhfXHU0ZThjXHU2NzA4X1x1NGUwOVx1NjcwOF9cdTU2ZGJcdTY3MDhfXHU0ZTk0XHU2NzA4X1x1NTE2ZFx1NjcwOF9cdTRlMDNcdTY3MDhfXHU1MTZiXHU2NzA4X1x1NGU1ZFx1NjcwOF9cdTUzNDFcdTY3MDhfXHU1MzQxXHU0ZTAwXHU2NzA4X1x1NTM0MVx1NGU4''@;'; put 'put ''Y1x1NjcwOCIuc3BsaXQoIl8iKSxtb250aHNTaG9ydDoiMVx1NjcwOF8yXHU2NzA4XzNcdTY3MDhfNFx1NjcwOF81XHU2NzA4XzZcdTY3MDhfN1x1NjcwOF84XHU2NzA4XzlcdTY3MDhfMTBcdTY3MDhfMTFcdTY3MDhfMTJcdTY3MDgiLnNwbGl0KCJfIiksd2Vla2RheXM6Ilx1NjYxZlx1Njcx''@;'; put 'put ''Zlx1NjVlNV9cdTY2MWZcdTY3MWZcdTRlMDBfXHU2NjFmXHU2NzFmXHU0ZThjX1x1NjYxZlx1NjcxZlx1NGUwOV9cdTY2MWZcdTY3MWZcdTU2ZGJfXHU2NjFmXHU2NzFmXHU0ZTk0X1x1NjYxZlx1NjcxZlx1NTE2ZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c1Nob3J0OiJcdTU0NjhcdTY1ZTVfXHU1''@;'; put 'put ''NDY4XHU0ZTAwX1x1NTQ2OFx1NGU4Y19cdTU0NjhcdTRlMDlfXHU1NDY4XHU1NmRiX1x1NTQ2OFx1NGU5NF9cdTU0NjhcdTUxNmQiLnNwbGl0KCJfIiksd2Vla2RheXNNaW46Ilx1NjVlNV9cdTRlMDBfXHU0ZThjX1x1NGUwOV9cdTU2ZGJfXHU0ZTk0X1x1NTE2ZCIuc3BsaXQoIl8iKSxsb25n''@;'; put 'put ''RGF0ZUZvcm1hdDp7TFQ6IkhIOm1tIixMVFM6IkhIOm1tOnNzIixMOiJZWVlZL01NL0REIixMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IixMTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNUFoXHU3MGI5bW1cdTUyMDYiLExMTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNWRkZGRB''@;'; put 'put ''aFx1NzBiOW1tXHU1MjA2IixsOiJZWVlZL00vRCIsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgSEg6bW0iLGxsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNWRkZGQgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTUxY2NcdTY2''@;'; put 'put ''Njh8XHU2NWU5XHU0ZTBhfFx1NGUwYVx1NTM0OHxcdTRlMmRcdTUzNDh8XHU0ZTBiXHU1MzQ4fFx1NjY1YVx1NGUwYS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGcsQil7cmV0dXJuIDEyPT09ZyYmKGc9MCksIlx1NTFjY1x1NjY2OCI9PT1CfHwiXHU2NWU5XHU0ZTBhIj09PUJ8fCJcdTRlMGFc''@;'; put 'put ''dTUzNDgiPT09Qj9nOiJcdTRlMGJcdTUzNDgiPT09Qnx8Ilx1NjY1YVx1NGUwYSI9PT1CP2crMTI6Zz49MTE/ZzpnKzEyfSxtZXJpZGllbTpmdW5jdGlvbihnLEIsdyl7dmFyIFA9MTAwKmcrQjtyZXR1cm4gUDw2MDA/Ilx1NTFjY1x1NjY2OCI6UDw5MDA/Ilx1NjVlOVx1NGUwYSI6UDwxMTMw''@;'; put 'put ''PyJcdTRlMGFcdTUzNDgiOlA8MTIzMD8iXHU0ZTJkXHU1MzQ4IjpQPDE4MDA/Ilx1NGUwYlx1NTM0OCI6Ilx1NjY1YVx1NGUwYSJ9LGNhbGVuZGFyOntzYW1lRGF5OiJbXHU0ZWNhXHU1OTI5XUxUIixuZXh0RGF5OiJbXHU2NjBlXHU1OTI5XUxUIixuZXh0V2VlazpmdW5jdGlvbihnKXtyZXR1''@;'; put 'put ''cm4gZy53ZWVrKCkhPT10aGlzLndlZWsoKT8iW1x1NGUwYl1kZGRMVCI6IltcdTY3MmNdZGRkTFQifSxsYXN0RGF5OiJbXHU2NjI4XHU1OTI5XUxUIixsYXN0V2VlazpmdW5jdGlvbihnKXtyZXR1cm4gdGhpcy53ZWVrKCkhPT1nLndlZWsoKT8iW1x1NGUwYV1kZGRMVCI6IltcdTY3MmNdZGRk''@;'; put 'put ''TFQifSxzYW1lRWxzZToiTCJ9LGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0oXHU2NWU1fFx1NjcwOHxcdTU0NjgpLyxvcmRpbmFsOmZ1bmN0aW9uKGcsQil7c3dpdGNoKEIpe2Nhc2UiZCI6Y2FzZSJEIjpjYXNlIkRERCI6cmV0dXJuIGcrIlx1NjVlNSI7Y2FzZSJNIjpyZXR1cm4g''@;'; put 'put ''ZysiXHU2NzA4IjtjYXNlInciOmNhc2UiVyI6cmV0dXJuIGcrIlx1NTQ2OCI7ZGVmYXVsdDpyZXR1cm4gZ319LHJlbGF0aXZlVGltZTp7ZnV0dXJlOiIlc1x1NTQwZSIscGFzdDoiJXNcdTUyNGQiLHM6Ilx1NTFlMFx1NzlkMiIsc3M6IiVkIFx1NzlkMiIsbToiMSBcdTUyMDZcdTk0OWYiLG1t''@;'; put 'put ''OiIlZCBcdTUyMDZcdTk0OWYiLGg6IjEgXHU1YzBmXHU2NWY2IixoaDoiJWQgXHU1YzBmXHU2NWY2IixkOiIxIFx1NTkyOSIsZGQ6IiVkIFx1NTkyOSIsdzoiMSBcdTU0NjgiLHd3OiIlZCBcdTU0NjgiLE06IjEgXHU0ZTJhXHU2NzA4IixNTToiJWQgXHU0ZTJhXHU2NzA4Iix5OiIxIFx1NWU3''@;'; put 'put ''NCIseXk6IiVkIFx1NWU3NCJ9LHdlZWs6e2RvdzoxLGRveTo0fX0pfShfKDk3NTg2KSl9LDE4MzUxOmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiemgtaGsiLHttb250aHM6Ilx1NGUwMFx1NjcwOF9cdTRlOGNcdTY3MDhfXHU0ZTA5''@;'; put 'put ''XHU2NzA4X1x1NTZkYlx1NjcwOF9cdTRlOTRcdTY3MDhfXHU1MTZkXHU2NzA4X1x1NGUwM1x1NjcwOF9cdTUxNmJcdTY3MDhfXHU0ZTVkXHU2NzA4X1x1NTM0MVx1NjcwOF9cdTUzNDFcdTRlMDBcdTY3MDhfXHU1MzQxXHU0ZThjXHU2NzA4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiIxXHU2''@;'; put 'put ''NzA4XzJcdTY3MDhfM1x1NjcwOF80XHU2NzA4XzVcdTY3MDhfNlx1NjcwOF83XHU2NzA4XzhcdTY3MDhfOVx1NjcwOF8xMFx1NjcwOF8xMVx1NjcwOF8xMlx1NjcwOCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHU2NjFmXHU2NzFmXHU2NWU1X1x1NjYxZlx1NjcxZlx1NGUwMF9cdTY2MWZcdTY3''@;'; put 'put ''MWZcdTRlOGNfXHU2NjFmXHU2NzFmXHU0ZTA5X1x1NjYxZlx1NjcxZlx1NTZkYl9cdTY2MWZcdTY3MWZcdTRlOTRfXHU2NjFmXHU2NzFmXHU1MTZkIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1OTAzMVx1NjVlNV9cdTkwMzFcdTRlMDBfXHU5MDMxXHU0ZThjX1x1OTAzMVx1NGUwOV9c''@;'; put 'put ''dTkwMzFcdTU2ZGJfXHU5MDMxXHU0ZTk0X1x1OTAzMVx1NTE2ZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHU2NWU1X1x1NGUwMF9cdTRlOGNfXHU0ZTA5X1x1NTZkYl9cdTRlOTRfXHU1MTZkIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3Mi''@;'; put 'put ''LEw6IllZWVkvTU0vREQiLExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUiLExMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixMTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTVkZGRkIEhIOm1tIixsOiJZWVlZL00vRCIsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVl''@;'; put 'put ''NSIsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgSEg6bW0iLGxsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNWRkZGQgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTUxY2NcdTY2Njh8XHU2NWU5XHU0ZTBhfFx1NGUwYVx1NTM0OHxcdTRlMmRcdTUzNDh8XHU0ZTBiXHU1MzQ4fFx1''@;'; put 'put ''NjY1YVx1NGUwYS8sbWVyaWRpZW1Ib3VyOmZ1bmN0aW9uKGcsQil7cmV0dXJuIDEyPT09ZyYmKGc9MCksIlx1NTFjY1x1NjY2OCI9PT1CfHwiXHU2NWU5XHU0ZTBhIj09PUJ8fCJcdTRlMGFcdTUzNDgiPT09Qj9nOiJcdTRlMmRcdTUzNDgiPT09Qj9nPj0xMT9nOmcrMTI6Ilx1NGUwYlx1NTM0''@;'; put 'put ''OCI9PT1CfHwiXHU2NjVhXHU0ZTBhIj09PUI/ZysxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKGcsQix3KXt2YXIgUD0xMDAqZytCO3JldHVybiBQPDYwMD8iXHU1MWNjXHU2NjY4IjpQPDkwMD8iXHU2NWU5XHU0ZTBhIjpQPDEyMDA/Ilx1NGUwYVx1NTM0OCI6MTIwMD09PVA/Ilx1NGUy''@;'; put 'put ''ZFx1NTM0OCI6UDwxODAwPyJcdTRlMGJcdTUzNDgiOiJcdTY2NWFcdTRlMGEifSxjYWxlbmRhcjp7c2FtZURheToiW1x1NGVjYVx1NTkyOV1MVCIsbmV4dERheToiW1x1NjYwZVx1NTkyOV1MVCIsbmV4dFdlZWs6IltcdTRlMGJdZGRkZExUIixsYXN0RGF5OiJbXHU2NjI4XHU1OTI5XUxUIixs''@;'; put 'put ''YXN0V2VlazoiW1x1NGUwYV1kZGRkTFQiLHNhbWVFbHNlOiJMIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShcdTY1ZTV8XHU2NzA4fFx1OTAzMSkvLG9yZGluYWw6ZnVuY3Rpb24oZyxCKXtzd2l0Y2goQil7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gZysiXHU2''@;'; put 'put ''NWU1IjtjYXNlIk0iOnJldHVybiBnKyJcdTY3MDgiO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gZysiXHU5MDMxIjtkZWZhdWx0OnJldHVybiBnfX0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzXHU1ZjhjIixwYXN0OiIlc1x1NTI0ZCIsczoiXHU1ZTdlXHU3OWQyIixzczoiJWQgXHU3OWQyIixt''@;'; put 'put ''OiIxIFx1NTIwNlx1OTQxOCIsbW06IiVkIFx1NTIwNlx1OTQxOCIsaDoiMSBcdTVjMGZcdTY2NDIiLGhoOiIlZCBcdTVjMGZcdTY2NDIiLGQ6IjEgXHU1OTI5IixkZDoiJWQgXHU1OTI5IixNOiIxIFx1NTAwYlx1NjcwOCIsTU06IiVkIFx1NTAwYlx1NjcwOCIseToiMSBcdTVlNzQiLHl5OiIl''@;'; put 'put ''ZCBcdTVlNzQifX0pfShfKDk3NTg2KSl9LDUxNjI2OmZ1bmN0aW9uKHVlLHEsXyl7IWZ1bmN0aW9uKEkpeyJ1c2Ugc3RyaWN0IjtJLmRlZmluZUxvY2FsZSgiemgtbW8iLHttb250aHM6Ilx1NGUwMFx1NjcwOF9cdTRlOGNcdTY3MDhfXHU0ZTA5XHU2NzA4X1x1NTZkYlx1NjcwOF9cdTRlOTRc''@;'; put 'put ''dTY3MDhfXHU1MTZkXHU2NzA4X1x1NGUwM1x1NjcwOF9cdTUxNmJcdTY3MDhfXHU0ZTVkXHU2NzA4X1x1NTM0MVx1NjcwOF9cdTUzNDFcdTRlMDBcdTY3MDhfXHU1MzQxXHU0ZThjXHU2NzA4Ii5zcGxpdCgiXyIpLG1vbnRoc1Nob3J0OiIxXHU2NzA4XzJcdTY3MDhfM1x1NjcwOF80XHU2NzA4''@;'; put 'put ''XzVcdTY3MDhfNlx1NjcwOF83XHU2NzA4XzhcdTY3MDhfOVx1NjcwOF8xMFx1NjcwOF8xMVx1NjcwOF8xMlx1NjcwOCIuc3BsaXQoIl8iKSx3ZWVrZGF5czoiXHU2NjFmXHU2NzFmXHU2NWU1X1x1NjYxZlx1NjcxZlx1NGUwMF9cdTY2MWZcdTY3MWZcdTRlOGNfXHU2NjFmXHU2NzFmXHU0ZTA5''@;'; put 'put ''X1x1NjYxZlx1NjcxZlx1NTZkYl9cdTY2MWZcdTY3MWZcdTRlOTRfXHU2NjFmXHU2NzFmXHU1MTZkIi5zcGxpdCgiXyIpLHdlZWtkYXlzU2hvcnQ6Ilx1OTAzMVx1NjVlNV9cdTkwMzFcdTRlMDBfXHU5MDMxXHU0ZThjX1x1OTAzMVx1NGUwOV9cdTkwMzFcdTU2ZGJfXHU5MDMxXHU0ZTk0X1x1''@;'; put 'put ''OTAzMVx1NTE2ZCIuc3BsaXQoIl8iKSx3ZWVrZGF5c01pbjoiXHU2NWU1X1x1NGUwMF9cdTRlOGNfXHU0ZTA5X1x1NTZkYl9cdTRlOTRfXHU1MTZkIi5zcGxpdCgiXyIpLGxvbmdEYXRlRm9ybWF0OntMVDoiSEg6bW0iLExUUzoiSEg6bW06c3MiLEw6IkREL01NL1lZWVkiLExMOiJZWVlZXHU1''@;'; put 'put ''ZTc0TVx1NjcwOERcdTY1ZTUiLExMTDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IEhIOm1tIixMTExMOiJZWVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTVkZGRkIEhIOm1tIixsOiJEL00vWVlZWSIsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsbGxsOiJZWVlZXHU1ZTc0TVx1NjcwOERc''@;'; put 'put ''dTY1ZTUgSEg6bW0iLGxsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNWRkZGQgSEg6bW0ifSxtZXJpZGllbVBhcnNlOi9cdTUxY2NcdTY2Njh8XHU2NWU5XHU0ZTBhfFx1NGUwYVx1NTM0OHxcdTRlMmRcdTUzNDh8XHU0ZTBiXHU1MzQ4fFx1NjY1YVx1NGUwYS8sbWVyaWRpZW1Ib3VyOmZ1''@;'; put 'put ''bmN0aW9uKGcsQil7cmV0dXJuIDEyPT09ZyYmKGc9MCksIlx1NTFjY1x1NjY2OCI9PT1CfHwiXHU2NWU5XHU0ZTBhIj09PUJ8fCJcdTRlMGFcdTUzNDgiPT09Qj9nOiJcdTRlMmRcdTUzNDgiPT09Qj9nPj0xMT9nOmcrMTI6Ilx1NGUwYlx1NTM0OCI9PT1CfHwiXHU2NjVhXHU0ZTBhIj09PUI/''@;'; put 'put ''ZysxMjp2b2lkIDB9LG1lcmlkaWVtOmZ1bmN0aW9uKGcsQix3KXt2YXIgUD0xMDAqZytCO3JldHVybiBQPDYwMD8iXHU1MWNjXHU2NjY4IjpQPDkwMD8iXHU2NWU5XHU0ZTBhIjpQPDExMzA/Ilx1NGUwYVx1NTM0OCI6UDwxMjMwPyJcdTRlMmRcdTUzNDgiOlA8MTgwMD8iXHU0ZTBiXHU1MzQ4''@;'; put 'put ''IjoiXHU2NjVhXHU0ZTBhIn0sY2FsZW5kYXI6e3NhbWVEYXk6IltcdTRlY2FcdTU5MjldIExUIixuZXh0RGF5OiJbXHU2NjBlXHU1OTI5XSBMVCIsbmV4dFdlZWs6IltcdTRlMGJdZGRkZCBMVCIsbGFzdERheToiW1x1NjYyOFx1NTkyOV0gTFQiLGxhc3RXZWVrOiJbXHU0ZTBhXWRkZGQgTFQi''@;'; put 'put ''LHNhbWVFbHNlOiJMIn0sZGF5T2ZNb250aE9yZGluYWxQYXJzZTovXGR7MSwyfShcdTY1ZTV8XHU2NzA4fFx1OTAzMSkvLG9yZGluYWw6ZnVuY3Rpb24oZyxCKXtzd2l0Y2goQil7Y2FzZSJkIjpjYXNlIkQiOmNhc2UiREREIjpyZXR1cm4gZysiXHU2NWU1IjtjYXNlIk0iOnJldHVybiBnKyJc''@;'; put 'put ''dTY3MDgiO2Nhc2UidyI6Y2FzZSJXIjpyZXR1cm4gZysiXHU5MDMxIjtkZWZhdWx0OnJldHVybiBnfX0scmVsYXRpdmVUaW1lOntmdXR1cmU6IiVzXHU1MTY3IixwYXN0OiIlc1x1NTI0ZCIsczoiXHU1ZTdlXHU3OWQyIixzczoiJWQgXHU3OWQyIixtOiIxIFx1NTIwNlx1OTQxOCIsbW06IiVk''@;'; put 'put ''IFx1NTIwNlx1OTQxOCIsaDoiMSBcdTVjMGZcdTY2NDIiLGhoOiIlZCBcdTVjMGZcdTY2NDIiLGQ6IjEgXHU1OTI5IixkZDoiJWQgXHU1OTI5IixNOiIxIFx1NTAwYlx1NjcwOCIsTU06IiVkIFx1NTAwYlx1NjcwOCIseToiMSBcdTVlNzQiLHl5OiIlZCBcdTVlNzQifX0pfShfKDk3NTg2KSl9''@;'; put 'put ''LDg4ODc6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO0kuZGVmaW5lTG9jYWxlKCJ6aC10dyIse21vbnRoczoiXHU0ZTAwXHU2NzA4X1x1NGU4Y1x1NjcwOF9cdTRlMDlcdTY3MDhfXHU1NmRiXHU2NzA4X1x1NGU5NFx1NjcwOF9cdTUxNmRcdTY3MDhfXHU0ZTAz''@;'; put 'put ''XHU2NzA4X1x1NTE2Ylx1NjcwOF9cdTRlNWRcdTY3MDhfXHU1MzQxXHU2NzA4X1x1NTM0MVx1NGUwMFx1NjcwOF9cdTUzNDFcdTRlOGNcdTY3MDgiLnNwbGl0KCJfIiksbW9udGhzU2hvcnQ6IjFcdTY3MDhfMlx1NjcwOF8zXHU2NzA4XzRcdTY3MDhfNVx1NjcwOF82XHU2NzA4XzdcdTY3MDhf''@;'; put 'put ''OFx1NjcwOF85XHU2NzA4XzEwXHU2NzA4XzExXHU2NzA4XzEyXHU2NzA4Ii5zcGxpdCgiXyIpLHdlZWtkYXlzOiJcdTY2MWZcdTY3MWZcdTY1ZTVfXHU2NjFmXHU2NzFmXHU0ZTAwX1x1NjYxZlx1NjcxZlx1NGU4Y19cdTY2MWZcdTY3MWZcdTRlMDlfXHU2NjFmXHU2NzFmXHU1NmRiX1x1NjYx''@;'; put 'put ''Zlx1NjcxZlx1NGU5NF9cdTY2MWZcdTY3MWZcdTUxNmQiLnNwbGl0KCJfIiksd2Vla2RheXNTaG9ydDoiXHU5MDMxXHU2NWU1X1x1OTAzMVx1NGUwMF9cdTkwMzFcdTRlOGNfXHU5MDMxXHU0ZTA5X1x1OTAzMVx1NTZkYl9cdTkwMzFcdTRlOTRfXHU5MDMxXHU1MTZkIi5zcGxpdCgiXyIpLHdl''@;'; put 'put ''ZWtkYXlzTWluOiJcdTY1ZTVfXHU0ZTAwX1x1NGU4Y19cdTRlMDlfXHU1NmRiX1x1NGU5NF9cdTUxNmQiLnNwbGl0KCJfIiksbG9uZ0RhdGVGb3JtYXQ6e0xUOiJISDptbSIsTFRTOiJISDptbTpzcyIsTDoiWVlZWS9NTS9ERCIsTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSIsTExMOiJZ''@;'; put 'put ''WVlZXHU1ZTc0TVx1NjcwOERcdTY1ZTUgSEg6bW0iLExMTEw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNWRkZGQgSEg6bW0iLGw6IllZWVkvTS9EIixsbDoiWVlZWVx1NWU3NE1cdTY3MDhEXHU2NWU1IixsbGw6IllZWVlcdTVlNzRNXHU2NzA4RFx1NjVlNSBISDptbSIsbGxsbDoiWVlZWVx1''@;'; put 'put ''NWU3NE1cdTY3MDhEXHU2NWU1ZGRkZCBISDptbSJ9LG1lcmlkaWVtUGFyc2U6L1x1NTFjY1x1NjY2OHxcdTY1ZTlcdTRlMGF8XHU0ZTBhXHU1MzQ4fFx1NGUyZFx1NTM0OHxcdTRlMGJcdTUzNDh8XHU2NjVhXHU0ZTBhLyxtZXJpZGllbUhvdXI6ZnVuY3Rpb24oZyxCKXtyZXR1cm4gMTI9PT1n''@;'; put 'put ''JiYoZz0wKSwiXHU1MWNjXHU2NjY4Ij09PUJ8fCJcdTY1ZTlcdTRlMGEiPT09Qnx8Ilx1NGUwYVx1NTM0OCI9PT1CP2c6Ilx1NGUyZFx1NTM0OCI9PT1CP2c+PTExP2c6ZysxMjoiXHU0ZTBiXHU1MzQ4Ij09PUJ8fCJcdTY2NWFcdTRlMGEiPT09Qj9nKzEyOnZvaWQgMH0sbWVyaWRpZW06ZnVu''@;'; put 'put ''Y3Rpb24oZyxCLHcpe3ZhciBQPTEwMCpnK0I7cmV0dXJuIFA8NjAwPyJcdTUxY2NcdTY2NjgiOlA8OTAwPyJcdTY1ZTlcdTRlMGEiOlA8MTEzMD8iXHU0ZTBhXHU1MzQ4IjpQPDEyMzA/Ilx1NGUyZFx1NTM0OCI6UDwxODAwPyJcdTRlMGJcdTUzNDgiOiJcdTY2NWFcdTRlMGEifSxjYWxlbmRh''@;'; put 'put ''cjp7c2FtZURheToiW1x1NGVjYVx1NTkyOV0gTFQiLG5leHREYXk6IltcdTY2MGVcdTU5MjldIExUIixuZXh0V2VlazoiW1x1NGUwYl1kZGRkIExUIixsYXN0RGF5OiJbXHU2NjI4XHU1OTI5XSBMVCIsbGFzdFdlZWs6IltcdTRlMGFdZGRkZCBMVCIsc2FtZUVsc2U6IkwifSxkYXlPZk1vbnRo''@;'; put 'put ''T3JkaW5hbFBhcnNlOi9cZHsxLDJ9KFx1NjVlNXxcdTY3MDh8XHU5MDMxKS8sb3JkaW5hbDpmdW5jdGlvbihnLEIpe3N3aXRjaChCKXtjYXNlImQiOmNhc2UiRCI6Y2FzZSJEREQiOnJldHVybiBnKyJcdTY1ZTUiO2Nhc2UiTSI6cmV0dXJuIGcrIlx1NjcwOCI7Y2FzZSJ3IjpjYXNlIlciOnJl''@;'; put 'put ''dHVybiBnKyJcdTkwMzEiO2RlZmF1bHQ6cmV0dXJuIGd9fSxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiJXNcdTVmOGMiLHBhc3Q6IiVzXHU1MjRkIixzOiJcdTVlN2VcdTc5ZDIiLHNzOiIlZCBcdTc5ZDIiLG06IjEgXHU1MjA2XHU5NDE4IixtbToiJWQgXHU1MjA2XHU5NDE4IixoOiIxIFx1NWMw''@;'; put 'put ''Zlx1NjY0MiIsaGg6IiVkIFx1NWMwZlx1NjY0MiIsZDoiMSBcdTU5MjkiLGRkOiIlZCBcdTU5MjkiLE06IjEgXHU1MDBiXHU2NzA4IixNTToiJWQgXHU1MDBiXHU2NzA4Iix5OiIxIFx1NWU3NCIseXk6IiVkIFx1NWU3NCJ9fSl9KF8oOTc1ODYpKX0sOTc1ODY6ZnVuY3Rpb24odWUscSxfKXso''@;'; put 'put ''dWU9Xy5ubWQodWUpKS5leHBvcnRzPWZ1bmN0aW9uKCl7InVzZSBzdHJpY3QiO3ZhciBJLFg7ZnVuY3Rpb24geSgpe3JldHVybiBJLmFwcGx5KG51bGwsYXJndW1lbnRzKX1mdW5jdGlvbiBCKENlKXtyZXR1cm4gQ2UgaW5zdGFuY2VvZiBBcnJheXx8IltvYmplY3QgQXJyYXldIj09PU9iamVj''@;'; put 'put ''dC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChDZSl9ZnVuY3Rpb24gdyhDZSl7cmV0dXJuIG51bGwhPUNlJiYiW29iamVjdCBPYmplY3RdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChDZSl9ZnVuY3Rpb24gUChDZSxLZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3du''@;'; put 'put ''UHJvcGVydHkuY2FsbChDZSxLZSl9ZnVuY3Rpb24gRihDZSl7aWYoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMpcmV0dXJuIDA9PT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhDZSkubGVuZ3RoO3ZhciBLZTtmb3IoS2UgaW4gQ2UpaWYoUChDZSxLZSkpcmV0dXJuITE7cmV0dXJuITB9''@;'; put 'put ''ZnVuY3Rpb24gTyhDZSl7cmV0dXJuIHZvaWQgMD09PUNlfWZ1bmN0aW9uIHooQ2Upe3JldHVybiJudW1iZXIiPT10eXBlb2YgQ2V8fCJbb2JqZWN0IE51bWJlcl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKENlKX1mdW5jdGlvbiBOKENlKXtyZXR1cm4gQ2UgaW5zdGFuY2Vv''@;'; put 'put ''ZiBEYXRlfHwiW29iamVjdCBEYXRlXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoQ2UpfWZ1bmN0aW9uIEwoQ2UsS2Upe3ZhciBJdCxwdD1bXSxobj1DZS5sZW5ndGg7Zm9yKEl0PTA7SXQ8aG47KytJdClwdC5wdXNoKEtlKENlW0l0XSxJdCkpO3JldHVybiBwdH1mdW5jdGlv''@;'; put 'put ''biBLKENlLEtlKXtmb3IodmFyIHB0IGluIEtlKVAoS2UscHQpJiYoQ2VbcHRdPUtlW3B0XSk7cmV0dXJuIFAoS2UsInRvU3RyaW5nIikmJihDZS50b1N0cmluZz1LZS50b1N0cmluZyksUChLZSwidmFsdWVPZiIpJiYoQ2UudmFsdWVPZj1LZS52YWx1ZU9mKSxDZX1mdW5jdGlvbiBVKENlLEtl''@;'; put 'put ''LHB0LEl0KXtyZXR1cm4gcnYoQ2UsS2UscHQsSXQsITApLnV0YygpfWZ1bmN0aW9uIFkoQ2Upe3JldHVybiBudWxsPT1DZS5fcGYmJihDZS5fcGY9e2VtcHR5OiExLHVudXNlZFRva2VuczpbXSx1bnVzZWRJbnB1dDpbXSxvdmVyZmxvdzotMixjaGFyc0xlZnRPdmVyOjAsbnVsbElucHV0OiEx''@;'; put 'put ''LGludmFsaWRFcmE6bnVsbCxpbnZhbGlkTW9udGg6bnVsbCxpbnZhbGlkRm9ybWF0OiExLHVzZXJJbnZhbGlkYXRlZDohMSxpc286ITEscGFyc2VkRGF0ZVBhcnRzOltdLGVyYTpudWxsLG1lcmlkaWVtOm51bGwscmZjMjgyMjohMSx3ZWVrZGF5TWlzbWF0Y2g6ITF9KSxDZS5fcGZ9ZnVuY3Rp''@;'; put 'put ''b24gZWUoQ2Upe3ZhciBLZT1udWxsLHB0PSExLEl0PUNlLl9kJiYhaXNOYU4oQ2UuX2QuZ2V0VGltZSgpKTtyZXR1cm4gSXQmJihLZT1ZKENlKSxwdD1YLmNhbGwoS2UucGFyc2VkRGF0ZVBhcnRzLGZ1bmN0aW9uKGhuKXtyZXR1cm4gbnVsbCE9aG59KSxJdD1LZS5vdmVyZmxvdzwwJiYhS2Uu''@;'; put 'put ''ZW1wdHkmJiFLZS5pbnZhbGlkRXJhJiYhS2UuaW52YWxpZE1vbnRoJiYhS2UuaW52YWxpZFdlZWtkYXkmJiFLZS53ZWVrZGF5TWlzbWF0Y2gmJiFLZS5udWxsSW5wdXQmJiFLZS5pbnZhbGlkRm9ybWF0JiYhS2UudXNlckludmFsaWRhdGVkJiYoIUtlLm1lcmlkaWVtfHxLZS5tZXJpZGllbSYm''@;'; put 'put ''cHQpLENlLl9zdHJpY3QmJihJdD1JdCYmMD09PUtlLmNoYXJzTGVmdE92ZXImJjA9PT1LZS51bnVzZWRUb2tlbnMubGVuZ3RoJiZ2b2lkIDA9PT1LZS5iaWdIb3VyKSksbnVsbCE9T2JqZWN0LmlzRnJvemVuJiZPYmplY3QuaXNGcm96ZW4oQ2UpP0l0OihDZS5faXNWYWxpZD1JdCxDZS5faXNW''@;'; put 'put ''YWxpZCl9ZnVuY3Rpb24gSihDZSl7dmFyIEtlPVUoTmFOKTtyZXR1cm4gbnVsbCE9Q2U/SyhZKEtlKSxDZSk6WShLZSkudXNlckludmFsaWRhdGVkPSEwLEtlfVg9QXJyYXkucHJvdG90eXBlLnNvbWU/QXJyYXkucHJvdG90eXBlLnNvbWU6ZnVuY3Rpb24oQ2Upe3ZhciBJdCxLZT1PYmplY3Qo''@;'; put 'put ''dGhpcykscHQ9S2UubGVuZ3RoPj4+MDtmb3IoSXQ9MDtJdDxwdDtJdCsrKWlmKEl0IGluIEtlJiZDZS5jYWxsKHRoaXMsS2VbSXRdLEl0LEtlKSlyZXR1cm4hMDtyZXR1cm4hMX07dmFyIHJlPXkubW9tZW50UHJvcGVydGllcz1bXSxpZT0hMTtmdW5jdGlvbiBsZShDZSxLZSl7dmFyIHB0LEl0''@;'; put 'put ''LGhuLHFuPXJlLmxlbmd0aDtpZihPKEtlLl9pc0FNb21lbnRPYmplY3QpfHwoQ2UuX2lzQU1vbWVudE9iamVjdD1LZS5faXNBTW9tZW50T2JqZWN0KSxPKEtlLl9pKXx8KENlLl9pPUtlLl9pKSxPKEtlLl9mKXx8KENlLl9mPUtlLl9mKSxPKEtlLl9sKXx8KENlLl9sPUtlLl9sKSxPKEtlLl9z''@;'; put 'put ''dHJpY3QpfHwoQ2UuX3N0cmljdD1LZS5fc3RyaWN0KSxPKEtlLl90em0pfHwoQ2UuX3R6bT1LZS5fdHptKSxPKEtlLl9pc1VUQyl8fChDZS5faXNVVEM9S2UuX2lzVVRDKSxPKEtlLl9vZmZzZXQpfHwoQ2UuX29mZnNldD1LZS5fb2Zmc2V0KSxPKEtlLl9wZil8fChDZS5fcGY9WShLZSkpLE8o''@;'; put 'put ''S2UuX2xvY2FsZSl8fChDZS5fbG9jYWxlPUtlLl9sb2NhbGUpLHFuPjApZm9yKHB0PTA7cHQ8cW47cHQrKylPKGhuPUtlW0l0PXJlW3B0XV0pfHwoQ2VbSXRdPWhuKTtyZXR1cm4gQ2V9ZnVuY3Rpb24gbWUoQ2Upe2xlKHRoaXMsQ2UpLHRoaXMuX2Q9bmV3IERhdGUobnVsbCE9Q2UuX2Q/Q2Uu''@;'; put 'put ''X2QuZ2V0VGltZSgpOk5hTiksdGhpcy5pc1ZhbGlkKCl8fCh0aGlzLl9kPW5ldyBEYXRlKE5hTikpLCExPT09aWUmJihpZT0hMCx5LnVwZGF0ZU9mZnNldCh0aGlzKSxpZT0hMSl9ZnVuY3Rpb24gX2UoQ2Upe3JldHVybiBDZSBpbnN0YW5jZW9mIG1lfHxudWxsIT1DZSYmbnVsbCE9Q2UuX2lz''@;'; put 'put ''QU1vbWVudE9iamVjdH1mdW5jdGlvbiBUZShDZSl7ITE9PT15LnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyYmdHlwZW9mIGNvbnNvbGU8InUiJiZjb25zb2xlLndhcm4mJmNvbnNvbGUud2FybigiRGVwcmVjYXRpb24gd2FybmluZzogIitDZSl9ZnVuY3Rpb24gU2UoQ2UsS2Upe3ZhciBw''@;'; put 'put ''dD0hMDtyZXR1cm4gSyhmdW5jdGlvbigpe2lmKG51bGwhPXkuZGVwcmVjYXRpb25IYW5kbGVyJiZ5LmRlcHJlY2F0aW9uSGFuZGxlcihudWxsLENlKSxwdCl7dmFyIGhuLHFuLHJpLEl0PVtdLFJvPWFyZ3VtZW50cy5sZW5ndGg7Zm9yKHFuPTA7cW48Um87cW4rKyl7aWYoaG49IiIsIm9iamVj''@;'; put 'put ''dCI9PXR5cGVvZiBhcmd1bWVudHNbcW5dKXtmb3IocmkgaW4gaG4rPSJcblsiK3FuKyJdICIsYXJndW1lbnRzWzBdKVAoYXJndW1lbnRzWzBdLHJpKSYmKGhuKz1yaSsiOiAiK2FyZ3VtZW50c1swXVtyaV0rIiwgIik7aG49aG4uc2xpY2UoMCwtMil9ZWxzZSBobj1hcmd1bWVudHNbcW5dO0l0''@;'; put 'put ''LnB1c2goaG4pfVRlKENlKyJcbkFyZ3VtZW50czogIitBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChJdCkuam9pbigiIikrIlxuIisobmV3IEVycm9yKS5zdGFjaykscHQ9ITF9cmV0dXJuIEtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sS2UpfXZhciBULHplPXt9O2Z1bmN0aW9uIFYoQ2Us''@;'; put 'put ''S2Upe251bGwhPXkuZGVwcmVjYXRpb25IYW5kbGVyJiZ5LmRlcHJlY2F0aW9uSGFuZGxlcihDZSxLZSksemVbQ2VdfHwoVGUoS2UpLHplW0NlXT0hMCl9ZnVuY3Rpb24gcChDZSl7cmV0dXJuIHR5cGVvZiBGdW5jdGlvbjwidSImJkNlIGluc3RhbmNlb2YgRnVuY3Rpb258fCJbb2JqZWN0IEZ1''@;'; put 'put ''bmN0aW9uXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoQ2UpfWZ1bmN0aW9uIHgoQ2UsS2Upe3ZhciBJdCxwdD1LKHt9LENlKTtmb3IoSXQgaW4gS2UpUChLZSxJdCkmJih3KENlW0l0XSkmJncoS2VbSXRdKT8ocHRbSXRdPXt9LEsocHRbSXRdLENlW0l0XSksSyhwdFtJdF0s''@;'; put 'put ''S2VbSXRdKSk6bnVsbCE9S2VbSXRdP3B0W0l0XT1LZVtJdF06ZGVsZXRlIHB0W0l0XSk7Zm9yKEl0IGluIENlKVAoQ2UsSXQpJiYhUChLZSxJdCkmJncoQ2VbSXRdKSYmKHB0W0l0XT1LKHt9LHB0W0l0XSkpO3JldHVybiBwdH1mdW5jdGlvbiBDKENlKXtudWxsIT1DZSYmdGhpcy5zZXQoQ2Up''@;'; put 'put ''fXkuc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzPSExLHkuZGVwcmVjYXRpb25IYW5kbGVyPW51bGwsVD1PYmplY3Qua2V5cz9PYmplY3Qua2V5czpmdW5jdGlvbihDZSl7dmFyIEtlLHB0PVtdO2ZvcihLZSBpbiBDZSlQKENlLEtlKSYmcHQucHVzaChLZSk7cmV0dXJuIHB0fTtmdW5jdGlv''@;'; put 'put ''biBFKENlLEtlLHB0KXt2YXIgSXQ9IiIrTWF0aC5hYnMoQ2UpO3JldHVybihDZT49MD9wdD8iKyI6IiI6Ii0iKStNYXRoLnBvdygxMCxNYXRoLm1heCgwLEtlLUl0Lmxlbmd0aCkpLnRvU3RyaW5nKCkuc3Vic3RyKDEpK0l0fXZhciBtPS8oXFtbXlxbXSpcXSl8KFxcKT8oW0hoXW1tKHNzKT98''@;'; put 'put ''TW98TU0/TT9NP3xEb3xERERvfEREP0Q/RD98ZGRkP2Q/fGRvP3x3W298d10/fFdbb3xXXT98UW8/fE57MSw1fXxZWVlZWVl8WVlZWVl8WVlZWXxZWXx5ezIsNH18eW8/fGdnKGdnZz8pP3xHRyhHR0c/KT98ZXxFfGF8QXxoaD98SEg/fGtrP3xtbT98c3M/fFN7MSw5fXx4fFh8eno/fFpaP3wu''@;'; put 'put ''KS9nLEE9LyhcW1teXFtdKlxdKXwoXFwpPyhMVFN8TFR8TEw/TD9MP3xsezEsNH0pL2csb2U9e30sdGU9e307ZnVuY3Rpb24gc2UoQ2UsS2UscHQsSXQpe3ZhciBobj1JdDsic3RyaW5nIj09dHlwZW9mIEl0JiYoaG49ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tJdF0oKX0pLENlJiYodGVbQ2Vd''@;'; put 'put ''PWhuKSxLZSYmKHRlW0tlWzBdXT1mdW5jdGlvbigpe3JldHVybiBFKGhuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxLZVsxXSxLZVsyXSl9KSxwdCYmKHRlW3B0XT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS5vcmRpbmFsKGhuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxDZSl9''@;'; put 'put ''KX1mdW5jdGlvbiB3ZShDZSl7cmV0dXJuIENlLm1hdGNoKC9cW1tcc1xTXS8pP0NlLnJlcGxhY2UoL15cW3xcXSQvZywiIik6Q2UucmVwbGFjZSgvXFwvZywiIil9ZnVuY3Rpb24gSmUoQ2UsS2Upe3JldHVybiBDZS5pc1ZhbGlkKCk/KEtlPWF0KEtlLENlLmxvY2FsZURhdGEoKSksb2VbS2Vd''@;'; put 'put ''PW9lW0tlXXx8ZnVuY3Rpb24gVWUoQ2Upe3ZhciBwdCxJdCxLZT1DZS5tYXRjaChtKTtmb3IocHQ9MCxJdD1LZS5sZW5ndGg7cHQ8SXQ7cHQrKylLZVtwdF09dGVbS2VbcHRdXT90ZVtLZVtwdF1dOndlKEtlW3B0XSk7cmV0dXJuIGZ1bmN0aW9uKGhuKXt2YXIgcmkscW49IiI7Zm9yKHJpPTA7''@;'; put 'put ''cmk8SXQ7cmkrKylxbis9cChLZVtyaV0pP0tlW3JpXS5jYWxsKGhuLENlKTpLZVtyaV07cmV0dXJuIHFufX0oS2UpLG9lW0tlXShDZSkpOkNlLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpfWZ1bmN0aW9uIGF0KENlLEtlKXt2YXIgcHQ9NTtmdW5jdGlvbiBJdChobil7cmV0dXJuIEtlLmxv''@;'; put 'put ''bmdEYXRlRm9ybWF0KGhuKXx8aG59Zm9yKEEubGFzdEluZGV4PTA7cHQ+PTAmJkEudGVzdChDZSk7KUNlPUNlLnJlcGxhY2UoQSxJdCksQS5sYXN0SW5kZXg9MCxwdC09MTtyZXR1cm4gQ2V9dmFyIEFlPXtEOiJkYXRlIixkYXRlczoiZGF0ZSIsZGF0ZToiZGF0ZSIsZDoiZGF5IixkYXlzOiJk''@;'; put 'put ''YXkiLGRheToiZGF5IixlOiJ3ZWVrZGF5Iix3ZWVrZGF5czoid2Vla2RheSIsd2Vla2RheToid2Vla2RheSIsRToiaXNvV2Vla2RheSIsaXNvd2Vla2RheXM6Imlzb1dlZWtkYXkiLGlzb3dlZWtkYXk6Imlzb1dlZWtkYXkiLERERDoiZGF5T2ZZZWFyIixkYXlvZnllYXJzOiJkYXlPZlllYXIi''@;'; put 'put ''LGRheW9meWVhcjoiZGF5T2ZZZWFyIixoOiJob3VyIixob3VyczoiaG91ciIsaG91cjoiaG91ciIsbXM6Im1pbGxpc2Vjb25kIixtaWxsaXNlY29uZHM6Im1pbGxpc2Vjb25kIixtaWxsaXNlY29uZDoibWlsbGlzZWNvbmQiLG06Im1pbnV0ZSIsbWludXRlczoibWludXRlIixtaW51dGU6Im1p''@;'; put 'put ''bnV0ZSIsTToibW9udGgiLG1vbnRoczoibW9udGgiLG1vbnRoOiJtb250aCIsUToicXVhcnRlciIscXVhcnRlcnM6InF1YXJ0ZXIiLHF1YXJ0ZXI6InF1YXJ0ZXIiLHM6InNlY29uZCIsc2Vjb25kczoic2Vjb25kIixzZWNvbmQ6InNlY29uZCIsZ2c6IndlZWtZZWFyIix3ZWVreWVhcnM6Indl''@;'; put 'put ''ZWtZZWFyIix3ZWVreWVhcjoid2Vla1llYXIiLEdHOiJpc29XZWVrWWVhciIsaXNvd2Vla3llYXJzOiJpc29XZWVrWWVhciIsaXNvd2Vla3llYXI6Imlzb1dlZWtZZWFyIix3OiJ3ZWVrIix3ZWVrczoid2VlayIsd2Vlazoid2VlayIsVzoiaXNvV2VlayIsaXNvd2Vla3M6Imlzb1dlZWsiLGlz''@;'; put 'put ''b3dlZWs6Imlzb1dlZWsiLHk6InllYXIiLHllYXJzOiJ5ZWFyIix5ZWFyOiJ5ZWFyIn07ZnVuY3Rpb24gX3QoQ2Upe3JldHVybiJzdHJpbmciPT10eXBlb2YgQ2U/QWVbQ2VdfHxBZVtDZS50b0xvd2VyQ2FzZSgpXTp2b2lkIDB9ZnVuY3Rpb24gcnQoQ2Upe3ZhciBwdCxJdCxLZT17fTtmb3Io''@;'; put 'put ''SXQgaW4gQ2UpUChDZSxJdCkmJihwdD1fdChJdCkpJiYoS2VbcHRdPUNlW0l0XSk7cmV0dXJuIEtlfXZhciBRZT17ZGF0ZTo5LGRheToxMSx3ZWVrZGF5OjExLGlzb1dlZWtkYXk6MTEsZGF5T2ZZZWFyOjQsaG91cjoxMyxtaWxsaXNlY29uZDoxNixtaW51dGU6MTQsbW9udGg6OCxxdWFydGVy''@;'; put 'put ''Ojcsc2Vjb25kOjE1LHdlZWtZZWFyOjEsaXNvV2Vla1llYXI6MSx3ZWVrOjUsaXNvV2Vlazo1LHllYXI6MX07dmFyIEF0LHl0PS9cZC8sTXQ9L1xkXGQvLER0PS9cZHszfS8saXQ9L1xkezR9LywkZT0vWystXT9cZHs2fS8sdHQ9L1xkXGQ/LyxIZT0vXGRcZFxkXGQ/LyxkdD0vXGRcZFxkXGRc''@;'; put 'put ''ZFxkPy8scXQ9L1xkezEsM30vLFJ0PS9cZHsxLDR9LyxQdD0vWystXT9cZHsxLDZ9LyxhaT0vXGQrLyxRdD0vWystXT9cZCsvLHNuPS9afFsrLV1cZFxkOj9cZFxkL2dpLFJpPS9afFsrLV1cZFxkKD86Oj9cZFxkKT8vZ2ksZnQ9L1swLTldezAsMjU2fVsnYS16XHUwMEEwLVx1MDVGRlx1MDcw''@;'; put 'put ''MC1cdUQ3RkZcdUY5MDAtXHVGRENGXHVGREYwLVx1RkYwN1x1RkYxMC1cdUZGRUZdezEsMjU2fXxbXHUwNjAwLVx1MDZGRlwvXXsxLDI1Nn0oXHMqP1tcdTA2MDAtXHUwNkZGXXsxLDI1Nn0pezEsMn0vaSxQcj0vXlsxLTldXGQ/LyxadD0vXihbMS05XVxkfFxkKS87ZnVuY3Rpb24gTG4oQ2Us''@;'; put 'put ''S2UscHQpe0F0W0NlXT1wKEtlKT9LZTpmdW5jdGlvbihJdCxobil7cmV0dXJuIEl0JiZwdD9wdDpLZX19ZnVuY3Rpb24gc3QoQ2UsS2Upe3JldHVybiBQKEF0LENlKT9BdFtDZV0oS2UuX3N0cmljdCxLZS5fbG9jYWxlKTpuZXcgUmVnRXhwKGZ1bmN0aW9uIHp0KENlKXtyZXR1cm4gbmkoQ2Uu''@;'; put 'put ''cmVwbGFjZSgiXFwiLCIiKS5yZXBsYWNlKC9cXChcWyl8XFwoXF0pfFxbKFteXF1cW10qKVxdfFxcKC4pL2csZnVuY3Rpb24oS2UscHQsSXQsaG4scW4pe3JldHVybiBwdHx8SXR8fGhufHxxbn0pKX0oQ2UpKX1mdW5jdGlvbiBuaShDZSl7cmV0dXJuIENlLnJlcGxhY2UoL1stXC9cXF4kKis/''@;'; put 'put ''LigpfFtcXXt9XS9nLCJcXCQmIil9ZnVuY3Rpb24gV2UoQ2Upe3JldHVybiBDZTwwP01hdGguY2VpbChDZSl8fDA6TWF0aC5mbG9vcihDZSl9ZnVuY3Rpb24gVHQoQ2Upe3ZhciBLZT0rQ2UscHQ9MDtyZXR1cm4gMCE9PUtlJiZpc0Zpbml0ZShLZSkmJihwdD1XZShLZSkpLHB0fUF0PXt9O3Zh''@;'; put 'put ''ciBycj17fTtmdW5jdGlvbiBodChDZSxLZSl7dmFyIHB0LGhuLEl0PUtlO2Zvcigic3RyaW5nIj09dHlwZW9mIENlJiYoQ2U9W0NlXSkseihLZSkmJihJdD1mdW5jdGlvbihxbixyaSl7cmlbS2VdPVR0KHFuKX0pLGhuPUNlLmxlbmd0aCxwdD0wO3B0PGhuO3B0KyspcnJbQ2VbcHRdXT1JdH1m''@;'; put 'put ''dW5jdGlvbiB4dChDZSxLZSl7aHQoQ2UsZnVuY3Rpb24ocHQsSXQsaG4scW4pe2huLl93PWhuLl93fHx7fSxLZShwdCxobi5fdyxobixxbil9KX1mdW5jdGlvbiBCbihDZSxLZSxwdCl7bnVsbCE9S2UmJlAocnIsQ2UpJiZycltDZV0oS2UscHQuX2EscHQsQ2UpfWZ1bmN0aW9uIG9uKENlKXty''@;'; put 'put ''ZXR1cm4gQ2UlND09MCYmQ2UlMTAwIT0wfHxDZSU0MDA9PTB9dmFyIGp0PTAsZGk9MSxjbj0yLHBuPTMsSWk9NCxYdD01LGVuPTYsaG89NyxNaT04O2Z1bmN0aW9uIHByKENlKXtyZXR1cm4gb24oQ2UpPzM2NjozNjV9c2UoIlkiLDAsMCxmdW5jdGlvbigpe3ZhciBDZT10aGlzLnllYXIoKTty''@;'; put 'put ''ZXR1cm4gQ2U8PTk5OTk/RShDZSw0KToiKyIrQ2V9KSxzZSgwLFsiWVkiLDJdLDAsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55ZWFyKCklMTAwfSksc2UoMCxbIllZWVkiLDRdLDAsInllYXIiKSxzZSgwLFsiWVlZWVkiLDVdLDAsInllYXIiKSxzZSgwLFsiWVlZWVlZIiw2LCEwXSwwLCJ5ZWFy''@;'; put 'put ''IiksTG4oIlkiLFF0KSxMbigiWVkiLHR0LE10KSxMbigiWVlZWSIsUnQsaXQpLExuKCJZWVlZWSIsUHQsJGUpLExuKCJZWVlZWVkiLFB0LCRlKSxodChbIllZWVlZIiwiWVlZWVlZIl0sanQpLGh0KCJZWVlZIixmdW5jdGlvbihDZSxLZSl7S2VbanRdPTI9PT1DZS5sZW5ndGg/eS5wYXJzZVR3''@;'; put 'put ''b0RpZ2l0WWVhcihDZSk6VHQoQ2UpfSksaHQoIllZIixmdW5jdGlvbihDZSxLZSl7S2VbanRdPXkucGFyc2VUd29EaWdpdFllYXIoQ2UpfSksaHQoIlkiLGZ1bmN0aW9uKENlLEtlKXtLZVtqdF09cGFyc2VJbnQoQ2UsMTApfSkseS5wYXJzZVR3b0RpZ2l0WWVhcj1mdW5jdGlvbihDZSl7cmV0''@;'; put 'put ''dXJuIFR0KENlKSsoVHQoQ2UpPjY4PzE5MDA6MmUzKX07dmFyIFlpLFduPVFyKCJGdWxsWWVhciIsITApO2Z1bmN0aW9uIFFyKENlLEtlKXtyZXR1cm4gZnVuY3Rpb24ocHQpe3JldHVybiBudWxsIT1wdD8oQmkodGhpcyxDZSxwdCkseS51cGRhdGVPZmZzZXQodGhpcyxLZSksdGhpcyk6SnIo''@;'; put 'put ''dGhpcyxDZSl9fWZ1bmN0aW9uIEpyKENlLEtlKXtpZighQ2UuaXNWYWxpZCgpKXJldHVybiBOYU47dmFyIHB0PUNlLl9kLEl0PUNlLl9pc1VUQztzd2l0Y2goS2Upe2Nhc2UiTWlsbGlzZWNvbmRzIjpyZXR1cm4gSXQ/cHQuZ2V0VVRDTWlsbGlzZWNvbmRzKCk6cHQuZ2V0TWlsbGlzZWNvbmRz''@;'; put 'put ''KCk7Y2FzZSJTZWNvbmRzIjpyZXR1cm4gSXQ/cHQuZ2V0VVRDU2Vjb25kcygpOnB0LmdldFNlY29uZHMoKTtjYXNlIk1pbnV0ZXMiOnJldHVybiBJdD9wdC5nZXRVVENNaW51dGVzKCk6cHQuZ2V0TWludXRlcygpO2Nhc2UiSG91cnMiOnJldHVybiBJdD9wdC5nZXRVVENIb3VycygpOnB0Lmdl''@;'; put 'put ''dEhvdXJzKCk7Y2FzZSJEYXRlIjpyZXR1cm4gSXQ/cHQuZ2V0VVRDRGF0ZSgpOnB0LmdldERhdGUoKTtjYXNlIkRheSI6cmV0dXJuIEl0P3B0LmdldFVUQ0RheSgpOnB0LmdldERheSgpO2Nhc2UiTW9udGgiOnJldHVybiBJdD9wdC5nZXRVVENNb250aCgpOnB0LmdldE1vbnRoKCk7Y2FzZSJG''@;'; put 'put ''dWxsWWVhciI6cmV0dXJuIEl0P3B0LmdldFVUQ0Z1bGxZZWFyKCk6cHQuZ2V0RnVsbFllYXIoKTtkZWZhdWx0OnJldHVybiBOYU59fWZ1bmN0aW9uIEJpKENlLEtlLHB0KXt2YXIgSXQsaG4scW4scmksUm87aWYoQ2UuaXNWYWxpZCgpJiYhaXNOYU4ocHQpKXtzd2l0Y2goSXQ9Q2UuX2QsaG49''@;'; put 'put ''Q2UuX2lzVVRDLEtlKXtjYXNlIk1pbGxpc2Vjb25kcyI6cmV0dXJuIHZvaWQoaG4/SXQuc2V0VVRDTWlsbGlzZWNvbmRzKHB0KTpJdC5zZXRNaWxsaXNlY29uZHMocHQpKTtjYXNlIlNlY29uZHMiOnJldHVybiB2b2lkKGhuP0l0LnNldFVUQ1NlY29uZHMocHQpOkl0LnNldFNlY29uZHMocHQp''@;'; put 'put ''KTtjYXNlIk1pbnV0ZXMiOnJldHVybiB2b2lkKGhuP0l0LnNldFVUQ01pbnV0ZXMocHQpOkl0LnNldE1pbnV0ZXMocHQpKTtjYXNlIkhvdXJzIjpyZXR1cm4gdm9pZChobj9JdC5zZXRVVENIb3VycyhwdCk6SXQuc2V0SG91cnMocHQpKTtjYXNlIkRhdGUiOnJldHVybiB2b2lkKGhuP0l0LnNl''@;'; put 'put ''dFVUQ0RhdGUocHQpOkl0LnNldERhdGUocHQpKTtjYXNlIkZ1bGxZZWFyIjpicmVhaztkZWZhdWx0OnJldHVybn1xbj1wdCxyaT1DZS5tb250aCgpLFJvPTI5IT09KFJvPUNlLmRhdGUoKSl8fDEhPT1yaXx8b24ocW4pP1JvOjI4LGhuP0l0LnNldFVUQ0Z1bGxZZWFyKHFuLHJpLFJvKTpJdC5z''@;'; put 'put ''ZXRGdWxsWWVhcihxbixyaSxSbyl9fWZ1bmN0aW9uIGdvKENlLEtlKXtpZihpc05hTihDZSl8fGlzTmFOKEtlKSlyZXR1cm4gTmFOO3ZhciBwdD1mdW5jdGlvbiBPcihDZSxLZSl7cmV0dXJuKENlJUtlK0tlKSVLZX0oS2UsMTIpO3JldHVybiBDZSs9KEtlLXB0KS8xMiwxPT09cHQ/b24oQ2Up''@;'; put 'put ''PzI5OjI4OjMxLXB0JTclMn1ZaT1BcnJheS5wcm90b3R5cGUuaW5kZXhPZj9BcnJheS5wcm90b3R5cGUuaW5kZXhPZjpmdW5jdGlvbihDZSl7dmFyIEtlO2ZvcihLZT0wO0tlPHRoaXMubGVuZ3RoOysrS2UpaWYodGhpc1tLZV09PT1DZSlyZXR1cm4gS2U7cmV0dXJuLTF9LHNlKCJNIixbIk1N''@;'; put 'put ''IiwyXSwiTW8iLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubW9udGgoKSsxfSksc2UoIk1NTSIsMCwwLGZ1bmN0aW9uKENlKXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzU2hvcnQodGhpcyxDZSl9KSxzZSgiTU1NTSIsMCwwLGZ1bmN0aW9uKENlKXtyZXR1cm4gdGhpcy5sb2NhbGVE''@;'; put 'put ''YXRhKCkubW9udGhzKHRoaXMsQ2UpfSksTG4oIk0iLHR0LFByKSxMbigiTU0iLHR0LE10KSxMbigiTU1NIixmdW5jdGlvbihDZSxLZSl7cmV0dXJuIEtlLm1vbnRoc1Nob3J0UmVnZXgoQ2UpfSksTG4oIk1NTU0iLGZ1bmN0aW9uKENlLEtlKXtyZXR1cm4gS2UubW9udGhzUmVnZXgoQ2UpfSks''@;'; put 'put ''aHQoWyJNIiwiTU0iXSxmdW5jdGlvbihDZSxLZSl7S2VbZGldPVR0KENlKS0xfSksaHQoWyJNTU0iLCJNTU1NIl0sZnVuY3Rpb24oQ2UsS2UscHQsSXQpe3ZhciBobj1wdC5fbG9jYWxlLm1vbnRoc1BhcnNlKENlLEl0LHB0Ll9zdHJpY3QpO251bGwhPWhuP0tlW2RpXT1objpZKHB0KS5pbnZh''@;'; put 'put ''bGlkTW9udGg9Q2V9KTt2YXIgZXI9IkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksY289Ikphbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9O''@;'; put 'put ''b3ZfRGVjIi5zcGxpdCgiXyIpLF9vPS9EW29EXT8oXFtbXlxbXF1dKlxdfFxzKStNTU1NPy8sT289ZnQsSG89ZnQ7ZnVuY3Rpb24gTnMoQ2UsS2UscHQpe3ZhciBJdCxobixxbixyaT1DZS50b0xvY2FsZUxvd2VyQ2FzZSgpO2lmKCF0aGlzLl9tb250aHNQYXJzZSlmb3IodGhpcy5fbW9udGhz''@;'; put 'put ''UGFyc2U9W10sdGhpcy5fbG9uZ01vbnRoc1BhcnNlPVtdLHRoaXMuX3Nob3J0TW9udGhzUGFyc2U9W10sSXQ9MDtJdDwxMjsrK0l0KXFuPVUoWzJlMyxJdF0pLHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbSXRdPXRoaXMubW9udGhzU2hvcnQocW4sIiIpLnRvTG9jYWxlTG93ZXJDYXNlKCksdGhp''@;'; put 'put ''cy5fbG9uZ01vbnRoc1BhcnNlW0l0XT10aGlzLm1vbnRocyhxbiwiIikudG9Mb2NhbGVMb3dlckNhc2UoKTtyZXR1cm4gcHQ/Ik1NTSI9PT1LZT8tMSE9PShobj1ZaS5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UscmkpKT9objpudWxsOi0xIT09KGhuPVlpLmNhbGwodGhpcy5fbG9uZ01v''@;'; put 'put ''bnRoc1BhcnNlLHJpKSk/aG46bnVsbDoiTU1NIj09PUtlPy0xIT09KGhuPVlpLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSxyaSkpfHwtMSE9PShobj1ZaS5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSxyaSkpP2huOm51bGw6LTEhPT0oaG49WWkuY2FsbCh0aGlzLl9sb25nTW9udGhz''@;'; put 'put ''UGFyc2UscmkpKXx8LTEhPT0oaG49WWkuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLHJpKSk/aG46bnVsbH1mdW5jdGlvbiBmdShDZSxLZSl7aWYoIUNlLmlzVmFsaWQoKSlyZXR1cm4gQ2U7aWYoInN0cmluZyI9PXR5cGVvZiBLZSlpZigvXlxkKyQvLnRlc3QoS2UpKUtlPVR0KEtlKTtl''@;'; put 'put ''bHNlIGlmKCF6KEtlPUNlLmxvY2FsZURhdGEoKS5tb250aHNQYXJzZShLZSkpKXJldHVybiBDZTt2YXIgcHQ9S2UsSXQ9Q2UuZGF0ZSgpO3JldHVybiBJdD1JdDwyOT9JdDpNYXRoLm1pbihJdCxnbyhDZS55ZWFyKCkscHQpKSxDZS5faXNVVEM/Q2UuX2Quc2V0VVRDTW9udGgocHQsSXQpOkNl''@;'; put 'put ''Ll9kLnNldE1vbnRoKHB0LEl0KSxDZX1mdW5jdGlvbiBSYyhDZSl7cmV0dXJuIG51bGwhPUNlPyhmdSh0aGlzLENlKSx5LnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzKTpKcih0aGlzLCJNb250aCIpfWZ1bmN0aW9uIHNpKCl7ZnVuY3Rpb24gQ2UoTWEsZnMpe3JldHVybiBmcy5sZW5ndGgt''@;'; put 'put ''TWEubGVuZ3RofXZhciBobixxbixyaSxSbyxLZT1bXSxwdD1bXSxJdD1bXTtmb3IoaG49MDtobjwxMjtobisrKXFuPVUoWzJlMyxobl0pLHJpPW5pKHRoaXMubW9udGhzU2hvcnQocW4sIiIpKSxSbz1uaSh0aGlzLm1vbnRocyhxbiwiIikpLEtlLnB1c2gocmkpLHB0LnB1c2goUm8pLEl0LnB1''@;'; put 'put ''c2goUm8pLEl0LnB1c2gocmkpO0tlLnNvcnQoQ2UpLHB0LnNvcnQoQ2UpLEl0LnNvcnQoQ2UpLHRoaXMuX21vbnRoc1JlZ2V4PW5ldyBSZWdFeHAoIl4oIitJdC5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fbW9udGhzU2hvcnRSZWdleD10aGlzLl9tb250aHNSZWdleCx0aGlzLl9tb250aHNT''@;'; put 'put ''dHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrcHQuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK0tlLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBIdChDZSxLZSxwdCxJdCxobixxbixyaSl7dmFyIFJvO3JldHVybiBD''@;'; put 'put ''ZTwxMDAmJkNlPj0wPyhSbz1uZXcgRGF0ZShDZSs0MDAsS2UscHQsSXQsaG4scW4scmkpLGlzRmluaXRlKFJvLmdldEZ1bGxZZWFyKCkpJiZSby5zZXRGdWxsWWVhcihDZSkpOlJvPW5ldyBEYXRlKENlLEtlLHB0LEl0LGhuLHFuLHJpKSxSb31mdW5jdGlvbiBYcihDZSl7dmFyIEtlLHB0O3Jl''@;'; put 'put ''dHVybiBDZTwxMDAmJkNlPj0wPygocHQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSlbMF09Q2UrNDAwLEtlPW5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KG51bGwscHQpKSxpc0Zpbml0ZShLZS5nZXRVVENGdWxsWWVhcigpKSYmS2Uuc2V0VVRDRnVsbFllYXIoQ2UpKTpL''@;'; put 'put ''ZT1uZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLGFyZ3VtZW50cykpLEtlfWZ1bmN0aW9uIGIwKENlLEtlLHB0KXt2YXIgSXQ9NytLZS1wdDtyZXR1cm4tKDcrWHIoQ2UsMCxJdCkuZ2V0VVRDRGF5KCktS2UpJTcrSXQtMX1mdW5jdGlvbiBObyhDZSxLZSxwdCxJdCxobil7dmFyIE1hLGZz''@;'; put 'put ''LFJvPTErNyooS2UtMSkrKDcrcHQtSXQpJTcrYjAoQ2UsSXQsaG4pO3JldHVybiBSbzw9MD9mcz1wcihNYT1DZS0xKStSbzpSbz5wcihDZSk/KE1hPUNlKzEsZnM9Um8tcHIoQ2UpKTooTWE9Q2UsZnM9Um8pLHt5ZWFyOk1hLGRheU9mWWVhcjpmc319ZnVuY3Rpb24gUnUoQ2UsS2UscHQpe3Zh''@;'; put 'put ''ciBxbixyaSxJdD1iMChDZS55ZWFyKCksS2UscHQpLGhuPU1hdGguZmxvb3IoKENlLmRheU9mWWVhcigpLUl0LTEpLzcpKzE7cmV0dXJuIGhuPDE/cW49aG4rRnIocmk9Q2UueWVhcigpLTEsS2UscHQpOmhuPkZyKENlLnllYXIoKSxLZSxwdCk/KHFuPWhuLUZyKENlLnllYXIoKSxLZSxwdCks''@;'; put 'put ''cmk9Q2UueWVhcigpKzEpOihyaT1DZS55ZWFyKCkscW49aG4pLHt3ZWVrOnFuLHllYXI6cml9fWZ1bmN0aW9uIEZyKENlLEtlLHB0KXt2YXIgSXQ9YjAoQ2UsS2UscHQpLGhuPWIwKENlKzEsS2UscHQpO3JldHVybihwcihDZSktSXQraG4pLzd9c2UoInciLFsid3ciLDJdLCJ3byIsIndlZWsi''@;'; put 'put ''KSxzZSgiVyIsWyJXVyIsMl0sIldvIiwiaXNvV2VlayIpLExuKCJ3Iix0dCxQciksTG4oInd3Iix0dCxNdCksTG4oIlciLHR0LFByKSxMbigiV1ciLHR0LE10KSx4dChbInciLCJ3dyIsIlciLCJXVyJdLGZ1bmN0aW9uKENlLEtlLHB0LEl0KXtLZVtJdC5zdWJzdHIoMCwxKV09VHQoQ2UpfSk7''@;'; put 'put ''ZnVuY3Rpb24geTAoQ2UsS2Upe3JldHVybiBDZS5zbGljZShLZSw3KS5jb25jYXQoQ2Uuc2xpY2UoMCxLZSkpfXNlKCJkIiwwLCJkbyIsImRheSIpLHNlKCJkZCIsMCwwLGZ1bmN0aW9uKENlKXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNNaW4odGhpcyxDZSl9KSxzZSgiZGRk''@;'; put 'put ''IiwwLDAsZnVuY3Rpb24oQ2Upe3JldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c1Nob3J0KHRoaXMsQ2UpfSksc2UoImRkZGQiLDAsMCxmdW5jdGlvbihDZSl7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzKHRoaXMsQ2UpfSksc2UoImUiLDAsMCwid2Vla2RheSIpLHNl''@;'; put 'put ''KCJFIiwwLDAsImlzb1dlZWtkYXkiKSxMbigiZCIsdHQpLExuKCJlIix0dCksTG4oIkUiLHR0KSxMbigiZGQiLGZ1bmN0aW9uKENlLEtlKXtyZXR1cm4gS2Uud2Vla2RheXNNaW5SZWdleChDZSl9KSxMbigiZGRkIixmdW5jdGlvbihDZSxLZSl7cmV0dXJuIEtlLndlZWtkYXlzU2hvcnRSZWdl''@;'; put 'put ''eChDZSl9KSxMbigiZGRkZCIsZnVuY3Rpb24oQ2UsS2Upe3JldHVybiBLZS53ZWVrZGF5c1JlZ2V4KENlKX0pLHh0KFsiZGQiLCJkZGQiLCJkZGRkIl0sZnVuY3Rpb24oQ2UsS2UscHQsSXQpe3ZhciBobj1wdC5fbG9jYWxlLndlZWtkYXlzUGFyc2UoQ2UsSXQscHQuX3N0cmljdCk7bnVsbCE9''@;'; put 'put ''aG4/S2UuZD1objpZKHB0KS5pbnZhbGlkV2Vla2RheT1DZX0pLHh0KFsiZCIsImUiLCJFIl0sZnVuY3Rpb24oQ2UsS2UscHQsSXQpe0tlW0l0XT1UdChDZSl9KTt2YXIgZTU9IlN1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Ii5zcGxpdCgi''@;'; put 'put ''XyIpLFJsPSJTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQiLnNwbGl0KCJfIiksbmY9IlN1X01vX1R1X1dlX1RoX0ZyX1NhIi5zcGxpdCgiXyIpLHNkPWZ0LHJmPWZ0LGsxPWZ0O2Z1bmN0aW9uIHpoKENlLEtlLHB0KXt2YXIgSXQsaG4scW4scmk9Q2UudG9Mb2NhbGVMb3dlckNhc2UoKTtp''@;'; put 'put ''ZighdGhpcy5fd2Vla2RheXNQYXJzZSlmb3IodGhpcy5fd2Vla2RheXNQYXJzZT1bXSx0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2U9W10sdGhpcy5fbWluV2Vla2RheXNQYXJzZT1bXSxJdD0wO0l0PDc7KytJdClxbj1VKFsyZTMsMV0pLmRheShJdCksdGhpcy5fbWluV2Vla2RheXNQYXJzZVtJ''@;'; put 'put ''dF09dGhpcy53ZWVrZGF5c01pbihxbiwiIikudG9Mb2NhbGVMb3dlckNhc2UoKSx0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbSXRdPXRoaXMud2Vla2RheXNTaG9ydChxbiwiIikudG9Mb2NhbGVMb3dlckNhc2UoKSx0aGlzLl93ZWVrZGF5c1BhcnNlW0l0XT10aGlzLndlZWtkYXlzKHFuLCIi''@;'; put 'put ''KS50b0xvY2FsZUxvd2VyQ2FzZSgpO3JldHVybiBwdD8iZGRkZCI9PT1LZT8tMSE9PShobj1ZaS5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UscmkpKT9objpudWxsOiJkZGQiPT09S2U/LTEhPT0oaG49WWkuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UscmkpKT9objpudWxsOi0xIT09''@;'; put 'put ''KGhuPVlpLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSxyaSkpP2huOm51bGw6ImRkZGQiPT09S2U/LTEhPT0oaG49WWkuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLHJpKSl8fC0xIT09KGhuPVlpLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLHJpKSl8fC0xIT09KGhuPVlpLmNh''@;'; put 'put ''bGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSxyaSkpP2huOm51bGw6ImRkZCI9PT1LZT8tMSE9PShobj1ZaS5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSxyaSkpfHwtMSE9PShobj1ZaS5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UscmkpKXx8LTEhPT0oaG49WWkuY2FsbCh0aGlzLl9t''@;'; put 'put ''aW5XZWVrZGF5c1BhcnNlLHJpKSk/aG46bnVsbDotMSE9PShobj1ZaS5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UscmkpKXx8LTEhPT0oaG49WWkuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLHJpKSl8fC0xIT09KGhuPVlpLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLHJpKSk/''@;'; put 'put ''aG46bnVsbH1mdW5jdGlvbiBhbigpe2Z1bmN0aW9uIENlKEh1LGRkKXtyZXR1cm4gZGQubGVuZ3RoLUh1Lmxlbmd0aH12YXIgcW4scmksUm8sTWEsZnMsS2U9W10scHQ9W10sSXQ9W10saG49W107Zm9yKHFuPTA7cW48NztxbisrKXJpPVUoWzJlMywxXSkuZGF5KHFuKSxSbz1uaSh0aGlzLndl''@;'; put 'put ''ZWtkYXlzTWluKHJpLCIiKSksTWE9bmkodGhpcy53ZWVrZGF5c1Nob3J0KHJpLCIiKSksZnM9bmkodGhpcy53ZWVrZGF5cyhyaSwiIikpLEtlLnB1c2goUm8pLHB0LnB1c2goTWEpLEl0LnB1c2goZnMpLGhuLnB1c2goUm8pLGhuLnB1c2goTWEpLGhuLnB1c2goZnMpO0tlLnNvcnQoQ2UpLHB0''@;'; put 'put ''LnNvcnQoQ2UpLEl0LnNvcnQoQ2UpLGhuLnNvcnQoQ2UpLHRoaXMuX3dlZWtkYXlzUmVnZXg9bmV3IFJlZ0V4cCgiXigiK2huLmpvaW4oInwiKSsiKSIsImkiKSx0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg9dGhpcy5fd2Vla2RheXNSZWdleCx0aGlzLl93ZWVrZGF5c01pblJlZ2V4PXRoaXMu''@;'; put 'put ''X3dlZWtkYXlzUmVnZXgsdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrSXQuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleD1uZXcgUmVnRXhwKCJeKCIrcHQuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX3dlZWtkYXlzTWlu''@;'; put 'put ''U3RyaWN0UmVnZXg9bmV3IFJlZ0V4cCgiXigiK0tlLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBnaSgpe3JldHVybiB0aGlzLmhvdXJzKCklMTJ8fDEyfWZ1bmN0aW9uIE9hKENlLEtlKXtzZShDZSwwLDAsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubWVyaWRpZW0o''@;'; put 'put ''dGhpcy5ob3VycygpLHRoaXMubWludXRlcygpLEtlKX0pfWZ1bmN0aW9uIGVhKENlLEtlKXtyZXR1cm4gS2UuX21lcmlkaWVtUGFyc2V9c2UoIkgiLFsiSEgiLDJdLDAsImhvdXIiKSxzZSgiaCIsWyJoaCIsMl0sMCxnaSksc2UoImsiLFsia2siLDJdLDAsZnVuY3Rpb24gQXIoKXtyZXR1cm4g''@;'; put 'put ''dGhpcy5ob3VycygpfHwyNH0pLHNlKCJobW0iLDAsMCxmdW5jdGlvbigpe3JldHVybiIiK2dpLmFwcGx5KHRoaXMpK0UodGhpcy5taW51dGVzKCksMil9KSxzZSgiaG1tc3MiLDAsMCxmdW5jdGlvbigpe3JldHVybiIiK2dpLmFwcGx5KHRoaXMpK0UodGhpcy5taW51dGVzKCksMikrRSh0aGlz''@;'; put 'put ''LnNlY29uZHMoKSwyKX0pLHNlKCJIbW0iLDAsMCxmdW5jdGlvbigpe3JldHVybiIiK3RoaXMuaG91cnMoKStFKHRoaXMubWludXRlcygpLDIpfSksc2UoIkhtbXNzIiwwLDAsZnVuY3Rpb24oKXtyZXR1cm4iIit0aGlzLmhvdXJzKCkrRSh0aGlzLm1pbnV0ZXMoKSwyKStFKHRoaXMuc2Vjb25k''@;'; put 'put ''cygpLDIpfSksT2EoImEiLCEwKSxPYSgiQSIsITEpLExuKCJhIixlYSksTG4oIkEiLGVhKSxMbigiSCIsdHQsWnQpLExuKCJoIix0dCxQciksTG4oImsiLHR0LFByKSxMbigiSEgiLHR0LE10KSxMbigiaGgiLHR0LE10KSxMbigia2siLHR0LE10KSxMbigiaG1tIixIZSksTG4oImhtbXNzIixk''@;'; put 'put ''dCksTG4oIkhtbSIsSGUpLExuKCJIbW1zcyIsZHQpLGh0KFsiSCIsIkhIIl0scG4pLGh0KFsiayIsImtrIl0sZnVuY3Rpb24oQ2UsS2UscHQpe3ZhciBJdD1UdChDZSk7S2VbcG5dPTI0PT09SXQ/MDpJdH0pLGh0KFsiYSIsIkEiXSxmdW5jdGlvbihDZSxLZSxwdCl7cHQuX2lzUG09cHQuX2xv''@;'; put 'put ''Y2FsZS5pc1BNKENlKSxwdC5fbWVyaWRpZW09Q2V9KSxodChbImgiLCJoaCJdLGZ1bmN0aW9uKENlLEtlLHB0KXtLZVtwbl09VHQoQ2UpLFkocHQpLmJpZ0hvdXI9ITB9KSxodCgiaG1tIixmdW5jdGlvbihDZSxLZSxwdCl7dmFyIEl0PUNlLmxlbmd0aC0yO0tlW3BuXT1UdChDZS5zdWJzdHIo''@;'; put 'put ''MCxJdCkpLEtlW0lpXT1UdChDZS5zdWJzdHIoSXQpKSxZKHB0KS5iaWdIb3VyPSEwfSksaHQoImhtbXNzIixmdW5jdGlvbihDZSxLZSxwdCl7dmFyIEl0PUNlLmxlbmd0aC00LGhuPUNlLmxlbmd0aC0yO0tlW3BuXT1UdChDZS5zdWJzdHIoMCxJdCkpLEtlW0lpXT1UdChDZS5zdWJzdHIoSXQs''@;'; put 'put ''MikpLEtlW1h0XT1UdChDZS5zdWJzdHIoaG4pKSxZKHB0KS5iaWdIb3VyPSEwfSksaHQoIkhtbSIsZnVuY3Rpb24oQ2UsS2UscHQpe3ZhciBJdD1DZS5sZW5ndGgtMjtLZVtwbl09VHQoQ2Uuc3Vic3RyKDAsSXQpKSxLZVtJaV09VHQoQ2Uuc3Vic3RyKEl0KSl9KSxodCgiSG1tc3MiLGZ1bmN0''@;'; put 'put ''aW9uKENlLEtlLHB0KXt2YXIgSXQ9Q2UubGVuZ3RoLTQsaG49Q2UubGVuZ3RoLTI7S2VbcG5dPVR0KENlLnN1YnN0cigwLEl0KSksS2VbSWldPVR0KENlLnN1YnN0cihJdCwyKSksS2VbWHRdPVR0KENlLnN1YnN0cihobikpfSk7dmFyIFZzPVFyKCJIb3VycyIsITApO3ZhciBTdCxObD17Y2Fs''@;'; put 'put ''ZW5kYXI6e3NhbWVEYXk6IltUb2RheSBhdF0gTFQiLG5leHREYXk6IltUb21vcnJvdyBhdF0gTFQiLG5leHRXZWVrOiJkZGRkIFthdF0gTFQiLGxhc3REYXk6IltZZXN0ZXJkYXkgYXRdIExUIixsYXN0V2VlazoiW0xhc3RdIGRkZGQgW2F0XSBMVCIsc2FtZUVsc2U6IkwifSxsb25nRGF0ZUZv''@;'; put 'put ''cm1hdDp7TFRTOiJoOm1tOnNzIEEiLExUOiJoOm1tIEEiLEw6Ik1NL0REL1lZWVkiLExMOiJNTU1NIEQsIFlZWVkiLExMTDoiTU1NTSBELCBZWVlZIGg6bW0gQSIsTExMTDoiZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQSJ9LGludmFsaWREYXRlOiJJbnZhbGlkIGRhdGUiLG9yZGluYWw6IiVk''@;'; put 'put ''IixkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOi9cZHsxLDJ9LyxyZWxhdGl2ZVRpbWU6e2Z1dHVyZToiaW4gJXMiLHBhc3Q6IiVzIGFnbyIsczoiYSBmZXcgc2Vjb25kcyIsc3M6IiVkIHNlY29uZHMiLG06ImEgbWludXRlIixtbToiJWQgbWludXRlcyIsaDoiYW4gaG91ciIsaGg6IiVkIGhvdXJz''@;'; put 'put ''IixkOiJhIGRheSIsZGQ6IiVkIGRheXMiLHc6ImEgd2VlayIsd3c6IiVkIHdlZWtzIixNOiJhIG1vbnRoIixNTToiJWQgbW9udGhzIix5OiJhIHllYXIiLHl5OiIlZCB5ZWFycyJ9LG1vbnRoczplcixtb250aHNTaG9ydDpjbyx3ZWVrOntkb3c6MCxkb3k6Nn0sd2Vla2RheXM6ZTUsd2Vla2Rh''@;'; put 'put ''eXNNaW46bmYsd2Vla2RheXNTaG9ydDpSbCxtZXJpZGllbVBhcnNlOi9bYXBdXC4/bT9cLj8vaX0sSGE9e30sa2E9e307ZnVuY3Rpb24gVnQoQ2UsS2Upe3ZhciBwdCxJdD1NYXRoLm1pbihDZS5sZW5ndGgsS2UubGVuZ3RoKTtmb3IocHQ9MDtwdDxJdDtwdCs9MSlpZihDZVtwdF0hPT1LZVtw''@;'; put 'put ''dF0pcmV0dXJuIHB0O3JldHVybiBJdH1mdW5jdGlvbiBfbihDZSl7cmV0dXJuIENlJiZDZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoIl8iLCItIil9ZnVuY3Rpb24gYm4oQ2Upe3ZhciBLZT1udWxsO2lmKHZvaWQgMD09PUhhW0NlXSYmdWUmJnVlLmV4cG9ydHMmJmZ1bmN0aW9uIFJuKENlKXty''@;'; put 'put ''ZXR1cm4hKCFDZXx8IUNlLm1hdGNoKCJeW14vXFxcXF0qJCIpKX0oQ2UpKXRyeXtLZT1TdC5fYWJicixfKDM1MzU4KSgiLi8iK0NlKSxjcihLZSl9Y2F0Y2h7SGFbQ2VdPW51bGx9cmV0dXJuIEhhW0NlXX1mdW5jdGlvbiBjcihDZSxLZSl7dmFyIHB0O3JldHVybiBDZSYmKChwdD1PKEtlKT9y''@;'; put 'put ''byhDZSk6bWkoQ2UsS2UpKT9TdD1wdDp0eXBlb2YgY29uc29sZTwidSImJmNvbnNvbGUud2FybiYmY29uc29sZS53YXJuKCJMb2NhbGUgIitDZSsiIG5vdCBmb3VuZC4gRGlkIHlvdSBmb3JnZXQgdG8gbG9hZCBpdD8iKSksU3QuX2FiYnJ9ZnVuY3Rpb24gbWkoQ2UsS2Upe2lmKG51bGwhPT1L''@;'; put 'put ''ZSl7dmFyIHB0LEl0PU5sO2lmKEtlLmFiYnI9Q2UsbnVsbCE9SGFbQ2VdKVYoImRlZmluZUxvY2FsZU92ZXJyaWRlIiwidXNlIG1vbWVudC51cGRhdGVMb2NhbGUobG9jYWxlTmFtZSwgY29uZmlnKSB0byBjaGFuZ2UgYW4gZXhpc3RpbmcgbG9jYWxlLiBtb21lbnQuZGVmaW5lTG9jYWxlKGxv''@;'; put 'put ''Y2FsZU5hbWUsIGNvbmZpZykgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgY3JlYXRpbmcgYSBuZXcgbG9jYWxlIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RlZmluZS1sb2NhbGUvIGZvciBtb3JlIGluZm8uIiksSXQ9SGFbQ2VdLl9jb25maWc7ZWxzZSBpZihu''@;'; put 'put ''dWxsIT1LZS5wYXJlbnRMb2NhbGUpaWYobnVsbCE9SGFbS2UucGFyZW50TG9jYWxlXSlJdD1IYVtLZS5wYXJlbnRMb2NhbGVdLl9jb25maWc7ZWxzZXtpZihudWxsPT0ocHQ9Ym4oS2UucGFyZW50TG9jYWxlKSkpcmV0dXJuIGthW0tlLnBhcmVudExvY2FsZV18fChrYVtLZS5wYXJlbnRMb2Nh''@;'; put 'put ''bGVdPVtdKSxrYVtLZS5wYXJlbnRMb2NhbGVdLnB1c2goe25hbWU6Q2UsY29uZmlnOktlfSksbnVsbDtJdD1wdC5fY29uZmlnfXJldHVybiBIYVtDZV09bmV3IEMoeChJdCxLZSkpLGthW0NlXSYma2FbQ2VdLmZvckVhY2goZnVuY3Rpb24oaG4pe21pKGhuLm5hbWUsaG4uY29uZmlnKX0pLGNy''@;'; put 'put ''KENlKSxIYVtDZV19cmV0dXJuIGRlbGV0ZSBIYVtDZV0sbnVsbH1mdW5jdGlvbiBybyhDZSl7dmFyIEtlO2lmKENlJiZDZS5fbG9jYWxlJiZDZS5fbG9jYWxlLl9hYmJyJiYoQ2U9Q2UuX2xvY2FsZS5fYWJiciksIUNlKXJldHVybiBTdDtpZighQihDZSkpe2lmKEtlPWJuKENlKSlyZXR1cm4g''@;'; put 'put ''S2U7Q2U9W0NlXX1yZXR1cm4gZnVuY3Rpb24gdm4oQ2Upe2Zvcih2YXIgcHQsSXQsaG4scW4sS2U9MDtLZTxDZS5sZW5ndGg7KXtmb3IocHQ9KHFuPV9uKENlW0tlXSkuc3BsaXQoIi0iKSkubGVuZ3RoLEl0PShJdD1fbihDZVtLZSsxXSkpP0l0LnNwbGl0KCItIik6bnVsbDtwdD4wOyl7aWYo''@;'; put 'put ''aG49Ym4ocW4uc2xpY2UoMCxwdCkuam9pbigiLSIpKSlyZXR1cm4gaG47aWYoSXQmJkl0Lmxlbmd0aD49cHQmJlZ0KHFuLEl0KT49cHQtMSlicmVhaztwdC0tfUtlKyt9cmV0dXJuIFN0fShDZSl9ZnVuY3Rpb24gQm8oQ2Upe3ZhciBLZSxwdD1DZS5fYTtyZXR1cm4gcHQmJi0yPT09WShDZSku''@;'; put 'put ''b3ZlcmZsb3cmJihLZT1wdFtkaV08MHx8cHRbZGldPjExP2RpOnB0W2NuXTwxfHxwdFtjbl0+Z28ocHRbanRdLHB0W2RpXSk/Y246cHRbcG5dPDB8fHB0W3BuXT4yNHx8MjQ9PT1wdFtwbl0mJigwIT09cHRbSWldfHwwIT09cHRbWHRdfHwwIT09cHRbZW5dKT9wbjpwdFtJaV08MHx8cHRbSWld''@;'; put 'put ''PjU5P0lpOnB0W1h0XTwwfHxwdFtYdF0+NTk/WHQ6cHRbZW5dPDB8fHB0W2VuXT45OTk/ZW46LTEsWShDZSkuX292ZXJmbG93RGF5T2ZZZWFyJiYoS2U8anR8fEtlPmNuKSYmKEtlPWNuKSxZKENlKS5fb3ZlcmZsb3dXZWVrcyYmLTE9PT1LZSYmKEtlPWhvKSxZKENlKS5fb3ZlcmZsb3dXZWVr''@;'; put 'put ''ZGF5JiYtMT09PUtlJiYoS2U9TWkpLFkoQ2UpLm92ZXJmbG93PUtlKSxDZX12YXIgR2E9L15ccyooKD86WystXVxkezZ9fFxkezR9KS0oPzpcZFxkLVxkXGR8V1xkXGQtXGR8V1xkXGR8XGRcZFxkfFxkXGQpKSg/OihUfCApKFxkXGQoPzo6XGRcZCg/OjpcZFxkKD86Wy4sXVxkKyk/KT8pPyko''@;'; put 'put ''WystXVxkXGQoPzo6P1xkXGQpP3xccypaKT8pPyQvLCRsPS9eXHMqKCg/OlsrLV1cZHs2fXxcZHs0fSkoPzpcZFxkXGRcZHxXXGRcZFxkfFdcZFxkfFxkXGRcZHxcZFxkfCkpKD86KFR8ICkoXGRcZCg/OlxkXGQoPzpcZFxkKD86Wy4sXVxkKyk/KT8pPykoWystXVxkXGQoPzo6P1xkXGQpP3xc''@;'; put 'put ''cypaKT8pPyQvLHRhPS9afFsrLV1cZFxkKD86Oj9cZFxkKT8vLF9hPVtbIllZWVlZWS1NTS1ERCIsL1srLV1cZHs2fS1cZFxkLVxkXGQvXSxbIllZWVktTU0tREQiLC9cZHs0fS1cZFxkLVxkXGQvXSxbIkdHR0ctW1ddV1ctRSIsL1xkezR9LVdcZFxkLVxkL10sWyJHR0dHLVtXXVdXIiwvXGR7''@;'; put 'put ''NH0tV1xkXGQvLCExXSxbIllZWVktREREIiwvXGR7NH0tXGR7M30vXSxbIllZWVktTU0iLC9cZHs0fS1cZFxkLywhMV0sWyJZWVlZWVlNTUREIiwvWystXVxkezEwfS9dLFsiWVlZWU1NREQiLC9cZHs4fS9dLFsiR0dHR1tXXVdXRSIsL1xkezR9V1xkezN9L10sWyJHR0dHW1ddV1ciLC9cZHs0''@;'; put 'put ''fVdcZHsyfS8sITFdLFsiWVlZWURERCIsL1xkezd9L10sWyJZWVlZTU0iLC9cZHs2fS8sITFdLFsiWVlZWSIsL1xkezR9LywhMV1dLHppPVtbIkhIOm1tOnNzLlNTU1MiLC9cZFxkOlxkXGQ6XGRcZFwuXGQrL10sWyJISDptbTpzcyxTU1NTIiwvXGRcZDpcZFxkOlxkXGQsXGQrL10sWyJISDpt''@;'; put 'put ''bTpzcyIsL1xkXGQ6XGRcZDpcZFxkL10sWyJISDptbSIsL1xkXGQ6XGRcZC9dLFsiSEhtbXNzLlNTU1MiLC9cZFxkXGRcZFxkXGRcLlxkKy9dLFsiSEhtbXNzLFNTU1MiLC9cZFxkXGRcZFxkXGQsXGQrL10sWyJISG1tc3MiLC9cZFxkXGRcZFxkXGQvXSxbIkhIbW0iLC9cZFxkXGRcZC9dLFsi''@;'; put 'put ''SEgiLC9cZFxkL11dLE9jPS9eXC8/RGF0ZVwoKC0/XGQrKS9pLFZsPS9eKD86KE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksP1xzKT8oXGR7MSwyfSlccyhKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylccyhcZHsyLDR9KVxzKFxkXGQpOihcZFxk''@;'; put 'put ''KSg/OjooXGRcZCkpP1xzKD86KFVUfEdNVHxbRUNNUF1bU0RdVCl8KFtael0pfChbKy1dXGR7NH0pKSQvLFNvPXtVVDowLEdNVDowLEVEVDotMjQwLEVTVDotMzAwLENEVDotMzAwLENTVDotMzYwLE1EVDotMzYwLE1TVDotNDIwLFBEVDotNDIwLFBTVDotNDgwfTtmdW5jdGlvbiBUbyhDZSl7''@;'; put 'put ''dmFyIEtlLHB0LHFuLHJpLFJvLE1hLEl0PUNlLl9pLGhuPUdhLmV4ZWMoSXQpfHwkbC5leGVjKEl0KSxmcz1fYS5sZW5ndGgsSHU9emkubGVuZ3RoO2lmKGhuKXtmb3IoWShDZSkuaXNvPSEwLEtlPTAscHQ9ZnM7S2U8cHQ7S2UrKylpZihfYVtLZV1bMV0uZXhlYyhoblsxXSkpe3JpPV9hW0tl''@;'; put 'put ''XVswXSxxbj0hMSE9PV9hW0tlXVsyXTticmVha31pZihudWxsPT1yaSlyZXR1cm4gdm9pZChDZS5faXNWYWxpZD0hMSk7aWYoaG5bM10pe2ZvcihLZT0wLHB0PUh1O0tlPHB0O0tlKyspaWYoemlbS2VdWzFdLmV4ZWMoaG5bM10pKXtSbz0oaG5bMl18fCIgIikremlbS2VdWzBdO2JyZWFrfWlm''@;'; put 'put ''KG51bGw9PVJvKXJldHVybiB2b2lkKENlLl9pc1ZhbGlkPSExKX1pZighcW4mJm51bGwhPVJvKXJldHVybiB2b2lkKENlLl9pc1ZhbGlkPSExKTtpZihobls0XSl7aWYoIXRhLmV4ZWMoaG5bNF0pKXJldHVybiB2b2lkKENlLl9pc1ZhbGlkPSExKTtNYT0iWiJ9Q2UuX2Y9cmkrKFJvfHwiIikr''@;'; put 'put ''KE1hfHwiIiksdTQoQ2UpfWVsc2UgQ2UuX2lzVmFsaWQ9ITF9ZnVuY3Rpb24gJDAoQ2Upe3ZhciBLZT1wYXJzZUludChDZSwxMCk7cmV0dXJuIEtlPD00OT8yZTMrS2U6S2U8PTk5OT8xOTAwK0tlOktlfWZ1bmN0aW9uIFNzKENlKXt2YXIgcHQsS2U9VmwuZXhlYyhmdW5jdGlvbiBLMChDZSl7''@;'; put 'put ''cmV0dXJuIENlLnJlcGxhY2UoL1woW14oKV0qXCl8W1xuXHRdL2csIiAiKS5yZXBsYWNlKC8oXHNccyspL2csIiAiKS5yZXBsYWNlKC9eXHNccyovLCIiKS5yZXBsYWNlKC9cc1xzKiQvLCIiKX0oQ2UuX2kpKTtpZihLZSl7aWYocHQ9ZnVuY3Rpb24gWWgoQ2UsS2UscHQsSXQsaG4scW4pe3Zh''@;'; put 'put ''ciByaT1bJDAoQ2UpLGNvLmluZGV4T2YoS2UpLHBhcnNlSW50KHB0LDEwKSxwYXJzZUludChJdCwxMCkscGFyc2VJbnQoaG4sMTApXTtyZXR1cm4gcW4mJnJpLnB1c2gocGFyc2VJbnQocW4sMTApKSxyaX0oS2VbNF0sS2VbM10sS2VbMl0sS2VbNV0sS2VbNl0sS2VbN10pLCFmdW5jdGlvbiBO''@;'; put 'put ''YShDZSxLZSxwdCl7cmV0dXJuIUNlfHxSbC5pbmRleE9mKENlKT09PW5ldyBEYXRlKEtlWzBdLEtlWzFdLEtlWzJdKS5nZXREYXkoKXx8KFkocHQpLndlZWtkYXlNaXNtYXRjaD0hMCxwdC5faXNWYWxpZD0hMSwhMSl9KEtlWzFdLHB0LENlKSlyZXR1cm47Q2UuX2E9cHQsQ2UuX3R6bT1mdW5j''@;'; put 'put ''dGlvbiBYaShDZSxLZSxwdCl7aWYoQ2UpcmV0dXJuIFNvW0NlXTtpZihLZSlyZXR1cm4gMDt2YXIgSXQ9cGFyc2VJbnQocHQsMTApLGhuPUl0JTEwMDtyZXR1cm4oSXQtaG4pLzEwMCo2MCtobn0oS2VbOF0sS2VbOV0sS2VbMTBdKSxDZS5fZD1Yci5hcHBseShudWxsLENlLl9hKSxDZS5fZC5z''@;'; put 'put ''ZXRVVENNaW51dGVzKENlLl9kLmdldFVUQ01pbnV0ZXMoKS1DZS5fdHptKSxZKENlKS5yZmMyODIyPSEwfWVsc2UgQ2UuX2lzVmFsaWQ9ITF9ZnVuY3Rpb24gYWEoQ2UsS2UscHQpe3JldHVybiBDZT8/S2U/P3B0fWZ1bmN0aW9uIGJsKENlKXt2YXIgS2UscHQsaG4scW4scmksSXQ9W107aWYo''@;'; put 'put ''IUNlLl9kKXtmb3IoaG49ZnVuY3Rpb24gdDUoQ2Upe3ZhciBLZT1uZXcgRGF0ZSh5Lm5vdygpKTtyZXR1cm4gQ2UuX3VzZVVUQz9bS2UuZ2V0VVRDRnVsbFllYXIoKSxLZS5nZXRVVENNb250aCgpLEtlLmdldFVUQ0RhdGUoKV06W0tlLmdldEZ1bGxZZWFyKCksS2UuZ2V0TW9udGgoKSxLZS5n''@;'; put 'put ''ZXREYXRlKCldfShDZSksQ2UuX3cmJm51bGw9PUNlLl9hW2NuXSYmbnVsbD09Q2UuX2FbZGldJiZmdW5jdGlvbiBKZChDZSl7dmFyIEtlLHB0LEl0LGhuLHFuLHJpLFJvLE1hLGZzO251bGwhPShLZT1DZS5fdykuR0d8fG51bGwhPUtlLld8fG51bGwhPUtlLkU/KHFuPTEscmk9NCxwdD1hYShL''@;'; put 'put ''ZS5HRyxDZS5fYVtqdF0sUnUob2woKSwxLDQpLnllYXIpLEl0PWFhKEtlLlcsMSksKChobj1hYShLZS5FLDEpKTwxfHxobj43KSYmKE1hPSEwKSk6KHFuPUNlLl9sb2NhbGUuX3dlZWsuZG93LHJpPUNlLl9sb2NhbGUuX3dlZWsuZG95LGZzPVJ1KG9sKCkscW4scmkpLHB0PWFhKEtlLmdnLENl''@;'; put 'put ''Ll9hW2p0XSxmcy55ZWFyKSxJdD1hYShLZS53LGZzLndlZWspLG51bGwhPUtlLmQ/KChobj1LZS5kKTwwfHxobj42KSYmKE1hPSEwKTpudWxsIT1LZS5lPyhobj1LZS5lK3FuLChLZS5lPDB8fEtlLmU+NikmJihNYT0hMCkpOmhuPXFuKSxJdDwxfHxJdD5GcihwdCxxbixyaSk/WShDZSkuX292''@;'; put 'put ''ZXJmbG93V2Vla3M9ITA6bnVsbCE9TWE/WShDZSkuX292ZXJmbG93V2Vla2RheT0hMDooUm89Tm8ocHQsSXQsaG4scW4scmkpLENlLl9hW2p0XT1Sby55ZWFyLENlLl9kYXlPZlllYXI9Um8uZGF5T2ZZZWFyKX0oQ2UpLG51bGwhPUNlLl9kYXlPZlllYXImJihyaT1hYShDZS5fYVtqdF0saG5b''@;'; put 'put ''anRdKSwoQ2UuX2RheU9mWWVhcj5wcihyaSl8fDA9PT1DZS5fZGF5T2ZZZWFyKSYmKFkoQ2UpLl9vdmVyZmxvd0RheU9mWWVhcj0hMCkscHQ9WHIocmksMCxDZS5fZGF5T2ZZZWFyKSxDZS5fYVtkaV09cHQuZ2V0VVRDTW9udGgoKSxDZS5fYVtjbl09cHQuZ2V0VVRDRGF0ZSgpKSxLZT0wO0tl''@;'; put 'put ''PDMmJm51bGw9PUNlLl9hW0tlXTsrK0tlKUNlLl9hW0tlXT1JdFtLZV09aG5bS2VdO2Zvcig7S2U8NztLZSsrKUNlLl9hW0tlXT1JdFtLZV09bnVsbD09Q2UuX2FbS2VdPzI9PT1LZT8xOjA6Q2UuX2FbS2VdOzI0PT09Q2UuX2FbcG5dJiYwPT09Q2UuX2FbSWldJiYwPT09Q2UuX2FbWHRdJiYw''@;'; put 'put ''PT09Q2UuX2FbZW5dJiYoQ2UuX25leHREYXk9ITAsQ2UuX2FbcG5dPTApLENlLl9kPShDZS5fdXNlVVRDP1hyOkh0KS5hcHBseShudWxsLEl0KSxxbj1DZS5fdXNlVVRDP0NlLl9kLmdldFVUQ0RheSgpOkNlLl9kLmdldERheSgpLG51bGwhPUNlLl90em0mJkNlLl9kLnNldFVUQ01pbnV0ZXMo''@;'; put 'put ''Q2UuX2QuZ2V0VVRDTWludXRlcygpLUNlLl90em0pLENlLl9uZXh0RGF5JiYoQ2UuX2FbcG5dPTI0KSxDZS5fdyYmdHlwZW9mIENlLl93LmQ8InUiJiZDZS5fdy5kIT09cW4mJihZKENlKS53ZWVrZGF5TWlzbWF0Y2g9ITApfX1mdW5jdGlvbiB1NChDZSl7aWYoQ2UuX2YhPT15LklTT184NjAx''@;'; put 'put ''KWlmKENlLl9mIT09eS5SRkNfMjgyMil7Q2UuX2E9W10sWShDZSkuZW1wdHk9ITA7dmFyIHB0LEl0LGhuLHFuLHJpLGZzLEh1LEtlPSIiK0NlLl9pLFJvPUtlLmxlbmd0aCxNYT0wO2ZvcihIdT0oaG49YXQoQ2UuX2YsQ2UuX2xvY2FsZSkubWF0Y2gobSl8fFtdKS5sZW5ndGgscHQ9MDtwdDxI''@;'; put 'put ''dTtwdCsrKShJdD0oS2UubWF0Y2goc3QocW49aG5bcHRdLENlKSl8fFtdKVswXSkmJigocmk9S2Uuc3Vic3RyKDAsS2UuaW5kZXhPZihJdCkpKS5sZW5ndGg+MCYmWShDZSkudW51c2VkSW5wdXQucHVzaChyaSksS2U9S2Uuc2xpY2UoS2UuaW5kZXhPZihJdCkrSXQubGVuZ3RoKSxNYSs9SXQu''@;'; put 'put ''bGVuZ3RoKSx0ZVtxbl0/KEl0P1koQ2UpLmVtcHR5PSExOlkoQ2UpLnVudXNlZFRva2Vucy5wdXNoKHFuKSxCbihxbixJdCxDZSkpOkNlLl9zdHJpY3QmJiFJdCYmWShDZSkudW51c2VkVG9rZW5zLnB1c2gocW4pO1koQ2UpLmNoYXJzTGVmdE92ZXI9Um8tTWEsS2UubGVuZ3RoPjAmJlkoQ2Up''@;'; put 'put ''LnVudXNlZElucHV0LnB1c2goS2UpLENlLl9hW3BuXTw9MTImJiEwPT09WShDZSkuYmlnSG91ciYmQ2UuX2FbcG5dPjAmJihZKENlKS5iaWdIb3VyPXZvaWQgMCksWShDZSkucGFyc2VkRGF0ZVBhcnRzPUNlLl9hLnNsaWNlKDApLFkoQ2UpLm1lcmlkaWVtPUNlLl9tZXJpZGllbSxDZS5fYVtw''@;'; put 'put ''bl09ZnVuY3Rpb24gZDQoQ2UsS2UscHQpe3ZhciBJdDtyZXR1cm4gbnVsbD09cHQ/S2U6bnVsbCE9Q2UubWVyaWRpZW1Ib3VyP0NlLm1lcmlkaWVtSG91cihLZSxwdCk6KG51bGwhPUNlLmlzUE0mJigoSXQ9Q2UuaXNQTShwdCkpJiZLZTwxMiYmKEtlKz0xMiksIUl0JiYxMj09PUtlJiYoS2U9''@;'; put 'put ''MCkpLEtlKX0oQ2UuX2xvY2FsZSxDZS5fYVtwbl0sQ2UuX21lcmlkaWVtKSxudWxsIT09KGZzPVkoQ2UpLmVyYSkmJihDZS5fYVtqdF09Q2UuX2xvY2FsZS5lcmFzQ29udmVydFllYXIoZnMsQ2UuX2FbanRdKSksYmwoQ2UpLEJvKENlKX1lbHNlIFNzKENlKTtlbHNlIFRvKENlKX1mdW5jdGlv''@;'; put 'put ''biBudihDZSl7dmFyIEtlPUNlLl9pLHB0PUNlLl9mO3JldHVybiBDZS5fbG9jYWxlPUNlLl9sb2NhbGV8fHJvKENlLl9sKSxudWxsPT09S2V8fHZvaWQgMD09PXB0JiYiIj09PUtlP0ooe251bGxJbnB1dDohMH0pOigic3RyaW5nIj09dHlwZW9mIEtlJiYoQ2UuX2k9S2U9Q2UuX2xvY2FsZS5w''@;'; put 'put ''cmVwYXJzZShLZSkpLF9lKEtlKT9uZXcgbWUoQm8oS2UpKTooTihLZSk/Q2UuX2Q9S2U6QihwdCk/ZnVuY3Rpb24gcTAoQ2Upe3ZhciBLZSxwdCxJdCxobixxbixyaSxSbz0hMSxNYT1DZS5fZi5sZW5ndGg7aWYoMD09PU1hKXJldHVybiBZKENlKS5pbnZhbGlkRm9ybWF0PSEwLHZvaWQoQ2Uu''@;'; put 'put ''X2Q9bmV3IERhdGUoTmFOKSk7Zm9yKGhuPTA7aG48TWE7aG4rKylxbj0wLHJpPSExLEtlPWxlKHt9LENlKSxudWxsIT1DZS5fdXNlVVRDJiYoS2UuX3VzZVVUQz1DZS5fdXNlVVRDKSxLZS5fZj1DZS5fZltobl0sdTQoS2UpLGVlKEtlKSYmKHJpPSEwKSxxbis9WShLZSkuY2hhcnNMZWZ0T3Zl''@;'; put 'put ''cixxbis9MTAqWShLZSkudW51c2VkVG9rZW5zLmxlbmd0aCxZKEtlKS5zY29yZT1xbixSbz9xbjxJdCYmKEl0PXFuLHB0PUtlKToobnVsbD09SXR8fHFuPEl0fHxyaSkmJihJdD1xbixwdD1LZSxyaSYmKFJvPSEwKSk7SyhDZSxwdHx8S2UpfShDZSk6cHQ/dTQoQ2UpOmZ1bmN0aW9uIEl3KENl''@;'; put 'put ''KXt2YXIgS2U9Q2UuX2k7TyhLZSk/Q2UuX2Q9bmV3IERhdGUoeS5ub3coKSk6TihLZSk/Q2UuX2Q9bmV3IERhdGUoS2UudmFsdWVPZigpKToic3RyaW5nIj09dHlwZW9mIEtlP2Z1bmN0aW9uIG9vKENlKXt2YXIgS2U9T2MuZXhlYyhDZS5faSk7bnVsbD09PUtlPyhUbyhDZSksITE9PT1DZS5f''@;'; put 'put ''aXNWYWxpZCYmKGRlbGV0ZSBDZS5faXNWYWxpZCxTcyhDZSksITE9PT1DZS5faXNWYWxpZCYmKGRlbGV0ZSBDZS5faXNWYWxpZCxDZS5fc3RyaWN0P0NlLl9pc1ZhbGlkPSExOnkuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soQ2UpKSkpOkNlLl9kPW5ldyBEYXRlKCtLZVsxXSl9KENlKTpCKEtl''@;'; put 'put ''KT8oQ2UuX2E9TChLZS5zbGljZSgwKSxmdW5jdGlvbihwdCl7cmV0dXJuIHBhcnNlSW50KHB0LDEwKX0pLGJsKENlKSk6dyhLZSk/ZnVuY3Rpb24gcHUoQ2Upe2lmKCFDZS5fZCl7dmFyIEtlPXJ0KENlLl9pKTtDZS5fYT1MKFtLZS55ZWFyLEtlLm1vbnRoLHZvaWQgMD09PUtlLmRheT9LZS5k''@;'; put 'put ''YXRlOktlLmRheSxLZS5ob3VyLEtlLm1pbnV0ZSxLZS5zZWNvbmQsS2UubWlsbGlzZWNvbmRdLGZ1bmN0aW9uKEl0KXtyZXR1cm4gSXQmJnBhcnNlSW50KEl0LDEwKX0pLGJsKENlKX19KENlKTp6KEtlKT9DZS5fZD1uZXcgRGF0ZShLZSk6eS5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhDZSl9''@;'; put 'put ''KENlKSxlZShDZSl8fChDZS5fZD1udWxsKSxDZSkpfWZ1bmN0aW9uIHJ2KENlLEtlLHB0LEl0LGhuKXt2YXIgcW49e307cmV0dXJuKCEwPT09S2V8fCExPT09S2UpJiYoSXQ9S2UsS2U9dm9pZCAwKSwoITA9PT1wdHx8ITE9PT1wdCkmJihJdD1wdCxwdD12b2lkIDApLCh3KENlKSYmRihDZSl8''@;'; put 'put ''fEIoQ2UpJiYwPT09Q2UubGVuZ3RoKSYmKENlPXZvaWQgMCkscW4uX2lzQU1vbWVudE9iamVjdD0hMCxxbi5fdXNlVVRDPXFuLl9pc1VUQz1obixxbi5fbD1wdCxxbi5faT1DZSxxbi5fZj1LZSxxbi5fc3RyaWN0PUl0LGZ1bmN0aW9uIFBjKENlKXt2YXIgS2U9bmV3IG1lKEJvKG52KENlKSkp''@;'; put 'put ''O3JldHVybiBLZS5fbmV4dERheSYmKEtlLmFkZCgxLCJkIiksS2UuX25leHREYXk9dm9pZCAwKSxLZX0ocW4pfWZ1bmN0aW9uIG9sKENlLEtlLHB0LEl0KXtyZXR1cm4gcnYoQ2UsS2UscHQsSXQsITEpfXkuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2s9U2UoInZhbHVlIHByb3ZpZGVkIGlzIG5v''@;'; put 'put ''dCBpbiBhIHJlY29nbml6ZWQgUkZDMjgyMiBvciBJU08gZm9ybWF0LiBtb21lbnQgY29uc3RydWN0aW9uIGZhbGxzIGJhY2sgdG8ganMgRGF0ZSgpLCB3aGljaCBpcyBub3QgcmVsaWFibGUgYWNyb3NzIGFsbCBicm93c2VycyBhbmQgdmVyc2lvbnMuIE5vbiBSRkMyODIyL0lTTyBkYXRlIGZv''@;'; put 'put ''cm1hdHMgYXJlIGRpc2NvdXJhZ2VkLiBQbGVhc2UgcmVmZXIgdG8gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9qcy1kYXRlLyBmb3IgbW9yZSBpbmZvLiIsZnVuY3Rpb24oQ2Upe0NlLl9kPW5ldyBEYXRlKENlLl9pKyhDZS5fdXNlVVRDPyIgVVRDIjoiIikpfSkseS5J''@;'; put 'put ''U09fODYwMT1mdW5jdGlvbigpe30seS5SRkNfMjgyMj1mdW5jdGlvbigpe307dmFyIEUzPVNlKCJtb21lbnQoKS5taW4gaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5tYXggaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LyIsZnVuY3Rpb24o''@;'; put 'put ''KXt2YXIgQ2U9b2wuYXBwbHkobnVsbCxhcmd1bWVudHMpO3JldHVybiB0aGlzLmlzVmFsaWQoKSYmQ2UuaXNWYWxpZCgpP0NlPHRoaXM/dGhpczpDZTpKKCl9KSxSdz1TZSgibW9tZW50KCkubWF4IGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWluIGluc3RlYWQuIGh0dHA6Ly9tb21lbnRq''@;'; put 'put ''cy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvbWluLW1heC8iLGZ1bmN0aW9uKCl7dmFyIENlPW9sLmFwcGx5KG51bGwsYXJndW1lbnRzKTtyZXR1cm4gdGhpcy5pc1ZhbGlkKCkmJkNlLmlzVmFsaWQoKT9DZT50aGlzP3RoaXM6Q2U6SigpfSk7ZnVuY3Rpb24gUWQoQ2UsS2Upe3ZhciBwdCxJdDtp''@;'; put 'put ''ZigxPT09S2UubGVuZ3RoJiZCKEtlWzBdKSYmKEtlPUtlWzBdKSwhS2UubGVuZ3RoKXJldHVybiBvbCgpO2ZvcihwdD1LZVswXSxJdD0xO0l0PEtlLmxlbmd0aDsrK0l0KSghS2VbSXRdLmlzVmFsaWQoKXx8S2VbSXRdW0NlXShwdCkpJiYocHQ9S2VbSXRdKTtyZXR1cm4gcHR9dmFyIGhpPVsi''@;'; put 'put ''eWVhciIsInF1YXJ0ZXIiLCJtb250aCIsIndlZWsiLCJkYXkiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwibWlsbGlzZWNvbmQiXTtmdW5jdGlvbiBsZihDZSl7dmFyIEtlPXJ0KENlKSxwdD1LZS55ZWFyfHwwLEl0PUtlLnF1YXJ0ZXJ8fDAsaG49S2UubW9udGh8fDAscW49S2Uud2Vla3x8''@;'; put 'put ''S2UuaXNvV2Vla3x8MCxyaT1LZS5kYXl8fDAsUm89S2UuaG91cnx8MCxNYT1LZS5taW51dGV8fDAsZnM9S2Uuc2Vjb25kfHwwLEh1PUtlLm1pbGxpc2Vjb25kfHwwO3RoaXMuX2lzVmFsaWQ9ZnVuY3Rpb24gbjUoQ2Upe3ZhciBLZSxJdCxwdD0hMSxobj1oaS5sZW5ndGg7Zm9yKEtlIGluIENl''@;'; put 'put ''KWlmKFAoQ2UsS2UpJiYoLTE9PT1ZaS5jYWxsKGhpLEtlKXx8bnVsbCE9Q2VbS2VdJiZpc05hTihDZVtLZV0pKSlyZXR1cm4hMTtmb3IoSXQ9MDtJdDxobjsrK0l0KWlmKENlW2hpW0l0XV0pe2lmKHB0KXJldHVybiExO3BhcnNlRmxvYXQoQ2VbaGlbSXRdXSkhPT1UdChDZVtoaVtJdF1dKSYm''@;'; put 'put ''KHB0PSEwKX1yZXR1cm4hMH0oS2UpLHRoaXMuX21pbGxpc2Vjb25kcz0rSHUrMWUzKmZzKzZlNCpNYSsxZTMqUm8qNjAqNjAsdGhpcy5fZGF5cz0rcmkrNypxbix0aGlzLl9tb250aHM9K2huKzMqSXQrMTIqcHQsdGhpcy5fZGF0YT17fSx0aGlzLl9sb2NhbGU9cm8oKSx0aGlzLl9idWJibGUo''@;'; put 'put ''KX1mdW5jdGlvbiBvNShDZSl7cmV0dXJuIENlIGluc3RhbmNlb2YgbGZ9ZnVuY3Rpb24gaDQoQ2Upe3JldHVybiBDZTwwPy0xKk1hdGgucm91bmQoLTEqQ2UpOk1hdGgucm91bmQoQ2UpfWZ1bmN0aW9uIEkxKENlLEtlKXtzZShDZSwwLDAsZnVuY3Rpb24oKXt2YXIgcHQ9dGhpcy51dGNPZmZz''@;'; put 'put ''ZXQoKSxJdD0iKyI7cmV0dXJuIHB0PDAmJihwdD0tcHQsSXQ9Ii0iKSxJdCtFKH5+KHB0LzYwKSwyKStLZStFKH5+cHQlNjAsMil9KX1JMSgiWiIsIjoiKSxJMSgiWloiLCIiKSxMbigiWiIsUmkpLExuKCJaWiIsUmkpLGh0KFsiWiIsIlpaIl0sZnVuY3Rpb24oQ2UsS2UscHQpe3B0Ll91c2VV''@;'; put 'put ''VEM9ITAscHQuX3R6bT1sZChSaSxDZSl9KTt2YXIgaXY9LyhbXCtcLV18XGRcZCkvZ2k7ZnVuY3Rpb24gbGQoQ2UsS2Upe3ZhciBobixxbixwdD0oS2V8fCIiKS5tYXRjaChDZSk7cmV0dXJuIG51bGw9PT1wdD9udWxsOjA9PT0ocW49NjAqKGhuPSgocHRbcHQubGVuZ3RoLTFdfHxbXSkrIiIp''@;'; put 'put ''Lm1hdGNoKGl2KXx8WyItIiwwLDBdKVsxXStUdChoblsyXSkpPzA6IisiPT09aG5bMF0/cW46LXFufWZ1bmN0aW9uIHg2KENlLEtlKXt2YXIgcHQsSXQ7cmV0dXJuIEtlLl9pc1VUQz8ocHQ9S2UuY2xvbmUoKSxJdD0oX2UoQ2UpfHxOKENlKT9DZS52YWx1ZU9mKCk6b2woQ2UpLnZhbHVlT2Yo''@;'; put 'put ''KSktcHQudmFsdWVPZigpLHB0Ll9kLnNldFRpbWUocHQuX2QudmFsdWVPZigpK0l0KSx5LnVwZGF0ZU9mZnNldChwdCwhMSkscHQpOm9sKENlKS5sb2NhbCgpfWZ1bmN0aW9uIGd1KENlKXtyZXR1cm4tTWF0aC5yb3VuZChDZS5fZC5nZXRUaW1lem9uZU9mZnNldCgpKX1mdW5jdGlvbiBfMCgp''@;'; put 'put ''e3JldHVybiEhdGhpcy5pc1ZhbGlkKCkmJnRoaXMuX2lzVVRDJiYwPT09dGhpcy5fb2Zmc2V0fXkudXBkYXRlT2Zmc2V0PWZ1bmN0aW9uKCl7fTt2YXIgRTY9L14oLXxcKyk/KD86KFxkKilbLiBdKT8oXGQrKTooXGQrKSg/OjooXGQrKShcLlxkKik/KT8kLyxLaD0vXigtfFwrKT9QKD86KFst''@;'; put 'put ''K10/WzAtOSwuXSopWSk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopVyk/KD86KFstK10/WzAtOSwuXSopRCk/KD86VCg/OihbLStdP1swLTksLl0qKUgpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVMpPyk/JC87ZnVuY3Rpb24gS2woQ2Us''@;'; put 'put ''S2Upe3ZhciBobixxbixyaSxwdD1DZSxJdD1udWxsO3JldHVybiBvNShDZSk/cHQ9e21zOkNlLl9taWxsaXNlY29uZHMsZDpDZS5fZGF5cyxNOkNlLl9tb250aHN9OnooQ2UpfHwhaXNOYU4oK0NlKT8ocHQ9e30sS2U/cHRbS2VdPStDZTpwdC5taWxsaXNlY29uZHM9K0NlKTooSXQ9RTYuZXhl''@;'; put 'put ''YyhDZSkpPyhobj0iLSI9PT1JdFsxXT8tMToxLHB0PXt5OjAsZDpUdChJdFtjbl0pKmhuLGg6VHQoSXRbcG5dKSpobixtOlR0KEl0W0lpXSkqaG4sczpUdChJdFtYdF0pKmhuLG1zOlR0KGg0KDFlMypJdFtlbl0pKSpobn0pOihJdD1LaC5leGVjKENlKSk/cHQ9e3k6UjEoSXRbMl0saG49Ii0i''@;'; put 'put ''PT09SXRbMV0/LTE6MSksTTpSMShJdFszXSxobiksdzpSMShJdFs0XSxobiksZDpSMShJdFs1XSxobiksaDpSMShJdFs2XSxobiksbTpSMShJdFs3XSxobiksczpSMShJdFs4XSxobil9Om51bGw9PXB0P3B0PXt9OiJvYmplY3QiPT10eXBlb2YgcHQmJigiZnJvbSJpbiBwdHx8InRvImluIHB0''@;'; put 'put ''KSYmKHJpPWZ1bmN0aW9uIGVzKENlLEtlKXt2YXIgcHQ7cmV0dXJuIENlLmlzVmFsaWQoKSYmS2UuaXNWYWxpZCgpPyhLZT14NihLZSxDZSksQ2UuaXNCZWZvcmUoS2UpP3B0PUkwKENlLEtlKTooKHB0PUkwKEtlLENlKSkubWlsbGlzZWNvbmRzPS1wdC5taWxsaXNlY29uZHMscHQubW9udGhz''@;'; put 'put ''PS1wdC5tb250aHMpLHB0KTp7bWlsbGlzZWNvbmRzOjAsbW9udGhzOjB9fShvbChwdC5mcm9tKSxvbChwdC50bykpLChwdD17fSkubXM9cmkubWlsbGlzZWNvbmRzLHB0Lk09cmkubW9udGhzKSxxbj1uZXcgbGYocHQpLG81KENlKSYmUChDZSwiX2xvY2FsZSIpJiYocW4uX2xvY2FsZT1DZS5f''@;'; put 'put ''bG9jYWxlKSxvNShDZSkmJlAoQ2UsIl9pc1ZhbGlkIikmJihxbi5faXNWYWxpZD1DZS5faXNWYWxpZCkscW59ZnVuY3Rpb24gUjEoQ2UsS2Upe3ZhciBwdD1DZSYmcGFyc2VGbG9hdChDZS5yZXBsYWNlKCIsIiwiLiIpKTtyZXR1cm4oaXNOYU4ocHQpPzA6cHQpKktlfWZ1bmN0aW9uIEkwKENl''@;'; put 'put ''LEtlKXt2YXIgcHQ9e307cmV0dXJuIHB0Lm1vbnRocz1LZS5tb250aCgpLUNlLm1vbnRoKCkrMTIqKEtlLnllYXIoKS1DZS55ZWFyKCkpLENlLmNsb25lKCkuYWRkKHB0Lm1vbnRocywiTSIpLmlzQWZ0ZXIoS2UpJiYtLXB0Lm1vbnRocyxwdC5taWxsaXNlY29uZHM9K0tlLStDZS5jbG9uZSgp''@;'; put 'put ''LmFkZChwdC5tb250aHMsIk0iKSxwdH1mdW5jdGlvbiBxaChDZSxLZSl7cmV0dXJuIGZ1bmN0aW9uKHB0LEl0KXt2YXIgcW47cmV0dXJuIG51bGwhPT1JdCYmIWlzTmFOKCtJdCkmJihWKEtlLCJtb21lbnQoKS4iK0tlKyIocGVyaW9kLCBudW1iZXIpIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1''@;'; put 'put ''c2UgbW9tZW50KCkuIitLZSsiKG51bWJlciwgcGVyaW9kKS4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvYWRkLWludmVydGVkLXBhcmFtLyBmb3IgbW9yZSBpbmZvLiIpLHFuPXB0LHB0PUl0LEl0PXFuKSxBMyh0aGlzLEtsKHB0LEl0KSxDZSksdGhpc319ZnVu''@;'; put 'put ''Y3Rpb24gQTMoQ2UsS2UscHQsSXQpe3ZhciBobj1LZS5fbWlsbGlzZWNvbmRzLHFuPWg0KEtlLl9kYXlzKSxyaT1oNChLZS5fbW9udGhzKTtDZS5pc1ZhbGlkKCkmJihJdD1JdD8/ITAscmkmJmZ1KENlLEpyKENlLCJNb250aCIpK3JpKnB0KSxxbiYmQmkoQ2UsIkRhdGUiLEpyKENlLCJEYXRl''@;'; put 'put ''IikrcW4qcHQpLGhuJiZDZS5fZC5zZXRUaW1lKENlLl9kLnZhbHVlT2YoKStobipwdCksSXQmJnkudXBkYXRlT2Zmc2V0KENlLHFufHxyaSkpfUtsLmZuPWxmLnByb3RvdHlwZSxLbC5pbnZhbGlkPWZ1bmN0aW9uIGUwKCl7cmV0dXJuIEtsKE5hTil9O3ZhciBUNj1xaCgxLCJhZGQiKSxzNT1x''@;'; put 'put ''aCgtMSwic3VidHJhY3QiKTtmdW5jdGlvbiBrMyhDZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBDZXx8Q2UgaW5zdGFuY2VvZiBTdHJpbmd9ZnVuY3Rpb24gJHMoQ2Upe3JldHVybiBfZShDZSl8fE4oQ2UpfHxrMyhDZSl8fHooQ2UpfHxmdW5jdGlvbiBQdyhDZSl7dmFyIEtlPUIoQ2UpLHB0''@;'; put 'put ''PSExO3JldHVybiBLZSYmKHB0PTA9PT1DZS5maWx0ZXIoZnVuY3Rpb24oSXQpe3JldHVybiF6KEl0KSYmazMoQ2UpfSkubGVuZ3RoKSxLZSYmcHR9KENlKXx8ZnVuY3Rpb24gWm4oQ2Upe3ZhciBobixLZT13KENlKSYmIUYoQ2UpLHB0PSExLEl0PVsieWVhcnMiLCJ5ZWFyIiwieSIsIm1vbnRo''@;'; put 'put ''cyIsIm1vbnRoIiwiTSIsImRheXMiLCJkYXkiLCJkIiwiZGF0ZXMiLCJkYXRlIiwiRCIsImhvdXJzIiwiaG91ciIsImgiLCJtaW51dGVzIiwibWludXRlIiwibSIsInNlY29uZHMiLCJzZWNvbmQiLCJzIiwibWlsbGlzZWNvbmRzIiwibWlsbGlzZWNvbmQiLCJtcyJdLHJpPUl0Lmxlbmd0aDtm''@;'; put 'put ''b3IoaG49MDtobjxyaTtobis9MSlwdD1wdHx8UChDZSxJdFtobl0pO3JldHVybiBLZSYmcHR9KENlKXx8bnVsbD09Q2V9ZnVuY3Rpb24gRDMoQ2UsS2Upe2lmKENlLmRhdGUoKTxLZS5kYXRlKCkpcmV0dXJuLUQzKEtlLENlKTt2YXIgcHQ9MTIqKEtlLnllYXIoKS1DZS55ZWFyKCkpKyhLZS5t''@;'; put 'put ''b250aCgpLUNlLm1vbnRoKCkpLEl0PUNlLmNsb25lKCkuYWRkKHB0LCJtb250aHMiKTtyZXR1cm4tKHB0KyhLZS1JdDwwPyhLZS1JdCkvKEl0LUNlLmNsb25lKCkuYWRkKHB0LTEsIm1vbnRocyIpKTooS2UtSXQpLyhDZS5jbG9uZSgpLmFkZChwdCsxLCJtb250aHMiKS1JdCkpKXx8MH1mdW5j''@;'; put 'put ''dGlvbiBxbyhDZSl7dmFyIEtlO3JldHVybiB2b2lkIDA9PT1DZT90aGlzLl9sb2NhbGUuX2FiYnI6KG51bGwhPShLZT1ybyhDZSkpJiYodGhpcy5fbG9jYWxlPUtlKSx0aGlzKX15LmRlZmF1bHRGb3JtYXQ9IllZWVktTU0tRERUSEg6bW06c3NaIix5LmRlZmF1bHRGb3JtYXRVdGM9IllZWVkt''@;'; put 'put ''TU0tRERUSEg6bW06c3NbWl0iO3ZhciBOcj1TZSgibW9tZW50KCkubGFuZygpIGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQsIHVzZSBtb21lbnQoKS5sb2NhbGVEYXRhKCkgdG8gZ2V0IHRoZSBsYW5ndWFnZSBjb25maWd1cmF0aW9uLiBVc2UgbW9tZW50KCkubG9jYWxlKCkgdG8gY2hhbmdlIGxh''@;'; put 'put ''bmd1YWdlcy4iLGZ1bmN0aW9uKENlKXtyZXR1cm4gdm9pZCAwPT09Q2U/dGhpcy5sb2NhbGVEYXRhKCk6dGhpcy5sb2NhbGUoQ2UpfSk7ZnVuY3Rpb24gaGYoKXtyZXR1cm4gdGhpcy5fbG9jYWxlfXZhciBraT02ZTQsbTQ9NjAqa2ksRXI9MzUwNjMyOCptNDtmdW5jdGlvbiBhbChDZSxLZSl7''@;'; put 'put ''cmV0dXJuKENlJUtlK0tlKSVLZX1mdW5jdGlvbiBWYShDZSxLZSxwdCl7cmV0dXJuIENlPDEwMCYmQ2U+PTA/bmV3IERhdGUoQ2UrNDAwLEtlLHB0KS1FcjpuZXcgRGF0ZShDZSxLZSxwdCkudmFsdWVPZigpfWZ1bmN0aW9uIE1jKENlLEtlLHB0KXtyZXR1cm4gQ2U8MTAwJiZDZT49MD9EYXRl''@;'; put 'put ''LlVUQyhDZSs0MDAsS2UscHQpLUVyOkRhdGUuVVRDKENlLEtlLHB0KX1mdW5jdGlvbiBJMyhDZSxLZSl7cmV0dXJuIEtlLmVyYXNBYmJyUmVnZXgoQ2UpfWZ1bmN0aW9uIGNjKCl7dmFyIGhuLHFuLHJpLFJvLE1hLENlPVtdLEtlPVtdLHB0PVtdLEl0PVtdLGZzPXRoaXMuZXJhcygpO2Zvciho''@;'; put 'put ''bj0wLHFuPWZzLmxlbmd0aDtobjxxbjsrK2huKXJpPW5pKGZzW2huXS5uYW1lKSxSbz1uaShmc1tobl0uYWJiciksTWE9bmkoZnNbaG5dLm5hcnJvdyksS2UucHVzaChyaSksQ2UucHVzaChSbykscHQucHVzaChNYSksSXQucHVzaChyaSksSXQucHVzaChSbyksSXQucHVzaChNYSk7dGhpcy5f''@;'; put 'put ''ZXJhc1JlZ2V4PW5ldyBSZWdFeHAoIl4oIitJdC5qb2luKCJ8IikrIikiLCJpIiksdGhpcy5fZXJhc05hbWVSZWdleD1uZXcgUmVnRXhwKCJeKCIrS2Uuam9pbigifCIpKyIpIiwiaSIpLHRoaXMuX2VyYXNBYmJyUmVnZXg9bmV3IFJlZ0V4cCgiXigiK0NlLmpvaW4oInwiKSsiKSIsImkiKSx0''@;'; put 'put ''aGlzLl9lcmFzTmFycm93UmVnZXg9bmV3IFJlZ0V4cCgiXigiK3B0LmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBjZChDZSxLZSl7c2UoMCxbQ2UsQ2UubGVuZ3RoXSwwLEtlKX1mdW5jdGlvbiB2dihDZSxLZSxwdCxJdCxobil7dmFyIHFuO3JldHVybiBudWxsPT1DZT9SdSh0aGlzLEl0''@;'; put 'put ''LGhuKS55ZWFyOihLZT4ocW49RnIoQ2UsSXQsaG4pKSYmKEtlPXFuKSxXdy5jYWxsKHRoaXMsQ2UsS2UscHQsSXQsaG4pKX1mdW5jdGlvbiBXdyhDZSxLZSxwdCxJdCxobil7dmFyIHFuPU5vKENlLEtlLHB0LEl0LGhuKSxyaT1Ycihxbi55ZWFyLDAscW4uZGF5T2ZZZWFyKTtyZXR1cm4gdGhp''@;'; put 'put ''cy55ZWFyKHJpLmdldFVUQ0Z1bGxZZWFyKCkpLHRoaXMubW9udGgocmkuZ2V0VVRDTW9udGgoKSksdGhpcy5kYXRlKHJpLmdldFVUQ0RhdGUoKSksdGhpc31zZSgiTiIsMCwwLCJlcmFBYmJyIiksc2UoIk5OIiwwLDAsImVyYUFiYnIiKSxzZSgiTk5OIiwwLDAsImVyYUFiYnIiKSxzZSgiTk5O''@;'; put 'put ''TiIsMCwwLCJlcmFOYW1lIiksc2UoIk5OTk5OIiwwLDAsImVyYU5hcnJvdyIpLHNlKCJ5IixbInkiLDFdLCJ5byIsImVyYVllYXIiKSxzZSgieSIsWyJ5eSIsMl0sMCwiZXJhWWVhciIpLHNlKCJ5IixbInl5eSIsM10sMCwiZXJhWWVhciIpLHNlKCJ5IixbInl5eXkiLDRdLDAsImVyYVllYXIi''@;'; put 'put ''KSxMbigiTiIsSTMpLExuKCJOTiIsSTMpLExuKCJOTk4iLEkzKSxMbigiTk5OTiIsZnVuY3Rpb24gVXcoQ2UsS2Upe3JldHVybiBLZS5lcmFzTmFtZVJlZ2V4KENlKX0pLExuKCJOTk5OTiIsZnVuY3Rpb24gUDYoQ2UsS2Upe3JldHVybiBLZS5lcmFzTmFycm93UmVnZXgoQ2UpfSksaHQoWyJO''@;'; put 'put ''IiwiTk4iLCJOTk4iLCJOTk5OIiwiTk5OTk4iXSxmdW5jdGlvbihDZSxLZSxwdCxJdCl7dmFyIGhuPXB0Ll9sb2NhbGUuZXJhc1BhcnNlKENlLEl0LHB0Ll9zdHJpY3QpO2huP1kocHQpLmVyYT1objpZKHB0KS5pbnZhbGlkRXJhPUNlfSksTG4oInkiLGFpKSxMbigieXkiLGFpKSxMbigieXl5''@;'; put 'put ''IixhaSksTG4oInl5eXkiLGFpKSxMbigieW8iLGZ1bmN0aW9uIFIzKENlLEtlKXtyZXR1cm4gS2UuX2VyYVllYXJPcmRpbmFsUmVnZXh8fGFpfSksaHQoWyJ5IiwieXkiLCJ5eXkiLCJ5eXl5Il0sanQpLGh0KFsieW8iXSxmdW5jdGlvbihDZSxLZSxwdCxJdCl7dmFyIGhuO3B0Ll9sb2NhbGUu''@;'; put 'put ''X2VyYVllYXJPcmRpbmFsUmVnZXgmJihobj1DZS5tYXRjaChwdC5fbG9jYWxlLl9lcmFZZWFyT3JkaW5hbFJlZ2V4KSksS2VbanRdPXB0Ll9sb2NhbGUuZXJhWWVhck9yZGluYWxQYXJzZT9wdC5fbG9jYWxlLmVyYVllYXJPcmRpbmFsUGFyc2UoQ2UsaG4pOnBhcnNlSW50KENlLDEwKX0pLHNl''@;'; put 'put ''KDAsWyJnZyIsMl0sMCxmdW5jdGlvbigpe3JldHVybiB0aGlzLndlZWtZZWFyKCklMTAwfSksc2UoMCxbIkdHIiwyXSwwLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNvV2Vla1llYXIoKSUxMDB9KSxjZCgiZ2dnZyIsIndlZWtZZWFyIiksY2QoImdnZ2dnIiwid2Vla1llYXIiKSxjZCgiR0dH''@;'; put 'put ''RyIsImlzb1dlZWtZZWFyIiksY2QoIkdHR0dHIiwiaXNvV2Vla1llYXIiKSxMbigiRyIsUXQpLExuKCJnIixRdCksTG4oIkdHIix0dCxNdCksTG4oImdnIix0dCxNdCksTG4oIkdHR0ciLFJ0LGl0KSxMbigiZ2dnZyIsUnQsaXQpLExuKCJHR0dHRyIsUHQsJGUpLExuKCJnZ2dnZyIsUHQsJGUp''@;'; put 'put ''LHh0KFsiZ2dnZyIsImdnZ2dnIiwiR0dHRyIsIkdHR0dHIl0sZnVuY3Rpb24oQ2UsS2UscHQsSXQpe0tlW0l0LnN1YnN0cigwLDIpXT1UdChDZSl9KSx4dChbImdnIiwiR0ciXSxmdW5jdGlvbihDZSxLZSxwdCxJdCl7S2VbSXRdPXkucGFyc2VUd29EaWdpdFllYXIoQ2UpfSksc2UoIlEiLDAs''@;'; put 'put ''IlFvIiwicXVhcnRlciIpLExuKCJRIix5dCksaHQoIlEiLGZ1bmN0aW9uKENlLEtlKXtLZVtkaV09MyooVHQoQ2UpLTEpfSksc2UoIkQiLFsiREQiLDJdLCJEbyIsImRhdGUiKSxMbigiRCIsdHQsUHIpLExuKCJERCIsdHQsTXQpLExuKCJEbyIsZnVuY3Rpb24oQ2UsS2Upe3JldHVybiBDZT9L''@;'; put 'put ''ZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZXx8S2UuX29yZGluYWxQYXJzZTpLZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnR9KSxodChbIkQiLCJERCJdLGNuKSxodCgiRG8iLGZ1bmN0aW9uKENlLEtlKXtLZVtjbl09VHQoQ2UubWF0Y2godHQpWzBdKX0pO3ZhciBYMD1RcigiRGF0''@;'; put 'put ''ZSIsITApO3NlKCJEREQiLFsiRERERCIsM10sIkRERG8iLCJkYXlPZlllYXIiKSxMbigiREREIixxdCksTG4oIkREREQiLER0KSxodChbIkRERCIsIkREREQiXSxmdW5jdGlvbihDZSxLZSxwdCl7cHQuX2RheU9mWWVhcj1UdChDZSl9KSxzZSgibSIsWyJtbSIsMl0sMCwibWludXRlIiksTG4o''@;'; put 'put ''Im0iLHR0LFp0KSxMbigibW0iLHR0LE10KSxodChbIm0iLCJtbSJdLElpKTt2YXIgZ2Y9UXIoIk1pbnV0ZXMiLCExKTtzZSgicyIsWyJzcyIsMl0sMCwic2Vjb25kIiksTG4oInMiLHR0LFp0KSxMbigic3MiLHR0LE10KSxodChbInMiLCJzcyJdLFh0KTt2YXIgdGgsSDYsbWY9UXIoIlNlY29u''@;'; put 'put ''ZHMiLCExKTtmb3Ioc2UoIlMiLDAsMCxmdW5jdGlvbigpe3JldHVybn5+KHRoaXMubWlsbGlzZWNvbmQoKS8xMDApfSksc2UoMCxbIlNTIiwyXSwwLGZ1bmN0aW9uKCl7cmV0dXJufn4odGhpcy5taWxsaXNlY29uZCgpLzEwKX0pLHNlKDAsWyJTU1MiLDNdLDAsIm1pbGxpc2Vjb25kIiksc2Uo''@;'; put 'put ''MCxbIlNTU1MiLDRdLDAsZnVuY3Rpb24oKXtyZXR1cm4gMTAqdGhpcy5taWxsaXNlY29uZCgpfSksc2UoMCxbIlNTU1NTIiw1XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIDEwMCp0aGlzLm1pbGxpc2Vjb25kKCl9KSxzZSgwLFsiU1NTU1NTIiw2XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIDFlMyp0aGlz''@;'; put 'put ''Lm1pbGxpc2Vjb25kKCl9KSxzZSgwLFsiU1NTU1NTUyIsN10sMCxmdW5jdGlvbigpe3JldHVybiAxZTQqdGhpcy5taWxsaXNlY29uZCgpfSksc2UoMCxbIlNTU1NTU1NTIiw4XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIDFlNSp0aGlzLm1pbGxpc2Vjb25kKCl9KSxzZSgwLFsiU1NTU1NTU1NTIiw5''@;'; put 'put ''XSwwLGZ1bmN0aW9uKCl7cmV0dXJuIDFlNip0aGlzLm1pbGxpc2Vjb25kKCl9KSxMbigiUyIscXQseXQpLExuKCJTUyIscXQsTXQpLExuKCJTU1MiLHF0LER0KSx0aD0iU1NTUyI7dGgubGVuZ3RoPD05O3RoKz0iUyIpTG4odGgsYWkpO2Z1bmN0aW9uIEZjKENlLEtlKXtLZVtlbl09VHQoMWUz''@;'; put 'put ''KigiMC4iK0NlKSl9Zm9yKHRoPSJTIjt0aC5sZW5ndGg8PTk7dGgrPSJTIilodCh0aCxGYyk7SDY9UXIoIk1pbGxpc2Vjb25kcyIsITEpLHNlKCJ6IiwwLDAsInpvbmVBYmJyIiksc2UoInp6IiwwLDAsInpvbmVOYW1lIik7dmFyIFVpPW1lLnByb3RvdHlwZTtmdW5jdGlvbiB5dihDZSl7cmV0''@;'; put 'put ''dXJuIENlfVVpLmFkZD1UNixVaS5jYWxlbmRhcj1mdW5jdGlvbiBjNShDZSxLZSl7MT09PWFyZ3VtZW50cy5sZW5ndGgmJihhcmd1bWVudHNbMF0/JHMoYXJndW1lbnRzWzBdKT8oQ2U9YXJndW1lbnRzWzBdLEtlPXZvaWQgMCk6ZnVuY3Rpb24gZjQoQ2Upe3ZhciBobixLZT13KENlKSYmIUYo''@;'; put 'put ''Q2UpLHB0PSExLEl0PVsic2FtZURheSIsIm5leHREYXkiLCJsYXN0RGF5IiwibmV4dFdlZWsiLCJsYXN0V2VlayIsInNhbWVFbHNlIl07Zm9yKGhuPTA7aG48SXQubGVuZ3RoO2huKz0xKXB0PXB0fHxQKENlLEl0W2huXSk7cmV0dXJuIEtlJiZwdH0oYXJndW1lbnRzWzBdKSYmKEtlPWFyZ3Vt''@;'; put 'put ''ZW50c1swXSxDZT12b2lkIDApOihDZT12b2lkIDAsS2U9dm9pZCAwKSk7dmFyIHB0PUNlfHxvbCgpLEl0PXg2KHB0LHRoaXMpLnN0YXJ0T2YoImRheSIpLGhuPXkuY2FsZW5kYXJGb3JtYXQodGhpcyxJdCl8fCJzYW1lRWxzZSIscW49S2UmJihwKEtlW2huXSk/S2VbaG5dLmNhbGwodGhpcyxw''@;'; put 'put ''dCk6S2VbaG5dKTtyZXR1cm4gdGhpcy5mb3JtYXQocW58fHRoaXMubG9jYWxlRGF0YSgpLmNhbGVuZGFyKGhuLHRoaXMsb2wocHQpKSl9LFVpLmNsb25lPWZ1bmN0aW9uIGRmKCl7cmV0dXJuIG5ldyBtZSh0aGlzKX0sVWkuZGlmZj1mdW5jdGlvbiBTYyhDZSxLZSxwdCl7dmFyIEl0LGhuLHFu''@;'; put 'put ''O2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gTmFOO2lmKCEoSXQ9eDYoQ2UsdGhpcykpLmlzVmFsaWQoKSlyZXR1cm4gTmFOO3N3aXRjaChobj02ZTQqKEl0LnV0Y09mZnNldCgpLXRoaXMudXRjT2Zmc2V0KCkpLEtlPV90KEtlKSl7Y2FzZSJ5ZWFyIjpxbj1EMyh0aGlzLEl0KS8xMjticmVh''@;'; put 'put ''aztjYXNlIm1vbnRoIjpxbj1EMyh0aGlzLEl0KTticmVhaztjYXNlInF1YXJ0ZXIiOnFuPUQzKHRoaXMsSXQpLzM7YnJlYWs7Y2FzZSJzZWNvbmQiOnFuPSh0aGlzLUl0KS8xZTM7YnJlYWs7Y2FzZSJtaW51dGUiOnFuPSh0aGlzLUl0KS82ZTQ7YnJlYWs7Y2FzZSJob3VyIjpxbj0odGhpcy1J''@;'; put 'put ''dCkvMzZlNTticmVhaztjYXNlImRheSI6cW49KHRoaXMtSXQtaG4pLzg2NGU1O2JyZWFrO2Nhc2Uid2VlayI6cW49KHRoaXMtSXQtaG4pLzYwNDhlNTticmVhaztkZWZhdWx0OnFuPXRoaXMtSXR9cmV0dXJuIHB0P3FuOldlKHFuKX0sVWkuZW5kT2Y9ZnVuY3Rpb24gWGgoQ2Upe3ZhciBLZSxw''@;'; put 'put ''dDtpZih2b2lkIDA9PT0oQ2U9X3QoQ2UpKXx8Im1pbGxpc2Vjb25kIj09PUNlfHwhdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIHRoaXM7c3dpdGNoKHB0PXRoaXMuX2lzVVRDP01jOlZhLENlKXtjYXNlInllYXIiOktlPXB0KHRoaXMueWVhcigpKzEsMCwxKS0xO2JyZWFrO2Nhc2UicXVhcnRlciI6''@;'; put 'put ''S2U9cHQodGhpcy55ZWFyKCksdGhpcy5tb250aCgpLXRoaXMubW9udGgoKSUzKzMsMSktMTticmVhaztjYXNlIm1vbnRoIjpLZT1wdCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCkrMSwxKS0xO2JyZWFrO2Nhc2Uid2VlayI6S2U9cHQodGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0''@;'; put 'put ''ZSgpLXRoaXMud2Vla2RheSgpKzcpLTE7YnJlYWs7Y2FzZSJpc29XZWVrIjpLZT1wdCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCksdGhpcy5kYXRlKCktKHRoaXMuaXNvV2Vla2RheSgpLTEpKzcpLTE7YnJlYWs7Y2FzZSJkYXkiOmNhc2UiZGF0ZSI6S2U9cHQodGhpcy55ZWFyKCksdGhpcy5t''@;'; put 'put ''b250aCgpLHRoaXMuZGF0ZSgpKzEpLTE7YnJlYWs7Y2FzZSJob3VyIjpLZT10aGlzLl9kLnZhbHVlT2YoKSxLZSs9bTQtYWwoS2UrKHRoaXMuX2lzVVRDPzA6dGhpcy51dGNPZmZzZXQoKSpraSksbTQpLTE7YnJlYWs7Y2FzZSJtaW51dGUiOktlPXRoaXMuX2QudmFsdWVPZigpLEtlKz1raS1h''@;'; put 'put ''bChLZSxraSktMTticmVhaztjYXNlInNlY29uZCI6S2U9dGhpcy5fZC52YWx1ZU9mKCksS2UrPTFlMy1hbChLZSwxZTMpLTF9cmV0dXJuIHRoaXMuX2Quc2V0VGltZShLZSkseS51cGRhdGVPZmZzZXQodGhpcywhMCksdGhpc30sVWkuZm9ybWF0PWZ1bmN0aW9uIGN2KENlKXtDZXx8KENlPXRo''@;'; put 'put ''aXMuaXNVdGMoKT95LmRlZmF1bHRGb3JtYXRVdGM6eS5kZWZhdWx0Rm9ybWF0KTt2YXIgS2U9SmUodGhpcyxDZSk7cmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLnBvc3Rmb3JtYXQoS2UpfSxVaS5mcm9tPWZ1bmN0aW9uIEh3KENlLEtlKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCkmJihfZShDZSkm''@;'; put 'put ''JkNlLmlzVmFsaWQoKXx8b2woQ2UpLmlzVmFsaWQoKSk/S2woe3RvOnRoaXMsZnJvbTpDZX0pLmxvY2FsZSh0aGlzLmxvY2FsZSgpKS5odW1hbml6ZSghS2UpOnRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCl9LFVpLmZyb21Ob3c9ZnVuY3Rpb24gdXYoQ2Upe3JldHVybiB0aGlzLmZy''@;'; put 'put ''b20ob2woKSxDZSl9LFVpLnRvPWZ1bmN0aW9uIE53KENlLEtlKXtyZXR1cm4gdGhpcy5pc1ZhbGlkKCkmJihfZShDZSkmJkNlLmlzVmFsaWQoKXx8b2woQ2UpLmlzVmFsaWQoKSk/S2woe2Zyb206dGhpcyx0bzpDZX0pLmxvY2FsZSh0aGlzLmxvY2FsZSgpKS5odW1hbml6ZSghS2UpOnRoaXMu''@;'; put 'put ''bG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCl9LFVpLnRvTm93PWZ1bmN0aW9uIFZ3KENlKXtyZXR1cm4gdGhpcy50byhvbCgpLENlKX0sVWkuZ2V0PWZ1bmN0aW9uIFZpKENlKXtyZXR1cm4gcCh0aGlzW0NlPV90KENlKV0pP3RoaXNbQ2VdKCk6dGhpc30sVWkuaW52YWxpZEF0PWZ1bmN0aW9u''@;'; put 'put ''IGVoKCl7cmV0dXJuIFkodGhpcykub3ZlcmZsb3d9LFVpLmlzQWZ0ZXI9ZnVuY3Rpb24gQTYoQ2UsS2Upe3ZhciBwdD1fZShDZSk/Q2U6b2woQ2UpO3JldHVybiEoIXRoaXMuaXNWYWxpZCgpfHwhcHQuaXNWYWxpZCgpKSYmKCJtaWxsaXNlY29uZCI9PT0oS2U9X3QoS2UpfHwibWlsbGlzZWNv''@;'; put 'put ''bmQiKT90aGlzLnZhbHVlT2YoKT5wdC52YWx1ZU9mKCk6cHQudmFsdWVPZigpPHRoaXMuY2xvbmUoKS5zdGFydE9mKEtlKS52YWx1ZU9mKCkpfSxVaS5pc0JlZm9yZT1mdW5jdGlvbiBhdihDZSxLZSl7dmFyIHB0PV9lKENlKT9DZTpvbChDZSk7cmV0dXJuISghdGhpcy5pc1ZhbGlkKCl8fCFw''@;'; put 'put ''dC5pc1ZhbGlkKCkpJiYoIm1pbGxpc2Vjb25kIj09PShLZT1fdChLZSl8fCJtaWxsaXNlY29uZCIpP3RoaXMudmFsdWVPZigpPHB0LnZhbHVlT2YoKTp0aGlzLmNsb25lKCkuZW5kT2YoS2UpLnZhbHVlT2YoKTxwdC52YWx1ZU9mKCkpfSxVaS5pc0JldHdlZW49ZnVuY3Rpb24gazYoQ2UsS2Us''@;'; put 'put ''cHQsSXQpe3ZhciBobj1fZShDZSk/Q2U6b2woQ2UpLHFuPV9lKEtlKT9LZTpvbChLZSk7cmV0dXJuISEodGhpcy5pc1ZhbGlkKCkmJmhuLmlzVmFsaWQoKSYmcW4uaXNWYWxpZCgpKSYmKCIoIj09PShJdD1JdHx8IigpIilbMF0/dGhpcy5pc0FmdGVyKGhuLHB0KTohdGhpcy5pc0JlZm9yZSho''@;'; put 'put ''bixwdCkpJiYoIikiPT09SXRbMV0/dGhpcy5pc0JlZm9yZShxbixwdCk6IXRoaXMuaXNBZnRlcihxbixwdCkpfSxVaS5pc1NhbWU9ZnVuY3Rpb24gcDQoQ2UsS2Upe3ZhciBJdCxwdD1fZShDZSk/Q2U6b2woQ2UpO3JldHVybiEoIXRoaXMuaXNWYWxpZCgpfHwhcHQuaXNWYWxpZCgpKSYmKCJt''@;'; put 'put ''aWxsaXNlY29uZCI9PT0oS2U9X3QoS2UpfHwibWlsbGlzZWNvbmQiKT90aGlzLnZhbHVlT2YoKT09PXB0LnZhbHVlT2YoKTooSXQ9cHQudmFsdWVPZigpLHRoaXMuY2xvbmUoKS5zdGFydE9mKEtlKS52YWx1ZU9mKCk8PUl0JiZJdDw9dGhpcy5jbG9uZSgpLmVuZE9mKEtlKS52YWx1ZU9mKCkp''@;'; put 'put ''KX0sVWkuaXNTYW1lT3JBZnRlcj1mdW5jdGlvbiBuMChDZSxLZSl7cmV0dXJuIHRoaXMuaXNTYW1lKENlLEtlKXx8dGhpcy5pc0FmdGVyKENlLEtlKX0sVWkuaXNTYW1lT3JCZWZvcmU9ZnVuY3Rpb24gRncoQ2UsS2Upe3JldHVybiB0aGlzLmlzU2FtZShDZSxLZSl8fHRoaXMuaXNCZWZvcmUo''@;'; put 'put ''Q2UsS2UpfSxVaS5pc1ZhbGlkPWZ1bmN0aW9uIGZmKCl7cmV0dXJuIGVlKHRoaXMpfSxVaS5sYW5nPU5yLFVpLmxvY2FsZT1xbyxVaS5sb2NhbGVEYXRhPWhmLFVpLm1heD1SdyxVaS5taW49RTMsVWkucGFyc2luZ0ZsYWdzPWZ1bmN0aW9uIGp3KCl7cmV0dXJuIEsoe30sWSh0aGlzKSl9LFVp''@;'; put 'put ''LnNldD1mdW5jdGlvbiBJbyhDZSxLZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBDZSl7dmFyIEl0LHB0PWZ1bmN0aW9uIGRuKENlKXt2YXIgcHQsS2U9W107Zm9yKHB0IGluIENlKVAoQ2UscHQpJiZLZS5wdXNoKHt1bml0OnB0LHByaW9yaXR5OlFlW3B0XX0pO3JldHVybiBLZS5zb3J0KGZ1bmN0''@;'; put 'put ''aW9uKEl0LGhuKXtyZXR1cm4gSXQucHJpb3JpdHktaG4ucHJpb3JpdHl9KSxLZX0oQ2U9cnQoQ2UpKSxobj1wdC5sZW5ndGg7Zm9yKEl0PTA7SXQ8aG47SXQrKyl0aGlzW3B0W0l0XS51bml0XShDZVtwdFtJdF0udW5pdF0pfWVsc2UgaWYocCh0aGlzW0NlPV90KENlKV0pKXJldHVybiB0aGlz''@;'; put 'put ''W0NlXShLZSk7cmV0dXJuIHRoaXN9LFVpLnN0YXJ0T2Y9ZnVuY3Rpb24gUWMoQ2Upe3ZhciBLZSxwdDtpZih2b2lkIDA9PT0oQ2U9X3QoQ2UpKXx8Im1pbGxpc2Vjb25kIj09PUNlfHwhdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIHRoaXM7c3dpdGNoKHB0PXRoaXMuX2lzVVRDP01jOlZhLENlKXtj''@;'; put 'put ''YXNlInllYXIiOktlPXB0KHRoaXMueWVhcigpLDAsMSk7YnJlYWs7Y2FzZSJxdWFydGVyIjpLZT1wdCh0aGlzLnllYXIoKSx0aGlzLm1vbnRoKCktdGhpcy5tb250aCgpJTMsMSk7YnJlYWs7Y2FzZSJtb250aCI6S2U9cHQodGhpcy55ZWFyKCksdGhpcy5tb250aCgpLDEpO2JyZWFrO2Nhc2Ui''@;'; put 'put ''d2VlayI6S2U9cHQodGhpcy55ZWFyKCksdGhpcy5tb250aCgpLHRoaXMuZGF0ZSgpLXRoaXMud2Vla2RheSgpKTticmVhaztjYXNlImlzb1dlZWsiOktlPXB0KHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKS0odGhpcy5pc29XZWVrZGF5KCktMSkpO2JyZWFrO2Nhc2UiZGF5''@;'; put 'put ''IjpjYXNlImRhdGUiOktlPXB0KHRoaXMueWVhcigpLHRoaXMubW9udGgoKSx0aGlzLmRhdGUoKSk7YnJlYWs7Y2FzZSJob3VyIjpLZT10aGlzLl9kLnZhbHVlT2YoKSxLZS09YWwoS2UrKHRoaXMuX2lzVVRDPzA6dGhpcy51dGNPZmZzZXQoKSpraSksbTQpO2JyZWFrO2Nhc2UibWludXRlIjpL''@;'; put 'put ''ZT10aGlzLl9kLnZhbHVlT2YoKSxLZS09YWwoS2Usa2kpO2JyZWFrO2Nhc2Uic2Vjb25kIjpLZT10aGlzLl9kLnZhbHVlT2YoKSxLZS09YWwoS2UsMWUzKX1yZXR1cm4gdGhpcy5fZC5zZXRUaW1lKEtlKSx5LnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzfSxVaS5zdWJ0cmFjdD1zNSxVaS50''@;'; put 'put ''b0FycmF5PWZ1bmN0aW9uIGQ1KCl7dmFyIENlPXRoaXM7cmV0dXJuW0NlLnllYXIoKSxDZS5tb250aCgpLENlLmRhdGUoKSxDZS5ob3VyKCksQ2UubWludXRlKCksQ2Uuc2Vjb25kKCksQ2UubWlsbGlzZWNvbmQoKV19LFVpLnRvT2JqZWN0PWZ1bmN0aW9uIGR2KCl7dmFyIENlPXRoaXM7cmV0''@;'; put 'put ''dXJue3llYXJzOkNlLnllYXIoKSxtb250aHM6Q2UubW9udGgoKSxkYXRlOkNlLmRhdGUoKSxob3VyczpDZS5ob3VycygpLG1pbnV0ZXM6Q2UubWludXRlcygpLHNlY29uZHM6Q2Uuc2Vjb25kcygpLG1pbGxpc2Vjb25kczpDZS5taWxsaXNlY29uZHMoKX19LFVpLnRvRGF0ZT1mdW5jdGlvbiBS''@;'; put 'put ''MCgpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSl9LFVpLnRvSVNPU3RyaW5nPWZ1bmN0aW9uIHN2KENlKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGw7dmFyIEtlPSEwIT09Q2UscHQ9S2U/dGhpcy5jbG9uZSgpLnV0YygpOnRoaXM7cmV0dXJuIHB0LnllYXIoKTwwfHxw''@;'; put 'put ''dC55ZWFyKCk+OTk5OT9KZShwdCxLZT8iWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdIjoiWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTWiIpOnAoRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcpP0tlP3RoaXMudG9EYXRlKCkudG9JU09TdHJpbmcoKTpuZXcgRGF0ZSh0aGlzLnZh''@;'; put 'put ''bHVlT2YoKSs2MCp0aGlzLnV0Y09mZnNldCgpKjFlMykudG9JU09TdHJpbmcoKS5yZXBsYWNlKCJaIixKZShwdCwiWiIpKTpKZShwdCxLZT8iWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXSI6IllZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaIil9LFVpLmluc3BlY3Q9ZnVuY3Rpb24gbHYo''@;'; put 'put ''KXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIm1vbWVudC5pbnZhbGlkKC8qICIrdGhpcy5faSsiICovKSI7dmFyIHB0LEl0LENlPSJtb21lbnQiLEtlPSIiO3JldHVybiB0aGlzLmlzTG9jYWwoKXx8KENlPTA9PT10aGlzLnV0Y09mZnNldCgpPyJtb21lbnQudXRjIjoibW9tZW50LnBhcnNl''@;'; put 'put ''Wm9uZSIsS2U9IloiKSxwdD0iWyIrQ2UrJygiXScsSXQ9MDw9dGhpcy55ZWFyKCkmJnRoaXMueWVhcigpPD05OTk5PyJZWVlZIjoiWVlZWVlZIix0aGlzLmZvcm1hdChwdCtJdCsiLU1NLUREW1RdSEg6bW06c3MuU1NTIitLZSsnWyIpXScpfSx0eXBlb2YgU3ltYm9sPCJ1IiYmbnVsbCE9U3lt''@;'; put 'put ''Ym9sLmZvciYmKFVpW1N5bWJvbC5mb3IoIm5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tIildPWZ1bmN0aW9uKCl7cmV0dXJuIk1vbWVudDwiK3RoaXMuZm9ybWF0KCkrIj4ifSksVWkudG9KU09OPWZ1bmN0aW9uIEJ3KCl7cmV0dXJuIHRoaXMuaXNWYWxpZCgpP3RoaXMudG9JU09TdHJpbmco''@;'; put 'put ''KTpudWxsfSxVaS50b1N0cmluZz1mdW5jdGlvbiBnNCgpe3JldHVybiB0aGlzLmNsb25lKCkubG9jYWxlKCJlbiIpLmZvcm1hdCgiZGRkIE1NTSBERCBZWVlZIEhIOm1tOnNzIFtHTVRdWloiKX0sVWkudW5peD1mdW5jdGlvbiBENigpe3JldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigp''@;'; put 'put ''LzFlMyl9LFVpLnZhbHVlT2Y9ZnVuY3Rpb24gT3UoKXtyZXR1cm4gdGhpcy5fZC52YWx1ZU9mKCktNmU0Kih0aGlzLl9vZmZzZXR8fDApfSxVaS5jcmVhdGlvbkRhdGE9ZnVuY3Rpb24gaHYoKXtyZXR1cm57aW5wdXQ6dGhpcy5faSxmb3JtYXQ6dGhpcy5fZixsb2NhbGU6dGhpcy5fbG9jYWxl''@;'; put 'put ''LGlzVVRDOnRoaXMuX2lzVVRDLHN0cmljdDp0aGlzLl9zdHJpY3R9fSxVaS5lcmFOYW1lPWZ1bmN0aW9uIHp3KCl7dmFyIENlLEtlLHB0LEl0PXRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtmb3IoQ2U9MCxLZT1JdC5sZW5ndGg7Q2U8S2U7KytDZSlpZihwdD10aGlzLmNsb25lKCkuc3RhcnRP''@;'; put 'put ''ZigiZGF5IikudmFsdWVPZigpLEl0W0NlXS5zaW5jZTw9cHQmJnB0PD1JdFtDZV0udW50aWx8fEl0W0NlXS51bnRpbDw9cHQmJnB0PD1JdFtDZV0uc2luY2UpcmV0dXJuIEl0W0NlXS5uYW1lO3JldHVybiIifSxVaS5lcmFOYXJyb3c9ZnVuY3Rpb24gUjYoKXt2YXIgQ2UsS2UscHQsSXQ9dGhp''@;'; put 'put ''cy5sb2NhbGVEYXRhKCkuZXJhcygpO2ZvcihDZT0wLEtlPUl0Lmxlbmd0aDtDZTxLZTsrK0NlKWlmKHB0PXRoaXMuY2xvbmUoKS5zdGFydE9mKCJkYXkiKS52YWx1ZU9mKCksSXRbQ2VdLnNpbmNlPD1wdCYmcHQ8PUl0W0NlXS51bnRpbHx8SXRbQ2VdLnVudGlsPD1wdCYmcHQ8PUl0W0NlXS5z''@;'; put 'put ''aW5jZSlyZXR1cm4gSXRbQ2VdLm5hcnJvdztyZXR1cm4iIn0sVWkuZXJhQWJicj1mdW5jdGlvbiBmdigpe3ZhciBDZSxLZSxwdCxJdD10aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7Zm9yKENlPTAsS2U9SXQubGVuZ3RoO0NlPEtlOysrQ2UpaWYocHQ9dGhpcy5jbG9uZSgpLnN0YXJ0T2YoImRh''@;'; put 'put ''eSIpLnZhbHVlT2YoKSxJdFtDZV0uc2luY2U8PXB0JiZwdDw9SXRbQ2VdLnVudGlsfHxJdFtDZV0udW50aWw8PXB0JiZwdDw9SXRbQ2VdLnNpbmNlKXJldHVybiBJdFtDZV0uYWJicjtyZXR1cm4iIn0sVWkuZXJhWWVhcj1mdW5jdGlvbiBwdigpe3ZhciBDZSxLZSxwdCxJdCxobj10aGlzLmxv''@;'; put 'put ''Y2FsZURhdGEoKS5lcmFzKCk7Zm9yKENlPTAsS2U9aG4ubGVuZ3RoO0NlPEtlOysrQ2UpaWYocHQ9aG5bQ2VdLnNpbmNlPD1obltDZV0udW50aWw/MTotMSxJdD10aGlzLmNsb25lKCkuc3RhcnRPZigiZGF5IikudmFsdWVPZigpLGhuW0NlXS5zaW5jZTw9SXQmJkl0PD1obltDZV0udW50aWx8''@;'; put 'put ''fGhuW0NlXS51bnRpbDw9SXQmJkl0PD1obltDZV0uc2luY2UpcmV0dXJuKHRoaXMueWVhcigpLXkoaG5bQ2VdLnNpbmNlKS55ZWFyKCkpKnB0K2huW0NlXS5vZmZzZXQ7cmV0dXJuIHRoaXMueWVhcigpfSxVaS55ZWFyPVduLFVpLmlzTGVhcFllYXI9ZnVuY3Rpb24gS2koKXtyZXR1cm4gb24o''@;'; put 'put ''dGhpcy55ZWFyKCkpfSxVaS53ZWVrWWVhcj1mdW5jdGlvbiBoNShDZSl7cmV0dXJuIHZ2LmNhbGwodGhpcyxDZSx0aGlzLndlZWsoKSx0aGlzLndlZWtkYXkoKSt0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3csdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LHRoaXMubG9jYWxlRGF0YSgp''@;'; put 'put ''Ll93ZWVrLmRveSl9LFVpLmlzb1dlZWtZZWFyPWZ1bmN0aW9uIGd2KENlKXtyZXR1cm4gdnYuY2FsbCh0aGlzLENlLHRoaXMuaXNvV2VlaygpLHRoaXMuaXNvV2Vla2RheSgpLDEsNCl9LFVpLnF1YXJ0ZXI9VWkucXVhcnRlcnM9ZnVuY3Rpb24gZjUoQ2Upe3JldHVybiBudWxsPT1DZT9NYXRo''@;'; put 'put ''LmNlaWwoKHRoaXMubW9udGgoKSsxKS8zKTp0aGlzLm1vbnRoKDMqKENlLTEpK3RoaXMubW9udGgoKSUzKX0sVWkubW9udGg9UmMsVWkuZGF5c0luTW9udGg9ZnVuY3Rpb24gRDAoKXtyZXR1cm4gZ28odGhpcy55ZWFyKCksdGhpcy5tb250aCgpKX0sVWkud2Vlaz1VaS53ZWVrcz1mdW5jdGlv''@;'; put 'put ''biBHaShDZSl7dmFyIEtlPXRoaXMubG9jYWxlRGF0YSgpLndlZWsodGhpcyk7cmV0dXJuIG51bGw9PUNlP0tlOnRoaXMuYWRkKDcqKENlLUtlKSwiZCIpfSxVaS5pc29XZWVrPVVpLmlzb1dlZWtzPWZ1bmN0aW9uIHZsKENlKXt2YXIgS2U9UnUodGhpcywxLDQpLndlZWs7cmV0dXJuIG51bGw9''@;'; put 'put ''PUNlP0tlOnRoaXMuYWRkKDcqKENlLUtlKSwiZCIpfSxVaS53ZWVrc0luWWVhcj1mdW5jdGlvbiBMMygpe3ZhciBDZT10aGlzLmxvY2FsZURhdGEoKS5fd2VlaztyZXR1cm4gRnIodGhpcy55ZWFyKCksQ2UuZG93LENlLmRveSl9LFVpLndlZWtzSW5XZWVrWWVhcj1mdW5jdGlvbiBadygpe3Zh''@;'; put 'put ''ciBDZT10aGlzLmxvY2FsZURhdGEoKS5fd2VlaztyZXR1cm4gRnIodGhpcy53ZWVrWWVhcigpLENlLmRvdyxDZS5kb3kpfSxVaS5pc29XZWVrc0luWWVhcj1mdW5jdGlvbiBGNigpe3JldHVybiBGcih0aGlzLnllYXIoKSwxLDQpfSxVaS5pc29XZWVrc0luSVNPV2Vla1llYXI9ZnVuY3Rpb24g''@;'; put 'put ''bXYoKXtyZXR1cm4gRnIodGhpcy5pc29XZWVrWWVhcigpLDEsNCl9LFVpLmRhdGU9WDAsVWkuZGF5PVVpLmRheXM9ZnVuY3Rpb24gVm8oQ2Upe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9Q2U/dGhpczpOYU47dmFyIEtlPUpyKHRoaXMsIkRheSIpO3JldHVybiBudWxsIT1DZT8o''@;'; put 'put ''Q2U9ZnVuY3Rpb24gSmMoQ2UsS2Upe3JldHVybiJzdHJpbmciIT10eXBlb2YgQ2U/Q2U6aXNOYU4oQ2UpPyJudW1iZXIiPT10eXBlb2YoQ2U9S2Uud2Vla2RheXNQYXJzZShDZSkpP0NlOm51bGw6cGFyc2VJbnQoQ2UsMTApfShDZSx0aGlzLmxvY2FsZURhdGEoKSksdGhpcy5hZGQoQ2UtS2Us''@;'; put 'put ''ImQiKSk6S2V9LFVpLndlZWtkYXk9ZnVuY3Rpb24geDMoQ2Upe2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9Q2U/dGhpczpOYU47dmFyIEtlPSh0aGlzLmRheSgpKzctdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93KSU3O3JldHVybiBudWxsPT1DZT9LZTp0aGlzLmFkZChDZS1L''@;'; put 'put ''ZSwiZCIpfSxVaS5pc29XZWVrZGF5PWZ1bmN0aW9uIFVoKENlKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIG51bGwhPUNlP3RoaXM6TmFOO2lmKG51bGwhPUNlKXt2YXIgS2U9ZnVuY3Rpb24gUWcoQ2UsS2Upe3JldHVybiJzdHJpbmciPT10eXBlb2YgQ2U/S2Uud2Vla2RheXNQYXJzZShD''@;'; put 'put ''ZSklN3x8Nzppc05hTihDZSk/bnVsbDpDZX0oQ2UsdGhpcy5sb2NhbGVEYXRhKCkpO3JldHVybiB0aGlzLmRheSh0aGlzLmRheSgpJTc/S2U6S2UtNyl9cmV0dXJuIHRoaXMuZGF5KCl8fDd9LFVpLmRheU9mWWVhcj1mdW5jdGlvbiBidihDZSl7dmFyIEtlPU1hdGgucm91bmQoKHRoaXMuY2xv''@;'; put 'put ''bmUoKS5zdGFydE9mKCJkYXkiKS10aGlzLmNsb25lKCkuc3RhcnRPZigieWVhciIpKS84NjRlNSkrMTtyZXR1cm4gbnVsbD09Q2U/S2U6dGhpcy5hZGQoQ2UtS2UsImQiKX0sVWkuaG91cj1VaS5ob3Vycz1WcyxVaS5taW51dGU9VWkubWludXRlcz1nZixVaS5zZWNvbmQ9VWkuc2Vjb25kcz1t''@;'; put 'put ''ZixVaS5taWxsaXNlY29uZD1VaS5taWxsaXNlY29uZHM9SDYsVWkudXRjT2Zmc2V0PWZ1bmN0aW9uIGNmKENlLEtlLHB0KXt2YXIgaG4sSXQ9dGhpcy5fb2Zmc2V0fHwwO2lmKCF0aGlzLmlzVmFsaWQoKSlyZXR1cm4gbnVsbCE9Q2U/dGhpczpOYU47aWYobnVsbCE9Q2Upe2lmKCJzdHJpbmci''@;'; put 'put ''PT10eXBlb2YgQ2Upe2lmKG51bGw9PT0oQ2U9bGQoUmksQ2UpKSlyZXR1cm4gdGhpc31lbHNlIE1hdGguYWJzKENlKTwxNiYmIXB0JiYoQ2UqPTYwKTtyZXR1cm4hdGhpcy5faXNVVEMmJktlJiYoaG49Z3UodGhpcykpLHRoaXMuX29mZnNldD1DZSx0aGlzLl9pc1VUQz0hMCxudWxsIT1obiYm''@;'; put 'put ''dGhpcy5hZGQoaG4sIm0iKSxJdCE9PUNlJiYoIUtlfHx0aGlzLl9jaGFuZ2VJblByb2dyZXNzP0EzKHRoaXMsS2woQ2UtSXQsIm0iKSwxLCExKTp0aGlzLl9jaGFuZ2VJblByb2dyZXNzfHwodGhpcy5fY2hhbmdlSW5Qcm9ncmVzcz0hMCx5LnVwZGF0ZU9mZnNldCh0aGlzLCEwKSx0aGlzLl9j''@;'; put 'put ''aGFuZ2VJblByb2dyZXNzPW51bGwpKSx0aGlzfXJldHVybiB0aGlzLl9pc1VUQz9JdDpndSh0aGlzKX0sVWkudXRjPWZ1bmN0aW9uIFQzKENlKXtyZXR1cm4gdGhpcy51dGNPZmZzZXQoMCxDZSl9LFVpLmxvY2FsPWZ1bmN0aW9uIExsKENlKXtyZXR1cm4gdGhpcy5faXNVVEMmJih0aGlzLnV0''@;'; put 'put ''Y09mZnNldCgwLENlKSx0aGlzLl9pc1VUQz0hMSxDZSYmdGhpcy5zdWJ0cmFjdChndSh0aGlzKSwibSIpKSx0aGlzfSxVaS5wYXJzZVpvbmU9ZnVuY3Rpb24gTHUoKXtpZihudWxsIT10aGlzLl90em0pdGhpcy51dGNPZmZzZXQodGhpcy5fdHptLCExLCEwKTtlbHNlIGlmKCJzdHJpbmciPT10''@;'; put 'put ''eXBlb2YgdGhpcy5faSl7dmFyIENlPWxkKHNuLHRoaXMuX2kpO251bGwhPUNlP3RoaXMudXRjT2Zmc2V0KENlKTp0aGlzLnV0Y09mZnNldCgwLCEwKX1yZXR1cm4gdGhpc30sVWkuaGFzQWxpZ25lZEhvdXJPZmZzZXQ9ZnVuY3Rpb24gJGgoQ2Upe3JldHVybiEhdGhpcy5pc1ZhbGlkKCkmJihD''@;'; put 'put ''ZT1DZT9vbChDZSkudXRjT2Zmc2V0KCk6MCwodGhpcy51dGNPZmZzZXQoKS1DZSklNjA9PTApfSxVaS5pc0RTVD1mdW5jdGlvbiB1Zigpe3JldHVybiB0aGlzLnV0Y09mZnNldCgpPnRoaXMuY2xvbmUoKS5tb250aCgwKS51dGNPZmZzZXQoKXx8dGhpcy51dGNPZmZzZXQoKT50aGlzLmNsb25l''@;'; put 'put ''KCkubW9udGgoNSkudXRjT2Zmc2V0KCl9LFVpLmlzTG9jYWw9ZnVuY3Rpb24gb3YoKXtyZXR1cm4hIXRoaXMuaXNWYWxpZCgpJiYhdGhpcy5faXNVVEN9LFVpLmlzVXRjT2Zmc2V0PWZ1bmN0aW9uIE93KCl7cmV0dXJuISF0aGlzLmlzVmFsaWQoKSYmdGhpcy5faXNVVEN9LFVpLmlzVXRjPV8w''@;'; put 'put ''LFVpLmlzVVRDPV8wLFVpLnpvbmVBYmJyPWZ1bmN0aW9uIE42KCl7cmV0dXJuIHRoaXMuX2lzVVRDPyJVVEMiOiIifSxVaS56b25lTmFtZT1mdW5jdGlvbiBWNigpe3JldHVybiB0aGlzLl9pc1VUQz8iQ29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWUiOiIifSxVaS5kYXRlcz1TZSgiZGF0ZXMg''@;'; put 'put ''YWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIGRhdGUgaW5zdGVhZC4iLFgwKSxVaS5tb250aHM9U2UoIm1vbnRocyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgbW9udGggaW5zdGVhZCIsUmMpLFVpLnllYXJzPVNlKCJ5ZWFycyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgeWVh''@;'; put 'put ''ciBpbnN0ZWFkIixXbiksVWkuem9uZT1TZSgibW9tZW50KCkuem9uZSBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50KCkudXRjT2Zmc2V0IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3Mvem9uZS8iLGZ1bmN0aW9uIHQwKENlLEtlKXtyZXR1cm4gbnVsbCE9''@;'; put 'put ''Q2U/KCJzdHJpbmciIT10eXBlb2YgQ2UmJihDZT0tQ2UpLHRoaXMudXRjT2Zmc2V0KENlLEtlKSx0aGlzKTotdGhpcy51dGNPZmZzZXQoKX0pLFVpLmlzRFNUU2hpZnRlZD1TZSgiaXNEU1RTaGlmdGVkIGlzIGRlcHJlY2F0ZWQuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dh''@;'; put 'put ''cm5pbmdzL2RzdC1zaGlmdGVkLyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIsZnVuY3Rpb24gTHcoKXtpZighTyh0aGlzLl9pc0RTVFNoaWZ0ZWQpKXJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7dmFyIEtlLENlPXt9O3JldHVybiBsZShDZSx0aGlzKSwoQ2U9bnYoQ2UpKS5fYT8oS2U9Q2UuX2lz''@;'; put 'put ''VVRDP1UoQ2UuX2EpOm9sKENlLl9hKSx0aGlzLl9pc0RTVFNoaWZ0ZWQ9dGhpcy5pc1ZhbGlkKCkmJmZ1bmN0aW9uIGE1KENlLEtlLHB0KXt2YXIgcmksSXQ9TWF0aC5taW4oQ2UubGVuZ3RoLEtlLmxlbmd0aCksaG49TWF0aC5hYnMoQ2UubGVuZ3RoLUtlLmxlbmd0aCkscW49MDtmb3Iocmk9''@;'; put 'put ''MDtyaTxJdDtyaSsrKShwdCYmQ2VbcmldIT09S2VbcmldfHwhcHQmJlR0KENlW3JpXSkhPT1UdChLZVtyaV0pKSYmcW4rKztyZXR1cm4gcW4raG59KENlLl9hLEtlLnRvQXJyYXkoKSk+MCk6dGhpcy5faXNEU1RTaGlmdGVkPSExLHRoaXMuX2lzRFNUU2hpZnRlZH0pO3ZhciBkYT1DLnByb3Rv''@;'; put 'put ''dHlwZTtmdW5jdGlvbiBldShDZSxLZSxwdCxJdCl7dmFyIGhuPXJvKCkscW49VSgpLnNldChJdCxLZSk7cmV0dXJuIGhuW3B0XShxbixDZSl9ZnVuY3Rpb24geGMoQ2UsS2UscHQpe2lmKHooQ2UpJiYoS2U9Q2UsQ2U9dm9pZCAwKSxDZT1DZXx8IiIsbnVsbCE9S2UpcmV0dXJuIGV1KENlLEtl''@;'; put 'put ''LHB0LCJtb250aCIpO3ZhciBJdCxobj1bXTtmb3IoSXQ9MDtJdDwxMjtJdCsrKWhuW0l0XT1ldShDZSxJdCxwdCwibW9udGgiKTtyZXR1cm4gaG59ZnVuY3Rpb24gcjAoQ2UsS2UscHQsSXQpeyJib29sZWFuIj09dHlwZW9mIENlPyh6KEtlKSYmKHB0PUtlLEtlPXZvaWQgMCksS2U9S2V8fCIi''@;'; put 'put ''KToocHQ9S2U9Q2UsQ2U9ITEseihLZSkmJihwdD1LZSxLZT12b2lkIDApLEtlPUtlfHwiIik7dmFyIHJpLGhuPXJvKCkscW49Q2U/aG4uX3dlZWsuZG93OjAsUm89W107aWYobnVsbCE9cHQpcmV0dXJuIGV1KEtlLChwdCtxbiklNyxJdCwiZGF5Iik7Zm9yKHJpPTA7cmk8NztyaSsrKVJvW3Jp''@;'; put 'put ''XT1ldShLZSwocmkrcW4pJTcsSXQsImRheSIpO3JldHVybiBSb31kYS5jYWxlbmRhcj1mdW5jdGlvbiBqKENlLEtlLHB0KXt2YXIgSXQ9dGhpcy5fY2FsZW5kYXJbQ2VdfHx0aGlzLl9jYWxlbmRhci5zYW1lRWxzZTtyZXR1cm4gcChJdCk/SXQuY2FsbChLZSxwdCk6SXR9LGRhLmxvbmdEYXRl''@;'; put 'put ''Rm9ybWF0PWZ1bmN0aW9uIHZlKENlKXt2YXIgS2U9dGhpcy5fbG9uZ0RhdGVGb3JtYXRbQ2VdLHB0PXRoaXMuX2xvbmdEYXRlRm9ybWF0W0NlLnRvVXBwZXJDYXNlKCldO3JldHVybiBLZXx8IXB0P0tlOih0aGlzLl9sb25nRGF0ZUZvcm1hdFtDZV09cHQubWF0Y2gobSkubWFwKGZ1bmN0aW9u''@;'; put 'put ''KEl0KXtyZXR1cm4iTU1NTSI9PT1JdHx8Ik1NIj09PUl0fHwiREQiPT09SXR8fCJkZGRkIj09PUl0P0l0LnNsaWNlKDEpOkl0fSkuam9pbigiIiksdGhpcy5fbG9uZ0RhdGVGb3JtYXRbQ2VdKX0sZGEuaW52YWxpZERhdGU9ZnVuY3Rpb24gamUoKXtyZXR1cm4gdGhpcy5faW52YWxpZERhdGV9''@;'; put 'put ''LGRhLm9yZGluYWw9ZnVuY3Rpb24gUmUoQ2Upe3JldHVybiB0aGlzLl9vcmRpbmFsLnJlcGxhY2UoIiVkIixDZSl9LGRhLnByZXBhcnNlPXl2LGRhLnBvc3Rmb3JtYXQ9eXYsZGEucmVsYXRpdmVUaW1lPWZ1bmN0aW9uIFZlKENlLEtlLHB0LEl0KXt2YXIgaG49dGhpcy5fcmVsYXRpdmVUaW1l''@;'; put 'put ''W3B0XTtyZXR1cm4gcChobik/aG4oQ2UsS2UscHQsSXQpOmhuLnJlcGxhY2UoLyVkL2ksQ2UpfSxkYS5wYXN0RnV0dXJlPWZ1bmN0aW9uIGtlKENlLEtlKXt2YXIgcHQ9dGhpcy5fcmVsYXRpdmVUaW1lW0NlPjA/ImZ1dHVyZSI6InBhc3QiXTtyZXR1cm4gcChwdCk/cHQoS2UpOnB0LnJlcGxh''@;'; put 'put ''Y2UoLyVzL2ksS2UpfSxkYS5zZXQ9ZnVuY3Rpb24gYihDZSl7dmFyIEtlLHB0O2ZvcihwdCBpbiBDZSlQKENlLHB0KSYmKHAoS2U9Q2VbcHRdKT90aGlzW3B0XT1LZTp0aGlzWyJfIitwdF09S2UpO3RoaXMuX2NvbmZpZz1DZSx0aGlzLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlTGVuaWVudD1u''@;'; put 'put ''ZXcgUmVnRXhwKCh0aGlzLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlLnNvdXJjZXx8dGhpcy5fb3JkaW5hbFBhcnNlLnNvdXJjZSkrInwiKy9cZHsxLDJ9Ly5zb3VyY2UpfSxkYS5lcmFzPWZ1bmN0aW9uIHY0KENlLEtlKXt2YXIgcHQsSXQsaG4scW49dGhpcy5fZXJhc3x8cm8oImVuIikuX2Vy''@;'; put 'put ''YXM7Zm9yKHB0PTAsSXQ9cW4ubGVuZ3RoO3B0PEl0OysrcHQpc3dpdGNoKCJzdHJpbmciPT10eXBlb2YgcW5bcHRdLnNpbmNlJiYoaG49eShxbltwdF0uc2luY2UpLnN0YXJ0T2YoImRheSIpLHFuW3B0XS5zaW5jZT1obi52YWx1ZU9mKCkpLHR5cGVvZiBxbltwdF0udW50aWwpe2Nhc2UidW5k''@;'; put 'put ''ZWZpbmVkIjpxbltwdF0udW50aWw9MS8wO2JyZWFrO2Nhc2Uic3RyaW5nIjpobj15KHFuW3B0XS51bnRpbCkuc3RhcnRPZigiZGF5IikudmFsdWVPZigpLHFuW3B0XS51bnRpbD1obi52YWx1ZU9mKCl9cmV0dXJuIHFufSxkYS5lcmFzUGFyc2U9ZnVuY3Rpb24gSEEoQ2UsS2UscHQpe3ZhciBJ''@;'; put 'put ''dCxobixyaSxSbyxNYSxxbj10aGlzLmVyYXMoKTtmb3IoQ2U9Q2UudG9VcHBlckNhc2UoKSxJdD0wLGhuPXFuLmxlbmd0aDtJdDxobjsrK0l0KWlmKHJpPXFuW0l0XS5uYW1lLnRvVXBwZXJDYXNlKCksUm89cW5bSXRdLmFiYnIudG9VcHBlckNhc2UoKSxNYT1xbltJdF0ubmFycm93LnRvVXBw''@;'; put 'put ''ZXJDYXNlKCkscHQpc3dpdGNoKEtlKXtjYXNlIk4iOmNhc2UiTk4iOmNhc2UiTk5OIjppZihSbz09PUNlKXJldHVybiBxbltJdF07YnJlYWs7Y2FzZSJOTk5OIjppZihyaT09PUNlKXJldHVybiBxbltJdF07YnJlYWs7Y2FzZSJOTk5OTiI6aWYoTWE9PT1DZSlyZXR1cm4gcW5bSXRdfWVsc2Ug''@;'; put 'put ''aWYoW3JpLFJvLE1hXS5pbmRleE9mKENlKT49MClyZXR1cm4gcW5bSXRdfSxkYS5lcmFzQ29udmVydFllYXI9ZnVuY3Rpb24gSTYoQ2UsS2Upe3ZhciBwdD1DZS5zaW5jZTw9Q2UudW50aWw/MTotMTtyZXR1cm4gdm9pZCAwPT09S2U/eShDZS5zaW5jZSkueWVhcigpOnkoQ2Uuc2luY2UpLnll''@;'; put 'put ''YXIoKSsoS2UtQ2Uub2Zmc2V0KSpwdH0sZGEuZXJhc0FiYnJSZWdleD1mdW5jdGlvbiBMNihDZSl7cmV0dXJuIFAodGhpcywiX2VyYXNBYmJyUmVnZXgiKXx8Y2MuY2FsbCh0aGlzKSxDZT90aGlzLl9lcmFzQWJiclJlZ2V4OnRoaXMuX2VyYXNSZWdleH0sZGEuZXJhc05hbWVSZWdleD1mdW5j''@;'; put 'put ''dGlvbiBwZihDZSl7cmV0dXJuIFAodGhpcywiX2VyYXNOYW1lUmVnZXgiKXx8Y2MuY2FsbCh0aGlzKSxDZT90aGlzLl9lcmFzTmFtZVJlZ2V4OnRoaXMuX2VyYXNSZWdleH0sZGEuZXJhc05hcnJvd1JlZ2V4PWZ1bmN0aW9uIE82KENlKXtyZXR1cm4gUCh0aGlzLCJfZXJhc05hcnJvd1JlZ2V4''@;'; put 'put ''Iil8fGNjLmNhbGwodGhpcyksQ2U/dGhpcy5fZXJhc05hcnJvd1JlZ2V4OnRoaXMuX2VyYXNSZWdleH0sZGEubW9udGhzPWZ1bmN0aW9uIGVpKENlLEtlKXtyZXR1cm4gQ2U/Qih0aGlzLl9tb250aHMpP3RoaXMuX21vbnRoc1tDZS5tb250aCgpXTp0aGlzLl9tb250aHNbKHRoaXMuX21vbnRo''@;'; put 'put ''cy5pc0Zvcm1hdHx8X28pLnRlc3QoS2UpPyJmb3JtYXQiOiJzdGFuZGFsb25lIl1bQ2UubW9udGgoKV06Qih0aGlzLl9tb250aHMpP3RoaXMuX21vbnRoczp0aGlzLl9tb250aHMuc3RhbmRhbG9uZX0sZGEubW9udGhzU2hvcnQ9ZnVuY3Rpb24gZ2EoQ2UsS2Upe3JldHVybiBDZT9CKHRoaXMu''@;'; put 'put ''X21vbnRoc1Nob3J0KT90aGlzLl9tb250aHNTaG9ydFtDZS5tb250aCgpXTp0aGlzLl9tb250aHNTaG9ydFtfby50ZXN0KEtlKT8iZm9ybWF0Ijoic3RhbmRhbG9uZSJdW0NlLm1vbnRoKCldOkIodGhpcy5fbW9udGhzU2hvcnQpP3RoaXMuX21vbnRoc1Nob3J0OnRoaXMuX21vbnRoc1Nob3J0''@;'; put 'put ''LnN0YW5kYWxvbmV9LGRhLm1vbnRoc1BhcnNlPWZ1bmN0aW9uIG1sKENlLEtlLHB0KXt2YXIgSXQsaG4scW47aWYodGhpcy5fbW9udGhzUGFyc2VFeGFjdClyZXR1cm4gTnMuY2FsbCh0aGlzLENlLEtlLHB0KTtmb3IodGhpcy5fbW9udGhzUGFyc2V8fCh0aGlzLl9tb250aHNQYXJzZT1bXSx0''@;'; put 'put ''aGlzLl9sb25nTW9udGhzUGFyc2U9W10sdGhpcy5fc2hvcnRNb250aHNQYXJzZT1bXSksSXQ9MDtJdDwxMjtJdCsrKXtpZihobj1VKFsyZTMsSXRdKSxwdCYmIXRoaXMuX2xvbmdNb250aHNQYXJzZVtJdF0mJih0aGlzLl9sb25nTW9udGhzUGFyc2VbSXRdPW5ldyBSZWdFeHAoIl4iK3RoaXMu''@;'; put 'put ''bW9udGhzKGhuLCIiKS5yZXBsYWNlKCIuIiwiIikrIiQiLCJpIiksdGhpcy5fc2hvcnRNb250aHNQYXJzZVtJdF09bmV3IFJlZ0V4cCgiXiIrdGhpcy5tb250aHNTaG9ydChobiwiIikucmVwbGFjZSgiLiIsIiIpKyIkIiwiaSIpKSwhcHQmJiF0aGlzLl9tb250aHNQYXJzZVtJdF0mJihxbj0i''@;'; put 'put ''XiIrdGhpcy5tb250aHMoaG4sIiIpKyJ8XiIrdGhpcy5tb250aHNTaG9ydChobiwiIiksdGhpcy5fbW9udGhzUGFyc2VbSXRdPW5ldyBSZWdFeHAocW4ucmVwbGFjZSgiLiIsIiIpLCJpIikpLHB0JiYiTU1NTSI9PT1LZSYmdGhpcy5fbG9uZ01vbnRoc1BhcnNlW0l0XS50ZXN0KENlKSlyZXR1''@;'; put 'put ''cm4gSXQ7aWYocHQmJiJNTU0iPT09S2UmJnRoaXMuX3Nob3J0TW9udGhzUGFyc2VbSXRdLnRlc3QoQ2UpKXJldHVybiBJdDtpZighcHQmJnRoaXMuX21vbnRoc1BhcnNlW0l0XS50ZXN0KENlKSlyZXR1cm4gSXR9fSxkYS5tb250aHNSZWdleD1mdW5jdGlvbiB4byhDZSl7cmV0dXJuIHRoaXMu''@;'; put 'put ''X21vbnRoc1BhcnNlRXhhY3Q/KFAodGhpcywiX21vbnRoc1JlZ2V4Iil8fHNpLmNhbGwodGhpcyksQ2U/dGhpcy5fbW9udGhzU3RyaWN0UmVnZXg6dGhpcy5fbW9udGhzUmVnZXgpOihQKHRoaXMsIl9tb250aHNSZWdleCIpfHwodGhpcy5fbW9udGhzUmVnZXg9SG8pLHRoaXMuX21vbnRoc1N0''@;'; put 'put ''cmljdFJlZ2V4JiZDZT90aGlzLl9tb250aHNTdHJpY3RSZWdleDp0aGlzLl9tb250aHNSZWdleCl9LGRhLm1vbnRoc1Nob3J0UmVnZXg9ZnVuY3Rpb24gb3IoQ2Upe3JldHVybiB0aGlzLl9tb250aHNQYXJzZUV4YWN0PyhQKHRoaXMsIl9tb250aHNSZWdleCIpfHxzaS5jYWxsKHRoaXMpLENl''@;'; put 'put ''P3RoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg6dGhpcy5fbW9udGhzU2hvcnRSZWdleCk6KFAodGhpcywiX21vbnRoc1Nob3J0UmVnZXgiKXx8KHRoaXMuX21vbnRoc1Nob3J0UmVnZXg9T28pLHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXgmJkNlP3RoaXMuX21vbnRoc1Nob3J0U3Ry''@;'; put 'put ''aWN0UmVnZXg6dGhpcy5fbW9udGhzU2hvcnRSZWdleCl9LGRhLndlZWs9ZnVuY3Rpb24gYWQoQ2Upe3JldHVybiBSdShDZSx0aGlzLl93ZWVrLmRvdyx0aGlzLl93ZWVrLmRveSkud2Vla30sZGEuZmlyc3REYXlPZlllYXI9ZnVuY3Rpb24ga3MoKXtyZXR1cm4gdGhpcy5fd2Vlay5kb3l9LGRh''@;'; put 'put ''LmZpcnN0RGF5T2ZXZWVrPWZ1bmN0aW9uIHRmKCl7cmV0dXJuIHRoaXMuX3dlZWsuZG93fSxkYS53ZWVrZGF5cz1mdW5jdGlvbiBhZihDZSxLZSl7dmFyIHB0PUIodGhpcy5fd2Vla2RheXMpP3RoaXMuX3dlZWtkYXlzOnRoaXMuX3dlZWtkYXlzW0NlJiYhMCE9PUNlJiZ0aGlzLl93ZWVrZGF5''@;'; put 'put ''cy5pc0Zvcm1hdC50ZXN0KEtlKT8iZm9ybWF0Ijoic3RhbmRhbG9uZSJdO3JldHVybiEwPT09Q2U/eTAocHQsdGhpcy5fd2Vlay5kb3cpOkNlP3B0W0NlLmRheSgpXTpwdH0sZGEud2Vla2RheXNNaW49ZnVuY3Rpb24gc2YoQ2Upe3JldHVybiEwPT09Q2U/eTAodGhpcy5fd2Vla2RheXNNaW4s''@;'; put 'put ''dGhpcy5fd2Vlay5kb3cpOkNlP3RoaXMuX3dlZWtkYXlzTWluW0NlLmRheSgpXTp0aGlzLl93ZWVrZGF5c01pbn0sZGEud2Vla2RheXNTaG9ydD1mdW5jdGlvbiBYZChDZSl7cmV0dXJuITA9PT1DZT95MCh0aGlzLl93ZWVrZGF5c1Nob3J0LHRoaXMuX3dlZWsuZG93KTpDZT90aGlzLl93ZWVr''@;'; put 'put ''ZGF5c1Nob3J0W0NlLmRheSgpXTp0aGlzLl93ZWVrZGF5c1Nob3J0fSxkYS53ZWVrZGF5c1BhcnNlPWZ1bmN0aW9uIExjKENlLEtlLHB0KXt2YXIgSXQsaG4scW47aWYodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KXJldHVybiB6aC5jYWxsKHRoaXMsQ2UsS2UscHQpO2Zvcih0aGlzLl93ZWVr''@;'; put 'put ''ZGF5c1BhcnNlfHwodGhpcy5fd2Vla2RheXNQYXJzZT1bXSx0aGlzLl9taW5XZWVrZGF5c1BhcnNlPVtdLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZT1bXSx0aGlzLl9mdWxsV2Vla2RheXNQYXJzZT1bXSksSXQ9MDtJdDw3O0l0Kyspe2lmKGhuPVUoWzJlMywxXSkuZGF5KEl0KSxwdCYmIXRo''@;'; put 'put ''aXMuX2Z1bGxXZWVrZGF5c1BhcnNlW0l0XSYmKHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW0l0XT1uZXcgUmVnRXhwKCJeIit0aGlzLndlZWtkYXlzKGhuLCIiKS5yZXBsYWNlKCIuIiwiXFwuPyIpKyIkIiwiaSIpLHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtJdF09bmV3IFJlZ0V4cCgiXiIr''@;'; put 'put ''dGhpcy53ZWVrZGF5c1Nob3J0KGhuLCIiKS5yZXBsYWNlKCIuIiwiXFwuPyIpKyIkIiwiaSIpLHRoaXMuX21pbldlZWtkYXlzUGFyc2VbSXRdPW5ldyBSZWdFeHAoIl4iK3RoaXMud2Vla2RheXNNaW4oaG4sIiIpLnJlcGxhY2UoIi4iLCJcXC4/IikrIiQiLCJpIikpLHRoaXMuX3dlZWtkYXlz''@;'; put 'put ''UGFyc2VbSXRdfHwocW49Il4iK3RoaXMud2Vla2RheXMoaG4sIiIpKyJ8XiIrdGhpcy53ZWVrZGF5c1Nob3J0KGhuLCIiKSsifF4iK3RoaXMud2Vla2RheXNNaW4oaG4sIiIpLHRoaXMuX3dlZWtkYXlzUGFyc2VbSXRdPW5ldyBSZWdFeHAocW4ucmVwbGFjZSgiLiIsIiIpLCJpIikpLHB0JiYi''@;'; put 'put ''ZGRkZCI9PT1LZSYmdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbSXRdLnRlc3QoQ2UpKXJldHVybiBJdDtpZihwdCYmImRkZCI9PT1LZSYmdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW0l0XS50ZXN0KENlKSlyZXR1cm4gSXQ7aWYocHQmJiJkZCI9PT1LZSYmdGhpcy5fbWluV2Vla2RheXNQYXJz''@;'; put 'put ''ZVtJdF0udGVzdChDZSkpcmV0dXJuIEl0O2lmKCFwdCYmdGhpcy5fd2Vla2RheXNQYXJzZVtJdF0udGVzdChDZSkpcmV0dXJuIEl0fX0sZGEud2Vla2RheXNSZWdleD1mdW5jdGlvbiBaaChDZSl7cmV0dXJuIHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdD8oUCh0aGlzLCJfd2Vla2RheXNSZWdl''@;'; put 'put ''eCIpfHxhbi5jYWxsKHRoaXMpLENlP3RoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNSZWdleCk6KFAodGhpcywiX3dlZWtkYXlzUmVnZXgiKXx8KHRoaXMuX3dlZWtkYXlzUmVnZXg9c2QpLHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXgmJkNlP3RoaXMuX3dlZWtkYXlz''@;'; put 'put ''U3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNSZWdleCl9LGRhLndlZWtkYXlzU2hvcnRSZWdleD1mdW5jdGlvbiBXaChDZSl7cmV0dXJuIHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdD8oUCh0aGlzLCJfd2Vla2RheXNSZWdleCIpfHxhbi5jYWxsKHRoaXMpLENlP3RoaXMuX3dlZWtkYXlzU2hv''@;'; put 'put ''cnRTdHJpY3RSZWdleDp0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXgpOihQKHRoaXMsIl93ZWVrZGF5c1Nob3J0UmVnZXgiKXx8KHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleD1yZiksdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4JiZDZT90aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVn''@;'; put 'put ''ZXg6dGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4KX0sZGEud2Vla2RheXNNaW5SZWdleD1mdW5jdGlvbiBBbihDZSl7cmV0dXJuIHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdD8oUCh0aGlzLCJfd2Vla2RheXNSZWdleCIpfHxhbi5jYWxsKHRoaXMpLENlP3RoaXMuX3dlZWtkYXlzTWluU3RyaWN0''@;'; put 'put ''UmVnZXg6dGhpcy5fd2Vla2RheXNNaW5SZWdleCk6KFAodGhpcywiX3dlZWtkYXlzTWluUmVnZXgiKXx8KHRoaXMuX3dlZWtkYXlzTWluUmVnZXg9azEpLHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXgmJkNlP3RoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg6dGhpcy5fd2Vla2RheXNN''@;'; put 'put ''aW5SZWdleCl9LGRhLmlzUE09ZnVuY3Rpb24gaWwoQ2Upe3JldHVybiJwIj09PShDZSsiIikudG9Mb3dlckNhc2UoKS5jaGFyQXQoMCl9LGRhLm1lcmlkaWVtPWZ1bmN0aW9uIENzKENlLEtlLHB0KXtyZXR1cm4gQ2U+MTE/cHQ/InBtIjoiUE0iOnB0PyJhbSI6IkFNIn0sY3IoImVuIix7ZXJh''@;'; put 'put ''czpbe3NpbmNlOiIwMDAxLTAxLTAxIix1bnRpbDoxLzAsb2Zmc2V0OjEsbmFtZToiQW5ubyBEb21pbmkiLG5hcnJvdzoiQUQiLGFiYnI6IkFEIn0se3NpbmNlOiIwMDAwLTEyLTMxIix1bnRpbDotMS8wLG9mZnNldDoxLG5hbWU6IkJlZm9yZSBDaHJpc3QiLG5hcnJvdzoiQkMiLGFiYnI6IkJD''@;'; put 'put ''In1dLGRheU9mTW9udGhPcmRpbmFsUGFyc2U6L1xkezEsMn0odGh8c3R8bmR8cmQpLyxvcmRpbmFsOmZ1bmN0aW9uKENlKXt2YXIgS2U9Q2UlMTA7cmV0dXJuIENlKygxPT09VHQoQ2UlMTAwLzEwKT8idGgiOjE9PT1LZT8ic3QiOjI9PT1LZT8ibmQiOjM9PT1LZT8icmQiOiJ0aCIpfX0pLHku''@;'; put 'put ''bGFuZz1TZSgibW9tZW50LmxhbmcgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGUgaW5zdGVhZC4iLGNyKSx5LmxhbmdEYXRhPVNlKCJtb21lbnQubGFuZ0RhdGEgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGVEYXRhIGluc3RlYWQuIixybyk7dmFyIEhjPU1hdGguYWJz''@;'; put 'put ''O2Z1bmN0aW9uIHR1KENlLEtlLHB0LEl0KXt2YXIgaG49S2woS2UscHQpO3JldHVybiBDZS5fbWlsbGlzZWNvbmRzKz1JdCpobi5fbWlsbGlzZWNvbmRzLENlLl9kYXlzKz1JdCpobi5fZGF5cyxDZS5fbW9udGhzKz1JdCpobi5fbW9udGhzLENlLl9idWJibGUoKX1mdW5jdGlvbiBkYyhDZSl7''@;'; put 'put ''cmV0dXJuIENlPDA/TWF0aC5mbG9vcihDZSk6TWF0aC5jZWlsKENlKX1mdW5jdGlvbiBiYShDZSl7cmV0dXJuIDQ4MDAqQ2UvMTQ2MDk3fWZ1bmN0aW9uIHZmKENlKXtyZXR1cm4gMTQ2MDk3KkNlLzQ4MDB9ZnVuY3Rpb24gbzAoQ2Upe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0aGlzLmFz''@;'; put 'put ''KENlKX19dmFyIGpsPW8wKCJtcyIpLF80PW8wKCJzIiksYmY9bzAoIm0iKSx1ZD1vMCgiaCIpLHcwPW8wKCJkIiksUWg9bzAoInciKSxlMj1vMCgiTSIpLHA1PW8wKCJRIikseWY9bzAoInkiKSx3YT1qbDtmdW5jdGlvbiBtdShDZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNW''@;'; put 'put ''YWxpZCgpP3RoaXMuX2RhdGFbQ2VdOk5hTn19dmFyIHc0PW11KCJtaWxsaXNlY29uZHMiKSxPMz1tdSgic2Vjb25kcyIpLGhjPW11KCJtaW51dGVzIiksZzU9bXUoImhvdXJzIiksUHU9bXUoImRheXMiKSxGdT1tdSgibW9udGhzIiksbnU9bXUoInllYXJzIik7dmFyIFEwPU1hdGgucm91bmQs''@;'; put 'put ''TmM9e3NzOjQ0LHM6NDUsbTo0NSxoOjIyLGQ6MjYsdzpudWxsLE06MTF9O2Z1bmN0aW9uIEM0KENlLEtlLHB0LEl0LGhuKXtyZXR1cm4gaG4ucmVsYXRpdmVUaW1lKEtlfHwxLCEhcHQsQ2UsSXQpfXZhciB6Nj1NYXRoLmFicztmdW5jdGlvbiBuMihDZSl7cmV0dXJuKENlPjApLShDZTwwKXx8''@;'; put 'put ''K0NlfWZ1bmN0aW9uIFU2KCl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO3ZhciBJdCxobixxbixyaSxNYSxmcyxIdSxkZCxDZT16Nih0aGlzLl9taWxsaXNlY29uZHMpLzFlMyxLZT16Nih0aGlzLl9kYXlzKSxwdD16Nih0aGlzLl9t''@;'; put 'put ''b250aHMpLFJvPXRoaXMuYXNTZWNvbmRzKCk7cmV0dXJuIFJvPyhJdD1XZShDZS82MCksaG49V2UoSXQvNjApLENlJT02MCxJdCU9NjAscW49V2UocHQvMTIpLHB0JT0xMixyaT1DZT9DZS50b0ZpeGVkKDMpLnJlcGxhY2UoL1wuPzArJC8sIiIpOiIiLE1hPVJvPDA/Ii0iOiIiLGZzPW4yKHRo''@;'; put 'put ''aXMuX21vbnRocykhPT1uMihSbyk/Ii0iOiIiLEh1PW4yKHRoaXMuX2RheXMpIT09bjIoUm8pPyItIjoiIixkZD1uMih0aGlzLl9taWxsaXNlY29uZHMpIT09bjIoUm8pPyItIjoiIixNYSsiUCIrKHFuP2ZzK3FuKyJZIjoiIikrKHB0P2ZzK3B0KyJNIjoiIikrKEtlP0h1K0tlKyJEIjoiIikr''@;'; put 'put ''KGhufHxJdHx8Q2U/IlQiOiIiKSsoaG4/ZGQraG4rIkgiOiIiKSsoSXQ/ZGQrSXQrIk0iOiIiKSsoQ2U/ZGQrcmkrIlMiOiIiKSk6IlAwRCJ9dmFyIG1zPWxmLnByb3RvdHlwZTtyZXR1cm4gbXMuaXNWYWxpZD1mdW5jdGlvbiByNSgpe3JldHVybiB0aGlzLl9pc1ZhbGlkfSxtcy5hYnM9ZnVu''@;'; put 'put ''Y3Rpb24gbmMoKXt2YXIgQ2U9dGhpcy5fZGF0YTtyZXR1cm4gdGhpcy5fbWlsbGlzZWNvbmRzPUhjKHRoaXMuX21pbGxpc2Vjb25kcyksdGhpcy5fZGF5cz1IYyh0aGlzLl9kYXlzKSx0aGlzLl9tb250aHM9SGModGhpcy5fbW9udGhzKSxDZS5taWxsaXNlY29uZHM9SGMoQ2UubWlsbGlzZWNv''@;'; put 'put ''bmRzKSxDZS5zZWNvbmRzPUhjKENlLnNlY29uZHMpLENlLm1pbnV0ZXM9SGMoQ2UubWludXRlcyksQ2UuaG91cnM9SGMoQ2UuaG91cnMpLENlLm1vbnRocz1IYyhDZS5tb250aHMpLENlLnllYXJzPUhjKENlLnllYXJzKSx0aGlzfSxtcy5hZGQ9ZnVuY3Rpb24gSjAoQ2UsS2Upe3JldHVybiB0''@;'; put 'put ''dSh0aGlzLENlLEtlLDEpfSxtcy5zdWJ0cmFjdD1mdW5jdGlvbiBzbChDZSxLZSl7cmV0dXJuIHR1KHRoaXMsQ2UsS2UsLTEpfSxtcy5hcz1mdW5jdGlvbiB5NChDZSl7aWYoIXRoaXMuaXNWYWxpZCgpKXJldHVybiBOYU47dmFyIEtlLHB0LEl0PXRoaXMuX21pbGxpc2Vjb25kcztpZigibW9u''@;'; put 'put ''dGgiPT09KENlPV90KENlKSl8fCJxdWFydGVyIj09PUNlfHwieWVhciI9PT1DZSlzd2l0Y2goS2U9dGhpcy5fZGF5cytJdC84NjRlNSxwdD10aGlzLl9tb250aHMrYmEoS2UpLENlKXtjYXNlIm1vbnRoIjpyZXR1cm4gcHQ7Y2FzZSJxdWFydGVyIjpyZXR1cm4gcHQvMztjYXNlInllYXIiOnJl''@;'; put 'put ''dHVybiBwdC8xMn1lbHNlIHN3aXRjaChLZT10aGlzLl9kYXlzK01hdGgucm91bmQodmYodGhpcy5fbW9udGhzKSksQ2Upe2Nhc2Uid2VlayI6cmV0dXJuIEtlLzcrSXQvNjA0OGU1O2Nhc2UiZGF5IjpyZXR1cm4gS2UrSXQvODY0ZTU7Y2FzZSJob3VyIjpyZXR1cm4gMjQqS2UrSXQvMzZlNTtj''@;'; put 'put ''YXNlIm1pbnV0ZSI6cmV0dXJuIDE0NDAqS2UrSXQvNmU0O2Nhc2Uic2Vjb25kIjpyZXR1cm4gODY0MDAqS2UrSXQvMWUzO2Nhc2UibWlsbGlzZWNvbmQiOnJldHVybiBNYXRoLmZsb29yKDg2NGU1KktlKStJdDtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biB1bml0ICIrQ2UpfX0s''@;'; put 'put ''bXMuYXNNaWxsaXNlY29uZHM9amwsbXMuYXNTZWNvbmRzPV80LG1zLmFzTWludXRlcz1iZixtcy5hc0hvdXJzPXVkLG1zLmFzRGF5cz13MCxtcy5hc1dlZWtzPVFoLG1zLmFzTW9udGhzPWUyLG1zLmFzUXVhcnRlcnM9cDUsbXMuYXNZZWFycz15Zixtcy52YWx1ZU9mPXdhLG1zLl9idWJibGU9''@;'; put 'put ''ZnVuY3Rpb24gTDEoKXt2YXIgaG4scW4scmksUm8sTWEsQ2U9dGhpcy5fbWlsbGlzZWNvbmRzLEtlPXRoaXMuX2RheXMscHQ9dGhpcy5fbW9udGhzLEl0PXRoaXMuX2RhdGE7cmV0dXJuIENlPj0wJiZLZT49MCYmcHQ+PTB8fENlPD0wJiZLZTw9MCYmcHQ8PTB8fChDZSs9ODY0ZTUqZGModmYo''@;'; put 'put ''cHQpK0tlKSxLZT0wLHB0PTApLEl0Lm1pbGxpc2Vjb25kcz1DZSUxZTMsaG49V2UoQ2UvMWUzKSxJdC5zZWNvbmRzPWhuJTYwLHFuPVdlKGhuLzYwKSxJdC5taW51dGVzPXFuJTYwLHJpPVdlKHFuLzYwKSxJdC5ob3Vycz1yaSUyNCxLZSs9V2UocmkvMjQpLHB0Kz1NYT1XZShiYShLZSkpLEtl''@;'; put 'put ''LT1kYyh2ZihNYSkpLFJvPVdlKHB0LzEyKSxwdCU9MTIsSXQuZGF5cz1LZSxJdC5tb250aHM9cHQsSXQueWVhcnM9Um8sdGhpc30sbXMuY2xvbmU9ZnVuY3Rpb24gQjYoKXtyZXR1cm4gS2wodGhpcyl9LG1zLmdldD1mdW5jdGlvbiB0MihDZSl7cmV0dXJuIENlPV90KENlKSx0aGlzLmlzVmFs''@;'; put 'put ''aWQoKT90aGlzW0NlKyJzIl0oKTpOYU59LG1zLm1pbGxpc2Vjb25kcz13NCxtcy5zZWNvbmRzPU8zLG1zLm1pbnV0ZXM9aGMsbXMuaG91cnM9ZzUsbXMuZGF5cz1QdSxtcy53ZWVrcz1mdW5jdGlvbiBfZigpe3JldHVybiBXZSh0aGlzLmRheXMoKS83KX0sbXMubW9udGhzPUZ1LG1zLnllYXJz''@;'; put 'put ''PW51LG1zLmh1bWFuaXplPWZ1bmN0aW9uIF92KENlLEtlKXtpZighdGhpcy5pc1ZhbGlkKCkpcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7dmFyIGhuLHFuLHB0PSExLEl0PU5jO3JldHVybiJvYmplY3QiPT10eXBlb2YgQ2UmJihLZT1DZSxDZT0hMSksImJvb2xlYW4i''@;'; put 'put ''PT10eXBlb2YgQ2UmJihwdD1DZSksIm9iamVjdCI9PXR5cGVvZiBLZSYmKEl0PU9iamVjdC5hc3NpZ24oe30sTmMsS2UpLG51bGwhPUtlLnMmJm51bGw9PUtlLnNzJiYoSXQuc3M9S2Uucy0xKSkscW49ZnVuY3Rpb24gR3coQ2UsS2UscHQsSXQpe3ZhciBobj1LbChDZSkuYWJzKCkscW49UTAo''@;'; put 'put ''aG4uYXMoInMiKSkscmk9UTAoaG4uYXMoIm0iKSksUm89UTAoaG4uYXMoImgiKSksTWE9UTAoaG4uYXMoImQiKSksZnM9UTAoaG4uYXMoIk0iKSksSHU9UTAoaG4uYXMoInciKSksZGQ9UTAoaG4uYXMoInkiKSkscjI9cW48PXB0LnNzJiZbInMiLHFuXXx8cW48cHQucyYmWyJzcyIscW5dfHxy''@;'; put 'put ''aTw9MSYmWyJtIl18fHJpPHB0Lm0mJlsibW0iLHJpXXx8Um88PTEmJlsiaCJdfHxSbzxwdC5oJiZbImhoIixSb118fE1hPD0xJiZbImQiXXx8TWE8cHQuZCYmWyJkZCIsTWFdO3JldHVybiBudWxsIT1wdC53JiYocjI9cjJ8fEh1PD0xJiZbInciXXx8SHU8cHQudyYmWyJ3dyIsSHVdKSwocjI9''@;'; put 'put ''cjJ8fGZzPD0xJiZbIk0iXXx8ZnM8cHQuTSYmWyJNTSIsZnNdfHxkZDw9MSYmWyJ5Il18fFsieXkiLGRkXSlbMl09S2UscjJbM109K0NlPjAscjJbNF09SXQsQzQuYXBwbHkobnVsbCxyMil9KHRoaXMsIXB0LEl0LGhuPXRoaXMubG9jYWxlRGF0YSgpKSxwdCYmKHFuPWhuLnBhc3RGdXR1cmUo''@;'; put 'put ''K3RoaXMscW4pKSxobi5wb3N0Zm9ybWF0KHFuKX0sbXMudG9JU09TdHJpbmc9VTYsbXMudG9TdHJpbmc9VTYsbXMudG9KU09OPVU2LG1zLmxvY2FsZT1xbyxtcy5sb2NhbGVEYXRhPWhmLG1zLnRvSXNvU3RyaW5nPVNlKCJ0b0lzb1N0cmluZygpIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2Ug''@;'; put 'put ''dG9JU09TdHJpbmcoKSBpbnN0ZWFkIChub3RpY2UgdGhlIGNhcGl0YWxzKSIsVTYpLG1zLmxhbmc9TnIsc2UoIlgiLDAsMCwidW5peCIpLHNlKCJ4IiwwLDAsInZhbHVlT2YiKSxMbigieCIsUXQpLExuKCJYIiwvWystXT9cZCsoXC5cZHsxLDN9KT8vKSxodCgiWCIsZnVuY3Rpb24oQ2UsS2Us''@;'; put 'put ''cHQpe3B0Ll9kPW5ldyBEYXRlKDFlMypwYXJzZUZsb2F0KENlKSl9KSxodCgieCIsZnVuY3Rpb24oQ2UsS2UscHQpe3B0Ll9kPW5ldyBEYXRlKFR0KENlKSl9KSx5LnZlcnNpb249IjIuMzAuMSIsZnVuY3Rpb24gZyhDZSl7ST1DZX0ob2wpLHkuZm49VWkseS5taW49ZnVuY3Rpb24gRDEoKXty''@;'; put 'put ''ZXR1cm4gUWQoImlzQmVmb3JlIixbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSl9LHkubWF4PWZ1bmN0aW9uIE1yKCl7cmV0dXJuIFFkKCJpc0FmdGVyIixbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSl9LHkubm93PWZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93P0RhdGUubm93KCk6K25l''@;'; put 'put ''dyBEYXRlfSx5LnV0Yz1VLHkudW5peD1mdW5jdGlvbiBKaChDZSl7cmV0dXJuIG9sKDFlMypDZSl9LHkubW9udGhzPWZ1bmN0aW9uIGI0KENlLEtlKXtyZXR1cm4geGMoQ2UsS2UsIm1vbnRocyIpfSx5LmlzRGF0ZT1OLHkubG9jYWxlPWNyLHkuaW52YWxpZD1KLHkuZHVyYXRpb249S2wseS5p''@;'; put 'put ''c01vbWVudD1fZSx5LndlZWtkYXlzPWZ1bmN0aW9uIHFpKENlLEtlLHB0KXtyZXR1cm4gcjAoQ2UsS2UscHQsIndlZWtkYXlzIil9LHkucGFyc2Vab25lPWZ1bmN0aW9uIFl3KCl7cmV0dXJuIG9sLmFwcGx5KG51bGwsYXJndW1lbnRzKS5wYXJzZVpvbmUoKX0seS5sb2NhbGVEYXRhPXJvLHku''@;'; put 'put ''aXNEdXJhdGlvbj1vNSx5Lm1vbnRoc1Nob3J0PWZ1bmN0aW9uIEJsKENlLEtlKXtyZXR1cm4geGMoQ2UsS2UsIm1vbnRoc1Nob3J0Iil9LHkud2Vla2RheXNNaW49ZnVuY3Rpb24gdWMoQ2UsS2UscHQpe3JldHVybiByMChDZSxLZSxwdCwid2Vla2RheXNNaW4iKX0seS5kZWZpbmVMb2NhbGU9''@;'; put 'put ''bWkseS51cGRhdGVMb2NhbGU9ZnVuY3Rpb24gSHIoQ2UsS2Upe2lmKG51bGwhPUtlKXt2YXIgcHQsSXQsaG49Tmw7bnVsbCE9SGFbQ2VdJiZudWxsIT1IYVtDZV0ucGFyZW50TG9jYWxlP0hhW0NlXS5zZXQoeChIYVtDZV0uX2NvbmZpZyxLZSkpOihudWxsIT0oSXQ9Ym4oQ2UpKSYmKGhuPUl0''@;'; put 'put ''Ll9jb25maWcpLEtlPXgoaG4sS2UpLG51bGw9PUl0JiYoS2UuYWJicj1DZSksKHB0PW5ldyBDKEtlKSkucGFyZW50TG9jYWxlPUhhW0NlXSxIYVtDZV09cHQpLGNyKENlKX1lbHNlIG51bGwhPUhhW0NlXSYmKG51bGwhPUhhW0NlXS5wYXJlbnRMb2NhbGU/KEhhW0NlXT1IYVtDZV0ucGFyZW50''@;'; put 'put ''TG9jYWxlLENlPT09Y3IoKSYmY3IoQ2UpKTpudWxsIT1IYVtDZV0mJmRlbGV0ZSBIYVtDZV0pO3JldHVybiBIYVtDZV19LHkubG9jYWxlcz1mdW5jdGlvbiBzbygpe3JldHVybiBUKEhhKX0seS53ZWVrZGF5c1Nob3J0PWZ1bmN0aW9uIFpvKENlLEtlLHB0KXtyZXR1cm4gcjAoQ2UsS2UscHQs''@;'; put 'put ''IndlZWtkYXlzU2hvcnQiKX0seS5ub3JtYWxpemVVbml0cz1fdCx5LnJlbGF0aXZlVGltZVJvdW5kaW5nPWZ1bmN0aW9uICR3KENlKXtyZXR1cm4gdm9pZCAwPT09Q2U/UTA6ImZ1bmN0aW9uIj09dHlwZW9mIENlJiYoUTA9Q2UsITApfSx5LnJlbGF0aXZlVGltZVRocmVzaG9sZD1mdW5jdGlv''@;'; put 'put ''biBqNihDZSxLZSl7cmV0dXJuIHZvaWQgMCE9PU5jW0NlXSYmKHZvaWQgMD09PUtlP05jW0NlXTooTmNbQ2VdPUtlLCJzIj09PUNlJiYoTmMuc3M9S2UtMSksITApKX0seS5jYWxlbmRhckZvcm1hdD1mdW5jdGlvbiBsNShDZSxLZSl7dmFyIHB0PUNlLmRpZmYoS2UsImRheXMiLCEwKTtyZXR1''@;'; put 'put ''cm4gcHQ8LTY/InNhbWVFbHNlIjpwdDwtMT8ibGFzdFdlZWsiOnB0PDA/Imxhc3REYXkiOnB0PDE/InNhbWVEYXkiOnB0PDI/Im5leHREYXkiOnB0PDc/Im5leHRXZWVrIjoic2FtZUVsc2UifSx5LnByb3RvdHlwZT1VaSx5LkhUTUw1X0ZNVD17REFURVRJTUVfTE9DQUw6IllZWVktTU0tRERU''@;'; put 'put ''SEg6bW0iLERBVEVUSU1FX0xPQ0FMX1NFQ09ORFM6IllZWVktTU0tRERUSEg6bW06c3MiLERBVEVUSU1FX0xPQ0FMX01TOiJZWVlZLU1NLUREVEhIOm1tOnNzLlNTUyIsREFURToiWVlZWS1NTS1ERCIsVElNRToiSEg6bW0iLFRJTUVfU0VDT05EUzoiSEg6bW06c3MiLFRJTUVfTVM6IkhIOm1t''@;'; put 'put ''OnNzLlNTUyIsV0VFSzoiR0dHRy1bV11XVyIsTU9OVEg6IllZWVktTU0ifSx5fSgpfSw3ODM3NTpmdW5jdGlvbih1ZSl7dWUuZXhwb3J0cz1mdW5jdGlvbigpeyJ1c2Ugc3RyaWN0Ijt0eXBlb2YgZ2xvYmFsVGhpczwidSJ8fHR5cGVvZiB3aW5kb3c8InUifHx0eXBlb2YgZ2xvYmFsPCJ1IiYm''@;'; put 'put ''Z2xvYmFsO3ZhciBfPXt9LEk9e2V4cG9ydHM6e319O0kuZXhwb3J0cz1mdW5jdGlvbiBzaShIdCl7cmV0dXJuIEh0JiZIdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoSHQsImRlZmF1bHQiKT9IdC5kZWZhdWx0Okh0fSh7bGFuZ3VhZ2VUYWc6ImJn''@;'; put 'put ''IixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHUwNDE4IixtaWxsaW9uOiJcdTA0MTAiLGJpbGxpb246Ik0iLHRyaWxsaW9uOiJUIn0sb3JkaW5hbDooKT0+Ii4iLGN1cnJlbmN5OntzeW1ib2w6Ilx1MDQzYlx1MDQzMi4i''@;'; put 'put ''LGNvZGU6IkJHTiJ9fSk7dmFyIHk9SS5leHBvcnRzLGc9e2V4cG9ydHM6e319O2cuZXhwb3J0cz1mdW5jdGlvbiBzaShIdCl7cmV0dXJuIEh0JiZIdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoSHQsImRlZmF1bHQiKT9IdC5kZWZhdWx0Okh0fSh7''@;'; put 'put ''bGFuZ3VhZ2VUYWc6ImNzLUNaIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ilx4YTAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoidGlzLiIsbWlsbGlvbjoibWlsLiIsYmlsbGlvbjoibWxkLiIsdHJpbGxpb246ImJpbC4ifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''Ii4ifSxzcGFjZVNlcGFyYXRlZDohMCxjdXJyZW5jeTp7c3ltYm9sOiJLXHUwMTBkIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiQ1pLIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRD''@;'; put 'put ''dXJyZW5jeTohMCxzcGFjZVNlcGFyYXRlZEFiYnJldmlhdGlvbjohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3Nh''@;'; put 'put ''OjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRo''@;'; put 'put ''b3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pO3ZhciBCPWcuZXhwb3J0cyx3PXtleHBvcnRzOnt9fTshZnVuY3Rpb24ob3IseG8pe29yLmV4cG9ydHM9ZnVuY3Rpb24gc2koSHQpe3JldHVybiBIdCYmSHQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0''@;'; put 'put ''eS5jYWxsKEh0LCJkZWZhdWx0Iik/SHQuZGVmYXVsdDpIdH0oe2xhbmd1YWdlVGFnOiJkYS1ESyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InQiLG1pbGxpb246Im1pbyIsYmlsbGlvbjoibWlhIix0cmlsbGlvbjoiYiJ9''@;'; put 'put ''LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6ImtyIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiREtLIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0''@;'; put 'put ''ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNh''@;'; put 'put ''bmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3Nh''@;'; put 'put ''OjB9fX0pfSh3KTt2YXIgUD13LmV4cG9ydHMsRj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG9yLHhvKXtvci5leHBvcnRzPWZ1bmN0aW9uIHNpKEh0KXtyZXR1cm4gSHQmJkh0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChIdCwiZGVmYXVsdCIpP0h0''@;'; put 'put ''LmRlZmF1bHQ6SHR9KHtsYW5ndWFnZVRhZzoiZGUtQVQiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4i''@;'; put 'put ''LiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIsY29kZToiRVVSIn19KX0oRik7dmFyIE89Ri5leHBvcnRzLHo9e2V4cG9ydHM6e319OyFmdW5jdGlvbihvcix4byl7b3IuZXhwb3J0cz1mdW5jdGlvbiBzaShIdCl7cmV0dXJuIEh0JiZIdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBl''@;'; put 'put ''Lmhhc093blByb3BlcnR5LmNhbGwoSHQsImRlZmF1bHQiKT9IdC5kZWZhdWx0Okh0fSh7bGFuZ3VhZ2VUYWc6ImRlLUNIIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ilx1MjAxOSIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJi''@;'; put 'put ''Iix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6IkNIRiIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkNIRiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVk''@;'; put 'put ''OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRl''@;'; put 'put ''ZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KHop''@;'; put 'put ''O3ZhciBOPXouZXhwb3J0cyxMPXtleHBvcnRzOnt9fTshZnVuY3Rpb24ob3IseG8pe29yLmV4cG9ydHM9ZnVuY3Rpb24gc2koSHQpe3JldHVybiBIdCYmSHQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEh0LCJkZWZhdWx0Iik/SHQuZGVmYXVsdDpI''@;'; put 'put ''dH0oe2xhbmd1YWdlVGFnOiJkZS1ERSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Ik1pIixiaWxsaW9uOiJNYSIsdHJpbGxpb246IkJpIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sc3Bh''@;'; put 'put ''Y2VTZXBhcmF0ZWQ6ITAsY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiRVVSIn0sY3VycmVuY3lGb3JtYXQ6e3RvdGFsTGVuZ3RoOjQsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VT''@;'; put 'put ''ZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRT''@;'; put 'put ''ZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KEwpO3ZhciBLPUwuZXhwb3J0cyxVPXtleHBvcnRzOnt9fTshZnVuY3Rpb24ob3IseG8pe29yLmV4cG9y''@;'; put 'put ''dHM9ZnVuY3Rpb24gc2koSHQpe3JldHVybiBIdCYmSHQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEh0LCJkZWZhdWx0Iik/SHQuZGVmYXVsdDpIdH0oe2xhbmd1YWdlVGFnOiJkZS1MSSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiInIixkZWNpbWFs''@;'; put 'put ''OiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiQ0hGIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiQ0hGIn0sY3VycmVuY3lG''@;'; put 'put ''b3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1''@;'; put 'put ''bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVj''@;'; put 'put ''aW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShVKTt2YXIgVz1VLmV4cG9ydHMsWT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG9yLHhvKXtvci5leHBvcnRzPWZ1bmN0aW9uIHNpKEh0KXtyZXR1cm4g''@;'; put 'put ''SHQmJkh0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChIdCwiZGVmYXVsdCIpP0h0LmRlZmF1bHQ6SHR9KHtsYW5ndWFnZVRhZzoiZWwiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5k''@;'; put 'put ''OiJcdTAzYzciLG1pbGxpb246Ilx1MDNiNSIsYmlsbGlvbjoiXHUwM2I0Iix0cmlsbGlvbjoiXHUwM2M0In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixjb2RlOiJFVVIifX0pfShZKTt2YXIgWD1ZLmV4cG9ydHMsZWU9e2V4cG9ydHM6''@;'; put 'put ''e319OyFmdW5jdGlvbihvcix4byl7b3IuZXhwb3J0cz1mdW5jdGlvbiBzaShIdCl7cmV0dXJuIEh0JiZIdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoSHQsImRlZmF1bHQiKT9IdC5kZWZhdWx0Okh0fSh7bGFuZ3VhZ2VUYWc6ImVuLUFVIixkZWxp''@;'; put 'put ''bWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOkh0PT57bGV0IFhyPUh0JTEwO3JldHVybiAxPT1+fihIdCUxMDAvMTApPyJ0aCI6MT09PVhyPyJz''@;'; put 'put ''dCI6Mj09PVhyPyJuZCI6Mz09PVhyPyJyZCI6InRoIn0sY3VycmVuY3k6e3N5bWJvbDoiJCIscG9zaXRpb246InByZWZpeCIsY29kZToiQVVEIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0''@;'; put 'put ''ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjJ9LGZ1bGxXaXRoVHdvRGVjaW1hbHNO''@;'; put 'put ''b0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShlZSk7dmFyIEo9ZWUuZXhwb3J0cyxyZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9u''@;'; put 'put ''KG9yLHhvKXtvci5leHBvcnRzPWZ1bmN0aW9uIHNpKEh0KXtyZXR1cm4gSHQmJkh0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChIdCwiZGVmYXVsdCIpP0h0LmRlZmF1bHQ6SHR9KHtsYW5ndWFnZVRhZzoiZW4tR0IiLGRlbGltaXRlcnM6e3Rob3Vz''@;'; put 'put ''YW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6SHQ9PntsZXQgWHI9SHQlMTA7cmV0dXJuIDE9PX5+KEh0JTEwMC8xMCk/InRoIjoxPT09WHI/InN0IjoyPT09WHI/Im5k''@;'; put 'put ''IjozPT09WHI/InJkIjoidGgifSxjdXJyZW5jeTp7c3ltYm9sOiJceGEzIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJHQlAifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMSxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5''@;'; put 'put ''OiExLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITEsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWQ6ITEsbWFudGlz''@;'; put 'put ''c2E6Mn0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWQ6ITEsbWFudGlzc2E6MH19fSl9KHJl''@;'; put 'put ''KTt2YXIgaWU9cmUuZXhwb3J0cyxsZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG9yLHhvKXtvci5leHBvcnRzPWZ1bmN0aW9uIHNpKEh0KXtyZXR1cm4gSHQmJkh0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChIdCwiZGVmYXVsdCIpP0h0LmRlZmF1''@;'; put 'put ''bHQ6SHR9KHtsYW5ndWFnZVRhZzoiZW4tSUUiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6SHQ9PntsZXQgWHI9SHQlMTA7cmV0dXJu''@;'; put 'put ''IDE9PX5+KEh0JTEwMC8xMCk/InRoIjoxPT09WHI/InN0IjoyPT09WHI/Im5kIjozPT09WHI/InJkIjoidGgifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IkVVUiJ9fSl9KGxlKTt2YXIgbWU9bGUuZXhwb3J0cyxfZT17ZXhwb3J0czp7fX07IWZ1''@;'; put 'put ''bmN0aW9uKG9yLHhvKXtvci5leHBvcnRzPWZ1bmN0aW9uIHNpKEh0KXtyZXR1cm4gSHQmJkh0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChIdCwiZGVmYXVsdCIpP0h0LmRlZmF1bHQ6SHR9KHtsYW5ndWFnZVRhZzoiZW4tTloiLGRlbGltaXRlcnM6''@;'; put 'put ''e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6SHQ9PntsZXQgWHI9SHQlMTA7cmV0dXJuIDE9PX5+KEh0JTEwMC8xMCk/InRoIjoxPT09WHI/InN0IjoyPT09''@;'; put 'put ''WHI/Im5kIjozPT09WHI/InJkIjoidGgifSxjdXJyZW5jeTp7c3ltYm9sOiIkIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJOWkQifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJl''@;'; put 'put ''bmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6Mn0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVu''@;'; put 'put ''Y3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KF9lKTt2YXIgVGU9X2UuZXhwb3J0cyxTZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG9yLHhv''@;'; put 'put ''KXtvci5leHBvcnRzPWZ1bmN0aW9uIHNpKEh0KXtyZXR1cm4gSHQmJkh0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChIdCwiZGVmYXVsdCIpP0h0LmRlZmF1bHQ6SHR9KHtsYW5ndWFnZVRhZzoiZW4tWkEiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoi''@;'; put 'put ''ICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6SHQ9PntsZXQgWHI9SHQlMTA7cmV0dXJuIDE9PX5+KEh0JTEwMC8xMCk/InRoIjoxPT09WHI/InN0IjoyPT09WHI/Im5kIjozPT09''@;'; put 'put ''WHI/InJkIjoidGgifSxjdXJyZW5jeTp7c3ltYm9sOiJSIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJaQVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJh''@;'; put 'put ''Z2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6Mn0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3Nh''@;'; put 'put ''OjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KFNlKTt2YXIgemU9U2UuZXhwb3J0cyxWPXtleHBvcnRzOnt9fTshZnVuY3Rpb24ob3IseG8pe29yLmV4cG9ydHM9''@;'; put 'put ''ZnVuY3Rpb24gc2koSHQpe3JldHVybiBIdCYmSHQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEh0LCJkZWZhdWx0Iik/SHQuZGVmYXVsdDpIdH0oe2xhbmd1YWdlVGFnOiJlcy1BUiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIuIixkZWNpbWFsOiIs''@;'; put 'put ''In0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im1tIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6SHQ9PntsZXQgWHI9SHQlMTA7cmV0dXJuIDE9PT1Ycnx8Mz09PVhyPyJlciI6Mj09PVhyPyJkbyI6Nz09PVhyfHwwPT09WHI/Im1vIjo4PT09WHI/InZv''@;'; put 'put ''Ijo5PT09WHI/Im5vIjoidG8ifSxjdXJyZW5jeTp7c3ltYm9sOiIkIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiQVJTIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeToh''@;'; put 'put ''MCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6''@;'; put 'put ''ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShWKTt2''@;'; put 'put ''YXIgcD1WLmV4cG9ydHMsYj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG9yLHhvKXtvci5leHBvcnRzPWZ1bmN0aW9uIHNpKEh0KXtyZXR1cm4gSHQmJkh0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChIdCwiZGVmYXVsdCIpP0h0LmRlZmF1bHQ6SHR9''@;'; put 'put ''KHtsYW5ndWFnZVRhZzoiZXMtQ0wiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOkh0PT57bGV0IFhyPUh0JTEwO3JldHVybiAxPT09''@;'; put 'put ''WHJ8fDM9PT1Ycj8iZXIiOjI9PT1Ycj8iZG8iOjc9PT1Ycnx8MD09PVhyPyJtbyI6OD09PVhyPyJ2byI6OT09PVhyPyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiJCIscG9zaXRpb246InByZWZpeCIsY29kZToiQ0xQIn0sY3VycmVuY3lGb3JtYXQ6e291dHB1dDoiY3VycmVuY3kiLHRo''@;'; put 'put ''b3VzYW5kU2VwYXJhdGVkOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBh''@;'; put 'put ''cmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0p''@;'; put 'put ''fShiKTt2YXIgeD1iLmV4cG9ydHMsQz17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG9yLHhvKXtvci5leHBvcnRzPWZ1bmN0aW9uIHNpKEh0KXtyZXR1cm4gSHQmJkh0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChIdCwiZGVmYXVsdCIpP0h0LmRlZmF1''@;'; put 'put ''bHQ6SHR9KHtsYW5ndWFnZVRhZzoiZXMtQ08iLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOkh0PT57bGV0IFhyPUh0JTEwO3JldHVy''@;'; put 'put ''biAxPT09WHJ8fDM9PT1Ycj8iZXIiOjI9PT1Ycj8iZG8iOjc9PT1Ycnx8MD09PVhyPyJtbyI6OD09PVhyPyJ2byI6OT09PVhyPyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiRVVSIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5k''@;'; put 'put ''U2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50''@;'; put 'put ''aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDoh''@;'; put 'put ''MCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oQyk7dmFyIFQ9Qy5leHBvcnRzLEg9e2V4cG9ydHM6e319OyFmdW5jdGlvbihvcix4byl7b3IuZXhwb3J0cz1mdW5jdGlvbiBzaShIdCl7cmV0dXJuIEh0JiZIdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093''@;'; put 'put ''blByb3BlcnR5LmNhbGwoSHQsImRlZmF1bHQiKT9IdC5kZWZhdWx0Okh0fSh7bGFuZ3VhZ2VUYWc6ImVzLUNSIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibW0iLGJpbGxpb246ImIiLHRyaWxsaW9u''@;'; put 'put ''OiJ0In0sb3JkaW5hbDpIdD0+e2xldCBYcj1IdCUxMDtyZXR1cm4gMT09PVhyfHwzPT09WHI/ImVyIjoyPT09WHI/ImRvIjo3PT09WHJ8fDA9PT1Ycj8ibW8iOjg9PT1Ycj8idm8iOjk9PT1Ycj8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhMSIscG9zaXRpb246InBvc3RmaXgi''@;'; put 'put ''LGNvZGU6IkNSQyJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFy''@;'; put 'put ''YXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFy''@;'; put 'put ''YXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oSCk7dmFyIGo9SC5leHBvcnRzLEU9e2V4cG9ydHM6e319OyFmdW5jdGlvbihvcix4byl7b3IuZXhwb3J0cz1m''@;'; put 'put ''dW5jdGlvbiBzaShIdCl7cmV0dXJuIEh0JiZIdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoSHQsImRlZmF1bHQiKT9IdC5kZWZhdWx0Okh0fSh7bGFuZ3VhZ2VUYWc6ImVzLUVTIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6Iiwi''@;'; put 'put ''fSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibW0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpIdD0+e2xldCBYcj1IdCUxMDtyZXR1cm4gMT09PVhyfHwzPT09WHI/ImVyIjoyPT09WHI/ImRvIjo3PT09WHJ8fDA9PT1Ycj8ibW8iOjg9PT1Ycj8idm8i''@;'; put 'put ''Ojk9PT1Ycj8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkVVUiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVu''@;'; put 'put ''Y3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJh''@;'; put 'put ''dGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0o''@;'; put 'put ''RSk7dmFyIG09RS5leHBvcnRzLEE9e2V4cG9ydHM6e319OyFmdW5jdGlvbihvcix4byl7b3IuZXhwb3J0cz1mdW5jdGlvbiBzaShIdCl7cmV0dXJuIEh0JiZIdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoSHQsImRlZmF1bHQiKT9IdC5kZWZhdWx0''@;'; put 'put ''Okh0fSh7bGFuZ3VhZ2VUYWc6ImVzLU1YIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibW0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbihIdCl7bGV0IFhyPUh0JTEw''@;'; put 'put ''O3JldHVybiAxPT09WHJ8fDM9PT1Ycj8iZXIiOjI9PT1Ycj8iZG8iOjc9PT1Ycnx8MD09PVhyPyJtbyI6OD09PVhyPyJ2byI6OT09PVhyPyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiJCIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6Ik1YTiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2Fu''@;'; put 'put ''ZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFu''@;'; put 'put ''dGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6''@;'; put 'put ''ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KEEpO3ZhciBvZT1BLmV4cG9ydHMsdGU9e2V4cG9ydHM6e319OyFmdW5jdGlvbihvcix4byl7b3IuZXhwb3J0cz1mdW5jdGlvbiBzaShIdCl7cmV0dXJuIEh0JiZIdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhh''@;'; put 'put ''c093blByb3BlcnR5LmNhbGwoSHQsImRlZmF1bHQiKT9IdC5kZWZhdWx0Okh0fSh7bGFuZ3VhZ2VUYWc6ImVzLU5JIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibW0iLGJpbGxpb246ImIiLHRyaWxs''@;'; put 'put ''aW9uOiJ0In0sb3JkaW5hbDpIdD0+e2xldCBYcj1IdCUxMDtyZXR1cm4gMT09PVhyfHwzPT09WHI/ImVyIjoyPT09WHI/ImRvIjo3PT09WHJ8fDA9PT1Ycj8ibW8iOjg9PT1Ycj8idm8iOjk9PT1Ycj8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6IkMkIixwb3NpdGlvbjoicHJlZml4Iixj''@;'; put 'put ''b2RlOiJOSU8ifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0''@;'; put 'put ''ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0''@;'; put 'put ''ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KHRlKTt2YXIgc2U9dGUuZXhwb3J0cyx3ZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG9yLHhvKXtvci5leHBvcnRz''@;'; put 'put ''PWZ1bmN0aW9uIHNpKEh0KXtyZXR1cm4gSHQmJkh0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChIdCwiZGVmYXVsdCIpP0h0LmRlZmF1bHQ6SHR9KHtsYW5ndWFnZVRhZzoiZXMtUEUiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoi''@;'; put 'put ''LiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOkh0PT57bGV0IFhyPUh0JTEwO3JldHVybiAxPT09WHJ8fDM9PT1Ycj8iZXIiOjI9PT1Ycj8iZG8iOjc9PT1Ycnx8MD09PVhyPyJtbyI6OD09PVhyPyJ2''@;'; put 'put ''byI6OT09PVhyPyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiUy8uIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJQRU4ifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5''@;'; put 'put ''OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRl''@;'; put 'put ''ZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KHdl''@;'; put 'put ''KTt2YXIgVWU9d2UuZXhwb3J0cyxKZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG9yLHhvKXtvci5leHBvcnRzPWZ1bmN0aW9uIHNpKEh0KXtyZXR1cm4gSHQmJkh0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChIdCwiZGVmYXVsdCIpP0h0LmRlZmF1''@;'; put 'put ''bHQ6SHR9KHtsYW5ndWFnZVRhZzoiZXMtUFIiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOkh0PT57bGV0IFhyPUh0JTEwO3JldHVy''@;'; put 'put ''biAxPT09WHJ8fDM9PT1Ycj8iZXIiOjI9PT1Ycj8iZG8iOjc9PT1Ycnx8MD09PVhyPyJtbyI6OD09PVhyPyJ2byI6OT09PVhyPyJubyI6InRvIn0sY3VycmVuY3k6e3N5bWJvbDoiJCIscG9zaXRpb246InByZWZpeCIsY29kZToiVVNEIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJh''@;'; put 'put ''dGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291''@;'; put 'put ''dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVu''@;'; put 'put ''Y3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShKZSk7dmFyIGF0PUplLmV4cG9ydHMsTWU9e2V4cG9ydHM6e319OyFmdW5jdGlvbihvcix4byl7b3IuZXhwb3J0cz1mdW5jdGlvbiBzaShIdCl7cmV0dXJuIEh0JiZIdC5fX2VzTW9kdWxl''@;'; put 'put ''JiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoSHQsImRlZmF1bHQiKT9IdC5kZWZhdWx0Okh0fSh7bGFuZ3VhZ2VUYWc6ImVzLVNWIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoi''@;'; put 'put ''bW0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpIdD0+e2xldCBYcj1IdCUxMDtyZXR1cm4gMT09PVhyfHwzPT09WHI/ImVyIjoyPT09WHI/ImRvIjo3PT09WHJ8fDA9PT1Ycj8ibW8iOjg9PT1Ycj8idm8iOjk9PT1Ycj8ibm8iOiJ0byJ9LGN1cnJlbmN5OntzeW1ib2w6IiQi''@;'; put 'put ''LHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IlNWQyJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxM''@;'; put 'put ''ZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlz''@;'; put 'put ''c2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oTWUpO3ZhciB2ZT1NZS5leHBvcnRzLFhlPXtleHBvcnRzOnt9fTshZnVuY3Rp''@;'; put 'put ''b24ob3IseG8pe29yLmV4cG9ydHM9ZnVuY3Rpb24gc2koSHQpe3JldHVybiBIdCYmSHQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEh0LCJkZWZhdWx0Iik/SHQuZGVmYXVsdDpIdH0oe2xhbmd1YWdlVGFnOiJldC1FRSIsZGVsaW1pdGVyczp7dGhv''@;'; put 'put ''dXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InR1aCIsbWlsbGlvbjoibWxuIixiaWxsaW9uOiJtbGQiLHRyaWxsaW9uOiJ0cmwifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJw''@;'; put 'put ''b3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3Bh''@;'; put 'put ''Y2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNh''@;'; put 'put ''bmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KFhlKTt2YXIgamU9WGUuZXhwb3J0cyxEZT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG9yLHhvKXtv''@;'; put 'put ''ci5leHBvcnRzPWZ1bmN0aW9uIHNpKEh0KXtyZXR1cm4gSHQmJkh0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChIdCwiZGVmYXVsdCIpP0h0LmRlZmF1bHQ6SHR9KHtsYW5ndWFnZVRhZzoiZmEtSVIiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiXHUw''@;'; put 'put ''NjBjIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1MDY0N1x1MDYzMlx1MDYyN1x1MDYzMSIsbWlsbGlvbjoiXHUwNjQ1XHUwNmNjXHUwNjQ0XHUwNmNjXHUwNjQ4XHUwNjQ2IixiaWxsaW9uOiJcdTA2NDVcdTA2Y2NcdTA2NDRcdTA2Y2NcdTA2MjdcdTA2MzFcdTA2''@;'; put 'put ''MmYiLHRyaWxsaW9uOiJcdTA2MmFcdTA2MzFcdTA2Y2NcdTA2NDRcdTA2Y2NcdTA2NDhcdTA2NDYifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIlx1MDYyN1x1MDY0NSJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1ZmRmYyIsY29kZToiSVJSIn19KX0oRGUpO3ZhciBGZT1EZS5leHBvcnRzLFJl''@;'; put 'put ''PXtleHBvcnRzOnt9fTshZnVuY3Rpb24ob3IseG8pe29yLmV4cG9ydHM9ZnVuY3Rpb24gc2koSHQpe3JldHVybiBIdCYmSHQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEh0LCJkZWZhdWx0Iik/SHQuZGVmYXVsdDpIdH0oe2xhbmd1YWdlVGFnOiJm''@;'; put 'put ''aS1GSSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Ik0iLGJpbGxpb246IkciLHRyaWxsaW9uOiJUIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFj''@;'; put 'put ''Iixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiRVVSIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3Rh''@;'; put 'put ''bExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50''@;'; put 'put ''aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShSZSk7dmFyIEllPVJlLmV4cG9ydHMsVmU9e2V4cG9ydHM6e319OyFmdW5j''@;'; put 'put ''dGlvbihvcix4byl7b3IuZXhwb3J0cz1mdW5jdGlvbiBzaShIdCl7cmV0dXJuIEh0JiZIdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoSHQsImRlZmF1bHQiKT9IdC5kZWZhdWx0Okh0fSh7bGFuZ3VhZ2VUYWc6ImZpbC1QSCIsZGVsaW1pdGVyczp7''@;'; put 'put ''dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Im0iLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpIdD0+e2xldCBYcj1IdCUxMDtyZXR1cm4gMT09fn4oSHQlMTAwLzEwKT8idGgiOjE9PT1Ycj8ic3QiOjI9PT1Y''@;'; put 'put ''cj8ibmQiOjM9PT1Ycj8icmQiOiJ0aCJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBiMSIsY29kZToiUEhQIn19KX0oVmUpO3ZhciBrZT1WZS5leHBvcnRzLEFlPXtleHBvcnRzOnt9fTshZnVuY3Rpb24ob3IseG8pe29yLmV4cG9ydHM9ZnVuY3Rpb24gc2koSHQpe3JldHVybiBIdCYmSHQuX19l''@;'; put 'put ''c01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEh0LCJkZWZhdWx0Iik/SHQuZGVmYXVsdDpIdH0oe2xhbmd1YWdlVGFnOiJmci1DQSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1p''@;'; put 'put ''bGxpb246Ik0iLGJpbGxpb246IkciLHRyaWxsaW9uOiJUIn0sb3JkaW5hbDpIdD0+MT09PUh0PyJlciI6Ilx4ZThtZSIsc3BhY2VTZXBhcmF0ZWQ6ITAsY3VycmVuY3k6e3N5bWJvbDoiJCIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IlVTRCJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNl''@;'; put 'put ''cGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFu''@;'; put 'put ''dGlzc2E6Mn0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KEFlKTt2YXIgX3Q9QWUuZXhw''@;'; put 'put ''b3J0cyxydD17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG9yLHhvKXtvci5leHBvcnRzPWZ1bmN0aW9uIHNpKEh0KXtyZXR1cm4gSHQmJkh0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChIdCwiZGVmYXVsdCIpP0h0LmRlZmF1bHQ6SHR9KHtsYW5ndWFn''@;'; put 'put ''ZVRhZzoiZnItQ0giLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLiJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6SHQ9PjE9PT1IdD8iZXIiOiJceGU4bWUiLGN1cnJlbmN5OntzeW1i''@;'; put 'put ''b2w6IkNIRiIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IkNIRiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0''@;'; put 'put ''czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5j''@;'; put 'put ''eTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0ocnQpO3ZhciBRZT1ydC5leHBvcnRzLGRuPXtleHBvcnRzOnt9''@;'; put 'put ''fTshZnVuY3Rpb24ob3IseG8pe29yLmV4cG9ydHM9ZnVuY3Rpb24gc2koSHQpe3JldHVybiBIdCYmSHQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEh0LCJkZWZhdWx0Iik/SHQuZGVmYXVsdDpIdH0oe2xhbmd1YWdlVGFnOiJmci1GUiIsZGVsaW1p''@;'; put 'put ''dGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6ImsiLG1pbGxpb246Ik0iLGJpbGxpb246Ik1yZCIsdHJpbGxpb246ImJpbGxpb24ifSxvcmRpbmFsOkh0PT4xPT09SHQ/ImVyIjoiXHhlOG1lIixieXRlczp7YmluYXJ5U3VmZml4ZXM6WyJv''@;'; put 'put ''IiwiS2lvIiwiTWlvIiwiR2lvIiwiVGlvIiwiUGlvIiwiRWlvIiwiWmlvIiwiWWlvIl0sZGVjaW1hbFN1ZmZpeGVzOlsibyIsIktvIiwiTW8iLCJHbyIsIlRvIiwiUG8iLCJFbyIsIlpvIiwiWW8iXX0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToi''@;'; put 'put ''RVVSIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEw''@;'; put 'put ''LGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEw''@;'; put 'put ''fSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShkbik7dmFyIHl0PWRuLmV4cG9ydHMsTXQ9e2V4cG9ydHM6e319OyFmdW5jdGlvbihvcix4byl7b3IuZXhwb3J0cz1mdW5j''@;'; put 'put ''dGlvbiBzaShIdCl7cmV0dXJuIEh0JiZIdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoSHQsImRlZmF1bHQiKT9IdC5kZWZhdWx0Okh0fSh7bGFuZ3VhZ2VUYWc6ImhlLUlMIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxh''@;'; put 'put ''YmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHUwNWQwXHUwNWRjXHUwNWUzIixtaWxsaW9uOiJcdTA1ZGVcdTA1ZDlcdTA1ZGNcdTA1ZDlcdTA1ZDVcdTA1ZGYiLGJpbGxpb246Ilx1MDVkZVx1MDVkOVx1MDVkY1x1MDVkOVx1MDVkMFx1MDVlOFx1MDVkMyIsdHJpbGxpb246Ilx1MDVkOFx1MDVl''@;'; put 'put ''OFx1MDVkOVx1MDVkY1x1MDVkOVx1MDVkNVx1MDVkZiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYSIscG9zaXRpb246InByZWZpeCIsY29kZToiSUxTIn0sb3JkaW5hbDooKT0+IiIsY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBh''@;'; put 'put ''cmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3Bh''@;'; put 'put ''Y2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5k''@;'; put 'put ''U2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShNdCk7dmFyIER0PU10LmV4cG9ydHMsaXQ9e2V4cG9ydHM6e319OyFmdW5jdGlvbihvcix4byl7b3IuZXhwb3J0cz1mdW5jdGlvbiBzaShIdCl7cmV0dXJuIEh0JiZIdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3Bl''@;'; put 'put ''cnR5LmNhbGwoSHQsImRlZmF1bHQiKT9IdC5kZWZhdWx0Okh0fSh7bGFuZ3VhZ2VUYWc6Imh1LUhVIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiRSIsbWlsbGlvbjoiTSIsYmlsbGlvbjoiTXJkIix0cmlsbGlvbjoiVCJ9''@;'; put 'put ''LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6IkZ0Iixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiSFVGIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0''@;'; put 'put ''ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNh''@;'; put 'put ''bmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3Nh''@;'; put 'put ''OjB9fX0pfShpdCk7dmFyICRlPWl0LmV4cG9ydHMsdHQ9e2V4cG9ydHM6e319OyFmdW5jdGlvbihvcix4byl7b3IuZXhwb3J0cz1mdW5jdGlvbiBzaShIdCl7cmV0dXJuIEh0JiZIdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoSHQsImRlZmF1bHQi''@;'; put 'put ''KT9IdC5kZWZhdWx0Okh0fSh7bGFuZ3VhZ2VUYWc6ImlkIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiciIsbWlsbGlvbjoiaiIsYmlsbGlvbjoibSIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJu''@;'; put 'put ''Ii4ifSxjdXJyZW5jeTp7c3ltYm9sOiJScCIsY29kZToiSURSIn19KX0odHQpO3ZhciBIZT10dC5leHBvcnRzLGR0PXtleHBvcnRzOnt9fTshZnVuY3Rpb24ob3IseG8pe29yLmV4cG9ydHM9ZnVuY3Rpb24gc2koSHQpe3JldHVybiBIdCYmSHQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlw''@;'; put 'put ''ZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEh0LCJkZWZhdWx0Iik/SHQuZGVmYXVsdDpIdH0oe2xhbmd1YWdlVGFnOiJpdC1DSCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiInIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Im1pbGEiLG1pbGxpb246Im1pbCIsYmlsbGlvbjoi''@;'; put 'put ''YiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIlx4YjAifSxjdXJyZW5jeTp7c3ltYm9sOiJDSEYiLGNvZGU6IkNIRiJ9fSl9KGR0KTt2YXIgcXQ9ZHQuZXhwb3J0cyxSdD17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG9yLHhvKXtvci5leHBvcnRzPWZ1bmN0aW9uIHNp''@;'; put 'put ''KEh0KXtyZXR1cm4gSHQmJkh0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChIdCwiZGVmYXVsdCIpP0h0LmRlZmF1bHQ6SHR9KHtsYW5ndWFnZVRhZzoiaXQtSVQiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlh''@;'; put 'put ''dGlvbnM6e3Rob3VzYW5kOiJtaWxhIixtaWxsaW9uOiJtaWwiLGJpbGxpb246ImIiLHRyaWxsaW9uOiJ0In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiJceGJhIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiRVVSIn0sY3VycmVuY3lGb3Jt''@;'; put 'put ''YXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxX''@;'; put 'put ''aXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1h''@;'; put 'put ''bHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShSdCk7dmFyIFB0PVJ0LmV4cG9ydHMsYWk9e2V4cG9ydHM6e319OyFmdW5jdGlvbihvcix4byl7b3IuZXhwb3J0cz1mdW5jdGlvbiBzaShIdCl7cmV0dXJu''@;'; put 'put ''IEh0JiZIdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoSHQsImRlZmF1bHQiKT9IdC5kZWZhdWx0Okh0fSh7bGFuZ3VhZ2VUYWc6ImphLUpQIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiwiLGRlY2ltYWw6Ii4ifSxhYmJyZXZpYXRpb25zOnt0aG91''@;'; put 'put ''c2FuZDoiXHU1MzQzIixtaWxsaW9uOiJcdTc2N2VcdTRlMDciLGJpbGxpb246Ilx1NTM0MVx1NTEwNCIsdHJpbGxpb246Ilx1NTE0NiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx4YTUiLHBvc2l0aW9uOiJwcmVmaXgiLGNvZGU6IkpQWSJ9LGN1''@;'; put 'put ''cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdl''@;'; put 'put ''OiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOnt0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYToyfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5Iix0aG91''@;'; put 'put ''c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oYWkpO3ZhciBRdD1haS5leHBvcnRzLHNuPXtleHBvcnRzOnt9fTshZnVuY3Rpb24ob3IseG8pe29yLmV4cG9ydHM9ZnVuY3Rpb24gc2koSHQpe3JldHVybiBIdCYmSHQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Q''@;'; put 'put ''cm9wZXJ0eS5jYWxsKEh0LCJkZWZhdWx0Iik/SHQuZGVmYXVsdDpIdH0oe2xhbmd1YWdlVGFnOiJrby1LUiIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1Y2M5YyIsbWlsbGlvbjoiXHViYzMxXHViOWNjIixiaWxsaW9u''@;'; put 'put ''OiJcdWMyZWRcdWM1YjUiLHRyaWxsaW9uOiJcdWM3N2NcdWM4NzAifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYTkiLGNvZGU6IktQVyJ9fSl9KHNuKTt2YXIgUmk9c24uZXhwb3J0cyxmbj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG9yLHhv''@;'; put 'put ''KXtvci5leHBvcnRzPWZ1bmN0aW9uIHNpKEh0KXtyZXR1cm4gSHQmJkh0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChIdCwiZGVmYXVsdCIpP0h0LmRlZmF1bHQ6SHR9KHtsYW5ndWFnZVRhZzoibHYtTFYiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoi''@;'; put 'put ''ICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJ0XHUwMTZia3N0LiIsbWlsbGlvbjoibWlsai4iLGJpbGxpb246Im1sanJkLiIsdHJpbGxpb246InRyaWxqLiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIscG9z''@;'; put 'put ''aXRpb246InBvc3RmaXgiLGNvZGU6IkVVUiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5n''@;'; put 'put ''dGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6''@;'; put 'put ''Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oZm4pO3ZhciBmdD1mbi5leHBvcnRzLFByPXtleHBvcnRzOnt9fTshZnVuY3Rpb24o''@;'; put 'put ''b3IseG8pe29yLmV4cG9ydHM9ZnVuY3Rpb24gc2koSHQpe3JldHVybiBIdCYmSHQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEh0LCJkZWZhdWx0Iik/SHQuZGVmYXVsdDpIdH0oe2xhbmd1YWdlVGFnOiJuYi1OTyIsZGVsaW1pdGVyczp7dGhvdXNh''@;'; put 'put ''bmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InQiLG1pbGxpb246Ik0iLGJpbGxpb246Im1kIix0cmlsbGlvbjoiYiJ9LG9yZGluYWw6KCk9PiIiLGN1cnJlbmN5OntzeW1ib2w6ImtyIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiTk9LIn0sY3VycmVuY3lG''@;'; put 'put ''b3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1''@;'; put 'put ''bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVj''@;'; put 'put ''aW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShQcik7dmFyIFp0PVByLmV4cG9ydHMsQXQ9e2V4cG9ydHM6e319OyFmdW5jdGlvbihvcix4byl7b3IuZXhwb3J0cz1mdW5jdGlvbiBzaShIdCl7cmV0''@;'; put 'put ''dXJuIEh0JiZIdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoSHQsImRlZmF1bHQiKT9IdC5kZWZhdWx0Okh0fSh7bGFuZ3VhZ2VUYWc6Im5iIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91''@;'; put 'put ''c2FuZDoidCIsbWlsbGlvbjoibWlsIixiaWxsaW9uOiJtaWEiLHRyaWxsaW9uOiJiIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoia3IiLGNvZGU6Ik5PSyJ9fSl9KEF0KTt2YXIgTG49QXQuZXhwb3J0cyxzdD17ZXhwb3J0czp7fX07IWZ1bmN0aW9u''@;'; put 'put ''KG9yLHhvKXtvci5leHBvcnRzPWZ1bmN0aW9uIHNpKEh0KXtyZXR1cm4gSHQmJkh0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChIdCwiZGVmYXVsdCIpP0h0LmRlZmF1bHQ6SHR9KHtsYW5ndWFnZVRhZzoibmwtQkUiLGRlbGltaXRlcnM6e3Rob3Vz''@;'; put 'put ''YW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJrIixtaWxsaW9uOiJtbG4iLGJpbGxpb246Im1sZCIsdHJpbGxpb246ImJsbiJ9LG9yZGluYWw6SHQ9PntsZXQgWHI9SHQlMTAwO3JldHVybiAwIT09SHQmJlhyPD0xfHw4PT09WHJ8fFhyPj0yMD8ic3RlIjoi''@;'; put 'put ''ZGUifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0''@;'; put 'put ''b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5Ontt''@;'; put 'put ''YW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShzdCk7dmFyIHp0PXN0LmV4cG9ydHMsbmk9e2V4cG9ydHM6e319OyFm''@;'; put 'put ''dW5jdGlvbihvcix4byl7b3IuZXhwb3J0cz1mdW5jdGlvbiBzaShIdCl7cmV0dXJuIEh0JiZIdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoSHQsImRlZmF1bHQiKT9IdC5kZWZhdWx0Okh0fSh7bGFuZ3VhZ2VUYWc6Im5sLU5MIixkZWxpbWl0ZXJz''@;'; put 'put ''Ont0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibWxuIixiaWxsaW9uOiJtcmQiLHRyaWxsaW9uOiJibG4ifSxvcmRpbmFsOkh0PT57bGV0IFhyPUh0JTEwMDtyZXR1cm4gMCE9PUh0JiZYcjw9MXx8OD09PVhyfHxYcj49MjA/''@;'; put 'put ''InN0ZSI6ImRlIn0sY3VycmVuY3k6e3N5bWJvbDoiXHUyMGFjIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2''@;'; put 'put ''ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0s''@;'; put 'put ''ZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KG5pKTt2YXIg''@;'; put 'put ''V2U9bmkuZXhwb3J0cyxUdD17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG9yLHhvKXtvci5leHBvcnRzPWZ1bmN0aW9uIHNpKEh0KXtyZXR1cm4gSHQmJkh0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChIdCwiZGVmYXVsdCIpP0h0LmRlZmF1bHQ6SHR9''@;'; put 'put ''KHtsYW5ndWFnZVRhZzoibm4iLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJ0IixtaWxsaW9uOiJtaWwiLGJpbGxpb246Im1pYSIsdHJpbGxpb246ImIifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5j''@;'; put 'put ''eTp7c3ltYm9sOiJrciIsY29kZToiTk9LIn19KX0oVHQpO3ZhciBycj1UdC5leHBvcnRzLGh0PXtleHBvcnRzOnt9fTshZnVuY3Rpb24ob3IseG8pe29yLmV4cG9ydHM9ZnVuY3Rpb24gc2koSHQpe3JldHVybiBIdCYmSHQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9w''@;'; put 'put ''ZXJ0eS5jYWxsKEh0LCJkZWZhdWx0Iik/SHQuZGVmYXVsdDpIdH0oe2xhbmd1YWdlVGFnOiJwbC1QTCIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6InR5cy4iLG1pbGxpb246Im1sbiIsYmlsbGlvbjoibWxkIix0cmlsbGlv''@;'; put 'put ''bjoiYmxuIn0sb3JkaW5hbDooKT0+Ii4iLGN1cnJlbmN5OntzeW1ib2w6IiB6XHUwMTQyIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiUExOIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsc3BhY2VTZXBhcmF0''@;'; put 'put ''ZWRDdXJyZW5jeTohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNh''@;'; put 'put ''bmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3Nh''@;'; put 'put ''OjB9fX0pfShodCk7dmFyIHh0PWh0LmV4cG9ydHMsQm49e2V4cG9ydHM6e319OyFmdW5jdGlvbihvcix4byl7b3IuZXhwb3J0cz1mdW5jdGlvbiBzaShIdCl7cmV0dXJuIEh0JiZIdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoSHQsImRlZmF1bHQi''@;'; put 'put ''KT9IdC5kZWZhdWx0Okh0fSh7bGFuZ3VhZ2VUYWc6InB0LUJSIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoibWlsIixtaWxsaW9uOiJtaWxoXHhmNWVzIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVu''@;'; put 'put ''Y3Rpb24oKXtyZXR1cm4iXHhiYSJ9LGN1cnJlbmN5OntzeW1ib2w6IlIkIixwb3NpdGlvbjoicHJlZml4Iixjb2RlOiJCUkwifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntm''@;'; put 'put ''b3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNO''@;'; put 'put ''b0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShCbik7dmFyIG9uPUJuLmV4cG9ydHMsanQ9e2V4''@;'; put 'put ''cG9ydHM6e319OyFmdW5jdGlvbihvcix4byl7b3IuZXhwb3J0cz1mdW5jdGlvbiBzaShIdCl7cmV0dXJuIEh0JiZIdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoSHQsImRlZmF1bHQiKT9IdC5kZWZhdWx0Okh0fSh7bGFuZ3VhZ2VUYWc6InB0LVBU''@;'; put 'put ''IixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6IiAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiayIsbWlsbGlvbjoibSIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIlx4YmEifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMi''@;'; put 'put ''LHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEw''@;'; put 'put ''LGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEw''@;'; put 'put ''fSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShqdCk7dmFyIGRpPWp0LmV4cG9ydHMsY249e2V4cG9ydHM6e319OyFmdW5jdGlvbihvcix4byl7b3IuZXhwb3J0cz1mdW5j''@;'; put 'put ''dGlvbiBzaShIdCl7cmV0dXJuIEh0JiZIdC5fX2VzTW9kdWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoSHQsImRlZmF1bHQiKT9IdC5kZWZhdWx0Okh0fSh7bGFuZ3VhZ2VUYWc6InJvLVJPIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxh''@;'; put 'put ''YmJyZXZpYXRpb25zOnt0aG91c2FuZDoibWlpIixtaWxsaW9uOiJtaWwiLGJpbGxpb246Im1sZCIsdHJpbGxpb246ImJsbiJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6IiBsZWkiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJST04ifSxjdXJyZW5j''@;'; put 'put ''eUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0s''@;'; put 'put ''ZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9E''@;'; put 'put ''ZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KGNuKTt2YXIgcG49Y24uZXhwb3J0cyxJaT17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG9yLHhvKXtvci5leHBvcnRzPWZ1bmN0aW9uIHNpKEh0KXty''@;'; put 'put ''ZXR1cm4gSHQmJkh0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChIdCwiZGVmYXVsdCIpP0h0LmRlZmF1bHQ6SHR9KHtsYW5ndWFnZVRhZzoicm8tUk8iLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6''@;'; put 'put ''e3Rob3VzYW5kOiJtaWkiLG1pbGxpb246Im1pbCIsYmlsbGlvbjoibWxkIix0cmlsbGlvbjoiYmxuIn0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiIGxlaSIscG9zaXRpb246InBvc3RmaXgiLGNvZGU6IlJPTiJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91''@;'; put 'put ''c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLHNwYWNlU2VwYXJhdGVkQ3VycmVuY3k6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0Rl''@;'; put 'put ''Y2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRw''@;'; put 'put ''dXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oSWkpO3ZhciBYdD1JaS5leHBvcnRzLGVuPXtleHBvcnRzOnt9fTshZnVuY3Rpb24ob3IseG8pe29yLmV4cG9ydHM9ZnVuY3Rpb24gc2koSHQpe3JldHVybiBIdCYmSHQu''@;'; put 'put ''X19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEh0LCJkZWZhdWx0Iik/SHQuZGVmYXVsdDpIdH0oe2xhbmd1YWdlVGFnOiJydS1SVSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1''@;'; put 'put ''MDQ0Mlx1MDQ0Ylx1MDQ0MS4iLG1pbGxpb246Ilx1MDQzY1x1MDQzYlx1MDQzZCIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTA0NDBcdTA0NDNcdTA0MzEuIixwb3NpdGlvbjoicG9zdGZpeCIsY29k''@;'; put 'put ''ZToiUlVCIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3''@;'; put 'put ''b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntv''@;'; put 'put ''dXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oZW4pO3ZhciBobz1lbi5leHBvcnRzLE1pPXtleHBvcnRzOnt9fTshZnVuY3Rpb24ob3IseG8pe29yLmV4cG9ydHM9ZnVuY3Rpb24gc2koSHQpe3JldHVybiBIdCYm''@;'; put 'put ''SHQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEh0LCJkZWZhdWx0Iik/SHQuZGVmYXVsdDpIdH0oe2xhbmd1YWdlVGFnOiJydS1VQSIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIgIixkZWNpbWFsOiIsIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6''@;'; put 'put ''Ilx1MDQ0Mlx1MDQ0Ylx1MDQ0MS4iLG1pbGxpb246Ilx1MDQzY1x1MDQzYlx1MDQzZCIsYmlsbGlvbjoiYiIsdHJpbGxpb246InQifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYjQiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJVQUgifSxj''@;'; put 'put ''dXJyZW5jeUZvcm1hdDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6''@;'; put 'put ''e291dHB1dDoiY3VycmVuY3kiLG1hbnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3Vy''@;'; put 'put ''cmVuY3kiLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShNaSk7dmFyIHByPU1pLmV4cG9ydHMsV249e2V4cG9ydHM6e319OyFmdW5jdGlvbihvcix4byl7b3IuZXhwb3J0cz1mdW5jdGlvbiBzaShIdCl7cmV0dXJuIEh0JiZIdC5fX2VzTW9k''@;'; put 'put ''dWxlJiZPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoSHQsImRlZmF1bHQiKT9IdC5kZWZhdWx0Okh0fSh7bGFuZ3VhZ2VUYWc6InNrLVNLIixkZWxpbWl0ZXJzOnt0aG91c2FuZHM6Ilx4YTAiLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoidGlzLiIs''@;'; put 'put ''bWlsbGlvbjoibWlsLiIsYmlsbGlvbjoibWxkLiIsdHJpbGxpb246ImJpbC4ifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxzcGFjZVNlcGFyYXRlZDohMCxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYWMiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJFVVIifSxjdXJyZW5jeUZvcm1h''@;'; put 'put ''dDp7dGhvdXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdp''@;'; put 'put ''dGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFs''@;'; put 'put ''czp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KFduKTt2YXIgS2k9V24uZXhwb3J0cyxRcj17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG9yLHhvKXtvci5leHBvcnRzPWZ1bmN0aW9uIHNpKEh0KXtyZXR1cm4g''@;'; put 'put ''SHQmJkh0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChIdCwiZGVmYXVsdCIpP0h0LmRlZmF1bHQ6SHR9KHtsYW5ndWFnZVRhZzoic2wiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5k''@;'; put 'put ''OiJ0aXMuIixtaWxsaW9uOiJtaWwuIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6ZnVuY3Rpb24oKXtyZXR1cm4iLiJ9LGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBhYyIsY29kZToiRVVSIn19KX0oUXIpO3ZhciBKcj1Rci5leHBvcnRzLEJpPXtleHBvcnRzOnt9fTshZnVuY3Rp''@;'; put 'put ''b24ob3IseG8pe29yLmV4cG9ydHM9ZnVuY3Rpb24gc2koSHQpe3JldHVybiBIdCYmSHQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEh0LCJkZWZhdWx0Iik/SHQuZGVmYXVsdDpIdH0oe2xhbmd1YWdlVGFnOiJzci1DeXJsLVJTIixkZWxpbWl0ZXJz''@;'; put 'put ''Ont0aG91c2FuZHM6Ii4iLGRlY2ltYWw6IiwifSxhYmJyZXZpYXRpb25zOnt0aG91c2FuZDoiXHUwNDQyXHUwNDRiXHUwNDQxLiIsbWlsbGlvbjoiXHUwNDNjXHUwNDNiXHUwNDNkIixiaWxsaW9uOiJiIix0cmlsbGlvbjoidCJ9LG9yZGluYWw6KCk9PiIuIixjdXJyZW5jeTp7c3ltYm9sOiJS''@;'; put 'put ''U0QiLGNvZGU6IlJTRCJ9fSl9KEJpKTt2YXIgVmk9QmkuZXhwb3J0cyxJbz17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG9yLHhvKXtvci5leHBvcnRzPWZ1bmN0aW9uIHNpKEh0KXtyZXR1cm4gSHQmJkh0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChI''@;'; put 'put ''dCwiZGVmYXVsdCIpP0h0LmRlZmF1bHQ6SHR9KHtsYW5ndWFnZVRhZzoic3YtU0UiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJ0IixtaWxsaW9uOiJNIixiaWxsaW9uOiJtZCIsdHJpbGxpb246InRtZCJ9LG9yZGluYWw6''@;'; put 'put ''KCk9PiIiLGN1cnJlbmN5OntzeW1ib2w6ImtyIixwb3NpdGlvbjoicG9zdGZpeCIsY29kZToiU0VLIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90''@;'; put 'put ''YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixtYW50aXNzYToyLHNwYWNlU2VwYXJhdGVkOiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFu''@;'; put 'put ''dGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5IixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYTowfX19KX0oSW8pO3ZhciBPcj1Jby5leHBvcnRzLFlpPXtleHBvcnRzOnt9fTshZnVu''@;'; put 'put ''Y3Rpb24ob3IseG8pe29yLmV4cG9ydHM9ZnVuY3Rpb24gc2koSHQpe3JldHVybiBIdCYmSHQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEh0LCJkZWZhdWx0Iik/SHQuZGVmYXVsdDpIdH0oe2xhbmd1YWdlVGFnOiJ0aC1USCIsZGVsaW1pdGVyczp7''@;'; put 'put ''dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1MGUxZVx1MGUzMVx1MGUxOSIsbWlsbGlvbjoiXHUwZTI1XHUwZTQ5XHUwZTMyXHUwZTE5IixiaWxsaW9uOiJcdTBlMWVcdTBlMzFcdTBlMTlcdTBlMjVcdTBlNDlcdTBlMzJcdTBlMTkiLHRyaWxs''@;'; put 'put ''aW9uOiJcdTBlMjVcdTBlNDlcdTBlMzJcdTBlMTlcdTBlMjVcdTBlNDlcdTBlMzJcdTBlMTkifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJcdTBlM2YiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJUSEIifSxjdXJyZW5jeUZvcm1hdDp7dGhvdXNh''@;'; put 'put ''bmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmb3JtYXRzOntmb3VyRGlnaXRzOnt0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLG1h''@;'; put 'put ''bnRpc3NhOjIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoVHdvRGVjaW1hbHNOb0N1cnJlbmN5OnttYW50aXNzYToyLHRob3VzYW5kU2VwYXJhdGVkOiEwfSxmdWxsV2l0aE5vRGVjaW1hbHM6e291dHB1dDoiY3VycmVuY3kiLHNwYWNlU2VwYXJhdGVk''@;'; put 'put ''OiEwLHRob3VzYW5kU2VwYXJhdGVkOiEwLG1hbnRpc3NhOjB9fX0pfShZaSk7dmFyIGdvPVlpLmV4cG9ydHMsZXI9e2V4cG9ydHM6e319OyFmdW5jdGlvbihvcix4byl7b3IuZXhwb3J0cz1mdW5jdGlvbigpe2NvbnN0IEh0PXsxOiInaW5jaSIsNToiJ2luY2kiLDg6IidpbmNpIiw3MDoiJ2lu''@;'; put 'put ''Y2kiLDgwOiInaW5jaSIsMjoiJ25jaSIsNzoiJ25jaSIsMjA6IiduY2kiLDUwOiInbmNpIiwzOiInXHhmY25jXHhmYyIsNDoiJ1x4ZmNuY1x4ZmMiLDEwMDoiJ1x4ZmNuY1x4ZmMiLDY6IiduY1x1MDEzMSIsOToiJ3VuY3UiLDEwOiIndW5jdSIsMzA6Iid1bmN1Iiw0MDoiJ1x1MDEzMW5jXHUw''@;'; put 'put ''MTMxIiw2MDoiJ1x1MDEzMW5jXHUwMTMxIiw5MDoiJ1x1MDEzMW5jXHUwMTMxIn07cmV0dXJuIGZ1bmN0aW9uIHNpKFhyKXtyZXR1cm4gWHImJlhyLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChYciwiZGVmYXVsdCIpP1hyLmRlZmF1bHQ6WHJ9KHts''@;'; put 'put ''YW5ndWFnZVRhZzoidHItVFIiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLiIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5kOiJiaW4iLG1pbGxpb246Im1pbHlvbiIsYmlsbGlvbjoibWlseWFyIix0cmlsbGlvbjoidHJpbHlvbiJ9LG9yZGluYWw6WHI9PntpZigwPT09WHIp''@;'; put 'put ''cmV0dXJuIidcdTAxMzFuY1x1MDEzMSI7bGV0IGIwPVhyJTEwO3JldHVybiBIdFtiMF18fEh0W1hyJTEwMC1iMF18fEh0W1hyPj0xMDA/MTAwOm51bGxdfSxjdXJyZW5jeTp7c3ltYm9sOiJcdTIwYmEiLHBvc2l0aW9uOiJwb3N0Zml4Iixjb2RlOiJUUlkifSxjdXJyZW5jeUZvcm1hdDp7dGhv''@;'; put 'put ''dXNhbmRTZXBhcmF0ZWQ6ITAsdG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxzcGFjZVNlcGFyYXRlZEN1cnJlbmN5OiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZnVsbFdpdGhUd29E''@;'; put 'put ''ZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxXaXRoTm9EZWNpbWFsczp7b3V0''@;'; put 'put ''cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KCl9KGVyKTt2YXIgY289ZXIuZXhwb3J0cyxfbz17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG9yLHhvKXtvci5leHBvcnRzPWZ1bmN0aW9uIHNpKEh0KXtyZXR1cm4gSHQm''@;'; put 'put ''Jkh0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChIdCwiZGVmYXVsdCIpP0h0LmRlZmF1bHQ6SHR9KHtsYW5ndWFnZVRhZzoidWstVUEiLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiICIsZGVjaW1hbDoiLCJ9LGFiYnJldmlhdGlvbnM6e3Rob3VzYW5k''@;'; put 'put ''OiJcdTA0NDJcdTA0MzhcdTA0NDEuIixtaWxsaW9uOiJcdTA0M2NcdTA0M2JcdTA0M2QiLGJpbGxpb246Ilx1MDQzY1x1MDQzYlx1MDQ0MFx1MDQzNCIsdHJpbGxpb246Ilx1MDQzMVx1MDQzYlx1MDQzZCJ9LG9yZGluYWw6KCk9PiIiLGN1cnJlbmN5OntzeW1ib2w6Ilx1MjBiNCIscG9zaXRp''@;'; put 'put ''b246InBvc3RmaXgiLGNvZGU6IlVBSCJ9LGN1cnJlbmN5Rm9ybWF0Ont0aG91c2FuZFNlcGFyYXRlZDohMCx0b3RhbExlbmd0aDo0LHNwYWNlU2VwYXJhdGVkOiEwLGF2ZXJhZ2U6ITB9LGZvcm1hdHM6e2ZvdXJEaWdpdHM6e3RvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFn''@;'; put 'put ''ZTohMH0sZnVsbFdpdGhUd29EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsbWFudGlzc2E6MixzcGFjZVNlcGFyYXRlZDohMCx0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhUd29EZWNpbWFsc05vQ3VycmVuY3k6e21hbnRpc3NhOjIsdGhvdXNhbmRTZXBhcmF0ZWQ6ITB9LGZ1bGxX''@;'; put 'put ''aXRoTm9EZWNpbWFsczp7b3V0cHV0OiJjdXJyZW5jeSIsc3BhY2VTZXBhcmF0ZWQ6ITAsdGhvdXNhbmRTZXBhcmF0ZWQ6ITAsbWFudGlzc2E6MH19fSl9KF9vKTt2YXIgT289X28uZXhwb3J0cyxIbz17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG9yLHhvKXtvci5leHBvcnRzPWZ1bmN0aW9uIHNp''@;'; put 'put ''KEh0KXtyZXR1cm4gSHQmJkh0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChIdCwiZGVmYXVsdCIpP0h0LmRlZmF1bHQ6SHR9KHtsYW5ndWFnZVRhZzoiemgtQ04iLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlh''@;'; put 'put ''dGlvbnM6e3Rob3VzYW5kOiJcdTUzNDMiLG1pbGxpb246Ilx1NzY3ZVx1NGUwNyIsYmlsbGlvbjoiXHU1MzQxXHU0ZWJmIix0cmlsbGlvbjoiXHU1MTQ2In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiXHhhNSIscG9zaXRpb246InByZWZpeCIsY29k''@;'; put 'put ''ZToiQ05ZIn0sY3VycmVuY3lGb3JtYXQ6e3Rob3VzYW5kU2VwYXJhdGVkOiEwLHRvdGFsTGVuZ3RoOjQsc3BhY2VTZXBhcmF0ZWQ6ITAsYXZlcmFnZTohMH0sZm9ybWF0czp7Zm91ckRpZ2l0czp7dG90YWxMZW5ndGg6NCxzcGFjZVNlcGFyYXRlZDohMCxhdmVyYWdlOiEwfSxmdWxsV2l0aFR3''@;'; put 'put ''b0RlY2ltYWxzOnt0aG91c2FuZFNlcGFyYXRlZDohMCxtYW50aXNzYToyfSxmdWxsV2l0aFR3b0RlY2ltYWxzTm9DdXJyZW5jeTp7bWFudGlzc2E6Mix0aG91c2FuZFNlcGFyYXRlZDohMH0sZnVsbFdpdGhOb0RlY2ltYWxzOntvdXRwdXQ6ImN1cnJlbmN5Iix0aG91c2FuZFNlcGFyYXRlZDoh''@;'; put 'put ''MCxtYW50aXNzYTowfX19KX0oSG8pO3ZhciBlaT1Iby5leHBvcnRzLGdhPXtleHBvcnRzOnt9fTshZnVuY3Rpb24ob3IseG8pe29yLmV4cG9ydHM9ZnVuY3Rpb24gc2koSHQpe3JldHVybiBIdCYmSHQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEh0''@;'; put 'put ''LCJkZWZhdWx0Iik/SHQuZGVmYXVsdDpIdH0oe2xhbmd1YWdlVGFnOiJ6aC1NTyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1NTM0MyIsbWlsbGlvbjoiXHU3NjdlXHU4NDJjIixiaWxsaW9uOiJcdTUzNDFcdTUxMDQi''@;'; put 'put ''LHRyaWxsaW9uOiJcdTUxNDYifSxvcmRpbmFsOmZ1bmN0aW9uKCl7cmV0dXJuIi4ifSxjdXJyZW5jeTp7c3ltYm9sOiJNT1AiLGNvZGU6Ik1PUCJ9fSl9KGdhKTt2YXIgTnM9Z2EuZXhwb3J0cyxtbD17ZXhwb3J0czp7fX07IWZ1bmN0aW9uKG9yLHhvKXtvci5leHBvcnRzPWZ1bmN0aW9uIHNp''@;'; put 'put ''KEh0KXtyZXR1cm4gSHQmJkh0Ll9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChIdCwiZGVmYXVsdCIpP0h0LmRlZmF1bHQ6SHR9KHtsYW5ndWFnZVRhZzoiemgtU0ciLGRlbGltaXRlcnM6e3Rob3VzYW5kczoiLCIsZGVjaW1hbDoiLiJ9LGFiYnJldmlh''@;'; put 'put ''dGlvbnM6e3Rob3VzYW5kOiJcdTUzNDMiLG1pbGxpb246Ilx1NzY3ZVx1NGUwNyIsYmlsbGlvbjoiXHU1MzQxXHU0ZWJmIix0cmlsbGlvbjoiXHU1MTQ2In0sb3JkaW5hbDpmdW5jdGlvbigpe3JldHVybiIuIn0sY3VycmVuY3k6e3N5bWJvbDoiJCIsY29kZToiU0dEIn19KX0obWwpO3ZhciBm''@;'; put 'put ''dT1tbC5leHBvcnRzLFJjPXtleHBvcnRzOnt9fTshZnVuY3Rpb24ob3IseG8pe29yLmV4cG9ydHM9ZnVuY3Rpb24gc2koSHQpe3JldHVybiBIdCYmSHQuX19lc01vZHVsZSYmT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKEh0LCJkZWZhdWx0Iik/SHQuZGVmYXVsdDpIdH0o''@;'; put 'put ''e2xhbmd1YWdlVGFnOiJ6aC1UVyIsZGVsaW1pdGVyczp7dGhvdXNhbmRzOiIsIixkZWNpbWFsOiIuIn0sYWJicmV2aWF0aW9uczp7dGhvdXNhbmQ6Ilx1NTM0MyIsbWlsbGlvbjoiXHU3NjdlXHU4NDJjIixiaWxsaW9uOiJcdTUzNDFcdTUxMDQiLHRyaWxsaW9uOiJcdTUxNDYifSxvcmRpbmFs''@;'; put 'put ''OmZ1bmN0aW9uKCl7cmV0dXJuIlx1N2IyYyJ9LGN1cnJlbmN5OntzeW1ib2w6Ik5UJCIsY29kZToiVFdEIn19KX0oUmMpO3ZhciBEMD1SYy5leHBvcnRzO3JldHVybiBmdW5jdGlvbihvcil7b3IuYmc9eSxvclsiY3MtQ1oiXT1CLG9yWyJkYS1ESyJdPVAsb3JbImRlLUFUIl09TyxvclsiZGUt''@;'; put 'put ''Q0giXT1OLG9yWyJkZS1ERSJdPUssb3JbImRlLUxJIl09Vyxvci5lbD1YLG9yWyJlbi1BVSJdPUosb3JbImVuLUdCIl09aWUsb3JbImVuLUlFIl09bWUsb3JbImVuLU5aIl09VGUsb3JbImVuLVpBIl09emUsb3JbImVzLUFSIl09cCxvclsiZXMtQ0wiXT14LG9yWyJlcy1DTyJdPVQsb3JbImVz''@;'; put 'put ''LUNSIl09aixvclsiZXMtRVMiXT1tLG9yWyJlcy1NWCJdPW9lLG9yWyJlcy1OSSJdPXNlLG9yWyJlcy1QRSJdPVVlLG9yWyJlcy1QUiJdPWF0LG9yWyJlcy1TViJdPXZlLG9yWyJldC1FRSJdPWplLG9yWyJmYS1JUiJdPUZlLG9yWyJmaS1GSSJdPUllLG9yWyJmaWwtUEgiXT1rZSxvclsiZnIt''@;'; put 'put ''Q0EiXT1fdCxvclsiZnItQ0giXT1RZSxvclsiZnItRlIiXT15dCxvclsiaGUtSUwiXT1EdCxvclsiaHUtSFUiXT0kZSxvci5pZD1IZSxvclsiaXQtQ0giXT1xdCxvclsiaXQtSVQiXT1QdCxvclsiamEtSlAiXT1RdCxvclsia28tS1IiXT1SaSxvclsibHYtTFYiXT1mdCxvclsibmItTk8iXT1a''@;'; put 'put ''dCxvci5uYj1MbixvclsibmwtQkUiXT16dCxvclsibmwtTkwiXT1XZSxvci5ubj1ycixvclsicGwtUEwiXT14dCxvclsicHQtQlIiXT1vbixvclsicHQtUFQiXT1kaSxvclsicm8tUk8iXT1wbixvci5ybz1YdCxvclsicnUtUlUiXT1obyxvclsicnUtVUEiXT1wcixvclsic2stU0siXT1LaSxv''@;'; put 'put ''ci5zbD1Kcixvclsic3ItQ3lybC1SUyJdPVZpLG9yWyJzdi1TRSJdPU9yLG9yWyJ0aC1USCJdPWdvLG9yWyJ0ci1UUiJdPWNvLG9yWyJ1ay1VQSJdPU9vLG9yWyJ6aC1DTiJdPWVpLG9yWyJ6aC1NTyJdPU5zLG9yWyJ6aC1TRyJdPWZ1LG9yWyJ6aC1UVyJdPUQwfShfKSxmdW5jdGlvbiBxKG9y''@;'; put 'put ''KXtyZXR1cm4gb3ImJm9yLl9fZXNNb2R1bGUmJk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvciwiZGVmYXVsdCIpP29yLmRlZmF1bHQ6b3J9KF8pfSgpfSw4MzEzODoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDQ5NjA5KTtxLmNlcnRpZmljYXRlPV8oOTQ3''@;'; put 'put ''NzIpO3ZhciB5PUkuZGVmaW5lKCJSU0FQcml2YXRlS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoIm1vZHVsdXMiKS5pbnQoKSx0aGlzLmtleSgicHVibGljRXhwb25lbnQiKS5pbnQoKSx0aGlzLmtleSgicHJpdmF0ZUV4''@;'; put 'put ''cG9uZW50IikuaW50KCksdGhpcy5rZXkoInByaW1lMSIpLmludCgpLHRoaXMua2V5KCJwcmltZTIiKS5pbnQoKSx0aGlzLmtleSgiZXhwb25lbnQxIikuaW50KCksdGhpcy5rZXkoImV4cG9uZW50MiIpLmludCgpLHRoaXMua2V5KCJjb2VmZmljaWVudCIpLmludCgpKX0pO3EuUlNBUHJpdmF0''@;'; put 'put ''ZUtleT15O3ZhciBnPUkuZGVmaW5lKCJSU0FQdWJsaWNLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoIm1vZHVsdXMiKS5pbnQoKSx0aGlzLmtleSgicHVibGljRXhwb25lbnQiKS5pbnQoKSl9KTtxLlJTQVB1YmxpY0tleT1nO3ZhciBCPUkuZGVmaW5lKCJBbGdvcml0''@;'; put 'put ''aG1JZGVudGlmaWVyIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS5vYmppZCgpLHRoaXMua2V5KCJub25lIikubnVsbF8oKS5vcHRpb25hbCgpLHRoaXMua2V5KCJjdXJ2ZSIpLm9iamlkKCkub3B0aW9uYWwoKSx0aGlzLmtleSgicGFyYW1zIikuc2Vx''@;'; put 'put ''KCkub2JqKHRoaXMua2V5KCJwIikuaW50KCksdGhpcy5rZXkoInEiKS5pbnQoKSx0aGlzLmtleSgiZyIpLmludCgpKS5vcHRpb25hbCgpKX0pLHc9SS5kZWZpbmUoIlN1YmplY3RQdWJsaWNLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS51''@;'; put 'put ''c2UoQiksdGhpcy5rZXkoInN1YmplY3RQdWJsaWNLZXkiKS5iaXRzdHIoKSl9KTtxLlB1YmxpY0tleT13O3ZhciBQPUkuZGVmaW5lKCJQcml2YXRlS2V5SW5mbyIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidmVyc2lvbiIpLmludCgpLHRoaXMua2V5KCJhbGdvcml0aG0i''@;'; put 'put ''KS51c2UoQiksdGhpcy5rZXkoInN1YmplY3RQcml2YXRlS2V5Iikub2N0c3RyKCkpfSk7cS5Qcml2YXRlS2V5PVA7dmFyIEY9SS5kZWZpbmUoIkVuY3J5cHRlZFByaXZhdGVLZXlJbmZvIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS5zZXEoKS5vYmoo''@;'; put 'put ''dGhpcy5rZXkoImlkIikub2JqaWQoKSx0aGlzLmtleSgiZGVjcnlwdCIpLnNlcSgpLm9iaih0aGlzLmtleSgia2RlIikuc2VxKCkub2JqKHRoaXMua2V5KCJpZCIpLm9iamlkKCksdGhpcy5rZXkoImtkZXBhcmFtcyIpLnNlcSgpLm9iaih0aGlzLmtleSgic2FsdCIpLm9jdHN0cigpLHRoaXMu''@;'; put 'put ''a2V5KCJpdGVycyIpLmludCgpKSksdGhpcy5rZXkoImNpcGhlciIpLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnbyIpLm9iamlkKCksdGhpcy5rZXkoIml2Iikub2N0c3RyKCkpKSksdGhpcy5rZXkoInN1YmplY3RQcml2YXRlS2V5Iikub2N0c3RyKCkpfSk7cS5FbmNyeXB0ZWRQcml2YXRlS2V5''@;'; put 'put ''PUY7dmFyIE89SS5kZWZpbmUoIkRTQVByaXZhdGVLZXkiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5pbnQoKSx0aGlzLmtleSgicCIpLmludCgpLHRoaXMua2V5KCJxIikuaW50KCksdGhpcy5rZXkoImciKS5pbnQoKSx0aGlzLmtleSgicHViX2tleSIp''@;'; put 'put ''LmludCgpLHRoaXMua2V5KCJwcml2X2tleSIpLmludCgpKX0pO3EuRFNBUHJpdmF0ZUtleT1PLHEuRFNBcGFyYW09SS5kZWZpbmUoIkRTQXBhcmFtIixmdW5jdGlvbigpe3RoaXMuaW50KCl9KTt2YXIgej1JLmRlZmluZSgiRUNQYXJhbWV0ZXJzIixmdW5jdGlvbigpe3RoaXMuY2hvaWNlKHtu''@;'; put 'put ''YW1lZEN1cnZlOnRoaXMub2JqaWQoKX0pfSksTj1JLmRlZmluZSgiRUNQcml2YXRlS2V5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJ2ZXJzaW9uIikuaW50KCksdGhpcy5rZXkoInByaXZhdGVLZXkiKS5vY3RzdHIoKSx0aGlzLmtleSgicGFyYW1ldGVycyIpLm9wdGlv''@;'; put 'put ''bmFsKCkuZXhwbGljaXQoMCkudXNlKHopLHRoaXMua2V5KCJwdWJsaWNLZXkiKS5vcHRpb25hbCgpLmV4cGxpY2l0KDEpLmJpdHN0cigpKX0pO3EuRUNQcml2YXRlS2V5PU4scS5zaWduYXR1cmU9SS5kZWZpbmUoInNpZ25hdHVyZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtl''@;'; put 'put ''eSgiciIpLmludCgpLHRoaXMua2V5KCJzIikuaW50KCkpfSl9LDk0NzcyOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNDk2MDkpLHk9SS5kZWZpbmUoIlRpbWUiLGZ1bmN0aW9uKCl7dGhpcy5jaG9pY2Uoe3V0Y1RpbWU6dGhpcy51dGN0aW1lKCksZ2VuZXJhbFRpbWU6dGhpcy5n''@;'; put 'put ''ZW50aW1lKCl9KX0pLGc9SS5kZWZpbmUoIkF0dHJpYnV0ZVR5cGVWYWx1ZSIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgidHlwZSIpLm9iamlkKCksdGhpcy5rZXkoInZhbHVlIikuYW55KCkpfSksQj1JLmRlZmluZSgiQWxnb3JpdGhtSWRlbnRpZmllciIsZnVuY3Rpb24o''@;'; put 'put ''KXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiYWxnb3JpdGhtIikub2JqaWQoKSx0aGlzLmtleSgicGFyYW1ldGVycyIpLm9wdGlvbmFsKCksdGhpcy5rZXkoImN1cnZlIikub2JqaWQoKS5vcHRpb25hbCgpKX0pLHc9SS5kZWZpbmUoIlN1YmplY3RQdWJsaWNLZXlJbmZvIixmdW5jdGlvbigp''@;'; put 'put ''e3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KCJhbGdvcml0aG0iKS51c2UoQiksdGhpcy5rZXkoInN1YmplY3RQdWJsaWNLZXkiKS5iaXRzdHIoKSl9KSxQPUkuZGVmaW5lKCJSZWxhdGl2ZURpc3Rpbmd1aXNoZWROYW1lIixmdW5jdGlvbigpe3RoaXMuc2V0b2YoZyl9KSxGPUkuZGVmaW5lKCJS''@;'; put 'put ''RE5TZXF1ZW5jZSIsZnVuY3Rpb24oKXt0aGlzLnNlcW9mKFApfSksTz1JLmRlZmluZSgiTmFtZSIsZnVuY3Rpb24oKXt0aGlzLmNob2ljZSh7cmRuU2VxdWVuY2U6dGhpcy51c2UoRil9KX0pLHo9SS5kZWZpbmUoIlZhbGlkaXR5IixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5''@;'; put 'put ''KCJub3RCZWZvcmUiKS51c2UoeSksdGhpcy5rZXkoIm5vdEFmdGVyIikudXNlKHkpKX0pLE49SS5kZWZpbmUoIkV4dGVuc2lvbiIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleSgiZXh0bklEIikub2JqaWQoKSx0aGlzLmtleSgiY3JpdGljYWwiKS5ib29sKCkuZGVmKCExKSx0''@;'; put 'put ''aGlzLmtleSgiZXh0blZhbHVlIikub2N0c3RyKCkpfSksTD1JLmRlZmluZSgiVEJTQ2VydGlmaWNhdGUiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInZlcnNpb24iKS5leHBsaWNpdCgwKS5pbnQoKS5vcHRpb25hbCgpLHRoaXMua2V5KCJzZXJpYWxOdW1iZXIiKS5pbnQo''@;'; put 'put ''KSx0aGlzLmtleSgic2lnbmF0dXJlIikudXNlKEIpLHRoaXMua2V5KCJpc3N1ZXIiKS51c2UoTyksdGhpcy5rZXkoInZhbGlkaXR5IikudXNlKHopLHRoaXMua2V5KCJzdWJqZWN0IikudXNlKE8pLHRoaXMua2V5KCJzdWJqZWN0UHVibGljS2V5SW5mbyIpLnVzZSh3KSx0aGlzLmtleSgiaXNz''@;'; put 'put ''dWVyVW5pcXVlSUQiKS5pbXBsaWNpdCgxKS5iaXRzdHIoKS5vcHRpb25hbCgpLHRoaXMua2V5KCJzdWJqZWN0VW5pcXVlSUQiKS5pbXBsaWNpdCgyKS5iaXRzdHIoKS5vcHRpb25hbCgpLHRoaXMua2V5KCJleHRlbnNpb25zIikuZXhwbGljaXQoMykuc2Vxb2YoTikub3B0aW9uYWwoKSl9KSxL''@;'; put 'put ''PUkuZGVmaW5lKCJYNTA5Q2VydGlmaWNhdGUiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoInRic0NlcnRpZmljYXRlIikudXNlKEwpLHRoaXMua2V5KCJzaWduYXR1cmVBbGdvcml0aG0iKS51c2UoQiksdGhpcy5rZXkoInNpZ25hdHVyZVZhbHVlIikuYml0c3RyKCkpfSk7''@;'; put 'put ''dWUuZXhwb3J0cz1LfSw4OTQ3MjoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST0vUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRFtcblxyXStERUstSW5mbzogQUVTLSgoPzoxMjgpfCg/OjE5Mil8KD86MjU2KSktQ0JDLChbMC05QS1IXSspW1xuXHJdKyhbMC05QS16XG5ccisvPV0rKVtcblxy''@;'; put 'put ''XSsvbSx5PS9eLS0tLS1CRUdJTiAoKD86Lio/IEtFWSl8Q0VSVElGSUNBVEUpLS0tLS0vbSxnPS9eLS0tLS1CRUdJTiAoKD86Lio/IEtFWSl8Q0VSVElGSUNBVEUpLS0tLS0oWzAtOUEtelxuXHIrLz1dKyktLS0tLUVORCBcMS0tLS0tJC9tLEI9XygxODIxMSksdz1fKDQzMzg4KSxQPV8oMjcw''@;'; put 'put ''NTQpLkJ1ZmZlcjt1ZS5leHBvcnRzPWZ1bmN0aW9uKEYsTyl7dmFyIEwsej1GLnRvU3RyaW5nKCksTj16Lm1hdGNoKEkpO2lmKE4pe3ZhciBVPSJhZXMiK05bMV0sVz1QLmZyb20oTlsyXSwiaGV4IiksWT1QLmZyb20oTlszXS5yZXBsYWNlKC9bXHJcbl0vZywiIiksImJhc2U2NCIpLFg9QihP''@;'; put 'put ''LFcuc2xpY2UoMCw4KSxwYXJzZUludChOWzFdLDEwKSkua2V5LGVlPVtdLEo9dy5jcmVhdGVEZWNpcGhlcml2KFUsWCxXKTtlZS5wdXNoKEoudXBkYXRlKFkpKSxlZS5wdXNoKEouZmluYWwoKSksTD1QLmNvbmNhdChlZSl9ZWxzZXt2YXIgSz16Lm1hdGNoKGcpO0w9UC5mcm9tKEtbMl0ucmVw''@;'; put 'put ''bGFjZSgvW1xyXG5dL2csIiIpLCJiYXNlNjQiKX1yZXR1cm57dGFnOnoubWF0Y2goeSlbMV0sZGF0YTpMfX19LDY1NjY3Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oODMxMzgpLHk9XygxNTU3OSksZz1fKDg5NDcyKSxCPV8oNDMzODgpLHc9Xyg5MzM5NyksUD1fKDI3MDU0KS5C''@;'; put 'put ''dWZmZXI7ZnVuY3Rpb24gTyh6KXt2YXIgTjsib2JqZWN0Ij09dHlwZW9mIHomJiFQLmlzQnVmZmVyKHopJiYoTj16LnBhc3NwaHJhc2Usej16LmtleSksInN0cmluZyI9PXR5cGVvZiB6JiYoej1QLmZyb20oeikpO3ZhciBXLFksTD1nKHosTiksSz1MLnRhZyxVPUwuZGF0YTtzd2l0Y2goSyl7''@;'; put 'put ''Y2FzZSJDRVJUSUZJQ0FURSI6WT1JLmNlcnRpZmljYXRlLmRlY29kZShVLCJkZXIiKS50YnNDZXJ0aWZpY2F0ZS5zdWJqZWN0UHVibGljS2V5SW5mbztjYXNlIlBVQkxJQyBLRVkiOnN3aXRjaChZfHwoWT1JLlB1YmxpY0tleS5kZWNvZGUoVSwiZGVyIikpLFc9WS5hbGdvcml0aG0uYWxnb3Jp''@;'; put 'put ''dGhtLmpvaW4oIi4iKSl7Y2FzZSIxLjIuODQwLjExMzU0OS4xLjEuMSI6cmV0dXJuIEkuUlNBUHVibGljS2V5LmRlY29kZShZLnN1YmplY3RQdWJsaWNLZXkuZGF0YSwiZGVyIik7Y2FzZSIxLjIuODQwLjEwMDQ1LjIuMSI6cmV0dXJuIFkuc3ViamVjdFByaXZhdGVLZXk9WS5zdWJqZWN0UHVi''@;'; put 'put ''bGljS2V5LHt0eXBlOiJlYyIsZGF0YTpZfTtjYXNlIjEuMi44NDAuMTAwNDAuNC4xIjpyZXR1cm4gWS5hbGdvcml0aG0ucGFyYW1zLnB1Yl9rZXk9SS5EU0FwYXJhbS5kZWNvZGUoWS5zdWJqZWN0UHVibGljS2V5LmRhdGEsImRlciIpLHt0eXBlOiJkc2EiLGRhdGE6WS5hbGdvcml0aG0ucGFy''@;'; put 'put ''YW1zfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigidW5rbm93biBrZXkgaWQgIitXKX1jYXNlIkVOQ1JZUFRFRCBQUklWQVRFIEtFWSI6VT1mdW5jdGlvbiBGKHosTil7dmFyIEw9ei5hbGdvcml0aG0uZGVjcnlwdC5rZGUua2RlcGFyYW1zLnNhbHQsSz1wYXJzZUludCh6LmFsZ29yaXRobS5k''@;'; put 'put ''ZWNyeXB0LmtkZS5rZGVwYXJhbXMuaXRlcnMudG9TdHJpbmcoKSwxMCksVT15W3ouYWxnb3JpdGhtLmRlY3J5cHQuY2lwaGVyLmFsZ28uam9pbigiLiIpXSxXPXouYWxnb3JpdGhtLmRlY3J5cHQuY2lwaGVyLml2LFk9ei5zdWJqZWN0UHJpdmF0ZUtleSxYPXBhcnNlSW50KFUuc3BsaXQoIi0i''@;'; put 'put ''KVsxXSwxMCkvOCxlZT13LnBia2RmMlN5bmMoTixMLEssWCwic2hhMSIpLEo9Qi5jcmVhdGVEZWNpcGhlcml2KFUsZWUsVykscmU9W107cmV0dXJuIHJlLnB1c2goSi51cGRhdGUoWSkpLHJlLnB1c2goSi5maW5hbCgpKSxQLmNvbmNhdChyZSl9KFU9SS5FbmNyeXB0ZWRQcml2YXRlS2V5LmRl''@;'; put 'put ''Y29kZShVLCJkZXIiKSxOKTtjYXNlIlBSSVZBVEUgS0VZIjpzd2l0Y2goVz0oWT1JLlByaXZhdGVLZXkuZGVjb2RlKFUsImRlciIpKS5hbGdvcml0aG0uYWxnb3JpdGhtLmpvaW4oIi4iKSl7Y2FzZSIxLjIuODQwLjExMzU0OS4xLjEuMSI6cmV0dXJuIEkuUlNBUHJpdmF0ZUtleS5kZWNvZGUo''@;'; put 'put ''WS5zdWJqZWN0UHJpdmF0ZUtleSwiZGVyIik7Y2FzZSIxLjIuODQwLjEwMDQ1LjIuMSI6cmV0dXJue2N1cnZlOlkuYWxnb3JpdGhtLmN1cnZlLHByaXZhdGVLZXk6SS5FQ1ByaXZhdGVLZXkuZGVjb2RlKFkuc3ViamVjdFByaXZhdGVLZXksImRlciIpLnByaXZhdGVLZXl9O2Nhc2UiMS4yLjg0''@;'; put 'put ''MC4xMDA0MC40LjEiOnJldHVybiBZLmFsZ29yaXRobS5wYXJhbXMucHJpdl9rZXk9SS5EU0FwYXJhbS5kZWNvZGUoWS5zdWJqZWN0UHJpdmF0ZUtleSwiZGVyIikse3R5cGU6ImRzYSIscGFyYW1zOlkuYWxnb3JpdGhtLnBhcmFtc307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoInVua25vd24g''@;'; put 'put ''a2V5IGlkICIrVyl9Y2FzZSJSU0EgUFVCTElDIEtFWSI6cmV0dXJuIEkuUlNBUHVibGljS2V5LmRlY29kZShVLCJkZXIiKTtjYXNlIlJTQSBQUklWQVRFIEtFWSI6cmV0dXJuIEkuUlNBUHJpdmF0ZUtleS5kZWNvZGUoVSwiZGVyIik7Y2FzZSJEU0EgUFJJVkFURSBLRVkiOnJldHVybnt0eXBl''@;'; put 'put ''OiJkc2EiLHBhcmFtczpJLkRTQVByaXZhdGVLZXkuZGVjb2RlKFUsImRlciIpfTtjYXNlIkVDIFBSSVZBVEUgS0VZIjpyZXR1cm57Y3VydmU6KFU9SS5FQ1ByaXZhdGVLZXkuZGVjb2RlKFUsImRlciIpKS5wYXJhbWV0ZXJzLnZhbHVlLHByaXZhdGVLZXk6VS5wcml2YXRlS2V5fTtkZWZhdWx0''@;'; put 'put ''OnRocm93IG5ldyBFcnJvcigidW5rbm93biBrZXkgdHlwZSAiK0spfX1PLnNpZ25hdHVyZT1JLnNpZ25hdHVyZSx1ZS5leHBvcnRzPU99LDkzMzk3Oih1ZSxxLF8pPT57cS5wYmtkZjI9Xyg4MjY4NSkscS5wYmtkZjJTeW5jPV8oNTkxMTEpfSw4MjY4NToodWUscSxfKT0+e3ZhciBQLEwsST1f''@;'; put 'put ''KDI3MDU0KS5CdWZmZXIseT1fKDg2MTExKSxnPV8oNDUzOTIpLEI9Xyg1OTExMSksdz1fKDc2NjQzKSxGPWdsb2JhbC5jcnlwdG8mJmdsb2JhbC5jcnlwdG8uc3VidGxlLE89e3NoYToiU0hBLTEiLCJzaGEtMSI6IlNIQS0xIixzaGExOiJTSEEtMSIsc2hhMjU2OiJTSEEtMjU2Iiwic2hhLTI1''@;'; put 'put ''NiI6IlNIQS0yNTYiLHNoYTM4NDoiU0hBLTM4NCIsInNoYS0zODQiOiJTSEEtMzg0Iiwic2hhLTUxMiI6IlNIQS01MTIiLHNoYTUxMjoiU0hBLTUxMiJ9LHo9W107ZnVuY3Rpb24gSygpe3JldHVybiBMfHwoTD1nbG9iYWwucHJvY2VzcyYmZ2xvYmFsLnByb2Nlc3MubmV4dFRpY2s/Z2xvYmFs''@;'; put 'put ''LnByb2Nlc3MubmV4dFRpY2s6Z2xvYmFsLnF1ZXVlTWljcm90YXNrP2dsb2JhbC5xdWV1ZU1pY3JvdGFzazpnbG9iYWwuc2V0SW1tZWRpYXRlP2dsb2JhbC5zZXRJbW1lZGlhdGU6Z2xvYmFsLnNldFRpbWVvdXQpfWZ1bmN0aW9uIFUoWSxYLGVlLEoscmUpe3JldHVybiBGLmltcG9ydEtleSgi''@;'; put 'put ''cmF3IixZLHtuYW1lOiJQQktERjIifSwhMSxbImRlcml2ZUJpdHMiXSkudGhlbihmdW5jdGlvbihpZSl7cmV0dXJuIEYuZGVyaXZlQml0cyh7bmFtZToiUEJLREYyIixzYWx0OlgsaXRlcmF0aW9uczplZSxoYXNoOntuYW1lOnJlfX0saWUsSjw8Myl9KS50aGVuKGZ1bmN0aW9uKGllKXtyZXR1''@;'; put 'put ''cm4gSS5mcm9tKGllKX0pfXVlLmV4cG9ydHM9ZnVuY3Rpb24oWSxYLGVlLEoscmUsaWUpeyJmdW5jdGlvbiI9PXR5cGVvZiByZSYmKGllPXJlLHJlPXZvaWQgMCk7dmFyIGxlPU9bKHJlPXJlfHwic2hhMSIpLnRvTG93ZXJDYXNlKCldO2lmKGxlJiYiZnVuY3Rpb24iPT10eXBlb2YgZ2xvYmFs''@;'; put 'put ''LlByb21pc2Upe2lmKHkoZWUsSiksWT13KFksZywiUGFzc3dvcmQiKSxYPXcoWCxnLCJTYWx0IiksImZ1bmN0aW9uIiE9dHlwZW9mIGllKXRocm93IG5ldyBFcnJvcigiTm8gY2FsbGJhY2sgcHJvdmlkZWQgdG8gcGJrZGYyIik7IWZ1bmN0aW9uIFcoWSxYKXtZLnRoZW4oZnVuY3Rpb24oZWUp''@;'; put 'put ''e0soKShmdW5jdGlvbigpe1gobnVsbCxlZSl9KX0sZnVuY3Rpb24oZWUpe0soKShmdW5jdGlvbigpe1goZWUpfSl9KX0oZnVuY3Rpb24gTihZKXtpZihnbG9iYWwucHJvY2VzcyYmIWdsb2JhbC5wcm9jZXNzLmJyb3dzZXJ8fCFGfHwhRi5pbXBvcnRLZXl8fCFGLmRlcml2ZUJpdHMpcmV0dXJu''@;'; put 'put ''IFByb21pc2UucmVzb2x2ZSghMSk7aWYodm9pZCAwIT09eltZXSlyZXR1cm4geltZXTt2YXIgWD1VKFA9UHx8SS5hbGxvYyg4KSxQLDEwLDEyOCxZKS50aGVuKGZ1bmN0aW9uKCl7cmV0dXJuITB9KS5jYXRjaChmdW5jdGlvbigpe3JldHVybiExfSk7cmV0dXJuIHpbWV09WCxYfShsZSkudGhl''@;'; put 'put ''bihmdW5jdGlvbihtZSl7cmV0dXJuIG1lP1UoWSxYLGVlLEosbGUpOkIoWSxYLGVlLEoscmUpfSksaWUpfWVsc2UgSygpKGZ1bmN0aW9uKCl7dmFyIG1lO3RyeXttZT1CKFksWCxlZSxKLHJlKX1jYXRjaChfZSl7cmV0dXJuIGllKF9lKX1pZShudWxsLG1lKX0pfX0sNDUzOTI6dWU9Pnt2YXIg''@;'; put 'put ''cTtxPWdsb2JhbC5wcm9jZXNzJiZnbG9iYWwucHJvY2Vzcy5icm93c2VyPyJ1dGYtOCI6Z2xvYmFsLnByb2Nlc3MmJmdsb2JhbC5wcm9jZXNzLnZlcnNpb24/cGFyc2VJbnQocHJvY2Vzcy52ZXJzaW9uLnNwbGl0KCIuIilbMF0uc2xpY2UoMSksMTApPj02PyJ1dGYtOCI6ImJpbmFyeSI6InV0''@;'; put 'put ''Zi04Iix1ZS5leHBvcnRzPXF9LDg2MTExOnVlPT57dmFyIHE9TWF0aC5wb3coMiwzMCktMTt1ZS5leHBvcnRzPWZ1bmN0aW9uKF8sSSl7aWYoIm51bWJlciIhPXR5cGVvZiBfKXRocm93IG5ldyBUeXBlRXJyb3IoIkl0ZXJhdGlvbnMgbm90IGEgbnVtYmVyIik7aWYoXzwwKXRocm93IG5ldyBU''@;'; put 'put ''eXBlRXJyb3IoIkJhZCBpdGVyYXRpb25zIik7aWYoIm51bWJlciIhPXR5cGVvZiBJKXRocm93IG5ldyBUeXBlRXJyb3IoIktleSBsZW5ndGggbm90IGEgbnVtYmVyIik7aWYoSTwwfHxJPnF8fEkhPUkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQmFkIGtleSBsZW5ndGgiKX19LDU5MTExOih1ZSxx''@;'; put 'put ''LF8pPT57dmFyIEk9Xyg4MzQwNykseT1fKDM2NjM2KSxnPV8oMjU0NDMpLEI9XygyNzA1NCkuQnVmZmVyLHc9Xyg4NjExMSksUD1fKDQ1MzkyKSxGPV8oNzY2NDMpLE89Qi5hbGxvYygxMjgpLHo9e21kNToxNixzaGExOjIwLHNoYTIyNDoyOCxzaGEyNTY6MzIsc2hhMzg0OjQ4LHNoYTUxMjo2''@;'; put 'put ''NCxybWQxNjA6MjAscmlwZW1kMTYwOjIwfTtmdW5jdGlvbiBOKFUsVyxZKXt2YXIgWD1mdW5jdGlvbiBMKFUpe3JldHVybiJybWQxNjAiPT09VXx8InJpcGVtZDE2MCI9PT1VP2Z1bmN0aW9uIFkoWCl7cmV0dXJuKG5ldyB5KS51cGRhdGUoWCkuZGlnZXN0KCl9OiJtZDUiPT09VT9JOmZ1bmN0''@;'; put 'put ''aW9uIFcoWCl7cmV0dXJuIGcoVSkudXBkYXRlKFgpLmRpZ2VzdCgpfX0oVSksZWU9InNoYTUxMiI9PT1VfHwic2hhMzg0Ij09PVU/MTI4OjY0O1cubGVuZ3RoPmVlP1c9WChXKTpXLmxlbmd0aDxlZSYmKFc9Qi5jb25jYXQoW1csT10sZWUpKTtmb3IodmFyIEo9Qi5hbGxvY1Vuc2FmZShlZSt6''@;'; put 'put ''W1VdKSxyZT1CLmFsbG9jVW5zYWZlKGVlK3pbVV0pLGllPTA7aWU8ZWU7aWUrKylKW2llXT01NF5XW2llXSxyZVtpZV09OTJeV1tpZV07dmFyIGxlPUIuYWxsb2NVbnNhZmUoZWUrWSs0KTtKLmNvcHkobGUsMCwwLGVlKSx0aGlzLmlwYWQxPWxlLHRoaXMuaXBhZDI9Six0aGlzLm9wYWQ9cmUs''@;'; put 'put ''dGhpcy5hbGc9VSx0aGlzLmJsb2Nrc2l6ZT1lZSx0aGlzLmhhc2g9WCx0aGlzLnNpemU9eltVXX1OLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oVSxXKXtyZXR1cm4gVS5jb3B5KFcsdGhpcy5ibG9ja3NpemUpLHRoaXMuaGFzaChXKS5jb3B5KHRoaXMub3BhZCx0aGlzLmJsb2Nrc2l6ZSksdGhp''@;'; put 'put ''cy5oYXNoKHRoaXMub3BhZCl9LHVlLmV4cG9ydHM9ZnVuY3Rpb24gSyhVLFcsWSxYLGVlKXt3KFksWCk7dmFyIEo9bmV3IE4oZWU9ZWV8fCJzaGExIixVPUYoVSxQLCJQYXNzd29yZCIpLChXPUYoVyxQLCJTYWx0IikpLmxlbmd0aCkscmU9Qi5hbGxvY1Vuc2FmZShYKSxpZT1CLmFsbG9jVW5z''@;'; put 'put ''YWZlKFcubGVuZ3RoKzQpO1cuY29weShpZSwwLDAsVy5sZW5ndGgpO2Zvcih2YXIgbGU9MCxtZT16W2VlXSxfZT1NYXRoLmNlaWwoWC9tZSksVGU9MTtUZTw9X2U7VGUrKyl7aWUud3JpdGVVSW50MzJCRShUZSxXLmxlbmd0aCk7Zm9yKHZhciBTZT1KLnJ1bihpZSxKLmlwYWQxKSx6ZT1TZSxW''@;'; put 'put ''PTE7VjxZO1YrKyl7emU9Si5ydW4oemUsSi5pcGFkMik7Zm9yKHZhciBwPTA7cDxtZTtwKyspU2VbcF1ePXplW3BdfVNlLmNvcHkocmUsbGUpLGxlKz1tZX1yZXR1cm4gcmV9fSw3NjY0MzoodWUscSxfKT0+e3ZhciBJPV8oMjcwNTQpLkJ1ZmZlcjt1ZS5leHBvcnRzPWZ1bmN0aW9uKHksZyxC''@;'; put 'put ''KXtpZihJLmlzQnVmZmVyKHkpKXJldHVybiB5O2lmKCJzdHJpbmciPT10eXBlb2YgeSlyZXR1cm4gSS5mcm9tKHksZyk7aWYoQXJyYXlCdWZmZXIuaXNWaWV3KHkpKXJldHVybiBJLmZyb20oeS5idWZmZXIpO3Rocm93IG5ldyBUeXBlRXJyb3IoQisiIG11c3QgYmUgYSBzdHJpbmcsIGEgQnVm''@;'; put 'put ''ZmVyLCBhIHR5cGVkIGFycmF5IG9yIGEgRGF0YVZpZXciKX19LDk2NTY6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz10eXBlb2YgcHJvY2Vzcz4idSJ8fCFwcm9jZXNzLnZlcnNpb258fDA9PT1wcm9jZXNzLnZlcnNpb24uaW5kZXhPZigidjAuIil8fDA9PT1wcm9jZXNzLnZlcnNpb24u''@;'; put 'put ''aW5kZXhPZigidjEuIikmJjAhPT1wcm9jZXNzLnZlcnNpb24uaW5kZXhPZigidjEuOC4iKT97bmV4dFRpY2s6ZnVuY3Rpb24gcShfLEkseSxnKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgXyl0aHJvdyBuZXcgVHlwZUVycm9yKCciY2FsbGJhY2siIGFyZ3VtZW50IG11c3QgYmUgYSBmdW5jdGlv''@;'; put 'put ''bicpO3ZhciB3LFAsQj1hcmd1bWVudHMubGVuZ3RoO3N3aXRjaChCKXtjYXNlIDA6Y2FzZSAxOnJldHVybiBwcm9jZXNzLm5leHRUaWNrKF8pO2Nhc2UgMjpyZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpe18uY2FsbChudWxsLEkpfSk7Y2FzZSAzOnJldHVybiBwcm9jZXNzLm5l''@;'; put 'put ''eHRUaWNrKGZ1bmN0aW9uKCl7Xy5jYWxsKG51bGwsSSx5KX0pO2Nhc2UgNDpyZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbigpe18uY2FsbChudWxsLEkseSxnKX0pO2RlZmF1bHQ6Zm9yKHc9bmV3IEFycmF5KEItMSksUD0wO1A8dy5sZW5ndGg7KXdbUCsrXT1hcmd1bWVudHNbUF07''@;'; put 'put ''cmV0dXJuIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKXtfLmFwcGx5KG51bGwsdyl9KX19fTpwcm9jZXNzfSw1Mjk2NToodWUscSxfKT0+e3EucHVibGljRW5jcnlwdD1fKDg3MjY3KSxxLnByaXZhdGVEZWNyeXB0PV8oOTg2MTMpLHEucHJpdmF0ZUVuY3J5cHQ9ZnVuY3Rpb24oeSxnKXty''@;'; put 'put ''ZXR1cm4gcS5wdWJsaWNFbmNyeXB0KHksZywhMCl9LHEucHVibGljRGVjcnlwdD1mdW5jdGlvbih5LGcpe3JldHVybiBxLnByaXZhdGVEZWNyeXB0KHksZywhMCl9fSwzMDcxNToodWUscSxfKT0+e3ZhciBJPV8oNjcyMTEpLHk9XygyNzA1NCkuQnVmZmVyO2Z1bmN0aW9uIGcoQil7dmFyIHc9''@;'; put 'put ''eS5hbGxvY1Vuc2FmZSg0KTtyZXR1cm4gdy53cml0ZVVJbnQzMkJFKEIsMCksd311ZS5leHBvcnRzPWZ1bmN0aW9uKEIsdyl7Zm9yKHZhciBPLFA9eS5hbGxvYygwKSxGPTA7UC5sZW5ndGg8dzspTz1nKEYrKyksUD15LmNvbmNhdChbUCxJKCJzaGExIikudXBkYXRlKEIpLnVwZGF0ZShPKS5k''@;'; put 'put ''aWdlc3QoKV0pO3JldHVybiBQLnNsaWNlKDAsdyl9fSwxNjUwODpmdW5jdGlvbih1ZSxxLF8peyFmdW5jdGlvbihJLHkpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBnKFYscCl7aWYoIVYpdGhyb3cgbmV3IEVycm9yKHB8fCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gQihWLHApe1Yuc3Vw''@;'; put 'put ''ZXJfPXA7dmFyIGI9ZnVuY3Rpb24oKXt9O2IucHJvdG90eXBlPXAucHJvdG90eXBlLFYucHJvdG90eXBlPW5ldyBiLFYucHJvdG90eXBlLmNvbnN0cnVjdG9yPVZ9ZnVuY3Rpb24gdyhWLHAsYil7aWYody5pc0JOKFYpKXJldHVybiBWO3RoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGws''@;'; put 'put ''dGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLG51bGwhPT1WJiYoKCJsZSI9PT1wfHwiYmUiPT09cCkmJihiPXAscD0xMCksdGhpcy5faW5pdChWfHwwLHB8fDEwLGJ8fCJiZSIpKX12YXIgUDsib2JqZWN0Ij09dHlwZW9mIEk/SS5leHBvcnRzPXc6eS5CTj13LHcuQk49dyx3LndvcmRTaXpl''@;'; put 'put ''PTI2O3RyeXtQPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2Ygd2luZG93LkJ1ZmZlcjwidSI/d2luZG93LkJ1ZmZlcjpfKDUxMDY5KS5CdWZmZXJ9Y2F0Y2h7fWZ1bmN0aW9uIEYoVixwKXt2YXIgYj1WLmNoYXJDb2RlQXQocCk7cmV0dXJuIGI+PTY1JiZiPD03MD9iLTU1OmI+PTk3JiZiPD0x''@;'; put 'put ''MDI/Yi04NzpiLTQ4JjE1fWZ1bmN0aW9uIE8oVixwLGIpe3ZhciB4PUYoVixiKTtyZXR1cm4gYi0xPj1wJiYoeHw9RihWLGItMSk8PDQpLHh9ZnVuY3Rpb24geihWLHAsYix4KXtmb3IodmFyIEM9MCxUPU1hdGgubWluKFYubGVuZ3RoLGIpLEg9cDtIPFQ7SCsrKXt2YXIgaj1WLmNoYXJDb2Rl''@;'; put 'put ''QXQoSCktNDg7Qyo9eCxDKz1qPj00OT9qLTQ5KzEwOmo+PTE3P2otMTcrMTA6an1yZXR1cm4gQ313LmlzQk49ZnVuY3Rpb24ocCl7cmV0dXJuIHAgaW5zdGFuY2VvZiB3fHxudWxsIT09cCYmIm9iamVjdCI9PXR5cGVvZiBwJiZwLmNvbnN0cnVjdG9yLndvcmRTaXplPT09dy53b3JkU2l6ZSYm''@;'; put 'put ''QXJyYXkuaXNBcnJheShwLndvcmRzKX0sdy5tYXg9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gcC5jbXAoYik+MD9wOmJ9LHcubWluPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHAuY21wKGIpPDA/cDpifSx3LnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbihwLGIseCl7aWYoIm51bWJlciI9PXR5cGVvZiBw''@;'; put 'put ''KXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHAsYix4KTtpZigib2JqZWN0Ij09dHlwZW9mIHApcmV0dXJuIHRoaXMuX2luaXRBcnJheShwLGIseCk7ImhleCI9PT1iJiYoYj0xNiksZyhiPT09KDB8YikmJmI+PTImJmI8PTM2KTt2YXIgQz0wOyItIj09PShwPXAudG9TdHJpbmcoKS5yZXBsYWNl''@;'; put 'put ''KC9ccysvZywiIikpWzBdJiYoQysrLHRoaXMubmVnYXRpdmU9MSksQzxwLmxlbmd0aCYmKDE2PT09Yj90aGlzLl9wYXJzZUhleChwLEMseCk6KHRoaXMuX3BhcnNlQmFzZShwLGIsQyksImxlIj09PXgmJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxiLHgpKSl9LHcucHJvdG90eXBl''@;'; put 'put ''Ll9pbml0TnVtYmVyPWZ1bmN0aW9uKHAsYix4KXtwPDAmJih0aGlzLm5lZ2F0aXZlPTEscD0tcCkscDw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmcF0sdGhpcy5sZW5ndGg9MSk6cDw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZwLHAvNjcxMDg4NjQmNjcx''@;'; put 'put ''MDg4NjNdLHRoaXMubGVuZ3RoPTIpOihnKHA8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmcCxwLzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLCJsZSI9PT14JiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksYix4KX0sdy5wcm90b3R5cGUu''@;'; put 'put ''X2luaXRBcnJheT1mdW5jdGlvbihwLGIseCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHAubGVuZ3RoKSxwLmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbChwLmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJh''@;'; put 'put ''eSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBDPTA7Qzx0aGlzLmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT0wO3ZhciBULEgsaj0wO2lmKCJiZSI9PT14KWZvcihDPXAubGVuZ3RoLTEsVD0wO0M+PTA7Qy09Myl0aGlzLndvcmRzW1RdfD0oSD1wW0NdfHBbQy0xXTw8OHxwW0MtMl08PDE2KTw8aiY2''@;'; put 'put ''NzEwODg2Myx0aGlzLndvcmRzW1QrMV09SD4+PjI2LWomNjcxMDg4NjMsKGorPTI0KT49MjYmJihqLT0yNixUKyspO2Vsc2UgaWYoImxlIj09PXgpZm9yKEM9MCxUPTA7QzxwLmxlbmd0aDtDKz0zKXRoaXMud29yZHNbVF18PShIPXBbQ118cFtDKzFdPDw4fHBbQysyXTw8MTYpPDxqJjY3MTA4''@;'; put 'put ''ODYzLHRoaXMud29yZHNbVCsxXT1IPj4+MjYtaiY2NzEwODg2Mywoais9MjQpPj0yNiYmKGotPTI2LFQrKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHAsYix4KXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKHAubGVuZ3RoLWIpLzYpLHRoaXMu''@;'; put 'put ''d29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIEM9MDtDPHRoaXMubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPTA7dmFyIGosVD0wLEg9MDtpZigiYmUiPT09eClmb3IoQz1wLmxlbmd0aC0xO0M+PWI7Qy09MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYz''@;'; put 'put ''JmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9MV18PWo+Pj4yNik6VCs9ODtlbHNlIGZvcihDPShwLmxlbmd0aC1iKSUyPT0wP2IrMTpiO0M8cC5sZW5ndGg7Qys9MilqPU8ocCxiLEMpPDxULHRoaXMud29yZHNbSF18PTY3MTA4ODYzJmosVD49MTg/KFQtPTE4LHRoaXMud29yZHNbSCs9''@;'; put 'put ''MV18PWo+Pj4yNik6VCs9ODt0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24ocCxiLHgpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBDPTAsVD0xO1Q8PTY3MTA4ODYzO1QqPWIpQysrO0MtLSxUPVQvYnwwO2Zvcih2YXIgSD1wLmxlbmd0''@;'; put 'put ''aC14LGo9SCVDLEU9TWF0aC5taW4oSCxILWopK3gsbT0wLEE9eDtBPEU7QSs9QyltPXoocCxBLEErQyxiKSx0aGlzLmltdWxuKFQpLHRoaXMud29yZHNbMF0rbTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz1tOnRoaXMuX2lhZGRuKG0pO2lmKDAhPT1qKXt2YXIgb2U9MTtmb3IobT16KHAsQSxw''@;'; put 'put ''Lmxlbmd0aCxiKSxBPTA7QTxqO0ErKylvZSo9Yjt0aGlzLmltdWxuKG9lKSx0aGlzLndvcmRzWzBdK208NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9bTp0aGlzLl9pYWRkbihtKX10aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24ocCl7cC53b3Jkcz1uZXcgQXJyYXkodGhp''@;'; put 'put ''cy5sZW5ndGgpO2Zvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGg7YisrKXAud29yZHNbYl09dGhpcy53b3Jkc1tiXTtwLmxlbmd0aD10aGlzLmxlbmd0aCxwLm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUscC5yZWQ9dGhpcy5yZWR9LHcucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHA9bmV3''@;'; put 'put ''IHcobnVsbCk7cmV0dXJuIHRoaXMuY29weShwKSxwfSx3LnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5s''@;'; put 'put ''ZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LHcucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdh''@;'; put 'put ''dGl2ZT0wKSx0aGlzfSx3LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkPyI8Qk4tUjogIjoiPEJOOiAiKSt0aGlzLnRvU3RyaW5nKDE2KSsiPiJ9O3ZhciBOPVsiIiwiMCIsIjAwIiwiMDAwIiwiMDAwMCIsIjAwMDAwIiwiMDAwMDAwIiwiMDAwMDAwMCIsIjAw''@;'; put 'put ''MDAwMDAwIiwiMDAwMDAwMDAwIiwiMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwIiwiMDAwMDAwMDAw''@;'; put 'put ''MDAwMDAwMDAwMDAwMDAwMCJdLEw9WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sSz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2''@;'; put 'put ''Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3''@;'; put 'put ''MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtmdW5jdGlvbiBXKFYscCxiKXtiLm5lZ2F0aXZlPXAubmVnYXRpdmVeVi5uZWdhdGl2ZTt2YXIgeD1WLmxlbmd0aCtwLmxlbmd0aHwwO2IubGVuZ3RoPXgs''@;'; put 'put ''eD14LTF8MDt2YXIgQz0wfFYud29yZHNbMF0sVD0wfHAud29yZHNbMF0sSD1DKlQsRT1ILzY3MTA4ODY0fDA7Yi53b3Jkc1swXT02NzEwODg2MyZIO2Zvcih2YXIgbT0xO208eDttKyspe2Zvcih2YXIgQT1FPj4+MjYsb2U9NjcxMDg4NjMmRSx0ZT1NYXRoLm1pbihtLHAubGVuZ3RoLTEpLHNl''@;'; put 'put ''PU1hdGgubWF4KDAsbS1WLmxlbmd0aCsxKTtzZTw9dGU7c2UrKylBKz0oSD0oQz0wfFYud29yZHNbbS1zZXwwXSkqKFQ9MHxwLndvcmRzW3NlXSkrb2UpLzY3MTA4ODY0fDAsb2U9NjcxMDg4NjMmSDtiLndvcmRzW21dPTB8b2UsRT0wfEF9cmV0dXJuIDAhPT1FP2Iud29yZHNbbV09MHxFOmIu''@;'; put 'put ''bGVuZ3RoLS0sYi5zdHJpcCgpfXcucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHAsYil7dmFyIHg7aWYoYj0wfGJ8fDEsMTY9PT0ocD1wfHwxMCl8fCJoZXgiPT09cCl7eD0iIjtmb3IodmFyIEM9MCxUPTAsSD0wO0g8dGhpcy5sZW5ndGg7SCsrKXt2YXIgaj10aGlzLndvcmRzW0hdLEU9''@;'; put 'put ''KDE2Nzc3MjE1JihqPDxDfFQpKS50b1N0cmluZygxNik7VD1qPj4+MjQtQyYxNjc3NzIxNSwoQys9Mik+PTI2JiYoQy09MjYsSC0tKSx4PTAhPT1UfHxIIT09dGhpcy5sZW5ndGgtMT9OWzYtRS5sZW5ndGhdK0UreDpFK3h9Zm9yKDAhPT1UJiYoeD1ULnRvU3RyaW5nKDE2KSt4KTt4Lmxlbmd0''@;'; put 'put ''aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9aWYocD09PSgwfHApJiZwPj0yJiZwPD0zNil7dmFyIG09TFtwXSxBPUtbcF07eD0iIjt2YXIgb2U9dGhpcy5jbG9uZSgpO2ZvcihvZS5uZWdhdGl2ZT0wOyFvZS5pc1plcm8oKTspe3ZhciB0ZT1v''@;'; put 'put ''ZS5tb2RuKEEpLnRvU3RyaW5nKHApO3g9KG9lPW9lLmlkaXZuKEEpKS5pc1plcm8oKT90ZSt4Ok5bbS10ZS5sZW5ndGhdK3RlK3h9Zm9yKHRoaXMuaXNaZXJvKCkmJih4PSIwIit4KTt4Lmxlbmd0aCViIT0wOyl4PSIwIit4O3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHg9Ii0iK3gpLHh9''@;'; put 'put ''ZyghMSwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNiIpfSx3LnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciBwPXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD9wKz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRo''@;'; put 'put ''aXMud29yZHNbMl0/cCs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJmcoITEsIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0cyIpLDAhPT10aGlzLm5lZ2F0aXZlPy1wOnB9LHcucHJvdG90eXBlLnRvSlNPTj1m''@;'; put 'put ''dW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sdy5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gZyh0eXBlb2YgUDwidSIpLHRoaXMudG9BcnJheUxpa2UoUCxwLGIpfSx3LnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMu''@;'; put 'put ''dG9BcnJheUxpa2UoQXJyYXkscCxiKX0sdy5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPXRoaXMuYnl0ZUxlbmd0aCgpLFQ9eHx8TWF0aC5tYXgoMSxDKTtnKEM8PVQsImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGgiKSxnKFQ+MCwiUmVx''@;'; put 'put ''dWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwIiksdGhpcy5zdHJpcCgpO3ZhciBFLG0sSD0ibGUiPT09YixqPW5ldyBwKFQpLEE9dGhpcy5jbG9uZSgpO2lmKEgpe2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbbV09RTtmb3IoO208VDttKyspaltt''@;'; put 'put ''XT0wfWVsc2V7Zm9yKG09MDttPFQtQzttKyspalttXT0wO2ZvcihtPTA7IUEuaXNaZXJvKCk7bSsrKUU9QS5hbmRsbigyNTUpLEEuaXVzaHJuKDgpLGpbVC1tLTFdPUV9cmV0dXJuIGp9LHcucHJvdG90eXBlLl9jb3VudEJpdHM9TWF0aC5jbHozMj9mdW5jdGlvbihwKXtyZXR1cm4gMzItTWF0''@;'; put 'put ''aC5jbHozMihwKX06ZnVuY3Rpb24ocCl7dmFyIGI9cCx4PTA7cmV0dXJuIGI+PTQwOTYmJih4Kz0xMyxiPj4+PTEzKSxiPj02NCYmKHgrPTcsYj4+Pj03KSxiPj04JiYoeCs9NCxiPj4+PTQpLGI+PTImJih4Kz0yLGI+Pj49MikseCtifSx3LnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24o''@;'; put 'put ''cCl7aWYoMD09PXApcmV0dXJuIDI2O3ZhciBiPXAseD0wO3JldHVybiA4MTkxJmJ8fCh4Kz0xMyxiPj4+PTEzKSwxMjcmYnx8KHgrPTcsYj4+Pj03KSwxNSZifHwoeCs9NCxiPj4+PTQpLDMmYnx8KHgrPTIsYj4+Pj0yKSwxJmJ8fHgrKyx4fSx3LnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rp''@;'; put 'put ''b24oKXt2YXIgYj10aGlzLl9jb3VudEJpdHModGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStifSx3LnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciBwPTAsYj0wO2I8dGhpcy5s''@;'; put 'put ''ZW5ndGg7YisrKXt2YXIgeD10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2JdKTtpZihwKz14LDI2IT09eClicmVha31yZXR1cm4gcH0sdy5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sdy5wcm90b3R5cGUudG9U''@;'; put 'put ''d29zPWZ1bmN0aW9uKHApe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHApLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMudGVzdG4ocC0xKT90aGlzLm5vdG4ocCkuaWFkZG4oMSkuaW5l''@;'; put 'put ''ZygpOnRoaXMuY2xvbmUoKX0sdy5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LHcucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSx3LnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRo''@;'; put 'put ''aXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSx3LnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHApe2Zvcig7dGhpcy5sZW5ndGg8cC5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGI9MDtiPHAubGVuZ3RoO2IrKyl0aGlzLndvcmRzW2JdPXRo''@;'; put 'put ''aXMud29yZHNbYl18cC53b3Jkc1tiXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1b3IocCl9LHcucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxl''@;'; put 'put ''bmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHApOnAuY2xvbmUoKS5pb3IodGhpcyl9LHcucHJvdG90eXBlLnVvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IocCk6cC5jbG9uZSgpLml1b3IodGhpcyl9LHcucHJvdG90eXBl''@;'; put 'put ''Lml1YW5kPWZ1bmN0aW9uKHApe3ZhciBiO2I9dGhpcy5sZW5ndGg+cC5sZW5ndGg/cDp0aGlzO2Zvcih2YXIgeD0wO3g8Yi5sZW5ndGg7eCsrKXRoaXMud29yZHNbeF09dGhpcy53b3Jkc1t4XSZwLndvcmRzW3hdO3JldHVybiB0aGlzLmxlbmd0aD1iLmxlbmd0aCx0aGlzLnN0cmlwKCl9LHcu''@;'; put 'put ''cHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoISh0aGlzLm5lZ2F0aXZlfHAubmVnYXRpdmUpKSx0aGlzLml1YW5kKHApfSx3LnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKHApOnAuY2xvbmUo''@;'; put 'put ''KS5pYW5kKHRoaXMpfSx3LnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQocCk6cC5jbG9uZSgpLml1YW5kKHRoaXMpfSx3LnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbihwKXt2YXIgYix4O3RoaXMubGVuZ3Ro''@;'; put 'put ''PnAubGVuZ3RoPyhiPXRoaXMseD1wKTooYj1wLHg9dGhpcyk7Zm9yKHZhciBDPTA7Qzx4Lmxlbmd0aDtDKyspdGhpcy53b3Jkc1tDXT1iLndvcmRzW0NdXngud29yZHNbQ107aWYodGhpcyE9PWIpZm9yKDtDPGIubGVuZ3RoO0MrKyl0aGlzLndvcmRzW0NdPWIud29yZHNbQ107cmV0dXJuIHRo''@;'; put 'put ''aXMubGVuZ3RoPWIubGVuZ3RoLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbihwKXtyZXR1cm4gZyghKHRoaXMubmVnYXRpdmV8cC5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IocCl9LHcucHJvdG90eXBlLnhvcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5sZW5ndGg+cC5s''@;'; put 'put ''ZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IocCk6cC5jbG9uZSgpLml4b3IodGhpcyl9LHcucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMubGVuZ3RoPnAubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcihwKTpwLmNsb25lKCkuaXV4b3IodGhpcyl9LHcucHJvdG90eXBlLmlu''@;'; put 'put ''b3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj0wfE1hdGguY2VpbChwLzI2KSx4PXAlMjY7dGhpcy5fZXhwYW5kKGIpLHg+MCYmYi0tO2Zvcih2YXIgQz0wO0M8YjtDKyspdGhpcy53b3Jkc1tDXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tDXTtyZXR1cm4g''@;'; put 'put ''eD4wJiYodGhpcy53b3Jkc1tDXT1+dGhpcy53b3Jkc1tDXSY2NzEwODg2Mz4+MjYteCksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4ocCl9LHcucHJvdG90eXBlLnNldG49ZnVuY3Rpb24ocCxiKXtnKCJudW1iZXIi''@;'; put 'put ''PT10eXBlb2YgcCYmcD49MCk7dmFyIHg9cC8yNnwwLEM9cCUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHgrMSksdGhpcy53b3Jkc1t4XT1iP3RoaXMud29yZHNbeF18MTw8Qzp0aGlzLndvcmRzW3hdJn4oMTw8QyksdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHApe3Zh''@;'; put 'put ''ciBiLHgsQztpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXAubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxiPXRoaXMuaXN1YihwKSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT1wLm5lZ2F0aXZlKXJldHVybiBwLm5l''@;'; put 'put ''Z2F0aXZlPTAsYj10aGlzLmlzdWIocCkscC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCk7dGhpcy5sZW5ndGg+cC5sZW5ndGg/KHg9dGhpcyxDPXApOih4PXAsQz10aGlzKTtmb3IodmFyIFQ9MCxIPTA7SDxDLmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT02NzEwODg2MyYoYj0oMHx4LndvcmRz''@;'; put 'put ''W0hdKSsoMHxDLndvcmRzW0hdKStUKSxUPWI+Pj4yNjtmb3IoOzAhPT1UJiZIPHgubGVuZ3RoO0grKyl0aGlzLndvcmRzW0hdPTY3MTA4ODYzJihiPSgwfHgud29yZHNbSF0pK1QpLFQ9Yj4+PjI2O2lmKHRoaXMubGVuZ3RoPXgubGVuZ3RoLDAhPT1UKXRoaXMud29yZHNbdGhpcy5sZW5ndGhd''@;'; put 'put ''PVQsdGhpcy5sZW5ndGgrKztlbHNlIGlmKHghPT10aGlzKWZvcig7SDx4Lmxlbmd0aDtIKyspdGhpcy53b3Jkc1tIXT14LndvcmRzW0hdO3JldHVybiB0aGlzfSx3LnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24ocCl7dmFyIGI7cmV0dXJuIDAhPT1wLm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2''@;'; put 'put ''ZT8ocC5uZWdhdGl2ZT0wLGI9dGhpcy5zdWIocCkscC5uZWdhdGl2ZV49MSxiKTowPT09cC5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxiPXAuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxiKTp0aGlzLmxlbmd0aD5wLmxlbmd0aD90aGlzLmNsb25lKCku''@;'; put 'put ''aWFkZChwKTpwLmNsb25lKCkuaWFkZCh0aGlzKX0sdy5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbihwKXtpZigwIT09cC5uZWdhdGl2ZSl7cC5uZWdhdGl2ZT0wO3ZhciBiPXRoaXMuaWFkZChwKTtyZXR1cm4gcC5uZWdhdGl2ZT0xLGIuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUp''@;'; put 'put ''cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIEMsVCx4PXRoaXMuY21wKHApO2lmKDA9PT14KXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt4PjA/KEM9''@;'; put 'put ''dGhpcyxUPXApOihDPXAsVD10aGlzKTtmb3IodmFyIEg9MCxqPTA7ajxULmxlbmd0aDtqKyspSD0oYj0oMHxDLndvcmRzW2pdKS0oMHxULndvcmRzW2pdKStIKT4+MjYsdGhpcy53b3Jkc1tqXT02NzEwODg2MyZiO2Zvcig7MCE9PUgmJmo8Qy5sZW5ndGg7aisrKUg9KGI9KDB8Qy53b3Jkc1tq''@;'; put 'put ''XSkrSCk+PjI2LHRoaXMud29yZHNbal09NjcxMDg4NjMmYjtpZigwPT09SCYmajxDLmxlbmd0aCYmQyE9PXRoaXMpZm9yKDtqPEMubGVuZ3RoO2orKyl0aGlzLndvcmRzW2pdPUMud29yZHNbal07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGopLEMhPT10aGlzJiYo''@;'; put 'put ''dGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLnN1Yj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIocCl9O3ZhciBZPWZ1bmN0aW9uKHAsYix4KXt2YXIgRSxtLEEsQz1wLndvcmRzLFQ9Yi53b3JkcyxIPXgud29yZHMsaj0wLG9lPTB8Q1swXSx0''@;'; put 'put ''ZT04MTkxJm9lLHNlPW9lPj4+MTMsd2U9MHxDWzFdLFVlPTgxOTEmd2UsSmU9d2U+Pj4xMyxhdD0wfENbMl0sTWU9ODE5MSZhdCx2ZT1hdD4+PjEzLFhlPTB8Q1szXSxqZT04MTkxJlhlLERlPVhlPj4+MTMsRmU9MHxDWzRdLFJlPTgxOTEmRmUsSWU9RmU+Pj4xMyxWZT0wfENbNV0sa2U9ODE5''@;'; put 'put ''MSZWZSxBZT1WZT4+PjEzLF90PTB8Q1s2XSxydD04MTkxJl90LFFlPV90Pj4+MTMsZG49MHxDWzddLHl0PTgxOTEmZG4sTXQ9ZG4+Pj4xMyxEdD0wfENbOF0saXQ9ODE5MSZEdCwkZT1EdD4+PjEzLHR0PTB8Q1s5XSxIZT04MTkxJnR0LGR0PXR0Pj4+MTMscXQ9MHxUWzBdLFJ0PTgxOTEmcXQs''@;'; put 'put ''UHQ9cXQ+Pj4xMyxhaT0wfFRbMV0sUXQ9ODE5MSZhaSxzbj1haT4+PjEzLFJpPTB8VFsyXSxmbj04MTkxJlJpLGZ0PVJpPj4+MTMsUHI9MHxUWzNdLFp0PTgxOTEmUHIsQXQ9UHI+Pj4xMyxMbj0wfFRbNF0sc3Q9ODE5MSZMbix6dD1Mbj4+PjEzLG5pPTB8VFs1XSxXZT04MTkxJm5pLFR0PW5p''@;'; put 'put ''Pj4+MTMscnI9MHxUWzZdLGh0PTgxOTEmcnIseHQ9cnI+Pj4xMyxCbj0wfFRbN10sb249ODE5MSZCbixqdD1Cbj4+PjEzLGRpPTB8VFs4XSxjbj04MTkxJmRpLHBuPWRpPj4+MTMsSWk9MHxUWzldLFh0PTgxOTEmSWksZW49SWk+Pj4xMzt4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2''@;'; put 'put ''ZSx4Lmxlbmd0aD0xOTt2YXIgaG89KGorKEU9TWF0aC5pbXVsKHRlLFJ0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bCh0ZSxQdCkpK01hdGguaW11bChzZSxSdCl8MCkpPDwxMyl8MDtqPSgoQT1NYXRoLmltdWwoc2UsUHQpKSsobT4+PjEzKXwwKSsoaG8+Pj4yNil8MCxobyY9NjcxMDg4''@;'; put 'put ''NjMsRT1NYXRoLmltdWwoVWUsUnQpLG09KG09TWF0aC5pbXVsKFVlLFB0KSkrTWF0aC5pbXVsKEplLFJ0KXwwLEE9TWF0aC5pbXVsKEplLFB0KTt2YXIgTWk9KGorKEU9RStNYXRoLmltdWwodGUsUXQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxzbil8MCkrTWF0aC5pbXVs''@;'; put 'put ''KHNlLFF0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLHNuKXwwKSsobT4+PjEzKXwwKSsoTWk+Pj4yNil8MCxNaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoTWUsUnQpLG09KG09TWF0aC5pbXVsKE1lLFB0KSkrTWF0aC5pbXVsKHZlLFJ0KXwwLEE9TWF0aC5pbXVsKHZlLFB0KSxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKFVlLFF0KXwwLG09KG09bStNYXRoLmltdWwoVWUsc24pfDApK01hdGguaW11bChKZSxRdCl8MCxBPUErTWF0aC5pbXVsKEplLHNuKXwwO3ZhciBwcj0oaisoRT1FK01hdGguaW11bCh0ZSxmbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLGZ0KXwwKStN''@;'; put 'put ''YXRoLmltdWwoc2UsZm4pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsZnQpfDApKyhtPj4+MTMpfDApKyhwcj4+PjI2KXwwLHByJj02NzEwODg2MyxFPU1hdGguaW11bChqZSxSdCksbT0obT1NYXRoLmltdWwoamUsUHQpKStNYXRoLmltdWwoRGUsUnQpfDAsQT1NYXRoLmltdWwo''@;'; put 'put ''RGUsUHQpLEU9RStNYXRoLmltdWwoTWUsUXQpfDAsbT0obT1tK01hdGguaW11bChNZSxzbil8MCkrTWF0aC5pbXVsKHZlLFF0KXwwLEE9QStNYXRoLmltdWwodmUsc24pfDAsRT1FK01hdGguaW11bChVZSxmbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLGZ0KXwwKStNYXRoLmltdWwoSmUsZm4p''@;'; put 'put ''fDAsQT1BK01hdGguaW11bChKZSxmdCl8MDt2YXIgV249KGorKEU9RStNYXRoLmltdWwodGUsWnQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxBdCl8MCkrTWF0aC5pbXVsKHNlLFp0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLEF0KXwwKSsobT4+PjEzKXww''@;'; put 'put ''KSsoV24+Pj4yNil8MCxXbiY9NjcxMDg4NjMsRT1NYXRoLmltdWwoUmUsUnQpLG09KG09TWF0aC5pbXVsKFJlLFB0KSkrTWF0aC5pbXVsKEllLFJ0KXwwLEE9TWF0aC5pbXVsKEllLFB0KSxFPUUrTWF0aC5pbXVsKGplLFF0KXwwLG09KG09bStNYXRoLmltdWwoamUsc24pfDApK01hdGguaW11''@;'; put 'put ''bChEZSxRdCl8MCxBPUErTWF0aC5pbXVsKERlLHNuKXwwLEU9RStNYXRoLmltdWwoTWUsZm4pfDAsbT0obT1tK01hdGguaW11bChNZSxmdCl8MCkrTWF0aC5pbXVsKHZlLGZuKXwwLEE9QStNYXRoLmltdWwodmUsZnQpfDAsRT1FK01hdGguaW11bChVZSxadCl8MCxtPShtPW0rTWF0aC5pbXVs''@;'; put 'put ''KFVlLEF0KXwwKStNYXRoLmltdWwoSmUsWnQpfDAsQT1BK01hdGguaW11bChKZSxBdCl8MDt2YXIgS2k9KGorKEU9RStNYXRoLmltdWwodGUsc3QpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx6dCl8MCkrTWF0aC5pbXVsKHNlLHN0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0''@;'; put 'put ''aC5pbXVsKHNlLHp0KXwwKSsobT4+PjEzKXwwKSsoS2k+Pj4yNil8MCxLaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoa2UsUnQpLG09KG09TWF0aC5pbXVsKGtlLFB0KSkrTWF0aC5pbXVsKEFlLFJ0KXwwLEE9TWF0aC5pbXVsKEFlLFB0KSxFPUUrTWF0aC5pbXVsKFJlLFF0KXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwoUmUsc24pfDApK01hdGguaW11bChJZSxRdCl8MCxBPUErTWF0aC5pbXVsKEllLHNuKXwwLEU9RStNYXRoLmltdWwoamUsZm4pfDAsbT0obT1tK01hdGguaW11bChqZSxmdCl8MCkrTWF0aC5pbXVsKERlLGZuKXwwLEE9QStNYXRoLmltdWwoRGUsZnQpfDAsRT1FK01hdGguaW11''@;'; put 'put ''bChNZSxadCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLEF0KXwwKStNYXRoLmltdWwodmUsWnQpfDAsQT1BK01hdGguaW11bCh2ZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFVlLHN0KXwwLG09KG09bStNYXRoLmltdWwoVWUsenQpfDApK01hdGguaW11bChKZSxzdCl8MCxBPUErTWF0aC5pbXVsKEpl''@;'; put 'put ''LHp0KXwwO3ZhciBRcj0oaisoRT1FK01hdGguaW11bCh0ZSxXZSl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLFR0KXwwKStNYXRoLmltdWwoc2UsV2UpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UsVHQpfDApKyhtPj4+MTMpfDApKyhRcj4+PjI2KXwwLFFyJj02''@;'; put 'put ''NzEwODg2MyxFPU1hdGguaW11bChydCxSdCksbT0obT1NYXRoLmltdWwocnQsUHQpKStNYXRoLmltdWwoUWUsUnQpfDAsQT1NYXRoLmltdWwoUWUsUHQpLEU9RStNYXRoLmltdWwoa2UsUXQpfDAsbT0obT1tK01hdGguaW11bChrZSxzbil8MCkrTWF0aC5pbXVsKEFlLFF0KXwwLEE9QStNYXRo''@;'; put 'put ''LmltdWwoQWUsc24pfDAsRT1FK01hdGguaW11bChSZSxmbil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLGZ0KXwwKStNYXRoLmltdWwoSWUsZm4pfDAsQT1BK01hdGguaW11bChJZSxmdCl8MCxFPUUrTWF0aC5pbXVsKGplLFp0KXwwLG09KG09bStNYXRoLmltdWwoamUsQXQpfDApK01hdGguaW11''@;'; put 'put ''bChEZSxadCl8MCxBPUErTWF0aC5pbXVsKERlLEF0KXwwLEU9RStNYXRoLmltdWwoTWUsc3QpfDAsbT0obT1tK01hdGguaW11bChNZSx6dCl8MCkrTWF0aC5pbXVsKHZlLHN0KXwwLEE9QStNYXRoLmltdWwodmUsenQpfDAsRT1FK01hdGguaW11bChVZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVs''@;'; put 'put ''KFVlLFR0KXwwKStNYXRoLmltdWwoSmUsV2UpfDAsQT1BK01hdGguaW11bChKZSxUdCl8MDt2YXIgSnI9KGorKEU9RStNYXRoLmltdWwodGUsaHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSx4dCl8MCkrTWF0aC5pbXVsKHNlLGh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0''@;'; put 'put ''aC5pbXVsKHNlLHh0KXwwKSsobT4+PjEzKXwwKSsoSnI+Pj4yNil8MCxKciY9NjcxMDg4NjMsRT1NYXRoLmltdWwoeXQsUnQpLG09KG09TWF0aC5pbXVsKHl0LFB0KSkrTWF0aC5pbXVsKE10LFJ0KXwwLEE9TWF0aC5pbXVsKE10LFB0KSxFPUUrTWF0aC5pbXVsKHJ0LFF0KXwwLG09KG09bStN''@;'; put 'put ''YXRoLmltdWwocnQsc24pfDApK01hdGguaW11bChRZSxRdCl8MCxBPUErTWF0aC5pbXVsKFFlLHNuKXwwLEU9RStNYXRoLmltdWwoa2UsZm4pfDAsbT0obT1tK01hdGguaW11bChrZSxmdCl8MCkrTWF0aC5pbXVsKEFlLGZuKXwwLEE9QStNYXRoLmltdWwoQWUsZnQpfDAsRT1FK01hdGguaW11''@;'; put 'put ''bChSZSxadCl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLEF0KXwwKStNYXRoLmltdWwoSWUsWnQpfDAsQT1BK01hdGguaW11bChJZSxBdCl8MCxFPUUrTWF0aC5pbXVsKGplLHN0KXwwLG09KG09bStNYXRoLmltdWwoamUsenQpfDApK01hdGguaW11bChEZSxzdCl8MCxBPUErTWF0aC5pbXVsKERl''@;'; put 'put ''LHp0KXwwLEU9RStNYXRoLmltdWwoTWUsV2UpfDAsbT0obT1tK01hdGguaW11bChNZSxUdCl8MCkrTWF0aC5pbXVsKHZlLFdlKXwwLEE9QStNYXRoLmltdWwodmUsVHQpfDAsRT1FK01hdGguaW11bChVZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHh0KXwwKStNYXRoLmltdWwoSmUsaHQp''@;'; put 'put ''fDAsQT1BK01hdGguaW11bChKZSx4dCl8MDt2YXIgQmk9KGorKEU9RStNYXRoLmltdWwodGUsb24pfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxqdCl8MCkrTWF0aC5pbXVsKHNlLG9uKXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGp0KXwwKSsobT4+PjEzKXww''@;'; put 'put ''KSsoQmk+Pj4yNil8MCxCaSY9NjcxMDg4NjMsRT1NYXRoLmltdWwoaXQsUnQpLG09KG09TWF0aC5pbXVsKGl0LFB0KSkrTWF0aC5pbXVsKCRlLFJ0KXwwLEE9TWF0aC5pbXVsKCRlLFB0KSxFPUUrTWF0aC5pbXVsKHl0LFF0KXwwLG09KG09bStNYXRoLmltdWwoeXQsc24pfDApK01hdGguaW11''@;'; put 'put ''bChNdCxRdCl8MCxBPUErTWF0aC5pbXVsKE10LHNuKXwwLEU9RStNYXRoLmltdWwocnQsZm4pfDAsbT0obT1tK01hdGguaW11bChydCxmdCl8MCkrTWF0aC5pbXVsKFFlLGZuKXwwLEE9QStNYXRoLmltdWwoUWUsZnQpfDAsRT1FK01hdGguaW11bChrZSxadCl8MCxtPShtPW0rTWF0aC5pbXVs''@;'; put 'put ''KGtlLEF0KXwwKStNYXRoLmltdWwoQWUsWnQpfDAsQT1BK01hdGguaW11bChBZSxBdCl8MCxFPUUrTWF0aC5pbXVsKFJlLHN0KXwwLG09KG09bStNYXRoLmltdWwoUmUsenQpfDApK01hdGguaW11bChJZSxzdCl8MCxBPUErTWF0aC5pbXVsKEllLHp0KXwwLEU9RStNYXRoLmltdWwoamUsV2Up''@;'; put 'put ''fDAsbT0obT1tK01hdGguaW11bChqZSxUdCl8MCkrTWF0aC5pbXVsKERlLFdlKXwwLEE9QStNYXRoLmltdWwoRGUsVHQpfDAsRT1FK01hdGguaW11bChNZSxodCl8MCxtPShtPW0rTWF0aC5pbXVsKE1lLHh0KXwwKStNYXRoLmltdWwodmUsaHQpfDAsQT1BK01hdGguaW11bCh2ZSx4dCl8MCxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKFVlLG9uKXwwLG09KG09bStNYXRoLmltdWwoVWUsanQpfDApK01hdGguaW11bChKZSxvbil8MCxBPUErTWF0aC5pbXVsKEplLGp0KXwwO3ZhciBWaT0oaisoRT1FK01hdGguaW11bCh0ZSxjbil8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHRlLHBuKXwwKStN''@;'; put 'put ''YXRoLmltdWwoc2UsY24pfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoc2UscG4pfDApKyhtPj4+MTMpfDApKyhWaT4+PjI2KXwwLFZpJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxSdCksbT0obT1NYXRoLmltdWwoSGUsUHQpKStNYXRoLmltdWwoZHQsUnQpfDAsQT1NYXRoLmltdWwo''@;'; put 'put ''ZHQsUHQpLEU9RStNYXRoLmltdWwoaXQsUXQpfDAsbT0obT1tK01hdGguaW11bChpdCxzbil8MCkrTWF0aC5pbXVsKCRlLFF0KXwwLEE9QStNYXRoLmltdWwoJGUsc24pfDAsRT1FK01hdGguaW11bCh5dCxmbil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LGZ0KXwwKStNYXRoLmltdWwoTXQsZm4p''@;'; put 'put ''fDAsQT1BK01hdGguaW11bChNdCxmdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LFp0KXwwLG09KG09bStNYXRoLmltdWwocnQsQXQpfDApK01hdGguaW11bChRZSxadCl8MCxBPUErTWF0aC5pbXVsKFFlLEF0KXwwLEU9RStNYXRoLmltdWwoa2Usc3QpfDAsbT0obT1tK01hdGguaW11bChrZSx6dCl8''@;'; put 'put ''MCkrTWF0aC5pbXVsKEFlLHN0KXwwLEE9QStNYXRoLmltdWwoQWUsenQpfDAsRT1FK01hdGguaW11bChSZSxXZSl8MCxtPShtPW0rTWF0aC5pbXVsKFJlLFR0KXwwKStNYXRoLmltdWwoSWUsV2UpfDAsQT1BK01hdGguaW11bChJZSxUdCl8MCxFPUUrTWF0aC5pbXVsKGplLGh0KXwwLG09KG09''@;'; put 'put ''bStNYXRoLmltdWwoamUseHQpfDApK01hdGguaW11bChEZSxodCl8MCxBPUErTWF0aC5pbXVsKERlLHh0KXwwLEU9RStNYXRoLmltdWwoTWUsb24pfDAsbT0obT1tK01hdGguaW11bChNZSxqdCl8MCkrTWF0aC5pbXVsKHZlLG9uKXwwLEE9QStNYXRoLmltdWwodmUsanQpfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bChVZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKFVlLHBuKXwwKStNYXRoLmltdWwoSmUsY24pfDAsQT1BK01hdGguaW11bChKZSxwbil8MDt2YXIgSW89KGorKEU9RStNYXRoLmltdWwodGUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bCh0ZSxlbil8MCkrTWF0aC5pbXVs''@;'; put 'put ''KHNlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKHNlLGVuKXwwKSsobT4+PjEzKXwwKSsoSW8+Pj4yNil8MCxJbyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsUXQpLG09KG09TWF0aC5pbXVsKEhlLHNuKSkrTWF0aC5pbXVsKGR0LFF0KXwwLEE9TWF0aC5pbXVsKGR0LHNuKSxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKGl0LGZuKXwwLG09KG09bStNYXRoLmltdWwoaXQsZnQpfDApK01hdGguaW11bCgkZSxmbil8MCxBPUErTWF0aC5pbXVsKCRlLGZ0KXwwLEU9RStNYXRoLmltdWwoeXQsWnQpfDAsbT0obT1tK01hdGguaW11bCh5dCxBdCl8MCkrTWF0aC5pbXVsKE10LFp0KXwwLEE9QStN''@;'; put 'put ''YXRoLmltdWwoTXQsQXQpfDAsRT1FK01hdGguaW11bChydCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LHp0KXwwKStNYXRoLmltdWwoUWUsc3QpfDAsQT1BK01hdGguaW11bChRZSx6dCl8MCxFPUUrTWF0aC5pbXVsKGtlLFdlKXwwLG09KG09bStNYXRoLmltdWwoa2UsVHQpfDApK01hdGgu''@;'; put 'put ''aW11bChBZSxXZSl8MCxBPUErTWF0aC5pbXVsKEFlLFR0KXwwLEU9RStNYXRoLmltdWwoUmUsaHQpfDAsbT0obT1tK01hdGguaW11bChSZSx4dCl8MCkrTWF0aC5pbXVsKEllLGh0KXwwLEE9QStNYXRoLmltdWwoSWUseHQpfDAsRT1FK01hdGguaW11bChqZSxvbil8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKGplLGp0KXwwKStNYXRoLmltdWwoRGUsb24pfDAsQT1BK01hdGguaW11bChEZSxqdCl8MCxFPUUrTWF0aC5pbXVsKE1lLGNuKXwwLG09KG09bStNYXRoLmltdWwoTWUscG4pfDApK01hdGguaW11bCh2ZSxjbil8MCxBPUErTWF0aC5pbXVsKHZlLHBuKXwwO3ZhciBPcj0oaisoRT1FK01h''@;'; put 'put ''dGguaW11bChVZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKFVlLGVuKXwwKStNYXRoLmltdWwoSmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSmUsZW4pfDApKyhtPj4+MTMpfDApKyhPcj4+PjI2KXwwLE9yJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxm''@;'; put 'put ''biksbT0obT1NYXRoLmltdWwoSGUsZnQpKStNYXRoLmltdWwoZHQsZm4pfDAsQT1NYXRoLmltdWwoZHQsZnQpLEU9RStNYXRoLmltdWwoaXQsWnQpfDAsbT0obT1tK01hdGguaW11bChpdCxBdCl8MCkrTWF0aC5pbXVsKCRlLFp0KXwwLEE9QStNYXRoLmltdWwoJGUsQXQpfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bCh5dCxzdCl8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHp0KXwwKStNYXRoLmltdWwoTXQsc3QpfDAsQT1BK01hdGguaW11bChNdCx6dCl8MCxFPUUrTWF0aC5pbXVsKHJ0LFdlKXwwLG09KG09bStNYXRoLmltdWwocnQsVHQpfDApK01hdGguaW11bChRZSxXZSl8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KFFlLFR0KXwwLEU9RStNYXRoLmltdWwoa2UsaHQpfDAsbT0obT1tK01hdGguaW11bChrZSx4dCl8MCkrTWF0aC5pbXVsKEFlLGh0KXwwLEE9QStNYXRoLmltdWwoQWUseHQpfDAsRT1FK01hdGguaW11bChSZSxvbil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLGp0KXwwKStNYXRoLmltdWwoSWUs''@;'; put 'put ''b24pfDAsQT1BK01hdGguaW11bChJZSxqdCl8MCxFPUUrTWF0aC5pbXVsKGplLGNuKXwwLG09KG09bStNYXRoLmltdWwoamUscG4pfDApK01hdGguaW11bChEZSxjbil8MCxBPUErTWF0aC5pbXVsKERlLHBuKXwwO3ZhciBZaT0oaisoRT1FK01hdGguaW11bChNZSxYdCl8MCl8MCkrKCg4MTkx''@;'; put 'put ''JihtPShtPW0rTWF0aC5pbXVsKE1lLGVuKXwwKStNYXRoLmltdWwodmUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwodmUsZW4pfDApKyhtPj4+MTMpfDApKyhZaT4+PjI2KXwwLFlpJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxadCksbT0obT1NYXRoLmltdWwoSGUsQXQpKStN''@;'; put 'put ''YXRoLmltdWwoZHQsWnQpfDAsQT1NYXRoLmltdWwoZHQsQXQpLEU9RStNYXRoLmltdWwoaXQsc3QpfDAsbT0obT1tK01hdGguaW11bChpdCx6dCl8MCkrTWF0aC5pbXVsKCRlLHN0KXwwLEE9QStNYXRoLmltdWwoJGUsenQpfDAsRT1FK01hdGguaW11bCh5dCxXZSl8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKHl0LFR0KXwwKStNYXRoLmltdWwoTXQsV2UpfDAsQT1BK01hdGguaW11bChNdCxUdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LGh0KXwwLG09KG09bStNYXRoLmltdWwocnQseHQpfDApK01hdGguaW11bChRZSxodCl8MCxBPUErTWF0aC5pbXVsKFFlLHh0KXwwLEU9RStNYXRoLmltdWwoa2Us''@;'; put 'put ''b24pfDAsbT0obT1tK01hdGguaW11bChrZSxqdCl8MCkrTWF0aC5pbXVsKEFlLG9uKXwwLEE9QStNYXRoLmltdWwoQWUsanQpfDAsRT1FK01hdGguaW11bChSZSxjbil8MCxtPShtPW0rTWF0aC5pbXVsKFJlLHBuKXwwKStNYXRoLmltdWwoSWUsY24pfDAsQT1BK01hdGguaW11bChJZSxwbil8''@;'; put 'put ''MDt2YXIgZ289KGorKEU9RStNYXRoLmltdWwoamUsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChqZSxlbil8MCkrTWF0aC5pbXVsKERlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKERlLGVuKXwwKSsobT4+PjEzKXwwKSsoZ28+Pj4yNil8MCxnbyY9NjcxMDg4''@;'; put 'put ''NjMsRT1NYXRoLmltdWwoSGUsc3QpLG09KG09TWF0aC5pbXVsKEhlLHp0KSkrTWF0aC5pbXVsKGR0LHN0KXwwLEE9TWF0aC5pbXVsKGR0LHp0KSxFPUUrTWF0aC5pbXVsKGl0LFdlKXwwLG09KG09bStNYXRoLmltdWwoaXQsVHQpfDApK01hdGguaW11bCgkZSxXZSl8MCxBPUErTWF0aC5pbXVs''@;'; put 'put ''KCRlLFR0KXwwLEU9RStNYXRoLmltdWwoeXQsaHQpfDAsbT0obT1tK01hdGguaW11bCh5dCx4dCl8MCkrTWF0aC5pbXVsKE10LGh0KXwwLEE9QStNYXRoLmltdWwoTXQseHQpfDAsRT1FK01hdGguaW11bChydCxvbil8MCxtPShtPW0rTWF0aC5pbXVsKHJ0LGp0KXwwKStNYXRoLmltdWwoUWUs''@;'; put 'put ''b24pfDAsQT1BK01hdGguaW11bChRZSxqdCl8MCxFPUUrTWF0aC5pbXVsKGtlLGNuKXwwLG09KG09bStNYXRoLmltdWwoa2UscG4pfDApK01hdGguaW11bChBZSxjbil8MCxBPUErTWF0aC5pbXVsKEFlLHBuKXwwO3ZhciBlcj0oaisoRT1FK01hdGguaW11bChSZSxYdCl8MCl8MCkrKCg4MTkx''@;'; put 'put ''JihtPShtPW0rTWF0aC5pbXVsKFJlLGVuKXwwKStNYXRoLmltdWwoSWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoSWUsZW4pfDApKyhtPj4+MTMpfDApKyhlcj4+PjI2KXwwLGVyJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxXZSksbT0obT1NYXRoLmltdWwoSGUsVHQpKStN''@;'; put 'put ''YXRoLmltdWwoZHQsV2UpfDAsQT1NYXRoLmltdWwoZHQsVHQpLEU9RStNYXRoLmltdWwoaXQsaHQpfDAsbT0obT1tK01hdGguaW11bChpdCx4dCl8MCkrTWF0aC5pbXVsKCRlLGh0KXwwLEE9QStNYXRoLmltdWwoJGUseHQpfDAsRT1FK01hdGguaW11bCh5dCxvbil8MCxtPShtPW0rTWF0aC5p''@;'; put 'put ''bXVsKHl0LGp0KXwwKStNYXRoLmltdWwoTXQsb24pfDAsQT1BK01hdGguaW11bChNdCxqdCl8MCxFPUUrTWF0aC5pbXVsKHJ0LGNuKXwwLG09KG09bStNYXRoLmltdWwocnQscG4pfDApK01hdGguaW11bChRZSxjbil8MCxBPUErTWF0aC5pbXVsKFFlLHBuKXwwO3ZhciBjbz0oaisoRT1FK01h''@;'; put 'put ''dGguaW11bChrZSxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGtlLGVuKXwwKStNYXRoLmltdWwoQWUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoQWUsZW4pfDApKyhtPj4+MTMpfDApKyhjbz4+PjI2KXwwLGNvJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxo''@;'; put 'put ''dCksbT0obT1NYXRoLmltdWwoSGUseHQpKStNYXRoLmltdWwoZHQsaHQpfDAsQT1NYXRoLmltdWwoZHQseHQpLEU9RStNYXRoLmltdWwoaXQsb24pfDAsbT0obT1tK01hdGguaW11bChpdCxqdCl8MCkrTWF0aC5pbXVsKCRlLG9uKXwwLEE9QStNYXRoLmltdWwoJGUsanQpfDAsRT1FK01hdGgu''@;'; put 'put ''aW11bCh5dCxjbil8MCxtPShtPW0rTWF0aC5pbXVsKHl0LHBuKXwwKStNYXRoLmltdWwoTXQsY24pfDAsQT1BK01hdGguaW11bChNdCxwbil8MDt2YXIgX289KGorKEU9RStNYXRoLmltdWwocnQsWHQpfDApfDApKygoODE5MSYobT0obT1tK01hdGguaW11bChydCxlbil8MCkrTWF0aC5pbXVs''@;'; put 'put ''KFFlLFh0KXwwKSk8PDEzKXwwO2o9KChBPUErTWF0aC5pbXVsKFFlLGVuKXwwKSsobT4+PjEzKXwwKSsoX28+Pj4yNil8MCxfbyY9NjcxMDg4NjMsRT1NYXRoLmltdWwoSGUsb24pLG09KG09TWF0aC5pbXVsKEhlLGp0KSkrTWF0aC5pbXVsKGR0LG9uKXwwLEE9TWF0aC5pbXVsKGR0LGp0KSxF''@;'; put 'put ''PUUrTWF0aC5pbXVsKGl0LGNuKXwwLG09KG09bStNYXRoLmltdWwoaXQscG4pfDApK01hdGguaW11bCgkZSxjbil8MCxBPUErTWF0aC5pbXVsKCRlLHBuKXwwO3ZhciBPbz0oaisoRT1FK01hdGguaW11bCh5dCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKHl0LGVuKXwwKStN''@;'; put 'put ''YXRoLmltdWwoTXQsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoTXQsZW4pfDApKyhtPj4+MTMpfDApKyhPbz4+PjI2KXwwLE9vJj02NzEwODg2MyxFPU1hdGguaW11bChIZSxjbiksbT0obT1NYXRoLmltdWwoSGUscG4pKStNYXRoLmltdWwoZHQsY24pfDAsQT1NYXRoLmltdWwo''@;'; put 'put ''ZHQscG4pO3ZhciBIbz0oaisoRT1FK01hdGguaW11bChpdCxYdCl8MCl8MCkrKCg4MTkxJihtPShtPW0rTWF0aC5pbXVsKGl0LGVuKXwwKStNYXRoLmltdWwoJGUsWHQpfDApKTw8MTMpfDA7aj0oKEE9QStNYXRoLmltdWwoJGUsZW4pfDApKyhtPj4+MTMpfDApKyhIbz4+PjI2KXwwLEhvJj02''@;'; put 'put ''NzEwODg2Mzt2YXIgZWk9KGorKEU9TWF0aC5pbXVsKEhlLFh0KSl8MCkrKCg4MTkxJihtPShtPU1hdGguaW11bChIZSxlbikpK01hdGguaW11bChkdCxYdCl8MCkpPDwxMyl8MDtyZXR1cm4gaj0oKEE9TWF0aC5pbXVsKGR0LGVuKSkrKG0+Pj4xMyl8MCkrKGVpPj4+MjYpfDAsZWkmPTY3MTA4''@;'; put 'put ''ODYzLEhbMF09aG8sSFsxXT1NaSxIWzJdPXByLEhbM109V24sSFs0XT1LaSxIWzVdPVFyLEhbNl09SnIsSFs3XT1CaSxIWzhdPVZpLEhbOV09SW8sSFsxMF09T3IsSFsxMV09WWksSFsxMl09Z28sSFsxM109ZXIsSFsxNF09Y28sSFsxNV09X28sSFsxNl09T28sSFsxN109SG8sSFsxOF09ZWks''@;'; put 'put ''MCE9PWomJihIWzE5XT1qLHgubGVuZ3RoKyspLHh9O2Z1bmN0aW9uIGVlKFYscCxiKXtyZXR1cm4obmV3IEopLm11bHAoVixwLGIpfWZ1bmN0aW9uIEooVixwKXt0aGlzLng9Vix0aGlzLnk9cH1NYXRoLmltdWx8fChZPVcpLHcucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHAsYil7dmFyIHgs''@;'; put 'put ''Qz10aGlzLmxlbmd0aCtwLmxlbmd0aDtyZXR1cm4geD0xMD09PXRoaXMubGVuZ3RoJiYxMD09PXAubGVuZ3RoP1kodGhpcyxwLGIpOkM8NjM/Vyh0aGlzLHAsYik6QzwxMDI0P2Z1bmN0aW9uIFgoVixwLGIpe2IubmVnYXRpdmU9cC5uZWdhdGl2ZV5WLm5lZ2F0aXZlLGIubGVuZ3RoPVYubGVu''@;'; put 'put ''Z3RoK3AubGVuZ3RoO2Zvcih2YXIgeD0wLEM9MCxUPTA7VDxiLmxlbmd0aC0xO1QrKyl7dmFyIEg9QztDPTA7Zm9yKHZhciBqPTY3MTA4ODYzJngsRT1NYXRoLm1pbihULHAubGVuZ3RoLTEpLG09TWF0aC5tYXgoMCxULVYubGVuZ3RoKzEpO208PUU7bSsrKXt2YXIgc2U9KDB8Vi53b3Jkc1tU''@;'; put 'put ''LW1dKSooMHxwLndvcmRzW21dKSx3ZT02NzEwODg2MyZzZTtqPTY3MTA4ODYzJih3ZT13ZStqfDApLEMrPShIPShIPUgrKHNlLzY3MTA4ODY0fDApfDApKyh3ZT4+PjI2KXwwKT4+PjI2LEgmPTY3MTA4ODYzfWIud29yZHNbVF09aix4PUgsSD1DfXJldHVybiAwIT09eD9iLndvcmRzW1RdPXg6''@;'; put 'put ''Yi5sZW5ndGgtLSxiLnN0cmlwKCl9KHRoaXMscCxiKTplZSh0aGlzLHAsYikseH0sSi5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbihwKXtmb3IodmFyIGI9bmV3IEFycmF5KHApLHg9dy5wcm90b3R5cGUuX2NvdW50Qml0cyhwKS0xLEM9MDtDPHA7QysrKWJbQ109dGhpcy5yZXZCaW4oQyx4''@;'; put 'put ''LHApO3JldHVybiBifSxKLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24ocCxiLHgpe2lmKDA9PT1wfHxwPT09eC0xKXJldHVybiBwO2Zvcih2YXIgQz0wLFQ9MDtUPGI7VCsrKUN8PSgxJnApPDxiLVQtMSxwPj49MTtyZXR1cm4gQ30sSi5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbihwLGIs''@;'; put 'put ''eCxDLFQsSCl7Zm9yKHZhciBqPTA7ajxIO2orKylDW2pdPWJbcFtqXV0sVFtqXT14W3Bbal1dfSxKLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24ocCxiLHgsQyxULEgpe3RoaXMucGVybXV0ZShILHAsYix4LEMsVCk7Zm9yKHZhciBqPTE7ajxUO2o8PD0xKWZvcih2YXIgRT1qPDwxLG09''@;'; put 'put ''TWF0aC5jb3MoMipNYXRoLlBJL0UpLEE9TWF0aC5zaW4oMipNYXRoLlBJL0UpLG9lPTA7b2U8VDtvZSs9RSlmb3IodmFyIHRlPW0sc2U9QSx3ZT0wO3dlPGo7d2UrKyl7dmFyIFVlPXhbb2Urd2VdLEplPUNbb2Urd2VdLGF0PXhbb2Urd2Ural0sTWU9Q1tvZSt3ZStqXSx2ZT10ZSphdC1zZSpN''@;'; put 'put ''ZTtNZT10ZSpNZStzZSphdCx4W29lK3dlXT1VZSsoYXQ9dmUpLENbb2Urd2VdPUplK01lLHhbb2Urd2Ural09VWUtYXQsQ1tvZSt3ZStqXT1KZS1NZSx3ZSE9PUUmJih2ZT1tKnRlLUEqc2Usc2U9bSpzZStBKnRlLHRlPXZlKX19LEoucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKHAs''@;'; put 'put ''Yil7dmFyIHg9MXxNYXRoLm1heChiLHApLEM9MSZ4LFQ9MDtmb3IoeD14LzJ8MDt4O3g+Pj49MSlUKys7cmV0dXJuIDE8PFQrMStDfSxKLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24ocCxiLHgpe2lmKCEoeDw9MSkpZm9yKHZhciBDPTA7Qzx4LzI7QysrKXt2YXIgVD1wW0NdO3BbQ109''@;'; put 'put ''cFt4LUMtMV0scFt4LUMtMV09VCxUPWJbQ10sYltDXT0tYlt4LUMtMV0sYlt4LUMtMV09LVR9fSxKLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24ocCxiKXtmb3IodmFyIHg9MCxDPTA7QzxiLzI7QysrKXt2YXIgVD04MTkyKk1hdGgucm91bmQocFsyKkMrMV0vYikrTWF0aC5yb3Vu''@;'; put 'put ''ZChwWzIqQ10vYikreDtwW0NdPTY3MTA4ODYzJlQseD1UPDY3MTA4ODY0PzA6VC82NzEwODg2NHwwfXJldHVybiBwfSxKLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHAsYix4LEMpe2Zvcih2YXIgVD0wLEg9MDtIPGI7SCsrKXhbMipIXT04MTkxJihUKz0wfHBbSF0pLHhbMipIKzFd''@;'; put 'put ''PTgxOTEmKFQ+Pj49MTMpLFQ+Pj49MTM7Zm9yKEg9MipiO0g8QzsrK0gpeFtIXT0wO2coMD09PVQpLGcoISgtODE5MiZUKSl9LEoucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPW5ldyBBcnJheShwKSx4PTA7eDxwO3grKyliW3hdPTA7cmV0dXJuIGJ9LEoucHJvdG90eXBl''@;'; put 'put ''Lm11bHA9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPTIqdGhpcy5ndWVzc0xlbjEzYihwLmxlbmd0aCxiLmxlbmd0aCksVD10aGlzLm1ha2VSQlQoQyksSD10aGlzLnN0dWIoQyksaj1uZXcgQXJyYXkoQyksRT1uZXcgQXJyYXkoQyksbT1uZXcgQXJyYXkoQyksQT1uZXcgQXJyYXkoQyksb2U9bmV3''@;'; put 'put ''IEFycmF5KEMpLHRlPW5ldyBBcnJheShDKSxzZT14LndvcmRzO3NlLmxlbmd0aD1DLHRoaXMuY29udmVydDEzYihwLndvcmRzLHAubGVuZ3RoLGosQyksdGhpcy5jb252ZXJ0MTNiKGIud29yZHMsYi5sZW5ndGgsQSxDKSx0aGlzLnRyYW5zZm9ybShqLEgsRSxtLEMsVCksdGhpcy50cmFuc2Zv''@;'; put 'put ''cm0oQSxILG9lLHRlLEMsVCk7Zm9yKHZhciB3ZT0wO3dlPEM7d2UrKyl7dmFyIFVlPUVbd2VdKm9lW3dlXS1tW3dlXSp0ZVt3ZV07bVt3ZV09RVt3ZV0qdGVbd2VdK21bd2VdKm9lW3dlXSxFW3dlXT1VZX1yZXR1cm4gdGhpcy5jb25qdWdhdGUoRSxtLEMpLHRoaXMudHJhbnNmb3JtKEUsbSxz''@;'; put 'put ''ZSxILEMsVCksdGhpcy5jb25qdWdhdGUoc2UsSCxDKSx0aGlzLm5vcm1hbGl6ZTEzYihzZSxDKSx4Lm5lZ2F0aXZlPXAubmVnYXRpdmVeYi5uZWdhdGl2ZSx4Lmxlbmd0aD1wLmxlbmd0aCtiLmxlbmd0aCx4LnN0cmlwKCl9LHcucHJvdG90eXBlLm11bD1mdW5jdGlvbihwKXt2YXIgYj1uZXcg''@;'; put 'put ''dyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgpLHRoaXMubXVsVG8ocCxiKX0sdy5wcm90b3R5cGUubXVsZj1mdW5jdGlvbihwKXt2YXIgYj1uZXcgdyhudWxsKTtyZXR1cm4gYi53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrcC5sZW5ndGgp''@;'; put 'put ''LGVlKHRoaXMscCxiKX0sdy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHAsdGhpcyl9LHcucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKSxnKHA8NjcxMDg4NjQpO2Zvcih2YXIgYj0wLHg9MDt4PHRo''@;'; put 'put ''aXMubGVuZ3RoO3grKyl7dmFyIEM9KDB8dGhpcy53b3Jkc1t4XSkqcCxUPSg2NzEwODg2MyZDKSsoNjcxMDg4NjMmYik7Yj4+PTI2LGIrPUMvNjcxMDg4NjR8MCxiKz1UPj4+MjYsdGhpcy53b3Jkc1t4XT02NzEwODg2MyZUfXJldHVybiAwIT09YiYmKHRoaXMud29yZHNbeF09Yix0aGlzLmxl''@;'; put 'put ''bmd0aCsrKSx0aGlzfSx3LnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4ocCl9LHcucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sdy5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlt''@;'; put 'put ''dWwodGhpcy5jbG9uZSgpKX0sdy5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHApe3ZhciBiPWZ1bmN0aW9uIFUoVil7Zm9yKHZhciBwPW5ldyBBcnJheShWLmJpdExlbmd0aCgpKSxiPTA7YjxwLmxlbmd0aDtiKyspe3ZhciBDPWIlMjY7cFtiXT0oVi53b3Jkc1tiLzI2fDBdJjE8PEMpPj4+Q31y''@;'; put 'put ''ZXR1cm4gcH0ocCk7aWYoMD09PWIubGVuZ3RoKXJldHVybiBuZXcgdygxKTtmb3IodmFyIHg9dGhpcyxDPTA7QzxiLmxlbmd0aCYmMD09PWJbQ107QysrLHg9eC5zcXIoKSk7aWYoKytDPGIubGVuZ3RoKWZvcih2YXIgVD14LnNxcigpO0M8Yi5sZW5ndGg7QysrLFQ9VC5zcXIoKSkwIT09YltD''@;'; put 'put ''XSYmKHg9eC5tdWwoVCkpO3JldHVybiB4fSx3LnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24ocCl7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApO3ZhciBULGI9cCUyNix4PShwLWIpLzI2LEM9NjcxMDg4NjM+Pj4yNi1iPDwyNi1iO2lmKDAhPT1iKXt2YXIgSD0wO2ZvcihUPTA7VDx0aGlz''@;'; put 'put ''Lmxlbmd0aDtUKyspe3ZhciBqPXRoaXMud29yZHNbVF0mQzt0aGlzLndvcmRzW1RdPSgwfHRoaXMud29yZHNbVF0pLWo8PGJ8SCxIPWo+Pj4yNi1ifUgmJih0aGlzLndvcmRzW1RdPUgsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PXgpe2ZvcihUPXRoaXMubGVuZ3RoLTE7VD49MDtULS0pdGhpcy53''@;'; put 'put ''b3Jkc1tUK3hdPXRoaXMud29yZHNbVF07Zm9yKFQ9MDtUPHg7VCsrKXRoaXMud29yZHNbVF09MDt0aGlzLmxlbmd0aCs9eH1yZXR1cm4gdGhpcy5zdHJpcCgpfSx3LnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbihwKXtyZXR1cm4gZygwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4ocCl9''@;'; put 'put ''LHcucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbihwLGIseCl7dmFyIEM7ZygibnVtYmVyIj09dHlwZW9mIHAmJnA+PTApLEM9Yj8oYi1iJTI2KS8yNjowO3ZhciBUPXAlMjYsSD1NYXRoLm1pbigocC1UKS8yNix0aGlzLmxlbmd0aCksaj02NzEwODg2M142NzEwODg2Mz4+PlQ8PFQsRT14O2lm''@;'; put 'put ''KEMtPUgsQz1NYXRoLm1heCgwLEMpLEUpe2Zvcih2YXIgbT0wO208SDttKyspRS53b3Jkc1ttXT10aGlzLndvcmRzW21dO0UubGVuZ3RoPUh9aWYoMCE9PUgpaWYodGhpcy5sZW5ndGg+SClmb3IodGhpcy5sZW5ndGgtPUgsbT0wO208dGhpcy5sZW5ndGg7bSsrKXRoaXMud29yZHNbbV09dGhp''@;'; put 'put ''cy53b3Jkc1ttK0hdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIEE9MDtmb3IobT10aGlzLmxlbmd0aC0xO20+PTAmJigwIT09QXx8bT49Qyk7bS0tKXt2YXIgb2U9MHx0aGlzLndvcmRzW21dO3RoaXMud29yZHNbbV09QTw8MjYtVHxvZT4+PlQsQT1vZSZqfXJldHVy''@;'; put 'put ''biBFJiYwIT09QSYmKEUud29yZHNbRS5sZW5ndGgrK109QSksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24ocCxiLHgpe3JldHVybiBnKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlz''@;'; put 'put ''Lml1c2hybihwLGIseCl9LHcucHJvdG90eXBlLnNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbihwKX0sdy5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4ocCl9LHcucHJvdG90eXBlLnNocm49ZnVuY3Rpb24ocCl7''@;'; put 'put ''cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybihwKX0sdy5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4ocCl9LHcucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAt''@;'; put 'put ''YikvMjY7cmV0dXJuISh0aGlzLmxlbmd0aDw9eHx8ISh0aGlzLndvcmRzW3hdJjE8PGIpKX0sdy5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwJiZwPj0wKTt2YXIgYj1wJTI2LHg9KHAtYikvMjY7cmV0dXJuIGcoMD09PXRoaXMubmVnYXRpdmUsImlt''@;'; put 'put ''YXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVycyIpLHRoaXMubGVuZ3RoPD14P3RoaXM6KDAhPT1iJiZ4KyssdGhpcy5sZW5ndGg9TWF0aC5taW4oeCx0aGlzLmxlbmd0aCksMCE9PWImJih0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj02NzEwODg2M142NzEwODg2Mz4+PmI8''@;'; put 'put ''PGIpLHRoaXMuc3RyaXAoKSl9LHcucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHApfSx3LnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbihwKXtyZXR1cm4gZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwP3RoaXMuaXN1''@;'; put 'put ''Ym4oLXApOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8cD8odGhpcy53b3Jkc1swXT1wLSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4ocCksdGhpcy5uZWdhdGl2ZT0x''@;'; put 'put ''LHRoaXMpOnRoaXMuX2lhZGRuKHApfSx3LnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24ocCl7dGhpcy53b3Jkc1swXSs9cDtmb3IodmFyIGI9MDtiPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2JdPj02NzEwODg2NDtiKyspdGhpcy53b3Jkc1tiXS09NjcxMDg4NjQsYj09PXRoaXMubGVuZ3Ro''@;'; put 'put ''LTE/dGhpcy53b3Jkc1tiKzFdPTE6dGhpcy53b3Jkc1tiKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGIrMSksdGhpc30sdy5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24ocCl7aWYoZygibnVtYmVyIj09dHlwZW9mIHApLGcocDw2NzEwODg2NCkscDwwKXJl''@;'; put 'put ''dHVybiB0aGlzLmlhZGRuKC1wKTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4ocCksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09cCwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBd''@;'; put 'put ''PS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgYj0wO2I8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbYl08MDtiKyspdGhpcy53b3Jkc1tiXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tiKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LHcucHJvdG90eXBlLmFkZG49''@;'; put 'put ''ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbihwKX0sdy5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHApfSx3LnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sdy5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHAsYix4KXt2YXIgVDt0aGlzLl9leHBhbmQocC5sZW5ndGgreCk7dmFyIEgsaj0wO2ZvcihUPTA7VDxwLmxlbmd0aDtUKyspe0g9KDB8dGhpcy53''@;'; put 'put ''b3Jkc1tUK3hdKStqO3ZhciBFPSgwfHAud29yZHNbVF0pKmI7aj0oKEgtPTY3MTA4ODYzJkUpPj4yNiktKEUvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tUK3hdPTY3MTA4ODYzJkh9Zm9yKDtUPHRoaXMubGVuZ3RoLXg7VCsrKWo9KEg9KDB8dGhpcy53b3Jkc1tUK3hdKStqKT4+MjYsdGhpcy53''@;'; put 'put ''b3Jkc1tUK3hdPTY3MTA4ODYzJkg7aWYoMD09PWopcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IoZygtMT09PWopLGo9MCxUPTA7VDx0aGlzLmxlbmd0aDtUKyspaj0oSD0tKDB8dGhpcy53b3Jkc1tUXSkraik+PjI2LHRoaXMud29yZHNbVF09NjcxMDg4NjMmSDtyZXR1cm4gdGhpcy5uZWdhdGl2''@;'; put 'put ''ZT0xLHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24ocCxiKXt2YXIgeCxDPXRoaXMuY2xvbmUoKSxUPXAsSD0wfFQud29yZHNbVC5sZW5ndGgtMV07MCE9KHg9MjYtdGhpcy5fY291bnRCaXRzKEgpKSYmKFQ9VC51c2hsbih4KSxDLml1c2hsbih4KSxIPTB8VC53''@;'; put 'put ''b3Jkc1tULmxlbmd0aC0xXSk7dmFyIG0sRT1DLmxlbmd0aC1ULmxlbmd0aDtpZigibW9kIiE9PWIpeyhtPW5ldyB3KG51bGwpKS5sZW5ndGg9RSsxLG0ud29yZHM9bmV3IEFycmF5KG0ubGVuZ3RoKTtmb3IodmFyIEE9MDtBPG0ubGVuZ3RoO0ErKyltLndvcmRzW0FdPTB9dmFyIG9lPUMuY2xv''@;'; put 'put ''bmUoKS5faXNobG5zdWJtdWwoVCwxLEUpOzA9PT1vZS5uZWdhdGl2ZSYmKEM9b2UsbSYmKG0ud29yZHNbRV09MSkpO2Zvcih2YXIgdGU9RS0xO3RlPj0wO3RlLS0pe3ZhciBzZT02NzEwODg2NCooMHxDLndvcmRzW1QubGVuZ3RoK3RlXSkrKDB8Qy53b3Jkc1tULmxlbmd0aCt0ZS0xXSk7Zm9y''@;'; put 'put ''KHNlPU1hdGgubWluKHNlL0h8MCw2NzEwODg2MyksQy5faXNobG5zdWJtdWwoVCxzZSx0ZSk7MCE9PUMubmVnYXRpdmU7KXNlLS0sQy5uZWdhdGl2ZT0wLEMuX2lzaGxuc3VibXVsKFQsMSx0ZSksQy5pc1plcm8oKXx8KEMubmVnYXRpdmVePTEpO20mJihtLndvcmRzW3RlXT1zZSl9cmV0dXJu''@;'; put 'put ''IG0mJm0uc3RyaXAoKSxDLnN0cmlwKCksImRpdiIhPT1iJiYwIT09eCYmQy5pdXNocm4oeCkse2RpdjptfHxudWxsLG1vZDpDfX0sdy5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gZyghcC5pc1plcm8oKSksdGhpcy5pc1plcm8oKT97ZGl2Om5ldyB3KDApLG1vZDpu''@;'; put 'put ''ZXcgdygwKX06MCE9PXRoaXMubmVnYXRpdmUmJjA9PT1wLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAsYiksIm1vZCIhPT1iJiYoQz1ILmRpdi5uZWcoKSksImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pYWRkKHApKSx7ZGl2OkMsbW9kOlR9''@;'; put 'put ''KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmU/KEg9dGhpcy5kaXZtb2QocC5uZWcoKSxiKSwibW9kIiE9PWImJihDPUguZGl2Lm5lZygpKSx7ZGl2OkMsbW9kOkgubW9kfSk6dGhpcy5uZWdhdGl2ZSZwLm5lZ2F0aXZlPyhIPXRoaXMubmVnKCkuZGl2bW9kKHAubmVnKCksYiks''@;'; put 'put ''ImRpdiIhPT1iJiYoVD1ILm1vZC5uZWcoKSx4JiYwIT09VC5uZWdhdGl2ZSYmVC5pc3ViKHApKSx7ZGl2OkguZGl2LG1vZDpUfSk6cC5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHApPDA/e2RpdjpuZXcgdygwKSxtb2Q6dGhpc306MT09PXAubGVuZ3RoPyJkaXYiPT09Yj97ZGl2OnRo''@;'; put 'put ''aXMuZGl2bihwLndvcmRzWzBdKSxtb2Q6bnVsbH06Im1vZCI9PT1iP3tkaXY6bnVsbCxtb2Q6bmV3IHcodGhpcy5tb2RuKHAud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4ocC53b3Jkc1swXSksbW9kOm5ldyB3KHRoaXMubW9kbihwLndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYocCxiKTt2''@;'; put 'put ''YXIgQyxULEh9LHcucHJvdG90eXBlLmRpdj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5kaXZtb2QocCwiZGl2IiwhMSkuZGl2fSx3LnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuZGl2bW9kKHAsIm1vZCIsITEpLm1vZH0sdy5wcm90b3R5cGUudW1vZD1mdW5jdGlvbihw''@;'; put 'put ''KXtyZXR1cm4gdGhpcy5kaXZtb2QocCwibW9kIiwhMCkubW9kfSx3LnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmRpdm1vZChwKTtpZihiLm1vZC5pc1plcm8oKSlyZXR1cm4gYi5kaXY7dmFyIHg9MCE9PWIuZGl2Lm5lZ2F0aXZlP2IubW9kLmlzdWIocCk6Yi5t''@;'; put 'put ''b2QsQz1wLnVzaHJuKDEpLFQ9cC5hbmRsbigxKSxIPXguY21wKEMpO3JldHVybiBIPDB8fDE9PT1UJiYwPT09SD9iLmRpdjowIT09Yi5kaXYubmVnYXRpdmU/Yi5kaXYuaXN1Ym4oMSk6Yi5kaXYuaWFkZG4oMSl9LHcucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7''@;'; put 'put ''Zm9yKHZhciBiPSgxPDwyNiklcCx4PTAsQz10aGlzLmxlbmd0aC0xO0M+PTA7Qy0tKXg9KGIqeCsoMHx0aGlzLndvcmRzW0NdKSklcDtyZXR1cm4geH0sdy5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24ocCl7ZyhwPD02NzEwODg2Myk7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7''@;'; put 'put ''eC0tKXt2YXIgQz0oMHx0aGlzLndvcmRzW3hdKSs2NzEwODg2NCpiO3RoaXMud29yZHNbeF09Qy9wfDAsYj1DJXB9cmV0dXJuIHRoaXMuc3RyaXAoKX0sdy5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHApfSx3LnByb3RvdHlwZS5lZ2NkPWZ1''@;'; put 'put ''bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcgdygxKSxUPW5ldyB3KDApLEg9bmV3IHcoMCksaj1uZXcgdygxKSxFPTA7Yi5pc0V2''@;'; put 'put ''ZW4oKSYmeC5pc0V2ZW4oKTspYi5pdXNocm4oMSkseC5pdXNocm4oMSksKytFO2Zvcih2YXIgbT14LmNsb25lKCksQT1iLmNsb25lKCk7IWIuaXNaZXJvKCk7KXtmb3IodmFyIG9lPTAsdGU9MTshKGIud29yZHNbMF0mdGUpJiZvZTwyNjsrK29lLHRlPDw9MSk7aWYob2U+MClmb3IoYi5pdXNo''@;'; put 'put ''cm4ob2UpO29lLS0gPjA7KShDLmlzT2RkKCl8fFQuaXNPZGQoKSkmJihDLmlhZGQobSksVC5pc3ViKEEpKSxDLml1c2hybigxKSxULml1c2hybigxKTtmb3IodmFyIHNlPTAsd2U9MTshKHgud29yZHNbMF0md2UpJiZzZTwyNjsrK3NlLHdlPDw9MSk7aWYoc2U+MClmb3IoeC5pdXNocm4oc2Up''@;'; put 'put ''O3NlLS0gPjA7KShILmlzT2RkKCl8fGouaXNPZGQoKSkmJihILmlhZGQobSksai5pc3ViKEEpKSxILml1c2hybigxKSxqLml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihIKSxULmlzdWIoaikpOih4LmlzdWIoYiksSC5pc3ViKEMpLGouaXN1YihUKSl9cmV0dXJue2E6''@;'; put 'put ''SCxiOmosZ2NkOnguaXVzaGxuKEUpfX0sdy5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHApe2coMD09PXAubmVnYXRpdmUpLGcoIXAuaXNaZXJvKCkpO3ZhciBvZSxiPXRoaXMseD1wLmNsb25lKCk7Yj0wIT09Yi5uZWdhdGl2ZT9iLnVtb2QocCk6Yi5jbG9uZSgpO2Zvcih2YXIgQz1uZXcg''@;'; put 'put ''dygxKSxUPW5ldyB3KDApLEg9eC5jbG9uZSgpO2IuY21wbigxKT4wJiZ4LmNtcG4oMSk+MDspe2Zvcih2YXIgaj0wLEU9MTshKGIud29yZHNbMF0mRSkmJmo8MjY7KytqLEU8PD0xKTtpZihqPjApZm9yKGIuaXVzaHJuKGopO2otLSA+MDspQy5pc09kZCgpJiZDLmlhZGQoSCksQy5pdXNocm4o''@;'; put 'put ''MSk7Zm9yKHZhciBtPTAsQT0xOyEoeC53b3Jkc1swXSZBKSYmbTwyNjsrK20sQTw8PTEpO2lmKG0+MClmb3IoeC5pdXNocm4obSk7bS0tID4wOylULmlzT2RkKCkmJlQuaWFkZChIKSxULml1c2hybigxKTtiLmNtcCh4KT49MD8oYi5pc3ViKHgpLEMuaXN1YihUKSk6KHguaXN1YihiKSxULmlz''@;'; put 'put ''dWIoQykpfXJldHVybihvZT0wPT09Yi5jbXBuKDEpP0M6VCkuY21wbigwKTwwJiZvZS5pYWRkKHApLG9lfSx3LnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24ocCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gcC5hYnMoKTtpZihwLmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBiPXRoaXMu''@;'; put 'put ''Y2xvbmUoKSx4PXAuY2xvbmUoKTtiLm5lZ2F0aXZlPTAseC5uZWdhdGl2ZT0wO2Zvcih2YXIgQz0wO2IuaXNFdmVuKCkmJnguaXNFdmVuKCk7QysrKWIuaXVzaHJuKDEpLHguaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtiLmlzRXZlbigpOyliLml1c2hybigxKTtmb3IoO3guaXNFdmVuKCk7KXgu''@;'; put 'put ''aXVzaHJuKDEpO3ZhciBUPWIuY21wKHgpO2lmKFQ8MCl7dmFyIEg9YjtiPXgseD1IfWVsc2UgaWYoMD09PVR8fDA9PT14LmNtcG4oMSkpYnJlYWs7Yi5pc3ViKHgpfXJldHVybiB4Lml1c2hsbihDKX0sdy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5lZ2NkKHApLmEu''@;'; put 'put ''dW1vZChwKX0sdy5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuISgxJnRoaXMud29yZHNbMF0pfSx3LnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiEoMSZ+dGhpcy53b3Jkc1swXSl9LHcucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLndv''@;'; put 'put ''cmRzWzBdJnB9LHcucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHApe2coIm51bWJlciI9PXR5cGVvZiBwKTt2YXIgYj1wJTI2LHg9KHAtYikvMjYsQz0xPDxiO2lmKHRoaXMubGVuZ3RoPD14KXJldHVybiB0aGlzLl9leHBhbmQoeCsxKSx0aGlzLndvcmRzW3hdfD1DLHRoaXM7Zm9yKHZhciBU''@;'; put 'put ''PUMsSD14OzAhPT1UJiZIPHRoaXMubGVuZ3RoO0grKyl7dmFyIGo9MHx0aGlzLndvcmRzW0hdO1Q9KGorPVQpPj4+MjYsdGhpcy53b3Jkc1tIXT1qJj02NzEwODg2M31yZXR1cm4gMCE9PVQmJih0aGlzLndvcmRzW0hdPVQsdGhpcy5sZW5ndGgrKyksdGhpc30sdy5wcm90b3R5cGUuaXNaZXJv''@;'; put 'put ''PWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LHcucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24ocCl7dmFyIHgsYj1wPDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFiKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZiKXJldHVybiAxO2lm''@;'; put 'put ''KHRoaXMuc3RyaXAoKSx0aGlzLmxlbmd0aD4xKXg9MTtlbHNle2ImJihwPS1wKSxnKHA8PTY3MTA4ODYzLCJOdW1iZXIgaXMgdG9vIGJpZyIpO3ZhciBDPTB8dGhpcy53b3Jkc1swXTt4PUM9PT1wPzA6QzxwPy0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXg6eH0sdy5wcm90b3R5''@;'; put 'put ''cGUuY21wPWZ1bmN0aW9uKHApe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09cC5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXAubmVnYXRpdmUpcmV0dXJuIDE7dmFyIGI9dGhpcy51Y21wKHApO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1iOmJ9LHcu''@;'; put 'put ''cHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24ocCl7aWYodGhpcy5sZW5ndGg+cC5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8cC5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBiPTAseD10aGlzLmxlbmd0aC0xO3g+PTA7eC0tKXt2YXIgQz0wfHRoaXMud29yZHNbeF0sVD0wfHAud29yZHNb''@;'; put 'put ''eF07aWYoQyE9PVQpe0M8VD9iPS0xOkM+VCYmKGI9MSk7YnJlYWt9fXJldHVybiBifSx3LnByb3RvdHlwZS5ndG49ZnVuY3Rpb24ocCl7cmV0dXJuIDE9PT10aGlzLmNtcG4ocCl9LHcucHJvdG90eXBlLmd0PWZ1bmN0aW9uKHApe3JldHVybiAxPT09dGhpcy5jbXAocCl9LHcucHJvdG90eXBl''@;'; put 'put ''Lmd0ZW49ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMuY21wbihwKT49MH0sdy5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcChwKT49MH0sdy5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHApe3JldHVybi0xPT09dGhpcy5jbXBuKHApfSx3LnByb3RvdHlwZS5sdD1mdW5j''@;'; put 'put ''dGlvbihwKXtyZXR1cm4tMT09PXRoaXMuY21wKHApfSx3LnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmNtcG4ocCk8PTB9LHcucHJvdG90eXBlLmx0ZT1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5jbXAocCk8PTB9LHcucHJvdG90eXBlLmVxbj1mdW5jdGlvbihwKXty''@;'; put 'put ''ZXR1cm4gMD09PXRoaXMuY21wbihwKX0sdy5wcm90b3R5cGUuZXE9ZnVuY3Rpb24ocCl7cmV0dXJuIDA9PT10aGlzLmNtcChwKX0sdy5yZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIG5ldyBTZShwKX0sdy5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJl''@;'; put 'put ''YWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksZygwPT09dGhpcy5uZWdhdGl2ZSwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXMiKSxwLmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlz''@;'; put 'put ''LnJlZCwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSx3LnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIHRoaXMucmVkPXAsdGhpc30sdy5wcm90b3R5cGUuZm9yY2VS''@;'; put 'put ''ZWQ9ZnVuY3Rpb24ocCl7cmV0dXJuIGcoIXRoaXMucmVkLCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0IiksdGhpcy5fZm9yY2VSZWQocCl9LHcucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkQWRkIHdvcmtzIG9ubHkgd2l0''@;'; put 'put ''aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmFkZCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLmlhZGQodGhpcyxwKX0sdy5wcm90b3R5cGUucmVk''@;'; put 'put ''U3ViPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuc3ViKHRoaXMscCl9LHcucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZElTdWIgd29ya3Mgb25seSB3''@;'; put 'put ''aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuaXN1Yih0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24ocCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5zaGwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVk''@;'; put 'put ''TXVsPWZ1bmN0aW9uKHApe3JldHVybiBnKHRoaXMucmVkLCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyxwKSx0aGlzLnJlZC5tdWwodGhpcyxwKX0sdy5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlz''@;'; put 'put ''LnJlZCwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMscCksdGhpcy5yZWQuaW11bCh0aGlzLHApfSx3LnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCBy''@;'; put 'put ''ZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sdy5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBnKHRoaXMucmVkLCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpLHRoaXMucmVkLl92ZXJpZnkxKHRo''@;'; put 'put ''aXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LHcucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gZyh0aGlzLnJlZCwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSx3LnByb3Rv''@;'; put 'put ''dHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcy5yZWQsInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sdy5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIGco''@;'; put 'put ''dGhpcy5yZWQsInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LHcucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbihwKXtyZXR1cm4gZyh0aGlzLnJlZCYmIXAucmVkLCJyZWRQb3cobm9ybWFsTnVt''@;'; put 'put ''KSIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHApfTt2YXIgcmU9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtmdW5jdGlvbiBpZShWLHApe3RoaXMubmFtZT1WLHRoaXMucD1uZXcgdyhwLDE2KSx0aGlzLm49dGhpcy5wLmJp''@;'; put 'put ''dExlbmd0aCgpLHRoaXMuaz1uZXcgdygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gbGUoKXtpZS5jYWxsKHRoaXMsImsyNTYiLCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBm''@;'; put 'put ''ZmZmZmZmZSBmZmZmZmMyZiIpfWZ1bmN0aW9uIG1lKCl7aWUuY2FsbCh0aGlzLCJwMjI0IiwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDEiKX1mdW5jdGlvbiBfZSgpe2llLmNhbGwodGhpcywicDE5MiIsImZmZmZmZmZmIGZm''@;'; put 'put ''ZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIil9ZnVuY3Rpb24gVGUoKXtpZS5jYWxsKHRoaXMsIjI1NTE5IiwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZCIpfWZ1bmN0aW9uIFNlKFYp''@;'; put 'put ''e2lmKCJzdHJpbmciPT10eXBlb2YgVil7dmFyIHA9dy5fcHJpbWUoVik7dGhpcy5tPXAucCx0aGlzLnByaW1lPXB9ZWxzZSBnKFYuZ3RuKDEpLCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDEiKSx0aGlzLm09Vix0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gemUoVil7U2UuY2FsbCh0''@;'; put 'put ''aGlzLFYpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IHcoMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRo''@;'; put 'put ''aXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9aWUucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24o''@;'; put 'put ''KXt2YXIgcD1uZXcgdyhudWxsKTtyZXR1cm4gcC53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHB9LGllLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHApe3ZhciB4LGI9cDtkb3t0aGlzLnNwbGl0KGIsdGhpcy50bXApLHg9KGI9KGI9dGhpcy5pbXVsSyhiKSkuaWFk''@;'; put 'put ''ZCh0aGlzLnRtcCkpLmJpdExlbmd0aCgpfXdoaWxlKHg+dGhpcy5uKTt2YXIgQz14PHRoaXMubj8tMTpiLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PUM/KGIud29yZHNbMF09MCxiLmxlbmd0aD0xKTpDPjA/Yi5pc3ViKHRoaXMucCk6dm9pZCAwIT09Yi5zdHJpcD9iLnN0cmlwKCk6Yi5fc3Ry''@;'; put 'put ''aXAoKSxifSxpZS5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24ocCxiKXtwLml1c2hybih0aGlzLm4sMCxiKX0saWUucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHApe3JldHVybiBwLmltdWwodGhpcy5rKX0sQihsZSxpZSksbGUucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHAsYil7Zm9yKHZh''@;'; put 'put ''ciB4PTQxOTQzMDMsQz1NYXRoLm1pbihwLmxlbmd0aCw5KSxUPTA7VDxDO1QrKyliLndvcmRzW1RdPXAud29yZHNbVF07aWYoYi5sZW5ndGg9QyxwLmxlbmd0aDw9OSlyZXR1cm4gcC53b3Jkc1swXT0wLHZvaWQocC5sZW5ndGg9MSk7dmFyIEg9cC53b3Jkc1s5XTtmb3IoYi53b3Jkc1tiLmxl''@;'; put 'put ''bmd0aCsrXT1IJngsVD0xMDtUPHAubGVuZ3RoO1QrKyl7dmFyIGo9MHxwLndvcmRzW1RdO3Aud29yZHNbVC0xMF09KGomeCk8PDR8SD4+PjIyLEg9an1wLndvcmRzW1QtMTBdPUg+Pj49MjIscC5sZW5ndGgtPTA9PT1IJiZwLmxlbmd0aD4xMD8xMDo5fSxsZS5wcm90b3R5cGUuaW11bEs9ZnVu''@;'; put 'put ''Y3Rpb24ocCl7cC53b3Jkc1twLmxlbmd0aF09MCxwLndvcmRzW3AubGVuZ3RoKzFdPTAscC5sZW5ndGgrPTI7Zm9yKHZhciBiPTAseD0wO3g8cC5sZW5ndGg7eCsrKXt2YXIgQz0wfHAud29yZHNbeF07cC53b3Jkc1t4XT02NzEwODg2MyYoYis9OTc3KkMpLGI9NjQqQysoYi82NzEwODg2NHww''@;'; put 'put ''KX1yZXR1cm4gMD09PXAud29yZHNbcC5sZW5ndGgtMV0mJihwLmxlbmd0aC0tLDA9PT1wLndvcmRzW3AubGVuZ3RoLTFdJiZwLmxlbmd0aC0tKSxwfSxCKG1lLGllKSxCKF9lLGllKSxCKFRlLGllKSxUZS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24ocCl7Zm9yKHZhciBiPTAseD0wO3g8cC5s''@;'; put 'put ''ZW5ndGg7eCsrKXt2YXIgQz0xOSooMHxwLndvcmRzW3hdKStiLFQ9NjcxMDg4NjMmQztDPj4+PTI2LHAud29yZHNbeF09VCxiPUN9cmV0dXJuIDAhPT1iJiYocC53b3Jkc1twLmxlbmd0aCsrXT1iKSxwfSx3Ll9wcmltZT1mdW5jdGlvbihwKXtpZihyZVtwXSlyZXR1cm4gcmVbcF07dmFyIGI7''@;'; put 'put ''aWYoImsyNTYiPT09cCliPW5ldyBsZTtlbHNlIGlmKCJwMjI0Ij09PXApYj1uZXcgbWU7ZWxzZSBpZigicDE5MiI9PT1wKWI9bmV3IF9lO2Vsc2V7aWYoInAyNTUxOSIhPT1wKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBwcmltZSAiK3ApO2I9bmV3IFRlfXJldHVybiByZVtwXT1iLGJ9LFNl''@;'; put 'put ''LnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbihwKXtnKDA9PT1wLm5lZ2F0aXZlLCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlcyIpLGcocC5yZWQsInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnMiKX0sU2UucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHAsYil7Zygh''@;'; put 'put ''KHAubmVnYXRpdmV8Yi5uZWdhdGl2ZSksInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzIiksZyhwLnJlZCYmcC5yZWQ9PT1iLnJlZCwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVycyIpfSxTZS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5wcmltZT90''@;'; put 'put ''aGlzLnByaW1lLmlyZWR1Y2UocCkuX2ZvcmNlUmVkKHRoaXMpOnAudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLm5lZz1mdW5jdGlvbihwKXtyZXR1cm4gcC5pc1plcm8oKT9wLmNsb25lKCk6dGhpcy5tLnN1YihwKS5fZm9yY2VSZWQodGhpcyl9LFNlLnByb3Rv''@;'; put 'put ''dHlwZS5hZGQ9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5hZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHguX2ZvcmNlUmVkKHRoaXMpfSxTZS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbihwLGIpe3RoaXMuX3ZlcmlmeTIocCxi''@;'; put 'put ''KTt2YXIgeD1wLmlhZGQoYik7cmV0dXJuIHguY21wKHRoaXMubSk+PTAmJnguaXN1Yih0aGlzLm0pLHh9LFNlLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5zdWIoYik7cmV0dXJuIHguY21wbigwKTwwJiZ4LmlhZGQodGhpcy5tKSx4Ll9m''@;'; put 'put ''b3JjZVJlZCh0aGlzKX0sU2UucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24ocCxiKXt0aGlzLl92ZXJpZnkyKHAsYik7dmFyIHg9cC5pc3ViKGIpO3JldHVybiB4LmNtcG4oMCk8MCYmeC5pYWRkKHRoaXMubSkseH0sU2UucHJvdG90eXBlLnNobD1mdW5jdGlvbihwLGIpe3JldHVybiB0aGlzLl92''@;'; put 'put ''ZXJpZnkxKHApLHRoaXMuaW1vZChwLnVzaGxuKGIpKX0sU2UucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MihwLGIpLHRoaXMuaW1vZChwLmltdWwoYikpfSxTZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7cmV0dXJuIHRoaXMuX3ZlcmlmeTIo''@;'; put 'put ''cCxiKSx0aGlzLmltb2QocC5tdWwoYikpfSxTZS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5pbXVsKHAscC5jbG9uZSgpKX0sU2UucHJvdG90eXBlLnNxcj1mdW5jdGlvbihwKXtyZXR1cm4gdGhpcy5tdWwocCxwKX0sU2UucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24o''@;'; put 'put ''cCl7aWYocC5pc1plcm8oKSlyZXR1cm4gcC5jbG9uZSgpO3ZhciBiPXRoaXMubS5hbmRsbigzKTtpZihnKGIlMj09MSksMz09PWIpe3ZhciB4PXRoaXMubS5hZGQobmV3IHcoMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3cocCx4KX1mb3IodmFyIEM9dGhpcy5tLnN1Ym4oMSksVD0wOyFD''@;'; put 'put ''LmlzWmVybygpJiYwPT09Qy5hbmRsbigxKTspVCsrLEMuaXVzaHJuKDEpO2coIUMuaXNaZXJvKCkpO3ZhciBIPW5ldyB3KDEpLnRvUmVkKHRoaXMpLGo9SC5yZWROZWcoKSxFPXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxtPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IobT1uZXcgdygyKm0qbSku''@;'; put 'put ''dG9SZWQodGhpcyk7MCE9PXRoaXMucG93KG0sRSkuY21wKGopOyltLnJlZElBZGQoaik7Zm9yKHZhciBBPXRoaXMucG93KG0sQyksb2U9dGhpcy5wb3cocCxDLmFkZG4oMSkuaXVzaHJuKDEpKSx0ZT10aGlzLnBvdyhwLEMpLHNlPVQ7MCE9PXRlLmNtcChIKTspe2Zvcih2YXIgd2U9dGUsVWU9''@;'; put 'put ''MDswIT09d2UuY21wKEgpO1VlKyspd2U9d2UucmVkU3FyKCk7ZyhVZTxzZSk7dmFyIEplPXRoaXMucG93KEEsbmV3IHcoMSkuaXVzaGxuKHNlLVVlLTEpKTtvZT1vZS5yZWRNdWwoSmUpLEE9SmUucmVkU3FyKCksdGU9dGUucmVkTXVsKEEpLHNlPVVlfXJldHVybiBvZX0sU2UucHJvdG90eXBl''@;'; put 'put ''Lmludm09ZnVuY3Rpb24ocCl7dmFyIGI9cC5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWIubmVnYXRpdmU/KGIubmVnYXRpdmU9MCx0aGlzLmltb2QoYikucmVkTmVnKCkpOnRoaXMuaW1vZChiKX0sU2UucHJvdG90eXBlLnBvdz1mdW5jdGlvbihwLGIpe2lmKGIuaXNaZXJvKCkpcmV0dXJu''@;'; put 'put ''IG5ldyB3KDEpLnRvUmVkKHRoaXMpO2lmKDA9PT1iLmNtcG4oMSkpcmV0dXJuIHAuY2xvbmUoKTt2YXIgQz1uZXcgQXJyYXkoMTYpO0NbMF09bmV3IHcoMSkudG9SZWQodGhpcyksQ1sxXT1wO2Zvcih2YXIgVD0yO1Q8Qy5sZW5ndGg7VCsrKUNbVF09dGhpcy5tdWwoQ1tULTFdLHApO3ZhciBI''@;'; put 'put ''PUNbMF0saj0wLEU9MCxtPWIuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT1tJiYobT0yNiksVD1iLmxlbmd0aC0xO1Q+PTA7VC0tKXtmb3IodmFyIEE9Yi53b3Jkc1tUXSxvZT1tLTE7b2U+PTA7b2UtLSl7dmFyIHRlPUE+Pm9lJjE7SCE9PUNbMF0mJihIPXRoaXMuc3FyKEgpKSwwIT09dGV8fDAh''@;'; put 'put ''PT1qPyhqPDw9MSxqfD10ZSwoND09KytFfHwwPT09VCYmMD09PW9lKSYmKEg9dGhpcy5tdWwoSCxDW2pdKSxFPTAsaj0wKSk6RT0wfW09MjZ9cmV0dXJuIEh9LFNlLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24ocCl7dmFyIGI9cC51bW9kKHRoaXMubSk7cmV0dXJuIGI9PT1wP2IuY2xv''@;'; put 'put ''bmUoKTpifSxTZS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24ocCl7dmFyIGI9cC5jbG9uZSgpO3JldHVybiBiLnJlZD1udWxsLGJ9LHcubW9udD1mdW5jdGlvbihwKXtyZXR1cm4gbmV3IHplKHApfSxCKHplLFNlKSx6ZS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHApe3Jl''@;'; put 'put ''dHVybiB0aGlzLmltb2QocC51c2hsbih0aGlzLnNoaWZ0KSl9LHplLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbihwKXt2YXIgYj10aGlzLmltb2QocC5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGIucmVkPW51bGwsYn0semUucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24ocCxiKXtpZihw''@;'; put 'put ''LmlzWmVybygpfHxiLmlzWmVybygpKXJldHVybiBwLndvcmRzWzBdPTAscC5sZW5ndGg9MSxwO3ZhciB4PXAuaW11bChiKSxDPXgubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLFQ9eC5pc3ViKEMpLml1c2hybih0aGlzLnNo''@;'; put 'put ''aWZ0KSxIPVQ7cmV0dXJuIFQuY21wKHRoaXMubSk+PTA/SD1ULmlzdWIodGhpcy5tKTpULmNtcG4oMCk8MCYmKEg9VC5pYWRkKHRoaXMubSkpLEguX2ZvcmNlUmVkKHRoaXMpfSx6ZS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHAsYil7aWYocC5pc1plcm8oKXx8Yi5pc1plcm8oKSlyZXR1cm4g''@;'; put 'put ''bmV3IHcoMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciB4PXAubXVsKGIpLEM9eC5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksVD14LmlzdWIoQykuaXVzaHJuKHRoaXMuc2hpZnQpLEg9VDtyZXR1cm4gVC5jbXAodGhpcy5tKT49''@;'; put 'put ''MD9IPVQuaXN1Yih0aGlzLm0pOlQuY21wbigwKTwwJiYoSD1ULmlhZGQodGhpcy5tKSksSC5fZm9yY2VSZWQodGhpcyl9LHplLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHApe3JldHVybiB0aGlzLmltb2QocC5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpLl9mb3JjZVJlZCh0aGlzKX19''@;'; put 'put ''KHVlPV8ubm1kKHVlKSx0aGlzKX0sOTg2MTM6KHVlLHEsXyk9Pnt2YXIgST1fKDY1NjY3KSx5PV8oMzA3MTUpLGc9XygzNzE5NiksQj1fKDE2NTA4KSx3PV8oMTQxMDUpLFA9Xyg2NzIxMSksRj1fKDEwNTY4KSxPPV8oMjcwNTQpLkJ1ZmZlcjt1ZS5leHBvcnRzPWZ1bmN0aW9uKFUsVyxZKXt2''@;'; put 'put ''YXIgWDtYPVUucGFkZGluZz9VLnBhZGRpbmc6WT8xOjQ7dmFyIHJlLGVlPUkoVSksSj1lZS5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtpZihXLmxlbmd0aD5KfHxuZXcgQihXKS5jbXAoZWUubW9kdWx1cyk+PTApdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7cmU9WT9GKG5ldyBC''@;'; put 'put ''KFcpLGVlKTp3KFcsZWUpO3ZhciBpZT1PLmFsbG9jKEotcmUubGVuZ3RoKTtpZihyZT1PLmNvbmNhdChbaWUscmVdLEopLDQ9PT1YKXJldHVybiBmdW5jdGlvbiB6KEssVSl7dmFyIFc9Sy5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxZPVAoInNoYTEiKS51cGRhdGUoTy5hbGxvYygwKSkuZGlnZXN0''@;'; put 'put ''KCksWD1ZLmxlbmd0aDtpZigwIT09VVswXSl0aHJvdyBuZXcgRXJyb3IoImRlY3J5cHRpb24gZXJyb3IiKTt2YXIgZWU9VS5zbGljZSgxLFgrMSksSj1VLnNsaWNlKFgrMSkscmU9ZyhlZSx5KEosWCkpLGllPWcoSix5KHJlLFctWC0xKSk7aWYoZnVuY3Rpb24gTChLLFUpe0s9Ty5mcm9tKEsp''@;'; put 'put ''LFU9Ty5mcm9tKFUpO3ZhciBXPTAsWT1LLmxlbmd0aDtLLmxlbmd0aCE9PVUubGVuZ3RoJiYoVysrLFk9TWF0aC5taW4oSy5sZW5ndGgsVS5sZW5ndGgpKTtmb3IodmFyIFg9LTE7KytYPFk7KVcrPUtbWF1eVVtYXTtyZXR1cm4gV30oWSxpZS5zbGljZSgwLFgpKSl0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''ImRlY3J5cHRpb24gZXJyb3IiKTtmb3IodmFyIGxlPVg7MD09PWllW2xlXTspbGUrKztpZigxIT09aWVbbGUrK10pdGhyb3cgbmV3IEVycm9yKCJkZWNyeXB0aW9uIGVycm9yIik7cmV0dXJuIGllLnNsaWNlKGxlKX0oZWUscmUpO2lmKDE9PT1YKXJldHVybiBmdW5jdGlvbiBOKEssVSxXKXtm''@;'; put 'put ''b3IodmFyIFk9VS5zbGljZSgwLDIpLFg9MixlZT0wOzAhPT1VW1grK107KWlmKFg+PVUubGVuZ3RoKXtlZSsrO2JyZWFrfXZhciBKPVUuc2xpY2UoMixYLTEpO2lmKCgiMDAwMiIhPT1ZLnRvU3RyaW5nKCJoZXgiKSYmIVd8fCIwMDAxIiE9PVkudG9TdHJpbmcoImhleCIpJiZXKSYmZWUrKyxK''@;'; put 'put ''Lmxlbmd0aDw4JiZlZSsrLGVlKXRocm93IG5ldyBFcnJvcigiZGVjcnlwdGlvbiBlcnJvciIpO3JldHVybiBVLnNsaWNlKFgpfSgwLHJlLFkpO2lmKDM9PT1YKXJldHVybiByZTt0aHJvdyBuZXcgRXJyb3IoInVua25vd24gcGFkZGluZyIpfX0sODcyNjc6KHVlLHEsXyk9Pnt2YXIgST1fKDY1''@;'; put 'put ''NjY3KSx5PV8oMzM0MiksZz1fKDY3MjExKSxCPV8oMzA3MTUpLHc9XygzNzE5NiksUD1fKDE2NTA4KSxGPV8oMTA1NjgpLE89XygxNDEwNSksej1fKDI3MDU0KS5CdWZmZXI7dWUuZXhwb3J0cz1mdW5jdGlvbihXLFksWCl7dmFyIGVlO2VlPVcucGFkZGluZz9XLnBhZGRpbmc6WD8xOjQ7dmFy''@;'; put 'put ''IHJlLEo9SShXKTtpZig0PT09ZWUpcmU9ZnVuY3Rpb24gTihVLFcpe3ZhciBZPVUubW9kdWx1cy5ieXRlTGVuZ3RoKCksWD1XLmxlbmd0aCxlZT1nKCJzaGExIikudXBkYXRlKHouYWxsb2MoMCkpLmRpZ2VzdCgpLEo9ZWUubGVuZ3RoLHJlPTIqSjtpZihYPlktcmUtMil0aHJvdyBuZXcgRXJy''@;'; put 'put ''b3IoIm1lc3NhZ2UgdG9vIGxvbmciKTt2YXIgaWU9ei5hbGxvYyhZLVgtcmUtMiksbGU9WS1KLTEsbWU9eShKKSxfZT13KHouY29uY2F0KFtlZSxpZSx6LmFsbG9jKDEsMSksV10sbGUpLEIobWUsbGUpKSxUZT13KG1lLEIoX2UsSikpO3JldHVybiBuZXcgUCh6LmNvbmNhdChbei5hbGxvYygx''@;'; put 'put ''KSxUZSxfZV0sWSkpfShKLFkpO2Vsc2UgaWYoMT09PWVlKXJlPWZ1bmN0aW9uIEwoVSxXLFkpe3ZhciBKLFg9Vy5sZW5ndGgsZWU9VS5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtpZihYPmVlLTExKXRocm93IG5ldyBFcnJvcigibWVzc2FnZSB0b28gbG9uZyIpO3JldHVybiBKPVk/ei5hbGxvYyhl''@;'; put 'put ''ZS1YLTMsMjU1KTpmdW5jdGlvbiBLKFUpe2Zvcih2YXIgSixXPXouYWxsb2NVbnNhZmUoVSksWT0wLFg9eSgyKlUpLGVlPTA7WTxVOyllZT09PVgubGVuZ3RoJiYoWD15KDIqVSksZWU9MCksKEo9WFtlZSsrXSkmJihXW1krK109Sik7cmV0dXJuIFd9KGVlLVgtMyksbmV3IFAoei5jb25jYXQo''@;'; put 'put ''W3ouZnJvbShbMCxZPzE6Ml0pLEosei5hbGxvYygxKSxXXSxlZSkpfShKLFksWCk7ZWxzZXtpZigzIT09ZWUpdGhyb3cgbmV3IEVycm9yKCJ1bmtub3duIHBhZGRpbmciKTtpZigocmU9bmV3IFAoWSkpLmNtcChKLm1vZHVsdXMpPj0wKXRocm93IG5ldyBFcnJvcigiZGF0YSB0b28gbG9uZyBm''@;'; put 'put ''b3IgbW9kdWx1cyIpfXJldHVybiBYP08ocmUsSik6RihyZSxKKX19LDEwNTY4Oih1ZSxxLF8pPT57dmFyIEk9XygxNjUwOCkseT1fKDI3MDU0KS5CdWZmZXI7dWUuZXhwb3J0cz1mdW5jdGlvbiBnKEIsdyl7cmV0dXJuIHkuZnJvbShCLnRvUmVkKEkubW9udCh3Lm1vZHVsdXMpKS5yZWRQb3co''@;'; put 'put ''bmV3IEkody5wdWJsaWNFeHBvbmVudCkpLmZyb21SZWQoKS50b0FycmF5KCkpfX0sMzcxOTY6dWU9Pnt1ZS5leHBvcnRzPWZ1bmN0aW9uKF8sSSl7Zm9yKHZhciB5PV8ubGVuZ3RoLGc9LTE7KytnPHk7KV9bZ11ePUlbZ107cmV0dXJuIF99fSwzMzQyOih1ZSxxLF8pPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O3ZhciBJPTY1NTM2LEI9XygyNzA1NCkuQnVmZmVyLHc9Z2xvYmFsLmNyeXB0b3x8Z2xvYmFsLm1zQ3J5cHRvO3VlLmV4cG9ydHM9dyYmdy5nZXRSYW5kb21WYWx1ZXM/ZnVuY3Rpb24gUChGLE8pe2lmKEY+NDI5NDk2NzI5NSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigicmVxdWVzdGVkIHRvbyBt''@;'; put 'put ''YW55IHJhbmRvbSBieXRlcyIpO3ZhciB6PUIuYWxsb2NVbnNhZmUoRik7aWYoRj4wKWlmKEY+SSlmb3IodmFyIE49MDtOPEY7Tis9SSl3LmdldFJhbmRvbVZhbHVlcyh6LnNsaWNlKE4sTitJKSk7ZWxzZSB3LmdldFJhbmRvbVZhbHVlcyh6KTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgTz9w''@;'; put 'put ''cm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCl7TyhudWxsLHopfSk6en06ZnVuY3Rpb24gZygpe3Rocm93IG5ldyBFcnJvcigiU2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3Nlci5cblVzZSBDaHJvbWUsIEZpcmVmb3ggb3IgSW50''@;'; put 'put ''ZXJuZXQgRXhwbG9yZXIgMTEiKX19LDk2ODI6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSSgpe3Rocm93IG5ldyBFcnJvcigic2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3NlclxudXNlIGNocm9tZSwgRmlyZUZveCBv''@;'; put 'put ''ciBJbnRlcm5ldCBFeHBsb3JlciAxMSIpfXZhciB5PV8oMjcwNTQpLGc9XygzMzQyKSxCPXkuQnVmZmVyLHc9eS5rTWF4TGVuZ3RoLFA9Z2xvYmFsLmNyeXB0b3x8Z2xvYmFsLm1zQ3J5cHRvLEY9TWF0aC5wb3coMiwzMiktMTtmdW5jdGlvbiBPKFUsVyl7aWYoIm51bWJlciIhPXR5cGVvZiBV''@;'; put 'put ''fHxVIT1VKXRocm93IG5ldyBUeXBlRXJyb3IoIm9mZnNldCBtdXN0IGJlIGEgbnVtYmVyIik7aWYoVT5GfHxVPDApdGhyb3cgbmV3IFR5cGVFcnJvcigib2Zmc2V0IG11c3QgYmUgYSB1aW50MzIiKTtpZihVPnd8fFU+Vyl0aHJvdyBuZXcgUmFuZ2VFcnJvcigib2Zmc2V0IG91dCBvZiByYW5n''@;'; put 'put ''ZSIpfWZ1bmN0aW9uIHooVSxXLFkpe2lmKCJudW1iZXIiIT10eXBlb2YgVXx8VSE9VSl0aHJvdyBuZXcgVHlwZUVycm9yKCJzaXplIG11c3QgYmUgYSBudW1iZXIiKTtpZihVPkZ8fFU8MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJzaXplIG11c3QgYmUgYSB1aW50MzIiKTtpZihVK1c+WXx8VT53''@;'; put 'put ''KXRocm93IG5ldyBSYW5nZUVycm9yKCJidWZmZXIgdG9vIHNtYWxsIil9ZnVuY3Rpb24gTChVLFcsWSxYKXtpZihwcm9jZXNzLmJyb3dzZXIpe3ZhciBKPW5ldyBVaW50OEFycmF5KFUuYnVmZmVyLFcsWSk7cmV0dXJuIFAuZ2V0UmFuZG9tVmFsdWVzKEopLFg/dm9pZCBwcm9jZXNzLm5leHRU''@;'; put 'put ''aWNrKGZ1bmN0aW9uKCl7WChudWxsLFUpfSk6VX1pZighWClyZXR1cm4gZyhZKS5jb3B5KFUsVyksVTtnKFksZnVuY3Rpb24oaWUsbGUpe2lmKGllKXJldHVybiBYKGllKTtsZS5jb3B5KFUsVyksWChudWxsLFUpfSl9UCYmUC5nZXRSYW5kb21WYWx1ZXN8fCFwcm9jZXNzLmJyb3dzZXI/KHEu''@;'; put 'put ''cmFuZG9tRmlsbD1mdW5jdGlvbiBOKFUsVyxZLFgpe2lmKCEoQi5pc0J1ZmZlcihVKXx8VSBpbnN0YW5jZW9mIGdsb2JhbC5VaW50OEFycmF5KSl0aHJvdyBuZXcgVHlwZUVycm9yKCciYnVmIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtpZigiZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2YgVylYPVcsVz0wLFk9VS5sZW5ndGg7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgWSlYPVksWT1VLmxlbmd0aC1XO2Vsc2UgaWYoImZ1bmN0aW9uIiE9dHlwZW9mIFgpdGhyb3cgbmV3IFR5cGVFcnJvcignImNiIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtyZXR1''@;'; put 'put ''cm4gTyhXLFUubGVuZ3RoKSx6KFksVyxVLmxlbmd0aCksTChVLFcsWSxYKX0scS5yYW5kb21GaWxsU3luYz1mdW5jdGlvbiBLKFUsVyxZKXtpZih0eXBlb2YgVz4idSImJihXPTApLCEoQi5pc0J1ZmZlcihVKXx8VSBpbnN0YW5jZW9mIGdsb2JhbC5VaW50OEFycmF5KSl0aHJvdyBuZXcgVHlw''@;'; put 'put ''ZUVycm9yKCciYnVmIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKTtyZXR1cm4gTyhXLFUubGVuZ3RoKSx2b2lkIDA9PT1ZJiYoWT1VLmxlbmd0aC1XKSx6KFksVyxVLmxlbmd0aCksTChVLFcsWSl9KToocS5yYW5kb21GaWxsPUkscS5yYW5kb21GaWxsU3luYz1J''@;'; put 'put ''KX0sNzQwNzU6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg5NjU2KSx5PU9iamVjdC5rZXlzfHxmdW5jdGlvbihLKXt2YXIgVT1bXTtmb3IodmFyIFcgaW4gSylVLnB1c2goVyk7cmV0dXJuIFV9O3VlLmV4cG9ydHM9ejt2YXIgZz1PYmplY3QuY3JlYXRlKF8oMjc2MzcpKTtnLmlu''@;'; put 'put ''aGVyaXRzPV8oNzE5OTMpO3ZhciBCPV8oMTk2MDkpLHc9Xyg0Nzg0OSk7Zy5pbmhlcml0cyh6LEIpO2Zvcih2YXIgUD15KHcucHJvdG90eXBlKSxGPTA7RjxQLmxlbmd0aDtGKyspe3ZhciBPPVBbRl07ei5wcm90b3R5cGVbT118fCh6LnByb3RvdHlwZVtPXT13LnByb3RvdHlwZVtPXSl9ZnVu''@;'; put 'put ''Y3Rpb24geihLKXtpZighKHRoaXMgaW5zdGFuY2VvZiB6KSlyZXR1cm4gbmV3IHooSyk7Qi5jYWxsKHRoaXMsSyksdy5jYWxsKHRoaXMsSyksSyYmITE9PT1LLnJlYWRhYmxlJiYodGhpcy5yZWFkYWJsZT0hMSksSyYmITE9PT1LLndyaXRhYmxlJiYodGhpcy53cml0YWJsZT0hMSksdGhpcy5h''@;'; put 'put ''bGxvd0hhbGZPcGVuPSEwLEsmJiExPT09Sy5hbGxvd0hhbGZPcGVuJiYodGhpcy5hbGxvd0hhbGZPcGVuPSExKSx0aGlzLm9uY2UoImVuZCIsTil9ZnVuY3Rpb24gTigpe3RoaXMuYWxsb3dIYWxmT3Blbnx8dGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRlZHx8SS5uZXh0VGljayhMLHRoaXMpfWZ1''@;'; put 'put ''bmN0aW9uIEwoSyl7Sy5lbmQoKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoei5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVmaW5l''@;'; put 'put ''UHJvcGVydHkoei5wcm90b3R5cGUsImRlc3Ryb3llZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl9yZWFkYWJsZVN0YXRlJiZ2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCYmdGhpcy5fd3JpdGFibGVTdGF0''@;'; put 'put ''ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihLKXt2b2lkIDA9PT10aGlzLl9yZWFkYWJsZVN0YXRlfHx2b2lkIDA9PT10aGlzLl93cml0YWJsZVN0YXRlfHwodGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9Syx0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1LKX19KSx6LnByb3Rv''@;'; put 'put ''dHlwZS5fZGVzdHJveT1mdW5jdGlvbihLLFUpe3RoaXMucHVzaChudWxsKSx0aGlzLmVuZCgpLEkubmV4dFRpY2soVSxLKX19LDE4ODIzOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9Zzt2YXIgST1fKDI5MDkpLHk9T2JqZWN0LmNyZWF0ZShfKDI3NjM3KSk7ZnVuY3Rpb24g''@;'; put 'put ''ZyhCKXtpZighKHRoaXMgaW5zdGFuY2VvZiBnKSlyZXR1cm4gbmV3IGcoQik7SS5jYWxsKHRoaXMsQil9eS5pbmhlcml0cz1fKDcxOTkzKSx5LmluaGVyaXRzKGcsSSksZy5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbihCLHcsUCl7UChudWxsLEIpfX0sMTk2MDk6KHVlLHEsXyk9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIEk9Xyg5NjU2KTt1ZS5leHBvcnRzPWllO3ZhciBnLHk9XygyMDA1Myk7aWUuUmVhZGFibGVTdGF0ZT1yZSxfKDQ0MzU2KTt2YXIgdz1mdW5jdGlvbihNZSx2ZSl7cmV0dXJuIE1lLmxpc3RlbmVycyh2ZSkubGVuZ3RofSxQPV8oMTgzNDIpLEY9XygyNjU1KS5CdWZm''@;'; put 'put ''ZXIsTz0odHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9LEw9T2JqZWN0LmNyZWF0ZShfKDI3NjM3KSk7TC5pbmhlcml0cz1fKDcxOTkzKTt2YXIgSz1fKDc5ODM4''@;'; put 'put ''KSxVPXZvaWQgMDtVPUsmJksuZGVidWdsb2c/Sy5kZWJ1Z2xvZygic3RyZWFtIik6ZnVuY3Rpb24oKXt9O3ZhciBYLFc9XygyNzgwOSksWT1fKDIxNTA5KTtMLmluaGVyaXRzKGllLFApO3ZhciBlZT1bImVycm9yIiwiY2xvc2UiLCJkZXN0cm95IiwicGF1c2UiLCJyZXN1bWUiXTtmdW5jdGlv''@;'; put 'put ''biByZShNZSx2ZSl7dmFyIFhlPXZlIGluc3RhbmNlb2YoZz1nfHxfKDc0MDc1KSk7dGhpcy5vYmplY3RNb2RlPSEhKE1lPU1lfHx7fSkub2JqZWN0TW9kZSxYZSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhTWUucmVhZGFibGVPYmplY3RNb2RlKTt2YXIgamU9TWUuaGln''@;'; put 'put ''aFdhdGVyTWFyayxEZT1NZS5yZWFkYWJsZUhpZ2hXYXRlck1hcms7dGhpcy5oaWdoV2F0ZXJNYXJrPWplfHwwPT09amU/amU6WGUmJihEZXx8MD09PURlKT9EZTp0aGlzLm9iamVjdE1vZGU/MTY6MTYzODQsdGhpcy5oaWdoV2F0ZXJNYXJrPU1hdGguZmxvb3IodGhpcy5oaWdoV2F0ZXJNYXJr''@;'; put 'put ''KSx0aGlzLmJ1ZmZlcj1uZXcgVyx0aGlzLmxlbmd0aD0wLHRoaXMucGlwZXM9bnVsbCx0aGlzLnBpcGVzQ291bnQ9MCx0aGlzLmZsb3dpbmc9bnVsbCx0aGlzLmVuZGVkPSExLHRoaXMuZW5kRW1pdHRlZD0hMSx0aGlzLnJlYWRpbmc9ITEsdGhpcy5zeW5jPSEwLHRoaXMubmVlZFJlYWRhYmxl''@;'; put 'put ''PSExLHRoaXMuZW1pdHRlZFJlYWRhYmxlPSExLHRoaXMucmVhZGFibGVMaXN0ZW5pbmc9ITEsdGhpcy5yZXN1bWVTY2hlZHVsZWQ9ITEsdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWZhdWx0RW5jb2Rpbmc9TWUuZGVmYXVsdEVuY29kaW5nfHwidXRmOCIsdGhpcy5hd2FpdERyYWluPTAsdGhp''@;'; put 'put ''cy5yZWFkaW5nTW9yZT0hMSx0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmVuY29kaW5nPW51bGwsTWUuZW5jb2RpbmcmJihYfHwoWD1fKDc4NDU0KS5JKSx0aGlzLmRlY29kZXI9bmV3IFgoTWUuZW5jb2RpbmcpLHRoaXMuZW5jb2Rpbmc9TWUuZW5jb2RpbmcpfWZ1bmN0aW9uIGllKE1lKXtpZihn''@;'; put 'put ''PWd8fF8oNzQwNzUpLCEodGhpcyBpbnN0YW5jZW9mIGllKSlyZXR1cm4gbmV3IGllKE1lKTt0aGlzLl9yZWFkYWJsZVN0YXRlPW5ldyByZShNZSx0aGlzKSx0aGlzLnJlYWRhYmxlPSEwLE1lJiYoImZ1bmN0aW9uIj09dHlwZW9mIE1lLnJlYWQmJih0aGlzLl9yZWFkPU1lLnJlYWQpLCJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiBNZS5kZXN0cm95JiYodGhpcy5fZGVzdHJveT1NZS5kZXN0cm95KSksUC5jYWxsKHRoaXMpfWZ1bmN0aW9uIGxlKE1lLHZlLFhlLGplLERlKXt2YXIgUmUsRmU9TWUuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIG51bGw9PT12ZT8oRmUucmVhZGluZz0hMSxmdW5jdGlvbiBw''@;'; put 'put ''KE1lLHZlKXtpZighdmUuZW5kZWQpe2lmKHZlLmRlY29kZXIpe3ZhciBYZT12ZS5kZWNvZGVyLmVuZCgpO1hlJiZYZS5sZW5ndGgmJih2ZS5idWZmZXIucHVzaChYZSksdmUubGVuZ3RoKz12ZS5vYmplY3RNb2RlPzE6WGUubGVuZ3RoKX12ZS5lbmRlZD0hMCxiKE1lKX19KE1lLEZlKSk6KERl''@;'; put 'put ''fHwoUmU9ZnVuY3Rpb24gX2UoTWUsdmUpe3ZhciBYZTtyZXR1cm4hZnVuY3Rpb24gTihNZSl7cmV0dXJuIEYuaXNCdWZmZXIoTWUpfHxNZSBpbnN0YW5jZW9mIE99KHZlKSYmInN0cmluZyIhPXR5cGVvZiB2ZSYmdm9pZCAwIT09dmUmJiFNZS5vYmplY3RNb2RlJiYoWGU9bmV3IFR5cGVFcnJv''@;'; put 'put ''cigiSW52YWxpZCBub24tc3RyaW5nL2J1ZmZlciBjaHVuayIpKSxYZX0oRmUsdmUpKSxSZT9NZS5lbWl0KCJlcnJvciIsUmUpOkZlLm9iamVjdE1vZGV8fHZlJiZ2ZS5sZW5ndGg+MD8oInN0cmluZyIhPXR5cGVvZiB2ZSYmIUZlLm9iamVjdE1vZGUmJk9iamVjdC5nZXRQcm90b3R5cGVPZih2''@;'; put 'put ''ZSkhPT1GLnByb3RvdHlwZSYmKHZlPWZ1bmN0aW9uIHooTWUpe3JldHVybiBGLmZyb20oTWUpfSh2ZSkpLGplP0ZlLmVuZEVtaXR0ZWQ/TWUuZW1pdCgiZXJyb3IiLG5ldyBFcnJvcigic3RyZWFtLnVuc2hpZnQoKSBhZnRlciBlbmQgZXZlbnQiKSk6bWUoTWUsRmUsdmUsITApOkZlLmVuZGVk''@;'; put 'put ''P01lLmVtaXQoImVycm9yIixuZXcgRXJyb3IoInN0cmVhbS5wdXNoKCkgYWZ0ZXIgRU9GIikpOihGZS5yZWFkaW5nPSExLEZlLmRlY29kZXImJiFYZT8odmU9RmUuZGVjb2Rlci53cml0ZSh2ZSksRmUub2JqZWN0TW9kZXx8MCE9PXZlLmxlbmd0aD9tZShNZSxGZSx2ZSwhMSk6QyhNZSxGZSkp''@;'; put 'put ''Om1lKE1lLEZlLHZlLCExKSkpOmplfHwoRmUucmVhZGluZz0hMSkpLGZ1bmN0aW9uIFRlKE1lKXtyZXR1cm4hTWUuZW5kZWQmJihNZS5uZWVkUmVhZGFibGV8fE1lLmxlbmd0aDxNZS5oaWdoV2F0ZXJNYXJrfHwwPT09TWUubGVuZ3RoKX0oRmUpfWZ1bmN0aW9uIG1lKE1lLHZlLFhlLGplKXt2''@;'; put 'put ''ZS5mbG93aW5nJiYwPT09dmUubGVuZ3RoJiYhdmUuc3luYz8oTWUuZW1pdCgiZGF0YSIsWGUpLE1lLnJlYWQoMCkpOih2ZS5sZW5ndGgrPXZlLm9iamVjdE1vZGU/MTpYZS5sZW5ndGgsamU/dmUuYnVmZmVyLnVuc2hpZnQoWGUpOnZlLmJ1ZmZlci5wdXNoKFhlKSx2ZS5uZWVkUmVhZGFibGUm''@;'; put 'put ''JmIoTWUpKSxDKE1lLHZlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoaWUucHJvdG90eXBlLCJkZXN0cm95ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR9LHNldDpmdW5jdGlvbihNZSl7''@;'; put 'put ''dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPU1lKX19KSxpZS5wcm90b3R5cGUuZGVzdHJveT1ZLmRlc3Ryb3ksaWUucHJvdG90eXBlLl91bmRlc3Ryb3k9WS51bmRlc3Ryb3ksaWUucHJvdG90eXBlLl9kZXN0cm95PWZ1bmN0aW9uKE1lLHZlKXt0''@;'; put 'put ''aGlzLnB1c2gobnVsbCksdmUoTWUpfSxpZS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihNZSx2ZSl7dmFyIGplLFhlPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIFhlLm9iamVjdE1vZGU/amU9ITA6InN0cmluZyI9PXR5cGVvZiBNZSYmKCh2ZT12ZXx8WGUuZGVmYXVsdEVuY29kaW5nKSE9''@;'; put 'put ''PVhlLmVuY29kaW5nJiYoTWU9Ri5mcm9tKE1lLHZlKSx2ZT0iIiksamU9ITApLGxlKHRoaXMsTWUsdmUsITEsamUpfSxpZS5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbihNZSl7cmV0dXJuIGxlKHRoaXMsTWUsbnVsbCwhMCwhMSl9LGllLnByb3RvdHlwZS5pc1BhdXNlZD1mdW5jdGlvbigp''@;'; put 'put ''e3JldHVybiExPT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nfSxpZS5wcm90b3R5cGUuc2V0RW5jb2Rpbmc9ZnVuY3Rpb24oTWUpe3JldHVybiBYfHwoWD1fKDc4NDU0KS5JKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmRlY29kZXI9bmV3IFgoTWUpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5j''@;'; put 'put ''b2Rpbmc9TWUsdGhpc307ZnVuY3Rpb24gVihNZSx2ZSl7cmV0dXJuIE1lPD0wfHwwPT09dmUubGVuZ3RoJiZ2ZS5lbmRlZD8wOnZlLm9iamVjdE1vZGU/MTpNZSE9TWU/dmUuZmxvd2luZyYmdmUubGVuZ3RoP3ZlLmJ1ZmZlci5oZWFkLmRhdGEubGVuZ3RoOnZlLmxlbmd0aDooTWU+dmUuaGln''@;'; put 'put ''aFdhdGVyTWFyayYmKHZlLmhpZ2hXYXRlck1hcms9ZnVuY3Rpb24gemUoTWUpe3JldHVybiBNZT49ODM4ODYwOD9NZT04Mzg4NjA4OihNZS0tLE1lfD1NZT4+PjEsTWV8PU1lPj4+MixNZXw9TWU+Pj40LE1lfD1NZT4+PjgsTWV8PU1lPj4+MTYsTWUrKyksTWV9KE1lKSksTWU8PXZlLmxlbmd0''@;'; put 'put ''aD9NZTp2ZS5lbmRlZD92ZS5sZW5ndGg6KHZlLm5lZWRSZWFkYWJsZT0hMCwwKSl9ZnVuY3Rpb24gYihNZSl7dmFyIHZlPU1lLl9yZWFkYWJsZVN0YXRlO3ZlLm5lZWRSZWFkYWJsZT0hMSx2ZS5lbWl0dGVkUmVhZGFibGV8fChVKCJlbWl0UmVhZGFibGUiLHZlLmZsb3dpbmcpLHZlLmVtaXR0''@;'; put 'put ''ZWRSZWFkYWJsZT0hMCx2ZS5zeW5jP0kubmV4dFRpY2soeCxNZSk6eChNZSkpfWZ1bmN0aW9uIHgoTWUpe1UoImVtaXQgcmVhZGFibGUiKSxNZS5lbWl0KCJyZWFkYWJsZSIpLEEoTWUpfWZ1bmN0aW9uIEMoTWUsdmUpe3ZlLnJlYWRpbmdNb3JlfHwodmUucmVhZGluZ01vcmU9ITAsSS5uZXh0''@;'; put 'put ''VGljayhULE1lLHZlKSl9ZnVuY3Rpb24gVChNZSx2ZSl7Zm9yKHZhciBYZT12ZS5sZW5ndGg7IXZlLnJlYWRpbmcmJiF2ZS5mbG93aW5nJiYhdmUuZW5kZWQmJnZlLmxlbmd0aDx2ZS5oaWdoV2F0ZXJNYXJrJiYoVSgibWF5YmVSZWFkTW9yZSByZWFkIDAiKSxNZS5yZWFkKDApLFhlIT09dmUu''@;'; put 'put ''bGVuZ3RoKTspWGU9dmUubGVuZ3RoO3ZlLnJlYWRpbmdNb3JlPSExfWZ1bmN0aW9uIGooTWUpe1UoInJlYWRhYmxlIG5leHR0aWNrIHJlYWQgMCIpLE1lLnJlYWQoMCl9ZnVuY3Rpb24gbShNZSx2ZSl7dmUucmVhZGluZ3x8KFUoInJlc3VtZSByZWFkIDAiKSxNZS5yZWFkKDApKSx2ZS5yZXN1''@;'; put 'put ''bWVTY2hlZHVsZWQ9ITEsdmUuYXdhaXREcmFpbj0wLE1lLmVtaXQoInJlc3VtZSIpLEEoTWUpLHZlLmZsb3dpbmcmJiF2ZS5yZWFkaW5nJiZNZS5yZWFkKDApfWZ1bmN0aW9uIEEoTWUpe3ZhciB2ZT1NZS5fcmVhZGFibGVTdGF0ZTtmb3IoVSgiZmxvdyIsdmUuZmxvd2luZyk7dmUuZmxvd2lu''@;'; put 'put ''ZyYmbnVsbCE9PU1lLnJlYWQoKTspO31mdW5jdGlvbiBvZShNZSx2ZSl7cmV0dXJuIDA9PT12ZS5sZW5ndGg/bnVsbDoodmUub2JqZWN0TW9kZT9YZT12ZS5idWZmZXIuc2hpZnQoKTohTWV8fE1lPj12ZS5sZW5ndGg/KFhlPXZlLmRlY29kZXI/dmUuYnVmZmVyLmpvaW4oIiIpOjE9PT12ZS5i''@;'; put 'put ''dWZmZXIubGVuZ3RoP3ZlLmJ1ZmZlci5oZWFkLmRhdGE6dmUuYnVmZmVyLmNvbmNhdCh2ZS5sZW5ndGgpLHZlLmJ1ZmZlci5jbGVhcigpKTpYZT1mdW5jdGlvbiB0ZShNZSx2ZSxYZSl7dmFyIGplO3JldHVybiBNZTx2ZS5oZWFkLmRhdGEubGVuZ3RoPyhqZT12ZS5oZWFkLmRhdGEuc2xpY2Uo''@;'; put 'put ''MCxNZSksdmUuaGVhZC5kYXRhPXZlLmhlYWQuZGF0YS5zbGljZShNZSkpOmplPU1lPT09dmUuaGVhZC5kYXRhLmxlbmd0aD92ZS5zaGlmdCgpOlhlP2Z1bmN0aW9uIHNlKE1lLHZlKXt2YXIgWGU9dmUuaGVhZCxqZT0xLERlPVhlLmRhdGE7Zm9yKE1lLT1EZS5sZW5ndGg7WGU9WGUubmV4dDsp''@;'; put 'put ''e3ZhciBGZT1YZS5kYXRhLFJlPU1lPkZlLmxlbmd0aD9GZS5sZW5ndGg6TWU7aWYoRGUrPVJlPT09RmUubGVuZ3RoP0ZlOkZlLnNsaWNlKDAsTWUpLDA9PShNZS09UmUpKXtSZT09PUZlLmxlbmd0aD8oKytqZSx2ZS5oZWFkPVhlLm5leHQ/WGUubmV4dDp2ZS50YWlsPW51bGwpOih2ZS5oZWFk''@;'; put 'put ''PVhlLFhlLmRhdGE9RmUuc2xpY2UoUmUpKTticmVha30rK2plfXJldHVybiB2ZS5sZW5ndGgtPWplLERlfShNZSx2ZSk6ZnVuY3Rpb24gd2UoTWUsdmUpe3ZhciBYZT1GLmFsbG9jVW5zYWZlKE1lKSxqZT12ZS5oZWFkLERlPTE7Zm9yKGplLmRhdGEuY29weShYZSksTWUtPWplLmRhdGEubGVu''@;'; put 'put ''Z3RoO2plPWplLm5leHQ7KXt2YXIgRmU9amUuZGF0YSxSZT1NZT5GZS5sZW5ndGg/RmUubGVuZ3RoOk1lO2lmKEZlLmNvcHkoWGUsWGUubGVuZ3RoLU1lLDAsUmUpLDA9PShNZS09UmUpKXtSZT09PUZlLmxlbmd0aD8oKytEZSx2ZS5oZWFkPWplLm5leHQ/amUubmV4dDp2ZS50YWlsPW51bGwp''@;'; put 'put ''Oih2ZS5oZWFkPWplLGplLmRhdGE9RmUuc2xpY2UoUmUpKTticmVha30rK0RlfXJldHVybiB2ZS5sZW5ndGgtPURlLFhlfShNZSx2ZSksamV9KE1lLHZlLmJ1ZmZlcix2ZS5kZWNvZGVyKSxYZSk7dmFyIFhlfWZ1bmN0aW9uIFVlKE1lKXt2YXIgdmU9TWUuX3JlYWRhYmxlU3RhdGU7aWYodmUu''@;'; put 'put ''bGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCciZW5kUmVhZGFibGUoKSIgY2FsbGVkIG9uIG5vbi1lbXB0eSBzdHJlYW0nKTt2ZS5lbmRFbWl0dGVkfHwodmUuZW5kZWQ9ITAsSS5uZXh0VGljayhKZSx2ZSxNZSkpfWZ1bmN0aW9uIEplKE1lLHZlKXshTWUuZW5kRW1pdHRlZCYmMD09PU1lLmxl''@;'; put 'put ''bmd0aCYmKE1lLmVuZEVtaXR0ZWQ9ITAsdmUucmVhZGFibGU9ITEsdmUuZW1pdCgiZW5kIikpfWZ1bmN0aW9uIGF0KE1lLHZlKXtmb3IodmFyIFhlPTAsamU9TWUubGVuZ3RoO1hlPGplO1hlKyspaWYoTWVbWGVdPT09dmUpcmV0dXJuIFhlO3JldHVybi0xfWllLnByb3RvdHlwZS5yZWFkPWZ1''@;'; put 'put ''bmN0aW9uKE1lKXtVKCJyZWFkIixNZSksTWU9cGFyc2VJbnQoTWUsMTApO3ZhciB2ZT10aGlzLl9yZWFkYWJsZVN0YXRlLFhlPU1lO2lmKDAhPT1NZSYmKHZlLmVtaXR0ZWRSZWFkYWJsZT0hMSksMD09PU1lJiZ2ZS5uZWVkUmVhZGFibGUmJih2ZS5sZW5ndGg+PXZlLmhpZ2hXYXRlck1hcmt8''@;'; put 'put ''fHZlLmVuZGVkKSlyZXR1cm4gVSgicmVhZDogZW1pdFJlYWRhYmxlIix2ZS5sZW5ndGgsdmUuZW5kZWQpLDA9PT12ZS5sZW5ndGgmJnZlLmVuZGVkP1VlKHRoaXMpOmIodGhpcyksbnVsbDtpZigwPT09KE1lPVYoTWUsdmUpKSYmdmUuZW5kZWQpcmV0dXJuIDA9PT12ZS5sZW5ndGgmJlVlKHRo''@;'; put 'put ''aXMpLG51bGw7dmFyIERlLGplPXZlLm5lZWRSZWFkYWJsZTtyZXR1cm4gVSgibmVlZCByZWFkYWJsZSIsamUpLCgwPT09dmUubGVuZ3RofHx2ZS5sZW5ndGgtTWU8dmUuaGlnaFdhdGVyTWFyaykmJlUoImxlbmd0aCBsZXNzIHRoYW4gd2F0ZXJtYXJrIixqZT0hMCksdmUuZW5kZWR8fHZlLnJl''@;'; put 'put ''YWRpbmc/VSgicmVhZGluZyBvciBlbmRlZCIsamU9ITEpOmplJiYoVSgiZG8gcmVhZCIpLHZlLnJlYWRpbmc9ITAsdmUuc3luYz0hMCwwPT09dmUubGVuZ3RoJiYodmUubmVlZFJlYWRhYmxlPSEwKSx0aGlzLl9yZWFkKHZlLmhpZ2hXYXRlck1hcmspLHZlLnN5bmM9ITEsdmUucmVhZGluZ3x8''@;'; put 'put ''KE1lPVYoWGUsdmUpKSksbnVsbD09PShEZT1NZT4wP29lKE1lLHZlKTpudWxsKT8odmUubmVlZFJlYWRhYmxlPSEwLE1lPTApOnZlLmxlbmd0aC09TWUsMD09PXZlLmxlbmd0aCYmKHZlLmVuZGVkfHwodmUubmVlZFJlYWRhYmxlPSEwKSxYZSE9PU1lJiZ2ZS5lbmRlZCYmVWUodGhpcykpLG51''@;'; put 'put ''bGwhPT1EZSYmdGhpcy5lbWl0KCJkYXRhIixEZSksRGV9LGllLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihNZSl7dGhpcy5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJfcmVhZCgpIGlzIG5vdCBpbXBsZW1lbnRlZCIpKX0saWUucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oTWUsdmUpe3ZhciBY''@;'; put 'put ''ZT10aGlzLGplPXRoaXMuX3JlYWRhYmxlU3RhdGU7c3dpdGNoKGplLnBpcGVzQ291bnQpe2Nhc2UgMDpqZS5waXBlcz1NZTticmVhaztjYXNlIDE6amUucGlwZXM9W2plLnBpcGVzLE1lXTticmVhaztkZWZhdWx0OmplLnBpcGVzLnB1c2goTWUpfWplLnBpcGVzQ291bnQrPTEsVSgicGlwZSBj''@;'; put 'put ''b3VudD0lZCBvcHRzPSVqIixqZS5waXBlc0NvdW50LHZlKTt2YXIgRmU9dmUmJiExPT09dmUuZW5kfHxNZT09PXByb2Nlc3Muc3Rkb3V0fHxNZT09PXByb2Nlc3Muc3RkZXJyP010OkllO2Z1bmN0aW9uIEllKCl7VSgib25lbmQiKSxNZS5lbmQoKX1qZS5lbmRFbWl0dGVkP0kubmV4dFRpY2so''@;'; put 'put ''RmUpOlhlLm9uY2UoImVuZCIsRmUpLE1lLm9uKCJ1bnBpcGUiLGZ1bmN0aW9uIFJlKER0LGl0KXtVKCJvbnVucGlwZSIpLER0PT09WGUmJml0JiYhMT09PWl0Lmhhc1VucGlwZWQmJihpdC5oYXNVbnBpcGVkPSEwLGZ1bmN0aW9uIEFlKCl7VSgiY2xlYW51cCIpLE1lLnJlbW92ZUxpc3RlbmVy''@;'; put 'put ''KCJjbG9zZSIsZG4pLE1lLnJlbW92ZUxpc3RlbmVyKCJmaW5pc2giLHl0KSxNZS5yZW1vdmVMaXN0ZW5lcigiZHJhaW4iLFZlKSxNZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLFFlKSxNZS5yZW1vdmVMaXN0ZW5lcigidW5waXBlIixSZSksWGUucmVtb3ZlTGlzdGVuZXIoImVuZCIsSWUpLFhl''@;'; put 'put ''LnJlbW92ZUxpc3RlbmVyKCJlbmQiLE10KSxYZS5yZW1vdmVMaXN0ZW5lcigiZGF0YSIscnQpLGtlPSEwLGplLmF3YWl0RHJhaW4mJighTWUuX3dyaXRhYmxlU3RhdGV8fE1lLl93cml0YWJsZVN0YXRlLm5lZWREcmFpbikmJlZlKCl9KCkpfSk7dmFyIFZlPWZ1bmN0aW9uIEgoTWUpe3JldHVy''@;'; put 'put ''biBmdW5jdGlvbigpe3ZhciB2ZT1NZS5fcmVhZGFibGVTdGF0ZTtVKCJwaXBlT25EcmFpbiIsdmUuYXdhaXREcmFpbiksdmUuYXdhaXREcmFpbiYmdmUuYXdhaXREcmFpbi0tLDA9PT12ZS5hd2FpdERyYWluJiZ3KE1lLCJkYXRhIikmJih2ZS5mbG93aW5nPSEwLEEoTWUpKX19KFhlKTtNZS5v''@;'; put 'put ''bigiZHJhaW4iLFZlKTt2YXIga2U9ITEsX3Q9ITE7ZnVuY3Rpb24gcnQoRHQpe1UoIm9uZGF0YSIpLF90PSExLCExPT09TWUud3JpdGUoRHQpJiYhX3QmJigoMT09PWplLnBpcGVzQ291bnQmJmplLnBpcGVzPT09TWV8fGplLnBpcGVzQ291bnQ+MSYmLTEhPT1hdChqZS5waXBlcyxNZSkpJiYh''@;'; put 'put ''a2UmJihVKCJmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2UiLGplLmF3YWl0RHJhaW4pLGplLmF3YWl0RHJhaW4rKyxfdD0hMCksWGUucGF1c2UoKSl9ZnVuY3Rpb24gUWUoRHQpe1UoIm9uZXJyb3IiLER0KSxNdCgpLE1lLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsUWUpLDA9PT13KE1lLCJl''@;'; put 'put ''cnJvciIpJiZNZS5lbWl0KCJlcnJvciIsRHQpfWZ1bmN0aW9uIGRuKCl7TWUucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIseXQpLE10KCl9ZnVuY3Rpb24geXQoKXtVKCJvbmZpbmlzaCIpLE1lLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsZG4pLE10KCl9ZnVuY3Rpb24gTXQoKXtVKCJ1bnBpcGUi''@;'; put 'put ''KSxYZS51bnBpcGUoTWUpfXJldHVybiBYZS5vbigiZGF0YSIscnQpLGZ1bmN0aW9uIEooTWUsdmUsWGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBNZS5wcmVwZW5kTGlzdGVuZXIpcmV0dXJuIE1lLnByZXBlbmRMaXN0ZW5lcih2ZSxYZSk7TWUuX2V2ZW50cyYmTWUuX2V2ZW50c1t2ZV0/eShN''@;'; put 'put ''ZS5fZXZlbnRzW3ZlXSk/TWUuX2V2ZW50c1t2ZV0udW5zaGlmdChYZSk6TWUuX2V2ZW50c1t2ZV09W1hlLE1lLl9ldmVudHNbdmVdXTpNZS5vbih2ZSxYZSl9KE1lLCJlcnJvciIsUWUpLE1lLm9uY2UoImNsb3NlIixkbiksTWUub25jZSgiZmluaXNoIix5dCksTWUuZW1pdCgicGlwZSIsWGUp''@;'; put 'put ''LGplLmZsb3dpbmd8fChVKCJwaXBlIHJlc3VtZSIpLFhlLnJlc3VtZSgpKSxNZX0saWUucHJvdG90eXBlLnVucGlwZT1mdW5jdGlvbihNZSl7dmFyIHZlPXRoaXMuX3JlYWRhYmxlU3RhdGUsWGU9e2hhc1VucGlwZWQ6ITF9O2lmKDA9PT12ZS5waXBlc0NvdW50KXJldHVybiB0aGlzO2lmKDE9''@;'; put 'put ''PT12ZS5waXBlc0NvdW50KXJldHVybiBNZSYmTWUhPT12ZS5waXBlc3x8KE1lfHwoTWU9dmUucGlwZXMpLHZlLnBpcGVzPW51bGwsdmUucGlwZXNDb3VudD0wLHZlLmZsb3dpbmc9ITEsTWUmJk1lLmVtaXQoInVucGlwZSIsdGhpcyxYZSkpLHRoaXM7aWYoIU1lKXt2YXIgamU9dmUucGlwZXMs''@;'; put 'put ''RGU9dmUucGlwZXNDb3VudDt2ZS5waXBlcz1udWxsLHZlLnBpcGVzQ291bnQ9MCx2ZS5mbG93aW5nPSExO2Zvcih2YXIgRmU9MDtGZTxEZTtGZSsrKWplW0ZlXS5lbWl0KCJ1bnBpcGUiLHRoaXMse2hhc1VucGlwZWQ6ITF9KTtyZXR1cm4gdGhpc312YXIgUmU9YXQodmUucGlwZXMsTWUpO3Jl''@;'; put 'put ''dHVybi0xPT09UmV8fCh2ZS5waXBlcy5zcGxpY2UoUmUsMSksdmUucGlwZXNDb3VudC09MSwxPT09dmUucGlwZXNDb3VudCYmKHZlLnBpcGVzPXZlLnBpcGVzWzBdKSxNZS5lbWl0KCJ1bnBpcGUiLHRoaXMsWGUpKSx0aGlzfSxpZS5wcm90b3R5cGUuYWRkTGlzdGVuZXI9aWUucHJvdG90eXBl''@;'; put 'put ''Lm9uPWZ1bmN0aW9uKE1lLHZlKXt2YXIgWGU9UC5wcm90b3R5cGUub24uY2FsbCh0aGlzLE1lLHZlKTtpZigiZGF0YSI9PT1NZSkhMSE9PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyYmdGhpcy5yZXN1bWUoKTtlbHNlIGlmKCJyZWFkYWJsZSI9PT1NZSl7dmFyIGplPXRoaXMuX3JlYWRh''@;'; put 'put ''YmxlU3RhdGU7IWplLmVuZEVtaXR0ZWQmJiFqZS5yZWFkYWJsZUxpc3RlbmluZyYmKGplLnJlYWRhYmxlTGlzdGVuaW5nPWplLm5lZWRSZWFkYWJsZT0hMCxqZS5lbWl0dGVkUmVhZGFibGU9ITEsamUucmVhZGluZz9qZS5sZW5ndGgmJmIodGhpcyk6SS5uZXh0VGljayhqLHRoaXMpKX1yZXR1''@;'; put 'put ''cm4gWGV9LGllLnByb3RvdHlwZS5yZXN1bWU9ZnVuY3Rpb24oKXt2YXIgTWU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gTWUuZmxvd2luZ3x8KFUoInJlc3VtZSIpLE1lLmZsb3dpbmc9ITAsZnVuY3Rpb24gRShNZSx2ZSl7dmUucmVzdW1lU2NoZWR1bGVkfHwodmUucmVzdW1lU2NoZWR1''@;'; put 'put ''bGVkPSEwLEkubmV4dFRpY2sobSxNZSx2ZSkpfSh0aGlzLE1lKSksdGhpc30saWUucHJvdG90eXBlLnBhdXNlPWZ1bmN0aW9uKCl7cmV0dXJuIFUoImNhbGwgcGF1c2UgZmxvd2luZz0laiIsdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKSwhMSE9PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxv''@;'; put 'put ''d2luZyYmKFUoInBhdXNlIiksdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPSExLHRoaXMuZW1pdCgicGF1c2UiKSksdGhpc30saWUucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24oTWUpe3ZhciB2ZT10aGlzLFhlPXRoaXMuX3JlYWRhYmxlU3RhdGUsamU9ITE7Zm9yKHZhciBEZSBpbiBNZS5v''@;'; put 'put ''bigiZW5kIixmdW5jdGlvbigpe2lmKFUoIndyYXBwZWQgZW5kIiksWGUuZGVjb2RlciYmIVhlLmVuZGVkKXt2YXIgUmU9WGUuZGVjb2Rlci5lbmQoKTtSZSYmUmUubGVuZ3RoJiZ2ZS5wdXNoKFJlKX12ZS5wdXNoKG51bGwpfSksTWUub24oImRhdGEiLGZ1bmN0aW9uKFJlKXtVKCJ3cmFwcGVk''@;'; put 'put ''IGRhdGEiKSxYZS5kZWNvZGVyJiYoUmU9WGUuZGVjb2Rlci53cml0ZShSZSkpLFhlLm9iamVjdE1vZGUmJm51bGw9PVJlfHwhKFhlLm9iamVjdE1vZGV8fFJlJiZSZS5sZW5ndGgpfHx2ZS5wdXNoKFJlKXx8KGplPSEwLE1lLnBhdXNlKCkpfSksTWUpdm9pZCAwPT09dGhpc1tEZV0mJiJmdW5j''@;'; put 'put ''dGlvbiI9PXR5cGVvZiBNZVtEZV0mJih0aGlzW0RlXT1mdW5jdGlvbihSZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIE1lW1JlXS5hcHBseShNZSxhcmd1bWVudHMpfX0oRGUpKTtmb3IodmFyIEZlPTA7RmU8ZWUubGVuZ3RoO0ZlKyspTWUub24oZWVbRmVdLHRoaXMuZW1pdC5iaW5kKHRo''@;'; put 'put ''aXMsZWVbRmVdKSk7cmV0dXJuIHRoaXMuX3JlYWQ9ZnVuY3Rpb24oUmUpe1UoIndyYXBwZWQgX3JlYWQiLFJlKSxqZSYmKGplPSExLE1lLnJlc3VtZSgpKX0sdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KGllLnByb3RvdHlwZSwicmVhZGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJs''@;'; put 'put ''ZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZS5oaWdoV2F0ZXJNYXJrfX0pLGllLl9mcm9tTGlzdD1vZX0sMjkwOToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPUI7dmFyIEk9Xyg3NDA3NSkseT1PYmplY3QuY3JlYXRlKF8oMjc2MzcpKTtm''@;'; put 'put ''dW5jdGlvbiBnKEYsTyl7dmFyIHo9dGhpcy5fdHJhbnNmb3JtU3RhdGU7ei50cmFuc2Zvcm1pbmc9ITE7dmFyIE49ei53cml0ZWNiO2lmKCFOKXJldHVybiB0aGlzLmVtaXQoImVycm9yIixuZXcgRXJyb3IoIndyaXRlIGNhbGxiYWNrIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyIpKTt6LndyaXRl''@;'; put 'put ''Y2h1bms9bnVsbCx6LndyaXRlY2I9bnVsbCxudWxsIT1PJiZ0aGlzLnB1c2goTyksTihGKTt2YXIgTD10aGlzLl9yZWFkYWJsZVN0YXRlO0wucmVhZGluZz0hMSwoTC5uZWVkUmVhZGFibGV8fEwubGVuZ3RoPEwuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoTC5oaWdoV2F0ZXJNYXJrKX1m''@;'; put 'put ''dW5jdGlvbiBCKEYpe2lmKCEodGhpcyBpbnN0YW5jZW9mIEIpKXJldHVybiBuZXcgQihGKTtJLmNhbGwodGhpcyxGKSx0aGlzLl90cmFuc2Zvcm1TdGF0ZT17YWZ0ZXJUcmFuc2Zvcm06Zy5iaW5kKHRoaXMpLG5lZWRUcmFuc2Zvcm06ITEsdHJhbnNmb3JtaW5nOiExLHdyaXRlY2I6bnVsbCx3''@;'; put 'put ''cml0ZWNodW5rOm51bGwsd3JpdGVlbmNvZGluZzpudWxsfSx0aGlzLl9yZWFkYWJsZVN0YXRlLm5lZWRSZWFkYWJsZT0hMCx0aGlzLl9yZWFkYWJsZVN0YXRlLnN5bmM9ITEsRiYmKCJmdW5jdGlvbiI9PXR5cGVvZiBGLnRyYW5zZm9ybSYmKHRoaXMuX3RyYW5zZm9ybT1GLnRyYW5zZm9ybSks''@;'; put 'put ''ImZ1bmN0aW9uIj09dHlwZW9mIEYuZmx1c2gmJih0aGlzLl9mbHVzaD1GLmZsdXNoKSksdGhpcy5vbigicHJlZmluaXNoIix3KX1mdW5jdGlvbiB3KCl7dmFyIEY9dGhpczsiZnVuY3Rpb24iPT10eXBlb2YgdGhpcy5fZmx1c2g/dGhpcy5fZmx1c2goZnVuY3Rpb24oTyx6KXtQKEYsTyx6KX0p''@;'; put 'put ''OlAodGhpcyxudWxsLG51bGwpfWZ1bmN0aW9uIFAoRixPLHope2lmKE8pcmV0dXJuIEYuZW1pdCgiZXJyb3IiLE8pO2lmKG51bGwhPXomJkYucHVzaCh6KSxGLl93cml0YWJsZVN0YXRlLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIkNhbGxpbmcgdHJhbnNmb3JtIGRvbmUgd2hlbiB3cy5sZW5n''@;'; put 'put ''dGggIT0gMCIpO2lmKEYuX3RyYW5zZm9ybVN0YXRlLnRyYW5zZm9ybWluZyl0aHJvdyBuZXcgRXJyb3IoIkNhbGxpbmcgdHJhbnNmb3JtIGRvbmUgd2hlbiBzdGlsbCB0cmFuc2Zvcm1pbmciKTtyZXR1cm4gRi5wdXNoKG51bGwpfXkuaW5oZXJpdHM9Xyg3MTk5MykseS5pbmhlcml0cyhCLEkp''@;'; put 'put ''LEIucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24oRixPKXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybT0hMSxJLnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyxGLE8pfSxCLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKEYsTyx6KXt0aHJvdyBuZXcgRXJyb3Io''@;'; put 'put ''Il90cmFuc2Zvcm0oKSBpcyBub3QgaW1wbGVtZW50ZWQiKX0sQi5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKEYsTyx6KXt2YXIgTj10aGlzLl90cmFuc2Zvcm1TdGF0ZTtpZihOLndyaXRlY2I9eixOLndyaXRlY2h1bms9RixOLndyaXRlZW5jb2Rpbmc9TywhTi50cmFuc2Zvcm1pbmcpe3Zh''@;'; put 'put ''ciBMPXRoaXMuX3JlYWRhYmxlU3RhdGU7KE4ubmVlZFRyYW5zZm9ybXx8TC5uZWVkUmVhZGFibGV8fEwubGVuZ3RoPEwuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoTC5oaWdoV2F0ZXJNYXJrKX19LEIucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKEYpe3ZhciBPPXRoaXMuX3RyYW5zZm9y''@;'; put 'put ''bVN0YXRlO251bGwhPT1PLndyaXRlY2h1bmsmJk8ud3JpdGVjYiYmIU8udHJhbnNmb3JtaW5nPyhPLnRyYW5zZm9ybWluZz0hMCx0aGlzLl90cmFuc2Zvcm0oTy53cml0ZWNodW5rLE8ud3JpdGVlbmNvZGluZyxPLmFmdGVyVHJhbnNmb3JtKSk6Ty5uZWVkVHJhbnNmb3JtPSEwfSxCLnByb3Rv''@;'; put 'put ''dHlwZS5fZGVzdHJveT1mdW5jdGlvbihGLE8pe3ZhciB6PXRoaXM7SS5wcm90b3R5cGUuX2Rlc3Ryb3kuY2FsbCh0aGlzLEYsZnVuY3Rpb24oTil7TyhOKSx6LmVtaXQoImNsb3NlIil9KX19LDQ3ODQ5Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oOTY1Nik7ZnVuY3Rpb24gZyhF''@;'; put 'put ''KXt2YXIgbT10aGlzO3RoaXMubmV4dD1udWxsLHRoaXMuZW50cnk9bnVsbCx0aGlzLmZpbmlzaD1mdW5jdGlvbigpeyFmdW5jdGlvbiBqKEUsbSxBKXt2YXIgb2U9RS5lbnRyeTtmb3IoRS5lbnRyeT1udWxsO29lOyl7dmFyIHRlPW9lLmNhbGxiYWNrO20ucGVuZGluZ2NiLS0sdGUoQSksb2U9''@;'; put 'put ''b2UubmV4dH1tLmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0PUV9KG0sRSl9fXVlLmV4cG9ydHM9ZWU7dmFyIHcsQj0hcHJvY2Vzcy5icm93c2VyJiZbInYwLjEwIiwidjAuOS4iXS5pbmRleE9mKHByb2Nlc3MudmVyc2lvbi5zbGljZSgwLDUpKT4tMT9zZXRJbW1lZGlhdGU6SS5uZXh0VGljaztl''@;'; put 'put ''ZS5Xcml0YWJsZVN0YXRlPVk7dmFyIFA9T2JqZWN0LmNyZWF0ZShfKDI3NjM3KSk7UC5pbmhlcml0cz1fKDcxOTkzKTt2YXIgWCxGPXtkZXByZWNhdGU6XygzMzk4KX0sTz1fKDE4MzQyKSx6PV8oMjY1NSkuQnVmZmVyLE49KHR5cGVvZiBnbG9iYWw8InUiP2dsb2JhbDp0eXBlb2Ygd2luZG93''@;'; put 'put ''PCJ1Ij93aW5kb3c6dHlwZW9mIHNlbGY8InUiP3NlbGY6e30pLlVpbnQ4QXJyYXl8fGZ1bmN0aW9uKCl7fSxVPV8oMjE1MDkpO2Z1bmN0aW9uIFcoKXt9ZnVuY3Rpb24gWShFLG0pe3c9d3x8Xyg3NDA3NSk7dmFyIEE9bSBpbnN0YW5jZW9mIHc7dGhpcy5vYmplY3RNb2RlPSEhKEU9RXx8e30p''@;'; put 'put ''Lm9iamVjdE1vZGUsQSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhRS53cml0YWJsZU9iamVjdE1vZGUpO3ZhciBvZT1FLmhpZ2hXYXRlck1hcmssdGU9RS53cml0YWJsZUhpZ2hXYXRlck1hcms7dGhpcy5oaWdoV2F0ZXJNYXJrPW9lfHwwPT09b2U/b2U6QSYmKHRlfHww''@;'; put 'put ''PT09dGUpP3RlOnRoaXMub2JqZWN0TW9kZT8xNjoxNjM4NCx0aGlzLmhpZ2hXYXRlck1hcms9TWF0aC5mbG9vcih0aGlzLmhpZ2hXYXRlck1hcmspLHRoaXMuZmluYWxDYWxsZWQ9ITEsdGhpcy5uZWVkRHJhaW49ITEsdGhpcy5lbmRpbmc9ITEsdGhpcy5lbmRlZD0hMSx0aGlzLmZpbmlzaGVk''@;'; put 'put ''PSExLHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVjb2RlU3RyaW5ncz0hKCExPT09RS5kZWNvZGVTdHJpbmdzKSx0aGlzLmRlZmF1bHRFbmNvZGluZz1FLmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMubGVuZ3RoPTAsdGhpcy53cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhpcy5zeW5j''@;'; put 'put ''PSEwLHRoaXMuYnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlzLm9ud3JpdGU9ZnVuY3Rpb24oVWUpeyFmdW5jdGlvbiBTZShFLG0pe3ZhciBBPUUuX3dyaXRhYmxlU3RhdGUsb2U9QS5zeW5jLHRlPUEud3JpdGVjYjtpZihmdW5jdGlvbiBUZShFKXtFLndyaXRpbmc9ITEsRS53cml0ZWNiPW51bGws''@;'; put 'put ''RS5sZW5ndGgtPUUud3JpdGVsZW4sRS53cml0ZWxlbj0wfShBKSxtKSFmdW5jdGlvbiBfZShFLG0sQSxvZSx0ZSl7LS1tLnBlbmRpbmdjYixBPyhJLm5leHRUaWNrKHRlLG9lKSxJLm5leHRUaWNrKFQsRSxtKSxFLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxFLmVtaXQoImVycm9y''@;'; put 'put ''IixvZSkpOih0ZShvZSksRS5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsRS5lbWl0KCJlcnJvciIsb2UpLFQoRSxtKSl9KEUsQSxvZSxtLHRlKTtlbHNle3ZhciBzZT1iKEEpOyFzZSYmIUEuY29ya2VkJiYhQS5idWZmZXJQcm9jZXNzaW5nJiZBLmJ1ZmZlcmVkUmVxdWVzdCYmcChF''@;'; put 'put ''LEEpLG9lP0IoemUsRSxBLHNlLHRlKTp6ZShFLEEsc2UsdGUpfX0obSxVZSl9LHRoaXMud3JpdGVjYj1udWxsLHRoaXMud3JpdGVsZW49MCx0aGlzLmJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLHRoaXMucGVuZGluZ2NiPTAsdGhpcy5wcmVmaW5p''@;'; put 'put ''c2hlZD0hMSx0aGlzLmVycm9yRW1pdHRlZD0hMSx0aGlzLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTAsdGhpcy5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IGcodGhpcyl9ZnVuY3Rpb24gZWUoRSl7aWYodz13fHxfKDc0MDc1KSwhKFguY2FsbChlZSx0aGlzKXx8dGhpcyBpbnN0YW5jZW9mIHcpKXJl''@;'; put 'put ''dHVybiBuZXcgZWUoRSk7dGhpcy5fd3JpdGFibGVTdGF0ZT1uZXcgWShFLHRoaXMpLHRoaXMud3JpdGFibGU9ITAsRSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBFLndyaXRlJiYodGhpcy5fd3JpdGU9RS53cml0ZSksImZ1bmN0aW9uIj09dHlwZW9mIEUud3JpdGV2JiYodGhpcy5fd3JpdGV2PUUu''@;'; put 'put ''d3JpdGV2KSwiZnVuY3Rpb24iPT10eXBlb2YgRS5kZXN0cm95JiYodGhpcy5fZGVzdHJveT1FLmRlc3Ryb3kpLCJmdW5jdGlvbiI9PXR5cGVvZiBFLmZpbmFsJiYodGhpcy5fZmluYWw9RS5maW5hbCkpLE8uY2FsbCh0aGlzKX1mdW5jdGlvbiBtZShFLG0sQSxvZSx0ZSxzZSx3ZSl7bS53cml0''@;'; put 'put ''ZWxlbj1vZSxtLndyaXRlY2I9d2UsbS53cml0aW5nPSEwLG0uc3luYz0hMCxBP0UuX3dyaXRldih0ZSxtLm9ud3JpdGUpOkUuX3dyaXRlKHRlLHNlLG0ub253cml0ZSksbS5zeW5jPSExfWZ1bmN0aW9uIHplKEUsbSxBLG9lKXtBfHxmdW5jdGlvbiBWKEUsbSl7MD09PW0ubGVuZ3RoJiZtLm5l''@;'; put 'put ''ZWREcmFpbiYmKG0ubmVlZERyYWluPSExLEUuZW1pdCgiZHJhaW4iKSl9KEUsbSksbS5wZW5kaW5nY2ItLSxvZSgpLFQoRSxtKX1mdW5jdGlvbiBwKEUsbSl7bS5idWZmZXJQcm9jZXNzaW5nPSEwO3ZhciBBPW0uYnVmZmVyZWRSZXF1ZXN0O2lmKEUuX3dyaXRldiYmQSYmQS5uZXh0KXt2YXIg''@;'; put 'put ''dGU9bmV3IEFycmF5KG0uYnVmZmVyZWRSZXF1ZXN0Q291bnQpLHNlPW0uY29ya2VkUmVxdWVzdHNGcmVlO3NlLmVudHJ5PUE7Zm9yKHZhciB3ZT0wLFVlPSEwO0E7KXRlW3dlXT1BLEEuaXNCdWZ8fChVZT0hMSksQT1BLm5leHQsd2UrPTE7dGUuYWxsQnVmZmVycz1VZSxtZShFLG0sITAsbS5s''@;'; put 'put ''ZW5ndGgsdGUsIiIsc2UuZmluaXNoKSxtLnBlbmRpbmdjYisrLG0ubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLHNlLm5leHQ/KG0uY29ya2VkUmVxdWVzdHNGcmVlPXNlLm5leHQsc2UubmV4dD1udWxsKTptLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgZyhtKSxtLmJ1ZmZlcmVkUmVxdWVzdENv''@;'; put 'put ''dW50PTB9ZWxzZXtmb3IoO0E7KXt2YXIgSmU9QS5jaHVuaztpZihtZShFLG0sITEsbS5vYmplY3RNb2RlPzE6SmUubGVuZ3RoLEplLEEuZW5jb2RpbmcsQS5jYWxsYmFjayksQT1BLm5leHQsbS5idWZmZXJlZFJlcXVlc3RDb3VudC0tLG0ud3JpdGluZylicmVha31udWxsPT09QSYmKG0ubGFz''@;'; put 'put ''dEJ1ZmZlcmVkUmVxdWVzdD1udWxsKX1tLmJ1ZmZlcmVkUmVxdWVzdD1BLG0uYnVmZmVyUHJvY2Vzc2luZz0hMX1mdW5jdGlvbiBiKEUpe3JldHVybiBFLmVuZGluZyYmMD09PUUubGVuZ3RoJiZudWxsPT09RS5idWZmZXJlZFJlcXVlc3QmJiFFLmZpbmlzaGVkJiYhRS53cml0aW5nfWZ1bmN0''@;'; put 'put ''aW9uIHgoRSxtKXtFLl9maW5hbChmdW5jdGlvbihBKXttLnBlbmRpbmdjYi0tLEEmJkUuZW1pdCgiZXJyb3IiLEEpLG0ucHJlZmluaXNoZWQ9ITAsRS5lbWl0KCJwcmVmaW5pc2giKSxUKEUsbSl9KX1mdW5jdGlvbiBUKEUsbSl7dmFyIEE9YihtKTtyZXR1cm4gQSYmKGZ1bmN0aW9uIEMoRSxt''@;'; put 'put ''KXshbS5wcmVmaW5pc2hlZCYmIW0uZmluYWxDYWxsZWQmJigiZnVuY3Rpb24iPT10eXBlb2YgRS5fZmluYWw/KG0ucGVuZGluZ2NiKyssbS5maW5hbENhbGxlZD0hMCxJLm5leHRUaWNrKHgsRSxtKSk6KG0ucHJlZmluaXNoZWQ9ITAsRS5lbWl0KCJwcmVmaW5pc2giKSkpfShFLG0pLDA9PT1t''@;'; put 'put ''LnBlbmRpbmdjYiYmKG0uZmluaXNoZWQ9ITAsRS5lbWl0KCJmaW5pc2giKSkpLEF9UC5pbmhlcml0cyhlZSxPKSxZLnByb3RvdHlwZS5nZXRCdWZmZXI9ZnVuY3Rpb24oKXtmb3IodmFyIG09dGhpcy5idWZmZXJlZFJlcXVlc3QsQT1bXTttOylBLnB1c2gobSksbT1tLm5leHQ7cmV0dXJuIEF9''@;'; put 'put ''LGZ1bmN0aW9uKCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShZLnByb3RvdHlwZSwiYnVmZmVyIix7Z2V0OkYuZGVwcmVjYXRlKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCl9LCJfd3JpdGFibGVTdGF0ZS5idWZmZXIgaXMgZGVwcmVjYXRlZC4gVXNlIF93cml0YWJsZVN0''@;'; put 'put ''YXRlLmdldEJ1ZmZlciBpbnN0ZWFkLiIsIkRFUDAwMDMiKX0pfWNhdGNoe319KCksImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLmhhc0luc3RhbmNlJiYiZnVuY3Rpb24iPT10eXBlb2YgRnVuY3Rpb24ucHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0/KFg9RnVuY3Rpb24u''@;'; put 'put ''cHJvdG90eXBlW1N5bWJvbC5oYXNJbnN0YW5jZV0sT2JqZWN0LmRlZmluZVByb3BlcnR5KGVlLFN5bWJvbC5oYXNJbnN0YW5jZSx7dmFsdWU6ZnVuY3Rpb24oRSl7cmV0dXJuISFYLmNhbGwodGhpcyxFKXx8dGhpcz09PWVlJiZFJiZFLl93cml0YWJsZVN0YXRlIGluc3RhbmNlb2YgWX19KSk6''@;'; put 'put ''WD1mdW5jdGlvbihFKXtyZXR1cm4gRSBpbnN0YW5jZW9mIHRoaXN9LGVlLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKCl7dGhpcy5lbWl0KCJlcnJvciIsbmV3IEVycm9yKCJDYW5ub3QgcGlwZSwgbm90IHJlYWRhYmxlIikpfSxlZS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24oRSxtLEEpe3Zh''@;'; put 'put ''ciBvZT10aGlzLl93cml0YWJsZVN0YXRlLHRlPSExLHNlPSFvZS5vYmplY3RNb2RlJiZmdW5jdGlvbiBLKEUpe3JldHVybiB6LmlzQnVmZmVyKEUpfHxFIGluc3RhbmNlb2YgTn0oRSk7cmV0dXJuIHNlJiYhei5pc0J1ZmZlcihFKSYmKEU9ZnVuY3Rpb24gTChFKXtyZXR1cm4gei5mcm9tKEUp''@;'; put 'put ''fShFKSksImZ1bmN0aW9uIj09dHlwZW9mIG0mJihBPW0sbT1udWxsKSxzZT9tPSJidWZmZXIiOm18fChtPW9lLmRlZmF1bHRFbmNvZGluZyksImZ1bmN0aW9uIiE9dHlwZW9mIEEmJihBPVcpLG9lLmVuZGVkP2Z1bmN0aW9uIEooRSxtKXt2YXIgQT1uZXcgRXJyb3IoIndyaXRlIGFmdGVyIGVu''@;'; put 'put ''ZCIpO0UuZW1pdCgiZXJyb3IiLEEpLEkubmV4dFRpY2sobSxBKX0odGhpcyxBKTooc2V8fGZ1bmN0aW9uIHJlKEUsbSxBLG9lKXt2YXIgdGU9ITAsc2U9ITE7cmV0dXJuIG51bGw9PT1BP3NlPW5ldyBUeXBlRXJyb3IoIk1heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtIik6InN0''@;'; put 'put ''cmluZyIhPXR5cGVvZiBBJiZ2b2lkIDAhPT1BJiYhbS5vYmplY3RNb2RlJiYoc2U9bmV3IFR5cGVFcnJvcigiSW52YWxpZCBub24tc3RyaW5nL2J1ZmZlciBjaHVuayIpKSxzZSYmKEUuZW1pdCgiZXJyb3IiLHNlKSxJLm5leHRUaWNrKG9lLHNlKSx0ZT0hMSksdGV9KHRoaXMsb2UsRSxBKSkm''@;'; put 'put ''JihvZS5wZW5kaW5nY2IrKyx0ZT1mdW5jdGlvbiBsZShFLG0sQSxvZSx0ZSxzZSl7aWYoIUEpe3ZhciB3ZT1mdW5jdGlvbiBpZShFLG0sQSl7cmV0dXJuIUUub2JqZWN0TW9kZSYmITEhPT1FLmRlY29kZVN0cmluZ3MmJiJzdHJpbmciPT10eXBlb2YgbSYmKG09ei5mcm9tKG0sQSkpLG19KG0s''@;'; put 'put ''b2UsdGUpO29lIT09d2UmJihBPSEwLHRlPSJidWZmZXIiLG9lPXdlKX12YXIgVWU9bS5vYmplY3RNb2RlPzE6b2UubGVuZ3RoO20ubGVuZ3RoKz1VZTt2YXIgSmU9bS5sZW5ndGg8bS5oaWdoV2F0ZXJNYXJrO2lmKEplfHwobS5uZWVkRHJhaW49ITApLG0ud3JpdGluZ3x8bS5jb3JrZWQpe3Zh''@;'; put 'put ''ciBhdD1tLmxhc3RCdWZmZXJlZFJlcXVlc3Q7bS5sYXN0QnVmZmVyZWRSZXF1ZXN0PXtjaHVuazpvZSxlbmNvZGluZzp0ZSxpc0J1ZjpBLGNhbGxiYWNrOnNlLG5leHQ6bnVsbH0sYXQ/YXQubmV4dD1tLmxhc3RCdWZmZXJlZFJlcXVlc3Q6bS5idWZmZXJlZFJlcXVlc3Q9bS5sYXN0QnVmZmVy''@;'; put 'put ''ZWRSZXF1ZXN0LG0uYnVmZmVyZWRSZXF1ZXN0Q291bnQrPTF9ZWxzZSBtZShFLG0sITEsVWUsb2UsdGUsc2UpO3JldHVybiBKZX0odGhpcyxvZSxzZSxFLG0sQSkpLHRlfSxlZS5wcm90b3R5cGUuY29yaz1mdW5jdGlvbigpe3RoaXMuX3dyaXRhYmxlU3RhdGUuY29ya2VkKyt9LGVlLnByb3Rv''@;'; put 'put ''dHlwZS51bmNvcms9ZnVuY3Rpb24oKXt2YXIgRT10aGlzLl93cml0YWJsZVN0YXRlO0UuY29ya2VkJiYoRS5jb3JrZWQtLSwhRS53cml0aW5nJiYhRS5jb3JrZWQmJiFFLmJ1ZmZlclByb2Nlc3NpbmcmJkUuYnVmZmVyZWRSZXF1ZXN0JiZwKHRoaXMsRSkpfSxlZS5wcm90b3R5cGUuc2V0RGVm''@;'; put 'put ''YXVsdEVuY29kaW5nPWZ1bmN0aW9uKG0pe2lmKCJzdHJpbmciPT10eXBlb2YgbSYmKG09bS50b0xvd2VyQ2FzZSgpKSwhKFsiaGV4IiwidXRmOCIsInV0Zi04IiwiYXNjaWkiLCJiaW5hcnkiLCJiYXNlNjQiLCJ1Y3MyIiwidWNzLTIiLCJ1dGYxNmxlIiwidXRmLTE2bGUiLCJyYXciXS5pbmRl''@;'; put 'put ''eE9mKChtKyIiKS50b0xvd2VyQ2FzZSgpKT4tMSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIittKTtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0RW5jb2Rpbmc9bSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZWUucHJvdG90eXBlLCJ3cml0''@;'; put 'put ''YWJsZUhpZ2hXYXRlck1hcmsiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmhpZ2hXYXRlck1hcmt9fSksZWUucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbihFLG0sQSl7QShuZXcgRXJyb3IoIl93cml0ZSgpIGlzIG5vdCBpbXBsZW1l''@;'; put 'put ''bnRlZCIpKX0sZWUucHJvdG90eXBlLl93cml0ZXY9bnVsbCxlZS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKEUsbSxBKXt2YXIgb2U9dGhpcy5fd3JpdGFibGVTdGF0ZTsiZnVuY3Rpb24iPT10eXBlb2YgRT8oQT1FLEU9bnVsbCxtPW51bGwpOiJmdW5jdGlvbiI9PXR5cGVvZiBtJiYoQT1tLG09''@;'; put 'put ''bnVsbCksbnVsbCE9RSYmdGhpcy53cml0ZShFLG0pLG9lLmNvcmtlZCYmKG9lLmNvcmtlZD0xLHRoaXMudW5jb3JrKCkpLG9lLmVuZGluZ3x8ZnVuY3Rpb24gSChFLG0sQSl7bS5lbmRpbmc9ITAsVChFLG0pLEEmJihtLmZpbmlzaGVkP0kubmV4dFRpY2soQSk6RS5vbmNlKCJmaW5pc2giLEEp''@;'; put 'put ''KSxtLmVuZGVkPSEwLEUud3JpdGFibGU9ITF9KHRoaXMsb2UsQSl9LE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlZS5wcm90b3R5cGUsImRlc3Ryb3llZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ry''@;'; put 'put ''b3llZH0sc2V0OmZ1bmN0aW9uKEUpe3RoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1FKX19KSxlZS5wcm90b3R5cGUuZGVzdHJveT1VLmRlc3Ryb3ksZWUucHJvdG90eXBlLl91bmRlc3Ryb3k9VS51bmRlc3Ryb3ksZWUucHJvdG90eXBlLl9kZXN0''@;'; put 'put ''cm95PWZ1bmN0aW9uKEUsbSl7dGhpcy5lbmQoKSxtKEUpfX0sMjc4MDk6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIHk9XygyNjU1KS5CdWZmZXIsZz1fKDE1MzQwKTtmdW5jdGlvbiBCKHcsUCxGKXt3LmNvcHkoUCxGKX11ZS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdygpeyhm''@;'; put 'put ''dW5jdGlvbiBJKHcsUCl7aWYoISh3IGluc3RhbmNlb2YgUCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KSh0aGlzLHcpLHRoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9cmV0dXJuIHcucHJvdG90eXBl''@;'; put 'put ''LnB1c2g9ZnVuY3Rpb24oRil7dmFyIE89e2RhdGE6RixuZXh0Om51bGx9O3RoaXMubGVuZ3RoPjA/dGhpcy50YWlsLm5leHQ9Tzp0aGlzLmhlYWQ9Tyx0aGlzLnRhaWw9TywrK3RoaXMubGVuZ3RofSx3LnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKEYpe3ZhciBPPXtkYXRhOkYsbmV4dDp0''@;'; put 'put ''aGlzLmhlYWR9OzA9PT10aGlzLmxlbmd0aCYmKHRoaXMudGFpbD1PKSx0aGlzLmhlYWQ9TywrK3RoaXMubGVuZ3RofSx3LnByb3RvdHlwZS5zaGlmdD1mdW5jdGlvbigpe2lmKDAhPT10aGlzLmxlbmd0aCl7dmFyIEY9dGhpcy5oZWFkLmRhdGE7cmV0dXJuIHRoaXMuaGVhZD0xPT09dGhpcy5s''@;'; put 'put ''ZW5ndGg/dGhpcy50YWlsPW51bGw6dGhpcy5oZWFkLm5leHQsLS10aGlzLmxlbmd0aCxGfX0sdy5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH0sdy5wcm90b3R5cGUuam9pbj1mdW5jdGlvbihGKXtpZigwPT09dGhpcy5s''@;'; put 'put ''ZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciBPPXRoaXMuaGVhZCx6PSIiK08uZGF0YTtPPU8ubmV4dDspeis9RitPLmRhdGE7cmV0dXJuIHp9LHcucHJvdG90eXBlLmNvbmNhdD1mdW5jdGlvbihGKXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuIHkuYWxsb2MoMCk7Zm9yKHZhciBPPXkuYWxsb2NV''@;'; put 'put ''bnNhZmUoRj4+PjApLHo9dGhpcy5oZWFkLE49MDt6OylCKHouZGF0YSxPLE4pLE4rPXouZGF0YS5sZW5ndGgsej16Lm5leHQ7cmV0dXJuIE99LHd9KCksZyYmZy5pbnNwZWN0JiZnLmluc3BlY3QuY3VzdG9tJiYodWUuZXhwb3J0cy5wcm90b3R5cGVbZy5pbnNwZWN0LmN1c3RvbV09ZnVuY3Rp''@;'; put 'put ''b24oKXt2YXIgdz1nLmluc3BlY3Qoe2xlbmd0aDp0aGlzLmxlbmd0aH0pO3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWUrIiAiK3d9KX0sMjE1MDk6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg5NjU2KTtmdW5jdGlvbiBCKHcsUCl7dy5lbWl0KCJlcnJvciIsUCl9dWUuZXhw''@;'; put 'put ''b3J0cz17ZGVzdHJveTpmdW5jdGlvbiB5KHcsUCl7dmFyIEY9dGhpcztyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWR8fHRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPyhQP1Aodyk6dyYmKHRo''@;'; put 'put ''aXMuX3dyaXRhYmxlU3RhdGU/dGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWR8fCh0aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxJLm5leHRUaWNrKEIsdGhpcyx3KSk6SS5uZXh0VGljayhCLHRoaXMsdykpLHRoaXMpOih0aGlzLl9yZWFkYWJsZVN0YXRlJiYodGhp''@;'; put 'put ''cy5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQ9ITApLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fZGVzdHJveSh3fHxudWxsLGZ1bmN0aW9uKE4peyFQJiZOP0YuX3dyaXRhYmxlU3RhdGU/Ri5fd3JpdGFibGVTdGF0ZS5lcnJv''@;'; put 'put ''ckVtaXR0ZWR8fChGLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxJLm5leHRUaWNrKEIsRixOKSk6SS5uZXh0VGljayhCLEYsTik6UCYmUChOKX0pLHRoaXMpfSx1bmRlc3Ryb3k6ZnVuY3Rpb24gZygpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRl''@;'; put 'put ''c3Ryb3llZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLnJlYWRpbmc9ITEsdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRlZD0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQ9ITEpLHRoaXMuX3dyaXRhYmxlU3RhdGUmJih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD0hMSx0aGlz''@;'; put 'put ''Ll93cml0YWJsZVN0YXRlLmVuZGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kaW5nPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluYWxDYWxsZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5wcmVmaW5pc2hlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLmZpbmlzaGVkPSExLHRoaXMuX3dy''@;'; put 'put ''aXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSExKX19fSwxODM0MjoodWUscSxfKT0+e3VlLmV4cG9ydHM9Xyg0NDM1NikuRXZlbnRFbWl0dGVyfSwyNjU1Oih1ZSxxLF8pPT57dmFyIEk9Xyg4MzgzOCkseT1JLkJ1ZmZlcjtmdW5jdGlvbiBnKHcsUCl7Zm9yKHZhciBGIGluIHcpUFtGXT13W0Zd''@;'; put 'put ''fWZ1bmN0aW9uIEIodyxQLEYpe3JldHVybiB5KHcsUCxGKX15LmZyb20mJnkuYWxsb2MmJnkuYWxsb2NVbnNhZmUmJnkuYWxsb2NVbnNhZmVTbG93P3VlLmV4cG9ydHM9STooZyhJLHEpLHEuQnVmZmVyPUIpLGcoeSxCKSxCLmZyb209ZnVuY3Rpb24odyxQLEYpe2lmKCJudW1iZXIiPT10eXBl''@;'; put 'put ''b2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiB5KHcsUCxGKX0sQi5hbGxvYz1mdW5jdGlvbih3LFAsRil7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1i''@;'; put 'put ''ZXIiKTt2YXIgTz15KHcpO3JldHVybiB2b2lkIDAhPT1QPyJzdHJpbmciPT10eXBlb2YgRj9PLmZpbGwoUCxGKTpPLmZpbGwoUCk6Ty5maWxsKDApLE99LEIuYWxsb2NVbnNhZmU9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50''@;'; put 'put ''IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4geSh3KX0sQi5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gSS5TbG93QnVmZmVyKHcpfX0sNTk0Mjoo''@;'; put 'put ''dWUscSxfKT0+eyhxPXVlLmV4cG9ydHM9XygxOTYwOSkpLlN0cmVhbT1xLHEuUmVhZGFibGU9cSxxLldyaXRhYmxlPV8oNDc4NDkpLHEuRHVwbGV4PV8oNzQwNzUpLHEuVHJhbnNmb3JtPV8oMjkwOSkscS5QYXNzVGhyb3VnaD1fKDE4ODIzKX0sMzY2MzY6KHVlLHEsXyk9PnsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIEk9Xyg4MzgzOCkuQnVmZmVyLHk9Xyg3MTk5MyksZz1fKDEzNjg2KSxCPW5ldyBBcnJheSgxNiksdz1bMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSw3LDQsMTMsMSwxMCw2LDE1LDMsMTIsMCw5LDUsMiwxNCwxMSw4LDMsMTAsMTQsNCw5LDE1LDgsMSwyLDcs''@;'; put 'put ''MCw2LDEzLDExLDUsMTIsMSw5LDExLDEwLDAsOCwxMiw0LDEzLDMsNywxNSwxNCw1LDYsMiw0LDAsNSw5LDcsMTIsMiwxMCwxNCwxLDMsOCwxMSw2LDE1LDEzXSxQPVs1LDE0LDcsMCw5LDIsMTEsNCwxMyw2LDE1LDgsMSwxMCwzLDEyLDYsMTEsMyw3LDAsMTMsNSwxMCwxNCwxNSw4LDEyLDQs''@;'; put 'put ''OSwxLDIsMTUsNSwxLDMsNywxNCw2LDksMTEsOCwxMiwyLDEwLDAsNCwxMyw4LDYsNCwxLDMsMTEsMTUsMCw1LDEyLDIsMTMsOSw3LDEwLDE0LDEyLDE1LDEwLDQsMSw1LDgsNyw2LDIsMTMsMTQsMCwzLDksMTFdLEY9WzExLDE0LDE1LDEyLDUsOCw3LDksMTEsMTMsMTQsMTUsNiw3LDksOCw3''@;'; put 'put ''LDYsOCwxMywxMSw5LDcsMTUsNywxMiwxNSw5LDExLDcsMTMsMTIsMTEsMTMsNiw3LDE0LDksMTMsMTUsMTQsOCwxMyw2LDUsMTIsNyw1LDExLDEyLDE0LDE1LDE0LDE1LDksOCw5LDE0LDUsNiw4LDYsNSwxMiw5LDE1LDUsMTEsNiw4LDEzLDEyLDUsMTIsMTMsMTQsMTEsOCw1LDZdLE89Wzgs''@;'; put 'put ''OSw5LDExLDEzLDE1LDE1LDUsNyw3LDgsMTEsMTQsMTQsMTIsNiw5LDEzLDE1LDcsMTIsOCw5LDExLDcsNywxMiw3LDYsMTUsMTMsMTEsOSw3LDE1LDExLDgsNiw2LDE0LDEyLDEzLDUsMTQsMTMsMTMsNyw1LDE1LDUsOCwxMSwxNCwxNCw2LDE0LDYsOSwxMiw5LDEyLDUsMTUsOCw4LDUsMTIs''@;'; put 'put ''OSwxMiw1LDE0LDYsOCwxMyw2LDUsMTUsMTMsMTEsMTFdLHo9WzAsMTUxODUwMDI0OSwxODU5Nzc1MzkzLDI0MDA5NTk3MDgsMjg0MDg1MzgzOF0sTj1bMTM1MjgyOTkyNiwxNTQ4NjAzNjg0LDE4MzYwNzI2OTEsMjA1Mzk5NDIxNywwXTtmdW5jdGlvbiBMKCl7Zy5jYWxsKHRoaXMsNjQpLHRo''@;'; put 'put ''aXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMH1mdW5jdGlvbiBLKEoscmUpe3JldHVybiBKPDxyZXxKPj4+MzItcmV9ZnVuY3Rpb24gVShKLHJlLGllLGxlLG1lLF9lLFRlLFNl''@;'; put 'put ''KXtyZXR1cm4gSyhKKyhyZV5pZV5sZSkrX2UrVGV8MCxTZSkrbWV8MH1mdW5jdGlvbiBXKEoscmUsaWUsbGUsbWUsX2UsVGUsU2Upe3JldHVybiBLKEorKHJlJmllfH5yZSZsZSkrX2UrVGV8MCxTZSkrbWV8MH1mdW5jdGlvbiBZKEoscmUsaWUsbGUsbWUsX2UsVGUsU2Upe3JldHVybiBLKEor''@;'; put 'put ''KChyZXx+aWUpXmxlKStfZStUZXwwLFNlKSttZXwwfWZ1bmN0aW9uIFgoSixyZSxpZSxsZSxtZSxfZSxUZSxTZSl7cmV0dXJuIEsoSisocmUmbGV8aWUmfmxlKStfZStUZXwwLFNlKSttZXwwfWZ1bmN0aW9uIGVlKEoscmUsaWUsbGUsbWUsX2UsVGUsU2Upe3JldHVybiBLKEorKHJlXihpZXx+''@;'; put 'put ''bGUpKStfZStUZXwwLFNlKSttZXwwfXkoTCxnKSxMLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7Zm9yKHZhciBKPUIscmU9MDtyZTwxNjsrK3JlKUpbcmVdPXRoaXMuX2Jsb2NrLnJlYWRJbnQzMkxFKDQqcmUpO2Zvcih2YXIgaWU9MHx0aGlzLl9hLGxlPTB8dGhpcy5fYixtZT0wfHRo''@;'; put 'put ''aXMuX2MsX2U9MHx0aGlzLl9kLFRlPTB8dGhpcy5fZSxTZT0wfHRoaXMuX2EsemU9MHx0aGlzLl9iLFY9MHx0aGlzLl9jLHA9MHx0aGlzLl9kLGI9MHx0aGlzLl9lLHg9MDt4PDgwO3grPTEpe3ZhciBDLFQ7eDwxNj8oQz1VKGllLGxlLG1lLF9lLFRlLEpbd1t4XV0selswXSxGW3hdKSxUPWVl''@;'; put 'put ''KFNlLHplLFYscCxiLEpbUFt4XV0sTlswXSxPW3hdKSk6eDwzMj8oQz1XKGllLGxlLG1lLF9lLFRlLEpbd1t4XV0selsxXSxGW3hdKSxUPVgoU2UsemUsVixwLGIsSltQW3hdXSxOWzFdLE9beF0pKTp4PDQ4PyhDPVkoaWUsbGUsbWUsX2UsVGUsSlt3W3hdXSx6WzJdLEZbeF0pLFQ9WShTZSx6''@;'; put 'put ''ZSxWLHAsYixKW1BbeF1dLE5bMl0sT1t4XSkpOng8NjQ/KEM9WChpZSxsZSxtZSxfZSxUZSxKW3dbeF1dLHpbM10sRlt4XSksVD1XKFNlLHplLFYscCxiLEpbUFt4XV0sTlszXSxPW3hdKSk6KEM9ZWUoaWUsbGUsbWUsX2UsVGUsSlt3W3hdXSx6WzRdLEZbeF0pLFQ9VShTZSx6ZSxWLHAsYixK''@;'; put 'put ''W1BbeF1dLE5bNF0sT1t4XSkpLGllPVRlLFRlPV9lLF9lPUsobWUsMTApLG1lPWxlLGxlPUMsU2U9YixiPXAscD1LKFYsMTApLFY9emUsemU9VH12YXIgSD10aGlzLl9iK21lK3B8MDt0aGlzLl9iPXRoaXMuX2MrX2UrYnwwLHRoaXMuX2M9dGhpcy5fZCtUZStTZXwwLHRoaXMuX2Q9dGhpcy5f''@;'; put 'put ''ZStpZSt6ZXwwLHRoaXMuX2U9dGhpcy5fYStsZStWfDAsdGhpcy5fYT1IfSxMLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKCl7dGhpcy5fYmxvY2tbdGhpcy5fYmxvY2tPZmZzZXQrK109MTI4LHRoaXMuX2Jsb2NrT2Zmc2V0PjU2JiYodGhpcy5fYmxvY2suZmlsbCgwLHRoaXMuX2Jsb2Nr''@;'; put 'put ''T2Zmc2V0LDY0KSx0aGlzLl91cGRhdGUoKSx0aGlzLl9ibG9ja09mZnNldD0wKSx0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fYmxvY2tPZmZzZXQsNTYpLHRoaXMuX2Jsb2NrLndyaXRlVUludDMyTEUodGhpcy5fbGVuZ3RoWzBdLDU2KSx0aGlzLl9ibG9jay53cml0ZVVJbnQzMkxFKHRoaXMu''@;'; put 'put ''X2xlbmd0aFsxXSw2MCksdGhpcy5fdXBkYXRlKCk7dmFyIEo9SS5hbGxvYz9JLmFsbG9jKDIwKTpuZXcgSSgyMCk7cmV0dXJuIEoud3JpdGVJbnQzMkxFKHRoaXMuX2EsMCksSi53cml0ZUludDMyTEUodGhpcy5fYiw0KSxKLndyaXRlSW50MzJMRSh0aGlzLl9jLDgpLEoud3JpdGVJbnQzMkxF''@;'; put 'put ''KHRoaXMuX2QsMTIpLEoud3JpdGVJbnQzMkxFKHRoaXMuX2UsMTYpLEp9LHVlLmV4cG9ydHM9TH0sMjcwNTQ6KHVlLHEsXyk9Pnt2YXIgST1fKDgzODM4KSx5PUkuQnVmZmVyO2Z1bmN0aW9uIGcodyxQKXtmb3IodmFyIEYgaW4gdylQW0ZdPXdbRl19ZnVuY3Rpb24gQih3LFAsRil7cmV0dXJu''@;'; put 'put ''IHkodyxQLEYpfXkuZnJvbSYmeS5hbGxvYyYmeS5hbGxvY1Vuc2FmZSYmeS5hbGxvY1Vuc2FmZVNsb3c/dWUuZXhwb3J0cz1JOihnKEkscSkscS5CdWZmZXI9QiksQi5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh5LnByb3RvdHlwZSksZyh5LEIpLEIuZnJvbT1mdW5jdGlvbih3LFAsRil7aWYo''@;'; put 'put ''Im51bWJlciI9PXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyIik7cmV0dXJuIHkodyxQLEYpfSxCLmFsbG9jPWZ1bmN0aW9uKHcsUCxGKXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQg''@;'; put 'put ''bXVzdCBiZSBhIG51bWJlciIpO3ZhciBPPXkodyk7cmV0dXJuIHZvaWQgMCE9PVA/InN0cmluZyI9PXR5cGVvZiBGP08uZmlsbChQLEYpOk8uZmlsbChQKTpPLmZpbGwoMCksT30sQi5hbGxvY1Vuc2FmZT1mdW5jdGlvbih3KXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVF''@;'; put 'put ''cnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiB5KHcpfSxCLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbih3KXtpZigibnVtYmVyIiE9dHlwZW9mIHcpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIG51bWJlciIpO3JldHVybiBJLlNsb3dCdWZm''@;'; put 'put ''ZXIodyl9fSw5MzgwNzoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgQixJPV8oODM4MzgpLHk9SS5CdWZmZXIsZz17fTtmb3IoQiBpbiBJKUkuaGFzT3duUHJvcGVydHkoQikmJigiU2xvd0J1ZmZlciI9PT1CfHwiQnVmZmVyIj09PUJ8fChnW0JdPUlbQl0pKTt2YXIgdz1nLkJ1ZmZlcj17''@;'; put 'put ''fTtmb3IoQiBpbiB5KXkuaGFzT3duUHJvcGVydHkoQikmJigiYWxsb2NVbnNhZmUiPT09Qnx8ImFsbG9jVW5zYWZlU2xvdyI9PT1CfHwod1tCXT15W0JdKSk7aWYoZy5CdWZmZXIucHJvdG90eXBlPXkucHJvdG90eXBlLCghdy5mcm9tfHx3LmZyb209PT1VaW50OEFycmF5LmZyb20pJiYody5m''@;'; put 'put ''cm9tPWZ1bmN0aW9uKFAsRixPKXtpZigibnVtYmVyIj09dHlwZW9mIFApdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlICJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJyt0eXBlb2YgUCk7aWYoUCYmdHlwZW9mIFAubGVuZ3RoPiJ1Iil0''@;'; put 'put ''aHJvdyBuZXcgVHlwZUVycm9yKCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAiK3R5cGVvZiBQKTtyZXR1cm4geShQLEYsTyl9KSx3LmFs''@;'; put 'put ''bG9jfHwody5hbGxvYz1mdW5jdGlvbihQLEYsTyl7aWYoIm51bWJlciIhPXR5cGVvZiBQKXRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSAic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSAnK3R5cGVvZiBQKTtpZihQPDB8fFA+PTIqKDE8PDMwKSl0''@;'; put 'put ''aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlICInK1ArJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICJzaXplIicpO3ZhciB6PXkoUCk7cmV0dXJuIEYmJjAhPT1GLmxlbmd0aD8ic3RyaW5nIj09dHlwZW9mIE8/ei5maWxsKEYsTyk6ei5maWxsKEYpOnouZmlsbCgwKSx6fSksIWcua1N0''@;'; put 'put ''cmluZ01heExlbmd0aCl0cnl7Zy5rU3RyaW5nTWF4TGVuZ3RoPXByb2Nlc3MuYmluZGluZygiYnVmZmVyIikua1N0cmluZ01heExlbmd0aH1jYXRjaHt9Zy5jb25zdGFudHN8fChnLmNvbnN0YW50cz17TUFYX0xFTkdUSDpnLmtNYXhMZW5ndGh9LGcua1N0cmluZ01heExlbmd0aCYmKGcuY29u''@;'; put 'put ''c3RhbnRzLk1BWF9TVFJJTkdfTEVOR1RIPWcua1N0cmluZ01heExlbmd0aCkpLHVlLmV4cG9ydHM9Z30sOTgwODM6KHVlLHEpPT57InVzZSBzdHJpY3QiO3ZhciBJOyFmdW5jdGlvbigpe3ZhciB5PXF8fHt9O3ZvaWQgMCE9PShJPWZ1bmN0aW9uKCl7cmV0dXJuIHl9LmFwcGx5KHEsW10pKSYm''@;'; put 'put ''KHVlLmV4cG9ydHM9SSkseS5kZWZhdWx0PXk7dmFyIGc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvIix3PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsRj0vdXJsXChbIiddPyguKz8pWyInXT9cKS8sTz17d29mZjI6ImZvbnQvd29mZjIiLHdvZmY6ImZvbnQvd29mZiIsb3Rm''@;'; put 'put ''OiJhcHBsaWNhdGlvbi94LWZvbnQtb3BlbnR5cGUiLHR0ZjoiYXBwbGljYXRpb24veC1mb250LXR0ZiIsZW90OiJhcHBsaWNhdGlvbi92bmQubXMtZm9udG9iamVjdCIsc2ZudDoiYXBwbGljYXRpb24vZm9udC1zZm50Iixzdmc6ImltYWdlL3N2Zyt4bWwifSx6PWZ1bmN0aW9uKGIpe3JldHVy''@;'; put 'put ''biBiIGluc3RhbmNlb2YgSFRNTEVsZW1lbnR8fGIgaW5zdGFuY2VvZiBTVkdFbGVtZW50fSxOPWZ1bmN0aW9uKGIpe2lmKCF6KGIpKXRocm93IG5ldyBFcnJvcigiYW4gSFRNTEVsZW1lbnQgb3IgU1ZHRWxlbWVudCBpcyByZXF1aXJlZDsgZ290ICIrYil9LEw9ZnVuY3Rpb24oYil7cmV0dXJu''@;'; put 'put ''IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHgsQyl7eihiKT94KGIpOkMobmV3IEVycm9yKCJhbiBIVE1MRWxlbWVudCBvciBTVkdFbGVtZW50IGlzIHJlcXVpcmVkOyBnb3QgIitiKSl9KX0sVT1mdW5jdGlvbihiKXt2YXIgeD1PYmplY3Qua2V5cyhPKS5maWx0ZXIoZnVuY3Rpb24oQyl7cmV0dXJu''@;'; put 'put ''IGIuaW5kZXhPZigiLiIrQyk+MH0pLm1hcChmdW5jdGlvbihDKXtyZXR1cm4gT1tDXX0pO3JldHVybiB4P3hbMF06KGNvbnNvbGUuZXJyb3IoIlVua25vd24gZm9udCBmb3JtYXQgZm9yICIrYisiLiBGb250cyBtYXkgbm90IGJlIHdvcmtpbmcgY29ycmVjdGx5LiIpLCJhcHBsaWNhdGlvbi9v''@;'; put 'put ''Y3RldC1zdHJlYW0iKX0sWT1mdW5jdGlvbihiLHgsQyl7dmFyIFQ9Yi52aWV3Qm94JiZiLnZpZXdCb3guYmFzZVZhbCYmYi52aWV3Qm94LmJhc2VWYWxbQ118fG51bGwhPT14LmdldEF0dHJpYnV0ZShDKSYmIXguZ2V0QXR0cmlidXRlKEMpLm1hdGNoKC8lJC8pJiZwYXJzZUludCh4LmdldEF0''@;'; put 'put ''dHJpYnV0ZShDKSl8fGIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbQ118fHBhcnNlSW50KHguc3R5bGVbQ10pfHxwYXJzZUludCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShiKS5nZXRQcm9wZXJ0eVZhbHVlKEMpKTtyZXR1cm4gdHlwZW9mIFQ+InUifHxudWxsPT09VHx8aXNOYU4ocGFyc2VG''@;'; put 'put ''bG9hdChUKSk/MDpUfSxKPWZ1bmN0aW9uKGIpe2Zvcih2YXIgeD13aW5kb3cuYXRvYihiLnNwbGl0KCIsIilbMV0pLEM9Yi5zcGxpdCgiLCIpWzBdLnNwbGl0KCI6IilbMV0uc3BsaXQoIjsiKVswXSxUPW5ldyBBcnJheUJ1ZmZlcih4Lmxlbmd0aCksSD1uZXcgVWludDhBcnJheShUKSxqPTA7''@;'; put 'put ''ajx4Lmxlbmd0aDtqKyspSFtqXT14LmNoYXJDb2RlQXQoaik7cmV0dXJuIG5ldyBCbG9iKFtUXSx7dHlwZTpDfSl9LG1lPXt9LFRlPW51bGwsemU9ZnVuY3Rpb24oYix4KXt2YXIgQz14fHx7fSxUPUMuc2VsZWN0b3JSZW1hcCxIPUMubW9kaWZ5U3R5bGUsRT1DLmZvbnRzLG09Qy5leGNsdWRl''@;'; put 'put ''VW51c2VkQ3NzLEE9Qy5tb2RpZnlDc3N8fGZ1bmN0aW9uKHdlLFVlKXtyZXR1cm4oVD9UKHdlKTp3ZSkrInsiKyhIP0goVWUpOlVlKSsifVxuIn0sb2U9W10sdGU9dHlwZW9mIEU+InUiLHNlPUV8fFtdO3JldHVybihUZXx8KFRlPUFycmF5LmZyb20oZG9jdW1lbnQuc3R5bGVTaGVldHMpLm1h''@;'; put 'put ''cChmdW5jdGlvbihiKXt0cnl7cmV0dXJue3J1bGVzOmIuY3NzUnVsZXMsaHJlZjpiLmhyZWZ9fWNhdGNoKHgpe3JldHVybiBjb25zb2xlLndhcm4oIlN0eWxlc2hlZXQgY291bGQgbm90IGJlIGxvYWRlZDogIitiLmhyZWYseCkse319fSkpKS5mb3JFYWNoKGZ1bmN0aW9uKHdlKXt2YXIgVWU9''@;'; put 'put ''d2UucnVsZXMsSmU9d2UuaHJlZjtVZSYmQXJyYXkuZnJvbShVZSkuZm9yRWFjaChmdW5jdGlvbihhdCl7aWYodHlwZW9mIGF0LnN0eWxlPCJ1IilpZihmdW5jdGlvbihiLHgpe2lmKHgpdHJ5e3JldHVybiBiLnF1ZXJ5U2VsZWN0b3IoeCl8fGIucGFyZW50Tm9kZSYmYi5wYXJlbnROb2RlLnF1''@;'; put 'put ''ZXJ5U2VsZWN0b3IoeCl9Y2F0Y2goQyl7Y29uc29sZS53YXJuKCdJbnZhbGlkIENTUyBzZWxlY3RvciAiJyt4KyciJyxDKX19KGIsYXQuc2VsZWN0b3JUZXh0KSlvZS5wdXNoKEEoYXQuc2VsZWN0b3JUZXh0LGF0LnN0eWxlLmNzc1RleHQpKTtlbHNlIGlmKHRlJiZhdC5jc3NUZXh0Lm1hdGNo''@;'; put 'put ''KC9eQGZvbnQtZmFjZS8pKXt2YXIgTWU9ZnVuY3Rpb24oYix4KXt2YXIgQz1iLmNzc1RleHQubWF0Y2goRiksVD1DJiZDWzFdfHwiIjtpZihUJiYhVC5tYXRjaCgvXmRhdGE6LykmJiJhYm91dDpibGFuayIhPT1UKXt2YXIgSD1ULnN0YXJ0c1dpdGgoIi4uLyIpP3grIi8uLi8iK1Q6VC5zdGFy''@;'; put 'put ''dHNXaXRoKCIuLyIpP3grIi8uIitUOlQ7cmV0dXJue3RleHQ6Yi5jc3NUZXh0LGZvcm1hdDpVKEgpLHVybDpIfX19KGF0LEplKTtNZSYmc2UucHVzaChNZSl9ZWxzZSBtfHxvZS5wdXNoKGF0LmNzc1RleHQpfSl9KSxmdW5jdGlvbihiKXtyZXR1cm4gUHJvbWlzZS5hbGwoYi5tYXAoZnVuY3Rp''@;'; put 'put ''b24oeCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKEMsVCl7aWYobWVbeC51cmxdKXJldHVybiBDKG1lW3gudXJsXSk7dmFyIEg9bmV3IFhNTEh0dHBSZXF1ZXN0O0guYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsZnVuY3Rpb24oKXt2YXIgaj1mdW5jdGlvbihiKXtmb3IodmFyIHg9IiIs''@;'; put 'put ''Qz1uZXcgVWludDhBcnJheShiKSxUPTA7VDxDLmJ5dGVMZW5ndGg7VCsrKXgrPVN0cmluZy5mcm9tQ2hhckNvZGUoQ1tUXSk7cmV0dXJuIHdpbmRvdy5idG9hKHgpfShILnJlc3BvbnNlKSxFPXgudGV4dC5yZXBsYWNlKEYsJ3VybCgiZGF0YTonK3guZm9ybWF0KyI7YmFzZTY0LCIraisnIikn''@;'; put 'put ''KSsiXG4iO21lW3gudXJsXT1FLEMoRSl9KSxILmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixmdW5jdGlvbihqKXtjb25zb2xlLndhcm4oIkZhaWxlZCB0byBsb2FkIGZvbnQgZnJvbTogIit4LnVybCxqKSxtZVt4LnVybF09bnVsbCxDKG51bGwpfSksSC5hZGRFdmVudExpc3RlbmVyKCJhYm9y''@;'; put 'put ''dCIsZnVuY3Rpb24oail7Y29uc29sZS53YXJuKCJBYm9ydGVkIGxvYWRpbmcgZm9udCBmcm9tOiAiK3gudXJsLGopLEMobnVsbCl9KSxILm9wZW4oIkdFVCIseC51cmwpLEgucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciIsSC5zZW5kKCl9KX0pKS50aGVuKGZ1bmN0aW9uKHgpe3JldHVybiB4''@;'; put 'put ''LmZpbHRlcihmdW5jdGlvbihDKXtyZXR1cm4gQ30pLmpvaW4oIiIpfSl9KHNlKS50aGVuKGZ1bmN0aW9uKHdlKXtyZXR1cm4gb2Uuam9pbigiXG4iKSt3ZX0pfSxWPWZ1bmN0aW9uKCl7aWYoIW5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iJiYhKCJkb3dubG9hZCJpbiBkb2N1bWVudC5jcmVh''@;'; put 'put ''dGVFbGVtZW50KCJhIikpKXJldHVybntwb3B1cDp3aW5kb3cub3BlbigpfX07eS5wcmVwYXJlU3ZnPWZ1bmN0aW9uKHAsYix4KXtOKHApO3ZhciBDPWJ8fHt9LFQ9Qy5sZWZ0LEg9dm9pZCAwPT09VD8wOlQsaj1DLnRvcCxFPXZvaWQgMD09PWo/MDpqLG09Qy53aWR0aCxBPUMuaGVpZ2h0LG9l''@;'; put 'put ''PUMuc2NhbGUsdGU9dm9pZCAwPT09b2U/MTpvZSxzZT1DLnJlc3BvbnNpdmUsd2U9dm9pZCAwIT09c2UmJnNlLFVlPUMuZXhjbHVkZUNzcyxKZT12b2lkIDAhPT1VZSYmVWU7cmV0dXJuIGZ1bmN0aW9uKGIpe3JldHVybiBQcm9taXNlLmFsbChBcnJheS5mcm9tKGIucXVlcnlTZWxlY3RvckFs''@;'; put 'put ''bCgiaW1hZ2UiKSkubWFwKGZ1bmN0aW9uKHgpe3ZhciBDPXguZ2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCJocmVmIil8fHguZ2V0QXR0cmlidXRlKCJocmVmIik7cmV0dXJuIEM/KGZ1bmN0aW9uKGIpe3JldHVybiBiJiYwPT09Yi5sYXN0SW5kZXhPZigi''@;'; put 'put ''aHR0cCIsMCkmJi0xPT09Yi5sYXN0SW5kZXhPZih3aW5kb3cubG9jYXRpb24uaG9zdCl9KEMpJiYoQys9KC0xPT09Qy5pbmRleE9mKCI/Iik/Ij8iOiImIikrInQ9IisobmV3IERhdGUpLnZhbHVlT2YoKSksbmV3IFByb21pc2UoZnVuY3Rpb24oVCxIKXt2YXIgaj1kb2N1bWVudC5jcmVhdGVF''@;'; put 'put ''bGVtZW50KCJjYW52YXMiKSxFPW5ldyBJbWFnZTtFLmNyb3NzT3JpZ2luPSJhbm9ueW1vdXMiLEUuc3JjPUMsRS5vbmVycm9yPWZ1bmN0aW9uKCl7cmV0dXJuIEgobmV3IEVycm9yKCJDb3VsZCBub3QgbG9hZCAiK0MpKX0sRS5vbmxvYWQ9ZnVuY3Rpb24oKXtqLndpZHRoPUUud2lkdGgsai5o''@;'; put 'put ''ZWlnaHQ9RS5oZWlnaHQsai5nZXRDb250ZXh0KCIyZCIpLmRyYXdJbWFnZShFLDAsMCkseC5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsImhyZWYiLGoudG9EYXRhVVJMKCJpbWFnZS9wbmciKSksVCghMCl9fSkpOlByb21pc2UucmVzb2x2ZShudWxsKX0p''@;'; put 'put ''KX0ocCkudGhlbihmdW5jdGlvbigpe3ZhciBhdD1wLmNsb25lTm9kZSghMCk7YXQuc3R5bGUuYmFja2dyb3VuZENvbG9yPShifHx7fSkuYmFja2dyb3VuZENvbG9yfHxwLnN0eWxlLmJhY2tncm91bmRDb2xvcjt2YXIgTWU9ZnVuY3Rpb24oYix4LEMsVCl7aWYoInN2ZyI9PT1iLnRhZ05hbWUp''@;'; put 'put ''cmV0dXJue3dpZHRoOkN8fFkoYix4LCJ3aWR0aCIpLGhlaWdodDpUfHxZKGIseCwiaGVpZ2h0Iil9O2lmKGIuZ2V0QkJveCl7dmFyIEg9Yi5nZXRCQm94KCk7cmV0dXJue3dpZHRoOkgueCtILndpZHRoLGhlaWdodDpILnkrSC5oZWlnaHR9fX0ocCxhdCxtLEEpLHZlPU1lLndpZHRoLFhlPU1l''@;'; put 'put ''LmhlaWdodDtpZigic3ZnIiE9PXAudGFnTmFtZSl7aWYoIXAuZ2V0QkJveClyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJBdHRlbXB0ZWQgdG8gcmVuZGVyIG5vbi1TVkcgZWxlbWVudCIscCk7bnVsbCE9YXQuZ2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iKSYmYXQuc2V0QXR0cmlidXRlKCJ0''@;'; put 'put ''cmFuc2Zvcm0iLGF0LmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIikucmVwbGFjZSgvdHJhbnNsYXRlXCguKj9cKS8sIiIpKTt2YXIgamU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsInN2ZyIpO2plLmFwcGVuZENoaWxkKGF0KSxhdD1qZX1p''@;'; put 'put ''ZihhdC5zZXRBdHRyaWJ1dGUoInZlcnNpb24iLCIxLjEiKSxhdC5zZXRBdHRyaWJ1dGUoInZpZXdCb3giLFtILEUsdmUsWGVdLmpvaW4oIiAiKSksYXQuZ2V0QXR0cmlidXRlKCJ4bWxucyIpfHxhdC5zZXRBdHRyaWJ1dGVOUyhnLCJ4bWxucyIsdyksYXQuZ2V0QXR0cmlidXRlKCJ4bWxuczp4''@;'; put 'put ''bGluayIpfHxhdC5zZXRBdHRyaWJ1dGVOUyhnLCJ4bWxuczp4bGluayIsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiKSx3ZT8oYXQucmVtb3ZlQXR0cmlidXRlKCJ3aWR0aCIpLGF0LnJlbW92ZUF0dHJpYnV0ZSgiaGVpZ2h0IiksYXQuc2V0QXR0cmlidXRlKCJwcmVzZXJ2ZUFzcGVj''@;'; put 'put ''dFJhdGlvIiwieE1pbllNaW4gbWVldCIpKTooYXQuc2V0QXR0cmlidXRlKCJ3aWR0aCIsdmUqdGUpLGF0LnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixYZSp0ZSkpLEFycmF5LmZyb20oYXQucXVlcnlTZWxlY3RvckFsbCgiZm9yZWlnbk9iamVjdCA+ICoiKSkuZm9yRWFjaChmdW5jdGlvbihSZSl7''@;'; put 'put ''UmUuc2V0QXR0cmlidXRlTlMoZywieG1sbnMiLCJzdmciPT09UmUudGFnTmFtZT93OiJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIil9KSwhSmUpcmV0dXJuIHplKHAsYikudGhlbihmdW5jdGlvbihSZSl7dmFyIEllPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7SWUuc2V0''@;'; put 'put ''QXR0cmlidXRlKCJ0eXBlIiwidGV4dC9jc3MiKSxJZS5pbm5lckhUTUw9IjwhW0NEQVRBW1xuIitSZSsiXG5dXT4iO3ZhciBWZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkZWZzIik7VmUuYXBwZW5kQ2hpbGQoSWUpLGF0Lmluc2VydEJlZm9yZShWZSxhdC5maXJzdENoaWxkKTt2YXIga2U9''@;'; put 'put ''ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7a2UuYXBwZW5kQ2hpbGQoYXQpO3ZhciBBZT1rZS5pbm5lckhUTUwucmVwbGFjZSgvTlNcZCs6aHJlZi9naSwneG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhsaW5rOmhyZWYnKTtpZigiZnVuY3Rpb24iIT10''@;'; put 'put ''eXBlb2YgeClyZXR1cm57c3JjOkFlLHdpZHRoOnZlLGhlaWdodDpYZX07eChBZSx2ZSxYZSl9KTt2YXIgRGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7RGUuYXBwZW5kQ2hpbGQoYXQpO3ZhciBGZT1EZS5pbm5lckhUTUw7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHgpcmV0dXJue3Ny''@;'; put 'put ''YzpGZSx3aWR0aDp2ZSxoZWlnaHQ6WGV9O3goRmUsdmUsWGUpfSl9LHkuc3ZnQXNEYXRhVXJpPWZ1bmN0aW9uKHAsYix4KXtyZXR1cm4gTihwKSx5LnByZXBhcmVTdmcocCxiKS50aGVuKGZ1bmN0aW9uKEMpe3ZhciBIPUMud2lkdGgsaj1DLmhlaWdodCxFPSJkYXRhOmltYWdlL3N2Zyt4bWw7''@;'; put 'put ''YmFzZTY0LCIrd2luZG93LmJ0b2EoZnVuY3Rpb24oYil7cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoYikucmVwbGFjZSgvJShbMC05QS1GXXsyfSkvZyxmdW5jdGlvbih4LEMpe3ZhciBUPVN0cmluZy5mcm9tQ2hhckNvZGUoIjB4IitDKTtyZXR1cm4iJSI9''@;'; put 'put ''PT1UPyIlMjUiOlR9KSl9KCc8P3htbCB2ZXJzaW9uPSIxLjAiIHN0YW5kYWxvbmU9Im5vIj8+PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIiBbPCFFTlRJVFkgbmJz''@;'; put 'put ''cCAiJiMxNjA7Ij5dPicrQy5zcmMpKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgeCYmeChFLEgsaiksRX0pfSx5LnN2Z0FzUG5nVXJpPWZ1bmN0aW9uKHAsYix4KXtOKHApO3ZhciBDPWJ8fHt9LFQ9Qy5lbmNvZGVyVHlwZSxIPXZvaWQgMD09PVQ/ImltYWdlL3BuZyI6VCxqPUMuZW5jb2Rl''@;'; put 'put ''ck9wdGlvbnMsRT12b2lkIDA9PT1qPy44OmosbT1DLmNhbnZnLEE9ZnVuY3Rpb24odGUpe3ZhciBzZT10ZS5zcmMsd2U9dGUud2lkdGgsVWU9dGUuaGVpZ2h0LEplPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGF0PUplLmdldENvbnRleHQoIjJkIiksTWU9d2luZG93LmRldmlj''@;'; put 'put ''ZVBpeGVsUmF0aW98fDE7SmUud2lkdGg9d2UqTWUsSmUuaGVpZ2h0PVVlKk1lLEplLnN0eWxlLndpZHRoPUplLndpZHRoKyJweCIsSmUuc3R5bGUuaGVpZ2h0PUplLmhlaWdodCsicHgiLGF0LnNldFRyYW5zZm9ybShNZSwwLDAsTWUsMCwwKSxtP20oSmUsc2UpOmF0LmRyYXdJbWFnZShzZSww''@;'; put 'put ''LDApO3ZhciB2ZT12b2lkIDA7dHJ5e3ZlPUplLnRvRGF0YVVSTChILEUpfWNhdGNoKFhlKXtpZih0eXBlb2YgU2VjdXJpdHlFcnJvcjwidSImJlhlIGluc3RhbmNlb2YgU2VjdXJpdHlFcnJvcnx8IlNlY3VyaXR5RXJyb3IiPT09WGUubmFtZSlyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJS''@;'; put 'put ''ZW5kZXJlZCBTVkcgaW1hZ2VzIGNhbm5vdCBiZSBkb3dubG9hZGVkIGluIHRoaXMgYnJvd3Nlci4iKTt0aHJvdyBYZX1yZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgeCYmeCh2ZSxKZS53aWR0aCxKZS5oZWlnaHQpLFByb21pc2UucmVzb2x2ZSh2ZSl9O3JldHVybiBtP3kucHJlcGFyZVN2Zyhw''@;'; put 'put ''LGIpLnRoZW4oQSk6eS5zdmdBc0RhdGFVcmkocCxiKS50aGVuKGZ1bmN0aW9uKG9lKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odGUsc2Upe3ZhciB3ZT1uZXcgSW1hZ2U7d2Uub25sb2FkPWZ1bmN0aW9uKCl7cmV0dXJuIHRlKEEoe3NyYzp3ZSx3aWR0aDp3ZS53aWR0aCxoZWlnaHQ6''@;'; put 'put ''d2UuaGVpZ2h0fSkpfSx3ZS5vbmVycm9yPWZ1bmN0aW9uKCl7c2UoIlRoZXJlIHdhcyBhbiBlcnJvciBsb2FkaW5nIHRoZSBkYXRhIFVSSSBhcyBhbiBpbWFnZSBvbiB0aGUgZm9sbG93aW5nIFNWR1xuIit3aW5kb3cuYXRvYihvZS5zbGljZSgyNikpKyJPcGVuIHRoZSBmb2xsb3dpbmcgbGlu''@;'; put 'put ''ayB0byBzZWUgYnJvd3NlcidzIGRpYWdub3Npc1xuIitvZSl9LHdlLnNyYz1vZX0pfSl9LHkuZG93bmxvYWQ9ZnVuY3Rpb24ocCxiLHgpe2lmKG5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iKW5hdmlnYXRvci5tc1NhdmVPck9wZW5CbG9iKEooYikscCk7ZWxzZXt2YXIgQz1kb2N1bWVudC5j''@;'; put 'put ''cmVhdGVFbGVtZW50KCJhIik7aWYoImRvd25sb2FkImluIEMpe0MuZG93bmxvYWQ9cCxDLnN0eWxlLmRpc3BsYXk9Im5vbmUiLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoQyk7dHJ5e3ZhciBUPUooYiksSD1VUkwuY3JlYXRlT2JqZWN0VVJMKFQpO0MuaHJlZj1ILEMub25jbGljaz1mdW5j''@;'; put 'put ''dGlvbigpe3JldHVybiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oKXtyZXR1cm4gVVJMLnJldm9rZU9iamVjdFVSTChIKX0pfX1jYXRjaChqKXtjb25zb2xlLmVycm9yKGopLGNvbnNvbGUud2FybigiRXJyb3Igd2hpbGUgZ2V0dGluZyBvYmplY3QgVVJMLiBGYWxsaW5nIGJhY2sg''@;'; put 'put ''dG8gc3RyaW5nIFVSTC4iKSxDLmhyZWY9Yn1DLmNsaWNrKCksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChDKX1lbHNlIHgmJngucG9wdXAmJih4LnBvcHVwLmRvY3VtZW50LnRpdGxlPXAseC5wb3B1cC5sb2NhdGlvbi5yZXBsYWNlKGIpKX19LHkuc2F2ZVN2Zz1mdW5jdGlvbihwLGIseCl7''@;'; put 'put ''dmFyIEM9VigpO3JldHVybiBMKHApLnRoZW4oZnVuY3Rpb24oVCl7cmV0dXJuIHkuc3ZnQXNEYXRhVXJpKFQseHx8e30pfSkudGhlbihmdW5jdGlvbihUKXtyZXR1cm4geS5kb3dubG9hZChiLFQsQyl9KX0seS5zYXZlU3ZnQXNQbmc9ZnVuY3Rpb24ocCxiLHgpe3ZhciBDPVYoKTtyZXR1cm4g''@;'; put 'put ''TChwKS50aGVuKGZ1bmN0aW9uKFQpe3JldHVybiB5LnN2Z0FzUG5nVXJpKFQseHx8e30pfSkudGhlbihmdW5jdGlvbihUKXtyZXR1cm4geS5kb3dubG9hZChiLFQsQyl9KX19KCl9LDcwNDYzOih1ZSxxLF8pPT57dmFyIEk9XygyNzA1NCkuQnVmZmVyO2Z1bmN0aW9uIHkoZyxCKXt0aGlzLl9i''@;'; put 'put ''bG9jaz1JLmFsbG9jKGcpLHRoaXMuX2ZpbmFsU2l6ZT1CLHRoaXMuX2Jsb2NrU2l6ZT1nLHRoaXMuX2xlbj0wfXkucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbihnLEIpeyJzdHJpbmciPT10eXBlb2YgZyYmKGc9SS5mcm9tKGcsQj1CfHwidXRmOCIpKTtmb3IodmFyIHc9dGhpcy5fYmxvY2ss''@;'; put 'put ''UD10aGlzLl9ibG9ja1NpemUsRj1nLmxlbmd0aCxPPXRoaXMuX2xlbix6PTA7ejxGOyl7Zm9yKHZhciBOPU8lUCxMPU1hdGgubWluKEYteixQLU4pLEs9MDtLPEw7SysrKXdbTitLXT1nW3orS107eis9TCwoTys9TCklUD09MCYmdGhpcy5fdXBkYXRlKHcpfXJldHVybiB0aGlzLl9sZW4rPUYs''@;'; put 'put ''dGhpc30seS5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKGcpe3ZhciBCPXRoaXMuX2xlbiV0aGlzLl9ibG9ja1NpemU7dGhpcy5fYmxvY2tbQl09MTI4LHRoaXMuX2Jsb2NrLmZpbGwoMCxCKzEpLEI+PXRoaXMuX2ZpbmFsU2l6ZSYmKHRoaXMuX3VwZGF0ZSh0aGlzLl9ibG9jayksdGhpcy5f''@;'; put 'put ''YmxvY2suZmlsbCgwKSk7dmFyIHc9OCp0aGlzLl9sZW47aWYodzw9NDI5NDk2NzI5NSl0aGlzLl9ibG9jay53cml0ZVVJbnQzMkJFKHcsdGhpcy5fYmxvY2tTaXplLTQpO2Vsc2V7dmFyIFA9KDQyOTQ5NjcyOTUmdyk+Pj4wO3RoaXMuX2Jsb2NrLndyaXRlVUludDMyQkUoKHctUCkvNDI5NDk2''@;'; put 'put ''NzI5Nix0aGlzLl9ibG9ja1NpemUtOCksdGhpcy5fYmxvY2sud3JpdGVVSW50MzJCRShQLHRoaXMuX2Jsb2NrU2l6ZS00KX10aGlzLl91cGRhdGUodGhpcy5fYmxvY2spO3ZhciBPPXRoaXMuX2hhc2goKTtyZXR1cm4gZz9PLnRvU3RyaW5nKGcpOk99LHkucHJvdG90eXBlLl91cGRhdGU9ZnVu''@;'; put 'put ''Y3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIl91cGRhdGUgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzcyIpfSx1ZS5leHBvcnRzPXl9LDI1NDQzOih1ZSxxLF8pPT57dmFyIEk9dWUuZXhwb3J0cz1mdW5jdGlvbihnKXtnPWcudG9Mb3dlckNhc2UoKTt2YXIgQj1JW2ddO2lmKCFCKXRo''@;'; put 'put ''cm93IG5ldyBFcnJvcihnKyIgaXMgbm90IHN1cHBvcnRlZCAod2UgYWNjZXB0IHB1bGwgcmVxdWVzdHMpIik7cmV0dXJuIG5ldyBCfTtJLnNoYT1fKDQ4NTg1KSxJLnNoYTE9XygyMTI3MCksSS5zaGEyMjQ9Xyg0MjcwOSksSS5zaGEyNTY9XygzMjE0OCksSS5zaGEzODQ9Xyg1MTg1NiksSS5z''@;'; put 'put ''aGE1MTI9XygzMTIxKX0sNDg1ODU6KHVlLHEsXyk9Pnt2YXIgST1fKDcxOTkzKSx5PV8oNzA0NjMpLGc9XygyNzA1NCkuQnVmZmVyLEI9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywtMTg5NDAwNzU4OCwtODk5NDk3NTE0XSx3PW5ldyBBcnJheSg4MCk7ZnVuY3Rpb24gUCgpe3RoaXMuaW5pdCgp''@;'; put 'put ''LHRoaXMuX3c9dyx5LmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gRihOKXtyZXR1cm4gTjw8NXxOPj4+Mjd9ZnVuY3Rpb24gTyhOKXtyZXR1cm4gTjw8MzB8Tj4+PjJ9ZnVuY3Rpb24geihOLEwsSyxVKXtyZXR1cm4gMD09PU4/TCZLfH5MJlU6Mj09PU4/TCZLfEwmVXxLJlU6TF5LXlV9SShQ''@;'; put 'put ''LHkpLFAucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0xNzMyNTg0MTkzLHRoaXMuX2I9NDAyMzIzMzQxNyx0aGlzLl9jPTI1NjIzODMxMDIsdGhpcy5fZD0yNzE3MzM4NzgsdGhpcy5fZT0zMjg1Mzc3NTIwLHRoaXN9LFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rp''@;'; put 'put ''b24oTil7Zm9yKHZhciBMPXRoaXMuX3csSz0wfHRoaXMuX2EsVT0wfHRoaXMuX2IsVz0wfHRoaXMuX2MsWT0wfHRoaXMuX2QsWD0wfHRoaXMuX2UsZWU9MDtlZTwxNjsrK2VlKUxbZWVdPU4ucmVhZEludDMyQkUoNCplZSk7Zm9yKDtlZTw4MDsrK2VlKUxbZWVdPUxbZWUtM11eTFtlZS04XV5M''@;'; put 'put ''W2VlLTE0XV5MW2VlLTE2XTtmb3IodmFyIEo9MDtKPDgwOysrSil7dmFyIHJlPX5+KEovMjApLGllPUYoSykreihyZSxVLFcsWSkrWCtMW0pdK0JbcmVdfDA7WD1ZLFk9VyxXPU8oVSksVT1LLEs9aWV9dGhpcy5fYT1LK3RoaXMuX2F8MCx0aGlzLl9iPVUrdGhpcy5fYnwwLHRoaXMuX2M9Vyt0''@;'; put 'put ''aGlzLl9jfDAsdGhpcy5fZD1ZK3RoaXMuX2R8MCx0aGlzLl9lPVgrdGhpcy5fZXwwfSxQLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBOPWcuYWxsb2NVbnNhZmUoMjApO3JldHVybiBOLndyaXRlSW50MzJCRSgwfHRoaXMuX2EsMCksTi53cml0ZUludDMyQkUoMHx0aGlzLl9iLDQp''@;'; put 'put ''LE4ud3JpdGVJbnQzMkJFKDB8dGhpcy5fYyw4KSxOLndyaXRlSW50MzJCRSgwfHRoaXMuX2QsMTIpLE4ud3JpdGVJbnQzMkJFKDB8dGhpcy5fZSwxNiksTn0sdWUuZXhwb3J0cz1QfSwyMTI3MDoodWUscSxfKT0+e3ZhciBJPV8oNzE5OTMpLHk9Xyg3MDQ2MyksZz1fKDI3MDU0KS5CdWZmZXIs''@;'; put 'put ''Qj1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLC0xODk0MDA3NTg4LC04OTk0OTc1MTRdLHc9bmV3IEFycmF5KDgwKTtmdW5jdGlvbiBQKCl7dGhpcy5pbml0KCksdGhpcy5fdz13LHkuY2FsbCh0aGlzLDY0LDU2KX1mdW5jdGlvbiBGKEwpe3JldHVybiBMPDwxfEw+Pj4zMX1mdW5jdGlvbiBPKEwp''@;'; put 'put ''e3JldHVybiBMPDw1fEw+Pj4yN31mdW5jdGlvbiB6KEwpe3JldHVybiBMPDwzMHxMPj4+Mn1mdW5jdGlvbiBOKEwsSyxVLFcpe3JldHVybiAwPT09TD9LJlV8fksmVzoyPT09TD9LJlV8SyZXfFUmVzpLXlVeV31JKFAseSksUC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlz''@;'; put 'put ''Ll9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OCx0aGlzLl9lPTMyODUzNzc1MjAsdGhpc30sUC5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihMKXtmb3IodmFyIEs9dGhpcy5fdyxVPTB8dGhpcy5fYSxXPTB8dGhp''@;'; put 'put ''cy5fYixZPTB8dGhpcy5fYyxYPTB8dGhpcy5fZCxlZT0wfHRoaXMuX2UsSj0wO0o8MTY7KytKKUtbSl09TC5yZWFkSW50MzJCRSg0KkopO2Zvcig7Sjw4MDsrK0opS1tKXT1GKEtbSi0zXV5LW0otOF1eS1tKLTE0XV5LW0otMTZdKTtmb3IodmFyIHJlPTA7cmU8ODA7KytyZSl7dmFyIGllPX5+''@;'; put 'put ''KHJlLzIwKSxsZT1PKFUpK04oaWUsVyxZLFgpK2VlK0tbcmVdK0JbaWVdfDA7ZWU9WCxYPVksWT16KFcpLFc9VSxVPWxlfXRoaXMuX2E9VSt0aGlzLl9hfDAsdGhpcy5fYj1XK3RoaXMuX2J8MCx0aGlzLl9jPVkrdGhpcy5fY3wwLHRoaXMuX2Q9WCt0aGlzLl9kfDAsdGhpcy5fZT1lZSt0aGlz''@;'; put 'put ''Ll9lfDB9LFAucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIEw9Zy5hbGxvY1Vuc2FmZSgyMCk7cmV0dXJuIEwud3JpdGVJbnQzMkJFKDB8dGhpcy5fYSwwKSxMLndyaXRlSW50MzJCRSgwfHRoaXMuX2IsNCksTC53cml0ZUludDMyQkUoMHx0aGlzLl9jLDgpLEwud3JpdGVJbnQzMkJF''@;'; put 'put ''KDB8dGhpcy5fZCwxMiksTC53cml0ZUludDMyQkUoMHx0aGlzLl9lLDE2KSxMfSx1ZS5leHBvcnRzPVB9LDQyNzA5Oih1ZSxxLF8pPT57dmFyIEk9Xyg3MTk5MykseT1fKDMyMTQ4KSxnPV8oNzA0NjMpLEI9XygyNzA1NCkuQnVmZmVyLHc9bmV3IEFycmF5KDY0KTtmdW5jdGlvbiBQKCl7dGhp''@;'; put 'put ''cy5pbml0KCksdGhpcy5fdz13LGcuY2FsbCh0aGlzLDY0LDU2KX1JKFAseSksUC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTMyMzgzNzEwMzIsdGhpcy5fYj05MTQxNTA2NjMsdGhpcy5fYz04MTI3MDI5OTksdGhpcy5fZD00MTQ0OTEyNjk3LHRoaXMuX2U9NDI5''@;'; put 'put ''MDc3NTg1Nyx0aGlzLl9mPTE3NTA2MDMwMjUsdGhpcy5fZz0xNjk0MDc2ODM5LHRoaXMuX2g9MzIwNDA3NTQyOCx0aGlzfSxQLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciBGPUIuYWxsb2NVbnNhZmUoMjgpO3JldHVybiBGLndyaXRlSW50MzJCRSh0aGlzLl9hLDApLEYud3JpdGVJ''@;'; put 'put ''bnQzMkJFKHRoaXMuX2IsNCksRi53cml0ZUludDMyQkUodGhpcy5fYyw4KSxGLndyaXRlSW50MzJCRSh0aGlzLl9kLDEyKSxGLndyaXRlSW50MzJCRSh0aGlzLl9lLDE2KSxGLndyaXRlSW50MzJCRSh0aGlzLl9mLDIwKSxGLndyaXRlSW50MzJCRSh0aGlzLl9nLDI0KSxGfSx1ZS5leHBvcnRz''@;'; put 'put ''PVB9LDMyMTQ4Oih1ZSxxLF8pPT57dmFyIEk9Xyg3MTk5MykseT1fKDcwNDYzKSxnPV8oMjcwNTQpLkJ1ZmZlcixCPVsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgw''@;'; put 'put ''LDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0''@;'; put 'put ''MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYw''@;'; put 'put ''MzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0''@;'; put 'put ''Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdLHc9bmV3IEFycmF5KDY0KTtmdW5jdGlvbiBQKCl7dGhpcy5pbml0KCksdGhpcy5fdz13LHkuY2FsbCh0aGlzLDY0LDU2''@;'; put 'put ''KX1mdW5jdGlvbiBGKFUsVyxZKXtyZXR1cm4gWV5VJihXXlkpfWZ1bmN0aW9uIE8oVSxXLFkpe3JldHVybiBVJld8WSYoVXxXKX1mdW5jdGlvbiB6KFUpe3JldHVybihVPj4+MnxVPDwzMCleKFU+Pj4xM3xVPDwxOSleKFU+Pj4yMnxVPDwxMCl9ZnVuY3Rpb24gTihVKXtyZXR1cm4oVT4+PjZ8''@;'; put 'put ''VTw8MjYpXihVPj4+MTF8VTw8MjEpXihVPj4+MjV8VTw8Nyl9ZnVuY3Rpb24gTChVKXtyZXR1cm4oVT4+Pjd8VTw8MjUpXihVPj4+MTh8VTw8MTQpXlU+Pj4zfWZ1bmN0aW9uIEsoVSl7cmV0dXJuKFU+Pj4xN3xVPDwxNSleKFU+Pj4xOXxVPDwxMyleVT4+PjEwfUkoUCx5KSxQLnByb3RvdHlw''@;'; put 'put ''ZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTc3OTAzMzcwMyx0aGlzLl9iPTMxNDQxMzQyNzcsdGhpcy5fYz0xMDEzOTA0MjQyLHRoaXMuX2Q9Mjc3MzQ4MDc2Mix0aGlzLl9lPTEzNTk4OTMxMTksdGhpcy5fZj0yNjAwODIyOTI0LHRoaXMuX2c9NTI4NzM0NjM1LHRoaXMuX2g9''@;'; put 'put ''MTU0MTQ1OTIyNSx0aGlzfSxQLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKFUpe2Zvcih2YXIgVz10aGlzLl93LFk9MHx0aGlzLl9hLFg9MHx0aGlzLl9iLGVlPTB8dGhpcy5fYyxKPTB8dGhpcy5fZCxyZT0wfHRoaXMuX2UsaWU9MHx0aGlzLl9mLGxlPTB8dGhpcy5fZyxtZT0wfHRoaXMu''@;'; put 'put ''X2gsX2U9MDtfZTwxNjsrK19lKVdbX2VdPVUucmVhZEludDMyQkUoNCpfZSk7Zm9yKDtfZTw2NDsrK19lKVdbX2VdPUsoV1tfZS0yXSkrV1tfZS03XStMKFdbX2UtMTVdKStXW19lLTE2XXwwO2Zvcih2YXIgVGU9MDtUZTw2NDsrK1RlKXt2YXIgU2U9bWUrTihyZSkrRihyZSxpZSxsZSkrQltU''@;'; put 'put ''ZV0rV1tUZV18MCx6ZT16KFkpK08oWSxYLGVlKXwwO21lPWxlLGxlPWllLGllPXJlLHJlPUorU2V8MCxKPWVlLGVlPVgsWD1ZLFk9U2UremV8MH10aGlzLl9hPVkrdGhpcy5fYXwwLHRoaXMuX2I9WCt0aGlzLl9ifDAsdGhpcy5fYz1lZSt0aGlzLl9jfDAsdGhpcy5fZD1KK3RoaXMuX2R8MCx0''@;'; put 'put ''aGlzLl9lPXJlK3RoaXMuX2V8MCx0aGlzLl9mPWllK3RoaXMuX2Z8MCx0aGlzLl9nPWxlK3RoaXMuX2d8MCx0aGlzLl9oPW1lK3RoaXMuX2h8MH0sUC5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgVT1nLmFsbG9jVW5zYWZlKDMyKTtyZXR1cm4gVS53cml0ZUludDMyQkUodGhpcy5f''@;'; put 'put ''YSwwKSxVLndyaXRlSW50MzJCRSh0aGlzLl9iLDQpLFUud3JpdGVJbnQzMkJFKHRoaXMuX2MsOCksVS53cml0ZUludDMyQkUodGhpcy5fZCwxMiksVS53cml0ZUludDMyQkUodGhpcy5fZSwxNiksVS53cml0ZUludDMyQkUodGhpcy5fZiwyMCksVS53cml0ZUludDMyQkUodGhpcy5fZywyNCks''@;'; put 'put ''VS53cml0ZUludDMyQkUodGhpcy5faCwyOCksVX0sdWUuZXhwb3J0cz1QfSw1MTg1NjoodWUscSxfKT0+e3ZhciBJPV8oNzE5OTMpLHk9XygzMTIxKSxnPV8oNzA0NjMpLEI9XygyNzA1NCkuQnVmZmVyLHc9bmV3IEFycmF5KDE2MCk7ZnVuY3Rpb24gUCgpe3RoaXMuaW5pdCgpLHRoaXMuX3c9''@;'; put 'put ''dyxnLmNhbGwodGhpcywxMjgsMTEyKX1JKFAseSksUC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9haD0zNDE4MDcwMzY1LHRoaXMuX2JoPTE2NTQyNzAyNTAsdGhpcy5fY2g9MjQzODUyOTM3MCx0aGlzLl9kaD0zNTU0NjIzNjAsdGhpcy5fZWg9MTczMTQwNTQxNSx0''@;'; put 'put ''aGlzLl9maD0yMzk0MTgwMjMxLHRoaXMuX2doPTM2NzUwMDg1MjUsdGhpcy5faGg9MTIwMzA2MjgxMyx0aGlzLl9hbD0zMjM4MzcxMDMyLHRoaXMuX2JsPTkxNDE1MDY2Myx0aGlzLl9jbD04MTI3MDI5OTksdGhpcy5fZGw9NDE0NDkxMjY5Nyx0aGlzLl9lbD00MjkwNzc1ODU3LHRoaXMuX2Zs''@;'; put 'put ''PTE3NTA2MDMwMjUsdGhpcy5fZ2w9MTY5NDA3NjgzOSx0aGlzLl9obD0zMjA0MDc1NDI4LHRoaXN9LFAucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIEY9Qi5hbGxvY1Vuc2FmZSg0OCk7ZnVuY3Rpb24gTyh6LE4sTCl7Ri53cml0ZUludDMyQkUoeixMKSxGLndyaXRlSW50MzJCRShO''@;'; put 'put ''LEwrNCl9cmV0dXJuIE8odGhpcy5fYWgsdGhpcy5fYWwsMCksTyh0aGlzLl9iaCx0aGlzLl9ibCw4KSxPKHRoaXMuX2NoLHRoaXMuX2NsLDE2KSxPKHRoaXMuX2RoLHRoaXMuX2RsLDI0KSxPKHRoaXMuX2VoLHRoaXMuX2VsLDMyKSxPKHRoaXMuX2ZoLHRoaXMuX2ZsLDQwKSxGfSx1ZS5leHBv''@;'; put 'put ''cnRzPVB9LDMxMjE6KHVlLHEsXyk9Pnt2YXIgST1fKDcxOTkzKSx5PV8oNzA0NjMpLGc9XygyNzA1NCkuQnVmZmVyLEI9WzExMTYzNTI0MDgsMzYwOTc2NzQ1OCwxODk5NDQ3NDQxLDYwMjg5MTcyNSwzMDQ5MzIzNDcxLDM5NjQ0ODQzOTksMzkyMTAwOTU3MywyMTczMjk1NTQ4LDk2MTk4NzE2''@;'; put 'put ''Myw0MDgxNjI4NDcyLDE1MDg5NzA5OTMsMzA1MzgzNDI2NSwyNDUzNjM1NzQ4LDI5Mzc2NzE1NzksMjg3MDc2MzIyMSwzNjY0NjA5NTYwLDM2MjQzODEwODAsMjczNDg4MzM5NCwzMTA1OTg0MDEsMTE2NDk5NjU0Miw2MDcyMjUyNzgsMTMyMzYxMDc2NCwxNDI2ODgxOTg3LDM1OTAzMDQ5OTQs''@;'; put 'put ''MTkyNTA3ODM4OCw0MDY4MTgyMzgzLDIxNjIwNzgyMDYsOTkxMzM2MTEzLDI2MTQ4ODgxMDMsNjMzODAzMzE3LDMyNDgyMjI1ODAsMzQ3OTc3NDg2OCwzODM1MzkwNDAxLDI2NjY2MTM0NTgsNDAyMjIyNDc3NCw5NDQ3MTExMzksMjY0MzQ3MDc4LDIzNDEyNjI3NzMsNjA0ODA3NjI4LDIwMDc4''@;'; put 'put ''MDA5MzMsNzcwMjU1OTgzLDE0OTU5OTA5MDEsMTI0OTE1MDEyMiwxODU2NDMxMjM1LDE1NTUwODE2OTIsMzE3NTIxODEzMiwxOTk2MDY0OTg2LDIxOTg5NTA4MzcsMjU1NDIyMDg4MiwzOTk5NzE5MzM5LDI4MjE4MzQzNDksNzY2Nzg0MDE2LDI5NTI5OTY4MDgsMjU2NjU5NDg3OSwzMjEwMzEz''@;'; put 'put ''NjcxLDMyMDMzMzc5NTYsMzMzNjU3MTg5MSwxMDM0NDU3MDI2LDM1ODQ1Mjg3MTEsMjQ2Njk0ODkwMSwxMTM5MjY5OTMsMzc1ODMyNjM4MywzMzgyNDE4OTUsMTY4NzE3OTM2LDY2NjMwNzIwNSwxMTg4MTc5OTY0LDc3MzUyOTkxMiwxNTQ2MDQ1NzM0LDEyOTQ3NTczNzIsMTUyMjgwNTQ4NSwx''@;'; put 'put ''Mzk2MTgyMjkxLDI2NDM4MzM4MjMsMTY5NTE4MzcwMCwyMzQzNTI3MzkwLDE5ODY2NjEwNTEsMTAxNDQ3NzQ4MCwyMTc3MDI2MzUwLDEyMDY3NTkxNDIsMjQ1Njk1NjAzNywzNDQwNzc2MjcsMjczMDQ4NTkyMSwxMjkwODYzNDYwLDI4MjAzMDI0MTEsMzE1ODQ1NDI3MywzMjU5NzMwODAwLDM1''@;'; put 'put ''MDU5NTI2NTcsMzM0NTc2NDc3MSwxMDYyMTcwMDgsMzUxNjA2NTgxNywzNjA2MDA4MzQ0LDM2MDAzNTI4MDQsMTQzMjcyNTc3Niw0MDk0NTcxOTA5LDE0NjcwMzE1OTQsMjc1NDIzMzQ0LDg1MTE2OTcyMCw0MzAyMjc3MzQsMzEwMDgyMzc1Miw1MDY5NDg2MTYsMTM2MzI1ODE5NSw2NTkwNjA1''@;'; put 'put ''NTYsMzc1MDY4NTU5Myw4ODM5OTc4NzcsMzc4NTA1MDI4MCw5NTgxMzk1NzEsMzMxODMwNzQyNywxMzIyODIyMjE4LDM4MTI3MjM0MDMsMTUzNzAwMjA2MywyMDAzMDM0OTk1LDE3NDc4NzM3NzksMzYwMjAzNjg5OSwxOTU1NTYyMjIyLDE1NzU5OTAwMTIsMjAyNDEwNDgxNSwxMTI1NTkyOTI4''@;'; put 'put ''LDIyMjc3MzA0NTIsMjcxNjkwNDMwNiwyMzYxODUyNDI0LDQ0Mjc3NjA0NCwyNDI4NDM2NDc0LDU5MzY5ODM0NCwyNzU2NzM0MTg3LDM3MzMxMTAyNDksMzIwNDAzMTQ3OSwyOTk5MzUxNTczLDMzMjkzMjUyOTgsMzgxNTkyMDQyNywzMzkxNTY5NjE0LDM5MjgzODM5MDAsMzUxNTI2NzI3MSw1''@;'; put 'put ''NjYyODA3MTEsMzk0MDE4NzYwNiwzNDU0MDY5NTM0LDQxMTg2MzAyNzEsNDAwMDIzOTk5MiwxMTY0MTg0NzQsMTkxNDEzODU1NCwxNzQyOTI0MjEsMjczMTA1NTI3MCwyODkzODAzNTYsMzIwMzk5MzAwNiw0NjAzOTMyNjksMzIwNjIwMzE1LDY4NTQ3MTczMyw1ODc0OTY4MzYsODUyMTQyOTcx''@;'; put 'put ''LDEwODY3OTI4NTEsMTAxNzAzNjI5OCwzNjU1NDMxMDAsMTEyNjAwMDU4MCwyNjE4Mjk3Njc2LDEyODgwMzM0NzAsMzQwOTg1NTE1OCwxNTAxNTA1OTQ4LDQyMzQ1MDk4NjYsMTYwNzE2NzkxNSw5ODcxNjc0NjgsMTgxNjQwMjMxNiwxMjQ2MTg5NTkxXSx3PW5ldyBBcnJheSgxNjApO2Z1bmN0''@;'; put 'put ''aW9uIFAoKXt0aGlzLmluaXQoKSx0aGlzLl93PXcseS5jYWxsKHRoaXMsMTI4LDExMil9ZnVuY3Rpb24gRihYLGVlLEope3JldHVybiBKXlgmKGVlXkopfWZ1bmN0aW9uIE8oWCxlZSxKKXtyZXR1cm4gWCZlZXxKJihYfGVlKX1mdW5jdGlvbiB6KFgsZWUpe3JldHVybihYPj4+Mjh8ZWU8PDQp''@;'; put 'put ''XihlZT4+PjJ8WDw8MzApXihlZT4+Pjd8WDw8MjUpfWZ1bmN0aW9uIE4oWCxlZSl7cmV0dXJuKFg+Pj4xNHxlZTw8MTgpXihYPj4+MTh8ZWU8PDE0KV4oZWU+Pj45fFg8PDIzKX1mdW5jdGlvbiBMKFgsZWUpe3JldHVybihYPj4+MXxlZTw8MzEpXihYPj4+OHxlZTw8MjQpXlg+Pj43fWZ1bmN0''@;'; put 'put ''aW9uIEsoWCxlZSl7cmV0dXJuKFg+Pj4xfGVlPDwzMSleKFg+Pj44fGVlPDwyNCleKFg+Pj43fGVlPDwyNSl9ZnVuY3Rpb24gVShYLGVlKXtyZXR1cm4oWD4+PjE5fGVlPDwxMyleKGVlPj4+Mjl8WDw8MyleWD4+PjZ9ZnVuY3Rpb24gVyhYLGVlKXtyZXR1cm4oWD4+PjE5fGVlPDwxMyleKGVl''@;'; put 'put ''Pj4+Mjl8WDw8MyleKFg+Pj42fGVlPDwyNil9ZnVuY3Rpb24gWShYLGVlKXtyZXR1cm4gWD4+PjA8ZWU+Pj4wPzE6MH1JKFAseSksUC5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9haD0xNzc5MDMzNzAzLHRoaXMuX2JoPTMxNDQxMzQyNzcsdGhpcy5fY2g9MTAxMzkw''@;'; put 'put ''NDI0Mix0aGlzLl9kaD0yNzczNDgwNzYyLHRoaXMuX2VoPTEzNTk4OTMxMTksdGhpcy5fZmg9MjYwMDgyMjkyNCx0aGlzLl9naD01Mjg3MzQ2MzUsdGhpcy5faGg9MTU0MTQ1OTIyNSx0aGlzLl9hbD00MDg5MjM1NzIwLHRoaXMuX2JsPTIyMjc4NzM1OTUsdGhpcy5fY2w9NDI3MTE3NTcyMyx0''@;'; put 'put ''aGlzLl9kbD0xNTk1NzUwMTI5LHRoaXMuX2VsPTI5MTc1NjUxMzcsdGhpcy5fZmw9NzI1NTExMTk5LHRoaXMuX2dsPTQyMTUzODk1NDcsdGhpcy5faGw9MzI3MDMzMjA5LHRoaXN9LFAucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oWCl7Zm9yKHZhciBlZT10aGlzLl93LEo9MHx0aGlzLl9h''@;'; put 'put ''aCxyZT0wfHRoaXMuX2JoLGllPTB8dGhpcy5fY2gsbGU9MHx0aGlzLl9kaCxtZT0wfHRoaXMuX2VoLF9lPTB8dGhpcy5fZmgsVGU9MHx0aGlzLl9naCxTZT0wfHRoaXMuX2hoLHplPTB8dGhpcy5fYWwsVj0wfHRoaXMuX2JsLHA9MHx0aGlzLl9jbCxiPTB8dGhpcy5fZGwseD0wfHRoaXMuX2Vs''@;'; put 'put ''LEM9MHx0aGlzLl9mbCxUPTB8dGhpcy5fZ2wsSD0wfHRoaXMuX2hsLGo9MDtqPDMyO2orPTIpZWVbal09WC5yZWFkSW50MzJCRSg0KmopLGVlW2orMV09WC5yZWFkSW50MzJCRSg0KmorNCk7Zm9yKDtqPDE2MDtqKz0yKXt2YXIgRT1lZVtqLTMwXSxtPWVlW2otMzArMV0sQT1MKEUsbSksb2U9''@;'; put 'put ''SyhtLEUpLHRlPVUoRT1lZVtqLTRdLG09ZWVbai00KzFdKSxzZT1XKG0sRSksSmU9ZWVbai0zMl0sYXQ9ZWVbai0zMisxXSxNZT1vZStlZVtqLTE0KzFdfDAsdmU9QStlZVtqLTE0XStZKE1lLG9lKXwwO3ZlPSh2ZT12ZSt0ZStZKE1lPU1lK3NlfDAsc2UpfDApK0plK1koTWU9TWUrYXR8MCxh''@;'; put 'put ''dCl8MCxlZVtqXT12ZSxlZVtqKzFdPU1lfWZvcih2YXIgWGU9MDtYZTwxNjA7WGUrPTIpe3ZlPWVlW1hlXSxNZT1lZVtYZSsxXTt2YXIgamU9TyhKLHJlLGllKSxEZT1PKHplLFYscCksRmU9eihKLHplKSxSZT16KHplLEopLEllPU4obWUseCksVmU9Tih4LG1lKSxrZT1CW1hlXSxBZT1CW1hl''@;'; put 'put ''KzFdLF90PUYobWUsX2UsVGUpLHJ0PUYoeCxDLFQpLFFlPUgrVmV8MCxkbj1TZStJZStZKFFlLEgpfDA7ZG49KGRuPShkbj1kbitfdCtZKFFlPVFlK3J0fDAscnQpfDApK2tlK1koUWU9UWUrQWV8MCxBZSl8MCkrdmUrWShRZT1RZStNZXwwLE1lKXwwO3ZhciB5dD1SZStEZXwwLE10PUZlK2pl''@;'; put 'put ''K1koeXQsUmUpfDA7U2U9VGUsSD1ULFRlPV9lLFQ9QyxfZT1tZSxDPXgsbWU9bGUrZG4rWSh4PWIrUWV8MCxiKXwwLGxlPWllLGI9cCxpZT1yZSxwPVYscmU9SixWPXplLEo9ZG4rTXQrWSh6ZT1RZSt5dHwwLFFlKXwwfXRoaXMuX2FsPXRoaXMuX2FsK3plfDAsdGhpcy5fYmw9dGhpcy5fYmwr''@;'; put 'put ''VnwwLHRoaXMuX2NsPXRoaXMuX2NsK3B8MCx0aGlzLl9kbD10aGlzLl9kbCtifDAsdGhpcy5fZWw9dGhpcy5fZWwreHwwLHRoaXMuX2ZsPXRoaXMuX2ZsK0N8MCx0aGlzLl9nbD10aGlzLl9nbCtUfDAsdGhpcy5faGw9dGhpcy5faGwrSHwwLHRoaXMuX2FoPXRoaXMuX2FoK0orWSh0aGlzLl9h''@;'; put 'put ''bCx6ZSl8MCx0aGlzLl9iaD10aGlzLl9iaCtyZStZKHRoaXMuX2JsLFYpfDAsdGhpcy5fY2g9dGhpcy5fY2graWUrWSh0aGlzLl9jbCxwKXwwLHRoaXMuX2RoPXRoaXMuX2RoK2xlK1kodGhpcy5fZGwsYil8MCx0aGlzLl9laD10aGlzLl9laCttZStZKHRoaXMuX2VsLHgpfDAsdGhpcy5fZmg9''@;'; put 'put ''dGhpcy5fZmgrX2UrWSh0aGlzLl9mbCxDKXwwLHRoaXMuX2doPXRoaXMuX2doK1RlK1kodGhpcy5fZ2wsVCl8MCx0aGlzLl9oaD10aGlzLl9oaCtTZStZKHRoaXMuX2hsLEgpfDB9LFAucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIFg9Zy5hbGxvY1Vuc2FmZSg2NCk7ZnVuY3Rpb24g''@;'; put 'put ''ZWUoSixyZSxpZSl7WC53cml0ZUludDMyQkUoSixpZSksWC53cml0ZUludDMyQkUocmUsaWUrNCl9cmV0dXJuIGVlKHRoaXMuX2FoLHRoaXMuX2FsLDApLGVlKHRoaXMuX2JoLHRoaXMuX2JsLDgpLGVlKHRoaXMuX2NoLHRoaXMuX2NsLDE2KSxlZSh0aGlzLl9kaCx0aGlzLl9kbCwyNCksZWUo''@;'; put 'put ''dGhpcy5fZWgsdGhpcy5fZWwsMzIpLGVlKHRoaXMuX2ZoLHRoaXMuX2ZsLDQwKSxlZSh0aGlzLl9naCx0aGlzLl9nbCw0OCksZWUodGhpcy5faGgsdGhpcy5faGwsNTYpLFh9LHVlLmV4cG9ydHM9UH0sNzA0NToodWUscSxfKT0+e3VlLmV4cG9ydHM9Zzt2YXIgST1fKDQ0MzU2KS5FdmVudEVt''@;'; put 'put ''aXR0ZXI7ZnVuY3Rpb24gZygpe0kuY2FsbCh0aGlzKX1fKDcxOTkzKShnLEkpLGcuUmVhZGFibGU9Xyg2MTA5MiksZy5Xcml0YWJsZT1fKDE1NDkyKSxnLkR1cGxleD1fKDEwMzApLGcuVHJhbnNmb3JtPV8oNDM0MTApLGcuUGFzc1Rocm91Z2g9Xyg4MzgyNCksZy5maW5pc2hlZD1fKDU3ODU0''@;'; put 'put ''KSxnLnBpcGVsaW5lPV8oNjg0NiksZy5TdHJlYW09ZyxnLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKEIsdyl7dmFyIFA9dGhpcztmdW5jdGlvbiBGKFcpe0Iud3JpdGFibGUmJiExPT09Qi53cml0ZShXKSYmUC5wYXVzZSYmUC5wYXVzZSgpfWZ1bmN0aW9uIE8oKXtQLnJlYWRhYmxlJiZQLnJl''@;'; put 'put ''c3VtZSYmUC5yZXN1bWUoKX1QLm9uKCJkYXRhIixGKSxCLm9uKCJkcmFpbiIsTyksIUIuX2lzU3RkaW8mJighd3x8ITEhPT13LmVuZCkmJihQLm9uKCJlbmQiLE4pLFAub24oImNsb3NlIixMKSk7dmFyIHo9ITE7ZnVuY3Rpb24gTigpe3p8fCh6PSEwLEIuZW5kKCkpfWZ1bmN0aW9uIEwoKXt6''@;'; put 'put ''fHwoej0hMCwiZnVuY3Rpb24iPT10eXBlb2YgQi5kZXN0cm95JiZCLmRlc3Ryb3koKSl9ZnVuY3Rpb24gSyhXKXtpZihVKCksMD09PUkubGlzdGVuZXJDb3VudCh0aGlzLCJlcnJvciIpKXRocm93IFd9ZnVuY3Rpb24gVSgpe1AucmVtb3ZlTGlzdGVuZXIoImRhdGEiLEYpLEIucmVtb3ZlTGlz''@;'; put 'put ''dGVuZXIoImRyYWluIixPKSxQLnJlbW92ZUxpc3RlbmVyKCJlbmQiLE4pLFAucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixMKSxQLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsSyksQi5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLEspLFAucmVtb3ZlTGlzdGVuZXIoImVuZCIsVSksUC5yZW1vdmVMaXN0''@;'; put 'put ''ZW5lcigiY2xvc2UiLFUpLEIucmVtb3ZlTGlzdGVuZXIoImNsb3NlIixVKX1yZXR1cm4gUC5vbigiZXJyb3IiLEspLEIub24oImVycm9yIixLKSxQLm9uKCJlbmQiLFUpLFAub24oImNsb3NlIixVKSxCLm9uKCJjbG9zZSIsVSksQi5lbWl0KCJwaXBlIixQKSxCfX0sMzA0NjQ6dWU9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIF89e307ZnVuY3Rpb24gSShQLEYsTyl7T3x8KE89RXJyb3IpO3ZhciBOPWZ1bmN0aW9uKEwpe2Z1bmN0aW9uIEsoVSxXLFkpe3JldHVybiBMLmNhbGwodGhpcyxmdW5jdGlvbiB6KEwsSyxVKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIEY/RjpGKEwsSyxVKX0oVSxXLFkp''@;'; put 'put ''KXx8dGhpc31yZXR1cm4gZnVuY3Rpb24gcShQLEYpe1AucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRi5wcm90b3R5cGUpLFAucHJvdG90eXBlLmNvbnN0cnVjdG9yPVAsUC5fX3Byb3RvX189Rn0oSyxMKSxLfShPKTtOLnByb3RvdHlwZS5uYW1lPU8ubmFtZSxOLnByb3RvdHlwZS5jb2RlPVAs''@;'; put 'put ''X1tQXT1OfWZ1bmN0aW9uIHkoUCxGKXtpZihBcnJheS5pc0FycmF5KFApKXt2YXIgTz1QLmxlbmd0aDtyZXR1cm4gUD1QLm1hcChmdW5jdGlvbih6KXtyZXR1cm4gU3RyaW5nKHopfSksTz4yPyJvbmUgb2YgIi5jb25jYXQoRiwiICIpLmNvbmNhdChQLnNsaWNlKDAsTy0xKS5qb2luKCIsICIp''@;'; put 'put ''LCIsIG9yICIpK1BbTy0xXToyPT09Tz8ib25lIG9mICIuY29uY2F0KEYsIiAiKS5jb25jYXQoUFswXSwiIG9yICIpLmNvbmNhdChQWzFdKToib2YgIi5jb25jYXQoRiwiICIpLmNvbmNhdChQWzBdKX1yZXR1cm4ib2YgIi5jb25jYXQoRiwiICIpLmNvbmNhdChTdHJpbmcoUCkpfUkoIkVSUl9J''@;'; put 'put ''TlZBTElEX09QVF9WQUxVRSIsZnVuY3Rpb24oUCxGKXtyZXR1cm4nVGhlIHZhbHVlICInK0YrJyIgaXMgaW52YWxpZCBmb3Igb3B0aW9uICInK1ArJyInfSxUeXBlRXJyb3IpLEkoIkVSUl9JTlZBTElEX0FSR19UWVBFIixmdW5jdGlvbihQLEYsTyl7dmFyIHosTjtpZigic3RyaW5nIj09dHlw''@;'; put 'put ''ZW9mIEYmJmZ1bmN0aW9uIGcoUCxGLE8pe3JldHVybiBQLnN1YnN0cighT3x8TzwwPzA6K08sRi5sZW5ndGgpPT09Rn0oRiwibm90ICIpPyh6PSJtdXN0IG5vdCBiZSIsRj1GLnJlcGxhY2UoL15ub3QgLywiIikpOno9Im11c3QgYmUiLGZ1bmN0aW9uIEIoUCxGLE8pe3JldHVybih2b2lkIDA9''@;'; put 'put ''PT1PfHxPPlAubGVuZ3RoKSYmKE89UC5sZW5ndGgpLFAuc3Vic3RyaW5nKE8tRi5sZW5ndGgsTyk9PT1GfShQLCIgYXJndW1lbnQiKSlOPSJUaGUgIi5jb25jYXQoUCwiICIpLmNvbmNhdCh6LCIgIikuY29uY2F0KHkoRiwidHlwZSIpKTtlbHNle3ZhciBMPWZ1bmN0aW9uIHcoUCxGLE8pe3Jl''@;'; put 'put ''dHVybiJudW1iZXIiIT10eXBlb2YgTyYmKE89MCksIShPK0YubGVuZ3RoPlAubGVuZ3RoKSYmLTEhPT1QLmluZGV4T2YoRixPKX0oUCwiLiIpPyJwcm9wZXJ0eSI6ImFyZ3VtZW50IjtOPSdUaGUgIicuY29uY2F0KFAsJyIgJykuY29uY2F0KEwsIiAiKS5jb25jYXQoeiwiICIpLmNvbmNhdCh5''@;'; put 'put ''KEYsInR5cGUiKSl9cmV0dXJuIE4rIi4gUmVjZWl2ZWQgdHlwZSAiLmNvbmNhdCh0eXBlb2YgTyl9LFR5cGVFcnJvciksSSgiRVJSX1NUUkVBTV9QVVNIX0FGVEVSX0VPRiIsInN0cmVhbS5wdXNoKCkgYWZ0ZXIgRU9GIiksSSgiRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQiLGZ1bmN0aW9u''@;'; put 'put ''KFApe3JldHVybiJUaGUgIitQKyIgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCJ9KSxJKCJFUlJfU1RSRUFNX1BSRU1BVFVSRV9DTE9TRSIsIlByZW1hdHVyZSBjbG9zZSIpLEkoIkVSUl9TVFJFQU1fREVTVFJPWUVEIixmdW5jdGlvbihQKXtyZXR1cm4iQ2Fubm90IGNhbGwgIitQKyIgYWZ0''@;'; put 'put ''ZXIgYSBzdHJlYW0gd2FzIGRlc3Ryb3llZCJ9KSxJKCJFUlJfTVVMVElQTEVfQ0FMTEJBQ0siLCJDYWxsYmFjayBjYWxsZWQgbXVsdGlwbGUgdGltZXMiKSxJKCJFUlJfU1RSRUFNX0NBTk5PVF9QSVBFIiwiQ2Fubm90IHBpcGUsIG5vdCByZWFkYWJsZSIpLEkoIkVSUl9TVFJFQU1fV1JJVEVf''@;'; put 'put ''QUZURVJfRU5EIiwid3JpdGUgYWZ0ZXIgZW5kIiksSSgiRVJSX1NUUkVBTV9OVUxMX1ZBTFVFUyIsIk1heSBub3Qgd3JpdGUgbnVsbCB2YWx1ZXMgdG8gc3RyZWFtIixUeXBlRXJyb3IpLEkoIkVSUl9VTktOT1dOX0VOQ09ESU5HIixmdW5jdGlvbihQKXtyZXR1cm4iVW5rbm93biBlbmNvZGlu''@;'; put 'put ''ZzogIitQfSxUeXBlRXJyb3IpLEkoIkVSUl9TVFJFQU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQiLCJzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudCIpLHVlLmV4cG9ydHMuRj1ffSwxMDMwOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPU9iamVjdC5rZXlzfHxmdW5jdGlv''@;'; put 'put ''bihOKXt2YXIgTD1bXTtmb3IodmFyIEsgaW4gTilMLnB1c2goSyk7cmV0dXJuIEx9O3VlLmV4cG9ydHM9Rjt2YXIgeT1fKDYxMDkyKSxnPV8oMTU0OTIpO18oNzE5OTMpKEYseSk7Zm9yKHZhciBCPUkoZy5wcm90b3R5cGUpLHc9MDt3PEIubGVuZ3RoO3crKyl7dmFyIFA9Qlt3XTtGLnByb3Rv''@;'; put 'put ''dHlwZVtQXXx8KEYucHJvdG90eXBlW1BdPWcucHJvdG90eXBlW1BdKX1mdW5jdGlvbiBGKE4pe2lmKCEodGhpcyBpbnN0YW5jZW9mIEYpKXJldHVybiBuZXcgRihOKTt5LmNhbGwodGhpcyxOKSxnLmNhbGwodGhpcyxOKSx0aGlzLmFsbG93SGFsZk9wZW49ITAsTiYmKCExPT09Ti5yZWFkYWJs''@;'; put 'put ''ZSYmKHRoaXMucmVhZGFibGU9ITEpLCExPT09Ti53cml0YWJsZSYmKHRoaXMud3JpdGFibGU9ITEpLCExPT09Ti5hbGxvd0hhbGZPcGVuJiYodGhpcy5hbGxvd0hhbGZPcGVuPSExLHRoaXMub25jZSgiZW5kIixPKSkpfWZ1bmN0aW9uIE8oKXt0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkfHxw''@;'; put 'put ''cm9jZXNzLm5leHRUaWNrKHosdGhpcyl9ZnVuY3Rpb24geihOKXtOLmVuZCgpfU9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLnByb3RvdHlwZSwid3JpdGFibGVIaWdoV2F0ZXJNYXJrIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5oaWdo''@;'; put 'put ''V2F0ZXJNYXJrfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGLnByb3RvdHlwZSwid3JpdGFibGVCdWZmZXIiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpfX0pLE9iamVjdC5k''@;'; put 'put ''ZWZpbmVQcm9wZXJ0eShGLnByb3RvdHlwZSwid3JpdGFibGVMZW5ndGgiLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlLmxlbmd0aH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoRi5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFi''@;'; put 'put ''bGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkJiZ0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZH0sc2V0OmZ1bmN0aW9uKEwp''@;'; put 'put ''e3ZvaWQgMD09PXRoaXMuX3JlYWRhYmxlU3RhdGV8fHZvaWQgMD09PXRoaXMuX3dyaXRhYmxlU3RhdGV8fCh0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD1MLHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPUwpfX0pfSw4MzgyNDoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5l''@;'; put 'put ''eHBvcnRzPXk7dmFyIEk9Xyg0MzQxMCk7ZnVuY3Rpb24geShnKXtpZighKHRoaXMgaW5zdGFuY2VvZiB5KSlyZXR1cm4gbmV3IHkoZyk7SS5jYWxsKHRoaXMsZyl9Xyg3MTk5MykoeSxJKSx5LnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKGcsQix3KXt3KG51bGwsZyl9fSw2MTA5Mjoo''@;'; put 'put ''dWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSTt1ZS5leHBvcnRzPVYsVi5SZWFkYWJsZVN0YXRlPXplLF8oNDQzNTYpO3ZhciBOLGc9ZnVuY3Rpb24oRmUsUmUpe3JldHVybiBGZS5saXN0ZW5lcnMoUmUpLmxlbmd0aH0sQj1fKDEyNjAxKSx3PV8oODM4MzgpLkJ1ZmZlcixQPSh0eXBlb2Yg''@;'; put 'put ''Z2xvYmFsPCJ1Ij9nbG9iYWw6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93OnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnt9KS5VaW50OEFycmF5fHxmdW5jdGlvbigpe30sej1fKDc3MTk5KTtOPXomJnouZGVidWdsb2c/ei5kZWJ1Z2xvZygic3RyZWFtIik6ZnVuY3Rpb24oKXt9O3ZhciBpZSxsZSxt''@;'; put 'put ''ZSxMPV8oNzUyMjUpLEs9Xyg4ODE1MiksVz1fKDIyODI3KS5nZXRIaWdoV2F0ZXJNYXJrLFk9XygzMDQ2NCkuRixYPVkuRVJSX0lOVkFMSURfQVJHX1RZUEUsZWU9WS5FUlJfU1RSRUFNX1BVU0hfQUZURVJfRU9GLEo9WS5FUlJfTUVUSE9EX05PVF9JTVBMRU1FTlRFRCxyZT1ZLkVSUl9TVFJF''@;'; put 'put ''QU1fVU5TSElGVF9BRlRFUl9FTkRfRVZFTlQ7Xyg3MTk5MykoVixCKTt2YXIgX2U9Sy5lcnJvck9yRGVzdHJveSxUZT1bImVycm9yIiwiY2xvc2UiLCJkZXN0cm95IiwicGF1c2UiLCJyZXN1bWUiXTtmdW5jdGlvbiB6ZShEZSxGZSxSZSl7ST1JfHxfKDEwMzApLCJib29sZWFuIiE9dHlwZW9m''@;'; put 'put ''IFJlJiYoUmU9RmUgaW5zdGFuY2VvZiBJKSx0aGlzLm9iamVjdE1vZGU9ISEoRGU9RGV8fHt9KS5vYmplY3RNb2RlLFJlJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISFEZS5yZWFkYWJsZU9iamVjdE1vZGUpLHRoaXMuaGlnaFdhdGVyTWFyaz1XKHRoaXMsRGUsInJlYWRh''@;'; put 'put ''YmxlSGlnaFdhdGVyTWFyayIsUmUpLHRoaXMuYnVmZmVyPW5ldyBMLHRoaXMubGVuZ3RoPTAsdGhpcy5waXBlcz1udWxsLHRoaXMucGlwZXNDb3VudD0wLHRoaXMuZmxvd2luZz1udWxsLHRoaXMuZW5kZWQ9ITEsdGhpcy5lbmRFbWl0dGVkPSExLHRoaXMucmVhZGluZz0hMSx0aGlzLnN5bmM9''@;'; put 'put ''ITAsdGhpcy5uZWVkUmVhZGFibGU9ITEsdGhpcy5lbWl0dGVkUmVhZGFibGU9ITEsdGhpcy5yZWFkYWJsZUxpc3RlbmluZz0hMSx0aGlzLnJlc3VtZVNjaGVkdWxlZD0hMSx0aGlzLnBhdXNlZD0hMCx0aGlzLmVtaXRDbG9zZT0hMSE9PURlLmVtaXRDbG9zZSx0aGlzLmF1dG9EZXN0cm95PSEh''@;'; put 'put ''RGUuYXV0b0Rlc3Ryb3ksdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5kZWZhdWx0RW5jb2Rpbmc9RGUuZGVmYXVsdEVuY29kaW5nfHwidXRmOCIsdGhpcy5hd2FpdERyYWluPTAsdGhpcy5yZWFkaW5nTW9yZT0hMSx0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmVuY29kaW5nPW51bGwsRGUuZW5jb2Rp''@;'; put 'put ''bmcmJihpZXx8KGllPV8oNzg0NTQpLkkpLHRoaXMuZGVjb2Rlcj1uZXcgaWUoRGUuZW5jb2RpbmcpLHRoaXMuZW5jb2Rpbmc9RGUuZW5jb2RpbmcpfWZ1bmN0aW9uIFYoRGUpe2lmKEk9SXx8XygxMDMwKSwhKHRoaXMgaW5zdGFuY2VvZiBWKSlyZXR1cm4gbmV3IFYoRGUpO3RoaXMuX3JlYWRh''@;'; put 'put ''YmxlU3RhdGU9bmV3IHplKERlLHRoaXMsdGhpcyBpbnN0YW5jZW9mIEkpLHRoaXMucmVhZGFibGU9ITAsRGUmJigiZnVuY3Rpb24iPT10eXBlb2YgRGUucmVhZCYmKHRoaXMuX3JlYWQ9RGUucmVhZCksImZ1bmN0aW9uIj09dHlwZW9mIERlLmRlc3Ryb3kmJih0aGlzLl9kZXN0cm95PURlLmRl''@;'; put 'put ''c3Ryb3kpKSxCLmNhbGwodGhpcyl9ZnVuY3Rpb24gcChEZSxGZSxSZSxJZSxWZSl7TigicmVhZGFibGVBZGRDaHVuayIsRmUpO3ZhciBBZSxrZT1EZS5fcmVhZGFibGVTdGF0ZTtpZihudWxsPT09RmUpa2UucmVhZGluZz0hMSxmdW5jdGlvbiBqKERlLEZlKXtpZihOKCJvbkVvZkNodW5rIiks''@;'; put 'put ''IUZlLmVuZGVkKXtpZihGZS5kZWNvZGVyKXt2YXIgUmU9RmUuZGVjb2Rlci5lbmQoKTtSZSYmUmUubGVuZ3RoJiYoRmUuYnVmZmVyLnB1c2goUmUpLEZlLmxlbmd0aCs9RmUub2JqZWN0TW9kZT8xOlJlLmxlbmd0aCl9RmUuZW5kZWQ9ITAsRmUuc3luYz9FKERlKTooRmUubmVlZFJlYWRhYmxl''@;'; put 'put ''PSExLEZlLmVtaXR0ZWRSZWFkYWJsZXx8KEZlLmVtaXR0ZWRSZWFkYWJsZT0hMCxtKERlKSkpfX0oRGUsa2UpO2Vsc2UgaWYoVmV8fChBZT1mdW5jdGlvbiB4KERlLEZlKXt2YXIgUmU7cmV0dXJuIWZ1bmN0aW9uIE8oRGUpe3JldHVybiB3LmlzQnVmZmVyKERlKXx8RGUgaW5zdGFuY2VvZiBQ''@;'; put 'put ''fShGZSkmJiJzdHJpbmciIT10eXBlb2YgRmUmJnZvaWQgMCE9PUZlJiYhRGUub2JqZWN0TW9kZSYmKFJlPW5ldyBYKCJjaHVuayIsWyJzdHJpbmciLCJCdWZmZXIiLCJVaW50OEFycmF5Il0sRmUpKSxSZX0oa2UsRmUpKSxBZSlfZShEZSxBZSk7ZWxzZSBpZihrZS5vYmplY3RNb2RlfHxGZSYm''@;'; put 'put ''RmUubGVuZ3RoPjApaWYoInN0cmluZyIhPXR5cGVvZiBGZSYmIWtlLm9iamVjdE1vZGUmJk9iamVjdC5nZXRQcm90b3R5cGVPZihGZSkhPT13LnByb3RvdHlwZSYmKEZlPWZ1bmN0aW9uIEYoRGUpe3JldHVybiB3LmZyb20oRGUpfShGZSkpLEllKWtlLmVuZEVtaXR0ZWQ/X2UoRGUsbmV3IHJl''@;'; put 'put ''KTpiKERlLGtlLEZlLCEwKTtlbHNlIGlmKGtlLmVuZGVkKV9lKERlLG5ldyBlZSk7ZWxzZXtpZihrZS5kZXN0cm95ZWQpcmV0dXJuITE7a2UucmVhZGluZz0hMSxrZS5kZWNvZGVyJiYhUmU/KEZlPWtlLmRlY29kZXIud3JpdGUoRmUpLGtlLm9iamVjdE1vZGV8fDAhPT1GZS5sZW5ndGg/YihE''@;'; put 'put ''ZSxrZSxGZSwhMSk6QShEZSxrZSkpOmIoRGUsa2UsRmUsITEpfWVsc2UgSWV8fChrZS5yZWFkaW5nPSExLEEoRGUsa2UpKTtyZXR1cm4ha2UuZW5kZWQmJihrZS5sZW5ndGg8a2UuaGlnaFdhdGVyTWFya3x8MD09PWtlLmxlbmd0aCl9ZnVuY3Rpb24gYihEZSxGZSxSZSxJZSl7RmUuZmxvd2lu''@;'; put 'put ''ZyYmMD09PUZlLmxlbmd0aCYmIUZlLnN5bmM/KEZlLmF3YWl0RHJhaW49MCxEZS5lbWl0KCJkYXRhIixSZSkpOihGZS5sZW5ndGgrPUZlLm9iamVjdE1vZGU/MTpSZS5sZW5ndGgsSWU/RmUuYnVmZmVyLnVuc2hpZnQoUmUpOkZlLmJ1ZmZlci5wdXNoKFJlKSxGZS5uZWVkUmVhZGFibGUmJkUo''@;'; put 'put ''RGUpKSxBKERlLEZlKX1PYmplY3QuZGVmaW5lUHJvcGVydHkoVi5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3JlYWRhYmxlU3RhdGUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVu''@;'; put 'put ''Y3Rpb24oRmUpe3RoaXMuX3JlYWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD1GZSl9fSksVi5wcm90b3R5cGUuZGVzdHJveT1LLmRlc3Ryb3ksVi5wcm90b3R5cGUuX3VuZGVzdHJveT1LLnVuZGVzdHJveSxWLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihE''@;'; put 'put ''ZSxGZSl7RmUoRGUpfSxWLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKERlLEZlKXt2YXIgSWUsUmU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gUmUub2JqZWN0TW9kZT9JZT0hMDoic3RyaW5nIj09dHlwZW9mIERlJiYoKEZlPUZlfHxSZS5kZWZhdWx0RW5jb2RpbmcpIT09UmUuZW5jb2Rp''@;'; put 'put ''bmcmJihEZT13LmZyb20oRGUsRmUpLEZlPSIiKSxJZT0hMCkscCh0aGlzLERlLEZlLCExLEllKX0sVi5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbihEZSl7cmV0dXJuIHAodGhpcyxEZSxudWxsLCEwLCExKX0sVi5wcm90b3R5cGUuaXNQYXVzZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hMT09PXRo''@;'; put 'put ''aXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZ30sVi5wcm90b3R5cGUuc2V0RW5jb2Rpbmc9ZnVuY3Rpb24oRGUpe2llfHwoaWU9Xyg3ODQ1NCkuSSk7dmFyIEZlPW5ldyBpZShEZSk7dGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyPUZlLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2Rpbmc9dGhp''@;'; put 'put ''cy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyLmVuY29kaW5nO2Zvcih2YXIgUmU9dGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXIuaGVhZCxJZT0iIjtudWxsIT09UmU7KUllKz1GZS53cml0ZShSZS5kYXRhKSxSZT1SZS5uZXh0O3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmJ1ZmZlci5jbGVh''@;'; put 'put ''cigpLCIiIT09SWUmJnRoaXMuX3JlYWRhYmxlU3RhdGUuYnVmZmVyLnB1c2goSWUpLHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RoPUllLmxlbmd0aCx0aGlzfTt2YXIgQz0xMDczNzQxODI0O2Z1bmN0aW9uIEgoRGUsRmUpe3JldHVybiBEZTw9MHx8MD09PUZlLmxlbmd0aCYmRmUuZW5kZWQ/''@;'; put 'put ''MDpGZS5vYmplY3RNb2RlPzE6RGUhPURlP0ZlLmZsb3dpbmcmJkZlLmxlbmd0aD9GZS5idWZmZXIuaGVhZC5kYXRhLmxlbmd0aDpGZS5sZW5ndGg6KERlPkZlLmhpZ2hXYXRlck1hcmsmJihGZS5oaWdoV2F0ZXJNYXJrPWZ1bmN0aW9uIFQoRGUpe3JldHVybiBEZT49Qz9EZT1DOihEZS0tLERl''@;'; put 'put ''fD1EZT4+PjEsRGV8PURlPj4+MixEZXw9RGU+Pj40LERlfD1EZT4+PjgsRGV8PURlPj4+MTYsRGUrKyksRGV9KERlKSksRGU8PUZlLmxlbmd0aD9EZTpGZS5lbmRlZD9GZS5sZW5ndGg6KEZlLm5lZWRSZWFkYWJsZT0hMCwwKSl9ZnVuY3Rpb24gRShEZSl7dmFyIEZlPURlLl9yZWFkYWJsZVN0''@;'; put 'put ''YXRlO04oImVtaXRSZWFkYWJsZSIsRmUubmVlZFJlYWRhYmxlLEZlLmVtaXR0ZWRSZWFkYWJsZSksRmUubmVlZFJlYWRhYmxlPSExLEZlLmVtaXR0ZWRSZWFkYWJsZXx8KE4oImVtaXRSZWFkYWJsZSIsRmUuZmxvd2luZyksRmUuZW1pdHRlZFJlYWRhYmxlPSEwLHByb2Nlc3MubmV4dFRpY2so''@;'; put 'put ''bSxEZSkpfWZ1bmN0aW9uIG0oRGUpe3ZhciBGZT1EZS5fcmVhZGFibGVTdGF0ZTtOKCJlbWl0UmVhZGFibGVfIixGZS5kZXN0cm95ZWQsRmUubGVuZ3RoLEZlLmVuZGVkKSwhRmUuZGVzdHJveWVkJiYoRmUubGVuZ3RofHxGZS5lbmRlZCkmJihEZS5lbWl0KCJyZWFkYWJsZSIpLEZlLmVtaXR0''@;'; put 'put ''ZWRSZWFkYWJsZT0hMSksRmUubmVlZFJlYWRhYmxlPSFGZS5mbG93aW5nJiYhRmUuZW5kZWQmJkZlLmxlbmd0aDw9RmUuaGlnaFdhdGVyTWFyayxhdChEZSl9ZnVuY3Rpb24gQShEZSxGZSl7RmUucmVhZGluZ01vcmV8fChGZS5yZWFkaW5nTW9yZT0hMCxwcm9jZXNzLm5leHRUaWNrKG9lLERl''@;'; put 'put ''LEZlKSl9ZnVuY3Rpb24gb2UoRGUsRmUpe2Zvcig7IUZlLnJlYWRpbmcmJiFGZS5lbmRlZCYmKEZlLmxlbmd0aDxGZS5oaWdoV2F0ZXJNYXJrfHxGZS5mbG93aW5nJiYwPT09RmUubGVuZ3RoKTspe3ZhciBSZT1GZS5sZW5ndGg7aWYoTigibWF5YmVSZWFkTW9yZSByZWFkIDAiKSxEZS5yZWFk''@;'; put 'put ''KDApLFJlPT09RmUubGVuZ3RoKWJyZWFrfUZlLnJlYWRpbmdNb3JlPSExfWZ1bmN0aW9uIHNlKERlKXt2YXIgRmU9RGUuX3JlYWRhYmxlU3RhdGU7RmUucmVhZGFibGVMaXN0ZW5pbmc9RGUubGlzdGVuZXJDb3VudCgicmVhZGFibGUiKT4wLEZlLnJlc3VtZVNjaGVkdWxlZCYmIUZlLnBhdXNl''@;'; put 'put ''ZD9GZS5mbG93aW5nPSEwOkRlLmxpc3RlbmVyQ291bnQoImRhdGEiKT4wJiZEZS5yZXN1bWUoKX1mdW5jdGlvbiB3ZShEZSl7TigicmVhZGFibGUgbmV4dHRpY2sgcmVhZCAwIiksRGUucmVhZCgwKX1mdW5jdGlvbiBKZShEZSxGZSl7TigicmVzdW1lIixGZS5yZWFkaW5nKSxGZS5yZWFkaW5n''@;'; put 'put ''fHxEZS5yZWFkKDApLEZlLnJlc3VtZVNjaGVkdWxlZD0hMSxEZS5lbWl0KCJyZXN1bWUiKSxhdChEZSksRmUuZmxvd2luZyYmIUZlLnJlYWRpbmcmJkRlLnJlYWQoMCl9ZnVuY3Rpb24gYXQoRGUpe3ZhciBGZT1EZS5fcmVhZGFibGVTdGF0ZTtmb3IoTigiZmxvdyIsRmUuZmxvd2luZyk7RmUu''@;'; put 'put ''Zmxvd2luZyYmbnVsbCE9PURlLnJlYWQoKTspO31mdW5jdGlvbiBNZShEZSxGZSl7cmV0dXJuIDA9PT1GZS5sZW5ndGg/bnVsbDooRmUub2JqZWN0TW9kZT9SZT1GZS5idWZmZXIuc2hpZnQoKTohRGV8fERlPj1GZS5sZW5ndGg/KFJlPUZlLmRlY29kZXI/RmUuYnVmZmVyLmpvaW4oIiIpOjE9''@;'; put 'put ''PT1GZS5idWZmZXIubGVuZ3RoP0ZlLmJ1ZmZlci5maXJzdCgpOkZlLmJ1ZmZlci5jb25jYXQoRmUubGVuZ3RoKSxGZS5idWZmZXIuY2xlYXIoKSk6UmU9RmUuYnVmZmVyLmNvbnN1bWUoRGUsRmUuZGVjb2RlciksUmUpO3ZhciBSZX1mdW5jdGlvbiB2ZShEZSl7dmFyIEZlPURlLl9yZWFkYWJs''@;'; put 'put ''ZVN0YXRlO04oImVuZFJlYWRhYmxlIixGZS5lbmRFbWl0dGVkKSxGZS5lbmRFbWl0dGVkfHwoRmUuZW5kZWQ9ITAscHJvY2Vzcy5uZXh0VGljayhYZSxGZSxEZSkpfWZ1bmN0aW9uIFhlKERlLEZlKXtpZihOKCJlbmRSZWFkYWJsZU5UIixEZS5lbmRFbWl0dGVkLERlLmxlbmd0aCksIURlLmVu''@;'; put 'put ''ZEVtaXR0ZWQmJjA9PT1EZS5sZW5ndGgmJihEZS5lbmRFbWl0dGVkPSEwLEZlLnJlYWRhYmxlPSExLEZlLmVtaXQoImVuZCIpLERlLmF1dG9EZXN0cm95KSl7dmFyIFJlPUZlLl93cml0YWJsZVN0YXRlOyghUmV8fFJlLmF1dG9EZXN0cm95JiZSZS5maW5pc2hlZCkmJkZlLmRlc3Ryb3koKX19''@;'; put 'put ''ZnVuY3Rpb24gamUoRGUsRmUpe2Zvcih2YXIgUmU9MCxJZT1EZS5sZW5ndGg7UmU8SWU7UmUrKylpZihEZVtSZV09PT1GZSlyZXR1cm4gUmU7cmV0dXJuLTF9Vi5wcm90b3R5cGUucmVhZD1mdW5jdGlvbihEZSl7TigicmVhZCIsRGUpLERlPXBhcnNlSW50KERlLDEwKTt2YXIgRmU9dGhpcy5f''@;'; put 'put ''cmVhZGFibGVTdGF0ZSxSZT1EZTtpZigwIT09RGUmJihGZS5lbWl0dGVkUmVhZGFibGU9ITEpLDA9PT1EZSYmRmUubmVlZFJlYWRhYmxlJiYoKDAhPT1GZS5oaWdoV2F0ZXJNYXJrP0ZlLmxlbmd0aD49RmUuaGlnaFdhdGVyTWFyazpGZS5sZW5ndGg+MCl8fEZlLmVuZGVkKSlyZXR1cm4gTigi''@;'; put 'put ''cmVhZDogZW1pdFJlYWRhYmxlIixGZS5sZW5ndGgsRmUuZW5kZWQpLDA9PT1GZS5sZW5ndGgmJkZlLmVuZGVkP3ZlKHRoaXMpOkUodGhpcyksbnVsbDtpZigwPT09KERlPUgoRGUsRmUpKSYmRmUuZW5kZWQpcmV0dXJuIDA9PT1GZS5sZW5ndGgmJnZlKHRoaXMpLG51bGw7dmFyIFZlLEllPUZl''@;'; put 'put ''Lm5lZWRSZWFkYWJsZTtyZXR1cm4gTigibmVlZCByZWFkYWJsZSIsSWUpLCgwPT09RmUubGVuZ3RofHxGZS5sZW5ndGgtRGU8RmUuaGlnaFdhdGVyTWFyaykmJk4oImxlbmd0aCBsZXNzIHRoYW4gd2F0ZXJtYXJrIixJZT0hMCksRmUuZW5kZWR8fEZlLnJlYWRpbmc/TigicmVhZGluZyBvciBl''@;'; put 'put ''bmRlZCIsSWU9ITEpOkllJiYoTigiZG8gcmVhZCIpLEZlLnJlYWRpbmc9ITAsRmUuc3luYz0hMCwwPT09RmUubGVuZ3RoJiYoRmUubmVlZFJlYWRhYmxlPSEwKSx0aGlzLl9yZWFkKEZlLmhpZ2hXYXRlck1hcmspLEZlLnN5bmM9ITEsRmUucmVhZGluZ3x8KERlPUgoUmUsRmUpKSksbnVsbD09''@;'; put 'put ''PShWZT1EZT4wP01lKERlLEZlKTpudWxsKT8oRmUubmVlZFJlYWRhYmxlPUZlLmxlbmd0aDw9RmUuaGlnaFdhdGVyTWFyayxEZT0wKTooRmUubGVuZ3RoLT1EZSxGZS5hd2FpdERyYWluPTApLDA9PT1GZS5sZW5ndGgmJihGZS5lbmRlZHx8KEZlLm5lZWRSZWFkYWJsZT0hMCksUmUhPT1EZSYm''@;'; put 'put ''RmUuZW5kZWQmJnZlKHRoaXMpKSxudWxsIT09VmUmJnRoaXMuZW1pdCgiZGF0YSIsVmUpLFZlfSxWLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbihEZSl7X2UodGhpcyxuZXcgSigiX3JlYWQoKSIpKX0sVi5wcm90b3R5cGUucGlwZT1mdW5jdGlvbihEZSxGZSl7dmFyIFJlPXRoaXMsSWU9dGhp''@;'; put 'put ''cy5fcmVhZGFibGVTdGF0ZTtzd2l0Y2goSWUucGlwZXNDb3VudCl7Y2FzZSAwOkllLnBpcGVzPURlO2JyZWFrO2Nhc2UgMTpJZS5waXBlcz1bSWUucGlwZXMsRGVdO2JyZWFrO2RlZmF1bHQ6SWUucGlwZXMucHVzaChEZSl9SWUucGlwZXNDb3VudCs9MSxOKCJwaXBlIGNvdW50PSVkIG9wdHM9''@;'; put 'put ''JWoiLEllLnBpcGVzQ291bnQsRmUpO3ZhciBrZT1GZSYmITE9PT1GZS5lbmR8fERlPT09cHJvY2Vzcy5zdGRvdXR8fERlPT09cHJvY2Vzcy5zdGRlcnI/JGU6X3Q7ZnVuY3Rpb24gX3QoKXtOKCJvbmVuZCIpLERlLmVuZCgpfUllLmVuZEVtaXR0ZWQ/cHJvY2Vzcy5uZXh0VGljayhrZSk6UmUu''@;'; put 'put ''b25jZSgiZW5kIixrZSksRGUub24oInVucGlwZSIsZnVuY3Rpb24gQWUodHQsSGUpe04oIm9udW5waXBlIiksdHQ9PT1SZSYmSGUmJiExPT09SGUuaGFzVW5waXBlZCYmKEhlLmhhc1VucGlwZWQ9ITAsZnVuY3Rpb24gZG4oKXtOKCJjbGVhbnVwIiksRGUucmVtb3ZlTGlzdGVuZXIoImNsb3Nl''@;'; put 'put ''IixEdCksRGUucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsaXQpLERlLnJlbW92ZUxpc3RlbmVyKCJkcmFpbiIscnQpLERlLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsTXQpLERlLnJlbW92ZUxpc3RlbmVyKCJ1bnBpcGUiLEFlKSxSZS5yZW1vdmVMaXN0ZW5lcigiZW5kIixfdCksUmUucmVtb3Zl''@;'; put 'put ''TGlzdGVuZXIoImVuZCIsJGUpLFJlLnJlbW92ZUxpc3RlbmVyKCJkYXRhIix5dCksUWU9ITAsSWUuYXdhaXREcmFpbiYmKCFEZS5fd3JpdGFibGVTdGF0ZXx8RGUuX3dyaXRhYmxlU3RhdGUubmVlZERyYWluKSYmcnQoKX0oKSl9KTt2YXIgcnQ9ZnVuY3Rpb24gdGUoRGUpe3JldHVybiBmdW5j''@;'; put 'put ''dGlvbigpe3ZhciBSZT1EZS5fcmVhZGFibGVTdGF0ZTtOKCJwaXBlT25EcmFpbiIsUmUuYXdhaXREcmFpbiksUmUuYXdhaXREcmFpbiYmUmUuYXdhaXREcmFpbi0tLDA9PT1SZS5hd2FpdERyYWluJiZnKERlLCJkYXRhIikmJihSZS5mbG93aW5nPSEwLGF0KERlKSl9fShSZSk7RGUub24oImRy''@;'; put 'put ''YWluIixydCk7dmFyIFFlPSExO2Z1bmN0aW9uIHl0KHR0KXtOKCJvbmRhdGEiKTt2YXIgSGU9RGUud3JpdGUodHQpO04oImRlc3Qud3JpdGUiLEhlKSwhMT09PUhlJiYoKDE9PT1JZS5waXBlc0NvdW50JiZJZS5waXBlcz09PURlfHxJZS5waXBlc0NvdW50PjEmJi0xIT09amUoSWUucGlwZXMs''@;'; put 'put ''RGUpKSYmIVFlJiYoTigiZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlIixJZS5hd2FpdERyYWluKSxJZS5hd2FpdERyYWluKyspLFJlLnBhdXNlKCkpfWZ1bmN0aW9uIE10KHR0KXtOKCJvbmVycm9yIix0dCksJGUoKSxEZS5yZW1vdmVMaXN0ZW5lcigiZXJyb3IiLE10KSwwPT09ZyhEZSwi''@;'; put 'put ''ZXJyb3IiKSYmX2UoRGUsdHQpfWZ1bmN0aW9uIER0KCl7RGUucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsaXQpLCRlKCl9ZnVuY3Rpb24gaXQoKXtOKCJvbmZpbmlzaCIpLERlLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsRHQpLCRlKCl9ZnVuY3Rpb24gJGUoKXtOKCJ1bnBpcGUiKSxSZS51bnBp''@;'; put 'put ''cGUoRGUpfXJldHVybiBSZS5vbigiZGF0YSIseXQpLGZ1bmN0aW9uIFNlKERlLEZlLFJlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgRGUucHJlcGVuZExpc3RlbmVyKXJldHVybiBEZS5wcmVwZW5kTGlzdGVuZXIoRmUsUmUpO0RlLl9ldmVudHMmJkRlLl9ldmVudHNbRmVdP0FycmF5LmlzQXJy''@;'; put 'put ''YXkoRGUuX2V2ZW50c1tGZV0pP0RlLl9ldmVudHNbRmVdLnVuc2hpZnQoUmUpOkRlLl9ldmVudHNbRmVdPVtSZSxEZS5fZXZlbnRzW0ZlXV06RGUub24oRmUsUmUpfShEZSwiZXJyb3IiLE10KSxEZS5vbmNlKCJjbG9zZSIsRHQpLERlLm9uY2UoImZpbmlzaCIsaXQpLERlLmVtaXQoInBpcGUi''@;'; put 'put ''LFJlKSxJZS5mbG93aW5nfHwoTigicGlwZSByZXN1bWUiKSxSZS5yZXN1bWUoKSksRGV9LFYucHJvdG90eXBlLnVucGlwZT1mdW5jdGlvbihEZSl7dmFyIEZlPXRoaXMuX3JlYWRhYmxlU3RhdGUsUmU9e2hhc1VucGlwZWQ6ITF9O2lmKDA9PT1GZS5waXBlc0NvdW50KXJldHVybiB0aGlzO2lm''@;'; put 'put ''KDE9PT1GZS5waXBlc0NvdW50KXJldHVybiBEZSYmRGUhPT1GZS5waXBlc3x8KERlfHwoRGU9RmUucGlwZXMpLEZlLnBpcGVzPW51bGwsRmUucGlwZXNDb3VudD0wLEZlLmZsb3dpbmc9ITEsRGUmJkRlLmVtaXQoInVucGlwZSIsdGhpcyxSZSkpLHRoaXM7aWYoIURlKXt2YXIgSWU9RmUucGlw''@;'; put 'put ''ZXMsVmU9RmUucGlwZXNDb3VudDtGZS5waXBlcz1udWxsLEZlLnBpcGVzQ291bnQ9MCxGZS5mbG93aW5nPSExO2Zvcih2YXIga2U9MDtrZTxWZTtrZSsrKUllW2tlXS5lbWl0KCJ1bnBpcGUiLHRoaXMse2hhc1VucGlwZWQ6ITF9KTtyZXR1cm4gdGhpc312YXIgQWU9amUoRmUucGlwZXMsRGUp''@;'; put 'put ''O3JldHVybi0xPT09QWV8fChGZS5waXBlcy5zcGxpY2UoQWUsMSksRmUucGlwZXNDb3VudC09MSwxPT09RmUucGlwZXNDb3VudCYmKEZlLnBpcGVzPUZlLnBpcGVzWzBdKSxEZS5lbWl0KCJ1bnBpcGUiLHRoaXMsUmUpKSx0aGlzfSxWLnByb3RvdHlwZS5hZGRMaXN0ZW5lcj1WLnByb3RvdHlw''@;'; put 'put ''ZS5vbj1mdW5jdGlvbihEZSxGZSl7dmFyIFJlPUIucHJvdG90eXBlLm9uLmNhbGwodGhpcyxEZSxGZSksSWU9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4iZGF0YSI9PT1EZT8oSWUucmVhZGFibGVMaXN0ZW5pbmc9dGhpcy5saXN0ZW5lckNvdW50KCJyZWFkYWJsZSIpPjAsITEhPT1JZS5m''@;'; put 'put ''bG93aW5nJiZ0aGlzLnJlc3VtZSgpKToicmVhZGFibGUiPT09RGUmJiFJZS5lbmRFbWl0dGVkJiYhSWUucmVhZGFibGVMaXN0ZW5pbmcmJihJZS5yZWFkYWJsZUxpc3RlbmluZz1JZS5uZWVkUmVhZGFibGU9ITAsSWUuZmxvd2luZz0hMSxJZS5lbWl0dGVkUmVhZGFibGU9ITEsTigib24gcmVh''@;'; put 'put ''ZGFibGUiLEllLmxlbmd0aCxJZS5yZWFkaW5nKSxJZS5sZW5ndGg/RSh0aGlzKTpJZS5yZWFkaW5nfHxwcm9jZXNzLm5leHRUaWNrKHdlLHRoaXMpKSxSZX0sVi5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oRGUsRmUpe3ZhciBSZT1CLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5l''@;'; put 'put ''ci5jYWxsKHRoaXMsRGUsRmUpO3JldHVybiJyZWFkYWJsZSI9PT1EZSYmcHJvY2Vzcy5uZXh0VGljayhzZSx0aGlzKSxSZX0sVi5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKERlKXt2YXIgRmU9Qi5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzLmFwcGx5KHRoaXMs''@;'; put 'put ''YXJndW1lbnRzKTtyZXR1cm4oInJlYWRhYmxlIj09PURlfHx2b2lkIDA9PT1EZSkmJnByb2Nlc3MubmV4dFRpY2soc2UsdGhpcyksRmV9LFYucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe3ZhciBEZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBEZS5mbG93aW5nfHwoTigicmVzdW1l''@;'; put 'put ''IiksRGUuZmxvd2luZz0hRGUucmVhZGFibGVMaXN0ZW5pbmcsZnVuY3Rpb24gVWUoRGUsRmUpe0ZlLnJlc3VtZVNjaGVkdWxlZHx8KEZlLnJlc3VtZVNjaGVkdWxlZD0hMCxwcm9jZXNzLm5leHRUaWNrKEplLERlLEZlKSl9KHRoaXMsRGUpKSxEZS5wYXVzZWQ9ITEsdGhpc30sVi5wcm90b3R5''@;'; put 'put ''cGUucGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4gTigiY2FsbCBwYXVzZSBmbG93aW5nPSVqIix0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcpLCExIT09dGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nJiYoTigicGF1c2UiKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9ITEsdGhpcy5l''@;'; put 'put ''bWl0KCJwYXVzZSIpKSx0aGlzLl9yZWFkYWJsZVN0YXRlLnBhdXNlZD0hMCx0aGlzfSxWLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKERlKXt2YXIgRmU9dGhpcyxSZT10aGlzLl9yZWFkYWJsZVN0YXRlLEllPSExO2Zvcih2YXIgVmUgaW4gRGUub24oImVuZCIsZnVuY3Rpb24oKXtpZihOKCJ3''@;'; put 'put ''cmFwcGVkIGVuZCIpLFJlLmRlY29kZXImJiFSZS5lbmRlZCl7dmFyIEFlPVJlLmRlY29kZXIuZW5kKCk7QWUmJkFlLmxlbmd0aCYmRmUucHVzaChBZSl9RmUucHVzaChudWxsKX0pLERlLm9uKCJkYXRhIixmdW5jdGlvbihBZSl7Tigid3JhcHBlZCBkYXRhIiksUmUuZGVjb2RlciYmKEFlPVJl''@;'; put 'put ''LmRlY29kZXIud3JpdGUoQWUpKSxSZS5vYmplY3RNb2RlJiZudWxsPT1BZXx8IShSZS5vYmplY3RNb2RlfHxBZSYmQWUubGVuZ3RoKXx8RmUucHVzaChBZSl8fChJZT0hMCxEZS5wYXVzZSgpKX0pLERlKXZvaWQgMD09PXRoaXNbVmVdJiYiZnVuY3Rpb24iPT10eXBlb2YgRGVbVmVdJiYodGhp''@;'; put 'put ''c1tWZV09ZnVuY3Rpb24oX3Qpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBEZVtfdF0uYXBwbHkoRGUsYXJndW1lbnRzKX19KFZlKSk7Zm9yKHZhciBrZT0wO2tlPFRlLmxlbmd0aDtrZSsrKURlLm9uKFRlW2tlXSx0aGlzLmVtaXQuYmluZCh0aGlzLFRlW2tlXSkpO3JldHVybiB0aGlzLl9y''@;'; put 'put ''ZWFkPWZ1bmN0aW9uKEFlKXtOKCJ3cmFwcGVkIF9yZWFkIixBZSksSWUmJihJZT0hMSxEZS5yZXN1bWUoKSl9LHRoaXN9LCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihWLnByb3RvdHlwZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl09ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwPT09bGUmJihs''@;'; put 'put ''ZT1fKDEyNjgzKSksbGUodGhpcyl9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVi5wcm90b3R5cGUsInJlYWRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSxPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkoVi5wcm90b3R5cGUsInJlYWRhYmxlQnVmZmVyIix7ZW51bWVyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZGFibGVTdGF0ZSYmdGhpcy5fcmVhZGFibGVTdGF0ZS5idWZmZXJ9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFYucHJvdG90eXBlLCJy''@;'; put 'put ''ZWFkYWJsZUZsb3dpbmciLHtlbnVtZXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmd9LHNldDpmdW5jdGlvbihGZSl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz1GZSl9fSksVi5fZnJvbUxp''@;'; put 'put ''c3Q9TWUsT2JqZWN0LmRlZmluZVByb3BlcnR5KFYucHJvdG90eXBlLCJyZWFkYWJsZUxlbmd0aCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUubGVuZ3RofX0pLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJihWLmZyb209ZnVuY3Rp''@;'; put 'put ''b24oRGUsRmUpe3JldHVybiB2b2lkIDA9PT1tZSYmKG1lPV8oNDc3NjUpKSxtZShWLERlLEZlKX0pfSw0MzQxMDoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPU87dmFyIEk9XygzMDQ2NCkuRix5PUkuRVJSX01FVEhPRF9OT1RfSU1QTEVNRU5URUQsZz1JLkVSUl9NVUxUSVBM''@;'; put 'put ''RV9DQUxMQkFDSyxCPUkuRVJSX1RSQU5TRk9STV9BTFJFQURZX1RSQU5TRk9STUlORyx3PUkuRVJSX1RSQU5TRk9STV9XSVRIX0xFTkdUSF8wLFA9XygxMDMwKTtmdW5jdGlvbiBGKEwsSyl7dmFyIFU9dGhpcy5fdHJhbnNmb3JtU3RhdGU7VS50cmFuc2Zvcm1pbmc9ITE7dmFyIFc9VS53cml0''@;'; put 'put ''ZWNiO2lmKG51bGw9PT1XKXJldHVybiB0aGlzLmVtaXQoImVycm9yIixuZXcgZyk7VS53cml0ZWNodW5rPW51bGwsVS53cml0ZWNiPW51bGwsbnVsbCE9SyYmdGhpcy5wdXNoKEspLFcoTCk7dmFyIFk9dGhpcy5fcmVhZGFibGVTdGF0ZTtZLnJlYWRpbmc9ITEsKFkubmVlZFJlYWRhYmxlfHxZ''@;'; put 'put ''Lmxlbmd0aDxZLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKFkuaGlnaFdhdGVyTWFyayl9ZnVuY3Rpb24gTyhMKXtpZighKHRoaXMgaW5zdGFuY2VvZiBPKSlyZXR1cm4gbmV3IE8oTCk7UC5jYWxsKHRoaXMsTCksdGhpcy5fdHJhbnNmb3JtU3RhdGU9e2FmdGVyVHJhbnNmb3JtOkYuYmlu''@;'; put 'put ''ZCh0aGlzKSxuZWVkVHJhbnNmb3JtOiExLHRyYW5zZm9ybWluZzohMSx3cml0ZWNiOm51bGwsd3JpdGVjaHVuazpudWxsLHdyaXRlZW5jb2Rpbmc6bnVsbH0sdGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGU9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLEwmJigiZnVuY3Rp''@;'; put 'put ''b24iPT10eXBlb2YgTC50cmFuc2Zvcm0mJih0aGlzLl90cmFuc2Zvcm09TC50cmFuc2Zvcm0pLCJmdW5jdGlvbiI9PXR5cGVvZiBMLmZsdXNoJiYodGhpcy5fZmx1c2g9TC5mbHVzaCkpLHRoaXMub24oInByZWZpbmlzaCIseil9ZnVuY3Rpb24geigpe3ZhciBMPXRoaXM7ImZ1bmN0aW9uIiE9''@;'; put 'put ''dHlwZW9mIHRoaXMuX2ZsdXNofHx0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD9OKHRoaXMsbnVsbCxudWxsKTp0aGlzLl9mbHVzaChmdW5jdGlvbihLLFUpe04oTCxLLFUpfSl9ZnVuY3Rpb24gTihMLEssVSl7aWYoSylyZXR1cm4gTC5lbWl0KCJlcnJvciIsSyk7aWYobnVsbCE9VSYm''@;'; put 'put ''TC5wdXNoKFUpLEwuX3dyaXRhYmxlU3RhdGUubGVuZ3RoKXRocm93IG5ldyB3O2lmKEwuX3RyYW5zZm9ybVN0YXRlLnRyYW5zZm9ybWluZyl0aHJvdyBuZXcgQjtyZXR1cm4gTC5wdXNoKG51bGwpfV8oNzE5OTMpKE8sUCksTy5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihMLEspe3JldHVybiB0''@;'; put 'put ''aGlzLl90cmFuc2Zvcm1TdGF0ZS5uZWVkVHJhbnNmb3JtPSExLFAucHJvdG90eXBlLnB1c2guY2FsbCh0aGlzLEwsSyl9LE8ucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24oTCxLLFUpe1UobmV3IHkoIl90cmFuc2Zvcm0oKSIpKX0sTy5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKEws''@;'; put 'put ''SyxVKXt2YXIgVz10aGlzLl90cmFuc2Zvcm1TdGF0ZTtpZihXLndyaXRlY2I9VSxXLndyaXRlY2h1bms9TCxXLndyaXRlZW5jb2Rpbmc9SywhVy50cmFuc2Zvcm1pbmcpe3ZhciBZPXRoaXMuX3JlYWRhYmxlU3RhdGU7KFcubmVlZFRyYW5zZm9ybXx8WS5uZWVkUmVhZGFibGV8fFkubGVuZ3Ro''@;'; put 'put ''PFkuaGlnaFdhdGVyTWFyaykmJnRoaXMuX3JlYWQoWS5oaWdoV2F0ZXJNYXJrKX19LE8ucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKEwpe3ZhciBLPXRoaXMuX3RyYW5zZm9ybVN0YXRlO251bGw9PT1LLndyaXRlY2h1bmt8fEsudHJhbnNmb3JtaW5nP0submVlZFRyYW5zZm9ybT0hMDooSy50''@;'; put 'put ''cmFuc2Zvcm1pbmc9ITAsdGhpcy5fdHJhbnNmb3JtKEsud3JpdGVjaHVuayxLLndyaXRlZW5jb2RpbmcsSy5hZnRlclRyYW5zZm9ybSkpfSxPLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihMLEspe1AucHJvdG90eXBlLl9kZXN0cm95LmNhbGwodGhpcyxMLGZ1bmN0aW9uKFUpe0soVSl9''@;'; put 'put ''KX19LDE1NDkyOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHkoYXQpe3ZhciBNZT10aGlzO3RoaXMubmV4dD1udWxsLHRoaXMuZW50cnk9bnVsbCx0aGlzLmZpbmlzaD1mdW5jdGlvbigpeyFmdW5jdGlvbiBKZShhdCxNZSx2ZSl7dmFyIFhlPWF0LmVudHJ5O2ZvcihhdC5lbnRy''@;'; put 'put ''eT1udWxsO1hlOyl7dmFyIGplPVhlLmNhbGxiYWNrO01lLnBlbmRpbmdjYi0tLGplKHZlKSxYZT1YZS5uZXh0fU1lLmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0PWF0fShNZSxhdCl9fXZhciBnO3VlLmV4cG9ydHM9emUsemUuV3JpdGFibGVTdGF0ZT1UZTt2YXIgU2UsQj17ZGVwcmVjYXRlOl8o''@;'; put 'put ''MzM5OCl9LHc9XygxMjYwMSksUD1fKDgzODM4KS5CdWZmZXIsRj0odHlwZW9mIGdsb2JhbDwidSI/Z2xvYmFsOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzp0eXBlb2Ygc2VsZjwidSI/c2VsZjp7fSkuVWludDhBcnJheXx8ZnVuY3Rpb24oKXt9LE49Xyg4ODE1MiksSz1fKDIyODI3KS5nZXRI''@;'; put 'put ''aWdoV2F0ZXJNYXJrLFU9XygzMDQ2NCkuRixXPVUuRVJSX0lOVkFMSURfQVJHX1RZUEUsWT1VLkVSUl9NRVRIT0RfTk9UX0lNUExFTUVOVEVELFg9VS5FUlJfTVVMVElQTEVfQ0FMTEJBQ0ssZWU9VS5FUlJfU1RSRUFNX0NBTk5PVF9QSVBFLEo9VS5FUlJfU1RSRUFNX0RFU1RST1lFRCxyZT1V''@;'; put 'put ''LkVSUl9TVFJFQU1fTlVMTF9WQUxVRVMsaWU9VS5FUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORCxsZT1VLkVSUl9VTktOT1dOX0VOQ09ESU5HLG1lPU4uZXJyb3JPckRlc3Ryb3k7ZnVuY3Rpb24gX2UoKXt9ZnVuY3Rpb24gVGUoYXQsTWUsdmUpe2c9Z3x8XygxMDMwKSwiYm9vbGVhbiIhPXR5''@;'; put 'put ''cGVvZiB2ZSYmKHZlPU1lIGluc3RhbmNlb2YgZyksdGhpcy5vYmplY3RNb2RlPSEhKGF0PWF0fHx7fSkub2JqZWN0TW9kZSx2ZSYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhYXQud3JpdGFibGVPYmplY3RNb2RlKSx0aGlzLmhpZ2hXYXRlck1hcms9Syh0aGlzLGF0LCJ3''@;'; put 'put ''cml0YWJsZUhpZ2hXYXRlck1hcmsiLHZlKSx0aGlzLmZpbmFsQ2FsbGVkPSExLHRoaXMubmVlZERyYWluPSExLHRoaXMuZW5kaW5nPSExLHRoaXMuZW5kZWQ9ITEsdGhpcy5maW5pc2hlZD0hMSx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLmRlY29kZVN0cmluZ3M9ISghMT09PWF0LmRlY29kZVN0''@;'; put 'put ''cmluZ3MpLHRoaXMuZGVmYXVsdEVuY29kaW5nPWF0LmRlZmF1bHRFbmNvZGluZ3x8InV0ZjgiLHRoaXMubGVuZ3RoPTAsdGhpcy53cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhpcy5zeW5jPSEwLHRoaXMuYnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlzLm9ud3JpdGU9ZnVuY3Rpb24oamUpeyFm''@;'; put 'put ''dW5jdGlvbiBqKGF0LE1lKXt2YXIgdmU9YXQuX3dyaXRhYmxlU3RhdGUsWGU9dmUuc3luYyxqZT12ZS53cml0ZWNiO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBqZSl0aHJvdyBuZXcgWDtpZihmdW5jdGlvbiBIKGF0KXthdC53cml0aW5nPSExLGF0LndyaXRlY2I9bnVsbCxhdC5sZW5ndGgtPWF0''@;'; put 'put ''LndyaXRlbGVuLGF0LndyaXRlbGVuPTB9KHZlKSxNZSkhZnVuY3Rpb24gVChhdCxNZSx2ZSxYZSxqZSl7LS1NZS5wZW5kaW5nY2IsdmU/KHByb2Nlc3MubmV4dFRpY2soamUsWGUpLHByb2Nlc3MubmV4dFRpY2sod2UsYXQsTWUpLGF0Ll93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCxt''@;'; put 'put ''ZShhdCxYZSkpOihqZShYZSksYXQuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLG1lKGF0LFhlKSx3ZShhdCxNZSkpfShhdCx2ZSxYZSxNZSxqZSk7ZWxzZXt2YXIgRGU9b2UodmUpfHxhdC5kZXN0cm95ZWQ7IURlJiYhdmUuY29ya2VkJiYhdmUuYnVmZmVyUHJvY2Vzc2luZyYmdmUu''@;'; put 'put ''YnVmZmVyZWRSZXF1ZXN0JiZBKGF0LHZlKSxYZT9wcm9jZXNzLm5leHRUaWNrKEUsYXQsdmUsRGUsamUpOkUoYXQsdmUsRGUsamUpfX0oTWUsamUpfSx0aGlzLndyaXRlY2I9bnVsbCx0aGlzLndyaXRlbGVuPTAsdGhpcy5idWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLmxhc3RCdWZmZXJlZFJl''@;'; put 'put ''cXVlc3Q9bnVsbCx0aGlzLnBlbmRpbmdjYj0wLHRoaXMucHJlZmluaXNoZWQ9ITEsdGhpcy5lcnJvckVtaXR0ZWQ9ITEsdGhpcy5lbWl0Q2xvc2U9ITEhPT1hdC5lbWl0Q2xvc2UsdGhpcy5hdXRvRGVzdHJveT0hIWF0LmF1dG9EZXN0cm95LHRoaXMuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MCx0''@;'; put 'put ''aGlzLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgeSh0aGlzKX1mdW5jdGlvbiB6ZShhdCl7dmFyIE1lPXRoaXMgaW5zdGFuY2VvZihnPWd8fF8oMTAzMCkpO2lmKCFNZSYmIVNlLmNhbGwoemUsdGhpcykpcmV0dXJuIG5ldyB6ZShhdCk7dGhpcy5fd3JpdGFibGVTdGF0ZT1uZXcgVGUoYXQsdGhp''@;'; put 'put ''cyxNZSksdGhpcy53cml0YWJsZT0hMCxhdCYmKCJmdW5jdGlvbiI9PXR5cGVvZiBhdC53cml0ZSYmKHRoaXMuX3dyaXRlPWF0LndyaXRlKSwiZnVuY3Rpb24iPT10eXBlb2YgYXQud3JpdGV2JiYodGhpcy5fd3JpdGV2PWF0LndyaXRldiksImZ1bmN0aW9uIj09dHlwZW9mIGF0LmRlc3Ryb3km''@;'; put 'put ''Jih0aGlzLl9kZXN0cm95PWF0LmRlc3Ryb3kpLCJmdW5jdGlvbiI9PXR5cGVvZiBhdC5maW5hbCYmKHRoaXMuX2ZpbmFsPWF0LmZpbmFsKSksdy5jYWxsKHRoaXMpfWZ1bmN0aW9uIEMoYXQsTWUsdmUsWGUsamUsRGUsRmUpe01lLndyaXRlbGVuPVhlLE1lLndyaXRlY2I9RmUsTWUud3JpdGlu''@;'; put 'put ''Zz0hMCxNZS5zeW5jPSEwLE1lLmRlc3Ryb3llZD9NZS5vbndyaXRlKG5ldyBKKCJ3cml0ZSIpKTp2ZT9hdC5fd3JpdGV2KGplLE1lLm9ud3JpdGUpOmF0Ll93cml0ZShqZSxEZSxNZS5vbndyaXRlKSxNZS5zeW5jPSExfWZ1bmN0aW9uIEUoYXQsTWUsdmUsWGUpe3ZlfHxmdW5jdGlvbiBtKGF0''@;'; put 'put ''LE1lKXswPT09TWUubGVuZ3RoJiZNZS5uZWVkRHJhaW4mJihNZS5uZWVkRHJhaW49ITEsYXQuZW1pdCgiZHJhaW4iKSl9KGF0LE1lKSxNZS5wZW5kaW5nY2ItLSxYZSgpLHdlKGF0LE1lKX1mdW5jdGlvbiBBKGF0LE1lKXtNZS5idWZmZXJQcm9jZXNzaW5nPSEwO3ZhciB2ZT1NZS5idWZmZXJl''@;'; put 'put ''ZFJlcXVlc3Q7aWYoYXQuX3dyaXRldiYmdmUmJnZlLm5leHQpe3ZhciBqZT1uZXcgQXJyYXkoTWUuYnVmZmVyZWRSZXF1ZXN0Q291bnQpLERlPU1lLmNvcmtlZFJlcXVlc3RzRnJlZTtEZS5lbnRyeT12ZTtmb3IodmFyIEZlPTAsUmU9ITA7dmU7KWplW0ZlXT12ZSx2ZS5pc0J1Znx8KFJlPSEx''@;'; put 'put ''KSx2ZT12ZS5uZXh0LEZlKz0xO2plLmFsbEJ1ZmZlcnM9UmUsQyhhdCxNZSwhMCxNZS5sZW5ndGgsamUsIiIsRGUuZmluaXNoKSxNZS5wZW5kaW5nY2IrKyxNZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsRGUubmV4dD8oTWUuY29ya2VkUmVxdWVzdHNGcmVlPURlLm5leHQsRGUubmV4dD1u''@;'; put 'put ''dWxsKTpNZS5jb3JrZWRSZXF1ZXN0c0ZyZWU9bmV3IHkoTWUpLE1lLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTB9ZWxzZXtmb3IoO3ZlOyl7dmFyIEllPXZlLmNodW5rO2lmKEMoYXQsTWUsITEsTWUub2JqZWN0TW9kZT8xOkllLmxlbmd0aCxJZSx2ZS5lbmNvZGluZyx2ZS5jYWxsYmFjayksdmU9''@;'; put 'put ''dmUubmV4dCxNZS5idWZmZXJlZFJlcXVlc3RDb3VudC0tLE1lLndyaXRpbmcpYnJlYWt9bnVsbD09PXZlJiYoTWUubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsKX1NZS5idWZmZXJlZFJlcXVlc3Q9dmUsTWUuYnVmZmVyUHJvY2Vzc2luZz0hMX1mdW5jdGlvbiBvZShhdCl7cmV0dXJuIGF0LmVu''@;'; put 'put ''ZGluZyYmMD09PWF0Lmxlbmd0aCYmbnVsbD09PWF0LmJ1ZmZlcmVkUmVxdWVzdCYmIWF0LmZpbmlzaGVkJiYhYXQud3JpdGluZ31mdW5jdGlvbiB0ZShhdCxNZSl7YXQuX2ZpbmFsKGZ1bmN0aW9uKHZlKXtNZS5wZW5kaW5nY2ItLSx2ZSYmbWUoYXQsdmUpLE1lLnByZWZpbmlzaGVkPSEwLGF0''@;'; put 'put ''LmVtaXQoInByZWZpbmlzaCIpLHdlKGF0LE1lKX0pfWZ1bmN0aW9uIHdlKGF0LE1lKXt2YXIgdmU9b2UoTWUpO2lmKHZlJiYoZnVuY3Rpb24gc2UoYXQsTWUpeyFNZS5wcmVmaW5pc2hlZCYmIU1lLmZpbmFsQ2FsbGVkJiYoImZ1bmN0aW9uIiE9dHlwZW9mIGF0Ll9maW5hbHx8TWUuZGVzdHJv''@;'; put 'put ''eWVkPyhNZS5wcmVmaW5pc2hlZD0hMCxhdC5lbWl0KCJwcmVmaW5pc2giKSk6KE1lLnBlbmRpbmdjYisrLE1lLmZpbmFsQ2FsbGVkPSEwLHByb2Nlc3MubmV4dFRpY2sodGUsYXQsTWUpKSl9KGF0LE1lKSwwPT09TWUucGVuZGluZ2NiJiYoTWUuZmluaXNoZWQ9ITAsYXQuZW1pdCgiZmluaXNo''@;'; put 'put ''IiksTWUuYXV0b0Rlc3Ryb3kpKSl7dmFyIFhlPWF0Ll9yZWFkYWJsZVN0YXRlOyghWGV8fFhlLmF1dG9EZXN0cm95JiZYZS5lbmRFbWl0dGVkKSYmYXQuZGVzdHJveSgpfXJldHVybiB2ZX1fKDcxOTkzKSh6ZSx3KSxUZS5wcm90b3R5cGUuZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciBN''@;'; put 'put ''ZT10aGlzLmJ1ZmZlcmVkUmVxdWVzdCx2ZT1bXTtNZTspdmUucHVzaChNZSksTWU9TWUubmV4dDtyZXR1cm4gdmV9LGZ1bmN0aW9uKCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShUZS5wcm90b3R5cGUsImJ1ZmZlciIse2dldDpCLmRlcHJlY2F0ZShmdW5jdGlvbigpe3JldHVybiB0aGlz''@;'; put 'put ''LmdldEJ1ZmZlcigpfSwiX3dyaXRhYmxlU3RhdGUuYnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBfd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIgaW5zdGVhZC4iLCJERVAwMDAzIil9KX1jYXRjaHt9fSgpLCJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5oYXNJbnN0YW5jZSYmImZ1''@;'; put 'put ''bmN0aW9uIj09dHlwZW9mIEZ1bmN0aW9uLnByb3RvdHlwZVtTeW1ib2wuaGFzSW5zdGFuY2VdPyhTZT1GdW5jdGlvbi5wcm90b3R5cGVbU3ltYm9sLmhhc0luc3RhbmNlXSxPYmplY3QuZGVmaW5lUHJvcGVydHkoemUsU3ltYm9sLmhhc0luc3RhbmNlLHt2YWx1ZTpmdW5jdGlvbihNZSl7cmV0''@;'; put 'put ''dXJuISFTZS5jYWxsKHRoaXMsTWUpfHx0aGlzPT09emUmJk1lJiZNZS5fd3JpdGFibGVTdGF0ZSBpbnN0YW5jZW9mIFRlfX0pKTpTZT1mdW5jdGlvbihNZSl7cmV0dXJuIE1lIGluc3RhbmNlb2YgdGhpc30semUucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oKXttZSh0aGlzLG5ldyBlZSl9LHpl''@;'; put 'put ''LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihhdCxNZSx2ZSl7dmFyIFhlPXRoaXMuX3dyaXRhYmxlU3RhdGUsamU9ITEsRGU9IVhlLm9iamVjdE1vZGUmJmZ1bmN0aW9uIHooYXQpe3JldHVybiBQLmlzQnVmZmVyKGF0KXx8YXQgaW5zdGFuY2VvZiBGfShhdCk7cmV0dXJuIERlJiYhUC5pc0J1''@;'; put 'put ''ZmZlcihhdCkmJihhdD1mdW5jdGlvbiBPKGF0KXtyZXR1cm4gUC5mcm9tKGF0KX0oYXQpKSwiZnVuY3Rpb24iPT10eXBlb2YgTWUmJih2ZT1NZSxNZT1udWxsKSxEZT9NZT0iYnVmZmVyIjpNZXx8KE1lPVhlLmRlZmF1bHRFbmNvZGluZyksImZ1bmN0aW9uIiE9dHlwZW9mIHZlJiYodmU9X2Up''@;'; put 'put ''LFhlLmVuZGluZz9mdW5jdGlvbiBWKGF0LE1lKXt2YXIgdmU9bmV3IGllO21lKGF0LHZlKSxwcm9jZXNzLm5leHRUaWNrKE1lLHZlKX0odGhpcyx2ZSk6KERlfHxmdW5jdGlvbiBwKGF0LE1lLHZlLFhlKXt2YXIgamU7cmV0dXJuIG51bGw9PT12ZT9qZT1uZXcgcmU6InN0cmluZyIhPXR5cGVv''@;'; put 'put ''ZiB2ZSYmIU1lLm9iamVjdE1vZGUmJihqZT1uZXcgVygiY2h1bmsiLFsic3RyaW5nIiwiQnVmZmVyIl0sdmUpKSwhamV8fChtZShhdCxqZSkscHJvY2Vzcy5uZXh0VGljayhYZSxqZSksITEpfSh0aGlzLFhlLGF0LHZlKSkmJihYZS5wZW5kaW5nY2IrKyxqZT1mdW5jdGlvbiB4KGF0LE1lLHZl''@;'; put 'put ''LFhlLGplLERlKXtpZighdmUpe3ZhciBGZT1mdW5jdGlvbiBiKGF0LE1lLHZlKXtyZXR1cm4hYXQub2JqZWN0TW9kZSYmITEhPT1hdC5kZWNvZGVTdHJpbmdzJiYic3RyaW5nIj09dHlwZW9mIE1lJiYoTWU9UC5mcm9tKE1lLHZlKSksTWV9KE1lLFhlLGplKTtYZSE9PUZlJiYodmU9ITAsamU9''@;'; put 'put ''ImJ1ZmZlciIsWGU9RmUpfXZhciBSZT1NZS5vYmplY3RNb2RlPzE6WGUubGVuZ3RoO01lLmxlbmd0aCs9UmU7dmFyIEllPU1lLmxlbmd0aDxNZS5oaWdoV2F0ZXJNYXJrO2lmKEllfHwoTWUubmVlZERyYWluPSEwKSxNZS53cml0aW5nfHxNZS5jb3JrZWQpe3ZhciBWZT1NZS5sYXN0QnVmZmVy''@;'; put 'put ''ZWRSZXF1ZXN0O01lLmxhc3RCdWZmZXJlZFJlcXVlc3Q9e2NodW5rOlhlLGVuY29kaW5nOmplLGlzQnVmOnZlLGNhbGxiYWNrOkRlLG5leHQ6bnVsbH0sVmU/VmUubmV4dD1NZS5sYXN0QnVmZmVyZWRSZXF1ZXN0Ok1lLmJ1ZmZlcmVkUmVxdWVzdD1NZS5sYXN0QnVmZmVyZWRSZXF1ZXN0LE1l''@;'; put 'put ''LmJ1ZmZlcmVkUmVxdWVzdENvdW50Kz0xfWVsc2UgQyhhdCxNZSwhMSxSZSxYZSxqZSxEZSk7cmV0dXJuIEllfSh0aGlzLFhlLERlLGF0LE1lLHZlKSksamV9LHplLnByb3RvdHlwZS5jb3JrPWZ1bmN0aW9uKCl7dGhpcy5fd3JpdGFibGVTdGF0ZS5jb3JrZWQrK30semUucHJvdG90eXBlLnVu''@;'; put 'put ''Y29yaz1mdW5jdGlvbigpe3ZhciBhdD10aGlzLl93cml0YWJsZVN0YXRlO2F0LmNvcmtlZCYmKGF0LmNvcmtlZC0tLCFhdC53cml0aW5nJiYhYXQuY29ya2VkJiYhYXQuYnVmZmVyUHJvY2Vzc2luZyYmYXQuYnVmZmVyZWRSZXF1ZXN0JiZBKHRoaXMsYXQpKX0semUucHJvdG90eXBlLnNldERl''@;'; put 'put ''ZmF1bHRFbmNvZGluZz1mdW5jdGlvbihNZSl7aWYoInN0cmluZyI9PXR5cGVvZiBNZSYmKE1lPU1lLnRvTG93ZXJDYXNlKCkpLCEoWyJoZXgiLCJ1dGY4IiwidXRmLTgiLCJhc2NpaSIsImJpbmFyeSIsImJhc2U2NCIsInVjczIiLCJ1Y3MtMiIsInV0ZjE2bGUiLCJ1dGYtMTZsZSIsInJhdyJd''@;'; put 'put ''LmluZGV4T2YoKE1lKyIiKS50b0xvd2VyQ2FzZSgpKT4tMSkpdGhyb3cgbmV3IGxlKE1lKTtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0RW5jb2Rpbmc9TWUsdGhpc30sT2JqZWN0LmRlZmluZVByb3BlcnR5KHplLnByb3RvdHlwZSwid3JpdGFibGVCdWZmZXIiLHtlbnVtZXJh''@;'; put 'put ''YmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl93cml0YWJsZVN0YXRlJiZ0aGlzLl93cml0YWJsZVN0YXRlLmdldEJ1ZmZlcigpfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh6ZS5wcm90b3R5cGUsIndyaXRhYmxlSGlnaFdhdGVyTWFyayIse2VudW1lcmFibGU6ITEsZ2V0OmZ1''@;'; put 'put ''bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuaGlnaFdhdGVyTWFya319KSx6ZS5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKGF0LE1lLHZlKXt2ZShuZXcgWSgiX3dyaXRlKCkiKSl9LHplLnByb3RvdHlwZS5fd3JpdGV2PW51bGwsemUucHJvdG90eXBlLmVuZD1mdW5jdGlv''@;'; put 'put ''bihhdCxNZSx2ZSl7dmFyIFhlPXRoaXMuX3dyaXRhYmxlU3RhdGU7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGF0Pyh2ZT1hdCxhdD1udWxsLE1lPW51bGwpOiJmdW5jdGlvbiI9PXR5cGVvZiBNZSYmKHZlPU1lLE1lPW51bGwpLG51bGwhPWF0JiZ0aGlzLndyaXRlKGF0LE1lKSxYZS5jb3Jr''@;'; put 'put ''ZWQmJihYZS5jb3JrZWQ9MSx0aGlzLnVuY29yaygpKSxYZS5lbmRpbmd8fGZ1bmN0aW9uIFVlKGF0LE1lLHZlKXtNZS5lbmRpbmc9ITAsd2UoYXQsTWUpLHZlJiYoTWUuZmluaXNoZWQ/cHJvY2Vzcy5uZXh0VGljayh2ZSk6YXQub25jZSgiZmluaXNoIix2ZSkpLE1lLmVuZGVkPSEwLGF0Lndy''@;'; put 'put ''aXRhYmxlPSExfSh0aGlzLFhlLHZlKSx0aGlzfSxPYmplY3QuZGVmaW5lUHJvcGVydHkoemUucHJvdG90eXBlLCJ3cml0YWJsZUxlbmd0aCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUubGVuZ3RofX0pLE9iamVjdC5kZWZpbmVQcm9w''@;'; put 'put ''ZXJ0eSh6ZS5wcm90b3R5cGUsImRlc3Ryb3llZCIse2VudW1lcmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlU3RhdGUmJnRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkfSxzZXQ6ZnVuY3Rpb24oTWUpe3RoaXMuX3dyaXRhYmxlU3RhdGUm''@;'; put 'put ''Jih0aGlzLl93cml0YWJsZVN0YXRlLmRlc3Ryb3llZD1NZSl9fSksemUucHJvdG90eXBlLmRlc3Ryb3k9Ti5kZXN0cm95LHplLnByb3RvdHlwZS5fdW5kZXN0cm95PU4udW5kZXN0cm95LHplLnByb3RvdHlwZS5fZGVzdHJveT1mdW5jdGlvbihhdCxNZSl7TWUoYXQpfX0sMTI2ODM6KHVlLHEs''@;'; put 'put ''Xyk9PnsidXNlIHN0cmljdCI7dmFyIEk7ZnVuY3Rpb24geShpZSxsZSxtZSl7cmV0dXJuIGxlPWZ1bmN0aW9uIGcoaWUpe3ZhciBsZT1mdW5jdGlvbiBCKGllLGxlKXtpZigib2JqZWN0IiE9dHlwZW9mIGllfHxudWxsPT09aWUpcmV0dXJuIGllO3ZhciBtZT1pZVtTeW1ib2wudG9QcmltaXRp''@;'; put 'put ''dmVdO2lmKHZvaWQgMCE9PW1lKXt2YXIgX2U9bWUuY2FsbChpZSxsZXx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIF9lKXJldHVybiBfZTt0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpfXJldHVybigic3Ry''@;'; put 'put ''aW5nIj09PWxlP1N0cmluZzpOdW1iZXIpKGllKX0oaWUsInN0cmluZyIpO3JldHVybiJzeW1ib2wiPT10eXBlb2YgbGU/bGU6U3RyaW5nKGxlKX0obGUpLGxlIGluIGllP09iamVjdC5kZWZpbmVQcm9wZXJ0eShpZSxsZSx7dmFsdWU6bWUsZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAs''@;'; put 'put ''d3JpdGFibGU6ITB9KTppZVtsZV09bWUsaWV9dmFyIHc9Xyg1Nzg1NCksUD1TeW1ib2woImxhc3RSZXNvbHZlIiksRj1TeW1ib2woImxhc3RSZWplY3QiKSxPPVN5bWJvbCgiZXJyb3IiKSx6PVN5bWJvbCgiZW5kZWQiKSxOPVN5bWJvbCgibGFzdFByb21pc2UiKSxMPVN5bWJvbCgiaGFuZGxl''@;'; put 'put ''UHJvbWlzZSIpLEs9U3ltYm9sKCJzdHJlYW0iKTtmdW5jdGlvbiBVKGllLGxlKXtyZXR1cm57dmFsdWU6aWUsZG9uZTpsZX19ZnVuY3Rpb24gVyhpZSl7dmFyIGxlPWllW1BdO2lmKG51bGwhPT1sZSl7dmFyIG1lPWllW0tdLnJlYWQoKTtudWxsIT09bWUmJihpZVtOXT1udWxsLGllW1BdPW51''@;'; put 'put ''bGwsaWVbRl09bnVsbCxsZShVKG1lLCExKSkpfX1mdW5jdGlvbiBZKGllKXtwcm9jZXNzLm5leHRUaWNrKFcsaWUpfXZhciBlZT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZnVuY3Rpb24oKXt9KSxKPU9iamVjdC5zZXRQcm90b3R5cGVPZigoeShJPXtnZXQgc3RyZWFtKCl7cmV0dXJuIHRoaXNb''@;'; put 'put ''S119LG5leHQ6ZnVuY3Rpb24oKXt2YXIgbGU9dGhpcyxtZT10aGlzW09dO2lmKG51bGwhPT1tZSlyZXR1cm4gUHJvbWlzZS5yZWplY3QobWUpO2lmKHRoaXNbel0pcmV0dXJuIFByb21pc2UucmVzb2x2ZShVKHZvaWQgMCwhMCkpO2lmKHRoaXNbS10uZGVzdHJveWVkKXJldHVybiBuZXcgUHJv''@;'; put 'put ''bWlzZShmdW5jdGlvbih6ZSxWKXtwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCl7bGVbT10/VihsZVtPXSk6emUoVSh2b2lkIDAsITApKX0pfSk7dmFyIFRlLF9lPXRoaXNbTl07aWYoX2UpVGU9bmV3IFByb21pc2UoZnVuY3Rpb24gWChpZSxsZSl7cmV0dXJuIGZ1bmN0aW9uKG1lLF9lKXtp''@;'; put 'put ''ZS50aGVuKGZ1bmN0aW9uKCl7bGVbel0/bWUoVSh2b2lkIDAsITApKTpsZVtMXShtZSxfZSl9LF9lKX19KF9lLHRoaXMpKTtlbHNle3ZhciBTZT10aGlzW0tdLnJlYWQoKTtpZihudWxsIT09U2UpcmV0dXJuIFByb21pc2UucmVzb2x2ZShVKFNlLCExKSk7VGU9bmV3IFByb21pc2UodGhpc1tM''@;'; put 'put ''XSl9cmV0dXJuIHRoaXNbTl09VGUsVGV9fSxTeW1ib2wuYXN5bmNJdGVyYXRvcixmdW5jdGlvbigpe3JldHVybiB0aGlzfSkseShJLCJyZXR1cm4iLGZ1bmN0aW9uKCl7dmFyIGxlPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG1lLF9lKXtsZVtLXS5kZXN0cm95KG51bGwsZnVu''@;'; put 'put ''Y3Rpb24oVGUpe1RlP19lKFRlKTptZShVKHZvaWQgMCwhMCkpfSl9KX0pLEkpLGVlKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKGxlKXt2YXIgbWUsX2U9T2JqZWN0LmNyZWF0ZShKLCh5KG1lPXt9LEsse3ZhbHVlOmxlLHdyaXRhYmxlOiEwfSkseShtZSxQLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEw''@;'; put 'put ''fSkseShtZSxGLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSkseShtZSxPLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSkseShtZSx6LHt2YWx1ZTpsZS5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkLHdyaXRhYmxlOiEwfSkseShtZSxMLHt2YWx1ZTpmdW5jdGlvbihTZSx6ZSl7dmFyIFY9X2Vb''@;'; put 'put ''S10ucmVhZCgpO1Y/KF9lW05dPW51bGwsX2VbUF09bnVsbCxfZVtGXT1udWxsLFNlKFUoViwhMSkpKTooX2VbUF09U2UsX2VbRl09emUpfSx3cml0YWJsZTohMH0pLG1lKSk7cmV0dXJuIF9lW05dPW51bGwsdyhsZSxmdW5jdGlvbihUZSl7aWYoVGUmJiJFUlJfU1RSRUFNX1BSRU1BVFVSRV9D''@;'; put 'put ''TE9TRSIhPT1UZS5jb2RlKXt2YXIgU2U9X2VbRl07cmV0dXJuIG51bGwhPT1TZSYmKF9lW05dPW51bGwsX2VbUF09bnVsbCxfZVtGXT1udWxsLFNlKFRlKSksdm9pZChfZVtPXT1UZSl9dmFyIHplPV9lW1BdO251bGwhPT16ZSYmKF9lW05dPW51bGwsX2VbUF09bnVsbCxfZVtGXT1udWxsLHpl''@;'; put 'put ''KFUodm9pZCAwLCEwKSkpLF9lW3pdPSEwfSksbGUub24oInJlYWRhYmxlIixZLmJpbmQobnVsbCxfZSkpLF9lfX0sNzUyMjU6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7ZnVuY3Rpb24gSShZLFgpe3ZhciBlZT1PYmplY3Qua2V5cyhZKTtpZihPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xz''@;'; put 'put ''KXt2YXIgSj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKFkpO1gmJihKPUouZmlsdGVyKGZ1bmN0aW9uKHJlKXtyZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihZLHJlKS5lbnVtZXJhYmxlfSkpLGVlLnB1c2guYXBwbHkoZWUsSil9cmV0dXJuIGVlfWZ1bmN0aW9u''@;'; put 'put ''IHkoWSl7Zm9yKHZhciBYPTE7WDxhcmd1bWVudHMubGVuZ3RoO1grKyl7dmFyIGVlPW51bGwhPWFyZ3VtZW50c1tYXT9hcmd1bWVudHNbWF06e307WCUyP0koT2JqZWN0KGVlKSwhMCkuZm9yRWFjaChmdW5jdGlvbihKKXtnKFksSixlZVtKXSl9KTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNj''@;'; put 'put ''cmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhZLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGVlKSk6SShPYmplY3QoZWUpKS5mb3JFYWNoKGZ1bmN0aW9uKEope09iamVjdC5kZWZpbmVQcm9wZXJ0eShZLEosT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihl''@;'; put 'put ''ZSxKKSl9KX1yZXR1cm4gWX1mdW5jdGlvbiBnKFksWCxlZSl7cmV0dXJuKFg9RihYKSlpbiBZP09iamVjdC5kZWZpbmVQcm9wZXJ0eShZLFgse3ZhbHVlOmVlLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6WVtYXT1lZSxZfWZ1bmN0aW9uIHcoWSxYKXtmb3Io''@;'; put 'put ''dmFyIGVlPTA7ZWU8WC5sZW5ndGg7ZWUrKyl7dmFyIEo9WFtlZV07Si5lbnVtZXJhYmxlPUouZW51bWVyYWJsZXx8ITEsSi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIEomJihKLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoWSxGKEoua2V5KSxKKX19ZnVuY3Rpb24gRihZ''@;'; put 'put ''KXt2YXIgWD1mdW5jdGlvbiBPKFksWCl7aWYoIm9iamVjdCIhPXR5cGVvZiBZfHxudWxsPT09WSlyZXR1cm4gWTt2YXIgZWU9WVtTeW1ib2wudG9QcmltaXRpdmVdO2lmKHZvaWQgMCE9PWVlKXt2YXIgSj1lZS5jYWxsKFksWHx8ImRlZmF1bHQiKTtpZigib2JqZWN0IiE9dHlwZW9mIEopcmV0''@;'; put 'put ''dXJuIEo7dGhyb3cgbmV3IFR5cGVFcnJvcigiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS4iKX1yZXR1cm4oInN0cmluZyI9PT1YP1N0cmluZzpOdW1iZXIpKFkpfShZLCJzdHJpbmciKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIFg/WDpTdHJpbmcoWCl9dmFy''@;'; put 'put ''IE49Xyg4MzgzOCkuQnVmZmVyLEs9Xyg2Mzc3OSkuaW5zcGVjdCxVPUsmJksuY3VzdG9tfHwiaW5zcGVjdCI7ZnVuY3Rpb24gVyhZLFgsZWUpe04ucHJvdG90eXBlLmNvcHkuY2FsbChZLFgsZWUpfXVlLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBZKCl7KGZ1bmN0aW9uIEIoWSxYKXtp''@;'; put 'put ''ZighKFkgaW5zdGFuY2VvZiBYKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0pKHRoaXMsWSksdGhpcy5oZWFkPW51bGwsdGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH1yZXR1cm4gZnVuY3Rpb24gUChZLFgsZWUpe1gmJncoWS5w''@;'; put 'put ''cm90b3R5cGUsWCksZWUmJncoWSxlZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFksInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSl9KFksW3trZXk6InB1c2giLHZhbHVlOmZ1bmN0aW9uKGVlKXt2YXIgSj17ZGF0YTplZSxuZXh0Om51bGx9O3RoaXMubGVuZ3RoPjA/dGhpcy50YWlsLm5leHQ9''@;'; put 'put ''Sjp0aGlzLmhlYWQ9Six0aGlzLnRhaWw9SiwrK3RoaXMubGVuZ3RofX0se2tleToidW5zaGlmdCIsdmFsdWU6ZnVuY3Rpb24oZWUpe3ZhciBKPXtkYXRhOmVlLG5leHQ6dGhpcy5oZWFkfTswPT09dGhpcy5sZW5ndGgmJih0aGlzLnRhaWw9SiksdGhpcy5oZWFkPUosKyt0aGlzLmxlbmd0aH19''@;'; put 'put ''LHtrZXk6InNoaWZ0Iix2YWx1ZTpmdW5jdGlvbigpe2lmKDAhPT10aGlzLmxlbmd0aCl7dmFyIGVlPXRoaXMuaGVhZC5kYXRhO3JldHVybiB0aGlzLmhlYWQ9MT09PXRoaXMubGVuZ3RoP3RoaXMudGFpbD1udWxsOnRoaXMuaGVhZC5uZXh0LC0tdGhpcy5sZW5ndGgsZWV9fX0se2tleToiY2xl''@;'; put 'put ''YXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9fSx7a2V5OiJqb2luIix2YWx1ZTpmdW5jdGlvbihlZSl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiIiO2Zvcih2YXIgSj10aGlzLmhlYWQscmU9IiIrSi5kYXRhO0o9Si5uZXh0Oyly''@;'; put 'put ''ZSs9ZWUrSi5kYXRhO3JldHVybiByZX19LHtrZXk6ImNvbmNhdCIsdmFsdWU6ZnVuY3Rpb24oZWUpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4gTi5hbGxvYygwKTtmb3IodmFyIEo9Ti5hbGxvY1Vuc2FmZShlZT4+PjApLHJlPXRoaXMuaGVhZCxpZT0wO3JlOylXKHJlLmRhdGEsSixpZSks''@;'; put 'put ''aWUrPXJlLmRhdGEubGVuZ3RoLHJlPXJlLm5leHQ7cmV0dXJuIEp9fSx7a2V5OiJjb25zdW1lIix2YWx1ZTpmdW5jdGlvbihlZSxKKXt2YXIgcmU7cmV0dXJuIGVlPHRoaXMuaGVhZC5kYXRhLmxlbmd0aD8ocmU9dGhpcy5oZWFkLmRhdGEuc2xpY2UoMCxlZSksdGhpcy5oZWFkLmRhdGE9dGhp''@;'; put 'put ''cy5oZWFkLmRhdGEuc2xpY2UoZWUpKTpyZT1lZT09PXRoaXMuaGVhZC5kYXRhLmxlbmd0aD90aGlzLnNoaWZ0KCk6Sj90aGlzLl9nZXRTdHJpbmcoZWUpOnRoaXMuX2dldEJ1ZmZlcihlZSkscmV9fSx7a2V5OiJmaXJzdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oZWFkLmRhdGF9''@;'; put 'put ''fSx7a2V5OiJfZ2V0U3RyaW5nIix2YWx1ZTpmdW5jdGlvbihlZSl7dmFyIEo9dGhpcy5oZWFkLHJlPTEsaWU9Si5kYXRhO2ZvcihlZS09aWUubGVuZ3RoO0o9Si5uZXh0Oyl7dmFyIGxlPUouZGF0YSxtZT1lZT5sZS5sZW5ndGg/bGUubGVuZ3RoOmVlO2lmKGllKz1tZT09PWxlLmxlbmd0aD9s''@;'; put 'put ''ZTpsZS5zbGljZSgwLGVlKSwwPT0oZWUtPW1lKSl7bWU9PT1sZS5sZW5ndGg/KCsrcmUsdGhpcy5oZWFkPUoubmV4dD9KLm5leHQ6dGhpcy50YWlsPW51bGwpOih0aGlzLmhlYWQ9SixKLmRhdGE9bGUuc2xpY2UobWUpKTticmVha30rK3JlfXJldHVybiB0aGlzLmxlbmd0aC09cmUsaWV9fSx7''@;'; put 'put ''a2V5OiJfZ2V0QnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlZSl7dmFyIEo9Ti5hbGxvY1Vuc2FmZShlZSkscmU9dGhpcy5oZWFkLGllPTE7Zm9yKHJlLmRhdGEuY29weShKKSxlZS09cmUuZGF0YS5sZW5ndGg7cmU9cmUubmV4dDspe3ZhciBsZT1yZS5kYXRhLG1lPWVlPmxlLmxlbmd0aD9sZS5s''@;'; put 'put ''ZW5ndGg6ZWU7aWYobGUuY29weShKLEoubGVuZ3RoLWVlLDAsbWUpLDA9PShlZS09bWUpKXttZT09PWxlLmxlbmd0aD8oKytpZSx0aGlzLmhlYWQ9cmUubmV4dD9yZS5uZXh0OnRoaXMudGFpbD1udWxsKToodGhpcy5oZWFkPXJlLHJlLmRhdGE9bGUuc2xpY2UobWUpKTticmVha30rK2llfXJl''@;'; put 'put ''dHVybiB0aGlzLmxlbmd0aC09aWUsSn19LHtrZXk6VSx2YWx1ZTpmdW5jdGlvbihlZSxKKXtyZXR1cm4gSyh0aGlzLHkoeSh7fSxKKSx7fSx7ZGVwdGg6MCxjdXN0b21JbnNwZWN0OiExfSkpfX1dKSxZfSgpfSw4ODE1Mjp1ZT0+eyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBfKHcsUCl7Zyh3LFAp''@;'; put 'put ''LEkodyl9ZnVuY3Rpb24gSSh3KXt3Ll93cml0YWJsZVN0YXRlJiYhdy5fd3JpdGFibGVTdGF0ZS5lbWl0Q2xvc2V8fHcuX3JlYWRhYmxlU3RhdGUmJiF3Ll9yZWFkYWJsZVN0YXRlLmVtaXRDbG9zZXx8dy5lbWl0KCJjbG9zZSIpfWZ1bmN0aW9uIGcodyxQKXt3LmVtaXQoImVycm9yIixQKX11''@;'; put 'put ''ZS5leHBvcnRzPXtkZXN0cm95OmZ1bmN0aW9uIHEodyxQKXt2YXIgRj10aGlzO3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlJiZ0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZHx8dGhpcy5fd3JpdGFibGVTdGF0ZSYmdGhpcy5fd3JpdGFibGVTdGF0ZS5kZXN0cm95ZWQ/KFA/UCh3KTp3''@;'; put 'put ''JiYodGhpcy5fd3JpdGFibGVTdGF0ZT90aGlzLl93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZHx8KHRoaXMuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLHByb2Nlc3MubmV4dFRpY2soZyx0aGlzLHcpKTpwcm9jZXNzLm5leHRUaWNrKGcsdGhpcyx3KSksdGhpcyk6KHRoaXMuX3Jl''@;'; put 'put ''YWRhYmxlU3RhdGUmJih0aGlzLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZD0hMCksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSEwKSx0aGlzLl9kZXN0cm95KHd8fG51bGwsZnVuY3Rpb24oTil7IVAmJk4/Ri5fd3JpdGFibGVTdGF0ZT9GLl93''@;'; put 'put ''cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD9wcm9jZXNzLm5leHRUaWNrKEksRik6KEYuX3dyaXRhYmxlU3RhdGUuZXJyb3JFbWl0dGVkPSEwLHByb2Nlc3MubmV4dFRpY2soXyxGLE4pKTpwcm9jZXNzLm5leHRUaWNrKF8sRixOKTpQPyhwcm9jZXNzLm5leHRUaWNrKEksRiksUChOKSk6cHJv''@;'; put 'put ''Y2Vzcy5uZXh0VGljayhJLEYpfSksdGhpcyl9LHVuZGVzdHJveTpmdW5jdGlvbiB5KCl7dGhpcy5fcmVhZGFibGVTdGF0ZSYmKHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3JlYWRhYmxlU3RhdGUucmVhZGluZz0hMSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZGVkPSEx''@;'; put 'put ''LHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZD0hMSksdGhpcy5fd3JpdGFibGVTdGF0ZSYmKHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVzdHJveWVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lbmRpbmc9ITEsdGhpcy5fd3JpdGFibGVT''@;'; put 'put ''dGF0ZS5maW5hbENhbGxlZD0hMSx0aGlzLl93cml0YWJsZVN0YXRlLnByZWZpbmlzaGVkPSExLHRoaXMuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQ9ITEsdGhpcy5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITEpfSxlcnJvck9yRGVzdHJveTpmdW5jdGlvbiBCKHcsUCl7dmFyIEY9dy5f''@;'; put 'put ''cmVhZGFibGVTdGF0ZSxPPXcuX3dyaXRhYmxlU3RhdGU7RiYmRi5hdXRvRGVzdHJveXx8TyYmTy5hdXRvRGVzdHJveT93LmRlc3Ryb3koUCk6dy5lbWl0KCJlcnJvciIsUCl9fX0sNTc4NTQ6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9XygzMDQ2NCkuRi5FUlJfU1RSRUFNX1BSRU1B''@;'; put 'put ''VFVSRV9DTE9TRTtmdW5jdGlvbiBnKCl7fXVlLmV4cG9ydHM9ZnVuY3Rpb24gdyhQLEYsTyl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEYpcmV0dXJuIHcoUCxudWxsLEYpO0Z8fChGPXt9KSxPPWZ1bmN0aW9uIHkoUCl7dmFyIEY9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoIUYpe0Y9ITA7Zm9y''@;'; put 'put ''KHZhciBPPWFyZ3VtZW50cy5sZW5ndGgsej1uZXcgQXJyYXkoTyksTj0wO048TztOKyspeltOXT1hcmd1bWVudHNbTl07UC5hcHBseSh0aGlzLHopfX19KE98fGcpO3ZhciB6PUYucmVhZGFibGV8fCExIT09Ri5yZWFkYWJsZSYmUC5yZWFkYWJsZSxOPUYud3JpdGFibGV8fCExIT09Ri53cml0''@;'; put 'put ''YWJsZSYmUC53cml0YWJsZSxMPWZ1bmN0aW9uKCl7UC53cml0YWJsZXx8VSgpfSxLPVAuX3dyaXRhYmxlU3RhdGUmJlAuX3dyaXRhYmxlU3RhdGUuZmluaXNoZWQsVT1mdW5jdGlvbigpe049ITEsSz0hMCx6fHxPLmNhbGwoUCl9LFc9UC5fcmVhZGFibGVTdGF0ZSYmUC5fcmVhZGFibGVTdGF0''@;'; put 'put ''ZS5lbmRFbWl0dGVkLFk9ZnVuY3Rpb24oKXt6PSExLFc9ITAsTnx8Ty5jYWxsKFApfSxYPWZ1bmN0aW9uKGllKXtPLmNhbGwoUCxpZSl9LGVlPWZ1bmN0aW9uKCl7dmFyIGllO3JldHVybiB6JiYhVz8oKCFQLl9yZWFkYWJsZVN0YXRlfHwhUC5fcmVhZGFibGVTdGF0ZS5lbmRlZCkmJihpZT1u''@;'; put 'put ''ZXcgSSksTy5jYWxsKFAsaWUpKTpOJiYhSz8oKCFQLl93cml0YWJsZVN0YXRlfHwhUC5fd3JpdGFibGVTdGF0ZS5lbmRlZCkmJihpZT1uZXcgSSksTy5jYWxsKFAsaWUpKTp2b2lkIDB9LEo9ZnVuY3Rpb24oKXtQLnJlcS5vbigiZmluaXNoIixVKX07cmV0dXJuIGZ1bmN0aW9uIEIoUCl7cmV0''@;'; put 'put ''dXJuIFAuc2V0SGVhZGVyJiYiZnVuY3Rpb24iPT10eXBlb2YgUC5hYm9ydH0oUCk/KFAub24oImNvbXBsZXRlIixVKSxQLm9uKCJhYm9ydCIsZWUpLFAucmVxP0ooKTpQLm9uKCJyZXF1ZXN0IixKKSk6TiYmIVAuX3dyaXRhYmxlU3RhdGUmJihQLm9uKCJlbmQiLEwpLFAub24oImNsb3NlIixM''@;'; put 'put ''KSksUC5vbigiZW5kIixZKSxQLm9uKCJmaW5pc2giLFUpLCExIT09Ri5lcnJvciYmUC5vbigiZXJyb3IiLFgpLFAub24oImNsb3NlIixlZSksZnVuY3Rpb24oKXtQLnJlbW92ZUxpc3RlbmVyKCJjb21wbGV0ZSIsVSksUC5yZW1vdmVMaXN0ZW5lcigiYWJvcnQiLGVlKSxQLnJlbW92ZUxpc3Rl''@;'; put 'put ''bmVyKCJyZXF1ZXN0IixKKSxQLnJlcSYmUC5yZXEucmVtb3ZlTGlzdGVuZXIoImZpbmlzaCIsVSksUC5yZW1vdmVMaXN0ZW5lcigiZW5kIixMKSxQLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsTCksUC5yZW1vdmVMaXN0ZW5lcigiZmluaXNoIixVKSxQLnJlbW92ZUxpc3RlbmVyKCJlbmQiLFkp''@;'; put 'put ''LFAucmVtb3ZlTGlzdGVuZXIoImVycm9yIixYKSxQLnJlbW92ZUxpc3RlbmVyKCJjbG9zZSIsZWUpfX19LDQ3NzY1OnVlPT57dWUuZXhwb3J0cz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiUmVhZGFibGUuZnJvbSBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBicm93c2VyIil9fSw2ODQ2''@;'; put 'put ''Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJLGc9XygzMDQ2NCkuRixCPWcuRVJSX01JU1NJTkdfQVJHUyx3PWcuRVJSX1NUUkVBTV9ERVNUUk9ZRUQ7ZnVuY3Rpb24gUChVKXtpZihVKXRocm93IFV9ZnVuY3Rpb24geihVKXtVKCl9ZnVuY3Rpb24gTihVLFcpe3JldHVybiBVLnBpcGUo''@;'; put 'put ''Vyl9dWUuZXhwb3J0cz1mdW5jdGlvbiBLKCl7Zm9yKHZhciBVPWFyZ3VtZW50cy5sZW5ndGgsVz1uZXcgQXJyYXkoVSksWT0wO1k8VTtZKyspV1tZXT1hcmd1bWVudHNbWV07dmFyIFg9ZnVuY3Rpb24gTChVKXtyZXR1cm4gVS5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBVW1UubGVuZ3Ro''@;'; put 'put ''LTFdP1UucG9wKCk6UH0oVyk7aWYoQXJyYXkuaXNBcnJheShXWzBdKSYmKFc9V1swXSksVy5sZW5ndGg8Mil0aHJvdyBuZXcgQigic3RyZWFtcyIpO3ZhciBlZSxKPVcubWFwKGZ1bmN0aW9uKHJlLGllKXt2YXIgbGU9aWU8Vy5sZW5ndGgtMTtyZXR1cm4gZnVuY3Rpb24gTyhVLFcsWSxYKXtY''@;'; put 'put ''PWZ1bmN0aW9uIHkoVSl7dmFyIFc9ITE7cmV0dXJuIGZ1bmN0aW9uKCl7V3x8KFc9ITAsVS5hcHBseSh2b2lkIDAsYXJndW1lbnRzKSl9fShYKTt2YXIgZWU9ITE7VS5vbigiY2xvc2UiLGZ1bmN0aW9uKCl7ZWU9ITB9KSx2b2lkIDA9PT1JJiYoST1fKDU3ODU0KSksSShVLHtyZWFkYWJsZTpX''@;'; put 'put ''LHdyaXRhYmxlOll9LGZ1bmN0aW9uKHJlKXtpZihyZSlyZXR1cm4gWChyZSk7ZWU9ITAsWCgpfSk7dmFyIEo9ITE7cmV0dXJuIGZ1bmN0aW9uKHJlKXtpZighZWUmJiFKKXtpZihKPSEwLGZ1bmN0aW9uIEYoVSl7cmV0dXJuIFUuc2V0SGVhZGVyJiYiZnVuY3Rpb24iPT10eXBlb2YgVS5hYm9y''@;'; put 'put ''dH0oVSkpcmV0dXJuIFUuYWJvcnQoKTtpZigiZnVuY3Rpb24iPT10eXBlb2YgVS5kZXN0cm95KXJldHVybiBVLmRlc3Ryb3koKTtYKHJlfHxuZXcgdygicGlwZSIpKX19fShyZSxsZSxpZT4wLGZ1bmN0aW9uKF9lKXtlZXx8KGVlPV9lKSxfZSYmSi5mb3JFYWNoKHopLCFsZSYmKEouZm9yRWFj''@;'; put 'put ''aCh6KSxYKGVlKSl9KX0pO3JldHVybiBXLnJlZHVjZShOKX19LDIyODI3Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMzA0NjQpLkYuRVJSX0lOVkFMSURfT1BUX1ZBTFVFO3VlLmV4cG9ydHM9e2dldEhpZ2hXYXRlck1hcms6ZnVuY3Rpb24gZyhCLHcsUCxGKXt2YXIgTz1mdW5j''@;'; put 'put ''dGlvbiB5KEIsdyxQKXtyZXR1cm4gbnVsbCE9Qi5oaWdoV2F0ZXJNYXJrP0IuaGlnaFdhdGVyTWFyazp3P0JbUF06bnVsbH0odyxGLFApO2lmKG51bGwhPU8pe2lmKCFpc0Zpbml0ZShPKXx8TWF0aC5mbG9vcihPKSE9PU98fE88MCl0aHJvdyBuZXcgSShGP1A6ImhpZ2hXYXRlck1hcmsiLE8p''@;'; put 'put ''O3JldHVybiBNYXRoLmZsb29yKE8pfXJldHVybiBCLm9iamVjdE1vZGU/MTY6MTYzODR9fX0sMTI2MDE6KHVlLHEsXyk9Pnt1ZS5leHBvcnRzPV8oNDQzNTYpLkV2ZW50RW1pdHRlcn0sNzg0NTQ6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg1NDI3MikuQnVmZmVyLHk9SS5pc0Vu''@;'; put 'put ''Y29kaW5nfHxmdW5jdGlvbihKKXtzd2l0Y2goKEo9IiIrSikmJkoudG9Mb3dlckNhc2UoKSl7Y2FzZSJoZXgiOmNhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6Y2FzZSJhc2NpaSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2Fz''@;'; put 'put ''ZSJ1dGYtMTZsZSI6Y2FzZSJyYXciOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fTtmdW5jdGlvbiB3KEope3ZhciByZTtzd2l0Y2godGhpcy5lbmNvZGluZz1mdW5jdGlvbiBCKEope3ZhciByZT1mdW5jdGlvbiBnKEope2lmKCFKKXJldHVybiJ1dGY4Ijtmb3IodmFyIHJlOzspc3dpdGNo''@;'; put 'put ''KEope2Nhc2UidXRmOCI6Y2FzZSJ1dGYtOCI6cmV0dXJuInV0ZjgiO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4idXRmMTZsZSI7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4ibGF0aW4xIjtjYXNlImJhc2U2NCI6Y2Fz''@;'; put 'put ''ZSJhc2NpaSI6Y2FzZSJoZXgiOnJldHVybiBKO2RlZmF1bHQ6aWYocmUpcmV0dXJuO0o9KCIiK0opLnRvTG93ZXJDYXNlKCkscmU9ITB9fShKKTtpZigic3RyaW5nIiE9dHlwZW9mIHJlJiYoSS5pc0VuY29kaW5nPT09eXx8IXkoSikpKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBlbmNvZGlu''@;'; put 'put ''ZzogIitKKTtyZXR1cm4gcmV8fEp9KEopLHRoaXMuZW5jb2Rpbmcpe2Nhc2UidXRmMTZsZSI6dGhpcy50ZXh0PUssdGhpcy5lbmQ9VSxyZT00O2JyZWFrO2Nhc2UidXRmOCI6dGhpcy5maWxsTGFzdD16LHJlPTQ7YnJlYWs7Y2FzZSJiYXNlNjQiOnRoaXMudGV4dD1XLHRoaXMuZW5kPVkscmU9''@;'; put 'put ''MzticmVhaztkZWZhdWx0OnJldHVybiB0aGlzLndyaXRlPVgsdm9pZCh0aGlzLmVuZD1lZSl9dGhpcy5sYXN0TmVlZD0wLHRoaXMubGFzdFRvdGFsPTAsdGhpcy5sYXN0Q2hhcj1JLmFsbG9jVW5zYWZlKHJlKX1mdW5jdGlvbiBQKEope3JldHVybiBKPD0xMjc/MDpKPj41PT02PzI6Sj4+ND09''@;'; put 'put ''MTQ/MzpKPj4zPT0zMD80Oko+PjY9PTI/LTE6LTJ9ZnVuY3Rpb24geihKKXt2YXIgcmU9dGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCxpZT1mdW5jdGlvbiBPKEoscmUsaWUpe2lmKDEyOCE9KDE5MiZyZVswXSkpcmV0dXJuIEoubGFzdE5lZWQ9MCwiXHVmZmZkIjtpZihKLmxhc3ROZWVk''@;'; put 'put ''PjEmJnJlLmxlbmd0aD4xKXtpZigxMjghPSgxOTImcmVbMV0pKXJldHVybiBKLmxhc3ROZWVkPTEsIlx1ZmZmZCI7aWYoSi5sYXN0TmVlZD4yJiZyZS5sZW5ndGg+MiYmMTI4IT0oMTkyJnJlWzJdKSlyZXR1cm4gSi5sYXN0TmVlZD0yLCJcdWZmZmQifX0odGhpcyxKKTtyZXR1cm4gdm9pZCAw''@;'; put 'put ''IT09aWU/aWU6dGhpcy5sYXN0TmVlZDw9Si5sZW5ndGg/KEouY29weSh0aGlzLmxhc3RDaGFyLHJlLDAsdGhpcy5sYXN0TmVlZCksdGhpcy5sYXN0Q2hhci50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsdGhpcy5sYXN0VG90YWwpKTooSi5jb3B5KHRoaXMubGFzdENoYXIscmUsMCxKLmxlbmd0''@;'; put 'put ''aCksdm9pZCh0aGlzLmxhc3ROZWVkLT1KLmxlbmd0aCkpfWZ1bmN0aW9uIEsoSixyZSl7aWYoKEoubGVuZ3RoLXJlKSUyPT0wKXt2YXIgaWU9Si50b1N0cmluZygidXRmMTZsZSIscmUpO2lmKGllKXt2YXIgbGU9aWUuY2hhckNvZGVBdChpZS5sZW5ndGgtMSk7aWYobGU+PTU1Mjk2JiZsZTw9''@;'; put 'put ''NTYzMTkpcmV0dXJuIHRoaXMubGFzdE5lZWQ9Mix0aGlzLmxhc3RUb3RhbD00LHRoaXMubGFzdENoYXJbMF09SltKLmxlbmd0aC0yXSx0aGlzLmxhc3RDaGFyWzFdPUpbSi5sZW5ndGgtMV0saWUuc2xpY2UoMCwtMSl9cmV0dXJuIGllfXJldHVybiB0aGlzLmxhc3ROZWVkPTEsdGhpcy5sYXN0''@;'; put 'put ''VG90YWw9Mix0aGlzLmxhc3RDaGFyWzBdPUpbSi5sZW5ndGgtMV0sSi50b1N0cmluZygidXRmMTZsZSIscmUsSi5sZW5ndGgtMSl9ZnVuY3Rpb24gVShKKXt2YXIgcmU9SiYmSi5sZW5ndGg/dGhpcy53cml0ZShKKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9yZSt0aGlzLmxhc3RDaGFyLnRv''@;'; put 'put ''U3RyaW5nKCJ1dGYxNmxlIiwwLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQpOnJlfWZ1bmN0aW9uIFcoSixyZSl7dmFyIGllPShKLmxlbmd0aC1yZSklMztyZXR1cm4gMD09PWllP0oudG9TdHJpbmcoImJhc2U2NCIscmUpOih0aGlzLmxhc3ROZWVkPTMtaWUsdGhpcy5sYXN0VG90YWw9''@;'; put 'put ''MywxPT09aWU/dGhpcy5sYXN0Q2hhclswXT1KW0oubGVuZ3RoLTFdOih0aGlzLmxhc3RDaGFyWzBdPUpbSi5sZW5ndGgtMl0sdGhpcy5sYXN0Q2hhclsxXT1KW0oubGVuZ3RoLTFdKSxKLnRvU3RyaW5nKCJiYXNlNjQiLHJlLEoubGVuZ3RoLWllKSl9ZnVuY3Rpb24gWShKKXt2YXIgcmU9SiYm''@;'; put 'put ''Si5sZW5ndGg/dGhpcy53cml0ZShKKToiIjtyZXR1cm4gdGhpcy5sYXN0TmVlZD9yZSt0aGlzLmxhc3RDaGFyLnRvU3RyaW5nKCJiYXNlNjQiLDAsMy10aGlzLmxhc3ROZWVkKTpyZX1mdW5jdGlvbiBYKEope3JldHVybiBKLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcpfWZ1bmN0aW9uIGVlKEop''@;'; put 'put ''e3JldHVybiBKJiZKLmxlbmd0aD90aGlzLndyaXRlKEopOiIifXEuST13LHcucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKEope2lmKDA9PT1KLmxlbmd0aClyZXR1cm4iIjt2YXIgcmUsaWU7aWYodGhpcy5sYXN0TmVlZCl7aWYodm9pZCAwPT09KHJlPXRoaXMuZmlsbExhc3QoSikpKXJldHVy''@;'; put 'put ''biIiO2llPXRoaXMubGFzdE5lZWQsdGhpcy5sYXN0TmVlZD0wfWVsc2UgaWU9MDtyZXR1cm4gaWU8Si5sZW5ndGg/cmU/cmUrdGhpcy50ZXh0KEosaWUpOnRoaXMudGV4dChKLGllKTpyZXx8IiJ9LHcucHJvdG90eXBlLmVuZD1mdW5jdGlvbiBMKEope3ZhciByZT1KJiZKLmxlbmd0aD90aGlz''@;'; put 'put ''LndyaXRlKEopOiIiO3JldHVybiB0aGlzLmxhc3ROZWVkP3JlKyJcdWZmZmQiOnJlfSx3LnByb3RvdHlwZS50ZXh0PWZ1bmN0aW9uIE4oSixyZSl7dmFyIGllPWZ1bmN0aW9uIEYoSixyZSxpZSl7dmFyIGxlPXJlLmxlbmd0aC0xO2lmKGxlPGllKXJldHVybiAwO3ZhciBtZT1QKHJlW2xlXSk7''@;'; put 'put ''cmV0dXJuIG1lPj0wPyhtZT4wJiYoSi5sYXN0TmVlZD1tZS0xKSxtZSk6LS1sZTxpZXx8LTI9PT1tZT8wOihtZT1QKHJlW2xlXSkpPj0wPyhtZT4wJiYoSi5sYXN0TmVlZD1tZS0yKSxtZSk6LS1sZTxpZXx8LTI9PT1tZT8wOihtZT1QKHJlW2xlXSkpPj0wPyhtZT4wJiYoMj09PW1lP21lPTA6''@;'; put 'put ''Si5sYXN0TmVlZD1tZS0zKSxtZSk6MH0odGhpcyxKLHJlKTtpZighdGhpcy5sYXN0TmVlZClyZXR1cm4gSi50b1N0cmluZygidXRmOCIscmUpO3RoaXMubGFzdFRvdGFsPWllO3ZhciBsZT1KLmxlbmd0aC0oaWUtdGhpcy5sYXN0TmVlZCk7cmV0dXJuIEouY29weSh0aGlzLmxhc3RDaGFyLDAs''@;'; put 'put ''bGUpLEoudG9TdHJpbmcoInV0ZjgiLHJlLGxlKX0sdy5wcm90b3R5cGUuZmlsbExhc3Q9ZnVuY3Rpb24oSil7aWYodGhpcy5sYXN0TmVlZDw9Si5sZW5ndGgpcmV0dXJuIEouY29weSh0aGlzLmxhc3RDaGFyLHRoaXMubGFzdFRvdGFsLXRoaXMubGFzdE5lZWQsMCx0aGlzLmxhc3ROZWVkKSx0''@;'; put 'put ''aGlzLmxhc3RDaGFyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsMCx0aGlzLmxhc3RUb3RhbCk7Si5jb3B5KHRoaXMubGFzdENoYXIsdGhpcy5sYXN0VG90YWwtdGhpcy5sYXN0TmVlZCwwLEoubGVuZ3RoKSx0aGlzLmxhc3ROZWVkLT1KLmxlbmd0aH19LDU0MjcyOih1ZSxxLF8pPT57dmFyIEk9''@;'; put 'put ''Xyg4MzgzOCkseT1JLkJ1ZmZlcjtmdW5jdGlvbiBnKHcsUCl7Zm9yKHZhciBGIGluIHcpUFtGXT13W0ZdfWZ1bmN0aW9uIEIodyxQLEYpe3JldHVybiB5KHcsUCxGKX15LmZyb20mJnkuYWxsb2MmJnkuYWxsb2NVbnNhZmUmJnkuYWxsb2NVbnNhZmVTbG93P3VlLmV4cG9ydHM9STooZyhJLHEp''@;'; put 'put ''LHEuQnVmZmVyPUIpLGcoeSxCKSxCLmZyb209ZnVuY3Rpb24odyxQLEYpe2lmKCJudW1iZXIiPT10eXBlb2Ygdyl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlciIpO3JldHVybiB5KHcsUCxGKX0sQi5hbGxvYz1mdW5jdGlvbih3LFAsRil7aWYoIm51''@;'; put 'put ''bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTt2YXIgTz15KHcpO3JldHVybiB2b2lkIDAhPT1QPyJzdHJpbmciPT10eXBlb2YgRj9PLmZpbGwoUCxGKTpPLmZpbGwoUCk6Ty5maWxsKDApLE99LEIuYWxsb2NVbnNhZmU9ZnVu''@;'; put 'put ''Y3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4geSh3KX0sQi5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24odyl7aWYoIm51bWJlciIhPXR5cGVvZiB3KXRocm93IG5ldyBUeXBlRXJyb3Io''@;'; put 'put ''IkFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXIiKTtyZXR1cm4gSS5TbG93QnVmZmVyKHcpfX0sNzg3NTU6KHVlLHEsXyk9Pnt2YXIgST1fKDY0MzE4KTt1ZS5leHBvcnRzPXtUZXh0RW5jb2RlcjpJLlRleHRFbmNvZGVyLFRleHREZWNvZGVyOkkuVGV4dERlY29kZXJ9fSw2Nzk1MTpmdW5jdGlv''@;'; put 'put ''bih1ZSl7IWZ1bmN0aW9uKHEpeyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzJiYodWUuZXhwb3J0cz1xKSxxWyJlbmNvZGluZy1pbmRleGVzIl09e2JpZzU6W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; 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 ''bGwsbnVsbCxudWxsLDE3MzkyLDE5NTA2LDE3OTIzLDE3ODMwLDE3Nzg0LDE2MDM1OSwxOTgzMSwxNzg0MywxNjI5OTMsMTk2ODIsMTYzMDEzLDE1MjUzLDE4MjMwLDE4MjQ0LDE5NTI3LDE5NTIwLDE0ODE1OSwxNDQ5MTksMTYwNTk0LDE1OTM3MSwxNTk5NTQsMTk1NDMsMTcyODgxLDE4MjU1''@;'; put 'put ''LDE3ODgyLDE5NTg5LDE2MjkyNCwxOTcxOSwxOTEwOCwxODA4MSwxNTg0OTksMjkyMjEsMTU0MTk2LDEzNzgyNywxNDY5NTAsMTQ3Mjk3LDI2MTg5LDIyMjY3LG51bGwsMzIxNDksMjI4MTMsMTY2ODQxLDE1ODYwLDM4NzA4LDE2Mjc5OSwyMzUxNSwxMzg1OTAsMjMyMDQsMTM4NjEsMTcxNjk2''@;'; put 'put ''LDIzMjQ5LDIzNDc5LDIzODA0LDI2NDc4LDM0MTk1LDE3MDMwOSwyOTc5MywyOTg1MywxNDQ1MywxMzg1NzksMTQ1MDU0LDE1NTY4MSwxNjEwOCwxNTM4MjIsMTUwOTMsMzE0ODQsNDA4NTUsMTQ3ODA5LDE2NjE1NywxNDM4NTAsMTMzNzcwLDE0Mzk2NiwxNzE2MiwzMzkyNCw0MDg1NCwzNzkz''@;'; put 'put ''NSwxODczNiwzNDMyMywyMjY3OCwzODczMCwzNzQwMCwzMTE4NCwzMTI4MiwyNjIwOCwyNzE3NywzNDk3MywyOTc3MiwzMTY4NSwyNjQ5OCwzMTI3NiwyMTA3MSwzNjkzNCwxMzU0MiwyOTYzNiwxNTUwNjUsMjk4OTQsNDA5MDMsMjI0NTEsMTg3MzUsMjE1ODAsMTY2ODksMTQ1MDM4LDIyNTUy''@;'; put 'put ''LDMxMzQ2LDE2MjY2MSwzNTcyNywxODA5NCwxNTkzNjgsMTY3NjksMTU1MDMzLDMxNjYyLDE0MDQ3Niw0MDkwNCwxNDA0ODEsMTQwNDg5LDE0MDQ5Miw0MDkwNSwzNDA1MiwxNDQ4MjcsMTY1NjQsNDA5MDYsMTc2MzMsMTc1NjE1LDI1MjgxLDI4NzgyLDQwOTA3LG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTI3MzYsMTI3MzcsMTI3MzgsMTI3MzksMTI3''@;'; put 'put ''NDAsMTMxMzQwLDEyNzQxLDEzMTI4MSwxMzEyNzcsMTI3NDIsMTI3NDMsMTMxMjc1LDEzOTI0MCwxMjc0NCwxMzEyNzQsMTI3NDUsMTI3NDYsMTI3NDcsMTI3NDgsMTMxMzQyLDEyNzQ5LDEyNzUwLDI1NiwxOTMsNDYxLDE5MiwyNzQsMjAxLDI4MiwyMDAsMzMyLDIxMSw0NjUsMjEwLG51bGws''@;'; put 'put ''Nzg3MCxudWxsLDc4NzIsMjAyLDI1NywyMjUsNDYyLDIyNCw1OTMsMjc1LDIzMywyODMsMjMyLDI5OSwyMzcsNDY0LDIzNiwzMzMsMjQzLDQ2NiwyNDIsMzYzLDI1MCw0NjgsMjQ5LDQ3MCw0NzIsNDc0LDQ3NiwyNTIsbnVsbCw3ODcxLG51bGwsNzg3MywyMzQsNjA5LDkxNzgsOTE3OSxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxNzI5NjksMTM1NDkzLG51bGwsMjU4NjYsbnVsbCxudWxsLDIwMDI5LDI4MzgxLDQwMjcwLDM3MzQzLG51bGwsbnVsbCwxNjE1ODksMjU3''@;'; put 'put ''NDUsMjAyNTAsMjAyNjQsMjAzOTIsMjA4MjIsMjA4NTIsMjA4OTIsMjA5NjQsMjExNTMsMjExNjAsMjEzMDcsMjEzMjYsMjE0NTcsMjE0NjQsMjIyNDIsMjI3NjgsMjI3ODgsMjI3OTEsMjI4MzQsMjI4MzYsMjMzOTgsMjM0NTQsMjM0NTUsMjM3MDYsMjQxOTgsMjQ2MzUsMjU5OTMsMjY2MjIs''@;'; put 'put ''MjY2MjgsMjY3MjUsMjc5ODIsMjg4NjAsMzAwMDUsMzI0MjAsMzI0MjgsMzI0NDIsMzI0NTUsMzI0NjMsMzI0NzksMzI1MTgsMzI1NjcsMzM0MDIsMzM0ODcsMzM2NDcsMzUyNzAsMzU3NzQsMzU4MTAsMzY3MTAsMzY3MTEsMzY3MTgsMjk3MTMsMzE5OTYsMzIyMDUsMjY5NTAsMzE0MzMsMjEw''@;'; put 'put ''MzEsbnVsbCxudWxsLG51bGwsbnVsbCwzNzI2MCwzMDkwNCwzNzIxNCwzMjk1NixudWxsLDM2MTA3LDMzMDE0LDEzMzYwNyxudWxsLG51bGwsMzI5MjcsNDA2NDcsMTk2NjEsNDAzOTMsNDA0NjAsMTk1MTgsMTcxNTEwLDE1OTc1OCw0MDQ1OCwxNzIzMzksMTM3NjEsbnVsbCwyODMxNCwzMzM0''@;'; put 'put ''MiwyOTk3NyxudWxsLDE4NzA1LDM5NTMyLDM5NTY3LDQwODU3LDMxMTExLDE2NDk3MiwxMzg2OTgsMTMyNTYwLDE0MjA1NCwyMDAwNCwyMDA5NywyMDA5NiwyMDEwMywyMDE1OSwyMDIwMywyMDI3OSwxMzM4OCwyMDQxMywxNTk0NCwyMDQ4MywyMDYxNiwxMzQzNywxMzQ1OSwxMzQ3NywyMDg3''@;'; put 'put ''MCwyMjc4OSwyMDk1NSwyMDk4OCwyMDk5NywyMDEwNSwyMTExMywyMTEzNiwyMTI4NywxMzc2NywyMTQxNywxMzY0OSwyMTQyNCwxMzY1MSwyMTQ0MiwyMTUzOSwxMzY3NywxMzY4MiwxMzk1MywyMTY1MSwyMTY2NywyMTY4NCwyMTY4OSwyMTcxMiwyMTc0MywyMTc4NCwyMTc5NSwyMTgwMCwx''@;'; put 'put ''MzcyMCwyMTgyMywxMzczMywxMzc1OSwyMTk3NSwxMzc2NSwxNjMyMDQsMjE3OTcsbnVsbCwxMzQyMTAsMTM0NDIxLDE1MTg1MSwyMTkwNCwxNDI1MzQsMTQ4MjgsMTMxOTA1LDM2NDIyLDE1MDk2OCwxNjkxODksMTY0NjcsMTY0MDMwLDMwNTg2LDE0MjM5MiwxNDkwMCwxODM4OSwxNjQxODks''@;'; put 'put ''MTU4MTk0LDE1MTAxOCwyNTgyMSwxMzQ1MjQsMTM1MDkyLDEzNDM1NywxMzU0MTIsMjU3NDEsMzY0NzgsMTM0ODA2LDEzNDE1NSwxMzUwMTIsMTQyNTA1LDE2NDQzOCwxNDg2OTEsbnVsbCwxMzQ0NzAsMTcwNTczLDE2NDA3MywxODQyMCwxNTEyMDcsMTQyNTMwLDM5NjAyLDE0OTUxLDE2OTQ2''@;'; put 'put ''MCwxNjM2NSwxMzU3NCwxNTIyNjMsMTY5OTQwLDE2MTk5MiwxNDI2NjAsNDAzMDIsMzg5MzMsbnVsbCwxNzM2OSwxNTU4MTMsMjU3ODAsMjE3MzEsMTQyNjY4LDE0MjI4MiwxMzUyODcsMTQ4NDMsMTM1Mjc5LDE1NzQwMiwxNTc0NjIsMTYyMjA4LDI1ODM0LDE1MTYzNCwxMzQyMTEsMzY0NTYs''@;'; put 'put ''MTM5NjgxLDE2NjczMiwxMzI5MTMsbnVsbCwxODQ0MywxMzE0OTcsMTYzNzgsMjI2NDMsMTQyNzMzLG51bGwsMTQ4OTM2LDEzMjM0OCwxNTU3OTksMTM0OTg4LDEzNDU1MCwyMTg4MSwxNjU3MSwxNzMzOCxudWxsLDE5MTI0LDE0MTkyNiwxMzUzMjUsMzMxOTQsMzkxNTcsMTM0NTU2LDI1NDY1''@;'; put 'put ''LDE0ODQ2LDE0MTE3MywzNjI4OCwyMjE3NywyNTcyNCwxNTkzOSxudWxsLDE3MzU2OSwxMzQ2NjUsMTQyMDMxLDE0MjUzNyxudWxsLDEzNTM2OCwxNDU4NTgsMTQ3MzgsMTQ4NTQsMTY0NTA3LDEzNjg4LDE1NTIwOSwxMzk0NjMsMjIwOTgsMTM0OTYxLDE0MjUxNCwxNjk3NjAsMTM1MDAsMjc3''@;'; put 'put ''MDksMTUxMDk5LG51bGwsbnVsbCwxNjExNDAsMTQyOTg3LDEzOTc4NCwxNzM2NTksMTY3MTE3LDEzNDc3OCwxMzQxOTYsMTU3NzI0LDMyNjU5LDEzNTM3NSwxNDEzMTUsMTQxNjI1LDEzODE5LDE1MjAzNSwxMzQ3OTYsMTM1MDUzLDEzNDgyNiwxNjI3NSwxMzQ5NjAsMTM0NDcxLDEzNTUwMywx''@;'; put 'put ''MzQ3MzIsbnVsbCwxMzQ4MjcsMTM0MDU3LDEzNDQ3MiwxMzUzNjAsMTM1NDg1LDE2Mzc3LDE0MDk1MCwyNTY1MCwxMzUwODUsMTQ0MzcyLDE2MTMzNywxNDIyODYsMTM0NTI2LDEzNDUyNywxNDI0MTcsMTQyNDIxLDE0ODcyLDEzNDgwOCwxMzUzNjcsMTM0OTU4LDE3MzYxOCwxNTg1NDQsMTY3''@;'; put 'put ''MTIyLDE2NzMyMSwxNjcxMTQsMzgzMTQsMjE3MDgsMzM0NzYsMjE5NDUsbnVsbCwxNzE3MTUsMzk5NzQsMzk2MDYsMTYxNjMwLDE0MjgzMCwyODk5MiwzMzEzMywzMzAwNCwyMzU4MCwxNTcwNDIsMzMwNzYsMTQyMzEsMjEzNDMsMTY0MDI5LDM3MzAyLDEzNDkwNiwxMzQ2NzEsMTM0Nzc1LDEz''@;'; put 'put ''NDkwNywxMzc4OSwxNTEwMTksMTM4MzMsMTM0MzU4LDIyMTkxLDE0MTIzNywxMzUzNjksMTM0NjcyLDEzNDc3NiwxMzUyODgsMTM1NDk2LDE2NDM1OSwxMzYyNzcsMTM0Nzc3LDE1MTEyMCwxNDI3NTYsMjMxMjQsMTM1MTk3LDEzNTE5OCwxMzU0MTMsMTM1NDE0LDIyNDI4LDEzNDY3MywxNjE0''@;'; put 'put ''MjgsMTY0NTU3LDEzNTA5MywxMzQ3NzksMTUxOTM0LDE0MDgzLDEzNTA5NCwxMzU1NTIsMTUyMjgwLDE3MjczMywxNDk5NzgsMTM3Mjc0LDE0NzgzMSwxNjQ0NzYsMjI2ODEsMjEwOTYsMTM4NTAsMTUzNDA1LDMxNjY2LDIzNDAwLDE4NDMyLDE5MjQ0LDQwNzQzLDE4OTE5LDM5OTY3LDM5ODIx''@;'; put 'put ''LDE1NDQ4NCwxNDM2NzcsMjIwMTEsMTM4MTAsMjIxNTMsMjAwMDgsMjI3ODYsMTM4MTc3LDE5NDY4MCwzODczNywxMzEyMDYsMjAwNTksMjAxNTUsMTM2MzAsMjM1ODcsMjQ0MDEsMjQ1MTYsMTQ1ODYsMjUxNjQsMjU5MDksMjc1MTQsMjc3MDEsMjc3MDYsMjg3ODAsMjkyMjcsMjAwMTIsMjkz''@;'; put 'put ''NTcsMTQ5NzM3LDMyNTk0LDMxMDM1LDMxOTkzLDMyNTk1LDE1NjI2NiwxMzUwNSxudWxsLDE1NjQ5MSwzMjc3MCwzMjg5NiwxNTcyMDIsMTU4MDMzLDIxMzQxLDM0OTE2LDM1MjY1LDE2MTk3MCwzNTc0NCwzNjEyNSwzODAyMSwzODI2NCwzODI3MSwzODM3NiwxNjc0MzksMzg4ODYsMzkwMjks''@;'; put 'put ''MzkxMTgsMzkxMzQsMzkyNjcsMTdlNCw0MDA2MCw0MDQ3OSw0MDY0NCwyNzUwMyw2Mzc1MSwyMDAyMywxMzEyMDcsMzg0MjksMjUxNDMsMzgwNTAsbnVsbCwyMDUzOSwyODE1OCwxNzExMjMsNDA4NzAsMTU4MTcsMzQ5NTksMTQ3NzkwLDI4NzkxLDIzNzk3LDE5MjMyLDE1MjAxMywxMzY1Nywx''@;'; put 'put ''NTQ5MjgsMjQ4NjYsMTY2NDUwLDM2Nzc1LDM3MzY2LDI5MDczLDI2MzkzLDI5NjI2LDE0NDAwMSwxNzIyOTUsMTU0OTksMTM3NjAwLDE5MjE2LDMwOTQ4LDI5Njk4LDIwOTEwLDE2NTY0NywxNjM5MywyNzIzNSwxNzI3MzAsMTY5MzEsMzQzMTksMTMzNzQzLDMxMjc0LDE3MDMxMSwxNjY2MzQs''@;'; put 'put ''Mzg3NDEsMjg3NDksMjEyODQsMTM5MzkwLDM3ODc2LDMwNDI1LDE2NjM3MSw0MDg3MSwzMDY4NSwyMDEzMSwyMDQ2NCwyMDY2OCwyMDAxNSwyMDI0Nyw0MDg3MiwyMTU1NiwzMjEzOSwyMjY3NCwyMjczNiwxMzg2NzgsMjQyMTAsMjQyMTcsMjQ1MTQsMTQxMDc0LDI1OTk1LDE0NDM3NywyNjkw''@;'; put 'put ''NSwyNzIwMywxNDY1MzEsMjc5MDMsbnVsbCwyOTE4NCwxNDg3NDEsMjk1ODAsMTYwOTEsMTUwMDM1LDIzMzE3LDI5ODgxLDM1NzE1LDE1NDc4OCwxNTMyMzcsMzEzNzksMzE3MjQsMzE5MzksMzIzNjQsMzM1MjgsMzQxOTksNDA4NzMsMzQ5NjAsNDA4NzQsMzY1MzcsNDA4NzUsMzY4MTUsMzQx''@;'; put 'put ''NDMsMzkzOTIsMzc0MDksNDA4NzYsMTY3MzUzLDEzNjI1NSwxNjQ5NywxNzA1OCwyMzA2NixudWxsLG51bGwsbnVsbCwzOTAxNiwyNjQ3NSwxNzAxNCwyMjMzMyxudWxsLDM0MjYyLDE0OTg4MywzMzQ3MSwxNjAwMTMsMTk1ODUsMTU5MDkyLDIzOTMxLDE1ODQ4NSwxNTk2NzgsNDA4NzcsNDA4''@;'; put 'put ''NzgsMjM0NDYsNDA4NzksMjYzNDMsMzIzNDcsMjgyNDcsMzExNzgsMTU3NTIsMTc2MDMsMTQzOTU4LDE0MTIwNiwxNzMwNiwxNzcxOCxudWxsLDIzNzY1LDE0NjIwMiwzNTU3NywyMzY3MiwxNTYzNCwxNDQ3MjEsMjM5MjgsNDA4ODIsMjkwMTUsMTc3NTIsMTQ3NjkyLDEzODc4NywxOTU3NSwx''@;'; put 'put ''NDcxMiwxMzM4NiwxMzE0OTIsMTU4Nzg1LDM1NTMyLDIwNDA0LDEzMTY0MSwyMjk3NSwzMzEzMiwzODk5OCwxNzAyMzQsMjQzNzksMTM0MDQ3LG51bGwsMTM5NzEzLDE2NjI1MywxNjY0MiwxODEwNywxNjgwNTcsMTYxMzUsNDA4ODMsMTcyNDY5LDE2NjMyLDE0Mjk0LDE4MTY3LDE1ODc5MCwx''@;'; put 'put ''Njc2NCwxNjU1NTQsMTYwNzY3LDE3NzczLDE0NTQ4LDE1MjczMCwxNzc2MSwxNzY5MSwxOTg0OSwxOTU3OSwxOTgzMCwxNzg5OCwxNjMyOCwxNTAyODcsMTM5MjEsMTc2MzAsMTc1OTcsMTY4NzcsMjM4NzAsMjM4ODAsMjM4OTQsMTU4NjgsMTQzNTEsMjM5NzIsMjM5OTMsMTQzNjgsMTQzOTIs''@;'; put 'put ''MjQxMzAsMjQyNTMsMjQzNTcsMjQ0NTEsMTQ2MDAsMTQ2MTIsMTQ2NTUsMTQ2NjksMjQ3OTEsMjQ4OTMsMjM3ODEsMTQ3MjksMjUwMTUsMjUwMTcsMjUwMzksMTQ3NzYsMjUxMzIsMjUyMzIsMjUzMTcsMjUzNjgsMTQ4NDAsMjIxOTMsMTQ4NTEsMjU1NzAsMjU1OTUsMjU2MDcsMjU2OTAsMTQ5''@;'; put 'put ''MjMsMjU3OTIsMjM4MjksMjIwNDksNDA4NjMsMTQ5OTksMjU5OTAsMTUwMzcsMjYxMTEsMjYxOTUsMTUwOTAsMjYyNTgsMTUxMzgsMjYzOTAsMTUxNzAsMjY1MzIsMjY2MjQsMTUxOTIsMjY2OTgsMjY3NTYsMTUyMTgsMTUyMTcsMTUyMjcsMjY4ODksMjY5NDcsMjkyNzYsMjY5ODAsMjcwMzks''@;'; put 'put ''MjcwMTMsMTUyOTIsMjcwOTQsMTUzMjUsMjcyMzcsMjcyNTIsMjcyNDksMjcyNjYsMTUzNDAsMjcyODksMTUzNDYsMjczMDcsMjczMTcsMjczNDgsMjczODIsMjc1MjEsMjc1ODUsMjc2MjYsMjc3NjUsMjc4MTgsMTU1NjMsMjc5MDYsMjc5MTAsMjc5NDIsMjgwMzMsMTU1OTksMjgwNjgsMjgw''@;'; put 'put ''ODEsMjgxODEsMjgxODQsMjgyMDEsMjgyOTQsMTY2MzM2LDI4MzQ3LDI4Mzg2LDI4Mzc4LDQwODMxLDI4MzkyLDI4MzkzLDI4NDUyLDI4NDY4LDE1Njg2LDE0NzI2NSwyODU0NSwyODYwNiwxNTcyMiwxNTczMywyOTExMSwyMzcwNSwxNTc1NCwyODcxNiwxNTc2MSwyODc1MiwyODc1NiwyODc4''@;'; put 'put ''MywyODc5OSwyODgwOSwxMzE4NzcsMTczNDUsMTM4MDksMTM0ODcyLDE0NzE1OSwyMjQ2MiwxNTk0NDMsMjg5OTAsMTUzNTY4LDEzOTAyLDI3MDQyLDE2Njg4OSwyMzQxMiwzMTMwNSwxNTM4MjUsMTY5MTc3LDMxMzMzLDMxMzU3LDE1NDAyOCwzMTQxOSwzMTQwOCwzMTQyNiwzMTQyNywyOTEz''@;'; put 'put ''NywxNTY4MTMsMTY4NDIsMzE0NTAsMzE0NTMsMzE0NjYsMTY4NzksMjE2ODIsMTU0NjI1LDMxNDk5LDMxNTczLDMxNTI5LDE1MjMzNCwxNTQ4NzgsMzE2NTAsMzE1OTksMzM2OTIsMTU0NTQ4LDE1ODg0NywzMTY5NiwzMzgyNSwzMTYzNCwzMTY3MiwxNTQ5MTIsMTU3ODksMTU0NzI1LDMzOTM4''@;'; put 'put ''LDMxNzM4LDMxNzUwLDMxNzk3LDE1NDgxNywzMTgxMiwzMTg3NSwxNDk2MzQsMzE5MTAsMjYyMzcsMTQ4ODU2LDMxOTQ1LDMxOTQzLDMxOTc0LDMxODYwLDMxOTg3LDMxOTg5LDMxOTUwLDMyMzU5LDE3NjkzLDE1OTMwMCwzMjA5MywxNTk0NDYsMjk4MzcsMzIxMzcsMzIxNzEsMjg5ODEsMzIx''@;'; put 'put ''NzksMzIyMTAsMTQ3NTQzLDE1NTY4OSwzMjIyOCwxNTYzNSwzMjI0NSwxMzcyMDksMzIyMjksMTY0NzE3LDMyMjg1LDE1NTkzNywxNTU5OTQsMzIzNjYsMzI0MDIsMTcxOTUsMzc5OTYsMzIyOTUsMzI1NzYsMzI1NzcsMzI1ODMsMzEwMzAsMTU2MzY4LDM5MzkzLDMyNjYzLDE1NjQ5NywzMjY3''@;'; put 'put ''NSwxMzY4MDEsMTMxMTc2LDE3NzU2LDE0NTI1NCwxNzY2NywxNjQ2NjYsMzI3NjIsMTU2ODA5LDMyNzczLDMyNzc2LDMyNzk3LDMyODA4LDMyODE1LDE3MjE2NywxNTg5MTUsMzI4MjcsMzI4MjgsMzI4NjUsMTQxMDc2LDE4ODI1LDE1NzIyMiwxNDY5MTUsMTU3NDE2LDI2NDA1LDMyOTM1LDE2''@;'; put 'put ''NjQ3MiwzMzAzMSwzMzA1MCwyMjcwNCwxNDEwNDYsMjc3NzUsMTU2ODI0LDE1MTQ4MCwyNTgzMSwxMzYzMzAsMzMzMDQsMTM3MzEwLDI3MjE5LDE1MDExNywxNTAxNjUsMTc1MzAsMzMzMjEsMTMzOTAxLDE1ODI5MCwxNDY4MTQsMjA0NzMsMTM2NDQ1LDM0MDE4LDMzNjM0LDE1ODQ3NCwxNDk5''@;'; put 'put ''MjcsMTQ0Njg4LDEzNzA3NSwxNDY5MzYsMzM0NTAsMjY5MDcsMTk0OTY0LDE2ODU5LDM0MTIzLDMzNDg4LDMzNTYyLDEzNDY3OCwxMzcxNDAsMTQwMTcsMTQzNzQxLDE0NDczMCwzMzQwMywzMzUwNiwzMzU2MCwxNDcwODMsMTU5MTM5LDE1ODQ2OSwxNTg2MTUsMTQ0ODQ2LDE1ODA3LDMzNTY1''@;'; put 'put ''LDIxOTk2LDMzNjY5LDE3Njc1LDE1OTE0MSwzMzcwOCwzMzcyOSwzMzc0NywxMzQzOCwxNTk0NDQsMjcyMjMsMzQxMzgsMTM0NjIsMTU5Mjk4LDE0MzA4NywzMzg4MCwxNTQ1OTYsMzM5MDUsMTU4MjcsMTc2MzYsMjczMDMsMzM4NjYsMTQ2NjEzLDMxMDY0LDMzOTYwLDE1ODYxNCwxNTkzNTEs''@;'; put 'put ''MTU5Mjk5LDM0MDE0LDMzODA3LDMzNjgxLDE3NTY4LDMzOTM5LDM0MDIwLDE1NDc2OSwxNjk2MCwxNTQ4MTYsMTc3MzEsMzQxMDAsMjMyODIsMTU5Mzg1LDE3NzAzLDM0MTYzLDE3Njg2LDI2NTU5LDM0MzI2LDE2NTQxMywxNjU0MzUsMzQyNDEsMTU5ODgwLDM0MzA2LDEzNjU3OCwxNTk5NDks''@;'; put 'put ''MTk0OTk0LDE3NzcwLDM0MzQ0LDEzODk2LDEzNzM3OCwyMTQ5NSwxNjA2NjYsMzQ0MzAsMzQ2NzMsMTcyMjgwLDM0Nzk4LDE0MjM3NSwzNDczNywzNDc3OCwzNDgzMSwyMjExMywzNDQxMiwyNjcxMCwxNzkzNSwzNDg4NSwzNDg4NiwxNjEyNDgsMTQ2ODczLDE2MTI1MiwzNDkxMCwzNDk3Miwx''@;'; put 'put ''ODAxMSwzNDk5NiwzNDk5NywyNTUzNywzNTAxMywzMDU4MywxNjE1NTEsMzUyMDcsMzUyMTAsMzUyMzgsMzUyNDEsMzUyMzksMzUyNjAsMTY2NDM3LDM1MzAzLDE2MjA4NCwxNjI0OTMsMzU0ODQsMzA2MTEsMzczNzQsMzU0NzIsMTYyMzkzLDMxNDY1LDE2MjYxOCwxNDczNDMsMTgxOTUsMTYy''@;'; put 'put ''NjE2LDI5MDUyLDM1NTk2LDM1NjE1LDE1MjYyNCwxNTI5MzMsMzU2NDcsMzU2NjAsMzU2NjEsMzU0OTcsMTUwMTM4LDM1NzI4LDM1NzM5LDM1NTAzLDEzNjkyNywxNzk0MSwzNDg5NSwzNTk5NSwxNjMxNTYsMTYzMjE1LDE5NTAyOCwxNDExNywxNjMxNTUsMzYwNTQsMTYzMjI0LDE2MzI2MSwz''@;'; put 'put ''NjExNCwzNjA5OSwxMzc0ODgsMzYwNTksMjg3NjQsMzYxMTMsMTUwNzI5LDE2MDgwLDM2MjE1LDM2MjY1LDE2Mzg0MiwxMzUxODgsMTQ5ODk4LDE1MjI4LDE2NDI4NCwxNjAwMTIsMzE0NjMsMzY1MjUsMzY1MzQsMzY1NDcsMzc1ODgsMzY2MzMsMzY2NTMsMTY0NzA5LDE2NDg4MiwzNjc3Mywz''@;'; put 'put ''NzYzNSwxNzI3MDMsMTMzNzEyLDM2Nzg3LDE4NzMwLDE2NjM2NiwxNjUxODEsMTQ2ODc1LDI0MzEyLDE0Mzk3MCwzNjg1NywxNzIwNTIsMTY1NTY0LDE2NTEyMSwxNDAwNjksMTQ3MjAsMTU5NDQ3LDM2OTE5LDE2NTE4MCwxNjI0OTQsMzY5NjEsMTY1MjI4LDE2NTM4NywzNzAzMiwxNjU2NTEs''@;'; put 'put ''MzcwNjAsMTY1NjA2LDM3MDM4LDM3MTE3LDM3MjIzLDE1MDg4LDM3Mjg5LDM3MzE2LDMxOTE2LDE2NjE5NSwxMzg4ODksMzczOTAsMjc4MDcsMzc0NDEsMzc0NzQsMTUzMDE3LDM3NTYxLDE2NjU5OCwxNDY1ODcsMTY2NjY4LDE1MzA1MSwxMzQ0NDksMzc2NzYsMzc3MzksMTY2NjI1LDE2Njg5''@;'; put 'put ''MSwyODgxNSwyMzIzNSwxNjY2MjYsMTY2NjI5LDE4Nzg5LDM3NDQ0LDE2Njg5MiwxNjY5NjksMTY2OTExLDM3NzQ3LDM3OTc5LDM2NTQwLDM4Mjc3LDM4MzEwLDM3OTI2LDM4MzA0LDI4NjYyLDE3MDgxLDE0MDkyMiwxNjU1OTIsMTM1ODA0LDE0Njk5MCwxODkxMSwyNzY3NiwzODUyMywzODU1''@;'; put 'put ''MCwxNjc0OCwzODU2MywxNTk0NDUsMjUwNTAsMzg1ODIsMzA5NjUsMTY2NjI0LDM4NTg5LDIxNDUyLDE4ODQ5LDE1ODkwNCwxMzE3MDAsMTU2Njg4LDE2ODExMSwxNjgxNjUsMTUwMjI1LDEzNzQ5MywxNDQxMzgsMzg3MDUsMzQzNzAsMzg3MTAsMTg5NTksMTc3MjUsMTc3OTcsMTUwMjQ5LDI4''@;'; put 'put ''Nzg5LDIzMzYxLDM4NjgzLDM4NzQ4LDE2ODQwNSwzODc0MywyMzM3MCwxNjg0MjcsMzg3NTEsMzc5MjUsMjA2ODgsMTQzNTQzLDE0MzU0OCwzODc5MywzODgxNSwzODgzMywzODg0NiwzODg0OCwzODg2NiwzODg4MCwxNTI2ODQsMzg4OTQsMjk3MjQsMTY5MDExLDM4OTExLDM4OTAxLDE2ODk4''@;'; put 'put ''OSwxNjIxNzAsMTkxNTMsMzg5NjQsMzg5NjMsMzg5ODcsMzkwMTQsMTUxMTgsMTYwMTE3LDE1Njk3LDEzMjY1NiwxNDc4MDQsMTUzMzUwLDM5MTE0LDM5MDk1LDM5MTEyLDM5MTExLDE5MTk5LDE1OTAxNSwxMzY5MTUsMjE5MzYsMzkxMzcsMzkxNDIsMzkxNDgsMzc3NTIsMzkyMjUsMTUwMDU3''@;'; put 'put ''LDE5MzE0LDE3MDA3MSwxNzAyNDUsMzk0MTMsMzk0MzYsMzk0ODMsMzk0NDAsMzk1MTIsMTUzMzgxLDE0MDIwLDE2ODExMywxNzA5NjUsMzk2NDgsMzk2NTAsMTcwNzU3LDM5NjY4LDE5NDcwLDM5NzAwLDM5NzI1LDE2NTM3NiwyMDUzMiwzOTczMiwxNTgxMjAsMTQ1MzEsMTQzNDg1LDM5NzYw''@;'; put 'put ''LDM5NzQ0LDE3MTMyNiwyMzEwOSwxMzczMTUsMzk4MjIsMTQ4MDQzLDM5OTM4LDM5OTM1LDM5OTQ4LDE3MTYyNCw0MDQwNCwxNzE5NTksMTcyNDM0LDE3MjQ1OSwxNzIyNTcsMTcyMzIzLDE3MjUxMSw0MDMxOCw0MDMyMywxNzIzNDAsNDA0NjIsMjY3NjAsNDAzODgsMTM5NjExLDE3MjQzNSwx''@;'; put 'put ''NzI1NzYsMTM3NTMxLDE3MjU5NSw0MDI0OSwxNzIyMTcsMTcyNzI0LDQwNTkyLDQwNTk3LDQwNjA2LDQwNjEwLDE5NzY0LDQwNjE4LDQwNjIzLDE0ODMyNCw0MDY0MSwxNTIwMCwxNDgyMSwxNTY0NSwyMDI3NCwxNDI3MCwxNjY5NTUsNDA3MDYsNDA3MTIsMTkzNTAsMzc5MjQsMTU5MTM4LDQw''@;'; put 'put ''NzI3LDQwNzI2LDQwNzYxLDIyMTc1LDIyMTU0LDQwNzczLDM5MzUyLDE2ODA3NSwzODg5OCwzMzkxOSw0MDgwMiw0MDgwOSwzMTQ1Miw0MDg0NiwyOTIwNiwxOTM5MCwxNDk4NzcsMTQ5OTQ3LDI5MDQ3LDE1MDAwOCwxNDgyOTYsMTUwMDk3LDI5NTk4LDE2Njg3NCwxMzc0NjYsMzExMzUsMTY2''@;'; put 'put ''MjcwLDE2NzQ3OCwzNzczNywzNzg3NSwxNjY0NjgsMzc2MTIsMzc3NjEsMzc4MzUsMTY2MjUyLDE0ODY2NSwyOTIwNywxNjEwNywzMDU3OCwzMTI5OSwyODg4MCwxNDg1OTUsMTQ4NDcyLDI5MDU0LDEzNzE5OSwyODgzNSwxMzc0MDYsMTQ0NzkzLDE2MDcxLDEzNzM0OSwxNTI2MjMsMTM3MjA4''@;'; put 'put ''LDE0MTE0LDEzNjk1NSwxMzcyNzMsMTQwNDksMTM3MDc2LDEzNzQyNSwxNTU0NjcsMTQxMTUsMTM2ODk2LDIyMzYzLDE1MDA1MywxMzYxOTAsMTM1ODQ4LDEzNjEzNCwxMzYzNzQsMzQwNTEsMTQ1MDYyLDM0MDUxLDMzODc3LDE0OTkwOCwxNjAxMDEsMTQ2OTkzLDE1MjkyNCwxNDcxOTUsMTU5''@;'; put 'put ''ODI2LDE3NjUyLDE0NTEzNCwxNzAzOTcsMTU5NTI2LDI2NjE3LDE0MTMxLDE1MzgxLDE1ODQ3LDIyNjM2LDEzNzUwNiwyNjY0MCwxNjQ3MSwxNDUyMTUsMTQ3NjgxLDE0NzU5NSwxNDc3MjcsMTU4NzUzLDIxNzA3LDIyMTc0LDE1NzM2MSwyMjE2MiwxMzUxMzUsMTM0MDU2LDEzNDY2OSwzNzgz''@;'; put 'put ''MCwxNjY2NzUsMzc3ODgsMjAyMTYsMjA3NzksMTQzNjEsMTQ4NTM0LDIwMTU2LDEzMjE5NywxMzE5NjcsMjAyOTksMjAzNjIsMTUzMTY5LDIzMTQ0LDEzMTQ5OSwxMzIwNDMsMTQ3NDUsMTMxODUwLDEzMjExNiwxMzM2NSwyMDI2NSwxMzE3NzYsMTY3NjAzLDEzMTcwMSwzNTU0NiwxMzE1OTYs''@;'; put 'put ''MjAxMjAsMjA2ODUsMjA3NDksMjAzODYsMjAyMjcsMTUwMDMwLDE0NzA4MiwyMDI5MCwyMDUyNiwyMDU4OCwyMDYwOSwyMDQyOCwyMDQ1MywyMDU2OCwyMDczMiwyMDgyNSwyMDgyNywyMDgyOSwyMDgzMCwyODI3OCwxNDQ3ODksMTQ3MDAxLDE0NzEzNSwyODAxOCwxMzczNDgsMTQ3MDgxLDIw''@;'; put 'put ''OTA0LDIwOTMxLDEzMjU3NiwxNzYyOSwxMzIyNTksMTMyMjQyLDEzMjI0MSwzNjIxOCwxNjY1NTYsMTMyODc4LDIxMDgxLDIxMTU2LDEzMzIzNSwyMTIxNywzNzc0MiwxODA0MiwyOTA2OCwxNDgzNjQsMTM0MTc2LDE0OTkzMiwxMzUzOTYsMjcwODksMTM0Njg1LDI5ODE3LDE2MDk0LDI5ODQ5''@;'; put 'put ''LDI5NzE2LDI5NzgyLDI5NTkyLDE5MzQyLDE1MDIwNCwxNDc1OTcsMjE0NTYsMTM3MDAsMjkxOTksMTQ3NjU3LDIxOTQwLDEzMTkwOSwyMTcwOSwxMzQwODYsMjIzMDEsMzc0NjksMzg2NDQsMzc3MzQsMjI0OTMsMjI0MTMsMjIzOTksMTM4ODYsMjI3MzEsMjMxOTMsMTY2NDcwLDEzNjk1NCwx''@;'; put 'put ''MzcwNzEsMTM2OTc2LDIzMDg0LDIyOTY4LDM3NTE5LDIzMTY2LDIzMjQ3LDIzMDU4LDE1MzkyNiwxMzc3MTUsMTM3MzEzLDE0ODExNywxNDA2OSwyNzkwOSwyOTc2MywyMzA3MywxNTUyNjcsMjMxNjksMTY2ODcxLDEzMjExNSwzNzg1NiwyOTgzNiwxMzU5MzksMjg5MzMsMTg4MDIsMzc4OTYs''@;'; put 'put ''MTY2Mzk1LDM3ODIxLDE0MjQwLDIzNTgyLDIzNzEwLDI0MTU4LDI0MTM2LDEzNzYyMiwxMzc1OTYsMTQ2MTU4LDI0MjY5LDIzMzc1LDEzNzQ3NSwxMzc0NzYsMTQwODEsMTM3Mzc2LDE0MDQ1LDEzNjk1OCwxNDAzNSwzMzA2NiwxNjY0NzEsMTM4NjgyLDE0NDQ5OCwxNjYzMTIsMjQzMzIsMjQz''@;'; put 'put ''MzQsMTM3NTExLDEzNzEzMSwyMzE0NywxMzcwMTksMjMzNjQsMzQzMjQsMTYxMjc3LDM0OTEyLDI0NzAyLDE0MTQwOCwxNDA4NDMsMjQ1MzksMTYwNTYsMTQwNzE5LDE0MDczNCwxNjgwNzIsMTU5NjAzLDI1MDI0LDEzMTEzNCwxMzExNDIsMTQwODI3LDI0OTg1LDI0OTg0LDI0NjkzLDE0MjQ5''@;'; put 'put ''MSwxNDI1OTksMTQ5MjA0LDE2ODI2OSwyNTcxMywxNDkwOTMsMTQyMTg2LDE0ODg5LDE0MjExNCwxNDQ0NjQsMTcwMjE4LDE0Mjk2OCwyNTM5OSwxNzMxNDcsMjU3ODIsMjUzOTMsMjU1NTMsMTQ5OTg3LDE0MjY5NSwyNTI1MiwxNDI0OTcsMjU2NTksMjU5NjMsMjY5OTQsMTUzNDgsMTQzNTAy''@;'; put 'put ''LDE0NDA0NSwxNDk4OTcsMTQ0MDQzLDIxNzczLDE0NDA5NiwxMzc0MzMsMTY5MDIzLDI2MzE4LDE0NDAwOSwxNDM3OTUsMTUwNzIsMTY3ODQsMTUyOTY0LDE2NjY5MCwxNTI5NzUsMTM2OTU2LDE1MjkyMywxNTI2MTMsMzA5NTgsMTQzNjE5LDEzNzI1OCwxNDM5MjQsMTM0MTIsMTQzODg3LDE0''@;'; put 'put ''Mzc0NiwxNDgxNjksMjYyNTQsMTU5MDEyLDI2MjE5LDE5MzQ3LDI2MTYwLDE2MTkwNCwxMzg3MzEsMjYyMTEsMTQ0MDgyLDE0NDA5NywyNjE0MiwxNTM3MTQsMTQ1NDUsMTQ1NDY2LDE0NTM0MCwxNTI1NywxNDUzMTQsMTQ0MzgyLDI5OTA0LDE1MjU0LDI2NTExLDE0OTAzNCwyNjgwNiwyNjY1''@;'; put 'put ''NCwxNTMwMCwyNzMyNiwxNDQzNSwxNDUzNjUsMTQ4NjE1LDI3MTg3LDI3MjE4LDI3MzM3LDI3Mzk3LDEzNzQ5MCwyNTg3MywyNjc3NiwyNzIxMiwxNTMxOSwyNzI1OCwyNzQ3OSwxNDczOTIsMTQ2NTg2LDM3NzkyLDM3NjE4LDE2Njg5MCwxNjY2MDMsMzc1MTMsMTYzODcwLDE2NjM2NCwzNzk5''@;'; put 'put ''MSwyODA2OSwyODQyNywxNDk5OTYsMjgwMDcsMTQ3MzI3LDE1NzU5LDI4MTY0LDE0NzUxNiwyMzEwMSwyODE3MCwyMjU5OSwyNzk0MCwzMDc4NiwyODk4NywxNDgyNTAsMTQ4MDg2LDI4OTEzLDI5MjY0LDI5MzE5LDI5MzMyLDE0OTM5MSwxNDkyODUsMjA4NTcsMTUwMTgwLDEzMjU4NywyOTgx''@;'; put 'put ''OCwxNDcxOTIsMTQ0OTkxLDE1MDA5MCwxNDk3ODMsMTU1NjE3LDE2MTM0LDE2MDQ5LDE1MDIzOSwxNjY5NDcsMTQ3MjUzLDI0NzQzLDE2MTE1LDI5OTAwLDI5NzU2LDM3NzY3LDI5NzUxLDE3NTY3LDE1OTIxMCwxNzc0NSwzMDA4MywxNjIyNywxNTA3NDUsMTUwNzkwLDE2MjE2LDMwMDM3LDMw''@;'; put 'put ''MzIzLDE3MzUxMCwxNTEyOSwyOTgwMCwxNjY2MDQsMTQ5OTMxLDE0OTkwMiwxNTA5OSwxNTgyMSwxNTAwOTQsMTYxMjcsMTQ5OTU3LDE0OTc0NywzNzM3MCwyMjMyMiwzNzY5OCwxNjY2MjcsMTM3MzE2LDIwNzAzLDE1MjA5NywxNTIwMzksMzA1ODQsMTQzOTIyLDMwNDc4LDMwNDc5LDMwNTg3''@;'; put 'put ''LDE0OTE0MywxNDUyODEsMTQ5NDIsMTQ5NzQ0LDI5NzUyLDI5ODUxLDE2MDYzLDE1MDIwMiwxNTAyMTUsMTY1ODQsMTUwMTY2LDE1NjA3OCwzNzYzOSwxNTI5NjEsMzA3NTAsMzA4NjEsMzA4NTYsMzA5MzAsMjk2NDgsMzEwNjUsMTYxNjAxLDE1MzMxNSwxNjY1NCwzMTEzMSwzMzk0MiwzMTE0''@;'; put 'put ''MSwyNzE4MSwxNDcxOTQsMzEyOTAsMzEyMjAsMTY3NTAsMTM2OTM0LDE2NjkwLDM3NDI5LDMxMjE3LDEzNDQ3NiwxNDk5MDAsMTMxNzM3LDE0Njg3NCwxMzcwNzAsMTM3MTksMjE4NjcsMTM2ODAsMTM5OTQsMTMxNTQwLDEzNDE1NywzMTQ1OCwyMzEyOSwxNDEwNDUsMTU0Mjg3LDE1NDI2OCwy''@;'; put 'put ''MzA1MywxMzE2NzUsMzA5NjAsMjMwODIsMTU0NTY2LDMxNDg2LDE2ODg5LDMxODM3LDMxODUzLDE2OTEzLDE1NDU0NywxNTUzMjQsMTU1MzAyLDMxOTQ5LDE1MDAwOSwxMzcxMzYsMzE4ODYsMzE4NjgsMzE5MTgsMjczMTQsMzIyMjAsMzIyNjMsMzIyMTEsMzI1OTAsMTU2MjU3LDE1NTk5Niwx''@;'; put 'put ''NjI2MzIsMzIxNTEsMTU1MjY2LDE3MDAyLDE1ODU4MSwxMzMzOTgsMjY1ODIsMTMxMTUwLDE0NDg0NywyMjQ2OCwxNTY2OTAsMTU2NjY0LDE0OTg1OCwzMjczMywzMTUyNywxMzMxNjQsMTU0MzQ1LDE1NDk0NywzMTUwMCwxNTUxNTAsMzkzOTgsMzQzNzMsMzk1MjMsMjcxNjQsMTQ0NDQ3LDE0''@;'; put 'put ''ODE4LDE1MDAwNywxNTcxMDEsMzk0NTUsMTU3MDg4LDMzOTIwLDE2MDAzOSwxNTg5MjksMTc2NDIsMzMwNzksMTc0MTAsMzI5NjYsMzMwMzMsMzMwOTAsMTU3NjIwLDM5MTA3LDE1ODI3NCwzMzM3OCwzMzM4MSwxNTgyODksMzM4NzUsMTU5MTQzLDM0MzIwLDE2MDI4MywyMzE3NCwxNjc2Nywx''@;'; put 'put ''MzcyODAsMjMzMzksMTM3Mzc3LDIzMjY4LDEzNzQzMiwzNDQ2NCwxOTUwMDQsMTQ2ODMxLDM0ODYxLDE2MDgwMiwyMzA0MiwzNDkyNiwyMDI5MywzNDk1MSwzNTAwNywzNTA0NiwzNTE3MywzNTE0OSwxNTMyMTksMzUxNTYsMTYxNjY5LDE2MTY2OCwxNjY5MDEsMTY2ODczLDE2NjgxMiwxNjYz''@;'; put 'put ''OTMsMTYwNDUsMzM5NTUsMTgxNjUsMTgxMjcsMTQzMjIsMzUzODksMzUzNTYsMTY5MDMyLDI0Mzk3LDM3NDE5LDE0ODEwMCwyNjA2OCwyODk2OSwyODg2OCwxMzcyODUsNDAzMDEsMzU5OTksMzYwNzMsMTYzMjkyLDIyOTM4LDMwNjU5LDIzMDI0LDE3MjYyLDE0MDM2LDM2Mzk0LDM2NTE5LDE1''@;'; put 'put ''MDUzNywzNjY1NiwzNjY4MiwxNzE0MCwyNzczNiwyODYwMywxNDAwNjUsMTg1ODcsMjg1MzcsMjgyOTksMTM3MTc4LDM5OTEzLDE0MDA1LDE0OTgwNywzNzA1MSwzNzAxNSwyMTg3MywxODY5NCwzNzMwNywzNzg5MiwxNjY0NzUsMTY0ODIsMTY2NjUyLDM3OTI3LDE2Njk0MSwxNjY5NzEsMzQw''@;'; put 'put ''MjEsMzUzNzEsMzgyOTcsMzgzMTEsMzgyOTUsMzgyOTQsMTY3MjIwLDI5NzY1LDE2MDY2LDE0OTc1OSwxNTAwODIsMTQ4NDU4LDE2MTAzLDE0MzkwOSwzODU0MywxNjc2NTUsMTY3NTI2LDE2NzUyNSwxNjA3NiwxNDk5OTcsMTUwMTM2LDE0NzQzOCwyOTcxNCwyOTgwMywxNjEyNCwzODcyMSwx''@;'; put 'put ''NjgxMTIsMjY2OTUsMTg5NzMsMTY4MDgzLDE1MzU2NywzODc0OSwzNzczNiwxNjYyODEsMTY2OTUwLDE2NjcwMywxNTY2MDYsMzc1NjIsMjMzMTMsMzU2ODksMTg3NDgsMjk2ODksMTQ3OTk1LDM4ODExLDM4NzY5LDM5MjI0LDEzNDk1MCwyNDAwMSwxNjY4NTMsMTUwMTk0LDM4OTQzLDE2OTE3''@;'; put 'put ''OCwzNzYyMiwxNjk0MzEsMzczNDksMTc2MDAsMTY2NzM2LDE1MDExOSwxNjY3NTYsMzkxMzIsMTY2NDY5LDE2MTI4LDM3NDE4LDE4NzI1LDMzODEyLDM5MjI3LDM5MjQ1LDE2MjU2NiwxNTg2OSwzOTMyMywxOTMxMSwzOTMzOCwzOTUxNiwxNjY3NTcsMTUzODAwLDI3Mjc5LDM5NDU3LDIzMjk0''@;'; put 'put ''LDM5NDcxLDE3MDIyNSwxOTM0NCwxNzAzMTIsMzkzNTYsMTkzODksMTkzNTEsMzc3NTcsMjI2NDIsMTM1OTM4LDIyNTYyLDE0OTk0NCwxMzY0MjQsMzA3ODgsMTQxMDg3LDE0Njg3MiwyNjgyMSwxNTc0MSwzNzk3NiwxNDYzMSwyNDkxMiwxNDExODUsMTQxNjc1LDI0ODM5LDQwMDE1LDQwMDE5''@;'; put 'put ''LDQwMDU5LDM5OTg5LDM5OTUyLDM5ODA3LDM5ODg3LDE3MTU2NSwzOTgzOSwxNzI1MzMsMTcyMjg2LDQwMjI1LDE5NjMwLDE0NzcxNiw0MDQ3MiwxOTYzMiw0MDIwNCwxNzI0NjgsMTcyMjY5LDE3MjI3NSwxNzAyODcsNDAzNTcsMzM5ODEsMTU5MjUwLDE1OTcxMSwxNTg1OTQsMzQzMDAsMTc3''@;'; put 'put ''MTUsMTU5MTQwLDE1OTM2NCwxNTkyMTYsMzM4MjQsMzQyODYsMTU5MjMyLDE0NTM2NywxNTU3NDgsMzEyMDIsMTQ0Nzk2LDE0NDk2MCwxODczMywxNDk5ODIsMTU3MTQsMzc4NTEsMzc1NjYsMzc3MDQsMTMxNzc1LDMwOTA1LDM3NDk1LDM3OTY1LDIwNDUyLDEzMzc2LDM2OTY0LDE1MjkyNSwz''@;'; put 'put ''MDc4MSwzMDgwNCwzMDkwMiwzMDc5NSwxMzcwNDcsMTQzODE3LDE0OTgyNSwxMzk3OCwyMDMzOCwyODYzNCwyODYzMywyODcwMiwyODcwMiwyMTUyNCwxNDc4OTMsMjI0NTksMjI3NzEsMjI0MTAsNDAyMTQsMjI0ODcsMjg5ODAsMTM0ODcsMTQ3ODg0LDI5MTYzLDE1ODc4NCwxNTE0NDcsMjMz''@;'; put 'put ''MzYsMTM3MTQxLDE2NjQ3MywyNDg0NCwyMzI0NiwyMzA1MSwxNzA4NCwxNDg2MTYsMTQxMjQsMTkzMjMsMTY2Mzk2LDM3ODE5LDM3ODE2LDEzNzQzMCwxMzQ5NDEsMzM5MDYsMTU4OTEyLDEzNjIxMSwxNDgyMTgsMTQyMzc0LDE0ODQxNywyMjkzMiwxNDY4NzEsMTU3NTA1LDMyMTY4LDE1NTk5''@;'; put 'put ''NSwxNTU4MTIsMTQ5OTQ1LDE0OTg5OSwxNjYzOTQsMzc2MDUsMjk2NjYsMTYxMDUsMjk4NzYsMTY2NzU1LDEzNzM3NSwxNjA5NywxNTAxOTUsMjczNTIsMjk2ODMsMjk2OTEsMTYwODYsMTUwMDc4LDE1MDE2NCwxMzcxNzcsMTUwMTE4LDEzMjAwNywxMzYyMjgsMTQ5OTg5LDI5NzY4LDE0OTc4''@;'; put 'put ''MiwyODgzNywxNDk4NzgsMzc1MDgsMjk2NzAsMzc3MjcsMTMyMzUwLDM3NjgxLDE2NjYwNiwxNjY0MjIsMzc3NjYsMTY2ODg3LDE1MzA0NSwxODc0MSwxNjY1MzAsMjkwMzUsMTQ5ODI3LDEzNDM5OSwyMjE4MCwxMzI2MzQsMTM0MTIzLDEzNDMyOCwyMTc2MiwzMTE3MiwxMzcyMTAsMzIyNTQs''@;'; put 'put ''MTM2ODk4LDE1MDA5NiwxMzcyOTgsMTc3MTAsMzc4ODksMTQwOTAsMTY2NTkyLDE0OTkzMywyMjk2MCwxMzc0MDcsMTM3MzQ3LDE2MDkwMCwyMzIwMSwxNDA1MCwxNDY3NzksMTRlMywzNzQ3MSwyMzE2MSwxNjY1MjksMTM3MzE0LDM3NzQ4LDE1NTY1LDEzMzgxMiwxOTA5NCwxNDczMCwyMDcy''@;'; put 'put ''NCwxNTcyMSwxNTY5MiwxMzYwOTIsMjkwNDUsMTcxNDcsMTY0Mzc2LDI4MTc1LDE2ODE2NCwxNzY0MywyNzk5MSwxNjM0MDcsMjg3NzUsMjc4MjMsMTU1NzQsMTQ3NDM3LDE0Njk4OSwyODE2MiwyODQyOCwxNTcyNywxMzIwODUsMzAwMzMsMTQwMTIsMTM1MTIsMTgwNDgsMTYwOTAsMTg1NDUs''@;'; put 'put ''MjI5ODAsMzc0ODYsMTg3NTAsMzY2NzMsMTY2OTQwLDE1ODY1NiwyMjU0NiwyMjQ3MiwxNDAzOCwxMzYyNzQsMjg5MjYsMTQ4MzIyLDE1MDEyOSwxNDMzMzEsMTM1ODU2LDE0MDIyMSwyNjgwOSwyNjk4MywxMzYwODgsMTQ0NjEzLDE2MjgwNCwxNDUxMTksMTY2NTMxLDE0NTM2NiwxNDQzNzgs''@;'; put 'put ''MTUwNjg3LDI3MTYyLDE0NTA2OSwxNTg5MDMsMzM4NTQsMTc2MzEsMTc2MTQsMTU5MDE0LDE1OTA1NywxNTg4NTAsMTU5NzEwLDI4NDM5LDE2MDAwOSwzMzU5NywxMzcwMTgsMzM3NzMsMTU4ODQ4LDE1OTgyNywxMzcxNzksMjI5MjEsMjMxNzAsMTM3MTM5LDIzMTM3LDIzMTUzLDEzNzQ3Nywx''@;'; put 'put ''NDc5NjQsMTQxMjUsMjMwMjMsMTM3MDIwLDE0MDIzLDI5MDcwLDM3Nzc2LDI2MjY2LDE0ODEzMywyMzE1MCwyMzA4MywxNDgxMTUsMjcxNzksMTQ3MTkzLDE2MTU5MCwxNDg1NzEsMTQ4MTcwLDI4OTU3LDE0ODA1NywxNjYzNjksMjA0MDAsMTU5MDE2LDIzNzQ2LDE0ODY4NiwxNjM0MDUsMTQ4''@;'; put 'put ''NDEzLDI3MTQ4LDE0ODA1NCwxMzU5NDAsMjg4MzgsMjg5NzksMTQ4NDU3LDE1NzgxLDI3ODcxLDE5NDU5NywxNTAwOTUsMzIzNTcsMjMwMTksMjM4NTUsMTU4NTksMjQ0MTIsMTUwMTA5LDEzNzE4MywzMjE2NCwzMzgzMCwyMTYzNywxNDYxNzAsMTQ0MTI4LDEzMTYwNCwyMjM5OCwxMzMzMzMs''@;'; put 'put ''MTMyNjMzLDE2MzU3LDEzOTE2NiwxNzI3MjYsMjg2NzUsMTY4MjgzLDIzOTIwLDI5NTgzLDMxOTU1LDE2NjQ4OSwxNjg5OTIsMjA0MjQsMzI3NDMsMjkzODksMjk0NTYsMTYyNTQ4LDI5NDk2LDI5NDk3LDE1MzMzNCwyOTUwNSwyOTUxMiwxNjA0MSwxNjI1ODQsMzY5NzIsMjkxNzMsMTQ5NzQ2''@;'; put 'put ''LDI5NjY1LDMzMjcwLDE2MDc0LDMwNDc2LDE2MDgxLDI3ODEwLDIyMjY5LDI5NzIxLDI5NzI2LDI5NzI3LDE2MDk4LDE2MTEyLDE2MTE2LDE2MTIyLDI5OTA3LDE2MTQyLDE2MjExLDMwMDE4LDMwMDYxLDMwMDY2LDMwMDkzLDE2MjUyLDMwMTUyLDMwMTcyLDE2MzIwLDMwMjg1LDE2MzQzLDMw''@;'; put 'put ''MzI0LDE2MzQ4LDMwMzMwLDE1MTM4OCwyOTA2NCwyMjA1MSwzNTIwMCwyMjYzMywxNjQxMywzMDUzMSwxNjQ0MSwyNjQ2NSwxNjQ1MywxMzc4NywzMDYxNiwxNjQ5MCwxNjQ5NSwyMzY0NiwzMDY1NCwzMDY2NywyMjc3MCwzMDc0NCwyODg1NywzMDc0OCwxNjU1MiwzMDc3NywzMDc5MSwzMDgw''@;'; put 'put ''MSwzMDgyMiwzMzg2NCwxNTI4ODUsMzEwMjcsMjY2MjcsMzEwMjYsMTY2NDMsMTY2NDksMzExMjEsMzExMjksMzY3OTUsMzEyMzgsMzY3OTYsMTY3NDMsMzEzNzcsMTY4MTgsMzE0MjAsMzM0MDEsMTY4MzYsMzE0MzksMzE0NTEsMTY4NDcsMjAwMDEsMzE1ODYsMzE1OTYsMzE2MTEsMzE3NjIs''@;'; put 'put ''MzE3NzEsMTY5OTIsMTcwMTgsMzE4NjcsMzE5MDAsMTcwMzYsMzE5MjgsMTcwNDQsMzE5ODEsMzY3NTUsMjg4NjQsMTM0MzUxLDMyMjA3LDMyMjEyLDMyMjA4LDMyMjUzLDMyNjg2LDMyNjkyLDI5MzQzLDE3MzAzLDMyODAwLDMyODA1LDMxNTQ1LDMyODE0LDMyODE3LDMyODUyLDE1ODIwLDIy''@;'; put 'put ''NDUyLDI4ODMyLDMyOTUxLDMzMDAxLDE3Mzg5LDMzMDM2LDI5NDgyLDMzMDM4LDMzMDQyLDMwMDQ4LDMzMDQ0LDE3NDA5LDE1MTYxLDMzMTEwLDMzMTEzLDMzMTE0LDE3NDI3LDIyNTg2LDMzMTQ4LDMzMTU2LDE3NDQ1LDMzMTcxLDE3NDUzLDMzMTg5LDIyNTExLDMzMjE3LDMzMjUyLDMzMzY0''@;'; put 'put ''LDE3NTUxLDMzNDQ2LDMzMzk4LDMzNDgyLDMzNDk2LDMzNTM1LDE3NTg0LDMzNjIzLDM4NTA1LDI3MDE4LDMzNzk3LDI4OTE3LDMzODkyLDI0ODAzLDMzOTI4LDE3NjY4LDMzOTgyLDM0MDE3LDM0MDQwLDM0MDY0LDM0MTA0LDM0MTMwLDE3NzIzLDM0MTU5LDM0MTYwLDM0MjcyLDE3NzgzLDM0''@;'; put 'put ''NDE4LDM0NDUwLDM0NDgyLDM0NTQzLDM4NDY5LDM0Njk5LDE3OTI2LDE3OTQzLDM0OTkwLDM1MDcxLDM1MTA4LDM1MTQzLDM1MjE3LDE2MjE1MSwzNTM2OSwzNTM4NCwzNTQ3NiwzNTUwOCwzNTkyMSwzNjA1MiwzNjA4MiwzNjEyNCwxODMyOCwyMjYyMywzNjI5MSwxODQxMywyMDIwNiwzNjQx''@;'; put 'put ''MCwyMTk3NiwyMjM1NiwzNjQ2NSwyMjAwNSwzNjUyOCwxODQ4NywzNjU1OCwzNjU3OCwzNjU4MCwzNjU4OSwzNjU5NCwzNjc5MSwzNjgwMSwzNjgxMCwzNjgxMiwzNjkxNSwzOTM2NCwxODYwNSwzOTEzNiwzNzM5NSwxODcxOCwzNzQxNiwzNzQ2NCwzNzQ4MywzNzU1MywzNzU1MCwzNzU2Nywz''@;'; put 'put ''NzYwMywzNzYxMSwzNzYxOSwzNzYyMCwzNzYyOSwzNzY5OSwzNzc2NCwzNzgwNSwxODc1NywxODc2OSw0MDYzOSwzNzkxMSwyMTI0OSwzNzkxNywzNzkzMywzNzk1MCwxODc5NCwzNzk3MiwzODAwOSwzODE4OSwzODMwNiwxODg1NSwzODM4OCwzODQ1MSwxODkxNywyNjUyOCwxODk4MCwzODcy''@;'; put 'put ''MCwxODk5NywzODgzNCwzODg1MCwyMjEwMCwxOTE3MiwyNDgwOCwzOTA5NywxOTIyNSwzOTE1MywyMjU5NiwzOTE4MiwzOTE5MywyMDkxNiwzOTE5NiwzOTIyMywzOTIzNCwzOTI2MSwzOTI2NiwxOTMxMiwzOTM2NSwxOTM1NywzOTQ4NCwzOTY5NSwzMTM2MywzOTc4NSwzOTgwOSwzOTkwMSwz''@;'; put 'put ''OTkyMSwzOTkyNCwxOTU2NSwzOTk2OCwxNDE5MSwxMzgxNzgsNDAyNjUsMzk5OTQsNDA3MDIsMjIwOTYsNDAzMzksNDAzODEsNDAzODQsNDA0NDQsMzgxMzQsMzY3OTAsNDA1NzEsNDA2MjAsNDA2MjUsNDA2MzcsNDA2NDYsMzgxMDgsNDA2NzQsNDA2ODksNDA2OTYsMzE0MzIsNDA3NzIsMTMx''@;'; put 'put ''MjIwLDEzMTc2NywxMzJlMywyNjkwNiwzODA4MywyMjk1NiwxMzIzMTEsMjI1OTIsMzgwODEsMTQyNjUsMTMyNTY1LDEzMjYyOSwxMzI3MjYsMTM2ODkwLDIyMzU5LDI5MDQzLDEzMzgyNiwxMzM4MzcsMTM0MDc5LDIxNjEwLDE5NDYxOSwxMzQwOTEsMjE2NjIsMTM0MTM5LDEzNDIwMywxMzQy''@;'; put 'put ''MjcsMTM0MjQ1LDEzNDI2OCwyNDgwNywxMzQyODUsMjIxMzgsMTM0MzI1LDEzNDM2NSwxMzQzODEsMTM0NTExLDEzNDU3OCwxMzQ2MDAsMjY5NjUsMzk5ODMsMzQ3MjUsMTM0NjYwLDEzNDY3MCwxMzQ4NzEsMTM1MDU2LDEzNDk1NywxMzQ3NzEsMjM1ODQsMTM1MTAwLDI0MDc1LDEzNTI2MCwx''@;'; put 'put ''MzUyNDcsMTM1Mjg2LDI2Mzk4LDEzNTI5MSwxMzUzMDQsMTM1MzE4LDEzODk1LDEzNTM1OSwxMzUzNzksMTM1NDcxLDEzNTQ4MywyMTM0OCwzMzk2NSwxMzU5MDcsMTM2MDUzLDEzNTk5MCwzNTcxMywxMzY1NjcsMTM2NzI5LDEzNzE1NSwxMzcxNTksMjAwODgsMjg4NTksMTM3MjYxLDEzNzU3''@;'; put 'put ''OCwxMzc3NzMsMTM3Nzk3LDEzODI4MiwxMzgzNTIsMTM4NDEyLDEzODk1MiwyNTI4MywxMzg5NjUsMTM5MDI5LDI5MDgwLDI2NzA5LDEzOTMzMywyNzExMywxNDAyNCwxMzk5MDAsMTQwMjQ3LDE0MDI4MiwxNDEwOTgsMTQxNDI1LDE0MTY0NywzMzUzMywxNDE2NzEsMTQxNzE1LDE0MjAzNywz''@;'; put 'put ''NTIzNywxNDIwNTYsMzY3NjgsMTQyMDk0LDM4ODQwLDE0MjE0MywzODk4MywzOTYxMywxNDI0MTIsbnVsbCwxNDI0NzIsMTQyNTE5LDE1NDYwMCwxNDI2MDAsMTQyNjEwLDE0Mjc3NSwxNDI3NDEsMTQyOTE0LDE0MzIyMCwxNDMzMDgsMTQzNDExLDE0MzQ2MiwxNDQxNTksMTQ0MzUwLDI0NDk3''@;'; put 'put ''LDI2MTg0LDI2MzAzLDE2MjQyNSwxNDQ3NDMsMTQ0ODgzLDI5MTg1LDE0OTk0NiwzMDY3OSwxNDQ5MjIsMTQ1MTc0LDMyMzkxLDEzMTkxMCwyMjcwOSwyNjM4MiwyNjkwNCwxNDYwODcsMTYxMzY3LDE1NTYxOCwxNDY5NjEsMTQ3MTI5LDE2MTI3OCwxMzk0MTgsMTg2NDAsMTkxMjgsMTQ3NzM3''@;'; put 'put ''LDE2NjU1NCwxNDgyMDYsMTQ4MjM3LDE0NzUxNSwxNDgyNzYsMTQ4Mzc0LDE1MDA4NSwxMzI1NTQsMjA5NDYsMTMyNjI1LDIyOTQzLDEzODkyMCwxNTI5NCwxNDY2ODcsMTQ4NDg0LDE0ODY5NCwyMjQwOCwxNDkxMDgsMTQ3NDcsMTQ5Mjk1LDE2NTM1MiwxNzA0NDEsMTQxNzgsMTM5NzE1LDM1''@;'; put 'put ''Njc4LDE2NjczNCwzOTM4MiwxNDk1MjIsMTQ5NzU1LDE1MDAzNywyOTE5MywxNTAyMDgsMTM0MjY0LDIyODg1LDE1MTIwNSwxNTE0MzAsMTMyOTg1LDM2NTcwLDE1MTU5NiwyMTEzNSwyMjMzNSwyOTA0MSwxNTIyMTcsMTUyNjAxLDE0NzI3NCwxNTAxODMsMjE5NDgsMTUyNjQ2LDE1MjY4Niwx''@;'; put 'put ''NTg1NDYsMzczMzIsMTM0MjcsMTUyODk1LDE2MTMzMCwxNTI5MjYsMTgyMDAsMTUyOTMwLDE1MjkzNCwxNTM1NDMsMTQ5ODIzLDE1MzY5MywyMDU4MiwxMzU2MywxNDQzMzIsMjQ3OTgsMTUzODU5LDE4MzAwLDE2NjIxNiwxNTQyODYsMTU0NTA1LDE1NDYzMCwxMzg2NDAsMjI0MzMsMjkwMDks''@;'; put 'put ''Mjg1OTgsMTU1OTA2LDE2MjgzNCwzNjk1MCwxNTYwODIsMTUxNDUwLDM1NjgyLDE1NjY3NCwxNTY3NDYsMjM4OTksMTU4NzExLDM2NjYyLDE1NjgwNCwxMzc1MDAsMzU1NjIsMTUwMDA2LDE1NjgwOCwxNDc0MzksMTU2OTQ2LDE5MzkyLDE1NzExOSwxNTczNjUsMTQxMDgzLDM3OTg5LDE1MzU2''@;'; put 'put ''OSwyNDk4MSwyMzA3OSwxOTQ3NjUsMjA0MTEsMjIyMDEsMTQ4NzY5LDE1NzQzNiwyMDA3NCwxNDk4MTIsMzg0ODYsMjgwNDcsMTU4OTA5LDEzODQ4LDM1MTkxLDE1NzU5MywxNTc4MDYsMTU2Njg5LDE1Nzc5MCwyOTE1MSwxNTc4OTUsMzE1NTQsMTY4MTI4LDEzMzY0OSwxNTc5OTAsMzcxMjQs''@;'; put 'put ''MTU4MDA5LDMxMzAxLDQwNDMyLDE1ODIwMiwzOTQ2MiwxNTgyNTMsMTM5MTksMTU2Nzc3LDEzMTEwNSwzMTEwNywxNTgyNjAsMTU4NTU1LDIzODUyLDE0NDY2NSwzMzc0MywxNTg2MjEsMTgxMjgsMTU4ODg0LDMwMDExLDM0OTE3LDE1OTE1MCwyMjcxMCwxNDEwOCwxNDA2ODUsMTU5ODE5LDE2''@;'; put 'put ''MDIwNSwxNTQ0NCwxNjAzODQsMTYwMzg5LDM3NTA1LDEzOTY0MiwxNjAzOTUsMzc2ODAsMTYwNDg2LDE0OTk2OCwyNzcwNSwzODA0NywxNjA4NDgsMTM0OTA0LDM0ODU1LDM1MDYxLDE0MTYwNiwxNjQ5NzksMTM3MTM3LDI4MzQ0LDE1MDA1OCwxMzcyNDgsMTQ3NTYsMTQwMDksMjM1NjgsMzEy''@;'; put 'put ''MDMsMTc3MjcsMjYyOTQsMTcxMTgxLDE3MDE0OCwzNTEzOSwxNjE3NDAsMTYxODgwLDIyMjMwLDE2NjA3LDEzNjcxNCwxNDc1MywxNDUxOTksMTY0MDcyLDEzNjEzMywyOTEwMSwzMzYzOCwxNjIyNjksMTY4MzYwLDIzMTQzLDE5NjM5LDE1OTkxOSwxNjYzMTUsMTYyMzAxLDE2MjMxNCwxNjI1''@;'; put 'put ''NzEsMTYzMTc0LDE0NzgzNCwzMTU1NSwzMTEwMiwxNjM4NDksMjg1OTcsMTcyNzY3LDI3MTM5LDE2NDYzMiwyMTQxMCwxNTkyMzksMzc4MjMsMjY2NzgsMzg3NDksMTY0MjA3LDE2Mzg3NSwxNTgxMzMsMTM2MTczLDE0MzkxOSwxNjM5MTIsMjM5NDEsMTY2OTYwLDE2Mzk3MSwyMjI5MywzODk0''@;'; put 'put ''NywxNjYyMTcsMjM5NzksMTQ5ODk2LDI2MDQ2LDI3MDkzLDIxNDU4LDE1MDE4MSwxNDczMjksMTUzNzcsMjY0MjIsMTYzOTg0LDE2NDA4NCwxNjQxNDIsMTM5MTY5LDE2NDE3NSwxNjQyMzMsMTY0MjcxLDE2NDM3OCwxNjQ2MTQsMTY0NjU1LDE2NDc0NiwxMzc3MCwxNjQ5NjgsMTY1NTQ2LDE4''@;'; put 'put ''NjgyLDI1NTc0LDE2NjIzMCwzMDcyOCwzNzQ2MSwxNjYzMjgsMTczOTQsMTY2Mzc1LDE3Mzc1LDE2NjM3NiwxNjY3MjYsMTY2ODY4LDIzMDMyLDE2NjkyMSwzNjYxOSwxNjc4NzcsMTY4MTcyLDMxNTY5LDE2ODIwOCwxNjgyNTIsMTU4NjMsMTY4Mjg2LDE1MDIxOCwzNjgxNiwyOTMyNywyMjE1''@;'; put 'put ''NSwxNjkxOTEsMTY5NDQ5LDE2OTM5MiwxNjk0MDAsMTY5Nzc4LDE3MDE5MywxNzAzMTMsMTcwMzQ2LDE3MDQzNSwxNzA1MzYsMTcwNzY2LDE3MTM1NCwxNzE0MTksMzI0MTUsMTcxNzY4LDE3MTgxMSwxOTYyMCwzODIxNSwxNzI2OTEsMjkwOTAsMTcyNzk5LDE5ODU3LDM2ODgyLDE3MzUxNSwx''@;'; put 'put ''OTg2OCwxMzQzMDAsMzY3OTgsMjE5NTMsMzY3OTQsMTQwNDY0LDM2NzkzLDE1MDE2MywxNzY3MywzMjM4MywyODUwMiwyNzMxMywyMDIwMiwxMzU0MCwxNjY3MDAsMTYxOTQ5LDE0MTM4LDM2NDgwLDEzNzIwNSwxNjM4NzYsMTY2NzY0LDE2NjgwOSwxNjIzNjYsMTU3MzU5LDE1ODUxLDE2MTM2''@;'; put 'put ''NSwxNDY2MTUsMTUzMTQxLDE1Mzk0MiwyMDEyMiwxNTUyNjUsMTU2MjQ4LDIyMjA3LDEzNDc2NSwzNjM2NiwyMzQwNSwxNDcwODAsMTUwNjg2LDI1NTY2LDI1Mjk2LDEzNzIwNiwxMzczMzksMjU5MDQsMjIwNjEsMTU0Njk4LDIxNTMwLDE1MjMzNywxNTgxNCwxNzE0MTYsMTk1ODEsMjIwNTAs''@;'; put 'put ''MjIwNDYsMzI1ODUsMTU1MzUyLDIyOTAxLDE0Njc1MiwzNDY3MiwxOTk5NiwxMzUxNDYsMTM0NDczLDE0NTA4MiwzMzA0Nyw0MDI4NiwzNjEyMCwzMDI2Nyw0MDAwNSwzMDI4NiwzMDY0OSwzNzcwMSwyMTU1NCwzMzA5NiwzMzUyNywyMjA1MywzMzA3NCwzMzgxNiwzMjk1NywyMTk5NCwzMTA3''@;'; put 'put ''NCwyMjA4MywyMTUyNiwxMzQ4MTMsMTM3NzQsMjIwMjEsMjIwMDEsMjYzNTMsMTY0NTc4LDEzODY5LDMwMDA0LDIyZTMsMjE5NDYsMjE2NTUsMjE4NzQsMTM0MjA5LDEzNDI5NCwyNDI3MiwxNTE4ODAsMTM0Nzc0LDE0MjQzNCwxMzQ4MTgsNDA2MTksMzIwOTAsMjE5ODIsMTM1Mjg1LDI1MjQ1''@;'; put 'put ''LDM4NzY1LDIxNjUyLDM2MDQ1LDI5MTc0LDM3MjM4LDI1NTk2LDI1NTI5LDI1NTk4LDIxODY1LDE0MjE0Nyw0MDA1MCwxNDMwMjcsMjA4OTAsMTM1MzUsMTM0NTY3LDIwOTAzLDIxNTgxLDIxNzkwLDIxNzc5LDMwMzEwLDM2Mzk3LDE1NzgzNCwzMDEyOSwzMjk1MCwzNDgyMCwzNDY5NCwzNTAx''@;'; put 'put ''NSwzMzIwNiwzMzgyMCwxMzUzNjEsMTc2NDQsMjk0NDQsMTQ5MjU0LDIzNDQwLDMzNTQ3LDE1Nzg0MywyMjEzOSwxNDEwNDQsMTYzMTE5LDE0Nzg3NSwxNjMxODcsMTU5NDQwLDE2MDQzOCwzNzIzMiwxMzU2NDEsMzczODQsMTQ2Njg0LDE3MzczNywxMzQ4MjgsMTM0OTA1LDI5Mjg2LDEzODQw''@;'; put 'put ''MiwxODI1NCwxNTE0OTAsMTYzODMzLDEzNTE0NywxNjYzNCw0MDAyOSwyNTg4NywxNDI3NTIsMTg2NzUsMTQ5NDcyLDE3MTM4OCwxMzUxNDgsMTM0NjY2LDI0Njc0LDE2MTE4NywxMzUxNDksbnVsbCwxNTU3MjAsMTM1NTU5LDI5MDkxLDMyMzk4LDQwMjcyLDE5OTk0LDE5OTcyLDEzNjg3LDIz''@;'; put 'put ''MzA5LDI3ODI2LDIxMzUxLDEzOTk2LDE0ODEyLDIxMzczLDEzOTg5LDE0OTAxNiwyMjY4MiwxNTAzODIsMzMzMjUsMjE1NzksMjI0NDIsMTU0MjYxLDEzMzQ5NyxudWxsLDE0OTMwLDE0MDM4OSwyOTU1NiwxNzE2OTIsMTk3MjEsMzk5MTcsMTQ2Njg2LDE3MTgyNCwxOTU0NywxNTE0NjUsMTY5''@;'; put 'put ''Mzc0LDE3MTk5OCwzMzg4NCwxNDY4NzAsMTYwNDM0LDE1NzYxOSwxNDUxODQsMjUzOTAsMzIwMzcsMTQ3MTkxLDE0Njk4OCwxNDg5MCwzNjg3MiwyMTE5NiwxNTk4OCwxMzk0NiwxNzg5NywxMzIyMzgsMzAyNzIsMjMyODAsMTM0ODM4LDMwODQyLDE2MzYzMCwyMjY5NSwxNjU3NSwyMjE0MCwz''@;'; put 'put ''OTgxOSwyMzkyNCwzMDI5MiwxNzMxMDgsNDA1ODEsMTk2ODEsMzAyMDEsMTQzMzEsMjQ4NTcsMTQzNTc4LDE0ODQ2NixudWxsLDIyMTA5LDEzNTg0OSwyMjQzOSwxNDk4NTksMTcxNTI2LDIxMDQ0LDE1OTkxOCwxMzc0MSwyNzcyMiw0MDMxNiwzMTgzMCwzOTczNywyMjQ5NCwxMzcwNjgsMjM2''@;'; put 'put ''MzUsMjU4MTEsMTY5MTY4LDE1NjQ2OSwxNjAxMDAsMzQ0NzcsMTM0NDQwLDE1OTAxMCwxNTAyNDIsMTM0NTEzLG51bGwsMjA5OTAsMTM5MDIzLDIzOTUwLDM4NjU5LDEzODcwNSw0MDU3NywzNjk0MCwzMTUxOSwzOTY4MiwyMzc2MSwzMTY1MSwyNTE5MiwyNTM5NywzOTY3OSwzMTY5NSwzOTcy''@;'; put 'put ''MiwzMTg3MCwzOTcyNiwzMTgxMCwzMTg3OCwzOTk1NywzMTc0MCwzOTY4OSw0MDcyNywzOTk2MywxNDk4MjIsNDA3OTQsMjE4NzUsMjM0OTEsMjA0NzcsNDA2MDAsMjA0NjYsMjEwODgsMTU4NzgsMjEyMDEsMjIzNzUsMjA1NjYsMjI5NjcsMjQwODIsMzg4NTYsNDAzNjMsMzY3MDAsMjE2MDks''@;'; put 'put ''Mzg4MzYsMzkyMzIsMzg4NDIsMjEyOTIsMjQ4ODAsMjY5MjQsMjE0NjYsMzk5NDYsNDAxOTQsMTk1MTUsMzg0NjUsMjcwMDgsMjA2NDYsMzAwMjIsMTM3MDY5LDM5Mzg2LDIxMTA3LG51bGwsMzcyMDksMzg1MjksMzcyMTIsbnVsbCwzNzIwMSwxNjc1NzUsMjU0NzEsMTU5MDExLDI3MzM4LDIy''@;'; put 'put ''MDMzLDM3MjYyLDMwMDc0LDI1MjIxLDEzMjA5MiwyOTUxOSwzMTg1NiwxNTQ2NTcsMTQ2Njg1LG51bGwsMTQ5Nzg1LDMwNDIyLDM5ODM3LDIwMDEwLDEzNDM1NiwzMzcyNiwzNDg4MixudWxsLDIzNjI2LDI3MDcyLDIwNzE3LDIyMzk0LDIxMDIzLDI0MDUzLDIwMTc0LDI3Njk3LDEzMTU3MCwy''@;'; put 'put ''MDI4MSwyMTY2MCwyMTcyMiwyMTE0NiwzNjIyNiwxMzgyMiwyNDMzMiwxMzgxMSxudWxsLDI3NDc0LDM3MjQ0LDQwODY5LDM5ODMxLDM4OTU4LDM5MDkyLDM5NjEwLDQwNjE2LDQwNTgwLDI5MDUwLDMxNTA4LG51bGwsMjc2NDIsMzQ4NDAsMzI2MzIsbnVsbCwyMjA0OCwxNzM2NDIsMzY0NzEs''@;'; put 'put ''NDA3ODcsbnVsbCwzNjMwOCwzNjQzMSw0MDQ3NiwzNjM1MywyNTIxOCwxNjQ3MzMsMzYzOTIsMzY0NjksMzE0NDMsMTUwMTM1LDMxMjk0LDMwOTM2LDI3ODgyLDM1NDMxLDMwMjE1LDE2NjQ5MCw0MDc0MiwyNzg1NCwzNDc3NCwzMDE0NywxNzI3MjIsMzA4MDMsMTk0NjI0LDM2MTA4LDI5NDEw''@;'; put 'put ''LDI5NTUzLDM1NjI5LDI5NDQyLDI5OTM3LDM2MDc1LDE1MDIwMywzNDM1MSwyNDUwNiwzNDk3NiwxNzU5MSxudWxsLDEzNzI3NSwxNTkyMzcsbnVsbCwzNTQ1NCwxNDA1NzEsbnVsbCwyNDgyOSwzMDMxMSwzOTYzOSw0MDI2MCwzNzc0MiwzOTgyMywzNDgwNSxudWxsLDM0ODMxLDM2MDg3LDI5''@;'; put 'put ''NDg0LDM4Njg5LDM5ODU2LDEzNzgyLDI5MzYyLDE5NDYzLDMxODI1LDM5MjQyLDE1NTk5MywyNDkyMSwxOTQ2MCw0MDU5OCwyNDk1NyxudWxsLDIyMzY3LDI0OTQzLDI1MjU0LDI1MTQ1LDI1Mjk0LDE0OTQwLDI1MDU4LDIxNDE4LDE0NDM3MywyNTQ0NCwyNjYyNiwxMzc3OCwyMzg5NSwxNjY4''@;'; put 'put ''NTAsMzY4MjYsMTY3NDgxLG51bGwsMjA2OTcsMTM4NTY2LDMwOTgyLDIxMjk4LDM4NDU2LDEzNDk3MSwxNjQ4NSxudWxsLDMwNzE4LG51bGwsMzE5MzgsMTU1NDE4LDMxOTYyLDMxMjc3LDMyODcwLDMyODY3LDMyMDc3LDI5OTU3LDI5OTM4LDM1MjIwLDMzMzA2LDI2MzgwLDMyODY2LDE2MDkw''@;'; put 'put ''MiwzMjg1OSwyOTkzNiwzMzAyNywzMDUwMCwzNTIwOSwxNTc2NDQsMzAwMzUsMTU5NDQxLDM0NzI5LDM0NzY2LDMzMjI0LDM0NzAwLDM1NDAxLDM2MDEzLDM1NjUxLDMwNTA3LDI5OTQ0LDM0MDEwLDEzODc3LDI3MDU4LDM2MjYyLG51bGwsMzUyNDEsMjk4MDAsMjgwODksMzQ3NTMsMTQ3NDcz''@;'; put 'put ''LDI5OTI3LDE1ODM1LDI5MDQ2LDI0NzQwLDI0OTg4LDE1NTY5LDI5MDI2LDI0Njk1LG51bGwsMzI2MjUsMTY2NzAxLDI5MjY0LDI0ODA5LDE5MzI2LDIxMDI0LDE1Mzg0LDE0NjYzMSwxNTUzNTEsMTYxMzY2LDE1Mjg4MSwxMzc1NDAsMTM1OTM0LDE3MDI0MywxNTkxOTYsMTU5OTE3LDIzNzQ1''@;'; put 'put ''LDE1NjA3NywxNjY0MTUsMTQ1MDE1LDEzMTMxMCwxNTc3NjYsMTUxMzEwLDE3NzYyLDIzMzI3LDE1NjQ5Miw0MDc4NCw0MDYxNCwxNTYyNjcsMTIyODgsNjUyOTIsMTIyODksMTIyOTAsNjUyOTQsODIzMSw2NTMwNyw2NTMwNiw2NTMxMSw2NTI4MSw2NTA3Miw4MjMwLDgyMjksNjUxMDQsNjUx''@;'; put 'put ''MDUsNjUxMDYsMTgzLDY1MTA4LDY1MTA5LDY1MTEwLDY1MTExLDY1MzcyLDgyMTEsNjUwNzMsODIxMiw2NTA3NSw5NTg4LDY1MDc2LDY1MTAzLDY1Mjg4LDY1Mjg5LDY1MDc3LDY1MDc4LDY1MzcxLDY1MzczLDY1MDc5LDY1MDgwLDEyMzA4LDEyMzA5LDY1MDgxLDY1MDgyLDEyMzA0LDEyMzA1''@;'; put 'put ''LDY1MDgzLDY1MDg0LDEyMjk4LDEyMjk5LDY1MDg1LDY1MDg2LDEyMjk2LDEyMjk3LDY1MDg3LDY1MDg4LDEyMzAwLDEyMzAxLDY1MDg5LDY1MDkwLDEyMzAyLDEyMzAzLDY1MDkxLDY1MDkyLDY1MTEzLDY1MTE0LDY1MTE1LDY1MTE2LDY1MTE3LDY1MTE4LDgyMTYsODIxNyw4MjIwLDgyMjEs''@;'; put 'put ''MTIzMTcsMTIzMTgsODI0NSw4MjQyLDY1MjgzLDY1Mjg2LDY1MjkwLDgyNTEsMTY3LDEyMjkxLDk2NzUsOTY3OSw5NjUxLDk2NTAsOTY3OCw5NzM0LDk3MzMsOTY3MSw5NjcwLDk2MzMsOTYzMiw5NjYxLDk2NjAsMTI5NjMsODQ1MywxNzUsNjU1MDcsNjUzNDMsNzE3LDY1MDk3LDY1MDk4LDY1''@;'; put 'put ''MTAxLDY1MTAyLDY1MDk5LDY1MTAwLDY1MTE5LDY1MTIwLDY1MTIxLDY1MjkxLDY1MjkzLDIxNSwyNDcsMTc3LDg3MzAsNjUzMDgsNjUzMTAsNjUzMDksODgwNiw4ODA3LDg4MDAsODczNCw4Nzg2LDg4MDEsNjUxMjIsNjUxMjMsNjUxMjQsNjUxMjUsNjUxMjYsNjUzNzQsODc0NSw4NzQ2LDg4''@;'; put 'put ''NjksODczNiw4NzM1LDg4OTUsMTMyNjYsMTMyNjUsODc0Nyw4NzUwLDg3NTcsODc1Niw5NzkyLDk3OTQsODg1Myw4ODU3LDg1OTMsODU5NSw4NTkyLDg1OTQsODU5OCw4NTk5LDg2MDEsODYwMCw4NzQxLDg3MzksNjUyOTUsNjUzNDAsODcyNSw2NTEyOCw2NTI4NCw2NTUwOSwxMjMwNiw2NTUw''@;'; put 'put ''NCw2NTUwNSw2NTI4NSw2NTMxMiw4NDUxLDg0NTcsNjUxMjksNjUxMzAsNjUxMzEsMTMyNjksMTMyMTIsMTMyMTMsMTMyMTQsMTMyNjIsMTMyMTcsMTMxOTgsMTMxOTksMTMyNTIsMTc2LDIwODI1LDIwODI3LDIwODMwLDIwODI5LDIwODMzLDIwODM1LDIxOTkxLDI5OTI5LDMxOTUwLDk2MDEs''@;'; put 'put ''OTYwMiw5NjAzLDk2MDQsOTYwNSw5NjA2LDk2MDcsOTYwOCw5NjE1LDk2MTQsOTYxMyw5NjEyLDk2MTEsOTYxMCw5NjA5LDk1MzIsOTUyNCw5NTE2LDk1MDgsOTUwMCw5NjIwLDk0NzIsOTQ3NCw5NjIxLDk0ODQsOTQ4OCw5NDkyLDk0OTYsOTU4MSw5NTgyLDk1ODQsOTU4Myw5NTUyLDk1NjYs''@;'; put 'put ''OTU3OCw5NTY5LDk2OTgsOTY5OSw5NzAxLDk3MDAsOTU4NSw5NTg2LDk1ODcsNjUyOTYsNjUyOTcsNjUyOTgsNjUyOTksNjUzMDAsNjUzMDEsNjUzMDIsNjUzMDMsNjUzMDQsNjUzMDUsODU0NCw4NTQ1LDg1NDYsODU0Nyw4NTQ4LDg1NDksODU1MCw4NTUxLDg1NTIsODU1MywxMjMyMSwxMjMy''@;'; put 'put ''MiwxMjMyMywxMjMyNCwxMjMyNSwxMjMyNiwxMjMyNywxMjMyOCwxMjMyOSwyMTMxMywyMTMxNiwyMTMxNyw2NTMxMyw2NTMxNCw2NTMxNSw2NTMxNiw2NTMxNyw2NTMxOCw2NTMxOSw2NTMyMCw2NTMyMSw2NTMyMiw2NTMyMyw2NTMyNCw2NTMyNSw2NTMyNiw2NTMyNyw2NTMyOCw2NTMyOSw2''@;'; put 'put ''NTMzMCw2NTMzMSw2NTMzMiw2NTMzMyw2NTMzNCw2NTMzNSw2NTMzNiw2NTMzNyw2NTMzOCw2NTM0NSw2NTM0Niw2NTM0Nyw2NTM0OCw2NTM0OSw2NTM1MCw2NTM1MSw2NTM1Miw2NTM1Myw2NTM1NCw2NTM1NSw2NTM1Niw2NTM1Nyw2NTM1OCw2NTM1OSw2NTM2MCw2NTM2MSw2NTM2Miw2NTM2''@;'; put 'put ''Myw2NTM2NCw2NTM2NSw2NTM2Niw2NTM2Nyw2NTM2OCw2NTM2OSw2NTM3MCw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5''@;'; put 'put ''NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSwxMjU0OSwxMjU1MCwxMjU1MSwxMjU1MiwxMjU1MywxMjU1NCwxMjU1NSwxMjU1NiwxMjU1NywxMjU1OCwxMjU1OSwxMjU2MCwxMjU2MSwxMjU2MiwxMjU2MywxMjU2''@;'; put 'put ''NCwxMjU2NSwxMjU2NiwxMjU2NywxMjU2OCwxMjU2OSwxMjU3MCwxMjU3MSwxMjU3MiwxMjU3MywxMjU3NCwxMjU3NSwxMjU3NiwxMjU3NywxMjU3OCwxMjU3OSwxMjU4MCwxMjU4MSwxMjU4MiwxMjU4MywxMjU4NCwxMjU4NSw3MjksNzEzLDcxNCw3MTEsNzE1LDkyMTYsOTIxNyw5MjE4LDky''@;'; put 'put ''MTksOTIyMCw5MjIxLDkyMjIsOTIyMyw5MjI0LDkyMjUsOTIyNiw5MjI3LDkyMjgsOTIyOSw5MjMwLDkyMzEsOTIzMiw5MjMzLDkyMzQsOTIzNSw5MjM2LDkyMzcsOTIzOCw5MjM5LDkyNDAsOTI0MSw5MjQyLDkyNDMsOTI0NCw5MjQ1LDkyNDYsOTI0Nyw5MjQ5LDgzNjQsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE5OTY4LDIwMDU3LDE5OTY5LDE5OTcxLDIwMDM1LDIw''@;'; put 'put ''MDYxLDIwMTAyLDIwMTA4LDIwMTU0LDIwNzk5LDIwODM3LDIwODQzLDIwOTYwLDIwOTkyLDIwOTkzLDIxMTQ3LDIxMjY5LDIxMzEzLDIxMzQwLDIxNDQ4LDE5OTc3LDE5OTc5LDE5OTc2LDE5OTc4LDIwMDExLDIwMDI0LDIwOTYxLDIwMDM3LDIwMDQwLDIwMDYzLDIwMDYyLDIwMTEwLDIwMTI5''@;'; put 'put ''LDIwODAwLDIwOTk1LDIxMjQyLDIxMzE1LDIxNDQ5LDIxNDc1LDIyMzAzLDIyNzYzLDIyODA1LDIyODIzLDIyODk5LDIzMzc2LDIzMzc3LDIzMzc5LDIzNTQ0LDIzNTY3LDIzNTg2LDIzNjA4LDIzNjY1LDI0MDI5LDI0MDM3LDI0MDQ5LDI0MDUwLDI0MDUxLDI0MDYyLDI0MTc4LDI0MzE4LDI0''@;'; put 'put ''MzMxLDI0MzM5LDI1MTY1LDE5OTg1LDE5OTg0LDE5OTgxLDIwMDEzLDIwMDE2LDIwMDI1LDIwMDQzLDIzNjA5LDIwMTA0LDIwMTEzLDIwMTE3LDIwMTE0LDIwMTE2LDIwMTMwLDIwMTYxLDIwMTYwLDIwMTYzLDIwMTY2LDIwMTY3LDIwMTczLDIwMTcwLDIwMTcxLDIwMTY0LDIwODAzLDIwODAx''@;'; put 'put ''LDIwODM5LDIwODQ1LDIwODQ2LDIwODQ0LDIwODg3LDIwOTgyLDIwOTk4LDIwOTk5LDIxZTMsMjEyNDMsMjEyNDYsMjEyNDcsMjEyNzAsMjEzMDUsMjEzMjAsMjEzMTksMjEzMTcsMjEzNDIsMjEzODAsMjE0NTEsMjE0NTAsMjE0NTMsMjI3NjQsMjI4MjUsMjI4MjcsMjI4MjYsMjI4MjksMjMz''@;'; put 'put ''ODAsMjM1NjksMjM1ODgsMjM2MTAsMjM2NjMsMjQwNTIsMjQxODcsMjQzMTksMjQzNDAsMjQzNDEsMjQ1MTUsMjUwOTYsMjUxNDIsMjUxNjMsMjUxNjYsMjU5MDMsMjU5OTEsMjYwMDcsMjYwMjAsMjYwNDEsMjYwODUsMjYzNTIsMjYzNzYsMjY0MDgsMjc0MjQsMjc0OTAsMjc1MTMsMjc1OTUs''@;'; put 'put ''Mjc2MDQsMjc2MTEsMjc2NjMsMjc3MDAsMjg3NzksMjkyMjYsMjkyMzgsMjkyNDMsMjkyNTUsMjkyNzMsMjkyNzUsMjkzNTYsMjk1NzksMTk5OTMsMTk5OTAsMTk5ODksMTk5ODgsMTk5OTIsMjAwMjcsMjAwNDUsMjAwNDcsMjAwNDYsMjAxOTcsMjAxODQsMjAxODAsMjAxODEsMjAxODIsMjAx''@;'; put 'put ''ODMsMjAxOTUsMjAxOTYsMjAxODUsMjAxOTAsMjA4MDUsMjA4MDQsMjA4NzMsMjA4NzQsMjA5MDgsMjA5ODUsMjA5ODYsMjA5ODQsMjEwMDIsMjExNTIsMjExNTEsMjEyNTMsMjEyNTQsMjEyNzEsMjEyNzcsMjAxOTEsMjEzMjIsMjEzMjEsMjEzNDUsMjEzNDQsMjEzNTksMjEzNTgsMjE0MzUs''@;'; put 'put ''MjE0ODcsMjE0NzYsMjE0OTEsMjE0ODQsMjE0ODYsMjE0ODEsMjE0ODAsMjE1MDAsMjE0OTYsMjE0OTMsMjE0ODMsMjE0NzgsMjE0ODIsMjE0OTAsMjE0ODksMjE0ODgsMjE0NzcsMjE0ODUsMjE0OTksMjIyMzUsMjIyMzQsMjI4MDYsMjI4MzAsMjI4MzMsMjI5MDAsMjI5MDIsMjMzODEsMjM0''@;'; put 'put ''MjcsMjM2MTIsMjQwNDAsMjQwMzksMjQwMzgsMjQwNjYsMjQwNjcsMjQxNzksMjQxODgsMjQzMjEsMjQzNDQsMjQzNDMsMjQ1MTcsMjUwOTgsMjUxNzEsMjUxNzIsMjUxNzAsMjUxNjksMjYwMjEsMjYwODYsMjY0MTQsMjY0MTIsMjY0MTAsMjY0MTEsMjY0MTMsMjc0OTEsMjc1OTcsMjc2NjUs''@;'; put 'put ''Mjc2NjQsMjc3MDQsMjc3MTMsMjc3MTIsMjc3MTAsMjkzNTksMjk1NzIsMjk1NzcsMjk5MTYsMjk5MjYsMjk5NzYsMjk5ODMsMjk5OTIsMjk5OTMsM2U0LDMwMDAxLDMwMDAyLDMwMDAzLDMwMDkxLDMwMzMzLDMwMzgyLDMwMzk5LDMwNDQ2LDMwNjgzLDMwNjkwLDMwNzA3LDMxMDM0LDMxMTY2''@;'; put 'put ''LDMxMzQ4LDMxNDM1LDE5OTk4LDE5OTk5LDIwMDUwLDIwMDUxLDIwMDczLDIwMTIxLDIwMTMyLDIwMTM0LDIwMTMzLDIwMjIzLDIwMjMzLDIwMjQ5LDIwMjM0LDIwMjQ1LDIwMjM3LDIwMjQwLDIwMjQxLDIwMjM5LDIwMjEwLDIwMjE0LDIwMjE5LDIwMjA4LDIwMjExLDIwMjIxLDIwMjI1LDIw''@;'; put 'put ''MjM1LDIwODA5LDIwODA3LDIwODA2LDIwODA4LDIwODQwLDIwODQ5LDIwODc3LDIwOTEyLDIxMDE1LDIxMDA5LDIxMDEwLDIxMDA2LDIxMDE0LDIxMTU1LDIxMjU2LDIxMjgxLDIxMjgwLDIxMzYwLDIxMzYxLDIxNTEzLDIxNTE5LDIxNTE2LDIxNTE0LDIxNTIwLDIxNTA1LDIxNTE1LDIxNTA4''@;'; put 'put ''LDIxNTIxLDIxNTE3LDIxNTEyLDIxNTA3LDIxNTE4LDIxNTEwLDIxNTIyLDIyMjQwLDIyMjM4LDIyMjM3LDIyMzIzLDIyMzIwLDIyMzEyLDIyMzE3LDIyMzE2LDIyMzE5LDIyMzEzLDIyODA5LDIyODEwLDIyODM5LDIyODQwLDIyOTE2LDIyOTA0LDIyOTE1LDIyOTA5LDIyOTA1LDIyOTE0LDIy''@;'; put 'put ''OTEzLDIzMzgzLDIzMzg0LDIzNDMxLDIzNDMyLDIzNDI5LDIzNDMzLDIzNTQ2LDIzNTc0LDIzNjczLDI0MDMwLDI0MDcwLDI0MTgyLDI0MTgwLDI0MzM1LDI0MzQ3LDI0NTM3LDI0NTM0LDI1MTAyLDI1MTAwLDI1MTAxLDI1MTA0LDI1MTg3LDI1MTc5LDI1MTc2LDI1OTEwLDI2MDg5LDI2MDg4''@;'; put 'put ''LDI2MDkyLDI2MDkzLDI2MzU0LDI2MzU1LDI2Mzc3LDI2NDI5LDI2NDIwLDI2NDE3LDI2NDIxLDI3NDI1LDI3NDkyLDI3NTE1LDI3NjcwLDI3NzQxLDI3NzM1LDI3NzM3LDI3NzQzLDI3NzQ0LDI3NzI4LDI3NzMzLDI3NzQ1LDI3NzM5LDI3NzI1LDI3NzI2LDI4Nzg0LDI5Mjc5LDI5Mjc3LDMw''@;'; put 'put ''MzM0LDMxNDgxLDMxODU5LDMxOTkyLDMyNTY2LDMyNjUwLDMyNzAxLDMyNzY5LDMyNzcxLDMyNzgwLDMyNzg2LDMyODE5LDMyODk1LDMyOTA1LDMyOTA3LDMyOTA4LDMzMjUxLDMzMjU4LDMzMjY3LDMzMjc2LDMzMjkyLDMzMzA3LDMzMzExLDMzMzkwLDMzMzk0LDMzNDA2LDM0NDExLDM0ODgw''@;'; put 'put ''LDM0ODkyLDM0OTE1LDM1MTk5LDM4NDMzLDIwMDE4LDIwMTM2LDIwMzAxLDIwMzAzLDIwMjk1LDIwMzExLDIwMzE4LDIwMjc2LDIwMzE1LDIwMzA5LDIwMjcyLDIwMzA0LDIwMzA1LDIwMjg1LDIwMjgyLDIwMjgwLDIwMjkxLDIwMzA4LDIwMjg0LDIwMjk0LDIwMzIzLDIwMzE2LDIwMzIwLDIw''@;'; put 'put ''MjcxLDIwMzAyLDIwMjc4LDIwMzEzLDIwMzE3LDIwMjk2LDIwMzE0LDIwODEyLDIwODExLDIwODEzLDIwODUzLDIwOTE4LDIwOTE5LDIxMDI5LDIxMDI4LDIxMDMzLDIxMDM0LDIxMDMyLDIxMTYzLDIxMTYxLDIxMTYyLDIxMTY0LDIxMjgzLDIxMzYzLDIxMzY1LDIxNTMzLDIxNTQ5LDIxNTM0''@;'; put 'put ''LDIxNTY2LDIxNTQyLDIxNTgyLDIxNTQzLDIxNTc0LDIxNTcxLDIxNTU1LDIxNTc2LDIxNTcwLDIxNTMxLDIxNTQ1LDIxNTc4LDIxNTYxLDIxNTYzLDIxNTYwLDIxNTUwLDIxNTU3LDIxNTU4LDIxNTM2LDIxNTY0LDIxNTY4LDIxNTUzLDIxNTQ3LDIxNTM1LDIxNTQ4LDIyMjUwLDIyMjU2LDIy''@;'; put 'put ''MjQ0LDIyMjUxLDIyMzQ2LDIyMzUzLDIyMzM2LDIyMzQ5LDIyMzQzLDIyMzUwLDIyMzM0LDIyMzUyLDIyMzUxLDIyMzMxLDIyNzY3LDIyODQ2LDIyOTQxLDIyOTMwLDIyOTUyLDIyOTQyLDIyOTQ3LDIyOTM3LDIyOTM0LDIyOTI1LDIyOTQ4LDIyOTMxLDIyOTIyLDIyOTQ5LDIzMzg5LDIzMzg4''@;'; put 'put ''LDIzMzg2LDIzMzg3LDIzNDM2LDIzNDM1LDIzNDM5LDIzNTk2LDIzNjE2LDIzNjE3LDIzNjE1LDIzNjE0LDIzNjk2LDIzNjk3LDIzNzAwLDIzNjkyLDI0MDQzLDI0MDc2LDI0MjA3LDI0MTk5LDI0MjAyLDI0MzExLDI0MzI0LDI0MzUxLDI0NDIwLDI0NDE4LDI0NDM5LDI0NDQxLDI0NTM2LDI0''@;'; put 'put ''NTI0LDI0NTM1LDI0NTI1LDI0NTYxLDI0NTU1LDI0NTY4LDI0NTU0LDI1MTA2LDI1MTA1LDI1MjIwLDI1MjM5LDI1MjM4LDI1MjE2LDI1MjA2LDI1MjI1LDI1MTk3LDI1MjI2LDI1MjEyLDI1MjE0LDI1MjA5LDI1MjAzLDI1MjM0LDI1MTk5LDI1MjQwLDI1MTk4LDI1MjM3LDI1MjM1LDI1MjMz''@;'; put 'put ''LDI1MjIyLDI1OTEzLDI1OTE1LDI1OTEyLDI2MDk3LDI2MzU2LDI2NDYzLDI2NDQ2LDI2NDQ3LDI2NDQ4LDI2NDQ5LDI2NDYwLDI2NDU0LDI2NDYyLDI2NDQxLDI2NDM4LDI2NDY0LDI2NDUxLDI2NDU1LDI3NDkzLDI3NTk5LDI3NzE0LDI3NzQyLDI3ODAxLDI3Nzc3LDI3Nzg0LDI3Nzg1LDI3''@;'; put 'put ''NzgxLDI3ODAzLDI3NzU0LDI3NzcwLDI3NzkyLDI3NzYwLDI3Nzg4LDI3NzUyLDI3Nzk4LDI3Nzk0LDI3NzczLDI3Nzc5LDI3NzYyLDI3Nzc0LDI3NzY0LDI3NzgyLDI3NzY2LDI3Nzg5LDI3Nzk2LDI3ODAwLDI3Nzc4LDI4NzkwLDI4Nzk2LDI4Nzk3LDI4NzkyLDI5MjgyLDI5MjgxLDI5Mjgw''@;'; put 'put ''LDI5MzgwLDI5Mzc4LDI5NTkwLDI5OTk2LDI5OTk1LDMwMDA3LDMwMDA4LDMwMzM4LDMwNDQ3LDMwNjkxLDMxMTY5LDMxMTY4LDMxMTY3LDMxMzUwLDMxOTk1LDMyNTk3LDMyOTE4LDMyOTE1LDMyOTI1LDMyOTIwLDMyOTIzLDMyOTIyLDMyOTQ2LDMzMzkxLDMzNDI2LDMzNDE5LDMzNDIxLDM1''@;'; put 'put ''MjExLDM1MjgyLDM1MzI4LDM1ODk1LDM1OTEwLDM1OTI1LDM1OTk3LDM2MTk2LDM2MjA4LDM2Mjc1LDM2NTIzLDM2NTU0LDM2NzYzLDM2Nzg0LDM2ODAyLDM2ODA2LDM2ODA1LDM2ODA0LDI0MDMzLDM3MDA5LDM3MDI2LDM3MDM0LDM3MDMwLDM3MDI3LDM3MTkzLDM3MzE4LDM3MzI0LDM4NDUw''@;'; put 'put ''LDM4NDQ2LDM4NDQ5LDM4NDQyLDM4NDQ0LDIwMDA2LDIwMDU0LDIwMDgzLDIwMTA3LDIwMTIzLDIwMTI2LDIwMTM5LDIwMTQwLDIwMzM1LDIwMzgxLDIwMzY1LDIwMzM5LDIwMzUxLDIwMzMyLDIwMzc5LDIwMzYzLDIwMzU4LDIwMzU1LDIwMzM2LDIwMzQxLDIwMzYwLDIwMzI5LDIwMzQ3LDIw''@;'; put 'put ''Mzc0LDIwMzUwLDIwMzY3LDIwMzY5LDIwMzQ2LDIwODIwLDIwODE4LDIwODIxLDIwODQxLDIwODU1LDIwODU0LDIwODU2LDIwOTI1LDIwOTg5LDIxMDUxLDIxMDQ4LDIxMDQ3LDIxMDUwLDIxMDQwLDIxMDM4LDIxMDQ2LDIxMDU3LDIxMTgyLDIxMTc5LDIxMzMwLDIxMzMyLDIxMzMxLDIxMzI5''@;'; put 'put ''LDIxMzUwLDIxMzY3LDIxMzY4LDIxMzY5LDIxNDYyLDIxNDYwLDIxNDYzLDIxNjE5LDIxNjIxLDIxNjU0LDIxNjI0LDIxNjUzLDIxNjMyLDIxNjI3LDIxNjIzLDIxNjM2LDIxNjUwLDIxNjM4LDIxNjI4LDIxNjQ4LDIxNjE3LDIxNjIyLDIxNjQ0LDIxNjU4LDIxNjAyLDIxNjA4LDIxNjQzLDIx''@;'; put 'put ''NjI5LDIxNjQ2LDIyMjY2LDIyNDAzLDIyMzkxLDIyMzc4LDIyMzc3LDIyMzY5LDIyMzc0LDIyMzcyLDIyMzk2LDIyODEyLDIyODU3LDIyODU1LDIyODU2LDIyODUyLDIyODY4LDIyOTc0LDIyOTcxLDIyOTk2LDIyOTY5LDIyOTU4LDIyOTkzLDIyOTgyLDIyOTkyLDIyOTg5LDIyOTg3LDIyOTk1''@;'; put 'put ''LDIyOTg2LDIyOTU5LDIyOTYzLDIyOTk0LDIyOTgxLDIzMzkxLDIzMzk2LDIzMzk1LDIzNDQ3LDIzNDUwLDIzNDQ4LDIzNDUyLDIzNDQ5LDIzNDUxLDIzNTc4LDIzNjI0LDIzNjIxLDIzNjIyLDIzNzM1LDIzNzEzLDIzNzM2LDIzNzIxLDIzNzIzLDIzNzI5LDIzNzMxLDI0MDg4LDI0MDkwLDI0''@;'; put 'put ''MDg2LDI0MDg1LDI0MDkxLDI0MDgxLDI0MTg0LDI0MjE4LDI0MjE1LDI0MjIwLDI0MjEzLDI0MjE0LDI0MzEwLDI0MzU4LDI0MzU5LDI0MzYxLDI0NDQ4LDI0NDQ5LDI0NDQ3LDI0NDQ0LDI0NTQxLDI0NTQ0LDI0NTczLDI0NTY1LDI0NTc1LDI0NTkxLDI0NTk2LDI0NjIzLDI0NjI5LDI0NTk4''@;'; put 'put ''LDI0NjE4LDI0NTk3LDI0NjA5LDI0NjE1LDI0NjE3LDI0NjE5LDI0NjAzLDI1MTEwLDI1MTA5LDI1MTUxLDI1MTUwLDI1MTUyLDI1MjE1LDI1Mjg5LDI1MjkyLDI1Mjg0LDI1Mjc5LDI1MjgyLDI1MjczLDI1Mjk4LDI1MzA3LDI1MjU5LDI1Mjk5LDI1MzAwLDI1MjkxLDI1Mjg4LDI1MjU2LDI1''@;'; put 'put ''Mjc3LDI1Mjc2LDI1Mjk2LDI1MzA1LDI1Mjg3LDI1MjkzLDI1MjY5LDI1MzA2LDI1MjY1LDI1MzA0LDI1MzAyLDI1MzAzLDI1Mjg2LDI1MjYwLDI1Mjk0LDI1OTE4LDI2MDIzLDI2MDQ0LDI2MTA2LDI2MTMyLDI2MTMxLDI2MTI0LDI2MTE4LDI2MTE0LDI2MTI2LDI2MTEyLDI2MTI3LDI2MTMz''@;'; put 'put ''LDI2MTIyLDI2MTE5LDI2MzgxLDI2Mzc5LDI2NDc3LDI2NTA3LDI2NTE3LDI2NDgxLDI2NTI0LDI2NDgzLDI2NDg3LDI2NTAzLDI2NTI1LDI2NTE5LDI2NDc5LDI2NDgwLDI2NDk1LDI2NTA1LDI2NDk0LDI2NTEyLDI2NDg1LDI2NTIyLDI2NTE1LDI2NDkyLDI2NDc0LDI2NDgyLDI3NDI3LDI3''@;'; put 'put ''NDk0LDI3NDk1LDI3NTE5LDI3NjY3LDI3Njc1LDI3ODc1LDI3ODgwLDI3ODkxLDI3ODI1LDI3ODUyLDI3ODc3LDI3ODI3LDI3ODM3LDI3ODM4LDI3ODM2LDI3ODc0LDI3ODE5LDI3ODYxLDI3ODU5LDI3ODMyLDI3ODQ0LDI3ODMzLDI3ODQxLDI3ODIyLDI3ODYzLDI3ODQ1LDI3ODg5LDI3ODM5''@;'; put 'put ''LDI3ODM1LDI3ODczLDI3ODY3LDI3ODUwLDI3ODIwLDI3ODg3LDI3ODY4LDI3ODYyLDI3ODcyLDI4ODIxLDI4ODE0LDI4ODE4LDI4ODEwLDI4ODI1LDI5MjI4LDI5MjI5LDI5MjQwLDI5MjU2LDI5Mjg3LDI5Mjg5LDI5Mzc2LDI5MzkwLDI5NDAxLDI5Mzk5LDI5MzkyLDI5NjA5LDI5NjA4LDI5''@;'; put 'put ''NTk5LDI5NjExLDI5NjA1LDMwMDEzLDMwMTA5LDMwMTA1LDMwMTA2LDMwMzQwLDMwNDAyLDMwNDUwLDMwNDUyLDMwNjkzLDMwNzE3LDMxMDM4LDMxMDQwLDMxMDQxLDMxMTc3LDMxMTc2LDMxMzU0LDMxMzUzLDMxNDgyLDMxOTk4LDMyNTk2LDMyNjUyLDMyNjUxLDMyNzczLDMyOTU0LDMyOTMz''@;'; put 'put ''LDMyOTMwLDMyOTQ1LDMyOTI5LDMyOTM5LDMyOTM3LDMyOTQ4LDMyOTM4LDMyOTQzLDMzMjUzLDMzMjc4LDMzMjkzLDMzNDU5LDMzNDM3LDMzNDMzLDMzNDUzLDMzNDY5LDMzNDM5LDMzNDY1LDMzNDU3LDMzNDUyLDMzNDQ1LDMzNDU1LDMzNDY0LDMzNDQzLDMzNDU2LDMzNDcwLDMzNDYzLDM0''@;'; put 'put ''MzgyLDM0NDE3LDIxMDIxLDM0OTIwLDM2NTU1LDM2ODE0LDM2ODIwLDM2ODE3LDM3MDQ1LDM3MDQ4LDM3MDQxLDM3MDQ2LDM3MzE5LDM3MzI5LDM4MjYzLDM4MjcyLDM4NDI4LDM4NDY0LDM4NDYzLDM4NDU5LDM4NDY4LDM4NDY2LDM4NTg1LDM4NjMyLDM4NzM4LDM4NzUwLDIwMTI3LDIwMTQx''@;'; put 'put ''LDIwMTQyLDIwNDQ5LDIwNDA1LDIwMzk5LDIwNDE1LDIwNDQ4LDIwNDMzLDIwNDMxLDIwNDQ1LDIwNDE5LDIwNDA2LDIwNDQwLDIwNDQ3LDIwNDI2LDIwNDM5LDIwMzk4LDIwNDMyLDIwNDIwLDIwNDE4LDIwNDQyLDIwNDMwLDIwNDQ2LDIwNDA3LDIwODIzLDIwODgyLDIwODgxLDIwODk2LDIx''@;'; put 'put ''MDcwLDIxMDU5LDIxMDY2LDIxMDY5LDIxMDY4LDIxMDY3LDIxMDYzLDIxMTkxLDIxMTkzLDIxMTg3LDIxMTg1LDIxMjYxLDIxMzM1LDIxMzcxLDIxNDAyLDIxNDY3LDIxNjc2LDIxNjk2LDIxNjcyLDIxNzEwLDIxNzA1LDIxNjg4LDIxNjcwLDIxNjgzLDIxNzAzLDIxNjk4LDIxNjkzLDIxNjc0''@;'; put 'put ''LDIxNjk3LDIxNzAwLDIxNzA0LDIxNjc5LDIxNjc1LDIxNjgxLDIxNjkxLDIxNjczLDIxNjcxLDIxNjk1LDIyMjcxLDIyNDAyLDIyNDExLDIyNDMyLDIyNDM1LDIyNDM0LDIyNDc4LDIyNDQ2LDIyNDE5LDIyODY5LDIyODY1LDIyODYzLDIyODYyLDIyODY0LDIzMDA0LDIzZTMsMjMwMzksMjMw''@;'; put 'put ''MTEsMjMwMTYsMjMwNDMsMjMwMTMsMjMwMTgsMjMwMDIsMjMwMTQsMjMwNDEsMjMwMzUsMjM0MDEsMjM0NTksMjM0NjIsMjM0NjAsMjM0NTgsMjM0NjEsMjM1NTMsMjM2MzAsMjM2MzEsMjM2MjksMjM2MjcsMjM3NjksMjM3NjIsMjQwNTUsMjQwOTMsMjQxMDEsMjQwOTUsMjQxODksMjQyMjQs''@;'; put 'put ''MjQyMzAsMjQzMTQsMjQzMjgsMjQzNjUsMjQ0MjEsMjQ0NTYsMjQ0NTMsMjQ0NTgsMjQ0NTksMjQ0NTUsMjQ0NjAsMjQ0NTcsMjQ1OTQsMjQ2MDUsMjQ2MDgsMjQ2MTMsMjQ1OTAsMjQ2MTYsMjQ2NTMsMjQ2ODgsMjQ2ODAsMjQ2NzQsMjQ2NDYsMjQ2NDMsMjQ2ODQsMjQ2ODMsMjQ2ODIsMjQ2''@;'; put 'put ''NzYsMjUxNTMsMjUzMDgsMjUzNjYsMjUzNTMsMjUzNDAsMjUzMjUsMjUzNDUsMjUzMjYsMjUzNDEsMjUzNTEsMjUzMjksMjUzMzUsMjUzMjcsMjUzMjQsMjUzNDIsMjUzMzIsMjUzNjEsMjUzNDYsMjU5MTksMjU5MjUsMjYwMjcsMjYwNDUsMjYwODIsMjYxNDksMjYxNTcsMjYxNDQsMjYxNTEs''@;'; put 'put ''MjYxNTksMjYxNDMsMjYxNTIsMjYxNjEsMjYxNDgsMjYzNTksMjY2MjMsMjY1NzksMjY2MDksMjY1ODAsMjY1NzYsMjY2MDQsMjY1NTAsMjY1NDMsMjY2MTMsMjY2MDEsMjY2MDcsMjY1NjQsMjY1NzcsMjY1NDgsMjY1ODYsMjY1OTcsMjY1NTIsMjY1NzUsMjY1OTAsMjY2MTEsMjY1NDQsMjY1''@;'; put 'put ''ODUsMjY1OTQsMjY1ODksMjY1NzgsMjc0OTgsMjc1MjMsMjc1MjYsMjc1NzMsMjc2MDIsMjc2MDcsMjc2NzksMjc4NDksMjc5MTUsMjc5NTQsMjc5NDYsMjc5NjksMjc5NDEsMjc5MTYsMjc5NTMsMjc5MzQsMjc5MjcsMjc5NjMsMjc5NjUsMjc5NjYsMjc5NTgsMjc5MzEsMjc4OTMsMjc5NjEs''@;'; put 'put ''Mjc5NDMsMjc5NjAsMjc5NDUsMjc5NTAsMjc5NTcsMjc5MTgsMjc5NDcsMjg4NDMsMjg4NTgsMjg4NTEsMjg4NDQsMjg4NDcsMjg4NDUsMjg4NTYsMjg4NDYsMjg4MzYsMjkyMzIsMjkyOTgsMjkyOTUsMjkzMDAsMjk0MTcsMjk0MDgsMjk0MDksMjk2MjMsMjk2NDIsMjk2MjcsMjk2MTgsMjk2''@;'; put 'put ''NDUsMjk2MzIsMjk2MTksMjk5NzgsMjk5OTcsMzAwMzEsMzAwMjgsMzAwMzAsMzAwMjcsMzAxMjMsMzAxMTYsMzAxMTcsMzAxMTQsMzAxMTUsMzAzMjgsMzAzNDIsMzAzNDMsMzAzNDQsMzA0MDgsMzA0MDYsMzA0MDMsMzA0MDUsMzA0NjUsMzA0NTcsMzA0NTYsMzA0NzMsMzA0NzUsMzA0NjIs''@;'; put 'put ''MzA0NjAsMzA0NzEsMzA2ODQsMzA3MjIsMzA3NDAsMzA3MzIsMzA3MzMsMzEwNDYsMzEwNDksMzEwNDgsMzEwNDcsMzExNjEsMzExNjIsMzExODUsMzExODYsMzExNzksMzEzNTksMzEzNjEsMzE0ODcsMzE0ODUsMzE4NjksMzIwMDIsMzIwMDUsMzJlMywzMjAwOSwzMjAwNywzMjAwNCwzMjAw''@;'; put 'put ''NiwzMjU2OCwzMjY1NCwzMjcwMywzMjc3MiwzMjc4NCwzMjc4MSwzMjc4NSwzMjgyMiwzMjk4MiwzMjk5NywzMjk4NiwzMjk2MywzMjk2NCwzMjk3MiwzMjk5MywzMjk4NywzMjk3NCwzMjk5MCwzMjk5NiwzMjk4OSwzMzI2OCwzMzMxNCwzMzUxMSwzMzUzOSwzMzU0MSwzMzUwNywzMzQ5OSwz''@;'; put 'put ''MzUxMCwzMzU0MCwzMzUwOSwzMzUzOCwzMzU0NSwzMzQ5MCwzMzQ5NSwzMzUyMSwzMzUzNywzMzUwMCwzMzQ5MiwzMzQ4OSwzMzUwMiwzMzQ5MSwzMzUwMywzMzUxOSwzMzU0MiwzNDM4NCwzNDQyNSwzNDQyNywzNDQyNiwzNDg5MywzNDkyMywzNTIwMSwzNTI4NCwzNTMzNiwzNTMzMCwzNTMz''@;'; put 'put ''MSwzNTk5OCwzNmUzLDM2MjEyLDM2MjExLDM2Mjc2LDM2NTU3LDM2NTU2LDM2ODQ4LDM2ODM4LDM2ODM0LDM2ODQyLDM2ODM3LDM2ODQ1LDM2ODQzLDM2ODM2LDM2ODQwLDM3MDY2LDM3MDcwLDM3MDU3LDM3MDU5LDM3MTk1LDM3MTk0LDM3MzI1LDM4Mjc0LDM4NDgwLDM4NDc1LDM4NDc2LDM4''@;'; put 'put ''NDc3LDM4NzU0LDM4NzYxLDM4ODU5LDM4ODkzLDM4ODk5LDM4OTEzLDM5MDgwLDM5MTMxLDM5MTM1LDM5MzE4LDM5MzIxLDIwMDU2LDIwMTQ3LDIwNDkyLDIwNDkzLDIwNTE1LDIwNDYzLDIwNTE4LDIwNTE3LDIwNDcyLDIwNTIxLDIwNTAyLDIwNDg2LDIwNTQwLDIwNTExLDIwNTA2LDIwNDk4''@;'; put 'put ''LDIwNDk3LDIwNDc0LDIwNDgwLDIwNTAwLDIwNTIwLDIwNDY1LDIwNTEzLDIwNDkxLDIwNTA1LDIwNTA0LDIwNDY3LDIwNDYyLDIwNTI1LDIwNTIyLDIwNDc4LDIwNTIzLDIwNDg5LDIwODYwLDIwOTAwLDIwOTAxLDIwODk4LDIwOTQxLDIwOTQwLDIwOTM0LDIwOTM5LDIxMDc4LDIxMDg0LDIx''@;'; put 'put ''MDc2LDIxMDgzLDIxMDg1LDIxMjkwLDIxMzc1LDIxNDA3LDIxNDA1LDIxNDcxLDIxNzM2LDIxNzc2LDIxNzYxLDIxODE1LDIxNzU2LDIxNzMzLDIxNzQ2LDIxNzY2LDIxNzU0LDIxNzgwLDIxNzM3LDIxNzQxLDIxNzI5LDIxNzY5LDIxNzQyLDIxNzM4LDIxNzM0LDIxNzk5LDIxNzY3LDIxNzU3''@;'; put 'put ''LDIxNzc1LDIyMjc1LDIyMjc2LDIyNDY2LDIyNDg0LDIyNDc1LDIyNDY3LDIyNTM3LDIyNzk5LDIyODcxLDIyODcyLDIyODc0LDIzMDU3LDIzMDY0LDIzMDY4LDIzMDcxLDIzMDY3LDIzMDU5LDIzMDIwLDIzMDcyLDIzMDc1LDIzMDgxLDIzMDc3LDIzMDUyLDIzMDQ5LDIzNDAzLDIzNjQwLDIz''@;'; put 'put ''NDcyLDIzNDc1LDIzNDc4LDIzNDc2LDIzNDcwLDIzNDc3LDIzNDgxLDIzNDgwLDIzNTU2LDIzNjMzLDIzNjM3LDIzNjMyLDIzNzg5LDIzODA1LDIzODAzLDIzNzg2LDIzNzg0LDIzNzkyLDIzNzk4LDIzODA5LDIzNzk2LDI0MDQ2LDI0MTA5LDI0MTA3LDI0MjM1LDI0MjM3LDI0MjMxLDI0MzY5''@;'; put 'put ''LDI0NDY2LDI0NDY1LDI0NDY0LDI0NjY1LDI0Njc1LDI0Njc3LDI0NjU2LDI0NjYxLDI0Njg1LDI0NjgxLDI0Njg3LDI0NzA4LDI0NzM1LDI0NzMwLDI0NzE3LDI0NzI0LDI0NzE2LDI0NzA5LDI0NzI2LDI1MTU5LDI1MzMxLDI1MzUyLDI1MzQzLDI1NDIyLDI1NDA2LDI1MzkxLDI1NDI5LDI1''@;'; put 'put ''NDEwLDI1NDE0LDI1NDIzLDI1NDE3LDI1NDAyLDI1NDI0LDI1NDA1LDI1Mzg2LDI1Mzg3LDI1Mzg0LDI1NDIxLDI1NDIwLDI1OTI4LDI1OTI5LDI2MDA5LDI2MDQ5LDI2MDUzLDI2MTc4LDI2MTg1LDI2MTkxLDI2MTc5LDI2MTk0LDI2MTg4LDI2MTgxLDI2MTc3LDI2MzYwLDI2Mzg4LDI2Mzg5''@;'; put 'put ''LDI2MzkxLDI2NjU3LDI2NjgwLDI2Njk2LDI2Njk0LDI2NzA3LDI2NjgxLDI2NjkwLDI2NzA4LDI2NjY1LDI2ODAzLDI2NjQ3LDI2NzAwLDI2NzA1LDI2Njg1LDI2NjEyLDI2NzA0LDI2Njg4LDI2Njg0LDI2NjkxLDI2NjY2LDI2NjkzLDI2NjQzLDI2NjQ4LDI2Njg5LDI3NTMwLDI3NTI5LDI3''@;'; put 'put ''NTc1LDI3NjgzLDI3Njg3LDI3Njg4LDI3Njg2LDI3Njg0LDI3ODg4LDI4MDEwLDI4MDUzLDI4MDQwLDI4MDM5LDI4MDA2LDI4MDI0LDI4MDIzLDI3OTkzLDI4MDUxLDI4MDEyLDI4MDQxLDI4MDE0LDI3OTk0LDI4MDIwLDI4MDA5LDI4MDQ0LDI4MDQyLDI4MDI1LDI4MDM3LDI4MDA1LDI4MDUy''@;'; put 'put ''LDI4ODc0LDI4ODg4LDI4OTAwLDI4ODg5LDI4ODcyLDI4ODc5LDI5MjQxLDI5MzA1LDI5NDM2LDI5NDMzLDI5NDM3LDI5NDMyLDI5NDMxLDI5NTc0LDI5Njc3LDI5NzA1LDI5Njc4LDI5NjY0LDI5Njc0LDI5NjYyLDMwMDM2LDMwMDQ1LDMwMDQ0LDMwMDQyLDMwMDQxLDMwMTQyLDMwMTQ5LDMw''@;'; put 'put ''MTUxLDMwMTMwLDMwMTMxLDMwMTQxLDMwMTQwLDMwMTM3LDMwMTQ2LDMwMTM2LDMwMzQ3LDMwMzg0LDMwNDEwLDMwNDEzLDMwNDE0LDMwNTA1LDMwNDk1LDMwNDk2LDMwNTA0LDMwNjk3LDMwNzY4LDMwNzU5LDMwNzc2LDMwNzQ5LDMwNzcyLDMwNzc1LDMwNzU3LDMwNzY1LDMwNzUyLDMwNzUx''@;'; put 'put ''LDMwNzcwLDMxMDYxLDMxMDU2LDMxMDcyLDMxMDcxLDMxMDYyLDMxMDcwLDMxMDY5LDMxMDYzLDMxMDY2LDMxMjA0LDMxMjAzLDMxMjA3LDMxMTk5LDMxMjA2LDMxMjA5LDMxMTkyLDMxMzY0LDMxMzY4LDMxNDQ5LDMxNDk0LDMxNTA1LDMxODgxLDMyMDMzLDMyMDIzLDMyMDExLDMyMDEwLDMy''@;'; put 'put ''MDMyLDMyMDM0LDMyMDIwLDMyMDE2LDMyMDIxLDMyMDI2LDMyMDI4LDMyMDEzLDMyMDI1LDMyMDI3LDMyNTcwLDMyNjA3LDMyNjYwLDMyNzA5LDMyNzA1LDMyNzc0LDMyNzkyLDMyNzg5LDMyNzkzLDMyNzkxLDMyODI5LDMyODMxLDMzMDA5LDMzMDI2LDMzMDA4LDMzMDI5LDMzMDA1LDMzMDEy''@;'; put 'put ''LDMzMDMwLDMzMDE2LDMzMDExLDMzMDMyLDMzMDIxLDMzMDM0LDMzMDIwLDMzMDA3LDMzMjYxLDMzMjYwLDMzMjgwLDMzMjk2LDMzMzIyLDMzMzIzLDMzMzIwLDMzMzI0LDMzNDY3LDMzNTc5LDMzNjE4LDMzNjIwLDMzNjEwLDMzNTkyLDMzNjE2LDMzNjA5LDMzNTg5LDMzNTg4LDMzNjE1LDMz''@;'; put 'put ''NTg2LDMzNTkzLDMzNTkwLDMzNTU5LDMzNjAwLDMzNTg1LDMzNTc2LDMzNjAzLDM0Mzg4LDM0NDQyLDM0NDc0LDM0NDUxLDM0NDY4LDM0NDczLDM0NDQ0LDM0NDY3LDM0NDYwLDM0OTI4LDM0OTM1LDM0OTQ1LDM0OTQ2LDM0OTQxLDM0OTM3LDM1MzUyLDM1MzQ0LDM1MzQyLDM1MzQwLDM1MzQ5''@;'; put 'put ''LDM1MzM4LDM1MzUxLDM1MzQ3LDM1MzUwLDM1MzQzLDM1MzQ1LDM1OTEyLDM1OTYyLDM1OTYxLDM2MDAxLDM2MDAyLDM2MjE1LDM2NTI0LDM2NTYyLDM2NTY0LDM2NTU5LDM2Nzg1LDM2ODY1LDM2ODcwLDM2ODU1LDM2ODY0LDM2ODU4LDM2ODUyLDM2ODY3LDM2ODYxLDM2ODY5LDM2ODU2LDM3''@;'; put 'put ''MDEzLDM3MDg5LDM3MDg1LDM3MDkwLDM3MjAyLDM3MTk3LDM3MTk2LDM3MzM2LDM3MzQxLDM3MzM1LDM3MzQwLDM3MzM3LDM4Mjc1LDM4NDk4LDM4NDk5LDM4NDk3LDM4NDkxLDM4NDkzLDM4NTAwLDM4NDg4LDM4NDk0LDM4NTg3LDM5MTM4LDM5MzQwLDM5NTkyLDM5NjQwLDM5NzE3LDM5NzMw''@;'; put 'put ''LDM5NzQwLDIwMDk0LDIwNjAyLDIwNjA1LDIwNTcyLDIwNTUxLDIwNTQ3LDIwNTU2LDIwNTcwLDIwNTUzLDIwNTgxLDIwNTk4LDIwNTU4LDIwNTY1LDIwNTk3LDIwNTk2LDIwNTk5LDIwNTU5LDIwNDk1LDIwNTkxLDIwNTg5LDIwODI4LDIwODg1LDIwOTc2LDIxMDk4LDIxMTAzLDIxMjAyLDIx''@;'; put 'put ''MjA5LDIxMjA4LDIxMjA1LDIxMjY0LDIxMjYzLDIxMjczLDIxMzExLDIxMzEyLDIxMzEwLDIxNDQzLDI2MzY0LDIxODMwLDIxODY2LDIxODYyLDIxODI4LDIxODU0LDIxODU3LDIxODI3LDIxODM0LDIxODA5LDIxODQ2LDIxODM5LDIxODQ1LDIxODA3LDIxODYwLDIxODE2LDIxODA2LDIxODUy''@;'; put 'put ''LDIxODA0LDIxODU5LDIxODExLDIxODI1LDIxODQ3LDIyMjgwLDIyMjgzLDIyMjgxLDIyNDk1LDIyNTMzLDIyNTM4LDIyNTM0LDIyNDk2LDIyNTAwLDIyNTIyLDIyNTMwLDIyNTgxLDIyNTE5LDIyNTIxLDIyODE2LDIyODgyLDIzMDk0LDIzMTA1LDIzMTEzLDIzMTQyLDIzMTQ2LDIzMTA0LDIz''@;'; put 'put ''MTAwLDIzMTM4LDIzMTMwLDIzMTEwLDIzMTE0LDIzNDA4LDIzNDk1LDIzNDkzLDIzNDkyLDIzNDkwLDIzNDg3LDIzNDk0LDIzNTYxLDIzNTYwLDIzNTU5LDIzNjQ4LDIzNjQ0LDIzNjQ1LDIzODE1LDIzODE0LDIzODIyLDIzODM1LDIzODMwLDIzODQyLDIzODI1LDIzODQ5LDIzODI4LDIzODMz''@;'; put 'put ''LDIzODQ0LDIzODQ3LDIzODMxLDI0MDM0LDI0MTIwLDI0MTE4LDI0MTE1LDI0MTE5LDI0MjQ3LDI0MjQ4LDI0MjQ2LDI0MjQ1LDI0MjU0LDI0MzczLDI0Mzc1LDI0NDA3LDI0NDI4LDI0NDI1LDI0NDI3LDI0NDcxLDI0NDczLDI0NDc4LDI0NDcyLDI0NDgxLDI0NDgwLDI0NDc2LDI0NzAzLDI0''@;'; put 'put ''NzM5LDI0NzEzLDI0NzM2LDI0NzQ0LDI0Nzc5LDI0NzU2LDI0ODA2LDI0NzY1LDI0NzczLDI0NzYzLDI0NzU3LDI0Nzk2LDI0NzY0LDI0NzkyLDI0Nzg5LDI0Nzc0LDI0Nzk5LDI0NzYwLDI0Nzk0LDI0Nzc1LDI1MTE0LDI1MTE1LDI1MTYwLDI1NTA0LDI1NTExLDI1NDU4LDI1NDk0LDI1NTA2''@;'; put 'put ''LDI1NTA5LDI1NDYzLDI1NDQ3LDI1NDk2LDI1NTE0LDI1NDU3LDI1NTEzLDI1NDgxLDI1NDc1LDI1NDk5LDI1NDUxLDI1NTEyLDI1NDc2LDI1NDgwLDI1NDk3LDI1NTA1LDI1NTE2LDI1NDkwLDI1NDg3LDI1NDcyLDI1NDY3LDI1NDQ5LDI1NDQ4LDI1NDY2LDI1OTQ5LDI1OTQyLDI1OTM3LDI1''@;'; put 'put ''OTQ1LDI1OTQzLDIxODU1LDI1OTM1LDI1OTQ0LDI1OTQxLDI1OTQwLDI2MDEyLDI2MDExLDI2MDI4LDI2MDYzLDI2MDU5LDI2MDYwLDI2MDYyLDI2MjA1LDI2MjAyLDI2MjEyLDI2MjE2LDI2MjE0LDI2MjA2LDI2MzYxLDIxMjA3LDI2Mzk1LDI2NzUzLDI2Nzk5LDI2Nzg2LDI2NzcxLDI2ODA1''@;'; put 'put ''LDI2NzUxLDI2NzQyLDI2ODAxLDI2NzkxLDI2Nzc1LDI2ODAwLDI2NzU1LDI2ODIwLDI2Nzk3LDI2NzU4LDI2NzU3LDI2NzcyLDI2NzgxLDI2NzkyLDI2NzgzLDI2Nzg1LDI2NzU0LDI3NDQyLDI3NTc4LDI3NjI3LDI3NjI4LDI3NjkxLDI4MDQ2LDI4MDkyLDI4MTQ3LDI4MTIxLDI4MDgyLDI4''@;'; put 'put ''MTI5LDI4MTA4LDI4MTMyLDI4MTU1LDI4MTU0LDI4MTY1LDI4MTAzLDI4MTA3LDI4MDc5LDI4MTEzLDI4MDc4LDI4MTI2LDI4MTUzLDI4MDg4LDI4MTUxLDI4MTQ5LDI4MTAxLDI4MTE0LDI4MTg2LDI4MDg1LDI4MTIyLDI4MTM5LDI4MTIwLDI4MTM4LDI4MTQ1LDI4MTQyLDI4MTM2LDI4MTAy''@;'; put 'put ''LDI4MTAwLDI4MDc0LDI4MTQwLDI4MDk1LDI4MTM0LDI4OTIxLDI4OTM3LDI4OTM4LDI4OTI1LDI4OTExLDI5MjQ1LDI5MzA5LDI5MzEzLDI5NDY4LDI5NDY3LDI5NDYyLDI5NDU5LDI5NDY1LDI5NTc1LDI5NzAxLDI5NzA2LDI5Njk5LDI5NzAyLDI5Njk0LDI5NzA5LDI5OTIwLDI5OTQyLDI5''@;'; put 'put ''OTQzLDI5OTgwLDI5OTg2LDMwMDUzLDMwMDU0LDMwMDUwLDMwMDY0LDMwMDk1LDMwMTY0LDMwMTY1LDMwMTMzLDMwMTU0LDMwMTU3LDMwMzUwLDMwNDIwLDMwNDE4LDMwNDI3LDMwNTE5LDMwNTI2LDMwNTI0LDMwNTE4LDMwNTIwLDMwNTIyLDMwODI3LDMwNzg3LDMwNzk4LDMxMDc3LDMxMDgw''@;'; put 'put ''LDMxMDg1LDMxMjI3LDMxMzc4LDMxMzgxLDMxNTIwLDMxNTI4LDMxNTE1LDMxNTMyLDMxNTI2LDMxNTEzLDMxNTE4LDMxNTM0LDMxODkwLDMxODk1LDMxODkzLDMyMDcwLDMyMDY3LDMyMTEzLDMyMDQ2LDMyMDU3LDMyMDYwLDMyMDY0LDMyMDQ4LDMyMDUxLDMyMDY4LDMyMDQ3LDMyMDY2LDMy''@;'; put 'put ''MDUwLDMyMDQ5LDMyNTczLDMyNjcwLDMyNjY2LDMyNzE2LDMyNzE4LDMyNzIyLDMyNzk2LDMyODQyLDMyODM4LDMzMDcxLDMzMDQ2LDMzMDU5LDMzMDY3LDMzMDY1LDMzMDcyLDMzMDYwLDMzMjgyLDMzMzMzLDMzMzM1LDMzMzM0LDMzMzM3LDMzNjc4LDMzNjk0LDMzNjg4LDMzNjU2LDMzNjk4''@;'; put 'put ''LDMzNjg2LDMzNzI1LDMzNzA3LDMzNjgyLDMzNjc0LDMzNjgzLDMzNjczLDMzNjk2LDMzNjU1LDMzNjU5LDMzNjYwLDMzNjcwLDMzNzAzLDM0Mzg5LDI0NDI2LDM0NTAzLDM0NDk2LDM0NDg2LDM0NTAwLDM0NDg1LDM0NTAyLDM0NTA3LDM0NDgxLDM0NDc5LDM0NTA1LDM0ODk5LDM0OTc0LDM0''@;'; put 'put ''OTUyLDM0OTg3LDM0OTYyLDM0OTY2LDM0OTU3LDM0OTU1LDM1MjE5LDM1MjE1LDM1MzcwLDM1MzU3LDM1MzYzLDM1MzY1LDM1Mzc3LDM1MzczLDM1MzU5LDM1MzU1LDM1MzYyLDM1OTEzLDM1OTMwLDM2MDA5LDM2MDEyLDM2MDExLDM2MDA4LDM2MDEwLDM2MDA3LDM2MTk5LDM2MTk4LDM2Mjg2''@;'; put 'put ''LDM2MjgyLDM2NTcxLDM2NTc1LDM2ODg5LDM2ODc3LDM2ODkwLDM2ODg3LDM2ODk5LDM2ODk1LDM2ODkzLDM2ODgwLDM2ODg1LDM2ODk0LDM2ODk2LDM2ODc5LDM2ODk4LDM2ODg2LDM2ODkxLDM2ODg0LDM3MDk2LDM3MTAxLDM3MTE3LDM3MjA3LDM3MzI2LDM3MzY1LDM3MzUwLDM3MzQ3LDM3''@;'; put 'put ''MzUxLDM3MzU3LDM3MzUzLDM4MjgxLDM4NTA2LDM4NTE3LDM4NTE1LDM4NTIwLDM4NTEyLDM4NTE2LDM4NTE4LDM4NTE5LDM4NTA4LDM4NTkyLDM4NjM0LDM4NjMzLDMxNDU2LDMxNDU1LDM4OTE0LDM4OTE1LDM5NzcwLDQwMTY1LDQwNTY1LDQwNTc1LDQwNjEzLDQwNjM1LDIwNjQyLDIwNjIx''@;'; put 'put ''LDIwNjEzLDIwNjMzLDIwNjI1LDIwNjA4LDIwNjMwLDIwNjMyLDIwNjM0LDI2MzY4LDIwOTc3LDIxMTA2LDIxMTA4LDIxMTA5LDIxMDk3LDIxMjE0LDIxMjEzLDIxMjExLDIxMzM4LDIxNDEzLDIxODgzLDIxODg4LDIxOTI3LDIxODg0LDIxODk4LDIxOTE3LDIxOTEyLDIxODkwLDIxOTE2LDIx''@;'; put 'put ''OTMwLDIxOTA4LDIxODk1LDIxODk5LDIxODkxLDIxOTM5LDIxOTM0LDIxOTE5LDIxODIyLDIxOTM4LDIxOTE0LDIxOTQ3LDIxOTMyLDIxOTM3LDIxODg2LDIxODk3LDIxOTMxLDIxOTEzLDIyMjg1LDIyNTc1LDIyNTcwLDIyNTgwLDIyNTY0LDIyNTc2LDIyNTc3LDIyNTYxLDIyNTU3LDIyNTYw''@;'; put 'put ''LDIyNzc3LDIyNzc4LDIyODgwLDIzMTU5LDIzMTk0LDIzMTY3LDIzMTg2LDIzMTk1LDIzMjA3LDIzNDExLDIzNDA5LDIzNTA2LDIzNTAwLDIzNTA3LDIzNTA0LDIzNTYyLDIzNTYzLDIzNjAxLDIzODg0LDIzODg4LDIzODYwLDIzODc5LDI0MDYxLDI0MTMzLDI0MTI1LDI0MTI4LDI0MTMxLDI0''@;'; put 'put ''MTkwLDI0MjY2LDI0MjU3LDI0MjU4LDI0MjYwLDI0MzgwLDI0NDI5LDI0NDg5LDI0NDkwLDI0NDg4LDI0Nzg1LDI0ODAxLDI0NzU0LDI0NzU4LDI0ODAwLDI0ODYwLDI0ODY3LDI0ODI2LDI0ODUzLDI0ODE2LDI0ODI3LDI0ODIwLDI0OTM2LDI0ODE3LDI0ODQ2LDI0ODIyLDI0ODQxLDI0ODMy''@;'; put 'put ''LDI0ODUwLDI1MTE5LDI1MTYxLDI1NTA3LDI1NDg0LDI1NTUxLDI1NTM2LDI1NTc3LDI1NTQ1LDI1NTQyLDI1NTQ5LDI1NTU0LDI1NTcxLDI1NTUyLDI1NTY5LDI1NTU4LDI1NTgxLDI1NTgyLDI1NDYyLDI1NTg4LDI1NTc4LDI1NTYzLDI1NjgyLDI1NTYyLDI1NTkzLDI1OTUwLDI1OTU4LDI1''@;'; put 'put ''OTU0LDI1OTU1LDI2MDAxLDI2ZTMsMjYwMzEsMjYyMjIsMjYyMjQsMjYyMjgsMjYyMzAsMjYyMjMsMjYyNTcsMjYyMzQsMjYyMzgsMjYyMzEsMjYzNjYsMjYzNjcsMjYzOTksMjYzOTcsMjY4NzQsMjY4MzcsMjY4NDgsMjY4NDAsMjY4MzksMjY4ODUsMjY4NDcsMjY4NjksMjY4NjIsMjY4NTUs''@;'; put 'put ''MjY4NzMsMjY4MzQsMjY4NjYsMjY4NTEsMjY4MjcsMjY4MjksMjY4OTMsMjY4OTgsMjY4OTQsMjY4MjUsMjY4NDIsMjY5OTAsMjY4NzUsMjc0NTQsMjc0NTAsMjc0NTMsMjc1NDQsMjc1NDIsMjc1ODAsMjc2MzEsMjc2OTQsMjc2OTUsMjc2OTIsMjgyMDcsMjgyMTYsMjgyNDQsMjgxOTMsMjgy''@;'; put 'put ''MTAsMjgyNjMsMjgyMzQsMjgxOTIsMjgxOTcsMjgxOTUsMjgxODcsMjgyNTEsMjgyNDgsMjgxOTYsMjgyNDYsMjgyNzAsMjgyMDUsMjgxOTgsMjgyNzEsMjgyMTIsMjgyMzcsMjgyMTgsMjgyMDQsMjgyMjcsMjgxODksMjgyMjIsMjgzNjMsMjgyOTcsMjgxODUsMjgyMzgsMjgyNTksMjgyMjgs''@;'; put 'put ''MjgyNzQsMjgyNjUsMjgyNTUsMjg5NTMsMjg5NTQsMjg5NjYsMjg5NzYsMjg5NjEsMjg5ODIsMjkwMzgsMjg5NTYsMjkyNjAsMjkzMTYsMjkzMTIsMjk0OTQsMjk0NzcsMjk0OTIsMjk0ODEsMjk3NTQsMjk3MzgsMjk3NDcsMjk3MzAsMjk3MzMsMjk3NDksMjk3NTAsMjk3NDgsMjk3NDMsMjk3''@;'; put 'put ''MjMsMjk3MzQsMjk3MzYsMjk5ODksMjk5OTAsMzAwNTksMzAwNTgsMzAxNzgsMzAxNzEsMzAxNzksMzAxNjksMzAxNjgsMzAxNzQsMzAxNzYsMzAzMzEsMzAzMzIsMzAzNTgsMzAzNTUsMzAzODgsMzA0MjgsMzA1NDMsMzA3MDEsMzA4MTMsMzA4MjgsMzA4MzEsMzEyNDUsMzEyNDAsMzEyNDMs''@;'; put 'put ''MzEyMzcsMzEyMzIsMzEzODQsMzEzODMsMzEzODIsMzE0NjEsMzE0NTksMzE1NjEsMzE1NzQsMzE1NTgsMzE1NjgsMzE1NzAsMzE1NzIsMzE1NjUsMzE1NjMsMzE1NjcsMzE1NjksMzE5MDMsMzE5MDksMzIwOTQsMzIwODAsMzIxMDQsMzIwODUsMzIwNDMsMzIxMTAsMzIxMTQsMzIwOTcsMzIx''@;'; put 'put ''MDIsMzIwOTgsMzIxMTIsMzIxMTUsMjE4OTIsMzI3MjQsMzI3MjUsMzI3NzksMzI4NTAsMzI5MDEsMzMxMDksMzMxMDgsMzMwOTksMzMxMDUsMzMxMDIsMzMwODEsMzMwOTQsMzMwODYsMzMxMDAsMzMxMDcsMzMxNDAsMzMyOTgsMzMzMDgsMzM3NjksMzM3OTUsMzM3ODQsMzM4MDUsMzM3NjAs''@;'; put 'put ''MzM3MzMsMzM4MDMsMzM3MjksMzM3NzUsMzM3NzcsMzM3ODAsMzM4NzksMzM4MDIsMzM3NzYsMzM4MDQsMzM3NDAsMzM3ODksMzM3NzgsMzM3MzgsMzM4NDgsMzM4MDYsMzM3OTYsMzM3NTYsMzM3OTksMzM3NDgsMzM3NTksMzQzOTUsMzQ1MjcsMzQ1MjEsMzQ1NDEsMzQ1MTYsMzQ1MjMsMzQ1''@;'; put 'put ''MzIsMzQ1MTIsMzQ1MjYsMzQ5MDMsMzUwMDksMzUwMTAsMzQ5OTMsMzUyMDMsMzUyMjIsMzUzODcsMzU0MjQsMzU0MTMsMzU0MjIsMzUzODgsMzUzOTMsMzU0MTIsMzU0MTksMzU0MDgsMzUzOTgsMzUzODAsMzUzODYsMzUzODIsMzU0MTQsMzU5MzcsMzU5NzAsMzYwMTUsMzYwMjgsMzYwMTks''@;'; put 'put ''MzYwMjksMzYwMzMsMzYwMjcsMzYwMzIsMzYwMjAsMzYwMjMsMzYwMjIsMzYwMzEsMzYwMjQsMzYyMzQsMzYyMjksMzYyMjUsMzYzMDIsMzYzMTcsMzYyOTksMzYzMTQsMzYzMDUsMzYzMDAsMzYzMTUsMzYyOTQsMzY2MDMsMzY2MDAsMzY2MDQsMzY3NjQsMzY5MTAsMzY5MTcsMzY5MTMsMzY5''@;'; put 'put ''MjAsMzY5MTQsMzY5MTgsMzcxMjIsMzcxMDksMzcxMjksMzcxMTgsMzcyMTksMzcyMjEsMzczMjcsMzczOTYsMzczOTcsMzc0MTEsMzczODUsMzc0MDYsMzczODksMzczOTIsMzczODMsMzczOTMsMzgyOTIsMzgyODcsMzgyODMsMzgyODksMzgyOTEsMzgyOTAsMzgyODYsMzg1MzgsMzg1NDIs''@;'; put 'put ''Mzg1MzksMzg1MjUsMzg1MzMsMzg1MzQsMzg1NDEsMzg1MTQsMzg1MzIsMzg1OTMsMzg1OTcsMzg1OTYsMzg1OTgsMzg1OTksMzg2MzksMzg2NDIsMzg4NjAsMzg5MTcsMzg5MTgsMzg5MjAsMzkxNDMsMzkxNDYsMzkxNTEsMzkxNDUsMzkxNTQsMzkxNDksMzkzNDIsMzkzNDEsNDA2NDMsNDA2''@;'; put 'put ''NTMsNDA2NTcsMjAwOTgsMjA2NTMsMjA2NjEsMjA2NTgsMjA2NTksMjA2NzcsMjA2NzAsMjA2NTIsMjA2NjMsMjA2NjcsMjA2NTUsMjA2NzksMjExMTksMjExMTEsMjExMTcsMjEyMTUsMjEyMjIsMjEyMjAsMjEyMTgsMjEyMTksMjEyOTUsMjE5ODMsMjE5OTIsMjE5NzEsMjE5OTAsMjE5NjYs''@;'; put 'put ''MjE5ODAsMjE5NTksMjE5NjksMjE5ODcsMjE5ODgsMjE5OTksMjE5NzgsMjE5ODUsMjE5NTcsMjE5NTgsMjE5ODksMjE5NjEsMjIyOTAsMjIyOTEsMjI2MjIsMjI2MDksMjI2MTYsMjI2MTUsMjI2MTgsMjI2MTIsMjI2MzUsMjI2MDQsMjI2MzcsMjI2MDIsMjI2MjYsMjI2MTAsMjI2MDMsMjI4''@;'; put 'put ''ODcsMjMyMzMsMjMyNDEsMjMyNDQsMjMyMzAsMjMyMjksMjMyMjgsMjMyMTksMjMyMzQsMjMyMTgsMjM5MTMsMjM5MTksMjQxNDAsMjQxODUsMjQyNjUsMjQyNjQsMjQzMzgsMjQ0MDksMjQ0OTIsMjQ0OTQsMjQ4NTgsMjQ4NDcsMjQ5MDQsMjQ4NjMsMjQ4MTksMjQ4NTksMjQ4MjUsMjQ4MzMs''@;'; put 'put ''MjQ4NDAsMjQ5MTAsMjQ5MDgsMjQ5MDAsMjQ5MDksMjQ4OTQsMjQ4ODQsMjQ4NzEsMjQ4NDUsMjQ4MzgsMjQ4ODcsMjUxMjEsMjUxMjIsMjU2MTksMjU2NjIsMjU2MzAsMjU2NDIsMjU2NDUsMjU2NjEsMjU2NDQsMjU2MTUsMjU2MjgsMjU2MjAsMjU2MTMsMjU2NTQsMjU2MjIsMjU2MjMsMjU2''@;'; put 'put ''MDYsMjU5NjQsMjYwMTUsMjYwMzIsMjYyNjMsMjYyNDksMjYyNDcsMjYyNDgsMjYyNjIsMjYyNDQsMjYyNjQsMjYyNTMsMjYzNzEsMjcwMjgsMjY5ODksMjY5NzAsMjY5OTksMjY5NzYsMjY5NjQsMjY5OTcsMjY5MjgsMjcwMTAsMjY5NTQsMjY5ODQsMjY5ODcsMjY5NzQsMjY5NjMsMjcwMDEs''@;'; put 'put ''MjcwMTQsMjY5NzMsMjY5NzksMjY5NzEsMjc0NjMsMjc1MDYsMjc1ODQsMjc1ODMsMjc2MDMsMjc2NDUsMjgzMjIsMjgzMzUsMjgzNzEsMjgzNDIsMjgzNTQsMjgzMDQsMjgzMTcsMjgzNTksMjgzNTcsMjgzMjUsMjgzMTIsMjgzNDgsMjgzNDYsMjgzMzEsMjgzNjksMjgzMTAsMjgzMTYsMjgz''@;'; put 'put ''NTYsMjgzNzIsMjgzMzAsMjgzMjcsMjgzNDAsMjkwMDYsMjkwMTcsMjkwMzMsMjkwMjgsMjkwMDEsMjkwMzEsMjkwMjAsMjkwMzYsMjkwMzAsMjkwMDQsMjkwMjksMjkwMjIsMjg5OTgsMjkwMzIsMjkwMTQsMjkyNDIsMjkyNjYsMjk0OTUsMjk1MDksMjk1MDMsMjk1MDIsMjk4MDcsMjk3ODYs''@;'; put 'put ''Mjk3ODEsMjk3OTEsMjk3OTAsMjk3NjEsMjk3NTksMjk3ODUsMjk3ODcsMjk3ODgsMzAwNzAsMzAwNzIsMzAyMDgsMzAxOTIsMzAyMDksMzAxOTQsMzAxOTMsMzAyMDIsMzAyMDcsMzAxOTYsMzAxOTUsMzA0MzAsMzA0MzEsMzA1NTUsMzA1NzEsMzA1NjYsMzA1NTgsMzA1NjMsMzA1ODUsMzA1''@;'; put 'put ''NzAsMzA1NzIsMzA1NTYsMzA1NjUsMzA1NjgsMzA1NjIsMzA3MDIsMzA4NjIsMzA4OTYsMzA4NzEsMzA4NzIsMzA4NjAsMzA4NTcsMzA4NDQsMzA4NjUsMzA4NjcsMzA4NDcsMzEwOTgsMzExMDMsMzExMDUsMzM4MzYsMzExNjUsMzEyNjAsMzEyNTgsMzEyNjQsMzEyNTIsMzEyNjMsMzEyNjIs''@;'; put 'put ''MzEzOTEsMzEzOTIsMzE2MDcsMzE2ODAsMzE1ODQsMzE1OTgsMzE1OTEsMzE5MjEsMzE5MjMsMzE5MjUsMzIxNDcsMzIxMjEsMzIxNDUsMzIxMjksMzIxNDMsMzIwOTEsMzI2MjIsMzI2MTcsMzI2MTgsMzI2MjYsMzI2ODEsMzI2ODAsMzI2NzYsMzI4NTQsMzI4NTYsMzI5MDIsMzI5MDAsMzMx''@;'; put 'put ''MzcsMzMxMzYsMzMxNDQsMzMxMjUsMzMxMzQsMzMxMzksMzMxMzEsMzMxNDUsMzMxNDYsMzMxMjYsMzMyODUsMzMzNTEsMzM5MjIsMzM5MTEsMzM4NTMsMzM4NDEsMzM5MDksMzM4OTQsMzM4OTksMzM4NjUsMzM5MDAsMzM4ODMsMzM4NTIsMzM4NDUsMzM4ODksMzM4OTEsMzM4OTcsMzM5MDEs''@;'; put 'put ''MzM4NjIsMzQzOTgsMzQzOTYsMzQzOTksMzQ1NTMsMzQ1NzksMzQ1NjgsMzQ1NjcsMzQ1NjAsMzQ1NTgsMzQ1NTUsMzQ1NjIsMzQ1NjMsMzQ1NjYsMzQ1NzAsMzQ5MDUsMzUwMzksMzUwMjgsMzUwMzMsMzUwMzYsMzUwMzIsMzUwMzcsMzUwNDEsMzUwMTgsMzUwMjksMzUwMjYsMzUyMjgsMzUy''@;'; put 'put ''OTksMzU0MzUsMzU0NDIsMzU0NDMsMzU0MzAsMzU0MzMsMzU0NDAsMzU0NjMsMzU0NTIsMzU0MjcsMzU0ODgsMzU0NDEsMzU0NjEsMzU0MzcsMzU0MjYsMzU0MzgsMzU0MzYsMzU0NDksMzU0NTEsMzUzOTAsMzU0MzIsMzU5MzgsMzU5NzgsMzU5NzcsMzYwNDIsMzYwMzksMzYwNDAsMzYwMzYs''@;'; put 'put ''MzYwMTgsMzYwMzUsMzYwMzQsMzYwMzcsMzYzMjEsMzYzMTksMzYzMjgsMzYzMzUsMzYzMzksMzYzNDYsMzYzMzAsMzYzMjQsMzYzMjYsMzY1MzAsMzY2MTEsMzY2MTcsMzY2MDYsMzY2MTgsMzY3NjcsMzY3ODYsMzY5MzksMzY5MzgsMzY5NDcsMzY5MzAsMzY5NDgsMzY5MjQsMzY5NDksMzY5''@;'; put 'put ''NDQsMzY5MzUsMzY5NDMsMzY5NDIsMzY5NDEsMzY5NDUsMzY5MjYsMzY5MjksMzcxMzgsMzcxNDMsMzcyMjgsMzcyMjYsMzcyMjUsMzczMjEsMzc0MzEsMzc0NjMsMzc0MzIsMzc0MzcsMzc0NDAsMzc0MzgsMzc0NjcsMzc0NTEsMzc0NzYsMzc0NTcsMzc0MjgsMzc0NDksMzc0NTMsMzc0NDUs''@;'; put 'put ''Mzc0MzMsMzc0MzksMzc0NjYsMzgyOTYsMzg1NTIsMzg1NDgsMzg1NDksMzg2MDUsMzg2MDMsMzg2MDEsMzg2MDIsMzg2NDcsMzg2NTEsMzg2NDksMzg2NDYsMzg3NDIsMzg3NzIsMzg3NzQsMzg5MjgsMzg5MjksMzg5MzEsMzg5MjIsMzg5MzAsMzg5MjQsMzkxNjQsMzkxNTYsMzkxNjUsMzkx''@;'; put 'put ''NjYsMzkzNDcsMzkzNDUsMzkzNDgsMzk2NDksNDAxNjksNDA1NzgsNDA3MTgsNDA3MjMsNDA3MzYsMjA3MTEsMjA3MTgsMjA3MDksMjA2OTQsMjA3MTcsMjA2OTgsMjA2OTMsMjA2ODcsMjA2ODksMjA3MjEsMjA2ODYsMjA3MTMsMjA4MzQsMjA5NzksMjExMjMsMjExMjIsMjEyOTcsMjE0MjEs''@;'; put 'put ''MjIwMTQsMjIwMTYsMjIwNDMsMjIwMzksMjIwMTMsMjIwMzYsMjIwMjIsMjIwMjUsMjIwMjksMjIwMzAsMjIwMDcsMjIwMzgsMjIwNDcsMjIwMjQsMjIwMzIsMjIwMDYsMjIyOTYsMjIyOTQsMjI2NDUsMjI2NTQsMjI2NTksMjI2NzUsMjI2NjYsMjI2NDksMjI2NjEsMjI2NTMsMjI3ODEsMjI4''@;'; put 'put ''MjEsMjI4MTgsMjI4MjAsMjI4OTAsMjI4ODksMjMyNjUsMjMyNzAsMjMyNzMsMjMyNTUsMjMyNTQsMjMyNTYsMjMyNjcsMjM0MTMsMjM1MTgsMjM1MjcsMjM1MjEsMjM1MjUsMjM1MjYsMjM1MjgsMjM1MjIsMjM1MjQsMjM1MTksMjM1NjUsMjM2NTAsMjM5NDAsMjM5NDMsMjQxNTUsMjQxNjMs''@;'; put 'put ''MjQxNDksMjQxNTEsMjQxNDgsMjQyNzUsMjQyNzgsMjQzMzAsMjQzOTAsMjQ0MzIsMjQ1MDUsMjQ5MDMsMjQ4OTUsMjQ5MDcsMjQ5NTEsMjQ5MzAsMjQ5MzEsMjQ5MjcsMjQ5MjIsMjQ5MjAsMjQ5NDksMjUxMzAsMjU3MzUsMjU2ODgsMjU2ODQsMjU3NjQsMjU3MjAsMjU2OTUsMjU3MjIsMjU2''@;'; put 'put ''ODEsMjU3MDMsMjU2NTIsMjU3MDksMjU3MjMsMjU5NzAsMjYwMTcsMjYwNzEsMjYwNzAsMjYyNzQsMjYyODAsMjYyNjksMjcwMzYsMjcwNDgsMjcwMjksMjcwNzMsMjcwNTQsMjcwOTEsMjcwODMsMjcwMzUsMjcwNjMsMjcwNjcsMjcwNTEsMjcwNjAsMjcwODgsMjcwODUsMjcwNTMsMjcwODQs''@;'; put 'put ''MjcwNDYsMjcwNzUsMjcwNDMsMjc0NjUsMjc0NjgsMjc2OTksMjg0NjcsMjg0MzYsMjg0MTQsMjg0MzUsMjg0MDQsMjg0NTcsMjg0NzgsMjg0NDgsMjg0NjAsMjg0MzEsMjg0MTgsMjg0NTAsMjg0MTUsMjgzOTksMjg0MjIsMjg0NjUsMjg0NzIsMjg0NjYsMjg0NTEsMjg0MzcsMjg0NTksMjg0''@;'; put 'put ''NjMsMjg1NTIsMjg0NTgsMjgzOTYsMjg0MTcsMjg0MDIsMjgzNjQsMjg0MDcsMjkwNzYsMjkwODEsMjkwNTMsMjkwNjYsMjkwNjAsMjkwNzQsMjkyNDYsMjkzMzAsMjkzMzQsMjk1MDgsMjk1MjAsMjk3OTYsMjk3OTUsMjk4MDIsMjk4MDgsMjk4MDUsMjk5NTYsMzAwOTcsMzAyNDcsMzAyMjEs''@;'; put 'put ''MzAyMTksMzAyMTcsMzAyMjcsMzA0MzMsMzA0MzUsMzA1OTYsMzA1ODksMzA1OTEsMzA1NjEsMzA5MTMsMzA4NzksMzA4ODcsMzA4OTksMzA4ODksMzA4ODMsMzExMTgsMzExMTksMzExMTcsMzEyNzgsMzEyODEsMzE0MDIsMzE0MDEsMzE0NjksMzE0NzEsMzE2NDksMzE2MzcsMzE2MjcsMzE2''@;'; put 'put ''MDUsMzE2MzksMzE2NDUsMzE2MzYsMzE2MzEsMzE2NzIsMzE2MjMsMzE2MjAsMzE5MjksMzE5MzMsMzE5MzQsMzIxODcsMzIxNzYsMzIxNTYsMzIxODksMzIxOTAsMzIxNjAsMzIyMDIsMzIxODAsMzIxNzgsMzIxNzcsMzIxODYsMzIxNjIsMzIxOTEsMzIxODEsMzIxODQsMzIxNzMsMzIyMTAs''@;'; put 'put ''MzIxOTksMzIxNzIsMzI2MjQsMzI3MzYsMzI3MzcsMzI3MzUsMzI4NjIsMzI4NTgsMzI5MDMsMzMxMDQsMzMxNTIsMzMxNjcsMzMxNjAsMzMxNjIsMzMxNTEsMzMxNTQsMzMyNTUsMzMyNzQsMzMyODcsMzMzMDAsMzMzMTAsMzMzNTUsMzM5OTMsMzM5ODMsMzM5OTAsMzM5ODgsMzM5NDUsMzM5''@;'; put 'put ''NTAsMzM5NzAsMzM5NDgsMzM5OTUsMzM5NzYsMzM5ODQsMzQwMDMsMzM5MzYsMzM5ODAsMzQwMDEsMzM5OTQsMzQ2MjMsMzQ1ODgsMzQ2MTksMzQ1OTQsMzQ1OTcsMzQ2MTIsMzQ1ODQsMzQ2NDUsMzQ2MTUsMzQ2MDEsMzUwNTksMzUwNzQsMzUwNjAsMzUwNjUsMzUwNjQsMzUwNjksMzUwNDgs''@;'; put 'put ''MzUwOTgsMzUwNTUsMzU0OTQsMzU0NjgsMzU0ODYsMzU0OTEsMzU0NjksMzU0ODksMzU0NzUsMzU0OTIsMzU0OTgsMzU0OTMsMzU0OTYsMzU0ODAsMzU0NzMsMzU0ODIsMzU0OTUsMzU5NDYsMzU5ODEsMzU5ODAsMzYwNTEsMzYwNDksMzYwNTAsMzYyMDMsMzYyNDksMzYyNDUsMzYzNDgsMzY2''@;'; put 'put ''MjgsMzY2MjYsMzY2MjksMzY2MjcsMzY3NzEsMzY5NjAsMzY5NTIsMzY5NTYsMzY5NjMsMzY5NTMsMzY5NTgsMzY5NjIsMzY5NTcsMzY5NTUsMzcxNDUsMzcxNDQsMzcxNTAsMzcyMzcsMzcyNDAsMzcyMzksMzcyMzYsMzc0OTYsMzc1MDQsMzc1MDksMzc1MjgsMzc1MjYsMzc0OTksMzc1MjMs''@;'; put 'put ''Mzc1MzIsMzc1NDQsMzc1MDAsMzc1MjEsMzgzMDUsMzgzMTIsMzgzMTMsMzgzMDcsMzgzMDksMzgzMDgsMzg1NTMsMzg1NTYsMzg1NTUsMzg2MDQsMzg2MTAsMzg2NTYsMzg3ODAsMzg3ODksMzg5MDIsMzg5MzUsMzg5MzYsMzkwODcsMzkwODksMzkxNzEsMzkxNzMsMzkxODAsMzkxNzcsMzkz''@;'; put 'put ''NjEsMzk1OTksMzk2MDAsMzk2NTQsMzk3NDUsMzk3NDYsNDAxODAsNDAxODIsNDAxNzksNDA2MzYsNDA3NjMsNDA3NzgsMjA3NDAsMjA3MzYsMjA3MzEsMjA3MjUsMjA3MjksMjA3MzgsMjA3NDQsMjA3NDUsMjA3NDEsMjA5NTYsMjExMjcsMjExMjgsMjExMjksMjExMzMsMjExMzAsMjEyMzIs''@;'; put 'put ''MjE0MjYsMjIwNjIsMjIwNzUsMjIwNzMsMjIwNjYsMjIwNzksMjIwNjgsMjIwNTcsMjIwOTksMjIwOTQsMjIxMDMsMjIxMzIsMjIwNzAsMjIwNjMsMjIwNjQsMjI2NTYsMjI2ODcsMjI2ODYsMjI3MDcsMjI2ODQsMjI3MDIsMjI2OTcsMjI2OTQsMjI4OTMsMjMzMDUsMjMyOTEsMjMzMDcsMjMy''@;'; put 'put ''ODUsMjMzMDgsMjMzMDQsMjM1MzQsMjM1MzIsMjM1MjksMjM1MzEsMjM2NTIsMjM2NTMsMjM5NjUsMjM5NTYsMjQxNjIsMjQxNTksMjQxNjEsMjQyOTAsMjQyODIsMjQyODcsMjQyODUsMjQyOTEsMjQyODgsMjQzOTIsMjQ0MzMsMjQ1MDMsMjQ1MDEsMjQ5NTAsMjQ5MzUsMjQ5NDIsMjQ5MjUs''@;'; put 'put ''MjQ5MTcsMjQ5NjIsMjQ5NTYsMjQ5NDQsMjQ5MzksMjQ5NTgsMjQ5OTksMjQ5NzYsMjUwMDMsMjQ5NzQsMjUwMDQsMjQ5ODYsMjQ5OTYsMjQ5ODAsMjUwMDYsMjUxMzQsMjU3MDUsMjU3MTEsMjU3MjEsMjU3NTgsMjU3NzgsMjU3MzYsMjU3NDQsMjU3NzYsMjU3NjUsMjU3NDcsMjU3NDksMjU3''@;'; put 'put ''NjksMjU3NDYsMjU3NzQsMjU3NzMsMjU3NzEsMjU3NTQsMjU3NzIsMjU3NTMsMjU3NjIsMjU3NzksMjU5NzMsMjU5NzUsMjU5NzYsMjYyODYsMjYyODMsMjYyOTIsMjYyODksMjcxNzEsMjcxNjcsMjcxMTIsMjcxMzcsMjcxNjYsMjcxNjEsMjcxMzMsMjcxNjksMjcxNTUsMjcxNDYsMjcxMjMs''@;'; put 'put ''MjcxMzgsMjcxNDEsMjcxMTcsMjcxNTMsMjc0NzIsMjc0NzAsMjc1NTYsMjc1ODksMjc1OTAsMjg0NzksMjg1NDAsMjg1NDgsMjg0OTcsMjg1MTgsMjg1MDAsMjg1NTAsMjg1MjUsMjg1MDcsMjg1MzYsMjg1MjYsMjg1NTgsMjg1MzgsMjg1MjgsMjg1MTYsMjg1NjcsMjg1MDQsMjgzNzMsMjg1''@;'; put 'put ''MjcsMjg1MTIsMjg1MTEsMjkwODcsMjkxMDAsMjkxMDUsMjkwOTYsMjkyNzAsMjkzMzksMjk1MTgsMjk1MjcsMjk4MDEsMjk4MzUsMjk4MjcsMjk4MjIsMjk4MjQsMzAwNzksMzAyNDAsMzAyNDksMzAyMzksMzAyNDQsMzAyNDYsMzAyNDEsMzAyNDIsMzAzNjIsMzAzOTQsMzA0MzYsMzA2MDYs''@;'; put 'put ''MzA1OTksMzA2MDQsMzA2MDksMzA2MDMsMzA5MjMsMzA5MTcsMzA5MDYsMzA5MjIsMzA5MTAsMzA5MzMsMzA5MDgsMzA5MjgsMzEyOTUsMzEyOTIsMzEyOTYsMzEyOTMsMzEyODcsMzEyOTEsMzE0MDcsMzE0MDYsMzE2NjEsMzE2NjUsMzE2ODQsMzE2NjgsMzE2ODYsMzE2ODcsMzE2ODEsMzE2''@;'; put 'put ''NDgsMzE2OTIsMzE5NDYsMzIyMjQsMzIyNDQsMzIyMzksMzIyNTEsMzIyMTYsMzIyMzYsMzIyMjEsMzIyMzIsMzIyMjcsMzIyMTgsMzIyMjIsMzIyMzMsMzIxNTgsMzIyMTcsMzIyNDIsMzIyNDksMzI2MjksMzI2MzEsMzI2ODcsMzI3NDUsMzI4MDYsMzMxNzksMzMxODAsMzMxODEsMzMxODQs''@;'; put 'put ''MzMxNzgsMzMxNzYsMzQwNzEsMzQxMDksMzQwNzQsMzQwMzAsMzQwOTIsMzQwOTMsMzQwNjcsMzQwNjUsMzQwODMsMzQwODEsMzQwNjgsMzQwMjgsMzQwODUsMzQwNDcsMzQwNTQsMzQ2OTAsMzQ2NzYsMzQ2NzgsMzQ2NTYsMzQ2NjIsMzQ2ODAsMzQ2NjQsMzQ2NDksMzQ2NDcsMzQ2MzYsMzQ2''@;'; put 'put ''NDMsMzQ5MDcsMzQ5MDksMzUwODgsMzUwNzksMzUwOTAsMzUwOTEsMzUwOTMsMzUwODIsMzU1MTYsMzU1MzgsMzU1MjcsMzU1MjQsMzU0NzcsMzU1MzEsMzU1NzYsMzU1MDYsMzU1MjksMzU1MjIsMzU1MTksMzU1MDQsMzU1NDIsMzU1MzMsMzU1MTAsMzU1MTMsMzU1NDcsMzU5MTYsMzU5MTgs''@;'; put 'put ''MzU5NDgsMzYwNjQsMzYwNjIsMzYwNzAsMzYwNjgsMzYwNzYsMzYwNzcsMzYwNjYsMzYwNjcsMzYwNjAsMzYwNzQsMzYwNjUsMzYyMDUsMzYyNTUsMzYyNTksMzYzOTUsMzYzNjgsMzYzODEsMzYzODYsMzYzNjcsMzYzOTMsMzYzODMsMzYzODUsMzYzODIsMzY1MzgsMzY2MzcsMzY2MzUsMzY2''@;'; put 'put ''MzksMzY2NDksMzY2NDYsMzY2NTAsMzY2MzYsMzY2MzgsMzY2NDUsMzY5NjksMzY5NzQsMzY5NjgsMzY5NzMsMzY5ODMsMzcxNjgsMzcxNjUsMzcxNTksMzcxNjksMzcyNTUsMzcyNTcsMzcyNTksMzcyNTEsMzc1NzMsMzc1NjMsMzc1NTksMzc2MTAsMzc1NDgsMzc2MDQsMzc1NjksMzc1NTUs''@;'; put 'put ''Mzc1NjQsMzc1ODYsMzc1NzUsMzc2MTYsMzc1NTQsMzgzMTcsMzgzMjEsMzg2NjAsMzg2NjIsMzg2NjMsMzg2NjUsMzg3NTIsMzg3OTcsMzg3OTUsMzg3OTksMzg5NDUsMzg5NTUsMzg5NDAsMzkwOTEsMzkxNzgsMzkxODcsMzkxODYsMzkxOTIsMzkzODksMzkzNzYsMzkzOTEsMzkzODcsMzkz''@;'; put 'put ''NzcsMzkzODEsMzkzNzgsMzkzODUsMzk2MDcsMzk2NjIsMzk2NjMsMzk3MTksMzk3NDksMzk3NDgsMzk3OTksMzk3OTEsNDAxOTgsNDAyMDEsNDAxOTUsNDA2MTcsNDA2MzgsNDA2NTQsMjI2OTYsNDA3ODYsMjA3NTQsMjA3NjAsMjA3NTYsMjA3NTIsMjA3NTcsMjA4NjQsMjA5MDYsMjA5NTcs''@;'; put 'put ''MjExMzcsMjExMzksMjEyMzUsMjIxMDUsMjIxMjMsMjIxMzcsMjIxMjEsMjIxMTYsMjIxMzYsMjIxMjIsMjIxMjAsMjIxMTcsMjIxMjksMjIxMjcsMjIxMjQsMjIxMTQsMjIxMzQsMjI3MjEsMjI3MTgsMjI3MjcsMjI3MjUsMjI4OTQsMjMzMjUsMjMzNDgsMjM0MTYsMjM1MzYsMjM1NjYsMjQz''@;'; put 'put ''OTQsMjUwMTAsMjQ5NzcsMjUwMDEsMjQ5NzAsMjUwMzcsMjUwMTQsMjUwMjIsMjUwMzQsMjUwMzIsMjUxMzYsMjU3OTcsMjU3OTMsMjU4MDMsMjU3ODcsMjU3ODgsMjU4MTgsMjU3OTYsMjU3OTksMjU3OTQsMjU4MDUsMjU3OTEsMjU4MTAsMjU4MTIsMjU3OTAsMjU5NzIsMjYzMTAsMjYzMTMs''@;'; put 'put ''MjYyOTcsMjYzMDgsMjYzMTEsMjYyOTYsMjcxOTcsMjcxOTIsMjcxOTQsMjcyMjUsMjcyNDMsMjcyMjQsMjcxOTMsMjcyMDQsMjcyMzQsMjcyMzMsMjcyMTEsMjcyMDcsMjcxODksMjcyMzEsMjcyMDgsMjc0ODEsMjc1MTEsMjc2NTMsMjg2MTAsMjg1OTMsMjg1NzcsMjg2MTEsMjg1ODAsMjg2''@;'; put 'put ''MDksMjg1ODMsMjg1OTUsMjg2MDgsMjg2MDEsMjg1OTgsMjg1ODIsMjg1NzYsMjg1OTYsMjkxMTgsMjkxMjksMjkxMzYsMjkxMzgsMjkxMjgsMjkxNDEsMjkxMTMsMjkxMzQsMjkxNDUsMjkxNDgsMjkxMjMsMjkxMjQsMjk1NDQsMjk4NTIsMjk4NTksMjk4NDgsMjk4NTUsMjk4NTQsMjk5MjIs''@;'; put 'put ''Mjk5NjQsMjk5NjUsMzAyNjAsMzAyNjQsMzAyNjYsMzA0MzksMzA0MzcsMzA2MjQsMzA2MjIsMzA2MjMsMzA2MjksMzA5NTIsMzA5MzgsMzA5NTYsMzA5NTEsMzExNDIsMzEzMDksMzEzMTAsMzEzMDIsMzEzMDgsMzEzMDcsMzE0MTgsMzE3MDUsMzE3NjEsMzE2ODksMzE3MTYsMzE3MDcsMzE3''@;'; put 'put ''MTMsMzE3MjEsMzE3MTgsMzE5NTcsMzE5NTgsMzIyNjYsMzIyNzMsMzIyNjQsMzIyODMsMzIyOTEsMzIyODYsMzIyODUsMzIyNjUsMzIyNzIsMzI2MzMsMzI2OTAsMzI3NTIsMzI3NTMsMzI3NTAsMzI4MDgsMzMyMDMsMzMxOTMsMzMxOTIsMzMyNzUsMzMyODgsMzMzNjgsMzMzNjksMzQxMjIs''@;'; put 'put ''MzQxMzcsMzQxMjAsMzQxNTIsMzQxNTMsMzQxMTUsMzQxMjEsMzQxNTcsMzQxNTQsMzQxNDIsMzQ2OTEsMzQ3MTksMzQ3MTgsMzQ3MjIsMzQ3MDEsMzQ5MTMsMzUxMTQsMzUxMjIsMzUxMDksMzUxMTUsMzUxMDUsMzUyNDIsMzUyMzgsMzU1NTgsMzU1NzgsMzU1NjMsMzU1NjksMzU1ODQsMzU1''@;'; put 'put ''NDgsMzU1NTksMzU1NjYsMzU1ODIsMzU1ODUsMzU1ODYsMzU1NzUsMzU1NjUsMzU1NzEsMzU1NzQsMzU1ODAsMzU5NDcsMzU5NDksMzU5ODcsMzYwODQsMzY0MjAsMzY0MDEsMzY0MDQsMzY0MTgsMzY0MDksMzY0MDUsMzY2NjcsMzY2NTUsMzY2NjQsMzY2NTksMzY3NzYsMzY3NzQsMzY5ODEs''@;'; put 'put ''MzY5ODAsMzY5ODQsMzY5NzgsMzY5ODgsMzY5ODYsMzcxNzIsMzcyNjYsMzc2NjQsMzc2ODYsMzc2MjQsMzc2ODMsMzc2NzksMzc2NjYsMzc2MjgsMzc2NzUsMzc2MzYsMzc2NTgsMzc2NDgsMzc2NzAsMzc2NjUsMzc2NTMsMzc2NzgsMzc2NTcsMzgzMzEsMzg1NjcsMzg1NjgsMzg1NzAsMzg2''@;'; put 'put ''MTMsMzg2NzAsMzg2NzMsMzg2NzgsMzg2NjksMzg2NzUsMzg2NzEsMzg3NDcsMzg3NDgsMzg3NTgsMzg4MDgsMzg5NjAsMzg5NjgsMzg5NzEsMzg5NjcsMzg5NTcsMzg5NjksMzg5NDgsMzkxODQsMzkyMDgsMzkxOTgsMzkxOTUsMzkyMDEsMzkxOTQsMzk0MDUsMzkzOTQsMzk0MDksMzk2MDgs''@;'; put 'put ''Mzk2MTIsMzk2NzUsMzk2NjEsMzk3MjAsMzk4MjUsNDAyMTMsNDAyMjcsNDAyMzAsNDAyMzIsNDAyMTAsNDAyMTksNDA2NjQsNDA2NjAsNDA4NDUsNDA4NjAsMjA3NzgsMjA3NjcsMjA3NjksMjA3ODYsMjEyMzcsMjIxNTgsMjIxNDQsMjIxNjAsMjIxNDksMjIxNTEsMjIxNTksMjI3NDEsMjI3''@;'; put 'put ''MzksMjI3MzcsMjI3MzQsMjMzNDQsMjMzMzgsMjMzMzIsMjM0MTgsMjM2MDcsMjM2NTYsMjM5OTYsMjM5OTQsMjM5OTcsMjM5OTIsMjQxNzEsMjQzOTYsMjQ1MDksMjUwMzMsMjUwMjYsMjUwMzEsMjUwNjIsMjUwMzUsMjUxMzgsMjUxNDAsMjU4MDYsMjU4MDIsMjU4MTYsMjU4MjQsMjU4NDAs''@;'; put 'put ''MjU4MzAsMjU4MzYsMjU4NDEsMjU4MjYsMjU4MzcsMjU5ODYsMjU5ODcsMjYzMjksMjYzMjYsMjcyNjQsMjcyODQsMjcyNjgsMjcyOTgsMjcyOTIsMjczNTUsMjcyOTksMjcyNjIsMjcyODcsMjcyODAsMjcyOTYsMjc0ODQsMjc1NjYsMjc2MTAsMjc2NTYsMjg2MzIsMjg2NTcsMjg2MzksMjg2''@;'; put 'put ''NDAsMjg2MzUsMjg2NDQsMjg2NTEsMjg2NTUsMjg1NDQsMjg2NTIsMjg2NDEsMjg2NDksMjg2MjksMjg2NTQsMjg2NTYsMjkxNTksMjkxNTEsMjkxNjYsMjkxNTgsMjkxNTcsMjkxNjUsMjkxNjQsMjkxNzIsMjkxNTIsMjkyMzcsMjkyNTQsMjk1NTIsMjk1NTQsMjk4NjUsMjk4NzIsMjk4NjIs''@;'; put 'put ''Mjk4NjQsMzAyNzgsMzAyNzQsMzAyODQsMzA0NDIsMzA2NDMsMzA2MzQsMzA2NDAsMzA2MzYsMzA2MzEsMzA2MzcsMzA3MDMsMzA5NjcsMzA5NzAsMzA5NjQsMzA5NTksMzA5NzcsMzExNDMsMzExNDYsMzEzMTksMzE0MjMsMzE3NTEsMzE3NTcsMzE3NDIsMzE3MzUsMzE3NTYsMzE3MTIsMzE5''@;'; put 'put ''NjgsMzE5NjQsMzE5NjYsMzE5NzAsMzE5NjcsMzE5NjEsMzE5NjUsMzIzMDIsMzIzMTgsMzIzMjYsMzIzMTEsMzIzMDYsMzIzMjMsMzIyOTksMzIzMTcsMzIzMDUsMzIzMjUsMzIzMjEsMzIzMDgsMzIzMTMsMzIzMjgsMzIzMDksMzIzMTksMzIzMDMsMzI1ODAsMzI3NTUsMzI3NjQsMzI4ODEs''@;'; put 'put ''MzI4ODIsMzI4ODAsMzI4NzksMzI4ODMsMzMyMjIsMzMyMTksMzMyMTAsMzMyMTgsMzMyMTYsMzMyMTUsMzMyMTMsMzMyMjUsMzMyMTQsMzMyNTYsMzMyODksMzMzOTMsMzQyMTgsMzQxODAsMzQxNzQsMzQyMDQsMzQxOTMsMzQxOTYsMzQyMjMsMzQyMDMsMzQxODMsMzQyMTYsMzQxODYsMzQ0''@;'; put 'put ''MDcsMzQ3NTIsMzQ3NjksMzQ3MzksMzQ3NzAsMzQ3NTgsMzQ3MzEsMzQ3NDcsMzQ3NDYsMzQ3NjAsMzQ3NjMsMzUxMzEsMzUxMjYsMzUxNDAsMzUxMjgsMzUxMzMsMzUyNDQsMzU1OTgsMzU2MDcsMzU2MDksMzU2MTEsMzU1OTQsMzU2MTYsMzU2MTMsMzU1ODgsMzU2MDAsMzU5MDUsMzU5MDMs''@;'; put 'put ''MzU5NTUsMzYwOTAsMzYwOTMsMzYwOTIsMzYwODgsMzYwOTEsMzYyNjQsMzY0MjUsMzY0MjcsMzY0MjQsMzY0MjYsMzY2NzYsMzY2NzAsMzY2NzQsMzY2NzcsMzY2NzEsMzY5OTEsMzY5ODksMzY5OTYsMzY5OTMsMzY5OTQsMzY5OTIsMzcxNzcsMzcyODMsMzcyNzgsMzcyNzYsMzc3MDksMzc3''@;'; put 'put ''NjIsMzc2NzIsMzc3NDksMzc3MDYsMzc3MzMsMzc3MDcsMzc2NTYsMzc3NTgsMzc3NDAsMzc3MjMsMzc3NDQsMzc3MjIsMzc3MTYsMzgzNDYsMzgzNDcsMzgzNDgsMzgzNDQsMzgzNDIsMzg1NzcsMzg1ODQsMzg2MTQsMzg2ODQsMzg2ODYsMzg4MTYsMzg4NjcsMzg5ODIsMzkwOTQsMzkyMjEs''@;'; put 'put ''Mzk0MjUsMzk0MjMsMzk4NTQsMzk4NTEsMzk4NTAsMzk4NTMsNDAyNTEsNDAyNTUsNDA1ODcsNDA2NTUsNDA2NzAsNDA2NjgsNDA2NjksNDA2NjcsNDA3NjYsNDA3NzksMjE0NzQsMjIxNjUsMjIxOTAsMjI3NDUsMjI3NDQsMjMzNTIsMjQ0MTMsMjUwNTksMjUxMzksMjU4NDQsMjU4NDIsMjU4''@;'; put 'put ''NTQsMjU4NjIsMjU4NTAsMjU4NTEsMjU4NDcsMjYwMzksMjYzMzIsMjY0MDYsMjczMTUsMjczMDgsMjczMzEsMjczMjMsMjczMjAsMjczMzAsMjczMTAsMjczMTEsMjc0ODcsMjc1MTIsMjc1NjcsMjg2ODEsMjg2ODMsMjg2NzAsMjg2NzgsMjg2NjYsMjg2ODksMjg2ODcsMjkxNzksMjkxODAs''@;'; put 'put ''MjkxODIsMjkxNzYsMjk1NTksMjk1NTcsMjk4NjMsMjk4ODcsMjk5NzMsMzAyOTQsMzAyOTYsMzAyOTAsMzA2NTMsMzA2NTUsMzA2NTEsMzA2NTIsMzA5OTAsMzExNTAsMzEzMjksMzEzMzAsMzEzMjgsMzE0MjgsMzE0MjksMzE3ODcsMzE3ODMsMzE3ODYsMzE3NzQsMzE3NzksMzE3NzcsMzE5''@;'; put 'put ''NzUsMzIzNDAsMzIzNDEsMzIzNTAsMzIzNDYsMzIzNTMsMzIzMzgsMzIzNDUsMzI1ODQsMzI3NjEsMzI3NjMsMzI4ODcsMzI4ODYsMzMyMjksMzMyMzEsMzMyOTAsMzQyNTUsMzQyMTcsMzQyNTMsMzQyNTYsMzQyNDksMzQyMjQsMzQyMzQsMzQyMzMsMzQyMTQsMzQ3OTksMzQ3OTYsMzQ4MDIs''@;'; put 'put ''MzQ3ODQsMzUyMDYsMzUyNTAsMzUzMTYsMzU2MjQsMzU2NDEsMzU2MjgsMzU2MjcsMzU5MjAsMzYxMDEsMzY0NDEsMzY0NTEsMzY0NTQsMzY0NTIsMzY0NDcsMzY0MzcsMzY1NDQsMzY2ODEsMzY2ODUsMzY5OTksMzY5OTUsMzdlMywzNzI5MSwzNzI5MiwzNzMyOCwzNzc4MCwzNzc3MCwzNzc4''@;'; put 'put ''MiwzNzc5NCwzNzgxMSwzNzgwNiwzNzgwNCwzNzgwOCwzNzc4NCwzNzc4NiwzNzc4MywzODM1NiwzODM1OCwzODM1MiwzODM1NywzODYyNiwzODYyMCwzODYxNywzODYxOSwzODYyMiwzODY5MiwzODgxOSwzODgyMiwzODgyOSwzODkwNSwzODk4OSwzODk5MSwzODk4OCwzODk5MCwzODk5NSwz''@;'; put 'put ''OTA5OCwzOTIzMCwzOTIzMSwzOTIyOSwzOTIxNCwzOTMzMywzOTQzOCwzOTYxNywzOTY4MywzOTY4NiwzOTc1OSwzOTc1OCwzOTc1NywzOTg4MiwzOTg4MSwzOTkzMywzOTg4MCwzOTg3Miw0MDI3Myw0MDI4NSw0MDI4OCw0MDY3Miw0MDcyNSw0MDc0OCwyMDc4NywyMjE4MSwyMjc1MCwyMjc1''@;'; put 'put ''MSwyMjc1NCwyMzU0MSw0MDg0OCwyNDMwMCwyNTA3NCwyNTA3OSwyNTA3OCwyNTA3NywyNTg1NiwyNTg3MSwyNjMzNiwyNjMzMywyNzM2NSwyNzM1NywyNzM1NCwyNzM0NywyODY5OSwyODcwMywyODcxMiwyODY5OCwyODcwMSwyODY5MywyODY5NiwyOTE5MCwyOTE5NywyOTI3MiwyOTM0Niwy''@;'; put 'put ''OTU2MCwyOTU2MiwyOTg4NSwyOTg5OCwyOTkyMywzMDA4NywzMDA4NiwzMDMwMywzMDMwNSwzMDY2MywzMTAwMSwzMTE1MywzMTMzOSwzMTMzNywzMTgwNiwzMTgwNywzMTgwMCwzMTgwNSwzMTc5OSwzMTgwOCwzMjM2MywzMjM2NSwzMjM3NywzMjM2MSwzMjM2MiwzMjY0NSwzMjM3MSwzMjY5''@;'; put 'put ''NCwzMjY5NywzMjY5NiwzMzI0MCwzNDI4MSwzNDI2OSwzNDI4MiwzNDI2MSwzNDI3NiwzNDI3NywzNDI5NSwzNDgxMSwzNDgyMSwzNDgyOSwzNDgwOSwzNDgxNCwzNTE2OCwzNTE2NywzNTE1OCwzNTE2NiwzNTY0OSwzNTY3NiwzNTY3MiwzNTY1NywzNTY3NCwzNTY2MiwzNTY2MywzNTY1NCwz''@;'; put 'put ''NTY3MywzNjEwNCwzNjEwNiwzNjQ3NiwzNjQ2NiwzNjQ4NywzNjQ3MCwzNjQ2MCwzNjQ3NCwzNjQ2OCwzNjY5MiwzNjY4NiwzNjc4MSwzNzAwMiwzNzAwMywzNzI5NywzNzI5NCwzNzg1NywzNzg0MSwzNzg1NSwzNzgyNywzNzgzMiwzNzg1MiwzNzg1MywzNzg0NiwzNzg1OCwzNzgzNywzNzg0''@;'; put 'put ''OCwzNzg2MCwzNzg0NywzNzg2NCwzODM2NCwzODU4MCwzODYyNywzODY5OCwzODY5NSwzODc1MywzODg3NiwzODkwNywzOTAwNiwzOWUzLDM5MDAzLDM5MTAwLDM5MjM3LDM5MjQxLDM5NDQ2LDM5NDQ5LDM5NjkzLDM5OTEyLDM5OTExLDM5ODk0LDM5ODk5LDQwMzI5LDQwMjg5LDQwMzA2LDQw''@;'; put 'put ''Mjk4LDQwMzAwLDQwNTk0LDQwNTk5LDQwNTk1LDQwNjI4LDIxMjQwLDIyMTg0LDIyMTk5LDIyMTk4LDIyMTk2LDIyMjA0LDIyNzU2LDIzMzYwLDIzMzYzLDIzNDIxLDIzNTQyLDI0MDA5LDI1MDgwLDI1MDgyLDI1ODgwLDI1ODc2LDI1ODgxLDI2MzQyLDI2NDA3LDI3MzcyLDI4NzM0LDI4NzIw''@;'; put 'put ''LDI4NzIyLDI5MjAwLDI5NTYzLDI5OTAzLDMwMzA2LDMwMzA5LDMxMDE0LDMxMDE4LDMxMDIwLDMxMDE5LDMxNDMxLDMxNDc4LDMxODIwLDMxODExLDMxODIxLDMxOTgzLDMxOTg0LDM2NzgyLDMyMzgxLDMyMzgwLDMyMzg2LDMyNTg4LDMyNzY4LDMzMjQyLDMzMzgyLDM0Mjk5LDM0Mjk3LDM0''@;'; put 'put ''MzIxLDM0Mjk4LDM0MzEwLDM0MzE1LDM0MzExLDM0MzE0LDM0ODM2LDM0ODM3LDM1MTcyLDM1MjU4LDM1MzIwLDM1Njk2LDM1NjkyLDM1Njg2LDM1Njk1LDM1Njc5LDM1NjkxLDM2MTExLDM2MTA5LDM2NDg5LDM2NDgxLDM2NDg1LDM2NDgyLDM3MzAwLDM3MzIzLDM3OTEyLDM3ODkxLDM3ODg1''@;'; put 'put ''LDM4MzY5LDM4NzA0LDM5MTA4LDM5MjUwLDM5MjQ5LDM5MzM2LDM5NDY3LDM5NDcyLDM5NDc5LDM5NDc3LDM5OTU1LDM5OTQ5LDQwNTY5LDQwNjI5LDQwNjgwLDQwNzUxLDQwNzk5LDQwODAzLDQwODAxLDIwNzkxLDIwNzkyLDIyMjA5LDIyMjA4LDIyMjEwLDIyODA0LDIzNjYwLDI0MDEzLDI1''@;'; put 'put ''MDg0LDI1MDg2LDI1ODg1LDI1ODg0LDI2MDA1LDI2MzQ1LDI3Mzg3LDI3Mzk2LDI3Mzg2LDI3NTcwLDI4NzQ4LDI5MjExLDI5MzUxLDI5OTEwLDI5OTA4LDMwMzEzLDMwNjc1LDMxODI0LDMyMzk5LDMyMzk2LDMyNzAwLDM0MzI3LDM0MzQ5LDM0MzMwLDM0ODUxLDM0ODUwLDM0ODQ5LDM0ODQ3''@;'; put 'put ''LDM1MTc4LDM1MTgwLDM1MjYxLDM1NzAwLDM1NzAzLDM1NzA5LDM2MTE1LDM2NDkwLDM2NDkzLDM2NDkxLDM2NzAzLDM2NzgzLDM3MzA2LDM3OTM0LDM3OTM5LDM3OTQxLDM3OTQ2LDM3OTQ0LDM3OTM4LDM3OTMxLDM4MzcwLDM4NzEyLDM4NzEzLDM4NzA2LDM4OTExLDM5MDE1LDM5MDEzLDM5''@;'; put 'put ''MjU1LDM5NDkzLDM5NDkxLDM5NDg4LDM5NDg2LDM5NjMxLDM5NzY0LDM5NzYxLDM5OTgxLDM5OTczLDQwMzY3LDQwMzcyLDQwMzg2LDQwMzc2LDQwNjA1LDQwNjg3LDQwNzI5LDQwNzk2LDQwODA2LDQwODA3LDIwNzk2LDIwNzk1LDIyMjE2LDIyMjE4LDIyMjE3LDIzNDIzLDI0MDIwLDI0MDE4''@;'; put 'put ''LDI0Mzk4LDI1MDg3LDI1ODkyLDI3NDAyLDI3NDg5LDI4NzUzLDI4NzYwLDI5NTY4LDI5OTI0LDMwMDkwLDMwMzE4LDMwMzE2LDMxMTU1LDMxODQwLDMxODM5LDMyODk0LDMyODkzLDMzMjQ3LDM1MTg2LDM1MTgzLDM1MzI0LDM1NzEyLDM2MTE4LDM2MTE5LDM2NDk3LDM2NDk5LDM2NzA1LDM3''@;'; put 'put ''MTkyLDM3OTU2LDM3OTY5LDM3OTcwLDM4NzE3LDM4NzE4LDM4ODUxLDM4ODQ5LDM5MDE5LDM5MjUzLDM5NTA5LDM5NTAxLDM5NjM0LDM5NzA2LDQwMDA5LDM5OTg1LDM5OTk4LDM5OTk1LDQwNDAzLDQwNDA3LDQwNzU2LDQwODEyLDQwODEwLDQwODUyLDIyMjIwLDI0MDIyLDI1MDg4LDI1ODkx''@;'; put 'put ''LDI1ODk5LDI1ODk4LDI2MzQ4LDI3NDA4LDI5OTE0LDMxNDM0LDMxODQ0LDMxODQzLDMxODQ1LDMyNDAzLDMyNDA2LDMyNDA0LDMzMjUwLDM0MzYwLDM0MzY3LDM0ODY1LDM1NzIyLDM3MDA4LDM3MDA3LDM3OTg3LDM3OTg0LDM3OTg4LDM4NzYwLDM5MDIzLDM5MjYwLDM5NTE0LDM5NTE1LDM5''@;'; put 'put ''NTExLDM5NjM1LDM5NjM2LDM5NjMzLDQwMDIwLDQwMDIzLDQwMDIyLDQwNDIxLDQwNjA3LDQwNjkyLDIyMjI1LDIyNzYxLDI1OTAwLDI4NzY2LDMwMzIxLDMwMzIyLDMwNjc5LDMyNTkyLDMyNjQ4LDM0ODcwLDM0ODczLDM0OTE0LDM1NzMxLDM1NzMwLDM1NzM0LDMzMzk5LDM2MTIzLDM3MzEy''@;'; put 'put ''LDM3OTk0LDM4NzIyLDM4NzI4LDM4NzI0LDM4ODU0LDM5MDI0LDM5NTE5LDM5NzE0LDM5NzY4LDQwMDMxLDQwNDQxLDQwNDQyLDQwNTcyLDQwNTczLDQwNzExLDQwODIzLDQwODE4LDI0MzA3LDI3NDE0LDI4NzcxLDMxODUyLDMxODU0LDM0ODc1LDM1MjY0LDM2NTEzLDM3MzEzLDM4MDAyLDM4''@;'; put 'put ''ZTMsMzkwMjUsMzkyNjIsMzk2MzgsMzk3MTUsNDA2NTIsMjg3NzIsMzA2ODIsMzU3MzgsMzgwMDcsMzg4NTcsMzk1MjIsMzk1MjUsMzI0MTIsMzU3NDAsMzY1MjIsMzczMTcsMzgwMTMsMzgwMTQsMzgwMTIsNDAwNTUsNDAwNTYsNDA2OTUsMzU5MjQsMzgwMTUsNDA0NzQsMjkyMjQsMzk1MzAs''@;'; put 'put ''Mzk3MjksNDA0NzUsNDA0NzgsMzE4NTgsOTMxMiw5MzEzLDkzMTQsOTMxNSw5MzE2LDkzMTcsOTMxOCw5MzE5LDkzMjAsOTMyMSw5MzMyLDkzMzMsOTMzNCw5MzM1LDkzMzYsOTMzNyw5MzM4LDkzMzksOTM0MCw5MzQxLDg1NjAsODU2MSw4NTYyLDg1NjMsODU2NCw4NTY1LDg1NjYsODU2Nyw4''@;'; put 'put ''NTY4LDg1NjksMjAwMjIsMjAwMzEsMjAxMDEsMjAxMjgsMjA4NjYsMjA4ODYsMjA5MDcsMjEyNDEsMjEzMDQsMjEzNTMsMjE0MzAsMjI3OTQsMjM0MjQsMjQwMjcsMTIwODMsMjQxOTEsMjQzMDgsMjQ0MDAsMjQ0MTcsMjU5MDgsMjYwODAsMzAwOTgsMzAzMjYsMzY3ODksMzg1ODIsMTY4LDcx''@;'; put 'put ''MCwxMjU0MSwxMjU0MiwxMjQ0NSwxMjQ0NiwxMjI5MSwyMDE4OSwxMjI5MywxMjI5NCwxMjI5NSwxMjU0MCw2NTMzOSw2NTM0MSwxMDA0NSwxMjM1MywxMjM1NCwxMjM1NSwxMjM1NiwxMjM1NywxMjM1OCwxMjM1OSwxMjM2MCwxMjM2MSwxMjM2MiwxMjM2MywxMjM2NCwxMjM2NSwxMjM2Niwx''@;'; put 'put ''MjM2NywxMjM2OCwxMjM2OSwxMjM3MCwxMjM3MSwxMjM3MiwxMjM3MywxMjM3NCwxMjM3NSwxMjM3NiwxMjM3NywxMjM3OCwxMjM3OSwxMjM4MCwxMjM4MSwxMjM4MiwxMjM4MywxMjM4NCwxMjM4NSwxMjM4NiwxMjM4NywxMjM4OCwxMjM4OSwxMjM5MCwxMjM5MSwxMjM5MiwxMjM5MywxMjM5''@;'; put 'put ''NCwxMjM5NSwxMjM5NiwxMjM5NywxMjM5OCwxMjM5OSwxMjQwMCwxMjQwMSwxMjQwMiwxMjQwMywxMjQwNCwxMjQwNSwxMjQwNiwxMjQwNywxMjQwOCwxMjQwOSwxMjQxMCwxMjQxMSwxMjQxMiwxMjQxMywxMjQxNCwxMjQxNSwxMjQxNiwxMjQxNywxMjQxOCwxMjQxOSwxMjQyMCwxMjQyMSwx''@;'; put 'put ''MjQyMiwxMjQyMywxMjQyNCwxMjQyNSwxMjQyNiwxMjQyNywxMjQyOCwxMjQyOSwxMjQzMCwxMjQzMSwxMjQzMiwxMjQzMywxMjQzNCwxMjQzNSwxMjQ0OSwxMjQ1MCwxMjQ1MSwxMjQ1MiwxMjQ1MywxMjQ1NCwxMjQ1NSwxMjQ1NiwxMjQ1NywxMjQ1OCwxMjQ1OSwxMjQ2MCwxMjQ2MSwxMjQ2''@;'; put 'put ''MiwxMjQ2MywxMjQ2NCwxMjQ2NSwxMjQ2NiwxMjQ2NywxMjQ2OCwxMjQ2OSwxMjQ3MCwxMjQ3MSwxMjQ3MiwxMjQ3MywxMjQ3NCwxMjQ3NSwxMjQ3NiwxMjQ3NywxMjQ3OCwxMjQ3OSwxMjQ4MCwxMjQ4MSwxMjQ4MiwxMjQ4MywxMjQ4NCwxMjQ4NSwxMjQ4NiwxMjQ4NywxMjQ4OCwxMjQ4OSwx''@;'; put 'put ''MjQ5MCwxMjQ5MSwxMjQ5MiwxMjQ5MywxMjQ5NCwxMjQ5NSwxMjQ5NiwxMjQ5NywxMjQ5OCwxMjQ5OSwxMjUwMCwxMjUwMSwxMjUwMiwxMjUwMywxMjUwNCwxMjUwNSwxMjUwNiwxMjUwNywxMjUwOCwxMjUwOSwxMjUxMCwxMjUxMSwxMjUxMiwxMjUxMywxMjUxNCwxMjUxNSwxMjUxNiwxMjUx''@;'; put 'put ''NywxMjUxOCwxMjUxOSwxMjUyMCwxMjUyMSwxMjUyMiwxMjUyMywxMjUyNCwxMjUyNSwxMjUyNiwxMjUyNywxMjUyOCwxMjUyOSwxMjUzMCwxMjUzMSwxMjUzMiwxMjUzMywxMjUzNCwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDI1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwx''@;'; put 'put ''MDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMTA1LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4Miwx''@;'; put 'put ''MDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMyw4Njc5LDg2MzIsODYzMywxMjc1MSwxMzEyNzYsMjAwNTgsMTMxMjEwLDIwOTk0LDE3NTUzLDQwODgwLDIw''@;'; put 'put ''ODcyLDQwODgxLDE2MTI4NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDY1NTA2LDY1NTA4LDY1Mjg3LDY1MjgyLDEyODQ5LDg0NzAsODQ4MSwxMjQ0MywxMjQ0NCwxMTkwNCwxMTkwOCwxMTkxMCwxMTkxMSwxMTkxMiwxMTkxNCwxMTkxNiwxMTkxNywxMTkyNSwxMTkzMiwx''@;'; put 'put ''MTkzMywxMTk0MSwxMTk0MywxMTk0NiwxMTk0OCwxMTk1MCwxMTk1OCwxMTk2NCwxMTk2NiwxMTk3NCwxMTk3OCwxMTk4MCwxMTk4MSwxMTk4MywxMTk5MCwxMTk5MSwxMTk5OCwxMjAwMyxudWxsLG51bGwsbnVsbCw2NDMsNTkyLDYwMyw1OTYsNjI5LDMzOSwyNDgsMzMxLDY1MCw2MTgsMjAw''@;'; put 'put ''MzQsMjAwNjAsMjA5ODEsMjEyNzQsMjEzNzgsMTk5NzUsMTk5ODAsMjAwMzksMjAxMDksMjIyMzEsNjQwMTIsMjM2NjIsMjQ0MzUsMTk5ODMsMjA4NzEsMTk5ODIsMjAwMTQsMjAxMTUsMjAxNjIsMjAxNjksMjAxNjgsMjA4ODgsMjEyNDQsMjEzNTYsMjE0MzMsMjIzMDQsMjI3ODcsMjI4Mjgs''@;'; put 'put ''MjM1NjgsMjQwNjMsMjYwODEsMjc1NzEsMjc1OTYsMjc2NjgsMjkyNDcsMjAwMTcsMjAwMjgsMjAyMDAsMjAxODgsMjAyMDEsMjAxOTMsMjAxODksMjAxODYsMjEwMDQsMjEyNzYsMjEzMjQsMjIzMDYsMjIzMDcsMjI4MDcsMjI4MzEsMjM0MjUsMjM0MjgsMjM1NzAsMjM2MTEsMjM2NjgsMjM2''@;'; put 'put ''NjcsMjQwNjgsMjQxOTIsMjQxOTQsMjQ1MjEsMjUwOTcsMjUxNjgsMjc2NjksMjc3MDIsMjc3MTUsMjc3MTEsMjc3MDcsMjkzNTgsMjkzNjAsMjk1NzgsMzExNjAsMzI5MDYsMzg0MzAsMjAyMzgsMjAyNDgsMjAyNjgsMjAyMTMsMjAyNDQsMjAyMDksMjAyMjQsMjAyMTUsMjAyMzIsMjAyNTMs''@;'; put 'put ''MjAyMjYsMjAyMjksMjAyNTgsMjAyNDMsMjAyMjgsMjAyMTIsMjAyNDIsMjA5MTMsMjEwMTEsMjEwMDEsMjEwMDgsMjExNTgsMjEyODIsMjEyNzksMjEzMjUsMjEzODYsMjE1MTEsMjIyNDEsMjIyMzksMjIzMTgsMjIzMTQsMjIzMjQsMjI4NDQsMjI5MTIsMjI5MDgsMjI5MTcsMjI5MDcsMjI5''@;'; put 'put ''MTAsMjI5MDMsMjI5MTEsMjMzODIsMjM1NzMsMjM1ODksMjM2NzYsMjM2NzQsMjM2NzUsMjM2NzgsMjQwMzEsMjQxODEsMjQxOTYsMjQzMjIsMjQzNDYsMjQ0MzYsMjQ1MzMsMjQ1MzIsMjQ1MjcsMjUxODAsMjUxODIsMjUxODgsMjUxODUsMjUxOTAsMjUxODYsMjUxNzcsMjUxODQsMjUxNzgs''@;'; put 'put ''MjUxODksMjYwOTUsMjYwOTQsMjY0MzAsMjY0MjUsMjY0MjQsMjY0MjcsMjY0MjYsMjY0MzEsMjY0MjgsMjY0MTksMjc2NzIsMjc3MTgsMjc3MzAsMjc3NDAsMjc3MjcsMjc3MjIsMjc3MzIsMjc3MjMsMjc3MjQsMjg3ODUsMjkyNzgsMjkzNjQsMjkzNjUsMjk1ODIsMjk5OTQsMzAzMzUsMzEz''@;'; put 'put ''NDksMzI1OTMsMzM0MDAsMzM0MDQsMzM0MDgsMzM0MDUsMzM0MDcsMzQzODEsMzUxOTgsMzcwMTcsMzcwMTUsMzcwMTYsMzcwMTksMzcwMTIsMzg0MzQsMzg0MzYsMzg0MzIsMzg0MzUsMjAzMTAsMjAyODMsMjAzMjIsMjAyOTcsMjAzMDcsMjAzMjQsMjAyODYsMjAzMjcsMjAzMDYsMjAzMTks''@;'; put 'put ''MjAyODksMjAzMTIsMjAyNjksMjAyNzUsMjAyODcsMjAzMjEsMjA4NzksMjA5MjEsMjEwMjAsMjEwMjIsMjEwMjUsMjExNjUsMjExNjYsMjEyNTcsMjEzNDcsMjEzNjIsMjEzOTAsMjEzOTEsMjE1NTIsMjE1NTksMjE1NDYsMjE1ODgsMjE1NzMsMjE1MjksMjE1MzIsMjE1NDEsMjE1MjgsMjE1''@;'; put 'put ''NjUsMjE1ODMsMjE1NjksMjE1NDQsMjE1NDAsMjE1NzUsMjIyNTQsMjIyNDcsMjIyNDUsMjIzMzcsMjIzNDEsMjIzNDgsMjIzNDUsMjIzNDcsMjIzNTQsMjI3OTAsMjI4NDgsMjI5NTAsMjI5MzYsMjI5NDQsMjI5MzUsMjI5MjYsMjI5NDYsMjI5MjgsMjI5MjcsMjI5NTEsMjI5NDUsMjM0Mzgs''@;'; put 'put ''MjM0NDIsMjM1OTIsMjM1OTQsMjM2OTMsMjM2OTUsMjM2ODgsMjM2OTEsMjM2ODksMjM2OTgsMjM2OTAsMjM2ODYsMjM2OTksMjM3MDEsMjQwMzIsMjQwNzQsMjQwNzgsMjQyMDMsMjQyMDEsMjQyMDQsMjQyMDAsMjQyMDUsMjQzMjUsMjQzNDksMjQ0NDAsMjQ0MzgsMjQ1MzAsMjQ1MjksMjQ1''@;'; put 'put ''MjgsMjQ1NTcsMjQ1NTIsMjQ1NTgsMjQ1NjMsMjQ1NDUsMjQ1NDgsMjQ1NDcsMjQ1NzAsMjQ1NTksMjQ1NjcsMjQ1NzEsMjQ1NzYsMjQ1NjQsMjUxNDYsMjUyMTksMjUyMjgsMjUyMzAsMjUyMzEsMjUyMzYsMjUyMjMsMjUyMDEsMjUyMTEsMjUyMTAsMjUyMDAsMjUyMTcsMjUyMjQsMjUyMDcs''@;'; put 'put ''MjUyMTMsMjUyMDIsMjUyMDQsMjU5MTEsMjYwOTYsMjYxMDAsMjYwOTksMjYwOTgsMjYxMDEsMjY0MzcsMjY0MzksMjY0NTcsMjY0NTMsMjY0NDQsMjY0NDAsMjY0NjEsMjY0NDUsMjY0NTgsMjY0NDMsMjc2MDAsMjc2NzMsMjc2NzQsMjc3NjgsMjc3NTEsMjc3NTUsMjc3ODAsMjc3ODcsMjc3''@;'; put 'put ''OTEsMjc3NjEsMjc3NTksMjc3NTMsMjc4MDIsMjc3NTcsMjc3ODMsMjc3OTcsMjc4MDQsMjc3NTAsMjc3NjMsMjc3NDksMjc3NzEsMjc3OTAsMjg3ODgsMjg3OTQsMjkyODMsMjkzNzUsMjkzNzMsMjkzNzksMjkzODIsMjkzNzcsMjkzNzAsMjkzODEsMjk1ODksMjk1OTEsMjk1ODcsMjk1ODgs''@;'; put 'put ''Mjk1ODYsMzAwMTAsMzAwMDksMzAxMDAsMzAxMDEsMzAzMzcsMzEwMzcsMzI4MjAsMzI5MTcsMzI5MjEsMzI5MTIsMzI5MTQsMzI5MjQsMzM0MjQsMzM0MjMsMzM0MTMsMzM0MjIsMzM0MjUsMzM0MjcsMzM0MTgsMzM0MTEsMzM0MTIsMzU5NjAsMzY4MDksMzY3OTksMzcwMjMsMzcwMjUsMzcw''@;'; put 'put ''MjksMzcwMjIsMzcwMzEsMzcwMjQsMzg0NDgsMzg0NDAsMzg0NDcsMzg0NDUsMjAwMTksMjAzNzYsMjAzNDgsMjAzNTcsMjAzNDksMjAzNTIsMjAzNTksMjAzNDIsMjAzNDAsMjAzNjEsMjAzNTYsMjAzNDMsMjAzMDAsMjAzNzUsMjAzMzAsMjAzNzgsMjAzNDUsMjAzNTMsMjAzNDQsMjAzNjgs''@;'; put 'put ''MjAzODAsMjAzNzIsMjAzODIsMjAzNzAsMjAzNTQsMjAzNzMsMjAzMzEsMjAzMzQsMjA4OTQsMjA5MjQsMjA5MjYsMjEwNDUsMjEwNDIsMjEwNDMsMjEwNjIsMjEwNDEsMjExODAsMjEyNTgsMjEyNTksMjEzMDgsMjEzOTQsMjEzOTYsMjE2MzksMjE2MzEsMjE2MzMsMjE2NDksMjE2MzQsMjE2''@;'; put 'put ''NDAsMjE2MTEsMjE2MjYsMjE2MzAsMjE2MDUsMjE2MTIsMjE2MjAsMjE2MDYsMjE2NDUsMjE2MTUsMjE2MDEsMjE2MDAsMjE2NTYsMjE2MDMsMjE2MDcsMjE2MDQsMjIyNjMsMjIyNjUsMjIzODMsMjIzODYsMjIzODEsMjIzNzksMjIzODUsMjIzODQsMjIzOTAsMjI0MDAsMjIzODksMjIzOTUs''@;'; put 'put ''MjIzODcsMjIzODgsMjIzNzAsMjIzNzYsMjIzOTcsMjI3OTYsMjI4NTMsMjI5NjUsMjI5NzAsMjI5OTEsMjI5OTAsMjI5NjIsMjI5ODgsMjI5NzcsMjI5NjYsMjI5NzIsMjI5NzksMjI5OTgsMjI5NjEsMjI5NzMsMjI5NzYsMjI5ODQsMjI5NjQsMjI5ODMsMjMzOTQsMjMzOTcsMjM0NDMsMjM0''@;'; put 'put ''NDUsMjM2MjAsMjM2MjMsMjM3MjYsMjM3MTYsMjM3MTIsMjM3MzMsMjM3MjcsMjM3MjAsMjM3MjQsMjM3MTEsMjM3MTUsMjM3MjUsMjM3MTQsMjM3MjIsMjM3MTksMjM3MDksMjM3MTcsMjM3MzQsMjM3MjgsMjM3MTgsMjQwODcsMjQwODQsMjQwODksMjQzNjAsMjQzNTQsMjQzNTUsMjQzNTYs''@;'; put 'put ''MjQ0MDQsMjQ0NTAsMjQ0NDYsMjQ0NDUsMjQ1NDIsMjQ1NDksMjQ2MjEsMjQ2MTQsMjQ2MDEsMjQ2MjYsMjQ1ODcsMjQ2MjgsMjQ1ODYsMjQ1OTksMjQ2MjcsMjQ2MDIsMjQ2MDYsMjQ2MjAsMjQ2MTAsMjQ1ODksMjQ1OTIsMjQ2MjIsMjQ1OTUsMjQ1OTMsMjQ1ODgsMjQ1ODUsMjQ2MDQsMjUx''@;'; put 'put ''MDgsMjUxNDksMjUyNjEsMjUyNjgsMjUyOTcsMjUyNzgsMjUyNTgsMjUyNzAsMjUyOTAsMjUyNjIsMjUyNjcsMjUyNjMsMjUyNzUsMjUyNTcsMjUyNjQsMjUyNzIsMjU5MTcsMjYwMjQsMjYwNDMsMjYxMjEsMjYxMDgsMjYxMTYsMjYxMzAsMjYxMjAsMjYxMDcsMjYxMTUsMjYxMjMsMjYxMjUs''@;'; put 'put ''MjYxMTcsMjYxMDksMjYxMjksMjYxMjgsMjYzNTgsMjYzNzgsMjY1MDEsMjY0NzYsMjY1MTAsMjY1MTQsMjY0ODYsMjY0OTEsMjY1MjAsMjY1MDIsMjY1MDAsMjY0ODQsMjY1MDksMjY1MDgsMjY0OTAsMjY1MjcsMjY1MTMsMjY1MjEsMjY0OTksMjY0OTMsMjY0OTcsMjY0ODgsMjY0ODksMjY1''@;'; put 'put ''MTYsMjc0MjksMjc1MjAsMjc1MTgsMjc2MTQsMjc2NzcsMjc3OTUsMjc4ODQsMjc4ODMsMjc4ODYsMjc4NjUsMjc4MzAsMjc4NjAsMjc4MjEsMjc4NzksMjc4MzEsMjc4NTYsMjc4NDIsMjc4MzQsMjc4NDMsMjc4NDYsMjc4ODUsMjc4OTAsMjc4NTgsMjc4NjksMjc4MjgsMjc3ODYsMjc4MDUs''@;'; put 'put ''Mjc3NzYsMjc4NzAsMjc4NDAsMjc5NTIsMjc4NTMsMjc4NDcsMjc4MjQsMjc4OTcsMjc4NTUsMjc4ODEsMjc4NTcsMjg4MjAsMjg4MjQsMjg4MDUsMjg4MTksMjg4MDYsMjg4MDQsMjg4MTcsMjg4MjIsMjg4MDIsMjg4MjYsMjg4MDMsMjkyOTAsMjkzOTgsMjkzODcsMjk0MDAsMjkzODUsMjk0''@;'; put 'put ''MDQsMjkzOTQsMjkzOTYsMjk0MDIsMjkzODgsMjkzOTMsMjk2MDQsMjk2MDEsMjk2MTMsMjk2MDYsMjk2MDIsMjk2MDAsMjk2MTIsMjk1OTcsMjk5MTcsMjk5MjgsMzAwMTUsMzAwMTYsMzAwMTQsMzAwOTIsMzAxMDQsMzAzODMsMzA0NTEsMzA0NDksMzA0NDgsMzA0NTMsMzA3MTIsMzA3MTYs''@;'; put 'put ''MzA3MTMsMzA3MTUsMzA3MTQsMzA3MTEsMzEwNDIsMzEwMzksMzExNzMsMzEzNTIsMzEzNTUsMzE0ODMsMzE4NjEsMzE5OTcsMzI4MjEsMzI5MTEsMzI5NDIsMzI5MzEsMzI5NTIsMzI5NDksMzI5NDEsMzMzMTIsMzM0NDAsMzM0NzIsMzM0NTEsMzM0MzQsMzM0MzIsMzM0MzUsMzM0NjEsMzM0''@;'; put 'put ''NDcsMzM0NTQsMzM0NjgsMzM0MzgsMzM0NjYsMzM0NjAsMzM0NDgsMzM0NDEsMzM0NDksMzM0NzQsMzM0NDQsMzM0NzUsMzM0NjIsMzM0NDIsMzQ0MTYsMzQ0MTUsMzQ0MTMsMzQ0MTQsMzU5MjYsMzY4MTgsMzY4MTEsMzY4MTksMzY4MTMsMzY4MjIsMzY4MjEsMzY4MjMsMzcwNDIsMzcwNDQs''@;'; put 'put ''MzcwMzksMzcwNDMsMzcwNDAsMzg0NTcsMzg0NjEsMzg0NjAsMzg0NTgsMzg0NjcsMjA0MjksMjA0MjEsMjA0MzUsMjA0MDIsMjA0MjUsMjA0MjcsMjA0MTcsMjA0MzYsMjA0NDQsMjA0NDEsMjA0MTEsMjA0MDMsMjA0NDMsMjA0MjMsMjA0MzgsMjA0MTAsMjA0MTYsMjA0MDksMjA0NjAsMjEw''@;'; put 'put ''NjAsMjEwNjUsMjExODQsMjExODYsMjEzMDksMjEzNzIsMjEzOTksMjEzOTgsMjE0MDEsMjE0MDAsMjE2OTAsMjE2NjUsMjE2NzcsMjE2NjksMjE3MTEsMjE2OTksMzM1NDksMjE2ODcsMjE2NzgsMjE3MTgsMjE2ODYsMjE3MDEsMjE3MDIsMjE2NjQsMjE2MTYsMjE2OTIsMjE2NjYsMjE2OTQs''@;'; put 'put ''MjE2MTgsMjE3MjYsMjE2ODAsMjI0NTMsMjI0MzAsMjI0MzEsMjI0MzYsMjI0MTIsMjI0MjMsMjI0MjksMjI0MjcsMjI0MjAsMjI0MjQsMjI0MTUsMjI0MjUsMjI0MzcsMjI0MjYsMjI0MjEsMjI3NzIsMjI3OTcsMjI4NjcsMjMwMDksMjMwMDYsMjMwMjIsMjMwNDAsMjMwMjUsMjMwMDUsMjMw''@;'; put 'put ''MzQsMjMwMzcsMjMwMzYsMjMwMzAsMjMwMTIsMjMwMjYsMjMwMzEsMjMwMDMsMjMwMTcsMjMwMjcsMjMwMjksMjMwMDgsMjMwMzgsMjMwMjgsMjMwMjEsMjM0NjQsMjM2MjgsMjM3NjAsMjM3NjgsMjM3NTYsMjM3NjcsMjM3NTUsMjM3NzEsMjM3NzQsMjM3NzAsMjM3NTMsMjM3NTEsMjM3NTQs''@;'; put 'put ''MjM3NjYsMjM3NjMsMjM3NjQsMjM3NTksMjM3NTIsMjM3NTAsMjM3NTgsMjM3NzUsMjM4MDAsMjQwNTcsMjQwOTcsMjQwOTgsMjQwOTksMjQwOTYsMjQxMDAsMjQyNDAsMjQyMjgsMjQyMjYsMjQyMTksMjQyMjcsMjQyMjksMjQzMjcsMjQzNjYsMjQ0MDYsMjQ0NTQsMjQ2MzEsMjQ2MzMsMjQ2''@;'; put 'put ''NjAsMjQ2OTAsMjQ2NzAsMjQ2NDUsMjQ2NTksMjQ2NDcsMjQ2NDksMjQ2NjcsMjQ2NTIsMjQ2NDAsMjQ2NDIsMjQ2NzEsMjQ2MTIsMjQ2NDQsMjQ2NjQsMjQ2NzgsMjQ2ODYsMjUxNTQsMjUxNTUsMjUyOTUsMjUzNTcsMjUzNTUsMjUzMzMsMjUzNTgsMjUzNDcsMjUzMjMsMjUzMzcsMjUzNTks''@;'; put 'put ''MjUzNTYsMjUzMzYsMjUzMzQsMjUzNDQsMjUzNjMsMjUzNjQsMjUzMzgsMjUzNjUsMjUzMzksMjUzMjgsMjU5MjEsMjU5MjMsMjYwMjYsMjYwNDcsMjYxNjYsMjYxNDUsMjYxNjIsMjYxNjUsMjYxNDAsMjYxNTAsMjYxNDYsMjYxNjMsMjYxNTUsMjYxNzAsMjYxNDEsMjYxNjQsMjYxNjksMjYx''@;'; put 'put ''NTgsMjYzODMsMjYzODQsMjY1NjEsMjY2MTAsMjY1NjgsMjY1NTQsMjY1ODgsMjY1NTUsMjY2MTYsMjY1ODQsMjY1NjAsMjY1NTEsMjY1NjUsMjY2MDMsMjY1OTYsMjY1OTEsMjY1NDksMjY1NzMsMjY1NDcsMjY2MTUsMjY2MTQsMjY2MDYsMjY1OTUsMjY1NjIsMjY1NTMsMjY1NzQsMjY1OTks''@;'; put 'put ''MjY2MDgsMjY1NDYsMjY2MjAsMjY1NjYsMjY2MDUsMjY1NzIsMjY1NDIsMjY1OTgsMjY1ODcsMjY2MTgsMjY1NjksMjY1NzAsMjY1NjMsMjY2MDIsMjY1NzEsMjc0MzIsMjc1MjIsMjc1MjQsMjc1NzQsMjc2MDYsMjc2MDgsMjc2MTYsMjc2ODAsMjc2ODEsMjc5NDQsMjc5NTYsMjc5NDksMjc5''@;'; put 'put ''MzUsMjc5NjQsMjc5NjcsMjc5MjIsMjc5MTQsMjc4NjYsMjc5NTUsMjc5MDgsMjc5MjksMjc5NjIsMjc5MzAsMjc5MjEsMjc5MDQsMjc5MzMsMjc5NzAsMjc5MDUsMjc5MjgsMjc5NTksMjc5MDcsMjc5MTksMjc5NjgsMjc5MTEsMjc5MzYsMjc5NDgsMjc5MTIsMjc5MzgsMjc5MTMsMjc5MjAs''@;'; put 'put ''Mjg4NTUsMjg4MzEsMjg4NjIsMjg4NDksMjg4NDgsMjg4MzMsMjg4NTIsMjg4NTMsMjg4NDEsMjkyNDksMjkyNTcsMjkyNTgsMjkyOTIsMjkyOTYsMjkyOTksMjkyOTQsMjkzODYsMjk0MTIsMjk0MTYsMjk0MTksMjk0MDcsMjk0MTgsMjk0MTQsMjk0MTEsMjk1NzMsMjk2NDQsMjk2MzQsMjk2''@;'; put 'put ''NDAsMjk2MzcsMjk2MjUsMjk2MjIsMjk2MjEsMjk2MjAsMjk2NzUsMjk2MzEsMjk2MzksMjk2MzAsMjk2MzUsMjk2MzgsMjk2MjQsMjk2NDMsMjk5MzIsMjk5MzQsMjk5OTgsMzAwMjMsMzAwMjQsMzAxMTksMzAxMjIsMzAzMjksMzA0MDQsMzA0NzIsMzA0NjcsMzA0NjgsMzA0NjksMzA0NzQs''@;'; put 'put ''MzA0NTUsMzA0NTksMzA0NTgsMzA2OTUsMzA2OTYsMzA3MjYsMzA3MzcsMzA3MzgsMzA3MjUsMzA3MzYsMzA3MzUsMzA3MzQsMzA3MjksMzA3MjMsMzA3MzksMzEwNTAsMzEwNTIsMzEwNTEsMzEwNDUsMzEwNDQsMzExODksMzExODEsMzExODMsMzExOTAsMzExODIsMzEzNjAsMzEzNTgsMzE0''@;'; put 'put ''NDEsMzE0ODgsMzE0ODksMzE4NjYsMzE4NjQsMzE4NjUsMzE4NzEsMzE4NzIsMzE4NzMsMzIwMDMsMzIwMDgsMzIwMDEsMzI2MDAsMzI2NTcsMzI2NTMsMzI3MDIsMzI3NzUsMzI3ODIsMzI3ODMsMzI3ODgsMzI4MjMsMzI5ODQsMzI5NjcsMzI5OTIsMzI5NzcsMzI5NjgsMzI5NjIsMzI5NzYs''@;'; put 'put ''MzI5NjUsMzI5OTUsMzI5ODUsMzI5ODgsMzI5NzAsMzI5ODEsMzI5NjksMzI5NzUsMzI5ODMsMzI5OTgsMzI5NzMsMzMyNzksMzMzMTMsMzM0MjgsMzM0OTcsMzM1MzQsMzM1MjksMzM1NDMsMzM1MTIsMzM1MzYsMzM0OTMsMzM1OTQsMzM1MTUsMzM0OTQsMzM1MjQsMzM1MTYsMzM1MDUsMzM1''@;'; put 'put ''MjIsMzM1MjUsMzM1NDgsMzM1MzEsMzM1MjYsMzM1MjAsMzM1MTQsMzM1MDgsMzM1MDQsMzM1MzAsMzM1MjMsMzM1MTcsMzQ0MjMsMzQ0MjAsMzQ0MjgsMzQ0MTksMzQ4ODEsMzQ4OTQsMzQ5MTksMzQ5MjIsMzQ5MjEsMzUyODMsMzUzMzIsMzUzMzUsMzYyMTAsMzY4MzUsMzY4MzMsMzY4NDYs''@;'; put 'put ''MzY4MzIsMzcxMDUsMzcwNTMsMzcwNTUsMzcwNzcsMzcwNjEsMzcwNTQsMzcwNjMsMzcwNjcsMzcwNjQsMzczMzIsMzczMzEsMzg0ODQsMzg0NzksMzg0ODEsMzg0ODMsMzg0NzQsMzg0NzgsMjA1MTAsMjA0ODUsMjA0ODcsMjA0OTksMjA1MTQsMjA1MjgsMjA1MDcsMjA0NjksMjA0NjgsMjA1''@;'; put 'put ''MzEsMjA1MzUsMjA1MjQsMjA0NzAsMjA0NzEsMjA1MDMsMjA1MDgsMjA1MTIsMjA1MTksMjA1MzMsMjA1MjcsMjA1MjksMjA0OTQsMjA4MjYsMjA4ODQsMjA4ODMsMjA5MzgsMjA5MzIsMjA5MzMsMjA5MzYsMjA5NDIsMjEwODksMjEwODIsMjEwNzQsMjEwODYsMjEwODcsMjEwNzcsMjEwOTAs''@;'; put 'put ''MjExOTcsMjEyNjIsMjE0MDYsMjE3OTgsMjE3MzAsMjE3ODMsMjE3NzgsMjE3MzUsMjE3NDcsMjE3MzIsMjE3ODYsMjE3NTksMjE3NjQsMjE3NjgsMjE3MzksMjE3NzcsMjE3NjUsMjE3NDUsMjE3NzAsMjE3NTUsMjE3NTEsMjE3NTIsMjE3MjgsMjE3NzQsMjE3NjMsMjE3NzEsMjIyNzMsMjIy''@;'; put 'put ''NzQsMjI0NzYsMjI1NzgsMjI0ODUsMjI0ODIsMjI0NTgsMjI0NzAsMjI0NjEsMjI0NjAsMjI0NTYsMjI0NTQsMjI0NjMsMjI0NzEsMjI0ODAsMjI0NTcsMjI0NjUsMjI3OTgsMjI4NTgsMjMwNjUsMjMwNjIsMjMwODUsMjMwODYsMjMwNjEsMjMwNTUsMjMwNjMsMjMwNTAsMjMwNzAsMjMwOTEs''@;'; put 'put ''MjM0MDQsMjM0NjMsMjM0NjksMjM0NjgsMjM1NTUsMjM2MzgsMjM2MzYsMjM3ODgsMjM4MDcsMjM3OTAsMjM3OTMsMjM3OTksMjM4MDgsMjM4MDEsMjQxMDUsMjQxMDQsMjQyMzIsMjQyMzgsMjQyMzQsMjQyMzYsMjQzNzEsMjQzNjgsMjQ0MjMsMjQ2NjksMjQ2NjYsMjQ2NzksMjQ2NDEsMjQ3''@;'; put 'put ''MzgsMjQ3MTIsMjQ3MDQsMjQ3MjIsMjQ3MDUsMjQ3MzMsMjQ3MDcsMjQ3MjUsMjQ3MzEsMjQ3MjcsMjQ3MTEsMjQ3MzIsMjQ3MTgsMjUxMTMsMjUxNTgsMjUzMzAsMjUzNjAsMjU0MzAsMjUzODgsMjU0MTIsMjU0MTMsMjUzOTgsMjU0MTEsMjU1NzIsMjU0MDEsMjU0MTksMjU0MTgsMjU0MDQs''@;'; put 'put ''MjUzODUsMjU0MDksMjUzOTYsMjU0MzIsMjU0MjgsMjU0MzMsMjUzODksMjU0MTUsMjUzOTUsMjU0MzQsMjU0MjUsMjU0MDAsMjU0MzEsMjU0MDgsMjU0MTYsMjU5MzAsMjU5MjYsMjYwNTQsMjYwNTEsMjYwNTIsMjYwNTAsMjYxODYsMjYyMDcsMjYxODMsMjYxOTMsMjYzODYsMjYzODcsMjY2''@;'; put 'put ''NTUsMjY2NTAsMjY2OTcsMjY2NzQsMjY2NzUsMjY2ODMsMjY2OTksMjY3MDMsMjY2NDYsMjY2NzMsMjY2NTIsMjY2NzcsMjY2NjcsMjY2NjksMjY2NzEsMjY3MDIsMjY2OTIsMjY2NzYsMjY2NTMsMjY2NDIsMjY2NDQsMjY2NjIsMjY2NjQsMjY2NzAsMjY3MDEsMjY2ODIsMjY2NjEsMjY2NTYs''@;'; put 'put ''Mjc0MzYsMjc0MzksMjc0MzcsMjc0NDEsMjc0NDQsMjc1MDEsMzI4OTgsMjc1MjgsMjc2MjIsMjc2MjAsMjc2MjQsMjc2MTksMjc2MTgsMjc2MjMsMjc2ODUsMjgwMjYsMjgwMDMsMjgwMDQsMjgwMjIsMjc5MTcsMjgwMDEsMjgwNTAsMjc5OTIsMjgwMDIsMjgwMTMsMjgwMTUsMjgwNDksMjgw''@;'; put 'put ''NDUsMjgxNDMsMjgwMzEsMjgwMzgsMjc5OTgsMjgwMDcsMjhlMywyODA1NSwyODAxNiwyODAyOCwyNzk5OSwyODAzNCwyODA1NiwyNzk1MSwyODAwOCwyODA0MywyODAzMCwyODAzMiwyODAzNiwyNzkyNiwyODAzNSwyODAyNywyODAyOSwyODAyMSwyODA0OCwyODg5MiwyODg4MywyODg4MSwy''@;'; put 'put ''ODg5MywyODg3NSwzMjU2OSwyODg5OCwyODg4NywyODg4MiwyODg5NCwyODg5NiwyODg4NCwyODg3NywyODg2OSwyODg3MCwyODg3MSwyODg5MCwyODg3OCwyODg5NywyOTI1MCwyOTMwNCwyOTMwMywyOTMwMiwyOTQ0MCwyOTQzNCwyOTQyOCwyOTQzOCwyOTQzMCwyOTQyNywyOTQzNSwyOTQ0''@;'; put 'put ''MSwyOTY1MSwyOTY1NywyOTY2OSwyOTY1NCwyOTYyOCwyOTY3MSwyOTY2NywyOTY3MywyOTY2MCwyOTY1MCwyOTY1OSwyOTY1MiwyOTY2MSwyOTY1OCwyOTY1NSwyOTY1NiwyOTY3MiwyOTkxOCwyOTkxOSwyOTk0MCwyOTk0MSwyOTk4NSwzMDA0MywzMDA0NywzMDEyOCwzMDE0NSwzMDEzOSwz''@;'; put 'put ''MDE0OCwzMDE0NCwzMDE0MywzMDEzNCwzMDEzOCwzMDM0NiwzMDQwOSwzMDQ5MywzMDQ5MSwzMDQ4MCwzMDQ4MywzMDQ4MiwzMDQ5OSwzMDQ4MSwzMDQ4NSwzMDQ4OSwzMDQ5MCwzMDQ5OCwzMDUwMywzMDc1NSwzMDc2NCwzMDc1NCwzMDc3MywzMDc2NywzMDc2MCwzMDc2NiwzMDc2MywzMDc1''@;'; put 'put ''MywzMDc2MSwzMDc3MSwzMDc2MiwzMDc2OSwzMTA2MCwzMTA2NywzMTA1NSwzMTA2OCwzMTA1OSwzMTA1OCwzMTA1NywzMTIxMSwzMTIxMiwzMTIwMCwzMTIxNCwzMTIxMywzMTIxMCwzMTE5NiwzMTE5OCwzMTE5NywzMTM2NiwzMTM2OSwzMTM2NSwzMTM3MSwzMTM3MiwzMTM3MCwzMTM2Nywz''@;'; put 'put ''MTQ0OCwzMTUwNCwzMTQ5MiwzMTUwNywzMTQ5MywzMTUwMywzMTQ5NiwzMTQ5OCwzMTUwMiwzMTQ5NywzMTUwNiwzMTg3NiwzMTg4OSwzMTg4MiwzMTg4NCwzMTg4MCwzMTg4NSwzMTg3NywzMjAzMCwzMjAyOSwzMjAxNywzMjAxNCwzMjAyNCwzMjAyMiwzMjAxOSwzMjAzMSwzMjAxOCwzMjAx''@;'; put 'put ''NSwzMjAxMiwzMjYwNCwzMjYwOSwzMjYwNiwzMjYwOCwzMjYwNSwzMjYwMywzMjY2MiwzMjY1OCwzMjcwNywzMjcwNiwzMjcwNCwzMjc5MCwzMjgzMCwzMjgyNSwzMzAxOCwzMzAxMCwzMzAxNywzMzAxMywzMzAyNSwzMzAxOSwzMzAyNCwzMzI4MSwzMzMyNywzMzMxNywzMzU4NywzMzU4MSwz''@;'; put 'put ''MzYwNCwzMzU2MSwzMzYxNywzMzU3MywzMzYyMiwzMzU5OSwzMzYwMSwzMzU3NCwzMzU2NCwzMzU3MCwzMzYwMiwzMzYxNCwzMzU2MywzMzU3OCwzMzU0NCwzMzU5NiwzMzYxMywzMzU1OCwzMzU3MiwzMzU2OCwzMzU5MSwzMzU4MywzMzU3NywzMzYwNywzMzYwNSwzMzYxMiwzMzYxOSwzMzU2''@;'; put 'put ''NiwzMzU4MCwzMzYxMSwzMzU3NSwzMzYwOCwzNDM4NywzNDM4NiwzNDQ2NiwzNDQ3MiwzNDQ1NCwzNDQ0NSwzNDQ0OSwzNDQ2MiwzNDQzOSwzNDQ1NSwzNDQzOCwzNDQ0MywzNDQ1OCwzNDQzNywzNDQ2OSwzNDQ1NywzNDQ2NSwzNDQ3MSwzNDQ1MywzNDQ1NiwzNDQ0NiwzNDQ2MSwzNDQ0OCwz''@;'; put 'put ''NDQ1MiwzNDg4MywzNDg4NCwzNDkyNSwzNDkzMywzNDkzNCwzNDkzMCwzNDk0NCwzNDkyOSwzNDk0MywzNDkyNywzNDk0NywzNDk0MiwzNDkzMiwzNDk0MCwzNTM0NiwzNTkxMSwzNTkyNywzNTk2MywzNjAwNCwzNjAwMywzNjIxNCwzNjIxNiwzNjI3NywzNjI3OSwzNjI3OCwzNjU2MSwzNjU2''@;'; put 'put ''MywzNjg2MiwzNjg1MywzNjg2NiwzNjg2MywzNjg1OSwzNjg2OCwzNjg2MCwzNjg1NCwzNzA3OCwzNzA4OCwzNzA4MSwzNzA4MiwzNzA5MSwzNzA4NywzNzA5MywzNzA4MCwzNzA4MywzNzA3OSwzNzA4NCwzNzA5MiwzNzIwMCwzNzE5OCwzNzE5OSwzNzMzMywzNzM0NiwzNzMzOCwzODQ5Miwz''@;'; put 'put ''ODQ5NSwzODU4OCwzOTEzOSwzOTY0NywzOTcyNywyMDA5NSwyMDU5MiwyMDU4NiwyMDU3NywyMDU3NCwyMDU3NiwyMDU2MywyMDU1NSwyMDU3MywyMDU5NCwyMDU1MiwyMDU1NywyMDU0NSwyMDU3MSwyMDU1NCwyMDU3OCwyMDUwMSwyMDU0OSwyMDU3NSwyMDU4NSwyMDU4NywyMDU3OSwyMDU4''@;'; put 'put ''MCwyMDU1MCwyMDU0NCwyMDU5MCwyMDU5NSwyMDU2NywyMDU2MSwyMDk0NCwyMTA5OSwyMTEwMSwyMTEwMCwyMTEwMiwyMTIwNiwyMTIwMywyMTI5MywyMTQwNCwyMTg3NywyMTg3OCwyMTgyMCwyMTgzNywyMTg0MCwyMTgxMiwyMTgwMiwyMTg0MSwyMTg1OCwyMTgxNCwyMTgxMywyMTgwOCwy''@;'; put 'put ''MTg0MiwyMTgyOSwyMTc3MiwyMTgxMCwyMTg2MSwyMTgzOCwyMTgxNywyMTgzMiwyMTgwNSwyMTgxOSwyMTgyNCwyMTgzNSwyMjI4MiwyMjI3OSwyMjUyMywyMjU0OCwyMjQ5OCwyMjUxOCwyMjQ5MiwyMjUxNiwyMjUyOCwyMjUwOSwyMjUyNSwyMjUzNiwyMjUyMCwyMjUzOSwyMjUxNSwyMjQ3''@;'; put 'put ''OSwyMjUzNSwyMjUxMCwyMjQ5OSwyMjUxNCwyMjUwMSwyMjUwOCwyMjQ5NywyMjU0MiwyMjUyNCwyMjU0NCwyMjUwMywyMjUyOSwyMjU0MCwyMjUxMywyMjUwNSwyMjUxMiwyMjU0MSwyMjUzMiwyMjg3NiwyMzEzNiwyMzEyOCwyMzEyNSwyMzE0MywyMzEzNCwyMzA5NiwyMzA5MywyMzE0OSwy''@;'; put 'put ''MzEyMCwyMzEzNSwyMzE0MSwyMzE0OCwyMzEyMywyMzE0MCwyMzEyNywyMzEwNywyMzEzMywyMzEyMiwyMzEwOCwyMzEzMSwyMzExMiwyMzE4MiwyMzEwMiwyMzExNywyMzA5NywyMzExNiwyMzE1MiwyMzE0NSwyMzExMSwyMzEyMSwyMzEyNiwyMzEwNiwyMzEzMiwyMzQxMCwyMzQwNiwyMzQ4''@;'; put 'put ''OSwyMzQ4OCwyMzY0MSwyMzgzOCwyMzgxOSwyMzgzNywyMzgzNCwyMzg0MCwyMzgyMCwyMzg0OCwyMzgyMSwyMzg0NiwyMzg0NSwyMzgyMywyMzg1NiwyMzgyNiwyMzg0MywyMzgzOSwyMzg1NCwyNDEyNiwyNDExNiwyNDI0MSwyNDI0NCwyNDI0OSwyNDI0MiwyNDI0MywyNDM3NCwyNDM3Niwy''@;'; put 'put ''NDQ3NSwyNDQ3MCwyNDQ3OSwyNDcxNCwyNDcyMCwyNDcxMCwyNDc2NiwyNDc1MiwyNDc2MiwyNDc4NywyNDc4OCwyNDc4MywyNDgwNCwyNDc5MywyNDc5NywyNDc3NiwyNDc1MywyNDc5NSwyNDc1OSwyNDc3OCwyNDc2NywyNDc3MSwyNDc4MSwyNDc2OCwyNTM5NCwyNTQ0NSwyNTQ4MiwyNTQ3''@;'; put 'put ''NCwyNTQ2OSwyNTUzMywyNTUwMiwyNTUxNywyNTUwMSwyNTQ5NSwyNTUxNSwyNTQ4NiwyNTQ1NSwyNTQ3OSwyNTQ4OCwyNTQ1NCwyNTUxOSwyNTQ2MSwyNTUwMCwyNTQ1MywyNTUxOCwyNTQ2OCwyNTUwOCwyNTQwMywyNTUwMywyNTQ2NCwyNTQ3NywyNTQ3MywyNTQ4OSwyNTQ4NSwyNTQ1Niwy''@;'; put 'put ''NTkzOSwyNjA2MSwyNjIxMywyNjIwOSwyNjIwMywyNjIwMSwyNjIwNCwyNjIxMCwyNjM5MiwyNjc0NSwyNjc1OSwyNjc2OCwyNjc4MCwyNjczMywyNjczNCwyNjc5OCwyNjc5NSwyNjk2NiwyNjczNSwyNjc4NywyNjc5NiwyNjc5MywyNjc0MSwyNjc0MCwyNjgwMiwyNjc2NywyNjc0MywyNjc3''@;'; put 'put ''MCwyNjc0OCwyNjczMSwyNjczOCwyNjc5NCwyNjc1MiwyNjczNywyNjc1MCwyNjc3OSwyNjc3NCwyNjc2MywyNjc4NCwyNjc2MSwyNjc4OCwyNjc0NCwyNjc0NywyNjc2OSwyNjc2NCwyNjc2MiwyNjc0OSwyNzQ0NiwyNzQ0MywyNzQ0NywyNzQ0OCwyNzUzNywyNzUzNSwyNzUzMywyNzUzNCwy''@;'; put 'put ''NzUzMiwyNzY5MCwyODA5NiwyODA3NSwyODA4NCwyODA4MywyODI3NiwyODA3NiwyODEzNywyODEzMCwyODA4NywyODE1MCwyODExNiwyODE2MCwyODEwNCwyODEyOCwyODEyNywyODExOCwyODA5NCwyODEzMywyODEyNCwyODEyNSwyODEyMywyODE0OCwyODEwNiwyODA5MywyODE0MSwyODE0''@;'; put 'put ''NCwyODA5MCwyODExNywyODA5OCwyODExMSwyODEwNSwyODExMiwyODE0NiwyODExNSwyODE1NywyODExOSwyODEwOSwyODEzMSwyODA5MSwyODkyMiwyODk0MSwyODkxOSwyODk1MSwyODkxNiwyODk0MCwyODkxMiwyODkzMiwyODkxNSwyODk0NCwyODkyNCwyODkyNywyODkzNCwyODk0Nywy''@;'; put 'put ''ODkyOCwyODkyMCwyODkxOCwyODkzOSwyODkzMCwyODk0MiwyOTMxMCwyOTMwNywyOTMwOCwyOTMxMSwyOTQ2OSwyOTQ2MywyOTQ0NywyOTQ1NywyOTQ2NCwyOTQ1MCwyOTQ0OCwyOTQzOSwyOTQ1NSwyOTQ3MCwyOTU3NiwyOTY4NiwyOTY4OCwyOTY4NSwyOTcwMCwyOTY5NywyOTY5MywyOTcw''@;'; put 'put ''MywyOTY5NiwyOTY5MCwyOTY5MiwyOTY5NSwyOTcwOCwyOTcwNywyOTY4NCwyOTcwNCwzMDA1MiwzMDA1MSwzMDE1OCwzMDE2MiwzMDE1OSwzMDE1NSwzMDE1NiwzMDE2MSwzMDE2MCwzMDM1MSwzMDM0NSwzMDQxOSwzMDUyMSwzMDUxMSwzMDUwOSwzMDUxMywzMDUxNCwzMDUxNiwzMDUxNSwz''@;'; put 'put ''MDUyNSwzMDUwMSwzMDUyMywzMDUxNywzMDc5MiwzMDgwMiwzMDc5MywzMDc5NywzMDc5NCwzMDc5NiwzMDc1OCwzMDc4OSwzMDgwMCwzMTA3NiwzMTA3OSwzMTA4MSwzMTA4MiwzMTA3NSwzMTA4MywzMTA3MywzMTE2MywzMTIyNiwzMTIyNCwzMTIyMiwzMTIyMywzMTM3NSwzMTM4MCwzMTM3''@;'; put 'put ''NiwzMTU0MSwzMTU1OSwzMTU0MCwzMTUyNSwzMTUzNiwzMTUyMiwzMTUyNCwzMTUzOSwzMTUxMiwzMTUzMCwzMTUxNywzMTUzNywzMTUzMSwzMTUzMywzMTUzNSwzMTUzOCwzMTU0NCwzMTUxNCwzMTUyMywzMTg5MiwzMTg5NiwzMTg5NCwzMTkwNywzMjA1MywzMjA2MSwzMjA1NiwzMjA1NCwz''@;'; put 'put ''MjA1OCwzMjA2OSwzMjA0NCwzMjA0MSwzMjA2NSwzMjA3MSwzMjA2MiwzMjA2MywzMjA3NCwzMjA1OSwzMjA0MCwzMjYxMSwzMjY2MSwzMjY2OCwzMjY2OSwzMjY2NywzMjcxNCwzMjcxNSwzMjcxNywzMjcyMCwzMjcyMSwzMjcxMSwzMjcxOSwzMjcxMywzMjc5OSwzMjc5OCwzMjc5NSwzMjgz''@;'; put 'put ''OSwzMjgzNSwzMjg0MCwzMzA0OCwzMzA2MSwzMzA0OSwzMzA1MSwzMzA2OSwzMzA1NSwzMzA2OCwzMzA1NCwzMzA1NywzMzA0NSwzMzA2MywzMzA1MywzMzA1OCwzMzI5NywzMzMzNiwzMzMzMSwzMzMzOCwzMzMzMiwzMzMzMCwzMzM5NiwzMzY4MCwzMzY5OSwzMzcwNCwzMzY3NywzMzY1OCwz''@;'; put 'put ''MzY1MSwzMzcwMCwzMzY1MiwzMzY3OSwzMzY2NSwzMzY4NSwzMzY4OSwzMzY1MywzMzY4NCwzMzcwNSwzMzY2MSwzMzY2NywzMzY3NiwzMzY5MywzMzY5MSwzMzcwNiwzMzY3NSwzMzY2MiwzMzcwMSwzMzcxMSwzMzY3MiwzMzY4NywzMzcxMiwzMzY2MywzMzcwMiwzMzY3MSwzMzcxMCwzMzY1''@;'; put 'put ''NCwzMzY5MCwzNDM5MywzNDM5MCwzNDQ5NSwzNDQ4NywzNDQ5OCwzNDQ5NywzNDUwMSwzNDQ5MCwzNDQ4MCwzNDUwNCwzNDQ4OSwzNDQ4MywzNDQ4OCwzNDUwOCwzNDQ4NCwzNDQ5MSwzNDQ5MiwzNDQ5OSwzNDQ5MywzNDQ5NCwzNDg5OCwzNDk1MywzNDk2NSwzNDk4NCwzNDk3OCwzNDk4Niwz''@;'; put 'put ''NDk3MCwzNDk2MSwzNDk3NywzNDk3NSwzNDk2OCwzNDk4MywzNDk2OSwzNDk3MSwzNDk2NywzNDk4MCwzNDk4OCwzNDk1NiwzNDk2MywzNDk1OCwzNTIwMiwzNTI4NiwzNTI4OSwzNTI4NSwzNTM3NiwzNTM2NywzNTM3MiwzNTM1OCwzNTg5NywzNTg5OSwzNTkzMiwzNTkzMywzNTk2NSwzNjAw''@;'; put 'put ''NSwzNjIyMSwzNjIxOSwzNjIxNywzNjI4NCwzNjI5MCwzNjI4MSwzNjI4NywzNjI4OSwzNjU2OCwzNjU3NCwzNjU3MywzNjU3MiwzNjU2NywzNjU3NiwzNjU3NywzNjkwMCwzNjg3NSwzNjg4MSwzNjg5MiwzNjg3NiwzNjg5NywzNzEwMywzNzA5OCwzNzEwNCwzNzEwOCwzNzEwNiwzNzEwNywz''@;'; put 'put ''NzA3NiwzNzA5OSwzNzEwMCwzNzA5NywzNzIwNiwzNzIwOCwzNzIxMCwzNzIwMywzNzIwNSwzNzM1NiwzNzM2NCwzNzM2MSwzNzM2MywzNzM2OCwzNzM0OCwzNzM2OSwzNzM1NCwzNzM1NSwzNzM2NywzNzM1MiwzNzM1OCwzODI2NiwzODI3OCwzODI4MCwzODUyNCwzODUwOSwzODUwNywzODUx''@;'; put 'put ''MywzODUxMSwzODU5MSwzODc2MiwzODkxNiwzOTE0MSwzOTMxOSwyMDYzNSwyMDYyOSwyMDYyOCwyMDYzOCwyMDYxOSwyMDY0MywyMDYxMSwyMDYyMCwyMDYyMiwyMDYzNywyMDU4NCwyMDYzNiwyMDYyNiwyMDYxMCwyMDYxNSwyMDgzMSwyMDk0OCwyMTI2NiwyMTI2NSwyMTQxMiwyMTQxNSwy''@;'; put 'put ''MTkwNSwyMTkyOCwyMTkyNSwyMTkzMywyMTg3OSwyMjA4NSwyMTkyMiwyMTkwNywyMTg5NiwyMTkwMywyMTk0MSwyMTg4OSwyMTkyMywyMTkwNiwyMTkyNCwyMTg4NSwyMTkwMCwyMTkyNiwyMTg4NywyMTkwOSwyMTkyMSwyMTkwMiwyMjI4NCwyMjU2OSwyMjU4MywyMjU1MywyMjU1OCwyMjU2''@;'; put 'put ''NywyMjU2MywyMjU2OCwyMjUxNywyMjYwMCwyMjU2NSwyMjU1NiwyMjU1NSwyMjU3OSwyMjU5MSwyMjU4MiwyMjU3NCwyMjU4NSwyMjU4NCwyMjU3MywyMjU3MiwyMjU4NywyMjg4MSwyMzIxNSwyMzE4OCwyMzE5OSwyMzE2MiwyMzIwMiwyMzE5OCwyMzE2MCwyMzIwNiwyMzE2NCwyMzIwNSwy''@;'; put 'put ''MzIxMiwyMzE4OSwyMzIxNCwyMzA5NSwyMzE3MiwyMzE3OCwyMzE5MSwyMzE3MSwyMzE3OSwyMzIwOSwyMzE2MywyMzE2NSwyMzE4MCwyMzE5NiwyMzE4MywyMzE4NywyMzE5NywyMzUzMCwyMzUwMSwyMzQ5OSwyMzUwOCwyMzUwNSwyMzQ5OCwyMzUwMiwyMzU2NCwyMzYwMCwyMzg2MywyMzg3''@;'; put 'put ''NSwyMzkxNSwyMzg3MywyMzg4MywyMzg3MSwyMzg2MSwyMzg4OSwyMzg4NiwyMzg5MywyMzg1OSwyMzg2NiwyMzg5MCwyMzg2OSwyMzg1NywyMzg5NywyMzg3NCwyMzg2NSwyMzg4MSwyMzg2NCwyMzg2OCwyMzg1OCwyMzg2MiwyMzg3MiwyMzg3NywyNDEzMiwyNDEyOSwyNDQwOCwyNDQ4Niwy''@;'; put 'put ''NDQ4NSwyNDQ5MSwyNDc3NywyNDc2MSwyNDc4MCwyNDgwMiwyNDc4MiwyNDc3MiwyNDg1MiwyNDgxOCwyNDg0MiwyNDg1NCwyNDgzNywyNDgyMSwyNDg1MSwyNDgyNCwyNDgyOCwyNDgzMCwyNDc2OSwyNDgzNSwyNDg1NiwyNDg2MSwyNDg0OCwyNDgzMSwyNDgzNiwyNDg0MywyNTE2MiwyNTQ5''@;'; put 'put ''MiwyNTUyMSwyNTUyMCwyNTU1MCwyNTU3MywyNTU3NiwyNTU4MywyNTUzOSwyNTc1NywyNTU4NywyNTU0NiwyNTU2OCwyNTU5MCwyNTU1NywyNTU4NiwyNTU4OSwyNTY5NywyNTU2NywyNTUzNCwyNTU2NSwyNTU2NCwyNTU0MCwyNTU2MCwyNTU1NSwyNTUzOCwyNTU0MywyNTU0OCwyNTU0Nywy''@;'; put 'put ''NTU0NCwyNTU4NCwyNTU1OSwyNTU2MSwyNTkwNiwyNTk1OSwyNTk2MiwyNTk1NiwyNTk0OCwyNTk2MCwyNTk1NywyNTk5NiwyNjAxMywyNjAxNCwyNjAzMCwyNjA2NCwyNjA2NiwyNjIzNiwyNjIyMCwyNjIzNSwyNjI0MCwyNjIyNSwyNjIzMywyNjIxOCwyNjIyNiwyNjM2OSwyNjg5MiwyNjgz''@;'; put 'put ''NSwyNjg4NCwyNjg0NCwyNjkyMiwyNjg2MCwyNjg1OCwyNjg2NSwyNjg5NSwyNjgzOCwyNjg3MSwyNjg1OSwyNjg1MiwyNjg3MCwyNjg5OSwyNjg5NiwyNjg2NywyNjg0OSwyNjg4NywyNjgyOCwyNjg4OCwyNjk5MiwyNjgwNCwyNjg5NywyNjg2MywyNjgyMiwyNjkwMCwyNjg3MiwyNjgzMiwy''@;'; put 'put ''Njg3NywyNjg3NiwyNjg1NiwyNjg5MSwyNjg5MCwyNjkwMywyNjgzMCwyNjgyNCwyNjg0NSwyNjg0NiwyNjg1NCwyNjg2OCwyNjgzMywyNjg4NiwyNjgzNiwyNjg1NywyNjkwMSwyNjkxNywyNjgyMywyNzQ0OSwyNzQ1MSwyNzQ1NSwyNzQ1MiwyNzU0MCwyNzU0MywyNzU0NSwyNzU0MSwyNzU4''@;'; put 'put ''MSwyNzYzMiwyNzYzNCwyNzYzNSwyNzY5NiwyODE1NiwyODIzMCwyODIzMSwyODE5MSwyODIzMywyODI5NiwyODIyMCwyODIyMSwyODIyOSwyODI1OCwyODIwMywyODIyMywyODIyNSwyODI1MywyODI3NSwyODE4OCwyODIxMSwyODIzNSwyODIyNCwyODI0MSwyODIxOSwyODE2MywyODIwNiwy''@;'; put 'put ''ODI1NCwyODI2NCwyODI1MiwyODI1NywyODIwOSwyODIwMCwyODI1NiwyODI3MywyODI2NywyODIxNywyODE5NCwyODIwOCwyODI0MywyODI2MSwyODE5OSwyODI4MCwyODI2MCwyODI3OSwyODI0NSwyODI4MSwyODI0MiwyODI2MiwyODIxMywyODIxNCwyODI1MCwyODk2MCwyODk1OCwyODk3''@;'; put 'put ''NSwyODkyMywyODk3NCwyODk3NywyODk2MywyODk2NSwyODk2MiwyODk3OCwyODk1OSwyODk2OCwyODk4NiwyODk1NSwyOTI1OSwyOTI3NCwyOTMyMCwyOTMyMSwyOTMxOCwyOTMxNywyOTMyMywyOTQ1OCwyOTQ1MSwyOTQ4OCwyOTQ3NCwyOTQ4OSwyOTQ5MSwyOTQ3OSwyOTQ5MCwyOTQ4NSwy''@;'; put 'put ''OTQ3OCwyOTQ3NSwyOTQ5MywyOTQ1MiwyOTc0MiwyOTc0MCwyOTc0NCwyOTczOSwyOTcxOCwyOTcyMiwyOTcyOSwyOTc0MSwyOTc0NSwyOTczMiwyOTczMSwyOTcyNSwyOTczNywyOTcyOCwyOTc0NiwyOTk0NywyOTk5OSwzMDA2MywzMDA2MCwzMDE4MywzMDE3MCwzMDE3NywzMDE4MiwzMDE3''@;'; put 'put ''MywzMDE3NSwzMDE4MCwzMDE2NywzMDM1NywzMDM1NCwzMDQyNiwzMDUzNCwzMDUzNSwzMDUzMiwzMDU0MSwzMDUzMywzMDUzOCwzMDU0MiwzMDUzOSwzMDU0MCwzMDY4NiwzMDcwMCwzMDgxNiwzMDgyMCwzMDgyMSwzMDgxMiwzMDgyOSwzMDgzMywzMDgyNiwzMDgzMCwzMDgzMiwzMDgyNSwz''@;'; put 'put ''MDgyNCwzMDgxNCwzMDgxOCwzMTA5MiwzMTA5MSwzMTA5MCwzMTA4OCwzMTIzNCwzMTI0MiwzMTIzNSwzMTI0NCwzMTIzNiwzMTM4NSwzMTQ2MiwzMTQ2MCwzMTU2MiwzMTU0NywzMTU1NiwzMTU2MCwzMTU2NCwzMTU2NiwzMTU1MiwzMTU3NiwzMTU1NywzMTkwNiwzMTkwMiwzMTkxMiwzMTkw''@;'; put 'put ''NSwzMjA4OCwzMjExMSwzMjA5OSwzMjA4MywzMjA4NiwzMjEwMywzMjEwNiwzMjA3OSwzMjEwOSwzMjA5MiwzMjEwNywzMjA4MiwzMjA4NCwzMjEwNSwzMjA4MSwzMjA5NSwzMjA3OCwzMjU3NCwzMjU3NSwzMjYxMywzMjYxNCwzMjY3NCwzMjY3MiwzMjY3MywzMjcyNywzMjg0OSwzMjg0Nywz''@;'; put 'put ''Mjg0OCwzMzAyMiwzMjk4MCwzMzA5MSwzMzA5OCwzMzEwNiwzMzEwMywzMzA5NSwzMzA4NSwzMzEwMSwzMzA4MiwzMzI1NCwzMzI2MiwzMzI3MSwzMzI3MiwzMzI3MywzMzI4NCwzMzM0MCwzMzM0MSwzMzM0MywzMzM5NywzMzU5NSwzMzc0MywzMzc4NSwzMzgyNywzMzcyOCwzMzc2OCwzMzgx''@;'; put 'put ''MCwzMzc2NywzMzc2NCwzMzc4OCwzMzc4MiwzMzgwOCwzMzczNCwzMzczNiwzMzc3MSwzMzc2MywzMzcyNywzMzc5MywzMzc1NywzMzc2NSwzMzc1MiwzMzc5MSwzMzc2MSwzMzczOSwzMzc0MiwzMzc1MCwzMzc4MSwzMzczNywzMzgwMSwzMzgwNywzMzc1OCwzMzgwOSwzMzc5OCwzMzczMCwz''@;'; put 'put ''Mzc3OSwzMzc0OSwzMzc4NiwzMzczNSwzMzc0NSwzMzc3MCwzMzgxMSwzMzczMSwzMzc3MiwzMzc3NCwzMzczMiwzMzc4NywzMzc1MSwzMzc2MiwzMzgxOSwzMzc1NSwzMzc5MCwzNDUyMCwzNDUzMCwzNDUzNCwzNDUxNSwzNDUzMSwzNDUyMiwzNDUzOCwzNDUyNSwzNDUzOSwzNDUyNCwzNDU0''@;'; put 'put ''MCwzNDUzNywzNDUxOSwzNDUzNiwzNDUxMywzNDg4OCwzNDkwMiwzNDkwMSwzNTAwMiwzNTAzMSwzNTAwMSwzNWUzLDM1MDA4LDM1MDA2LDM0OTk4LDM1MDA0LDM0OTk5LDM1MDA1LDM0OTk0LDM1MDczLDM1MDE3LDM1MjIxLDM1MjI0LDM1MjIzLDM1MjkzLDM1MjkwLDM1MjkxLDM1NDA2LDM1''@;'; put 'put ''NDA1LDM1Mzg1LDM1NDE3LDM1MzkyLDM1NDE1LDM1NDE2LDM1Mzk2LDM1Mzk3LDM1NDEwLDM1NDAwLDM1NDA5LDM1NDAyLDM1NDA0LDM1NDA3LDM1OTM1LDM1OTY5LDM1OTY4LDM2MDI2LDM2MDMwLDM2MDE2LDM2MDI1LDM2MDIxLDM2MjI4LDM2MjI0LDM2MjMzLDM2MzEyLDM2MzA3LDM2MzAx''@;'; put 'put ''LDM2Mjk1LDM2MzEwLDM2MzE2LDM2MzAzLDM2MzA5LDM2MzEzLDM2Mjk2LDM2MzExLDM2MjkzLDM2NTkxLDM2NTk5LDM2NjAyLDM2NjAxLDM2NTgyLDM2NTkwLDM2NTgxLDM2NTk3LDM2NTgzLDM2NTg0LDM2NTk4LDM2NTg3LDM2NTkzLDM2NTg4LDM2NTk2LDM2NTg1LDM2OTA5LDM2OTE2LDM2''@;'; put 'put ''OTExLDM3MTI2LDM3MTY0LDM3MTI0LDM3MTE5LDM3MTE2LDM3MTI4LDM3MTEzLDM3MTE1LDM3MTIxLDM3MTIwLDM3MTI3LDM3MTI1LDM3MTIzLDM3MjE3LDM3MjIwLDM3MjE1LDM3MjE4LDM3MjE2LDM3Mzc3LDM3Mzg2LDM3NDEzLDM3Mzc5LDM3NDAyLDM3NDE0LDM3MzkxLDM3Mzg4LDM3Mzc2''@;'; put 'put ''LDM3Mzk0LDM3Mzc1LDM3MzczLDM3MzgyLDM3MzgwLDM3NDE1LDM3Mzc4LDM3NDA0LDM3NDEyLDM3NDAxLDM3Mzk5LDM3MzgxLDM3Mzk4LDM4MjY3LDM4Mjg1LDM4Mjg0LDM4Mjg4LDM4NTM1LDM4NTI2LDM4NTM2LDM4NTM3LDM4NTMxLDM4NTI4LDM4NTk0LDM4NjAwLDM4NTk1LDM4NjQxLDM4''@;'; put 'put ''NjQwLDM4NzY0LDM4NzY4LDM4NzY2LDM4OTE5LDM5MDgxLDM5MTQ3LDQwMTY2LDQwNjk3LDIwMDk5LDIwMTAwLDIwMTUwLDIwNjY5LDIwNjcxLDIwNjc4LDIwNjU0LDIwNjc2LDIwNjgyLDIwNjYwLDIwNjgwLDIwNjc0LDIwNjU2LDIwNjczLDIwNjY2LDIwNjU3LDIwNjgzLDIwNjgxLDIwNjYy''@;'; put 'put ''LDIwNjY0LDIwOTUxLDIxMTE0LDIxMTEyLDIxMTE1LDIxMTE2LDIxOTU1LDIxOTc5LDIxOTY0LDIxOTY4LDIxOTYzLDIxOTYyLDIxOTgxLDIxOTUyLDIxOTcyLDIxOTU2LDIxOTkzLDIxOTUxLDIxOTcwLDIxOTAxLDIxOTY3LDIxOTczLDIxOTg2LDIxOTc0LDIxOTYwLDIyMDAyLDIxOTY1LDIx''@;'; put 'put ''OTc3LDIxOTU0LDIyMjkyLDIyNjExLDIyNjMyLDIyNjI4LDIyNjA3LDIyNjA1LDIyNjAxLDIyNjM5LDIyNjEzLDIyNjA2LDIyNjIxLDIyNjE3LDIyNjI5LDIyNjE5LDIyNTg5LDIyNjI3LDIyNjQxLDIyNzgwLDIzMjM5LDIzMjM2LDIzMjQzLDIzMjI2LDIzMjI0LDIzMjE3LDIzMjIxLDIzMjE2''@;'; put 'put ''LDIzMjMxLDIzMjQwLDIzMjI3LDIzMjM4LDIzMjIzLDIzMjMyLDIzMjQyLDIzMjIwLDIzMjIyLDIzMjQ1LDIzMjI1LDIzMTg0LDIzNTEwLDIzNTEyLDIzNTEzLDIzNTgzLDIzNjAzLDIzOTIxLDIzOTA3LDIzODgyLDIzOTA5LDIzOTIyLDIzOTE2LDIzOTAyLDIzOTEyLDIzOTExLDIzOTA2LDI0''@;'; put 'put ''MDQ4LDI0MTQzLDI0MTQyLDI0MTM4LDI0MTQxLDI0MTM5LDI0MjYxLDI0MjY4LDI0MjYyLDI0MjY3LDI0MjYzLDI0Mzg0LDI0NDk1LDI0NDkzLDI0ODIzLDI0OTA1LDI0OTA2LDI0ODc1LDI0OTAxLDI0ODg2LDI0ODgyLDI0ODc4LDI0OTAyLDI0ODc5LDI0OTExLDI0ODczLDI0ODk2LDI1MTIw''@;'; put 'put ''LDM3MjI0LDI1MTIzLDI1MTI1LDI1MTI0LDI1NTQxLDI1NTg1LDI1NTc5LDI1NjE2LDI1NjE4LDI1NjA5LDI1NjMyLDI1NjM2LDI1NjUxLDI1NjY3LDI1NjMxLDI1NjIxLDI1NjI0LDI1NjU3LDI1NjU1LDI1NjM0LDI1NjM1LDI1NjEyLDI1NjM4LDI1NjQ4LDI1NjQwLDI1NjY1LDI1NjUzLDI1''@;'; put 'put ''NjQ3LDI1NjEwLDI1NjI2LDI1NjY0LDI1NjM3LDI1NjM5LDI1NjExLDI1NTc1LDI1NjI3LDI1NjQ2LDI1NjMzLDI1NjE0LDI1OTY3LDI2MDAyLDI2MDY3LDI2MjQ2LDI2MjUyLDI2MjYxLDI2MjU2LDI2MjUxLDI2MjUwLDI2MjY1LDI2MjYwLDI2MjMyLDI2NDAwLDI2OTgyLDI2OTc1LDI2OTM2''@;'; put 'put ''LDI2OTU4LDI2OTc4LDI2OTkzLDI2OTQzLDI2OTQ5LDI2OTg2LDI2OTM3LDI2OTQ2LDI2OTY3LDI2OTY5LDI3MDAyLDI2OTUyLDI2OTUzLDI2OTMzLDI2OTg4LDI2OTMxLDI2OTQxLDI2OTgxLDI2ODY0LDI3ZTMsMjY5MzIsMjY5ODUsMjY5NDQsMjY5OTEsMjY5NDgsMjY5OTgsMjY5NjgsMjY5''@;'; put 'put ''NDUsMjY5OTYsMjY5NTYsMjY5MzksMjY5NTUsMjY5MzUsMjY5NzIsMjY5NTksMjY5NjEsMjY5MzAsMjY5NjIsMjY5MjcsMjcwMDMsMjY5NDAsMjc0NjIsMjc0NjEsMjc0NTksMjc0NTgsMjc0NjQsMjc0NTcsMjc1NDcsNjQwMTMsMjc2NDMsMjc2NDQsMjc2NDEsMjc2MzksMjc2NDAsMjgzMTUs''@;'; put 'put ''MjgzNzQsMjgzNjAsMjgzMDMsMjgzNTIsMjgzMTksMjgzMDcsMjgzMDgsMjgzMjAsMjgzMzcsMjgzNDUsMjgzNTgsMjgzNzAsMjgzNDksMjgzNTMsMjgzMTgsMjgzNjEsMjgzNDMsMjgzMzYsMjgzNjUsMjgzMjYsMjgzNjcsMjgzMzgsMjgzNTAsMjgzNTUsMjgzODAsMjgzNzYsMjgzMTMsMjgz''@;'; put 'put ''MDYsMjgzMDIsMjgzMDEsMjgzMjQsMjgzMjEsMjgzNTEsMjgzMzksMjgzNjgsMjgzNjIsMjgzMTEsMjgzMzQsMjgzMjMsMjg5OTksMjkwMTIsMjkwMTAsMjkwMjcsMjkwMjQsMjg5OTMsMjkwMjEsMjkwMjYsMjkwNDIsMjkwNDgsMjkwMzQsMjkwMjUsMjg5OTQsMjkwMTYsMjg5OTUsMjkwMDMs''@;'; put 'put ''MjkwNDAsMjkwMjMsMjkwMDgsMjkwMTEsMjg5OTYsMjkwMDUsMjkwMTgsMjkyNjMsMjkzMjUsMjkzMjQsMjkzMjksMjkzMjgsMjkzMjYsMjk1MDAsMjk1MDYsMjk0OTksMjk0OTgsMjk1MDQsMjk1MTQsMjk1MTMsMjk3NjQsMjk3NzAsMjk3NzEsMjk3NzgsMjk3NzcsMjk3ODMsMjk3NjAsMjk3''@;'; put 'put ''NzUsMjk3NzYsMjk3NzQsMjk3NjIsMjk3NjYsMjk3NzMsMjk3ODAsMjk5MjEsMjk5NTEsMjk5NTAsMjk5NDksMjk5ODEsMzAwNzMsMzAwNzEsMjcwMTEsMzAxOTEsMzAyMjMsMzAyMTEsMzAxOTksMzAyMDYsMzAyMDQsMzAyMDEsMzAyMDAsMzAyMjQsMzAyMDMsMzAxOTgsMzAxODksMzAxOTcs''@;'; put 'put ''MzAyMDUsMzAzNjEsMzAzODksMzA0MjksMzA1NDksMzA1NTksMzA1NjAsMzA1NDYsMzA1NTAsMzA1NTQsMzA1NjksMzA1NjcsMzA1NDgsMzA1NTMsMzA1NzMsMzA2ODgsMzA4NTUsMzA4NzQsMzA4NjgsMzA4NjMsMzA4NTIsMzA4NjksMzA4NTMsMzA4NTQsMzA4ODEsMzA4NTEsMzA4NDEsMzA4''@;'; put 'put ''NzMsMzA4NDgsMzA4NzAsMzA4NDMsMzExMDAsMzExMDYsMzExMDEsMzEwOTcsMzEyNDksMzEyNTYsMzEyNTcsMzEyNTAsMzEyNTUsMzEyNTMsMzEyNjYsMzEyNTEsMzEyNTksMzEyNDgsMzEzOTUsMzEzOTQsMzEzOTAsMzE0NjcsMzE1OTAsMzE1ODgsMzE1OTcsMzE2MDQsMzE1OTMsMzE2MDIs''@;'; put 'put ''MzE1ODksMzE2MDMsMzE2MDEsMzE2MDAsMzE1ODUsMzE2MDgsMzE2MDYsMzE1ODcsMzE5MjIsMzE5MjQsMzE5MTksMzIxMzYsMzIxMzQsMzIxMjgsMzIxNDEsMzIxMjcsMzIxMzMsMzIxMjIsMzIxNDIsMzIxMjMsMzIxMzEsMzIxMjQsMzIxNDAsMzIxNDgsMzIxMzIsMzIxMjUsMzIxNDYsMzI2''@;'; put 'put ''MjEsMzI2MTksMzI2MTUsMzI2MTYsMzI2MjAsMzI2NzgsMzI2NzcsMzI2NzksMzI3MzEsMzI3MzIsMzI4MDEsMzMxMjQsMzMxMjAsMzMxNDMsMzMxMTYsMzMxMjksMzMxMTUsMzMxMjIsMzMxMzgsMjY0MDEsMzMxMTgsMzMxNDIsMzMxMjcsMzMxMzUsMzMwOTIsMzMxMjEsMzMzMDksMzMzNTMs''@;'; put 'put ''MzMzNDgsMzMzNDQsMzMzNDYsMzMzNDksMzQwMzMsMzM4NTUsMzM4NzgsMzM5MTAsMzM5MTMsMzM5MzUsMzM5MzMsMzM4OTMsMzM4NzMsMzM4NTYsMzM5MjYsMzM4OTUsMzM4NDAsMzM4NjksMzM5MTcsMzM4ODIsMzM4ODEsMzM5MDgsMzM5MDcsMzM4ODUsMzQwNTUsMzM4ODYsMzM4NDcsMzM4''@;'; put 'put ''NTAsMzM4NDQsMzM5MTQsMzM4NTksMzM5MTIsMzM4NDIsMzM4NjEsMzM4MzMsMzM3NTMsMzM4NjcsMzM4MzksMzM4NTgsMzM4MzcsMzM4ODcsMzM5MDQsMzM4NDksMzM4NzAsMzM4NjgsMzM4NzQsMzM5MDMsMzM5ODksMzM5MzQsMzM4NTEsMzM4NjMsMzM4NDYsMzM4NDMsMzM4OTYsMzM5MTgs''@;'; put 'put ''MzM4NjAsMzM4MzUsMzM4ODgsMzM4NzYsMzM5MDIsMzM4NzIsMzQ1NzEsMzQ1NjQsMzQ1NTEsMzQ1NzIsMzQ1NTQsMzQ1MTgsMzQ1NDksMzQ2MzcsMzQ1NTIsMzQ1NzQsMzQ1NjksMzQ1NjEsMzQ1NTAsMzQ1NzMsMzQ1NjUsMzUwMzAsMzUwMTksMzUwMjEsMzUwMjIsMzUwMzgsMzUwMzUsMzUw''@;'; put 'put ''MzQsMzUwMjAsMzUwMjQsMzUyMDUsMzUyMjcsMzUyOTUsMzUzMDEsMzUzMDAsMzUyOTcsMzUyOTYsMzUyOTgsMzUyOTIsMzUzMDIsMzU0NDYsMzU0NjIsMzU0NTUsMzU0MjUsMzUzOTEsMzU0NDcsMzU0NTgsMzU0NjAsMzU0NDUsMzU0NTksMzU0NTcsMzU0NDQsMzU0NTAsMzU5MDAsMzU5MTUs''@;'; put 'put ''MzU5MTQsMzU5NDEsMzU5NDAsMzU5NDIsMzU5NzQsMzU5NzIsMzU5NzMsMzYwNDQsMzYyMDAsMzYyMDEsMzYyNDEsMzYyMzYsMzYyMzgsMzYyMzksMzYyMzcsMzYyNDMsMzYyNDQsMzYyNDAsMzYyNDIsMzYzMzYsMzYzMjAsMzYzMzIsMzYzMzcsMzYzMzQsMzYzMDQsMzYzMjksMzYzMjMsMzYz''@;'; put 'put ''MjIsMzYzMjcsMzYzMzgsMzYzMzEsMzYzNDAsMzY2MTQsMzY2MDcsMzY2MDksMzY2MDgsMzY2MTMsMzY2MTUsMzY2MTYsMzY2MTAsMzY2MTksMzY5NDYsMzY5MjcsMzY5MzIsMzY5MzcsMzY5MjUsMzcxMzYsMzcxMzMsMzcxMzUsMzcxMzcsMzcxNDIsMzcxNDAsMzcxMzEsMzcxMzQsMzcyMzAs''@;'; put 'put ''MzcyMzEsMzc0NDgsMzc0NTgsMzc0MjQsMzc0MzQsMzc0NzgsMzc0MjcsMzc0NzcsMzc0NzAsMzc1MDcsMzc0MjIsMzc0NTAsMzc0NDYsMzc0ODUsMzc0ODQsMzc0NTUsMzc0NzIsMzc0NzksMzc0ODcsMzc0MzAsMzc0NzMsMzc0ODgsMzc0MjUsMzc0NjAsMzc0NzUsMzc0NTYsMzc0OTAsMzc0''@;'; put 'put ''NTQsMzc0NTksMzc0NTIsMzc0NjIsMzc0MjYsMzgzMDMsMzgzMDAsMzgzMDIsMzgyOTksMzg1NDYsMzg1NDcsMzg1NDUsMzg1NTEsMzg2MDYsMzg2NTAsMzg2NTMsMzg2NDgsMzg2NDUsMzg3NzEsMzg3NzUsMzg3NzYsMzg3NzAsMzg5MjcsMzg5MjUsMzg5MjYsMzkwODQsMzkxNTgsMzkxNjEs''@;'; put 'put ''MzkzNDMsMzkzNDYsMzkzNDQsMzkzNDksMzk1OTcsMzk1OTUsMzk3NzEsNDAxNzAsNDAxNzMsNDAxNjcsNDA1NzYsNDA3MDEsMjA3MTAsMjA2OTIsMjA2OTUsMjA3MTIsMjA3MjMsMjA2OTksMjA3MTQsMjA3MDEsMjA3MDgsMjA2OTEsMjA3MTYsMjA3MjAsMjA3MTksMjA3MDcsMjA3MDQsMjA5''@;'; put 'put ''NTIsMjExMjAsMjExMjEsMjEyMjUsMjEyMjcsMjEyOTYsMjE0MjAsMjIwNTUsMjIwMzcsMjIwMjgsMjIwMzQsMjIwMTIsMjIwMzEsMjIwNDQsMjIwMTcsMjIwMzUsMjIwMTgsMjIwMTAsMjIwNDUsMjIwMjAsMjIwMTUsMjIwMDksMjI2NjUsMjI2NTIsMjI2NzIsMjI2ODAsMjI2NjIsMjI2NTcs''@;'; put 'put ''MjI2NTUsMjI2NDQsMjI2NjcsMjI2NTAsMjI2NjMsMjI2NzMsMjI2NzAsMjI2NDYsMjI2NTgsMjI2NjQsMjI2NTEsMjI2NzYsMjI2NzEsMjI3ODIsMjI4OTEsMjMyNjAsMjMyNzgsMjMyNjksMjMyNTMsMjMyNzQsMjMyNTgsMjMyNzcsMjMyNzUsMjMyODMsMjMyNjYsMjMyNjQsMjMyNTksMjMy''@;'; put 'put ''NzYsMjMyNjIsMjMyNjEsMjMyNTcsMjMyNzIsMjMyNjMsMjM0MTUsMjM1MjAsMjM1MjMsMjM2NTEsMjM5MzgsMjM5MzYsMjM5MzMsMjM5NDIsMjM5MzAsMjM5MzcsMjM5MjcsMjM5NDYsMjM5NDUsMjM5NDQsMjM5MzQsMjM5MzIsMjM5NDksMjM5MjksMjM5MzUsMjQxNTIsMjQxNTMsMjQxNDcs''@;'; put 'put ''MjQyODAsMjQyNzMsMjQyNzksMjQyNzAsMjQyODQsMjQyNzcsMjQyODEsMjQyNzQsMjQyNzYsMjQzODgsMjQzODcsMjQ0MzEsMjQ1MDIsMjQ4NzYsMjQ4NzIsMjQ4OTcsMjQ5MjYsMjQ5NDUsMjQ5NDcsMjQ5MTQsMjQ5MTUsMjQ5NDYsMjQ5NDAsMjQ5NjAsMjQ5NDgsMjQ5MTYsMjQ5NTQsMjQ5''@;'; put 'put ''MjMsMjQ5MzMsMjQ4OTEsMjQ5MzgsMjQ5MjksMjQ5MTgsMjUxMjksMjUxMjcsMjUxMzEsMjU2NDMsMjU2NzcsMjU2OTEsMjU2OTMsMjU3MTYsMjU3MTgsMjU3MTQsMjU3MTUsMjU3MjUsMjU3MTcsMjU3MDIsMjU3NjYsMjU2NzgsMjU3MzAsMjU2OTQsMjU2OTIsMjU2NzUsMjU2ODMsMjU2OTYs''@;'; put 'put ''MjU2ODAsMjU3MjcsMjU2NjMsMjU3MDgsMjU3MDcsMjU2ODksMjU3MDEsMjU3MTksMjU5NzEsMjYwMTYsMjYyNzMsMjYyNzIsMjYyNzEsMjYzNzMsMjYzNzIsMjY0MDIsMjcwNTcsMjcwNjIsMjcwODEsMjcwNDAsMjcwODYsMjcwMzAsMjcwNTYsMjcwNTIsMjcwNjgsMjcwMjUsMjcwMzMsMjcw''@;'; put 'put ''MjIsMjcwNDcsMjcwMjEsMjcwNDksMjcwNzAsMjcwNTUsMjcwNzEsMjcwNzYsMjcwNjksMjcwNDQsMjcwOTIsMjcwNjUsMjcwODIsMjcwMzQsMjcwODcsMjcwNTksMjcwMjcsMjcwNTAsMjcwNDEsMjcwMzgsMjcwOTcsMjcwMzEsMjcwMjQsMjcwNzQsMjcwNjEsMjcwNDUsMjcwNzgsMjc0NjYs''@;'; put 'put ''Mjc0NjksMjc0NjcsMjc1NTAsMjc1NTEsMjc1NTIsMjc1ODcsMjc1ODgsMjc2NDYsMjgzNjYsMjg0MDUsMjg0MDEsMjg0MTksMjg0NTMsMjg0MDgsMjg0NzEsMjg0MTEsMjg0NjIsMjg0MjUsMjg0OTQsMjg0NDEsMjg0NDIsMjg0NTUsMjg0NDAsMjg0NzUsMjg0MzQsMjgzOTcsMjg0MjYsMjg0''@;'; put 'put ''NzAsMjg1MzEsMjg0MDksMjgzOTgsMjg0NjEsMjg0ODAsMjg0NjQsMjg0NzYsMjg0NjksMjgzOTUsMjg0MjMsMjg0MzAsMjg0ODMsMjg0MjEsMjg0MTMsMjg0MDYsMjg0NzMsMjg0NDQsMjg0MTIsMjg0NzQsMjg0NDcsMjg0MjksMjg0NDYsMjg0MjQsMjg0NDksMjkwNjMsMjkwNzIsMjkwNjUs''@;'; put 'put ''MjkwNTYsMjkwNjEsMjkwNTgsMjkwNzEsMjkwNTEsMjkwNjIsMjkwNTcsMjkwNzksMjkyNTIsMjkyNjcsMjkzMzUsMjkzMzMsMjkzMzEsMjk1MDcsMjk1MTcsMjk1MjEsMjk1MTYsMjk3OTQsMjk4MTEsMjk4MDksMjk4MTMsMjk4MTAsMjk3OTksMjk4MDYsMjk5NTIsMjk5NTQsMjk5NTUsMzAw''@;'; put 'put ''NzcsMzAwOTYsMzAyMzAsMzAyMTYsMzAyMjAsMzAyMjksMzAyMjUsMzAyMTgsMzAyMjgsMzAzOTIsMzA1OTMsMzA1ODgsMzA1OTcsMzA1OTQsMzA1NzQsMzA1OTIsMzA1NzUsMzA1OTAsMzA1OTUsMzA4OTgsMzA4OTAsMzA5MDAsMzA4OTMsMzA4ODgsMzA4NDYsMzA4OTEsMzA4NzgsMzA4ODUs''@;'; put 'put ''MzA4ODAsMzA4OTIsMzA4ODIsMzA4ODQsMzExMjgsMzExMTQsMzExMTUsMzExMjYsMzExMjUsMzExMjQsMzExMjMsMzExMjcsMzExMTIsMzExMjIsMzExMjAsMzEyNzUsMzEzMDYsMzEyODAsMzEyNzksMzEyNzIsMzEyNzAsMzE0MDAsMzE0MDMsMzE0MDQsMzE0NzAsMzE2MjQsMzE2NDQsMzE2''@;'; put 'put ''MjYsMzE2MzMsMzE2MzIsMzE2MzgsMzE2MjksMzE2MjgsMzE2NDMsMzE2MzAsMzE2MjEsMzE2NDAsMjExMjQsMzE2NDEsMzE2NTIsMzE2MTgsMzE5MzEsMzE5MzUsMzE5MzIsMzE5MzAsMzIxNjcsMzIxODMsMzIxOTQsMzIxNjMsMzIxNzAsMzIxOTMsMzIxOTIsMzIxOTcsMzIxNTcsMzIyMDYs''@;'; put 'put ''MzIxOTYsMzIxOTgsMzIyMDMsMzIyMDQsMzIxNzUsMzIxODUsMzIxNTAsMzIxODgsMzIxNTksMzIxNjYsMzIxNzQsMzIxNjksMzIxNjEsMzIyMDEsMzI2MjcsMzI3MzgsMzI3MzksMzI3NDEsMzI3MzQsMzI4MDQsMzI4NjEsMzI4NjAsMzMxNjEsMzMxNTgsMzMxNTUsMzMxNTksMzMxNjUsMzMx''@;'; put 'put ''NjQsMzMxNjMsMzMzMDEsMzM5NDMsMzM5NTYsMzM5NTMsMzM5NTEsMzM5NzgsMzM5OTgsMzM5ODYsMzM5NjQsMzM5NjYsMzM5NjMsMzM5NzcsMzM5NzIsMzM5ODUsMzM5OTcsMzM5NjIsMzM5NDYsMzM5NjksMzRlMywzMzk0OSwzMzk1OSwzMzk3OSwzMzk1NCwzMzk0MCwzMzk5MSwzMzk5Niwz''@;'; put 'put ''Mzk0NywzMzk2MSwzMzk2NywzMzk2MCwzNDAwNiwzMzk0NCwzMzk3NCwzMzk5OSwzMzk1MiwzNDAwNywzNDAwNCwzNDAwMiwzNDAxMSwzMzk2OCwzMzkzNywzNDQwMSwzNDYxMSwzNDU5NSwzNDYwMCwzNDY2NywzNDYyNCwzNDYwNiwzNDU5MCwzNDU5MywzNDU4NSwzNDU4NywzNDYyNywzNDYw''@;'; put 'put ''NCwzNDYyNSwzNDYyMiwzNDYzMCwzNDU5MiwzNDYxMCwzNDYwMiwzNDYwNSwzNDYyMCwzNDU3OCwzNDYxOCwzNDYwOSwzNDYxMywzNDYyNiwzNDU5OCwzNDU5OSwzNDYxNiwzNDU5NiwzNDU4NiwzNDYwOCwzNDU3NywzNTA2MywzNTA0NywzNTA1NywzNTA1OCwzNTA2NiwzNTA3MCwzNTA1NCwz''@;'; put 'put ''NTA2OCwzNTA2MiwzNTA2NywzNTA1NiwzNTA1MiwzNTA1MSwzNTIyOSwzNTIzMywzNTIzMSwzNTIzMCwzNTMwNSwzNTMwNywzNTMwNCwzNTQ5OSwzNTQ4MSwzNTQ2NywzNTQ3NCwzNTQ3MSwzNTQ3OCwzNTkwMSwzNTk0NCwzNTk0NSwzNjA1MywzNjA0NywzNjA1NSwzNjI0NiwzNjM2MSwzNjM1''@;'; put 'put ''NCwzNjM1MSwzNjM2NSwzNjM0OSwzNjM2MiwzNjM1NSwzNjM1OSwzNjM1OCwzNjM1NywzNjM1MCwzNjM1MiwzNjM1NiwzNjYyNCwzNjYyNSwzNjYyMiwzNjYyMSwzNzE1NSwzNzE0OCwzNzE1MiwzNzE1NCwzNzE1MSwzNzE0OSwzNzE0NiwzNzE1NiwzNzE1MywzNzE0NywzNzI0MiwzNzIzNCwz''@;'; put 'put ''NzI0MSwzNzIzNSwzNzU0MSwzNzU0MCwzNzQ5NCwzNzUzMSwzNzQ5OCwzNzUzNiwzNzUyNCwzNzU0NiwzNzUxNywzNzU0MiwzNzUzMCwzNzU0NywzNzQ5NywzNzUyNywzNzUwMywzNzUzOSwzNzYxNCwzNzUxOCwzNzUwNiwzNzUyNSwzNzUzOCwzNzUwMSwzNzUxMiwzNzUzNywzNzUxNCwzNzUx''@;'; put 'put ''MCwzNzUxNiwzNzUyOSwzNzU0MywzNzUwMiwzNzUxMSwzNzU0NSwzNzUzMywzNzUxNSwzNzQyMSwzODU1OCwzODU2MSwzODY1NSwzODc0NCwzODc4MSwzODc3OCwzODc4MiwzODc4NywzODc4NCwzODc4NiwzODc3OSwzODc4OCwzODc4NSwzODc4MywzODg2MiwzODg2MSwzODkzNCwzOTA4NSwz''@;'; put 'put ''OTA4NiwzOTE3MCwzOTE2OCwzOTE3NSwzOTMyNSwzOTMyNCwzOTM2MywzOTM1MywzOTM1NSwzOTM1NCwzOTM2MiwzOTM1NywzOTM2NywzOTYwMSwzOTY1MSwzOTY1NSwzOTc0MiwzOTc0MywzOTc3NiwzOTc3NywzOTc3NSw0MDE3Nyw0MDE3OCw0MDE4MSw0MDYxNSwyMDczNSwyMDczOSwyMDc4''@;'; put 'put ''NCwyMDcyOCwyMDc0MiwyMDc0MywyMDcyNiwyMDczNCwyMDc0NywyMDc0OCwyMDczMywyMDc0NiwyMTEzMSwyMTEzMiwyMTIzMywyMTIzMSwyMjA4OCwyMjA4MiwyMjA5MiwyMjA2OSwyMjA4MSwyMjA5MCwyMjA4OSwyMjA4NiwyMjEwNCwyMjEwNiwyMjA4MCwyMjA2NywyMjA3NywyMjA2MCwy''@;'; put 'put ''MjA3OCwyMjA3MiwyMjA1OCwyMjA3NCwyMjI5OCwyMjY5OSwyMjY4NSwyMjcwNSwyMjY4OCwyMjY5MSwyMjcwMywyMjcwMCwyMjY5MywyMjY4OSwyMjc4MywyMzI5NSwyMzI4NCwyMzI5MywyMzI4NywyMzI4NiwyMzI5OSwyMzI4OCwyMzI5OCwyMzI4OSwyMzI5NywyMzMwMywyMzMwMSwyMzMx''@;'; put 'put ''MSwyMzY1NSwyMzk2MSwyMzk1OSwyMzk2NywyMzk1NCwyMzk3MCwyMzk1NSwyMzk1NywyMzk2OCwyMzk2NCwyMzk2OSwyMzk2MiwyMzk2NiwyNDE2OSwyNDE1NywyNDE2MCwyNDE1NiwzMjI0MywyNDI4MywyNDI4NiwyNDI4OSwyNDM5MywyNDQ5OCwyNDk3MSwyNDk2MywyNDk1MywyNTAwOSwy''@;'; put 'put ''NTAwOCwyNDk5NCwyNDk2OSwyNDk4NywyNDk3OSwyNTAwNywyNTAwNSwyNDk5MSwyNDk3OCwyNTAwMiwyNDk5MywyNDk3MywyNDkzNCwyNTAxMSwyNTEzMywyNTcxMCwyNTcxMiwyNTc1MCwyNTc2MCwyNTczMywyNTc1MSwyNTc1NiwyNTc0MywyNTczOSwyNTczOCwyNTc0MCwyNTc2MywyNTc1''@;'; put 'put ''OSwyNTcwNCwyNTc3NywyNTc1MiwyNTk3NCwyNTk3OCwyNTk3NywyNTk3OSwyNjAzNCwyNjAzNSwyNjI5MywyNjI4OCwyNjI4MSwyNjI5MCwyNjI5NSwyNjI4MiwyNjI4NywyNzEzNiwyNzE0MiwyNzE1OSwyNzEwOSwyNzEyOCwyNzE1NywyNzEyMSwyNzEwOCwyNzE2OCwyNzEzNSwyNzExNiwy''@;'; put 'put ''NzEwNiwyNzE2MywyNzE2NSwyNzEzNCwyNzE3NSwyNzEyMiwyNzExOCwyNzE1NiwyNzEyNywyNzExMSwyNzIwMCwyNzE0NCwyNzExMCwyNzEzMSwyNzE0OSwyNzEzMiwyNzExNSwyNzE0NSwyNzE0MCwyNzE2MCwyNzE3MywyNzE1MSwyNzEyNiwyNzE3NCwyNzE0MywyNzEyNCwyNzE1OCwyNzQ3''@;'; put 'put ''MywyNzU1NywyNzU1NSwyNzU1NCwyNzU1OCwyNzY0OSwyNzY0OCwyNzY0NywyNzY1MCwyODQ4MSwyODQ1NCwyODU0MiwyODU1MSwyODYxNCwyODU2MiwyODU1NywyODU1MywyODU1NiwyODUxNCwyODQ5NSwyODU0OSwyODUwNiwyODU2NiwyODUzNCwyODUyNCwyODU0NiwyODUwMSwyODUzMCwy''@;'; put 'put ''ODQ5OCwyODQ5NiwyODUwMywyODU2NCwyODU2MywyODUwOSwyODQxNiwyODUxMywyODUyMywyODU0MSwyODUxOSwyODU2MCwyODQ5OSwyODU1NSwyODUyMSwyODU0MywyODU2NSwyODUxNSwyODUzNSwyODUyMiwyODUzOSwyOTEwNiwyOTEwMywyOTA4MywyOTEwNCwyOTA4OCwyOTA4MiwyOTA5''@;'; put 'put ''NywyOTEwOSwyOTA4NSwyOTA5MywyOTA4NiwyOTA5MiwyOTA4OSwyOTA5OCwyOTA4NCwyOTA5NSwyOTEwNywyOTMzNiwyOTMzOCwyOTUyOCwyOTUyMiwyOTUzNCwyOTUzNSwyOTUzNiwyOTUzMywyOTUzMSwyOTUzNywyOTUzMCwyOTUyOSwyOTUzOCwyOTgzMSwyOTgzMywyOTgzNCwyOTgzMCwy''@;'; put 'put ''OTgyNSwyOTgyMSwyOTgyOSwyOTgzMiwyOTgyMCwyOTgxNywyOTk2MCwyOTk1OSwzMDA3OCwzMDI0NSwzMDIzOCwzMDIzMywzMDIzNywzMDIzNiwzMDI0MywzMDIzNCwzMDI0OCwzMDIzNSwzMDM2NCwzMDM2NSwzMDM2NiwzMDM2MywzMDYwNSwzMDYwNywzMDYwMSwzMDYwMCwzMDkyNSwzMDkw''@;'; put 'put ''NywzMDkyNywzMDkyNCwzMDkyOSwzMDkyNiwzMDkzMiwzMDkyMCwzMDkxNSwzMDkxNiwzMDkyMSwzMTEzMCwzMTEzNywzMTEzNiwzMTEzMiwzMTEzOCwzMTEzMSwyNzUxMCwzMTI4OSwzMTQxMCwzMTQxMiwzMTQxMSwzMTY3MSwzMTY5MSwzMTY3OCwzMTY2MCwzMTY5NCwzMTY2MywzMTY3Mywz''@;'; put 'put ''MTY5MCwzMTY2OSwzMTk0MSwzMTk0NCwzMTk0OCwzMTk0NywzMjI0NywzMjIxOSwzMjIzNCwzMjIzMSwzMjIxNSwzMjIyNSwzMjI1OSwzMjI1MCwzMjIzMCwzMjI0NiwzMjI0MSwzMjI0MCwzMjIzOCwzMjIyMywzMjYzMCwzMjY4NCwzMjY4OCwzMjY4NSwzMjc0OSwzMjc0NywzMjc0NiwzMjc0''@;'; put 'put ''OCwzMjc0MiwzMjc0NCwzMjg2OCwzMjg3MSwzMzE4NywzMzE4MywzMzE4MiwzMzE3MywzMzE4NiwzMzE3NywzMzE3NSwzMzMwMiwzMzM1OSwzMzM2MywzMzM2MiwzMzM2MCwzMzM1OCwzMzM2MSwzNDA4NCwzNDEwNywzNDA2MywzNDA0OCwzNDA4OSwzNDA2MiwzNDA1NywzNDA2MSwzNDA3OSwz''@;'; put 'put ''NDA1OCwzNDA4NywzNDA3NiwzNDA0MywzNDA5MSwzNDA0MiwzNDA1NiwzNDA2MCwzNDAzNiwzNDA5MCwzNDAzNCwzNDA2OSwzNDAzOSwzNDAyNywzNDAzNSwzNDA0NCwzNDA2NiwzNDAyNiwzNDAyNSwzNDA3MCwzNDA0NiwzNDA4OCwzNDA3NywzNDA5NCwzNDA1MCwzNDA0NSwzNDA3OCwzNDAz''@;'; put 'put ''OCwzNDA5NywzNDA4NiwzNDAyMywzNDAyNCwzNDAzMiwzNDAzMSwzNDA0MSwzNDA3MiwzNDA4MCwzNDA5NiwzNDA1OSwzNDA3MywzNDA5NSwzNDQwMiwzNDY0NiwzNDY1OSwzNDY2MCwzNDY3OSwzNDc4NSwzNDY3NSwzNDY0OCwzNDY0NCwzNDY1MSwzNDY0MiwzNDY1NywzNDY1MCwzNDY0MSwz''@;'; put 'put ''NDY1NCwzNDY2OSwzNDY2NiwzNDY0MCwzNDYzOCwzNDY1NSwzNDY1MywzNDY3MSwzNDY2OCwzNDY4MiwzNDY3MCwzNDY1MiwzNDY2MSwzNDYzOSwzNDY4MywzNDY3NywzNDY1OCwzNDY2MywzNDY2NSwzNDkwNiwzNTA3NywzNTA4NCwzNTA5MiwzNTA4MywzNTA5NSwzNTA5NiwzNTA5NywzNTA3''@;'; put 'put ''OCwzNTA5NCwzNTA4OSwzNTA4NiwzNTA4MSwzNTIzNCwzNTIzNiwzNTIzNSwzNTMwOSwzNTMxMiwzNTMwOCwzNTUzNSwzNTUyNiwzNTUxMiwzNTUzOSwzNTUzNywzNTU0MCwzNTU0MSwzNTUxNSwzNTU0MywzNTUxOCwzNTUyMCwzNTUyNSwzNTU0NCwzNTUyMywzNTUxNCwzNTUxNywzNTU0NSwz''@;'; put 'put ''NTkwMiwzNTkxNywzNTk4MywzNjA2OSwzNjA2MywzNjA1NywzNjA3MiwzNjA1OCwzNjA2MSwzNjA3MSwzNjI1NiwzNjI1MiwzNjI1NywzNjI1MSwzNjM4NCwzNjM4NywzNjM4OSwzNjM4OCwzNjM5OCwzNjM3MywzNjM3OSwzNjM3NCwzNjM2OSwzNjM3NywzNjM5MCwzNjM5MSwzNjM3MiwzNjM3''@;'; put 'put ''MCwzNjM3NiwzNjM3MSwzNjM4MCwzNjM3NSwzNjM3OCwzNjY1MiwzNjY0NCwzNjYzMiwzNjYzNCwzNjY0MCwzNjY0MywzNjYzMCwzNjYzMSwzNjk3OSwzNjk3NiwzNjk3NSwzNjk2NywzNjk3MSwzNzE2NywzNzE2MywzNzE2MSwzNzE2MiwzNzE3MCwzNzE1OCwzNzE2NiwzNzI1MywzNzI1NCwz''@;'; put 'put ''NzI1OCwzNzI0OSwzNzI1MCwzNzI1MiwzNzI0OCwzNzU4NCwzNzU3MSwzNzU3MiwzNzU2OCwzNzU5MywzNzU1OCwzNzU4MywzNzYxNywzNzU5OSwzNzU5MiwzNzYwOSwzNzU5MSwzNzU5NywzNzU4MCwzNzYxNSwzNzU3MCwzNzYwOCwzNzU3OCwzNzU3NiwzNzU4MiwzNzYwNiwzNzU4MSwzNzU4''@;'; put 'put ''OSwzNzU3NywzNzYwMCwzNzU5OCwzNzYwNywzNzU4NSwzNzU4NywzNzU1NywzNzYwMSwzNzU3NCwzNzU1NiwzODI2OCwzODMxNiwzODMxNSwzODMxOCwzODMyMCwzODU2NCwzODU2MiwzODYxMSwzODY2MSwzODY2NCwzODY1OCwzODc0NiwzODc5NCwzODc5OCwzODc5MiwzODg2NCwzODg2Mywz''@;'; put 'put ''ODk0MiwzODk0MSwzODk1MCwzODk1MywzODk1MiwzODk0NCwzODkzOSwzODk1MSwzOTA5MCwzOTE3NiwzOTE2MiwzOTE4NSwzOTE4OCwzOTE5MCwzOTE5MSwzOTE4OSwzOTM4OCwzOTM3MywzOTM3NSwzOTM3OSwzOTM4MCwzOTM3NCwzOTM2OSwzOTM4MiwzOTM4NCwzOTM3MSwzOTM4MywzOTM3''@;'; put 'put ''MiwzOTYwMywzOTY2MCwzOTY1OSwzOTY2NywzOTY2NiwzOTY2NSwzOTc1MCwzOTc0NywzOTc4MywzOTc5NiwzOTc5MywzOTc4MiwzOTc5OCwzOTc5NywzOTc5MiwzOTc4NCwzOTc4MCwzOTc4OCw0MDE4OCw0MDE4Niw0MDE4OSw0MDE5MSw0MDE4Myw0MDE5OSw0MDE5Miw0MDE4NSw0MDE4Nyw0''@;'; put 'put ''MDIwMCw0MDE5Nyw0MDE5Niw0MDU3OSw0MDY1OSw0MDcxOSw0MDcyMCwyMDc2NCwyMDc1NSwyMDc1OSwyMDc2MiwyMDc1MywyMDk1OCwyMTMwMCwyMTQ3MywyMjEyOCwyMjExMiwyMjEyNiwyMjEzMSwyMjExOCwyMjExNSwyMjEyNSwyMjEzMCwyMjExMCwyMjEzNSwyMjMwMCwyMjI5OSwyMjcy''@;'; put 'put ''OCwyMjcxNywyMjcyOSwyMjcxOSwyMjcxNCwyMjcyMiwyMjcxNiwyMjcyNiwyMzMxOSwyMzMyMSwyMzMyMywyMzMyOSwyMzMxNiwyMzMxNSwyMzMxMiwyMzMxOCwyMzMzNiwyMzMyMiwyMzMyOCwyMzMyNiwyMzUzNSwyMzk4MCwyMzk4NSwyMzk3NywyMzk3NSwyMzk4OSwyMzk4NCwyMzk4Miwy''@;'; put 'put ''Mzk3OCwyMzk3NiwyMzk4NiwyMzk4MSwyMzk4MywyMzk4OCwyNDE2NywyNDE2OCwyNDE2NiwyNDE3NSwyNDI5NywyNDI5NSwyNDI5NCwyNDI5NiwyNDI5MywyNDM5NSwyNDUwOCwyNDk4OSwyNWUzLDI0OTgyLDI1MDI5LDI1MDEyLDI1MDMwLDI1MDI1LDI1MDM2LDI1MDE4LDI1MDIzLDI1MDE2''@;'; put 'put ''LDI0OTcyLDI1ODE1LDI1ODE0LDI1ODA4LDI1ODA3LDI1ODAxLDI1Nzg5LDI1NzM3LDI1Nzk1LDI1ODE5LDI1ODQzLDI1ODE3LDI1OTA3LDI1OTgzLDI1OTgwLDI2MDE4LDI2MzEyLDI2MzAyLDI2MzA0LDI2MzE0LDI2MzE1LDI2MzE5LDI2MzAxLDI2Mjk5LDI2Mjk4LDI2MzE2LDI2NDAzLDI3''@;'; put 'put ''MTg4LDI3MjM4LDI3MjA5LDI3MjM5LDI3MTg2LDI3MjQwLDI3MTk4LDI3MjI5LDI3MjQ1LDI3MjU0LDI3MjI3LDI3MjE3LDI3MTc2LDI3MjI2LDI3MTk1LDI3MTk5LDI3MjAxLDI3MjQyLDI3MjM2LDI3MjE2LDI3MjE1LDI3MjIwLDI3MjQ3LDI3MjQxLDI3MjMyLDI3MTk2LDI3MjMwLDI3MjIy''@;'; put 'put ''LDI3MjIxLDI3MjEzLDI3MjE0LDI3MjA2LDI3NDc3LDI3NDc2LDI3NDc4LDI3NTU5LDI3NTYyLDI3NTYzLDI3NTkyLDI3NTkxLDI3NjUyLDI3NjUxLDI3NjU0LDI4NTg5LDI4NjE5LDI4NTc5LDI4NjE1LDI4NjA0LDI4NjIyLDI4NjE2LDI4NTEwLDI4NjEyLDI4NjA1LDI4NTc0LDI4NjE4LDI4''@;'; put 'put ''NTg0LDI4Njc2LDI4NTgxLDI4NTkwLDI4NjAyLDI4NTg4LDI4NTg2LDI4NjIzLDI4NjA3LDI4NjAwLDI4NTc4LDI4NjE3LDI4NTg3LDI4NjIxLDI4NTkxLDI4NTk0LDI4NTkyLDI5MTI1LDI5MTIyLDI5MTE5LDI5MTEyLDI5MTQyLDI5MTIwLDI5MTIxLDI5MTMxLDI5MTQwLDI5MTMwLDI5MTI3''@;'; put 'put ''LDI5MTM1LDI5MTE3LDI5MTQ0LDI5MTE2LDI5MTI2LDI5MTQ2LDI5MTQ3LDI5MzQxLDI5MzQyLDI5NTQ1LDI5NTQyLDI5NTQzLDI5NTQ4LDI5NTQxLDI5NTQ3LDI5NTQ2LDI5ODIzLDI5ODUwLDI5ODU2LDI5ODQ0LDI5ODQyLDI5ODQ1LDI5ODU3LDI5OTYzLDMwMDgwLDMwMjU1LDMwMjUzLDMw''@;'; put 'put ''MjU3LDMwMjY5LDMwMjU5LDMwMjY4LDMwMjYxLDMwMjU4LDMwMjU2LDMwMzk1LDMwNDM4LDMwNjE4LDMwNjIxLDMwNjI1LDMwNjIwLDMwNjE5LDMwNjI2LDMwNjI3LDMwNjEzLDMwNjE3LDMwNjE1LDMwOTQxLDMwOTUzLDMwOTQ5LDMwOTU0LDMwOTQyLDMwOTQ3LDMwOTM5LDMwOTQ1LDMwOTQ2''@;'; put 'put ''LDMwOTU3LDMwOTQzLDMwOTQ0LDMxMTQwLDMxMzAwLDMxMzA0LDMxMzAzLDMxNDE0LDMxNDE2LDMxNDEzLDMxNDA5LDMxNDE1LDMxNzEwLDMxNzE1LDMxNzE5LDMxNzA5LDMxNzAxLDMxNzE3LDMxNzA2LDMxNzIwLDMxNzM3LDMxNzAwLDMxNzIyLDMxNzE0LDMxNzA4LDMxNzIzLDMxNzA0LDMx''@;'; put 'put ''NzExLDMxOTU0LDMxOTU2LDMxOTU5LDMxOTUyLDMxOTUzLDMyMjc0LDMyMjg5LDMyMjc5LDMyMjY4LDMyMjg3LDMyMjg4LDMyMjc1LDMyMjcwLDMyMjg0LDMyMjc3LDMyMjgyLDMyMjkwLDMyMjY3LDMyMjcxLDMyMjc4LDMyMjY5LDMyMjc2LDMyMjkzLDMyMjkyLDMyNTc5LDMyNjM1LDMyNjM2''@;'; put 'put ''LDMyNjM0LDMyNjg5LDMyNzUxLDMyODEwLDMyODA5LDMyODc2LDMzMjAxLDMzMTkwLDMzMTk4LDMzMjA5LDMzMjA1LDMzMTk1LDMzMjAwLDMzMTk2LDMzMjA0LDMzMjAyLDMzMjA3LDMzMTkxLDMzMjY2LDMzMzY1LDMzMzY2LDMzMzY3LDM0MTM0LDM0MTE3LDM0MTU1LDM0MTI1LDM0MTMxLDM0''@;'; put 'put ''MTQ1LDM0MTM2LDM0MTEyLDM0MTE4LDM0MTQ4LDM0MTEzLDM0MTQ2LDM0MTE2LDM0MTI5LDM0MTE5LDM0MTQ3LDM0MTEwLDM0MTM5LDM0MTYxLDM0MTI2LDM0MTU4LDM0MTY1LDM0MTMzLDM0MTUxLDM0MTQ0LDM0MTg4LDM0MTUwLDM0MTQxLDM0MTMyLDM0MTQ5LDM0MTU2LDM0NDAzLDM0NDA1''@;'; put 'put ''LDM0NDA0LDM0NzE1LDM0NzAzLDM0NzExLDM0NzA3LDM0NzA2LDM0Njk2LDM0Njg5LDM0NzEwLDM0NzEyLDM0NjgxLDM0Njk1LDM0NzIzLDM0NjkzLDM0NzA0LDM0NzA1LDM0NzE3LDM0NjkyLDM0NzA4LDM0NzE2LDM0NzE0LDM0Njk3LDM1MTAyLDM1MTEwLDM1MTIwLDM1MTE3LDM1MTE4LDM1''@;'; put 'put ''MTExLDM1MTIxLDM1MTA2LDM1MTEzLDM1MTA3LDM1MTE5LDM1MTE2LDM1MTAzLDM1MzEzLDM1NTUyLDM1NTU0LDM1NTcwLDM1NTcyLDM1NTczLDM1NTQ5LDM1NjA0LDM1NTU2LDM1NTUxLDM1NTY4LDM1NTI4LDM1NTUwLDM1NTUzLDM1NTYwLDM1NTgzLDM1NTY3LDM1NTc5LDM1OTg1LDM1OTg2''@;'; put 'put ''LDM1OTg0LDM2MDg1LDM2MDc4LDM2MDgxLDM2MDgwLDM2MDgzLDM2MjA0LDM2MjA2LDM2MjYxLDM2MjYzLDM2NDAzLDM2NDE0LDM2NDA4LDM2NDE2LDM2NDIxLDM2NDA2LDM2NDEyLDM2NDEzLDM2NDE3LDM2NDAwLDM2NDE1LDM2NTQxLDM2NjYyLDM2NjU0LDM2NjYxLDM2NjU4LDM2NjY1LDM2''@;'; put 'put ''NjYzLDM2NjYwLDM2OTgyLDM2OTg1LDM2OTg3LDM2OTk4LDM3MTE0LDM3MTcxLDM3MTczLDM3MTc0LDM3MjY3LDM3MjY0LDM3MjY1LDM3MjYxLDM3MjYzLDM3NjcxLDM3NjYyLDM3NjQwLDM3NjYzLDM3NjM4LDM3NjQ3LDM3NzU0LDM3Njg4LDM3NjkyLDM3NjU5LDM3NjY3LDM3NjUwLDM3NjMz''@;'; put 'put ''LDM3NzAyLDM3Njc3LDM3NjQ2LDM3NjQ1LDM3NTc5LDM3NjYxLDM3NjI2LDM3NjY5LDM3NjUxLDM3NjI1LDM3NjIzLDM3Njg0LDM3NjM0LDM3NjY4LDM3NjMxLDM3NjczLDM3Njg5LDM3Njg1LDM3Njc0LDM3NjUyLDM3NjQ0LDM3NjQzLDM3NjMwLDM3NjQxLDM3NjMyLDM3NjI3LDM3NjU0LDM4''@;'; put 'put ''MzMyLDM4MzQ5LDM4MzM0LDM4MzI5LDM4MzMwLDM4MzI2LDM4MzM1LDM4MzI1LDM4MzMzLDM4NTY5LDM4NjEyLDM4NjY3LDM4Njc0LDM4NjcyLDM4ODA5LDM4ODA3LDM4ODA0LDM4ODk2LDM4OTA0LDM4OTY1LDM4OTU5LDM4OTYyLDM5MjA0LDM5MTk5LDM5MjA3LDM5MjA5LDM5MzI2LDM5NDA2''@;'; put 'put ''LDM5NDA0LDM5Mzk3LDM5Mzk2LDM5NDA4LDM5Mzk1LDM5NDAyLDM5NDAxLDM5Mzk5LDM5NjA5LDM5NjE1LDM5NjA0LDM5NjExLDM5NjcwLDM5Njc0LDM5NjczLDM5NjcxLDM5NzMxLDM5ODA4LDM5ODEzLDM5ODE1LDM5ODA0LDM5ODA2LDM5ODAzLDM5ODEwLDM5ODI3LDM5ODI2LDM5ODI0LDM5''@;'; put 'put ''ODAyLDM5ODI5LDM5ODA1LDM5ODE2LDQwMjI5LDQwMjE1LDQwMjI0LDQwMjIyLDQwMjEyLDQwMjMzLDQwMjIxLDQwMjE2LDQwMjI2LDQwMjA4LDQwMjE3LDQwMjIzLDQwNTg0LDQwNTgyLDQwNTgzLDQwNjIyLDQwNjIxLDQwNjYxLDQwNjYyLDQwNjk4LDQwNzIyLDQwNzY1LDIwNzc0LDIwNzcz''@;'; put 'put ''LDIwNzcwLDIwNzcyLDIwNzY4LDIwNzc3LDIxMjM2LDIyMTYzLDIyMTU2LDIyMTU3LDIyMTUwLDIyMTQ4LDIyMTQ3LDIyMTQyLDIyMTQ2LDIyMTQzLDIyMTQ1LDIyNzQyLDIyNzQwLDIyNzM1LDIyNzM4LDIzMzQxLDIzMzMzLDIzMzQ2LDIzMzMxLDIzMzQwLDIzMzM1LDIzMzM0LDIzMzQzLDIz''@;'; put 'put ''MzQyLDIzNDE5LDIzNTM3LDIzNTM4LDIzOTkxLDI0MTcyLDI0MTcwLDI0NTEwLDI0NTA3LDI1MDI3LDI1MDEzLDI1MDIwLDI1MDYzLDI1MDU2LDI1MDYxLDI1MDYwLDI1MDY0LDI1MDU0LDI1ODM5LDI1ODMzLDI1ODI3LDI1ODM1LDI1ODI4LDI1ODMyLDI1OTg1LDI1OTg0LDI2MDM4LDI2MDc0''@;'; put 'put ''LDI2MzIyLDI3Mjc3LDI3Mjg2LDI3MjY1LDI3MzAxLDI3MjczLDI3Mjk1LDI3MjkxLDI3Mjk3LDI3Mjk0LDI3MjcxLDI3MjgzLDI3Mjc4LDI3Mjg1LDI3MjY3LDI3MzA0LDI3MzAwLDI3MjgxLDI3MjYzLDI3MzAyLDI3MjkwLDI3MjY5LDI3Mjc2LDI3MjgyLDI3NDgzLDI3NTY1LDI3NjU3LDI4''@;'; put 'put ''NjIwLDI4NTg1LDI4NjYwLDI4NjI4LDI4NjQzLDI4NjM2LDI4NjUzLDI4NjQ3LDI4NjQ2LDI4NjM4LDI4NjU4LDI4NjM3LDI4NjQyLDI4NjQ4LDI5MTUzLDI5MTY5LDI5MTYwLDI5MTcwLDI5MTU2LDI5MTY4LDI5MTU0LDI5NTU1LDI5NTUwLDI5NTUxLDI5ODQ3LDI5ODc0LDI5ODY3LDI5ODQw''@;'; put 'put ''LDI5ODY2LDI5ODY5LDI5ODczLDI5ODYxLDI5ODcxLDI5OTY4LDI5OTY5LDI5OTcwLDI5OTY3LDMwMDg0LDMwMjc1LDMwMjgwLDMwMjgxLDMwMjc5LDMwMzcyLDMwNDQxLDMwNjQ1LDMwNjM1LDMwNjQyLDMwNjQ3LDMwNjQ2LDMwNjQ0LDMwNjQxLDMwNjMyLDMwNzA0LDMwOTYzLDMwOTczLDMw''@;'; put 'put ''OTc4LDMwOTcxLDMwOTcyLDMwOTYyLDMwOTgxLDMwOTY5LDMwOTc0LDMwOTgwLDMxMTQ3LDMxMTQ0LDMxMzI0LDMxMzIzLDMxMzE4LDMxMzIwLDMxMzE2LDMxMzIyLDMxNDIyLDMxNDI0LDMxNDI1LDMxNzQ5LDMxNzU5LDMxNzMwLDMxNzQ0LDMxNzQzLDMxNzM5LDMxNzU4LDMxNzMyLDMxNzU1''@;'; put 'put ''LDMxNzMxLDMxNzQ2LDMxNzUzLDMxNzQ3LDMxNzQ1LDMxNzM2LDMxNzQxLDMxNzUwLDMxNzI4LDMxNzI5LDMxNzYwLDMxNzU0LDMxOTc2LDMyMzAxLDMyMzE2LDMyMzIyLDMyMzA3LDM4OTg0LDMyMzEyLDMyMjk4LDMyMzI5LDMyMzIwLDMyMzI3LDMyMjk3LDMyMzMyLDMyMzA0LDMyMzE1LDMy''@;'; put 'put ''MzEwLDMyMzI0LDMyMzE0LDMyNTgxLDMyNjM5LDMyNjM4LDMyNjM3LDMyNzU2LDMyNzU0LDMyODEyLDMzMjExLDMzMjIwLDMzMjI4LDMzMjI2LDMzMjIxLDMzMjIzLDMzMjEyLDMzMjU3LDMzMzcxLDMzMzcwLDMzMzcyLDM0MTc5LDM0MTc2LDM0MTkxLDM0MjE1LDM0MTk3LDM0MjA4LDM0MTg3''@;'; put 'put ''LDM0MjExLDM0MTcxLDM0MjEyLDM0MjAyLDM0MjA2LDM0MTY3LDM0MTcyLDM0MTg1LDM0MjA5LDM0MTcwLDM0MTY4LDM0MTM1LDM0MTkwLDM0MTk4LDM0MTgyLDM0MTg5LDM0MjAxLDM0MjA1LDM0MTc3LDM0MjEwLDM0MTc4LDM0MTg0LDM0MTgxLDM0MTY5LDM0MTY2LDM0MjAwLDM0MTkyLDM0''@;'; put 'put ''MjA3LDM0NDA4LDM0NzUwLDM0NzMwLDM0NzMzLDM0NzU3LDM0NzM2LDM0NzMyLDM0NzQ1LDM0NzQxLDM0NzQ4LDM0NzM0LDM0NzYxLDM0NzU1LDM0NzU0LDM0NzY0LDM0NzQzLDM0NzM1LDM0NzU2LDM0NzYyLDM0NzQwLDM0NzQyLDM0NzUxLDM0NzQ0LDM0NzQ5LDM0NzgyLDM0NzM4LDM1MTI1''@;'; put 'put ''LDM1MTIzLDM1MTMyLDM1MTM0LDM1MTM3LDM1MTU0LDM1MTI3LDM1MTM4LDM1MjQ1LDM1MjQ3LDM1MjQ2LDM1MzE0LDM1MzE1LDM1NjE0LDM1NjA4LDM1NjA2LDM1NjAxLDM1NTg5LDM1NTk1LDM1NjE4LDM1NTk5LDM1NjAyLDM1NjA1LDM1NTkxLDM1NTk3LDM1NTkyLDM1NTkwLDM1NjEyLDM1''@;'; put 'put ''NjAzLDM1NjEwLDM1OTE5LDM1OTUyLDM1OTU0LDM1OTUzLDM1OTUxLDM1OTg5LDM1OTg4LDM2MDg5LDM2MjA3LDM2NDMwLDM2NDI5LDM2NDM1LDM2NDMyLDM2NDI4LDM2NDIzLDM2Njc1LDM2NjcyLDM2OTk3LDM2OTkwLDM3MTc2LDM3Mjc0LDM3MjgyLDM3Mjc1LDM3MjczLDM3Mjc5LDM3Mjgx''@;'; put 'put ''LDM3Mjc3LDM3MjgwLDM3NzkzLDM3NzYzLDM3ODA3LDM3NzMyLDM3NzE4LDM3NzAzLDM3NzU2LDM3NzIwLDM3NzI0LDM3NzUwLDM3NzA1LDM3NzEyLDM3NzEzLDM3NzI4LDM3NzQxLDM3Nzc1LDM3NzA4LDM3NzM4LDM3NzUzLDM3NzE5LDM3NzE3LDM3NzE0LDM3NzExLDM3NzQ1LDM3NzUxLDM3''@;'; put 'put ''NzU1LDM3NzI5LDM3NzI2LDM3NzMxLDM3NzM1LDM3NzYwLDM3NzEwLDM3NzIxLDM4MzQzLDM4MzM2LDM4MzQ1LDM4MzM5LDM4MzQxLDM4MzI3LDM4NTc0LDM4NTc2LDM4NTcyLDM4Njg4LDM4Njg3LDM4NjgwLDM4Njg1LDM4NjgxLDM4ODEwLDM4ODE3LDM4ODEyLDM4ODE0LDM4ODEzLDM4ODY5''@;'; put 'put ''LDM4ODY4LDM4ODk3LDM4OTc3LDM4OTgwLDM4OTg2LDM4OTg1LDM4OTgxLDM4OTc5LDM5MjA1LDM5MjExLDM5MjEyLDM5MjEwLDM5MjE5LDM5MjE4LDM5MjE1LDM5MjEzLDM5MjE3LDM5MjE2LDM5MzIwLDM5MzMxLDM5MzI5LDM5NDI2LDM5NDE4LDM5NDEyLDM5NDE1LDM5NDE3LDM5NDE2LDM5''@;'; put 'put ''NDE0LDM5NDE5LDM5NDIxLDM5NDIyLDM5NDIwLDM5NDI3LDM5NjE0LDM5Njc4LDM5Njc3LDM5NjgxLDM5Njc2LDM5NzUyLDM5ODM0LDM5ODQ4LDM5ODM4LDM5ODM1LDM5ODQ2LDM5ODQxLDM5ODQ1LDM5ODQ0LDM5ODE0LDM5ODQyLDM5ODQwLDM5ODU1LDQwMjQzLDQwMjU3LDQwMjk1LDQwMjQ2''@;'; put 'put ''LDQwMjM4LDQwMjM5LDQwMjQxLDQwMjQ4LDQwMjQwLDQwMjYxLDQwMjU4LDQwMjU5LDQwMjU0LDQwMjQ3LDQwMjU2LDQwMjUzLDMyNzU3LDQwMjM3LDQwNTg2LDQwNTg1LDQwNTg5LDQwNjI0LDQwNjQ4LDQwNjY2LDQwNjk5LDQwNzAzLDQwNzQwLDQwNzM5LDQwNzM4LDQwNzg4LDQwODY0LDIw''@;'; put 'put ''Nzg1LDIwNzgxLDIwNzgyLDIyMTY4LDIyMTcyLDIyMTY3LDIyMTcwLDIyMTczLDIyMTY5LDIyODk2LDIzMzU2LDIzNjU3LDIzNjU4LDI0ZTMsMjQxNzMsMjQxNzQsMjUwNDgsMjUwNTUsMjUwNjksMjUwNzAsMjUwNzMsMjUwNjYsMjUwNzIsMjUwNjcsMjUwNDYsMjUwNjUsMjU4NTUsMjU4NjAs''@;'; put 'put ''MjU4NTMsMjU4NDgsMjU4NTcsMjU4NTksMjU4NTIsMjYwMDQsMjYwNzUsMjYzMzAsMjYzMzEsMjYzMjgsMjczMzMsMjczMjEsMjczMjUsMjczNjEsMjczMzQsMjczMjIsMjczMTgsMjczMTksMjczMzUsMjczMTYsMjczMDksMjc0ODYsMjc1OTMsMjc2NTksMjg2NzksMjg2ODQsMjg2ODUsMjg2''@;'; put 'put ''NzMsMjg2NzcsMjg2OTIsMjg2ODYsMjg2NzEsMjg2NzIsMjg2NjcsMjg3MTAsMjg2NjgsMjg2NjMsMjg2ODIsMjkxODUsMjkxODMsMjkxNzcsMjkxODcsMjkxODEsMjk1NTgsMjk4ODAsMjk4ODgsMjk4NzcsMjk4ODksMjk4ODYsMjk4NzgsMjk4ODMsMjk4OTAsMjk5NzIsMjk5NzEsMzAzMDAs''@;'; put 'put ''MzAzMDgsMzAyOTcsMzAyODgsMzAyOTEsMzAyOTUsMzAyOTgsMzAzNzQsMzAzOTcsMzA0NDQsMzA2NTgsMzA2NTAsMzA5NzUsMzA5ODgsMzA5OTUsMzA5OTYsMzA5ODUsMzA5OTIsMzA5OTQsMzA5OTMsMzExNDksMzExNDgsMzEzMjcsMzE3NzIsMzE3ODUsMzE3NjksMzE3NzYsMzE3NzUsMzE3''@;'; put 'put ''ODksMzE3NzMsMzE3ODIsMzE3ODQsMzE3NzgsMzE3ODEsMzE3OTIsMzIzNDgsMzIzMzYsMzIzNDIsMzIzNTUsMzIzNDQsMzIzNTQsMzIzNTEsMzIzMzcsMzIzNTIsMzIzNDMsMzIzMzksMzI2OTMsMzI2OTEsMzI3NTksMzI3NjAsMzI4ODUsMzMyMzMsMzMyMzQsMzMyMzIsMzMzNzUsMzMzNzQs''@;'; put 'put ''MzQyMjgsMzQyNDYsMzQyNDAsMzQyNDMsMzQyNDIsMzQyMjcsMzQyMjksMzQyMzcsMzQyNDcsMzQyNDQsMzQyMzksMzQyNTEsMzQyNTQsMzQyNDgsMzQyNDUsMzQyMjUsMzQyMzAsMzQyNTgsMzQzNDAsMzQyMzIsMzQyMzEsMzQyMzgsMzQ0MDksMzQ3OTEsMzQ3OTAsMzQ3ODYsMzQ3NzksMzQ3''@;'; put 'put ''OTUsMzQ3OTQsMzQ3ODksMzQ3ODMsMzQ4MDMsMzQ3ODgsMzQ3NzIsMzQ3ODAsMzQ3NzEsMzQ3OTcsMzQ3NzYsMzQ3ODcsMzQ3MjQsMzQ3NzUsMzQ3NzcsMzQ4MTcsMzQ4MDQsMzQ3OTIsMzQ3ODEsMzUxNTUsMzUxNDcsMzUxNTEsMzUxNDgsMzUxNDIsMzUxNTIsMzUxNTMsMzUxNDUsMzU2MjYs''@;'; put 'put ''MzU2MjMsMzU2MTksMzU2MzUsMzU2MzIsMzU2MzcsMzU2NTUsMzU2MzEsMzU2NDQsMzU2NDYsMzU2MzMsMzU2MjEsMzU2MzksMzU2MjIsMzU2MzgsMzU2MzAsMzU2MjAsMzU2NDMsMzU2NDUsMzU2NDIsMzU5MDYsMzU5NTcsMzU5OTMsMzU5OTIsMzU5OTEsMzYwOTQsMzYxMDAsMzYwOTgsMzYw''@;'; put 'put ''OTYsMzY0NDQsMzY0NTAsMzY0NDgsMzY0MzksMzY0MzgsMzY0NDYsMzY0NTMsMzY0NTUsMzY0NDMsMzY0NDIsMzY0NDksMzY0NDUsMzY0NTcsMzY0MzYsMzY2NzgsMzY2NzksMzY2ODAsMzY2ODMsMzcxNjAsMzcxNzgsMzcxNzksMzcxODIsMzcyODgsMzcyODUsMzcyODcsMzcyOTUsMzcyOTAs''@;'; put 'put ''Mzc4MTMsMzc3NzIsMzc3NzgsMzc4MTUsMzc3ODcsMzc3ODksMzc3NjksMzc3OTksMzc3NzQsMzc4MDIsMzc3OTAsMzc3OTgsMzc3ODEsMzc3NjgsMzc3ODUsMzc3OTEsMzc3NzMsMzc4MDksMzc3NzcsMzc4MTAsMzc3OTYsMzc4MDAsMzc4MTIsMzc3OTUsMzc3OTcsMzgzNTQsMzgzNTUsMzgz''@;'; put 'put ''NTMsMzg1NzksMzg2MTUsMzg2MTgsMjQwMDIsMzg2MjMsMzg2MTYsMzg2MjEsMzg2OTEsMzg2OTAsMzg2OTMsMzg4MjgsMzg4MzAsMzg4MjQsMzg4MjcsMzg4MjAsMzg4MjYsMzg4MTgsMzg4MjEsMzg4NzEsMzg4NzMsMzg4NzAsMzg4NzIsMzg5MDYsMzg5OTIsMzg5OTMsMzg5OTQsMzkwOTYs''@;'; put 'put ''MzkyMzMsMzkyMjgsMzkyMjYsMzk0MzksMzk0MzUsMzk0MzMsMzk0MzcsMzk0MjgsMzk0NDEsMzk0MzQsMzk0MjksMzk0MzEsMzk0MzAsMzk2MTYsMzk2NDQsMzk2ODgsMzk2ODQsMzk2ODUsMzk3MjEsMzk3MzMsMzk3NTQsMzk3NTYsMzk3NTUsMzk4NzksMzk4NzgsMzk4NzUsMzk4NzEsMzk4''@;'; put 'put ''NzMsMzk4NjEsMzk4NjQsMzk4OTEsMzk4NjIsMzk4NzYsMzk4NjUsMzk4NjksNDAyODQsNDAyNzUsNDAyNzEsNDAyNjYsNDAyODMsNDAyNjcsNDAyODEsNDAyNzgsNDAyNjgsNDAyNzksNDAyNzQsNDAyNzYsNDAyODcsNDAyODAsNDAyODIsNDA1OTAsNDA1ODgsNDA2NzEsNDA3MDUsNDA3MDQs''@;'; put 'put ''NDA3MjYsNDA3NDEsNDA3NDcsNDA3NDYsNDA3NDUsNDA3NDQsNDA3ODAsNDA3ODksMjA3ODgsMjA3ODksMjExNDIsMjEyMzksMjE0MjgsMjIxODcsMjIxODksMjIxODIsMjIxODMsMjIxODYsMjIxODgsMjI3NDYsMjI3NDksMjI3NDcsMjI4MDIsMjMzNTcsMjMzNTgsMjMzNTksMjQwMDMsMjQx''@;'; put 'put ''NzYsMjQ1MTEsMjUwODMsMjU4NjMsMjU4NzIsMjU4NjksMjU4NjUsMjU4NjgsMjU4NzAsMjU5ODgsMjYwNzgsMjYwNzcsMjYzMzQsMjczNjcsMjczNjAsMjczNDAsMjczNDUsMjczNTMsMjczMzksMjczNTksMjczNTYsMjczNDQsMjczNzEsMjczNDMsMjczNDEsMjczNTgsMjc0ODgsMjc1Njgs''@;'; put 'put ''Mjc2NjAsMjg2OTcsMjg3MTEsMjg3MDQsMjg2OTQsMjg3MTUsMjg3MDUsMjg3MDYsMjg3MDcsMjg3MTMsMjg2OTUsMjg3MDgsMjg3MDAsMjg3MTQsMjkxOTYsMjkxOTQsMjkxOTEsMjkxODYsMjkxODksMjkzNDksMjkzNTAsMjkzNDgsMjkzNDcsMjkzNDUsMjk4OTksMjk4OTMsMjk4NzksMjk4''@;'; put 'put ''OTEsMjk5NzQsMzAzMDQsMzA2NjUsMzA2NjYsMzA2NjAsMzA3MDUsMzEwMDUsMzEwMDMsMzEwMDksMzEwMDQsMzA5OTksMzEwMDYsMzExNTIsMzEzMzUsMzEzMzYsMzE3OTUsMzE4MDQsMzE4MDEsMzE3ODgsMzE4MDMsMzE5ODAsMzE5NzgsMzIzNzQsMzIzNzMsMzIzNzYsMzIzNjgsMzIzNzUs''@;'; put 'put ''MzIzNjcsMzIzNzgsMzIzNzAsMzIzNzIsMzIzNjAsMzI1ODcsMzI1ODYsMzI2NDMsMzI2NDYsMzI2OTUsMzI3NjUsMzI3NjYsMzI4ODgsMzMyMzksMzMyMzcsMzMzODAsMzMzNzcsMzMzNzksMzQyODMsMzQyODksMzQyODUsMzQyNjUsMzQyNzMsMzQyODAsMzQyNjYsMzQyNjMsMzQyODQsMzQy''@;'; put 'put ''OTAsMzQyOTYsMzQyNjQsMzQyNzEsMzQyNzUsMzQyNjgsMzQyNTcsMzQyODgsMzQyNzgsMzQyODcsMzQyNzAsMzQyNzQsMzQ4MTYsMzQ4MTAsMzQ4MTksMzQ4MDYsMzQ4MDcsMzQ4MjUsMzQ4MjgsMzQ4MjcsMzQ4MjIsMzQ4MTIsMzQ4MjQsMzQ4MTUsMzQ4MjYsMzQ4MTgsMzUxNzAsMzUxNjIs''@;'; put 'put ''MzUxNjMsMzUxNTksMzUxNjksMzUxNjQsMzUxNjAsMzUxNjUsMzUxNjEsMzUyMDgsMzUyNTUsMzUyNTQsMzUzMTgsMzU2NjQsMzU2NTYsMzU2NTgsMzU2NDgsMzU2NjcsMzU2NzAsMzU2NjgsMzU2NTksMzU2NjksMzU2NjUsMzU2NTAsMzU2NjYsMzU2NzEsMzU5MDcsMzU5NTksMzU5NTgsMzU5''@;'; put 'put ''OTQsMzYxMDIsMzYxMDMsMzYxMDUsMzYyNjgsMzYyNjYsMzYyNjksMzYyNjcsMzY0NjEsMzY0NzIsMzY0NjcsMzY0NTgsMzY0NjMsMzY0NzUsMzY1NDYsMzY2OTAsMzY2ODksMzY2ODcsMzY2ODgsMzY2OTEsMzY3ODgsMzcxODQsMzcxODMsMzcyOTYsMzcyOTMsMzc4NTQsMzc4MzEsMzc4Mzks''@;'; put 'put ''Mzc4MjYsMzc4NTAsMzc4NDAsMzc4ODEsMzc4NjgsMzc4MzYsMzc4NDksMzc4MDEsMzc4NjIsMzc4MzQsMzc4NDQsMzc4NzAsMzc4NTksMzc4NDUsMzc4MjgsMzc4MzgsMzc4MjQsMzc4NDIsMzc4NjMsMzgyNjksMzgzNjIsMzgzNjMsMzg2MjUsMzg2OTcsMzg2OTksMzg3MDAsMzg2OTYsMzg2''@;'; put 'put ''OTQsMzg4MzUsMzg4MzksMzg4MzgsMzg4NzcsMzg4NzgsMzg4NzksMzkwMDQsMzkwMDEsMzkwMDUsMzg5OTksMzkxMDMsMzkxMDEsMzkwOTksMzkxMDIsMzkyNDAsMzkyMzksMzkyMzUsMzkzMzQsMzkzMzUsMzk0NTAsMzk0NDUsMzk0NjEsMzk0NTMsMzk0NjAsMzk0NTEsMzk0NTgsMzk0NTYs''@;'; put 'put ''Mzk0NjMsMzk0NTksMzk0NTQsMzk0NTIsMzk0NDQsMzk2MTgsMzk2OTEsMzk2OTAsMzk2OTQsMzk2OTIsMzk3MzUsMzk5MTQsMzk5MTUsMzk5MDQsMzk5MDIsMzk5MDgsMzk5MTAsMzk5MDYsMzk5MjAsMzk4OTIsMzk4OTUsMzk5MTYsMzk5MDAsMzk4OTcsMzk5MDksMzk4OTMsMzk5MDUsMzk4''@;'; put 'put ''OTgsNDAzMTEsNDAzMjEsNDAzMzAsNDAzMjQsNDAzMjgsNDAzMDUsNDAzMjAsNDAzMTIsNDAzMjYsNDAzMzEsNDAzMzIsNDAzMTcsNDAyOTksNDAzMDgsNDAzMDksNDAzMDQsNDAyOTcsNDAzMjUsNDAzMDcsNDAzMTUsNDAzMjIsNDAzMDMsNDAzMTMsNDAzMTksNDAzMjcsNDAyOTYsNDA1OTYs''@;'; put 'put ''NDA1OTMsNDA2NDAsNDA3MDAsNDA3NDksNDA3NjgsNDA3NjksNDA3ODEsNDA3OTAsNDA3OTEsNDA3OTIsMjEzMDMsMjIxOTQsMjIxOTcsMjIxOTUsMjI3NTUsMjMzNjUsMjQwMDYsMjQwMDcsMjQzMDIsMjQzMDMsMjQ1MTIsMjQ1MTMsMjUwODEsMjU4NzksMjU4NzgsMjU4NzcsMjU4NzUsMjYw''@;'; put 'put ''NzksMjYzNDQsMjYzMzksMjYzNDAsMjczNzksMjczNzYsMjczNzAsMjczNjgsMjczODUsMjczNzcsMjczNzQsMjczNzUsMjg3MzIsMjg3MjUsMjg3MTksMjg3MjcsMjg3MjQsMjg3MjEsMjg3MzgsMjg3MjgsMjg3MzUsMjg3MzAsMjg3MjksMjg3MzYsMjg3MzEsMjg3MjMsMjg3MzcsMjkyMDMs''@;'; put 'put ''MjkyMDQsMjkzNTIsMjk1NjUsMjk1NjQsMjk4ODIsMzAzNzksMzAzNzgsMzAzOTgsMzA0NDUsMzA2NjgsMzA2NzAsMzA2NzEsMzA2NjksMzA3MDYsMzEwMTMsMzEwMTEsMzEwMTUsMzEwMTYsMzEwMTIsMzEwMTcsMzExNTQsMzEzNDIsMzEzNDAsMzEzNDEsMzE0NzksMzE4MTcsMzE4MTYsMzE4''@;'; put 'put ''MTgsMzE4MTUsMzE4MTMsMzE5ODIsMzIzNzksMzIzODIsMzIzODUsMzIzODQsMzI2OTgsMzI3NjcsMzI4ODksMzMyNDMsMzMyNDEsMzMyOTEsMzMzODQsMzMzODUsMzQzMzgsMzQzMDMsMzQzMDUsMzQzMDIsMzQzMzEsMzQzMDQsMzQyOTQsMzQzMDgsMzQzMTMsMzQzMDksMzQzMTYsMzQzMDEs''@;'; put 'put ''MzQ4NDEsMzQ4MzIsMzQ4MzMsMzQ4MzksMzQ4MzUsMzQ4MzgsMzUxNzEsMzUxNzQsMzUyNTcsMzUzMTksMzU2ODAsMzU2OTAsMzU2NzcsMzU2ODgsMzU2ODMsMzU2ODUsMzU2ODcsMzU2OTMsMzYyNzAsMzY0ODYsMzY0ODgsMzY0ODQsMzY2OTcsMzY2OTQsMzY2OTUsMzY2OTMsMzY2OTYsMzY2''@;'; put 'put ''OTgsMzcwMDUsMzcxODcsMzcxODUsMzczMDMsMzczMDEsMzcyOTgsMzcyOTksMzc4OTksMzc5MDcsMzc4ODMsMzc5MjAsMzc5MDMsMzc5MDgsMzc4ODYsMzc5MDksMzc5MDQsMzc5MjgsMzc5MTMsMzc5MDEsMzc4NzcsMzc4ODgsMzc4NzksMzc4OTUsMzc5MDIsMzc5MTAsMzc5MDYsMzc4ODIs''@;'; put 'put ''Mzc4OTcsMzc4ODAsMzc4OTgsMzc4ODcsMzc4ODQsMzc5MDAsMzc4NzgsMzc5MDUsMzc4OTQsMzgzNjYsMzgzNjgsMzgzNjcsMzg3MDIsMzg3MDMsMzg4NDEsMzg4NDMsMzg5MDksMzg5MTAsMzkwMDgsMzkwMTAsMzkwMTEsMzkwMDcsMzkxMDUsMzkxMDYsMzkyNDgsMzkyNDYsMzkyNTcsMzky''@;'; put 'put ''NDQsMzkyNDMsMzkyNTEsMzk0NzQsMzk0NzYsMzk0NzMsMzk0NjgsMzk0NjYsMzk0NzgsMzk0NjUsMzk0NzAsMzk0ODAsMzk0NjksMzk2MjMsMzk2MjYsMzk2MjIsMzk2OTYsMzk2OTgsMzk2OTcsMzk5NDcsMzk5NDQsMzk5MjcsMzk5NDEsMzk5NTQsMzk5MjgsNGU0LDM5OTQzLDM5OTUwLDM5''@;'; put 'put ''OTQyLDM5OTU5LDM5OTU2LDM5OTQ1LDQwMzUxLDQwMzQ1LDQwMzU2LDQwMzQ5LDQwMzM4LDQwMzQ0LDQwMzM2LDQwMzQ3LDQwMzUyLDQwMzQwLDQwMzQ4LDQwMzYyLDQwMzQzLDQwMzUzLDQwMzQ2LDQwMzU0LDQwMzYwLDQwMzUwLDQwMzU1LDQwMzgzLDQwMzYxLDQwMzQyLDQwMzU4LDQwMzU5''@;'; put 'put ''LDQwNjAxLDQwNjAzLDQwNjAyLDQwNjc3LDQwNjc2LDQwNjc5LDQwNjc4LDQwNzUyLDQwNzUwLDQwNzk1LDQwODAwLDQwNzk4LDQwNzk3LDQwNzkzLDQwODQ5LDIwNzk0LDIwNzkzLDIxMTQ0LDIxMTQzLDIyMjExLDIyMjA1LDIyMjA2LDIzMzY4LDIzMzY3LDI0MDExLDI0MDE1LDI0MzA1LDI1''@;'; put 'put ''MDg1LDI1ODgzLDI3Mzk0LDI3Mzg4LDI3Mzk1LDI3Mzg0LDI3MzkyLDI4NzM5LDI4NzQwLDI4NzQ2LDI4NzQ0LDI4NzQ1LDI4NzQxLDI4NzQyLDI5MjEzLDI5MjEwLDI5MjA5LDI5NTY2LDI5OTc1LDMwMzE0LDMwNjcyLDMxMDIxLDMxMDI1LDMxMDIzLDMxODI4LDMxODI3LDMxOTg2LDMyMzk0''@;'; put 'put ''LDMyMzkxLDMyMzkyLDMyMzk1LDMyMzkwLDMyMzk3LDMyNTg5LDMyNjk5LDMyODE2LDMzMjQ1LDM0MzI4LDM0MzQ2LDM0MzQyLDM0MzM1LDM0MzM5LDM0MzMyLDM0MzI5LDM0MzQzLDM0MzUwLDM0MzM3LDM0MzM2LDM0MzQ1LDM0MzM0LDM0MzQxLDM0ODU3LDM0ODQ1LDM0ODQzLDM0ODQ4LDM0''@;'; put 'put ''ODUyLDM0ODQ0LDM0ODU5LDM0ODkwLDM1MTgxLDM1MTc3LDM1MTgyLDM1MTc5LDM1MzIyLDM1NzA1LDM1NzA0LDM1NjUzLDM1NzA2LDM1NzA3LDM2MTEyLDM2MTE2LDM2MjcxLDM2NDk0LDM2NDkyLDM2NzAyLDM2Njk5LDM2NzAxLDM3MTkwLDM3MTg4LDM3MTg5LDM3MzA1LDM3OTUxLDM3OTQ3''@;'; put 'put ''LDM3OTQyLDM3OTI5LDM3OTQ5LDM3OTQ4LDM3OTM2LDM3OTQ1LDM3OTMwLDM3OTQzLDM3OTMyLDM3OTUyLDM3OTM3LDM4MzczLDM4MzcyLDM4MzcxLDM4NzA5LDM4NzE0LDM4ODQ3LDM4ODgxLDM5MDEyLDM5MTEzLDM5MTEwLDM5MTA0LDM5MjU2LDM5MjU0LDM5NDgxLDM5NDg1LDM5NDk0LDM5''@;'; put 'put ''NDkyLDM5NDkwLDM5NDg5LDM5NDgyLDM5NDg3LDM5NjI5LDM5NzAxLDM5NzAzLDM5NzA0LDM5NzAyLDM5NzM4LDM5NzYyLDM5OTc5LDM5OTY1LDM5OTY0LDM5OTgwLDM5OTcxLDM5OTc2LDM5OTc3LDM5OTcyLDM5OTY5LDQwMzc1LDQwMzc0LDQwMzgwLDQwMzg1LDQwMzkxLDQwMzk0LDQwMzk5''@;'; put 'put ''LDQwMzgyLDQwMzg5LDQwMzg3LDQwMzc5LDQwMzczLDQwMzk4LDQwMzc3LDQwMzc4LDQwMzY0LDQwMzkyLDQwMzY5LDQwMzY1LDQwMzk2LDQwMzcxLDQwMzk3LDQwMzcwLDQwNTcwLDQwNjA0LDQwNjgzLDQwNjg2LDQwNjg1LDQwNzMxLDQwNzI4LDQwNzMwLDQwNzUzLDQwNzgyLDQwODA1LDQw''@;'; put 'put ''ODA0LDQwODUwLDIwMTUzLDIyMjE0LDIyMjEzLDIyMjE5LDIyODk3LDIzMzcxLDIzMzcyLDI0MDIxLDI0MDE3LDI0MzA2LDI1ODg5LDI1ODg4LDI1ODk0LDI1ODkwLDI3NDAzLDI3NDAwLDI3NDAxLDI3NjYxLDI4NzU3LDI4NzU4LDI4NzU5LDI4NzU0LDI5MjE0LDI5MjE1LDI5MzUzLDI5NTY3''@;'; put 'put ''LDI5OTEyLDI5OTA5LDI5OTEzLDI5OTExLDMwMzE3LDMwMzgxLDMxMDI5LDMxMTU2LDMxMzQ0LDMxMzQ1LDMxODMxLDMxODM2LDMxODMzLDMxODM1LDMxODM0LDMxOTg4LDMxOTg1LDMyNDAxLDMyNTkxLDMyNjQ3LDMzMjQ2LDMzMzg3LDM0MzU2LDM0MzU3LDM0MzU1LDM0MzQ4LDM0MzU0LDM0''@;'; put 'put ''MzU4LDM0ODYwLDM0ODU2LDM0ODU0LDM0ODU4LDM0ODUzLDM1MTg1LDM1MjYzLDM1MjYyLDM1MzIzLDM1NzEwLDM1NzE2LDM1NzE0LDM1NzE4LDM1NzE3LDM1NzExLDM2MTE3LDM2NTAxLDM2NTAwLDM2NTA2LDM2NDk4LDM2NDk2LDM2NTAyLDM2NTAzLDM2NzA0LDM2NzA2LDM3MTkxLDM3OTY0''@;'; put 'put ''LDM3OTY4LDM3OTYyLDM3OTYzLDM3OTY3LDM3OTU5LDM3OTU3LDM3OTYwLDM3OTYxLDM3OTU4LDM4NzE5LDM4ODgzLDM5MDE4LDM5MDE3LDM5MTE1LDM5MjUyLDM5MjU5LDM5NTAyLDM5NTA3LDM5NTA4LDM5NTAwLDM5NTAzLDM5NDk2LDM5NDk4LDM5NDk3LDM5NTA2LDM5NTA0LDM5NjMyLDM5''@;'; put 'put ''NzA1LDM5NzIzLDM5NzM5LDM5NzY2LDM5NzY1LDQwMDA2LDQwMDA4LDM5OTk5LDQwMDA0LDM5OTkzLDM5OTg3LDQwMDAxLDM5OTk2LDM5OTkxLDM5OTg4LDM5OTg2LDM5OTk3LDM5OTkwLDQwNDExLDQwNDAyLDQwNDE0LDQwNDEwLDQwMzk1LDQwNDAwLDQwNDEyLDQwNDAxLDQwNDE1LDQwNDI1''@;'; put 'put ''LDQwNDA5LDQwNDA4LDQwNDA2LDQwNDM3LDQwNDA1LDQwNDEzLDQwNjMwLDQwNjg4LDQwNzU3LDQwNzU1LDQwNzU0LDQwNzcwLDQwODExLDQwODUzLDQwODY2LDIwNzk3LDIxMTQ1LDIyNzYwLDIyNzU5LDIyODk4LDIzMzczLDI0MDI0LDM0ODYzLDI0Mzk5LDI1MDg5LDI1MDkxLDI1MDkyLDI1''@;'; put 'put ''ODk3LDI1ODkzLDI2MDA2LDI2MzQ3LDI3NDA5LDI3NDEwLDI3NDA3LDI3NTk0LDI4NzYzLDI4NzYyLDI5MjE4LDI5NTcwLDI5NTY5LDI5NTcxLDMwMzIwLDMwNjc2LDMxODQ3LDMxODQ2LDMyNDA1LDMzMzg4LDM0MzYyLDM0MzY4LDM0MzYxLDM0MzY0LDM0MzUzLDM0MzYzLDM0MzY2LDM0ODY0''@;'; put 'put ''LDM0ODY2LDM0ODYyLDM0ODY3LDM1MTkwLDM1MTg4LDM1MTg3LDM1MzI2LDM1NzI0LDM1NzI2LDM1NzIzLDM1NzIwLDM1OTA5LDM2MTIxLDM2NTA0LDM2NzA4LDM2NzA3LDM3MzA4LDM3OTg2LDM3OTczLDM3OTgxLDM3OTc1LDM3OTgyLDM4ODUyLDM4ODUzLDM4OTEyLDM5NTEwLDM5NTEzLDM5''@;'; put 'put ''NzEwLDM5NzExLDM5NzEyLDQwMDE4LDQwMDI0LDQwMDE2LDQwMDEwLDQwMDEzLDQwMDExLDQwMDIxLDQwMDI1LDQwMDEyLDQwMDE0LDQwNDQzLDQwNDM5LDQwNDMxLDQwNDE5LDQwNDI3LDQwNDQwLDQwNDIwLDQwNDM4LDQwNDE3LDQwNDMwLDQwNDIyLDQwNDM0LDQwNDMyLDQwNDE4LDQwNDI4''@;'; put 'put ''LDQwNDM2LDQwNDM1LDQwNDI0LDQwNDI5LDQwNjQyLDQwNjU2LDQwNjkwLDQwNjkxLDQwNzEwLDQwNzMyLDQwNzYwLDQwNzU5LDQwNzU4LDQwNzcxLDQwNzgzLDQwODE3LDQwODE2LDQwODE0LDQwODE1LDIyMjI3LDIyMjIxLDIzMzc0LDIzNjYxLDI1OTAxLDI2MzQ5LDI2MzUwLDI3NDExLDI4''@;'; put 'put ''NzY3LDI4NzY5LDI4NzY1LDI4NzY4LDI5MjE5LDI5OTE1LDI5OTI1LDMwNjc3LDMxMDMyLDMxMTU5LDMxMTU4LDMxODUwLDMyNDA3LDMyNjQ5LDMzMzg5LDM0MzcxLDM0ODcyLDM0ODcxLDM0ODY5LDM0ODkxLDM1NzMyLDM1NzMzLDM2NTEwLDM2NTExLDM2NTEyLDM2NTA5LDM3MzEwLDM3MzA5''@;'; put 'put ''LDM3MzE0LDM3OTk1LDM3OTkyLDM3OTkzLDM4NjI5LDM4NzI2LDM4NzIzLDM4NzI3LDM4ODU1LDM4ODg1LDM5NTE4LDM5NjM3LDM5NzY5LDQwMDM1LDQwMDM5LDQwMDM4LDQwMDM0LDQwMDMwLDQwMDMyLDQwNDUwLDQwNDQ2LDQwNDU1LDQwNDUxLDQwNDU0LDQwNDUzLDQwNDQ4LDQwNDQ5LDQw''@;'; put 'put ''NDU3LDQwNDQ3LDQwNDQ1LDQwNDUyLDQwNjA4LDQwNzM0LDQwNzc0LDQwODIwLDQwODIxLDQwODIyLDIyMjI4LDI1OTAyLDI2MDQwLDI3NDE2LDI3NDE3LDI3NDE1LDI3NDE4LDI4NzcwLDI5MjIyLDI5MzU0LDMwNjgwLDMwNjgxLDMxMDMzLDMxODQ5LDMxODUxLDMxOTkwLDMyNDEwLDMyNDA4''@;'; put 'put ''LDMyNDExLDMyNDA5LDMzMjQ4LDMzMjQ5LDM0Mzc0LDM0Mzc1LDM0Mzc2LDM1MTkzLDM1MTk0LDM1MTk2LDM1MTk1LDM1MzI3LDM1NzM2LDM1NzM3LDM2NTE3LDM2NTE2LDM2NTE1LDM3OTk4LDM3OTk3LDM3OTk5LDM4MDAxLDM4MDAzLDM4NzI5LDM5MDI2LDM5MjYzLDQwMDQwLDQwMDQ2LDQw''@;'; put 'put ''MDQ1LDQwNDU5LDQwNDYxLDQwNDY0LDQwNDYzLDQwNDY2LDQwNDY1LDQwNjA5LDQwNjkzLDQwNzEzLDQwNzc1LDQwODI0LDQwODI3LDQwODI2LDQwODI1LDIyMzAyLDI4Nzc0LDMxODU1LDM0ODc2LDM2Mjc0LDM2NTE4LDM3MzE1LDM4MDA0LDM4MDA4LDM4MDA2LDM4MDA1LDM5NTIwLDQwMDUy''@;'; put 'put ''LDQwMDUxLDQwMDQ5LDQwMDUzLDQwNDY4LDQwNDY3LDQwNjk0LDQwNzE0LDQwODY4LDI4Nzc2LDI4NzczLDMxOTkxLDM0NDEwLDM0ODc4LDM0ODc3LDM0ODc5LDM1NzQyLDM1OTk2LDM2NTIxLDM2NTUzLDM4NzMxLDM5MDI3LDM5MDI4LDM5MTE2LDM5MjY1LDM5MzM5LDM5NTI0LDM5NTI2LDM5''@;'; put 'put ''NTI3LDM5NzE2LDQwNDY5LDQwNDcxLDQwNzc2LDI1MDk1LDI3NDIyLDI5MjIzLDM0MzgwLDM2NTIwLDM4MDE4LDM4MDE2LDM4MDE3LDM5NTI5LDM5NTI4LDM5NzI2LDQwNDczLDI5MjI1LDM0Mzc5LDM1NzQzLDM4MDE5LDQwMDU3LDQwNjMxLDMwMzI1LDM5NTMxLDQwMDU4LDQwNDc3LDI4Nzc3''@;'; put 'put ''LDI4Nzc4LDQwNjEyLDQwODMwLDQwNzc3LDQwODU2LDMwODQ5LDM3NTYxLDM1MDIzLDIyNzE1LDI0NjU4LDMxOTExLDIzMjkwLDk1NTYsOTU3NCw5NTU5LDk1NjgsOTU4MCw5NTcxLDk1NjIsOTU3Nyw5NTY1LDk1NTQsOTU3Miw5NTU3LDk1NjYsOTU3OCw5NTY5LDk1NjAsOTU3NSw5NTYzLDk1''@;'; put 'put ''NTUsOTU3Myw5NTU4LDk1NjcsOTU3OSw5NTcwLDk1NjEsOTU3Niw5NTY0LDk1NTMsOTU1Miw5NTgxLDk1ODIsOTU4NCw5NTgzLDY1NTE3LDEzMjQyMywzNzU5NSwxMzI1NzUsMTQ3Mzk3LDM0MTI0LDE3MDc3LDI5Njc5LDIwOTE3LDEzODk3LDE0OTgyNiwxNjYzNzIsMzc3MDAsMTM3NjkxLDMz''@;'; put 'put ''NTE4LDE0NjYzMiwzMDc4MCwyNjQzNiwyNTMxMSwxNDk4MTEsMTY2MzE0LDEzMTc0NCwxNTg2NDMsMTM1OTQxLDIwMzk1LDE0MDUyNSwyMDQ4OCwxNTkwMTcsMTYyNDM2LDE0NDg5NiwxNTAxOTMsMTQwNTYzLDIwNTIxLDEzMTk2NiwyNDQ4NCwxMzE5NjgsMTMxOTExLDI4Mzc5LDEzMjEyNywy''@;'; put 'put ''MDYwNSwyMDczNywxMzQzNCwyMDc1MCwzOTAyMCwxNDE0NywzMzgxNCwxNDk5MjQsMTMyMjMxLDIwODMyLDE0NDMwOCwyMDg0MiwxMzQxNDMsMTM5NTE2LDEzMTgxMywxNDA1OTIsMTMyNDk0LDE0MzkyMywxMzc2MDMsMjM0MjYsMzQ2ODUsMTMyNTMxLDE0NjU4NSwyMDkxNCwyMDkyMCw0MDI0''@;'; put 'put ''NCwyMDkzNywyMDk0MywyMDk0NSwxNTU4MCwyMDk0NywxNTAxODIsMjA5MTUsMjA5NjIsMjEzMTQsMjA5NzMsMzM3NDEsMjY5NDIsMTQ1MTk3LDI0NDQzLDIxMDAzLDIxMDMwLDIxMDUyLDIxMTczLDIxMDc5LDIxMTQwLDIxMTc3LDIxMTg5LDMxNzY1LDM0MTE0LDIxMjE2LDM0MzE3LDE1ODQ4''@;'; put 'put ''MywyMTI1MywxNjY2MjIsMjE4MzMsMjgzNzcsMTQ3MzI4LDEzMzQ2MCwxNDc0MzYsMjEyOTksMjEzMTYsMTM0MTE0LDI3ODUxLDEzNjk5OCwyNjY1MSwyOTY1MywyNDY1MCwxNjA0MiwxNDU0MCwxMzY5MzYsMjkxNDksMTc1NzAsMjEzNTcsMjEzNjQsMTY1NTQ3LDIxMzc0LDIxMzc1LDEzNjU5''@;'; put 'put ''OCwxMzY3MjMsMzA2OTQsMjEzOTUsMTY2NTU1LDIxNDA4LDIxNDE5LDIxNDIyLDI5NjA3LDE1MzQ1OCwxNjIxNywyOTU5NiwyMTQ0MSwyMTQ0NSwyNzcyMSwyMDA0MSwyMjUyNiwyMTQ2NSwxNTAxOSwxMzQwMzEsMjE0NzIsMTQ3NDM1LDE0Mjc1NSwyMTQ5NCwxMzQyNjMsMjE1MjMsMjg3OTMs''@;'; put 'put ''MjE4MDMsMjYxOTksMjc5OTUsMjE2MTMsMTU4NTQ3LDEzNDUxNiwyMTg1MywyMTY0NywyMTY2OCwxODM0MiwxMzY5NzMsMTM0ODc3LDE1Nzk2LDEzNDQ3NywxNjYzMzIsMTQwOTUyLDIxODMxLDE5NjkzLDIxNTUxLDI5NzE5LDIxODk0LDIxOTI5LDIyMDIxLDEzNzQzMSwxNDc1MTQsMTc3NDYs''@;'; put 'put ''MTQ4NTMzLDI2MjkxLDEzNTM0OCwyMjA3MSwyNjMxNywxNDQwMTAsMjYyNzYsMjYyODUsMjIwOTMsMjIwOTUsMzA5NjEsMjIyNTcsMzg3OTEsMjE1MDIsMjIyNzIsMjIyNTUsMjIyNTMsMTY2NzU4LDEzODU5LDEzNTc1OSwyMjM0MiwxNDc4NzcsMjc3NTgsMjg4MTEsMjIzMzgsMTQwMDEsMTU4''@;'; put 'put ''ODQ2LDIyNTAyLDEzNjIxNCwyMjUzMSwxMzYyNzYsMTQ4MzIzLDIyNTY2LDE1MDUxNywyMjYyMCwyMjY5OCwxMzY2NSwyMjc1MiwyMjc0OCwxMzU3NDAsMjI3NzksMjM1NTEsMjIzMzksMTcyMzY4LDE0ODA4OCwzNzg0MywxMzcyOSwyMjgxNSwyNjc5MCwxNDAxOSwyODI0OSwxMzY3NjYsMjMw''@;'; put 'put ''NzYsMjE4NDMsMTM2ODUwLDM0MDUzLDIyOTg1LDEzNDQ3OCwxNTg4NDksMTU5MDE4LDEzNzE4MCwyMzAwMSwxMzcyMTEsMTM3MTM4LDE1OTE0MiwyODAxNywxMzcyNTYsMTM2OTE3LDIzMDMzLDE1OTMwMSwyMzIxMSwyMzEzOSwxNDA1NCwxNDk5MjksMjMxNTksMTQwODgsMjMxOTAsMjk3OTcs''@;'; put 'put ''MjMyNTEsMTU5NjQ5LDE0MDYyOCwxNTc0OSwxMzc0ODksMTQxMzAsMTM2ODg4LDI0MTk1LDIxMjAwLDIzNDE0LDI1OTkyLDIzNDIwLDE2MjMxOCwxNjM4OCwxODUyNSwxMzE1ODgsMjM1MDksMjQ5MjgsMTM3NzgwLDE1NDA2MCwxMzI1MTcsMjM1MzksMjM0NTMsMTk3MjgsMjM1NTcsMTM4MDUy''@;'; put 'put ''LDIzNTcxLDI5NjQ2LDIzNTcyLDEzODQwNSwxNTg1MDQsMjM2MjUsMTg2NTMsMjM2ODUsMjM3ODUsMjM3OTEsMjM5NDcsMTM4NzQ1LDEzODgwNywyMzgyNCwyMzgzMiwyMzg3OCwxMzg5MTYsMjM3MzgsMjQwMjMsMzM1MzIsMTQzODEsMTQ5NzYxLDEzOTMzNywxMzk2MzUsMzM0MTUsMTQzOTAs''@;'; put 'put ''MTUyOTgsMjQxMTAsMjcyNzQsMjQxODEsMjQxODYsMTQ4NjY4LDEzNDM1NSwyMTQxNCwyMDE1MSwyNDI3MiwyMTQxNiwxMzcwNzMsMjQwNzMsMjQzMDgsMTY0OTk0LDI0MzEzLDI0MzE1LDE0NDk2LDI0MzE2LDI2Njg2LDM3OTE1LDI0MzMzLDEzMTUyMSwxOTQ3MDgsMTUwNzAsMTg2MDYsMTM1''@;'; put 'put ''OTk0LDI0Mzc4LDE1NzgzMiwxNDAyNDAsMjQ0MDgsMTQwNDAxLDI0NDE5LDM4ODQ1LDE1OTM0MiwyNDQzNCwzNzY5NiwxNjY0NTQsMjQ0ODcsMjM5OTAsMTU3MTEsMTUyMTQ0LDEzOTExNCwxNTk5OTIsMTQwOTA0LDM3MzM0LDEzMTc0MiwxNjY0NDEsMjQ2MjUsMjYyNDUsMTM3MzM1LDE0Njkx''@;'; put 'put ''LDE1ODE1LDEzODgxLDIyNDE2LDE0MTIzNiwzMTA4OSwxNTkzNiwyNDczNCwyNDc0MCwyNDc1NSwxNDk4OTAsMTQ5OTAzLDE2MjM4NywyOTg2MCwyMDcwNSwyMzIwMCwyNDkzMiwzMzgyOCwyNDg5OCwxOTQ3MjYsMTU5NDQyLDI0OTYxLDIwOTgwLDEzMjY5NCwyNDk2NywyMzQ2NiwxNDczODMs''@;'; put 'put ''MTQxNDA3LDI1MDQzLDE2NjgxMywxNzAzMzMsMjUwNDAsMTQ2NDIsMTQxNjk2LDE0MTUwNSwyNDYxMSwyNDkyNCwyNTg4NiwyNTQ4MywxMzEzNTIsMjUyODUsMTM3MDcyLDI1MzAxLDE0Mjg2MSwyNTQ1MiwxNDk5ODMsMTQ4NzEsMjU2NTYsMjU1OTIsMTM2MDc4LDEzNzIxMiwyNTc0NCwyODU1''@;'; put 'put ''NCwxNDI5MDIsMzg5MzIsMTQ3NTk2LDE1MzM3MywyNTgyNSwyNTgyOSwzODAxMSwxNDk1MCwyNTY1OCwxNDkzNSwyNTkzMywyODQzOCwxNTAwNTYsMTUwMDUxLDI1OTg5LDI1OTY1LDI1OTUxLDE0MzQ4NiwyNjAzNywxNDk4MjQsMTkyNTUsMjYwNjUsMTY2MDAsMTM3MjU3LDI2MDgwLDI2MDgz''@;'; put 'put ''LDI0NTQzLDE0NDM4NCwyNjEzNiwxNDM4NjMsMTQzODY0LDI2MTgwLDE0Mzc4MCwxNDM3ODEsMjYxODcsMTM0NzczLDI2MjE1LDE1MjAzOCwyNjIyNywyNjIyOCwxMzg4MTMsMTQzOTIxLDE2NTM2NCwxNDM4MTYsMTUyMzM5LDMwNjYxLDE0MTU1OSwzOTMzMiwyNjM3MCwxNDgzODAsMTUwMDQ5''@;'; put 'put ''LDE1MTQ3LDI3MTMwLDE0NTM0NiwyNjQ2MiwyNjQ3MSwyNjQ2NiwxNDc5MTcsMTY4MTczLDI2NTgzLDE3NjQxLDI2NjU4LDI4MjQwLDM3NDM2LDI2NjI1LDE0NDM1OCwxNTkxMzYsMjY3MTcsMTQ0NDk1LDI3MTA1LDI3MTQ3LDE2NjYyMywyNjk5NSwyNjgxOSwxNDQ4NDUsMjY4ODEsMjY4ODAs''@;'; put 'put ''MTU2NjYsMTQ4NDksMTQ0OTU2LDE1MjMyLDI2NTQwLDI2OTc3LDE2NjQ3NCwxNzE0OCwyNjkzNCwyNzAzMiwxNTI2NSwxMzIwNDEsMzM2MzUsMjA2MjQsMjcxMjksMTQ0OTg1LDEzOTU2MiwyNzIwNSwxNDUxNTUsMjcyOTMsMTUzNDcsMjY1NDUsMjczMzYsMTY4MzQ4LDE1MzczLDI3NDIxLDEz''@;'; put 'put ''MzQxMSwyNDc5OCwyNzQ0NSwyNzUwOCwxNDEyNjEsMjgzNDEsMTQ2MTM5LDEzMjAyMSwxMzc1NjAsMTQxNDQsMjE1MzcsMTQ2MjY2LDI3NjE3LDE0NzE5NiwyNzYxMiwyNzcwMywxNDA0MjcsMTQ5NzQ1LDE1ODU0NSwyNzczOCwzMzMxOCwyNzc2OSwxNDY4NzYsMTc2MDUsMTQ2ODc3LDE0Nzg3''@;'; put 'put ''NiwxNDk3NzIsMTQ5NzYwLDE0NjYzMywxNDA1MywxNTU5NSwxMzQ0NTAsMzk4MTEsMTQzODY1LDE0MDQzMywzMjY1NSwyNjY3OSwxNTkwMTMsMTU5MTM3LDE1OTIxMSwyODA1NCwyNzk5NiwyODI4NCwyODQyMCwxNDk4ODcsMTQ3NTg5LDE1OTM0NiwzNDA5OSwxNTk2MDQsMjA5MzUsMjc4MDQs''@;'; put 'put ''MjgxODksMzM4MzgsMTY2Njg5LDI4MjA3LDE0Njk5MSwyOTc3OSwxNDczMzAsMzExODAsMjgyMzksMjMxODUsMTQzNDM1LDI4NjY0LDE0MDkzLDI4NTczLDE0Njk5MiwyODQxMCwxMzYzNDMsMTQ3NTE3LDE3NzQ5LDM3ODcyLDI4NDg0LDI4NTA4LDE1Njk0LDI4NTMyLDE2ODMwNCwxNTY3NSwy''@;'; put 'put ''ODU3NSwxNDc3ODAsMjg2MjcsMTQ3NjAxLDE0Nzc5NywxNDc1MTMsMTQ3NDQwLDE0NzM4MCwxNDc3NzUsMjA5NTksMTQ3Nzk4LDE0Nzc5OSwxNDc3NzYsMTU2MTI1LDI4NzQ3LDI4Nzk4LDI4ODM5LDI4ODAxLDI4ODc2LDI4ODg1LDI4ODg2LDI4ODk1LDE2NjQ0LDE1ODQ4LDI5MTA4LDI5MDc4''@;'; put 'put ''LDE0ODA4NywyODk3MSwyODk5NywyMzE3NiwyOTAwMiwyOTAzOCwyMzcwOCwxNDgzMjUsMjkwMDcsMzc3MzAsMTQ4MTYxLDI4OTcyLDE0ODU3MCwxNTAwNTUsMTUwMDUwLDI5MTE0LDE2Njg4OCwyODg2MSwyOTE5OCwzNzk1NCwyOTIwNSwyMjgwMSwzNzk1NSwyOTIyMCwzNzY5NywxNTMwOTMs''@;'; put 'put ''MjkyMzAsMjkyNDgsMTQ5ODc2LDI2ODEzLDI5MjY5LDI5MjcxLDE1OTU3LDE0MzQyOCwyNjYzNywyODQ3NywyOTMxNCwyOTQ4MiwyOTQ4MywxNDk1MzksMTY1OTMxLDE4NjY5LDE2NTg5MiwyOTQ4MCwyOTQ4NiwyOTY0NywyOTYxMCwxMzQyMDIsMTU4MjU0LDI5NjQxLDI5NzY5LDE0NzkzOCwx''@;'; put 'put ''MzY5MzUsMTUwMDUyLDI2MTQ3LDE0MDIxLDE0OTk0MywxNDk5MDEsMTUwMDExLDI5Njg3LDI5NzE3LDI2ODgzLDE1MDA1NCwyOTc1MywxMzI1NDcsMTYwODcsMjk3ODgsMTQxNDg1LDI5NzkyLDE2NzYwMiwyOTc2NywyOTY2OCwyOTgxNCwzMzcyMSwyOTgwNCwxNDEyOCwyOTgxMiwzNzg3Mywy''@;'; put 'put ''NzE4MCwyOTgyNiwxODc3MSwxNTAxNTYsMTQ3ODA3LDE1MDEzNywxNjY3OTksMjMzNjYsMTY2OTE1LDEzNzM3NCwyOTg5NiwxMzc2MDgsMjk5NjYsMjk5MjksMjk5ODIsMTY3NjQxLDEzNzgwMywyMzUxMSwxNjc1OTYsMzc3NjUsMzAwMjksMzAwMjYsMzAwNTUsMzAwNjIsMTUxNDI2LDE2MTMy''@;'; put 'put ''LDE1MDgwMywzMDA5NCwyOTc4OSwzMDExMCwzMDEzMiwzMDIxMCwzMDI1MiwzMDI4OSwzMDI4NywzMDMxOSwzMDMyNiwxNTY2NjEsMzAzNTIsMzMyNjMsMTQzMjgsMTU3OTY5LDE1Nzk2NiwzMDM2OSwzMDM3MywzMDM5MSwzMDQxMiwxNTk2NDcsMzM4OTAsMTUxNzA5LDE1MTkzMywxMzg3ODAs''@;'; put 'put ''MzA0OTQsMzA1MDIsMzA1MjgsMjU3NzUsMTUyMDk2LDMwNTUyLDE0NDA0NCwzMDYzOSwxNjYyNDQsMTY2MjQ4LDEzNjg5NywzMDcwOCwzMDcyOSwxMzYwNTQsMTUwMDM0LDI2ODI2LDMwODk1LDMwOTE5LDMwOTMxLDM4NTY1LDMxMDIyLDE1MzA1NiwzMDkzNSwzMTAyOCwzMDg5NywxNjEyOTIs''@;'; put 'put ''MzY3OTIsMzQ5NDgsMTY2Njk5LDE1NTc3OSwxNDA4MjgsMzExMTAsMzUwNzIsMjY4ODIsMzExMDQsMTUzNjg3LDMxMTMzLDE2MjYxNywzMTAzNiwzMTE0NSwyODIwMiwxNjAwMzgsMTYwNDAsMzExNzQsMTY4MjA1LDMxMTg4XSwiZXVjLWtyIjpbNDQwMzQsNDQwMzUsNDQwMzcsNDQwMzgsNDQw''@;'; put 'put ''NDMsNDQwNDQsNDQwNDUsNDQwNDYsNDQwNDcsNDQwNTYsNDQwNjIsNDQwNjMsNDQwNjUsNDQwNjYsNDQwNjcsNDQwNjksNDQwNzAsNDQwNzEsNDQwNzIsNDQwNzMsNDQwNzQsNDQwNzUsNDQwNzgsNDQwODIsNDQwODMsNDQwODQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQwODUs''@;'; put 'put ''NDQwODYsNDQwODcsNDQwOTAsNDQwOTEsNDQwOTMsNDQwOTQsNDQwOTUsNDQwOTcsNDQwOTgsNDQwOTksNDQxMDAsNDQxMDEsNDQxMDIsNDQxMDMsNDQxMDQsNDQxMDUsNDQxMDYsNDQxMDgsNDQxMTAsNDQxMTEsNDQxMTIsNDQxMTMsNDQxMTQsNDQxMTUsNDQxMTcsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsNDQxMTgsNDQxMTksNDQxMjEsNDQxMjIsNDQxMjMsNDQxMjUsNDQxMjYsNDQxMjcsNDQxMjgsNDQxMjksNDQxMzAsNDQxMzEsNDQxMzIsNDQxMzMsNDQxMzQsNDQxMzUsNDQxMzYsNDQxMzcsNDQxMzgsNDQxMzksNDQxNDAsNDQxNDEsNDQxNDIsNDQxNDMsNDQxNDYs''@;'; put 'put ''NDQxNDcsNDQxNDksNDQxNTAsNDQxNTMsNDQxNTUsNDQxNTYsNDQxNTcsNDQxNTgsNDQxNTksNDQxNjIsNDQxNjcsNDQxNjgsNDQxNzMsNDQxNzQsNDQxNzUsNDQxNzcsNDQxNzgsNDQxNzksNDQxODEsNDQxODIsNDQxODMsNDQxODQsNDQxODUsNDQxODYsNDQxODcsNDQxOTAsNDQxOTQsNDQx''@;'; put 'put ''OTUsNDQxOTYsNDQxOTcsNDQxOTgsNDQxOTksNDQyMDMsNDQyMDUsNDQyMDYsNDQyMDksNDQyMTAsNDQyMTEsNDQyMTIsNDQyMTMsNDQyMTQsNDQyMTUsNDQyMTgsNDQyMjIsNDQyMjMsNDQyMjQsNDQyMjYsNDQyMjcsNDQyMjksNDQyMzAsNDQyMzEsNDQyMzMsNDQyMzQsNDQyMzUsNDQyMzcs''@;'; put 'put ''NDQyMzgsNDQyMzksNDQyNDAsNDQyNDEsNDQyNDIsNDQyNDMsNDQyNDQsNDQyNDYsNDQyNDgsNDQyNDksNDQyNTAsNDQyNTEsNDQyNTIsNDQyNTMsNDQyNTQsNDQyNTUsNDQyNTgsNDQyNTksNDQyNjEsNDQyNjIsNDQyNjUsNDQyNjcsNDQyNjksNDQyNzAsNDQyNzQsNDQyNzYsNDQyNzksNDQy''@;'; put 'put ''ODAsNDQyODEsNDQyODIsNDQyODMsNDQyODYsNDQyODcsNDQyODksNDQyOTAsNDQyOTEsNDQyOTMsNDQyOTUsNDQyOTYsNDQyOTcsNDQyOTgsNDQyOTksNDQzMDIsNDQzMDQsNDQzMDYsNDQzMDcsNDQzMDgsNDQzMDksNDQzMTAsNDQzMTEsNDQzMTMsNDQzMTQsNDQzMTUsNDQzMTcsNDQzMTgs''@;'; put 'put ''NDQzMTksNDQzMjEsNDQzMjIsNDQzMjMsNDQzMjQsNDQzMjUsNDQzMjYsNDQzMjcsNDQzMjgsNDQzMzAsNDQzMzEsNDQzMzQsNDQzMzUsNDQzMzYsNDQzMzcsNDQzMzgsNDQzMzksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQzNDIsNDQzNDMsNDQzNDUsNDQzNDYsNDQzNDcsNDQz''@;'; put 'put ''NDksNDQzNTAsNDQzNTEsNDQzNTIsNDQzNTMsNDQzNTQsNDQzNTUsNDQzNTgsNDQzNjAsNDQzNjIsNDQzNjMsNDQzNjQsNDQzNjUsNDQzNjYsNDQzNjcsNDQzNjksNDQzNzAsNDQzNzEsNDQzNzMsNDQzNzQsNDQzNzUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQzNzcsNDQzNzgs''@;'; put 'put ''NDQzNzksNDQzODAsNDQzODEsNDQzODIsNDQzODMsNDQzODQsNDQzODYsNDQzODgsNDQzODksNDQzOTAsNDQzOTEsNDQzOTIsNDQzOTMsNDQzOTQsNDQzOTUsNDQzOTgsNDQzOTksNDQ0MDEsNDQ0MDIsNDQ0MDcsNDQ0MDgsNDQ0MDksNDQ0MTAsNDQ0MTQsNDQ0MTYsNDQ0MTksNDQ0MjAsNDQ0''@;'; put 'put ''MjEsNDQ0MjIsNDQ0MjMsNDQ0MjYsNDQ0MjcsNDQ0MjksNDQ0MzAsNDQ0MzEsNDQ0MzMsNDQ0MzQsNDQ0MzUsNDQ0MzYsNDQ0MzcsNDQ0MzgsNDQ0MzksNDQ0NDAsNDQ0NDEsNDQ0NDIsNDQ0NDMsNDQ0NDYsNDQ0NDcsNDQ0NDgsNDQ0NDksNDQ0NTAsNDQ0NTEsNDQ0NTMsNDQ0NTQsNDQ0NTUs''@;'; put 'put ''NDQ0NTYsNDQ0NTcsNDQ0NTgsNDQ0NTksNDQ0NjAsNDQ0NjEsNDQ0NjIsNDQ0NjMsNDQ0NjQsNDQ0NjUsNDQ0NjYsNDQ0NjcsNDQ0NjgsNDQ0NjksNDQ0NzAsNDQ0NzIsNDQ0NzMsNDQ0NzQsNDQ0NzUsNDQ0NzYsNDQ0NzcsNDQ0NzgsNDQ0NzksNDQ0ODIsNDQ0ODMsNDQ0ODUsNDQ0ODYsNDQ0''@;'; put 'put ''ODcsNDQ0ODksNDQ0OTAsNDQ0OTEsNDQ0OTIsNDQ0OTMsNDQ0OTQsNDQ0OTUsNDQ0OTgsNDQ1MDAsNDQ1MDEsNDQ1MDIsNDQ1MDMsNDQ1MDQsNDQ1MDUsNDQ1MDYsNDQ1MDcsNDQ1MDksNDQ1MTAsNDQ1MTEsNDQ1MTMsNDQ1MTQsNDQ1MTUsNDQ1MTcsNDQ1MTgsNDQ1MTksNDQ1MjAsNDQ1MjEs''@;'; put 'put ''NDQ1MjIsNDQ1MjMsNDQ1MjQsNDQ1MjUsNDQ1MjYsNDQ1MjcsNDQ1MjgsNDQ1MjksNDQ1MzAsNDQ1MzEsNDQ1MzIsNDQ1MzMsNDQ1MzQsNDQ1MzUsNDQ1MzgsNDQ1MzksNDQ1NDEsNDQ1NDIsNDQ1NDYsNDQ1NDcsNDQ1NDgsNDQ1NDksNDQ1NTAsNDQ1NTEsNDQ1NTQsNDQ1NTYsNDQ1NTgsNDQ1''@;'; put 'put ''NTksNDQ1NjAsNDQ1NjEsNDQ1NjIsNDQ1NjMsNDQ1NjUsNDQ1NjYsNDQ1NjcsNDQ1NjgsNDQ1NjksNDQ1NzAsNDQ1NzEsNDQ1NzIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQ1NzMsNDQ1NzQsNDQ1NzUsNDQ1NzYsNDQ1NzcsNDQ1NzgsNDQ1NzksNDQ1ODAsNDQ1ODEsNDQ1ODIs''@;'; put 'put ''NDQ1ODMsNDQ1ODQsNDQ1ODUsNDQ1ODYsNDQ1ODcsNDQ1ODgsNDQ1ODksNDQ1OTAsNDQ1OTEsNDQ1OTQsNDQ1OTUsNDQ1OTcsNDQ1OTgsNDQ2MDEsNDQ2MDMsNDQ2MDQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQ2MDUsNDQ2MDYsNDQ2MDcsNDQ2MTAsNDQ2MTIsNDQ2MTUsNDQ2''@;'; put 'put ''MTYsNDQ2MTcsNDQ2MTksNDQ2MjMsNDQ2MjUsNDQ2MjYsNDQ2MjcsNDQ2MjksNDQ2MzEsNDQ2MzIsNDQ2MzMsNDQ2MzQsNDQ2MzUsNDQ2MzgsNDQ2NDIsNDQ2NDMsNDQ2NDQsNDQ2NDYsNDQ2NDcsNDQ2NTAsNDQ2NTEsNDQ2NTMsNDQ2NTQsNDQ2NTUsNDQ2NTcsNDQ2NTgsNDQ2NTksNDQ2NjAs''@;'; put 'put ''NDQ2NjEsNDQ2NjIsNDQ2NjMsNDQ2NjYsNDQ2NzAsNDQ2NzEsNDQ2NzIsNDQ2NzMsNDQ2NzQsNDQ2NzUsNDQ2NzgsNDQ2NzksNDQ2ODAsNDQ2ODEsNDQ2ODIsNDQ2ODMsNDQ2ODUsNDQ2ODYsNDQ2ODcsNDQ2ODgsNDQ2ODksNDQ2OTAsNDQ2OTEsNDQ2OTIsNDQ2OTMsNDQ2OTQsNDQ2OTUsNDQ2''@;'; put 'put ''OTYsNDQ2OTcsNDQ2OTgsNDQ2OTksNDQ3MDAsNDQ3MDEsNDQ3MDIsNDQ3MDMsNDQ3MDQsNDQ3MDUsNDQ3MDYsNDQ3MDcsNDQ3MDgsNDQ3MDksNDQ3MTAsNDQ3MTEsNDQ3MTIsNDQ3MTMsNDQ3MTQsNDQ3MTUsNDQ3MTYsNDQ3MTcsNDQ3MTgsNDQ3MTksNDQ3MjAsNDQ3MjEsNDQ3MjIsNDQ3MjMs''@;'; put 'put ''NDQ3MjQsNDQ3MjUsNDQ3MjYsNDQ3MjcsNDQ3MjgsNDQ3MjksNDQ3MzAsNDQ3MzEsNDQ3MzUsNDQ3MzcsNDQ3MzgsNDQ3MzksNDQ3NDEsNDQ3NDIsNDQ3NDMsNDQ3NDQsNDQ3NDUsNDQ3NDYsNDQ3NDcsNDQ3NTAsNDQ3NTQsNDQ3NTUsNDQ3NTYsNDQ3NTcsNDQ3NTgsNDQ3NTksNDQ3NjIsNDQ3''@;'; put 'put ''NjMsNDQ3NjUsNDQ3NjYsNDQ3NjcsNDQ3NjgsNDQ3NjksNDQ3NzAsNDQ3NzEsNDQ3NzIsNDQ3NzMsNDQ3NzQsNDQ3NzUsNDQ3NzcsNDQ3NzgsNDQ3ODAsNDQ3ODIsNDQ3ODMsNDQ3ODQsNDQ3ODUsNDQ3ODYsNDQ3ODcsNDQ3ODksNDQ3OTAsNDQ3OTEsNDQ3OTMsNDQ3OTQsNDQ3OTUsNDQ3OTcs''@;'; put 'put ''NDQ3OTgsNDQ3OTksNDQ4MDAsNDQ4MDEsNDQ4MDIsNDQ4MDMsNDQ4MDQsNDQ4MDUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQ4MDYsNDQ4MDksNDQ4MTAsNDQ4MTEsNDQ4MTIsNDQ4MTQsNDQ4MTUsNDQ4MTcsNDQ4MTgsNDQ4MTksNDQ4MjAsNDQ4MjEsNDQ4MjIsNDQ4MjMsNDQ4''@;'; put 'put ''MjQsNDQ4MjUsNDQ4MjYsNDQ4MjcsNDQ4MjgsNDQ4MjksNDQ4MzAsNDQ4MzEsNDQ4MzIsNDQ4MzMsNDQ4MzQsNDQ4MzUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDQ4MzYsNDQ4MzcsNDQ4MzgsNDQ4MzksNDQ4NDAsNDQ4NDEsNDQ4NDIsNDQ4NDMsNDQ4NDYsNDQ4NDcsNDQ4NDks''@;'; put 'put ''NDQ4NTEsNDQ4NTMsNDQ4NTQsNDQ4NTUsNDQ4NTYsNDQ4NTcsNDQ4NTgsNDQ4NTksNDQ4NjIsNDQ4NjQsNDQ4NjgsNDQ4NjksNDQ4NzAsNDQ4NzEsNDQ4NzQsNDQ4NzUsNDQ4NzYsNDQ4NzcsNDQ4NzgsNDQ4NzksNDQ4ODEsNDQ4ODIsNDQ4ODMsNDQ4ODQsNDQ4ODUsNDQ4ODYsNDQ4ODcsNDQ4''@;'; put 'put ''ODgsNDQ4ODksNDQ4OTAsNDQ4OTEsNDQ4OTQsNDQ4OTUsNDQ4OTYsNDQ4OTcsNDQ4OTgsNDQ4OTksNDQ5MDIsNDQ5MDMsNDQ5MDQsNDQ5MDUsNDQ5MDYsNDQ5MDcsNDQ5MDgsNDQ5MDksNDQ5MTAsNDQ5MTEsNDQ5MTIsNDQ5MTMsNDQ5MTQsNDQ5MTUsNDQ5MTYsNDQ5MTcsNDQ5MTgsNDQ5MTks''@;'; put 'put ''NDQ5MjAsNDQ5MjIsNDQ5MjMsNDQ5MjQsNDQ5MjUsNDQ5MjYsNDQ5MjcsNDQ5MjksNDQ5MzAsNDQ5MzEsNDQ5MzMsNDQ5MzQsNDQ5MzUsNDQ5MzcsNDQ5MzgsNDQ5MzksNDQ5NDAsNDQ5NDEsNDQ5NDIsNDQ5NDMsNDQ5NDYsNDQ5NDcsNDQ5NDgsNDQ5NTAsNDQ5NTEsNDQ5NTIsNDQ5NTMsNDQ5''@;'; put 'put ''NTQsNDQ5NTUsNDQ5NTcsNDQ5NTgsNDQ5NTksNDQ5NjAsNDQ5NjEsNDQ5NjIsNDQ5NjMsNDQ5NjQsNDQ5NjUsNDQ5NjYsNDQ5NjcsNDQ5NjgsNDQ5NjksNDQ5NzAsNDQ5NzEsNDQ5NzIsNDQ5NzMsNDQ5NzQsNDQ5NzUsNDQ5NzYsNDQ5NzcsNDQ5NzgsNDQ5NzksNDQ5ODAsNDQ5ODEsNDQ5ODIs''@;'; put 'put ''NDQ5ODMsNDQ5ODYsNDQ5ODcsNDQ5ODksNDQ5OTAsNDQ5OTEsNDQ5OTMsNDQ5OTQsNDQ5OTUsNDQ5OTYsNDQ5OTcsNDQ5OTgsNDUwMDIsNDUwMDQsNDUwMDcsNDUwMDgsNDUwMDksNDUwMTAsNDUwMTEsNDUwMTMsNDUwMTQsNDUwMTUsNDUwMTYsNDUwMTcsNDUwMTgsNDUwMTksNDUwMjEsNDUw''@;'; put 'put ''MjIsNDUwMjMsNDUwMjQsNDUwMjUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDUwMjYsNDUwMjcsNDUwMjgsNDUwMjksNDUwMzAsNDUwMzEsNDUwMzQsNDUwMzUsNDUwMzYsNDUwMzcsNDUwMzgsNDUwMzksNDUwNDIsNDUwNDMsNDUwNDUsNDUwNDYsNDUwNDcsNDUwNDksNDUwNTAs''@;'; put 'put ''NDUwNTEsNDUwNTIsNDUwNTMsNDUwNTQsNDUwNTUsNDUwNTgsNDUwNTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDUwNjEsNDUwNjIsNDUwNjMsNDUwNjQsNDUwNjUsNDUwNjYsNDUwNjcsNDUwNjksNDUwNzAsNDUwNzEsNDUwNzMsNDUwNzQsNDUwNzUsNDUwNzcsNDUwNzgsNDUw''@;'; put 'put ''NzksNDUwODAsNDUwODEsNDUwODIsNDUwODMsNDUwODYsNDUwODcsNDUwODgsNDUwODksNDUwOTAsNDUwOTEsNDUwOTIsNDUwOTMsNDUwOTQsNDUwOTUsNDUwOTcsNDUwOTgsNDUwOTksNDUxMDAsNDUxMDEsNDUxMDIsNDUxMDMsNDUxMDQsNDUxMDUsNDUxMDYsNDUxMDcsNDUxMDgsNDUxMDks''@;'; put 'put ''NDUxMTAsNDUxMTEsNDUxMTIsNDUxMTMsNDUxMTQsNDUxMTUsNDUxMTYsNDUxMTcsNDUxMTgsNDUxMTksNDUxMjAsNDUxMjEsNDUxMjIsNDUxMjMsNDUxMjYsNDUxMjcsNDUxMjksNDUxMzEsNDUxMzMsNDUxMzUsNDUxMzYsNDUxMzcsNDUxMzgsNDUxNDIsNDUxNDQsNDUxNDYsNDUxNDcsNDUx''@;'; put 'put ''NDgsNDUxNTAsNDUxNTEsNDUxNTIsNDUxNTMsNDUxNTQsNDUxNTUsNDUxNTYsNDUxNTcsNDUxNTgsNDUxNTksNDUxNjAsNDUxNjEsNDUxNjIsNDUxNjMsNDUxNjQsNDUxNjUsNDUxNjYsNDUxNjcsNDUxNjgsNDUxNjksNDUxNzAsNDUxNzEsNDUxNzIsNDUxNzMsNDUxNzQsNDUxNzUsNDUxNzYs''@;'; put 'put ''NDUxNzcsNDUxNzgsNDUxNzksNDUxODIsNDUxODMsNDUxODUsNDUxODYsNDUxODcsNDUxODksNDUxOTAsNDUxOTEsNDUxOTIsNDUxOTMsNDUxOTQsNDUxOTUsNDUxOTgsNDUyMDAsNDUyMDIsNDUyMDMsNDUyMDQsNDUyMDUsNDUyMDYsNDUyMDcsNDUyMTEsNDUyMTMsNDUyMTQsNDUyMTksNDUy''@;'; put 'put ''MjAsNDUyMjEsNDUyMjIsNDUyMjMsNDUyMjYsNDUyMzIsNDUyMzQsNDUyMzgsNDUyMzksNDUyNDEsNDUyNDIsNDUyNDMsNDUyNDUsNDUyNDYsNDUyNDcsNDUyNDgsNDUyNDksNDUyNTAsNDUyNTEsNDUyNTQsNDUyNTgsNDUyNTksNDUyNjAsNDUyNjEsNDUyNjIsNDUyNjMsNDUyNjYsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDUyNjcsNDUyNjksNDUyNzAsNDUyNzEsNDUyNzMsNDUyNzQsNDUyNzUsNDUyNzYsNDUyNzcsNDUyNzgsNDUyNzksNDUyODEsNDUyODIsNDUyODMsNDUyODQsNDUyODYsNDUyODcsNDUyODgsNDUyODksNDUyOTAsNDUyOTEsNDUyOTIsNDUyOTMsNDUy''@;'; put 'put ''OTQsNDUyOTUsNDUyOTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDUyOTcsNDUyOTgsNDUyOTksNDUzMDAsNDUzMDEsNDUzMDIsNDUzMDMsNDUzMDQsNDUzMDUsNDUzMDYsNDUzMDcsNDUzMDgsNDUzMDksNDUzMTAsNDUzMTEsNDUzMTIsNDUzMTMsNDUzMTQsNDUzMTUsNDUzMTYs''@;'; put 'put ''NDUzMTcsNDUzMTgsNDUzMTksNDUzMjIsNDUzMjUsNDUzMjYsNDUzMjcsNDUzMjksNDUzMzIsNDUzMzMsNDUzMzQsNDUzMzUsNDUzMzgsNDUzNDIsNDUzNDMsNDUzNDQsNDUzNDUsNDUzNDYsNDUzNTAsNDUzNTEsNDUzNTMsNDUzNTQsNDUzNTUsNDUzNTcsNDUzNTgsNDUzNTksNDUzNjAsNDUz''@;'; put 'put ''NjEsNDUzNjIsNDUzNjMsNDUzNjYsNDUzNzAsNDUzNzEsNDUzNzIsNDUzNzMsNDUzNzQsNDUzNzUsNDUzNzgsNDUzNzksNDUzODEsNDUzODIsNDUzODMsNDUzODUsNDUzODYsNDUzODcsNDUzODgsNDUzODksNDUzOTAsNDUzOTEsNDUzOTQsNDUzOTUsNDUzOTgsNDUzOTksNDU0MDEsNDU0MDIs''@;'; put 'put ''NDU0MDMsNDU0MDUsNDU0MDYsNDU0MDcsNDU0MDksNDU0MTAsNDU0MTEsNDU0MTIsNDU0MTMsNDU0MTQsNDU0MTUsNDU0MTYsNDU0MTcsNDU0MTgsNDU0MTksNDU0MjAsNDU0MjEsNDU0MjIsNDU0MjMsNDU0MjQsNDU0MjUsNDU0MjYsNDU0MjcsNDU0MjgsNDU0MjksNDU0MzAsNDU0MzEsNDU0''@;'; put 'put ''MzQsNDU0MzUsNDU0MzcsNDU0MzgsNDU0MzksNDU0NDEsNDU0NDMsNDU0NDQsNDU0NDUsNDU0NDYsNDU0NDcsNDU0NTAsNDU0NTIsNDU0NTQsNDU0NTUsNDU0NTYsNDU0NTcsNDU0NjEsNDU0NjIsNDU0NjMsNDU0NjUsNDU0NjYsNDU0NjcsNDU0NjksNDU0NzAsNDU0NzEsNDU0NzIsNDU0NzMs''@;'; put 'put ''NDU0NzQsNDU0NzUsNDU0NzYsNDU0NzcsNDU0NzgsNDU0NzksNDU0ODEsNDU0ODIsNDU0ODMsNDU0ODQsNDU0ODUsNDU0ODYsNDU0ODcsNDU0ODgsNDU0ODksNDU0OTAsNDU0OTEsNDU0OTIsNDU0OTMsNDU0OTQsNDU0OTUsNDU0OTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDU0''@;'; put 'put ''OTcsNDU0OTgsNDU0OTksNDU1MDAsNDU1MDEsNDU1MDIsNDU1MDMsNDU1MDQsNDU1MDUsNDU1MDYsNDU1MDcsNDU1MDgsNDU1MDksNDU1MTAsNDU1MTEsNDU1MTIsNDU1MTMsNDU1MTQsNDU1MTUsNDU1MTcsNDU1MTgsNDU1MTksNDU1MjEsNDU1MjIsNDU1MjMsNDU1MjUsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsNDU1MjYsNDU1MjcsNDU1MjgsNDU1MjksNDU1MzAsNDU1MzEsNDU1MzQsNDU1MzYsNDU1MzcsNDU1MzgsNDU1MzksNDU1NDAsNDU1NDEsNDU1NDIsNDU1NDMsNDU1NDYsNDU1NDcsNDU1NDksNDU1NTAsNDU1NTEsNDU1NTMsNDU1NTQsNDU1NTUsNDU1NTYsNDU1''@;'; put 'put ''NTcsNDU1NTgsNDU1NTksNDU1NjAsNDU1NjIsNDU1NjQsNDU1NjYsNDU1NjcsNDU1NjgsNDU1NjksNDU1NzAsNDU1NzEsNDU1NzQsNDU1NzUsNDU1NzcsNDU1NzgsNDU1ODEsNDU1ODIsNDU1ODMsNDU1ODQsNDU1ODUsNDU1ODYsNDU1ODcsNDU1OTAsNDU1OTIsNDU1OTQsNDU1OTUsNDU1OTYs''@;'; put 'put ''NDU1OTcsNDU1OTgsNDU1OTksNDU2MDEsNDU2MDIsNDU2MDMsNDU2MDQsNDU2MDUsNDU2MDYsNDU2MDcsNDU2MDgsNDU2MDksNDU2MTAsNDU2MTEsNDU2MTIsNDU2MTMsNDU2MTQsNDU2MTUsNDU2MTYsNDU2MTcsNDU2MTgsNDU2MTksNDU2MjEsNDU2MjIsNDU2MjMsNDU2MjQsNDU2MjUsNDU2''@;'; put 'put ''MjYsNDU2MjcsNDU2MjksNDU2MzAsNDU2MzEsNDU2MzIsNDU2MzMsNDU2MzQsNDU2MzUsNDU2MzYsNDU2MzcsNDU2MzgsNDU2MzksNDU2NDAsNDU2NDEsNDU2NDIsNDU2NDMsNDU2NDQsNDU2NDUsNDU2NDYsNDU2NDcsNDU2NDgsNDU2NDksNDU2NTAsNDU2NTEsNDU2NTIsNDU2NTMsNDU2NTQs''@;'; put 'put ''NDU2NTUsNDU2NTcsNDU2NTgsNDU2NTksNDU2NjEsNDU2NjIsNDU2NjMsNDU2NjUsNDU2NjYsNDU2NjcsNDU2NjgsNDU2NjksNDU2NzAsNDU2NzEsNDU2NzQsNDU2NzUsNDU2NzYsNDU2NzcsNDU2NzgsNDU2NzksNDU2ODAsNDU2ODEsNDU2ODIsNDU2ODMsNDU2ODYsNDU2ODcsNDU2ODgsNDU2''@;'; put 'put ''ODksNDU2OTAsNDU2OTEsNDU2OTMsNDU2OTQsNDU2OTUsNDU2OTYsNDU2OTcsNDU2OTgsNDU2OTksNDU3MDIsNDU3MDMsNDU3MDQsNDU3MDYsNDU3MDcsNDU3MDgsNDU3MDksNDU3MTAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDU3MTEsNDU3MTQsNDU3MTUsNDU3MTcsNDU3MTgs''@;'; put 'put ''NDU3MTksNDU3MjMsNDU3MjQsNDU3MjUsNDU3MjYsNDU3MjcsNDU3MzAsNDU3MzIsNDU3MzUsNDU3MzYsNDU3MzcsNDU3MzksNDU3NDEsNDU3NDIsNDU3NDMsNDU3NDUsNDU3NDYsNDU3NDcsNDU3NDksNDU3NTAsNDU3NTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDU3NTIsNDU3''@;'; put 'put ''NTMsNDU3NTQsNDU3NTUsNDU3NTYsNDU3NTcsNDU3NTgsNDU3NTksNDU3NjAsNDU3NjEsNDU3NjIsNDU3NjMsNDU3NjQsNDU3NjUsNDU3NjYsNDU3NjcsNDU3NzAsNDU3NzEsNDU3NzMsNDU3NzQsNDU3NzUsNDU3NzcsNDU3NzksNDU3ODAsNDU3ODEsNDU3ODIsNDU3ODMsNDU3ODYsNDU3ODgs''@;'; put 'put ''NDU3OTAsNDU3OTEsNDU3OTIsNDU3OTMsNDU3OTUsNDU3OTksNDU4MDEsNDU4MDIsNDU4MDgsNDU4MDksNDU4MTAsNDU4MTQsNDU4MjAsNDU4MjEsNDU4MjIsNDU4MjYsNDU4MjcsNDU4MjksNDU4MzAsNDU4MzEsNDU4MzMsNDU4MzQsNDU4MzUsNDU4MzYsNDU4MzcsNDU4MzgsNDU4MzksNDU4''@;'; put 'put ''NDIsNDU4NDYsNDU4NDcsNDU4NDgsNDU4NDksNDU4NTAsNDU4NTEsNDU4NTMsNDU4NTQsNDU4NTUsNDU4NTYsNDU4NTcsNDU4NTgsNDU4NTksNDU4NjAsNDU4NjEsNDU4NjIsNDU4NjMsNDU4NjQsNDU4NjUsNDU4NjYsNDU4NjcsNDU4NjgsNDU4NjksNDU4NzAsNDU4NzEsNDU4NzIsNDU4NzMs''@;'; put 'put ''NDU4NzQsNDU4NzUsNDU4NzYsNDU4NzcsNDU4NzgsNDU4NzksNDU4ODAsNDU4ODEsNDU4ODIsNDU4ODMsNDU4ODQsNDU4ODUsNDU4ODYsNDU4ODcsNDU4ODgsNDU4ODksNDU4OTAsNDU4OTEsNDU4OTIsNDU4OTMsNDU4OTQsNDU4OTUsNDU4OTYsNDU4OTcsNDU4OTgsNDU4OTksNDU5MDAsNDU5''@;'; put 'put ''MDEsNDU5MDIsNDU5MDMsNDU5MDQsNDU5MDUsNDU5MDYsNDU5MDcsNDU5MTEsNDU5MTMsNDU5MTQsNDU5MTcsNDU5MjAsNDU5MjEsNDU5MjIsNDU5MjMsNDU5MjYsNDU5MjgsNDU5MzAsNDU5MzIsNDU5MzMsNDU5MzUsNDU5MzgsNDU5MzksNDU5NDEsNDU5NDIsNDU5NDMsNDU5NDUsNDU5NDYs''@;'; put 'put ''NDU5NDcsNDU5NDgsNDU5NDksNDU5NTAsNDU5NTEsNDU5NTQsNDU5NTgsNDU5NTksNDU5NjAsNDU5NjEsNDU5NjIsNDU5NjMsNDU5NjUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDU5NjYsNDU5NjcsNDU5NjksNDU5NzAsNDU5NzEsNDU5NzMsNDU5NzQsNDU5NzUsNDU5NzYsNDU5''@;'; put 'put ''NzcsNDU5NzgsNDU5NzksNDU5ODAsNDU5ODEsNDU5ODIsNDU5ODMsNDU5ODYsNDU5ODcsNDU5ODgsNDU5ODksNDU5OTAsNDU5OTEsNDU5OTMsNDU5OTQsNDU5OTUsNDU5OTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDU5OTgsNDU5OTksNDZlMyw0NjAwMSw0NjAwMiw0NjAwMyw0''@;'; put 'put ''NjAwNCw0NjAwNSw0NjAwNiw0NjAwNyw0NjAwOCw0NjAwOSw0NjAxMCw0NjAxMSw0NjAxMiw0NjAxMyw0NjAxNCw0NjAxNSw0NjAxNiw0NjAxNyw0NjAxOCw0NjAxOSw0NjAyMiw0NjAyMyw0NjAyNSw0NjAyNiw0NjAyOSw0NjAzMSw0NjAzMyw0NjAzNCw0NjAzNSw0NjAzOCw0NjA0MCw0NjA0''@;'; put 'put ''Miw0NjA0NCw0NjA0Niw0NjA0Nyw0NjA0OSw0NjA1MCw0NjA1MSw0NjA1Myw0NjA1NCw0NjA1NSw0NjA1Nyw0NjA1OCw0NjA1OSw0NjA2MCw0NjA2MSw0NjA2Miw0NjA2Myw0NjA2NCw0NjA2NSw0NjA2Niw0NjA2Nyw0NjA2OCw0NjA2OSw0NjA3MCw0NjA3MSw0NjA3Miw0NjA3Myw0NjA3NCw0''@;'; put 'put ''NjA3NSw0NjA3Nyw0NjA3OCw0NjA3OSw0NjA4MCw0NjA4MSw0NjA4Miw0NjA4Myw0NjA4NCw0NjA4NSw0NjA4Niw0NjA4Nyw0NjA4OCw0NjA4OSw0NjA5MCw0NjA5MSw0NjA5Miw0NjA5Myw0NjA5NCw0NjA5NSw0NjA5Nyw0NjA5OCw0NjA5OSw0NjEwMCw0NjEwMSw0NjEwMiw0NjEwMyw0NjEw''@;'; put 'put ''NSw0NjEwNiw0NjEwNyw0NjEwOSw0NjExMCw0NjExMSw0NjExMyw0NjExNCw0NjExNSw0NjExNiw0NjExNyw0NjExOCw0NjExOSw0NjEyMiw0NjEyNCw0NjEyNSw0NjEyNiw0NjEyNyw0NjEyOCw0NjEyOSw0NjEzMCw0NjEzMSw0NjEzMyw0NjEzNCw0NjEzNSw0NjEzNiw0NjEzNyw0NjEzOCw0''@;'; put 'put ''NjEzOSw0NjE0MCw0NjE0MSw0NjE0Miw0NjE0Myw0NjE0NCw0NjE0NSw0NjE0Niw0NjE0Nyw0NjE0OCw0NjE0OSw0NjE1MCw0NjE1MSw0NjE1Miw0NjE1Myw0NjE1NCw0NjE1NSw0NjE1Niw0NjE1Nyw0NjE1OCw0NjE1OSw0NjE2Miw0NjE2Myw0NjE2NSw0NjE2Niw0NjE2Nyw0NjE2OSw0NjE3''@;'; put 'put ''MCw0NjE3MSw0NjE3Miw0NjE3Myw0NjE3NCw0NjE3NSw0NjE3OCw0NjE4MCw0NjE4MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NjE4Myw0NjE4NCw0NjE4NSw0NjE4Niw0NjE4Nyw0NjE4OSw0NjE5MCw0NjE5MSw0NjE5Miw0NjE5Myw0NjE5NCw0NjE5NSw0NjE5Niw0NjE5Nyw0''@;'; put 'put ''NjE5OCw0NjE5OSw0NjIwMCw0NjIwMSw0NjIwMiw0NjIwMyw0NjIwNCw0NjIwNSw0NjIwNiw0NjIwNyw0NjIwOSw0NjIxMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NjIxMSw0NjIxMiw0NjIxMyw0NjIxNCw0NjIxNSw0NjIxNyw0NjIxOCw0NjIxOSw0NjIyMCw0NjIyMSw0NjIy''@;'; put 'put ''Miw0NjIyMyw0NjIyNCw0NjIyNSw0NjIyNiw0NjIyNyw0NjIyOCw0NjIyOSw0NjIzMCw0NjIzMSw0NjIzMiw0NjIzMyw0NjIzNCw0NjIzNSw0NjIzNiw0NjIzOCw0NjIzOSw0NjI0MCw0NjI0MSw0NjI0Miw0NjI0Myw0NjI0NSw0NjI0Niw0NjI0Nyw0NjI0OSw0NjI1MCw0NjI1MSw0NjI1Myw0''@;'; put 'put ''NjI1NCw0NjI1NSw0NjI1Niw0NjI1Nyw0NjI1OCw0NjI1OSw0NjI2MCw0NjI2Miw0NjI2NCw0NjI2Niw0NjI2Nyw0NjI2OCw0NjI2OSw0NjI3MCw0NjI3MSw0NjI3Myw0NjI3NCw0NjI3NSw0NjI3Nyw0NjI3OCw0NjI3OSw0NjI4MSw0NjI4Miw0NjI4Myw0NjI4NCw0NjI4NSw0NjI4Niw0NjI4''@;'; put 'put ''Nyw0NjI4OSw0NjI5MCw0NjI5MSw0NjI5Miw0NjI5NCw0NjI5NSw0NjI5Niw0NjI5Nyw0NjI5OCw0NjI5OSw0NjMwMiw0NjMwMyw0NjMwNSw0NjMwNiw0NjMwOSw0NjMxMSw0NjMxMiw0NjMxMyw0NjMxNCw0NjMxNSw0NjMxOCw0NjMyMCw0NjMyMiw0NjMyMyw0NjMyNCw0NjMyNSw0NjMyNiw0''@;'; put 'put ''NjMyNyw0NjMyOSw0NjMzMCw0NjMzMSw0NjMzMiw0NjMzMyw0NjMzNCw0NjMzNSw0NjMzNiw0NjMzNyw0NjMzOCw0NjMzOSw0NjM0MCw0NjM0MSw0NjM0Miw0NjM0Myw0NjM0NCw0NjM0NSw0NjM0Niw0NjM0Nyw0NjM0OCw0NjM0OSw0NjM1MCw0NjM1MSw0NjM1Miw0NjM1Myw0NjM1NCw0NjM1''@;'; put 'put ''NSw0NjM1OCw0NjM1OSw0NjM2MSw0NjM2Miw0NjM2NSw0NjM2Niw0NjM2Nyw0NjM2OCw0NjM2OSw0NjM3MCw0NjM3MSw0NjM3NCw0NjM3OSw0NjM4MCw0NjM4MSw0NjM4Miw0NjM4Myw0NjM4Niw0NjM4Nyw0NjM4OSw0NjM5MCw0NjM5MSw0NjM5Myw0NjM5NCw0NjM5NSw0NjM5Niw0NjM5Nyw0''@;'; put 'put ''NjM5OCw0NjM5OSw0NjQwMiw0NjQwNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NjQwNyw0NjQwOCw0NjQwOSw0NjQxMCw0NjQxNCw0NjQxNSw0NjQxNyw0NjQxOCw0NjQxOSw0NjQyMSw0NjQyMiw0NjQyMyw0NjQyNCw0NjQyNSw0NjQyNiw0NjQyNyw0NjQzMCw0NjQzNCw0NjQz''@;'; put 'put ''NSw0NjQzNiw0NjQzNyw0NjQzOCw0NjQzOSw0NjQ0MCw0NjQ0MSw0NjQ0MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NjQ0Myw0NjQ0NCw0NjQ0NSw0NjQ0Niw0NjQ0Nyw0NjQ0OCw0NjQ0OSw0NjQ1MCw0NjQ1MSw0NjQ1Miw0NjQ1Myw0NjQ1NCw0NjQ1NSw0NjQ1Niw0NjQ1Nyw0''@;'; put 'put ''NjQ1OCw0NjQ1OSw0NjQ2MCw0NjQ2MSw0NjQ2Miw0NjQ2Myw0NjQ2NCw0NjQ2NSw0NjQ2Niw0NjQ2Nyw0NjQ2OCw0NjQ2OSw0NjQ3MCw0NjQ3MSw0NjQ3Miw0NjQ3Myw0NjQ3NCw0NjQ3NSw0NjQ3Niw0NjQ3Nyw0NjQ3OCw0NjQ3OSw0NjQ4MCw0NjQ4MSw0NjQ4Miw0NjQ4Myw0NjQ4NCw0NjQ4''@;'; put 'put ''NSw0NjQ4Niw0NjQ4Nyw0NjQ4OCw0NjQ4OSw0NjQ5MCw0NjQ5MSw0NjQ5Miw0NjQ5Myw0NjQ5NCw0NjQ5NSw0NjQ5OCw0NjQ5OSw0NjUwMSw0NjUwMiw0NjUwMyw0NjUwNSw0NjUwOCw0NjUwOSw0NjUxMCw0NjUxMSw0NjUxNCw0NjUxOCw0NjUxOSw0NjUyMCw0NjUyMSw0NjUyMiw0NjUyNiw0''@;'; put 'put ''NjUyNyw0NjUyOSw0NjUzMCw0NjUzMSw0NjUzMyw0NjUzNCw0NjUzNSw0NjUzNiw0NjUzNyw0NjUzOCw0NjUzOSw0NjU0Miw0NjU0Niw0NjU0Nyw0NjU0OCw0NjU0OSw0NjU1MCw0NjU1MSw0NjU1Myw0NjU1NCw0NjU1NSw0NjU1Niw0NjU1Nyw0NjU1OCw0NjU1OSw0NjU2MCw0NjU2MSw0NjU2''@;'; put 'put ''Miw0NjU2Myw0NjU2NCw0NjU2NSw0NjU2Niw0NjU2Nyw0NjU2OCw0NjU2OSw0NjU3MCw0NjU3MSw0NjU3Myw0NjU3NCw0NjU3NSw0NjU3Niw0NjU3Nyw0NjU3OCw0NjU3OSw0NjU4MCw0NjU4MSw0NjU4Miw0NjU4Myw0NjU4NCw0NjU4NSw0NjU4Niw0NjU4Nyw0NjU4OCw0NjU4OSw0NjU5MCw0''@;'; put 'put ''NjU5MSw0NjU5Miw0NjU5Myw0NjU5NCw0NjU5NSw0NjU5Niw0NjU5Nyw0NjU5OCw0NjU5OSw0NjYwMCw0NjYwMSw0NjYwMiw0NjYwMyw0NjYwNCw0NjYwNSw0NjYwNiw0NjYwNyw0NjYxMCw0NjYxMSw0NjYxMyw0NjYxNCw0NjYxNSw0NjYxNyw0NjYxOCw0NjYxOSw0NjYyMCw0NjYyMSxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NjYyMiw0NjYyMyw0NjYyNCw0NjYyNSw0NjYyNiw0NjYyNyw0NjYyOCw0NjYzMCw0NjYzMSw0NjYzMiw0NjYzMyw0NjYzNCw0NjYzNSw0NjYzNyw0NjYzOCw0NjYzOSw0NjY0MCw0NjY0MSw0NjY0Miw0NjY0Myw0NjY0NSw0NjY0Niw0NjY0Nyw0''@;'; put 'put ''NjY0OCw0NjY0OSw0NjY1MCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NjY1MSw0NjY1Miw0NjY1Myw0NjY1NCw0NjY1NSw0NjY1Niw0NjY1Nyw0NjY1OCw0NjY1OSw0NjY2MCw0NjY2MSw0NjY2Miw0NjY2Myw0NjY2NSw0NjY2Niw0NjY2Nyw0NjY2OCw0NjY2OSw0NjY3MCw0NjY3''@;'; put 'put ''MSw0NjY3Miw0NjY3Myw0NjY3NCw0NjY3NSw0NjY3Niw0NjY3Nyw0NjY3OCw0NjY3OSw0NjY4MCw0NjY4MSw0NjY4Miw0NjY4Myw0NjY4NCw0NjY4NSw0NjY4Niw0NjY4Nyw0NjY4OCw0NjY4OSw0NjY5MCw0NjY5MSw0NjY5Myw0NjY5NCw0NjY5NSw0NjY5Nyw0NjY5OCw0NjY5OSw0NjcwMCw0''@;'; put 'put ''NjcwMSw0NjcwMiw0NjcwMyw0NjcwNCw0NjcwNSw0NjcwNiw0NjcwNyw0NjcwOCw0NjcwOSw0NjcxMCw0NjcxMSw0NjcxMiw0NjcxMyw0NjcxNCw0NjcxNSw0NjcxNiw0NjcxNyw0NjcxOCw0NjcxOSw0NjcyMCw0NjcyMSw0NjcyMiw0NjcyMyw0NjcyNCw0NjcyNSw0NjcyNiw0NjcyNyw0Njcy''@;'; put 'put ''OCw0NjcyOSw0NjczMCw0NjczMSw0NjczMiw0NjczMyw0NjczNCw0NjczNSw0NjczNiw0NjczNyw0NjczOCw0NjczOSw0Njc0MCw0Njc0MSw0Njc0Miw0Njc0Myw0Njc0NCw0Njc0NSw0Njc0Niw0Njc0Nyw0Njc1MCw0Njc1MSw0Njc1Myw0Njc1NCw0Njc1NSw0Njc1Nyw0Njc1OCw0Njc1OSw0''@;'; put 'put ''Njc2MCw0Njc2MSw0Njc2Miw0Njc2NSw0Njc2Niw0Njc2Nyw0Njc2OCw0Njc3MCw0Njc3MSw0Njc3Miw0Njc3Myw0Njc3NCw0Njc3NSw0Njc3Niw0Njc3Nyw0Njc3OCw0Njc3OSw0Njc4MCw0Njc4MSw0Njc4Miw0Njc4Myw0Njc4NCw0Njc4NSw0Njc4Niw0Njc4Nyw0Njc4OCw0Njc4OSw0Njc5''@;'; put 'put ''MCw0Njc5MSw0Njc5Miw0Njc5Myw0Njc5NCw0Njc5NSw0Njc5Niw0Njc5Nyw0Njc5OCw0Njc5OSw0NjgwMCw0NjgwMSw0NjgwMiw0NjgwMyw0NjgwNSw0NjgwNiw0NjgwNyw0NjgwOCw0NjgwOSw0NjgxMCw0NjgxMSw0NjgxMiw0NjgxMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0''@;'; put 'put ''NjgxNCw0NjgxNSw0NjgxNiw0NjgxNyw0NjgxOCw0NjgxOSw0NjgyMCw0NjgyMSw0NjgyMiw0NjgyMyw0NjgyNCw0NjgyNSw0NjgyNiw0NjgyNyw0NjgyOCw0NjgyOSw0NjgzMCw0NjgzMSw0NjgzMyw0NjgzNCw0NjgzNSw0NjgzNyw0NjgzOCw0NjgzOSw0Njg0MSw0Njg0MixudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCw0Njg0Myw0Njg0NCw0Njg0NSw0Njg0Niw0Njg0Nyw0Njg1MCw0Njg1MSw0Njg1Miw0Njg1NCw0Njg1NSw0Njg1Niw0Njg1Nyw0Njg1OCw0Njg1OSw0Njg2MCw0Njg2MSw0Njg2Miw0Njg2Myw0Njg2NCw0Njg2NSw0Njg2Niw0Njg2Nyw0Njg2OCw0Njg2OSw0''@;'; put 'put ''Njg3MCw0Njg3MSw0Njg3Miw0Njg3Myw0Njg3NCw0Njg3NSw0Njg3Niw0Njg3Nyw0Njg3OCw0Njg3OSw0Njg4MCw0Njg4MSw0Njg4Miw0Njg4Myw0Njg4NCw0Njg4NSw0Njg4Niw0Njg4Nyw0Njg5MCw0Njg5MSw0Njg5Myw0Njg5NCw0Njg5Nyw0Njg5OCw0Njg5OSw0NjkwMCw0NjkwMSw0Njkw''@;'; put 'put ''Miw0NjkwMyw0NjkwNiw0NjkwOCw0NjkwOSw0NjkxMCw0NjkxMSw0NjkxMiw0NjkxMyw0NjkxNCw0NjkxNSw0NjkxNyw0NjkxOCw0NjkxOSw0NjkyMSw0NjkyMiw0NjkyMyw0NjkyNSw0NjkyNiw0NjkyNyw0NjkyOCw0NjkyOSw0NjkzMCw0NjkzMSw0NjkzNCw0NjkzNSw0NjkzNiw0NjkzNyw0''@;'; put 'put ''NjkzOCw0NjkzOSw0Njk0MCw0Njk0MSw0Njk0Miw0Njk0Myw0Njk0NSw0Njk0Niw0Njk0Nyw0Njk0OSw0Njk1MCw0Njk1MSw0Njk1Myw0Njk1NCw0Njk1NSw0Njk1Niw0Njk1Nyw0Njk1OCw0Njk1OSw0Njk2Miw0Njk2NCw0Njk2Niw0Njk2Nyw0Njk2OCw0Njk2OSw0Njk3MCw0Njk3MSw0Njk3''@;'; put 'put ''NCw0Njk3NSw0Njk3Nyw0Njk3OCw0Njk3OSw0Njk4MSw0Njk4Miw0Njk4Myw0Njk4NCw0Njk4NSw0Njk4Niw0Njk4Nyw0Njk5MCw0Njk5NSw0Njk5Niw0Njk5Nyw0NzAwMiw0NzAwMyw0NzAwNSw0NzAwNiw0NzAwNyw0NzAwOSw0NzAxMCw0NzAxMSw0NzAxMiw0NzAxMyw0NzAxNCw0NzAxNSw0''@;'; put 'put ''NzAxOCw0NzAyMiw0NzAyMyw0NzAyNCw0NzAyNSw0NzAyNiw0NzAyNyw0NzAzMCw0NzAzMSw0NzAzMyw0NzAzNCw0NzAzNSw0NzAzNiw0NzAzNyw0NzAzOCw0NzAzOSw0NzA0MCw0NzA0MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NzA0Miw0NzA0Myw0NzA0NCw0NzA0NSw0NzA0''@;'; put 'put ''Niw0NzA0OCw0NzA1MCw0NzA1MSw0NzA1Miw0NzA1Myw0NzA1NCw0NzA1NSw0NzA1Niw0NzA1Nyw0NzA1OCw0NzA1OSw0NzA2MCw0NzA2MSw0NzA2Miw0NzA2Myw0NzA2NCw0NzA2NSw0NzA2Niw0NzA2Nyw0NzA2OCw0NzA2OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NzA3MCw0''@;'; put 'put ''NzA3MSw0NzA3Miw0NzA3Myw0NzA3NCw0NzA3NSw0NzA3Niw0NzA3Nyw0NzA3OCw0NzA3OSw0NzA4MCw0NzA4MSw0NzA4Miw0NzA4Myw0NzA4Niw0NzA4Nyw0NzA4OSw0NzA5MCw0NzA5MSw0NzA5Myw0NzA5NCw0NzA5NSw0NzA5Niw0NzA5Nyw0NzA5OCw0NzA5OSw0NzEwMiw0NzEwNiw0NzEw''@;'; put 'put ''Nyw0NzEwOCw0NzEwOSw0NzExMCw0NzExNCw0NzExNSw0NzExNyw0NzExOCw0NzExOSw0NzEyMSw0NzEyMiw0NzEyMyw0NzEyNCw0NzEyNSw0NzEyNiw0NzEyNyw0NzEzMCw0NzEzMiw0NzEzNCw0NzEzNSw0NzEzNiw0NzEzNyw0NzEzOCw0NzEzOSw0NzE0Miw0NzE0Myw0NzE0NSw0NzE0Niw0''@;'; put 'put ''NzE0Nyw0NzE0OSw0NzE1MCw0NzE1MSw0NzE1Miw0NzE1Myw0NzE1NCw0NzE1NSw0NzE1OCw0NzE2Miw0NzE2Myw0NzE2NCw0NzE2NSw0NzE2Niw0NzE2Nyw0NzE2OSw0NzE3MCw0NzE3MSw0NzE3Myw0NzE3NCw0NzE3NSw0NzE3Niw0NzE3Nyw0NzE3OCw0NzE3OSw0NzE4MCw0NzE4MSw0NzE4''@;'; put 'put ''Miw0NzE4Myw0NzE4NCw0NzE4Niw0NzE4OCw0NzE4OSw0NzE5MCw0NzE5MSw0NzE5Miw0NzE5Myw0NzE5NCw0NzE5NSw0NzE5OCw0NzE5OSw0NzIwMSw0NzIwMiw0NzIwMyw0NzIwNSw0NzIwNiw0NzIwNyw0NzIwOCw0NzIwOSw0NzIxMCw0NzIxMSw0NzIxNCw0NzIxNiw0NzIxOCw0NzIxOSw0''@;'; put 'put ''NzIyMCw0NzIyMSw0NzIyMiw0NzIyMyw0NzIyNSw0NzIyNiw0NzIyNyw0NzIyOSw0NzIzMCw0NzIzMSw0NzIzMiw0NzIzMyw0NzIzNCw0NzIzNSw0NzIzNiw0NzIzNyw0NzIzOCw0NzIzOSw0NzI0MCw0NzI0MSw0NzI0Miw0NzI0Myw0NzI0NCw0NzI0Niw0NzI0Nyw0NzI0OCw0NzI0OSw0NzI1''@;'; put 'put ''MCw0NzI1MSw0NzI1Miw0NzI1Myw0NzI1NCw0NzI1NSw0NzI1Niw0NzI1Nyw0NzI1OCw0NzI1OSw0NzI2MCw0NzI2MSw0NzI2Miw0NzI2MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NzI2NCw0NzI2NSw0NzI2Niw0NzI2Nyw0NzI2OCw0NzI2OSw0NzI3MCw0NzI3MSw0NzI3Myw0''@;'; put 'put ''NzI3NCw0NzI3NSw0NzI3Niw0NzI3Nyw0NzI3OCw0NzI3OSw0NzI4MSw0NzI4Miw0NzI4Myw0NzI4NSw0NzI4Niw0NzI4Nyw0NzI4OSw0NzI5MCw0NzI5MSw0NzI5Miw0NzI5MyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NzI5NCw0NzI5NSw0NzI5OCw0NzMwMCw0NzMwMiw0NzMw''@;'; put 'put ''Myw0NzMwNCw0NzMwNSw0NzMwNiw0NzMwNyw0NzMwOSw0NzMxMCw0NzMxMSw0NzMxMyw0NzMxNCw0NzMxNSw0NzMxNyw0NzMxOCw0NzMxOSw0NzMyMCw0NzMyMSw0NzMyMiw0NzMyMyw0NzMyNCw0NzMyNiw0NzMyOCw0NzMzMCw0NzMzMSw0NzMzMiw0NzMzMyw0NzMzNCw0NzMzNSw0NzMzOCw0''@;'; put 'put ''NzMzOSw0NzM0MSw0NzM0Miw0NzM0Myw0NzM0NSw0NzM0Niw0NzM0Nyw0NzM0OCw0NzM0OSw0NzM1MCw0NzM1MSw0NzM1NCw0NzM1Niw0NzM1OCw0NzM1OSw0NzM2MCw0NzM2MSw0NzM2Miw0NzM2Myw0NzM2NSw0NzM2Niw0NzM2Nyw0NzM2OCw0NzM2OSw0NzM3MCw0NzM3MSw0NzM3Miw0NzM3''@;'; put 'put ''Myw0NzM3NCw0NzM3NSw0NzM3Niw0NzM3Nyw0NzM3OCw0NzM3OSw0NzM4MCw0NzM4MSw0NzM4Miw0NzM4Myw0NzM4NSw0NzM4Niw0NzM4Nyw0NzM4OCw0NzM4OSw0NzM5MCw0NzM5MSw0NzM5Myw0NzM5NCw0NzM5NSw0NzM5Niw0NzM5Nyw0NzM5OCw0NzM5OSw0NzQwMCw0NzQwMSw0NzQwMiw0''@;'; put 'put ''NzQwMyw0NzQwNCw0NzQwNSw0NzQwNiw0NzQwNyw0NzQwOCw0NzQwOSw0NzQxMCw0NzQxMSw0NzQxMiw0NzQxMyw0NzQxNCw0NzQxNSw0NzQxNiw0NzQxNyw0NzQxOCw0NzQxOSw0NzQyMiw0NzQyMyw0NzQyNSw0NzQyNiw0NzQyNyw0NzQyOSw0NzQzMCw0NzQzMSw0NzQzMiw0NzQzMyw0NzQz''@;'; put 'put ''NCw0NzQzNSw0NzQzNyw0NzQzOCw0NzQ0MCw0NzQ0Miw0NzQ0Myw0NzQ0NCw0NzQ0NSw0NzQ0Niw0NzQ0Nyw0NzQ1MCw0NzQ1MSw0NzQ1Myw0NzQ1NCw0NzQ1NSw0NzQ1Nyw0NzQ1OCw0NzQ1OSw0NzQ2MCw0NzQ2MSw0NzQ2Miw0NzQ2Myw0NzQ2Niw0NzQ2OCw0NzQ3MCw0NzQ3MSw0NzQ3Miw0''@;'; put 'put ''NzQ3Myw0NzQ3NCw0NzQ3NSw0NzQ3OCw0NzQ3OSw0NzQ4MSw0NzQ4Miw0NzQ4Myw0NzQ4NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NzQ4Niw0NzQ4Nyw0NzQ4OCw0NzQ4OSw0NzQ5MCw0NzQ5MSw0NzQ5NCw0NzQ5Niw0NzQ5OSw0NzUwMCw0NzUwMyw0NzUwNCw0NzUwNSw0NzUw''@;'; put 'put ''Niw0NzUwNyw0NzUwOCw0NzUwOSw0NzUxMCw0NzUxMSw0NzUxMiw0NzUxMyw0NzUxNCw0NzUxNSw0NzUxNiw0NzUxNyw0NzUxOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NzUxOSw0NzUyMCw0NzUyMSw0NzUyMiw0NzUyMyw0NzUyNCw0NzUyNSw0NzUyNiw0NzUyNyw0NzUyOCw0''@;'; put 'put ''NzUyOSw0NzUzMCw0NzUzMSw0NzUzNCw0NzUzNSw0NzUzNyw0NzUzOCw0NzUzOSw0NzU0MSw0NzU0Miw0NzU0Myw0NzU0NCw0NzU0NSw0NzU0Niw0NzU0Nyw0NzU1MCw0NzU1Miw0NzU1NCw0NzU1NSw0NzU1Niw0NzU1Nyw0NzU1OCw0NzU1OSw0NzU2Miw0NzU2Myw0NzU2NSw0NzU3MSw0NzU3''@;'; put 'put ''Miw0NzU3Myw0NzU3NCw0NzU3NSw0NzU3OCw0NzU4MCw0NzU4Myw0NzU4NCw0NzU4Niw0NzU5MCw0NzU5MSw0NzU5Myw0NzU5NCw0NzU5NSw0NzU5Nyw0NzU5OCw0NzU5OSw0NzYwMCw0NzYwMSw0NzYwMiw0NzYwMyw0NzYwNiw0NzYxMSw0NzYxMiw0NzYxMyw0NzYxNCw0NzYxNSw0NzYxOCw0''@;'; put 'put ''NzYxOSw0NzYyMCw0NzYyMSw0NzYyMiw0NzYyMyw0NzYyNSw0NzYyNiw0NzYyNyw0NzYyOCw0NzYyOSw0NzYzMCw0NzYzMSw0NzYzMiw0NzYzMyw0NzYzNCw0NzYzNSw0NzYzNiw0NzYzOCw0NzYzOSw0NzY0MCw0NzY0MSw0NzY0Miw0NzY0Myw0NzY0NCw0NzY0NSw0NzY0Niw0NzY0Nyw0NzY0''@;'; put 'put ''OCw0NzY0OSw0NzY1MCw0NzY1MSw0NzY1Miw0NzY1Myw0NzY1NCw0NzY1NSw0NzY1Niw0NzY1Nyw0NzY1OCw0NzY1OSw0NzY2MCw0NzY2MSw0NzY2Miw0NzY2Myw0NzY2NCw0NzY2NSw0NzY2Niw0NzY2Nyw0NzY2OCw0NzY2OSw0NzY3MCw0NzY3MSw0NzY3NCw0NzY3NSw0NzY3Nyw0NzY3OCw0''@;'; put 'put ''NzY3OSw0NzY4MSw0NzY4Myw0NzY4NCw0NzY4NSw0NzY4Niw0NzY4Nyw0NzY5MCw0NzY5Miw0NzY5NSw0NzY5Niw0NzY5Nyw0NzY5OCw0NzcwMiw0NzcwMyw0NzcwNSw0NzcwNiw0NzcwNyw0NzcwOSw0NzcxMCw0NzcxMSw0NzcxMiw0NzcxMyw0NzcxNCw0NzcxNSw0NzcxOCw0NzcyMiw0Nzcy''@;'; put 'put ''Myw0NzcyNCw0NzcyNSw0NzcyNiw0NzcyNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0NzczMCw0NzczMSw0NzczMyw0NzczNCw0NzczNSw0NzczNyw0NzczOCw0NzczOSw0Nzc0MCw0Nzc0MSw0Nzc0Miw0Nzc0Myw0Nzc0NCw0Nzc0NSw0Nzc0Niw0Nzc1MCw0Nzc1Miw0Nzc1Myw0''@;'; put 'put ''Nzc1NCw0Nzc1NSw0Nzc1Nyw0Nzc1OCw0Nzc1OSw0Nzc2MCw0Nzc2MSw0Nzc2MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0Nzc2Myw0Nzc2NCw0Nzc2NSw0Nzc2Niw0Nzc2Nyw0Nzc2OCw0Nzc2OSw0Nzc3MCw0Nzc3MSw0Nzc3Miw0Nzc3Myw0Nzc3NCw0Nzc3NSw0Nzc3Niw0Nzc3''@;'; put 'put ''Nyw0Nzc3OCw0Nzc3OSw0Nzc4MCw0Nzc4MSw0Nzc4Miw0Nzc4Myw0Nzc4Niw0Nzc4OSw0Nzc5MCw0Nzc5MSw0Nzc5Myw0Nzc5NSw0Nzc5Niw0Nzc5Nyw0Nzc5OCw0Nzc5OSw0NzgwMiw0NzgwNCw0NzgwNiw0NzgwNyw0NzgwOCw0NzgwOSw0NzgxMCw0NzgxMSw0NzgxMyw0NzgxNCw0NzgxNSw0''@;'; put 'put ''NzgxNyw0NzgxOCw0NzgxOSw0NzgyMCw0NzgyMSw0NzgyMiw0NzgyMyw0NzgyNCw0NzgyNSw0NzgyNiw0NzgyNyw0NzgyOCw0NzgyOSw0NzgzMCw0NzgzMSw0NzgzNCw0NzgzNSw0NzgzNiw0NzgzNyw0NzgzOCw0NzgzOSw0Nzg0MCw0Nzg0MSw0Nzg0Miw0Nzg0Myw0Nzg0NCw0Nzg0NSw0Nzg0''@;'; put 'put ''Niw0Nzg0Nyw0Nzg0OCw0Nzg0OSw0Nzg1MCw0Nzg1MSw0Nzg1Miw0Nzg1Myw0Nzg1NCw0Nzg1NSw0Nzg1Niw0Nzg1Nyw0Nzg1OCw0Nzg1OSw0Nzg2MCw0Nzg2MSw0Nzg2Miw0Nzg2Myw0Nzg2NCw0Nzg2NSw0Nzg2Niw0Nzg2Nyw0Nzg2OSw0Nzg3MCw0Nzg3MSw0Nzg3Myw0Nzg3NCw0Nzg3NSw0''@;'; put 'put ''Nzg3Nyw0Nzg3OCw0Nzg3OSw0Nzg4MCw0Nzg4MSw0Nzg4Miw0Nzg4Myw0Nzg4NCw0Nzg4Niw0Nzg4OCw0Nzg5MCw0Nzg5MSw0Nzg5Miw0Nzg5Myw0Nzg5NCw0Nzg5NSw0Nzg5Nyw0Nzg5OCw0Nzg5OSw0NzkwMSw0NzkwMiw0NzkwMyw0NzkwNSw0NzkwNiw0NzkwNyw0NzkwOCw0NzkwOSw0Nzkx''@;'; put 'put ''MCw0NzkxMSw0NzkxMiw0NzkxNCw0NzkxNiw0NzkxNyw0NzkxOCw0NzkxOSw0NzkyMCw0NzkyMSw0NzkyMiw0NzkyMyw0NzkyNyw0NzkyOSw0NzkzMCw0NzkzNSw0NzkzNiw0NzkzNyw0NzkzOCw0NzkzOSw0Nzk0Miw0Nzk0NCw0Nzk0Niw0Nzk0Nyw0Nzk0OCw0Nzk1MCw0Nzk1Myw0Nzk1NCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0Nzk1NSw0Nzk1Nyw0Nzk1OCw0Nzk1OSw0Nzk2MSw0Nzk2Miw0Nzk2Myw0Nzk2NCw0Nzk2NSw0Nzk2Niw0Nzk2Nyw0Nzk2OCw0Nzk3MCw0Nzk3Miw0Nzk3Myw0Nzk3NCw0Nzk3NSw0Nzk3Niw0Nzk3Nyw0Nzk3OCw0Nzk3OSw0Nzk4MSw0Nzk4''@;'; put 'put ''Miw0Nzk4Myw0Nzk4NCw0Nzk4NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw0Nzk4Niw0Nzk4Nyw0Nzk4OCw0Nzk4OSw0Nzk5MCw0Nzk5MSw0Nzk5Miw0Nzk5Myw0Nzk5NCw0Nzk5NSw0Nzk5Niw0Nzk5Nyw0Nzk5OCw0Nzk5OSw0OGUzLDQ4MDAxLDQ4MDAyLDQ4MDAzLDQ4MDA0LDQ4''@;'; put 'put ''MDA1LDQ4MDA2LDQ4MDA3LDQ4MDA5LDQ4MDEwLDQ4MDExLDQ4MDEzLDQ4MDE0LDQ4MDE1LDQ4MDE3LDQ4MDE4LDQ4MDE5LDQ4MDIwLDQ4MDIxLDQ4MDIyLDQ4MDIzLDQ4MDI0LDQ4MDI1LDQ4MDI2LDQ4MDI3LDQ4MDI4LDQ4MDI5LDQ4MDMwLDQ4MDMxLDQ4MDMyLDQ4MDMzLDQ4MDM0LDQ4MDM1''@;'; put 'put ''LDQ4MDM3LDQ4MDM4LDQ4MDM5LDQ4MDQxLDQ4MDQyLDQ4MDQzLDQ4MDQ1LDQ4MDQ2LDQ4MDQ3LDQ4MDQ4LDQ4MDQ5LDQ4MDUwLDQ4MDUxLDQ4MDUzLDQ4MDU0LDQ4MDU2LDQ4MDU3LDQ4MDU4LDQ4MDU5LDQ4MDYwLDQ4MDYxLDQ4MDYyLDQ4MDYzLDQ4MDY1LDQ4MDY2LDQ4MDY3LDQ4MDY5LDQ4''@;'; put 'put ''MDcwLDQ4MDcxLDQ4MDczLDQ4MDc0LDQ4MDc1LDQ4MDc2LDQ4MDc3LDQ4MDc4LDQ4MDc5LDQ4MDgxLDQ4MDgyLDQ4MDg0LDQ4MDg1LDQ4MDg2LDQ4MDg3LDQ4MDg4LDQ4MDg5LDQ4MDkwLDQ4MDkxLDQ4MDkyLDQ4MDkzLDQ4MDk0LDQ4MDk1LDQ4MDk2LDQ4MDk3LDQ4MDk4LDQ4MDk5LDQ4MTAw''@;'; put 'put ''LDQ4MTAxLDQ4MTAyLDQ4MTAzLDQ4MTA0LDQ4MTA1LDQ4MTA2LDQ4MTA3LDQ4MTA4LDQ4MTA5LDQ4MTEwLDQ4MTExLDQ4MTEyLDQ4MTEzLDQ4MTE0LDQ4MTE1LDQ4MTE2LDQ4MTE3LDQ4MTE4LDQ4MTE5LDQ4MTIyLDQ4MTIzLDQ4MTI1LDQ4MTI2LDQ4MTI5LDQ4MTMxLDQ4MTMyLDQ4MTMzLDQ4''@;'; put 'put ''MTM0LDQ4MTM1LDQ4MTM4LDQ4MTQyLDQ4MTQ0LDQ4MTQ2LDQ4MTQ3LDQ4MTUzLDQ4MTU0LDQ4MTYwLDQ4MTYxLDQ4MTYyLDQ4MTYzLDQ4MTY2LDQ4MTY4LDQ4MTcwLDQ4MTcxLDQ4MTcyLDQ4MTc0LDQ4MTc1LDQ4MTc4LDQ4MTc5LDQ4MTgxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LDQ4MTgyLDQ4MTgzLDQ4MTg1LDQ4MTg2LDQ4MTg3LDQ4MTg4LDQ4MTg5LDQ4MTkwLDQ4MTkxLDQ4MTk0LDQ4MTk4LDQ4MTk5LDQ4MjAwLDQ4MjAyLDQ4MjAzLDQ4MjA2LDQ4MjA3LDQ4MjA5LDQ4MjEwLDQ4MjExLDQ4MjEyLDQ4MjEzLDQ4MjE0LDQ4MjE1LDQ4MjE2LDQ4MjE3LG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLDQ4MjE4LDQ4MjE5LDQ4MjIwLDQ4MjIyLDQ4MjIzLDQ4MjI0LDQ4MjI1LDQ4MjI2LDQ4MjI3LDQ4MjI4LDQ4MjI5LDQ4MjMwLDQ4MjMxLDQ4MjMyLDQ4MjMzLDQ4MjM0LDQ4MjM1LDQ4MjM2LDQ4MjM3LDQ4MjM4LDQ4MjM5LDQ4MjQwLDQ4MjQxLDQ4MjQy''@;'; put 'put ''LDQ4MjQzLDQ4MjQ0LDQ4MjQ1LDQ4MjQ2LDQ4MjQ3LDQ4MjQ4LDQ4MjQ5LDQ4MjUwLDQ4MjUxLDQ4MjUyLDQ4MjUzLDQ4MjU0LDQ4MjU1LDQ4MjU2LDQ4MjU3LDQ4MjU4LDQ4MjU5LDQ4MjYyLDQ4MjYzLDQ4MjY1LDQ4MjY2LDQ4MjY5LDQ4MjcxLDQ4MjcyLDQ4MjczLDQ4Mjc0LDQ4Mjc1LDQ4''@;'; put 'put ''Mjc4LDQ4MjgwLDQ4MjgzLDQ4Mjg0LDQ4Mjg1LDQ4Mjg2LDQ4Mjg3LDQ4MjkwLDQ4MjkxLDQ4MjkzLDQ4Mjk0LDQ4Mjk3LDQ4Mjk4LDQ4Mjk5LDQ4MzAwLDQ4MzAxLDQ4MzAyLDQ4MzAzLDQ4MzA2LDQ4MzEwLDQ4MzExLDQ4MzEyLDQ4MzEzLDQ4MzE0LDQ4MzE1LDQ4MzE4LDQ4MzE5LDQ4MzIx''@;'; put 'put ''LDQ4MzIyLDQ4MzIzLDQ4MzI1LDQ4MzI2LDQ4MzI3LDQ4MzI4LDQ4MzI5LDQ4MzMwLDQ4MzMxLDQ4MzMyLDQ4MzM0LDQ4MzM4LDQ4MzM5LDQ4MzQwLDQ4MzQyLDQ4MzQzLDQ4MzQ1LDQ4MzQ2LDQ4MzQ3LDQ4MzQ5LDQ4MzUwLDQ4MzUxLDQ4MzUyLDQ4MzUzLDQ4MzU0LDQ4MzU1LDQ4MzU2LDQ4''@;'; put 'put ''MzU3LDQ4MzU4LDQ4MzU5LDQ4MzYwLDQ4MzYxLDQ4MzYyLDQ4MzYzLDQ4MzY0LDQ4MzY1LDQ4MzY2LDQ4MzY3LDQ4MzY4LDQ4MzY5LDQ4MzcwLDQ4MzcxLDQ4Mzc1LDQ4Mzc3LDQ4Mzc4LDQ4Mzc5LDQ4MzgxLDQ4MzgyLDQ4MzgzLDQ4Mzg0LDQ4Mzg1LDQ4Mzg2LDQ4Mzg3LDQ4MzkwLDQ4Mzky''@;'; put 'put ''LDQ4Mzk0LDQ4Mzk1LDQ4Mzk2LDQ4Mzk3LDQ4Mzk4LDQ4Mzk5LDQ4NDAxLDQ4NDAyLDQ4NDAzLDQ4NDA1LDQ4NDA2LDQ4NDA3LDQ4NDA4LDQ4NDA5LDQ4NDEwLDQ4NDExLDQ4NDEyLDQ4NDEzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4NDE0LDQ4NDE1LDQ4NDE2LDQ4NDE3LDQ4''@;'; put 'put ''NDE4LDQ4NDE5LDQ4NDIxLDQ4NDIyLDQ4NDIzLDQ4NDI0LDQ4NDI1LDQ4NDI2LDQ4NDI3LDQ4NDI5LDQ4NDMwLDQ4NDMxLDQ4NDMyLDQ4NDMzLDQ4NDM0LDQ4NDM1LDQ4NDM2LDQ4NDM3LDQ4NDM4LDQ4NDM5LDQ4NDQwLDQ4NDQxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4NDQy''@;'; put 'put ''LDQ4NDQzLDQ4NDQ0LDQ4NDQ1LDQ4NDQ2LDQ4NDQ3LDQ4NDQ5LDQ4NDUwLDQ4NDUxLDQ4NDUyLDQ4NDUzLDQ4NDU0LDQ4NDU1LDQ4NDU4LDQ4NDU5LDQ4NDYxLDQ4NDYyLDQ4NDYzLDQ4NDY1LDQ4NDY2LDQ4NDY3LDQ4NDY4LDQ4NDY5LDQ4NDcwLDQ4NDcxLDQ4NDc0LDQ4NDc1LDQ4NDc2LDQ4''@;'; put 'put ''NDc3LDQ4NDc4LDQ4NDc5LDQ4NDgwLDQ4NDgxLDQ4NDgyLDQ4NDgzLDQ4NDg1LDQ4NDg2LDQ4NDg3LDQ4NDg5LDQ4NDkwLDQ4NDkxLDQ4NDkyLDQ4NDkzLDQ4NDk0LDQ4NDk1LDQ4NDk2LDQ4NDk3LDQ4NDk4LDQ4NDk5LDQ4NTAwLDQ4NTAxLDQ4NTAyLDQ4NTAzLDQ4NTA0LDQ4NTA1LDQ4NTA2''@;'; put 'put ''LDQ4NTA3LDQ4NTA4LDQ4NTA5LDQ4NTEwLDQ4NTExLDQ4NTE0LDQ4NTE1LDQ4NTE3LDQ4NTE4LDQ4NTIzLDQ4NTI0LDQ4NTI1LDQ4NTI2LDQ4NTI3LDQ4NTMwLDQ4NTMyLDQ4NTM0LDQ4NTM1LDQ4NTM2LDQ4NTM5LDQ4NTQxLDQ4NTQyLDQ4NTQzLDQ4NTQ0LDQ4NTQ1LDQ4NTQ2LDQ4NTQ3LDQ4''@;'; put 'put ''NTQ5LDQ4NTUwLDQ4NTUxLDQ4NTUyLDQ4NTUzLDQ4NTU0LDQ4NTU1LDQ4NTU2LDQ4NTU3LDQ4NTU4LDQ4NTU5LDQ4NTYxLDQ4NTYyLDQ4NTYzLDQ4NTY0LDQ4NTY1LDQ4NTY2LDQ4NTY3LDQ4NTY5LDQ4NTcwLDQ4NTcxLDQ4NTcyLDQ4NTczLDQ4NTc0LDQ4NTc1LDQ4NTc2LDQ4NTc3LDQ4NTc4''@;'; put 'put ''LDQ4NTc5LDQ4NTgwLDQ4NTgxLDQ4NTgyLDQ4NTgzLDQ4NTg0LDQ4NTg1LDQ4NTg2LDQ4NTg3LDQ4NTg4LDQ4NTg5LDQ4NTkwLDQ4NTkxLDQ4NTkyLDQ4NTkzLDQ4NTk0LDQ4NTk1LDQ4NTk4LDQ4NTk5LDQ4NjAxLDQ4NjAyLDQ4NjAzLDQ4NjA1LDQ4NjA2LDQ4NjA3LDQ4NjA4LDQ4NjA5LDQ4''@;'; put 'put ''NjEwLDQ4NjExLDQ4NjEyLDQ4NjEzLDQ4NjE0LDQ4NjE1LDQ4NjE2LDQ4NjE4LDQ4NjE5LDQ4NjIwLDQ4NjIxLDQ4NjIyLDQ4NjIzLDQ4NjI1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4NjI2LDQ4NjI3LDQ4NjI5LDQ4NjMwLDQ4NjMxLDQ4NjMzLDQ4NjM0LDQ4NjM1LDQ4NjM2''@;'; put 'put ''LDQ4NjM3LDQ4NjM4LDQ4NjM5LDQ4NjQxLDQ4NjQyLDQ4NjQ0LDQ4NjQ2LDQ4NjQ3LDQ4NjQ4LDQ4NjQ5LDQ4NjUwLDQ4NjUxLDQ4NjU0LDQ4NjU1LDQ4NjU3LDQ4NjU4LDQ4NjU5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4NjYxLDQ4NjYyLDQ4NjYzLDQ4NjY0LDQ4NjY1LDQ4''@;'; put 'put ''NjY2LDQ4NjY3LDQ4NjcwLDQ4NjcyLDQ4NjczLDQ4Njc0LDQ4Njc1LDQ4Njc2LDQ4Njc3LDQ4Njc4LDQ4Njc5LDQ4NjgwLDQ4NjgxLDQ4NjgyLDQ4NjgzLDQ4Njg0LDQ4Njg1LDQ4Njg2LDQ4Njg3LDQ4Njg4LDQ4Njg5LDQ4NjkwLDQ4NjkxLDQ4NjkyLDQ4NjkzLDQ4Njk0LDQ4Njk1LDQ4Njk2''@;'; put 'put ''LDQ4Njk3LDQ4Njk4LDQ4Njk5LDQ4NzAwLDQ4NzAxLDQ4NzAyLDQ4NzAzLDQ4NzA0LDQ4NzA1LDQ4NzA2LDQ4NzA3LDQ4NzEwLDQ4NzExLDQ4NzEzLDQ4NzE0LDQ4NzE1LDQ4NzE3LDQ4NzE5LDQ4NzIwLDQ4NzIxLDQ4NzIyLDQ4NzIzLDQ4NzI2LDQ4NzI4LDQ4NzMyLDQ4NzMzLDQ4NzM0LDQ4''@;'; put 'put ''NzM1LDQ4NzM4LDQ4NzM5LDQ4NzQxLDQ4NzQyLDQ4NzQzLDQ4NzQ1LDQ4NzQ3LDQ4NzQ4LDQ4NzQ5LDQ4NzUwLDQ4NzUxLDQ4NzU0LDQ4NzU4LDQ4NzU5LDQ4NzYwLDQ4NzYxLDQ4NzYyLDQ4NzY2LDQ4NzY3LDQ4NzY5LDQ4NzcwLDQ4NzcxLDQ4NzczLDQ4Nzc0LDQ4Nzc1LDQ4Nzc2LDQ4Nzc3''@;'; put 'put ''LDQ4Nzc4LDQ4Nzc5LDQ4NzgyLDQ4Nzg2LDQ4Nzg3LDQ4Nzg4LDQ4Nzg5LDQ4NzkwLDQ4NzkxLDQ4Nzk0LDQ4Nzk1LDQ4Nzk2LDQ4Nzk3LDQ4Nzk4LDQ4Nzk5LDQ4ODAwLDQ4ODAxLDQ4ODAyLDQ4ODAzLDQ4ODA0LDQ4ODA1LDQ4ODA2LDQ4ODA3LDQ4ODA5LDQ4ODEwLDQ4ODExLDQ4ODEyLDQ4''@;'; put 'put ''ODEzLDQ4ODE0LDQ4ODE1LDQ4ODE2LDQ4ODE3LDQ4ODE4LDQ4ODE5LDQ4ODIwLDQ4ODIxLDQ4ODIyLDQ4ODIzLDQ4ODI0LDQ4ODI1LDQ4ODI2LDQ4ODI3LDQ4ODI4LDQ4ODI5LDQ4ODMwLDQ4ODMxLDQ4ODMyLDQ4ODMzLDQ4ODM0LDQ4ODM1LDQ4ODM2LDQ4ODM3LDQ4ODM4LDQ4ODM5LDQ4ODQw''@;'; put 'put ''LDQ4ODQxLDQ4ODQyLDQ4ODQzLDQ4ODQ0LDQ4ODQ1LDQ4ODQ2LDQ4ODQ3LDQ4ODUwLDQ4ODUxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4ODUzLDQ4ODU0LDQ4ODU3LDQ4ODU4LDQ4ODU5LDQ4ODYwLDQ4ODYxLDQ4ODYyLDQ4ODYzLDQ4ODY1LDQ4ODY2LDQ4ODcwLDQ4ODcxLDQ4''@;'; put 'put ''ODcyLDQ4ODczLDQ4ODc0LDQ4ODc1LDQ4ODc3LDQ4ODc4LDQ4ODc5LDQ4ODgwLDQ4ODgxLDQ4ODgyLDQ4ODgzLDQ4ODg0LDQ4ODg1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDQ4ODg2LDQ4ODg3LDQ4ODg4LDQ4ODg5LDQ4ODkwLDQ4ODkxLDQ4ODkyLDQ4ODkzLDQ4ODk0LDQ4ODk1''@;'; put 'put ''LDQ4ODk2LDQ4ODk4LDQ4ODk5LDQ4OTAwLDQ4OTAxLDQ4OTAyLDQ4OTAzLDQ4OTA2LDQ4OTA3LDQ4OTA4LDQ4OTA5LDQ4OTEwLDQ4OTExLDQ4OTEyLDQ4OTEzLDQ4OTE0LDQ4OTE1LDQ4OTE2LDQ4OTE3LDQ4OTE4LDQ4OTE5LDQ4OTIyLDQ4OTI2LDQ4OTI3LDQ4OTI4LDQ4OTI5LDQ4OTMwLDQ4''@;'; put 'put ''OTMxLDQ4OTMyLDQ4OTMzLDQ4OTM0LDQ4OTM1LDQ4OTM2LDQ4OTM3LDQ4OTM4LDQ4OTM5LDQ4OTQwLDQ4OTQxLDQ4OTQyLDQ4OTQzLDQ4OTQ0LDQ4OTQ1LDQ4OTQ2LDQ4OTQ3LDQ4OTQ4LDQ4OTQ5LDQ4OTUwLDQ4OTUxLDQ4OTUyLDQ4OTUzLDQ4OTU0LDQ4OTU1LDQ4OTU2LDQ4OTU3LDQ4OTU4''@;'; put 'put ''LDQ4OTU5LDQ4OTYyLDQ4OTYzLDQ4OTY1LDQ4OTY2LDQ4OTY3LDQ4OTY5LDQ4OTcwLDQ4OTcxLDQ4OTcyLDQ4OTczLDQ4OTc0LDQ4OTc1LDQ4OTc4LDQ4OTc5LDQ4OTgwLDQ4OTgyLDQ4OTgzLDQ4OTg0LDQ4OTg1LDQ4OTg2LDQ4OTg3LDQ4OTg4LDQ4OTg5LDQ4OTkwLDQ4OTkxLDQ4OTkyLDQ4''@;'; put 'put ''OTkzLDQ4OTk0LDQ4OTk1LDQ4OTk2LDQ4OTk3LDQ4OTk4LDQ4OTk5LDQ5ZTMsNDkwMDEsNDkwMDIsNDkwMDMsNDkwMDQsNDkwMDUsNDkwMDYsNDkwMDcsNDkwMDgsNDkwMDksNDkwMTAsNDkwMTEsNDkwMTIsNDkwMTMsNDkwMTQsNDkwMTUsNDkwMTYsNDkwMTcsNDkwMTgsNDkwMTksNDkwMjAs''@;'; put 'put ''NDkwMjEsNDkwMjIsNDkwMjMsNDkwMjQsNDkwMjUsNDkwMjYsNDkwMjcsNDkwMjgsNDkwMjksNDkwMzAsNDkwMzEsNDkwMzIsNDkwMzMsNDkwMzQsNDkwMzUsNDkwMzYsNDkwMzcsNDkwMzgsNDkwMzksNDkwNDAsNDkwNDEsNDkwNDIsNDkwNDMsNDkwNDUsNDkwNDYsNDkwNDcsNDkwNDgsNDkw''@;'; put 'put ''NDksNDkwNTAsNDkwNTEsNDkwNTIsNDkwNTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDkwNTQsNDkwNTUsNDkwNTYsNDkwNTcsNDkwNTgsNDkwNTksNDkwNjAsNDkwNjEsNDkwNjIsNDkwNjMsNDkwNjQsNDkwNjUsNDkwNjYsNDkwNjcsNDkwNjgsNDkwNjksNDkwNzAsNDkwNzEs''@;'; put 'put ''NDkwNzMsNDkwNzQsNDkwNzUsNDkwNzYsNDkwNzcsNDkwNzgsNDkwNzksNDkwODAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDkwODEsNDkwODIsNDkwODMsNDkwODQsNDkwODUsNDkwODYsNDkwODcsNDkwODgsNDkwODksNDkwOTAsNDkwOTEsNDkwOTIsNDkwOTQsNDkwOTUsNDkw''@;'; put 'put ''OTYsNDkwOTcsNDkwOTgsNDkwOTksNDkxMDIsNDkxMDMsNDkxMDUsNDkxMDYsNDkxMDcsNDkxMDksNDkxMTAsNDkxMTEsNDkxMTIsNDkxMTMsNDkxMTQsNDkxMTUsNDkxMTcsNDkxMTgsNDkxMjAsNDkxMjIsNDkxMjMsNDkxMjQsNDkxMjUsNDkxMjYsNDkxMjcsNDkxMjgsNDkxMjksNDkxMzAs''@;'; put 'put ''NDkxMzEsNDkxMzIsNDkxMzMsNDkxMzQsNDkxMzUsNDkxMzYsNDkxMzcsNDkxMzgsNDkxMzksNDkxNDAsNDkxNDEsNDkxNDIsNDkxNDMsNDkxNDQsNDkxNDUsNDkxNDYsNDkxNDcsNDkxNDgsNDkxNDksNDkxNTAsNDkxNTEsNDkxNTIsNDkxNTMsNDkxNTQsNDkxNTUsNDkxNTYsNDkxNTcsNDkx''@;'; put 'put ''NTgsNDkxNTksNDkxNjAsNDkxNjEsNDkxNjIsNDkxNjMsNDkxNjQsNDkxNjUsNDkxNjYsNDkxNjcsNDkxNjgsNDkxNjksNDkxNzAsNDkxNzEsNDkxNzIsNDkxNzMsNDkxNzQsNDkxNzUsNDkxNzYsNDkxNzcsNDkxNzgsNDkxNzksNDkxODAsNDkxODEsNDkxODIsNDkxODMsNDkxODQsNDkxODUs''@;'; put 'put ''NDkxODYsNDkxODcsNDkxODgsNDkxODksNDkxOTAsNDkxOTEsNDkxOTIsNDkxOTMsNDkxOTQsNDkxOTUsNDkxOTYsNDkxOTcsNDkxOTgsNDkxOTksNDkyMDAsNDkyMDEsNDkyMDIsNDkyMDMsNDkyMDQsNDkyMDUsNDkyMDYsNDkyMDcsNDkyMDgsNDkyMDksNDkyMTAsNDkyMTEsNDkyMTMsNDky''@;'; put 'put ''MTQsNDkyMTUsNDkyMTYsNDkyMTcsNDkyMTgsNDkyMTksNDkyMjAsNDkyMjEsNDkyMjIsNDkyMjMsNDkyMjQsNDkyMjUsNDkyMjYsNDkyMjcsNDkyMjgsNDkyMjksNDkyMzAsNDkyMzEsNDkyMzIsNDkyMzQsNDkyMzUsNDkyMzYsNDkyMzcsNDkyMzgsNDkyMzksNDkyNDEsNDkyNDIsNDkyNDMs''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDkyNDUsNDkyNDYsNDkyNDcsNDkyNDksNDkyNTAsNDkyNTEsNDkyNTIsNDkyNTMsNDkyNTQsNDkyNTUsNDkyNTgsNDkyNTksNDkyNjAsNDkyNjEsNDkyNjIsNDkyNjMsNDkyNjQsNDkyNjUsNDkyNjYsNDkyNjcsNDkyNjgsNDkyNjksNDky''@;'; put 'put ''NzAsNDkyNzEsNDkyNzIsNDkyNzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDkyNzQsNDkyNzUsNDkyNzYsNDkyNzcsNDkyNzgsNDkyNzksNDkyODAsNDkyODEsNDkyODIsNDkyODMsNDkyODQsNDkyODUsNDkyODYsNDkyODcsNDkyODgsNDkyODksNDkyOTAsNDkyOTEsNDkyOTIs''@;'; put 'put ''NDkyOTMsNDkyOTQsNDkyOTUsNDkyOTgsNDkyOTksNDkzMDEsNDkzMDIsNDkzMDMsNDkzMDUsNDkzMDYsNDkzMDcsNDkzMDgsNDkzMDksNDkzMTAsNDkzMTEsNDkzMTQsNDkzMTYsNDkzMTgsNDkzMTksNDkzMjAsNDkzMjEsNDkzMjIsNDkzMjMsNDkzMjYsNDkzMjksNDkzMzAsNDkzMzUsNDkz''@;'; put 'put ''MzYsNDkzMzcsNDkzMzgsNDkzMzksNDkzNDIsNDkzNDYsNDkzNDcsNDkzNDgsNDkzNTAsNDkzNTEsNDkzNTQsNDkzNTUsNDkzNTcsNDkzNTgsNDkzNTksNDkzNjEsNDkzNjIsNDkzNjMsNDkzNjQsNDkzNjUsNDkzNjYsNDkzNjcsNDkzNzAsNDkzNzQsNDkzNzUsNDkzNzYsNDkzNzcsNDkzNzgs''@;'; put 'put ''NDkzNzksNDkzODIsNDkzODMsNDkzODUsNDkzODYsNDkzODcsNDkzODksNDkzOTAsNDkzOTEsNDkzOTIsNDkzOTMsNDkzOTQsNDkzOTUsNDkzOTgsNDk0MDAsNDk0MDIsNDk0MDMsNDk0MDQsNDk0MDUsNDk0MDYsNDk0MDcsNDk0MDksNDk0MTAsNDk0MTEsNDk0MTMsNDk0MTQsNDk0MTUsNDk0''@;'; put 'put ''MTcsNDk0MTgsNDk0MTksNDk0MjAsNDk0MjEsNDk0MjIsNDk0MjMsNDk0MjUsNDk0MjYsNDk0MjcsNDk0MjgsNDk0MzAsNDk0MzEsNDk0MzIsNDk0MzMsNDk0MzQsNDk0MzUsNDk0NDEsNDk0NDIsNDk0NDUsNDk0NDgsNDk0NDksNDk0NTAsNDk0NTEsNDk0NTQsNDk0NTgsNDk0NTksNDk0NjAs''@;'; put 'put ''NDk0NjEsNDk0NjMsNDk0NjYsNDk0NjcsNDk0NjksNDk0NzAsNDk0NzEsNDk0NzMsNDk0NzQsNDk0NzUsNDk0NzYsNDk0NzcsNDk0NzgsNDk0NzksNDk0ODIsNDk0ODYsNDk0ODcsNDk0ODgsNDk0ODksNDk0OTAsNDk0OTEsNDk0OTQsNDk0OTUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsNDk0OTcsNDk0OTgsNDk0OTksNDk1MDEsNDk1MDIsNDk1MDMsNDk1MDQsNDk1MDUsNDk1MDYsNDk1MDcsNDk1MTAsNDk1MTQsNDk1MTUsNDk1MTYsNDk1MTcsNDk1MTgsNDk1MTksNDk1MjEsNDk1MjIsNDk1MjMsNDk1MjUsNDk1MjYsNDk1MjcsNDk1MjksNDk1MzAsNDk1MzEsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDk1MzIsNDk1MzMsNDk1MzQsNDk1MzUsNDk1MzYsNDk1MzcsNDk1MzgsNDk1MzksNDk1NDAsNDk1NDIsNDk1NDMsNDk1NDQsNDk1NDUsNDk1NDYsNDk1NDcsNDk1NTEsNDk1NTMsNDk1NTQsNDk1NTUsNDk1NTcsNDk1NTksNDk1NjAsNDk1NjEsNDk1''@;'; put 'put ''NjIsNDk1NjMsNDk1NjYsNDk1NjgsNDk1NzAsNDk1NzEsNDk1NzIsNDk1NzQsNDk1NzUsNDk1NzgsNDk1NzksNDk1ODEsNDk1ODIsNDk1ODMsNDk1ODUsNDk1ODYsNDk1ODcsNDk1ODgsNDk1ODksNDk1OTAsNDk1OTEsNDk1OTIsNDk1OTMsNDk1OTQsNDk1OTUsNDk1OTYsNDk1OTgsNDk1OTks''@;'; put 'put ''NDk2MDAsNDk2MDEsNDk2MDIsNDk2MDMsNDk2MDUsNDk2MDYsNDk2MDcsNDk2MDksNDk2MTAsNDk2MTEsNDk2MTMsNDk2MTQsNDk2MTUsNDk2MTYsNDk2MTcsNDk2MTgsNDk2MTksNDk2MjEsNDk2MjIsNDk2MjUsNDk2MjYsNDk2MjcsNDk2MjgsNDk2MjksNDk2MzAsNDk2MzEsNDk2MzMsNDk2''@;'; put 'put ''MzQsNDk2MzUsNDk2MzcsNDk2MzgsNDk2MzksNDk2NDEsNDk2NDIsNDk2NDMsNDk2NDQsNDk2NDUsNDk2NDYsNDk2NDcsNDk2NTAsNDk2NTIsNDk2NTMsNDk2NTQsNDk2NTUsNDk2NTYsNDk2NTcsNDk2NTgsNDk2NTksNDk2NjIsNDk2NjMsNDk2NjUsNDk2NjYsNDk2NjcsNDk2NjksNDk2NzAs''@;'; put 'put ''NDk2NzEsNDk2NzIsNDk2NzMsNDk2NzQsNDk2NzUsNDk2NzgsNDk2ODAsNDk2ODIsNDk2ODMsNDk2ODQsNDk2ODUsNDk2ODYsNDk2ODcsNDk2OTAsNDk2OTEsNDk2OTMsNDk2OTQsNDk2OTcsNDk2OTgsNDk2OTksNDk3MDAsNDk3MDEsNDk3MDIsNDk3MDMsNDk3MDYsNDk3MDgsNDk3MTAsNDk3''@;'; put 'put ''MTIsNDk3MTUsNDk3MTcsNDk3MTgsNDk3MTksNDk3MjAsNDk3MjEsNDk3MjIsNDk3MjMsNDk3MjQsNDk3MjUsNDk3MjYsNDk3MjcsNDk3MjgsNDk3MjksNDk3MzAsNDk3MzEsNDk3MzIsNDk3MzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDk3MzQsNDk3MzUsNDk3MzcsNDk3Mzgs''@;'; put 'put ''NDk3MzksNDk3NDAsNDk3NDEsNDk3NDIsNDk3NDMsNDk3NDYsNDk3NDcsNDk3NDksNDk3NTAsNDk3NTEsNDk3NTMsNDk3NTQsNDk3NTUsNDk3NTYsNDk3NTcsNDk3NTgsNDk3NTksNDk3NjEsNDk3NjIsNDk3NjMsNDk3NjQsNDk3NjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDk3''@;'; put 'put ''NjcsNDk3NjgsNDk3NjksNDk3NzAsNDk3NzEsNDk3NzQsNDk3NzUsNDk3NzcsNDk3NzgsNDk3NzksNDk3ODEsNDk3ODIsNDk3ODMsNDk3ODQsNDk3ODUsNDk3ODYsNDk3ODcsNDk3OTAsNDk3OTIsNDk3OTQsNDk3OTUsNDk3OTYsNDk3OTcsNDk3OTgsNDk3OTksNDk4MDIsNDk4MDMsNDk4MDQs''@;'; put 'put ''NDk4MDUsNDk4MDYsNDk4MDcsNDk4MDksNDk4MTAsNDk4MTEsNDk4MTIsNDk4MTMsNDk4MTQsNDk4MTUsNDk4MTcsNDk4MTgsNDk4MjAsNDk4MjIsNDk4MjMsNDk4MjQsNDk4MjUsNDk4MjYsNDk4MjcsNDk4MzAsNDk4MzEsNDk4MzMsNDk4MzQsNDk4MzUsNDk4MzgsNDk4MzksNDk4NDAsNDk4''@;'; put 'put ''NDEsNDk4NDIsNDk4NDMsNDk4NDYsNDk4NDgsNDk4NTAsNDk4NTEsNDk4NTIsNDk4NTMsNDk4NTQsNDk4NTUsNDk4NTYsNDk4NTcsNDk4NTgsNDk4NTksNDk4NjAsNDk4NjEsNDk4NjIsNDk4NjMsNDk4NjQsNDk4NjUsNDk4NjYsNDk4NjcsNDk4NjgsNDk4NjksNDk4NzAsNDk4NzEsNDk4NzIs''@;'; put 'put ''NDk4NzMsNDk4NzQsNDk4NzUsNDk4NzYsNDk4NzcsNDk4NzgsNDk4NzksNDk4ODAsNDk4ODEsNDk4ODIsNDk4ODMsNDk4ODYsNDk4ODcsNDk4ODksNDk4OTAsNDk4OTMsNDk4OTQsNDk4OTUsNDk4OTYsNDk4OTcsNDk4OTgsNDk5MDIsNDk5MDQsNDk5MDYsNDk5MDcsNDk5MDgsNDk5MDksNDk5''@;'; put 'put ''MTEsNDk5MTQsNDk5MTcsNDk5MTgsNDk5MTksNDk5MjEsNDk5MjIsNDk5MjMsNDk5MjQsNDk5MjUsNDk5MjYsNDk5MjcsNDk5MzAsNDk5MzEsNDk5MzQsNDk5MzUsNDk5MzYsNDk5MzcsNDk5MzgsNDk5NDIsNDk5NDMsNDk5NDUsNDk5NDYsNDk5NDcsNDk5NDksNDk5NTAsNDk5NTEsNDk5NTIs''@;'; put 'put ''NDk5NTMsNDk5NTQsNDk5NTUsNDk5NTgsNDk5NTksNDk5NjIsNDk5NjMsNDk5NjQsNDk5NjUsNDk5NjYsNDk5NjcsNDk5NjgsNDk5NjksNDk5NzAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDk5NzEsNDk5NzIsNDk5NzMsNDk5NzQsNDk5NzUsNDk5NzYsNDk5NzcsNDk5NzgsNDk5''@;'; put 'put ''NzksNDk5ODAsNDk5ODEsNDk5ODIsNDk5ODMsNDk5ODQsNDk5ODUsNDk5ODYsNDk5ODcsNDk5ODgsNDk5OTAsNDk5OTEsNDk5OTIsNDk5OTMsNDk5OTQsNDk5OTUsNDk5OTYsNDk5OTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNDk5OTgsNDk5OTksNWU0LDUwMDAxLDUwMDAyLDUw''@;'; put 'put ''MDAzLDUwMDA0LDUwMDA1LDUwMDA2LDUwMDA3LDUwMDA4LDUwMDA5LDUwMDEwLDUwMDExLDUwMDEyLDUwMDEzLDUwMDE0LDUwMDE1LDUwMDE2LDUwMDE3LDUwMDE4LDUwMDE5LDUwMDIwLDUwMDIxLDUwMDIyLDUwMDIzLDUwMDI2LDUwMDI3LDUwMDI5LDUwMDMwLDUwMDMxLDUwMDMzLDUwMDM1''@;'; put 'put ''LDUwMDM2LDUwMDM3LDUwMDM4LDUwMDM5LDUwMDQyLDUwMDQzLDUwMDQ2LDUwMDQ3LDUwMDQ4LDUwMDQ5LDUwMDUwLDUwMDUxLDUwMDUzLDUwMDU0LDUwMDU1LDUwMDU3LDUwMDU4LDUwMDU5LDUwMDYxLDUwMDYyLDUwMDYzLDUwMDY0LDUwMDY1LDUwMDY2LDUwMDY3LDUwMDY4LDUwMDY5LDUw''@;'; put 'put ''MDcwLDUwMDcxLDUwMDcyLDUwMDczLDUwMDc0LDUwMDc1LDUwMDc2LDUwMDc3LDUwMDc4LDUwMDc5LDUwMDgwLDUwMDgxLDUwMDgyLDUwMDgzLDUwMDg0LDUwMDg1LDUwMDg2LDUwMDg3LDUwMDg4LDUwMDg5LDUwMDkwLDUwMDkxLDUwMDkyLDUwMDkzLDUwMDk0LDUwMDk1LDUwMDk2LDUwMDk3''@;'; put 'put ''LDUwMDk4LDUwMDk5LDUwMTAwLDUwMTAxLDUwMTAyLDUwMTAzLDUwMTA0LDUwMTA1LDUwMTA2LDUwMTA3LDUwMTA4LDUwMTA5LDUwMTEwLDUwMTExLDUwMTEzLDUwMTE0LDUwMTE1LDUwMTE2LDUwMTE3LDUwMTE4LDUwMTE5LDUwMTIwLDUwMTIxLDUwMTIyLDUwMTIzLDUwMTI0LDUwMTI1LDUw''@;'; put 'put ''MTI2LDUwMTI3LDUwMTI4LDUwMTI5LDUwMTMwLDUwMTMxLDUwMTMyLDUwMTMzLDUwMTM0LDUwMTM1LDUwMTM4LDUwMTM5LDUwMTQxLDUwMTQyLDUwMTQ1LDUwMTQ3LDUwMTQ4LDUwMTQ5LDUwMTUwLDUwMTUxLDUwMTU0LDUwMTU1LDUwMTU2LDUwMTU4LDUwMTU5LDUwMTYwLDUwMTYxLDUwMTYy''@;'; put 'put ''LDUwMTYzLDUwMTY2LDUwMTY3LDUwMTY5LDUwMTcwLDUwMTcxLDUwMTcyLDUwMTczLDUwMTc0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwMTc1LDUwMTc2LDUwMTc3LDUwMTc4LDUwMTc5LDUwMTgwLDUwMTgxLDUwMTgyLDUwMTgzLDUwMTg1LDUwMTg2LDUwMTg3LDUwMTg4LDUw''@;'; put 'put ''MTg5LDUwMTkwLDUwMTkxLDUwMTkzLDUwMTk0LDUwMTk1LDUwMTk2LDUwMTk3LDUwMTk4LDUwMTk5LDUwMjAwLDUwMjAxLDUwMjAyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwMjAzLDUwMjA0LDUwMjA1LDUwMjA2LDUwMjA3LDUwMjA4LDUwMjA5LDUwMjEwLDUwMjExLDUwMjEz''@;'; put 'put ''LDUwMjE0LDUwMjE1LDUwMjE2LDUwMjE3LDUwMjE4LDUwMjE5LDUwMjIxLDUwMjIyLDUwMjIzLDUwMjI1LDUwMjI2LDUwMjI3LDUwMjI5LDUwMjMwLDUwMjMxLDUwMjMyLDUwMjMzLDUwMjM0LDUwMjM1LDUwMjM4LDUwMjM5LDUwMjQwLDUwMjQxLDUwMjQyLDUwMjQzLDUwMjQ0LDUwMjQ1LDUw''@;'; put 'put ''MjQ2LDUwMjQ3LDUwMjQ5LDUwMjUwLDUwMjUxLDUwMjUyLDUwMjUzLDUwMjU0LDUwMjU1LDUwMjU2LDUwMjU3LDUwMjU4LDUwMjU5LDUwMjYwLDUwMjYxLDUwMjYyLDUwMjYzLDUwMjY0LDUwMjY1LDUwMjY2LDUwMjY3LDUwMjY4LDUwMjY5LDUwMjcwLDUwMjcxLDUwMjcyLDUwMjczLDUwMjc0''@;'; put 'put ''LDUwMjc1LDUwMjc4LDUwMjc5LDUwMjgxLDUwMjgyLDUwMjgzLDUwMjg1LDUwMjg2LDUwMjg3LDUwMjg4LDUwMjg5LDUwMjkwLDUwMjkxLDUwMjk0LDUwMjk1LDUwMjk2LDUwMjk4LDUwMjk5LDUwMzAwLDUwMzAxLDUwMzAyLDUwMzAzLDUwMzA1LDUwMzA2LDUwMzA3LDUwMzA4LDUwMzA5LDUw''@;'; put 'put ''MzEwLDUwMzExLDUwMzEyLDUwMzEzLDUwMzE0LDUwMzE1LDUwMzE2LDUwMzE3LDUwMzE4LDUwMzE5LDUwMzIwLDUwMzIxLDUwMzIyLDUwMzIzLDUwMzI1LDUwMzI2LDUwMzI3LDUwMzI4LDUwMzI5LDUwMzMwLDUwMzMxLDUwMzMzLDUwMzM0LDUwMzM1LDUwMzM2LDUwMzM3LDUwMzM4LDUwMzM5''@;'; put 'put ''LDUwMzQwLDUwMzQxLDUwMzQyLDUwMzQzLDUwMzQ0LDUwMzQ1LDUwMzQ2LDUwMzQ3LDUwMzQ4LDUwMzQ5LDUwMzUwLDUwMzUxLDUwMzUyLDUwMzUzLDUwMzU0LDUwMzU1LDUwMzU2LDUwMzU3LDUwMzU4LDUwMzU5LDUwMzYxLDUwMzYyLDUwMzYzLDUwMzY1LDUwMzY2LDUwMzY3LDUwMzY4LDUw''@;'; put 'put ''MzY5LDUwMzcwLDUwMzcxLDUwMzcyLDUwMzczLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwMzc0LDUwMzc1LDUwMzc2LDUwMzc3LDUwMzc4LDUwMzc5LDUwMzgwLDUwMzgxLDUwMzgyLDUwMzgzLDUwMzg0LDUwMzg1LDUwMzg2LDUwMzg3LDUwMzg4LDUwMzg5LDUwMzkwLDUwMzkx''@;'; put 'put ''LDUwMzkyLDUwMzkzLDUwMzk0LDUwMzk1LDUwMzk2LDUwMzk3LDUwMzk4LDUwMzk5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwNDAwLDUwNDAxLDUwNDAyLDUwNDAzLDUwNDA0LDUwNDA1LDUwNDA2LDUwNDA3LDUwNDA4LDUwNDEwLDUwNDExLDUwNDEyLDUwNDEzLDUwNDE0LDUw''@;'; put 'put ''NDE1LDUwNDE4LDUwNDE5LDUwNDIxLDUwNDIyLDUwNDIzLDUwNDI1LDUwNDI3LDUwNDI4LDUwNDI5LDUwNDMwLDUwNDM0LDUwNDM1LDUwNDM2LDUwNDM3LDUwNDM4LDUwNDM5LDUwNDQwLDUwNDQxLDUwNDQyLDUwNDQzLDUwNDQ1LDUwNDQ2LDUwNDQ3LDUwNDQ5LDUwNDUwLDUwNDUxLDUwNDUz''@;'; put 'put ''LDUwNDU0LDUwNDU1LDUwNDU2LDUwNDU3LDUwNDU4LDUwNDU5LDUwNDYxLDUwNDYyLDUwNDYzLDUwNDY0LDUwNDY1LDUwNDY2LDUwNDY3LDUwNDY4LDUwNDY5LDUwNDcwLDUwNDcxLDUwNDc0LDUwNDc1LDUwNDc3LDUwNDc4LDUwNDc5LDUwNDgxLDUwNDgyLDUwNDgzLDUwNDg0LDUwNDg1LDUw''@;'; put 'put ''NDg2LDUwNDg3LDUwNDkwLDUwNDkyLDUwNDk0LDUwNDk1LDUwNDk2LDUwNDk3LDUwNDk4LDUwNDk5LDUwNTAyLDUwNTAzLDUwNTA3LDUwNTExLDUwNTEyLDUwNTEzLDUwNTE0LDUwNTE4LDUwNTIyLDUwNTIzLDUwNTI0LDUwNTI3LDUwNTMwLDUwNTMxLDUwNTMzLDUwNTM0LDUwNTM1LDUwNTM3''@;'; put 'put ''LDUwNTM4LDUwNTM5LDUwNTQwLDUwNTQxLDUwNTQyLDUwNTQzLDUwNTQ2LDUwNTUwLDUwNTUxLDUwNTUyLDUwNTUzLDUwNTU0LDUwNTU1LDUwNTU4LDUwNTU5LDUwNTYxLDUwNTYyLDUwNTYzLDUwNTY1LDUwNTY2LDUwNTY4LDUwNTY5LDUwNTcwLDUwNTcxLDUwNTc0LDUwNTc2LDUwNTc4LDUw''@;'; put 'put ''NTc5LDUwNTgwLDUwNTgyLDUwNTg1LDUwNTg2LDUwNTg3LDUwNTg5LDUwNTkwLDUwNTkxLDUwNTkzLDUwNTk0LDUwNTk1LDUwNTk2LDUwNTk3LDUwNTk4LDUwNTk5LDUwNjAwLDUwNjAyLDUwNjAzLDUwNjA0LDUwNjA1LDUwNjA2LDUwNjA3LDUwNjA4LDUwNjA5LDUwNjEwLDUwNjExLDUwNjE0''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwNjE1LDUwNjE4LDUwNjIzLDUwNjI0LDUwNjI1LDUwNjI2LDUwNjI3LDUwNjM1LDUwNjM3LDUwNjM5LDUwNjQyLDUwNjQzLDUwNjQ1LDUwNjQ2LDUwNjQ3LDUwNjQ5LDUwNjUwLDUwNjUxLDUwNjUyLDUwNjUzLDUwNjU0LDUwNjU1LDUw''@;'; put 'put ''NjU4LDUwNjYwLDUwNjYyLDUwNjYzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwNjY0LDUwNjY1LDUwNjY2LDUwNjY3LDUwNjcxLDUwNjczLDUwNjc0LDUwNjc1LDUwNjc3LDUwNjgwLDUwNjgxLDUwNjgyLDUwNjgzLDUwNjkwLDUwNjkxLDUwNjkyLDUwNjk3LDUwNjk4LDUwNjk5''@;'; put 'put ''LDUwNzAxLDUwNzAyLDUwNzAzLDUwNzA1LDUwNzA2LDUwNzA3LDUwNzA4LDUwNzA5LDUwNzEwLDUwNzExLDUwNzE0LDUwNzE3LDUwNzE4LDUwNzE5LDUwNzIwLDUwNzIxLDUwNzIyLDUwNzIzLDUwNzI2LDUwNzI3LDUwNzI5LDUwNzMwLDUwNzMxLDUwNzM1LDUwNzM3LDUwNzM4LDUwNzQyLDUw''@;'; put 'put ''NzQ0LDUwNzQ2LDUwNzQ4LDUwNzQ5LDUwNzUwLDUwNzUxLDUwNzU0LDUwNzU1LDUwNzU3LDUwNzU4LDUwNzU5LDUwNzYxLDUwNzYyLDUwNzYzLDUwNzY0LDUwNzY1LDUwNzY2LDUwNzY3LDUwNzcwLDUwNzc0LDUwNzc1LDUwNzc2LDUwNzc3LDUwNzc4LDUwNzc5LDUwNzgyLDUwNzgzLDUwNzg1''@;'; put 'put ''LDUwNzg2LDUwNzg3LDUwNzg4LDUwNzg5LDUwNzkwLDUwNzkxLDUwNzkyLDUwNzkzLDUwNzk0LDUwNzk1LDUwNzk3LDUwNzk4LDUwODAwLDUwODAyLDUwODAzLDUwODA0LDUwODA1LDUwODA2LDUwODA3LDUwODEwLDUwODExLDUwODEzLDUwODE0LDUwODE1LDUwODE3LDUwODE4LDUwODE5LDUw''@;'; put 'put ''ODIwLDUwODIxLDUwODIyLDUwODIzLDUwODI2LDUwODI4LDUwODMwLDUwODMxLDUwODMyLDUwODMzLDUwODM0LDUwODM1LDUwODM4LDUwODM5LDUwODQxLDUwODQyLDUwODQzLDUwODQ1LDUwODQ2LDUwODQ3LDUwODQ4LDUwODQ5LDUwODUwLDUwODUxLDUwODU0LDUwODU2LDUwODU4LDUwODU5''@;'; put 'put ''LDUwODYwLDUwODYxLDUwODYyLDUwODYzLDUwODY2LDUwODY3LDUwODY5LDUwODcwLDUwODcxLDUwODc1LDUwODc2LDUwODc3LDUwODc4LDUwODc5LDUwODgyLDUwODg0LDUwODg2LDUwODg3LDUwODg4LDUwODg5LDUwODkwLDUwODkxLDUwODk0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLDUwODk1LDUwODk3LDUwODk4LDUwODk5LDUwOTAxLDUwOTAyLDUwOTAzLDUwOTA0LDUwOTA1LDUwOTA2LDUwOTA3LDUwOTEwLDUwOTExLDUwOTE0LDUwOTE1LDUwOTE2LDUwOTE3LDUwOTE4LDUwOTE5LDUwOTIyLDUwOTIzLDUwOTI1LDUwOTI2LDUwOTI3LDUwOTI5LDUwOTMwLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUwOTMxLDUwOTMyLDUwOTMzLDUwOTM0LDUwOTM1LDUwOTM4LDUwOTM5LDUwOTQwLDUwOTQyLDUwOTQzLDUwOTQ0LDUwOTQ1LDUwOTQ2LDUwOTQ3LDUwOTUwLDUwOTUxLDUwOTUzLDUwOTU0LDUwOTU1LDUwOTU3LDUwOTU4LDUwOTU5LDUwOTYwLDUw''@;'; put 'put ''OTYxLDUwOTYyLDUwOTYzLDUwOTY2LDUwOTY4LDUwOTcwLDUwOTcxLDUwOTcyLDUwOTczLDUwOTc0LDUwOTc1LDUwOTc4LDUwOTc5LDUwOTgxLDUwOTgyLDUwOTgzLDUwOTg1LDUwOTg2LDUwOTg3LDUwOTg4LDUwOTg5LDUwOTkwLDUwOTkxLDUwOTk0LDUwOTk2LDUwOTk4LDUxZTMsNTEwMDEs''@;'; put 'put ''NTEwMDIsNTEwMDMsNTEwMDYsNTEwMDcsNTEwMDksNTEwMTAsNTEwMTEsNTEwMTMsNTEwMTQsNTEwMTUsNTEwMTYsNTEwMTcsNTEwMTksNTEwMjIsNTEwMjQsNTEwMzMsNTEwMzQsNTEwMzUsNTEwMzcsNTEwMzgsNTEwMzksNTEwNDEsNTEwNDIsNTEwNDMsNTEwNDQsNTEwNDUsNTEwNDYsNTEw''@;'; put 'put ''NDcsNTEwNDksNTEwNTAsNTEwNTIsNTEwNTMsNTEwNTQsNTEwNTUsNTEwNTYsNTEwNTcsNTEwNTgsNTEwNTksNTEwNjIsNTEwNjMsNTEwNjUsNTEwNjYsNTEwNjcsNTEwNzEsNTEwNzIsNTEwNzMsNTEwNzQsNTEwNzgsNTEwODMsNTEwODQsNTEwODUsNTEwODcsNTEwOTAsNTEwOTEsNTEwOTMs''@;'; put 'put ''NTEwOTcsNTEwOTksNTExMDAsNTExMDEsNTExMDIsNTExMDMsNTExMDYsNTExMTEsNTExMTIsNTExMTMsNTExMTQsNTExMTUsNTExMTgsNTExMTksNTExMjEsNTExMjIsNTExMjMsNTExMjUsNTExMjYsNTExMjcsNTExMjgsNTExMjksNTExMzAsNTExMzEsNTExMzQsNTExMzgsNTExMzksNTEx''@;'; put 'put ''NDAsNTExNDEsNTExNDIsNTExNDMsNTExNDYsNTExNDcsNTExNDksNTExNTEsNTExNTMsNTExNTQsNTExNTUsNTExNTYsNTExNTcsNTExNTgsNTExNTksNTExNjEsNTExNjIsNTExNjMsNTExNjQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTExNjYsNTExNjcsNTExNjgsNTExNjks''@;'; put 'put ''NTExNzAsNTExNzEsNTExNzMsNTExNzQsNTExNzUsNTExNzcsNTExNzgsNTExNzksNTExODEsNTExODIsNTExODMsNTExODQsNTExODUsNTExODYsNTExODcsNTExODgsNTExODksNTExOTAsNTExOTEsNTExOTIsNTExOTMsNTExOTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTEx''@;'; put 'put ''OTUsNTExOTYsNTExOTcsNTExOTgsNTExOTksNTEyMDIsNTEyMDMsNTEyMDUsNTEyMDYsNTEyMDcsNTEyMDksNTEyMTEsNTEyMTIsNTEyMTMsNTEyMTQsNTEyMTUsNTEyMTgsNTEyMjAsNTEyMjMsNTEyMjQsNTEyMjUsNTEyMjYsNTEyMjcsNTEyMzAsNTEyMzEsNTEyMzMsNTEyMzQsNTEyMzUs''@;'; put 'put ''NTEyMzcsNTEyMzgsNTEyMzksNTEyNDAsNTEyNDEsNTEyNDIsNTEyNDMsNTEyNDYsNTEyNDgsNTEyNTAsNTEyNTEsNTEyNTIsNTEyNTMsNTEyNTQsNTEyNTUsNTEyNTcsNTEyNTgsNTEyNTksNTEyNjEsNTEyNjIsNTEyNjMsNTEyNjUsNTEyNjYsNTEyNjcsNTEyNjgsNTEyNjksNTEyNzAsNTEy''@;'; put 'put ''NzEsNTEyNzQsNTEyNzUsNTEyNzgsNTEyNzksNTEyODAsNTEyODEsNTEyODIsNTEyODMsNTEyODUsNTEyODYsNTEyODcsNTEyODgsNTEyODksNTEyOTAsNTEyOTEsNTEyOTIsNTEyOTMsNTEyOTQsNTEyOTUsNTEyOTYsNTEyOTcsNTEyOTgsNTEyOTksNTEzMDAsNTEzMDEsNTEzMDIsNTEzMDMs''@;'; put 'put ''NTEzMDQsNTEzMDUsNTEzMDYsNTEzMDcsNTEzMDgsNTEzMDksNTEzMTAsNTEzMTEsNTEzMTQsNTEzMTUsNTEzMTcsNTEzMTgsNTEzMTksNTEzMjEsNTEzMjMsNTEzMjQsNTEzMjUsNTEzMjYsNTEzMjcsNTEzMzAsNTEzMzIsNTEzMzYsNTEzMzcsNTEzMzgsNTEzNDIsNTEzNDMsNTEzNDQsNTEz''@;'; put 'put ''NDUsNTEzNDYsNTEzNDcsNTEzNDksNTEzNTAsNTEzNTEsNTEzNTIsNTEzNTMsNTEzNTQsNTEzNTUsNTEzNTYsNTEzNTgsNTEzNjAsNTEzNjIsNTEzNjMsNTEzNjQsNTEzNjUsNTEzNjYsNTEzNjcsNTEzNjksNTEzNzAsNTEzNzEsNTEzNzIsNTEzNzMsNTEzNzQsNTEzNzUsNTEzNzYsNTEzNzcs''@;'; put 'put ''NTEzNzgsNTEzNzksNTEzODAsNTEzODEsNTEzODIsNTEzODMsNTEzODQsNTEzODUsNTEzODYsNTEzODcsNTEzOTAsNTEzOTEsNTEzOTIsNTEzOTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTEzOTQsNTEzOTUsNTEzOTcsNTEzOTgsNTEzOTksNTE0MDEsNTE0MDIsNTE0MDMsNTE0''@;'; put 'put ''MDUsNTE0MDYsNTE0MDcsNTE0MDgsNTE0MDksNTE0MTAsNTE0MTEsNTE0MTQsNTE0MTYsNTE0MTgsNTE0MTksNTE0MjAsNTE0MjEsNTE0MjIsNTE0MjMsNTE0MjYsNTE0MjcsNTE0MjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE0MzAsNTE0MzEsNTE0MzIsNTE0MzMsNTE0MzQs''@;'; put 'put ''NTE0MzUsNTE0MzYsNTE0MzcsNTE0MzgsNTE0MzksNTE0NDAsNTE0NDEsNTE0NDIsNTE0NDMsNTE0NDQsNTE0NDYsNTE0NDcsNTE0NDgsNTE0NDksNTE0NTAsNTE0NTEsNTE0NTQsNTE0NTUsNTE0NTcsNTE0NTgsNTE0NTksNTE0NjMsNTE0NjQsNTE0NjUsNTE0NjYsNTE0NjcsNTE0NzAsMTIy''@;'; put 'put ''ODgsMTIyODksMTIyOTAsMTgzLDgyMjksODIzMCwxNjgsMTIyOTEsMTczLDgyMTMsODc0MSw2NTM0MCw4NzY0LDgyMTYsODIxNyw4MjIwLDgyMjEsMTIzMDgsMTIzMDksMTIyOTYsMTIyOTcsMTIyOTgsMTIyOTksMTIzMDAsMTIzMDEsMTIzMDIsMTIzMDMsMTIzMDQsMTIzMDUsMTc3LDIxNSwy''@;'; put 'put ''NDcsODgwMCw4ODA0LDg4MDUsODczNCw4NzU2LDE3Niw4MjQyLDgyNDMsODQ1MSw4NDkxLDY1NTA0LDY1NTA1LDY1NTA5LDk3OTQsOTc5Miw4NzM2LDg4NjksODk3OCw4NzA2LDg3MTEsODgwMSw4Nzg2LDE2Nyw4MjUxLDk3MzQsOTczMyw5Njc1LDk2NzksOTY3OCw5NjcxLDk2NzAsOTYzMyw5''@;'; put 'put ''NjMyLDk2NTEsOTY1MCw5NjYxLDk2NjAsODU5NCw4NTkyLDg1OTMsODU5NSw4NTk2LDEyMzA3LDg4MTAsODgxMSw4NzMwLDg3NjUsODczMyw4NzU3LDg3NDcsODc0OCw4NzEyLDg3MTUsODgzOCw4ODM5LDg4MzQsODgzNSw4NzQ2LDg3NDUsODc0Myw4NzQ0LDY1NTA2LDUxNDcyLDUxNDc0LDUx''@;'; put 'put ''NDc1LDUxNDc2LDUxNDc3LDUxNDc4LDUxNDc5LDUxNDgxLDUxNDgyLDUxNDgzLDUxNDg0LDUxNDg1LDUxNDg2LDUxNDg3LDUxNDg4LDUxNDg5LDUxNDkwLDUxNDkxLDUxNDkyLDUxNDkzLDUxNDk0LDUxNDk1LDUxNDk2LDUxNDk3LDUxNDk4LDUxNDk5LG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLDUxNTAxLDUxNTAyLDUxNTAzLDUxNTA0LDUxNTA1LDUxNTA2LDUxNTA3LDUxNTA5LDUxNTEwLDUxNTExLDUxNTEyLDUxNTEzLDUxNTE0LDUxNTE1LDUxNTE2LDUxNTE3LDUxNTE4LDUxNTE5LDUxNTIwLDUxNTIxLDUxNTIyLDUxNTIzLDUxNTI0LDUxNTI1LDUxNTI2LDUxNTI3LG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxNTI4LDUxNTI5LDUxNTMwLDUxNTMxLDUxNTMyLDUxNTMzLDUxNTM0LDUxNTM1LDUxNTM4LDUxNTM5LDUxNTQxLDUxNTQyLDUxNTQzLDUxNTQ1LDUxNTQ2LDUxNTQ3LDUxNTQ4LDUxNTQ5LDUxNTUwLDUxNTUxLDUxNTU0LDUxNTU2LDUxNTU3''@;'; put 'put ''LDUxNTU4LDUxNTU5LDUxNTYwLDUxNTYxLDUxNTYyLDUxNTYzLDUxNTY1LDUxNTY2LDUxNTY3LDg2NTgsODY2MCw4NzA0LDg3MDcsMTgwLDY1Mzc0LDcxMSw3MjgsNzMzLDczMCw3MjksMTg0LDczMSwxNjEsMTkxLDcyMCw4NzUwLDg3MjEsODcxOSwxNjQsODQ1Nyw4MjQwLDk2NjUsOTY2NCw5''@;'; put 'put ''NjU1LDk2NTQsOTgyOCw5ODI0LDk4MjUsOTgyOSw5ODMxLDk4MjcsODg1Nyw5NjcyLDk2MzUsOTY4MCw5NjgxLDk2MTgsOTYzNiw5NjM3LDk2NDAsOTYzOSw5NjM4LDk2NDEsOTgzMiw5NzQzLDk3NDIsOTc1Niw5NzU4LDE4Miw4MjI0LDgyMjUsODU5Nyw4NTk5LDg2MDEsODU5OCw4NjAwLDk4''@;'; put 'put ''MzcsOTgzMyw5ODM0LDk4MzYsMTI5MjcsMTI4MjgsODQ3MCwxMzI1NSw4NDgyLDEzMjUwLDEzMjcyLDg0ODEsODM2NCwxNzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLDUxNTY5LDUxNTcwLDUxNTcxLDUxNTczLDUxNTc0LDUxNTc1LDUxNTc2LDUxNTc3LDUxNTc4LDUxNTc5LDUxNTgxLDUxNTgyLDUxNTgzLDUxNTg0LDUxNTg1LDUxNTg2LDUxNTg3LDUxNTg4LDUxNTg5LDUxNTkwLDUxNTkxLDUxNTk0LDUxNTk1LDUxNTk3''@;'; put 'put ''LDUxNTk4LDUxNTk5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxNjAxLDUxNjAyLDUxNjAzLDUxNjA0LDUxNjA1LDUxNjA2LDUxNjA3LDUxNjEwLDUxNjEyLDUxNjE0LDUxNjE1LDUxNjE2LDUxNjE3LDUxNjE4LDUxNjE5LDUxNjIwLDUxNjIxLDUxNjIyLDUxNjIzLDUxNjI0LDUx''@;'; put 'put ''NjI1LDUxNjI2LDUxNjI3LDUxNjI4LDUxNjI5LDUxNjMwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxNjMxLDUxNjMyLDUxNjMzLDUxNjM0LDUxNjM1LDUxNjM2LDUxNjM3LDUxNjM4LDUxNjM5LDUxNjQwLDUxNjQxLDUxNjQyLDUxNjQzLDUxNjQ0LDUxNjQ1LDUxNjQ2LDUxNjQ3''@;'; put 'put ''LDUxNjUwLDUxNjUxLDUxNjUzLDUxNjU0LDUxNjU3LDUxNjU5LDUxNjYwLDUxNjYxLDUxNjYyLDUxNjYzLDUxNjY2LDUxNjY4LDUxNjcxLDUxNjcyLDUxNjc1LDY1MjgxLDY1MjgyLDY1MjgzLDY1Mjg0LDY1Mjg1LDY1Mjg2LDY1Mjg3LDY1Mjg4LDY1Mjg5LDY1MjkwLDY1MjkxLDY1MjkyLDY1''@;'; put 'put ''MjkzLDY1Mjk0LDY1Mjk1LDY1Mjk2LDY1Mjk3LDY1Mjk4LDY1Mjk5LDY1MzAwLDY1MzAxLDY1MzAyLDY1MzAzLDY1MzA0LDY1MzA1LDY1MzA2LDY1MzA3LDY1MzA4LDY1MzA5LDY1MzEwLDY1MzExLDY1MzEyLDY1MzEzLDY1MzE0LDY1MzE1LDY1MzE2LDY1MzE3LDY1MzE4LDY1MzE5LDY1MzIw''@;'; put 'put ''LDY1MzIxLDY1MzIyLDY1MzIzLDY1MzI0LDY1MzI1LDY1MzI2LDY1MzI3LDY1MzI4LDY1MzI5LDY1MzMwLDY1MzMxLDY1MzMyLDY1MzMzLDY1MzM0LDY1MzM1LDY1MzM2LDY1MzM3LDY1MzM4LDY1MzM5LDY1NTEwLDY1MzQxLDY1MzQyLDY1MzQzLDY1MzQ0LDY1MzQ1LDY1MzQ2LDY1MzQ3LDY1''@;'; put 'put ''MzQ4LDY1MzQ5LDY1MzUwLDY1MzUxLDY1MzUyLDY1MzUzLDY1MzU0LDY1MzU1LDY1MzU2LDY1MzU3LDY1MzU4LDY1MzU5LDY1MzYwLDY1MzYxLDY1MzYyLDY1MzYzLDY1MzY0LDY1MzY1LDY1MzY2LDY1MzY3LDY1MzY4LDY1MzY5LDY1MzcwLDY1MzcxLDY1MzcyLDY1MzczLDY1NTA3LDUxNjc4''@;'; put 'put ''LDUxNjc5LDUxNjgxLDUxNjgzLDUxNjg1LDUxNjg2LDUxNjg4LDUxNjg5LDUxNjkwLDUxNjkxLDUxNjk0LDUxNjk4LDUxNjk5LDUxNzAwLDUxNzAxLDUxNzAyLDUxNzAzLDUxNzA2LDUxNzA3LDUxNzA5LDUxNzEwLDUxNzExLDUxNzEzLDUxNzE0LDUxNzE1LDUxNzE2LG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLDUxNzE3LDUxNzE4LDUxNzE5LDUxNzIyLDUxNzI2LDUxNzI3LDUxNzI4LDUxNzI5LDUxNzMwLDUxNzMxLDUxNzMzLDUxNzM0LDUxNzM1LDUxNzM3LDUxNzM4LDUxNzM5LDUxNzQwLDUxNzQxLDUxNzQyLDUxNzQzLDUxNzQ0LDUxNzQ1LDUxNzQ2LDUxNzQ3LDUxNzQ4''@;'; put 'put ''LDUxNzQ5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxNzUwLDUxNzUxLDUxNzUyLDUxNzU0LDUxNzU1LDUxNzU2LDUxNzU3LDUxNzU4LDUxNzU5LDUxNzYwLDUxNzYxLDUxNzYyLDUxNzYzLDUxNzY0LDUxNzY1LDUxNzY2LDUxNzY3LDUxNzY4LDUxNzY5LDUxNzcwLDUxNzcxLDUx''@;'; put 'put ''NzcyLDUxNzczLDUxNzc0LDUxNzc1LDUxNzc2LDUxNzc3LDUxNzc4LDUxNzc5LDUxNzgwLDUxNzgxLDUxNzgyLDEyNTkzLDEyNTk0LDEyNTk1LDEyNTk2LDEyNTk3LDEyNTk4LDEyNTk5LDEyNjAwLDEyNjAxLDEyNjAyLDEyNjAzLDEyNjA0LDEyNjA1LDEyNjA2LDEyNjA3LDEyNjA4LDEyNjA5''@;'; put 'put ''LDEyNjEwLDEyNjExLDEyNjEyLDEyNjEzLDEyNjE0LDEyNjE1LDEyNjE2LDEyNjE3LDEyNjE4LDEyNjE5LDEyNjIwLDEyNjIxLDEyNjIyLDEyNjIzLDEyNjI0LDEyNjI1LDEyNjI2LDEyNjI3LDEyNjI4LDEyNjI5LDEyNjMwLDEyNjMxLDEyNjMyLDEyNjMzLDEyNjM0LDEyNjM1LDEyNjM2LDEy''@;'; put 'put ''NjM3LDEyNjM4LDEyNjM5LDEyNjQwLDEyNjQxLDEyNjQyLDEyNjQzLDEyNjQ0LDEyNjQ1LDEyNjQ2LDEyNjQ3LDEyNjQ4LDEyNjQ5LDEyNjUwLDEyNjUxLDEyNjUyLDEyNjUzLDEyNjU0LDEyNjU1LDEyNjU2LDEyNjU3LDEyNjU4LDEyNjU5LDEyNjYwLDEyNjYxLDEyNjYyLDEyNjYzLDEyNjY0''@;'; put 'put ''LDEyNjY1LDEyNjY2LDEyNjY3LDEyNjY4LDEyNjY5LDEyNjcwLDEyNjcxLDEyNjcyLDEyNjczLDEyNjc0LDEyNjc1LDEyNjc2LDEyNjc3LDEyNjc4LDEyNjc5LDEyNjgwLDEyNjgxLDEyNjgyLDEyNjgzLDEyNjg0LDEyNjg1LDEyNjg2LDUxNzgzLDUxNzg0LDUxNzg1LDUxNzg2LDUxNzg3LDUx''@;'; put 'put ''NzkwLDUxNzkxLDUxNzkzLDUxNzk0LDUxNzk1LDUxNzk3LDUxNzk4LDUxNzk5LDUxODAwLDUxODAxLDUxODAyLDUxODAzLDUxODA2LDUxODEwLDUxODExLDUxODEyLDUxODEzLDUxODE0LDUxODE1LDUxODE3LDUxODE4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUxODE5LDUxODIw''@;'; put 'put ''LDUxODIxLDUxODIyLDUxODIzLDUxODI0LDUxODI1LDUxODI2LDUxODI3LDUxODI4LDUxODI5LDUxODMwLDUxODMxLDUxODMyLDUxODMzLDUxODM0LDUxODM1LDUxODM2LDUxODM4LDUxODM5LDUxODQwLDUxODQxLDUxODQyLDUxODQzLDUxODQ1LDUxODQ2LG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLDUxODQ3LDUxODQ4LDUxODQ5LDUxODUwLDUxODUxLDUxODUyLDUxODUzLDUxODU0LDUxODU1LDUxODU2LDUxODU3LDUxODU4LDUxODU5LDUxODYwLDUxODYxLDUxODYyLDUxODYzLDUxODY1LDUxODY2LDUxODY3LDUxODY4LDUxODY5LDUxODcwLDUxODcxLDUxODcyLDUxODcz''@;'; put 'put ''LDUxODc0LDUxODc1LDUxODc2LDUxODc3LDUxODc4LDUxODc5LDg1NjAsODU2MSw4NTYyLDg1NjMsODU2NCw4NTY1LDg1NjYsODU2Nyw4NTY4LDg1NjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDg1NDQsODU0NSw4NTQ2LDg1NDcsODU0OCw4NTQ5LDg1NTAsODU1MSw4NTUyLDg1NTMsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE4ODAsNTE4ODEsNTE4ODIsNTE4ODMsNTE4ODQsNTE4ODUs''@;'; put 'put ''NTE4ODYsNTE4ODcsNTE4ODgsNTE4ODksNTE4OTAsNTE4OTEsNTE4OTIsNTE4OTMsNTE4OTQsNTE4OTUsNTE4OTYsNTE4OTcsNTE4OTgsNTE4OTksNTE5MDIsNTE5MDMsNTE5MDUsNTE5MDYsNTE5MDcsNTE5MDksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTE5MTAsNTE5MTEsNTE5''@;'; put 'put ''MTIsNTE5MTMsNTE5MTQsNTE5MTUsNTE5MTgsNTE5MjAsNTE5MjIsNTE5MjQsNTE5MjUsNTE5MjYsNTE5MjcsNTE5MzAsNTE5MzEsNTE5MzIsNTE5MzMsNTE5MzQsNTE5MzUsNTE5MzcsNTE5MzgsNTE5MzksNTE5NDAsNTE5NDEsNTE5NDIsNTE5NDMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsNTE5NDQsNTE5NDUsNTE5NDYsNTE5NDcsNTE5NDksNTE5NTAsNTE5NTEsNTE5NTIsNTE5NTMsNTE5NTQsNTE5NTUsNTE5NTcsNTE5NTgsNTE5NTksNTE5NjAsNTE5NjEsNTE5NjIsNTE5NjMsNTE5NjQsNTE5NjUsNTE5NjYsNTE5NjcsNTE5NjgsNTE5NjksNTE5NzAsNTE5NzEsNTE5''@;'; put 'put ''NzIsNTE5NzMsNTE5NzQsNTE5NzUsNTE5NzcsNTE5NzgsOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDk2LDk0OTIsOTUwMCw5NTE2LDk1MDgsOTUyNCw5NTMyLDk0NzMsOTQ3NSw5NDg3LDk0OTEsOTQ5OSw5NDk1LDk1MDcsOTUyMyw5NTE1LDk1MzEsOTU0Nyw5NTA0LDk1MTksOTUxMiw5NTI3LDk1''@;'; put 'put ''MzUsOTUwMSw5NTIwLDk1MDksOTUyOCw5NTM4LDk0OTAsOTQ4OSw5NDk4LDk0OTcsOTQ5NCw5NDkzLDk0ODYsOTQ4NSw5NTAyLDk1MDMsOTUwNSw5NTA2LDk1MTAsOTUxMSw5NTEzLDk1MTQsOTUxNyw5NTE4LDk1MjEsOTUyMiw5NTI1LDk1MjYsOTUyOSw5NTMwLDk1MzMsOTUzNCw5NTM2LDk1''@;'; put 'put ''MzcsOTUzOSw5NTQwLDk1NDEsOTU0Miw5NTQzLDk1NDQsOTU0NSw5NTQ2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCw1MTk3OSw1MTk4MCw1MTk4MSw1MTk4Miw1MTk4Myw1MTk4NSw1MTk4Niw1MTk4Nyw1MTk4OSw1MTk5MCw1MTk5MSw1MTk5Myw1MTk5NCw1MTk5NSw1MTk5Niw1MTk5Nyw1MTk5OCw1MTk5OSw1MjAwMiw1MjAwMyw1MjAwNCw1MjAwNSw1MjAwNiw1MjAwNyw1MjAwOCw1MjAwOSxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjAxMCw1MjAxMSw1MjAxMiw1MjAxMyw1MjAxNCw1MjAxNSw1MjAxNiw1MjAxNyw1MjAxOCw1MjAxOSw1MjAyMCw1MjAyMSw1MjAyMiw1MjAyMyw1MjAyNCw1MjAyNSw1MjAyNiw1MjAyNyw1MjAyOCw1MjAyOSw1MjAzMCw1MjAzMSw1MjAz''@;'; put 'put ''Miw1MjAzNCw1MjAzNSw1MjAzNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjAzNyw1MjAzOCw1MjAzOSw1MjA0Miw1MjA0Myw1MjA0NSw1MjA0Niw1MjA0Nyw1MjA0OSw1MjA1MCw1MjA1MSw1MjA1Miw1MjA1Myw1MjA1NCw1MjA1NSw1MjA1OCw1MjA1OSw1MjA2MCw1MjA2Miw1''@;'; put 'put ''MjA2Myw1MjA2NCw1MjA2NSw1MjA2Niw1MjA2Nyw1MjA2OSw1MjA3MCw1MjA3MSw1MjA3Miw1MjA3Myw1MjA3NCw1MjA3NSw1MjA3NiwxMzIwNSwxMzIwNiwxMzIwNyw4NDY3LDEzMjA4LDEzMjUyLDEzMjE5LDEzMjIwLDEzMjIxLDEzMjIyLDEzMjA5LDEzMjEwLDEzMjExLDEzMjEyLDEzMjEz''@;'; put 'put ''LDEzMjE0LDEzMjE1LDEzMjE2LDEzMjE3LDEzMjE4LDEzMjU4LDEzMTk3LDEzMTk4LDEzMTk5LDEzMjYzLDEzMTkyLDEzMTkzLDEzMjU2LDEzMjIzLDEzMjI0LDEzMjMyLDEzMjMzLDEzMjM0LDEzMjM1LDEzMjM2LDEzMjM3LDEzMjM4LDEzMjM5LDEzMjQwLDEzMjQxLDEzMTg0LDEzMTg1LDEz''@;'; put 'put ''MTg2LDEzMTg3LDEzMTg4LDEzMjQyLDEzMjQzLDEzMjQ0LDEzMjQ1LDEzMjQ2LDEzMjQ3LDEzMjAwLDEzMjAxLDEzMjAyLDEzMjAzLDEzMjA0LDg0ODYsMTMyNDgsMTMyNDksMTMxOTQsMTMxOTUsMTMxOTYsMTMyNzAsMTMyNTMsMTMyMjksMTMyMzAsMTMyMzEsMTMyNzUsMTMyMjUsMTMyMjYs''@;'; put 'put ''MTMyMjcsMTMyMjgsMTMyNzcsMTMyNjQsMTMyNjcsMTMyNTEsMTMyNTcsMTMyNzYsMTMyNTQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIwNzcsNTIwNzgsNTIwNzksNTIwODAsNTIwODEsNTIwODIs''@;'; put 'put ''NTIwODMsNTIwODQsNTIwODUsNTIwODYsNTIwODcsNTIwOTAsNTIwOTEsNTIwOTIsNTIwOTMsNTIwOTQsNTIwOTUsNTIwOTYsNTIwOTcsNTIwOTgsNTIwOTksNTIxMDAsNTIxMDEsNTIxMDIsNTIxMDMsNTIxMDQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTIxMDUsNTIxMDYsNTIx''@;'; put 'put ''MDcsNTIxMDgsNTIxMDksNTIxMTAsNTIxMTEsNTIxMTIsNTIxMTMsNTIxMTQsNTIxMTUsNTIxMTYsNTIxMTcsNTIxMTgsNTIxMTksNTIxMjAsNTIxMjEsNTIxMjIsNTIxMjMsNTIxMjUsNTIxMjYsNTIxMjcsNTIxMjgsNTIxMjksNTIxMzAsNTIxMzEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsNTIxMzIsNTIxMzMsNTIxMzQsNTIxMzUsNTIxMzYsNTIxMzcsNTIxMzgsNTIxMzksNTIxNDAsNTIxNDEsNTIxNDIsNTIxNDMsNTIxNDQsNTIxNDUsNTIxNDYsNTIxNDcsNTIxNDgsNTIxNDksNTIxNTAsNTIxNTEsNTIxNTMsNTIxNTQsNTIxNTUsNTIxNTYsNTIxNTcsNTIxNTgsNTIx''@;'; put 'put ''NTksNTIxNjAsNTIxNjEsNTIxNjIsNTIxNjMsNTIxNjQsMTk4LDIwOCwxNzAsMjk0LG51bGwsMzA2LG51bGwsMzE5LDMyMSwyMTYsMzM4LDE4NiwyMjIsMzU4LDMzMCxudWxsLDEyODk2LDEyODk3LDEyODk4LDEyODk5LDEyOTAwLDEyOTAxLDEyOTAyLDEyOTAzLDEyOTA0LDEyOTA1LDEyOTA2''@;'; put 'put ''LDEyOTA3LDEyOTA4LDEyOTA5LDEyOTEwLDEyOTExLDEyOTEyLDEyOTEzLDEyOTE0LDEyOTE1LDEyOTE2LDEyOTE3LDEyOTE4LDEyOTE5LDEyOTIwLDEyOTIxLDEyOTIyLDEyOTIzLDk0MjQsOTQyNSw5NDI2LDk0MjcsOTQyOCw5NDI5LDk0MzAsOTQzMSw5NDMyLDk0MzMsOTQzNCw5NDM1LDk0''@;'; put 'put ''MzYsOTQzNyw5NDM4LDk0MzksOTQ0MCw5NDQxLDk0NDIsOTQ0Myw5NDQ0LDk0NDUsOTQ0Niw5NDQ3LDk0NDgsOTQ0OSw5MzEyLDkzMTMsOTMxNCw5MzE1LDkzMTYsOTMxNyw5MzE4LDkzMTksOTMyMCw5MzIxLDkzMjIsOTMyMyw5MzI0LDkzMjUsOTMyNiwxODksODUzMSw4NTMyLDE4OCwxOTAs''@;'; put 'put ''ODUzOSw4NTQwLDg1NDEsODU0Miw1MjE2NSw1MjE2Niw1MjE2Nyw1MjE2OCw1MjE2OSw1MjE3MCw1MjE3MSw1MjE3Miw1MjE3Myw1MjE3NCw1MjE3NSw1MjE3Niw1MjE3Nyw1MjE3OCw1MjE3OSw1MjE4MSw1MjE4Miw1MjE4Myw1MjE4NCw1MjE4NSw1MjE4Niw1MjE4Nyw1MjE4OCw1MjE4OSw1''@;'; put 'put ''MjE5MCw1MjE5MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjE5Miw1MjE5Myw1MjE5NCw1MjE5NSw1MjE5Nyw1MjE5OCw1MjIwMCw1MjIwMiw1MjIwMyw1MjIwNCw1MjIwNSw1MjIwNiw1MjIwNyw1MjIwOCw1MjIwOSw1MjIxMCw1MjIxMSw1MjIxMiw1MjIxMyw1MjIxNCw1MjIx''@;'; put 'put ''NSw1MjIxNiw1MjIxNyw1MjIxOCw1MjIxOSw1MjIyMCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjIyMSw1MjIyMiw1MjIyMyw1MjIyNCw1MjIyNSw1MjIyNiw1MjIyNyw1MjIyOCw1MjIyOSw1MjIzMCw1MjIzMSw1MjIzMiw1MjIzMyw1MjIzNCw1MjIzNSw1MjIzOCw1MjIzOSw1''@;'; put 'put ''MjI0MSw1MjI0Miw1MjI0Myw1MjI0NSw1MjI0Niw1MjI0Nyw1MjI0OCw1MjI0OSw1MjI1MCw1MjI1MSw1MjI1NCw1MjI1NSw1MjI1Niw1MjI1OSw1MjI2MCwyMzAsMjczLDI0MCwyOTUsMzA1LDMwNywzMTIsMzIwLDMyMiwyNDgsMzM5LDIyMywyNTQsMzU5LDMzMSwzMjksMTI4MDAsMTI4MDEs''@;'; put 'put ''MTI4MDIsMTI4MDMsMTI4MDQsMTI4MDUsMTI4MDYsMTI4MDcsMTI4MDgsMTI4MDksMTI4MTAsMTI4MTEsMTI4MTIsMTI4MTMsMTI4MTQsMTI4MTUsMTI4MTYsMTI4MTcsMTI4MTgsMTI4MTksMTI4MjAsMTI4MjEsMTI4MjIsMTI4MjMsMTI4MjQsMTI4MjUsMTI4MjYsMTI4MjcsOTM3Miw5Mzcz''@;'; put 'put ''LDkzNzQsOTM3NSw5Mzc2LDkzNzcsOTM3OCw5Mzc5LDkzODAsOTM4MSw5MzgyLDkzODMsOTM4NCw5Mzg1LDkzODYsOTM4Nyw5Mzg4LDkzODksOTM5MCw5MzkxLDkzOTIsOTM5Myw5Mzk0LDkzOTUsOTM5Niw5Mzk3LDkzMzIsOTMzMyw5MzM0LDkzMzUsOTMzNiw5MzM3LDkzMzgsOTMzOSw5MzQw''@;'; put 'put ''LDkzNDEsOTM0Miw5MzQzLDkzNDQsOTM0NSw5MzQ2LDE4NSwxNzgsMTc5LDgzMDgsODMxOSw4MzIxLDgzMjIsODMyMyw4MzI0LDUyMjYxLDUyMjYyLDUyMjY2LDUyMjY3LDUyMjY5LDUyMjcxLDUyMjczLDUyMjc0LDUyMjc1LDUyMjc2LDUyMjc3LDUyMjc4LDUyMjc5LDUyMjgyLDUyMjg3LDUy''@;'; put 'put ''Mjg4LDUyMjg5LDUyMjkwLDUyMjkxLDUyMjk0LDUyMjk1LDUyMjk3LDUyMjk4LDUyMjk5LDUyMzAxLDUyMzAyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMzAzLDUyMzA0LDUyMzA1LDUyMzA2LDUyMzA3LDUyMzEwLDUyMzE0LDUyMzE1LDUyMzE2LDUyMzE3LDUyMzE4LDUyMzE5''@;'; put 'put ''LDUyMzIxLDUyMzIyLDUyMzIzLDUyMzI1LDUyMzI3LDUyMzI5LDUyMzMwLDUyMzMxLDUyMzMyLDUyMzMzLDUyMzM0LDUyMzM1LDUyMzM3LDUyMzM4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyMzM5LDUyMzQwLDUyMzQyLDUyMzQzLDUyMzQ0LDUyMzQ1LDUyMzQ2LDUyMzQ3LDUy''@;'; put 'put ''MzQ4LDUyMzQ5LDUyMzUwLDUyMzUxLDUyMzUyLDUyMzUzLDUyMzU0LDUyMzU1LDUyMzU2LDUyMzU3LDUyMzU4LDUyMzU5LDUyMzYwLDUyMzYxLDUyMzYyLDUyMzYzLDUyMzY0LDUyMzY1LDUyMzY2LDUyMzY3LDUyMzY4LDUyMzY5LDUyMzcwLDUyMzcxLDEyMzUzLDEyMzU0LDEyMzU1LDEyMzU2''@;'; put 'put ''LDEyMzU3LDEyMzU4LDEyMzU5LDEyMzYwLDEyMzYxLDEyMzYyLDEyMzYzLDEyMzY0LDEyMzY1LDEyMzY2LDEyMzY3LDEyMzY4LDEyMzY5LDEyMzcwLDEyMzcxLDEyMzcyLDEyMzczLDEyMzc0LDEyMzc1LDEyMzc2LDEyMzc3LDEyMzc4LDEyMzc5LDEyMzgwLDEyMzgxLDEyMzgyLDEyMzgzLDEy''@;'; put 'put ''Mzg0LDEyMzg1LDEyMzg2LDEyMzg3LDEyMzg4LDEyMzg5LDEyMzkwLDEyMzkxLDEyMzkyLDEyMzkzLDEyMzk0LDEyMzk1LDEyMzk2LDEyMzk3LDEyMzk4LDEyMzk5LDEyNDAwLDEyNDAxLDEyNDAyLDEyNDAzLDEyNDA0LDEyNDA1LDEyNDA2LDEyNDA3LDEyNDA4LDEyNDA5LDEyNDEwLDEyNDEx''@;'; put 'put ''LDEyNDEyLDEyNDEzLDEyNDE0LDEyNDE1LDEyNDE2LDEyNDE3LDEyNDE4LDEyNDE5LDEyNDIwLDEyNDIxLDEyNDIyLDEyNDIzLDEyNDI0LDEyNDI1LDEyNDI2LDEyNDI3LDEyNDI4LDEyNDI5LDEyNDMwLDEyNDMxLDEyNDMyLDEyNDMzLDEyNDM0LDEyNDM1LG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjM3Miw1MjM3Myw1MjM3NCw1MjM3NSw1MjM3OCw1MjM3OSw1MjM4MSw1MjM4Miw1MjM4Myw1MjM4NSw1MjM4Niw1MjM4Nyw1MjM4OCw1MjM4OSw1MjM5MCw1MjM5MSw1MjM5NCw1MjM5OCw1MjM5OSw1MjQwMCw1MjQwMSw1MjQw''@;'; put 'put ''Miw1MjQwMyw1MjQwNiw1MjQwNyw1MjQwOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjQxMCw1MjQxMSw1MjQxMyw1MjQxNCw1MjQxNSw1MjQxNiw1MjQxNyw1MjQxOCw1MjQxOSw1MjQyMiw1MjQyNCw1MjQyNiw1MjQyNyw1MjQyOCw1MjQyOSw1MjQzMCw1MjQzMSw1MjQzMyw1''@;'; put 'put ''MjQzNCw1MjQzNSw1MjQzNyw1MjQzOCw1MjQzOSw1MjQ0MCw1MjQ0MSw1MjQ0MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjQ0Myw1MjQ0NCw1MjQ0NSw1MjQ0Niw1MjQ0Nyw1MjQ0OCw1MjQ0OSw1MjQ1MCw1MjQ1MSw1MjQ1Myw1MjQ1NCw1MjQ1NSw1MjQ1Niw1MjQ1Nyw1MjQ1''@;'; put 'put ''OCw1MjQ1OSw1MjQ2MSw1MjQ2Miw1MjQ2Myw1MjQ2NSw1MjQ2Niw1MjQ2Nyw1MjQ2OCw1MjQ2OSw1MjQ3MCw1MjQ3MSw1MjQ3Miw1MjQ3Myw1MjQ3NCw1MjQ3NSw1MjQ3Niw1MjQ3NywxMjQ0OSwxMjQ1MCwxMjQ1MSwxMjQ1MiwxMjQ1MywxMjQ1NCwxMjQ1NSwxMjQ1NiwxMjQ1NywxMjQ1OCwx''@;'; put 'put ''MjQ1OSwxMjQ2MCwxMjQ2MSwxMjQ2MiwxMjQ2MywxMjQ2NCwxMjQ2NSwxMjQ2NiwxMjQ2NywxMjQ2OCwxMjQ2OSwxMjQ3MCwxMjQ3MSwxMjQ3MiwxMjQ3MywxMjQ3NCwxMjQ3NSwxMjQ3NiwxMjQ3NywxMjQ3OCwxMjQ3OSwxMjQ4MCwxMjQ4MSwxMjQ4MiwxMjQ4MywxMjQ4NCwxMjQ4NSwxMjQ4''@;'; put 'put ''NiwxMjQ4NywxMjQ4OCwxMjQ4OSwxMjQ5MCwxMjQ5MSwxMjQ5MiwxMjQ5MywxMjQ5NCwxMjQ5NSwxMjQ5NiwxMjQ5NywxMjQ5OCwxMjQ5OSwxMjUwMCwxMjUwMSwxMjUwMiwxMjUwMywxMjUwNCwxMjUwNSwxMjUwNiwxMjUwNywxMjUwOCwxMjUwOSwxMjUxMCwxMjUxMSwxMjUxMiwxMjUxMywx''@;'; put 'put ''MjUxNCwxMjUxNSwxMjUxNiwxMjUxNywxMjUxOCwxMjUxOSwxMjUyMCwxMjUyMSwxMjUyMiwxMjUyMywxMjUyNCwxMjUyNSwxMjUyNiwxMjUyNywxMjUyOCwxMjUyOSwxMjUzMCwxMjUzMSwxMjUzMiwxMjUzMywxMjUzNCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''NTI0NzgsNTI0NzksNTI0ODAsNTI0ODIsNTI0ODMsNTI0ODQsNTI0ODUsNTI0ODYsNTI0ODcsNTI0OTAsNTI0OTEsNTI0OTMsNTI0OTQsNTI0OTUsNTI0OTcsNTI0OTgsNTI0OTksNTI1MDAsNTI1MDEsNTI1MDIsNTI1MDMsNTI1MDYsNTI1MDgsNTI1MTAsNTI1MTEsNTI1MTIsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsNTI1MTMsNTI1MTQsNTI1MTUsNTI1MTcsNTI1MTgsNTI1MTksNTI1MjEsNTI1MjIsNTI1MjMsNTI1MjUsNTI1MjYsNTI1MjcsNTI1MjgsNTI1MjksNTI1MzAsNTI1MzEsNTI1MzIsNTI1MzMsNTI1MzQsNTI1MzUsNTI1MzYsNTI1MzgsNTI1MzksNTI1NDAs''@;'; put 'put ''NTI1NDEsNTI1NDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI1NDMsNTI1NDQsNTI1NDUsNTI1NDYsNTI1NDcsNTI1NDgsNTI1NDksNTI1NTAsNTI1NTEsNTI1NTIsNTI1NTMsNTI1NTQsNTI1NTUsNTI1NTYsNTI1NTcsNTI1NTgsNTI1NTksNTI1NjAsNTI1NjEsNTI1NjIsNTI1''@;'; put 'put ''NjMsNTI1NjQsNTI1NjUsNTI1NjYsNTI1NjcsNTI1NjgsNTI1NjksNTI1NzAsNTI1NzEsNTI1NzMsNTI1NzQsNTI1NzUsMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTAyNSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1Nywx''@;'; put 'put ''MDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTA3MiwxMDczLDEwNzQsMTA3NSwx''@;'; put 'put ''MDc2LDEwNzcsMTEwNSwxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjU3Nyw1MjU3OCw1MjU3OSw1MjU4MSw1MjU4Miw1MjU4Myw1MjU4NCw1MjU4NSw1MjU4Niw1MjU4Nyw1MjU5MCw1MjU5Miw1MjU5NCw1MjU5NSw1MjU5Niw1MjU5Nyw1MjU5OCw1MjU5OSw1MjYwMSw1MjYwMiw1''@;'; put 'put ''MjYwMyw1MjYwNCw1MjYwNSw1MjYwNiw1MjYwNyw1MjYwOCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjYwOSw1MjYxMCw1MjYxMSw1MjYxMiw1MjYxMyw1MjYxNCw1MjYxNSw1MjYxNyw1MjYxOCw1MjYxOSw1MjYyMCw1MjYyMSw1MjYyMiw1MjYyMyw1MjYyNCw1MjYyNSw1MjYy''@;'; put 'put ''Niw1MjYyNyw1MjYzMCw1MjYzMSw1MjYzMyw1MjYzNCw1MjYzNSw1MjYzNyw1MjYzOCw1MjYzOSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjY0MCw1MjY0MSw1MjY0Miw1MjY0Myw1MjY0Niw1MjY0OCw1MjY1MCw1MjY1MSw1MjY1Miw1MjY1Myw1MjY1NCw1MjY1NSw1MjY1Nyw1''@;'; put 'put ''MjY1OCw1MjY1OSw1MjY2MCw1MjY2MSw1MjY2Miw1MjY2Myw1MjY2NCw1MjY2NSw1MjY2Niw1MjY2Nyw1MjY2OCw1MjY2OSw1MjY3MCw1MjY3MSw1MjY3Miw1MjY3Myw1MjY3NCw1MjY3NSw1MjY3NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNjc4LDUyNjc5LDUyNjgwLDUyNjgxLDUyNjgyLDUyNjgzLDUyNjg1LDUyNjg2LDUyNjg3LDUyNjg5LDUyNjkwLDUyNjkxLDUyNjky''@;'; put 'put ''LDUyNjkzLDUyNjk0LDUyNjk1LDUyNjk2LDUyNjk3LDUyNjk4LDUyNjk5LDUyNzAwLDUyNzAxLDUyNzAyLDUyNzAzLDUyNzA0LDUyNzA1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNzA2LDUyNzA3LDUyNzA4LDUyNzA5LDUyNzEwLDUyNzExLDUyNzEzLDUyNzE0LDUyNzE1LDUy''@;'; put 'put ''NzE3LDUyNzE4LDUyNzE5LDUyNzIxLDUyNzIyLDUyNzIzLDUyNzI0LDUyNzI1LDUyNzI2LDUyNzI3LDUyNzMwLDUyNzMyLDUyNzM0LDUyNzM1LDUyNzM2LDUyNzM3LDUyNzM4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUyNzM5LDUyNzQxLDUyNzQyLDUyNzQzLDUyNzQ1LDUyNzQ2''@;'; put 'put ''LDUyNzQ3LDUyNzQ5LDUyNzUwLDUyNzUxLDUyNzUyLDUyNzUzLDUyNzU0LDUyNzU1LDUyNzU3LDUyNzU4LDUyNzU5LDUyNzYwLDUyNzYyLDUyNzYzLDUyNzY0LDUyNzY1LDUyNzY2LDUyNzY3LDUyNzcwLDUyNzcxLDUyNzczLDUyNzc0LDUyNzc1LDUyNzc3LDUyNzc4LDUyNzc5LG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI3ODAsNTI3ODEsNTI3ODIsNTI3ODMsNTI3ODYsNTI3''@;'; put 'put ''ODgsNTI3OTAsNTI3OTEsNTI3OTIsNTI3OTMsNTI3OTQsNTI3OTUsNTI3OTYsNTI3OTcsNTI3OTgsNTI3OTksNTI4MDAsNTI4MDEsNTI4MDIsNTI4MDMsNTI4MDQsNTI4MDUsNTI4MDYsNTI4MDcsNTI4MDgsNTI4MDksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTI4MTAsNTI4MTEs''@;'; put 'put ''NTI4MTIsNTI4MTMsNTI4MTQsNTI4MTUsNTI4MTYsNTI4MTcsNTI4MTgsNTI4MTksNTI4MjAsNTI4MjEsNTI4MjIsNTI4MjMsNTI4MjYsNTI4MjcsNTI4MjksNTI4MzAsNTI4MzQsNTI4MzUsNTI4MzYsNTI4MzcsNTI4MzgsNTI4MzksNTI4NDIsNTI4NDQsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsNTI4NDYsNTI4NDcsNTI4NDgsNTI4NDksNTI4NTAsNTI4NTEsNTI4NTQsNTI4NTUsNTI4NTcsNTI4NTgsNTI4NTksNTI4NjEsNTI4NjIsNTI4NjMsNTI4NjQsNTI4NjUsNTI4NjYsNTI4NjcsNTI4NzAsNTI4NzIsNTI4NzQsNTI4NzUsNTI4NzYsNTI4NzcsNTI4NzgsNTI4Nzks''@;'; put 'put ''NTI4ODIsNTI4ODMsNTI4ODUsNTI4ODYsNTI4ODcsNTI4ODksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCw1Mjg5MCw1Mjg5MSw1Mjg5Miw1Mjg5Myw1Mjg5NCw1Mjg5NSw1Mjg5OCw1MjkwMiw1MjkwMyw1MjkwNCw1MjkwNSw1MjkwNiw1MjkwNyw1MjkxMCw1MjkxMSw1MjkxMiw1MjkxMyw1MjkxNCw1MjkxNSw1MjkxNiw1MjkxNyw1MjkxOCw1MjkxOSw1MjkyMCw1MjkyMSw1Mjky''@;'; put 'put ''MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MjkyMyw1MjkyNCw1MjkyNSw1MjkyNiw1MjkyNyw1MjkyOCw1MjkzMCw1MjkzMSw1MjkzMiw1MjkzMyw1MjkzNCw1MjkzNSw1MjkzNiw1MjkzNyw1MjkzOCw1MjkzOSw1Mjk0MCw1Mjk0MSw1Mjk0Miw1Mjk0Myw1Mjk0NCw1Mjk0NSw1''@;'; put 'put ''Mjk0Niw1Mjk0Nyw1Mjk0OCw1Mjk0OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1Mjk1MCw1Mjk1MSw1Mjk1Miw1Mjk1Myw1Mjk1NCw1Mjk1NSw1Mjk1Niw1Mjk1Nyw1Mjk1OCw1Mjk1OSw1Mjk2MCw1Mjk2MSw1Mjk2Miw1Mjk2Myw1Mjk2Niw1Mjk2Nyw1Mjk2OSw1Mjk3MCw1Mjk3''@;'; put 'put ''Myw1Mjk3NCw1Mjk3NSw1Mjk3Niw1Mjk3Nyw1Mjk3OCw1Mjk3OSw1Mjk4Miw1Mjk4Niw1Mjk4Nyw1Mjk4OCw1Mjk4OSw1Mjk5MCw1Mjk5MSw0NDAzMiw0NDAzMyw0NDAzNiw0NDAzOSw0NDA0MCw0NDA0MSw0NDA0Miw0NDA0OCw0NDA0OSw0NDA1MCw0NDA1MSw0NDA1Miw0NDA1Myw0NDA1NCw0''@;'; put 'put ''NDA1NSw0NDA1Nyw0NDA1OCw0NDA1OSw0NDA2MCw0NDA2MSw0NDA2NCw0NDA2OCw0NDA3Niw0NDA3Nyw0NDA3OSw0NDA4MCw0NDA4MSw0NDA4OCw0NDA4OSw0NDA5Miw0NDA5Niw0NDEwNyw0NDEwOSw0NDExNiw0NDEyMCw0NDEyNCw0NDE0NCw0NDE0NSw0NDE0OCw0NDE1MSw0NDE1Miw0NDE1''@;'; put 'put ''NCw0NDE2MCw0NDE2MSw0NDE2Myw0NDE2NCw0NDE2NSw0NDE2Niw0NDE2OSw0NDE3MCw0NDE3MSw0NDE3Miw0NDE3Niw0NDE4MCw0NDE4OCw0NDE4OSw0NDE5MSw0NDE5Miw0NDE5Myw0NDIwMCw0NDIwMSw0NDIwMiw0NDIwNCw0NDIwNyw0NDIwOCw0NDIxNiw0NDIxNyw0NDIxOSw0NDIyMCw0''@;'; put 'put ''NDIyMSw0NDIyNSw0NDIyOCw0NDIzMiw0NDIzNiw0NDI0NSw0NDI0Nyw0NDI1Niw0NDI1Nyw0NDI2MCw0NDI2Myw0NDI2NCw0NDI2Niw0NDI2OCw0NDI3MSw0NDI3Miw0NDI3Myw0NDI3NSw0NDI3Nyw0NDI3OCw0NDI4NCw0NDI4NSw0NDI4OCw0NDI5Miw0NDI5NCw1Mjk5NCw1Mjk5NSw1Mjk5''@;'; put 'put ''Nyw1Mjk5OCw1Mjk5OSw1MzAwMSw1MzAwMiw1MzAwMyw1MzAwNCw1MzAwNSw1MzAwNiw1MzAwNyw1MzAxMCw1MzAxMiw1MzAxNCw1MzAxNSw1MzAxNiw1MzAxNyw1MzAxOCw1MzAxOSw1MzAyMSw1MzAyMiw1MzAyMyw1MzAyNSw1MzAyNiw1MzAyNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCw1MzAyOSw1MzAzMCw1MzAzMSw1MzAzMiw1MzAzMyw1MzAzNCw1MzAzNSw1MzAzOCw1MzA0Miw1MzA0Myw1MzA0NCw1MzA0NSw1MzA0Niw1MzA0Nyw1MzA0OSw1MzA1MCw1MzA1MSw1MzA1Miw1MzA1Myw1MzA1NCw1MzA1NSw1MzA1Niw1MzA1Nyw1MzA1OCw1MzA1OSw1MzA2MCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzA2MSw1MzA2Miw1MzA2Myw1MzA2NCw1MzA2NSw1MzA2Niw1MzA2Nyw1MzA2OCw1MzA2OSw1MzA3MCw1MzA3MSw1MzA3Miw1MzA3Myw1MzA3NCw1MzA3NSw1MzA3OCw1MzA3OSw1MzA4MSw1MzA4Miw1MzA4Myw1MzA4NSw1MzA4Niw1MzA4Nyw1''@;'; put 'put ''MzA4OCw1MzA4OSw1MzA5MCw1MzA5MSw1MzA5NCw1MzA5Niw1MzA5OCw1MzA5OSw1MzEwMCw0NDMwMCw0NDMwMSw0NDMwMyw0NDMwNSw0NDMxMiw0NDMxNiw0NDMyMCw0NDMyOSw0NDMzMiw0NDMzMyw0NDM0MCw0NDM0MSw0NDM0NCw0NDM0OCw0NDM1Niw0NDM1Nyw0NDM1OSw0NDM2MSw0NDM2''@;'; put 'put ''OCw0NDM3Miw0NDM3Niw0NDM4NSw0NDM4Nyw0NDM5Niw0NDM5Nyw0NDQwMCw0NDQwMyw0NDQwNCw0NDQwNSw0NDQwNiw0NDQxMSw0NDQxMiw0NDQxMyw0NDQxNSw0NDQxNyw0NDQxOCw0NDQyNCw0NDQyNSw0NDQyOCw0NDQzMiw0NDQ0NCw0NDQ0NSw0NDQ1Miw0NDQ3MSw0NDQ4MCw0NDQ4MSw0''@;'; put 'put ''NDQ4NCw0NDQ4OCw0NDQ5Niw0NDQ5Nyw0NDQ5OSw0NDUwOCw0NDUxMiw0NDUxNiw0NDUzNiw0NDUzNyw0NDU0MCw0NDU0Myw0NDU0NCw0NDU0NSw0NDU1Miw0NDU1Myw0NDU1NSw0NDU1Nyw0NDU2NCw0NDU5Miw0NDU5Myw0NDU5Niw0NDU5OSw0NDYwMCw0NDYwMiw0NDYwOCw0NDYwOSw0NDYx''@;'; put 'put ''MSw0NDYxMyw0NDYxNCw0NDYxOCw0NDYyMCw0NDYyMSw0NDYyMiw0NDYyNCw0NDYyOCw0NDYzMCw0NDYzNiw0NDYzNyw0NDYzOSw0NDY0MCw0NDY0MSw0NDY0NSw0NDY0OCw0NDY0OSw0NDY1Miw0NDY1Niw0NDY2NCw1MzEwMSw1MzEwMiw1MzEwMyw1MzEwNiw1MzEwNyw1MzEwOSw1MzExMCw1''@;'; put 'put ''MzExMSw1MzExMyw1MzExNCw1MzExNSw1MzExNiw1MzExNyw1MzExOCw1MzExOSw1MzEyMSw1MzEyMiw1MzEyMyw1MzEyNCw1MzEyNiw1MzEyNyw1MzEyOCw1MzEyOSw1MzEzMCw1MzEzMSw1MzEzMyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1MzEzNCw1MzEzNSw1MzEzNiw1MzEz''@;'; put 'put ''Nyw1MzEzOCw1MzEzOSw1MzE0MCw1MzE0MSw1MzE0Miw1MzE0Myw1MzE0NCw1MzE0NSw1MzE0Niw1MzE0Nyw1MzE0OCw1MzE0OSw1MzE1MCw1MzE1MSw1MzE1Miw1MzE1NCw1MzE1NSw1MzE1Niw1MzE1Nyw1MzE1OCw1MzE1OSw1MzE2MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1''@;'; put 'put ''MzE2Miw1MzE2Myw1MzE2NCw1MzE2NSw1MzE2Niw1MzE2Nyw1MzE2OSw1MzE3MCw1MzE3MSw1MzE3Miw1MzE3Myw1MzE3NCw1MzE3NSw1MzE3Niw1MzE3Nyw1MzE3OCw1MzE3OSw1MzE4MCw1MzE4MSw1MzE4Miw1MzE4Myw1MzE4NCw1MzE4NSw1MzE4Niw1MzE4Nyw1MzE4OSw1MzE5MCw1MzE5''@;'; put 'put ''MSw1MzE5Miw1MzE5Myw1MzE5NCw1MzE5NSw0NDY2NSw0NDY2Nyw0NDY2OCw0NDY2OSw0NDY3Niw0NDY3Nyw0NDY4NCw0NDczMiw0NDczMyw0NDczNCw0NDczNiw0NDc0MCw0NDc0OCw0NDc0OSw0NDc1MSw0NDc1Miw0NDc1Myw0NDc2MCw0NDc2MSw0NDc2NCw0NDc3Niw0NDc3OSw0NDc4MSw0''@;'; put 'put ''NDc4OCw0NDc5Miw0NDc5Niw0NDgwNyw0NDgwOCw0NDgxMyw0NDgxNiw0NDg0NCw0NDg0NSw0NDg0OCw0NDg1MCw0NDg1Miw0NDg2MCw0NDg2MSw0NDg2Myw0NDg2NSw0NDg2Niw0NDg2Nyw0NDg3Miw0NDg3Myw0NDg4MCw0NDg5Miw0NDg5Myw0NDkwMCw0NDkwMSw0NDkyMSw0NDkyOCw0NDkz''@;'; put 'put ''Miw0NDkzNiw0NDk0NCw0NDk0NSw0NDk0OSw0NDk1Niw0NDk4NCw0NDk4NSw0NDk4OCw0NDk5Miw0NDk5OSw0NWUzLDQ1MDAxLDQ1MDAzLDQ1MDA1LDQ1MDA2LDQ1MDEyLDQ1MDIwLDQ1MDMyLDQ1MDMzLDQ1MDQwLDQ1MDQxLDQ1MDQ0LDQ1MDQ4LDQ1MDU2LDQ1MDU3LDQ1MDYwLDQ1MDY4LDQ1''@;'; put 'put ''MDcyLDQ1MDc2LDQ1MDg0LDQ1MDg1LDQ1MDk2LDQ1MTI0LDQ1MTI1LDQ1MTI4LDQ1MTMwLDQ1MTMyLDQ1MTM0LDQ1MTM5LDQ1MTQwLDQ1MTQxLDQ1MTQzLDQ1MTQ1LDUzMTk2LDUzMTk3LDUzMTk4LDUzMTk5LDUzMjAwLDUzMjAxLDUzMjAyLDUzMjAzLDUzMjA0LDUzMjA1LDUzMjA2LDUzMjA3''@;'; put 'put ''LDUzMjA4LDUzMjA5LDUzMjEwLDUzMjExLDUzMjEyLDUzMjEzLDUzMjE0LDUzMjE1LDUzMjE4LDUzMjE5LDUzMjIxLDUzMjIyLDUzMjIzLDUzMjI1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzMjI2LDUzMjI3LDUzMjI4LDUzMjI5LDUzMjMwLDUzMjMxLDUzMjM0LDUzMjM2LDUz''@;'; put 'put ''MjM4LDUzMjM5LDUzMjQwLDUzMjQxLDUzMjQyLDUzMjQzLDUzMjQ1LDUzMjQ2LDUzMjQ3LDUzMjQ5LDUzMjUwLDUzMjUxLDUzMjUzLDUzMjU0LDUzMjU1LDUzMjU2LDUzMjU3LDUzMjU4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzMjU5LDUzMjYwLDUzMjYxLDUzMjYyLDUzMjYz''@;'; put 'put ''LDUzMjY0LDUzMjY2LDUzMjY3LDUzMjY4LDUzMjY5LDUzMjcwLDUzMjcxLDUzMjczLDUzMjc0LDUzMjc1LDUzMjc2LDUzMjc3LDUzMjc4LDUzMjc5LDUzMjgwLDUzMjgxLDUzMjgyLDUzMjgzLDUzMjg0LDUzMjg1LDUzMjg2LDUzMjg3LDUzMjg4LDUzMjg5LDUzMjkwLDUzMjkxLDUzMjkyLDQ1''@;'; put 'put ''MTQ5LDQ1MTgwLDQ1MTgxLDQ1MTg0LDQ1MTg4LDQ1MTk2LDQ1MTk3LDQ1MTk5LDQ1MjAxLDQ1MjA4LDQ1MjA5LDQ1MjEwLDQ1MjEyLDQ1MjE1LDQ1MjE2LDQ1MjE3LDQ1MjE4LDQ1MjI0LDQ1MjI1LDQ1MjI3LDQ1MjI4LDQ1MjI5LDQ1MjMwLDQ1MjMxLDQ1MjMzLDQ1MjM1LDQ1MjM2LDQ1MjM3''@;'; put 'put ''LDQ1MjQwLDQ1MjQ0LDQ1MjUyLDQ1MjUzLDQ1MjU1LDQ1MjU2LDQ1MjU3LDQ1MjY0LDQ1MjY1LDQ1MjY4LDQ1MjcyLDQ1MjgwLDQ1Mjg1LDQ1MzIwLDQ1MzIxLDQ1MzIzLDQ1MzI0LDQ1MzI4LDQ1MzMwLDQ1MzMxLDQ1MzM2LDQ1MzM3LDQ1MzM5LDQ1MzQwLDQ1MzQxLDQ1MzQ3LDQ1MzQ4LDQ1''@;'; put 'put ''MzQ5LDQ1MzUyLDQ1MzU2LDQ1MzY0LDQ1MzY1LDQ1MzY3LDQ1MzY4LDQ1MzY5LDQ1Mzc2LDQ1Mzc3LDQ1MzgwLDQ1Mzg0LDQ1MzkyLDQ1MzkzLDQ1Mzk2LDQ1Mzk3LDQ1NDAwLDQ1NDA0LDQ1NDA4LDQ1NDMyLDQ1NDMzLDQ1NDM2LDQ1NDQwLDQ1NDQyLDQ1NDQ4LDQ1NDQ5LDQ1NDUxLDQ1NDUz''@;'; put 'put ''LDQ1NDU4LDQ1NDU5LDQ1NDYwLDQ1NDY0LDQ1NDY4LDQ1NDgwLDQ1NTE2LDQ1NTIwLDQ1NTI0LDQ1NTMyLDQ1NTMzLDUzMjk0LDUzMjk1LDUzMjk2LDUzMjk3LDUzMjk4LDUzMjk5LDUzMzAyLDUzMzAzLDUzMzA1LDUzMzA2LDUzMzA3LDUzMzA5LDUzMzEwLDUzMzExLDUzMzEyLDUzMzEzLDUz''@;'; put 'put ''MzE0LDUzMzE1LDUzMzE4LDUzMzIwLDUzMzIyLDUzMzIzLDUzMzI0LDUzMzI1LDUzMzI2LDUzMzI3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzMzI5LDUzMzMwLDUzMzMxLDUzMzMzLDUzMzM0LDUzMzM1LDUzMzM3LDUzMzM4LDUzMzM5LDUzMzQwLDUzMzQxLDUzMzQyLDUzMzQz''@;'; put 'put ''LDUzMzQ1LDUzMzQ2LDUzMzQ3LDUzMzQ4LDUzMzQ5LDUzMzUwLDUzMzUxLDUzMzUyLDUzMzUzLDUzMzU0LDUzMzU1LDUzMzU4LDUzMzU5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzMzYxLDUzMzYyLDUzMzYzLDUzMzY1LDUzMzY2LDUzMzY3LDUzMzY4LDUzMzY5LDUzMzcwLDUz''@;'; put 'put ''MzcxLDUzMzc0LDUzMzc1LDUzMzc2LDUzMzc4LDUzMzc5LDUzMzgwLDUzMzgxLDUzMzgyLDUzMzgzLDUzMzg0LDUzMzg1LDUzMzg2LDUzMzg3LDUzMzg4LDUzMzg5LDUzMzkwLDUzMzkxLDUzMzkyLDUzMzkzLDUzMzk0LDUzMzk1LDUzMzk2LDQ1NTM1LDQ1NTQ0LDQ1NTQ1LDQ1NTQ4LDQ1NTUy''@;'; put 'put ''LDQ1NTYxLDQ1NTYzLDQ1NTY1LDQ1NTcyLDQ1NTczLDQ1NTc2LDQ1NTc5LDQ1NTgwLDQ1NTg4LDQ1NTg5LDQ1NTkxLDQ1NTkzLDQ1NjAwLDQ1NjIwLDQ1NjI4LDQ1NjU2LDQ1NjYwLDQ1NjY0LDQ1NjcyLDQ1NjczLDQ1Njg0LDQ1Njg1LDQ1NjkyLDQ1NzAwLDQ1NzAxLDQ1NzA1LDQ1NzEyLDQ1''@;'; put 'put ''NzEzLDQ1NzE2LDQ1NzIwLDQ1NzIxLDQ1NzIyLDQ1NzI4LDQ1NzI5LDQ1NzMxLDQ1NzMzLDQ1NzM0LDQ1NzM4LDQ1NzQwLDQ1NzQ0LDQ1NzQ4LDQ1NzY4LDQ1NzY5LDQ1NzcyLDQ1Nzc2LDQ1Nzc4LDQ1Nzg0LDQ1Nzg1LDQ1Nzg3LDQ1Nzg5LDQ1Nzk0LDQ1Nzk2LDQ1Nzk3LDQ1Nzk4LDQ1ODAw''@;'; put 'put ''LDQ1ODAzLDQ1ODA0LDQ1ODA1LDQ1ODA2LDQ1ODA3LDQ1ODExLDQ1ODEyLDQ1ODEzLDQ1ODE1LDQ1ODE2LDQ1ODE3LDQ1ODE4LDQ1ODE5LDQ1ODIzLDQ1ODI0LDQ1ODI1LDQ1ODI4LDQ1ODMyLDQ1ODQwLDQ1ODQxLDQ1ODQzLDQ1ODQ0LDQ1ODQ1LDQ1ODUyLDQ1OTA4LDQ1OTA5LDQ1OTEwLDQ1''@;'; put 'put ''OTEyLDQ1OTE1LDQ1OTE2LDQ1OTE4LDQ1OTE5LDQ1OTI0LDQ1OTI1LDUzMzk3LDUzMzk4LDUzMzk5LDUzNDAwLDUzNDAxLDUzNDAyLDUzNDAzLDUzNDA0LDUzNDA1LDUzNDA2LDUzNDA3LDUzNDA4LDUzNDA5LDUzNDEwLDUzNDExLDUzNDE0LDUzNDE1LDUzNDE3LDUzNDE4LDUzNDE5LDUzNDIx''@;'; put 'put ''LDUzNDIyLDUzNDIzLDUzNDI0LDUzNDI1LDUzNDI2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzNDI3LDUzNDMwLDUzNDMyLDUzNDM0LDUzNDM1LDUzNDM2LDUzNDM3LDUzNDM4LDUzNDM5LDUzNDQyLDUzNDQzLDUzNDQ1LDUzNDQ2LDUzNDQ3LDUzNDUwLDUzNDUxLDUzNDUyLDUz''@;'; put 'put ''NDUzLDUzNDU0LDUzNDU1LDUzNDU4LDUzNDYyLDUzNDYzLDUzNDY0LDUzNDY1LDUzNDY2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzNDY3LDUzNDcwLDUzNDcxLDUzNDczLDUzNDc0LDUzNDc1LDUzNDc3LDUzNDc4LDUzNDc5LDUzNDgwLDUzNDgxLDUzNDgyLDUzNDgzLDUzNDg2''@;'; put 'put ''LDUzNDkwLDUzNDkxLDUzNDkyLDUzNDkzLDUzNDk0LDUzNDk1LDUzNDk3LDUzNDk4LDUzNDk5LDUzNTAwLDUzNTAxLDUzNTAyLDUzNTAzLDUzNTA0LDUzNTA1LDUzNTA2LDUzNTA3LDUzNTA4LDQ1OTI3LDQ1OTI5LDQ1OTMxLDQ1OTM0LDQ1OTM2LDQ1OTM3LDQ1OTQwLDQ1OTQ0LDQ1OTUyLDQ1''@;'; put 'put ''OTUzLDQ1OTU1LDQ1OTU2LDQ1OTU3LDQ1OTY0LDQ1OTY4LDQ1OTcyLDQ1OTg0LDQ1OTg1LDQ1OTkyLDQ1OTk2LDQ2MDIwLDQ2MDIxLDQ2MDI0LDQ2MDI3LDQ2MDI4LDQ2MDMwLDQ2MDMyLDQ2MDM2LDQ2MDM3LDQ2MDM5LDQ2MDQxLDQ2MDQzLDQ2MDQ1LDQ2MDQ4LDQ2MDUyLDQ2MDU2LDQ2MDc2''@;'; put 'put ''LDQ2MDk2LDQ2MTA0LDQ2MTA4LDQ2MTEyLDQ2MTIwLDQ2MTIxLDQ2MTIzLDQ2MTMyLDQ2MTYwLDQ2MTYxLDQ2MTY0LDQ2MTY4LDQ2MTc2LDQ2MTc3LDQ2MTc5LDQ2MTgxLDQ2MTg4LDQ2MjA4LDQ2MjE2LDQ2MjM3LDQ2MjQ0LDQ2MjQ4LDQ2MjUyLDQ2MjYxLDQ2MjYzLDQ2MjY1LDQ2MjcyLDQ2''@;'; put 'put ''Mjc2LDQ2MjgwLDQ2Mjg4LDQ2MjkzLDQ2MzAwLDQ2MzAxLDQ2MzA0LDQ2MzA3LDQ2MzA4LDQ2MzEwLDQ2MzE2LDQ2MzE3LDQ2MzE5LDQ2MzIxLDQ2MzI4LDQ2MzU2LDQ2MzU3LDQ2MzYwLDQ2MzYzLDQ2MzY0LDQ2MzcyLDQ2MzczLDQ2Mzc1LDQ2Mzc2LDQ2Mzc3LDQ2Mzc4LDQ2Mzg0LDQ2Mzg1''@;'; put 'put ''LDQ2Mzg4LDQ2MzkyLDUzNTA5LDUzNTEwLDUzNTExLDUzNTEyLDUzNTEzLDUzNTE0LDUzNTE1LDUzNTE2LDUzNTE4LDUzNTE5LDUzNTIwLDUzNTIxLDUzNTIyLDUzNTIzLDUzNTI0LDUzNTI1LDUzNTI2LDUzNTI3LDUzNTI4LDUzNTI5LDUzNTMwLDUzNTMxLDUzNTMyLDUzNTMzLDUzNTM0LDUz''@;'; put 'put ''NTM1LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzNTM2LDUzNTM3LDUzNTM4LDUzNTM5LDUzNTQwLDUzNTQxLDUzNTQyLDUzNTQzLDUzNTQ0LDUzNTQ1LDUzNTQ2LDUzNTQ3LDUzNTQ4LDUzNTQ5LDUzNTUwLDUzNTUxLDUzNTU0LDUzNTU1LDUzNTU3LDUzNTU4LDUzNTU5LDUzNTYx''@;'; put 'put ''LDUzNTYzLDUzNTY0LDUzNTY1LDUzNTY2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzNTY3LDUzNTcwLDUzNTc0LDUzNTc1LDUzNTc2LDUzNTc3LDUzNTc4LDUzNTc5LDUzNTgyLDUzNTgzLDUzNTg1LDUzNTg2LDUzNTg3LDUzNTg5LDUzNTkwLDUzNTkxLDUzNTkyLDUzNTkzLDUz''@;'; put 'put ''NTk0LDUzNTk1LDUzNTk4LDUzNjAwLDUzNjAyLDUzNjAzLDUzNjA0LDUzNjA1LDUzNjA2LDUzNjA3LDUzNjA5LDUzNjEwLDUzNjExLDUzNjEzLDQ2NDAwLDQ2NDAxLDQ2NDAzLDQ2NDA0LDQ2NDA1LDQ2NDExLDQ2NDEyLDQ2NDEzLDQ2NDE2LDQ2NDIwLDQ2NDI4LDQ2NDI5LDQ2NDMxLDQ2NDMy''@;'; put 'put ''LDQ2NDMzLDQ2NDk2LDQ2NDk3LDQ2NTAwLDQ2NTA0LDQ2NTA2LDQ2NTA3LDQ2NTEyLDQ2NTEzLDQ2NTE1LDQ2NTE2LDQ2NTE3LDQ2NTIzLDQ2NTI0LDQ2NTI1LDQ2NTI4LDQ2NTMyLDQ2NTQwLDQ2NTQxLDQ2NTQzLDQ2NTQ0LDQ2NTQ1LDQ2NTUyLDQ2NTcyLDQ2NjA4LDQ2NjA5LDQ2NjEyLDQ2''@;'; put 'put ''NjE2LDQ2NjI5LDQ2NjM2LDQ2NjQ0LDQ2NjY0LDQ2NjkyLDQ2Njk2LDQ2NzQ4LDQ2NzQ5LDQ2NzUyLDQ2NzU2LDQ2NzYzLDQ2NzY0LDQ2NzY5LDQ2ODA0LDQ2ODMyLDQ2ODM2LDQ2ODQwLDQ2ODQ4LDQ2ODQ5LDQ2ODUzLDQ2ODg4LDQ2ODg5LDQ2ODkyLDQ2ODk1LDQ2ODk2LDQ2OTA0LDQ2OTA1''@;'; put 'put ''LDQ2OTA3LDQ2OTE2LDQ2OTIwLDQ2OTI0LDQ2OTMyLDQ2OTMzLDQ2OTQ0LDQ2OTQ4LDQ2OTUyLDQ2OTYwLDQ2OTYxLDQ2OTYzLDQ2OTY1LDQ2OTcyLDQ2OTczLDQ2OTc2LDQ2OTgwLDQ2OTg4LDQ2OTg5LDQ2OTkxLDQ2OTkyLDQ2OTkzLDQ2OTk0LDQ2OTk4LDQ2OTk5LDUzNjE0LDUzNjE1LDUz''@;'; put 'put ''NjE2LDUzNjE3LDUzNjE4LDUzNjE5LDUzNjIwLDUzNjIxLDUzNjIyLDUzNjIzLDUzNjI0LDUzNjI1LDUzNjI2LDUzNjI3LDUzNjI5LDUzNjMwLDUzNjMxLDUzNjMyLDUzNjMzLDUzNjM0LDUzNjM1LDUzNjM3LDUzNjM4LDUzNjM5LDUzNjQxLDUzNjQyLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLDUzNjQzLDUzNjQ0LDUzNjQ1LDUzNjQ2LDUzNjQ3LDUzNjQ4LDUzNjQ5LDUzNjUwLDUzNjUxLDUzNjUyLDUzNjUzLDUzNjU0LDUzNjU1LDUzNjU2LDUzNjU3LDUzNjU4LDUzNjU5LDUzNjYwLDUzNjYxLDUzNjYyLDUzNjYzLDUzNjY2LDUzNjY3LDUzNjY5LDUzNjcwLDUzNjcxLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDUzNjczLDUzNjc0LDUzNjc1LDUzNjc2LDUzNjc3LDUzNjc4LDUzNjc5LDUzNjgyLDUzNjg0LDUzNjg2LDUzNjg3LDUzNjg4LDUzNjg5LDUzNjkxLDUzNjkzLDUzNjk0LDUzNjk1LDUzNjk3LDUzNjk4LDUzNjk5LDUzNzAwLDUzNzAxLDUzNzAy''@;'; put 'put ''LDUzNzAzLDUzNzA0LDUzNzA1LDUzNzA2LDUzNzA3LDUzNzA4LDUzNzA5LDUzNzEwLDUzNzExLDQ3ZTMsNDcwMDEsNDcwMDQsNDcwMDgsNDcwMTYsNDcwMTcsNDcwMTksNDcwMjAsNDcwMjEsNDcwMjgsNDcwMjksNDcwMzIsNDcwNDcsNDcwNDksNDcwODQsNDcwODUsNDcwODgsNDcwOTIsNDcx''@;'; put 'put ''MDAsNDcxMDEsNDcxMDMsNDcxMDQsNDcxMDUsNDcxMTEsNDcxMTIsNDcxMTMsNDcxMTYsNDcxMjAsNDcxMjgsNDcxMjksNDcxMzEsNDcxMzMsNDcxNDAsNDcxNDEsNDcxNDQsNDcxNDgsNDcxNTYsNDcxNTcsNDcxNTksNDcxNjAsNDcxNjEsNDcxNjgsNDcxNzIsNDcxODUsNDcxODcsNDcxOTYs''@;'; put 'put ''NDcxOTcsNDcyMDAsNDcyMDQsNDcyMTIsNDcyMTMsNDcyMTUsNDcyMTcsNDcyMjQsNDcyMjgsNDcyNDUsNDcyNzIsNDcyODAsNDcyODQsNDcyODgsNDcyOTYsNDcyOTcsNDcyOTksNDczMDEsNDczMDgsNDczMTIsNDczMTYsNDczMjUsNDczMjcsNDczMjksNDczMzYsNDczMzcsNDczNDAsNDcz''@;'; put 'put ''NDQsNDczNTIsNDczNTMsNDczNTUsNDczNTcsNDczNjQsNDczODQsNDczOTIsNDc0MjAsNDc0MjEsNDc0MjQsNDc0MjgsNDc0MzYsNDc0MzksNDc0NDEsNDc0NDgsNDc0NDksNDc0NTIsNDc0NTYsNDc0NjQsNDc0NjUsNTM3MTIsNTM3MTMsNTM3MTQsNTM3MTUsNTM3MTYsNTM3MTcsNTM3MTgs''@;'; put 'put ''NTM3MTksNTM3MjEsNTM3MjIsNTM3MjMsNTM3MjQsNTM3MjUsNTM3MjYsNTM3MjcsNTM3MjgsNTM3MjksNTM3MzAsNTM3MzEsNTM3MzIsNTM3MzMsNTM3MzQsNTM3MzUsNTM3MzYsNTM3MzcsNTM3MzgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM3MzksNTM3NDAsNTM3NDEsNTM3''@;'; put 'put ''NDIsNTM3NDMsNTM3NDQsNTM3NDUsNTM3NDYsNTM3NDcsNTM3NDksNTM3NTAsNTM3NTEsNTM3NTMsNTM3NTQsNTM3NTUsNTM3NTYsNTM3NTcsNTM3NTgsNTM3NTksNTM3NjAsNTM3NjEsNTM3NjIsNTM3NjMsNTM3NjQsNTM3NjUsNTM3NjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''NTM3NjgsNTM3NzAsNTM3NzEsNTM3NzIsNTM3NzMsNTM3NzQsNTM3NzUsNTM3NzcsNTM3NzgsNTM3NzksNTM3ODAsNTM3ODEsNTM3ODIsNTM3ODMsNTM3ODQsNTM3ODUsNTM3ODYsNTM3ODcsNTM3ODgsNTM3ODksNTM3OTAsNTM3OTEsNTM3OTIsNTM3OTMsNTM3OTQsNTM3OTUsNTM3OTYsNTM3''@;'; put 'put ''OTcsNTM3OTgsNTM3OTksNTM4MDAsNTM4MDEsNDc0NjcsNDc0NjksNDc0NzYsNDc0NzcsNDc0ODAsNDc0ODQsNDc0OTIsNDc0OTMsNDc0OTUsNDc0OTcsNDc0OTgsNDc1MDEsNDc1MDIsNDc1MzIsNDc1MzMsNDc1MzYsNDc1NDAsNDc1NDgsNDc1NDksNDc1NTEsNDc1NTMsNDc1NjAsNDc1NjEs''@;'; put 'put ''NDc1NjQsNDc1NjYsNDc1NjcsNDc1NjgsNDc1NjksNDc1NzAsNDc1NzYsNDc1NzcsNDc1NzksNDc1ODEsNDc1ODIsNDc1ODUsNDc1ODcsNDc1ODgsNDc1ODksNDc1OTIsNDc1OTYsNDc2MDQsNDc2MDUsNDc2MDcsNDc2MDgsNDc2MDksNDc2MTAsNDc2MTYsNDc2MTcsNDc2MjQsNDc2MzcsNDc2''@;'; put 'put ''NzIsNDc2NzMsNDc2NzYsNDc2ODAsNDc2ODIsNDc2ODgsNDc2ODksNDc2OTEsNDc2OTMsNDc2OTQsNDc2OTksNDc3MDAsNDc3MDEsNDc3MDQsNDc3MDgsNDc3MTYsNDc3MTcsNDc3MTksNDc3MjAsNDc3MjEsNDc3MjgsNDc3MjksNDc3MzIsNDc3MzYsNDc3NDcsNDc3NDgsNDc3NDksNDc3NTEs''@;'; put 'put ''NDc3NTYsNDc3ODQsNDc3ODUsNDc3ODcsNDc3ODgsNDc3OTIsNDc3OTQsNDc4MDAsNDc4MDEsNDc4MDMsNDc4MDUsNDc4MTIsNDc4MTYsNDc4MzIsNDc4MzMsNDc4NjgsNTM4MDIsNTM4MDMsNTM4MDYsNTM4MDcsNTM4MDksNTM4MTAsNTM4MTEsNTM4MTMsNTM4MTQsNTM4MTUsNTM4MTYsNTM4''@;'; put 'put ''MTcsNTM4MTgsNTM4MTksNTM4MjIsNTM4MjQsNTM4MjYsNTM4MjcsNTM4MjgsNTM4MjksNTM4MzAsNTM4MzEsNTM4MzMsNTM4MzQsNTM4MzUsNTM4MzYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM4MzcsNTM4MzgsNTM4MzksNTM4NDAsNTM4NDEsNTM4NDIsNTM4NDMsNTM4NDQs''@;'; put 'put ''NTM4NDUsNTM4NDYsNTM4NDcsNTM4NDgsNTM4NDksNTM4NTAsNTM4NTEsNTM4NTMsNTM4NTQsNTM4NTUsNTM4NTYsNTM4NTcsNTM4NTgsNTM4NTksNTM4NjEsNTM4NjIsNTM4NjMsNTM4NjQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM4NjUsNTM4NjYsNTM4NjcsNTM4NjgsNTM4''@;'; put 'put ''NjksNTM4NzAsNTM4NzEsNTM4NzIsNTM4NzMsNTM4NzQsNTM4NzUsNTM4NzYsNTM4NzcsNTM4NzgsNTM4NzksNTM4ODAsNTM4ODEsNTM4ODIsNTM4ODMsNTM4ODQsNTM4ODUsNTM4ODYsNTM4ODcsNTM4OTAsNTM4OTEsNTM4OTMsNTM4OTQsNTM4OTUsNTM4OTcsNTM4OTgsNTM4OTksNTM5MDAs''@;'; put 'put ''NDc4NzIsNDc4NzYsNDc4ODUsNDc4ODcsNDc4ODksNDc4OTYsNDc5MDAsNDc5MDQsNDc5MTMsNDc5MTUsNDc5MjQsNDc5MjUsNDc5MjYsNDc5MjgsNDc5MzEsNDc5MzIsNDc5MzMsNDc5MzQsNDc5NDAsNDc5NDEsNDc5NDMsNDc5NDUsNDc5NDksNDc5NTEsNDc5NTIsNDc5NTYsNDc5NjAsNDc5''@;'; put 'put ''NjksNDc5NzEsNDc5ODAsNDgwMDgsNDgwMTIsNDgwMTYsNDgwMzYsNDgwNDAsNDgwNDQsNDgwNTIsNDgwNTUsNDgwNjQsNDgwNjgsNDgwNzIsNDgwODAsNDgwODMsNDgxMjAsNDgxMjEsNDgxMjQsNDgxMjcsNDgxMjgsNDgxMzAsNDgxMzYsNDgxMzcsNDgxMzksNDgxNDAsNDgxNDEsNDgxNDMs''@;'; put 'put ''NDgxNDUsNDgxNDgsNDgxNDksNDgxNTAsNDgxNTEsNDgxNTIsNDgxNTUsNDgxNTYsNDgxNTcsNDgxNTgsNDgxNTksNDgxNjQsNDgxNjUsNDgxNjcsNDgxNjksNDgxNzMsNDgxNzYsNDgxNzcsNDgxODAsNDgxODQsNDgxOTIsNDgxOTMsNDgxOTUsNDgxOTYsNDgxOTcsNDgyMDEsNDgyMDQsNDgy''@;'; put 'put ''MDUsNDgyMDgsNDgyMjEsNDgyNjAsNDgyNjEsNDgyNjQsNDgyNjcsNDgyNjgsNDgyNzAsNDgyNzYsNDgyNzcsNDgyNzksNTM5MDEsNTM5MDIsNTM5MDMsNTM5MDYsNTM5MDcsNTM5MDgsNTM5MTAsNTM5MTEsNTM5MTIsNTM5MTMsNTM5MTQsNTM5MTUsNTM5MTcsNTM5MTgsNTM5MTksNTM5MjEs''@;'; put 'put ''NTM5MjIsNTM5MjMsNTM5MjUsNTM5MjYsNTM5MjcsNTM5MjgsNTM5MjksNTM5MzAsNTM5MzEsNTM5MzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM5MzQsNTM5MzUsNTM5MzYsNTM5MzgsNTM5MzksNTM5NDAsNTM5NDEsNTM5NDIsNTM5NDMsNTM5NDYsNTM5NDcsNTM5NDksNTM5''@;'; put 'put ''NTAsNTM5NTMsNTM5NTUsNTM5NTYsNTM5NTcsNTM5NTgsNTM5NTksNTM5NjIsNTM5NjQsNTM5NjUsNTM5NjYsNTM5NjcsNTM5NjgsNTM5NjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM5NzAsNTM5NzEsNTM5NzMsNTM5NzQsNTM5NzUsNTM5NzcsNTM5NzgsNTM5NzksNTM5ODEs''@;'; put 'put ''NTM5ODIsNTM5ODMsNTM5ODQsNTM5ODUsNTM5ODYsNTM5ODcsNTM5OTAsNTM5OTEsNTM5OTIsNTM5OTMsNTM5OTQsNTM5OTUsNTM5OTYsNTM5OTcsNTM5OTgsNTM5OTksNTQwMDIsNTQwMDMsNTQwMDUsNTQwMDYsNTQwMDcsNTQwMDksNTQwMTAsNDgyODEsNDgyODIsNDgyODgsNDgyODksNDgy''@;'; put 'put ''OTIsNDgyOTUsNDgyOTYsNDgzMDQsNDgzMDUsNDgzMDcsNDgzMDgsNDgzMDksNDgzMTYsNDgzMTcsNDgzMjAsNDgzMjQsNDgzMzMsNDgzMzUsNDgzMzYsNDgzMzcsNDgzNDEsNDgzNDQsNDgzNDgsNDgzNzIsNDgzNzMsNDgzNzQsNDgzNzYsNDgzODAsNDgzODgsNDgzODksNDgzOTEsNDgzOTMs''@;'; put 'put ''NDg0MDAsNDg0MDQsNDg0MjAsNDg0MjgsNDg0NDgsNDg0NTYsNDg0NTcsNDg0NjAsNDg0NjQsNDg0NzIsNDg0NzMsNDg0ODQsNDg0ODgsNDg1MTIsNDg1MTMsNDg1MTYsNDg1MTksNDg1MjAsNDg1MjEsNDg1MjIsNDg1MjgsNDg1MjksNDg1MzEsNDg1MzMsNDg1MzcsNDg1MzgsNDg1NDAsNDg1''@;'; put 'put ''NDgsNDg1NjAsNDg1NjgsNDg1OTYsNDg1OTcsNDg2MDAsNDg2MDQsNDg2MTcsNDg2MjQsNDg2MjgsNDg2MzIsNDg2NDAsNDg2NDMsNDg2NDUsNDg2NTIsNDg2NTMsNDg2NTYsNDg2NjAsNDg2NjgsNDg2NjksNDg2NzEsNDg3MDgsNDg3MDksNDg3MTIsNDg3MTYsNDg3MTgsNDg3MjQsNDg3MjUs''@;'; put 'put ''NDg3MjcsNDg3MjksNDg3MzAsNDg3MzEsNDg3MzYsNDg3MzcsNDg3NDAsNTQwMTEsNTQwMTIsNTQwMTMsNTQwMTQsNTQwMTUsNTQwMTgsNTQwMjAsNTQwMjIsNTQwMjMsNTQwMjQsNTQwMjUsNTQwMjYsNTQwMjcsNTQwMzEsNTQwMzMsNTQwMzQsNTQwMzUsNTQwMzcsNTQwMzksNTQwNDAsNTQw''@;'; put 'put ''NDEsNTQwNDIsNTQwNDMsNTQwNDYsNTQwNTAsNTQwNTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQwNTIsNTQwNTQsNTQwNTUsNTQwNTgsNTQwNTksNTQwNjEsNTQwNjIsNTQwNjMsNTQwNjUsNTQwNjYsNTQwNjcsNTQwNjgsNTQwNjksNTQwNzAsNTQwNzEsNTQwNzQsNTQwNzgs''@;'; put 'put ''NTQwNzksNTQwODAsNTQwODEsNTQwODIsNTQwODMsNTQwODYsNTQwODcsNTQwODgsNTQwODksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQwOTAsNTQwOTEsNTQwOTIsNTQwOTMsNTQwOTQsNTQwOTUsNTQwOTYsNTQwOTcsNTQwOTgsNTQwOTksNTQxMDAsNTQxMDEsNTQxMDIsNTQx''@;'; put 'put ''MDMsNTQxMDQsNTQxMDUsNTQxMDYsNTQxMDcsNTQxMDgsNTQxMDksNTQxMTAsNTQxMTEsNTQxMTIsNTQxMTMsNTQxMTQsNTQxMTUsNTQxMTYsNTQxMTcsNTQxMTgsNTQxMTksNTQxMjAsNTQxMjEsNDg3NDQsNDg3NDYsNDg3NTIsNDg3NTMsNDg3NTUsNDg3NTYsNDg3NTcsNDg3NjMsNDg3NjQs''@;'; put 'put ''NDg3NjUsNDg3NjgsNDg3NzIsNDg3ODAsNDg3ODEsNDg3ODMsNDg3ODQsNDg3ODUsNDg3OTIsNDg3OTMsNDg4MDgsNDg4NDgsNDg4NDksNDg4NTIsNDg4NTUsNDg4NTYsNDg4NjQsNDg4NjcsNDg4NjgsNDg4NjksNDg4NzYsNDg4OTcsNDg5MDQsNDg5MDUsNDg5MjAsNDg5MjEsNDg5MjMsNDg5''@;'; put 'put ''MjQsNDg5MjUsNDg5NjAsNDg5NjEsNDg5NjQsNDg5NjgsNDg5NzYsNDg5NzcsNDg5ODEsNDkwNDQsNDkwNzIsNDkwOTMsNDkxMDAsNDkxMDEsNDkxMDQsNDkxMDgsNDkxMTYsNDkxMTksNDkxMjEsNDkyMTIsNDkyMzMsNDkyNDAsNDkyNDQsNDkyNDgsNDkyNTYsNDkyNTcsNDkyOTYsNDkyOTcs''@;'; put 'put ''NDkzMDAsNDkzMDQsNDkzMTIsNDkzMTMsNDkzMTUsNDkzMTcsNDkzMjQsNDkzMjUsNDkzMjcsNDkzMjgsNDkzMzEsNDkzMzIsNDkzMzMsNDkzMzQsNDkzNDAsNDkzNDEsNDkzNDMsNDkzNDQsNDkzNDUsNDkzNDksNDkzNTIsNDkzNTMsNDkzNTYsNDkzNjAsNDkzNjgsNDkzNjksNDkzNzEsNDkz''@;'; put 'put ''NzIsNDkzNzMsNDkzODAsNTQxMjIsNTQxMjMsNTQxMjQsNTQxMjUsNTQxMjYsNTQxMjcsNTQxMjgsNTQxMjksNTQxMzAsNTQxMzEsNTQxMzIsNTQxMzMsNTQxMzQsNTQxMzUsNTQxMzYsNTQxMzcsNTQxMzgsNTQxMzksNTQxNDIsNTQxNDMsNTQxNDUsNTQxNDYsNTQxNDcsNTQxNDksNTQxNTAs''@;'; put 'put ''NTQxNTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQxNTIsNTQxNTMsNTQxNTQsNTQxNTUsNTQxNTgsNTQxNjIsNTQxNjMsNTQxNjQsNTQxNjUsNTQxNjYsNTQxNjcsNTQxNzAsNTQxNzEsNTQxNzMsNTQxNzQsNTQxNzUsNTQxNzcsNTQxNzgsNTQxNzksNTQxODAsNTQxODEsNTQx''@;'; put 'put ''ODIsNTQxODMsNTQxODYsNTQxODgsNTQxOTAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQxOTEsNTQxOTIsNTQxOTMsNTQxOTQsNTQxOTUsNTQxOTcsNTQxOTgsNTQxOTksNTQyMDEsNTQyMDIsNTQyMDMsNTQyMDUsNTQyMDYsNTQyMDcsNTQyMDgsNTQyMDksNTQyMTAsNTQyMTEs''@;'; put 'put ''NTQyMTQsNTQyMTUsNTQyMTgsNTQyMTksNTQyMjAsNTQyMjEsNTQyMjIsNTQyMjMsNTQyMjUsNTQyMjYsNTQyMjcsNTQyMjgsNTQyMjksNTQyMzAsNDkzODEsNDkzODQsNDkzODgsNDkzOTYsNDkzOTcsNDkzOTksNDk0MDEsNDk0MDgsNDk0MTIsNDk0MTYsNDk0MjQsNDk0MjksNDk0MzYsNDk0''@;'; put 'put ''MzcsNDk0MzgsNDk0MzksNDk0NDAsNDk0NDMsNDk0NDQsNDk0NDYsNDk0NDcsNDk0NTIsNDk0NTMsNDk0NTUsNDk0NTYsNDk0NTcsNDk0NjIsNDk0NjQsNDk0NjUsNDk0NjgsNDk0NzIsNDk0ODAsNDk0ODEsNDk0ODMsNDk0ODQsNDk0ODUsNDk0OTIsNDk0OTMsNDk0OTYsNDk1MDAsNDk1MDgs''@;'; put 'put ''NDk1MDksNDk1MTEsNDk1MTIsNDk1MTMsNDk1MjAsNDk1MjQsNDk1MjgsNDk1NDEsNDk1NDgsNDk1NDksNDk1NTAsNDk1NTIsNDk1NTYsNDk1NTgsNDk1NjQsNDk1NjUsNDk1NjcsNDk1NjksNDk1NzMsNDk1NzYsNDk1NzcsNDk1ODAsNDk1ODQsNDk1OTcsNDk2MDQsNDk2MDgsNDk2MTIsNDk2''@;'; put 'put ''MjAsNDk2MjMsNDk2MjQsNDk2MzIsNDk2MzYsNDk2NDAsNDk2NDgsNDk2NDksNDk2NTEsNDk2NjAsNDk2NjEsNDk2NjQsNDk2NjgsNDk2NzYsNDk2NzcsNDk2NzksNDk2ODEsNDk2ODgsNDk2ODksNDk2OTIsNDk2OTUsNDk2OTYsNDk3MDQsNDk3MDUsNDk3MDcsNDk3MDksNTQyMzEsNTQyMzMs''@;'; put 'put ''NTQyMzQsNTQyMzUsNTQyMzYsNTQyMzcsNTQyMzgsNTQyMzksNTQyNDAsNTQyNDIsNTQyNDQsNTQyNDUsNTQyNDYsNTQyNDcsNTQyNDgsNTQyNDksNTQyNTAsNTQyNTEsNTQyNTQsNTQyNTUsNTQyNTcsNTQyNTgsNTQyNTksNTQyNjEsNTQyNjIsNTQyNjMsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsNTQyNjQsNTQyNjUsNTQyNjYsNTQyNjcsNTQyNzAsNTQyNzIsNTQyNzQsNTQyNzUsNTQyNzYsNTQyNzcsNTQyNzgsNTQyNzksNTQyODEsNTQyODIsNTQyODMsNTQyODQsNTQyODUsNTQyODYsNTQyODcsNTQyODgsNTQyODksNTQyOTAsNTQyOTEsNTQyOTIsNTQyOTMsNTQyOTQs''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQyOTUsNTQyOTYsNTQyOTcsNTQyOTgsNTQyOTksNTQzMDAsNTQzMDIsNTQzMDMsNTQzMDQsNTQzMDUsNTQzMDYsNTQzMDcsNTQzMDgsNTQzMDksNTQzMTAsNTQzMTEsNTQzMTIsNTQzMTMsNTQzMTQsNTQzMTUsNTQzMTYsNTQzMTcsNTQz''@;'; put 'put ''MTgsNTQzMTksNTQzMjAsNTQzMjEsNTQzMjIsNTQzMjMsNTQzMjQsNTQzMjUsNTQzMjYsNTQzMjcsNDk3MTEsNDk3MTMsNDk3MTQsNDk3MTYsNDk3MzYsNDk3NDQsNDk3NDUsNDk3NDgsNDk3NTIsNDk3NjAsNDk3NjUsNDk3NzIsNDk3NzMsNDk3NzYsNDk3ODAsNDk3ODgsNDk3ODksNDk3OTEs''@;'; put 'put ''NDk3OTMsNDk4MDAsNDk4MDEsNDk4MDgsNDk4MTYsNDk4MTksNDk4MjEsNDk4MjgsNDk4MjksNDk4MzIsNDk4MzYsNDk4MzcsNDk4NDQsNDk4NDUsNDk4NDcsNDk4NDksNDk4ODQsNDk4ODUsNDk4ODgsNDk4OTEsNDk4OTIsNDk4OTksNDk5MDAsNDk5MDEsNDk5MDMsNDk5MDUsNDk5MTAsNDk5''@;'; put 'put ''MTIsNDk5MTMsNDk5MTUsNDk5MTYsNDk5MjAsNDk5MjgsNDk5MjksNDk5MzIsNDk5MzMsNDk5MzksNDk5NDAsNDk5NDEsNDk5NDQsNDk5NDgsNDk5NTYsNDk5NTcsNDk5NjAsNDk5NjEsNDk5ODksNTAwMjQsNTAwMjUsNTAwMjgsNTAwMzIsNTAwMzQsNTAwNDAsNTAwNDEsNTAwNDQsNTAwNDUs''@;'; put 'put ''NTAwNTIsNTAwNTYsNTAwNjAsNTAxMTIsNTAxMzYsNTAxMzcsNTAxNDAsNTAxNDMsNTAxNDQsNTAxNDYsNTAxNTIsNTAxNTMsNTAxNTcsNTAxNjQsNTAxNjUsNTAxNjgsNTAxODQsNTAxOTIsNTAyMTIsNTAyMjAsNTAyMjQsNTQzMjgsNTQzMjksNTQzMzAsNTQzMzEsNTQzMzIsNTQzMzMsNTQz''@;'; put 'put ''MzQsNTQzMzUsNTQzMzcsNTQzMzgsNTQzMzksNTQzNDEsNTQzNDIsNTQzNDMsNTQzNDQsNTQzNDUsNTQzNDYsNTQzNDcsNTQzNDgsNTQzNDksNTQzNTAsNTQzNTEsNTQzNTIsNTQzNTMsNTQzNTQsNTQzNTUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQzNTYsNTQzNTcsNTQzNTgs''@;'; put 'put ''NTQzNTksNTQzNjAsNTQzNjEsNTQzNjIsNTQzNjMsNTQzNjUsNTQzNjYsNTQzNjcsNTQzNjksNTQzNzAsNTQzNzEsNTQzNzMsNTQzNzQsNTQzNzUsNTQzNzYsNTQzNzcsNTQzNzgsNTQzNzksNTQzODAsNTQzODIsNTQzODQsNTQzODUsNTQzODYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsNTQzODcsNTQzODgsNTQzODksNTQzOTAsNTQzOTEsNTQzOTQsNTQzOTUsNTQzOTcsNTQzOTgsNTQ0MDEsNTQ0MDMsNTQ0MDQsNTQ0MDUsNTQ0MDYsNTQ0MDcsNTQ0MTAsNTQ0MTIsNTQ0MTQsNTQ0MTUsNTQ0MTYsNTQ0MTcsNTQ0MTgsNTQ0MTksNTQ0MjEsNTQ0MjIsNTQ0MjMsNTQ0MjQs''@;'; put 'put ''NTQ0MjUsNTQ0MjYsNTQ0MjcsNTQ0MjgsNTQ0MjksNTAyMjgsNTAyMzYsNTAyMzcsNTAyNDgsNTAyNzYsNTAyNzcsNTAyODAsNTAyODQsNTAyOTIsNTAyOTMsNTAyOTcsNTAzMDQsNTAzMjQsNTAzMzIsNTAzNjAsNTAzNjQsNTA0MDksNTA0MTYsNTA0MTcsNTA0MjAsNTA0MjQsNTA0MjYsNTA0''@;'; put 'put ''MzEsNTA0MzIsNTA0MzMsNTA0NDQsNTA0NDgsNTA0NTIsNTA0NjAsNTA0NzIsNTA0NzMsNTA0NzYsNTA0ODAsNTA0ODgsNTA0ODksNTA0OTEsNTA0OTMsNTA1MDAsNTA1MDEsNTA1MDQsNTA1MDUsNTA1MDYsNTA1MDgsNTA1MDksNTA1MTAsNTA1MTUsNTA1MTYsNTA1MTcsNTA1MTksNTA1MjAs''@;'; put 'put ''NTA1MjEsNTA1MjUsNTA1MjYsNTA1MjgsNTA1MjksNTA1MzIsNTA1MzYsNTA1NDQsNTA1NDUsNTA1NDcsNTA1NDgsNTA1NDksNTA1NTYsNTA1NTcsNTA1NjAsNTA1NjQsNTA1NjcsNTA1NzIsNTA1NzMsNTA1NzUsNTA1NzcsNTA1ODEsNTA1ODMsNTA1ODQsNTA1ODgsNTA1OTIsNTA2MDEsNTA2''@;'; put 'put ''MTIsNTA2MTMsNTA2MTYsNTA2MTcsNTA2MTksNTA2MjAsNTA2MjEsNTA2MjIsNTA2MjgsNTA2MjksNTA2MzAsNTA2MzEsNTA2MzIsNTA2MzMsNTA2MzQsNTA2MzYsNTA2MzgsNTQ0MzAsNTQ0MzEsNTQ0MzIsNTQ0MzMsNTQ0MzQsNTQ0MzUsNTQ0MzYsNTQ0MzcsNTQ0MzgsNTQ0MzksNTQ0NDAs''@;'; put 'put ''NTQ0NDIsNTQ0NDMsNTQ0NDQsNTQ0NDUsNTQ0NDYsNTQ0NDcsNTQ0NDgsNTQ0NDksNTQ0NTAsNTQ0NTEsNTQ0NTIsNTQ0NTMsNTQ0NTQsNTQ0NTUsNTQ0NTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ0NTcsNTQ0NTgsNTQ0NTksNTQ0NjAsNTQ0NjEsNTQ0NjIsNTQ0NjMsNTQ0''@;'; put 'put ''NjQsNTQ0NjUsNTQ0NjYsNTQ0NjcsNTQ0NjgsNTQ0NjksNTQ0NzAsNTQ0NzEsNTQ0NzIsNTQ0NzMsNTQ0NzQsNTQ0NzUsNTQ0NzcsNTQ0NzgsNTQ0NzksNTQ0ODEsNTQ0ODIsNTQ0ODMsNTQ0ODUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ0ODYsNTQ0ODcsNTQ0ODgsNTQ0ODks''@;'; put 'put ''NTQ0OTAsNTQ0OTEsNTQ0OTMsNTQ0OTQsNTQ0OTYsNTQ0OTcsNTQ0OTgsNTQ0OTksNTQ1MDAsNTQ1MDEsNTQ1MDIsNTQ1MDMsNTQ1MDUsNTQ1MDYsNTQ1MDcsNTQ1MDksNTQ1MTAsNTQ1MTEsNTQ1MTMsNTQ1MTQsNTQ1MTUsNTQ1MTYsNTQ1MTcsNTQ1MTgsNTQ1MTksNTQ1MjEsNTQ1MjIsNTQ1''@;'; put 'put ''MjQsNTA2NDAsNTA2NDEsNTA2NDQsNTA2NDgsNTA2NTYsNTA2NTcsNTA2NTksNTA2NjEsNTA2NjgsNTA2NjksNTA2NzAsNTA2NzIsNTA2NzYsNTA2NzgsNTA2NzksNTA2ODQsNTA2ODUsNTA2ODYsNTA2ODcsNTA2ODgsNTA2ODksNTA2OTMsNTA2OTQsNTA2OTUsNTA2OTYsNTA3MDAsNTA3MDQs''@;'; put 'put ''NTA3MTIsNTA3MTMsNTA3MTUsNTA3MTYsNTA3MjQsNTA3MjUsNTA3MjgsNTA3MzIsNTA3MzMsNTA3MzQsNTA3MzYsNTA3MzksNTA3NDAsNTA3NDEsNTA3NDMsNTA3NDUsNTA3NDcsNTA3NTIsNTA3NTMsNTA3NTYsNTA3NjAsNTA3NjgsNTA3NjksNTA3NzEsNTA3NzIsNTA3NzMsNTA3ODAsNTA3''@;'; put 'put ''ODEsNTA3ODQsNTA3OTYsNTA3OTksNTA4MDEsNTA4MDgsNTA4MDksNTA4MTIsNTA4MTYsNTA4MjQsNTA4MjUsNTA4MjcsNTA4MjksNTA4MzYsNTA4MzcsNTA4NDAsNTA4NDQsNTA4NTIsNTA4NTMsNTA4NTUsNTA4NTcsNTA4NjQsNTA4NjUsNTA4NjgsNTA4NzIsNTA4NzMsNTA4NzQsNTA4ODAs''@;'; put 'put ''NTA4ODEsNTA4ODMsNTA4ODUsNTA4OTIsNTA4OTMsNTA4OTYsNTA5MDAsNTA5MDgsNTA5MDksNTA5MTIsNTA5MTMsNTA5MjAsNTQ1MjYsNTQ1MjcsNTQ1MjgsNTQ1MjksNTQ1MzAsNTQ1MzEsNTQ1MzMsNTQ1MzQsNTQ1MzUsNTQ1MzcsNTQ1MzgsNTQ1MzksNTQ1NDEsNTQ1NDIsNTQ1NDMsNTQ1''@;'; put 'put ''NDQsNTQ1NDUsNTQ1NDYsNTQ1NDcsNTQ1NTAsNTQ1NTIsNTQ1NTMsNTQ1NTQsNTQ1NTUsNTQ1NTYsNTQ1NTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ1NTgsNTQ1NTksNTQ1NjAsNTQ1NjEsNTQ1NjIsNTQ1NjMsNTQ1NjQsNTQ1NjUsNTQ1NjYsNTQ1NjcsNTQ1NjgsNTQ1Njks''@;'; put 'put ''NTQ1NzAsNTQ1NzEsNTQ1NzIsNTQ1NzMsNTQ1NzQsNTQ1NzUsNTQ1NzYsNTQ1NzcsNTQ1NzgsNTQ1NzksNTQ1ODAsNTQ1ODEsNTQ1ODIsNTQ1ODMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ1ODQsNTQ1ODUsNTQ1ODYsNTQ1ODcsNTQ1OTAsNTQ1OTEsNTQ1OTMsNTQ1OTQsNTQ1''@;'; put 'put ''OTUsNTQ1OTcsNTQ1OTgsNTQ1OTksNTQ2MDAsNTQ2MDEsNTQ2MDIsNTQ2MDMsNTQ2MDYsNTQ2MDgsNTQ2MTAsNTQ2MTEsNTQ2MTIsNTQ2MTMsNTQ2MTQsNTQ2MTUsNTQ2MTgsNTQ2MTksNTQ2MjEsNTQ2MjIsNTQ2MjMsNTQ2MjUsNTQ2MjYsNTQ2MjcsNTA5MjEsNTA5MjQsNTA5MjgsNTA5MzYs''@;'; put 'put ''NTA5MzcsNTA5NDEsNTA5NDgsNTA5NDksNTA5NTIsNTA5NTYsNTA5NjQsNTA5NjUsNTA5NjcsNTA5NjksNTA5NzYsNTA5NzcsNTA5ODAsNTA5ODQsNTA5OTIsNTA5OTMsNTA5OTUsNTA5OTcsNTA5OTksNTEwMDQsNTEwMDUsNTEwMDgsNTEwMTIsNTEwMTgsNTEwMjAsNTEwMjEsNTEwMjMsNTEw''@;'; put 'put ''MjUsNTEwMjYsNTEwMjcsNTEwMjgsNTEwMjksNTEwMzAsNTEwMzEsNTEwMzIsNTEwMzYsNTEwNDAsNTEwNDgsNTEwNTEsNTEwNjAsNTEwNjEsNTEwNjQsNTEwNjgsNTEwNjksNTEwNzAsNTEwNzUsNTEwNzYsNTEwNzcsNTEwNzksNTEwODAsNTEwODEsNTEwODIsNTEwODYsNTEwODgsNTEwODks''@;'; put 'put ''NTEwOTIsNTEwOTQsNTEwOTUsNTEwOTYsNTEwOTgsNTExMDQsNTExMDUsNTExMDcsNTExMDgsNTExMDksNTExMTAsNTExMTYsNTExMTcsNTExMjAsNTExMjQsNTExMzIsNTExMzMsNTExMzUsNTExMzYsNTExMzcsNTExNDQsNTExNDUsNTExNDgsNTExNTAsNTExNTIsNTExNjAsNTExNjUsNTEx''@;'; put 'put ''NzIsNTExNzYsNTExODAsNTEyMDAsNTEyMDEsNTEyMDQsNTEyMDgsNTEyMTAsNTQ2MjgsNTQ2MzAsNTQ2MzEsNTQ2MzQsNTQ2MzYsNTQ2MzgsNTQ2MzksNTQ2NDAsNTQ2NDEsNTQ2NDIsNTQ2NDMsNTQ2NDYsNTQ2NDcsNTQ2NDksNTQ2NTAsNTQ2NTEsNTQ2NTMsNTQ2NTQsNTQ2NTUsNTQ2NTYs''@;'; put 'put ''NTQ2NTcsNTQ2NTgsNTQ2NTksNTQ2NjIsNTQ2NjYsNTQ2NjcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ2NjgsNTQ2NjksNTQ2NzAsNTQ2NzEsNTQ2NzMsNTQ2NzQsNTQ2NzUsNTQ2NzYsNTQ2NzcsNTQ2NzgsNTQ2NzksNTQ2ODAsNTQ2ODEsNTQ2ODIsNTQ2ODMsNTQ2ODQsNTQ2''@;'; put 'put ''ODUsNTQ2ODYsNTQ2ODcsNTQ2ODgsNTQ2ODksNTQ2OTAsNTQ2OTEsNTQ2OTIsNTQ2OTQsNTQ2OTUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ2OTYsNTQ2OTcsNTQ2OTgsNTQ2OTksNTQ3MDAsNTQ3MDEsNTQ3MDIsNTQ3MDMsNTQ3MDQsNTQ3MDUsNTQ3MDYsNTQ3MDcsNTQ3MDgs''@;'; put 'put ''NTQ3MDksNTQ3MTAsNTQ3MTEsNTQ3MTIsNTQ3MTMsNTQ3MTQsNTQ3MTUsNTQ3MTYsNTQ3MTcsNTQ3MTgsNTQ3MTksNTQ3MjAsNTQ3MjEsNTQ3MjIsNTQ3MjMsNTQ3MjQsNTQ3MjUsNTQ3MjYsNTQ3MjcsNTEyMTYsNTEyMTcsNTEyMTksNTEyMjEsNTEyMjIsNTEyMjgsNTEyMjksNTEyMzIsNTEy''@;'; put 'put ''MzYsNTEyNDQsNTEyNDUsNTEyNDcsNTEyNDksNTEyNTYsNTEyNjAsNTEyNjQsNTEyNzIsNTEyNzMsNTEyNzYsNTEyNzcsNTEyODQsNTEzMTIsNTEzMTMsNTEzMTYsNTEzMjAsNTEzMjIsNTEzMjgsNTEzMjksNTEzMzEsNTEzMzMsNTEzMzQsNTEzMzUsNTEzMzksNTEzNDAsNTEzNDEsNTEzNDgs''@;'; put 'put ''NTEzNTcsNTEzNTksNTEzNjEsNTEzNjgsNTEzODgsNTEzODksNTEzOTYsNTE0MDAsNTE0MDQsNTE0MTIsNTE0MTMsNTE0MTUsNTE0MTcsNTE0MjQsNTE0MjUsNTE0MjgsNTE0NDUsNTE0NTIsNTE0NTMsNTE0NTYsNTE0NjAsNTE0NjEsNTE0NjIsNTE0NjgsNTE0NjksNTE0NzEsNTE0NzMsNTE0''@;'; put 'put ''ODAsNTE1MDAsNTE1MDgsNTE1MzYsNTE1MzcsNTE1NDAsNTE1NDQsNTE1NTIsNTE1NTMsNTE1NTUsNTE1NjQsNTE1NjgsNTE1NzIsNTE1ODAsNTE1OTIsNTE1OTMsNTE1OTYsNTE2MDAsNTE2MDgsNTE2MDksNTE2MTEsNTE2MTMsNTE2NDgsNTE2NDksNTE2NTIsNTE2NTUsNTE2NTYsNTE2NTgs''@;'; put 'put ''NTE2NjQsNTE2NjUsNTE2NjcsNTQ3MzAsNTQ3MzEsNTQ3MzMsNTQ3MzQsNTQ3MzUsNTQ3MzcsNTQ3MzksNTQ3NDAsNTQ3NDEsNTQ3NDIsNTQ3NDMsNTQ3NDYsNTQ3NDgsNTQ3NTAsNTQ3NTEsNTQ3NTIsNTQ3NTMsNTQ3NTQsNTQ3NTUsNTQ3NTgsNTQ3NTksNTQ3NjEsNTQ3NjIsNTQ3NjMsNTQ3''@;'; put 'put ''NjUsNTQ3NjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ3NjcsNTQ3NjgsNTQ3NjksNTQ3NzAsNTQ3NzEsNTQ3NzQsNTQ3NzYsNTQ3NzgsNTQ3NzksNTQ3ODAsNTQ3ODEsNTQ3ODIsNTQ3ODMsNTQ3ODYsNTQ3ODcsNTQ3ODksNTQ3OTAsNTQ3OTEsNTQ3OTMsNTQ3OTQsNTQ3OTUs''@;'; put 'put ''NTQ3OTYsNTQ3OTcsNTQ3OTgsNTQ3OTksNTQ4MDIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTQ4MDYsNTQ4MDcsNTQ4MDgsNTQ4MDksNTQ4MTAsNTQ4MTEsNTQ4MTMsNTQ4MTQsNTQ4MTUsNTQ4MTcsNTQ4MTgsNTQ4MTksNTQ4MjEsNTQ4MjIsNTQ4MjMsNTQ4MjQsNTQ4MjUsNTQ4''@;'; put 'put ''MjYsNTQ4MjcsNTQ4MjgsNTQ4MzAsNTQ4MzEsNTQ4MzIsNTQ4MzMsNTQ4MzQsNTQ4MzUsNTQ4MzYsNTQ4MzcsNTQ4MzgsNTQ4MzksNTQ4NDIsNTQ4NDMsNTE2NjksNTE2NzAsNTE2NzMsNTE2NzQsNTE2NzYsNTE2NzcsNTE2ODAsNTE2ODIsNTE2ODQsNTE2ODcsNTE2OTIsNTE2OTMsNTE2OTUs''@;'; put 'put ''NTE2OTYsNTE2OTcsNTE3MDQsNTE3MDUsNTE3MDgsNTE3MTIsNTE3MjAsNTE3MjEsNTE3MjMsNTE3MjQsNTE3MjUsNTE3MzIsNTE3MzYsNTE3NTMsNTE3ODgsNTE3ODksNTE3OTIsNTE3OTYsNTE4MDQsNTE4MDUsNTE4MDcsNTE4MDgsNTE4MDksNTE4MTYsNTE4MzcsNTE4NDQsNTE4NjQsNTE5''@;'; put 'put ''MDAsNTE5MDEsNTE5MDQsNTE5MDgsNTE5MTYsNTE5MTcsNTE5MTksNTE5MjEsNTE5MjMsNTE5MjgsNTE5MjksNTE5MzYsNTE5NDgsNTE5NTYsNTE5NzYsNTE5ODQsNTE5ODgsNTE5OTIsNTJlMyw1MjAwMSw1MjAzMyw1MjA0MCw1MjA0MSw1MjA0NCw1MjA0OCw1MjA1Niw1MjA1Nyw1MjA2MSw1''@;'; put 'put ''MjA2OCw1MjA4OCw1MjA4OSw1MjEyNCw1MjE1Miw1MjE4MCw1MjE5Niw1MjE5OSw1MjIwMSw1MjIzNiw1MjIzNyw1MjI0MCw1MjI0NCw1MjI1Miw1MjI1Myw1MjI1Nyw1MjI1OCw1MjI2Myw1MjI2NCw1MjI2NSw1MjI2OCw1MjI3MCw1MjI3Miw1MjI4MCw1MjI4MSw1MjI4Myw1NDg0NSw1NDg0''@;'; put 'put ''Niw1NDg0Nyw1NDg0OSw1NDg1MCw1NDg1MSw1NDg1Miw1NDg1NCw1NDg1NSw1NDg1OCw1NDg2MCw1NDg2Miw1NDg2Myw1NDg2NCw1NDg2Niw1NDg2Nyw1NDg3MCw1NDg3MSw1NDg3Myw1NDg3NCw1NDg3NSw1NDg3Nyw1NDg3OCw1NDg3OSw1NDg4MCw1NDg4MSxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCw1NDg4Miw1NDg4Myw1NDg4NCw1NDg4NSw1NDg4Niw1NDg4OCw1NDg5MCw1NDg5MSw1NDg5Miw1NDg5Myw1NDg5NCw1NDg5NSw1NDg5OCw1NDg5OSw1NDkwMSw1NDkwMiw1NDkwMyw1NDkwNCw1NDkwNSw1NDkwNiw1NDkwNyw1NDkwOCw1NDkwOSw1NDkxMCw1NDkxMSw1NDkx''@;'; put 'put ''MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDkxMyw1NDkxNCw1NDkxNiw1NDkxOCw1NDkxOSw1NDkyMCw1NDkyMSw1NDkyMiw1NDkyMyw1NDkyNiw1NDkyNyw1NDkyOSw1NDkzMCw1NDkzMSw1NDkzMyw1NDkzNCw1NDkzNSw1NDkzNiw1NDkzNyw1NDkzOCw1NDkzOSw1NDk0MCw1''@;'; put 'put ''NDk0Miw1NDk0NCw1NDk0Niw1NDk0Nyw1NDk0OCw1NDk0OSw1NDk1MCw1NDk1MSw1NDk1Myw1NDk1NCw1MjI4NCw1MjI4NSw1MjI4Niw1MjI5Miw1MjI5Myw1MjI5Niw1MjMwMCw1MjMwOCw1MjMwOSw1MjMxMSw1MjMxMiw1MjMxMyw1MjMyMCw1MjMyNCw1MjMyNiw1MjMyOCw1MjMzNiw1MjM0''@;'; put 'put ''MSw1MjM3Niw1MjM3Nyw1MjM4MCw1MjM4NCw1MjM5Miw1MjM5Myw1MjM5NSw1MjM5Niw1MjM5Nyw1MjQwNCw1MjQwNSw1MjQwOCw1MjQxMiw1MjQyMCw1MjQyMSw1MjQyMyw1MjQyNSw1MjQzMiw1MjQzNiw1MjQ1Miw1MjQ2MCw1MjQ2NCw1MjQ4MSw1MjQ4OCw1MjQ4OSw1MjQ5Miw1MjQ5Niw1''@;'; put 'put ''MjUwNCw1MjUwNSw1MjUwNyw1MjUwOSw1MjUxNiw1MjUyMCw1MjUyNCw1MjUzNyw1MjU3Miw1MjU3Niw1MjU4MCw1MjU4OCw1MjU4OSw1MjU5MSw1MjU5Myw1MjYwMCw1MjYxNiw1MjYyOCw1MjYyOSw1MjYzMiw1MjYzNiw1MjY0NCw1MjY0NSw1MjY0Nyw1MjY0OSw1MjY1Niw1MjY3Niw1MjY4''@;'; put 'put ''NCw1MjY4OCw1MjcxMiw1MjcxNiw1MjcyMCw1MjcyOCw1MjcyOSw1MjczMSw1MjczMyw1Mjc0MCw1Mjc0NCw1Mjc0OCw1Mjc1Niw1Mjc2MSw1Mjc2OCw1Mjc2OSw1Mjc3Miw1Mjc3Niw1Mjc4NCw1Mjc4NSw1Mjc4Nyw1Mjc4OSw1NDk1NSw1NDk1Nyw1NDk1OCw1NDk1OSw1NDk2MSw1NDk2Miw1''@;'; put 'put ''NDk2Myw1NDk2NCw1NDk2NSw1NDk2Niw1NDk2Nyw1NDk2OCw1NDk3MCw1NDk3Miw1NDk3Myw1NDk3NCw1NDk3NSw1NDk3Niw1NDk3Nyw1NDk3OCw1NDk3OSw1NDk4Miw1NDk4Myw1NDk4NSw1NDk4Niw1NDk4NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDk4OSw1NDk5MCw1NDk5''@;'; put 'put ''MSw1NDk5Miw1NDk5NCw1NDk5NSw1NDk5Nyw1NDk5OCw1NWUzLDU1MDAyLDU1MDAzLDU1MDA0LDU1MDA1LDU1MDA2LDU1MDA3LDU1MDA5LDU1MDEwLDU1MDExLDU1MDEzLDU1MDE0LDU1MDE1LDU1MDE3LDU1MDE4LDU1MDE5LDU1MDIwLDU1MDIxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLDU1MDIyLDU1MDIzLDU1MDI1LDU1MDI2LDU1MDI3LDU1MDI4LDU1MDMwLDU1MDMxLDU1MDMyLDU1MDMzLDU1MDM0LDU1MDM1LDU1MDM4LDU1MDM5LDU1MDQxLDU1MDQyLDU1MDQzLDU1MDQ1LDU1MDQ2LDU1MDQ3LDU1MDQ4LDU1MDQ5LDU1MDUwLDU1MDUxLDU1MDUyLDU1MDUzLDU1MDU0''@;'; put 'put ''LDU1MDU1LDU1MDU2LDU1MDU4LDU1MDU5LDU1MDYwLDUyODI0LDUyODI1LDUyODI4LDUyODMxLDUyODMyLDUyODMzLDUyODQwLDUyODQxLDUyODQzLDUyODQ1LDUyODUyLDUyODUzLDUyODU2LDUyODYwLDUyODY4LDUyODY5LDUyODcxLDUyODczLDUyODgwLDUyODgxLDUyODg0LDUyODg4LDUy''@;'; put 'put ''ODk2LDUyODk3LDUyODk5LDUyOTAwLDUyOTAxLDUyOTA4LDUyOTA5LDUyOTI5LDUyOTY0LDUyOTY1LDUyOTY4LDUyOTcxLDUyOTcyLDUyOTgwLDUyOTgxLDUyOTgzLDUyOTg0LDUyOTg1LDUyOTkyLDUyOTkzLDUyOTk2LDUzZTMsNTMwMDgsNTMwMDksNTMwMTEsNTMwMTMsNTMwMjAsNTMwMjQs''@;'; put 'put ''NTMwMjgsNTMwMzYsNTMwMzcsNTMwMzksNTMwNDAsNTMwNDEsNTMwNDgsNTMwNzYsNTMwNzcsNTMwODAsNTMwODQsNTMwOTIsNTMwOTMsNTMwOTUsNTMwOTcsNTMxMDQsNTMxMDUsNTMxMDgsNTMxMTIsNTMxMjAsNTMxMjUsNTMxMzIsNTMxNTMsNTMxNjAsNTMxNjgsNTMxODgsNTMyMTYsNTMy''@;'; put 'put ''MTcsNTMyMjAsNTMyMjQsNTMyMzIsNTMyMzMsNTMyMzUsNTMyMzcsNTMyNDQsNTMyNDgsNTMyNTIsNTMyNjUsNTMyNzIsNTMyOTMsNTMzMDAsNTMzMDEsNTMzMDQsNTMzMDgsNTUwNjEsNTUwNjIsNTUwNjMsNTUwNjYsNTUwNjcsNTUwNjksNTUwNzAsNTUwNzEsNTUwNzMsNTUwNzQsNTUwNzUs''@;'; put 'put ''NTUwNzYsNTUwNzcsNTUwNzgsNTUwNzksNTUwODIsNTUwODQsNTUwODYsNTUwODcsNTUwODgsNTUwODksNTUwOTAsNTUwOTEsNTUwOTQsNTUwOTUsNTUwOTcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTUwOTgsNTUwOTksNTUxMDEsNTUxMDIsNTUxMDMsNTUxMDQsNTUxMDUsNTUx''@;'; put 'put ''MDYsNTUxMDcsNTUxMDksNTUxMTAsNTUxMTIsNTUxMTQsNTUxMTUsNTUxMTYsNTUxMTcsNTUxMTgsNTUxMTksNTUxMjIsNTUxMjMsNTUxMjUsNTUxMzAsNTUxMzEsNTUxMzIsNTUxMzMsNTUxMzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTUxMzUsNTUxMzgsNTUxNDAsNTUxNDIs''@;'; put 'put ''NTUxNDMsNTUxNDQsNTUxNDYsNTUxNDcsNTUxNDksNTUxNTAsNTUxNTEsNTUxNTMsNTUxNTQsNTUxNTUsNTUxNTcsNTUxNTgsNTUxNTksNTUxNjAsNTUxNjEsNTUxNjIsNTUxNjMsNTUxNjYsNTUxNjcsNTUxNjgsNTUxNzAsNTUxNzEsNTUxNzIsNTUxNzMsNTUxNzQsNTUxNzUsNTUxNzgsNTUx''@;'; put 'put ''NzksNTMzMTYsNTMzMTcsNTMzMTksNTMzMjEsNTMzMjgsNTMzMzIsNTMzMzYsNTMzNDQsNTMzNTYsNTMzNTcsNTMzNjAsNTMzNjQsNTMzNzIsNTMzNzMsNTMzNzcsNTM0MTIsNTM0MTMsNTM0MTYsNTM0MjAsNTM0MjgsNTM0MjksNTM0MzEsNTM0MzMsNTM0NDAsNTM0NDEsNTM0NDQsNTM0NDgs''@;'; put 'put ''NTM0NDksNTM0NTYsNTM0NTcsNTM0NTksNTM0NjAsNTM0NjEsNTM0NjgsNTM0NjksNTM0NzIsNTM0NzYsNTM0ODQsNTM0ODUsNTM0ODcsNTM0ODgsNTM0ODksNTM0OTYsNTM1MTcsNTM1NTIsNTM1NTMsNTM1NTYsNTM1NjAsNTM1NjIsNTM1NjgsNTM1NjksNTM1NzEsNTM1NzIsNTM1NzMsNTM1''@;'; put 'put ''ODAsNTM1ODEsNTM1ODQsNTM1ODgsNTM1OTYsNTM1OTcsNTM1OTksNTM2MDEsNTM2MDgsNTM2MTIsNTM2MjgsNTM2MzYsNTM2NDAsNTM2NjQsNTM2NjUsNTM2NjgsNTM2NzIsNTM2ODAsNTM2ODEsNTM2ODMsNTM2ODUsNTM2OTAsNTM2OTIsNTM2OTYsNTM3MjAsNTM3NDgsNTM3NTIsNTM3Njcs''@;'; put 'put ''NTM3NjksNTM3NzYsNTM4MDQsNTM4MDUsNTM4MDgsNTM4MTIsNTM4MjAsNTM4MjEsNTM4MjMsNTM4MjUsNTM4MzIsNTM4NTIsNTUxODEsNTUxODIsNTUxODMsNTUxODUsNTUxODYsNTUxODcsNTUxODgsNTUxODksNTUxOTAsNTUxOTEsNTUxOTQsNTUxOTYsNTUxOTgsNTUxOTksNTUyMDAsNTUy''@;'; put 'put ''MDEsNTUyMDIsNTUyMDMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNTM4NjAsNTM4ODgsNTM4ODksNTM4OTIsNTM4OTYsNTM5MDQsNTM5MDUsNTM5MDksNTM5MTYsNTM5MjAsNTM5MjQsNTM5MzIsNTM5MzcsNTM5NDQsNTM5NDUs''@;'; put 'put ''NTM5NDgsNTM5NTEsNTM5NTIsNTM5NTQsNTM5NjAsNTM5NjEsNTM5NjMsNTM5NzIsNTM5NzYsNTM5ODAsNTM5ODgsNTM5ODksNTRlMyw1NDAwMSw1NDAwNCw1NDAwOCw1NDAxNiw1NDAxNyw1NDAxOSw1NDAyMSw1NDAyOCw1NDAyOSw1NDAzMCw1NDAzMiw1NDAzNiw1NDAzOCw1NDA0NCw1NDA0''@;'; put 'put ''NSw1NDA0Nyw1NDA0OCw1NDA0OSw1NDA1Myw1NDA1Niw1NDA1Nyw1NDA2MCw1NDA2NCw1NDA3Miw1NDA3Myw1NDA3NSw1NDA3Niw1NDA3Nyw1NDA4NCw1NDA4NSw1NDE0MCw1NDE0MSw1NDE0NCw1NDE0OCw1NDE1Niw1NDE1Nyw1NDE1OSw1NDE2MCw1NDE2MSw1NDE2OCw1NDE2OSw1NDE3Miw1''@;'; put 'put ''NDE3Niw1NDE4NCw1NDE4NSw1NDE4Nyw1NDE4OSw1NDE5Niw1NDIwMCw1NDIwNCw1NDIxMiw1NDIxMyw1NDIxNiw1NDIxNyw1NDIyNCw1NDIzMiw1NDI0MSw1NDI0Myw1NDI1Miw1NDI1Myw1NDI1Niw1NDI2MCw1NDI2OCw1NDI2OSw1NDI3MSw1NDI3MyxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw1NDI4MCw1NDMwMSw1NDMzNiw1NDM0MCw1NDM2NCw1NDM2OCw1''@;'; put 'put ''NDM3Miw1NDM4MSw1NDM4Myw1NDM5Miw1NDM5Myw1NDM5Niw1NDM5OSw1NDQwMCw1NDQwMiw1NDQwOCw1NDQwOSw1NDQxMSw1NDQxMyw1NDQyMCw1NDQ0MSw1NDQ3Niw1NDQ4MCw1NDQ4NCw1NDQ5Miw1NDQ5NSw1NDUwNCw1NDUwOCw1NDUxMiw1NDUyMCw1NDUyMyw1NDUyNSw1NDUzMiw1NDUz''@;'; put 'put ''Niw1NDU0MCw1NDU0OCw1NDU0OSw1NDU1MSw1NDU4OCw1NDU4OSw1NDU5Miw1NDU5Niw1NDYwNCw1NDYwNSw1NDYwNyw1NDYwOSw1NDYxNiw1NDYxNyw1NDYyMCw1NDYyNCw1NDYyOSw1NDYzMiw1NDYzMyw1NDYzNSw1NDYzNyw1NDY0NCw1NDY0NSw1NDY0OCw1NDY1Miw1NDY2MCw1NDY2MSw1''@;'; put 'put ''NDY2Myw1NDY2NCw1NDY2NSw1NDY3Miw1NDY5Myw1NDcyOCw1NDcyOSw1NDczMiw1NDczNiw1NDczOCw1NDc0NCw1NDc0NSw1NDc0Nyw1NDc0OSw1NDc1Niw1NDc1Nyw1NDc2MCw1NDc2NCw1NDc3Miw1NDc3Myw1NDc3NSw1NDc3Nyw1NDc4NCw1NDc4NSw1NDc4OCw1NDc5Miw1NDgwMCw1NDgw''@;'; put 'put ''MSw1NDgwMyw1NDgwNCw1NDgwNSw1NDgxMiw1NDgxNixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCw1NDgyMCw1NDgyOSw1NDg0MCw1NDg0MSw1NDg0NCw1NDg0OCw1NDg1Myw1NDg1Niw1NDg1Nyw1NDg1OSw1NDg2MSw1NDg2NSw1NDg2OCw1NDg2OSw1NDg3Miw1NDg3Niw1NDg4Nyw1NDg4OSw1NDg5Niw1NDg5Nyw1NDkwMCw1NDkxNSw1NDkxNyw1NDkyNCw1NDky''@;'; put 'put ''NSw1NDkyOCw1NDkzMiw1NDk0MSw1NDk0Myw1NDk0NSw1NDk1Miw1NDk1Niw1NDk2MCw1NDk2OSw1NDk3MSw1NDk4MCw1NDk4MSw1NDk4NCw1NDk4OCw1NDk5Myw1NDk5Niw1NDk5OSw1NTAwMSw1NTAwOCw1NTAxMiw1NTAxNiw1NTAyNCw1NTAyOSw1NTAzNiw1NTAzNyw1NTA0MCw1NTA0NCw1''@;'; put 'put ''NTA1Nyw1NTA2NCw1NTA2NSw1NTA2OCw1NTA3Miw1NTA4MCw1NTA4MSw1NTA4Myw1NTA4NSw1NTA5Miw1NTA5Myw1NTA5Niw1NTEwMCw1NTEwOCw1NTExMSw1NTExMyw1NTEyMCw1NTEyMSw1NTEyNCw1NTEyNiw1NTEyNyw1NTEyOCw1NTEyOSw1NTEzNiw1NTEzNyw1NTEzOSw1NTE0MSw1NTE0''@;'; put 'put ''NSw1NTE0OCw1NTE1Miw1NTE1Niw1NTE2NCw1NTE2NSw1NTE2OSw1NTE3Niw1NTE3Nyw1NTE4MCw1NTE4NCw1NTE5Miw1NTE5Myw1NTE5NSw1NTE5NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; 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 ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIwMjg1LDIwMzM5LDIwNTUxLDIwNzI5LDIxMTUyLDIxNDg3LDIxNjIxLDIxNzMzLDIyMDI1LDIzMjMzLDIzNDc4LDI2MjQ3LDI2NTUwLDI2NTUxLDI2NjA3LDI3NDY4LDI5NjM0LDMwMTQ2LDMxMjkyLDMzNDk5LDMzNTQwLDM0OTAzLDM0''@;'; put 'put ''OTUyLDM1MzgyLDM2MDQwLDM2MzAzLDM2NjAzLDM2ODM4LDM5MzgxLDIxMDUxLDIxMzY0LDIxNTA4LDI0NjgyLDI0OTMyLDI3NTgwLDI5NjQ3LDMzMDUwLDM1MjU4LDM1MjgyLDM4MzA3LDIwMzU1LDIxMDAyLDIyNzE4LDIyOTA0LDIzMDE0LDI0MTc4LDI0MTg1LDI1MDMxLDI1NTM2LDI2NDM4''@;'; put 'put ''LDI2NjA0LDI2NzUxLDI4NTY3LDMwMjg2LDMwNDc1LDMwOTY1LDMxMjQwLDMxNDg3LDMxNzc3LDMyOTI1LDMzMzkwLDMzMzkzLDM1NTYzLDM4MjkxLDIwMDc1LDIxOTE3LDI2MzU5LDI4MjEyLDMwODgzLDMxNDY5LDMzODgzLDM1MDg4LDM0NjM4LDM4ODI0LDIxMjA4LDIyMzUwLDIyNTcwLDIz''@;'; put 'put ''ODg0LDI0ODYzLDI1MDIyLDI1MTIxLDI1OTU0LDI2NTc3LDI3MjA0LDI4MTg3LDI5OTc2LDMwMTMxLDMwNDM1LDMwNjQwLDMyMDU4LDM3MDM5LDM3OTY5LDM3OTcwLDQwODUzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIxMjgzLDIzNzI0LDMwMDAyLDMyOTg3LDM3NDQwLDM4Mjk2LDIxMDgzLDIyNTM2LDIzMDA0LDIzNzEzLDIzODMxLDI0MjQ3LDI0Mzc4LDI0''@;'; put 'put ''Mzk0LDI0OTUxLDI3NzQzLDMwMDc0LDMwMDg2LDMxOTY4LDMyMTE1LDMyMTc3LDMyNjUyLDMzMTA4LDMzMzEzLDM0MTkzLDM1MTM3LDM1NjExLDM3NjI4LDM4NDc3LDQwMDA3LDIwMTcxLDIwMjE1LDIwNDkxLDIwOTc3LDIyNjA3LDI0ODg3LDI0ODk0LDI0OTM2LDI1OTEzLDI3MTE0LDI4NDMz''@;'; put 'put ''LDMwMTE3LDMwMzQyLDMwNDIyLDMxNjIzLDMzNDQ1LDMzOTk1LDYzNzQ0LDM3Nzk5LDM4MjgzLDIxODg4LDIzNDU4LDIyMzUzLDYzNzQ1LDMxOTIzLDMyNjk3LDM3MzAxLDIwNTIwLDIxNDM1LDIzNjIxLDI0MDQwLDI1Mjk4LDI1NDU0LDI1ODE4LDI1ODMxLDI4MTkyLDI4ODQ0LDMxMDY3LDM2''@;'; put 'put ''MzE3LDM2MzgyLDYzNzQ2LDM2OTg5LDM3NDQ1LDM3NjI0LDIwMDk0LDIwMjE0LDIwNTgxLDI0MDYyLDI0MzE0LDI0ODM4LDI2OTY3LDMzMTM3LDM0Mzg4LDM2NDIzLDM3NzQ5LDM5NDY3LDIwMDYyLDIwNjI1LDI2NDgwLDI2Njg4LDIwNzQ1LDIxMTMzLDIxMTM4LDI3Mjk4LG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMwNjUyLDM3MzkyLDQwNjYwLDIxMTYzLDI0''@;'; put 'put ''NjIzLDM2ODUwLDIwNTUyLDI1MDAxLDI1NTgxLDI1ODAyLDI2Njg0LDI3MjY4LDI4NjA4LDMzMTYwLDM1MjMzLDM4NTQ4LDIyNTMzLDI5MzA5LDI5MzU2LDI5OTU2LDMyMTIxLDMyMzY1LDMyOTM3LDM1MjExLDM1NzAwLDM2OTYzLDQwMjczLDI1MjI1LDI3NzcwLDI4NTAwLDMyMDgwLDMyNTcw''@;'; put 'put ''LDM1MzYzLDIwODYwLDI0OTA2LDMxNjQ1LDM1NjA5LDM3NDYzLDM3NzcyLDIwMTQwLDIwNDM1LDIwNTEwLDIwNjcwLDIwNzQyLDIxMTg1LDIxMTk3LDIxMzc1LDIyMzg0LDIyNjU5LDI0MjE4LDI0NDY1LDI0OTUwLDI1MDA0LDI1ODA2LDI1OTY0LDI2MjIzLDI2Mjk5LDI2MzU2LDI2Nzc1LDI4''@;'; put 'put ''MDM5LDI4ODA1LDI4OTEzLDI5ODU1LDI5ODYxLDI5ODk4LDMwMTY5LDMwODI4LDMwOTU2LDMxNDU1LDMxNDc4LDMyMDY5LDMyMTQ3LDMyNzg5LDMyODMxLDMzMDUxLDMzNjg2LDM1Njg2LDM2NjI5LDM2ODg1LDM3ODU3LDM4OTE1LDM4OTY4LDM5NTE0LDM5OTEyLDIwNDE4LDIxODQzLDIyNTg2''@;'; put 'put ''LDIyODY1LDIzMzk1LDIzNjIyLDI0NzYwLDI1MTA2LDI2NjkwLDI2ODAwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI2ODU2LDI4MzMwLDMwMDI4LDMwMzI4LDMwOTI2LDMxMjkzLDMxOTk1LDMyMzYzLDMyMzgwLDM1MzM2LDM1NDg5LDM1OTAzLDM4NTQyLDQwMzg4LDIxNDc2LDIxNDgxLDIxNTc4LDIxNjE3LDIyMjY2LDIyOTkzLDIzMzk2LDIzNjExLDI0MjM1''@;'; put 'put ''LDI1MzM1LDI1OTExLDI1OTI1LDI1OTcwLDI2MjcyLDI2NTQzLDI3MDczLDI3ODM3LDMwMjA0LDMwMzUyLDMwNTkwLDMxMjk1LDMyNjYwLDMyNzcxLDMyOTI5LDMzMTY3LDMzNTEwLDMzNTMzLDMzNzc2LDM0MjQxLDM0ODY1LDM0OTk2LDM1NDkzLDYzNzQ3LDM2NzY0LDM3Njc4LDM4NTk5LDM5''@;'; put 'put ''MDE1LDM5NjQwLDQwNzIzLDIxNzQxLDI2MDExLDI2MzU0LDI2NzY3LDMxMjk2LDM1ODk1LDQwMjg4LDIyMjU2LDIyMzcyLDIzODI1LDI2MTE4LDI2ODAxLDI2ODI5LDI4NDE0LDI5NzM2LDM0OTc0LDM5OTA4LDI3NzUyLDYzNzQ4LDM5NTkyLDIwMzc5LDIwODQ0LDIwODQ5LDIxMTUxLDIzMzgw''@;'; put 'put ''LDI0MDM3LDI0NjU2LDI0Njg1LDI1MzI5LDI1NTExLDI1OTE1LDI5NjU3LDMxMzU0LDM0NDY3LDM2MDAyLDM4Nzk5LDIwMDE4LDIzNTIxLDI1MDk2LDI2NTI0LDI5OTE2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMxMTg1LDMzNzQ3LDM1NDYzLDM1NTA2LDM2MzI4LDM2OTQyLDM3NzA3LDM4OTgyLDI0Mjc1LDI3MTEyLDM0MzAzLDM3MTAxLDYzNzQ5LDIwODk2''@;'; put 'put ''LDIzNDQ4LDIzNTMyLDI0OTMxLDI2ODc0LDI3NDU0LDI4NzQ4LDI5NzQzLDI5OTEyLDMxNjQ5LDMyNTkyLDMzNzMzLDM1MjY0LDM2MDExLDM4MzY0LDM5MjA4LDIxMDM4LDI0NjY5LDI1MzI0LDM2ODY2LDIwMzYyLDIwODA5LDIxMjgxLDIyNzQ1LDI0MjkxLDI2MzM2LDI3OTYwLDI4ODI2LDI5''@;'; put 'put ''Mzc4LDI5NjU0LDMxNTY4LDMzMDA5LDM3OTc5LDIxMzUwLDI1NDk5LDMyNjE5LDIwMDU0LDIwNjA4LDIyNjAyLDIyNzUwLDI0NjE4LDI0ODcxLDI1Mjk2LDI3MDg4LDM5NzQ1LDIzNDM5LDMyMDI0LDMyOTQ1LDM2NzAzLDIwMTMyLDIwNjg5LDIxNjc2LDIxOTMyLDIzMzA4LDIzOTY4LDI0MDM5''@;'; put 'put ''LDI1ODk4LDI1OTM0LDI2NjU3LDI3MjExLDI5NDA5LDMwMzUwLDMwNzAzLDMyMDk0LDMyNzYxLDMzMTg0LDM0MTI2LDM0NTI3LDM2NjExLDM2Njg2LDM3MDY2LDM5MTcxLDM5NTA5LDM5ODUxLDE5OTkyLDIwMDM3LDIwMDYxLDIwMTY3LDIwNDY1LDIwODU1LDIxMjQ2LG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDIxMzEyLDIxNDc1LDIxNDc3LDIxNjQ2LDIyMDM2''@;'; put 'put ''LDIyMzg5LDIyNDM0LDIzNDk1LDIzOTQzLDI0MjcyLDI1MDg0LDI1MzA0LDI1OTM3LDI2NTUyLDI2NjAxLDI3MDgzLDI3NDcyLDI3NTkwLDI3NjI4LDI3NzE0LDI4MzE3LDI4NzkyLDI5Mzk5LDI5NTkwLDI5Njk5LDMwNjU1LDMwNjk3LDMxMzUwLDMyMTI3LDMyNzc3LDMzMjc2LDMzMjg1LDMz''@;'; put 'put ''MjkwLDMzNTAzLDM0OTE0LDM1NjM1LDM2MDkyLDM2NTQ0LDM2ODgxLDM3MDQxLDM3NDc2LDM3NTU4LDM5Mzc4LDM5NDkzLDQwMTY5LDQwNDA3LDQwODYwLDIyMjgzLDIzNjE2LDMzNzM4LDM4ODE2LDM4ODI3LDQwNjI4LDIxNTMxLDMxMzg0LDMyNjc2LDM1MDMzLDM2NTU3LDM3MDg5LDIyNTI4''@;'; put 'put ''LDIzNjI0LDI1NDk2LDMxMzkxLDIzNDcwLDI0MzM5LDMxMzUzLDMxNDA2LDMzNDIyLDM2NTI0LDIwNTE4LDIxMDQ4LDIxMjQwLDIxMzY3LDIyMjgwLDI1MzMxLDI1NDU4LDI3NDAyLDI4MDk5LDMwNTE5LDIxNDEzLDI5NTI3LDM0MTUyLDM2NDcwLDM4MzU3LDI2NDI2LDI3MzMxLDI4NTI4LDM1''@;'; put 'put ''NDM3LDM2NTU2LDM5MjQzLDYzNzUwLDI2MjMxLDI3NTEyLDM2MDIwLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM5NzQwLDYzNzUxLDIxNDgzLDIyMzE3LDIyODYyLDI1NTQyLDI3MTMxLDI5Njc0LDMwNzg5LDMxNDE4LDMxNDI5LDMxOTk4LDMzOTA5LDM1MjE1LDM2MjExLDM2OTE3LDM4MzEyLDIxMjQzLDIyMzQzLDMwMDIzLDMxNTg0LDMzNzQwLDM3NDA2LDYz''@;'; put 'put ''NzUyLDI3MjI0LDIwODExLDIxMDY3LDIxMTI3LDI1MTE5LDI2ODQwLDI2OTk3LDM4NTUzLDIwNjc3LDIxMTU2LDIxMjIwLDI1MDI3LDI2MDIwLDI2NjgxLDI3MTM1LDI5ODIyLDMxNTYzLDMzNDY1LDMzNzcxLDM1MjUwLDM1NjQxLDM2ODE3LDM5MjQxLDYzNzUzLDIwMTcwLDIyOTM1LDI1ODEw''@;'; put 'put ''LDI2MTI5LDI3Mjc4LDI5NzQ4LDMxMTA1LDMxMTY1LDMzNDQ5LDM0OTQyLDM0OTQzLDM1MTY3LDYzNzU0LDM3NjcwLDIwMjM1LDIxNDUwLDI0NjEzLDI1MjAxLDI3NzYyLDMyMDI2LDMyMTAyLDIwMTIwLDIwODM0LDMwNjg0LDMyOTQzLDIwMjI1LDIwMjM4LDIwODU0LDIwODY0LDIxOTgwLDIy''@;'; put 'put ''MTIwLDIyMzMxLDIyNTIyLDIyNTI0LDIyODA0LDIyODU1LDIyOTMxLDIzNDkyLDIzNjk2LDIzODIyLDI0MDQ5LDI0MTkwLDI0NTI0LDI1MjE2LDI2MDcxLDI2MDgzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI2Mzk4LDI2Mzk5LDI2NDYyLDI2ODI3LDI2ODIwLDI3MjMxLDI3NDUwLDI3NjgzLDI3NzczLDI3Nzc4LDI4MTAzLDI5NTkyLDI5NzM0LDI5NzM4LDI5''@;'; put 'put ''ODI2LDI5ODU5LDMwMDcyLDMwMDc5LDMwODQ5LDMwOTU5LDMxMDQxLDMxMDQ3LDMxMDQ4LDMxMDk4LDMxNjM3LDMyZTMsMzIxODYsMzI2NDgsMzI3NzQsMzI4MTMsMzI5MDgsMzUzNTIsMzU2NjMsMzU5MTIsMzYyMTUsMzc2NjUsMzc2NjgsMzkxMzgsMzkyNDksMzk0MzgsMzk0MzksMzk1MjUs''@;'; put 'put ''NDA1OTQsMzIyMDIsMjAzNDIsMjE1MTMsMjUzMjYsMjY3MDgsMzczMjksMjE5MzEsMjA3OTQsNjM3NTUsNjM3NTYsMjMwNjgsMjUwNjIsNjM3NTcsMjUyOTUsMjUzNDMsNjM3NTgsNjM3NTksNjM3NjAsNjM3NjEsNjM3NjIsNjM3NjMsMzcwMjcsNjM3NjQsNjM3NjUsNjM3NjYsNjM3NjcsNjM3''@;'; put 'put ''NjgsMzU1ODIsNjM3NjksNjM3NzAsNjM3NzEsNjM3NzIsMjYyNjIsNjM3NzMsMjkwMTQsNjM3NzQsNjM3NzUsMzg2MjcsNjM3NzYsMjU0MjMsMjU0NjYsMjEzMzUsNjM3NzcsMjY1MTEsMjY5NzYsMjgyNzUsNjM3NzgsMzAwMDcsNjM3NzksNjM3ODAsNjM3ODEsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzIwMTMsNjM3ODIsNjM3ODMsMzQ5MzAsMjIyMTgsMjMw''@;'; put 'put ''NjQsNjM3ODQsNjM3ODUsNjM3ODYsNjM3ODcsNjM3ODgsMjAwMzUsNjM3ODksMjA4MzksMjI4NTYsMjY2MDgsMzI3ODQsNjM3OTAsMjI4OTksMjQxODAsMjU3NTQsMzExNzgsMjQ1NjUsMjQ2ODQsMjUyODgsMjU0NjcsMjM1MjcsMjM1MTEsMjExNjIsNjM3OTEsMjI5MDAsMjQzNjEsMjQ1OTQs''@;'; put 'put ''NjM3OTIsNjM3OTMsNjM3OTQsMjk3ODUsNjM3OTUsNjM3OTYsNjM3OTcsNjM3OTgsNjM3OTksNjM4MDAsMzkzNzcsNjM4MDEsNjM4MDIsNjM4MDMsNjM4MDQsNjM4MDUsNjM4MDYsNjM4MDcsNjM4MDgsNjM4MDksNjM4MTAsNjM4MTEsMjg2MTEsNjM4MTIsNjM4MTMsMzMyMTUsMzY3ODYsMjQ4''@;'; put 'put ''MTcsNjM4MTQsNjM4MTUsMzMxMjYsNjM4MTYsNjM4MTcsMjM2MTUsNjM4MTgsNjM4MTksNjM4MjAsNjM4MjEsNjM4MjIsNjM4MjMsNjM4MjQsNjM4MjUsMjMyNzMsMzUzNjUsMjY0OTEsMzIwMTYsNjM4MjYsNjM4MjcsNjM4MjgsNjM4MjksNjM4MzAsNjM4MzEsMzMwMjEsNjM4MzIsNjM4MzMs''@;'; put 'put ''MjM2MTIsMjc4NzcsMjEzMTEsMjgzNDYsMjI4MTAsMzM1OTAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsMjAwMjUsMjAxNTAsMjAyOTQsMjE5MzQsMjIyOTYsMjI3MjcsMjQ0MDYsMjYwMzksMjYwODYsMjcyNjQsMjc1NzMsMjgyMzcsMzA3MDEsMzE0NzEsMzE3NzQsMzIyMjIsMzQ1MDcsMzQ5NjIsMzcxNzAsMzc3MjMsMjU3ODcsMjg2MDYsMjk1NjIsMzAxMzYs''@;'; put 'put ''MzY5NDgsMjE4NDYsMjIzNDksMjUwMTgsMjU4MTIsMjYzMTEsMjgxMjksMjgyNTEsMjg1MjUsMjg2MDEsMzAxOTIsMzI4MzUsMzMyMTMsMzQxMTMsMzUyMDMsMzU1MjcsMzU2NzQsMzc2NjMsMjc3OTUsMzAwMzUsMzE1NzIsMzYzNjcsMzY5NTcsMjE3NzYsMjI1MzAsMjI2MTYsMjQxNjIsMjUw''@;'; put 'put ''OTUsMjU3NTgsMjY4NDgsMzAwNzAsMzE5NTgsMzQ3MzksNDA2ODAsMjAxOTUsMjI0MDgsMjIzODIsMjI4MjMsMjM1NjUsMjM3MjksMjQxMTgsMjQ0NTMsMjUxNDAsMjU4MjUsMjk2MTksMzMyNzQsMzQ5NTUsMzYwMjQsMzg1MzgsNDA2NjcsMjM0MjksMjQ1MDMsMjQ3NTUsMjA0OTgsMjA5OTIs''@;'; put 'put ''MjEwNDAsMjIyOTQsMjI1ODEsMjI2MTUsMjM1NjYsMjM2NDgsMjM3OTgsMjM5NDcsMjQyMzAsMjQ0NjYsMjQ3NjQsMjUzNjEsMjU0ODEsMjU2MjMsMjY2OTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjY4NzMsMjczMzAsMjgxMjAsMjgxOTMsMjgzNzIsMjg2NDQsMjkxODIsMzA0MjgsMzA1ODUsMzExNTMsMzEyOTEsMzM3OTYsMzUyNDEsMzYwNzcsMzYzMzks''@;'; put 'put ''MzY0MjQsMzY4NjcsMzY4ODQsMzY5NDcsMzcxMTcsMzc3MDksMzg1MTgsMzg4NzYsMjc2MDIsMjg2NzgsMjkyNzIsMjkzNDYsMjk1NDQsMzA1NjMsMzExNjcsMzE3MTYsMzI0MTEsMzU3MTIsMjI2OTcsMjQ3NzUsMjU5NTgsMjYxMDksMjYzMDIsMjc3ODgsMjg5NTgsMjkxMjksMzU5MzAsMzg5''@;'; put 'put ''MzEsMjAwNzcsMzEzNjEsMjAxODksMjA5MDgsMjA5NDEsMjEyMDUsMjE1MTYsMjQ5OTksMjY0ODEsMjY3MDQsMjY4NDcsMjc5MzQsMjg1NDAsMzAxNDAsMzA2NDMsMzE0NjEsMzMwMTIsMzM4OTEsMzc1MDksMjA4MjgsMjYwMDcsMjY0NjAsMjY1MTUsMzAxNjgsMzE0MzEsMzM2NTEsNjM4MzQs''@;'; put 'put ''MzU5MTAsMzY4ODcsMzg5NTcsMjM2NjMsMzMyMTYsMzM0MzQsMzY5MjksMzY5NzUsMzczODksMjQ0NzEsMjM5NjUsMjcyMjUsMjkxMjgsMzAzMzEsMzE1NjEsMzQyNzYsMzU1ODgsMzcxNTksMzk0NzIsMjE4OTUsMjUwNzgsNjM4MzUsMzAzMTMsMzI2NDUsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzQzNjcsMzQ3NDYsMzUwNjQsMzcwMDcsNjM4MzYsMjc5MzEs''@;'; put 'put ''Mjg4ODksMjk2NjIsMzIwOTcsMzM4NTMsNjM4MzcsMzcyMjYsMzk0MDksNjM4MzgsMjAwOTgsMjEzNjUsMjczOTYsMjc0MTAsMjg3MzQsMjkyMTEsMzQzNDksNDA0NzgsMjEwNjgsMzY3NzEsMjM4ODgsMjU4MjksMjU5MDAsMjc0MTQsMjg2NTEsMzE4MTEsMzI0MTIsMzQyNTMsMzUxNzIsMzUy''@;'; put 'put ''NjEsMjUyODksMzMyNDAsMzQ4NDcsMjQyNjYsMjYzOTEsMjgwMTAsMjk0MzYsMjk3MDEsMjk4MDcsMzQ2OTAsMzcwODYsMjAzNTgsMjM4MjEsMjQ0ODAsMzM4MDIsMjA5MTksMjU1MDQsMzAwNTMsMjAxNDIsMjA0ODYsMjA4NDEsMjA5MzcsMjY3NTMsMjcxNTMsMzE5MTgsMzE5MjEsMzE5NzUs''@;'; put 'put ''MzMzOTEsMzU1MzgsMzY2MzUsMzczMjcsMjA0MDYsMjA3OTEsMjEyMzcsMjE1NzAsMjQzMDAsMjQ5NDIsMjUxNTAsMjYwNTMsMjczNTQsMjg2NzAsMzEwMTgsMzQyNjgsMzQ4NTEsMzgzMTcsMzk1MjIsMzk1MzAsNDA1OTksNDA2NTQsMjExNDcsMjYzMTAsMjc1MTEsMjg3MDEsMzEwMTksMzY3''@;'; put 'put ''MDYsMzg3MjIsMjQ5NzYsMjUwODgsMjU4OTEsMjg0NTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsMjkwMDEsMjk4MzMsMzIyNDQsMzI4NzksMzQwMzAsMzY2NDYsMzY4OTksMzc3MDYsMjA5MjUsMjEwMTUsMjExNTUsMjc5MTYsMjg4NzIsMzUwMTAsMjQyNjUsMjU5ODYsMjc1NjYsMjg2MTAsMzE4MDYsMjk1NTcsMjAxOTYsMjAyNzgsMjIyNjUsNjM4MzksMjM3''@;'; put 'put ''MzgsMjM5OTQsMjQ2MDQsMjk2MTgsMzE1MzMsMzI2NjYsMzI3MTgsMzI4MzgsMzY4OTQsMzc0MjgsMzg2NDYsMzg3MjgsMzg5MzYsNDA4MDEsMjAzNjMsMjg1ODMsMzExNTAsMzczMDAsMzg1ODMsMjEyMTQsNjM4NDAsMjU3MzYsMjU3OTYsMjczNDcsMjg1MTAsMjg2OTYsMjkyMDAsMzA0Mzks''@;'; put 'put ''MzI3NjksMzQzMTAsMzQzOTYsMzYzMzUsMzY2MTMsMzg3MDYsMzk3OTEsNDA0NDIsNDA1NjUsMzA4NjAsMzExMDMsMzIxNjAsMzM3MzcsMzc2MzYsNDA1NzUsNDA1OTUsMzU1NDIsMjI3NTEsMjQzMjQsMjY0MDcsMjg3MTEsMjk5MDMsMzE4NDAsMzI4OTQsMjA3NjksMjg3MTIsMjkyODIsMzA5''@;'; put 'put ''MjIsMzYwMzQsMzYwNTgsMzYwODQsMzg2NDcsMjAxMDIsMjA2OTgsMjM1MzQsMjQyNzgsMjYwMDksMjkxMzQsMzAyNzQsMzA2MzcsMzI4NDIsMzQwNDQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzY5ODgsMzk3MTksNDA4NDUsMjI3NDQsMjMxMDUsMjM2NTAsMjcxNTUsMjgxMjIsMjg0MzEsMzAyNjcsMzIwNDcsMzIzMTEsMzQwNzgsMzUxMjgsMzc4NjAsMzg0''@;'; put 'put ''NzUsMjExMjksMjYwNjYsMjY2MTEsMjcwNjAsMjc5NjksMjgzMTYsMjg2ODcsMjk3MDUsMjk3OTIsMzAwNDEsMzAyNDQsMzA4MjcsMzU2MjgsMzkwMDYsMjA4NDUsMjUxMzQsMzg1MjAsMjAzNzQsMjA1MjMsMjM4MzMsMjgxMzgsMzIxODQsMzY2NTAsMjQ0NTksMjQ5MDAsMjY2NDcsNjM4NDEs''@;'; put 'put ''Mzg1MzQsMjEyMDIsMzI5MDcsMjA5NTYsMjA5NDAsMjY5NzQsMzEyNjAsMzIxOTAsMzM3NzcsMzg1MTcsMjA0NDIsMjEwMzMsMjE0MDAsMjE1MTksMjE3NzQsMjM2NTMsMjQ3NDMsMjY0NDYsMjY3OTIsMjgwMTIsMjkzMTMsMjk0MzIsMjk3MDIsMjk4MjcsNjM4NDIsMzAxNzgsMzE4NTIsMzI2''@;'; put 'put ''MzMsMzI2OTYsMzM2NzMsMzUwMjMsMzUwNDEsMzczMjQsMzczMjgsMzg2MjYsMzk4ODEsMjE1MzMsMjg1NDIsMjkxMzYsMjk4NDgsMzQyOTgsMzY1MjIsMzg1NjMsNDAwMjMsNDA2MDcsMjY1MTksMjgxMDcsMjk3NDcsMzMyNTYsMzg2NzgsMzA3NjQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzE0MzUsMzE1MjAsMzE4OTAsMjU3MDUsMjk4MDIsMzAxOTQsMzA5''@;'; put 'put ''MDgsMzA5NTIsMzkzNDAsMzk3NjQsNDA2MzUsMjM1MTgsMjQxNDksMjg0NDgsMzMxODAsMzM3MDcsMzdlMywxOTk3NSwyMTMyNSwyMzA4MSwyNDAxOCwyNDM5OCwyNDkzMCwyNTQwNSwyNjIxNywyNjM2NCwyODQxNSwyODQ1OSwyODc3MSwzMDYyMiwzMzgzNiwzNDA2NywzNDg3NSwzNjYyNywz''@;'; put 'put ''OTIzNywzOTk5NSwyMTc4OCwyNTI3MywyNjQxMSwyNzgxOSwzMzU0NSwzNTE3OCwzODc3OCwyMDEyOSwyMjkxNiwyNDUzNiwyNDUzNywyNjM5NSwzMjE3OCwzMjU5NiwzMzQyNiwzMzU3OSwzMzcyNSwzNjYzOCwzNzAxNywyMjQ3NSwyMjk2OSwyMzE4NiwyMzUwNCwyNjE1MSwyNjUyMiwyNjc1''@;'; put 'put ''NywyNzU5OSwyOTAyOCwzMjYyOSwzNjAyMywzNjA2NywzNjk5MywzOTc0OSwzMzAzMiwzNTk3OCwzODQ3NiwzOTQ4OCw0MDYxMywyMzM5MSwyNzY2NywyOTQ2NywzMDQ1MCwzMDQzMSwzMzgwNCwyMDkwNiwzNTIxOSwyMDgxMywyMDg4NSwyMTE5MywyNjgyNSwyNzc5NiwzMDQ2OCwzMDQ5Niwz''@;'; put 'put ''MjE5MSwzMjIzNiwzODc1NCw0MDYyOSwyODM1NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCwzNDA2NSwyMDkwMSwyMTUxNywyMTYyOSwyNjEyNiwyNjI2OSwyNjkxOSwyODMxOSwzMDM5OSwzMDYwOSwzMzU1OSwzMzk4NiwzNDcxOSwzNzIyNSwzNzUyOCw0MDE4MCwzNDk0NiwyMDM5OCwyMDg4MiwyMTIxNSwyMjk4MiwyNDEyNSwyNDkxNywyNTcyMCwyNTcyMSwy''@;'; put 'put ''NjI4NiwyNjU3NiwyNzE2OSwyNzU5NywyNzYxMSwyOTI3OSwyOTI4MSwyOTc2MSwzMDUyMCwzMDY4MywzMjc5MSwzMzQ2OCwzMzU0MSwzNTU4NCwzNTYyNCwzNTk4MCwyNjQwOCwyNzc5MiwyOTI4NywzMDQ0NiwzMDU2NiwzMTMwMiw0MDM2MSwyNzUxOSwyNzc5NCwyMjgxOCwyNjQwNiwzMzk0''@;'; put 'put ''NSwyMTM1OSwyMjY3NSwyMjkzNywyNDI4NywyNTU1MSwyNjE2NCwyNjQ4MywyODIxOCwyOTQ4MywzMTQ0NywzMzQ5NSwzNzY3MiwyMTIwOSwyNDA0MywyNTAwNiwyNTAzNSwyNTA5OCwyNTI4NywyNTc3MSwyNjA4MCwyNjk2OSwyNzQ5NCwyNzU5NSwyODk2MSwyOTY4NywzMDA0NSwzMjMyNiwz''@;'; put 'put ''MzMxMCwzMzUzOCwzNDE1NCwzNTQ5MSwzNjAzMSwzODY5NSw0MDI4OSwyMjY5Niw0MDY2NCwyMDQ5NywyMTAwNiwyMTU2MywyMTgzOSwyNTk5MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyNzc2NiwzMjAxMCwzMjAxMSwzMjg2MiwzNDQ0MiwzODI3MiwzODYzOSwyMTI0NywyNzc5NywyOTI4OSwyMTYxOSwyMzE5NCwyMzYxNCwyMzg4MywyNDM5NiwyNDQ5NCwy''@;'; put 'put ''NjQxMCwyNjgwNiwyNjk3OSwyODIyMCwyODIyOCwzMDQ3MywzMTg1OSwzMjY1NCwzNDE4MywzNTU5OCwzNjg1NSwzODc1Myw0MDY5MiwyMzczNSwyNDc1OCwyNDg0NSwyNTAwMywyNTkzNSwyNjEwNywyNjEwOCwyNzY2NSwyNzg4NywyOTU5OSwyOTY0MSwzMjIyNSwzODI5MiwyMzQ5NCwzNDU4''@;'; put 'put ''OCwzNTYwMCwyMTA4NSwyMTMzOCwyNTI5MywyNTYxNSwyNTc3OCwyNjQyMCwyNzE5MiwyNzg1MCwyOTYzMiwyOTg1NCwzMTYzNiwzMTg5MywzMjI4MywzMzE2MiwzMzMzNCwzNDE4MCwzNjg0MywzODY0OSwzOTM2MSwyMDI3NiwyMTMyMiwyMTQ1MywyMTQ2NywyNTI5MiwyNTY0NCwyNTg1Niwy''@;'; put 'put ''NjAwMSwyNzA3NSwyNzg4NiwyODUwNCwyOTY3NywzMDAzNiwzMDI0MiwzMDQzNiwzMDQ2MCwzMDkyOCwzMDk3MSwzMTAyMCwzMjA3MCwzMzMyNCwzNDc4NCwzNjgyMCwzODkzMCwzOTE1MSwyMTE4NywyNTMwMCwyNTc2NSwyODE5NiwyODQ5NyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMDMzMiwzNjI5OSwzNzI5NywzNzQ3NCwzOTY2MiwzOTc0NywyMDUxNSwy''@;'; put 'put ''MDYyMSwyMjM0NiwyMjk1MiwyMzU5MiwyNDEzNSwyNDQzOSwyNTE1MSwyNTkxOCwyNjA0MSwyNjA0OSwyNjEyMSwyNjUwNywyNzAzNiwyODM1NCwzMDkxNywzMjAzMywzMjkzOCwzMzE1MiwzMzMyMywzMzQ1OSwzMzk1MywzNDQ0NCwzNTM3MCwzNTYwNywzNzAzMCwzODQ1MCw0MDg0OCwyMDQ5''@;'; put 'put ''MywyMDQ2Nyw2Mzg0MywyMjUyMSwyNDQ3MiwyNTMwOCwyNTQ5MCwyNjQ3OSwyODIyNywyODk1MywzMDQwMywzMjk3MiwzMjk4NiwzNTA2MCwzNTA2MSwzNTA5NywzNjA2NCwzNjY0OSwzNzE5NywzODUwNiwyMDI3MSwyMDMzNiwyNDA5MSwyNjU3NSwyNjY1OCwzMDMzMywzMDMzNCwzOTc0OCwy''@;'; put 'put ''NDE2MSwyNzE0NiwyOTAzMywyOTE0MCwzMDA1OCw2Mzg0NCwzMjMyMSwzNDExNSwzNDI4MSwzOTEzMiwyMDI0MCwzMTU2NywzMjYyNCwzODMwOSwyMDk2MSwyNDA3MCwyNjgwNSwyNzcxMCwyNzcyNiwyNzg2NywyOTM1OSwzMTY4NCwzMzUzOSwyNzg2MSwyOTc1NCwyMDczMSwyMTEyOCwyMjcy''@;'; put 'put ''MSwyNTgxNiwyNzI4NywyOTg2MywzMDI5NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCwzMDg4NywzNDMyNywzODM3MCwzODcxMyw2Mzg0NSwyMTM0MiwyNDMyMSwzNTcyMiwzNjc3NiwzNjc4MywzNzAwMiwyMTAyOSwzMDYyOSw0MDAwOSw0MDcxMiwxOTk5MywyMDQ4MiwyMDg1MywyMzY0MywyNDE4MywyNjE0MiwyNjE3MCwyNjU2NCwyNjgyMSwyODg1MSwyOTk1''@;'; put 'put ''MywzMDE0OSwzMTE3NywzMTQ1MywzNjY0NywzOTIwMCwzOTQzMiwyMDQ0NSwyMjU2MSwyMjU3NywyMzU0MiwyNjIyMiwyNzQ5MywyNzkyMSwyODI4MiwyODU0MSwyOTY2OCwyOTk5NSwzMzc2OSwzNTAzNiwzNTA5MSwzNTY3NiwzNjYyOCwyMDIzOSwyMDY5MywyMTI2NCwyMTM0MCwyMzQ0Mywy''@;'; put 'put ''NDQ4OSwyNjM4MSwzMTExOSwzMzE0NSwzMzU4MywzNDA2OCwzNTA3OSwzNTIwNiwzNjY2NSwzNjY2NywzOTMzMywzOTk1NCwyNjQxMiwyMDA4NiwyMDQ3MiwyMjg1NywyMzU1MywyMzc5MSwyMzc5MiwyNTQ0NywyNjgzNCwyODkyNSwyOTA5MCwyOTczOSwzMjI5OSwzNDAyOCwzNDU2MiwzNjg5''@;'; put 'put ''OCwzNzU4Niw0MDE3OSwxOTk4MSwyMDE4NCwyMDQ2MywyMDYxMywyMTA3OCwyMTEwMywyMTU0MiwyMTY0OCwyMjQ5NiwyMjgyNywyMzE0MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMzM4NiwyMzQxMywyMzUwMCwyNDIyMCw2Mzg0NiwyNTIwNiwyNTk3NSwyNjAyMywyODAxNCwyODMyNSwyOTIzOCwzMTUyNiwzMTgwNywzMjU2NiwzMzEwNCwzMzEwNSwzMzE3''@;'; put 'put ''OCwzMzM0NCwzMzQzMywzMzcwNSwzNTMzMSwzNmUzLDM2MDcwLDM2MDkxLDM2MjEyLDM2MjgyLDM3MDk2LDM3MzQwLDM4NDI4LDM4NDY4LDM5Mzg1LDQwMTY3LDIxMjcxLDIwOTk4LDIxNTQ1LDIyMTMyLDIyNzA3LDIyODY4LDIyODk0LDI0NTc1LDI0OTk2LDI1MTk4LDI2MTI4LDI3Nzc0LDI4''@;'; put 'put ''OTU0LDMwNDA2LDMxODgxLDMxOTY2LDMyMDI3LDMzNDUyLDM2MDMzLDM4NjQwLDYzODQ3LDIwMzE1LDI0MzQzLDI0NDQ3LDI1MjgyLDIzODQ5LDI2Mzc5LDI2ODQyLDMwODQ0LDMyMzIzLDQwMzAwLDE5OTg5LDIwNjMzLDIxMjY5LDIxMjkwLDIxMzI5LDIyOTE1LDIzMTM4LDI0MTk5LDI0NzU0''@;'; put 'put ''LDI0OTcwLDI1MTYxLDI1MjA5LDI2ZTMsMjY1MDMsMjcwNDcsMjc2MDQsMjc2MDYsMjc2MDcsMjc2MDgsMjc4MzIsNjM4NDgsMjk3NDksMzAyMDIsMzA3MzgsMzA4NjUsMzExODksMzExOTIsMzE4NzUsMzIyMDMsMzI3MzcsMzI5MzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzMwODYsMzMyMTgsMzM3NzgsMzQ1ODYsMzUwNDgsMzU1MTMsMzU2OTIsMzYwMjcs''@;'; put 'put ''MzcxNDUsMzg3NTAsMzkxMzEsNDA3NjMsMjIxODgsMjMzMzgsMjQ0MjgsMjU5OTYsMjczMTUsMjc1NjcsMjc5OTYsMjg2NTcsMjg2OTMsMjkyNzcsMjk2MTMsMzYwMDcsMzYwNTEsMzg5NzEsMjQ5NzcsMjc3MDMsMzI4NTYsMzk0MjUsMjAwNDUsMjAxMDcsMjAxMjMsMjAxODEsMjAyODIsMjAy''@;'; put 'put ''ODQsMjAzNTEsMjA0NDcsMjA3MzUsMjE0OTAsMjE0OTYsMjE3NjYsMjE5ODcsMjIyMzUsMjI3NjMsMjI4ODIsMjMwNTcsMjM1MzEsMjM1NDYsMjM1NTYsMjQwNTEsMjQxMDcsMjQ0NzMsMjQ2MDUsMjU0NDgsMjYwMTIsMjYwMzEsMjY2MTQsMjY2MTksMjY3OTcsMjc1MTUsMjc4MDEsMjc4NjMs''@;'; put 'put ''MjgxOTUsMjg2ODEsMjk1MDksMzA3MjIsMzEwMzgsMzEwNDAsMzEwNzIsMzExNjksMzE3MjEsMzIwMjMsMzIxMTQsMzI5MDIsMzMyOTMsMzM2NzgsMzQwMDEsMzQ1MDMsMzUwMzksMzU0MDgsMzU0MjIsMzU2MTMsMzYwNjAsMzYxOTgsMzY3ODEsMzcwMzQsMzkxNjQsMzkzOTEsNDA2MDUsMjEw''@;'; put 'put ''NjYsNjM4NDksMjYzODgsNjM4NTAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsMjA2MzIsMjEwMzQsMjM2NjUsMjU5NTUsMjc3MzMsMjk2NDIsMjk5ODcsMzAxMDksMzE2MzksMzM5NDgsMzcyNDAsMzg3MDQsMjAwODcsMjU3NDYsMjc1NzgsMjkwMjIsMzQyMTcsMTk5NzcsNjM4NTEsMjY0NDEsMjY4NjIsMjgxODMsMzM0MzksMzQwNzIsMzQ5MjMsMjU1OTEsMjg1''@;'; put 'put ''NDUsMzczOTQsMzkwODcsMTk5NzgsMjA2NjMsMjA2ODcsMjA3NjcsMjE4MzAsMjE5MzAsMjIwMzksMjMzNjAsMjM1NzcsMjM3NzYsMjQxMjAsMjQyMDIsMjQyMjQsMjQyNTgsMjQ4MTksMjY3MDUsMjcyMzMsMjgyNDgsMjkyNDUsMjkyNDgsMjkzNzYsMzA0NTYsMzEwNzcsMzE2NjUsMzI3MjQs''@;'; put 'put ''MzUwNTksMzUzMTYsMzU0NDMsMzU5MzcsMzYwNjIsMzg2ODQsMjI2MjIsMjk4ODUsMzYwOTMsMjE5NTksNjM4NTIsMzEzMjksMzIwMzQsMzMzOTQsMjkyOTgsMjk5ODMsMjk5ODksNjM4NTMsMzE1MTMsMjI2NjEsMjI3NzksMjM5OTYsMjQyMDcsMjQyNDYsMjQ0NjQsMjQ2NjEsMjUyMzQsMjU0''@;'; put 'put ''NzEsMjU5MzMsMjYyNTcsMjYzMjksMjYzNjAsMjY2NDYsMjY4NjYsMjkzMTIsMjk3OTAsMzE1OTgsMzIxMTAsMzIyMTQsMzI2MjYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzI5OTcsMzMyOTgsMzQyMjMsMzUxOTksMzU0NzUsMzY4OTMsMzc2MDQsNDA2NTMsNDA3MzYsMjI4MDUsMjI4OTMsMjQxMDksMjQ3OTYsMjYxMzIsMjYyMjcsMjY1MTIsMjc3MjgsMjgx''@;'; put 'put ''MDEsMjg1MTEsMzA3MDcsMzA4ODksMzM5OTAsMzczMjMsMzc2NzUsMjAxODUsMjA2ODIsMjA4MDgsMjE4OTIsMjMzMDcsMjM0NTksMjUxNTksMjU5ODIsMjYwNTksMjgyMTAsMjkwNTMsMjk2OTcsMjk3NjQsMjk4MzEsMjk4ODcsMzAzMTYsMzExNDYsMzIyMTgsMzIzNDEsMzI2ODAsMzMxNDYs''@;'; put 'put ''MzMyMDMsMzMzMzcsMzQzMzAsMzQ3OTYsMzU0NDUsMzYzMjMsMzY5ODQsMzc1MjEsMzc5MjUsMzkyNDUsMzk4NTQsMjEzNTIsMjM2MzMsMjY5NjQsMjc4NDQsMjc5NDUsMjgyMDMsMzMyOTIsMzQyMDMsMzUxMzEsMzUzNzMsMzU0OTgsMzg2MzQsNDA4MDcsMjEwODksMjYyOTcsMjc1NzAsMzI0''@;'; put 'put ''MDYsMzQ4MTQsMzYxMDksMzgyNzUsMzg0OTMsMjU4ODUsMjgwNDEsMjkxNjYsNjM4NTQsMjI0NzgsMjI5OTUsMjM0NjgsMjQ2MTUsMjQ4MjYsMjUxMDQsMjYxNDMsMjYyMDcsMjk0ODEsMjk2ODksMzA0MjcsMzA0NjUsMzE1OTYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzI4NTQsMzI4ODIsMzMxMjUsMzU0ODgsMzcyNjYsMTk5OTAsMjEyMTgsMjc1MDYsMjc5''@;'; put 'put ''MjcsMzEyMzcsMzE1NDUsMzIwNDgsNjM4NTUsMzYwMTYsMjE0ODQsMjIwNjMsMjI2MDksMjM0NzcsMjM1NjcsMjM1NjksMjQwMzQsMjUxNTIsMjU0NzUsMjU2MjAsMjYxNTcsMjY4MDMsMjc4MzYsMjgwNDAsMjgzMzUsMjg3MDMsMjg4MzYsMjkxMzgsMjk5OTAsMzAwOTUsMzAwOTQsMzAyMzMs''@;'; put 'put ''MzE1MDUsMzE3MTIsMzE3ODcsMzIwMzIsMzIwNTcsMzQwOTIsMzQxNTcsMzQzMTEsMzUzODAsMzY4NzcsMzY5NjEsMzcwNDUsMzc1NTksMzg5MDIsMzk0NzksMjA0MzksMjM2NjAsMjY0NjMsMjgwNDksMzE5MDMsMzIzOTYsMzU2MDYsMzYxMTgsMzY4OTUsMjM0MDMsMjQwNjEsMjU2MTMsMzM5''@;'; put 'put ''ODQsMzY5NTYsMzkxMzcsMjk1NzUsMjM0MzUsMjQ3MzAsMjY0OTQsMjgxMjYsMzUzNTksMzU0OTQsMzY4NjUsMzg5MjQsMjEwNDcsNjM4NTYsMjg3NTMsMzA4NjIsMzc3ODIsMzQ5MjgsMzczMzUsMjA0NjIsMjE0NjMsMjIwMTMsMjIyMzQsMjI0MDIsMjI3ODEsMjMyMzQsMjM0MzIsMjM3MjMs''@;'; put 'put ''MjM3NDQsMjQxMDEsMjQ4MzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsMjUxMDEsMjUxNjMsMjU0ODAsMjU2MjgsMjU5MTAsMjU5NzYsMjcxOTMsMjc1MzAsMjc3MDAsMjc5MjksMjg0NjUsMjkxNTksMjk0MTcsMjk1NjAsMjk3MDMsMjk4NzQsMzAyNDYsMzA1NjEsMzExNjgsMzEzMTksMzE0NjYsMzE5MjksMzIxNDMsMzIxNzIsMzIzNTMsMzI2NzAsMzMwNjUs''@;'; put 'put ''MzM1ODUsMzM5MzYsMzQwMTAsMzQyODIsMzQ5NjYsMzU1MDQsMzU3MjgsMzY2NjQsMzY5MzAsMzY5OTUsMzcyMjgsMzc1MjYsMzc1NjEsMzg1MzksMzg1NjcsMzg1NjgsMzg2MTQsMzg2NTYsMzg5MjAsMzkzMTgsMzk2MzUsMzk3MDYsMjE0NjAsMjI2NTQsMjI4MDksMjM0MDgsMjM0ODcsMjgx''@;'; put 'put ''MTMsMjg1MDYsMjkwODcsMjk3MjksMjk4ODEsMzI5MDEsMzM3ODksMjQwMzMsMjQ0NTUsMjQ0OTAsMjQ2NDIsMjYwOTIsMjY2NDIsMjY5OTEsMjcyMTksMjc1MjksMjc5NTcsMjgxNDcsMjk2NjcsMzA0NjIsMzA2MzYsMzE1NjUsMzIwMjAsMzMwNTksMzMzMDgsMzM2MDAsMzQwMzYsMzQxNDcs''@;'; put 'put ''MzU0MjYsMzU1MjQsMzcyNTUsMzc2NjIsMzg5MTgsMzkzNDgsMjUxMDAsMzQ4OTksMzY4NDgsMzc0NzcsMjM4MTUsMjM4NDcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjM5MTMsMjk3OTEsMzMxODEsMzQ2NjQsMjg2MjksMjUzNDIsMzI3MjIsMzUxMjYsMzUxODYsMTk5OTgsMjAwNTYsMjA3MTEsMjEyMTMsMjEzMTksMjUyMTUsMjYxMTksMzIzNjEsMzQ4MjEs''@;'; put 'put ''Mzg0OTQsMjAzNjUsMjEyNzMsMjIwNzAsMjI5ODcsMjMyMDQsMjM2MDgsMjM2MzAsMjM2MjksMjQwNjYsMjQzMzcsMjQ2NDMsMjYwNDUsMjYxNTksMjYxNzgsMjY1NTgsMjY2MTIsMjk0NjgsMzA2OTAsMzEwMzQsMzI3MDksMzM5NDAsMzM5OTcsMzUyMjIsMzU0MzAsMzU0MzMsMzU1NTMsMzU5''@;'; put 'put ''MjUsMzU5NjIsMjI1MTYsMjM1MDgsMjQzMzUsMjQ2ODcsMjUzMjUsMjY4OTMsMjc1NDIsMjgyNTIsMjkwNjAsMzE2OTgsMzQ2NDUsMzU2NzIsMzY2MDYsMzkxMzUsMzkxNjYsMjAyODAsMjAzNTMsMjA0NDksMjE2MjcsMjMwNzIsMjM0ODAsMjQ4OTIsMjYwMzIsMjYyMTYsMjkxODAsMzAwMDMs''@;'; put 'put ''MzEwNzAsMzIwNTEsMzMxMDIsMzMyNTEsMzM2ODgsMzQyMTgsMzQyNTQsMzQ1NjMsMzUzMzgsMzY1MjMsMzY3NjMsNjM4NTcsMzY4MDUsMjI4MzMsMjM0NjAsMjM1MjYsMjQ3MTMsMjM1MjksMjM1NjMsMjQ1MTUsMjc3NzcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNjM4NTgsMjgxNDUsMjg2ODMsMjk5NzgsMzM0NTUsMzU1NzQsMjAxNjAsMjEzMTMsNjM4NTks''@;'; put 'put ''Mzg2MTcsMjc2NjMsMjAxMjYsMjA0MjAsMjA4MTgsMjE4NTQsMjMwNzcsMjM3ODQsMjUxMDUsMjkyNzMsMzM0NjksMzM3MDYsMzQ1NTgsMzQ5MDUsMzUzNTcsMzg0NjMsMzg1OTcsMzkxODcsNDAyMDEsNDAyODUsMjI1MzgsMjM3MzEsMjM5OTcsMjQxMzIsMjQ4MDEsMjQ4NTMsMjU1NjksMjcx''@;'; put 'put ''MzgsMjgxOTcsMzcxMjIsMzc3MTYsMzg5OTAsMzk5NTIsNDA4MjMsMjM0MzMsMjM3MzYsMjUzNTMsMjYxOTEsMjY2OTYsMzA1MjQsMzg1OTMsMzg3OTcsMzg5OTYsMzk4MzksMjYwMTcsMzU1ODUsMzY1NTUsMzgzMzIsMjE4MTMsMjM3MjEsMjQwMjIsMjQyNDUsMjYyNjMsMzAyODQsMzM3ODAs''@;'; put 'put ''MzgzNDMsMjI3MzksMjUyNzYsMjkzOTAsNDAyMzIsMjAyMDgsMjI4MzAsMjQ1OTEsMjYxNzEsMjc1MjMsMzEyMDcsNDAyMzAsMjEzOTUsMjE2OTYsMjI0NjcsMjM4MzAsMjQ4NTksMjYzMjYsMjgwNzksMzA4NjEsMzM0MDYsMzg1NTIsMzg3MjQsMjEzODAsMjUyMTIsMjU0OTQsMjgwODIsMzIy''@;'; put 'put ''NjYsMzMwOTksMzg5ODksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''MjczODcsMzI1ODgsNDAzNjcsNDA0NzQsMjAwNjMsMjA1MzksMjA5MTgsMjI4MTIsMjQ4MjUsMjU1OTAsMjY5MjgsMjkyNDIsMzI4MjIsNjM4NjAsMzczMjYsMjQzNjksNjM4NjEsNjM4NjIsMzIwMDQsMzM1MDksMzM5MDMsMzM5NzksMzQyNzcsMzY0OTMsNjM4NjMsMjAzMzUsNjM4NjQsNjM4''@;'; put 'put ''NjUsMjI3NTYsMjMzNjMsMjQ2NjUsMjU1NjIsMjU4ODAsMjU5NjUsMjYyNjQsNjM4NjYsMjY5NTQsMjcxNzEsMjc5MTUsMjg2NzMsMjkwMzYsMzAxNjIsMzAyMjEsMzExNTUsMzEzNDQsNjM4NjcsMzI2NTAsNjM4NjgsMzUxNDAsNjM4NjksMzU3MzEsMzczMTIsMzg1MjUsNjM4NzAsMzkxNzgs''@;'; put 'put ''MjIyNzYsMjQ0ODEsMjYwNDQsMjg0MTcsMzAyMDgsMzExNDIsMzU0ODYsMzkzNDEsMzk3NzAsNDA4MTIsMjA3NDAsMjUwMTQsMjUyMzMsMjcyNzcsMzMyMjIsMjA1NDcsMjI1NzYsMjQ0MjIsMjg5MzcsMzUzMjgsMzU1NzgsMjM0MjAsMzQzMjYsMjA0NzQsMjA3OTYsMjIxOTYsMjI4NTIsMjU1''@;'; put 'put ''MTMsMjgxNTMsMjM5NzgsMjY5ODksMjA4NzAsMjAxMDQsMjAzMTMsNjM4NzEsNjM4NzIsNjM4NzMsMjI5MTQsNjM4NzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNjM4NzUsMjc0ODcsMjc3NDEsNjM4NzYsMjk4NzcsMzA5OTgsNjM4NzcsMzMyODcsMzMzNDksMzM1OTMsMzY2NzEsMzY3MDEsNjM4NzgsMzkxOTIsNjM4NzksNjM4ODAsNjM4ODEsMjAxMzQsNjM4''@;'; put 'put ''ODIsMjI0OTUsMjQ0NDEsMjYxMzEsNjM4ODMsNjM4ODQsMzAxMjMsMzIzNzcsMzU2OTUsNjM4ODUsMzY4NzAsMzk1MTUsMjIxODEsMjI1NjcsMjMwMzIsMjMwNzEsMjM0NzYsNjM4ODYsMjQzMTAsNjM4ODcsNjM4ODgsMjU0MjQsMjU0MDMsNjM4ODksMjY5NDEsMjc3ODMsMjc4MzksMjgwNDYs''@;'; put 'put ''MjgwNTEsMjgxNDksMjg0MzYsNjM4OTAsMjg4OTUsMjg5ODIsMjkwMTcsNjM4OTEsMjkxMjMsMjkxNDEsNjM4OTIsMzA3OTksMzA4MzEsNjM4OTMsMzE2MDUsMzIyMjcsNjM4OTQsMzIzMDMsNjM4OTUsMzQ4OTMsMzY1NzUsNjM4OTYsNjM4OTcsNjM4OTgsMzc0NjcsNjM4OTksNDAxODIsNjM5''@;'; put 'put ''MDAsNjM5MDEsNjM5MDIsMjQ3MDksMjgwMzcsNjM5MDMsMjkxMDUsNjM5MDQsNjM5MDUsMzgzMjEsMjE0MjEsNjM5MDYsNjM5MDcsNjM5MDgsMjY1NzksNjM5MDksMjg4MTQsMjg5NzYsMjk3NDQsMzMzOTgsMzM0OTAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNjM5MTAsMzgzMzEsMzk2NTMsNDA1NzMsMjYzMDgsNjM5MTEsMjkxMjEsMzM4NjUsNjM5MTIsNjM5''@;'; put 'put ''MTMsMjI2MDMsNjM5MTQsNjM5MTUsMjM5OTIsMjQ0MzMsNjM5MTYsMjYxNDQsMjYyNTQsMjcwMDEsMjcwNTQsMjc3MDQsMjc4OTEsMjgyMTQsMjg0ODEsMjg2MzQsMjg2OTksMjg3MTksMjkwMDgsMjkxNTEsMjk1NTIsNjM5MTcsMjk3ODcsNjM5MTgsMjk5MDgsMzA0MDgsMzEzMTAsMzI0MDMs''@;'; put 'put ''NjM5MTksNjM5MjAsMzM1MjEsMzU0MjQsMzY4MTQsNjM5MjEsMzc3MDQsNjM5MjIsMzg2ODEsNjM5MjMsNjM5MjQsMjAwMzQsMjA1MjIsNjM5MjUsMjFlMywyMTQ3MywyNjM1NSwyNzc1NywyODYxOCwyOTQ1MCwzMDU5MSwzMTMzMCwzMzQ1NCwzNDI2OSwzNDMwNiw2MzkyNiwzNTAyOCwzNTQy''@;'; put 'put ''NywzNTcwOSwzNTk0Nyw2MzkyNywzNzU1NSw2MzkyOCwzODY3NSwzODkyOCwyMDExNiwyMDIzNywyMDQyNSwyMDY1OCwyMTMyMCwyMTU2NiwyMTU1NSwyMTk3OCwyMjYyNiwyMjcxNCwyMjg4NywyMzA2NywyMzUyNCwyNDczNSw2MzkyOSwyNTAzNCwyNTk0MiwyNjExMSwyNjIxMiwyNjc5MSwy''@;'; put 'put ''NzczOCwyODU5NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyODg3''@;'; put 'put ''OSwyOTEwMCwyOTUyMiwzMTYxMywzNDU2OCwzNTQ5MiwzOTk4Niw0MDcxMSwyMzYyNywyNzc3OSwyOTUwOCwyOTU3NywzNzQzNCwyODMzMSwyOTc5NywzMDIzOSwzMTMzNywzMjI3NywzNDMxNCwyMDgwMCwyMjcyNSwyNTc5MywyOTkzNCwyOTk3MywzMDMyMCwzMjcwNSwzNzAxMywzODYwNSwz''@;'; put 'put ''OTI1MiwyODE5OCwyOTkyNiwzMTQwMSwzMTQwMiwzMzI1MywzNDUyMSwzNDY4MCwzNTM1NSwyMzExMywyMzQzNiwyMzQ1MSwyNjc4NSwyNjg4MCwyODAwMywyOTYwOSwyOTcxNSwyOTc0MCwzMDg3MSwzMjIzMywzMjc0NywzMzA0OCwzMzEwOSwzMzY5NCwzNTkxNiwzODQ0NiwzODkyOSwyNjM1''@;'; put 'put ''MiwyNDQ0OCwyNjEwNiwyNjUwNSwyNzc1NCwyOTU3OSwyMDUyNSwyMzA0MywyNzQ5OCwzMDcwMiwyMjgwNiwyMzkxNiwyNDAxMywyOTQ3NywzMDAzMSw2MzkzMCw2MzkzMSwyMDcwOSwyMDk4NSwyMjU3NSwyMjgyOSwyMjkzNCwyMzAwMiwyMzUyNSw2MzkzMiw2MzkzMywyMzk3MCwyNTMwMywy''@;'; put 'put ''NTYyMiwyNTc0NywyNTg1NCw2MzkzNCwyNjMzMiw2MzkzNSwyNzIwOCw2MzkzNiwyOTE4MywyOTc5Niw2MzkzNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzMTM2OCwzMTQwNywzMjMyNywzMjM1MCwzMjc2OCwzMzEzNiw2MzkzOCwzNDc5OSwzNTIwMSwzNTYxNiwzNjk1Myw2MzkzOSwzNjk5MiwzOTI1MCwyNDk1OCwyNzQ0MiwyODAyMCwzMjI4NywzNTEwOSwz''@;'; put 'put ''Njc4NSwyMDQzMywyMDY1MywyMDg4NywyMTE5MSwyMjQ3MSwyMjY2NSwyMzQ4MSwyNDI0OCwyNDg5OCwyNzAyOSwyODA0NCwyODI2MywyODM0MiwyOTA3NiwyOTc5NCwyOTk5MiwyOTk5NiwzMjg4MywzMzU5MiwzMzk5MywzNjM2MiwzNzc4MCwzNzg1NCw2Mzk0MCwyMDExMCwyMDMwNSwyMDU5''@;'; put 'put ''OCwyMDc3OCwyMTQ0OCwyMTQ1MSwyMTQ5MSwyMzQzMSwyMzUwNywyMzU4OCwyNDg1OCwyNDk2MiwyNjEwMCwyOTI3NSwyOTU5MSwyOTc2MCwzMDQwMiwzMTA1NiwzMTEyMSwzMTE2MSwzMjAwNiwzMjcwMSwzMzQxOSwzNDI2MSwzNDM5OCwzNjgwMiwzNjkzNSwzNzEwOSwzNzM1NCwzODUzMywz''@;'; put 'put ''ODYzMiwzODYzMywyMTIwNiwyNDQyMywyNjA5MywyNjE2MSwyNjY3MSwyOTAyMCwzMTI4NiwzNzA1NywzODkyMiwyMDExMyw2Mzk0MSwyNzIxOCwyNzU1MCwyODU2MCwyOTA2NSwzMjc5MiwzMzQ2NCwzNDEzMSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNjkzOSwzODU0OSwzODY0MiwzODkwNywzNDA3NCwzOTcyOSwyMDExMiwyOTA2NiwzODU5NiwyMDgwMywy''@;'; put 'put ''MTQwNywyMTcyOSwyMjI5MSwyMjI5MCwyMjQzNSwyMzE5NSwyMzIzNiwyMzQ5MSwyNDYxNiwyNDg5NSwyNTU4OCwyNzc4MSwyNzk2MSwyODI3NCwyODMwNCwyOTIzMiwyOTUwMywyOTc4MywzMzQ4OSwzNDk0NSwzNjY3NywzNjk2MCw2Mzk0MiwzODQ5OCwzOWUzLDQwMjE5LDI2Mzc2LDM2MjM0''@;'; put 'put ''LDM3NDcwLDIwMzAxLDIwNTUzLDIwNzAyLDIxMzYxLDIyMjg1LDIyOTk2LDIzMDQxLDIzNTYxLDI0OTQ0LDI2MjU2LDI4MjA1LDI5MjM0LDI5NzcxLDMyMjM5LDMyOTYzLDMzODA2LDMzODk0LDM0MTExLDM0NjU1LDM0OTA3LDM1MDk2LDM1NTg2LDM2OTQ5LDM4ODU5LDM5NzU5LDIwMDgzLDIw''@;'; put 'put ''MzY5LDIwNzU0LDIwODQyLDYzOTQzLDIxODA3LDIxOTI5LDIzNDE4LDIzNDYxLDI0MTg4LDI0MTg5LDI0MjU0LDI0NzM2LDI0Nzk5LDI0ODQwLDI0ODQxLDI1NTQwLDI1OTEyLDI2Mzc3LDYzOTQ0LDI2NTgwLDI2NTg2LDYzOTQ1LDI2OTc3LDI2OTc4LDI3ODMzLDI3OTQzLDYzOTQ2LDI4MjE2''@;'; put 'put ''LDYzOTQ3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI4NjQxLDI5''@;'; put 'put ''NDk0LDI5NDk1LDYzOTQ4LDI5Nzg4LDMwMDAxLDYzOTQ5LDMwMjkwLDYzOTUwLDYzOTUxLDMyMTczLDMzMjc4LDMzODQ4LDM1MDI5LDM1NDgwLDM1NTQ3LDM1NTY1LDM2NDAwLDM2NDE4LDM2OTM4LDM2OTI2LDM2OTg2LDM3MTkzLDM3MzIxLDM3NzQyLDYzOTUyLDYzOTUzLDIyNTM3LDYzOTU0''@;'; put 'put ''LDI3NjAzLDMyOTA1LDMyOTQ2LDYzOTU1LDYzOTU2LDIwODAxLDIyODkxLDIzNjA5LDYzOTU3LDYzOTU4LDI4NTE2LDI5NjA3LDMyOTk2LDM2MTAzLDYzOTU5LDM3Mzk5LDM4Mjg3LDYzOTYwLDYzOTYxLDYzOTYyLDYzOTYzLDMyODk1LDI1MTAyLDI4NzAwLDMyMTA0LDM0NzAxLDYzOTY0LDIy''@;'; put 'put ''NDMyLDI0NjgxLDI0OTAzLDI3NTc1LDM1NTE4LDM3NTA0LDM4NTc3LDIwMDU3LDIxNTM1LDI4MTM5LDM0MDkzLDM4NTEyLDM4ODk5LDM5MTUwLDI1NTU4LDI3ODc1LDM3MDA5LDIwOTU3LDI1MDMzLDMzMjEwLDQwNDQxLDIwMzgxLDIwNTA2LDIwNzM2LDIzNDUyLDI0ODQ3LDI1MDg3LDI1ODM2''@;'; put 'put ''LDI2ODg1LDI3NTg5LDMwMDk3LDMwNjkxLDMyNjgxLDMzMzgwLDM0MTkxLDM0ODExLDM0OTE1LDM1NTE2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM1Njk2LDM3MjkxLDIwMTA4LDIwMTk3LDIwMjM0LDYzOTY1LDYzOTY2LDIyODM5LDIzMDE2LDYzOTY3LDI0MDUwLDI0MzQ3LDI0NDExLDI0NjA5LDYzOTY4LDYzOTY5LDYzOTcwLDYzOTcxLDI5MjQ2LDI5NjY5''@;'; put 'put ''LDYzOTcyLDMwMDY0LDMwMTU3LDYzOTczLDMxMjI3LDYzOTc0LDMyNzgwLDMyODE5LDMyOTAwLDMzNTA1LDMzNjE3LDYzOTc1LDYzOTc2LDM2MDI5LDM2MDE5LDM2OTk5LDYzOTc3LDYzOTc4LDM5MTU2LDM5MTgwLDYzOTc5LDYzOTgwLDI4NzI3LDMwNDEwLDMyNzE0LDMyNzE2LDMyNzY0LDM1''@;'; put 'put ''NjEwLDIwMTU0LDIwMTYxLDIwOTk1LDIxMzYwLDYzOTgxLDIxNjkzLDIyMjQwLDIzMDM1LDIzNDkzLDI0MzQxLDI0NTI1LDI4MjcwLDYzOTgyLDYzOTgzLDMyMTA2LDMzNTg5LDYzOTg0LDM0NDUxLDM1NDY5LDYzOTg1LDM4NzY1LDM4Nzc1LDYzOTg2LDYzOTg3LDE5OTY4LDIwMzE0LDIwMzUw''@;'; put 'put ''LDIyNzc3LDI2MDg1LDI4MzIyLDM2OTIwLDM3ODA4LDM5MzUzLDIwMjE5LDIyNzY0LDIyOTIyLDIzMDAxLDI0NjQxLDYzOTg4LDYzOTg5LDMxMjUyLDYzOTkwLDMzNjE1LDM2MDM1LDIwODM3LDIxMzE2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDYzOTkxLDYzOTkyLDYzOTkzLDIwMTczLDIxMDk3LDIzMzgxLDMzNDcxLDIwMTgwLDIxMDUwLDIxNjcyLDIyOTg1''@;'; put 'put ''LDIzMDM5LDIzMzc2LDIzMzgzLDIzMzg4LDI0Njc1LDI0OTA0LDI4MzYzLDI4ODI1LDI5MDM4LDI5NTc0LDI5OTQzLDMwMTMzLDMwOTEzLDMyMDQzLDMyNzczLDMzMjU4LDMzNTc2LDM0MDcxLDM0MjQ5LDM1NTY2LDM2MDM5LDM4NjA0LDIwMzE2LDIxMjQyLDIyMjA0LDI2MDI3LDI2MTUyLDI4''@;'; put 'put ''Nzk2LDI4ODU2LDI5MjM3LDMyMTg5LDMzNDIxLDM3MTk2LDM4NTkyLDQwMzA2LDIzNDA5LDI2ODU1LDI3NTQ0LDI4NTM4LDMwNDMwLDIzNjk3LDI2MjgzLDI4NTA3LDMxNjY4LDMxNzg2LDM0ODcwLDM4NjIwLDE5OTc2LDIwMTgzLDIxMjgwLDIyNTgwLDIyNzE1LDIyNzY3LDIyODkyLDIzNTU5''@;'; put 'put ''LDI0MTE1LDI0MTk2LDI0MzczLDI1NDg0LDI2MjkwLDI2NDU0LDI3MTY3LDI3Mjk5LDI3NDA0LDI4NDc5LDI5MjU0LDYzOTk0LDI5NTIwLDI5ODM1LDMxNDU2LDMxOTExLDMzMTQ0LDMzMjQ3LDMzMjU1LDMzNjc0LDMzOTAwLDM0MDgzLDM0MTk2LDM0MjU1LDM1MDM3LDM2MTE1LDM3MjkyLDM4''@;'; put 'put ''MjYzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDM4NTU2LDIwODc3''@;'; put 'put ''LDIxNzA1LDIyMzEyLDIzNDcyLDI1MTY1LDI2NDQ4LDI2Njg1LDI2NzcxLDI4MjIxLDI4MzcxLDI4Nzk3LDMyMjg5LDM1MDA5LDM2MDAxLDM2NjE3LDQwNzc5LDQwNzgyLDI5MjI5LDMxNjMxLDM1NTMzLDM3NjU4LDIwMjk1LDIwMzAyLDIwNzg2LDIxNjMyLDIyOTkyLDI0MjEzLDI1MjY5LDI2''@;'; put 'put ''NDg1LDI2OTkwLDI3MTU5LDI3ODIyLDI4MTg2LDI5NDAxLDI5NDgyLDMwMTQxLDMxNjcyLDMyMDUzLDMzNTExLDMzNzg1LDMzODc5LDM0Mjk1LDM1NDE5LDM2MDE1LDM2NDg3LDM2ODg5LDM3MDQ4LDM4NjA2LDQwNzk5LDIxMjE5LDIxNTE0LDIzMjY1LDIzNDkwLDI1Njg4LDI1OTczLDI4NDA0''@;'; put 'put ''LDI5MzgwLDYzOTk1LDMwMzQwLDMxMzA5LDMxNTE1LDMxODIxLDMyMzE4LDMyNzM1LDMzNjU5LDM1NjI3LDM2MDQyLDM2MTk2LDM2MzIxLDM2NDQ3LDM2ODQyLDM2ODU3LDM2OTY5LDM3ODQxLDIwMjkxLDIwMzQ2LDIwNjU5LDIwODQwLDIwODU2LDIxMDY5LDIxMDk4LDIyNjI1LDIyNjUyLDIy''@;'; put 'put ''ODgwLDIzNTYwLDIzNjM3LDI0MjgzLDI0NzMxLDI1MTM2LDI2NjQzLDI3NTgzLDI3NjU2LDI4NTkzLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI5MDA2LDI5NzI4LDNlNCwzMDAwOCwzMDAzMywzMDMyMiwzMTU2NCwzMTYyNywzMTY2MSwzMTY4NiwzMjM5OSwzNTQzOCwzNjY3MCwzNjY4MSwzNzQzOSwzNzUyMywzNzY2NiwzNzkzMSwzODY1MSwzOTAwMiwzOTAx''@;'; put 'put ''OSwzOTE5OCwyMDk5OSwyNTEzMCwyNTI0MCwyNzk5MywzMDMwOCwzMTQzNCwzMTY4MCwzMjExOCwyMTM0NCwyMzc0MiwyNDIxNSwyODQ3MiwyODg1NywzMTg5NiwzODY3MywzOTgyMiw0MDY3MCwyNTUwOSwyNTcyMiwzNDY3OCwxOTk2OSwyMDExNywyMDE0MSwyMDU3MiwyMDU5NywyMTU3Niwy''@;'; put 'put ''Mjk3OSwyMzQ1MCwyNDEyOCwyNDIzNywyNDMxMSwyNDQ0OSwyNDc3MywyNTQwMiwyNTkxOSwyNTk3MiwyNjA2MCwyNjIzMCwyNjIzMiwyNjYyMiwyNjk4NCwyNzI3MywyNzQ5MSwyNzcxMiwyODA5NiwyODEzNiwyODE5MSwyODI1NCwyODcwMiwyODgzMywyOTU4MiwyOTY5MywzMDAxMCwzMDU1''@;'; put 'put ''NSwzMDg1NSwzMTExOCwzMTI0MywzMTM1NywzMTkzNCwzMjE0MiwzMzM1MSwzNTMzMCwzNTU2MiwzNTk5OCwzNzE2NSwzNzE5NCwzNzMzNiwzNzQ3OCwzNzU4MCwzNzY2NCwzODY2MiwzODc0MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzODc0OCwzODkxNCw0MDcxOCwyMTA0NiwyMTEzNywyMTg4NCwyMjU2NCwyNDA5MywyNDM1MSwyNDcxNiwyNTU1MiwyNjc5''@;'; put 'put ''OSwyODYzOSwzMTA4NSwzMTUzMiwzMzIyOSwzNDIzNCwzNTA2OSwzNTU3NiwzNjQyMCwzNzI2MSwzODUwMCwzODU1NSwzODcxNywzODk4OCw0MDc3OCwyMDQzMCwyMDgwNiwyMDkzOSwyMTE2MSwyMjA2NiwyNDM0MCwyNDQyNywyNTUxNCwyNTgwNSwyNjA4OSwyNjE3NywyNjM2MiwyNjM2MSwy''@;'; put 'put ''NjM5NywyNjc4MSwyNjgzOSwyNzEzMywyODQzNywyODUyNiwyOTAzMSwyOTE1NywyOTIyNiwyOTg2NiwzMDUyMiwzMTA2MiwzMTA2NiwzMTE5OSwzMTI2NCwzMTM4MSwzMTg5NSwzMTk2NywzMjA2OCwzMjM2OCwzMjkwMywzNDI5OSwzNDQ2OCwzNTQxMiwzNTUxOSwzNjI0OSwzNjQ4MSwzNjg5''@;'; put 'put ''NiwzNjk3MywzNzM0NywzODQ1OSwzODYxMyw0MDE2NSwyNjA2MywzMTc1MSwzNjI3NSwzNzgyNywyMzM4NCwyMzU2MiwyMTMzMCwyNTMwNSwyOTQ2OSwyMDUxOSwyMzQ0NywyNDQ3OCwyNDc1MiwyNDkzOSwyNjgzNywyODEyMSwyOTc0MiwzMTI3OCwzMjA2NiwzMjE1NiwzMjMwNSwzMzEzMSxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNjM5NCwzNjQwNSwzNzc1''@;'; put 'put ''OCwzNzkxMiwyMDMwNCwyMjM1MiwyNDAzOCwyNDIzMSwyNTM4NywzMjYxOCwyMDAyNywyMDMwMywyMDM2NywyMDU3MCwyMzAwNSwzMjk2NCwyMTYxMCwyMTYwOCwyMjAxNCwyMjg2MywyMzQ0OSwyNDAzMCwyNDI4MiwyNjIwNSwyNjQxNywyNjYwOSwyNjY2NiwyNzg4MCwyNzk1NCwyODIzNCwy''@;'; put 'put ''ODU1NywyODg1NSwyOTY2NCwzMDA4NywzMTgyMCwzMjAwMiwzMjA0NCwzMjE2MiwzMzMxMSwzNDUyMywzNTM4NywzNTQ2MSwzNjIwOCwzNjQ5MCwzNjY1OSwzNjkxMywzNzE5OCwzNzIwMiwzNzk1NiwzOTM3NiwzMTQ4MSwzMTkwOSwyMDQyNiwyMDczNywyMDkzNCwyMjQ3MiwyMzUzNSwyMzgw''@;'; put 'put ''MywyNjIwMSwyNzE5NywyNzk5NCwyODMxMCwyODY1MiwyODk0MCwzMDA2MywzMTQ1OSwzNDg1MCwzNjg5NywzNjk4MSwzODYwMywzOTQyMywzMzUzNywyMDAxMywyMDIxMCwzNDg4NiwzNzMyNSwyMTM3MywyNzM1NSwyNjk4NywyNzcxMywzMzkxNCwyMjY4NiwyNDk3NCwyNjM2NiwyNTMyNywy''@;'; put 'put ''ODg5MywyOTk2OSwzMDE1MSwzMjMzOCwzMzk3NiwzNTY1NywzNjEwNCwyMDA0MywyMTQ4MixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMTY3NSwyMjMyMCwyMjMzNiwyNDUzNSwyNTM0NSwyNTM1MSwyNTcxMSwyNTkwMywyNjA4OCwyNjIzNCwyNjUyNSwyNjU0NywyNzQ5MCwyNzc0NCwyNzgwMiwyODQ2MCwzMDY5MywzMDc1NywzMTA0OSwzMTA2MywzMjAyNSwz''@;'; put 'put ''MjkzMCwzMzAyNiwzMzI2NywzMzQzNywzMzQ2MywzNDU4NCwzNTQ2OCw2Mzk5NiwzNjEwMCwzNjI4NiwzNjk3OCwzMDQ1MiwzMTI1NywzMTI4NywzMjM0MCwzMjg4NywyMTc2NywyMTk3MiwyMjY0NSwyNTM5MSwyNTYzNCwyNjE4NSwyNjE4NywyNjczMywyNzAzNSwyNzUyNCwyNzk0MSwyODMz''@;'; put 'put ''NywyOTY0NSwyOTgwMCwyOTg1NywzMDA0MywzMDEzNywzMDQzMywzMDQ5NCwzMDYwMywzMTIwNiwzMjI2NSwzMjI4NSwzMzI3NSwzNDA5NSwzNDk2NywzNTM4NiwzNjA0OSwzNjU4NywzNjc4NCwzNjkxNCwzNzgwNSwzODQ5OSwzODUxNSwzODY2MywyMDM1NiwyMTQ4OSwyMzAxOCwyMzI0MSwy''@;'; put 'put ''NDA4OSwyNjcwMiwyOTg5NCwzMDE0MiwzMTIwOSwzMTM3OCwzMzE4NywzNDU0MSwzNjA3NCwzNjMwMCwzNjg0NSwyNjAxNSwyNjM4OSw2Mzk5NywyMjUxOSwyODUwMywzMjIyMSwzNjY1NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNzg3OCwzODU5OCwyNDUwMSwyNTA3NCwyODU0OCwxOTk4OCwyMDM3NiwyMDUxMSwyMTQ0OSwyMTk4MywyMzkxOSwyNDA0Niwy''@;'; put 'put ''NzQyNSwyNzQ5MiwzMDkyMywzMTY0Miw2Mzk5OCwzNjQyNSwzNjU1NCwzNjk3NCwyNTQxNywyNTY2MiwzMDUyOCwzMTM2NCwzNzY3OSwzODAxNSw0MDgxMCwyNTc3NiwyODU5MSwyOTE1OCwyOTg2NCwyOTkxNCwzMTQyOCwzMTc2MiwzMjM4NiwzMTkyMiwzMjQwOCwzNTczOCwzNjEwNiwzODAx''@;'; put 'put ''MywzOTE4NCwzOTI0NCwyMTA0OSwyMzUxOSwyNTgzMCwyNjQxMywzMjA0NiwyMDcxNywyMTQ0MywyMjY0OSwyNDkyMCwyNDkyMSwyNTA4MiwyNjAyOCwzMTQ0OSwzNTczMCwzNTczNCwyMDQ4OSwyMDUxMywyMTEwOSwyMTgwOSwyMzEwMCwyNDI4OCwyNDQzMiwyNDg4NCwyNTk1MCwyNjEyNCwy''@;'; put 'put ''NjE2NiwyNjI3NCwyNzA4NSwyODM1NiwyODQ2NiwyOTQ2MiwzMDI0MSwzMTM3OSwzMzA4MSwzMzM2OSwzMzc1MCwzMzk4MCwyMDY2MSwyMjUxMiwyMzQ4OCwyMzUyOCwyNDQyNSwyNTUwNSwzMDc1OCwzMjE4MSwzMzc1NiwzNDA4MSwzNzMxOSwzNzM2NSwyMDg3NCwyNjYxMywzMTU3NCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwzNjAxMiwyMDkzMiwyMjk3MSwy''@;'; put 'put ''NDc2NSwzNDM4OSwyMDUwOCw2Mzk5OSwyMTA3NiwyMzYxMCwyNDk1NywyNTExNCwyNTI5OSwyNTg0MiwyNjAyMSwyODM2NCwzMDI0MCwzMzAzNCwzNjQ0OCwzODQ5NSwzODU4NywyMDE5MSwyMTMxNSwyMTkxMiwyMjgyNSwyNDAyOSwyNTc5NywyNzg0OSwyODE1NCwyOTU4OCwzMTM1OSwzMzMw''@;'; put 'put ''NywzNDIxNCwzNjA2OCwzNjM2OCwzNjk4MywzNzM1MSwzODM2OSwzODQzMywzODg1NCwyMDk4NCwyMTc0NiwyMTg5NCwyNDUwNSwyNTc2NCwyODU1MiwzMjE4MCwzNjYzOSwzNjY4NSwzNzk0MSwyMDY4MSwyMzU3NCwyNzgzOCwyODE1NSwyOTk3OSwzMDY1MSwzMTgwNSwzMTg0NCwzNTQ0OSwz''@;'; put 'put ''NTUyMiwyMjU1OCwyMjk3NCwyNDA4NiwyNTQ2MywyOTI2NiwzMDA5MCwzMDU3MSwzNTU0OCwzNjAyOCwzNjYyNiwyNDMwNywyNjIyOCwyODE1MiwzMjg5MywzMzcyOSwzNTUzMSwzODczNywzOTg5NCw2NGUzLDIxMDU5LDI2MzY3LDI4MDUzLDI4Mzk5LDMyMjI0LDM1NTU4LDM2OTEwLDM2OTU4''@;'; put 'put ''LDM5NjM2LDIxMDIxLDIxMTE5LDIxNzM2LDI0OTgwLDI1MjIwLDI1MzA3LDI2Nzg2LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDI2ODk4LDI2OTcwLDI3MTg5LDI4ODE4LDI4OTY2LDMwODEzLDMwOTc3LDMwOTkwLDMxMTg2LDMxMjQ1LDMyOTE4LDMzNDAwLDMzNDkzLDMzNjA5LDM0MTIxLDM1OTcwLDM2MjI5LDM3MjE4LDM3MjU5LDM3Mjk0LDIwNDE5LDIyMjI1''@;'; put 'put ''LDI5MTY1LDMwNjc5LDM0NTYwLDM1MzIwLDIzNTQ0LDI0NTM0LDI2NDQ5LDM3MDMyLDIxNDc0LDIyNjE4LDIzNTQxLDI0NzQwLDI0OTYxLDI1Njk2LDMyMzE3LDMyODgwLDM0MDg1LDM3NTA3LDI1Nzc0LDIwNjUyLDIzODI4LDI2MzY4LDIyNjg0LDI1Mjc3LDI1NTEyLDI2ODk0LDI3ZTMsMjcx''@;'; put 'put ''NjYsMjgyNjcsMzAzOTQsMzExNzksMzM0NjcsMzM4MzMsMzU1MzUsMzYyNjQsMzY4NjEsMzcxMzgsMzcxOTUsMzcyNzYsMzc2NDgsMzc2NTYsMzc3ODYsMzg2MTksMzk0NzgsMzk5NDksMTk5ODUsMzAwNDQsMzEwNjksMzE0ODIsMzE1NjksMzE2ODksMzIzMDIsMzM5ODgsMzY0NDEsMzY0Njgs''@;'; put 'put ''MzY2MDAsMzY4ODAsMjYxNDksMjY5NDMsMjk3NjMsMjA5ODYsMjY0MTQsNDA2NjgsMjA4MDUsMjQ1NDQsMjc3OTgsMzQ4MDIsMzQ5MDksMzQ5MzUsMjQ3NTYsMzMyMDUsMzM3OTUsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzYxMDEsMjE0NjIsMjE1NjEsMjIwNjgsMjMwOTQsMjM2MDEsMjg4MTAsMzI3MzYsMzI4NTgsMzMwMzAsMzMyNjEsMzYyNTksMzcyNTcs''@;'; put 'put ''Mzk1MTksNDA0MzQsMjA1OTYsMjAxNjQsMjE0MDgsMjQ4MjcsMjgyMDQsMjM2NTIsMjAzNjAsMjA1MTYsMjE5ODgsMjM3NjksMjQxNTksMjQ2NzcsMjY3NzIsMjc4MzUsMjgxMDAsMjkxMTgsMzAxNjQsMzAxOTYsMzAzMDUsMzEyNTgsMzEzMDUsMzIxOTksMzIyNTEsMzI2MjIsMzMyNjgsMzQ0''@;'; put 'put ''NzMsMzY2MzYsMzg2MDEsMzkzNDcsNDA3ODYsMjEwNjMsMjExODksMzkxNDksMzUyNDIsMTk5NzEsMjY1NzgsMjg0MjIsMjA0MDUsMjM1MjIsMjY1MTcsMjc3ODQsMjgwMjQsMjk3MjMsMzA3NTksMzczNDEsMzc3NTYsMzQ3NTYsMzEyMDQsMzEyODEsMjQ1NTUsMjAxODIsMjE2NjgsMjE4MjIs''@;'; put 'put ''MjI3MDIsMjI5NDksMjQ4MTYsMjUxNzEsMjUzMDIsMjY0MjIsMjY5NjUsMzMzMzMsMzg0NjQsMzkzNDUsMzkzODksMjA1MjQsMjEzMzEsMjE4MjgsMjIzOTYsNjQwMDEsMjUxNzYsNjQwMDIsMjU4MjYsMjYyMTksMjY1ODksMjg2MDksMjg2NTUsMjk3MzAsMjk3NTIsMzUzNTEsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzc5NDQsMjE1ODUsMjIwMjIsMjIzNzQs''@;'; put 'put ''MjQzOTIsMjQ5ODYsMjc0NzAsMjg3NjAsMjg4NDUsMzIxODcsMzU0NzcsMjI4OTAsMzMwNjcsMjU1MDYsMzA0NzIsMzI4MjksMzYwMTAsMjI2MTIsMjU2NDUsMjcwNjcsMjM0NDUsMjQwODEsMjgyNzEsNjQwMDMsMzQxNTMsMjA4MTIsMjE0ODgsMjI4MjYsMjQ2MDgsMjQ5MDcsMjc1MjYsMjc3''@;'; put 'put ''NjAsMjc4ODgsMzE1MTgsMzI5NzQsMzM0OTIsMzYyOTQsMzcwNDAsMzkwODksNjQwMDQsMjU3OTksMjg1ODAsMjU3NDUsMjU4NjAsMjA4MTQsMjE1MjAsMjIzMDMsMzUzNDIsMjQ5MjcsMjY3NDIsNjQwMDUsMzAxNzEsMzE1NzAsMzIxMTMsMzY4OTAsMjI1MzQsMjcwODQsMzMxNTEsMzUxMTQs''@;'; put 'put ''MzY4NjQsMzg5NjksMjA2MDAsMjI4NzEsMjI5NTYsMjUyMzcsMzY4NzksMzk3MjIsMjQ5MjUsMjkzMDUsMzgzNTgsMjIzNjksMjMxMTAsMjQwNTIsMjUyMjYsMjU3NzMsMjU4NTAsMjY0ODcsMjc4NzQsMjc5NjYsMjkyMjgsMjk3NTAsMzA3NzIsMzI2MzEsMzM0NTMsMzYzMTUsMzg5MzUsMjEw''@;'; put 'put ''MjgsMjIzMzgsMjY0OTUsMjkyNTYsMjk5MjMsMzYwMDksMzY3NzQsMzczOTMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzg0NDIsMjA4NDMsMjE0ODUsMjU0MjAsMjAzMjksMjE3NjQsMjQ3MjYsMjU5NDMsMjc4MDMsMjgwMzEsMjkyNjAsMjk0MzcsMzEyNTUsMzUyMDcsMzU5OTcsMjQ0MjksMjg1NTgsMjg5MjEsMzMxOTIsMjQ4NDYsMjA0MTUsMjA1NTksMjUx''@;'; put 'put ''NTMsMjkyNTUsMzE2ODcsMzIyMzIsMzI3NDUsMzY5NDEsMzg4MjksMzk0NDksMzYwMjIsMjIzNzgsMjQxNzksMjY1NDQsMzM4MDUsMzU0MTMsMjE1MzYsMjMzMTgsMjQxNjMsMjQyOTAsMjQzMzAsMjU5ODcsMzI5NTQsMzQxMDksMzgyODEsMzg0OTEsMjAyOTYsMjEyNTMsMjEyNjEsMjEyNjMs''@;'; put 'put ''MjE2MzgsMjE3NTQsMjIyNzUsMjQwNjcsMjQ1OTgsMjUyNDMsMjUyNjUsMjU0MjksNjQwMDYsMjc4NzMsMjgwMDYsMzAxMjksMzA3NzAsMzI5OTAsMzMwNzEsMzM1MDIsMzM4ODksMzM5NzAsMzQ5NTcsMzUwOTAsMzY4NzUsMzc2MTAsMzkxNjUsMzk4MjUsMjQxMzMsMjYyOTIsMjYzMzMsMjg2''@;'; put 'put ''ODksMjkxOTAsNjQwMDcsMjA0NjksMjExMTcsMjQ0MjYsMjQ5MTUsMjY0NTEsMjcxNjEsMjg0MTgsMjk5MjIsMzEwODAsMzQ5MjAsMzU5NjEsMzkxMTEsMzkxMDgsMzk0OTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjE2OTcsMzEyNjMsMjY5NjMsMzU1NzUsMzU5MTQsMzkwODAsMzkzNDIsMjQ0NDQsMjUyNTksMzAxMzAsMzAzODIsMzQ5ODcsMzY5OTEsMzg0''@;'; put 'put ''NjYsMjEzMDUsMjQzODAsMjQ1MTcsMjc4NTIsMjk2NDQsMzAwNTAsMzAwOTEsMzE1NTgsMzM1MzQsMzkzMjUsMjAwNDcsMzY5MjQsMTk5NzksMjAzMDksMjE0MTQsMjI3OTksMjQyNjQsMjYxNjAsMjc4MjcsMjk3ODEsMzM2NTUsMzQ2NjIsMzYwMzIsMzY5NDQsMzg2ODYsMzk5NTcsMjI3Mzcs''@;'; put 'put ''MjM0MTYsMzQzODQsMzU2MDQsNDAzNzIsMjM1MDYsMjQ2ODAsMjQ3MTcsMjYwOTcsMjc3MzUsMjg0NTAsMjg1NzksMjg2OTgsMzI1OTcsMzI3NTIsMzgyODksMzgyOTAsMzg0ODAsMzg4NjcsMjExMDYsMzY2NzYsMjA5ODksMjE1NDcsMjE2ODgsMjE4NTksMjE4OTgsMjczMjMsMjgwODUsMzIy''@;'; put 'put ''MTYsMzMzODIsMzc1MzIsMzg1MTksNDA1NjksMjE1MTIsMjE3MDQsMzA0MTgsMzQ1MzIsMzgzMDgsMzgzNTYsMzg0OTIsMjAxMzAsMjAyMzMsMjMwMjIsMjMyNzAsMjQwNTUsMjQ2NTgsMjUyMzksMjY0NzcsMjY2ODksMjc3ODIsMjgyMDcsMzI1NjgsMzI5MjMsMzMzMjIsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNjQwMDgsNjQwMDksMzg5MTcsMjAxMzMsMjA1''@;'; put 'put ''NjUsMjE2ODMsMjI0MTksMjI4NzQsMjM0MDEsMjM0NzUsMjUwMzIsMjY5OTksMjgwMjMsMjg3MDcsMzQ4MDksMzUyOTksMzU0NDIsMzU1NTksMzY5OTQsMzk0MDUsMzk2MDgsMjExODIsMjY2ODAsMjA1MDIsMjQxODQsMjY0NDcsMzM2MDcsMzQ4OTIsMjAxMzksMjE1MjEsMjIxOTAsMjk2NzAs''@;'; put 'put ''MzcxNDEsMzg5MTEsMzkxNzcsMzkyNTUsMzkzMjEsMjIwOTksMjI2ODcsMzQzOTUsMzUzNzcsMjUwMTAsMjczODIsMjk1NjMsMzY1NjIsMjc0NjMsMzg1NzAsMzk1MTEsMjI4NjksMjkxODQsMzYyMDMsMzg3NjEsMjA0MzYsMjM3OTYsMjQzNTgsMjUwODAsMjYyMDMsMjc4ODMsMjg4NDMsMjk1''@;'; put 'put ''NzIsMjk2MjUsMjk2OTQsMzA1MDUsMzA1NDEsMzIwNjcsMzIwOTgsMzIyOTEsMzMzMzUsMzQ4OTgsNjQwMTAsMzYwNjYsMzc0NDksMzkwMjMsMjMzNzcsMzEzNDgsMzQ4ODAsMzg5MTMsMjMyNDQsMjA0NDgsMjEzMzIsMjI4NDYsMjM4MDUsMjU0MDYsMjgwMjUsMjk0MzMsMzMwMjksMzMwMzEs''@;'; put 'put ''MzM2OTgsMzc1ODMsMzg5NjAsMjAxMzYsMjA4MDQsMjEwMDksMjI0MTEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjQ0MTgsMjc4NDIsMjgzNjYsMjg2NzcsMjg3NTIsMjg4NDcsMjkwNzQsMjk2NzMsMjk4MDEsMzM2MTAsMzQ3MjIsMzQ5MTMsMzY4NzIsMzcwMjYsMzc3OTUsMzkzMzYsMjA4NDYsMjQ0MDcsMjQ4MDAsMjQ5MzUsMjYyOTEsMzQxMzcsMzY0MjYs''@;'; put 'put ''MzcyOTUsMzg3OTUsMjAwNDYsMjAxMTQsMjE2MjgsMjI3NDEsMjI3NzgsMjI5MDksMjM3MzMsMjQzNTksMjUxNDIsMjUxNjAsMjYxMjIsMjYyMTUsMjc2MjcsMjgwMDksMjgxMTEsMjgyNDYsMjg0MDgsMjg1NjQsMjg2NDAsMjg2NDksMjg3NjUsMjkzOTIsMjk3MzMsMjk3ODYsMjk5MjAsMzAz''@;'; put 'put ''NTUsMzEwNjgsMzE5NDYsMzIyODYsMzI5OTMsMzM0NDYsMzM4OTksMzM5ODMsMzQzODIsMzQzOTksMzQ2NzYsMzU3MDMsMzU5NDYsMzc4MDQsMzg5MTIsMzkwMTMsMjQ3ODUsMjUxMTAsMzcyMzksMjMxMzAsMjYxMjcsMjgxNTEsMjgyMjIsMjk3NTksMzk3NDYsMjQ1NzMsMjQ3OTQsMzE1MDMs''@;'; put 'put ''MjE3MDAsMjQzNDQsMjc3NDIsMjc4NTksMjc5NDYsMjg4ODgsMzIwMDUsMzQ0MjUsMzUzNDAsNDAyNTEsMjEyNzAsMjE2NDQsMjMzMDEsMjcxOTQsMjg3NzksMzAwNjksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMzExMTcsMzExNjYsMzM0NTcsMzM3NzUsMzU0NDEsMzU2NDksMzYwMDgsMzg3NzIsNjQwMTEsMjU4NDQsMjU4OTksMzA5MDYsMzA5MDcsMzEzMzks''@;'; put 'put ''MjAwMjQsMjE5MTQsMjI4NjQsMjM0NjIsMjQxODcsMjQ3MzksMjU1NjMsMjc0ODksMjYyMTMsMjY3MDcsMjgxODUsMjkwMjksMjk4NzIsMzIwMDgsMzY5OTYsMzk1MjksMzk5NzMsMjc5NjMsMjgzNjksMjk1MDIsMzU5MDUsMzgzNDYsMjA5NzYsMjQxNDAsMjQ0ODgsMjQ2NTMsMjQ4MjIsMjQ4''@;'; put 'put ''ODAsMjQ5MDgsMjYxNzksMjYxODAsMjcwNDUsMjc4NDEsMjgyNTUsMjgzNjEsMjg1MTQsMjkwMDQsMjk4NTIsMzAzNDMsMzE2ODEsMzE3ODMsMzM2MTgsMzQ2NDcsMzY5NDUsMzg1NDEsNDA2NDMsMjEyOTUsMjIyMzgsMjQzMTUsMjQ0NTgsMjQ2NzQsMjQ3MjQsMjUwNzksMjYyMTQsMjYzNzEs''@;'; put 'put ''MjcyOTIsMjgxNDIsMjg1OTAsMjg3ODQsMjk1NDYsMzIzNjIsMzMyMTQsMzM1ODgsMzQ1MTYsMzU0OTYsMzYwMzYsMjExMjMsMjk1NTQsMjM0NDYsMjcyNDMsMzc4OTIsMjE3NDIsMjIxNTAsMjMzODksMjU5MjgsMjU5ODksMjYzMTMsMjY3ODMsMjgwNDUsMjgxMDIsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjkyNDMsMzI5NDgsMzcyMzcsMzk1MDEsMjAzOTks''@;'; put 'put ''MjA1MDUsMjE0MDIsMjE1MTgsMjE1NjQsMjE4OTcsMjE5NTcsMjQxMjcsMjQ0NjAsMjY0MjksMjkwMzAsMjk2NjEsMzY4NjksMjEyMTEsMjEyMzUsMjI2MjgsMjI3MzQsMjg5MzIsMjkwNzEsMjkxNzksMzQyMjQsMzUzNDcsMjYyNDgsMzQyMTYsMjE5MjcsMjYyNDQsMjkwMDIsMzM4NDEsMjEz''@;'; put 'put ''MjEsMjE5MTMsMjc1ODUsMjQ0MDksMjQ1MDksMjU1ODIsMjYyNDksMjg5OTksMzU1NjksMzY2MzcsNDA2MzgsMjAyNDEsMjU2NTgsMjg4NzUsMzAwNTQsMzQ0MDcsMjQ2NzYsMzU2NjIsNDA0NDAsMjA4MDcsMjA5ODIsMjEyNTYsMjc5NTgsMzMwMTYsNDA2NTcsMjYxMzMsMjc0MjcsMjg4MjQs''@;'; put 'put ''MzAxNjUsMjE1MDcsMjM2NzMsMzIwMDcsMzUzNTAsMjc0MjQsMjc0NTMsMjc0NjIsMjE1NjAsMjQ2ODgsMjc5NjUsMzI3MjUsMzMyODgsMjA2OTQsMjA5NTgsMjE5MTYsMjIxMjMsMjIyMjEsMjMwMjAsMjMzMDUsMjQwNzYsMjQ5ODUsMjQ5ODQsMjUxMzcsMjYyMDYsMjYzNDIsMjkwODEsMjkx''@;'; put 'put ''MTMsMjkxMTQsMjkzNTEsMzExNDMsMzEyMzIsMzI2OTAsMzU0NDAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0s''@;'; put 'put ''Z2IxODAzMDpbMTk5NzAsMTk5NzIsMTk5NzMsMTk5NzQsMTk5ODMsMTk5ODYsMTk5OTEsMTk5OTksMmU0LDIwMDAxLDIwMDAzLDIwMDA2LDIwMDA5LDIwMDE0LDIwMDE1LDIwMDE3LDIwMDE5LDIwMDIxLDIwMDIzLDIwMDI4LDIwMDMyLDIwMDMzLDIwMDM0LDIwMDM2LDIwMDM4LDIwMDQyLDIw''@;'; put 'put ''MDQ5LDIwMDUzLDIwMDU1LDIwMDU4LDIwMDU5LDIwMDY2LDIwMDY3LDIwMDY4LDIwMDY5LDIwMDcxLDIwMDcyLDIwMDc0LDIwMDc1LDIwMDc2LDIwMDc3LDIwMDc4LDIwMDc5LDIwMDgyLDIwMDg0LDIwMDg1LDIwMDg2LDIwMDg3LDIwMDg4LDIwMDg5LDIwMDkwLDIwMDkxLDIwMDkyLDIwMDkz''@;'; put 'put ''LDIwMDk1LDIwMDk2LDIwMDk3LDIwMDk4LDIwMDk5LDIwMTAwLDIwMTAxLDIwMTAzLDIwMTA2LDIwMTEyLDIwMTE4LDIwMTE5LDIwMTIxLDIwMTI0LDIwMTI1LDIwMTI2LDIwMTMxLDIwMTM4LDIwMTQzLDIwMTQ0LDIwMTQ1LDIwMTQ4LDIwMTUwLDIwMTUxLDIwMTUyLDIwMTUzLDIwMTU2LDIw''@;'; put 'put ''MTU3LDIwMTU4LDIwMTY4LDIwMTcyLDIwMTc1LDIwMTc2LDIwMTc4LDIwMTg2LDIwMTg3LDIwMTg4LDIwMTkyLDIwMTk0LDIwMTk4LDIwMTk5LDIwMjAxLDIwMjA1LDIwMjA2LDIwMjA3LDIwMjA5LDIwMjEyLDIwMjE2LDIwMjE3LDIwMjE4LDIwMjIwLDIwMjIyLDIwMjI0LDIwMjI2LDIwMjI3''@;'; put 'put ''LDIwMjI4LDIwMjI5LDIwMjMwLDIwMjMxLDIwMjMyLDIwMjM1LDIwMjM2LDIwMjQyLDIwMjQzLDIwMjQ0LDIwMjQ1LDIwMjQ2LDIwMjUyLDIwMjUzLDIwMjU3LDIwMjU5LDIwMjY0LDIwMjY1LDIwMjY4LDIwMjY5LDIwMjcwLDIwMjczLDIwMjc1LDIwMjc3LDIwMjc5LDIwMjgxLDIwMjgzLDIw''@;'; put 'put ''Mjg2LDIwMjg3LDIwMjg4LDIwMjg5LDIwMjkwLDIwMjkyLDIwMjkzLDIwMjk1LDIwMjk2LDIwMjk3LDIwMjk4LDIwMjk5LDIwMzAwLDIwMzA2LDIwMzA4LDIwMzEwLDIwMzIxLDIwMzIyLDIwMzI2LDIwMzI4LDIwMzMwLDIwMzMxLDIwMzMzLDIwMzM0LDIwMzM3LDIwMzM4LDIwMzQxLDIwMzQz''@;'; put 'put ''LDIwMzQ0LDIwMzQ1LDIwMzQ2LDIwMzQ5LDIwMzUyLDIwMzUzLDIwMzU0LDIwMzU3LDIwMzU4LDIwMzU5LDIwMzYyLDIwMzY0LDIwMzY2LDIwMzY4LDIwMzcwLDIwMzcxLDIwMzczLDIwMzc0LDIwMzc2LDIwMzc3LDIwMzc4LDIwMzgwLDIwMzgyLDIwMzgzLDIwMzg1LDIwMzg2LDIwMzg4LDIw''@;'; put 'put ''Mzk1LDIwMzk3LDIwNDAwLDIwNDAxLDIwNDAyLDIwNDAzLDIwNDA0LDIwNDA2LDIwNDA3LDIwNDA4LDIwNDA5LDIwNDEwLDIwNDExLDIwNDEyLDIwNDEzLDIwNDE0LDIwNDE2LDIwNDE3LDIwNDE4LDIwNDIyLDIwNDIzLDIwNDI0LDIwNDI1LDIwNDI3LDIwNDI4LDIwNDI5LDIwNDM0LDIwNDM1''@;'; put 'put ''LDIwNDM2LDIwNDM3LDIwNDM4LDIwNDQxLDIwNDQzLDIwNDQ4LDIwNDUwLDIwNDUyLDIwNDUzLDIwNDU1LDIwNDU5LDIwNDYwLDIwNDY0LDIwNDY2LDIwNDY4LDIwNDY5LDIwNDcwLDIwNDcxLDIwNDczLDIwNDc1LDIwNDc2LDIwNDc3LDIwNDc5LDIwNDgwLDIwNDgxLDIwNDgyLDIwNDgzLDIw''@;'; put 'put ''NDg0LDIwNDg1LDIwNDg2LDIwNDg3LDIwNDg4LDIwNDg5LDIwNDkwLDIwNDkxLDIwNDk0LDIwNDk2LDIwNDk3LDIwNDk5LDIwNTAxLDIwNTAyLDIwNTAzLDIwNTA3LDIwNTA5LDIwNTEwLDIwNTEyLDIwNTE0LDIwNTE1LDIwNTE2LDIwNTE5LDIwNTIzLDIwNTI3LDIwNTI4LDIwNTI5LDIwNTMw''@;'; put 'put ''LDIwNTMxLDIwNTMyLDIwNTMzLDIwNTM0LDIwNTM1LDIwNTM2LDIwNTM3LDIwNTM5LDIwNTQxLDIwNTQzLDIwNTQ0LDIwNTQ1LDIwNTQ2LDIwNTQ4LDIwNTQ5LDIwNTUwLDIwNTUzLDIwNTU0LDIwNTU1LDIwNTU3LDIwNTYwLDIwNTYxLDIwNTYyLDIwNTYzLDIwNTY0LDIwNTY2LDIwNTY3LDIw''@;'; put 'put ''NTY4LDIwNTY5LDIwNTcxLDIwNTczLDIwNTc0LDIwNTc1LDIwNTc2LDIwNTc3LDIwNTc4LDIwNTc5LDIwNTgwLDIwNTgyLDIwNTgzLDIwNTg0LDIwNTg1LDIwNTg2LDIwNTg3LDIwNTg5LDIwNTkwLDIwNTkxLDIwNTkyLDIwNTkzLDIwNTk0LDIwNTk1LDIwNTk2LDIwNTk3LDIwNjAwLDIwNjAx''@;'; put 'put ''LDIwNjAyLDIwNjA0LDIwNjA1LDIwNjA5LDIwNjEwLDIwNjExLDIwNjEyLDIwNjE0LDIwNjE1LDIwNjE3LDIwNjE4LDIwNjE5LDIwNjIwLDIwNjIyLDIwNjIzLDIwNjI0LDIwNjI1LDIwNjI2LDIwNjI3LDIwNjI4LDIwNjI5LDIwNjMwLDIwNjMxLDIwNjMyLDIwNjMzLDIwNjM0LDIwNjM1LDIw''@;'; put 'put ''NjM2LDIwNjM3LDIwNjM4LDIwNjM5LDIwNjQwLDIwNjQxLDIwNjQyLDIwNjQ0LDIwNjQ2LDIwNjUwLDIwNjUxLDIwNjUzLDIwNjU0LDIwNjU1LDIwNjU2LDIwNjU3LDIwNjU5LDIwNjYwLDIwNjYxLDIwNjYyLDIwNjYzLDIwNjY0LDIwNjY1LDIwNjY4LDIwNjY5LDIwNjcwLDIwNjcxLDIwNjcy''@;'; put 'put ''LDIwNjczLDIwNjc0LDIwNjc1LDIwNjc2LDIwNjc3LDIwNjc4LDIwNjc5LDIwNjgwLDIwNjgxLDIwNjgyLDIwNjgzLDIwNjg0LDIwNjg1LDIwNjg2LDIwNjg4LDIwNjg5LDIwNjkwLDIwNjkxLDIwNjkyLDIwNjkzLDIwNjk1LDIwNjk2LDIwNjk3LDIwNjk5LDIwNzAwLDIwNzAxLDIwNzAyLDIw''@;'; put 'put ''NzAzLDIwNzA0LDIwNzA1LDIwNzA2LDIwNzA3LDIwNzA4LDIwNzA5LDIwNzEyLDIwNzEzLDIwNzE0LDIwNzE1LDIwNzE5LDIwNzIwLDIwNzIxLDIwNzIyLDIwNzI0LDIwNzI2LDIwNzI3LDIwNzI4LDIwNzI5LDIwNzMwLDIwNzMyLDIwNzMzLDIwNzM0LDIwNzM1LDIwNzM2LDIwNzM3LDIwNzM4''@;'; put 'put ''LDIwNzM5LDIwNzQwLDIwNzQxLDIwNzQ0LDIwNzQ1LDIwNzQ2LDIwNzQ4LDIwNzQ5LDIwNzUwLDIwNzUxLDIwNzUyLDIwNzUzLDIwNzU1LDIwNzU2LDIwNzU3LDIwNzU4LDIwNzU5LDIwNzYwLDIwNzYxLDIwNzYyLDIwNzYzLDIwNzY0LDIwNzY1LDIwNzY2LDIwNzY3LDIwNzY4LDIwNzcwLDIw''@;'; put 'put ''NzcxLDIwNzcyLDIwNzczLDIwNzc0LDIwNzc1LDIwNzc2LDIwNzc3LDIwNzc4LDIwNzc5LDIwNzgwLDIwNzgxLDIwNzgyLDIwNzgzLDIwNzg0LDIwNzg1LDIwNzg2LDIwNzg3LDIwNzg4LDIwNzg5LDIwNzkwLDIwNzkxLDIwNzkyLDIwNzkzLDIwNzk0LDIwNzk1LDIwNzk2LDIwNzk3LDIwNzk4''@;'; put 'put ''LDIwODAyLDIwODA3LDIwODEwLDIwODEyLDIwODE0LDIwODE1LDIwODE2LDIwODE4LDIwODE5LDIwODIzLDIwODI0LDIwODI1LDIwODI3LDIwODI5LDIwODMwLDIwODMxLDIwODMyLDIwODMzLDIwODM1LDIwODM2LDIwODM4LDIwODM5LDIwODQxLDIwODQyLDIwODQ3LDIwODUwLDIwODU4LDIw''@;'; put 'put ''ODYyLDIwODYzLDIwODY3LDIwODY4LDIwODcwLDIwODcxLDIwODc0LDIwODc1LDIwODc4LDIwODc5LDIwODgwLDIwODgxLDIwODgzLDIwODg0LDIwODg4LDIwODkwLDIwODkzLDIwODk0LDIwODk1LDIwODk3LDIwODk5LDIwOTAyLDIwOTAzLDIwOTA0LDIwOTA1LDIwOTA2LDIwOTA5LDIwOTEw''@;'; put 'put ''LDIwOTE2LDIwOTIwLDIwOTIxLDIwOTIyLDIwOTI2LDIwOTI3LDIwOTI5LDIwOTMwLDIwOTMxLDIwOTMzLDIwOTM2LDIwOTM4LDIwOTQxLDIwOTQyLDIwOTQ0LDIwOTQ2LDIwOTQ3LDIwOTQ4LDIwOTQ5LDIwOTUwLDIwOTUxLDIwOTUyLDIwOTUzLDIwOTU0LDIwOTU2LDIwOTU4LDIwOTU5LDIw''@;'; put 'put ''OTYyLDIwOTYzLDIwOTY1LDIwOTY2LDIwOTY3LDIwOTY4LDIwOTY5LDIwOTcwLDIwOTcyLDIwOTc0LDIwOTc3LDIwOTc4LDIwOTgwLDIwOTgzLDIwOTkwLDIwOTk2LDIwOTk3LDIxMDAxLDIxMDAzLDIxMDA0LDIxMDA3LDIxMDA4LDIxMDExLDIxMDEyLDIxMDEzLDIxMDIwLDIxMDIyLDIxMDIz''@;'; put 'put ''LDIxMDI1LDIxMDI2LDIxMDI3LDIxMDI5LDIxMDMwLDIxMDMxLDIxMDM0LDIxMDM2LDIxMDM5LDIxMDQxLDIxMDQyLDIxMDQ0LDIxMDQ1LDIxMDUyLDIxMDU0LDIxMDYwLDIxMDYxLDIxMDYyLDIxMDYzLDIxMDY0LDIxMDY1LDIxMDY3LDIxMDcwLDIxMDcxLDIxMDc0LDIxMDc1LDIxMDc3LDIx''@;'; put 'put ''MDc5LDIxMDgwLDIxMDgxLDIxMDgyLDIxMDgzLDIxMDg1LDIxMDg3LDIxMDg4LDIxMDkwLDIxMDkxLDIxMDkyLDIxMDk0LDIxMDk2LDIxMDk5LDIxMTAwLDIxMTAxLDIxMTAyLDIxMTA0LDIxMTA1LDIxMTA3LDIxMTA4LDIxMTA5LDIxMTEwLDIxMTExLDIxMTEyLDIxMTEzLDIxMTE0LDIxMTE1''@;'; put 'put ''LDIxMTE2LDIxMTE4LDIxMTIwLDIxMTIzLDIxMTI0LDIxMTI1LDIxMTI2LDIxMTI3LDIxMTI5LDIxMTMwLDIxMTMxLDIxMTMyLDIxMTMzLDIxMTM0LDIxMTM1LDIxMTM3LDIxMTM4LDIxMTQwLDIxMTQxLDIxMTQyLDIxMTQzLDIxMTQ0LDIxMTQ1LDIxMTQ2LDIxMTQ4LDIxMTU2LDIxMTU3LDIx''@;'; put 'put ''MTU4LDIxMTU5LDIxMTY2LDIxMTY3LDIxMTY4LDIxMTcyLDIxMTczLDIxMTc0LDIxMTc1LDIxMTc2LDIxMTc3LDIxMTc4LDIxMTc5LDIxMTgwLDIxMTgxLDIxMTg0LDIxMTg1LDIxMTg2LDIxMTg4LDIxMTg5LDIxMTkwLDIxMTkyLDIxMTk0LDIxMTk2LDIxMTk3LDIxMTk4LDIxMTk5LDIxMjAx''@;'; put 'put ''LDIxMjAzLDIxMjA0LDIxMjA1LDIxMjA3LDIxMjA5LDIxMjEwLDIxMjExLDIxMjEyLDIxMjEzLDIxMjE0LDIxMjE2LDIxMjE3LDIxMjE4LDIxMjE5LDIxMjIxLDIxMjIyLDIxMjIzLDIxMjI0LDIxMjI1LDIxMjI2LDIxMjI3LDIxMjI4LDIxMjI5LDIxMjMwLDIxMjMxLDIxMjMzLDIxMjM0LDIx''@;'; put 'put ''MjM1LDIxMjM2LDIxMjM3LDIxMjM4LDIxMjM5LDIxMjQwLDIxMjQzLDIxMjQ0LDIxMjQ1LDIxMjQ5LDIxMjUwLDIxMjUxLDIxMjUyLDIxMjU1LDIxMjU3LDIxMjU4LDIxMjU5LDIxMjYwLDIxMjYyLDIxMjY1LDIxMjY2LDIxMjY3LDIxMjY4LDIxMjcyLDIxMjc1LDIxMjc2LDIxMjc4LDIxMjc5''@;'; put 'put ''LDIxMjgyLDIxMjg0LDIxMjg1LDIxMjg3LDIxMjg4LDIxMjg5LDIxMjkxLDIxMjkyLDIxMjkzLDIxMjk1LDIxMjk2LDIxMjk3LDIxMjk4LDIxMjk5LDIxMzAwLDIxMzAxLDIxMzAyLDIxMzAzLDIxMzA0LDIxMzA4LDIxMzA5LDIxMzEyLDIxMzE0LDIxMzE2LDIxMzE4LDIxMzIzLDIxMzI0LDIx''@;'; put 'put ''MzI1LDIxMzI4LDIxMzMyLDIxMzM2LDIxMzM3LDIxMzM5LDIxMzQxLDIxMzQ5LDIxMzUyLDIxMzU0LDIxMzU2LDIxMzU3LDIxMzYyLDIxMzY2LDIxMzY5LDIxMzcxLDIxMzcyLDIxMzczLDIxMzc0LDIxMzc2LDIxMzc3LDIxMzc5LDIxMzgzLDIxMzg0LDIxMzg2LDIxMzkwLDIxMzkxLDIxMzky''@;'; put 'put ''LDIxMzkzLDIxMzk0LDIxMzk1LDIxMzk2LDIxMzk4LDIxMzk5LDIxNDAxLDIxNDAzLDIxNDA0LDIxNDA2LDIxNDA4LDIxNDA5LDIxNDEyLDIxNDE1LDIxNDE4LDIxNDE5LDIxNDIwLDIxNDIxLDIxNDIzLDIxNDI0LDIxNDI1LDIxNDI2LDIxNDI3LDIxNDI4LDIxNDI5LDIxNDMxLDIxNDMyLDIx''@;'; put 'put ''NDMzLDIxNDM0LDIxNDM2LDIxNDM3LDIxNDM4LDIxNDQwLDIxNDQzLDIxNDQ0LDIxNDQ1LDIxNDQ2LDIxNDQ3LDIxNDU0LDIxNDU1LDIxNDU2LDIxNDU4LDIxNDU5LDIxNDYxLDIxNDY2LDIxNDY4LDIxNDY5LDIxNDcwLDIxNDczLDIxNDc0LDIxNDc5LDIxNDkyLDIxNDk4LDIxNTAyLDIxNTAz''@;'; put 'put ''LDIxNTA0LDIxNTA2LDIxNTA5LDIxNTExLDIxNTE1LDIxNTI0LDIxNTI4LDIxNTI5LDIxNTMwLDIxNTMyLDIxNTM4LDIxNTQwLDIxNTQxLDIxNTQ2LDIxNTUyLDIxNTU1LDIxNTU4LDIxNTU5LDIxNTYyLDIxNTY1LDIxNTY3LDIxNTY5LDIxNTcwLDIxNTcyLDIxNTczLDIxNTc1LDIxNTc3LDIx''@;'; put 'put ''NTgwLDIxNTgxLDIxNTgyLDIxNTgzLDIxNTg1LDIxNTk0LDIxNTk3LDIxNTk4LDIxNTk5LDIxNjAwLDIxNjAxLDIxNjAzLDIxNjA1LDIxNjA3LDIxNjA5LDIxNjEwLDIxNjExLDIxNjEyLDIxNjEzLDIxNjE0LDIxNjE1LDIxNjE2LDIxNjIwLDIxNjI1LDIxNjI2LDIxNjMwLDIxNjMxLDIxNjMz''@;'; put 'put ''LDIxNjM1LDIxNjM3LDIxNjM5LDIxNjQwLDIxNjQxLDIxNjQyLDIxNjQ1LDIxNjQ5LDIxNjUxLDIxNjU1LDIxNjU2LDIxNjYwLDIxNjYyLDIxNjYzLDIxNjY0LDIxNjY1LDIxNjY2LDIxNjY5LDIxNjc4LDIxNjgwLDIxNjgyLDIxNjg1LDIxNjg2LDIxNjg3LDIxNjg5LDIxNjkwLDIxNjkyLDIx''@;'; put 'put ''Njk0LDIxNjk5LDIxNzAxLDIxNzA2LDIxNzA3LDIxNzE4LDIxNzIwLDIxNzIzLDIxNzI4LDIxNzI5LDIxNzMwLDIxNzMxLDIxNzMyLDIxNzM5LDIxNzQwLDIxNzQzLDIxNzQ0LDIxNzQ1LDIxNzQ4LDIxNzQ5LDIxNzUwLDIxNzUxLDIxNzUyLDIxNzUzLDIxNzU1LDIxNzU4LDIxNzYwLDIxNzYy''@;'; put 'put ''LDIxNzYzLDIxNzY0LDIxNzY1LDIxNzY4LDIxNzcwLDIxNzcxLDIxNzcyLDIxNzczLDIxNzc0LDIxNzc4LDIxNzc5LDIxNzgxLDIxNzgyLDIxNzgzLDIxNzg0LDIxNzg1LDIxNzg2LDIxNzg4LDIxNzg5LDIxNzkwLDIxNzkxLDIxNzkzLDIxNzk3LDIxNzk4LDIxODAwLDIxODAxLDIxODAzLDIx''@;'; put 'put ''ODA1LDIxODEwLDIxODEyLDIxODEzLDIxODE0LDIxODE2LDIxODE3LDIxODE4LDIxODE5LDIxODIxLDIxODI0LDIxODI2LDIxODI5LDIxODMxLDIxODMyLDIxODM1LDIxODM2LDIxODM3LDIxODM4LDIxODM5LDIxODQxLDIxODQyLDIxODQzLDIxODQ0LDIxODQ3LDIxODQ4LDIxODQ5LDIxODUw''@;'; put 'put ''LDIxODUxLDIxODUzLDIxODU0LDIxODU1LDIxODU2LDIxODU4LDIxODU5LDIxODY0LDIxODY1LDIxODY3LDIxODcxLDIxODcyLDIxODczLDIxODc0LDIxODc1LDIxODc2LDIxODgxLDIxODgyLDIxODg1LDIxODg3LDIxODkzLDIxODk0LDIxOTAwLDIxOTAxLDIxOTAyLDIxOTA0LDIxOTA2LDIx''@;'; put 'put ''OTA3LDIxOTA5LDIxOTEwLDIxOTExLDIxOTE0LDIxOTE1LDIxOTE4LDIxOTIwLDIxOTIxLDIxOTIyLDIxOTIzLDIxOTI0LDIxOTI1LDIxOTI2LDIxOTI4LDIxOTI5LDIxOTMwLDIxOTMxLDIxOTMyLDIxOTMzLDIxOTM0LDIxOTM1LDIxOTM2LDIxOTM4LDIxOTQwLDIxOTQyLDIxOTQ0LDIxOTQ2''@;'; put 'put ''LDIxOTQ4LDIxOTUxLDIxOTUyLDIxOTUzLDIxOTU0LDIxOTU1LDIxOTU4LDIxOTU5LDIxOTYwLDIxOTYyLDIxOTYzLDIxOTY2LDIxOTY3LDIxOTY4LDIxOTczLDIxOTc1LDIxOTc2LDIxOTc3LDIxOTc4LDIxOTc5LDIxOTgyLDIxOTg0LDIxOTg2LDIxOTkxLDIxOTkzLDIxOTk3LDIxOTk4LDIy''@;'; put 'put ''ZTMsMjIwMDEsMjIwMDQsMjIwMDYsMjIwMDgsMjIwMDksMjIwMTAsMjIwMTEsMjIwMTIsMjIwMTUsMjIwMTgsMjIwMTksMjIwMjAsMjIwMjEsMjIwMjIsMjIwMjMsMjIwMjYsMjIwMjcsMjIwMjksMjIwMzIsMjIwMzMsMjIwMzQsMjIwMzUsMjIwMzYsMjIwMzcsMjIwMzgsMjIwMzksMjIwNDEs''@;'; put 'put ''MjIwNDIsMjIwNDQsMjIwNDUsMjIwNDgsMjIwNDksMjIwNTAsMjIwNTMsMjIwNTQsMjIwNTYsMjIwNTcsMjIwNTgsMjIwNTksMjIwNjIsMjIwNjMsMjIwNjQsMjIwNjcsMjIwNjksMjIwNzEsMjIwNzIsMjIwNzQsMjIwNzYsMjIwNzcsMjIwNzgsMjIwODAsMjIwODEsMjIwODIsMjIwODMsMjIw''@;'; put 'put ''ODQsMjIwODUsMjIwODYsMjIwODcsMjIwODgsMjIwODksMjIwOTAsMjIwOTEsMjIwOTUsMjIwOTYsMjIwOTcsMjIwOTgsMjIwOTksMjIxMDEsMjIxMDIsMjIxMDYsMjIxMDcsMjIxMDksMjIxMTAsMjIxMTEsMjIxMTIsMjIxMTMsMjIxMTUsMjIxMTcsMjIxMTgsMjIxMTksMjIxMjUsMjIxMjYs''@;'; put 'put ''MjIxMjcsMjIxMjgsMjIxMzAsMjIxMzEsMjIxMzIsMjIxMzMsMjIxMzUsMjIxMzYsMjIxMzcsMjIxMzgsMjIxNDEsMjIxNDIsMjIxNDMsMjIxNDQsMjIxNDUsMjIxNDYsMjIxNDcsMjIxNDgsMjIxNTEsMjIxNTIsMjIxNTMsMjIxNTQsMjIxNTUsMjIxNTYsMjIxNTcsMjIxNjAsMjIxNjEsMjIx''@;'; put 'put ''NjIsMjIxNjQsMjIxNjUsMjIxNjYsMjIxNjcsMjIxNjgsMjIxNjksMjIxNzAsMjIxNzEsMjIxNzIsMjIxNzMsMjIxNzQsMjIxNzUsMjIxNzYsMjIxNzcsMjIxNzgsMjIxODAsMjIxODEsMjIxODIsMjIxODMsMjIxODQsMjIxODUsMjIxODYsMjIxODcsMjIxODgsMjIxODksMjIxOTAsMjIxOTIs''@;'; put 'put ''MjIxOTMsMjIxOTQsMjIxOTUsMjIxOTYsMjIxOTcsMjIxOTgsMjIyMDAsMjIyMDEsMjIyMDIsMjIyMDMsMjIyMDUsMjIyMDYsMjIyMDcsMjIyMDgsMjIyMDksMjIyMTAsMjIyMTEsMjIyMTIsMjIyMTMsMjIyMTQsMjIyMTUsMjIyMTYsMjIyMTcsMjIyMTksMjIyMjAsMjIyMjEsMjIyMjIsMjIy''@;'; put 'put ''MjMsMjIyMjQsMjIyMjUsMjIyMjYsMjIyMjcsMjIyMjksMjIyMzAsMjIyMzIsMjIyMzMsMjIyMzYsMjIyNDMsMjIyNDUsMjIyNDYsMjIyNDcsMjIyNDgsMjIyNDksMjIyNTAsMjIyNTIsMjIyNTQsMjIyNTUsMjIyNTgsMjIyNTksMjIyNjIsMjIyNjMsMjIyNjQsMjIyNjcsMjIyNjgsMjIyNzIs''@;'; put 'put ''MjIyNzMsMjIyNzQsMjIyNzcsMjIyNzksMjIyODMsMjIyODQsMjIyODUsMjIyODYsMjIyODcsMjIyODgsMjIyODksMjIyOTAsMjIyOTEsMjIyOTIsMjIyOTMsMjIyOTQsMjIyOTUsMjIyOTYsMjIyOTcsMjIyOTgsMjIyOTksMjIzMDEsMjIzMDIsMjIzMDQsMjIzMDUsMjIzMDYsMjIzMDgsMjIz''@;'; put 'put ''MDksMjIzMTAsMjIzMTEsMjIzMTUsMjIzMjEsMjIzMjIsMjIzMjQsMjIzMjUsMjIzMjYsMjIzMjcsMjIzMjgsMjIzMzIsMjIzMzMsMjIzMzUsMjIzMzcsMjIzMzksMjIzNDAsMjIzNDEsMjIzNDIsMjIzNDQsMjIzNDUsMjIzNDcsMjIzNTQsMjIzNTUsMjIzNTYsMjIzNTcsMjIzNTgsMjIzNjAs''@;'; put 'put ''MjIzNjEsMjIzNzAsMjIzNzEsMjIzNzMsMjIzNzUsMjIzODAsMjIzODIsMjIzODQsMjIzODUsMjIzODYsMjIzODgsMjIzODksMjIzOTIsMjIzOTMsMjIzOTQsMjIzOTcsMjIzOTgsMjIzOTksMjI0MDAsMjI0MDEsMjI0MDcsMjI0MDgsMjI0MDksMjI0MTAsMjI0MTMsMjI0MTQsMjI0MTUsMjI0''@;'; put 'put ''MTYsMjI0MTcsMjI0MjAsMjI0MjEsMjI0MjIsMjI0MjMsMjI0MjQsMjI0MjUsMjI0MjYsMjI0MjgsMjI0MjksMjI0MzAsMjI0MzEsMjI0MzcsMjI0NDAsMjI0NDIsMjI0NDQsMjI0NDcsMjI0NDgsMjI0NDksMjI0NTEsMjI0NTMsMjI0NTQsMjI0NTUsMjI0NTcsMjI0NTgsMjI0NTksMjI0NjAs''@;'; put 'put ''MjI0NjEsMjI0NjIsMjI0NjMsMjI0NjQsMjI0NjUsMjI0NjgsMjI0NjksMjI0NzAsMjI0NzEsMjI0NzIsMjI0NzMsMjI0NzQsMjI0NzYsMjI0NzcsMjI0ODAsMjI0ODEsMjI0ODMsMjI0ODYsMjI0ODcsMjI0OTEsMjI0OTIsMjI0OTQsMjI0OTcsMjI0OTgsMjI0OTksMjI1MDEsMjI1MDIsMjI1''@;'; put 'put ''MDMsMjI1MDQsMjI1MDUsMjI1MDYsMjI1MDcsMjI1MDgsMjI1MTAsMjI1MTIsMjI1MTMsMjI1MTQsMjI1MTUsMjI1MTcsMjI1MTgsMjI1MTksMjI1MjMsMjI1MjQsMjI1MjYsMjI1MjcsMjI1MjksMjI1MzEsMjI1MzIsMjI1MzMsMjI1MzYsMjI1MzcsMjI1MzgsMjI1NDAsMjI1NDIsMjI1NDMs''@;'; put 'put ''MjI1NDQsMjI1NDYsMjI1NDcsMjI1NDgsMjI1NTAsMjI1NTEsMjI1NTIsMjI1NTQsMjI1NTUsMjI1NTYsMjI1NTcsMjI1NTksMjI1NjIsMjI1NjMsMjI1NjUsMjI1NjYsMjI1NjcsMjI1NjgsMjI1NjksMjI1NzEsMjI1NzIsMjI1NzMsMjI1NzQsMjI1NzUsMjI1NzcsMjI1NzgsMjI1NzksMjI1''@;'; put 'put ''ODAsMjI1ODIsMjI1ODMsMjI1ODQsMjI1ODUsMjI1ODYsMjI1ODcsMjI1ODgsMjI1ODksMjI1OTAsMjI1OTEsMjI1OTIsMjI1OTMsMjI1OTQsMjI1OTUsMjI1OTcsMjI1OTgsMjI1OTksMjI2MDAsMjI2MDEsMjI2MDIsMjI2MDMsMjI2MDYsMjI2MDcsMjI2MDgsMjI2MTAsMjI2MTEsMjI2MTMs''@;'; put 'put ''MjI2MTQsMjI2MTUsMjI2MTcsMjI2MTgsMjI2MTksMjI2MjAsMjI2MjEsMjI2MjMsMjI2MjQsMjI2MjUsMjI2MjYsMjI2MjcsMjI2MjgsMjI2MzAsMjI2MzEsMjI2MzIsMjI2MzMsMjI2MzQsMjI2MzcsMjI2MzgsMjI2MzksMjI2NDAsMjI2NDEsMjI2NDIsMjI2NDMsMjI2NDQsMjI2NDUsMjI2''@;'; put 'put ''NDYsMjI2NDcsMjI2NDgsMjI2NDksMjI2NTAsMjI2NTEsMjI2NTIsMjI2NTMsMjI2NTUsMjI2NTgsMjI2NjAsMjI2NjIsMjI2NjMsMjI2NjQsMjI2NjYsMjI2NjcsMjI2NjgsMjI2NjksMjI2NzAsMjI2NzEsMjI2NzIsMjI2NzMsMjI2NzYsMjI2NzcsMjI2NzgsMjI2NzksMjI2ODAsMjI2ODMs''@;'; put 'put ''MjI2ODQsMjI2ODUsMjI2ODgsMjI2ODksMjI2OTAsMjI2OTEsMjI2OTIsMjI2OTMsMjI2OTQsMjI2OTUsMjI2OTgsMjI2OTksMjI3MDAsMjI3MDEsMjI3MDIsMjI3MDMsMjI3MDQsMjI3MDUsMjI3MDYsMjI3MDcsMjI3MDgsMjI3MDksMjI3MTAsMjI3MTEsMjI3MTIsMjI3MTMsMjI3MTQsMjI3''@;'; put 'put ''MTUsMjI3MTcsMjI3MTgsMjI3MTksMjI3MjAsMjI3MjIsMjI3MjMsMjI3MjQsMjI3MjYsMjI3MjcsMjI3MjgsMjI3MjksMjI3MzAsMjI3MzEsMjI3MzIsMjI3MzMsMjI3MzQsMjI3MzUsMjI3MzYsMjI3MzgsMjI3MzksMjI3NDAsMjI3NDIsMjI3NDMsMjI3NDQsMjI3NDUsMjI3NDYsMjI3NDcs''@;'; put 'put ''MjI3NDgsMjI3NDksMjI3NTAsMjI3NTEsMjI3NTIsMjI3NTMsMjI3NTQsMjI3NTUsMjI3NTcsMjI3NTgsMjI3NTksMjI3NjAsMjI3NjEsMjI3NjIsMjI3NjUsMjI3NjcsMjI3NjksMjI3NzAsMjI3NzIsMjI3NzMsMjI3NzUsMjI3NzYsMjI3NzgsMjI3NzksMjI3ODAsMjI3ODEsMjI3ODIsMjI3''@;'; put 'put ''ODMsMjI3ODQsMjI3ODUsMjI3ODcsMjI3ODksMjI3OTAsMjI3OTIsMjI3OTMsMjI3OTQsMjI3OTUsMjI3OTYsMjI3OTgsMjI4MDAsMjI4MDEsMjI4MDIsMjI4MDMsMjI4MDcsMjI4MDgsMjI4MTEsMjI4MTMsMjI4MTQsMjI4MTYsMjI4MTcsMjI4MTgsMjI4MTksMjI4MjIsMjI4MjQsMjI4Mjgs''@;'; put 'put ''MjI4MzIsMjI4MzQsMjI4MzUsMjI4MzcsMjI4MzgsMjI4NDMsMjI4NDUsMjI4NDYsMjI4NDcsMjI4NDgsMjI4NTEsMjI4NTMsMjI4NTQsMjI4NTgsMjI4NjAsMjI4NjEsMjI4NjQsMjI4NjYsMjI4NjcsMjI4NzMsMjI4NzUsMjI4NzYsMjI4NzcsMjI4NzgsMjI4NzksMjI4ODEsMjI4ODMsMjI4''@;'; put 'put ''ODQsMjI4ODYsMjI4ODcsMjI4ODgsMjI4ODksMjI4OTAsMjI4OTEsMjI4OTIsMjI4OTMsMjI4OTQsMjI4OTUsMjI4OTYsMjI4OTcsMjI4OTgsMjI5MDEsMjI5MDMsMjI5MDYsMjI5MDcsMjI5MDgsMjI5MTAsMjI5MTEsMjI5MTIsMjI5MTcsMjI5MjEsMjI5MjMsMjI5MjQsMjI5MjYsMjI5Mjcs''@;'; put 'put ''MjI5MjgsMjI5MjksMjI5MzIsMjI5MzMsMjI5MzYsMjI5MzgsMjI5MzksMjI5NDAsMjI5NDEsMjI5NDMsMjI5NDQsMjI5NDUsMjI5NDYsMjI5NTAsMjI5NTEsMjI5NTYsMjI5NTcsMjI5NjAsMjI5NjEsMjI5NjMsMjI5NjQsMjI5NjUsMjI5NjYsMjI5NjcsMjI5NjgsMjI5NzAsMjI5NzIsMjI5''@;'; put 'put ''NzMsMjI5NzUsMjI5NzYsMjI5NzcsMjI5NzgsMjI5NzksMjI5ODAsMjI5ODEsMjI5ODMsMjI5ODQsMjI5ODUsMjI5ODgsMjI5ODksMjI5OTAsMjI5OTEsMjI5OTcsMjI5OTgsMjMwMDEsMjMwMDMsMjMwMDYsMjMwMDcsMjMwMDgsMjMwMDksMjMwMTAsMjMwMTIsMjMwMTQsMjMwMTUsMjMwMTcs''@;'; put 'put ''MjMwMTgsMjMwMTksMjMwMjEsMjMwMjIsMjMwMjMsMjMwMjQsMjMwMjUsMjMwMjYsMjMwMjcsMjMwMjgsMjMwMjksMjMwMzAsMjMwMzEsMjMwMzIsMjMwMzQsMjMwMzYsMjMwMzcsMjMwMzgsMjMwNDAsMjMwNDIsMjMwNTAsMjMwNTEsMjMwNTMsMjMwNTQsMjMwNTUsMjMwNTYsMjMwNTgsMjMw''@;'; put 'put ''NjAsMjMwNjEsMjMwNjIsMjMwNjMsMjMwNjUsMjMwNjYsMjMwNjcsMjMwNjksMjMwNzAsMjMwNzMsMjMwNzQsMjMwNzYsMjMwNzgsMjMwNzksMjMwODAsMjMwODIsMjMwODMsMjMwODQsMjMwODUsMjMwODYsMjMwODcsMjMwODgsMjMwOTEsMjMwOTMsMjMwOTUsMjMwOTYsMjMwOTcsMjMwOTgs''@;'; put 'put ''MjMwOTksMjMxMDEsMjMxMDIsMjMxMDMsMjMxMDUsMjMxMDYsMjMxMDcsMjMxMDgsMjMxMDksMjMxMTEsMjMxMTIsMjMxMTUsMjMxMTYsMjMxMTcsMjMxMTgsMjMxMTksMjMxMjAsMjMxMjEsMjMxMjIsMjMxMjMsMjMxMjQsMjMxMjYsMjMxMjcsMjMxMjgsMjMxMjksMjMxMzEsMjMxMzIsMjMx''@;'; put 'put ''MzMsMjMxMzQsMjMxMzUsMjMxMzYsMjMxMzcsMjMxMzksMjMxNDAsMjMxNDEsMjMxNDIsMjMxNDQsMjMxNDUsMjMxNDcsMjMxNDgsMjMxNDksMjMxNTAsMjMxNTEsMjMxNTIsMjMxNTMsMjMxNTQsMjMxNTUsMjMxNjAsMjMxNjEsMjMxNjMsMjMxNjQsMjMxNjUsMjMxNjYsMjMxNjgsMjMxNjks''@;'; put 'put ''MjMxNzAsMjMxNzEsMjMxNzIsMjMxNzMsMjMxNzQsMjMxNzUsMjMxNzYsMjMxNzcsMjMxNzgsMjMxNzksMjMxODAsMjMxODEsMjMxODIsMjMxODMsMjMxODQsMjMxODUsMjMxODcsMjMxODgsMjMxODksMjMxOTAsMjMxOTEsMjMxOTIsMjMxOTMsMjMxOTYsMjMxOTcsMjMxOTgsMjMxOTksMjMy''@;'; put 'put ''MDAsMjMyMDEsMjMyMDIsMjMyMDMsMjMyMDQsMjMyMDUsMjMyMDYsMjMyMDcsMjMyMDgsMjMyMDksMjMyMTEsMjMyMTIsMjMyMTMsMjMyMTQsMjMyMTUsMjMyMTYsMjMyMTcsMjMyMjAsMjMyMjIsMjMyMjMsMjMyMjUsMjMyMjYsMjMyMjcsMjMyMjgsMjMyMjksMjMyMzEsMjMyMzIsMjMyMzUs''@;'; put 'put ''MjMyMzYsMjMyMzcsMjMyMzgsMjMyMzksMjMyNDAsMjMyNDIsMjMyNDMsMjMyNDUsMjMyNDYsMjMyNDcsMjMyNDgsMjMyNDksMjMyNTEsMjMyNTMsMjMyNTUsMjMyNTcsMjMyNTgsMjMyNTksMjMyNjEsMjMyNjIsMjMyNjMsMjMyNjYsMjMyNjgsMjMyNjksMjMyNzEsMjMyNzIsMjMyNzQsMjMy''@;'; put 'put ''NzYsMjMyNzcsMjMyNzgsMjMyNzksMjMyODAsMjMyODIsMjMyODMsMjMyODQsMjMyODUsMjMyODYsMjMyODcsMjMyODgsMjMyODksMjMyOTAsMjMyOTEsMjMyOTIsMjMyOTMsMjMyOTQsMjMyOTUsMjMyOTYsMjMyOTcsMjMyOTgsMjMyOTksMjMzMDAsMjMzMDEsMjMzMDIsMjMzMDMsMjMzMDQs''@;'; put 'put ''MjMzMDYsMjMzMDcsMjMzMDgsMjMzMDksMjMzMTAsMjMzMTEsMjMzMTIsMjMzMTMsMjMzMTQsMjMzMTUsMjMzMTYsMjMzMTcsMjMzMjAsMjMzMjEsMjMzMjIsMjMzMjMsMjMzMjQsMjMzMjUsMjMzMjYsMjMzMjcsMjMzMjgsMjMzMjksMjMzMzAsMjMzMzEsMjMzMzIsMjMzMzMsMjMzMzQsMjMz''@;'; put 'put ''MzUsMjMzMzYsMjMzMzcsMjMzMzgsMjMzMzksMjMzNDAsMjMzNDEsMjMzNDIsMjMzNDMsMjMzNDQsMjMzNDUsMjMzNDcsMjMzNDksMjMzNTAsMjMzNTIsMjMzNTMsMjMzNTQsMjMzNTUsMjMzNTYsMjMzNTcsMjMzNTgsMjMzNTksMjMzNjEsMjMzNjIsMjMzNjMsMjMzNjQsMjMzNjUsMjMzNjYs''@;'; put 'put ''MjMzNjcsMjMzNjgsMjMzNjksMjMzNzAsMjMzNzEsMjMzNzIsMjMzNzMsMjMzNzQsMjMzNzUsMjMzNzgsMjMzODIsMjMzOTAsMjMzOTIsMjMzOTMsMjMzOTksMjM0MDAsMjM0MDMsMjM0MDUsMjM0MDYsMjM0MDcsMjM0MTAsMjM0MTIsMjM0MTQsMjM0MTUsMjM0MTYsMjM0MTcsMjM0MTksMjM0''@;'; put 'put ''MjAsMjM0MjIsMjM0MjMsMjM0MjYsMjM0MzAsMjM0MzQsMjM0MzcsMjM0MzgsMjM0NDAsMjM0NDEsMjM0NDIsMjM0NDQsMjM0NDYsMjM0NTUsMjM0NjMsMjM0NjQsMjM0NjUsMjM0NjgsMjM0NjksMjM0NzAsMjM0NzEsMjM0NzMsMjM0NzQsMjM0NzksMjM0ODIsMjM0ODMsMjM0ODQsMjM0ODgs''@;'; put 'put ''MjM0ODksMjM0OTEsMjM0OTYsMjM0OTcsMjM0OTgsMjM0OTksMjM1MDEsMjM1MDIsMjM1MDMsMjM1MDUsMjM1MDgsMjM1MDksMjM1MTAsMjM1MTEsMjM1MTIsMjM1MTMsMjM1MTQsMjM1MTUsMjM1MTYsMjM1MjAsMjM1MjIsMjM1MjMsMjM1MjYsMjM1MjcsMjM1MjksMjM1MzAsMjM1MzEsMjM1''@;'; put 'put ''MzIsMjM1MzMsMjM1MzUsMjM1MzcsMjM1MzgsMjM1MzksMjM1NDAsMjM1NDEsMjM1NDIsMjM1NDMsMjM1NDksMjM1NTAsMjM1NTIsMjM1NTQsMjM1NTUsMjM1NTcsMjM1NTksMjM1NjAsMjM1NjMsMjM1NjQsMjM1NjUsMjM1NjYsMjM1NjgsMjM1NzAsMjM1NzEsMjM1NzUsMjM1NzcsMjM1Nzks''@;'; put 'put ''MjM1ODIsMjM1ODMsMjM1ODQsMjM1ODUsMjM1ODcsMjM1OTAsMjM1OTIsMjM1OTMsMjM1OTQsMjM1OTUsMjM1OTcsMjM1OTgsMjM1OTksMjM2MDAsMjM2MDIsMjM2MDMsMjM2MDUsMjM2MDYsMjM2MDcsMjM2MTksMjM2MjAsMjM2MjIsMjM2MjMsMjM2MjgsMjM2MjksMjM2MzQsMjM2MzUsMjM2''@;'; put 'put ''MzYsMjM2MzgsMjM2MzksMjM2NDAsMjM2NDIsMjM2NDMsMjM2NDQsMjM2NDUsMjM2NDcsMjM2NTAsMjM2NTIsMjM2NTUsMjM2NTYsMjM2NTcsMjM2NTgsMjM2NTksMjM2NjAsMjM2NjEsMjM2NjQsMjM2NjYsMjM2NjcsMjM2NjgsMjM2NjksMjM2NzAsMjM2NzEsMjM2NzIsMjM2NzUsMjM2NzYs''@;'; put 'put ''MjM2NzcsMjM2NzgsMjM2ODAsMjM2ODMsMjM2ODQsMjM2ODUsMjM2ODYsMjM2ODcsMjM2ODksMjM2OTAsMjM2OTEsMjM2OTQsMjM2OTUsMjM2OTgsMjM2OTksMjM3MDEsMjM3MDksMjM3MTAsMjM3MTEsMjM3MTIsMjM3MTMsMjM3MTYsMjM3MTcsMjM3MTgsMjM3MTksMjM3MjAsMjM3MjIsMjM3''@;'; put 'put ''MjYsMjM3MjcsMjM3MjgsMjM3MzAsMjM3MzIsMjM3MzQsMjM3MzcsMjM3MzgsMjM3MzksMjM3NDAsMjM3NDIsMjM3NDQsMjM3NDYsMjM3NDcsMjM3NDksMjM3NTAsMjM3NTEsMjM3NTIsMjM3NTMsMjM3NTQsMjM3NTYsMjM3NTcsMjM3NTgsMjM3NTksMjM3NjAsMjM3NjEsMjM3NjMsMjM3NjQs''@;'; put 'put ''MjM3NjUsMjM3NjYsMjM3NjcsMjM3NjgsMjM3NzAsMjM3NzEsMjM3NzIsMjM3NzMsMjM3NzQsMjM3NzUsMjM3NzYsMjM3NzgsMjM3NzksMjM3ODMsMjM3ODUsMjM3ODcsMjM3ODgsMjM3OTAsMjM3OTEsMjM3OTMsMjM3OTQsMjM3OTUsMjM3OTYsMjM3OTcsMjM3OTgsMjM3OTksMjM4MDAsMjM4''@;'; put 'put ''MDEsMjM4MDIsMjM4MDQsMjM4MDUsMjM4MDYsMjM4MDcsMjM4MDgsMjM4MDksMjM4MTIsMjM4MTMsMjM4MTYsMjM4MTcsMjM4MTgsMjM4MTksMjM4MjAsMjM4MjEsMjM4MjMsMjM4MjQsMjM4MjUsMjM4MjYsMjM4MjcsMjM4MjksMjM4MzEsMjM4MzIsMjM4MzMsMjM4MzQsMjM4MzYsMjM4Mzcs''@;'; put 'put ''MjM4MzksMjM4NDAsMjM4NDEsMjM4NDIsMjM4NDMsMjM4NDUsMjM4NDgsMjM4NTAsMjM4NTEsMjM4NTIsMjM4NTUsMjM4NTYsMjM4NTcsMjM4NTgsMjM4NTksMjM4NjEsMjM4NjIsMjM4NjMsMjM4NjQsMjM4NjUsMjM4NjYsMjM4NjcsMjM4NjgsMjM4NzEsMjM4NzIsMjM4NzMsMjM4NzQsMjM4''@;'; put 'put ''NzUsMjM4NzYsMjM4NzcsMjM4NzgsMjM4ODAsMjM4ODEsMjM4ODUsMjM4ODYsMjM4ODcsMjM4ODgsMjM4ODksMjM4OTAsMjM4OTEsMjM4OTIsMjM4OTMsMjM4OTQsMjM4OTUsMjM4OTcsMjM4OTgsMjM5MDAsMjM5MDIsMjM5MDMsMjM5MDQsMjM5MDUsMjM5MDYsMjM5MDcsMjM5MDgsMjM5MDks''@;'; put 'put ''MjM5MTAsMjM5MTEsMjM5MTIsMjM5MTQsMjM5MTcsMjM5MTgsMjM5MjAsMjM5MjEsMjM5MjIsMjM5MjMsMjM5MjUsMjM5MjYsMjM5MjcsMjM5MjgsMjM5MjksMjM5MzAsMjM5MzEsMjM5MzIsMjM5MzMsMjM5MzQsMjM5MzUsMjM5MzYsMjM5MzcsMjM5MzksMjM5NDAsMjM5NDEsMjM5NDIsMjM5''@;'; put 'put ''NDMsMjM5NDQsMjM5NDUsMjM5NDYsMjM5NDcsMjM5NDgsMjM5NDksMjM5NTAsMjM5NTEsMjM5NTIsMjM5NTMsMjM5NTQsMjM5NTUsMjM5NTYsMjM5NTcsMjM5NTgsMjM5NTksMjM5NjAsMjM5NjIsMjM5NjMsMjM5NjQsMjM5NjYsMjM5NjcsMjM5NjgsMjM5NjksMjM5NzAsMjM5NzEsMjM5NzIs''@;'; put 'put ''MjM5NzMsMjM5NzQsMjM5NzUsMjM5NzYsMjM5NzcsMjM5NzgsMjM5NzksMjM5ODAsMjM5ODEsMjM5ODIsMjM5ODMsMjM5ODQsMjM5ODUsMjM5ODYsMjM5ODcsMjM5ODgsMjM5ODksMjM5OTAsMjM5OTIsMjM5OTMsMjM5OTQsMjM5OTUsMjM5OTYsMjM5OTcsMjM5OTgsMjM5OTksMjRlMywyNDAw''@;'; put 'put ''MSwyNDAwMiwyNDAwMywyNDAwNCwyNDAwNiwyNDAwNywyNDAwOCwyNDAwOSwyNDAxMCwyNDAxMSwyNDAxMiwyNDAxNCwyNDAxNSwyNDAxNiwyNDAxNywyNDAxOCwyNDAxOSwyNDAyMCwyNDAyMSwyNDAyMiwyNDAyMywyNDAyNCwyNDAyNSwyNDAyNiwyNDAyOCwyNDAzMSwyNDAzMiwyNDAzNSwy''@;'; put 'put ''NDAzNiwyNDA0MiwyNDA0NCwyNDA0NSwyNDA0OCwyNDA1MywyNDA1NCwyNDA1NiwyNDA1NywyNDA1OCwyNDA1OSwyNDA2MCwyNDA2MywyNDA2NCwyNDA2OCwyNDA3MSwyNDA3MywyNDA3NCwyNDA3NSwyNDA3NywyNDA3OCwyNDA4MiwyNDA4MywyNDA4NywyNDA5NCwyNDA5NSwyNDA5NiwyNDA5''@;'; put 'put ''NywyNDA5OCwyNDA5OSwyNDEwMCwyNDEwMSwyNDEwNCwyNDEwNSwyNDEwNiwyNDEwNywyNDEwOCwyNDExMSwyNDExMiwyNDExNCwyNDExNSwyNDExNiwyNDExNywyNDExOCwyNDEyMSwyNDEyMiwyNDEyNiwyNDEyNywyNDEyOCwyNDEyOSwyNDEzMSwyNDEzNCwyNDEzNSwyNDEzNiwyNDEzNywy''@;'; put 'put ''NDEzOCwyNDEzOSwyNDE0MSwyNDE0MiwyNDE0MywyNDE0NCwyNDE0NSwyNDE0NiwyNDE0NywyNDE1MCwyNDE1MSwyNDE1MiwyNDE1MywyNDE1NCwyNDE1NiwyNDE1NywyNDE1OSwyNDE2MCwyNDE2MywyNDE2NCwyNDE2NSwyNDE2NiwyNDE2NywyNDE2OCwyNDE2OSwyNDE3MCwyNDE3MSwyNDE3''@;'; put 'put ''MiwyNDE3MywyNDE3NCwyNDE3NSwyNDE3NiwyNDE3NywyNDE4MSwyNDE4MywyNDE4NSwyNDE5MCwyNDE5MywyNDE5NCwyNDE5NSwyNDE5NywyNDIwMCwyNDIwMSwyNDIwNCwyNDIwNSwyNDIwNiwyNDIxMCwyNDIxNiwyNDIxOSwyNDIyMSwyNDIyNSwyNDIyNiwyNDIyNywyNDIyOCwyNDIzMiwy''@;'; put 'put ''NDIzMywyNDIzNCwyNDIzNSwyNDIzNiwyNDIzOCwyNDIzOSwyNDI0MCwyNDI0MSwyNDI0MiwyNDI0NCwyNDI1MCwyNDI1MSwyNDI1MiwyNDI1MywyNDI1NSwyNDI1NiwyNDI1NywyNDI1OCwyNDI1OSwyNDI2MCwyNDI2MSwyNDI2MiwyNDI2MywyNDI2NCwyNDI2NywyNDI2OCwyNDI2OSwyNDI3''@;'; put 'put ''MCwyNDI3MSwyNDI3MiwyNDI3NiwyNDI3NywyNDI3OSwyNDI4MCwyNDI4MSwyNDI4MiwyNDI4NCwyNDI4NSwyNDI4NiwyNDI4NywyNDI4OCwyNDI4OSwyNDI5MCwyNDI5MSwyNDI5MiwyNDI5MywyNDI5NCwyNDI5NSwyNDI5NywyNDI5OSwyNDMwMCwyNDMwMSwyNDMwMiwyNDMwMywyNDMwNCwy''@;'; put 'put ''NDMwNSwyNDMwNiwyNDMwNywyNDMwOSwyNDMxMiwyNDMxMywyNDMxNSwyNDMxNiwyNDMxNywyNDMyNSwyNDMyNiwyNDMyNywyNDMyOSwyNDMzMiwyNDMzMywyNDMzNCwyNDMzNiwyNDMzOCwyNDM0MCwyNDM0MiwyNDM0NSwyNDM0NiwyNDM0OCwyNDM0OSwyNDM1MCwyNDM1MywyNDM1NCwyNDM1''@;'; put 'put ''NSwyNDM1NiwyNDM2MCwyNDM2MywyNDM2NCwyNDM2NiwyNDM2OCwyNDM3MCwyNDM3MSwyNDM3MiwyNDM3MywyNDM3NCwyNDM3NSwyNDM3NiwyNDM3OSwyNDM4MSwyNDM4MiwyNDM4MywyNDM4NSwyNDM4NiwyNDM4NywyNDM4OCwyNDM4OSwyNDM5MCwyNDM5MSwyNDM5MiwyNDM5MywyNDM5NCwy''@;'; put 'put ''NDM5NSwyNDM5NiwyNDM5NywyNDM5OCwyNDM5OSwyNDQwMSwyNDQwNCwyNDQwOSwyNDQxMCwyNDQxMSwyNDQxMiwyNDQxNCwyNDQxNSwyNDQxNiwyNDQxOSwyNDQyMSwyNDQyMywyNDQyNCwyNDQyNywyNDQzMCwyNDQzMSwyNDQzNCwyNDQzNiwyNDQzNywyNDQzOCwyNDQ0MCwyNDQ0MiwyNDQ0''@;'; put 'put ''NSwyNDQ0NiwyNDQ0NywyNDQ1MSwyNDQ1NCwyNDQ2MSwyNDQ2MiwyNDQ2MywyNDQ2NSwyNDQ2NywyNDQ2OCwyNDQ3MCwyNDQ3NCwyNDQ3NSwyNDQ3NywyNDQ3OCwyNDQ3OSwyNDQ4MCwyNDQ4MiwyNDQ4MywyNDQ4NCwyNDQ4NSwyNDQ4NiwyNDQ4NywyNDQ4OSwyNDQ5MSwyNDQ5MiwyNDQ5NSwy''@;'; put 'put ''NDQ5NiwyNDQ5NywyNDQ5OCwyNDQ5OSwyNDUwMCwyNDUwMiwyNDUwNCwyNDUwNSwyNDUwNiwyNDUwNywyNDUxMCwyNDUxMSwyNDUxMiwyNDUxMywyNDUxNCwyNDUxOSwyNDUyMCwyNDUyMiwyNDUyMywyNDUyNiwyNDUzMSwyNDUzMiwyNDUzMywyNDUzOCwyNDUzOSwyNDU0MCwyNDU0MiwyNDU0''@;'; put 'put ''MywyNDU0NiwyNDU0NywyNDU0OSwyNDU1MCwyNDU1MiwyNDU1MywyNDU1NiwyNDU1OSwyNDU2MCwyNDU2MiwyNDU2MywyNDU2NCwyNDU2NiwyNDU2NywyNDU2OSwyNDU3MCwyNDU3MiwyNDU4MywyNDU4NCwyNDU4NSwyNDU4NywyNDU4OCwyNDU5MiwyNDU5MywyNDU5NSwyNDU5OSwyNDYwMCwy''@;'; put 'put ''NDYwMiwyNDYwNiwyNDYwNywyNDYxMCwyNDYxMSwyNDYxMiwyNDYyMCwyNDYyMSwyNDYyMiwyNDYyNCwyNDYyNSwyNDYyNiwyNDYyNywyNDYyOCwyNDYzMCwyNDYzMSwyNDYzMiwyNDYzMywyNDYzNCwyNDYzNywyNDYzOCwyNDY0MCwyNDY0NCwyNDY0NSwyNDY0NiwyNDY0NywyNDY0OCwyNDY0''@;'; put 'put ''OSwyNDY1MCwyNDY1MiwyNDY1NCwyNDY1NSwyNDY1NywyNDY1OSwyNDY2MCwyNDY2MiwyNDY2MywyNDY2NCwyNDY2NywyNDY2OCwyNDY3MCwyNDY3MSwyNDY3MiwyNDY3MywyNDY3NywyNDY3OCwyNDY4NiwyNDY4OSwyNDY5MCwyNDY5MiwyNDY5MywyNDY5NSwyNDcwMiwyNDcwNCwyNDcwNSwy''@;'; put 'put ''NDcwNiwyNDcwOSwyNDcxMCwyNDcxMSwyNDcxMiwyNDcxNCwyNDcxNSwyNDcxOCwyNDcxOSwyNDcyMCwyNDcyMSwyNDcyMywyNDcyNSwyNDcyNywyNDcyOCwyNDcyOSwyNDczMiwyNDczNCwyNDczNywyNDczOCwyNDc0MCwyNDc0MSwyNDc0MywyNDc0NSwyNDc0NiwyNDc1MCwyNDc1MiwyNDc1''@;'; put 'put ''NSwyNDc1NywyNDc1OCwyNDc1OSwyNDc2MSwyNDc2MiwyNDc2NSwyNDc2NiwyNDc2NywyNDc2OCwyNDc2OSwyNDc3MCwyNDc3MSwyNDc3MiwyNDc3NSwyNDc3NiwyNDc3NywyNDc4MCwyNDc4MSwyNDc4MiwyNDc4MywyNDc4NCwyNDc4NiwyNDc4NywyNDc4OCwyNDc5MCwyNDc5MSwyNDc5Mywy''@;'; put 'put ''NDc5NSwyNDc5OCwyNDgwMSwyNDgwMiwyNDgwMywyNDgwNCwyNDgwNSwyNDgxMCwyNDgxNywyNDgxOCwyNDgyMSwyNDgyMywyNDgyNCwyNDgyNywyNDgyOCwyNDgyOSwyNDgzMCwyNDgzMSwyNDgzNCwyNDgzNSwyNDgzNiwyNDgzNywyNDgzOSwyNDg0MiwyNDg0MywyNDg0NCwyNDg0OCwyNDg0''@;'; put 'put ''OSwyNDg1MCwyNDg1MSwyNDg1MiwyNDg1NCwyNDg1NSwyNDg1NiwyNDg1NywyNDg1OSwyNDg2MCwyNDg2MSwyNDg2MiwyNDg2NSwyNDg2NiwyNDg2OSwyNDg3MiwyNDg3MywyNDg3NCwyNDg3NiwyNDg3NywyNDg3OCwyNDg3OSwyNDg4MCwyNDg4MSwyNDg4MiwyNDg4MywyNDg4NCwyNDg4NSwy''@;'; put 'put ''NDg4NiwyNDg4NywyNDg4OCwyNDg4OSwyNDg5MCwyNDg5MSwyNDg5MiwyNDg5MywyNDg5NCwyNDg5NiwyNDg5NywyNDg5OCwyNDg5OSwyNDkwMCwyNDkwMSwyNDkwMiwyNDkwMywyNDkwNSwyNDkwNywyNDkwOSwyNDkxMSwyNDkxMiwyNDkxNCwyNDkxNSwyNDkxNiwyNDkxOCwyNDkxOSwyNDky''@;'; put 'put ''MCwyNDkyMSwyNDkyMiwyNDkyMywyNDkyNCwyNDkyNiwyNDkyNywyNDkyOCwyNDkyOSwyNDkzMSwyNDkzMiwyNDkzMywyNDkzNCwyNDkzNywyNDkzOCwyNDkzOSwyNDk0MCwyNDk0MSwyNDk0MiwyNDk0MywyNDk0NSwyNDk0NiwyNDk0NywyNDk0OCwyNDk1MCwyNDk1MiwyNDk1MywyNDk1NCwy''@;'; put 'put ''NDk1NSwyNDk1NiwyNDk1NywyNDk1OCwyNDk1OSwyNDk2MCwyNDk2MSwyNDk2MiwyNDk2MywyNDk2NCwyNDk2NSwyNDk2NiwyNDk2NywyNDk2OCwyNDk2OSwyNDk3MCwyNDk3MiwyNDk3MywyNDk3NSwyNDk3NiwyNDk3NywyNDk3OCwyNDk3OSwyNDk4MSwyNDk4MiwyNDk4MywyNDk4NCwyNDk4''@;'; put 'put ''NSwyNDk4NiwyNDk4NywyNDk4OCwyNDk5MCwyNDk5MSwyNDk5MiwyNDk5MywyNDk5NCwyNDk5NSwyNDk5NiwyNDk5NywyNDk5OCwyNTAwMiwyNTAwMywyNTAwNSwyNTAwNiwyNTAwNywyNTAwOCwyNTAwOSwyNTAxMCwyNTAxMSwyNTAxMiwyNTAxMywyNTAxNCwyNTAxNiwyNTAxNywyNTAxOCwy''@;'; put 'put ''NTAxOSwyNTAyMCwyNTAyMSwyNTAyMywyNTAyNCwyNTAyNSwyNTAyNywyNTAyOCwyNTAyOSwyNTAzMCwyNTAzMSwyNTAzMywyNTAzNiwyNTAzNywyNTAzOCwyNTAzOSwyNTA0MCwyNTA0MywyNTA0NSwyNTA0NiwyNTA0NywyNTA0OCwyNTA0OSwyNTA1MCwyNTA1MSwyNTA1MiwyNTA1MywyNTA1''@;'; put 'put ''NCwyNTA1NSwyNTA1NiwyNTA1NywyNTA1OCwyNTA1OSwyNTA2MCwyNTA2MSwyNTA2MywyNTA2NCwyNTA2NSwyNTA2NiwyNTA2NywyNTA2OCwyNTA2OSwyNTA3MCwyNTA3MSwyNTA3MiwyNTA3MywyNTA3NCwyNTA3NSwyNTA3NiwyNTA3OCwyNTA3OSwyNTA4MCwyNTA4MSwyNTA4MiwyNTA4Mywy''@;'; put 'put ''NTA4NCwyNTA4NSwyNTA4NiwyNTA4OCwyNTA4OSwyNTA5MCwyNTA5MSwyNTA5MiwyNTA5MywyNTA5NSwyNTA5NywyNTEwNywyNTEwOCwyNTExMywyNTExNiwyNTExNywyNTExOCwyNTEyMCwyNTEyMywyNTEyNiwyNTEyNywyNTEyOCwyNTEyOSwyNTEzMSwyNTEzMywyNTEzNSwyNTEzNiwyNTEz''@;'; put 'put ''NywyNTEzOCwyNTE0MSwyNTE0MiwyNTE0NCwyNTE0NSwyNTE0NiwyNTE0NywyNTE0OCwyNTE1NCwyNTE1NiwyNTE1NywyNTE1OCwyNTE2MiwyNTE2NywyNTE2OCwyNTE3MywyNTE3NCwyNTE3NSwyNTE3NywyNTE3OCwyNTE4MCwyNTE4MSwyNTE4MiwyNTE4MywyNTE4NCwyNTE4NSwyNTE4Niwy''@;'; put 'put ''NTE4OCwyNTE4OSwyNTE5MiwyNTIwMSwyNTIwMiwyNTIwNCwyNTIwNSwyNTIwNywyNTIwOCwyNTIxMCwyNTIxMSwyNTIxMywyNTIxNywyNTIxOCwyNTIxOSwyNTIyMSwyNTIyMiwyNTIyMywyNTIyNCwyNTIyNywyNTIyOCwyNTIyOSwyNTIzMCwyNTIzMSwyNTIzMiwyNTIzNiwyNTI0MSwyNTI0''@;'; put 'put ''NCwyNTI0NSwyNTI0NiwyNTI1MSwyNTI1NCwyNTI1NSwyNTI1NywyNTI1OCwyNTI2MSwyNTI2MiwyNTI2MywyNTI2NCwyNTI2NiwyNTI2NywyNTI2OCwyNTI3MCwyNTI3MSwyNTI3MiwyNTI3NCwyNTI3OCwyNTI4MCwyNTI4MSwyNTI4MywyNTI5MSwyNTI5NSwyNTI5NywyNTMwMSwyNTMwOSwy''@;'; put 'put ''NTMxMCwyNTMxMiwyNTMxMywyNTMxNiwyNTMyMiwyNTMyMywyNTMyOCwyNTMzMCwyNTMzMywyNTMzNiwyNTMzNywyNTMzOCwyNTMzOSwyNTM0NCwyNTM0NywyNTM0OCwyNTM0OSwyNTM1MCwyNTM1NCwyNTM1NSwyNTM1NiwyNTM1NywyNTM1OSwyNTM2MCwyNTM2MiwyNTM2MywyNTM2NCwyNTM2''@;'; put 'put ''NSwyNTM2NywyNTM2OCwyNTM2OSwyNTM3MiwyNTM4MiwyNTM4MywyNTM4NSwyNTM4OCwyNTM4OSwyNTM5MCwyNTM5MiwyNTM5MywyNTM5NSwyNTM5NiwyNTM5NywyNTM5OCwyNTM5OSwyNTQwMCwyNTQwMywyNTQwNCwyNTQwNiwyNTQwNywyNTQwOCwyNTQwOSwyNTQxMiwyNTQxNSwyNTQxNiwy''@;'; put 'put ''NTQxOCwyNTQyNSwyNTQyNiwyNTQyNywyNTQyOCwyNTQzMCwyNTQzMSwyNTQzMiwyNTQzMywyNTQzNCwyNTQzNSwyNTQzNiwyNTQzNywyNTQ0MCwyNTQ0NCwyNTQ0NSwyNTQ0NiwyNTQ0OCwyNTQ1MCwyNTQ1MSwyNTQ1MiwyNTQ1NSwyNTQ1NiwyNTQ1OCwyNTQ1OSwyNTQ2MCwyNTQ2MSwyNTQ2''@;'; put 'put ''NCwyNTQ2NSwyNTQ2OCwyNTQ2OSwyNTQ3MCwyNTQ3MSwyNTQ3MywyNTQ3NSwyNTQ3NiwyNTQ3NywyNTQ3OCwyNTQ4MywyNTQ4NSwyNTQ4OSwyNTQ5MSwyNTQ5MiwyNTQ5MywyNTQ5NSwyNTQ5NywyNTQ5OCwyNTQ5OSwyNTUwMCwyNTUwMSwyNTUwMiwyNTUwMywyNTUwNSwyNTUwOCwyNTUxMCwy''@;'; put 'put ''NTUxNSwyNTUxOSwyNTUyMSwyNTUyMiwyNTUyNSwyNTUyNiwyNTUyOSwyNTUzMSwyNTUzMywyNTUzNSwyNTUzNiwyNTUzNywyNTUzOCwyNTUzOSwyNTU0MSwyNTU0MywyNTU0NCwyNTU0NiwyNTU0NywyNTU0OCwyNTU1MywyNTU1NSwyNTU1NiwyNTU1NywyNTU1OSwyNTU2MCwyNTU2MSwyNTU2''@;'; put 'put ''MiwyNTU2MywyNTU2NCwyNTU2NSwyNTU2NywyNTU3MCwyNTU3MiwyNTU3MywyNTU3NCwyNTU3NSwyNTU3NiwyNTU3OSwyNTU4MCwyNTU4MiwyNTU4MywyNTU4NCwyNTU4NSwyNTU4NywyNTU4OSwyNTU5MSwyNTU5MywyNTU5NCwyNTU5NSwyNTU5NiwyNTU5OCwyNTYwMywyNTYwNCwyNTYwNiwy''@;'; put 'put ''NTYwNywyNTYwOCwyNTYwOSwyNTYxMCwyNTYxMywyNTYxNCwyNTYxNywyNTYxOCwyNTYyMSwyNTYyMiwyNTYyMywyNTYyNCwyNTYyNSwyNTYyNiwyNTYyOSwyNTYzMSwyNTYzNCwyNTYzNSwyNTYzNiwyNTYzNywyNTYzOSwyNTY0MCwyNTY0MSwyNTY0MywyNTY0NiwyNTY0NywyNTY0OCwyNTY0''@;'; put 'put ''OSwyNTY1MCwyNTY1MSwyNTY1MywyNTY1NCwyNTY1NSwyNTY1NiwyNTY1NywyNTY1OSwyNTY2MCwyNTY2MiwyNTY2NCwyNTY2NiwyNTY2NywyNTY3MywyNTY3NSwyNTY3NiwyNTY3NywyNTY3OCwyNTY3OSwyNTY4MCwyNTY4MSwyNTY4MywyNTY4NSwyNTY4NiwyNTY4NywyNTY4OSwyNTY5MCwy''@;'; put 'put ''NTY5MSwyNTY5MiwyNTY5MywyNTY5NSwyNTY5NiwyNTY5NywyNTY5OCwyNTY5OSwyNTcwMCwyNTcwMSwyNTcwMiwyNTcwNCwyNTcwNiwyNTcwNywyNTcwOCwyNTcxMCwyNTcxMSwyNTcxMiwyNTcxMywyNTcxNCwyNTcxNSwyNTcxNiwyNTcxNywyNTcxOCwyNTcxOSwyNTcyMywyNTcyNCwyNTcy''@;'; put 'put ''NSwyNTcyNiwyNTcyNywyNTcyOCwyNTcyOSwyNTczMSwyNTczNCwyNTczNiwyNTczNywyNTczOCwyNTczOSwyNTc0MCwyNTc0MSwyNTc0MiwyNTc0MywyNTc0NCwyNTc0NywyNTc0OCwyNTc1MSwyNTc1MiwyNTc1NCwyNTc1NSwyNTc1NiwyNTc1NywyNTc1OSwyNTc2MCwyNTc2MSwyNTc2Miwy''@;'; put 'put ''NTc2MywyNTc2NSwyNTc2NiwyNTc2NywyNTc2OCwyNTc3MCwyNTc3MSwyNTc3NSwyNTc3NywyNTc3OCwyNTc3OSwyNTc4MCwyNTc4MiwyNTc4NSwyNTc4NywyNTc4OSwyNTc5MCwyNTc5MSwyNTc5MywyNTc5NSwyNTc5NiwyNTc5OCwyNTc5OSwyNTgwMCwyNTgwMSwyNTgwMiwyNTgwMywyNTgw''@;'; put 'put ''NCwyNTgwNywyNTgwOSwyNTgxMSwyNTgxMiwyNTgxMywyNTgxNCwyNTgxNywyNTgxOCwyNTgxOSwyNTgyMCwyNTgyMSwyNTgyMywyNTgyNCwyNTgyNSwyNTgyNywyNTgyOSwyNTgzMSwyNTgzMiwyNTgzMywyNTgzNCwyNTgzNSwyNTgzNiwyNTgzNywyNTgzOCwyNTgzOSwyNTg0MCwyNTg0MSwy''@;'; put 'put ''NTg0MiwyNTg0MywyNTg0NCwyNTg0NSwyNTg0NiwyNTg0NywyNTg0OCwyNTg0OSwyNTg1MCwyNTg1MSwyNTg1MiwyNTg1MywyNTg1NCwyNTg1NSwyNTg1NywyNTg1OCwyNTg1OSwyNTg2MCwyNTg2MSwyNTg2MiwyNTg2MywyNTg2NCwyNTg2NiwyNTg2NywyNTg2OCwyNTg2OSwyNTg3MCwyNTg3''@;'; put 'put ''MSwyNTg3MiwyNTg3MywyNTg3NSwyNTg3NiwyNTg3NywyNTg3OCwyNTg3OSwyNTg4MSwyNTg4MiwyNTg4MywyNTg4NCwyNTg4NSwyNTg4NiwyNTg4NywyNTg4OCwyNTg4OSwyNTg5MCwyNTg5MSwyNTg5MiwyNTg5NCwyNTg5NSwyNTg5NiwyNTg5NywyNTg5OCwyNTkwMCwyNTkwMSwyNTkwNCwy''@;'; put 'put ''NTkwNSwyNTkwNiwyNTkwNywyNTkxMSwyNTkxNCwyNTkxNiwyNTkxNywyNTkyMCwyNTkyMSwyNTkyMiwyNTkyMywyNTkyNCwyNTkyNiwyNTkyNywyNTkzMCwyNTkzMSwyNTkzMywyNTkzNCwyNTkzNiwyNTkzOCwyNTkzOSwyNTk0MCwyNTk0MywyNTk0NCwyNTk0NiwyNTk0OCwyNTk1MSwyNTk1''@;'; put 'put ''MiwyNTk1MywyNTk1NiwyNTk1NywyNTk1OSwyNTk2MCwyNTk2MSwyNTk2MiwyNTk2NSwyNTk2NiwyNTk2NywyNTk2OSwyNTk3MSwyNTk3MywyNTk3NCwyNTk3NiwyNTk3NywyNTk3OCwyNTk3OSwyNTk4MCwyNTk4MSwyNTk4MiwyNTk4MywyNTk4NCwyNTk4NSwyNTk4NiwyNTk4NywyNTk4OCwy''@;'; put 'put ''NTk4OSwyNTk5MCwyNTk5MiwyNTk5MywyNTk5NCwyNTk5NywyNTk5OCwyNTk5OSwyNjAwMiwyNjAwNCwyNjAwNSwyNjAwNiwyNjAwOCwyNjAxMCwyNjAxMywyNjAxNCwyNjAxNiwyNjAxOCwyNjAxOSwyNjAyMiwyNjAyNCwyNjAyNiwyNjAyOCwyNjAzMCwyNjAzMywyNjAzNCwyNjAzNSwyNjAz''@;'; put 'put ''NiwyNjAzNywyNjAzOCwyNjAzOSwyNjA0MCwyNjA0MiwyNjA0MywyNjA0NiwyNjA0NywyNjA0OCwyNjA1MCwyNjA1NSwyNjA1NiwyNjA1NywyNjA1OCwyNjA2MSwyNjA2NCwyNjA2NSwyNjA2NywyNjA2OCwyNjA2OSwyNjA3MiwyNjA3MywyNjA3NCwyNjA3NSwyNjA3NiwyNjA3NywyNjA3OCwy''@;'; put 'put ''NjA3OSwyNjA4MSwyNjA4MywyNjA4NCwyNjA5MCwyNjA5MSwyNjA5OCwyNjA5OSwyNjEwMCwyNjEwMSwyNjEwNCwyNjEwNSwyNjEwNywyNjEwOCwyNjEwOSwyNjExMCwyNjExMSwyNjExMywyNjExNiwyNjExNywyNjExOSwyNjEyMCwyNjEyMSwyNjEyMywyNjEyNSwyNjEyOCwyNjEyOSwyNjEz''@;'; put 'put ''MCwyNjEzNCwyNjEzNSwyNjEzNiwyNjEzOCwyNjEzOSwyNjE0MCwyNjE0MiwyNjE0NSwyNjE0NiwyNjE0NywyNjE0OCwyNjE1MCwyNjE1MywyNjE1NCwyNjE1NSwyNjE1NiwyNjE1OCwyNjE2MCwyNjE2MiwyNjE2MywyNjE2NywyNjE2OCwyNjE2OSwyNjE3MCwyNjE3MSwyNjE3MywyNjE3NSwy''@;'; put 'put ''NjE3NiwyNjE3OCwyNjE4MCwyNjE4MSwyNjE4MiwyNjE4MywyNjE4NCwyNjE4NSwyNjE4NiwyNjE4OSwyNjE5MCwyNjE5MiwyNjE5MywyNjIwMCwyNjIwMSwyNjIwMywyNjIwNCwyNjIwNSwyNjIwNiwyNjIwOCwyNjIxMCwyNjIxMSwyNjIxMywyNjIxNSwyNjIxNywyNjIxOCwyNjIxOSwyNjIy''@;'; put 'put ''MCwyNjIyMSwyNjIyNSwyNjIyNiwyNjIyNywyNjIyOSwyNjIzMiwyNjIzMywyNjIzNSwyNjIzNiwyNjIzNywyNjIzOSwyNjI0MCwyNjI0MSwyNjI0MywyNjI0NSwyNjI0NiwyNjI0OCwyNjI0OSwyNjI1MCwyNjI1MSwyNjI1MywyNjI1NCwyNjI1NSwyNjI1NiwyNjI1OCwyNjI1OSwyNjI2MCwy''@;'; put 'put ''NjI2MSwyNjI2NCwyNjI2NSwyNjI2NiwyNjI2NywyNjI2OCwyNjI3MCwyNjI3MSwyNjI3MiwyNjI3MywyNjI3NCwyNjI3NSwyNjI3NiwyNjI3NywyNjI3OCwyNjI4MSwyNjI4MiwyNjI4MywyNjI4NCwyNjI4NSwyNjI4NywyNjI4OCwyNjI4OSwyNjI5MCwyNjI5MSwyNjI5MywyNjI5NCwyNjI5''@;'; put 'put ''NSwyNjI5NiwyNjI5OCwyNjI5OSwyNjMwMCwyNjMwMSwyNjMwMywyNjMwNCwyNjMwNSwyNjMwNiwyNjMwNywyNjMwOCwyNjMwOSwyNjMxMCwyNjMxMSwyNjMxMiwyNjMxMywyNjMxNCwyNjMxNSwyNjMxNiwyNjMxNywyNjMxOCwyNjMxOSwyNjMyMCwyNjMyMSwyNjMyMiwyNjMyMywyNjMyNCwy''@;'; put 'put ''NjMyNSwyNjMyNiwyNjMyNywyNjMyOCwyNjMzMCwyNjMzNCwyNjMzNSwyNjMzNiwyNjMzNywyNjMzOCwyNjMzOSwyNjM0MCwyNjM0MSwyNjM0MywyNjM0NCwyNjM0NiwyNjM0NywyNjM0OCwyNjM0OSwyNjM1MCwyNjM1MSwyNjM1MywyNjM1NywyNjM1OCwyNjM2MCwyNjM2MiwyNjM2MywyNjM2''@;'; put 'put ''NSwyNjM2OSwyNjM3MCwyNjM3MSwyNjM3MiwyNjM3MywyNjM3NCwyNjM3NSwyNjM4MCwyNjM4MiwyNjM4MywyNjM4NSwyNjM4NiwyNjM4NywyNjM5MCwyNjM5MiwyNjM5MywyNjM5NCwyNjM5NiwyNjM5OCwyNjQwMCwyNjQwMSwyNjQwMiwyNjQwMywyNjQwNCwyNjQwNSwyNjQwNywyNjQwOSwy''@;'; put 'put ''NjQxNCwyNjQxNiwyNjQxOCwyNjQxOSwyNjQyMiwyNjQyMywyNjQyNCwyNjQyNSwyNjQyNywyNjQyOCwyNjQzMCwyNjQzMSwyNjQzMywyNjQzNiwyNjQzNywyNjQzOSwyNjQ0MiwyNjQ0MywyNjQ0NSwyNjQ1MCwyNjQ1MiwyNjQ1MywyNjQ1NSwyNjQ1NiwyNjQ1NywyNjQ1OCwyNjQ1OSwyNjQ2''@;'; put 'put ''MSwyNjQ2NiwyNjQ2NywyNjQ2OCwyNjQ3MCwyNjQ3MSwyNjQ3NSwyNjQ3NiwyNjQ3OCwyNjQ4MSwyNjQ4NCwyNjQ4NiwyNjQ4OCwyNjQ4OSwyNjQ5MCwyNjQ5MSwyNjQ5MywyNjQ5NiwyNjQ5OCwyNjQ5OSwyNjUwMSwyNjUwMiwyNjUwNCwyNjUwNiwyNjUwOCwyNjUwOSwyNjUxMCwyNjUxMSwy''@;'; put 'put ''NjUxMywyNjUxNCwyNjUxNSwyNjUxNiwyNjUxOCwyNjUyMSwyNjUyMywyNjUyNywyNjUyOCwyNjUyOSwyNjUzMiwyNjUzNCwyNjUzNywyNjU0MCwyNjU0MiwyNjU0NSwyNjU0NiwyNjU0OCwyNjU1MywyNjU1NCwyNjU1NSwyNjU1NiwyNjU1NywyNjU1OCwyNjU1OSwyNjU2MCwyNjU2MiwyNjU2''@;'; put 'put ''NSwyNjU2NiwyNjU2NywyNjU2OCwyNjU2OSwyNjU3MCwyNjU3MSwyNjU3MiwyNjU3MywyNjU3NCwyNjU4MSwyNjU4MiwyNjU4MywyNjU4NywyNjU5MSwyNjU5MywyNjU5NSwyNjU5NiwyNjU5OCwyNjU5OSwyNjYwMCwyNjYwMiwyNjYwMywyNjYwNSwyNjYwNiwyNjYxMCwyNjYxMywyNjYxNCwy''@;'; put 'put ''NjYxNSwyNjYxNiwyNjYxNywyNjYxOCwyNjYxOSwyNjYyMCwyNjYyMiwyNjYyNSwyNjYyNiwyNjYyNywyNjYyOCwyNjYzMCwyNjYzNywyNjY0MCwyNjY0MiwyNjY0NCwyNjY0NSwyNjY0OCwyNjY0OSwyNjY1MCwyNjY1MSwyNjY1MiwyNjY1NCwyNjY1NSwyNjY1NiwyNjY1OCwyNjY1OSwyNjY2''@;'; put 'put ''MCwyNjY2MSwyNjY2MiwyNjY2MywyNjY2NCwyNjY2NywyNjY2OCwyNjY2OSwyNjY3MCwyNjY3MSwyNjY3MiwyNjY3MywyNjY3NiwyNjY3NywyNjY3OCwyNjY4MiwyNjY4MywyNjY4NywyNjY5NSwyNjY5OSwyNjcwMSwyNjcwMywyNjcwNiwyNjcxMCwyNjcxMSwyNjcxMiwyNjcxMywyNjcxNCwy''@;'; put 'put ''NjcxNSwyNjcxNiwyNjcxNywyNjcxOCwyNjcxOSwyNjczMCwyNjczMiwyNjczMywyNjczNCwyNjczNSwyNjczNiwyNjczNywyNjczOCwyNjczOSwyNjc0MSwyNjc0NCwyNjc0NSwyNjc0NiwyNjc0NywyNjc0OCwyNjc0OSwyNjc1MCwyNjc1MSwyNjc1MiwyNjc1NCwyNjc1NiwyNjc1OSwyNjc2''@;'; put 'put ''MCwyNjc2MSwyNjc2MiwyNjc2MywyNjc2NCwyNjc2NSwyNjc2NiwyNjc2OCwyNjc2OSwyNjc3MCwyNjc3MiwyNjc3MywyNjc3NCwyNjc3NiwyNjc3NywyNjc3OCwyNjc3OSwyNjc4MCwyNjc4MSwyNjc4MiwyNjc4MywyNjc4NCwyNjc4NSwyNjc4NywyNjc4OCwyNjc4OSwyNjc5MywyNjc5NCwy''@;'; put 'put ''Njc5NSwyNjc5NiwyNjc5OCwyNjgwMSwyNjgwMiwyNjgwNCwyNjgwNiwyNjgwNywyNjgwOCwyNjgwOSwyNjgxMCwyNjgxMSwyNjgxMiwyNjgxMywyNjgxNCwyNjgxNSwyNjgxNywyNjgxOSwyNjgyMCwyNjgyMSwyNjgyMiwyNjgyMywyNjgyNCwyNjgyNiwyNjgyOCwyNjgzMCwyNjgzMSwyNjgz''@;'; put 'put ''MiwyNjgzMywyNjgzNSwyNjgzNiwyNjgzOCwyNjgzOSwyNjg0MSwyNjg0MywyNjg0NCwyNjg0NSwyNjg0NiwyNjg0NywyNjg0OSwyNjg1MCwyNjg1MiwyNjg1MywyNjg1NCwyNjg1NSwyNjg1NiwyNjg1NywyNjg1OCwyNjg1OSwyNjg2MCwyNjg2MSwyNjg2MywyNjg2NiwyNjg2NywyNjg2OCwy''@;'; put 'put ''Njg3MCwyNjg3MSwyNjg3MiwyNjg3NSwyNjg3NywyNjg3OCwyNjg3OSwyNjg4MCwyNjg4MiwyNjg4MywyNjg4NCwyNjg4NiwyNjg4NywyNjg4OCwyNjg4OSwyNjg5MCwyNjg5MiwyNjg5NSwyNjg5NywyNjg5OSwyNjkwMCwyNjkwMSwyNjkwMiwyNjkwMywyNjkwNCwyNjkwNSwyNjkwNiwyNjkw''@;'; put 'put ''NywyNjkwOCwyNjkwOSwyNjkxMCwyNjkxMywyNjkxNCwyNjkxNSwyNjkxNywyNjkxOCwyNjkxOSwyNjkyMCwyNjkyMSwyNjkyMiwyNjkyMywyNjkyNCwyNjkyNiwyNjkyNywyNjkyOSwyNjkzMCwyNjkzMSwyNjkzMywyNjkzNCwyNjkzNSwyNjkzNiwyNjkzOCwyNjkzOSwyNjk0MCwyNjk0Miwy''@;'; put 'put ''Njk0NCwyNjk0NSwyNjk0NywyNjk0OCwyNjk0OSwyNjk1MCwyNjk1MSwyNjk1MiwyNjk1MywyNjk1NCwyNjk1NSwyNjk1NiwyNjk1NywyNjk1OCwyNjk1OSwyNjk2MCwyNjk2MSwyNjk2MiwyNjk2MywyNjk2NSwyNjk2NiwyNjk2OCwyNjk2OSwyNjk3MSwyNjk3MiwyNjk3NSwyNjk3NywyNjk3''@;'; put 'put ''OCwyNjk4MCwyNjk4MSwyNjk4MywyNjk4NCwyNjk4NSwyNjk4NiwyNjk4OCwyNjk4OSwyNjk5MSwyNjk5MiwyNjk5NCwyNjk5NSwyNjk5NiwyNjk5NywyNjk5OCwyNzAwMiwyNzAwMywyNzAwNSwyNzAwNiwyNzAwNywyNzAwOSwyNzAxMSwyNzAxMywyNzAxOCwyNzAxOSwyNzAyMCwyNzAyMiwy''@;'; put 'put ''NzAyMywyNzAyNCwyNzAyNSwyNzAyNiwyNzAyNywyNzAzMCwyNzAzMSwyNzAzMywyNzAzNCwyNzAzNywyNzAzOCwyNzAzOSwyNzA0MCwyNzA0MSwyNzA0MiwyNzA0MywyNzA0NCwyNzA0NSwyNzA0NiwyNzA0OSwyNzA1MCwyNzA1MiwyNzA1NCwyNzA1NSwyNzA1NiwyNzA1OCwyNzA1OSwyNzA2''@;'; put 'put ''MSwyNzA2MiwyNzA2NCwyNzA2NSwyNzA2NiwyNzA2OCwyNzA2OSwyNzA3MCwyNzA3MSwyNzA3MiwyNzA3NCwyNzA3NSwyNzA3NiwyNzA3NywyNzA3OCwyNzA3OSwyNzA4MCwyNzA4MSwyNzA4MywyNzA4NSwyNzA4NywyNzA4OSwyNzA5MCwyNzA5MSwyNzA5MywyNzA5NCwyNzA5NSwyNzA5Niwy''@;'; put 'put ''NzA5NywyNzA5OCwyNzEwMCwyNzEwMSwyNzEwMiwyNzEwNSwyNzEwNiwyNzEwNywyNzEwOCwyNzEwOSwyNzExMCwyNzExMSwyNzExMiwyNzExMywyNzExNCwyNzExNSwyNzExNiwyNzExOCwyNzExOSwyNzEyMCwyNzEyMSwyNzEyMywyNzEyNCwyNzEyNSwyNzEyNiwyNzEyNywyNzEyOCwyNzEy''@;'; put 'put ''OSwyNzEzMCwyNzEzMSwyNzEzMiwyNzEzNCwyNzEzNiwyNzEzNywyNzEzOCwyNzEzOSwyNzE0MCwyNzE0MSwyNzE0MiwyNzE0MywyNzE0NCwyNzE0NSwyNzE0NywyNzE0OCwyNzE0OSwyNzE1MCwyNzE1MSwyNzE1MiwyNzE1MywyNzE1NCwyNzE1NSwyNzE1NiwyNzE1NywyNzE1OCwyNzE2MSwy''@;'; put 'put ''NzE2MiwyNzE2MywyNzE2NCwyNzE2NSwyNzE2NiwyNzE2OCwyNzE3MCwyNzE3MSwyNzE3MiwyNzE3MywyNzE3NCwyNzE3NSwyNzE3NywyNzE3OSwyNzE4MCwyNzE4MSwyNzE4MiwyNzE4NCwyNzE4NiwyNzE4NywyNzE4OCwyNzE5MCwyNzE5MSwyNzE5MiwyNzE5MywyNzE5NCwyNzE5NSwyNzE5''@;'; put 'put ''NiwyNzE5OSwyNzIwMCwyNzIwMSwyNzIwMiwyNzIwMywyNzIwNSwyNzIwNiwyNzIwOCwyNzIwOSwyNzIxMCwyNzIxMSwyNzIxMiwyNzIxMywyNzIxNCwyNzIxNSwyNzIxNywyNzIxOCwyNzIxOSwyNzIyMCwyNzIyMSwyNzIyMiwyNzIyMywyNzIyNiwyNzIyOCwyNzIyOSwyNzIzMCwyNzIzMSwy''@;'; put 'put ''NzIzMiwyNzIzNCwyNzIzNSwyNzIzNiwyNzIzOCwyNzIzOSwyNzI0MCwyNzI0MSwyNzI0MiwyNzI0MywyNzI0NCwyNzI0NSwyNzI0NiwyNzI0NywyNzI0OCwyNzI1MCwyNzI1MSwyNzI1MiwyNzI1MywyNzI1NCwyNzI1NSwyNzI1NiwyNzI1OCwyNzI1OSwyNzI2MSwyNzI2MiwyNzI2MywyNzI2''@;'; put 'put ''NSwyNzI2NiwyNzI2NywyNzI2OSwyNzI3MCwyNzI3MSwyNzI3MiwyNzI3MywyNzI3NCwyNzI3NSwyNzI3NiwyNzI3NywyNzI3OSwyNzI4MiwyNzI4MywyNzI4NCwyNzI4NSwyNzI4NiwyNzI4OCwyNzI4OSwyNzI5MCwyNzI5MSwyNzI5MiwyNzI5MywyNzI5NCwyNzI5NSwyNzI5NywyNzI5OCwy''@;'; put 'put ''NzI5OSwyNzMwMCwyNzMwMSwyNzMwMiwyNzMwMywyNzMwNCwyNzMwNiwyNzMwOSwyNzMxMCwyNzMxMSwyNzMxMiwyNzMxMywyNzMxNCwyNzMxNSwyNzMxNiwyNzMxNywyNzMxOCwyNzMxOSwyNzMyMCwyNzMyMSwyNzMyMiwyNzMyMywyNzMyNCwyNzMyNSwyNzMyNiwyNzMyNywyNzMyOCwyNzMy''@;'; put 'put ''OSwyNzMzMCwyNzMzMSwyNzMzMiwyNzMzMywyNzMzNCwyNzMzNSwyNzMzNiwyNzMzNywyNzMzOCwyNzMzOSwyNzM0MCwyNzM0MSwyNzM0MiwyNzM0MywyNzM0NCwyNzM0NSwyNzM0NiwyNzM0NywyNzM0OCwyNzM0OSwyNzM1MCwyNzM1MSwyNzM1MiwyNzM1MywyNzM1NCwyNzM1NSwyNzM1Niwy''@;'; put 'put ''NzM1NywyNzM1OCwyNzM1OSwyNzM2MCwyNzM2MSwyNzM2MiwyNzM2MywyNzM2NCwyNzM2NSwyNzM2NiwyNzM2NywyNzM2OCwyNzM2OSwyNzM3MCwyNzM3MSwyNzM3MiwyNzM3MywyNzM3NCwyNzM3NSwyNzM3NiwyNzM3NywyNzM3OCwyNzM3OSwyNzM4MCwyNzM4MSwyNzM4MiwyNzM4MywyNzM4''@;'; put 'put ''NCwyNzM4NSwyNzM4NiwyNzM4NywyNzM4OCwyNzM4OSwyNzM5MCwyNzM5MSwyNzM5MiwyNzM5MywyNzM5NCwyNzM5NSwyNzM5NiwyNzM5NywyNzM5OCwyNzM5OSwyNzQwMCwyNzQwMSwyNzQwMiwyNzQwMywyNzQwNCwyNzQwNSwyNzQwNiwyNzQwNywyNzQwOCwyNzQwOSwyNzQxMCwyNzQxMSwy''@;'; put 'put ''NzQxMiwyNzQxMywyNzQxNCwyNzQxNSwyNzQxNiwyNzQxNywyNzQxOCwyNzQxOSwyNzQyMCwyNzQyMSwyNzQyMiwyNzQyMywyNzQyOSwyNzQzMCwyNzQzMiwyNzQzMywyNzQzNCwyNzQzNSwyNzQzNiwyNzQzNywyNzQzOCwyNzQzOSwyNzQ0MCwyNzQ0MSwyNzQ0MywyNzQ0NCwyNzQ0NSwyNzQ0''@;'; put 'put ''NiwyNzQ0OCwyNzQ1MSwyNzQ1MiwyNzQ1MywyNzQ1NSwyNzQ1NiwyNzQ1NywyNzQ1OCwyNzQ2MCwyNzQ2MSwyNzQ2NCwyNzQ2NiwyNzQ2NywyNzQ2OSwyNzQ3MCwyNzQ3MSwyNzQ3MiwyNzQ3MywyNzQ3NCwyNzQ3NSwyNzQ3NiwyNzQ3NywyNzQ3OCwyNzQ3OSwyNzQ4MCwyNzQ4MiwyNzQ4Mywy''@;'; put 'put ''NzQ4NCwyNzQ4NSwyNzQ4NiwyNzQ4NywyNzQ4OCwyNzQ4OSwyNzQ5NiwyNzQ5NywyNzQ5OSwyNzUwMCwyNzUwMSwyNzUwMiwyNzUwMywyNzUwNCwyNzUwNSwyNzUwNiwyNzUwNywyNzUwOCwyNzUwOSwyNzUxMCwyNzUxMSwyNzUxMiwyNzUxNCwyNzUxNywyNzUxOCwyNzUxOSwyNzUyMCwyNzUy''@;'; put 'put ''NSwyNzUyOCwyNzUzMiwyNzUzNCwyNzUzNSwyNzUzNiwyNzUzNywyNzU0MCwyNzU0MSwyNzU0MywyNzU0NCwyNzU0NSwyNzU0OCwyNzU0OSwyNzU1MCwyNzU1MSwyNzU1MiwyNzU1NCwyNzU1NSwyNzU1NiwyNzU1NywyNzU1OCwyNzU1OSwyNzU2MCwyNzU2MSwyNzU2MywyNzU2NCwyNzU2NSwy''@;'; put 'put ''NzU2NiwyNzU2NywyNzU2OCwyNzU2OSwyNzU3MCwyNzU3NCwyNzU3NiwyNzU3NywyNzU3OCwyNzU3OSwyNzU4MCwyNzU4MSwyNzU4MiwyNzU4NCwyNzU4NywyNzU4OCwyNzU5MCwyNzU5MSwyNzU5MiwyNzU5MywyNzU5NCwyNzU5NiwyNzU5OCwyNzYwMCwyNzYwMSwyNzYwOCwyNzYxMCwyNzYx''@;'; put 'put ''MiwyNzYxMywyNzYxNCwyNzYxNSwyNzYxNiwyNzYxOCwyNzYxOSwyNzYyMCwyNzYyMSwyNzYyMiwyNzYyMywyNzYyNCwyNzYyNSwyNzYyOCwyNzYyOSwyNzYzMCwyNzYzMiwyNzYzMywyNzYzNCwyNzYzNiwyNzYzOCwyNzYzOSwyNzY0MCwyNzY0MiwyNzY0MywyNzY0NCwyNzY0NiwyNzY0Nywy''@;'; put 'put ''NzY0OCwyNzY0OSwyNzY1MCwyNzY1MSwyNzY1MiwyNzY1NiwyNzY1NywyNzY1OCwyNzY1OSwyNzY2MCwyNzY2MiwyNzY2NiwyNzY3MSwyNzY3NiwyNzY3NywyNzY3OCwyNzY4MCwyNzY4MywyNzY4NSwyNzY5MSwyNzY5MiwyNzY5MywyNzY5NywyNzY5OSwyNzcwMiwyNzcwMywyNzcwNSwyNzcw''@;'; put 'put ''NiwyNzcwNywyNzcwOCwyNzcxMCwyNzcxMSwyNzcxNSwyNzcxNiwyNzcxNywyNzcyMCwyNzcyMywyNzcyNCwyNzcyNSwyNzcyNiwyNzcyNywyNzcyOSwyNzczMCwyNzczMSwyNzczNCwyNzczNiwyNzczNywyNzczOCwyNzc0NiwyNzc0NywyNzc0OSwyNzc1MCwyNzc1MSwyNzc1NSwyNzc1Niwy''@;'; put 'put ''Nzc1NywyNzc1OCwyNzc1OSwyNzc2MSwyNzc2MywyNzc2NSwyNzc2NywyNzc2OCwyNzc3MCwyNzc3MSwyNzc3MiwyNzc3NSwyNzc3NiwyNzc4MCwyNzc4MywyNzc4NiwyNzc4NywyNzc4OSwyNzc5MCwyNzc5MywyNzc5NCwyNzc5NywyNzc5OCwyNzc5OSwyNzgwMCwyNzgwMiwyNzgwNCwyNzgw''@;'; put 'put ''NSwyNzgwNiwyNzgwOCwyNzgxMCwyNzgxNiwyNzgyMCwyNzgyMywyNzgyNCwyNzgyOCwyNzgyOSwyNzgzMCwyNzgzMSwyNzgzNCwyNzg0MCwyNzg0MSwyNzg0MiwyNzg0MywyNzg0NiwyNzg0NywyNzg0OCwyNzg1MSwyNzg1MywyNzg1NCwyNzg1NSwyNzg1NywyNzg1OCwyNzg2NCwyNzg2NSwy''@;'; put 'put ''Nzg2NiwyNzg2OCwyNzg2OSwyNzg3MSwyNzg3NiwyNzg3OCwyNzg3OSwyNzg4MSwyNzg4NCwyNzg4NSwyNzg5MCwyNzg5MiwyNzg5NywyNzkwMywyNzkwNCwyNzkwNiwyNzkwNywyNzkwOSwyNzkxMCwyNzkxMiwyNzkxMywyNzkxNCwyNzkxNywyNzkxOSwyNzkyMCwyNzkyMSwyNzkyMywyNzky''@;'; put 'put ''NCwyNzkyNSwyNzkyNiwyNzkyOCwyNzkzMiwyNzkzMywyNzkzNSwyNzkzNiwyNzkzNywyNzkzOCwyNzkzOSwyNzk0MCwyNzk0MiwyNzk0NCwyNzk0NSwyNzk0OCwyNzk0OSwyNzk1MSwyNzk1MiwyNzk1NiwyNzk1OCwyNzk1OSwyNzk2MCwyNzk2MiwyNzk2NywyNzk2OCwyNzk3MCwyNzk3Miwy''@;'; put 'put ''Nzk3NywyNzk4MCwyNzk4NCwyNzk4OSwyNzk5MCwyNzk5MSwyNzk5MiwyNzk5NSwyNzk5NywyNzk5OSwyODAwMSwyODAwMiwyODAwNCwyODAwNSwyODAwNywyODAwOCwyODAxMSwyODAxMiwyODAxMywyODAxNiwyODAxNywyODAxOCwyODAxOSwyODAyMSwyODAyMiwyODAyNSwyODAyNiwyODAy''@;'; put 'put ''NywyODAyOSwyODAzMCwyODAzMSwyODAzMiwyODAzMywyODAzNSwyODAzNiwyODAzOCwyODAzOSwyODA0MiwyODA0MywyODA0NSwyODA0NywyODA0OCwyODA1MCwyODA1NCwyODA1NSwyODA1NiwyODA1NywyODA1OCwyODA2MCwyODA2NiwyODA2OSwyODA3NiwyODA3NywyODA4MCwyODA4MSwy''@;'; put 'put ''ODA4MywyODA4NCwyODA4NiwyODA4NywyODA4OSwyODA5MCwyODA5MSwyODA5MiwyODA5MywyODA5NCwyODA5NywyODA5OCwyODA5OSwyODEwNCwyODEwNSwyODEwNiwyODEwOSwyODExMCwyODExMSwyODExMiwyODExNCwyODExNSwyODExNiwyODExNywyODExOSwyODEyMiwyODEyMywyODEy''@;'; put 'put ''NCwyODEyNywyODEzMCwyODEzMSwyODEzMywyODEzNSwyODEzNiwyODEzNywyODEzOCwyODE0MSwyODE0MywyODE0NCwyODE0NiwyODE0OCwyODE0OSwyODE1MCwyODE1MiwyODE1NCwyODE1NywyODE1OCwyODE1OSwyODE2MCwyODE2MSwyODE2MiwyODE2MywyODE2NCwyODE2NiwyODE2Nywy''@;'; put 'put ''ODE2OCwyODE2OSwyODE3MSwyODE3NSwyODE3OCwyODE3OSwyODE4MSwyODE4NCwyODE4NSwyODE4NywyODE4OCwyODE5MCwyODE5MSwyODE5NCwyODE5OCwyODE5OSwyODIwMCwyODIwMiwyODIwNCwyODIwNiwyODIwOCwyODIwOSwyODIxMSwyODIxMywyODIxNCwyODIxNSwyODIxNywyODIx''@;'; put 'put ''OSwyODIyMCwyODIyMSwyODIyMiwyODIyMywyODIyNCwyODIyNSwyODIyNiwyODIyOSwyODIzMCwyODIzMSwyODIzMiwyODIzMywyODIzNCwyODIzNSwyODIzNiwyODIzOSwyODI0MCwyODI0MSwyODI0MiwyODI0NSwyODI0NywyODI0OSwyODI1MCwyODI1MiwyODI1MywyODI1NCwyODI1Niwy''@;'; put 'put ''ODI1NywyODI1OCwyODI1OSwyODI2MCwyODI2MSwyODI2MiwyODI2MywyODI2NCwyODI2NSwyODI2NiwyODI2OCwyODI2OSwyODI3MSwyODI3MiwyODI3MywyODI3NCwyODI3NSwyODI3NiwyODI3NywyODI3OCwyODI3OSwyODI4MCwyODI4MSwyODI4MiwyODI4MywyODI4NCwyODI4NSwyODI4''@;'; put 'put ''OCwyODI4OSwyODI5MCwyODI5MiwyODI5NSwyODI5NiwyODI5OCwyODI5OSwyODMwMCwyODMwMSwyODMwMiwyODMwNSwyODMwNiwyODMwNywyODMwOCwyODMwOSwyODMxMCwyODMxMSwyODMxMywyODMxNCwyODMxNSwyODMxNywyODMxOCwyODMyMCwyODMyMSwyODMyMywyODMyNCwyODMyNiwy''@;'; put 'put ''ODMyOCwyODMyOSwyODMzMSwyODMzMiwyODMzMywyODMzNCwyODMzNiwyODMzOSwyODM0MSwyODM0NCwyODM0NSwyODM0OCwyODM1MCwyODM1MSwyODM1MiwyODM1NSwyODM1NiwyODM1NywyODM1OCwyODM2MCwyODM2MSwyODM2MiwyODM2NCwyODM2NSwyODM2NiwyODM2OCwyODM3MCwyODM3''@;'; put 'put ''NCwyODM3NiwyODM3NywyODM3OSwyODM4MCwyODM4MSwyODM4NywyODM5MSwyODM5NCwyODM5NSwyODM5NiwyODM5NywyODM5OCwyODM5OSwyODQwMCwyODQwMSwyODQwMiwyODQwMywyODQwNSwyODQwNiwyODQwNywyODQwOCwyODQxMCwyODQxMSwyODQxMiwyODQxMywyODQxNCwyODQxNSwy''@;'; put 'put ''ODQxNiwyODQxNywyODQxOSwyODQyMCwyODQyMSwyODQyMywyODQyNCwyODQyNiwyODQyNywyODQyOCwyODQyOSwyODQzMCwyODQzMiwyODQzMywyODQzNCwyODQzOCwyODQzOSwyODQ0MCwyODQ0MSwyODQ0MiwyODQ0MywyODQ0NCwyODQ0NSwyODQ0NiwyODQ0NywyODQ0OSwyODQ1MCwyODQ1''@;'; put 'put ''MSwyODQ1MywyODQ1NCwyODQ1NSwyODQ1NiwyODQ2MCwyODQ2MiwyODQ2NCwyODQ2NiwyODQ2OCwyODQ2OSwyODQ3MSwyODQ3MiwyODQ3MywyODQ3NCwyODQ3NSwyODQ3NiwyODQ3NywyODQ3OSwyODQ4MCwyODQ4MSwyODQ4MiwyODQ4MywyODQ4NCwyODQ4NSwyODQ4OCwyODQ4OSwyODQ5MCwy''@;'; put 'put ''ODQ5MiwyODQ5NCwyODQ5NSwyODQ5NiwyODQ5NywyODQ5OCwyODQ5OSwyODUwMCwyODUwMSwyODUwMiwyODUwMywyODUwNSwyODUwNiwyODUwNywyODUwOSwyODUxMSwyODUxMiwyODUxMywyODUxNSwyODUxNiwyODUxNywyODUxOSwyODUyMCwyODUyMSwyODUyMiwyODUyMywyODUyNCwyODUy''@;'; put 'put ''NywyODUyOCwyODUyOSwyODUzMSwyODUzMywyODUzNCwyODUzNSwyODUzNywyODUzOSwyODU0MSwyODU0MiwyODU0MywyODU0NCwyODU0NSwyODU0NiwyODU0NywyODU0OSwyODU1MCwyODU1MSwyODU1NCwyODU1NSwyODU1OSwyODU2MCwyODU2MSwyODU2MiwyODU2MywyODU2NCwyODU2NSwy''@;'; put 'put ''ODU2NiwyODU2NywyODU2OCwyODU2OSwyODU3MCwyODU3MSwyODU3MywyODU3NCwyODU3NSwyODU3NiwyODU3OCwyODU3OSwyODU4MCwyODU4MSwyODU4MiwyODU4NCwyODU4NSwyODU4NiwyODU4NywyODU4OCwyODU4OSwyODU5MCwyODU5MSwyODU5MiwyODU5MywyODU5NCwyODU5NiwyODU5''@;'; put 'put ''NywyODU5OSwyODYwMCwyODYwMiwyODYwMywyODYwNCwyODYwNSwyODYwNiwyODYwNywyODYwOSwyODYxMSwyODYxMiwyODYxMywyODYxNCwyODYxNSwyODYxNiwyODYxOCwyODYxOSwyODYyMCwyODYyMSwyODYyMiwyODYyMywyODYyNCwyODYyNywyODYyOCwyODYyOSwyODYzMCwyODYzMSwy''@;'; put 'put ''ODYzMiwyODYzMywyODYzNCwyODYzNSwyODYzNiwyODYzNywyODYzOSwyODY0MiwyODY0MywyODY0NCwyODY0NSwyODY0NiwyODY0NywyODY0OCwyODY0OSwyODY1MCwyODY1MSwyODY1MiwyODY1MywyODY1NiwyODY1NywyODY1OCwyODY1OSwyODY2MCwyODY2MSwyODY2MiwyODY2MywyODY2''@;'; put 'put ''NCwyODY2NSwyODY2NiwyODY2NywyODY2OCwyODY2OSwyODY3MCwyODY3MSwyODY3MiwyODY3MywyODY3NCwyODY3NSwyODY3NiwyODY3NywyODY3OCwyODY3OSwyODY4MCwyODY4MSwyODY4MiwyODY4MywyODY4NCwyODY4NSwyODY4NiwyODY4NywyODY4OCwyODY5MCwyODY5MSwyODY5Miwy''@;'; put 'put ''ODY5MywyODY5NCwyODY5NSwyODY5NiwyODY5NywyODcwMCwyODcwMSwyODcwMiwyODcwMywyODcwNCwyODcwNSwyODcwNiwyODcwOCwyODcwOSwyODcxMCwyODcxMSwyODcxMiwyODcxMywyODcxNCwyODcxNSwyODcxNiwyODcxNywyODcxOCwyODcxOSwyODcyMCwyODcyMSwyODcyMiwyODcy''@;'; put 'put ''MywyODcyNCwyODcyNiwyODcyNywyODcyOCwyODczMCwyODczMSwyODczMiwyODczMywyODczNCwyODczNSwyODczNiwyODczNywyODczOCwyODczOSwyODc0MCwyODc0MSwyODc0MiwyODc0MywyODc0NCwyODc0NSwyODc0NiwyODc0NywyODc0OSwyODc1MCwyODc1MiwyODc1MywyODc1NCwy''@;'; put 'put ''ODc1NSwyODc1NiwyODc1NywyODc1OCwyODc1OSwyODc2MCwyODc2MSwyODc2MiwyODc2MywyODc2NCwyODc2NSwyODc2NywyODc2OCwyODc2OSwyODc3MCwyODc3MSwyODc3MiwyODc3MywyODc3NCwyODc3NSwyODc3NiwyODc3NywyODc3OCwyODc4MiwyODc4NSwyODc4NiwyODc4NywyODc4''@;'; put 'put ''OCwyODc5MSwyODc5MywyODc5NCwyODc5NSwyODc5NywyODgwMSwyODgwMiwyODgwMywyODgwNCwyODgwNiwyODgwNywyODgwOCwyODgxMSwyODgxMiwyODgxMywyODgxNSwyODgxNiwyODgxNywyODgxOSwyODgyMywyODgyNCwyODgyNiwyODgyNywyODgzMCwyODgzMSwyODgzMiwyODgzMywy''@;'; put 'put ''ODgzNCwyODgzNSwyODgzNiwyODgzNywyODgzOCwyODgzOSwyODg0MCwyODg0MSwyODg0MiwyODg0OCwyODg1MCwyODg1MiwyODg1MywyODg1NCwyODg1OCwyODg2MiwyODg2MywyODg2OCwyODg2OSwyODg3MCwyODg3MSwyODg3MywyODg3NSwyODg3NiwyODg3NywyODg3OCwyODg3OSwyODg4''@;'; put 'put ''MCwyODg4MSwyODg4MiwyODg4MywyODg4NCwyODg4NSwyODg4NiwyODg4NywyODg5MCwyODg5MiwyODg5MywyODg5NCwyODg5NiwyODg5NywyODg5OCwyODg5OSwyODkwMSwyODkwNiwyODkxMCwyODkxMiwyODkxMywyODkxNCwyODkxNSwyODkxNiwyODkxNywyODkxOCwyODkyMCwyODkyMiwy''@;'; put 'put ''ODkyMywyODkyNCwyODkyNiwyODkyNywyODkyOCwyODkyOSwyODkzMCwyODkzMSwyODkzMiwyODkzMywyODkzNCwyODkzNSwyODkzNiwyODkzOSwyODk0MCwyODk0MSwyODk0MiwyODk0MywyODk0NSwyODk0NiwyODk0OCwyODk1MSwyODk1NSwyODk1NiwyODk1NywyODk1OCwyODk1OSwyODk2''@;'; put 'put ''MCwyODk2MSwyODk2MiwyODk2MywyODk2NCwyODk2NSwyODk2NywyODk2OCwyODk2OSwyODk3MCwyODk3MSwyODk3MiwyODk3MywyODk3NCwyODk3OCwyODk3OSwyODk4MCwyODk4MSwyODk4MywyODk4NCwyODk4NSwyODk4NiwyODk4NywyODk4OCwyODk4OSwyODk5MCwyODk5MSwyODk5Miwy''@;'; put 'put ''ODk5MywyODk5NCwyODk5NSwyODk5NiwyODk5OCwyODk5OSwyOWUzLDI5MDAxLDI5MDAzLDI5MDA1LDI5MDA3LDI5MDA4LDI5MDA5LDI5MDEwLDI5MDExLDI5MDEyLDI5MDEzLDI5MDE0LDI5MDE1LDI5MDE2LDI5MDE3LDI5MDE4LDI5MDE5LDI5MDIxLDI5MDIzLDI5MDI0LDI5MDI1LDI5MDI2''@;'; put 'put ''LDI5MDI3LDI5MDI5LDI5MDMzLDI5MDM0LDI5MDM1LDI5MDM2LDI5MDM3LDI5MDM5LDI5MDQwLDI5MDQxLDI5MDQ0LDI5MDQ1LDI5MDQ2LDI5MDQ3LDI5MDQ5LDI5MDUxLDI5MDUyLDI5MDU0LDI5MDU1LDI5MDU2LDI5MDU3LDI5MDU4LDI5MDU5LDI5MDYxLDI5MDYyLDI5MDYzLDI5MDY0LDI5''@;'; put 'put ''MDY1LDI5MDY3LDI5MDY4LDI5MDY5LDI5MDcwLDI5MDcyLDI5MDczLDI5MDc0LDI5MDc1LDI5MDc3LDI5MDc4LDI5MDc5LDI5MDgyLDI5MDgzLDI5MDg0LDI5MDg1LDI5MDg2LDI5MDg5LDI5MDkwLDI5MDkxLDI5MDkyLDI5MDkzLDI5MDk0LDI5MDk1LDI5MDk3LDI5MDk4LDI5MDk5LDI5MTAx''@;'; put 'put ''LDI5MTAyLDI5MTAzLDI5MTA0LDI5MTA1LDI5MTA2LDI5MTA4LDI5MTEwLDI5MTExLDI5MTEyLDI5MTE0LDI5MTE1LDI5MTE2LDI5MTE3LDI5MTE4LDI5MTE5LDI5MTIwLDI5MTIxLDI5MTIyLDI5MTI0LDI5MTI1LDI5MTI2LDI5MTI3LDI5MTI4LDI5MTI5LDI5MTMwLDI5MTMxLDI5MTMyLDI5''@;'; put 'put ''MTMzLDI5MTM1LDI5MTM2LDI5MTM3LDI5MTM4LDI5MTM5LDI5MTQyLDI5MTQzLDI5MTQ0LDI5MTQ1LDI5MTQ2LDI5MTQ3LDI5MTQ4LDI5MTQ5LDI5MTUwLDI5MTUxLDI5MTUzLDI5MTU0LDI5MTU1LDI5MTU2LDI5MTU4LDI5MTYwLDI5MTYxLDI5MTYyLDI5MTYzLDI5MTY0LDI5MTY1LDI5MTY3''@;'; put 'put ''LDI5MTY4LDI5MTY5LDI5MTcwLDI5MTcxLDI5MTcyLDI5MTczLDI5MTc0LDI5MTc1LDI5MTc2LDI5MTc4LDI5MTc5LDI5MTgwLDI5MTgxLDI5MTgyLDI5MTgzLDI5MTg0LDI5MTg1LDI5MTg2LDI5MTg3LDI5MTg4LDI5MTg5LDI5MTkxLDI5MTkyLDI5MTkzLDI5MTk0LDI5MTk1LDI5MTk2LDI5''@;'; put 'put ''MTk3LDI5MTk4LDI5MTk5LDI5MjAwLDI5MjAxLDI5MjAyLDI5MjAzLDI5MjA0LDI5MjA1LDI5MjA2LDI5MjA3LDI5MjA4LDI5MjA5LDI5MjEwLDI5MjExLDI5MjEyLDI5MjE0LDI5MjE1LDI5MjE2LDI5MjE3LDI5MjE4LDI5MjE5LDI5MjIwLDI5MjIxLDI5MjIyLDI5MjIzLDI5MjI1LDI5MjI3''@;'; put 'put ''LDI5MjI5LDI5MjMwLDI5MjMxLDI5MjM0LDI5MjM1LDI5MjM2LDI5MjQyLDI5MjQ0LDI5MjQ2LDI5MjQ4LDI5MjQ5LDI5MjUwLDI5MjUxLDI5MjUyLDI5MjUzLDI5MjU0LDI5MjU3LDI5MjU4LDI5MjU5LDI5MjYyLDI5MjYzLDI5MjY0LDI5MjY1LDI5MjY3LDI5MjY4LDI5MjY5LDI5MjcxLDI5''@;'; put 'put ''MjcyLDI5Mjc0LDI5Mjc2LDI5Mjc4LDI5MjgwLDI5MjgzLDI5Mjg0LDI5Mjg1LDI5Mjg4LDI5MjkwLDI5MjkxLDI5MjkyLDI5MjkzLDI5Mjk2LDI5Mjk3LDI5Mjk5LDI5MzAwLDI5MzAyLDI5MzAzLDI5MzA0LDI5MzA3LDI5MzA4LDI5MzA5LDI5MzE0LDI5MzE1LDI5MzE3LDI5MzE4LDI5MzE5''@;'; put 'put ''LDI5MzIwLDI5MzIxLDI5MzI0LDI5MzI2LDI5MzI4LDI5MzI5LDI5MzMxLDI5MzMyLDI5MzMzLDI5MzM0LDI5MzM1LDI5MzM2LDI5MzM3LDI5MzM4LDI5MzM5LDI5MzQwLDI5MzQxLDI5MzQyLDI5MzQ0LDI5MzQ1LDI5MzQ2LDI5MzQ3LDI5MzQ4LDI5MzQ5LDI5MzUwLDI5MzUxLDI5MzUyLDI5''@;'; put 'put ''MzUzLDI5MzU0LDI5MzU1LDI5MzU4LDI5MzYxLDI5MzYyLDI5MzYzLDI5MzY1LDI5MzcwLDI5MzcxLDI5MzcyLDI5MzczLDI5Mzc0LDI5Mzc1LDI5Mzc2LDI5MzgxLDI5MzgyLDI5MzgzLDI5Mzg1LDI5Mzg2LDI5Mzg3LDI5Mzg4LDI5MzkxLDI5MzkzLDI5Mzk1LDI5Mzk2LDI5Mzk3LDI5Mzk4''@;'; put 'put ''LDI5NDAwLDI5NDAyLDI5NDAzLDU4NTY2LDU4NTY3LDU4NTY4LDU4NTY5LDU4NTcwLDU4NTcxLDU4NTcyLDU4NTczLDU4NTc0LDU4NTc1LDU4NTc2LDU4NTc3LDU4NTc4LDU4NTc5LDU4NTgwLDU4NTgxLDU4NTgyLDU4NTgzLDU4NTg0LDU4NTg1LDU4NTg2LDU4NTg3LDU4NTg4LDU4NTg5LDU4''@;'; put 'put ''NTkwLDU4NTkxLDU4NTkyLDU4NTkzLDU4NTk0LDU4NTk1LDU4NTk2LDU4NTk3LDU4NTk4LDU4NTk5LDU4NjAwLDU4NjAxLDU4NjAyLDU4NjAzLDU4NjA0LDU4NjA1LDU4NjA2LDU4NjA3LDU4NjA4LDU4NjA5LDU4NjEwLDU4NjExLDU4NjEyLDU4NjEzLDU4NjE0LDU4NjE1LDU4NjE2LDU4NjE3''@;'; put 'put ''LDU4NjE4LDU4NjE5LDU4NjIwLDU4NjIxLDU4NjIyLDU4NjIzLDU4NjI0LDU4NjI1LDU4NjI2LDU4NjI3LDU4NjI4LDU4NjI5LDU4NjMwLDU4NjMxLDU4NjMyLDU4NjMzLDU4NjM0LDU4NjM1LDU4NjM2LDU4NjM3LDU4NjM4LDU4NjM5LDU4NjQwLDU4NjQxLDU4NjQyLDU4NjQzLDU4NjQ0LDU4''@;'; put 'put ''NjQ1LDU4NjQ2LDU4NjQ3LDU4NjQ4LDU4NjQ5LDU4NjUwLDU4NjUxLDU4NjUyLDU4NjUzLDU4NjU0LDU4NjU1LDU4NjU2LDU4NjU3LDU4NjU4LDU4NjU5LDU4NjYwLDU4NjYxLDEyMjg4LDEyMjg5LDEyMjkwLDE4Myw3MTMsNzExLDE2OCwxMjI5MSwxMjI5Myw4MjEyLDY1Mzc0LDgyMTQsODIz''@;'; put 'put ''MCw4MjE2LDgyMTcsODIyMCw4MjIxLDEyMzA4LDEyMzA5LDEyMjk2LDEyMjk3LDEyMjk4LDEyMjk5LDEyMzAwLDEyMzAxLDEyMzAyLDEyMzAzLDEyMzEwLDEyMzExLDEyMzA0LDEyMzA1LDE3NywyMTUsMjQ3LDg3NTgsODc0Myw4NzQ0LDg3MjEsODcxOSw4NzQ2LDg3NDUsODcxMiw4NzU5LDg3''@;'; put 'put ''MzAsODg2OSw4NzQxLDg3MzYsODk3OCw4ODU3LDg3NDcsODc1MCw4ODAxLDg3ODAsODc3Niw4NzY1LDg3MzMsODgwMCw4ODE0LDg4MTUsODgwNCw4ODA1LDg3MzQsODc1Nyw4NzU2LDk3OTQsOTc5MiwxNzYsODI0Miw4MjQzLDg0NTEsNjUyODQsMTY0LDY1NTA0LDY1NTA1LDgyNDAsMTY3LDg0''@;'; put 'put ''NzAsOTczNCw5NzMzLDk2NzUsOTY3OSw5Njc4LDk2NzEsOTY3MCw5NjMzLDk2MzIsOTY1MSw5NjUwLDgyNTEsODU5NCw4NTkyLDg1OTMsODU5NSwxMjMwNyw1ODY2Miw1ODY2Myw1ODY2NCw1ODY2NSw1ODY2Niw1ODY2Nyw1ODY2OCw1ODY2OSw1ODY3MCw1ODY3MSw1ODY3Miw1ODY3Myw1ODY3''@;'; put 'put ''NCw1ODY3NSw1ODY3Niw1ODY3Nyw1ODY3OCw1ODY3OSw1ODY4MCw1ODY4MSw1ODY4Miw1ODY4Myw1ODY4NCw1ODY4NSw1ODY4Niw1ODY4Nyw1ODY4OCw1ODY4OSw1ODY5MCw1ODY5MSw1ODY5Miw1ODY5Myw1ODY5NCw1ODY5NSw1ODY5Niw1ODY5Nyw1ODY5OCw1ODY5OSw1ODcwMCw1ODcwMSw1''@;'; put 'put ''ODcwMiw1ODcwMyw1ODcwNCw1ODcwNSw1ODcwNiw1ODcwNyw1ODcwOCw1ODcwOSw1ODcxMCw1ODcxMSw1ODcxMiw1ODcxMyw1ODcxNCw1ODcxNSw1ODcxNiw1ODcxNyw1ODcxOCw1ODcxOSw1ODcyMCw1ODcyMSw1ODcyMiw1ODcyMyw1ODcyNCw1ODcyNSw1ODcyNiw1ODcyNyw1ODcyOCw1ODcy''@;'; put 'put ''OSw1ODczMCw1ODczMSw1ODczMiw1ODczMyw1ODczNCw1ODczNSw1ODczNiw1ODczNyw1ODczOCw1ODczOSw1ODc0MCw1ODc0MSw1ODc0Miw1ODc0Myw1ODc0NCw1ODc0NSw1ODc0Niw1ODc0Nyw1ODc0OCw1ODc0OSw1ODc1MCw1ODc1MSw1ODc1Miw1ODc1Myw1ODc1NCw1ODc1NSw1ODc1Niw1''@;'; put 'put ''ODc1Nyw4NTYwLDg1NjEsODU2Miw4NTYzLDg1NjQsODU2NSw4NTY2LDg1NjcsODU2OCw4NTY5LDU5MjM4LDU5MjM5LDU5MjQwLDU5MjQxLDU5MjQyLDU5MjQzLDkzNTIsOTM1Myw5MzU0LDkzNTUsOTM1Niw5MzU3LDkzNTgsOTM1OSw5MzYwLDkzNjEsOTM2Miw5MzYzLDkzNjQsOTM2NSw5MzY2''@;'; put 'put ''LDkzNjcsOTM2OCw5MzY5LDkzNzAsOTM3MSw5MzMyLDkzMzMsOTMzNCw5MzM1LDkzMzYsOTMzNyw5MzM4LDkzMzksOTM0MCw5MzQxLDkzNDIsOTM0Myw5MzQ0LDkzNDUsOTM0Niw5MzQ3LDkzNDgsOTM0OSw5MzUwLDkzNTEsOTMxMiw5MzEzLDkzMTQsOTMxNSw5MzE2LDkzMTcsOTMxOCw5MzE5''@;'; put 'put ''LDkzMjAsOTMyMSw4MzY0LDU5MjQ1LDEyODMyLDEyODMzLDEyODM0LDEyODM1LDEyODM2LDEyODM3LDEyODM4LDEyODM5LDEyODQwLDEyODQxLDU5MjQ2LDU5MjQ3LDg1NDQsODU0NSw4NTQ2LDg1NDcsODU0OCw4NTQ5LDg1NTAsODU1MSw4NTUyLDg1NTMsODU1NCw4NTU1LDU5MjQ4LDU5MjQ5''@;'; put 'put ''LDU4NzU4LDU4NzU5LDU4NzYwLDU4NzYxLDU4NzYyLDU4NzYzLDU4NzY0LDU4NzY1LDU4NzY2LDU4NzY3LDU4NzY4LDU4NzY5LDU4NzcwLDU4NzcxLDU4NzcyLDU4NzczLDU4Nzc0LDU4Nzc1LDU4Nzc2LDU4Nzc3LDU4Nzc4LDU4Nzc5LDU4NzgwLDU4NzgxLDU4NzgyLDU4NzgzLDU4Nzg0LDU4''@;'; put 'put ''Nzg1LDU4Nzg2LDU4Nzg3LDU4Nzg4LDU4Nzg5LDU4NzkwLDU4NzkxLDU4NzkyLDU4NzkzLDU4Nzk0LDU4Nzk1LDU4Nzk2LDU4Nzk3LDU4Nzk4LDU4Nzk5LDU4ODAwLDU4ODAxLDU4ODAyLDU4ODAzLDU4ODA0LDU4ODA1LDU4ODA2LDU4ODA3LDU4ODA4LDU4ODA5LDU4ODEwLDU4ODExLDU4ODEy''@;'; put 'put ''LDU4ODEzLDU4ODE0LDU4ODE1LDU4ODE2LDU4ODE3LDU4ODE4LDU4ODE5LDU4ODIwLDU4ODIxLDU4ODIyLDU4ODIzLDU4ODI0LDU4ODI1LDU4ODI2LDU4ODI3LDU4ODI4LDU4ODI5LDU4ODMwLDU4ODMxLDU4ODMyLDU4ODMzLDU4ODM0LDU4ODM1LDU4ODM2LDU4ODM3LDU4ODM4LDU4ODM5LDU4''@;'; put 'put ''ODQwLDU4ODQxLDU4ODQyLDU4ODQzLDU4ODQ0LDU4ODQ1LDU4ODQ2LDU4ODQ3LDU4ODQ4LDU4ODQ5LDU4ODUwLDU4ODUxLDU4ODUyLDEyMjg4LDY1MjgxLDY1MjgyLDY1MjgzLDY1NTA5LDY1Mjg1LDY1Mjg2LDY1Mjg3LDY1Mjg4LDY1Mjg5LDY1MjkwLDY1MjkxLDY1MjkyLDY1MjkzLDY1Mjk0''@;'; put 'put ''LDY1Mjk1LDY1Mjk2LDY1Mjk3LDY1Mjk4LDY1Mjk5LDY1MzAwLDY1MzAxLDY1MzAyLDY1MzAzLDY1MzA0LDY1MzA1LDY1MzA2LDY1MzA3LDY1MzA4LDY1MzA5LDY1MzEwLDY1MzExLDY1MzEyLDY1MzEzLDY1MzE0LDY1MzE1LDY1MzE2LDY1MzE3LDY1MzE4LDY1MzE5LDY1MzIwLDY1MzIxLDY1''@;'; put 'put ''MzIyLDY1MzIzLDY1MzI0LDY1MzI1LDY1MzI2LDY1MzI3LDY1MzI4LDY1MzI5LDY1MzMwLDY1MzMxLDY1MzMyLDY1MzMzLDY1MzM0LDY1MzM1LDY1MzM2LDY1MzM3LDY1MzM4LDY1MzM5LDY1MzQwLDY1MzQxLDY1MzQyLDY1MzQzLDY1MzQ0LDY1MzQ1LDY1MzQ2LDY1MzQ3LDY1MzQ4LDY1MzQ5''@;'; put 'put ''LDY1MzUwLDY1MzUxLDY1MzUyLDY1MzUzLDY1MzU0LDY1MzU1LDY1MzU2LDY1MzU3LDY1MzU4LDY1MzU5LDY1MzYwLDY1MzYxLDY1MzYyLDY1MzYzLDY1MzY0LDY1MzY1LDY1MzY2LDY1MzY3LDY1MzY4LDY1MzY5LDY1MzcwLDY1MzcxLDY1MzcyLDY1MzczLDY1NTA3LDU4ODU0LDU4ODU1LDU4''@;'; put 'put ''ODU2LDU4ODU3LDU4ODU4LDU4ODU5LDU4ODYwLDU4ODYxLDU4ODYyLDU4ODYzLDU4ODY0LDU4ODY1LDU4ODY2LDU4ODY3LDU4ODY4LDU4ODY5LDU4ODcwLDU4ODcxLDU4ODcyLDU4ODczLDU4ODc0LDU4ODc1LDU4ODc2LDU4ODc3LDU4ODc4LDU4ODc5LDU4ODgwLDU4ODgxLDU4ODgyLDU4ODgz''@;'; put 'put ''LDU4ODg0LDU4ODg1LDU4ODg2LDU4ODg3LDU4ODg4LDU4ODg5LDU4ODkwLDU4ODkxLDU4ODkyLDU4ODkzLDU4ODk0LDU4ODk1LDU4ODk2LDU4ODk3LDU4ODk4LDU4ODk5LDU4OTAwLDU4OTAxLDU4OTAyLDU4OTAzLDU4OTA0LDU4OTA1LDU4OTA2LDU4OTA3LDU4OTA4LDU4OTA5LDU4OTEwLDU4''@;'; put 'put ''OTExLDU4OTEyLDU4OTEzLDU4OTE0LDU4OTE1LDU4OTE2LDU4OTE3LDU4OTE4LDU4OTE5LDU4OTIwLDU4OTIxLDU4OTIyLDU4OTIzLDU4OTI0LDU4OTI1LDU4OTI2LDU4OTI3LDU4OTI4LDU4OTI5LDU4OTMwLDU4OTMxLDU4OTMyLDU4OTMzLDU4OTM0LDU4OTM1LDU4OTM2LDU4OTM3LDU4OTM4''@;'; put 'put ''LDU4OTM5LDU4OTQwLDU4OTQxLDU4OTQyLDU4OTQzLDU4OTQ0LDU4OTQ1LDU4OTQ2LDU4OTQ3LDU4OTQ4LDU4OTQ5LDEyMzUzLDEyMzU0LDEyMzU1LDEyMzU2LDEyMzU3LDEyMzU4LDEyMzU5LDEyMzYwLDEyMzYxLDEyMzYyLDEyMzYzLDEyMzY0LDEyMzY1LDEyMzY2LDEyMzY3LDEyMzY4LDEy''@;'; put 'put ''MzY5LDEyMzcwLDEyMzcxLDEyMzcyLDEyMzczLDEyMzc0LDEyMzc1LDEyMzc2LDEyMzc3LDEyMzc4LDEyMzc5LDEyMzgwLDEyMzgxLDEyMzgyLDEyMzgzLDEyMzg0LDEyMzg1LDEyMzg2LDEyMzg3LDEyMzg4LDEyMzg5LDEyMzkwLDEyMzkxLDEyMzkyLDEyMzkzLDEyMzk0LDEyMzk1LDEyMzk2''@;'; put 'put ''LDEyMzk3LDEyMzk4LDEyMzk5LDEyNDAwLDEyNDAxLDEyNDAyLDEyNDAzLDEyNDA0LDEyNDA1LDEyNDA2LDEyNDA3LDEyNDA4LDEyNDA5LDEyNDEwLDEyNDExLDEyNDEyLDEyNDEzLDEyNDE0LDEyNDE1LDEyNDE2LDEyNDE3LDEyNDE4LDEyNDE5LDEyNDIwLDEyNDIxLDEyNDIyLDEyNDIzLDEy''@;'; put 'put ''NDI0LDEyNDI1LDEyNDI2LDEyNDI3LDEyNDI4LDEyNDI5LDEyNDMwLDEyNDMxLDEyNDMyLDEyNDMzLDEyNDM0LDEyNDM1LDU5MjUwLDU5MjUxLDU5MjUyLDU5MjUzLDU5MjU0LDU5MjU1LDU5MjU2LDU5MjU3LDU5MjU4LDU5MjU5LDU5MjYwLDU4OTUwLDU4OTUxLDU4OTUyLDU4OTUzLDU4OTU0''@;'; put 'put ''LDU4OTU1LDU4OTU2LDU4OTU3LDU4OTU4LDU4OTU5LDU4OTYwLDU4OTYxLDU4OTYyLDU4OTYzLDU4OTY0LDU4OTY1LDU4OTY2LDU4OTY3LDU4OTY4LDU4OTY5LDU4OTcwLDU4OTcxLDU4OTcyLDU4OTczLDU4OTc0LDU4OTc1LDU4OTc2LDU4OTc3LDU4OTc4LDU4OTc5LDU4OTgwLDU4OTgxLDU4''@;'; put 'put ''OTgyLDU4OTgzLDU4OTg0LDU4OTg1LDU4OTg2LDU4OTg3LDU4OTg4LDU4OTg5LDU4OTkwLDU4OTkxLDU4OTkyLDU4OTkzLDU4OTk0LDU4OTk1LDU4OTk2LDU4OTk3LDU4OTk4LDU4OTk5LDU5ZTMsNTkwMDEsNTkwMDIsNTkwMDMsNTkwMDQsNTkwMDUsNTkwMDYsNTkwMDcsNTkwMDgsNTkwMDks''@;'; put 'put ''NTkwMTAsNTkwMTEsNTkwMTIsNTkwMTMsNTkwMTQsNTkwMTUsNTkwMTYsNTkwMTcsNTkwMTgsNTkwMTksNTkwMjAsNTkwMjEsNTkwMjIsNTkwMjMsNTkwMjQsNTkwMjUsNTkwMjYsNTkwMjcsNTkwMjgsNTkwMjksNTkwMzAsNTkwMzEsNTkwMzIsNTkwMzMsNTkwMzQsNTkwMzUsNTkwMzYsNTkw''@;'; put 'put ''MzcsNTkwMzgsNTkwMzksNTkwNDAsNTkwNDEsNTkwNDIsNTkwNDMsNTkwNDQsNTkwNDUsMTI0NDksMTI0NTAsMTI0NTEsMTI0NTIsMTI0NTMsMTI0NTQsMTI0NTUsMTI0NTYsMTI0NTcsMTI0NTgsMTI0NTksMTI0NjAsMTI0NjEsMTI0NjIsMTI0NjMsMTI0NjQsMTI0NjUsMTI0NjYsMTI0Njcs''@;'; put 'put ''MTI0NjgsMTI0NjksMTI0NzAsMTI0NzEsMTI0NzIsMTI0NzMsMTI0NzQsMTI0NzUsMTI0NzYsMTI0NzcsMTI0NzgsMTI0NzksMTI0ODAsMTI0ODEsMTI0ODIsMTI0ODMsMTI0ODQsMTI0ODUsMTI0ODYsMTI0ODcsMTI0ODgsMTI0ODksMTI0OTAsMTI0OTEsMTI0OTIsMTI0OTMsMTI0OTQsMTI0''@;'; put 'put ''OTUsMTI0OTYsMTI0OTcsMTI0OTgsMTI0OTksMTI1MDAsMTI1MDEsMTI1MDIsMTI1MDMsMTI1MDQsMTI1MDUsMTI1MDYsMTI1MDcsMTI1MDgsMTI1MDksMTI1MTAsMTI1MTEsMTI1MTIsMTI1MTMsMTI1MTQsMTI1MTUsMTI1MTYsMTI1MTcsMTI1MTgsMTI1MTksMTI1MjAsMTI1MjEsMTI1MjIs''@;'; put 'put ''MTI1MjMsMTI1MjQsMTI1MjUsMTI1MjYsMTI1MjcsMTI1MjgsMTI1MjksMTI1MzAsMTI1MzEsMTI1MzIsMTI1MzMsMTI1MzQsNTkyNjEsNTkyNjIsNTkyNjMsNTkyNjQsNTkyNjUsNTkyNjYsNTkyNjcsNTkyNjgsNTkwNDYsNTkwNDcsNTkwNDgsNTkwNDksNTkwNTAsNTkwNTEsNTkwNTIsNTkw''@;'; put 'put ''NTMsNTkwNTQsNTkwNTUsNTkwNTYsNTkwNTcsNTkwNTgsNTkwNTksNTkwNjAsNTkwNjEsNTkwNjIsNTkwNjMsNTkwNjQsNTkwNjUsNTkwNjYsNTkwNjcsNTkwNjgsNTkwNjksNTkwNzAsNTkwNzEsNTkwNzIsNTkwNzMsNTkwNzQsNTkwNzUsNTkwNzYsNTkwNzcsNTkwNzgsNTkwNzksNTkwODAs''@;'; put 'put ''NTkwODEsNTkwODIsNTkwODMsNTkwODQsNTkwODUsNTkwODYsNTkwODcsNTkwODgsNTkwODksNTkwOTAsNTkwOTEsNTkwOTIsNTkwOTMsNTkwOTQsNTkwOTUsNTkwOTYsNTkwOTcsNTkwOTgsNTkwOTksNTkxMDAsNTkxMDEsNTkxMDIsNTkxMDMsNTkxMDQsNTkxMDUsNTkxMDYsNTkxMDcsNTkx''@;'; put 'put ''MDgsNTkxMDksNTkxMTAsNTkxMTEsNTkxMTIsNTkxMTMsNTkxMTQsNTkxMTUsNTkxMTYsNTkxMTcsNTkxMTgsNTkxMTksNTkxMjAsNTkxMjEsNTkxMjIsNTkxMjMsNTkxMjQsNTkxMjUsNTkxMjYsNTkxMjcsNTkxMjgsNTkxMjksNTkxMzAsNTkxMzEsNTkxMzIsNTkxMzMsNTkxMzQsNTkxMzUs''@;'; put 'put ''NTkxMzYsNTkxMzcsNTkxMzgsNTkxMzksNTkxNDAsNTkxNDEsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsNTkyNjksNTkyNzAsNTkyNzEsNTkyNzIsNTkyNzMsNTky''@;'; put 'put ''NzQsNTkyNzUsNTkyNzYsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksNTkyNzcsNTkyNzgsNTkyNzksNTkyODAsNTkyODEsNTkyODIsNTkyODMsNjUwNzcsNjUwNzgs''@;'; put 'put ''NjUwODEsNjUwODIsNjUwODcsNjUwODgsNjUwODUsNjUwODYsNjUwODksNjUwOTAsNjUwOTEsNjUwOTIsNTkyODQsNTkyODUsNjUwODMsNjUwODQsNjUwNzksNjUwODAsNjUwNzMsNTkyODYsNjUwNzUsNjUwNzYsNTkyODcsNTkyODgsNTkyODksNTkyOTAsNTkyOTEsNTkyOTIsNTkyOTMsNTky''@;'; put 'put ''OTQsNTkyOTUsNTkxNDIsNTkxNDMsNTkxNDQsNTkxNDUsNTkxNDYsNTkxNDcsNTkxNDgsNTkxNDksNTkxNTAsNTkxNTEsNTkxNTIsNTkxNTMsNTkxNTQsNTkxNTUsNTkxNTYsNTkxNTcsNTkxNTgsNTkxNTksNTkxNjAsNTkxNjEsNTkxNjIsNTkxNjMsNTkxNjQsNTkxNjUsNTkxNjYsNTkxNjcs''@;'; put 'put ''NTkxNjgsNTkxNjksNTkxNzAsNTkxNzEsNTkxNzIsNTkxNzMsNTkxNzQsNTkxNzUsNTkxNzYsNTkxNzcsNTkxNzgsNTkxNzksNTkxODAsNTkxODEsNTkxODIsNTkxODMsNTkxODQsNTkxODUsNTkxODYsNTkxODcsNTkxODgsNTkxODksNTkxOTAsNTkxOTEsNTkxOTIsNTkxOTMsNTkxOTQsNTkx''@;'; put 'put ''OTUsNTkxOTYsNTkxOTcsNTkxOTgsNTkxOTksNTkyMDAsNTkyMDEsNTkyMDIsNTkyMDMsNTkyMDQsNTkyMDUsNTkyMDYsNTkyMDcsNTkyMDgsNTkyMDksNTkyMTAsNTkyMTEsNTkyMTIsNTkyMTMsNTkyMTQsNTkyMTUsNTkyMTYsNTkyMTcsNTkyMTgsNTkyMTksNTkyMjAsNTkyMjEsNTkyMjIs''@;'; put 'put ''NTkyMjMsNTkyMjQsNTkyMjUsNTkyMjYsNTkyMjcsNTkyMjgsNTkyMjksNTkyMzAsNTkyMzEsNTkyMzIsNTkyMzMsNTkyMzQsNTkyMzUsNTkyMzYsNTkyMzcsMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTAyNSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMs''@;'; put 'put ''MTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsNTkyOTYsNTkyOTcsNTkyOTgsNTkyOTksNTkzMDAsNTkzMDEsNTkzMDIsNTkzMDMsNTkzMDQsNTkzMDUsNTkzMDYsNTkzMDcsNTkz''@;'; put 'put ''MDgsNTkzMDksNTkzMTAsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTEwNSwxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAs''@;'; put 'put ''MTEwMSwxMTAyLDExMDMsNTkzMTEsNTkzMTIsNTkzMTMsNTkzMTQsNTkzMTUsNTkzMTYsNTkzMTcsNTkzMTgsNTkzMTksNTkzMjAsNTkzMjEsNTkzMjIsNTkzMjMsNzE0LDcxNSw3MjksODIxMSw4MjEzLDgyMjksODI0NSw4NDUzLDg0NTcsODU5OCw4NTk5LDg2MDAsODYwMSw4NzI1LDg3MzUs''@;'; put 'put ''ODczOSw4Nzg2LDg4MDYsODgwNyw4ODk1LDk1NTIsOTU1Myw5NTU0LDk1NTUsOTU1Niw5NTU3LDk1NTgsOTU1OSw5NTYwLDk1NjEsOTU2Miw5NTYzLDk1NjQsOTU2NSw5NTY2LDk1NjcsOTU2OCw5NTY5LDk1NzAsOTU3MSw5NTcyLDk1NzMsOTU3NCw5NTc1LDk1NzYsOTU3Nyw5NTc4LDk1Nzks''@;'; put 'put ''OTU4MCw5NTgxLDk1ODIsOTU4Myw5NTg0LDk1ODUsOTU4Niw5NTg3LDk2MDEsOTYwMiw5NjAzLDk2MDQsOTYwNSw5NjA2LDk2MDcsOTYwOCw5NjA5LDk2MTAsOTYxMSw5NjEyLDk2MTMsOTYxNCw5NjE1LDk2MTksOTYyMCw5NjIxLDk2NjAsOTY2MSw5Njk4LDk2OTksOTcwMCw5NzAxLDk3Mzcs''@;'; put 'put ''ODg1MywxMjMwNiwxMjMxNywxMjMxOCw1OTMyNCw1OTMyNSw1OTMyNiw1OTMyNyw1OTMyOCw1OTMyOSw1OTMzMCw1OTMzMSw1OTMzMiw1OTMzMyw1OTMzNCwyNTcsMjI1LDQ2MiwyMjQsMjc1LDIzMywyODMsMjMyLDI5OSwyMzcsNDY0LDIzNiwzMzMsMjQzLDQ2NiwyNDIsMzYzLDI1MCw0Njgs''@;'; put 'put ''MjQ5LDQ3MCw0NzIsNDc0LDQ3NiwyNTIsMjM0LDU5Myw3NzQzLDMyNCwzMjgsNTA1LDYwOSw1OTMzNyw1OTMzOCw1OTMzOSw1OTM0MCwxMjU0OSwxMjU1MCwxMjU1MSwxMjU1MiwxMjU1MywxMjU1NCwxMjU1NSwxMjU1NiwxMjU1NywxMjU1OCwxMjU1OSwxMjU2MCwxMjU2MSwxMjU2MiwxMjU2''@;'; put 'put ''MywxMjU2NCwxMjU2NSwxMjU2NiwxMjU2NywxMjU2OCwxMjU2OSwxMjU3MCwxMjU3MSwxMjU3MiwxMjU3MywxMjU3NCwxMjU3NSwxMjU3NiwxMjU3NywxMjU3OCwxMjU3OSwxMjU4MCwxMjU4MSwxMjU4MiwxMjU4MywxMjU4NCwxMjU4NSw1OTM0MSw1OTM0Miw1OTM0Myw1OTM0NCw1OTM0NSw1''@;'; put 'put ''OTM0Niw1OTM0Nyw1OTM0OCw1OTM0OSw1OTM1MCw1OTM1MSw1OTM1Miw1OTM1Myw1OTM1NCw1OTM1NSw1OTM1Niw1OTM1Nyw1OTM1OCw1OTM1OSw1OTM2MCw1OTM2MSwxMjMyMSwxMjMyMiwxMjMyMywxMjMyNCwxMjMyNSwxMjMyNiwxMjMyNywxMjMyOCwxMjMyOSwxMjk2MywxMzE5OCwxMzE5''@;'; put 'put ''OSwxMzIxMiwxMzIxMywxMzIxNCwxMzIxNywxMzI1MiwxMzI2MiwxMzI2NSwxMzI2NiwxMzI2OSw2NTA3Miw2NTUwNiw2NTUwOCw1OTM2Miw4NDgxLDEyODQ5LDU5MzYzLDgyMDgsNTkzNjQsNTkzNjUsNTkzNjYsMTI1NDAsMTI0NDMsMTI0NDQsMTI1NDEsMTI1NDIsMTIyOTQsMTI0NDUsMTI0''@;'; put 'put ''NDYsNjUwOTcsNjUwOTgsNjUwOTksNjUxMDAsNjUxMDEsNjUxMDIsNjUxMDMsNjUxMDQsNjUxMDUsNjUxMDYsNjUxMDgsNjUxMDksNjUxMTAsNjUxMTEsNjUxMTMsNjUxMTQsNjUxMTUsNjUxMTYsNjUxMTcsNjUxMTgsNjUxMTksNjUxMjAsNjUxMjEsNjUxMjIsNjUxMjMsNjUxMjQsNjUxMjUs''@;'; put 'put ''NjUxMjYsNjUxMjgsNjUxMjksNjUxMzAsNjUxMzEsMTIzNTAsMTIyNzIsMTIyNzMsMTIyNzQsMTIyNzUsMTIyNzYsMTIyNzcsMTIyNzgsMTIyNzksMTIyODAsMTIyODEsMTIyODIsMTIyODMsMTIyOTUsNTkzODAsNTkzODEsNTkzODIsNTkzODMsNTkzODQsNTkzODUsNTkzODYsNTkzODcsNTkz''@;'; put 'put ''ODgsNTkzODksNTkzOTAsNTkzOTEsNTkzOTIsOTQ3Miw5NDczLDk0NzQsOTQ3NSw5NDc2LDk0NzcsOTQ3OCw5NDc5LDk0ODAsOTQ4MSw5NDgyLDk0ODMsOTQ4NCw5NDg1LDk0ODYsOTQ4Nyw5NDg4LDk0ODksOTQ5MCw5NDkxLDk0OTIsOTQ5Myw5NDk0LDk0OTUsOTQ5Niw5NDk3LDk0OTgsOTQ5''@;'; put 'put ''OSw5NTAwLDk1MDEsOTUwMiw5NTAzLDk1MDQsOTUwNSw5NTA2LDk1MDcsOTUwOCw5NTA5LDk1MTAsOTUxMSw5NTEyLDk1MTMsOTUxNCw5NTE1LDk1MTYsOTUxNyw5NTE4LDk1MTksOTUyMCw5NTIxLDk1MjIsOTUyMyw5NTI0LDk1MjUsOTUyNiw5NTI3LDk1MjgsOTUyOSw5NTMwLDk1MzEsOTUz''@;'; put 'put ''Miw5NTMzLDk1MzQsOTUzNSw5NTM2LDk1MzcsOTUzOCw5NTM5LDk1NDAsOTU0MSw5NTQyLDk1NDMsOTU0NCw5NTQ1LDk1NDYsOTU0Nyw1OTM5Myw1OTM5NCw1OTM5NSw1OTM5Niw1OTM5Nyw1OTM5OCw1OTM5OSw1OTQwMCw1OTQwMSw1OTQwMiw1OTQwMyw1OTQwNCw1OTQwNSw1OTQwNiw1OTQw''@;'; put 'put ''NywyOTQwNCwyOTQwNSwyOTQwNywyOTQxMCwyOTQxMSwyOTQxMiwyOTQxMywyOTQxNCwyOTQxNSwyOTQxOCwyOTQxOSwyOTQyOSwyOTQzMCwyOTQzMywyOTQzNywyOTQzOCwyOTQzOSwyOTQ0MCwyOTQ0MiwyOTQ0NCwyOTQ0NSwyOTQ0NiwyOTQ0NywyOTQ0OCwyOTQ0OSwyOTQ1MSwyOTQ1Miwy''@;'; put 'put ''OTQ1MywyOTQ1NSwyOTQ1NiwyOTQ1NywyOTQ1OCwyOTQ2MCwyOTQ2NCwyOTQ2NSwyOTQ2NiwyOTQ3MSwyOTQ3MiwyOTQ3NSwyOTQ3NiwyOTQ3OCwyOTQ3OSwyOTQ4MCwyOTQ4NSwyOTQ4NywyOTQ4OCwyOTQ5MCwyOTQ5MSwyOTQ5MywyOTQ5NCwyOTQ5OCwyOTQ5OSwyOTUwMCwyOTUwMSwyOTUw''@;'; put 'put ''NCwyOTUwNSwyOTUwNiwyOTUwNywyOTUwOCwyOTUwOSwyOTUxMCwyOTUxMSwyOTUxMiwyOTUxMywyOTUxNCwyOTUxNSwyOTUxNiwyOTUxOCwyOTUxOSwyOTUyMSwyOTUyMywyOTUyNCwyOTUyNSwyOTUyNiwyOTUyOCwyOTUyOSwyOTUzMCwyOTUzMSwyOTUzMiwyOTUzMywyOTUzNCwyOTUzNSwy''@;'; put 'put ''OTUzNywyOTUzOCwyOTUzOSwyOTU0MCwyOTU0MSwyOTU0MiwyOTU0MywyOTU0NCwyOTU0NSwyOTU0NiwyOTU0NywyOTU1MCwyOTU1MiwyOTU1Myw1NzM0NCw1NzM0NSw1NzM0Niw1NzM0Nyw1NzM0OCw1NzM0OSw1NzM1MCw1NzM1MSw1NzM1Miw1NzM1Myw1NzM1NCw1NzM1NSw1NzM1Niw1NzM1''@;'; put 'put ''Nyw1NzM1OCw1NzM1OSw1NzM2MCw1NzM2MSw1NzM2Miw1NzM2Myw1NzM2NCw1NzM2NSw1NzM2Niw1NzM2Nyw1NzM2OCw1NzM2OSw1NzM3MCw1NzM3MSw1NzM3Miw1NzM3Myw1NzM3NCw1NzM3NSw1NzM3Niw1NzM3Nyw1NzM3OCw1NzM3OSw1NzM4MCw1NzM4MSw1NzM4Miw1NzM4Myw1NzM4NCw1''@;'; put 'put ''NzM4NSw1NzM4Niw1NzM4Nyw1NzM4OCw1NzM4OSw1NzM5MCw1NzM5MSw1NzM5Miw1NzM5Myw1NzM5NCw1NzM5NSw1NzM5Niw1NzM5Nyw1NzM5OCw1NzM5OSw1NzQwMCw1NzQwMSw1NzQwMiw1NzQwMyw1NzQwNCw1NzQwNSw1NzQwNiw1NzQwNyw1NzQwOCw1NzQwOSw1NzQxMCw1NzQxMSw1NzQx''@;'; put 'put ''Miw1NzQxMyw1NzQxNCw1NzQxNSw1NzQxNiw1NzQxNyw1NzQxOCw1NzQxOSw1NzQyMCw1NzQyMSw1NzQyMiw1NzQyMyw1NzQyNCw1NzQyNSw1NzQyNiw1NzQyNyw1NzQyOCw1NzQyOSw1NzQzMCw1NzQzMSw1NzQzMiw1NzQzMyw1NzQzNCw1NzQzNSw1NzQzNiw1NzQzNywyOTU1NCwyOTU1NSwy''@;'; put 'put ''OTU1NiwyOTU1NywyOTU1OCwyOTU1OSwyOTU2MCwyOTU2MSwyOTU2MiwyOTU2MywyOTU2NCwyOTU2NSwyOTU2NywyOTU2OCwyOTU2OSwyOTU3MCwyOTU3MSwyOTU3MywyOTU3NCwyOTU3NiwyOTU3OCwyOTU4MCwyOTU4MSwyOTU4MywyOTU4NCwyOTU4NiwyOTU4NywyOTU4OCwyOTU4OSwyOTU5''@;'; put 'put ''MSwyOTU5MiwyOTU5MywyOTU5NCwyOTU5NiwyOTU5NywyOTU5OCwyOTYwMCwyOTYwMSwyOTYwMywyOTYwNCwyOTYwNSwyOTYwNiwyOTYwNywyOTYwOCwyOTYxMCwyOTYxMiwyOTYxMywyOTYxNywyOTYyMCwyOTYyMSwyOTYyMiwyOTYyNCwyOTYyNSwyOTYyOCwyOTYyOSwyOTYzMCwyOTYzMSwy''@;'; put 'put ''OTYzMywyOTYzNSwyOTYzNiwyOTYzNywyOTYzOCwyOTYzOSwyOTY0MywyOTY0NCwyOTY0NiwyOTY1MCwyOTY1MSwyOTY1MiwyOTY1MywyOTY1NCwyOTY1NSwyOTY1NiwyOTY1OCwyOTY1OSwyOTY2MCwyOTY2MSwyOTY2MywyOTY2NSwyOTY2NiwyOTY2NywyOTY2OCwyOTY3MCwyOTY3MiwyOTY3''@;'; put 'put ''NCwyOTY3NSwyOTY3NiwyOTY3OCwyOTY3OSwyOTY4MCwyOTY4MSwyOTY4MywyOTY4NCwyOTY4NSwyOTY4NiwyOTY4Nyw1NzQzOCw1NzQzOSw1NzQ0MCw1NzQ0MSw1NzQ0Miw1NzQ0Myw1NzQ0NCw1NzQ0NSw1NzQ0Niw1NzQ0Nyw1NzQ0OCw1NzQ0OSw1NzQ1MCw1NzQ1MSw1NzQ1Miw1NzQ1Myw1''@;'; put 'put ''NzQ1NCw1NzQ1NSw1NzQ1Niw1NzQ1Nyw1NzQ1OCw1NzQ1OSw1NzQ2MCw1NzQ2MSw1NzQ2Miw1NzQ2Myw1NzQ2NCw1NzQ2NSw1NzQ2Niw1NzQ2Nyw1NzQ2OCw1NzQ2OSw1NzQ3MCw1NzQ3MSw1NzQ3Miw1NzQ3Myw1NzQ3NCw1NzQ3NSw1NzQ3Niw1NzQ3Nyw1NzQ3OCw1NzQ3OSw1NzQ4MCw1NzQ4''@;'; put 'put ''MSw1NzQ4Miw1NzQ4Myw1NzQ4NCw1NzQ4NSw1NzQ4Niw1NzQ4Nyw1NzQ4OCw1NzQ4OSw1NzQ5MCw1NzQ5MSw1NzQ5Miw1NzQ5Myw1NzQ5NCw1NzQ5NSw1NzQ5Niw1NzQ5Nyw1NzQ5OCw1NzQ5OSw1NzUwMCw1NzUwMSw1NzUwMiw1NzUwMyw1NzUwNCw1NzUwNSw1NzUwNiw1NzUwNyw1NzUwOCw1''@;'; put 'put ''NzUwOSw1NzUxMCw1NzUxMSw1NzUxMiw1NzUxMyw1NzUxNCw1NzUxNSw1NzUxNiw1NzUxNyw1NzUxOCw1NzUxOSw1NzUyMCw1NzUyMSw1NzUyMiw1NzUyMyw1NzUyNCw1NzUyNSw1NzUyNiw1NzUyNyw1NzUyOCw1NzUyOSw1NzUzMCw1NzUzMSwyOTY4OCwyOTY4OSwyOTY5MCwyOTY5MSwyOTY5''@;'; put 'put ''MiwyOTY5MywyOTY5NCwyOTY5NSwyOTY5NiwyOTY5NywyOTY5OCwyOTcwMCwyOTcwMywyOTcwNCwyOTcwNywyOTcwOCwyOTcwOSwyOTcxMCwyOTcxMywyOTcxNCwyOTcxNSwyOTcxNiwyOTcxNywyOTcxOCwyOTcxOSwyOTcyMCwyOTcyMSwyOTcyNCwyOTcyNSwyOTcyNiwyOTcyNywyOTcyOCwy''@;'; put 'put ''OTcyOSwyOTczMSwyOTczMiwyOTczNSwyOTczNywyOTczOSwyOTc0MSwyOTc0MywyOTc0NSwyOTc0NiwyOTc1MSwyOTc1MiwyOTc1MywyOTc1NCwyOTc1NSwyOTc1NywyOTc1OCwyOTc1OSwyOTc2MCwyOTc2MiwyOTc2MywyOTc2NCwyOTc2NSwyOTc2NiwyOTc2NywyOTc2OCwyOTc2OSwyOTc3''@;'; put 'put ''MCwyOTc3MSwyOTc3MiwyOTc3MywyOTc3NCwyOTc3NSwyOTc3NiwyOTc3NywyOTc3OCwyOTc3OSwyOTc4MCwyOTc4MiwyOTc4NCwyOTc4OSwyOTc5MiwyOTc5MywyOTc5NCwyOTc5NSwyOTc5NiwyOTc5NywyOTc5OCwyOTc5OSwyOTgwMCwyOTgwMSwyOTgwMiwyOTgwMywyOTgwNCwyOTgwNiwy''@;'; put 'put ''OTgwNywyOTgwOSwyOTgxMCwyOTgxMSwyOTgxMiwyOTgxMywyOTgxNiwyOTgxNywyOTgxOCw1NzUzMiw1NzUzMyw1NzUzNCw1NzUzNSw1NzUzNiw1NzUzNyw1NzUzOCw1NzUzOSw1NzU0MCw1NzU0MSw1NzU0Miw1NzU0Myw1NzU0NCw1NzU0NSw1NzU0Niw1NzU0Nyw1NzU0OCw1NzU0OSw1NzU1''@;'; put 'put ''MCw1NzU1MSw1NzU1Miw1NzU1Myw1NzU1NCw1NzU1NSw1NzU1Niw1NzU1Nyw1NzU1OCw1NzU1OSw1NzU2MCw1NzU2MSw1NzU2Miw1NzU2Myw1NzU2NCw1NzU2NSw1NzU2Niw1NzU2Nyw1NzU2OCw1NzU2OSw1NzU3MCw1NzU3MSw1NzU3Miw1NzU3Myw1NzU3NCw1NzU3NSw1NzU3Niw1NzU3Nyw1''@;'; put 'put ''NzU3OCw1NzU3OSw1NzU4MCw1NzU4MSw1NzU4Miw1NzU4Myw1NzU4NCw1NzU4NSw1NzU4Niw1NzU4Nyw1NzU4OCw1NzU4OSw1NzU5MCw1NzU5MSw1NzU5Miw1NzU5Myw1NzU5NCw1NzU5NSw1NzU5Niw1NzU5Nyw1NzU5OCw1NzU5OSw1NzYwMCw1NzYwMSw1NzYwMiw1NzYwMyw1NzYwNCw1NzYw''@;'; put 'put ''NSw1NzYwNiw1NzYwNyw1NzYwOCw1NzYwOSw1NzYxMCw1NzYxMSw1NzYxMiw1NzYxMyw1NzYxNCw1NzYxNSw1NzYxNiw1NzYxNyw1NzYxOCw1NzYxOSw1NzYyMCw1NzYyMSw1NzYyMiw1NzYyMyw1NzYyNCw1NzYyNSwyOTgxOSwyOTgyMCwyOTgyMSwyOTgyMywyOTgyNiwyOTgyOCwyOTgyOSwy''@;'; put 'put ''OTgzMCwyOTgzMiwyOTgzMywyOTgzNCwyOTgzNiwyOTgzNywyOTgzOSwyOTg0MSwyOTg0MiwyOTg0MywyOTg0NCwyOTg0NSwyOTg0NiwyOTg0NywyOTg0OCwyOTg0OSwyOTg1MCwyOTg1MSwyOTg1MywyOTg1NSwyOTg1NiwyOTg1NywyOTg1OCwyOTg1OSwyOTg2MCwyOTg2MSwyOTg2MiwyOTg2''@;'; put 'put ''NiwyOTg2NywyOTg2OCwyOTg2OSwyOTg3MCwyOTg3MSwyOTg3MiwyOTg3MywyOTg3NCwyOTg3NSwyOTg3NiwyOTg3NywyOTg3OCwyOTg3OSwyOTg4MCwyOTg4MSwyOTg4MywyOTg4NCwyOTg4NSwyOTg4NiwyOTg4NywyOTg4OCwyOTg4OSwyOTg5MCwyOTg5MSwyOTg5MiwyOTg5MywyOTg5NCwy''@;'; put 'put ''OTg5NSwyOTg5NiwyOTg5NywyOTg5OCwyOTg5OSwyOTkwMCwyOTkwMSwyOTkwMiwyOTkwMywyOTkwNCwyOTkwNSwyOTkwNywyOTkwOCwyOTkwOSwyOTkxMCwyOTkxMSwyOTkxMiwyOTkxMywyOTkxNCwyOTkxNSwyOTkxNywyOTkxOSwyOTkyMSwyOTkyNSwyOTkyNywyOTkyOCwyOTkyOSwyOTkz''@;'; put 'put ''MCwyOTkzMSwyOTkzMiwyOTkzMywyOTkzNiwyOTkzNywyOTkzOCw1NzYyNiw1NzYyNyw1NzYyOCw1NzYyOSw1NzYzMCw1NzYzMSw1NzYzMiw1NzYzMyw1NzYzNCw1NzYzNSw1NzYzNiw1NzYzNyw1NzYzOCw1NzYzOSw1NzY0MCw1NzY0MSw1NzY0Miw1NzY0Myw1NzY0NCw1NzY0NSw1NzY0Niw1''@;'; put 'put ''NzY0Nyw1NzY0OCw1NzY0OSw1NzY1MCw1NzY1MSw1NzY1Miw1NzY1Myw1NzY1NCw1NzY1NSw1NzY1Niw1NzY1Nyw1NzY1OCw1NzY1OSw1NzY2MCw1NzY2MSw1NzY2Miw1NzY2Myw1NzY2NCw1NzY2NSw1NzY2Niw1NzY2Nyw1NzY2OCw1NzY2OSw1NzY3MCw1NzY3MSw1NzY3Miw1NzY3Myw1NzY3''@;'; put 'put ''NCw1NzY3NSw1NzY3Niw1NzY3Nyw1NzY3OCw1NzY3OSw1NzY4MCw1NzY4MSw1NzY4Miw1NzY4Myw1NzY4NCw1NzY4NSw1NzY4Niw1NzY4Nyw1NzY4OCw1NzY4OSw1NzY5MCw1NzY5MSw1NzY5Miw1NzY5Myw1NzY5NCw1NzY5NSw1NzY5Niw1NzY5Nyw1NzY5OCw1NzY5OSw1NzcwMCw1NzcwMSw1''@;'; put 'put ''NzcwMiw1NzcwMyw1NzcwNCw1NzcwNSw1NzcwNiw1NzcwNyw1NzcwOCw1NzcwOSw1NzcxMCw1NzcxMSw1NzcxMiw1NzcxMyw1NzcxNCw1NzcxNSw1NzcxNiw1NzcxNyw1NzcxOCw1NzcxOSwyOTkzOSwyOTk0MSwyOTk0NCwyOTk0NSwyOTk0NiwyOTk0NywyOTk0OCwyOTk0OSwyOTk1MCwyOTk1''@;'; put 'put ''MiwyOTk1MywyOTk1NCwyOTk1NSwyOTk1NywyOTk1OCwyOTk1OSwyOTk2MCwyOTk2MSwyOTk2MiwyOTk2MywyOTk2NCwyOTk2NiwyOTk2OCwyOTk3MCwyOTk3MiwyOTk3MywyOTk3NCwyOTk3NSwyOTk3OSwyOTk4MSwyOTk4MiwyOTk4NCwyOTk4NSwyOTk4NiwyOTk4NywyOTk4OCwyOTk5MCwy''@;'; put 'put ''OTk5MSwyOTk5NCwyOTk5OCwzMDAwNCwzMDAwNiwzMDAwOSwzMDAxMiwzMDAxMywzMDAxNSwzMDAxNywzMDAxOCwzMDAxOSwzMDAyMCwzMDAyMiwzMDAyMywzMDAyNSwzMDAyNiwzMDAyOSwzMDAzMiwzMDAzMywzMDAzNCwzMDAzNSwzMDAzNywzMDAzOCwzMDAzOSwzMDA0MCwzMDA0NSwzMDA0''@;'; put 'put ''NiwzMDA0NywzMDA0OCwzMDA0OSwzMDA1MCwzMDA1MSwzMDA1MiwzMDA1NSwzMDA1NiwzMDA1NywzMDA1OSwzMDA2MCwzMDA2MSwzMDA2MiwzMDA2MywzMDA2NCwzMDA2NSwzMDA2NywzMDA2OSwzMDA3MCwzMDA3MSwzMDA3NCwzMDA3NSwzMDA3NiwzMDA3NywzMDA3OCwzMDA4MCwzMDA4MSwz''@;'; put 'put ''MDA4MiwzMDA4NCwzMDA4NSwzMDA4Nyw1NzcyMCw1NzcyMSw1NzcyMiw1NzcyMyw1NzcyNCw1NzcyNSw1NzcyNiw1NzcyNyw1NzcyOCw1NzcyOSw1NzczMCw1NzczMSw1NzczMiw1NzczMyw1NzczNCw1NzczNSw1NzczNiw1NzczNyw1NzczOCw1NzczOSw1Nzc0MCw1Nzc0MSw1Nzc0Miw1Nzc0''@;'; put 'put ''Myw1Nzc0NCw1Nzc0NSw1Nzc0Niw1Nzc0Nyw1Nzc0OCw1Nzc0OSw1Nzc1MCw1Nzc1MSw1Nzc1Miw1Nzc1Myw1Nzc1NCw1Nzc1NSw1Nzc1Niw1Nzc1Nyw1Nzc1OCw1Nzc1OSw1Nzc2MCw1Nzc2MSw1Nzc2Miw1Nzc2Myw1Nzc2NCw1Nzc2NSw1Nzc2Niw1Nzc2Nyw1Nzc2OCw1Nzc2OSw1Nzc3MCw1''@;'; put 'put ''Nzc3MSw1Nzc3Miw1Nzc3Myw1Nzc3NCw1Nzc3NSw1Nzc3Niw1Nzc3Nyw1Nzc3OCw1Nzc3OSw1Nzc4MCw1Nzc4MSw1Nzc4Miw1Nzc4Myw1Nzc4NCw1Nzc4NSw1Nzc4Niw1Nzc4Nyw1Nzc4OCw1Nzc4OSw1Nzc5MCw1Nzc5MSw1Nzc5Miw1Nzc5Myw1Nzc5NCw1Nzc5NSw1Nzc5Niw1Nzc5Nyw1Nzc5''@;'; put 'put ''OCw1Nzc5OSw1NzgwMCw1NzgwMSw1NzgwMiw1NzgwMyw1NzgwNCw1NzgwNSw1NzgwNiw1NzgwNyw1NzgwOCw1NzgwOSw1NzgxMCw1NzgxMSw1NzgxMiw1NzgxMywzMDA4OCwzMDA4OSwzMDA5MCwzMDA5MiwzMDA5MywzMDA5NCwzMDA5NiwzMDA5OSwzMDEwMSwzMDEwNCwzMDEwNywzMDEwOCwz''@;'; put 'put ''MDExMCwzMDExNCwzMDExOCwzMDExOSwzMDEyMCwzMDEyMSwzMDEyMiwzMDEyNSwzMDEzNCwzMDEzNSwzMDEzOCwzMDEzOSwzMDE0MywzMDE0NCwzMDE0NSwzMDE1MCwzMDE1NSwzMDE1NiwzMDE1OCwzMDE1OSwzMDE2MCwzMDE2MSwzMDE2MywzMDE2NywzMDE2OSwzMDE3MCwzMDE3MiwzMDE3''@;'; put 'put ''MywzMDE3NSwzMDE3NiwzMDE3NywzMDE4MSwzMDE4NSwzMDE4OCwzMDE4OSwzMDE5MCwzMDE5MSwzMDE5NCwzMDE5NSwzMDE5NywzMDE5OCwzMDE5OSwzMDIwMCwzMDIwMiwzMDIwMywzMDIwNSwzMDIwNiwzMDIxMCwzMDIxMiwzMDIxNCwzMDIxNSwzMDIxNiwzMDIxNywzMDIxOSwzMDIyMSwz''@;'; put 'put ''MDIyMiwzMDIyMywzMDIyNSwzMDIyNiwzMDIyNywzMDIyOCwzMDIzMCwzMDIzNCwzMDIzNiwzMDIzNywzMDIzOCwzMDI0MSwzMDI0MywzMDI0NywzMDI0OCwzMDI1MiwzMDI1NCwzMDI1NSwzMDI1NywzMDI1OCwzMDI2MiwzMDI2MywzMDI2NSwzMDI2NiwzMDI2NywzMDI2OSwzMDI3MywzMDI3''@;'; put 'put ''NCwzMDI3Niw1NzgxNCw1NzgxNSw1NzgxNiw1NzgxNyw1NzgxOCw1NzgxOSw1NzgyMCw1NzgyMSw1NzgyMiw1NzgyMyw1NzgyNCw1NzgyNSw1NzgyNiw1NzgyNyw1NzgyOCw1NzgyOSw1NzgzMCw1NzgzMSw1NzgzMiw1NzgzMyw1NzgzNCw1NzgzNSw1NzgzNiw1NzgzNyw1NzgzOCw1NzgzOSw1''@;'; put 'put ''Nzg0MCw1Nzg0MSw1Nzg0Miw1Nzg0Myw1Nzg0NCw1Nzg0NSw1Nzg0Niw1Nzg0Nyw1Nzg0OCw1Nzg0OSw1Nzg1MCw1Nzg1MSw1Nzg1Miw1Nzg1Myw1Nzg1NCw1Nzg1NSw1Nzg1Niw1Nzg1Nyw1Nzg1OCw1Nzg1OSw1Nzg2MCw1Nzg2MSw1Nzg2Miw1Nzg2Myw1Nzg2NCw1Nzg2NSw1Nzg2Niw1Nzg2''@;'; put 'put ''Nyw1Nzg2OCw1Nzg2OSw1Nzg3MCw1Nzg3MSw1Nzg3Miw1Nzg3Myw1Nzg3NCw1Nzg3NSw1Nzg3Niw1Nzg3Nyw1Nzg3OCw1Nzg3OSw1Nzg4MCw1Nzg4MSw1Nzg4Miw1Nzg4Myw1Nzg4NCw1Nzg4NSw1Nzg4Niw1Nzg4Nyw1Nzg4OCw1Nzg4OSw1Nzg5MCw1Nzg5MSw1Nzg5Miw1Nzg5Myw1Nzg5NCw1''@;'; put 'put ''Nzg5NSw1Nzg5Niw1Nzg5Nyw1Nzg5OCw1Nzg5OSw1NzkwMCw1NzkwMSw1NzkwMiw1NzkwMyw1NzkwNCw1NzkwNSw1NzkwNiw1NzkwNywzMDI3NywzMDI3OCwzMDI3OSwzMDI4MCwzMDI4MSwzMDI4MiwzMDI4MywzMDI4NiwzMDI4NywzMDI4OCwzMDI4OSwzMDI5MCwzMDI5MSwzMDI5MywzMDI5''@;'; put 'put ''NSwzMDI5NiwzMDI5NywzMDI5OCwzMDI5OSwzMDMwMSwzMDMwMywzMDMwNCwzMDMwNSwzMDMwNiwzMDMwOCwzMDMwOSwzMDMxMCwzMDMxMSwzMDMxMiwzMDMxMywzMDMxNCwzMDMxNiwzMDMxNywzMDMxOCwzMDMyMCwzMDMyMSwzMDMyMiwzMDMyMywzMDMyNCwzMDMyNSwzMDMyNiwzMDMyNywz''@;'; put 'put ''MDMyOSwzMDMzMCwzMDMzMiwzMDMzNSwzMDMzNiwzMDMzNywzMDMzOSwzMDM0MSwzMDM0NSwzMDM0NiwzMDM0OCwzMDM0OSwzMDM1MSwzMDM1MiwzMDM1NCwzMDM1NiwzMDM1NywzMDM1OSwzMDM2MCwzMDM2MiwzMDM2MywzMDM2NCwzMDM2NSwzMDM2NiwzMDM2NywzMDM2OCwzMDM2OSwzMDM3''@;'; put 'put ''MCwzMDM3MSwzMDM3MywzMDM3NCwzMDM3NSwzMDM3NiwzMDM3NywzMDM3OCwzMDM3OSwzMDM4MCwzMDM4MSwzMDM4MywzMDM4NCwzMDM4NywzMDM4OSwzMDM5MCwzMDM5MSwzMDM5MiwzMDM5MywzMDM5NCwzMDM5NSwzMDM5NiwzMDM5NywzMDM5OCwzMDQwMCwzMDQwMSwzMDQwMywyMTgzNCwz''@;'; put 'put ''ODQ2MywyMjQ2NywyNTM4NCwyMTcxMCwyMTc2OSwyMTY5NiwzMDM1MywzMDI4NCwzNDEwOCwzMDcwMiwzMzQwNiwzMDg2MSwyOTIzMywzODU1MiwzODc5NywyNzY4OCwyMzQzMywyMDQ3NCwyNTM1MywyNjI2MywyMzczNiwzMzAxOCwyNjY5NiwzMjk0MiwyNjExNCwzMDQxNCwyMDk4NSwyNTk0''@;'; put 'put ''MiwyOTEwMCwzMjc1MywzNDk0OCwyMDY1OCwyMjg4NSwyNTAzNCwyODU5NSwzMzQ1MywyNTQyMCwyNTE3MCwyMTQ4NSwyMTU0MywzMTQ5NCwyMDg0MywzMDExNiwyNDA1MiwyNTMwMCwzNjI5OSwzODc3NCwyNTIyNiwzMjc5MywyMjM2NSwzODcxMiwzMjYxMCwyOTI0MCwzMDMzMywyNjU3NSwz''@;'; put 'put ''MDMzNCwyNTY3MCwyMDMzNiwzNjEzMywyNTMwOCwzMTI1NSwyNjAwMSwyOTY3NywyNTY0NCwyNTIwMywzMzMyNCwzOTA0MSwyNjQ5NSwyOTI1NiwyNTE5OCwyNTI5MiwyMDI3NiwyOTkyMywyMTMyMiwyMTE1MCwzMjQ1OCwzNzAzMCwyNDExMCwyNjc1OCwyNzAzNiwzMzE1MiwzMjQ2NSwyNjgz''@;'; put 'put ''NCwzMDkxNywzNDQ0NCwzODIyNSwyMDYyMSwzNTg3NiwzMzUwMiwzMjk5MCwyMTI1MywzNTA5MCwyMTA5MywzMDQwNCwzMDQwNywzMDQwOSwzMDQxMSwzMDQxMiwzMDQxOSwzMDQyMSwzMDQyNSwzMDQyNiwzMDQyOCwzMDQyOSwzMDQzMCwzMDQzMiwzMDQzMywzMDQzNCwzMDQzNSwzMDQzNiwz''@;'; put 'put ''MDQzOCwzMDQzOSwzMDQ0MCwzMDQ0MSwzMDQ0MiwzMDQ0MywzMDQ0NCwzMDQ0NSwzMDQ0OCwzMDQ1MSwzMDQ1MywzMDQ1NCwzMDQ1NSwzMDQ1OCwzMDQ1OSwzMDQ2MSwzMDQ2MywzMDQ2NCwzMDQ2NiwzMDQ2NywzMDQ2OSwzMDQ3MCwzMDQ3NCwzMDQ3NiwzMDQ3OCwzMDQ3OSwzMDQ4MCwzMDQ4''@;'; put 'put ''MSwzMDQ4MiwzMDQ4MywzMDQ4NCwzMDQ4NSwzMDQ4NiwzMDQ4NywzMDQ4OCwzMDQ5MSwzMDQ5MiwzMDQ5MywzMDQ5NCwzMDQ5NywzMDQ5OSwzMDUwMCwzMDUwMSwzMDUwMywzMDUwNiwzMDUwNywzMDUwOCwzMDUxMCwzMDUxMiwzMDUxMywzMDUxNCwzMDUxNSwzMDUxNiwzMDUyMSwzMDUyMywz''@;'; put 'put ''MDUyNSwzMDUyNiwzMDUyNywzMDUzMCwzMDUzMiwzMDUzMywzMDUzNCwzMDUzNiwzMDUzNywzMDUzOCwzMDUzOSwzMDU0MCwzMDU0MSwzMDU0MiwzMDU0MywzMDU0NiwzMDU0NywzMDU0OCwzMDU0OSwzMDU1MCwzMDU1MSwzMDU1MiwzMDU1MywzMDU1NiwzNDE4MCwzODY0OSwyMDQ0NSwyMjU2''@;'; put 'put ''MSwzOTI4MSwyMzQ1MywyNTI2NSwyNTI1MywyNjI5MiwzNTk2MSw0MDA3NywyOTE5MCwyNjQ3OSwzMDg2NSwyNDc1NCwyMTMyOSwyMTI3MSwzNjc0NCwzMjk3MiwzNjEyNSwzODA0OSwyMDQ5MywyOTM4NCwyMjc5MSwyNDgxMSwyODk1MywzNDk4NywyMjg2OCwzMzUxOSwyNjQxMiwzMTUyOCwy''@;'; put 'put ''Mzg0OSwzMjUwMywyOTk5NywyNzg5MywzNjQ1NCwzNjg1NiwzNjkyNCw0MDc2MywyNzYwNCwzNzE0NSwzMTUwOCwyNDQ0NCwzMDg4NywzNDAwNiwzNDEwOSwyNzYwNSwyNzYwOSwyNzYwNiwyNDA2NSwyNDE5OSwzMDIwMSwzODM4MSwyNTk0OSwyNDMzMCwyNDUxNywzNjc2NywyMjcyMSwzMzIx''@;'; put 'put ''OCwzNjk5MSwzODQ5MSwzODgyOSwzNjc5MywzMjUzNCwzNjE0MCwyNTE1MywyMDQxNSwyMTQ2NCwyMTM0MiwzNjc3NiwzNjc3NywzNjc3OSwzNjk0MSwyNjYzMSwyNDQyNiwzMzE3NiwzNDkyMCw0MDE1MCwyNDk3MSwyMTAzNSwzMDI1MCwyNDQyOCwyNTk5NiwyODYyNiwyODM5MiwyMzQ4Niwy''@;'; put 'put ''NTY3MiwyMDg1MywyMDkxMiwyNjU2NCwxOTk5MywzMTE3NywzOTI5MiwyODg1MSwzMDU1NywzMDU1OCwzMDU1OSwzMDU2MCwzMDU2NCwzMDU2NywzMDU2OSwzMDU3MCwzMDU3MywzMDU3NCwzMDU3NSwzMDU3NiwzMDU3NywzMDU3OCwzMDU3OSwzMDU4MCwzMDU4MSwzMDU4MiwzMDU4MywzMDU4''@;'; put 'put ''NCwzMDU4NiwzMDU4NywzMDU4OCwzMDU5MywzMDU5NCwzMDU5NSwzMDU5OCwzMDU5OSwzMDYwMCwzMDYwMSwzMDYwMiwzMDYwMywzMDYwNywzMDYwOCwzMDYxMSwzMDYxMiwzMDYxMywzMDYxNCwzMDYxNSwzMDYxNiwzMDYxNywzMDYxOCwzMDYxOSwzMDYyMCwzMDYyMSwzMDYyMiwzMDYyNSwz''@;'; put 'put ''MDYyNywzMDYyOCwzMDYzMCwzMDYzMiwzMDYzNSwzMDYzNywzMDYzOCwzMDYzOSwzMDY0MSwzMDY0MiwzMDY0NCwzMDY0NiwzMDY0NywzMDY0OCwzMDY0OSwzMDY1MCwzMDY1MiwzMDY1NCwzMDY1NiwzMDY1NywzMDY1OCwzMDY1OSwzMDY2MCwzMDY2MSwzMDY2MiwzMDY2MywzMDY2NCwzMDY2''@;'; put 'put ''NSwzMDY2NiwzMDY2NywzMDY2OCwzMDY3MCwzMDY3MSwzMDY3MiwzMDY3MywzMDY3NCwzMDY3NSwzMDY3NiwzMDY3NywzMDY3OCwzMDY4MCwzMDY4MSwzMDY4MiwzMDY4NSwzMDY4NiwzMDY4NywzMDY4OCwzMDY4OSwzMDY5MiwzMDE0OSwyNDE4MiwyOTYyNywzMzc2MCwyNTc3MywyNTMyMCwz''@;'; put 'put ''ODA2OSwyNzg3NCwyMTMzOCwyMTE4NywyNTYxNSwzODA4MiwzMTYzNiwyMDI3MSwyNDA5MSwzMzMzNCwzMzA0NiwzMzE2MiwyODE5NiwyNzg1MCwzOTUzOSwyNTQyOSwyMTM0MCwyMTc1NCwzNDkxNywyMjQ5NiwxOTk4MSwyNDA2NywyNzQ5MywzMTgwNywzNzA5NiwyNDU5OCwyNTgzMCwyOTQ2''@;'; put 'put ''OCwzNTAwOSwyNjQ0OCwyNTE2NSwzNjEzMCwzMDU3MiwzNjM5MywzNzMxOSwyNDQyNSwzMzc1NiwzNDA4MSwzOTE4NCwyMTQ0MiwzNDQ1MywyNzUzMSwyNDgxMywyNDgwOCwyODc5OSwzMzQ4NSwzMzMyOSwyMDE3OSwyNzgxNSwzNDI1NSwyNTgwNSwzMTk2MSwyNzEzMywyNjM2MSwzMzYwOSwy''@;'; put 'put ''MTM5NywzMTU3NCwyMDM5MSwyMDg3NiwyNzk3OSwyMzYxOCwzNjQ2MSwyNTU1NCwyMTQ0OSwzMzU4MCwzMzU5MCwyNjU5NywzMDkwMCwyNTY2MSwyMzUxOSwyMzcwMCwyNDA0NiwzNTgxNSwyNTI4NiwyNjYxMiwzNTk2MiwyNTYwMCwyNTUzMCwzNDYzMywzOTMwNywzNTg2MywzMjU0NCwzODEz''@;'; put 'put ''MCwyMDEzNSwzODQxNiwzOTA3NiwyNjEyNCwyOTQ2MiwzMDY5NCwzMDY5NiwzMDY5OCwzMDcwMywzMDcwNCwzMDcwNSwzMDcwNiwzMDcwOCwzMDcwOSwzMDcxMSwzMDcxMywzMDcxNCwzMDcxNSwzMDcxNiwzMDcyMywzMDcyNCwzMDcyNSwzMDcyNiwzMDcyNywzMDcyOCwzMDczMCwzMDczMSwz''@;'; put 'put ''MDczNCwzMDczNSwzMDczNiwzMDczOSwzMDc0MSwzMDc0NSwzMDc0NywzMDc1MCwzMDc1MiwzMDc1MywzMDc1NCwzMDc1NiwzMDc2MCwzMDc2MiwzMDc2MywzMDc2NiwzMDc2NywzMDc2OSwzMDc3MCwzMDc3MSwzMDc3MywzMDc3NCwzMDc4MSwzMDc4MywzMDc4NSwzMDc4NiwzMDc4NywzMDc4''@;'; put 'put ''OCwzMDc5MCwzMDc5MiwzMDc5MywzMDc5NCwzMDc5NSwzMDc5NywzMDc5OSwzMDgwMSwzMDgwMywzMDgwNCwzMDgwOCwzMDgwOSwzMDgxMCwzMDgxMSwzMDgxMiwzMDgxNCwzMDgxNSwzMDgxNiwzMDgxNywzMDgxOCwzMDgxOSwzMDgyMCwzMDgyMSwzMDgyMiwzMDgyMywzMDgyNCwzMDgyNSwz''@;'; put 'put ''MDgzMSwzMDgzMiwzMDgzMywzMDgzNCwzMDgzNSwzMDgzNiwzMDgzNywzMDgzOCwzMDg0MCwzMDg0MSwzMDg0MiwzMDg0MywzMDg0NSwzMDg0NiwzMDg0NywzMDg0OCwzMDg0OSwzMDg1MCwzMDg1MSwyMjMzMCwyMzU4MSwyNDEyMCwzODI3MSwyMDYwNywzMjkyOCwyMTM3OCwyNTk1MCwzMDAy''@;'; put 'put ''MSwyMTgwOSwyMDUxMywzNjIyOSwyNTIyMCwzODA0NiwyNjM5NywyMjA2NiwyODUyNiwyNDAzNCwyMTU1NywyODgxOCwzNjcxMCwyNTE5OSwyNTc2NCwyNTUwNywyNDQ0MywyODU1MiwzNzEwOCwzMzI1MSwzNjc4NCwyMzU3NiwyNjIxNiwyNDU2MSwyNzc4NSwzODQ3MiwzNjIyNSwzNDkyNCwy''@;'; put 'put ''NTc0NSwzMTIxNiwyMjQ3OCwyNzIyNSwyNTEwNCwyMTU3NiwyMDA1NiwzMTI0MywyNDgwOSwyODU0OCwzNTgwMiwyNTIxNSwzNjg5NCwzOTU2MywzMTIwNCwyMTUwNywzMDE5NiwyNTM0NSwyMTI3MywyNzc0NCwzNjgzMSwyNDM0NywzOTUzNiwzMjgyNyw0MDgzMSwyMDM2MCwyMzYxMCwzNjE5''@;'; put 'put ''NiwzMjcwOSwyNjAyMSwyODg2MSwyMDgwNSwyMDkxNCwzNDQxMSwyMzgxNSwyMzQ1NiwyNTI3NywzNzIyOCwzMDA2OCwzNjM2NCwzMTI2NCwyNDgzMywzMTYwOSwyMDE2NywzMjUwNCwzMDU5NywxOTk4NSwzMzI2MSwyMTAyMSwyMDk4NiwyNzI0OSwyMTQxNiwzNjQ4NywzODE0OCwzODYwNywy''@;'; put 'put ''ODM1MywzODUwMCwyNjk3MCwzMDg1MiwzMDg1MywzMDg1NCwzMDg1NiwzMDg1OCwzMDg1OSwzMDg2MywzMDg2NCwzMDg2NiwzMDg2OCwzMDg2OSwzMDg3MCwzMDg3MywzMDg3NywzMDg3OCwzMDg4MCwzMDg4MiwzMDg4NCwzMDg4NiwzMDg4OCwzMDg4OSwzMDg5MCwzMDg5MSwzMDg5MiwzMDg5''@;'; put 'put ''MywzMDg5NCwzMDg5NSwzMDkwMSwzMDkwMiwzMDkwMywzMDkwNCwzMDkwNiwzMDkwNywzMDkwOCwzMDkwOSwzMDkxMSwzMDkxMiwzMDkxNCwzMDkxNSwzMDkxNiwzMDkxOCwzMDkxOSwzMDkyMCwzMDkyNCwzMDkyNSwzMDkyNiwzMDkyNywzMDkyOSwzMDkzMCwzMDkzMSwzMDkzNCwzMDkzNSwz''@;'; put 'put ''MDkzNiwzMDkzOCwzMDkzOSwzMDk0MCwzMDk0MSwzMDk0MiwzMDk0MywzMDk0NCwzMDk0NSwzMDk0NiwzMDk0NywzMDk0OCwzMDk0OSwzMDk1MCwzMDk1MSwzMDk1MywzMDk1NCwzMDk1NSwzMDk1NywzMDk1OCwzMDk1OSwzMDk2MCwzMDk2MSwzMDk2MywzMDk2NSwzMDk2NiwzMDk2OCwzMDk2''@;'; put 'put ''OSwzMDk3MSwzMDk3MiwzMDk3MywzMDk3NCwzMDk3NSwzMDk3NiwzMDk3OCwzMDk3OSwzMDk4MCwzMDk4MiwzMDk4MywzMDk4NCwzMDk4NSwzMDk4NiwzMDk4NywzMDk4OCwzMDc4NCwyMDY0OCwzMDY3OSwyNTYxNiwzNTMwMiwyMjc4OCwyNTU3MSwyNDAyOSwzMTM1OSwyNjk0MSwyMDI1Niwz''@;'; put 'put ''MzMzNywyMTkxMiwyMDAxOCwzMDEyNiwzMTM4MywyNDE2MiwyNDIwMiwzODM4MywyMTAxOSwyMTU2MSwyODgxMCwyNTQ2MiwzODE4MCwyMjQwMiwyNjE0OSwyNjk0MywzNzI1NSwyMTc2NywyODE0NywzMjQzMSwzNDg1MCwyNTEzOSwzMjQ5NiwzMDEzMywzMzU3NiwzMDkxMywzODYwNCwzNjc2''@;'; put 'put ''NiwyNDkwNCwyOTk0MywzNTc4OSwyNzQ5MiwyMTA1MCwzNjE3NiwyNzQyNSwzMjg3NCwzMzkwNSwyMjI1NywyMTI1NCwyMDE3NCwxOTk5NSwyMDk0NSwzMTg5NSwzNzI1OSwzMTc1MSwyMDQxOSwzNjQ3OSwzMTcxMywzMTM4OCwyNTcwMywyMzgyOCwyMDY1MiwzMzAzMCwzMDIwOSwzMTkyOSwy''@;'; put 'put ''ODE0MCwzMjczNiwyNjQ0OSwyMzM4NCwyMzU0NCwzMDkyMywyNTc3NCwyNTYxOSwyNTUxNCwyNTM4NywzODE2OSwyNTY0NSwzNjc5OCwzMTU3MiwzMDI0OSwyNTE3MSwyMjgyMywyMTU3NCwyNzUxMywyMDY0MywyNTE0MCwyNDEwMiwyNzUyNiwyMDE5NSwzNjE1MSwzNDk1NSwyNDQ1MywzNjkx''@;'; put 'put ''MCwzMDk4OSwzMDk5MCwzMDk5MSwzMDk5MiwzMDk5MywzMDk5NCwzMDk5NiwzMDk5NywzMDk5OCwzMDk5OSwzMWUzLDMxMDAxLDMxMDAyLDMxMDAzLDMxMDA0LDMxMDA1LDMxMDA3LDMxMDA4LDMxMDA5LDMxMDEwLDMxMDExLDMxMDEzLDMxMDE0LDMxMDE1LDMxMDE2LDMxMDE3LDMxMDE4LDMx''@;'; put 'put ''MDE5LDMxMDIwLDMxMDIxLDMxMDIyLDMxMDIzLDMxMDI0LDMxMDI1LDMxMDI2LDMxMDI3LDMxMDI5LDMxMDMwLDMxMDMxLDMxMDMyLDMxMDMzLDMxMDM3LDMxMDM5LDMxMDQyLDMxMDQzLDMxMDQ0LDMxMDQ1LDMxMDQ3LDMxMDUwLDMxMDUxLDMxMDUyLDMxMDUzLDMxMDU0LDMxMDU1LDMxMDU2''@;'; put 'put ''LDMxMDU3LDMxMDU4LDMxMDYwLDMxMDYxLDMxMDY0LDMxMDY1LDMxMDczLDMxMDc1LDMxMDc2LDMxMDc4LDMxMDgxLDMxMDgyLDMxMDgzLDMxMDg0LDMxMDg2LDMxMDg4LDMxMDg5LDMxMDkwLDMxMDkxLDMxMDkyLDMxMDkzLDMxMDk0LDMxMDk3LDMxMDk5LDMxMTAwLDMxMTAxLDMxMTAyLDMx''@;'; put 'put ''MTAzLDMxMTA2LDMxMTA3LDMxMTEwLDMxMTExLDMxMTEyLDMxMTEzLDMxMTE1LDMxMTE2LDMxMTE3LDMxMTE4LDMxMTIwLDMxMTIxLDMxMTIyLDI0NjA4LDMyODI5LDI1Mjg1LDIwMDI1LDIxMzMzLDM3MTEyLDI1NTI4LDMyOTY2LDI2MDg2LDI3Njk0LDIwMjk0LDI0ODE0LDI4MTI5LDM1ODA2''@;'; put 'put ''LDI0Mzc3LDM0NTA3LDI0NDAzLDI1Mzc3LDIwODI2LDMzNjMzLDI2NzIzLDIwOTkyLDI1NDQzLDM2NDI0LDIwNDk4LDIzNzA3LDMxMDk1LDIzNTQ4LDIxMDQwLDMxMjkxLDI0NzY0LDM2OTQ3LDMwNDIzLDI0NTAzLDI0NDcxLDMwMzQwLDM2NDYwLDI4NzgzLDMwMzMxLDMxNTYxLDMwNjM0LDIw''@;'; put 'put ''OTc5LDM3MDExLDIyNTY0LDIwMzAyLDI4NDA0LDM2ODQyLDI1OTMyLDMxNTE1LDI5MzgwLDI4MDY4LDMyNzM1LDIzMjY1LDI1MjY5LDI0MjEzLDIyMzIwLDMzOTIyLDMxNTMyLDI0MDkzLDI0MzUxLDM2ODgyLDMyNTMyLDM5MDcyLDI1NDc0LDI4MzU5LDMwODcyLDI4ODU3LDIwODU2LDM4NzQ3''@;'; put 'put ''LDIyNDQzLDMwMDA1LDIwMjkxLDMwMDA4LDI0MjE1LDI0ODA2LDIyODgwLDI4MDk2LDI3NTgzLDMwODU3LDIxNTAwLDM4NjEzLDIwOTM5LDIwOTkzLDI1NDgxLDIxNTE0LDM4MDM1LDM1ODQzLDM2MzAwLDI5MjQxLDMwODc5LDM0Njc4LDM2ODQ1LDM1ODUzLDIxNDcyLDMxMTIzLDMxMTI0LDMx''@;'; put 'put ''MTI1LDMxMTI2LDMxMTI3LDMxMTI4LDMxMTI5LDMxMTMxLDMxMTMyLDMxMTMzLDMxMTM0LDMxMTM1LDMxMTM2LDMxMTM3LDMxMTM4LDMxMTM5LDMxMTQwLDMxMTQxLDMxMTQyLDMxMTQ0LDMxMTQ1LDMxMTQ2LDMxMTQ3LDMxMTQ4LDMxMTQ5LDMxMTUwLDMxMTUxLDMxMTUyLDMxMTUzLDMxMTU0''@;'; put 'put ''LDMxMTU2LDMxMTU3LDMxMTU4LDMxMTU5LDMxMTYwLDMxMTY0LDMxMTY3LDMxMTcwLDMxMTcyLDMxMTczLDMxMTc1LDMxMTc2LDMxMTc4LDMxMTgwLDMxMTgyLDMxMTgzLDMxMTg0LDMxMTg3LDMxMTg4LDMxMTkwLDMxMTkxLDMxMTkzLDMxMTk0LDMxMTk1LDMxMTk2LDMxMTk3LDMxMTk4LDMx''@;'; put 'put ''MjAwLDMxMjAxLDMxMjAyLDMxMjA1LDMxMjA4LDMxMjEwLDMxMjEyLDMxMjE0LDMxMjE3LDMxMjE4LDMxMjE5LDMxMjIwLDMxMjIxLDMxMjIyLDMxMjIzLDMxMjI1LDMxMjI2LDMxMjI4LDMxMjMwLDMxMjMxLDMxMjMzLDMxMjM2LDMxMjM3LDMxMjM5LDMxMjQwLDMxMjQxLDMxMjQyLDMxMjQ0''@;'; put 'put ''LDMxMjQ3LDMxMjQ4LDMxMjQ5LDMxMjUwLDMxMjUxLDMxMjUzLDMxMjU0LDMxMjU2LDMxMjU3LDMxMjU5LDMxMjYwLDE5OTY5LDMwNDQ3LDIxNDg2LDM4MDI1LDM5MDMwLDQwNzE4LDM4MTg5LDIzNDUwLDM1NzQ2LDIwMDAyLDE5OTk2LDIwOTA4LDMzODkxLDI1MDI2LDIxMTYwLDI2NjM1LDIw''@;'; put 'put ''Mzc1LDI0NjgzLDIwOTIzLDI3OTM0LDIwODI4LDI1MjM4LDI2MDA3LDM4NDk3LDM1OTEwLDM2ODg3LDMwMTY4LDM3MTE3LDMwNTYzLDI3NjAyLDI5MzIyLDI5NDIwLDM1ODM1LDIyNTgxLDMwNTg1LDM2MTcyLDI2NDYwLDM4MjA4LDMyOTIyLDI0MjMwLDI4MTkzLDIyOTMwLDMxNDcxLDMwNzAx''@;'; put 'put ''LDM4MjAzLDI3NTczLDI2MDI5LDMyNTI2LDIyNTM0LDIwODE3LDM4NDMxLDIzNTQ1LDIyNjk3LDIxNTQ0LDM2NDY2LDI1OTU4LDM5MDM5LDIyMjQ0LDM4MDQ1LDMwNDYyLDM2OTI5LDI1NDc5LDIxNzAyLDIyODEwLDIyODQyLDIyNDI3LDM2NTMwLDI2NDIxLDM2MzQ2LDMzMzMzLDIxMDU3LDI0''@;'; put 'put ''ODE2LDIyNTQ5LDM0NTU4LDIzNzg0LDQwNTE3LDIwNDIwLDM5MDY5LDM1NzY5LDIzMDc3LDI0Njk0LDIxMzgwLDI1MjEyLDM2OTQzLDM3MTIyLDM5Mjk1LDI0NjgxLDMyNzgwLDIwNzk5LDMyODE5LDIzNTcyLDM5Mjg1LDI3OTUzLDIwMTA4LDMxMjYxLDMxMjYzLDMxMjY1LDMxMjY2LDMxMjY4''@;'; put 'put ''LDMxMjY5LDMxMjcwLDMxMjcxLDMxMjcyLDMxMjczLDMxMjc0LDMxMjc1LDMxMjc2LDMxMjc3LDMxMjc4LDMxMjc5LDMxMjgwLDMxMjgxLDMxMjgyLDMxMjg0LDMxMjg1LDMxMjg2LDMxMjg4LDMxMjkwLDMxMjk0LDMxMjk2LDMxMjk3LDMxMjk4LDMxMjk5LDMxMzAwLDMxMzAxLDMxMzAzLDMx''@;'; put 'put ''MzA0LDMxMzA1LDMxMzA2LDMxMzA3LDMxMzA4LDMxMzA5LDMxMzEwLDMxMzExLDMxMzEyLDMxMzE0LDMxMzE1LDMxMzE2LDMxMzE3LDMxMzE4LDMxMzIwLDMxMzIxLDMxMzIyLDMxMzIzLDMxMzI0LDMxMzI1LDMxMzI2LDMxMzI3LDMxMzI4LDMxMzI5LDMxMzMwLDMxMzMxLDMxMzMyLDMxMzMz''@;'; put 'put ''LDMxMzM0LDMxMzM1LDMxMzM2LDMxMzM3LDMxMzM4LDMxMzM5LDMxMzQwLDMxMzQxLDMxMzQyLDMxMzQzLDMxMzQ1LDMxMzQ2LDMxMzQ3LDMxMzQ5LDMxMzU1LDMxMzU2LDMxMzU3LDMxMzU4LDMxMzYyLDMxMzY1LDMxMzY3LDMxMzY5LDMxMzcwLDMxMzcxLDMxMzcyLDMxMzc0LDMxMzc1LDMx''@;'; put 'put ''Mzc2LDMxMzc5LDMxMzgwLDMxMzg1LDMxMzg2LDMxMzg3LDMxMzkwLDMxMzkzLDMxMzk0LDM2MTQ0LDIxNDU3LDMyNjAyLDMxNTY3LDIwMjQwLDIwMDQ3LDM4NDAwLDI3ODYxLDI5NjQ4LDM0MjgxLDI0MDcwLDMwMDU4LDMyNzYzLDI3MTQ2LDMwNzE4LDM4MDM0LDMyMzIxLDIwOTYxLDI4OTAy''@;'; put 'put ''LDIxNDUzLDM2ODIwLDMzNTM5LDM2MTM3LDI5MzU5LDM5Mjc3LDI3ODY3LDIyMzQ2LDMzNDU5LDI2MDQxLDMyOTM4LDI1MTUxLDM4NDUwLDIyOTUyLDIwMjIzLDM1Nzc1LDMyNDQyLDI1OTE4LDMzNzc4LDM4NzUwLDIxODU3LDM5MTM0LDMyOTMzLDIxMjkwLDM1ODM3LDIxNTM2LDMyOTU0LDI0''@;'; put 'put ''MjIzLDI3ODMyLDM2MTUzLDMzNDUyLDM3MjEwLDIxNTQ1LDI3Njc1LDIwOTk4LDMyNDM5LDIyMzY3LDI4OTU0LDI3Nzc0LDMxODgxLDIyODU5LDIwMjIxLDI0NTc1LDI0ODY4LDMxOTE0LDIwMDE2LDIzNTUzLDI2NTM5LDM0NTYyLDIzNzkyLDM4MTU1LDM5MTE4LDMwMTI3LDI4OTI1LDM2ODk4''@;'; put 'put ''LDIwOTExLDMyNTQxLDM1NzczLDIyODU3LDIwOTY0LDIwMzE1LDIxNTQyLDIyODI3LDI1OTc1LDMyOTMyLDIzNDEzLDI1MjA2LDI1MjgyLDM2NzUyLDI0MTMzLDI3Njc5LDMxNTI2LDIwMjM5LDIwNDQwLDI2MzgxLDMxMzk1LDMxMzk2LDMxMzk5LDMxNDAxLDMxNDAyLDMxNDAzLDMxNDA2LDMx''@;'; put 'put ''NDA3LDMxNDA4LDMxNDA5LDMxNDEwLDMxNDEyLDMxNDEzLDMxNDE0LDMxNDE1LDMxNDE2LDMxNDE3LDMxNDE4LDMxNDE5LDMxNDIwLDMxNDIxLDMxNDIyLDMxNDI0LDMxNDI1LDMxNDI2LDMxNDI3LDMxNDI4LDMxNDI5LDMxNDMwLDMxNDMxLDMxNDMyLDMxNDMzLDMxNDM0LDMxNDM2LDMxNDM3''@;'; put 'put ''LDMxNDM4LDMxNDM5LDMxNDQwLDMxNDQxLDMxNDQyLDMxNDQzLDMxNDQ0LDMxNDQ1LDMxNDQ3LDMxNDQ4LDMxNDUwLDMxNDUxLDMxNDUyLDMxNDUzLDMxNDU3LDMxNDU4LDMxNDYwLDMxNDYzLDMxNDY0LDMxNDY1LDMxNDY2LDMxNDY3LDMxNDY4LDMxNDcwLDMxNDcyLDMxNDczLDMxNDc0LDMx''@;'; put 'put ''NDc1LDMxNDc2LDMxNDc3LDMxNDc4LDMxNDc5LDMxNDgwLDMxNDgzLDMxNDg0LDMxNDg2LDMxNDg4LDMxNDg5LDMxNDkwLDMxNDkzLDMxNDk1LDMxNDk3LDMxNTAwLDMxNTAxLDMxNTAyLDMxNTA0LDMxNTA2LDMxNTA3LDMxNTEwLDMxNTExLDMxNTEyLDMxNTE0LDMxNTE2LDMxNTE3LDMxNTE5''@;'; put 'put ''LDMxNTIxLDMxNTIyLDMxNTIzLDMxNTI3LDMxNTI5LDMxNTMzLDI4MDE0LDI4MDc0LDMxMTE5LDM0OTkzLDI0MzQzLDI5OTk1LDI1MjQyLDM2NzQxLDIwNDYzLDM3MzQwLDI2MDIzLDMzMDcxLDMzMTA1LDI0MjIwLDMzMTA0LDM2MjEyLDIxMTAzLDM1MjA2LDM2MTcxLDIyNzk3LDIwNjEzLDIw''@;'; put 'put ''MTg0LDM4NDI4LDI5MjM4LDMzMTQ1LDM2MTI3LDIzNTAwLDM1NzQ3LDM4NDY4LDIyOTE5LDMyNTM4LDIxNjQ4LDIyMTM0LDIyMDMwLDM1ODEzLDI1OTEzLDI3MDEwLDM4MDQxLDMwNDIyLDI4Mjk3LDI0MTc4LDI5OTc2LDI2NDM4LDI2NTc3LDMxNDg3LDMyOTI1LDM2MjE0LDI0ODYzLDMxMTc0''@;'; put 'put ''LDI1OTU0LDM2MTk1LDIwODcyLDIxMDE4LDM4MDUwLDMyNTY4LDMyOTIzLDMyNDM0LDIzNzAzLDI4MjA3LDI2NDY0LDMxNzA1LDMwMzQ3LDM5NjQwLDMzMTY3LDMyNjYwLDMxOTU3LDI1NjMwLDM4MjI0LDMxMjk1LDIxNTc4LDIxNzMzLDI3NDY4LDI1NjAxLDI1MDk2LDQwNTA5LDMzMDExLDMw''@;'; put 'put ''MTA1LDIxMTA2LDM4NzYxLDMzODgzLDI2Njg0LDM0NTMyLDM4NDAxLDM4NTQ4LDM4MTI0LDIwMDEwLDIxNTA4LDMyNDczLDI2NjgxLDM2MzE5LDMyNzg5LDI2MzU2LDI0MjE4LDMyNjk3LDMxNTM1LDMxNTM2LDMxNTM4LDMxNTQwLDMxNTQxLDMxNTQyLDMxNTQzLDMxNTQ1LDMxNTQ3LDMxNTQ5''@;'; put 'put ''LDMxNTUxLDMxNTUyLDMxNTUzLDMxNTU0LDMxNTU1LDMxNTU2LDMxNTU4LDMxNTYwLDMxNTYyLDMxNTY1LDMxNTY2LDMxNTcxLDMxNTczLDMxNTc1LDMxNTc3LDMxNTgwLDMxNTgyLDMxNTgzLDMxNTg1LDMxNTg3LDMxNTg4LDMxNTg5LDMxNTkwLDMxNTkxLDMxNTkyLDMxNTkzLDMxNTk0LDMx''@;'; put 'put ''NTk1LDMxNTk2LDMxNTk3LDMxNTk5LDMxNjAwLDMxNjAzLDMxNjA0LDMxNjA2LDMxNjA4LDMxNjEwLDMxNjEyLDMxNjEzLDMxNjE1LDMxNjE3LDMxNjE4LDMxNjE5LDMxNjIwLDMxNjIyLDMxNjIzLDMxNjI0LDMxNjI1LDMxNjI2LDMxNjI3LDMxNjI4LDMxNjMwLDMxNjMxLDMxNjMzLDMxNjM0''@;'; put 'put ''LDMxNjM1LDMxNjM4LDMxNjQwLDMxNjQxLDMxNjQyLDMxNjQzLDMxNjQ2LDMxNjQ3LDMxNjQ4LDMxNjUxLDMxNjUyLDMxNjUzLDMxNjYyLDMxNjYzLDMxNjY0LDMxNjY2LDMxNjY3LDMxNjY5LDMxNjcwLDMxNjcxLDMxNjczLDMxNjc0LDMxNjc1LDMxNjc2LDMxNjc3LDMxNjc4LDMxNjc5LDMx''@;'; put 'put ''NjgwLDMxNjgyLDMxNjgzLDMxNjg0LDIyNDY2LDMyODMxLDI2Nzc1LDI0MDM3LDI1OTE1LDIxMTUxLDI0Njg1LDQwODU4LDIwMzc5LDM2NTI0LDIwODQ0LDIzNDY3LDI0MzM5LDI0MDQxLDI3NzQyLDI1MzI5LDM2MTI5LDIwODQ5LDM4MDU3LDIxMjQ2LDI3ODA3LDMzNTAzLDI5Mzk5LDIyNDM0''@;'; put 'put ''LDI2NTAwLDM2MTQxLDIyODE1LDM2NzY0LDMzNzM1LDIxNjUzLDMxNjI5LDIwMjcyLDI3ODM3LDIzMzk2LDIyOTkzLDQwNzIzLDIxNDc2LDM0NTA2LDM5NTkyLDM1ODk1LDMyOTI5LDI1OTI1LDM5MDM4LDIyMjY2LDM4NTk5LDIxMDM4LDI5OTE2LDIxMDcyLDIzNTIxLDI1MzQ2LDM1MDc0LDIw''@;'; put 'put ''MDU0LDI1Mjk2LDI0NjE4LDI2ODc0LDIwODUxLDIzNDQ4LDIwODk2LDM1MjY2LDMxNjQ5LDM5MzAyLDMyNTkyLDI0ODE1LDI4NzQ4LDM2MTQzLDIwODA5LDI0MTkxLDM2ODkxLDI5ODA4LDM1MjY4LDIyMzE3LDMwNzg5LDI0NDAyLDQwODYzLDM4Mzk0LDM2NzEyLDM5NzQwLDM1ODA5LDMwMzI4''@;'; put 'put ''LDI2NjkwLDI2NTg4LDM2MzMwLDM2MTQ5LDIxMDUzLDM2NzQ2LDI4Mzc4LDI2ODI5LDM4MTQ5LDM3MTAxLDIyMjY5LDI2NTI0LDM1MDY1LDM2ODA3LDIxNzA0LDMxNjg1LDMxNjg4LDMxNjg5LDMxNjkwLDMxNjkxLDMxNjkzLDMxNjk0LDMxNjk1LDMxNjk2LDMxNjk4LDMxNzAwLDMxNzAxLDMx''@;'; put 'put ''NzAyLDMxNzAzLDMxNzA0LDMxNzA3LDMxNzA4LDMxNzEwLDMxNzExLDMxNzEyLDMxNzE0LDMxNzE1LDMxNzE2LDMxNzE5LDMxNzIwLDMxNzIxLDMxNzIzLDMxNzI0LDMxNzI1LDMxNzI3LDMxNzI4LDMxNzMwLDMxNzMxLDMxNzMyLDMxNzMzLDMxNzM0LDMxNzM2LDMxNzM3LDMxNzM4LDMxNzM5''@;'; put 'put ''LDMxNzQxLDMxNzQzLDMxNzQ0LDMxNzQ1LDMxNzQ2LDMxNzQ3LDMxNzQ4LDMxNzQ5LDMxNzUwLDMxNzUyLDMxNzUzLDMxNzU0LDMxNzU3LDMxNzU4LDMxNzYwLDMxNzYxLDMxNzYyLDMxNzYzLDMxNzY0LDMxNzY1LDMxNzY3LDMxNzY4LDMxNzY5LDMxNzcwLDMxNzcxLDMxNzcyLDMxNzczLDMx''@;'; put 'put ''Nzc0LDMxNzc2LDMxNzc3LDMxNzc4LDMxNzc5LDMxNzgwLDMxNzgxLDMxNzg0LDMxNzg1LDMxNzg3LDMxNzg4LDMxNzg5LDMxNzkwLDMxNzkxLDMxNzkyLDMxNzkzLDMxNzk0LDMxNzk1LDMxNzk2LDMxNzk3LDMxNzk4LDMxNzk5LDMxODAxLDMxODAyLDMxODAzLDMxODA0LDMxODA1LDMxODA2''@;'; put 'put ''LDMxODEwLDM5NjA4LDIzNDAxLDI4MDIzLDI3Njg2LDIwMTMzLDIzNDc1LDM5NTU5LDM3MjE5LDI1ZTMsMzcwMzksMzg4ODksMjE1NDcsMjgwODUsMjM1MDYsMjA5ODksMjE4OTgsMzI1OTcsMzI3NTIsMjU3ODgsMjU0MjEsMjYwOTcsMjUwMjIsMjQ3MTcsMjg5MzgsMjc3MzUsMjc3MjEsMjI4''@;'; put 'put ''MzEsMjY0NzcsMzMzMjIsMjI3NDEsMjIxNTgsMzU5NDYsMjc2MjcsMzcwODUsMjI5MDksMzI3OTEsMjE0OTUsMjgwMDksMjE2MjEsMjE5MTcsMzM2NTUsMzM3NDMsMjY2ODAsMzExNjYsMjE2NDQsMjAzMDksMjE1MTIsMzA0MTgsMzU5NzcsMzg0MDIsMjc4MjcsMjgwODgsMzYyMDMsMzUwODgs''@;'; put 'put ''NDA1NDgsMzYxNTQsMjIwNzksNDA2NTcsMzAxNjUsMjQ0NTYsMjk0MDgsMjQ2ODAsMjE3NTYsMjAxMzYsMjcxNzgsMzQ5MTMsMjQ2NTgsMzY3MjAsMjE3MDAsMjg4ODgsMzQ0MjUsNDA1MTEsMjc5NDYsMjM0MzksMjQzNDQsMzI0MTgsMjE4OTcsMjAzOTksMjk0OTIsMjE1NjQsMjE0MDIsMjA1''@;'; put 'put ''MDUsMjE1MTgsMjE2MjgsMjAwNDYsMjQ1NzMsMjk3ODYsMjI3NzQsMzM4OTksMzI5OTMsMzQ2NzYsMjkzOTIsMzE5NDYsMjgyNDYsMzE4MTEsMzE4MTIsMzE4MTMsMzE4MTQsMzE4MTUsMzE4MTYsMzE4MTcsMzE4MTgsMzE4MTksMzE4MjAsMzE4MjIsMzE4MjMsMzE4MjQsMzE4MjUsMzE4MjYs''@;'; put 'put ''MzE4MjcsMzE4MjgsMzE4MjksMzE4MzAsMzE4MzEsMzE4MzIsMzE4MzMsMzE4MzQsMzE4MzUsMzE4MzYsMzE4MzcsMzE4MzgsMzE4MzksMzE4NDAsMzE4NDEsMzE4NDIsMzE4NDMsMzE4NDQsMzE4NDUsMzE4NDYsMzE4NDcsMzE4NDgsMzE4NDksMzE4NTAsMzE4NTEsMzE4NTIsMzE4NTMsMzE4''@;'; put 'put ''NTQsMzE4NTUsMzE4NTYsMzE4NTcsMzE4NTgsMzE4NjEsMzE4NjIsMzE4NjMsMzE4NjQsMzE4NjUsMzE4NjYsMzE4NzAsMzE4NzEsMzE4NzIsMzE4NzMsMzE4NzQsMzE4NzUsMzE4NzYsMzE4NzcsMzE4NzgsMzE4NzksMzE4ODAsMzE4ODIsMzE4ODMsMzE4ODQsMzE4ODUsMzE4ODYsMzE4ODcs''@;'; put 'put ''MzE4ODgsMzE4OTEsMzE4OTIsMzE4OTQsMzE4OTcsMzE4OTgsMzE4OTksMzE5MDQsMzE5MDUsMzE5MDcsMzE5MTAsMzE5MTEsMzE5MTIsMzE5MTMsMzE5MTUsMzE5MTYsMzE5MTcsMzE5MTksMzE5MjAsMzE5MjQsMzE5MjUsMzE5MjYsMzE5MjcsMzE5MjgsMzE5MzAsMzE5MzEsMjQzNTksMzQz''@;'; put 'put ''ODIsMjE4MDQsMjUyNTIsMjAxMTQsMjc4MTgsMjUxNDMsMzM0NTcsMjE3MTksMjEzMjYsMjk1MDIsMjgzNjksMzAwMTEsMjEwMTAsMjEyNzAsMzU4MDUsMjcwODgsMjQ0NTgsMjQ1NzYsMjgxNDIsMjIzNTEsMjc0MjYsMjk2MTUsMjY3MDcsMzY4MjQsMzI1MzEsMjU0NDIsMjQ3MzksMjE3OTYs''@;'; put 'put ''MzAxODYsMzU5MzgsMjg5NDksMjgwNjcsMjM0NjIsMjQxODcsMzM2MTgsMjQ5MDgsNDA2NDQsMzA5NzAsMzQ2NDcsMzE3ODMsMzAzNDMsMjA5NzYsMjQ4MjIsMjkwMDQsMjYxNzksMjQxNDAsMjQ2NTMsMzU4NTQsMjg3ODQsMjUzODEsMzY3NDUsMjQ1MDksMjQ2NzQsMzQ1MTYsMjIyMzgsMjc1''@;'; put 'put ''ODUsMjQ3MjQsMjQ5MzUsMjEzMjEsMjQ4MDAsMjYyMTQsMzYxNTksMzEyMjksMjAyNTAsMjg5MDUsMjc3MTksMzU3NjMsMzU4MjYsMzI0NzIsMzM2MzYsMjYxMjcsMjMxMzAsMzk3NDYsMjc5ODUsMjgxNTEsMzU5MDUsMjc5NjMsMjAyNDksMjg3NzksMzM3MTksMjUxMTAsMjQ3ODUsMzg2Njks''@;'; put 'put ''MzYxMzUsMzEwOTYsMjA5ODcsMjIzMzQsMjI1MjIsMjY0MjYsMzAwNzIsMzEyOTMsMzEyMTUsMzE2MzcsMzE5MzUsMzE5MzYsMzE5MzgsMzE5MzksMzE5NDAsMzE5NDIsMzE5NDUsMzE5NDcsMzE5NTAsMzE5NTEsMzE5NTIsMzE5NTMsMzE5NTQsMzE5NTUsMzE5NTYsMzE5NjAsMzE5NjIsMzE5''@;'; put 'put ''NjMsMzE5NjUsMzE5NjYsMzE5NjksMzE5NzAsMzE5NzEsMzE5NzIsMzE5NzMsMzE5NzQsMzE5NzUsMzE5NzcsMzE5NzgsMzE5NzksMzE5ODAsMzE5ODEsMzE5ODIsMzE5ODQsMzE5ODUsMzE5ODYsMzE5ODcsMzE5ODgsMzE5ODksMzE5OTAsMzE5OTEsMzE5OTMsMzE5OTQsMzE5OTYsMzE5OTcs''@;'; put 'put ''MzE5OTgsMzE5OTksMzJlMywzMjAwMSwzMjAwMiwzMjAwMywzMjAwNCwzMjAwNSwzMjAwNiwzMjAwNywzMjAwOCwzMjAwOSwzMjAxMSwzMjAxMiwzMjAxMywzMjAxNCwzMjAxNSwzMjAxNiwzMjAxNywzMjAxOCwzMjAxOSwzMjAyMCwzMjAyMSwzMjAyMiwzMjAyMywzMjAyNCwzMjAyNSwzMjAy''@;'; put 'put ''NiwzMjAyNywzMjAyOCwzMjAyOSwzMjAzMCwzMjAzMSwzMjAzMywzMjAzNSwzMjAzNiwzMjAzNywzMjAzOCwzMjA0MCwzMjA0MSwzMjA0MiwzMjA0NCwzMjA0NSwzMjA0NiwzMjA0OCwzMjA0OSwzMjA1MCwzMjA1MSwzMjA1MiwzMjA1MywzMjA1NCwzMjkwOCwzOTI2OSwzNjg1NywyODYwOCwz''@;'; put 'put ''NTc0OSw0MDQ4MSwyMzAyMCwzMjQ4OSwzMjUyMSwyMTUxMywyNjQ5NywyNjg0MCwzNjc1MywzMTgyMSwzODU5OCwyMTQ1MCwyNDYxMywzMDE0MiwyNzc2MiwyMTM2MywyMzI0MSwzMjQyMywyNTM4MCwyMDk2MCwzMzAzNCwyNDA0OSwzNDAxNSwyNTIxNiwyMDg2NCwyMzM5NSwyMDIzOCwzMTA4''@;'; put 'put ''NSwyMTA1OCwyNDc2MCwyNzk4MiwyMzQ5MiwyMzQ5MCwzNTc0NSwzNTc2MCwyNjA4MiwyNDUyNCwzODQ2OSwyMjkzMSwzMjQ4NywzMjQyNiwyMjAyNSwyNjU1MSwyMjg0MSwyMDMzOSwyMzQ3OCwyMTE1MiwzMzYyNiwzOTA1MCwzNjE1OCwzMDAwMiwzODA3OCwyMDU1MSwzMTI5MiwyMDIxNSwy''@;'; put 'put ''NjU1MCwzOTU1MCwyMzIzMywyNzUxNiwzMDQxNywyMjM2MiwyMzU3NCwzMTU0NiwzODM4OCwyOTAwNiwyMDg2MCwzMjkzNywzMzM5MiwyMjkwNCwzMjUxNiwzMzU3NSwyNjgxNiwyNjYwNCwzMDg5NywzMDgzOSwyNTMxNSwyNTQ0MSwzMTYxNiwyMDQ2MSwyMTA5OCwyMDk0MywzMzYxNiwyNzA5''@;'; put 'put ''OSwzNzQ5MiwzNjM0MSwzNjE0NSwzNTI2NSwzODE5MCwzMTY2MSwyMDIxNCwzMjA1NSwzMjA1NiwzMjA1NywzMjA1OCwzMjA1OSwzMjA2MCwzMjA2MSwzMjA2MiwzMjA2MywzMjA2NCwzMjA2NSwzMjA2NiwzMjA2NywzMjA2OCwzMjA2OSwzMjA3MCwzMjA3MSwzMjA3MiwzMjA3MywzMjA3NCwz''@;'; put 'put ''MjA3NSwzMjA3NiwzMjA3NywzMjA3OCwzMjA3OSwzMjA4MCwzMjA4MSwzMjA4MiwzMjA4MywzMjA4NCwzMjA4NSwzMjA4NiwzMjA4NywzMjA4OCwzMjA4OSwzMjA5MCwzMjA5MSwzMjA5MiwzMjA5MywzMjA5NCwzMjA5NSwzMjA5NiwzMjA5NywzMjA5OCwzMjA5OSwzMjEwMCwzMjEwMSwzMjEw''@;'; put 'put ''MiwzMjEwMywzMjEwNCwzMjEwNSwzMjEwNiwzMjEwNywzMjEwOCwzMjEwOSwzMjExMSwzMjExMiwzMjExMywzMjExNCwzMjExNSwzMjExNiwzMjExNywzMjExOCwzMjEyMCwzMjEyMSwzMjEyMiwzMjEyMywzMjEyNCwzMjEyNSwzMjEyNiwzMjEyNywzMjEyOCwzMjEyOSwzMjEzMCwzMjEzMSwz''@;'; put 'put ''MjEzMiwzMjEzMywzMjEzNCwzMjEzNSwzMjEzNiwzMjEzNywzMjEzOCwzMjEzOSwzMjE0MCwzMjE0MSwzMjE0MiwzMjE0MywzMjE0NCwzMjE0NSwzMjE0NiwzMjE0NywzMjE0OCwzMjE0OSwzMjE1MCwzMjE1MSwzMjE1MiwyMDU4MSwzMzMyOCwyMTA3MywzOTI3OSwyODE3NiwyODI5MywyODA3''@;'; put 'put ''MSwyNDMxNCwyMDcyNSwyMzAwNCwyMzU1OCwyNzk3NCwyNzc0MywzMDA4NiwzMzkzMSwyNjcyOCwyMjg3MCwzNTc2MiwyMTI4MCwzNzIzMywzODQ3NywzNDEyMSwyNjg5OCwzMDk3NywyODk2NiwzMzAxNCwyMDEzMiwzNzA2NiwyNzk3NSwzOTU1NiwyMzA0NywyMjIwNCwyNTYwNSwzODEyOCwz''@;'; put 'put ''MDY5OSwyMDM4OSwzMzA1MCwyOTQwOSwzNTI4MiwzOTI5MCwzMjU2NCwzMjQ3OCwyMTExOSwyNTk0NSwzNzIzNywzNjczNSwzNjczOSwyMTQ4MywzMTM4MiwyNTU4MSwyNTUwOSwzMDM0MiwzMTIyNCwzNDkwMywzODQ1NCwyNTEzMCwyMTE2MywzMzQxMCwyNjcwOCwyNjQ4MCwyNTQ2MywzMDU3''@;'; put 'put ''MSwzMTQ2OSwyNzkwNSwzMjQ2NywzNTI5OSwyMjk5MiwyNTEwNiwzNDI0OSwzMzQ0NSwzMDAyOCwyMDUxMSwyMDE3MSwzMDExNywzNTgxOSwyMzYyNiwyNDA2MiwzMTU2MywyNjAyMCwzNzMyOSwyMDE3MCwyNzk0MSwzNTE2NywzMjAzOSwzODE4MiwyMDE2NSwzNTg4MCwzNjgyNywzODc3MSwy''@;'; put 'put ''NjE4NywzMTEwNSwzNjgxNywyODkwOCwyODAyNCwzMjE1MywzMjE1NCwzMjE1NSwzMjE1NiwzMjE1NywzMjE1OCwzMjE1OSwzMjE2MCwzMjE2MSwzMjE2MiwzMjE2MywzMjE2NCwzMjE2NSwzMjE2NywzMjE2OCwzMjE2OSwzMjE3MCwzMjE3MSwzMjE3MiwzMjE3MywzMjE3NSwzMjE3NiwzMjE3''@;'; put 'put ''NywzMjE3OCwzMjE3OSwzMjE4MCwzMjE4MSwzMjE4MiwzMjE4MywzMjE4NCwzMjE4NSwzMjE4NiwzMjE4NywzMjE4OCwzMjE4OSwzMjE5MCwzMjE5MSwzMjE5MiwzMjE5MywzMjE5NCwzMjE5NSwzMjE5NiwzMjE5NywzMjE5OCwzMjE5OSwzMjIwMCwzMjIwMSwzMjIwMiwzMjIwMywzMjIwNCwz''@;'; put 'put ''MjIwNSwzMjIwNiwzMjIwNywzMjIwOCwzMjIwOSwzMjIxMCwzMjIxMSwzMjIxMiwzMjIxMywzMjIxNCwzMjIxNSwzMjIxNiwzMjIxNywzMjIxOCwzMjIxOSwzMjIyMCwzMjIyMSwzMjIyMiwzMjIyMywzMjIyNCwzMjIyNSwzMjIyNiwzMjIyNywzMjIyOCwzMjIyOSwzMjIzMCwzMjIzMSwzMjIz''@;'; put 'put ''MiwzMjIzMywzMjIzNCwzMjIzNSwzMjIzNiwzMjIzNywzMjIzOCwzMjIzOSwzMjI0MCwzMjI0MSwzMjI0MiwzMjI0MywzMjI0NCwzMjI0NSwzMjI0NiwzMjI0NywzMjI0OCwzMjI0OSwzMjI1MCwyMzYxMywyMTE3MCwzMzYwNiwyMDgzNCwzMzU1MCwzMDU1NSwyNjIzMCw0MDEyMCwyMDE0MCwy''@;'; put 'put ''NDc3OCwzMTkzNCwzMTkyMywzMjQ2MywyMDExNywzNTY4NiwyNjIyMywzOTA0OCwzODc0NSwyMjY1OSwyNTk2NCwzODIzNiwyNDQ1MiwzMDE1MywzODc0MiwzMTQ1NSwzMTQ1NCwyMDkyOCwyODg0NywzMTM4NCwyNTU3OCwzMTM1MCwzMjQxNiwyOTU5MCwzODg5MywyMDAzNywyODc5MiwyMDA2''@;'; put 'put ''MSwzNzIwMiwyMTQxNywyNTkzNywyNjA4NywzMzI3NiwzMzI4NSwyMTY0NiwyMzYwMSwzMDEwNiwzODgxNiwyNTMwNCwyOTQwMSwzMDE0MSwyMzYyMSwzOTU0NSwzMzczOCwyMzYxNiwyMTYzMiwzMDY5NywyMDAzMCwyNzgyMiwzMjg1OCwyNTI5OCwyNTQ1NCwyNDA0MCwyMDg1NSwzNjMxNywz''@;'; put 'put ''NjM4MiwzODE5MSwyMDQ2NSwyMTQ3NywyNDgwNywyODg0NCwyMTA5NSwyNTQyNCw0MDUxNSwyMzA3MSwyMDUxOCwzMDUxOSwyMTM2NywzMjQ4MiwyNTczMywyNTg5OSwyNTIyNSwyNTQ5NiwyMDUwMCwyOTIzNywzNTI3MywyMDkxNSwzNTc3NiwzMjQ3NywyMjM0MywzMzc0MCwzODA1NSwyMDg5''@;'; put 'put ''MSwyMTUzMSwyMzgwMywzMjI1MSwzMjI1MiwzMjI1MywzMjI1NCwzMjI1NSwzMjI1NiwzMjI1NywzMjI1OCwzMjI1OSwzMjI2MCwzMjI2MSwzMjI2MiwzMjI2MywzMjI2NCwzMjI2NSwzMjI2NiwzMjI2NywzMjI2OCwzMjI2OSwzMjI3MCwzMjI3MSwzMjI3MiwzMjI3MywzMjI3NCwzMjI3NSwz''@;'; put 'put ''MjI3NiwzMjI3NywzMjI3OCwzMjI3OSwzMjI4MCwzMjI4MSwzMjI4MiwzMjI4MywzMjI4NCwzMjI4NSwzMjI4NiwzMjI4NywzMjI4OCwzMjI4OSwzMjI5MCwzMjI5MSwzMjI5MiwzMjI5MywzMjI5NCwzMjI5NSwzMjI5NiwzMjI5NywzMjI5OCwzMjI5OSwzMjMwMCwzMjMwMSwzMjMwMiwzMjMw''@;'; put 'put ''MywzMjMwNCwzMjMwNSwzMjMwNiwzMjMwNywzMjMwOCwzMjMwOSwzMjMxMCwzMjMxMSwzMjMxMiwzMjMxMywzMjMxNCwzMjMxNiwzMjMxNywzMjMxOCwzMjMxOSwzMjMyMCwzMjMyMiwzMjMyMywzMjMyNCwzMjMyNSwzMjMyNiwzMjMyOCwzMjMyOSwzMjMzMCwzMjMzMSwzMjMzMiwzMjMzMywz''@;'; put 'put ''MjMzNCwzMjMzNSwzMjMzNiwzMjMzNywzMjMzOCwzMjMzOSwzMjM0MCwzMjM0MSwzMjM0MiwzMjM0MywzMjM0NCwzMjM0NSwzMjM0NiwzMjM0NywzMjM0OCwzMjM0OSwyMDQyNiwzMTQ1OSwyNzk5NCwzNzA4OSwzOTU2NywyMTg4OCwyMTY1NCwyMTM0NSwyMTY3OSwyNDMyMCwyNTU3NywyNjk5''@;'; put 'put ''OSwyMDk3NSwyNDkzNiwyMTAwMiwyMjU3MCwyMTIwOCwyMjM1MCwzMDczMywzMDQ3NSwyNDI0NywyNDk1MSwzMTk2OCwyNTE3OSwyNTIzOSwyMDEzMCwyODgyMSwzMjc3MSwyNTMzNSwyODkwMCwzODc1MiwyMjM5MSwzMzQ5OSwyNjYwNywyNjg2OSwzMDkzMywzOTA2MywzMTE4NSwyMjc3MSwy''@;'; put 'put ''MTY4MywyMTQ4NywyODIxMiwyMDgxMSwyMTA1MSwyMzQ1OCwzNTgzOCwzMjk0MywyMTgyNywyMjQzOCwyNDY5MSwyMjM1MywyMTU0OSwzMTM1NCwyNDY1NiwyMzM4MCwyNTUxMSwyNTI0OCwyMTQ3NSwyNTE4NywyMzQ5NSwyNjU0MywyMTc0MSwzMTM5MSwzMzUxMCwzNzIzOSwyNDIxMSwzNTA0''@;'; put 'put ''NCwyMjg0MCwyMjQ0NiwyNTM1OCwzNjMyOCwzMzAwNywyMjM1OSwzMTYwNywyMDM5MywyNDU1NSwyMzQ4NSwyNzQ1NCwyMTI4MSwzMTU2OCwyOTM3OCwyNjY5NCwzMDcxOSwzMDUxOCwyNjEwMywyMDkxNywyMDExMSwzMDQyMCwyMzc0MywzMTM5NywzMzkwOSwyMjg2MiwzOTc0NSwyMDYwOCwz''@;'; put 'put ''MjM1MCwzMjM1MSwzMjM1MiwzMjM1MywzMjM1NCwzMjM1NSwzMjM1NiwzMjM1NywzMjM1OCwzMjM1OSwzMjM2MCwzMjM2MSwzMjM2MiwzMjM2MywzMjM2NCwzMjM2NSwzMjM2NiwzMjM2NywzMjM2OCwzMjM2OSwzMjM3MCwzMjM3MSwzMjM3MiwzMjM3MywzMjM3NCwzMjM3NSwzMjM3NiwzMjM3''@;'; put 'put ''NywzMjM3OCwzMjM3OSwzMjM4MCwzMjM4MSwzMjM4MiwzMjM4MywzMjM4NCwzMjM4NSwzMjM4NywzMjM4OCwzMjM4OSwzMjM5MCwzMjM5MSwzMjM5MiwzMjM5MywzMjM5NCwzMjM5NSwzMjM5NiwzMjM5NywzMjM5OCwzMjM5OSwzMjQwMCwzMjQwMSwzMjQwMiwzMjQwMywzMjQwNCwzMjQwNSwz''@;'; put 'put ''MjQwNiwzMjQwNywzMjQwOCwzMjQwOSwzMjQxMCwzMjQxMiwzMjQxMywzMjQxNCwzMjQzMCwzMjQzNiwzMjQ0MywzMjQ0NCwzMjQ3MCwzMjQ4NCwzMjQ5MiwzMjUwNSwzMjUyMiwzMjUyOCwzMjU0MiwzMjU2NywzMjU2OSwzMjU3MSwzMjU3MiwzMjU3MywzMjU3NCwzMjU3NSwzMjU3NiwzMjU3''@;'; put 'put ''NywzMjU3OSwzMjU4MiwzMjU4MywzMjU4NCwzMjU4NSwzMjU4NiwzMjU4NywzMjU4OCwzMjU4OSwzMjU5MCwzMjU5MSwzMjU5NCwzMjU5NSwzOTMwNCwyNDg3MSwyODI5MSwyMjM3MiwyNjExOCwyNTQxNCwyMjI1NiwyNTMyNCwyNTE5MywyNDI3NSwzODQyMCwyMjQwMywyNTI4OSwyMTg5NSwz''@;'; put 'put ''NDU5MywzMzA5OCwzNjc3MSwyMTg2MiwzMzcxMywyNjQ2OSwzNjE4MiwzNDAxMywyMzE0NiwyNjYzOSwyNTMxOCwzMTcyNiwzODQxNywyMDg0OCwyODU3MiwzNTg4OCwyNTU5NywzNTI3MiwyNTA0MiwzMjUxOCwyODg2NiwyODM4OSwyOTcwMSwyNzAyOCwyOTQzNiwyNDI2NiwzNzA3MCwyNjM5''@;'; put 'put ''MSwyODAxMCwyNTQzOCwyMTE3MSwyOTI4MiwzMjc2OSwyMDMzMiwyMzAxMywzNzIyNiwyODg4OSwyODA2MSwyMTIwMiwyMDA0OCwzODY0NywzODI1MywzNDE3NCwzMDkyMiwzMjA0NywyMDc2OSwyMjQxOCwyNTc5NCwzMjkwNywzMTg2NywyNzg4MiwyNjg2NSwyNjk3NCwyMDkxOSwyMTQwMCwy''@;'; put 'put ''Njc5MiwyOTMxMyw0MDY1NCwzMTcyOSwyOTQzMiwzMTE2MywyODQzNSwyOTcwMiwyNjQ0NiwzNzMyNCw0MDEwMCwzMTAzNiwzMzY3MywzMzYyMCwyMTUxOSwyNjY0NywyMDAyOSwyMTM4NSwyMTE2OSwzMDc4MiwyMTM4MiwyMTAzMywyMDYxNiwyMDM2MywyMDQzMiwzMjU5OCwzMjYwMSwzMjYw''@;'; put 'put ''MywzMjYwNCwzMjYwNSwzMjYwNiwzMjYwOCwzMjYxMSwzMjYxMiwzMjYxMywzMjYxNCwzMjYxNSwzMjYxOSwzMjYyMCwzMjYyMSwzMjYyMywzMjYyNCwzMjYyNywzMjYyOSwzMjYzMCwzMjYzMSwzMjYzMiwzMjYzNCwzMjYzNSwzMjYzNiwzMjYzNywzMjYzOSwzMjY0MCwzMjY0MiwzMjY0Mywz''@;'; put 'put ''MjY0NCwzMjY0NSwzMjY0NiwzMjY0NywzMjY0OCwzMjY0OSwzMjY1MSwzMjY1MywzMjY1NSwzMjY1NiwzMjY1NywzMjY1OCwzMjY1OSwzMjY2MSwzMjY2MiwzMjY2MywzMjY2NCwzMjY2NSwzMjY2NywzMjY2OCwzMjY3MiwzMjY3NCwzMjY3NSwzMjY3NywzMjY3OCwzMjY4MCwzMjY4MSwzMjY4''@;'; put 'put ''MiwzMjY4MywzMjY4NCwzMjY4NSwzMjY4NiwzMjY4OSwzMjY5MSwzMjY5MiwzMjY5MywzMjY5NCwzMjY5NSwzMjY5OCwzMjY5OSwzMjcwMiwzMjcwNCwzMjcwNiwzMjcwNywzMjcwOCwzMjcxMCwzMjcxMSwzMjcxMiwzMjcxMywzMjcxNSwzMjcxNywzMjcxOSwzMjcyMCwzMjcyMSwzMjcyMiwz''@;'; put 'put ''MjcyMywzMjcyNiwzMjcyNywzMjcyOSwzMjczMCwzMjczMSwzMjczMiwzMjczMywzMjczNCwzMjczOCwzMjczOSwzMDE3OCwzMTQzNSwzMTg5MCwyNzgxMywzODU4MiwyMTE0NywyOTgyNywyMTczNywyMDQ1NywzMjg1MiwzMzcxNCwzNjgzMCwzODI1NiwyNDI2NSwyNDYwNCwyODA2MywyNDA4''@;'; put 'put ''OCwyNTk0NywzMzA4MCwzODE0MiwyNDY1MSwyODg2MCwzMjQ1MSwzMTkxOCwyMDkzNywyNjc1MywzMTkyMSwzMzM5MSwyMDAwNCwzNjc0MiwzNzMyNywyNjIzOCwyMDE0MiwzNTg0NSwyNTc2OSwzMjg0MiwyMDY5OCwzMDEwMywyOTEzNCwyMzUyNSwzNjc5NywyODUxOCwyMDEwMiwyNTczMCwz''@;'; put 'put ''ODI0MywyNDI3OCwyNjAwOSwyMTAxNSwzNTAxMCwyODg3MiwyMTE1NSwyOTQ1NCwyOTc0NywyNjUxOSwzMDk2NywzODY3OCwyMDAyMCwzNzA1MSw0MDE1OCwyODEwNywyMDk1NSwzNjE2MSwyMTUzMywyNTI5NCwyOTYxOCwzMzc3NywzODY0Niw0MDgzNiwzODA4MywyMDI3OCwzMjY2NiwyMDk0''@;'; put 'put ''MCwyODc4OSwzODUxNywyMzcyNSwzOTA0NiwyMTQ3OCwyMDE5NiwyODMxNiwyOTcwNSwyNzA2MCwzMDgyNywzOTMxMSwzMDA0MSwyMTAxNiwzMDI0NCwyNzk2OSwyNjYxMSwyMDg0NSw0MDg1NywzMjg0MywyMTY1NywzMTU0OCwzMTQyMywzMjc0MCwzMjc0MywzMjc0NCwzMjc0NiwzMjc0Nywz''@;'; put 'put ''Mjc0OCwzMjc0OSwzMjc1MSwzMjc1NCwzMjc1NiwzMjc1NywzMjc1OCwzMjc1OSwzMjc2MCwzMjc2MSwzMjc2MiwzMjc2NSwzMjc2NiwzMjc2NywzMjc3MCwzMjc3NSwzMjc3NiwzMjc3NywzMjc3OCwzMjc4MiwzMjc4MywzMjc4NSwzMjc4NywzMjc5NCwzMjc5NSwzMjc5NywzMjc5OCwzMjc5''@;'; put 'put ''OSwzMjgwMSwzMjgwMywzMjgwNCwzMjgxMSwzMjgxMiwzMjgxMywzMjgxNCwzMjgxNSwzMjgxNiwzMjgxOCwzMjgyMCwzMjgyNSwzMjgyNiwzMjgyOCwzMjgzMCwzMjgzMiwzMjgzMywzMjgzNiwzMjgzNywzMjgzOSwzMjg0MCwzMjg0MSwzMjg0NiwzMjg0NywzMjg0OCwzMjg0OSwzMjg1MSwz''@;'; put 'put ''Mjg1MywzMjg1NCwzMjg1NSwzMjg1NywzMjg1OSwzMjg2MCwzMjg2MSwzMjg2MiwzMjg2MywzMjg2NCwzMjg2NSwzMjg2NiwzMjg2NywzMjg2OCwzMjg2OSwzMjg3MCwzMjg3MSwzMjg3MiwzMjg3NSwzMjg3NiwzMjg3NywzMjg3OCwzMjg3OSwzMjg4MCwzMjg4MiwzMjg4MywzMjg4NCwzMjg4''@;'; put 'put ''NSwzMjg4NiwzMjg4NywzMjg4OCwzMjg4OSwzMjg5MCwzMjg5MSwzMjg5MiwzMjg5MywzODUzNCwyMjQwNCwyNTMxNCwzODQ3MSwyNzAwNCwyMzA0NCwyNTYwMiwzMTY5OSwyODQzMSwzODQ3NSwzMzQ0NiwyMTM0NiwzOTA0NSwyNDIwOCwyODgwOSwyNTUyMywyMTM0OCwzNDM4Myw0MDA2NSw0''@;'; put 'put ''MDU5NSwzMDg2MCwzODcwNiwzNjMzNSwzNjE2Miw0MDU3NSwyODUxMCwzMTEwOCwyNDQwNSwzODQ3MCwyNTEzNCwzOTU0MCwyMTUyNSwzODEwOSwyMDM4NywyNjA1MywyMzY1MywyMzY0OSwzMjUzMywzNDM4NSwyNzY5NSwyNDQ1OSwyOTU3NSwyODM4OCwzMjUxMSwyMzc4MiwyNTM3MSwyMzQw''@;'; put 'put ''MiwyODM5MCwyMTM2NSwyMDA4MSwyNTUwNCwzMDA1MywyNTI0OSwzNjcxOCwyMDI2MiwyMDE3NywyNzgxNCwzMjQzOCwzNTc3MCwzMzgyMSwzNDc0NiwzMjU5OSwzNjkyMywzODE3OSwzMTY1NywzOTU4NSwzNTA2NCwzMzg1MywyNzkzMSwzOTU1OCwzMjQ3NiwyMjkyMCw0MDYzNSwyOTU5NSwz''@;'; put 'put ''MDcyMSwzNDQzNCwzOTUzMiwzOTU1NCwyMjA0MywyMTUyNywyMjQ3NSwyMDA4MCw0MDYxNCwyMTMzNCwzNjgwOCwzMzAzMywzMDYxMCwzOTMxNCwzNDU0MiwyODM4NSwzNDA2NywyNjM2NCwyNDkzMCwyODQ1OSwzMjg5NCwzMjg5NywzMjg5OCwzMjkwMSwzMjkwNCwzMjkwNiwzMjkwOSwzMjkx''@;'; put 'put ''MCwzMjkxMSwzMjkxMiwzMjkxMywzMjkxNCwzMjkxNiwzMjkxNywzMjkxOSwzMjkyMSwzMjkyNiwzMjkzMSwzMjkzNCwzMjkzNSwzMjkzNiwzMjk0MCwzMjk0NCwzMjk0NywzMjk0OSwzMjk1MCwzMjk1MiwzMjk1MywzMjk1NSwzMjk2NSwzMjk2NywzMjk2OCwzMjk2OSwzMjk3MCwzMjk3MSwz''@;'; put 'put ''Mjk3NSwzMjk3NiwzMjk3NywzMjk3OCwzMjk3OSwzMjk4MCwzMjk4MSwzMjk4NCwzMjk5MSwzMjk5MiwzMjk5NCwzMjk5NSwzMjk5OCwzMzAwNiwzMzAxMywzMzAxNSwzMzAxNywzMzAxOSwzMzAyMiwzMzAyMywzMzAyNCwzMzAyNSwzMzAyNywzMzAyOCwzMzAyOSwzMzAzMSwzMzAzMiwzMzAz''@;'; put 'put ''NSwzMzAzNiwzMzA0NSwzMzA0NywzMzA0OSwzMzA1MSwzMzA1MiwzMzA1MywzMzA1NSwzMzA1NiwzMzA1NywzMzA1OCwzMzA1OSwzMzA2MCwzMzA2MSwzMzA2MiwzMzA2MywzMzA2NCwzMzA2NSwzMzA2NiwzMzA2NywzMzA2OSwzMzA3MCwzMzA3MiwzMzA3NSwzMzA3NiwzMzA3NywzMzA3OSwz''@;'; put 'put ''MzA4MSwzMzA4MiwzMzA4MywzMzA4NCwzMzA4NSwzMzA4NywzNTg4MSwzMzQyNiwzMzU3OSwzMDQ1MCwyNzY2NywyNDUzNywzMzcyNSwyOTQ4MywzMzU0MSwzODE3MCwyNzYxMSwzMDY4MywzODA4NiwyMTM1OSwzMzUzOCwyMDg4MiwyNDEyNSwzNTk4MCwzNjE1MiwyMDA0MCwyOTYxMSwyNjUy''@;'; put 'put ''MiwyNjc1NywzNzIzOCwzODY2NSwyOTAyOCwyNzgwOSwzMDQ3MywyMzE4NiwzODIwOSwyNzU5OSwzMjY1NCwyNjE1MSwyMzUwNCwyMjk2OSwyMzE5NCwzODM3NiwzODM5MSwyMDIwNCwzMzgwNCwzMzk0NSwyNzMwOCwzMDQzMSwzODE5MiwyOTQ2NywyNjc5MCwyMzM5MSwzMDUxMSwzNzI3NCwz''@;'; put 'put ''ODc1MywzMTk2NCwzNjg1NSwzNTg2OCwyNDM1NywzMTg1OSwzMTE5MiwzNTI2OSwyNzg1MiwzNDU4OCwyMzQ5NCwyNDEzMCwyNjgyNSwzMDQ5NiwzMjUwMSwyMDg4NSwyMDgxMywyMTE5MywyMzA4MSwzMjUxNywzODc1NCwzMzQ5NSwyNTU1MSwzMDU5NiwzNDI1NiwzMTE4NiwyODIxOCwyNDIx''@;'; put 'put ''NywyMjkzNywzNDA2NSwyODc4MSwyNzY2NSwyNTI3OSwzMDM5OSwyNTkzNSwyNDc1MSwzODM5NywyNjEyNiwzNDcxOSw0MDQ4MywzODEyNSwyMTUxNywyMTYyOSwzNTg4NCwyNTcyMCwzMzA4OCwzMzA4OSwzMzA5MCwzMzA5MSwzMzA5MiwzMzA5MywzMzA5NSwzMzA5NywzMzEwMSwzMzEwMiwz''@;'; put 'put ''MzEwMywzMzEwNiwzMzExMCwzMzExMSwzMzExMiwzMzExNSwzMzExNiwzMzExNywzMzExOCwzMzExOSwzMzEyMSwzMzEyMiwzMzEyMywzMzEyNCwzMzEyNiwzMzEyOCwzMzEzMCwzMzEzMSwzMzEzMiwzMzEzNSwzMzEzOCwzMzEzOSwzMzE0MSwzMzE0MiwzMzE0MywzMzE0NCwzMzE1MywzMzE1''@;'; put 'put ''NSwzMzE1NiwzMzE1NywzMzE1OCwzMzE1OSwzMzE2MSwzMzE2MywzMzE2NCwzMzE2NSwzMzE2NiwzMzE2OCwzMzE3MCwzMzE3MSwzMzE3MiwzMzE3MywzMzE3NCwzMzE3NSwzMzE3NywzMzE3OCwzMzE4MiwzMzE4MywzMzE4NCwzMzE4NSwzMzE4NiwzMzE4OCwzMzE4OSwzMzE5MSwzMzE5Mywz''@;'; put 'put ''MzE5NSwzMzE5NiwzMzE5NywzMzE5OCwzMzE5OSwzMzIwMCwzMzIwMSwzMzIwMiwzMzIwNCwzMzIwNSwzMzIwNiwzMzIwNywzMzIwOCwzMzIwOSwzMzIxMiwzMzIxMywzMzIxNCwzMzIxNSwzMzIyMCwzMzIyMSwzMzIyMywzMzIyNCwzMzIyNSwzMzIyNywzMzIyOSwzMzIzMCwzMzIzMSwzMzIz''@;'; put 'put ''MiwzMzIzMywzMzIzNCwzMzIzNSwyNTcyMSwzNDMyMSwyNzE2OSwzMzE4MCwzMDk1MiwyNTcwNSwzOTc2NCwyNTI3MywyNjQxMSwzMzcwNywyMjY5Niw0MDY2NCwyNzgxOSwyODQ0OCwyMzUxOCwzODQ3NiwzNTg1MSwyOTI3OSwyNjU3NiwyNTI4NywyOTI4MSwyMDEzNywyMjk4MiwyNzU5Nywy''@;'; put 'put ''MjY3NSwyNjI4NiwyNDE0OSwyMTIxNSwyNDkxNywyNjQwOCwzMDQ0NiwzMDU2NiwyOTI4NywzMTMwMiwyNTM0MywyMTczOCwyMTU4NCwzODA0OCwzNzAyNywyMzA2OCwzMjQzNSwyNzY3MCwyMDAzNSwyMjkwMiwzMjc4NCwyMjg1NiwyMTMzNSwzMDAwNywzODU5MCwyMjIxOCwyNTM3NiwzMzA0''@;'; put 'put ''MSwyNDcwMCwzODM5MywyODExOCwyMTYwMiwzOTI5NywyMDg2OSwyMzI3MywzMzAyMSwyMjk1OCwzODY3NSwyMDUyMiwyNzg3NywyMzYxMiwyNTMxMSwyMDMyMCwyMTMxMSwzMzE0NywzNjg3MCwyODM0NiwzNDA5MSwyNTI4OCwyNDE4MCwzMDkxMCwyNTc4MSwyNTQ2NywyNDU2NSwyMzA2NCwz''@;'; put 'put ''NzI0Nyw0MDQ3OSwyMzYxNSwyNTQyMywzMjgzNCwyMzQyMSwyMTg3MCwzODIxOCwzODIyMSwyODAzNywyNDc0NCwyNjU5MiwyOTQwNiwyMDk1NywyMzQyNSwzMzIzNiwzMzIzNywzMzIzOCwzMzIzOSwzMzI0MCwzMzI0MSwzMzI0MiwzMzI0MywzMzI0NCwzMzI0NSwzMzI0NiwzMzI0NywzMzI0''@;'; put 'put ''OCwzMzI0OSwzMzI1MCwzMzI1MiwzMzI1MywzMzI1NCwzMzI1NiwzMzI1NywzMzI1OSwzMzI2MiwzMzI2MywzMzI2NCwzMzI2NSwzMzI2NiwzMzI2OSwzMzI3MCwzMzI3MSwzMzI3MiwzMzI3MywzMzI3NCwzMzI3NywzMzI3OSwzMzI4MywzMzI4NywzMzI4OCwzMzI4OSwzMzI5MCwzMzI5MSwz''@;'; put 'put ''MzI5NCwzMzI5NSwzMzI5NywzMzI5OSwzMzMwMSwzMzMwMiwzMzMwMywzMzMwNCwzMzMwNSwzMzMwNiwzMzMwOSwzMzMxMiwzMzMxNiwzMzMxNywzMzMxOCwzMzMxOSwzMzMyMSwzMzMyNiwzMzMzMCwzMzMzOCwzMzM0MCwzMzM0MSwzMzM0MywzMzM0NCwzMzM0NSwzMzM0NiwzMzM0NywzMzM0''@;'; put 'put ''OSwzMzM1MCwzMzM1MiwzMzM1NCwzMzM1NiwzMzM1NywzMzM1OCwzMzM2MCwzMzM2MSwzMzM2MiwzMzM2MywzMzM2NCwzMzM2NSwzMzM2NiwzMzM2NywzMzM2OSwzMzM3MSwzMzM3MiwzMzM3MywzMzM3NCwzMzM3NiwzMzM3NywzMzM3OCwzMzM3OSwzMzM4MCwzMzM4MSwzMzM4MiwzMzM4Mywz''@;'; put 'put ''MzM4NSwyNTMxOSwyNzg3MCwyOTI3NSwyNTE5NywzODA2MiwzMjQ0NSwzMzA0MywyNzk4NywyMDg5MiwyNDMyNCwyMjkwMCwyMTE2MiwyNDU5NCwyMjg5OSwyNjI2MiwzNDM4NCwzMDExMSwyNTM4NiwyNTA2MiwzMTk4MywzNTgzNCwyMTczNCwyNzQzMSw0MDQ4NSwyNzU3MiwzNDI2MSwyMTU4''@;'; put 'put ''OSwyMDU5OCwyNzgxMiwyMTg2NiwzNjI3NiwyOTIyOCwyNDA4NSwyNDU5NywyOTc1MCwyNTI5MywyNTQ5MCwyOTI2MCwyNDQ3MiwyODIyNywyNzk2NiwyNTg1NiwyODUwNCwzMDQyNCwzMDkyOCwzMDQ2MCwzMDAzNiwyMTAyOCwyMTQ2NywyMDA1MSwyNDIyMiwyNjA0OSwzMjgxMCwzMjk4Miwy''@;'; put 'put ''NTI0MywyMTYzOCwyMTAzMiwyODg0NiwzNDk1NywzNjMwNSwyNzg3MywyMTYyNCwzMjk4NiwyMjUyMSwzNTA2MCwzNjE4MCwzODUwNiwzNzE5NywyMDMyOSwyNzgwMywyMTk0MywzMDQwNiwzMDc2OCwyNTI1NiwyODkyMSwyODU1OCwyNDQyOSwzNDAyOCwyNjg0MiwzMDg0NCwzMTczNSwzMzE5''@;'; put 'put ''MiwyNjM3OSw0MDUyNywyNTQ0NywzMDg5NiwyMjM4MywzMDczOCwzODcxMywyNTIwOSwyNTI1OSwyMTEyOCwyOTc0OSwyNzYwNywzMzM4NiwzMzM4NywzMzM4OCwzMzM4OSwzMzM5MywzMzM5NywzMzM5OCwzMzM5OSwzMzQwMCwzMzQwMywzMzQwNCwzMzQwOCwzMzQwOSwzMzQxMSwzMzQxMywz''@;'; put 'put ''MzQxNCwzMzQxNSwzMzQxNywzMzQyMCwzMzQyNCwzMzQyNywzMzQyOCwzMzQyOSwzMzQzMCwzMzQzNCwzMzQzNSwzMzQzOCwzMzQ0MCwzMzQ0MiwzMzQ0MywzMzQ0NywzMzQ1OCwzMzQ2MSwzMzQ2MiwzMzQ2NiwzMzQ2NywzMzQ2OCwzMzQ3MSwzMzQ3MiwzMzQ3NCwzMzQ3NSwzMzQ3NywzMzQ3''@;'; put 'put ''OCwzMzQ4MSwzMzQ4OCwzMzQ5NCwzMzQ5NywzMzQ5OCwzMzUwMSwzMzUwNiwzMzUxMSwzMzUxMiwzMzUxMywzMzUxNCwzMzUxNiwzMzUxNywzMzUxOCwzMzUyMCwzMzUyMiwzMzUyMywzMzUyNSwzMzUyNiwzMzUyOCwzMzUzMCwzMzUzMiwzMzUzMywzMzUzNCwzMzUzNSwzMzUzNiwzMzU0Niwz''@;'; put 'put ''MzU0NywzMzU0OSwzMzU1MiwzMzU1NCwzMzU1NSwzMzU1OCwzMzU2MCwzMzU2MSwzMzU2NSwzMzU2NiwzMzU2NywzMzU2OCwzMzU2OSwzMzU3MCwzMzU3MSwzMzU3MiwzMzU3MywzMzU3NCwzMzU3NywzMzU3OCwzMzU4MiwzMzU4NCwzMzU4NiwzMzU5MSwzMzU5NSwzMzU5NywyMTg2MCwzMzA4''@;'; put 'put ''NiwzMDEzMCwzMDM4MiwyMTMwNSwzMDE3NCwyMDczMSwyMzYxNywzNTY5MiwzMTY4NywyMDU1OSwyOTI1NSwzOTU3NSwzOTEyOCwyODQxOCwyOTkyMiwzMTA4MCwyNTczNSwzMDYyOSwyNTM0MCwzOTA1NywzNjEzOSwyMTY5NywzMjg1NiwyMDA1MCwyMjM3OCwzMzUyOSwzMzgwNSwyNDE3OSwy''@;'; put 'put ''MDk3MywyOTk0MiwzNTc4MCwyMzYzMSwyMjM2OSwyNzkwMCwzOTA0NywyMzExMCwzMDc3MiwzOTc0OCwzNjg0MywzMTg5MywyMTA3OCwyNTE2OSwzODEzOCwyMDE2NiwzMzY3MCwzMzg4OSwzMzc2OSwzMzk3MCwyMjQ4NCwyNjQyMCwyMjI3NSwyNjIyMiwyODAwNiwzNTg4OSwyNjMzMywyODY4''@;'; put 'put ''OSwyNjM5OSwyNzQ1MCwyNjY0NiwyNTExNCwyMjk3MSwxOTk3MSwyMDkzMiwyODQyMiwyNjU3OCwyNzc5MSwyMDg1NCwyNjgyNywyMjg1NSwyNzQ5NSwzMDA1NCwyMzgyMiwzMzA0MCw0MDc4NCwyNjA3MSwzMTA0OCwzMTA0MSwzOTU2OSwzNjIxNSwyMzY4MiwyMDA2MiwyMDIyNSwyMTU1MSwy''@;'; put 'put ''Mjg2NSwzMDczMiwyMjEyMCwyNzY2OCwzNjgwNCwyNDMyMywyNzc3MywyNzg3NSwzNTc1NSwyNTQ4OCwzMzU5OCwzMzU5OSwzMzYwMSwzMzYwMiwzMzYwNCwzMzYwNSwzMzYwOCwzMzYxMCwzMzYxMSwzMzYxMiwzMzYxMywzMzYxNCwzMzYxOSwzMzYyMSwzMzYyMiwzMzYyMywzMzYyNCwzMzYy''@;'; put 'put ''NSwzMzYyOSwzMzYzNCwzMzY0OCwzMzY0OSwzMzY1MCwzMzY1MSwzMzY1MiwzMzY1MywzMzY1NCwzMzY1NywzMzY1OCwzMzY2MiwzMzY2MywzMzY2NCwzMzY2NSwzMzY2NiwzMzY2NywzMzY2OCwzMzY3MSwzMzY3MiwzMzY3NCwzMzY3NSwzMzY3NiwzMzY3NywzMzY3OSwzMzY4MCwzMzY4MSwz''@;'; put 'put ''MzY4NCwzMzY4NSwzMzY4NiwzMzY4NywzMzY4OSwzMzY5MCwzMzY5MywzMzY5NSwzMzY5NywzMzY5OCwzMzY5OSwzMzcwMCwzMzcwMSwzMzcwMiwzMzcwMywzMzcwOCwzMzcwOSwzMzcxMCwzMzcxMSwzMzcxNywzMzcyMywzMzcyNiwzMzcyNywzMzczMCwzMzczMSwzMzczMiwzMzczNCwzMzcz''@;'; put 'put ''NiwzMzczNywzMzczOSwzMzc0MSwzMzc0MiwzMzc0NCwzMzc0NSwzMzc0NiwzMzc0NywzMzc0OSwzMzc1MSwzMzc1MywzMzc1NCwzMzc1NSwzMzc1OCwzMzc2MiwzMzc2MywzMzc2NCwzMzc2NiwzMzc2NywzMzc2OCwzMzc3MSwzMzc3MiwzMzc3MywyNDY4OCwyNzk2NSwyOTMwMSwyNTE5MCwz''@;'; put 'put ''ODAzMCwzODA4NSwyMTMxNSwzNjgwMSwzMTYxNCwyMDE5MSwzNTg3OCwyMDA5NCw0MDY2MCwzODA2NSwzODA2NywyMTA2OSwyODUwOCwzNjk2MywyNzk3MywzNTg5MiwyMjU0NSwyMzg4NCwyNzQyNCwyNzQ2NSwyNjUzOCwyMTU5NSwzMzEwOCwzMjY1MiwyMjY4MSwzNDEwMywyNDM3OCwyNTI1''@;'; put 'put ''MCwyNzIwNywzODIwMSwyNTk3MCwyNDcwOCwyNjcyNSwzMDYzMSwyMDA1MiwyMDM5MiwyNDAzOSwzODgwOCwyNTc3MiwzMjcyOCwyMzc4OSwyMDQzMSwzMTM3MywyMDk5OSwzMzU0MCwxOTk4OCwyNDYyMywzMTM2MywzODA1NCwyMDQwNSwyMDE0NiwzMTIwNiwyOTc0OCwyMTIyMCwzMzQ2NSwy''@;'; put 'put ''NTgxMCwzMTE2NSwyMzUxNywyNzc3NywzODczOCwzNjczMSwyNzY4MiwyMDU0MiwyMTM3NSwyODE2NSwyNTgwNiwyNjIyOCwyNzY5NiwyNDc3MywzOTAzMSwzNTgzMSwyNDE5OCwyOTc1NiwzMTM1MSwzMTE3OSwxOTk5MiwzNzA0MSwyOTY5OSwyNzcxNCwyMjIzNCwzNzE5NSwyNzg0NSwzNjIz''@;'; put 'put ''NSwyMTMwNiwzNDUwMiwyNjM1NCwzNjUyNywyMzYyNCwzOTUzNywyODE5MiwzMzc3NCwzMzc3NSwzMzc3OSwzMzc4MCwzMzc4MSwzMzc4MiwzMzc4MywzMzc4NiwzMzc4NywzMzc4OCwzMzc5MCwzMzc5MSwzMzc5MiwzMzc5NCwzMzc5NywzMzc5OSwzMzgwMCwzMzgwMSwzMzgwMiwzMzgwOCwz''@;'; put 'put ''MzgxMCwzMzgxMSwzMzgxMiwzMzgxMywzMzgxNCwzMzgxNSwzMzgxNywzMzgxOCwzMzgxOSwzMzgyMiwzMzgyMywzMzgyNCwzMzgyNSwzMzgyNiwzMzgyNywzMzgzMywzMzgzNCwzMzgzNSwzMzgzNiwzMzgzNywzMzgzOCwzMzgzOSwzMzg0MCwzMzg0MiwzMzg0MywzMzg0NCwzMzg0NSwzMzg0''@;'; put 'put ''NiwzMzg0NywzMzg0OSwzMzg1MCwzMzg1MSwzMzg1NCwzMzg1NSwzMzg1NiwzMzg1NywzMzg1OCwzMzg1OSwzMzg2MCwzMzg2MSwzMzg2MywzMzg2NCwzMzg2NSwzMzg2NiwzMzg2NywzMzg2OCwzMzg2OSwzMzg3MCwzMzg3MSwzMzg3MiwzMzg3NCwzMzg3NSwzMzg3NiwzMzg3NywzMzg3OCwz''@;'; put 'put ''Mzg4MCwzMzg4NSwzMzg4NiwzMzg4NywzMzg4OCwzMzg5MCwzMzg5MiwzMzg5MywzMzg5NCwzMzg5NSwzMzg5NiwzMzg5OCwzMzkwMiwzMzkwMywzMzkwNCwzMzkwNiwzMzkwOCwzMzkxMSwzMzkxMywzMzkxNSwzMzkxNiwyMTQ2MiwyMzA5NCw0MDg0MywzNjI1OSwyMTQzNSwyMjI4MCwzOTA3''@;'; put 'put ''OSwyNjQzNSwzNzI3NSwyNzg0OSwyMDg0MCwzMDE1NCwyNTMzMSwyOTM1NiwyMTA0OCwyMTE0OSwzMjU3MCwyODgyMCwzMDI2NCwyMTM2NCw0MDUyMiwyNzA2MywzMDgzMCwzODU5MiwzNTAzMywzMjY3NiwyODk4MiwyOTEyMywyMDg3MywyNjU3OSwyOTkyNCwyMjc1NiwyNTg4MCwyMjE5OSwz''@;'; put 'put ''NTc1MywzOTI4NiwyNTIwMCwzMjQ2OSwyNDgyNSwyODkwOSwyMjc2NCwyMDE2MSwyMDE1NCwyNDUyNSwzODg4NywyMDIxOSwzNTc0OCwyMDk5NSwyMjkyMiwzMjQyNywyNTE3MiwyMDE3MywyNjA4NSwyNTEwMiwzMzU5MiwzMzk5MywzMzYzNSwzNDcwMSwyOTA3NiwyODM0MiwyMzQ4MSwzMjQ2''@;'; put 'put ''NiwyMDg4NywyNTU0NSwyNjU4MCwzMjkwNSwzMzU5MywzNDgzNywyMDc1NCwyMzQxOCwyMjkxNCwzNjc4NSwyMDA4MywyNzc0MSwyMDgzNywzNTEwOSwzNjcxOSwzODQ0NiwzNDEyMiwyOTc5MCwzODE2MCwzODM4NCwyODA3MCwzMzUwOSwyNDM2OSwyNTc0NiwyNzkyMiwzMzgzMiwzMzEzNCw0''@;'; put 'put ''MDEzMSwyMjYyMiwzNjE4NywxOTk3NywyMTQ0MSwzMzkxNywzMzkxOCwzMzkxOSwzMzkyMCwzMzkyMSwzMzkyMywzMzkyNCwzMzkyNSwzMzkyNiwzMzkzMCwzMzkzMywzMzkzNSwzMzkzNiwzMzkzNywzMzkzOCwzMzkzOSwzMzk0MCwzMzk0MSwzMzk0MiwzMzk0NCwzMzk0NiwzMzk0NywzMzk0''@;'; put 'put ''OSwzMzk1MCwzMzk1MSwzMzk1MiwzMzk1NCwzMzk1NSwzMzk1NiwzMzk1NywzMzk1OCwzMzk1OSwzMzk2MCwzMzk2MSwzMzk2MiwzMzk2MywzMzk2NCwzMzk2NSwzMzk2NiwzMzk2OCwzMzk2OSwzMzk3MSwzMzk3MywzMzk3NCwzMzk3NSwzMzk3OSwzMzk4MCwzMzk4MiwzMzk4NCwzMzk4Niwz''@;'; put 'put ''Mzk4NywzMzk4OSwzMzk5MCwzMzk5MSwzMzk5MiwzMzk5NSwzMzk5NiwzMzk5OCwzMzk5OSwzNDAwMiwzNDAwNCwzNDAwNSwzNDAwNywzNDAwOCwzNDAwOSwzNDAxMCwzNDAxMSwzNDAxMiwzNDAxNCwzNDAxNywzNDAxOCwzNDAyMCwzNDAyMywzNDAyNCwzNDAyNSwzNDAyNiwzNDAyNywzNDAy''@;'; put 'put ''OSwzNDAzMCwzNDAzMSwzNDAzMywzNDAzNCwzNDAzNSwzNDAzNiwzNDAzNywzNDAzOCwzNDAzOSwzNDA0MCwzNDA0MSwzNDA0MiwzNDA0MywzNDA0NSwzNDA0NiwzNDA0OCwzNDA0OSwzNDA1MCwyMDI1NCwyNTk1NSwyNjcwNSwyMTk3MSwyMDAwNywyNTYyMCwzOTU3OCwyNTE5NSwyMzIzNCwy''@;'; put 'put ''OTc5MSwzMzM5NCwyODA3MywyNjg2MiwyMDcxMSwzMzY3OCwzMDcyMiwyNjQzMiwyMTA0OSwyNzgwMSwzMjQzMywyMDY2NywyMTg2MSwyOTAyMiwzMTU3OSwyNjE5NCwyOTY0MiwzMzUxNSwyNjQ0MSwyMzY2NSwyMTAyNCwyOTA1MywzNDkyMywzODM3OCwzODQ4NSwyNTc5NywzNjE5MywzMzIw''@;'; put 'put ''MywyMTg5MiwyNzczMywyNTE1OSwzMjU1OCwyMjY3NCwyMDI2MCwyMTgzMCwzNjE3NSwyNjE4OCwxOTk3OCwyMzU3OCwzNTA1OSwyNjc4NiwyNTQyMiwzMTI0NSwyODkwMywzMzQyMSwyMTI0MiwzODkwMiwyMzU2OSwyMTczNiwzNzA0NSwzMjQ2MSwyMjg4MiwzNjE3MCwzNDUwMywzMzI5Miwz''@;'; put 'put ''MzI5MywzNjE5OCwyNTY2OCwyMzU1NiwyNDkxMywyODA0MSwzMTAzOCwzNTc3NCwzMDc3NSwzMDAwMywyMTYyNywyMDI4MCwzNjUyMywyODE0NSwyMzA3MiwzMjQ1MywzMTA3MCwyNzc4NCwyMzQ1NywyMzE1OCwyOTk3OCwzMjk1OCwyNDkxMCwyODE4MywyMjc2OCwyOTk4MywyOTk4OSwyOTI5''@;'; put 'put ''OCwyMTMxOSwzMjQ5OSwzNDA1MSwzNDA1MiwzNDA1MywzNDA1NCwzNDA1NSwzNDA1NiwzNDA1NywzNDA1OCwzNDA1OSwzNDA2MSwzNDA2MiwzNDA2MywzNDA2NCwzNDA2NiwzNDA2OCwzNDA2OSwzNDA3MCwzNDA3MiwzNDA3MywzNDA3NSwzNDA3NiwzNDA3NywzNDA3OCwzNDA4MCwzNDA4Miwz''@;'; put 'put ''NDA4MywzNDA4NCwzNDA4NSwzNDA4NiwzNDA4NywzNDA4OCwzNDA4OSwzNDA5MCwzNDA5MywzNDA5NCwzNDA5NSwzNDA5NiwzNDA5NywzNDA5OCwzNDA5OSwzNDEwMCwzNDEwMSwzNDEwMiwzNDExMCwzNDExMSwzNDExMiwzNDExMywzNDExNCwzNDExNiwzNDExNywzNDExOCwzNDExOSwzNDEy''@;'; put 'put ''MywzNDEyNCwzNDEyNSwzNDEyNiwzNDEyNywzNDEyOCwzNDEyOSwzNDEzMCwzNDEzMSwzNDEzMiwzNDEzMywzNDEzNSwzNDEzNiwzNDEzOCwzNDEzOSwzNDE0MCwzNDE0MSwzNDE0MywzNDE0NCwzNDE0NSwzNDE0NiwzNDE0NywzNDE0OSwzNDE1MCwzNDE1MSwzNDE1MywzNDE1NCwzNDE1NSwz''@;'; put 'put ''NDE1NiwzNDE1NywzNDE1OCwzNDE1OSwzNDE2MCwzNDE2MSwzNDE2MywzNDE2NSwzNDE2NiwzNDE2NywzNDE2OCwzNDE3MiwzNDE3MywzNDE3NSwzNDE3NiwzNDE3NywzMDQ2NSwzMDQyNywyMTA5NywzMjk4OCwyMjMwNywyNDA3MiwyMjgzMywyOTQyMiwyNjA0NSwyODI4NywzNTc5OSwyMzYw''@;'; put 'put ''OCwzNDQxNywyMTMxMywzMDcwNywyNTM0MiwyNjEwMiwyMDE2MCwzOTEzNSwzNDQzMiwyMzQ1NCwzNTc4MiwyMTQ5MCwzMDY5MCwyMDM1MSwyMzYzMCwzOTU0MiwyMjk4NywyNDMzNSwzMTAzNCwyMjc2MywxOTk5MCwyNjYyMywyMDEwNywyNTMyNSwzNTQ3NSwzNjg5MywyMTE4MywyNjE1OSwy''@;'; put 'put ''MTk4MCwyMjEyNCwzNjg2NiwyMDE4MSwyMDM2NSwzNzMyMiwzOTI4MCwyNzY2MywyNDA2NiwyNDY0MywyMzQ2MCwzNTI3MCwzNTc5NywyNTkxMCwyNTE2MywzOTMxOCwyMzQzMiwyMzU1MSwyNTQ4MCwyMTgwNiwyMTQ2MywzMDI0NiwyMDg2MSwzNDA5MiwyNjUzMCwyNjgwMywyNzUzMCwyNTIz''@;'; put 'put ''NCwzNjc1NSwyMTQ2MCwzMzI5OCwyODExMywzMDA5NSwyMDA3MCwzNjE3NCwyMzQwOCwyOTA4NywzNDIyMywyNjI1NywyNjMyOSwzMjYyNiwzNDU2MCw0MDY1Myw0MDczNiwyMzY0NiwyNjQxNSwzNjg0OCwyNjY0MSwyNjQ2MywyNTEwMSwzMTQ0NiwyMjY2MSwyNDI0NiwyNTk2OCwyODQ2NSwz''@;'; put 'put ''NDE3OCwzNDE3OSwzNDE4MiwzNDE4NCwzNDE4NSwzNDE4NiwzNDE4NywzNDE4OCwzNDE4OSwzNDE5MCwzNDE5MiwzNDE5MywzNDE5NCwzNDE5NSwzNDE5NiwzNDE5NywzNDE5OCwzNDE5OSwzNDIwMCwzNDIwMSwzNDIwMiwzNDIwNSwzNDIwNiwzNDIwNywzNDIwOCwzNDIwOSwzNDIxMCwzNDIx''@;'; put 'put ''MSwzNDIxMywzNDIxNCwzNDIxNSwzNDIxNywzNDIxOSwzNDIyMCwzNDIyMSwzNDIyNSwzNDIyNiwzNDIyNywzNDIyOCwzNDIyOSwzNDIzMCwzNDIzMiwzNDIzNCwzNDIzNSwzNDIzNiwzNDIzNywzNDIzOCwzNDIzOSwzNDI0MCwzNDI0MiwzNDI0MywzNDI0NCwzNDI0NSwzNDI0NiwzNDI0Nywz''@;'; put 'put ''NDI0OCwzNDI1MCwzNDI1MSwzNDI1MiwzNDI1MywzNDI1NCwzNDI1NywzNDI1OCwzNDI2MCwzNDI2MiwzNDI2MywzNDI2NCwzNDI2NSwzNDI2NiwzNDI2NywzNDI2OSwzNDI3MCwzNDI3MSwzNDI3MiwzNDI3MywzNDI3NCwzNDI3NSwzNDI3NywzNDI3OCwzNDI3OSwzNDI4MCwzNDI4MiwzNDI4''@;'; put 'put ''MywzNDI4NCwzNDI4NSwzNDI4NiwzNDI4NywzNDI4OCwzNDI4OSwzNDI5MCwzNDI5MSwzNDI5MiwzNDI5MywzNDI5NCwzNDI5NSwzNDI5NiwyNDY2MSwyMTA0NywzMjc4MSwyNTY4NCwzNDkyOCwyOTk5MywyNDA2OSwyNjY0MywyNTMzMiwzODY4NCwyMTQ1MiwyOTI0NSwzNTg0MSwyNzcwMCwz''@;'; put 'put ''MDU2MSwzMTI0NiwyMTU1MCwzMDYzNiwzOTAzNCwzMzMwOCwzNTgyOCwzMDgwNSwyNjM4OCwyODg2NSwyNjAzMSwyNTc0OSwyMjA3MCwyNDYwNSwzMTE2OSwyMTQ5NiwxOTk5NywyNzUxNSwzMjkwMiwyMzU0NiwyMTk4NywyMjIzNSwyMDI4MiwyMDI4NCwzOTI4MiwyNDA1MSwyNjQ5NCwzMjgy''@;'; put 'put ''NCwyNDU3OCwzOTA0MiwzNjg2NSwyMzQzNSwzNTc3MiwzNTgyOSwyNTYyOCwzMzM2OCwyNTgyMiwyMjAxMywzMzQ4NywzNzIyMSwyMDQzOSwzMjAzMiwzNjg5NSwzMTkwMywyMDcyMywyMjYwOSwyODMzNSwyMzQ4NywzNTc4NSwzMjg5OSwzNzI0MCwzMzk0OCwzMTYzOSwzNDQyOSwzODUzOSwz''@;'; put 'put ''ODU0MywzMjQ4NSwzOTYzNSwzMDg2MiwyMzY4MSwzMTMxOSwzNjkzMCwzODU2NywzMTA3MSwyMzM4NSwyNTQzOSwzMTQ5OSwzNDAwMSwyNjc5NywyMTc2NiwzMjU1MywyOTcxMiwzMjAzNCwzODE0NSwyNTE1MiwyMjYwNCwyMDE4MiwyMzQyNywyMjkwNSwyMjYxMiwzNDI5NywzNDI5OCwzNDMw''@;'; put 'put ''MCwzNDMwMSwzNDMwMiwzNDMwNCwzNDMwNSwzNDMwNiwzNDMwNywzNDMwOCwzNDMxMCwzNDMxMSwzNDMxMiwzNDMxMywzNDMxNCwzNDMxNSwzNDMxNiwzNDMxNywzNDMxOCwzNDMxOSwzNDMyMCwzNDMyMiwzNDMyMywzNDMyNCwzNDMyNSwzNDMyNywzNDMyOCwzNDMyOSwzNDMzMCwzNDMzMSwz''@;'; put 'put ''NDMzMiwzNDMzMywzNDMzNCwzNDMzNSwzNDMzNiwzNDMzNywzNDMzOCwzNDMzOSwzNDM0MCwzNDM0MSwzNDM0MiwzNDM0NCwzNDM0NiwzNDM0NywzNDM0OCwzNDM0OSwzNDM1MCwzNDM1MSwzNDM1MiwzNDM1MywzNDM1NCwzNDM1NSwzNDM1NiwzNDM1NywzNDM1OCwzNDM1OSwzNDM2MSwzNDM2''@;'; put 'put ''MiwzNDM2MywzNDM2NSwzNDM2NiwzNDM2NywzNDM2OCwzNDM2OSwzNDM3MCwzNDM3MSwzNDM3MiwzNDM3MywzNDM3NCwzNDM3NSwzNDM3NiwzNDM3NywzNDM3OCwzNDM3OSwzNDM4MCwzNDM4NiwzNDM4NywzNDM4OSwzNDM5MCwzNDM5MSwzNDM5MiwzNDM5MywzNDM5NSwzNDM5NiwzNDM5Nywz''@;'; put 'put ''NDM5OSwzNDQwMCwzNDQwMSwzNDQwMywzNDQwNCwzNDQwNSwzNDQwNiwzNDQwNywzNDQwOCwzNDQwOSwzNDQxMCwyOTU0OSwyNTM3NCwzNjQyNywzNjM2NywzMjk3NCwzMzQ5MiwyNTI2MCwyMTQ4OCwyNzg4OCwzNzIxNCwyMjgyNiwyNDU3NywyNzc2MCwyMjM0OSwyNTY3NCwzNjEzOCwzMDI1''@;'; put 'put ''MSwyODM5MywyMjM2MywyNzI2NCwzMDE5MiwyODUyNSwzNTg4NSwzNTg0OCwyMjM3NCwyNzYzMSwzNDk2MiwzMDg5OSwyNTUwNiwyMTQ5NywyODg0NSwyNzc0OCwyMjYxNiwyNTY0MiwyMjUzMCwyNjg0OCwzMzE3OSwyMTc3NiwzMTk1OCwyMDUwNCwzNjUzOCwyODEwOCwzNjI1NSwyODkwNywy''@;'; put 'put ''NTQ4NywyODA1OSwyODM3MiwzMjQ4NiwzMzc5NiwyNjY5MSwzNjg2NywyODEyMCwzODUxOCwzNTc1MiwyMjg3MSwyOTMwNSwzNDI3NiwzMzE1MCwzMDE0MCwzNTQ2NiwyNjc5OSwyMTA3NiwzNjM4NiwzODE2MSwyNTU1MiwzOTA2NCwzNjQyMCwyMTg4NCwyMDMwNywyNjM2NywyMjE1OSwyNDc4''@;'; put 'put ''OSwyODA1MywyMTA1OSwyMzYyNSwyMjgyNSwyODE1NSwyMjYzNSwzZTQsMjk5ODAsMjQ2ODQsMzMzMDAsMzMwOTQsMjUzNjEsMjY0NjUsMzY4MzQsMzA1MjIsMzYzMzksMzYxNDgsMzgwODEsMjQwODYsMjEzODEsMjE1NDgsMjg4NjcsMzQ0MTMsMzQ0MTUsMzQ0MTYsMzQ0MTgsMzQ0MTksMzQ0''@;'; put 'put ''MjAsMzQ0MjEsMzQ0MjIsMzQ0MjMsMzQ0MjQsMzQ0MzUsMzQ0MzYsMzQ0MzcsMzQ0MzgsMzQ0MzksMzQ0NDAsMzQ0NDEsMzQ0NDYsMzQ0NDcsMzQ0NDgsMzQ0NDksMzQ0NTAsMzQ0NTIsMzQ0NTQsMzQ0NTUsMzQ0NTYsMzQ0NTcsMzQ0NTgsMzQ0NTksMzQ0NjIsMzQ0NjMsMzQ0NjQsMzQ0NjUs''@;'; put 'put ''MzQ0NjYsMzQ0NjksMzQ0NzAsMzQ0NzUsMzQ0NzcsMzQ0NzgsMzQ0ODIsMzQ0ODMsMzQ0ODcsMzQ0ODgsMzQ0ODksMzQ0OTEsMzQ0OTIsMzQ0OTMsMzQ0OTQsMzQ0OTUsMzQ0OTcsMzQ0OTgsMzQ0OTksMzQ1MDEsMzQ1MDQsMzQ1MDgsMzQ1MDksMzQ1MTQsMzQ1MTUsMzQ1MTcsMzQ1MTgsMzQ1''@;'; put 'put ''MTksMzQ1MjIsMzQ1MjQsMzQ1MjUsMzQ1MjgsMzQ1MjksMzQ1MzAsMzQ1MzEsMzQ1MzMsMzQ1MzQsMzQ1MzUsMzQ1MzYsMzQ1MzgsMzQ1MzksMzQ1NDAsMzQ1NDMsMzQ1NDksMzQ1NTAsMzQ1NTEsMzQ1NTQsMzQ1NTUsMzQ1NTYsMzQ1NTcsMzQ1NTksMzQ1NjEsMzQ1NjQsMzQ1NjUsMzQ1NjYs''@;'; put 'put ''MzQ1NzEsMzQ1NzIsMzQ1NzQsMzQ1NzUsMzQ1NzYsMzQ1NzcsMzQ1ODAsMzQ1ODIsMjc3MTIsMjQzMTEsMjA1NzIsMjAxNDEsMjQyMzcsMjU0MDIsMzMzNTEsMzY4OTAsMjY3MDQsMzcyMzAsMzA2NDMsMjE1MTYsMzgxMDgsMjQ0MjAsMzE0NjEsMjY3NDIsMjU0MTMsMzE1NzAsMzI0NzksMzAx''@;'; put 'put ''NzEsMjA1OTksMjUyMzcsMjI4MzYsMzY4NzksMjA5ODQsMzExNzEsMzEzNjEsMjIyNzAsMjQ0NjYsMzY4ODQsMjgwMzQsMjM2NDgsMjIzMDMsMjE1MjAsMjA4MjAsMjgyMzcsMjIyNDIsMjU1MTIsMzkwNTksMzMxNTEsMzQ1ODEsMzUxMTQsMzY4NjQsMjE1MzQsMjM2NjMsMzMyMTYsMjUzMDIs''@;'; put 'put ''MjUxNzYsMzMwNzMsNDA1MDEsMzg0NjQsMzk1MzQsMzk1NDgsMjY5MjUsMjI5NDksMjUyOTksMjE4MjIsMjUzNjYsMjE3MDMsMzQ1MjEsMjc5NjQsMjMwNDMsMjk5MjYsMzQ5NzIsMjc0OTgsMjI4MDYsMzU5MTYsMjQzNjcsMjgyODYsMjk2MDksMzkwMzcsMjAwMjQsMjg5MTksMjM0MzYsMzA4''@;'; put 'put ''NzEsMjU0MDUsMjYyMDIsMzAzNTgsMjQ3NzksMjM0NTEsMjMxMTMsMTk5NzUsMzMxMDksMjc3NTQsMjk1NzksMjAxMjksMjY1MDUsMzI1OTMsMjQ0NDgsMjYxMDYsMjYzOTUsMjQ1MzYsMjI5MTYsMjMwNDEsMzQ1ODUsMzQ1ODcsMzQ1ODksMzQ1OTEsMzQ1OTIsMzQ1OTYsMzQ1OTgsMzQ1OTks''@;'; put 'put ''MzQ2MDAsMzQ2MDIsMzQ2MDMsMzQ2MDQsMzQ2MDUsMzQ2MDcsMzQ2MDgsMzQ2MTAsMzQ2MTEsMzQ2MTMsMzQ2MTQsMzQ2MTYsMzQ2MTcsMzQ2MTgsMzQ2MjAsMzQ2MjEsMzQ2MjQsMzQ2MjUsMzQ2MjYsMzQ2MjcsMzQ2MjgsMzQ2MjksMzQ2MzAsMzQ2MzQsMzQ2MzUsMzQ2MzcsMzQ2MzksMzQ2''@;'; put 'put ''NDAsMzQ2NDEsMzQ2NDIsMzQ2NDQsMzQ2NDUsMzQ2NDYsMzQ2NDgsMzQ2NTAsMzQ2NTEsMzQ2NTIsMzQ2NTMsMzQ2NTQsMzQ2NTUsMzQ2NTcsMzQ2NTgsMzQ2NjIsMzQ2NjMsMzQ2NjQsMzQ2NjUsMzQ2NjYsMzQ2NjcsMzQ2NjgsMzQ2NjksMzQ2NzEsMzQ2NzMsMzQ2NzQsMzQ2NzUsMzQ2Nzcs''@;'; put 'put ''MzQ2NzksMzQ2ODAsMzQ2ODEsMzQ2ODIsMzQ2ODcsMzQ2ODgsMzQ2ODksMzQ2OTIsMzQ2OTQsMzQ2OTUsMzQ2OTcsMzQ2OTgsMzQ3MDAsMzQ3MDIsMzQ3MDMsMzQ3MDQsMzQ3MDUsMzQ3MDYsMzQ3MDgsMzQ3MDksMzQ3MTAsMzQ3MTIsMzQ3MTMsMzQ3MTQsMzQ3MTUsMzQ3MTYsMzQ3MTcsMzQ3''@;'; put 'put ''MTgsMzQ3MjAsMzQ3MjEsMzQ3MjIsMzQ3MjMsMzQ3MjQsMjQwMTMsMjQ0OTQsMjEzNjEsMzg4ODYsMzY4MjksMjY2OTMsMjIyNjAsMjE4MDcsMjQ3OTksMjAwMjYsMjg0OTMsMzI1MDAsMzM0NzksMzM4MDYsMjI5OTYsMjAyNTUsMjAyNjYsMjM2MTQsMzI0MjgsMjY0MTAsMzQwNzQsMjE2MTks''@;'; put 'put ''MzAwMzEsMzI5NjMsMjE4OTAsMzk3NTksMjAzMDEsMjgyMDUsMzU4NTksMjM1NjEsMjQ5NDQsMjEzNTUsMzAyMzksMjgyMDEsMzQ0NDIsMjU5OTEsMzgzOTUsMzI0NDEsMjE1NjMsMzEyODMsMzIwMTAsMzgzODIsMjE5ODUsMzI3MDUsMjk5MzQsMjUzNzMsMzQ1ODMsMjgwNjUsMzEzODksMjUx''@;'; put 'put ''MDUsMjYwMTcsMjEzNTEsMjU1NjksMjc3NzksMjQwNDMsMjE1OTYsMzgwNTYsMjAwNDQsMjc3NDUsMzU4MjAsMjM2MjcsMjYwODAsMzM0MzYsMjY3OTEsMjE1NjYsMjE1NTYsMjc1OTUsMjc0OTQsMjAxMTYsMjU0MTAsMjEzMjAsMzMzMTAsMjAyMzcsMjAzOTgsMjIzNjYsMjUwOTgsMzg2NTQs''@;'; put 'put ''MjYyMTIsMjkyODksMjEyNDcsMjExNTMsMjQ3MzUsMzU4MjMsMjYxMzIsMjkwODEsMjY1MTIsMzUxOTksMzA4MDIsMzA3MTcsMjYyMjQsMjIwNzUsMjE1NjAsMzgxNzcsMjkzMDYsMzQ3MjUsMzQ3MjYsMzQ3MjcsMzQ3MjksMzQ3MzAsMzQ3MzQsMzQ3MzYsMzQ3MzcsMzQ3MzgsMzQ3NDAsMzQ3''@;'; put 'put ''NDIsMzQ3NDMsMzQ3NDQsMzQ3NDUsMzQ3NDcsMzQ3NDgsMzQ3NTAsMzQ3NTEsMzQ3NTMsMzQ3NTQsMzQ3NTUsMzQ3NTYsMzQ3NTcsMzQ3NTksMzQ3NjAsMzQ3NjEsMzQ3NjQsMzQ3NjUsMzQ3NjYsMzQ3NjcsMzQ3NjgsMzQ3NzIsMzQ3NzMsMzQ3NzQsMzQ3NzUsMzQ3NzYsMzQ3NzcsMzQ3Nzgs''@;'; put 'put ''MzQ3ODAsMzQ3ODEsMzQ3ODIsMzQ3ODMsMzQ3ODUsMzQ3ODYsMzQ3ODcsMzQ3ODgsMzQ3OTAsMzQ3OTEsMzQ3OTIsMzQ3OTMsMzQ3OTUsMzQ3OTYsMzQ3OTcsMzQ3OTksMzQ4MDAsMzQ4MDEsMzQ4MDIsMzQ4MDMsMzQ4MDQsMzQ4MDUsMzQ4MDYsMzQ4MDcsMzQ4MDgsMzQ4MTAsMzQ4MTEsMzQ4''@;'; put 'put ''MTIsMzQ4MTMsMzQ4MTUsMzQ4MTYsMzQ4MTcsMzQ4MTgsMzQ4MjAsMzQ4MjEsMzQ4MjIsMzQ4MjMsMzQ4MjQsMzQ4MjUsMzQ4MjcsMzQ4MjgsMzQ4MjksMzQ4MzAsMzQ4MzEsMzQ4MzIsMzQ4MzMsMzQ4MzQsMzQ4MzYsMzQ4MzksMzQ4NDAsMzQ4NDEsMzQ4NDIsMzQ4NDQsMzQ4NDUsMzQ4NDYs''@;'; put 'put ''MzQ4NDcsMzQ4NDgsMzQ4NTEsMzEyMzIsMjQ2ODcsMjQwNzYsMjQ3MTMsMzMxODEsMjI4MDUsMjQ3OTYsMjkwNjAsMjg5MTEsMjgzMzAsMjc3MjgsMjkzMTIsMjcyNjgsMzQ5ODksMjQxMDksMjAwNjQsMjMyMTksMjE5MTYsMzgxMTUsMjc5MjcsMzE5OTUsMzg1NTMsMjUxMDMsMzI0NTQsMzA2''@;'; put 'put ''MDYsMzQ0MzAsMjEyODMsMzg2ODYsMzY3NTgsMjYyNDcsMjM3NzcsMjAzODQsMjk0MjEsMTk5NzksMjE0MTQsMjI3OTksMjE1MjMsMjU0NzIsMzgxODQsMjA4MDgsMjAxODUsNDAwOTIsMzI0MjAsMjE2ODgsMzYxMzIsMzQ5MDAsMzMzMzUsMzgzODYsMjgwNDYsMjQzNTgsMjMyNDQsMjYxNzQs''@;'; put 'put ''Mzg1MDUsMjk2MTYsMjk0ODYsMjE0MzksMzMxNDYsMzkzMDEsMzI2NzMsMjM0NjYsMzg1MTksMzg0ODAsMzI0NDcsMzA0NTYsMjE0MTAsMzgyNjIsMzkzMjEsMzE2NjUsMzUxNDAsMjgyNDgsMjAwNjUsMzI3MjQsMzEwNzcsMzU4MTQsMjQ4MTksMjE3MDksMjAxMzksMzkwMzMsMjQwNTUsMjcy''@;'; put 'put ''MzMsMjA2ODcsMjE1MjEsMzU5MzcsMzM4MzEsMzA4MTMsMzg2NjAsMjEwNjYsMjE3NDIsMjIxNzksMzgxNDQsMjgwNDAsMjM0NzcsMjgxMDIsMjYxOTUsMzQ4NTIsMzQ4NTMsMzQ4NTQsMzQ4NTUsMzQ4NTYsMzQ4NTcsMzQ4NTgsMzQ4NTksMzQ4NjAsMzQ4NjEsMzQ4NjIsMzQ4NjMsMzQ4NjQs''@;'; put 'put ''MzQ4NjUsMzQ4NjcsMzQ4NjgsMzQ4NjksMzQ4NzAsMzQ4NzEsMzQ4NzIsMzQ4NzQsMzQ4NzUsMzQ4NzcsMzQ4NzgsMzQ4NzksMzQ4ODEsMzQ4ODIsMzQ4ODMsMzQ4ODYsMzQ4ODcsMzQ4ODgsMzQ4ODksMzQ4OTAsMzQ4OTEsMzQ4OTQsMzQ4OTUsMzQ4OTYsMzQ4OTcsMzQ4OTgsMzQ4OTksMzQ5''@;'; put 'put ''MDEsMzQ5MDIsMzQ5MDQsMzQ5MDYsMzQ5MDcsMzQ5MDgsMzQ5MDksMzQ5MTAsMzQ5MTEsMzQ5MTIsMzQ5MTgsMzQ5MTksMzQ5MjIsMzQ5MjUsMzQ5MjcsMzQ5MjksMzQ5MzEsMzQ5MzIsMzQ5MzMsMzQ5MzQsMzQ5MzYsMzQ5MzcsMzQ5MzgsMzQ5MzksMzQ5NDAsMzQ5NDQsMzQ5NDcsMzQ5NTAs''@;'; put 'put ''MzQ5NTEsMzQ5NTMsMzQ5NTQsMzQ5NTYsMzQ5NTgsMzQ5NTksMzQ5NjAsMzQ5NjEsMzQ5NjMsMzQ5NjQsMzQ5NjUsMzQ5NjcsMzQ5NjgsMzQ5NjksMzQ5NzAsMzQ5NzEsMzQ5NzMsMzQ5NzQsMzQ5NzUsMzQ5NzYsMzQ5NzcsMzQ5NzksMzQ5ODEsMzQ5ODIsMzQ5ODMsMzQ5ODQsMzQ5ODUsMzQ5''@;'; put 'put ''ODYsMjM1NjcsMjMzODksMjY2NTcsMzI5MTgsMjE4ODAsMzE1MDUsMjU5MjgsMjY5NjQsMjAxMjMsMjc0NjMsMzQ2MzgsMzg3OTUsMjEzMjcsMjUzNzUsMjU2NTgsMzcwMzQsMjYwMTIsMzI5NjEsMzU4NTYsMjA4ODksMjY4MDAsMjEzNjgsMzQ4MDksMjUwMzIsMjc4NDQsMjc4OTksMzU4NzQs''@;'; put 'put ''MjM2MzMsMzQyMTgsMzM0NTUsMzgxNTYsMjc0MjcsMzY3NjMsMjYwMzIsMjQ1NzEsMjQ1MTUsMjA0NDksMzQ4ODUsMjYxNDMsMzMxMjUsMjk0ODEsMjQ4MjYsMjA4NTIsMjEwMDksMjI0MTEsMjQ0MTgsMzcwMjYsMzQ4OTIsMzcyNjYsMjQxODQsMjY0NDcsMjQ2MTUsMjI5OTUsMjA4MDQsMjA5''@;'; put 'put ''ODIsMzMwMTYsMjEyNTYsMjc3NjksMzg1OTYsMjkwNjYsMjAyNDEsMjA0NjIsMzI2NzAsMjY0MjksMjE5NTcsMzgxNTIsMzExNjgsMzQ5NjYsMzI0ODMsMjI2ODcsMjUxMDAsMzg2NTYsMzQzOTQsMjIwNDAsMzkwMzUsMjQ0NjQsMzU3NjgsMzM5ODgsMzcyMDcsMjE0NjUsMjYwOTMsMjQyMDcs''@;'; put 'put ''MzAwNDQsMjQ2NzYsMzIxMTAsMjMxNjcsMzI0OTAsMzI0OTMsMzY3MTMsMjE5MjcsMjM0NTksMjQ3NDgsMjYwNTksMjk1NzIsMzQ5ODgsMzQ5OTAsMzQ5OTEsMzQ5OTIsMzQ5OTQsMzQ5OTUsMzQ5OTYsMzQ5OTcsMzQ5OTgsMzVlMywzNTAwMSwzNTAwMiwzNTAwMywzNTAwNSwzNTAwNiwzNTAw''@;'; put 'put ''NywzNTAwOCwzNTAxMSwzNTAxMiwzNTAxNSwzNTAxNiwzNTAxOCwzNTAxOSwzNTAyMCwzNTAyMSwzNTAyMywzNTAyNCwzNTAyNSwzNTAyNywzNTAzMCwzNTAzMSwzNTAzNCwzNTAzNSwzNTAzNiwzNTAzNywzNTAzOCwzNTA0MCwzNTA0MSwzNTA0NiwzNTA0NywzNTA0OSwzNTA1MCwzNTA1MSwz''@;'; put 'put ''NTA1MiwzNTA1MywzNTA1NCwzNTA1NSwzNTA1OCwzNTA2MSwzNTA2MiwzNTA2MywzNTA2NiwzNTA2NywzNTA2OSwzNTA3MSwzNTA3MiwzNTA3MywzNTA3NSwzNTA3NiwzNTA3NywzNTA3OCwzNTA3OSwzNTA4MCwzNTA4MSwzNTA4MywzNTA4NCwzNTA4NSwzNTA4NiwzNTA4NywzNTA4OSwzNTA5''@;'; put 'put ''MiwzNTA5MywzNTA5NCwzNTA5NSwzNTA5NiwzNTEwMCwzNTEwMSwzNTEwMiwzNTEwMywzNTEwNCwzNTEwNiwzNTEwNywzNTEwOCwzNTExMCwzNTExMSwzNTExMiwzNTExMywzNTExNiwzNTExNywzNTExOCwzNTExOSwzNTEyMSwzNTEyMiwzNTEyMywzNTEyNSwzNTEyNywzNjg3MywzMDMwNywz''@;'; put 'put ''MDUwNSwzMjQ3NCwzODc3MiwzNDIwMywyMzM5OCwzMTM0OCwzODYzNCwzNDg4MCwyMTE5NSwyOTA3MSwyNDQ5MCwyNjA5MiwzNTgxMCwyMzU0NywzOTUzNSwyNDAzMywyNzUyOSwyNzczOSwzNTc1NywzNTc1OSwzNjg3NCwzNjgwNSwyMTM4NywyNTI3Niw0MDQ4Niw0MDQ5MywyMTU2OCwyMDAx''@;'; put 'put ''MSwzMzQ2OSwyOTI3MywzNDQ2MCwyMzgzMCwzNDkwNSwyODA3OSwzODU5NywyMTcxMywyMDEyMiwzNTc2NiwyODkzNywyMTY5MywzODQwOSwyODg5NSwyODE1MywzMDQxNiwyMDAwNSwzMDc0MCwzNDU3OCwyMzcyMSwyNDMxMCwzNTMyOCwzOTA2OCwzODQxNCwyODgxNCwyNzgzOSwyMjg1Miwy''@;'; put 'put ''NTUxMywzMDUyNCwzNDg5MywyODQzNiwzMzM5NSwyMjU3NiwyOTE0MSwyMTM4OCwzMDc0NiwzODU5MywyMTc2MSwyNDQyMiwyODk3NiwyMzQ3NiwzNTg2NiwzOTU2NCwyNzUyMywyMjgzMCw0MDQ5NSwzMTIwNywyNjQ3MiwyNTE5NiwyMDMzNSwzMDExMywzMjY1MCwyNzkxNSwzODQ1MSwyNzY4''@;'; put 'put ''NywyMDIwOCwzMDE2MiwyMDg1OSwyNjY3OSwyODQ3OCwzNjk5MiwzMzEzNiwyMjkzNCwyOTgxNCwzNTEyOCwzNTEyOSwzNTEzMCwzNTEzMSwzNTEzMiwzNTEzMywzNTEzNCwzNTEzNSwzNTEzNiwzNTEzOCwzNTEzOSwzNTE0MSwzNTE0MiwzNTE0MywzNTE0NCwzNTE0NSwzNTE0NiwzNTE0Nywz''@;'; put 'put ''NTE0OCwzNTE0OSwzNTE1MCwzNTE1MSwzNTE1MiwzNTE1MywzNTE1NCwzNTE1NSwzNTE1NiwzNTE1NywzNTE1OCwzNTE1OSwzNTE2MCwzNTE2MSwzNTE2MiwzNTE2MywzNTE2NCwzNTE2NSwzNTE2OCwzNTE2OSwzNTE3MCwzNTE3MSwzNTE3MiwzNTE3MywzNTE3NSwzNTE3NiwzNTE3NywzNTE3''@;'; put 'put ''OCwzNTE3OSwzNTE4MCwzNTE4MSwzNTE4MiwzNTE4MywzNTE4NCwzNTE4NSwzNTE4NiwzNTE4NywzNTE4OCwzNTE4OSwzNTE5MCwzNTE5MSwzNTE5MiwzNTE5MywzNTE5NCwzNTE5NiwzNTE5NywzNTE5OCwzNTIwMCwzNTIwMiwzNTIwNCwzNTIwNSwzNTIwNywzNTIwOCwzNTIwOSwzNTIxMCwz''@;'; put 'put ''NTIxMSwzNTIxMiwzNTIxMywzNTIxNCwzNTIxNSwzNTIxNiwzNTIxNywzNTIxOCwzNTIxOSwzNTIyMCwzNTIyMSwzNTIyMiwzNTIyMywzNTIyNCwzNTIyNSwzNTIyNiwzNTIyNywzNTIyOCwzNTIyOSwzNTIzMCwzNTIzMSwzNTIzMiwzNTIzMywyNTY3MSwyMzU5MSwzNjk2NSwzMTM3NywzNTg3''@;'; put 'put ''NSwyMzAwMiwyMTY3NiwzMzI4MCwzMzY0NywzNTIwMSwzMjc2OCwyNjkyOCwyMjA5NCwzMjgyMiwyOTIzOSwzNzMyNiwyMDkxOCwyMDA2MywzOTAyOSwyNTQ5NCwxOTk5NCwyMTQ5NCwyNjM1NSwzMzA5OSwyMjgxMiwyODA4MiwxOTk2OCwyMjc3NywyMTMwNywyNTU1OCwzODEyOSwyMDM4MSwy''@;'; put 'put ''MDIzNCwzNDkxNSwzOTA1NiwyMjgzOSwzNjk1MSwzMTIyNywyMDIwMiwzMzAwOCwzMDA5NywyNzc3OCwyMzQ1MiwyMzAxNiwyNDQxMywyNjg4NSwzNDQzMywyMDUwNiwyNDA1MCwyMDA1NywzMDY5MSwyMDE5NywzMzQwMiwyNTIzMywyNjEzMSwzNzAwOSwyMzY3MywyMDE1OSwyNDQ0MSwzMzIy''@;'; put 'put ''MiwzNjkyMCwzMjkwMCwzMDEyMywyMDEzNCwzNTAyOCwyNDg0NywyNzU4OSwyNDUxOCwyMDA0MSwzMDQxMCwyODMyMiwzNTgxMSwzNTc1OCwzNTg1MCwzNTc5MywyNDMyMiwzMjc2NCwzMjcxNiwzMjQ2MiwzMzU4OSwzMzY0MywyMjI0MCwyNzU3NSwzODg5OSwzODQ1MiwyMzAzNSwyMTUzNSwz''@;'; put 'put ''ODEzNCwyODEzOSwyMzQ5MywzOTI3OCwyMzYwOSwyNDM0MSwzODU0NCwzNTIzNCwzNTIzNSwzNTIzNiwzNTIzNywzNTIzOCwzNTIzOSwzNTI0MCwzNTI0MSwzNTI0MiwzNTI0MywzNTI0NCwzNTI0NSwzNTI0NiwzNTI0NywzNTI0OCwzNTI0OSwzNTI1MCwzNTI1MSwzNTI1MiwzNTI1MywzNTI1''@;'; put 'put ''NCwzNTI1NSwzNTI1NiwzNTI1NywzNTI1OCwzNTI1OSwzNTI2MCwzNTI2MSwzNTI2MiwzNTI2MywzNTI2NCwzNTI2NywzNTI3NywzNTI4MywzNTI4NCwzNTI4NSwzNTI4NywzNTI4OCwzNTI4OSwzNTI5MSwzNTI5MywzNTI5NSwzNTI5NiwzNTI5NywzNTI5OCwzNTMwMCwzNTMwMywzNTMwNCwz''@;'; put 'put ''NTMwNSwzNTMwNiwzNTMwOCwzNTMwOSwzNTMxMCwzNTMxMiwzNTMxMywzNTMxNCwzNTMxNiwzNTMxNywzNTMxOCwzNTMxOSwzNTMyMCwzNTMyMSwzNTMyMiwzNTMyMywzNTMyNCwzNTMyNSwzNTMyNiwzNTMyNywzNTMyOSwzNTMzMCwzNTMzMSwzNTMzMiwzNTMzMywzNTMzNCwzNTMzNiwzNTMz''@;'; put 'put ''NywzNTMzOCwzNTMzOSwzNTM0MCwzNTM0MSwzNTM0MiwzNTM0MywzNTM0NCwzNTM0NSwzNTM0NiwzNTM0NywzNTM0OCwzNTM0OSwzNTM1MCwzNTM1MSwzNTM1MiwzNTM1MywzNTM1NCwzNTM1NSwzNTM1NiwzNTM1NywyMTM2MCwzMzUyMSwyNzE4NSwyMzE1Niw0MDU2MCwyNDIxMiwzMjU1Miwz''@;'; put 'put ''MzcyMSwzMzgyOCwzMzgyOSwzMzYzOSwzNDYzMSwzNjgxNCwzNjE5NCwzMDQwOCwyNDQzMywzOTA2MiwzMDgyOCwyNjE0NCwyMTcyNywyNTMxNywyMDMyMywzMzIxOSwzMDE1MiwyNDI0OCwzODYwNSwzNjM2MiwzNDU1MywyMTY0NywyNzg5MSwyODA0NCwyNzcwNCwyNDcwMywyMTE5MSwyOTk5''@;'; put 'put ''MiwyNDE4OSwyMDI0OCwyNDczNiwyNDU1MSwyMzU4OCwzMDAwMSwzNzAzOCwzODA4MCwyOTM2OSwyNzgzMywyODIxNiwzNzE5MywyNjM3NywyMTQ1MSwyMTQ5MSwyMDMwNSwzNzMyMSwzNTgyNSwyMTQ0OCwyNDE4OCwzNjgwMiwyODEzMiwyMDExMCwzMDQwMiwyNzAxNCwzNDM5OCwyNDg1OCwz''@;'; put 'put ''MzI4NiwyMDMxMywyMDQ0NiwzNjkyNiw0MDA2MCwyNDg0MSwyODE4OSwyODE4MCwzODUzMywyMDEwNCwyMzA4OSwzODYzMiwxOTk4MiwyMzY3OSwzMTE2MSwyMzQzMSwzNTgyMSwzMjcwMSwyOTU3NywyMjQ5NSwzMzQxOSwzNzA1NywyMTUwNSwzNjkzNSwyMTk0NywyMzc4NiwyNDQ4MSwyNDg0''@;'; put 'put ''MCwyNzQ0MiwyOTQyNSwzMjk0NiwzNTQ2NSwzNTM1OCwzNTM1OSwzNTM2MCwzNTM2MSwzNTM2MiwzNTM2MywzNTM2NCwzNTM2NSwzNTM2NiwzNTM2NywzNTM2OCwzNTM2OSwzNTM3MCwzNTM3MSwzNTM3MiwzNTM3MywzNTM3NCwzNTM3NSwzNTM3NiwzNTM3NywzNTM3OCwzNTM3OSwzNTM4MCwz''@;'; put 'put ''NTM4MSwzNTM4MiwzNTM4MywzNTM4NCwzNTM4NSwzNTM4NiwzNTM4NywzNTM4OCwzNTM4OSwzNTM5MSwzNTM5MiwzNTM5MywzNTM5NCwzNTM5NSwzNTM5NiwzNTM5NywzNTM5OCwzNTM5OSwzNTQwMSwzNTQwMiwzNTQwMywzNTQwNCwzNTQwNSwzNTQwNiwzNTQwNywzNTQwOCwzNTQwOSwzNTQx''@;'; put 'put ''MCwzNTQxMSwzNTQxMiwzNTQxMywzNTQxNCwzNTQxNSwzNTQxNiwzNTQxNywzNTQxOCwzNTQxOSwzNTQyMCwzNTQyMSwzNTQyMiwzNTQyMywzNTQyNCwzNTQyNSwzNTQyNiwzNTQyNywzNTQyOCwzNTQyOSwzNTQzMCwzNTQzMSwzNTQzMiwzNTQzMywzNTQzNCwzNTQzNSwzNTQzNiwzNTQzNywz''@;'; put 'put ''NTQzOCwzNTQzOSwzNTQ0MCwzNTQ0MSwzNTQ0MiwzNTQ0MywzNTQ0NCwzNTQ0NSwzNTQ0NiwzNTQ0NywzNTQ0OCwzNTQ1MCwzNTQ1MSwzNTQ1MiwzNTQ1MywzNTQ1NCwzNTQ1NSwzNTQ1NiwyODAyMCwyMzUwNywzNTAyOSwzOTA0NCwzNTk0NywzOTUzMyw0MDQ5OSwyODE3MCwyMDkwMCwyMDgw''@;'; put 'put ''MywyMjQzNSwzNDk0NSwyMTQwNywyNTU4OCwzNjc1NywyMjI1MywyMTU5MiwyMjI3OCwyOTUwMywyODMwNCwzMjUzNiwzNjgyOCwzMzQ4OSwyNDg5NSwyNDYxNiwzODQ5OCwyNjM1MiwzMjQyMiwzNjIzNCwzNjI5MSwzODA1MywyMzczMSwzMTkwOCwyNjM3NiwyNDc0MiwzODQwNSwzMjc5Miwy''@;'; put 'put ''MDExMywzNzA5NSwyMTI0OCwzODUwNCwyMDgwMSwzNjgxNiwzNDE2NCwzNzIxMywyNjE5NywzODkwMSwyMzM4MSwyMTI3NywzMDc3NiwyNjQzNCwyNjY4NSwyMTcwNSwyODc5OCwyMzQ3MiwzNjczMywyMDg3NywyMjMxMiwyMTY4MSwyNTg3NCwyNjI0MiwzNjE5MCwzNjE2MywzMzAzOSwzMzkw''@;'; put 'put ''MCwzNjk3MywzMTk2NywyMDk5MSwzNDI5OSwyNjUzMSwyNjA4OSwyODU3NywzNDQ2OCwzNjQ4MSwyMjEyMiwzNjg5NiwzMDMzOCwyODc5MCwyOTE1NywzNjEzMSwyNTMyMSwyMTAxNywyNzkwMSwzNjE1NiwyNDU5MCwyMjY4NiwyNDk3NCwyNjM2NiwzNjE5MiwyNTE2NiwyMTkzOSwyODE5NSwy''@;'; put 'put ''NjQxMywzNjcxMSwzNTQ1NywzNTQ1OCwzNTQ1OSwzNTQ2MCwzNTQ2MSwzNTQ2MiwzNTQ2MywzNTQ2NCwzNTQ2NywzNTQ2OCwzNTQ2OSwzNTQ3MCwzNTQ3MSwzNTQ3MiwzNTQ3MywzNTQ3NCwzNTQ3NiwzNTQ3NywzNTQ3OCwzNTQ3OSwzNTQ4MCwzNTQ4MSwzNTQ4MiwzNTQ4MywzNTQ4NCwzNTQ4''@;'; put 'put ''NSwzNTQ4NiwzNTQ4NywzNTQ4OCwzNTQ4OSwzNTQ5MCwzNTQ5MSwzNTQ5MiwzNTQ5MywzNTQ5NCwzNTQ5NSwzNTQ5NiwzNTQ5NywzNTQ5OCwzNTQ5OSwzNTUwMCwzNTUwMSwzNTUwMiwzNTUwMywzNTUwNCwzNTUwNSwzNTUwNiwzNTUwNywzNTUwOCwzNTUwOSwzNTUxMCwzNTUxMSwzNTUxMiwz''@;'; put 'put ''NTUxMywzNTUxNCwzNTUxNSwzNTUxNiwzNTUxNywzNTUxOCwzNTUxOSwzNTUyMCwzNTUyMSwzNTUyMiwzNTUyMywzNTUyNCwzNTUyNSwzNTUyNiwzNTUyNywzNTUyOCwzNTUyOSwzNTUzMCwzNTUzMSwzNTUzMiwzNTUzMywzNTUzNCwzNTUzNSwzNTUzNiwzNTUzNywzNTUzOCwzNTUzOSwzNTU0''@;'; put 'put ''MCwzNTU0MSwzNTU0MiwzNTU0MywzNTU0NCwzNTU0NSwzNTU0NiwzNTU0NywzNTU0OCwzNTU0OSwzNTU1MCwzNTU1MSwzNTU1MiwzNTU1MywzNTU1NCwzNTU1NSwzODExMywzODM5MiwzMDUwNCwyNjYyOSwyNzA0OCwyMTY0MywyMDA0NSwyODg1NiwzNTc4NCwyNTY4OCwyNTk5NSwyMzQyOSwz''@;'; put 'put ''MTM2NCwyMDUzOCwyMzUyOCwzMDY1MSwyNzYxNywzNTQ0OSwzMTg5NiwyNzgzOCwzMDQxNSwyNjAyNSwzNjc1OSwyMzg1MywyMzYzNywzNDM2MCwyNjYzMiwyMTM0NCwyNTExMiwzMTQ0OSwyODI1MSwzMjUwOSwyNzE2NywzMTQ1NiwyNDQzMiwyODQ2NywyNDM1MiwyNTQ4NCwyODA3MiwyNjQ1''@;'; put 'put ''NCwxOTk3NiwyNDA4MCwzNjEzNCwyMDE4MywzMjk2MCwzMDI2MCwzODU1NiwyNTMwNywyNjE1NywyNTIxNCwyNzgzNiwzNjIxMywyOTAzMSwzMjYxNywyMDgwNiwzMjkwMywyMTQ4NCwzNjk3NCwyNTI0MCwyMTc0NiwzNDU0NCwzNjc2MSwzMjc3MywzODE2NywzNDA3MSwzNjgyNSwyNzk5Mywy''@;'; put 'put ''OTY0NSwyNjAxNSwzMDQ5NSwyOTk1NiwzMDc1OSwzMzI3NSwzNjEyNiwzODAyNCwyMDM5MCwyNjUxNywzMDEzNywzNTc4NiwzODY2MywyNTM5MSwzODIxNSwzODQ1MywzMzk3NiwyNTM3OSwzMDUyOSwyNDQ0OSwyOTQyNCwyMDEwNSwyNDU5NiwyNTk3MiwyNTMyNywyNzQ5MSwyNTkxOSwzNTU1''@;'; put 'put ''NiwzNTU1NywzNTU1OCwzNTU1OSwzNTU2MCwzNTU2MSwzNTU2MiwzNTU2MywzNTU2NCwzNTU2NSwzNTU2NiwzNTU2NywzNTU2OCwzNTU2OSwzNTU3MCwzNTU3MSwzNTU3MiwzNTU3MywzNTU3NCwzNTU3NSwzNTU3NiwzNTU3NywzNTU3OCwzNTU3OSwzNTU4MCwzNTU4MSwzNTU4MiwzNTU4Mywz''@;'; put 'put ''NTU4NCwzNTU4NSwzNTU4NiwzNTU4NywzNTU4OCwzNTU4OSwzNTU5MCwzNTU5MiwzNTU5MywzNTU5NCwzNTU5NSwzNTU5NiwzNTU5NywzNTU5OCwzNTU5OSwzNTYwMCwzNTYwMSwzNTYwMiwzNTYwMywzNTYwNCwzNTYwNSwzNTYwNiwzNTYwNywzNTYwOCwzNTYwOSwzNTYxMCwzNTYxMSwzNTYx''@;'; put 'put ''MiwzNTYxMywzNTYxNCwzNTYxNSwzNTYxNiwzNTYxNywzNTYxOCwzNTYxOSwzNTYyMCwzNTYyMSwzNTYyMywzNTYyNCwzNTYyNSwzNTYyNiwzNTYyNywzNTYyOCwzNTYyOSwzNTYzMCwzNTYzMSwzNTYzMiwzNTYzMywzNTYzNCwzNTYzNSwzNTYzNiwzNTYzNywzNTYzOCwzNTYzOSwzNTY0MCwz''@;'; put 'put ''NTY0MSwzNTY0MiwzNTY0MywzNTY0NCwzNTY0NSwzNTY0NiwzNTY0NywzNTY0OCwzNTY0OSwzNTY1MCwzNTY1MSwzNTY1MiwzNTY1MywyNDEwMywzMDE1MSwzNzA3MywzNTc3NywzMzQzNywyNjUyNSwyNTkwMywyMTU1MywzNDU4NCwzMDY5MywzMjkzMCwzMzAyNiwyNzcxMywyMDA0MywzMjQ1''@;'; put 'put ''NSwzMjg0NCwzMDQ1MiwyNjg5MywyNzU0MiwyNTE5MSwyMDU0MCwyMDM1NiwyMjMzNiwyNTM1MSwyNzQ5MCwzNjI4NiwyMTQ4MiwyNjA4OCwzMjQ0MCwyNDUzNSwyNTM3MCwyNTUyNywzMzI2NywzMzI2OCwzMjYyMiwyNDA5MiwyMzc2OSwyMTA0NiwyNjIzNCwzMTIwOSwzMTI1OCwzNjEzNiwy''@;'; put 'put ''ODgyNSwzMDE2NCwyODM4MiwyNzgzNSwzMTM3OCwyMDAxMywzMDQwNSwyNDU0NCwzODA0NywzNDkzNSwzMjQ1NiwzMTE4MSwzMjk1OSwzNzMyNSwyMDIxMCwyMDI0NywzMzMxMSwyMTYwOCwyNDAzMCwyNzk1NCwzNTc4OCwzMTkwOSwzNjcyNCwzMjkyMCwyNDA5MCwyMTY1MCwzMDM4NSwyMzQ0''@;'; put 'put ''OSwyNjE3MiwzOTU4OCwyOTY2NCwyNjY2NiwzNDUyMywyNjQxNywyOTQ4MiwzNTgzMiwzNTgwMywzNjg4MCwzMTQ4MSwyODg5MSwyOTAzOCwyNTI4NCwzMDYzMywyMjA2NSwyMDAyNywzMzg3OSwyNjYwOSwyMTE2MSwzNDQ5NiwzNjE0MiwzODEzNiwzMTU2OSwzNTY1NCwzNTY1NSwzNTY1Niwz''@;'; put 'put ''NTY1NywzNTY1OCwzNTY1OSwzNTY2MCwzNTY2MSwzNTY2MiwzNTY2MywzNTY2NCwzNTY2NSwzNTY2NiwzNTY2NywzNTY2OCwzNTY2OSwzNTY3MCwzNTY3MSwzNTY3MiwzNTY3MywzNTY3NCwzNTY3NSwzNTY3NiwzNTY3NywzNTY3OCwzNTY3OSwzNTY4MCwzNTY4MSwzNTY4MiwzNTY4MywzNTY4''@;'; put 'put ''NCwzNTY4NSwzNTY4NywzNTY4OCwzNTY4OSwzNTY5MCwzNTY5MSwzNTY5MywzNTY5NCwzNTY5NSwzNTY5NiwzNTY5NywzNTY5OCwzNTY5OSwzNTcwMCwzNTcwMSwzNTcwMiwzNTcwMywzNTcwNCwzNTcwNSwzNTcwNiwzNTcwNywzNTcwOCwzNTcwOSwzNTcxMCwzNTcxMSwzNTcxMiwzNTcxMywz''@;'; put 'put ''NTcxNCwzNTcxNSwzNTcxNiwzNTcxNywzNTcxOCwzNTcxOSwzNTcyMCwzNTcyMSwzNTcyMiwzNTcyMywzNTcyNCwzNTcyNSwzNTcyNiwzNTcyNywzNTcyOCwzNTcyOSwzNTczMCwzNTczMSwzNTczMiwzNTczMywzNTczNCwzNTczNSwzNTczNiwzNTczNywzNTczOCwzNTczOSwzNTc0MCwzNTc0''@;'; put 'put ''MSwzNTc0MiwzNTc0MywzNTc1NiwzNTc2MSwzNTc3MSwzNTc4MywzNTc5MiwzNTgxOCwzNTg0OSwzNTg3MCwyMDMwMywyNzg4MCwzMTA2OSwzOTU0NywyNTIzNSwyOTIyNiwyNTM0MSwxOTk4NywzMDc0MiwzNjcxNiwyNTc3NiwzNjE4NiwzMTY4NiwyNjcyOSwyNDE5NiwzNTAxMywyMjkxOCwy''@;'; put 'put ''NTc1OCwyMjc2NiwyOTM2NiwyNjg5NCwzODE4MSwzNjg2MSwzNjE4NCwyMjM2OCwzMjUxMiwzNTg0NiwyMDkzNCwyNTQxNywyNTMwNSwyMTMzMSwyNjcwMCwyOTczMCwzMzUzNywzNzE5NiwyMTgyOCwzMDUyOCwyODc5NiwyNzk3OCwyMDg1NywyMTY3MiwzNjE2NCwyMzAzOSwyODM2MywyODEw''@;'; put 'put ''MCwyMzM4OCwzMjA0MywyMDE4MCwzMTg2OSwyODM3MSwyMzM3NiwzMzI1OCwyODE3MywyMzM4MywzOTY4MywyNjgzNywzNjM5NCwyMzQ0NywzMjUwOCwyNDYzNSwzMjQzNywzNzA0OSwzNjIwOCwyMjg2MywyNTU0OSwzMTE5OSwzNjI3NSwyMTMzMCwyNjA2MywzMTA2MiwzNTc4MSwzODQ1OSwz''@;'; put 'put ''MjQ1MiwzODA3NSwzMjM4NiwyMjA2OCwzNzI1NywyNjM2OCwzMjYxOCwyMzU2MiwzNjk4MSwyNjE1MiwyNDAzOCwyMDMwNCwyNjU5MCwyMDU3MCwyMDMxNiwyMjM1MiwyNDIzMSw1OTQwOCw1OTQwOSw1OTQxMCw1OTQxMSw1OTQxMiwzNTg5NiwzNTg5NywzNTg5OCwzNTg5OSwzNTkwMCwzNTkw''@;'; put 'put ''MSwzNTkwMiwzNTkwMywzNTkwNCwzNTkwNiwzNTkwNywzNTkwOCwzNTkwOSwzNTkxMiwzNTkxNCwzNTkxNSwzNTkxNywzNTkxOCwzNTkxOSwzNTkyMCwzNTkyMSwzNTkyMiwzNTkyMywzNTkyNCwzNTkyNiwzNTkyNywzNTkyOCwzNTkyOSwzNTkzMSwzNTkzMiwzNTkzMywzNTkzNCwzNTkzNSwz''@;'; put 'put ''NTkzNiwzNTkzOSwzNTk0MCwzNTk0MSwzNTk0MiwzNTk0MywzNTk0NCwzNTk0NSwzNTk0OCwzNTk0OSwzNTk1MCwzNTk1MSwzNTk1MiwzNTk1MywzNTk1NCwzNTk1NiwzNTk1NywzNTk1OCwzNTk1OSwzNTk2MywzNTk2NCwzNTk2NSwzNTk2NiwzNTk2NywzNTk2OCwzNTk2OSwzNTk3MSwzNTk3''@;'; put 'put ''MiwzNTk3NCwzNTk3NSwzNTk3NiwzNTk3OSwzNTk4MSwzNTk4MiwzNTk4MywzNTk4NCwzNTk4NSwzNTk4NiwzNTk4NywzNTk4OSwzNTk5MCwzNTk5MSwzNTk5MywzNTk5NCwzNTk5NSwzNTk5NiwzNTk5NywzNTk5OCwzNTk5OSwzNmUzLDM2MDAxLDM2MDAyLDM2MDAzLDM2MDA0LDM2MDA1LDM2''@;'; put 'put ''MDA2LDM2MDA3LDM2MDA4LDM2MDA5LDM2MDEwLDM2MDExLDM2MDEyLDM2MDEzLDIwMTA5LDE5OTgwLDIwODAwLDE5OTg0LDI0MzE5LDIxMzE3LDE5OTg5LDIwMTIwLDE5OTk4LDM5NzMwLDIzNDA0LDIyMTIxLDIwMDA4LDMxMTYyLDIwMDMxLDIxMjY5LDIwMDM5LDIyODI5LDI5MjQzLDIxMzU4''@;'; put 'put ''LDI3NjY0LDIyMjM5LDMyOTk2LDM5MzE5LDI3NjAzLDMwNTkwLDQwNzI3LDIwMDIyLDIwMTI3LDQwNzIwLDIwMDYwLDIwMDczLDIwMTE1LDMzNDE2LDIzMzg3LDIxODY4LDIyMDMxLDIwMTY0LDIxMzg5LDIxNDA1LDIxNDExLDIxNDEzLDIxNDIyLDM4NzU3LDM2MTg5LDIxMjc0LDIxNDkzLDIx''@;'; put 'put ''Mjg2LDIxMjk0LDIxMzEwLDM2MTg4LDIxMzUwLDIxMzQ3LDIwOTk0LDIxZTMsMjEwMDYsMjEwMzcsMjEwNDMsMjEwNTUsMjEwNTYsMjEwNjgsMjEwODYsMjEwODksMjEwODQsMzM5NjcsMjExMTcsMjExMjIsMjExMjEsMjExMzYsMjExMzksMjA4NjYsMzI1OTYsMjAxNTUsMjAxNjMsMjAxNjks''@;'; put 'put ''MjAxNjIsMjAyMDAsMjAxOTMsMjAyMDMsMjAxOTAsMjAyNTEsMjAyMTEsMjAyNTgsMjAzMjQsMjAyMTMsMjAyNjEsMjAyNjMsMjAyMzMsMjAyNjcsMjAzMTgsMjAzMjcsMjU5MTIsMjAzMTQsMjAzMTcsMzYwMTQsMzYwMTUsMzYwMTYsMzYwMTcsMzYwMTgsMzYwMTksMzYwMjAsMzYwMjEsMzYw''@;'; put 'put ''MjIsMzYwMjMsMzYwMjQsMzYwMjUsMzYwMjYsMzYwMjcsMzYwMjgsMzYwMjksMzYwMzAsMzYwMzEsMzYwMzIsMzYwMzMsMzYwMzQsMzYwMzUsMzYwMzYsMzYwMzcsMzYwMzgsMzYwMzksMzYwNDAsMzYwNDEsMzYwNDIsMzYwNDMsMzYwNDQsMzYwNDUsMzYwNDYsMzYwNDcsMzYwNDgsMzYwNDks''@;'; put 'put ''MzYwNTAsMzYwNTEsMzYwNTIsMzYwNTMsMzYwNTQsMzYwNTUsMzYwNTYsMzYwNTcsMzYwNTgsMzYwNTksMzYwNjAsMzYwNjEsMzYwNjIsMzYwNjMsMzYwNjQsMzYwNjUsMzYwNjYsMzYwNjcsMzYwNjgsMzYwNjksMzYwNzAsMzYwNzEsMzYwNzIsMzYwNzMsMzYwNzQsMzYwNzUsMzYwNzYsMzYw''@;'; put 'put ''NzcsMzYwNzgsMzYwNzksMzYwODAsMzYwODEsMzYwODIsMzYwODMsMzYwODQsMzYwODUsMzYwODYsMzYwODcsMzYwODgsMzYwODksMzYwOTAsMzYwOTEsMzYwOTIsMzYwOTMsMzYwOTQsMzYwOTUsMzYwOTYsMzYwOTcsMzYwOTgsMzYwOTksMzYxMDAsMzYxMDEsMzYxMDIsMzYxMDMsMzYxMDQs''@;'; put 'put ''MzYxMDUsMzYxMDYsMzYxMDcsMzYxMDgsMzYxMDksMjAzMTksMjAzMTEsMjAyNzQsMjAyODUsMjAzNDIsMjAzNDAsMjAzNjksMjAzNjEsMjAzNTUsMjAzNjcsMjAzNTAsMjAzNDcsMjAzOTQsMjAzNDgsMjAzOTYsMjAzNzIsMjA0NTQsMjA0NTYsMjA0NTgsMjA0MjEsMjA0NDIsMjA0NTEsMjA0''@;'; put 'put ''NDQsMjA0MzMsMjA0NDcsMjA0NzIsMjA1MjEsMjA1NTYsMjA0NjcsMjA1MjQsMjA0OTUsMjA1MjYsMjA1MjUsMjA0NzgsMjA1MDgsMjA0OTIsMjA1MTcsMjA1MjAsMjA2MDYsMjA1NDcsMjA1NjUsMjA1NTIsMjA1NTgsMjA1ODgsMjA2MDMsMjA2NDUsMjA2NDcsMjA2NDksMjA2NjYsMjA2OTQs''@;'; put 'put ''MjA3NDIsMjA3MTcsMjA3MTYsMjA3MTAsMjA3MTgsMjA3NDMsMjA3NDcsMjAxODksMjc3MDksMjAzMTIsMjAzMjUsMjA0MzAsNDA4NjQsMjc3MTgsMzE4NjAsMjA4NDYsMjQwNjEsNDA2NDksMzkzMjAsMjA4NjUsMjI4MDQsMjEyNDEsMjEyNjEsMzUzMzUsMjEyNjQsMjA5NzEsMjI4MDksMjA4''@;'; put 'put ''MjEsMjAxMjgsMjA4MjIsMjAxNDcsMzQ5MjYsMzQ5ODAsMjAxNDksMzMwNDQsMzUwMjYsMzExMDQsMjMzNDgsMzQ4MTksMzI2OTYsMjA5MDcsMjA5MTMsMjA5MjUsMjA5MjQsMzYxMTAsMzYxMTEsMzYxMTIsMzYxMTMsMzYxMTQsMzYxMTUsMzYxMTYsMzYxMTcsMzYxMTgsMzYxMTksMzYxMjAs''@;'; put 'put ''MzYxMjEsMzYxMjIsMzYxMjMsMzYxMjQsMzYxMjgsMzYxNzcsMzYxNzgsMzYxODMsMzYxOTEsMzYxOTcsMzYyMDAsMzYyMDEsMzYyMDIsMzYyMDQsMzYyMDYsMzYyMDcsMzYyMDksMzYyMTAsMzYyMTYsMzYyMTcsMzYyMTgsMzYyMTksMzYyMjAsMzYyMjEsMzYyMjIsMzYyMjMsMzYyMjQsMzYy''@;'; put 'put ''MjYsMzYyMjcsMzYyMzAsMzYyMzEsMzYyMzIsMzYyMzMsMzYyMzYsMzYyMzcsMzYyMzgsMzYyMzksMzYyNDAsMzYyNDIsMzYyNDMsMzYyNDUsMzYyNDYsMzYyNDcsMzYyNDgsMzYyNDksMzYyNTAsMzYyNTEsMzYyNTIsMzYyNTMsMzYyNTQsMzYyNTYsMzYyNTcsMzYyNTgsMzYyNjAsMzYyNjEs''@;'; put 'put ''MzYyNjIsMzYyNjMsMzYyNjQsMzYyNjUsMzYyNjYsMzYyNjcsMzYyNjgsMzYyNjksMzYyNzAsMzYyNzEsMzYyNzIsMzYyNzQsMzYyNzgsMzYyNzksMzYyODEsMzYyODMsMzYyODUsMzYyODgsMzYyODksMzYyOTAsMzYyOTMsMzYyOTUsMzYyOTYsMzYyOTcsMzYyOTgsMzYzMDEsMzYzMDQsMzYz''@;'; put 'put ''MDYsMzYzMDcsMzYzMDgsMjA5MzUsMjA4ODYsMjA4OTgsMjA5MDEsMzU3NDQsMzU3NTAsMzU3NTEsMzU3NTQsMzU3NjQsMzU3NjUsMzU3NjcsMzU3NzgsMzU3NzksMzU3ODcsMzU3OTEsMzU3OTAsMzU3OTQsMzU3OTUsMzU3OTYsMzU3OTgsMzU4MDAsMzU4MDEsMzU4MDQsMzU4MDcsMzU4MDgs''@;'; put 'put ''MzU4MTIsMzU4MTYsMzU4MTcsMzU4MjIsMzU4MjQsMzU4MjcsMzU4MzAsMzU4MzMsMzU4MzYsMzU4MzksMzU4NDAsMzU4NDIsMzU4NDQsMzU4NDcsMzU4NTIsMzU4NTUsMzU4NTcsMzU4NTgsMzU4NjAsMzU4NjEsMzU4NjIsMzU4NjUsMzU4NjcsMzU4NjQsMzU4NjksMzU4NzEsMzU4NzIsMzU4''@;'; put 'put ''NzMsMzU4NzcsMzU4NzksMzU4ODIsMzU4ODMsMzU4ODYsMzU4ODcsMzU4OTAsMzU4OTEsMzU4OTMsMzU4OTQsMjEzNTMsMjEzNzAsMzg0MjksMzg0MzQsMzg0MzMsMzg0NDksMzg0NDIsMzg0NjEsMzg0NjAsMzg0NjYsMzg0NzMsMzg0ODQsMzg0OTUsMzg1MDMsMzg1MDgsMzg1MTQsMzg1MTYs''@;'; put 'put ''Mzg1MzYsMzg1NDEsMzg1NTEsMzg1NzYsMzcwMTUsMzcwMTksMzcwMjEsMzcwMTcsMzcwMzYsMzcwMjUsMzcwNDQsMzcwNDMsMzcwNDYsMzcwNTAsMzYzMDksMzYzMTIsMzYzMTMsMzYzMTYsMzYzMjAsMzYzMjEsMzYzMjIsMzYzMjUsMzYzMjYsMzYzMjcsMzYzMjksMzYzMzMsMzYzMzQsMzYz''@;'; put 'put ''MzYsMzYzMzcsMzYzMzgsMzYzNDAsMzYzNDIsMzYzNDgsMzYzNTAsMzYzNTEsMzYzNTIsMzYzNTMsMzYzNTQsMzYzNTUsMzYzNTYsMzYzNTgsMzYzNTksMzYzNjAsMzYzNjMsMzYzNjUsMzYzNjYsMzYzNjgsMzYzNjksMzYzNzAsMzYzNzEsMzYzNzMsMzYzNzQsMzYzNzUsMzYzNzYsMzYzNzcs''@;'; put 'put ''MzYzNzgsMzYzNzksMzYzODAsMzYzODQsMzYzODUsMzYzODgsMzYzODksMzYzOTAsMzYzOTEsMzYzOTIsMzYzOTUsMzYzOTcsMzY0MDAsMzY0MDIsMzY0MDMsMzY0MDQsMzY0MDYsMzY0MDcsMzY0MDgsMzY0MTEsMzY0MTIsMzY0MTQsMzY0MTUsMzY0MTksMzY0MjEsMzY0MjIsMzY0MjgsMzY0''@;'; put 'put ''MjksMzY0MzAsMzY0MzEsMzY0MzIsMzY0MzUsMzY0MzYsMzY0MzcsMzY0MzgsMzY0MzksMzY0NDAsMzY0NDIsMzY0NDMsMzY0NDQsMzY0NDUsMzY0NDYsMzY0NDcsMzY0NDgsMzY0NDksMzY0NTAsMzY0NTEsMzY0NTIsMzY0NTMsMzY0NTUsMzY0NTYsMzY0NTgsMzY0NTksMzY0NjIsMzY0NjUs''@;'; put 'put ''MzcwNDgsMzcwNDAsMzcwNzEsMzcwNjEsMzcwNTQsMzcwNzIsMzcwNjAsMzcwNjMsMzcwNzUsMzcwOTQsMzcwOTAsMzcwODQsMzcwNzksMzcwODMsMzcwOTksMzcxMDMsMzcxMTgsMzcxMjQsMzcxNTQsMzcxNTAsMzcxNTUsMzcxNjksMzcxNjcsMzcxNzcsMzcxODcsMzcxOTAsMjEwMDUsMjI4''@;'; put 'put ''NTAsMjExNTQsMjExNjQsMjExNjUsMjExODIsMjE3NTksMjEyMDAsMjEyMDYsMjEyMzIsMjE0NzEsMjkxNjYsMzA2NjksMjQzMDgsMjA5ODEsMjA5ODgsMzk3MjcsMjE0MzAsMjQzMjEsMzAwNDIsMjQwNDcsMjIzNDgsMjI0NDEsMjI0MzMsMjI2NTQsMjI3MTYsMjI3MjUsMjI3MzcsMjIzMTMs''@;'; put 'put ''MjIzMTYsMjIzMTQsMjIzMjMsMjIzMjksMjIzMTgsMjIzMTksMjIzNjQsMjIzMzEsMjIzMzgsMjIzNzcsMjI0MDUsMjIzNzksMjI0MDYsMjIzOTYsMjIzOTUsMjIzNzYsMjIzODEsMjIzOTAsMjIzODcsMjI0NDUsMjI0MzYsMjI0MTIsMjI0NTAsMjI0NzksMjI0MzksMjI0NTIsMjI0MTksMjI0''@;'; put 'put ''MzIsMjI0ODUsMjI0ODgsMjI0OTAsMjI0ODksMjI0ODIsMjI0NTYsMjI1MTYsMjI1MTEsMjI1MjAsMjI1MDAsMjI0OTMsMzY0NjcsMzY0NjksMzY0NzEsMzY0NzIsMzY0NzMsMzY0NzQsMzY0NzUsMzY0NzcsMzY0NzgsMzY0ODAsMzY0ODIsMzY0ODMsMzY0ODQsMzY0ODYsMzY0ODgsMzY0ODks''@;'; put 'put ''MzY0OTAsMzY0OTEsMzY0OTIsMzY0OTMsMzY0OTQsMzY0OTcsMzY0OTgsMzY0OTksMzY1MDEsMzY1MDIsMzY1MDMsMzY1MDQsMzY1MDUsMzY1MDYsMzY1MDcsMzY1MDksMzY1MTEsMzY1MTIsMzY1MTMsMzY1MTQsMzY1MTUsMzY1MTYsMzY1MTcsMzY1MTgsMzY1MTksMzY1MjAsMzY1MjEsMzY1''@;'; put 'put ''MjIsMzY1MjUsMzY1MjYsMzY1MjgsMzY1MjksMzY1MzEsMzY1MzIsMzY1MzMsMzY1MzQsMzY1MzUsMzY1MzYsMzY1MzcsMzY1MzksMzY1NDAsMzY1NDEsMzY1NDIsMzY1NDMsMzY1NDQsMzY1NDUsMzY1NDYsMzY1NDcsMzY1NDgsMzY1NDksMzY1NTAsMzY1NTEsMzY1NTIsMzY1NTMsMzY1NTQs''@;'; put 'put ''MzY1NTUsMzY1NTYsMzY1NTcsMzY1NTksMzY1NjAsMzY1NjEsMzY1NjIsMzY1NjMsMzY1NjQsMzY1NjUsMzY1NjYsMzY1NjcsMzY1NjgsMzY1NjksMzY1NzAsMzY1NzEsMzY1NzIsMzY1NzMsMzY1NzQsMzY1NzUsMzY1NzYsMzY1NzcsMzY1NzgsMzY1NzksMzY1ODAsMjI1MzksMjI1NDEsMjI1''@;'; put 'put ''MjUsMjI1MDksMjI1MjgsMjI1NTgsMjI1NTMsMjI1OTYsMjI1NjAsMjI2MjksMjI2MzYsMjI2NTcsMjI2NjUsMjI2ODIsMjI2NTYsMzkzMzYsNDA3MjksMjUwODcsMzM0MDEsMzM0MDUsMzM0MDcsMzM0MjMsMzM0MTgsMzM0NDgsMzM0MTIsMzM0MjIsMzM0MjUsMzM0MzEsMzM0MzMsMzM0NTEs''@;'; put 'put ''MzM0NjQsMzM0NzAsMzM0NTYsMzM0ODAsMzM0ODIsMzM1MDcsMzM0MzIsMzM0NjMsMzM0NTQsMzM0ODMsMzM0ODQsMzM0NzMsMzM0NDksMzM0NjAsMzM0NDEsMzM0NTAsMzM0MzksMzM0NzYsMzM0ODYsMzM0NDQsMzM1MDUsMzM1NDUsMzM1MjcsMzM1MDgsMzM1NTEsMzM1NDMsMzM1MDAsMzM1''@;'; put 'put ''MjQsMzM0OTAsMzM0OTYsMzM1NDgsMzM1MzEsMzM0OTEsMzM1NTMsMzM1NjIsMzM1NDIsMzM1NTYsMzM1NTcsMzM1MDQsMzM0OTMsMzM1NjQsMzM2MTcsMzM2MjcsMzM2MjgsMzM1NDQsMzM2ODIsMzM1OTYsMzM1ODgsMzM1ODUsMzM2OTEsMzM2MzAsMzM1ODMsMzM2MTUsMzM2MDcsMzM2MDMs''@;'; put 'put ''MzM2MzEsMzM2MDAsMzM1NTksMzM2MzIsMzM1ODEsMzM1OTQsMzM1ODcsMzM2MzgsMzM2MzcsMzY1ODEsMzY1ODIsMzY1ODMsMzY1ODQsMzY1ODUsMzY1ODYsMzY1ODcsMzY1ODgsMzY1ODksMzY1OTAsMzY1OTEsMzY1OTIsMzY1OTMsMzY1OTQsMzY1OTUsMzY1OTYsMzY1OTcsMzY1OTgsMzY1''@;'; put 'put ''OTksMzY2MDAsMzY2MDEsMzY2MDIsMzY2MDMsMzY2MDQsMzY2MDUsMzY2MDYsMzY2MDcsMzY2MDgsMzY2MDksMzY2MTAsMzY2MTEsMzY2MTIsMzY2MTMsMzY2MTQsMzY2MTUsMzY2MTYsMzY2MTcsMzY2MTgsMzY2MTksMzY2MjAsMzY2MjEsMzY2MjIsMzY2MjMsMzY2MjQsMzY2MjUsMzY2MjYs''@;'; put 'put ''MzY2MjcsMzY2MjgsMzY2MjksMzY2MzAsMzY2MzEsMzY2MzIsMzY2MzMsMzY2MzQsMzY2MzUsMzY2MzYsMzY2MzcsMzY2MzgsMzY2MzksMzY2NDAsMzY2NDEsMzY2NDIsMzY2NDMsMzY2NDQsMzY2NDUsMzY2NDYsMzY2NDcsMzY2NDgsMzY2NDksMzY2NTAsMzY2NTEsMzY2NTIsMzY2NTMsMzY2''@;'; put 'put ''NTQsMzY2NTUsMzY2NTYsMzY2NTcsMzY2NTgsMzY2NTksMzY2NjAsMzY2NjEsMzY2NjIsMzY2NjMsMzY2NjQsMzY2NjUsMzY2NjYsMzY2NjcsMzY2NjgsMzY2NjksMzY2NzAsMzY2NzEsMzY2NzIsMzY2NzMsMzY2NzQsMzY2NzUsMzY2NzYsMzM2NDAsMzM1NjMsMzM2NDEsMzM2NDQsMzM2NDIs''@;'; put 'put ''MzM2NDUsMzM2NDYsMzM3MTIsMzM2NTYsMzM3MTUsMzM3MTYsMzM2OTYsMzM3MDYsMzM2ODMsMzM2OTIsMzM2NjksMzM2NjAsMzM3MTgsMzM3MDUsMzM2NjEsMzM3MjAsMzM2NTksMzM2ODgsMzM2OTQsMzM3MDQsMzM3MjIsMzM3MjQsMzM3MjksMzM3OTMsMzM3NjUsMzM3NTIsMjI1MzUsMzM4''@;'; put 'put ''MTYsMzM4MDMsMzM3NTcsMzM3ODksMzM3NTAsMzM4MjAsMzM4NDgsMzM4MDksMzM3OTgsMzM3NDgsMzM3NTksMzM4MDcsMzM3OTUsMzM3ODQsMzM3ODUsMzM3NzAsMzM3MzMsMzM3MjgsMzM4MzAsMzM3NzYsMzM3NjEsMzM4ODQsMzM4NzMsMzM4ODIsMzM4ODEsMzM5MDcsMzM5MjcsMzM5Mjgs''@;'; put 'put ''MzM5MTQsMzM5MjksMzM5MTIsMzM4NTIsMzM4NjIsMzM4OTcsMzM5MTAsMzM5MzIsMzM5MzQsMzM4NDEsMzM5MDEsMzM5ODUsMzM5OTcsMzRlMywzNDAyMiwzMzk4MSwzNDAwMywzMzk5NCwzMzk4MywzMzk3OCwzNDAxNiwzMzk1MywzMzk3NywzMzk3MiwzMzk0MywzNDAyMSwzNDAxOSwzNDA2''@;'; put 'put ''MCwyOTk2NSwzNDEwNCwzNDAzMiwzNDEwNSwzNDA3OSwzNDEwNiwzNjY3NywzNjY3OCwzNjY3OSwzNjY4MCwzNjY4MSwzNjY4MiwzNjY4MywzNjY4NCwzNjY4NSwzNjY4NiwzNjY4NywzNjY4OCwzNjY4OSwzNjY5MCwzNjY5MSwzNjY5MiwzNjY5MywzNjY5NCwzNjY5NSwzNjY5NiwzNjY5Nywz''@;'; put 'put ''NjY5OCwzNjY5OSwzNjcwMCwzNjcwMSwzNjcwMiwzNjcwMywzNjcwNCwzNjcwNSwzNjcwNiwzNjcwNywzNjcwOCwzNjcwOSwzNjcxNCwzNjczNiwzNjc0OCwzNjc1NCwzNjc2NSwzNjc2OCwzNjc2OSwzNjc3MCwzNjc3MiwzNjc3MywzNjc3NCwzNjc3NSwzNjc3OCwzNjc4MCwzNjc4MSwzNjc4''@;'; put 'put ''MiwzNjc4MywzNjc4NiwzNjc4NywzNjc4OCwzNjc4OSwzNjc5MSwzNjc5MiwzNjc5NCwzNjc5NSwzNjc5NiwzNjc5OSwzNjgwMCwzNjgwMywzNjgwNiwzNjgwOSwzNjgxMCwzNjgxMSwzNjgxMiwzNjgxMywzNjgxNSwzNjgxOCwzNjgyMiwzNjgyMywzNjgyNiwzNjgzMiwzNjgzMywzNjgzNSwz''@;'; put 'put ''NjgzOSwzNjg0NCwzNjg0NywzNjg0OSwzNjg1MCwzNjg1MiwzNjg1MywzNjg1NCwzNjg1OCwzNjg1OSwzNjg2MCwzNjg2MiwzNjg2MywzNjg3MSwzNjg3MiwzNjg3NiwzNjg3OCwzNjg4MywzNjg4NSwzNjg4OCwzNDEzNCwzNDEwNywzNDA0NywzNDA0NCwzNDEzNywzNDEyMCwzNDE1MiwzNDE0''@;'; put 'put ''OCwzNDE0MiwzNDE3MCwzMDYyNiwzNDExNSwzNDE2MiwzNDE3MSwzNDIxMiwzNDIxNiwzNDE4MywzNDE5MSwzNDE2OSwzNDIyMiwzNDIwNCwzNDE4MSwzNDIzMywzNDIzMSwzNDIyNCwzNDI1OSwzNDI0MSwzNDI2OCwzNDMwMywzNDM0MywzNDMwOSwzNDM0NSwzNDMyNiwzNDM2NCwyNDMxOCwy''@;'; put 'put ''NDMyOCwyMjg0NCwyMjg0OSwzMjgyMywyMjg2OSwyMjg3NCwyMjg3MiwyMTI2MywyMzU4NiwyMzU4OSwyMzU5NiwyMzYwNCwyNTE2NCwyNTE5NCwyNTI0NywyNTI3NSwyNTI5MCwyNTMwNiwyNTMwMywyNTMyNiwyNTM3OCwyNTMzNCwyNTQwMSwyNTQxOSwyNTQxMSwyNTUxNywyNTU5MCwyNTQ1''@;'; put 'put ''NywyNTQ2NiwyNTQ4NiwyNTUyNCwyNTQ1MywyNTUxNiwyNTQ4MiwyNTQ0OSwyNTUxOCwyNTUzMiwyNTU4NiwyNTU5MiwyNTU2OCwyNTU5OSwyNTU0MCwyNTU2NiwyNTU1MCwyNTY4MiwyNTU0MiwyNTUzNCwyNTY2OSwyNTY2NSwyNTYxMSwyNTYyNywyNTYzMiwyNTYxMiwyNTYzOCwyNTYzMywy''@;'; put 'put ''NTY5NCwyNTczMiwyNTcwOSwyNTc1MCwzNjg4OSwzNjg5MiwzNjg5OSwzNjkwMCwzNjkwMSwzNjkwMywzNjkwNCwzNjkwNSwzNjkwNiwzNjkwNywzNjkwOCwzNjkxMiwzNjkxMywzNjkxNCwzNjkxNSwzNjkxNiwzNjkxOSwzNjkyMSwzNjkyMiwzNjkyNSwzNjkyNywzNjkyOCwzNjkzMSwzNjkz''@;'; put 'put ''MywzNjkzNCwzNjkzNiwzNjkzNywzNjkzOCwzNjkzOSwzNjk0MCwzNjk0MiwzNjk0OCwzNjk0OSwzNjk1MCwzNjk1MywzNjk1NCwzNjk1NiwzNjk1NywzNjk1OCwzNjk1OSwzNjk2MCwzNjk2MSwzNjk2NCwzNjk2NiwzNjk2NywzNjk2OSwzNjk3MCwzNjk3MSwzNjk3MiwzNjk3NSwzNjk3Niwz''@;'; put 'put ''Njk3NywzNjk3OCwzNjk3OSwzNjk4MiwzNjk4MywzNjk4NCwzNjk4NSwzNjk4NiwzNjk4NywzNjk4OCwzNjk5MCwzNjk5MywzNjk5NiwzNjk5NywzNjk5OCwzNjk5OSwzNzAwMSwzNzAwMiwzNzAwNCwzNzAwNSwzNzAwNiwzNzAwNywzNzAwOCwzNzAxMCwzNzAxMiwzNzAxNCwzNzAxNiwzNzAx''@;'; put 'put ''OCwzNzAyMCwzNzAyMiwzNzAyMywzNzAyNCwzNzAyOCwzNzAyOSwzNzAzMSwzNzAzMiwzNzAzMywzNzAzNSwzNzAzNywzNzA0MiwzNzA0NywzNzA1MiwzNzA1MywzNzA1NSwzNzA1NiwyNTcyMiwyNTc4MywyNTc4NCwyNTc1MywyNTc4NiwyNTc5MiwyNTgwOCwyNTgxNSwyNTgyOCwyNTgyNiwy''@;'; put 'put ''NTg2NSwyNTg5MywyNTkwMiwyNDMzMSwyNDUzMCwyOTk3NywyNDMzNywyMTM0MywyMTQ4OSwyMTUwMSwyMTQ4MSwyMTQ4MCwyMTQ5OSwyMTUyMiwyMTUyNiwyMTUxMCwyMTU3OSwyMTU4NiwyMTU4NywyMTU4OCwyMTU5MCwyMTU3MSwyMTUzNywyMTU5MSwyMTU5MywyMTUzOSwyMTU1NCwyMTYz''@;'; put 'put ''NCwyMTY1MiwyMTYyMywyMTYxNywyMTYwNCwyMTY1OCwyMTY1OSwyMTYzNiwyMTYyMiwyMTYwNiwyMTY2MSwyMTcxMiwyMTY3NywyMTY5OCwyMTY4NCwyMTcxNCwyMTY3MSwyMTY3MCwyMTcxNSwyMTcxNiwyMTYxOCwyMTY2NywyMTcxNywyMTY5MSwyMTY5NSwyMTcwOCwyMTcyMSwyMTcyMiwy''@;'; put 'put ''MTcyNCwyMTY3MywyMTY3NCwyMTY2OCwyMTcyNSwyMTcxMSwyMTcyNiwyMTc4NywyMTczNSwyMTc5MiwyMTc1NywyMTc4MCwyMTc0NywyMTc5NCwyMTc5NSwyMTc3NSwyMTc3NywyMTc5OSwyMTgwMiwyMTg2MywyMTkwMywyMTk0MSwyMTgzMywyMTg2OSwyMTgyNSwyMTg0NSwyMTgyMywyMTg0''@;'; put 'put ''MCwyMTgyMCwzNzA1OCwzNzA1OSwzNzA2MiwzNzA2NCwzNzA2NSwzNzA2NywzNzA2OCwzNzA2OSwzNzA3NCwzNzA3NiwzNzA3NywzNzA3OCwzNzA4MCwzNzA4MSwzNzA4MiwzNzA4NiwzNzA4NywzNzA4OCwzNzA5MSwzNzA5MiwzNzA5MywzNzA5NywzNzA5OCwzNzEwMCwzNzEwMiwzNzEwNCwz''@;'; put 'put ''NzEwNSwzNzEwNiwzNzEwNywzNzEwOSwzNzExMCwzNzExMSwzNzExMywzNzExNCwzNzExNSwzNzExNiwzNzExOSwzNzEyMCwzNzEyMSwzNzEyMywzNzEyNSwzNzEyNiwzNzEyNywzNzEyOCwzNzEyOSwzNzEzMCwzNzEzMSwzNzEzMiwzNzEzMywzNzEzNCwzNzEzNSwzNzEzNiwzNzEzNywzNzEz''@;'; put 'put ''OCwzNzEzOSwzNzE0MCwzNzE0MSwzNzE0MiwzNzE0MywzNzE0NCwzNzE0NiwzNzE0NywzNzE0OCwzNzE0OSwzNzE1MSwzNzE1MiwzNzE1MywzNzE1NiwzNzE1NywzNzE1OCwzNzE1OSwzNzE2MCwzNzE2MSwzNzE2MiwzNzE2MywzNzE2NCwzNzE2NSwzNzE2NiwzNzE2OCwzNzE3MCwzNzE3MSwz''@;'; put 'put ''NzE3MiwzNzE3MywzNzE3NCwzNzE3NSwzNzE3NiwzNzE3OCwzNzE3OSwzNzE4MCwzNzE4MSwzNzE4MiwzNzE4MywzNzE4NCwzNzE4NSwzNzE4NiwzNzE4OCwyMTgxNSwyMTg0NiwyMTg3NywyMTg3OCwyMTg3OSwyMTgxMSwyMTgwOCwyMTg1MiwyMTg5OSwyMTk3MCwyMTg5MSwyMTkzNywyMTk0''@;'; put 'put ''NSwyMTg5NiwyMTg4OSwyMTkxOSwyMTg4NiwyMTk3NCwyMTkwNSwyMTg4MywyMTk4MywyMTk0OSwyMTk1MCwyMTkwOCwyMTkxMywyMTk5NCwyMjAwNywyMTk2MSwyMjA0NywyMTk2OSwyMTk5NSwyMTk5NiwyMTk3MiwyMTk5MCwyMTk4MSwyMTk1NiwyMTk5OSwyMTk4OSwyMjAwMiwyMjAwMywy''@;'; put 'put ''MTk2NCwyMTk2NSwyMTk5MiwyMjAwNSwyMTk4OCwzNjc1NiwyMjA0NiwyMjAyNCwyMjAyOCwyMjAxNywyMjA1MiwyMjA1MSwyMjAxNCwyMjAxNiwyMjA1NSwyMjA2MSwyMjEwNCwyMjA3MywyMjEwMywyMjA2MCwyMjA5MywyMjExNCwyMjEwNSwyMjEwOCwyMjA5MiwyMjEwMCwyMjE1MCwyMjEx''@;'; put 'put ''NiwyMjEyOSwyMjEyMywyMjEzOSwyMjE0MCwyMjE0OSwyMjE2MywyMjE5MSwyMjIyOCwyMjIzMSwyMjIzNywyMjI0MSwyMjI2MSwyMjI1MSwyMjI2NSwyMjI3MSwyMjI3NiwyMjI4MiwyMjI4MSwyMjMwMCwyNDA3OSwyNDA4OSwyNDA4NCwyNDA4MSwyNDExMywyNDEyMywyNDEyNCwzNzE4OSwz''@;'; put 'put ''NzE5MSwzNzE5MiwzNzIwMSwzNzIwMywzNzIwNCwzNzIwNSwzNzIwNiwzNzIwOCwzNzIwOSwzNzIxMSwzNzIxMiwzNzIxNSwzNzIxNiwzNzIyMiwzNzIyMywzNzIyNCwzNzIyNywzNzIyOSwzNzIzNSwzNzI0MiwzNzI0MywzNzI0NCwzNzI0OCwzNzI0OSwzNzI1MCwzNzI1MSwzNzI1MiwzNzI1''@;'; put 'put ''NCwzNzI1NiwzNzI1OCwzNzI2MiwzNzI2MywzNzI2NywzNzI2OCwzNzI2OSwzNzI3MCwzNzI3MSwzNzI3MiwzNzI3MywzNzI3NiwzNzI3NywzNzI3OCwzNzI3OSwzNzI4MCwzNzI4MSwzNzI4NCwzNzI4NSwzNzI4NiwzNzI4NywzNzI4OCwzNzI4OSwzNzI5MSwzNzI5MiwzNzI5NiwzNzI5Nywz''@;'; put 'put ''NzI5OCwzNzI5OSwzNzMwMiwzNzMwMywzNzMwNCwzNzMwNSwzNzMwNywzNzMwOCwzNzMwOSwzNzMxMCwzNzMxMSwzNzMxMiwzNzMxMywzNzMxNCwzNzMxNSwzNzMxNiwzNzMxNywzNzMxOCwzNzMyMCwzNzMyMywzNzMyOCwzNzMzMCwzNzMzMSwzNzMzMiwzNzMzMywzNzMzNCwzNzMzNSwzNzMz''@;'; put 'put ''NiwzNzMzNywzNzMzOCwzNzMzOSwzNzM0MSwzNzM0MiwzNzM0MywzNzM0NCwzNzM0NSwzNzM0NiwzNzM0NywzNzM0OCwzNzM0OSwyNDExOSwyNDEzMiwyNDE0OCwyNDE1NSwyNDE1OCwyNDE2MSwyMzY5MiwyMzY3NCwyMzY5MywyMzY5NiwyMzcwMiwyMzY4OCwyMzcwNCwyMzcwNSwyMzY5Nywy''@;'; put 'put ''MzcwNiwyMzcwOCwyMzczMywyMzcxNCwyMzc0MSwyMzcyNCwyMzcyMywyMzcyOSwyMzcxNSwyMzc0NSwyMzczNSwyMzc0OCwyMzc2MiwyMzc4MCwyMzc1NSwyMzc4MSwyMzgxMCwyMzgxMSwyMzg0NywyMzg0NiwyMzg1NCwyMzg0NCwyMzgzOCwyMzgxNCwyMzgzNSwyMzg5NiwyMzg3MCwyMzg2''@;'; put 'put ''MCwyMzg2OSwyMzkxNiwyMzg5OSwyMzkxOSwyMzkwMSwyMzkxNSwyMzg4MywyMzg4MiwyMzkxMywyMzkyNCwyMzkzOCwyMzk2MSwyMzk2NSwzNTk1NSwyMzk5MSwyNDAwNSwyNDQzNSwyNDQzOSwyNDQ1MCwyNDQ1NSwyNDQ1NywyNDQ2MCwyNDQ2OSwyNDQ3MywyNDQ3NiwyNDQ4OCwyNDQ5Mywy''@;'; put 'put ''NDUwMSwyNDUwOCwzNDkxNCwyNDQxNywyOTM1NywyOTM2MCwyOTM2NCwyOTM2NywyOTM2OCwyOTM3OSwyOTM3NywyOTM5MCwyOTM4OSwyOTM5NCwyOTQxNiwyOTQyMywyOTQxNywyOTQyNiwyOTQyOCwyOTQzMSwyOTQ0MSwyOTQyNywyOTQ0MywyOTQzNCwzNzM1MCwzNzM1MSwzNzM1MiwzNzM1''@;'; put 'put ''MywzNzM1NCwzNzM1NSwzNzM1NiwzNzM1NywzNzM1OCwzNzM1OSwzNzM2MCwzNzM2MSwzNzM2MiwzNzM2MywzNzM2NCwzNzM2NSwzNzM2NiwzNzM2NywzNzM2OCwzNzM2OSwzNzM3MCwzNzM3MSwzNzM3MiwzNzM3MywzNzM3NCwzNzM3NSwzNzM3NiwzNzM3NywzNzM3OCwzNzM3OSwzNzM4MCwz''@;'; put 'put ''NzM4MSwzNzM4MiwzNzM4MywzNzM4NCwzNzM4NSwzNzM4NiwzNzM4NywzNzM4OCwzNzM4OSwzNzM5MCwzNzM5MSwzNzM5MiwzNzM5MywzNzM5NCwzNzM5NSwzNzM5NiwzNzM5NywzNzM5OCwzNzM5OSwzNzQwMCwzNzQwMSwzNzQwMiwzNzQwMywzNzQwNCwzNzQwNSwzNzQwNiwzNzQwNywzNzQw''@;'; put 'put ''OCwzNzQwOSwzNzQxMCwzNzQxMSwzNzQxMiwzNzQxMywzNzQxNCwzNzQxNSwzNzQxNiwzNzQxNywzNzQxOCwzNzQxOSwzNzQyMCwzNzQyMSwzNzQyMiwzNzQyMywzNzQyNCwzNzQyNSwzNzQyNiwzNzQyNywzNzQyOCwzNzQyOSwzNzQzMCwzNzQzMSwzNzQzMiwzNzQzMywzNzQzNCwzNzQzNSwz''@;'; put 'put ''NzQzNiwzNzQzNywzNzQzOCwzNzQzOSwzNzQ0MCwzNzQ0MSwzNzQ0MiwzNzQ0MywzNzQ0NCwzNzQ0NSwyOTQzNSwyOTQ2MywyOTQ1OSwyOTQ3MywyOTQ1MCwyOTQ3MCwyOTQ2OSwyOTQ2MSwyOTQ3NCwyOTQ5NywyOTQ3NywyOTQ4NCwyOTQ5NiwyOTQ4OSwyOTUyMCwyOTUxNywyOTUyNywyOTUz''@;'; put 'put ''NiwyOTU0OCwyOTU1MSwyOTU2NiwzMzMwNywyMjgyMSwzOTE0MywyMjgyMCwyMjc4NiwzOTI2NywzOTI3MSwzOTI3MiwzOTI3MywzOTI3NCwzOTI3NSwzOTI3NiwzOTI4NCwzOTI4NywzOTI5MywzOTI5NiwzOTMwMCwzOTMwMywzOTMwNiwzOTMwOSwzOTMxMiwzOTMxMywzOTMxNSwzOTMxNiwz''@;'; put 'put ''OTMxNywyNDE5MiwyNDIwOSwyNDIwMywyNDIxNCwyNDIyOSwyNDIyNCwyNDI0OSwyNDI0NSwyNDI1NCwyNDI0MywzNjE3OSwyNDI3NCwyNDI3MywyNDI4MywyNDI5NiwyNDI5OCwzMzIxMCwyNDUxNiwyNDUyMSwyNDUzNCwyNDUyNywyNDU3OSwyNDU1OCwyNDU4MCwyNDU0NSwyNDU0OCwyNDU3''@;'; put 'put ''NCwyNDU4MSwyNDU4MiwyNDU1NCwyNDU1NywyNDU2OCwyNDYwMSwyNDYyOSwyNDYxNCwyNDYwMywyNDU5MSwyNDU4OSwyNDYxNywyNDYxOSwyNDU4NiwyNDYzOSwyNDYwOSwyNDY5NiwyNDY5NywyNDY5OSwyNDY5OCwyNDY0MiwzNzQ0NiwzNzQ0NywzNzQ0OCwzNzQ0OSwzNzQ1MCwzNzQ1MSwz''@;'; put 'put ''NzQ1MiwzNzQ1MywzNzQ1NCwzNzQ1NSwzNzQ1NiwzNzQ1NywzNzQ1OCwzNzQ1OSwzNzQ2MCwzNzQ2MSwzNzQ2MiwzNzQ2MywzNzQ2NCwzNzQ2NSwzNzQ2NiwzNzQ2NywzNzQ2OCwzNzQ2OSwzNzQ3MCwzNzQ3MSwzNzQ3MiwzNzQ3MywzNzQ3NCwzNzQ3NSwzNzQ3NiwzNzQ3NywzNzQ3OCwzNzQ3''@;'; put 'put ''OSwzNzQ4MCwzNzQ4MSwzNzQ4MiwzNzQ4MywzNzQ4NCwzNzQ4NSwzNzQ4NiwzNzQ4NywzNzQ4OCwzNzQ4OSwzNzQ5MCwzNzQ5MSwzNzQ5MywzNzQ5NCwzNzQ5NSwzNzQ5NiwzNzQ5NywzNzQ5OCwzNzQ5OSwzNzUwMCwzNzUwMSwzNzUwMiwzNzUwMywzNzUwNCwzNzUwNSwzNzUwNiwzNzUwNywz''@;'; put 'put ''NzUwOCwzNzUwOSwzNzUxMCwzNzUxMSwzNzUxMiwzNzUxMywzNzUxNCwzNzUxNSwzNzUxNiwzNzUxNywzNzUxOSwzNzUyMCwzNzUyMSwzNzUyMiwzNzUyMywzNzUyNCwzNzUyNSwzNzUyNiwzNzUyNywzNzUyOCwzNzUyOSwzNzUzMCwzNzUzMSwzNzUzMiwzNzUzMywzNzUzNCwzNzUzNSwzNzUz''@;'; put 'put ''NiwzNzUzNywzNzUzOCwzNzUzOSwzNzU0MCwzNzU0MSwzNzU0MiwzNzU0MywyNDY4MiwyNDcwMSwyNDcyNiwyNDczMCwyNDc0OSwyNDczMywyNDcwNywyNDcyMiwyNDcxNiwyNDczMSwyNDgxMiwyNDc2MywyNDc1MywyNDc5NywyNDc5MiwyNDc3NCwyNDc5NCwyNDc1NiwyNDg2NCwyNDg3MCwy''@;'; put 'put ''NDg1MywyNDg2NywyNDgyMCwyNDgzMiwyNDg0NiwyNDg3NSwyNDkwNiwyNDk0OSwyNTAwNCwyNDk4MCwyNDk5OSwyNTAxNSwyNTA0NCwyNTA3NywyNDU0MSwzODU3OSwzODM3NywzODM3OSwzODM4NSwzODM4NywzODM4OSwzODM5MCwzODM5NiwzODM5OCwzODQwMywzODQwNCwzODQwNiwzODQw''@;'; put 'put ''OCwzODQxMCwzODQxMSwzODQxMiwzODQxMywzODQxNSwzODQxOCwzODQyMSwzODQyMiwzODQyMywzODQyNSwzODQyNiwyMDAxMiwyOTI0NywyNTEwOSwyNzcwMSwyNzczMiwyNzc0MCwyNzcyMiwyNzgxMSwyNzc4MSwyNzc5MiwyNzc5NiwyNzc4OCwyNzc1MiwyNzc1MywyNzc2NCwyNzc2Niwy''@;'; put 'put ''Nzc4MiwyNzgxNywyNzg1NiwyNzg2MCwyNzgyMSwyNzg5NSwyNzg5NiwyNzg4OSwyNzg2MywyNzgyNiwyNzg3MiwyNzg2MiwyNzg5OCwyNzg4MywyNzg4NiwyNzgyNSwyNzg1OSwyNzg4NywyNzkwMiwzNzU0NCwzNzU0NSwzNzU0NiwzNzU0NywzNzU0OCwzNzU0OSwzNzU1MSwzNzU1MiwzNzU1''@;'; put 'put ''MywzNzU1NCwzNzU1NSwzNzU1NiwzNzU1NywzNzU1OCwzNzU1OSwzNzU2MCwzNzU2MSwzNzU2MiwzNzU2MywzNzU2NCwzNzU2NSwzNzU2NiwzNzU2NywzNzU2OCwzNzU2OSwzNzU3MCwzNzU3MSwzNzU3MiwzNzU3MywzNzU3NCwzNzU3NSwzNzU3NywzNzU3OCwzNzU3OSwzNzU4MCwzNzU4MSwz''@;'; put 'put ''NzU4MiwzNzU4MywzNzU4NCwzNzU4NSwzNzU4NiwzNzU4NywzNzU4OCwzNzU4OSwzNzU5MCwzNzU5MSwzNzU5MiwzNzU5MywzNzU5NCwzNzU5NSwzNzU5NiwzNzU5NywzNzU5OCwzNzU5OSwzNzYwMCwzNzYwMSwzNzYwMiwzNzYwMywzNzYwNCwzNzYwNSwzNzYwNiwzNzYwNywzNzYwOCwzNzYw''@;'; put 'put ''OSwzNzYxMCwzNzYxMSwzNzYxMiwzNzYxMywzNzYxNCwzNzYxNSwzNzYxNiwzNzYxNywzNzYxOCwzNzYxOSwzNzYyMCwzNzYyMSwzNzYyMiwzNzYyMywzNzYyNCwzNzYyNSwzNzYyNiwzNzYyNywzNzYyOCwzNzYyOSwzNzYzMCwzNzYzMSwzNzYzMiwzNzYzMywzNzYzNCwzNzYzNSwzNzYzNiwz''@;'; put 'put ''NzYzNywzNzYzOCwzNzYzOSwzNzY0MCwzNzY0MSwyNzk2MSwyNzk0MywyNzkxNiwyNzk3MSwyNzk3NiwyNzkxMSwyNzkwOCwyNzkyOSwyNzkxOCwyNzk0NywyNzk4MSwyNzk1MCwyNzk1NywyNzkzMCwyNzk4MywyNzk4NiwyNzk4OCwyNzk1NSwyODA0OSwyODAxNSwyODA2MiwyODA2NCwyNzk5''@;'; put 'put ''OCwyODA1MSwyODA1MiwyNzk5NiwyOGUzLDI4MDI4LDI4MDAzLDI4MTg2LDI4MTAzLDI4MTAxLDI4MTI2LDI4MTc0LDI4MDk1LDI4MTI4LDI4MTc3LDI4MTM0LDI4MTI1LDI4MTIxLDI4MTgyLDI4MDc1LDI4MTcyLDI4MDc4LDI4MjAzLDI4MjcwLDI4MjM4LDI4MjY3LDI4MzM4LDI4MjU1LDI4''@;'; put 'put ''Mjk0LDI4MjQzLDI4MjQ0LDI4MjEwLDI4MTk3LDI4MjI4LDI4MzgzLDI4MzM3LDI4MzEyLDI4Mzg0LDI4NDYxLDI4Mzg2LDI4MzI1LDI4MzI3LDI4MzQ5LDI4MzQ3LDI4MzQzLDI4Mzc1LDI4MzQwLDI4MzY3LDI4MzAzLDI4MzU0LDI4MzE5LDI4NTE0LDI4NDg2LDI4NDg3LDI4NDUyLDI4NDM3''@;'; put 'put ''LDI4NDA5LDI4NDYzLDI4NDcwLDI4NDkxLDI4NTMyLDI4NDU4LDI4NDI1LDI4NDU3LDI4NTUzLDI4NTU3LDI4NTU2LDI4NTM2LDI4NTMwLDI4NTQwLDI4NTM4LDI4NjI1LDM3NjQyLDM3NjQzLDM3NjQ0LDM3NjQ1LDM3NjQ2LDM3NjQ3LDM3NjQ4LDM3NjQ5LDM3NjUwLDM3NjUxLDM3NjUyLDM3''@;'; put 'put ''NjUzLDM3NjU0LDM3NjU1LDM3NjU2LDM3NjU3LDM3NjU4LDM3NjU5LDM3NjYwLDM3NjYxLDM3NjYyLDM3NjYzLDM3NjY0LDM3NjY1LDM3NjY2LDM3NjY3LDM3NjY4LDM3NjY5LDM3NjcwLDM3NjcxLDM3NjcyLDM3NjczLDM3Njc0LDM3Njc1LDM3Njc2LDM3Njc3LDM3Njc4LDM3Njc5LDM3Njgw''@;'; put 'put ''LDM3NjgxLDM3NjgyLDM3NjgzLDM3Njg0LDM3Njg1LDM3Njg2LDM3Njg3LDM3Njg4LDM3Njg5LDM3NjkwLDM3NjkxLDM3NjkyLDM3NjkzLDM3Njk1LDM3Njk2LDM3Njk3LDM3Njk4LDM3Njk5LDM3NzAwLDM3NzAxLDM3NzAyLDM3NzAzLDM3NzA0LDM3NzA1LDM3NzA2LDM3NzA3LDM3NzA4LDM3''@;'; put 'put ''NzA5LDM3NzEwLDM3NzExLDM3NzEyLDM3NzEzLDM3NzE0LDM3NzE1LDM3NzE2LDM3NzE3LDM3NzE4LDM3NzE5LDM3NzIwLDM3NzIxLDM3NzIyLDM3NzIzLDM3NzI0LDM3NzI1LDM3NzI2LDM3NzI3LDM3NzI4LDM3NzI5LDM3NzMwLDM3NzMxLDM3NzMyLDM3NzMzLDM3NzM0LDM3NzM1LDM3NzM2''@;'; put 'put ''LDM3NzM3LDM3NzM5LDI4NjE3LDI4NTgzLDI4NjAxLDI4NTk4LDI4NjEwLDI4NjQxLDI4NjU0LDI4NjM4LDI4NjQwLDI4NjU1LDI4Njk4LDI4NzA3LDI4Njk5LDI4NzI5LDI4NzI1LDI4NzUxLDI4NzY2LDIzNDI0LDIzNDI4LDIzNDQ1LDIzNDQzLDIzNDYxLDIzNDgwLDI5OTk5LDM5NTgyLDI1''@;'; put 'put ''NjUyLDIzNTI0LDIzNTM0LDM1MTIwLDIzNTM2LDM2NDIzLDM1NTkxLDM2NzkwLDM2ODE5LDM2ODIxLDM2ODM3LDM2ODQ2LDM2ODM2LDM2ODQxLDM2ODM4LDM2ODUxLDM2ODQwLDM2ODY5LDM2ODY4LDM2ODc1LDM2OTAyLDM2ODgxLDM2ODc3LDM2ODg2LDM2ODk3LDM2OTE3LDM2OTE4LDM2OTA5''@;'; put 'put ''LDM2OTExLDM2OTMyLDM2OTQ1LDM2OTQ2LDM2OTQ0LDM2OTY4LDM2OTUyLDM2OTYyLDM2OTU1LDI2Mjk3LDM2OTgwLDM2OTg5LDM2OTk0LDM3ZTMsMzY5OTUsMzcwMDMsMjQ0MDAsMjQ0MDcsMjQ0MDYsMjQ0MDgsMjM2MTEsMjE2NzUsMjM2MzIsMjM2NDEsMjM0MDksMjM2NTEsMjM2NTQsMzI3''@;'; put 'put ''MDAsMjQzNjIsMjQzNjEsMjQzNjUsMzMzOTYsMjQzODAsMzk3MzksMjM2NjIsMjI5MTMsMjI5MTUsMjI5MjUsMjI5NTMsMjI5NTQsMjI5NDcsMzc3NDAsMzc3NDEsMzc3NDIsMzc3NDMsMzc3NDQsMzc3NDUsMzc3NDYsMzc3NDcsMzc3NDgsMzc3NDksMzc3NTAsMzc3NTEsMzc3NTIsMzc3NTMs''@;'; put 'put ''Mzc3NTQsMzc3NTUsMzc3NTYsMzc3NTcsMzc3NTgsMzc3NTksMzc3NjAsMzc3NjEsMzc3NjIsMzc3NjMsMzc3NjQsMzc3NjUsMzc3NjYsMzc3NjcsMzc3NjgsMzc3NjksMzc3NzAsMzc3NzEsMzc3NzIsMzc3NzMsMzc3NzQsMzc3NzYsMzc3NzcsMzc3NzgsMzc3NzksMzc3ODAsMzc3ODEsMzc3''@;'; put 'put ''ODIsMzc3ODMsMzc3ODQsMzc3ODUsMzc3ODYsMzc3ODcsMzc3ODgsMzc3ODksMzc3OTAsMzc3OTEsMzc3OTIsMzc3OTMsMzc3OTQsMzc3OTUsMzc3OTYsMzc3OTcsMzc3OTgsMzc3OTksMzc4MDAsMzc4MDEsMzc4MDIsMzc4MDMsMzc4MDQsMzc4MDUsMzc4MDYsMzc4MDcsMzc4MDgsMzc4MDks''@;'; put 'put ''Mzc4MTAsMzc4MTEsMzc4MTIsMzc4MTMsMzc4MTQsMzc4MTUsMzc4MTYsMzc4MTcsMzc4MTgsMzc4MTksMzc4MjAsMzc4MjEsMzc4MjIsMzc4MjMsMzc4MjQsMzc4MjUsMzc4MjYsMzc4MjcsMzc4MjgsMzc4MjksMzc4MzAsMzc4MzEsMzc4MzIsMzc4MzMsMzc4MzUsMzc4MzYsMzc4MzcsMjI5''@;'; put 'put ''MzUsMjI5ODYsMjI5NTUsMjI5NDIsMjI5NDgsMjI5OTQsMjI5NjIsMjI5NTksMjI5OTksMjI5NzQsMjMwNDUsMjMwNDYsMjMwMDUsMjMwNDgsMjMwMTEsMjNlMywyMzAzMywyMzA1MiwyMzA0OSwyMzA5MCwyMzA5MiwyMzA1NywyMzA3NSwyMzA1OSwyMzEwNCwyMzE0MywyMzExNCwyMzEyNSwy''@;'; put 'put ''MzEwMCwyMzEzOCwyMzE1NywzMzAwNCwyMzIxMCwyMzE5NSwyMzE1OSwyMzE2MiwyMzIzMCwyMzI3NSwyMzIxOCwyMzI1MCwyMzI1MiwyMzIyNCwyMzI2NCwyMzI2NywyMzI4MSwyMzI1NCwyMzI3MCwyMzI1NiwyMzI2MCwyMzMwNSwyMzMxOSwyMzMxOCwyMzM0NiwyMzM1MSwyMzM2MCwyMzU3''@;'; put 'put ''MywyMzU4MCwyMzM4NiwyMzM5NywyMzQxMSwyMzM3NywyMzM3OSwyMzM5NCwzOTU0MSwzOTU0MywzOTU0NCwzOTU0NiwzOTU1MSwzOTU0OSwzOTU1MiwzOTU1MywzOTU1NywzOTU2MCwzOTU2MiwzOTU2OCwzOTU3MCwzOTU3MSwzOTU3NCwzOTU3NiwzOTU3OSwzOTU4MCwzOTU4MSwzOTU4Mywz''@;'; put 'put ''OTU4NCwzOTU4NiwzOTU4NywzOTU4OSwzOTU5MSwzMjQxNSwzMjQxNywzMjQxOSwzMjQyMSwzMjQyNCwzMjQyNSwzNzgzOCwzNzgzOSwzNzg0MCwzNzg0MSwzNzg0MiwzNzg0MywzNzg0NCwzNzg0NSwzNzg0NywzNzg0OCwzNzg0OSwzNzg1MCwzNzg1MSwzNzg1MiwzNzg1MywzNzg1NCwzNzg1''@;'; put 'put ''NSwzNzg1NiwzNzg1NywzNzg1OCwzNzg1OSwzNzg2MCwzNzg2MSwzNzg2MiwzNzg2MywzNzg2NCwzNzg2NSwzNzg2NiwzNzg2NywzNzg2OCwzNzg2OSwzNzg3MCwzNzg3MSwzNzg3MiwzNzg3MywzNzg3NCwzNzg3NSwzNzg3NiwzNzg3NywzNzg3OCwzNzg3OSwzNzg4MCwzNzg4MSwzNzg4Miwz''@;'; put 'put ''Nzg4MywzNzg4NCwzNzg4NSwzNzg4NiwzNzg4NywzNzg4OCwzNzg4OSwzNzg5MCwzNzg5MSwzNzg5MiwzNzg5MywzNzg5NCwzNzg5NSwzNzg5NiwzNzg5NywzNzg5OCwzNzg5OSwzNzkwMCwzNzkwMSwzNzkwMiwzNzkwMywzNzkwNCwzNzkwNSwzNzkwNiwzNzkwNywzNzkwOCwzNzkwOSwzNzkx''@;'; put 'put ''MCwzNzkxMSwzNzkxMiwzNzkxMywzNzkxNCwzNzkxNSwzNzkxNiwzNzkxNywzNzkxOCwzNzkxOSwzNzkyMCwzNzkyMSwzNzkyMiwzNzkyMywzNzkyNCwzNzkyNSwzNzkyNiwzNzkyNywzNzkyOCwzNzkyOSwzNzkzMCwzNzkzMSwzNzkzMiwzNzkzMywzNzkzNCwzMjQyOSwzMjQzMiwzMjQ0Niwz''@;'; put 'put ''MjQ0OCwzMjQ0OSwzMjQ1MCwzMjQ1NywzMjQ1OSwzMjQ2MCwzMjQ2NCwzMjQ2OCwzMjQ3MSwzMjQ3NSwzMjQ4MCwzMjQ4MSwzMjQ4OCwzMjQ5MSwzMjQ5NCwzMjQ5NSwzMjQ5NywzMjQ5OCwzMjUyNSwzMjUwMiwzMjUwNiwzMjUwNywzMjUxMCwzMjUxMywzMjUxNCwzMjUxNSwzMjUxOSwzMjUy''@;'; put 'put ''MCwzMjUyMywzMjUyNCwzMjUyNywzMjUyOSwzMjUzMCwzMjUzNSwzMjUzNywzMjU0MCwzMjUzOSwzMjU0MywzMjU0NSwzMjU0NiwzMjU0NywzMjU0OCwzMjU0OSwzMjU1MCwzMjU1MSwzMjU1NCwzMjU1NSwzMjU1NiwzMjU1NywzMjU1OSwzMjU2MCwzMjU2MSwzMjU2MiwzMjU2MywzMjU2NSwy''@;'; put 'put ''NDE4NiwzMDA3OSwyNDAyNywzMDAxNCwzNzAxMywyOTU4MiwyOTU4NSwyOTYxNCwyOTYwMiwyOTU5OSwyOTY0NywyOTYzNCwyOTY0OSwyOTYyMywyOTYxOSwyOTYzMiwyOTY0MSwyOTY0MCwyOTY2OSwyOTY1NywzOTAzNiwyOTcwNiwyOTY3MywyOTY3MSwyOTY2MiwyOTYyNiwyOTY4MiwyOTcx''@;'; put 'put ''MSwyOTczOCwyOTc4NywyOTczNCwyOTczMywyOTczNiwyOTc0NCwyOTc0MiwyOTc0MCwzNzkzNSwzNzkzNiwzNzkzNywzNzkzOCwzNzkzOSwzNzk0MCwzNzk0MSwzNzk0MiwzNzk0MywzNzk0NCwzNzk0NSwzNzk0NiwzNzk0NywzNzk0OCwzNzk0OSwzNzk1MSwzNzk1MiwzNzk1MywzNzk1NCwz''@;'; put 'put ''Nzk1NSwzNzk1NiwzNzk1NywzNzk1OCwzNzk1OSwzNzk2MCwzNzk2MSwzNzk2MiwzNzk2MywzNzk2NCwzNzk2NSwzNzk2NiwzNzk2NywzNzk2OCwzNzk2OSwzNzk3MCwzNzk3MSwzNzk3MiwzNzk3MywzNzk3NCwzNzk3NSwzNzk3NiwzNzk3NywzNzk3OCwzNzk3OSwzNzk4MCwzNzk4MSwzNzk4''@;'; put 'put ''MiwzNzk4MywzNzk4NCwzNzk4NSwzNzk4NiwzNzk4NywzNzk4OCwzNzk4OSwzNzk5MCwzNzk5MSwzNzk5MiwzNzk5MywzNzk5NCwzNzk5NiwzNzk5NywzNzk5OCwzNzk5OSwzOGUzLDM4MDAxLDM4MDAyLDM4MDAzLDM4MDA0LDM4MDA1LDM4MDA2LDM4MDA3LDM4MDA4LDM4MDA5LDM4MDEwLDM4''@;'; put 'put ''MDExLDM4MDEyLDM4MDEzLDM4MDE0LDM4MDE1LDM4MDE2LDM4MDE3LDM4MDE4LDM4MDE5LDM4MDIwLDM4MDMzLDM4MDM4LDM4MDQwLDM4MDg3LDM4MDk1LDM4MDk5LDM4MTAwLDM4MTA2LDM4MTE4LDM4MTM5LDM4MTcyLDM4MTc2LDI5NzIzLDI5NzIyLDI5NzYxLDI5Nzg4LDI5NzgzLDI5Nzgx''@;'; put 'put ''LDI5Nzg1LDI5ODE1LDI5ODA1LDI5ODIyLDI5ODUyLDI5ODM4LDI5ODI0LDI5ODI1LDI5ODMxLDI5ODM1LDI5ODU0LDI5ODY0LDI5ODY1LDI5ODQwLDI5ODYzLDI5OTA2LDI5ODgyLDM4ODkwLDM4ODkxLDM4ODkyLDI2NDQ0LDI2NDUxLDI2NDYyLDI2NDQwLDI2NDczLDI2NTMzLDI2NTAzLDI2''@;'; put 'put ''NDc0LDI2NDgzLDI2NTIwLDI2NTM1LDI2NDg1LDI2NTM2LDI2NTI2LDI2NTQxLDI2NTA3LDI2NDg3LDI2NDkyLDI2NjA4LDI2NjMzLDI2NTg0LDI2NjM0LDI2NjAxLDI2NTQ0LDI2NjM2LDI2NTg1LDI2NTQ5LDI2NTg2LDI2NTQ3LDI2NTg5LDI2NjI0LDI2NTYzLDI2NTUyLDI2NTk0LDI2NjM4''@;'; put 'put ''LDI2NTYxLDI2NjIxLDI2Njc0LDI2Njc1LDI2NzIwLDI2NzIxLDI2NzAyLDI2NzIyLDI2NjkyLDI2NzI0LDI2NzU1LDI2NjUzLDI2NzA5LDI2NzI2LDI2Njg5LDI2NzI3LDI2Njg4LDI2Njg2LDI2Njk4LDI2Njk3LDI2NjY1LDI2ODA1LDI2NzY3LDI2NzQwLDI2NzQzLDI2NzcxLDI2NzMxLDI2''@;'; put 'put ''ODE4LDI2OTkwLDI2ODc2LDI2OTExLDI2OTEyLDI2ODczLDM4MTgzLDM4MTk1LDM4MjA1LDM4MjExLDM4MjE2LDM4MjE5LDM4MjI5LDM4MjM0LDM4MjQwLDM4MjU0LDM4MjYwLDM4MjYxLDM4MjYzLDM4MjY0LDM4MjY1LDM4MjY2LDM4MjY3LDM4MjY4LDM4MjY5LDM4MjcwLDM4MjcyLDM4Mjcz''@;'; put 'put ''LDM4Mjc0LDM4Mjc1LDM4Mjc2LDM4Mjc3LDM4Mjc4LDM4Mjc5LDM4MjgwLDM4MjgxLDM4MjgyLDM4MjgzLDM4Mjg0LDM4Mjg1LDM4Mjg2LDM4Mjg3LDM4Mjg4LDM4Mjg5LDM4MjkwLDM4MjkxLDM4MjkyLDM4MjkzLDM4Mjk0LDM4Mjk1LDM4Mjk2LDM4Mjk3LDM4Mjk4LDM4Mjk5LDM4MzAwLDM4''@;'; put 'put ''MzAxLDM4MzAyLDM4MzAzLDM4MzA0LDM4MzA1LDM4MzA2LDM4MzA3LDM4MzA4LDM4MzA5LDM4MzEwLDM4MzExLDM4MzEyLDM4MzEzLDM4MzE0LDM4MzE1LDM4MzE2LDM4MzE3LDM4MzE4LDM4MzE5LDM4MzIwLDM4MzIxLDM4MzIyLDM4MzIzLDM4MzI0LDM4MzI1LDM4MzI2LDM4MzI3LDM4MzI4''@;'; put 'put ''LDM4MzI5LDM4MzMwLDM4MzMxLDM4MzMyLDM4MzMzLDM4MzM0LDM4MzM1LDM4MzM2LDM4MzM3LDM4MzM4LDM4MzM5LDM4MzQwLDM4MzQxLDM4MzQyLDM4MzQzLDM4MzQ0LDM4MzQ1LDM4MzQ2LDM4MzQ3LDI2OTE2LDI2ODY0LDI2ODkxLDI2ODgxLDI2OTY3LDI2ODUxLDI2ODk2LDI2OTkzLDI2''@;'; put 'put ''OTM3LDI2OTc2LDI2OTQ2LDI2OTczLDI3MDEyLDI2OTg3LDI3MDA4LDI3MDMyLDI3ZTMsMjY5MzIsMjcwODQsMjcwMTUsMjcwMTYsMjcwODYsMjcwMTcsMjY5ODIsMjY5NzksMjcwMDEsMjcwMzUsMjcwNDcsMjcwNjcsMjcwNTEsMjcwNTMsMjcwOTIsMjcwNTcsMjcwNzMsMjcwODIsMjcxMDMs''@;'; put 'put ''MjcwMjksMjcxMDQsMjcwMjEsMjcxMzUsMjcxODMsMjcxMTcsMjcxNTksMjcxNjAsMjcyMzcsMjcxMjIsMjcyMDQsMjcxOTgsMjcyOTYsMjcyMTYsMjcyMjcsMjcxODksMjcyNzgsMjcyNTcsMjcxOTcsMjcxNzYsMjcyMjQsMjcyNjAsMjcyODEsMjcyODAsMjczMDUsMjcyODcsMjczMDcsMjk0''@;'; put 'put ''OTUsMjk1MjIsMjc1MjEsMjc1MjIsMjc1MjcsMjc1MjQsMjc1MzgsMjc1MzksMjc1MzMsMjc1NDYsMjc1NDcsMjc1NTMsMjc1NjIsMzY3MTUsMzY3MTcsMzY3MjEsMzY3MjIsMzY3MjMsMzY3MjUsMzY3MjYsMzY3MjgsMzY3MjcsMzY3MjksMzY3MzAsMzY3MzIsMzY3MzQsMzY3MzcsMzY3Mzgs''@;'; put 'put ''MzY3NDAsMzY3NDMsMzY3NDcsMzgzNDgsMzgzNDksMzgzNTAsMzgzNTEsMzgzNTIsMzgzNTMsMzgzNTQsMzgzNTUsMzgzNTYsMzgzNTcsMzgzNTgsMzgzNTksMzgzNjAsMzgzNjEsMzgzNjIsMzgzNjMsMzgzNjQsMzgzNjUsMzgzNjYsMzgzNjcsMzgzNjgsMzgzNjksMzgzNzAsMzgzNzEsMzgz''@;'; put 'put ''NzIsMzgzNzMsMzgzNzQsMzgzNzUsMzgzODAsMzgzOTksMzg0MDcsMzg0MTksMzg0MjQsMzg0MjcsMzg0MzAsMzg0MzIsMzg0MzUsMzg0MzYsMzg0MzcsMzg0MzgsMzg0MzksMzg0NDAsMzg0NDEsMzg0NDMsMzg0NDQsMzg0NDUsMzg0NDcsMzg0NDgsMzg0NTUsMzg0NTYsMzg0NTcsMzg0NTgs''@;'; put 'put ''Mzg0NjIsMzg0NjUsMzg0NjcsMzg0NzQsMzg0NzgsMzg0NzksMzg0ODEsMzg0ODIsMzg0ODMsMzg0ODYsMzg0ODcsMzg0ODgsMzg0ODksMzg0OTAsMzg0OTIsMzg0OTMsMzg0OTQsMzg0OTYsMzg0OTksMzg1MDEsMzg1MDIsMzg1MDcsMzg1MDksMzg1MTAsMzg1MTEsMzg1MTIsMzg1MTMsMzg1''@;'; put 'put ''MTUsMzg1MjAsMzg1MjEsMzg1MjIsMzg1MjMsMzg1MjQsMzg1MjUsMzg1MjYsMzg1MjcsMzg1MjgsMzg1MjksMzg1MzAsMzg1MzEsMzg1MzIsMzg1MzUsMzg1MzcsMzg1MzgsMzY3NDksMzY3NTAsMzY3NTEsMzY3NjAsMzY3NjIsMzY1NTgsMjUwOTksMjUxMTEsMjUxMTUsMjUxMTksMjUxMjIs''@;'; put 'put ''MjUxMjEsMjUxMjUsMjUxMjQsMjUxMzIsMzMyNTUsMjk5MzUsMjk5NDAsMjk5NTEsMjk5NjcsMjk5NjksMjk5NzEsMjU5MDgsMjYwOTQsMjYwOTUsMjYwOTYsMjYxMjIsMjYxMzcsMjY0ODIsMjYxMTUsMjYxMzMsMjYxMTIsMjg4MDUsMjYzNTksMjYxNDEsMjYxNjQsMjYxNjEsMjYxNjYsMjYx''@;'; put 'put ''NjUsMzI3NzQsMjYyMDcsMjYxOTYsMjYxNzcsMjYxOTEsMjYxOTgsMjYyMDksMjYxOTksMjYyMzEsMjYyNDQsMjYyNTIsMjYyNzksMjYyNjksMjYzMDIsMjYzMzEsMjYzMzIsMjYzNDIsMjYzNDUsMzYxNDYsMzYxNDcsMzYxNTAsMzYxNTUsMzYxNTcsMzYxNjAsMzYxNjUsMzYxNjYsMzYxNjgs''@;'; put 'put ''MzYxNjksMzYxNjcsMzYxNzMsMzYxODEsMzYxODUsMzUyNzEsMzUyNzQsMzUyNzUsMzUyNzYsMzUyNzgsMzUyNzksMzUyODAsMzUyODEsMjkyOTQsMjkzNDMsMjkyNzcsMjkyODYsMjkyOTUsMjkzMTAsMjkzMTEsMjkzMTYsMjkzMjMsMjkzMjUsMjkzMjcsMjkzMzAsMjUzNTIsMjUzOTQsMjU1''@;'; put 'put ''MjAsMzg1NDAsMzg1NDIsMzg1NDUsMzg1NDYsMzg1NDcsMzg1NDksMzg1NTAsMzg1NTQsMzg1NTUsMzg1NTcsMzg1NTgsMzg1NTksMzg1NjAsMzg1NjEsMzg1NjIsMzg1NjMsMzg1NjQsMzg1NjUsMzg1NjYsMzg1NjgsMzg1NjksMzg1NzAsMzg1NzEsMzg1NzIsMzg1NzMsMzg1NzQsMzg1NzUs''@;'; put 'put ''Mzg1NzcsMzg1NzgsMzg1ODAsMzg1ODEsMzg1ODMsMzg1ODQsMzg1ODYsMzg1ODcsMzg1OTEsMzg1OTQsMzg1OTUsMzg2MDAsMzg2MDIsMzg2MDMsMzg2MDgsMzg2MDksMzg2MTEsMzg2MTIsMzg2MTQsMzg2MTUsMzg2MTYsMzg2MTcsMzg2MTgsMzg2MTksMzg2MjAsMzg2MjEsMzg2MjIsMzg2''@;'; put 'put ''MjMsMzg2MjUsMzg2MjYsMzg2MjcsMzg2MjgsMzg2MjksMzg2MzAsMzg2MzEsMzg2MzUsMzg2MzYsMzg2MzcsMzg2MzgsMzg2NDAsMzg2NDEsMzg2NDIsMzg2NDQsMzg2NDUsMzg2NDgsMzg2NTAsMzg2NTEsMzg2NTIsMzg2NTMsMzg2NTUsMzg2NTgsMzg2NTksMzg2NjEsMzg2NjYsMzg2Njcs''@;'; put 'put ''Mzg2NjgsMzg2NzIsMzg2NzMsMzg2NzQsMzg2NzYsMzg2NzcsMzg2NzksMzg2ODAsMzg2ODEsMzg2ODIsMzg2ODMsMzg2ODUsMzg2ODcsMzg2ODgsMjU2NjMsMjU4MTYsMzI3NzIsMjc2MjYsMjc2MzUsMjc2NDUsMjc2MzcsMjc2NDEsMjc2NTMsMjc2NTUsMjc2NTQsMjc2NjEsMjc2NjksMjc2''@;'; put 'put ''NzIsMjc2NzMsMjc2NzQsMjc2ODEsMjc2ODksMjc2ODQsMjc2OTAsMjc2OTgsMjU5MDksMjU5NDEsMjU5NjMsMjkyNjEsMjkyNjYsMjkyNzAsMjkyMzIsMzQ0MDIsMjEwMTQsMzI5MjcsMzI5MjQsMzI5MTUsMzI5NTYsMjYzNzgsMzI5NTcsMzI5NDUsMzI5MzksMzI5NDEsMzI5NDgsMzI5NTEs''@;'; put 'put ''MzI5OTksMzNlMywzMzAwMSwzMzAwMiwzMjk4NywzMjk2MiwzMjk2NCwzMjk4NSwzMjk3MywzMjk4MywyNjM4NCwzMjk4OSwzMzAwMywzMzAwOSwzMzAxMiwzMzAwNSwzMzAzNywzMzAzOCwzMzAxMCwzMzAyMCwyNjM4OSwzMzA0MiwzNTkzMCwzMzA3OCwzMzA1NCwzMzA2OCwzMzA0OCwzMzA3''@;'; put 'put ''NCwzMzA5NiwzMzEwMCwzMzEwNywzMzE0MCwzMzExMywzMzExNCwzMzEzNywzMzEyMCwzMzEyOSwzMzE0OCwzMzE0OSwzMzEzMywzMzEyNywyMjYwNSwyMzIyMSwzMzE2MCwzMzE1NCwzMzE2OSwyODM3MywzMzE4NywzMzE5NCwzMzIyOCwyNjQwNiwzMzIyNiwzMzIxMSwzODY4OSwzODY5MCwz''@;'; put 'put ''ODY5MSwzODY5MiwzODY5MywzODY5NCwzODY5NSwzODY5NiwzODY5NywzODY5OSwzODcwMCwzODcwMiwzODcwMywzODcwNSwzODcwNywzODcwOCwzODcwOSwzODcxMCwzODcxMSwzODcxNCwzODcxNSwzODcxNiwzODcxNywzODcxOSwzODcyMCwzODcyMSwzODcyMiwzODcyMywzODcyNCwzODcy''@;'; put 'put ''NSwzODcyNiwzODcyNywzODcyOCwzODcyOSwzODczMCwzODczMSwzODczMiwzODczMywzODczNCwzODczNSwzODczNiwzODczNywzODc0MCwzODc0MSwzODc0MywzODc0NCwzODc0NiwzODc0OCwzODc0OSwzODc1MSwzODc1NSwzODc1NiwzODc1OCwzODc1OSwzODc2MCwzODc2MiwzODc2Mywz''@;'; put 'put ''ODc2NCwzODc2NSwzODc2NiwzODc2NywzODc2OCwzODc2OSwzODc3MCwzODc3MywzODc3NSwzODc3NiwzODc3NywzODc3OCwzODc3OSwzODc4MSwzODc4MiwzODc4MywzODc4NCwzODc4NSwzODc4NiwzODc4NywzODc4OCwzODc5MCwzODc5MSwzODc5MiwzODc5MywzODc5NCwzODc5NiwzODc5''@;'; put 'put ''OCwzODc5OSwzODgwMCwzODgwMywzODgwNSwzODgwNiwzODgwNywzODgwOSwzODgxMCwzODgxMSwzODgxMiwzODgxMywzMzIxNywzMzE5MCwyNzQyOCwyNzQ0NywyNzQ0OSwyNzQ1OSwyNzQ2MiwyNzQ4MSwzOTEyMSwzOTEyMiwzOTEyMywzOTEyNSwzOTEyOSwzOTEzMCwyNzU3MSwyNDM4NCwy''@;'; put 'put ''NzU4NiwzNTMxNSwyNmUzLDQwNzg1LDI2MDAzLDI2MDQ0LDI2MDU0LDI2MDUyLDI2MDUxLDI2MDYwLDI2MDYyLDI2MDY2LDI2MDcwLDI4ODAwLDI4ODI4LDI4ODIyLDI4ODI5LDI4ODU5LDI4ODY0LDI4ODU1LDI4ODQzLDI4ODQ5LDI4OTA0LDI4ODc0LDI4OTQ0LDI4OTQ3LDI4OTUwLDI4OTc1''@;'; put 'put ''LDI4OTc3LDI5MDQzLDI5MDIwLDI5MDMyLDI4OTk3LDI5MDQyLDI5MDAyLDI5MDQ4LDI5MDUwLDI5MDgwLDI5MTA3LDI5MTA5LDI5MDk2LDI5MDg4LDI5MTUyLDI5MTQwLDI5MTU5LDI5MTc3LDI5MjEzLDI5MjI0LDI4NzgwLDI4OTUyLDI5MDMwLDI5MTEzLDI1MTUwLDI1MTQ5LDI1MTU1LDI1''@;'; put 'put ''MTYwLDI1MTYxLDMxMDM1LDMxMDQwLDMxMDQ2LDMxMDQ5LDMxMDY3LDMxMDY4LDMxMDU5LDMxMDY2LDMxMDc0LDMxMDYzLDMxMDcyLDMxMDg3LDMxMDc5LDMxMDk4LDMxMTA5LDMxMTE0LDMxMTMwLDMxMTQzLDMxMTU1LDI0NTI5LDI0NTI4LDM4ODE0LDM4ODE1LDM4ODE3LDM4ODE4LDM4ODIw''@;'; put 'put ''LDM4ODIxLDM4ODIyLDM4ODIzLDM4ODI0LDM4ODI1LDM4ODI2LDM4ODI4LDM4ODMwLDM4ODMyLDM4ODMzLDM4ODM1LDM4ODM3LDM4ODM4LDM4ODM5LDM4ODQwLDM4ODQxLDM4ODQyLDM4ODQzLDM4ODQ0LDM4ODQ1LDM4ODQ2LDM4ODQ3LDM4ODQ4LDM4ODQ5LDM4ODUwLDM4ODUxLDM4ODUyLDM4''@;'; put 'put ''ODUzLDM4ODU0LDM4ODU1LDM4ODU2LDM4ODU3LDM4ODU4LDM4ODU5LDM4ODYwLDM4ODYxLDM4ODYyLDM4ODYzLDM4ODY0LDM4ODY1LDM4ODY2LDM4ODY3LDM4ODY4LDM4ODY5LDM4ODcwLDM4ODcxLDM4ODcyLDM4ODczLDM4ODc0LDM4ODc1LDM4ODc2LDM4ODc3LDM4ODc4LDM4ODc5LDM4ODgw''@;'; put 'put ''LDM4ODgxLDM4ODgyLDM4ODgzLDM4ODg0LDM4ODg1LDM4ODg4LDM4ODk0LDM4ODk1LDM4ODk2LDM4ODk3LDM4ODk4LDM4OTAwLDM4OTAzLDM4OTA0LDM4OTA1LDM4OTA2LDM4OTA3LDM4OTA4LDM4OTA5LDM4OTEwLDM4OTExLDM4OTEyLDM4OTEzLDM4OTE0LDM4OTE1LDM4OTE2LDM4OTE3LDM4''@;'; put 'put ''OTE4LDM4OTE5LDM4OTIwLDM4OTIxLDM4OTIyLDM4OTIzLDM4OTI0LDM4OTI1LDM4OTI2LDI0NjM2LDI0NjY5LDI0NjY2LDI0Njc5LDI0NjQxLDI0NjY1LDI0Njc1LDI0NzQ3LDI0ODM4LDI0ODQ1LDI0OTI1LDI1MDAxLDI0OTg5LDI1MDM1LDI1MDQxLDI1MDk0LDMyODk2LDMyODk1LDI3Nzk1''@;'; put 'put ''LDI3ODk0LDI4MTU2LDMwNzEwLDMwNzEyLDMwNzIwLDMwNzI5LDMwNzQzLDMwNzQ0LDMwNzM3LDI2MDI3LDMwNzY1LDMwNzQ4LDMwNzQ5LDMwNzc3LDMwNzc4LDMwNzc5LDMwNzUxLDMwNzgwLDMwNzU3LDMwNzY0LDMwNzU1LDMwNzYxLDMwNzk4LDMwODI5LDMwODA2LDMwODA3LDMwNzU4LDMw''@;'; put 'put ''ODAwLDMwNzkxLDMwNzk2LDMwODI2LDMwODc1LDMwODY3LDMwODc0LDMwODU1LDMwODc2LDMwODgxLDMwODgzLDMwODk4LDMwOTA1LDMwODg1LDMwOTMyLDMwOTM3LDMwOTIxLDMwOTU2LDMwOTYyLDMwOTgxLDMwOTY0LDMwOTk1LDMxMDEyLDMxMDA2LDMxMDI4LDQwODU5LDQwNjk3LDQwNjk5''@;'; put 'put ''LDQwNzAwLDMwNDQ5LDMwNDY4LDMwNDc3LDMwNDU3LDMwNDcxLDMwNDcyLDMwNDkwLDMwNDk4LDMwNDg5LDMwNTA5LDMwNTAyLDMwNTE3LDMwNTIwLDMwNTQ0LDMwNTQ1LDMwNTM1LDMwNTMxLDMwNTU0LDMwNTY4LDM4OTI3LDM4OTI4LDM4OTI5LDM4OTMwLDM4OTMxLDM4OTMyLDM4OTMzLDM4''@;'; put 'put ''OTM0LDM4OTM1LDM4OTM2LDM4OTM3LDM4OTM4LDM4OTM5LDM4OTQwLDM4OTQxLDM4OTQyLDM4OTQzLDM4OTQ0LDM4OTQ1LDM4OTQ2LDM4OTQ3LDM4OTQ4LDM4OTQ5LDM4OTUwLDM4OTUxLDM4OTUyLDM4OTUzLDM4OTU0LDM4OTU1LDM4OTU2LDM4OTU3LDM4OTU4LDM4OTU5LDM4OTYwLDM4OTYx''@;'; put 'put ''LDM4OTYyLDM4OTYzLDM4OTY0LDM4OTY1LDM4OTY2LDM4OTY3LDM4OTY4LDM4OTY5LDM4OTcwLDM4OTcxLDM4OTcyLDM4OTczLDM4OTc0LDM4OTc1LDM4OTc2LDM4OTc3LDM4OTc4LDM4OTc5LDM4OTgwLDM4OTgxLDM4OTgyLDM4OTgzLDM4OTg0LDM4OTg1LDM4OTg2LDM4OTg3LDM4OTg4LDM4''@;'; put 'put ''OTg5LDM4OTkwLDM4OTkxLDM4OTkyLDM4OTkzLDM4OTk0LDM4OTk1LDM4OTk2LDM4OTk3LDM4OTk4LDM4OTk5LDM5ZTMsMzkwMDEsMzkwMDIsMzkwMDMsMzkwMDQsMzkwMDUsMzkwMDYsMzkwMDcsMzkwMDgsMzkwMDksMzkwMTAsMzkwMTEsMzkwMTIsMzkwMTMsMzkwMTQsMzkwMTUsMzkwMTYs''@;'; put 'put ''MzkwMTcsMzkwMTgsMzkwMTksMzkwMjAsMzkwMjEsMzkwMjIsMzA1NjIsMzA1NjUsMzA1OTEsMzA2MDUsMzA1ODksMzA1OTIsMzA2MDQsMzA2MDksMzA2MjMsMzA2MjQsMzA2NDAsMzA2NDUsMzA2NTMsMzAwMTAsMzAwMTYsMzAwMzAsMzAwMjcsMzAwMjQsMzAwNDMsMzAwNjYsMzAwNzMsMzAw''@;'; put 'put ''ODMsMzI2MDAsMzI2MDksMzI2MDcsMzU0MDAsMzI2MTYsMzI2MjgsMzI2MjUsMzI2MzMsMzI2NDEsMzI2MzgsMzA0MTMsMzA0MzcsMzQ4NjYsMzgwMjEsMzgwMjIsMzgwMjMsMzgwMjcsMzgwMjYsMzgwMjgsMzgwMjksMzgwMzEsMzgwMzIsMzgwMzYsMzgwMzksMzgwMzcsMzgwNDIsMzgwNDMs''@;'; put 'put ''MzgwNDQsMzgwNTEsMzgwNTIsMzgwNTksMzgwNTgsMzgwNjEsMzgwNjAsMzgwNjMsMzgwNjQsMzgwNjYsMzgwNjgsMzgwNzAsMzgwNzEsMzgwNzIsMzgwNzMsMzgwNzQsMzgwNzYsMzgwNzcsMzgwNzksMzgwODQsMzgwODgsMzgwODksMzgwOTAsMzgwOTEsMzgwOTIsMzgwOTMsMzgwOTQsMzgw''@;'; put 'put ''OTYsMzgwOTcsMzgwOTgsMzgxMDEsMzgxMDIsMzgxMDMsMzgxMDUsMzgxMDQsMzgxMDcsMzgxMTAsMzgxMTEsMzgxMTIsMzgxMTQsMzgxMTYsMzgxMTcsMzgxMTksMzgxMjAsMzgxMjIsMzkwMjMsMzkwMjQsMzkwMjUsMzkwMjYsMzkwMjcsMzkwMjgsMzkwNTEsMzkwNTQsMzkwNTgsMzkwNjEs''@;'; put 'put ''MzkwNjUsMzkwNzUsMzkwODAsMzkwODEsMzkwODIsMzkwODMsMzkwODQsMzkwODUsMzkwODYsMzkwODcsMzkwODgsMzkwODksMzkwOTAsMzkwOTEsMzkwOTIsMzkwOTMsMzkwOTQsMzkwOTUsMzkwOTYsMzkwOTcsMzkwOTgsMzkwOTksMzkxMDAsMzkxMDEsMzkxMDIsMzkxMDMsMzkxMDQsMzkx''@;'; put 'put ''MDUsMzkxMDYsMzkxMDcsMzkxMDgsMzkxMDksMzkxMTAsMzkxMTEsMzkxMTIsMzkxMTMsMzkxMTQsMzkxMTUsMzkxMTYsMzkxMTcsMzkxMTksMzkxMjAsMzkxMjQsMzkxMjYsMzkxMjcsMzkxMzEsMzkxMzIsMzkxMzMsMzkxMzYsMzkxMzcsMzkxMzgsMzkxMzksMzkxNDAsMzkxNDEsMzkxNDIs''@;'; put 'put ''MzkxNDUsMzkxNDYsMzkxNDcsMzkxNDgsMzkxNDksMzkxNTAsMzkxNTEsMzkxNTIsMzkxNTMsMzkxNTQsMzkxNTUsMzkxNTYsMzkxNTcsMzkxNTgsMzkxNTksMzkxNjAsMzkxNjEsMzkxNjIsMzkxNjMsMzkxNjQsMzkxNjUsMzkxNjYsMzkxNjcsMzkxNjgsMzkxNjksMzkxNzAsMzkxNzEsMzkx''@;'; put 'put ''NzIsMzkxNzMsMzkxNzQsMzkxNzUsMzgxMjEsMzgxMjMsMzgxMjYsMzgxMjcsMzgxMzEsMzgxMzIsMzgxMzMsMzgxMzUsMzgxMzcsMzgxNDAsMzgxNDEsMzgxNDMsMzgxNDcsMzgxNDYsMzgxNTAsMzgxNTEsMzgxNTMsMzgxNTQsMzgxNTcsMzgxNTgsMzgxNTksMzgxNjIsMzgxNjMsMzgxNjQs''@;'; put 'put ''MzgxNjUsMzgxNjYsMzgxNjgsMzgxNzEsMzgxNzMsMzgxNzQsMzgxNzUsMzgxNzgsMzgxODYsMzgxODcsMzgxODUsMzgxODgsMzgxOTMsMzgxOTQsMzgxOTYsMzgxOTgsMzgxOTksMzgyMDAsMzgyMDQsMzgyMDYsMzgyMDcsMzgyMTAsMzgxOTcsMzgyMTIsMzgyMTMsMzgyMTQsMzgyMTcsMzgy''@;'; put 'put ''MjAsMzgyMjIsMzgyMjMsMzgyMjYsMzgyMjcsMzgyMjgsMzgyMzAsMzgyMzEsMzgyMzIsMzgyMzMsMzgyMzUsMzgyMzgsMzgyMzksMzgyMzcsMzgyNDEsMzgyNDIsMzgyNDQsMzgyNDUsMzgyNDYsMzgyNDcsMzgyNDgsMzgyNDksMzgyNTAsMzgyNTEsMzgyNTIsMzgyNTUsMzgyNTcsMzgyNTgs''@;'; put 'put ''MzgyNTksMzgyMDIsMzA2OTUsMzA3MDAsMzg2MDEsMzExODksMzEyMTMsMzEyMDMsMzEyMTEsMzEyMzgsMjM4NzksMzEyMzUsMzEyMzQsMzEyNjIsMzEyNTIsMzkxNzYsMzkxNzcsMzkxNzgsMzkxNzksMzkxODAsMzkxODIsMzkxODMsMzkxODUsMzkxODYsMzkxODcsMzkxODgsMzkxODksMzkx''@;'; put 'put ''OTAsMzkxOTEsMzkxOTIsMzkxOTMsMzkxOTQsMzkxOTUsMzkxOTYsMzkxOTcsMzkxOTgsMzkxOTksMzkyMDAsMzkyMDEsMzkyMDIsMzkyMDMsMzkyMDQsMzkyMDUsMzkyMDYsMzkyMDcsMzkyMDgsMzkyMDksMzkyMTAsMzkyMTEsMzkyMTIsMzkyMTMsMzkyMTUsMzkyMTYsMzkyMTcsMzkyMTgs''@;'; put 'put ''MzkyMTksMzkyMjAsMzkyMjEsMzkyMjIsMzkyMjMsMzkyMjQsMzkyMjUsMzkyMjYsMzkyMjcsMzkyMjgsMzkyMjksMzkyMzAsMzkyMzEsMzkyMzIsMzkyMzMsMzkyMzQsMzkyMzUsMzkyMzYsMzkyMzcsMzkyMzgsMzkyMzksMzkyNDAsMzkyNDEsMzkyNDIsMzkyNDMsMzkyNDQsMzkyNDUsMzky''@;'; put 'put ''NDYsMzkyNDcsMzkyNDgsMzkyNDksMzkyNTAsMzkyNTEsMzkyNTQsMzkyNTUsMzkyNTYsMzkyNTcsMzkyNTgsMzkyNTksMzkyNjAsMzkyNjEsMzkyNjIsMzkyNjMsMzkyNjQsMzkyNjUsMzkyNjYsMzkyNjgsMzkyNzAsMzkyODMsMzkyODgsMzkyODksMzkyOTEsMzkyOTQsMzkyOTgsMzkyOTks''@;'; put 'put ''MzkzMDUsMzEyODksMzEyODcsMzEzMTMsNDA2NTUsMzkzMzMsMzEzNDQsMzAzNDQsMzAzNTAsMzAzNTUsMzAzNjEsMzAzNzIsMjk5MTgsMjk5MjAsMjk5OTYsNDA0ODAsNDA0ODIsNDA0ODgsNDA0ODksNDA0OTAsNDA0OTEsNDA0OTIsNDA0OTgsNDA0OTcsNDA1MDIsNDA1MDQsNDA1MDMsNDA1''@;'; put 'put ''MDUsNDA1MDYsNDA1MTAsNDA1MTMsNDA1MTQsNDA1MTYsNDA1MTgsNDA1MTksNDA1MjAsNDA1MjEsNDA1MjMsNDA1MjQsNDA1MjYsNDA1MjksNDA1MzMsNDA1MzUsNDA1MzgsNDA1MzksNDA1NDAsNDA1NDIsNDA1NDcsNDA1NTAsNDA1NTEsNDA1NTIsNDA1NTMsNDA1NTQsNDA1NTUsNDA1NTYs''@;'; put 'put ''NDA1NjEsNDA1NTcsNDA1NjMsMzAwOTgsMzAxMDAsMzAxMDIsMzAxMTIsMzAxMDksMzAxMjQsMzAxMTUsMzAxMzEsMzAxMzIsMzAxMzYsMzAxNDgsMzAxMjksMzAxMjgsMzAxNDcsMzAxNDYsMzAxNjYsMzAxNTcsMzAxNzksMzAxODQsMzAxODIsMzAxODAsMzAxODcsMzAxODMsMzAyMTEsMzAx''@;'; put 'put ''OTMsMzAyMDQsMzAyMDcsMzAyMjQsMzAyMDgsMzAyMTMsMzAyMjAsMzAyMzEsMzAyMTgsMzAyNDUsMzAyMzIsMzAyMjksMzAyMzMsMzkzMDgsMzkzMTAsMzkzMjIsMzkzMjMsMzkzMjQsMzkzMjUsMzkzMjYsMzkzMjcsMzkzMjgsMzkzMjksMzkzMzAsMzkzMzEsMzkzMzIsMzkzMzQsMzkzMzUs''@;'; put 'put ''MzkzMzcsMzkzMzgsMzkzMzksMzkzNDAsMzkzNDEsMzkzNDIsMzkzNDMsMzkzNDQsMzkzNDUsMzkzNDYsMzkzNDcsMzkzNDgsMzkzNDksMzkzNTAsMzkzNTEsMzkzNTIsMzkzNTMsMzkzNTQsMzkzNTUsMzkzNTYsMzkzNTcsMzkzNTgsMzkzNTksMzkzNjAsMzkzNjEsMzkzNjIsMzkzNjMsMzkz''@;'; put 'put ''NjQsMzkzNjUsMzkzNjYsMzkzNjcsMzkzNjgsMzkzNjksMzkzNzAsMzkzNzEsMzkzNzIsMzkzNzMsMzkzNzQsMzkzNzUsMzkzNzYsMzkzNzcsMzkzNzgsMzkzNzksMzkzODAsMzkzODEsMzkzODIsMzkzODMsMzkzODQsMzkzODUsMzkzODYsMzkzODcsMzkzODgsMzkzODksMzkzOTAsMzkzOTEs''@;'; put 'put ''MzkzOTIsMzkzOTMsMzkzOTQsMzkzOTUsMzkzOTYsMzkzOTcsMzkzOTgsMzkzOTksMzk0MDAsMzk0MDEsMzk0MDIsMzk0MDMsMzk0MDQsMzk0MDUsMzk0MDYsMzk0MDcsMzk0MDgsMzk0MDksMzk0MTAsMzk0MTEsMzk0MTIsMzk0MTMsMzk0MTQsMzk0MTUsMzk0MTYsMzk0MTcsMzAyMzUsMzAy''@;'; put 'put ''NjgsMzAyNDIsMzAyNDAsMzAyNzIsMzAyNTMsMzAyNTYsMzAyNzEsMzAyNjEsMzAyNzUsMzAyNzAsMzAyNTksMzAyODUsMzAzMDIsMzAyOTIsMzAzMDAsMzAyOTQsMzAzMTUsMzAzMTksMzI3MTQsMzE0NjIsMzEzNTIsMzEzNTMsMzEzNjAsMzEzNjYsMzEzNjgsMzEzODEsMzEzOTgsMzEzOTIs''@;'; put 'put ''MzE0MDQsMzE0MDAsMzE0MDUsMzE0MTEsMzQ5MTYsMzQ5MjEsMzQ5MzAsMzQ5NDEsMzQ5NDMsMzQ5NDYsMzQ5NzgsMzUwMTQsMzQ5OTksMzUwMDQsMzUwMTcsMzUwNDIsMzUwMjIsMzUwNDMsMzUwNDUsMzUwNTcsMzUwOTgsMzUwNjgsMzUwNDgsMzUwNzAsMzUwNTYsMzUxMDUsMzUwOTcsMzUw''@;'; put 'put ''OTEsMzUwOTksMzUwODIsMzUxMjQsMzUxMTUsMzUxMjYsMzUxMzcsMzUxNzQsMzUxOTUsMzAwOTEsMzI5OTcsMzAzODYsMzAzODgsMzA2ODQsMzI3ODYsMzI3ODgsMzI3OTAsMzI3OTYsMzI4MDAsMzI4MDIsMzI4MDUsMzI4MDYsMzI4MDcsMzI4MDksMzI4MDgsMzI4MTcsMzI3NzksMzI4MjEs''@;'; put 'put ''MzI4MzUsMzI4MzgsMzI4NDUsMzI4NTAsMzI4NzMsMzI4ODEsMzUyMDMsMzkwMzIsMzkwNDAsMzkwNDMsMzk0MTgsMzk0MTksMzk0MjAsMzk0MjEsMzk0MjIsMzk0MjMsMzk0MjQsMzk0MjUsMzk0MjYsMzk0MjcsMzk0MjgsMzk0MjksMzk0MzAsMzk0MzEsMzk0MzIsMzk0MzMsMzk0MzQsMzk0''@;'; put 'put ''MzUsMzk0MzYsMzk0MzcsMzk0MzgsMzk0MzksMzk0NDAsMzk0NDEsMzk0NDIsMzk0NDMsMzk0NDQsMzk0NDUsMzk0NDYsMzk0NDcsMzk0NDgsMzk0NDksMzk0NTAsMzk0NTEsMzk0NTIsMzk0NTMsMzk0NTQsMzk0NTUsMzk0NTYsMzk0NTcsMzk0NTgsMzk0NTksMzk0NjAsMzk0NjEsMzk0NjIs''@;'; put 'put ''Mzk0NjMsMzk0NjQsMzk0NjUsMzk0NjYsMzk0NjcsMzk0NjgsMzk0NjksMzk0NzAsMzk0NzEsMzk0NzIsMzk0NzMsMzk0NzQsMzk0NzUsMzk0NzYsMzk0NzcsMzk0NzgsMzk0NzksMzk0ODAsMzk0ODEsMzk0ODIsMzk0ODMsMzk0ODQsMzk0ODUsMzk0ODYsMzk0ODcsMzk0ODgsMzk0ODksMzk0''@;'; put 'put ''OTAsMzk0OTEsMzk0OTIsMzk0OTMsMzk0OTQsMzk0OTUsMzk0OTYsMzk0OTcsMzk0OTgsMzk0OTksMzk1MDAsMzk1MDEsMzk1MDIsMzk1MDMsMzk1MDQsMzk1MDUsMzk1MDYsMzk1MDcsMzk1MDgsMzk1MDksMzk1MTAsMzk1MTEsMzk1MTIsMzk1MTMsMzkwNDksMzkwNTIsMzkwNTMsMzkwNTUs''@;'; put 'put ''MzkwNjAsMzkwNjYsMzkwNjcsMzkwNzAsMzkwNzEsMzkwNzMsMzkwNzQsMzkwNzcsMzkwNzgsMzQzODEsMzQzODgsMzQ0MTIsMzQ0MTQsMzQ0MzEsMzQ0MjYsMzQ0MjgsMzQ0MjcsMzQ0NzIsMzQ0NDUsMzQ0NDMsMzQ0NzYsMzQ0NjEsMzQ0NzEsMzQ0NjcsMzQ0NzQsMzQ0NTEsMzQ0NzMsMzQ0''@;'; put 'put ''ODYsMzQ1MDAsMzQ0ODUsMzQ1MTAsMzQ0ODAsMzQ0OTAsMzQ0ODEsMzQ0NzksMzQ1MDUsMzQ1MTEsMzQ0ODQsMzQ1MzcsMzQ1NDUsMzQ1NDYsMzQ1NDEsMzQ1NDcsMzQ1MTIsMzQ1NzksMzQ1MjYsMzQ1NDgsMzQ1MjcsMzQ1MjAsMzQ1MTMsMzQ1NjMsMzQ1NjcsMzQ1NTIsMzQ1NjgsMzQ1NzAs''@;'; put 'put ''MzQ1NzMsMzQ1NjksMzQ1OTUsMzQ2MTksMzQ1OTAsMzQ1OTcsMzQ2MDYsMzQ1ODYsMzQ2MjIsMzQ2MzIsMzQ2MTIsMzQ2MDksMzQ2MDEsMzQ2MTUsMzQ2MjMsMzQ2OTAsMzQ1OTQsMzQ2ODUsMzQ2ODYsMzQ2ODMsMzQ2NTYsMzQ2NzIsMzQ2MzYsMzQ2NzAsMzQ2OTksMzQ2NDMsMzQ2NTksMzQ2''@;'; put 'put ''ODQsMzQ2NjAsMzQ2NDksMzQ2NjEsMzQ3MDcsMzQ3MzUsMzQ3MjgsMzQ3NzAsMzk1MTQsMzk1MTUsMzk1MTYsMzk1MTcsMzk1MTgsMzk1MTksMzk1MjAsMzk1MjEsMzk1MjIsMzk1MjMsMzk1MjQsMzk1MjUsMzk1MjYsMzk1MjcsMzk1MjgsMzk1MjksMzk1MzAsMzk1MzEsMzk1MzgsMzk1NTUs''@;'; put 'put ''Mzk1NjEsMzk1NjUsMzk1NjYsMzk1NzIsMzk1NzMsMzk1NzcsMzk1OTAsMzk1OTMsMzk1OTQsMzk1OTUsMzk1OTYsMzk1OTcsMzk1OTgsMzk1OTksMzk2MDIsMzk2MDMsMzk2MDQsMzk2MDUsMzk2MDksMzk2MTEsMzk2MTMsMzk2MTQsMzk2MTUsMzk2MTksMzk2MjAsMzk2MjIsMzk2MjMsMzk2''@;'; put 'put ''MjQsMzk2MjUsMzk2MjYsMzk2MjksMzk2MzAsMzk2MzEsMzk2MzIsMzk2MzQsMzk2MzYsMzk2MzcsMzk2MzgsMzk2MzksMzk2NDEsMzk2NDIsMzk2NDMsMzk2NDQsMzk2NDUsMzk2NDYsMzk2NDgsMzk2NTAsMzk2NTEsMzk2NTIsMzk2NTMsMzk2NTUsMzk2NTYsMzk2NTcsMzk2NTgsMzk2NjAs''@;'; put 'put ''Mzk2NjIsMzk2NjQsMzk2NjUsMzk2NjYsMzk2NjcsMzk2NjgsMzk2NjksMzk2NzAsMzk2NzEsMzk2NzIsMzk2NzQsMzk2NzYsMzk2NzcsMzk2NzgsMzk2NzksMzk2ODAsMzk2ODEsMzk2ODIsMzk2ODQsMzk2ODUsMzk2ODYsMzQ3NTgsMzQ2OTYsMzQ2OTMsMzQ3MzMsMzQ3MTEsMzQ2OTEsMzQ3''@;'; put 'put ''MzEsMzQ3ODksMzQ3MzIsMzQ3NDEsMzQ3MzksMzQ3NjMsMzQ3NzEsMzQ3NDksMzQ3NjksMzQ3NTIsMzQ3NjIsMzQ3NzksMzQ3OTQsMzQ3ODQsMzQ3OTgsMzQ4MzgsMzQ4MzUsMzQ4MTQsMzQ4MjYsMzQ4NDMsMzQ4NDksMzQ4NzMsMzQ4NzYsMzI1NjYsMzI1NzgsMzI1ODAsMzI1ODEsMzMyOTYs''@;'; put 'put ''MzE0ODIsMzE0ODUsMzE0OTYsMzE0OTEsMzE0OTIsMzE1MDksMzE0OTgsMzE1MzEsMzE1MDMsMzE1NTksMzE1NDQsMzE1MzAsMzE1MTMsMzE1MzQsMzE1MzcsMzE1MjAsMzE1MjUsMzE1MjQsMzE1MzksMzE1NTAsMzE1MTgsMzE1NzYsMzE1NzgsMzE1NTcsMzE2MDUsMzE1NjQsMzE1ODEsMzE1''@;'; put 'put ''ODQsMzE1OTgsMzE2MTEsMzE1ODYsMzE2MDIsMzE2MDEsMzE2MzIsMzE2NTQsMzE2NTUsMzE2NzIsMzE2NjAsMzE2NDUsMzE2NTYsMzE2MjEsMzE2NTgsMzE2NDQsMzE2NTAsMzE2NTksMzE2NjgsMzE2OTcsMzE2ODEsMzE2OTIsMzE3MDksMzE3MDYsMzE3MTcsMzE3MTgsMzE3MjIsMzE3NTYs''@;'; put 'put ''MzE3NDIsMzE3NDAsMzE3NTksMzE3NjYsMzE3NTUsMzk2ODcsMzk2ODksMzk2OTAsMzk2OTEsMzk2OTIsMzk2OTMsMzk2OTQsMzk2OTYsMzk2OTcsMzk2OTgsMzk3MDAsMzk3MDEsMzk3MDIsMzk3MDMsMzk3MDQsMzk3MDUsMzk3MDYsMzk3MDcsMzk3MDgsMzk3MDksMzk3MTAsMzk3MTIsMzk3''@;'; put 'put ''MTMsMzk3MTQsMzk3MTYsMzk3MTcsMzk3MTgsMzk3MTksMzk3MjAsMzk3MjEsMzk3MjIsMzk3MjMsMzk3MjQsMzk3MjUsMzk3MjYsMzk3MjgsMzk3MjksMzk3MzEsMzk3MzIsMzk3MzMsMzk3MzQsMzk3MzUsMzk3MzYsMzk3MzcsMzk3MzgsMzk3NDEsMzk3NDIsMzk3NDMsMzk3NDQsMzk3NTAs''@;'; put 'put ''Mzk3NTQsMzk3NTUsMzk3NTYsMzk3NTgsMzk3NjAsMzk3NjIsMzk3NjMsMzk3NjUsMzk3NjYsMzk3NjcsMzk3NjgsMzk3NjksMzk3NzAsMzk3NzEsMzk3NzIsMzk3NzMsMzk3NzQsMzk3NzUsMzk3NzYsMzk3NzcsMzk3NzgsMzk3NzksMzk3ODAsMzk3ODEsMzk3ODIsMzk3ODMsMzk3ODQsMzk3''@;'; put 'put ''ODUsMzk3ODYsMzk3ODcsMzk3ODgsMzk3ODksMzk3OTAsMzk3OTEsMzk3OTIsMzk3OTMsMzk3OTQsMzk3OTUsMzk3OTYsMzk3OTcsMzk3OTgsMzk3OTksMzk4MDAsMzk4MDEsMzk4MDIsMzk4MDMsMzE3NzUsMzE3ODYsMzE3ODIsMzE4MDAsMzE4MDksMzE4MDgsMzMyNzgsMzMyODEsMzMyODIs''@;'; put 'put ''MzMyODQsMzMyNjAsMzQ4ODQsMzMzMTMsMzMzMTQsMzMzMTUsMzMzMjUsMzMzMjcsMzMzMjAsMzMzMjMsMzMzMzYsMzMzMzksMzMzMzEsMzMzMzIsMzMzNDIsMzMzNDgsMzMzNTMsMzMzNTUsMzMzNTksMzMzNzAsMzMzNzUsMzMzODQsMzQ5NDIsMzQ5NDksMzQ5NTIsMzUwMzIsMzUwMzksMzUx''@;'; put 'put ''NjYsMzI2NjksMzI2NzEsMzI2NzksMzI2ODcsMzI2ODgsMzI2OTAsMzE4NjgsMjU5MjksMzE4ODksMzE5MDEsMzE5MDAsMzE5MDIsMzE5MDYsMzE5MjIsMzE5MzIsMzE5MzMsMzE5MzcsMzE5NDMsMzE5NDgsMzE5NDksMzE5NDQsMzE5NDEsMzE5NTksMzE5NzYsMzMzOTAsMjYyODAsMzI3MDMs''@;'; put 'put ''MzI3MTgsMzI3MjUsMzI3NDEsMzI3MzcsMzI3NDIsMzI3NDUsMzI3NTAsMzI3NTUsMzE5OTIsMzIxMTksMzIxNjYsMzIxNzQsMzIzMjcsMzI0MTEsNDA2MzIsNDA2MjgsMzYyMTEsMzYyMjgsMzYyNDQsMzYyNDEsMzYyNzMsMzYxOTksMzYyMDUsMzU5MTEsMzU5MTMsMzcxOTQsMzcyMDAsMzcx''@;'; put 'put ''OTgsMzcxOTksMzcyMjAsMzk4MDQsMzk4MDUsMzk4MDYsMzk4MDcsMzk4MDgsMzk4MDksMzk4MTAsMzk4MTEsMzk4MTIsMzk4MTMsMzk4MTQsMzk4MTUsMzk4MTYsMzk4MTcsMzk4MTgsMzk4MTksMzk4MjAsMzk4MjEsMzk4MjIsMzk4MjMsMzk4MjQsMzk4MjUsMzk4MjYsMzk4MjcsMzk4Mjgs''@;'; put 'put ''Mzk4MjksMzk4MzAsMzk4MzEsMzk4MzIsMzk4MzMsMzk4MzQsMzk4MzUsMzk4MzYsMzk4MzcsMzk4MzgsMzk4MzksMzk4NDAsMzk4NDEsMzk4NDIsMzk4NDMsMzk4NDQsMzk4NDUsMzk4NDYsMzk4NDcsMzk4NDgsMzk4NDksMzk4NTAsMzk4NTEsMzk4NTIsMzk4NTMsMzk4NTQsMzk4NTUsMzk4''@;'; put 'put ''NTYsMzk4NTcsMzk4NTgsMzk4NTksMzk4NjAsMzk4NjEsMzk4NjIsMzk4NjMsMzk4NjQsMzk4NjUsMzk4NjYsMzk4NjcsMzk4NjgsMzk4NjksMzk4NzAsMzk4NzEsMzk4NzIsMzk4NzMsMzk4NzQsMzk4NzUsMzk4NzYsMzk4NzcsMzk4NzgsMzk4NzksMzk4ODAsMzk4ODEsMzk4ODIsMzk4ODMs''@;'; put 'put ''Mzk4ODQsMzk4ODUsMzk4ODYsMzk4ODcsMzk4ODgsMzk4ODksMzk4OTAsMzk4OTEsMzk4OTIsMzk4OTMsMzk4OTQsMzk4OTUsMzk4OTYsMzk4OTcsMzk4OTgsMzk4OTksMzcyMTgsMzcyMTcsMzcyMzIsMzcyMjUsMzcyMzEsMzcyNDUsMzcyNDYsMzcyMzQsMzcyMzYsMzcyNDEsMzcyNjAsMzcy''@;'; put 'put ''NTMsMzcyNjQsMzcyNjEsMzcyNjUsMzcyODIsMzcyODMsMzcyOTAsMzcyOTMsMzcyOTQsMzcyOTUsMzczMDEsMzczMDAsMzczMDYsMzU5MjUsNDA1NzQsMzYyODAsMzYzMzEsMzYzNTcsMzY0NDEsMzY0NTcsMzYyNzcsMzYyODcsMzYyODQsMzYyODIsMzYyOTIsMzYzMTAsMzYzMTEsMzYzMTQs''@;'; put 'put ''MzYzMTgsMzYzMDIsMzYzMDMsMzYzMTUsMzYyOTQsMzYzMzIsMzYzNDMsMzYzNDQsMzYzMjMsMzYzNDUsMzYzNDcsMzYzMjQsMzYzNjEsMzYzNDksMzYzNzIsMzYzODEsMzYzODMsMzYzOTYsMzYzOTgsMzYzODcsMzYzOTksMzY0MTAsMzY0MTYsMzY0MDksMzY0MDUsMzY0MTMsMzY0MDEsMzY0''@;'; put 'put ''MjUsMzY0MTcsMzY0MTgsMzY0MzMsMzY0MzQsMzY0MjYsMzY0NjQsMzY0NzAsMzY0NzYsMzY0NjMsMzY0NjgsMzY0ODUsMzY0OTUsMzY1MDAsMzY0OTYsMzY1MDgsMzY1MTAsMzU5NjAsMzU5NzAsMzU5NzgsMzU5NzMsMzU5OTIsMzU5ODgsMjYwMTEsMzUyODYsMzUyOTQsMzUyOTAsMzUyOTIs''@;'; put 'put ''Mzk5MDAsMzk5MDEsMzk5MDIsMzk5MDMsMzk5MDQsMzk5MDUsMzk5MDYsMzk5MDcsMzk5MDgsMzk5MDksMzk5MTAsMzk5MTEsMzk5MTIsMzk5MTMsMzk5MTQsMzk5MTUsMzk5MTYsMzk5MTcsMzk5MTgsMzk5MTksMzk5MjAsMzk5MjEsMzk5MjIsMzk5MjMsMzk5MjQsMzk5MjUsMzk5MjYsMzk5''@;'; put 'put ''MjcsMzk5MjgsMzk5MjksMzk5MzAsMzk5MzEsMzk5MzIsMzk5MzMsMzk5MzQsMzk5MzUsMzk5MzYsMzk5MzcsMzk5MzgsMzk5MzksMzk5NDAsMzk5NDEsMzk5NDIsMzk5NDMsMzk5NDQsMzk5NDUsMzk5NDYsMzk5NDcsMzk5NDgsMzk5NDksMzk5NTAsMzk5NTEsMzk5NTIsMzk5NTMsMzk5NTQs''@;'; put 'put ''Mzk5NTUsMzk5NTYsMzk5NTcsMzk5NTgsMzk5NTksMzk5NjAsMzk5NjEsMzk5NjIsMzk5NjMsMzk5NjQsMzk5NjUsMzk5NjYsMzk5NjcsMzk5NjgsMzk5NjksMzk5NzAsMzk5NzEsMzk5NzIsMzk5NzMsMzk5NzQsMzk5NzUsMzk5NzYsMzk5NzcsMzk5NzgsMzk5NzksMzk5ODAsMzk5ODEsMzk5''@;'; put 'put ''ODIsMzk5ODMsMzk5ODQsMzk5ODUsMzk5ODYsMzk5ODcsMzk5ODgsMzk5ODksMzk5OTAsMzk5OTEsMzk5OTIsMzk5OTMsMzk5OTQsMzk5OTUsMzUzMDEsMzUzMDcsMzUzMTEsMzUzOTAsMzU2MjIsMzg3MzksMzg2MzMsMzg2NDMsMzg2MzksMzg2NjIsMzg2NTcsMzg2NjQsMzg2NzEsMzg2NzAs''@;'; put 'put ''Mzg2OTgsMzg3MDEsMzg3MDQsMzg3MTgsNDA4MzIsNDA4MzUsNDA4MzcsNDA4MzgsNDA4MzksNDA4NDAsNDA4NDEsNDA4NDIsNDA4NDQsNDA3MDIsNDA3MTUsNDA3MTcsMzg1ODUsMzg1ODgsMzg1ODksMzg2MDYsMzg2MTAsMzA2NTUsMzg2MjQsMzc1MTgsMzc1NTAsMzc1NzYsMzc2OTQsMzc3''@;'; put 'put ''MzgsMzc4MzQsMzc3NzUsMzc5NTAsMzc5OTUsNDAwNjMsNDAwNjYsNDAwNjksNDAwNzAsNDAwNzEsNDAwNzIsMzEyNjcsNDAwNzUsNDAwNzgsNDAwODAsNDAwODEsNDAwODIsNDAwODQsNDAwODUsNDAwOTAsNDAwOTEsNDAwOTQsNDAwOTUsNDAwOTYsNDAwOTcsNDAwOTgsNDAwOTksNDAxMDEs''@;'; put 'put ''NDAxMDIsNDAxMDMsNDAxMDQsNDAxMDUsNDAxMDcsNDAxMDksNDAxMTAsNDAxMTIsNDAxMTMsNDAxMTQsNDAxMTUsNDAxMTYsNDAxMTcsNDAxMTgsNDAxMTksNDAxMjIsNDAxMjMsNDAxMjQsNDAxMjUsNDAxMzIsNDAxMzMsNDAxMzQsNDAxMzUsNDAxMzgsNDAxMzksMzk5OTYsMzk5OTcsMzk5''@;'; put 'put ''OTgsMzk5OTksNGU0LDQwMDAxLDQwMDAyLDQwMDAzLDQwMDA0LDQwMDA1LDQwMDA2LDQwMDA3LDQwMDA4LDQwMDA5LDQwMDEwLDQwMDExLDQwMDEyLDQwMDEzLDQwMDE0LDQwMDE1LDQwMDE2LDQwMDE3LDQwMDE4LDQwMDE5LDQwMDIwLDQwMDIxLDQwMDIyLDQwMDIzLDQwMDI0LDQwMDI1LDQw''@;'; put 'put ''MDI2LDQwMDI3LDQwMDI4LDQwMDI5LDQwMDMwLDQwMDMxLDQwMDMyLDQwMDMzLDQwMDM0LDQwMDM1LDQwMDM2LDQwMDM3LDQwMDM4LDQwMDM5LDQwMDQwLDQwMDQxLDQwMDQyLDQwMDQzLDQwMDQ0LDQwMDQ1LDQwMDQ2LDQwMDQ3LDQwMDQ4LDQwMDQ5LDQwMDUwLDQwMDUxLDQwMDUyLDQwMDUz''@;'; put 'put ''LDQwMDU0LDQwMDU1LDQwMDU2LDQwMDU3LDQwMDU4LDQwMDU5LDQwMDYxLDQwMDYyLDQwMDY0LDQwMDY3LDQwMDY4LDQwMDczLDQwMDc0LDQwMDc2LDQwMDc5LDQwMDgzLDQwMDg2LDQwMDg3LDQwMDg4LDQwMDg5LDQwMDkzLDQwMTA2LDQwMTA4LDQwMTExLDQwMTIxLDQwMTI2LDQwMTI3LDQw''@;'; put 'put ''MTI4LDQwMTI5LDQwMTMwLDQwMTM2LDQwMTM3LDQwMTQ1LDQwMTQ2LDQwMTU0LDQwMTU1LDQwMTYwLDQwMTYxLDQwMTQwLDQwMTQxLDQwMTQyLDQwMTQzLDQwMTQ0LDQwMTQ3LDQwMTQ4LDQwMTQ5LDQwMTUxLDQwMTUyLDQwMTUzLDQwMTU2LDQwMTU3LDQwMTU5LDQwMTYyLDM4NzgwLDM4Nzg5''@;'; put 'put ''LDM4ODAxLDM4ODAyLDM4ODA0LDM4ODMxLDM4ODI3LDM4ODE5LDM4ODM0LDM4ODM2LDM5NjAxLDM5NjAwLDM5NjA3LDQwNTM2LDM5NjA2LDM5NjEwLDM5NjEyLDM5NjE3LDM5NjE2LDM5NjIxLDM5NjE4LDM5NjI3LDM5NjI4LDM5NjMzLDM5NzQ5LDM5NzQ3LDM5NzUxLDM5NzUzLDM5NzUyLDM5''@;'; put 'put ''NzU3LDM5NzYxLDM5MTQ0LDM5MTgxLDM5MjE0LDM5MjUzLDM5MjUyLDM5NjQ3LDM5NjQ5LDM5NjU0LDM5NjYzLDM5NjU5LDM5Njc1LDM5NjYxLDM5NjczLDM5Njg4LDM5Njk1LDM5Njk5LDM5NzExLDM5NzE1LDQwNjM3LDQwNjM4LDMyMzE1LDQwNTc4LDQwNTgzLDQwNTg0LDQwNTg3LDQwNTk0''@;'; put 'put ''LDM3ODQ2LDQwNjA1LDQwNjA3LDQwNjY3LDQwNjY4LDQwNjY5LDQwNjcyLDQwNjcxLDQwNjc0LDQwNjgxLDQwNjc5LDQwNjc3LDQwNjgyLDQwNjg3LDQwNzM4LDQwNzQ4LDQwNzUxLDQwNzYxLDQwNzU5LDQwNzY1LDQwNzY2LDQwNzcyLDQwMTYzLDQwMTY0LDQwMTY1LDQwMTY2LDQwMTY3LDQw''@;'; put 'put ''MTY4LDQwMTY5LDQwMTcwLDQwMTcxLDQwMTcyLDQwMTczLDQwMTc0LDQwMTc1LDQwMTc2LDQwMTc3LDQwMTc4LDQwMTc5LDQwMTgwLDQwMTgxLDQwMTgyLDQwMTgzLDQwMTg0LDQwMTg1LDQwMTg2LDQwMTg3LDQwMTg4LDQwMTg5LDQwMTkwLDQwMTkxLDQwMTkyLDQwMTkzLDQwMTk0LDQwMTk1''@;'; put 'put ''LDQwMTk2LDQwMTk3LDQwMTk4LDQwMTk5LDQwMjAwLDQwMjAxLDQwMjAyLDQwMjAzLDQwMjA0LDQwMjA1LDQwMjA2LDQwMjA3LDQwMjA4LDQwMjA5LDQwMjEwLDQwMjExLDQwMjEyLDQwMjEzLDQwMjE0LDQwMjE1LDQwMjE2LDQwMjE3LDQwMjE4LDQwMjE5LDQwMjIwLDQwMjIxLDQwMjIyLDQw''@;'; put 'put ''MjIzLDQwMjI0LDQwMjI1LDQwMjI2LDQwMjI3LDQwMjI4LDQwMjI5LDQwMjMwLDQwMjMxLDQwMjMyLDQwMjMzLDQwMjM0LDQwMjM1LDQwMjM2LDQwMjM3LDQwMjM4LDQwMjM5LDQwMjQwLDQwMjQxLDQwMjQyLDQwMjQzLDQwMjQ0LDQwMjQ1LDQwMjQ2LDQwMjQ3LDQwMjQ4LDQwMjQ5LDQwMjUw''@;'; put 'put ''LDQwMjUxLDQwMjUyLDQwMjUzLDQwMjU0LDQwMjU1LDQwMjU2LDQwMjU3LDQwMjU4LDU3OTA4LDU3OTA5LDU3OTEwLDU3OTExLDU3OTEyLDU3OTEzLDU3OTE0LDU3OTE1LDU3OTE2LDU3OTE3LDU3OTE4LDU3OTE5LDU3OTIwLDU3OTIxLDU3OTIyLDU3OTIzLDU3OTI0LDU3OTI1LDU3OTI2LDU3''@;'; put 'put ''OTI3LDU3OTI4LDU3OTI5LDU3OTMwLDU3OTMxLDU3OTMyLDU3OTMzLDU3OTM0LDU3OTM1LDU3OTM2LDU3OTM3LDU3OTM4LDU3OTM5LDU3OTQwLDU3OTQxLDU3OTQyLDU3OTQzLDU3OTQ0LDU3OTQ1LDU3OTQ2LDU3OTQ3LDU3OTQ4LDU3OTQ5LDU3OTUwLDU3OTUxLDU3OTUyLDU3OTUzLDU3OTU0''@;'; put 'put ''LDU3OTU1LDU3OTU2LDU3OTU3LDU3OTU4LDU3OTU5LDU3OTYwLDU3OTYxLDU3OTYyLDU3OTYzLDU3OTY0LDU3OTY1LDU3OTY2LDU3OTY3LDU3OTY4LDU3OTY5LDU3OTcwLDU3OTcxLDU3OTcyLDU3OTczLDU3OTc0LDU3OTc1LDU3OTc2LDU3OTc3LDU3OTc4LDU3OTc5LDU3OTgwLDU3OTgxLDU3''@;'; put 'put ''OTgyLDU3OTgzLDU3OTg0LDU3OTg1LDU3OTg2LDU3OTg3LDU3OTg4LDU3OTg5LDU3OTkwLDU3OTkxLDU3OTkyLDU3OTkzLDU3OTk0LDU3OTk1LDU3OTk2LDU3OTk3LDU3OTk4LDU3OTk5LDU4ZTMsNTgwMDEsNDAyNTksNDAyNjAsNDAyNjEsNDAyNjIsNDAyNjMsNDAyNjQsNDAyNjUsNDAyNjYs''@;'; put 'put ''NDAyNjcsNDAyNjgsNDAyNjksNDAyNzAsNDAyNzEsNDAyNzIsNDAyNzMsNDAyNzQsNDAyNzUsNDAyNzYsNDAyNzcsNDAyNzgsNDAyNzksNDAyODAsNDAyODEsNDAyODIsNDAyODMsNDAyODQsNDAyODUsNDAyODYsNDAyODcsNDAyODgsNDAyODksNDAyOTAsNDAyOTEsNDAyOTIsNDAyOTMsNDAy''@;'; put 'put ''OTQsNDAyOTUsNDAyOTYsNDAyOTcsNDAyOTgsNDAyOTksNDAzMDAsNDAzMDEsNDAzMDIsNDAzMDMsNDAzMDQsNDAzMDUsNDAzMDYsNDAzMDcsNDAzMDgsNDAzMDksNDAzMTAsNDAzMTEsNDAzMTIsNDAzMTMsNDAzMTQsNDAzMTUsNDAzMTYsNDAzMTcsNDAzMTgsNDAzMTksNDAzMjAsNDAzMjEs''@;'; put 'put ''NDAzMjIsNDAzMjMsNDAzMjQsNDAzMjUsNDAzMjYsNDAzMjcsNDAzMjgsNDAzMjksNDAzMzAsNDAzMzEsNDAzMzIsNDAzMzMsNDAzMzQsNDAzMzUsNDAzMzYsNDAzMzcsNDAzMzgsNDAzMzksNDAzNDAsNDAzNDEsNDAzNDIsNDAzNDMsNDAzNDQsNDAzNDUsNDAzNDYsNDAzNDcsNDAzNDgsNDAz''@;'; put 'put ''NDksNDAzNTAsNDAzNTEsNDAzNTIsNDAzNTMsNDAzNTQsNTgwMDIsNTgwMDMsNTgwMDQsNTgwMDUsNTgwMDYsNTgwMDcsNTgwMDgsNTgwMDksNTgwMTAsNTgwMTEsNTgwMTIsNTgwMTMsNTgwMTQsNTgwMTUsNTgwMTYsNTgwMTcsNTgwMTgsNTgwMTksNTgwMjAsNTgwMjEsNTgwMjIsNTgwMjMs''@;'; put 'put ''NTgwMjQsNTgwMjUsNTgwMjYsNTgwMjcsNTgwMjgsNTgwMjksNTgwMzAsNTgwMzEsNTgwMzIsNTgwMzMsNTgwMzQsNTgwMzUsNTgwMzYsNTgwMzcsNTgwMzgsNTgwMzksNTgwNDAsNTgwNDEsNTgwNDIsNTgwNDMsNTgwNDQsNTgwNDUsNTgwNDYsNTgwNDcsNTgwNDgsNTgwNDksNTgwNTAsNTgw''@;'; put 'put ''NTEsNTgwNTIsNTgwNTMsNTgwNTQsNTgwNTUsNTgwNTYsNTgwNTcsNTgwNTgsNTgwNTksNTgwNjAsNTgwNjEsNTgwNjIsNTgwNjMsNTgwNjQsNTgwNjUsNTgwNjYsNTgwNjcsNTgwNjgsNTgwNjksNTgwNzAsNTgwNzEsNTgwNzIsNTgwNzMsNTgwNzQsNTgwNzUsNTgwNzYsNTgwNzcsNTgwNzgs''@;'; put 'put ''NTgwNzksNTgwODAsNTgwODEsNTgwODIsNTgwODMsNTgwODQsNTgwODUsNTgwODYsNTgwODcsNTgwODgsNTgwODksNTgwOTAsNTgwOTEsNTgwOTIsNTgwOTMsNTgwOTQsNTgwOTUsNDAzNTUsNDAzNTYsNDAzNTcsNDAzNTgsNDAzNTksNDAzNjAsNDAzNjEsNDAzNjIsNDAzNjMsNDAzNjQsNDAz''@;'; put 'put ''NjUsNDAzNjYsNDAzNjcsNDAzNjgsNDAzNjksNDAzNzAsNDAzNzEsNDAzNzIsNDAzNzMsNDAzNzQsNDAzNzUsNDAzNzYsNDAzNzcsNDAzNzgsNDAzNzksNDAzODAsNDAzODEsNDAzODIsNDAzODMsNDAzODQsNDAzODUsNDAzODYsNDAzODcsNDAzODgsNDAzODksNDAzOTAsNDAzOTEsNDAzOTIs''@;'; put 'put ''NDAzOTMsNDAzOTQsNDAzOTUsNDAzOTYsNDAzOTcsNDAzOTgsNDAzOTksNDA0MDAsNDA0MDEsNDA0MDIsNDA0MDMsNDA0MDQsNDA0MDUsNDA0MDYsNDA0MDcsNDA0MDgsNDA0MDksNDA0MTAsNDA0MTEsNDA0MTIsNDA0MTMsNDA0MTQsNDA0MTUsNDA0MTYsNDA0MTcsNDA0MTgsNDA0MTksNDA0''@;'; put 'put ''MjAsNDA0MjEsNDA0MjIsNDA0MjMsNDA0MjQsNDA0MjUsNDA0MjYsNDA0MjcsNDA0MjgsNDA0MjksNDA0MzAsNDA0MzEsNDA0MzIsNDA0MzMsNDA0MzQsNDA0MzUsNDA0MzYsNDA0MzcsNDA0MzgsNDA0MzksNDA0NDAsNDA0NDEsNDA0NDIsNDA0NDMsNDA0NDQsNDA0NDUsNDA0NDYsNDA0NDcs''@;'; put 'put ''NDA0NDgsNDA0NDksNDA0NTAsNTgwOTYsNTgwOTcsNTgwOTgsNTgwOTksNTgxMDAsNTgxMDEsNTgxMDIsNTgxMDMsNTgxMDQsNTgxMDUsNTgxMDYsNTgxMDcsNTgxMDgsNTgxMDksNTgxMTAsNTgxMTEsNTgxMTIsNTgxMTMsNTgxMTQsNTgxMTUsNTgxMTYsNTgxMTcsNTgxMTgsNTgxMTksNTgx''@;'; put 'put ''MjAsNTgxMjEsNTgxMjIsNTgxMjMsNTgxMjQsNTgxMjUsNTgxMjYsNTgxMjcsNTgxMjgsNTgxMjksNTgxMzAsNTgxMzEsNTgxMzIsNTgxMzMsNTgxMzQsNTgxMzUsNTgxMzYsNTgxMzcsNTgxMzgsNTgxMzksNTgxNDAsNTgxNDEsNTgxNDIsNTgxNDMsNTgxNDQsNTgxNDUsNTgxNDYsNTgxNDcs''@;'; put 'put ''NTgxNDgsNTgxNDksNTgxNTAsNTgxNTEsNTgxNTIsNTgxNTMsNTgxNTQsNTgxNTUsNTgxNTYsNTgxNTcsNTgxNTgsNTgxNTksNTgxNjAsNTgxNjEsNTgxNjIsNTgxNjMsNTgxNjQsNTgxNjUsNTgxNjYsNTgxNjcsNTgxNjgsNTgxNjksNTgxNzAsNTgxNzEsNTgxNzIsNTgxNzMsNTgxNzQsNTgx''@;'; put 'put ''NzUsNTgxNzYsNTgxNzcsNTgxNzgsNTgxNzksNTgxODAsNTgxODEsNTgxODIsNTgxODMsNTgxODQsNTgxODUsNTgxODYsNTgxODcsNTgxODgsNTgxODksNDA0NTEsNDA0NTIsNDA0NTMsNDA0NTQsNDA0NTUsNDA0NTYsNDA0NTcsNDA0NTgsNDA0NTksNDA0NjAsNDA0NjEsNDA0NjIsNDA0NjMs''@;'; put 'put ''NDA0NjQsNDA0NjUsNDA0NjYsNDA0NjcsNDA0NjgsNDA0NjksNDA0NzAsNDA0NzEsNDA0NzIsNDA0NzMsNDA0NzQsNDA0NzUsNDA0NzYsNDA0NzcsNDA0NzgsNDA0ODQsNDA0ODcsNDA0OTQsNDA0OTYsNDA1MDAsNDA1MDcsNDA1MDgsNDA1MTIsNDA1MjUsNDA1MjgsNDA1MzAsNDA1MzEsNDA1''@;'; put 'put ''MzIsNDA1MzQsNDA1MzcsNDA1NDEsNDA1NDMsNDA1NDQsNDA1NDUsNDA1NDYsNDA1NDksNDA1NTgsNDA1NTksNDA1NjIsNDA1NjQsNDA1NjUsNDA1NjYsNDA1NjcsNDA1NjgsNDA1NjksNDA1NzAsNDA1NzEsNDA1NzIsNDA1NzMsNDA1NzYsNDA1NzcsNDA1NzksNDA1ODAsNDA1ODEsNDA1ODIs''@;'; put 'put ''NDA1ODUsNDA1ODYsNDA1ODgsNDA1ODksNDA1OTAsNDA1OTEsNDA1OTIsNDA1OTMsNDA1OTYsNDA1OTcsNDA1OTgsNDA1OTksNDA2MDAsNDA2MDEsNDA2MDIsNDA2MDMsNDA2MDQsNDA2MDYsNDA2MDgsNDA2MDksNDA2MTAsNDA2MTEsNDA2MTIsNDA2MTMsNDA2MTUsNDA2MTYsNDA2MTcsNDA2''@;'; put 'put ''MTgsNTgxOTAsNTgxOTEsNTgxOTIsNTgxOTMsNTgxOTQsNTgxOTUsNTgxOTYsNTgxOTcsNTgxOTgsNTgxOTksNTgyMDAsNTgyMDEsNTgyMDIsNTgyMDMsNTgyMDQsNTgyMDUsNTgyMDYsNTgyMDcsNTgyMDgsNTgyMDksNTgyMTAsNTgyMTEsNTgyMTIsNTgyMTMsNTgyMTQsNTgyMTUsNTgyMTYs''@;'; put 'put ''NTgyMTcsNTgyMTgsNTgyMTksNTgyMjAsNTgyMjEsNTgyMjIsNTgyMjMsNTgyMjQsNTgyMjUsNTgyMjYsNTgyMjcsNTgyMjgsNTgyMjksNTgyMzAsNTgyMzEsNTgyMzIsNTgyMzMsNTgyMzQsNTgyMzUsNTgyMzYsNTgyMzcsNTgyMzgsNTgyMzksNTgyNDAsNTgyNDEsNTgyNDIsNTgyNDMsNTgy''@;'; put 'put ''NDQsNTgyNDUsNTgyNDYsNTgyNDcsNTgyNDgsNTgyNDksNTgyNTAsNTgyNTEsNTgyNTIsNTgyNTMsNTgyNTQsNTgyNTUsNTgyNTYsNTgyNTcsNTgyNTgsNTgyNTksNTgyNjAsNTgyNjEsNTgyNjIsNTgyNjMsNTgyNjQsNTgyNjUsNTgyNjYsNTgyNjcsNTgyNjgsNTgyNjksNTgyNzAsNTgyNzEs''@;'; put 'put ''NTgyNzIsNTgyNzMsNTgyNzQsNTgyNzUsNTgyNzYsNTgyNzcsNTgyNzgsNTgyNzksNTgyODAsNTgyODEsNTgyODIsNTgyODMsNDA2MTksNDA2MjAsNDA2MjEsNDA2MjIsNDA2MjMsNDA2MjQsNDA2MjUsNDA2MjYsNDA2MjcsNDA2MjksNDA2MzAsNDA2MzEsNDA2MzMsNDA2MzQsNDA2MzYsNDA2''@;'; put 'put ''MzksNDA2NDAsNDA2NDEsNDA2NDIsNDA2NDMsNDA2NDUsNDA2NDYsNDA2NDcsNDA2NDgsNDA2NTAsNDA2NTEsNDA2NTIsNDA2NTYsNDA2NTgsNDA2NTksNDA2NjEsNDA2NjIsNDA2NjMsNDA2NjUsNDA2NjYsNDA2NzAsNDA2NzMsNDA2NzUsNDA2NzYsNDA2NzgsNDA2ODAsNDA2ODMsNDA2ODQs''@;'; put 'put ''NDA2ODUsNDA2ODYsNDA2ODgsNDA2ODksNDA2OTAsNDA2OTEsNDA2OTIsNDA2OTMsNDA2OTQsNDA2OTUsNDA2OTYsNDA2OTgsNDA3MDEsNDA3MDMsNDA3MDQsNDA3MDUsNDA3MDYsNDA3MDcsNDA3MDgsNDA3MDksNDA3MTAsNDA3MTEsNDA3MTIsNDA3MTMsNDA3MTQsNDA3MTYsNDA3MTksNDA3''@;'; put 'put ''MjEsNDA3MjIsNDA3MjQsNDA3MjUsNDA3MjYsNDA3MjgsNDA3MzAsNDA3MzEsNDA3MzIsNDA3MzMsNDA3MzQsNDA3MzUsNDA3MzcsNDA3MzksNDA3NDAsNDA3NDEsNDA3NDIsNDA3NDMsNDA3NDQsNDA3NDUsNDA3NDYsNDA3NDcsNDA3NDksNDA3NTAsNDA3NTIsNDA3NTMsNTgyODQsNTgyODUs''@;'; put 'put ''NTgyODYsNTgyODcsNTgyODgsNTgyODksNTgyOTAsNTgyOTEsNTgyOTIsNTgyOTMsNTgyOTQsNTgyOTUsNTgyOTYsNTgyOTcsNTgyOTgsNTgyOTksNTgzMDAsNTgzMDEsNTgzMDIsNTgzMDMsNTgzMDQsNTgzMDUsNTgzMDYsNTgzMDcsNTgzMDgsNTgzMDksNTgzMTAsNTgzMTEsNTgzMTIsNTgz''@;'; put 'put ''MTMsNTgzMTQsNTgzMTUsNTgzMTYsNTgzMTcsNTgzMTgsNTgzMTksNTgzMjAsNTgzMjEsNTgzMjIsNTgzMjMsNTgzMjQsNTgzMjUsNTgzMjYsNTgzMjcsNTgzMjgsNTgzMjksNTgzMzAsNTgzMzEsNTgzMzIsNTgzMzMsNTgzMzQsNTgzMzUsNTgzMzYsNTgzMzcsNTgzMzgsNTgzMzksNTgzNDAs''@;'; put 'put ''NTgzNDEsNTgzNDIsNTgzNDMsNTgzNDQsNTgzNDUsNTgzNDYsNTgzNDcsNTgzNDgsNTgzNDksNTgzNTAsNTgzNTEsNTgzNTIsNTgzNTMsNTgzNTQsNTgzNTUsNTgzNTYsNTgzNTcsNTgzNTgsNTgzNTksNTgzNjAsNTgzNjEsNTgzNjIsNTgzNjMsNTgzNjQsNTgzNjUsNTgzNjYsNTgzNjcsNTgz''@;'; put 'put ''NjgsNTgzNjksNTgzNzAsNTgzNzEsNTgzNzIsNTgzNzMsNTgzNzQsNTgzNzUsNTgzNzYsNTgzNzcsNDA3NTQsNDA3NTUsNDA3NTYsNDA3NTcsNDA3NTgsNDA3NjAsNDA3NjIsNDA3NjQsNDA3NjcsNDA3NjgsNDA3NjksNDA3NzAsNDA3NzEsNDA3NzMsNDA3NzQsNDA3NzUsNDA3NzYsNDA3Nzcs''@;'; put 'put ''NDA3NzgsNDA3NzksNDA3ODAsNDA3ODEsNDA3ODIsNDA3ODMsNDA3ODYsNDA3ODcsNDA3ODgsNDA3ODksNDA3OTAsNDA3OTEsNDA3OTIsNDA3OTMsNDA3OTQsNDA3OTUsNDA3OTYsNDA3OTcsNDA3OTgsNDA3OTksNDA4MDAsNDA4MDEsNDA4MDIsNDA4MDMsNDA4MDQsNDA4MDUsNDA4MDYsNDA4''@;'; put 'put ''MDcsNDA4MDgsNDA4MDksNDA4MTAsNDA4MTEsNDA4MTIsNDA4MTMsNDA4MTQsNDA4MTUsNDA4MTYsNDA4MTcsNDA4MTgsNDA4MTksNDA4MjAsNDA4MjEsNDA4MjIsNDA4MjMsNDA4MjQsNDA4MjUsNDA4MjYsNDA4MjcsNDA4MjgsNDA4MjksNDA4MzAsNDA4MzMsNDA4MzQsNDA4NDUsNDA4NDYs''@;'; put 'put ''NDA4NDcsNDA4NDgsNDA4NDksNDA4NTAsNDA4NTEsNDA4NTIsNDA4NTMsNDA4NTQsNDA4NTUsNDA4NTYsNDA4NjAsNDA4NjEsNDA4NjIsNDA4NjUsNDA4NjYsNDA4NjcsNDA4NjgsNDA4NjksNjM3ODgsNjM4NjUsNjM4OTMsNjM5NzUsNjM5ODUsNTgzNzgsNTgzNzksNTgzODAsNTgzODEsNTgz''@;'; put 'put ''ODIsNTgzODMsNTgzODQsNTgzODUsNTgzODYsNTgzODcsNTgzODgsNTgzODksNTgzOTAsNTgzOTEsNTgzOTIsNTgzOTMsNTgzOTQsNTgzOTUsNTgzOTYsNTgzOTcsNTgzOTgsNTgzOTksNTg0MDAsNTg0MDEsNTg0MDIsNTg0MDMsNTg0MDQsNTg0MDUsNTg0MDYsNTg0MDcsNTg0MDgsNTg0MDks''@;'; put 'put ''NTg0MTAsNTg0MTEsNTg0MTIsNTg0MTMsNTg0MTQsNTg0MTUsNTg0MTYsNTg0MTcsNTg0MTgsNTg0MTksNTg0MjAsNTg0MjEsNTg0MjIsNTg0MjMsNTg0MjQsNTg0MjUsNTg0MjYsNTg0MjcsNTg0MjgsNTg0MjksNTg0MzAsNTg0MzEsNTg0MzIsNTg0MzMsNTg0MzQsNTg0MzUsNTg0MzYsNTg0''@;'; put 'put ''MzcsNTg0MzgsNTg0MzksNTg0NDAsNTg0NDEsNTg0NDIsNTg0NDMsNTg0NDQsNTg0NDUsNTg0NDYsNTg0NDcsNTg0NDgsNTg0NDksNTg0NTAsNTg0NTEsNTg0NTIsNTg0NTMsNTg0NTQsNTg0NTUsNTg0NTYsNTg0NTcsNTg0NTgsNTg0NTksNTg0NjAsNTg0NjEsNTg0NjIsNTg0NjMsNTg0NjQs''@;'; put 'put ''NTg0NjUsNTg0NjYsNTg0NjcsNTg0NjgsNTg0NjksNTg0NzAsNTg0NzEsNjQwMTIsNjQwMTMsNjQwMTQsNjQwMTUsNjQwMTcsNjQwMTksNjQwMjAsNjQwMjQsNjQwMzEsNjQwMzIsNjQwMzMsNjQwMzUsNjQwMzYsNjQwMzksNjQwNDAsNjQwNDEsMTE5MDUsNTk0MTQsNTk0MTUsNTk0MTYsMTE5''@;'; put 'put ''MDgsMTM0MjcsMTMzODMsMTE5MTIsMTE5MTUsNTk0MjIsMTM3MjYsMTM4NTAsMTM4MzgsMTE5MTYsMTE5MjcsMTQ3MDIsMTQ2MTYsNTk0MzAsMTQ3OTksMTQ4MTUsMTQ5NjMsMTQ4MDAsNTk0MzUsNTk0MzYsMTUxODIsMTU0NzAsMTU1ODQsMTE5NDMsNTk0NDEsNTk0NDIsMTE5NDYsMTY0NzAs''@;'; put 'put ''MTY3MzUsMTE5NTAsMTcyMDcsMTE5NTUsMTE5NTgsMTE5NTksNTk0NTEsMTczMjksMTczMjQsMTE5NjMsMTczNzMsMTc2MjIsMTgwMTcsMTc5OTYsNTk0NTksMTgyMTEsMTgyMTcsMTgzMDAsMTgzMTcsMTE5NzgsMTg3NTksMTg4MTAsMTg4MTMsMTg4MTgsMTg4MTksMTg4MjEsMTg4MjIsMTg4''@;'; put 'put ''NDcsMTg4NDMsMTg4NzEsMTg4NzAsNTk0NzYsNTk0NzcsMTk2MTksMTk2MTUsMTk2MTYsMTk2MTcsMTk1NzUsMTk2MTgsMTk3MzEsMTk3MzIsMTk3MzMsMTk3MzQsMTk3MzUsMTk3MzYsMTk3MzcsMTk4ODYsNTk0OTIsNTg0NzIsNTg0NzMsNTg0NzQsNTg0NzUsNTg0NzYsNTg0NzcsNTg0Nzgs''@;'; put 'put ''NTg0NzksNTg0ODAsNTg0ODEsNTg0ODIsNTg0ODMsNTg0ODQsNTg0ODUsNTg0ODYsNTg0ODcsNTg0ODgsNTg0ODksNTg0OTAsNTg0OTEsNTg0OTIsNTg0OTMsNTg0OTQsNTg0OTUsNTg0OTYsNTg0OTcsNTg0OTgsNTg0OTksNTg1MDAsNTg1MDEsNTg1MDIsNTg1MDMsNTg1MDQsNTg1MDUsNTg1''@;'; put 'put ''MDYsNTg1MDcsNTg1MDgsNTg1MDksNTg1MTAsNTg1MTEsNTg1MTIsNTg1MTMsNTg1MTQsNTg1MTUsNTg1MTYsNTg1MTcsNTg1MTgsNTg1MTksNTg1MjAsNTg1MjEsNTg1MjIsNTg1MjMsNTg1MjQsNTg1MjUsNTg1MjYsNTg1MjcsNTg1MjgsNTg1MjksNTg1MzAsNTg1MzEsNTg1MzIsNTg1MzMs''@;'; put 'put ''NTg1MzQsNTg1MzUsNTg1MzYsNTg1MzcsNTg1MzgsNTg1MzksNTg1NDAsNTg1NDEsNTg1NDIsNTg1NDMsNTg1NDQsNTg1NDUsNTg1NDYsNTg1NDcsNTg1NDgsNTg1NDksNTg1NTAsNTg1NTEsNTg1NTIsNTg1NTMsNTg1NTQsNTg1NTUsNTg1NTYsNTg1NTcsNTg1NTgsNTg1NTksNTg1NjAsNTg1''@;'; put 'put ''NjEsNTg1NjIsNTg1NjMsNTg1NjQsNTg1NjVdLCJnYjE4MDMwLXJhbmdlcyI6W1swLDEyOF0sWzM2LDE2NV0sWzM4LDE2OV0sWzQ1LDE3OF0sWzUwLDE4NF0sWzgxLDIxNl0sWzg5LDIyNl0sWzk1LDIzNV0sWzk2LDIzOF0sWzEwMCwyNDRdLFsxMDMsMjQ4XSxbMTA0LDI1MV0sWzEwNSwyNTNd''@;'; put 'put ''LFsxMDksMjU4XSxbMTI2LDI3Nl0sWzEzMywyODRdLFsxNDgsMzAwXSxbMTcyLDMyNV0sWzE3NSwzMjldLFsxNzksMzM0XSxbMjA4LDM2NF0sWzMwNiw0NjNdLFszMDcsNDY1XSxbMzA4LDQ2N10sWzMwOSw0NjldLFszMTAsNDcxXSxbMzExLDQ3M10sWzMxMiw0NzVdLFszMTMsNDc3XSxbMzQx''@;'; put 'put ''LDUwNl0sWzQyOCw1OTRdLFs0NDMsNjEwXSxbNTQ0LDcxMl0sWzU0NSw3MTZdLFs1NTgsNzMwXSxbNzQxLDkzMF0sWzc0Miw5MzhdLFs3NDksOTYyXSxbNzUwLDk3MF0sWzgwNSwxMDI2XSxbODE5LDExMDRdLFs4MjAsMTEwNl0sWzc5MjIsODIwOV0sWzc5MjQsODIxNV0sWzc5MjUsODIxOF0s''@;'; put 'put ''Wzc5MjcsODIyMl0sWzc5MzQsODIzMV0sWzc5NDMsODI0MV0sWzc5NDQsODI0NF0sWzc5NDUsODI0Nl0sWzc5NTAsODI1Ml0sWzgwNjIsODM2NV0sWzgxNDgsODQ1Ml0sWzgxNDksODQ1NF0sWzgxNTIsODQ1OF0sWzgxNjQsODQ3MV0sWzgxNzQsODQ4Ml0sWzgyMzYsODU1Nl0sWzgyNDAsODU3''@;'; put 'put ''MF0sWzgyNjIsODU5Nl0sWzgyNjQsODYwMl0sWzgzNzQsODcxM10sWzgzODAsODcyMF0sWzgzODEsODcyMl0sWzgzODQsODcyNl0sWzgzODgsODczMV0sWzgzOTAsODczN10sWzgzOTIsODc0MF0sWzgzOTMsODc0Ml0sWzgzOTQsODc0OF0sWzgzOTYsODc1MV0sWzg0MDEsODc2MF0sWzg0MDYs''@;'; put 'put ''ODc2Nl0sWzg0MTYsODc3N10sWzg0MTksODc4MV0sWzg0MjQsODc4N10sWzg0MzcsODgwMl0sWzg0MzksODgwOF0sWzg0NDUsODgxNl0sWzg0ODIsODg1NF0sWzg0ODUsODg1OF0sWzg0OTYsODg3MF0sWzg1MjEsODg5Nl0sWzg2MDMsODk3OV0sWzg5MzYsOTMyMl0sWzg5NDYsOTM3Ml0sWzkw''@;'; put 'put ''NDYsOTU0OF0sWzkwNTAsOTU4OF0sWzkwNjMsOTYxNl0sWzkwNjYsOTYyMl0sWzkwNzYsOTYzNF0sWzkwOTIsOTY1Ml0sWzkxMDAsOTY2Ml0sWzkxMDgsOTY3Ml0sWzkxMTEsOTY3Nl0sWzkxMTMsOTY4MF0sWzkxMzEsOTcwMl0sWzkxNjIsOTczNV0sWzkxNjQsOTczOF0sWzkyMTgsOTc5M10s''@;'; put 'put ''WzkyMTksOTc5NV0sWzExMzI5LDExOTA2XSxbMTEzMzEsMTE5MDldLFsxMTMzNCwxMTkxM10sWzExMzM2LDExOTE3XSxbMTEzNDYsMTE5MjhdLFsxMTM2MSwxMTk0NF0sWzExMzYzLDExOTQ3XSxbMTEzNjYsMTE5NTFdLFsxMTM3MCwxMTk1Nl0sWzExMzcyLDExOTYwXSxbMTEzNzUsMTE5NjRd''@;'; put 'put ''LFsxMTM4OSwxMTk3OV0sWzExNjgyLDEyMjg0XSxbMTE2ODYsMTIyOTJdLFsxMTY4NywxMjMxMl0sWzExNjkyLDEyMzE5XSxbMTE2OTQsMTIzMzBdLFsxMTcxNCwxMjM1MV0sWzExNzE2LDEyNDM2XSxbMTE3MjMsMTI0NDddLFsxMTcyNSwxMjUzNV0sWzExNzMwLDEyNTQzXSxbMTE3MzYsMTI1''@;'; put 'put ''ODZdLFsxMTk4MiwxMjg0Ml0sWzExOTg5LDEyODUwXSxbMTIxMDIsMTI5NjRdLFsxMjMzNiwxMzIwMF0sWzEyMzQ4LDEzMjE1XSxbMTIzNTAsMTMyMThdLFsxMjM4NCwxMzI1M10sWzEyMzkzLDEzMjYzXSxbMTIzOTUsMTMyNjddLFsxMjM5NywxMzI3MF0sWzEyNTEwLDEzMzg0XSxbMTI1NTMs''@;'; put 'put ''MTM0MjhdLFsxMjg1MSwxMzcyN10sWzEyOTYyLDEzODM5XSxbMTI5NzMsMTM4NTFdLFsxMzczOCwxNDYxN10sWzEzODIzLDE0NzAzXSxbMTM5MTksMTQ4MDFdLFsxMzkzMywxNDgxNl0sWzE0MDgwLDE0OTY0XSxbMTQyOTgsMTUxODNdLFsxNDU4NSwxNTQ3MV0sWzE0Njk4LDE1NTg1XSxbMTU1''@;'; put 'put ''ODMsMTY0NzFdLFsxNTg0NywxNjczNl0sWzE2MzE4LDE3MjA4XSxbMTY0MzQsMTczMjVdLFsxNjQzOCwxNzMzMF0sWzE2NDgxLDE3Mzc0XSxbMTY3MjksMTc2MjNdLFsxNzEwMiwxNzk5N10sWzE3MTIyLDE4MDE4XSxbMTczMTUsMTgyMTJdLFsxNzMyMCwxODIxOF0sWzE3NDAyLDE4MzAxXSxb''@;'; put 'put ''MTc0MTgsMTgzMThdLFsxNzg1OSwxODc2MF0sWzE3OTA5LDE4ODExXSxbMTc5MTEsMTg4MTRdLFsxNzkxNSwxODgyMF0sWzE3OTE2LDE4ODIzXSxbMTc5MzYsMTg4NDRdLFsxNzkzOSwxODg0OF0sWzE3OTYxLDE4ODcyXSxbMTg2NjQsMTk1NzZdLFsxODcwMywxOTYyMF0sWzE4ODE0LDE5NzM4''@;'; put 'put ''XSxbMTg5NjIsMTk4ODddLFsxOTA0Myw0MDg3MF0sWzMzNDY5LDU5MjQ0XSxbMzM0NzAsNTkzMzZdLFszMzQ3MSw1OTM2N10sWzMzNDg0LDU5NDEzXSxbMzM0ODUsNTk0MTddLFszMzQ5MCw1OTQyM10sWzMzNDk3LDU5NDMxXSxbMzM1MDEsNTk0MzddLFszMzUwNSw1OTQ0M10sWzMzNTEzLDU5''@;'; put 'put ''NDUyXSxbMzM1MjAsNTk0NjBdLFszMzUzNiw1OTQ3OF0sWzMzNTUwLDU5NDkzXSxbMzc4NDUsNjM3ODldLFszNzkyMSw2Mzg2Nl0sWzM3OTQ4LDYzODk0XSxbMzgwMjksNjM5NzZdLFszODAzOCw2Mzk4Nl0sWzM4MDY0LDY0MDE2XSxbMzgwNjUsNjQwMThdLFszODA2Niw2NDAyMV0sWzM4MDY5''@;'; put 'put ''LDY0MDI1XSxbMzgwNzUsNjQwMzRdLFszODA3Niw2NDAzN10sWzM4MDc4LDY0MDQyXSxbMzkxMDgsNjUwNzRdLFszOTEwOSw2NTA5M10sWzM5MTEzLDY1MTA3XSxbMzkxMTQsNjUxMTJdLFszOTExNSw2NTEyN10sWzM5MTE2LDY1MTMyXSxbMzkyNjUsNjUzNzVdLFszOTM5NCw2NTUxMF0sWzE4''@;'; put 'put ''OWUzLDY1NTM2XV0samlzMDIwODpbMTIyODgsMTIyODksMTIyOTAsNjUyOTIsNjUyOTQsMTI1MzksNjUzMDYsNjUzMDcsNjUzMTEsNjUyODEsMTI0NDMsMTI0NDQsMTgwLDY1MzQ0LDE2OCw2NTM0Miw2NTUwNyw2NTM0MywxMjU0MSwxMjU0MiwxMjQ0NSwxMjQ0NiwxMjI5MSwyMDE4OSwxMjI5''@;'; put 'put ''MywxMjI5NCwxMjI5NSwxMjU0MCw4MjEzLDgyMDgsNjUyOTUsNjUzNDAsNjUzNzQsODc0MSw2NTM3Miw4MjMwLDgyMjksODIxNiw4MjE3LDgyMjAsODIyMSw2NTI4OCw2NTI4OSwxMjMwOCwxMjMwOSw2NTMzOSw2NTM0MSw2NTM3MSw2NTM3MywxMjI5NiwxMjI5NywxMjI5OCwxMjI5OSwxMjMw''@;'; put 'put ''MCwxMjMwMSwxMjMwMiwxMjMwMywxMjMwNCwxMjMwNSw2NTI5MSw2NTI5MywxNzcsMjE1LDI0Nyw2NTMwOSw4ODAwLDY1MzA4LDY1MzEwLDg4MDYsODgwNyw4NzM0LDg3NTYsOTc5NCw5NzkyLDE3Niw4MjQyLDgyNDMsODQ1MSw2NTUwOSw2NTI4NCw2NTUwNCw2NTUwNSw2NTI4NSw2NTI4Myw2''@;'; put 'put ''NTI4Niw2NTI5MCw2NTMxMiwxNjcsOTczNCw5NzMzLDk2NzUsOTY3OSw5Njc4LDk2NzEsOTY3MCw5NjMzLDk2MzIsOTY1MSw5NjUwLDk2NjEsOTY2MCw4MjUxLDEyMzA2LDg1OTQsODU5Miw4NTkzLDg1OTUsMTIzMDcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLDg3MTIsODcxNSw4ODM4LDg4MzksODgzNCw4ODM1LDg3NDYsODc0NSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsODc0Myw4NzQ0LDY1NTA2LDg2NTgsODY2MCw4NzA0LDg3MDcsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLDg3MzYsODg2OSw4OTc4LDg3MDYsODcxMSw4ODAxLDg3ODYsODgxMCw4ODExLDg3MzAsODc2NSw4NzMzLDg3NTcsODc0Nyw4NzQ4LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsODQ5MSw4MjQwLDk4MzksOTgzNyw5ODM0LDgyMjQsODIyNSwx''@;'; put 'put ''ODIsbnVsbCxudWxsLG51bGwsbnVsbCw5NzExLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDY1Mjk2LDY1Mjk3LDY1Mjk4LDY1Mjk5LDY1MzAwLDY1MzAxLDY1MzAyLDY1MzAzLDY1MzA0LDY1MzA1LG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNjUzMTMsNjUzMTQsNjUzMTUsNjUzMTYsNjUzMTcsNjUzMTgsNjUzMTksNjUzMjAsNjUzMjEsNjUzMjIsNjUzMjMsNjUzMjQsNjUzMjUsNjUzMjYsNjUzMjcsNjUzMjgsNjUzMjksNjUzMzAsNjUzMzEsNjUzMzIsNjUzMzMsNjUzMzQs''@;'; put 'put ''NjUzMzUsNjUzMzYsNjUzMzcsNjUzMzgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNjUzNDUsNjUzNDYsNjUzNDcsNjUzNDgsNjUzNDksNjUzNTAsNjUzNTEsNjUzNTIsNjUzNTMsNjUzNTQsNjUzNTUsNjUzNTYsNjUzNTcsNjUzNTgsNjUzNTksNjUzNjAsNjUzNjEsNjUzNjIsNjUz''@;'; put 'put ''NjMsNjUzNjQsNjUzNjUsNjUzNjYsNjUzNjcsNjUzNjgsNjUzNjksNjUzNzAsbnVsbCxudWxsLG51bGwsbnVsbCwxMjM1MywxMjM1NCwxMjM1NSwxMjM1NiwxMjM1NywxMjM1OCwxMjM1OSwxMjM2MCwxMjM2MSwxMjM2MiwxMjM2MywxMjM2NCwxMjM2NSwxMjM2NiwxMjM2NywxMjM2OCwxMjM2''@;'; put 'put ''OSwxMjM3MCwxMjM3MSwxMjM3MiwxMjM3MywxMjM3NCwxMjM3NSwxMjM3NiwxMjM3NywxMjM3OCwxMjM3OSwxMjM4MCwxMjM4MSwxMjM4MiwxMjM4MywxMjM4NCwxMjM4NSwxMjM4NiwxMjM4NywxMjM4OCwxMjM4OSwxMjM5MCwxMjM5MSwxMjM5MiwxMjM5MywxMjM5NCwxMjM5NSwxMjM5Niwx''@;'; put 'put ''MjM5NywxMjM5OCwxMjM5OSwxMjQwMCwxMjQwMSwxMjQwMiwxMjQwMywxMjQwNCwxMjQwNSwxMjQwNiwxMjQwNywxMjQwOCwxMjQwOSwxMjQxMCwxMjQxMSwxMjQxMiwxMjQxMywxMjQxNCwxMjQxNSwxMjQxNiwxMjQxNywxMjQxOCwxMjQxOSwxMjQyMCwxMjQyMSwxMjQyMiwxMjQyMywxMjQy''@;'; put 'put ''NCwxMjQyNSwxMjQyNiwxMjQyNywxMjQyOCwxMjQyOSwxMjQzMCwxMjQzMSwxMjQzMiwxMjQzMywxMjQzNCwxMjQzNSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTI0NDksMTI0NTAsMTI0NTEsMTI0NTIsMTI0NTMsMTI0NTQsMTI0NTUs''@;'; put 'put ''MTI0NTYsMTI0NTcsMTI0NTgsMTI0NTksMTI0NjAsMTI0NjEsMTI0NjIsMTI0NjMsMTI0NjQsMTI0NjUsMTI0NjYsMTI0NjcsMTI0NjgsMTI0NjksMTI0NzAsMTI0NzEsMTI0NzIsMTI0NzMsMTI0NzQsMTI0NzUsMTI0NzYsMTI0NzcsMTI0NzgsMTI0NzksMTI0ODAsMTI0ODEsMTI0ODIsMTI0''@;'; put 'put ''ODMsMTI0ODQsMTI0ODUsMTI0ODYsMTI0ODcsMTI0ODgsMTI0ODksMTI0OTAsMTI0OTEsMTI0OTIsMTI0OTMsMTI0OTQsMTI0OTUsMTI0OTYsMTI0OTcsMTI0OTgsMTI0OTksMTI1MDAsMTI1MDEsMTI1MDIsMTI1MDMsMTI1MDQsMTI1MDUsMTI1MDYsMTI1MDcsMTI1MDgsMTI1MDksMTI1MTAs''@;'; put 'put ''MTI1MTEsMTI1MTIsMTI1MTMsMTI1MTQsMTI1MTUsMTI1MTYsMTI1MTcsMTI1MTgsMTI1MTksMTI1MjAsMTI1MjEsMTI1MjIsMTI1MjMsMTI1MjQsMTI1MjUsMTI1MjYsMTI1MjcsMTI1MjgsMTI1MjksMTI1MzAsMTI1MzEsMTI1MzIsMTI1MzMsMTI1MzQsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5NDUsOTQ2LDk0''@;'; put 'put ''Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTAyNSwxMDQ2LDEwNDcsMTA0OCwxMDQ5''@;'; put 'put ''LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTEwNSwxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5''@;'; put 'put ''LDExMDAsMTEwMSwxMTAyLDExMDMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTYsOTQ5Miw5NTAwLDk1MTYsOTUwOCw5NTI0LDk1MzIsOTQ3Myw5NDc1LDk0ODcsOTQ5MSw5NDk5''@;'; put 'put ''LDk0OTUsOTUwNyw5NTIzLDk1MTUsOTUzMSw5NTQ3LDk1MDQsOTUxOSw5NTEyLDk1MjcsOTUzNSw5NTAxLDk1MjAsOTUwOSw5NTI4LDk1MzgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; 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 ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsOTMxMiw5MzEzLDkzMTQsOTMxNSw5MzE2LDkzMTcsOTMxOCw5MzE5''@;'; put 'put ''LDkzMjAsOTMyMSw5MzIyLDkzMjMsOTMyNCw5MzI1LDkzMjYsOTMyNyw5MzI4LDkzMjksOTMzMCw5MzMxLDg1NDQsODU0NSw4NTQ2LDg1NDcsODU0OCw4NTQ5LDg1NTAsODU1MSw4NTUyLDg1NTMsbnVsbCwxMzEyOSwxMzA3NiwxMzA5MCwxMzEzMywxMzA4MCwxMzA5NSwxMzA1OSwxMzExMCwx''@;'; put 'put ''MzEzNywxMzE0MywxMzA2OSwxMzA5NCwxMzA5MSwxMzA5OSwxMzEzMCwxMzExNSwxMzIxMiwxMzIxMywxMzIxNCwxMzE5OCwxMzE5OSwxMzI1MiwxMzIxNyxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTMxNzksMTIzMTcsMTIzMTksODQ3MCwxMzI2MSw4NDgxLDEy''@;'; put 'put ''OTY0LDEyOTY1LDEyOTY2LDEyOTY3LDEyOTY4LDEyODQ5LDEyODUwLDEyODU3LDEzMTgyLDEzMTgxLDEzMTgwLDg3ODYsODgwMSw4NzQ3LDg3NTAsODcyMSw4NzMwLDg4NjksODczNiw4NzM1LDg4OTUsODc1Nyw4NzQ1LDg3NDYsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwyMDEyNCwyMTc4MiwyMzA0MywzODQ2MywyMTY5NiwyNDg1OSwyNTM4NCwyMzAzMCwzNjg5OCwzMzkwOSwzMzU2NCwzMTMxMiwyNDc0''@;'; put 'put ''NiwyNTU2OSwyODE5NywyNjA5MywzMzg5NCwzMzQ0NiwzOTkyNSwyNjc3MSwyMjMxMSwyNjAxNywyNTIwMSwyMzQ1MSwyMjk5MiwzNDQyNywzOTE1NiwzMjA5OCwzMjE5MCwzOTgyMiwyNTExMCwzMTkwMywzNDk5OSwyMzQzMywyNDI0NSwyNTM1MywyNjI2MywyNjY5NiwzODM0MywzODc5Nywy''@;'; put 'put ''NjQ0NywyMDE5NywyMDIzNCwyMDMwMSwyMDM4MSwyMDU1MywyMjI1OCwyMjgzOSwyMjk5NiwyMzA0MSwyMzU2MSwyNDc5OSwyNDg0NywyNDk0NCwyNjEzMSwyNjg4NSwyODg1OCwzMDAzMSwzMDA2NCwzMTIyNywzMjE3MywzMjIzOSwzMjk2MywzMzgwNiwzNDkxNSwzNTU4NiwzNjk0OSwzNjk4''@;'; put 'put ''NiwyMTMwNywyMDExNywyMDEzMywyMjQ5NSwzMjk0NiwzNzA1NywzMDk1OSwxOTk2OCwyMjc2OSwyODMyMiwzNjkyMCwzMTI4MiwzMzU3NiwzMzQxOSwzOTk4MywyMDgwMSwyMTM2MCwyMTY5MywyMTcyOSwyMjI0MCwyMzAzNSwyNDM0MSwzOTE1NCwyODEzOSwzMjk5NiwzNDA5MywzODQ5OCwz''@;'; put 'put ''ODUxMiwzODU2MCwzODkwNywyMTUxNSwyMTQ5MSwyMzQzMSwyODg3OSwzMjcwMSwzNjgwMiwzODYzMiwyMTM1OSw0MDI4NCwzMTQxOCwxOTk4NSwzMDg2NywzMzI3NiwyODE5OCwyMjA0MCwyMTc2NCwyNzQyMSwzNDA3NCwzOTk5NSwyMzAxMywyMTQxNywyODAwNiwyOTkxNiwzODI4NywyMjA4''@;'; put 'put ''MiwyMDExMywzNjkzOSwzODY0MiwzMzYxNSwzOTE4MCwyMTQ3MywyMTk0MiwyMzM0NCwyNDQzMywyNjE0NCwyNjM1NSwyNjYyOCwyNzcwNCwyNzg5MSwyNzk0NSwyOTc4NywzMDQwOCwzMTMxMCwzODk2NCwzMzUyMSwzNDkwNywzNTQyNCwzNzYxMywyODA4MiwzMDEyMywzMDQxMCwzOTM2NSwy''@;'; put 'put ''NDc0MiwzNTU4NSwzNjIzNCwzODMyMiwyNzAyMiwyMTQyMSwyMDg3MCwyMjI5MCwyMjU3NiwyMjg1MiwyMzQ3NiwyNDMxMCwyNDYxNiwyNTUxMywyNTU4OCwyNzgzOSwyODQzNiwyODgxNCwyODk0OCwyOTAxNywyOTE0MSwyOTUwMywzMjI1NywzMzM5OCwzMzQ4OSwzNDE5OSwzNjk2MCwzNzQ2''@;'; put 'put ''Nyw0MDIxOSwyMjYzMywyNjA0NCwyNzczOCwyOTk4OSwyMDk4NSwyMjgzMCwyMjg4NSwyNDQ0OCwyNDU0MCwyNTI3NiwyNjEwNiwyNzE3OCwyNzQzMSwyNzU3MiwyOTU3OSwzMjcwNSwzNTE1OCw0MDIzNiw0MDIwNiw0MDY0NCwyMzcxMywyNzc5OCwzMzY1OSwyMDc0MCwyMzYyNywyNTAxNCwz''@;'; put 'put ''MzIyMiwyNjc0MiwyOTI4MSwyMDA1NywyMDQ3NCwyMTM2OCwyNDY4MSwyODIwMSwzMTMxMSwzODg5OSwxOTk3OSwyMTI3MCwyMDIwNiwyMDMwOSwyMDI4NSwyMDM4NSwyMDMzOSwyMTE1MiwyMTQ4NywyMjAyNSwyMjc5OSwyMzIzMywyMzQ3OCwyMzUyMSwzMTE4NSwyNjI0NywyNjUyNCwyNjU1''@;'; put 'put ''MCwyNzQ2OCwyNzgyNywyODc3OSwyOTYzNCwzMTExNywzMTE2NiwzMTI5MiwzMTYyMywzMzQ1NywzMzQ5OSwzMzU0MCwzMzY1NSwzMzc3NSwzMzc0NywzNDY2MiwzNTUwNiwyMjA1NywzNjAwOCwzNjgzOCwzNjk0MiwzODY4NiwzNDQ0MiwyMDQyMCwyMzc4NCwyNTEwNSwyOTI3MywzMDAxMSwz''@;'; put 'put ''MzI1MywzMzQ2OSwzNDU1OCwzNjAzMiwzODU5NywzOTE4NywzOTM4MSwyMDE3MSwyMDI1MCwzNTI5OSwyMjIzOCwyMjYwMiwyMjczMCwyNDMxNSwyNDU1NSwyNDYxOCwyNDcyNCwyNDY3NCwyNTA0MCwyNTEwNiwyNTI5NiwyNTkxMywzOTc0NSwyNjIxNCwyNjgwMCwyODAyMywyODc4NCwzMDAy''@;'; put 'put ''OCwzMDM0MiwzMjExNywzMzQ0NSwzNDgwOSwzODI4MywzODU0MiwzNTk5NywyMDk3NywyMTE4MiwyMjgwNiwyMTY4MywyMzQ3NSwyMzgzMCwyNDkzNiwyNzAxMCwyODA3OSwzMDg2MSwzMzk5NSwzNDkwMywzNTQ0MiwzNzc5OSwzOTYwOCwyODAxMiwzOTMzNiwzNDUyMSwyMjQzNSwyNjYyMywz''@;'; put 'put ''NDUxMCwzNzM5MCwyMTEyMywyMjE1MSwyMTUwOCwyNDI3NSwyNTMxMywyNTc4NSwyNjY4NCwyNjY4MCwyNzU3OSwyOTU1NCwzMDkwNiwzMTMzOSwzNTIyNiwzNTI4MiwzNjIwMywzNjYxMSwzNzEwMSwzODMwNywzODU0OCwzODc2MSwyMzM5OCwyMzczMSwyNzAwNSwzODk4OSwzODk5MCwyNTQ5''@;'; put 'put ''OSwzMTUyMCwyNzE3OSwyNzI2MywyNjgwNiwzOTk0OSwyODUxMSwyMTEwNiwyMTkxNywyNDY4OCwyNTMyNCwyNzk2MywyODE2NywyODM2OSwzMzg4MywzNTA4OCwzNjY3NiwxOTk4OCwzOTk5MywyMTQ5NCwyNjkwNywyNzE5NCwzODc4OCwyNjY2NiwyMDgyOCwzMTQyNywzMzk3MCwzNzM0MCwz''@;'; put 'put ''Nzc3MiwyMjEwNyw0MDIzMiwyNjY1OCwzMzU0MSwzMzg0MSwzMTkwOSwyMWUzLDMzNDc3LDI5OTI2LDIwMDk0LDIwMzU1LDIwODk2LDIzNTA2LDIxMDAyLDIxMjA4LDIxMjIzLDI0MDU5LDIxOTE0LDIyNTcwLDIzMDE0LDIzNDM2LDIzNDQ4LDIzNTE1LDI0MTc4LDI0MTg1LDI0NzM5LDI0ODYz''@;'; put 'put ''LDI0OTMxLDI1MDIyLDI1NTYzLDI1OTU0LDI2NTc3LDI2NzA3LDI2ODc0LDI3NDU0LDI3NDc1LDI3NzM1LDI4NDUwLDI4NTY3LDI4NDg1LDI5ODcyLDI5OTc2LDMwNDM1LDMwNDc1LDMxNDg3LDMxNjQ5LDMxNzc3LDMyMjMzLDMyNTY2LDMyNzUyLDMyOTI1LDMzMzgyLDMzNjk0LDM1MjUxLDM1''@;'; put 'put ''NTMyLDM2MDExLDM2OTk2LDM3OTY5LDM4MjkxLDM4Mjg5LDM4MzA2LDM4NTAxLDM4ODY3LDM5MjA4LDMzMzA0LDIwMDI0LDIxNTQ3LDIzNzM2LDI0MDEyLDI5NjA5LDMwMjg0LDMwNTI0LDIzNzIxLDMyNzQ3LDM2MTA3LDM4NTkzLDM4OTI5LDM4OTk2LDM5ZTMsMjAyMjUsMjAyMzgsMjEzNjEs''@;'; put 'put ''MjE5MTYsMjIxMjAsMjI1MjIsMjI4NTUsMjMzMDUsMjM0OTIsMjM2OTYsMjQwNzYsMjQxOTAsMjQ1MjQsMjU1ODIsMjY0MjYsMjYwNzEsMjYwODIsMjYzOTksMjY4MjcsMjY4MjAsMjcyMzEsMjQxMTIsMjc1ODksMjc2NzEsMjc3NzMsMzAwNzksMzEwNDgsMjMzOTUsMzEyMzIsMzJlMywyNDUw''@;'; put 'put ''OSwzNTIxNSwzNTM1MiwzNjAyMCwzNjIxNSwzNjU1NiwzNjYzNywzOTEzOCwzOTQzOCwzOTc0MCwyMDA5NiwyMDYwNSwyMDczNiwyMjkzMSwyMzQ1MiwyNTEzNSwyNTIxNiwyNTgzNiwyNzQ1MCwyOTM0NCwzMDA5NywzMTA0NywzMjY4MSwzNDgxMSwzNTUxNiwzNTY5NiwyNTUxNiwzMzczOCwz''@;'; put 'put ''ODgxNiwyMTUxMywyMTUwNywyMTkzMSwyNjcwOCwyNzIyNCwzNTQ0MCwzMDc1OSwyNjQ4NSw0MDY1MywyMTM2NCwyMzQ1OCwzMzA1MCwzNDM4NCwzNjg3MCwxOTk5MiwyMDAzNywyMDE2NywyMDI0MSwyMTQ1MCwyMTU2MCwyMzQ3MCwyNDMzOSwyNDYxMywyNTkzNywyNjQyOSwyNzcxNCwyNzc2''@;'; put 'put ''MiwyNzg3NSwyODc5MiwyOTY5OSwzMTM1MCwzMTQwNiwzMTQ5NiwzMjAyNiwzMTk5OCwzMjEwMiwyNjA4NywyOTI3NSwyMTQzNSwyMzYyMSwyNDA0MCwyNTI5OCwyNTMxMiwyNTM2OSwyODE5MiwzNDM5NCwzNTM3NywzNjMxNywzNzYyNCwyODQxNywzMTE0MiwzOTc3MCwyMDEzNiwyMDEzOSwy''@;'; put 'put ''MDE0MCwyMDM3OSwyMDM4NCwyMDY4OSwyMDgwNywzMTQ3OCwyMDg0OSwyMDk4MiwyMTMzMiwyMTI4MSwyMTM3NSwyMTQ4MywyMTkzMiwyMjY1OSwyMzc3NywyNDM3NSwyNDM5NCwyNDYyMywyNDY1NiwyNDY4NSwyNTM3NSwyNTk0NSwyNzIxMSwyNzg0MSwyOTM3OCwyOTQyMSwzMDcwMywzMzAx''@;'; put 'put ''NiwzMzAyOSwzMzI4OCwzNDEyNiwzNzExMSwzNzg1NywzODkxMSwzOTI1NSwzOTUxNCwyMDIwOCwyMDk1NywyMzU5NywyNjI0MSwyNjk4OSwyMzYxNiwyNjM1NCwyNjk5NywyOTU3NywyNjcwNCwzMTg3MywyMDY3NywyMTIyMCwyMjM0MywyNDA2MiwzNzY3MCwyNjAyMCwyNzQyNywyNzQ1Mywy''@;'; put 'put ''OTc0OCwzMTEwNSwzMTE2NSwzMTU2MywzMjIwMiwzMzQ2NSwzMzc0MCwzNDk0MywzNTE2NywzNTY0MSwzNjgxNywzNzMyOSwyMTUzNSwzNzUwNCwyMDA2MSwyMDUzNCwyMTQ3NywyMTMwNiwyOTM5OSwyOTU5MCwzMDY5NywzMzUxMCwzNjUyNywzOTM2NiwzOTM2OCwzOTM3OCwyMDg1NSwyNDg1''@;'; put 'put ''OCwzNDM5OCwyMTkzNiwzMTM1NCwyMDU5OCwyMzUwNywzNjkzNSwzODUzMywyMDAxOCwyNzM1NSwzNzM1MSwyMzYzMywyMzYyNCwyNTQ5NiwzMTM5MSwyNzc5NSwzODc3MiwzNjcwNSwzMTQwMiwyOTA2NiwzODUzNiwzMTg3NCwyNjY0NywzMjM2OCwyNjcwNSwzNzc0MCwyMTIzNCwyMTUzMSwz''@;'; put 'put ''NDIxOSwzNTM0NywzMjY3NiwzNjU1NywzNzA4OSwyMTM1MCwzNDk1MiwzMTA0MSwyMDQxOCwyMDY3MCwyMTAwOSwyMDgwNCwyMTg0MywyMjMxNywyOTY3NCwyMjQxMSwyMjg2NSwyNDQxOCwyNDQ1MiwyNDY5MywyNDk1MCwyNDkzNSwyNTAwMSwyNTUyMiwyNTY1OCwyNTk2NCwyNjIyMywyNjY5''@;'; put 'put ''MCwyODE3OSwzMDA1NCwzMTI5MywzMTk5NSwzMjA3NiwzMjE1MywzMjMzMSwzMjYxOSwzMzU1MCwzMzYxMCwzNDUwOSwzNTMzNiwzNTQyNywzNTY4NiwzNjYwNSwzODkzOCw0MDMzNSwzMzQ2NCwzNjgxNCwzOTkxMiwyMTEyNywyNTExOSwyNTczMSwyODYwOCwzODU1MywyNjY4OSwyMDYyNSwy''@;'; put 'put ''NzQyNCwyNzc3MCwyODUwMCwzMTM0OCwzMjA4MCwzNDg4MCwzNTM2MywyNjM3NiwyMDIxNCwyMDUzNywyMDUxOCwyMDU4MSwyMDg2MCwyMTA0OCwyMTA5MSwyMTkyNywyMjI4NywyMjUzMywyMzI0NCwyNDMxNCwyNTAxMCwyNTA4MCwyNTMzMSwyNTQ1OCwyNjkwOCwyNzE3NywyOTMwOSwyOTM1''@;'; put 'put ''NiwyOTQ4NiwzMDc0MCwzMDgzMSwzMjEyMSwzMDQ3NiwzMjkzNywzNTIxMSwzNTYwOSwzNjA2NiwzNjU2MiwzNjk2MywzNzc0OSwzODUyMiwzODk5NywzOTQ0Myw0MDU2OCwyMDgwMywyMTQwNywyMTQyNywyNDE4NywyNDM1OCwyODE4NywyODMwNCwyOTU3MiwyOTY5NCwzMjA2NywzMzMzNSwz''@;'; put 'put ''NTMyOCwzNTU3OCwzODQ4MCwyMDA0NiwyMDQ5MSwyMTQ3NiwyMTYyOCwyMjI2NiwyMjk5MywyMzM5NiwyNDA0OSwyNDIzNSwyNDM1OSwyNTE0NCwyNTkyNSwyNjU0MywyODI0NiwyOTM5MiwzMTk0NiwzNDk5NiwzMjkyOSwzMjk5MywzMzc3NiwzNDM4MiwzNTQ2MywzNjMyOCwzNzQzMSwzODU5''@;'; put 'put ''OSwzOTAxNSw0MDcyMywyMDExNiwyMDExNCwyMDIzNywyMTMyMCwyMTU3NywyMTU2NiwyMzA4NywyNDQ2MCwyNDQ4MSwyNDczNSwyNjc5MSwyNzI3OCwyOTc4NiwzMDg0OSwzNTQ4NiwzNTQ5MiwzNTcwMywzNzI2NCwyMDA2MiwzOTg4MSwyMDEzMiwyMDM0OCwyMDM5OSwyMDUwNSwyMDUwMiwy''@;'; put 'put ''MDgwOSwyMDg0NCwyMTE1MSwyMTE3NywyMTI0NiwyMTQwMiwyMTQ3NSwyMTUyMSwyMTUxOCwyMTg5NywyMjM1MywyMjQzNCwyMjkwOSwyMzM4MCwyMzM4OSwyMzQzOSwyNDAzNywyNDAzOSwyNDA1NSwyNDE4NCwyNDE5NSwyNDIxOCwyNDI0NywyNDM0NCwyNDY1OCwyNDkwOCwyNTIzOSwyNTMw''@;'; put 'put ''NCwyNTUxMSwyNTkxNSwyNjExNCwyNjE3OSwyNjM1NiwyNjQ3NywyNjY1NywyNjc3NSwyNzA4MywyNzc0MywyNzk0NiwyODAwOSwyODIwNywyODMxNywzMDAwMiwzMDM0MywzMDgyOCwzMTI5NSwzMTk2OCwzMjAwNSwzMjAyNCwzMjA5NCwzMjE3NywzMjc4OSwzMjc3MSwzMjk0MywzMjk0NSwz''@;'; put 'put ''MzEwOCwzMzE2NywzMzMyMiwzMzYxOCwzNDg5MiwzNDkxMywzNTYxMSwzNjAwMiwzNjA5MiwzNzA2NiwzNzIzNywzNzQ4OSwzMDc4MywzNzYyOCwzODMwOCwzODQ3NywzODkxNywzOTMyMSwzOTY0MCw0MDI1MSwyMTA4MywyMTE2MywyMTQ5NSwyMTUxMiwyMjc0MSwyNTMzNSwyODY0MCwzNTk0''@;'; put 'put ''NiwzNjcwMyw0MDYzMywyMDgxMSwyMTA1MSwyMTU3OCwyMjI2OSwzMTI5NiwzNzIzOSw0MDI4OCw0MDY1OCwyOTUwOCwyODQyNSwzMzEzNiwyOTk2OSwyNDU3MywyNDc5NCwzOTU5MiwyOTQwMywzNjc5NiwyNzQ5MiwzODkxNSwyMDE3MCwyMjI1NiwyMjM3MiwyMjcxOCwyMzEzMCwyNDY4MCwy''@;'; put 'put ''NTAzMSwyNjEyNywyNjExOCwyNjY4MSwyNjgwMSwyODE1MSwzMDE2NSwzMjA1OCwzMzM5MCwzOTc0NiwyMDEyMywyMDMwNCwyMTQ0OSwyMTc2NiwyMzkxOSwyNDAzOCwyNDA0NiwyNjYxOSwyNzgwMSwyOTgxMSwzMDcyMiwzNTQwOCwzNzc4MiwzNTAzOSwyMjM1MiwyNDIzMSwyNTM4NywyMDY2''@;'; put 'put ''MSwyMDY1MiwyMDg3NywyNjM2OCwyMTcwNSwyMjYyMiwyMjk3MSwyMzQ3MiwyNDQyNSwyNTE2NSwyNTUwNSwyNjY4NSwyNzUwNywyODE2OCwyODc5NywzNzMxOSwyOTMxMiwzMDc0MSwzMDc1OCwzMTA4NSwyNTk5OCwzMjA0OCwzMzc1NiwzNTAwOSwzNjYxNywzODU1NSwyMTA5MiwyMjMxMiwy''@;'; put 'put ''NjQ0OCwzMjYxOCwzNjAwMSwyMDkxNiwyMjMzOCwzODQ0MiwyMjU4NiwyNzAxOCwzMjk0OCwyMTY4MiwyMzgyMiwyMjUyNCwzMDg2OSw0MDQ0MiwyMDMxNiwyMTA2NiwyMTY0MywyNTY2MiwyNjE1MiwyNjM4OCwyNjYxMywzMTM2NCwzMTU3NCwzMjAzNCwzNzY3OSwyNjcxNiwzOTg1MywzMTU0''@;'; put 'put ''NSwyMTI3MywyMDg3NCwyMTA0NywyMzUxOSwyNTMzNCwyNTc3NCwyNTgzMCwyNjQxMywyNzU3OCwzNDIxNywzODYwOSwzMDM1MiwzOTg5NCwyNTQyMCwzNzYzOCwzOTg1MSwzMDM5OSwyNjE5NCwxOTk3NywyMDYzMiwyMTQ0MiwyMzY2NSwyNDgwOCwyNTc0NiwyNTk1NSwyNjcxOSwyOTE1OCwy''@;'; put 'put ''OTY0MiwyOTk4NywzMTYzOSwzMjM4NiwzNDQ1MywzNTcxNSwzNjA1OSwzNzI0MCwzOTE4NCwyNjAyOCwyNjI4MywyNzUzMSwyMDE4MSwyMDE4MCwyMDI4MiwyMDM1MSwyMTA1MCwyMTQ5NiwyMTQ5MCwyMTk4NywyMjIzNSwyMjc2MywyMjk4NywyMjk4NSwyMzAzOSwyMzM3NiwyMzYyOSwyNDA2''@;'; put 'put ''NiwyNDEwNywyNDUzNSwyNDYwNSwyNTM1MSwyNTkwMywyMzM4OCwyNjAzMSwyNjA0NSwyNjA4OCwyNjUyNSwyNzQ5MCwyNzUxNSwyNzY2MywyOTUwOSwzMTA0OSwzMTE2OSwzMTk5MiwzMjAyNSwzMjA0MywzMjkzMCwzMzAyNiwzMzI2NywzNTIyMiwzNTQyMiwzNTQzMywzNTQzMCwzNTQ2OCwz''@;'; put 'put ''NTU2NiwzNjAzOSwzNjA2MCwzODYwNCwzOTE2NCwyNzUwMywyMDEwNywyMDI4NCwyMDM2NSwyMDgxNiwyMzM4MywyMzU0NiwyNDkwNCwyNTM0NSwyNjE3OCwyNzQyNSwyODM2MywyNzgzNSwyOTI0NiwyOTg4NSwzMDE2NCwzMDkxMywzMTAzNCwzMjc4MCwzMjgxOSwzMzI1OCwzMzk0MCwzNjc2''@;'; put 'put ''NiwyNzcyOCw0MDU3NSwyNDMzNSwzNTY3Miw0MDIzNSwzMTQ4MiwzNjYwMCwyMzQzNywzODYzNSwxOTk3MSwyMTQ4OSwyMjUxOSwyMjgzMywyMzI0MSwyMzQ2MCwyNDcxMywyODI4NywyODQyMiwzMDE0MiwzNjA3NCwyMzQ1NSwzNDA0OCwzMTcxMiwyMDU5NCwyNjYxMiwzMzQzNywyMzY0OSwz''@;'; put 'put ''NDEyMiwzMjI4NiwzMzI5NCwyMDg4OSwyMzU1NiwyNTQ0OCwzNjE5OCwyNjAxMiwyOTAzOCwzMTAzOCwzMjAyMywzMjc3MywzNTYxMywzNjU1NCwzNjk3NCwzNDUwMywzNzAzNCwyMDUxMSwyMTI0MiwyMzYxMCwyNjQ1MSwyODc5NiwyOTIzNywzNzE5NiwzNzMyMCwzNzY3NSwzMzUwOSwyMzQ5''@;'; put 'put ''MCwyNDM2OSwyNDgyNSwyMDAyNywyMTQ2MiwyMzQzMiwyNTE2MywyNjQxNywyNzUzMCwyOTQxNywyOTY2NCwzMTI3OCwzMzEzMSwzNjI1OSwzNzIwMiwzOTMxOCwyMDc1NCwyMTQ2MywyMTYxMCwyMzU1MSwyNTQ4MCwyNzE5MywzMjE3MiwzODY1NiwyMjIzNCwyMTQ1NCwyMTYwOCwyMzQ0Nywy''@;'; put 'put ''MzYwMSwyNDAzMCwyMDQ2MiwyNDgzMywyNTM0MiwyNzk1NCwzMTE2OCwzMTE3OSwzMjA2NiwzMjMzMywzMjcyMiwzMzI2MSwzMzMxMSwzMzkzNiwzNDg4NiwzNTE4NiwzNTcyOCwzNjQ2OCwzNjY1NSwzNjkxMywzNzE5NSwzNzIyOCwzODU5OCwzNzI3NiwyMDE2MCwyMDMwMywyMDgwNSwyMTMx''@;'; put 'put ''MywyNDQ2NywyNTEwMiwyNjU4MCwyNzcxMywyODE3MSwyOTUzOSwzMjI5NCwzNzMyNSwzNzUwNywyMTQ2MCwyMjgwOSwyMzQ4NywyODExMywzMTA2OSwzMjMwMiwzMTg5OSwyMjY1NCwyOTA4NywyMDk4NiwzNDg5OSwzNjg0OCwyMDQyNiwyMzgwMywyNjE0OSwzMDYzNiwzMTQ1OSwzMzMwOCwz''@;'; put 'put ''OTQyMywyMDkzNCwyNDQ5MCwyNjA5MiwyNjk5MSwyNzUyOSwyODE0NywyODMxMCwyODUxNiwzMDQ2MiwzMjAyMCwyNDAzMywzNjk4MSwzNzI1NSwzODkxOCwyMDk2NiwyMTAyMSwyNTE1MiwyNjI1NywyNjMyOSwyODE4NiwyNDI0NiwzMjIxMCwzMjYyNiwyNjM2MCwzNDIyMywzNDI5NSwzNTU3''@;'; put 'put ''NiwyMTE2MSwyMTQ2NSwyMjg5OSwyNDIwNywyNDQ2NCwyNDY2MSwzNzYwNCwzODUwMCwyMDY2MywyMDc2NywyMTIxMywyMTI4MCwyMTMxOSwyMTQ4NCwyMTczNiwyMTgzMCwyMTgwOSwyMjAzOSwyMjg4OCwyMjk3NCwyMzEwMCwyMzQ3NywyMzU1OCwyMzU2NywyMzU2OSwyMzU3OCwyNDE5Niwy''@;'; put 'put ''NDIwMiwyNDI4OCwyNDQzMiwyNTIxNSwyNTIyMCwyNTMwNywyNTQ4NCwyNTQ2MywyNjExOSwyNjEyNCwyNjE1NywyNjIzMCwyNjQ5NCwyNjc4NiwyNzE2NywyNzE4OSwyNzgzNiwyODA0MCwyODE2OSwyODI0OCwyODk4OCwyODk2NiwyOTAzMSwzMDE1MSwzMDQ2NSwzMDgxMywzMDk3NywzMTA3''@;'; put 'put ''NywzMTIxNiwzMTQ1NiwzMTUwNSwzMTkxMSwzMjA1NywzMjkxOCwzMzc1MCwzMzkzMSwzNDEyMSwzNDkwOSwzNTA1OSwzNTM1OSwzNTM4OCwzNTQxMiwzNTQ0MywzNTkzNywzNjA2MiwzNzI4NCwzNzQ3OCwzNzc1OCwzNzkxMiwzODU1NiwzODgwOCwxOTk3OCwxOTk3NiwxOTk5OCwyMDA1NSwy''@;'; put 'put ''MDg4NywyMTEwNCwyMjQ3OCwyMjU4MCwyMjczMiwyMzMzMCwyNDEyMCwyNDc3MywyNTg1NCwyNjQ2NSwyNjQ1NCwyNzk3MiwyOTM2NiwzMDA2NywzMTMzMSwzMzk3NiwzNTY5OCwzNzMwNCwzNzY2NCwyMjA2NSwyMjUxNiwzOTE2NiwyNTMyNSwyNjg5MywyNzU0MiwyOTE2NSwzMjM0MCwzMjg4''@;'; put 'put ''NywzMzM5NCwzNTMwMiwzOTEzNSwzNDY0NSwzNjc4NSwyMzYxMSwyMDI4MCwyMDQ0OSwyMDQwNSwyMTc2NywyMzA3MiwyMzUxNywyMzUyOSwyNDUxNSwyNDkxMCwyNTM5MSwyNjAzMiwyNjE4NywyNjg2MiwyNzAzNSwyODAyNCwyODE0NSwzMDAwMywzMDEzNywzMDQ5NSwzMTA3MCwzMTIwNiwz''@;'; put 'put ''MjA1MSwzMzI1MSwzMzQ1NSwzNDIxOCwzNTI0MiwzNTM4NiwzNjUyMywzNjc2MywzNjkxNCwzNzM0MSwzODY2MywyMDE1NCwyMDE2MSwyMDk5NSwyMjY0NSwyMjc2NCwyMzU2MywyOTk3OCwyMzYxMywzMzEwMiwzNTMzOCwzNjgwNSwzODQ5OSwzODc2NSwzMTUyNSwzNTUzNSwzODkyMCwzNzIx''@;'; put 'put ''OCwyMjI1OSwyMTQxNiwzNjg4NywyMTU2MSwyMjQwMiwyNDEwMSwyNTUxMiwyNzcwMCwyODgxMCwzMDU2MSwzMTg4MywzMjczNiwzNDkyOCwzNjkzMCwzNzIwNCwzNzY0OCwzNzY1NiwzODU0MywyOTc5MCwzOTYyMCwyMzgxNSwyMzkxMywyNTk2OCwyNjUzMCwzNjI2NCwzODYxOSwyNTQ1NCwy''@;'; put 'put ''NjQ0MSwyNjkwNSwzMzczMywzODkzNSwzODU5MiwzNTA3MCwyODU0OCwyNTcyMiwyMzU0NCwxOTk5MCwyODcxNiwzMDA0NSwyNjE1OSwyMDkzMiwyMTA0NiwyMTIxOCwyMjk5NSwyNDQ0OSwyNDYxNSwyNTEwNCwyNTkxOSwyNTk3MiwyNjE0MywyNjIyOCwyNjg2NiwyNjY0NiwyNzQ5MSwyODE2''@;'; put 'put ''NSwyOTI5OCwyOTk4MywzMDQyNywzMTkzNCwzMjg1NCwyMjc2OCwzNTA2OSwzNTE5OSwzNTQ4OCwzNTQ3NSwzNTUzMSwzNjg5MywzNzI2NiwzODczOCwzODc0NSwyNTk5MywzMTI0NiwzMzAzMCwzODU4NywyNDEwOSwyNDc5NiwyNTExNCwyNjAyMSwyNjEzMiwyNjUxMiwzMDcwNywzMTMwOSwz''@;'; put 'put ''MTgyMSwzMjMxOCwzMzAzNCwzNjAxMiwzNjE5NiwzNjMyMSwzNjQ0NywzMDg4OSwyMDk5OSwyNTMwNSwyNTUwOSwyNTY2NiwyNTI0MCwzNTM3MywzMTM2MywzMTY4MCwzNTUwMCwzODYzNCwzMjExOCwzMzI5MiwzNDYzMywyMDE4NSwyMDgwOCwyMTMxNSwyMTM0NCwyMzQ1OSwyMzU1NCwyMzU3''@;'; put 'put ''NCwyNDAyOSwyNTEyNiwyNTE1OSwyNTc3NiwyNjY0MywyNjY3NiwyNzg0OSwyNzk3MywyNzkyNywyNjU3OSwyODUwOCwyOTAwNiwyOTA1MywyNjA1OSwzMTM1OSwzMTY2MSwzMjIxOCwzMjMzMCwzMjY4MCwzMzE0NiwzMzMwNywzMzMzNywzNDIxNCwzNTQzOCwzNjA0NiwzNjM0MSwzNjk4NCwz''@;'; put 'put ''Njk4MywzNzU0OSwzNzUyMSwzODI3NSwzOTg1NCwyMTA2OSwyMTg5MiwyODQ3MiwyODk4MiwyMDg0MCwzMTEwOSwzMjM0MSwzMzIwMywzMTk1MCwyMjA5MiwyMjYwOSwyMzcyMCwyNTUxNCwyNjM2NiwyNjM2NSwyNjk3MCwyOTQwMSwzMDA5NSwzMDA5NCwzMDk5MCwzMTA2MiwzMTE5OSwzMTg5''@;'; put 'put ''NSwzMjAzMiwzMjA2OCwzNDMxMSwzNTM4MCwzODQ1OSwzNjk2MSw0MDczNiwyMDcxMSwyMTEwOSwyMTQ1MiwyMTQ3NCwyMDQ4OSwyMTkzMCwyMjc2NiwyMjg2MywyOTI0NSwyMzQzNSwyMzY1MiwyMTI3NywyNDgwMywyNDgxOSwyNTQzNiwyNTQ3NSwyNTQwNywyNTUzMSwyNTgwNSwyNjA4OSwy''@;'; put 'put ''NjM2MSwyNDAzNSwyNzA4NSwyNzEzMywyODQzNywyOTE1NywyMDEwNSwzMDE4NSwzMDQ1NiwzMTM3OSwzMTk2NywzMjIwNywzMjE1NiwzMjg2NSwzMzYwOSwzMzYyNCwzMzkwMCwzMzk4MCwzNDI5OSwzNTAxMywzNjIwOCwzNjg2NSwzNjk3MywzNzc4MywzODY4NCwzOTQ0MiwyMDY4NywyMjY3''@;'; put 'put ''OSwyNDk3NCwzMzIzNSwzNDEwMSwzNjEwNCwzNjg5NiwyMDQxOSwyMDU5NiwyMTA2MywyMTM2MywyNDY4NywyNTQxNywyNjQ2MywyODIwNCwzNjI3NSwzNjg5NSwyMDQzOSwyMzY0NiwzNjA0MiwyNjA2MywzMjE1NCwyMTMzMCwzNDk2NiwyMDg1NCwyNTUzOSwyMzM4NCwyMzQwMywyMzU2Miwy''@;'; put 'put ''NTYxMywyNjQ0OSwzNjk1NiwyMDE4MiwyMjgxMCwyMjgyNiwyNzc2MCwzNTQwOSwyMTgyMiwyMjU0OSwyMjk0OSwyNDgxNiwyNTE3MSwyNjU2MSwzMzMzMywyNjk2NSwzODQ2NCwzOTM2NCwzOTQ2NCwyMDMwNywyMjUzNCwyMzU1MCwzMjc4NCwyMzcyOSwyNDExMSwyNDQ1MywyNDYwOCwyNDkw''@;'; put 'put ''NywyNTE0MCwyNjM2NywyNzg4OCwyODM4MiwzMjk3NCwzMzE1MSwzMzQ5MiwzNDk1NSwzNjAyNCwzNjg2NCwzNjkxMCwzODUzOCw0MDY2NywzOTg5OSwyMDE5NSwyMTQ4OCwyMjgyMywzMTUzMiwzNzI2MSwzODk4OCw0MDQ0MSwyODM4MSwyODcxMSwyMTMzMSwyMTgyOCwyMzQyOSwyNTE3Niwy''@;'; put 'put ''NTI0NiwyNTI5OSwyNzgxMCwyODY1NSwyOTczMCwzNTM1MSwzNzk0NCwyODYwOSwzNTU4MiwzMzU5MiwyMDk2NywzNDU1MiwyMTQ4MiwyMTQ4MSwyMDI5NCwzNjk0OCwzNjc4NCwyMjg5MCwzMzA3MywyNDA2MSwzMTQ2NiwzNjc5OSwyNjg0MiwzNTg5NSwyOTQzMiw0MDAwOCwyNzE5NywzNTUw''@;'; put 'put ''NCwyMDAyNSwyMTMzNiwyMjAyMiwyMjM3NCwyNTI4NSwyNTUwNiwyNjA4NiwyNzQ3MCwyODEyOSwyODI1MSwyODg0NSwzMDcwMSwzMTQ3MSwzMTY1OCwzMjE4NywzMjgyOSwzMjk2NiwzNDUwNywzNTQ3NywzNzcyMywyMjI0MywyMjcyNywyNDM4MiwyNjAyOSwyNjI2MiwyNzI2NCwyNzU3Mywz''@;'; put 'put ''MDAwNywzNTUyNywyMDUxNiwzMDY5MywyMjMyMCwyNDM0NywyNDY3NywyNjIzNCwyNzc0NCwzMDE5NiwzMTI1OCwzMjYyMiwzMzI2OCwzNDU4NCwzNjkzMywzOTM0NywzMTY4OSwzMDA0NCwzMTQ4MSwzMTU2OSwzMzk4OCwzNjg4MCwzMTIwOSwzMTM3OCwzMzU5MCwyMzI2NSwzMDUyOCwyMDAx''@;'; put 'put ''MywyMDIxMCwyMzQ0OSwyNDU0NCwyNTI3NywyNjE3MiwyNjYwOSwyNzg4MCwzNDQxMSwzNDkzNSwzNTM4NywzNzE5OCwzNzYxOSwzOTM3NiwyNzE1OSwyODcxMCwyOTQ4MiwzMzUxMSwzMzg3OSwzNjAxNSwxOTk2OSwyMDgwNiwyMDkzOSwyMTg5OSwyMzU0MSwyNDA4NiwyNDExNSwyNDE5Mywy''@;'; put 'put ''NDM0MCwyNDM3MywyNDQyNywyNDUwMCwyNTA3NCwyNTM2MSwyNjI3NCwyNjM5NywyODUyNiwyOTI2NiwzMDAxMCwzMDUyMiwzMjg4NCwzMzA4MSwzMzE0NCwzNDY3OCwzNTUxOSwzNTU0OCwzNjIyOSwzNjMzOSwzNzUzMCwzODI2MywzODkxNCw0MDE2NSwyMTE4OSwyNTQzMSwzMDQ1MiwyNjM4''@;'; put 'put ''OSwyNzc4NCwyOTY0NSwzNjAzNSwzNzgwNiwzODUxNSwyNzk0MSwyMjY4NCwyNjg5NCwyNzA4NCwzNjg2MSwzNzc4NiwzMDE3MSwzNjg5MCwyMjYxOCwyNjYyNiwyNTUyNCwyNzEzMSwyMDI5MSwyODQ2MCwyNjU4NCwzNjc5NSwzNDA4NiwzMjE4MCwzNzcxNiwyNjk0MywyODUyOCwyMjM3OCwy''@;'; put 'put ''Mjc3NSwyMzM0MCwzMjA0NCwyOTIyNiwyMTUxNCwzNzM0Nyw0MDM3MiwyMDE0MSwyMDMwMiwyMDU3MiwyMDU5NywyMTA1OSwzNTk5OCwyMTU3NiwyMjU2NCwyMzQ1MCwyNDA5MywyNDIxMywyNDIzNywyNDMxMSwyNDM1MSwyNDcxNiwyNTI2OSwyNTQwMiwyNTU1MiwyNjc5OSwyNzcxMiwzMDg1''@;'; put 'put ''NSwzMTExOCwzMTI0MywzMjIyNCwzMzM1MSwzNTMzMCwzNTU1OCwzNjQyMCwzNjg4MywzNzA0OCwzNzE2NSwzNzMzNiw0MDcxOCwyNzg3NywyNTY4OCwyNTgyNiwyNTk3MywyODQwNCwzMDM0MCwzMTUxNSwzNjk2OSwzNzg0MSwyODM0NiwyMTc0NiwyNDUwNSwyNTc2NCwzNjY4NSwzNjg0NSwz''@;'; put 'put ''NzQ0NCwyMDg1NiwyMjYzNSwyMjgyNSwyMzYzNywyNDIxNSwyODE1NSwzMjM5OSwyOTk4MCwzNjAyOCwzNjU3OCwzOTAwMywyODg1NywyMDI1MywyNzU4MywyODU5MywzZTQsMzg2NTEsMjA4MTQsMjE1MjAsMjI1ODEsMjI2MTUsMjI5NTYsMjM2NDgsMjQ0NjYsMjYwMDcsMjY0NjAsMjgxOTMs''@;'; put 'put ''MzAzMzEsMzM3NTksMzYwNzcsMzY4ODQsMzcxMTcsMzc3MDksMzA3NTcsMzA3NzgsMjExNjIsMjQyMzAsMjIzMDMsMjI5MDAsMjQ1OTQsMjA0OTgsMjA4MjYsMjA5MDgsMjA5NDEsMjA5OTIsMjE3NzYsMjI2MTIsMjI2MTYsMjI4NzEsMjM0NDUsMjM3OTgsMjM5NDcsMjQ3NjQsMjUyMzcsMjU2''@;'; put 'put ''NDUsMjY0ODEsMjY2OTEsMjY4MTIsMjY4NDcsMzA0MjMsMjgxMjAsMjgyNzEsMjgwNTksMjg3ODMsMjkxMjgsMjQ0MDMsMzAxNjgsMzEwOTUsMzE1NjEsMzE1NzIsMzE1NzAsMzE5NTgsMzIxMTMsMjEwNDAsMzM4OTEsMzQxNTMsMzQyNzYsMzUzNDIsMzU1ODgsMzU5MTAsMzYzNjcsMzY4Njcs''@;'; put 'put ''MzY4NzksMzc5MTMsMzg1MTgsMzg5NTcsMzk0NzIsMzgzNjAsMjA2ODUsMjEyMDUsMjE1MTYsMjI1MzAsMjM1NjYsMjQ5OTksMjU3NTgsMjc5MzQsMzA2NDMsMzE0NjEsMzMwMTIsMzM3OTYsMzY5NDcsMzc1MDksMjM3NzYsNDAxOTksMjEzMTEsMjQ0NzEsMjQ0OTksMjgwNjAsMjkzMDUsMzA1''@;'; put 'put ''NjMsMzExNjcsMzE3MTYsMjc2MDIsMjk0MjAsMzU1MDEsMjY2MjcsMjcyMzMsMjA5ODQsMzEzNjEsMjY5MzIsMjM2MjYsNDAxODIsMzM1MTUsMjM0OTMsMzcxOTMsMjg3MDIsMjIxMzYsMjM2NjMsMjQ3NzUsMjU5NTgsMjc3ODgsMzU5MzAsMzY5MjksMzg5MzEsMjE1ODUsMjYzMTEsMzczODks''@;'; put 'put ''MjI4NTYsMzcwMjcsMjA4NjksMjAwNDUsMjA5NzAsMzQyMDEsMzU1OTgsMjg3NjAsMjU0NjYsMzc3MDcsMjY5NzgsMzkzNDgsMzIyNjAsMzAwNzEsMjEzMzUsMjY5NzYsMzY1NzUsMzg2MjcsMjc3NDEsMjAxMDgsMjM2MTIsMjQzMzYsMzY4NDEsMjEyNTAsMzYwNDksMzI5MDUsMzQ0MjUsMjQz''@;'; put 'put ''MTksMjYwODUsMjAwODMsMjA4MzcsMjI5MTQsMjM2MTUsMzg4OTQsMjAyMTksMjI5MjIsMjQ1MjUsMzU0NjksMjg2NDEsMzExNTIsMzEwNzQsMjM1MjcsMzM5MDUsMjk0ODMsMjkxMDUsMjQxODAsMjQ1NjUsMjU0NjcsMjU3NTQsMjkxMjMsMzE4OTYsMjAwMzUsMjQzMTYsMjAwNDMsMjI0OTIs''@;'; put 'put ''MjIxNzgsMjQ3NDUsMjg2MTEsMzIwMTMsMzMwMjEsMzMwNzUsMzMyMTUsMzY3ODYsMzUyMjMsMzQ0NjgsMjQwNTIsMjUyMjYsMjU3NzMsMzUyMDcsMjY0ODcsMjc4NzQsMjc5NjYsMjk3NTAsMzA3NzIsMjMxMTAsMzI2MjksMzM0NTMsMzkzNDAsMjA0NjcsMjQyNTksMjUzMDksMjU0OTAsMjU5''@;'; put 'put ''NDMsMjY0NzksMzA0MDMsMjkyNjAsMzI5NzIsMzI5NTQsMzY2NDksMzcxOTcsMjA0OTMsMjI1MjEsMjMxODYsMjY3NTcsMjY5OTUsMjkwMjgsMjk0MzcsMzYwMjMsMjI3NzAsMzYwNjQsMzg1MDYsMzY4ODksMzQ2ODcsMzEyMDQsMzA2OTUsMzM4MzMsMjAyNzEsMjEwOTMsMjEzMzgsMjUyOTMs''@;'; put 'put ''MjY1NzUsMjc4NTAsMzAzMzMsMzE2MzYsMzE4OTMsMzMzMzQsMzQxODAsMzY4NDMsMjYzMzMsMjg0NDgsMjkxOTAsMzIyODMsMzM3MDcsMzkzNjEsNDA2MTQsMjA5ODksMzE2NjUsMzA4MzQsMzE2NzIsMzI5MDMsMzE1NjAsMjczNjgsMjQxNjEsMzI5MDgsMzAwMzMsMzAwNDgsMjA4NDMsMzc0''@;'; put 'put ''NzQsMjgzMDAsMzAzMzAsMzcyNzEsMzk2NTgsMjAyNDAsMzI2MjQsMjUyNDQsMzE1NjcsMzgzMDksNDAxNjksMjIxMzgsMjI2MTcsMzQ1MzIsMzg1ODgsMjAyNzYsMjEwMjgsMjEzMjIsMjE0NTMsMjE0NjcsMjQwNzAsMjU2NDQsMjYwMDEsMjY0OTUsMjc3MTAsMjc3MjYsMjkyNTYsMjkzNTks''@;'; put 'put ''Mjk2NzcsMzAwMzYsMzIzMjEsMzMzMjQsMzQyODEsMzYwMDksMzE2ODQsMzczMTgsMjkwMzMsMzg5MzAsMzkxNTEsMjU0MDUsMjYyMTcsMzAwNTgsMzA0MzYsMzA5MjgsMzQxMTUsMzQ1NDIsMjEyOTAsMjEzMjksMjE1NDIsMjI5MTUsMjQxOTksMjQ0NDQsMjQ3NTQsMjUxNjEsMjUyMDksMjUy''@;'; put 'put ''NTksMjZlMywyNzYwNCwyNzg1MiwzMDEzMCwzMDM4MiwzMDg2NSwzMTE5MiwzMjIwMywzMjYzMSwzMjkzMywzNDk4NywzNTUxMywzNjAyNywzNjk5MSwzODc1MCwzOTEzMSwyNzE0NywzMTgwMCwyMDYzMywyMzYxNCwyNDQ5NCwyNjUwMywyNzYwOCwyOTc0OSwzMDQ3MywzMjY1NCw0MDc2Mywy''@;'; put 'put ''NjU3MCwzMTI1NSwyMTMwNSwzMDA5MSwzOTY2MSwyNDQyMiwzMzE4MSwzMzc3NywzMjkyMCwyNDM4MCwyNDUxNywzMDA1MCwzMTU1OCwzNjkyNCwyNjcyNywyMzAxOSwyMzE5NSwzMjAxNiwzMDMzNCwzNTYyOCwyMDQ2OSwyNDQyNiwyNzE2MSwyNzcwMywyODQxOCwyOTkyMiwzMTA4MCwzNDky''@;'; put 'put ''MCwzNTQxMywzNTk2MSwyNDI4NywyNTU1MSwzMDE0OSwzMTE4NiwzMzQ5NSwzNzY3MiwzNzYxOCwzMzk0OCwzNDU0MSwzOTk4MSwyMTY5NywyNDQyOCwyNTk5NiwyNzk5NiwyODY5MywzNjAwNywzNjA1MSwzODk3MSwyNTkzNSwyOTk0MiwxOTk4MSwyMDE4NCwyMjQ5NiwyMjgyNywyMzE0Miwy''@;'; put 'put ''MzUwMCwyMDkwNCwyNDA2NywyNDIyMCwyNDU5OCwyNTIwNiwyNTk3NSwyNjAyMywyNjIyMiwyODAxNCwyOTIzOCwzMTUyNiwzMzEwNCwzMzE3OCwzMzQzMywzNTY3NiwzNmUzLDM2MDcwLDM2MjEyLDM4NDI4LDM4NDY4LDIwMzk4LDI1NzcxLDI3NDk0LDMzMzEwLDMzODg5LDM0MTU0LDM3MDk2''@;'; put 'put ''LDIzNTUzLDI2OTYzLDM5MDgwLDMzOTE0LDM0MTM1LDIwMjM5LDIxMTAzLDI0NDg5LDI0MTMzLDI2MzgxLDMxMTE5LDMzMTQ1LDM1MDc5LDM1MjA2LDI4MTQ5LDI0MzQzLDI1MTczLDI3ODMyLDIwMTc1LDI5Mjg5LDM5ODI2LDIwOTk4LDIxNTYzLDIyMTMyLDIyNzA3LDI0OTk2LDI1MTk4LDI4''@;'; put 'put ''OTU0LDIyODk0LDMxODgxLDMxOTY2LDMyMDI3LDM4NjQwLDI1OTkxLDMyODYyLDE5OTkzLDIwMzQxLDIwODUzLDIyNTkyLDI0MTYzLDI0MTc5LDI0MzMwLDI2NTY0LDIwMDA2LDM0MTA5LDM4MjgxLDM4NDkxLDMxODU5LDM4OTEzLDIwNzMxLDIyNzIxLDMwMjk0LDMwODg3LDIxMDI5LDMwNjI5''@;'; put 'put ''LDM0MDY1LDMxNjIyLDIwNTU5LDIyNzkzLDI5MjU1LDMxNjg3LDMyMjMyLDM2Nzk0LDM2ODIwLDM2OTQxLDIwNDE1LDIxMTkzLDIzMDgxLDI0MzIxLDM4ODI5LDIwNDQ1LDMzMzAzLDM3NjEwLDIyMjc1LDI1NDI5LDI3NDk3LDI5OTk1LDM1MDM2LDM2NjI4LDMxMjk4LDIxMjE1LDIyNjc1LDI0''@;'; put 'put ''OTE3LDI1MDk4LDI2Mjg2LDI3NTk3LDMxODA3LDMzNzY5LDIwNTE1LDIwNDcyLDIxMjUzLDIxNTc0LDIyNTc3LDIyODU3LDIzNDUzLDIzNzkyLDIzNzkxLDIzODQ5LDI0MjE0LDI1MjY1LDI1NDQ3LDI1OTE4LDI2MDQxLDI2Mzc5LDI3ODYxLDI3ODczLDI4OTIxLDMwNzcwLDMyMjk5LDMyOTkw''@;'; put 'put ''LDMzNDU5LDMzODA0LDM0MDI4LDM0NTYyLDM1MDkwLDM1MzcwLDM1OTE0LDM3MDMwLDM3NTg2LDM5MTY1LDQwMTc5LDQwMzAwLDIwMDQ3LDIwMTI5LDIwNjIxLDIxMDc4LDIyMzQ2LDIyOTUyLDI0MTI1LDI0NTM2LDI0NTM3LDI1MTUxLDI2MjkyLDI2Mzk1LDI2NTc2LDI2ODM0LDIwODgyLDMy''@;'; put 'put ''MDMzLDMyOTM4LDMzMTkyLDM1NTg0LDM1OTgwLDM2MDMxLDM3NTAyLDM4NDUwLDIxNTM2LDM4OTU2LDIxMjcxLDIwNjkzLDIxMzQwLDIyNjk2LDI1Nzc4LDI2NDIwLDI5Mjg3LDMwNTY2LDMxMzAyLDM3MzUwLDIxMTg3LDI3ODA5LDI3NTI2LDIyNTI4LDI0MTQwLDIyODY4LDI2NDEyLDMyNzYz''@;'; put 'put ''LDIwOTYxLDMwNDA2LDI1NzA1LDMwOTUyLDM5NzY0LDQwNjM1LDIyNDc1LDIyOTY5LDI2MTUxLDI2NTIyLDI3NTk4LDIxNzM3LDI3MDk3LDI0MTQ5LDMzMTgwLDI2NTE3LDM5ODUwLDI2NjIyLDQwMDE4LDI2NzE3LDIwMTM0LDIwNDUxLDIxNDQ4LDI1MjczLDI2NDExLDI3ODE5LDM2ODA0LDIw''@;'; put 'put ''Mzk3LDMyMzY1LDQwNjM5LDE5OTc1LDI0OTMwLDI4Mjg4LDI4NDU5LDM0MDY3LDIxNjE5LDI2NDEwLDM5NzQ5LDI0MDUxLDMxNjM3LDIzNzI0LDIzNDk0LDM0NTg4LDI4MjM0LDM0MDAxLDMxMjUyLDMzMDMyLDIyOTM3LDMxODg1LDI3NjY1LDMwNDk2LDIxMjA5LDIyODE4LDI4OTYxLDI5Mjc5''@;'; put 'put ''LDMwNjgzLDM4Njk1LDQwMjg5LDI2ODkxLDIzMTY3LDIzMDY0LDIwOTAxLDIxNTE3LDIxNjI5LDI2MTI2LDMwNDMxLDM2ODU1LDM3NTI4LDQwMTgwLDIzMDE4LDI5Mjc3LDI4MzU3LDIwODEzLDI2ODI1LDMyMTkxLDMyMjM2LDM4NzU0LDQwNjM0LDI1NzIwLDI3MTY5LDMzNTM4LDIyOTE2LDIz''@;'; put 'put ''MzkxLDI3NjExLDI5NDY3LDMwNDUwLDMyMTc4LDMyNzkxLDMzOTQ1LDIwNzg2LDI2NDA4LDQwNjY1LDMwNDQ2LDI2NDY2LDIxMjQ3LDM5MTczLDIzNTg4LDI1MTQ3LDMxODcwLDM2MDE2LDIxODM5LDI0NzU4LDMyMDExLDM4MjcyLDIxMjQ5LDIwMDYzLDIwOTE4LDIyODEyLDI5MjQyLDMyODIy''@;'; put 'put ''LDM3MzI2LDI0MzU3LDMwNjkwLDIxMzgwLDI0NDQxLDMyMDA0LDM0MjIwLDM1Mzc5LDM2NDkzLDM4NzQyLDI2NjExLDM0MjIyLDM3OTcxLDI0ODQxLDI0ODQwLDI3ODMzLDMwMjkwLDM1NTY1LDM2NjY0LDIxODA3LDIwMzA1LDIwNzc4LDIxMTkxLDIxNDUxLDIzNDYxLDI0MTg5LDI0NzM2LDI0''@;'; put 'put ''OTYyLDI1NTU4LDI2Mzc3LDI2NTg2LDI4MjYzLDI4MDQ0LDI5NDk0LDI5NDk1LDMwMDAxLDMxMDU2LDM1MDI5LDM1NDgwLDM2OTM4LDM3MDA5LDM3MTA5LDM4NTk2LDM0NzAxLDIyODA1LDIwMTA0LDIwMzEzLDE5OTgyLDM1NDY1LDM2NjcxLDM4OTI4LDIwNjUzLDI0MTg4LDIyOTM0LDIzNDgx''@;'; put 'put ''LDI0MjQ4LDI1NTYyLDI1NTk0LDI1NzkzLDI2MzMyLDI2OTU0LDI3MDk2LDI3OTE1LDI4MzQyLDI5MDc2LDI5OTkyLDMxNDA3LDMyNjUwLDMyNzY4LDMzODY1LDMzOTkzLDM1MjAxLDM1NjE3LDM2MzYyLDM2OTY1LDM4NTI1LDM5MTc4LDI0OTU4LDI1MjMzLDI3NDQyLDI3Nzc5LDI4MDIwLDMy''@;'; put 'put ''NzE2LDMyNzY0LDI4MDk2LDMyNjQ1LDM0NzQ2LDM1MDY0LDI2NDY5LDMzNzEzLDM4OTcyLDM4NjQ3LDI3OTMxLDMyMDk3LDMzODUzLDM3MjI2LDIwMDgxLDIxMzY1LDIzODg4LDI3Mzk2LDI4NjUxLDM0MjUzLDM0MzQ5LDM1MjM5LDIxMDMzLDIxNTE5LDIzNjUzLDI2NDQ2LDI2NzkyLDI5NzAy''@;'; put 'put ''LDI5ODI3LDMwMTc4LDM1MDIzLDM1MDQxLDM3MzI0LDM4NjI2LDM4NTIwLDI0NDU5LDI5NTc1LDMxNDM1LDMzODcwLDI1NTA0LDMwMDUzLDIxMTI5LDI3OTY5LDI4MzE2LDI5NzA1LDMwMDQxLDMwODI3LDMxODkwLDM4NTM0LDMxNDUyLDQwODQ1LDIwNDA2LDI0OTQyLDI2MDUzLDM0Mzk2LDIw''@;'; put 'put ''MTAyLDIwMTQyLDIwNjk4LDIwMDAxLDIwOTQwLDIzNTM0LDI2MDA5LDI2NzUzLDI4MDkyLDI5NDcxLDMwMjc0LDMwNjM3LDMxMjYwLDMxOTc1LDMzMzkxLDM1NTM4LDM2OTg4LDM3MzI3LDM4NTE3LDM4OTM2LDIxMTQ3LDMyMjA5LDIwNTIzLDIxNDAwLDI2NTE5LDI4MTA3LDI5MTM2LDI5NzQ3''@;'; put 'put ''LDMzMjU2LDM2NjUwLDM4NTYzLDQwMDIzLDQwNjA3LDI5NzkyLDIyNTkzLDI4MDU3LDMyMDQ3LDM5MDA2LDIwMTk2LDIwMjc4LDIwMzYzLDIwOTE5LDIxMTY5LDIzOTk0LDI0NjA0LDI5NjE4LDMxMDM2LDMzNDkxLDM3NDI4LDM4NTgzLDM4NjQ2LDM4NjY2LDQwNTk5LDQwODAyLDI2Mjc4LDI3''@;'; put 'put ''NTA4LDIxMDE1LDIxMTU1LDI4ODcyLDM1MDEwLDI0MjY1LDI0NjUxLDI0OTc2LDI4NDUxLDI5MDAxLDMxODA2LDMyMjQ0LDMyODc5LDM0MDMwLDM2ODk5LDM3Njc2LDIxNTcwLDM5NzkxLDI3MzQ3LDI4ODA5LDM2MDM0LDM2MzM1LDM4NzA2LDIxMTcyLDIzMTA1LDI0MjY2LDI0MzI0LDI2Mzkx''@;'; put 'put ''LDI3MDA0LDI3MDI4LDI4MDEwLDI4NDMxLDI5MjgyLDI5NDM2LDMxNzI1LDMyNzY5LDMyODk0LDM0NjM1LDM3MDcwLDIwODQ1LDQwNTk1LDMxMTA4LDMyOTA3LDM3NjgyLDM1NTQyLDIwNTI1LDIxNjQ0LDM1NDQxLDI3NDk4LDM2MDM2LDMzMDMxLDI0Nzg1LDI2NTI4LDQwNDM0LDIwMTIxLDIw''@;'; put 'put ''MTIwLDM5OTUyLDM1NDM1LDM0MjQxLDM0MTUyLDI2ODgwLDI4Mjg2LDMwODcxLDMzMTA5LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMjQzMzIsMTk5ODQsMTk5ODksMjAwMTAsMjAwMTcsMjAwMjIsMjAwMjgsMjAwMzEsMjAwMzQsMjAwNTQsMjAw''@;'; put 'put ''NTYsMjAwOTgsMjAxMDEsMzU5NDcsMjAxMDYsMzMyOTgsMjQzMzMsMjAxMTAsMjAxMjYsMjAxMjcsMjAxMjgsMjAxMzAsMjAxNDQsMjAxNDcsMjAxNTAsMjAxNzQsMjAxNzMsMjAxNjQsMjAxNjYsMjAxNjIsMjAxODMsMjAxOTAsMjAyMDUsMjAxOTEsMjAyMTUsMjAyMzMsMjAzMTQsMjAyNzIs''@;'; put 'put ''MjAzMTUsMjAzMTcsMjAzMTEsMjAyOTUsMjAzNDIsMjAzNjAsMjAzNjcsMjAzNzYsMjAzNDcsMjAzMjksMjAzMzYsMjAzNjksMjAzMzUsMjAzNTgsMjAzNzQsMjA3NjAsMjA0MzYsMjA0NDcsMjA0MzAsMjA0NDAsMjA0NDMsMjA0MzMsMjA0NDIsMjA0MzIsMjA0NTIsMjA0NTMsMjA1MDYsMjA1''@;'; put 'put ''MjAsMjA1MDAsMjA1MjIsMjA1MTcsMjA0ODUsMjAyNTIsMjA0NzAsMjA1MTMsMjA1MjEsMjA1MjQsMjA0NzgsMjA0NjMsMjA0OTcsMjA0ODYsMjA1NDcsMjA1NTEsMjYzNzEsMjA1NjUsMjA1NjAsMjA1NTIsMjA1NzAsMjA1NjYsMjA1ODgsMjA2MDAsMjA2MDgsMjA2MzQsMjA2MTMsMjA2NjAs''@;'; put 'put ''MjA2NTgsMjA2ODEsMjA2ODIsMjA2NTksMjA2NzQsMjA2OTQsMjA3MDIsMjA3MDksMjA3MTcsMjA3MDcsMjA3MTgsMjA3MjksMjA3MjUsMjA3NDUsMjA3MzcsMjA3MzgsMjA3NTgsMjA3NTcsMjA3NTYsMjA3NjIsMjA3NjksMjA3OTQsMjA3OTEsMjA3OTYsMjA3OTUsMjA3OTksMjA4MDAsMjA4''@;'; put 'put ''MTgsMjA4MTIsMjA4MjAsMjA4MzQsMzE0ODAsMjA4NDEsMjA4NDIsMjA4NDYsMjA4NjQsMjA4NjYsMjIyMzIsMjA4NzYsMjA4NzMsMjA4NzksMjA4ODEsMjA4ODMsMjA4ODUsMjA4ODYsMjA5MDAsMjA5MDIsMjA4OTgsMjA5MDUsMjA5MDYsMjA5MDcsMjA5MTUsMjA5MTMsMjA5MTQsMjA5MTIs''@;'; put 'put ''MjA5MTcsMjA5MjUsMjA5MzMsMjA5MzcsMjA5NTUsMjA5NjAsMzQzODksMjA5NjksMjA5NzMsMjA5NzYsMjA5ODEsMjA5OTAsMjA5OTYsMjEwMDMsMjEwMTIsMjEwMDYsMjEwMzEsMjEwMzQsMjEwMzgsMjEwNDMsMjEwNDksMjEwNzEsMjEwNjAsMjEwNjcsMjEwNjgsMjEwODYsMjEwNzYsMjEw''@;'; put 'put ''OTgsMjExMDgsMjEwOTcsMjExMDcsMjExMTksMjExMTcsMjExMzMsMjExNDAsMjExMzgsMjExMDUsMjExMjgsMjExMzcsMzY3NzYsMzY3NzUsMjExNjQsMjExNjUsMjExODAsMjExNzMsMjExODUsMjExOTcsMjEyMDcsMjEyMTQsMjEyMTksMjEyMjIsMzkxNDksMjEyMTYsMjEyMzUsMjEyMzcs''@;'; put 'put ''MjEyNDAsMjEyNDEsMjEyNTQsMjEyNTYsMzAwMDgsMjEyNjEsMjEyNjQsMjEyNjMsMjEyNjksMjEyNzQsMjEyODMsMjEyOTUsMjEyOTcsMjEyOTksMjEzMDQsMjEzMTIsMjEzMTgsMjEzMTcsMTk5OTEsMjEzMjEsMjEzMjUsMjA5NTAsMjEzNDIsMjEzNTMsMjEzNTgsMjI4MDgsMjEzNzEsMjEz''@;'; put 'put ''NjcsMjEzNzgsMjEzOTgsMjE0MDgsMjE0MTQsMjE0MTMsMjE0MjIsMjE0MjQsMjE0MzAsMjE0NDMsMzE3NjIsMzg2MTcsMjE0NzEsMjYzNjQsMjkxNjYsMjE0ODYsMjE0ODAsMjE0ODUsMjE0OTgsMjE1MDUsMjE1NjUsMjE1NjgsMjE1NDgsMjE1NDksMjE1NjQsMjE1NTAsMjE1NTgsMjE1NDUs''@;'; put 'put ''MjE1MzMsMjE1ODIsMjE2NDcsMjE2MjEsMjE2NDYsMjE1OTksMjE2MTcsMjE2MjMsMjE2MTYsMjE2NTAsMjE2MjcsMjE2MzIsMjE2MjIsMjE2MzYsMjE2NDgsMjE2MzgsMjE3MDMsMjE2NjYsMjE2ODgsMjE2NjksMjE2NzYsMjE3MDAsMjE3MDQsMjE2NzIsMjE2NzUsMjE2OTgsMjE2NjgsMjE2''@;'; put 'put ''OTQsMjE2OTIsMjE3MjAsMjE3MzMsMjE3MzQsMjE3NzUsMjE3ODAsMjE3NTcsMjE3NDIsMjE3NDEsMjE3NTQsMjE3MzAsMjE4MTcsMjE4MjQsMjE4NTksMjE4MzYsMjE4MDYsMjE4NTIsMjE4MjksMjE4NDYsMjE4NDcsMjE4MTYsMjE4MTEsMjE4NTMsMjE5MTMsMjE4ODgsMjE2NzksMjE4OTgs''@;'; put 'put ''MjE5MTksMjE4ODMsMjE4ODYsMjE5MTIsMjE5MTgsMjE5MzQsMjE4ODQsMjE4OTEsMjE5MjksMjE4OTUsMjE5MjgsMjE5NzgsMjE5NTcsMjE5ODMsMjE5NTYsMjE5ODAsMjE5ODgsMjE5NzIsMjIwMzYsMjIwMDcsMjIwMzgsMjIwMTQsMjIwMTMsMjIwNDMsMjIwMDksMjIwOTQsMjIwOTYsMjkx''@;'; put 'put ''NTEsMjIwNjgsMjIwNzAsMjIwNjYsMjIwNzIsMjIxMjMsMjIxMTYsMjIwNjMsMjIxMjQsMjIxMjIsMjIxNTAsMjIxNDQsMjIxNTQsMjIxNzYsMjIxNjQsMjIxNTksMjIxODEsMjIxOTAsMjIxOTgsMjIxOTYsMjIyMTAsMjIyMDQsMjIyMDksMjIyMTEsMjIyMDgsMjIyMTYsMjIyMjIsMjIyMjUs''@;'; put 'put ''MjIyMjcsMjIyMzEsMjIyNTQsMjIyNjUsMjIyNzIsMjIyNzEsMjIyNzYsMjIyODEsMjIyODAsMjIyODMsMjIyODUsMjIyOTEsMjIyOTYsMjIyOTQsMjE5NTksMjIzMDAsMjIzMTAsMjIzMjcsMjIzMjgsMjIzNTAsMjIzMzEsMjIzMzYsMjIzNTEsMjIzNzcsMjI0NjQsMjI0MDgsMjIzNjksMjIz''@;'; put 'put ''OTksMjI0MDksMjI0MTksMjI0MzIsMjI0NTEsMjI0MzYsMjI0NDIsMjI0NDgsMjI0NjcsMjI0NzAsMjI0ODQsMjI0ODIsMjI0ODMsMjI1MzgsMjI0ODYsMjI0OTksMjI1MzksMjI1NTMsMjI1NTcsMjI2NDIsMjI1NjEsMjI2MjYsMjI2MDMsMjI2NDAsMjc1ODQsMjI2MTAsMjI1ODksMjI2NDks''@;'; put 'put ''MjI2NjEsMjI3MTMsMjI2ODcsMjI2OTksMjI3MTQsMjI3NTAsMjI3MTUsMjI3MTIsMjI3MDIsMjI3MjUsMjI3MzksMjI3MzcsMjI3NDMsMjI3NDUsMjI3NDQsMjI3NTcsMjI3NDgsMjI3NTYsMjI3NTEsMjI3NjcsMjI3NzgsMjI3NzcsMjI3NzksMjI3ODAsMjI3ODEsMjI3ODYsMjI3OTQsMjI4''@;'; put 'put ''MDAsMjI4MTEsMjY3OTAsMjI4MjEsMjI4MjgsMjI4MjksMjI4MzQsMjI4NDAsMjI4NDYsMzE0NDIsMjI4NjksMjI4NjQsMjI4NjIsMjI4NzQsMjI4NzIsMjI4ODIsMjI4ODAsMjI4ODcsMjI4OTIsMjI4ODksMjI5MDQsMjI5MTMsMjI5NDEsMjAzMTgsMjAzOTUsMjI5NDcsMjI5NjIsMjI5ODIs''@;'; put 'put ''MjMwMTYsMjMwMDQsMjI5MjUsMjMwMDEsMjMwMDIsMjMwNzcsMjMwNzEsMjMwNTcsMjMwNjgsMjMwNDksMjMwNjYsMjMxMDQsMjMxNDgsMjMxMTMsMjMwOTMsMjMwOTQsMjMxMzgsMjMxNDYsMjMxOTQsMjMyMjgsMjMyMzAsMjMyNDMsMjMyMzQsMjMyMjksMjMyNjcsMjMyNTUsMjMyNzAsMjMy''@;'; put 'put ''NzMsMjMyNTQsMjMyOTAsMjMyOTEsMjMzMDgsMjMzMDcsMjMzMTgsMjMzNDYsMjMyNDgsMjMzMzgsMjMzNTAsMjMzNTgsMjMzNjMsMjMzNjUsMjMzNjAsMjMzNzcsMjMzODEsMjMzODYsMjMzODcsMjMzOTcsMjM0MDEsMjM0MDgsMjM0MTEsMjM0MTMsMjM0MTYsMjU5OTIsMjM0MTgsMjM0MjQs''@;'; put 'put ''MjM0MjcsMjM0NjIsMjM0ODAsMjM0OTEsMjM0OTUsMjM0OTcsMjM1MDgsMjM1MDQsMjM1MjQsMjM1MjYsMjM1MjIsMjM1MTgsMjM1MjUsMjM1MzEsMjM1MzYsMjM1NDIsMjM1MzksMjM1NTcsMjM1NTksMjM1NjAsMjM1NjUsMjM1NzEsMjM1ODQsMjM1ODYsMjM1OTIsMjM2MDgsMjM2MDksMjM2''@;'; put 'put ''MTcsMjM2MjIsMjM2MzAsMjM2MzUsMjM2MzIsMjM2MzEsMjM0MDksMjM2NjAsMjM2NjIsMjAwNjYsMjM2NzAsMjM2NzMsMjM2OTIsMjM2OTcsMjM3MDAsMjI5MzksMjM3MjMsMjM3MzksMjM3MzQsMjM3NDAsMjM3MzUsMjM3NDksMjM3NDIsMjM3NTEsMjM3NjksMjM3ODUsMjM4MDUsMjM4MDIs''@;'; put 'put ''MjM3ODksMjM5NDgsMjM3ODYsMjM4MTksMjM4MjksMjM4MzEsMjM5MDAsMjM4MzksMjM4MzUsMjM4MjUsMjM4MjgsMjM4NDIsMjM4MzQsMjM4MzMsMjM4MzIsMjM4ODQsMjM4OTAsMjM4ODYsMjM4ODMsMjM5MTYsMjM5MjMsMjM5MjYsMjM5NDMsMjM5NDAsMjM5MzgsMjM5NzAsMjM5NjUsMjM5''@;'; put 'put ''ODAsMjM5ODIsMjM5OTcsMjM5NTIsMjM5OTEsMjM5OTYsMjQwMDksMjQwMTMsMjQwMTksMjQwMTgsMjQwMjIsMjQwMjcsMjQwNDMsMjQwNTAsMjQwNTMsMjQwNzUsMjQwOTAsMjQwODksMjQwODEsMjQwOTEsMjQxMTgsMjQxMTksMjQxMzIsMjQxMzEsMjQxMjgsMjQxNDIsMjQxNTEsMjQxNDgs''@;'; put 'put ''MjQxNTksMjQxNjIsMjQxNjQsMjQxMzUsMjQxODEsMjQxODIsMjQxODYsNDA2MzYsMjQxOTEsMjQyMjQsMjQyNTcsMjQyNTgsMjQyNjQsMjQyNzIsMjQyNzEsMjQyNzgsMjQyOTEsMjQyODUsMjQyODIsMjQyODMsMjQyOTAsMjQyODksMjQyOTYsMjQyOTcsMjQzMDAsMjQzMDUsMjQzMDcsMjQz''@;'; put 'put ''MDQsMjQzMDgsMjQzMTIsMjQzMTgsMjQzMjMsMjQzMjksMjQ0MTMsMjQ0MTIsMjQzMzEsMjQzMzcsMjQzNDIsMjQzNjEsMjQzNjUsMjQzNzYsMjQzODUsMjQzOTIsMjQzOTYsMjQzOTgsMjQzNjcsMjQ0MDEsMjQ0MDYsMjQ0MDcsMjQ0MDksMjQ0MTcsMjQ0MjksMjQ0MzUsMjQ0MzksMjQ0NTEs''@;'; put 'put ''MjQ0NTAsMjQ0NDcsMjQ0NTgsMjQ0NTYsMjQ0NjUsMjQ0NTUsMjQ0NzgsMjQ0NzMsMjQ0NzIsMjQ0ODAsMjQ0ODgsMjQ0OTMsMjQ1MDgsMjQ1MzQsMjQ1NzEsMjQ1NDgsMjQ1NjgsMjQ1NjEsMjQ1NDEsMjQ3NTUsMjQ1NzUsMjQ2MDksMjQ2NzIsMjQ2MDEsMjQ1OTIsMjQ2MTcsMjQ1OTAsMjQ2''@;'; put 'put ''MjUsMjQ2MDMsMjQ1OTcsMjQ2MTksMjQ2MTQsMjQ1OTEsMjQ2MzQsMjQ2NjYsMjQ2NDEsMjQ2ODIsMjQ2OTUsMjQ2NzEsMjQ2NTAsMjQ2NDYsMjQ2NTMsMjQ2NzUsMjQ2NDMsMjQ2NzYsMjQ2NDIsMjQ2ODQsMjQ2ODMsMjQ2NjUsMjQ3MDUsMjQ3MTcsMjQ4MDcsMjQ3MDcsMjQ3MzAsMjQ3MDgs''@;'; put 'put ''MjQ3MzEsMjQ3MjYsMjQ3MjcsMjQ3MjIsMjQ3NDMsMjQ3MTUsMjQ4MDEsMjQ3NjAsMjQ4MDAsMjQ3ODcsMjQ3NTYsMjQ1NjAsMjQ3NjUsMjQ3NzQsMjQ3NTcsMjQ3OTIsMjQ5MDksMjQ4NTMsMjQ4MzgsMjQ4MjIsMjQ4MjMsMjQ4MzIsMjQ4MjAsMjQ4MjYsMjQ4MzUsMjQ4NjUsMjQ4MjcsMjQ4''@;'; put 'put ''MTcsMjQ4NDUsMjQ4NDYsMjQ5MDMsMjQ4OTQsMjQ4NzIsMjQ4NzEsMjQ5MDYsMjQ4OTUsMjQ4OTIsMjQ4NzYsMjQ4ODQsMjQ4OTMsMjQ4OTgsMjQ5MDAsMjQ5NDcsMjQ5NTEsMjQ5MjAsMjQ5MjEsMjQ5MjIsMjQ5MzksMjQ5NDgsMjQ5NDMsMjQ5MzMsMjQ5NDUsMjQ5MjcsMjQ5MjUsMjQ5MTUs''@;'; put 'put ''MjQ5NDksMjQ5ODUsMjQ5ODIsMjQ5NjcsMjUwMDQsMjQ5ODAsMjQ5ODYsMjQ5NzAsMjQ5NzcsMjUwMDMsMjUwMDYsMjUwMzYsMjUwMzQsMjUwMzMsMjUwNzksMjUwMzIsMjUwMjcsMjUwMzAsMjUwMTgsMjUwMzUsMzI2MzMsMjUwMzcsMjUwNjIsMjUwNTksMjUwNzgsMjUwODIsMjUwNzYsMjUw''@;'; put 'put ''ODcsMjUwODUsMjUwODQsMjUwODYsMjUwODgsMjUwOTYsMjUwOTcsMjUxMDEsMjUxMDAsMjUxMDgsMjUxMTUsMjUxMTgsMjUxMjEsMjUxMzAsMjUxMzQsMjUxMzYsMjUxMzgsMjUxMzksMjUxNTMsMjUxNjYsMjUxODIsMjUxODcsMjUxNzksMjUxODQsMjUxOTIsMjUyMTIsMjUyMTgsMjUyMjUs''@;'; put 'put ''MjUyMTQsMjUyMzQsMjUyMzUsMjUyMzgsMjUzMDAsMjUyMTksMjUyMzYsMjUzMDMsMjUyOTcsMjUyNzUsMjUyOTUsMjUzNDMsMjUyODYsMjU4MTIsMjUyODgsMjUzMDgsMjUyOTIsMjUyOTAsMjUyODIsMjUyODcsMjUyNDMsMjUyODksMjUzNTYsMjUzMjYsMjUzMjksMjUzODMsMjUzNDYsMjUz''@;'; put 'put ''NTIsMjUzMjcsMjUzMzMsMjU0MjQsMjU0MDYsMjU0MjEsMjU2MjgsMjU0MjMsMjU0OTQsMjU0ODYsMjU0NzIsMjU1MTUsMjU0NjIsMjU1MDcsMjU0ODcsMjU0ODEsMjU1MDMsMjU1MjUsMjU0NTEsMjU0NDksMjU1MzQsMjU1NzcsMjU1MzYsMjU1NDIsMjU1NzEsMjU1NDUsMjU1NTQsMjU1OTAs''@;'; put 'put ''MjU1NDAsMjU2MjIsMjU2NTIsMjU2MDYsMjU2MTksMjU2MzgsMjU2NTQsMjU4ODUsMjU2MjMsMjU2NDAsMjU2MTUsMjU3MDMsMjU3MTEsMjU3MTgsMjU2NzgsMjU4OTgsMjU3NDksMjU3NDcsMjU3NjUsMjU3NjksMjU3MzYsMjU3ODgsMjU4MTgsMjU4MTAsMjU3OTcsMjU3OTksMjU3ODcsMjU4''@;'; put 'put ''MTYsMjU3OTQsMjU4NDEsMjU4MzEsMzMyODksMjU4MjQsMjU4MjUsMjUyNjAsMjU4MjcsMjU4MzksMjU5MDAsMjU4NDYsMjU4NDQsMjU4NDIsMjU4NTAsMjU4NTYsMjU4NTMsMjU4ODAsMjU4ODQsMjU4NjEsMjU4OTIsMjU4OTEsMjU4OTksMjU5MDgsMjU5MDksMjU5MTEsMjU5MTAsMjU5MTIs''@;'; put 'put ''MzAwMjcsMjU5MjgsMjU5NDIsMjU5NDEsMjU5MzMsMjU5NDQsMjU5NTAsMjU5NDksMjU5NzAsMjU5NzYsMjU5ODYsMjU5ODcsMzU3MjIsMjYwMTEsMjYwMTUsMjYwMjcsMjYwMzksMjYwNTEsMjYwNTQsMjYwNDksMjYwNTIsMjYwNjAsMjYwNjYsMjYwNzUsMjYwNzMsMjYwODAsMjYwODEsMjYw''@;'; put 'put ''OTcsMjY0ODIsMjYxMjIsMjYxMTUsMjYxMDcsMjY0ODMsMjYxNjUsMjYxNjYsMjYxNjQsMjYxNDAsMjYxOTEsMjYxODAsMjYxODUsMjYxNzcsMjYyMDYsMjYyMDUsMjYyMTIsMjYyMTUsMjYyMTYsMjYyMDcsMjYyMTAsMjYyMjQsMjYyNDMsMjYyNDgsMjYyNTQsMjYyNDksMjYyNDQsMjYyNjQs''@;'; put 'put ''MjYyNjksMjYzMDUsMjYyOTcsMjYzMTMsMjYzMDIsMjYzMDAsMjYzMDgsMjYyOTYsMjYzMjYsMjYzMzAsMjYzMzYsMjYxNzUsMjYzNDIsMjYzNDUsMjYzNTIsMjYzNTcsMjYzNTksMjYzODMsMjYzOTAsMjYzOTgsMjY0MDYsMjY0MDcsMzg3MTIsMjY0MTQsMjY0MzEsMjY0MjIsMjY0MzMsMjY0''@;'; put 'put ''MjQsMjY0MjMsMjY0MzgsMjY0NjIsMjY0NjQsMjY0NTcsMjY0NjcsMjY0NjgsMjY1MDUsMjY0ODAsMjY1MzcsMjY0OTIsMjY0NzQsMjY1MDgsMjY1MDcsMjY1MzQsMjY1MjksMjY1MDEsMjY1NTEsMjY2MDcsMjY1NDgsMjY2MDQsMjY1NDcsMjY2MDEsMjY1NTIsMjY1OTYsMjY1OTAsMjY1ODks''@;'; put 'put ''MjY1OTQsMjY2MDYsMjY1NTMsMjY1NzQsMjY1NjYsMjY1OTksMjcyOTIsMjY2NTQsMjY2OTQsMjY2NjUsMjY2ODgsMjY3MDEsMjY2NzQsMjY3MDIsMjY4MDMsMjY2NjcsMjY3MTMsMjY3MjMsMjY3NDMsMjY3NTEsMjY3ODMsMjY3NjcsMjY3OTcsMjY3NzIsMjY3ODEsMjY3NzksMjY3NTUsMjcz''@;'; put 'put ''MTAsMjY4MDksMjY3NDAsMjY4MDUsMjY3ODQsMjY4MTAsMjY4OTUsMjY3NjUsMjY3NTAsMjY4ODEsMjY4MjYsMjY4ODgsMjY4NDAsMjY5MTQsMjY5MTgsMjY4NDksMjY4OTIsMjY4MjksMjY4MzYsMjY4NTUsMjY4MzcsMjY5MzQsMjY4OTgsMjY4ODQsMjY4MzksMjY4NTEsMjY5MTcsMjY4NzMs''@;'; put 'put ''MjY4NDgsMjY4NjMsMjY5MjAsMjY5MjIsMjY5MDYsMjY5MTUsMjY5MTMsMjY4MjIsMjcwMDEsMjY5OTksMjY5NzIsMjdlMywyNjk4NywyNjk2NCwyNzAwNiwyNjk5MCwyNjkzNywyNjk5NiwyNjk0MSwyNjk2OSwyNjkyOCwyNjk3NywyNjk3NCwyNjk3MywyNzAwOSwyNjk4NiwyNzA1OCwyNzA1''@;'; put 'put ''NCwyNzA4OCwyNzA3MSwyNzA3MywyNzA5MSwyNzA3MCwyNzA4NiwyMzUyOCwyNzA4MiwyNzEwMSwyNzA2NywyNzA3NSwyNzA0NywyNzE4MiwyNzAyNSwyNzA0MCwyNzAzNiwyNzAyOSwyNzA2MCwyNzEwMiwyNzExMiwyNzEzOCwyNzE2MywyNzEzNSwyNzQwMiwyNzEyOSwyNzEyMiwyNzExMSwy''@;'; put 'put ''NzE0MSwyNzA1NywyNzE2NiwyNzExNywyNzE1NiwyNzExNSwyNzE0NiwyNzE1NCwyNzMyOSwyNzE3MSwyNzE1NSwyNzIwNCwyNzE0OCwyNzI1MCwyNzE5MCwyNzI1NiwyNzIwNywyNzIzNCwyNzIyNSwyNzIzOCwyNzIwOCwyNzE5MiwyNzE3MCwyNzI4MCwyNzI3NywyNzI5NiwyNzI2OCwyNzI5''@;'; put 'put ''OCwyNzI5OSwyNzI4NywzNDMyNywyNzMyMywyNzMzMSwyNzMzMCwyNzMyMCwyNzMxNSwyNzMwOCwyNzM1OCwyNzM0NSwyNzM1OSwyNzMwNiwyNzM1NCwyNzM3MCwyNzM4NywyNzM5NywzNDMyNiwyNzM4NiwyNzQxMCwyNzQxNCwzOTcyOSwyNzQyMywyNzQ0OCwyNzQ0NywzMDQyOCwyNzQ0OSwz''@;'; put 'put ''OTE1MCwyNzQ2MywyNzQ1OSwyNzQ2NSwyNzQ3MiwyNzQ4MSwyNzQ3NiwyNzQ4MywyNzQ4NywyNzQ4OSwyNzUxMiwyNzUxMywyNzUxOSwyNzUyMCwyNzUyNCwyNzUyMywyNzUzMywyNzU0NCwyNzU0MSwyNzU1MCwyNzU1NiwyNzU2MiwyNzU2MywyNzU2NywyNzU3MCwyNzU2OSwyNzU3MSwyNzU3''@;'; put 'put ''NSwyNzU4MCwyNzU5MCwyNzU5NSwyNzYwMywyNzYxNSwyNzYyOCwyNzYyNywyNzYzNSwyNzYzMSw0MDYzOCwyNzY1NiwyNzY2NywyNzY2OCwyNzY3NSwyNzY4NCwyNzY4MywyNzc0MiwyNzczMywyNzc0NiwyNzc1NCwyNzc3OCwyNzc4OSwyNzgwMiwyNzc3NywyNzgwMywyNzc3NCwyNzc1Miwy''@;'; put 'put ''Nzc2MywyNzc5NCwyNzc5MiwyNzg0NCwyNzg4OSwyNzg1OSwyNzgzNywyNzg2MywyNzg0NSwyNzg2OSwyNzgyMiwyNzgyNSwyNzgzOCwyNzgzNCwyNzg2NywyNzg4NywyNzg2NSwyNzg4MiwyNzkzNSwzNDg5MywyNzk1OCwyNzk0NywyNzk2NSwyNzk2MCwyNzkyOSwyNzk1NywyNzk1NSwyNzky''@;'; put 'put ''MiwyNzkxNiwyODAwMywyODA1MSwyODAwNCwyNzk5NCwyODAyNSwyNzk5MywyODA0NiwyODA1MywyODY0NCwyODAzNywyODE1MywyODE4MSwyODE3MCwyODA4NSwyODEwMywyODEzNCwyODA4OCwyODEwMiwyODE0MCwyODEyNiwyODEwOCwyODEzNiwyODExNCwyODEwMSwyODE1NCwyODEyMSwy''@;'; put 'put ''ODEzMiwyODExNywyODEzOCwyODE0MiwyODIwNSwyODI3MCwyODIwNiwyODE4NSwyODI3NCwyODI1NSwyODIyMiwyODE5NSwyODI2NywyODIwMywyODI3OCwyODIzNywyODE5MSwyODIyNywyODIxOCwyODIzOCwyODE5NiwyODQxNSwyODE4OSwyODIxNiwyODI5MCwyODMzMCwyODMxMiwyODM2''@;'; put 'put ''MSwyODM0MywyODM3MSwyODM0OSwyODMzNSwyODM1NiwyODMzOCwyODM3MiwyODM3MywyODMwMywyODMyNSwyODM1NCwyODMxOSwyODQ4MSwyODQzMywyODc0OCwyODM5NiwyODQwOCwyODQxNCwyODQ3OSwyODQwMiwyODQ2NSwyODM5OSwyODQ2NiwyODM2NCwyODQ3OCwyODQzNSwyODQwNywy''@;'; put 'put ''ODU1MCwyODUzOCwyODUzNiwyODU0NSwyODU0NCwyODUyNywyODUwNywyODY1OSwyODUyNSwyODU0NiwyODU0MCwyODUwNCwyODU1OCwyODU2MSwyODYxMCwyODUxOCwyODU5NSwyODU3OSwyODU3NywyODU4MCwyODYwMSwyODYxNCwyODU4NiwyODYzOSwyODYyOSwyODY1MiwyODYyOCwyODYz''@;'; put 'put ''MiwyODY1NywyODY1NCwyODYzNSwyODY4MSwyODY4MywyODY2NiwyODY4OSwyODY3MywyODY4NywyODY3MCwyODY5OSwyODY5OCwyODUzMiwyODcwMSwyODY5NiwyODcwMywyODcyMCwyODczNCwyODcyMiwyODc1MywyODc3MSwyODgyNSwyODgxOCwyODg0NywyODkxMywyODg0NCwyODg1Niwy''@;'; put 'put ''ODg1MSwyODg0NiwyODg5NSwyODg3NSwyODg5MywyODg4OSwyODkzNywyODkyNSwyODk1NiwyODk1MywyOTAyOSwyOTAxMywyOTA2NCwyOTAzMCwyOTAyNiwyOTAwNCwyOTAxNCwyOTAzNiwyOTA3MSwyOTE3OSwyOTA2MCwyOTA3NywyOTA5NiwyOTEwMCwyOTE0MywyOTExMywyOTExOCwyOTEz''@;'; put 'put ''OCwyOTEyOSwyOTE0MCwyOTEzNCwyOTE1MiwyOTE2NCwyOTE1OSwyOTE3MywyOTE4MCwyOTE3NywyOTE4MywyOTE5NywyOTIwMCwyOTIxMSwyOTIyNCwyOTIyOSwyOTIyOCwyOTIzMiwyOTIzNCwyOTI0MywyOTI0NCwyOTI0NywyOTI0OCwyOTI1NCwyOTI1OSwyOTI3MiwyOTMwMCwyOTMxMCwy''@;'; put 'put ''OTMxNCwyOTMxMywyOTMxOSwyOTMzMCwyOTMzNCwyOTM0NiwyOTM1MSwyOTM2OSwyOTM2MiwyOTM3OSwyOTM4MiwyOTM4MCwyOTM5MCwyOTM5NCwyOTQxMCwyOTQwOCwyOTQwOSwyOTQzMywyOTQzMSwyMDQ5NSwyOTQ2MywyOTQ1MCwyOTQ2OCwyOTQ2MiwyOTQ2OSwyOTQ5MiwyOTQ4NywyOTQ4''@;'; put 'put ''MSwyOTQ3NywyOTUwMiwyOTUxOCwyOTUxOSw0MDY2NCwyOTUyNywyOTU0NiwyOTU0NCwyOTU1MiwyOTU2MCwyOTU1NywyOTU2MywyOTU2MiwyOTY0MCwyOTYxOSwyOTY0NiwyOTYyNywyOTYzMiwyOTY2OSwyOTY3OCwyOTY2MiwyOTg1OCwyOTcwMSwyOTgwNywyOTczMywyOTY4OCwyOTc0Niwy''@;'; put 'put ''OTc1NCwyOTc4MSwyOTc1OSwyOTc5MSwyOTc4NSwyOTc2MSwyOTc4OCwyOTgwMSwyOTgwOCwyOTc5NSwyOTgwMiwyOTgxNCwyOTgyMiwyOTgzNSwyOTg1NCwyOTg2MywyOTg5OCwyOTkwMywyOTkwOCwyOTY4MSwyOTkyMCwyOTkyMywyOTkyNywyOTkyOSwyOTkzNCwyOTkzOCwyOTkzNiwyOTkz''@;'; put 'put ''NywyOTk0NCwyOTk0MywyOTk1NiwyOTk1NSwyOTk1NywyOTk2NCwyOTk2NiwyOTk2NSwyOTk3MywyOTk3MSwyOTk4MiwyOTk5MCwyOTk5NiwzMDAxMiwzMDAyMCwzMDAyOSwzMDAyNiwzMDAyNSwzMDA0MywzMDAyMiwzMDA0MiwzMDA1NywzMDA1MiwzMDA1NSwzMDA1OSwzMDA2MSwzMDA3Miwz''@;'; put 'put ''MDA3MCwzMDA4NiwzMDA4NywzMDA2OCwzMDA5MCwzMDA4OSwzMDA4MiwzMDEwMCwzMDEwNiwzMDEwOSwzMDExNywzMDExNSwzMDE0NiwzMDEzMSwzMDE0NywzMDEzMywzMDE0MSwzMDEzNiwzMDE0MCwzMDEyOSwzMDE1NywzMDE1NCwzMDE2MiwzMDE2OSwzMDE3OSwzMDE3NCwzMDIwNiwzMDIw''@;'; put 'put ''NywzMDIwNCwzMDIwOSwzMDE5MiwzMDIwMiwzMDE5NCwzMDE5NSwzMDIxOSwzMDIyMSwzMDIxNywzMDIzOSwzMDI0NywzMDI0MCwzMDI0MSwzMDI0MiwzMDI0NCwzMDI2MCwzMDI1NiwzMDI2NywzMDI3OSwzMDI4MCwzMDI3OCwzMDMwMCwzMDI5NiwzMDMwNSwzMDMwNiwzMDMxMiwzMDMxMywz''@;'; put 'put ''MDMxNCwzMDMxMSwzMDMxNiwzMDMyMCwzMDMyMiwzMDMyNiwzMDMyOCwzMDMzMiwzMDMzNiwzMDMzOSwzMDM0NCwzMDM0NywzMDM1MCwzMDM1OCwzMDM1NSwzMDM2MSwzMDM2MiwzMDM4NCwzMDM4OCwzMDM5MiwzMDM5MywzMDM5NCwzMDQwMiwzMDQxMywzMDQyMiwzMDQxOCwzMDQzMCwzMDQz''@;'; put 'put ''MywzMDQzNywzMDQzOSwzMDQ0MiwzNDM1MSwzMDQ1OSwzMDQ3MiwzMDQ3MSwzMDQ2OCwzMDUwNSwzMDUwMCwzMDQ5NCwzMDUwMSwzMDUwMiwzMDQ5MSwzMDUxOSwzMDUyMCwzMDUzNSwzMDU1NCwzMDU2OCwzMDU3MSwzMDU1NSwzMDU2NSwzMDU5MSwzMDU5MCwzMDU4NSwzMDYwNiwzMDYwMywz''@;'; put 'put ''MDYwOSwzMDYyNCwzMDYyMiwzMDY0MCwzMDY0NiwzMDY0OSwzMDY1NSwzMDY1MiwzMDY1MywzMDY1MSwzMDY2MywzMDY2OSwzMDY3OSwzMDY4MiwzMDY4NCwzMDY5MSwzMDcwMiwzMDcxNiwzMDczMiwzMDczOCwzMTAxNCwzMDc1MiwzMTAxOCwzMDc4OSwzMDg2MiwzMDgzNiwzMDg1NCwzMDg0''@;'; put 'put ''NCwzMDg3NCwzMDg2MCwzMDg4MywzMDkwMSwzMDg5MCwzMDg5NSwzMDkyOSwzMDkxOCwzMDkyMywzMDkzMiwzMDkxMCwzMDkwOCwzMDkxNywzMDkyMiwzMDk1NiwzMDk1MSwzMDkzOCwzMDk3MywzMDk2NCwzMDk4MywzMDk5NCwzMDk5MywzMTAwMSwzMTAyMCwzMTAxOSwzMTA0MCwzMTA3Miwz''@;'; put 'put ''MTA2MywzMTA3MSwzMTA2NiwzMTA2MSwzMTA1OSwzMTA5OCwzMTEwMywzMTExNCwzMTEzMywzMTE0Myw0MDc3OSwzMTE0NiwzMTE1MCwzMTE1NSwzMTE2MSwzMTE2MiwzMTE3NywzMTE4OSwzMTIwNywzMTIxMiwzMTIwMSwzMTIwMywzMTI0MCwzMTI0NSwzMTI1NiwzMTI1NywzMTI2NCwzMTI2''@;'; put 'put ''MywzMTEwNCwzMTI4MSwzMTI5MSwzMTI5NCwzMTI4NywzMTI5OSwzMTMxOSwzMTMwNSwzMTMyOSwzMTMzMCwzMTMzNyw0MDg2MSwzMTM0NCwzMTM1MywzMTM1NywzMTM2OCwzMTM4MywzMTM4MSwzMTM4NCwzMTM4MiwzMTQwMSwzMTQzMiwzMTQwOCwzMTQxNCwzMTQyOSwzMTQyOCwzMTQyMywz''@;'; put 'put ''Njk5NSwzMTQzMSwzMTQzNCwzMTQzNywzMTQzOSwzMTQ0NSwzMTQ0MywzMTQ0OSwzMTQ1MCwzMTQ1MywzMTQ1NywzMTQ1OCwzMTQ2MiwzMTQ2OSwzMTQ3MiwzMTQ5MCwzMTUwMywzMTQ5OCwzMTQ5NCwzMTUzOSwzMTUxMiwzMTUxMywzMTUxOCwzMTU0MSwzMTUyOCwzMTU0MiwzMTU2OCwzMTYx''@;'; put 'put ''MCwzMTQ5MiwzMTU2NSwzMTQ5OSwzMTU2NCwzMTU1NywzMTYwNSwzMTU4OSwzMTYwNCwzMTU5MSwzMTYwMCwzMTYwMSwzMTU5NiwzMTU5OCwzMTY0NSwzMTY0MCwzMTY0NywzMTYyOSwzMTY0NCwzMTY0MiwzMTYyNywzMTYzNCwzMTYzMSwzMTU4MSwzMTY0MSwzMTY5MSwzMTY4MSwzMTY5Miwz''@;'; put 'put ''MTY5NSwzMTY2OCwzMTY4NiwzMTcwOSwzMTcyMSwzMTc2MSwzMTc2NCwzMTcxOCwzMTcxNywzMTg0MCwzMTc0NCwzMTc1MSwzMTc2MywzMTczMSwzMTczNSwzMTc2NywzMTc1NywzMTczNCwzMTc3OSwzMTc4MywzMTc4NiwzMTc3NSwzMTc5OSwzMTc4NywzMTgwNSwzMTgyMCwzMTgxMSwzMTgy''@;'; put 'put ''OCwzMTgyMywzMTgwOCwzMTgyNCwzMTgzMiwzMTgzOSwzMTg0NCwzMTgzMCwzMTg0NSwzMTg1MiwzMTg2MSwzMTg3NSwzMTg4OCwzMTkwOCwzMTkxNywzMTkwNiwzMTkxNSwzMTkwNSwzMTkxMiwzMTkyMywzMTkyMiwzMTkyMSwzMTkxOCwzMTkyOSwzMTkzMywzMTkzNiwzMTk0MSwzMTkzOCwz''@;'; put 'put ''MTk2MCwzMTk1NCwzMTk2NCwzMTk3MCwzOTczOSwzMTk4MywzMTk4NiwzMTk4OCwzMTk5MCwzMTk5NCwzMjAwNiwzMjAwMiwzMjAyOCwzMjAyMSwzMjAxMCwzMjA2OSwzMjA3NSwzMjA0NiwzMjA1MCwzMjA2MywzMjA1MywzMjA3MCwzMjExNSwzMjA4NiwzMjA3OCwzMjExNCwzMjEwNCwzMjEx''@;'; put 'put ''MCwzMjA3OSwzMjA5OSwzMjE0NywzMjEzNywzMjA5MSwzMjE0MywzMjEyNSwzMjE1NSwzMjE4NiwzMjE3NCwzMjE2MywzMjE4MSwzMjE5OSwzMjE4OSwzMjE3MSwzMjMxNywzMjE2MiwzMjE3NSwzMjIyMCwzMjE4NCwzMjE1OSwzMjE3NiwzMjIxNiwzMjIyMSwzMjIyOCwzMjIyMiwzMjI1MSwz''@;'; put 'put ''MjI0MiwzMjIyNSwzMjI2MSwzMjI2NiwzMjI5MSwzMjI4OSwzMjI3NCwzMjMwNSwzMjI4NywzMjI2NSwzMjI2NywzMjI5MCwzMjMyNiwzMjM1OCwzMjMxNSwzMjMwOSwzMjMxMywzMjMyMywzMjMxMSwzMjMwNiwzMjMxNCwzMjM1OSwzMjM0OSwzMjM0MiwzMjM1MCwzMjM0NSwzMjM0NiwzMjM3''@;'; put 'put ''NywzMjM2MiwzMjM2MSwzMjM4MCwzMjM3OSwzMjM4NywzMjIxMywzMjM4MSwzNjc4MiwzMjM4MywzMjM5MiwzMjM5MywzMjM5NiwzMjQwMiwzMjQwMCwzMjQwMywzMjQwNCwzMjQwNiwzMjM5OCwzMjQxMSwzMjQxMiwzMjU2OCwzMjU3MCwzMjU4MSwzMjU4OCwzMjU4OSwzMjU5MCwzMjU5Miwz''@;'; put 'put ''MjU5MywzMjU5NywzMjU5NiwzMjYwMCwzMjYwNywzMjYwOCwzMjYxNiwzMjYxNywzMjYxNSwzMjYzMiwzMjY0MiwzMjY0NiwzMjY0MywzMjY0OCwzMjY0NywzMjY1MiwzMjY2MCwzMjY3MCwzMjY2OSwzMjY2NiwzMjY3NSwzMjY4NywzMjY5MCwzMjY5NywzMjY4NiwzMjY5NCwzMjY5NiwzNTY5''@;'; put 'put ''NywzMjcwOSwzMjcxMCwzMjcxNCwzMjcyNSwzMjcyNCwzMjczNywzMjc0MiwzMjc0NSwzMjc1NSwzMjc2MSwzOTEzMiwzMjc3NCwzMjc3MiwzMjc3OSwzMjc4NiwzMjc5MiwzMjc5MywzMjc5NiwzMjgwMSwzMjgwOCwzMjgzMSwzMjgyNywzMjg0MiwzMjgzOCwzMjg1MCwzMjg1NiwzMjg1OCwz''@;'; put 'put ''Mjg2MywzMjg2NiwzMjg3MiwzMjg4MywzMjg4MiwzMjg4MCwzMjg4NiwzMjg4OSwzMjg5MywzMjg5NSwzMjkwMCwzMjkwMiwzMjkwMSwzMjkyMywzMjkxNSwzMjkyMiwzMjk0MSwyMDg4MCwzMjk0MCwzMjk4NywzMjk5NywzMjk4NSwzMjk4OSwzMjk2NCwzMjk4NiwzMjk4MiwzMzAzMywzMzAw''@;'; put 'put ''NywzMzAwOSwzMzA1MSwzMzA2NSwzMzA1OSwzMzA3MSwzMzA5OSwzODUzOSwzMzA5NCwzMzA4NiwzMzEwNywzMzEwNSwzMzAyMCwzMzEzNywzMzEzNCwzMzEyNSwzMzEyNiwzMzE0MCwzMzE1NSwzMzE2MCwzMzE2MiwzMzE1MiwzMzE1NCwzMzE4NCwzMzE3MywzMzE4OCwzMzE4NywzMzExOSwz''@;'; put 'put ''MzE3MSwzMzE5MywzMzIwMCwzMzIwNSwzMzIxNCwzMzIwOCwzMzIxMywzMzIxNiwzMzIxOCwzMzIxMCwzMzIyNSwzMzIyOSwzMzIzMywzMzI0MSwzMzI0MCwzMzIyNCwzMzI0MiwzMzI0NywzMzI0OCwzMzI1NSwzMzI3NCwzMzI3NSwzMzI3OCwzMzI4MSwzMzI4MiwzMzI4NSwzMzI4NywzMzI5''@;'; put 'put ''MCwzMzI5MywzMzI5NiwzMzMwMiwzMzMyMSwzMzMyMywzMzMzNiwzMzMzMSwzMzM0NCwzMzM2OSwzMzM2OCwzMzM3MywzMzM3MCwzMzM3NSwzMzM4MCwzMzM3OCwzMzM4NCwzMzM4NiwzMzM4NywzMzMyNiwzMzM5MywzMzM5OSwzMzQwMCwzMzQwNiwzMzQyMSwzMzQyNiwzMzQ1MSwzMzQzOSwz''@;'; put 'put ''MzQ2NywzMzQ1MiwzMzUwNSwzMzUwNywzMzUwMywzMzQ5MCwzMzUyNCwzMzUyMywzMzUzMCwzMzY4MywzMzUzOSwzMzUzMSwzMzUyOSwzMzUwMiwzMzU0MiwzMzUwMCwzMzU0NSwzMzQ5NywzMzU4OSwzMzU4OCwzMzU1OCwzMzU4NiwzMzU4NSwzMzYwMCwzMzU5MywzMzYxNiwzMzYwNSwzMzU4''@;'; put 'put ''MywzMzU3OSwzMzU1OSwzMzU2MCwzMzY2OSwzMzY5MCwzMzcwNiwzMzY5NSwzMzY5OCwzMzY4NiwzMzU3MSwzMzY3OCwzMzY3MSwzMzY3NCwzMzY2MCwzMzcxNywzMzY1MSwzMzY1MywzMzY5NiwzMzY3MywzMzcwNCwzMzc4MCwzMzgxMSwzMzc3MSwzMzc0MiwzMzc4OSwzMzc5NSwzMzc1Miwz''@;'; put 'put ''MzgwMywzMzcyOSwzMzc4MywzMzc5OSwzMzc2MCwzMzc3OCwzMzgwNSwzMzgyNiwzMzgyNCwzMzcyNSwzMzg0OCwzNDA1NCwzMzc4NywzMzkwMSwzMzgzNCwzMzg1MiwzNDEzOCwzMzkyNCwzMzkxMSwzMzg5OSwzMzk2NSwzMzkwMiwzMzkyMiwzMzg5NywzMzg2MiwzMzgzNiwzMzkwMywzMzkx''@;'; put 'put ''MywzMzg0NSwzMzk5NCwzMzg5MCwzMzk3NywzMzk4MywzMzk1MSwzNDAwOSwzMzk5NywzMzk3OSwzNDAxMCwzNGUzLDMzOTg1LDMzOTkwLDM0MDA2LDMzOTUzLDM0MDgxLDM0MDQ3LDM0MDM2LDM0MDcxLDM0MDcyLDM0MDkyLDM0MDc5LDM0MDY5LDM0MDY4LDM0MDQ0LDM0MTEyLDM0MTQ3LDM0''@;'; put 'put ''MTM2LDM0MTIwLDM0MTEzLDM0MzA2LDM0MTIzLDM0MTMzLDM0MTc2LDM0MjEyLDM0MTg0LDM0MTkzLDM0MTg2LDM0MjE2LDM0MTU3LDM0MTk2LDM0MjAzLDM0MjgyLDM0MTgzLDM0MjA0LDM0MTY3LDM0MTc0LDM0MTkyLDM0MjQ5LDM0MjM0LDM0MjU1LDM0MjMzLDM0MjU2LDM0MjYxLDM0MjY5''@;'; put 'put ''LDM0Mjc3LDM0MjY4LDM0Mjk3LDM0MzE0LDM0MzIzLDM0MzE1LDM0MzAyLDM0Mjk4LDM0MzEwLDM0MzM4LDM0MzMwLDM0MzUyLDM0MzY3LDM0MzgxLDIwMDUzLDM0Mzg4LDM0Mzk5LDM0NDA3LDM0NDE3LDM0NDUxLDM0NDY3LDM0NDczLDM0NDc0LDM0NDQzLDM0NDQ0LDM0NDg2LDM0NDc5LDM0''@;'; put 'put ''NTAwLDM0NTAyLDM0NDgwLDM0NTA1LDM0ODUxLDM0NDc1LDM0NTE2LDM0NTI2LDM0NTM3LDM0NTQwLDM0NTI3LDM0NTIzLDM0NTQzLDM0NTc4LDM0NTY2LDM0NTY4LDM0NTYwLDM0NTYzLDM0NTU1LDM0NTc3LDM0NTY5LDM0NTczLDM0NTUzLDM0NTcwLDM0NjEyLDM0NjIzLDM0NjE1LDM0NjE5''@;'; put 'put ''LDM0NTk3LDM0NjAxLDM0NTg2LDM0NjU2LDM0NjU1LDM0NjgwLDM0NjM2LDM0NjM4LDM0Njc2LDM0NjQ3LDM0NjY0LDM0NjcwLDM0NjQ5LDM0NjQzLDM0NjU5LDM0NjY2LDM0ODIxLDM0NzIyLDM0NzE5LDM0NjkwLDM0NzM1LDM0NzYzLDM0NzQ5LDM0NzUyLDM0NzY4LDM4NjE0LDM0NzMxLDM0''@;'; put 'put ''NzU2LDM0NzM5LDM0NzU5LDM0NzU4LDM0NzQ3LDM0Nzk5LDM0ODAyLDM0Nzg0LDM0ODMxLDM0ODI5LDM0ODE0LDM0ODA2LDM0ODA3LDM0ODMwLDM0NzcwLDM0ODMzLDM0ODM4LDM0ODM3LDM0ODUwLDM0ODQ5LDM0ODY1LDM0ODcwLDM0ODczLDM0ODU1LDM0ODc1LDM0ODg0LDM0ODgyLDM0ODk4''@;'; put 'put ''LDM0OTA1LDM0OTEwLDM0OTE0LDM0OTIzLDM0OTQ1LDM0OTQyLDM0OTc0LDM0OTMzLDM0OTQxLDM0OTk3LDM0OTMwLDM0OTQ2LDM0OTY3LDM0OTYyLDM0OTkwLDM0OTY5LDM0OTc4LDM0OTU3LDM0OTgwLDM0OTkyLDM1MDA3LDM0OTkzLDM1MDExLDM1MDEyLDM1MDI4LDM1MDMyLDM1MDMzLDM1''@;'; put 'put ''MDM3LDM1MDY1LDM1MDc0LDM1MDY4LDM1MDYwLDM1MDQ4LDM1MDU4LDM1MDc2LDM1MDg0LDM1MDgyLDM1MDkxLDM1MTM5LDM1MTAyLDM1MTA5LDM1MTE0LDM1MTE1LDM1MTM3LDM1MTQwLDM1MTMxLDM1MTI2LDM1MTI4LDM1MTQ4LDM1MTAxLDM1MTY4LDM1MTY2LDM1MTc0LDM1MTcyLDM1MTgx''@;'; put 'put ''LDM1MTc4LDM1MTgzLDM1MTg4LDM1MTkxLDM1MTk4LDM1MjAzLDM1MjA4LDM1MjEwLDM1MjE5LDM1MjI0LDM1MjMzLDM1MjQxLDM1MjM4LDM1MjQ0LDM1MjQ3LDM1MjUwLDM1MjU4LDM1MjYxLDM1MjYzLDM1MjY0LDM1MjkwLDM1MjkyLDM1MjkzLDM1MzAzLDM1MzE2LDM1MzIwLDM1MzMxLDM1''@;'; put 'put ''MzUwLDM1MzQ0LDM1MzQwLDM1MzU1LDM1MzU3LDM1MzY1LDM1MzgyLDM1MzkzLDM1NDE5LDM1NDEwLDM1Mzk4LDM1NDAwLDM1NDUyLDM1NDM3LDM1NDM2LDM1NDI2LDM1NDYxLDM1NDU4LDM1NDYwLDM1NDk2LDM1NDg5LDM1NDczLDM1NDkzLDM1NDk0LDM1NDgyLDM1NDkxLDM1NTI0LDM1NTMz''@;'; put 'put ''LDM1NTIyLDM1NTQ2LDM1NTYzLDM1NTcxLDM1NTU5LDM1NTU2LDM1NTY5LDM1NjA0LDM1NTUyLDM1NTU0LDM1NTc1LDM1NTUwLDM1NTQ3LDM1NTk2LDM1NTkxLDM1NjEwLDM1NTUzLDM1NjA2LDM1NjAwLDM1NjA3LDM1NjE2LDM1NjM1LDM4ODI3LDM1NjIyLDM1NjI3LDM1NjQ2LDM1NjI0LDM1''@;'; put 'put ''NjQ5LDM1NjYwLDM1NjYzLDM1NjYyLDM1NjU3LDM1NjcwLDM1Njc1LDM1Njc0LDM1NjkxLDM1Njc5LDM1NjkyLDM1Njk1LDM1NzAwLDM1NzA5LDM1NzEyLDM1NzI0LDM1NzI2LDM1NzMwLDM1NzMxLDM1NzM0LDM1NzM3LDM1NzM4LDM1ODk4LDM1OTA1LDM1OTAzLDM1OTEyLDM1OTE2LDM1OTE4''@;'; put 'put ''LDM1OTIwLDM1OTI1LDM1OTM4LDM1OTQ4LDM1OTYwLDM1OTYyLDM1OTcwLDM1OTc3LDM1OTczLDM1OTc4LDM1OTgxLDM1OTgyLDM1OTg4LDM1OTY0LDM1OTkyLDI1MTE3LDM2MDEzLDM2MDEwLDM2MDI5LDM2MDE4LDM2MDE5LDM2MDE0LDM2MDIyLDM2MDQwLDM2MDMzLDM2MDY4LDM2MDY3LDM2''@;'; put 'put ''MDU4LDM2MDkzLDM2MDkwLDM2MDkxLDM2MTAwLDM2MTAxLDM2MTA2LDM2MTAzLDM2MTExLDM2MTA5LDM2MTEyLDQwNzgyLDM2MTE1LDM2MDQ1LDM2MTE2LDM2MTE4LDM2MTk5LDM2MjA1LDM2MjA5LDM2MjExLDM2MjI1LDM2MjQ5LDM2MjkwLDM2Mjg2LDM2MjgyLDM2MzAzLDM2MzE0LDM2MzEw''@;'; put 'put ''LDM2MzAwLDM2MzE1LDM2Mjk5LDM2MzMwLDM2MzMxLDM2MzE5LDM2MzIzLDM2MzQ4LDM2MzYwLDM2MzYxLDM2MzUxLDM2MzgxLDM2MzgyLDM2MzY4LDM2MzgzLDM2NDE4LDM2NDA1LDM2NDAwLDM2NDA0LDM2NDI2LDM2NDIzLDM2NDI1LDM2NDI4LDM2NDMyLDM2NDI0LDM2NDQxLDM2NDUyLDM2''@;'; put 'put ''NDQ4LDM2Mzk0LDM2NDUxLDM2NDM3LDM2NDcwLDM2NDY2LDM2NDc2LDM2NDgxLDM2NDg3LDM2NDg1LDM2NDg0LDM2NDkxLDM2NDkwLDM2NDk5LDM2NDk3LDM2NTAwLDM2NTA1LDM2NTIyLDM2NTEzLDM2NTI0LDM2NTI4LDM2NTUwLDM2NTI5LDM2NTQyLDM2NTQ5LDM2NTUyLDM2NTU1LDM2NTcx''@;'; put 'put ''LDM2NTc5LDM2NjA0LDM2NjAzLDM2NTg3LDM2NjA2LDM2NjE4LDM2NjEzLDM2NjI5LDM2NjI2LDM2NjMzLDM2NjI3LDM2NjM2LDM2NjM5LDM2NjM1LDM2NjIwLDM2NjQ2LDM2NjU5LDM2NjY3LDM2NjY1LDM2Njc3LDM2Njc0LDM2NjcwLDM2Njg0LDM2NjgxLDM2Njc4LDM2Njg2LDM2Njk1LDM2''@;'; put 'put ''NzAwLDM2NzA2LDM2NzA3LDM2NzA4LDM2NzY0LDM2NzY3LDM2NzcxLDM2NzgxLDM2NzgzLDM2NzkxLDM2ODI2LDM2ODM3LDM2ODM0LDM2ODQyLDM2ODQ3LDM2OTk5LDM2ODUyLDM2ODY5LDM2ODU3LDM2ODU4LDM2ODgxLDM2ODg1LDM2ODk3LDM2ODc3LDM2ODk0LDM2ODg2LDM2ODc1LDM2OTAz''@;'; put 'put ''LDM2OTE4LDM2OTE3LDM2OTIxLDM2ODU2LDM2OTQzLDM2OTQ0LDM2OTQ1LDM2OTQ2LDM2ODc4LDM2OTM3LDM2OTI2LDM2OTUwLDM2OTUyLDM2OTU4LDM2OTY4LDM2OTc1LDM2OTgyLDM4NTY4LDM2OTc4LDM2OTk0LDM2OTg5LDM2OTkzLDM2OTkyLDM3MDAyLDM3MDAxLDM3MDA3LDM3MDMyLDM3''@;'; put 'put ''MDM5LDM3MDQxLDM3MDQ1LDM3MDkwLDM3MDkyLDI1MTYwLDM3MDgzLDM3MTIyLDM3MTM4LDM3MTQ1LDM3MTcwLDM3MTY4LDM3MTk0LDM3MjA2LDM3MjA4LDM3MjE5LDM3MjIxLDM3MjI1LDM3MjM1LDM3MjM0LDM3MjU5LDM3MjU3LDM3MjUwLDM3MjgyLDM3MjkxLDM3Mjk1LDM3MjkwLDM3MzAx''@;'; put 'put ''LDM3MzAwLDM3MzA2LDM3MzEyLDM3MzEzLDM3MzIxLDM3MzIzLDM3MzI4LDM3MzM0LDM3MzQzLDM3MzQ1LDM3MzM5LDM3MzcyLDM3MzY1LDM3MzY2LDM3NDA2LDM3Mzc1LDM3Mzk2LDM3NDIwLDM3Mzk3LDM3MzkzLDM3NDcwLDM3NDYzLDM3NDQ1LDM3NDQ5LDM3NDc2LDM3NDQ4LDM3NTI1LDM3''@;'; put 'put ''NDM5LDM3NDUxLDM3NDU2LDM3NTMyLDM3NTI2LDM3NTIzLDM3NTMxLDM3NDY2LDM3NTgzLDM3NTYxLDM3NTU5LDM3NjA5LDM3NjQ3LDM3NjI2LDM3NzAwLDM3Njc4LDM3NjU3LDM3NjY2LDM3NjU4LDM3NjY3LDM3NjkwLDM3Njg1LDM3NjkxLDM3NzI0LDM3NzI4LDM3NzU2LDM3NzQyLDM3NzE4''@;'; put 'put ''LDM3ODA4LDM3ODA0LDM3ODA1LDM3NzgwLDM3ODE3LDM3ODQ2LDM3ODQ3LDM3ODY0LDM3ODYxLDM3ODQ4LDM3ODI3LDM3ODUzLDM3ODQwLDM3ODMyLDM3ODYwLDM3OTE0LDM3OTA4LDM3OTA3LDM3ODkxLDM3ODk1LDM3OTA0LDM3OTQyLDM3OTMxLDM3OTQxLDM3OTIxLDM3OTQ2LDM3OTUzLDM3''@;'; put 'put ''OTcwLDM3OTU2LDM3OTc5LDM3OTg0LDM3OTg2LDM3OTgyLDM3OTk0LDM3NDE3LDM4ZTMsMzgwMDUsMzgwMDcsMzgwMTMsMzc5NzgsMzgwMTIsMzgwMTQsMzgwMTcsMzgwMTUsMzgyNzQsMzgyNzksMzgyODIsMzgyOTIsMzgyOTQsMzgyOTYsMzgyOTcsMzgzMDQsMzgzMTIsMzgzMTEsMzgzMTcs''@;'; put 'put ''MzgzMzIsMzgzMzEsMzgzMjksMzgzMzQsMzgzNDYsMjg2NjIsMzgzMzksMzgzNDksMzgzNDgsMzgzNTcsMzgzNTYsMzgzNTgsMzgzNjQsMzgzNjksMzgzNzMsMzgzNzAsMzg0MzMsMzg0NDAsMzg0NDYsMzg0NDcsMzg0NjYsMzg0NzYsMzg0NzksMzg0NzUsMzg1MTksMzg0OTIsMzg0OTQsMzg0''@;'; put 'put ''OTMsMzg0OTUsMzg1MDIsMzg1MTQsMzg1MDgsMzg1NDEsMzg1NTIsMzg1NDksMzg1NTEsMzg1NzAsMzg1NjcsMzg1NzcsMzg1NzgsMzg1NzYsMzg1ODAsMzg1ODIsMzg1ODQsMzg1ODUsMzg2MDYsMzg2MDMsMzg2MDEsMzg2MDUsMzUxNDksMzg2MjAsMzg2NjksMzg2MTMsMzg2NDksMzg2NjAs''@;'; put 'put ''Mzg2NjIsMzg2NjQsMzg2NzUsMzg2NzAsMzg2NzMsMzg2NzEsMzg2NzgsMzg2ODEsMzg2OTIsMzg2OTgsMzg3MDQsMzg3MTMsMzg3MTcsMzg3MTgsMzg3MjQsMzg3MjYsMzg3MjgsMzg3MjIsMzg3MjksMzg3NDgsMzg3NTIsMzg3NTYsMzg3NTgsMzg3NjAsMjEyMDIsMzg3NjMsMzg3NjksMzg3''@;'; put 'put ''NzcsMzg3ODksMzg3ODAsMzg3ODUsMzg3NzgsMzg3OTAsMzg3OTUsMzg3OTksMzg4MDAsMzg4MTIsMzg4MjQsMzg4MjIsMzg4MTksMzg4MzUsMzg4MzYsMzg4NTEsMzg4NTQsMzg4NTYsMzg4NTksMzg4NzYsMzg4OTMsNDA3ODMsMzg4OTgsMzE0NTUsMzg5MDIsMzg5MDEsMzg5MjcsMzg5MjQs''@;'; put 'put ''Mzg5NjgsMzg5NDgsMzg5NDUsMzg5NjcsMzg5NzMsMzg5ODIsMzg5OTEsMzg5ODcsMzkwMTksMzkwMjMsMzkwMjQsMzkwMjUsMzkwMjgsMzkwMjcsMzkwODIsMzkwODcsMzkwODksMzkwOTQsMzkxMDgsMzkxMDcsMzkxMTAsMzkxNDUsMzkxNDcsMzkxNzEsMzkxNzcsMzkxODYsMzkxODgsMzkx''@;'; put 'put ''OTIsMzkyMDEsMzkxOTcsMzkxOTgsMzkyMDQsMzkyMDAsMzkyMTIsMzkyMTQsMzkyMjksMzkyMzAsMzkyMzQsMzkyNDEsMzkyMzcsMzkyNDgsMzkyNDMsMzkyNDksMzkyNTAsMzkyNDQsMzkyNTMsMzkzMTksMzkzMjAsMzkzMzMsMzkzNDEsMzkzNDIsMzkzNTYsMzkzOTEsMzkzODcsMzkzODks''@;'; put 'put ''MzkzODQsMzkzNzcsMzk0MDUsMzk0MDYsMzk0MDksMzk0MTAsMzk0MTksMzk0MTYsMzk0MjUsMzk0MzksMzk0MjksMzkzOTQsMzk0NDksMzk0NjcsMzk0NzksMzk0OTMsMzk0OTAsMzk0ODgsMzk0OTEsMzk0ODYsMzk1MDksMzk1MDEsMzk1MTUsMzk1MTEsMzk1MTksMzk1MjIsMzk1MjUsMzk1''@;'; put 'put ''MjQsMzk1MjksMzk1MzEsMzk1MzAsMzk1OTcsMzk2MDAsMzk2MTIsMzk2MTYsMzk2MzEsMzk2MzMsMzk2MzUsMzk2MzYsMzk2NDYsMzk2NDcsMzk2NTAsMzk2NTEsMzk2NTQsMzk2NjMsMzk2NTksMzk2NjIsMzk2NjgsMzk2NjUsMzk2NzEsMzk2NzUsMzk2ODYsMzk3MDQsMzk3MDYsMzk3MTEs''@;'; put 'put ''Mzk3MTQsMzk3MTUsMzk3MTcsMzk3MTksMzk3MjAsMzk3MjEsMzk3MjIsMzk3MjYsMzk3MjcsMzk3MzAsMzk3NDgsMzk3NDcsMzk3NTksMzk3NTcsMzk3NTgsMzk3NjEsMzk3NjgsMzk3OTYsMzk4MjcsMzk4MTEsMzk4MjUsMzk4MzAsMzk4MzEsMzk4MzksMzk4NDAsMzk4NDgsMzk4NjAsMzk4''@;'; put 'put ''NzIsMzk4ODIsMzk4NjUsMzk4NzgsMzk4ODcsMzk4ODksMzk4OTAsMzk5MDcsMzk5MDYsMzk5MDgsMzk4OTIsMzk5MDUsMzk5OTQsMzk5MjIsMzk5MjEsMzk5MjAsMzk5NTcsMzk5NTYsMzk5NDUsMzk5NTUsMzk5NDgsMzk5NDIsMzk5NDQsMzk5NTQsMzk5NDYsMzk5NDAsMzk5ODIsMzk5NjMs''@;'; put 'put ''Mzk5NzMsMzk5NzIsMzk5NjksMzk5ODQsNDAwMDcsMzk5ODYsNDAwMDYsMzk5OTgsNDAwMjYsNDAwMzIsNDAwMzksNDAwNTQsNDAwNTYsNDAxNjcsNDAxNzIsNDAxNzYsNDAyMDEsNDAyMDAsNDAxNzEsNDAxOTUsNDAxOTgsNDAyMzQsNDAyMzAsNDAzNjcsNDAyMjcsNDAyMjMsNDAyNjAsNDAy''@;'; put 'put ''MTMsNDAyMTAsNDAyNTcsNDAyNTUsNDAyNTQsNDAyNjIsNDAyNjQsNDAyODUsNDAyODYsNDAyOTIsNDAyNzMsNDAyNzIsNDAyODEsNDAzMDYsNDAzMjksNDAzMjcsNDAzNjMsNDAzMDMsNDAzMTQsNDAzNDYsNDAzNTYsNDAzNjEsNDAzNzAsNDAzODgsNDAzODUsNDAzNzksNDAzNzYsNDAzNzgs''@;'; put 'put ''NDAzOTAsNDAzOTksNDAzODYsNDA0MDksNDA0MDMsNDA0NDAsNDA0MjIsNDA0MjksNDA0MzEsNDA0NDUsNDA0NzQsNDA0NzUsNDA0NzgsNDA1NjUsNDA1NjksNDA1NzMsNDA1NzcsNDA1ODQsNDA1ODcsNDA1ODgsNDA1OTQsNDA1OTcsNDA1OTMsNDA2MDUsNDA2MTMsNDA2MTcsNDA2MzIsNDA2''@;'; put 'put ''MTgsNDA2MjEsMzg3NTMsNDA2NTIsNDA2NTQsNDA2NTUsNDA2NTYsNDA2NjAsNDA2NjgsNDA2NzAsNDA2NjksNDA2NzIsNDA2NzcsNDA2ODAsNDA2ODcsNDA2OTIsNDA2OTQsNDA2OTUsNDA2OTcsNDA2OTksNDA3MDAsNDA3MDEsNDA3MTEsNDA3MTIsMzAzOTEsNDA3MjUsNDA3MzcsNDA3NDgs''@;'; put 'put ''NDA3NjYsNDA3NzgsNDA3ODYsNDA3ODgsNDA4MDMsNDA3OTksNDA4MDAsNDA4MDEsNDA4MDYsNDA4MDcsNDA4MTIsNDA4MTAsNDA4MjMsNDA4MTgsNDA4MjIsNDA4NTMsNDA4NjAsNDA4NjQsMjI1NzUsMjcwNzksMzY5NTMsMjk3OTYsMjA5NTYsMjkwODEsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; 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 ''dWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDMyMzk0LDM1MTAw''@;'; put 'put ''LDM3NzA0LDM3NTEyLDM0MDEyLDIwNDI1LDI4ODU5LDI2MTYxLDI2ODI0LDM3NjI1LDI2MzYzLDI0Mzg5LDIwMDA4LDIwMTkzLDIwMjIwLDIwMjI0LDIwMjI3LDIwMjgxLDIwMzEwLDIwMzcwLDIwMzYyLDIwMzc4LDIwMzcyLDIwNDI5LDIwNTQ0LDIwNTE0LDIwNDc5LDIwNTEwLDIwNTUwLDIw''@;'; put 'put ''NTkyLDIwNTQ2LDIwNjI4LDIwNzI0LDIwNjk2LDIwODEwLDIwODM2LDIwODkzLDIwOTI2LDIwOTcyLDIxMDEzLDIxMTQ4LDIxMTU4LDIxMTg0LDIxMjExLDIxMjQ4LDIxMjU1LDIxMjg0LDIxMzYyLDIxMzk1LDIxNDI2LDIxNDY5LDY0MDE0LDIxNjYwLDIxNjQyLDIxNjczLDIxNzU5LDIxODk0''@;'; put 'put ''LDIyMzYxLDIyMzczLDIyNDQ0LDIyNDcyLDIyNDcxLDY0MDE1LDY0MDE2LDIyNjg2LDIyNzA2LDIyNzk1LDIyODY3LDIyODc1LDIyODc3LDIyODgzLDIyOTQ4LDIyOTcwLDIzMzgyLDIzNDg4LDI5OTk5LDIzNTEyLDIzNTMyLDIzNTgyLDIzNzE4LDIzNzM4LDIzNzk3LDIzODQ3LDIzODkxLDY0''@;'; put 'put ''MDE3LDIzODc0LDIzOTE3LDIzOTkyLDIzOTkzLDI0MDE2LDI0MzUzLDI0MzcyLDI0NDIzLDI0NTAzLDI0NTQyLDI0NjY5LDI0NzA5LDI0NzE0LDI0Nzk4LDI0Nzg5LDI0ODY0LDI0ODE4LDI0ODQ5LDI0ODg3LDI0ODgwLDI0OTg0LDI1MTA3LDI1MjU0LDI1NTg5LDI1Njk2LDI1NzU3LDI1ODA2''@;'; put 'put ''LDI1OTM0LDI2MTEyLDI2MTMzLDI2MTcxLDI2MTIxLDI2MTU4LDI2MTQyLDI2MTQ4LDI2MjEzLDI2MTk5LDI2MjAxLDY0MDE4LDI2MjI3LDI2MjY1LDI2MjcyLDI2MjkwLDI2MzAzLDI2MzYyLDI2MzgyLDYzNzg1LDI2NDcwLDI2NTU1LDI2NzA2LDI2NTYwLDI2NjI1LDI2NjkyLDI2ODMxLDY0''@;'; put 'put ''MDE5LDI2OTg0LDY0MDIwLDI3MDMyLDI3MTA2LDI3MTg0LDI3MjQzLDI3MjA2LDI3MjUxLDI3MjYyLDI3MzYyLDI3MzY0LDI3NjA2LDI3NzExLDI3NzQwLDI3NzgyLDI3NzU5LDI3ODY2LDI3OTA4LDI4MDM5LDI4MDE1LDI4MDU0LDI4MDc2LDI4MTExLDI4MTUyLDI4MTQ2LDI4MTU2LDI4MjE3''@;'; put 'put ''LDI4MjUyLDI4MTk5LDI4MjIwLDI4MzUxLDI4NTUyLDI4NTk3LDI4NjYxLDI4Njc3LDI4Njc5LDI4NzEyLDI4ODA1LDI4ODQzLDI4OTQzLDI4OTMyLDI5MDIwLDI4OTk4LDI4OTk5LDY0MDIxLDI5MTIxLDI5MTgyLDI5MzYxLDI5Mzc0LDI5NDc2LDY0MDIyLDI5NTU5LDI5NjI5LDI5NjQxLDI5''@;'; put 'put ''NjU0LDI5NjY3LDI5NjUwLDI5NzAzLDI5Njg1LDI5NzM0LDI5NzM4LDI5NzM3LDI5NzQyLDI5Nzk0LDI5ODMzLDI5ODU1LDI5OTUzLDMwMDYzLDMwMzM4LDMwMzY0LDMwMzY2LDMwMzYzLDMwMzc0LDY0MDIzLDMwNTM0LDIxMTY3LDMwNzUzLDMwNzk4LDMwODIwLDMwODQyLDMxMDI0LDY0MDI0''@;'; put 'put ''LDY0MDI1LDY0MDI2LDMxMTI0LDY0MDI3LDMxMTMxLDMxNDQxLDMxNDYzLDY0MDI4LDMxNDY3LDMxNjQ2LDY0MDI5LDMyMDcyLDMyMDkyLDMyMTgzLDMyMTYwLDMyMjE0LDMyMzM4LDMyNTgzLDMyNjczLDY0MDMwLDMzNTM3LDMzNjM0LDMzNjYzLDMzNzM1LDMzNzgyLDMzODY0LDMzOTcyLDM0''@;'; put 'put ''MTMxLDM0MTM3LDM0MTU1LDY0MDMxLDM0MjI0LDY0MDMyLDY0MDMzLDM0ODIzLDM1MDYxLDM1MzQ2LDM1MzgzLDM1NDQ5LDM1NDk1LDM1NTE4LDM1NTUxLDY0MDM0LDM1NTc0LDM1NjY3LDM1NzExLDM2MDgwLDM2MDg0LDM2MTE0LDM2MjE0LDY0MDM1LDM2NTU5LDY0MDM2LDY0MDM3LDM2OTY3''@;'; put 'put ''LDM3MDg2LDY0MDM4LDM3MTQxLDM3MTU5LDM3MzM4LDM3MzM1LDM3MzQyLDM3MzU3LDM3MzU4LDM3MzQ4LDM3MzQ5LDM3MzgyLDM3MzkyLDM3Mzg2LDM3NDM0LDM3NDQwLDM3NDM2LDM3NDU0LDM3NDY1LDM3NDU3LDM3NDMzLDM3NDc5LDM3NTQzLDM3NDk1LDM3NDk2LDM3NjA3LDM3NTkxLDM3''@;'; put 'put ''NTkzLDM3NTg0LDY0MDM5LDM3NTg5LDM3NjAwLDM3NTg3LDM3NjY5LDM3NjY1LDM3NjI3LDY0MDQwLDM3NjYyLDM3NjMxLDM3NjYxLDM3NjM0LDM3NzQ0LDM3NzE5LDM3Nzk2LDM3ODMwLDM3ODU0LDM3ODgwLDM3OTM3LDM3OTU3LDM3OTYwLDM4MjkwLDYzOTY0LDY0MDQxLDM4NTU3LDM4NTc1''@;'; put 'put ''LDM4NzA3LDM4NzE1LDM4NzIzLDM4NzMzLDM4NzM1LDM4NzM3LDM4NzQxLDM4OTk5LDM5MDEzLDY0MDQyLDY0MDQzLDM5MjA3LDY0MDQ0LDM5MzI2LDM5NTAyLDM5NjQxLDM5NjQ0LDM5Nzk3LDM5Nzk0LDM5ODIzLDM5ODU3LDM5ODY3LDM5OTM2LDQwMzA0LDQwMjk5LDY0MDQ1LDQwNDczLDQw''@;'; put 'put ''NjU3LG51bGwsbnVsbCw4NTYwLDg1NjEsODU2Miw4NTYzLDg1NjQsODU2NSw4NTY2LDg1NjcsODU2OCw4NTY5LDY1NTA2LDY1NTA4LDY1Mjg3LDY1MjgyLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; 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 ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsODU2MCw4NTYxLDg1NjIsODU2Myw4NTY0LDg1NjUsODU2Niw4NTY3LDg1NjgsODU2OSw4NTQ0LDg1NDUsODU0Niw4NTQ3LDg1NDgsODU0OSw4NTUwLDg1NTEsODU1Miw4NTUzLDY1NTA2LDY1NTA4LDY1Mjg3LDY1MjgyLDEyODQ5LDg0''@;'; put 'put ''NzAsODQ4MSw4NzU3LDMyMzk0LDM1MTAwLDM3NzA0LDM3NTEyLDM0MDEyLDIwNDI1LDI4ODU5LDI2MTYxLDI2ODI0LDM3NjI1LDI2MzYzLDI0Mzg5LDIwMDA4LDIwMTkzLDIwMjIwLDIwMjI0LDIwMjI3LDIwMjgxLDIwMzEwLDIwMzcwLDIwMzYyLDIwMzc4LDIwMzcyLDIwNDI5LDIwNTQ0LDIw''@;'; put 'put ''NTE0LDIwNDc5LDIwNTEwLDIwNTUwLDIwNTkyLDIwNTQ2LDIwNjI4LDIwNzI0LDIwNjk2LDIwODEwLDIwODM2LDIwODkzLDIwOTI2LDIwOTcyLDIxMDEzLDIxMTQ4LDIxMTU4LDIxMTg0LDIxMjExLDIxMjQ4LDIxMjU1LDIxMjg0LDIxMzYyLDIxMzk1LDIxNDI2LDIxNDY5LDY0MDE0LDIxNjYw''@;'; put 'put ''LDIxNjQyLDIxNjczLDIxNzU5LDIxODk0LDIyMzYxLDIyMzczLDIyNDQ0LDIyNDcyLDIyNDcxLDY0MDE1LDY0MDE2LDIyNjg2LDIyNzA2LDIyNzk1LDIyODY3LDIyODc1LDIyODc3LDIyODgzLDIyOTQ4LDIyOTcwLDIzMzgyLDIzNDg4LDI5OTk5LDIzNTEyLDIzNTMyLDIzNTgyLDIzNzE4LDIz''@;'; put 'put ''NzM4LDIzNzk3LDIzODQ3LDIzODkxLDY0MDE3LDIzODc0LDIzOTE3LDIzOTkyLDIzOTkzLDI0MDE2LDI0MzUzLDI0MzcyLDI0NDIzLDI0NTAzLDI0NTQyLDI0NjY5LDI0NzA5LDI0NzE0LDI0Nzk4LDI0Nzg5LDI0ODY0LDI0ODE4LDI0ODQ5LDI0ODg3LDI0ODgwLDI0OTg0LDI1MTA3LDI1MjU0''@;'; put 'put ''LDI1NTg5LDI1Njk2LDI1NzU3LDI1ODA2LDI1OTM0LDI2MTEyLDI2MTMzLDI2MTcxLDI2MTIxLDI2MTU4LDI2MTQyLDI2MTQ4LDI2MjEzLDI2MTk5LDI2MjAxLDY0MDE4LDI2MjI3LDI2MjY1LDI2MjcyLDI2MjkwLDI2MzAzLDI2MzYyLDI2MzgyLDYzNzg1LDI2NDcwLDI2NTU1LDI2NzA2LDI2''@;'; put 'put ''NTYwLDI2NjI1LDI2NjkyLDI2ODMxLDY0MDE5LDI2OTg0LDY0MDIwLDI3MDMyLDI3MTA2LDI3MTg0LDI3MjQzLDI3MjA2LDI3MjUxLDI3MjYyLDI3MzYyLDI3MzY0LDI3NjA2LDI3NzExLDI3NzQwLDI3NzgyLDI3NzU5LDI3ODY2LDI3OTA4LDI4MDM5LDI4MDE1LDI4MDU0LDI4MDc2LDI4MTEx''@;'; put 'put ''LDI4MTUyLDI4MTQ2LDI4MTU2LDI4MjE3LDI4MjUyLDI4MTk5LDI4MjIwLDI4MzUxLDI4NTUyLDI4NTk3LDI4NjYxLDI4Njc3LDI4Njc5LDI4NzEyLDI4ODA1LDI4ODQzLDI4OTQzLDI4OTMyLDI5MDIwLDI4OTk4LDI4OTk5LDY0MDIxLDI5MTIxLDI5MTgyLDI5MzYxLDI5Mzc0LDI5NDc2LDY0''@;'; put 'put ''MDIyLDI5NTU5LDI5NjI5LDI5NjQxLDI5NjU0LDI5NjY3LDI5NjUwLDI5NzAzLDI5Njg1LDI5NzM0LDI5NzM4LDI5NzM3LDI5NzQyLDI5Nzk0LDI5ODMzLDI5ODU1LDI5OTUzLDMwMDYzLDMwMzM4LDMwMzY0LDMwMzY2LDMwMzYzLDMwMzc0LDY0MDIzLDMwNTM0LDIxMTY3LDMwNzUzLDMwNzk4''@;'; put 'put ''LDMwODIwLDMwODQyLDMxMDI0LDY0MDI0LDY0MDI1LDY0MDI2LDMxMTI0LDY0MDI3LDMxMTMxLDMxNDQxLDMxNDYzLDY0MDI4LDMxNDY3LDMxNjQ2LDY0MDI5LDMyMDcyLDMyMDkyLDMyMTgzLDMyMTYwLDMyMjE0LDMyMzM4LDMyNTgzLDMyNjczLDY0MDMwLDMzNTM3LDMzNjM0LDMzNjYzLDMz''@;'; put 'put ''NzM1LDMzNzgyLDMzODY0LDMzOTcyLDM0MTMxLDM0MTM3LDM0MTU1LDY0MDMxLDM0MjI0LDY0MDMyLDY0MDMzLDM0ODIzLDM1MDYxLDM1MzQ2LDM1MzgzLDM1NDQ5LDM1NDk1LDM1NTE4LDM1NTUxLDY0MDM0LDM1NTc0LDM1NjY3LDM1NzExLDM2MDgwLDM2MDg0LDM2MTE0LDM2MjE0LDY0MDM1''@;'; put 'put ''LDM2NTU5LDY0MDM2LDY0MDM3LDM2OTY3LDM3MDg2LDY0MDM4LDM3MTQxLDM3MTU5LDM3MzM4LDM3MzM1LDM3MzQyLDM3MzU3LDM3MzU4LDM3MzQ4LDM3MzQ5LDM3MzgyLDM3MzkyLDM3Mzg2LDM3NDM0LDM3NDQwLDM3NDM2LDM3NDU0LDM3NDY1LDM3NDU3LDM3NDMzLDM3NDc5LDM3NTQzLDM3''@;'; put 'put ''NDk1LDM3NDk2LDM3NjA3LDM3NTkxLDM3NTkzLDM3NTg0LDY0MDM5LDM3NTg5LDM3NjAwLDM3NTg3LDM3NjY5LDM3NjY1LDM3NjI3LDY0MDQwLDM3NjYyLDM3NjMxLDM3NjYxLDM3NjM0LDM3NzQ0LDM3NzE5LDM3Nzk2LDM3ODMwLDM3ODU0LDM3ODgwLDM3OTM3LDM3OTU3LDM3OTYwLDM4Mjkw''@;'; put 'put ''LDYzOTY0LDY0MDQxLDM4NTU3LDM4NTc1LDM4NzA3LDM4NzE1LDM4NzIzLDM4NzMzLDM4NzM1LDM4NzM3LDM4NzQxLDM4OTk5LDM5MDEzLDY0MDQyLDY0MDQzLDM5MjA3LDY0MDQ0LDM5MzI2LDM5NTAyLDM5NjQxLDM5NjQ0LDM5Nzk3LDM5Nzk0LDM5ODIzLDM5ODU3LDM5ODY3LDM5OTM2LDQw''@;'; put 'put ''MzA0LDQwMjk5LDY0MDQ1LDQwNDczLDQwNjU3LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0samlzMDIxMjpbbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsNzI4LDcxMSwxODQsNzI5LDczMywxNzUsNzMx''@;'; put 'put ''LDczMCw2NTM3NCw5MDAsOTAxLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwxNjEsMTY2LDE5MSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; put 'put ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTg2LDE3MCwxNjksMTc0LDg0ODIsMTY0LDg0NzAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; 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 ''LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDkwMiw5MDQsOTA1LDkwNiw5MzgsbnVsbCw5MDgsbnVsbCw5MTAsOTM5LG51bGwsOTExLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsOTQwLDk0MSw5NDIsOTQzLDk3MCw5MTIsOTcyLDk2Miw5NzMsOTcxLDk0NCw5NzQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDEwMjYsMTAyNywxMDI4LDEwMjksMTAzMCwxMDMxLDEwMzIsMTAzMywxMDM0LDEwMzUsMTAzNiwxMDM4LDEwMzksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDExMDYsMTEwNywxMTA4LDExMDks''@;'; put 'put ''MTExMCwxMTExLDExMTIsMTExMywxMTE0LDExMTUsMTExNiwxMTE4LDExMTksbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCxudWxsLG51bGwsbnVsbCwxOTgsMjcyLG51bGwsMjk0LG51bGwsMzA2LG51bGwsMzIxLDMxOSxudWxsLDMzMCwyMTYsMzM4LG51bGwsMzU4LDIyMixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLDIzMCwyNzMsMjQwLDI5NSwzMDUsMzA3LDMxMiwzMjIsMzIwLDMyOSwzMzEsMjQ4LDMzOSwyMjMsMzU5LDI1NCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51''@;'; put 'put ''bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE5MywxOTIsMTk2LDE5NCwyNTgsNDYxLDI1NiwyNjAs''@;'; put 'put ''MTk3LDE5NSwyNjIsMjY0LDI2OCwxOTksMjY2LDI3MCwyMDEsMjAwLDIwMywyMDIsMjgyLDI3OCwyNzQsMjgwLG51bGwsMjg0LDI4NiwyOTAsMjg4LDI5MiwyMDUsMjA0LDIwNywyMDYsNDYzLDMwNCwyOTgsMzAyLDI5NiwzMDgsMzEwLDMxMywzMTcsMzE1LDMyMywzMjcsMzI1LDIwOSwyMTEs''@;'; put 'put ''MjEwLDIxNCwyMTIsNDY1LDMzNiwzMzIsMjEzLDM0MCwzNDQsMzQyLDM0NiwzNDgsMzUyLDM1MCwzNTYsMzU0LDIxOCwyMTcsMjIwLDIxOSwzNjQsNDY3LDM2OCwzNjIsMzcwLDM2NiwzNjAsNDcxLDQ3NSw0NzMsNDY5LDM3MiwyMjEsMzc2LDM3NCwzNzcsMzgxLDM3OSxudWxsLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLDIyNSwyMjQsMjI4LDIyNiwyNTksNDYyLDI1NywyNjEsMjI5LDIyNywyNjMsMjY1LDI2OSwyMzEsMjY3LDI3MSwyMzMsMjMyLDIzNSwyMzQsMjgzLDI3OSwyNzUsMjgxLDUwMSwyODUsMjg3LG51bGwsMjg5LDI5MywyMzcsMjM2LDIzOSwyMzgsNDY0LG51''@;'; put 'put ''bGwsMjk5LDMwMywyOTcsMzA5LDMxMSwzMTQsMzE4LDMxNiwzMjQsMzI4LDMyNiwyNDEsMjQzLDI0MiwyNDYsMjQ0LDQ2NiwzMzcsMzMzLDI0NSwzNDEsMzQ1LDM0MywzNDcsMzQ5LDM1MywzNTEsMzU3LDM1NSwyNTAsMjQ5LDI1MiwyNTEsMzY1LDQ2OCwzNjksMzYzLDM3MSwzNjcsMzYxLDQ3''@;'; put 'put ''Miw0NzYsNDc0LDQ3MCwzNzMsMjUzLDI1NSwzNzUsMzc4LDM4MiwzODAsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVs''@;'; 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 ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLDE5OTcwLDE5OTcyLDE5OTczLDE5OTgw''@;'; put 'put ''LDE5OTg2LDE5OTk5LDIwMDAzLDIwMDA0LDIwMDA4LDIwMDExLDIwMDE0LDIwMDE1LDIwMDE2LDIwMDIxLDIwMDMyLDIwMDMzLDIwMDM2LDIwMDM5LDIwMDQ5LDIwMDU4LDIwMDYwLDIwMDY3LDIwMDcyLDIwMDczLDIwMDg0LDIwMDg1LDIwMDg5LDIwMDk1LDIwMTA5LDIwMTE4LDIwMTE5LDIw''@;'; put 'put ''MTI1LDIwMTQzLDIwMTUzLDIwMTYzLDIwMTc2LDIwMTg2LDIwMTg3LDIwMTkyLDIwMTkzLDIwMTk0LDIwMjAwLDIwMjA3LDIwMjA5LDIwMjExLDIwMjEzLDIwMjIxLDIwMjIyLDIwMjIzLDIwMjI0LDIwMjI2LDIwMjI3LDIwMjMyLDIwMjM1LDIwMjM2LDIwMjQyLDIwMjQ1LDIwMjQ2LDIwMjQ3''@;'; put 'put ''LDIwMjQ5LDIwMjcwLDIwMjczLDIwMzIwLDIwMjc1LDIwMjc3LDIwMjc5LDIwMjgxLDIwMjgzLDIwMjg2LDIwMjg4LDIwMjkwLDIwMjk2LDIwMjk3LDIwMjk5LDIwMzAwLDIwMzA2LDIwMzA4LDIwMzEwLDIwMzEyLDIwMzE5LDIwMzIzLDIwMzMwLDIwMzMyLDIwMzM0LDIwMzM3LDIwMzQzLDIw''@;'; put 'put ''MzQ0LDIwMzQ1LDIwMzQ2LDIwMzQ5LDIwMzUwLDIwMzUzLDIwMzU0LDIwMzU2LDIwMzU3LDIwMzYxLDIwMzYyLDIwMzY0LDIwMzY2LDIwMzY4LDIwMzcwLDIwMzcxLDIwMzcyLDIwMzc1LDIwMzc3LDIwMzc4LDIwMzgyLDIwMzgzLDIwNDAyLDIwNDA3LDIwNDA5LDIwNDExLDIwNDEyLDIwNDEz''@;'; put 'put ''LDIwNDE0LDIwNDE2LDIwNDE3LDIwNDIxLDIwNDIyLDIwNDI0LDIwNDI1LDIwNDI3LDIwNDI4LDIwNDI5LDIwNDMxLDIwNDM0LDIwNDQ0LDIwNDQ4LDIwNDUwLDIwNDY0LDIwNDY2LDIwNDc2LDIwNDc3LDIwNDc5LDIwNDgwLDIwNDgxLDIwNDg0LDIwNDg3LDIwNDkwLDIwNDkyLDIwNDk0LDIw''@;'; put 'put ''NDk2LDIwNDk5LDIwNTAzLDIwNTA0LDIwNTA3LDIwNTA4LDIwNTA5LDIwNTEwLDIwNTE0LDIwNTE5LDIwNTI2LDIwNTI4LDIwNTMwLDIwNTMxLDIwNTMzLDIwNTQ0LDIwNTQ1LDIwNTQ2LDIwNTQ5LDIwNTUwLDIwNTU0LDIwNTU2LDIwNTU4LDIwNTYxLDIwNTYyLDIwNTYzLDIwNTY3LDIwNTY5''@;'; put 'put ''LDIwNTc1LDIwNTc2LDIwNTc4LDIwNTc5LDIwNTgyLDIwNTgzLDIwNTg2LDIwNTg5LDIwNTkyLDIwNTkzLDIwNTM5LDIwNjA5LDIwNjExLDIwNjEyLDIwNjE0LDIwNjE4LDIwNjIyLDIwNjIzLDIwNjI0LDIwNjI2LDIwNjI3LDIwNjI4LDIwNjMwLDIwNjM1LDIwNjM2LDIwNjM4LDIwNjM5LDIw''@;'; put 'put ''NjQwLDIwNjQxLDIwNjQyLDIwNjUwLDIwNjU1LDIwNjU2LDIwNjY1LDIwNjY2LDIwNjY5LDIwNjcyLDIwNjc1LDIwNjc2LDIwNjc5LDIwNjg0LDIwNjg2LDIwNjg4LDIwNjkxLDIwNjkyLDIwNjk2LDIwNzAwLDIwNzAxLDIwNzAzLDIwNzA2LDIwNzA4LDIwNzEwLDIwNzEyLDIwNzEzLDIwNzE5''@;'; put 'put ''LDIwNzIxLDIwNzI2LDIwNzMwLDIwNzM0LDIwNzM5LDIwNzQyLDIwNzQzLDIwNzQ0LDIwNzQ3LDIwNzQ4LDIwNzQ5LDIwNzUwLDIwNzIyLDIwNzUyLDIwNzU5LDIwNzYxLDIwNzYzLDIwNzY0LDIwNzY1LDIwNzY2LDIwNzcxLDIwNzc1LDIwNzc2LDIwNzgwLDIwNzgxLDIwNzgzLDIwNzg1LDIw''@;'; put 'put ''Nzg3LDIwNzg4LDIwNzg5LDIwNzkyLDIwNzkzLDIwODAyLDIwODEwLDIwODE1LDIwODE5LDIwODIxLDIwODIzLDIwODI0LDIwODMxLDIwODM2LDIwODM4LDIwODYyLDIwODY3LDIwODY4LDIwODc1LDIwODc4LDIwODg4LDIwODkzLDIwODk3LDIwODk5LDIwOTA5LDIwOTIwLDIwOTIyLDIwOTI0''@;'; put 'put ''LDIwOTI2LDIwOTI3LDIwOTMwLDIwOTM2LDIwOTQzLDIwOTQ1LDIwOTQ2LDIwOTQ3LDIwOTQ5LDIwOTUyLDIwOTU4LDIwOTYyLDIwOTY1LDIwOTc0LDIwOTc4LDIwOTc5LDIwOTgwLDIwOTgzLDIwOTkzLDIwOTk0LDIwOTk3LDIxMDEwLDIxMDExLDIxMDEzLDIxMDE0LDIxMDE2LDIxMDI2LDIx''@;'; put 'put ''MDMyLDIxMDQxLDIxMDQyLDIxMDQ1LDIxMDUyLDIxMDYxLDIxMDY1LDIxMDc3LDIxMDc5LDIxMDgwLDIxMDgyLDIxMDg0LDIxMDg3LDIxMDg4LDIxMDg5LDIxMDk0LDIxMTAyLDIxMTExLDIxMTEyLDIxMTEzLDIxMTIwLDIxMTIyLDIxMTI1LDIxMTMwLDIxMTMyLDIxMTM5LDIxMTQxLDIxMTQy''@;'; put 'put ''LDIxMTQzLDIxMTQ0LDIxMTQ2LDIxMTQ4LDIxMTU2LDIxMTU3LDIxMTU4LDIxMTU5LDIxMTY3LDIxMTY4LDIxMTc0LDIxMTc1LDIxMTc2LDIxMTc4LDIxMTc5LDIxMTgxLDIxMTg0LDIxMTg4LDIxMTkwLDIxMTkyLDIxMTk2LDIxMTk5LDIxMjAxLDIxMjA0LDIxMjA2LDIxMjExLDIxMjEyLDIx''@;'; put 'put ''MjE3LDIxMjIxLDIxMjI0LDIxMjI1LDIxMjI2LDIxMjI4LDIxMjMyLDIxMjMzLDIxMjM2LDIxMjM4LDIxMjM5LDIxMjQ4LDIxMjUxLDIxMjU4LDIxMjU5LDIxMjYwLDIxMjY1LDIxMjY3LDIxMjcyLDIxMjc1LDIxMjc2LDIxMjc4LDIxMjc5LDIxMjg1LDIxMjg3LDIxMjg4LDIxMjg5LDIxMjkx''@;'; put 'put ''LDIxMjkyLDIxMjkzLDIxMjk2LDIxMjk4LDIxMzAxLDIxMzA4LDIxMzA5LDIxMzEwLDIxMzE0LDIxMzI0LDIxMzIzLDIxMzM3LDIxMzM5LDIxMzQ1LDIxMzQ3LDIxMzQ5LDIxMzU2LDIxMzU3LDIxMzYyLDIxMzY5LDIxMzc0LDIxMzc5LDIxMzgzLDIxMzg0LDIxMzkwLDIxMzk1LDIxMzk2LDIx''@;'; put 'put ''NDAxLDIxNDA1LDIxNDA5LDIxNDEyLDIxNDE4LDIxNDE5LDIxNDIzLDIxNDI2LDIxNDI4LDIxNDI5LDIxNDMxLDIxNDMyLDIxNDM0LDIxNDM3LDIxNDQwLDIxNDQ1LDIxNDU1LDIxNDU4LDIxNDU5LDIxNDYxLDIxNDY2LDIxNDY5LDIxNDcwLDIxNDcyLDIxNDc4LDIxNDc5LDIxNDkzLDIxNTA2''@;'; put 'put ''LDIxNTIzLDIxNTMwLDIxNTM3LDIxNTQzLDIxNTQ0LDIxNTQ2LDIxNTUxLDIxNTUzLDIxNTU2LDIxNTU3LDIxNTcxLDIxNTcyLDIxNTc1LDIxNTgxLDIxNTgzLDIxNTk4LDIxNjAyLDIxNjA0LDIxNjA2LDIxNjA3LDIxNjA5LDIxNjExLDIxNjEzLDIxNjE0LDIxNjIwLDIxNjMxLDIxNjMzLDIx''@;'; put 'put ''NjM1LDIxNjM3LDIxNjQwLDIxNjQxLDIxNjQ1LDIxNjQ5LDIxNjUzLDIxNjU0LDIxNjYwLDIxNjYzLDIxNjY1LDIxNjcwLDIxNjcxLDIxNjczLDIxNjc0LDIxNjc3LDIxNjc4LDIxNjgxLDIxNjg3LDIxNjg5LDIxNjkwLDIxNjkxLDIxNjk1LDIxNzAyLDIxNzA2LDIxNzA5LDIxNzEwLDIxNzI4''@;'; put 'put ''LDIxNzM4LDIxNzQwLDIxNzQzLDIxNzUwLDIxNzU2LDIxNzU4LDIxNzU5LDIxNzYwLDIxNzYxLDIxNzY1LDIxNzY4LDIxNzY5LDIxNzcyLDIxNzczLDIxNzc0LDIxNzgxLDIxODAyLDIxODAzLDIxODEwLDIxODEzLDIxODE0LDIxODE5LDIxODIwLDIxODIxLDIxODI1LDIxODMxLDIxODMzLDIx''@;'; put 'put ''ODM0LDIxODM3LDIxODQwLDIxODQxLDIxODQ4LDIxODUwLDIxODUxLDIxODU0LDIxODU2LDIxODU3LDIxODYwLDIxODYyLDIxODg3LDIxODg5LDIxODkwLDIxODk0LDIxODk2LDIxOTAyLDIxOTAzLDIxOTA1LDIxOTA2LDIxOTA3LDIxOTA4LDIxOTExLDIxOTIzLDIxOTI0LDIxOTMzLDIxOTM4''@;'; put 'put ''LDIxOTUxLDIxOTUzLDIxOTU1LDIxOTU4LDIxOTYxLDIxOTYzLDIxOTY0LDIxOTY2LDIxOTY5LDIxOTcwLDIxOTcxLDIxOTc1LDIxOTc2LDIxOTc5LDIxOTgyLDIxOTg2LDIxOTkzLDIyMDA2LDIyMDE1LDIyMDIxLDIyMDI0LDIyMDI2LDIyMDI5LDIyMDMwLDIyMDMxLDIyMDMyLDIyMDMzLDIy''@;'; put 'put ''MDM0LDIyMDQxLDIyMDYwLDIyMDY0LDIyMDY3LDIyMDY5LDIyMDcxLDIyMDczLDIyMDc1LDIyMDc2LDIyMDc3LDIyMDc5LDIyMDgwLDIyMDgxLDIyMDgzLDIyMDg0LDIyMDg2LDIyMDg5LDIyMDkxLDIyMDkzLDIyMDk1LDIyMTAwLDIyMTEwLDIyMTEyLDIyMTEzLDIyMTE0LDIyMTE1LDIyMTE4''@;'; put 'put ''LDIyMTIxLDIyMTI1LDIyMTI3LDIyMTI5LDIyMTMwLDIyMTMzLDIyMTQ4LDIyMTQ5LDIyMTUyLDIyMTU1LDIyMTU2LDIyMTY1LDIyMTY5LDIyMTcwLDIyMTczLDIyMTc0LDIyMTc1LDIyMTgyLDIyMTgzLDIyMTg0LDIyMTg1LDIyMTg3LDIyMTg4LDIyMTg5LDIyMTkzLDIyMTk1LDIyMTk5LDIy''@;'; put 'put ''MjA2LDIyMjEzLDIyMjE3LDIyMjE4LDIyMjE5LDIyMjIzLDIyMjI0LDIyMjIwLDIyMjIxLDIyMjMzLDIyMjM2LDIyMjM3LDIyMjM5LDIyMjQxLDIyMjQ0LDIyMjQ1LDIyMjQ2LDIyMjQ3LDIyMjQ4LDIyMjU3LDIyMjUxLDIyMjUzLDIyMjYyLDIyMjYzLDIyMjczLDIyMjc0LDIyMjc5LDIyMjgy''@;'; put 'put ''LDIyMjg0LDIyMjg5LDIyMjkzLDIyMjk4LDIyMjk5LDIyMzAxLDIyMzA0LDIyMzA2LDIyMzA3LDIyMzA4LDIyMzA5LDIyMzEzLDIyMzE0LDIyMzE2LDIyMzE4LDIyMzE5LDIyMzIzLDIyMzI0LDIyMzMzLDIyMzM0LDIyMzM1LDIyMzQxLDIyMzQyLDIyMzQ4LDIyMzQ5LDIyMzU0LDIyMzcwLDIy''@;'; put 'put ''MzczLDIyMzc1LDIyMzc2LDIyMzc5LDIyMzgxLDIyMzgyLDIyMzgzLDIyMzg0LDIyMzg1LDIyMzg3LDIyMzg4LDIyMzg5LDIyMzkxLDIyMzkzLDIyMzk0LDIyMzk1LDIyMzk2LDIyMzk4LDIyNDAxLDIyNDAzLDIyNDEyLDIyNDIwLDIyNDIzLDIyNDI1LDIyNDI2LDIyNDI4LDIyNDI5LDIyNDMw''@;'; put 'put ''LDIyNDMxLDIyNDMzLDIyNDIxLDIyNDM5LDIyNDQwLDIyNDQxLDIyNDQ0LDIyNDU2LDIyNDYxLDIyNDcxLDIyNDcyLDIyNDc2LDIyNDc5LDIyNDg1LDIyNDkzLDIyNDk0LDIyNTAwLDIyNTAyLDIyNTAzLDIyNTA1LDIyNTA5LDIyNTEyLDIyNTE3LDIyNTE4LDIyNTIwLDIyNTI1LDIyNTI2LDIy''@;'; put 'put ''NTI3LDIyNTMxLDIyNTMyLDIyNTM2LDIyNTM3LDIyNDk3LDIyNTQwLDIyNTQxLDIyNTU1LDIyNTU4LDIyNTU5LDIyNTYwLDIyNTY2LDIyNTY3LDIyNTczLDIyNTc4LDIyNTg1LDIyNTkxLDIyNjAxLDIyNjA0LDIyNjA1LDIyNjA3LDIyNjA4LDIyNjEzLDIyNjIzLDIyNjI1LDIyNjI4LDIyNjMx''@;'; put 'put ''LDIyNjMyLDIyNjQ4LDIyNjUyLDIyNjU1LDIyNjU2LDIyNjU3LDIyNjYzLDIyNjY0LDIyNjY1LDIyNjY2LDIyNjY4LDIyNjY5LDIyNjcxLDIyNjcyLDIyNjc2LDIyNjc4LDIyNjg1LDIyNjg4LDIyNjg5LDIyNjkwLDIyNjk0LDIyNjk3LDIyNzA1LDIyNzA2LDIyNzI0LDIyNzE2LDIyNzIyLDIy''@;'; put 'put ''NzI4LDIyNzMzLDIyNzM0LDIyNzM2LDIyNzM4LDIyNzQwLDIyNzQyLDIyNzQ2LDIyNzQ5LDIyNzUzLDIyNzU0LDIyNzYxLDIyNzcxLDIyNzg5LDIyNzkwLDIyNzk1LDIyNzk2LDIyODAyLDIyODAzLDIyODA0LDM0MzY5LDIyODEzLDIyODE3LDIyODE5LDIyODIwLDIyODI0LDIyODMxLDIyODMy''@;'; put 'put ''LDIyODM1LDIyODM3LDIyODM4LDIyODQ3LDIyODUxLDIyODU0LDIyODY2LDIyODY3LDIyODczLDIyODc1LDIyODc3LDIyODc4LDIyODc5LDIyODgxLDIyODgzLDIyODkxLDIyODkzLDIyODk1LDIyODk4LDIyOTAxLDIyOTAyLDIyOTA1LDIyOTA3LDIyOTA4LDIyOTIzLDIyOTI0LDIyOTI2LDIy''@;'; put 'put ''OTMwLDIyOTMzLDIyOTM1LDIyOTQzLDIyOTQ4LDIyOTUxLDIyOTU3LDIyOTU4LDIyOTU5LDIyOTYwLDIyOTYzLDIyOTY3LDIyOTcwLDIyOTcyLDIyOTc3LDIyOTc5LDIyOTgwLDIyOTg0LDIyOTg2LDIyOTg5LDIyOTk0LDIzMDA1LDIzMDA2LDIzMDA3LDIzMDExLDIzMDEyLDIzMDE1LDIzMDIy''@;'; put 'put ''LDIzMDIzLDIzMDI1LDIzMDI2LDIzMDI4LDIzMDMxLDIzMDQwLDIzMDQ0LDIzMDUyLDIzMDUzLDIzMDU0LDIzMDU4LDIzMDU5LDIzMDcwLDIzMDc1LDIzMDc2LDIzMDc5LDIzMDgwLDIzMDgyLDIzMDg1LDIzMDg4LDIzMTA4LDIzMTA5LDIzMTExLDIzMTEyLDIzMTE2LDIzMTIwLDIzMTI1LDIz''@;'; put 'put ''MTM0LDIzMTM5LDIzMTQxLDIzMTQzLDIzMTQ5LDIzMTU5LDIzMTYyLDIzMTYzLDIzMTY2LDIzMTc5LDIzMTg0LDIzMTg3LDIzMTkwLDIzMTkzLDIzMTk2LDIzMTk4LDIzMTk5LDIzMjAwLDIzMjAyLDIzMjA3LDIzMjEyLDIzMjE3LDIzMjE4LDIzMjE5LDIzMjIxLDIzMjI0LDIzMjI2LDIzMjI3''@;'; put 'put ''LDIzMjMxLDIzMjM2LDIzMjM4LDIzMjQwLDIzMjQ3LDIzMjU4LDIzMjYwLDIzMjY0LDIzMjY5LDIzMjc0LDIzMjc4LDIzMjg1LDIzMjg2LDIzMjkzLDIzMjk2LDIzMjk3LDIzMzA0LDIzMzE5LDIzMzQ4LDIzMzIxLDIzMzIzLDIzMzI1LDIzMzI5LDIzMzMzLDIzMzQxLDIzMzUyLDIzMzYxLDIz''@;'; put 'put ''MzcxLDIzMzcyLDIzMzc4LDIzMzgyLDIzMzkwLDIzNDAwLDIzNDA2LDIzNDA3LDIzNDIwLDIzNDIxLDIzNDIyLDIzNDIzLDIzNDI1LDIzNDI4LDIzNDMwLDIzNDM0LDIzNDM4LDIzNDQwLDIzNDQxLDIzNDQzLDIzNDQ0LDIzNDQ2LDIzNDY0LDIzNDY1LDIzNDY4LDIzNDY5LDIzNDcxLDIzNDcz''@;'; put 'put ''LDIzNDc0LDIzNDc5LDIzNDgyLDIzNDg0LDIzNDg4LDIzNDg5LDIzNTAxLDIzNTAzLDIzNTEwLDIzNTExLDIzNTEyLDIzNTEzLDIzNTE0LDIzNTIwLDIzNTM1LDIzNTM3LDIzNTQwLDIzNTQ5LDIzNTY0LDIzNTc1LDIzNTgyLDIzNTgzLDIzNTg3LDIzNTkwLDIzNTkzLDIzNTk1LDIzNTk2LDIz''@;'; put 'put ''NTk4LDIzNjAwLDIzNjAyLDIzNjA1LDIzNjA2LDIzNjQxLDIzNjQyLDIzNjQ0LDIzNjUwLDIzNjUxLDIzNjU1LDIzNjU2LDIzNjU3LDIzNjYxLDIzNjY0LDIzNjY4LDIzNjY5LDIzNjc0LDIzNjc1LDIzNjc2LDIzNjc3LDIzNjg3LDIzNjg4LDIzNjkwLDIzNjk1LDIzNjk4LDIzNzA5LDIzNzEx''@;'; put 'put ''LDIzNzEyLDIzNzE0LDIzNzE1LDIzNzE4LDIzNzIyLDIzNzMwLDIzNzMyLDIzNzMzLDIzNzM4LDIzNzUzLDIzNzU1LDIzNzYyLDIzNzczLDIzNzY3LDIzNzkwLDIzNzkzLDIzNzk0LDIzNzk2LDIzODA5LDIzODE0LDIzODIxLDIzODI2LDIzODUxLDIzODQzLDIzODQ0LDIzODQ2LDIzODQ3LDIz''@;'; put 'put ''ODU3LDIzODYwLDIzODY1LDIzODY5LDIzODcxLDIzODc0LDIzODc1LDIzODc4LDIzODgwLDIzODkzLDIzODg5LDIzODk3LDIzODgyLDIzOTAzLDIzOTA0LDIzOTA1LDIzOTA2LDIzOTA4LDIzOTE0LDIzOTE3LDIzOTIwLDIzOTI5LDIzOTMwLDIzOTM0LDIzOTM1LDIzOTM3LDIzOTM5LDIzOTQ0''@;'; put 'put ''LDIzOTQ2LDIzOTU0LDIzOTU1LDIzOTU2LDIzOTU3LDIzOTYxLDIzOTYzLDIzOTY3LDIzOTY4LDIzOTc1LDIzOTc5LDIzOTg0LDIzOTg4LDIzOTkyLDIzOTkzLDI0MDAzLDI0MDA3LDI0MDExLDI0MDE2LDI0MDE0LDI0MDI0LDI0MDI1LDI0MDMyLDI0MDM2LDI0MDQxLDI0MDU2LDI0MDU3LDI0''@;'; put 'put ''MDY0LDI0MDcxLDI0MDc3LDI0MDgyLDI0MDg0LDI0MDg1LDI0MDg4LDI0MDk1LDI0MDk2LDI0MTEwLDI0MTA0LDI0MTE0LDI0MTE3LDI0MTI2LDI0MTM5LDI0MTQ0LDI0MTM3LDI0MTQ1LDI0MTUwLDI0MTUyLDI0MTU1LDI0MTU2LDI0MTU4LDI0MTY4LDI0MTcwLDI0MTcxLDI0MTcyLDI0MTcz''@;'; put 'put ''LDI0MTc0LDI0MTc2LDI0MTkyLDI0MjAzLDI0MjA2LDI0MjI2LDI0MjI4LDI0MjI5LDI0MjMyLDI0MjM0LDI0MjM2LDI0MjQxLDI0MjQzLDI0MjUzLDI0MjU0LDI0MjU1LDI0MjYyLDI0MjY4LDI0MjY3LDI0MjcwLDI0MjczLDI0Mjc0LDI0Mjc2LDI0Mjc3LDI0Mjg0LDI0Mjg2LDI0MjkzLDI0''@;'; put 'put ''Mjk5LDI0MzIyLDI0MzI2LDI0MzI3LDI0MzI4LDI0MzM0LDI0MzQ1LDI0MzQ4LDI0MzQ5LDI0MzUzLDI0MzU0LDI0MzU1LDI0MzU2LDI0MzYwLDI0MzYzLDI0MzY0LDI0MzY2LDI0MzY4LDI0MzcyLDI0Mzc0LDI0Mzc5LDI0MzgxLDI0MzgzLDI0Mzg0LDI0Mzg4LDI0Mzg5LDI0MzkxLDI0Mzk3''@;'; put 'put ''LDI0NDAwLDI0NDA0LDI0NDA4LDI0NDExLDI0NDE2LDI0NDE5LDI0NDIwLDI0NDIzLDI0NDMxLDI0NDM0LDI0NDM2LDI0NDM3LDI0NDQwLDI0NDQyLDI0NDQ1LDI0NDQ2LDI0NDU3LDI0NDYxLDI0NDYzLDI0NDcwLDI0NDc2LDI0NDc3LDI0NDgyLDI0NDg3LDI0NDkxLDI0NDg0LDI0NDkyLDI0''@;'; put 'put ''NDk1LDI0NDk2LDI0NDk3LDI0NTA0LDI0NTE2LDI0NTE5LDI0NTIwLDI0NTIxLDI0NTIzLDI0NTI4LDI0NTI5LDI0NTMwLDI0NTMxLDI0NTMyLDI0NTQyLDI0NTQ1LDI0NTQ2LDI0NTUyLDI0NTUzLDI0NTU0LDI0NTU2LDI0NTU3LDI0NTU4LDI0NTU5LDI0NTYyLDI0NTYzLDI0NTY2LDI0NTcw''@;'; put 'put ''LDI0NTcyLDI0NTgzLDI0NTg2LDI0NTg5LDI0NTk1LDI0NTk2LDI0NTk5LDI0NjAwLDI0NjAyLDI0NjA3LDI0NjEyLDI0NjIxLDI0NjI3LDI0NjI5LDI0NjQwLDI0NjQ3LDI0NjQ4LDI0NjQ5LDI0NjUyLDI0NjU3LDI0NjYwLDI0NjYyLDI0NjYzLDI0NjY5LDI0NjczLDI0Njc5LDI0Njg5LDI0''@;'; put 'put ''NzAyLDI0NzAzLDI0NzA2LDI0NzEwLDI0NzEyLDI0NzE0LDI0NzE4LDI0NzIxLDI0NzIzLDI0NzI1LDI0NzI4LDI0NzMzLDI0NzM0LDI0NzM4LDI0NzQwLDI0NzQxLDI0NzQ0LDI0NzUyLDI0NzUzLDI0NzU5LDI0NzYzLDI0NzY2LDI0NzcwLDI0NzcyLDI0Nzc2LDI0Nzc3LDI0Nzc4LDI0Nzc5''@;'; put 'put ''LDI0NzgyLDI0NzgzLDI0Nzg4LDI0Nzg5LDI0NzkzLDI0Nzk1LDI0Nzk3LDI0Nzk4LDI0ODAyLDI0ODA1LDI0ODE4LDI0ODIxLDI0ODI0LDI0ODI4LDI0ODI5LDI0ODM0LDI0ODM5LDI0ODQyLDI0ODQ0LDI0ODQ4LDI0ODQ5LDI0ODUwLDI0ODUxLDI0ODUyLDI0ODU0LDI0ODU1LDI0ODU3LDI0''@;'; put 'put ''ODYwLDI0ODYyLDI0ODY2LDI0ODc0LDI0ODc1LDI0ODgwLDI0ODgxLDI0ODg1LDI0ODg2LDI0ODg3LDI0ODg5LDI0ODk3LDI0OTAxLDI0OTAyLDI0OTA1LDI0OTI2LDI0OTI4LDI0OTQwLDI0OTQ2LDI0OTUyLDI0OTU1LDI0OTU2LDI0OTU5LDI0OTYwLDI0OTYxLDI0OTYzLDI0OTY0LDI0OTcx''@;'; put 'put ''LDI0OTczLDI0OTc4LDI0OTc5LDI0OTgzLDI0OTg0LDI0OTg4LDI0OTg5LDI0OTkxLDI0OTkyLDI0OTk3LDI1ZTMsMjUwMDIsMjUwMDUsMjUwMTYsMjUwMTcsMjUwMjAsMjUwMjQsMjUwMjUsMjUwMjYsMjUwMzgsMjUwMzksMjUwNDUsMjUwNTIsMjUwNTMsMjUwNTQsMjUwNTUsMjUwNTcsMjUw''@;'; put 'put ''NTgsMjUwNjMsMjUwNjUsMjUwNjEsMjUwNjgsMjUwNjksMjUwNzEsMjUwODksMjUwOTEsMjUwOTIsMjUwOTUsMjUxMDcsMjUxMDksMjUxMTYsMjUxMjAsMjUxMjIsMjUxMjMsMjUxMjcsMjUxMjksMjUxMzEsMjUxNDUsMjUxNDksMjUxNTQsMjUxNTUsMjUxNTYsMjUxNTgsMjUxNjQsMjUxNjgs''@;'; put 'put ''MjUxNjksMjUxNzAsMjUxNzIsMjUxNzQsMjUxNzgsMjUxODAsMjUxODgsMjUxOTcsMjUxOTksMjUyMDMsMjUyMTAsMjUyMTMsMjUyMjksMjUyMzAsMjUyMzEsMjUyMzIsMjUyNTQsMjUyNTYsMjUyNjcsMjUyNzAsMjUyNzEsMjUyNzQsMjUyNzgsMjUyNzksMjUyODQsMjUyOTQsMjUzMDEsMjUz''@;'; put 'put ''MDIsMjUzMDYsMjUzMjIsMjUzMzAsMjUzMzIsMjUzNDAsMjUzNDEsMjUzNDcsMjUzNDgsMjUzNTQsMjUzNTUsMjUzNTcsMjUzNjAsMjUzNjMsMjUzNjYsMjUzNjgsMjUzODUsMjUzODYsMjUzODksMjUzOTcsMjUzOTgsMjU0MDEsMjU0MDQsMjU0MDksMjU0MTAsMjU0MTEsMjU0MTIsMjU0MTQs''@;'; put 'put ''MjU0MTgsMjU0MTksMjU0MjIsMjU0MjYsMjU0MjcsMjU0MjgsMjU0MzIsMjU0MzUsMjU0NDUsMjU0NDYsMjU0NTIsMjU0NTMsMjU0NTcsMjU0NjAsMjU0NjEsMjU0NjQsMjU0NjgsMjU0NjksMjU0NzEsMjU0NzQsMjU0NzYsMjU0NzksMjU0ODIsMjU0ODgsMjU0OTIsMjU0OTMsMjU0OTcsMjU0''@;'; put 'put ''OTgsMjU1MDIsMjU1MDgsMjU1MTAsMjU1MTcsMjU1MTgsMjU1MTksMjU1MzMsMjU1MzcsMjU1NDEsMjU1NDQsMjU1NTAsMjU1NTMsMjU1NTUsMjU1NTYsMjU1NTcsMjU1NjQsMjU1NjgsMjU1NzMsMjU1NzgsMjU1ODAsMjU1ODYsMjU1ODcsMjU1ODksMjU1OTIsMjU1OTMsMjU2MDksMjU2MTAs''@;'; put 'put ''MjU2MTYsMjU2MTgsMjU2MjAsMjU2MjQsMjU2MzAsMjU2MzIsMjU2MzQsMjU2MzYsMjU2MzcsMjU2NDEsMjU2NDIsMjU2NDcsMjU2NDgsMjU2NTMsMjU2NjEsMjU2NjMsMjU2NzUsMjU2NzksMjU2ODEsMjU2ODIsMjU2ODMsMjU2ODQsMjU2OTAsMjU2OTEsMjU2OTIsMjU2OTMsMjU2OTUsMjU2''@;'; put 'put ''OTYsMjU2OTcsMjU2OTksMjU3MDksMjU3MTUsMjU3MTYsMjU3MjMsMjU3MjUsMjU3MzMsMjU3MzUsMjU3NDMsMjU3NDQsMjU3NDUsMjU3NTIsMjU3NTMsMjU3NTUsMjU3NTcsMjU3NTksMjU3NjEsMjU3NjMsMjU3NjYsMjU3NjgsMjU3NzIsMjU3NzksMjU3ODksMjU3OTAsMjU3OTEsMjU3OTYs''@;'; put 'put ''MjU4MDEsMjU4MDIsMjU4MDMsMjU4MDQsMjU4MDYsMjU4MDgsMjU4MDksMjU4MTMsMjU4MTUsMjU4MjgsMjU4MjksMjU4MzMsMjU4MzQsMjU4MzcsMjU4NDAsMjU4NDUsMjU4NDcsMjU4NTEsMjU4NTUsMjU4NTcsMjU4NjAsMjU4NjQsMjU4NjUsMjU4NjYsMjU4NzEsMjU4NzUsMjU4NzYsMjU4''@;'; put 'put ''NzgsMjU4ODEsMjU4ODMsMjU4ODYsMjU4ODcsMjU4OTAsMjU4OTQsMjU4OTcsMjU5MDIsMjU5MDUsMjU5MTQsMjU5MTYsMjU5MTcsMjU5MjMsMjU5MjcsMjU5MjksMjU5MzYsMjU5MzgsMjU5NDAsMjU5NTEsMjU5NTIsMjU5NTksMjU5NjMsMjU5NzgsMjU5ODEsMjU5ODUsMjU5ODksMjU5OTQs''@;'; put 'put ''MjYwMDIsMjYwMDUsMjYwMDgsMjYwMTMsMjYwMTYsMjYwMTksMjYwMjIsMjYwMzAsMjYwMzQsMjYwMzUsMjYwMzYsMjYwNDcsMjYwNTAsMjYwNTYsMjYwNTcsMjYwNjIsMjYwNjQsMjYwNjgsMjYwNzAsMjYwNzIsMjYwNzksMjYwOTYsMjYwOTgsMjYxMDAsMjYxMDEsMjYxMDUsMjYxMTAsMjYx''@;'; put 'put ''MTEsMjYxMTIsMjYxMTYsMjYxMjAsMjYxMjEsMjYxMjUsMjYxMjksMjYxMzAsMjYxMzMsMjYxMzQsMjYxNDEsMjYxNDIsMjYxNDUsMjYxNDYsMjYxNDcsMjYxNDgsMjYxNTAsMjYxNTMsMjYxNTQsMjYxNTUsMjYxNTYsMjYxNTgsMjYxNjAsMjYxNjEsMjYxNjMsMjYxNjksMjYxNjcsMjYxNzYs''@;'; put 'put ''MjYxODEsMjYxODIsMjYxODYsMjYxODgsMjYxOTMsMjYxOTAsMjYxOTksMjYyMDAsMjYyMDEsMjYyMDMsMjYyMDQsMjYyMDgsMjYyMDksMjYzNjMsMjYyMTgsMjYyMTksMjYyMjAsMjYyMzgsMjYyMjcsMjYyMjksMjYyMzksMjYyMzEsMjYyMzIsMjYyMzMsMjYyMzUsMjYyNDAsMjYyMzYsMjYy''@;'; put 'put ''NTEsMjYyNTIsMjYyNTMsMjYyNTYsMjYyNTgsMjYyNjUsMjYyNjYsMjYyNjcsMjYyNjgsMjYyNzEsMjYyNzIsMjYyNzYsMjYyODUsMjYyODksMjYyOTAsMjYyOTMsMjYyOTksMjYzMDMsMjYzMDQsMjYzMDYsMjYzMDcsMjYzMTIsMjYzMTYsMjYzMTgsMjYzMTksMjYzMjQsMjYzMzEsMjYzMzUs''@;'; put 'put ''MjYzNDQsMjYzNDcsMjYzNDgsMjYzNTAsMjYzNjIsMjYzNzMsMjYzNzUsMjYzODIsMjYzODcsMjYzOTMsMjYzOTYsMjY0MDAsMjY0MDIsMjY0MTksMjY0MzAsMjY0MzcsMjY0MzksMjY0NDAsMjY0NDQsMjY0NTIsMjY0NTMsMjY0NjEsMjY0NzAsMjY0NzYsMjY0NzgsMjY0ODQsMjY0ODYsMjY0''@;'; put 'put ''OTEsMjY0OTcsMjY1MDAsMjY1MTAsMjY1MTEsMjY1MTMsMjY1MTUsMjY1MTgsMjY1MjAsMjY1MjEsMjY1MjMsMjY1NDQsMjY1NDUsMjY1NDYsMjY1NDksMjY1NTUsMjY1NTYsMjY1NTcsMjY2MTcsMjY1NjAsMjY1NjIsMjY1NjMsMjY1NjUsMjY1NjgsMjY1NjksMjY1NzgsMjY1ODMsMjY1ODUs''@;'; put 'put ''MjY1ODgsMjY1OTMsMjY1OTgsMjY2MDgsMjY2MTAsMjY2MTQsMjY2MTUsMjY3MDYsMjY2NDQsMjY2NDksMjY2NTMsMjY2NTUsMjY2NjQsMjY2NjMsMjY2NjgsMjY2NjksMjY2NzEsMjY2NzIsMjY2NzMsMjY2NzUsMjY2ODMsMjY2ODcsMjY2OTIsMjY2OTMsMjY2OTgsMjY3MDAsMjY3MDksMjY3''@;'; put 'put ''MTEsMjY3MTIsMjY3MTUsMjY3MzEsMjY3MzQsMjY3MzUsMjY3MzYsMjY3MzcsMjY3MzgsMjY3NDEsMjY3NDUsMjY3NDYsMjY3NDcsMjY3NDgsMjY3NTQsMjY3NTYsMjY3NTgsMjY3NjAsMjY3NzQsMjY3NzYsMjY3NzgsMjY3ODAsMjY3ODUsMjY3ODcsMjY3ODksMjY3OTMsMjY3OTQsMjY3OTgs''@;'; put 'put ''MjY4MDIsMjY4MTEsMjY4MjEsMjY4MjQsMjY4MjgsMjY4MzEsMjY4MzIsMjY4MzMsMjY4MzUsMjY4MzgsMjY4NDEsMjY4NDQsMjY4NDUsMjY4NTMsMjY4NTYsMjY4NTgsMjY4NTksMjY4NjAsMjY4NjEsMjY4NjQsMjY4NjUsMjY4NjksMjY4NzAsMjY4NzUsMjY4NzYsMjY4NzcsMjY4ODYsMjY4''@;'; put 'put ''ODksMjY4OTAsMjY4OTYsMjY4OTcsMjY4OTksMjY5MDIsMjY5MDMsMjY5MjksMjY5MzEsMjY5MzMsMjY5MzYsMjY5MzksMjY5NDYsMjY5NDksMjY5NTMsMjY5NTgsMjY5NjcsMjY5NzEsMjY5NzksMjY5ODAsMjY5ODEsMjY5ODIsMjY5ODQsMjY5ODUsMjY5ODgsMjY5OTIsMjY5OTMsMjY5OTQs''@;'; put 'put ''MjcwMDIsMjcwMDMsMjcwMDcsMjcwMDgsMjcwMjEsMjcwMjYsMjcwMzAsMjcwMzIsMjcwNDEsMjcwNDUsMjcwNDYsMjcwNDgsMjcwNTEsMjcwNTMsMjcwNTUsMjcwNjMsMjcwNjQsMjcwNjYsMjcwNjgsMjcwNzcsMjcwODAsMjcwODksMjcwOTQsMjcwOTUsMjcxMDYsMjcxMDksMjcxMTgsMjcx''@;'; put 'put ''MTksMjcxMjEsMjcxMjMsMjcxMjUsMjcxMzQsMjcxMzYsMjcxMzcsMjcxMzksMjcxNTEsMjcxNTMsMjcxNTcsMjcxNjIsMjcxNjUsMjcxNjgsMjcxNzIsMjcxNzYsMjcxODQsMjcxODYsMjcxODgsMjcxOTEsMjcxOTUsMjcxOTgsMjcxOTksMjcyMDUsMjcyMDYsMjcyMDksMjcyMTAsMjcyMTQs''@;'; put 'put ''MjcyMTYsMjcyMTcsMjcyMTgsMjcyMjEsMjcyMjIsMjcyMjcsMjcyMzYsMjcyMzksMjcyNDIsMjcyNDksMjcyNTEsMjcyNjIsMjcyNjUsMjcyNjcsMjcyNzAsMjcyNzEsMjcyNzMsMjcyNzUsMjcyODEsMjcyOTEsMjcyOTMsMjcyOTQsMjcyOTUsMjczMDEsMjczMDcsMjczMTEsMjczMTIsMjcz''@;'; put 'put ''MTMsMjczMTYsMjczMjUsMjczMjYsMjczMjcsMjczMzQsMjczMzcsMjczMzYsMjczNDAsMjczNDQsMjczNDgsMjczNDksMjczNTAsMjczNTYsMjczNTcsMjczNjQsMjczNjcsMjczNzIsMjczNzYsMjczNzcsMjczNzgsMjczODgsMjczODksMjczOTQsMjczOTUsMjczOTgsMjczOTksMjc0MDEs''@;'; put 'put ''Mjc0MDcsMjc0MDgsMjc0MDksMjc0MTUsMjc0MTksMjc0MjIsMjc0MjgsMjc0MzIsMjc0MzUsMjc0MzYsMjc0MzksMjc0NDUsMjc0NDYsMjc0NTEsMjc0NTUsMjc0NjIsMjc0NjYsMjc0NjksMjc0NzQsMjc0NzgsMjc0ODAsMjc0ODUsMjc0ODgsMjc0OTUsMjc0OTksMjc1MDIsMjc1MDQsMjc1''@;'; put 'put ''MDksMjc1MTcsMjc1MTgsMjc1MjIsMjc1MjUsMjc1NDMsMjc1NDcsMjc1NTEsMjc1NTIsMjc1NTQsMjc1NTUsMjc1NjAsMjc1NjEsMjc1NjQsMjc1NjUsMjc1NjYsMjc1NjgsMjc1NzYsMjc1NzcsMjc1ODEsMjc1ODIsMjc1ODcsMjc1ODgsMjc1OTMsMjc1OTYsMjc2MDYsMjc2MTAsMjc2MTcs''@;'; put 'put ''Mjc2MTksMjc2MjIsMjc2MjMsMjc2MzAsMjc2MzMsMjc2MzksMjc2NDEsMjc2NDcsMjc2NTAsMjc2NTIsMjc2NTMsMjc2NTcsMjc2NjEsMjc2NjIsMjc2NjQsMjc2NjYsMjc2NzMsMjc2NzksMjc2ODYsMjc2ODcsMjc2ODgsMjc2OTIsMjc2OTQsMjc2OTksMjc3MDEsMjc3MDIsMjc3MDYsMjc3''@;'; put 'put ''MDcsMjc3MTEsMjc3MjIsMjc3MjMsMjc3MjUsMjc3MjcsMjc3MzAsMjc3MzIsMjc3MzcsMjc3MzksMjc3NDAsMjc3NTUsMjc3NTcsMjc3NTksMjc3NjQsMjc3NjYsMjc3NjgsMjc3NjksMjc3NzEsMjc3ODEsMjc3ODIsMjc3ODMsMjc3ODUsMjc3OTYsMjc3OTcsMjc3OTksMjc4MDAsMjc4MDQs''@;'; put 'put ''Mjc4MDcsMjc4MjQsMjc4MjYsMjc4MjgsMjc4NDIsMjc4NDYsMjc4NTMsMjc4NTUsMjc4NTYsMjc4NTcsMjc4NTgsMjc4NjAsMjc4NjIsMjc4NjYsMjc4NjgsMjc4NzIsMjc4NzksMjc4ODEsMjc4ODMsMjc4ODQsMjc4ODYsMjc4OTAsMjc4OTIsMjc5MDgsMjc5MTEsMjc5MTQsMjc5MTgsMjc5''@;'; put 'put ''MTksMjc5MjEsMjc5MjMsMjc5MzAsMjc5NDIsMjc5NDMsMjc5NDQsMjc3NTEsMjc5NTAsMjc5NTEsMjc5NTMsMjc5NjEsMjc5NjQsMjc5NjcsMjc5OTEsMjc5OTgsMjc5OTksMjgwMDEsMjgwMDUsMjgwMDcsMjgwMTUsMjgwMTYsMjgwMjgsMjgwMzQsMjgwMzksMjgwNDksMjgwNTAsMjgwNTIs''@;'; put 'put ''MjgwNTQsMjgwNTUsMjgwNTYsMjgwNzQsMjgwNzYsMjgwODQsMjgwODcsMjgwODksMjgwOTMsMjgwOTUsMjgxMDAsMjgxMDQsMjgxMDYsMjgxMTAsMjgxMTEsMjgxMTgsMjgxMjMsMjgxMjUsMjgxMjcsMjgxMjgsMjgxMzAsMjgxMzMsMjgxMzcsMjgxNDMsMjgxNDQsMjgxNDgsMjgxNTAsMjgx''@;'; put 'put ''NTYsMjgxNjAsMjgxNjQsMjgxOTAsMjgxOTQsMjgxOTksMjgyMTAsMjgyMTQsMjgyMTcsMjgyMTksMjgyMjAsMjgyMjgsMjgyMjksMjgyMzIsMjgyMzMsMjgyMzUsMjgyMzksMjgyNDEsMjgyNDIsMjgyNDMsMjgyNDQsMjgyNDcsMjgyNTIsMjgyNTMsMjgyNTQsMjgyNTgsMjgyNTksMjgyNjQs''@;'; put 'put ''MjgyNzUsMjgyODMsMjgyODUsMjgzMDEsMjgzMDcsMjgzMTMsMjgzMjAsMjgzMjcsMjgzMzMsMjgzMzQsMjgzMzcsMjgzMzksMjgzNDcsMjgzNTEsMjgzNTIsMjgzNTMsMjgzNTUsMjgzNTksMjgzNjAsMjgzNjIsMjgzNjUsMjgzNjYsMjgzNjcsMjgzOTUsMjgzOTcsMjgzOTgsMjg0MDksMjg0''@;'; put 'put ''MTEsMjg0MTMsMjg0MjAsMjg0MjQsMjg0MjYsMjg0MjgsMjg0MjksMjg0MzgsMjg0NDAsMjg0NDIsMjg0NDMsMjg0NTQsMjg0NTcsMjg0NTgsMjg0NjMsMjg0NjQsMjg0NjcsMjg0NzAsMjg0NzUsMjg0NzYsMjg0NjEsMjg0OTUsMjg0OTcsMjg0OTgsMjg0OTksMjg1MDMsMjg1MDUsMjg1MDYs''@;'; put 'put ''Mjg1MDksMjg1MTAsMjg1MTMsMjg1MTQsMjg1MjAsMjg1MjQsMjg1NDEsMjg1NDIsMjg1NDcsMjg1NTEsMjg1NTIsMjg1NTUsMjg1NTYsMjg1NTcsMjg1NjAsMjg1NjIsMjg1NjMsMjg1NjQsMjg1NjYsMjg1NzAsMjg1NzUsMjg1NzYsMjg1ODEsMjg1ODIsMjg1ODMsMjg1ODQsMjg1OTAsMjg1''@;'; put 'put ''OTEsMjg1OTIsMjg1OTcsMjg1OTgsMjg2MDQsMjg2MTMsMjg2MTUsMjg2MTYsMjg2MTgsMjg2MzQsMjg2MzgsMjg2NDgsMjg2NDksMjg2NTYsMjg2NjEsMjg2NjUsMjg2NjgsMjg2NjksMjg2NzIsMjg2NzcsMjg2NzgsMjg2NzksMjg2ODUsMjg2OTUsMjg3MDQsMjg3MDcsMjg3MTksMjg3MjQs''@;'; put 'put ''Mjg3MjcsMjg3MjksMjg3MzIsMjg3MzksMjg3NDAsMjg3NDQsMjg3NDUsMjg3NDYsMjg3NDcsMjg3NTYsMjg3NTcsMjg3NjUsMjg3NjYsMjg3NTAsMjg3NzIsMjg3NzMsMjg3ODAsMjg3ODIsMjg3ODksMjg3OTAsMjg3OTgsMjg4MDEsMjg4MDUsMjg4MDYsMjg4MjAsMjg4MjEsMjg4MjIsMjg4''@;'; put 'put ''MjMsMjg4MjQsMjg4MjcsMjg4MzYsMjg4NDMsMjg4NDgsMjg4NDksMjg4NTIsMjg4NTUsMjg4NzQsMjg4ODEsMjg4ODMsMjg4ODQsMjg4ODUsMjg4ODYsMjg4ODgsMjg4OTIsMjg5MDAsMjg5MjIsMjg5MzEsMjg5MzIsMjg5MzMsMjg5MzQsMjg5MzUsMjg5MzksMjg5NDAsMjg5NDMsMjg5NTgs''@;'; put 'put ''Mjg5NjAsMjg5NzEsMjg5NzMsMjg5NzUsMjg5NzYsMjg5NzcsMjg5ODQsMjg5OTMsMjg5OTcsMjg5OTgsMjg5OTksMjkwMDIsMjkwMDMsMjkwMDgsMjkwMTAsMjkwMTUsMjkwMTgsMjkwMjAsMjkwMjIsMjkwMjQsMjkwMzIsMjkwNDksMjkwNTYsMjkwNjEsMjkwNjMsMjkwNjgsMjkwNzQsMjkw''@;'; put 'put ''ODIsMjkwODMsMjkwODgsMjkwOTAsMjkxMDMsMjkxMDQsMjkxMDYsMjkxMDcsMjkxMTQsMjkxMTksMjkxMjAsMjkxMjEsMjkxMjQsMjkxMzEsMjkxMzIsMjkxMzksMjkxNDIsMjkxNDUsMjkxNDYsMjkxNDgsMjkxNzYsMjkxODIsMjkxODQsMjkxOTEsMjkxOTIsMjkxOTMsMjkyMDMsMjkyMDcs''@;'; put 'put ''MjkyMTAsMjkyMTMsMjkyMTUsMjkyMjAsMjkyMjcsMjkyMzEsMjkyMzYsMjkyNDAsMjkyNDEsMjkyNDksMjkyNTAsMjkyNTEsMjkyNTMsMjkyNjIsMjkyNjMsMjkyNjQsMjkyNjcsMjkyNjksMjkyNzAsMjkyNzQsMjkyNzYsMjkyNzgsMjkyODAsMjkyODMsMjkyODgsMjkyOTEsMjkyOTQsMjky''@;'; put 'put ''OTUsMjkyOTcsMjkzMDMsMjkzMDQsMjkzMDcsMjkzMDgsMjkzMTEsMjkzMTYsMjkzMjEsMjkzMjUsMjkzMjYsMjkzMzEsMjkzMzksMjkzNTIsMjkzNTcsMjkzNTgsMjkzNjEsMjkzNjQsMjkzNzQsMjkzNzcsMjkzODMsMjkzODUsMjkzODgsMjkzOTcsMjkzOTgsMjk0MDAsMjk0MDcsMjk0MTMs''@;'; put 'put ''Mjk0MjcsMjk0MjgsMjk0MzQsMjk0MzUsMjk0MzgsMjk0NDIsMjk0NDQsMjk0NDUsMjk0NDcsMjk0NTEsMjk0NTMsMjk0NTgsMjk0NTksMjk0NjQsMjk0NjUsMjk0NzAsMjk0NzQsMjk0NzYsMjk0NzksMjk0ODAsMjk0ODQsMjk0ODksMjk0OTAsMjk0OTMsMjk0OTgsMjk0OTksMjk1MDEsMjk1''@;'; put 'put ''MDcsMjk1MTcsMjk1MjAsMjk1MjIsMjk1MjYsMjk1MjgsMjk1MzMsMjk1MzQsMjk1MzUsMjk1MzYsMjk1NDIsMjk1NDMsMjk1NDUsMjk1NDcsMjk1NDgsMjk1NTAsMjk1NTEsMjk1NTMsMjk1NTksMjk1NjEsMjk1NjQsMjk1NjgsMjk1NjksMjk1NzEsMjk1NzMsMjk1NzQsMjk1ODIsMjk1ODQs''@;'; put 'put ''Mjk1ODcsMjk1ODksMjk1OTEsMjk1OTIsMjk1OTYsMjk1OTgsMjk1OTksMjk2MDAsMjk2MDIsMjk2MDUsMjk2MDYsMjk2MTAsMjk2MTEsMjk2MTMsMjk2MjEsMjk2MjMsMjk2MjUsMjk2MjgsMjk2MjksMjk2MzEsMjk2MzcsMjk2MzgsMjk2NDEsMjk2NDMsMjk2NDQsMjk2NDcsMjk2NTAsMjk2''@;'; put 'put ''NTEsMjk2NTQsMjk2NTcsMjk2NjEsMjk2NjUsMjk2NjcsMjk2NzAsMjk2NzEsMjk2NzMsMjk2ODQsMjk2ODUsMjk2ODcsMjk2ODksMjk2OTAsMjk2OTEsMjk2OTMsMjk2OTUsMjk2OTYsMjk2OTcsMjk3MDAsMjk3MDMsMjk3MDYsMjk3MTMsMjk3MjIsMjk3MjMsMjk3MzIsMjk3MzQsMjk3MzYs''@;'; put 'put ''Mjk3MzcsMjk3MzgsMjk3MzksMjk3NDAsMjk3NDEsMjk3NDIsMjk3NDMsMjk3NDQsMjk3NDUsMjk3NTMsMjk3NjAsMjk3NjMsMjk3NjQsMjk3NjYsMjk3NjcsMjk3NzEsMjk3NzMsMjk3NzcsMjk3NzgsMjk3ODMsMjk3ODksMjk3OTQsMjk3OTgsMjk3OTksMjk4MDAsMjk4MDMsMjk4MDUsMjk4''@;'; put 'put ''MDYsMjk4MDksMjk4MTAsMjk4MjQsMjk4MjUsMjk4MjksMjk4MzAsMjk4MzEsMjk4MzMsMjk4MzksMjk4NDAsMjk4NDEsMjk4NDIsMjk4NDgsMjk4NDksMjk4NTAsMjk4NTIsMjk4NTUsMjk4NTYsMjk4NTcsMjk4NTksMjk4NjIsMjk4NjQsMjk4NjUsMjk4NjYsMjk4NjcsMjk4NzAsMjk4NzEs''@;'; put 'put ''Mjk4NzMsMjk4NzQsMjk4NzcsMjk4ODEsMjk4ODMsMjk4ODcsMjk4OTYsMjk4OTcsMjk5MDAsMjk5MDQsMjk5MDcsMjk5MTIsMjk5MTQsMjk5MTUsMjk5MTgsMjk5MTksMjk5MjQsMjk5MjgsMjk5MzAsMjk5MzEsMjk5MzUsMjk5NDAsMjk5NDYsMjk5NDcsMjk5NDgsMjk5NTEsMjk5NTgsMjk5''@;'; put 'put ''NzAsMjk5NzQsMjk5NzUsMjk5ODQsMjk5ODUsMjk5ODgsMjk5OTEsMjk5OTMsMjk5OTQsMjk5OTksMzAwMDYsMzAwMDksMzAwMTMsMzAwMTQsMzAwMTUsMzAwMTYsMzAwMTksMzAwMjMsMzAwMjQsMzAwMzAsMzAwMzIsMzAwMzQsMzAwMzksMzAwNDYsMzAwNDcsMzAwNDksMzAwNjMsMzAwNjUs''@;'; put 'put ''MzAwNzMsMzAwNzQsMzAwNzUsMzAwNzYsMzAwNzcsMzAwNzgsMzAwODEsMzAwODUsMzAwOTYsMzAwOTgsMzAwOTksMzAxMDEsMzAxMDUsMzAxMDgsMzAxMTQsMzAxMTYsMzAxMzIsMzAxMzgsMzAxNDMsMzAxNDQsMzAxNDUsMzAxNDgsMzAxNTAsMzAxNTYsMzAxNTgsMzAxNTksMzAxNjcsMzAx''@;'; put 'put ''NzIsMzAxNzUsMzAxNzYsMzAxNzcsMzAxODAsMzAxODMsMzAxODgsMzAxOTAsMzAxOTEsMzAxOTMsMzAyMDEsMzAyMDgsMzAyMTAsMzAyMTEsMzAyMTIsMzAyMTUsMzAyMTYsMzAyMTgsMzAyMjAsMzAyMjMsMzAyMjYsMzAyMjcsMzAyMjksMzAyMzAsMzAyMzMsMzAyMzUsMzAyMzYsMzAyMzcs''@;'; put 'put ''MzAyMzgsMzAyNDMsMzAyNDUsMzAyNDYsMzAyNDksMzAyNTMsMzAyNTgsMzAyNTksMzAyNjEsMzAyNjQsMzAyNjUsMzAyNjYsMzAyNjgsMzAyODIsMzAyNzIsMzAyNzMsMzAyNzUsMzAyNzYsMzAyNzcsMzAyODEsMzAyODMsMzAyOTMsMzAyOTcsMzAzMDMsMzAzMDgsMzAzMDksMzAzMTcsMzAz''@;'; put 'put ''MTgsMzAzMTksMzAzMjEsMzAzMjQsMzAzMzcsMzAzNDEsMzAzNDgsMzAzNDksMzAzNTcsMzAzNjMsMzAzNjQsMzAzNjUsMzAzNjcsMzAzNjgsMzAzNzAsMzAzNzEsMzAzNzIsMzAzNzMsMzAzNzQsMzAzNzUsMzAzNzYsMzAzNzgsMzAzODEsMzAzOTcsMzA0MDEsMzA0MDUsMzA0MDksMzA0MTEs''@;'; put 'put ''MzA0MTIsMzA0MTQsMzA0MjAsMzA0MjUsMzA0MzIsMzA0MzgsMzA0NDAsMzA0NDQsMzA0NDgsMzA0NDksMzA0NTQsMzA0NTcsMzA0NjAsMzA0NjQsMzA0NzAsMzA0NzQsMzA0NzgsMzA0ODIsMzA0ODQsMzA0ODUsMzA0ODcsMzA0ODksMzA0OTAsMzA0OTIsMzA0OTgsMzA1MDQsMzA1MDksMzA1''@;'; put 'put ''MTAsMzA1MTEsMzA1MTYsMzA1MTcsMzA1MTgsMzA1MjEsMzA1MjUsMzA1MjYsMzA1MzAsMzA1MzMsMzA1MzQsMzA1MzgsMzA1NDEsMzA1NDIsMzA1NDMsMzA1NDYsMzA1NTAsMzA1NTEsMzA1NTYsMzA1NTgsMzA1NTksMzA1NjAsMzA1NjIsMzA1NjQsMzA1NjcsMzA1NzAsMzA1NzIsMzA1NzYs''@;'; put 'put ''MzA1NzgsMzA1NzksMzA1ODAsMzA1ODYsMzA1ODksMzA1OTIsMzA1OTYsMzA2MDQsMzA2MDUsMzA2MTIsMzA2MTMsMzA2MTQsMzA2MTgsMzA2MjMsMzA2MjYsMzA2MzEsMzA2MzQsMzA2MzgsMzA2MzksMzA2NDEsMzA2NDUsMzA2NTQsMzA2NTksMzA2NjUsMzA2NzMsMzA2NzQsMzA2NzcsMzA2''@;'; put 'put ''ODEsMzA2ODYsMzA2ODcsMzA2ODgsMzA2OTIsMzA2OTQsMzA2OTgsMzA3MDAsMzA3MDQsMzA3MDUsMzA3MDgsMzA3MTIsMzA3MTUsMzA3MjUsMzA3MjYsMzA3MjksMzA3MzMsMzA3MzQsMzA3MzcsMzA3NDksMzA3NTMsMzA3NTQsMzA3NTUsMzA3NjUsMzA3NjYsMzA3NjgsMzA3NzMsMzA3NzUs''@;'; put 'put ''MzA3ODcsMzA3ODgsMzA3OTEsMzA3OTIsMzA3OTYsMzA3OTgsMzA4MDIsMzA4MTIsMzA4MTQsMzA4MTYsMzA4MTcsMzA4MTksMzA4MjAsMzA4MjQsMzA4MjYsMzA4MzAsMzA4NDIsMzA4NDYsMzA4NTgsMzA4NjMsMzA4NjgsMzA4NzIsMzA4ODEsMzA4NzcsMzA4NzgsMzA4NzksMzA4ODQsMzA4''@;'; put 'put ''ODgsMzA4OTIsMzA4OTMsMzA4OTYsMzA4OTcsMzA4OTgsMzA4OTksMzA5MDcsMzA5MDksMzA5MTEsMzA5MTksMzA5MjAsMzA5MjEsMzA5MjQsMzA5MjYsMzA5MzAsMzA5MzEsMzA5MzMsMzA5MzQsMzA5NDgsMzA5MzksMzA5NDMsMzA5NDQsMzA5NDUsMzA5NTAsMzA5NTQsMzA5NjIsMzA5NjMs''@;'; put 'put ''MzA5NzYsMzA5NjYsMzA5NjcsMzA5NzAsMzA5NzEsMzA5NzUsMzA5ODIsMzA5ODgsMzA5OTIsMzEwMDIsMzEwMDQsMzEwMDYsMzEwMDcsMzEwMDgsMzEwMTMsMzEwMTUsMzEwMTcsMzEwMjEsMzEwMjUsMzEwMjgsMzEwMjksMzEwMzUsMzEwMzcsMzEwMzksMzEwNDQsMzEwNDUsMzEwNDYsMzEw''@;'; put 'put ''NTAsMzEwNTEsMzEwNTUsMzEwNTcsMzEwNjAsMzEwNjQsMzEwNjcsMzEwNjgsMzEwNzksMzEwODEsMzEwODMsMzEwOTAsMzEwOTcsMzEwOTksMzExMDAsMzExMDIsMzExMTUsMzExMTYsMzExMjEsMzExMjMsMzExMjQsMzExMjUsMzExMjYsMzExMjgsMzExMzEsMzExMzIsMzExMzcsMzExNDQs''@;'; put 'put ''MzExNDUsMzExNDcsMzExNTEsMzExNTMsMzExNTYsMzExNjAsMzExNjMsMzExNzAsMzExNzIsMzExNzUsMzExNzYsMzExNzgsMzExODMsMzExODgsMzExOTAsMzExOTQsMzExOTcsMzExOTgsMzEyMDAsMzEyMDIsMzEyMDUsMzEyMTAsMzEyMTEsMzEyMTMsMzEyMTcsMzEyMjQsMzEyMjgsMzEy''@;'; put 'put ''MzQsMzEyMzUsMzEyMzksMzEyNDEsMzEyNDIsMzEyNDQsMzEyNDksMzEyNTMsMzEyNTksMzEyNjIsMzEyNjUsMzEyNzEsMzEyNzUsMzEyNzcsMzEyNzksMzEyODAsMzEyODQsMzEyODUsMzEyODgsMzEyODksMzEyOTAsMzEzMDAsMzEzMDEsMzEzMDMsMzEzMDQsMzEzMDgsMzEzMTcsMzEzMTgs''@;'; put 'put ''MzEzMjEsMzEzMjQsMzEzMjUsMzEzMjcsMzEzMjgsMzEzMzMsMzEzMzUsMzEzMzgsMzEzNDEsMzEzNDksMzEzNTIsMzEzNTgsMzEzNjAsMzEzNjIsMzEzNjUsMzEzNjYsMzEzNzAsMzEzNzEsMzEzNzYsMzEzNzcsMzEzODAsMzEzOTAsMzEzOTIsMzEzOTUsMzE0MDQsMzE0MTEsMzE0MTMsMzE0''@;'; put 'put ''MTcsMzE0MTksMzE0MjAsMzE0MzAsMzE0MzMsMzE0MzYsMzE0MzgsMzE0NDEsMzE0NTEsMzE0NjQsMzE0NjUsMzE0NjcsMzE0NjgsMzE0NzMsMzE0NzYsMzE0ODMsMzE0ODUsMzE0ODYsMzE0OTUsMzE1MDgsMzE1MTksMzE1MjMsMzE1MjcsMzE1MjksMzE1MzAsMzE1MzEsMzE1MzMsMzE1MzQs''@;'; put 'put ''MzE1MzUsMzE1MzYsMzE1MzcsMzE1NDAsMzE1NDksMzE1NTEsMzE1NTIsMzE1NTMsMzE1NTksMzE1NjYsMzE1NzMsMzE1ODQsMzE1ODgsMzE1OTAsMzE1OTMsMzE1OTQsMzE1OTcsMzE1OTksMzE2MDIsMzE2MDMsMzE2MDcsMzE2MjAsMzE2MjUsMzE2MzAsMzE2MzIsMzE2MzMsMzE2MzgsMzE2''@;'; put 'put ''NDMsMzE2NDYsMzE2NDgsMzE2NTMsMzE2NjAsMzE2NjMsMzE2NjQsMzE2NjYsMzE2NjksMzE2NzAsMzE2NzQsMzE2NzUsMzE2NzYsMzE2NzcsMzE2ODIsMzE2ODUsMzE2ODgsMzE2OTAsMzE3MDAsMzE3MDIsMzE3MDMsMzE3MDUsMzE3MDYsMzE3MDcsMzE3MjAsMzE3MjIsMzE3MzAsMzE3MzIs''@;'; put 'put ''MzE3MzMsMzE3MzYsMzE3MzcsMzE3MzgsMzE3NDAsMzE3NDIsMzE3NDUsMzE3NDYsMzE3NDcsMzE3NDgsMzE3NTAsMzE3NTMsMzE3NTUsMzE3NTYsMzE3NTgsMzE3NTksMzE3NjksMzE3NzEsMzE3NzYsMzE3ODEsMzE3ODIsMzE3ODQsMzE3ODgsMzE3OTMsMzE3OTUsMzE3OTYsMzE3OTgsMzE4''@;'; put 'put ''MDEsMzE4MDIsMzE4MTQsMzE4MTgsMzE4MjksMzE4MjUsMzE4MjYsMzE4MjcsMzE4MzMsMzE4MzQsMzE4MzUsMzE4MzYsMzE4MzcsMzE4MzgsMzE4NDEsMzE4NDMsMzE4NDcsMzE4NDksMzE4NTMsMzE4NTQsMzE4NTYsMzE4NTgsMzE4NjUsMzE4NjgsMzE4NjksMzE4NzgsMzE4NzksMzE4ODcs''@;'; put 'put ''MzE4OTIsMzE5MDIsMzE5MDQsMzE5MTAsMzE5MjAsMzE5MjYsMzE5MjcsMzE5MzAsMzE5MzEsMzE5MzIsMzE5MzUsMzE5NDAsMzE5NDMsMzE5NDQsMzE5NDUsMzE5NDksMzE5NTEsMzE5NTUsMzE5NTYsMzE5NTcsMzE5NTksMzE5NjEsMzE5NjIsMzE5NjUsMzE5NzQsMzE5NzcsMzE5NzksMzE5''@;'; put 'put ''ODksMzIwMDMsMzIwMDcsMzIwMDgsMzIwMDksMzIwMTUsMzIwMTcsMzIwMTgsMzIwMTksMzIwMjIsMzIwMjksMzIwMzAsMzIwMzUsMzIwMzgsMzIwNDIsMzIwNDUsMzIwNDksMzIwNjAsMzIwNjEsMzIwNjIsMzIwNjQsMzIwNjUsMzIwNzEsMzIwNzIsMzIwNzcsMzIwODEsMzIwODMsMzIwODcs''@;'; put 'put ''MzIwODksMzIwOTAsMzIwOTIsMzIwOTMsMzIxMDEsMzIxMDMsMzIxMDYsMzIxMTIsMzIxMjAsMzIxMjIsMzIxMjMsMzIxMjcsMzIxMjksMzIxMzAsMzIxMzEsMzIxMzMsMzIxMzQsMzIxMzYsMzIxMzksMzIxNDAsMzIxNDEsMzIxNDUsMzIxNTAsMzIxNTEsMzIxNTcsMzIxNTgsMzIxNjYsMzIx''@;'; put 'put ''NjcsMzIxNzAsMzIxNzksMzIxODIsMzIxODMsMzIxODUsMzIxOTQsMzIxOTUsMzIxOTYsMzIxOTcsMzIxOTgsMzIyMDQsMzIyMDUsMzIyMDYsMzIyMTUsMzIyMTcsMzIyNTYsMzIyMjYsMzIyMjksMzIyMzAsMzIyMzQsMzIyMzUsMzIyMzcsMzIyNDEsMzIyNDUsMzIyNDYsMzIyNDksMzIyNTAs''@;'; put 'put ''MzIyNjQsMzIyNzIsMzIyNzMsMzIyNzcsMzIyNzksMzIyODQsMzIyODUsMzIyODgsMzIyOTUsMzIyOTYsMzIzMDAsMzIzMDEsMzIzMDMsMzIzMDcsMzIzMTAsMzIzMTksMzIzMjQsMzIzMjUsMzIzMjcsMzIzMzQsMzIzMzYsMzIzMzgsMzIzNDQsMzIzNTEsMzIzNTMsMzIzNTQsMzIzNTcsMzIz''@;'; put 'put ''NjMsMzIzNjYsMzIzNjcsMzIzNzEsMzIzNzYsMzIzODIsMzIzODUsMzIzOTAsMzIzOTEsMzIzOTQsMzIzOTcsMzI0MDEsMzI0MDUsMzI0MDgsMzI0MTAsMzI0MTMsMzI0MTQsMzI1NzIsMzI1NzEsMzI1NzMsMzI1NzQsMzI1NzUsMzI1NzksMzI1ODAsMzI1ODMsMzI1OTEsMzI1OTQsMzI1OTUs''@;'; put 'put ''MzI2MDMsMzI2MDQsMzI2MDUsMzI2MDksMzI2MTEsMzI2MTIsMzI2MTMsMzI2MTQsMzI2MjEsMzI2MjUsMzI2MzcsMzI2MzgsMzI2MzksMzI2NDAsMzI2NTEsMzI2NTMsMzI2NTUsMzI2NTYsMzI2NTcsMzI2NjIsMzI2NjMsMzI2NjgsMzI2NzMsMzI2NzQsMzI2NzgsMzI2ODIsMzI2ODUsMzI2''@;'; put 'put ''OTIsMzI3MDAsMzI3MDMsMzI3MDQsMzI3MDcsMzI3MTIsMzI3MTgsMzI3MTksMzI3MzEsMzI3MzUsMzI3MzksMzI3NDEsMzI3NDQsMzI3NDgsMzI3NTAsMzI3NTEsMzI3NTQsMzI3NjIsMzI3NjUsMzI3NjYsMzI3NjcsMzI3NzUsMzI3NzYsMzI3NzgsMzI3ODEsMzI3ODIsMzI3ODMsMzI3ODUs''@;'; put 'put ''MzI3ODcsMzI3ODgsMzI3OTAsMzI3OTcsMzI3OTgsMzI3OTksMzI4MDAsMzI4MDQsMzI4MDYsMzI4MTIsMzI4MTQsMzI4MTYsMzI4MjAsMzI4MjEsMzI4MjMsMzI4MjUsMzI4MjYsMzI4MjgsMzI4MzAsMzI4MzIsMzI4MzYsMzI4NjQsMzI4NjgsMzI4NzAsMzI4NzcsMzI4ODEsMzI4ODUsMzI4''@;'; put 'put ''OTcsMzI5MDQsMzI5MTAsMzI5MjQsMzI5MjYsMzI5MzQsMzI5MzUsMzI5MzksMzI5NTIsMzI5NTMsMzI5NjgsMzI5NzMsMzI5NzUsMzI5NzgsMzI5ODAsMzI5ODEsMzI5ODMsMzI5ODQsMzI5OTIsMzMwMDUsMzMwMDYsMzMwMDgsMzMwMTAsMzMwMTEsMzMwMTQsMzMwMTcsMzMwMTgsMzMwMjIs''@;'; put 'put ''MzMwMjcsMzMwMzUsMzMwNDYsMzMwNDcsMzMwNDgsMzMwNTIsMzMwNTQsMzMwNTYsMzMwNjAsMzMwNjMsMzMwNjgsMzMwNzIsMzMwNzcsMzMwODIsMzMwODQsMzMwOTMsMzMwOTUsMzMwOTgsMzMxMDAsMzMxMDYsMzMxMTEsMzMxMjAsMzMxMjEsMzMxMjcsMzMxMjgsMzMxMjksMzMxMzMsMzMx''@;'; put 'put ''MzUsMzMxNDMsMzMxNTMsMzMxNjgsMzMxNTYsMzMxNTcsMzMxNTgsMzMxNjMsMzMxNjYsMzMxNzQsMzMxNzYsMzMxNzksMzMxODIsMzMxODYsMzMxOTgsMzMyMDIsMzMyMDQsMzMyMTEsMzMyMjcsMzMyMTksMzMyMjEsMzMyMjYsMzMyMzAsMzMyMzEsMzMyMzcsMzMyMzksMzMyNDMsMzMyNDUs''@;'; put 'put ''MzMyNDYsMzMyNDksMzMyNTIsMzMyNTksMzMyNjAsMzMyNjQsMzMyNjUsMzMyNjYsMzMyNjksMzMyNzAsMzMyNzIsMzMyNzMsMzMyNzcsMzMyNzksMzMyODAsMzMyODMsMzMyOTUsMzMyOTksMzMzMDAsMzMzMDUsMzMzMDYsMzMzMDksMzMzMTMsMzMzMTQsMzMzMjAsMzMzMzAsMzMzMzIsMzMz''@;'; put 'put ''MzgsMzMzNDcsMzMzNDgsMzMzNDksMzMzNTAsMzMzNTUsMzMzNTgsMzMzNTksMzMzNjEsMzMzNjYsMzMzNzIsMzMzNzYsMzMzNzksMzMzODMsMzMzODksMzMzOTYsMzM0MDMsMzM0MDUsMzM0MDcsMzM0MDgsMzM0MDksMzM0MTEsMzM0MTIsMzM0MTUsMzM0MTcsMzM0MTgsMzM0MjIsMzM0MjUs''@;'; put 'put ''MzM0MjgsMzM0MzAsMzM0MzIsMzM0MzQsMzM0MzUsMzM0NDAsMzM0NDEsMzM0NDMsMzM0NDQsMzM0NDcsMzM0NDgsMzM0NDksMzM0NTAsMzM0NTQsMzM0NTYsMzM0NTgsMzM0NjAsMzM0NjMsMzM0NjYsMzM0NjgsMzM0NzAsMzM0NzEsMzM0NzgsMzM0ODgsMzM0OTMsMzM0OTgsMzM1MDQsMzM1''@;'; put 'put ''MDYsMzM1MDgsMzM1MTIsMzM1MTQsMzM1MTcsMzM1MTksMzM1MjYsMzM1MjcsMzM1MzMsMzM1MzQsMzM1MzYsMzM1MzcsMzM1NDMsMzM1NDQsMzM1NDYsMzM1NDcsMzM2MjAsMzM1NjMsMzM1NjUsMzM1NjYsMzM1NjcsMzM1NjksMzM1NzAsMzM1ODAsMzM1ODEsMzM1ODIsMzM1ODQsMzM1ODcs''@;'; put 'put ''MzM1OTEsMzM1OTQsMzM1OTYsMzM1OTcsMzM2MDIsMzM2MDMsMzM2MDQsMzM2MDcsMzM2MTMsMzM2MTQsMzM2MTcsMzM2MjEsMzM2MjIsMzM2MjMsMzM2NDgsMzM2NTYsMzM2NjEsMzM2NjMsMzM2NjQsMzM2NjYsMzM2NjgsMzM2NzAsMzM2NzcsMzM2ODIsMzM2ODQsMzM2ODUsMzM2ODgsMzM2''@;'; put 'put ''ODksMzM2OTEsMzM2OTIsMzM2OTMsMzM3MDIsMzM3MDMsMzM3MDUsMzM3MDgsMzM3MjYsMzM3MjcsMzM3MjgsMzM3MzUsMzM3MzcsMzM3NDMsMzM3NDQsMzM3NDUsMzM3NDgsMzM3NTcsMzM2MTksMzM3NjgsMzM3NzAsMzM3ODIsMzM3ODQsMzM3ODUsMzM3ODgsMzM3OTMsMzM3OTgsMzM4MDIs''@;'; put 'put ''MzM4MDcsMzM4MDksMzM4MTMsMzM4MTcsMzM3MDksMzM4MzksMzM4NDksMzM4NjEsMzM4NjMsMzM4NjQsMzM4NjYsMzM4NjksMzM4NzEsMzM4NzMsMzM4NzQsMzM4NzgsMzM4ODAsMzM4ODEsMzM4ODIsMzM4ODQsMzM4ODgsMzM4OTIsMzM4OTMsMzM4OTUsMzM4OTgsMzM5MDQsMzM5MDcsMzM5''@;'; put 'put ''MDgsMzM5MTAsMzM5MTIsMzM5MTYsMzM5MTcsMzM5MjEsMzM5MjUsMzM5MzgsMzM5MzksMzM5NDEsMzM5NTAsMzM5NTgsMzM5NjAsMzM5NjEsMzM5NjIsMzM5NjcsMzM5NjksMzM5NzIsMzM5NzgsMzM5ODEsMzM5ODIsMzM5ODQsMzM5ODYsMzM5OTEsMzM5OTIsMzM5OTYsMzM5OTksMzQwMDMs''@;'; put 'put ''MzQwMTIsMzQwMjMsMzQwMjYsMzQwMzEsMzQwMzIsMzQwMzMsMzQwMzQsMzQwMzksMzQwOTgsMzQwNDIsMzQwNDMsMzQwNDUsMzQwNTAsMzQwNTEsMzQwNTUsMzQwNjAsMzQwNjIsMzQwNjQsMzQwNzYsMzQwNzgsMzQwODIsMzQwODMsMzQwODQsMzQwODUsMzQwODcsMzQwOTAsMzQwOTEsMzQw''@;'; put 'put ''OTUsMzQwOTksMzQxMDAsMzQxMDIsMzQxMTEsMzQxMTgsMzQxMjcsMzQxMjgsMzQxMjksMzQxMzAsMzQxMzEsMzQxMzQsMzQxMzcsMzQxNDAsMzQxNDEsMzQxNDIsMzQxNDMsMzQxNDQsMzQxNDUsMzQxNDYsMzQxNDgsMzQxNTUsMzQxNTksMzQxNjksMzQxNzAsMzQxNzEsMzQxNzMsMzQxNzUs''@;'; put 'put ''MzQxNzcsMzQxODEsMzQxODIsMzQxODUsMzQxODcsMzQxODgsMzQxOTEsMzQxOTUsMzQyMDAsMzQyMDUsMzQyMDcsMzQyMDgsMzQyMTAsMzQyMTMsMzQyMTUsMzQyMjgsMzQyMzAsMzQyMzEsMzQyMzIsMzQyMzYsMzQyMzcsMzQyMzgsMzQyMzksMzQyNDIsMzQyNDcsMzQyNTAsMzQyNTEsMzQy''@;'; put 'put ''NTQsMzQyMjEsMzQyNjQsMzQyNjYsMzQyNzEsMzQyNzIsMzQyNzgsMzQyODAsMzQyODUsMzQyOTEsMzQyOTQsMzQzMDAsMzQzMDMsMzQzMDQsMzQzMDgsMzQzMDksMzQzMTcsMzQzMTgsMzQzMjAsMzQzMjEsMzQzMjIsMzQzMjgsMzQzMjksMzQzMzEsMzQzMzQsMzQzMzcsMzQzNDMsMzQzNDUs''@;'; put 'put ''MzQzNTgsMzQzNjAsMzQzNjIsMzQzNjQsMzQzNjUsMzQzNjgsMzQzNzAsMzQzNzQsMzQzODYsMzQzODcsMzQzOTAsMzQzOTEsMzQzOTIsMzQzOTMsMzQzOTcsMzQ0MDAsMzQ0MDEsMzQ0MDIsMzQ0MDMsMzQ0MDQsMzQ0MDksMzQ0MTIsMzQ0MTUsMzQ0MjEsMzQ0MjIsMzQ0MjMsMzQ0MjYsMzQ0''@;'; put 'put ''NDUsMzQ0NDksMzQ0NTQsMzQ0NTYsMzQ0NTgsMzQ0NjAsMzQ0NjUsMzQ0NzAsMzQ0NzEsMzQ0NzIsMzQ0NzcsMzQ0ODEsMzQ0ODMsMzQ0ODQsMzQ0ODUsMzQ0ODcsMzQ0ODgsMzQ0ODksMzQ0OTUsMzQ0OTYsMzQ0OTcsMzQ0OTksMzQ1MDEsMzQ1MTMsMzQ1MTQsMzQ1MTcsMzQ1MTksMzQ1MjIs''@;'; put 'put ''MzQ1MjQsMzQ1MjgsMzQ1MzEsMzQ1MzMsMzQ1MzUsMzQ0NDAsMzQ1NTQsMzQ1NTYsMzQ1NTcsMzQ1NjQsMzQ1NjUsMzQ1NjcsMzQ1NzEsMzQ1NzQsMzQ1NzUsMzQ1NzYsMzQ1NzksMzQ1ODAsMzQ1ODUsMzQ1OTAsMzQ1OTEsMzQ1OTMsMzQ1OTUsMzQ2MDAsMzQ2MDYsMzQ2MDcsMzQ2MDksMzQ2''@;'; put 'put ''MTAsMzQ2MTcsMzQ2MTgsMzQ2MjAsMzQ2MjEsMzQ2MjIsMzQ2MjQsMzQ2MjcsMzQ2MjksMzQ2MzcsMzQ2NDgsMzQ2NTMsMzQ2NTcsMzQ2NjAsMzQ2NjEsMzQ2NzEsMzQ2NzMsMzQ2NzQsMzQ2ODMsMzQ2OTEsMzQ2OTIsMzQ2OTMsMzQ2OTQsMzQ2OTUsMzQ2OTYsMzQ2OTcsMzQ2OTksMzQ3MDAs''@;'; put 'put ''MzQ3MDQsMzQ3MDcsMzQ3MDksMzQ3MTEsMzQ3MTIsMzQ3MTMsMzQ3MTgsMzQ3MjAsMzQ3MjMsMzQ3MjcsMzQ3MzIsMzQ3MzMsMzQ3MzQsMzQ3MzcsMzQ3NDEsMzQ3NTAsMzQ3NTEsMzQ3NTMsMzQ3NjAsMzQ3NjEsMzQ3NjIsMzQ3NjYsMzQ3NzMsMzQ3NzQsMzQ3NzcsMzQ3NzgsMzQ3ODAsMzQ3''@;'; put 'put ''ODMsMzQ3ODYsMzQ3ODcsMzQ3ODgsMzQ3OTQsMzQ3OTUsMzQ3OTcsMzQ4MDEsMzQ4MDMsMzQ4MDgsMzQ4MTAsMzQ4MTUsMzQ4MTcsMzQ4MTksMzQ4MjIsMzQ4MjUsMzQ4MjYsMzQ4MjcsMzQ4MzIsMzQ4NDEsMzQ4MzQsMzQ4MzUsMzQ4MzYsMzQ4NDAsMzQ4NDIsMzQ4NDMsMzQ4NDQsMzQ4NDYs''@;'; put 'put ''MzQ4NDcsMzQ4NTYsMzQ4NjEsMzQ4NjIsMzQ4NjQsMzQ4NjYsMzQ4NjksMzQ4NzQsMzQ4NzYsMzQ4ODEsMzQ4ODMsMzQ4ODUsMzQ4ODgsMzQ4ODksMzQ4OTAsMzQ4OTEsMzQ4OTQsMzQ4OTcsMzQ5MDEsMzQ5MDIsMzQ5MDQsMzQ5MDYsMzQ5MDgsMzQ5MTEsMzQ5MTIsMzQ5MTYsMzQ5MjEsMzQ5''@;'; put 'put ''MjksMzQ5MzcsMzQ5MzksMzQ5NDQsMzQ5NjgsMzQ5NzAsMzQ5NzEsMzQ5NzIsMzQ5NzUsMzQ5NzYsMzQ5ODQsMzQ5ODYsMzUwMDIsMzUwMDUsMzUwMDYsMzUwMDgsMzUwMTgsMzUwMTksMzUwMjAsMzUwMjEsMzUwMjIsMzUwMjUsMzUwMjYsMzUwMjcsMzUwMzUsMzUwMzgsMzUwNDcsMzUwNTUs''@;'; put 'put ''MzUwNTYsMzUwNTcsMzUwNjEsMzUwNjMsMzUwNzMsMzUwNzgsMzUwODUsMzUwODYsMzUwODcsMzUwOTMsMzUwOTQsMzUwOTYsMzUwOTcsMzUwOTgsMzUxMDAsMzUxMDQsMzUxMTAsMzUxMTEsMzUxMTIsMzUxMjAsMzUxMjEsMzUxMjIsMzUxMjUsMzUxMjksMzUxMzAsMzUxMzQsMzUxMzYsMzUx''@;'; put 'put ''MzgsMzUxNDEsMzUxNDIsMzUxNDUsMzUxNTEsMzUxNTQsMzUxNTksMzUxNjIsMzUxNjMsMzUxNjQsMzUxNjksMzUxNzAsMzUxNzEsMzUxNzksMzUxODIsMzUxODQsMzUxODcsMzUxODksMzUxOTQsMzUxOTUsMzUxOTYsMzUxOTcsMzUyMDksMzUyMTMsMzUyMTYsMzUyMjAsMzUyMjEsMzUyMjcs''@;'; put 'put ''MzUyMjgsMzUyMzEsMzUyMzIsMzUyMzcsMzUyNDgsMzUyNTIsMzUyNTMsMzUyNTQsMzUyNTUsMzUyNjAsMzUyODQsMzUyODUsMzUyODYsMzUyODcsMzUyODgsMzUzMDEsMzUzMDUsMzUzMDcsMzUzMDksMzUzMTMsMzUzMTUsMzUzMTgsMzUzMjEsMzUzMjUsMzUzMjcsMzUzMzIsMzUzMzMsMzUz''@;'; put 'put ''MzUsMzUzNDMsMzUzNDUsMzUzNDYsMzUzNDgsMzUzNDksMzUzNTgsMzUzNjAsMzUzNjIsMzUzNjQsMzUzNjYsMzUzNzEsMzUzNzIsMzUzNzUsMzUzODEsMzUzODMsMzUzODksMzUzOTAsMzUzOTIsMzUzOTUsMzUzOTcsMzUzOTksMzU0MDEsMzU0MDUsMzU0MDYsMzU0MTEsMzU0MTQsMzU0MTUs''@;'; put 'put ''MzU0MTYsMzU0MjAsMzU0MjEsMzU0MjUsMzU0MjksMzU0MzEsMzU0NDUsMzU0NDYsMzU0NDcsMzU0NDksMzU0NTAsMzU0NTEsMzU0NTQsMzU0NTUsMzU0NTYsMzU0NTksMzU0NjIsMzU0NjcsMzU0NzEsMzU0NzIsMzU0NzQsMzU0NzgsMzU0NzksMzU0ODEsMzU0ODcsMzU0OTUsMzU0OTcsMzU1''@;'; put 'put ''MDIsMzU1MDMsMzU1MDcsMzU1MTAsMzU1MTEsMzU1MTUsMzU1MTgsMzU1MjMsMzU1MjYsMzU1MjgsMzU1MjksMzU1MzAsMzU1MzcsMzU1MzksMzU1NDAsMzU1NDEsMzU1NDMsMzU1NDksMzU1NTEsMzU1NjQsMzU1NjgsMzU1NzIsMzU1NzMsMzU1NzQsMzU1ODAsMzU1ODMsMzU1ODksMzU1OTAs''@;'; put 'put ''MzU1OTUsMzU2MDEsMzU2MTIsMzU2MTQsMzU2MTUsMzU1OTQsMzU2MjksMzU2MzIsMzU2MzksMzU2NDQsMzU2NTAsMzU2NTEsMzU2NTIsMzU2NTMsMzU2NTQsMzU2NTYsMzU2NjYsMzU2NjcsMzU2NjgsMzU2NzMsMzU2NjEsMzU2NzgsMzU2ODMsMzU2OTMsMzU3MDIsMzU3MDQsMzU3MDUsMzU3''@;'; put 'put ''MDgsMzU3MTAsMzU3MTMsMzU3MTYsMzU3MTcsMzU3MjMsMzU3MjUsMzU3MjcsMzU3MzIsMzU3MzMsMzU3NDAsMzU3NDIsMzU3NDMsMzU4OTYsMzU4OTcsMzU5MDEsMzU5MDIsMzU5MDksMzU5MTEsMzU5MTMsMzU5MTUsMzU5MTksMzU5MjEsMzU5MjMsMzU5MjQsMzU5MjcsMzU5MjgsMzU5MzEs''@;'; put 'put ''MzU5MzMsMzU5MjksMzU5MzksMzU5NDAsMzU5NDIsMzU5NDQsMzU5NDUsMzU5NDksMzU5NTUsMzU5NTcsMzU5NTgsMzU5NjMsMzU5NjYsMzU5NzQsMzU5NzUsMzU5NzksMzU5ODQsMzU5ODYsMzU5ODcsMzU5OTMsMzU5OTUsMzU5OTYsMzYwMDQsMzYwMjUsMzYwMjYsMzYwMzcsMzYwMzgsMzYw''@;'; put 'put ''NDEsMzYwNDMsMzYwNDcsMzYwNTQsMzYwNTMsMzYwNTcsMzYwNjEsMzYwNjUsMzYwNzIsMzYwNzYsMzYwNzksMzYwODAsMzYwODIsMzYwODUsMzYwODcsMzYwODgsMzYwOTQsMzYwOTUsMzYwOTcsMzYwOTksMzYxMDUsMzYxMTQsMzYxMTksMzYxMjMsMzYxOTcsMzYyMDEsMzYyMDQsMzYyMDYs''@;'; put 'put ''MzYyMjMsMzYyMjYsMzYyMjgsMzYyMzIsMzYyMzcsMzYyNDAsMzYyNDEsMzYyNDUsMzYyNTQsMzYyNTUsMzYyNTYsMzYyNjIsMzYyNjcsMzYyNjgsMzYyNzEsMzYyNzQsMzYyNzcsMzYyNzksMzYyODEsMzYyODMsMzYyODgsMzYyOTMsMzYyOTQsMzYyOTUsMzYyOTYsMzYyOTgsMzYzMDIsMzYz''@;'; put 'put ''MDUsMzYzMDgsMzYzMDksMzYzMTEsMzYzMTMsMzYzMjQsMzYzMjUsMzYzMjcsMzYzMzIsMzYzMzYsMzYyODQsMzYzMzcsMzYzMzgsMzYzNDAsMzYzNDksMzYzNTMsMzYzNTYsMzYzNTcsMzYzNTgsMzYzNjMsMzYzNjksMzYzNzIsMzYzNzQsMzYzODQsMzYzODUsMzYzODYsMzYzODcsMzYzOTAs''@;'; put 'put ''MzYzOTEsMzY0MDEsMzY0MDMsMzY0MDYsMzY0MDcsMzY0MDgsMzY0MDksMzY0MTMsMzY0MTYsMzY0MTcsMzY0MjcsMzY0MjksMzY0MzAsMzY0MzEsMzY0MzYsMzY0NDMsMzY0NDQsMzY0NDUsMzY0NDYsMzY0NDksMzY0NTAsMzY0NTcsMzY0NjAsMzY0NjEsMzY0NjMsMzY0NjQsMzY0NjUsMzY0''@;'; put 'put ''NzMsMzY0NzQsMzY0NzUsMzY0ODIsMzY0ODMsMzY0ODksMzY0OTYsMzY0OTgsMzY1MDEsMzY1MDYsMzY1MDcsMzY1MDksMzY1MTAsMzY1MTQsMzY1MTksMzY1MjEsMzY1MjUsMzY1MjYsMzY1MzEsMzY1MzMsMzY1MzgsMzY1MzksMzY1NDQsMzY1NDUsMzY1NDcsMzY1NDgsMzY1NTEsMzY1NTks''@;'; put 'put ''MzY1NjEsMzY1NjQsMzY1NzIsMzY1ODQsMzY1OTAsMzY1OTIsMzY1OTMsMzY1OTksMzY2MDEsMzY2MDIsMzY1ODksMzY2MDgsMzY2MTAsMzY2MTUsMzY2MTYsMzY2MjMsMzY2MjQsMzY2MzAsMzY2MzEsMzY2MzIsMzY2MzgsMzY2NDAsMzY2NDEsMzY2NDMsMzY2NDUsMzY2NDcsMzY2NDgsMzY2''@;'; put 'put ''NTIsMzY2NTMsMzY2NTQsMzY2NjAsMzY2NjEsMzY2NjIsMzY2NjMsMzY2NjYsMzY2NzIsMzY2NzMsMzY2NzUsMzY2NzksMzY2ODcsMzY2ODksMzY2OTAsMzY2OTEsMzY2OTIsMzY2OTMsMzY2OTYsMzY3MDEsMzY3MDIsMzY3MDksMzY3NjUsMzY3NjgsMzY3NjksMzY3NzIsMzY3NzMsMzY3NzQs''@;'; put 'put ''MzY3ODksMzY3OTAsMzY3OTIsMzY3OTgsMzY4MDAsMzY4MDEsMzY4MDYsMzY4MTAsMzY4MTEsMzY4MTMsMzY4MTYsMzY4MTgsMzY4MTksMzY4MjEsMzY4MzIsMzY4MzUsMzY4MzYsMzY4NDAsMzY4NDYsMzY4NDksMzY4NTMsMzY4NTQsMzY4NTksMzY4NjIsMzY4NjYsMzY4NjgsMzY4NzIsMzY4''@;'; put 'put ''NzYsMzY4ODgsMzY4OTEsMzY5MDQsMzY5MDUsMzY5MTEsMzY5MDYsMzY5MDgsMzY5MDksMzY5MTUsMzY5MTYsMzY5MTksMzY5MjcsMzY5MzEsMzY5MzIsMzY5NDAsMzY5NTUsMzY5NTcsMzY5NjIsMzY5NjYsMzY5NjcsMzY5NzIsMzY5NzYsMzY5ODAsMzY5ODUsMzY5OTcsMzdlMywzNzAwMywz''@;'; put 'put ''NzAwNCwzNzAwNiwzNzAwOCwzNzAxMywzNzAxNSwzNzAxNiwzNzAxNywzNzAxOSwzNzAyNCwzNzAyNSwzNzAyNiwzNzAyOSwzNzA0MCwzNzA0MiwzNzA0MywzNzA0NCwzNzA0NiwzNzA1MywzNzA2OCwzNzA1NCwzNzA1OSwzNzA2MCwzNzA2MSwzNzA2MywzNzA2NCwzNzA3NywzNzA3OSwzNzA4''@;'; put 'put ''MCwzNzA4MSwzNzA4NCwzNzA4NSwzNzA4NywzNzA5MywzNzA3NCwzNzExMCwzNzA5OSwzNzEwMywzNzEwNCwzNzEwOCwzNzExOCwzNzExOSwzNzEyMCwzNzEyNCwzNzEyNSwzNzEyNiwzNzEyOCwzNzEzMywzNzEzNiwzNzE0MCwzNzE0MiwzNzE0MywzNzE0NCwzNzE0NiwzNzE0OCwzNzE1MCwz''@;'; put 'put ''NzE1MiwzNzE1NywzNzE1NCwzNzE1NSwzNzE1OSwzNzE2MSwzNzE2NiwzNzE2NywzNzE2OSwzNzE3MiwzNzE3NCwzNzE3NSwzNzE3NywzNzE3OCwzNzE4MCwzNzE4MSwzNzE4NywzNzE5MSwzNzE5MiwzNzE5OSwzNzIwMywzNzIwNywzNzIwOSwzNzIxMCwzNzIxMSwzNzIxNywzNzIyMCwzNzIy''@;'; put 'put ''MywzNzIyOSwzNzIzNiwzNzI0MSwzNzI0MiwzNzI0MywzNzI0OSwzNzI1MSwzNzI1MywzNzI1NCwzNzI1OCwzNzI2MiwzNzI2NSwzNzI2NywzNzI2OCwzNzI2OSwzNzI3MiwzNzI3OCwzNzI4MSwzNzI4NiwzNzI4OCwzNzI5MiwzNzI5MywzNzI5NCwzNzI5NiwzNzI5NywzNzI5OCwzNzI5OSwz''@;'; put 'put ''NzMwMiwzNzMwNywzNzMwOCwzNzMwOSwzNzMxMSwzNzMxNCwzNzMxNSwzNzMxNywzNzMzMSwzNzMzMiwzNzMzNSwzNzMzNywzNzMzOCwzNzM0MiwzNzM0OCwzNzM0OSwzNzM1MywzNzM1NCwzNzM1NiwzNzM1NywzNzM1OCwzNzM1OSwzNzM2MCwzNzM2MSwzNzM2NywzNzM2OSwzNzM3MSwzNzM3''@;'; put 'put ''MywzNzM3NiwzNzM3NywzNzM4MCwzNzM4MSwzNzM4MiwzNzM4MywzNzM4NSwzNzM4NiwzNzM4OCwzNzM5MiwzNzM5NCwzNzM5NSwzNzM5OCwzNzQwMCwzNzQwNCwzNzQwNSwzNzQxMSwzNzQxMiwzNzQxMywzNzQxNCwzNzQxNiwzNzQyMiwzNzQyMywzNzQyNCwzNzQyNywzNzQyOSwzNzQzMCwz''@;'; put 'put ''NzQzMiwzNzQzMywzNzQzNCwzNzQzNiwzNzQzOCwzNzQ0MCwzNzQ0MiwzNzQ0MywzNzQ0NiwzNzQ0NywzNzQ1MCwzNzQ1MywzNzQ1NCwzNzQ1NSwzNzQ1NywzNzQ2NCwzNzQ2NSwzNzQ2OCwzNzQ2OSwzNzQ3MiwzNzQ3MywzNzQ3NywzNzQ3OSwzNzQ4MCwzNzQ4MSwzNzQ4NiwzNzQ4NywzNzQ4''@;'; put 'put ''OCwzNzQ5MywzNzQ5NCwzNzQ5NSwzNzQ5NiwzNzQ5NywzNzQ5OSwzNzUwMCwzNzUwMSwzNzUwMywzNzUxMiwzNzUxMywzNzUxNCwzNzUxNywzNzUxOCwzNzUyMiwzNzUyNywzNzUyOSwzNzUzNSwzNzUzNiwzNzU0MCwzNzU0MSwzNzU0MywzNzU0NCwzNzU0NywzNzU1MSwzNzU1NCwzNzU1OCwz''@;'; put 'put ''NzU2MCwzNzU2MiwzNzU2MywzNzU2NCwzNzU2NSwzNzU2NywzNzU2OCwzNzU2OSwzNzU3MCwzNzU3MSwzNzU3MywzNzU3NCwzNzU3NSwzNzU3NiwzNzU3OSwzNzU4MCwzNzU4MSwzNzU4MiwzNzU4NCwzNzU4NywzNzU4OSwzNzU5MSwzNzU5MiwzNzU5MywzNzU5NiwzNzU5NywzNzU5OSwzNzYw''@;'; put 'put ''MCwzNzYwMSwzNzYwMywzNzYwNSwzNzYwNywzNzYwOCwzNzYxMiwzNzYxNCwzNzYxNiwzNzYyNSwzNzYyNywzNzYzMSwzNzYzMiwzNzYzNCwzNzY0MCwzNzY0NSwzNzY0OSwzNzY1MiwzNzY1MywzNzY2MCwzNzY2MSwzNzY2MiwzNzY2MywzNzY2NSwzNzY2OCwzNzY2OSwzNzY3MSwzNzY3Mywz''@;'; put 'put ''NzY3NCwzNzY4MywzNzY4NCwzNzY4NiwzNzY4NywzNzcwMywzNzcwNCwzNzcwNSwzNzcxMiwzNzcxMywzNzcxNCwzNzcxNywzNzcxOSwzNzcyMCwzNzcyMiwzNzcyNiwzNzczMiwzNzczMywzNzczNSwzNzczNywzNzczOCwzNzc0MSwzNzc0MywzNzc0NCwzNzc0NSwzNzc0NywzNzc0OCwzNzc1''@;'; put 'put ''MCwzNzc1NCwzNzc1NywzNzc1OSwzNzc2MCwzNzc2MSwzNzc2MiwzNzc2OCwzNzc3MCwzNzc3MSwzNzc3MywzNzc3NSwzNzc3OCwzNzc4MSwzNzc4NCwzNzc4NywzNzc5MCwzNzc5MywzNzc5NSwzNzc5NiwzNzc5OCwzNzgwMCwzNzgwMywzNzgxMiwzNzgxMywzNzgxNCwzNzgxOCwzNzgwMSwz''@;'; put 'put ''NzgyNSwzNzgyOCwzNzgyOSwzNzgzMCwzNzgzMSwzNzgzMywzNzgzNCwzNzgzNSwzNzgzNiwzNzgzNywzNzg0MywzNzg0OSwzNzg1MiwzNzg1NCwzNzg1NSwzNzg1OCwzNzg2MiwzNzg2MywzNzg4MSwzNzg3OSwzNzg4MCwzNzg4MiwzNzg4MywzNzg4NSwzNzg4OSwzNzg5MCwzNzg5MiwzNzg5''@;'; put 'put ''NiwzNzg5NywzNzkwMSwzNzkwMiwzNzkwMywzNzkwOSwzNzkxMCwzNzkxMSwzNzkxOSwzNzkzNCwzNzkzNSwzNzkzNywzNzkzOCwzNzkzOSwzNzk0MCwzNzk0NywzNzk1MSwzNzk0OSwzNzk1NSwzNzk1NywzNzk2MCwzNzk2MiwzNzk2NCwzNzk3MywzNzk3NywzNzk4MCwzNzk4MywzNzk4NSwz''@;'; put 'put ''Nzk4NywzNzk5MiwzNzk5NSwzNzk5NywzNzk5OCwzNzk5OSwzODAwMSwzODAwMiwzODAyMCwzODAxOSwzODI2NCwzODI2NSwzODI3MCwzODI3NiwzODI4MCwzODI4NCwzODI4NSwzODI4NiwzODMwMSwzODMwMiwzODMwMywzODMwNSwzODMxMCwzODMxMywzODMxNSwzODMxNiwzODMyNCwzODMy''@;'; put 'put ''NiwzODMzMCwzODMzMywzODMzNSwzODM0MiwzODM0NCwzODM0NSwzODM0NywzODM1MiwzODM1MywzODM1NCwzODM1NSwzODM2MSwzODM2MiwzODM2NSwzODM2NiwzODM2NywzODM2OCwzODM3MiwzODM3NCwzODQyOSwzODQzMCwzODQzNCwzODQzNiwzODQzNywzODQzOCwzODQ0NCwzODQ0OSwz''@;'; put 'put ''ODQ1MSwzODQ1NSwzODQ1NiwzODQ1NywzODQ1OCwzODQ2MCwzODQ2MSwzODQ2NSwzODQ4MiwzODQ4NCwzODQ4NiwzODQ4NywzODQ4OCwzODQ5NywzODUxMCwzODUxNiwzODUyMywzODUyNCwzODUyNiwzODUyNywzODUyOSwzODUzMCwzODUzMSwzODUzMiwzODUzNywzODU0NSwzODU1MCwzODU1''@;'; put 'put ''NCwzODU1NywzODU1OSwzODU2NCwzODU2NSwzODU2NiwzODU2OSwzODU3NCwzODU3NSwzODU3OSwzODU4NiwzODYwMiwzODYxMCwyMzk4NiwzODYxNiwzODYxOCwzODYyMSwzODYyMiwzODYyMywzODYzMywzODYzOSwzODY0MSwzODY1MCwzODY1OCwzODY1OSwzODY2MSwzODY2NSwzODY4Miwz''@;'; put 'put ''ODY4MywzODY4NSwzODY4OSwzODY5MCwzODY5MSwzODY5NiwzODcwNSwzODcwNywzODcyMSwzODcyMywzODczMCwzODczNCwzODczNSwzODc0MSwzODc0MywzODc0NCwzODc0NiwzODc0NywzODc1NSwzODc1OSwzODc2MiwzODc2NiwzODc3MSwzODc3NCwzODc3NSwzODc3NiwzODc3OSwzODc4''@;'; put 'put ''MSwzODc4MywzODc4NCwzODc5MywzODgwNSwzODgwNiwzODgwNywzODgwOSwzODgxMCwzODgxNCwzODgxNSwzODgxOCwzODgyOCwzODgzMCwzODgzMywzODgzNCwzODgzNywzODgzOCwzODg0MCwzODg0MSwzODg0MiwzODg0NCwzODg0NiwzODg0NywzODg0OSwzODg1MiwzODg1MywzODg1NSwz''@;'; put 'put ''ODg1NywzODg1OCwzODg2MCwzODg2MSwzODg2MiwzODg2NCwzODg2NSwzODg2OCwzODg3MSwzODg3MiwzODg3MywzODg3NywzODg3OCwzODg4MCwzODg3NSwzODg4MSwzODg4NCwzODg5NSwzODg5NywzODkwMCwzODkwMywzODkwNCwzODkwNiwzODkxOSwzODkyMiwzODkzNywzODkyNSwzODky''@;'; put 'put ''NiwzODkzMiwzODkzNCwzODk0MCwzODk0MiwzODk0NCwzODk0NywzODk1MCwzODk1NSwzODk1OCwzODk1OSwzODk2MCwzODk2MiwzODk2MywzODk2NSwzODk0OSwzODk3NCwzODk4MCwzODk4MywzODk4NiwzODk5MywzODk5NCwzODk5NSwzODk5OCwzODk5OSwzOTAwMSwzOTAwMiwzOTAxMCwz''@;'; put 'put ''OTAxMSwzOTAxMywzOTAxNCwzOTAxOCwzOTAyMCwzOTA4MywzOTA4NSwzOTA4NiwzOTA4OCwzOTA5MiwzOTA5NSwzOTA5NiwzOTA5OCwzOTA5OSwzOTEwMywzOTEwNiwzOTEwOSwzOTExMiwzOTExNiwzOTEzNywzOTEzOSwzOTE0MSwzOTE0MiwzOTE0MywzOTE0NiwzOTE1NSwzOTE1OCwzOTE3''@;'; put 'put ''MCwzOTE3NSwzOTE3NiwzOTE4NSwzOTE4OSwzOTE5MCwzOTE5MSwzOTE5NCwzOTE5NSwzOTE5NiwzOTE5OSwzOTIwMiwzOTIwNiwzOTIwNywzOTIxMSwzOTIxNywzOTIxOCwzOTIxOSwzOTIyMCwzOTIyMSwzOTIyNSwzOTIyNiwzOTIyNywzOTIyOCwzOTIzMiwzOTIzMywzOTIzOCwzOTIzOSwz''@;'; put 'put ''OTI0MCwzOTI0NSwzOTI0NiwzOTI1MiwzOTI1NiwzOTI1NywzOTI1OSwzOTI2MCwzOTI2MiwzOTI2MywzOTI2NCwzOTMyMywzOTMyNSwzOTMyNywzOTMzNCwzOTM0NCwzOTM0NSwzOTM0NiwzOTM0OSwzOTM1MywzOTM1NCwzOTM1NywzOTM1OSwzOTM2MywzOTM2OSwzOTM3OSwzOTM4MCwzOTM4''@;'; put 'put ''NSwzOTM4NiwzOTM4OCwzOTM5MCwzOTM5OSwzOTQwMiwzOTQwMywzOTQwNCwzOTQwOCwzOTQxMiwzOTQxMywzOTQxNywzOTQyMSwzOTQyMiwzOTQyNiwzOTQyNywzOTQyOCwzOTQzNSwzOTQzNiwzOTQ0MCwzOTQ0MSwzOTQ0NiwzOTQ1NCwzOTQ1NiwzOTQ1OCwzOTQ1OSwzOTQ2MCwzOTQ2Mywz''@;'; put 'put ''OTQ2OSwzOTQ3MCwzOTQ3NSwzOTQ3NywzOTQ3OCwzOTQ4MCwzOTQ5NSwzOTQ4OSwzOTQ5MiwzOTQ5OCwzOTQ5OSwzOTUwMCwzOTUwMiwzOTUwNSwzOTUwOCwzOTUxMCwzOTUxNywzOTU5NCwzOTU5NiwzOTU5OCwzOTU5OSwzOTYwMiwzOTYwNCwzOTYwNSwzOTYwNiwzOTYwOSwzOTYxMSwzOTYx''@;'; put 'put ''NCwzOTYxNSwzOTYxNywzOTYxOSwzOTYyMiwzOTYyNCwzOTYzMCwzOTYzMiwzOTYzNCwzOTYzNywzOTYzOCwzOTYzOSwzOTY0MywzOTY0NCwzOTY0OCwzOTY1MiwzOTY1MywzOTY1NSwzOTY1NywzOTY2MCwzOTY2NiwzOTY2NywzOTY2OSwzOTY3MywzOTY3NCwzOTY3NywzOTY3OSwzOTY4MCwz''@;'; put 'put ''OTY4MSwzOTY4MiwzOTY4MywzOTY4NCwzOTY4NSwzOTY4OCwzOTY4OSwzOTY5MSwzOTY5MiwzOTY5MywzOTY5NCwzOTY5NiwzOTY5OCwzOTcwMiwzOTcwNSwzOTcwNywzOTcwOCwzOTcxMiwzOTcxOCwzOTcyMywzOTcyNSwzOTczMSwzOTczMiwzOTczMywzOTczNSwzOTczNywzOTczOCwzOTc0''@;'; put 'put ''MSwzOTc1MiwzOTc1NSwzOTc1NiwzOTc2NSwzOTc2NiwzOTc2NywzOTc3MSwzOTc3NCwzOTc3NywzOTc3OSwzOTc4MSwzOTc4MiwzOTc4NCwzOTc4NiwzOTc4NywzOTc4OCwzOTc4OSwzOTc5MCwzOTc5NSwzOTc5NywzOTc5OSwzOTgwMCwzOTgwMSwzOTgwNywzOTgwOCwzOTgxMiwzOTgxMywz''@;'; put 'put ''OTgxNCwzOTgxNSwzOTgxNywzOTgxOCwzOTgxOSwzOTgyMSwzOTgyMywzOTgyNCwzOTgyOCwzOTgzNCwzOTgzNywzOTgzOCwzOTg0NiwzOTg0NywzOTg0OSwzOTg1MiwzOTg1NiwzOTg1NywzOTg1OCwzOTg2MywzOTg2NCwzOTg2NywzOTg2OCwzOTg3MCwzOTg3MSwzOTg3MywzOTg3OSwzOTg4''@;'; put 'put ''MCwzOTg4NiwzOTg4OCwzOTg5NSwzOTg5NiwzOTkwMSwzOTkwMywzOTkwOSwzOTkxMSwzOTkxNCwzOTkxNSwzOTkxOSwzOTkyMywzOTkyNywzOTkyOCwzOTkyOSwzOTkzMCwzOTkzMywzOTkzNSwzOTkzNiwzOTkzOCwzOTk0NywzOTk1MSwzOTk1MywzOTk1OCwzOTk2MCwzOTk2MSwzOTk2Miwz''@;'; put 'put ''OTk2NCwzOTk2NiwzOTk3MCwzOTk3MSwzOTk3NCwzOTk3NSwzOTk3NiwzOTk3NywzOTk3OCwzOTk4NSwzOTk4OSwzOTk5MCwzOTk5MSwzOTk5Nyw0MDAwMSw0MDAwMyw0MDAwNCw0MDAwNSw0MDAwOSw0MDAxMCw0MDAxNCw0MDAxNSw0MDAxNiw0MDAxOSw0MDAyMCw0MDAyMiw0MDAyNCw0MDAy''@;'; put 'put ''Nyw0MDAyOSw0MDAzMCw0MDAzMSw0MDAzNSw0MDA0MSw0MDA0Miw0MDAyOCw0MDA0Myw0MDA0MCw0MDA0Niw0MDA0OCw0MDA1MCw0MDA1Myw0MDA1NSw0MDA1OSw0MDE2Niw0MDE3OCw0MDE4Myw0MDE4NSw0MDIwMyw0MDE5NCw0MDIwOSw0MDIxNSw0MDIxNiw0MDIyMCw0MDIyMSw0MDIyMiw0''@;'; put 'put ''MDIzOSw0MDI0MCw0MDI0Miw0MDI0Myw0MDI0NCw0MDI1MCw0MDI1Miw0MDI2MSw0MDI1Myw0MDI1OCw0MDI1OSw0MDI2Myw0MDI2Niw0MDI3NSw0MDI3Niw0MDI4Nyw0MDI5MSw0MDI5MCw0MDI5Myw0MDI5Nyw0MDI5OCw0MDI5OSw0MDMwNCw0MDMxMCw0MDMxMSw0MDMxNSw0MDMxNiw0MDMx''@;'; put 'put ''OCw0MDMyMyw0MDMyNCw0MDMyNiw0MDMzMCw0MDMzMyw0MDMzNCw0MDMzOCw0MDMzOSw0MDM0MSw0MDM0Miw0MDM0Myw0MDM0NCw0MDM1Myw0MDM2Miw0MDM2NCw0MDM2Niw0MDM2OSw0MDM3Myw0MDM3Nyw0MDM4MCw0MDM4Myw0MDM4Nyw0MDM5MSw0MDM5Myw0MDM5NCw0MDQwNCw0MDQwNSw0''@;'; put 'put ''MDQwNiw0MDQwNyw0MDQxMCw0MDQxNCw0MDQxNSw0MDQxNiw0MDQyMSw0MDQyMyw0MDQyNSw0MDQyNyw0MDQzMCw0MDQzMiw0MDQzNSw0MDQzNiw0MDQ0Niw0MDQ1OCw0MDQ1MCw0MDQ1NSw0MDQ2Miw0MDQ2NCw0MDQ2NSw0MDQ2Niw0MDQ2OSw0MDQ3MCw0MDQ3Myw0MDQ3Niw0MDQ3Nyw0MDU3''@;'; put 'put ''MCw0MDU3MSw0MDU3Miw0MDU3Niw0MDU3OCw0MDU3OSw0MDU4MCw0MDU4MSw0MDU4Myw0MDU5MCw0MDU5MSw0MDU5OCw0MDYwMCw0MDYwMyw0MDYwNiw0MDYxMiw0MDYxNiw0MDYyMCw0MDYyMiw0MDYyMyw0MDYyNCw0MDYyNyw0MDYyOCw0MDYyOSw0MDY0Niw0MDY0OCw0MDY1MSw0MDY2MSw0''@;'; put 'put ''MDY3MSw0MDY3Niw0MDY3OSw0MDY4NCw0MDY4NSw0MDY4Niw0MDY4OCw0MDY4OSw0MDY5MCw0MDY5Myw0MDY5Niw0MDcwMyw0MDcwNiw0MDcwNyw0MDcxMyw0MDcxOSw0MDcyMCw0MDcyMSw0MDcyMiw0MDcyNCw0MDcyNiw0MDcyNyw0MDcyOSw0MDczMCw0MDczMSw0MDczNSw0MDczOCw0MDc0''@;'; put 'put ''Miw0MDc0Niw0MDc0Nyw0MDc1MSw0MDc1Myw0MDc1NCw0MDc1Niw0MDc1OSw0MDc2MSw0MDc2Miw0MDc2NCw0MDc2NSw0MDc2Nyw0MDc2OSw0MDc3MSw0MDc3Miw0MDc3Myw0MDc3NCw0MDc3NSw0MDc4Nyw0MDc4OSw0MDc5MCw0MDc5MSw0MDc5Miw0MDc5NCw0MDc5Nyw0MDc5OCw0MDgwOCw0''@;'; put 'put ''MDgwOSw0MDgxMyw0MDgxNCw0MDgxNSw0MDgxNiw0MDgxNyw0MDgxOSw0MDgyMSw0MDgyNiw0MDgyOSw0MDg0Nyw0MDg0OCw0MDg0OSw0MDg1MCw0MDg1Miw0MDg1NCw0MDg1NSw0MDg2Miw0MDg2NSw0MDg2Niw0MDg2Nyw0MDg2OSxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxs''@;'; 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 ''LG51bGxdLGlibTg2NjpbMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjks''@;'; put 'put ''MTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsOTYxNyw5NjE4LDk2MTksOTQ3NCw5NTA4LDk1NjksOTU3MCw5NTU4LDk1NTcsOTU3MSw5NTUzLDk1NTksOTU2NSw5NTY0LDk1NjMs''@;'; put 'put ''OTQ4OCw5NDkyLDk1MjQsOTUxNiw5NTAwLDk0NzIsOTUzMiw5NTY2LDk1NjcsOTU2Miw5NTU2LDk1NzcsOTU3NCw5NTY4LDk1NTIsOTU4MCw5NTc1LDk1NzYsOTU3Miw5NTczLDk1NjEsOTU2MCw5NTU0LDk1NTUsOTU3OSw5NTc4LDk0OTYsOTQ4NCw5NjA4LDk2MDQsOTYxMiw5NjE2LDk2MDAs''@;'; put 'put ''MTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMywxMDI1LDExMDUsMTAyOCwxMTA4LDEwMzEsMTExMSwxMDM4LDExMTgsMTc2LDg3MjksMTgzLDg3MzAsODQ3MCwxNjQsOTYzMiwxNjBdLCJpc28tODg1''@;'; put 'put ''OS0yIjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMjYwLDcyOCwzMjEsMTY0LDMxNywzNDYsMTY3''@;'; put 'put ''LDE2OCwzNTIsMzUwLDM1NiwzNzcsMTczLDM4MSwzNzksMTc2LDI2MSw3MzEsMzIyLDE4MCwzMTgsMzQ3LDcxMSwxODQsMzUzLDM1MSwzNTcsMzc4LDczMywzODIsMzgwLDM0MCwxOTMsMTk0LDI1OCwxOTYsMzEzLDI2MiwxOTksMjY4LDIwMSwyODAsMjAzLDI4MiwyMDUsMjA2LDI3MCwyNzIs''@;'; put 'put ''MzIzLDMyNywyMTEsMjEyLDMzNiwyMTQsMjE1LDM0NCwzNjYsMjE4LDM2OCwyMjAsMjIxLDM1NCwyMjMsMzQxLDIyNSwyMjYsMjU5LDIyOCwzMTQsMjYzLDIzMSwyNjksMjMzLDI4MSwyMzUsMjgzLDIzNywyMzgsMjcxLDI3MywzMjQsMzI4LDI0MywyNDQsMzM3LDI0NiwyNDcsMzQ1LDM2Nywy''@;'; put 'put ''NTAsMzY5LDI1MiwyNTMsMzU1LDcyOV0sImlzby04ODU5LTMiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5''@;'; put 'put ''LDE2MCwyOTQsNzI4LDE2MywxNjQsbnVsbCwyOTIsMTY3LDE2OCwzMDQsMzUwLDI4NiwzMDgsMTczLG51bGwsMzc5LDE3NiwyOTUsMTc4LDE3OSwxODAsMTgxLDI5MywxODMsMTg0LDMwNSwzNTEsMjg3LDMwOSwxODksbnVsbCwzODAsMTkyLDE5MywxOTQsbnVsbCwxOTYsMjY2LDI2NCwxOTks''@;'; put 'put ''MjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNyxudWxsLDIwOSwyMTAsMjExLDIxMiwyODgsMjE0LDIxNSwyODQsMjE3LDIxOCwyMTksMjIwLDM2NCwzNDgsMjIzLDIyNCwyMjUsMjI2LG51bGwsMjI4LDI2NywyNjUsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksbnVs''@;'; put 'put ''bCwyNDEsMjQyLDI0MywyNDQsMjg5LDI0NiwyNDcsMjg1LDI0OSwyNTAsMjUxLDI1MiwzNjUsMzQ5LDcyOV0sImlzby04ODU5LTQiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDks''@;'; put 'put ''MTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCwyNjAsMzEyLDM0MiwxNjQsMjk2LDMxNSwxNjcsMTY4LDM1MiwyNzQsMjkwLDM1OCwxNzMsMzgxLDE3NSwxNzYsMjYxLDczMSwzNDMsMTgwLDI5NywzMTYsNzExLDE4NCwzNTMsMjc1LDI5MSwzNTksMzMwLDM4Miwz''@;'; put 'put ''MzEsMjU2LDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDMwMiwyNjgsMjAxLDI4MCwyMDMsMjc4LDIwNSwyMDYsMjk4LDI3MiwzMjUsMzMyLDMxMCwyMTIsMjEzLDIxNCwyMTUsMjE2LDM3MCwyMTgsMjE5LDIyMCwzNjAsMzYyLDIyMywyNTcsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMzAzLDI2''@;'; put 'put ''OSwyMzMsMjgxLDIzNSwyNzksMjM3LDIzOCwyOTksMjczLDMyNiwzMzMsMzExLDI0NCwyNDUsMjQ2LDI0NywyNDgsMzcxLDI1MCwyNTEsMjUyLDM2MSwzNjMsNzI5XSwiaXNvLTg4NTktNSI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEs''@;'; put 'put ''MTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDEwMjUsMTAyNiwxMDI3LDEwMjgsMTAyOSwxMDMwLDEwMzEsMTAzMiwxMDMzLDEwMzQsMTAzNSwxMDM2LDE3MywxMDM4LDEwMzksMTA0MCwxMDQxLDEwNDIs''@;'; put 'put ''MTA0MywxMDQ0LDEwNDUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUs''@;'; put 'put ''MTA3NiwxMDc3LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMyw4NDcwLDExMDUsMTEwNiwxMTA3LDExMDgs''@;'; put 'put ''MTEwOSwxMTEwLDExMTEsMTExMiwxMTEzLDExMTQsMTExNSwxMTE2LDE2NywxMTE4LDExMTldLCJpc28tODg1OS02IjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEs''@;'; put 'put ''MTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsbnVsbCxudWxsLG51bGwsMTY0LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsMTU0OCwxNzMsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwx''@;'; put 'put ''NTYzLG51bGwsbnVsbCxudWxsLDE1NjcsbnVsbCwxNTY5LDE1NzAsMTU3MSwxNTcyLDE1NzMsMTU3NCwxNTc1LDE1NzYsMTU3NywxNTc4LDE1NzksMTU4MCwxNTgxLDE1ODIsMTU4MywxNTg0LDE1ODUsMTU4NiwxNTg3LDE1ODgsMTU4OSwxNTkwLDE1OTEsMTU5MiwxNTkzLDE1OTQsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbCxudWxsLDE2MDAsMTYwMSwxNjAyLDE2MDMsMTYwNCwxNjA1LDE2MDYsMTYwNywxNjA4LDE2MDksMTYxMCwxNjExLDE2MTIsMTYxMywxNjE0LDE2MTUsMTYxNiwxNjE3LDE2MTgsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxu''@;'; put 'put ''dWxsLG51bGwsbnVsbF0sImlzby04ODU5LTciOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUwLDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCw4MjE2''@;'; put 'put ''LDgyMTcsMTYzLDgzNjQsODM2NywxNjYsMTY3LDE2OCwxNjksODkwLDE3MSwxNzIsMTczLG51bGwsODIxMywxNzYsMTc3LDE3OCwxNzksOTAwLDkwMSw5MDIsMTgzLDkwNCw5MDUsOTA2LDE4Nyw5MDgsMTg5LDkxMCw5MTEsOTEyLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIx''@;'; put 'put ''LDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksbnVsbCw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsOTM4LDkzOSw5NDAsOTQxLDk0Miw5NDMsOTQ0LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYy''@;'; put 'put ''LDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSw5NzAsOTcxLDk3Miw5NzMsOTc0LG51bGxdLCJpc28tODg1OS04IjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEs''@;'; put 'put ''MTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsbnVsbCwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDIxNSwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwyNDcsMTg3LDE4OCwxODksMTkwLG51bGwsbnVs''@;'; put 'put ''bCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCw4MjE1LDE0ODgsMTQ4''@;'; put 'put ''OSwxNDkwLDE0OTEsMTQ5MiwxNDkzLDE0OTQsMTQ5NSwxNDk2LDE0OTcsMTQ5OCwxNDk5LDE1MDAsMTUwMSwxNTAyLDE1MDMsMTUwNCwxNTA1LDE1MDYsMTUwNywxNTA4LDE1MDksMTUxMCwxNTExLDE1MTIsMTUxMywxNTE0LG51bGwsbnVsbCw4MjA2LDgyMDcsbnVsbF0sImlzby04ODU5LTEw''@;'; put 'put ''IjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYsMTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMjYwLDI3NCwyOTAsMjk4LDI5NiwzMTAsMTY3LDMx''@;'; put 'put ''NSwyNzIsMzUyLDM1OCwzODEsMTczLDM2MiwzMzAsMTc2LDI2MSwyNzUsMjkxLDI5OSwyOTcsMzExLDE4MywzMTYsMjczLDM1MywzNTksMzgyLDgyMTMsMzYzLDMzMSwyNTYsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMzAyLDI2OCwyMDEsMjgwLDIwMywyNzgsMjA1LDIwNiwyMDcsMjA4LDMy''@;'; put 'put ''NSwzMzIsMjExLDIxMiwyMTMsMjE0LDM2MCwyMTYsMzcwLDIxOCwyMTksMjIwLDIyMSwyMjIsMjIzLDI1NywyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwzMDMsMjY5LDIzMywyODEsMjM1LDI3OSwyMzcsMjM4LDIzOSwyNDAsMzI2LDMzMywyNDMsMjQ0LDI0NSwyNDYsMzYxLDI0OCwzNzEsMjUw''@;'; put 'put ''LDI1MSwyNTIsMjUzLDI1NCwzMTJdLCJpc28tODg1OS0xMyI6WzEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTks''@;'; put 'put ''MTYwLDgyMjEsMTYyLDE2MywxNjQsODIyMiwxNjYsMTY3LDIxNiwxNjksMzQyLDE3MSwxNzIsMTczLDE3NCwxOTgsMTc2LDE3NywxNzgsMTc5LDgyMjAsMTgxLDE4MiwxODMsMjQ4LDE4NSwzNDMsMTg3LDE4OCwxODksMTkwLDIzMCwyNjAsMzAyLDI1NiwyNjIsMTk2LDE5NywyODAsMjc0LDI2''@;'; put 'put ''OCwyMDEsMzc3LDI3OCwyOTAsMzEwLDI5OCwzMTUsMzUyLDMyMywzMjUsMjExLDMzMiwyMTMsMjE0LDIxNSwzNzAsMzIxLDM0NiwzNjIsMjIwLDM3OSwzODEsMjIzLDI2MSwzMDMsMjU3LDI2MywyMjgsMjI5LDI4MSwyNzUsMjY5LDIzMywzNzgsMjc5LDI5MSwzMTEsMjk5LDMxNiwzNTMsMzI0''@;'; put 'put ''LDMyNiwyNDMsMzMzLDI0NSwyNDYsMjQ3LDM3MSwzMjIsMzQ3LDM2MywyNTIsMzgwLDM4Miw4MjE3XSwiaXNvLTg4NTktMTQiOlsxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3LDE0OCwxNDksMTUw''@;'; put 'put ''LDE1MSwxNTIsMTUzLDE1NCwxNTUsMTU2LDE1NywxNTgsMTU5LDE2MCw3NjgyLDc2ODMsMTYzLDI2NiwyNjcsNzY5MCwxNjcsNzgwOCwxNjksNzgxMCw3NjkxLDc5MjIsMTczLDE3NCwzNzYsNzcxMCw3NzExLDI4OCwyODksNzc0NCw3NzQ1LDE4Miw3NzY2LDc4MDksNzc2Nyw3ODExLDc3NzYs''@;'; put 'put ''NzkyMyw3ODEyLDc4MTMsNzc3NywxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMzcyLDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDc3ODYsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMzc0LDIyMywyMjQsMjI1LDIyNiwyMjcs''@;'; put 'put ''MjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMzczLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDc3ODcsMjQ4LDI0OSwyNTAsMjUxLDI1MiwyNTMsMzc1LDI1NV0sImlzby04ODU5LTE1IjpbMTI4LDEyOSwxMzAsMTMxLDEzMiwxMzMsMTM0LDEzNSwxMzYs''@;'; put 'put ''MTM3LDEzOCwxMzksMTQwLDE0MSwxNDIsMTQzLDE0NCwxNDUsMTQ2LDE0NywxNDgsMTQ5LDE1MCwxNTEsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMTYxLDE2MiwxNjMsODM2NCwxNjUsMzUyLDE2NywzNTMsMTY5LDE3MCwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcs''@;'; put 'put ''MTc4LDE3OSwzODEsMTgxLDE4MiwxODMsMzgyLDE4NSwxODYsMTg3LDMzOCwzMzksMzc2LDE5MSwxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjA4LDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwy''@;'; put 'put ''MTksMjIwLDIyMSwyMjIsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwyNDAsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDI1NCwyNTVdLCJpc28tODg1OS0xNiI6WzEy''@;'; put 'put ''OCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDI2MCwyNjEsMzIxLDgzNjQsODIyMiwzNTIsMTY3LDM1Mywx''@;'; put 'put ''NjksNTM2LDE3MSwzNzcsMTczLDM3OCwzNzksMTc2LDE3NywyNjgsMzIyLDM4MSw4MjIxLDE4MiwxODMsMzgyLDI2OSw1MzcsMTg3LDMzOCwzMzksMzc2LDM4MCwxOTIsMTkzLDE5NCwyNTgsMTk2LDI2MiwxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjcyLDMyMywy''@;'; put 'put ''MTAsMjExLDIxMiwzMzYsMjE0LDM0NiwzNjgsMjE3LDIxOCwyMTksMjIwLDI4MCw1MzgsMjIzLDIyNCwyMjUsMjI2LDI1OSwyMjgsMjYzLDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwyNzMsMzI0LDI0MiwyNDMsMjQ0LDMzNywyNDYsMzQ3LDM2OSwyNDksMjUwLDI1''@;'; put 'put ''MSwyNTIsMjgxLDUzOSwyNTVdLCJrb2k4LXIiOls5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTIsOTQ5Niw5NTAwLDk1MDgsOTUxNiw5NTI0LDk1MzIsOTYwMCw5NjA0LDk2MDgsOTYxMiw5NjE2LDk2MTcsOTYxOCw5NjE5LDg5OTIsOTYzMiw4NzI5LDg3MzAsODc3Niw4ODA0LDg4MDUsMTYwLDg5''@;'; put 'put ''OTMsMTc2LDE3OCwxODMsMjQ3LDk1NTIsOTU1Myw5NTU0LDExMDUsOTU1NSw5NTU2LDk1NTcsOTU1OCw5NTU5LDk1NjAsOTU2MSw5NTYyLDk1NjMsOTU2NCw5NTY1LDk1NjYsOTU2Nyw5NTY4LDk1NjksMTAyNSw5NTcwLDk1NzEsOTU3Miw5NTczLDk1NzQsOTU3NSw5NTc2LDk1NzcsOTU3OCw5''@;'; put 'put ''NTc5LDk1ODAsMTY5LDExMDIsMTA3MiwxMDczLDEwOTQsMTA3NiwxMDc3LDEwOTIsMTA3NSwxMDkzLDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMTAzLDEwODgsMTA4OSwxMDkwLDEwOTEsMTA3OCwxMDc0LDExMDAsMTA5OSwxMDc5LDEwOTYsMTEwMSwxMDk3LDEw''@;'; put 'put ''OTUsMTA5OCwxMDcwLDEwNDAsMTA0MSwxMDYyLDEwNDQsMTA0NSwxMDYwLDEwNDMsMTA2MSwxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA3MSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNDYsMTA0MiwxMDY4LDEwNjcsMTA0NywxMDY0LDEwNjksMTA2NSwxMDYzLDEw''@;'; put 'put ''NjZdLCJrb2k4LXUiOls5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTIsOTQ5Niw5NTAwLDk1MDgsOTUxNiw5NTI0LDk1MzIsOTYwMCw5NjA0LDk2MDgsOTYxMiw5NjE2LDk2MTcsOTYxOCw5NjE5LDg5OTIsOTYzMiw4NzI5LDg3MzAsODc3Niw4ODA0LDg4MDUsMTYwLDg5OTMsMTc2LDE3OCwxODMs''@;'; put 'put ''MjQ3LDk1NTIsOTU1Myw5NTU0LDExMDUsMTEwOCw5NTU2LDExMTAsMTExMSw5NTU5LDk1NjAsOTU2MSw5NTYyLDk1NjMsMTE2OSwxMTE4LDk1NjYsOTU2Nyw5NTY4LDk1NjksMTAyNSwxMDI4LDk1NzEsMTAzMCwxMDMxLDk1NzQsOTU3NSw5NTc2LDk1NzcsOTU3OCwxMTY4LDEwMzgsMTY5LDEx''@;'; put 'put ''MDIsMTA3MiwxMDczLDEwOTQsMTA3NiwxMDc3LDEwOTIsMTA3NSwxMDkzLDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMTAzLDEwODgsMTA4OSwxMDkwLDEwOTEsMTA3OCwxMDc0LDExMDAsMTA5OSwxMDc5LDEwOTYsMTEwMSwxMDk3LDEwOTUsMTA5OCwxMDcwLDEw''@;'; put 'put ''NDAsMTA0MSwxMDYyLDEwNDQsMTA0NSwxMDYwLDEwNDMsMTA2MSwxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA3MSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNDYsMTA0MiwxMDY4LDEwNjcsMTA0NywxMDY0LDEwNjksMTA2NSwxMDYzLDEwNjZdLG1hY2ludG9zaDpb''@;'; put 'put ''MTk2LDE5NywxOTksMjAxLDIwOSwyMTQsMjIwLDIyNSwyMjQsMjI2LDIyOCwyMjcsMjI5LDIzMSwyMzMsMjMyLDIzNCwyMzUsMjM3LDIzNiwyMzgsMjM5LDI0MSwyNDMsMjQyLDI0NCwyNDYsMjQ1LDI1MCwyNDksMjUxLDI1Miw4MjI0LDE3NiwxNjIsMTYzLDE2Nyw4MjI2LDE4MiwyMjMsMTc0''@;'; put 'put ''LDE2OSw4NDgyLDE4MCwxNjgsODgwMCwxOTgsMjE2LDg3MzQsMTc3LDg4MDQsODgwNSwxNjUsMTgxLDg3MDYsODcyMSw4NzE5LDk2MCw4NzQ3LDE3MCwxODYsOTM3LDIzMCwyNDgsMTkxLDE2MSwxNzIsODczMCw0MDIsODc3Niw4NzEwLDE3MSwxODcsODIzMCwxNjAsMTkyLDE5NSwyMTMsMzM4''@;'; put 'put ''LDMzOSw4MjExLDgyMTIsODIyMCw4MjIxLDgyMTYsODIxNywyNDcsOTY3NCwyNTUsMzc2LDgyNjAsODM2NCw4MjQ5LDgyNTAsNjQyNTcsNjQyNTgsODIyNSwxODMsODIxOCw4MjIyLDgyNDAsMTk0LDIwMiwxOTMsMjAzLDIwMCwyMDUsMjA2LDIwNywyMDQsMjExLDIxMiw2Mzc0MywyMTAsMjE4''@;'; put 'put ''LDIxOSwyMTcsMzA1LDcxMCw3MzIsMTc1LDcyOCw3MjksNzMwLDE4NCw3MzMsNzMxLDcxMV0sIndpbmRvd3MtODc0IjpbODM2NCwxMjksMTMwLDEzMSwxMzIsODIzMCwxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4''@;'; put 'put ''MjExLDgyMTIsMTUyLDE1MywxNTQsMTU1LDE1NiwxNTcsMTU4LDE1OSwxNjAsMzU4NSwzNTg2LDM1ODcsMzU4OCwzNTg5LDM1OTAsMzU5MSwzNTkyLDM1OTMsMzU5NCwzNTk1LDM1OTYsMzU5NywzNTk4LDM1OTksMzYwMCwzNjAxLDM2MDIsMzYwMywzNjA0LDM2MDUsMzYwNiwzNjA3LDM2MDgs''@;'; put 'put ''MzYwOSwzNjEwLDM2MTEsMzYxMiwzNjEzLDM2MTQsMzYxNSwzNjE2LDM2MTcsMzYxOCwzNjE5LDM2MjAsMzYyMSwzNjIyLDM2MjMsMzYyNCwzNjI1LDM2MjYsMzYyNywzNjI4LDM2MjksMzYzMCwzNjMxLDM2MzIsMzYzMywzNjM0LDM2MzUsMzYzNiwzNjM3LDM2MzgsMzYzOSwzNjQwLDM2NDEs''@;'; put 'put ''MzY0MixudWxsLG51bGwsbnVsbCxudWxsLDM2NDcsMzY0OCwzNjQ5LDM2NTAsMzY1MSwzNjUyLDM2NTMsMzY1NCwzNjU1LDM2NTYsMzY1NywzNjU4LDM2NTksMzY2MCwzNjYxLDM2NjIsMzY2MywzNjY0LDM2NjUsMzY2NiwzNjY3LDM2NjgsMzY2OSwzNjcwLDM2NzEsMzY3MiwzNjczLDM2NzQs''@;'; put 'put ''MzY3NSxudWxsLG51bGwsbnVsbCxudWxsXSwid2luZG93cy0xMjUwIjpbODM2NCwxMjksODIxOCwxMzEsODIyMiw4MjMwLDgyMjQsODIyNSwxMzYsODI0MCwzNTIsODI0OSwzNDYsMzU2LDM4MSwzNzcsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsMTUyLDg0ODIsMzUz''@;'; put 'put ''LDgyNTAsMzQ3LDM1NywzODIsMzc4LDE2MCw3MTEsNzI4LDMyMSwxNjQsMjYwLDE2NiwxNjcsMTY4LDE2OSwzNTAsMTcxLDE3MiwxNzMsMTc0LDM3OSwxNzYsMTc3LDczMSwzMjIsMTgwLDE4MSwxODIsMTgzLDE4NCwyNjEsMzUxLDE4NywzMTcsNzMzLDMxOCwzODAsMzQwLDE5MywxOTQsMjU4''@;'; put 'put ''LDE5NiwzMTMsMjYyLDE5OSwyNjgsMjAxLDI4MCwyMDMsMjgyLDIwNSwyMDYsMjcwLDI3MiwzMjMsMzI3LDIxMSwyMTIsMzM2LDIxNCwyMTUsMzQ0LDM2NiwyMTgsMzY4LDIyMCwyMjEsMzU0LDIyMywzNDEsMjI1LDIyNiwyNTksMjI4LDMxNCwyNjMsMjMxLDI2OSwyMzMsMjgxLDIzNSwyODMs''@;'; put 'put ''MjM3LDIzOCwyNzEsMjczLDMyNCwzMjgsMjQzLDI0NCwzMzcsMjQ2LDI0NywzNDUsMzY3LDI1MCwzNjksMjUyLDI1MywzNTUsNzI5XSwid2luZG93cy0xMjUxIjpbMTAyNiwxMDI3LDgyMTgsMTEwNyw4MjIyLDgyMzAsODIyNCw4MjI1LDgzNjQsODI0MCwxMDMzLDgyNDksMTAzNCwxMDM2LDEw''@;'; put 'put ''MzUsMTAzOSwxMTA2LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsMTUyLDg0ODIsMTExMyw4MjUwLDExMTQsMTExNiwxMTE1LDExMTksMTYwLDEwMzgsMTExOCwxMDMyLDE2NCwxMTY4LDE2NiwxNjcsMTAyNSwxNjksMTAyOCwxNzEsMTcyLDE3MywxNzQsMTAzMSwxNzYsMTc3''@;'; put 'put ''LDEwMzAsMTExMCwxMTY5LDE4MSwxODIsMTgzLDExMDUsODQ3MCwxMTA4LDE4NywxMTEyLDEwMjksMTEwOSwxMTExLDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1''@;'; put 'put ''OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5''@;'; put 'put ''MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDNdLCJ3aW5kb3dzLTEyNTIiOls4MzY0LDEyOSw4MjE4LDQwMiw4MjIyLDgyMzAsODIyNCw4MjI1LDcxMCw4MjQwLDM1Miw4MjQ5LDMzOCwxNDEsMzgxLDE0MywxNDQsODIxNiw4MjE3LDgyMjAs''@;'; put 'put ''ODIyMSw4MjI2LDgyMTEsODIxMiw3MzIsODQ4MiwzNTMsODI1MCwzMzksMTU3LDM4MiwzNzYsMTYwLDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MCwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTg3''@;'; put 'put ''LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjA4LDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDIyMSwyMjIsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgs''@;'; put 'put ''MjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwyNDAsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDI1NCwyNTVdLCJ3aW5kb3dzLTEyNTMiOls4MzY0LDEyOSw4MjE4LDQwMiw4MjIyLDgyMzAsODIyNCw4MjI1LDEz''@;'; put 'put ''Niw4MjQwLDEzOCw4MjQ5LDE0MCwxNDEsMTQyLDE0MywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiwxNTIsODQ4MiwxNTQsODI1MCwxNTYsMTU3LDE1OCwxNTksMTYwLDkwMSw5MDIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LG51bGwsMTcxLDE3MiwxNzMsMTc0''@;'; put 'put ''LDgyMTMsMTc2LDE3NywxNzgsMTc5LDkwMCwxODEsMTgyLDE4Myw5MDQsOTA1LDkwNiwxODcsOTA4LDE4OSw5MTAsOTExLDkxMiw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LG51bGwsOTMxLDkzMiw5MzMsOTM0LDkz''@;'; put 'put ''NSw5MzYsOTM3LDkzOCw5MzksOTQwLDk0MSw5NDIsOTQzLDk0NCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Miw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksOTcwLDk3MSw5NzIsOTczLDk3NCxudWxsXSwi''@;'; put 'put ''d2luZG93cy0xMjU0IjpbODM2NCwxMjksODIxOCw0MDIsODIyMiw4MjMwLDgyMjQsODIyNSw3MTAsODI0MCwzNTIsODI0OSwzMzgsMTQxLDE0MiwxNDMsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsNzMyLDg0ODIsMzUzLDgyNTAsMzM5LDE1NywxNTgsMzc2LDE2MCwx''@;'; put 'put ''NjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIw''@;'; put 'put ''MiwyMDMsMjA0LDIwNSwyMDYsMjA3LDI4NiwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwzMDQsMzUwLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjg3LDI0MSwyNDIsMjQz''@;'; put 'put ''LDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDMwNSwzNTEsMjU1XSwid2luZG93cy0xMjU1IjpbODM2NCwxMjksODIxOCw0MDIsODIyMiw4MjMwLDgyMjQsODIyNSw3MTAsODI0MCwxMzgsODI0OSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIy''@;'; put 'put ''Niw4MjExLDgyMTIsNzMyLDg0ODIsMTU0LDgyNTAsMTU2LDE1NywxNTgsMTU5LDE2MCwxNjEsMTYyLDE2Myw4MzYyLDE2NSwxNjYsMTY3LDE2OCwxNjksMjE1LDE3MSwxNzIsMTczLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDI0NywxODcsMTg4LDE4''@;'; put 'put ''OSwxOTAsMTkxLDE0NTYsMTQ1NywxNDU4LDE0NTksMTQ2MCwxNDYxLDE0NjIsMTQ2MywxNDY0LDE0NjUsMTQ2NiwxNDY3LDE0NjgsMTQ2OSwxNDcwLDE0NzEsMTQ3MiwxNDczLDE0NzQsMTQ3NSwxNTIwLDE1MjEsMTUyMiwxNTIzLDE1MjQsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGws''@;'; put 'put ''bnVsbCwxNDg4LDE0ODksMTQ5MCwxNDkxLDE0OTIsMTQ5MywxNDk0LDE0OTUsMTQ5NiwxNDk3LDE0OTgsMTQ5OSwxNTAwLDE1MDEsMTUwMiwxNTAzLDE1MDQsMTUwNSwxNTA2LDE1MDcsMTUwOCwxNTA5LDE1MTAsMTUxMSwxNTEyLDE1MTMsMTUxNCxudWxsLG51bGwsODIwNiw4MjA3LG51bGxd''@;'; put 'put ''LCJ3aW5kb3dzLTEyNTYiOls4MzY0LDE2NjIsODIxOCw0MDIsODIyMiw4MjMwLDgyMjQsODIyNSw3MTAsODI0MCwxNjU3LDgyNDksMzM4LDE2NzAsMTY4OCwxNjcyLDE3MTEsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiwxNzA1LDg0ODIsMTY4MSw4MjUwLDMzOSw4MjA0LDgy''@;'; put 'put ''MDUsMTcyMiwxNjAsMTU0OCwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MjYsMTcxLDE3MiwxNzMsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTU2MywxODcsMTg4LDE4OSwxOTAsMTU2NywxNzI5LDE1NjksMTU3MCwxNTcxLDE1NzIs''@;'; put 'put ''MTU3MywxNTc0LDE1NzUsMTU3NiwxNTc3LDE1NzgsMTU3OSwxNTgwLDE1ODEsMTU4MiwxNTgzLDE1ODQsMTU4NSwxNTg2LDE1ODcsMTU4OCwxNTg5LDE1OTAsMjE1LDE1OTEsMTU5MiwxNTkzLDE1OTQsMTYwMCwxNjAxLDE2MDIsMTYwMywyMjQsMTYwNCwyMjYsMTYwNSwxNjA2LDE2MDcsMTYw''@;'; put 'put ''OCwyMzEsMjMyLDIzMywyMzQsMjM1LDE2MDksMTYxMCwyMzgsMjM5LDE2MTEsMTYxMiwxNjEzLDE2MTQsMjQ0LDE2MTUsMTYxNiwyNDcsMTYxNywyNDksMTYxOCwyNTEsMjUyLDgyMDYsODIwNywxNzQ2XSwid2luZG93cy0xMjU3IjpbODM2NCwxMjksODIxOCwxMzEsODIyMiw4MjMwLDgyMjQs''@;'; put 'put ''ODIyNSwxMzYsODI0MCwxMzgsODI0OSwxNDAsMTY4LDcxMSwxODQsMTQ0LDgyMTYsODIxNyw4MjIwLDgyMjEsODIyNiw4MjExLDgyMTIsMTUyLDg0ODIsMTU0LDgyNTAsMTU2LDE3NSw3MzEsMTU5LDE2MCxudWxsLDE2MiwxNjMsMTY0LG51bGwsMTY2LDE2NywyMTYsMTY5LDM0MiwxNzEsMTcy''@;'; put 'put ''LDE3MywxNzQsMTk4LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMjQ4LDE4NSwzNDMsMTg3LDE4OCwxODksMTkwLDIzMCwyNjAsMzAyLDI1NiwyNjIsMTk2LDE5NywyODAsMjc0LDI2OCwyMDEsMzc3LDI3OCwyOTAsMzEwLDI5OCwzMTUsMzUyLDMyMywzMjUsMjExLDMzMiwyMTMs''@;'; put 'put ''MjE0LDIxNSwzNzAsMzIxLDM0NiwzNjIsMjIwLDM3OSwzODEsMjIzLDI2MSwzMDMsMjU3LDI2MywyMjgsMjI5LDI4MSwyNzUsMjY5LDIzMywzNzgsMjc5LDI5MSwzMTEsMjk5LDMxNiwzNTMsMzI0LDMyNiwyNDMsMzMzLDI0NSwyNDYsMjQ3LDM3MSwzMjIsMzQ3LDM2MywyNTIsMzgwLDM4Miw3''@;'; put 'put ''MjldLCJ3aW5kb3dzLTEyNTgiOls4MzY0LDEyOSw4MjE4LDQwMiw4MjIyLDgyMzAsODIyNCw4MjI1LDcxMCw4MjQwLDEzOCw4MjQ5LDMzOCwxNDEsMTQyLDE0MywxNDQsODIxNiw4MjE3LDgyMjAsODIyMSw4MjI2LDgyMTEsODIxMiw3MzIsODQ4MiwxNTQsODI1MCwzMzksMTU3LDE1OCwzNzYs''@;'; put 'put ''MTYwLDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MCwxNzEsMTcyLDE3MywxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCwyNTgsMTk2LDE5NywxOTgsMTk5LDIwMCwy''@;'; put 'put ''MDEsMjAyLDIwMyw3NjgsMjA1LDIwNiwyMDcsMjcyLDIwOSw3NzcsMjExLDIxMiw0MTYsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDQzMSw3NzEsMjIzLDIyNCwyMjUsMjI2LDI1OSwyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDc2OSwyMzcsMjM4LDIzOSwyNzMsMjQxLDgw''@;'; put 'put ''MywyNDMsMjQ0LDQxNywyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsNDMyLDgzNjMsMjU1XSwieC1tYWMtY3lyaWxsaWMiOlsxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1Nywx''@;'; put 'put ''MDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsODIyNCwxNzYsMTE2OCwxNjMsMTY3LDgyMjYsMTgyLDEwMzAsMTc0LDE2OSw4NDgyLDEwMjYsMTEwNiw4ODAwLDEwMjcsMTEwNyw4NzM0LDE3Nyw4ODA0LDg4MDUsMTEx''@;'; put 'put ''MCwxODEsMTE2OSwxMDMyLDEwMjgsMTEwOCwxMDMxLDExMTEsMTAzMywxMTEzLDEwMzQsMTExNCwxMTEyLDEwMjksMTcyLDg3MzAsNDAyLDg3NzYsODcxMCwxNzEsMTg3LDgyMzAsMTYwLDEwMzUsMTExNSwxMDM2LDExMTYsMTEwOSw4MjExLDgyMTIsODIyMCw4MjIxLDgyMTYsODIxNywyNDcs''@;'; put 'put ''ODIyMiwxMDM4LDExMTgsMTAzOSwxMTE5LDg0NzAsMTAyNSwxMTA1LDExMDMsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUs''@;'; put 'put ''MTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiw4MzY0XX19KHRoaXN8fHt9KX0sNjQzMTg6ZnVuY3Rpb24odWUscSxfKXshZnVuY3Rpb24oSSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHkoQWUsX3QscnQpe3JldHVybiBfdDw9QWUmJkFlPD1ydH11ZS5leHBvcnRzJiYhSVsiZW5j''@;'; put 'put ''b2RpbmctaW5kZXhlcyJdJiYoSVsiZW5jb2RpbmctaW5kZXhlcyJdPV8oNjc5NTEpWyJlbmNvZGluZy1pbmRleGVzIl0pO3ZhciBCPU1hdGguZmxvb3I7ZnVuY3Rpb24gdyhBZSl7aWYodm9pZCAwPT09QWUpcmV0dXJue307aWYoQWU9PT1PYmplY3QoQWUpKXJldHVybiBBZTt0aHJvdyBUeXBl''@;'; put 'put ''RXJyb3IoIkNvdWxkIG5vdCBjb252ZXJ0IGFyZ3VtZW50IHRvIGRpY3Rpb25hcnkiKX1mdW5jdGlvbiBPKEFlKXtyZXR1cm4gMDw9QWUmJkFlPD0xMjd9dmFyIHo9TyxOPS0xO2Z1bmN0aW9uIEwoQWUpe3RoaXMudG9rZW5zPVtdLnNsaWNlLmNhbGwoQWUpLHRoaXMudG9rZW5zLnJldmVyc2Uo''@;'; put 'put ''KX1MLnByb3RvdHlwZT17ZW5kT2ZTdHJlYW06ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy50b2tlbnMubGVuZ3RofSxyZWFkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9rZW5zLmxlbmd0aD90aGlzLnRva2Vucy5wb3AoKTpOfSxwcmVwZW5kOmZ1bmN0aW9uKEFlKXtpZihBcnJheS5pc0FycmF5''@;'; put 'put ''KEFlKSlmb3IodmFyIF90PUFlO190Lmxlbmd0aDspdGhpcy50b2tlbnMucHVzaChfdC5wb3AoKSk7ZWxzZSB0aGlzLnRva2Vucy5wdXNoKEFlKX0scHVzaDpmdW5jdGlvbihBZSl7aWYoQXJyYXkuaXNBcnJheShBZSkpZm9yKHZhciBfdD1BZTtfdC5sZW5ndGg7KXRoaXMudG9rZW5zLnVuc2hp''@;'; put 'put ''ZnQoX3Quc2hpZnQoKSk7ZWxzZSB0aGlzLnRva2Vucy51bnNoaWZ0KEFlKX19O3ZhciBLPS0xO2Z1bmN0aW9uIFUoQWUsX3Qpe2lmKEFlKXRocm93IFR5cGVFcnJvcigiRGVjb2RlciBlcnJvciIpO3JldHVybiBfdHx8NjU1MzN9ZnVuY3Rpb24gVyhBZSl7dGhyb3cgVHlwZUVycm9yKCJUaGUg''@;'; put 'put ''Y29kZSBwb2ludCAiK0FlKyIgY291bGQgbm90IGJlIGVuY29kZWQuIil9ZnVuY3Rpb24gZWUoQWUpe3JldHVybiBBZT1TdHJpbmcoQWUpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZSxBZSk/cmVbQWVdOm51bGx9dmFyIEo9W3tl''@;'; put 'put ''bmNvZGluZ3M6W3tsYWJlbHM6WyJ1bmljb2RlLTEtMS11dGYtOCIsInV0Zi04IiwidXRmOCJdLG5hbWU6IlVURi04In1dLGhlYWRpbmc6IlRoZSBFbmNvZGluZyJ9LHtlbmNvZGluZ3M6W3tsYWJlbHM6WyI4NjYiLCJjcDg2NiIsImNzaWJtODY2IiwiaWJtODY2Il0sbmFtZToiSUJNODY2In0s''@;'; put 'put ''e2xhYmVsczpbImNzaXNvbGF0aW4yIiwiaXNvLTg4NTktMiIsImlzby1pci0xMDEiLCJpc284ODU5LTIiLCJpc284ODU5MiIsImlzb184ODU5LTIiLCJpc29fODg1OS0yOjE5ODciLCJsMiIsImxhdGluMiJdLG5hbWU6IklTTy04ODU5LTIifSx7bGFiZWxzOlsiY3Npc29sYXRpbjMiLCJpc28t''@;'; put 'put ''ODg1OS0zIiwiaXNvLWlyLTEwOSIsImlzbzg4NTktMyIsImlzbzg4NTkzIiwiaXNvXzg4NTktMyIsImlzb184ODU5LTM6MTk4OCIsImwzIiwibGF0aW4zIl0sbmFtZToiSVNPLTg4NTktMyJ9LHtsYWJlbHM6WyJjc2lzb2xhdGluNCIsImlzby04ODU5LTQiLCJpc28taXItMTEwIiwiaXNvODg1''@;'; put 'put ''OS00IiwiaXNvODg1OTQiLCJpc29fODg1OS00IiwiaXNvXzg4NTktNDoxOTg4IiwibDQiLCJsYXRpbjQiXSxuYW1lOiJJU08tODg1OS00In0se2xhYmVsczpbImNzaXNvbGF0aW5jeXJpbGxpYyIsImN5cmlsbGljIiwiaXNvLTg4NTktNSIsImlzby1pci0xNDQiLCJpc284ODU5LTUiLCJpc284''@;'; put 'put ''ODU5NSIsImlzb184ODU5LTUiLCJpc29fODg1OS01OjE5ODgiXSxuYW1lOiJJU08tODg1OS01In0se2xhYmVsczpbImFyYWJpYyIsImFzbW8tNzA4IiwiY3Npc284ODU5NmUiLCJjc2lzbzg4NTk2aSIsImNzaXNvbGF0aW5hcmFiaWMiLCJlY21hLTExNCIsImlzby04ODU5LTYiLCJpc28tODg1''@;'; put 'put ''OS02LWUiLCJpc28tODg1OS02LWkiLCJpc28taXItMTI3IiwiaXNvODg1OS02IiwiaXNvODg1OTYiLCJpc29fODg1OS02IiwiaXNvXzg4NTktNjoxOTg3Il0sbmFtZToiSVNPLTg4NTktNiJ9LHtsYWJlbHM6WyJjc2lzb2xhdGluZ3JlZWsiLCJlY21hLTExOCIsImVsb3RfOTI4IiwiZ3JlZWsi''@;'; put 'put ''LCJncmVlazgiLCJpc28tODg1OS03IiwiaXNvLWlyLTEyNiIsImlzbzg4NTktNyIsImlzbzg4NTk3IiwiaXNvXzg4NTktNyIsImlzb184ODU5LTc6MTk4NyIsInN1bl9ldV9ncmVlayJdLG5hbWU6IklTTy04ODU5LTcifSx7bGFiZWxzOlsiY3Npc284ODU5OGUiLCJjc2lzb2xhdGluaGVicmV3''@;'; put 'put ''IiwiaGVicmV3IiwiaXNvLTg4NTktOCIsImlzby04ODU5LTgtZSIsImlzby1pci0xMzgiLCJpc284ODU5LTgiLCJpc284ODU5OCIsImlzb184ODU5LTgiLCJpc29fODg1OS04OjE5ODgiLCJ2aXN1YWwiXSxuYW1lOiJJU08tODg1OS04In0se2xhYmVsczpbImNzaXNvODg1OThpIiwiaXNvLTg4''@;'; put 'put ''NTktOC1pIiwibG9naWNhbCJdLG5hbWU6IklTTy04ODU5LTgtSSJ9LHtsYWJlbHM6WyJjc2lzb2xhdGluNiIsImlzby04ODU5LTEwIiwiaXNvLWlyLTE1NyIsImlzbzg4NTktMTAiLCJpc284ODU5MTAiLCJsNiIsImxhdGluNiJdLG5hbWU6IklTTy04ODU5LTEwIn0se2xhYmVsczpbImlzby04''@;'; put 'put ''ODU5LTEzIiwiaXNvODg1OS0xMyIsImlzbzg4NTkxMyJdLG5hbWU6IklTTy04ODU5LTEzIn0se2xhYmVsczpbImlzby04ODU5LTE0IiwiaXNvODg1OS0xNCIsImlzbzg4NTkxNCJdLG5hbWU6IklTTy04ODU5LTE0In0se2xhYmVsczpbImNzaXNvbGF0aW45IiwiaXNvLTg4NTktMTUiLCJpc284''@;'; put 'put ''ODU5LTE1IiwiaXNvODg1OTE1IiwiaXNvXzg4NTktMTUiLCJsOSJdLG5hbWU6IklTTy04ODU5LTE1In0se2xhYmVsczpbImlzby04ODU5LTE2Il0sbmFtZToiSVNPLTg4NTktMTYifSx7bGFiZWxzOlsiY3Nrb2k4ciIsImtvaSIsImtvaTgiLCJrb2k4LXIiLCJrb2k4X3IiXSxuYW1lOiJLT0k4''@;'; put 'put ''LVIifSx7bGFiZWxzOlsia29pOC1ydSIsImtvaTgtdSJdLG5hbWU6IktPSTgtVSJ9LHtsYWJlbHM6WyJjc21hY2ludG9zaCIsIm1hYyIsIm1hY2ludG9zaCIsIngtbWFjLXJvbWFuIl0sbmFtZToibWFjaW50b3NoIn0se2xhYmVsczpbImRvcy04NzQiLCJpc28tODg1OS0xMSIsImlzbzg4NTkt''@;'; put 'put ''MTEiLCJpc284ODU5MTEiLCJ0aXMtNjIwIiwid2luZG93cy04NzQiXSxuYW1lOiJ3aW5kb3dzLTg3NCJ9LHtsYWJlbHM6WyJjcDEyNTAiLCJ3aW5kb3dzLTEyNTAiLCJ4LWNwMTI1MCJdLG5hbWU6IndpbmRvd3MtMTI1MCJ9LHtsYWJlbHM6WyJjcDEyNTEiLCJ3aW5kb3dzLTEyNTEiLCJ4LWNw''@;'; put 'put ''MTI1MSJdLG5hbWU6IndpbmRvd3MtMTI1MSJ9LHtsYWJlbHM6WyJhbnNpX3gzLjQtMTk2OCIsImFzY2lpIiwiY3AxMjUyIiwiY3A4MTkiLCJjc2lzb2xhdGluMSIsImlibTgxOSIsImlzby04ODU5LTEiLCJpc28taXItMTAwIiwiaXNvODg1OS0xIiwiaXNvODg1OTEiLCJpc29fODg1OS0xIiwi''@;'; put 'put ''aXNvXzg4NTktMToxOTg3IiwibDEiLCJsYXRpbjEiLCJ1cy1hc2NpaSIsIndpbmRvd3MtMTI1MiIsIngtY3AxMjUyIl0sbmFtZToid2luZG93cy0xMjUyIn0se2xhYmVsczpbImNwMTI1MyIsIndpbmRvd3MtMTI1MyIsIngtY3AxMjUzIl0sbmFtZToid2luZG93cy0xMjUzIn0se2xhYmVsczpb''@;'; put 'put ''ImNwMTI1NCIsImNzaXNvbGF0aW41IiwiaXNvLTg4NTktOSIsImlzby1pci0xNDgiLCJpc284ODU5LTkiLCJpc284ODU5OSIsImlzb184ODU5LTkiLCJpc29fODg1OS05OjE5ODkiLCJsNSIsImxhdGluNSIsIndpbmRvd3MtMTI1NCIsIngtY3AxMjU0Il0sbmFtZToid2luZG93cy0xMjU0In0s''@;'; put 'put ''e2xhYmVsczpbImNwMTI1NSIsIndpbmRvd3MtMTI1NSIsIngtY3AxMjU1Il0sbmFtZToid2luZG93cy0xMjU1In0se2xhYmVsczpbImNwMTI1NiIsIndpbmRvd3MtMTI1NiIsIngtY3AxMjU2Il0sbmFtZToid2luZG93cy0xMjU2In0se2xhYmVsczpbImNwMTI1NyIsIndpbmRvd3MtMTI1NyIs''@;'; put 'put ''IngtY3AxMjU3Il0sbmFtZToid2luZG93cy0xMjU3In0se2xhYmVsczpbImNwMTI1OCIsIndpbmRvd3MtMTI1OCIsIngtY3AxMjU4Il0sbmFtZToid2luZG93cy0xMjU4In0se2xhYmVsczpbIngtbWFjLWN5cmlsbGljIiwieC1tYWMtdWtyYWluaWFuIl0sbmFtZToieC1tYWMtY3lyaWxsaWMi''@;'; put 'put ''fV0saGVhZGluZzoiTGVnYWN5IHNpbmdsZS1ieXRlIGVuY29kaW5ncyJ9LHtlbmNvZGluZ3M6W3tsYWJlbHM6WyJjaGluZXNlIiwiY3NnYjIzMTIiLCJjc2lzbzU4Z2IyMzEyODAiLCJnYjIzMTIiLCJnYl8yMzEyIiwiZ2JfMjMxMi04MCIsImdiayIsImlzby1pci01OCIsIngtZ2JrIl0sbmFt''@;'; put 'put ''ZToiR0JLIn0se2xhYmVsczpbImdiMTgwMzAiXSxuYW1lOiJnYjE4MDMwIn1dLGhlYWRpbmc6IkxlZ2FjeSBtdWx0aS1ieXRlIENoaW5lc2UgKHNpbXBsaWZpZWQpIGVuY29kaW5ncyJ9LHtlbmNvZGluZ3M6W3tsYWJlbHM6WyJiaWc1IiwiYmlnNS1oa3NjcyIsImNuLWJpZzUiLCJjc2JpZzUi''@;'; put 'put ''LCJ4LXgtYmlnNSJdLG5hbWU6IkJpZzUifV0saGVhZGluZzoiTGVnYWN5IG11bHRpLWJ5dGUgQ2hpbmVzZSAodHJhZGl0aW9uYWwpIGVuY29kaW5ncyJ9LHtlbmNvZGluZ3M6W3tsYWJlbHM6WyJjc2V1Y3BrZGZtdGphcGFuZXNlIiwiZXVjLWpwIiwieC1ldWMtanAiXSxuYW1lOiJFVUMtSlAi''@;'; put 'put ''fSx7bGFiZWxzOlsiY3Npc28yMDIyanAiLCJpc28tMjAyMi1qcCJdLG5hbWU6IklTTy0yMDIyLUpQIn0se2xhYmVsczpbImNzc2hpZnRqaXMiLCJtczkzMiIsIm1zX2thbmppIiwic2hpZnQtamlzIiwic2hpZnRfamlzIiwic2ppcyIsIndpbmRvd3MtMzFqIiwieC1zamlzIl0sbmFtZToiU2hp''@;'; put 'put ''ZnRfSklTIn1dLGhlYWRpbmc6IkxlZ2FjeSBtdWx0aS1ieXRlIEphcGFuZXNlIGVuY29kaW5ncyJ9LHtlbmNvZGluZ3M6W3tsYWJlbHM6WyJjc2V1Y2tyIiwiY3Nrc2M1NjAxMTk4NyIsImV1Yy1rciIsImlzby1pci0xNDkiLCJrb3JlYW4iLCJrc19jXzU2MDEtMTk4NyIsImtzX2NfNTYwMS0x''@;'; put 'put ''OTg5Iiwia3NjNTYwMSIsImtzY181NjAxIiwid2luZG93cy05NDkiXSxuYW1lOiJFVUMtS1IifV0saGVhZGluZzoiTGVnYWN5IG11bHRpLWJ5dGUgS29yZWFuIGVuY29kaW5ncyJ9LHtlbmNvZGluZ3M6W3tsYWJlbHM6WyJjc2lzbzIwMjJrciIsImh6LWdiLTIzMTIiLCJpc28tMjAyMi1jbiIs''@;'; put 'put ''Imlzby0yMDIyLWNuLWV4dCIsImlzby0yMDIyLWtyIl0sbmFtZToicmVwbGFjZW1lbnQifSx7bGFiZWxzOlsidXRmLTE2YmUiXSxuYW1lOiJVVEYtMTZCRSJ9LHtsYWJlbHM6WyJ1dGYtMTYiLCJ1dGYtMTZsZSJdLG5hbWU6IlVURi0xNkxFIn0se2xhYmVsczpbIngtdXNlci1kZWZpbmVkIl0s''@;'; put 'put ''bmFtZToieC11c2VyLWRlZmluZWQifV0saGVhZGluZzoiTGVnYWN5IG1pc2NlbGxhbmVvdXMgZW5jb2RpbmdzIn1dLHJlPXt9O0ouZm9yRWFjaChmdW5jdGlvbihBZSl7QWUuZW5jb2RpbmdzLmZvckVhY2goZnVuY3Rpb24oX3Qpe190LmxhYmVscy5mb3JFYWNoKGZ1bmN0aW9uKHJ0KXtyZVty''@;'; put 'put ''dF09X3R9KX0pfSk7dmFyIHAsaWU9e30sbGU9e307ZnVuY3Rpb24gbWUoQWUsX3Qpe3JldHVybiBfdCYmX3RbQWVdfHxudWxsfWZ1bmN0aW9uIF9lKEFlLF90KXt2YXIgcnQ9X3QuaW5kZXhPZihBZSk7cmV0dXJuLTE9PT1ydD9udWxsOnJ0fWZ1bmN0aW9uIFRlKEFlKXtpZighKCJlbmNvZGlu''@;'; put 'put ''Zy1pbmRleGVzImluIEkpKXRocm93IEVycm9yKCJJbmRleGVzIG1pc3NpbmcuIERpZCB5b3UgZm9yZ2V0IHRvIGluY2x1ZGUgZW5jb2RpbmctaW5kZXhlcy5qcyBmaXJzdD8iKTtyZXR1cm4gSVsiZW5jb2RpbmctaW5kZXhlcyJdW0FlXX12YXIgeCxDPSJ1dGYtOCI7ZnVuY3Rpb24gVChBZSxf''@;'; put 'put ''dCl7aWYoISh0aGlzIGluc3RhbmNlb2YgVCkpdGhyb3cgVHlwZUVycm9yKCJDYWxsZWQgYXMgYSBmdW5jdGlvbi4gRGlkIHlvdSBmb3JnZXQgJ25ldyc/Iik7QWU9dm9pZCAwIT09QWU/U3RyaW5nKEFlKTpDLF90PXcoX3QpLHRoaXMuX2VuY29kaW5nPW51bGwsdGhpcy5fZGVjb2Rlcj1udWxs''@;'; put 'put ''LHRoaXMuX2lnbm9yZUJPTT0hMSx0aGlzLl9CT01zZWVuPSExLHRoaXMuX2Vycm9yX21vZGU9InJlcGxhY2VtZW50Iix0aGlzLl9kb19ub3RfZmx1c2g9ITE7dmFyIHJ0PWVlKEFlKTtpZihudWxsPT09cnR8fCJyZXBsYWNlbWVudCI9PT1ydC5uYW1lKXRocm93IFJhbmdlRXJyb3IoIlVua25v''@;'; put 'put ''d24gZW5jb2Rpbmc6ICIrQWUpO2lmKCFsZVtydC5uYW1lXSl0aHJvdyBFcnJvcigiRGVjb2RlciBub3QgcHJlc2VudC4gRGlkIHlvdSBmb3JnZXQgdG8gaW5jbHVkZSBlbmNvZGluZy1pbmRleGVzLmpzIGZpcnN0PyIpO3ZhciBRZT10aGlzO3JldHVybiBRZS5fZW5jb2Rpbmc9cnQsX3QuZmF0''@;'; put 'put ''YWwmJihRZS5fZXJyb3JfbW9kZT0iZmF0YWwiKSxfdC5pZ25vcmVCT00mJihRZS5faWdub3JlQk9NPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHl8fCh0aGlzLmVuY29kaW5nPVFlLl9lbmNvZGluZy5uYW1lLnRvTG93ZXJDYXNlKCksdGhpcy5mYXRhbD0iZmF0YWwiPT09UWUuX2Vycm9yX21v''@;'; put 'put ''ZGUsdGhpcy5pZ25vcmVCT009UWUuX2lnbm9yZUJPTSksUWV9ZnVuY3Rpb24gSChBZSxfdCl7aWYoISh0aGlzIGluc3RhbmNlb2YgSCkpdGhyb3cgVHlwZUVycm9yKCJDYWxsZWQgYXMgYSBmdW5jdGlvbi4gRGlkIHlvdSBmb3JnZXQgJ25ldyc/Iik7aWYoX3Q9dyhfdCksdGhpcy5fZW5jb2Rp''@;'; put 'put ''bmc9bnVsbCx0aGlzLl9lbmNvZGVyPW51bGwsdGhpcy5fZG9fbm90X2ZsdXNoPSExLHRoaXMuX2ZhdGFsPV90LmZhdGFsPyJmYXRhbCI6InJlcGxhY2VtZW50IixfdC5OT05TVEFOREFSRF9hbGxvd0xlZ2FjeUVuY29kaW5nKXt2YXIgUWU9ZWUoQWU9dm9pZCAwIT09QWU/U3RyaW5nKEFlKTpD''@;'; put 'put ''KTtpZihudWxsPT09UWV8fCJyZXBsYWNlbWVudCI9PT1RZS5uYW1lKXRocm93IFJhbmdlRXJyb3IoIlVua25vd24gZW5jb2Rpbmc6ICIrQWUpO2lmKCFpZVtRZS5uYW1lXSl0aHJvdyBFcnJvcigiRW5jb2RlciBub3QgcHJlc2VudC4gRGlkIHlvdSBmb3JnZXQgdG8gaW5jbHVkZSBlbmNvZGlu''@;'; put 'put ''Zy1pbmRleGVzLmpzIGZpcnN0PyIpO3RoaXMuX2VuY29kaW5nPVFlfWVsc2UgdGhpcy5fZW5jb2Rpbmc9ZWUoInV0Zi04Iiksdm9pZCAwIT09QWUmJiJjb25zb2xlImluIEkmJmNvbnNvbGUud2FybigiVGV4dEVuY29kZXIgY29uc3RydWN0b3IgY2FsbGVkIHdpdGggZW5jb2RpbmcgbGFiZWws''@;'; put 'put ''IHdoaWNoIGlzIGlnbm9yZWQuIik7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eXx8KHRoaXMuZW5jb2Rpbmc9dGhpcy5fZW5jb2RpbmcubmFtZS50b0xvd2VyQ2FzZSgpKSx0aGlzfWZ1bmN0aW9uIGooQWUpe3ZhciBfdD1BZS5mYXRhbCxydD0wLFFlPTAsZG49MCx5dD0xMjgsTXQ9MTkx''@;'; put 'put ''O3RoaXMuaGFuZGxlcj1mdW5jdGlvbihEdCxpdCl7aWYoaXQ9PT1OJiYwIT09ZG4pcmV0dXJuIGRuPTAsVShfdCk7aWYoaXQ9PT1OKXJldHVybiBLO2lmKDA9PT1kbil7aWYoeShpdCwwLDEyNykpcmV0dXJuIGl0O2lmKHkoaXQsMTk0LDIyMykpZG49MSxydD0zMSZpdDtlbHNlIGlmKHkoaXQs''@;'; put 'put ''MjI0LDIzOSkpMjI0PT09aXQmJih5dD0xNjApLDIzNz09PWl0JiYoTXQ9MTU5KSxkbj0yLHJ0PTE1Jml0O2Vsc2V7aWYoIXkoaXQsMjQwLDI0NCkpcmV0dXJuIFUoX3QpOzI0MD09PWl0JiYoeXQ9MTQ0KSwyNDQ9PT1pdCYmKE10PTE0MyksZG49MyxydD03Jml0fXJldHVybiBudWxsfWlmKCF5''@;'; put 'put ''KGl0LHl0LE10KSlyZXR1cm4gcnQ9ZG49UWU9MCx5dD0xMjgsTXQ9MTkxLER0LnByZXBlbmQoaXQpLFUoX3QpO2lmKHl0PTEyOCxNdD0xOTEscnQ9cnQ8PDZ8NjMmaXQsKFFlKz0xKSE9PWRuKXJldHVybiBudWxsO3ZhciAkZT1ydDtyZXR1cm4gcnQ9ZG49UWU9MCwkZX19ZnVuY3Rpb24gRShB''@;'; put 'put ''ZSl7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKHJ0LFFlKXtpZihRZT09PU4pcmV0dXJuIEs7aWYoeihRZSkpcmV0dXJuIFFlO3ZhciBkbix5dDt5KFFlLDEyOCwyMDQ3KT8oZG49MSx5dD0xOTIpOnkoUWUsMjA0OCw2NTUzNSk/KGRuPTIseXQ9MjI0KTp5KFFlLDY1NTM2LDExMTQxMTEpJiYoZG49''@;'; put 'put ''Myx5dD0yNDApO2Zvcih2YXIgTXQ9WyhRZT4+NipkbikreXRdO2RuPjA7KU10LnB1c2goMTI4fDYzJlFlPj42Kihkbi0xKSksZG4tPTE7cmV0dXJuIE10fX1mdW5jdGlvbiBtKEFlLF90KXt2YXIgcnQ9X3QuZmF0YWw7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKFFlLGRuKXtpZihkbj09PU4pcmV0''@;'; put 'put ''dXJuIEs7aWYoTyhkbikpcmV0dXJuIGRuO3ZhciB5dD1BZVtkbi0xMjhdO3JldHVybiBudWxsPT09eXQ/VShydCk6eXR9fWZ1bmN0aW9uIEEoQWUsX3Qpe3RoaXMuaGFuZGxlcj1mdW5jdGlvbihRZSxkbil7aWYoZG49PT1OKXJldHVybiBLO2lmKHooZG4pKXJldHVybiBkbjt2YXIgeXQ9X2Uo''@;'; put 'put ''ZG4sQWUpO3JldHVybiBudWxsPT09eXQmJlcoZG4pLHl0KzEyOH19ZnVuY3Rpb24gb2UoQWUpe3ZhciBfdD1BZS5mYXRhbCxydD0wLFFlPTAsZG49MDt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oeXQsTXQpe2lmKE10PT09TiYmMD09PXJ0JiYwPT09UWUmJjA9PT1kbilyZXR1cm4gSzt2YXIgRHQ7''@;'; put 'put ''aWYoTXQ9PT1OJiYoMCE9PXJ0fHwwIT09UWV8fDAhPT1kbikmJihydD0wLFFlPTAsZG49MCxVKF90KSksMCE9PWRuKXtEdD1udWxsLHkoTXQsNDgsNTcpJiYoRHQ9ZnVuY3Rpb24gU2UoQWUpe2lmKEFlPjM5NDE5JiZBZTwxODllM3x8QWU+MTIzNzU3NSlyZXR1cm4gbnVsbDtpZig3NDU3PT09''@;'; put 'put ''QWUpcmV0dXJuIDU5MzM1O3ZhciBkbixfdD0wLHJ0PTAsUWU9VGUoImdiMTgwMzAtcmFuZ2VzIik7Zm9yKGRuPTA7ZG48UWUubGVuZ3RoOysrZG4pe3ZhciB5dD1RZVtkbl07aWYoISh5dFswXTw9QWUpKWJyZWFrO190PXl0WzBdLHJ0PXl0WzFdfXJldHVybiBydCtBZS1fdH0oMTAqKDEyNioo''@;'; put 'put ''MTAqKHJ0LTEyOSkrUWUtNDgpK2RuLTEyOSkrTXQtNDgpKTt2YXIgaXQ9W1FlLGRuLE10XTtyZXR1cm4gcnQ9MCxRZT0wLGRuPTAsbnVsbD09PUR0Pyh5dC5wcmVwZW5kKGl0KSxVKF90KSk6RHR9aWYoMCE9PVFlKXJldHVybiB5KE10LDEyOSwyNTQpPyhkbj1NdCxudWxsKTooeXQucHJlcGVu''@;'; put 'put ''ZChbUWUsTXRdKSxydD0wLFFlPTAsVShfdCkpO2lmKDAhPT1ydCl7aWYoeShNdCw0OCw1NykpcmV0dXJuIFFlPU10LG51bGw7dmFyICRlPXJ0LHR0PW51bGw7cnQ9MDt2YXIgSGU9TXQ8MTI3PzY0OjY1O3JldHVybih5KE10LDY0LDEyNil8fHkoTXQsMTI4LDI1NCkpJiYodHQ9MTkwKigkZS0x''@;'; put 'put ''MjkpKyhNdC1IZSkpLG51bGw9PT0oRHQ9bnVsbD09PXR0P251bGw6bWUodHQsVGUoImdiMTgwMzAiKSkpJiZPKE10KSYmeXQucHJlcGVuZChNdCksbnVsbD09PUR0P1UoX3QpOkR0fXJldHVybiBPKE10KT9NdDoxMjg9PT1NdD84MzY0OnkoTXQsMTI5LDI1NCk/KHJ0PU10LG51bGwpOlUoX3Qp''@;'; put 'put ''fX1mdW5jdGlvbiB0ZShBZSxfdCl7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKFFlLGRuKXtpZihkbj09PU4pcmV0dXJuIEs7aWYoeihkbikpcmV0dXJuIGRuO2lmKDU4ODUzPT09ZG4pcmV0dXJuIFcoZG4pO2lmKF90JiY4MzY0PT09ZG4pcmV0dXJuIDEyODt2YXIgeXQ9X2UoZG4sVGUoImdiMTgw''@;'; put 'put ''MzAiKSk7aWYobnVsbCE9PXl0KXt2YXIgRHQ9eXQlMTkwO3JldHVybltCKHl0LzE5MCkrMTI5LER0KyhEdDw2Mz82NDo2NSldfWlmKF90KXJldHVybiBXKGRuKTt5dD1mdW5jdGlvbiB6ZShBZSl7aWYoNTkzMzU9PT1BZSlyZXR1cm4gNzQ1Nzt2YXIgZG4sX3Q9MCxydD0wLFFlPVRlKCJnYjE4''@;'; put 'put ''MDMwLXJhbmdlcyIpO2Zvcihkbj0wO2RuPFFlLmxlbmd0aDsrK2RuKXt2YXIgeXQ9UWVbZG5dO2lmKCEoeXRbMV08PUFlKSlicmVhaztfdD15dFsxXSxydD15dFswXX1yZXR1cm4gcnQrQWUtX3R9KGRuKTt2YXIgJGU9Qih5dC8xMC8xMjYvMTApLHR0PUIoKHl0LT0xMCokZSoxMjYqMTApLzEw''@;'; put 'put ''LzEyNiksSGU9QigoeXQtPTEwKnR0KjEyNikvMTApO3JldHVyblskZSsxMjksdHQrNDgsSGUrMTI5LHl0LTEwKkhlKzQ4XX19ZnVuY3Rpb24gc2UoQWUpe3ZhciBfdD1BZS5mYXRhbCxydD0wO3RoaXMuaGFuZGxlcj1mdW5jdGlvbihRZSxkbil7aWYoZG49PT1OJiYwIT09cnQpcmV0dXJuIHJ0''@;'; put 'put ''PTAsVShfdCk7aWYoZG49PT1OJiYwPT09cnQpcmV0dXJuIEs7aWYoMCE9PXJ0KXt2YXIgeXQ9cnQsTXQ9bnVsbDtydD0wO3ZhciBEdD1kbjwxMjc/NjQ6OTg7c3dpdGNoKCh5KGRuLDY0LDEyNil8fHkoZG4sMTYxLDI1NCkpJiYoTXQ9MTU3Kih5dC0xMjkpKyhkbi1EdCkpLE10KXtjYXNlIDEx''@;'; put 'put ''MzM6cmV0dXJuWzIwMiw3NzJdO2Nhc2UgMTEzNTpyZXR1cm5bMjAyLDc4MF07Y2FzZSAxMTY0OnJldHVyblsyMzQsNzcyXTtjYXNlIDExNjY6cmV0dXJuWzIzNCw3ODBdfXZhciBpdD1udWxsPT09TXQ/bnVsbDptZShNdCxUZSgiYmlnNSIpKTtyZXR1cm4gbnVsbD09PWl0JiZPKGRuKSYmUWUu''@;'; put 'put ''cHJlcGVuZChkbiksbnVsbD09PWl0P1UoX3QpOml0fXJldHVybiBPKGRuKT9kbjp5KGRuLDEyOSwyNTQpPyhydD1kbixudWxsKTpVKF90KX19ZnVuY3Rpb24gd2UoQWUpe3RoaXMuaGFuZGxlcj1mdW5jdGlvbihydCxRZSl7aWYoUWU9PT1OKXJldHVybiBLO2lmKHooUWUpKXJldHVybiBRZTt2''@;'; put 'put ''YXIgZG49ZnVuY3Rpb24gYihBZSl7dmFyIF90PXg9eHx8VGUoImJpZzUiKS5tYXAoZnVuY3Rpb24ocnQsUWUpe3JldHVybiBRZTw1MDI0P251bGw6cnR9KTtyZXR1cm4gOTU1Mj09PUFlfHw5NTY2PT09QWV8fDk1Njk9PT1BZXx8OTU3OD09PUFlfHwyMTMxMz09PUFlfHwyMTMxNz09PUFlP190''@;'; put 'put ''Lmxhc3RJbmRleE9mKEFlKTpfZShBZSxfdCl9KFFlKTtpZihudWxsPT09ZG4pcmV0dXJuIFcoUWUpO3ZhciB5dD1CKGRuLzE1NykrMTI5O2lmKHl0PDE2MSlyZXR1cm4gVyhRZSk7dmFyIE10PWRuJTE1NztyZXR1cm5beXQsTXQrKE10PDYzPzY0Ojk4KV19fWZ1bmN0aW9uIFVlKEFlKXt2YXIg''@;'; put 'put ''X3Q9QWUuZmF0YWwscnQ9ITEsUWU9MDt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oZG4seXQpe2lmKHl0PT09TiYmMCE9PVFlKXJldHVybiBRZT0wLFUoX3QpO2lmKHl0PT09TiYmMD09PVFlKXJldHVybiBLO2lmKDE0Mj09PVFlJiZ5KHl0LDE2MSwyMjMpKXJldHVybiBRZT0wLDY1MjE2K3l0O2lm''@;'; put 'put ''KDE0Mz09PVFlJiZ5KHl0LDE2MSwyNTQpKXJldHVybiBydD0hMCxRZT15dCxudWxsO2lmKDAhPT1RZSl7dmFyIE10PVFlO1FlPTA7dmFyIER0PW51bGw7cmV0dXJuIHkoTXQsMTYxLDI1NCkmJnkoeXQsMTYxLDI1NCkmJihEdD1tZSg5NCooTXQtMTYxKSsoeXQtMTYxKSxUZShydD8iamlzMDIx''@;'; put 'put ''MiI6ImppczAyMDgiKSkpLHJ0PSExLHkoeXQsMTYxLDI1NCl8fGRuLnByZXBlbmQoeXQpLG51bGw9PT1EdD9VKF90KTpEdH1yZXR1cm4gTyh5dCk/eXQ6MTQyPT09eXR8fDE0Mz09PXl0fHx5KHl0LDE2MSwyNTQpPyhRZT15dCxudWxsKTpVKF90KX19ZnVuY3Rpb24gSmUoQWUpe3RoaXMuaGFu''@;'; put 'put ''ZGxlcj1mdW5jdGlvbihydCxRZSl7aWYoUWU9PT1OKXJldHVybiBLO2lmKHooUWUpKXJldHVybiBRZTtpZigxNjU9PT1RZSlyZXR1cm4gOTI7aWYoODI1ND09PVFlKXJldHVybiAxMjY7aWYoeShRZSw2NTM3Nyw2NTQzOSkpcmV0dXJuWzE0MixRZS02NTM3NysxNjFdOzg3MjI9PT1RZSYmKFFl''@;'; put 'put ''PTY1MjkzKTt2YXIgZG49X2UoUWUsVGUoImppczAyMDgiKSk7cmV0dXJuIG51bGw9PT1kbj9XKFFlKTpbQihkbi85NCkrMTYxLGRuJTk0KzE2MV19fWZ1bmN0aW9uIGF0KEFlKXt2YXIgX3Q9QWUuZmF0YWwsUWU9MCx5dD0wLE10PSExO3RoaXMuaGFuZGxlcj1mdW5jdGlvbihEdCxpdCl7c3dp''@;'; put 'put ''dGNoKFFlKXtkZWZhdWx0OmNhc2UgMDpyZXR1cm4gMjc9PT1pdD8oUWU9NSxudWxsKTp5KGl0LDAsMTI3KSYmMTQhPT1pdCYmMTUhPT1pdCYmMjchPT1pdD8oTXQ9ITEsaXQpOml0PT09Tj9LOihNdD0hMSxVKF90KSk7Y2FzZSAxOnJldHVybiAyNz09PWl0PyhRZT01LG51bGwpOjkyPT09aXQ/''@;'; put 'put ''KE10PSExLDE2NSk6MTI2PT09aXQ/KE10PSExLDgyNTQpOnkoaXQsMCwxMjcpJiYxNCE9PWl0JiYxNSE9PWl0JiYyNyE9PWl0JiY5MiE9PWl0JiYxMjYhPT1pdD8oTXQ9ITEsaXQpOml0PT09Tj9LOihNdD0hMSxVKF90KSk7Y2FzZSAyOnJldHVybiAyNz09PWl0PyhRZT01LG51bGwpOnkoaXQs''@;'; put 'put ''MzMsOTUpPyhNdD0hMSw2NTM0NCtpdCk6aXQ9PT1OP0s6KE10PSExLFUoX3QpKTtjYXNlIDM6cmV0dXJuIDI3PT09aXQ/KFFlPTUsbnVsbCk6eShpdCwzMywxMjYpPyhNdD0hMSx5dD1pdCxRZT00LG51bGwpOml0PT09Tj9LOihNdD0hMSxVKF90KSk7Y2FzZSA0OmlmKDI3PT09aXQpcmV0dXJu''@;'; put 'put ''IFFlPTUsVShfdCk7aWYoeShpdCwzMywxMjYpKXtRZT0zO3ZhciB0dD1tZSg5NCooeXQtMzMpK2l0LTMzLFRlKCJqaXMwMjA4IikpO3JldHVybiBudWxsPT09dHQ/VShfdCk6dHR9cmV0dXJuIGl0PT09Tj8oUWU9MyxEdC5wcmVwZW5kKGl0KSxVKF90KSk6KFFlPTMsVShfdCkpO2Nhc2UgNTpy''@;'; put 'put ''ZXR1cm4gMzY9PT1pdHx8NDA9PT1pdD8oeXQ9aXQsUWU9NixudWxsKTooRHQucHJlcGVuZChpdCksTXQ9ITEsUWU9MCxVKF90KSk7Y2FzZSA2OnZhciBIZT15dDt5dD0wO3ZhciBkdD1udWxsO2lmKDQwPT09SGUmJjY2PT09aXQmJihkdD0wKSw0MD09PUhlJiY3ND09PWl0JiYoZHQ9MSksNDA9''@;'; put 'put ''PT1IZSYmNzM9PT1pdCYmKGR0PTIpLDM2PT09SGUmJig2ND09PWl0fHw2Nj09PWl0KSYmKGR0PTMpLG51bGwhPT1kdCl7UWU9UWU9ZHQ7dmFyIHF0PU10O3JldHVybiBNdD0hMCxxdD9VKF90KTpudWxsfXJldHVybiBEdC5wcmVwZW5kKFtIZSxpdF0pLE10PSExLFFlPTAsVShfdCl9fX1mdW5j''@;'; put 'put ''dGlvbiBNZShBZSl7dmFyIFFlPTA7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKGRuLHl0KXtpZih5dD09PU4mJjAhPT1RZSlyZXR1cm4gZG4ucHJlcGVuZCh5dCksUWU9MCxbMjcsNDAsNjZdO2lmKHl0PT09TiYmMD09PVFlKXJldHVybiBLO2lmKCEoMCE9PVFlJiYxIT09UWV8fDE0IT09eXQmJjE1''@;'; put 'put ''IT09eXQmJjI3IT09eXQpKXJldHVybiBXKDY1NTMzKTtpZigwPT09UWUmJnooeXQpKXJldHVybiB5dDtpZigxPT09UWUmJih6KHl0KSYmOTIhPT15dCYmMTI2IT09eXR8fDE2NT09eXR8fDgyNTQ9PXl0KSl7aWYoeih5dCkpcmV0dXJuIHl0O2lmKDE2NT09PXl0KXJldHVybiA5MjtpZig4MjU0''@;'; put 'put ''PT09eXQpcmV0dXJuIDEyNn1pZih6KHl0KSYmMCE9PVFlKXJldHVybiBkbi5wcmVwZW5kKHl0KSxRZT0wLFsyNyw0MCw2Nl07aWYoKDE2NT09PXl0fHw4MjU0PT09eXQpJiYxIT09UWUpcmV0dXJuIGRuLnByZXBlbmQoeXQpLFFlPTEsWzI3LDQwLDc0XTs4NzIyPT09eXQmJih5dD02NTI5Myk7''@;'; put 'put ''dmFyIE10PV9lKHl0LFRlKCJqaXMwMjA4IikpO3JldHVybiBudWxsPT09TXQ/Vyh5dCk6MiE9PVFlPyhkbi5wcmVwZW5kKHl0KSxRZT0yLFsyNywzNiw2Nl0pOltCKE10Lzk0KSszMyxNdCU5NCszM119fWZ1bmN0aW9uIHZlKEFlKXt2YXIgX3Q9QWUuZmF0YWwscnQ9MDt0aGlzLmhhbmRsZXI9''@;'; put 'put ''ZnVuY3Rpb24oUWUsZG4pe2lmKGRuPT09TiYmMCE9PXJ0KXJldHVybiBydD0wLFUoX3QpO2lmKGRuPT09TiYmMD09PXJ0KXJldHVybiBLO2lmKDAhPT1ydCl7dmFyIHl0PXJ0LE10PW51bGw7cnQ9MDt2YXIgRHQ9ZG48MTI3PzY0OjY1LGl0PXl0PDE2MD8xMjk6MTkzO2lmKCh5KGRuLDY0LDEy''@;'; put 'put ''Nil8fHkoZG4sMTI4LDI1MikpJiYoTXQ9MTg4Kih5dC1pdCkrZG4tRHQpLHkoTXQsODgzNiwxMDcxNSkpcmV0dXJuIDQ4NTA4K010O3ZhciAkZT1udWxsPT09TXQ/bnVsbDptZShNdCxUZSgiamlzMDIwOCIpKTtyZXR1cm4gbnVsbD09PSRlJiZPKGRuKSYmUWUucHJlcGVuZChkbiksbnVsbD09''@;'; put 'put ''PSRlP1UoX3QpOiRlfXJldHVybiBPKGRuKXx8MTI4PT09ZG4/ZG46eShkbiwxNjEsMjIzKT82NTIxNitkbjp5KGRuLDEyOSwxNTkpfHx5KGRuLDIyNCwyNTIpPyhydD1kbixudWxsKTpVKF90KX19ZnVuY3Rpb24gWGUoQWUpe3RoaXMuaGFuZGxlcj1mdW5jdGlvbihydCxRZSl7aWYoUWU9PT1O''@;'; put 'put ''KXJldHVybiBLO2lmKHooUWUpfHwxMjg9PT1RZSlyZXR1cm4gUWU7aWYoMTY1PT09UWUpcmV0dXJuIDkyO2lmKDgyNTQ9PT1RZSlyZXR1cm4gMTI2O2lmKHkoUWUsNjUzNzcsNjU0MzkpKXJldHVybiBRZS02NTM3NysxNjE7ODcyMj09PVFlJiYoUWU9NjUyOTMpO3ZhciBkbj1mdW5jdGlvbiBW''@;'; put 'put ''KEFlKXtyZXR1cm4ocD1wfHxUZSgiamlzMDIwOCIpLm1hcChmdW5jdGlvbihydCxRZSl7cmV0dXJuIHkoUWUsODI3Miw4ODM1KT9udWxsOnJ0fSkpLmluZGV4T2YoQWUpfShRZSk7aWYobnVsbD09PWRuKXJldHVybiBXKFFlKTt2YXIgeXQ9Qihkbi8xODgpLER0PWRuJTE4ODtyZXR1cm5beXQr''@;'; put 'put ''KHl0PDMxPzEyOToxOTMpLER0KyhEdDw2Mz82NDo2NSldfX1mdW5jdGlvbiBqZShBZSl7dmFyIF90PUFlLmZhdGFsLHJ0PTA7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKFFlLGRuKXtpZihkbj09PU4mJjAhPT1ydClyZXR1cm4gcnQ9MCxVKF90KTtpZihkbj09PU4mJjA9PT1ydClyZXR1cm4gSztp''@;'; put 'put ''ZigwIT09cnQpe3ZhciB5dD1ydCxNdD1udWxsO3J0PTAseShkbiw2NSwyNTQpJiYoTXQ9MTkwKih5dC0xMjkpKyhkbi02NSkpO3ZhciBEdD1udWxsPT09TXQ/bnVsbDptZShNdCxUZSgiZXVjLWtyIikpO3JldHVybiBudWxsPT09TXQmJk8oZG4pJiZRZS5wcmVwZW5kKGRuKSxudWxsPT09RHQ/''@;'; put 'put ''VShfdCk6RHR9cmV0dXJuIE8oZG4pP2RuOnkoZG4sMTI5LDI1NCk/KHJ0PWRuLG51bGwpOlUoX3QpfX1mdW5jdGlvbiBEZShBZSl7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKHJ0LFFlKXtpZihRZT09PU4pcmV0dXJuIEs7aWYoeihRZSkpcmV0dXJuIFFlO3ZhciBkbj1fZShRZSxUZSgiZXVjLWty''@;'; put 'put ''IikpO3JldHVybiBudWxsPT09ZG4/VyhRZSk6W0IoZG4vMTkwKSsxMjksZG4lMTkwKzY1XX19ZnVuY3Rpb24gRmUoQWUsX3Qpe3ZhciBydD1BZT4+OCxRZT0yNTUmQWU7cmV0dXJuIF90P1tydCxRZV06W1FlLHJ0XX1mdW5jdGlvbiBSZShBZSxfdCl7dmFyIHJ0PV90LmZhdGFsLFFlPW51bGws''@;'; put 'put ''ZG49bnVsbDt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oeXQsTXQpe2lmKE10PT09TiYmKG51bGwhPT1RZXx8bnVsbCE9PWRuKSlyZXR1cm4gVShydCk7aWYoTXQ9PT1OJiZudWxsPT09UWUmJm51bGw9PT1kbilyZXR1cm4gSztpZihudWxsPT09UWUpcmV0dXJuIFFlPU10LG51bGw7dmFyIER0O2lm''@;'; put 'put ''KER0PUFlPyhRZTw8OCkrTXQ6KE10PDw4KStRZSxRZT1udWxsLG51bGwhPT1kbil7dmFyIGl0PWRuO3JldHVybiBkbj1udWxsLHkoRHQsNTYzMjAsNTczNDMpPzY1NTM2KzEwMjQqKGl0LTU1Mjk2KSsoRHQtNTYzMjApOih5dC5wcmVwZW5kKEZlKER0LEFlKSksVShydCkpfXJldHVybiB5KER0''@;'; put 'put ''LDU1Mjk2LDU2MzE5KT8oZG49RHQsbnVsbCk6eShEdCw1NjMyMCw1NzM0Myk/VShydCk6RHR9fWZ1bmN0aW9uIEllKEFlLF90KXt0aGlzLmhhbmRsZXI9ZnVuY3Rpb24oUWUsZG4pe2lmKGRuPT09TilyZXR1cm4gSztpZih5KGRuLDAsNjU1MzUpKXJldHVybiBGZShkbixBZSk7dmFyIHl0PUZl''@;'; put 'put ''KDU1Mjk2Kyhkbi02NTUzNj4+MTApLEFlKSxNdD1GZSg1NjMyMCsoZG4tNjU1MzYmMTAyMyksQWUpO3JldHVybiB5dC5jb25jYXQoTXQpfX1mdW5jdGlvbiBWZShBZSl7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKHJ0LFFlKXtyZXR1cm4gUWU9PT1OP0s6TyhRZSk/UWU6NjMzNjArUWUtMTI4fX1m''@;'; put 'put ''dW5jdGlvbiBrZShBZSl7dGhpcy5oYW5kbGVyPWZ1bmN0aW9uKHJ0LFFlKXtyZXR1cm4gUWU9PT1OP0s6eihRZSk/UWU6eShRZSw2MzM2MCw2MzQ4Nyk/UWUtNjMzNjArMTI4OlcoUWUpfX1PYmplY3QuZGVmaW5lUHJvcGVydHkmJihPYmplY3QuZGVmaW5lUHJvcGVydHkoVC5wcm90b3R5cGUs''@;'; put 'put ''ImVuY29kaW5nIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2VuY29kaW5nLm5hbWUudG9Mb3dlckNhc2UoKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoVC5wcm90b3R5cGUsImZhdGFsIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuImZhdGFsIj09PXRoaXMuX2Vycm9yX21vZGV9fSks''@;'; put 'put ''T2JqZWN0LmRlZmluZVByb3BlcnR5KFQucHJvdG90eXBlLCJpZ25vcmVCT00iLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faWdub3JlQk9NfX0pKSxULnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24oX3QscnQpe3ZhciBRZTtRZT0ib2JqZWN0Ij09dHlwZW9mIF90JiZfdCBpbnN0YW5j''@;'; put 'put ''ZW9mIEFycmF5QnVmZmVyP25ldyBVaW50OEFycmF5KF90KToib2JqZWN0Ij09dHlwZW9mIF90JiYiYnVmZmVyImluIF90JiZfdC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj9uZXcgVWludDhBcnJheShfdC5idWZmZXIsX3QuYnl0ZU9mZnNldCxfdC5ieXRlTGVuZ3RoKTpuZXcgVWlu''@;'; put 'put ''dDhBcnJheSgwKSxydD13KHJ0KSx0aGlzLl9kb19ub3RfZmx1c2h8fCh0aGlzLl9kZWNvZGVyPWxlW3RoaXMuX2VuY29kaW5nLm5hbWVdKHtmYXRhbDoiZmF0YWwiPT09dGhpcy5fZXJyb3JfbW9kZX0pLHRoaXMuX0JPTXNlZW49ITEpLHRoaXMuX2RvX25vdF9mbHVzaD0hIXJ0LnN0cmVhbTtm''@;'; put 'put ''b3IodmFyIE10LGRuPW5ldyBMKFFlKSx5dD1bXTs7KXt2YXIgRHQ9ZG4ucmVhZCgpO2lmKER0PT09Tnx8KE10PXRoaXMuX2RlY29kZXIuaGFuZGxlcihkbixEdCkpPT09SylicmVhaztudWxsIT09TXQmJihBcnJheS5pc0FycmF5KE10KT95dC5wdXNoLmFwcGx5KHl0LE10KTp5dC5wdXNoKE10''@;'; put 'put ''KSl9aWYoIXRoaXMuX2RvX25vdF9mbHVzaCl7ZG97aWYoKE10PXRoaXMuX2RlY29kZXIuaGFuZGxlcihkbixkbi5yZWFkKCkpKT09PUspYnJlYWs7bnVsbCE9PU10JiYoQXJyYXkuaXNBcnJheShNdCk/eXQucHVzaC5hcHBseSh5dCxNdCk6eXQucHVzaChNdCkpfXdoaWxlKCFkbi5lbmRPZlN0''@;'; put 'put ''cmVhbSgpKTt0aGlzLl9kZWNvZGVyPW51bGx9cmV0dXJuIGZ1bmN0aW9uIGl0KCRlKXtyZXR1cm4gZnVuY3Rpb24gZyhBZSxfdCl7cmV0dXJuLTEhPT1BZS5pbmRleE9mKF90KX0oWyJVVEYtOCIsIlVURi0xNkxFIiwiVVRGLTE2QkUiXSx0aGlzLl9lbmNvZGluZy5uYW1lKSYmIXRoaXMuX2ln''@;'; put 'put ''bm9yZUJPTSYmIXRoaXMuX0JPTXNlZW4mJigkZS5sZW5ndGg+MCYmNjUyNzk9PT0kZVswXT8odGhpcy5fQk9Nc2Vlbj0hMCwkZS5zaGlmdCgpKTokZS5sZW5ndGg+MCYmKHRoaXMuX0JPTXNlZW49ITApKSxmdW5jdGlvbiBGKEFlKXtmb3IodmFyIF90PSIiLHJ0PTA7cnQ8QWUubGVuZ3RoOysr''@;'; put 'put ''cnQpe3ZhciBRZT1BZVtydF07UWU8PTY1NTM1P190Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKFFlKTooUWUtPTY1NTM2LF90Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2KyhRZT4+MTApLDU2MzIwKygxMDIzJlFlKSkpfXJldHVybiBfdH0oJGUpfS5jYWxsKHRoaXMseXQpfSxPYmplY3QuZGVm''@;'; put 'put ''aW5lUHJvcGVydHkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShILnByb3RvdHlwZSwiZW5jb2RpbmciLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZW5jb2RpbmcubmFtZS50b0xvd2VyQ2FzZSgpfX0pLEgucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbihfdCxydCl7X3Q9dm9pZCAwPT09''@;'; put 'put ''X3Q/IiI6U3RyaW5nKF90KSxydD13KHJ0KSx0aGlzLl9kb19ub3RfZmx1c2h8fCh0aGlzLl9lbmNvZGVyPWllW3RoaXMuX2VuY29kaW5nLm5hbWVdKHtmYXRhbDoiZmF0YWwiPT09dGhpcy5fZmF0YWx9KSksdGhpcy5fZG9fbm90X2ZsdXNoPSEhcnQuc3RyZWFtO2Zvcih2YXIgeXQsUWU9bmV3''@;'; put 'put ''IEwoZnVuY3Rpb24gUChBZSl7Zm9yKHZhciBfdD1TdHJpbmcoQWUpLHJ0PV90Lmxlbmd0aCxRZT0wLGRuPVtdO1FlPHJ0Oyl7dmFyIHl0PV90LmNoYXJDb2RlQXQoUWUpO2lmKHl0PDU1Mjk2fHx5dD41NzM0Mylkbi5wdXNoKHl0KTtlbHNlIGlmKDU2MzIwPD15dCYmeXQ8PTU3MzQzKWRuLnB1''@;'; put 'put ''c2goNjU1MzMpO2Vsc2UgaWYoNTUyOTY8PXl0JiZ5dDw9NTYzMTkpaWYoUWU9PT1ydC0xKWRuLnB1c2goNjU1MzMpO2Vsc2V7dmFyIE10PV90LmNoYXJDb2RlQXQoUWUrMSk7NTYzMjA8PU10JiZNdDw9NTczNDM/KGRuLnB1c2goNjU1MzYrKCgxMDIzJnl0KTw8MTApKygxMDIzJk10KSksUWUr''@;'; put 'put ''PTEpOmRuLnB1c2goNjU1MzMpfVFlKz0xfXJldHVybiBkbn0oX3QpKSxkbj1bXTs7KXt2YXIgTXQ9UWUucmVhZCgpO2lmKE10PT09Tnx8KHl0PXRoaXMuX2VuY29kZXIuaGFuZGxlcihRZSxNdCkpPT09SylicmVhaztBcnJheS5pc0FycmF5KHl0KT9kbi5wdXNoLmFwcGx5KGRuLHl0KTpkbi5w''@;'; put 'put ''dXNoKHl0KX1pZighdGhpcy5fZG9fbm90X2ZsdXNoKXtmb3IoOyh5dD10aGlzLl9lbmNvZGVyLmhhbmRsZXIoUWUsUWUucmVhZCgpKSkhPT1LOylBcnJheS5pc0FycmF5KHl0KT9kbi5wdXNoLmFwcGx5KGRuLHl0KTpkbi5wdXNoKHl0KTt0aGlzLl9lbmNvZGVyPW51bGx9cmV0dXJuIG5ldyBV''@;'; put 'put ''aW50OEFycmF5KGRuKX0saWVbIlVURi04Il09ZnVuY3Rpb24oQWUpe3JldHVybiBuZXcgRShBZSl9LGxlWyJVVEYtOCJdPWZ1bmN0aW9uKEFlKXtyZXR1cm4gbmV3IGooQWUpfSwiZW5jb2RpbmctaW5kZXhlcyJpbiBJJiZKLmZvckVhY2goZnVuY3Rpb24oQWUpeyJMZWdhY3kgc2luZ2xlLWJ5''@;'; put 'put ''dGUgZW5jb2RpbmdzIj09PUFlLmhlYWRpbmcmJkFlLmVuY29kaW5ncy5mb3JFYWNoKGZ1bmN0aW9uKF90KXt2YXIgcnQ9X3QubmFtZSxRZT1UZShydC50b0xvd2VyQ2FzZSgpKTtsZVtydF09ZnVuY3Rpb24oZG4pe3JldHVybiBuZXcgbShRZSxkbil9LGllW3J0XT1mdW5jdGlvbihkbil7cmV0''@;'; put 'put ''dXJuIG5ldyBBKFFlLGRuKX19KX0pLGxlLkdCSz1mdW5jdGlvbihBZSl7cmV0dXJuIG5ldyBvZShBZSl9LGllLkdCSz1mdW5jdGlvbihBZSl7cmV0dXJuIG5ldyB0ZShBZSwhMCl9LGllLmdiMTgwMzA9ZnVuY3Rpb24oQWUpe3JldHVybiBuZXcgdGUoQWUpfSxsZS5nYjE4MDMwPWZ1bmN0aW9u''@;'; put 'put ''KEFlKXtyZXR1cm4gbmV3IG9lKEFlKX0saWUuQmlnNT1mdW5jdGlvbihBZSl7cmV0dXJuIG5ldyB3ZShBZSl9LGxlLkJpZzU9ZnVuY3Rpb24oQWUpe3JldHVybiBuZXcgc2UoQWUpfSxpZVsiRVVDLUpQIl09ZnVuY3Rpb24oQWUpe3JldHVybiBuZXcgSmUoQWUpfSxsZVsiRVVDLUpQIl09ZnVu''@;'; put 'put ''Y3Rpb24oQWUpe3JldHVybiBuZXcgVWUoQWUpfSxpZVsiSVNPLTIwMjItSlAiXT1mdW5jdGlvbihBZSl7cmV0dXJuIG5ldyBNZShBZSl9LGxlWyJJU08tMjAyMi1KUCJdPWZ1bmN0aW9uKEFlKXtyZXR1cm4gbmV3IGF0KEFlKX0saWUuU2hpZnRfSklTPWZ1bmN0aW9uKEFlKXtyZXR1cm4gbmV3''@;'; put 'put ''IFhlKEFlKX0sbGUuU2hpZnRfSklTPWZ1bmN0aW9uKEFlKXtyZXR1cm4gbmV3IHZlKEFlKX0saWVbIkVVQy1LUiJdPWZ1bmN0aW9uKEFlKXtyZXR1cm4gbmV3IERlKEFlKX0sbGVbIkVVQy1LUiJdPWZ1bmN0aW9uKEFlKXtyZXR1cm4gbmV3IGplKEFlKX0saWVbIlVURi0xNkJFIl09ZnVuY3Rp''@;'; put 'put ''b24oQWUpe3JldHVybiBuZXcgSWUoITAsQWUpfSxsZVsiVVRGLTE2QkUiXT1mdW5jdGlvbihBZSl7cmV0dXJuIG5ldyBSZSghMCxBZSl9LGllWyJVVEYtMTZMRSJdPWZ1bmN0aW9uKEFlKXtyZXR1cm4gbmV3IEllKCExLEFlKX0sbGVbIlVURi0xNkxFIl09ZnVuY3Rpb24oQWUpe3JldHVybiBu''@;'; put 'put ''ZXcgUmUoITEsQWUpfSxpZVsieC11c2VyLWRlZmluZWQiXT1mdW5jdGlvbihBZSl7cmV0dXJuIG5ldyBrZShBZSl9LGxlWyJ4LXVzZXItZGVmaW5lZCJdPWZ1bmN0aW9uKEFlKXtyZXR1cm4gbmV3IFZlKEFlKX0sSS5UZXh0RW5jb2Rlcnx8KEkuVGV4dEVuY29kZXI9SCksSS5UZXh0RGVjb2Rl''@;'; put 'put ''cnx8KEkuVGV4dERlY29kZXI9VCksdWUuZXhwb3J0cyYmKHVlLmV4cG9ydHM9e1RleHRFbmNvZGVyOkkuVGV4dEVuY29kZXIsVGV4dERlY29kZXI6SS5UZXh0RGVjb2RlcixFbmNvZGluZ0luZGV4ZXM6SVsiZW5jb2RpbmctaW5kZXhlcyJdfSl9KHRoaXN8fHt9KX0sMzM5ODp1ZT0+e2Z1bmN0''@;'; put 'put ''aW9uIF8oSSl7dHJ5e2lmKCFnbG9iYWwubG9jYWxTdG9yYWdlKXJldHVybiExfWNhdGNoe3JldHVybiExfXZhciB5PWdsb2JhbC5sb2NhbFN0b3JhZ2VbSV07cmV0dXJuIG51bGwhPXkmJiJ0cnVlIj09PVN0cmluZyh5KS50b0xvd2VyQ2FzZSgpfXVlLmV4cG9ydHM9ZnVuY3Rpb24gcShJLHkp''@;'; put 'put ''e2lmKF8oIm5vRGVwcmVjYXRpb24iKSlyZXR1cm4gSTt2YXIgZz0hMTtyZXR1cm4gZnVuY3Rpb24gQigpe2lmKCFnKXtpZihfKCJ0aHJvd0RlcHJlY2F0aW9uIikpdGhyb3cgbmV3IEVycm9yKHkpO18oInRyYWNlRGVwcmVjYXRpb24iKT9jb25zb2xlLnRyYWNlKHkpOmNvbnNvbGUud2Fybih5''@;'; put 'put ''KSxnPSEwfXJldHVybiBJLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fSwxMjk1NDoodWUscSxfKT0+eyFmdW5jdGlvbihJKXsidXNlIHN0cmljdCI7SS5leHBvcnRzLmlzX3VyaT1nLEkuZXhwb3J0cy5pc19odHRwX3VyaT1CLEkuZXhwb3J0cy5pc19odHRwc191cmk9dyxJLmV4cG9ydHMuaXNf''@;'; put 'put ''d2ViX3VyaT1QLEkuZXhwb3J0cy5pc1VyaT1nLEkuZXhwb3J0cy5pc0h0dHBVcmk9QixJLmV4cG9ydHMuaXNIdHRwc1VyaT13LEkuZXhwb3J0cy5pc1dlYlVyaT1QO3ZhciB5PWZ1bmN0aW9uKEYpe3JldHVybiBGLm1hdGNoKC8oPzooW146XC8/I10rKTopPyg/OlwvXC8oW15cLz8jXSopKT8o''@;'; put 'put ''W14/I10qKSg/Olw/KFteI10qKSk/KD86IyguKikpPy8pfTtmdW5jdGlvbiBnKEYpe2lmKEYmJiEvW15hLXowLTlcOlwvXD9cI1xbXF1cQFwhXCRcJlwnXChcKVwqXCtcLFw7XD1cLlwtXF9cflwlXS9pLnRlc3QoRikmJiEvJVteMC05YS1mXS9pLnRlc3QoRikmJiEvJVswLTlhLWZdKDo/W14w''@;'; put 'put ''LTlhLWZdfCQpL2kudGVzdChGKSl7dmFyIE8sTixMLEssVSx6PSIiLFc9IiI7aWYoTj0oTz15KEYpKVsyXSxMPU9bM10sSz1PWzRdLFU9T1s1XSwoej1PWzFdKSYmei5sZW5ndGgmJkwubGVuZ3RoPj0wKXtpZihOJiZOLmxlbmd0aCl7aWYoMCE9PUwubGVuZ3RoJiYhL15cLy8udGVzdChMKSly''@;'; put 'put ''ZXR1cm59ZWxzZSBpZigvXlwvXC8vLnRlc3QoTCkpcmV0dXJuO2lmKC9eW2Etel1bYS16MC05XCtcLVwuXSokLy50ZXN0KHoudG9Mb3dlckNhc2UoKSkpcmV0dXJuIFcrPXorIjoiLE4mJk4ubGVuZ3RoJiYoVys9Ii8vIitOKSxXKz1MLEsmJksubGVuZ3RoJiYoVys9Ij8iK0spLFUmJlUubGVu''@;'; put 'put ''Z3RoJiYoVys9IiMiK1UpLFd9fX1mdW5jdGlvbiBCKEYsTyl7aWYoZyhGKSl7dmFyIHosSyxXLFksTj0iIixMPSIiLFU9IiIsWD0iIjtpZihMPSh6PXkoRikpWzJdLEs9elszXSxXPXpbNF0sWT16WzVdLE49elsxXSl7aWYoTyl7aWYoImh0dHBzIiE9Ti50b0xvd2VyQ2FzZSgpKXJldHVybn1l''@;'; put 'put ''bHNlIGlmKCJodHRwIiE9Ti50b0xvd2VyQ2FzZSgpKXJldHVybjtpZihMKXJldHVybi86KFxkKykkLy50ZXN0KEwpJiYoVT1MLm1hdGNoKC86KFxkKykkLylbMF0sTD1MLnJlcGxhY2UoLzpcZCskLywiIikpLFgrPU4rIjoiLFgrPSIvLyIrTCxVJiYoWCs9VSksWCs9SyxXJiZXLmxlbmd0aCYm''@;'; put 'put ''KFgrPSI/IitXKSxZJiZZLmxlbmd0aCYmKFgrPSIjIitZKSxYfX19ZnVuY3Rpb24gdyhGKXtyZXR1cm4gQihGLCEwKX1mdW5jdGlvbiBQKEYpe3JldHVybiBCKEYpfHx3KEYpfX0odWU9Xy5ubWQodWUpKX0sODY2MToodWUscSxfKT0+e3VlLmV4cG9ydHM9Xyg4NjYxKX0sMzUzNTg6KHVlLHEs''@;'; put 'put ''Xyk9Pnt2YXIgST17Ii4vYWYiOjExNTQ0LCIuL2FmLmpzIjoxMTU0NCwiLi9hciI6MzMxMDgsIi4vYXItZHoiOjUyMTU1LCIuL2FyLWR6LmpzIjo1MjE1NSwiLi9hci1rdyI6NTM1ODMsIi4vYXIta3cuanMiOjUzNTgzLCIuL2FyLWx5Ijo0MTYzOCwiLi9hci1seS5qcyI6NDE2MzgsIi4vYXIt''@;'; put 'put ''bWEiOjg3ODIzLCIuL2FyLW1hLmpzIjo4NzgyMywiLi9hci1wcyI6NzcxMiwiLi9hci1wcy5qcyI6NzcxMiwiLi9hci1zYSI6NzgyNjEsIi4vYXItc2EuanMiOjc4MjYxLCIuL2FyLXRuIjo1NjcwMywiLi9hci10bi5qcyI6NTY3MDMsIi4vYXIuanMiOjMzMTA4LCIuL2F6Ijo0NjUwOCwiLi9h''@;'; put 'put ''ei5qcyI6NDY1MDgsIi4vYmUiOjE2NzY2LCIuL2JlLmpzIjoxNjc2NiwiLi9iZyI6Mjg1NjQsIi4vYmcuanMiOjI4NTY0LCIuL2JtIjo5NzQ2MiwiLi9ibS5qcyI6OTc0NjIsIi4vYm4iOjE3MTA3LCIuL2JuLWJkIjo0MzQzOCwiLi9ibi1iZC5qcyI6NDM0MzgsIi4vYm4uanMiOjE3MTA3LCIu''@;'; put 'put ''L2JvIjo5MDA0LCIuL2JvLmpzIjo5MDA0LCIuL2JyIjo1MDkyNywiLi9ici5qcyI6NTA5MjcsIi4vYnMiOjg3NzY4LCIuL2JzLmpzIjo4Nzc2OCwiLi9jYSI6NTYyOTEsIi4vY2EuanMiOjU2MjkxLCIuL2NzIjo4NTMwMSwiLi9jcy5qcyI6ODUzMDEsIi4vY3YiOjY2NjY2LCIuL2N2LmpzIjo2''@;'; put 'put ''NjY2NiwiLi9jeSI6NTUxNjMsIi4vY3kuanMiOjU1MTYzLCIuL2RhIjo4NzM2MCwiLi9kYS5qcyI6ODczNjAsIi4vZGUiOjQ1OTMyLCIuL2RlLWF0Ijo0MzI0OCwiLi9kZS1hdC5qcyI6NDMyNDgsIi4vZGUtY2giOjgzMjIyLCIuL2RlLWNoLmpzIjo4MzIyMiwiLi9kZS5qcyI6NDU5MzIsIi4v''@;'; put 'put ''ZHYiOjY0MDUsIi4vZHYuanMiOjY0MDUsIi4vZWwiOjYwNzE4LCIuL2VsLmpzIjo2MDcxOCwiLi9lbi1hdSI6MzYzMTksIi4vZW4tYXUuanMiOjM2MzE5LCIuL2VuLWNhIjo4MDU5NywiLi9lbi1jYS5qcyI6ODA1OTcsIi4vZW4tZ2IiOjUxODAwLCIuL2VuLWdiLmpzIjo1MTgwMCwiLi9lbi1p''@;'; put 'put ''ZSI6ODA3LCIuL2VuLWllLmpzIjo4MDcsIi4vZW4taWwiOjk1OTYwLCIuL2VuLWlsLmpzIjo5NTk2MCwiLi9lbi1pbiI6ODQ0MTgsIi4vZW4taW4uanMiOjg0NDE4LCIuL2VuLW56Ijo0Njg2NSwiLi9lbi1uei5qcyI6NDY4NjUsIi4vZW4tc2ciOjMyNjQ3LCIuL2VuLXNnLmpzIjozMjY0Nywi''@;'; put 'put ''Li9lbyI6NjE5MzEsIi4vZW8uanMiOjYxOTMxLCIuL2VzIjo0NjY3OSwiLi9lcy1kbyI6NDE4MDUsIi4vZXMtZG8uanMiOjQxODA1LCIuL2VzLW14Ijo4MzQ0NSwiLi9lcy1teC5qcyI6ODM0NDUsIi4vZXMtdXMiOjgxNTE2LCIuL2VzLXVzLmpzIjo4MTUxNiwiLi9lcy5qcyI6NDY2NzksIi4v''@;'; put 'put ''ZXQiOjg4MTUwLCIuL2V0LmpzIjo4ODE1MCwiLi9ldSI6ODA3NTcsIi4vZXUuanMiOjgwNzU3LCIuL2ZhIjo2NTc0MiwiLi9mYS5qcyI6NjU3NDIsIi4vZmkiOjMzOTU4LCIuL2ZpLmpzIjozMzk1OCwiLi9maWwiOjQ2NzIwLCIuL2ZpbC5qcyI6NDY3MjAsIi4vZm8iOjk4MzUyLCIuL2ZvLmpz''@;'; put 'put ''Ijo5ODM1MiwiLi9mciI6NDA1OSwiLi9mci1jYSI6NDIwOTYsIi4vZnItY2EuanMiOjQyMDk2LCIuL2ZyLWNoIjo5NTc1OSwiLi9mci1jaC5qcyI6OTU3NTksIi4vZnIuanMiOjQwNTksIi4vZnkiOjE1OTU4LCIuL2Z5LmpzIjoxNTk1OCwiLi9nYSI6OTQxNDMsIi4vZ2EuanMiOjk0MTQzLCIu''@;'; put 'put ''L2dkIjo2NzAyOCwiLi9nZC5qcyI6NjcwMjgsIi4vZ2wiOjgwNDI4LCIuL2dsLmpzIjo4MDQyOCwiLi9nb20tZGV2YSI6NzY4NjEsIi4vZ29tLWRldmEuanMiOjc2ODYxLCIuL2dvbS1sYXRuIjo1NzcxOCwiLi9nb20tbGF0bi5qcyI6NTc3MTgsIi4vZ3UiOjI2ODI3LCIuL2d1LmpzIjoyNjgy''@;'; put 'put ''NywiLi9oZSI6MjE5MzYsIi4vaGUuanMiOjIxOTM2LCIuL2hpIjozMTMzMiwiLi9oaS5qcyI6MzEzMzIsIi4vaHIiOjkxOTU3LCIuL2hyLmpzIjo5MTk1NywiLi9odSI6NDg5MjgsIi4vaHUuanMiOjQ4OTI4LCIuL2h5LWFtIjo1NjIxNSwiLi9oeS1hbS5qcyI6NTYyMTUsIi4vaWQiOjU4Niwi''@;'; put 'put ''Li9pZC5qcyI6NTg2LCIuL2lzIjo5MDIxMSwiLi9pcy5qcyI6OTAyMTEsIi4vaXQiOjcwMTcwLCIuL2l0LWNoIjoyMjM0MCwiLi9pdC1jaC5qcyI6MjIzNDAsIi4vaXQuanMiOjcwMTcwLCIuL2phIjozOTc3MCwiLi9qYS5qcyI6Mzk3NzAsIi4vanYiOjczODc1LCIuL2p2LmpzIjo3Mzg3NSwi''@;'; put 'put ''Li9rYSI6Nzk0OTksIi4va2EuanMiOjc5NDk5LCIuL2trIjo5MzU3MywiLi9ray5qcyI6OTM1NzMsIi4va20iOjY4ODA3LCIuL2ttLmpzIjo2ODgwNywiLi9rbiI6NjUwODIsIi4va24uanMiOjY1MDgyLCIuL2tvIjoyMDEzNywiLi9rby5qcyI6MjAxMzcsIi4va3UiOjcwMTExLCIuL2t1LWtt''@;'; put 'put ''ciI6NjM3NDQsIi4va3Uta21yLmpzIjo2Mzc0NCwiLi9rdS5qcyI6NzAxMTEsIi4va3kiOjk5MTg3LCIuL2t5LmpzIjo5OTE4NywiLi9sYiI6MzU5NjksIi4vbGIuanMiOjM1OTY5LCIuL2xvIjozMzUyNiwiLi9sby5qcyI6MzM1MjYsIi4vbHQiOjkwNDExLCIuL2x0LmpzIjo5MDQxMSwiLi9s''@;'; put 'put ''diI6MzI2MjEsIi4vbHYuanMiOjMyNjIxLCIuL21lIjo4NTg2OSwiLi9tZS5qcyI6ODU4NjksIi4vbWkiOjM1ODgxLCIuL21pLmpzIjozNTg4MSwiLi9tayI6OTIzOTEsIi4vbWsuanMiOjkyMzkxLCIuL21sIjoyMTEyNiwiLi9tbC5qcyI6MjExMjYsIi4vbW4iOjQ0ODkyLCIuL21uLmpzIjo0''@;'; put 'put ''NDg5MiwiLi9tciI6NTkwODAsIi4vbXIuanMiOjU5MDgwLCIuL21zIjo3MDM5OSwiLi9tcy1teSI6MjU5NTAsIi4vbXMtbXkuanMiOjI1OTUwLCIuL21zLmpzIjo3MDM5OSwiLi9tdCI6Nzk5MDIsIi4vbXQuanMiOjc5OTAyLCIuL215Ijo3Mjk4NSwiLi9teS5qcyI6NzI5ODUsIi4vbmIiOjY3''@;'; put 'put ''ODU5LCIuL25iLmpzIjo2Nzg1OSwiLi9uZSI6MTM2NDIsIi4vbmUuanMiOjEzNjQyLCIuL25sIjo2NTQ0MSwiLi9ubC1iZSI6OTk4NzUsIi4vbmwtYmUuanMiOjk5ODc1LCIuL25sLmpzIjo2NTQ0MSwiLi9ubiI6ODEzMTEsIi4vbm4uanMiOjgxMzExLCIuL29jLWxuYyI6NzI1NjcsIi4vb2Mt''@;'; put 'put ''bG5jLmpzIjo3MjU2NywiLi9wYS1pbiI6NTY5NjIsIi4vcGEtaW4uanMiOjU2OTYyLCIuL3BsIjo2MTA2MywiLi9wbC5qcyI6NjEwNjMsIi4vcHQiOjc4NzE5LCIuL3B0LWJyIjo5NzQ3NiwiLi9wdC1ici5qcyI6OTc0NzYsIi4vcHQuanMiOjc4NzE5LCIuL3JvIjo1MTAwNCwiLi9yby5qcyI6''@;'; put 'put ''NTEwMDQsIi4vcnUiOjUxMzI2LCIuL3J1LmpzIjo1MTMyNiwiLi9zZCI6NzI2MDgsIi4vc2QuanMiOjcyNjA4LCIuL3NlIjoxMzkxMSwiLi9zZS5qcyI6MTM5MTEsIi4vc2kiOjI1MTQ3LCIuL3NpLmpzIjoyNTE0NywiLi9zayI6MjM3NDEsIi4vc2suanMiOjIzNzQxLCIuL3NsIjo5M2UzLCIu''@;'; put 'put ''L3NsLmpzIjo5M2UzLCIuL3NxIjo2MDQ1MSwiLi9zcS5qcyI6NjA0NTEsIi4vc3IiOjU1MDQ2LCIuL3NyLWN5cmwiOjQwOTA1LCIuL3NyLWN5cmwuanMiOjQwOTA1LCIuL3NyLmpzIjo1NTA0NiwiLi9zcyI6ODU3NjUsIi4vc3MuanMiOjg1NzY1LCIuL3N2Ijo5OTI5MCwiLi9zdi5qcyI6OTky''@;'; put 'put ''OTAsIi4vc3ciOjUzNDQ5LCIuL3N3LmpzIjo1MzQ0OSwiLi90YSI6NzI2ODgsIi4vdGEuanMiOjcyNjg4LCIuL3RlIjozMjA2MCwiLi90ZS5qcyI6MzIwNjAsIi4vdGV0Ijo5MzI5MCwiLi90ZXQuanMiOjkzMjkwLCIuL3RnIjo4Mjk0LCIuL3RnLmpzIjo4Mjk0LCIuL3RoIjoxMjMxLCIuL3Ro''@;'; put 'put ''LmpzIjoxMjMxLCIuL3RrIjozNzQ2LCIuL3RrLmpzIjozNzQ2LCIuL3RsLXBoIjo0OTA0MCwiLi90bC1waC5qcyI6NDkwNDAsIi4vdGxoIjoxNzE4NywiLi90bGguanMiOjE3MTg3LCIuL3RyIjo2MDE1MywiLi90ci5qcyI6NjAxNTMsIi4vdHpsIjo4ODUyMSwiLi90emwuanMiOjg4NTIxLCIu''@;'; put 'put ''L3R6bSI6MTgwMTAsIi4vdHptLWxhdG4iOjIyMjM0LCIuL3R6bS1sYXRuLmpzIjoyMjIzNCwiLi90em0uanMiOjE4MDEwLCIuL3VnLWNuIjo2MzM0OSwiLi91Zy1jbi5qcyI6NjMzNDksIi4vdWsiOjY4NDc5LCIuL3VrLmpzIjo2ODQ3OSwiLi91ciI6NDMwMjQsIi4vdXIuanMiOjQzMDI0LCIu''@;'; put 'put ''L3V6IjoxOTgwMCwiLi91ei1sYXRuIjo3MjM3NiwiLi91ei1sYXRuLmpzIjo3MjM3NiwiLi91ei5qcyI6MTk4MDAsIi4vdmkiOjg5MzY2LCIuL3ZpLmpzIjo4OTM2NiwiLi94LXBzZXVkbyI6Njk3MDIsIi4veC1wc2V1ZG8uanMiOjY5NzAyLCIuL3lvIjo3MjY1NSwiLi95by5qcyI6NzI2NTUs''@;'; put 'put ''Ii4vemgtY24iOjU3NSwiLi96aC1jbi5qcyI6NTc1LCIuL3poLWhrIjoxODM1MSwiLi96aC1oay5qcyI6MTgzNTEsIi4vemgtbW8iOjUxNjI2LCIuL3poLW1vLmpzIjo1MTYyNiwiLi96aC10dyI6ODg4NywiLi96aC10dy5qcyI6ODg4N307ZnVuY3Rpb24geShCKXt2YXIgdz1nKEIpO3JldHVy''@;'; put 'put ''biBfKHcpfWZ1bmN0aW9uIGcoQil7aWYoIV8ubyhJLEIpKXt2YXIgdz1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitCKyInIik7dGhyb3cgdy5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIix3fXJldHVybiBJW0JdfXkua2V5cz1mdW5jdGlvbigpe3JldHVybiBPYmplY3Qua2V5cyhJ''@;'; put 'put ''KX0seS5yZXNvbHZlPWcsdWUuZXhwb3J0cz15LHkuaWQ9MzUzNTh9LDgzMzM3OigpPT57fSw3ODk4MjooKT0+e30sNDc3OTA6KCk9Pnt9LDc3OTY1OigpPT57fSw2NjA4OTooKT0+e30sNzkzNjg6KCk9Pnt9LDE1NzkxOigpPT57fSw2MTA5MzooKT0+e30sNjQ2ODg6KCk9Pnt9LDUxMDY5Oigp''@;'; put 'put ''PT57fSwxNTM0MDooKT0+e30sNzk4Mzg6KCk9Pnt9LDYzNzc5OigpPT57fSw3NzE5OTooKT0+e30sMjUxNzI6dWU9Pnt1ZS5leHBvcnRzPWZ1bmN0aW9uIHEoXyxJKXt0aGlzLnY9Xyx0aGlzLms9SX0sdWUuZXhwb3J0cy5fX2VzTW9kdWxlPSEwLHVlLmV4cG9ydHMuZGVmYXVsdD11ZS5leHBv''@;'; put 'put ''cnRzfSw5MzUxMzoodWUscSxfKT0+e3ZhciBJPV8oMjUxNzIpO3VlLmV4cG9ydHM9ZnVuY3Rpb24geShnKXt2YXIgQj17fSx3PSExO2Z1bmN0aW9uIFAoRixPKXtyZXR1cm4gdz0hMCxPPW5ldyBQcm9taXNlKGZ1bmN0aW9uKHope3ooZ1tGXShPKSl9KSx7ZG9uZTohMSx2YWx1ZTpuZXcgSShP''@;'; put 'put ''LDEpfX1yZXR1cm4gQlt0eXBlb2YgU3ltYm9sPCJ1IiYmU3ltYm9sLml0ZXJhdG9yfHwiQEBpdGVyYXRvciJdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LEIubmV4dD1mdW5jdGlvbihGKXtyZXR1cm4gdz8odz0hMSxGKTpQKCJuZXh0IixGKX0sImZ1bmN0aW9uIj09dHlwZW9mIGcudGhyb3cm''@;'; put 'put ''JihCLnRocm93PWZ1bmN0aW9uKEYpe2lmKHcpdGhyb3cgdz0hMSxGO3JldHVybiBQKCJ0aHJvdyIsRil9KSwiZnVuY3Rpb24iPT10eXBlb2YgZy5yZXR1cm4mJihCLnJldHVybj1mdW5jdGlvbihGKXtyZXR1cm4gdz8odz0hMSxGKTpQKCJyZXR1cm4iLEYpfSksQn0sdWUuZXhwb3J0cy5fX2Vz''@;'; put 'put ''TW9kdWxlPSEwLHVlLmV4cG9ydHMuZGVmYXVsdD11ZS5leHBvcnRzfSw4Mjg4MTp1ZT0+e2Z1bmN0aW9uIF8oSSl7ZnVuY3Rpb24geShnKXtpZihPYmplY3QoZykhPT1nKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKGcrIiBpcyBub3QgYW4gb2JqZWN0LiIpKTt2YXIgQj1n''@;'; put 'put ''LmRvbmU7cmV0dXJuIFByb21pc2UucmVzb2x2ZShnLnZhbHVlKS50aGVuKGZ1bmN0aW9uKHcpe3JldHVybnt2YWx1ZTp3LGRvbmU6Qn19KX1yZXR1cm4oXz1mdW5jdGlvbihCKXt0aGlzLnM9Qix0aGlzLm49Qi5uZXh0fSkucHJvdG90eXBlPXtzOm51bGwsbjpudWxsLG5leHQ6ZnVuY3Rpb24o''@;'; put 'put ''KXtyZXR1cm4geSh0aGlzLm4uYXBwbHkodGhpcy5zLGFyZ3VtZW50cykpfSxyZXR1cm46ZnVuY3Rpb24oQil7dmFyIHc9dGhpcy5zLnJldHVybjtyZXR1cm4gdm9pZCAwPT09dz9Qcm9taXNlLnJlc29sdmUoe3ZhbHVlOkIsZG9uZTohMH0pOnkody5hcHBseSh0aGlzLnMsYXJndW1lbnRzKSl9''@;'; put 'put ''LHRocm93OmZ1bmN0aW9uKEIpe3ZhciB3PXRoaXMucy5yZXR1cm47cmV0dXJuIHZvaWQgMD09PXc/UHJvbWlzZS5yZWplY3QoQik6eSh3LmFwcGx5KHRoaXMucyxhcmd1bWVudHMpKX19LG5ldyBfKEkpfXVlLmV4cG9ydHM9ZnVuY3Rpb24gcShJKXt2YXIgeSxnLEIsdz0yO2Zvcih0eXBlb2Yg''@;'; put 'put ''U3ltYm9sPCJ1IiYmKGc9U3ltYm9sLmFzeW5jSXRlcmF0b3IsQj1TeW1ib2wuaXRlcmF0b3IpO3ctLTspe2lmKGcmJm51bGwhPSh5PUlbZ10pKXJldHVybiB5LmNhbGwoSSk7aWYoQiYmbnVsbCE9KHk9SVtCXSkpcmV0dXJuIG5ldyBfKHkuY2FsbChJKSk7Zz0iQEBhc3luY0l0ZXJhdG9yIixC''@;'; put 'put ''PSJAQGl0ZXJhdG9yIn10aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgaXMgbm90IGFzeW5jIGl0ZXJhYmxlIil9LHVlLmV4cG9ydHMuX19lc01vZHVsZT0hMCx1ZS5leHBvcnRzLmRlZmF1bHQ9dWUuZXhwb3J0c30sMjkyOTM6dWU9PntmdW5jdGlvbiBxKEkseSxnLEIsdyxQLEYpe3RyeXt2''@;'; put 'put ''YXIgTz1JW1BdKEYpLHo9Ty52YWx1ZX1jYXRjaChOKXtyZXR1cm4gdm9pZCBnKE4pfU8uZG9uZT95KHopOlByb21pc2UucmVzb2x2ZSh6KS50aGVuKEIsdyl9dWUuZXhwb3J0cz1mdW5jdGlvbiBfKEkpe3JldHVybiBmdW5jdGlvbigpe3ZhciB5PXRoaXMsZz1hcmd1bWVudHM7cmV0dXJuIG5l''@;'; put 'put ''dyBQcm9taXNlKGZ1bmN0aW9uKEIsdyl7dmFyIFA9SS5hcHBseSh5LGcpO2Z1bmN0aW9uIEYoeil7cShQLEIsdyxGLE8sIm5leHQiLHopfWZ1bmN0aW9uIE8oeil7cShQLEIsdyxGLE8sInRocm93Iix6KX1GKHZvaWQgMCl9KX19LHVlLmV4cG9ydHMuX19lc01vZHVsZT0hMCx1ZS5leHBvcnRz''@;'; put 'put ''LmRlZmF1bHQ9dWUuZXhwb3J0c30sNTMzNDQ6KHVlLHEsXyk9Pnt2YXIgST1fKDI1MTcyKTt1ZS5leHBvcnRzPWZ1bmN0aW9uIHkoZyl7cmV0dXJuIG5ldyBJKGcsMCl9LHVlLmV4cG9ydHMuX19lc01vZHVsZT0hMCx1ZS5leHBvcnRzLmRlZmF1bHQ9dWUuZXhwb3J0c30sNDI5NTg6KHVlLHEs''@;'; put 'put ''Xyk9Pnt2YXIgST1fKDI1MTcyKTtmdW5jdGlvbiBnKEIpe3ZhciB3LFA7ZnVuY3Rpb24gRih6LE4pe3RyeXt2YXIgTD1CW3pdKE4pLEs9TC52YWx1ZSxVPUsgaW5zdGFuY2VvZiBJO1Byb21pc2UucmVzb2x2ZShVP0sudjpLKS50aGVuKGZ1bmN0aW9uKFcpe2lmKFUpe3ZhciBZPSJyZXR1cm4i''@;'; put 'put ''PT09ej8icmV0dXJuIjoibmV4dCI7aWYoIUsua3x8Vy5kb25lKXJldHVybiBGKFksVyk7Vz1CW1ldKFcpLnZhbHVlfU8oTC5kb25lPyJyZXR1cm4iOiJub3JtYWwiLFcpfSxmdW5jdGlvbihXKXtGKCJ0aHJvdyIsVyl9KX1jYXRjaChXKXtPKCJ0aHJvdyIsVyl9fWZ1bmN0aW9uIE8oeixOKXtz''@;'; put 'put ''d2l0Y2goeil7Y2FzZSJyZXR1cm4iOncucmVzb2x2ZSh7dmFsdWU6Tixkb25lOiEwfSk7YnJlYWs7Y2FzZSJ0aHJvdyI6dy5yZWplY3QoTik7YnJlYWs7ZGVmYXVsdDp3LnJlc29sdmUoe3ZhbHVlOk4sZG9uZTohMX0pfSh3PXcubmV4dCk/Rih3LmtleSx3LmFyZyk6UD1udWxsfXRoaXMuX2lu''@;'; put 'put ''dm9rZT1mdW5jdGlvbih6LE4pe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihMLEspe3ZhciBVPXtrZXk6eixhcmc6TixyZXNvbHZlOkwscmVqZWN0OkssbmV4dDpudWxsfTtQP1A9UC5uZXh0PVU6KHc9UD1VLEYoeixOKSl9KX0sImZ1bmN0aW9uIiE9dHlwZW9mIEIucmV0dXJuJiYodGhp''@;'; put 'put ''cy5yZXR1cm49dm9pZCAwKX1nLnByb3RvdHlwZVsiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciJdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGcucHJvdG90eXBlLm5leHQ9ZnVuY3Rpb24oQil7cmV0dXJuIHRoaXMuX2lu''@;'; put 'put ''dm9rZSgibmV4dCIsQil9LGcucHJvdG90eXBlLnRocm93PWZ1bmN0aW9uKEIpe3JldHVybiB0aGlzLl9pbnZva2UoInRocm93IixCKX0sZy5wcm90b3R5cGUucmV0dXJuPWZ1bmN0aW9uKEIpe3JldHVybiB0aGlzLl9pbnZva2UoInJldHVybiIsQil9LHVlLmV4cG9ydHM9ZnVuY3Rpb24geShC''@;'; put 'put ''KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGcoQi5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX0sdWUuZXhwb3J0cy5fX2VzTW9kdWxlPSEwLHVlLmV4cG9ydHMuZGVmYXVsdD11ZS5leHBvcnRzfSwzMTQ4MzoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDE5MTUwKSx5PV8o''@;'; put 'put ''NzUyMTIpLGc9VHlwZUVycm9yO3VlLmV4cG9ydHM9ZnVuY3Rpb24oQil7aWYoSShCKSlyZXR1cm4gQjt0aHJvdyBuZXcgZyh5KEIpKyIgaXMgbm90IGEgZnVuY3Rpb24iKX19LDI3Njc6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg0MzQwNikseT1TdHJpbmcsZz1UeXBlRXJyb3I7''@;'; put 'put ''dWUuZXhwb3J0cz1mdW5jdGlvbihCKXtpZihJKEIpKXJldHVybiBCO3Rocm93IG5ldyBnKCJDYW4ndCBzZXQgIit5KEIpKyIgYXMgYSBwcm90b3R5cGUiKX19LDM3NzMxOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oOTc1NDEpLmhhczt1ZS5leHBvcnRzPWZ1bmN0aW9uKHkpe3Jl''@;'; put 'put ''dHVybiBJKHkpLHl9fSw3MDgyNDoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDU4MDEyKSx5PV8oOTc5NTEpLGc9Xyg0NDY0OCkuZixCPUkoInVuc2NvcGFibGVzIiksdz1BcnJheS5wcm90b3R5cGU7dm9pZCAwPT09d1tCXSYmZyh3LEIse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTp5''@;'; put 'put ''KG51bGwpfSksdWUuZXhwb3J0cz1mdW5jdGlvbihQKXt3W0JdW1BdPSEwfX0sNjMzMzY6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg0NjgpLHk9VHlwZUVycm9yO3VlLmV4cG9ydHM9ZnVuY3Rpb24oZyxCKXtpZihJKEIsZykpcmV0dXJuIGc7dGhyb3cgbmV3IHkoIkluY29ycmVj''@;'; put 'put ''dCBpbnZvY2F0aW9uIil9fSwxMTA4Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMzI2MzMpLHk9U3RyaW5nLGc9VHlwZUVycm9yO3VlLmV4cG9ydHM9ZnVuY3Rpb24oQil7aWYoSShCKSlyZXR1cm4gQjt0aHJvdyBuZXcgZyh5KEIpKyIgaXMgbm90IGFuIG9iamVjdCIpfX0sMzg4''@;'; put 'put ''MToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDcxNzEpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oeSxnLEIpe2Zvcih2YXIgdz0wLFA9YXJndW1lbnRzLmxlbmd0aD4yP0I6SShnKSxGPW5ldyB5KFApO1A+dzspRlt3XT1nW3crK107cmV0dXJuIEZ9fSw3NDgyNDoodWUscSxfKT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgST1fKDkzMTYyKSx5PV8oNzQ4NSksZz1fKDcxNzEpLEI9ZnVuY3Rpb24odyl7cmV0dXJuIGZ1bmN0aW9uKFAsRixPKXt2YXIgej1JKFApLE49Zyh6KTtpZigwPT09TilyZXR1cm4hdyYmLTE7dmFyIEssTD15KE8sTik7aWYodyYmRiE9Ril7Zm9yKDtOPkw7KWlmKChL''@;'; put 'put ''PXpbTCsrXSkhPUspcmV0dXJuITB9ZWxzZSBmb3IoO04+TDtMKyspaWYoKHd8fEwgaW4geikmJnpbTF09PT1GKXJldHVybiB3fHxMfHwwO3JldHVybiF3JiYtMX19O3VlLmV4cG9ydHM9e2luY2x1ZGVzOkIoITApLGluZGV4T2Y6QighMSl9fSwzOTIwNjoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0''@;'; put 'put ''Ijt2YXIgST1fKDQ2Mzg3KSx5PV8oNjcyNzcpLGc9VHlwZUVycm9yLEI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcix3PUkmJiFmdW5jdGlvbigpe2lmKHZvaWQgMCE9PXRoaXMpcmV0dXJuITA7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwibGVuZ3RoIix7d3JpdGFibGU6''@;'; put 'put ''ITF9KS5sZW5ndGg9MX1jYXRjaChQKXtyZXR1cm4gUCBpbnN0YW5jZW9mIFR5cGVFcnJvcn19KCk7dWUuZXhwb3J0cz13P2Z1bmN0aW9uKFAsRil7aWYoeShQKSYmIUIoUCwibGVuZ3RoIikud3JpdGFibGUpdGhyb3cgbmV3IGcoIkNhbm5vdCBzZXQgcmVhZCBvbmx5IC5sZW5ndGgiKTtyZXR1''@;'; put 'put ''cm4gUC5sZW5ndGg9Rn06ZnVuY3Rpb24oUCxGKXtyZXR1cm4gUC5sZW5ndGg9Rn19LDc3NjM5Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNTg2MDcpO3VlLmV4cG9ydHM9SShbXS5zbGljZSl9LDQyOTI2Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMTEwOCkseT1f''@;'; put 'put ''KDY2NTQyKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKGcsQix3LFApe3RyeXtyZXR1cm4gUD9CKEkodylbMF0sd1sxXSk6Qih3KX1jYXRjaChGKXt5KGcsInRocm93IixGKX19fSw4NjY3NToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDU4NjA3KSx5PUkoe30udG9TdHJpbmcpLGc9SSgi''@;'; put 'put ''Ii5zbGljZSk7dWUuZXhwb3J0cz1mdW5jdGlvbihCKXtyZXR1cm4gZyh5KEIpLDgsLTEpfX0sNzE4MjQ6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9XygzODU5NSkseT1fKDE5MTUwKSxnPV8oODY2NzUpLHc9Xyg1ODAxMikoInRvU3RyaW5nVGFnIiksUD1PYmplY3QsRj0iQXJndW1l''@;'; put 'put ''bnRzIj09PWcoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKTt1ZS5leHBvcnRzPUk/ZzpmdW5jdGlvbih6KXt2YXIgTixMLEs7cmV0dXJuIHZvaWQgMD09PXo/IlVuZGVmaW5lZCI6bnVsbD09PXo/Ik51bGwiOiJzdHJpbmciPT10eXBlb2YoTD1mdW5jdGlvbih6LE4pe3RyeXtyZXR1''@;'; put 'put ''cm4geltOXX1jYXRjaHt9fShOPVAoeiksdykpP0w6Rj9nKE4pOiJPYmplY3QiPT09KEs9ZyhOKSkmJnkoTi5jYWxsZWUpPyJBcmd1bWVudHMiOkt9fSw0ODYzOToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDM4ZTMpLHk9Xyg4ODA3OCksZz1fKDU0MTIyKSxCPV8oNDQ2NDgpO3Vl''@;'; put 'put ''LmV4cG9ydHM9ZnVuY3Rpb24odyxQLEYpe2Zvcih2YXIgTz15KFApLHo9Qi5mLE49Zy5mLEw9MDtMPE8ubGVuZ3RoO0wrKyl7dmFyIEs9T1tMXTshSSh3LEspJiYoIUZ8fCFJKEYsSykpJiZ6KHcsSyxOKFAsSykpfX19LDgyODM0Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNTU1''@;'; put 'put ''OTIpO3VlLmV4cG9ydHM9IUkoZnVuY3Rpb24oKXtmdW5jdGlvbiB5KCl7fXJldHVybiB5LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1udWxsLE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgeSkhPT15LnByb3RvdHlwZX0pfSw1ODk3ODp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPWZ1bmN0''@;'; put 'put ''aW9uKHEsXyl7cmV0dXJue3ZhbHVlOnEsZG9uZTpffX19LDM2Njc4Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNDYzODcpLHk9Xyg0NDY0OCksZz1fKDc3NzczKTt1ZS5leHBvcnRzPUk/ZnVuY3Rpb24oQix3LFApe3JldHVybiB5LmYoQix3LGcoMSxQKSl9OmZ1bmN0aW9uKEIs''@;'; put 'put ''dyxQKXtyZXR1cm4gQlt3XT1QLEJ9fSw3Nzc3Mzp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPWZ1bmN0aW9uKHEsXyl7cmV0dXJue2VudW1lcmFibGU6ISgxJnEpLGNvbmZpZ3VyYWJsZTohKDImcSksd3JpdGFibGU6ISg0JnEpLHZhbHVlOl99fX0sNTg3OTU6KHVlLHEsXyk9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIEk9Xyg0NjM4NykseT1fKDQ0NjQ4KSxnPV8oNzc3NzMpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oQix3LFApe0k/eS5mKEIsdyxnKDAsUCkpOkJbd109UH19LDQ0MDM5Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMTY5ODApLHk9Xyg0NDY0OCk7dWUuZXhwb3J0''@;'; put 'put ''cz1mdW5jdGlvbihnLEIsdyl7cmV0dXJuIHcuZ2V0JiZJKHcuZ2V0LEIse2dldHRlcjohMH0pLHcuc2V0JiZJKHcuc2V0LEIse3NldHRlcjohMH0pLHkuZihnLEIsdyl9fSwzMTA4MzoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDE5MTUwKSx5PV8oNDQ2NDgpLGc9XygxNjk4MCks''@;'; put 'put ''Qj1fKDQ4MTA0KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKHcsUCxGLE8pe098fChPPXt9KTt2YXIgej1PLmVudW1lcmFibGUsTj12b2lkIDAhPT1PLm5hbWU/Ty5uYW1lOlA7aWYoSShGKSYmZyhGLE4sTyksTy5nbG9iYWwpej93W1BdPUY6QihQLEYpO2Vsc2V7dHJ5e08udW5zYWZlP3dbUF0mJih6''@;'; put 'put ''PSEwKTpkZWxldGUgd1tQXX1jYXRjaHt9ej93W1BdPUY6eS5mKHcsUCx7dmFsdWU6RixlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohTy5ub25Db25maWd1cmFibGUsd3JpdGFibGU6IU8ubm9uV3JpdGFibGV9KX1yZXR1cm4gd319LDE0NzUwOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3Zh''@;'; put 'put ''ciBJPV8oMzEwODMpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oeSxnLEIpe2Zvcih2YXIgdyBpbiBnKUkoeSx3LGdbd10sQik7cmV0dXJuIHl9fSw0ODEwNDoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDMzOTYzKSx5PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt1ZS5leHBvcnRzPWZ1bmN0''@;'; put 'put ''aW9uKGcsQil7dHJ5e3koSSxnLHt2YWx1ZTpCLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfWNhdGNoe0lbZ109Qn1yZXR1cm4gQn19LDQzMTk1Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNzUyMTIpLHk9VHlwZUVycm9yO3VlLmV4cG9ydHM9ZnVuY3Rpb24oZyxCKXtp''@;'; put 'put ''ZighZGVsZXRlIGdbQl0pdGhyb3cgbmV3IHkoIkNhbm5vdCBkZWxldGUgcHJvcGVydHkgIitJKEIpKyIgb2YgIitJKGcpKX19LDQ2Mzg3Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNTU1OTIpO3VlLmV4cG9ydHM9IUkoZnVuY3Rpb24oKXtyZXR1cm4gNyE9PU9iamVjdC5kZWZp''@;'; put 'put ''bmVQcm9wZXJ0eSh7fSwxLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KVsxXX0pfSw1NTk4ODoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDMzOTYzKSx5PV8oMzI2MzMpLGc9SS5kb2N1bWVudCxCPXkoZykmJnkoZy5jcmVhdGVFbGVtZW50KTt1ZS5leHBvcnRzPWZ1bmN0aW9u''@;'; put 'put ''KHcpe3JldHVybiBCP2cuY3JlYXRlRWxlbWVudCh3KTp7fX19LDMzMTY6dWU9PnsidXNlIHN0cmljdCI7dmFyIHE9VHlwZUVycm9yO3VlLmV4cG9ydHM9ZnVuY3Rpb24oSSl7aWYoST45MDA3MTk5MjU0NzQwOTkxKXRocm93IHEoIk1heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCIpO3Jl''@;'; put 'put ''dHVybiBJfX0sNTg1NDA6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1bImNvbnN0cnVjdG9yIiwiaGFzT3duUHJvcGVydHkiLCJpc1Byb3RvdHlwZU9mIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJ0b0xvY2FsZVN0cmluZyIsInRvU3RyaW5nIiwidmFsdWVPZiJdfSw0NDEzNzoodWUs''@;'; put 'put ''cSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDIzNTgpO3VlLmV4cG9ydHM9Lyg/OmlwYWR8aXBob25lfGlwb2QpLiphcHBsZXdlYmtpdC9pLnRlc3QoSSl9LDIxNTEwOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNDcwOTIpO3VlLmV4cG9ydHM9Ik5PREUiPT09SX0sMjM1ODoo''@;'; put 'put ''dWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgeT1fKDMzOTYzKS5uYXZpZ2F0b3IsZz15JiZ5LnVzZXJBZ2VudDt1ZS5leHBvcnRzPWc/U3RyaW5nKGcpOiIifSw0NDA2NjoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgRixPLEk9XygzMzk2MykseT1fKDIzNTgpLGc9SS5wcm9jZXNzLEI9''@;'; put 'put ''SS5EZW5vLHc9ZyYmZy52ZXJzaW9uc3x8QiYmQi52ZXJzaW9uLFA9dyYmdy52ODtQJiYoTz0oRj1QLnNwbGl0KCIuIikpWzBdPjAmJkZbMF08ND8xOisoRlswXStGWzFdKSksIU8mJnkmJighKEY9eS5tYXRjaCgvRWRnZVwvKFxkKykvKSl8fEZbMV0+PTc0KSYmKEY9eS5tYXRjaCgvQ2hyb21l''@;'; put 'put ''XC8oXGQrKS8pKSYmKE89K0ZbMV0pLHVlLmV4cG9ydHM9T30sNDcwOTI6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9XygzMzk2MykseT1fKDIzNTgpLGc9Xyg4NjY3NSksQj1mdW5jdGlvbih3KXtyZXR1cm4geS5zbGljZSgwLHcubGVuZ3RoKT09PXd9O3VlLmV4cG9ydHM9QigiQnVu''@;'; put 'put ''LyIpPyJCVU4iOkIoIkNsb3VkZmxhcmUtV29ya2VycyIpPyJDTE9VREZMQVJFIjpCKCJEZW5vLyIpPyJERU5PIjpCKCJOb2RlLmpzLyIpPyJOT0RFIjpJLkJ1biYmInN0cmluZyI9PXR5cGVvZiBCdW4udmVyc2lvbj8iQlVOIjpJLkRlbm8mJiJvYmplY3QiPT10eXBlb2YgRGVuby52ZXJzaW9u''@;'; put 'put ''PyJERU5PIjoicHJvY2VzcyI9PT1nKEkucHJvY2Vzcyk/Ik5PREUiOkkud2luZG93JiZJLmRvY3VtZW50PyJCUk9XU0VSIjoiUkVTVCJ9LDk4ODU0Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNTg2MDcpLHk9RXJyb3IsZz1JKCIiLnJlcGxhY2UpLEI9U3RyaW5nKG5ldyB5KCJ6''@;'; put 'put ''eGNhc2QiKS5zdGFjayksdz0vXG5ccyphdCBbXjpdKjpbXlxuXSovLFA9dy50ZXN0KEIpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oRixPKXtpZihQJiYic3RyaW5nIj09dHlwZW9mIEYmJiF5LnByZXBhcmVTdGFja1RyYWNlKWZvcig7Ty0tOylGPWcoRix3LCIiKTtyZXR1cm4gRn19LDIyMzA0Oih1''@;'; put 'put ''ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMzY2NzgpLHk9Xyg5ODg1NCksZz1fKDc0OTY0KSxCPUVycm9yLmNhcHR1cmVTdGFja1RyYWNlO3VlLmV4cG9ydHM9ZnVuY3Rpb24odyxQLEYsTyl7ZyYmKEI/Qih3LFApOkkodywic3RhY2siLHkoRixPKSkpfX0sNzQ5NjQ6KHVlLHEsXyk9''@;'; put 'put ''PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg1NTU5MikseT1fKDc3NzczKTt1ZS5leHBvcnRzPSFJKGZ1bmN0aW9uKCl7dmFyIGc9bmV3IEVycm9yKCJhIik7cmV0dXJuISgic3RhY2siaW4gZyl8fChPYmplY3QuZGVmaW5lUHJvcGVydHkoZywic3RhY2siLHkoMSw3KSksNyE9PWcuc3RhY2spfSl9''@;'; put 'put ''LDI4MzY3Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMzM5NjMpLHk9Xyg1NDEyMikuZixnPV8oMzY2NzgpLEI9XygzMTA4Myksdz1fKDQ4MTA0KSxQPV8oNDg2MzkpLEY9XygxNjM2Myk7dWUuZXhwb3J0cz1mdW5jdGlvbihPLHope3ZhciBXLFksWCxlZSxKLE49Ty50YXJnZXQs''@;'; put 'put ''TD1PLmdsb2JhbCxLPU8uc3RhdDtpZihXPUw/STpLP0lbTl18fHcoTix7fSk6SVtOXSYmSVtOXS5wcm90b3R5cGUpZm9yKFkgaW4geil7aWYoZWU9eltZXSxYPU8uZG9udENhbGxHZXRTZXQ/KEo9eShXLFkpKSYmSi52YWx1ZTpXW1ldLCFGKEw/WTpOKyhLPyIuIjoiIyIpK1ksTy5mb3JjZWQp''@;'; put 'put ''JiZ2b2lkIDAhPT1YKXtpZih0eXBlb2YgZWU9PXR5cGVvZiBYKWNvbnRpbnVlO1AoZWUsWCl9KE8uc2hhbXx8WCYmWC5zaGFtKSYmZyhlZSwic2hhbSIsITApLEIoVyxZLGVlLE8pfX19LDU1NTkyOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9ZnVuY3Rpb24ocSl7dHJ5e3JldHVybiEh''@;'; put 'put ''cSgpfWNhdGNoe3JldHVybiEwfX19LDQwMjIwOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNzUxNTcpLHk9RnVuY3Rpb24ucHJvdG90eXBlLGc9eS5hcHBseSxCPXkuY2FsbDt1ZS5leHBvcnRzPSJvYmplY3QiPT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdC5hcHBseXx8KEk/Qi5i''@;'; put 'put ''aW5kKGcpOmZ1bmN0aW9uKCl7cmV0dXJuIEIuYXBwbHkoZyxhcmd1bWVudHMpfSl9LDc4ODExOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMzYyOSkseT1fKDMxNDgzKSxnPV8oNzUxNTcpLEI9SShJLmJpbmQpO3VlLmV4cG9ydHM9ZnVuY3Rpb24odyxQKXtyZXR1cm4geSh3KSx2''@;'; put 'put ''b2lkIDA9PT1QP3c6Zz9CKHcsUCk6ZnVuY3Rpb24oKXtyZXR1cm4gdy5hcHBseShQLGFyZ3VtZW50cyl9fX0sNzUxNTc6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg1NTU5Mik7dWUuZXhwb3J0cz0hSShmdW5jdGlvbigpe3ZhciB5PWZ1bmN0aW9uKCl7fS5iaW5kKCk7cmV0dXJu''@;'; put 'put ''ImZ1bmN0aW9uIiE9dHlwZW9mIHl8fHkuaGFzT3duUHJvcGVydHkoInByb3RvdHlwZSIpfSl9LDQ2OTI2Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNzUxNTcpLHk9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7dWUuZXhwb3J0cz1JP3kuYmluZCh5KTpmdW5jdGlvbigpe3JldHVy''@;'; put 'put ''biB5LmFwcGx5KHksYXJndW1lbnRzKX19LDg5OTgxOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNDYzODcpLHk9XygzOGUzKSxnPUZ1bmN0aW9uLnByb3RvdHlwZSxCPUkmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Isdz15KGcsIm5hbWUiKSxQPXcmJiJzb21ldGhp''@;'; put 'put ''bmciPT09ZnVuY3Rpb24oKXt9Lm5hbWUsRj13JiYoIUl8fEkmJkIoZywibmFtZSIpLmNvbmZpZ3VyYWJsZSk7dWUuZXhwb3J0cz17RVhJU1RTOncsUFJPUEVSOlAsQ09ORklHVVJBQkxFOkZ9fSw2OTIyNzoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDU4NjA3KSx5PV8oMzE0ODMp''@;'; put 'put ''O3VlLmV4cG9ydHM9ZnVuY3Rpb24oZyxCLHcpe3RyeXtyZXR1cm4gSSh5KE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZyxCKVt3XSkpfWNhdGNoe319fSwzNjI5Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oODY2NzUpLHk9Xyg1ODYwNyk7dWUuZXhwb3J0cz1mdW5j''@;'; put 'put ''dGlvbihnKXtpZigiRnVuY3Rpb24iPT09SShnKSlyZXR1cm4geShnKX19LDU4NjA3Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNzUxNTcpLHk9RnVuY3Rpb24ucHJvdG90eXBlLGc9eS5jYWxsLEI9SSYmeS5iaW5kLmJpbmQoZyxnKTt1ZS5leHBvcnRzPUk/QjpmdW5jdGlvbih3''@;'; put 'put ''KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZy5hcHBseSh3LGFyZ3VtZW50cyl9fX0sNjY1MDM6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9XygzMzk2Myk7dWUuZXhwb3J0cz1mdW5jdGlvbih5LGcpe3ZhciBCPUlbeV0sdz1CJiZCLnByb3RvdHlwZTtyZXR1cm4gdyYmd1tnXX19''@;'; put 'put ''LDEyMjAyOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMzM5NjMpLHk9XygxOTE1MCk7dWUuZXhwb3J0cz1mdW5jdGlvbihCLHcpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/ZnVuY3Rpb24oQil7cmV0dXJuIHkoQik/Qjp2b2lkIDB9KElbQl0pOklbQl0mJklbQl1bd119fSw3''@;'; put 'put ''NTQyNDp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPWZ1bmN0aW9uKHEpe3JldHVybntpdGVyYXRvcjpxLG5leHQ6cS5uZXh0LGRvbmU6ITF9fX0sNjM2Mjc6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg0NjkyNikseT1fKDExMDgpLGc9Xyg3NTQyNCksQj1fKDM2OTMyKTt1''@;'; put 'put ''ZS5leHBvcnRzPWZ1bmN0aW9uKHcsUCl7KCFQfHwic3RyaW5nIiE9dHlwZW9mIHcpJiZ5KHcpO3ZhciBGPUIodyk7cmV0dXJuIGcoeSh2b2lkIDAhPT1GP0koRix3KTp3KSl9fSwzNjkzMjoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDcxODI0KSx5PV8oODYxMTUpLGc9Xyg5NDQ2''@;'; put 'put ''OCksQj1fKDE5MjU4KSxQPV8oNTgwMTIpKCJpdGVyYXRvciIpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oRil7aWYoIWcoRikpcmV0dXJuIHkoRixQKXx8eShGLCJAQGl0ZXJhdG9yIil8fEJbSShGKV19fSw0MzU4NDoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDQ2OTI2KSx5PV8oMzE0''@;'; put 'put ''ODMpLGc9XygxMTA4KSxCPV8oNzUyMTIpLHc9XygzNjkzMiksUD1UeXBlRXJyb3I7dWUuZXhwb3J0cz1mdW5jdGlvbihGLE8pe3ZhciB6PWFyZ3VtZW50cy5sZW5ndGg8Mj93KEYpOk87aWYoeSh6KSlyZXR1cm4gZyhJKHosRikpO3Rocm93IG5ldyBQKEIoRikrIiBpcyBub3QgaXRlcmFibGUi''@;'; put 'put ''KX19LDg0NTI0Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNTg2MDcpLHk9Xyg2NzI3NyksZz1fKDE5MTUwKSxCPV8oODY2NzUpLHc9Xyg2ODMzMiksUD1JKFtdLnB1c2gpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oRil7aWYoZyhGKSlyZXR1cm4gRjtpZih5KEYpKXtmb3IodmFyIE89''@;'; put 'put ''Ri5sZW5ndGgsej1bXSxOPTA7TjxPO04rKyl7dmFyIEw9RltOXTsic3RyaW5nIj09dHlwZW9mIEw/UCh6LEwpOigibnVtYmVyIj09dHlwZW9mIEx8fCJOdW1iZXIiPT09QihMKXx8IlN0cmluZyI9PT1CKEwpKSYmUCh6LHcoTCkpfXZhciBLPXoubGVuZ3RoLFU9ITA7cmV0dXJuIGZ1bmN0aW9u''@;'; put 'put ''KFcsWSl7aWYoVSlyZXR1cm4gVT0hMSxZO2lmKHkodGhpcykpcmV0dXJuIFk7Zm9yKHZhciBYPTA7WDxLO1grKylpZih6W1hdPT09VylyZXR1cm4gWX19fX0sODYxMTU6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9XygzMTQ4MykseT1fKDk0NDY4KTt1ZS5leHBvcnRzPWZ1bmN0aW9u''@;'; put 'put ''KGcsQil7dmFyIHc9Z1tCXTtyZXR1cm4geSh3KT92b2lkIDA6SSh3KX19LDQzNjMyOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMzE0ODMpLHk9XygxMTA4KSxnPV8oNDY5MjYpLEI9Xyg2NDU1MCksdz1fKDc1NDI0KSxQPSJJbnZhbGlkIHNpemUiLEY9UmFuZ2VFcnJvcixPPVR5''@;'; put 'put ''cGVFcnJvcix6PU1hdGgubWF4LE49ZnVuY3Rpb24oTCxLKXt0aGlzLnNldD1MLHRoaXMuc2l6ZT16KEssMCksdGhpcy5oYXM9SShMLmhhcyksdGhpcy5rZXlzPUkoTC5rZXlzKX07Ti5wcm90b3R5cGU9e2dldEl0ZXJhdG9yOmZ1bmN0aW9uKCl7cmV0dXJuIHcoeShnKHRoaXMua2V5cyx0aGlz''@;'; put 'put ''LnNldCkpKX0saW5jbHVkZXM6ZnVuY3Rpb24oTCl7cmV0dXJuIGcodGhpcy5oYXMsdGhpcy5zZXQsTCl9fSx1ZS5leHBvcnRzPWZ1bmN0aW9uKEwpe3koTCk7dmFyIEs9K0wuc2l6ZTtpZihLIT1LKXRocm93IG5ldyBPKFApO3ZhciBVPUIoSyk7aWYoVTwwKXRocm93IG5ldyBGKFApO3JldHVy''@;'; put 'put ''biBuZXcgTihMLFUpfX0sOTYzMzk6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg1ODYwNykseT1fKDMxOTUwKSxnPU1hdGguZmxvb3IsQj1JKCIiLmNoYXJBdCksdz1JKCIiLnJlcGxhY2UpLFA9SSgiIi5zbGljZSksRj0vXCQoWyQmJ2BdfFxkezEsMn18PFtePl0qPikvZyxPPS9c''@;'; put 'put ''JChbJCYnYF18XGR7MSwyfSkvZzt1ZS5leHBvcnRzPWZ1bmN0aW9uKHosTixMLEssVSxXKXt2YXIgWT1MK3oubGVuZ3RoLFg9Sy5sZW5ndGgsZWU9TztyZXR1cm4gdm9pZCAwIT09VSYmKFU9eShVKSxlZT1GKSx3KFcsZWUsZnVuY3Rpb24oSixyZSl7dmFyIGllO3N3aXRjaChCKHJlLDApKXtj''@;'; put 'put ''YXNlIiQiOnJldHVybiIkIjtjYXNlIiYiOnJldHVybiB6O2Nhc2UiYCI6cmV0dXJuIFAoTiwwLEwpO2Nhc2UiJyI6cmV0dXJuIFAoTixZKTtjYXNlIjwiOmllPVVbUChyZSwxLC0xKV07YnJlYWs7ZGVmYXVsdDp2YXIgbGU9K3JlO2lmKDA9PT1sZSlyZXR1cm4gSjtpZihsZT5YKXt2YXIgbWU9''@;'; put 'put ''ZyhsZS8xMCk7cmV0dXJuIDA9PT1tZT9KOm1lPD1YP3ZvaWQgMD09PUtbbWUtMV0/QihyZSwxKTpLW21lLTFdK0IocmUsMSk6Sn1pZT1LW2xlLTFdfXJldHVybiB2b2lkIDA9PT1pZT8iIjppZX0pfX0sMzM5NjM6ZnVuY3Rpb24odWUpeyJ1c2Ugc3RyaWN0Ijt2YXIgcT1mdW5jdGlvbihfKXty''@;'; put 'put ''ZXR1cm4gXyYmXy5NYXRoPT09TWF0aCYmX307dWUuZXhwb3J0cz1xKCJvYmplY3QiPT10eXBlb2YgZ2xvYmFsVGhpcyYmZ2xvYmFsVGhpcyl8fHEoIm9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyl8fHEoIm9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmKXx8cSgib2JqZWN0Ij09dHlw''@;'; put 'put ''ZW9mIGdsb2JhbCYmZ2xvYmFsKXx8cSgib2JqZWN0Ij09dHlwZW9mIHRoaXMmJnRoaXMpfHxmdW5jdGlvbigpe3JldHVybiB0aGlzfSgpfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpfSwzOGUzOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNTg2MDcpLHk9XygzMTk1MCksZz1J''@;'; put 'put ''KHt9Lmhhc093blByb3BlcnR5KTt1ZS5leHBvcnRzPU9iamVjdC5oYXNPd258fGZ1bmN0aW9uKHcsUCl7cmV0dXJuIGcoeSh3KSxQKX19LDM0NjcwOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9e319LDg3MzcyOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMTIyMDIpO3Vl''@;'; put 'put ''LmV4cG9ydHM9SSgiZG9jdW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiKX0sNTcyNDQ6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg0NjM4NykseT1fKDU1NTkyKSxnPV8oNTU5ODgpO3VlLmV4cG9ydHM9IUkmJiF5KGZ1bmN0aW9uKCl7cmV0dXJuIDchPT1PYmplY3QuZGVmaW5lUHJv''@;'; put 'put ''cGVydHkoZygiZGl2IiksImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LDU1ODoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDU4NjA3KSx5PV8oNTU1OTIpLGc9Xyg4NjY3NSksQj1PYmplY3Qsdz1JKCIiLnNwbGl0KTt1ZS5leHBvcnRzPXkoZnVuY3Rpb24oKXty''@;'; put 'put ''ZXR1cm4hQigieiIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApfSk/ZnVuY3Rpb24oUCl7cmV0dXJuIlN0cmluZyI9PT1nKFApP3coUCwiIik6QihQKX06Qn0sMTcyOTY6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9XygxOTE1MCkseT1fKDMyNjMzKSxnPV8oMjE2MTIpO3VlLmV4cG9y''@;'; put 'put ''dHM9ZnVuY3Rpb24oQix3LFApe3ZhciBGLE87cmV0dXJuIGcmJkkoRj13LmNvbnN0cnVjdG9yKSYmRiE9PVAmJnkoTz1GLnByb3RvdHlwZSkmJk8hPT1QLnByb3RvdHlwZSYmZyhCLE8pLEJ9fSwyNjkzMToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDU4NjA3KSx5PV8oMTkxNTAp''@;'; put 'put ''LGc9Xyg0ODM1NiksQj1JKEZ1bmN0aW9uLnRvU3RyaW5nKTt5KGcuaW5zcGVjdFNvdXJjZSl8fChnLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24odyl7cmV0dXJuIEIodyl9KSx1ZS5leHBvcnRzPWcuaW5zcGVjdFNvdXJjZX0sNjQ4NTU6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xygz''@;'; put 'put ''MjYzMykseT1fKDM2Njc4KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKGcsQil7SShCKSYmImNhdXNlImluIEImJnkoZywiY2F1c2UiLEIuY2F1c2UpfX0sNDczNjoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgSyxVLFcsST1fKDQ4NjkxKSx5PV8oMzM5NjMpLGc9XygzMjYzMyksQj1fKDM2Njc4''@;'; put 'put ''KSx3PV8oMzhlMyksUD1fKDQ4MzU2KSxGPV8oNzk2NjIpLE89XygzNDY3MCksej0iT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQiLE49eS5UeXBlRXJyb3I7aWYoSXx8UC5zdGF0ZSl7dmFyIGVlPVAuc3RhdGV8fChQLnN0YXRlPW5ldygwLHkuV2Vha01hcCkpO2VlLmdldD1lZS5nZXQsZWUu''@;'; put 'put ''aGFzPWVlLmhhcyxlZS5zZXQ9ZWUuc2V0LEs9ZnVuY3Rpb24ocmUsaWUpe2lmKGVlLmhhcyhyZSkpdGhyb3cgbmV3IE4oeik7cmV0dXJuIGllLmZhY2FkZT1yZSxlZS5zZXQocmUsaWUpLGllfSxVPWZ1bmN0aW9uKHJlKXtyZXR1cm4gZWUuZ2V0KHJlKXx8e319LFc9ZnVuY3Rpb24ocmUpe3Jl''@;'; put 'put ''dHVybiBlZS5oYXMocmUpfX1lbHNle3ZhciBKPUYoInN0YXRlIik7T1tKXT0hMCxLPWZ1bmN0aW9uKHJlLGllKXtpZih3KHJlLEopKXRocm93IG5ldyBOKHopO3JldHVybiBpZS5mYWNhZGU9cmUsQihyZSxKLGllKSxpZX0sVT1mdW5jdGlvbihyZSl7cmV0dXJuIHcocmUsSik/cmVbSl06e319''@;'; put 'put ''LFc9ZnVuY3Rpb24ocmUpe3JldHVybiB3KHJlLEopfX11ZS5leHBvcnRzPXtzZXQ6SyxnZXQ6VSxoYXM6VyxlbmZvcmNlOmZ1bmN0aW9uKHJlKXtyZXR1cm4gVyhyZSk/VShyZSk6SyhyZSx7fSl9LGdldHRlckZvcjpmdW5jdGlvbihyZSl7cmV0dXJuIGZ1bmN0aW9uKGllKXt2YXIgbGU7aWYo''@;'; put 'put ''IWcoaWUpfHwobGU9VShpZSkpLnR5cGUhPT1yZSl0aHJvdyBuZXcgTigiSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAiK3JlKyIgcmVxdWlyZWQiKTtyZXR1cm4gbGV9fX19LDY2NzkyOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNTgwMTIpLHk9XygxOTI1OCksZz1JKCJpdGVyYXRv''@;'; put 'put ''ciIpLEI9QXJyYXkucHJvdG90eXBlO3VlLmV4cG9ydHM9ZnVuY3Rpb24odyl7cmV0dXJuIHZvaWQgMCE9PXcmJih5LkFycmF5PT09d3x8QltnXT09PXcpfX0sNjcyNzc6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg4NjY3NSk7dWUuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5j''@;'; put 'put ''dGlvbihnKXtyZXR1cm4iQXJyYXkiPT09SShnKX19LDE5MTUwOnVlPT57InVzZSBzdHJpY3QiO3ZhciBxPSJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQmJmRvY3VtZW50LmFsbDt1ZS5leHBvcnRzPXR5cGVvZiBxPiJ1IiYmdm9pZCAwIT09cT9mdW5jdGlvbihfKXtyZXR1cm4iZnVuY3Rpb24i''@;'; put 'put ''PT10eXBlb2YgX3x8Xz09PXF9OmZ1bmN0aW9uKF8pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBffX0sMTYzNjM6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg1NTU5MikseT1fKDE5MTUwKSxnPS8jfFwucHJvdG90eXBlXC4vLEI9ZnVuY3Rpb24oeixOKXt2YXIgTD1QW3coeild''@;'; put 'put ''O3JldHVybiBMPT09T3x8TCE9PUYmJih5KE4pP0koTik6ISFOKX0sdz1CLm5vcm1hbGl6ZT1mdW5jdGlvbih6KXtyZXR1cm4gU3RyaW5nKHopLnJlcGxhY2UoZywiLiIpLnRvTG93ZXJDYXNlKCl9LFA9Qi5kYXRhPXt9LEY9Qi5OQVRJVkU9Ik4iLE89Qi5QT0xZRklMTD0iUCI7dWUuZXhwb3J0''@;'; put 'put ''cz1CfSw5NDQ2ODp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPWZ1bmN0aW9uKHEpe3JldHVybiBudWxsPT1xfX0sMzI2MzM6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9XygxOTE1MCk7dWUuZXhwb3J0cz1mdW5jdGlvbih5KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHk/bnVs''@;'; put 'put ''bCE9PXk6SSh5KX19LDQzNDA2Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMzI2MzMpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oeSl7cmV0dXJuIEkoeSl8fG51bGw9PT15fX0sODg3ODg6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz0hMX0sODg4Njc6KHVlLHEsXyk9PnsidXNl''@;'; put 'put ''IHN0cmljdCI7dmFyIEk9XygzMjYzMykseT1fKDg2Njc1KSxCPV8oNTgwMTIpKCJtYXRjaCIpO3VlLmV4cG9ydHM9ZnVuY3Rpb24odyl7dmFyIFA7cmV0dXJuIEkodykmJih2b2lkIDAhPT0oUD13W0JdKT8hIVA6IlJlZ0V4cCI9PT15KHcpKX19LDkyOTk4Oih1ZSxxLF8pPT57InVzZSBzdHJp''@;'; put 'put ''Y3QiO3ZhciBJPV8oMTIyMDIpLHk9XygxOTE1MCksZz1fKDQ2OCksQj1fKDY2OTk1KSx3PU9iamVjdDt1ZS5leHBvcnRzPUI/ZnVuY3Rpb24oUCl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBQfTpmdW5jdGlvbihQKXt2YXIgRj1JKCJTeW1ib2wiKTtyZXR1cm4geShGKSYmZyhGLnByb3RvdHlw''@;'; put 'put ''ZSx3KFApKX19LDExMzg6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg0NjkyNik7dWUuZXhwb3J0cz1mdW5jdGlvbih5LGcsQil7Zm9yKHZhciBGLE8sdz1CP3k6eS5pdGVyYXRvcixQPXkubmV4dDshKEY9SShQLHcpKS5kb25lOylpZih2b2lkIDAhPT0oTz1nKEYudmFsdWUpKSly''@;'; put 'put ''ZXR1cm4gT319LDMwNzg3Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNzg4MTEpLHk9Xyg0NjkyNiksZz1fKDExMDgpLEI9Xyg3NTIxMiksdz1fKDY2NzkyKSxQPV8oNzE3MSksRj1fKDQ2OCksTz1fKDQzNTg0KSx6PV8oMzY5MzIpLE49Xyg2NjU0MiksTD1UeXBlRXJyb3IsSz1m''@;'; put 'put ''dW5jdGlvbihXLFkpe3RoaXMuc3RvcHBlZD1XLHRoaXMucmVzdWx0PVl9LFU9Sy5wcm90b3R5cGU7dWUuZXhwb3J0cz1mdW5jdGlvbihXLFksWCl7dmFyIF9lLFRlLFNlLHplLFYscCxiLEo9ISghWHx8IVguQVNfRU5UUklFUykscmU9ISghWHx8IVguSVNfUkVDT1JEKSxpZT0hKCFYfHwhWC5J''@;'; put 'put ''U19JVEVSQVRPUiksbGU9ISghWHx8IVguSU5URVJSVVBURUQpLG1lPUkoWSxYJiZYLnRoYXQpLHg9ZnVuY3Rpb24oVCl7cmV0dXJuIF9lJiZOKF9lLCJub3JtYWwiLFQpLG5ldyBLKCEwLFQpfSxDPWZ1bmN0aW9uKFQpe3JldHVybiBKPyhnKFQpLGxlP21lKFRbMF0sVFsxXSx4KTptZShUWzBd''@;'; put 'put ''LFRbMV0pKTpsZT9tZShULHgpOm1lKFQpfTtpZihyZSlfZT1XLml0ZXJhdG9yO2Vsc2UgaWYoaWUpX2U9VztlbHNle2lmKCEoVGU9eihXKSkpdGhyb3cgbmV3IEwoQihXKSsiIGlzIG5vdCBpdGVyYWJsZSIpO2lmKHcoVGUpKXtmb3IoU2U9MCx6ZT1QKFcpO3plPlNlO1NlKyspaWYoKFY9QyhX''@;'; put 'put ''W1NlXSkpJiZGKFUsVikpcmV0dXJuIFY7cmV0dXJuIG5ldyBLKCExKX1fZT1PKFcsVGUpfWZvcihwPXJlP1cubmV4dDpfZS5uZXh0OyEoYj15KHAsX2UpKS5kb25lOyl7dHJ5e1Y9QyhiLnZhbHVlKX1jYXRjaChUKXtOKF9lLCJ0aHJvdyIsVCl9aWYoIm9iamVjdCI9PXR5cGVvZiBWJiZWJiZG''@;'; put 'put ''KFUsVikpcmV0dXJuIFZ9cmV0dXJuIG5ldyBLKCExKX19LDY2NTQyOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNDY5MjYpLHk9XygxMTA4KSxnPV8oODYxMTUpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oQix3LFApe3ZhciBGLE87eShCKTt0cnl7aWYoIShGPWcoQiwicmV0dXJuIikp''@;'; put 'put ''KXtpZigidGhyb3ciPT09dyl0aHJvdyBQO3JldHVybiBQfUY9SShGLEIpfWNhdGNoKHope089ITAsRj16fWlmKCJ0aHJvdyI9PT13KXRocm93IFA7aWYoTyl0aHJvdyBGO3JldHVybiB5KEYpLFB9fSw2OTkxNzoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDQ2OTI2KSx5PV8oOTc5''@;'; put 'put ''NTEpLGc9XygzNjY3OCksQj1fKDE0NzUwKSx3PV8oNTgwMTIpLFA9Xyg0NzM2KSxGPV8oODYxMTUpLE89Xyg3ODk2OCkuSXRlcmF0b3JQcm90b3R5cGUsej1fKDU4OTc4KSxOPV8oNjY1NDIpLEw9dygidG9TdHJpbmdUYWciKSxLPSJJdGVyYXRvckhlbHBlciIsVT0iV3JhcEZvclZhbGlkSXRl''@;'; put 'put ''cmF0b3IiLFc9UC5zZXQsWT1mdW5jdGlvbihKKXt2YXIgcmU9UC5nZXR0ZXJGb3IoSj9VOkspO3JldHVybiBCKHkoTykse25leHQ6ZnVuY3Rpb24oKXt2YXIgbGU9cmUodGhpcyk7aWYoSilyZXR1cm4gbGUubmV4dEhhbmRsZXIoKTtpZihsZS5kb25lKXJldHVybiB6KHZvaWQgMCwhMCk7dHJ5''@;'; put 'put ''e3ZhciBtZT1sZS5uZXh0SGFuZGxlcigpO3JldHVybiBsZS5yZXR1cm5IYW5kbGVyUmVzdWx0P21lOnoobWUsbGUuZG9uZSl9Y2F0Y2goX2Upe3Rocm93IGxlLmRvbmU9ITAsX2V9fSxyZXR1cm46ZnVuY3Rpb24oKXt2YXIgaWU9cmUodGhpcyksbGU9aWUuaXRlcmF0b3I7aWYoaWUuZG9uZT0h''@;'; put 'put ''MCxKKXt2YXIgbWU9RihsZSwicmV0dXJuIik7cmV0dXJuIG1lP0kobWUsbGUpOnoodm9pZCAwLCEwKX1pZihpZS5pbm5lcil0cnl7TihpZS5pbm5lci5pdGVyYXRvciwibm9ybWFsIil9Y2F0Y2goX2Upe3JldHVybiBOKGxlLCJ0aHJvdyIsX2UpfXJldHVybiBsZSYmTihsZSwibm9ybWFsIiks''@;'; put 'put ''eih2b2lkIDAsITApfX0pfSxYPVkoITApLGVlPVkoITEpO2coZWUsTCwiSXRlcmF0b3IgSGVscGVyIiksdWUuZXhwb3J0cz1mdW5jdGlvbihKLHJlLGllKXt2YXIgbGU9ZnVuY3Rpb24oX2UsVGUpe1RlPyhUZS5pdGVyYXRvcj1fZS5pdGVyYXRvcixUZS5uZXh0PV9lLm5leHQpOlRlPV9lLFRl''@;'; put 'put ''LnR5cGU9cmU/VTpLLFRlLnJldHVybkhhbmRsZXJSZXN1bHQ9ISFpZSxUZS5uZXh0SGFuZGxlcj1KLFRlLmNvdW50ZXI9MCxUZS5kb25lPSExLFcodGhpcyxUZSl9O3JldHVybiBsZS5wcm90b3R5cGU9cmU/WDplZSxsZX19LDc2NzA4Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8o''@;'; put 'put ''NDY5MjYpLHk9XygzMTQ4MyksZz1fKDExMDgpLEI9Xyg3NTQyNCksdz1fKDY5OTE3KSxQPV8oNDI5MjYpLEY9dyhmdW5jdGlvbigpe3ZhciBPPXRoaXMuaXRlcmF0b3Isej1nKEkodGhpcy5uZXh0LE8pKTtpZighKHRoaXMuZG9uZT0hIXouZG9uZSkpcmV0dXJuIFAoTyx0aGlzLm1hcHBlcixb''@;'; put 'put ''ei52YWx1ZSx0aGlzLmNvdW50ZXIrK10sITApfSk7dWUuZXhwb3J0cz1mdW5jdGlvbih6KXtyZXR1cm4gZyh0aGlzKSx5KHopLG5ldyBGKEIodGhpcykse21hcHBlcjp6fSl9fSw3ODk2ODoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgTCxLLFUsST1fKDU1NTkyKSx5PV8oMTkxNTApLGc9''@;'; put 'put ''XygzMjYzMyksQj1fKDk3OTUxKSx3PV8oMjY0MDApLFA9XygzMTA4MyksRj1fKDU4MDEyKSxPPV8oODg3ODgpLHo9RigiaXRlcmF0b3IiKSxOPSExO1tdLmtleXMmJigibmV4dCJpbihVPVtdLmtleXMoKSk/KEs9dyh3KFUpKSkhPT1PYmplY3QucHJvdG90eXBlJiYoTD1LKTpOPSEwKSwhZyhM''@;'; put 'put ''KXx8SShmdW5jdGlvbigpe3ZhciBZPXt9O3JldHVybiBMW3pdLmNhbGwoWSkhPT1ZfSk/TD17fTpPJiYoTD1CKEwpKSx5KExbel0pfHxQKEwseixmdW5jdGlvbigpe3JldHVybiB0aGlzfSksdWUuZXhwb3J0cz17SXRlcmF0b3JQcm90b3R5cGU6TCxCVUdHWV9TQUZBUklfSVRFUkFUT1JTOk59''@;'; put 'put ''fSwxOTI1ODp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPXt9fSw3MTcxOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oOTQyMzcpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oeSl7cmV0dXJuIEkoeS5sZW5ndGgpfX0sMTY5ODA6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9''@;'; put 'put ''Xyg1ODYwNykseT1fKDU1NTkyKSxnPV8oMTkxNTApLEI9XygzOGUzKSx3PV8oNDYzODcpLFA9Xyg4OTk4MSkuQ09ORklHVVJBQkxFLEY9XygyNjkzMSksTz1fKDQ3MzYpLHo9Ty5lbmZvcmNlLE49Ty5nZXQsTD1TdHJpbmcsSz1PYmplY3QuZGVmaW5lUHJvcGVydHksVT1JKCIiLnNsaWNlKSxX''@;'; put 'put ''PUkoIiIucmVwbGFjZSksWT1JKFtdLmpvaW4pLFg9dyYmIXkoZnVuY3Rpb24oKXtyZXR1cm4gOCE9PUsoZnVuY3Rpb24oKXt9LCJsZW5ndGgiLHt2YWx1ZTo4fSkubGVuZ3RofSksZWU9U3RyaW5nKFN0cmluZykuc3BsaXQoIlN0cmluZyIpLEo9dWUuZXhwb3J0cz1mdW5jdGlvbihyZSxpZSxs''@;'; put 'put ''ZSl7IlN5bWJvbCgiPT09VShMKGllKSwwLDcpJiYoaWU9IlsiK1coTChpZSksL15TeW1ib2xcKChbXildKilcKS4qJC8sIiQxIikrIl0iKSxsZSYmbGUuZ2V0dGVyJiYoaWU9ImdldCAiK2llKSxsZSYmbGUuc2V0dGVyJiYoaWU9InNldCAiK2llKSwoIUIocmUsIm5hbWUiKXx8UCYmcmUubmFt''@;'; put 'put ''ZSE9PWllKSYmKHc/SyhyZSwibmFtZSIse3ZhbHVlOmllLGNvbmZpZ3VyYWJsZTohMH0pOnJlLm5hbWU9aWUpLFgmJmxlJiZCKGxlLCJhcml0eSIpJiZyZS5sZW5ndGghPT1sZS5hcml0eSYmSyhyZSwibGVuZ3RoIix7dmFsdWU6bGUuYXJpdHl9KTt0cnl7bGUmJkIobGUsImNvbnN0cnVjdG9y''@;'; put 'put ''IikmJmxlLmNvbnN0cnVjdG9yP3cmJksocmUsInByb3RvdHlwZSIse3dyaXRhYmxlOiExfSk6cmUucHJvdG90eXBlJiYocmUucHJvdG90eXBlPXZvaWQgMCl9Y2F0Y2h7fXZhciBtZT16KHJlKTtyZXR1cm4gQihtZSwic291cmNlIil8fChtZS5zb3VyY2U9WShlZSwic3RyaW5nIj09dHlwZW9m''@;'; put 'put ''IGllP2llOiIiKSkscmV9O0Z1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZz1KKGZ1bmN0aW9uKCl7cmV0dXJuIGcodGhpcykmJk4odGhpcykuc291cmNlfHxGKHRoaXMpfSwidG9TdHJpbmciKX0sMTg1NTY6dWU9PnsidXNlIHN0cmljdCI7dmFyIHE9TWF0aC5jZWlsLF89TWF0aC5mbG9vcjt1''@;'; put 'put ''ZS5leHBvcnRzPU1hdGgudHJ1bmN8fGZ1bmN0aW9uKHkpe3ZhciBnPSt5O3JldHVybihnPjA/XzpxKShnKX19LDM5MTE2Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNjgzMzIpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oeSxnKXtyZXR1cm4gdm9pZCAwPT09eT9hcmd1bWVudHMubGVu''@;'; put 'put ''Z3RoPDI/IiI6ZzpJKHkpfX0sOTc5NTE6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIGVlLEk9XygxMTA4KSx5PV8oNzExNjgpLGc9Xyg1ODU0MCksQj1fKDM0NjcwKSx3PV8oODczNzIpLFA9Xyg1NTk4OCksRj1fKDc5NjYyKSxOPSJwcm90b3R5cGUiLEw9InNjcmlwdCIsSz1GKCJJRV9Q''@;'; put 'put ''Uk9UTyIpLFU9ZnVuY3Rpb24oKXt9LFc9ZnVuY3Rpb24ocmUpe3JldHVybiI8IitMKyI+IityZSsiPC8iK0wrIj4ifSxZPWZ1bmN0aW9uKHJlKXtyZS53cml0ZShXKCIiKSkscmUuY2xvc2UoKTt2YXIgaWU9cmUucGFyZW50V2luZG93Lk9iamVjdDtyZXR1cm4gcmU9bnVsbCxpZX0sSj1mdW5j''@;'; put 'put ''dGlvbigpe3RyeXtlZT1uZXcgQWN0aXZlWE9iamVjdCgiaHRtbGZpbGUiKX1jYXRjaHt9Sj10eXBlb2YgZG9jdW1lbnQ8InUiP2RvY3VtZW50LmRvbWFpbiYmZWU/WShlZSk6ZnVuY3Rpb24oKXt2YXIgbGUscmU9UCgiaWZyYW1lIiksaWU9ImphdmEiK0wrIjoiO3JldHVybiByZS5zdHlsZS5k''@;'; put 'put ''aXNwbGF5PSJub25lIix3LmFwcGVuZENoaWxkKHJlKSxyZS5zcmM9U3RyaW5nKGllKSwobGU9cmUuY29udGVudFdpbmRvdy5kb2N1bWVudCkub3BlbigpLGxlLndyaXRlKFcoImRvY3VtZW50LkY9T2JqZWN0IikpLGxlLmNsb3NlKCksbGUuRn0oKTpZKGVlKTtmb3IodmFyIHJlPWcubGVuZ3Ro''@;'; put 'put ''O3JlLS07KWRlbGV0ZSBKW05dW2dbcmVdXTtyZXR1cm4gSigpfTtCW0tdPSEwLHVlLmV4cG9ydHM9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24oaWUsbGUpe3ZhciBtZTtyZXR1cm4gbnVsbCE9PWllPyhVW05dPUkoaWUpLG1lPW5ldyBVLFVbTl09bnVsbCxtZVtLXT1pZSk6bWU9SigpLHZvaWQg''@;'; put 'put ''MD09PWxlP21lOnkuZihtZSxsZSl9fSw3MTE2ODoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDQ2Mzg3KSx5PV8oMjY5MjkpLGc9Xyg0NDY0OCksQj1fKDExMDgpLHc9Xyg5MzE2MiksUD1fKDEwMTQzKTtxLmY9SSYmIXk/T2JqZWN0LmRlZmluZVByb3BlcnRpZXM6ZnVuY3Rpb24o''@;'; put 'put ''Tyx6KXtCKE8pO2Zvcih2YXIgVyxOPXcoeiksTD1QKHopLEs9TC5sZW5ndGgsVT0wO0s+VTspZy5mKE8sVz1MW1UrK10sTltXXSk7cmV0dXJuIE99fSw0NDY0ODoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDQ2Mzg3KSx5PV8oNTcyNDQpLGc9XygyNjkyOSksQj1fKDExMDgpLHc9''@;'; put 'put ''Xyg1OTQxMCksUD1UeXBlRXJyb3IsRj1PYmplY3QuZGVmaW5lUHJvcGVydHksTz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLHo9ImVudW1lcmFibGUiLE49ImNvbmZpZ3VyYWJsZSIsTD0id3JpdGFibGUiO3EuZj1JP2c/ZnVuY3Rpb24oVSxXLFkpe2lmKEIoVSksVz13KFcpLEIo''@;'; put 'put ''WSksImZ1bmN0aW9uIj09dHlwZW9mIFUmJiJwcm90b3R5cGUiPT09VyYmInZhbHVlImluIFkmJkwgaW4gWSYmIVlbTF0pe3ZhciBYPU8oVSxXKTtYJiZYW0xdJiYoVVtXXT1ZLnZhbHVlLFk9e2NvbmZpZ3VyYWJsZTpOIGluIFk/WVtOXTpYW05dLGVudW1lcmFibGU6eiBpbiBZP1lbel06WFt6''@;'; put 'put ''XSx3cml0YWJsZTohMX0pfXJldHVybiBGKFUsVyxZKX06RjpmdW5jdGlvbihVLFcsWSl7aWYoQihVKSxXPXcoVyksQihZKSx5KXRyeXtyZXR1cm4gRihVLFcsWSl9Y2F0Y2h7fWlmKCJnZXQiaW4gWXx8InNldCJpbiBZKXRocm93IG5ldyBQKCJBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCIpO3Jl''@;'; put 'put ''dHVybiJ2YWx1ZSJpbiBZJiYoVVtXXT1ZLnZhbHVlKSxVfX0sNTQxMjI6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg0NjM4NykseT1fKDQ2OTI2KSxnPV8oMzk2MiksQj1fKDc3NzczKSx3PV8oOTMxNjIpLFA9Xyg1OTQxMCksRj1fKDM4ZTMpLE89Xyg1NzI0NCksej1PYmplY3Qu''@;'; put 'put ''Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO3EuZj1JP3o6ZnVuY3Rpb24oTCxLKXtpZihMPXcoTCksSz1QKEspLE8pdHJ5e3JldHVybiB6KEwsSyl9Y2F0Y2h7fWlmKEYoTCxLKSlyZXR1cm4gQigheShnLmYsTCxLKSxMW0tdKX19LDM2MTQzOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJ''@;'; put 'put ''PV8oMjMzMTMpLGc9Xyg1ODU0MCkuY29uY2F0KCJsZW5ndGgiLCJwcm90b3R5cGUiKTtxLmY9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKHcpe3JldHVybiBJKHcsZyl9fSwyODA3MDoodWUscSk9PnsidXNlIHN0cmljdCI7cS5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5''@;'; put 'put ''bWJvbHN9LDI2NDAwOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMzhlMykseT1fKDE5MTUwKSxnPV8oMzE5NTApLEI9Xyg3OTY2Miksdz1fKDgyODM0KSxQPUIoIklFX1BST1RPIiksRj1PYmplY3QsTz1GLnByb3RvdHlwZTt1ZS5leHBvcnRzPXc/Ri5nZXRQcm90b3R5cGVPZjpm''@;'; put 'put ''dW5jdGlvbih6KXt2YXIgTj1nKHopO2lmKEkoTixQKSlyZXR1cm4gTltQXTt2YXIgTD1OLmNvbnN0cnVjdG9yO3JldHVybiB5KEwpJiZOIGluc3RhbmNlb2YgTD9MLnByb3RvdHlwZTpOIGluc3RhbmNlb2YgRj9POm51bGx9fSw0Njg6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg1''@;'; put 'put ''ODYwNyk7dWUuZXhwb3J0cz1JKHt9LmlzUHJvdG90eXBlT2YpfSwyMzMxMzoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDU4NjA3KSx5PV8oMzhlMyksZz1fKDkzMTYyKSxCPV8oNzQ4MjQpLmluZGV4T2Ysdz1fKDM0NjcwKSxQPUkoW10ucHVzaCk7dWUuZXhwb3J0cz1mdW5jdGlv''@;'; put 'put ''bihGLE8pe3ZhciBLLHo9ZyhGKSxOPTAsTD1bXTtmb3IoSyBpbiB6KSF5KHcsSykmJnkoeixLKSYmUChMLEspO2Zvcig7Ty5sZW5ndGg+TjspeSh6LEs9T1tOKytdKSYmKH5CKEwsSyl8fFAoTCxLKSk7cmV0dXJuIEx9fSwxMDE0MzoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDIz''@;'; put 'put ''MzEzKSx5PV8oNTg1NDApO3VlLmV4cG9ydHM9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKEIpe3JldHVybiBJKEIseSl9fSwzOTYyOih1ZSxxKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgXz17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxJPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IseT1JJiYh''@;'; put 'put ''Xy5jYWxsKHsxOjJ9LDEpO3EuZj15P2Z1bmN0aW9uKEIpe3ZhciB3PUkodGhpcyxCKTtyZXR1cm4hIXcmJncuZW51bWVyYWJsZX06X30sMjE2MTI6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg2OTIyNykseT1fKDMyNjMzKSxnPV8oODgyNzUpLEI9XygyNzY3KTt1ZS5leHBvcnRz''@;'; put 'put ''PU9iamVjdC5zZXRQcm90b3R5cGVPZnx8KCJfX3Byb3RvX18iaW57fT9mdW5jdGlvbigpe3ZhciBGLHc9ITEsUD17fTt0cnl7KEY9SShPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iLCJzZXQiKSkoUCxbXSksdz1QIGluc3RhbmNlb2YgQXJyYXl9Y2F0Y2h7fXJldHVybiBmdW5jdGlvbih6''@;'; put 'put ''LE4pe3JldHVybiBnKHopLEIoTikseSh6KSYmKHc/Rih6LE4pOnouX19wcm90b19fPU4pLHp9fSgpOnZvaWQgMCl9LDkzODY1Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNDY5MjYpLHk9XygxOTE1MCksZz1fKDMyNjMzKSxCPVR5cGVFcnJvcjt1ZS5leHBvcnRzPWZ1bmN0aW9u''@;'; put 'put ''KHcsUCl7dmFyIEYsTztpZigic3RyaW5nIj09PVAmJnkoRj13LnRvU3RyaW5nKSYmIWcoTz1JKEYsdykpfHx5KEY9dy52YWx1ZU9mKSYmIWcoTz1JKEYsdykpfHwic3RyaW5nIiE9PVAmJnkoRj13LnRvU3RyaW5nKSYmIWcoTz1JKEYsdykpKXJldHVybiBPO3Rocm93IG5ldyBCKCJDYW4ndCBj''@;'; put 'put ''b252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWUiKX19LDg4MDc4Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMTIyMDIpLHk9Xyg1ODYwNyksZz1fKDM2MTQzKSxCPV8oMjgwNzApLHc9XygxMTA4KSxQPXkoW10uY29uY2F0KTt1ZS5leHBvcnRzPUkoIlJlZmxlY3QiLCJv''@;'; put 'put ''d25LZXlzIil8fGZ1bmN0aW9uKE8pe3ZhciB6PWcuZih3KE8pKSxOPUIuZjtyZXR1cm4gTj9QKHosTihPKSk6en19LDYwMzIxOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNDQ2NDgpLmY7dWUuZXhwb3J0cz1mdW5jdGlvbih5LGcsQil7QiBpbiB5fHxJKHksQix7Y29uZmlndXJh''@;'; put 'put ''YmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBnW0JdfSxzZXQ6ZnVuY3Rpb24odyl7Z1tCXT13fX0pfX0sMjI3NTQ6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9XygxMTA4KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHk9SSh0aGlzKSxnPSIiO3JldHVybiB5Lmhhc0luZGlj''@;'; put 'put ''ZXMmJihnKz0iZCIpLHkuZ2xvYmFsJiYoZys9ImciKSx5Lmlnbm9yZUNhc2UmJihnKz0iaSIpLHkubXVsdGlsaW5lJiYoZys9Im0iKSx5LmRvdEFsbCYmKGcrPSJzIikseS51bmljb2RlJiYoZys9InUiKSx5LnVuaWNvZGVTZXRzJiYoZys9InYiKSx5LnN0aWNreSYmKGcrPSJ5IiksZ319LDM3''@;'; put 'put ''MDc1Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNDY5MjYpLHk9XygzOGUzKSxnPV8oNDY4KSxCPV8oMjI3NTQpLHc9UmVnRXhwLnByb3RvdHlwZTt1ZS5leHBvcnRzPWZ1bmN0aW9uKFApe3ZhciBGPVAuZmxhZ3M7cmV0dXJuIHZvaWQgMCE9PUZ8fCJmbGFncyJpbiB3fHx5KFAs''@;'; put 'put ''ImZsYWdzIil8fCFnKHcsUCk/RjpJKEIsUCl9fSw4ODI3NToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDk0NDY4KSx5PVR5cGVFcnJvcjt1ZS5leHBvcnRzPWZ1bmN0aW9uKGcpe2lmKEkoZykpdGhyb3cgbmV3IHkoIkNhbid0IGNhbGwgbWV0aG9kIG9uICIrZyk7cmV0dXJuIGd9''@;'; put 'put ''fSw0MzI0OToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgTixJPV8oMzM5NjMpLHk9Xyg0MDIyMCksZz1fKDE5MTUwKSxCPV8oNDcwOTIpLHc9XygyMzU4KSxQPV8oNzc2MzkpLEY9XygyNzk2NyksTz1JLkZ1bmN0aW9uLHo9L01TSUUgLlwuLy50ZXN0KHcpfHwiQlVOIj09PUImJigoTj1J''@;'; put 'put ''LkJ1bi52ZXJzaW9uLnNwbGl0KCIuIikpLmxlbmd0aDwzfHwiMCI9PT1OWzBdJiYoTlsxXTwzfHwiMyI9PT1OWzFdJiYiMCI9PT1OWzJdKSk7dWUuZXhwb3J0cz1mdW5jdGlvbihOLEwpe3ZhciBLPUw/MjoxO3JldHVybiB6P2Z1bmN0aW9uKFUsVyl7dmFyIFk9Rihhcmd1bWVudHMubGVuZ3Ro''@;'; put 'put ''LDEpPkssWD1nKFUpP1U6TyhVKSxlZT1ZP1AoYXJndW1lbnRzLEspOltdLEo9WT9mdW5jdGlvbigpe3koWCx0aGlzLGVlKX06WDtyZXR1cm4gTD9OKEosVyk6TihKKX06Tn19LDE0NDU6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg5NzU0MSkseT1fKDIxOTEwKSxnPUkuU2V0LEI9''@;'; put 'put ''SS5hZGQ7dWUuZXhwb3J0cz1mdW5jdGlvbih3KXt2YXIgUD1uZXcgZztyZXR1cm4geSh3LGZ1bmN0aW9uKEYpe0IoUCxGKX0pLFB9fSw4MDIxMzoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDM3NzMxKSx5PV8oOTc1NDEpLGc9XygxNDQ1KSxCPV8oMzAzMzkpLHc9Xyg0MzYzMiks''@;'; put 'put ''UD1fKDIxOTEwKSxGPV8oMTEzOCksTz15Lmhhcyx6PXkucmVtb3ZlO3VlLmV4cG9ydHM9ZnVuY3Rpb24oTCl7dmFyIEs9SSh0aGlzKSxVPXcoTCksVz1nKEspO3JldHVybiBCKEspPD1VLnNpemU/UChLLGZ1bmN0aW9uKFkpe1UuaW5jbHVkZXMoWSkmJnooVyxZKX0pOkYoVS5nZXRJdGVyYXRv''@;'; put 'put ''cigpLGZ1bmN0aW9uKFkpe08oSyxZKSYmeihXLFkpfSksV319LDk3NTQxOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNTg2MDcpLHk9U2V0LnByb3RvdHlwZTt1ZS5leHBvcnRzPXtTZXQsYWRkOkkoeS5hZGQpLGhhczpJKHkuaGFzKSxyZW1vdmU6SSh5LmRlbGV0ZSkscHJvdG86''@;'; put 'put ''eX19LDYxODc5Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMzc3MzEpLHk9Xyg5NzU0MSksZz1fKDMwMzM5KSxCPV8oNDM2MzIpLHc9XygyMTkxMCksUD1fKDExMzgpLEY9eS5TZXQsTz15LmFkZCx6PXkuaGFzO3VlLmV4cG9ydHM9ZnVuY3Rpb24oTCl7dmFyIEs9SSh0aGlzKSxV''@;'; put 'put ''PUIoTCksVz1uZXcgRjtyZXR1cm4gZyhLKT5VLnNpemU/UChVLmdldEl0ZXJhdG9yKCksZnVuY3Rpb24oWSl7eihLLFkpJiZPKFcsWSl9KTp3KEssZnVuY3Rpb24oWSl7VS5pbmNsdWRlcyhZKSYmTyhXLFkpfSksV319LDczNjI0Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMzc3''@;'; put 'put ''MzEpLHk9Xyg5NzU0MSkuaGFzLGc9XygzMDMzOSksQj1fKDQzNjMyKSx3PV8oMjE5MTApLFA9XygxMTM4KSxGPV8oNjY1NDIpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oeil7dmFyIE49SSh0aGlzKSxMPUIoeik7aWYoZyhOKTw9TC5zaXplKXJldHVybiExIT09dyhOLGZ1bmN0aW9uKFUpe2lmKEwu''@;'; put 'put ''aW5jbHVkZXMoVSkpcmV0dXJuITF9LCEwKTt2YXIgSz1MLmdldEl0ZXJhdG9yKCk7cmV0dXJuITEhPT1QKEssZnVuY3Rpb24oVSl7aWYoeShOLFUpKXJldHVybiBGKEssIm5vcm1hbCIsITEpfSl9fSw3NDgzOToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDM3NzMxKSx5PV8oMzAz''@;'; put 'put ''MzkpLGc9XygyMTkxMCksQj1fKDQzNjMyKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKFApe3ZhciBGPUkodGhpcyksTz1CKFApO3JldHVybiEoeShGKT5PLnNpemUpJiYhMSE9PWcoRixmdW5jdGlvbih6KXtpZighTy5pbmNsdWRlcyh6KSlyZXR1cm4hMX0sITApfX0sOTYwNjI6KHVlLHEsXyk9Pnsi''@;'; put 'put ''dXNlIHN0cmljdCI7dmFyIEk9XygzNzczMSkseT1fKDk3NTQxKS5oYXMsZz1fKDMwMzM5KSxCPV8oNDM2MzIpLHc9XygxMTM4KSxQPV8oNjY1NDIpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oTyl7dmFyIHo9SSh0aGlzKSxOPUIoTyk7aWYoZyh6KTxOLnNpemUpcmV0dXJuITE7dmFyIEw9Ti5nZXRJ''@;'; put 'put ''dGVyYXRvcigpO3JldHVybiExIT09dyhMLGZ1bmN0aW9uKEspe2lmKCF5KHosSykpcmV0dXJuIFAoTCwibm9ybWFsIiwhMSl9KX19LDIxOTEwOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNTg2MDcpLHk9XygxMTM4KSxnPV8oOTc1NDEpLEI9Zy5TZXQsdz1nLnByb3RvLFA9SSh3''@;'; put 'put ''LmZvckVhY2gpLEY9SSh3LmtleXMpLE89RihuZXcgQikubmV4dDt1ZS5leHBvcnRzPWZ1bmN0aW9uKHosTixMKXtyZXR1cm4gTD95KHtpdGVyYXRvcjpGKHopLG5leHQ6T30sTik6UCh6LE4pfX0sNTM1MDU6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9XygxMjIwMikseT1mdW5jdGlv''@;'; put 'put ''bihCKXtyZXR1cm57c2l6ZTpCLGhhczpmdW5jdGlvbigpe3JldHVybiExfSxrZXlzOmZ1bmN0aW9uKCl7cmV0dXJue25leHQ6ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTohMH19fX19fSxnPWZ1bmN0aW9uKEIpe3JldHVybntzaXplOkIsaGFzOmZ1bmN0aW9uKCl7cmV0dXJuITB9LGtleXM6ZnVu''@;'; put 'put ''Y3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoImUiKX19fTt1ZS5leHBvcnRzPWZ1bmN0aW9uKEIsdyl7dmFyIFA9SSgiU2V0Iik7dHJ5eyhuZXcgUClbQl0oeSgwKSk7dHJ5e3JldHVybihuZXcgUClbQl0oeSgtMSkpLCExfWNhdGNoe2lmKCF3KXJldHVybiEwO3RyeXtyZXR1cm4obmV3IFApW0Jd''@;'; put 'put ''KGcoLTEvMCkpLCExfWNhdGNoe3ZhciBGPW5ldyBQO3JldHVybiBGLmFkZCgxKSxGLmFkZCgyKSx3KEZbQl0oZygxLzApKSl9fX1jYXRjaHtyZXR1cm4hMX19fSwzMDMzOToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDY5MjI3KSx5PV8oOTc1NDEpO3VlLmV4cG9ydHM9SSh5LnBy''@;'; put 'put ''b3RvLCJzaXplIiwiZ2V0Iil8fGZ1bmN0aW9uKGcpe3JldHVybiBnLnNpemV9fSw4NTAzOToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDM3NzMxKSx5PV8oOTc1NDEpLGc9XygxNDQ1KSxCPV8oNDM2MzIpLHc9XygxMTM4KSxQPXkuYWRkLEY9eS5oYXMsTz15LnJlbW92ZTt1ZS5l''@;'; put 'put ''eHBvcnRzPWZ1bmN0aW9uKE4pe3ZhciBMPUkodGhpcyksSz1CKE4pLmdldEl0ZXJhdG9yKCksVT1nKEwpO3JldHVybiB3KEssZnVuY3Rpb24oVyl7RihMLFcpP08oVSxXKTpQKFUsVyl9KSxVfX0sMjA1MDc6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9XygzNzczMSkseT1fKDk3NTQx''@;'; put 'put ''KS5hZGQsZz1fKDE0NDUpLEI9Xyg0MzYzMiksdz1fKDExMzgpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oRil7dmFyIE89SSh0aGlzKSx6PUIoRikuZ2V0SXRlcmF0b3IoKSxOPWcoTyk7cmV0dXJuIHcoeixmdW5jdGlvbihMKXt5KE4sTCl9KSxOfX0sNzk2NjI6KHVlLHEsXyk9PnsidXNlIHN0cmlj''@;'; put 'put ''dCI7dmFyIEk9Xyg4NzQ4NCkseT1fKDYzOTUxKSxnPUkoImtleXMiKTt1ZS5leHBvcnRzPWZ1bmN0aW9uKEIpe3JldHVybiBnW0JdfHwoZ1tCXT15KEIpKX19LDQ4MzU2Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oODg3ODgpLHk9XygzMzk2MyksZz1fKDQ4MTA0KSxCPSJfX2Nv''@;'; put 'put ''cmUtanNfc2hhcmVkX18iLHc9dWUuZXhwb3J0cz15W0JdfHxnKEIse30pOyh3LnZlcnNpb25zfHwody52ZXJzaW9ucz1bXSkpLnB1c2goe3ZlcnNpb246IjMuNDEuMCIsbW9kZTpJPyJwdXJlIjoiZ2xvYmFsIixjb3B5cmlnaHQ6Ilx4YTkgMjAxNC0yMDI1IERlbmlzIFB1c2hrYXJldiAoemxv''@;'; put 'put ''aXJvY2sucnUpIixsaWNlbnNlOiJodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjQxLjAvTElDRU5TRSIsc291cmNlOiJodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcyJ9KX0sODc0ODQ6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg0''@;'; put 'put ''ODM1Nik7dWUuZXhwb3J0cz1mdW5jdGlvbih5LGcpe3JldHVybiBJW3ldfHwoSVt5XT1nfHx7fSl9fSwzNjUwNjoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDQ0MDY2KSx5PV8oNTU1OTIpLEI9XygzMzk2MykuU3RyaW5nO3VlLmV4cG9ydHM9ISFPYmplY3QuZ2V0T3duUHJvcGVy''@;'; put 'put ''dHlTeW1ib2xzJiYheShmdW5jdGlvbigpe3ZhciB3PVN5bWJvbCgic3ltYm9sIGRldGVjdGlvbiIpO3JldHVybiFCKHcpfHwhKE9iamVjdCh3KWluc3RhbmNlb2YgU3ltYm9sKXx8IVN5bWJvbC5zaGFtJiZJJiZJPDQxfSl9LDc1OTY6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIF9lLFRl''@;'; put 'put ''LFNlLHplLEk9XygzMzk2MykseT1fKDQwMjIwKSxnPV8oNzg4MTEpLEI9XygxOTE1MCksdz1fKDM4ZTMpLFA9Xyg1NTU5MiksRj1fKDg3MzcyKSxPPV8oNzc2MzkpLHo9Xyg1NTk4OCksTj1fKDI3OTY3KSxMPV8oNDQxMzcpLEs9XygyMTUxMCksVT1JLnNldEltbWVkaWF0ZSxXPUkuY2xlYXJJ''@;'; put 'put ''bW1lZGlhdGUsWT1JLnByb2Nlc3MsWD1JLkRpc3BhdGNoLGVlPUkuRnVuY3Rpb24sSj1JLk1lc3NhZ2VDaGFubmVsLHJlPUkuU3RyaW5nLGllPTAsbGU9e30sbWU9Im9ucmVhZHlzdGF0ZWNoYW5nZSI7UChmdW5jdGlvbigpe19lPUkubG9jYXRpb259KTt2YXIgVj1mdW5jdGlvbihDKXtpZih3''@;'; put 'put ''KGxlLEMpKXt2YXIgVD1sZVtDXTtkZWxldGUgbGVbQ10sVCgpfX0scD1mdW5jdGlvbihDKXtyZXR1cm4gZnVuY3Rpb24oKXtWKEMpfX0sYj1mdW5jdGlvbihDKXtWKEMuZGF0YSl9LHg9ZnVuY3Rpb24oQyl7SS5wb3N0TWVzc2FnZShyZShDKSxfZS5wcm90b2NvbCsiLy8iK19lLmhvc3QpfTso''@;'; put 'put ''IVV8fCFXKSYmKFU9ZnVuY3Rpb24oVCl7Tihhcmd1bWVudHMubGVuZ3RoLDEpO3ZhciBIPUIoVCk/VDplZShUKSxqPU8oYXJndW1lbnRzLDEpO3JldHVybiBsZVsrK2llXT1mdW5jdGlvbigpe3koSCx2b2lkIDAsail9LFRlKGllKSxpZX0sVz1mdW5jdGlvbihUKXtkZWxldGUgbGVbVF19LEs/''@;'; put 'put ''VGU9ZnVuY3Rpb24oQyl7WS5uZXh0VGljayhwKEMpKX06WCYmWC5ub3c/VGU9ZnVuY3Rpb24oQyl7WC5ub3cocChDKSl9OkomJiFMPyh6ZT0oU2U9bmV3IEopLnBvcnQyLFNlLnBvcnQxLm9ubWVzc2FnZT1iLFRlPWcoemUucG9zdE1lc3NhZ2UsemUpKTpJLmFkZEV2ZW50TGlzdGVuZXImJkIo''@;'; put 'put ''SS5wb3N0TWVzc2FnZSkmJiFJLmltcG9ydFNjcmlwdHMmJl9lJiYiZmlsZToiIT09X2UucHJvdG9jb2wmJiFQKHgpPyhUZT14LEkuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsYiwhMSkpOlRlPW1lIGluIHooInNjcmlwdCIpP2Z1bmN0aW9uKEMpe0YuYXBwZW5kQ2hpbGQoeigic2NyaXB0''@;'; put 'put ''IikpW21lXT1mdW5jdGlvbigpe0YucmVtb3ZlQ2hpbGQodGhpcyksVihDKX19OmZ1bmN0aW9uKEMpe3NldFRpbWVvdXQocChDKSwwKX0pLHVlLmV4cG9ydHM9e3NldDpVLGNsZWFyOld9fSw3NDg1Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNjQ1NTApLHk9TWF0aC5tYXgsZz1N''@;'; put 'put ''YXRoLm1pbjt1ZS5leHBvcnRzPWZ1bmN0aW9uKEIsdyl7dmFyIFA9SShCKTtyZXR1cm4gUDwwP3koUCt3LDApOmcoUCx3KX19LDkzMTYyOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNTU4KSx5PV8oODgyNzUpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oZyl7cmV0dXJuIEkoeShnKSl9''@;'; put 'put ''fSw2NDU1MDoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDE4NTU2KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKHkpe3ZhciBnPSt5O3JldHVybiBnIT1nfHwwPT09Zz8wOkkoZyl9fSw5NDIzNzoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDY0NTUwKSx5PU1hdGgubWluO3Vl''@;'; put 'put ''LmV4cG9ydHM9ZnVuY3Rpb24oZyl7dmFyIEI9SShnKTtyZXR1cm4gQj4wP3koQiw5MDA3MTk5MjU0NzQwOTkxKTowfX0sMzE5NTA6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg4ODI3NSkseT1PYmplY3Q7dWUuZXhwb3J0cz1mdW5jdGlvbihnKXtyZXR1cm4geShJKGcpKX19LDg1''@;'; put 'put ''NjU2Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNDY5MjYpLHk9XygzMjYzMyksZz1fKDkyOTk4KSxCPV8oODYxMTUpLHc9Xyg5Mzg2NSksUD1fKDU4MDEyKSxGPVR5cGVFcnJvcixPPVAoInRvUHJpbWl0aXZlIik7dWUuZXhwb3J0cz1mdW5jdGlvbih6LE4pe2lmKCF5KHopfHxn''@;'; put 'put ''KHopKXJldHVybiB6O3ZhciBLLEw9Qih6LE8pO2lmKEwpe2lmKHZvaWQgMD09PU4mJihOPSJkZWZhdWx0IiksSz1JKEwseixOKSwheShLKXx8ZyhLKSlyZXR1cm4gSzt0aHJvdyBuZXcgRigiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlIil9cmV0dXJuIHZvaWQgMD09''@;'; put 'put ''PU4mJihOPSJudW1iZXIiKSx3KHosTil9fSw1OTQxMDoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDg1NjU2KSx5PV8oOTI5OTgpO3VlLmV4cG9ydHM9ZnVuY3Rpb24oZyl7dmFyIEI9SShnLCJzdHJpbmciKTtyZXR1cm4geShCKT9COkIrIiJ9fSwzODU5NToodWUscSxfKT0+eyJ1''@;'; put 'put ''c2Ugc3RyaWN0Ijt2YXIgZz17fTtnW18oNTgwMTIpKCJ0b1N0cmluZ1RhZyIpXT0ieiIsdWUuZXhwb3J0cz0iW29iamVjdCB6XSI9PT1TdHJpbmcoZyl9LDY4MzMyOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oNzE4MjQpLHk9U3RyaW5nO3VlLmV4cG9ydHM9ZnVuY3Rpb24oZyl7''@;'; put 'put ''aWYoIlN5bWJvbCI9PT1JKGcpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nIik7cmV0dXJuIHkoZyl9fSw3NTIxMjp1ZT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgcT1TdHJpbmc7dWUuZXhwb3J0cz1mdW5jdGlvbihfKXt0cnl7cmV0''@;'; put 'put ''dXJuIHEoXyl9Y2F0Y2h7cmV0dXJuIk9iamVjdCJ9fX0sNjM5NTE6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9Xyg1ODYwNykseT0wLGc9TWF0aC5yYW5kb20oKSxCPUkoMS4udG9TdHJpbmcpO3VlLmV4cG9ydHM9ZnVuY3Rpb24odyl7cmV0dXJuIlN5bWJvbCgiKyh2b2lkIDA9PT13''@;'; put 'put ''PyIiOncpKyIpXyIrQigrK3krZywzNil9fSw2Njk5NToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDM2NTA2KTt1ZS5leHBvcnRzPUkmJiFTeW1ib2wuc2hhbSYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3J9LDI2OTI5Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3Zh''@;'; put 'put ''ciBJPV8oNDYzODcpLHk9Xyg1NTU5Mik7dWUuZXhwb3J0cz1JJiZ5KGZ1bmN0aW9uKCl7cmV0dXJuIDQyIT09T2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uKCl7fSwicHJvdG90eXBlIix7dmFsdWU6NDIsd3JpdGFibGU6ITF9KS5wcm90b3R5cGV9KX0sMjc5Njc6dWU9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dmFyIHE9VHlwZUVycm9yO3VlLmV4cG9ydHM9ZnVuY3Rpb24oXyxJKXtpZihfPEkpdGhyb3cgbmV3IHEoIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7cmV0dXJuIF99fSw0ODY5MToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDMzOTYzKSx5PV8oMTkxNTApLGc9SS5XZWFr''@;'; put 'put ''TWFwO3VlLmV4cG9ydHM9eShnKSYmL25hdGl2ZSBjb2RlLy50ZXN0KFN0cmluZyhnKSl9LDU4MDEyOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMzM5NjMpLHk9Xyg4NzQ4NCksZz1fKDM4ZTMpLEI9Xyg2Mzk1MSksdz1fKDM2NTA2KSxQPV8oNjY5OTUpLEY9SS5TeW1ib2wsTz15''@;'; put 'put ''KCJ3a3MiKSx6PVA/Ri5mb3J8fEY6RiYmRi53aXRob3V0U2V0dGVyfHxCO3VlLmV4cG9ydHM9ZnVuY3Rpb24oTil7cmV0dXJuIGcoTyxOKXx8KE9bTl09dyYmZyhGLE4pP0ZbTl06eigiU3ltYm9sLiIrTikpLE9bTl19fSwzMjkzMDoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDEy''@;'; put 'put ''MjAyKSx5PV8oMzhlMyksZz1fKDM2Njc4KSxCPV8oNDY4KSx3PV8oMjE2MTIpLFA9Xyg0ODYzOSksRj1fKDYwMzIxKSxPPV8oMTcyOTYpLHo9XygzOTExNiksTj1fKDY0ODU1KSxMPV8oMjIzMDQpLEs9Xyg0NjM4NyksVT1fKDg4Nzg4KTt1ZS5leHBvcnRzPWZ1bmN0aW9uKFcsWSxYLGVlKXt2''@;'; put 'put ''YXIgSj0ic3RhY2tUcmFjZUxpbWl0IixyZT1lZT8yOjEsaWU9Vy5zcGxpdCgiLiIpLGxlPWllW2llLmxlbmd0aC0xXSxtZT1JLmFwcGx5KG51bGwsaWUpO2lmKG1lKXt2YXIgX2U9bWUucHJvdG90eXBlO2lmKCFVJiZ5KF9lLCJjYXVzZSIpJiZkZWxldGUgX2UuY2F1c2UsIVgpcmV0dXJuIG1l''@;'; put 'put ''O3ZhciBUZT1JKCJFcnJvciIpLFNlPVkoZnVuY3Rpb24oemUsVil7dmFyIHA9eihlZT9WOnplLHZvaWQgMCksYj1lZT9uZXcgbWUoemUpOm5ldyBtZTtyZXR1cm4gdm9pZCAwIT09cCYmZyhiLCJtZXNzYWdlIixwKSxMKGIsU2UsYi5zdGFjaywyKSx0aGlzJiZCKF9lLHRoaXMpJiZPKGIsdGhp''@;'; put 'put ''cyxTZSksYXJndW1lbnRzLmxlbmd0aD5yZSYmTihiLGFyZ3VtZW50c1tyZV0pLGJ9KTtpZihTZS5wcm90b3R5cGU9X2UsIkVycm9yIiE9PWxlP3c/dyhTZSxUZSk6UChTZSxUZSx7bmFtZTohMH0pOksmJkogaW4gbWUmJihGKFNlLG1lLEopLEYoU2UsbWUsInByZXBhcmVTdGFja1RyYWNlIikp''@;'; put 'put ''LFAoU2UsbWUpLCFVKXRyeXtfZS5uYW1lIT09bGUmJmcoX2UsIm5hbWUiLGxlKSxfZS5jb25zdHJ1Y3Rvcj1TZX1jYXRjaHt9cmV0dXJuIFNlfX19LDM5MDkyOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMjgzNjcpLHk9XygzMTk1MCksZz1fKDcxNzEpLEI9Xyg2NDU1MCksdz1f''@;'; put 'put ''KDcwODI0KTtJKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMH0se2F0OmZ1bmN0aW9uKEYpe3ZhciBPPXkodGhpcyksej1nKE8pLE49QihGKSxMPU4+PTA/Tjp6K047cmV0dXJuIEw8MHx8TD49ej92b2lkIDA6T1tMXX19KSx3KCJhdCIpfSw3NzUyNToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2''@;'; put 'put ''YXIgST1fKDI4MzY3KSx5PV8oMzE5NTApLGc9Xyg3MTcxKSxCPV8oMzkyMDYpLHc9XygzMzE2KTtJKHt0YXJnZXQ6IkFycmF5Iixwcm90bzohMCxhcml0eToxLGZvcmNlZDpfKDU1NTkyKShmdW5jdGlvbigpe3JldHVybiA0Mjk0OTY3Mjk3IT09W10ucHVzaC5jYWxsKHtsZW5ndGg6NDI5NDk2''@;'; put 'put ''NzI5Nn0sMSl9KXx8IWZ1bmN0aW9uKCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwibGVuZ3RoIix7d3JpdGFibGU6ITF9KS5wdXNoKCl9Y2F0Y2goTil7cmV0dXJuIE4gaW5zdGFuY2VvZiBUeXBlRXJyb3J9fSgpfSx7cHVzaDpmdW5jdGlvbihMKXt2YXIgSz15KHRoaXMpLFU9ZyhL''@;'; put 'put ''KSxXPWFyZ3VtZW50cy5sZW5ndGg7dyhVK1cpO2Zvcih2YXIgWT0wO1k8VztZKyspS1tVXT1hcmd1bWVudHNbWV0sVSsrO3JldHVybiBCKEssVSksVX19KX0sMjMwMTI6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9XygyODM2NykseT1fKDU4NjA3KSxnPV8oMzE0ODMpLEI9Xyg5MzE2''@;'; put 'put ''Miksdz1fKDM4ODEpLFA9Xyg2NjUwMyksRj1fKDcwODI0KSxPPUFycmF5LHo9eShQKCJBcnJheSIsInNvcnQiKSk7SSh7dGFyZ2V0OiJBcnJheSIscHJvdG86ITB9LHt0b1NvcnRlZDpmdW5jdGlvbihMKXt2b2lkIDAhPT1MJiZnKEwpO3ZhciBLPUIodGhpcyksVT13KE8sSyk7cmV0dXJuIHoo''@;'; put 'put ''VSxMKX19KSxGKCJ0b1NvcnRlZCIpfSw2ODE0NjoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0IjtfKDcwODI0KSgiZmxhdE1hcCIpfSw5MzkwOToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0IjtfKDcwODI0KSgiZmxhdCIpfSwyOTc2MDoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDI4MzY3''@;'; put 'put ''KSx5PV8oMzE5NTApLGc9Xyg3MTcxKSxCPV8oMzkyMDYpLHc9Xyg0MzE5NSksUD1fKDMzMTYpO0koe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGFyaXR5OjEsZm9yY2VkOjEhPT1bXS51bnNoaWZ0KDApfHwhZnVuY3Rpb24oKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KFtdLCJsZW5ndGgi''@;'; put 'put ''LHt3cml0YWJsZTohMX0pLnVuc2hpZnQoKX1jYXRjaChOKXtyZXR1cm4gTiBpbnN0YW5jZW9mIFR5cGVFcnJvcn19KCl9LHt1bnNoaWZ0OmZ1bmN0aW9uKEwpe3ZhciBLPXkodGhpcyksVT1nKEspLFc9YXJndW1lbnRzLmxlbmd0aDtpZihXKXtQKFUrVyk7Zm9yKHZhciBZPVU7WS0tOyl7dmFy''@;'; put 'put ''IFg9WStXO1kgaW4gSz9LW1hdPUtbWV06dyhLLFgpfWZvcih2YXIgZWU9MDtlZTxXO2VlKyspS1tlZV09YXJndW1lbnRzW2VlXX1yZXR1cm4gQihLLFUrVyl9fSl9LDQ5NTM3Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMjgzNjcpLHk9XygzMzk2MyksZz1fKDQwMjIwKSxCPV8o''@;'; put 'put ''MzI5MzApLHc9IldlYkFzc2VtYmx5IixQPXlbd10sRj03IT09bmV3IEVycm9yKCJlIix7Y2F1c2U6N30pLmNhdXNlLE89ZnVuY3Rpb24oTixMKXt2YXIgSz17fTtLW05dPUIoTixMLEYpLEkoe2dsb2JhbDohMCxjb25zdHJ1Y3RvcjohMCxhcml0eToxLGZvcmNlZDpGfSxLKX0sej1mdW5jdGlv''@;'; put 'put ''bihOLEwpe2lmKFAmJlBbTl0pe3ZhciBLPXt9O0tbTl09Qih3KyIuIitOLEwsRiksSSh7dGFyZ2V0Oncsc3RhdDohMCxjb25zdHJ1Y3RvcjohMCxhcml0eToxLGZvcmNlZDpGfSxLKX19O08oIkVycm9yIixmdW5jdGlvbihOKXtyZXR1cm4gZnVuY3Rpb24oSyl7cmV0dXJuIGcoTix0aGlzLGFy''@;'; put 'put ''Z3VtZW50cyl9fSksTygiRXZhbEVycm9yIixmdW5jdGlvbihOKXtyZXR1cm4gZnVuY3Rpb24oSyl7cmV0dXJuIGcoTix0aGlzLGFyZ3VtZW50cyl9fSksTygiUmFuZ2VFcnJvciIsZnVuY3Rpb24oTil7cmV0dXJuIGZ1bmN0aW9uKEspe3JldHVybiBnKE4sdGhpcyxhcmd1bWVudHMpfX0pLE8o''@;'; put 'put ''IlJlZmVyZW5jZUVycm9yIixmdW5jdGlvbihOKXtyZXR1cm4gZnVuY3Rpb24oSyl7cmV0dXJuIGcoTix0aGlzLGFyZ3VtZW50cyl9fSksTygiU3ludGF4RXJyb3IiLGZ1bmN0aW9uKE4pe3JldHVybiBmdW5jdGlvbihLKXtyZXR1cm4gZyhOLHRoaXMsYXJndW1lbnRzKX19KSxPKCJUeXBlRXJy''@;'; put 'put ''b3IiLGZ1bmN0aW9uKE4pe3JldHVybiBmdW5jdGlvbihLKXtyZXR1cm4gZyhOLHRoaXMsYXJndW1lbnRzKX19KSxPKCJVUklFcnJvciIsZnVuY3Rpb24oTil7cmV0dXJuIGZ1bmN0aW9uKEspe3JldHVybiBnKE4sdGhpcyxhcmd1bWVudHMpfX0pLHooIkNvbXBpbGVFcnJvciIsZnVuY3Rpb24o''@;'; put 'put ''Til7cmV0dXJuIGZ1bmN0aW9uKEspe3JldHVybiBnKE4sdGhpcyxhcmd1bWVudHMpfX0pLHooIkxpbmtFcnJvciIsZnVuY3Rpb24oTil7cmV0dXJuIGZ1bmN0aW9uKEspe3JldHVybiBnKE4sdGhpcyxhcmd1bWVudHMpfX0pLHooIlJ1bnRpbWVFcnJvciIsZnVuY3Rpb24oTil7cmV0dXJuIGZ1''@;'; put 'put ''bmN0aW9uKEspe3JldHVybiBnKE4sdGhpcyxhcmd1bWVudHMpfX0pfSw5NjE4MDoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDI4MzY3KSx5PV8oMzM5NjMpLGc9Xyg2MzMzNiksQj1fKDExMDgpLHc9XygxOTE1MCksUD1fKDI2NDAwKSxGPV8oNDQwMzkpLE89Xyg1ODc5NSksej1f''@;'; put 'put ''KDU1NTkyKSxOPV8oMzhlMyksTD1fKDU4MDEyKSxLPV8oNzg5NjgpLkl0ZXJhdG9yUHJvdG90eXBlLFU9Xyg0NjM4NyksVz1fKDg4Nzg4KSxZPSJjb25zdHJ1Y3RvciIsWD0iSXRlcmF0b3IiLGVlPUwoInRvU3RyaW5nVGFnIiksSj1UeXBlRXJyb3IscmU9eVtYXSxpZT1XfHwhdyhyZSl8fHJl''@;'; put 'put ''LnByb3RvdHlwZSE9PUt8fCF6KGZ1bmN0aW9uKCl7cmUoe30pfSksbGU9ZnVuY3Rpb24oKXtpZihnKHRoaXMsSyksUCh0aGlzKT09PUspdGhyb3cgbmV3IEooIkFic3RyYWN0IGNsYXNzIEl0ZXJhdG9yIG5vdCBkaXJlY3RseSBjb25zdHJ1Y3RhYmxlIil9LG1lPWZ1bmN0aW9uKF9lLFRlKXtV''@;'; put 'put ''P0YoSyxfZSx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBUZX0sc2V0OmZ1bmN0aW9uKFNlKXtpZihCKHRoaXMpLHRoaXM9PT1LKXRocm93IG5ldyBKKCJZb3UgY2FuJ3QgcmVkZWZpbmUgdGhpcyBwcm9wZXJ0eSIpO04odGhpcyxfZSk/dGhpc1tfZV09U2U6Tyh0aGlz''@;'; put 'put ''LF9lLFNlKX19KTpLW19lXT1UZX07TihLLGVlKXx8bWUoZWUsWCksKGllfHwhTihLLFkpfHxLW1ldPT09T2JqZWN0KSYmbWUoWSxsZSksbGUucHJvdG90eXBlPUssSSh7Z2xvYmFsOiEwLGNvbnN0cnVjdG9yOiEwLGZvcmNlZDppZX0se0l0ZXJhdG9yOmxlfSl9LDM5NTk1Oih1ZSxxLF8pPT57''@;'; put 'put ''InVzZSBzdHJpY3QiO3ZhciBJPV8oMjgzNjcpLHk9XygzMDc4NyksZz1fKDMxNDgzKSxCPV8oMTEwOCksdz1fKDc1NDI0KTtJKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7ZXZlcnk6ZnVuY3Rpb24oRil7Qih0aGlzKSxnKEYpO3ZhciBPPXcodGhpcyksej0wO3JldHVy''@;'; put 'put ''biF5KE8sZnVuY3Rpb24oTixMKXtpZighRihOLHorKykpcmV0dXJuIEwoKX0se0lTX1JFQ09SRDohMCxJTlRFUlJVUFRFRDohMH0pLnN0b3BwZWR9fSl9LDkyNTgwOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMjgzNjcpLHk9Xyg0NjkyNiksZz1fKDMxNDgzKSxCPV8oMTEwOCks''@;'; put 'put ''dz1fKDc1NDI0KSxQPV8oNjk5MTcpLEY9Xyg0MjkyNiksTz1fKDg4Nzg4KSx6PVAoZnVuY3Rpb24oKXtmb3IodmFyIFUsWSxOPXRoaXMuaXRlcmF0b3IsTD10aGlzLnByZWRpY2F0ZSxLPXRoaXMubmV4dDs7KXtpZihVPUIoeShLLE4pKSx0aGlzLmRvbmU9ISFVLmRvbmUpcmV0dXJuO2lmKEYo''@;'; put 'put ''TixMLFtZPVUudmFsdWUsdGhpcy5jb3VudGVyKytdLCEwKSlyZXR1cm4gWX19KTtJKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDpPfSx7ZmlsdGVyOmZ1bmN0aW9uKEwpe3JldHVybiBCKHRoaXMpLGcoTCksbmV3IHoodyh0aGlzKSx7cHJlZGljYXRlOkx9KX19''@;'; put 'put ''KX0sMjYzNTc6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9XygyODM2NykseT1fKDMwNzg3KSxnPV8oMzE0ODMpLEI9XygxMTA4KSx3PV8oNzU0MjQpO0koe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtmaW5kOmZ1bmN0aW9uKEYpe0IodGhpcyksZyhGKTt2YXIg''@;'; put 'put ''Tz13KHRoaXMpLHo9MDtyZXR1cm4geShPLGZ1bmN0aW9uKE4sTCl7aWYoRihOLHorKykpcmV0dXJuIEwoTil9LHtJU19SRUNPUkQ6ITAsSU5URVJSVVBURUQ6ITB9KS5yZXN1bHR9fSl9LDM2NTc4Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMjgzNjcpLHk9Xyg0NjkyNiksZz1f''@;'; put 'put ''KDMxNDgzKSxCPV8oMTEwOCksdz1fKDc1NDI0KSxQPV8oNjM2MjcpLEY9Xyg2OTkxNyksTz1fKDY2NTQyKSx6PV8oODg3ODgpLE49RihmdW5jdGlvbigpe2Zvcih2YXIgVSxXLEw9dGhpcy5pdGVyYXRvcixLPXRoaXMubWFwcGVyOzspe2lmKFc9dGhpcy5pbm5lcil0cnl7aWYoIShVPUIoeShX''@;'; put 'put ''Lm5leHQsVy5pdGVyYXRvcikpKS5kb25lKXJldHVybiBVLnZhbHVlO3RoaXMuaW5uZXI9bnVsbH1jYXRjaChZKXtPKEwsInRocm93IixZKX1pZihVPUIoeSh0aGlzLm5leHQsTCkpLHRoaXMuZG9uZT0hIVUuZG9uZSlyZXR1cm47dHJ5e3RoaXMuaW5uZXI9UChLKFUudmFsdWUsdGhpcy5jb3Vu''@;'; put 'put ''dGVyKyspLCExKX1jYXRjaChZKXtPKEwsInRocm93IixZKX19fSk7SSh7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6en0se2ZsYXRNYXA6ZnVuY3Rpb24oSyl7cmV0dXJuIEIodGhpcyksZyhLKSxuZXcgTih3KHRoaXMpLHttYXBwZXI6Syxpbm5lcjpudWxsfSl9''@;'; put 'put ''fSl9LDMxMzUzOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMjgzNjcpLHk9XygzMDc4NyksZz1fKDMxNDgzKSxCPV8oMTEwOCksdz1fKDc1NDI0KTtJKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7Zm9yRWFjaDpmdW5jdGlvbihGKXtCKHRoaXMpLGcoRik7''@;'; put 'put ''dmFyIE89dyh0aGlzKSx6PTA7eShPLGZ1bmN0aW9uKE4pe0YoTix6KyspfSx7SVNfUkVDT1JEOiEwfSl9fSl9LDcxMzU0Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMjgzNjcpLHk9Xyg3NjcwOCk7SSh7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6''@;'; put 'put ''Xyg4ODc4OCl9LHttYXA6eX0pfSw1MzM0ODoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDI4MzY3KSx5PV8oMzA3ODcpLGc9XygzMTQ4MyksQj1fKDExMDgpLHc9Xyg3NTQyNCksUD1UeXBlRXJyb3I7SSh7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se3JlZHVj''@;'; put 'put ''ZTpmdW5jdGlvbihPKXtCKHRoaXMpLGcoTyk7dmFyIHo9dyh0aGlzKSxOPWFyZ3VtZW50cy5sZW5ndGg8MixMPU4/dm9pZCAwOmFyZ3VtZW50c1sxXSxLPTA7aWYoeSh6LGZ1bmN0aW9uKFUpe04/KE49ITEsTD1VKTpMPU8oTCxVLEspLEsrK30se0lTX1JFQ09SRDohMH0pLE4pdGhyb3cgbmV3''@;'; put 'put ''IFAoIlJlZHVjZSBvZiBlbXB0eSBpdGVyYXRvciB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKTtyZXR1cm4gTH19KX0sOTM3ODoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDI4MzY3KSx5PV8oMzA3ODcpLGc9XygzMTQ4MyksQj1fKDExMDgpLHc9Xyg3NTQyNCk7SSh7dGFyZ2V0OiJJ''@;'; put 'put ''dGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se3NvbWU6ZnVuY3Rpb24oRil7Qih0aGlzKSxnKEYpO3ZhciBPPXcodGhpcyksej0wO3JldHVybiB5KE8sZnVuY3Rpb24oTixMKXtpZihGKE4seisrKSlyZXR1cm4gTCgpfSx7SVNfUkVDT1JEOiEwLElOVEVSUlVQVEVEOiEwfSkuc3RvcHBlZH19''@;'; put 'put ''KX0sOTU0OTM6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9XygyODM2NykseT1fKDEyMjAyKSxnPV8oNDAyMjApLEI9Xyg0NjkyNiksdz1fKDU4NjA3KSxQPV8oNTU1OTIpLEY9XygxOTE1MCksTz1fKDkyOTk4KSx6PV8oNzc2MzkpLE49Xyg4NDUyNCksTD1fKDM2NTA2KSxLPVN0cmlu''@;'; put 'put ''ZyxVPXkoIkpTT04iLCJzdHJpbmdpZnkiKSxXPXcoLy4vLmV4ZWMpLFk9dygiIi5jaGFyQXQpLFg9dygiIi5jaGFyQ29kZUF0KSxlZT13KCIiLnJlcGxhY2UpLEo9dygxLi50b1N0cmluZykscmU9L1tcdUQ4MDAtXHVERkZGXS9nLGllPS9eW1x1RDgwMC1cdURCRkZdJC8sbGU9L15bXHVEQzAw''@;'; put 'put ''LVx1REZGRl0kLyxtZT0hTHx8UChmdW5jdGlvbigpe3ZhciB6ZT15KCJTeW1ib2wiKSgic3RyaW5naWZ5IGRldGVjdGlvbiIpO3JldHVybiJbbnVsbF0iIT09VShbemVdKXx8Int9IiE9PVUoe2E6emV9KXx8Int9IiE9PVUoT2JqZWN0KHplKSl9KSxfZT1QKGZ1bmN0aW9uKCl7cmV0dXJuJyJc''@;'; put 'put ''XHVkZjA2XFx1ZDgzNCInIT09VSgiXHVkZjA2XHVkODM0Iil8fCciXFx1ZGVhZCInIT09VSgiXHVkZWFkIil9KSxUZT1mdW5jdGlvbih6ZSxWKXt2YXIgcD16KGFyZ3VtZW50cyksYj1OKFYpO2lmKEYoYil8fHZvaWQgMCE9PXplJiYhTyh6ZSkpcmV0dXJuIHBbMV09ZnVuY3Rpb24oeCxDKXtp''@;'; put 'put ''ZihGKGIpJiYoQz1CKGIsdGhpcyxLKHgpLEMpKSwhTyhDKSlyZXR1cm4gQ30sZyhVLG51bGwscCl9LFNlPWZ1bmN0aW9uKHplLFYscCl7dmFyIGI9WShwLFYtMSkseD1ZKHAsVisxKTtyZXR1cm4gVyhpZSx6ZSkmJiFXKGxlLHgpfHxXKGxlLHplKSYmIVcoaWUsYik/IlxcdSIrSihYKHplLDAp''@;'; put 'put ''LDE2KTp6ZX07VSYmSSh7dGFyZ2V0OiJKU09OIixzdGF0OiEwLGFyaXR5OjMsZm9yY2VkOm1lfHxfZX0se3N0cmluZ2lmeTpmdW5jdGlvbihWLHAsYil7dmFyIHg9eihhcmd1bWVudHMpLEM9ZyhtZT9UZTpVLG51bGwseCk7cmV0dXJuIF9lJiYic3RyaW5nIj09dHlwZW9mIEM/ZWUoQyxyZSxT''@;'; put 'put ''ZSk6Q319KX0sNTc3MjoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDI4MzY3KSx5PV8oMzA3ODcpLGc9Xyg1ODc5NSk7SSh7dGFyZ2V0OiJPYmplY3QiLHN0YXQ6ITB9LHtmcm9tRW50cmllczpmdW5jdGlvbih3KXt2YXIgUD17fTtyZXR1cm4geSh3LGZ1bmN0aW9uKEYsTyl7ZyhQ''@;'; put 'put ''LEYsTyl9LHtBU19FTlRSSUVTOiEwfSksUH19KX0sNjk4NzU6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9XygyODM2NykseT1fKDgwMjEzKTtJKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6IV8oNTM1MDUpKCJkaWZmZXJlbmNlIixmdW5jdGlvbih3KXtyZXR1''@;'; put 'put ''cm4gMD09PXcuc2l6ZX0pfSx7ZGlmZmVyZW5jZTp5fSl9LDE2MDkzOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMjgzNjcpLHk9Xyg1NTU5MiksZz1fKDYxODc5KTtJKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6IV8oNTM1MDUpKCJpbnRlcnNlY3Rpb24i''@;'; put 'put ''LGZ1bmN0aW9uKFApe3JldHVybiAyPT09UC5zaXplJiZQLmhhcygxKSYmUC5oYXMoMil9KXx8eShmdW5jdGlvbigpe3JldHVybiIzLDIiIT09U3RyaW5nKEFycmF5LmZyb20obmV3IFNldChbMSwyLDNdKS5pbnRlcnNlY3Rpb24obmV3IFNldChbMywyXSkpKSl9KX0se2ludGVyc2VjdGlvbjpn''@;'; put 'put ''fSl9LDk1NjA4Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMjgzNjcpLHk9Xyg3MzYyNCk7SSh7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiFfKDUzNTA1KSgiaXNEaXNqb2ludEZyb20iLGZ1bmN0aW9uKHcpe3JldHVybiF3fSl9LHtpc0Rpc2pvaW50RnJv''@;'; put 'put ''bTp5fSl9LDE2NDkzOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMjgzNjcpLHk9Xyg3NDgzOSk7SSh7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiFfKDUzNTA1KSgiaXNTdWJzZXRPZiIsZnVuY3Rpb24odyl7cmV0dXJuIHd9KX0se2lzU3Vic2V0T2Y6eX0p''@;'; put 'put ''fSw2MTkzNDoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDI4MzY3KSx5PV8oOTYwNjIpO0koe3RhcmdldDoiU2V0Iixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDohXyg1MzUwNSkoImlzU3VwZXJzZXRPZiIsZnVuY3Rpb24odyl7cmV0dXJuIXd9KX0se2lzU3VwZXJzZXRPZjp5fSl9''@;'; put 'put ''LDEwMTAxOih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMjgzNjcpLHk9Xyg4NTAzOSk7SSh7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiFfKDUzNTA1KSgic3ltbWV0cmljRGlmZmVyZW5jZSIpfSx7c3ltbWV0cmljRGlmZmVyZW5jZTp5fSl9LDI2ODg5Oih1''@;'; put 'put ''ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMjgzNjcpLHk9XygyMDUwNyk7SSh7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiFfKDUzNTA1KSgidW5pb24iKX0se3VuaW9uOnl9KX0sMTQzNjA6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7dmFyIEk9XygyODM2Nyks''@;'; put 'put ''eT1fKDU4NjA3KSxnPV8oODgyNzUpLEI9Xyg2NDU1MCksdz1fKDY4MzMyKSxQPV8oNTU1OTIpLEY9eSgiIi5jaGFyQXQpO0koe3RhcmdldDoiU3RyaW5nIixwcm90bzohMCxmb3JjZWQ6UChmdW5jdGlvbigpe3JldHVybiJcdWQ4NDIiIT09Ilx1ezIwYmI3fSIuYXQoLTIpfSl9LHthdDpmdW5j''@;'; put 'put ''dGlvbihOKXt2YXIgTD13KGcodGhpcykpLEs9TC5sZW5ndGgsVT1CKE4pLFc9VT49MD9VOksrVTtyZXR1cm4gVzwwfHxXPj1LP3ZvaWQgMDpGKEwsVyl9fSl9LDE2MjI5Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMjgzNjcpLHk9Xyg0NjkyNiksZz1fKDU4NjA3KSxCPV8oODgy''@;'; put 'put ''NzUpLHc9XygxOTE1MCksUD1fKDk0NDY4KSxGPV8oODg4NjcpLE89Xyg2ODMzMiksej1fKDg2MTE1KSxOPV8oMzcwNzUpLEw9Xyg5NjMzOSksSz1fKDU4MDEyKSxVPV8oODg3ODgpLFc9SygicmVwbGFjZSIpLFk9VHlwZUVycm9yLFg9ZygiIi5pbmRleE9mKSxlZT1nKCIiLnJlcGxhY2UpLEo9''@;'; put 'put ''ZygiIi5zbGljZSkscmU9TWF0aC5tYXg7SSh7dGFyZ2V0OiJTdHJpbmciLHByb3RvOiEwfSx7cmVwbGFjZUFsbDpmdW5jdGlvbihsZSxtZSl7dmFyIFRlLFNlLHplLFYscCxiLHgsQyxULEgsX2U9Qih0aGlzKSxqPTAsRT0iIjtpZighUChsZSkpe2lmKChUZT1GKGxlKSkmJihTZT1PKEIoTihs''@;'; put 'put ''ZSkpKSwhflgoU2UsImciKSkpdGhyb3cgbmV3IFkoImAucmVwbGFjZUFsbGAgZG9lcyBub3QgYWxsb3cgbm9uLWdsb2JhbCByZWdleGVzIik7aWYoemU9eihsZSxXKSlyZXR1cm4geSh6ZSxsZSxfZSxtZSk7aWYoVSYmVGUpcmV0dXJuIGVlKE8oX2UpLGxlLG1lKX1mb3IoVj1PKF9lKSxwPU8o''@;'; put 'put ''bGUpLChiPXcobWUpKXx8KG1lPU8obWUpKSxDPXJlKDEseD1wLmxlbmd0aCksVD1YKFYscCk7LTEhPT1UOylIPWI/TyhtZShwLFQsVikpOkwocCxWLFQsW10sdm9pZCAwLG1lKSxFKz1KKFYsaixUKStILGo9VCt4LFQ9VCtDPlYubGVuZ3RoPy0xOlgoVixwLFQrQyk7cmV0dXJuIGo8Vi5sZW5n''@;'; put 'put ''dGgmJihFKz1KKFYsaikpLEV9fSl9LDQzMjg3Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO18oOTYxODApfSwxMzkwODoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0IjtfKDM5NTk1KX0sNjU3NDU6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7Xyg5MjU4MCl9LDgxMjYwOih1ZSxxLF8pPT57InVzZSBz''@;'; put 'put ''dHJpY3QiO18oMjYzNTcpfSw3NDk5Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO18oMzY1NzgpfSwyOTcwODoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0IjtfKDMxMzUzKX0sNjUxMTc6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7Xyg3MTM1NCl9LDQ0MjEzOih1ZSxxLF8pPT57InVzZSBzdHJpY3Qi''@;'; put 'put ''O18oNTMzNDgpfSwyMDI5MToodWUscSxfKT0+eyJ1c2Ugc3RyaWN0IjtfKDkzNzgpfSw2ODc2ODoodWUscSxfKT0+eyJ1c2Ugc3RyaWN0Ijt2YXIgST1fKDI4MzY3KSx5PV8oMzM5NjMpLGc9Xyg3NTk2KS5jbGVhcjtJKHtnbG9iYWw6ITAsYmluZDohMCxlbnVtZXJhYmxlOiEwLGZvcmNlZDp5''@;'; put 'put ''LmNsZWFySW1tZWRpYXRlIT09Z30se2NsZWFySW1tZWRpYXRlOmd9KX0sMTAzNjM6KHVlLHEsXyk9PnsidXNlIHN0cmljdCI7Xyg2ODc2OCksXyg4MjMwNil9LDgyMzA2Oih1ZSxxLF8pPT57InVzZSBzdHJpY3QiO3ZhciBJPV8oMjgzNjcpLHk9XygzMzk2MyksZz1fKDc1OTYpLnNldCxCPV8o''@;'; put 'put ''NDMyNDkpLHc9eS5zZXRJbW1lZGlhdGU/QihnLCExKTpnO0koe2dsb2JhbDohMCxiaW5kOiEwLGVudW1lcmFibGU6ITAsZm9yY2VkOnkuc2V0SW1tZWRpYXRlIT09d30se3NldEltbWVkaWF0ZTp3fSl9LDMyMTk6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1KU09OLnBhcnNlKCd7ImFl''@;'; put 'put ''cy0xMjgtZWNiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MCwibW9kZSI6IkVDQiIsInR5cGUiOiJibG9jayJ9LCJhZXMtMTkyLWVjYiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjAsIm1vZGUiOiJFQ0IiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTI1Ni1lY2IiOnsi''@;'; put 'put ''Y2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjowLCJtb2RlIjoiRUNCIiwidHlwZSI6ImJsb2NrIn0sImFlcy0xMjgtY2JjIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDQkMiLCJ0eXBlIjoiYmxvY2sifSwiYWVzLTE5Mi1jYmMiOnsiY2lwaGVyIjoiQUVT''@;'; put 'put ''Iiwia2V5IjoxOTIsIml2IjoxNiwibW9kZSI6IkNCQyIsInR5cGUiOiJibG9jayJ9LCJhZXMtMjU2LWNiYyI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlczEyOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYi''@;'; put 'put ''OjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlczE5MiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlwZSI6ImJsb2NrIn0sImFlczI1NiI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjI1NiwiaXYiOjE2LCJtb2RlIjoiQ0JDIiwidHlw''@;'; put 'put ''ZSI6ImJsb2NrIn0sImFlcy0xMjgtY2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItY2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDRkIiLCJ0eXBlIjoic3RyZWFt''@;'; put 'put ''In0sImFlcy0yNTYtY2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJDRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtY2ZiOCI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0ZCOCIsInR5cGUiOiJzdHJlYW0ifSwiYWVz''@;'; put 'put ''LTE5Mi1jZmI4Ijp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDRkI4IiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWNmYjgiOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNGQjgiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgt''@;'; put 'put ''Y2ZiMSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjEyOCwiaXYiOjE2LCJtb2RlIjoiQ0ZCMSIsInR5cGUiOiJzdHJlYW0ifSwiYWVzLTE5Mi1jZmIxIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDRkIxIiwidHlwZSI6InN0cmVhbSJ9LCJhZXMtMjU2LWNmYjEi''@;'; put 'put ''OnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxNiwibW9kZSI6IkNGQjEiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtb2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJPRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItb2ZiIjp7ImNpcGhl''@;'; put 'put ''ciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJPRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtb2ZiIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2LCJpdiI6MTYsIm1vZGUiOiJPRkIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtY3RyIjp7ImNpcGhlciI6IkFFUyIs''@;'; put 'put ''ImtleSI6MTI4LCJpdiI6MTYsIm1vZGUiOiJDVFIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xOTItY3RyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTkyLCJpdiI6MTYsIm1vZGUiOiJDVFIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0yNTYtY3RyIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MjU2''@;'; put 'put ''LCJpdiI6MTYsIm1vZGUiOiJDVFIiLCJ0eXBlIjoic3RyZWFtIn0sImFlcy0xMjgtZ2NtIjp7ImNpcGhlciI6IkFFUyIsImtleSI6MTI4LCJpdiI6MTIsIm1vZGUiOiJHQ00iLCJ0eXBlIjoiYXV0aCJ9LCJhZXMtMTkyLWdjbSI6eyJjaXBoZXIiOiJBRVMiLCJrZXkiOjE5MiwiaXYiOjEyLCJt''@;'; put 'put ''b2RlIjoiR0NNIiwidHlwZSI6ImF1dGgifSwiYWVzLTI1Ni1nY20iOnsiY2lwaGVyIjoiQUVTIiwia2V5IjoyNTYsIml2IjoxMiwibW9kZSI6IkdDTSIsInR5cGUiOiJhdXRoIn19Jyl9LDYyOTUxOnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9SlNPTi5wYXJzZSgneyJzaGEyMjRXaXRo''@;'; put 'put ''UlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiMzAyZDMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjA0MDUwMDA0MWMifSwiUlNBLVNIQTIyNCI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiMzAyZDMwMGQwNjA5NjA4NjQ4''@;'; put 'put ''MDE2NTAzMDQwMjA0MDUwMDA0MWMifSwic2hhMjU2V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IjMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIwIn0sIlJTQS1TSEEyNTYiOnsic2lnbiI6ImVjZHNhL3JzYSIsImhhc2gi''@;'; put 'put ''OiJzaGEyNTYiLCJpZCI6IjMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIwIn0sInNoYTM4NFdpdGhSU0FFbmNyeXB0aW9uIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIzMDQxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDIwNTAwMDQzMCJ9LCJSU0Et''@;'; put 'put ''U0hBMzg0Ijp7InNpZ24iOiJlY2RzYS9yc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIzMDQxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDIwNTAwMDQzMCJ9LCJzaGE1MTJXaXRoUlNBRW5jcnlwdGlvbiI6eyJzaWduIjoicnNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiMzA1MTMwMGQwNjA5''@;'; put 'put ''NjA4NjQ4MDE2NTAzMDQwMjAzMDUwMDA0NDAifSwiUlNBLVNIQTUxMiI6eyJzaWduIjoiZWNkc2EvcnNhIiwiaGFzaCI6InNoYTUxMiIsImlkIjoiMzA1MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAzMDUwMDA0NDAifSwiUlNBLVNIQTEiOnsic2lnbiI6InJzYSIsImhhc2giOiJzaGExIiwi''@;'; put 'put ''aWQiOiIzMDIxMzAwOTA2MDUyYjBlMDMwMjFhMDUwMDA0MTQifSwiZWNkc2Etd2l0aC1TSEExIjp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGExIiwiaWQiOiIifSwic2hhMjU2Ijp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGEyNTYiLCJpZCI6IiJ9LCJzaGEyMjQiOnsic2lnbiI6ImVj''@;'; put 'put ''ZHNhIiwiaGFzaCI6InNoYTIyNCIsImlkIjoiIn0sInNoYTM4NCI6eyJzaWduIjoiZWNkc2EiLCJoYXNoIjoic2hhMzg0IiwiaWQiOiIifSwic2hhNTEyIjp7InNpZ24iOiJlY2RzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IiJ9LCJEU0EtU0hBIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hh''@;'; put 'put ''MSIsImlkIjoiIn0sIkRTQS1TSEExIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMSIsImlkIjoiIn0sIkRTQSI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTEiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEEyMjQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEyMjQiLCJpZCI6IiJ9LCJEU0Et''@;'; put 'put ''U0hBMjI0Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjI0IiwiaWQiOiIifSwiRFNBLVdJVEgtU0hBMjU2Ijp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhMjU2IiwiaWQiOiIifSwiRFNBLVNIQTI1NiI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTI1NiIsImlkIjoiIn0sIkRTQS1XSVRI''@;'; put 'put ''LVNIQTM4NCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InNoYTM4NCIsImlkIjoiIn0sIkRTQS1TSEEzODQiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGEzODQiLCJpZCI6IiJ9LCJEU0EtV0lUSC1TSEE1MTIiOnsic2lnbiI6ImRzYSIsImhhc2giOiJzaGE1MTIiLCJpZCI6IiJ9LCJEU0EtU0hB''@;'; put 'put ''NTEyIjp7InNpZ24iOiJkc2EiLCJoYXNoIjoic2hhNTEyIiwiaWQiOiIifSwiRFNBLVJJUEVNRDE2MCI6eyJzaWduIjoiZHNhIiwiaGFzaCI6InJtZDE2MCIsImlkIjoiIn0sInJpcGVtZDE2MFdpdGhSU0EiOnsic2lnbiI6InJzYSIsImhhc2giOiJybWQxNjAiLCJpZCI6IjMwMjEzMDA5MDYw''@;'; put 'put ''NTJiMjQwMzAyMDEwNTAwMDQxNCJ9LCJSU0EtUklQRU1EMTYwIjp7InNpZ24iOiJyc2EiLCJoYXNoIjoicm1kMTYwIiwiaWQiOiIzMDIxMzAwOTA2MDUyYjI0MDMwMjAxMDUwMDA0MTQifSwibWQ1V2l0aFJTQUVuY3J5cHRpb24iOnsic2lnbiI6InJzYSIsImhhc2giOiJtZDUiLCJpZCI6IjMw''@;'; put 'put ''MjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDUwNTAwMDQxMCJ9LCJSU0EtTUQ1Ijp7InNpZ24iOiJyc2EiLCJoYXNoIjoibWQ1IiwiaWQiOiIzMDIwMzAwYzA2MDgyYTg2NDg4NmY3MGQwMjA1MDUwMDA0MTAifX0nKX0sNjQ1ODk6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1KU09OLnBh''@;'; put 'put ''cnNlKCd7IjEuMy4xMzIuMC4xMCI6InNlY3AyNTZrMSIsIjEuMy4xMzIuMC4zMyI6InAyMjQiLCIxLjIuODQwLjEwMDQ1LjMuMS4xIjoicDE5MiIsIjEuMi44NDAuMTAwNDUuMy4xLjciOiJwMjU2IiwiMS4zLjEzMi4wLjM0IjoicDM4NCIsIjEuMy4xMzIuMC4zNSI6InA1MjEifScpfSwyMzI0''@;'; put 'put ''MTp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPUpTT04ucGFyc2UoJ3sibW9kcDEiOnsiZ2VuIjoiMDIiLCJwcmltZSI6ImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0''@;'; put 'put ''MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2M2EzNjIwZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwMiI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRj''@;'; put 'put ''NGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZi''@;'; put 'put ''ZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTY1MzgxZmZmZmZmZmZmZmZmZmZmZiJ9LCJtb2RwNSI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2Ix''@;'; put 'put ''MzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNk''@;'; put 'put ''YzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2EyMzczMjdmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxNCI6eyJnZW4iOiIw''@;'; put 'put ''MiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2''@;'; put 'put ''MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUy''@;'; put 'put ''YmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3''@;'; put 'put ''MjhlNWE4YWFjYWE2OGZmZmZmZmZmZmZmZmZmZmYifSwibW9kcDE1Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTli''@;'; put 'put ''M2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1''@;'; put 'put ''ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlk''@;'; put 'put ''ZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0''@;'; put 'put ''ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTNhZDJjYWZmZmZmZmZmZmZm''@;'; put 'put ''ZmZmZmYifSwibW9kcDE2Ijp7ImdlbiI6IjAyIiwicHJpbWUiOiJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQz''@;'; put 'put ''NzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1''@;'; put 'put ''NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2Nl''@;'; put 'put ''YTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVl''@;'; put 'put ''NmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTlj''@;'; put 'put ''MzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3''@;'; put 'put ''ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwNjMxOTlmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAxNyI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3''@;'; put 'put ''Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0''@;'; put 'put ''OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3''@;'; put 'put ''MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQw''@;'; put 'put ''NjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMx''@;'; put 'put ''NDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5''@;'; put 'put ''NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDI4NDkyMzZjM2ZhYjRkMjdjNzAyNmMxZDRkY2IyNjAyNjQ2ZGVjOTc1MWU3NjNk''@;'; put 'put ''YmEzN2JkZjhmZjk0MDZhZDllNTMwZWU1ZGIzODJmNDEzMDAxYWViMDZhNTNlZDkwMjdkODMxMTc5NzI3YjA4NjVhODkxOGRhM2VkYmViY2Y5YjE0ZWQ0NGNlNmNiYWNlZDRiYjFiZGI3ZjE0NDdlNmNjMjU0YjMzMjA1MTUxMmJkN2FmNDI2ZmI4ZjQwMTM3OGNkMmJmNTk4M2NhMDFjNjRiOTJl''@;'; put 'put ''Y2YwMzJlYTE1ZDE3MjFkMDNmNDgyZDdjZTZlNzRmZWY2ZDU1ZTcwMmY0Njk4MGM4MmI1YTg0MDMxOTAwYjFjOWU1OWU3Yzk3ZmJlYzdlOGYzMjNhOTdhN2UzNmNjODhiZTBmMWQ0NWI3ZmY1ODVhYzU0YmQ0MDdiMjJiNDE1NGFhY2M4ZjZkN2ViZjQ4ZTFkODE0Y2M1ZWQyMGY4MDM3ZTBhNzk3''@;'; put 'put ''MTVlZWYyOWJlMzI4MDZhMWQ1OGJiN2M1ZGE3NmY1NTBhYTNkOGExZmJmZjBlYjE5Y2NiMWEzMTNkNTVjZGE1NmM5ZWMyZWYyOTYzMjM4N2ZlOGQ3NmUzYzA0NjgwNDNlOGY2NjNmNDg2MGVlMTJiZjJkNWIwYjc0NzRkNmU2OTRmOTFlNmRjYzQwMjRmZmZmZmZmZmZmZmZmZmZmIn0sIm1vZHAx''@;'; put 'put ''OCI6eyJnZW4iOiIwMiIsInByaW1lIjoiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFj''@;'; put 'put ''MjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFj''@;'; put 'put ''NjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYx''@;'; put 'put ''ODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThh''@;'; put 'put ''MDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2Mx''@;'; put 'put ''YTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVh''@;'; put 'put ''OTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDI4NDkyMzZjM2ZhYjRkMjdjNzAyNmMxZDRkY2IyNjAyNjQ2ZGVjOTc1MWU3NjNkYmEzN2JkZjhmZjk0MDZhZDllNTMwZWU1ZGIzODJmNDEzMDAxYWViMDZhNTNlZDkwMjdkODMxMTc5NzI3YjA4NjVhODkxOGRhM2VkYmViY2Y5''@;'; put 'put ''YjE0ZWQ0NGNlNmNiYWNlZDRiYjFiZGI3ZjE0NDdlNmNjMjU0YjMzMjA1MTUxMmJkN2FmNDI2ZmI4ZjQwMTM3OGNkMmJmNTk4M2NhMDFjNjRiOTJlY2YwMzJlYTE1ZDE3MjFkMDNmNDgyZDdjZTZlNzRmZWY2ZDU1ZTcwMmY0Njk4MGM4MmI1YTg0MDMxOTAwYjFjOWU1OWU3Yzk3ZmJlYzdlOGYz''@;'; put 'put ''MjNhOTdhN2UzNmNjODhiZTBmMWQ0NWI3ZmY1ODVhYzU0YmQ0MDdiMjJiNDE1NGFhY2M4ZjZkN2ViZjQ4ZTFkODE0Y2M1ZWQyMGY4MDM3ZTBhNzk3MTVlZWYyOWJlMzI4MDZhMWQ1OGJiN2M1ZGE3NmY1NTBhYTNkOGExZmJmZjBlYjE5Y2NiMWEzMTNkNTVjZGE1NmM5ZWMyZWYyOTYzMjM4N2Zl''@;'; put 'put ''OGQ3NmUzYzA0NjgwNDNlOGY2NjNmNDg2MGVlMTJiZjJkNWIwYjc0NzRkNmU2OTRmOTFlNmRiZTExNTk3NGEzOTI2ZjEyZmVlNWU0Mzg3NzdjYjZhOTMyZGY4Y2Q4YmVjNGQwNzNiOTMxYmEzYmM4MzJiNjhkOWRkMzAwNzQxZmE3YmY4YWZjNDdlZDI1NzZmNjkzNmJhNDI0NjYzYWFiNjM5YzVh''@;'; put 'put ''ZTRmNTY4MzQyM2I0NzQyYmYxYzk3ODIzOGYxNmNiZTM5ZDY1MmRlM2ZkYjhiZWZjODQ4YWQ5MjIyMjJlMDRhNDAzN2MwNzEzZWI1N2E4MWEyM2YwYzczNDczZmM2NDZjZWEzMDZiNGJjYmM4ODYyZjgzODVkZGZhOWQ0YjdmYTJjMDg3ZTg3OTY4MzMwM2VkNWJkZDNhMDYyYjNjZjViM2EyNzhh''@;'; put 'put ''NjZkMmExM2Y4M2Y0NGY4MmRkZjMxMGVlMDc0YWI2YTM2NDU5N2U4OTlhMDI1NWRjMTY0ZjMxY2M1MDg0Njg1MWRmOWFiNDgxOTVkZWQ3ZWExYjFkNTEwYmQ3ZWU3NGQ3M2ZhZjM2YmMzMWVjZmEyNjgzNTkwNDZmNGViODc5ZjkyNDAwOTQzOGI0ODFjNmNkNzg4OWEwMDJlZDVlZTM4MmJjOTE5''@;'; put 'put ''MGRhNmZjMDI2ZTQ3OTU1OGU0NDc1Njc3ZTlhYTllMzA1MGUyNzY1Njk0ZGZjODFmNTZlODgwYjk2ZTcxNjBjOTgwZGQ5OGVkZDNkZmZmZmZmZmZmZmZmZmZmZmYifX0nKX0sMTYzNjp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPXtyRToiNi42LjEifX0sNDMyNjc6dWU9PnsidXNlIHN0''@;'; put 'put ''cmljdCI7dWUuZXhwb3J0cz1KU09OLnBhcnNlKCdbWyI4NzQwIiwiXHU0M2YwXHU0YzMyXHU0NjAzXHU0NWE2XHU0NTc4XHV7MjcyNjd9XHU0ZDc3XHU0NWIzXHV7MjdjYjF9XHU0Y2UyXHV7MjdjYzV9XHUzYjk1XHU0NzM2XHU0NzQ0XHU0YzQ3XHU0YzQwXHV7MjQyYmZ9XHV7MjM2MTd9XHV7''@;'; put 'put ''MjczNTJ9XHV7MjZlOGJ9XHV7MjcwZDJ9XHU0YzU3XHV7MmEzNTF9XHU0NzRmXHU0NWRhXHU0Yzg1XHV7MjdjNmN9XHU0ZDA3XHU0YWE0XHU0NmExXHV7MjZiMjN9XHU3MjI1XHV7MjVhNTR9XHV7MjFhNjN9XHV7MjNlMDZ9XHV7MjNmNjF9XHU2NjRkXHU1NmZiIl0sWyI4NzY3IiwiXHU3ZDk1''@;'; put 'put ''XHU1OTFkXHV7MjhiYjl9XHUzZGY0XHU5NzM0XHV7MjdiZWZ9XHU1YmRiXHV7MjFkNWV9XHU1YWE0XHUzNjI1XHV7MjllYjB9XHU1YWQxXHU1YmI3XHU1Y2ZjXHU2NzZlXHU4NTkzXHV7Mjk5NDV9XHU3NDYxXHU3NDlkXHUzODc1XHV7MjFkNTN9XHV7MjM2OWV9XHV7MjYwMjF9XHUzZWVjIl0s''@;'; put 'put ''WyI4N2ExIiwiXHV7MjU4ZGV9XHUzYWY1XHU3YWZjXHU5Zjk3XHV7MjQxNjF9XHV7Mjg5MGR9XHV7MjMxZWF9XHV7MjBhOGF9XHV7MjMyNWV9XHU0MzBhXHU4NDg0XHU5Zjk2XHU5NDJmXHU0OTMwXHU4NjEzXHU1ODk2XHU5NzRhXHU5MjE4XHU3OWQwXHU3YTMyXHU2NjYwXHU2YTI5XHU4ODlk''@;'; put 'put ''XHU3NDRjXHU3YmM1XHU2NzgyXHU3YTJjXHU1MjRmXHU5MDQ2XHUzNGU2XHU3M2M0XHV7MjVkYjl9XHU3NGM2XHU5ZmM3XHU1N2IzXHU0OTJmXHU1NDRjXHU0MTMxXHV7MjM2OGV9XHU1ODE4XHU3YTcyXHV7MjdiNjV9XHU4YjhmXHU0NmFlXHV7MjZlODh9XHU0MTgxXHV7MjVkOTl9XHU3YmFl''@;'; put 'put ''XHV7MjI0YmN9XHU5ZmM4XHV7MjI0YzF9XHV7MjI0Yzl9XHV7MjI0Y2N9XHU5ZmM5XHU4NTA0XHV7MjM1YmJ9XHU0MGI0XHU5ZmNhXHU0NGUxXHV7MmFkZmZ9XHU2MmMxXHU3MDZlXHU5ZmNiIl0sWyI4ODQwIiwiXHUzMWMwIiw0LCJcdXsyMDEwY31cdTMxYzVcdXsyMDBkMX1cdXsyMDBjZH1c''@;'; put 'put ''dTMxYzZcdTMxYzdcdXsyMDBjYn1cdXsyMWZlOH1cdTMxYzhcdXsyMDBjYX1cdTMxYzlcdTMxY2FcdTMxY2JcdTMxY2NcdXsyMDEwZX1cdTMxY2RcdTMxY2VcdTAxMDBceGMxXHUwMWNkXHhjMFx1MDExMlx4YzlcdTAxMWFceGM4XHUwMTRjXHhkM1x1MDFkMVx4ZDJcdTBmZmZceGNhXHUwMzA0''@;'; put 'put ''XHUxZWJlXHUwZmZmXHhjYVx1MDMwY1x1MWVjMFx4Y2FcdTAxMDFceGUxXHUwMWNlXHhlMFx1MDI1MVx1MDExM1x4ZTlcdTAxMWJceGU4XHUwMTJiXHhlZFx1MDFkMFx4ZWNcdTAxNGRceGYzXHUwMWQyXHhmMlx1MDE2Ylx4ZmFcdTAxZDRceGY5XHUwMWQ2XHUwMWQ4XHUwMWRhIl0sWyI4OGEx''@;'; put 'put ''IiwiXHUwMWRjXHhmY1x1MGZmZlx4ZWFcdTAzMDRcdTFlYmZcdTBmZmZceGVhXHUwMzBjXHUxZWMxXHhlYVx1MDI2MVx1MjNkYVx1MjNkYiJdLFsiODk0MCIsIlx1ezJhM2E5fVx1ezIxMTQ1fSJdLFsiODk0MyIsIlx1NjUwYSJdLFsiODk0NiIsIlx1NGUzZFx1NmVkZFx1OWQ0ZVx1OTFkZiJd''@;'; put 'put ''LFsiODk0YyIsIlx1ezI3NzM1fVx1NjQ5MVx1NGYxYVx1NGYyOFx1NGZhOFx1NTE1Nlx1NTE3NFx1NTE5Y1x1NTFlNFx1NTJhMVx1NTJhOFx1NTMzYlx1NTM0ZVx1NTNkMVx1NTNkOFx1NTZlMlx1NThmMFx1NTkwNFx1NTkwN1x1NTkzMlx1NTkzNFx1NWI2Nlx1NWI5ZVx1NWI5Zlx1NWM5YVx1''@;'; put 'put ''NWU4Nlx1NjAzYlx1NjU4OVx1NjdmZVx1NjgwNFx1Njg2NVx1NmQ0ZVx1NzBiY1x1NzUzNVx1N2VhNFx1N2VhY1x1N2ViYVx1N2VjN1x1N2VjZlx1N2VkZlx1N2YwNlx1N2YzN1x1ODI3YVx1ODJjZlx1ODM2Zlx1ODljNlx1OGJiZVx1OGJlMlx1OGY2Nlx1OGY2N1x1OGY2ZSJdLFsiODlhMSIs''@;'; put 'put ''Ilx1NzQxMVx1N2NmY1x1N2RjZFx1Njk0Nlx1N2FjOVx1NTIyNyJdLFsiODlhYiIsIlx1OTE4Y1x1NzhiOFx1OTE1ZVx1ODBiYyJdLFsiODliMCIsIlx1OGQwYlx1ODBmNlx1ezIwOWU3fSJdLFsiODliNSIsIlx1ODA5Zlx1OWVjN1x1NGNjZFx1OWRjOVx1OWUwY1x1NGMzZVx1ezI5ZGY2fVx1''@;'; put 'put ''ezI3MDBlfVx1OWUwYVx1ezJhMTMzfVx1MzVjMSJdLFsiODljMSIsIlx1NmU5YVx1ODIzZVx1NzUxOSJdLFsiODljNSIsIlx1NDkxMVx1OWE2Y1x1OWE4Zlx1OWY5OVx1Nzk4N1x1ezI4NDZjfVx1ezIxZGNhfVx1ezIwNWQwfVx1ezIyYWU2fVx1NGUyNFx1NGU4MVx1NGU4MFx1NGU4N1x1NGVi''@;'; put 'put ''Zlx1NGVlYlx1NGYzN1x1MzQ0Y1x1NGZiZFx1M2U0OFx1NTAwM1x1NTA4OFx1MzQ3ZFx1MzQ5M1x1MzRhNVx1NTE4Nlx1NTkwNVx1NTFkYlx1NTFmY1x1NTIwNVx1NGU4OVx1NTI3OVx1NTI5MFx1NTMyN1x1MzVjN1x1NTNhOVx1MzU1MVx1NTNiMFx1MzU1M1x1NTNjMlx1NTQyM1x1MzU2ZFx1''@;'; put 'put ''MzU3Mlx1MzY4MVx1NTQ5M1x1NTRhM1x1NTRiNFx1NTRiOVx1NTRkMFx1NTRlZlx1NTUxOFx1NTUyM1x1NTUyOFx1MzU5OFx1NTUzZlx1MzVhNVx1MzViZlx1NTVkN1x1MzVjNSJdLFsiOGE0MCIsIlx1ezI3ZDg0fVx1NTUyNSJdLFsiOGE0MyIsIlx1ezIwYzQyfVx1ezIwZDE1fVx1ezI1MTJi''@;'; put 'put ''fVx1NTU5MFx1ezIyY2M2fVx1MzllY1x1ezIwMzQxfVx1OGU0Nlx1ezI0ZGI4fVx1ezI5NGU1fVx1NDA1M1x1ezI4MGJlfVx1Nzc3YVx1ezIyYzM4fVx1M2EzNFx1NDdkNVx1ezI4MTVkfVx1ezI2OWYyfVx1ezI0ZGVhfVx1NjRkZFx1ezIwZDdjfVx1ezIwZmI0fVx1ezIwY2Q1fVx1ezIxMGY0''@;'; put 'put ''fVx1NjQ4ZFx1OGU3ZVx1ezIwZTk2fVx1ezIwYzBifVx1ezIwZjY0fVx1ezIyY2E5fVx1ezI4MjU2fVx1ezI0NGQzfSJdLFsiOGE2NCIsIlx1ezIwZDQ2fVx1ezI5YTRkfVx1ezI4MGU5fVx1NDdmNFx1ezI0ZWE3fVx1ezIyY2MyfVx1OWFiMlx1M2E2N1x1ezI5NWY0fVx1M2ZlZFx1MzUwNlx1''@;'; put 'put ''ezI1MmM3fVx1ezI5N2Q0fVx1ezI3OGM4fVx1ezIyZDQ0fVx1OWQ2ZVx1OTgxNSJdLFsiOGE3NiIsIlx1NDNkOVx1ezI2MGE1fVx1NjRiNFx1NTRlM1x1ezIyZDRjfVx1ezIyYmNhfVx1ezIxMDc3fVx1MzlmYlx1ezIxMDZmfSJdLFsiOGFhMSIsIlx1ezI2NmRhfVx1ezI2NzE2fVx1ezI3OWEw''@;'; put 'put ''fVx1NjRlYVx1ezI1MDUyfVx1ezIwYzQzfVx1OGU2OFx1ezIyMWExfVx1ezI4YjRjfVx1ezIwNzMxfSJdLFsiOGFhYyIsIlx1NDgwYlx1ezIwMWE5fVx1M2ZmYVx1NTg3M1x1ezIyZDhkfSJdLFsiOGFiMiIsIlx1ezI0NWM4fVx1ezIwNGZjfVx1ezI2MDk3fVx1ezIwZjRjfVx1ezIwZDk2fVx1''@;'; put 'put ''NTU3OVx1NDBiYlx1NDNiYSJdLFsiOGFiYiIsIlx1NGFiNFx1ezIyYTY2fVx1ezIxMDlkfVx1ODFhYVx1OThmNVx1ezIwZDljfVx1NjM3OVx1MzlmZVx1ezIyNzc1fVx1OGRjMFx1NTZhMVx1NjQ3Y1x1M2U0MyJdLFsiOGFjOSIsIlx1ezJhNjAxfVx1ezIwZTA5fVx1ezIyYWNmfVx1ezIyY2M5''@;'; put 'put ''fSJdLFsiOGFjZSIsIlx1ezIxMGM4fVx1ezIzOWMyfVx1Mzk5Mlx1M2EwNlx1ezI4MjlifVx1MzU3OFx1ezI1ZTQ5fVx1ezIyMGM3fVx1NTY1Mlx1ezIwZjMxfVx1ezIyY2IyfVx1ezI5NzIwfVx1MzRiY1x1NmMzZFx1ezI0ZTNifSJdLFsiOGFkZiIsIlx1ezI3NTc0fVx1ezIyZThifVx1ezIy''@;'; put 'put ''MjA4fVx1ezJhNjVifVx1ezI4Y2NkfVx1ezIwZTdhfVx1ezIwYzM0fVx1ezI2ODFjfVx1N2Y5M1x1ezIxMGNmfVx1ezIyODAzfVx1ezIyOTM5fVx1MzVmYlx1ezI1MWUzfVx1ezIwZThjfVx1ezIwZjhkfVx1ezIwZWFhfVx1M2Y5M1x1ezIwZjMwfVx1ezIwZDQ3fVx1ezIxMTRmfVx1ezIwZTRj''@;'; put 'put ''fSJdLFsiOGFmNiIsIlx1ezIwZWFifVx1ezIwYmE5fVx1ezIwZDQ4fVx1ezIxMGMwfVx1ezIxMTNkfVx1M2ZmOVx1ezIyNjk2fVx1NjQzMlx1ezIwZmFkfSJdLFsiOGI0MCIsIlx1ezIzM2Y0fVx1ezI3NjM5fVx1ezIyYmNlfVx1ezIwZDdlfVx1ezIwZDdmfVx1ezIyYzUxfVx1ezIyYzU1fVx1''@;'; put 'put ''M2ExOFx1ezIwZTk4fVx1ezIxMGM3fVx1ezIwZjJlfVx1ezJhNjMyfVx1ezI2YjUwfVx1ezI4Y2QyfVx1ezI4ZDk5fVx1ezI4Y2NhfVx1OTVhYVx1NTRjY1x1ODJjNFx1NTViOSJdLFsiOGI1NSIsIlx1ezI5ZWMzfVx1OWMyNlx1OWFiNlx1ezI3NzVlfVx1ezIyZGVlfVx1NzE0MFx1ODE2ZFx1''@;'; put 'put ''ODBlY1x1NWMxY1x1ezI2NTcyfVx1ODEzNFx1Mzc5N1x1NTM1Zlx1ezI4MGJkfVx1OTFiNlx1ezIwZWZhfVx1ezIwZTBmfVx1ezIwZTc3fVx1ezIwZWZifVx1MzVkZFx1ezI0ZGVifVx1MzYwOVx1ezIwY2Q2fVx1NTZhZlx1ezIyN2I1fVx1ezIxMGM5fVx1ezIwZTEwfVx1ezIwZTc4fVx1ezIx''@;'; put 'put ''MDc4fVx1ezIxMTQ4fVx1ezI4MjA3fVx1ezIxNDU1fVx1ezIwZTc5fVx1ezI0ZTUwfVx1ezIyZGE0fVx1NWE1NFx1ezIxMDFkfVx1ezIxMDFlfVx1ezIxMGY1fVx1ezIxMGY2fVx1NTc5Y1x1ezIwZTExfSJdLFsiOGJhMSIsIlx1ezI3Njk0fVx1ezI4MmNkfVx1ezIwZmI1fVx1ezIwZTdifVx1''@;'; put 'put ''ezI1MTdlfVx1MzcwM1x1ezIwZmI2fVx1ezIxMTgwfVx1ezI1MmQ4fVx1ezJhMmJkfVx1ezI0OWRhfVx1ezIxODNhfVx1ezI0MTc3fVx1ezI4MjdjfVx1NTg5OVx1NTI2OFx1MzYxYVx1ezI1NzNkfVx1N2JiMlx1NWI2OFx1NDgwMFx1NGIyY1x1OWYyN1x1NDllN1x1OWMxZlx1OWI4ZFx1ezI1''@;'; put 'put ''Yjc0fVx1ezIzMTNkfVx1NTVmYlx1MzVmMlx1NTY4OVx1NGUyOFx1NTkwMlx1ezIxYmMxfVx1ezJmODc4fVx1OTc1MVx1ezIwMDg2fVx1NGU1Ylx1NGViYlx1MzUzZVx1NWMyM1x1NWY1MVx1NWZjNFx1MzhmYVx1NjI0Y1x1NjUzNVx1NmI3YVx1NmMzNVx1NmMzYVx1NzA2Y1x1NzIyYlx1NGUy''@;'; put 'put ''Y1x1NzJhZFx1ezI0OGU5fVx1N2Y1Mlx1NzkzYlx1N2NmOVx1N2Y1M1x1ezI2MjZhfVx1MzRjMSJdLFsiOGJkZSIsIlx1ezI2MzRifVx1ODAwMlx1ODA4MFx1ezI2NjEyfVx1ezI2OTUxfVx1NTM1ZFx1ODg2NFx1ODljMVx1ezI3OGIyfVx1OGJhMFx1OGQxZFx1OTQ4NVx1OTU3OFx1OTU3Zlx1''@;'; put 'put ''OTVlOFx1ezI4ZTBmfVx1OTdlNlx1OTg3NVx1OThjZVx1OThkZVx1OTk2M1x1ezI5ODEwfVx1OWM3Y1x1OWUxZlx1OWVjNFx1NmI2Zlx1ZjkwN1x1NGUzN1x1ezIwMDg3fVx1OTYxZFx1NjIzN1x1OTRhMiJdLFsiOGM0MCIsIlx1NTAzYlx1NmRmZVx1ezI5YzczfVx1OWZhNlx1M2RjOVx1ODg4''@;'; put 'put ''Zlx1ezI0MTRlfVx1NzA3N1x1NWNmNVx1NGIyMFx1ezI1MWNkfVx1MzU1OVx1ezI1ZDMwfVx1NjEyMlx1ezI4YTMyfVx1OGZhN1x1OTFmNlx1NzE5MVx1NjcxOVx1NzNiYVx1ezIzMjgxfVx1ezJhMTA3fVx1M2M4Ylx1ezIxOTgwfVx1NGIxMFx1NzhlNFx1NzQwMlx1NTFhZVx1ezI4NzBmfVx1''@;'; put 'put ''NDAwOVx1NmE2M1x1ezJhMmJhfVx1NDIyM1x1ODYwZlx1ezIwYTZmfVx1N2EyYVx1ezI5OTQ3fVx1ezI4YWVhfVx1OTc1NVx1NzA0ZFx1NTMyNFx1ezIyMDdlfVx1OTNmNFx1NzZkOVx1ezI4OWUzfVx1OWZhN1x1NzdkZFx1NGVhM1x1NGZmMFx1NTBiY1x1NGUyZlx1NGYxN1x1OWZhOFx1NTQz''@;'; put 'put ''NFx1N2Q4Ylx1NTg5Mlx1NThkMFx1ezIxZGI2fVx1NWU5Mlx1NWU5OVx1NWZjMlx1ezIyNzEyfVx1NjU4YiJdLFsiOGNhMSIsIlx1ezIzM2Y5fVx1NjkxOVx1NmE0M1x1ezIzYzYzfVx1NmNmZiJdLFsiOGNhNyIsIlx1NzIwMFx1ezI0NTA1fVx1NzM4Y1x1M2VkYlx1ezI0YTEzfVx1NWIxNVx1''@;'; put 'put ''NzRiOVx1OGI4M1x1ezI1Y2E0fVx1ezI1Njk1fVx1N2E5M1x1N2JlY1x1N2NjM1x1N2U2Y1x1ODJmOFx1ODU5N1x1OWZhOVx1ODg5MFx1OWZhYVx1OGViOVx1OWZhYlx1OGZjZlx1ODU1Zlx1OTllMFx1OTIyMVx1OWZhY1x1ezI4ZGI5fVx1ezIxNDNmfVx1NDA3MVx1NDJhMlx1NWExYSJdLFsi''@;'; put 'put ''OGNjOSIsIlx1OTg2OFx1Njc2Ylx1NDI3Nlx1NTczZCJdLFsiOGNjZSIsIlx1ODVkNlx1ezI0OTdifVx1ODJiZlx1ezI3MTBkfVx1NGM4MVx1ezI2ZDc0fVx1NWQ3Ylx1ezI2YjE1fVx1ezI2ZmJlfVx1OWZhZFx1OWZhZVx1NWI5Nlx1OWZhZlx1NjZlN1x1N2U1Ylx1NmU1N1x1NzljYVx1M2Q4''@;'; put 'put ''OFx1NDRjM1x1ezIzMjU2fVx1ezIyNzk2fVx1NDM5YVx1NDUzNiJdLFsiOGNlNiIsIlx1NWNkNVx1ezIzYjFhfVx1OGFmOVx1NWM3OFx1M2QxMlx1ezIzNTUxfVx1NWQ3OFx1OWZiMlx1NzE1N1x1NDU1OFx1ezI0MGVjfVx1ezIxZTIzfVx1NGM3N1x1Mzk3OFx1MzQ0YVx1ezIwMWE0fVx1ezI2''@;'; put 'put ''YzQxfVx1OGFjY1x1NGZiNFx1ezIwMjM5fVx1NTliZlx1ODE2Y1x1OTg1Nlx1ezI5OGZhfVx1NWYzYiJdLFsiOGQ0MCIsIlx1ezIwYjlmfSJdLFsiOGQ0MiIsIlx1ezIyMWMxfVx1ezI4OTZkfVx1NDEwMlx1NDZiYlx1ezI5MDc5fVx1M2YwN1x1OWZiM1x1ezJhMWI1fVx1NDBmOFx1MzdkNlx1''@;'; put 'put ''NDZmN1x1ezI2YzQ2fVx1NDE3Y1x1ezI4NmIyfVx1ezI3M2ZmfVx1NDU2ZFx1MzhkNFx1ezI1NDlhfVx1NDU2MVx1NDUxYlx1NGQ4OVx1NGM3Ylx1NGQ3Nlx1NDVlYVx1M2ZjOFx1ezI0YjBmfVx1MzY2MVx1NDRkZVx1NDRiZFx1NDFlZFx1NWQzZVx1NWQ0OFx1NWQ1Nlx1M2RmY1x1MzgwZlx1''@;'; put 'put ''NWRhNFx1NWRiOVx1MzgyMFx1MzgzOFx1NWU0Mlx1NWViZFx1NWYyNVx1NWY4M1x1MzkwOFx1MzkxNFx1MzkzZlx1Mzk0ZFx1NjBkN1x1NjEzZFx1NWNlNVx1Mzk4OVx1NjFiN1x1NjFiOVx1NjFjZlx1MzliOFx1NjIyY1x1NjI5MFx1NjJlNVx1NjMxOFx1MzlmOFx1NTZiMSJdLFsiOGRhMSIs''@;'; put 'put ''Ilx1M2EwM1x1NjNlMlx1NjNmYlx1NjQwN1x1NjQ1YVx1M2E0Ylx1NjRjMFx1NWQxNVx1NTYyMVx1OWY5Zlx1M2E5N1x1NjU4Nlx1M2FiZFx1NjVmZlx1NjY1M1x1M2FmMlx1NjY5Mlx1M2IyMlx1NjcxNlx1M2I0Mlx1NjdhNFx1NjgwMFx1M2I1OFx1Njg0YVx1Njg4NFx1M2I3Mlx1M2I3MVx1''@;'; put 'put ''M2I3Ylx1NjkwOVx1Njk0M1x1NzI1Y1x1Njk2NFx1Njk5Zlx1Njk4NVx1M2JiY1x1NjlkNlx1M2JkZFx1NmE2NVx1NmE3NFx1NmE3MVx1NmE4Mlx1M2JlY1x1NmE5OVx1M2JmMlx1NmFhYlx1NmFiNVx1NmFkNFx1NmFmNlx1NmI4MVx1NmJjMVx1NmJlYVx1NmM3NVx1NmNhYVx1M2NjYlx1NmQw''@;'; put 'put ''Mlx1NmQwNlx1NmQyNlx1NmQ4MVx1M2NlZlx1NmRhNFx1NmRiMVx1NmUxNVx1NmUxOFx1NmUyOVx1NmU4Nlx1ezI4OWMwfVx1NmViYlx1NmVlMlx1NmVkYVx1OWY3Zlx1NmVlOFx1NmVlOVx1NmYyNFx1NmYzNFx1M2Q0Nlx1ezIzZjQxfVx1NmY4MVx1NmZiZVx1M2Q2YVx1M2Q3NVx1NzFiN1x1''@;'; put 'put ''NWM5OVx1M2Q4YVx1NzAyY1x1M2Q5MVx1NzA1MFx1NzA1NFx1NzA2Zlx1NzA3Zlx1NzA4OVx1ezIwMzI1fVx1NDNjMVx1MzVmMVx1ezIwZWQ4fSJdLFsiOGU0MCIsIlx1ezIzZWQ3fVx1NTdiZVx1ezI2ZWQzfVx1NzEzZVx1ezI1N2UwfVx1MzY0ZVx1NjlhMlx1ezI4YmU5fVx1NWI3NFx1N2E0''@;'; put 'put ''OVx1ezI1OGUxfVx1ezI5NGQ5fVx1N2E2NVx1N2E3ZFx1ezI1OWFjfVx1N2FiYlx1N2FiMFx1N2FjMlx1N2FjM1x1NzFkMVx1ezI2NDhkfVx1NDFjYVx1N2FkYVx1N2FkZFx1N2FlYVx1NDFlZlx1NTRiMlx1ezI1YzAxfVx1N2IwYlx1N2I1NVx1N2IyOVx1ezI1MzBlfVx1ezI1Y2ZlfVx1N2Jh''@;'; put 'put ''Mlx1N2I2Zlx1ODM5Y1x1ezI1YmI0fVx1ezI2YzdmfVx1N2JkMFx1ODQyMVx1N2I5Mlx1N2JiOFx1ezI1ZDIwfVx1M2RhZFx1ezI1YzY1fVx1ODQ5Mlx1N2JmYVx1N2MwNlx1N2MzNVx1ezI1Y2MxfVx1N2M0NFx1N2M4M1x1ezI0ODgyfVx1N2NhNlx1NjY3ZFx1ezI0NTc4fVx1N2NjOVx1N2Nj''@;'; put 'put ''N1x1N2NlNlx1N2M3NFx1N2NmM1x1N2NmNVx1N2NjZSJdLFsiOGVhMSIsIlx1N2U2N1x1NDUxZFx1ezI2ZTQ0fVx1N2Q1ZFx1ezI2ZWQ2fVx1NzQ4ZFx1N2Q4OVx1N2RhYlx1NzEzNVx1N2RiM1x1N2RkMlx1ezI0MDU3fVx1ezI2MDI5fVx1N2RlNFx1M2QxM1x1N2RmNVx1ezIxN2Y5fVx1N2Rl''@;'; put 'put ''NVx1ezI4MzZkfVx1N2UxZFx1ezI2MTIxfVx1ezI2MTVhfVx1N2U2ZVx1N2U5Mlx1NDMyYlx1OTQ2Y1x1N2UyN1x1N2Y0MFx1N2Y0MVx1N2Y0N1x1NzkzNlx1ezI2MmQwfVx1OTllMVx1N2Y5N1x1ezI2MzUxfVx1N2ZhM1x1ezIxNjYxfVx1ezIwMDY4fVx1NDU1Y1x1ezIzNzY2fVx1NDUwM1x1''@;'; put 'put ''ezI4MzNhfVx1N2ZmYVx1ezI2NDg5fVx1ODAwNVx1ODAwOFx1ODAxZFx1ODAyOFx1ODAyZlx1ezJhMDg3fVx1ezI2Y2MzfVx1ODAzYlx1ODAzY1x1ODA2MVx1ezIyNzE0fVx1NDk4OVx1ezI2NjI2fVx1ezIzZGUzfVx1ezI2NmU4fVx1NjcyNVx1ODBhN1x1ezI4YTQ4fVx1ODEwN1x1ODExYVx1''@;'; put 'put ''NThiMFx1ezIyNmY2fVx1NmM3Zlx1ezI2NDk4fVx1ezI0ZmI4fVx1NjRlN1x1ezIxNDhhfVx1ODIxOFx1ezIxODVlfVx1NmE1M1x1ezI0YTY1fVx1ezI0YTk1fVx1NDQ3YVx1ODIyOVx1ezIwYjBkfVx1ezI2YTUyfVx1ezIzZDdlfVx1NGZmOVx1ezIxNGZkfVx1ODRlMlx1ODM2Mlx1ezI2YjBh''@;'; put 'put ''fVx1ezI0OWE3fVx1ezIzNTMwfVx1ezIxNzczfVx1ezIzZGY4fVx1ODJhYVx1NjkxYlx1ezJmOTk0fVx1NDFkYiJdLFsiOGY0MCIsIlx1ODU0Ylx1ODJkMFx1ODMxYVx1ezIwZTE2fVx1ezIxN2I0fVx1MzZjMVx1ezIzMTdkfVx1ezIzNTVhfVx1ODI3Ylx1ODJlMlx1ODMxOFx1ezIzZThifVx1''@;'; put 'put ''ezI2ZGEzfVx1ezI2YjA1fVx1ezI2Yjk3fVx1ezIzNWNlfVx1M2RiZlx1ODMxZFx1NTVlY1x1ODM4NVx1NDUwYlx1ezI2ZGE1fVx1ODNhY1x1ODNjMVx1ODNkM1x1MzQ3ZVx1ezI2ZWQ0fVx1NmE1N1x1ODU1YVx1MzQ5Nlx1ezI2ZTQyfVx1ezIyZWVmfVx1ODQ1OFx1ezI1YmU0fVx1ODQ3MVx1''@;'; put 'put ''M2RkM1x1NDRlNFx1NmFhN1x1ODQ0YVx1ezIzY2I1fVx1Nzk1OFx1ODRhOFx1ezI2Yjk2fVx1ezI2ZTc3fVx1ezI2ZTQzfVx1ODRkZVx1ODQwZlx1ODM5MVx1NDRhMFx1ODQ5M1x1ODRlNFx1ezI1YzkxfVx1NDI0MFx1ezI1Y2MwfVx1NDU0M1x1ODUzNFx1NWFmMlx1ezI2ZTk5fVx1NDUyN1x1''@;'; put 'put ''ODU3M1x1NDUxNlx1NjdiZlx1ODYxNiJdLFsiOGZhMSIsIlx1ezI4NjI1fVx1ezI4NjNifVx1ODVjMVx1ezI3MDg4fVx1ODYwMlx1ezIxNTgyfVx1ezI3MGNkfVx1ezJmOWIyfVx1NDU2YVx1ODYyOFx1MzY0OFx1ezIxOGEyfVx1NTNmN1x1ezI3MzlhfVx1ODY3ZVx1ODc3MVx1ezJhMGY4fVx1''@;'; put 'put ''ODdlZVx1ezIyYzI3fVx1ODdiMVx1ODdkYVx1ODgwZlx1NTY2MVx1ODY2Y1x1Njg1Nlx1NDYwZlx1ODg0NVx1ODg0Nlx1ezI3NWUwfVx1ezIzZGI5fVx1ezI3NWU0fVx1ODg1ZVx1ODg5Y1x1NDY1Ylx1ODhiNFx1ODhiNVx1NjNjMVx1ODhjNVx1Nzc3N1x1ezI3NzBmfVx1ODk4N1x1ODk4YVx1''@;'; put 'put ''ODlhNlx1ODlhOVx1ODlhN1x1ODliY1x1ezI4YTI1fVx1ODllN1x1ezI3OTI0fVx1ezI3YWJkfVx1OGE5Y1x1Nzc5M1x1OTFmZVx1OGE5MFx1ezI3YTU5fVx1N2FlOVx1ezI3YjNhfVx1ezIzZjhmfVx1NDcxM1x1ezI3YjM4fVx1NzE3Y1x1OGIwY1x1OGIxZlx1ezI1NDMwfVx1ezI1NTY1fVx1''@;'; put 'put ''OGIzZlx1OGI0Y1x1OGI0ZFx1OGFhOVx1ezI0YTdhfVx1OGI5MFx1OGI5Ylx1OGFhZlx1ezIxNmRmfVx1NDYxNVx1ODg0Zlx1OGM5Ylx1ezI3ZDU0fVx1ezI3ZDhmfVx1ezJmOWQ0fVx1MzcyNVx1ezI3ZDUzfVx1OGNkNlx1ezI3ZDk4fVx1ezI3ZGJkfVx1OGQxMlx1OGQwM1x1ezIxOTEwfVx1''@;'; put 'put ''OGNkYlx1NzA1Y1x1OGQxMVx1ezI0Y2M5fVx1M2VkMFx1OGQ3NyJdLFsiOTA0MCIsIlx1OGRhOVx1ezI4MDAyfVx1ezIxMDE0fVx1ezI0OThhfVx1M2I3Y1x1ezI4MWJjfVx1ezI3MTBjfVx1N2FlN1x1OGVhZFx1OGViNlx1OGVjM1x1OTJkNFx1OGYxOVx1OGYyZFx1ezI4MzY1fVx1ezI4NDEy''@;'; put 'put ''fVx1OGZhNVx1OTMwM1x1ezJhMjlmfVx1ezIwYTUwfVx1OGZiM1x1NDkyYVx1ezI4OWRlfVx1ezI4NTNkfVx1ezIzZGJifVx1NWVmOFx1ezIzMjYyfVx1OGZmOVx1ezJhMDE0fVx1ezI4NmJjfVx1ezI4NTAxfVx1ezIyMzI1fVx1Mzk4MFx1ezI2ZWQ3fVx1OTAzN1x1ezI4NTNjfVx1ezI3YWJl''@;'; put 'put ''fVx1OTA2MVx1ezI4NTZjfVx1ezI4NjBifVx1OTBhOFx1ezI4NzEzfVx1OTBjNFx1ezI4NmU2fVx1OTBhZVx1OTBmZFx1OTE2N1x1M2FmMFx1OTFhOVx1OTFjNFx1N2NhY1x1ezI4OTMzfVx1ezIxZTg5fVx1OTIwZVx1NmM5Zlx1OTI0MVx1OTI2Mlx1ezI1NWI5fVx1OTJiOVx1ezI4YWM2fVx1''@;'; put 'put ''ezIzYzlifVx1ezI4YjBjfVx1ezI1NWRifSJdLFsiOTBhMSIsIlx1ezIwZDMxfVx1OTMyY1x1OTM2Ylx1ezI4YWUxfVx1ezI4YmVifVx1NzA4Zlx1NWFjM1x1ezI4YWUyfVx1ezI4YWU1fVx1NDk2NVx1OTI0NFx1ezI4YmVjfVx1ezI4YzM5fVx1ezI4YmZmfVx1OTM3M1x1OTQ1Ylx1OGViY1x1''@;'; put 'put ''OTU4NVx1OTVhNlx1OTQyNlx1OTVhMFx1NmZmNlx1NDJiOVx1ezIyNjdhfVx1ezI4NmQ4fVx1ezIxMjdjfVx1ezIzZTJlfVx1NDlkZlx1NmMxY1x1OTY3Ylx1OTY5Nlx1NDE2Y1x1OTZhM1x1ezI2ZWQ1fVx1NjFkYVx1OTZiNlx1NzhmNVx1ezI4YWUwfVx1OTZiZFx1NTNjY1x1NDlhMVx1ezI2''@;'; put 'put ''Y2I4fVx1ezIwMjc0fVx1ezI2NDEwfVx1ezI5MGFmfVx1ezI5MGU1fVx1ezI0YWQxfVx1ezIxOTE1fVx1ezIzMzBhfVx1OTczMVx1ODY0Mlx1OTczNlx1NGEwZlx1NDUzZFx1NDU4NVx1ezI0YWU5fVx1NzA3NVx1NWI0MVx1OTcxYlx1OTc1Y1x1ezI5MWQ1fVx1OTc1N1x1NWI0YVx1ezI5MWVi''@;'; put 'put ''fVx1OTc1Zlx1OTQyNVx1NTBkMFx1ezIzMGI3fVx1ezIzMGJjfVx1OTc4OVx1OTc5Zlx1OTdiMVx1OTdiZVx1OTdjMFx1OTdkMlx1OTdlMFx1ezI1NDZjfVx1OTdlZVx1NzQxY1x1ezI5NDMzfVx1OTdmZlx1OTdmNVx1ezI5NDFkfVx1ezI3OTdhfVx1NGFkMVx1OTgzNFx1OTgzM1x1OTg0Ylx1''@;'; put 'put ''OTg2Nlx1M2IwZVx1ezI3MTc1fVx1M2Q1MVx1ezIwNjMwfVx1ezI0MTVjfSJdLFsiOTE0MCIsIlx1ezI1NzA2fVx1OThjYVx1OThiN1x1OThjOFx1OThjN1x1NGFmZlx1ezI2ZDI3fVx1ezIxNmQzfVx1NTViMFx1OThlMVx1OThlNlx1OThlY1x1OTM3OFx1OTkzOVx1ezI0YTI5fVx1NGI3Mlx1''@;'; put 'put ''ezI5ODU3fVx1ezI5OTA1fVx1OTlmNVx1OWEwY1x1OWEzYlx1OWExMFx1OWE1OFx1ezI1NzI1fVx1MzZjNFx1ezI5MGIxfVx1ezI5YmQ1fVx1OWFlMFx1OWFlMlx1ezI5YjA1fVx1OWFmNFx1NGMwZVx1OWIxNFx1OWIyZFx1ezI4NjAwfVx1NTAzNFx1OWIzNFx1ezI2OWE4fVx1MzhjM1x1ezIz''@;'; put 'put ''MDdkfVx1OWI1MFx1OWI0MFx1ezI5ZDNlfVx1NWE0NVx1ezIxODYzfVx1OWI4ZVx1ezI0MjRifVx1OWMwMlx1OWJmZlx1OWMwY1x1ezI5ZTY4fVx1OWRkNFx1ezI5ZmI3fVx1ezJhMTkyfVx1ezJhMWFifVx1ezJhMGUxfVx1ezJhMTIzfVx1ezJhMWRmfVx1OWQ3ZVx1OWQ4M1x1ezJhMTM0fVx1''@;'; put 'put ''OWUwZVx1Njg4OCJdLFsiOTFhMSIsIlx1OWRjNFx1ezIyMTVifVx1ezJhMTkzfVx1ezJhMjIwfVx1ezIxOTNifVx1ezJhMjMzfVx1OWQzOVx1ezJhMGI5fVx1ezJhMmI0fVx1OWU5MFx1OWU5NVx1OWU5ZVx1OWVhMlx1NGQzNFx1OWVhYVx1OWVhZlx1ezI0MzY0fVx1OWVjMVx1M2I2MFx1Mzll''@;'; put 'put ''NVx1M2QxZFx1NGYzMlx1MzdiZVx1ezI4YzJifVx1OWYwMlx1OWYwOFx1NGI5Nlx1OTQyNFx1ezI2ZGEyfVx1OWYxN1x1OWYxNlx1OWYzOVx1NTY5Zlx1NTY4YVx1OWY0NVx1OTliOFx1ezI5MDhifVx1OTdmMlx1ODQ3Zlx1OWY2Mlx1OWY2OVx1N2FkY1x1OWY4ZVx1NzIxNlx1NGJiZVx1ezI0''@;'; put 'put ''OTc1fVx1ezI0OWJifVx1NzE3N1x1ezI0OWY4fVx1ezI0MzQ4fVx1ezI0YTUxfVx1NzM5ZVx1ezI4YmRhfVx1ezIxOGZhfVx1Nzk5Zlx1ezI4OTdlfVx1ezI4ZTM2fVx1OTM2OVx1OTNmM1x1ezI4YTQ0fVx1OTJlY1x1OTM4MVx1OTNjYlx1ezI4OTZjfVx1ezI0NGI5fVx1NzIxN1x1M2VlYlx1''@;'; put 'put ''Nzc3Mlx1N2E0M1x1NzBkMFx1ezI0NDczfVx1ezI0M2Y4fVx1NzE3ZVx1ezIxN2VmfVx1NzBhM1x1ezIxOGJlfVx1ezIzNTk5fVx1M2VjN1x1ezIxODg1fVx1ezI1NDJmfVx1ezIxN2Y4fVx1MzcyMlx1ezIxNmZifVx1ezIxODM5fVx1MzZlMVx1ezIxNzc0fVx1ezIxOGQxfVx1ezI1ZjRifVx1''@;'; put 'put ''MzcyM1x1ezIxNmMwfVx1NTc1Ylx1ezI0YTI1fVx1ezIxM2ZlfVx1ezIxMmE4fSJdLFsiOTI0MCIsIlx1ezIxM2M2fVx1ezIxNGI2fVx1ODUwM1x1ezIzNmE2fVx1ODUwM1x1ODQ1NVx1ezI0OTk0fVx1ezI3MTY1fVx1ezIzZTMxfVx1ezI1NTVjfVx1ezIzZWZifVx1ezI3MDUyfVx1NDRmNFx1''@;'; put 'put ''ezIzNmVlfVx1ezI5OTlkfVx1ezI2ZjI2fVx1NjdmOVx1MzczM1x1M2MxNVx1M2RlN1x1NTg2Y1x1ezIxOTIyfVx1NjgxMFx1NDA1N1x1ezIzNzNmfVx1ezI0MGUxfVx1ezI0MDhifVx1ezI0MTBmfVx1ezI2YzIxfVx1NTRjYlx1NTY5ZVx1ezI2NmIxfVx1NTY5Mlx1ezIwZmRmfVx1ezIwYmE4''@;'; put 'put ''fVx1ezIwZTBkfVx1OTNjNlx1ezI4YjEzfVx1OTM5Y1x1NGVmOFx1NTEyYlx1MzgxOVx1ezI0NDM2fVx1NGViY1x1ezIwNDY1fVx1ezIwMzdmfVx1NGY0Ylx1NGY4YVx1ezI1NjUxfVx1NWE2OFx1ezIwMWFifVx1ezIwM2NifVx1Mzk5OVx1ezIwMzBhfVx1ezIwNDE0fVx1MzQzNVx1NGYyOVx1''@;'; put 'put ''ezIwMmMwfVx1ezI4ZWIzfVx1ezIwMjc1fVx1OGFkYVx1ezIwMjBjfVx1NGU5OCJdLFsiOTJhMSIsIlx1NTBjZFx1NTEwZFx1NGZhMlx1NGYwM1x1ezI0YTBlfVx1ezIzZThhfVx1NGY0Mlx1NTAyZVx1NTA2Y1x1NTA4MVx1NGZjY1x1NGZlNVx1NTA1OFx1NTBmY1x1NTE1OVx1NTE1Ylx1NTE1''@;'; put 'put ''ZFx1NTE1ZVx1NmU3Nlx1ezIzNTk1fVx1ezIzZTM5fVx1ezIzZWJmfVx1NmQ3Mlx1ezIxODg0fVx1ezIzZTg5fVx1NTFhOFx1NTFjM1x1ezIwNWUwfVx1NDRkZFx1ezIwNGEzfVx1ezIwNDkyfVx1ezIwNDkxfVx1OGQ3YVx1ezI4YTljfVx1ezIwNzBlfVx1NTI1OVx1NTJhNFx1ezIwODczfVx1''@;'; put 'put ''NTJlMVx1OTM2ZVx1NDY3YVx1NzE4Y1x1ezI0MzhjfVx1ezIwYzIwfVx1ezI0OWFjfVx1ezIxMGU0fVx1NjlkMVx1ezIwZTFkfVx1NzQ3OVx1M2VkZVx1NzQ5OVx1NzQxNFx1NzQ1Nlx1NzM5OFx1NGI4ZVx1ezI0YWJjfVx1ezI0MDhkfVx1NTNkMFx1MzU4NFx1NzIwZlx1ezI0MGM5fVx1NTVi''@;'; put 'put ''NFx1ezIwMzQ1fVx1NTRjZFx1ezIwYmM2fVx1NTcxZFx1OTI1ZFx1OTZmNFx1OTM2Nlx1NTdkZFx1NTc4ZFx1NTc3Zlx1MzYzZVx1NThjYlx1NWE5OVx1ezI4YTQ2fVx1ezIxNmZhfVx1ezIxNzZmfVx1ezIxNzEwfVx1NWEyY1x1NTliOFx1OTI4Zlx1NWE3ZVx1NWFjZlx1NWExMlx1ezI1OTQ2''@;'; put 'put ''fVx1ezIxOWYzfVx1ezIxODYxfVx1ezI0Mjk1fVx1MzZmNVx1NmQwNVx1NzQ0M1x1NWEyMVx1ezI1ZTgzfSJdLFsiOTM0MCIsIlx1NWE4MVx1ezI4YmQ3fVx1ezIwNDEzfVx1OTNlMFx1NzQ4Y1x1ezIxMzAzfVx1NzEwNVx1NDk3Mlx1OTQwOFx1ezI4OWZifVx1OTNiZFx1MzdhMFx1NWMxZVx1''@;'; put 'put ''NWM5ZVx1NWU1ZVx1NWU0OFx1ezIxOTk2fVx1ezIxOTdjfVx1ezIzYWVlfVx1NWVjZFx1NWI0Zlx1ezIxOTAzfVx1ezIxOTA0fVx1MzcwMVx1ezIxOGEwfVx1MzZkZFx1ezIxNmZlfVx1MzZkM1x1ODEyYVx1ezI4YTQ3fVx1ezIxZGJhfVx1ezIzNDcyfVx1ezI4OWE4fVx1NWYwY1x1NWYwZVx1''@;'; put 'put ''ezIxOTI3fVx1ezIxN2FifVx1NWE2Ylx1ezIxNzNifVx1NWI0NFx1ODYxNFx1ezI3NWZkfVx1ODg2MFx1NjA3ZVx1ezIyODYwfVx1ezIyNjJifVx1NWZkYlx1M2ViOFx1ezIyNWFmfVx1ezIyNWJlfVx1ezI5MDg4fVx1ezI2ZjczfVx1NjFjMFx1ezIwMDNlfVx1ezIwMDQ2fVx1ezIyNjFifVx1''@;'; put 'put ''NjE5OVx1NjE5OFx1NjA3NVx1ezIyYzlifVx1ezIyZDA3fVx1ezI0NmQ0fVx1ezI5MTRkfSJdLFsiOTNhMSIsIlx1NjQ3MVx1ezI0NjY1fVx1ezIyYjZhfVx1M2EyOVx1ezIyYjIyfVx1ezIzNDUwfVx1ezI5OGVhfVx1ezIyZTc4fVx1NjMzN1x1ezJhNDVifVx1NjRiNlx1NjMzMVx1NjNkMVx1''@;'; put 'put ''ezI0OWUzfVx1ezIyZDY3fVx1NjJhNFx1ezIyY2ExfVx1NjQzYlx1NjU2Ylx1Njk3Mlx1M2JmNFx1ezIzMDhlfVx1ezIzMmFkfVx1ezI0OTg5fVx1ezIzMmFifVx1NTUwZFx1ezIzMmUwfVx1ezIxOGQ5fVx1ezI5NDNmfVx1NjZjZVx1ezIzMjg5fVx1ezIzMWIzfVx1M2FlMFx1NDE5MFx1ezI1''@;'; put 'put ''NTg0fVx1ezI4YjIyfVx1ezI1NThmfVx1ezIxNmZjfVx1ezI1NTVifVx1ezI1NDI1fVx1NzhlZVx1ezIzMTAzfVx1ezIxODJhfVx1ezIzMjM0fVx1MzQ2NFx1ezIzMjBmfVx1ezIzMTgyfVx1ezI0MmM5fVx1NjY4ZVx1ezI2ZDI0fVx1NjY2Ylx1NGI5M1x1NjYzMFx1ezI3ODcwfVx1ezIxZGVi''@;'; put 'put ''fVx1NjY2M1x1ezIzMmQyfVx1ezIzMmUxfVx1NjYxZVx1ezI1ODcyfVx1MzhkMVx1ezIzODNhfVx1ezIzN2JjfVx1M2I5OVx1ezIzN2EyfVx1ezIzM2ZlfVx1NzRkMFx1M2I5Nlx1Njc4Zlx1ezI0NjJhfVx1NjhiNlx1NjgxZVx1M2JjNFx1NmFiZVx1Mzg2M1x1ezIzN2Q1fVx1ezI0NDg3fVx1''@;'; put 'put ''NmEzM1x1NmE1Mlx1NmFjOVx1NmIwNVx1ezIxOTEyfVx1NjUxMVx1Njg5OFx1NmE0Y1x1M2JkN1x1NmE3YVx1NmI1N1x1ezIzZmMwfVx1ezIzYzlhfVx1OTNhMFx1OTJmMlx1ezI4YmVhfVx1ezI4YWNifSJdLFsiOTQ0MCIsIlx1OTI4OVx1ezI4MDFlfVx1ezI4OWRjfVx1OTQ2N1x1NmRhNVx1''@;'; put 'put ''NmYwYlx1ezI0OWVjfVx1NmQ2N1x1ezIzZjdmfVx1M2Q4Zlx1NmUwNFx1ezI0MDNjfVx1NWEzZFx1NmUwYVx1NTg0N1x1NmQyNFx1Nzg0Mlx1NzEzYlx1ezI0MzFhfVx1ezI0Mjc2fVx1NzBmMVx1NzI1MFx1NzI4N1x1NzI5NFx1ezI0NzhmfVx1ezI0NzI1fVx1NTE3OVx1ezI0YWE0fVx1ezIw''@;'; put 'put ''NWVifVx1NzQ3YVx1ezIzZWY4fVx1ezIzNjVmfVx1ezI0YTRhfVx1ezI0OTE3fVx1ezI1ZmUxfVx1M2YwNlx1M2ViMVx1ezI0YWRmfVx1ezI4YzIzfVx1ezIzZjM1fVx1NjBhN1x1M2VmM1x1NzRjY1x1NzQzY1x1OTM4N1x1NzQzN1x1NDQ5Zlx1ezI2ZGVhfVx1NDU1MVx1NzU4M1x1M2Y2M1x1''@;'; put 'put ''ezI0Y2Q5fVx1ezI0ZDA2fVx1M2Y1OFx1NzU1NVx1NzY3M1x1ezJhNWM2fVx1M2IxOVx1NzQ2OFx1ezI4YWNjfVx1ezI0OWFifVx1ezI0OThlfVx1M2FmYiJdLFsiOTRhMSIsIlx1M2RjZFx1ezI0YTRlfVx1M2VmZlx1ezI0OWM1fVx1ezI0OGYzfVx1OTFmYVx1NTczMlx1OTM0Mlx1ezI4YWUz''@;'; put 'put ''fVx1ezIxODY0fVx1NTBkZlx1ezI1MjIxfVx1ezI1MWU3fVx1Nzc3OFx1ezIzMjMyfVx1NzcwZVx1NzcwZlx1Nzc3Ylx1ezI0Njk3fVx1ezIzNzgxfVx1M2E1ZVx1ezI0OGYwfVx1NzQzOFx1NzQ5Ylx1M2ViZlx1ezI0YWJhfVx1ezI0YWM3fVx1NDBjOFx1ezI0YTk2fVx1ezI2MWFlfVx1OTMw''@;'; put 'put ''N1x1ezI1NTgxfVx1NzgxZVx1Nzg4ZFx1Nzg4OFx1NzhkMlx1NzNkMFx1Nzk1OVx1ezI3NzQxfVx1ezI1NmUzfVx1NDEwZVx1Nzk5Ylx1ODQ5Nlx1NzlhNVx1NmEyZFx1ezIzZWZhfVx1N2EzYVx1NzlmNFx1NDE2ZVx1ezIxNmU2fVx1NDEzMlx1OTIzNVx1NzlmMVx1ezIwZDRjfVx1ezI0OThj''@;'; put 'put ''fVx1ezIwMjk5fVx1ezIzZGJhfVx1ezIxNzZlfVx1MzU5N1x1NTU2Ylx1MzU3MFx1MzZhYVx1ezIwMWQ0fVx1ezIwYzBkfVx1N2FlMlx1NWE1OVx1ezIyNmY1fVx1ezI1YWFmfVx1ezI1YTljfVx1NWEwZFx1ezIwMjVifVx1NzhmMFx1NWEyYVx1ezI1YmM2fVx1N2FmZVx1NDFmOVx1N2M1ZFx1''@;'; put 'put ''N2M2ZFx1NDIxMVx1ezI1YmIzfVx1ezI1ZWJjfVx1ezI1ZWE2fVx1N2NjZFx1ezI0OWY5fVx1ezIxN2IwfVx1N2M4ZVx1N2M3Y1x1N2NhZVx1NmFiMlx1N2RkY1x1N2UwN1x1N2RkM1x1N2Y0ZVx1ezI2MjYxfSJdLFsiOTU0MCIsIlx1ezI2MTVjfVx1ezI3YjQ4fVx1N2Q5N1x1ezI1ZTgyfVx1''@;'; put 'put ''NDI2YVx1ezI2Yjc1fVx1ezIwOTE2fVx1NjdkNlx1ezIwMDRlfVx1ezIzNWNmfVx1NTdjNFx1ezI2NDEyfVx1ezI2M2Y4fVx1ezI0OTYyfVx1N2ZkZFx1N2IyN1x1ezIwODJjfVx1ezI1YWU5fVx1ezI1ZDQzfVx1N2IwY1x1ezI1ZTBlfVx1OTllNlx1ODY0NVx1OWE2M1x1NmExY1x1ezIzNDNm''@;'; put 'put ''fVx1MzllMlx1ezI0OWY3fVx1ezI2NWFkfVx1OWExZlx1ezI2NWEwfVx1ODQ4MFx1ezI3MTI3fVx1ezI2Y2QxfVx1NDRlYVx1ODEzN1x1NDQwMlx1ODBjNlx1ODEwOVx1ODE0Mlx1ezI2N2I0fVx1OThjM1x1ezI2YTQyfVx1ODI2Mlx1ODI2NVx1ezI2YTUxfVx1ODQ1M1x1ezI2ZGE3fVx1ODYx''@;'; put 'put ''MFx1ezI3MjFifVx1NWE4Nlx1NDE3Zlx1ezIxODQwfVx1NWIyYlx1ezIxOGExfVx1NWFlNFx1ezIxOGQ4fVx1ODZhMFx1ezJmOWJjfVx1ezIzZDhmfVx1ODgyZFx1ezI3NDIyfVx1NWEwMiJdLFsiOTVhMSIsIlx1ODg2ZVx1NGY0NVx1ODg4N1x1ODhiZlx1ODhlNlx1ODk2NVx1ODk0ZFx1ezI1''@;'; put 'put ''NjgzfVx1ODk1NFx1ezI3Nzg1fVx1ezI3Nzg0fVx1ezI4YmY1fVx1ezI4YmQ5fVx1ezI4YjljfVx1ezI4OWY5fVx1M2VhZFx1ODRhM1x1NDZmNVx1NDZjZlx1MzdmMlx1OGEzZFx1OGExY1x1ezI5NDQ4fVx1NWY0ZFx1OTIyYlx1ezI0Mjg0fVx1NjVkNFx1NzEyOVx1NzBjNFx1ezIxODQ1fVx1''@;'; put 'put ''OWQ2ZFx1OGM5Zlx1OGNlOVx1ezI3ZGRjfVx1NTk5YVx1NzdjM1x1NTlmMFx1NDM2ZVx1MzZkNFx1OGUyYVx1OGVhN1x1ezI0YzA5fVx1OGYzMFx1OGY0YVx1NDJmNFx1NmM1OFx1NmZiYlx1ezIyMzIxfVx1NDg5Ylx1NmY3OVx1NmU4Ylx1ezIxN2RhfVx1OWJlOVx1MzZiNVx1ezI0OTJmfVx1''@;'; put 'put ''OTBiYlx1OTA5N1x1NTU3MVx1NDkwNlx1OTFiYlx1OTQwNFx1ezI4YTRifVx1NDA2Mlx1ezI4YWZjfVx1OTQyN1x1ezI4YzFkfVx1ezI4YzNifVx1ODRlNVx1OGEyYlx1OTU5OVx1OTVhN1x1OTU5N1x1OTU5Nlx1ezI4ZDM0fVx1NzQ0NVx1M2VjMlx1ezI0OGZmfVx1ezI0YTQyfVx1ezI0M2Vh''@;'; put 'put ''fVx1M2VlN1x1ezIzMjI1fVx1OTY4Zlx1ezI4ZWU3fVx1ezI4ZTY2fVx1ezI4ZTY1fVx1M2VjY1x1ezI0OWVkfVx1ezI0YTc4fVx1ezIzZmVlfVx1NzQxMlx1NzQ2Ylx1M2VmY1x1OTc0MVx1ezI5MGIwfSJdLFsiOTY0MCIsIlx1Njg0N1x1NGExZFx1ezI5MDkzfVx1ezI1N2RmfVx1OTc1ZFx1''@;'; put 'put ''OTM2OFx1ezI4OTg5fVx1ezI4YzI2fVx1ezI4YjJmfVx1ezI2M2JlfVx1OTJiYVx1NWIxMVx1OGI2OVx1NDkzY1x1NzNmOVx1ezI0MjFifVx1OTc5Ylx1OTc3MVx1OTkzOFx1ezIwZjI2fVx1NWRjMVx1ezI4YmM1fVx1ezI0YWIyfVx1OTgxZlx1ezI5NGRhfVx1OTJmNlx1ezI5NWQ3fVx1OTFl''@;'; put 'put ''NVx1NDRjMFx1ezI4YjUwfVx1ezI0YTY3fVx1ezI4YjY0fVx1OThkY1x1ezI4YTQ1fVx1M2YwMFx1OTIyYVx1NDkyNVx1ODQxNFx1OTkzYlx1OTk0ZFx1ezI3YjA2fVx1M2RmZFx1OTk5Ylx1NGI2Zlx1OTlhYVx1OWE1Y1x1ezI4YjY1fVx1ezI1OGM4fVx1NmE4Zlx1OWEyMVx1NWFmZVx1OWEy''@;'; put 'put ''Zlx1ezI5OGYxfVx1NGI5MFx1ezI5OTQ4fVx1OTliY1x1NGJiZFx1NGI5N1x1OTM3ZFx1NTg3Mlx1ezIxMzAyfVx1NTgyMlx1ezI0OWI4fSJdLFsiOTZhMSIsIlx1ezIxNGU4fVx1Nzg0NFx1ezIyNzFmfVx1ezIzZGI4fVx1NjhjNVx1M2Q3ZFx1OTQ1OFx1MzkyN1x1NjE1MFx1ezIyNzgxfVx1''@;'; put 'put ''ezIyOTZifVx1NjEwN1x1OWM0Zlx1OWM1M1x1OWM3Ylx1OWMzNVx1OWMxMFx1OWI3Zlx1OWJjZlx1ezI5ZTJkfVx1OWI5Zlx1ezJhMWY1fVx1ezJhMGZlfVx1OWQyMVx1NGNhZVx1ezI0MTA0fVx1OWUxOFx1NGNiMFx1OWQwY1x1ezJhMWI0fVx1ezJhMGVkfVx1ezJhMGYzfVx1ezI5OTJmfVx1''@;'; put 'put ''OWRhNVx1ODRiZFx1ezI2ZTEyfVx1ezI2ZmRmfVx1ezI2YjgyfVx1ODVmY1x1NDUzM1x1ezI2ZGE0fVx1ezI2ZTg0fVx1ezI2ZGYwfVx1ODQyMFx1ODVlZVx1ezI2ZTAwfVx1ezIzN2Q3fVx1ezI2MDY0fVx1NzllMlx1ezIzNTljfVx1ezIzNjQwfVx1NDkyZFx1ezI0OWRlfVx1M2Q2Mlx1OTNk''@;'; put 'put ''Ylx1OTJiZVx1OTM0OFx1ezIwMmJmfVx1NzhiOVx1OTI3N1x1OTQ0ZFx1NGZlNFx1MzQ0MFx1OTA2NFx1ezI1NTVkfVx1NzgzZFx1Nzg1NFx1NzhiNlx1Nzg0Ylx1ezIxNzU3fVx1ezIzMWM5fVx1ezI0OTQxfVx1MzY5YVx1NGY3Mlx1NmZkYVx1NmZkOVx1NzAxZVx1NzAxZVx1NTQxNFx1ezI0''@;'; put 'put ''MWI1fVx1NTdiYlx1NThmM1x1NTc4YVx1OWQxNlx1NTdkN1x1NzEzNFx1MzRhZlx1ezI0MWFjfVx1NzFlYlx1ezI2YzQwfVx1ezI0Zjk3fVx1NWIyOFx1ezIxN2I1fVx1ezI4YTQ5fSJdLFsiOTc0MCIsIlx1NjEwY1x1NWFjZVx1NWEwYlx1NDJiY1x1ezI0NDg4fVx1MzcyY1x1NGI3Ylx1ezI4''@;'; put 'put ''OWZjfVx1OTNiYlx1OTNiOFx1ezIxOGQ2fVx1ezIwZjFkfVx1ODQ3Mlx1ezI2Y2MwfVx1ezIxNDEzfVx1ezI0MmZhfVx1ezIyYzI2fVx1ezI0M2MxfVx1NTk5NFx1ezIzZGI3fVx1ezI2NzQxfVx1N2RhOFx1ezI2MTVifVx1ezI2MGE0fVx1ezI0OWI5fVx1ezI0OThifVx1ezI4OWZhfVx1OTJl''@;'; put 'put ''NVx1NzNlMlx1M2VlOVx1NzRiNFx1ezI4YjYzfVx1ezIxODlmfVx1M2VlMVx1ezI0YWIzfVx1NmFkOFx1NzNmM1x1NzNmYlx1M2VkNlx1ezI0YTNlfVx1ezI0YTk0fVx1ezIxN2Q5fVx1ezI0YTY2fVx1ezIwM2E3fVx1ezIxNDI0fVx1ezI0OWU1fVx1NzQ0OFx1ezI0OTE2fVx1NzBhNVx1ezI0''@;'; put 'put ''OTc2fVx1OTI4NFx1NzNlNlx1OTM1Zlx1ezIwNGZlfVx1OTMzMVx1ezI4YWNlfVx1ezI4YTE2fVx1OTM4Nlx1ezI4YmU3fVx1ezI1NWQ1fVx1NDkzNVx1ezI4YTgyfVx1NzE2YiJdLFsiOTdhMSIsIlx1ezI0OTQzfVx1ezIwY2ZmfVx1NTZhNFx1ezIwNjFhfVx1ezIwYmVifVx1ezIwY2I4fVx1''@;'; put 'put ''NTUwMlx1NzljNFx1ezIxN2ZhfVx1N2RmZVx1ezIxNmMyfVx1ezI0YTUwfVx1ezIxODUyfVx1NDUyZVx1OTQwMVx1MzcwYVx1ezI4YWMwfVx1ezI0OWFkfVx1NTliMFx1ezIxOGJmfVx1ezIxODgzfVx1ezI3NDg0fVx1NWFhMVx1MzZlMlx1ezIzZDVifVx1MzZiMFx1OTI1Zlx1NWE3OVx1ezI4''@;'; put 'put ''YTgxfVx1ezIxODYyfVx1OTM3NFx1M2NjZFx1ezIwYWI0fVx1NGE5Nlx1Mzk4YVx1NTBmNFx1M2Q2OVx1M2Q0Y1x1ezIxMzljfVx1NzE3NVx1NDJmYlx1ezI4MjE4fVx1NmUwZlx1ezI5MGU0fVx1NDRlYlx1NmQ1N1x1ezI3ZTRmfVx1NzA2N1x1NmNhZlx1M2NkNlx1ezIzZmVkfVx1ezIzZTJk''@;'; put 'put ''fVx1NmUwMlx1NmYwY1x1M2Q2Zlx1ezIwM2Y1fVx1NzU1MVx1MzZiY1x1MzRjOFx1NDY4MFx1M2VkYVx1NDg3MVx1NTljNFx1OTI2ZVx1NDkzZVx1OGY0MVx1ezI4YzFjfVx1ezI2YmMwfVx1NTgxMlx1NTdjOFx1MzZkNlx1ezIxNDUyfVx1NzBmZVx1ezI0MzYyfVx1ezI0YTcxfVx1ezIyZmUz''@;'; put 'put ''fVx1ezIxMmIwfVx1ezIyM2JkfVx1NjhiOVx1Njk2N1x1ezIxMzk4fVx1ezIzNGU1fVx1ezI3YmY0fVx1ezIzNmRmfVx1ezI4YTgzfVx1ezIzN2Q2fVx1ezIzM2ZhfVx1ezI0YzlmfVx1NmExYVx1ezIzNmFkfVx1ezI2Y2I3fVx1ODQzZVx1NDRkZlx1NDRjZSJdLFsiOTg0MCIsIlx1ezI2ZDI2''@;'; put 'put ''fVx1ezI2ZDUxfVx1ezI2YzgyfVx1ezI2ZmRlfVx1NmYxN1x1ezI3MTA5fVx1ODMzZFx1ezIxNzNhfVx1ODNlZFx1ezI2YzgwfVx1ezI3MDUzfVx1ezIxN2RifVx1NTk4OVx1NWE4Mlx1ezIxN2IzfVx1NWE2MVx1NWE3MVx1ezIxOTA1fVx1ezI0MWZjfVx1MzcyZFx1NTllZlx1ezIxNzNjfVx1''@;'; put 'put ''MzZjN1x1NzE4ZVx1OTM5MFx1NjY5YVx1ezI0MmE1fVx1NWE2ZVx1NWEyYlx1ezI0MjkzfVx1NmEyYlx1ezIzZWY5fVx1ezI3NzM2fVx1ezI0NDVifVx1ezI0MmNhfVx1NzExZFx1ezI0MjU5fVx1ezI4OWUxfVx1NGZiMFx1ezI2ZDI4fVx1NWNjMlx1ezI0NGNlfVx1ezI3ZTRkfVx1ezI0M2Jk''@;'; put 'put ''fVx1NmEwY1x1ezI0MjU2fVx1ezIxMzA0fVx1NzBhNlx1NzEzM1x1ezI0M2U5fVx1M2RhNVx1NmNkZlx1ezJmODI1fVx1ezI0YTRmfVx1N2U2NVx1NTllYlx1NWQyZlx1M2RmM1x1NWY1Y1x1ezI0YTVkfVx1ezIxN2RmfVx1N2RhNFx1ODQyNiJdLFsiOThhMSIsIlx1NTQ4NVx1ezIzYWZhfVx1''@;'; put 'put ''ezIzMzAwfVx1ezIwMjE0fVx1NTc3ZVx1ezIwOGQ1fVx1ezIwNjE5fVx1M2ZlNVx1ezIxZjllfVx1ezJhMmI2fVx1NzAwM1x1ezI5MTVifVx1NWQ3MFx1NzM4Zlx1N2NkM1x1ezI4YTU5fVx1ezI5NDIwfVx1NGZjOFx1N2ZlN1x1NzJjZFx1NzMxMFx1ezI3YWY0fVx1NzMzOFx1NzMzOVx1ezI1''@;'; put 'put ''NmY2fVx1NzM0MVx1NzM0OFx1M2VhOVx1ezI3YjE4fVx1OTA2Y1x1NzFmNVx1ezI0OGYyfVx1NzNlMVx1ODFmNlx1M2VjYVx1NzcwY1x1M2VkMVx1NmNhMlx1NTZmZFx1NzQxOVx1NzQxZVx1NzQxZlx1M2VlMlx1M2VmMFx1M2VmNFx1M2VmYVx1NzRkM1x1M2YwZVx1M2Y1M1x1NzU0Mlx1NzU2''@;'; put 'put ''ZFx1NzU3Mlx1NzU4ZFx1M2Y3Y1x1NzVjOFx1NzVkY1x1M2ZjMFx1NzY0ZFx1M2ZkN1x1NzY3NFx1M2ZkY1x1NzY3YVx1ezI0ZjVjfVx1NzE4OFx1NTYyM1x1ODk4MFx1NTg2OVx1NDAxZFx1Nzc0M1x1NDAzOVx1Njc2MVx1NDA0NVx1MzVkYlx1Nzc5OFx1NDA2YVx1NDA2Zlx1NWM1ZVx1Nzdi''@;'; put 'put ''ZVx1NzdjYlx1NThmMlx1NzgxOFx1NzBiOVx1NzgxY1x1NDBhOFx1NzgzOVx1Nzg0N1x1Nzg1MVx1Nzg2Nlx1ODQ0OFx1ezI1NTM1fVx1NzkzM1x1NjgwM1x1NzkzMlx1NDEwMyJdLFsiOTk0MCIsIlx1NDEwOVx1Nzk5MVx1Nzk5OVx1OGZiYlx1N2EwNlx1OGZiY1x1NDE2N1x1N2E5MVx1NDFi''@;'; put 'put ''Mlx1N2FiY1x1ODI3OVx1NDFjNFx1N2FjZlx1N2FkYlx1NDFjZlx1NGUyMVx1N2I2Mlx1N2I2Y1x1N2I3Ylx1N2MxMlx1N2MxYlx1NDI2MFx1NDI3YVx1N2M3Ylx1N2M5Y1x1NDI4Y1x1N2NiOFx1NDI5NFx1N2NlZFx1OGY5M1x1NzBjMFx1ezIwY2NmfVx1N2RjZlx1N2RkNFx1N2RkMFx1N2Rm''@;'; put 'put ''ZFx1N2ZhZVx1N2ZiNFx1NzI5Zlx1NDM5N1x1ODAyMFx1ODAyNVx1N2IzOVx1ODAyZVx1ODAzMVx1ODA1NFx1M2RjY1x1NTdiNFx1NzBhMFx1ODBiN1x1ODBlOVx1NDNlZFx1ODEwY1x1NzMyYVx1ODEwZVx1ODExMlx1NzU2MFx1ODExNFx1NDQwMVx1M2IzOVx1ODE1Nlx1ODE1OVx1ODE1YSJd''@;'; put 'put ''LFsiOTlhMSIsIlx1NDQxM1x1NTgzYVx1ODE3Y1x1ODE4NFx1NDQyNVx1ODE5M1x1NDQyZFx1ODFhNVx1NTdlZlx1ODFjMVx1ODFlNFx1ODI1NFx1NDQ4Zlx1ODJhNlx1ODI3Nlx1ODJjYVx1ODJkOFx1ODJmZlx1NDRiMFx1ODM1N1x1OTY2OVx1Njk4YVx1ODQwNVx1NzBmNVx1ODQ2NFx1NjBl''@;'; put 'put ''M1x1ODQ4OFx1NDUwNFx1ODRiZVx1ODRlMVx1ODRmOFx1ODUxMFx1ODUzOFx1ODU1Mlx1NDUzYlx1ODU2Zlx1ODU3MFx1ODVlMFx1NDU3N1x1ODY3Mlx1ODY5Mlx1ODZiMlx1ODZlZlx1OTY0NVx1ODc4Ylx1NDYwNlx1NDYxN1x1ODhhZVx1ODhmZlx1ODkyNFx1ODk0N1x1ODk5MVx1ezI3OTY3''@;'; put 'put ''fVx1OGEyOVx1OGEzOFx1OGE5NFx1OGFiNFx1OGM1MVx1OGNkNFx1OGNmMlx1OGQxY1x1NDc5OFx1NTg1Zlx1OGRjM1x1NDdlZFx1NGVlZVx1OGUzYVx1NTVkOFx1NTc1NFx1OGU3MVx1NTVmNVx1OGViMFx1NDgzN1x1OGVjZVx1OGVlMlx1OGVlNFx1OGVlZFx1OGVmMlx1OGZiN1x1OGZjMVx1''@;'; put 'put ''OGZjYVx1OGZjY1x1OTAzM1x1OTljNFx1NDhhZFx1OThlMFx1OTIxM1x1NDkxZVx1OTIyOFx1OTI1OFx1OTI2Ylx1OTJiMVx1OTJhZVx1OTJiZiJdLFsiOWE0MCIsIlx1OTJlM1x1OTJlYlx1OTJmM1x1OTJmNFx1OTJmZFx1OTM0M1x1OTM4NFx1OTNhZFx1NDk0NVx1NDk1MVx1OWViZlx1OTQx''@;'; put 'put ''N1x1NTMwMVx1OTQxZFx1OTQyZFx1OTQzZVx1NDk2YVx1OTQ1NFx1OTQ3OVx1OTUyZFx1OTVhMlx1NDlhN1x1OTVmNFx1OTYzM1x1NDllNVx1NjdhMFx1NGEyNFx1OTc0MFx1NGEzNVx1OTdiMlx1OTdjMlx1NTY1NFx1NGFlNFx1NjBlOFx1OThiOVx1NGIxOVx1OThmMVx1NTg0NFx1OTkwZVx1''@;'; put 'put ''OTkxOVx1NTFiNFx1OTkxY1x1OTkzN1x1OTk0Mlx1OTk1ZFx1OTk2Mlx1NGI3MFx1OTljNVx1NGI5ZFx1OWEzY1x1OWIwZlx1N2E4M1x1OWI2OVx1OWI4MVx1OWJkZFx1OWJmMVx1OWJmNFx1NGM2ZFx1OWMyMFx1Mzc2Zlx1ezIxYmMyfVx1OWQ0OVx1OWMzYSJdLFsiOWFhMSIsIlx1OWVmZVx1''@;'; put 'put ''NTY1MFx1OWQ5M1x1OWRiZFx1OWRjMFx1OWRmY1x1OTRmNlx1OGZiNlx1OWU3Ylx1OWVhY1x1OWViMVx1OWViZFx1OWVjNlx1OTRkY1x1OWVlMlx1OWVmMVx1OWVmOFx1N2FjOFx1OWY0NFx1ezIwMDk0fVx1ezIwMmI3fVx1ezIwM2EwfVx1NjkxYVx1OTRjM1x1NTlhY1x1ezIwNGQ3fVx1NTg0''@;'; put 'put ''MFx1OTRjMVx1MzdiOVx1ezIwNWQ1fVx1ezIwNjE1fVx1ezIwNjc2fVx1ezIxNmJhfVx1NTc1N1x1NzE3M1x1ezIwYWMyfVx1ezIwYWNkfVx1ezIwYmJmfVx1NTQ2YVx1ezJmODNifVx1ezIwYmNifVx1NTQ5ZVx1ezIwYmZifVx1ezIwYzNifVx1ezIwYzUzfVx1ezIwYzY1fVx1ezIwYzdjfVx1''@;'; put 'put ''NjBlN1x1ezIwYzhkfVx1NTY3YVx1ezIwY2I1fVx1ezIwY2RkfVx1ezIwY2VkfVx1ezIwZDZmfVx1ezIwZGIyfVx1ezIwZGM4fVx1Njk1NVx1OWMyZlx1ODdhNVx1ezIwZTA0fVx1ezIwZTBlfVx1ezIwZWQ3fVx1ezIwZjkwfVx1ezIwZjJkfVx1ezIwZTczfVx1NWMyMFx1ezIwZmJjfVx1NWUw''@;'; put 'put ''Ylx1ezIxMDVjfVx1ezIxMDRmfVx1ezIxMDc2fVx1NjcxZVx1ezIxMDdifVx1ezIxMDg4fVx1ezIxMDk2fVx1MzY0N1x1ezIxMGJmfVx1ezIxMGQzfVx1ezIxMTJmfVx1ezIxMTNifVx1NTM2NFx1ODRhZFx1ezIxMmUzfVx1ezIxMzc1fVx1ezIxMzM2fVx1OGI4MVx1ezIxNTc3fVx1ezIxNjE5''@;'; put 'put ''fVx1ezIxN2MzfVx1ezIxN2M3fVx1NGU3OFx1NzBiYlx1ezIxODJkfVx1ezIxOTZhfSJdLFsiOWI0MCIsIlx1ezIxYTJkfVx1ezIxYTQ1fVx1ezIxYzJhfVx1ezIxYzcwfVx1ezIxY2FjfVx1ezIxZWM4fVx1NjJjM1x1ezIxZWQ1fVx1ezIxZjE1fVx1NzE5OFx1Njg1NVx1ezIyMDQ1fVx1Njll''@;'; put 'put ''OVx1MzZjOFx1ezIyMjdjfVx1ezIyM2Q3fVx1ezIyM2ZhfVx1ezIyNzJhfVx1ezIyODcxfVx1ezIyOTRmfVx1ODJmZFx1ezIyOTY3fVx1ezIyOTkzfVx1ezIyYWQ1fVx1ODlhNVx1ezIyYWU4fVx1OGZhMFx1ezIyYjBlfVx1OTdiOFx1ezIyYjNmfVx1OTg0N1x1OWFiZFx1ezIyYzRjfSJdLFsi''@;'; put 'put ''OWI2MiIsIlx1ezIyYzg4fVx1ezIyY2I3fVx1ezI1YmU4fVx1ezIyZDA4fVx1ezIyZDEyfVx1ezIyZGI3fVx1ezIyZDk1fVx1ezIyZTQyfVx1ezIyZjc0fVx1ezIyZmNjfVx1ezIzMDMzfVx1ezIzMDY2fVx1ezIzMzFmfVx1ezIzM2RlfVx1NWZiMVx1NjY0OFx1NjZiZlx1ezI3YTc5fVx1ezIz''@;'; put 'put ''NTY3fVx1ezIzNWYzfVx1NzIwMVx1ezI0OWJhfVx1NzdkN1x1ezIzNjFhfVx1ezIzNzE2fVx1N2U4N1x1ezIwMzQ2fVx1NThiNVx1NjcwZSJdLFsiOWJhMSIsIlx1NjkxOFx1ezIzYWE3fVx1ezI3NjU3fVx1ezI1ZmUyfVx1ezIzZTExfVx1ezIzZWI5fVx1ezI3NWZlfVx1ezIyMDlhfVx1NDhk''@;'; put 'put ''MFx1NGFiOFx1ezI0MTE5fVx1ezI4YTlhfVx1ezI0MmVlfVx1ezI0MzBkfVx1ezI0MDNifVx1ezI0MzM0fVx1ezI0Mzk2fVx1ezI0YTQ1fVx1ezIwNWNhfVx1NTFkMlx1ezIwNjExfVx1NTk5Zlx1ezIxZWE4fVx1M2JiZVx1ezIzY2ZmfVx1ezI0NDA0fVx1ezI0NGQ2fVx1NTc4OFx1ezI0Njc0''@;'; put 'put ''fVx1Mzk5Ylx1ezI0NzJmfVx1ezI4NWU4fVx1ezI5OWM5fVx1Mzc2Mlx1ezIyMWMzfVx1OGI1ZVx1ezI4YjRlfVx1OTlkNlx1ezI0ODEyfVx1ezI0OGZifVx1ezI0YTE1fVx1NzIwOVx1ezI0YWMwfVx1ezIwYzc4fVx1NTk2NVx1ezI0ZWE1fVx1ezI0Zjg2fVx1ezIwNzc5fVx1OGVkYVx1ezI1''@;'; put 'put ''MDJjfVx1NTI4Zlx1NTczZlx1NzE3MVx1ezI1Mjk5fVx1ezI1NDE5fVx1ezIzZjRhfVx1ezI0YWE3fVx1NTViY1x1ezI1NDQ2fVx1ezI1NDZlfVx1ezI2YjUyfVx1OTFkNFx1MzQ3M1x1ezI1NTNmfVx1ezI3NjMyfVx1ezI1NTVlfVx1NDcxOFx1ezI1NTYyfVx1ezI1NTY2fVx1ezI1N2M3fVx1''@;'; put 'put ''ezI0OTNmfVx1ezI1ODVkfVx1NTA2Nlx1MzRmYlx1ezIzM2NjfVx1NjBkZVx1ezI1OTAzfVx1NDc3Y1x1ezI4OTQ4fVx1ezI1YWFlfVx1ezI1Yjg5fVx1ezI1YzA2fVx1ezIxZDkwfVx1NTdhMVx1NzE1MVx1NmZiNlx1ezI2MTAyfVx1ezI3YzEyfVx1OTA1Nlx1ezI2MWIyfVx1ezI0ZjlhfVx1''@;'; put 'put ''OGI2Mlx1ezI2NDAyfVx1ezI2NDRhfSJdLFsiOWM0MCIsIlx1NWQ1Ylx1ezI2YmY3fVx1OGYzNlx1ezI2NDg0fVx1ezIxOTFjfVx1OGFlYVx1ezI0OWY2fVx1ezI2NDg4fVx1ezIzZmVmfVx1ezI2NTEyfVx1NGJjMFx1ezI2NWJmfVx1ezI2NmI1fVx1ezIyNzFifVx1OTQ2NVx1ezI1N2UxfVx1''@;'; put 'put ''NjE5NVx1NWEyN1x1ezJmOGNkfVx1NGZiYlx1NTZiOVx1ezI0NTIxfVx1ezI2NmZjfVx1NGU2YVx1ezI0OTM0fVx1OTY1Nlx1NmQ4Zlx1ezI2Y2JkfVx1MzYxOFx1ODk3N1x1ezI2Nzk5fVx1ezI2ODZlfVx1ezI2NDExfVx1ezI2ODVlfVx1NzFkZlx1ezI2OGM3fVx1N2I0Mlx1ezI5MGMwfVx1''@;'; put 'put ''ezIwYTExfVx1ezI2OTI2fVx1OTEwNFx1ezI2OTM5fVx1N2E0NVx1OWRmMFx1ezI2OWZhfVx1OWEyNlx1ezI2YTJkfVx1MzY1Zlx1ezI2NDY5fVx1ezIwMDIxfVx1Nzk4M1x1ezI2YTM0fVx1ezI2YjVifVx1NWQyY1x1ezIzNTE5fVx1ODNjZlx1ezI2YjlkfVx1NDZkMFx1ezI2Y2E0fVx1NzUz''@;'; put 'put ''Ylx1ODg2NVx1ezI2ZGFlfVx1NThiNiJdLFsiOWNhMSIsIlx1MzcxY1x1ezIyNThkfVx1ezI3MDRifVx1ezI3MWNkfVx1M2M1NFx1ezI3MjgwfVx1ezI3Mjg1fVx1OTI4MVx1ezIyMTdhfVx1ezI3MjhifVx1OTMzMFx1ezI3MmU2fVx1ezI0OWQwfVx1NmMzOVx1OTQ5Zlx1ezI3NDUwfVx1ezIw''@;'; put 'put ''ZWY4fVx1ODgyN1x1ODhmNVx1ezIyOTI2fVx1ezI4NDczfVx1ezIxN2IxfVx1NmViOFx1ezI0YTJhfVx1ezIxODIwfVx1MzlhNFx1MzZiOVx1NWMxMFx1NzllM1x1NDUzZlx1NjZiNlx1ezI5Y2FkfVx1ezI5OGE0fVx1ODk0M1x1ezI3N2NjfVx1ezI3ODU4fVx1NTZkNlx1NDBkZlx1ezIxNjBh''@;'; put 'put ''fVx1MzlhMVx1ezIzNzJmfVx1ezI4MGU4fVx1ezIxM2M1fVx1NzFhZFx1ODM2Nlx1ezI3OWRkfVx1ezI5MWE4fVx1NWE2N1x1NGNiN1x1ezI3MGFmfVx1ezI4OWFifVx1ezI3OWZkfVx1ezI3YTBhfVx1ezI3YjBifVx1ezI3ZDY2fVx1ezI0MTdhfVx1N2I0M1x1Nzk3ZVx1ezI4MDA5fVx1NmZi''@;'; put 'put ''NVx1ezJhMmRmfVx1NmEwM1x1ezI4MzE4fVx1NTNhMlx1ezI2ZTA3fVx1OTNiZlx1NjgzNlx1OTc1ZFx1ezI4MTZmfVx1ezI4MDIzfVx1ezI2OWI1fVx1ezIxM2VkfVx1ezIzMjJmfVx1ezI4MDQ4fVx1NWQ4NVx1ezI4YzMwfVx1ezI4MDgzfVx1NTcxNVx1OTgyM1x1ezI4OTQ5fVx1NWRhYlx1''@;'; put 'put ''ezI0OTg4fVx1NjViZVx1NjlkNVx1NTNkMlx1ezI0YWE1fVx1ezIzZjgxfVx1M2MxMVx1NjczNlx1ezI4MDkwfVx1ezI4MGY0fVx1ezI4MTJlfVx1ezIxZmExfVx1ezI4MTRmfSJdLFsiOWQ0MCIsIlx1ezI4MTg5fVx1ezI4MWFmfVx1ezI4MjFhfVx1ezI4MzA2fVx1ezI4MzJmfVx1ezI4Mzhh''@;'; put 'put ''fVx1MzVjYVx1ezI4NDY4fVx1ezI4NmFhfVx1NDhmYVx1NjNlNlx1ezI4OTU2fVx1NzgwOFx1OTI1NVx1ezI4OWI4fVx1NDNmMlx1ezI4OWU3fVx1NDNkZlx1ezI4OWU4fVx1ezI4YjQ2fVx1ezI4YmQ0fVx1NTlmOFx1ezI4YzA5fVx1OGYwYlx1ezI4ZmM1fVx1ezI5MGVjfVx1N2I1MVx1ezI5''@;'; put 'put ''MTEwfVx1ezI5MTNjfVx1M2RmN1x1ezI5MTVlfVx1ezI0YWNhfVx1OGZkMFx1NzI4Zlx1NTY4Ylx1ezI5NGU3fVx1ezI5NWU5fVx1ezI5NWIwfVx1ezI5NWI4fVx1ezI5NzMyfVx1ezI5OGQxfVx1ezI5OTQ5fVx1ezI5OTZhfVx1ezI5OWMzfVx1ezI5YTI4fVx1ezI5YjBlfVx1ezI5ZDVhfVx1''@;'; put 'put ''ezI5ZDlifVx1N2U5Zlx1ezI5ZWY4fVx1ezI5ZjIzfVx1NGNhNFx1OTU0N1x1ezJhMjkzfVx1NzFhMlx1ezJhMmZmfVx1NGQ5MVx1OTAxMlx1ezJhNWNifVx1NGQ5Y1x1ezIwYzljfVx1OGZiZVx1NTVjMSJdLFsiOWRhMSIsIlx1OGZiYVx1ezIyNGIwfVx1OGZiOVx1ezI0YTkzfVx1NDUwOVx1''@;'; put 'put ''N2U3Zlx1NmY1Nlx1NmFiMVx1NGVlYVx1MzRlNFx1ezI4YjJjfVx1ezI3ODlkfVx1MzczYVx1OGU4MFx1ezIxN2Y1fVx1ezI4MDI0fVx1ezI4YjZjfVx1ezI4Yjk5fVx1ezI3YTNlfVx1ezI2NmFmfVx1M2RlYlx1ezI3NjU1fVx1ezIzY2I3fVx1ezI1NjM1fVx1ezI1OTU2fVx1NGU5YVx1ezI1''@;'; put 'put ''ZTgxfVx1ezI2MjU4fVx1NTZiZlx1ezIwZTZkfVx1OGUwZVx1NWI2ZFx1ezIzZTg4fVx1ezI0YzllfVx1NjNkZVx1NjJkMFx1ezIxN2Y2fVx1ezIxODdifVx1NjUzMFx1NTYyZFx1ezI1YzRhfVx1NTQxYVx1ezI1MzExfVx1M2RjNlx1ezI5ZDk4fVx1NGM3ZFx1NTYyMlx1NTYxZVx1N2Y0OVx1''@;'; put 'put ''ezI1ZWQ4fVx1NTk3NVx1ezIzZDQwfVx1ODc3MFx1NGUxY1x1ezIwZmVhfVx1ezIwZDQ5fVx1ezIzNmJhfVx1ODExN1x1OWQ1ZVx1OGQxOFx1NzYzYlx1OWM0NVx1NzY0ZVx1NzdiOVx1OTM0NVx1NTQzMlx1ODE0OFx1ODJmN1x1NTYyNVx1ODEzMlx1ODQxOFx1ODBiZFx1NTVlYVx1Nzk2Mlx1''@;'; put 'put ''NTY0M1x1NTQxNlx1ezIwZTlkfVx1MzVjZVx1NTYwNVx1NTVmMVx1NjZmMVx1ezI4MmUyfVx1MzYyZFx1NzUzNFx1NTVmMFx1NTViYVx1NTQ5N1x1NTU3Mlx1ezIwYzQxfVx1ezIwYzk2fVx1NWVkMFx1ezI1MTQ4fVx1ezIwZTc2fVx1ezIyYzYyfSJdLFsiOWU0MCIsIlx1ezIwZWEyfVx1OWVh''@;'; put 'put ''Ylx1N2Q1YVx1NTVkZVx1ezIxMDc1fVx1NjI5ZFx1OTc2ZFx1NTQ5NFx1OGNjZFx1NzFmNlx1OTE3Nlx1NjNmY1x1NjNiOVx1NjNmZVx1NTU2OVx1ezIyYjQzfVx1OWM3Mlx1ezIyZWIzfVx1NTE5YVx1MzRkZlx1ezIwZGE3fVx1NTFhN1x1NTQ0ZFx1NTUxZVx1NTUxM1x1NzY2Nlx1OGUyZFx1''@;'; put 'put ''ezI2ODhhfVx1NzViMVx1ODBiNlx1ODgwNFx1ODc4Nlx1ODhjN1x1ODFiNlx1ODQxY1x1ezIxMGMxfVx1NDRlY1x1NzMwNFx1ezI0NzA2fVx1NWI5MFx1ODMwYlx1ezI2ODkzfVx1NTY3Ylx1ezIyNmY0fVx1ezI3ZDJmfVx1ezI0MWEzfVx1ezI3ZDczfVx1ezI2ZWQwfVx1ezI3MmI2fVx1OTE3''@;'; put 'put ''MFx1ezIxMWQ5fVx1OTIwOFx1ezIzY2ZjfVx1ezJhNmE5fVx1ezIwZWFjfVx1ezIwZWY5fVx1NzI2Nlx1ezIxY2EyfVx1NDc0ZVx1ezI0ZmMyfVx1ezI3ZmY5fVx1ezIwZmVifVx1NDBmYSJdLFsiOWVhMSIsIlx1OWM1ZFx1NjUxZlx1ezIyZGEwfVx1NDhmM1x1ezI0N2UwfVx1ezI5ZDdjfVx1''@;'; put 'put ''ezIwZmVjfVx1ezIwZTBhfVx1NjA2Mlx1ezI3NWEzfVx1ezIwZmVkfSJdLFsiOWVhZCIsIlx1ezI2MDQ4fVx1ezIxMTg3fVx1NzFhM1x1N2U4ZVx1OWQ1MFx1NGUxYVx1NGUwNFx1MzU3N1x1NWIwZFx1NmNiMlx1NTM2N1x1MzZhY1x1MzlkY1x1NTM3ZFx1MzZhNVx1ezI0NjE4fVx1NTg5YVx1''@;'; put 'put ''ezI0YjZlfVx1ODIyZFx1NTQ0Ylx1NTdhYVx1ezI1YTk1fVx1ezIwOTc5fSJdLFsiOWVjNSIsIlx1M2E1Mlx1ezIyNDY1fVx1NzM3NFx1ezI5ZWFjfVx1NGQwOVx1OWJlZFx1ezIzY2ZlfVx1ezI5ZjMwfVx1NGM1Ylx1ezI0ZmE5fVx1ezI5NTllfVx1ezI5ZmRlfVx1ODQ1Y1x1ezIzZGI2fVx1''@;'; put 'put ''ezI3MmIyfVx1ezI2N2IzfVx1ezIzNzIwfVx1NjMyZVx1N2QyNVx1ezIzZWY3fVx1ezIzZTJjfVx1M2EyYVx1OTAwOFx1NTJjY1x1M2U3NFx1MzY3YVx1NDVlOVx1ezIwNDhlfVx1NzY0MFx1NWFmMFx1ezIwZWI2fVx1Nzg3YVx1ezI3ZjJlfVx1NThhN1x1NDBiZlx1NTY3Y1x1OWI4Ylx1NWQ3''@;'; put 'put ''NFx1NzY1NFx1ezJhNDM0fVx1OWU4NVx1NGNlMVx1NzVmOVx1MzdmYlx1NjExOVx1ezIzMGRhfVx1ezI0M2YyfSJdLFsiOWVmNSIsIlx1NTY1ZFx1ezIxMmE5fVx1NTdhN1x1ezI0OTYzfVx1ezI5ZTA2fVx1NTIzNFx1ezI3MGFlfVx1MzVhZFx1NmM0YVx1OWQ3YyJdLFsiOWY0MCIsIlx1N2M1''@;'; put 'put ''Nlx1OWIzOVx1NTdkZVx1ezIxNzZjfVx1NWM1M1x1NjRkM1x1ezI5NGQwfVx1ezI2MzM1fVx1ezI3MTY0fVx1ODZhZFx1ezIwZDI4fVx1ezI2ZDIyfVx1ezI0YWUyfVx1ezIwZDcxfSJdLFsiOWY0ZiIsIlx1NTFmZVx1ezIxZjBmfVx1NWQ4ZVx1OTcwM1x1ezIxZGQxfVx1OWU4MVx1OTA0Y1x1''@;'; put 'put ''N2IxZlx1OWIwMlx1NWNkMVx1N2JhM1x1NjI2OFx1NjMzNVx1OWFmZlx1N2JjZlx1OWIyYVx1N2M3ZVx1OWIyZVx1N2M0Mlx1N2M4Nlx1OWMxNVx1N2JmY1x1OWIwOVx1OWYxN1x1OWMxYlx1ezI0OTNlfVx1OWY1YVx1NTU3M1x1NWJjM1x1NGZmZFx1OWU5OFx1NGZmMlx1NTI2MFx1M2UwNlx1''@;'; put 'put ''NTJkMVx1NTc2N1x1NTA1Nlx1NTliN1x1NWUxMlx1OTdjOFx1OWRhYlx1OGY1Y1x1NTQ2OVx1OTdiNFx1OTk0MFx1OTdiYVx1NTMyY1x1NjEzMCJdLFsiOWZhMSIsIlx1NjkyY1x1NTNkYVx1OWMwYVx1OWQwMlx1NGMzYlx1OTY0MVx1Njk4MFx1NTBhNlx1NzU0Nlx1ezIxNzZkfVx1OTlkYVx1''@;'; put 'put ''NTI3MyJdLFsiOWZhZSIsIlx1OTE1OVx1OTY4MVx1OTE1YyJdLFsiOWZiMiIsIlx1OTE1MVx1ezI4ZTk3fVx1NjM3Zlx1ezI2ZDIzfVx1NmFjYVx1NTYxMVx1OTE4ZVx1NzU3YVx1NjI4NVx1ezIwM2ZjfVx1NzM0Zlx1N2M3MFx1ezI1YzIxfVx1ezIzY2ZkfSJdLFsiOWZjMSIsIlx1ezI0OTE5''@;'; put 'put ''fVx1NzZkNlx1OWI5ZFx1NGUyYVx1ezIwY2Q0fVx1ODNiZVx1ODg0MiJdLFsiOWZjOSIsIlx1NWM0YVx1NjljMFx1NTBlZFx1NTc3YVx1NTIxZlx1NWRmNVx1NGVjZVx1NmMzMVx1ezIwMWYyfVx1NGYzOVx1NTQ5Y1x1NTRkYVx1NTI5YVx1OGQ4Mlx1MzVmZVx1NWYwY1x1MzVmMyJdLFsiOWZk''@;'; put 'put ''YiIsIlx1NmI1Mlx1OTE3Y1x1OWZhNVx1OWI5N1x1OTgyZVx1OThiNFx1OWFiYVx1OWVhOFx1OWU4NFx1NzE3YVx1N2IxNCJdLFsiOWZlNyIsIlx1NmJmYVx1ODgxOFx1N2Y3OCJdLFsiOWZlYiIsIlx1NTYyMFx1ezJhNjRhfVx1OGU3N1x1OWY1MyJdLFsiOWZmMCIsIlx1OGRkNFx1OGU0Zlx1''@;'; put 'put ''OWUxY1x1OGUwMVx1NjI4Mlx1ezI4MzdkfVx1OGUyOFx1OGU3NVx1N2FkM1x1ezI0YTc3fVx1N2EzZVx1NzhkOFx1NmNlYVx1OGE2N1x1NzYwNyJdLFsiYTA0MCIsIlx1ezI4YTVhfVx1OWYyNlx1NmNjZVx1ODdkNlx1NzVjM1x1ezJhMmIyfVx1Nzg1M1x1ezJmODQwfVx1OGQwY1x1NzJlMlx1''@;'; put 'put ''NzM3MVx1OGIyZFx1NzMwMlx1NzRmMVx1OGNlYlx1ezI0YWJifVx1ODYyZlx1NWZiYVx1ODhhMFx1NDRiNyJdLFsiYTA1NSIsIlx1ezIxODNifVx1ezI2ZTA1fSJdLFsiYTA1OCIsIlx1OGE3ZVx1ezIyNTFifSJdLFsiYTA1YiIsIlx1NjBmZFx1NzY2N1x1OWFkN1x1OWQ0NFx1OTM2ZVx1OWI4''@;'; put 'put ''Zlx1ODdmNSJdLFsiYTA2MyIsIlx1ODgwZlx1OGNmN1x1NzMyY1x1OTcyMVx1OWJiMFx1MzVkNlx1NzJiMlx1NGMwN1x1N2M1MVx1OTk0YVx1ezI2MTU5fVx1NjE1OVx1NGMwNFx1OWU5Nlx1NjE3ZCJdLFsiYTA3MyIsIlx1NTc1Zlx1NjE2Zlx1NjJhNlx1NjIzOVx1NjJjZVx1M2E1Y1x1NjFl''@;'; put 'put ''Mlx1NTNhYVx1ezIzM2Y1fVx1NjM2NFx1NjgwMlx1MzVkMiJdLFsiYTBhMSIsIlx1NWQ1N1x1ezI4YmMyfVx1OGZkYVx1ezI4ZTM5fSJdLFsiYTBhNiIsIlx1NTBkOVx1ezIxZDQ2fVx1NzkwNlx1NTMzMlx1OTYzOFx1ezIwZjNifVx1NDA2NSJdLFsiYTBhZSIsIlx1NzdmZSJdLFsiYTBiMCIs''@;'; put 'put ''Ilx1N2NjMlx1ezI1ZjFhfVx1N2NkYVx1N2EyZFx1ODA2Nlx1ODA2M1x1N2Q0ZFx1NzUwNVx1NzRmMlx1ODk5NFx1ODIxYVx1NjcwY1x1ODA2Mlx1ezI3NDg2fVx1ODA1Ylx1NzRmMFx1ODEwM1x1NzcyNFx1ODk4OVx1ezI2N2NjfVx1NzU1M1x1ezI2ZWQxfVx1ODdhOVx1ODdjZVx1ODFjOFx1''@;'; put 'put ''ODc4Y1x1OGE0OVx1OGNhZFx1OGI0M1x1NzcyYlx1NzRmOFx1ODRkYVx1MzYzNVx1NjliMlx1OGRhNiJdLFsiYTBkNCIsIlx1ODlhOVx1NzQ2OFx1NmRiOVx1ODdjMVx1ezI0MDExfVx1NzRlN1x1M2RkYlx1NzE3Nlx1NjBhNFx1NjE5Y1x1M2NkMVx1NzE2Mlx1NjA3NyJdLFsiYTBlMiIsIlx1''@;'; put 'put ''N2Y3MVx1ezI4YjJkfVx1NzI1MFx1NjBlOVx1NGI3ZVx1NTIyMFx1M2MxOFx1ezIzY2M3fVx1ezI1ZWQ3fVx1ezI3NjU2fVx1ezI1NTMxfVx1ezIxOTQ0fVx1ezIxMmZlfVx1ezI5OTAzfVx1ezI2ZGRjfVx1ezI3MGFkfVx1NWNjMVx1ezI2MWFkfVx1ezI4YTBmfVx1ezIzNjc3fVx1ezIwMGVl''@;'; put 'put ''fVx1ezI2ODQ2fVx1ezI0ZjBlfVx1NDU2Mlx1NWIxZlx1ezI2MzRjfVx1OWY1MFx1OWVhNlx1ezI2MjZifSJdLFsiYTNjMCIsIlx1MjQwMCIsMzEsIlx1MjQyMSJdLFsiYzZhMSIsIlx1MjQ2MCIsOSwiXHUyNDc0Iiw5LCJcdTIxNzAiLDksIlx1NGUzNlx1NGUzZlx1NGU4NVx1NGVhMFx1NTE4''@;'; put 'put ''Mlx1NTE5Nlx1NTFhYlx1NTJmOVx1NTMzOFx1NTM2OVx1NTNiNlx1NTkwYVx1NWI4MFx1NWRkYlx1MmYzM1x1NWU3Zlx1NWVmNFx1NWY1MFx1NWY2MVx1NjUzNFx1NjVlMFx1NzU5Mlx1NzY3Nlx1OGZiNVx1OTZiNlx4YThcdTAyYzZcdTMwZmRcdTMwZmVcdTMwOWRcdTMwOWVcdTMwMDNcdTRl''@;'; put 'put ''ZGRcdTMwMDVcdTMwMDZcdTMwMDdcdTMwZmNcdWZmM2JcdWZmM2RcdTI3M2RcdTMwNDEiLDIzXSxbImM3NDAiLCJcdTMwNTkiLDU4LCJcdTMwYTFcdTMwYTJcdTMwYTNcdTMwYTQiXSxbImM3YTEiLCJcdTMwYTUiLDgxLCJcdTA0MTAiLDUsIlx1MDQwMVx1MDQxNiIsNF0sWyJjODQwIiwiXHUw''@;'; put 'put ''NDFiIiwyNiwiXHUwNDUxXHUwNDM2IiwyNSwiXHUyMWU3XHUyMWI4XHUyMWI5XHUzMWNmXHV7MjAwY2N9XHU0ZTVhXHV7MjAwOGF9XHU1MjAyXHU0NDkxIl0sWyJjOGExIiwiXHU5ZmIwXHU1MTg4XHU5ZmIxXHV7Mjc2MDd9Il0sWyJjOGNkIiwiXHVmZmUyXHVmZmU0XHVmZjA3XHVmZjAyXHUz''@;'; put 'put ''MjMxXHUyMTE2XHUyMTIxXHUzMDliXHUzMDljXHUyZTgwXHUyZTg0XHUyZTg2XHUyZTg3XHUyZTg4XHUyZThhXHUyZThjXHUyZThkXHUyZTk1XHUyZTljXHUyZTlkXHUyZWE1XHUyZWE3XHUyZWFhXHUyZWFjXHUyZWFlXHUyZWI2XHUyZWJjXHUyZWJlXHUyZWM2XHUyZWNhXHUyZWNjXHUyZWNk''@;'; put 'put ''XHUyZWNmXHUyZWQ2XHUyZWQ3XHUyZWRlXHUyZWUzIl0sWyJjOGY1IiwiXHUwMjgzXHUwMjUwXHUwMjViXHUwMjU0XHUwMjc1XHUwMTUzXHhmOFx1MDE0Ylx1MDI4YVx1MDI2YSJdLFsiZjlmZSIsIlx1ZmZlZCJdLFsiZmE0MCIsIlx1ezIwNTQ3fVx1OTJkYlx1ezIwNWRmfVx1ezIzZmM1fVx1''@;'; put 'put ''ODU0Y1x1NDJiNVx1NzNlZlx1NTFiNVx1MzY0OVx1ezI0OTQyfVx1ezI4OWU0fVx1OTM0NFx1ezIxOWRifVx1ODJlZVx1ezIzY2M4fVx1NzgzY1x1Njc0NFx1NjJkZlx1ezI0OTMzfVx1ezI4OWFhfVx1ezIwMmEwfVx1ezI2YmIzfVx1ezIxMzA1fVx1NGZhYlx1ezIyNGVkfVx1NTAwOFx1ezI2''@;'; put 'put ''ZDI5fVx1ezI3YTg0fVx1ezIzNjAwfVx1ezI0YWIxfVx1ezIyNTEzfVx1NTAyOVx1ezIwMzdlfVx1NWZhNFx1ezIwMzgwfVx1ezIwMzQ3fVx1NmVkYlx1ezIwNDFmfVx1NTA3ZFx1NTEwMVx1MzQ3YVx1NTEwZVx1OTg2Y1x1Mzc0M1x1ODQxNlx1ezI0OWE0fVx1ezIwNDg3fVx1NTE2MFx1ezIz''@;'; put 'put ''M2I0fVx1NTE2YVx1ezIwYmZmfVx1ezIyMGZjfVx1ezIwMmU1fVx1ezIyNTMwfVx1ezIwNThlfVx1ezIzMjMzfVx1ezIxOTgzfVx1NWI4Mlx1ODc3ZFx1ezIwNWIzfVx1ezIzYzk5fVx1NTFiMlx1NTFiOCJdLFsiZmFhMSIsIlx1OWQzNFx1NTFjOVx1NTFjZlx1NTFkMVx1M2NkY1x1NTFkM1x1''@;'; put 'put ''ezI0YWE2fVx1NTFiM1x1NTFlMlx1NTM0Mlx1NTFlZFx1ODNjZFx1NjkzZVx1ezIzNzJkfVx1NWY3Ylx1NTIwYlx1NTIyNlx1NTIzY1x1NTJiNVx1NTI1N1x1NTI5NFx1NTJiOVx1NTJjNVx1N2MxNVx1ODU0Mlx1NTJlMFx1ODYwZFx1ezI2YjEzfVx1NTMwNVx1ezI4YWRlfVx1NTU0OVx1NmVk''@;'; put 'put ''OVx1ezIzZjgwfVx1ezIwOTU0fVx1ezIzZmVjfVx1NTMzM1x1NTM0NFx1ezIwYmUyfVx1NmNjYlx1ezIxNzI2fVx1NjgxYlx1NzNkNVx1NjA0YVx1M2VhYVx1MzhjY1x1ezIxNmU4fVx1NzFkZFx1NDRhMlx1NTM2ZFx1NTM3NFx1ezI4NmFifVx1NTM3ZVx1NTM3Zlx1ezIxNTk2fVx1ezIxNjEz''@;'; put 'put ''fVx1NzdlNlx1NTM5M1x1ezI4YTlifVx1NTNhMFx1NTNhYlx1NTNhZVx1NzNhN1x1ezI1NzcyfVx1M2Y1OVx1NzM5Y1x1NTNjMVx1NTNjNVx1NmM0OVx1NGU0OVx1NTdmZVx1NTNkOVx1M2FhYlx1ezIwYjhmfVx1NTNlMFx1ezIzZmVifVx1ezIyZGEzfVx1NTNmNlx1ezIwYzc3fVx1NTQxM1x1''@;'; put 'put ''NzA3OVx1NTUyYlx1NjY1N1x1NmQ1Ylx1NTQ2ZFx1ezI2YjUzfVx1ezIwZDc0fVx1NTU1ZFx1NTQ4Zlx1NTRhNFx1NDdhNlx1ezIxNzBkfVx1ezIwZWRkfVx1M2RiNFx1ezIwZDRkfSJdLFsiZmI0MCIsIlx1ezI4OWJjfVx1ezIyNjk4fVx1NTU0N1x1NGNlZFx1NTQyZlx1NzQxN1x1NTU4Nlx1''@;'; put 'put ''NTVhOVx1NTYwNVx1ezIxOGQ3fVx1ezI0MDNhfVx1NDU1Mlx1ezI0NDM1fVx1NjZiM1x1ezIxMGI0fVx1NTYzN1x1NjZjZFx1ezIzMjhhfVx1NjZhNFx1NjZhZFx1NTY0ZFx1NTY0Zlx1NzhmMVx1NTZmMVx1OTc4N1x1NTNmZVx1NTcwMFx1NTZlZlx1NTZlZFx1ezI4YjY2fVx1MzYyM1x1ezIx''@;'; put 'put ''MjRmfVx1NTc0Nlx1ezI0MWE1fVx1NmM2ZVx1NzA4Ylx1NTc0Mlx1MzZiMVx1ezI2YzdlfVx1NTdlNlx1ezIxNDE2fVx1NTgwM1x1ezIxNDU0fVx1ezI0MzYzfVx1NTgyNlx1ezI0YmY1fVx1NTg1Y1x1NThhYVx1MzU2MVx1NThlMFx1NThkY1x1ezIxMjNjfVx1NThmYlx1NWJmZlx1NTc0M1x1''@;'; put 'put ''ezJhMTUwfVx1ezI0Mjc4fVx1OTNkM1x1MzVhMVx1NTkxZlx1NjhhNlx1MzZjM1x1NmU1OSJdLFsiZmJhMSIsIlx1ezIxNjNlfVx1NWEyNFx1NTU1M1x1ezIxNjkyfVx1ODUwNVx1NTljOVx1ezIwZDRlfVx1ezI2YzgxfVx1ezI2ZDJhfVx1ezIxN2RjfVx1NTlkOVx1ezIxN2ZifVx1ezIxN2Iy''@;'; put 'put ''fVx1ezI2ZGE2fVx1NmQ3MVx1ezIxODI4fVx1ezIxNmQ1fVx1NTlmOVx1ezI2ZTQ1fVx1NWFhYlx1NWE2M1x1MzZlNlx1ezI0OWE5fVx1NWE3N1x1MzcwOFx1NWE5Nlx1NzQ2NVx1NWFkM1x1ezI2ZmExfVx1ezIyNTU0fVx1M2Q4NVx1ezIxOTExfVx1MzczMlx1ezIxNmI4fVx1NWU4M1x1NTJk''@;'; put 'put ''MFx1NWI3Nlx1NjU4OFx1NWI3Y1x1ezI3YTBlfVx1NDAwNFx1NDg1ZFx1ezIwMjA0fVx1NWJkNVx1NjE2MFx1ezIxYTM0fVx1ezI1OWNjfVx1ezIwNWE1fVx1NWJmM1x1NWI5ZFx1NGQxMFx1NWMwNVx1ezIxYjQ0fVx1NWMxM1x1NzNjZVx1NWMxNFx1ezIxY2E1fVx1ezI2YjI4fVx1NWM0OVx1''@;'; put 'put ''NDhkZFx1NWM4NVx1NWNlOVx1NWNlZlx1NWQ4Ylx1ezIxZGY5fVx1ezIxZTM3fVx1NWQxMFx1NWQxOFx1NWQ0Nlx1ezIxZWE0fVx1NWNiYVx1NWRkN1x1ODJmY1x1MzgyZFx1ezI0OTAxfVx1ezIyMDQ5fVx1ezIyMTczfVx1ODI4N1x1MzgzNlx1M2JjMlx1NWUyZVx1NmE4YVx1NWU3NVx1NWU3''@;'; put 'put ''YVx1ezI0NGJjfVx1ezIwY2QzfVx1NTNhNlx1NGViN1x1NWVkMFx1NTNhOFx1ezIxNzcxfVx1NWUwOVx1NWVmNFx1ezI4NDgyfSJdLFsiZmM0MCIsIlx1NWVmOVx1NWVmYlx1MzhhMFx1NWVmY1x1NjgzZVx1OTQxYlx1NWYwZFx1ezIwMWMxfVx1ezJmODk0fVx1M2FkZVx1NDhhZVx1ezIxMzNh''@;'; put 'put ''fVx1NWYzYVx1ezI2ODg4fVx1ezIyM2QwfVx1NWY1OFx1ezIyNDcxfVx1NWY2M1x1OTdiZFx1ezI2ZTZlfVx1NWY3Mlx1OTM0MFx1ezI4YTM2fVx1NWZhN1x1NWRiNlx1M2Q1Zlx1ezI1MjUwfVx1ezIxZjZhfVx1ezI3MGY4fVx1ezIyNjY4fVx1OTFkNlx1ezIwMjllfVx1ezI4YTI5fVx1NjAz''@;'; put 'put ''MVx1NjY4NVx1ezIxODc3fVx1Mzk2M1x1M2RjN1x1MzYzOVx1NTc5MFx1ezIyN2I0fVx1Nzk3MVx1M2U0MFx1NjA5ZVx1NjBhNFx1NjBiM1x1ezI0OTgyfVx1ezI0OThmfVx1ezI3YTUzfVx1NzRhNFx1NTBlMVx1NWFhMFx1NjE2NFx1ODQyNFx1NjE0Mlx1ezJmOGE2fVx1ezI2ZWQyfVx1NjE4''@;'; put 'put ''MVx1NTFmNFx1ezIwNjU2fVx1NjE4N1x1NWJhYVx1ezIzZmI3fSJdLFsiZmNhMSIsIlx1ezIyODVmfVx1NjFkM1x1ezI4YjlkfVx1ezI5OTVkfVx1NjFkMFx1MzkzMlx1ezIyOTgwfVx1ezIyOGMxfVx1NjAyM1x1NjE1Y1x1NjUxZVx1NjM4Ylx1ezIwMTE4fVx1NjJjNVx1ezIxNzcwfVx1NjJk''@;'; put 'put ''NVx1ezIyZTBkfVx1NjM2Y1x1ezI0OWRmfVx1M2ExN1x1NjQzOFx1NjNmOFx1ezIxMzhlfVx1ezIxN2ZjfVx1NjQ5MFx1NmY4YVx1ezIyZTM2fVx1OTgxNFx1ezI0MDhjfVx1ezI1NzFkfVx1NjRlMVx1NjRlNVx1OTQ3Ylx1M2E2Nlx1NjQzYVx1M2E1N1x1NjU0ZFx1NmYxNlx1ezI0YTI4fVx1''@;'; put 'put ''ezI0YTIzfVx1NjU4NVx1NjU2ZFx1NjU1Zlx1ezIzMDdlfVx1NjViNVx1ezI0OTQwfVx1NGIzN1x1NjVkMVx1NDBkOFx1ezIxODI5fVx1NjVlMFx1NjVlM1x1NWZkZlx1ezIzNDAwfVx1NjYxOFx1ezIzMWY3fVx1ezIzMWY4fVx1NjY0NFx1ezIzMWE0fVx1ezIzMWE1fVx1NjY0Ylx1ezIwZTc1''@;'; put 'put ''fVx1NjY2N1x1ezI1MWU2fVx1NjY3M1x1NjY3NFx1ezIxZTNkfVx1ezIzMjMxfVx1ezI4NWY0fVx1ezIzMWM4fVx1ezI1MzEzfVx1NzdjNVx1ezIyOGY3fVx1OTlhNFx1NjcwMlx1ezI0MzljfVx1ezI0YTIxfVx1M2IyYlx1NjlmYVx1ezIzN2MyfVx1Njc1ZVx1Njc2N1x1Njc2Mlx1ezI0MWNk''@;'; put 'put ''fVx1ezI5MGVkfVx1NjdkN1x1NDRlOVx1NjgyMlx1NmU1MFx1OTIzY1x1NjgwMVx1ezIzM2U2fVx1ezI2ZGEwfVx1Njg1ZCJdLFsiZmQ0MCIsIlx1ezIzNDZmfVx1NjllMVx1NmEwYlx1ezI4YWRmfVx1Njk3M1x1NjhjM1x1ezIzNWNkfVx1NjkwMVx1NjkwMFx1M2QzMlx1M2EwMVx1ezIzNjNj''@;'; put 'put ''fVx1M2I4MFx1NjdhY1x1Njk2MVx1ezI4YTRhfVx1NDJmY1x1NjkzNlx1Njk5OFx1M2JhMVx1ezIwM2M5fVx1ODM2M1x1NTA5MFx1NjlmOVx1ezIzNjU5fVx1ezIyMTJhfVx1NmE0NVx1ezIzNzAzfVx1NmE5ZFx1M2JmM1x1NjdiMVx1NmFjOFx1ezI5MTljfVx1M2MwZFx1NmIxZFx1ezIwOTIz''@;'; put 'put ''fVx1NjBkZVx1NmIzNVx1NmI3NFx1ezIyN2NkfVx1NmViNVx1ezIzYWRifVx1ezIwM2I1fVx1ezIxOTU4fVx1Mzc0MFx1NTQyMVx1ezIzYjVhfVx1NmJlMVx1ezIzZWZjfVx1NmJkY1x1NmMzN1x1ezIyNDhifVx1ezI0OGYxfVx1ezI2YjUxfVx1NmM1YVx1ODIyNlx1NmM3OVx1ezIzZGJjfVx1''@;'; put 'put ''NDRjNVx1ezIzZGJkfVx1ezI0MWE0fVx1ezI0OTBjfVx1ezI0OTAwfSJdLFsiZmRhMSIsIlx1ezIzY2M5fVx1MzZlNVx1M2NlYlx1ezIwZDMyfVx1OWI4M1x1ezIzMWY5fVx1ezIyNDkxfVx1N2Y4Zlx1NjgzN1x1ezI2ZDI1fVx1ezI2ZGExfVx1ezI2ZGVifVx1NmQ5Nlx1NmQ1Y1x1NmU3Y1x1''@;'; put 'put ''NmYwNFx1ezI0OTdmfVx1ezI0MDg1fVx1ezI2ZTcyfVx1ODUzM1x1ezI2Zjc0fVx1NTFjN1x1NmM5Y1x1NmUxZFx1ODQyZVx1ezI4YjIxfVx1NmUyZlx1ezIzZTJmfVx1NzQ1M1x1ezIzZjgyfVx1NzljY1x1NmU0Zlx1NWE5MVx1ezIzMDRifVx1NmZmOFx1MzcwZFx1NmY5ZFx1ezIzZTMwfVx1''@;'; put 'put ''NmVmYVx1ezIxNDk3fVx1ezI0MDNkfVx1NDU1NVx1OTNmMFx1NmY0NFx1NmY1Y1x1M2Q0ZVx1NmY3NFx1ezI5MTcwfVx1M2QzYlx1NmY5Zlx1ezI0MTQ0fVx1NmZkM1x1ezI0MDkxfVx1ezI0MTU1fVx1ezI0MDM5fVx1ezIzZmYwfVx1ezIzZmI0fVx1ezI0MTNmfVx1NTFkZlx1ezI0MTU2fVx1''@;'; put 'put ''ezI0MTU3fVx1ezI0MTQwfVx1ezI2MWRkfVx1NzA0Ylx1NzA3ZVx1NzBhN1x1NzA4MVx1NzBjY1x1NzBkNVx1NzBkNlx1NzBkZlx1NDEwNFx1M2RlOFx1NzFiNFx1NzE5Nlx1ezI0Mjc3fVx1NzEyYlx1NzE0NVx1NWE4OFx1NzE0YVx1NzE2ZVx1NWM5Y1x1ezI0MzY1fVx1NzE0Zlx1OTM2Mlx1''@;'; put 'put ''ezI0MmMxfVx1NzEyY1x1ezI0NDVhfVx1ezI0YTI3fVx1ezI0YTIyfVx1NzFiYVx1ezI4YmU4fVx1NzBiZFx1NzIwZSJdLFsiZmU0MCIsIlx1OTQ0Mlx1NzIxNVx1NTkxMVx1OTQ0M1x1NzIyNFx1OTM0MVx1ezI1NjA1fVx1NzIyZVx1NzI0MFx1ezI0OTc0fVx1NjhiZFx1NzI1NVx1NzI1N1x1''@;'; put 'put ''M2U1NVx1ezIzMDQ0fVx1NjgwZFx1NmYzZFx1NzI4Mlx1NzMyYVx1NzMyYlx1ezI0ODIzfVx1ezI4ODJifVx1NDhlZFx1ezI4ODA0fVx1NzMyOFx1NzMyZVx1NzNjZlx1NzNhYVx1ezIwYzNhfVx1ezI2YTJlfVx1NzNjOVx1NzQ0OVx1ezI0MWUyfVx1ezIxNmU3fVx1ezI0YTI0fVx1NjYyM1x1''@;'; put 'put ''MzZjNVx1ezI0OWI3fVx1ezI0OThkfVx1ezI0OWZifVx1NzNmN1x1NzQxNVx1NjkwM1x1ezI0YTI2fVx1NzQzOVx1ezIwNWMzfVx1M2VkN1x1NzQ1Y1x1ezIyOGFkfVx1NzQ2MFx1ezI4ZWIyfVx1NzQ0N1x1NzNlNFx1NzQ3Nlx1ODNiOVx1NzQ2Y1x1MzczMFx1NzQ3NFx1OTNmMVx1NmEyY1x1''@;'; put 'put ''NzQ4Mlx1NDk1M1x1ezI0YThjfSJdLFsiZmVhMSIsIlx1ezI0MTVmfVx1ezI0YTc5fVx1ezI4YjhmfVx1NWI0Nlx1ezI4YzAzfVx1ezIxODllfVx1NzRjOFx1ezIxOTg4fVx1NzUwZVx1NzRlOVx1NzUxZVx1ezI4ZWQ5fVx1ezIxYTRifVx1NWJkN1x1ezI4ZWFjfVx1OTM4NVx1NzU0ZFx1NzU0''@;'; put 'put ''YVx1NzU2N1x1NzU2ZVx1ezI0ZjgyfVx1M2YwNFx1ezI0ZDEzfVx1NzU4ZVx1NzQ1ZFx1NzU5ZVx1NzViNFx1NzYwMlx1NzYyY1x1NzY1MVx1NzY0Zlx1NzY2Zlx1NzY3Nlx1ezI2M2Y1fVx1NzY5MFx1ODFlZlx1MzdmOFx1ezI2OTExfVx1ezI2OTBlfVx1NzZhMVx1NzZhNVx1NzZiN1x1NzZj''@;'; put 'put ''Y1x1ezI2ZjlmfVx1ODQ2Mlx1ezI1MDlkfVx1ezI1MTdkfVx1ezIxZTFjfVx1NzcxZVx1NzcyNlx1Nzc0MFx1NjRhZlx1ezI1MjIwfVx1Nzc1OFx1ezIzMmFjfVx1NzdhZlx1ezI4OTY0fVx1ezI4OTY4fVx1ezIxNmMxfVx1NzdmNFx1NzgwOVx1ezIxMzc2fVx1ezI0YTEyfVx1NjhjYVx1Nzhh''@;'; put 'put ''Zlx1NzhjN1x1NzhkM1x1OTZhNVx1NzkyZVx1ezI1NWUwfVx1NzhkN1x1NzkzNFx1NzhiMVx1ezI3NjBjfVx1OGZiOFx1ODg4NFx1ezI4YjJifVx1ezI2MDgzfVx1ezIyNjFjfVx1Nzk4Nlx1ODkwMFx1NjkwMlx1Nzk4MFx1ezI1ODU3fVx1Nzk5ZFx1ezI3YjM5fVx1NzkzY1x1NzlhOVx1NmUy''@;'; put 'put ''YVx1ezI3MTI2fVx1M2VhOFx1NzljNlx1ezI5MTBkfVx1NzlkNCJdXScpfSw3NDQ4ODp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPUpTT04ucGFyc2UoJ1tbIjAiLCJcXHUwMDAwIiwxMjcsIlx1MjBhYyJdLFsiODE0MCIsIlx1NGUwMlx1NGUwNFx1NGUwNVx1NGUwNlx1NGUwZlx1NGUx''@;'; put 'put ''Mlx1NGUxN1x1NGUxZlx1NGUyMFx1NGUyMVx1NGUyM1x1NGUyNlx1NGUyOVx1NGUyZVx1NGUyZlx1NGUzMVx1NGUzM1x1NGUzNVx1NGUzN1x1NGUzY1x1NGU0MFx1NGU0MVx1NGU0Mlx1NGU0NFx1NGU0Nlx1NGU0YVx1NGU1MVx1NGU1NVx1NGU1N1x1NGU1YVx1NGU1Ylx1NGU2Mlx1NGU2M1x1''@;'; put 'put ''NGU2NFx1NGU2NVx1NGU2N1x1NGU2OFx1NGU2YSIsNSwiXHU0ZTcyXHU0ZTc0Iiw5LCJcdTRlN2YiLDYsIlx1NGU4N1x1NGU4YSJdLFsiODE4MCIsIlx1NGU5MFx1NGU5Nlx1NGU5N1x1NGU5OVx1NGU5Y1x1NGU5ZFx1NGU5ZVx1NGVhM1x1NGVhYVx1NGVhZlx1NGViMFx1NGViMVx1NGViNFx1''@;'; put 'put ''NGViNlx1NGViN1x1NGViOFx1NGViOVx1NGViY1x1NGViZFx1NGViZVx1NGVjOFx1NGVjY1x1NGVjZlx1NGVkMFx1NGVkMlx1NGVkYVx1NGVkYlx1NGVkY1x1NGVlMFx1NGVlMlx1NGVlNlx1NGVlN1x1NGVlOVx1NGVlZFx1NGVlZVx1NGVlZlx1NGVmMVx1NGVmNFx1NGVmOFx1NGVmOVx1NGVm''@;'; put 'put ''YVx1NGVmY1x1NGVmZVx1NGYwMFx1NGYwMiIsNiwiXHU0ZjBiXHU0ZjBjXHU0ZjEyIiw0LCJcdTRmMWNcdTRmMWRcdTRmMjFcdTRmMjNcdTRmMjhcdTRmMjlcdTRmMmNcdTRmMmRcdTRmMmVcdTRmMzFcdTRmMzNcdTRmMzVcdTRmMzdcdTRmMzlcdTRmM2JcdTRmM2UiLDQsIlx1NGY0NFx1NGY0''@;'; put 'put ''NVx1NGY0NyIsNSwiXHU0ZjUyXHU0ZjU0XHU0ZjU2XHU0ZjYxXHU0ZjYyXHU0ZjY2XHU0ZjY4XHU0ZjZhXHU0ZjZiXHU0ZjZkXHU0ZjZlXHU0ZjcxXHU0ZjcyXHU0Zjc1XHU0Zjc3XHU0Zjc4XHU0Zjc5XHU0ZjdhXHU0ZjdkXHU0ZjgwXHU0ZjgxXHU0ZjgyXHU0Zjg1XHU0Zjg2XHU0Zjg3XHU0''@;'; put 'put ''ZjhhXHU0ZjhjXHU0ZjhlXHU0ZjkwXHU0ZjkyXHU0ZjkzXHU0Zjk1XHU0Zjk2XHU0Zjk4XHU0Zjk5XHU0ZjlhXHU0ZjljXHU0ZjllXHU0ZjlmXHU0ZmExXHU0ZmEyIl0sWyI4MjQwIiwiXHU0ZmE0XHU0ZmFiXHU0ZmFkXHU0ZmIwIiw0LCJcdTRmYjYiLDgsIlx1NGZjMFx1NGZjMVx1NGZjMlx1''@;'; put 'put ''NGZjNlx1NGZjN1x1NGZjOFx1NGZjOVx1NGZjYlx1NGZjY1x1NGZjZFx1NGZkMiIsNCwiXHU0ZmQ5XHU0ZmRiXHU0ZmUwXHU0ZmUyXHU0ZmU0XHU0ZmU1XHU0ZmU3XHU0ZmViXHU0ZmVjXHU0ZmYwXHU0ZmYyXHU0ZmY0XHU0ZmY1XHU0ZmY2XHU0ZmY3XHU0ZmY5XHU0ZmZiXHU0ZmZjXHU0ZmZk''@;'; put 'put ''XHU0ZmZmIiwxMV0sWyI4MjgwIiwiXHU1MDBiXHU1MDBlXHU1MDEwXHU1MDExXHU1MDEzXHU1MDE1XHU1MDE2XHU1MDE3XHU1MDFiXHU1MDFkXHU1MDFlXHU1MDIwXHU1MDIyXHU1MDIzXHU1MDI0XHU1MDI3XHU1MDJiXHU1MDJmIiwxMCwiXHU1MDNiXHU1MDNkXHU1MDNmXHU1MDQwXHU1MDQx''@;'; put 'put ''XHU1MDQyXHU1MDQ0XHU1MDQ1XHU1MDQ2XHU1MDQ5XHU1MDRhXHU1MDRiXHU1MDRkXHU1MDUwIiw0LCJcdTUwNTZcdTUwNTdcdTUwNThcdTUwNTlcdTUwNWJcdTUwNWQiLDcsIlx1NTA2NiIsNSwiXHU1MDZkIiw4LCJcdTUwNzhcdTUwNzlcdTUwN2FcdTUwN2NcdTUwN2RcdTUwODFcdTUwODJc''@;'; put 'put ''dTUwODNcdTUwODRcdTUwODZcdTUwODdcdTUwODlcdTUwOGFcdTUwOGJcdTUwOGNcdTUwOGUiLDIwLCJcdTUwYTRcdTUwYTZcdTUwYWFcdTUwYWJcdTUwYWQiLDQsIlx1NTBiMyIsNiwiXHU1MGJjIl0sWyI4MzQwIiwiXHU1MGJkIiwxNywiXHU1MGQwIiw1LCJcdTUwZDdcdTUwZDhcdTUwZDlc''@;'; put 'put ''dTUwZGIiLDEwLCJcdTUwZThcdTUwZTlcdTUwZWFcdTUwZWJcdTUwZWZcdTUwZjBcdTUwZjFcdTUwZjJcdTUwZjRcdTUwZjYiLDQsIlx1NTBmYyIsOSwiXHU1MTA4Il0sWyI4MzgwIiwiXHU1MTA5XHU1MTBhXHU1MTBjIiw1LCJcdTUxMTMiLDEzLCJcdTUxMjIiLDI4LCJcdTUxNDJcdTUxNDdc''@;'; put 'put ''dTUxNGFcdTUxNGNcdTUxNGVcdTUxNGZcdTUxNTBcdTUxNTJcdTUxNTNcdTUxNTdcdTUxNThcdTUxNTlcdTUxNWJcdTUxNWQiLDQsIlx1NTE2M1x1NTE2NFx1NTE2Nlx1NTE2N1x1NTE2OVx1NTE2YVx1NTE2Zlx1NTE3Mlx1NTE3YVx1NTE3ZVx1NTE3Zlx1NTE4M1x1NTE4NFx1NTE4Nlx1NTE4''@;'; put 'put ''N1x1NTE4YVx1NTE4Ylx1NTE4ZVx1NTE4Zlx1NTE5MFx1NTE5MVx1NTE5M1x1NTE5NFx1NTE5OFx1NTE5YVx1NTE5ZFx1NTE5ZVx1NTE5Zlx1NTFhMVx1NTFhM1x1NTFhNiIsNCwiXHU1MWFkXHU1MWFlXHU1MWI0XHU1MWI4XHU1MWI5XHU1MWJhXHU1MWJlXHU1MWJmXHU1MWMxXHU1MWMyXHU1''@;'; put 'put ''MWMzXHU1MWM1XHU1MWM4XHU1MWNhXHU1MWNkXHU1MWNlXHU1MWQwXHU1MWQyIiw1XSxbIjg0NDAiLCJcdTUxZDhcdTUxZDlcdTUxZGFcdTUxZGNcdTUxZGVcdTUxZGZcdTUxZTJcdTUxZTNcdTUxZTUiLDUsIlx1NTFlY1x1NTFlZVx1NTFmMVx1NTFmMlx1NTFmNFx1NTFmN1x1NTFmZVx1NTIw''@;'; put 'put ''NFx1NTIwNVx1NTIwOVx1NTIwYlx1NTIwY1x1NTIwZlx1NTIxMFx1NTIxM1x1NTIxNFx1NTIxNVx1NTIxY1x1NTIxZVx1NTIxZlx1NTIyMVx1NTIyMlx1NTIyM1x1NTIyNVx1NTIyNlx1NTIyN1x1NTIyYVx1NTIyY1x1NTIyZlx1NTIzMVx1NTIzMlx1NTIzNFx1NTIzNVx1NTIzY1x1NTIzZVx1''@;'; put 'put ''NTI0NCIsNSwiXHU1MjRiXHU1MjRlXHU1MjRmXHU1MjUyXHU1MjUzXHU1MjU1XHU1MjU3XHU1MjU4Il0sWyI4NDgwIiwiXHU1MjU5XHU1MjVhXHU1MjViXHU1MjVkXHU1MjVmXHU1MjYwXHU1MjYyXHU1MjYzXHU1MjY0XHU1MjY2XHU1MjY4XHU1MjZiXHU1MjZjXHU1MjZkXHU1MjZlXHU1Mjcw''@;'; put 'put ''XHU1MjcxXHU1MjczIiw5LCJcdTUyN2VcdTUyODBcdTUyODMiLDQsIlx1NTI4OSIsNiwiXHU1MjkxXHU1MjkyXHU1Mjk0Iiw2LCJcdTUyOWNcdTUyYTRcdTUyYTVcdTUyYTZcdTUyYTdcdTUyYWVcdTUyYWZcdTUyYjBcdTUyYjQiLDksIlx1NTJjMFx1NTJjMVx1NTJjMlx1NTJjNFx1NTJjNVx1''@;'; put 'put ''NTJjNlx1NTJjOFx1NTJjYVx1NTJjY1x1NTJjZFx1NTJjZVx1NTJjZlx1NTJkMVx1NTJkM1x1NTJkNFx1NTJkNVx1NTJkN1x1NTJkOSIsNSwiXHU1MmUwXHU1MmUxXHU1MmUyXHU1MmUzXHU1MmU1IiwxMCwiXHU1MmYxIiw3LCJcdTUyZmJcdTUyZmNcdTUyZmRcdTUzMDFcdTUzMDJcdTUzMDNc''@;'; put 'put ''dTUzMDRcdTUzMDdcdTUzMDlcdTUzMGFcdTUzMGJcdTUzMGNcdTUzMGUiXSxbIjg1NDAiLCJcdTUzMTFcdTUzMTJcdTUzMTNcdTUzMTRcdTUzMThcdTUzMWJcdTUzMWNcdTUzMWVcdTUzMWZcdTUzMjJcdTUzMjRcdTUzMjVcdTUzMjdcdTUzMjhcdTUzMjlcdTUzMmJcdTUzMmNcdTUzMmRcdTUz''@;'; put 'put ''MmYiLDksIlx1NTMzY1x1NTMzZFx1NTM0MFx1NTM0Mlx1NTM0NFx1NTM0Nlx1NTM0Ylx1NTM0Y1x1NTM0ZFx1NTM1MFx1NTM1NFx1NTM1OFx1NTM1OVx1NTM1Ylx1NTM1ZFx1NTM2NVx1NTM2OFx1NTM2YVx1NTM2Y1x1NTM2ZFx1NTM3Mlx1NTM3Nlx1NTM3OVx1NTM3Ylx1NTM3Y1x1NTM3ZFx1''@;'; put 'put ''NTM3ZVx1NTM4MFx1NTM4MVx1NTM4M1x1NTM4N1x1NTM4OFx1NTM4YVx1NTM4ZVx1NTM4ZiJdLFsiODU4MCIsIlx1NTM5MCIsNCwiXHU1Mzk2XHU1Mzk3XHU1Mzk5XHU1MzliXHU1MzljXHU1MzllXHU1M2EwXHU1M2ExXHU1M2E0XHU1M2E3XHU1M2FhXHU1M2FiXHU1M2FjXHU1M2FkXHU1M2Fm''@;'; put 'put ''Iiw2LCJcdTUzYjdcdTUzYjhcdTUzYjlcdTUzYmFcdTUzYmNcdTUzYmRcdTUzYmVcdTUzYzBcdTUzYzMiLDQsIlx1NTNjZVx1NTNjZlx1NTNkMFx1NTNkMlx1NTNkM1x1NTNkNVx1NTNkYVx1NTNkY1x1NTNkZFx1NTNkZVx1NTNlMVx1NTNlMlx1NTNlN1x1NTNmNFx1NTNmYVx1NTNmZVx1NTNm''@;'; put 'put ''Zlx1NTQwMFx1NTQwMlx1NTQwNVx1NTQwN1x1NTQwYlx1NTQxNFx1NTQxOFx1NTQxOVx1NTQxYVx1NTQxY1x1NTQyMlx1NTQyNFx1NTQyNVx1NTQyYVx1NTQzMFx1NTQzM1x1NTQzNlx1NTQzN1x1NTQzYVx1NTQzZFx1NTQzZlx1NTQ0MVx1NTQ0Mlx1NTQ0NFx1NTQ0NVx1NTQ0N1x1NTQ0OVx1''@;'; put 'put ''NTQ0Y1x1NTQ0ZFx1NTQ0ZVx1NTQ0Zlx1NTQ1MVx1NTQ1YVx1NTQ1ZCIsNCwiXHU1NDYzXHU1NDY1XHU1NDY3XHU1NDY5Iiw3LCJcdTU0NzRcdTU0NzlcdTU0N2FcdTU0N2VcdTU0N2ZcdTU0ODFcdTU0ODNcdTU0ODVcdTU0ODdcdTU0ODhcdTU0ODlcdTU0OGFcdTU0OGRcdTU0OTFcdTU0OTNc''@;'; put 'put ''dTU0OTdcdTU0OThcdTU0OWNcdTU0OWVcdTU0OWZcdTU0YTBcdTU0YTEiXSxbIjg2NDAiLCJcdTU0YTJcdTU0YTVcdTU0YWVcdTU0YjBcdTU0YjJcdTU0YjVcdTU0YjZcdTU0YjdcdTU0YjlcdTU0YmFcdTU0YmNcdTU0YmVcdTU0YzNcdTU0YzVcdTU0Y2FcdTU0Y2JcdTU0ZDZcdTU0ZDhcdTU0''@;'; put 'put ''ZGJcdTU0ZTAiLDQsIlx1NTRlYlx1NTRlY1x1NTRlZlx1NTRmMFx1NTRmMVx1NTRmNCIsNSwiXHU1NGZiXHU1NGZlXHU1NTAwXHU1NTAyXHU1NTAzXHU1NTA0XHU1NTA1XHU1NTA4XHU1NTBhIiw0LCJcdTU1MTJcdTU1MTNcdTU1MTUiLDUsIlx1NTUxY1x1NTUxZFx1NTUxZVx1NTUxZlx1NTUy''@;'; put 'put ''MVx1NTUyNVx1NTUyNiJdLFsiODY4MCIsIlx1NTUyOFx1NTUyOVx1NTUyYlx1NTUyZFx1NTUzMlx1NTUzNFx1NTUzNVx1NTUzNlx1NTUzOFx1NTUzOVx1NTUzYVx1NTUzYlx1NTUzZFx1NTU0MFx1NTU0Mlx1NTU0NVx1NTU0N1x1NTU0OFx1NTU0YiIsNCwiXHU1NTUxXHU1NTUyXHU1NTUzXHU1''@;'; put 'put ''NTU0XHU1NTU3Iiw0LCJcdTU1NWRcdTU1NWVcdTU1NWZcdTU1NjBcdTU1NjJcdTU1NjNcdTU1NjhcdTU1NjlcdTU1NmJcdTU1NmYiLDUsIlx1NTU3OVx1NTU3YVx1NTU3ZFx1NTU3Zlx1NTU4NVx1NTU4Nlx1NTU4Y1x1NTU4ZFx1NTU4ZVx1NTU5MFx1NTU5Mlx1NTU5M1x1NTU5NVx1NTU5Nlx1''@;'; put 'put ''NTU5N1x1NTU5YVx1NTU5Ylx1NTU5ZVx1NTVhMCIsNiwiXHU1NWE4Iiw4LCJcdTU1YjJcdTU1YjRcdTU1YjZcdTU1YjhcdTU1YmFcdTU1YmNcdTU1YmYiLDQsIlx1NTVjNlx1NTVjN1x1NTVjOFx1NTVjYVx1NTVjYlx1NTVjZVx1NTVjZlx1NTVkMFx1NTVkNVx1NTVkNyIsNCwiXHU1NWRlXHU1''@;'; put 'put ''NWUwXHU1NWUyXHU1NWU3XHU1NWU5XHU1NWVkXHU1NWVlXHU1NWYwXHU1NWYxXHU1NWY0XHU1NWY2XHU1NWY4Iiw0LCJcdTU1ZmZcdTU2MDJcdTU2MDNcdTU2MDRcdTU2MDUiXSxbIjg3NDAiLCJcdTU2MDZcdTU2MDdcdTU2MGFcdTU2MGJcdTU2MGRcdTU2MTAiLDcsIlx1NTYxOVx1NTYxYVx1''@;'; put 'put ''NTYxY1x1NTYxZFx1NTYyMFx1NTYyMVx1NTYyMlx1NTYyNVx1NTYyNlx1NTYyOFx1NTYyOVx1NTYyYVx1NTYyYlx1NTYyZVx1NTYyZlx1NTYzMFx1NTYzM1x1NTYzNVx1NTYzN1x1NTYzOFx1NTYzYVx1NTYzY1x1NTYzZFx1NTYzZVx1NTY0MCIsMTEsIlx1NTY0ZiIsNCwiXHU1NjU1XHU1NjU2''@;'; put 'put ''XHU1NjVhXHU1NjViXHU1NjVkIiw0XSxbIjg3ODAiLCJcdTU2NjNcdTU2NjVcdTU2NjZcdTU2NjdcdTU2NmRcdTU2NmVcdTU2NmZcdTU2NzBcdTU2NzJcdTU2NzNcdTU2NzRcdTU2NzVcdTU2NzdcdTU2NzhcdTU2NzlcdTU2N2FcdTU2N2QiLDcsIlx1NTY4NyIsNiwiXHU1NjkwXHU1NjkxXHU1''@;'; put 'put ''NjkyXHU1Njk0IiwxNCwiXHU1NmE0IiwxMCwiXHU1NmIwIiw2LCJcdTU2YjhcdTU2YjlcdTU2YmFcdTU2YmJcdTU2YmQiLDEyLCJcdTU2Y2IiLDgsIlx1NTZkNVx1NTZkNlx1NTZkOFx1NTZkOVx1NTZkY1x1NTZlM1x1NTZlNSIsNSwiXHU1NmVjXHU1NmVlXHU1NmVmXHU1NmYyXHU1NmYzXHU1''@;'; put 'put ''NmY2XHU1NmY3XHU1NmY4XHU1NmZiXHU1NmZjXHU1NzAwXHU1NzAxXHU1NzAyXHU1NzA1XHU1NzA3XHU1NzBiIiw2XSxbIjg4NDAiLCJcdTU3MTIiLDksIlx1NTcxZFx1NTcxZVx1NTcyMFx1NTcyMVx1NTcyMlx1NTcyNFx1NTcyNVx1NTcyNlx1NTcyN1x1NTcyYlx1NTczMVx1NTczMlx1NTcz''@;'; put 'put ''NCIsNCwiXHU1NzNjXHU1NzNkXHU1NzNmXHU1NzQxXHU1NzQzXHU1NzQ0XHU1NzQ1XHU1NzQ2XHU1NzQ4XHU1NzQ5XHU1NzRiXHU1NzUyIiw0LCJcdTU3NThcdTU3NTlcdTU3NjJcdTU3NjNcdTU3NjVcdTU3NjdcdTU3NmNcdTU3NmVcdTU3NzBcdTU3NzFcdTU3NzJcdTU3NzRcdTU3NzVcdTU3''@;'; put 'put ''NzhcdTU3NzlcdTU3N2FcdTU3N2RcdTU3N2VcdTU3N2ZcdTU3ODAiXSxbIjg4ODAiLCJcdTU3ODFcdTU3ODdcdTU3ODhcdTU3ODlcdTU3OGFcdTU3OGQiLDQsIlx1NTc5NCIsNiwiXHU1NzljXHU1NzlkXHU1NzllXHU1NzlmXHU1N2E1XHU1N2E4XHU1N2FhXHU1N2FjXHU1N2FmXHU1N2IwXHU1''@;'; put 'put ''N2IxXHU1N2IzXHU1N2I1XHU1N2I2XHU1N2I3XHU1N2I5Iiw4LCJcdTU3YzQiLDYsIlx1NTdjY1x1NTdjZFx1NTdkMFx1NTdkMVx1NTdkM1x1NTdkNlx1NTdkN1x1NTdkYlx1NTdkY1x1NTdkZVx1NTdlMVx1NTdlMlx1NTdlM1x1NTdlNSIsNywiXHU1N2VlXHU1N2YwXHU1N2YxXHU1N2YyXHU1''@;'; put 'put ''N2YzXHU1N2Y1XHU1N2Y2XHU1N2Y3XHU1N2ZiXHU1N2ZjXHU1N2ZlXHU1N2ZmXHU1ODAxXHU1ODAzXHU1ODA0XHU1ODA1XHU1ODA4XHU1ODA5XHU1ODBhXHU1ODBjXHU1ODBlXHU1ODBmXHU1ODEwXHU1ODEyXHU1ODEzXHU1ODE0XHU1ODE2XHU1ODE3XHU1ODE4XHU1ODFhXHU1ODFiXHU1ODFj''@;'; put 'put ''XHU1ODFkXHU1ODFmXHU1ODIyXHU1ODIzXHU1ODI1Iiw0LCJcdTU4MmIiLDQsIlx1NTgzMVx1NTgzMlx1NTgzM1x1NTgzNFx1NTgzNiIsN10sWyI4OTQwIiwiXHU1ODNlIiw1LCJcdTU4NDUiLDYsIlx1NTg0ZVx1NTg0Zlx1NTg1MFx1NTg1Mlx1NTg1M1x1NTg1NVx1NTg1Nlx1NTg1N1x1NTg1''@;'; put 'put ''OSIsNCwiXHU1ODVmIiw1LCJcdTU4NjYiLDQsIlx1NTg2ZCIsMTYsIlx1NTg3Zlx1NTg4Mlx1NTg4NFx1NTg4Nlx1NTg4N1x1NTg4OFx1NTg4YVx1NTg4Ylx1NTg4YyJdLFsiODk4MCIsIlx1NTg4ZCIsNCwiXHU1ODk0Iiw0LCJcdTU4OWJcdTU4OWNcdTU4OWRcdTU4YTAiLDcsIlx1NThhYSIs''@;'; put 'put ''MTcsIlx1NThiZFx1NThiZVx1NThiZlx1NThjMFx1NThjMlx1NThjM1x1NThjNFx1NThjNiIsMTAsIlx1NThkMlx1NThkM1x1NThkNFx1NThkNiIsMTMsIlx1NThlNSIsNSwiXHU1OGVkXHU1OGVmXHU1OGYxXHU1OGYyXHU1OGY0XHU1OGY1XHU1OGY3XHU1OGY4XHU1OGZhIiw3LCJcdTU5MDNc''@;'; put 'put ''dTU5MDVcdTU5MDZcdTU5MDgiLDQsIlx1NTkwZVx1NTkxMFx1NTkxMVx1NTkxMlx1NTkxM1x1NTkxN1x1NTkxOFx1NTkxYlx1NTkxZFx1NTkxZVx1NTkyMFx1NTkyMVx1NTkyMlx1NTkyM1x1NTkyNlx1NTkyOFx1NTkyY1x1NTkzMFx1NTkzMlx1NTkzM1x1NTkzNVx1NTkzNlx1NTkzYiJdLFsi''@;'; put 'put ''OGE0MCIsIlx1NTkzZFx1NTkzZVx1NTkzZlx1NTk0MFx1NTk0M1x1NTk0NVx1NTk0Nlx1NTk0YVx1NTk0Y1x1NTk0ZFx1NTk1MFx1NTk1Mlx1NTk1M1x1NTk1OVx1NTk1YiIsNCwiXHU1OTYxXHU1OTYzXHU1OTY0XHU1OTY2IiwxMiwiXHU1OTc1XHU1OTc3XHU1OTdhXHU1OTdiXHU1OTdjXHU1''@;'; put 'put ''OTdlXHU1OTdmXHU1OTgwXHU1OTg1XHU1OTg5XHU1OThiXHU1OThjXHU1OThlXHU1OThmXHU1OTkwXHU1OTkxXHU1OTk0XHU1OTk1XHU1OTk4XHU1OTlhXHU1OTliXHU1OTljXHU1OTlkXHU1OTlmXHU1OWEwXHU1OWExXHU1OWEyXHU1OWE2Il0sWyI4YTgwIiwiXHU1OWE3XHU1OWFjXHU1OWFk''@;'; put 'put ''XHU1OWIwXHU1OWIxXHU1OWIzIiw1LCJcdTU5YmFcdTU5YmNcdTU5YmRcdTU5YmYiLDYsIlx1NTljN1x1NTljOFx1NTljOVx1NTljY1x1NTljZFx1NTljZVx1NTljZlx1NTlkNVx1NTlkNlx1NTlkOVx1NTlkYlx1NTlkZSIsNCwiXHU1OWU0XHU1OWU2XHU1OWU3XHU1OWU5XHU1OWVhXHU1OWVi''@;'; put 'put ''XHU1OWVkIiwxMSwiXHU1OWZhXHU1OWZjXHU1OWZkXHU1OWZlXHU1YTAwXHU1YTAyXHU1YTBhXHU1YTBiXHU1YTBkXHU1YTBlXHU1YTBmXHU1YTEwXHU1YTEyXHU1YTE0XHU1YTE1XHU1YTE2XHU1YTE3XHU1YTE5XHU1YTFhXHU1YTFiXHU1YTFkXHU1YTFlXHU1YTIxXHU1YTIyXHU1YTI0XHU1''@;'; put 'put ''YTI2XHU1YTI3XHU1YTI4XHU1YTJhIiw2LCJcdTVhMzNcdTVhMzVcdTVhMzciLDQsIlx1NWEzZFx1NWEzZVx1NWEzZlx1NWE0MSIsNCwiXHU1YTQ3XHU1YTQ4XHU1YTRiIiw5LCJcdTVhNTZcdTVhNTdcdTVhNThcdTVhNTlcdTVhNWIiLDVdLFsiOGI0MCIsIlx1NWE2MVx1NWE2M1x1NWE2NFx1''@;'; put 'put ''NWE2NVx1NWE2Nlx1NWE2OFx1NWE2OVx1NWE2YiIsOCwiXHU1YTc4XHU1YTc5XHU1YTdiXHU1YTdjXHU1YTdkXHU1YTdlXHU1YTgwIiwxNywiXHU1YTkzIiw2LCJcdTVhOWMiLDEzLCJcdTVhYWJcdTVhYWMiXSxbIjhiODAiLCJcdTVhYWQiLDQsIlx1NWFiNFx1NWFiNlx1NWFiN1x1NWFiOSIs''@;'; put 'put ''NCwiXHU1YWJmXHU1YWMwXHU1YWMzIiw1LCJcdTVhY2FcdTVhY2JcdTVhY2QiLDQsIlx1NWFkM1x1NWFkNVx1NWFkN1x1NWFkOVx1NWFkYVx1NWFkYlx1NWFkZFx1NWFkZVx1NWFkZlx1NWFlMlx1NWFlNFx1NWFlNVx1NWFlN1x1NWFlOFx1NWFlYVx1NWFlYyIsNCwiXHU1YWYyIiwyMiwiXHU1''@;'; put 'put ''YjBhIiwxMSwiXHU1YjE4IiwyNSwiXHU1YjMzXHU1YjM1XHU1YjM2XHU1YjM4Iiw3LCJcdTViNDEiLDZdLFsiOGM0MCIsIlx1NWI0OCIsNywiXHU1YjUyXHU1YjU2XHU1YjVlXHU1YjYwXHU1YjYxXHU1YjY3XHU1YjY4XHU1YjZiXHU1YjZkXHU1YjZlXHU1YjZmXHU1YjcyXHU1Yjc0XHU1Yjc2''@;'; put 'put ''XHU1Yjc3XHU1Yjc4XHU1Yjc5XHU1YjdiXHU1YjdjXHU1YjdlXHU1YjdmXHU1YjgyXHU1Yjg2XHU1YjhhXHU1YjhkXHU1YjhlXHU1YjkwXHU1YjkxXHU1YjkyXHU1Yjk0XHU1Yjk2XHU1YjlmXHU1YmE3XHU1YmE4XHU1YmE5XHU1YmFjXHU1YmFkXHU1YmFlXHU1YmFmXHU1YmIxXHU1YmIyXHU1''@;'; put 'put ''YmI3XHU1YmJhXHU1YmJiXHU1YmJjXHU1YmMwXHU1YmMxXHU1YmMzXHU1YmM4XHU1YmM5XHU1YmNhXHU1YmNiXHU1YmNkXHU1YmNlXHU1YmNmIl0sWyI4YzgwIiwiXHU1YmQxXHU1YmQ0Iiw4LCJcdTViZTBcdTViZTJcdTViZTNcdTViZTZcdTViZTdcdTViZTkiLDQsIlx1NWJlZlx1NWJmMSIs''@;'; put 'put ''NiwiXHU1YmZkXHU1YmZlXHU1YzAwXHU1YzAyXHU1YzAzXHU1YzA1XHU1YzA3XHU1YzA4XHU1YzBiXHU1YzBjXHU1YzBkXHU1YzBlXHU1YzEwXHU1YzEyXHU1YzEzXHU1YzE3XHU1YzE5XHU1YzFiXHU1YzFlXHU1YzFmXHU1YzIwXHU1YzIxXHU1YzIzXHU1YzI2XHU1YzI4XHU1YzI5XHU1YzJh''@;'; put 'put ''XHU1YzJiXHU1YzJkXHU1YzJlXHU1YzJmXHU1YzMwXHU1YzMyXHU1YzMzXHU1YzM1XHU1YzM2XHU1YzM3XHU1YzQzXHU1YzQ0XHU1YzQ2XHU1YzQ3XHU1YzRjXHU1YzRkXHU1YzUyXHU1YzUzXHU1YzU0XHU1YzU2XHU1YzU3XHU1YzU4XHU1YzVhXHU1YzViXHU1YzVjXHU1YzVkXHU1YzVmXHU1''@;'; put 'put ''YzYyXHU1YzY0XHU1YzY3Iiw2LCJcdTVjNzBcdTVjNzIiLDYsIlx1NWM3Ylx1NWM3Y1x1NWM3ZFx1NWM3ZVx1NWM4MFx1NWM4MyIsNCwiXHU1Yzg5XHU1YzhhXHU1YzhiXHU1YzhlXHU1YzhmXHU1YzkyXHU1YzkzXHU1Yzk1XHU1YzlkIiw0LCJcdTVjYTQiLDRdLFsiOGQ0MCIsIlx1NWNhYVx1''@;'; put 'put ''NWNhZVx1NWNhZlx1NWNiMFx1NWNiMlx1NWNiNFx1NWNiNlx1NWNiOVx1NWNiYVx1NWNiYlx1NWNiY1x1NWNiZVx1NWNjMFx1NWNjMlx1NWNjM1x1NWNjNSIsNSwiXHU1Y2NjIiw1LCJcdTVjZDMiLDUsIlx1NWNkYSIsNiwiXHU1Y2UyXHU1Y2UzXHU1Y2U3XHU1Y2U5XHU1Y2ViXHU1Y2VjXHU1''@;'; put 'put ''Y2VlXHU1Y2VmXHU1Y2YxIiw5LCJcdTVjZmMiLDRdLFsiOGQ4MCIsIlx1NWQwMVx1NWQwNFx1NWQwNVx1NWQwOCIsNSwiXHU1ZDBmIiw0LCJcdTVkMTVcdTVkMTdcdTVkMThcdTVkMTlcdTVkMWFcdTVkMWNcdTVkMWRcdTVkMWYiLDQsIlx1NWQyNVx1NWQyOFx1NWQyYVx1NWQyYlx1NWQyY1x1''@;'; put 'put ''NWQyZiIsNCwiXHU1ZDM1Iiw3LCJcdTVkM2YiLDcsIlx1NWQ0OFx1NWQ0OVx1NWQ0ZCIsMTAsIlx1NWQ1OVx1NWQ1YVx1NWQ1Y1x1NWQ1ZSIsMTAsIlx1NWQ2YVx1NWQ2ZFx1NWQ2ZVx1NWQ3MFx1NWQ3MVx1NWQ3Mlx1NWQ3M1x1NWQ3NSIsMTIsIlx1NWQ4MyIsMjEsIlx1NWQ5YVx1NWQ5Ylx1''@;'; put 'put ''NWQ5Y1x1NWQ5ZVx1NWQ5Zlx1NWRhMCJdLFsiOGU0MCIsIlx1NWRhMSIsMjEsIlx1NWRiOCIsMTIsIlx1NWRjNiIsNiwiXHU1ZGNlIiwxMiwiXHU1ZGRjXHU1ZGRmXHU1ZGUwXHU1ZGUzXHU1ZGU0XHU1ZGVhXHU1ZGVjXHU1ZGVkIl0sWyI4ZTgwIiwiXHU1ZGYwXHU1ZGY1XHU1ZGY2XHU1ZGY4''@;'; put 'put ''Iiw0LCJcdTVkZmZcdTVlMDBcdTVlMDRcdTVlMDdcdTVlMDlcdTVlMGFcdTVlMGJcdTVlMGRcdTVlMGVcdTVlMTJcdTVlMTNcdTVlMTdcdTVlMWUiLDcsIlx1NWUyOCIsNCwiXHU1ZTJmXHU1ZTMwXHU1ZTMyIiw0LCJcdTVlMzlcdTVlM2FcdTVlM2VcdTVlM2ZcdTVlNDBcdTVlNDFcdTVlNDNc''@;'; put 'put ''dTVlNDYiLDUsIlx1NWU0ZCIsNiwiXHU1ZTU2Iiw0LCJcdTVlNWNcdTVlNWRcdTVlNWZcdTVlNjBcdTVlNjMiLDE0LCJcdTVlNzVcdTVlNzdcdTVlNzlcdTVlN2VcdTVlODFcdTVlODJcdTVlODNcdTVlODVcdTVlODhcdTVlODlcdTVlOGNcdTVlOGRcdTVlOGVcdTVlOTJcdTVlOThcdTVlOWJc''@;'; put 'put ''dTVlOWRcdTVlYTFcdTVlYTJcdTVlYTNcdTVlYTRcdTVlYTgiLDQsIlx1NWVhZSIsNCwiXHU1ZWI0XHU1ZWJhXHU1ZWJiXHU1ZWJjXHU1ZWJkXHU1ZWJmIiw2XSxbIjhmNDAiLCJcdTVlYzZcdTVlYzdcdTVlYzhcdTVlY2IiLDUsIlx1NWVkNFx1NWVkNVx1NWVkN1x1NWVkOFx1NWVkOVx1NWVk''@;'; put 'put ''YVx1NWVkYyIsMTEsIlx1NWVlOVx1NWVlYiIsOCwiXHU1ZWY1XHU1ZWY4XHU1ZWY5XHU1ZWZiXHU1ZWZjXHU1ZWZkXHU1ZjA1XHU1ZjA2XHU1ZjA3XHU1ZjA5XHU1ZjBjXHU1ZjBkXHU1ZjBlXHU1ZjEwXHU1ZjEyXHU1ZjE0XHU1ZjE2XHU1ZjE5XHU1ZjFhXHU1ZjFjXHU1ZjFkXHU1ZjFlXHU1''@;'; put 'put ''ZjIxXHU1ZjIyXHU1ZjIzXHU1ZjI0Il0sWyI4ZjgwIiwiXHU1ZjI4XHU1ZjJiXHU1ZjJjXHU1ZjJlXHU1ZjMwXHU1ZjMyIiw2LCJcdTVmM2JcdTVmM2RcdTVmM2VcdTVmM2ZcdTVmNDEiLDE0LCJcdTVmNTFcdTVmNTRcdTVmNTlcdTVmNWFcdTVmNWJcdTVmNWNcdTVmNWVcdTVmNWZcdTVmNjBc''@;'; put 'put ''dTVmNjNcdTVmNjVcdTVmNjdcdTVmNjhcdTVmNmJcdTVmNmVcdTVmNmZcdTVmNzJcdTVmNzRcdTVmNzVcdTVmNzZcdTVmNzhcdTVmN2FcdTVmN2RcdTVmN2VcdTVmN2ZcdTVmODNcdTVmODZcdTVmOGRcdTVmOGVcdTVmOGZcdTVmOTFcdTVmOTNcdTVmOTRcdTVmOTZcdTVmOWFcdTVmOWJcdTVm''@;'; put 'put ''OWRcdTVmOWVcdTVmOWZcdTVmYTBcdTVmYTIiLDUsIlx1NWZhOVx1NWZhYlx1NWZhY1x1NWZhZiIsNSwiXHU1ZmI2XHU1ZmI4XHU1ZmI5XHU1ZmJhXHU1ZmJiXHU1ZmJlIiw0LCJcdTVmYzdcdTVmYzhcdTVmY2FcdTVmY2JcdTVmY2VcdTVmZDNcdTVmZDRcdTVmZDVcdTVmZGFcdTVmZGJcdTVm''@;'; put 'put ''ZGNcdTVmZGVcdTVmZGZcdTVmZTJcdTVmZTNcdTVmZTVcdTVmZTZcdTVmZThcdTVmZTlcdTVmZWNcdTVmZWZcdTVmZjBcdTVmZjJcdTVmZjNcdTVmZjRcdTVmZjZcdTVmZjdcdTVmZjlcdTVmZmFcdTVmZmNcdTYwMDciXSxbIjkwNDAiLCJcdTYwMDhcdTYwMDlcdTYwMGJcdTYwMGNcdTYwMTBc''@;'; put 'put ''dTYwMTFcdTYwMTNcdTYwMTdcdTYwMThcdTYwMWFcdTYwMWVcdTYwMWZcdTYwMjJcdTYwMjNcdTYwMjRcdTYwMmNcdTYwMmRcdTYwMmVcdTYwMzAiLDQsIlx1NjAzNiIsNCwiXHU2MDNkXHU2MDNlXHU2MDQwXHU2MDQ0Iiw2LCJcdTYwNGNcdTYwNGVcdTYwNGZcdTYwNTFcdTYwNTNcdTYwNTRc''@;'; put 'put ''dTYwNTZcdTYwNTdcdTYwNThcdTYwNWJcdTYwNWNcdTYwNWVcdTYwNWZcdTYwNjBcdTYwNjFcdTYwNjVcdTYwNjZcdTYwNmVcdTYwNzFcdTYwNzJcdTYwNzRcdTYwNzVcdTYwNzdcdTYwN2VcdTYwODAiXSxbIjkwODAiLCJcdTYwODFcdTYwODJcdTYwODVcdTYwODZcdTYwODdcdTYwODhcdTYw''@;'; put 'put ''OGFcdTYwOGJcdTYwOGVcdTYwOGZcdTYwOTBcdTYwOTFcdTYwOTNcdTYwOTVcdTYwOTdcdTYwOThcdTYwOTlcdTYwOWNcdTYwOWVcdTYwYTFcdTYwYTJcdTYwYTRcdTYwYTVcdTYwYTdcdTYwYTlcdTYwYWFcdTYwYWVcdTYwYjBcdTYwYjNcdTYwYjVcdTYwYjZcdTYwYjdcdTYwYjlcdTYwYmFc''@;'; put 'put ''dTYwYmQiLDcsIlx1NjBjN1x1NjBjOFx1NjBjOVx1NjBjYyIsNCwiXHU2MGQyXHU2MGQzXHU2MGQ0XHU2MGQ2XHU2MGQ3XHU2MGQ5XHU2MGRiXHU2MGRlXHU2MGUxIiw0LCJcdTYwZWFcdTYwZjFcdTYwZjJcdTYwZjVcdTYwZjdcdTYwZjhcdTYwZmIiLDQsIlx1NjEwMlx1NjEwM1x1NjEwNFx1''@;'; put 'put ''NjEwNVx1NjEwN1x1NjEwYVx1NjEwYlx1NjEwY1x1NjExMCIsNCwiXHU2MTE2XHU2MTE3XHU2MTE4XHU2MTE5XHU2MTFiXHU2MTFjXHU2MTFkXHU2MTFlXHU2MTIxXHU2MTIyXHU2MTI1XHU2MTI4XHU2MTI5XHU2MTJhXHU2MTJjIiwxOCwiXHU2MTQwIiw2XSxbIjkxNDAiLCJcdTYxNDdcdTYx''@;'; put 'put ''NDlcdTYxNGJcdTYxNGRcdTYxNGZcdTYxNTBcdTYxNTJcdTYxNTNcdTYxNTRcdTYxNTYiLDYsIlx1NjE1ZVx1NjE1Zlx1NjE2MFx1NjE2MVx1NjE2M1x1NjE2NFx1NjE2NVx1NjE2Nlx1NjE2OSIsNiwiXHU2MTcxXHU2MTcyXHU2MTczXHU2MTc0XHU2MTc2XHU2MTc4IiwxOCwiXHU2MThjXHU2''@;'; put 'put ''MThkXHU2MThmIiw0LCJcdTYxOTUiXSxbIjkxODAiLCJcdTYxOTYiLDYsIlx1NjE5ZSIsOCwiXHU2MWFhXHU2MWFiXHU2MWFkIiw5LCJcdTYxYjgiLDUsIlx1NjFiZlx1NjFjMFx1NjFjMVx1NjFjMyIsNCwiXHU2MWM5XHU2MWNjIiw0LCJcdTYxZDNcdTYxZDUiLDE2LCJcdTYxZTciLDEzLCJc''@;'; put 'put ''dTYxZjYiLDgsIlx1NjIwMCIsNSwiXHU2MjA3XHU2MjA5XHU2MjEzXHU2MjE0XHU2MjE5XHU2MjFjXHU2MjFkXHU2MjFlXHU2MjIwXHU2MjIzXHU2MjI2XHU2MjI3XHU2MjI4XHU2MjI5XHU2MjJiXHU2MjJkXHU2MjJmXHU2MjMwXHU2MjMxXHU2MjMyXHU2MjM1XHU2MjM2XHU2MjM4Iiw0LCJc''@;'; put 'put ''dTYyNDJcdTYyNDRcdTYyNDVcdTYyNDZcdTYyNGEiXSxbIjkyNDAiLCJcdTYyNGZcdTYyNTBcdTYyNTVcdTYyNTZcdTYyNTdcdTYyNTlcdTYyNWFcdTYyNWMiLDYsIlx1NjI2NFx1NjI2NVx1NjI2OFx1NjI3MVx1NjI3Mlx1NjI3NFx1NjI3NVx1NjI3N1x1NjI3OFx1NjI3YVx1NjI3Ylx1NjI3''@;'; put 'put ''ZFx1NjI4MVx1NjI4Mlx1NjI4M1x1NjI4NVx1NjI4Nlx1NjI4N1x1NjI4OFx1NjI4YiIsNSwiXHU2Mjk0XHU2Mjk5XHU2MjljXHU2MjlkXHU2MjllXHU2MmEzXHU2MmE2XHU2MmE3XHU2MmE5XHU2MmFhXHU2MmFkXHU2MmFlXHU2MmFmXHU2MmIwXHU2MmIyXHU2MmIzXHU2MmI0XHU2MmI2XHU2''@;'; put 'put ''MmI3XHU2MmI4XHU2MmJhXHU2MmJlXHU2MmMwXHU2MmMxIl0sWyI5MjgwIiwiXHU2MmMzXHU2MmNiXHU2MmNmXHU2MmQxXHU2MmQ1XHU2MmRkXHU2MmRlXHU2MmUwXHU2MmUxXHU2MmU0XHU2MmVhXHU2MmViXHU2MmYwXHU2MmYyXHU2MmY1XHU2MmY4XHU2MmY5XHU2MmZhXHU2MmZiXHU2MzAw''@;'; put 'put ''XHU2MzAzXHU2MzA0XHU2MzA1XHU2MzA2XHU2MzBhXHU2MzBiXHU2MzBjXHU2MzBkXHU2MzBmXHU2MzEwXHU2MzEyXHU2MzEzXHU2MzE0XHU2MzE1XHU2MzE3XHU2MzE4XHU2MzE5XHU2MzFjXHU2MzI2XHU2MzI3XHU2MzI5XHU2MzJjXHU2MzJkXHU2MzJlXHU2MzMwXHU2MzMxXHU2MzMzIiw1''@;'; put 'put ''LCJcdTYzM2JcdTYzM2NcdTYzM2VcdTYzM2ZcdTYzNDBcdTYzNDFcdTYzNDRcdTYzNDdcdTYzNDhcdTYzNGFcdTYzNTFcdTYzNTJcdTYzNTNcdTYzNTRcdTYzNTYiLDcsIlx1NjM2MFx1NjM2NFx1NjM2NVx1NjM2Nlx1NjM2OFx1NjM2YVx1NjM2Ylx1NjM2Y1x1NjM2Zlx1NjM3MFx1NjM3Mlx1''@;'; put 'put ''NjM3M1x1NjM3NFx1NjM3NVx1NjM3OFx1NjM3OVx1NjM3Y1x1NjM3ZFx1NjM3ZVx1NjM3Zlx1NjM4MVx1NjM4M1x1NjM4NFx1NjM4NVx1NjM4Nlx1NjM4Ylx1NjM4ZFx1NjM5MVx1NjM5M1x1NjM5NFx1NjM5NVx1NjM5N1x1NjM5OSIsNiwiXHU2M2ExXHU2M2E0XHU2M2E2XHU2M2FiXHU2M2Fm''@;'; put 'put ''XHU2M2IxXHU2M2IyXHU2M2I1XHU2M2I2XHU2M2I5XHU2M2JiXHU2M2JkXHU2M2JmXHU2M2MwIl0sWyI5MzQwIiwiXHU2M2MxXHU2M2MyXHU2M2MzXHU2M2M1XHU2M2M3XHU2M2M4XHU2M2NhXHU2M2NiXHU2M2NjXHU2M2QxXHU2M2QzXHU2M2Q0XHU2M2Q1XHU2M2Q3Iiw2LCJcdTYzZGZcdTYz''@;'; put 'put ''ZTJcdTYzZTQiLDQsIlx1NjNlYlx1NjNlY1x1NjNlZVx1NjNlZlx1NjNmMFx1NjNmMVx1NjNmM1x1NjNmNVx1NjNmN1x1NjNmOVx1NjNmYVx1NjNmYlx1NjNmY1x1NjNmZVx1NjQwM1x1NjQwNFx1NjQwNiIsNCwiXHU2NDBkXHU2NDBlXHU2NDExXHU2NDEyXHU2NDE1Iiw1LCJcdTY0MWRcdTY0''@;'; put 'put ''MWZcdTY0MjJcdTY0MjNcdTY0MjQiXSxbIjkzODAiLCJcdTY0MjVcdTY0MjdcdTY0MjhcdTY0MjlcdTY0MmJcdTY0MmUiLDUsIlx1NjQzNSIsNCwiXHU2NDNiXHU2NDNjXHU2NDNlXHU2NDQwXHU2NDQyXHU2NDQzXHU2NDQ5XHU2NDRiIiw2LCJcdTY0NTNcdTY0NTVcdTY0NTZcdTY0NTdcdTY0''@;'; put 'put ''NTkiLDQsIlx1NjQ1ZiIsNywiXHU2NDY4XHU2NDZhXHU2NDZiXHU2NDZjXHU2NDZlIiw5LCJcdTY0N2IiLDYsIlx1NjQ4M1x1NjQ4Nlx1NjQ4OCIsOCwiXHU2NDkzXHU2NDk0XHU2NDk3XHU2NDk4XHU2NDlhXHU2NDliXHU2NDljXHU2NDlkXHU2NDlmIiw0LCJcdTY0YTVcdTY0YTZcdTY0YTdc''@;'; put 'put ''dTY0YThcdTY0YWFcdTY0YWJcdTY0YWZcdTY0YjFcdTY0YjJcdTY0YjNcdTY0YjRcdTY0YjZcdTY0YjlcdTY0YmJcdTY0YmRcdTY0YmVcdTY0YmZcdTY0YzFcdTY0YzNcdTY0YzRcdTY0YzYiLDYsIlx1NjRjZlx1NjRkMVx1NjRkM1x1NjRkNFx1NjRkNVx1NjRkNlx1NjRkOVx1NjRkYSJdLFsi''@;'; put 'put ''OTQ0MCIsIlx1NjRkYlx1NjRkY1x1NjRkZFx1NjRkZlx1NjRlMFx1NjRlMVx1NjRlM1x1NjRlNVx1NjRlNyIsMjQsIlx1NjUwMSIsNywiXHU2NTBhIiw3LCJcdTY1MTMiLDQsIlx1NjUxOSIsOF0sWyI5NDgwIiwiXHU2NTIyXHU2NTIzXHU2NTI0XHU2NTI2Iiw0LCJcdTY1MmNcdTY1MmRcdTY1''@;'; put 'put ''MzBcdTY1MzFcdTY1MzJcdTY1MzNcdTY1MzdcdTY1M2FcdTY1M2NcdTY1M2RcdTY1NDAiLDQsIlx1NjU0Nlx1NjU0N1x1NjU0YVx1NjU0Ylx1NjU0ZFx1NjU0ZVx1NjU1MFx1NjU1Mlx1NjU1M1x1NjU1NFx1NjU1N1x1NjU1OFx1NjU1YVx1NjU1Y1x1NjU1Zlx1NjU2MFx1NjU2MVx1NjU2NFx1''@;'; put 'put ''NjU2NVx1NjU2N1x1NjU2OFx1NjU2OVx1NjU2YVx1NjU2ZFx1NjU2ZVx1NjU2Zlx1NjU3MVx1NjU3M1x1NjU3NVx1NjU3Nlx1NjU3OCIsMTQsIlx1NjU4OFx1NjU4OVx1NjU4YVx1NjU4ZFx1NjU4ZVx1NjU4Zlx1NjU5Mlx1NjU5NFx1NjU5NVx1NjU5Nlx1NjU5OFx1NjU5YVx1NjU5ZFx1NjU5''@;'; put 'put ''ZVx1NjVhMFx1NjVhMlx1NjVhM1x1NjVhNlx1NjVhOFx1NjVhYVx1NjVhY1x1NjVhZVx1NjViMSIsNywiXHU2NWJhXHU2NWJiXHU2NWJlXHU2NWJmXHU2NWMwXHU2NWMyXHU2NWM3XHU2NWM4XHU2NWM5XHU2NWNhXHU2NWNkXHU2NWQwXHU2NWQxXHU2NWQzXHU2NWQ0XHU2NWQ1XHU2NWQ4Iiw3''@;'; put 'put ''LCJcdTY1ZTFcdTY1ZTNcdTY1ZTRcdTY1ZWFcdTY1ZWIiXSxbIjk1NDAiLCJcdTY1ZjJcdTY1ZjNcdTY1ZjRcdTY1ZjVcdTY1ZjhcdTY1ZjlcdTY1ZmIiLDQsIlx1NjYwMVx1NjYwNFx1NjYwNVx1NjYwN1x1NjYwOFx1NjYwOVx1NjYwYlx1NjYwZFx1NjYxMFx1NjYxMVx1NjYxMlx1NjYxNlx1''@;'; put 'put ''NjYxN1x1NjYxOFx1NjYxYVx1NjYxYlx1NjYxY1x1NjYxZVx1NjYyMVx1NjYyMlx1NjYyM1x1NjYyNFx1NjYyNlx1NjYyOVx1NjYyYVx1NjYyYlx1NjYyY1x1NjYyZVx1NjYzMFx1NjYzMlx1NjYzM1x1NjYzNyIsNCwiXHU2NjNkXHU2NjNmXHU2NjQwXHU2NjQyXHU2NjQ0Iiw2LCJcdTY2NGRc''@;'; put 'put ''dTY2NGVcdTY2NTBcdTY2NTFcdTY2NTgiXSxbIjk1ODAiLCJcdTY2NTlcdTY2NWJcdTY2NWNcdTY2NWRcdTY2NWVcdTY2NjBcdTY2NjJcdTY2NjNcdTY2NjVcdTY2NjdcdTY2NjkiLDQsIlx1NjY3MVx1NjY3Mlx1NjY3M1x1NjY3NVx1NjY3OFx1NjY3OVx1NjY3Ylx1NjY3Y1x1NjY3ZFx1NjY3''@;'; put 'put ''Zlx1NjY4MFx1NjY4MVx1NjY4M1x1NjY4NVx1NjY4Nlx1NjY4OFx1NjY4OVx1NjY4YVx1NjY4Ylx1NjY4ZFx1NjY4ZVx1NjY4Zlx1NjY5MFx1NjY5Mlx1NjY5M1x1NjY5NFx1NjY5NVx1NjY5OCIsNCwiXHU2NjllIiw4LCJcdTY2YTkiLDQsIlx1NjZhZiIsNCwiXHU2NmI1XHU2NmI2XHU2NmI3''@;'; put 'put ''XHU2NmI4XHU2NmJhXHU2NmJiXHU2NmJjXHU2NmJkXHU2NmJmIiwyNSwiXHU2NmRhXHU2NmRlIiw3LCJcdTY2ZTdcdTY2ZThcdTY2ZWEiLDUsIlx1NjZmMVx1NjZmNVx1NjZmNlx1NjZmOFx1NjZmYVx1NjZmYlx1NjZmZFx1NjcwMVx1NjcwMlx1NjcwMyJdLFsiOTY0MCIsIlx1NjcwNFx1Njcw''@;'; put 'put ''NVx1NjcwNlx1NjcwN1x1NjcwY1x1NjcwZVx1NjcwZlx1NjcxMVx1NjcxMlx1NjcxM1x1NjcxNlx1NjcxOFx1NjcxOVx1NjcxYVx1NjcxY1x1NjcxZVx1NjcyMCIsNSwiXHU2NzI3XHU2NzI5XHU2NzJlXHU2NzMwXHU2NzMyXHU2NzMzXHU2NzM2XHU2NzM3XHU2NzM4XHU2NzM5XHU2NzNiXHU2''@;'; put 'put ''NzNjXHU2NzNlXHU2NzNmXHU2NzQxXHU2NzQ0XHU2NzQ1XHU2NzQ3XHU2NzRhXHU2NzRiXHU2NzRkXHU2NzUyXHU2NzU0XHU2NzU1XHU2NzU3Iiw0LCJcdTY3NWRcdTY3NjJcdTY3NjNcdTY3NjRcdTY3NjZcdTY3NjdcdTY3NmJcdTY3NmNcdTY3NmVcdTY3NzFcdTY3NzRcdTY3NzYiXSxbIjk2''@;'; put 'put ''ODAiLCJcdTY3NzhcdTY3NzlcdTY3N2FcdTY3N2JcdTY3N2RcdTY3ODBcdTY3ODJcdTY3ODNcdTY3ODVcdTY3ODZcdTY3ODhcdTY3OGFcdTY3OGNcdTY3OGRcdTY3OGVcdTY3OGZcdTY3OTFcdTY3OTJcdTY3OTNcdTY3OTRcdTY3OTZcdTY3OTlcdTY3OWJcdTY3OWZcdTY3YTBcdTY3YTFcdTY3''@;'; put 'put ''YTRcdTY3YTZcdTY3YTlcdTY3YWNcdTY3YWVcdTY3YjFcdTY3YjJcdTY3YjRcdTY3YjkiLDcsIlx1NjdjMlx1NjdjNSIsOSwiXHU2N2Q1XHU2N2Q2XHU2N2Q3XHU2N2RiXHU2N2RmXHU2N2UxXHU2N2UzXHU2N2U0XHU2N2U2XHU2N2U3XHU2N2U4XHU2N2VhXHU2N2ViXHU2N2VkXHU2N2VlXHU2''@;'; put 'put ''N2YyXHU2N2Y1Iiw3LCJcdTY3ZmVcdTY4MDFcdTY4MDJcdTY4MDNcdTY4MDRcdTY4MDZcdTY4MGRcdTY4MTBcdTY4MTJcdTY4MTRcdTY4MTVcdTY4MTgiLDQsIlx1NjgxZVx1NjgxZlx1NjgyMFx1NjgyMiIsNiwiXHU2ODJiIiw2LCJcdTY4MzRcdTY4MzVcdTY4MzZcdTY4M2FcdTY4M2JcdTY4''@;'; put 'put ''M2ZcdTY4NDdcdTY4NGJcdTY4NGRcdTY4NGZcdTY4NTJcdTY4NTYiLDVdLFsiOTc0MCIsIlx1Njg1Y1x1Njg1ZFx1Njg1ZVx1Njg1Zlx1Njg2YVx1Njg2YyIsNywiXHU2ODc1XHU2ODc4Iiw4LCJcdTY4ODJcdTY4ODRcdTY4ODciLDcsIlx1Njg5MFx1Njg5MVx1Njg5Mlx1Njg5NFx1Njg5NVx1''@;'; put 'put ''Njg5Nlx1Njg5OCIsOSwiXHU2OGEzXHU2OGE0XHU2OGE1XHU2OGE5XHU2OGFhXHU2OGFiXHU2OGFjXHU2OGFlXHU2OGIxXHU2OGIyXHU2OGI0XHU2OGI2XHU2OGI3XHU2OGI4Il0sWyI5NzgwIiwiXHU2OGI5Iiw2LCJcdTY4YzFcdTY4YzMiLDUsIlx1NjhjYVx1NjhjY1x1NjhjZVx1NjhjZlx1''@;'; put 'put ''NjhkMFx1NjhkMVx1NjhkM1x1NjhkNFx1NjhkNlx1NjhkN1x1NjhkOVx1NjhkYiIsNCwiXHU2OGUxXHU2OGUyXHU2OGU0Iiw5LCJcdTY4ZWZcdTY4ZjJcdTY4ZjNcdTY4ZjRcdTY4ZjZcdTY4ZjdcdTY4ZjhcdTY4ZmJcdTY4ZmRcdTY4ZmVcdTY4ZmZcdTY5MDBcdTY5MDJcdTY5MDNcdTY5MDRc''@;'; put 'put ''dTY5MDYiLDQsIlx1NjkwY1x1NjkwZlx1NjkxMVx1NjkxMyIsMTEsIlx1NjkyMVx1NjkyMlx1NjkyM1x1NjkyNSIsNywiXHU2OTJlXHU2OTJmXHU2OTMxXHU2OTMyXHU2OTMzXHU2OTM1XHU2OTM2XHU2OTM3XHU2OTM4XHU2OTNhXHU2OTNiXHU2OTNjXHU2OTNlXHU2OTQwXHU2OTQxXHU2OTQz''@;'; put 'put ''IiwxNiwiXHU2OTU1XHU2OTU2XHU2OTU4XHU2OTU5XHU2OTViXHU2OTVjXHU2OTVmIl0sWyI5ODQwIiwiXHU2OTYxXHU2OTYyXHU2OTY0XHU2OTY1XHU2OTY3XHU2OTY4XHU2OTY5XHU2OTZhXHU2OTZjXHU2OTZkXHU2OTZmXHU2OTcwXHU2OTcyIiw0LCJcdTY5N2FcdTY5N2JcdTY5N2RcdTY5''@;'; put 'put ''N2VcdTY5N2ZcdTY5ODFcdTY5ODNcdTY5ODVcdTY5OGFcdTY5OGJcdTY5OGNcdTY5OGUiLDUsIlx1Njk5Nlx1Njk5N1x1Njk5OVx1Njk5YVx1Njk5ZCIsOSwiXHU2OWE5XHU2OWFhXHU2OWFjXHU2OWFlXHU2OWFmXHU2OWIwXHU2OWIyXHU2OWIzXHU2OWI1XHU2OWI2XHU2OWI4XHU2OWI5XHU2''@;'; put 'put ''OWJhXHU2OWJjXHU2OWJkIl0sWyI5ODgwIiwiXHU2OWJlXHU2OWJmXHU2OWMwXHU2OWMyIiw3LCJcdTY5Y2JcdTY5Y2RcdTY5Y2ZcdTY5ZDFcdTY5ZDJcdTY5ZDNcdTY5ZDUiLDUsIlx1NjlkY1x1NjlkZFx1NjlkZVx1NjllMSIsMTEsIlx1NjllZVx1NjllZlx1NjlmMFx1NjlmMVx1NjlmMyIs''@;'; put 'put ''OSwiXHU2OWZlXHU2YTAwIiw5LCJcdTZhMGIiLDExLCJcdTZhMTkiLDUsIlx1NmEyMFx1NmEyMiIsNSwiXHU2YTI5XHU2YTJiXHU2YTJjXHU2YTJkXHU2YTJlXHU2YTMwXHU2YTMyXHU2YTMzXHU2YTM0XHU2YTM2Iiw2LCJcdTZhM2YiLDQsIlx1NmE0NVx1NmE0Nlx1NmE0OCIsNywiXHU2YTUx''@;'; put 'put ''Iiw2LCJcdTZhNWEiXSxbIjk5NDAiLCJcdTZhNWMiLDQsIlx1NmE2Mlx1NmE2M1x1NmE2NFx1NmE2NiIsMTAsIlx1NmE3MiIsNiwiXHU2YTdhXHU2YTdiXHU2YTdkXHU2YTdlXHU2YTdmXHU2YTgxXHU2YTgyXHU2YTgzXHU2YTg1Iiw4LCJcdTZhOGZcdTZhOTIiLDQsIlx1NmE5OCIsNywiXHU2''@;'; put 'put ''YWExIiw1XSxbIjk5ODAiLCJcdTZhYTdcdTZhYThcdTZhYWFcdTZhYWQiLDExNCwiXHU2YjI1XHU2YjI2XHU2YjI4Iiw2XSxbIjlhNDAiLCJcdTZiMmZcdTZiMzBcdTZiMzFcdTZiMzNcdTZiMzRcdTZiMzVcdTZiMzZcdTZiMzhcdTZiM2JcdTZiM2NcdTZiM2RcdTZiM2ZcdTZiNDBcdTZiNDFc''@;'; put 'put ''dTZiNDJcdTZiNDRcdTZiNDVcdTZiNDhcdTZiNGFcdTZiNGJcdTZiNGQiLDExLCJcdTZiNWEiLDcsIlx1NmI2OFx1NmI2OVx1NmI2YiIsMTMsIlx1NmI3YVx1NmI3ZFx1NmI3ZVx1NmI3Zlx1NmI4MFx1NmI4NVx1NmI4OCJdLFsiOWE4MCIsIlx1NmI4Y1x1NmI4ZVx1NmI4Zlx1NmI5MFx1NmI5''@;'; put 'put ''MVx1NmI5NFx1NmI5NVx1NmI5N1x1NmI5OFx1NmI5OVx1NmI5YyIsNCwiXHU2YmEyIiw3LCJcdTZiYWIiLDcsIlx1NmJiNlx1NmJiOCIsNiwiXHU2YmMwXHU2YmMzXHU2YmM0XHU2YmM2Iiw0LCJcdTZiY2NcdTZiY2VcdTZiZDBcdTZiZDFcdTZiZDhcdTZiZGFcdTZiZGMiLDQsIlx1NmJlMiIs''@;'; put 'put ''NywiXHU2YmVjXHU2YmVkXHU2YmVlXHU2YmYwXHU2YmYxXHU2YmYyXHU2YmY0XHU2YmY2XHU2YmY3XHU2YmY4XHU2YmZhXHU2YmZiXHU2YmZjXHU2YmZlIiw2LCJcdTZjMDgiLDQsIlx1NmMwZVx1NmMxMlx1NmMxN1x1NmMxY1x1NmMxZFx1NmMxZVx1NmMyMFx1NmMyM1x1NmMyNVx1NmMyYlx1''@;'; put 'put ''NmMyY1x1NmMyZFx1NmMzMVx1NmMzM1x1NmMzNlx1NmMzN1x1NmMzOVx1NmMzYVx1NmMzYlx1NmMzY1x1NmMzZVx1NmMzZlx1NmM0M1x1NmM0NFx1NmM0NVx1NmM0OFx1NmM0YiIsNCwiXHU2YzUxXHU2YzUyXHU2YzUzXHU2YzU2XHU2YzU4Il0sWyI5YjQwIiwiXHU2YzU5XHU2YzVhXHU2YzYy''@;'; put 'put ''XHU2YzYzXHU2YzY1XHU2YzY2XHU2YzY3XHU2YzZiIiw0LCJcdTZjNzFcdTZjNzNcdTZjNzVcdTZjNzdcdTZjNzhcdTZjN2FcdTZjN2JcdTZjN2NcdTZjN2ZcdTZjODBcdTZjODRcdTZjODdcdTZjOGFcdTZjOGJcdTZjOGRcdTZjOGVcdTZjOTFcdTZjOTJcdTZjOTVcdTZjOTZcdTZjOTdcdTZj''@;'; put 'put ''OThcdTZjOWFcdTZjOWNcdTZjOWRcdTZjOWVcdTZjYTBcdTZjYTJcdTZjYThcdTZjYWNcdTZjYWZcdTZjYjBcdTZjYjRcdTZjYjVcdTZjYjZcdTZjYjdcdTZjYmFcdTZjYzBcdTZjYzFcdTZjYzJcdTZjYzNcdTZjYzZcdTZjYzdcdTZjYzhcdTZjY2JcdTZjY2RcdTZjY2VcdTZjY2ZcdTZjZDFc''@;'; put 'put ''dTZjZDJcdTZjZDgiXSxbIjliODAiLCJcdTZjZDlcdTZjZGFcdTZjZGNcdTZjZGRcdTZjZGZcdTZjZTRcdTZjZTZcdTZjZTdcdTZjZTlcdTZjZWNcdTZjZWRcdTZjZjJcdTZjZjRcdTZjZjlcdTZjZmZcdTZkMDBcdTZkMDJcdTZkMDNcdTZkMDVcdTZkMDZcdTZkMDhcdTZkMDlcdTZkMGFcdTZk''@;'; put 'put ''MGRcdTZkMGZcdTZkMTBcdTZkMTFcdTZkMTNcdTZkMTRcdTZkMTVcdTZkMTZcdTZkMThcdTZkMWNcdTZkMWRcdTZkMWYiLDUsIlx1NmQyNlx1NmQyOFx1NmQyOVx1NmQyY1x1NmQyZFx1NmQyZlx1NmQzMFx1NmQzNFx1NmQzNlx1NmQzN1x1NmQzOFx1NmQzYVx1NmQzZlx1NmQ0MFx1NmQ0Mlx1''@;'; put 'put ''NmQ0NFx1NmQ0OVx1NmQ0Y1x1NmQ1MFx1NmQ1NVx1NmQ1Nlx1NmQ1N1x1NmQ1OFx1NmQ1Ylx1NmQ1ZFx1NmQ1Zlx1NmQ2MVx1NmQ2Mlx1NmQ2NFx1NmQ2NVx1NmQ2N1x1NmQ2OFx1NmQ2Ylx1NmQ2Y1x1NmQ2ZFx1NmQ3MFx1NmQ3MVx1NmQ3Mlx1NmQ3M1x1NmQ3NVx1NmQ3Nlx1NmQ3OVx1NmQ3''@;'; put 'put ''YVx1NmQ3Ylx1NmQ3ZCIsNCwiXHU2ZDgzXHU2ZDg0XHU2ZDg2XHU2ZDg3XHU2ZDhhXHU2ZDhiXHU2ZDhkXHU2ZDhmXHU2ZDkwXHU2ZDkyXHU2ZDk2Iiw0LCJcdTZkOWNcdTZkYTJcdTZkYTVcdTZkYWNcdTZkYWRcdTZkYjBcdTZkYjFcdTZkYjNcdTZkYjRcdTZkYjZcdTZkYjdcdTZkYjkiLDUs''@;'; put 'put ''Ilx1NmRjMVx1NmRjMlx1NmRjM1x1NmRjOFx1NmRjOVx1NmRjYSJdLFsiOWM0MCIsIlx1NmRjZFx1NmRjZVx1NmRjZlx1NmRkMFx1NmRkMlx1NmRkM1x1NmRkNFx1NmRkNVx1NmRkN1x1NmRkYVx1NmRkYlx1NmRkY1x1NmRkZlx1NmRlMlx1NmRlM1x1NmRlNVx1NmRlN1x1NmRlOFx1NmRlOVx1''@;'; put 'put ''NmRlYVx1NmRlZFx1NmRlZlx1NmRmMFx1NmRmMlx1NmRmNFx1NmRmNVx1NmRmNlx1NmRmOFx1NmRmYVx1NmRmZCIsNywiXHU2ZTA2XHU2ZTA3XHU2ZTA4XHU2ZTA5XHU2ZTBiXHU2ZTBmXHU2ZTEyXHU2ZTEzXHU2ZTE1XHU2ZTE4XHU2ZTE5XHU2ZTFiXHU2ZTFjXHU2ZTFlXHU2ZTFmXHU2ZTIy''@;'; put 'put ''XHU2ZTI2XHU2ZTI3XHU2ZTI4XHU2ZTJhXHU2ZTJjXHU2ZTJlXHU2ZTMwXHU2ZTMxXHU2ZTMzXHU2ZTM1Il0sWyI5YzgwIiwiXHU2ZTM2XHU2ZTM3XHU2ZTM5XHU2ZTNiIiw3LCJcdTZlNDUiLDcsIlx1NmU0Zlx1NmU1MFx1NmU1MVx1NmU1Mlx1NmU1NVx1NmU1N1x1NmU1OVx1NmU1YVx1NmU1''@;'; put 'put ''Y1x1NmU1ZFx1NmU1ZVx1NmU2MCIsMTAsIlx1NmU2Y1x1NmU2ZFx1NmU2ZiIsMTQsIlx1NmU4MFx1NmU4MVx1NmU4Mlx1NmU4NFx1NmU4N1x1NmU4OFx1NmU4YSIsNCwiXHU2ZTkxIiw2LCJcdTZlOTlcdTZlOWFcdTZlOWJcdTZlOWRcdTZlOWVcdTZlYTBcdTZlYTFcdTZlYTNcdTZlYTRcdTZl''@;'; put 'put ''YTZcdTZlYThcdTZlYTlcdTZlYWJcdTZlYWNcdTZlYWRcdTZlYWVcdTZlYjBcdTZlYjNcdTZlYjVcdTZlYjhcdTZlYjlcdTZlYmNcdTZlYmVcdTZlYmZcdTZlYzBcdTZlYzNcdTZlYzRcdTZlYzVcdTZlYzZcdTZlYzhcdTZlYzlcdTZlY2FcdTZlY2NcdTZlY2RcdTZlY2VcdTZlZDBcdTZlZDJc''@;'; put 'put ''dTZlZDZcdTZlZDhcdTZlZDlcdTZlZGJcdTZlZGNcdTZlZGRcdTZlZTNcdTZlZTdcdTZlZWEiLDVdLFsiOWQ0MCIsIlx1NmVmMFx1NmVmMVx1NmVmMlx1NmVmM1x1NmVmNVx1NmVmNlx1NmVmN1x1NmVmOFx1NmVmYSIsNywiXHU2ZjAzXHU2ZjA0XHU2ZjA1XHU2ZjA3XHU2ZjA4XHU2ZjBhIiw0''@;'; put 'put ''LCJcdTZmMTBcdTZmMTFcdTZmMTJcdTZmMTYiLDksIlx1NmYyMVx1NmYyMlx1NmYyM1x1NmYyNVx1NmYyNlx1NmYyN1x1NmYyOFx1NmYyY1x1NmYyZVx1NmYzMFx1NmYzMlx1NmYzNFx1NmYzNVx1NmYzNyIsNiwiXHU2ZjNmXHU2ZjQwXHU2ZjQxXHU2ZjQyIl0sWyI5ZDgwIiwiXHU2ZjQzXHU2''@;'; put 'put ''ZjQ0XHU2ZjQ1XHU2ZjQ4XHU2ZjQ5XHU2ZjRhXHU2ZjRjXHU2ZjRlIiw5LCJcdTZmNTlcdTZmNWFcdTZmNWJcdTZmNWRcdTZmNWZcdTZmNjBcdTZmNjFcdTZmNjNcdTZmNjRcdTZmNjVcdTZmNjciLDUsIlx1NmY2Zlx1NmY3MFx1NmY3MVx1NmY3M1x1NmY3NVx1NmY3Nlx1NmY3N1x1NmY3OVx1''@;'; put 'put ''NmY3Ylx1NmY3ZCIsNiwiXHU2Zjg1XHU2Zjg2XHU2Zjg3XHU2ZjhhXHU2ZjhiXHU2ZjhmIiwxMiwiXHU2ZjlkXHU2ZjllXHU2ZjlmXHU2ZmEwXHU2ZmEyIiw0LCJcdTZmYTgiLDEwLCJcdTZmYjRcdTZmYjVcdTZmYjdcdTZmYjhcdTZmYmEiLDUsIlx1NmZjMVx1NmZjMyIsNSwiXHU2ZmNhIiw2''@;'; put 'put ''LCJcdTZmZDMiLDEwLCJcdTZmZGZcdTZmZTJcdTZmZTNcdTZmZTRcdTZmZTUiXSxbIjllNDAiLCJcdTZmZTYiLDcsIlx1NmZmMCIsMzIsIlx1NzAxMiIsNywiXHU3MDFjIiw2LCJcdTcwMjQiLDZdLFsiOWU4MCIsIlx1NzAyYiIsOSwiXHU3MDM2XHU3MDM3XHU3MDM4XHU3MDNhIiwxNywiXHU3''@;'; put 'put ''MDRkXHU3MDRlXHU3MDUwIiwxMywiXHU3MDVmIiwxMSwiXHU3MDZlXHU3MDcxXHU3MDcyXHU3MDczXHU3MDc0XHU3MDc3XHU3MDc5XHU3MDdhXHU3MDdiXHU3MDdkXHU3MDgxXHU3MDgyXHU3MDgzXHU3MDg0XHU3MDg2XHU3MDg3XHU3MDg4XHU3MDhiXHU3MDhjXHU3MDhkXHU3MDhmXHU3MDkw''@;'; put 'put ''XHU3MDkxXHU3MDkzXHU3MDk3XHU3MDk4XHU3MDlhXHU3MDliXHU3MDllIiwxMiwiXHU3MGIwXHU3MGIyXHU3MGI0XHU3MGI1XHU3MGI2XHU3MGJhXHU3MGJlXHU3MGJmXHU3MGM0XHU3MGM1XHU3MGM2XHU3MGM3XHU3MGM5XHU3MGNiIiwxMiwiXHU3MGRhIl0sWyI5ZjQwIiwiXHU3MGRjXHU3''@;'; put 'put ''MGRkXHU3MGRlXHU3MGUwXHU3MGUxXHU3MGUyXHU3MGUzXHU3MGU1XHU3MGVhXHU3MGVlXHU3MGYwIiw2LCJcdTcwZjhcdTcwZmFcdTcwZmJcdTcwZmNcdTcwZmUiLDEwLCJcdTcxMGIiLDQsIlx1NzExMVx1NzExMlx1NzExNFx1NzExN1x1NzExYiIsMTAsIlx1NzEyNyIsNywiXHU3MTMyXHU3''@;'; put 'put ''MTMzXHU3MTM0Il0sWyI5ZjgwIiwiXHU3MTM1XHU3MTM3IiwxMywiXHU3MTQ2XHU3MTQ3XHU3MTQ4XHU3MTQ5XHU3MTRiXHU3MTRkXHU3MTRmIiwxMiwiXHU3MTVkXHU3MTVmIiw0LCJcdTcxNjVcdTcxNjkiLDQsIlx1NzE2Zlx1NzE3MFx1NzE3MVx1NzE3NFx1NzE3NVx1NzE3Nlx1NzE3N1x1''@;'; put 'put ''NzE3OVx1NzE3Ylx1NzE3Y1x1NzE3ZSIsNSwiXHU3MTg1Iiw0LCJcdTcxOGJcdTcxOGNcdTcxOGRcdTcxOGVcdTcxOTBcdTcxOTFcdTcxOTJcdTcxOTNcdTcxOTVcdTcxOTZcdTcxOTdcdTcxOWEiLDQsIlx1NzFhMSIsNiwiXHU3MWE5XHU3MWFhXHU3MWFiXHU3MWFkIiw1LCJcdTcxYjRcdTcx''@;'; put 'put ''YjZcdTcxYjdcdTcxYjhcdTcxYmEiLDgsIlx1NzFjNCIsOSwiXHU3MWNmIiw0XSxbImEwNDAiLCJcdTcxZDYiLDksIlx1NzFlMVx1NzFlMlx1NzFlM1x1NzFlNFx1NzFlNlx1NzFlOCIsNSwiXHU3MWVmIiw5LCJcdTcxZmEiLDExLCJcdTcyMDciLDE5XSxbImEwODAiLCJcdTcyMWJcdTcyMWNc''@;'; put 'put ''dTcyMWUiLDksIlx1NzIyOVx1NzIyYlx1NzIyZFx1NzIyZVx1NzIyZlx1NzIzMlx1NzIzM1x1NzIzNFx1NzIzYVx1NzIzY1x1NzIzZVx1NzI0MCIsNiwiXHU3MjQ5XHU3MjRhXHU3MjRiXHU3MjRlXHU3MjRmXHU3MjUwXHU3MjUxXHU3MjUzXHU3MjU0XHU3MjU1XHU3MjU3XHU3MjU4XHU3MjVh''@;'; put 'put ''XHU3MjVjXHU3MjVlXHU3MjYwXHU3MjYzXHU3MjY0XHU3MjY1XHU3MjY4XHU3MjZhXHU3MjZiXHU3MjZjXHU3MjZkXHU3MjcwXHU3MjcxXHU3MjczXHU3Mjc0XHU3Mjc2XHU3Mjc3XHU3Mjc4XHU3MjdiXHU3MjdjXHU3MjdkXHU3MjgyXHU3MjgzXHU3Mjg1Iiw0LCJcdTcyOGNcdTcyOGVcdTcy''@;'; put 'put ''OTBcdTcyOTFcdTcyOTMiLDExLCJcdTcyYTAiLDExLCJcdTcyYWVcdTcyYjFcdTcyYjJcdTcyYjNcdTcyYjVcdTcyYmEiLDYsIlx1NzJjNVx1NzJjNlx1NzJjN1x1NzJjOVx1NzJjYVx1NzJjYlx1NzJjY1x1NzJjZlx1NzJkMVx1NzJkM1x1NzJkNFx1NzJkNVx1NzJkNlx1NzJkOFx1NzJkYVx1''@;'; put 'put ''NzJkYiJdLFsiYTFhMSIsIlx1MzAwMFx1MzAwMVx1MzAwMlx4YjdcdTAyYzlcdTAyYzdceGE4XHUzMDAzXHUzMDA1XHUyMDE0XHVmZjVlXHUyMDE2XHUyMDI2XHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUzMDE0XHUzMDE1XHUzMDA4Iiw3LCJcdTMwMTZcdTMwMTdcdTMwMTBcdTMwMTFceGIx''@;'; put 'put ''XHhkN1x4ZjdcdTIyMzZcdTIyMjdcdTIyMjhcdTIyMTFcdTIyMGZcdTIyMmFcdTIyMjlcdTIyMDhcdTIyMzdcdTIyMWFcdTIyYTVcdTIyMjVcdTIyMjBcdTIzMTJcdTIyOTlcdTIyMmJcdTIyMmVcdTIyNjFcdTIyNGNcdTIyNDhcdTIyM2RcdTIyMWRcdTIyNjBcdTIyNmVcdTIyNmZcdTIyNjRc''@;'; put 'put ''dTIyNjVcdTIyMWVcdTIyMzVcdTIyMzRcdTI2NDJcdTI2NDBceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHVmZjA0XHhhNFx1ZmZlMFx1ZmZlMVx1MjAzMFx4YTdcdTIxMTZcdTI2MDZcdTI2MDVcdTI1Y2JcdTI1Y2ZcdTI1Y2VcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YjNcdTI1YjJcdTIw''@;'; put 'put ''M2JcdTIxOTJcdTIxOTBcdTIxOTFcdTIxOTNcdTMwMTMiXSxbImEyYTEiLCJcdTIxNzAiLDldLFsiYTJiMSIsIlx1MjQ4OCIsMTksIlx1MjQ3NCIsMTksIlx1MjQ2MCIsOV0sWyJhMmU1IiwiXHUzMjIwIiw5XSxbImEyZjEiLCJcdTIxNjAiLDExXSxbImEzYTEiLCJcdWZmMDFcdWZmMDJcdWZm''@;'; put 'put ''MDNcdWZmZTVcdWZmMDUiLDg4LCJcdWZmZTMiXSxbImE0YTEiLCJcdTMwNDEiLDgyXSxbImE1YTEiLCJcdTMwYTEiLDg1XSxbImE2YTEiLCJcdTAzOTEiLDE2LCJcdTAzYTMiLDZdLFsiYTZjMSIsIlx1MDNiMSIsMTYsIlx1MDNjMyIsNl0sWyJhNmUwIiwiXHVmZTM1XHVmZTM2XHVmZTM5XHVm''@;'; put 'put ''ZTNhXHVmZTNmXHVmZTQwXHVmZTNkXHVmZTNlXHVmZTQxXHVmZTQyXHVmZTQzXHVmZTQ0Il0sWyJhNmVlIiwiXHVmZTNiXHVmZTNjXHVmZTM3XHVmZTM4XHVmZTMxIl0sWyJhNmY0IiwiXHVmZTMzXHVmZTM0Il0sWyJhN2ExIiwiXHUwNDEwIiw1LCJcdTA0MDFcdTA0MTYiLDI1XSxbImE3ZDEi''@;'; put 'put ''LCJcdTA0MzAiLDUsIlx1MDQ1MVx1MDQzNiIsMjVdLFsiYTg0MCIsIlx1MDJjYVx1MDJjYlx1MDJkOVx1MjAxM1x1MjAxNVx1MjAyNVx1MjAzNVx1MjEwNVx1MjEwOVx1MjE5Nlx1MjE5N1x1MjE5OFx1MjE5OVx1MjIxNVx1MjIxZlx1MjIyM1x1MjI1Mlx1MjI2Nlx1MjI2N1x1MjJiZlx1MjU1''@;'; put 'put ''MCIsMzUsIlx1MjU4MSIsNl0sWyJhODgwIiwiXHUyNTg4Iiw3LCJcdTI1OTNcdTI1OTRcdTI1OTVcdTI1YmNcdTI1YmRcdTI1ZTJcdTI1ZTNcdTI1ZTRcdTI1ZTVcdTI2MDlcdTIyOTVcdTMwMTJcdTMwMWRcdTMwMWUiXSxbImE4YTEiLCJcdTAxMDFceGUxXHUwMWNlXHhlMFx1MDExM1x4ZTlc''@;'; put 'put ''dTAxMWJceGU4XHUwMTJiXHhlZFx1MDFkMFx4ZWNcdTAxNGRceGYzXHUwMWQyXHhmMlx1MDE2Ylx4ZmFcdTAxZDRceGY5XHUwMWQ2XHUwMWQ4XHUwMWRhXHUwMWRjXHhmY1x4ZWFcdTAyNTEiXSxbImE4YmQiLCJcdTAxNDRcdTAxNDgiXSxbImE4YzAiLCJcdTAyNjEiXSxbImE4YzUiLCJcdTMx''@;'; put 'put ''MDUiLDM2XSxbImE5NDAiLCJcdTMwMjEiLDgsIlx1MzJhM1x1MzM4ZVx1MzM4Zlx1MzM5Y1x1MzM5ZFx1MzM5ZVx1MzNhMVx1MzNjNFx1MzNjZVx1MzNkMVx1MzNkMlx1MzNkNVx1ZmUzMFx1ZmZlMlx1ZmZlNCJdLFsiYTk1OSIsIlx1MjEyMVx1MzIzMSJdLFsiYTk1YyIsIlx1MjAxMCJdLFsi''@;'; put 'put ''YTk2MCIsIlx1MzBmY1x1MzA5Ylx1MzA5Y1x1MzBmZFx1MzBmZVx1MzAwNlx1MzA5ZFx1MzA5ZVx1ZmU0OSIsOSwiXHVmZTU0XHVmZTU1XHVmZTU2XHVmZTU3XHVmZTU5Iiw4XSxbImE5ODAiLCJcdWZlNjIiLDQsIlx1ZmU2OFx1ZmU2OVx1ZmU2YVx1ZmU2YiJdLFsiYTk5NiIsIlx1MzAwNyJd''@;'; put 'put ''LFsiYTlhNCIsIlx1MjUwMCIsNzVdLFsiYWE0MCIsIlx1NzJkY1x1NzJkZFx1NzJkZlx1NzJlMiIsNSwiXHU3MmVhXHU3MmViXHU3MmY1XHU3MmY2XHU3MmY5XHU3MmZkXHU3MmZlXHU3MmZmXHU3MzAwXHU3MzAyXHU3MzA0Iiw1LCJcdTczMGJcdTczMGNcdTczMGRcdTczMGZcdTczMTBcdTcz''@;'; put 'put ''MTFcdTczMTJcdTczMTRcdTczMThcdTczMTlcdTczMWFcdTczMWZcdTczMjBcdTczMjNcdTczMjRcdTczMjZcdTczMjdcdTczMjhcdTczMmRcdTczMmZcdTczMzBcdTczMzJcdTczMzNcdTczMzVcdTczMzZcdTczM2FcdTczM2JcdTczM2NcdTczM2RcdTczNDAiLDhdLFsiYWE4MCIsIlx1NzM0''@;'; put 'put ''OVx1NzM0YVx1NzM0Ylx1NzM0Y1x1NzM0ZVx1NzM0Zlx1NzM1MVx1NzM1M1x1NzM1NFx1NzM1NVx1NzM1Nlx1NzM1OCIsNywiXHU3MzYxIiwxMCwiXHU3MzZlXHU3MzcwXHU3MzcxIl0sWyJhYjQwIiwiXHU3MzcyIiwxMSwiXHU3MzdmIiw0LCJcdTczODVcdTczODZcdTczODhcdTczOGFcdTcz''@;'; put 'put ''OGNcdTczOGRcdTczOGZcdTczOTBcdTczOTJcdTczOTNcdTczOTRcdTczOTVcdTczOTdcdTczOThcdTczOTlcdTczOWFcdTczOWNcdTczOWRcdTczOWVcdTczYTBcdTczYTFcdTczYTMiLDUsIlx1NzNhYVx1NzNhY1x1NzNhZFx1NzNiMVx1NzNiNFx1NzNiNVx1NzNiNlx1NzNiOFx1NzNiOVx1''@;'; put 'put ''NzNiY1x1NzNiZFx1NzNiZVx1NzNiZlx1NzNjMVx1NzNjMyIsNF0sWyJhYjgwIiwiXHU3M2NiXHU3M2NjXHU3M2NlXHU3M2QyIiw2LCJcdTczZGFcdTczZGJcdTczZGNcdTczZGRcdTczZGZcdTczZTFcdTczZTJcdTczZTNcdTczZTRcdTczZTZcdTczZThcdTczZWFcdTczZWJcdTczZWNcdTcz''@;'; put 'put ''ZWVcdTczZWZcdTczZjBcdTczZjFcdTczZjMiLDRdLFsiYWM0MCIsIlx1NzNmOCIsMTAsIlx1NzQwNFx1NzQwN1x1NzQwOFx1NzQwYlx1NzQwY1x1NzQwZFx1NzQwZVx1NzQxMSIsOCwiXHU3NDFjIiw1LCJcdTc0MjNcdTc0MjRcdTc0MjdcdTc0MjlcdTc0MmJcdTc0MmRcdTc0MmZcdTc0MzFc''@;'; put 'put ''dTc0MzJcdTc0MzciLDQsIlx1NzQzZFx1NzQzZVx1NzQzZlx1NzQ0MFx1NzQ0MiIsMTFdLFsiYWM4MCIsIlx1NzQ0ZSIsNiwiXHU3NDU2XHU3NDU4XHU3NDVkXHU3NDYwIiwxMiwiXHU3NDZlXHU3NDZmXHU3NDcxIiw0LCJcdTc0NzhcdTc0NzlcdTc0N2EiXSxbImFkNDAiLCJcdTc0N2JcdTc0''@;'; put 'put ''N2NcdTc0N2RcdTc0N2ZcdTc0ODJcdTc0ODRcdTc0ODVcdTc0ODZcdTc0ODhcdTc0ODlcdTc0OGFcdTc0OGNcdTc0OGRcdTc0OGZcdTc0OTEiLDEwLCJcdTc0OWRcdTc0OWYiLDcsIlx1NzRhYSIsMTUsIlx1NzRiYiIsMTJdLFsiYWQ4MCIsIlx1NzRjOCIsOSwiXHU3NGQzIiw4LCJcdTc0ZGRc''@;'; put 'put ''dTc0ZGZcdTc0ZTFcdTc0ZTVcdTc0ZTciLDYsIlx1NzRmMFx1NzRmMVx1NzRmMiJdLFsiYWU0MCIsIlx1NzRmM1x1NzRmNVx1NzRmOCIsNiwiXHU3NTAwXHU3NTAxXHU3NTAyXHU3NTAzXHU3NTA1Iiw3LCJcdTc1MGVcdTc1MTBcdTc1MTJcdTc1MTRcdTc1MTVcdTc1MTZcdTc1MTdcdTc1MWJc''@;'; put 'put ''dTc1MWRcdTc1MWVcdTc1MjAiLDQsIlx1NzUyNlx1NzUyN1x1NzUyYVx1NzUyZVx1NzUzNFx1NzUzNlx1NzUzOVx1NzUzY1x1NzUzZFx1NzUzZlx1NzU0MVx1NzU0Mlx1NzU0M1x1NzU0NFx1NzU0Nlx1NzU0N1x1NzU0OVx1NzU0YVx1NzU0ZFx1NzU1MFx1NzU1MVx1NzU1Mlx1NzU1M1x1NzU1''@;'; put 'put ''NVx1NzU1Nlx1NzU1N1x1NzU1OCJdLFsiYWU4MCIsIlx1NzU1ZCIsNywiXHU3NTY3XHU3NTY4XHU3NTY5XHU3NTZiIiw2LCJcdTc1NzNcdTc1NzVcdTc1NzZcdTc1NzdcdTc1N2EiLDQsIlx1NzU4MFx1NzU4MVx1NzU4Mlx1NzU4NFx1NzU4NVx1NzU4NyJdLFsiYWY0MCIsIlx1NzU4OFx1NzU4''@;'; put 'put ''OVx1NzU4YVx1NzU4Y1x1NzU4ZFx1NzU4ZVx1NzU5MFx1NzU5M1x1NzU5NVx1NzU5OFx1NzU5Ylx1NzU5Y1x1NzU5ZVx1NzVhMlx1NzVhNiIsNCwiXHU3NWFkXHU3NWI2XHU3NWI3XHU3NWJhXHU3NWJiXHU3NWJmXHU3NWMwXHU3NWMxXHU3NWM2XHU3NWNiXHU3NWNjXHU3NWNlXHU3NWNmXHU3''@;'; put 'put ''NWQwXHU3NWQxXHU3NWQzXHU3NWQ3XHU3NWQ5XHU3NWRhXHU3NWRjXHU3NWRkXHU3NWRmXHU3NWUwXHU3NWUxXHU3NWU1XHU3NWU5XHU3NWVjXHU3NWVkXHU3NWVlXHU3NWVmXHU3NWYyXHU3NWYzXHU3NWY1XHU3NWY2XHU3NWY3XHU3NWY4XHU3NWZhXHU3NWZiXHU3NWZkXHU3NWZlXHU3NjAy''@;'; put 'put ''XHU3NjA0XHU3NjA2XHU3NjA3Il0sWyJhZjgwIiwiXHU3NjA4XHU3NjA5XHU3NjBiXHU3NjBkXHU3NjBlXHU3NjBmXHU3NjExXHU3NjEyXHU3NjEzXHU3NjE0XHU3NjE2XHU3NjFhXHU3NjFjXHU3NjFkXHU3NjFlXHU3NjIxXHU3NjIzXHU3NjI3XHU3NjI4XHU3NjJjXHU3NjJlXHU3NjJmXHU3''@;'; put 'put ''NjMxXHU3NjMyXHU3NjM2XHU3NjM3XHU3NjM5XHU3NjNhXHU3NjNiXHU3NjNkXHU3NjQxXHU3NjQyXHU3NjQ0Il0sWyJiMDQwIiwiXHU3NjQ1Iiw2LCJcdTc2NGUiLDUsIlx1NzY1NVx1NzY1NyIsNCwiXHU3NjVkXHU3NjVmXHU3NjYwXHU3NjYxXHU3NjYyXHU3NjY0Iiw2LCJcdTc2NmNcdTc2''@;'; put 'put ''NmRcdTc2NmVcdTc2NzAiLDcsIlx1NzY3OVx1NzY3YVx1NzY3Y1x1NzY3Zlx1NzY4MFx1NzY4MVx1NzY4M1x1NzY4NVx1NzY4OVx1NzY4YVx1NzY4Y1x1NzY4ZFx1NzY4Zlx1NzY5MFx1NzY5Mlx1NzY5NFx1NzY5NVx1NzY5N1x1NzY5OFx1NzY5YVx1NzY5YiJdLFsiYjA4MCIsIlx1NzY5YyIs''@;'; put 'put ''NywiXHU3NmE1Iiw4LCJcdTc2YWZcdTc2YjBcdTc2YjNcdTc2YjUiLDksIlx1NzZjMFx1NzZjMVx1NzZjM1x1NTU0YVx1OTYzZlx1NTdjM1x1NjMyOFx1NTRjZVx1NTUwOVx1NTRjMFx1NzY5MVx1NzY0Y1x1ODUzY1x1NzdlZVx1ODI3ZVx1Nzg4ZFx1NzIzMVx1OTY5OFx1OTc4ZFx1NmMyOFx1''@;'; put 'put ''NWI4OVx1NGZmYVx1NjMwOVx1NjY5N1x1NWNiOFx1ODBmYVx1Njg0OFx1ODBhZVx1NjYwMlx1NzZjZVx1NTFmOVx1NjU1Nlx1NzFhY1x1N2ZmMVx1ODg4NFx1NTBiMlx1NTk2NVx1NjFjYVx1NmZiM1x1ODJhZFx1NjM0Y1x1NjI1Mlx1NTNlZFx1NTQyN1x1N2IwNlx1NTE2Ylx1NzVhNFx1NWRm''@;'; put 'put ''NFx1NjJkNFx1OGRjYlx1OTc3Nlx1NjI4YVx1ODAxOVx1NTc1ZFx1OTczOFx1N2Y2Mlx1NzIzOFx1NzY3ZFx1NjdjZlx1NzY3ZVx1NjQ0Nlx1NGY3MFx1OGQyNVx1NjJkY1x1N2ExN1x1NjU5MVx1NzNlZFx1NjQyY1x1NjI3M1x1ODIyY1x1OTg4MVx1Njc3Zlx1NzI0OFx1NjI2ZVx1NjJjY1x1''@;'; put 'put ''NGYzNFx1NzRlM1x1NTM0YVx1NTI5ZVx1N2VjYVx1OTBhNlx1NWUyZVx1Njg4Nlx1Njk5Y1x1ODE4MFx1N2VkMVx1NjhkMlx1NzhjNVx1ODY4Y1x1OTU1MVx1NTA4ZFx1OGMyNFx1ODJkZVx1ODBkZVx1NTMwNVx1ODkxMlx1NTI2NSJdLFsiYjE0MCIsIlx1NzZjNFx1NzZjN1x1NzZjOVx1NzZj''@;'; put 'put ''Ylx1NzZjY1x1NzZkM1x1NzZkNVx1NzZkOVx1NzZkYVx1NzZkY1x1NzZkZFx1NzZkZVx1NzZlMCIsNCwiXHU3NmU2Iiw3LCJcdTc2ZjBcdTc2ZjNcdTc2ZjVcdTc2ZjZcdTc2ZjdcdTc2ZmFcdTc2ZmJcdTc2ZmRcdTc2ZmZcdTc3MDBcdTc3MDJcdTc3MDNcdTc3MDVcdTc3MDZcdTc3MGFcdTc3''@;'; put 'put ''MGNcdTc3MGUiLDEwLCJcdTc3MWJcdTc3MWNcdTc3MWRcdTc3MWVcdTc3MjFcdTc3MjNcdTc3MjRcdTc3MjVcdTc3MjdcdTc3MmFcdTc3MmIiXSxbImIxODAiLCJcdTc3MmNcdTc3MmVcdTc3MzAiLDQsIlx1NzczOVx1NzczYlx1NzczZFx1NzczZVx1NzczZlx1Nzc0Mlx1Nzc0NFx1Nzc0NVx1''@;'; put 'put ''Nzc0Nlx1Nzc0OCIsNywiXHU3NzUyIiw3LCJcdTc3NWNcdTg1ODRcdTk2ZjlcdTRmZGRcdTU4MjFcdTk5NzFcdTViOWRcdTYyYjFcdTYyYTVcdTY2YjRcdThjNzlcdTljOGRcdTcyMDZcdTY3NmZcdTc4OTFcdTYwYjJcdTUzNTFcdTUzMTdcdThmODhcdTgwY2NcdThkMWRcdTk0YTFcdTUwMGRc''@;'; put 'put ''dTcyYzhcdTU5MDdcdTYwZWJcdTcxMTlcdTg4YWJcdTU5NTRcdTgyZWZcdTY3MmNcdTdiMjhcdTVkMjlcdTdlZjdcdTc1MmRcdTZjZjVcdThlNjZcdThmZjhcdTkwM2NcdTlmM2JcdTZiZDRcdTkxMTlcdTdiMTRcdTVmN2NcdTc4YTdcdTg0ZDZcdTg1M2RcdTZiZDVcdTZiZDlcdTZiZDZcdTVl''@;'; put 'put ''MDFcdTVlODdcdTc1ZjlcdTk1ZWRcdTY1NWRcdTVmMGFcdTVmYzVcdThmOWZcdTU4YzFcdTgxYzJcdTkwN2ZcdTk2NWJcdTk3YWRcdThmYjlcdTdmMTZcdThkMmNcdTYyNDFcdTRmYmZcdTUzZDhcdTUzNWVcdThmYThcdThmYTlcdThmYWJcdTkwNGRcdTY4MDdcdTVmNmFcdTgxOThcdTg4Njhc''@;'; put 'put ''dTljZDZcdTYxOGJcdTUyMmJcdTc2MmFcdTVmNmNcdTY1OGNcdTZmZDJcdTZlZThcdTViYmVcdTY0NDhcdTUxNzVcdTUxYjBcdTY3YzRcdTRlMTlcdTc5YzlcdTk5N2NcdTcwYjMiXSxbImIyNDAiLCJcdTc3NWRcdTc3NWVcdTc3NWZcdTc3NjBcdTc3NjRcdTc3NjdcdTc3NjlcdTc3NmFcdTc3''@;'; put 'put ''NmQiLDExLCJcdTc3N2FcdTc3N2JcdTc3N2NcdTc3ODFcdTc3ODJcdTc3ODNcdTc3ODYiLDUsIlx1Nzc4Zlx1Nzc5MFx1Nzc5MyIsMTEsIlx1NzdhMVx1NzdhM1x1NzdhNFx1NzdhNlx1NzdhOFx1NzdhYlx1NzdhZFx1NzdhZVx1NzdhZlx1NzdiMVx1NzdiMlx1NzdiNFx1NzdiNiIsNF0sWyJi''@;'; put 'put ''MjgwIiwiXHU3N2JjXHU3N2JlXHU3N2MwIiwxMiwiXHU3N2NlIiw4LCJcdTc3ZDhcdTc3ZDlcdTc3ZGFcdTc3ZGQiLDQsIlx1NzdlNFx1NzVjNVx1NWU3Nlx1NzNiYlx1ODNlMFx1NjRhZFx1NjJlOFx1OTRiNVx1NmNlMlx1NTM1YVx1NTJjM1x1NjQwZlx1OTRjMlx1N2I5NFx1NGYyZlx1NWUx''@;'; put 'put ''Ylx1ODIzNlx1ODExNlx1ODE4YVx1NmUyNFx1NmNjYVx1OWE3M1x1NjM1NVx1NTM1Y1x1NTRmYVx1ODg2NVx1NTdlMFx1NGUwZFx1NWUwM1x1NmI2NVx1N2MzZlx1OTBlOFx1NjAxNlx1NjRlNlx1NzMxY1x1ODhjMVx1Njc1MFx1NjI0ZFx1OGQyMlx1Nzc2Y1x1OGUyOVx1OTFjN1x1NWY2OVx1''@;'; put 'put ''ODNkY1x1ODUyMVx1OTkxMFx1NTNjMlx1ODY5NVx1NmI4Ylx1NjBlZFx1NjBlOFx1NzA3Zlx1ODJjZFx1ODIzMVx1NGVkM1x1NmNhN1x1ODVjZlx1NjRjZFx1N2NkOVx1NjlmZFx1NjZmOVx1ODM0OVx1NTM5NVx1N2I1Nlx1NGZhN1x1NTE4Y1x1NmQ0Ylx1NWM0Mlx1OGU2ZFx1NjNkMlx1NTNj''@;'; put 'put ''OVx1ODMyY1x1ODMzNlx1NjdlNVx1NzhiNFx1NjQzZFx1NWJkZlx1NWM5NFx1NWRlZVx1OGJlN1x1NjJjNlx1NjdmNFx1OGM3YVx1NjQwMFx1NjNiYVx1ODc0OVx1OTk4Ylx1OGMxN1x1N2YyMFx1OTRmMlx1NGVhN1x1OTYxMFx1OThhNFx1NjYwY1x1NzMxNiJdLFsiYjM0MCIsIlx1NzdlNlx1''@;'; put 'put ''NzdlOFx1NzdlYVx1NzdlZlx1NzdmMFx1NzdmMVx1NzdmMlx1NzdmNFx1NzdmNVx1NzdmN1x1NzdmOVx1NzdmYVx1NzdmYlx1NzdmY1x1NzgwMyIsNSwiXHU3ODBhXHU3ODBiXHU3ODBlXHU3ODBmXHU3ODEwXHU3ODEzXHU3ODE1XHU3ODE5XHU3ODFiXHU3ODFlXHU3ODIwXHU3ODIxXHU3ODIy''@;'; put 'put ''XHU3ODI0XHU3ODI4XHU3ODJhXHU3ODJiXHU3ODJlXHU3ODJmXHU3ODMxXHU3ODMyXHU3ODMzXHU3ODM1XHU3ODM2XHU3ODNkXHU3ODNmXHU3ODQxXHU3ODQyXHU3ODQzXHU3ODQ0XHU3ODQ2XHU3ODQ4XHU3ODQ5XHU3ODRhXHU3ODRiXHU3ODRkXHU3ODRmXHU3ODUxXHU3ODUzXHU3ODU0XHU3''@;'; put 'put ''ODU4XHU3ODU5XHU3ODVhIl0sWyJiMzgwIiwiXHU3ODViXHU3ODVjXHU3ODVlIiwxMSwiXHU3ODZmIiw3LCJcdTc4NzhcdTc4NzlcdTc4N2FcdTc4N2JcdTc4N2QiLDYsIlx1NTczYVx1NWMxZFx1NWUzOFx1OTU3Zlx1NTA3Zlx1ODBhMFx1NTM4Mlx1NjU1ZVx1NzU0NVx1NTUzMVx1NTAyMVx1''@;'; put 'put ''OGQ4NVx1NjI4NFx1OTQ5ZVx1NjcxZFx1NTYzMlx1NmY2ZVx1NWRlMlx1NTQzNVx1NzA5Mlx1OGY2Nlx1NjI2Zlx1NjRhNFx1NjNhM1x1NWY3Ylx1NmY4OFx1OTBmNFx1ODFlM1x1OGZiMFx1NWMxOFx1NjY2OFx1NWZmMVx1NmM4OVx1OTY0OFx1OGQ4MVx1ODg2Y1x1NjQ5MVx1NzlmMFx1NTdj''@;'; put 'put ''ZVx1NmE1OVx1NjIxMFx1NTQ0OFx1NGU1OFx1N2EwYlx1NjBlOVx1NmY4NFx1OGJkYVx1NjI3Zlx1OTAxZVx1OWE4Ylx1NzllNFx1NTQwM1x1NzVmNFx1NjMwMVx1NTMxOVx1NmM2MFx1OGZkZlx1NWYxYlx1OWE3MFx1ODAzYlx1OWY3Zlx1NGY4OFx1NWMzYVx1OGQ2NFx1N2ZjNVx1NjVhNVx1''@;'; put 'put ''NzBiZFx1NTE0NVx1NTFiMlx1ODY2Ylx1NWQwN1x1NWJhMFx1NjJiZFx1OTE2Y1x1NzU3NFx1OGUwY1x1N2EyMFx1NjEwMVx1N2I3OVx1NGVjN1x1N2VmOFx1Nzc4NVx1NGUxMVx1ODFlZFx1NTIxZFx1NTFmYVx1NmE3MVx1NTNhOFx1OGU4N1x1OTUwNFx1OTZjZlx1NmVjMVx1OTY2NFx1Njk1''@;'; put 'put ''YSJdLFsiYjQ0MCIsIlx1Nzg4NFx1Nzg4NVx1Nzg4Nlx1Nzg4OFx1Nzg4YVx1Nzg4Ylx1Nzg4Zlx1Nzg5MFx1Nzg5Mlx1Nzg5NFx1Nzg5NVx1Nzg5Nlx1Nzg5OVx1Nzg5ZFx1Nzg5ZVx1NzhhMFx1NzhhMlx1NzhhNFx1NzhhNlx1NzhhOCIsNywiXHU3OGI1XHU3OGI2XHU3OGI3XHU3OGI4XHU3''@;'; put 'put ''OGJhXHU3OGJiXHU3OGJjXHU3OGJkXHU3OGJmXHU3OGMwXHU3OGMyXHU3OGMzXHU3OGM0XHU3OGM2XHU3OGM3XHU3OGM4XHU3OGNjXHU3OGNkXHU3OGNlXHU3OGNmXHU3OGQxXHU3OGQyXHU3OGQzXHU3OGQ2XHU3OGQ3XHU3OGQ4XHU3OGRhIiw5XSxbImI0ODAiLCJcdTc4ZTRcdTc4ZTVcdTc4''@;'; put 'put ''ZTZcdTc4ZTdcdTc4ZTlcdTc4ZWFcdTc4ZWJcdTc4ZWQiLDQsIlx1NzhmM1x1NzhmNVx1NzhmNlx1NzhmOFx1NzhmOVx1NzhmYiIsNSwiXHU3OTAyXHU3OTAzXHU3OTA0XHU3OTA2Iiw2LCJcdTc4NDBcdTUwYThcdTc3ZDdcdTY0MTBcdTg5ZTZcdTU5MDRcdTYzZTNcdTVkZGRcdTdhN2ZcdTY5''@;'; put 'put ''M2RcdTRmMjBcdTgyMzlcdTU1OThcdTRlMzJcdTc1YWVcdTdhOTdcdTVlNjJcdTVlOGFcdTk1ZWZcdTUyMWJcdTU0MzlcdTcwOGFcdTYzNzZcdTk1MjRcdTU3ODJcdTY2MjVcdTY5M2ZcdTkxODdcdTU1MDdcdTZkZjNcdTdlYWZcdTg4MjJcdTYyMzNcdTdlZjBcdTc1YjVcdTgzMjhcdTc4YzFc''@;'; put 'put ''dTk2Y2NcdThmOWVcdTYxNDhcdTc0ZjdcdThiY2RcdTZiNjRcdTUyM2FcdThkNTBcdTZiMjFcdTgwNmFcdTg0NzFcdTU2ZjFcdTUzMDZcdTRlY2VcdTRlMWJcdTUxZDFcdTdjOTdcdTkxOGJcdTdjMDdcdTRmYzNcdThlN2ZcdTdiZTFcdTdhOWNcdTY0NjdcdTVkMTRcdTUwYWNcdTgxMDZcdTc2''@;'; put 'put ''MDFcdTdjYjlcdTZkZWNcdTdmZTBcdTY3NTFcdTViNThcdTViZjhcdTc4Y2JcdTY0YWVcdTY0MTNcdTYzYWFcdTYzMmJcdTk1MTlcdTY0MmRcdThmYmVcdTdiNTRcdTc2MjlcdTYyNTNcdTU5MjdcdTU0NDZcdTZiNzlcdTUwYTNcdTYyMzRcdTVlMjZcdTZiODZcdTRlZTNcdThkMzdcdTg4OGJc''@;'; put 'put ''dTVmODVcdTkwMmUiXSxbImI1NDAiLCJcdTc5MGQiLDUsIlx1NzkxNCIsOSwiXHU3OTFmIiw0LCJcdTc5MjUiLDE0LCJcdTc5MzUiLDQsIlx1NzkzZFx1NzkzZlx1Nzk0Mlx1Nzk0M1x1Nzk0NFx1Nzk0NVx1Nzk0N1x1Nzk0YSIsOCwiXHU3OTU0XHU3OTU1XHU3OTU4XHU3OTU5XHU3OTYxXHU3''@;'; put 'put ''OTYzIl0sWyJiNTgwIiwiXHU3OTY0XHU3OTY2XHU3OTY5XHU3OTZhXHU3OTZiXHU3OTZjXHU3OTZlXHU3OTcwIiw2LCJcdTc5NzlcdTc5N2IiLDQsIlx1Nzk4Mlx1Nzk4M1x1Nzk4Nlx1Nzk4N1x1Nzk4OFx1Nzk4OVx1Nzk4Ylx1Nzk4Y1x1Nzk4ZFx1Nzk4ZVx1Nzk5MFx1Nzk5MVx1Nzk5Mlx1''@;'; put 'put ''NjAyMFx1ODAzZFx1NjJjNVx1NGUzOVx1NTM1NVx1OTBmOFx1NjNiOFx1ODBjNlx1NjVlNlx1NmMyZVx1NGY0Nlx1NjBlZVx1NmRlMVx1OGJkZVx1NWYzOVx1ODZjYlx1NWY1M1x1NjMyMVx1NTE1YVx1ODM2MVx1Njg2M1x1NTIwMFx1NjM2M1x1OGU0OFx1NTAxMlx1NWM5Ylx1Nzk3N1x1NWJm''@;'; put 'put ''Y1x1NTIzMFx1N2EzYlx1NjBiY1x1OTA1M1x1NzZkN1x1NWZiN1x1NWY5N1x1NzY4NFx1OGU2Y1x1NzA2Zlx1NzY3Ylx1N2I0OVx1NzdhYVx1NTFmM1x1OTA5M1x1NTgyNFx1NGY0ZVx1NmVmNFx1OGZlYVx1NjU0Y1x1N2IxYlx1NzJjNFx1NmRhNFx1N2ZkZlx1NWFlMVx1NjJiNVx1NWU5NVx1''@;'; put 'put ''NTczMFx1ODQ4Mlx1N2IyY1x1NWUxZFx1NWYxZlx1OTAxMlx1N2YxNFx1OThhMFx1NjM4Mlx1NmVjN1x1Nzg5OFx1NzBiOVx1NTE3OFx1OTc1Ylx1NTdhYlx1NzUzNVx1NGY0M1x1NzUzOFx1NWU5N1x1NjBlNlx1NTk2MFx1NmRjMFx1NmJiZlx1Nzg4OVx1NTNmY1x1OTZkNVx1NTFjYlx1NTIw''@;'; put 'put ''MVx1NjM4OVx1NTQwYVx1OTQ5M1x1OGMwM1x1OGRjY1x1NzIzOVx1Nzg5Zlx1ODc3Nlx1OGZlZFx1OGMwZFx1NTNlMCJdLFsiYjY0MCIsIlx1Nzk5MyIsNiwiXHU3OTliIiwxMSwiXHU3OWE4IiwxMCwiXHU3OWI0Iiw0LCJcdTc5YmNcdTc5YmZcdTc5YzJcdTc5YzRcdTc5YzVcdTc5YzdcdTc5''@;'; put 'put ''YzhcdTc5Y2FcdTc5Y2NcdTc5Y2VcdTc5Y2ZcdTc5ZDBcdTc5ZDNcdTc5ZDRcdTc5ZDZcdTc5ZDdcdTc5ZDkiLDUsIlx1NzllMFx1NzllMVx1NzllMlx1NzllNVx1NzllOFx1NzllYSJdLFsiYjY4MCIsIlx1NzllY1x1NzllZVx1NzlmMSIsNiwiXHU3OWY5XHU3OWZhXHU3OWZjXHU3OWZlXHU3''@;'; put 'put ''OWZmXHU3YTAxXHU3YTA0XHU3YTA1XHU3YTA3XHU3YTA4XHU3YTA5XHU3YTBhXHU3YTBjXHU3YTBmIiw0LCJcdTdhMTVcdTdhMTZcdTdhMThcdTdhMTlcdTdhMWJcdTdhMWNcdTRlMDFcdTc2ZWZcdTUzZWVcdTk0ODlcdTk4NzZcdTlmMGVcdTk1MmRcdTViOWFcdThiYTJcdTRlMjJcdTRlMWNc''@;'; put 'put ''dTUxYWNcdTg0NjNcdTYxYzJcdTUyYThcdTY4MGJcdTRmOTdcdTYwNmJcdTUxYmJcdTZkMWVcdTUxNWNcdTYyOTZcdTY1OTdcdTk2NjFcdThjNDZcdTkwMTdcdTc1ZDhcdTkwZmRcdTc3NjNcdTZiZDJcdTcyOGFcdTcyZWNcdThiZmJcdTU4MzVcdTc3NzlcdThkNGNcdTY3NWNcdTk1NDBcdTgw''@;'; put 'put ''OWFcdTVlYTZcdTZlMjFcdTU5OTJcdTdhZWZcdTc3ZWRcdTk1M2JcdTZiYjVcdTY1YWRcdTdmMGVcdTU4MDZcdTUxNTFcdTk2MWZcdTViZjlcdTU4YTlcdTU0MjhcdThlNzJcdTY1NjZcdTk4N2ZcdTU2ZTRcdTk0OWRcdTc2ZmVcdTkwNDFcdTYzODdcdTU0YzZcdTU5MWFcdTU5M2FcdTU3OWJc''@;'; put 'put ''dThlYjJcdTY3MzVcdThkZmFcdTgyMzVcdTUyNDFcdTYwZjBcdTU4MTVcdTg2ZmVcdTVjZThcdTllNDVcdTRmYzRcdTk4OWRcdThiYjlcdTVhMjVcdTYwNzZcdTUzODRcdTYyN2NcdTkwNGZcdTkxMDJcdTk5N2ZcdTYwNjlcdTgwMGNcdTUxM2ZcdTgwMzNcdTVjMTRcdTk5NzVcdTZkMzFcdTRl''@;'; put 'put ''OGMiXSxbImI3NDAiLCJcdTdhMWRcdTdhMWZcdTdhMjFcdTdhMjJcdTdhMjQiLDE0LCJcdTdhMzRcdTdhMzVcdTdhMzZcdTdhMzhcdTdhM2FcdTdhM2VcdTdhNDAiLDUsIlx1N2E0NyIsOSwiXHU3YTUyIiw0LCJcdTdhNTgiLDE2XSxbImI3ODAiLCJcdTdhNjkiLDYsIlx1N2E3MVx1N2E3Mlx1''@;'; put 'put ''N2E3M1x1N2E3NVx1N2E3Ylx1N2E3Y1x1N2E3ZFx1N2E3ZVx1N2E4Mlx1N2E4NVx1N2E4N1x1N2E4OVx1N2E4YVx1N2E4Ylx1N2E4Y1x1N2E4ZVx1N2E4Zlx1N2E5MFx1N2E5M1x1N2E5NFx1N2E5OVx1N2E5YVx1N2E5Ylx1N2E5ZVx1N2FhMVx1N2FhMlx1OGQzMFx1NTNkMVx1N2Y1YVx1N2I0''@;'; put 'put ''Zlx1NGYxMFx1NGU0Zlx1OTYwMFx1NmNkNVx1NzNkMFx1ODVlOVx1NWUwNlx1NzU2YVx1N2ZmYlx1NmEwYVx1NzdmZVx1OTQ5Mlx1N2U0MVx1NTFlMVx1NzBlNlx1NTNjZFx1OGZkNFx1ODMwM1x1OGQyOVx1NzJhZlx1OTk2ZFx1NmNkYlx1NTc0YVx1ODJiM1x1NjViOVx1ODBhYVx1NjIzZlx1''@;'; put 'put ''OTYzMlx1NTlhOFx1NGVmZlx1OGJiZlx1N2ViYVx1NjUzZVx1ODNmMlx1OTc1ZVx1NTU2MVx1OThkZVx1ODBhNVx1NTMyYVx1OGJmZFx1NTQyMFx1ODBiYVx1NWU5Zlx1NmNiOFx1OGQzOVx1ODJhY1x1OTE1YVx1NTQyOVx1NmMxYlx1NTIwNlx1N2ViN1x1NTc1Zlx1NzExYVx1NmM3ZVx1N2M4''@;'; put 'put ''OVx1NTk0Ylx1NGVmZFx1NWZmZlx1NjEyNFx1N2NhYVx1NGUzMFx1NWMwMVx1NjdhYlx1ODcwMlx1NWNmMFx1OTUwYlx1OThjZVx1NzVhZlx1NzBmZFx1OTAyMlx1NTFhZlx1N2YxZFx1OGJiZFx1NTk0OVx1NTFlNFx1NGY1Ylx1NTQyNlx1NTkyYlx1NjU3N1x1ODBhNFx1NWI3NVx1NjI3Nlx1''@;'; put 'put ''NjJjMlx1OGY5MFx1NWU0NVx1NmMxZlx1N2IyNlx1NGYwZlx1NGZkOFx1NjcwZCJdLFsiYjg0MCIsIlx1N2FhM1x1N2FhNFx1N2FhN1x1N2FhOVx1N2FhYVx1N2FhYlx1N2FhZSIsNCwiXHU3YWI0IiwxMCwiXHU3YWMwIiwxMCwiXHU3YWNjIiw5LCJcdTdhZDdcdTdhZDhcdTdhZGFcdTdhZGJc''@;'; put 'put ''dTdhZGNcdTdhZGRcdTdhZTFcdTdhZTJcdTdhZTRcdTdhZTciLDUsIlx1N2FlZVx1N2FmMFx1N2FmMVx1N2FmMlx1N2FmMyJdLFsiYjg4MCIsIlx1N2FmNCIsNCwiXHU3YWZiXHU3YWZjXHU3YWZlXHU3YjAwXHU3YjAxXHU3YjAyXHU3YjA1XHU3YjA3XHU3YjA5XHU3YjBjXHU3YjBkXHU3YjBl''@;'; put 'put ''XHU3YjEwXHU3YjEyXHU3YjEzXHU3YjE2XHU3YjE3XHU3YjE4XHU3YjFhXHU3YjFjXHU3YjFkXHU3YjFmXHU3YjIxXHU3YjIyXHU3YjIzXHU3YjI3XHU3YjI5XHU3YjJkXHU2ZDZlXHU2ZGFhXHU3OThmXHU4OGIxXHU1ZjE3XHU3NTJiXHU2MjlhXHU4Zjg1XHU0ZmVmXHU5MWRjXHU2NWE3XHU4''@;'; put 'put ''MTJmXHU4MTUxXHU1ZTljXHU4MTUwXHU4ZDc0XHU1MjZmXHU4OTg2XHU4ZDRiXHU1OTBkXHU1MDg1XHU0ZWQ4XHU5NjFjXHU3MjM2XHU4MTc5XHU4ZDFmXHU1YmNjXHU4YmEzXHU5NjQ0XHU1OTg3XHU3ZjFhXHU1NDkwXHU1Njc2XHU1NjBlXHU4YmU1XHU2NTM5XHU2OTgyXHU5NDk5XHU3NmQ2''@;'; put 'put ''XHU2ZTg5XHU1ZTcyXHU3NTE4XHU2NzQ2XHU2N2QxXHU3YWZmXHU4MDlkXHU4ZDc2XHU2MTFmXHU3OWM2XHU2NTYyXHU4ZDYzXHU1MTg4XHU1MjFhXHU5NGEyXHU3ZjM4XHU4MDliXHU3ZWIyXHU1Yzk3XHU2ZTJmXHU2NzYwXHU3YmQ5XHU3NjhiXHU5YWQ4XHU4MThmXHU3Zjk0XHU3Y2Q1XHU2''@;'; put 'put ''NDFlXHU5NTUwXHU3YTNmXHU1NDRhXHU1NGU1XHU2YjRjXHU2NDAxXHU2MjA4XHU5ZTNkXHU4MGYzXHU3NTk5XHU1MjcyXHU5NzY5XHU4NDViXHU2ODNjXHU4NmU0XHU5NjAxXHU5Njk0XHU5NGVjXHU0ZTJhXHU1NDA0XHU3ZWQ5XHU2ODM5XHU4ZGRmXHU4MDE1XHU2NmY0XHU1ZTlhXHU3ZmI5''@;'; put 'put ''Il0sWyJiOTQwIiwiXHU3YjJmXHU3YjMwXHU3YjMyXHU3YjM0XHU3YjM1XHU3YjM2XHU3YjM3XHU3YjM5XHU3YjNiXHU3YjNkXHU3YjNmIiw1LCJcdTdiNDZcdTdiNDhcdTdiNGFcdTdiNGRcdTdiNGVcdTdiNTNcdTdiNTVcdTdiNTdcdTdiNTlcdTdiNWNcdTdiNWVcdTdiNWZcdTdiNjFcdTdi''@;'; put 'put ''NjMiLDEwLCJcdTdiNmZcdTdiNzBcdTdiNzNcdTdiNzRcdTdiNzZcdTdiNzhcdTdiN2FcdTdiN2NcdTdiN2RcdTdiN2ZcdTdiODFcdTdiODJcdTdiODNcdTdiODRcdTdiODYiLDYsIlx1N2I4ZVx1N2I4ZiJdLFsiYjk4MCIsIlx1N2I5MVx1N2I5Mlx1N2I5M1x1N2I5Nlx1N2I5OFx1N2I5OVx1''@;'; put 'put ''N2I5YVx1N2I5Ylx1N2I5ZVx1N2I5Zlx1N2JhMFx1N2JhM1x1N2JhNFx1N2JhNVx1N2JhZVx1N2JhZlx1N2JiMFx1N2JiMlx1N2JiM1x1N2JiNVx1N2JiNlx1N2JiN1x1N2JiOSIsNywiXHU3YmMyXHU3YmMzXHU3YmM0XHU1N2MyXHU4MDNmXHU2ODk3XHU1ZGU1XHU2NTNiXHU1MjlmXHU2MDZk''@;'; put 'put ''XHU5ZjlhXHU0ZjliXHU4ZWFjXHU1MTZjXHU1YmFiXHU1ZjEzXHU1ZGU5XHU2YzVlXHU2MmYxXHU4ZDIxXHU1MTcxXHU5NGE5XHU1MmZlXHU2YzlmXHU4MmRmXHU3MmQ3XHU1N2EyXHU2Nzg0XHU4ZDJkXHU1OTFmXHU4ZjljXHU4M2M3XHU1NDk1XHU3YjhkXHU0ZjMwXHU2Y2JkXHU1YjY0XHU1''@;'; put 'put ''OWQxXHU5ZjEzXHU1M2U0XHU4NmNhXHU5YWE4XHU4YzM3XHU4MGExXHU2NTQ1XHU5ODdlXHU1NmZhXHU5NmM3XHU1MjJlXHU3NGRjXHU1MjUwXHU1YmUxXHU2MzAyXHU4OTAyXHU0ZTU2XHU2MmQwXHU2MDJhXHU2OGZhXHU1MTczXHU1Yjk4XHU1MWEwXHU4OWMyXHU3YmExXHU5OTg2XHU3ZjUw''@;'; put 'put ''XHU2MGVmXHU3MDRjXHU4ZDJmXHU1MTQ5XHU1ZTdmXHU5MDFiXHU3NDcwXHU4OWM0XHU1NzJkXHU3ODQ1XHU1ZjUyXHU5ZjlmXHU5NWZhXHU4ZjY4XHU5YjNjXHU4YmUxXHU3Njc4XHU2ODQyXHU2N2RjXHU4ZGVhXHU4ZDM1XHU1MjNkXHU4ZjhhXHU2ZWRhXHU2OGNkXHU5NTA1XHU5MGVkXHU1''@;'; put 'put ''NmZkXHU2NzljXHU4OGY5XHU4ZmM3XHU1NGM4Il0sWyJiYTQwIiwiXHU3YmM1XHU3YmM4XHU3YmM5XHU3YmNhXHU3YmNiXHU3YmNkXHU3YmNlXHU3YmNmXHU3YmQwXHU3YmQyXHU3YmQ0Iiw0LCJcdTdiZGJcdTdiZGNcdTdiZGVcdTdiZGZcdTdiZTBcdTdiZTJcdTdiZTNcdTdiZTRcdTdiZTdc''@;'; put 'put ''dTdiZThcdTdiZTlcdTdiZWJcdTdiZWNcdTdiZWRcdTdiZWZcdTdiZjBcdTdiZjIiLDQsIlx1N2JmOFx1N2JmOVx1N2JmYVx1N2JmYlx1N2JmZFx1N2JmZiIsNywiXHU3YzA4XHU3YzA5XHU3YzBhXHU3YzBkXHU3YzBlXHU3YzEwIiw1LCJcdTdjMTdcdTdjMThcdTdjMTkiXSxbImJhODAiLCJc''@;'; put 'put ''dTdjMWEiLDQsIlx1N2MyMCIsNSwiXHU3YzI4XHU3YzI5XHU3YzJiIiwxMiwiXHU3YzM5Iiw1LCJcdTdjNDJcdTlhYjhcdTViNjlcdTZkNzdcdTZjMjZcdTRlYTVcdTViYjNcdTlhODdcdTkxNjNcdTYxYThcdTkwYWZcdTk3ZTlcdTU0MmJcdTZkYjVcdTViZDJcdTUxZmRcdTU1OGFcdTdmNTVc''@;'; put 'put ''dTdmZjBcdTY0YmNcdTYzNGRcdTY1ZjFcdTYxYmVcdTYwOGRcdTcxMGFcdTZjNTdcdTZjNDlcdTU5MmZcdTY3NmRcdTgyMmFcdTU4ZDVcdTU2OGVcdThjNmFcdTZiZWJcdTkwZGRcdTU5N2RcdTgwMTdcdTUzZjdcdTZkNjlcdTU0NzVcdTU1OWRcdTgzNzdcdTgzY2ZcdTY4MzhcdTc5YmVcdTU0''@;'; put 'put ''OGNcdTRmNTVcdTU0MDhcdTc2ZDJcdThjODlcdTk2MDJcdTZjYjNcdTZkYjhcdThkNmJcdTg5MTBcdTllNjRcdThkM2FcdTU2M2ZcdTllZDFcdTc1ZDVcdTVmODhcdTcyZTBcdTYwNjhcdTU0ZmNcdTRlYThcdTZhMmFcdTg4NjFcdTYwNTJcdThmNzBcdTU0YzRcdTcwZDhcdTg2NzlcdTllM2Zc''@;'; put 'put ''dTZkMmFcdTViOGZcdTVmMThcdTdlYTJcdTU1ODlcdTRmYWZcdTczMzRcdTU0M2NcdTUzOWFcdTUwMTlcdTU0MGVcdTU0N2NcdTRlNGVcdTVmZmRcdTc0NWFcdTU4ZjZcdTg0NmJcdTgwZTFcdTg3NzRcdTcyZDBcdTdjY2FcdTZlNTYiXSxbImJiNDAiLCJcdTdjNDMiLDksIlx1N2M0ZSIsMzYs''@;'; put 'put ''Ilx1N2M3NSIsNSwiXHU3YzdlIiw5XSxbImJiODAiLCJcdTdjODhcdTdjOGEiLDYsIlx1N2M5M1x1N2M5NFx1N2M5Nlx1N2M5OVx1N2M5YVx1N2M5Ylx1N2NhMFx1N2NhMVx1N2NhM1x1N2NhNlx1N2NhN1x1N2NhOFx1N2NhOVx1N2NhYlx1N2NhY1x1N2NhZFx1N2NhZlx1N2NiMFx1N2NiNCIs''@;'; put 'put ''NCwiXHU3Y2JhXHU3Y2JiXHU1ZjI3XHU4NjRlXHU1NTJjXHU2MmE0XHU0ZTkyXHU2Y2FhXHU2MjM3XHU4MmIxXHU1NGQ3XHU1MzRlXHU3MzNlXHU2ZWQxXHU3NTNiXHU1MjEyXHU1MzE2XHU4YmRkXHU2OWQwXHU1ZjhhXHU2MDAwXHU2ZGVlXHU1NzRmXHU2YjIyXHU3M2FmXHU2ODUzXHU4ZmQ4''@;'; put 'put ''XHU3ZjEzXHU2MzYyXHU2MGEzXHU1NTI0XHU3NWVhXHU4YzYyXHU3MTE1XHU2ZGEzXHU1YmE2XHU1ZTdiXHU4MzUyXHU2MTRjXHU5ZWM0XHU3OGZhXHU4NzU3XHU3YzI3XHU3Njg3XHU1MWYwXHU2MGY2XHU3MTRjXHU2NjQzXHU1ZTRjXHU2MDRkXHU4YzBlXHU3MDcwXHU2MzI1XHU4Zjg5XHU1''@;'; put 'put ''ZmJkXHU2MDYyXHU4NmQ0XHU1NmRlXHU2YmMxXHU2MDk0XHU2MTY3XHU1MzQ5XHU2MGUwXHU2NjY2XHU4ZDNmXHU3OWZkXHU0ZjFhXHU3MGU5XHU2YzQ3XHU4YmIzXHU4YmYyXHU3ZWQ4XHU4MzY0XHU2NjBmXHU1YTVhXHU5YjQyXHU2ZDUxXHU2ZGY3XHU4YzQxXHU2ZDNiXHU0ZjE5XHU3MDZi''@;'; put 'put ''XHU4M2I3XHU2MjE2XHU2MGQxXHU5NzBkXHU4ZDI3XHU3OTc4XHU1MWZiXHU1NzNlXHU1N2ZhXHU2NzNhXHU3NTc4XHU3YTNkXHU3OWVmXHU3Yjk1Il0sWyJiYzQwIiwiXHU3Y2JmXHU3Y2MwXHU3Y2MyXHU3Y2MzXHU3Y2M0XHU3Y2M2XHU3Y2M5XHU3Y2NiXHU3Y2NlIiw2LCJcdTdjZDhcdTdj''@;'; put 'put ''ZGFcdTdjZGJcdTdjZGRcdTdjZGVcdTdjZTEiLDYsIlx1N2NlOSIsNSwiXHU3Y2YwIiw3LCJcdTdjZjlcdTdjZmFcdTdjZmMiLDEzLCJcdTdkMGIiLDVdLFsiYmM4MCIsIlx1N2QxMSIsMTQsIlx1N2QyMVx1N2QyM1x1N2QyNFx1N2QyNVx1N2QyNlx1N2QyOFx1N2QyOVx1N2QyYVx1N2QyY1x1''@;'; put 'put ''N2QyZFx1N2QyZVx1N2QzMCIsNiwiXHU4MDhjXHU5OTY1XHU4ZmY5XHU2ZmMwXHU4YmE1XHU5ZTIxXHU1OWVjXHU3ZWU5XHU3ZjA5XHU1NDA5XHU2NzgxXHU2OGQ4XHU4ZjkxXHU3YzRkXHU5NmM2XHU1M2NhXHU2MDI1XHU3NWJlXHU2YzcyXHU1MzczXHU1YWM5XHU3ZWE3XHU2MzI0XHU1MWUw''@;'; put 'put ''XHU4MTBhXHU1ZGYxXHU4NGRmXHU2MjgwXHU1MTgwXHU1YjYzXHU0ZjBlXHU3OTZkXHU1MjQyXHU2MGI4XHU2ZDRlXHU1YmM0XHU1YmMyXHU4YmExXHU4YmIwXHU2NWUyXHU1ZmNjXHU5NjQ1XHU1OTkzXHU3ZWU3XHU3ZWFhXHU1NjA5XHU2N2I3XHU1OTM5XHU0ZjczXHU1YmI2XHU1MmEwXHU4''@;'; put 'put ''MzVhXHU5ODhhXHU4ZDNlXHU3NTMyXHU5NGJlXHU1MDQ3XHU3YTNjXHU0ZWY3XHU2N2I2XHU5YTdlXHU1YWMxXHU2YjdjXHU3NmQxXHU1NzVhXHU1YzE2XHU3YjNhXHU5NWY0XHU3MTRlXHU1MTdjXHU4MGE5XHU4MjcwXHU1OTc4XHU3ZjA0XHU4MzI3XHU2OGMwXHU2N2VjXHU3OGIxXHU3ODc3''@;'; put 'put ''XHU2MmUzXHU2MzYxXHU3YjgwXHU0ZmVkXHU1MjZhXHU1MWNmXHU4MzUwXHU2OWRiXHU5Mjc0XHU4ZGY1XHU4ZDMxXHU4OWMxXHU5NTJlXHU3YmFkXHU0ZWY2Il0sWyJiZDQwIiwiXHU3ZDM3Iiw1NCwiXHU3ZDZmIiw3XSxbImJkODAiLCJcdTdkNzgiLDMyLCJcdTUwNjVcdTgyMzBcdTUyNTFc''@;'; put 'put ''dTk5NmZcdTZlMTBcdTZlODVcdTZkYTdcdTVlZmFcdTUwZjVcdTU5ZGNcdTVjMDZcdTZkNDZcdTZjNWZcdTc1ODZcdTg0OGJcdTY4NjhcdTU5NTZcdThiYjJcdTUzMjBcdTkxNzFcdTk2NGRcdTg1NDlcdTY5MTJcdTc5MDFcdTcxMjZcdTgwZjZcdTRlYTRcdTkwY2FcdTZkNDdcdTlhODRcdTVh''@;'; put 'put ''MDdcdTU2YmNcdTY0MDVcdTk0ZjBcdTc3ZWJcdTRmYTVcdTgxMWFcdTcyZTFcdTg5ZDJcdTk5N2FcdTdmMzRcdTdlZGVcdTUyN2ZcdTY1NTlcdTkxNzVcdThmN2ZcdThmODNcdTUzZWJcdTdhOTZcdTYzZWRcdTYzYTVcdTc2ODZcdTc5ZjhcdTg4NTdcdTk2MzZcdTYyMmFcdTUyYWJcdTgyODJc''@;'; put 'put ''dTY4NTRcdTY3NzBcdTYzNzdcdTc3NmJcdTdhZWRcdTZkMDFcdTdlZDNcdTg5ZTNcdTU5ZDBcdTYyMTJcdTg1YzlcdTgyYTVcdTc1NGNcdTUwMWZcdTRlY2JcdTc1YTVcdThiZWJcdTVjNGFcdTVkZmVcdTdiNGJcdTY1YTRcdTkxZDFcdTRlY2FcdTZkMjVcdTg5NWZcdTdkMjdcdTk1MjZcdTRl''@;'; put 'put ''YzVcdThjMjhcdThmZGJcdTk3NzNcdTY2NGJcdTc5ODFcdThmZDFcdTcwZWNcdTZkNzgiXSxbImJlNDAiLCJcdTdkOTkiLDEyLCJcdTdkYTciLDYsIlx1N2RhZiIsNDJdLFsiYmU4MCIsIlx1N2RkYSIsMzIsIlx1NWMzZFx1NTJiMlx1ODM0Nlx1NTE2Mlx1ODMwZVx1Nzc1Ylx1NjY3Nlx1OWNi''@;'; put 'put ''OFx1NGVhY1x1NjBjYVx1N2NiZVx1N2NiM1x1N2VjZlx1NGU5NVx1OGI2Nlx1NjY2Zlx1OTg4OFx1OTc1OVx1NTg4M1x1NjU2Y1x1OTU1Y1x1NWY4NFx1NzVjOVx1OTc1Nlx1N2FkZlx1N2FkZVx1NTFjMFx1NzBhZlx1N2E5OFx1NjNlYVx1N2E3Nlx1N2VhMFx1NzM5Nlx1OTdlZFx1NGU0NVx1''@;'; put 'put ''NzA3OFx1NGU1ZFx1OTE1Mlx1NTNhOVx1NjU1MVx1NjVlN1x1ODFmY1x1ODIwNVx1NTQ4ZVx1NWMzMVx1NzU5YVx1OTdhMFx1NjJkOFx1NzJkOVx1NzViZFx1NWM0NVx1OWE3OVx1ODNjYVx1NWM0MFx1NTQ4MFx1NzdlOVx1NGUzZVx1NmNhZVx1ODA1YVx1NjJkMlx1NjM2ZVx1NWRlOFx1NTE3''@;'; put 'put ''N1x1OGRkZFx1OGUxZVx1OTUyZlx1NGZmMVx1NTNlNVx1NjBlN1x1NzBhY1x1NTI2N1x1NjM1MFx1OWU0M1x1NWExZlx1NTAyNlx1NzczN1x1NTM3N1x1N2VlMlx1NjQ4NVx1NjUyYlx1NjI4OVx1NjM5OFx1NTAxNFx1NzIzNVx1ODljOVx1NTFiM1x1OGJjMFx1N2VkZFx1NTc0N1x1ODNjY1x1''@;'; put 'put ''OTRhN1x1NTE5Ylx1NTQxYlx1NWNmYiJdLFsiYmY0MCIsIlx1N2RmYiIsNjJdLFsiYmY4MCIsIlx1N2UzYVx1N2UzYyIsNCwiXHU3ZTQyIiw0LCJcdTdlNDgiLDIxLCJcdTRmY2FcdTdhZTNcdTZkNWFcdTkwZTFcdTlhOGZcdTU1ODBcdTU0OTZcdTUzNjFcdTU0YWZcdTVmMDBcdTYzZTlcdTY5''@;'; put 'put ''NzdcdTUxZWZcdTYxNjhcdTUyMGFcdTU4MmFcdTUyZDhcdTU3NGVcdTc4MGRcdTc3MGJcdTVlYjdcdTYxNzdcdTdjZTBcdTYyNWJcdTYyOTdcdTRlYTJcdTcwOTVcdTgwMDNcdTYyZjdcdTcwZTRcdTk3NjBcdTU3NzdcdTgyZGJcdTY3ZWZcdTY4ZjVcdTc4ZDVcdTk4OTdcdTc5ZDFcdTU4ZjNc''@;'; put 'put ''dTU0YjNcdTUzZWZcdTZlMzRcdTUxNGJcdTUyM2JcdTViYTJcdThiZmVcdTgwYWZcdTU1NDNcdTU3YTZcdTYwNzNcdTU3NTFcdTU0MmRcdTdhN2FcdTYwNTBcdTViNTRcdTYzYTdcdTYyYTBcdTUzZTNcdTYyNjNcdTViYzdcdTY3YWZcdTU0ZWRcdTdhOWZcdTgyZTZcdTkxNzdcdTVlOTNcdTg4''@;'; put 'put ''ZTRcdTU5MzhcdTU3YWVcdTYzMGVcdThkZThcdTgwZWZcdTU3NTdcdTdiNzdcdTRmYTlcdTVmZWJcdTViYmRcdTZiM2VcdTUzMjFcdTdiNTBcdTcyYzJcdTY4NDZcdTc3ZmZcdTc3MzZcdTY1ZjdcdTUxYjVcdTRlOGZcdTc2ZDRcdTVjYmZcdTdhYTVcdTg0NzVcdTU5NGVcdTliNDFcdTUwODAi''@;'; put 'put ''XSxbImMwNDAiLCJcdTdlNWUiLDM1LCJcdTdlODMiLDIzLCJcdTdlOWNcdTdlOWRcdTdlOWUiXSxbImMwODAiLCJcdTdlYWVcdTdlYjRcdTdlYmJcdTdlYmNcdTdlZDZcdTdlZTRcdTdlZWNcdTdlZjlcdTdmMGFcdTdmMTBcdTdmMWVcdTdmMzdcdTdmMzlcdTdmM2IiLDYsIlx1N2Y0M1x1N2Y0''@;'; put 'put ''NiIsOSwiXHU3ZjUyXHU3ZjUzXHU5OTg4XHU2MTI3XHU2ZTgzXHU1NzY0XHU2NjA2XHU2MzQ2XHU1NmYwXHU2MmVjXHU2MjY5XHU1ZWQzXHU5NjE0XHU1NzgzXHU2MmM5XHU1NTg3XHU4NzIxXHU4MTRhXHU4ZmEzXHU1NTY2XHU4M2IxXHU2NzY1XHU4ZDU2XHU4NGRkXHU1YTZhXHU2ODBmXHU2''@;'; put 'put ''MmU2XHU3YmVlXHU5NjExXHU1MTcwXHU2ZjljXHU4YzMwXHU2M2ZkXHU4OWM4XHU2MWQyXHU3ZjA2XHU3MGMyXHU2ZWU1XHU3NDA1XHU2OTk0XHU3MmZjXHU1ZWNhXHU5MGNlXHU2NzE3XHU2ZDZhXHU2MzVlXHU1MmIzXHU3MjYyXHU4MDAxXHU0ZjZjXHU1OWU1XHU5MTZhXHU3MGQ5XHU2ZDlk''@;'; put 'put ''XHU1MmQyXHU0ZTUwXHU5NmY3XHU5NTZkXHU4NTdlXHU3OGNhXHU3ZDJmXHU1MTIxXHU1NzkyXHU2NGMyXHU4MDhiXHU3YzdiXHU2Y2VhXHU2OGYxXHU2OTVlXHU1MWI3XHU1Mzk4XHU2OGE4XHU3MjgxXHU5ZWNlXHU3YmYxXHU3MmY4XHU3OWJiXHU2ZjEzXHU3NDA2XHU2NzRlXHU5MWNjXHU5''@;'; put 'put ''Y2E0XHU3OTNjXHU4Mzg5XHU4MzU0XHU1NDBmXHU2ODE3XHU0ZTNkXHU1Mzg5XHU1MmIxXHU3ODNlXHU1Mzg2XHU1MjI5XHU1MDg4XHU0ZjhiXHU0ZmQwIl0sWyJjMTQwIiwiXHU3ZjU2XHU3ZjU5XHU3ZjViXHU3ZjVjXHU3ZjVkXHU3ZjVlXHU3ZjYwXHU3ZjYzIiw0LCJcdTdmNmJcdTdmNmNc''@;'; put 'put ''dTdmNmRcdTdmNmZcdTdmNzBcdTdmNzNcdTdmNzVcdTdmNzZcdTdmNzdcdTdmNzhcdTdmN2FcdTdmN2JcdTdmN2NcdTdmN2RcdTdmN2ZcdTdmODBcdTdmODIiLDcsIlx1N2Y4Ylx1N2Y4ZFx1N2Y4ZiIsNCwiXHU3Zjk1Iiw0LCJcdTdmOWJcdTdmOWNcdTdmYTBcdTdmYTJcdTdmYTNcdTdmYTVc''@;'; put 'put ''dTdmYTZcdTdmYTgiLDYsIlx1N2ZiMSJdLFsiYzE4MCIsIlx1N2ZiMyIsNCwiXHU3ZmJhXHU3ZmJiXHU3ZmJlXHU3ZmMwXHU3ZmMyXHU3ZmMzXHU3ZmM0XHU3ZmM2XHU3ZmM3XHU3ZmM4XHU3ZmM5XHU3ZmNiXHU3ZmNkXHU3ZmNmIiw0LCJcdTdmZDZcdTdmZDdcdTdmZDkiLDUsIlx1N2ZlMlx1''@;'; put 'put ''N2ZlM1x1NzVlMlx1N2FjYlx1N2M5Mlx1NmNhNVx1OTZiNlx1NTI5Ylx1NzQ4M1x1NTRlOVx1NGZlOVx1ODA1NFx1ODNiMlx1OGZkZVx1OTU3MFx1NWVjOVx1NjAxY1x1NmQ5Zlx1NWUxOFx1NjU1Ylx1ODEzOFx1OTRmZVx1NjA0Ylx1NzBiY1x1N2VjM1x1N2NhZVx1NTFjOVx1Njg4MVx1N2Ni''@;'; put 'put ''MVx1ODI2Zlx1NGUyNFx1OGY4Nlx1OTFjZlx1NjY3ZVx1NGVhZVx1OGMwNVx1NjRhOVx1ODA0YVx1NTBkYVx1NzU5N1x1NzFjZVx1NWJlNVx1OGZiZFx1NmY2Nlx1NGU4Nlx1NjQ4Mlx1OTU2M1x1NWVkNlx1NjU5OVx1NTIxN1x1ODhjMlx1NzBjOFx1NTJhM1x1NzMwZVx1NzQzM1x1Njc5N1x1''@;'; put 'put ''NzhmN1x1OTcxNlx1NGUzNFx1OTBiYlx1OWNkZVx1NmRjYlx1NTFkYlx1OGQ0MVx1NTQxZFx1NjJjZVx1NzNiMlx1ODNmMVx1OTZmNlx1OWY4NFx1OTRjM1x1NGYzNlx1N2Y5YVx1NTFjY1x1NzA3NVx1OTY3NVx1NWNhZFx1OTg4Nlx1NTNlNlx1NGVlNFx1NmU5Y1x1NzQwOVx1NjliNFx1Nzg2''@;'; put 'put ''Ylx1OTk4Zlx1NzU1OVx1NTIxOFx1NzYyNFx1NmQ0MVx1NjdmM1x1NTE2ZFx1OWY5OVx1ODA0Ylx1NTQ5OVx1N2IzY1x1N2FiZiJdLFsiYzI0MCIsIlx1N2ZlNFx1N2ZlN1x1N2ZlOFx1N2ZlYVx1N2ZlYlx1N2ZlY1x1N2ZlZFx1N2ZlZlx1N2ZmMlx1N2ZmNCIsNiwiXHU3ZmZkXHU3ZmZlXHU3''@;'; put 'put ''ZmZmXHU4MDAyXHU4MDA3XHU4MDA4XHU4MDA5XHU4MDBhXHU4MDBlXHU4MDBmXHU4MDExXHU4MDEzXHU4MDFhXHU4MDFiXHU4MDFkXHU4MDFlXHU4MDFmXHU4MDIxXHU4MDIzXHU4MDI0XHU4MDJiIiw1LCJcdTgwMzJcdTgwMzRcdTgwMzlcdTgwM2FcdTgwM2NcdTgwM2VcdTgwNDBcdTgwNDFc''@;'; put 'put ''dTgwNDRcdTgwNDVcdTgwNDdcdTgwNDhcdTgwNDlcdTgwNGVcdTgwNGZcdTgwNTBcdTgwNTFcdTgwNTNcdTgwNTVcdTgwNTZcdTgwNTciXSxbImMyODAiLCJcdTgwNTlcdTgwNWIiLDEzLCJcdTgwNmIiLDUsIlx1ODA3MiIsMTEsIlx1OTY4Nlx1NTc4NFx1NjJlMlx1OTY0N1x1Njk3Y1x1NWEw''@;'; put 'put ''NFx1NjQwMlx1N2JkM1x1NmYwZlx1OTY0Ylx1ODJhNlx1NTM2Mlx1OTg4NVx1NWU5MFx1NzA4OVx1NjNiM1x1NTM2NFx1ODY0Zlx1OWM4MVx1OWU5M1x1Nzg4Y1x1OTczMlx1OGRlZlx1OGQ0Mlx1OWU3Zlx1NmY1ZVx1Nzk4NFx1NWY1NVx1OTY0Nlx1NjIyZVx1OWE3NFx1NTQxNVx1OTRkZFx1''@;'; put 'put ''NGZhM1x1NjVjNVx1NWM2NVx1NWM2MVx1N2YxNVx1ODY1MVx1NmMyZlx1NWY4Ylx1NzM4N1x1NmVlNFx1N2VmZlx1NWNlNlx1NjMxYlx1NWI2YVx1NmVlNlx1NTM3NVx1NGU3MVx1NjNhMFx1NzU2NVx1NjJhMVx1OGY2ZVx1NGYyNlx1NGVkMVx1NmNhNlx1N2ViNlx1OGJiYVx1ODQxZFx1ODdi''@;'; put 'put ''YVx1N2Y1N1x1OTAzYlx1OTUyM1x1N2JhOVx1OWFhMVx1ODhmOFx1ODQzZFx1NmQxYlx1OWE4Nlx1N2VkY1x1NTk4OFx1OWViYlx1NzM5Ylx1NzgwMVx1ODY4Mlx1OWE2Y1x1OWE4Mlx1NTYxYlx1NTQxN1x1NTdjYlx1NGU3MFx1OWVhNlx1NTM1Nlx1OGZjOFx1ODEwOVx1Nzc5Mlx1OTk5Mlx1''@;'; put 'put ''ODZlZVx1NmVlMVx1ODUxM1x1NjZmY1x1NjE2Mlx1NmYyYiJdLFsiYzM0MCIsIlx1ODA3ZVx1ODA4MVx1ODA4Mlx1ODA4NVx1ODA4OFx1ODA4YVx1ODA4ZCIsNSwiXHU4MDk0XHU4MDk1XHU4MDk3XHU4MDk5XHU4MDllXHU4MGEzXHU4MGE2XHU4MGE3XHU4MGE4XHU4MGFjXHU4MGIwXHU4MGIz''@;'; put 'put ''XHU4MGI1XHU4MGI2XHU4MGI4XHU4MGI5XHU4MGJiXHU4MGM1XHU4MGM3Iiw0LCJcdTgwY2YiLDYsIlx1ODBkOFx1ODBkZlx1ODBlMFx1ODBlMlx1ODBlM1x1ODBlNlx1ODBlZVx1ODBmNVx1ODBmN1x1ODBmOVx1ODBmYlx1ODBmZVx1ODBmZlx1ODEwMFx1ODEwMVx1ODEwM1x1ODEwNFx1ODEw''@;'; put 'put ''NVx1ODEwN1x1ODEwOFx1ODEwYiJdLFsiYzM4MCIsIlx1ODEwY1x1ODExNVx1ODExN1x1ODExOVx1ODExYlx1ODExY1x1ODExZFx1ODExZiIsMTIsIlx1ODEyZFx1ODEyZVx1ODEzMFx1ODEzM1x1ODEzNFx1ODEzNVx1ODEzN1x1ODEzOSIsNCwiXHU4MTNmXHU4YzI5XHU4MjkyXHU4MzJiXHU3''@;'; put 'put ''NmYyXHU2YzEzXHU1ZmQ5XHU4M2JkXHU3MzJiXHU4MzA1XHU5NTFhXHU2YmRiXHU3N2RiXHU5NGM2XHU1MzZmXHU4MzAyXHU1MTkyXHU1ZTNkXHU4YzhjXHU4ZDM4XHU0ZTQ4XHU3M2FiXHU2NzlhXHU2ODg1XHU5MTc2XHU5NzA5XHU3MTY0XHU2Y2ExXHU3NzA5XHU1YTkyXHU5NTQxXHU2YmNm''@;'; put 'put ''XHU3ZjhlXHU2NjI3XHU1YmQwXHU1OWI5XHU1YTlhXHU5NWU4XHU5NWY3XHU0ZWVjXHU4NDBjXHU4NDk5XHU2YWFjXHU3NmRmXHU5NTMwXHU3MzFiXHU2OGE2XHU1YjVmXHU3NzJmXHU5MTlhXHU5NzYxXHU3Y2RjXHU4ZmY3XHU4YzFjXHU1ZjI1XHU3YzczXHU3OWQ4XHU4OWM1XHU2Y2NjXHU4''@;'; put 'put ''NzFjXHU1YmM2XHU1ZTQyXHU2OGM5XHU3NzIwXHU3ZWY1XHU1MTk1XHU1MTRkXHU1MmM5XHU1YTI5XHU3ZjA1XHU5NzYyXHU4MmQ3XHU2M2NmXHU3Nzg0XHU4NWQwXHU3OWQyXHU2ZTNhXHU1ZTk5XHU1OTk5XHU4NTExXHU3MDZkXHU2YzExXHU2MmJmXHU3NmJmXHU2NTRmXHU2MGFmXHU5NWZk''@;'; put 'put ''XHU2NjBlXHU4NzlmXHU5ZTIzXHU5NGVkXHU1NDBkXHU1NDdkXHU4YzJjXHU2NDc4Il0sWyJjNDQwIiwiXHU4MTQwIiw1LCJcdTgxNDdcdTgxNDlcdTgxNGRcdTgxNGVcdTgxNGZcdTgxNTJcdTgxNTZcdTgxNTdcdTgxNThcdTgxNWIiLDQsIlx1ODE2MVx1ODE2Mlx1ODE2M1x1ODE2NFx1ODE2''@;'; put 'put ''Nlx1ODE2OFx1ODE2YVx1ODE2Ylx1ODE2Y1x1ODE2Zlx1ODE3Mlx1ODE3M1x1ODE3NVx1ODE3Nlx1ODE3N1x1ODE3OFx1ODE4MVx1ODE4MyIsNCwiXHU4MTg5XHU4MThiXHU4MThjXHU4MThkXHU4MThlXHU4MTkwXHU4MTkyIiw1LCJcdTgxOTlcdTgxOWFcdTgxOWUiLDQsIlx1ODFhNFx1ODFh''@;'; put 'put ''NSJdLFsiYzQ4MCIsIlx1ODFhN1x1ODFhOVx1ODFhYiIsNywiXHU4MWI0Iiw1LCJcdTgxYmNcdTgxYmRcdTgxYmVcdTgxYmZcdTgxYzRcdTgxYzVcdTgxYzdcdTgxYzhcdTgxYzlcdTgxY2JcdTgxY2QiLDYsIlx1NjQ3OVx1ODYxMVx1NmEyMVx1ODE5Y1x1NzhlOFx1NjQ2OVx1OWI1NFx1NjJi''@;'; put 'put ''OVx1NjcyYlx1ODNhYlx1NThhOFx1OWVkOFx1NmNhYlx1NmYyMFx1NWJkZVx1OTY0Y1x1OGMwYlx1NzI1Zlx1NjdkMFx1NjJjN1x1NzI2MVx1NGVhOVx1NTljNlx1NmJjZFx1NTg5M1x1NjZhZVx1NWU1NVx1NTJkZlx1NjE1NVx1NjcyOFx1NzZlZVx1Nzc2Nlx1NzI2N1x1N2E0Nlx1NjJmZlx1''@;'; put 'put ''NTRlYVx1NTQ1MFx1OTRhMFx1OTBhM1x1NWExY1x1N2ViM1x1NmMxNlx1NGU0M1x1NTk3Nlx1ODAxMFx1NTk0OFx1NTM1N1x1NzUzN1x1OTZiZVx1NTZjYVx1NjMyMFx1ODExMVx1NjA3Y1x1OTVmOVx1NmRkNlx1NTQ2Mlx1OTk4MVx1NTE4NVx1NWFlOVx1ODBmZFx1NTlhZVx1OTcxM1x1NTAy''@;'; put 'put ''YVx1NmNlNVx1NWMzY1x1NjJkZlx1NGY2MFx1NTMzZlx1ODE3Ylx1OTAwNlx1NmViYVx1ODUyYlx1NjJjOFx1NWU3NFx1NzhiZVx1NjRiNVx1NjM3Ylx1NWZmNVx1NWExOFx1OTE3Zlx1OWUxZlx1NWMzZlx1NjM0Zlx1ODA0Mlx1NWI3ZFx1NTU2ZVx1OTU0YVx1OTU0ZFx1NmQ4NVx1NjBhOFx1''@;'; put 'put ''NjdlMFx1NzJkZVx1NTFkZFx1NWI4MSJdLFsiYzU0MCIsIlx1ODFkNCIsMTQsIlx1ODFlNFx1ODFlNVx1ODFlNlx1ODFlOFx1ODFlOVx1ODFlYlx1ODFlZSIsNCwiXHU4MWY1Iiw1LCJcdTgxZmRcdTgxZmZcdTgyMDNcdTgyMDciLDQsIlx1ODIwZVx1ODIwZlx1ODIxMVx1ODIxM1x1ODIxNSIs''@;'; put 'put ''NSwiXHU4MjFkXHU4MjIwXHU4MjI0XHU4MjI1XHU4MjI2XHU4MjI3XHU4MjI5XHU4MjJlXHU4MjMyXHU4MjNhXHU4MjNjXHU4MjNkXHU4MjNmIl0sWyJjNTgwIiwiXHU4MjQwXHU4MjQxXHU4MjQyXHU4MjQzXHU4MjQ1XHU4MjQ2XHU4MjQ4XHU4MjRhXHU4MjRjXHU4MjRkXHU4MjRlXHU4MjUw''@;'; put 'put ''Iiw3LCJcdTgyNTlcdTgyNWJcdTgyNWNcdTgyNWRcdTgyNWVcdTgyNjAiLDcsIlx1ODI2OVx1NjJlN1x1NmNkZVx1NzI1Ylx1NjI2ZFx1OTRhZVx1N2ViZFx1ODExM1x1NmQ1M1x1NTE5Y1x1NWYwNFx1NTk3NFx1NTJhYVx1NjAxMlx1NTk3M1x1NjY5Nlx1ODY1MFx1NzU5Zlx1NjMyYVx1NjFl''@;'; put 'put ''Nlx1N2NlZlx1OGJmYVx1NTRlNlx1NmIyN1x1OWUyNVx1NmJiNFx1ODVkNVx1NTQ1NVx1NTA3Nlx1NmNhNFx1NTU2YVx1OGRiNFx1NzIyY1x1NWUxNVx1NjAxNVx1NzQzNlx1NjJjZFx1NjM5Mlx1NzI0Y1x1NWY5OFx1NmU0M1x1NmQzZVx1NjUwMFx1NmY1OFx1NzZkOFx1NzhkMFx1NzZmY1x1''@;'; put 'put ''NzU1NFx1NTIyNFx1NTNkYlx1NGU1M1x1NWU5ZVx1NjVjMVx1ODAyYVx1ODBkNlx1NjI5Ylx1NTQ4Nlx1NTIyOFx1NzBhZVx1ODg4ZFx1OGRkMVx1NmNlMVx1NTQ3OFx1ODBkYVx1NTdmOVx1ODhmNFx1OGQ1NFx1OTY2YVx1OTE0ZFx1NGY2OVx1NmM5Ylx1NTViN1x1NzZjNlx1NzgzMFx1NjJh''@;'; put 'put ''OFx1NzBmOVx1NmY4ZVx1NWY2ZFx1ODRlY1x1NjhkYVx1Nzg3Y1x1N2JmN1x1ODFhOFx1NjcwYlx1OWU0Zlx1NjM2N1x1NzhiMFx1NTc2Zlx1NzgxMlx1OTczOVx1NjI3OVx1NjJhYlx1NTI4OFx1NzQzNVx1NmJkNyJdLFsiYzY0MCIsIlx1ODI2YVx1ODI2Ylx1ODI2Y1x1ODI2ZFx1ODI3MVx1''@;'; put 'put ''ODI3NVx1ODI3Nlx1ODI3N1x1ODI3OFx1ODI3Ylx1ODI3Y1x1ODI4MFx1ODI4MVx1ODI4M1x1ODI4NVx1ODI4Nlx1ODI4N1x1ODI4OVx1ODI4Y1x1ODI5MFx1ODI5M1x1ODI5NFx1ODI5NVx1ODI5Nlx1ODI5YVx1ODI5Ylx1ODI5ZVx1ODJhMFx1ODJhMlx1ODJhM1x1ODJhN1x1ODJiMlx1ODJi''@;'; put 'put ''NVx1ODJiNlx1ODJiYVx1ODJiYlx1ODJiY1x1ODJiZlx1ODJjMFx1ODJjMlx1ODJjM1x1ODJjNVx1ODJjNlx1ODJjOVx1ODJkMFx1ODJkNlx1ODJkOVx1ODJkYVx1ODJkZFx1ODJlMlx1ODJlN1x1ODJlOFx1ODJlOVx1ODJlYVx1ODJlY1x1ODJlZFx1ODJlZVx1ODJmMFx1ODJmMlx1ODJmM1x1''@;'; put 'put ''ODJmNVx1ODJmNlx1ODJmOCJdLFsiYzY4MCIsIlx1ODJmYVx1ODJmYyIsNCwiXHU4MzBhXHU4MzBiXHU4MzBkXHU4MzEwXHU4MzEyXHU4MzEzXHU4MzE2XHU4MzE4XHU4MzE5XHU4MzFkIiw5LCJcdTgzMjlcdTgzMmFcdTgzMmVcdTgzMzBcdTgzMzJcdTgzMzdcdTgzM2JcdTgzM2RcdTU1NjRc''@;'; put 'put ''dTgxM2VcdTc1YjJcdTc2YWVcdTUzMzlcdTc1ZGVcdTUwZmJcdTVjNDFcdThiNmNcdTdiYzdcdTUwNGZcdTcyNDdcdTlhOTdcdTk4ZDhcdTZmMDJcdTc0ZTJcdTc5NjhcdTY0ODdcdTc3YTVcdTYyZmNcdTk4OTFcdThkMmJcdTU0YzFcdTgwNThcdTRlNTJcdTU3NmFcdTgyZjlcdTg0MGRcdTVl''@;'; put 'put ''NzNcdTUxZWRcdTc0ZjZcdThiYzRcdTVjNGZcdTU3NjFcdTZjZmNcdTk4ODdcdTVhNDZcdTc4MzRcdTliNDRcdThmZWJcdTdjOTVcdTUyNTZcdTYyNTFcdTk0ZmFcdTRlYzZcdTgzODZcdTg0NjFcdTgzZTlcdTg0YjJcdTU3ZDRcdTY3MzRcdTU3MDNcdTY2NmVcdTZkNjZcdThjMzFcdTY2ZGRc''@;'; put 'put ''dTcwMTFcdTY3MWZcdTZiM2FcdTY4MTZcdTYyMWFcdTU5YmJcdTRlMDNcdTUxYzRcdTZmMDZcdTY3ZDJcdTZjOGZcdTUxNzZcdTY4Y2JcdTU5NDdcdTZiNjdcdTc1NjZcdTVkMGVcdTgxMTBcdTlmNTBcdTY1ZDdcdTc5NDhcdTc5NDFcdTlhOTFcdThkNzdcdTVjODJcdTRlNWVcdTRmMDFcdTU0''@;'; put 'put ''MmZcdTU5NTFcdTc4MGNcdTU2NjhcdTZjMTRcdThmYzRcdTVmMDNcdTZjN2RcdTZjZTNcdThiYWJcdTYzOTAiXSxbImM3NDAiLCJcdTgzM2VcdTgzM2ZcdTgzNDFcdTgzNDJcdTgzNDRcdTgzNDVcdTgzNDhcdTgzNGEiLDQsIlx1ODM1M1x1ODM1NSIsNCwiXHU4MzVkXHU4MzYyXHU4MzcwIiw2''@;'; put 'put ''LCJcdTgzNzlcdTgzN2FcdTgzN2UiLDYsIlx1ODM4N1x1ODM4OFx1ODM4YVx1ODM4Ylx1ODM4Y1x1ODM4ZFx1ODM4Zlx1ODM5MFx1ODM5MVx1ODM5NFx1ODM5NVx1ODM5Nlx1ODM5N1x1ODM5OVx1ODM5YVx1ODM5ZFx1ODM5Zlx1ODNhMSIsNiwiXHU4M2FjXHU4M2FkXHU4M2FlIl0sWyJjNzgw''@;'; put 'put ''IiwiXHU4M2FmXHU4M2I1XHU4M2JiXHU4M2JlXHU4M2JmXHU4M2MyXHU4M2MzXHU4M2M0XHU4M2M2XHU4M2M4XHU4M2M5XHU4M2NiXHU4M2NkXHU4M2NlXHU4M2QwXHU4M2QxXHU4M2QyXHU4M2QzXHU4M2Q1XHU4M2Q3XHU4M2Q5XHU4M2RhXHU4M2RiXHU4M2RlXHU4M2UyXHU4M2UzXHU4M2U0''@;'; put 'put ''XHU4M2U2XHU4M2U3XHU4M2U4XHU4M2ViXHU4M2VjXHU4M2VkXHU2MDcwXHU2ZDNkXHU3Mjc1XHU2MjY2XHU5NDhlXHU5NGM1XHU1MzQzXHU4ZmMxXHU3YjdlXHU0ZWRmXHU4YzI2XHU0ZTdlXHU5ZWQ0XHU5NGIxXHU5NGIzXHU1MjRkXHU2ZjVjXHU5MDYzXHU2ZDQ1XHU4YzM0XHU1ODExXHU1''@;'; put 'put ''ZDRjXHU2YjIwXHU2YjQ5XHU2N2FhXHU1NDViXHU4MTU0XHU3ZjhjXHU1ODk5XHU4NTM3XHU1ZjNhXHU2MmEyXHU2YTQ3XHU5NTM5XHU2NTcyXHU2MDg0XHU2ODY1XHU3N2E3XHU0ZTU0XHU0ZmE4XHU1ZGU3XHU5Nzk4XHU2NGFjXHU3ZmQ4XHU1Y2VkXHU0ZmNmXHU3YThkXHU1MjA3XHU4MzA0''@;'; put 'put ''XHU0ZTE0XHU2MDJmXHU3YTgzXHU5NGE2XHU0ZmI1XHU0ZWIyXHU3OWU2XHU3NDM0XHU1MmU0XHU4MmI5XHU2NGQyXHU3OWJkXHU1YmRkXHU2YzgxXHU5NzUyXHU4ZjdiXHU2YzIyXHU1MDNlXHU1MzdmXHU2ZTA1XHU2NGNlXHU2Njc0XHU2YzMwXHU2MGM1XHU5ODc3XHU4YmY3XHU1ZTg2XHU3''@;'; put 'put ''NDNjXHU3YTc3XHU3OWNiXHU0ZTE4XHU5MGIxXHU3NDAzXHU2YzQyXHU1NmRhXHU5MTRiXHU2Y2M1XHU4ZDhiXHU1MzNhXHU4NmM2XHU2NmYyXHU4ZWFmXHU1YzQ4XHU5YTcxXHU2ZTIwIl0sWyJjODQwIiwiXHU4M2VlXHU4M2VmXHU4M2YzIiw0LCJcdTgzZmFcdTgzZmJcdTgzZmNcdTgzZmVc''@;'; put 'put ''dTgzZmZcdTg0MDBcdTg0MDJcdTg0MDVcdTg0MDdcdTg0MDhcdTg0MDlcdTg0MGFcdTg0MTBcdTg0MTIiLDUsIlx1ODQxOVx1ODQxYVx1ODQxYlx1ODQxZSIsNSwiXHU4NDI5Iiw3LCJcdTg0MzIiLDUsIlx1ODQzOVx1ODQzYVx1ODQzYlx1ODQzZSIsNywiXHU4NDQ3XHU4NDQ4XHU4NDQ5Il0s''@;'; put 'put ''WyJjODgwIiwiXHU4NDRhIiw2LCJcdTg0NTIiLDQsIlx1ODQ1OFx1ODQ1ZFx1ODQ1ZVx1ODQ1Zlx1ODQ2MFx1ODQ2Mlx1ODQ2NCIsNCwiXHU4NDZhXHU4NDZlXHU4NDZmXHU4NDcwXHU4NDcyXHU4NDc0XHU4NDc3XHU4NDc5XHU4NDdiXHU4NDdjXHU1M2Q2XHU1YTM2XHU5ZjhiXHU4ZGEzXHU1''@;'; put 'put ''M2JiXHU1NzA4XHU5OGE3XHU2NzQzXHU5MTliXHU2Y2M5XHU1MTY4XHU3NWNhXHU2MmYzXHU3MmFjXHU1MjM4XHU1MjlkXHU3ZjNhXHU3MDk0XHU3NjM4XHU1Mzc0XHU5ZTRhXHU2OWI3XHU3ODZlXHU5NmMwXHU4OGQ5XHU3ZmE0XHU3MTM2XHU3MWMzXHU1MTg5XHU2N2QzXHU3NGU0XHU1OGU0''@;'; put 'put ''XHU2NTE4XHU1NmI3XHU4YmE5XHU5OTc2XHU2MjcwXHU3ZWQ1XHU2MGY5XHU3MGVkXHU1OGVjXHU0ZWMxXHU0ZWJhXHU1ZmNkXHU5N2U3XHU0ZWZiXHU4YmE0XHU1MjAzXHU1OThhXHU3ZWFiXHU2MjU0XHU0ZWNkXHU2NWU1XHU2MjBlXHU4MzM4XHU4NGM5XHU4MzYzXHU4NzhkXHU3MTk0XHU2''@;'; put 'put ''ZWI2XHU1YmI5XHU3ZWQyXHU1MTk3XHU2M2M5XHU2N2Q0XHU4MDg5XHU4MzM5XHU4ODE1XHU1MTEyXHU1YjdhXHU1OTgyXHU4ZmIxXHU0ZTczXHU2YzVkXHU1MTY1XHU4OTI1XHU4ZjZmXHU5NjJlXHU4NTRhXHU3NDVlXHU5NTEwXHU5NWYwXHU2ZGE2XHU4MmU1XHU1ZjMxXHU2NDkyXHU2ZDEy''@;'; put 'put ''XHU4NDI4XHU4MTZlXHU5Y2MzXHU1ODVlXHU4ZDViXHU0ZTA5XHU1M2MxIl0sWyJjOTQwIiwiXHU4NDdkIiw0LCJcdTg0ODNcdTg0ODRcdTg0ODVcdTg0ODZcdTg0OGFcdTg0OGRcdTg0OGYiLDcsIlx1ODQ5OFx1ODQ5YVx1ODQ5Ylx1ODQ5ZFx1ODQ5ZVx1ODQ5Zlx1ODRhMFx1ODRhMiIsMTIs''@;'; put 'put ''Ilx1ODRiMFx1ODRiMVx1ODRiM1x1ODRiNVx1ODRiNlx1ODRiN1x1ODRiYlx1ODRiY1x1ODRiZVx1ODRjMFx1ODRjMlx1ODRjM1x1ODRjNVx1ODRjNlx1ODRjN1x1ODRjOFx1ODRjYlx1ODRjY1x1ODRjZVx1ODRjZlx1ODRkMlx1ODRkNFx1ODRkNVx1ODRkNyJdLFsiYzk4MCIsIlx1ODRkOCIs''@;'; put 'put ''NCwiXHU4NGRlXHU4NGUxXHU4NGUyXHU4NGU0XHU4NGU3Iiw0LCJcdTg0ZWRcdTg0ZWVcdTg0ZWZcdTg0ZjEiLDEwLCJcdTg0ZmRcdTg0ZmVcdTg1MDBcdTg1MDFcdTg1MDJcdTRmMWVcdTY1NjNcdTY4NTFcdTU1ZDNcdTRlMjdcdTY0MTRcdTlhOWFcdTYyNmJcdTVhYzJcdTc0NWZcdTgyNzJc''@;'; put 'put ''dTZkYTlcdTY4ZWVcdTUwZTdcdTgzOGVcdTc4MDJcdTY3NDBcdTUyMzlcdTZjOTlcdTdlYjFcdTUwYmJcdTU1NjVcdTcxNWVcdTdiNWJcdTY2NTJcdTczY2FcdTgyZWJcdTY3NDlcdTVjNzFcdTUyMjBcdTcxN2RcdTg4NmJcdTk1ZWFcdTk2NTVcdTY0YzVcdThkNjFcdTgxYjNcdTU1ODRcdTZj''@;'; put 'put ''NTVcdTYyNDdcdTdmMmVcdTU4OTJcdTRmMjRcdTU1NDZcdThkNGZcdTY2NGNcdTRlMGFcdTVjMWFcdTg4ZjNcdTY4YTJcdTYzNGVcdTdhMGRcdTcwZTdcdTgyOGRcdTUyZmFcdTk3ZjZcdTVjMTFcdTU0ZThcdTkwYjVcdTdlY2RcdTU5NjJcdThkNGFcdTg2YzdcdTgyMGNcdTgyMGRcdThkNjZc''@;'; put 'put ''dTY0NDRcdTVjMDRcdTYxNTFcdTZkODlcdTc5M2VcdThiYmVcdTc4MzdcdTc1MzNcdTU0N2JcdTRmMzhcdThlYWJcdTZkZjFcdTVhMjBcdTdlYzVcdTc5NWVcdTZjODhcdTViYTFcdTVhNzZcdTc1MWFcdTgwYmVcdTYxNGVcdTZlMTdcdTU4ZjBcdTc1MWZcdTc1MjVcdTcyNzJcdTUzNDdcdTdl''@;'; put 'put ''ZjMiXSxbImNhNDAiLCJcdTg1MDMiLDgsIlx1ODUwZFx1ODUwZVx1ODUwZlx1ODUxMFx1ODUxMlx1ODUxNFx1ODUxNVx1ODUxNlx1ODUxOFx1ODUxOVx1ODUxYlx1ODUxY1x1ODUxZFx1ODUxZVx1ODUyMFx1ODUyMiIsOCwiXHU4NTJkIiw5LCJcdTg1M2UiLDQsIlx1ODU0NFx1ODU0NVx1ODU0''@;'; put 'put ''Nlx1ODU0N1x1ODU0YiIsMTBdLFsiY2E4MCIsIlx1ODU1N1x1ODU1OFx1ODU1YVx1ODU1Ylx1ODU1Y1x1ODU1ZFx1ODU1ZiIsNCwiXHU4NTY1XHU4NTY2XHU4NTY3XHU4NTY5Iiw4LCJcdTg1NzNcdTg1NzVcdTg1NzZcdTg1NzdcdTg1NzhcdTg1N2NcdTg1N2RcdTg1N2ZcdTg1ODBcdTg1ODFc''@;'; put 'put ''dTc3MDFcdTc2ZGJcdTUyNjlcdTgwZGNcdTU3MjNcdTVlMDhcdTU5MzFcdTcyZWVcdTY1YmRcdTZlN2ZcdThiZDdcdTVjMzhcdTg2NzFcdTUzNDFcdTc3ZjNcdTYyZmVcdTY1ZjZcdTRlYzBcdTk4ZGZcdTg2ODBcdTViOWVcdThiYzZcdTUzZjJcdTc3ZTJcdTRmN2ZcdTVjNGVcdTlhNzZcdTU5''@;'; put 'put ''Y2JcdTVmMGZcdTc5M2FcdTU4ZWJcdTRlMTZcdTY3ZmZcdTRlOGJcdTYyZWRcdThhOTNcdTkwMWRcdTUyYmZcdTY2MmZcdTU1ZGNcdTU2NmNcdTkwMDJcdTRlZDVcdTRmOGRcdTkxY2FcdTk5NzBcdTZjMGZcdTVlMDJcdTYwNDNcdTViYTRcdTg5YzZcdThiZDVcdTY1MzZcdTYyNGJcdTk5OTZc''@;'; put 'put ''dTViODhcdTViZmZcdTYzODhcdTU1MmVcdTUzZDdcdTc2MjZcdTUxN2RcdTg1MmNcdTY3YTJcdTY4YjNcdTZiOGFcdTYyOTJcdThmOTNcdTUzZDRcdTgyMTJcdTZkZDFcdTc1OGZcdTRlNjZcdThkNGVcdTViNzBcdTcxOWZcdTg1YWZcdTY2OTFcdTY2ZDlcdTdmNzJcdTg3MDBcdTllY2RcdTlm''@;'; put 'put ''MjBcdTVjNWVcdTY3MmZcdThmZjBcdTY4MTFcdTY3NWZcdTYyMGRcdTdhZDZcdTU4ODVcdTVlYjZcdTY1NzBcdTZmMzEiXSxbImNiNDAiLCJcdTg1ODJcdTg1ODNcdTg1ODZcdTg1ODgiLDYsIlx1ODU5MCIsMTAsIlx1ODU5ZCIsNiwiXHU4NWE1XHU4NWE2XHU4NWE3XHU4NWE5XHU4NWFiXHU4''@;'; put 'put ''NWFjXHU4NWFkXHU4NWIxIiw1LCJcdTg1YjhcdTg1YmEiLDYsIlx1ODVjMiIsNiwiXHU4NWNhIiw0LCJcdTg1ZDFcdTg1ZDIiXSxbImNiODAiLCJcdTg1ZDRcdTg1ZDYiLDUsIlx1ODVkZCIsNiwiXHU4NWU1XHU4NWU2XHU4NWU3XHU4NWU4XHU4NWVhIiwxNCwiXHU2MDU1XHU1MjM3XHU4MDBk''@;'; put 'put ''XHU2NDU0XHU4ODcwXHU3NTI5XHU1ZTA1XHU2ODEzXHU2MmY0XHU5NzFjXHU1M2NjXHU3MjNkXHU4YzAxXHU2YzM0XHU3NzYxXHU3YTBlXHU1NDJlXHU3N2FjXHU5ODdhXHU4MjFjXHU4YmY0XHU3ODU1XHU2NzE0XHU3MGMxXHU2NWFmXHU2NDk1XHU1NjM2XHU2MDFkXHU3OWMxXHU1M2Y4XHU0''@;'; put 'put ''ZTFkXHU2YjdiXHU4MDg2XHU1YmZhXHU1NWUzXHU1NmRiXHU0ZjNhXHU0ZjNjXHU5OTcyXHU1ZGYzXHU2NzdlXHU4MDM4XHU2MDAyXHU5ODgyXHU5MDAxXHU1YjhiXHU4YmJjXHU4YmY1XHU2NDFjXHU4MjU4XHU2NGRlXHU1NWZkXHU4MmNmXHU5MTY1XHU0ZmQ3XHU3ZDIwXHU5MDFmXHU3Yzlm''@;'; put 'put ''XHU1MGYzXHU1ODUxXHU2ZWFmXHU1YmJmXHU4YmM5XHU4MDgzXHU5MTc4XHU4NDljXHU3Yjk3XHU4NjdkXHU5NjhiXHU5NjhmXHU3ZWU1XHU5YWQzXHU3ODhlXHU1YzgxXHU3YTU3XHU5MDQyXHU5NmE3XHU3OTVmXHU1YjU5XHU2MzVmXHU3YjBiXHU4NGQxXHU2OGFkXHU1NTA2XHU3ZjI5XHU3''@;'; put 'put ''NDEwXHU3ZDIyXHU5NTAxXHU2MjQwXHU1ODRjXHU0ZWQ2XHU1YjgzXHU1OTc5XHU1ODU0Il0sWyJjYzQwIiwiXHU4NWY5XHU4NWZhXHU4NWZjXHU4NWZkXHU4NWZlXHU4NjAwIiw0LCJcdTg2MDYiLDEwLCJcdTg2MTJcdTg2MTNcdTg2MTRcdTg2MTVcdTg2MTciLDE1LCJcdTg2MjhcdTg2MmEi''@;'; put 'put ''LDEzLCJcdTg2MzlcdTg2M2FcdTg2M2JcdTg2M2RcdTg2M2VcdTg2M2ZcdTg2NDAiXSxbImNjODAiLCJcdTg2NDEiLDExLCJcdTg2NTJcdTg2NTNcdTg2NTUiLDQsIlx1ODY1Ylx1ODY1Y1x1ODY1ZFx1ODY1Zlx1ODY2MFx1ODY2MVx1ODY2MyIsNywiXHU3MzZkXHU2MzFlXHU4ZTRiXHU4ZTBm''@;'; put 'put ''XHU4MGNlXHU4MmQ0XHU2MmFjXHU1M2YwXHU2Y2YwXHU5MTVlXHU1OTJhXHU2MDAxXHU2YzcwXHU1NzRkXHU2NDRhXHU4ZDJhXHU3NjJiXHU2ZWU5XHU1NzViXHU2YTgwXHU3NWYwXHU2ZjZkXHU4YzJkXHU4YzA4XHU1NzY2XHU2YmVmXHU4ODkyXHU3OGIzXHU2M2EyXHU1M2Y5XHU3MGFkXHU2''@;'; put 'put ''YzY0XHU1ODU4XHU2NDJhXHU1ODAyXHU2OGUwXHU4MTliXHU1NTEwXHU3Y2Q2XHU1MDE4XHU4ZWJhXHU2ZGNjXHU4ZDlmXHU3MGViXHU2MzhmXHU2ZDliXHU2ZWQ0XHU3ZWU2XHU4NDA0XHU2ODQzXHU5MDAzXHU2ZGQ4XHU5Njc2XHU4YmE4XHU1OTU3XHU3Mjc5XHU4NWU0XHU4MTdlXHU3NWJj''@;'; put 'put ''XHU4YThhXHU2OGFmXHU1MjU0XHU4ZTIyXHU5NTExXHU2M2QwXHU5ODk4XHU4ZTQ0XHU1NTdjXHU0ZjUzXHU2NmZmXHU1NjhmXHU2MGQ1XHU2ZDk1XHU1MjQzXHU1YzQ5XHU1OTI5XHU2ZGZiXHU1ODZiXHU3NTMwXHU3NTFjXHU2MDZjXHU4MjE0XHU4MTQ2XHU2MzExXHU2NzYxXHU4ZmUyXHU3''@;'; put 'put ''NzNhXHU4ZGYzXHU4ZDM0XHU5NGMxXHU1ZTE2XHU1Mzg1XHU1NDJjXHU3MGMzIl0sWyJjZDQwIiwiXHU4NjZkXHU4NjZmXHU4NjcwXHU4NjcyIiw2LCJcdTg2ODMiLDYsIlx1ODY4ZSIsNCwiXHU4Njk0XHU4Njk2Iiw1LCJcdTg2OWUiLDQsIlx1ODZhNVx1ODZhNlx1ODZhYlx1ODZhZFx1ODZh''@;'; put 'put ''ZVx1ODZiMlx1ODZiM1x1ODZiN1x1ODZiOFx1ODZiOVx1ODZiYiIsNCwiXHU4NmMxXHU4NmMyXHU4NmMzXHU4NmM1XHU4NmM4XHU4NmNjXHU4NmNkXHU4NmQyXHU4NmQzXHU4NmQ1XHU4NmQ2XHU4NmQ3XHU4NmRhXHU4NmRjIl0sWyJjZDgwIiwiXHU4NmRkXHU4NmUwXHU4NmUxXHU4NmUyXHU4''@;'; put 'put ''NmUzXHU4NmU1XHU4NmU2XHU4NmU3XHU4NmU4XHU4NmVhXHU4NmViXHU4NmVjXHU4NmVmXHU4NmY1XHU4NmY2XHU4NmY3XHU4NmZhXHU4NmZiXHU4NmZjXHU4NmZkXHU4NmZmXHU4NzAxXHU4NzA0XHU4NzA1XHU4NzA2XHU4NzBiXHU4NzBjXHU4NzBlXHU4NzBmXHU4NzEwXHU4NzExXHU4NzE0''@;'; put 'put ''XHU4NzE2XHU2YzQwXHU1ZWY3XHU1MDVjXHU0ZWFkXHU1ZWFkXHU2MzNhXHU4MjQ3XHU5MDFhXHU2ODUwXHU5MTZlXHU3N2IzXHU1NDBjXHU5NGRjXHU1ZjY0XHU3YWU1XHU2ODc2XHU2MzQ1XHU3YjUyXHU3ZWRmXHU3NWRiXHU1MDc3XHU2Mjk1XHU1OTM0XHU5MDBmXHU1MWY4XHU3OWMzXHU3''@;'; put 'put ''YTgxXHU1NmZlXHU1ZjkyXHU5MDE0XHU2ZDgyXHU1YzYwXHU1NzFmXHU1NDEwXHU1MTU0XHU2ZTRkXHU1NmUyXHU2M2E4XHU5ODkzXHU4MTdmXHU4NzE1XHU4OTJhXHU5MDAwXHU1NDFlXHU1YzZmXHU4MWMwXHU2MmQ2XHU2MjU4XHU4MTMxXHU5ZTM1XHU5NjQwXHU5YTZlXHU5YTdjXHU2OTJk''@;'; put 'put ''XHU1OWE1XHU2MmQzXHU1NTNlXHU2MzE2XHU1NGM3XHU4NmQ5XHU2ZDNjXHU1YTAzXHU3NGU2XHU4ODljXHU2YjZhXHU1OTE2XHU4YzRjXHU1ZjJmXHU2ZTdlXHU3M2E5XHU5ODdkXHU0ZTM4XHU3MGY3XHU1YjhjXHU3ODk3XHU2MzNkXHU2NjVhXHU3Njk2XHU2MGNiXHU1YjliXHU1YTQ5XHU0''@;'; put 'put ''ZTA3XHU4MTU1XHU2YzZhXHU3MzhiXHU0ZWExXHU2Nzg5XHU3ZjUxXHU1ZjgwXHU2NWZhXHU2NzFiXHU1ZmQ4XHU1OTg0XHU1YTAxIl0sWyJjZTQwIiwiXHU4NzE5XHU4NzFiXHU4NzFkXHU4NzFmXHU4NzIwXHU4NzI0XHU4NzI2XHU4NzI3XHU4NzI4XHU4NzJhXHU4NzJiXHU4NzJjXHU4NzJk''@;'; put 'put ''XHU4NzJmXHU4NzMwXHU4NzMyXHU4NzMzXHU4NzM1XHU4NzM2XHU4NzM4XHU4NzM5XHU4NzNhXHU4NzNjXHU4NzNkXHU4NzQwIiw2LCJcdTg3NGFcdTg3NGJcdTg3NGRcdTg3NGZcdTg3NTBcdTg3NTFcdTg3NTJcdTg3NTRcdTg3NTVcdTg3NTZcdTg3NThcdTg3NWEiLDUsIlx1ODc2MVx1ODc2''@;'; put 'put ''Mlx1ODc2NiIsNywiXHU4NzZmXHU4NzcxXHU4NzcyXHU4NzczXHU4Nzc1Il0sWyJjZTgwIiwiXHU4Nzc3XHU4Nzc4XHU4Nzc5XHU4NzdhXHU4NzdmXHU4NzgwXHU4NzgxXHU4Nzg0XHU4Nzg2XHU4Nzg3XHU4Nzg5XHU4NzhhXHU4NzhjXHU4NzhlIiw0LCJcdTg3OTRcdTg3OTVcdTg3OTZcdTg3''@;'; put 'put ''OTgiLDYsIlx1ODdhMCIsNCwiXHU1ZGNkXHU1ZmFlXHU1MzcxXHU5N2U2XHU4ZmRkXHU2ODQ1XHU1NmY0XHU1NTJmXHU2MGRmXHU0ZTNhXHU2ZjRkXHU3ZWY0XHU4MmM3XHU4NDBlXHU1OWQ0XHU0ZjFmXHU0ZjJhXHU1YzNlXHU3ZWFjXHU2NzJhXHU4NTFhXHU1NDczXHU3NTRmXHU4MGMzXHU1''@;'; put 'put ''NTgyXHU5YjRmXHU0ZjRkXHU2ZTJkXHU4YzEzXHU1YzA5XHU2MTcwXHU1MzZiXHU3NjFmXHU2ZTI5XHU4NjhhXHU2NTg3XHU5NWZiXHU3ZWI5XHU1NDNiXHU3YTMzXHU3ZDBhXHU5NWVlXHU1NWUxXHU3ZmMxXHU3NGVlXHU2MzFkXHU4NzE3XHU2ZGExXHU3YTlkXHU2MjExXHU2NWExXHU1MzY3''@;'; put 'put ''XHU2M2UxXHU2YzgzXHU1ZGViXHU1NDVjXHU5NGE4XHU0ZTRjXHU2YzYxXHU4YmVjXHU1YzRiXHU2NWUwXHU4MjljXHU2OGE3XHU1NDNlXHU1NDM0XHU2YmNiXHU2YjY2XHU0ZTk0XHU2MzQyXHU1MzQ4XHU4MjFlXHU0ZjBkXHU0ZmFlXHU1NzVlXHU2MjBhXHU5NmZlXHU2NjY0XHU3MjY5XHU1''@;'; put 'put ''MmZmXHU1MmExXHU2MDlmXHU4YmVmXHU2NjE0XHU3MTk5XHU2NzkwXHU4OTdmXHU3ODUyXHU3N2ZkXHU2NjcwXHU1NjNiXHU1NDM4XHU5NTIxXHU3MjdhIl0sWyJjZjQwIiwiXHU4N2E1XHU4N2E2XHU4N2E3XHU4N2E5XHU4N2FhXHU4N2FlXHU4N2IwXHU4N2IxXHU4N2IyXHU4N2I0XHU4N2I2''@;'; put 'put ''XHU4N2I3XHU4N2I4XHU4N2I5XHU4N2JiXHU4N2JjXHU4N2JlXHU4N2JmXHU4N2MxIiw0LCJcdTg3YzdcdTg3YzhcdTg3YzlcdTg3Y2MiLDQsIlx1ODdkNCIsNiwiXHU4N2RjXHU4N2RkXHU4N2RlXHU4N2RmXHU4N2UxXHU4N2UyXHU4N2UzXHU4N2U0XHU4N2U2XHU4N2U3XHU4N2U4XHU4N2U5''@;'; put 'put ''XHU4N2ViXHU4N2VjXHU4N2VkXHU4N2VmIiw5XSxbImNmODAiLCJcdTg3ZmFcdTg3ZmJcdTg3ZmNcdTg3ZmRcdTg3ZmZcdTg4MDBcdTg4MDFcdTg4MDJcdTg4MDQiLDUsIlx1ODgwYiIsNywiXHU4ODE0XHU4ODE3XHU4ODE4XHU4ODE5XHU4ODFhXHU4ODFjIiw0LCJcdTg4MjNcdTdhMDBcdTYw''@;'; put 'put ''NmZcdTVlMGNcdTYwODlcdTgxOWRcdTU5MTVcdTYwZGNcdTcxODRcdTcwZWZcdTZlYWFcdTZjNTBcdTcyODBcdTZhODRcdTg4YWRcdTVlMmRcdTRlNjBcdTVhYjNcdTU1OWNcdTk0ZTNcdTZkMTdcdTdjZmJcdTk2OTlcdTYyMGZcdTdlYzZcdTc3OGVcdTg2N2VcdTUzMjNcdTk3MWVcdThmOTZc''@;'; put 'put ''dTY2ODdcdTVjZTFcdTRmYTBcdTcyZWRcdTRlMGJcdTUzYTZcdTU5MGZcdTU0MTNcdTYzODBcdTk1MjhcdTUxNDhcdTRlZDlcdTljOWNcdTdlYTRcdTU0YjhcdThkMjRcdTg4NTRcdTgyMzdcdTk1ZjJcdTZkOGVcdTVmMjZcdTVhY2NcdTY2M2VcdTk2NjlcdTczYjBcdTczMmVcdTUzYmZcdTgx''@;'; put 'put ''N2FcdTk5ODVcdTdmYTFcdTViYWFcdTk2NzdcdTk2NTBcdTdlYmZcdTc2ZjhcdTUzYTJcdTk1NzZcdTk5OTlcdTdiYjFcdTg5NDRcdTZlNThcdTRlNjFcdTdmZDRcdTc5NjVcdThiZTZcdTYwZjNcdTU0Y2RcdTRlYWJcdTk4NzlcdTVkZjdcdTZhNjFcdTUwY2ZcdTU0MTFcdThjNjFcdTg0Mjdc''@;'; put 'put ''dTc4NWRcdTk3MDRcdTUyNGFcdTU0ZWVcdTU2YTNcdTk1MDBcdTZkODhcdTViYjVcdTZkYzZcdTY2NTMiXSxbImQwNDAiLCJcdTg4MjQiLDEzLCJcdTg4MzMiLDUsIlx1ODgzYVx1ODgzYlx1ODgzZFx1ODgzZVx1ODgzZlx1ODg0MVx1ODg0Mlx1ODg0M1x1ODg0NiIsNSwiXHU4ODRlIiw1LCJc''@;'; put 'put ''dTg4NTVcdTg4NTZcdTg4NThcdTg4NWEiLDYsIlx1ODg2Nlx1ODg2N1x1ODg2YVx1ODg2ZFx1ODg2Zlx1ODg3MVx1ODg3M1x1ODg3NFx1ODg3NVx1ODg3Nlx1ODg3OFx1ODg3OVx1ODg3YSJdLFsiZDA4MCIsIlx1ODg3Ylx1ODg3Y1x1ODg4MFx1ODg4M1x1ODg4Nlx1ODg4N1x1ODg4OVx1ODg4''@;'; put 'put ''YVx1ODg4Y1x1ODg4ZVx1ODg4Zlx1ODg5MFx1ODg5MVx1ODg5M1x1ODg5NFx1ODg5NVx1ODg5NyIsNCwiXHU4ODlkIiw0LCJcdTg4YTNcdTg4YTUiLDUsIlx1NWMwZlx1NWI1ZFx1NjgyMVx1ODA5Nlx1NTU3OFx1N2IxMVx1NjU0OFx1Njk1NFx1NGU5Ylx1NmI0N1x1ODc0ZVx1OTc4Ylx1NTM0''@;'; put 'put ''Zlx1NjMxZlx1NjQzYVx1OTBhYVx1NjU5Y1x1ODBjMVx1OGMxMFx1NTE5OVx1NjhiMFx1NTM3OFx1ODdmOVx1NjFjOFx1NmNjNFx1NmNmYlx1OGMyMlx1NWM1MVx1ODVhYVx1ODJhZlx1OTUwY1x1NmIyM1x1OGY5Ylx1NjViMFx1NWZmYlx1NWZjM1x1NGZlMVx1ODg0NVx1NjYxZlx1ODE2NVx1''@;'; put 'put ''NzMyOVx1NjBmYVx1NTE3NFx1NTIxMVx1NTc4Ylx1NWY2Mlx1OTBhMlx1ODg0Y1x1OTE5Mlx1NWU3OFx1Njc0Zlx1NjAyN1x1NTlkM1x1NTE0NFx1NTFmNlx1ODBmOFx1NTMwOFx1NmM3OVx1OTZjNFx1NzE4YVx1NGYxMVx1NGZlZVx1N2Y5ZVx1NjczZFx1NTVjNVx1OTUwOFx1NzljMFx1ODg5''@;'; put 'put ''Nlx1N2VlM1x1NTg5Zlx1NjIwY1x1OTcwMFx1ODY1YVx1NTYxOFx1OTg3Ylx1NWY5MFx1OGJiOFx1ODRjNFx1OTE1N1x1NTNkOVx1NjVlZFx1NWU4Zlx1NzU1Y1x1NjA2NFx1N2Q2ZVx1NWE3Zlx1N2VlYVx1N2VlZFx1OGY2OVx1NTVhN1x1NWJhM1x1NjBhY1x1NjVjYlx1NzM4NCJdLFsiZDE0''@;'; put 'put ''MCIsIlx1ODhhY1x1ODhhZVx1ODhhZlx1ODhiMFx1ODhiMiIsNCwiXHU4OGI4XHU4OGI5XHU4OGJhXHU4OGJiXHU4OGJkXHU4OGJlXHU4OGJmXHU4OGMwXHU4OGMzXHU4OGM0XHU4OGM3XHU4OGM4XHU4OGNhXHU4OGNiXHU4OGNjXHU4OGNkXHU4OGNmXHU4OGQwXHU4OGQxXHU4OGQzXHU4OGQ2''@;'; put 'put ''XHU4OGQ3XHU4OGRhIiw0LCJcdTg4ZTBcdTg4ZTFcdTg4ZTZcdTg4ZTdcdTg4ZTkiLDYsIlx1ODhmMlx1ODhmNVx1ODhmNlx1ODhmN1x1ODhmYVx1ODhmYlx1ODhmZFx1ODhmZlx1ODkwMFx1ODkwMVx1ODkwMyIsNV0sWyJkMTgwIiwiXHU4OTA5XHU4OTBiIiw0LCJcdTg5MTFcdTg5MTQiLDQs''@;'; put 'put ''Ilx1ODkxYyIsNCwiXHU4OTIyXHU4OTIzXHU4OTI0XHU4OTI2XHU4OTI3XHU4OTI4XHU4OTI5XHU4OTJjXHU4OTJkXHU4OTJlXHU4OTJmXHU4OTMxXHU4OTMyXHU4OTMzXHU4OTM1XHU4OTM3XHU5MDA5XHU3NjYzXHU3NzI5XHU3ZWRhXHU5Nzc0XHU4NTliXHU1YjY2XHU3YTc0XHU5NmVhXHU4''@;'; put 'put ''ODQwXHU1MmNiXHU3MThmXHU1ZmFhXHU2NWVjXHU4YmUyXHU1YmZiXHU5YTZmXHU1ZGUxXHU2Yjg5XHU2YzViXHU4YmFkXHU4YmFmXHU5MDBhXHU4ZmM1XHU1MzhiXHU2MmJjXHU5ZTI2XHU5ZTJkXHU1NDQwXHU0ZTJiXHU4MmJkXHU3MjU5XHU4NjljXHU1ZDE2XHU4ODU5XHU2ZGFmXHU5NmM1''@;'; put 'put ''XHU1NGQxXHU0ZTlhXHU4YmI2XHU3MTA5XHU1NGJkXHU5NjA5XHU3MGRmXHU2ZGY5XHU3NmQwXHU0ZTI1XHU3ODE0XHU4NzEyXHU1Y2E5XHU1ZWY2XHU4YTAwXHU5ODljXHU5NjBlXHU3MDhlXHU2Y2JmXHU1OTQ0XHU2M2E5XHU3NzNjXHU4ODRkXHU2ZjE0XHU4MjczXHU1ODMwXHU3MWQ1XHU1''@;'; put 'put ''MzhjXHU3ODFhXHU5NmMxXHU1NTAxXHU1ZjY2XHU3MTMwXHU1YmI0XHU4YzFhXHU5YThjXHU2YjgzXHU1OTJlXHU5ZTJmXHU3OWU3XHU2NzY4XHU2MjZjXHU0ZjZmXHU3NWExXHU3ZjhhXHU2ZDBiXHU5NjMzXHU2YzI3XHU0ZWYwXHU3NWQyXHU1MTdiXHU2ODM3XHU2ZjNlXHU5MDgwXHU4MTcw''@;'; put 'put ''XHU1OTk2XHU3NDc2Il0sWyJkMjQwIiwiXHU4OTM4Iiw4LCJcdTg5NDJcdTg5NDNcdTg5NDUiLDI0LCJcdTg5NjAiLDUsIlx1ODk2NyIsMTksIlx1ODk3YyJdLFsiZDI4MCIsIlx1ODk3ZFx1ODk3ZVx1ODk4MFx1ODk4Mlx1ODk4NFx1ODk4NVx1ODk4NyIsMjYsIlx1NjQ0N1x1NWMyN1x1OTA2''@;'; put 'put ''NVx1N2E5MVx1OGMyM1x1NTlkYVx1NTRhY1x1ODIwMFx1ODM2Zlx1ODk4MVx1ODAwMFx1NjkzMFx1NTY0ZVx1ODAzNlx1NzIzN1x1OTFjZVx1NTFiNlx1NGU1Zlx1OTg3NVx1NjM5Nlx1NGUxYVx1NTNmNlx1NjZmM1x1ODE0Ylx1NTkxY1x1NmRiMlx1NGUwMFx1NThmOVx1NTMzYlx1NjNkNlx1''@;'; put 'put ''OTRmMVx1NGY5ZFx1NGYwYVx1ODg2M1x1OTg5MFx1NTkzN1x1OTA1N1x1NzlmYlx1NGVlYVx1ODBmMFx1NzU5MVx1NmM4Mlx1NWI5Y1x1NTllOFx1NWY1ZFx1NjkwNVx1ODY4MVx1NTAxYVx1NWRmMlx1NGU1OVx1NzdlM1x1NGVlNVx1ODI3YVx1NjI5MVx1NjYxM1x1OTA5MVx1NWM3OVx1NGVi''@;'; put 'put ''Zlx1NWY3OVx1ODFjNlx1OTAzOFx1ODA4NFx1NzVhYlx1NGVhNlx1ODhkNFx1NjEwZlx1NmJjNVx1NWZjNlx1NGU0OVx1NzZjYVx1NmVhMlx1OGJlM1x1OGJhZVx1OGMwYVx1OGJkMVx1NWYwMlx1N2ZmY1x1N2ZjY1x1N2VjZVx1ODMzNVx1ODM2Ylx1NTZlMFx1NmJiN1x1OTdmM1x1OTYzNFx1''@;'; put 'put ''NTlmYlx1NTQxZlx1OTRmNlx1NmRlYlx1NWJjNVx1OTk2ZVx1NWMzOVx1NWYxNVx1OTY5MCJdLFsiZDM0MCIsIlx1ODlhMiIsMzAsIlx1ODljM1x1ODljZFx1ODlkM1x1ODlkNFx1ODlkNVx1ODlkN1x1ODlkOFx1ODlkOVx1ODlkYlx1ODlkZFx1ODlkZlx1ODllMFx1ODllMVx1ODllMlx1ODll''@;'; put 'put ''NFx1ODllN1x1ODllOFx1ODllOVx1ODllYVx1ODllY1x1ODllZFx1ODllZVx1ODlmMFx1ODlmMVx1ODlmMlx1ODlmNCIsNl0sWyJkMzgwIiwiXHU4OWZiIiw0LCJcdThhMDEiLDUsIlx1OGEwOCIsMjEsIlx1NTM3MFx1ODJmMVx1NmEzMVx1NWE3NFx1OWU3MFx1NWU5NFx1N2YyOFx1ODNiOVx1''@;'; put 'put ''ODQyNFx1ODQyNVx1ODM2N1x1ODc0N1x1OGZjZVx1OGQ2Mlx1NzZjOFx1NWY3MVx1OTg5Nlx1Nzg2Y1x1NjYyMFx1NTRkZlx1NjJlNVx1NGY2M1x1ODFjM1x1NzVjOFx1NWViOFx1OTZjZFx1OGUwYVx1ODZmOVx1NTQ4Zlx1NmNmM1x1NmQ4Y1x1NmMzOFx1NjA3Zlx1NTJjN1x1NzUyOFx1NWU3''@;'; put 'put ''ZFx1NGYxOFx1NjBhMFx1NWZlN1x1NWMyNFx1NzUzMVx1OTBhZVx1OTRjMFx1NzJiOVx1NmNiOVx1NmUzOFx1OTE0OVx1NjcwOVx1NTNjYlx1NTNmM1x1NGY1MVx1OTFjOVx1OGJmMVx1NTNjOFx1NWU3Y1x1OGZjMlx1NmRlNFx1NGU4ZVx1NzZjMlx1Njk4Nlx1ODY1ZVx1NjExYVx1ODIwNlx1''@;'; put 'put ''NGY1OVx1NGZkZVx1OTAzZVx1OWM3Y1x1NjEwOVx1NmUxZFx1NmUxNFx1OTY4NVx1NGU4OFx1NWEzMVx1OTZlOFx1NGUwZVx1NWM3Zlx1NzliOVx1NWI4N1x1OGJlZFx1N2ZiZFx1NzM4OVx1NTdkZlx1ODI4Ylx1OTBjMVx1NTQwMVx1OTA0N1x1NTViYlx1NWNlYVx1NWZhMVx1NjEwOFx1NmIz''@;'; put 'put ''Mlx1NzJmMVx1ODBiMlx1OGE4OSJdLFsiZDQ0MCIsIlx1OGExZSIsMzEsIlx1OGEzZiIsOCwiXHU4YTQ5IiwyMV0sWyJkNDgwIiwiXHU4YTVmIiwyNSwiXHU4YTdhIiw2LCJcdTZkNzRcdTViZDNcdTg4ZDVcdTk4ODRcdThjNmJcdTlhNmRcdTllMzNcdTZlMGFcdTUxYTRcdTUxNDNcdTU3YTNc''@;'; put 'put ''dTg4ODFcdTUzOWZcdTYzZjRcdThmOTVcdTU2ZWRcdTU0NThcdTU3MDZcdTczM2ZcdTZlOTBcdTdmMThcdThmZGNcdTgyZDFcdTYxM2ZcdTYwMjhcdTk2NjJcdTY2ZjBcdTdlYTZcdThkOGFcdThkYzNcdTk0YTVcdTVjYjNcdTdjYTRcdTY3MDhcdTYwYTZcdTk2MDVcdTgwMThcdTRlOTFcdTkw''@;'; put 'put ''ZTdcdTUzMDBcdTk2NjhcdTUxNDFcdThmZDBcdTg1NzRcdTkxNWRcdTY2NTVcdTk3ZjVcdTViNTVcdTUzMWRcdTc4MzhcdTY3NDJcdTY4M2RcdTU0YzlcdTcwN2VcdTViYjBcdThmN2RcdTUxOGRcdTU3MjhcdTU0YjFcdTY1MTJcdTY2ODJcdThkNWVcdThkNDNcdTgxMGZcdTg0NmNcdTkwNmRc''@;'; put 'put ''dTdjZGZcdTUxZmZcdTg1ZmJcdTY3YTNcdTY1ZTlcdTZmYTFcdTg2YTRcdThlODFcdTU2NmFcdTkwMjBcdTc2ODJcdTcwNzZcdTcxZTVcdThkMjNcdTYyZTlcdTUyMTlcdTZjZmRcdThkM2NcdTYwMGVcdTU4OWVcdTYxOGVcdTY2ZmVcdThkNjBcdTYyNGVcdTU1YjNcdTZlMjNcdTY3MmRcdThm''@;'; put 'put ''NjciXSxbImQ1NDAiLCJcdThhODEiLDcsIlx1OGE4YiIsNywiXHU4YTk0Iiw0Nl0sWyJkNTgwIiwiXHU4YWMzIiwzMiwiXHU5NGUxXHU5NWY4XHU3NzI4XHU2ODA1XHU2OWE4XHU1NDhiXHU0ZTRkXHU3MGI4XHU4YmM4XHU2NDU4XHU2NThiXHU1Yjg1XHU3YTg0XHU1MDNhXHU1YmU4XHU3N2Ji''@;'; put 'put ''XHU2YmUxXHU4YTc5XHU3Yzk4XHU2Y2JlXHU3NmNmXHU2NWE5XHU4Zjk3XHU1ZDJkXHU1YzU1XHU4NjM4XHU2ODA4XHU1MzYwXHU2MjE4XHU3YWQ5XHU2ZTViXHU3ZWZkXHU2YTFmXHU3YWUwXHU1ZjcwXHU2ZjMzXHU1ZjIwXHU2MzhjXHU2ZGE4XHU2NzU2XHU0ZTA4XHU1ZTEwXHU4ZDI2XHU0''@;'; put 'put ''ZWQ3XHU4MGMwXHU3NjM0XHU5NjljXHU2MmRiXHU2NjJkXHU2MjdlXHU2Y2JjXHU4ZDc1XHU3MTY3XHU3ZjY5XHU1MTQ2XHU4MDg3XHU1M2VjXHU5MDZlXHU2Mjk4XHU1NGYyXHU4NmYwXHU4Zjk5XHU4MDA1XHU5NTE3XHU4NTE3XHU4ZmQ5XHU2ZDU5XHU3M2NkXHU2NTlmXHU3NzFmXHU3NTA0''@;'; put 'put ''XHU3ODI3XHU4MWZiXHU4ZDFlXHU5NDg4XHU0ZmE2XHU2Nzk1XHU3NWI5XHU4YmNhXHU5NzA3XHU2MzJmXHU5NTQ3XHU5NjM1XHU4NGI4XHU2MzIzXHU3NzQxXHU1ZjgxXHU3MmYwXHU0ZTg5XHU2MDE0XHU2NTc0XHU2MmVmXHU2YjYzXHU2NTNmIl0sWyJkNjQwIiwiXHU4YWU0IiwzNCwiXHU4''@;'; put 'put ''YjA4IiwyN10sWyJkNjgwIiwiXHU4YjI0XHU4YjI1XHU4YjI3IiwzMCwiXHU1ZTI3XHU3NWM3XHU5MGQxXHU4YmMxXHU4MjlkXHU2NzlkXHU2NTJmXHU1NDMxXHU4NzE4XHU3N2U1XHU4MGEyXHU4MTAyXHU2YzQxXHU0ZTRiXHU3ZWM3XHU4MDRjXHU3NmY0XHU2OTBkXHU2Yjk2XHU2MjY3XHU1''@;'; put 'put ''MDNjXHU0Zjg0XHU1NzQwXHU2MzA3XHU2YjYyXHU4ZGJlXHU1M2VhXHU2NWU4XHU3ZWI4XHU1ZmQ3XHU2MzFhXHU2M2I3XHU4MWYzXHU4MWY0XHU3ZjZlXHU1ZTFjXHU1Y2Q5XHU1MjM2XHU2NjdhXHU3OWU5XHU3YTFhXHU4ZDI4XHU3MDk5XHU3NWQ0XHU2ZWRlXHU2Y2JiXHU3YTkyXHU0ZTJk''@;'; put 'put ''XHU3NmM1XHU1ZmUwXHU5NDlmXHU4ODc3XHU3ZWM4XHU3OWNkXHU4MGJmXHU5MWNkXHU0ZWYyXHU0ZjE3XHU4MjFmXHU1NDY4XHU1ZGRlXHU2ZDMyXHU4YmNjXHU3Y2E1XHU4Zjc0XHU4MDk4XHU1ZTFhXHU1NDkyXHU3NmIxXHU1Yjk5XHU2NjNjXHU5YWE0XHU3M2UwXHU2ODJhXHU4NmRiXHU2''@;'; put 'put ''NzMxXHU3MzJhXHU4YmY4XHU4YmRiXHU5MDEwXHU3YWY5XHU3MGRiXHU3MTZlXHU2MmM0XHU3N2E5XHU1NjMxXHU0ZTNiXHU4NDU3XHU2N2YxXHU1MmE5XHU4NmMwXHU4ZDJlXHU5NGY4XHU3YjUxIl0sWyJkNzQwIiwiXHU4YjQ2IiwzMSwiXHU4YjY3Iiw0LCJcdThiNmQiLDI1XSxbImQ3ODAi''@;'; put 'put ''LCJcdThiODciLDI0LCJcdThiYWNcdThiYjFcdThiYmJcdThiYzdcdThiZDBcdThiZWFcdThjMDlcdThjMWVcdTRmNGZcdTZjZThcdTc5NWRcdTlhN2JcdTYyOTNcdTcyMmFcdTYyZmRcdTRlMTNcdTc4MTZcdThmNmNcdTY0YjBcdThkNWFcdTdiYzZcdTY4NjlcdTVlODRcdTg4YzVcdTU5ODZc''@;'; put 'put ''dTY0OWVcdTU4ZWVcdTcyYjZcdTY5MGVcdTk1MjVcdThmZmRcdThkNThcdTU3NjBcdTdmMDBcdThjMDZcdTUxYzZcdTYzNDlcdTYyZDlcdTUzNTNcdTY4NGNcdTc0MjJcdTgzMDFcdTkxNGNcdTU1NDRcdTc3NDBcdTcwN2NcdTZkNGFcdTUxNzlcdTU0YThcdThkNDRcdTU5ZmZcdTZlY2JcdTZk''@;'; put 'put ''YzRcdTViNWNcdTdkMmJcdTRlZDRcdTdjN2RcdTZlZDNcdTViNTBcdTgxZWFcdTZlMGRcdTViNTdcdTliMDNcdTY4ZDVcdThlMmFcdTViOTdcdTdlZmNcdTYwM2JcdTdlYjVcdTkwYjlcdThkNzBcdTU5NGZcdTYzY2RcdTc5ZGZcdThkYjNcdTUzNTJcdTY1Y2ZcdTc5NTZcdThiYzVcdTk2M2Jc''@;'; put 'put ''dTdlYzRcdTk0YmJcdTdlODJcdTU2MzRcdTkxODlcdTY3MDBcdTdmNmFcdTVjMGFcdTkwNzVcdTY2MjhcdTVkZTZcdTRmNTBcdTY3ZGVcdTUwNWFcdTRmNWNcdTU3NTBcdTVlYTciXSxbImQ4NDAiLCJcdThjMzgiLDgsIlx1OGM0Mlx1OGM0M1x1OGM0NFx1OGM0NVx1OGM0OFx1OGM0YVx1OGM0''@;'; put 'put ''Ylx1OGM0ZCIsNywiXHU4YzU2XHU4YzU3XHU4YzU4XHU4YzU5XHU4YzViIiw1LCJcdThjNjMiLDYsIlx1OGM2YyIsNiwiXHU4Yzc0XHU4Yzc1XHU4Yzc2XHU4Yzc3XHU4YzdiIiw2LCJcdThjODNcdThjODRcdThjODZcdThjODciXSxbImQ4ODAiLCJcdThjODhcdThjOGJcdThjOGQiLDYsIlx1''@;'; put 'put ''OGM5NVx1OGM5Nlx1OGM5N1x1OGM5OSIsMjAsIlx1NGU4ZFx1NGUwY1x1NTE0MFx1NGUxMFx1NWVmZlx1NTM0NVx1NGUxNVx1NGU5OFx1NGUxZVx1OWIzMlx1NWI2Y1x1NTY2OVx1NGUyOFx1NzliYVx1NGUzZlx1NTMxNVx1NGU0N1x1NTkyZFx1NzIzYlx1NTM2ZVx1NmMxMFx1NTZkZlx1ODBl''@;'; put 'put ''NFx1OTk5N1x1NmJkM1x1Nzc3ZVx1OWYxN1x1NGUzNlx1NGU5Zlx1OWYxMFx1NGU1Y1x1NGU2OVx1NGU5M1x1ODI4OFx1NWI1Ylx1NTU2Y1x1NTYwZlx1NGVjNFx1NTM4ZFx1NTM5ZFx1NTNhM1x1NTNhNVx1NTNhZVx1OTc2NVx1OGQ1ZFx1NTMxYVx1NTNmNVx1NTMyNlx1NTMyZVx1NTMzZVx1''@;'; put 'put ''OGQ1Y1x1NTM2Nlx1NTM2M1x1NTIwMlx1NTIwOFx1NTIwZVx1NTIyZFx1NTIzM1x1NTIzZlx1NTI0MFx1NTI0Y1x1NTI1ZVx1NTI2MVx1NTI1Y1x1ODRhZlx1NTI3ZFx1NTI4Mlx1NTI4MVx1NTI5MFx1NTI5M1x1NTE4Mlx1N2Y1NFx1NGViYlx1NGVjM1x1NGVjOVx1NGVjMlx1NGVlOFx1NGVl''@;'; put 'put ''MVx1NGVlYlx1NGVkZVx1NGYxYlx1NGVmM1x1NGYyMlx1NGY2NFx1NGVmNVx1NGYyNVx1NGYyN1x1NGYwOVx1NGYyYlx1NGY1ZVx1NGY2N1x1NjUzOFx1NGY1YVx1NGY1ZCJdLFsiZDk0MCIsIlx1OGNhZSIsNjJdLFsiZDk4MCIsIlx1OGNlZCIsMzIsIlx1NGY1Zlx1NGY1N1x1NGYzMlx1NGYz''@;'; put 'put ''ZFx1NGY3Nlx1NGY3NFx1NGY5MVx1NGY4OVx1NGY4M1x1NGY4Zlx1NGY3ZVx1NGY3Ylx1NGZhYVx1NGY3Y1x1NGZhY1x1NGY5NFx1NGZlNlx1NGZlOFx1NGZlYVx1NGZjNVx1NGZkYVx1NGZlM1x1NGZkY1x1NGZkMVx1NGZkZlx1NGZmOFx1NTAyOVx1NTA0Y1x1NGZmM1x1NTAyY1x1NTAwZlx1''@;'; put 'put ''NTAyZVx1NTAyZFx1NGZmZVx1NTAxY1x1NTAwY1x1NTAyNVx1NTAyOFx1NTA3ZVx1NTA0M1x1NTA1NVx1NTA0OFx1NTA0ZVx1NTA2Y1x1NTA3Ylx1NTBhNVx1NTBhN1x1NTBhOVx1NTBiYVx1NTBkNlx1NTEwNlx1NTBlZFx1NTBlY1x1NTBlNlx1NTBlZVx1NTEwN1x1NTEwYlx1NGVkZFx1NmMz''@;'; put 'put ''ZFx1NGY1OFx1NGY2NVx1NGZjZVx1OWZhMFx1NmM0Nlx1N2M3NFx1NTE2ZVx1NWRmZFx1OWVjOVx1OTk5OFx1NTE4MVx1NTkxNFx1NTJmOVx1NTMwZFx1OGEwN1x1NTMxMFx1NTFlYlx1NTkxOVx1NTE1NVx1NGVhMFx1NTE1Nlx1NGViM1x1ODg2ZVx1ODhhNFx1NGViNVx1ODExNFx1ODhkMlx1''@;'; put 'put ''Nzk4MFx1NWIzNFx1ODgwM1x1N2ZiOFx1NTFhYlx1NTFiMVx1NTFiZFx1NTFiYyJdLFsiZGE0MCIsIlx1OGQwZSIsMTQsIlx1OGQyMFx1OGQ1MVx1OGQ1Mlx1OGQ1N1x1OGQ1Zlx1OGQ2NVx1OGQ2OFx1OGQ2OVx1OGQ2YVx1OGQ2Y1x1OGQ2ZVx1OGQ2Zlx1OGQ3MVx1OGQ3Mlx1OGQ3OCIsOCwi''@;'; put 'put ''XHU4ZDgyXHU4ZDgzXHU4ZDg2XHU4ZDg3XHU4ZDg4XHU4ZDg5XHU4ZDhjIiw0LCJcdThkOTJcdThkOTNcdThkOTUiLDksIlx1OGRhMFx1OGRhMSJdLFsiZGE4MCIsIlx1OGRhMlx1OGRhNCIsMTIsIlx1OGRiMlx1OGRiNlx1OGRiN1x1OGRiOVx1OGRiYlx1OGRiZFx1OGRjMFx1OGRjMVx1OGRj''@;'; put 'put ''Mlx1OGRjNVx1OGRjN1x1OGRjOFx1OGRjOVx1OGRjYVx1OGRjZFx1OGRkMFx1OGRkMlx1OGRkM1x1OGRkNFx1NTFjN1x1NTE5Nlx1NTFhMlx1NTFhNVx1OGJhMFx1OGJhNlx1OGJhN1x1OGJhYVx1OGJiNFx1OGJiNVx1OGJiN1x1OGJjMlx1OGJjM1x1OGJjYlx1OGJjZlx1OGJjZVx1OGJkMlx1''@;'; put 'put ''OGJkM1x1OGJkNFx1OGJkNlx1OGJkOFx1OGJkOVx1OGJkY1x1OGJkZlx1OGJlMFx1OGJlNFx1OGJlOFx1OGJlOVx1OGJlZVx1OGJmMFx1OGJmM1x1OGJmNlx1OGJmOVx1OGJmY1x1OGJmZlx1OGMwMFx1OGMwMlx1OGMwNFx1OGMwN1x1OGMwY1x1OGMwZlx1OGMxMVx1OGMxMlx1OGMxNFx1OGMx''@;'; put 'put ''NVx1OGMxNlx1OGMxOVx1OGMxYlx1OGMxOFx1OGMxZFx1OGMxZlx1OGMyMFx1OGMyMVx1OGMyNVx1OGMyN1x1OGMyYVx1OGMyYlx1OGMyZVx1OGMyZlx1OGMzMlx1OGMzM1x1OGMzNVx1OGMzNlx1NTM2OVx1NTM3YVx1OTYxZFx1OTYyMlx1OTYyMVx1OTYzMVx1OTYyYVx1OTYzZFx1OTYzY1x1''@;'; put 'put ''OTY0Mlx1OTY0OVx1OTY1NFx1OTY1Zlx1OTY2N1x1OTY2Y1x1OTY3Mlx1OTY3NFx1OTY4OFx1OTY4ZFx1OTY5N1x1OTZiMFx1OTA5N1x1OTA5Ylx1OTA5ZFx1OTA5OVx1OTBhY1x1OTBhMVx1OTBiNFx1OTBiM1x1OTBiNlx1OTBiYSJdLFsiZGI0MCIsIlx1OGRkNVx1OGRkOFx1OGRkOVx1OGRk''@;'; put 'put ''Y1x1OGRlMFx1OGRlMVx1OGRlMlx1OGRlNVx1OGRlNlx1OGRlN1x1OGRlOVx1OGRlZFx1OGRlZVx1OGRmMFx1OGRmMVx1OGRmMlx1OGRmNFx1OGRmNlx1OGRmY1x1OGRmZSIsNiwiXHU4ZTA2XHU4ZTA3XHU4ZTA4XHU4ZTBiXHU4ZTBkXHU4ZTBlXHU4ZTEwXHU4ZTExXHU4ZTEyXHU4ZTEzXHU4''@;'; put 'put ''ZTE1Iiw3LCJcdThlMjBcdThlMjFcdThlMjQiLDQsIlx1OGUyYlx1OGUyZFx1OGUzMFx1OGUzMlx1OGUzM1x1OGUzNFx1OGUzNlx1OGUzN1x1OGUzOFx1OGUzYlx1OGUzY1x1OGUzZSJdLFsiZGI4MCIsIlx1OGUzZlx1OGU0M1x1OGU0NVx1OGU0Nlx1OGU0YyIsNCwiXHU4ZTUzIiw1LCJcdThl''@;'; put 'put ''NWEiLDExLCJcdThlNjdcdThlNjhcdThlNmFcdThlNmJcdThlNmVcdThlNzFcdTkwYjhcdTkwYjBcdTkwY2ZcdTkwYzVcdTkwYmVcdTkwZDBcdTkwYzRcdTkwYzdcdTkwZDNcdTkwZTZcdTkwZTJcdTkwZGNcdTkwZDdcdTkwZGJcdTkwZWJcdTkwZWZcdTkwZmVcdTkxMDRcdTkxMjJcdTkxMWVc''@;'; put 'put ''dTkxMjNcdTkxMzFcdTkxMmZcdTkxMzlcdTkxNDNcdTkxNDZcdTUyMGRcdTU5NDJcdTUyYTJcdTUyYWNcdTUyYWRcdTUyYmVcdTU0ZmZcdTUyZDBcdTUyZDZcdTUyZjBcdTUzZGZcdTcxZWVcdTc3Y2RcdTVlZjRcdTUxZjVcdTUxZmNcdTliMmZcdTUzYjZcdTVmMDFcdTc1NWFcdTVkZWZcdTU3''@;'; put 'put ''NGNcdTU3YTlcdTU3YTFcdTU4N2VcdTU4YmNcdTU4YzVcdTU4ZDFcdTU3MjlcdTU3MmNcdTU3MmFcdTU3MzNcdTU3MzlcdTU3MmVcdTU3MmZcdTU3NWNcdTU3M2JcdTU3NDJcdTU3NjlcdTU3ODVcdTU3NmJcdTU3ODZcdTU3N2NcdTU3N2JcdTU3NjhcdTU3NmRcdTU3NzZcdTU3NzNcdTU3YWRc''@;'; put 'put ''dTU3YTRcdTU3OGNcdTU3YjJcdTU3Y2ZcdTU3YTdcdTU3YjRcdTU3OTNcdTU3YTBcdTU3ZDVcdTU3ZDhcdTU3ZGFcdTU3ZDlcdTU3ZDJcdTU3YjhcdTU3ZjRcdTU3ZWZcdTU3ZjhcdTU3ZTRcdTU3ZGQiXSxbImRjNDAiLCJcdThlNzNcdThlNzVcdThlNzciLDQsIlx1OGU3ZFx1OGU3ZVx1OGU4''@;'; put 'put ''MFx1OGU4Mlx1OGU4M1x1OGU4NFx1OGU4Nlx1OGU4OCIsNiwiXHU4ZTkxXHU4ZTkyXHU4ZTkzXHU4ZTk1Iiw2LCJcdThlOWRcdThlOWYiLDExLCJcdThlYWRcdThlYWVcdThlYjBcdThlYjFcdThlYjMiLDYsIlx1OGViYiIsN10sWyJkYzgwIiwiXHU4ZWMzIiwxMCwiXHU4ZWNmIiwyMSwiXHU1''@;'; put 'put ''ODBiXHU1ODBkXHU1N2ZkXHU1N2VkXHU1ODAwXHU1ODFlXHU1ODE5XHU1ODQ0XHU1ODIwXHU1ODY1XHU1ODZjXHU1ODgxXHU1ODg5XHU1ODlhXHU1ODgwXHU5OWE4XHU5ZjE5XHU2MWZmXHU4Mjc5XHU4MjdkXHU4MjdmXHU4MjhmXHU4MjhhXHU4MmE4XHU4Mjg0XHU4MjhlXHU4MjkxXHU4Mjk3''@;'; put 'put ''XHU4Mjk5XHU4MmFiXHU4MmI4XHU4MmJlXHU4MmIwXHU4MmM4XHU4MmNhXHU4MmUzXHU4Mjk4XHU4MmI3XHU4MmFlXHU4MmNiXHU4MmNjXHU4MmMxXHU4MmE5XHU4MmI0XHU4MmExXHU4MmFhXHU4MjlmXHU4MmM0XHU4MmNlXHU4MmE0XHU4MmUxXHU4MzA5XHU4MmY3XHU4MmU0XHU4MzBmXHU4''@;'; put 'put ''MzA3XHU4MmRjXHU4MmY0XHU4MmQyXHU4MmQ4XHU4MzBjXHU4MmZiXHU4MmQzXHU4MzExXHU4MzFhXHU4MzA2XHU4MzE0XHU4MzE1XHU4MmUwXHU4MmQ1XHU4MzFjXHU4MzUxXHU4MzViXHU4MzVjXHU4MzA4XHU4MzkyXHU4MzNjXHU4MzM0XHU4MzMxXHU4MzliXHU4MzVlXHU4MzJmXHU4MzRm''@;'; put 'put ''XHU4MzQ3XHU4MzQzXHU4MzVmXHU4MzQwXHU4MzE3XHU4MzYwXHU4MzJkXHU4MzNhXHU4MzMzXHU4MzY2XHU4MzY1Il0sWyJkZDQwIiwiXHU4ZWU1Iiw2Ml0sWyJkZDgwIiwiXHU4ZjI0IiwzMiwiXHU4MzY4XHU4MzFiXHU4MzY5XHU4MzZjXHU4MzZhXHU4MzZkXHU4MzZlXHU4M2IwXHU4Mzc4''@;'; put 'put ''XHU4M2IzXHU4M2I0XHU4M2EwXHU4M2FhXHU4MzkzXHU4MzljXHU4Mzg1XHU4MzdjXHU4M2I2XHU4M2E5XHU4MzdkXHU4M2I4XHU4MzdiXHU4Mzk4XHU4MzllXHU4M2E4XHU4M2JhXHU4M2JjXHU4M2MxXHU4NDAxXHU4M2U1XHU4M2Q4XHU1ODA3XHU4NDE4XHU4NDBiXHU4M2RkXHU4M2ZkXHU4''@;'; put 'put ''M2Q2XHU4NDFjXHU4NDM4XHU4NDExXHU4NDA2XHU4M2Q0XHU4M2RmXHU4NDBmXHU4NDAzXHU4M2Y4XHU4M2Y5XHU4M2VhXHU4M2M1XHU4M2MwXHU4NDI2XHU4M2YwXHU4M2UxXHU4NDVjXHU4NDUxXHU4NDVhXHU4NDU5XHU4NDczXHU4NDg3XHU4NDg4XHU4NDdhXHU4NDg5XHU4NDc4XHU4NDNj''@;'; put 'put ''XHU4NDQ2XHU4NDY5XHU4NDc2XHU4NDhjXHU4NDhlXHU4NDMxXHU4NDZkXHU4NGMxXHU4NGNkXHU4NGQwXHU4NGU2XHU4NGJkXHU4NGQzXHU4NGNhXHU4NGJmXHU4NGJhXHU4NGUwXHU4NGExXHU4NGI5XHU4NGI0XHU4NDk3XHU4NGU1XHU4NGUzXHU4NTBjXHU3NTBkXHU4NTM4XHU4NGYwXHU4''@;'; put 'put ''NTM5XHU4NTFmXHU4NTNhIl0sWyJkZTQwIiwiXHU4ZjQ1IiwzMiwiXHU4ZjZhXHU4ZjgwXHU4ZjhjXHU4ZjkyXHU4ZjlkXHU4ZmEwXHU4ZmExXHU4ZmEyXHU4ZmE0XHU4ZmE1XHU4ZmE2XHU4ZmE3XHU4ZmFhXHU4ZmFjXHU4ZmFkXHU4ZmFlXHU4ZmFmXHU4ZmIyXHU4ZmIzXHU4ZmI0XHU4ZmI1''@;'; put 'put ''XHU4ZmI3XHU4ZmI4XHU4ZmJhXHU4ZmJiXHU4ZmJjXHU4ZmJmXHU4ZmMwXHU4ZmMzXHU4ZmM2Il0sWyJkZTgwIiwiXHU4ZmM5Iiw0LCJcdThmY2ZcdThmZDJcdThmZDZcdThmZDdcdThmZGFcdThmZTBcdThmZTFcdThmZTNcdThmZTdcdThmZWNcdThmZWZcdThmZjFcdThmZjJcdThmZjRcdThm''@;'; put 'put ''ZjVcdThmZjZcdThmZmFcdThmZmJcdThmZmNcdThmZmVcdThmZmZcdTkwMDdcdTkwMDhcdTkwMGNcdTkwMGVcdTkwMTNcdTkwMTVcdTkwMThcdTg1NTZcdTg1M2JcdTg0ZmZcdTg0ZmNcdTg1NTlcdTg1NDhcdTg1NjhcdTg1NjRcdTg1NWVcdTg1N2FcdTc3YTJcdTg1NDNcdTg1NzJcdTg1N2Jc''@;'; put 'put ''dTg1YTRcdTg1YThcdTg1ODdcdTg1OGZcdTg1NzlcdTg1YWVcdTg1OWNcdTg1ODVcdTg1YjlcdTg1YjdcdTg1YjBcdTg1ZDNcdTg1YzFcdTg1ZGNcdTg1ZmZcdTg2MjdcdTg2MDVcdTg2MjlcdTg2MTZcdTg2M2NcdTVlZmVcdTVmMDhcdTU5M2NcdTU5NDFcdTgwMzdcdTU5NTVcdTU5NWFcdTU5''@;'; put 'put ''NThcdTUzMGZcdTVjMjJcdTVjMjVcdTVjMmNcdTVjMzRcdTYyNGNcdTYyNmFcdTYyOWZcdTYyYmJcdTYyY2FcdTYyZGFcdTYyZDdcdTYyZWVcdTYzMjJcdTYyZjZcdTYzMzlcdTYzNGJcdTYzNDNcdTYzYWRcdTYzZjZcdTYzNzFcdTYzN2FcdTYzOGVcdTYzYjRcdTYzNmRcdTYzYWNcdTYzOGFc''@;'; put 'put ''dTYzNjlcdTYzYWVcdTYzYmNcdTYzZjJcdTYzZjhcdTYzZTBcdTYzZmZcdTYzYzRcdTYzZGVcdTYzY2VcdTY0NTJcdTYzYzZcdTYzYmVcdTY0NDVcdTY0NDFcdTY0MGJcdTY0MWJcdTY0MjBcdTY0MGNcdTY0MjZcdTY0MjFcdTY0NWVcdTY0ODRcdTY0NmRcdTY0OTYiXSxbImRmNDAiLCJcdTkw''@;'; put 'put ''MTlcdTkwMWNcdTkwMjNcdTkwMjRcdTkwMjVcdTkwMjciLDUsIlx1OTAzMCIsNCwiXHU5MDM3XHU5MDM5XHU5MDNhXHU5MDNkXHU5MDNmXHU5MDQwXHU5MDQzXHU5MDQ1XHU5MDQ2XHU5MDQ4Iiw0LCJcdTkwNGVcdTkwNTRcdTkwNTVcdTkwNTZcdTkwNTlcdTkwNWFcdTkwNWMiLDUsIlx1OTA2''@;'; put 'put ''NFx1OTA2Nlx1OTA2N1x1OTA2OVx1OTA2YVx1OTA2Ylx1OTA2Y1x1OTA2ZiIsNCwiXHU5MDc2Iiw2LCJcdTkwN2VcdTkwODEiXSxbImRmODAiLCJcdTkwODRcdTkwODVcdTkwODZcdTkwODdcdTkwODlcdTkwOGFcdTkwOGMiLDQsIlx1OTA5Mlx1OTA5NFx1OTA5Nlx1OTA5OFx1OTA5YVx1OTA5''@;'; put 'put ''Y1x1OTA5ZVx1OTA5Zlx1OTBhMFx1OTBhNFx1OTBhNVx1OTBhN1x1OTBhOFx1OTBhOVx1OTBhYlx1OTBhZFx1OTBiMlx1OTBiN1x1OTBiY1x1OTBiZFx1OTBiZlx1OTBjMFx1NjQ3YVx1NjRiN1x1NjRiOFx1NjQ5OVx1NjRiYVx1NjRjMFx1NjRkMFx1NjRkN1x1NjRlNFx1NjRlMlx1NjUwOVx1''@;'; put 'put ''NjUyNVx1NjUyZVx1NWYwYlx1NWZkMlx1NzUxOVx1NWYxMVx1NTM1Zlx1NTNmMVx1NTNmZFx1NTNlOVx1NTNlOFx1NTNmYlx1NTQxMlx1NTQxNlx1NTQwNlx1NTQ0Ylx1NTQ1Mlx1NTQ1M1x1NTQ1NFx1NTQ1Nlx1NTQ0M1x1NTQyMVx1NTQ1N1x1NTQ1OVx1NTQyM1x1NTQzMlx1NTQ4Mlx1NTQ5''@;'; put 'put ''NFx1NTQ3N1x1NTQ3MVx1NTQ2NFx1NTQ5YVx1NTQ5Ylx1NTQ4NFx1NTQ3Nlx1NTQ2Nlx1NTQ5ZFx1NTRkMFx1NTRhZFx1NTRjMlx1NTRiNFx1NTRkMlx1NTRhN1x1NTRhNlx1NTRkM1x1NTRkNFx1NTQ3Mlx1NTRhM1x1NTRkNVx1NTRiYlx1NTRiZlx1NTRjY1x1NTRkOVx1NTRkYVx1NTRkY1x1''@;'; put 'put ''NTRhOVx1NTRhYVx1NTRhNFx1NTRkZFx1NTRjZlx1NTRkZVx1NTUxYlx1NTRlN1x1NTUyMFx1NTRmZFx1NTUxNFx1NTRmM1x1NTUyMlx1NTUyM1x1NTUwZlx1NTUxMVx1NTUyN1x1NTUyYVx1NTU2N1x1NTU4Zlx1NTViNVx1NTU0OVx1NTU2ZFx1NTU0MVx1NTU1NVx1NTUzZlx1NTU1MFx1NTUz''@;'; put 'put ''YyJdLFsiZTA0MCIsIlx1OTBjMlx1OTBjM1x1OTBjNlx1OTBjOFx1OTBjOVx1OTBjYlx1OTBjY1x1OTBjZFx1OTBkMlx1OTBkNFx1OTBkNVx1OTBkNlx1OTBkOFx1OTBkOVx1OTBkYVx1OTBkZVx1OTBkZlx1OTBlMFx1OTBlM1x1OTBlNFx1OTBlNVx1OTBlOVx1OTBlYVx1OTBlY1x1OTBlZVx1''@;'; put 'put ''OTBmMFx1OTBmMVx1OTBmMlx1OTBmM1x1OTBmNVx1OTBmNlx1OTBmN1x1OTBmOVx1OTBmYVx1OTBmYlx1OTBmY1x1OTBmZlx1OTEwMFx1OTEwMVx1OTEwM1x1OTEwNSIsMTksIlx1OTExYVx1OTExYlx1OTExYyJdLFsiZTA4MCIsIlx1OTExZFx1OTExZlx1OTEyMFx1OTEyMVx1OTEyNCIsMTAs''@;'; put 'put ''Ilx1OTEzMFx1OTEzMiIsNiwiXHU5MTNhIiw4LCJcdTkxNDRcdTU1MzdcdTU1NTZcdTU1NzVcdTU1NzZcdTU1NzdcdTU1MzNcdTU1MzBcdTU1NWNcdTU1OGJcdTU1ZDJcdTU1ODNcdTU1YjFcdTU1YjlcdTU1ODhcdTU1ODFcdTU1OWZcdTU1N2VcdTU1ZDZcdTU1OTFcdTU1N2JcdTU1ZGZcdTU1''@;'; put 'put ''YmRcdTU1YmVcdTU1OTRcdTU1OTlcdTU1ZWFcdTU1ZjdcdTU1YzlcdTU2MWZcdTU1ZDFcdTU1ZWJcdTU1ZWNcdTU1ZDRcdTU1ZTZcdTU1ZGRcdTU1YzRcdTU1ZWZcdTU1ZTVcdTU1ZjJcdTU1ZjNcdTU1Y2NcdTU1Y2RcdTU1ZThcdTU1ZjVcdTU1ZTRcdThmOTRcdTU2MWVcdTU2MDhcdTU2MGNc''@;'; put 'put ''dTU2MDFcdTU2MjRcdTU2MjNcdTU1ZmVcdTU2MDBcdTU2MjdcdTU2MmRcdTU2NThcdTU2MzlcdTU2NTdcdTU2MmNcdTU2NGRcdTU2NjJcdTU2NTlcdTU2NWNcdTU2NGNcdTU2NTRcdTU2ODZcdTU2NjRcdTU2NzFcdTU2NmJcdTU2N2JcdTU2N2NcdTU2ODVcdTU2OTNcdTU2YWZcdTU2ZDRcdTU2''@;'; put 'put ''ZDdcdTU2ZGRcdTU2ZTFcdTU2ZjVcdTU2ZWJcdTU2ZjlcdTU2ZmZcdTU3MDRcdTU3MGFcdTU3MDlcdTU3MWNcdTVlMGZcdTVlMTlcdTVlMTRcdTVlMTFcdTVlMzFcdTVlM2JcdTVlM2MiXSxbImUxNDAiLCJcdTkxNDVcdTkxNDdcdTkxNDhcdTkxNTFcdTkxNTNcdTkxNTRcdTkxNTVcdTkxNTZc''@;'; put 'put ''dTkxNThcdTkxNTlcdTkxNWJcdTkxNWNcdTkxNWZcdTkxNjBcdTkxNjZcdTkxNjdcdTkxNjhcdTkxNmJcdTkxNmRcdTkxNzNcdTkxN2FcdTkxN2JcdTkxN2NcdTkxODAiLDQsIlx1OTE4Nlx1OTE4OFx1OTE4YVx1OTE4ZVx1OTE4Zlx1OTE5MyIsNiwiXHU5MTljIiw1LCJcdTkxYTQiLDUsIlx1''@;'; put 'put ''OTFhYlx1OTFhY1x1OTFiMFx1OTFiMVx1OTFiMlx1OTFiM1x1OTFiNlx1OTFiN1x1OTFiOFx1OTFiOVx1OTFiYiJdLFsiZTE4MCIsIlx1OTFiYyIsMTAsIlx1OTFjOFx1OTFjYlx1OTFkMFx1OTFkMiIsOSwiXHU5MWRkIiw4LCJcdTVlMzdcdTVlNDRcdTVlNTRcdTVlNWJcdTVlNWVcdTVlNjFc''@;'; put 'put ''dTVjOGNcdTVjN2FcdTVjOGRcdTVjOTBcdTVjOTZcdTVjODhcdTVjOThcdTVjOTlcdTVjOTFcdTVjOWFcdTVjOWNcdTVjYjVcdTVjYTJcdTVjYmRcdTVjYWNcdTVjYWJcdTVjYjFcdTVjYTNcdTVjYzFcdTVjYjdcdTVjYzRcdTVjZDJcdTVjZTRcdTVjY2JcdTVjZTVcdTVkMDJcdTVkMDNcdTVk''@;'; put 'put ''MjdcdTVkMjZcdTVkMmVcdTVkMjRcdTVkMWVcdTVkMDZcdTVkMWJcdTVkNThcdTVkM2VcdTVkMzRcdTVkM2RcdTVkNmNcdTVkNWJcdTVkNmZcdTVkNWRcdTVkNmJcdTVkNGJcdTVkNGFcdTVkNjlcdTVkNzRcdTVkODJcdTVkOTlcdTVkOWRcdThjNzNcdTVkYjdcdTVkYzVcdTVmNzNcdTVmNzdc''@;'; put 'put ''dTVmODJcdTVmODdcdTVmODlcdTVmOGNcdTVmOTVcdTVmOTlcdTVmOWNcdTVmYThcdTVmYWRcdTVmYjVcdTVmYmNcdTg4NjJcdTVmNjFcdTcyYWRcdTcyYjBcdTcyYjRcdTcyYjdcdTcyYjhcdTcyYzNcdTcyYzFcdTcyY2VcdTcyY2RcdTcyZDJcdTcyZThcdTcyZWZcdTcyZTlcdTcyZjJcdTcy''@;'; put 'put ''ZjRcdTcyZjdcdTczMDFcdTcyZjNcdTczMDNcdTcyZmEiXSxbImUyNDAiLCJcdTkxZTYiLDYyXSxbImUyODAiLCJcdTkyMjUiLDMyLCJcdTcyZmJcdTczMTdcdTczMTNcdTczMjFcdTczMGFcdTczMWVcdTczMWRcdTczMTVcdTczMjJcdTczMzlcdTczMjVcdTczMmNcdTczMzhcdTczMzFcdTcz''@;'; put 'put ''NTBcdTczNGRcdTczNTdcdTczNjBcdTczNmNcdTczNmZcdTczN2VcdTgyMWJcdTU5MjVcdTk4ZTdcdTU5MjRcdTU5MDJcdTk5NjNcdTk5NjciLDUsIlx1OTk3NFx1OTk3N1x1OTk3ZFx1OTk4MFx1OTk4NFx1OTk4N1x1OTk4YVx1OTk4ZFx1OTk5MFx1OTk5MVx1OTk5M1x1OTk5NFx1OTk5NVx1''@;'; put 'put ''NWU4MFx1NWU5MVx1NWU4Ylx1NWU5Nlx1NWVhNVx1NWVhMFx1NWViOVx1NWViNVx1NWViZVx1NWViM1x1OGQ1M1x1NWVkMlx1NWVkMVx1NWVkYlx1NWVlOFx1NWVlYVx1ODFiYVx1NWZjNFx1NWZjOVx1NWZkNlx1NWZjZlx1NjAwM1x1NWZlZVx1NjAwNFx1NWZlMVx1NWZlNFx1NWZmZVx1NjAw''@;'; put 'put ''NVx1NjAwNlx1NWZlYVx1NWZlZFx1NWZmOFx1NjAxOVx1NjAzNVx1NjAyNlx1NjAxYlx1NjAwZlx1NjAwZFx1NjAyOVx1NjAyYlx1NjAwYVx1NjAzZlx1NjAyMVx1NjA3OFx1NjA3OVx1NjA3Ylx1NjA3YVx1NjA0MiJdLFsiZTM0MCIsIlx1OTI0NiIsNDUsIlx1OTI3NSIsMTZdLFsiZTM4MCIs''@;'; put 'put ''Ilx1OTI4NiIsNywiXHU5MjhmIiwyNCwiXHU2MDZhXHU2MDdkXHU2MDk2XHU2MDlhXHU2MGFkXHU2MDlkXHU2MDgzXHU2MDkyXHU2MDhjXHU2MDliXHU2MGVjXHU2MGJiXHU2MGIxXHU2MGRkXHU2MGQ4XHU2MGM2XHU2MGRhXHU2MGI0XHU2MTIwXHU2MTI2XHU2MTE1XHU2MTIzXHU2MGY0XHU2''@;'; put 'put ''MTAwXHU2MTBlXHU2MTJiXHU2MTRhXHU2MTc1XHU2MWFjXHU2MTk0XHU2MWE3XHU2MWI3XHU2MWQ0XHU2MWY1XHU1ZmRkXHU5NmIzXHU5NWU5XHU5NWViXHU5NWYxXHU5NWYzXHU5NWY1XHU5NWY2XHU5NWZjXHU5NWZlXHU5NjAzXHU5NjA0XHU5NjA2XHU5NjA4XHU5NjBhXHU5NjBiXHU5NjBj''@;'; put 'put ''XHU5NjBkXHU5NjBmXHU5NjEyXHU5NjE1XHU5NjE2XHU5NjE3XHU5NjE5XHU5NjFhXHU0ZTJjXHU3MjNmXHU2MjE1XHU2YzM1XHU2YzU0XHU2YzVjXHU2YzRhXHU2Y2EzXHU2Yzg1XHU2YzkwXHU2Yzk0XHU2YzhjXHU2YzY4XHU2YzY5XHU2Yzc0XHU2Yzc2XHU2Yzg2XHU2Y2E5XHU2Y2QwXHU2''@;'; put 'put ''Y2Q0XHU2Y2FkXHU2Y2Y3XHU2Y2Y4XHU2Y2YxXHU2Y2Q3XHU2Y2IyXHU2Y2UwXHU2Y2Q2XHU2Y2ZhXHU2Y2ViXHU2Y2VlXHU2Y2IxXHU2Y2QzXHU2Y2VmXHU2Y2ZlIl0sWyJlNDQwIiwiXHU5MmE4Iiw1LCJcdTkyYWYiLDI0LCJcdTkyYzkiLDMxXSxbImU0ODAiLCJcdTkyZTkiLDMyLCJcdTZk''@;'; put 'put ''MzlcdTZkMjdcdTZkMGNcdTZkNDNcdTZkNDhcdTZkMDdcdTZkMDRcdTZkMTlcdTZkMGVcdTZkMmJcdTZkNGRcdTZkMmVcdTZkMzVcdTZkMWFcdTZkNGZcdTZkNTJcdTZkNTRcdTZkMzNcdTZkOTFcdTZkNmZcdTZkOWVcdTZkYTBcdTZkNWVcdTZkOTNcdTZkOTRcdTZkNWNcdTZkNjBcdTZkN2Nc''@;'; put 'put ''dTZkNjNcdTZlMWFcdTZkYzdcdTZkYzVcdTZkZGVcdTZlMGVcdTZkYmZcdTZkZTBcdTZlMTFcdTZkZTZcdTZkZGRcdTZkZDlcdTZlMTZcdTZkYWJcdTZlMGNcdTZkYWVcdTZlMmJcdTZlNmVcdTZlNGVcdTZlNmJcdTZlYjJcdTZlNWZcdTZlODZcdTZlNTNcdTZlNTRcdTZlMzJcdTZlMjVcdTZl''@;'; put 'put ''NDRcdTZlZGZcdTZlYjFcdTZlOThcdTZlZTBcdTZmMmRcdTZlZTJcdTZlYTVcdTZlYTdcdTZlYmRcdTZlYmJcdTZlYjdcdTZlZDdcdTZlYjRcdTZlY2ZcdTZlOGZcdTZlYzJcdTZlOWZcdTZmNjJcdTZmNDZcdTZmNDdcdTZmMjRcdTZmMTVcdTZlZjlcdTZmMmZcdTZmMzZcdTZmNGJcdTZmNzRc''@;'; put 'put ''dTZmMmFcdTZmMDlcdTZmMjlcdTZmODlcdTZmOGRcdTZmOGNcdTZmNzhcdTZmNzJcdTZmN2NcdTZmN2FcdTZmZDEiXSxbImU1NDAiLCJcdTkzMGEiLDUxLCJcdTkzM2YiLDEwXSxbImU1ODAiLCJcdTkzNGEiLDMxLCJcdTkzNmJcdTZmYzlcdTZmYTdcdTZmYjlcdTZmYjZcdTZmYzJcdTZmZTFc''@;'; put 'put ''dTZmZWVcdTZmZGVcdTZmZTBcdTZmZWZcdTcwMWFcdTcwMjNcdTcwMWJcdTcwMzlcdTcwMzVcdTcwNGZcdTcwNWVcdTViODBcdTViODRcdTViOTVcdTViOTNcdTViYTVcdTViYjhcdTc1MmZcdTlhOWVcdTY0MzRcdTViZTRcdTViZWVcdTg5MzBcdTViZjBcdThlNDdcdThiMDdcdThmYjZcdThm''@;'; put 'put ''ZDNcdThmZDVcdThmZTVcdThmZWVcdThmZTRcdThmZTlcdThmZTZcdThmZjNcdThmZThcdTkwMDVcdTkwMDRcdTkwMGJcdTkwMjZcdTkwMTFcdTkwMGRcdTkwMTZcdTkwMjFcdTkwMzVcdTkwMzZcdTkwMmRcdTkwMmZcdTkwNDRcdTkwNTFcdTkwNTJcdTkwNTBcdTkwNjhcdTkwNThcdTkwNjJc''@;'; put 'put ''dTkwNWJcdTY2YjlcdTkwNzRcdTkwN2RcdTkwODJcdTkwODhcdTkwODNcdTkwOGJcdTVmNTBcdTVmNTdcdTVmNTZcdTVmNThcdTVjM2JcdTU0YWJcdTVjNTBcdTVjNTlcdTViNzFcdTVjNjNcdTVjNjZcdTdmYmNcdTVmMmFcdTVmMjlcdTVmMmRcdTgyNzRcdTVmM2NcdTliM2JcdTVjNmVcdTU5''@;'; put 'put ''ODFcdTU5ODNcdTU5OGRcdTU5YTlcdTU5YWFcdTU5YTMiXSxbImU2NDAiLCJcdTkzNmMiLDM0LCJcdTkzOTAiLDI3XSxbImU2ODAiLCJcdTkzYWMiLDI5LCJcdTkzY2JcdTkzY2NcdTkzY2RcdTU5OTdcdTU5Y2FcdTU5YWJcdTU5OWVcdTU5YTRcdTU5ZDJcdTU5YjJcdTU5YWZcdTU5ZDdcdTU5''@;'; put 'put ''YmVcdTVhMDVcdTVhMDZcdTU5ZGRcdTVhMDhcdTU5ZTNcdTU5ZDhcdTU5ZjlcdTVhMGNcdTVhMDlcdTVhMzJcdTVhMzRcdTVhMTFcdTVhMjNcdTVhMTNcdTVhNDBcdTVhNjdcdTVhNGFcdTVhNTVcdTVhM2NcdTVhNjJcdTVhNzVcdTgwZWNcdTVhYWFcdTVhOWJcdTVhNzdcdTVhN2FcdTVhYmVc''@;'; put 'put ''dTVhZWJcdTVhYjJcdTVhZDJcdTVhZDRcdTVhYjhcdTVhZTBcdTVhZTNcdTVhZjFcdTVhZDZcdTVhZTZcdTVhZDhcdTVhZGNcdTViMDlcdTViMTdcdTViMTZcdTViMzJcdTViMzdcdTViNDBcdTVjMTVcdTVjMWNcdTViNWFcdTViNjVcdTViNzNcdTViNTFcdTViNTNcdTViNjJcdTlhNzVcdTlh''@;'; put 'put ''NzdcdTlhNzhcdTlhN2FcdTlhN2ZcdTlhN2RcdTlhODBcdTlhODFcdTlhODVcdTlhODhcdTlhOGFcdTlhOTBcdTlhOTJcdTlhOTNcdTlhOTZcdTlhOThcdTlhOWJcdTlhOWNcdTlhOWRcdTlhOWZcdTlhYTBcdTlhYTJcdTlhYTNcdTlhYTVcdTlhYTdcdTdlOWZcdTdlYTFcdTdlYTNcdTdlYTVc''@;'; put 'put ''dTdlYThcdTdlYTkiXSxbImU3NDAiLCJcdTkzY2UiLDcsIlx1OTNkNyIsNTRdLFsiZTc4MCIsIlx1OTQwZSIsMzIsIlx1N2VhZFx1N2ViMFx1N2ViZVx1N2VjMFx1N2VjMVx1N2VjMlx1N2VjOVx1N2VjYlx1N2VjY1x1N2VkMFx1N2VkNFx1N2VkN1x1N2VkYlx1N2VlMFx1N2VlMVx1N2VlOFx1''@;'; put 'put ''N2VlYlx1N2VlZVx1N2VlZlx1N2VmMVx1N2VmMlx1N2YwZFx1N2VmNlx1N2VmYVx1N2VmYlx1N2VmZVx1N2YwMVx1N2YwMlx1N2YwM1x1N2YwN1x1N2YwOFx1N2YwYlx1N2YwY1x1N2YwZlx1N2YxMVx1N2YxMlx1N2YxN1x1N2YxOVx1N2YxY1x1N2YxYlx1N2YxZlx1N2YyMSIsNiwiXHU3ZjJh''@;'; put 'put ''XHU3ZjJiXHU3ZjJjXHU3ZjJkXHU3ZjJmIiw0LCJcdTdmMzVcdTVlN2FcdTc1N2ZcdTVkZGJcdTc1M2VcdTkwOTVcdTczOGVcdTczOTFcdTczYWVcdTczYTJcdTczOWZcdTczY2ZcdTczYzJcdTczZDFcdTczYjdcdTczYjNcdTczYzBcdTczYzlcdTczYzhcdTczZTVcdTczZDlcdTk4N2NcdTc0''@;'; put 'put ''MGFcdTczZTlcdTczZTdcdTczZGVcdTczYmFcdTczZjJcdTc0MGZcdTc0MmFcdTc0NWJcdTc0MjZcdTc0MjVcdTc0MjhcdTc0MzBcdTc0MmVcdTc0MmMiXSxbImU4NDAiLCJcdTk0MmYiLDE0LCJcdTk0M2YiLDQzLCJcdTk0NmNcdTk0NmRcdTk0NmVcdTk0NmYiXSxbImU4ODAiLCJcdTk0NzAi''@;'; put 'put ''LDIwLCJcdTk0OTFcdTk0OTZcdTk0OThcdTk0YzdcdTk0Y2ZcdTk0ZDNcdTk0ZDRcdTk0ZGFcdTk0ZTZcdTk0ZmJcdTk1MWNcdTk1MjBcdTc0MWJcdTc0MWFcdTc0NDFcdTc0NWNcdTc0NTdcdTc0NTVcdTc0NTlcdTc0NzdcdTc0NmRcdTc0N2VcdTc0OWNcdTc0OGVcdTc0ODBcdTc0ODFcdTc0''@;'; put 'put ''ODdcdTc0OGJcdTc0OWVcdTc0YThcdTc0YTlcdTc0OTBcdTc0YTdcdTc0ZDJcdTc0YmFcdTk3ZWFcdTk3ZWJcdTk3ZWNcdTY3NGNcdTY3NTNcdTY3NWVcdTY3NDhcdTY3NjlcdTY3YTVcdTY3ODdcdTY3NmFcdTY3NzNcdTY3OThcdTY3YTdcdTY3NzVcdTY3YThcdTY3OWVcdTY3YWRcdTY3OGJc''@;'; put 'put ''dTY3NzdcdTY3N2NcdTY3ZjBcdTY4MDlcdTY3ZDhcdTY4MGFcdTY3ZTlcdTY3YjBcdTY4MGNcdTY3ZDlcdTY3YjVcdTY3ZGFcdTY3YjNcdTY3ZGRcdTY4MDBcdTY3YzNcdTY3YjhcdTY3ZTJcdTY4MGVcdTY3YzFcdTY3ZmRcdTY4MzJcdTY4MzNcdTY4NjBcdTY4NjFcdTY4NGVcdTY4NjJcdTY4''@;'; put 'put ''NDRcdTY4NjRcdTY4ODNcdTY4MWRcdTY4NTVcdTY4NjZcdTY4NDFcdTY4NjdcdTY4NDBcdTY4M2VcdTY4NGFcdTY4NDlcdTY4MjlcdTY4YjVcdTY4OGZcdTY4NzRcdTY4NzdcdTY4OTNcdTY4NmJcdTY4YzJcdTY5NmVcdTY4ZmNcdTY5MWZcdTY5MjBcdTY4ZjkiXSxbImU5NDAiLCJcdTk1Mjdc''@;'; put 'put ''dTk1MzNcdTk1M2RcdTk1NDNcdTk1NDhcdTk1NGJcdTk1NTVcdTk1NWFcdTk1NjBcdTk1NmVcdTk1NzRcdTk1NzVcdTk1NzciLDcsIlx1OTU4MCIsNDJdLFsiZTk4MCIsIlx1OTVhYiIsMzIsIlx1NjkyNFx1NjhmMFx1NjkwYlx1NjkwMVx1Njk1N1x1NjhlM1x1NjkxMFx1Njk3MVx1NjkzOVx1''@;'; put 'put ''Njk2MFx1Njk0Mlx1Njk1ZFx1Njk4NFx1Njk2Ylx1Njk4MFx1Njk5OFx1Njk3OFx1NjkzNFx1NjljY1x1Njk4N1x1Njk4OFx1NjljZVx1Njk4OVx1Njk2Nlx1Njk2M1x1Njk3OVx1Njk5Ylx1NjlhN1x1NjliYlx1NjlhYlx1NjlhZFx1NjlkNFx1NjliMVx1NjljMVx1NjljYVx1NjlkZlx1Njk5''@;'; put 'put ''NVx1NjllMFx1Njk4ZFx1NjlmZlx1NmEyZlx1NjllZFx1NmExN1x1NmExOFx1NmE2NVx1NjlmMlx1NmE0NFx1NmEzZVx1NmFhMFx1NmE1MFx1NmE1Ylx1NmEzNVx1NmE4ZVx1NmE3OVx1NmEzZFx1NmEyOFx1NmE1OFx1NmE3Y1x1NmE5MVx1NmE5MFx1NmFhOVx1NmE5N1x1NmFhYlx1NzMzN1x1''@;'; put 'put ''NzM1Mlx1NmI4MVx1NmI4Mlx1NmI4N1x1NmI4NFx1NmI5Mlx1NmI5M1x1NmI4ZFx1NmI5YVx1NmI5Ylx1NmJhMVx1NmJhYVx1OGY2Ylx1OGY2ZFx1OGY3MVx1OGY3Mlx1OGY3M1x1OGY3NVx1OGY3Nlx1OGY3OFx1OGY3N1x1OGY3OVx1OGY3YVx1OGY3Y1x1OGY3ZVx1OGY4MVx1OGY4Mlx1OGY4''@;'; put 'put ''NFx1OGY4N1x1OGY4YiJdLFsiZWE0MCIsIlx1OTVjYyIsMjcsIlx1OTVlY1x1OTVmZlx1OTYwN1x1OTYxM1x1OTYxOFx1OTYxYlx1OTYxZVx1OTYyMFx1OTYyMyIsNiwiXHU5NjJiXHU5NjJjXHU5NjJkXHU5NjJmXHU5NjMwXHU5NjM3XHU5NjM4XHU5NjM5XHU5NjNhXHU5NjNlXHU5NjQxXHU5''@;'; put 'put ''NjQzXHU5NjRhXHU5NjRlXHU5NjRmXHU5NjUxXHU5NjUyXHU5NjUzXHU5NjU2XHU5NjU3Il0sWyJlYTgwIiwiXHU5NjU4XHU5NjU5XHU5NjVhXHU5NjVjXHU5NjVkXHU5NjVlXHU5NjYwXHU5NjYzXHU5NjY1XHU5NjY2XHU5NjZiXHU5NjZkIiw0LCJcdTk2NzNcdTk2NzgiLDEyLCJcdTk2ODdc''@;'; put 'put ''dTk2ODlcdTk2OGFcdThmOGRcdThmOGVcdThmOGZcdThmOThcdThmOWFcdThlY2VcdTYyMGJcdTYyMTdcdTYyMWJcdTYyMWZcdTYyMjJcdTYyMjFcdTYyMjVcdTYyMjRcdTYyMmNcdTgxZTdcdTc0ZWZcdTc0ZjRcdTc0ZmZcdTc1MGZcdTc1MTFcdTc1MTNcdTY1MzRcdTY1ZWVcdTY1ZWZcdTY1''@;'; put 'put ''ZjBcdTY2MGFcdTY2MTlcdTY3NzJcdTY2MDNcdTY2MTVcdTY2MDBcdTcwODVcdTY2ZjdcdTY2MWRcdTY2MzRcdTY2MzFcdTY2MzZcdTY2MzVcdTgwMDZcdTY2NWZcdTY2NTRcdTY2NDFcdTY2NGZcdTY2NTZcdTY2NjFcdTY2NTdcdTY2NzdcdTY2ODRcdTY2OGNcdTY2YTdcdTY2OWRcdTY2YmVc''@;'; put 'put ''dTY2ZGJcdTY2ZGNcdTY2ZTZcdTY2ZTlcdThkMzJcdThkMzNcdThkMzZcdThkM2JcdThkM2RcdThkNDBcdThkNDVcdThkNDZcdThkNDhcdThkNDlcdThkNDdcdThkNGRcdThkNTVcdThkNTlcdTg5YzdcdTg5Y2FcdTg5Y2JcdTg5Y2NcdTg5Y2VcdTg5Y2ZcdTg5ZDBcdTg5ZDFcdTcyNmVcdTcy''@;'; put 'put ''OWZcdTcyNWRcdTcyNjZcdTcyNmZcdTcyN2VcdTcyN2ZcdTcyODRcdTcyOGJcdTcyOGRcdTcyOGZcdTcyOTJcdTYzMDhcdTYzMzJcdTYzYjAiXSxbImViNDAiLCJcdTk2OGNcdTk2OGVcdTk2OTFcdTk2OTJcdTk2OTNcdTk2OTVcdTk2OTZcdTk2OWFcdTk2OWJcdTk2OWQiLDksIlx1OTZhOCIs''@;'; put 'put ''NywiXHU5NmIxXHU5NmIyXHU5NmI0XHU5NmI1XHU5NmI3XHU5NmI4XHU5NmJhXHU5NmJiXHU5NmJmXHU5NmMyXHU5NmMzXHU5NmM4XHU5NmNhXHU5NmNiXHU5NmQwXHU5NmQxXHU5NmQzXHU5NmQ0XHU5NmQ2Iiw5LCJcdTk2ZTEiLDYsIlx1OTZlYiJdLFsiZWI4MCIsIlx1OTZlY1x1OTZlZFx1''@;'; put 'put ''OTZlZVx1OTZmMFx1OTZmMVx1OTZmMlx1OTZmNFx1OTZmNVx1OTZmOFx1OTZmYVx1OTZmYlx1OTZmY1x1OTZmZFx1OTZmZlx1OTcwMlx1OTcwM1x1OTcwNVx1OTcwYVx1OTcwYlx1OTcwY1x1OTcxMFx1OTcxMVx1OTcxMlx1OTcxNFx1OTcxNVx1OTcxNyIsNCwiXHU5NzFkXHU5NzFmXHU5NzIw''@;'; put 'put ''XHU2NDNmXHU2NGQ4XHU4MDA0XHU2YmVhXHU2YmYzXHU2YmZkXHU2YmY1XHU2YmY5XHU2YzA1XHU2YzA3XHU2YzA2XHU2YzBkXHU2YzE1XHU2YzE4XHU2YzE5XHU2YzFhXHU2YzIxXHU2YzI5XHU2YzI0XHU2YzJhXHU2YzMyXHU2NTM1XHU2NTU1XHU2NTZiXHU3MjRkXHU3MjUyXHU3MjU2XHU3''@;'; put 'put ''MjMwXHU4NjYyXHU1MjE2XHU4MDlmXHU4MDljXHU4MDkzXHU4MGJjXHU2NzBhXHU4MGJkXHU4MGIxXHU4MGFiXHU4MGFkXHU4MGI0XHU4MGI3XHU4MGU3XHU4MGU4XHU4MGU5XHU4MGVhXHU4MGRiXHU4MGMyXHU4MGM0XHU4MGQ5XHU4MGNkXHU4MGQ3XHU2NzEwXHU4MGRkXHU4MGViXHU4MGYx''@;'; put 'put ''XHU4MGY0XHU4MGVkXHU4MTBkXHU4MTBlXHU4MGYyXHU4MGZjXHU2NzE1XHU4MTEyXHU4YzVhXHU4MTM2XHU4MTFlXHU4MTJjXHU4MTE4XHU4MTMyXHU4MTQ4XHU4MTRjXHU4MTUzXHU4MTc0XHU4MTU5XHU4MTVhXHU4MTcxXHU4MTYwXHU4MTY5XHU4MTdjXHU4MTdkXHU4MTZkXHU4MTY3XHU1''@;'; put 'put ''ODRkXHU1YWI1XHU4MTg4XHU4MTgyXHU4MTkxXHU2ZWQ1XHU4MWEzXHU4MWFhXHU4MWNjXHU2NzI2XHU4MWNhXHU4MWJiIl0sWyJlYzQwIiwiXHU5NzIxIiw4LCJcdTk3MmJcdTk3MmNcdTk3MmVcdTk3MmZcdTk3MzFcdTk3MzMiLDQsIlx1OTczYVx1OTczYlx1OTczY1x1OTczZFx1OTczZiIs''@;'; put 'put ''MTgsIlx1OTc1NFx1OTc1NVx1OTc1N1x1OTc1OFx1OTc1YVx1OTc1Y1x1OTc1ZFx1OTc1Zlx1OTc2M1x1OTc2NFx1OTc2Nlx1OTc2N1x1OTc2OFx1OTc2YSIsN10sWyJlYzgwIiwiXHU5NzcyXHU5Nzc1XHU5Nzc3Iiw0LCJcdTk3N2QiLDcsIlx1OTc4NiIsNCwiXHU5NzhjXHU5NzhlXHU5Nzhm''@;'; put 'put ''XHU5NzkwXHU5NzkzXHU5Nzk1XHU5Nzk2XHU5Nzk3XHU5Nzk5Iiw0LCJcdTgxYzFcdTgxYTZcdTZiMjRcdTZiMzdcdTZiMzlcdTZiNDNcdTZiNDZcdTZiNTlcdTk4ZDFcdTk4ZDJcdTk4ZDNcdTk4ZDVcdTk4ZDlcdTk4ZGFcdTZiYjNcdTVmNDBcdTZiYzJcdTg5ZjNcdTY1OTBcdTlmNTFcdTY1''@;'; put 'put ''OTNcdTY1YmNcdTY1YzZcdTY1YzRcdTY1YzNcdTY1Y2NcdTY1Y2VcdTY1ZDJcdTY1ZDZcdTcwODBcdTcwOWNcdTcwOTZcdTcwOWRcdTcwYmJcdTcwYzBcdTcwYjdcdTcwYWJcdTcwYjFcdTcwZThcdTcwY2FcdTcxMTBcdTcxMTNcdTcxMTZcdTcxMmZcdTcxMzFcdTcxNzNcdTcxNWNcdTcxNjhc''@;'; put 'put ''dTcxNDVcdTcxNzJcdTcxNGFcdTcxNzhcdTcxN2FcdTcxOThcdTcxYjNcdTcxYjVcdTcxYThcdTcxYTBcdTcxZTBcdTcxZDRcdTcxZTdcdTcxZjlcdTcyMWRcdTcyMjhcdTcwNmNcdTcxMThcdTcxNjZcdTcxYjlcdTYyM2VcdTYyM2RcdTYyNDNcdTYyNDhcdTYyNDlcdTc5M2JcdTc5NDBcdTc5''@;'; put 'put ''NDZcdTc5NDlcdTc5NWJcdTc5NWNcdTc5NTNcdTc5NWFcdTc5NjJcdTc5NTdcdTc5NjBcdTc5NmZcdTc5NjdcdTc5N2FcdTc5ODVcdTc5OGFcdTc5OWFcdTc5YTdcdTc5YjNcdTVmZDFcdTVmZDAiXSxbImVkNDAiLCJcdTk3OWVcdTk3OWZcdTk3YTFcdTk3YTJcdTk3YTQiLDYsIlx1OTdhY1x1''@;'; put 'put ''OTdhZVx1OTdiMFx1OTdiMVx1OTdiM1x1OTdiNSIsNDZdLFsiZWQ4MCIsIlx1OTdlNFx1OTdlNVx1OTdlOFx1OTdlZSIsNCwiXHU5N2Y0XHU5N2Y3IiwyMywiXHU2MDNjXHU2MDVkXHU2MDVhXHU2MDY3XHU2MDQxXHU2MDU5XHU2MDYzXHU2MGFiXHU2MTA2XHU2MTBkXHU2MTVkXHU2MWE5XHU2''@;'; put 'put ''MTlkXHU2MWNiXHU2MWQxXHU2MjA2XHU4MDgwXHU4MDdmXHU2YzkzXHU2Y2Y2XHU2ZGZjXHU3N2Y2XHU3N2Y4XHU3ODAwXHU3ODA5XHU3ODE3XHU3ODE4XHU3ODExXHU2NWFiXHU3ODJkXHU3ODFjXHU3ODFkXHU3ODM5XHU3ODNhXHU3ODNiXHU3ODFmXHU3ODNjXHU3ODI1XHU3ODJjXHU3ODIz''@;'; put 'put ''XHU3ODI5XHU3ODRlXHU3ODZkXHU3ODU2XHU3ODU3XHU3ODI2XHU3ODUwXHU3ODQ3XHU3ODRjXHU3ODZhXHU3ODliXHU3ODkzXHU3ODlhXHU3ODg3XHU3ODljXHU3OGExXHU3OGEzXHU3OGIyXHU3OGI5XHU3OGE1XHU3OGQ0XHU3OGQ5XHU3OGM5XHU3OGVjXHU3OGYyXHU3OTA1XHU3OGY0XHU3''@;'; put 'put ''OTEzXHU3OTI0XHU3OTFlXHU3OTM0XHU5ZjliXHU5ZWY5XHU5ZWZiXHU5ZWZjXHU3NmYxXHU3NzA0XHU3NzBkXHU3NmY5XHU3NzA3XHU3NzA4XHU3NzFhXHU3NzIyXHU3NzE5XHU3NzJkXHU3NzI2XHU3NzM1XHU3NzM4XHU3NzUwXHU3NzUxXHU3NzQ3XHU3NzQzXHU3NzVhXHU3NzY4Il0sWyJl''@;'; put 'put ''ZTQwIiwiXHU5ODBmIiw2Ml0sWyJlZTgwIiwiXHU5ODRlIiwzMiwiXHU3NzYyXHU3NzY1XHU3NzdmXHU3NzhkXHU3NzdkXHU3NzgwXHU3NzhjXHU3NzkxXHU3NzlmXHU3N2EwXHU3N2IwXHU3N2I1XHU3N2JkXHU3NTNhXHU3NTQwXHU3NTRlXHU3NTRiXHU3NTQ4XHU3NTViXHU3NTcyXHU3NTc5''@;'; put 'put ''XHU3NTgzXHU3ZjU4XHU3ZjYxXHU3ZjVmXHU4YTQ4XHU3ZjY4XHU3Zjc0XHU3ZjcxXHU3Zjc5XHU3ZjgxXHU3ZjdlXHU3NmNkXHU3NmU1XHU4ODMyXHU5NDg1XHU5NDg2XHU5NDg3XHU5NDhiXHU5NDhhXHU5NDhjXHU5NDhkXHU5NDhmXHU5NDkwXHU5NDk0XHU5NDk3XHU5NDk1XHU5NDlhXHU5''@;'; put 'put ''NDliXHU5NDljXHU5NGEzXHU5NGE0XHU5NGFiXHU5NGFhXHU5NGFkXHU5NGFjXHU5NGFmXHU5NGIwXHU5NGIyXHU5NGI0XHU5NGI2Iiw0LCJcdTk0YmNcdTk0YmRcdTk0YmZcdTk0YzRcdTk0YzgiLDYsIlx1OTRkMFx1OTRkMVx1OTRkMlx1OTRkNVx1OTRkNlx1OTRkN1x1OTRkOVx1OTRkOFx1''@;'; put 'put ''OTRkYlx1OTRkZVx1OTRkZlx1OTRlMFx1OTRlMlx1OTRlNFx1OTRlNVx1OTRlN1x1OTRlOFx1OTRlYSJdLFsiZWY0MCIsIlx1OTg2ZiIsNSwiXHU5ODhiXHU5ODhlXHU5ODkyXHU5ODk1XHU5ODk5XHU5OGEzXHU5OGE4IiwzNywiXHU5OGNmXHU5OGQwXHU5OGQ0XHU5OGQ2XHU5OGQ3XHU5OGRi''@;'; put 'put ''XHU5OGRjXHU5OGRkXHU5OGUwIiw0XSxbImVmODAiLCJcdTk4ZTVcdTk4ZTZcdTk4ZTkiLDMwLCJcdTk0ZTlcdTk0ZWJcdTk0ZWVcdTk0ZWZcdTk0ZjNcdTk0ZjRcdTk0ZjVcdTk0ZjdcdTk0ZjlcdTk0ZmNcdTk0ZmRcdTk0ZmZcdTk1MDNcdTk1MDJcdTk1MDZcdTk1MDdcdTk1MDlcdTk1MGFc''@;'; put 'put ''dTk1MGRcdTk1MGVcdTk1MGZcdTk1MTIiLDQsIlx1OTUxOFx1OTUxYlx1OTUxZFx1OTUxZVx1OTUxZlx1OTUyMlx1OTUyYVx1OTUyYlx1OTUyOVx1OTUyY1x1OTUzMVx1OTUzMlx1OTUzNFx1OTUzNlx1OTUzN1x1OTUzOFx1OTUzY1x1OTUzZVx1OTUzZlx1OTU0Mlx1OTUzNVx1OTU0NFx1OTU0''@;'; put 'put ''NVx1OTU0Nlx1OTU0OVx1OTU0Y1x1OTU0ZVx1OTU0Zlx1OTU1Mlx1OTU1M1x1OTU1NFx1OTU1Nlx1OTU1N1x1OTU1OFx1OTU1OVx1OTU1Ylx1OTU1ZVx1OTU1Zlx1OTU1ZFx1OTU2MVx1OTU2Mlx1OTU2NCIsOCwiXHU5NTZmXHU5NTcxXHU5NTcyXHU5NTczXHU5NTNhXHU3N2U3XHU3N2VjXHU5''@;'; put 'put ''NmM5XHU3OWQ1XHU3OWVkXHU3OWUzXHU3OWViXHU3YTA2XHU1ZDQ3XHU3YTAzXHU3YTAyXHU3YTFlXHU3YTE0Il0sWyJmMDQwIiwiXHU5OTA4Iiw0LCJcdTk5MGVcdTk5MGZcdTk5MTEiLDI4LCJcdTk5MmYiLDI2XSxbImYwODAiLCJcdTk5NGEiLDksIlx1OTk1NiIsMTIsIlx1OTk2NFx1OTk2''@;'; put 'put ''Nlx1OTk3M1x1OTk3OFx1OTk3OVx1OTk3Ylx1OTk3ZVx1OTk4Mlx1OTk4M1x1OTk4OVx1N2EzOVx1N2EzN1x1N2E1MVx1OWVjZlx1OTlhNVx1N2E3MFx1NzY4OFx1NzY4ZVx1NzY5M1x1NzY5OVx1NzZhNFx1NzRkZVx1NzRlMFx1NzUyY1x1OWUyMFx1OWUyMlx1OWUyOCIsNCwiXHU5ZTMyXHU5''@;'; put 'put ''ZTMxXHU5ZTM2XHU5ZTM4XHU5ZTM3XHU5ZTM5XHU5ZTNhXHU5ZTNlXHU5ZTQxXHU5ZTQyXHU5ZTQ0XHU5ZTQ2XHU5ZTQ3XHU5ZTQ4XHU5ZTQ5XHU5ZTRiXHU5ZTRjXHU5ZTRlXHU5ZTUxXHU5ZTU1XHU5ZTU3XHU5ZTVhXHU5ZTViXHU5ZTVjXHU5ZTVlXHU5ZTYzXHU5ZTY2Iiw2LCJcdTllNzFc''@;'; put 'put ''dTllNmRcdTllNzNcdTc1OTJcdTc1OTRcdTc1OTZcdTc1YTBcdTc1OWRcdTc1YWNcdTc1YTNcdTc1YjNcdTc1YjRcdTc1YjhcdTc1YzRcdTc1YjFcdTc1YjBcdTc1YzNcdTc1YzJcdTc1ZDZcdTc1Y2RcdTc1ZTNcdTc1ZThcdTc1ZTZcdTc1ZTRcdTc1ZWJcdTc1ZTdcdTc2MDNcdTc1ZjFcdTc1''@;'; put 'put ''ZmNcdTc1ZmZcdTc2MTBcdTc2MDBcdTc2MDVcdTc2MGNcdTc2MTdcdTc2MGFcdTc2MjVcdTc2MThcdTc2MTVcdTc2MTkiXSxbImYxNDAiLCJcdTk5OGNcdTk5OGVcdTk5OWEiLDEwLCJcdTk5YTZcdTk5YTdcdTk5YTkiLDQ3XSxbImYxODAiLCJcdTk5ZDkiLDMyLCJcdTc2MWJcdTc2M2NcdTc2''@;'; put 'put ''MjJcdTc2MjBcdTc2NDBcdTc2MmRcdTc2MzBcdTc2M2ZcdTc2MzVcdTc2NDNcdTc2M2VcdTc2MzNcdTc2NGRcdTc2NWVcdTc2NTRcdTc2NWNcdTc2NTZcdTc2NmJcdTc2NmZcdTdmY2FcdTdhZTZcdTdhNzhcdTdhNzlcdTdhODBcdTdhODZcdTdhODhcdTdhOTVcdTdhYTZcdTdhYTBcdTdhYWNc''@;'; put 'put ''dTdhYThcdTdhYWRcdTdhYjNcdTg4NjRcdTg4NjlcdTg4NzJcdTg4N2RcdTg4N2ZcdTg4ODJcdTg4YTJcdTg4YzZcdTg4YjdcdTg4YmNcdTg4YzlcdTg4ZTJcdTg4Y2VcdTg4ZTNcdTg4ZTVcdTg4ZjFcdTg5MWFcdTg4ZmNcdTg4ZThcdTg4ZmVcdTg4ZjBcdTg5MjFcdTg5MTlcdTg5MTNcdTg5''@;'; put 'put ''MWJcdTg5MGFcdTg5MzRcdTg5MmJcdTg5MzZcdTg5NDFcdTg5NjZcdTg5N2JcdTc1OGJcdTgwZTVcdTc2YjJcdTc2YjRcdTc3ZGNcdTgwMTJcdTgwMTRcdTgwMTZcdTgwMWNcdTgwMjBcdTgwMjJcdTgwMjVcdTgwMjZcdTgwMjdcdTgwMjlcdTgwMjhcdTgwMzFcdTgwMGJcdTgwMzVcdTgwNDNc''@;'; put 'put ''dTgwNDZcdTgwNGRcdTgwNTJcdTgwNjlcdTgwNzFcdTg5ODNcdTk4NzhcdTk4ODBcdTk4ODMiXSxbImYyNDAiLCJcdTk5ZmEiLDYyXSxbImYyODAiLCJcdTlhMzkiLDMyLCJcdTk4ODlcdTk4OGNcdTk4OGRcdTk4OGZcdTk4OTRcdTk4OWFcdTk4OWJcdTk4OWVcdTk4OWZcdTk4YTFcdTk4YTJc''@;'; put 'put ''dTk4YTVcdTk4YTZcdTg2NGRcdTg2NTRcdTg2NmNcdTg2NmVcdTg2N2ZcdTg2N2FcdTg2N2NcdTg2N2JcdTg2YThcdTg2OGRcdTg2OGJcdTg2YWNcdTg2OWRcdTg2YTdcdTg2YTNcdTg2YWFcdTg2OTNcdTg2YTlcdTg2YjZcdTg2YzRcdTg2YjVcdTg2Y2VcdTg2YjBcdTg2YmFcdTg2YjFcdTg2''@;'; put 'put ''YWZcdTg2YzlcdTg2Y2ZcdTg2YjRcdTg2ZTlcdTg2ZjFcdTg2ZjJcdTg2ZWRcdTg2ZjNcdTg2ZDBcdTg3MTNcdTg2ZGVcdTg2ZjRcdTg2ZGZcdTg2ZDhcdTg2ZDFcdTg3MDNcdTg3MDdcdTg2ZjhcdTg3MDhcdTg3MGFcdTg3MGRcdTg3MDlcdTg3MjNcdTg3M2JcdTg3MWVcdTg3MjVcdTg3MmVc''@;'; put 'put ''dTg3MWFcdTg3M2VcdTg3NDhcdTg3MzRcdTg3MzFcdTg3MjlcdTg3MzdcdTg3M2ZcdTg3ODJcdTg3MjJcdTg3N2RcdTg3N2VcdTg3N2JcdTg3NjBcdTg3NzBcdTg3NGNcdTg3NmVcdTg3OGJcdTg3NTNcdTg3NjNcdTg3N2NcdTg3NjRcdTg3NTlcdTg3NjVcdTg3OTNcdTg3YWZcdTg3YThcdTg3''@;'; put 'put ''ZDIiXSxbImYzNDAiLCJcdTlhNWEiLDE3LCJcdTlhNzJcdTlhODNcdTlhODlcdTlhOGRcdTlhOGVcdTlhOTRcdTlhOTVcdTlhOTlcdTlhYTZcdTlhYTkiLDYsIlx1OWFiMlx1OWFiM1x1OWFiNFx1OWFiNVx1OWFiOVx1OWFiYlx1OWFiZFx1OWFiZVx1OWFiZlx1OWFjM1x1OWFjNFx1OWFjNiIs''@;'; put 'put ''NCwiXHU5YWNkXHU5YWNlXHU5YWNmXHU5YWQwXHU5YWQyXHU5YWQ0XHU5YWQ1XHU5YWQ2XHU5YWQ3XHU5YWQ5XHU5YWRhXHU5YWRiXHU5YWRjIl0sWyJmMzgwIiwiXHU5YWRkXHU5YWRlXHU5YWUwXHU5YWUyXHU5YWUzXHU5YWU0XHU5YWU1XHU5YWU3XHU5YWU4XHU5YWU5XHU5YWVhXHU5YWVj''@;'; put 'put ''XHU5YWVlXHU5YWYwIiw4LCJcdTlhZmFcdTlhZmMiLDYsIlx1OWIwNFx1OWIwNVx1OWIwNlx1ODdjNlx1ODc4OFx1ODc4NVx1ODdhZFx1ODc5N1x1ODc4M1x1ODdhYlx1ODdlNVx1ODdhY1x1ODdiNVx1ODdiM1x1ODdjYlx1ODdkM1x1ODdiZFx1ODdkMVx1ODdjMFx1ODdjYVx1ODdkYlx1ODdl''@;'; put 'put ''YVx1ODdlMFx1ODdlZVx1ODgxNlx1ODgxM1x1ODdmZVx1ODgwYVx1ODgxYlx1ODgyMVx1ODgzOVx1ODgzY1x1N2YzNlx1N2Y0Mlx1N2Y0NFx1N2Y0NVx1ODIxMFx1N2FmYVx1N2FmZFx1N2IwOFx1N2IwM1x1N2IwNFx1N2IxNVx1N2IwYVx1N2IyYlx1N2IwZlx1N2I0N1x1N2IzOFx1N2IyYVx1''@;'; put 'put ''N2IxOVx1N2IyZVx1N2IzMVx1N2IyMFx1N2IyNVx1N2IyNFx1N2IzM1x1N2IzZVx1N2IxZVx1N2I1OFx1N2I1YVx1N2I0NVx1N2I3NVx1N2I0Y1x1N2I1ZFx1N2I2MFx1N2I2ZVx1N2I3Ylx1N2I2Mlx1N2I3Mlx1N2I3MVx1N2I5MFx1N2JhNlx1N2JhN1x1N2JiOFx1N2JhY1x1N2I5ZFx1N2Jh''@;'; put 'put ''OFx1N2I4NVx1N2JhYVx1N2I5Y1x1N2JhMlx1N2JhYlx1N2JiNFx1N2JkMVx1N2JjMVx1N2JjY1x1N2JkZFx1N2JkYVx1N2JlNVx1N2JlNlx1N2JlYVx1N2MwY1x1N2JmZVx1N2JmY1x1N2MwZlx1N2MxNlx1N2MwYiJdLFsiZjQ0MCIsIlx1OWIwN1x1OWIwOSIsNSwiXHU5YjEwXHU5YjExXHU5''@;'; put 'put ''YjEyXHU5YjE0IiwxMCwiXHU5YjIwXHU5YjIxXHU5YjIyXHU5YjI0IiwxMCwiXHU5YjMwXHU5YjMxXHU5YjMzIiw3LCJcdTliM2RcdTliM2VcdTliM2ZcdTliNDBcdTliNDZcdTliNGFcdTliNGJcdTliNGNcdTliNGVcdTliNTBcdTliNTJcdTliNTNcdTliNTUiLDVdLFsiZjQ4MCIsIlx1OWI1''@;'; put 'put ''YiIsMzIsIlx1N2MxZlx1N2MyYVx1N2MyNlx1N2MzOFx1N2M0MVx1N2M0MFx1ODFmZVx1ODIwMVx1ODIwMlx1ODIwNFx1ODFlY1x1ODg0NFx1ODIyMVx1ODIyMlx1ODIyM1x1ODIyZFx1ODIyZlx1ODIyOFx1ODIyYlx1ODIzOFx1ODIzYlx1ODIzM1x1ODIzNFx1ODIzZVx1ODI0NFx1ODI0OVx1''@;'; put 'put ''ODI0Ylx1ODI0Zlx1ODI1YVx1ODI1Zlx1ODI2OFx1ODg3ZVx1ODg4NVx1ODg4OFx1ODhkOFx1ODhkZlx1ODk1ZVx1N2Y5ZFx1N2Y5Zlx1N2ZhN1x1N2ZhZlx1N2ZiMFx1N2ZiMlx1N2M3Y1x1NjU0OVx1N2M5MVx1N2M5ZFx1N2M5Y1x1N2M5ZVx1N2NhMlx1N2NiMlx1N2NiY1x1N2NiZFx1N2Nj''@;'; put 'put ''MVx1N2NjN1x1N2NjY1x1N2NjZFx1N2NjOFx1N2NjNVx1N2NkN1x1N2NlOFx1ODI2ZVx1NjZhOFx1N2ZiZlx1N2ZjZVx1N2ZkNVx1N2ZlNVx1N2ZlMVx1N2ZlNlx1N2ZlOVx1N2ZlZVx1N2ZmM1x1N2NmOFx1N2Q3N1x1N2RhNlx1N2RhZVx1N2U0N1x1N2U5Ylx1OWViOFx1OWViNFx1OGQ3M1x1''@;'; put 'put ''OGQ4NFx1OGQ5NFx1OGQ5MVx1OGRiMVx1OGQ2N1x1OGQ2ZFx1OGM0N1x1OGM0OVx1OTE0YVx1OTE1MFx1OTE0ZVx1OTE0Zlx1OTE2NCJdLFsiZjU0MCIsIlx1OWI3YyIsNjJdLFsiZjU4MCIsIlx1OWJiYiIsMzIsIlx1OTE2Mlx1OTE2MVx1OTE3MFx1OTE2OVx1OTE2Zlx1OTE3ZFx1OTE3ZVx1''@;'; put 'put ''OTE3Mlx1OTE3NFx1OTE3OVx1OTE4Y1x1OTE4NVx1OTE5MFx1OTE4ZFx1OTE5MVx1OTFhMlx1OTFhM1x1OTFhYVx1OTFhZFx1OTFhZVx1OTFhZlx1OTFiNVx1OTFiNFx1OTFiYVx1OGM1NVx1OWU3ZVx1OGRiOFx1OGRlYlx1OGUwNVx1OGU1OVx1OGU2OVx1OGRiNVx1OGRiZlx1OGRiY1x1OGRi''@;'; put 'put ''YVx1OGRjNFx1OGRkNlx1OGRkN1x1OGRkYVx1OGRkZVx1OGRjZVx1OGRjZlx1OGRkYlx1OGRjNlx1OGRlY1x1OGRmN1x1OGRmOFx1OGRlM1x1OGRmOVx1OGRmYlx1OGRlNFx1OGUwOVx1OGRmZFx1OGUxNFx1OGUxZFx1OGUxZlx1OGUyY1x1OGUyZVx1OGUyM1x1OGUyZlx1OGUzYVx1OGU0MFx1''@;'; put 'put ''OGUzOVx1OGUzNVx1OGUzZFx1OGUzMVx1OGU0OVx1OGU0MVx1OGU0Mlx1OGU1MVx1OGU1Mlx1OGU0YVx1OGU3MFx1OGU3Nlx1OGU3Y1x1OGU2Zlx1OGU3NFx1OGU4NVx1OGU4Zlx1OGU5NFx1OGU5MFx1OGU5Y1x1OGU5ZVx1OGM3OFx1OGM4Mlx1OGM4YVx1OGM4NVx1OGM5OFx1OGM5NFx1NjU5''@;'; put 'put ''Ylx1ODlkNlx1ODlkZVx1ODlkYVx1ODlkYyJdLFsiZjY0MCIsIlx1OWJkYyIsNjJdLFsiZjY4MCIsIlx1OWMxYiIsMzIsIlx1ODllNVx1ODllYlx1ODllZlx1OGEzZVx1OGIyNlx1OTc1M1x1OTZlOVx1OTZmM1x1OTZlZlx1OTcwNlx1OTcwMVx1OTcwOFx1OTcwZlx1OTcwZVx1OTcyYVx1OTcy''@;'; put 'put ''ZFx1OTczMFx1OTczZVx1OWY4MFx1OWY4M1x1OWY4NSIsNSwiXHU5ZjhjXHU5ZWZlXHU5ZjBiXHU5ZjBkXHU5NmI5XHU5NmJjXHU5NmJkXHU5NmNlXHU5NmQyXHU3N2JmXHU5NmUwXHU5MjhlXHU5MmFlXHU5MmM4XHU5MzNlXHU5MzZhXHU5M2NhXHU5MzhmXHU5NDNlXHU5NDZiXHU5YzdmXHU5''@;'; put 'put ''YzgyXHU5Yzg1XHU5Yzg2XHU5Yzg3XHU5Yzg4XHU3YTIzXHU5YzhiXHU5YzhlXHU5YzkwXHU5YzkxXHU5YzkyXHU5Yzk0XHU5Yzk1XHU5YzlhXHU5YzliXHU5YzllIiw1LCJcdTljYTUiLDQsIlx1OWNhYlx1OWNhZFx1OWNhZVx1OWNiMCIsNywiXHU5Y2JhXHU5Y2JiXHU5Y2JjXHU5Y2JkXHU5''@;'; put 'put ''Y2M0XHU5Y2M1XHU5Y2M2XHU5Y2M3XHU5Y2NhXHU5Y2NiIl0sWyJmNzQwIiwiXHU5YzNjIiw2Ml0sWyJmNzgwIiwiXHU5YzdiXHU5YzdkXHU5YzdlXHU5YzgwXHU5YzgzXHU5Yzg0XHU5Yzg5XHU5YzhhXHU5YzhjXHU5YzhmXHU5YzkzXHU5Yzk2XHU5Yzk3XHU5Yzk4XHU5Yzk5XHU5YzlkXHU5''@;'; put 'put ''Y2FhXHU5Y2FjXHU5Y2FmXHU5Y2I5XHU5Y2JlIiw0LCJcdTljYzhcdTljYzlcdTljZDFcdTljZDJcdTljZGFcdTljZGJcdTljZTBcdTljZTFcdTljY2MiLDQsIlx1OWNkM1x1OWNkNFx1OWNkNVx1OWNkN1x1OWNkOFx1OWNkOVx1OWNkY1x1OWNkZFx1OWNkZlx1OWNlMlx1OTc3Y1x1OTc4NVx1''@;'; put 'put ''OTc5MVx1OTc5Mlx1OTc5NFx1OTdhZlx1OTdhYlx1OTdhM1x1OTdiMlx1OTdiNFx1OWFiMVx1OWFiMFx1OWFiN1x1OWU1OFx1OWFiNlx1OWFiYVx1OWFiY1x1OWFjMVx1OWFjMFx1OWFjNVx1OWFjMlx1OWFjYlx1OWFjY1x1OWFkMVx1OWI0NVx1OWI0M1x1OWI0N1x1OWI0OVx1OWI0OFx1OWI0''@;'; put 'put ''ZFx1OWI1MVx1OThlOFx1OTkwZFx1OTkyZVx1OTk1NVx1OTk1NFx1OWFkZlx1OWFlMVx1OWFlNlx1OWFlZlx1OWFlYlx1OWFmYlx1OWFlZFx1OWFmOVx1OWIwOFx1OWIwZlx1OWIxM1x1OWIxZlx1OWIyM1x1OWViZFx1OWViZVx1N2UzYlx1OWU4Mlx1OWU4N1x1OWU4OFx1OWU4Ylx1OWU5Mlx1''@;'; put 'put ''OTNkNlx1OWU5ZFx1OWU5Zlx1OWVkYlx1OWVkY1x1OWVkZFx1OWVlMFx1OWVkZlx1OWVlMlx1OWVlOVx1OWVlN1x1OWVlNVx1OWVlYVx1OWVlZlx1OWYyMlx1OWYyY1x1OWYyZlx1OWYzOVx1OWYzN1x1OWYzZFx1OWYzZVx1OWY0NCJdLFsiZjg0MCIsIlx1OWNlMyIsNjJdLFsiZjg4MCIsIlx1''@;'; put 'put ''OWQyMiIsMzJdLFsiZjk0MCIsIlx1OWQ0MyIsNjJdLFsiZjk4MCIsIlx1OWQ4MiIsMzJdLFsiZmE0MCIsIlx1OWRhMyIsNjJdLFsiZmE4MCIsIlx1OWRlMiIsMzJdLFsiZmI0MCIsIlx1OWUwMyIsMjcsIlx1OWUyNFx1OWUyN1x1OWUyZVx1OWUzMFx1OWUzNFx1OWUzYlx1OWUzY1x1OWU0MFx1''@;'; put 'put ''OWU0ZFx1OWU1MFx1OWU1Mlx1OWU1M1x1OWU1NFx1OWU1Nlx1OWU1OVx1OWU1ZFx1OWU1Zlx1OWU2MFx1OWU2MVx1OWU2Mlx1OWU2NVx1OWU2ZVx1OWU2Zlx1OWU3Mlx1OWU3NCIsOSwiXHU5ZTgwIl0sWyJmYjgwIiwiXHU5ZTgxXHU5ZTgzXHU5ZTg0XHU5ZTg1XHU5ZTg2XHU5ZTg5XHU5ZThh''@;'; put 'put ''XHU5ZThjIiw1LCJcdTllOTQiLDgsIlx1OWU5ZVx1OWVhMCIsNSwiXHU5ZWE3XHU5ZWE4XHU5ZWE5XHU5ZWFhIl0sWyJmYzQwIiwiXHU5ZWFiIiw4LCJcdTllYjVcdTllYjZcdTllYjdcdTllYjlcdTllYmFcdTllYmNcdTllYmYiLDQsIlx1OWVjNVx1OWVjNlx1OWVjN1x1OWVjOFx1OWVjYVx1''@;'; put 'put ''OWVjYlx1OWVjY1x1OWVkMFx1OWVkMlx1OWVkM1x1OWVkNVx1OWVkNlx1OWVkN1x1OWVkOVx1OWVkYVx1OWVkZVx1OWVlMVx1OWVlM1x1OWVlNFx1OWVlNlx1OWVlOFx1OWVlYlx1OWVlY1x1OWVlZFx1OWVlZVx1OWVmMCIsOCwiXHU5ZWZhXHU5ZWZkXHU5ZWZmIiw2XSxbImZjODAiLCJcdTlm''@;'; put 'put ''MDYiLDQsIlx1OWYwY1x1OWYwZlx1OWYxMVx1OWYxMlx1OWYxNFx1OWYxNVx1OWYxNlx1OWYxOFx1OWYxYSIsNSwiXHU5ZjIxXHU5ZjIzIiw4LCJcdTlmMmRcdTlmMmVcdTlmMzBcdTlmMzEiXSxbImZkNDAiLCJcdTlmMzIiLDQsIlx1OWYzOFx1OWYzYVx1OWYzY1x1OWYzZiIsNCwiXHU5ZjQ1''@;'; put 'put ''IiwxMCwiXHU5ZjUyIiwzOF0sWyJmZDgwIiwiXHU5Zjc5Iiw1LCJcdTlmODFcdTlmODJcdTlmOGQiLDExLCJcdTlmOWNcdTlmOWRcdTlmOWVcdTlmYTEiLDQsIlx1ZjkyY1x1Zjk3OVx1Zjk5NVx1ZjllN1x1ZjlmMSJdLFsiZmU0MCIsIlx1ZmEwY1x1ZmEwZFx1ZmEwZVx1ZmEwZlx1ZmExMVx1''@;'; put 'put ''ZmExM1x1ZmExNFx1ZmExOFx1ZmExZlx1ZmEyMFx1ZmEyMVx1ZmEyM1x1ZmEyNFx1ZmEyN1x1ZmEyOFx1ZmEyOSJdXScpfSwyMTE2Njp1ZT0+eyJ1c2Ugc3RyaWN0Ijt1ZS5leHBvcnRzPUpTT04ucGFyc2UoJ1tbIjAiLCJcXHUwMDAwIiwxMjddLFsiODE0MSIsIlx1YWMwMlx1YWMwM1x1YWMw''@;'; put 'put ''NVx1YWMwNlx1YWMwYiIsNCwiXHVhYzE4XHVhYzFlXHVhYzFmXHVhYzIxXHVhYzIyXHVhYzIzXHVhYzI1Iiw2LCJcdWFjMmVcdWFjMzJcdWFjMzNcdWFjMzQiXSxbIjgxNjEiLCJcdWFjMzVcdWFjMzZcdWFjMzdcdWFjM2FcdWFjM2JcdWFjM2RcdWFjM2VcdWFjM2ZcdWFjNDEiLDksIlx1YWM0''@;'; put 'put ''Y1x1YWM0ZSIsNSwiXHVhYzU1Il0sWyI4MTgxIiwiXHVhYzU2XHVhYzU3XHVhYzU5XHVhYzVhXHVhYzViXHVhYzVkIiwxOCwiXHVhYzcyXHVhYzczXHVhYzc1XHVhYzc2XHVhYzc5XHVhYzdiIiw0LCJcdWFjODJcdWFjODdcdWFjODhcdWFjOGRcdWFjOGVcdWFjOGZcdWFjOTFcdWFjOTJcdWFj''@;'; put 'put ''OTNcdWFjOTUiLDYsIlx1YWM5ZVx1YWNhMiIsNSwiXHVhY2FiXHVhY2FkXHVhY2FlXHVhY2IxIiw2LCJcdWFjYmFcdWFjYmVcdWFjYmZcdWFjYzBcdWFjYzJcdWFjYzNcdWFjYzVcdWFjYzZcdWFjYzdcdWFjYzlcdWFjY2FcdWFjY2JcdWFjY2QiLDcsIlx1YWNkNlx1YWNkOCIsNywiXHVhY2Uy''@;'; put 'put ''XHVhY2UzXHVhY2U1XHVhY2U2XHVhY2U5XHVhY2ViXHVhY2VkXHVhY2VlXHVhY2YyXHVhY2Y0XHVhY2Y3Iiw0LCJcdWFjZmVcdWFjZmZcdWFkMDFcdWFkMDJcdWFkMDNcdWFkMDVcdWFkMDciLDQsIlx1YWQwZVx1YWQxMFx1YWQxMlx1YWQxMyJdLFsiODI0MSIsIlx1YWQxNFx1YWQxNVx1YWQx''@;'; put 'put ''Nlx1YWQxN1x1YWQxOVx1YWQxYVx1YWQxYlx1YWQxZFx1YWQxZVx1YWQxZlx1YWQyMSIsNywiXHVhZDJhXHVhZDJiXHVhZDJlIiw1XSxbIjgyNjEiLCJcdWFkMzZcdWFkMzdcdWFkMzlcdWFkM2FcdWFkM2JcdWFkM2QiLDYsIlx1YWQ0Nlx1YWQ0OFx1YWQ0YSIsNSwiXHVhZDUxXHVhZDUyXHVh''@;'; put 'put ''ZDUzXHVhZDU1XHVhZDU2XHVhZDU3Il0sWyI4MjgxIiwiXHVhZDU5Iiw3LCJcdWFkNjJcdWFkNjQiLDcsIlx1YWQ2ZVx1YWQ2Zlx1YWQ3MVx1YWQ3Mlx1YWQ3N1x1YWQ3OFx1YWQ3OVx1YWQ3YVx1YWQ3ZVx1YWQ4MFx1YWQ4MyIsNCwiXHVhZDhhXHVhZDhiXHVhZDhkXHVhZDhlXHVhZDhmXHVh''@;'; put 'put ''ZDkxIiwxMCwiXHVhZDllIiw1LCJcdWFkYTUiLDE3LCJcdWFkYjgiLDcsIlx1YWRjMlx1YWRjM1x1YWRjNVx1YWRjNlx1YWRjN1x1YWRjOSIsNiwiXHVhZGQyXHVhZGQ0Iiw3LCJcdWFkZGRcdWFkZGVcdWFkZGZcdWFkZTFcdWFkZTJcdWFkZTNcdWFkZTUiLDE4XSxbIjgzNDEiLCJcdWFkZmFc''@;'; put 'put ''dWFkZmJcdWFkZmRcdWFkZmVcdWFlMDIiLDUsIlx1YWUwYVx1YWUwY1x1YWUwZSIsNSwiXHVhZTE1Iiw3XSxbIjgzNjEiLCJcdWFlMWQiLDE4LCJcdWFlMzJcdWFlMzNcdWFlMzVcdWFlMzZcdWFlMzlcdWFlM2JcdWFlM2MiXSxbIjgzODEiLCJcdWFlM2RcdWFlM2VcdWFlM2ZcdWFlNDJcdWFl''@;'; put 'put ''NDRcdWFlNDdcdWFlNDhcdWFlNDlcdWFlNGJcdWFlNGZcdWFlNTFcdWFlNTJcdWFlNTNcdWFlNTVcdWFlNTciLDQsIlx1YWU1ZVx1YWU2Mlx1YWU2M1x1YWU2NFx1YWU2Nlx1YWU2N1x1YWU2YVx1YWU2Ylx1YWU2ZFx1YWU2ZVx1YWU2Zlx1YWU3MSIsNiwiXHVhZTdhXHVhZTdlIiw1LCJcdWFl''@;'; put 'put ''ODYiLDUsIlx1YWU4ZCIsNDYsIlx1YWViZlx1YWVjMVx1YWVjMlx1YWVjM1x1YWVjNSIsNiwiXHVhZWNlXHVhZWQyIiw1LCJcdWFlZGFcdWFlZGJcdWFlZGQiLDhdLFsiODQ0MSIsIlx1YWVlNlx1YWVlN1x1YWVlOVx1YWVlYVx1YWVlY1x1YWVlZSIsNSwiXHVhZWY1XHVhZWY2XHVhZWY3XHVh''@;'; put 'put ''ZWY5XHVhZWZhXHVhZWZiXHVhZWZkIiw4XSxbIjg0NjEiLCJcdWFmMDZcdWFmMDlcdWFmMGFcdWFmMGJcdWFmMGNcdWFmMGVcdWFmMGZcdWFmMTEiLDE4XSxbIjg0ODEiLCJcdWFmMjQiLDcsIlx1YWYyZVx1YWYyZlx1YWYzMVx1YWYzM1x1YWYzNSIsNiwiXHVhZjNlXHVhZjQwXHVhZjQ0XHVh''@;'; put 'put ''ZjQ1XHVhZjQ2XHVhZjQ3XHVhZjRhIiw1LCJcdWFmNTEiLDEwLCJcdWFmNWUiLDUsIlx1YWY2NiIsMTgsIlx1YWY3YSIsNSwiXHVhZjgxXHVhZjgyXHVhZjgzXHVhZjg1XHVhZjg2XHVhZjg3XHVhZjg5Iiw2LCJcdWFmOTJcdWFmOTNcdWFmOTRcdWFmOTYiLDUsIlx1YWY5ZCIsMjYsIlx1YWZi''@;'; put 'put ''YVx1YWZiYlx1YWZiZFx1YWZiZSJdLFsiODU0MSIsIlx1YWZiZlx1YWZjMSIsNSwiXHVhZmNhXHVhZmNjXHVhZmNmIiw0LCJcdWFmZDUiLDYsIlx1YWZkZCIsNF0sWyI4NTYxIiwiXHVhZmUyIiw1LCJcdWFmZWEiLDUsIlx1YWZmMlx1YWZmM1x1YWZmNVx1YWZmNlx1YWZmN1x1YWZmOSIsNiwi''@;'; put 'put ''XHViMDAyXHViMDAzIl0sWyI4NTgxIiwiXHViMDA1Iiw2LCJcdWIwMGRcdWIwMGVcdWIwMGZcdWIwMTFcdWIwMTJcdWIwMTNcdWIwMTUiLDYsIlx1YjAxZSIsOSwiXHViMDI5IiwyNiwiXHViMDQ2XHViMDQ3XHViMDQ5XHViMDRiXHViMDRkXHViMDRmXHViMDUwXHViMDUxXHViMDUyXHViMDU2''@;'; put 'put ''XHViMDU4XHViMDVhXHViMDViXHViMDVjXHViMDVlIiwyOSwiXHViMDdlXHViMDdmXHViMDgxXHViMDgyXHViMDgzXHViMDg1Iiw2LCJcdWIwOGVcdWIwOTBcdWIwOTIiLDUsIlx1YjA5Ylx1YjA5ZFx1YjA5ZVx1YjBhM1x1YjBhNCJdLFsiODY0MSIsIlx1YjBhNVx1YjBhNlx1YjBhN1x1YjBh''@;'; put 'put ''YVx1YjBiMFx1YjBiMlx1YjBiNlx1YjBiN1x1YjBiOVx1YjBiYVx1YjBiYlx1YjBiZCIsNiwiXHViMGM2XHViMGNhIiw1LCJcdWIwZDIiXSxbIjg2NjEiLCJcdWIwZDNcdWIwZDVcdWIwZDZcdWIwZDdcdWIwZDkiLDYsIlx1YjBlMVx1YjBlMlx1YjBlM1x1YjBlNFx1YjBlNiIsMTBdLFsiODY4''@;'; put 'put ''MSIsIlx1YjBmMSIsMjIsIlx1YjEwYVx1YjEwZFx1YjEwZVx1YjEwZlx1YjExMVx1YjExNFx1YjExNVx1YjExNlx1YjExN1x1YjExYVx1YjExZSIsNCwiXHViMTI2XHViMTI3XHViMTI5XHViMTJhXHViMTJiXHViMTJkIiw2LCJcdWIxMzZcdWIxM2EiLDUsIlx1YjE0Mlx1YjE0M1x1YjE0NVx1''@;'; put 'put ''YjE0Nlx1YjE0N1x1YjE0OSIsNiwiXHViMTUyXHViMTUzXHViMTU2XHViMTU3XHViMTU5XHViMTVhXHViMTViXHViMTVkXHViMTVlXHViMTVmXHViMTYxIiwyMiwiXHViMTdhXHViMTdiXHViMTdkXHViMTdlXHViMTdmXHViMTgxXHViMTgzIiw0LCJcdWIxOGFcdWIxOGNcdWIxOGVcdWIxOGZc''@;'; put 'put ''dWIxOTBcdWIxOTFcdWIxOTVcdWIxOTZcdWIxOTdcdWIxOTlcdWIxOWFcdWIxOWJcdWIxOWQiXSxbIjg3NDEiLCJcdWIxOWUiLDksIlx1YjFhOSIsMTVdLFsiODc2MSIsIlx1YjFiOSIsMTgsIlx1YjFjZFx1YjFjZVx1YjFjZlx1YjFkMVx1YjFkMlx1YjFkM1x1YjFkNSJdLFsiODc4MSIsIlx1''@;'; put 'put ''YjFkNiIsNSwiXHViMWRlXHViMWUwIiw3LCJcdWIxZWFcdWIxZWJcdWIxZWRcdWIxZWVcdWIxZWZcdWIxZjEiLDcsIlx1YjFmYVx1YjFmY1x1YjFmZSIsNSwiXHViMjA2XHViMjA3XHViMjA5XHViMjBhXHViMjBkIiw2LCJcdWIyMTZcdWIyMThcdWIyMWEiLDUsIlx1YjIyMSIsMTgsIlx1YjIz''@;'; put 'put ''NSIsNiwiXHViMjNkIiwyNiwiXHViMjU5XHViMjVhXHViMjViXHViMjVkXHViMjVlXHViMjVmXHViMjYxIiw2LCJcdWIyNmEiLDRdLFsiODg0MSIsIlx1YjI2ZiIsNCwiXHViMjc2Iiw1LCJcdWIyN2QiLDYsIlx1YjI4Nlx1YjI4N1x1YjI4OFx1YjI4YSIsNF0sWyI4ODYxIiwiXHViMjhmXHVi''@;'; put 'put ''MjkyXHViMjkzXHViMjk1XHViMjk2XHViMjk3XHViMjliIiw0LCJcdWIyYTJcdWIyYTRcdWIyYTdcdWIyYThcdWIyYTlcdWIyYWJcdWIyYWRcdWIyYWVcdWIyYWZcdWIyYjFcdWIyYjJcdWIyYjNcdWIyYjVcdWIyYjZcdWIyYjciXSxbIjg4ODEiLCJcdWIyYjgiLDE1LCJcdWIyY2FcdWIyY2Jc''@;'; put 'put ''dWIyY2RcdWIyY2VcdWIyY2ZcdWIyZDFcdWIyZDMiLDQsIlx1YjJkYVx1YjJkY1x1YjJkZVx1YjJkZlx1YjJlMFx1YjJlMVx1YjJlM1x1YjJlN1x1YjJlOVx1YjJlYVx1YjJmMFx1YjJmMVx1YjJmMlx1YjJmNlx1YjJmY1x1YjJmZFx1YjJmZVx1YjMwMlx1YjMwM1x1YjMwNVx1YjMwNlx1YjMw''@;'; put 'put ''N1x1YjMwOSIsNiwiXHViMzEyXHViMzE2Iiw1LCJcdWIzMWQiLDU0LCJcdWIzNTdcdWIzNTlcdWIzNWFcdWIzNWRcdWIzNjBcdWIzNjFcdWIzNjJcdWIzNjMiXSxbIjg5NDEiLCJcdWIzNjZcdWIzNjhcdWIzNmFcdWIzNmNcdWIzNmRcdWIzNmZcdWIzNzJcdWIzNzNcdWIzNzVcdWIzNzZcdWIz''@;'; put 'put ''NzdcdWIzNzkiLDYsIlx1YjM4Mlx1YjM4NiIsNSwiXHViMzhkIl0sWyI4OTYxIiwiXHViMzhlXHViMzhmXHViMzkxXHViMzkyXHViMzkzXHViMzk1IiwxMCwiXHViM2EyIiw1LCJcdWIzYTlcdWIzYWFcdWIzYWJcdWIzYWQiXSxbIjg5ODEiLCJcdWIzYWUiLDIxLCJcdWIzYzZcdWIzYzdcdWIz''@;'; put 'put ''YzlcdWIzY2FcdWIzY2RcdWIzY2ZcdWIzZDFcdWIzZDJcdWIzZDNcdWIzZDZcdWIzZDhcdWIzZGFcdWIzZGNcdWIzZGVcdWIzZGZcdWIzZTFcdWIzZTJcdWIzZTNcdWIzZTVcdWIzZTZcdWIzZTdcdWIzZTkiLDE4LCJcdWIzZmQiLDE4LCJcdWI0MTEiLDYsIlx1YjQxOVx1YjQxYVx1YjQxYlx1''@;'; put 'put ''YjQxZFx1YjQxZVx1YjQxZlx1YjQyMSIsNiwiXHViNDJhXHViNDJjIiw3LCJcdWI0MzUiLDE1XSxbIjhhNDEiLCJcdWI0NDUiLDEwLCJcdWI0NTJcdWI0NTNcdWI0NTVcdWI0NTZcdWI0NTdcdWI0NTkiLDYsIlx1YjQ2Mlx1YjQ2NFx1YjQ2NiJdLFsiOGE2MSIsIlx1YjQ2NyIsNCwiXHViNDZk''@;'; put 'put ''IiwxOCwiXHViNDgxXHViNDgyIl0sWyI4YTgxIiwiXHViNDgzIiw0LCJcdWI0ODkiLDE5LCJcdWI0OWUiLDUsIlx1YjRhNVx1YjRhNlx1YjRhN1x1YjRhOVx1YjRhYVx1YjRhYlx1YjRhZCIsNywiXHViNGI2XHViNGI4XHViNGJhIiw1LCJcdWI0YzFcdWI0YzJcdWI0YzNcdWI0YzVcdWI0YzZc''@;'; put 'put ''dWI0YzdcdWI0YzkiLDYsIlx1YjRkMVx1YjRkMlx1YjRkM1x1YjRkNFx1YjRkNiIsNSwiXHViNGRlXHViNGRmXHViNGUxXHViNGUyXHViNGU1XHViNGU3Iiw0LCJcdWI0ZWVcdWI0ZjBcdWI0ZjIiLDUsIlx1YjRmOSIsMjYsIlx1YjUxNlx1YjUxN1x1YjUxOVx1YjUxYVx1YjUxZCJdLFsiOGI0''@;'; put 'put ''MSIsIlx1YjUxZSIsNSwiXHViNTI2XHViNTJiIiw0LCJcdWI1MzJcdWI1MzNcdWI1MzVcdWI1MzZcdWI1MzdcdWI1MzkiLDYsIlx1YjU0Mlx1YjU0NiJdLFsiOGI2MSIsIlx1YjU0N1x1YjU0OFx1YjU0OVx1YjU0YVx1YjU0ZVx1YjU0Zlx1YjU1MVx1YjU1Mlx1YjU1M1x1YjU1NSIsNiwiXHVi''@;'; put 'put ''NTVlXHViNTYyIiw4XSxbIjhiODEiLCJcdWI1NmIiLDUyLCJcdWI1YTJcdWI1YTNcdWI1YTVcdWI1YTZcdWI1YTdcdWI1YTlcdWI1YWNcdWI1YWRcdWI1YWVcdWI1YWZcdWI1YjJcdWI1YjYiLDQsIlx1YjViZVx1YjViZlx1YjVjMVx1YjVjMlx1YjVjM1x1YjVjNSIsNiwiXHViNWNlXHViNWQy''@;'; put 'put ''Iiw1LCJcdWI1ZDkiLDE4LCJcdWI1ZWQiLDE4XSxbIjhjNDEiLCJcdWI2MDAiLDE1LCJcdWI2MTJcdWI2MTNcdWI2MTVcdWI2MTZcdWI2MTdcdWI2MTkiLDRdLFsiOGM2MSIsIlx1YjYxZSIsNiwiXHViNjI2Iiw1LCJcdWI2MmQiLDYsIlx1YjYzNSIsNV0sWyI4YzgxIiwiXHViNjNiIiwxMiwi''@;'; put 'put ''XHViNjQ5IiwyNiwiXHViNjY1XHViNjY2XHViNjY3XHViNjY5Iiw1MCwiXHViNjllXHViNjlmXHViNmExXHViNmEyXHViNmEzXHViNmE1Iiw1LCJcdWI2YWRcdWI2YWVcdWI2YWZcdWI2YjBcdWI2YjIiLDE2XSxbIjhkNDEiLCJcdWI2YzMiLDE2LCJcdWI2ZDUiLDhdLFsiOGQ2MSIsIlx1YjZk''@;'; put 'put ''ZSIsMTcsIlx1YjZmMVx1YjZmMlx1YjZmM1x1YjZmNVx1YjZmNlx1YjZmN1x1YjZmOVx1YjZmYSJdLFsiOGQ4MSIsIlx1YjZmYiIsNCwiXHViNzAyXHViNzAzXHViNzA0XHViNzA2IiwzMywiXHViNzJhXHViNzJiXHViNzJkXHViNzJlXHViNzMxIiw2LCJcdWI3M2FcdWI3M2MiLDcsIlx1Yjc0''@;'; put 'put ''NVx1Yjc0Nlx1Yjc0N1x1Yjc0OVx1Yjc0YVx1Yjc0Ylx1Yjc0ZCIsNiwiXHViNzU2Iiw5LCJcdWI3NjFcdWI3NjJcdWI3NjNcdWI3NjVcdWI3NjZcdWI3NjdcdWI3NjkiLDYsIlx1Yjc3Mlx1Yjc3NFx1Yjc3NiIsNSwiXHViNzdlXHViNzdmXHViNzgxXHViNzgyXHViNzgzXHViNzg1Iiw2LCJc''@;'; put 'put ''dWI3OGVcdWI3OTNcdWI3OTRcdWI3OTVcdWI3OWFcdWI3OWJcdWI3OWRcdWI3OWUiXSxbIjhlNDEiLCJcdWI3OWZcdWI3YTEiLDYsIlx1YjdhYVx1YjdhZSIsNSwiXHViN2I2XHViN2I3XHViN2I5Iiw4XSxbIjhlNjEiLCJcdWI3YzIiLDQsIlx1YjdjOFx1YjdjYSIsMTldLFsiOGU4MSIsIlx1''@;'; put 'put ''YjdkZSIsMTMsIlx1YjdlZVx1YjdlZlx1YjdmMVx1YjdmMlx1YjdmM1x1YjdmNSIsNiwiXHViN2ZlXHViODAyIiw0LCJcdWI4MGFcdWI4MGJcdWI4MGRcdWI4MGVcdWI4MGZcdWI4MTEiLDYsIlx1YjgxYVx1YjgxY1x1YjgxZSIsNSwiXHViODI2XHViODI3XHViODI5XHViODJhXHViODJiXHVi''@;'; put 'put ''ODJkIiw2LCJcdWI4MzZcdWI4M2EiLDUsIlx1Yjg0MVx1Yjg0Mlx1Yjg0M1x1Yjg0NSIsMTEsIlx1Yjg1Mlx1Yjg1NCIsNywiXHViODVlXHViODVmXHViODYxXHViODYyXHViODYzXHViODY1Iiw2LCJcdWI4NmVcdWI4NzBcdWI4NzIiLDUsIlx1Yjg3OVx1Yjg3YVx1Yjg3Ylx1Yjg3ZCIsN10s''@;'; put 'put ''WyI4ZjQxIiwiXHViODg1Iiw3LCJcdWI4OGUiLDE3XSxbIjhmNjEiLCJcdWI4YTAiLDcsIlx1YjhhOSIsNiwiXHViOGIxXHViOGIyXHViOGIzXHViOGI1XHViOGI2XHViOGI3XHViOGI5Iiw0XSxbIjhmODEiLCJcdWI4YmVcdWI4YmZcdWI4YzJcdWI4YzRcdWI4YzYiLDUsIlx1YjhjZFx1Yjhj''@;'; put 'put ''ZVx1YjhjZlx1YjhkMVx1YjhkMlx1YjhkM1x1YjhkNSIsNywiXHViOGRlXHViOGUwXHViOGUyIiw1LCJcdWI4ZWFcdWI4ZWJcdWI4ZWRcdWI4ZWVcdWI4ZWZcdWI4ZjEiLDYsIlx1YjhmYVx1YjhmY1x1YjhmZSIsNSwiXHViOTA1IiwxOCwiXHViOTE5Iiw2LCJcdWI5MjEiLDI2LCJcdWI5M2Vc''@;'; put 'put ''dWI5M2ZcdWI5NDFcdWI5NDJcdWI5NDNcdWI5NDUiLDYsIlx1Yjk0ZFx1Yjk0ZVx1Yjk1MFx1Yjk1MiIsNV0sWyI5MDQxIiwiXHViOTVhXHViOTViXHViOTVkXHViOTVlXHViOTVmXHViOTYxIiw2LCJcdWI5NmFcdWI5NmNcdWI5NmUiLDUsIlx1Yjk3Nlx1Yjk3N1x1Yjk3OVx1Yjk3YVx1Yjk3''@;'; put 'put ''Ylx1Yjk3ZCJdLFsiOTA2MSIsIlx1Yjk3ZSIsNSwiXHViOTg2XHViOTg4XHViOThiXHViOThjXHViOThmIiwxNV0sWyI5MDgxIiwiXHViOTlmIiwxMiwiXHViOWFlXHViOWFmXHViOWIxXHViOWIyXHViOWIzXHViOWI1Iiw2LCJcdWI5YmVcdWI5YzBcdWI5YzIiLDUsIlx1YjljYVx1YjljYlx1''@;'; put 'put ''YjljZFx1YjlkMyIsNCwiXHViOWRhXHViOWRjXHViOWRmXHViOWUwXHViOWUyXHViOWU2XHViOWU3XHViOWU5XHViOWVhXHViOWViXHViOWVkIiw2LCJcdWI5ZjZcdWI5ZmIiLDQsIlx1YmEwMiIsNSwiXHViYTA5IiwxMSwiXHViYTE2IiwzMywiXHViYTNhXHViYTNiXHViYTNkXHViYTNlXHVi''@;'; put 'put ''YTNmXHViYTQxXHViYTQzXHViYTQ0XHViYTQ1XHViYTQ2Il0sWyI5MTQxIiwiXHViYTQ3XHViYTRhXHViYTRjXHViYTRmXHViYTUwXHViYTUxXHViYTUyXHViYTU2XHViYTU3XHViYTU5XHViYTVhXHViYTViXHViYTVkIiw2LCJcdWJhNjZcdWJhNmEiLDVdLFsiOTE2MSIsIlx1YmE3Mlx1YmE3''@;'; put 'put ''M1x1YmE3NVx1YmE3Nlx1YmE3N1x1YmE3OSIsOSwiXHViYTg2XHViYTg4XHViYTg5XHViYThhXHViYThiXHViYThkIiw1XSxbIjkxODEiLCJcdWJhOTMiLDIwLCJcdWJhYWFcdWJhYWRcdWJhYWVcdWJhYWZcdWJhYjFcdWJhYjMiLDQsIlx1YmFiYVx1YmFiY1x1YmFiZSIsNSwiXHViYWM1XHVi''@;'; put 'put ''YWM2XHViYWM3XHViYWM5IiwxNCwiXHViYWRhIiwzMywiXHViYWZkXHViYWZlXHViYWZmXHViYjAxXHViYjAyXHViYjAzXHViYjA1Iiw3LCJcdWJiMGVcdWJiMTBcdWJiMTIiLDUsIlx1YmIxOVx1YmIxYVx1YmIxYlx1YmIxZFx1YmIxZVx1YmIxZlx1YmIyMSIsNl0sWyI5MjQxIiwiXHViYjI4''@;'; put 'put ''XHViYjJhXHViYjJjIiw3LCJcdWJiMzdcdWJiMzlcdWJiM2FcdWJiM2YiLDQsIlx1YmI0Nlx1YmI0OFx1YmI0YVx1YmI0Ylx1YmI0Y1x1YmI0ZVx1YmI1MVx1YmI1MiJdLFsiOTI2MSIsIlx1YmI1M1x1YmI1NVx1YmI1Nlx1YmI1N1x1YmI1OSIsNywiXHViYjYyXHViYjY0Iiw3LCJcdWJiNmQi''@;'; put 'put ''LDRdLFsiOTI4MSIsIlx1YmI3MiIsMjEsIlx1YmI4OVx1YmI4YVx1YmI4Ylx1YmI4ZFx1YmI4ZVx1YmI4Zlx1YmI5MSIsMTgsIlx1YmJhNVx1YmJhNlx1YmJhN1x1YmJhOVx1YmJhYVx1YmJhYlx1YmJhZCIsNiwiXHViYmI1XHViYmI2XHViYmI4Iiw3LCJcdWJiYzFcdWJiYzJcdWJiYzNcdWJi''@;'; put 'put ''YzVcdWJiYzZcdWJiYzdcdWJiYzkiLDYsIlx1YmJkMVx1YmJkMlx1YmJkNCIsMzUsIlx1YmJmYVx1YmJmYlx1YmJmZFx1YmJmZVx1YmMwMSJdLFsiOTM0MSIsIlx1YmMwMyIsNCwiXHViYzBhXHViYzBlXHViYzEwXHViYzEyXHViYzEzXHViYzE5XHViYzFhXHViYzIwXHViYzIxXHViYzIyXHVi''@;'; put 'put ''YzIzXHViYzI2XHViYzI4XHViYzJhXHViYzJiXHViYzJjXHViYzJlXHViYzJmXHViYzMyXHViYzMzXHViYzM1Il0sWyI5MzYxIiwiXHViYzM2XHViYzM3XHViYzM5Iiw2LCJcdWJjNDJcdWJjNDZcdWJjNDdcdWJjNDhcdWJjNGFcdWJjNGJcdWJjNGVcdWJjNGZcdWJjNTEiLDhdLFsiOTM4MSIs''@;'; put 'put ''Ilx1YmM1YVx1YmM1Ylx1YmM1Y1x1YmM1ZSIsMzcsIlx1YmM4Nlx1YmM4N1x1YmM4OVx1YmM4YVx1YmM4ZFx1YmM4ZiIsNCwiXHViYzk2XHViYzk4XHViYzliIiw0LCJcdWJjYTJcdWJjYTNcdWJjYTVcdWJjYTZcdWJjYTkiLDYsIlx1YmNiMlx1YmNiNiIsNSwiXHViY2JlXHViY2JmXHViY2Mx''@;'; put 'put ''XHViY2MyXHViY2MzXHViY2M1Iiw3LCJcdWJjY2VcdWJjZDJcdWJjZDNcdWJjZDRcdWJjZDZcdWJjZDdcdWJjZDlcdWJjZGFcdWJjZGJcdWJjZGQiLDIyLCJcdWJjZjdcdWJjZjlcdWJjZmFcdWJjZmJcdWJjZmQiXSxbIjk0NDEiLCJcdWJjZmUiLDUsIlx1YmQwNlx1YmQwOFx1YmQwYSIsNSwi''@;'; put 'put ''XHViZDExXHViZDEyXHViZDEzXHViZDE1Iiw4XSxbIjk0NjEiLCJcdWJkMWUiLDUsIlx1YmQyNSIsNiwiXHViZDJkIiwxMl0sWyI5NDgxIiwiXHViZDNhIiw1LCJcdWJkNDEiLDYsIlx1YmQ0YVx1YmQ0Ylx1YmQ0ZFx1YmQ0ZVx1YmQ0Zlx1YmQ1MSIsNiwiXHViZDVhIiw5LCJcdWJkNjVcdWJk''@;'; put 'put ''NjZcdWJkNjdcdWJkNjkiLDIyLCJcdWJkODJcdWJkODNcdWJkODVcdWJkODZcdWJkOGIiLDQsIlx1YmQ5Mlx1YmQ5NFx1YmQ5Nlx1YmQ5N1x1YmQ5OFx1YmQ5Ylx1YmQ5ZCIsNiwiXHViZGE1IiwxMCwiXHViZGIxIiw2LCJcdWJkYjkiLDI0XSxbIjk1NDEiLCJcdWJkZDJcdWJkZDNcdWJkZDZc''@;'; put 'put ''dWJkZDdcdWJkZDlcdWJkZGFcdWJkZGJcdWJkZGQiLDExLCJcdWJkZWEiLDUsIlx1YmRmMSJdLFsiOTU2MSIsIlx1YmRmMlx1YmRmM1x1YmRmNVx1YmRmNlx1YmRmN1x1YmRmOSIsNiwiXHViZTAxXHViZTAyXHViZTA0XHViZTA2Iiw1LCJcdWJlMGVcdWJlMGZcdWJlMTFcdWJlMTJcdWJlMTMi''@;'; put 'put ''XSxbIjk1ODEiLCJcdWJlMTUiLDYsIlx1YmUxZVx1YmUyMCIsMzUsIlx1YmU0Nlx1YmU0N1x1YmU0OVx1YmU0YVx1YmU0Ylx1YmU0ZFx1YmU0ZiIsNCwiXHViZTU2XHViZTU4XHViZTVjXHViZTVkXHViZTVlXHViZTVmXHViZTYyXHViZTYzXHViZTY1XHViZTY2XHViZTY3XHViZTY5XHViZTZi''@;'; put 'put ''Iiw0LCJcdWJlNzJcdWJlNzYiLDQsIlx1YmU3ZVx1YmU3Zlx1YmU4MVx1YmU4Mlx1YmU4M1x1YmU4NSIsNiwiXHViZThlXHViZTkyIiw1LCJcdWJlOWEiLDEzLCJcdWJlYTkiLDE0XSxbIjk2NDEiLCJcdWJlYjgiLDIzLCJcdWJlZDJcdWJlZDMiXSxbIjk2NjEiLCJcdWJlZDVcdWJlZDZcdWJl''@;'; put 'put ''ZDkiLDYsIlx1YmVlMVx1YmVlMlx1YmVlNiIsNSwiXHViZWVkIiw4XSxbIjk2ODEiLCJcdWJlZjYiLDEwLCJcdWJmMDIiLDUsIlx1YmYwYSIsMTMsIlx1YmYxYVx1YmYxZSIsMzMsIlx1YmY0Mlx1YmY0M1x1YmY0NVx1YmY0Nlx1YmY0N1x1YmY0OSIsNiwiXHViZjUyXHViZjUzXHViZjU0XHVi''@;'; put 'put ''ZjU2Iiw0NF0sWyI5NzQxIiwiXHViZjgzIiwxNiwiXHViZjk1Iiw4XSxbIjk3NjEiLCJcdWJmOWUiLDE3LCJcdWJmYjEiLDddLFsiOTc4MSIsIlx1YmZiOSIsMTEsIlx1YmZjNiIsNSwiXHViZmNlXHViZmNmXHViZmQxXHViZmQyXHViZmQzXHViZmQ1Iiw2LCJcdWJmZGRcdWJmZGVcdWJmZTBc''@;'; put 'put ''dWJmZTIiLDg5LCJcdWMwM2RcdWMwM2VcdWMwM2YiXSxbIjk4NDEiLCJcdWMwNDAiLDE2LCJcdWMwNTIiLDUsIlx1YzA1OVx1YzA1YVx1YzA1YiJdLFsiOTg2MSIsIlx1YzA1ZFx1YzA1ZVx1YzA1Zlx1YzA2MSIsNiwiXHVjMDZhIiwxNV0sWyI5ODgxIiwiXHVjMDdhIiwyMSwiXHVjMDkyXHVj''@;'; put 'put ''MDkzXHVjMDk1XHVjMDk2XHVjMDk3XHVjMDk5Iiw2LCJcdWMwYTJcdWMwYTRcdWMwYTYiLDUsIlx1YzBhZVx1YzBiMVx1YzBiMlx1YzBiNyIsNCwiXHVjMGJlXHVjMGMyXHVjMGMzXHVjMGM0XHVjMGM2XHVjMGM3XHVjMGNhXHVjMGNiXHVjMGNkXHVjMGNlXHVjMGNmXHVjMGQxIiw2LCJcdWMw''@;'; put 'put ''ZGFcdWMwZGUiLDUsIlx1YzBlNlx1YzBlN1x1YzBlOVx1YzBlYVx1YzBlYlx1YzBlZCIsNiwiXHVjMGY2XHVjMGY4XHVjMGZhIiw1LCJcdWMxMDFcdWMxMDJcdWMxMDNcdWMxMDVcdWMxMDZcdWMxMDdcdWMxMDkiLDYsIlx1YzExMVx1YzExMlx1YzExM1x1YzExNFx1YzExNiIsNSwiXHVjMTIx''@;'; put 'put ''XHVjMTIyXHVjMTI1XHVjMTI4XHVjMTI5XHVjMTJhXHVjMTJiXHVjMTJlIl0sWyI5OTQxIiwiXHVjMTMyXHVjMTMzXHVjMTM0XHVjMTM1XHVjMTM3XHVjMTNhXHVjMTNiXHVjMTNkXHVjMTNlXHVjMTNmXHVjMTQxIiw2LCJcdWMxNGFcdWMxNGUiLDUsIlx1YzE1Nlx1YzE1NyJdLFsiOTk2MSIs''@;'; put 'put ''Ilx1YzE1OVx1YzE1YVx1YzE1Ylx1YzE1ZCIsNiwiXHVjMTY2XHVjMTZhIiw1LCJcdWMxNzFcdWMxNzJcdWMxNzNcdWMxNzVcdWMxNzZcdWMxNzdcdWMxNzlcdWMxN2FcdWMxN2IiXSxbIjk5ODEiLCJcdWMxN2MiLDgsIlx1YzE4NiIsNSwiXHVjMThmXHVjMTkxXHVjMTkyXHVjMTkzXHVjMTk1''@;'; put 'put ''XHVjMTk3Iiw0LCJcdWMxOWVcdWMxYTBcdWMxYTJcdWMxYTNcdWMxYTRcdWMxYTZcdWMxYTdcdWMxYWFcdWMxYWJcdWMxYWRcdWMxYWVcdWMxYWZcdWMxYjEiLDExLCJcdWMxYmUiLDUsIlx1YzFjNVx1YzFjNlx1YzFjN1x1YzFjOVx1YzFjYVx1YzFjYlx1YzFjZCIsNiwiXHVjMWQ1XHVjMWQ2''@;'; put 'put ''XHVjMWQ5Iiw2LCJcdWMxZTFcdWMxZTJcdWMxZTNcdWMxZTVcdWMxZTZcdWMxZTdcdWMxZTkiLDYsIlx1YzFmMlx1YzFmNCIsNywiXHVjMWZlXHVjMWZmXHVjMjAxXHVjMjAyXHVjMjAzXHVjMjA1Iiw2LCJcdWMyMGVcdWMyMTBcdWMyMTIiLDUsIlx1YzIxYVx1YzIxYlx1YzIxZFx1YzIxZVx1''@;'; put 'put ''YzIyMVx1YzIyMlx1YzIyMyJdLFsiOWE0MSIsIlx1YzIyNFx1YzIyNVx1YzIyNlx1YzIyN1x1YzIyYVx1YzIyY1x1YzIyZVx1YzIzMFx1YzIzM1x1YzIzNSIsMTZdLFsiOWE2MSIsIlx1YzI0Nlx1YzI0N1x1YzI0OSIsNiwiXHVjMjUyXHVjMjUzXHVjMjU1XHVjMjU2XHVjMjU3XHVjMjU5Iiw2''@;'; put 'put ''LCJcdWMyNjFcdWMyNjJcdWMyNjNcdWMyNjRcdWMyNjYiXSxbIjlhODEiLCJcdWMyNjciLDQsIlx1YzI2ZVx1YzI2Zlx1YzI3MVx1YzI3Mlx1YzI3M1x1YzI3NSIsNiwiXHVjMjdlXHVjMjgwXHVjMjgyIiw1LCJcdWMyOGEiLDUsIlx1YzI5MSIsNiwiXHVjMjk5XHVjMjlhXHVjMjljXHVjMjll''@;'; put 'put ''Iiw1LCJcdWMyYTZcdWMyYTdcdWMyYTlcdWMyYWFcdWMyYWJcdWMyYWUiLDUsIlx1YzJiNlx1YzJiOFx1YzJiYSIsMzMsIlx1YzJkZVx1YzJkZlx1YzJlMVx1YzJlMlx1YzJlNSIsNSwiXHVjMmVlXHVjMmYwXHVjMmYyXHVjMmYzXHVjMmY0XHVjMmY1XHVjMmY3XHVjMmZhXHVjMmZkXHVjMmZl''@;'; put 'put ''XHVjMmZmXHVjMzAxIiw2LCJcdWMzMGFcdWMzMGJcdWMzMGVcdWMzMGYiXSxbIjliNDEiLCJcdWMzMTBcdWMzMTFcdWMzMTJcdWMzMTZcdWMzMTdcdWMzMTlcdWMzMWFcdWMzMWJcdWMzMWQiLDYsIlx1YzMyNlx1YzMyN1x1YzMyYSIsOF0sWyI5YjYxIiwiXHVjMzMzIiwxNywiXHVjMzQ2Iiw3''@;'; put 'put ''XSxbIjliODEiLCJcdWMzNGUiLDI1LCJcdWMzNmFcdWMzNmJcdWMzNmRcdWMzNmVcdWMzNmZcdWMzNzFcdWMzNzMiLDQsIlx1YzM3YVx1YzM3Ylx1YzM3ZSIsNSwiXHVjMzg1XHVjMzg2XHVjMzg3XHVjMzg5XHVjMzhhXHVjMzhiXHVjMzhkIiw1MCwiXHVjM2MxIiwyMiwiXHVjM2RhIl0sWyI5''@;'; put 'put ''YzQxIiwiXHVjM2RiXHVjM2RkXHVjM2RlXHVjM2UxXHVjM2UzIiw0LCJcdWMzZWFcdWMzZWJcdWMzZWNcdWMzZWUiLDUsIlx1YzNmNlx1YzNmN1x1YzNmOSIsNV0sWyI5YzYxIiwiXHVjM2ZmIiw4LCJcdWM0MDkiLDYsIlx1YzQxMSIsOV0sWyI5YzgxIiwiXHVjNDFiIiw4LCJcdWM0MjUiLDYs''@;'; put 'put ''Ilx1YzQyZFx1YzQyZVx1YzQyZlx1YzQzMVx1YzQzMlx1YzQzM1x1YzQzNSIsNiwiXHVjNDNlIiw5LCJcdWM0NDkiLDI2LCJcdWM0NjZcdWM0NjdcdWM0NjlcdWM0NmFcdWM0NmJcdWM0NmQiLDYsIlx1YzQ3Nlx1YzQ3N1x1YzQ3OFx1YzQ3YSIsNSwiXHVjNDgxIiwxOCwiXHVjNDk1Iiw2LCJc''@;'; put 'put ''dWM0OWQiLDEyXSxbIjlkNDEiLCJcdWM0YWEiLDEzLCJcdWM0YjlcdWM0YmFcdWM0YmJcdWM0YmQiLDhdLFsiOWQ2MSIsIlx1YzRjNiIsMjVdLFsiOWQ4MSIsIlx1YzRlMCIsOCwiXHVjNGVhIiw1LCJcdWM0ZjJcdWM0ZjNcdWM0ZjVcdWM0ZjZcdWM0ZjdcdWM0ZjlcdWM0ZmJcdWM0ZmNcdWM0''@;'; put 'put ''ZmRcdWM0ZmVcdWM1MDIiLDksIlx1YzUwZFx1YzUwZVx1YzUwZlx1YzUxMVx1YzUxMlx1YzUxM1x1YzUxNSIsNiwiXHVjNTFkIiwxMCwiXHVjNTJhXHVjNTJiXHVjNTJkXHVjNTJlXHVjNTJmXHVjNTMxIiw2LCJcdWM1M2FcdWM1M2NcdWM1M2UiLDUsIlx1YzU0Nlx1YzU0N1x1YzU0Ylx1YzU0''@;'; put 'put ''Zlx1YzU1MFx1YzU1MVx1YzU1Mlx1YzU1Nlx1YzU1YVx1YzU1Ylx1YzU1Y1x1YzU1Zlx1YzU2Mlx1YzU2M1x1YzU2NVx1YzU2Nlx1YzU2N1x1YzU2OSIsNiwiXHVjNTcyXHVjNTc2Iiw1LCJcdWM1N2VcdWM1N2ZcdWM1ODFcdWM1ODJcdWM1ODNcdWM1ODVcdWM1ODZcdWM1ODhcdWM1ODlcdWM1''@;'; put 'put ''OGFcdWM1OGJcdWM1OGVcdWM1OTBcdWM1OTJcdWM1OTNcdWM1OTQiXSxbIjllNDEiLCJcdWM1OTZcdWM1OTlcdWM1OWFcdWM1OWJcdWM1OWRcdWM1OWVcdWM1OWZcdWM1YTEiLDcsIlx1YzVhYSIsOSwiXHVjNWI2Il0sWyI5ZTYxIiwiXHVjNWI3XHVjNWJhXHVjNWJmIiw0LCJcdWM1Y2JcdWM1''@;'; put 'put ''Y2RcdWM1Y2ZcdWM1ZDJcdWM1ZDNcdWM1ZDVcdWM1ZDZcdWM1ZDdcdWM1ZDkiLDYsIlx1YzVlMlx1YzVlNFx1YzVlNlx1YzVlNyJdLFsiOWU4MSIsIlx1YzVlOFx1YzVlOVx1YzVlYVx1YzVlYlx1YzVlZlx1YzVmMVx1YzVmMlx1YzVmM1x1YzVmNVx1YzVmOFx1YzVmOVx1YzVmYVx1YzVmYlx1''@;'; put 'put ''YzYwMlx1YzYwM1x1YzYwNFx1YzYwOVx1YzYwYVx1YzYwYlx1YzYwZFx1YzYwZVx1YzYwZlx1YzYxMSIsNiwiXHVjNjFhXHVjNjFkIiw2LCJcdWM2MjZcdWM2MjdcdWM2MjlcdWM2MmFcdWM2MmJcdWM2MmZcdWM2MzFcdWM2MzJcdWM2MzZcdWM2MzhcdWM2M2FcdWM2M2NcdWM2M2RcdWM2M2Vc''@;'; put 'put ''dWM2M2ZcdWM2NDJcdWM2NDNcdWM2NDVcdWM2NDZcdWM2NDdcdWM2NDkiLDYsIlx1YzY1Mlx1YzY1NiIsNSwiXHVjNjVlXHVjNjVmXHVjNjYxIiwxMCwiXHVjNjZkXHVjNjZlXHVjNjcwXHVjNjcyIiw1LCJcdWM2N2FcdWM2N2JcdWM2N2RcdWM2N2VcdWM2N2ZcdWM2ODEiLDYsIlx1YzY4YVx1''@;'; put 'put ''YzY4Y1x1YzY4ZSIsNSwiXHVjNjk2XHVjNjk3XHVjNjk5XHVjNjlhXHVjNjliXHVjNjlkIiw2LCJcdWM2YTYiXSxbIjlmNDEiLCJcdWM2YThcdWM2YWEiLDUsIlx1YzZiMlx1YzZiM1x1YzZiNVx1YzZiNlx1YzZiN1x1YzZiYiIsNCwiXHVjNmMyXHVjNmM0XHVjNmM2Iiw1LCJcdWM2Y2UiXSxb''@;'; put 'put ''IjlmNjEiLCJcdWM2Y2ZcdWM2ZDFcdWM2ZDJcdWM2ZDNcdWM2ZDUiLDYsIlx1YzZkZVx1YzZkZlx1YzZlMiIsNSwiXHVjNmVhXHVjNmViXHVjNmVkXHVjNmVlXHVjNmVmXHVjNmYxXHVjNmYyIl0sWyI5ZjgxIiwiXHVjNmYzIiw0LCJcdWM2ZmFcdWM2ZmJcdWM2ZmNcdWM2ZmUiLDUsIlx1Yzcw''@;'; put 'put ''Nlx1YzcwN1x1YzcwOVx1YzcwYVx1YzcwYlx1YzcwZCIsNiwiXHVjNzE2XHVjNzE4XHVjNzFhIiw1LCJcdWM3MjJcdWM3MjNcdWM3MjVcdWM3MjZcdWM3MjdcdWM3MjkiLDYsIlx1YzczMlx1YzczNFx1YzczNlx1YzczOFx1YzczOVx1YzczYVx1YzczYlx1YzczZVx1YzczZlx1Yzc0MVx1Yzc0''@;'; put 'put ''Mlx1Yzc0M1x1Yzc0NSIsNCwiXHVjNzRiXHVjNzRlXHVjNzUwXHVjNzU5XHVjNzVhXHVjNzViXHVjNzVkXHVjNzVlXHVjNzVmXHVjNzYxIiw2LCJcdWM3NjlcdWM3NmFcdWM3NmMiLDcsIlx1Yzc3Nlx1Yzc3N1x1Yzc3OVx1Yzc3YVx1Yzc3Ylx1Yzc3Zlx1Yzc4MFx1Yzc4MVx1Yzc4Mlx1Yzc4''@;'; put 'put ''Nlx1Yzc4Ylx1Yzc4Y1x1Yzc4ZFx1Yzc4Zlx1Yzc5Mlx1Yzc5M1x1Yzc5NVx1Yzc5OVx1Yzc5YiIsNCwiXHVjN2EyXHVjN2E3Iiw0LCJcdWM3YWVcdWM3YWZcdWM3YjFcdWM3YjJcdWM3YjNcdWM3YjVcdWM3YjZcdWM3YjciXSxbImEwNDEiLCJcdWM3YjhcdWM3YjlcdWM3YmFcdWM3YmJcdWM3''@;'; put 'put ''YmVcdWM3YzIiLDUsIlx1YzdjYVx1YzdjYlx1YzdjZFx1YzdjZlx1YzdkMSIsNiwiXHVjN2Q5XHVjN2RhXHVjN2RiXHVjN2RjIl0sWyJhMDYxIiwiXHVjN2RlIiw1LCJcdWM3ZTVcdWM3ZTZcdWM3ZTdcdWM3ZTlcdWM3ZWFcdWM3ZWJcdWM3ZWQiLDEzXSxbImEwODEiLCJcdWM3ZmIiLDQsIlx1''@;'; put 'put ''YzgwMlx1YzgwM1x1YzgwNVx1YzgwNlx1YzgwN1x1YzgwOVx1YzgwYiIsNCwiXHVjODEyXHVjODE0XHVjODE3Iiw0LCJcdWM4MWVcdWM4MWZcdWM4MjFcdWM4MjJcdWM4MjNcdWM4MjUiLDYsIlx1YzgyZVx1YzgzMFx1YzgzMiIsNSwiXHVjODM5XHVjODNhXHVjODNiXHVjODNkXHVjODNlXHVj''@;'; put 'put ''ODNmXHVjODQxIiw2LCJcdWM4NGFcdWM4NGJcdWM4NGUiLDUsIlx1Yzg1NSIsMjYsIlx1Yzg3Mlx1Yzg3M1x1Yzg3NVx1Yzg3Nlx1Yzg3N1x1Yzg3OVx1Yzg3YiIsNCwiXHVjODgyXHVjODg0XHVjODg4XHVjODg5XHVjODhhXHVjODhlIiw1LCJcdWM4OTUiLDcsIlx1Yzg5ZVx1YzhhMFx1Yzhh''@;'; put 'put ''Mlx1YzhhM1x1YzhhNCJdLFsiYTE0MSIsIlx1YzhhNVx1YzhhNlx1YzhhN1x1YzhhOSIsMTgsIlx1YzhiZVx1YzhiZlx1YzhjMFx1YzhjMSJdLFsiYTE2MSIsIlx1YzhjMlx1YzhjM1x1YzhjNVx1YzhjNlx1YzhjN1x1YzhjOVx1YzhjYVx1YzhjYlx1YzhjZCIsNiwiXHVjOGQ2XHVjOGQ4XHVj''@;'; put 'put ''OGRhIiw1LCJcdWM4ZTJcdWM4ZTNcdWM4ZTUiXSxbImExODEiLCJcdWM4ZTYiLDE0LCJcdWM4ZjYiLDUsIlx1YzhmZVx1YzhmZlx1YzkwMVx1YzkwMlx1YzkwM1x1YzkwNyIsNCwiXHVjOTBlXHUzMDAwXHUzMDAxXHUzMDAyXHhiN1x1MjAyNVx1MjAyNlx4YThcdTMwMDNceGFkXHUyMDE1XHUy''@;'; put 'put ''MjI1XHVmZjNjXHUyMjNjXHUyMDE4XHUyMDE5XHUyMDFjXHUyMDFkXHUzMDE0XHUzMDE1XHUzMDA4Iiw5LCJceGIxXHhkN1x4ZjdcdTIyNjBcdTIyNjRcdTIyNjVcdTIyMWVcdTIyMzRceGIwXHUyMDMyXHUyMDMzXHUyMTAzXHUyMTJiXHVmZmUwXHVmZmUxXHVmZmU1XHUyNjQyXHUyNjQwXHUy''@;'; put 'put ''MjIwXHUyMmE1XHUyMzEyXHUyMjAyXHUyMjA3XHUyMjYxXHUyMjUyXHhhN1x1MjAzYlx1MjYwNlx1MjYwNVx1MjVjYlx1MjVjZlx1MjVjZVx1MjVjN1x1MjVjNlx1MjVhMVx1MjVhMFx1MjViM1x1MjViMlx1MjViZFx1MjViY1x1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MjE5NFx1MzAxM1x1''@;'; put 'put ''MjI2YVx1MjI2Ylx1MjIxYVx1MjIzZFx1MjIxZFx1MjIzNVx1MjIyYlx1MjIyY1x1MjIwOFx1MjIwYlx1MjI4Nlx1MjI4N1x1MjI4Mlx1MjI4M1x1MjIyYVx1MjIyOVx1MjIyN1x1MjIyOFx1ZmZlMiJdLFsiYTI0MSIsIlx1YzkxMFx1YzkxMiIsNSwiXHVjOTE5IiwxOF0sWyJhMjYxIiwiXHVj''@;'; put 'put ''OTJkIiw2LCJcdWM5MzUiLDE4XSxbImEyODEiLCJcdWM5NDgiLDcsIlx1Yzk1Mlx1Yzk1M1x1Yzk1NVx1Yzk1Nlx1Yzk1N1x1Yzk1OSIsNiwiXHVjOTYyXHVjOTY0Iiw3LCJcdWM5NmRcdWM5NmVcdWM5NmZcdTIxZDJcdTIxZDRcdTIyMDBcdTIyMDNceGI0XHVmZjVlXHUwMmM3XHUwMmQ4XHUw''@;'; put 'put ''MmRkXHUwMmRhXHUwMmQ5XHhiOFx1MDJkYlx4YTFceGJmXHUwMmQwXHUyMjJlXHUyMjExXHUyMjBmXHhhNFx1MjEwOVx1MjAzMFx1MjVjMVx1MjVjMFx1MjViN1x1MjViNlx1MjY2NFx1MjY2MFx1MjY2MVx1MjY2NVx1MjY2N1x1MjY2M1x1MjI5OVx1MjVjOFx1MjVhM1x1MjVkMFx1MjVkMVx1''@;'; put 'put ''MjU5Mlx1MjVhNFx1MjVhNVx1MjVhOFx1MjVhN1x1MjVhNlx1MjVhOVx1MjY2OFx1MjYwZlx1MjYwZVx1MjYxY1x1MjYxZVx4YjZcdTIwMjBcdTIwMjFcdTIxOTVcdTIxOTdcdTIxOTlcdTIxOTZcdTIxOThcdTI2NmRcdTI2NjlcdTI2NmFcdTI2NmNcdTMyN2ZcdTMyMWNcdTIxMTZcdTMzYzdc''@;'; put 'put ''dTIxMjJcdTMzYzJcdTMzZDhcdTIxMjFcdTIwYWNceGFlIl0sWyJhMzQxIiwiXHVjOTcxXHVjOTcyXHVjOTczXHVjOTc1Iiw2LCJcdWM5N2QiLDEwLCJcdWM5OGFcdWM5OGJcdWM5OGRcdWM5OGVcdWM5OGYiXSxbImEzNjEiLCJcdWM5OTEiLDYsIlx1Yzk5YVx1Yzk5Y1x1Yzk5ZSIsMTZdLFsi''@;'; put 'put ''YTM4MSIsIlx1YzlhZiIsMTYsIlx1YzljMlx1YzljM1x1YzljNVx1YzljNlx1YzljOVx1YzljYiIsNCwiXHVjOWQyXHVjOWQ0XHVjOWQ3XHVjOWQ4XHVjOWRiXHVmZjAxIiw1OCwiXHVmZmU2XHVmZjNkIiwzMiwiXHVmZmUzIl0sWyJhNDQxIiwiXHVjOWRlXHVjOWRmXHVjOWUxXHVjOWUzXHVj''@;'; put 'put ''OWU1XHVjOWU2XHVjOWU4XHVjOWU5XHVjOWVhXHVjOWViXHVjOWVlXHVjOWYyIiw1LCJcdWM5ZmFcdWM5ZmJcdWM5ZmRcdWM5ZmVcdWM5ZmZcdWNhMDFcdWNhMDJcdWNhMDNcdWNhMDQiXSxbImE0NjEiLCJcdWNhMDVcdWNhMDZcdWNhMDdcdWNhMGFcdWNhMGUiLDUsIlx1Y2ExNVx1Y2ExNlx1''@;'; put 'put ''Y2ExN1x1Y2ExOSIsMTJdLFsiYTQ4MSIsIlx1Y2EyNlx1Y2EyN1x1Y2EyOFx1Y2EyYSIsMjgsIlx1MzEzMSIsOTNdLFsiYTU0MSIsIlx1Y2E0NyIsNCwiXHVjYTRlXHVjYTRmXHVjYTUxXHVjYTUyXHVjYTUzXHVjYTU1Iiw2LCJcdWNhNWVcdWNhNjIiLDUsIlx1Y2E2OVx1Y2E2YSJdLFsiYTU2''@;'; put 'put ''MSIsIlx1Y2E2YiIsMTcsIlx1Y2E3ZSIsNSwiXHVjYTg1XHVjYTg2Il0sWyJhNTgxIiwiXHVjYTg3IiwxNiwiXHVjYTk5IiwxNCwiXHUyMTcwIiw5XSxbImE1YjAiLCJcdTIxNjAiLDldLFsiYTVjMSIsIlx1MDM5MSIsMTYsIlx1MDNhMyIsNl0sWyJhNWUxIiwiXHUwM2IxIiwxNiwiXHUwM2Mz''@;'; put 'put ''Iiw2XSxbImE2NDEiLCJcdWNhYTgiLDE5LCJcdWNhYmVcdWNhYmZcdWNhYzFcdWNhYzJcdWNhYzNcdWNhYzUiXSxbImE2NjEiLCJcdWNhYzYiLDUsIlx1Y2FjZVx1Y2FkMFx1Y2FkMlx1Y2FkNFx1Y2FkNVx1Y2FkNlx1Y2FkN1x1Y2FkYSIsNSwiXHVjYWUxIiw2XSxbImE2ODEiLCJcdWNhZThc''@;'; put 'put ''dWNhZTlcdWNhZWFcdWNhZWJcdWNhZWQiLDYsIlx1Y2FmNSIsMTgsIlx1Y2IwOVx1Y2IwYVx1MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxOFx1MjUxNFx1MjUxY1x1MjUyY1x1MjUyNFx1MjUzNFx1MjUzY1x1MjUwMVx1MjUwM1x1MjUwZlx1MjUxM1x1MjUxYlx1MjUxN1x1MjUyM1x1MjUz''@;'; put 'put ''M1x1MjUyYlx1MjUzYlx1MjU0Ylx1MjUyMFx1MjUyZlx1MjUyOFx1MjUzN1x1MjUzZlx1MjUxZFx1MjUzMFx1MjUyNVx1MjUzOFx1MjU0Mlx1MjUxMlx1MjUxMVx1MjUxYVx1MjUxOVx1MjUxNlx1MjUxNVx1MjUwZVx1MjUwZFx1MjUxZVx1MjUxZlx1MjUyMVx1MjUyMlx1MjUyNlx1MjUyN1x1''@;'; put 'put ''MjUyOVx1MjUyYVx1MjUyZFx1MjUyZVx1MjUzMVx1MjUzMlx1MjUzNVx1MjUzNlx1MjUzOVx1MjUzYVx1MjUzZFx1MjUzZVx1MjU0MFx1MjU0MVx1MjU0MyIsN10sWyJhNzQxIiwiXHVjYjBiIiw0LCJcdWNiMTFcdWNiMTJcdWNiMTNcdWNiMTVcdWNiMTZcdWNiMTdcdWNiMTkiLDYsIlx1Y2Iy''@;'; put 'put ''MiIsN10sWyJhNzYxIiwiXHVjYjJhIiwyMiwiXHVjYjQyXHVjYjQzXHVjYjQ0Il0sWyJhNzgxIiwiXHVjYjQ1XHVjYjQ2XHVjYjQ3XHVjYjRhXHVjYjRiXHVjYjRkXHVjYjRlXHVjYjRmXHVjYjUxIiw2LCJcdWNiNWFcdWNiNWJcdWNiNWNcdWNiNWUiLDUsIlx1Y2I2NSIsNywiXHUzMzk1XHUz''@;'; put 'put ''Mzk2XHUzMzk3XHUyMTEzXHUzMzk4XHUzM2M0XHUzM2EzXHUzM2E0XHUzM2E1XHUzM2E2XHUzMzk5Iiw5LCJcdTMzY2FcdTMzOGRcdTMzOGVcdTMzOGZcdTMzY2ZcdTMzODhcdTMzODlcdTMzYzhcdTMzYTdcdTMzYThcdTMzYjAiLDksIlx1MzM4MCIsNCwiXHUzM2JhIiw1LCJcdTMzOTAiLDQs''@;'; put 'put ''Ilx1MjEyNlx1MzNjMFx1MzNjMVx1MzM4YVx1MzM4Ylx1MzM4Y1x1MzNkNlx1MzNjNVx1MzNhZFx1MzNhZVx1MzNhZlx1MzNkYlx1MzNhOVx1MzNhYVx1MzNhYlx1MzNhY1x1MzNkZFx1MzNkMFx1MzNkM1x1MzNjM1x1MzNjOVx1MzNkY1x1MzNjNiJdLFsiYTg0MSIsIlx1Y2I2ZCIsMTAsIlx1''@;'; put 'put ''Y2I3YSIsMTRdLFsiYTg2MSIsIlx1Y2I4OSIsMTgsIlx1Y2I5ZCIsNl0sWyJhODgxIiwiXHVjYmE0IiwxOSwiXHVjYmI5IiwxMSwiXHhjNlx4ZDBceGFhXHUwMTI2Il0sWyJhOGE2IiwiXHUwMTMyIl0sWyJhOGE4IiwiXHUwMTNmXHUwMTQxXHhkOFx1MDE1Mlx4YmFceGRlXHUwMTY2XHUwMTRh''@;'; put 'put ''Il0sWyJhOGIxIiwiXHUzMjYwIiwyNywiXHUyNGQwIiwyNSwiXHUyNDYwIiwxNCwiXHhiZFx1MjE1M1x1MjE1NFx4YmNceGJlXHUyMTViXHUyMTVjXHUyMTVkXHUyMTVlIl0sWyJhOTQxIiwiXHVjYmM1IiwxNCwiXHVjYmQ1IiwxMF0sWyJhOTYxIiwiXHVjYmUwXHVjYmUxXHVjYmUyXHVjYmUz''@;'; put 'put ''XHVjYmU1XHVjYmU2XHVjYmU4XHVjYmVhIiwxOF0sWyJhOTgxIiwiXHVjYmZkIiwxNCwiXHVjYzBlXHVjYzBmXHVjYzExXHVjYzEyXHVjYzEzXHVjYzE1Iiw2LCJcdWNjMWVcdWNjMWZcdWNjMjBcdWNjMjNcdWNjMjRceGU2XHUwMTExXHhmMFx1MDEyN1x1MDEzMVx1MDEzM1x1MDEzOFx1MDE0''@;'; put 'put ''MFx1MDE0Mlx4ZjhcdTAxNTNceGRmXHhmZVx1MDE2N1x1MDE0Ylx1MDE0OVx1MzIwMCIsMjcsIlx1MjQ5YyIsMjUsIlx1MjQ3NCIsMTQsIlx4YjlceGIyXHhiM1x1MjA3NFx1MjA3Zlx1MjA4MVx1MjA4Mlx1MjA4M1x1MjA4NCJdLFsiYWE0MSIsIlx1Y2MyNVx1Y2MyNlx1Y2MyYVx1Y2MyYlx1''@;'; put 'put ''Y2MyZFx1Y2MyZlx1Y2MzMSIsNiwiXHVjYzNhXHVjYzNmIiw0LCJcdWNjNDZcdWNjNDdcdWNjNDlcdWNjNGFcdWNjNGJcdWNjNGRcdWNjNGUiXSxbImFhNjEiLCJcdWNjNGYiLDQsIlx1Y2M1Nlx1Y2M1YSIsNSwiXHVjYzYxXHVjYzYyXHVjYzYzXHVjYzY1XHVjYzY3XHVjYzY5Iiw2LCJcdWNj''@;'; put 'put ''NzFcdWNjNzIiXSxbImFhODEiLCJcdWNjNzNcdWNjNzRcdWNjNzYiLDI5LCJcdTMwNDEiLDgyXSxbImFiNDEiLCJcdWNjOTRcdWNjOTVcdWNjOTZcdWNjOTdcdWNjOWFcdWNjOWJcdWNjOWRcdWNjOWVcdWNjOWZcdWNjYTEiLDYsIlx1Y2NhYVx1Y2NhZSIsNSwiXHVjY2I2XHVjY2I3XHVjY2I5''@;'; put 'put ''Il0sWyJhYjYxIiwiXHVjY2JhXHVjY2JiXHVjY2JkIiw2LCJcdWNjYzZcdWNjYzhcdWNjY2EiLDUsIlx1Y2NkMVx1Y2NkMlx1Y2NkM1x1Y2NkNSIsNV0sWyJhYjgxIiwiXHVjY2RiIiw4LCJcdWNjZTUiLDYsIlx1Y2NlZFx1Y2NlZVx1Y2NlZlx1Y2NmMSIsMTIsIlx1MzBhMSIsODVdLFsiYWM0''@;'; put 'put ''MSIsIlx1Y2NmZVx1Y2NmZlx1Y2QwMFx1Y2QwMiIsNSwiXHVjZDBhXHVjZDBiXHVjZDBkXHVjZDBlXHVjZDBmXHVjZDExIiw2LCJcdWNkMWFcdWNkMWNcdWNkMWVcdWNkMWZcdWNkMjAiXSxbImFjNjEiLCJcdWNkMjFcdWNkMjJcdWNkMjNcdWNkMjVcdWNkMjZcdWNkMjdcdWNkMjlcdWNkMmFc''@;'; put 'put ''dWNkMmJcdWNkMmQiLDExLCJcdWNkM2EiLDRdLFsiYWM4MSIsIlx1Y2QzZiIsMjgsIlx1Y2Q1ZFx1Y2Q1ZVx1Y2Q1Zlx1MDQxMCIsNSwiXHUwNDAxXHUwNDE2IiwyNV0sWyJhY2QxIiwiXHUwNDMwIiw1LCJcdTA0NTFcdTA0MzYiLDI1XSxbImFkNDEiLCJcdWNkNjFcdWNkNjJcdWNkNjNcdWNk''@;'; put 'put ''NjUiLDYsIlx1Y2Q2ZVx1Y2Q3MFx1Y2Q3MiIsNSwiXHVjZDc5Iiw3XSxbImFkNjEiLCJcdWNkODEiLDYsIlx1Y2Q4OSIsMTAsIlx1Y2Q5Nlx1Y2Q5N1x1Y2Q5OVx1Y2Q5YVx1Y2Q5Ylx1Y2Q5ZFx1Y2Q5ZVx1Y2Q5ZiJdLFsiYWQ4MSIsIlx1Y2RhMFx1Y2RhMVx1Y2RhMlx1Y2RhM1x1Y2RhNlx1''@;'; put 'put ''Y2RhOFx1Y2RhYSIsNSwiXHVjZGIxIiwxOCwiXHVjZGM1Il0sWyJhZTQxIiwiXHVjZGM2Iiw1LCJcdWNkY2RcdWNkY2VcdWNkY2ZcdWNkZDEiLDE2XSxbImFlNjEiLCJcdWNkZTIiLDUsIlx1Y2RlOVx1Y2RlYVx1Y2RlYlx1Y2RlZFx1Y2RlZVx1Y2RlZlx1Y2RmMSIsNiwiXHVjZGZhXHVjZGZj''@;'; put 'put ''XHVjZGZlIiw0XSxbImFlODEiLCJcdWNlMDNcdWNlMDVcdWNlMDZcdWNlMDdcdWNlMDlcdWNlMGFcdWNlMGJcdWNlMGQiLDYsIlx1Y2UxNVx1Y2UxNlx1Y2UxN1x1Y2UxOFx1Y2UxYSIsNSwiXHVjZTIyXHVjZTIzXHVjZTI1XHVjZTI2XHVjZTI3XHVjZTI5XHVjZTJhXHVjZTJiIl0sWyJhZjQx''@;'; put 'put ''IiwiXHVjZTJjXHVjZTJkXHVjZTJlXHVjZTJmXHVjZTMyXHVjZTM0XHVjZTM2IiwxOV0sWyJhZjYxIiwiXHVjZTRhIiwxMywiXHVjZTVhXHVjZTViXHVjZTVkXHVjZTVlXHVjZTYyIiw1LCJcdWNlNmFcdWNlNmMiXSxbImFmODEiLCJcdWNlNmUiLDUsIlx1Y2U3Nlx1Y2U3N1x1Y2U3OVx1Y2U3''@;'; put 'put ''YVx1Y2U3Ylx1Y2U3ZCIsNiwiXHVjZTg2XHVjZTg4XHVjZThhIiw1LCJcdWNlOTJcdWNlOTNcdWNlOTVcdWNlOTZcdWNlOTdcdWNlOTkiXSxbImIwNDEiLCJcdWNlOWEiLDUsIlx1Y2VhMlx1Y2VhNiIsNSwiXHVjZWFlIiwxMl0sWyJiMDYxIiwiXHVjZWJiIiw1LCJcdWNlYzIiLDE5XSxbImIw''@;'; put 'put ''ODEiLCJcdWNlZDYiLDEzLCJcdWNlZTZcdWNlZTdcdWNlZTlcdWNlZWFcdWNlZWQiLDYsIlx1Y2VmNlx1Y2VmYSIsNSwiXHVhYzAwXHVhYzAxXHVhYzA0XHVhYzA3XHVhYzA4XHVhYzA5XHVhYzBhXHVhYzEwIiw3LCJcdWFjMTkiLDQsIlx1YWMyMFx1YWMyNFx1YWMyY1x1YWMyZFx1YWMyZlx1''@;'; put 'put ''YWMzMFx1YWMzMVx1YWMzOFx1YWMzOVx1YWMzY1x1YWM0MFx1YWM0Ylx1YWM0ZFx1YWM1NFx1YWM1OFx1YWM1Y1x1YWM3MFx1YWM3MVx1YWM3NFx1YWM3N1x1YWM3OFx1YWM3YVx1YWM4MFx1YWM4MVx1YWM4M1x1YWM4NFx1YWM4NVx1YWM4Nlx1YWM4OVx1YWM4YVx1YWM4Ylx1YWM4Y1x1YWM5''@;'; put 'put ''MFx1YWM5NFx1YWM5Y1x1YWM5ZFx1YWM5Zlx1YWNhMFx1YWNhMVx1YWNhOFx1YWNhOVx1YWNhYVx1YWNhY1x1YWNhZlx1YWNiMFx1YWNiOFx1YWNiOVx1YWNiYlx1YWNiY1x1YWNiZFx1YWNjMVx1YWNjNFx1YWNjOFx1YWNjY1x1YWNkNVx1YWNkN1x1YWNlMFx1YWNlMVx1YWNlNFx1YWNlN1x1''@;'; put 'put ''YWNlOFx1YWNlYVx1YWNlY1x1YWNlZlx1YWNmMFx1YWNmMVx1YWNmM1x1YWNmNVx1YWNmNlx1YWNmY1x1YWNmZFx1YWQwMFx1YWQwNFx1YWQwNiJdLFsiYjE0MSIsIlx1Y2YwMlx1Y2YwM1x1Y2YwNVx1Y2YwNlx1Y2YwN1x1Y2YwOSIsNiwiXHVjZjEyXHVjZjE0XHVjZjE2Iiw1LCJcdWNmMWRc''@;'; put 'put ''dWNmMWVcdWNmMWZcdWNmMjFcdWNmMjJcdWNmMjMiXSxbImIxNjEiLCJcdWNmMjUiLDYsIlx1Y2YyZVx1Y2YzMiIsNSwiXHVjZjM5IiwxMV0sWyJiMTgxIiwiXHVjZjQ1IiwxNCwiXHVjZjU2XHVjZjU3XHVjZjU5XHVjZjVhXHVjZjViXHVjZjVkIiw2LCJcdWNmNjZcdWNmNjhcdWNmNmFcdWNm''@;'; put 'put ''NmJcdWNmNmNcdWFkMGNcdWFkMGRcdWFkMGZcdWFkMTFcdWFkMThcdWFkMWNcdWFkMjBcdWFkMjlcdWFkMmNcdWFkMmRcdWFkMzRcdWFkMzVcdWFkMzhcdWFkM2NcdWFkNDRcdWFkNDVcdWFkNDdcdWFkNDlcdWFkNTBcdWFkNTRcdWFkNThcdWFkNjFcdWFkNjNcdWFkNmNcdWFkNmRcdWFkNzBc''@;'; put 'put ''dWFkNzNcdWFkNzRcdWFkNzVcdWFkNzZcdWFkN2JcdWFkN2NcdWFkN2RcdWFkN2ZcdWFkODFcdWFkODJcdWFkODhcdWFkODlcdWFkOGNcdWFkOTBcdWFkOWNcdWFkOWRcdWFkYTRcdWFkYjdcdWFkYzBcdWFkYzFcdWFkYzRcdWFkYzhcdWFkZDBcdWFkZDFcdWFkZDNcdWFkZGNcdWFkZTBcdWFk''@;'; put 'put ''ZTRcdWFkZjhcdWFkZjlcdWFkZmNcdWFkZmZcdWFlMDBcdWFlMDFcdWFlMDhcdWFlMDlcdWFlMGJcdWFlMGRcdWFlMTRcdWFlMzBcdWFlMzFcdWFlMzRcdWFlMzdcdWFlMzhcdWFlM2FcdWFlNDBcdWFlNDFcdWFlNDNcdWFlNDVcdWFlNDZcdWFlNGFcdWFlNGNcdWFlNGRcdWFlNGVcdWFlNTBc''@;'; put 'put ''dWFlNTRcdWFlNTZcdWFlNWNcdWFlNWRcdWFlNWZcdWFlNjBcdWFlNjFcdWFlNjVcdWFlNjhcdWFlNjlcdWFlNmNcdWFlNzBcdWFlNzgiXSxbImIyNDEiLCJcdWNmNmRcdWNmNmVcdWNmNmZcdWNmNzJcdWNmNzNcdWNmNzVcdWNmNzZcdWNmNzdcdWNmNzkiLDYsIlx1Y2Y4MVx1Y2Y4Mlx1Y2Y4''@;'; put 'put ''M1x1Y2Y4NFx1Y2Y4NiIsNSwiXHVjZjhkIl0sWyJiMjYxIiwiXHVjZjhlIiwxOCwiXHVjZmEyIiw1LCJcdWNmYTkiXSxbImIyODEiLCJcdWNmYWEiLDUsIlx1Y2ZiMSIsMTgsIlx1Y2ZjNSIsNiwiXHVhZTc5XHVhZTdiXHVhZTdjXHVhZTdkXHVhZTg0XHVhZTg1XHVhZThjXHVhZWJjXHVhZWJk''@;'; put 'put ''XHVhZWJlXHVhZWMwXHVhZWM0XHVhZWNjXHVhZWNkXHVhZWNmXHVhZWQwXHVhZWQxXHVhZWQ4XHVhZWQ5XHVhZWRjXHVhZWU4XHVhZWViXHVhZWVkXHVhZWY0XHVhZWY4XHVhZWZjXHVhZjA3XHVhZjA4XHVhZjBkXHVhZjEwXHVhZjJjXHVhZjJkXHVhZjMwXHVhZjMyXHVhZjM0XHVhZjNjXHVh''@;'; put 'put ''ZjNkXHVhZjNmXHVhZjQxXHVhZjQyXHVhZjQzXHVhZjQ4XHVhZjQ5XHVhZjUwXHVhZjVjXHVhZjVkXHVhZjY0XHVhZjY1XHVhZjc5XHVhZjgwXHVhZjg0XHVhZjg4XHVhZjkwXHVhZjkxXHVhZjk1XHVhZjljXHVhZmI4XHVhZmI5XHVhZmJjXHVhZmMwXHVhZmM3XHVhZmM4XHVhZmM5XHVhZmNi''@;'; put 'put ''XHVhZmNkXHVhZmNlXHVhZmQ0XHVhZmRjXHVhZmU4XHVhZmU5XHVhZmYwXHVhZmYxXHVhZmY0XHVhZmY4XHViMDAwXHViMDAxXHViMDA0XHViMDBjXHViMDEwXHViMDE0XHViMDFjXHViMDFkXHViMDI4XHViMDQ0XHViMDQ1XHViMDQ4XHViMDRhXHViMDRjXHViMDRlXHViMDUzXHViMDU0XHVi''@;'; put 'put ''MDU1XHViMDU3XHViMDU5Il0sWyJiMzQxIiwiXHVjZmNjIiwxOSwiXHVjZmUyXHVjZmUzXHVjZmU1XHVjZmU2XHVjZmU3XHVjZmU5Il0sWyJiMzYxIiwiXHVjZmVhIiw1LCJcdWNmZjJcdWNmZjRcdWNmZjYiLDUsIlx1Y2ZmZFx1Y2ZmZVx1Y2ZmZlx1ZDAwMVx1ZDAwMlx1ZDAwM1x1ZDAwNSIs''@;'; put 'put ''NV0sWyJiMzgxIiwiXHVkMDBiIiw1LCJcdWQwMTIiLDUsIlx1ZDAxOSIsMTksIlx1YjA1ZFx1YjA3Y1x1YjA3ZFx1YjA4MFx1YjA4NFx1YjA4Y1x1YjA4ZFx1YjA4Zlx1YjA5MVx1YjA5OFx1YjA5OVx1YjA5YVx1YjA5Y1x1YjA5Zlx1YjBhMFx1YjBhMVx1YjBhMlx1YjBhOFx1YjBhOVx1YjBh''@;'; put 'put ''YiIsNCwiXHViMGIxXHViMGIzXHViMGI0XHViMGI1XHViMGI4XHViMGJjXHViMGM0XHViMGM1XHViMGM3XHViMGM4XHViMGM5XHViMGQwXHViMGQxXHViMGQ0XHViMGQ4XHViMGUwXHViMGU1XHViMTA4XHViMTA5XHViMTBiXHViMTBjXHViMTEwXHViMTEyXHViMTEzXHViMTE4XHViMTE5XHVi''@;'; put 'put ''MTFiXHViMTFjXHViMTFkXHViMTIzXHViMTI0XHViMTI1XHViMTI4XHViMTJjXHViMTM0XHViMTM1XHViMTM3XHViMTM4XHViMTM5XHViMTQwXHViMTQxXHViMTQ0XHViMTQ4XHViMTUwXHViMTUxXHViMTU0XHViMTU1XHViMTU4XHViMTVjXHViMTYwXHViMTc4XHViMTc5XHViMTdjXHViMTgw''@;'; put 'put ''XHViMTgyXHViMTg4XHViMTg5XHViMThiXHViMThkXHViMTkyXHViMTkzXHViMTk0XHViMTk4XHViMTljXHViMWE4XHViMWNjXHViMWQwXHViMWQ0XHViMWRjXHViMWRkIl0sWyJiNDQxIiwiXHVkMDJlIiw1LCJcdWQwMzZcdWQwMzdcdWQwMzlcdWQwM2FcdWQwM2JcdWQwM2QiLDYsIlx1ZDA0''@;'; put 'put ''Nlx1ZDA0OFx1ZDA0YSIsNV0sWyJiNDYxIiwiXHVkMDUxXHVkMDUyXHVkMDUzXHVkMDU1XHVkMDU2XHVkMDU3XHVkMDU5Iiw2LCJcdWQwNjEiLDEwLCJcdWQwNmVcdWQwNmYiXSxbImI0ODEiLCJcdWQwNzFcdWQwNzJcdWQwNzNcdWQwNzUiLDYsIlx1ZDA3ZVx1ZDA3Zlx1ZDA4MFx1ZDA4MiIs''@;'; put 'put ''MTgsIlx1YjFkZlx1YjFlOFx1YjFlOVx1YjFlY1x1YjFmMFx1YjFmOVx1YjFmYlx1YjFmZFx1YjIwNFx1YjIwNVx1YjIwOFx1YjIwYlx1YjIwY1x1YjIxNFx1YjIxNVx1YjIxN1x1YjIxOVx1YjIyMFx1YjIzNFx1YjIzY1x1YjI1OFx1YjI1Y1x1YjI2MFx1YjI2OFx1YjI2OVx1YjI3NFx1YjI3''@;'; put 'put ''NVx1YjI3Y1x1YjI4NFx1YjI4NVx1YjI4OVx1YjI5MFx1YjI5MVx1YjI5NFx1YjI5OFx1YjI5OVx1YjI5YVx1YjJhMFx1YjJhMVx1YjJhM1x1YjJhNVx1YjJhNlx1YjJhYVx1YjJhY1x1YjJiMFx1YjJiNFx1YjJjOFx1YjJjOVx1YjJjY1x1YjJkMFx1YjJkMlx1YjJkOFx1YjJkOVx1YjJkYlx1''@;'; put 'put ''YjJkZFx1YjJlMlx1YjJlNFx1YjJlNVx1YjJlNlx1YjJlOFx1YjJlYiIsNCwiXHViMmYzXHViMmY0XHViMmY1XHViMmY3Iiw0LCJcdWIyZmZcdWIzMDBcdWIzMDFcdWIzMDRcdWIzMDhcdWIzMTBcdWIzMTFcdWIzMTNcdWIzMTRcdWIzMTVcdWIzMWNcdWIzNTRcdWIzNTVcdWIzNTZcdWIzNThc''@;'; put 'put ''dWIzNWJcdWIzNWNcdWIzNWVcdWIzNWZcdWIzNjRcdWIzNjUiXSxbImI1NDEiLCJcdWQwOTUiLDE0LCJcdWQwYTZcdWQwYTdcdWQwYTlcdWQwYWFcdWQwYWJcdWQwYWQiLDVdLFsiYjU2MSIsIlx1ZDBiM1x1ZDBiNlx1ZDBiOFx1ZDBiYSIsNSwiXHVkMGMyXHVkMGMzXHVkMGM1XHVkMGM2XHVk''@;'; put 'put ''MGM3XHVkMGNhIiw1LCJcdWQwZDJcdWQwZDYiLDRdLFsiYjU4MSIsIlx1ZDBkYlx1ZDBkZVx1ZDBkZlx1ZDBlMVx1ZDBlMlx1ZDBlM1x1ZDBlNSIsNiwiXHVkMGVlXHVkMGYyIiw1LCJcdWQwZjkiLDExLCJcdWIzNjdcdWIzNjlcdWIzNmJcdWIzNmVcdWIzNzBcdWIzNzFcdWIzNzRcdWIzNzhc''@;'; put 'put ''dWIzODBcdWIzODFcdWIzODNcdWIzODRcdWIzODVcdWIzOGNcdWIzOTBcdWIzOTRcdWIzYTBcdWIzYTFcdWIzYThcdWIzYWNcdWIzYzRcdWIzYzVcdWIzYzhcdWIzY2JcdWIzY2NcdWIzY2VcdWIzZDBcdWIzZDRcdWIzZDVcdWIzZDdcdWIzZDlcdWIzZGJcdWIzZGRcdWIzZTBcdWIzZTRcdWIz''@;'; put 'put ''ZThcdWIzZmNcdWI0MTBcdWI0MThcdWI0MWNcdWI0MjBcdWI0MjhcdWI0MjlcdWI0MmJcdWI0MzRcdWI0NTBcdWI0NTFcdWI0NTRcdWI0NThcdWI0NjBcdWI0NjFcdWI0NjNcdWI0NjVcdWI0NmNcdWI0ODBcdWI0ODhcdWI0OWRcdWI0YTRcdWI0YThcdWI0YWNcdWI0YjVcdWI0YjdcdWI0Yjlc''@;'; put 'put ''dWI0YzBcdWI0YzRcdWI0YzhcdWI0ZDBcdWI0ZDVcdWI0ZGNcdWI0ZGRcdWI0ZTBcdWI0ZTNcdWI0ZTRcdWI0ZTZcdWI0ZWNcdWI0ZWRcdWI0ZWZcdWI0ZjFcdWI0ZjhcdWI1MTRcdWI1MTVcdWI1MThcdWI1MWJcdWI1MWNcdWI1MjRcdWI1MjVcdWI1MjdcdWI1MjhcdWI1MjlcdWI1MmFcdWI1''@;'; put 'put ''MzBcdWI1MzFcdWI1MzRcdWI1MzgiXSxbImI2NDEiLCJcdWQxMDUiLDcsIlx1ZDEwZSIsMTddLFsiYjY2MSIsIlx1ZDEyMCIsMTUsIlx1ZDEzMlx1ZDEzM1x1ZDEzNVx1ZDEzNlx1ZDEzN1x1ZDEzOVx1ZDEzYlx1ZDEzY1x1ZDEzZFx1ZDEzZSJdLFsiYjY4MSIsIlx1ZDEzZlx1ZDE0Mlx1ZDE0''@;'; put 'put ''NiIsNSwiXHVkMTRlXHVkMTRmXHVkMTUxXHVkMTUyXHVkMTUzXHVkMTU1Iiw2LCJcdWQxNWVcdWQxNjBcdWQxNjIiLDUsIlx1ZDE2OVx1ZDE2YVx1ZDE2Ylx1ZDE2ZFx1YjU0MFx1YjU0MVx1YjU0M1x1YjU0NFx1YjU0NVx1YjU0Ylx1YjU0Y1x1YjU0ZFx1YjU1MFx1YjU1NFx1YjU1Y1x1YjU1''@;'; put 'put ''ZFx1YjU1Zlx1YjU2MFx1YjU2MVx1YjVhMFx1YjVhMVx1YjVhNFx1YjVhOFx1YjVhYVx1YjVhYlx1YjViMFx1YjViMVx1YjViM1x1YjViNFx1YjViNVx1YjViYlx1YjViY1x1YjViZFx1YjVjMFx1YjVjNFx1YjVjY1x1YjVjZFx1YjVjZlx1YjVkMFx1YjVkMVx1YjVkOFx1YjVlY1x1YjYxMFx1''@;'; put 'put ''YjYxMVx1YjYxNFx1YjYxOFx1YjYyNVx1YjYyY1x1YjYzNFx1YjY0OFx1YjY2NFx1YjY2OFx1YjY5Y1x1YjY5ZFx1YjZhMFx1YjZhNFx1YjZhYlx1YjZhY1x1YjZiMVx1YjZkNFx1YjZmMFx1YjZmNFx1YjZmOFx1YjcwMFx1YjcwMVx1YjcwNVx1YjcyOFx1YjcyOVx1YjcyY1x1YjcyZlx1Yjcz''@;'; put 'put ''MFx1YjczOFx1YjczOVx1YjczYlx1Yjc0NFx1Yjc0OFx1Yjc0Y1x1Yjc1NFx1Yjc1NVx1Yjc2MFx1Yjc2NFx1Yjc2OFx1Yjc3MFx1Yjc3MVx1Yjc3M1x1Yjc3NVx1Yjc3Y1x1Yjc3ZFx1Yjc4MFx1Yjc4NFx1Yjc4Y1x1Yjc4ZFx1Yjc4Zlx1Yjc5MFx1Yjc5MVx1Yjc5Mlx1Yjc5Nlx1Yjc5NyJd''@;'; put 'put ''LFsiYjc0MSIsIlx1ZDE2ZSIsMTMsIlx1ZDE3ZCIsNiwiXHVkMTg1XHVkMTg2XHVkMTg3XHVkMTg5XHVkMThhIl0sWyJiNzYxIiwiXHVkMThiIiwyMCwiXHVkMWEyXHVkMWEzXHVkMWE1XHVkMWE2XHVkMWE3Il0sWyJiNzgxIiwiXHVkMWE5Iiw2LCJcdWQxYjJcdWQxYjRcdWQxYjZcdWQxYjdc''@;'; put 'put ''dWQxYjhcdWQxYjlcdWQxYmJcdWQxYmRcdWQxYmVcdWQxYmZcdWQxYzEiLDE0LCJcdWI3OThcdWI3OTlcdWI3OWNcdWI3YTBcdWI3YThcdWI3YTlcdWI3YWJcdWI3YWNcdWI3YWRcdWI3YjRcdWI3YjVcdWI3YjhcdWI3YzdcdWI3YzlcdWI3ZWNcdWI3ZWRcdWI3ZjBcdWI3ZjRcdWI3ZmNcdWI3''@;'; put 'put ''ZmRcdWI3ZmZcdWI4MDBcdWI4MDFcdWI4MDdcdWI4MDhcdWI4MDlcdWI4MGNcdWI4MTBcdWI4MThcdWI4MTlcdWI4MWJcdWI4MWRcdWI4MjRcdWI4MjVcdWI4MjhcdWI4MmNcdWI4MzRcdWI4MzVcdWI4MzdcdWI4MzhcdWI4MzlcdWI4NDBcdWI4NDRcdWI4NTFcdWI4NTNcdWI4NWNcdWI4NWRc''@;'; put 'put ''dWI4NjBcdWI4NjRcdWI4NmNcdWI4NmRcdWI4NmZcdWI4NzFcdWI4NzhcdWI4N2NcdWI4OGRcdWI4YThcdWI4YjBcdWI4YjRcdWI4YjhcdWI4YzBcdWI4YzFcdWI4YzNcdWI4YzVcdWI4Y2NcdWI4ZDBcdWI4ZDRcdWI4ZGRcdWI4ZGZcdWI4ZTFcdWI4ZThcdWI4ZTlcdWI4ZWNcdWI4ZjBcdWI4''@;'; put 'put ''ZjhcdWI4ZjlcdWI4ZmJcdWI4ZmRcdWI5MDRcdWI5MThcdWI5MjBcdWI5M2NcdWI5M2RcdWI5NDBcdWI5NDRcdWI5NGNcdWI5NGZcdWI5NTFcdWI5NThcdWI5NTlcdWI5NWNcdWI5NjBcdWI5NjhcdWI5NjkiXSxbImI4NDEiLCJcdWQxZDAiLDcsIlx1ZDFkOSIsMTddLFsiYjg2MSIsIlx1ZDFl''@;'; put 'put ''YiIsOCwiXHVkMWY1XHVkMWY2XHVkMWY3XHVkMWY5IiwxM10sWyJiODgxIiwiXHVkMjA4XHVkMjBhIiw1LCJcdWQyMTEiLDI0LCJcdWI5NmJcdWI5NmRcdWI5NzRcdWI5NzVcdWI5NzhcdWI5N2NcdWI5ODRcdWI5ODVcdWI5ODdcdWI5ODlcdWI5OGFcdWI5OGRcdWI5OGVcdWI5YWNcdWI5YWRc''@;'; put 'put ''dWI5YjBcdWI5YjRcdWI5YmNcdWI5YmRcdWI5YmZcdWI5YzFcdWI5YzhcdWI5YzlcdWI5Y2NcdWI5Y2UiLDQsIlx1YjlkOFx1YjlkOVx1YjlkYlx1YjlkZFx1YjlkZVx1YjllMVx1YjllM1x1YjllNFx1YjllNVx1YjllOFx1YjllY1x1YjlmNFx1YjlmNVx1YjlmN1x1YjlmOFx1YjlmOVx1Yjlm''@;'; put 'put ''YVx1YmEwMFx1YmEwMVx1YmEwOFx1YmExNVx1YmEzOFx1YmEzOVx1YmEzY1x1YmE0MFx1YmE0Mlx1YmE0OFx1YmE0OVx1YmE0Ylx1YmE0ZFx1YmE0ZVx1YmE1M1x1YmE1NFx1YmE1NVx1YmE1OFx1YmE1Y1x1YmE2NFx1YmE2NVx1YmE2N1x1YmE2OFx1YmE2OVx1YmE3MFx1YmE3MVx1YmE3NFx1''@;'; put 'put ''YmE3OFx1YmE4M1x1YmE4NFx1YmE4NVx1YmE4N1x1YmE4Y1x1YmFhOFx1YmFhOVx1YmFhYlx1YmFhY1x1YmFiMFx1YmFiMlx1YmFiOFx1YmFiOVx1YmFiYlx1YmFiZFx1YmFjNFx1YmFjOFx1YmFkOFx1YmFkOVx1YmFmYyJdLFsiYjk0MSIsIlx1ZDIyYVx1ZDIyYlx1ZDIyZVx1ZDIyZlx1ZDIz''@;'; put 'put ''MVx1ZDIzMlx1ZDIzM1x1ZDIzNSIsNiwiXHVkMjNlXHVkMjQwXHVkMjQyIiw1LCJcdWQyNDlcdWQyNGFcdWQyNGJcdWQyNGMiXSxbImI5NjEiLCJcdWQyNGQiLDE0LCJcdWQyNWQiLDYsIlx1ZDI2NVx1ZDI2Nlx1ZDI2N1x1ZDI2OCJdLFsiYjk4MSIsIlx1ZDI2OSIsMjIsIlx1ZDI4Mlx1ZDI4''@;'; put 'put ''M1x1ZDI4NVx1ZDI4Nlx1ZDI4N1x1ZDI4OVx1ZDI4YVx1ZDI4Ylx1ZDI4Y1x1YmIwMFx1YmIwNFx1YmIwZFx1YmIwZlx1YmIxMVx1YmIxOFx1YmIxY1x1YmIyMFx1YmIyOVx1YmIyYlx1YmIzNFx1YmIzNVx1YmIzNlx1YmIzOFx1YmIzYlx1YmIzY1x1YmIzZFx1YmIzZVx1YmI0NFx1YmI0NVx1''@;'; put 'put ''YmI0N1x1YmI0OVx1YmI0ZFx1YmI0Zlx1YmI1MFx1YmI1NFx1YmI1OFx1YmI2MVx1YmI2M1x1YmI2Y1x1YmI4OFx1YmI4Y1x1YmI5MFx1YmJhNFx1YmJhOFx1YmJhY1x1YmJiNFx1YmJiN1x1YmJjMFx1YmJjNFx1YmJjOFx1YmJkMFx1YmJkM1x1YmJmOFx1YmJmOVx1YmJmY1x1YmJmZlx1YmMw''@;'; put 'put ''MFx1YmMwMlx1YmMwOFx1YmMwOVx1YmMwYlx1YmMwY1x1YmMwZFx1YmMwZlx1YmMxMVx1YmMxNCIsNCwiXHViYzFiIiw0LCJcdWJjMjRcdWJjMjVcdWJjMjdcdWJjMjlcdWJjMmRcdWJjMzBcdWJjMzFcdWJjMzRcdWJjMzhcdWJjNDBcdWJjNDFcdWJjNDNcdWJjNDRcdWJjNDVcdWJjNDlcdWJj''@;'; put 'put ''NGNcdWJjNGRcdWJjNTBcdWJjNWRcdWJjODRcdWJjODVcdWJjODhcdWJjOGJcdWJjOGNcdWJjOGVcdWJjOTRcdWJjOTVcdWJjOTciXSxbImJhNDEiLCJcdWQyOGRcdWQyOGVcdWQyOGZcdWQyOTJcdWQyOTNcdWQyOTRcdWQyOTYiLDUsIlx1ZDI5ZFx1ZDI5ZVx1ZDI5Zlx1ZDJhMVx1ZDJhMlx1''@;'; put 'put ''ZDJhM1x1ZDJhNSIsNiwiXHVkMmFkIl0sWyJiYTYxIiwiXHVkMmFlXHVkMmFmXHVkMmIwXHVkMmIyIiw1LCJcdWQyYmFcdWQyYmJcdWQyYmRcdWQyYmVcdWQyYzFcdWQyYzMiLDQsIlx1ZDJjYVx1ZDJjYyIsNV0sWyJiYTgxIiwiXHVkMmQyXHVkMmQzXHVkMmQ1XHVkMmQ2XHVkMmQ3XHVkMmQ5''@;'; put 'put ''XHVkMmRhXHVkMmRiXHVkMmRkIiw2LCJcdWQyZTYiLDksIlx1ZDJmMlx1ZDJmM1x1ZDJmNVx1ZDJmNlx1ZDJmN1x1ZDJmOVx1ZDJmYVx1YmM5OVx1YmM5YVx1YmNhMFx1YmNhMVx1YmNhNFx1YmNhN1x1YmNhOFx1YmNiMFx1YmNiMVx1YmNiM1x1YmNiNFx1YmNiNVx1YmNiY1x1YmNiZFx1YmNj''@;'; put 'put ''MFx1YmNjNFx1YmNjZFx1YmNjZlx1YmNkMFx1YmNkMVx1YmNkNVx1YmNkOFx1YmNkY1x1YmNmNFx1YmNmNVx1YmNmNlx1YmNmOFx1YmNmY1x1YmQwNFx1YmQwNVx1YmQwN1x1YmQwOVx1YmQxMFx1YmQxNFx1YmQyNFx1YmQyY1x1YmQ0MFx1YmQ0OFx1YmQ0OVx1YmQ0Y1x1YmQ1MFx1YmQ1OFx1''@;'; put 'put ''YmQ1OVx1YmQ2NFx1YmQ2OFx1YmQ4MFx1YmQ4MVx1YmQ4NFx1YmQ4N1x1YmQ4OFx1YmQ4OVx1YmQ4YVx1YmQ5MFx1YmQ5MVx1YmQ5M1x1YmQ5NVx1YmQ5OVx1YmQ5YVx1YmQ5Y1x1YmRhNFx1YmRiMFx1YmRiOFx1YmRkNFx1YmRkNVx1YmRkOFx1YmRkY1x1YmRlOVx1YmRmMFx1YmRmNFx1YmRm''@;'; put 'put ''OFx1YmUwMFx1YmUwM1x1YmUwNVx1YmUwY1x1YmUwZFx1YmUxMFx1YmUxNFx1YmUxY1x1YmUxZFx1YmUxZlx1YmU0NFx1YmU0NVx1YmU0OFx1YmU0Y1x1YmU0ZVx1YmU1NFx1YmU1NVx1YmU1N1x1YmU1OVx1YmU1YVx1YmU1Ylx1YmU2MFx1YmU2MVx1YmU2NCJdLFsiYmI0MSIsIlx1ZDJmYiIs''@;'; put 'put ''NCwiXHVkMzAyXHVkMzA0XHVkMzA2Iiw1LCJcdWQzMGZcdWQzMTFcdWQzMTJcdWQzMTNcdWQzMTVcdWQzMTciLDQsIlx1ZDMxZVx1ZDMyMlx1ZDMyMyJdLFsiYmI2MSIsIlx1ZDMyNFx1ZDMyNlx1ZDMyN1x1ZDMyYVx1ZDMyYlx1ZDMyZFx1ZDMyZVx1ZDMyZlx1ZDMzMSIsNiwiXHVkMzNhXHVk''@;'; put 'put ''MzNlIiw1LCJcdWQzNDZcdWQzNDdcdWQzNDhcdWQzNDkiXSxbImJiODEiLCJcdWQzNGEiLDMxLCJcdWJlNjhcdWJlNmFcdWJlNzBcdWJlNzFcdWJlNzNcdWJlNzRcdWJlNzVcdWJlN2JcdWJlN2NcdWJlN2RcdWJlODBcdWJlODRcdWJlOGNcdWJlOGRcdWJlOGZcdWJlOTBcdWJlOTFcdWJlOThc''@;'; put 'put ''dWJlOTlcdWJlYThcdWJlZDBcdWJlZDFcdWJlZDRcdWJlZDdcdWJlZDhcdWJlZTBcdWJlZTNcdWJlZTRcdWJlZTVcdWJlZWNcdWJmMDFcdWJmMDhcdWJmMDlcdWJmMThcdWJmMTlcdWJmMWJcdWJmMWNcdWJmMWRcdWJmNDBcdWJmNDFcdWJmNDRcdWJmNDhcdWJmNTBcdWJmNTFcdWJmNTVcdWJm''@;'; put 'put ''OTRcdWJmYjBcdWJmYzVcdWJmY2NcdWJmY2RcdWJmZDBcdWJmZDRcdWJmZGNcdWJmZGZcdWJmZTFcdWMwM2NcdWMwNTFcdWMwNThcdWMwNWNcdWMwNjBcdWMwNjhcdWMwNjlcdWMwOTBcdWMwOTFcdWMwOTRcdWMwOThcdWMwYTBcdWMwYTFcdWMwYTNcdWMwYTVcdWMwYWNcdWMwYWRcdWMwYWZc''@;'; put 'put ''dWMwYjBcdWMwYjNcdWMwYjRcdWMwYjVcdWMwYjZcdWMwYmNcdWMwYmRcdWMwYmZcdWMwYzBcdWMwYzFcdWMwYzVcdWMwYzhcdWMwYzlcdWMwY2NcdWMwZDBcdWMwZDhcdWMwZDlcdWMwZGJcdWMwZGNcdWMwZGRcdWMwZTQiXSxbImJjNDEiLCJcdWQzNmEiLDE3LCJcdWQzN2VcdWQzN2ZcdWQz''@;'; put 'put ''ODFcdWQzODJcdWQzODNcdWQzODVcdWQzODZcdWQzODciXSxbImJjNjEiLCJcdWQzODhcdWQzODlcdWQzOGFcdWQzOGJcdWQzOGVcdWQzOTIiLDUsIlx1ZDM5YVx1ZDM5Ylx1ZDM5ZFx1ZDM5ZVx1ZDM5Zlx1ZDNhMSIsNiwiXHVkM2FhXHVkM2FjXHVkM2FlIl0sWyJiYzgxIiwiXHVkM2FmIiw0''@;'; put 'put ''LCJcdWQzYjVcdWQzYjZcdWQzYjdcdWQzYjlcdWQzYmFcdWQzYmJcdWQzYmQiLDYsIlx1ZDNjNlx1ZDNjN1x1ZDNjYSIsNSwiXHVkM2QxIiw1LCJcdWMwZTVcdWMwZThcdWMwZWNcdWMwZjRcdWMwZjVcdWMwZjdcdWMwZjlcdWMxMDBcdWMxMDRcdWMxMDhcdWMxMTBcdWMxMTVcdWMxMWMiLDQs''@;'; put 'put ''Ilx1YzEyM1x1YzEyNFx1YzEyNlx1YzEyN1x1YzEyY1x1YzEyZFx1YzEyZlx1YzEzMFx1YzEzMVx1YzEzNlx1YzEzOFx1YzEzOVx1YzEzY1x1YzE0MFx1YzE0OFx1YzE0OVx1YzE0Ylx1YzE0Y1x1YzE0ZFx1YzE1NFx1YzE1NVx1YzE1OFx1YzE1Y1x1YzE2NFx1YzE2NVx1YzE2N1x1YzE2OFx1''@;'; put 'put ''YzE2OVx1YzE3MFx1YzE3NFx1YzE3OFx1YzE4NVx1YzE4Y1x1YzE4ZFx1YzE4ZVx1YzE5MFx1YzE5NFx1YzE5Nlx1YzE5Y1x1YzE5ZFx1YzE5Zlx1YzFhMVx1YzFhNVx1YzFhOFx1YzFhOVx1YzFhY1x1YzFiMFx1YzFiZFx1YzFjNFx1YzFjOFx1YzFjY1x1YzFkNFx1YzFkN1x1YzFkOFx1YzFl''@;'; put 'put ''MFx1YzFlNFx1YzFlOFx1YzFmMFx1YzFmMVx1YzFmM1x1YzFmY1x1YzFmZFx1YzIwMFx1YzIwNFx1YzIwY1x1YzIwZFx1YzIwZlx1YzIxMVx1YzIxOFx1YzIxOVx1YzIxY1x1YzIxZlx1YzIyMFx1YzIyOFx1YzIyOVx1YzIyYlx1YzIyZCJdLFsiYmQ0MSIsIlx1ZDNkN1x1ZDNkOSIsNywiXHVk''@;'; put 'put ''M2UyXHVkM2U0Iiw3LCJcdWQzZWVcdWQzZWZcdWQzZjFcdWQzZjJcdWQzZjNcdWQzZjVcdWQzZjZcdWQzZjciXSxbImJkNjEiLCJcdWQzZjhcdWQzZjlcdWQzZmFcdWQzZmJcdWQzZmVcdWQ0MDBcdWQ0MDIiLDUsIlx1ZDQwOSIsMTNdLFsiYmQ4MSIsIlx1ZDQxNyIsNSwiXHVkNDFlIiwyNSwi''@;'; put 'put ''XHVjMjJmXHVjMjMxXHVjMjMyXHVjMjM0XHVjMjQ4XHVjMjUwXHVjMjUxXHVjMjU0XHVjMjU4XHVjMjYwXHVjMjY1XHVjMjZjXHVjMjZkXHVjMjcwXHVjMjc0XHVjMjdjXHVjMjdkXHVjMjdmXHVjMjgxXHVjMjg4XHVjMjg5XHVjMjkwXHVjMjk4XHVjMjliXHVjMjlkXHVjMmE0XHVjMmE1XHVj''@;'; put 'put ''MmE4XHVjMmFjXHVjMmFkXHVjMmI0XHVjMmI1XHVjMmI3XHVjMmI5XHVjMmRjXHVjMmRkXHVjMmUwXHVjMmUzXHVjMmU0XHVjMmViXHVjMmVjXHVjMmVkXHVjMmVmXHVjMmYxXHVjMmY2XHVjMmY4XHVjMmY5XHVjMmZiXHVjMmZjXHVjMzAwXHVjMzA4XHVjMzA5XHVjMzBjXHVjMzBkXHVjMzEz''@;'; put 'put ''XHVjMzE0XHVjMzE1XHVjMzE4XHVjMzFjXHVjMzI0XHVjMzI1XHVjMzI4XHVjMzI5XHVjMzQ1XHVjMzY4XHVjMzY5XHVjMzZjXHVjMzcwXHVjMzcyXHVjMzc4XHVjMzc5XHVjMzdjXHVjMzdkXHVjMzg0XHVjMzg4XHVjMzhjXHVjM2MwXHVjM2Q4XHVjM2Q5XHVjM2RjXHVjM2RmXHVjM2UwXHVj''@;'; put 'put ''M2UyXHVjM2U4XHVjM2U5XHVjM2VkXHVjM2Y0XHVjM2Y1XHVjM2Y4XHVjNDA4XHVjNDEwXHVjNDI0XHVjNDJjXHVjNDMwIl0sWyJiZTQxIiwiXHVkNDM4Iiw3LCJcdWQ0NDFcdWQ0NDJcdWQ0NDNcdWQ0NDUiLDE0XSxbImJlNjEiLCJcdWQ0NTQiLDcsIlx1ZDQ1ZFx1ZDQ1ZVx1ZDQ1Zlx1ZDQ2''@;'; put 'put ''MVx1ZDQ2Mlx1ZDQ2M1x1ZDQ2NSIsNywiXHVkNDZlXHVkNDcwXHVkNDcxXHVkNDcyIl0sWyJiZTgxIiwiXHVkNDczIiw0LCJcdWQ0N2FcdWQ0N2JcdWQ0N2RcdWQ0N2VcdWQ0ODFcdWQ0ODMiLDQsIlx1ZDQ4YVx1ZDQ4Y1x1ZDQ4ZSIsNSwiXHVkNDk1Iiw4LCJcdWM0MzRcdWM0M2NcdWM0M2Rc''@;'; put 'put ''dWM0NDhcdWM0NjRcdWM0NjVcdWM0NjhcdWM0NmNcdWM0NzRcdWM0NzVcdWM0NzlcdWM0ODBcdWM0OTRcdWM0OWNcdWM0YjhcdWM0YmNcdWM0ZTlcdWM0ZjBcdWM0ZjFcdWM0ZjRcdWM0ZjhcdWM0ZmFcdWM0ZmZcdWM1MDBcdWM1MDFcdWM1MGNcdWM1MTBcdWM1MTRcdWM1MWNcdWM1MjhcdWM1''@;'; put 'put ''MjlcdWM1MmNcdWM1MzBcdWM1MzhcdWM1MzlcdWM1M2JcdWM1M2RcdWM1NDRcdWM1NDVcdWM1NDhcdWM1NDlcdWM1NGFcdWM1NGNcdWM1NGRcdWM1NGVcdWM1NTNcdWM1NTRcdWM1NTVcdWM1NTdcdWM1NThcdWM1NTlcdWM1NWRcdWM1NWVcdWM1NjBcdWM1NjFcdWM1NjRcdWM1NjhcdWM1NzBc''@;'; put 'put ''dWM1NzFcdWM1NzNcdWM1NzRcdWM1NzVcdWM1N2NcdWM1N2RcdWM1ODBcdWM1ODRcdWM1ODdcdWM1OGNcdWM1OGRcdWM1OGZcdWM1OTFcdWM1OTVcdWM1OTdcdWM1OThcdWM1OWNcdWM1YTBcdWM1YTlcdWM1YjRcdWM1YjVcdWM1YjhcdWM1YjlcdWM1YmJcdWM1YmNcdWM1YmRcdWM1YmVcdWM1''@;'; put 'put ''YzQiLDYsIlx1YzVjY1x1YzVjZSJdLFsiYmY0MSIsIlx1ZDQ5ZSIsMTAsIlx1ZDRhYSIsMTRdLFsiYmY2MSIsIlx1ZDRiOSIsMTgsIlx1ZDRjZFx1ZDRjZVx1ZDRjZlx1ZDRkMVx1ZDRkMlx1ZDRkM1x1ZDRkNSJdLFsiYmY4MSIsIlx1ZDRkNiIsNSwiXHVkNGRkXHVkNGRlXHVkNGUwIiw3LCJc''@;'; put 'put ''dWQ0ZTlcdWQ0ZWFcdWQ0ZWJcdWQ0ZWRcdWQ0ZWVcdWQ0ZWZcdWQ0ZjEiLDYsIlx1ZDRmOVx1ZDRmYVx1ZDRmY1x1YzVkMFx1YzVkMVx1YzVkNFx1YzVkOFx1YzVlMFx1YzVlMVx1YzVlM1x1YzVlNVx1YzVlY1x1YzVlZFx1YzVlZVx1YzVmMFx1YzVmNFx1YzVmNlx1YzVmN1x1YzVmYyIsNSwi''@;'; put 'put ''XHVjNjA1XHVjNjA2XHVjNjA3XHVjNjA4XHVjNjBjXHVjNjEwXHVjNjE4XHVjNjE5XHVjNjFiXHVjNjFjXHVjNjI0XHVjNjI1XHVjNjI4XHVjNjJjXHVjNjJkXHVjNjJlXHVjNjMwXHVjNjMzXHVjNjM0XHVjNjM1XHVjNjM3XHVjNjM5XHVjNjNiXHVjNjQwXHVjNjQxXHVjNjQ0XHVjNjQ4XHVj''@;'; put 'put ''NjUwXHVjNjUxXHVjNjUzXHVjNjU0XHVjNjU1XHVjNjVjXHVjNjVkXHVjNjYwXHVjNjZjXHVjNjZmXHVjNjcxXHVjNjc4XHVjNjc5XHVjNjdjXHVjNjgwXHVjNjg4XHVjNjg5XHVjNjhiXHVjNjhkXHVjNjk0XHVjNjk1XHVjNjk4XHVjNjljXHVjNmE0XHVjNmE1XHVjNmE3XHVjNmE5XHVjNmIw''@;'; put 'put ''XHVjNmIxXHVjNmI0XHVjNmI4XHVjNmI5XHVjNmJhXHVjNmMwXHVjNmMxXHVjNmMzXHVjNmM1XHVjNmNjXHVjNmNkXHVjNmQwXHVjNmQ0XHVjNmRjXHVjNmRkXHVjNmUwXHVjNmUxXHVjNmU4Il0sWyJjMDQxIiwiXHVkNGZlIiw1LCJcdWQ1MDVcdWQ1MDZcdWQ1MDdcdWQ1MDlcdWQ1MGFcdWQ1''@;'; put 'put ''MGJcdWQ1MGQiLDYsIlx1ZDUxNlx1ZDUxOCIsNV0sWyJjMDYxIiwiXHVkNTFlIiwyNV0sWyJjMDgxIiwiXHVkNTM4XHVkNTM5XHVkNTNhXHVkNTNiXHVkNTNlXHVkNTNmXHVkNTQxXHVkNTQyXHVkNTQzXHVkNTQ1Iiw2LCJcdWQ1NGVcdWQ1NTBcdWQ1NTIiLDUsIlx1ZDU1YVx1ZDU1Ylx1ZDU1''@;'; put 'put ''ZFx1ZDU1ZVx1ZDU1Zlx1ZDU2MVx1ZDU2Mlx1ZDU2M1x1YzZlOVx1YzZlY1x1YzZmMFx1YzZmOFx1YzZmOVx1YzZmZFx1YzcwNFx1YzcwNVx1YzcwOFx1YzcwY1x1YzcxNFx1YzcxNVx1YzcxN1x1YzcxOVx1YzcyMFx1YzcyMVx1YzcyNFx1YzcyOFx1YzczMFx1YzczMVx1YzczM1x1YzczNVx1''@;'; put 'put ''YzczN1x1YzczY1x1YzczZFx1Yzc0MFx1Yzc0NFx1Yzc0YVx1Yzc0Y1x1Yzc0ZFx1Yzc0Zlx1Yzc1MSIsNywiXHVjNzVjXHVjNzYwXHVjNzY4XHVjNzZiXHVjNzc0XHVjNzc1XHVjNzc4XHVjNzdjXHVjNzdkXHVjNzdlXHVjNzgzXHVjNzg0XHVjNzg1XHVjNzg3XHVjNzg4XHVjNzg5XHVjNzhh''@;'; put 'put ''XHVjNzhlXHVjNzkwXHVjNzkxXHVjNzk0XHVjNzk2XHVjNzk3XHVjNzk4XHVjNzlhXHVjN2EwXHVjN2ExXHVjN2EzXHVjN2E0XHVjN2E1XHVjN2E2XHVjN2FjXHVjN2FkXHVjN2IwXHVjN2I0XHVjN2JjXHVjN2JkXHVjN2JmXHVjN2MwXHVjN2MxXHVjN2M4XHVjN2M5XHVjN2NjXHVjN2NlXHVj''@;'; put 'put ''N2QwXHVjN2Q4XHVjN2RkXHVjN2U0XHVjN2U4XHVjN2VjXHVjODAwXHVjODAxXHVjODA0XHVjODA4XHVjODBhIl0sWyJjMTQxIiwiXHVkNTY0XHVkNTY2XHVkNTY3XHVkNTZhXHVkNTZjXHVkNTZlIiw1LCJcdWQ1NzZcdWQ1NzdcdWQ1NzlcdWQ1N2FcdWQ1N2JcdWQ1N2QiLDYsIlx1ZDU4Nlx1''@;'; put 'put ''ZDU4YVx1ZDU4YiJdLFsiYzE2MSIsIlx1ZDU4Y1x1ZDU4ZFx1ZDU4ZVx1ZDU4Zlx1ZDU5MSIsMTksIlx1ZDVhNlx1ZDVhNyJdLFsiYzE4MSIsIlx1ZDVhOCIsMzEsIlx1YzgxMFx1YzgxMVx1YzgxM1x1YzgxNVx1YzgxNlx1YzgxY1x1YzgxZFx1YzgyMFx1YzgyNFx1YzgyY1x1YzgyZFx1Yzgy''@;'; put 'put ''Zlx1YzgzMVx1YzgzOFx1YzgzY1x1Yzg0MFx1Yzg0OFx1Yzg0OVx1Yzg0Y1x1Yzg0ZFx1Yzg1NFx1Yzg3MFx1Yzg3MVx1Yzg3NFx1Yzg3OFx1Yzg3YVx1Yzg4MFx1Yzg4MVx1Yzg4M1x1Yzg4NVx1Yzg4Nlx1Yzg4N1x1Yzg4Ylx1Yzg4Y1x1Yzg4ZFx1Yzg5NFx1Yzg5ZFx1Yzg5Zlx1YzhhMVx1''@;'; put 'put ''YzhhOFx1YzhiY1x1YzhiZFx1YzhjNFx1YzhjOFx1YzhjY1x1YzhkNFx1YzhkNVx1YzhkN1x1YzhkOVx1YzhlMFx1YzhlMVx1YzhlNFx1YzhmNVx1YzhmY1x1YzhmZFx1YzkwMFx1YzkwNFx1YzkwNVx1YzkwNlx1YzkwY1x1YzkwZFx1YzkwZlx1YzkxMVx1YzkxOFx1YzkyY1x1YzkzNFx1Yzk1''@;'; put 'put ''MFx1Yzk1MVx1Yzk1NFx1Yzk1OFx1Yzk2MFx1Yzk2MVx1Yzk2M1x1Yzk2Y1x1Yzk3MFx1Yzk3NFx1Yzk3Y1x1Yzk4OFx1Yzk4OVx1Yzk4Y1x1Yzk5MFx1Yzk5OFx1Yzk5OVx1Yzk5Ylx1Yzk5ZFx1YzljMFx1YzljMVx1YzljNFx1YzljN1x1YzljOFx1YzljYVx1YzlkMFx1YzlkMVx1YzlkMyJd''@;'; put 'put ''LFsiYzI0MSIsIlx1ZDVjYVx1ZDVjYlx1ZDVjZFx1ZDVjZVx1ZDVjZlx1ZDVkMVx1ZDVkMyIsNCwiXHVkNWRhXHVkNWRjXHVkNWRlIiw1LCJcdWQ1ZTZcdWQ1ZTdcdWQ1ZTlcdWQ1ZWFcdWQ1ZWJcdWQ1ZWRcdWQ1ZWUiXSxbImMyNjEiLCJcdWQ1ZWYiLDQsIlx1ZDVmNlx1ZDVmOFx1ZDVmYSIs''@;'; put 'put ''NSwiXHVkNjAyXHVkNjAzXHVkNjA1XHVkNjA2XHVkNjA3XHVkNjA5Iiw2LCJcdWQ2MTIiXSxbImMyODEiLCJcdWQ2MTYiLDUsIlx1ZDYxZFx1ZDYxZVx1ZDYxZlx1ZDYyMVx1ZDYyMlx1ZDYyM1x1ZDYyNSIsNywiXHVkNjJlIiw5LCJcdWQ2M2FcdWQ2M2JcdWM5ZDVcdWM5ZDZcdWM5ZDlcdWM5''@;'; put 'put ''ZGFcdWM5ZGNcdWM5ZGRcdWM5ZTBcdWM5ZTJcdWM5ZTRcdWM5ZTdcdWM5ZWNcdWM5ZWRcdWM5ZWZcdWM5ZjBcdWM5ZjFcdWM5ZjhcdWM5ZjlcdWM5ZmNcdWNhMDBcdWNhMDhcdWNhMDlcdWNhMGJcdWNhMGNcdWNhMGRcdWNhMTRcdWNhMThcdWNhMjlcdWNhNGNcdWNhNGRcdWNhNTBcdWNhNTRc''@;'; put 'put ''dWNhNWNcdWNhNWRcdWNhNWZcdWNhNjBcdWNhNjFcdWNhNjhcdWNhN2RcdWNhODRcdWNhOThcdWNhYmNcdWNhYmRcdWNhYzBcdWNhYzRcdWNhY2NcdWNhY2RcdWNhY2ZcdWNhZDFcdWNhZDNcdWNhZDhcdWNhZDlcdWNhZTBcdWNhZWNcdWNhZjRcdWNiMDhcdWNiMTBcdWNiMTRcdWNiMThcdWNi''@;'; put 'put ''MjBcdWNiMjFcdWNiNDFcdWNiNDhcdWNiNDlcdWNiNGNcdWNiNTBcdWNiNThcdWNiNTlcdWNiNWRcdWNiNjRcdWNiNzhcdWNiNzlcdWNiOWNcdWNiYjhcdWNiZDRcdWNiZTRcdWNiZTdcdWNiZTlcdWNjMGNcdWNjMGRcdWNjMTBcdWNjMTRcdWNjMWNcdWNjMWRcdWNjMjFcdWNjMjJcdWNjMjdc''@;'; put 'put ''dWNjMjhcdWNjMjlcdWNjMmNcdWNjMmVcdWNjMzBcdWNjMzhcdWNjMzlcdWNjM2IiXSxbImMzNDEiLCJcdWQ2M2RcdWQ2M2VcdWQ2M2ZcdWQ2NDFcdWQ2NDJcdWQ2NDNcdWQ2NDRcdWQ2NDZcdWQ2NDdcdWQ2NGFcdWQ2NGNcdWQ2NGVcdWQ2NGZcdWQ2NTBcdWQ2NTJcdWQ2NTNcdWQ2NTZcdWQ2''@;'; put 'put ''NTdcdWQ2NTlcdWQ2NWFcdWQ2NWJcdWQ2NWQiLDRdLFsiYzM2MSIsIlx1ZDY2MiIsNCwiXHVkNjY4XHVkNjZhIiw1LCJcdWQ2NzJcdWQ2NzNcdWQ2NzUiLDExXSxbImMzODEiLCJcdWQ2ODFcdWQ2ODJcdWQ2ODRcdWQ2ODYiLDUsIlx1ZDY4ZVx1ZDY4Zlx1ZDY5MVx1ZDY5Mlx1ZDY5M1x1ZDY5''@;'; put 'put ''NSIsNywiXHVkNjllXHVkNmEwXHVkNmEyIiw1LCJcdWQ2YTlcdWQ2YWFcdWNjM2NcdWNjM2RcdWNjM2VcdWNjNDRcdWNjNDVcdWNjNDhcdWNjNGNcdWNjNTRcdWNjNTVcdWNjNTdcdWNjNThcdWNjNTlcdWNjNjBcdWNjNjRcdWNjNjZcdWNjNjhcdWNjNzBcdWNjNzVcdWNjOThcdWNjOTlcdWNj''@;'; put 'put ''OWNcdWNjYTBcdWNjYThcdWNjYTlcdWNjYWJcdWNjYWNcdWNjYWRcdWNjYjRcdWNjYjVcdWNjYjhcdWNjYmNcdWNjYzRcdWNjYzVcdWNjYzdcdWNjYzlcdWNjZDBcdWNjZDRcdWNjZTRcdWNjZWNcdWNjZjBcdWNkMDFcdWNkMDhcdWNkMDlcdWNkMGNcdWNkMTBcdWNkMThcdWNkMTlcdWNkMWJc''@;'; put 'put ''dWNkMWRcdWNkMjRcdWNkMjhcdWNkMmNcdWNkMzlcdWNkNWNcdWNkNjBcdWNkNjRcdWNkNmNcdWNkNmRcdWNkNmZcdWNkNzFcdWNkNzhcdWNkODhcdWNkOTRcdWNkOTVcdWNkOThcdWNkOWNcdWNkYTRcdWNkYTVcdWNkYTdcdWNkYTlcdWNkYjBcdWNkYzRcdWNkY2NcdWNkZDBcdWNkZThcdWNk''@;'; put 'put ''ZWNcdWNkZjBcdWNkZjhcdWNkZjlcdWNkZmJcdWNkZmRcdWNlMDRcdWNlMDhcdWNlMGNcdWNlMTRcdWNlMTlcdWNlMjBcdWNlMjFcdWNlMjRcdWNlMjhcdWNlMzBcdWNlMzFcdWNlMzNcdWNlMzUiXSxbImM0NDEiLCJcdWQ2YWJcdWQ2YWRcdWQ2YWVcdWQ2YWZcdWQ2YjEiLDcsIlx1ZDZiYVx1''@;'; put 'put ''ZDZiYyIsNywiXHVkNmM2XHVkNmM3XHVkNmM5XHVkNmNhXHVkNmNiIl0sWyJjNDYxIiwiXHVkNmNkXHVkNmNlXHVkNmNmXHVkNmQwXHVkNmQyXHVkNmQzXHVkNmQ1XHVkNmQ2XHVkNmQ4XHVkNmRhIiw1LCJcdWQ2ZTFcdWQ2ZTJcdWQ2ZTNcdWQ2ZTVcdWQ2ZTZcdWQ2ZTdcdWQ2ZTkiLDRdLFsi''@;'; put 'put ''YzQ4MSIsIlx1ZDZlZVx1ZDZlZlx1ZDZmMVx1ZDZmMlx1ZDZmM1x1ZDZmNFx1ZDZmNiIsNSwiXHVkNmZlXHVkNmZmXHVkNzAxXHVkNzAyXHVkNzAzXHVkNzA1IiwxMSwiXHVkNzEyXHVkNzEzXHVkNzE0XHVjZTU4XHVjZTU5XHVjZTVjXHVjZTVmXHVjZTYwXHVjZTYxXHVjZTY4XHVjZTY5XHVj''@;'; put 'put ''ZTZiXHVjZTZkXHVjZTc0XHVjZTc1XHVjZTc4XHVjZTdjXHVjZTg0XHVjZTg1XHVjZTg3XHVjZTg5XHVjZTkwXHVjZTkxXHVjZTk0XHVjZTk4XHVjZWEwXHVjZWExXHVjZWEzXHVjZWE0XHVjZWE1XHVjZWFjXHVjZWFkXHVjZWMxXHVjZWU0XHVjZWU1XHVjZWU4XHVjZWViXHVjZWVjXHVjZWY0''@;'; put 'put ''XHVjZWY1XHVjZWY3XHVjZWY4XHVjZWY5XHVjZjAwXHVjZjAxXHVjZjA0XHVjZjA4XHVjZjEwXHVjZjExXHVjZjEzXHVjZjE1XHVjZjFjXHVjZjIwXHVjZjI0XHVjZjJjXHVjZjJkXHVjZjJmXHVjZjMwXHVjZjMxXHVjZjM4XHVjZjU0XHVjZjU1XHVjZjU4XHVjZjVjXHVjZjY0XHVjZjY1XHVj''@;'; put 'put ''ZjY3XHVjZjY5XHVjZjcwXHVjZjcxXHVjZjc0XHVjZjc4XHVjZjgwXHVjZjg1XHVjZjhjXHVjZmExXHVjZmE4XHVjZmIwXHVjZmM0XHVjZmUwXHVjZmUxXHVjZmU0XHVjZmU4XHVjZmYwXHVjZmYxXHVjZmYzXHVjZmY1XHVjZmZjXHVkMDAwXHVkMDA0XHVkMDExXHVkMDE4XHVkMDJkXHVkMDM0''@;'; put 'put ''XHVkMDM1XHVkMDM4XHVkMDNjIl0sWyJjNTQxIiwiXHVkNzE1XHVkNzE2XHVkNzE3XHVkNzFhXHVkNzFiXHVkNzFkXHVkNzFlXHVkNzFmXHVkNzIxIiw2LCJcdWQ3MmFcdWQ3MmNcdWQ3MmUiLDUsIlx1ZDczNlx1ZDczN1x1ZDczOSJdLFsiYzU2MSIsIlx1ZDczYVx1ZDczYlx1ZDczZCIsNiwi''@;'; put 'put ''XHVkNzQ1XHVkNzQ2XHVkNzQ4XHVkNzRhIiw1LCJcdWQ3NTJcdWQ3NTNcdWQ3NTVcdWQ3NWEiLDRdLFsiYzU4MSIsIlx1ZDc1Zlx1ZDc2Mlx1ZDc2NFx1ZDc2Nlx1ZDc2N1x1ZDc2OFx1ZDc2YVx1ZDc2Ylx1ZDc2ZFx1ZDc2ZVx1ZDc2Zlx1ZDc3MVx1ZDc3Mlx1ZDc3M1x1ZDc3NSIsNiwiXHVk''@;'; put 'put ''NzdlXHVkNzdmXHVkNzgwXHVkNzgyIiw1LCJcdWQ3OGFcdWQ3OGJcdWQwNDRcdWQwNDVcdWQwNDdcdWQwNDlcdWQwNTBcdWQwNTRcdWQwNThcdWQwNjBcdWQwNmNcdWQwNmRcdWQwNzBcdWQwNzRcdWQwN2NcdWQwN2RcdWQwODFcdWQwYTRcdWQwYTVcdWQwYThcdWQwYWNcdWQwYjRcdWQwYjVc''@;'; put 'put ''dWQwYjdcdWQwYjlcdWQwYzBcdWQwYzFcdWQwYzRcdWQwYzhcdWQwYzlcdWQwZDBcdWQwZDFcdWQwZDNcdWQwZDRcdWQwZDVcdWQwZGNcdWQwZGRcdWQwZTBcdWQwZTRcdWQwZWNcdWQwZWRcdWQwZWZcdWQwZjBcdWQwZjFcdWQwZjhcdWQxMGRcdWQxMzBcdWQxMzFcdWQxMzRcdWQxMzhcdWQx''@;'; put 'put ''M2FcdWQxNDBcdWQxNDFcdWQxNDNcdWQxNDRcdWQxNDVcdWQxNGNcdWQxNGRcdWQxNTBcdWQxNTRcdWQxNWNcdWQxNWRcdWQxNWZcdWQxNjFcdWQxNjhcdWQxNmNcdWQxN2NcdWQxODRcdWQxODhcdWQxYTBcdWQxYTFcdWQxYTRcdWQxYThcdWQxYjBcdWQxYjFcdWQxYjNcdWQxYjVcdWQxYmFc''@;'; put 'put ''dWQxYmNcdWQxYzBcdWQxZDhcdWQxZjRcdWQxZjhcdWQyMDdcdWQyMDlcdWQyMTBcdWQyMmNcdWQyMmRcdWQyMzBcdWQyMzRcdWQyM2NcdWQyM2RcdWQyM2ZcdWQyNDFcdWQyNDhcdWQyNWMiXSxbImM2NDEiLCJcdWQ3OGRcdWQ3OGVcdWQ3OGZcdWQ3OTEiLDYsIlx1ZDc5YVx1ZDc5Y1x1ZDc5''@;'; put 'put ''ZSIsNV0sWyJjNmExIiwiXHVkMjY0XHVkMjgwXHVkMjgxXHVkMjg0XHVkMjg4XHVkMjkwXHVkMjkxXHVkMjk1XHVkMjljXHVkMmEwXHVkMmE0XHVkMmFjXHVkMmIxXHVkMmI4XHVkMmI5XHVkMmJjXHVkMmJmXHVkMmMwXHVkMmMyXHVkMmM4XHVkMmM5XHVkMmNiXHVkMmQ0XHVkMmQ4XHVkMmRj''@;'; put 'put ''XHVkMmU0XHVkMmU1XHVkMmYwXHVkMmYxXHVkMmY0XHVkMmY4XHVkMzAwXHVkMzAxXHVkMzAzXHVkMzA1XHVkMzBjXHVkMzBkXHVkMzBlXHVkMzEwXHVkMzE0XHVkMzE2XHVkMzFjXHVkMzFkXHVkMzFmXHVkMzIwXHVkMzIxXHVkMzI1XHVkMzI4XHVkMzI5XHVkMzJjXHVkMzMwXHVkMzM4XHVk''@;'; put 'put ''MzM5XHVkMzNiXHVkMzNjXHVkMzNkXHVkMzQ0XHVkMzQ1XHVkMzdjXHVkMzdkXHVkMzgwXHVkMzg0XHVkMzhjXHVkMzhkXHVkMzhmXHVkMzkwXHVkMzkxXHVkMzk4XHVkMzk5XHVkMzljXHVkM2EwXHVkM2E4XHVkM2E5XHVkM2FiXHVkM2FkXHVkM2I0XHVkM2I4XHVkM2JjXHVkM2M0XHVkM2M1''@;'; put 'put ''XHVkM2M4XHVkM2M5XHVkM2QwXHVkM2Q4XHVkM2UxXHVkM2UzXHVkM2VjXHVkM2VkXHVkM2YwXHVkM2Y0XHVkM2ZjXHVkM2ZkXHVkM2ZmXHVkNDAxIl0sWyJjN2ExIiwiXHVkNDA4XHVkNDFkXHVkNDQwXHVkNDQ0XHVkNDVjXHVkNDYwXHVkNDY0XHVkNDZkXHVkNDZmXHVkNDc4XHVkNDc5XHVk''@;'; put 'put ''NDdjXHVkNDdmXHVkNDgwXHVkNDgyXHVkNDg4XHVkNDg5XHVkNDhiXHVkNDhkXHVkNDk0XHVkNGE5XHVkNGNjXHVkNGQwXHVkNGQ0XHVkNGRjXHVkNGRmXHVkNGU4XHVkNGVjXHVkNGYwXHVkNGY4XHVkNGZiXHVkNGZkXHVkNTA0XHVkNTA4XHVkNTBjXHVkNTE0XHVkNTE1XHVkNTE3XHVkNTNj''@;'; put 'put ''XHVkNTNkXHVkNTQwXHVkNTQ0XHVkNTRjXHVkNTRkXHVkNTRmXHVkNTUxXHVkNTU4XHVkNTU5XHVkNTVjXHVkNTYwXHVkNTY1XHVkNTY4XHVkNTY5XHVkNTZiXHVkNTZkXHVkNTc0XHVkNTc1XHVkNTc4XHVkNTdjXHVkNTg0XHVkNTg1XHVkNTg3XHVkNTg4XHVkNTg5XHVkNTkwXHVkNWE1XHVk''@;'; put 'put ''NWM4XHVkNWM5XHVkNWNjXHVkNWQwXHVkNWQyXHVkNWQ4XHVkNWQ5XHVkNWRiXHVkNWRkXHVkNWU0XHVkNWU1XHVkNWU4XHVkNWVjXHVkNWY0XHVkNWY1XHVkNWY3XHVkNWY5XHVkNjAwXHVkNjAxXHVkNjA0XHVkNjA4XHVkNjEwXHVkNjExXHVkNjEzXHVkNjE0XHVkNjE1XHVkNjFjXHVkNjIw''@;'; put 'put ''Il0sWyJjOGExIiwiXHVkNjI0XHVkNjJkXHVkNjM4XHVkNjM5XHVkNjNjXHVkNjQwXHVkNjQ1XHVkNjQ4XHVkNjQ5XHVkNjRiXHVkNjRkXHVkNjUxXHVkNjU0XHVkNjU1XHVkNjU4XHVkNjVjXHVkNjY3XHVkNjY5XHVkNjcwXHVkNjcxXHVkNjc0XHVkNjgzXHVkNjg1XHVkNjhjXHVkNjhkXHVk''@;'; put 'put ''NjkwXHVkNjk0XHVkNjlkXHVkNjlmXHVkNmExXHVkNmE4XHVkNmFjXHVkNmIwXHVkNmI5XHVkNmJiXHVkNmM0XHVkNmM1XHVkNmM4XHVkNmNjXHVkNmQxXHVkNmQ0XHVkNmQ3XHVkNmQ5XHVkNmUwXHVkNmU0XHVkNmU4XHVkNmYwXHVkNmY1XHVkNmZjXHVkNmZkXHVkNzAwXHVkNzA0XHVkNzEx''@;'; put 'put ''XHVkNzE4XHVkNzE5XHVkNzFjXHVkNzIwXHVkNzI4XHVkNzI5XHVkNzJiXHVkNzJkXHVkNzM0XHVkNzM1XHVkNzM4XHVkNzNjXHVkNzQ0XHVkNzQ3XHVkNzQ5XHVkNzUwXHVkNzUxXHVkNzU0XHVkNzU2XHVkNzU3XHVkNzU4XHVkNzU5XHVkNzYwXHVkNzYxXHVkNzYzXHVkNzY1XHVkNzY5XHVk''@;'; put 'put ''NzZjXHVkNzcwXHVkNzc0XHVkNzdjXHVkNzdkXHVkNzgxXHVkNzg4XHVkNzg5XHVkNzhjXHVkNzkwXHVkNzk4XHVkNzk5XHVkNzliXHVkNzlkIl0sWyJjYWExIiwiXHU0ZjNkXHU0ZjczXHU1MDQ3XHU1MGY5XHU1MmEwXHU1M2VmXHU1NDc1XHU1NGU1XHU1NjA5XHU1YWMxXHU1YmI2XHU2Njg3''@;'; put 'put ''XHU2N2I2XHU2N2I3XHU2N2VmXHU2YjRjXHU3M2MyXHU3NWMyXHU3YTNjXHU4MmRiXHU4MzA0XHU4ODU3XHU4ODg4XHU4YTM2XHU4Y2M4XHU4ZGNmXHU4ZWZiXHU4ZmU2XHU5OWQ1XHU1MjNiXHU1Mzc0XHU1NDA0XHU2MDZhXHU2MTY0XHU2YmJjXHU3M2NmXHU4MTFhXHU4OWJhXHU4OWQyXHU5''@;'; put 'put ''NWEzXHU0ZjgzXHU1MjBhXHU1OGJlXHU1OTc4XHU1OWU2XHU1ZTcyXHU1ZTc5XHU2MWM3XHU2M2MwXHU2NzQ2XHU2N2VjXHU2ODdmXHU2Zjk3XHU3NjRlXHU3NzBiXHU3OGY1XHU3YTA4XHU3YWZmXHU3YzIxXHU4MDlkXHU4MjZlXHU4MjcxXHU4YWViXHU5NTkzXHU0ZTZiXHU1NTlkXHU2NmY3''@;'; put 'put ''XHU2ZTM0XHU3OGEzXHU3YWVkXHU4NDViXHU4OTEwXHU4NzRlXHU5N2E4XHU1MmQ4XHU1NzRlXHU1ODJhXHU1ZDRjXHU2MTFmXHU2MWJlXHU2MjIxXHU2NTYyXHU2N2QxXHU2YTQ0XHU2ZTFiXHU3NTE4XHU3NWIzXHU3NmUzXHU3N2IwXHU3ZDNhXHU5MGFmXHU5NDUxXHU5NDUyXHU5Zjk1Il0s''@;'; put 'put ''WyJjYmExIiwiXHU1MzIzXHU1Y2FjXHU3NTMyXHU4MGRiXHU5MjQwXHU5NTk4XHU1MjViXHU1ODA4XHU1OWRjXHU1Y2ExXHU1ZDE3XHU1ZWI3XHU1ZjNhXHU1ZjRhXHU2MTc3XHU2YzVmXHU3NTdhXHU3NTg2XHU3Y2UwXHU3ZDczXHU3ZGIxXHU3ZjhjXHU4MTU0XHU4MjIxXHU4NTkxXHU4OTQx''@;'; put 'put ''XHU4YjFiXHU5MmZjXHU5NjRkXHU5YzQ3XHU0ZWNiXHU0ZWY3XHU1MDBiXHU1MWYxXHU1ODRmXHU2MTM3XHU2MTNlXHU2MTY4XHU2NTM5XHU2OWVhXHU2ZjExXHU3NWE1XHU3Njg2XHU3NmQ2XHU3Yjg3XHU4MmE1XHU4NGNiXHVmOTAwXHU5M2E3XHU5NThiXHU1NTgwXHU1YmEyXHU1NzUxXHVm''@;'; put 'put ''OTAxXHU3Y2IzXHU3ZmI5XHU5MWI1XHU1MDI4XHU1M2JiXHU1YzQ1XHU1ZGU4XHU2MmQyXHU2MzZlXHU2NGRhXHU2NGU3XHU2ZTIwXHU3MGFjXHU3OTViXHU4ZGRkXHU4ZTFlXHVmOTAyXHU5MDdkXHU5MjQ1XHU5MmY4XHU0ZTdlXHU0ZWY2XHU1MDY1XHU1ZGZlXHU1ZWZhXHU2MTA2XHU2OTU3''@;'; put 'put ''XHU4MTcxXHU4NjU0XHU4ZTQ3XHU5Mzc1XHU5YTJiXHU0ZTVlXHU1MDkxXHU2NzcwXHU2ODQwXHU1MTA5XHU1MjhkXHU1MjkyXHU2YWEyIl0sWyJjY2ExIiwiXHU3N2JjXHU5MjEwXHU5ZWQ0XHU1MmFiXHU2MDJmXHU4ZmYyXHU1MDQ4XHU2MWE5XHU2M2VkXHU2NGNhXHU2ODNjXHU2YTg0XHU2''@;'; put 'put ''ZmMwXHU4MTg4XHU4OWExXHU5Njk0XHU1ODA1XHU3MjdkXHU3MmFjXHU3NTA0XHU3ZDc5XHU3ZTZkXHU4MGE5XHU4OThiXHU4Yjc0XHU5MDYzXHU5ZDUxXHU2Mjg5XHU2YzdhXHU2ZjU0XHU3ZDUwXHU3ZjNhXHU4YTIzXHU1MTdjXHU2MTRhXHU3YjlkXHU4YjE5XHU5MjU3XHU5MzhjXHU0ZWFj''@;'; put 'put ''XHU0ZmQzXHU1MDFlXHU1MGJlXHU1MTA2XHU1MmMxXHU1MmNkXHU1MzdmXHU1NzcwXHU1ODgzXHU1ZTlhXHU1ZjkxXHU2MTc2XHU2MWFjXHU2NGNlXHU2NTZjXHU2NjZmXHU2NmJiXHU2NmY0XHU2ODk3XHU2ZDg3XHU3MDg1XHU3MGYxXHU3NDlmXHU3NGE1XHU3NGNhXHU3NWQ5XHU3ODZjXHU3''@;'; put 'put ''OGVjXHU3YWRmXHU3YWY2XHU3ZDQ1XHU3ZDkzXHU4MDE1XHU4MDNmXHU4MTFiXHU4Mzk2XHU4YjY2XHU4ZjE1XHU5MDE1XHU5M2UxXHU5ODAzXHU5ODM4XHU5YTVhXHU5YmU4XHU0ZmMyXHU1NTUzXHU1ODNhXHU1OTUxXHU1YjYzXHU1YzQ2XHU2MGI4XHU2MjEyXHU2ODQyXHU2OGIwIl0sWyJj''@;'; put 'put ''ZGExIiwiXHU2OGU4XHU2ZWFhXHU3NTRjXHU3Njc4XHU3OGNlXHU3YTNkXHU3Y2ZiXHU3ZTZiXHU3ZTdjXHU4YTA4XHU4YWExXHU4YzNmXHU5NjhlXHU5ZGM0XHU1M2U0XHU1M2U5XHU1NDRhXHU1NDcxXHU1NmZhXHU1OWQxXHU1YjY0XHU1YzNiXHU1ZWFiXHU2MmY3XHU2NTM3XHU2NTQ1XHU2''@;'; put 'put ''NTcyXHU2NmEwXHU2N2FmXHU2OWMxXHU2Y2JkXHU3NWZjXHU3NjkwXHU3NzdlXHU3YTNmXHU3Zjk0XHU4MDAzXHU4MGExXHU4MThmXHU4MmU2XHU4MmZkXHU4M2YwXHU4NWMxXHU4ODMxXHU4OGI0XHU4YWE1XHVmOTAzXHU4ZjljXHU5MzJlXHU5NmM3XHU5ODY3XHU5YWQ4XHU5ZjEzXHU1NGVk''@;'; put 'put ''XHU2NTliXHU2NmYyXHU2ODhmXHU3YTQwXHU4YzM3XHU5ZDYwXHU1NmYwXHU1NzY0XHU1ZDExXHU2NjA2XHU2OGIxXHU2OGNkXHU2ZWZlXHU3NDI4XHU4ODllXHU5YmU0XHU2YzY4XHVmOTA0XHU5YWE4XHU0ZjliXHU1MTZjXHU1MTcxXHU1MjlmXHU1YjU0XHU1ZGU1XHU2MDUwXHU2MDZkXHU2''@;'; put 'put ''MmYxXHU2M2E3XHU2NTNiXHU3M2Q5XHU3YTdhXHU4NmEzXHU4Y2EyXHU5NzhmXHU0ZTMyXHU1YmUxXHU2MjA4XHU2NzljXHU3NGRjIl0sWyJjZWExIiwiXHU3OWQxXHU4M2QzXHU4YTg3XHU4YWIyXHU4ZGU4XHU5MDRlXHU5MzRiXHU5ODQ2XHU1ZWQzXHU2OWU4XHU4NWZmXHU5MGVkXHVmOTA1''@;'; put 'put ''XHU1MWEwXHU1Yjk4XHU1YmVjXHU2MTYzXHU2OGZhXHU2YjNlXHU3MDRjXHU3NDJmXHU3NGQ4XHU3YmExXHU3ZjUwXHU4M2M1XHU4OWMwXHU4Y2FiXHU5NWRjXHU5OTI4XHU1MjJlXHU2MDVkXHU2MmVjXHU5MDAyXHU0ZjhhXHU1MTQ5XHU1MzIxXHU1OGQ5XHU1ZWUzXHU2NmUwXHU2ZDM4XHU3''@;'; put 'put ''MDlhXHU3MmMyXHU3M2Q2XHU3YjUwXHU4MGYxXHU5NDViXHU1MzY2XHU2MzliXHU3ZjZiXHU0ZTU2XHU1MDgwXHU1ODRhXHU1OGRlXHU2MDJhXHU2MTI3XHU2MmQwXHU2OWQwXHU5YjQxXHU1YjhmXHU3ZDE4XHU4MGIxXHU4ZjVmXHU0ZWE0XHU1MGQxXHU1NGFjXHU1NWFjXHU1YjBjXHU1ZGEw''@;'; put 'put ''XHU1ZGU3XHU2NTJhXHU2NTRlXHU2ODIxXHU2YTRiXHU3MmUxXHU3NjhlXHU3N2VmXHU3ZDVlXHU3ZmY5XHU4MWEwXHU4NTRlXHU4NmRmXHU4ZjAzXHU4ZjRlXHU5MGNhXHU5OTAzXHU5YTU1XHU5YmFiXHU0ZTE4XHU0ZTQ1XHU0ZTVkXHU0ZWM3XHU0ZmYxXHU1MTc3XHU1MmZlIl0sWyJjZmEx''@;'; put 'put ''IiwiXHU1MzQwXHU1M2UzXHU1M2U1XHU1NDhlXHU1NjE0XHU1Nzc1XHU1N2EyXHU1YmM3XHU1ZDg3XHU1ZWQwXHU2MWZjXHU2MmQ4XHU2NTUxXHU2N2I4XHU2N2U5XHU2OWNiXHU2YjUwXHU2YmM2XHU2YmVjXHU2YzQyXHU2ZTlkXHU3MDc4XHU3MmQ3XHU3Mzk2XHU3NDAzXHU3N2JmXHU3N2U5''@;'; put 'put ''XHU3YTc2XHU3ZDdmXHU4MDA5XHU4MWZjXHU4MjA1XHU4MjBhXHU4MmRmXHU4ODYyXHU4YjMzXHU4Y2ZjXHU4ZWMwXHU5MDExXHU5MGIxXHU5MjY0XHU5MmI2XHU5OWQyXHU5YTQ1XHU5Y2U5XHU5ZGQ3XHU5ZjljXHU1NzBiXHU1YzQwXHU4M2NhXHU5N2EwXHU5N2FiXHU5ZWI0XHU1NDFiXHU3''@;'; put 'put ''YTk4XHU3ZmE0XHU4OGQ5XHU4ZWNkXHU5MGUxXHU1ODAwXHU1YzQ4XHU2Mzk4XHU3YTlmXHU1YmFlXHU1ZjEzXHU3YTc5XHU3YWFlXHU4MjhlXHU4ZWFjXHU1MDI2XHU1MjM4XHU1MmY4XHU1Mzc3XHU1NzA4XHU2MmYzXHU2MzcyXHU2YjBhXHU2ZGMzXHU3NzM3XHU1M2E1XHU3MzU3XHU4NTY4''@;'; put 'put ''XHU4ZTc2XHU5NWQ1XHU2NzNhXHU2YWMzXHU2ZjcwXHU4YTZkXHU4ZWNjXHU5OTRiXHVmOTA2XHU2Njc3XHU2Yjc4XHU4Y2I0Il0sWyJkMGExIiwiXHU5YjNjXHVmOTA3XHU1M2ViXHU1NzJkXHU1OTRlXHU2M2M2XHU2OWZiXHU3M2VhXHU3ODQ1XHU3YWJhXHU3YWM1XHU3Y2ZlXHU4NDc1XHU4''@;'; put 'put ''OThmXHU4ZDczXHU5MDM1XHU5NWE4XHU1MmZiXHU1NzQ3XHU3NTQ3XHU3YjYwXHU4M2NjXHU5MjFlXHVmOTA4XHU2YTU4XHU1MTRiXHU1MjRiXHU1Mjg3XHU2MjFmXHU2OGQ4XHU2OTc1XHU5Njk5XHU1MGM1XHU1MmE0XHU1MmU0XHU2MWMzXHU2NWE0XHU2ODM5XHU2OWZmXHU3NDdlXHU3YjRi''@;'; put 'put ''XHU4MmI5XHU4M2ViXHU4OWIyXHU4YjM5XHU4ZmQxXHU5OTQ5XHVmOTA5XHU0ZWNhXHU1OTk3XHU2NGQyXHU2NjExXHU2YThlXHU3NDM0XHU3OTgxXHU3OWJkXHU4MmE5XHU4ODdlXHU4ODdmXHU4OTVmXHVmOTBhXHU5MzI2XHU0ZjBiXHU1M2NhXHU2MDI1XHU2MjcxXHU2YzcyXHU3ZDFhXHU3''@;'; put 'put ''ZDY2XHU0ZTk4XHU1MTYyXHU3N2RjXHU4MGFmXHU0ZjAxXHU0ZjBlXHU1MTc2XHU1MTgwXHU1NWRjXHU1NjY4XHU1NzNiXHU1N2ZhXHU1N2ZjXHU1OTE0XHU1OTQ3XHU1OTkzXHU1YmM0XHU1YzkwXHU1ZDBlXHU1ZGYxXHU1ZTdlXHU1ZmNjXHU2MjgwXHU2NWQ3XHU2NWUzIl0sWyJkMWExIiwi''@;'; put 'put ''XHU2NzFlXHU2NzFmXHU2NzVlXHU2OGNiXHU2OGM0XHU2YTVmXHU2YjNhXHU2YzIzXHU2YzdkXHU2YzgyXHU2ZGM3XHU3Mzk4XHU3NDI2XHU3NDJhXHU3NDgyXHU3NGEzXHU3NTc4XHU3NTdmXHU3ODgxXHU3OGVmXHU3OTQxXHU3OTQ3XHU3OTQ4XHU3OTdhXHU3Yjk1XHU3ZDAwXHU3ZGJhXHU3''@;'; put 'put ''Zjg4XHU4MDA2XHU4MDJkXHU4MDhjXHU4YTE4XHU4YjRmXHU4YzQ4XHU4ZDc3XHU5MzIxXHU5MzI0XHU5OGUyXHU5OTUxXHU5YTBlXHU5YTBmXHU5YTY1XHU5ZTkyXHU3ZGNhXHU0Zjc2XHU1NDA5XHU2MmVlXHU2ODU0XHU5MWQxXHU1NWFiXHU1MTNhXHVmOTBiXHVmOTBjXHU1YTFjXHU2MWU2''@;'; put 'put ''XHVmOTBkXHU2MmNmXHU2MmZmXHVmOTBlIiw1LCJcdTkwYTNcdWY5MTQiLDQsIlx1OGFmZVx1ZjkxOVx1ZjkxYVx1ZjkxYlx1ZjkxY1x1NjY5Nlx1ZjkxZFx1NzE1Nlx1ZjkxZVx1ZjkxZlx1OTZlM1x1ZjkyMFx1NjM0Zlx1NjM3YVx1NTM1N1x1ZjkyMVx1Njc4Zlx1Njk2MFx1NmU3M1x1Zjky''@;'; put 'put ''Mlx1NzUzN1x1ZjkyM1x1ZjkyNFx1ZjkyNSJdLFsiZDJhMSIsIlx1N2QwZFx1ZjkyNlx1ZjkyN1x1ODg3Mlx1NTZjYVx1NWExOFx1ZjkyOCIsNCwiXHU0ZTQzXHVmOTJkXHU1MTY3XHU1OTQ4XHU2N2YwXHU4MDEwXHVmOTJlXHU1OTczXHU1ZTc0XHU2NDlhXHU3OWNhXHU1ZmY1XHU2MDZjXHU2''@;'; put 'put ''MmM4XHU2MzdiXHU1YmU3XHU1YmQ3XHU1MmFhXHVmOTJmXHU1OTc0XHU1ZjI5XHU2MDEyXHVmOTMwXHVmOTMxXHVmOTMyXHU3NDU5XHVmOTMzIiw1LCJcdTk5ZDFcdWY5MzkiLDEwLCJcdTZmYzNcdWY5NDRcdWY5NDVcdTgxYmZcdThmYjJcdTYwZjFcdWY5NDZcdWY5NDdcdTgxNjZcdWY5NDhc''@;'; put 'put ''dWY5NDlcdTVjM2ZcdWY5NGEiLDcsIlx1NWFlOVx1OGEyNVx1Njc3Ylx1N2QxMFx1Zjk1MiIsNSwiXHU4MGZkXHVmOTU4XHVmOTU5XHU1YzNjXHU2Y2U1XHU1MzNmXHU2ZWJhXHU1OTFhXHU4MzM2Il0sWyJkM2ExIiwiXHU0ZTM5XHU0ZWI2XHU0ZjQ2XHU1NWFlXHU1NzE4XHU1OGM3XHU1ZjU2''@;'; put 'put ''XHU2NWI3XHU2NWU2XHU2YTgwXHU2YmI1XHU2ZTRkXHU3N2VkXHU3YWVmXHU3YzFlXHU3ZGRlXHU4NmNiXHU4ODkyXHU5MTMyXHU5MzViXHU2NGJiXHU2ZmJlXHU3MzdhXHU3NWI4XHU5MDU0XHU1NTU2XHU1NzRkXHU2MWJhXHU2NGQ0XHU2NmM3XHU2ZGUxXHU2ZTViXHU2ZjZkXHU2ZmI5XHU3''@;'; put 'put ''NWYwXHU4MDQzXHU4MWJkXHU4NTQxXHU4OTgzXHU4YWM3XHU4YjVhXHU5MzFmXHU2YzkzXHU3NTUzXHU3YjU0XHU4ZTBmXHU5MDVkXHU1NTEwXHU1ODAyXHU1ODU4XHU1ZTYyXHU2MjA3XHU2NDllXHU2OGUwXHU3NTc2XHU3Y2Q2XHU4N2IzXHU5ZWU4XHU0ZWUzXHU1Nzg4XHU1NzZlXHU1OTI3''@;'; put 'put ''XHU1YzBkXHU1Y2IxXHU1ZTM2XHU1Zjg1XHU2MjM0XHU2NGUxXHU3M2IzXHU4MWZhXHU4ODhiXHU4Y2I4XHU5NjhhXHU5ZWRiXHU1Yjg1XHU1ZmI3XHU2MGIzXHU1MDEyXHU1MjAwXHU1MjMwXHU1NzE2XHU1ODM1XHU1ODU3XHU1YzBlXHU1YzYwXHU1Y2Y2XHU1ZDhiXHU1ZWE2XHU1ZjkyXHU2''@;'; put 'put ''MGJjXHU2MzExXHU2Mzg5XHU2NDE3XHU2ODQzIl0sWyJkNGExIiwiXHU2OGY5XHU2YWMyXHU2ZGQ4XHU2ZTIxXHU2ZWQ0XHU2ZmU0XHU3MWZlXHU3NmRjXHU3Nzc5XHU3OWIxXHU3YTNiXHU4NDA0XHU4OWE5XHU4Y2VkXHU4ZGYzXHU4ZTQ4XHU5MDAzXHU5MDE0XHU5MDUzXHU5MGZkXHU5MzRk''@;'; put 'put ''XHU5Njc2XHU5N2RjXHU2YmQyXHU3MDA2XHU3MjU4XHU3MmEyXHU3MzY4XHU3NzYzXHU3OWJmXHU3YmU0XHU3ZTliXHU4YjgwXHU1OGE5XHU2MGM3XHU2NTY2XHU2NWZkXHU2NmJlXHU2YzhjXHU3MTFlXHU3MWM5XHU4YzVhXHU5ODEzXHU0ZTZkXHU3YTgxXHU0ZWRkXHU1MWFjXHU1MWNkXHU1''@;'; put 'put ''MmQ1XHU1NDBjXHU2MWE3XHU2NzcxXHU2ODUwXHU2OGRmXHU2ZDFlXHU2ZjdjXHU3NWJjXHU3N2IzXHU3YWU1XHU4MGY0XHU4NDYzXHU5Mjg1XHU1MTVjXHU2NTk3XHU2NzVjXHU2NzkzXHU3NWQ4XHU3YWM3XHU4MzczXHVmOTVhXHU4YzQ2XHU5MDE3XHU5ODJkXHU1YzZmXHU4MWMwXHU4Mjlh''@;'; put 'put ''XHU5MDQxXHU5MDZmXHU5MjBkXHU1Zjk3XHU1ZDlkXHU2YTU5XHU3MWM4XHU3NjdiXHU3YjQ5XHU4NWU0XHU4YjA0XHU5MTI3XHU5YTMwXHU1NTg3XHU2MWY2XHVmOTViXHU3NjY5XHU3Zjg1Il0sWyJkNWExIiwiXHU4NjNmXHU4N2JhXHU4OGY4XHU5MDhmXHVmOTVjXHU2ZDFiXHU3MGQ5XHU3''@;'; put 'put ''M2RlXHU3ZDYxXHU4NDNkXHVmOTVkXHU5MTZhXHU5OWYxXHVmOTVlXHU0ZTgyXHU1Mzc1XHU2YjA0XHU2YjEyXHU3MDNlXHU3MjFiXHU4NjJkXHU5ZTFlXHU1MjRjXHU4ZmEzXHU1ZDUwXHU2NGU1XHU2NTJjXHU2YjE2XHU2ZmViXHU3YzQzXHU3ZTljXHU4NWNkXHU4OTY0XHU4OWJkXHU2MmM5''@;'; put 'put ''XHU4MWQ4XHU4ODFmXHU1ZWNhXHU2NzE3XHU2ZDZhXHU3MmZjXHU3NDA1XHU3NDZmXHU4NzgyXHU5MGRlXHU0Zjg2XHU1ZDBkXHU1ZmEwXHU4NDBhXHU1MWI3XHU2M2EwXHU3NTY1XHU0ZWFlXHU1MDA2XHU1MTY5XHU1MWM5XHU2ODgxXHU2YTExXHU3Y2FlXHU3Y2IxXHU3Y2U3XHU4MjZmXHU4''@;'; put 'put ''YWQyXHU4ZjFiXHU5MWNmXHU0ZmI2XHU1MTM3XHU1MmY1XHU1NDQyXHU1ZWVjXHU2MTZlXHU2MjNlXHU2NWM1XHU2YWRhXHU2ZmZlXHU3OTJhXHU4NWRjXHU4ODIzXHU5NWFkXHU5YTYyXHU5YTZhXHU5ZTk3XHU5ZWNlXHU1MjliXHU2NmM2XHU2Yjc3XHU3MDFkXHU3OTJiXHU4ZjYyXHU5NzQy''@;'; put 'put ''XHU2MTkwXHU2MjAwXHU2NTIzXHU2ZjIzIl0sWyJkNmExIiwiXHU3MTQ5XHU3NDg5XHU3ZGY0XHU4MDZmXHU4NGVlXHU4ZjI2XHU5MDIzXHU5MzRhXHU1MWJkXHU1MjE3XHU1MmEzXHU2ZDBjXHU3MGM4XHU4OGMyXHU1ZWM5XHU2NTgyXHU2YmFlXHU2ZmMyXHU3YzNlXHU3Mzc1XHU0ZWU0XHU0''@;'; put 'put ''ZjM2XHU1NmY5XHVmOTVmXHU1Y2JhXHU1ZGJhXHU2MDFjXHU3M2IyXHU3YjJkXHU3ZjlhXHU3ZmNlXHU4MDQ2XHU5MDFlXHU5MjM0XHU5NmY2XHU5NzQ4XHU5ODE4XHU5ZjYxXHU0ZjhiXHU2ZmE3XHU3OWFlXHU5MWI0XHU5NmI3XHU1MmRlXHVmOTYwXHU2NDg4XHU2NGM0XHU2YWQzXHU2ZjVl''@;'; put 'put ''XHU3MDE4XHU3MjEwXHU3NmU3XHU4MDAxXHU4NjA2XHU4NjVjXHU4ZGVmXHU4ZjA1XHU5NzMyXHU5YjZmXHU5ZGZhXHU5ZTc1XHU3ODhjXHU3OTdmXHU3ZGEwXHU4M2M5XHU5MzA0XHU5ZTdmXHU5ZTkzXHU4YWQ2XHU1OGRmXHU1ZjA0XHU2NzI3XHU3MDI3XHU3NGNmXHU3YzYwXHU4MDdlXHU1''@;'; put 'put ''MTIxXHU3MDI4XHU3MjYyXHU3OGNhXHU4Y2MyXHU4Y2RhXHU4Y2Y0XHU5NmY3XHU0ZTg2XHU1MGRhXHU1YmVlXHU1ZWQ2XHU2NTk5XHU3MWNlXHU3NjQyXHU3N2FkXHU4MDRhXHU4NGZjIl0sWyJkN2ExIiwiXHU5MDdjXHU5YjI3XHU5ZjhkXHU1OGQ4XHU1YTQxXHU1YzYyXHU2YTEzXHU2ZGRh''@;'; put 'put ''XHU2ZjBmXHU3NjNiXHU3ZDJmXHU3ZTM3XHU4NTFlXHU4OTM4XHU5M2U0XHU5NjRiXHU1Mjg5XHU2NWQyXHU2N2YzXHU2OWI0XHU2ZDQxXHU2ZTljXHU3MDBmXHU3NDA5XHU3NDYwXHU3NTU5XHU3NjI0XHU3ODZiXHU4YjJjXHU5ODVlXHU1MTZkXHU2MjJlXHU5Njc4XHU0Zjk2XHU1MDJiXHU1''@;'; put 'put ''ZDE5XHU2ZGVhXHU3ZGI4XHU4ZjJhXHU1ZjhiXHU2MTQ0XHU2ODE3XHVmOTYxXHU5Njg2XHU1MmQyXHU4MDhiXHU1MWRjXHU1MWNjXHU2OTVlXHU3YTFjXHU3ZGJlXHU4M2YxXHU5Njc1XHU0ZmRhXHU1MjI5XHU1Mzk4XHU1NDBmXHU1NTBlXHU1YzY1XHU2MGE3XHU2NzRlXHU2OGE4XHU2ZDZj''@;'; put 'put ''XHU3MjgxXHU3MmY4XHU3NDA2XHU3NDgzXHVmOTYyXHU3NWUyXHU3YzZjXHU3Zjc5XHU3ZmI4XHU4Mzg5XHU4OGNmXHU4OGUxXHU5MWNjXHU5MWQwXHU5NmUyXHU5YmM5XHU1NDFkXHU2ZjdlXHU3MWQwXHU3NDk4XHU4NWZhXHU4ZWFhXHU5NmEzXHU5YzU3XHU5ZTlmXHU2Nzk3XHU2ZGNiXHU3''@;'; put 'put ''NDMzXHU4MWU4XHU5NzE2XHU3ODJjIl0sWyJkOGExIiwiXHU3YWNiXHU3YjIwXHU3YzkyXHU2NDY5XHU3NDZhXHU3NWYyXHU3OGJjXHU3OGU4XHU5OWFjXHU5YjU0XHU5ZWJiXHU1YmRlXHU1ZTU1XHU2ZjIwXHU4MTljXHU4M2FiXHU5MDg4XHU0ZTA3XHU1MzRkXHU1YTI5XHU1ZGQyXHU1ZjRl''@;'; put 'put ''XHU2MTYyXHU2MzNkXHU2NjY5XHU2NmZjXHU2ZWZmXHU2ZjJiXHU3MDYzXHU3NzllXHU4NDJjXHU4NTEzXHU4ODNiXHU4ZjEzXHU5OTQ1XHU5YzNiXHU1NTFjXHU2MmI5XHU2NzJiXHU2Y2FiXHU4MzA5XHU4OTZhXHU5NzdhXHU0ZWExXHU1OTg0XHU1ZmQ4XHU1ZmQ5XHU2NzFiXHU3ZGIyXHU3''@;'; put 'put ''ZjU0XHU4MjkyXHU4MzJiXHU4M2JkXHU4ZjFlXHU5MDk5XHU1N2NiXHU1OWI5XHU1YTkyXHU1YmQwXHU2NjI3XHU2NzlhXHU2ODg1XHU2YmNmXHU3MTY0XHU3Zjc1XHU4Y2I3XHU4Y2UzXHU5MDgxXHU5YjQ1XHU4MTA4XHU4YzhhXHU5NjRjXHU5YTQwXHU5ZWE1XHU1YjVmXHU2YzEzXHU3MzFi''@;'; put 'put ''XHU3NmYyXHU3NmRmXHU4NDBjXHU1MWFhXHU4OTkzXHU1MTRkXHU1MTk1XHU1MmM5XHU2OGM5XHU2Yzk0XHU3NzA0XHU3NzIwXHU3ZGJmXHU3ZGVjXHU5NzYyXHU5ZWI1XHU2ZWM1Il0sWyJkOWExIiwiXHU4NTExXHU1MWE1XHU1NDBkXHU1NDdkXHU2NjBlXHU2NjlkXHU2OTI3XHU2ZTlmXHU3''@;'; put 'put ''NmJmXHU3NzkxXHU4MzE3XHU4NGMyXHU4NzlmXHU5MTY5XHU5Mjk4XHU5Y2Y0XHU4ODgyXHU0ZmFlXHU1MTkyXHU1MmRmXHU1OWM2XHU1ZTNkXHU2MTU1XHU2NDc4XHU2NDc5XHU2NmFlXHU2N2QwXHU2YTIxXHU2YmNkXHU2YmRiXHU3MjVmXHU3MjYxXHU3NDQxXHU3NzM4XHU3N2RiXHU4MDE3''@;'; put 'put ''XHU4MmJjXHU4MzA1XHU4YjAwXHU4YjI4XHU4YzhjXHU2NzI4XHU2YzkwXHU3MjY3XHU3NmVlXHU3NzY2XHU3YTQ2XHU5ZGE5XHU2YjdmXHU2YzkyXHU1OTIyXHU2NzI2XHU4NDk5XHU1MzZmXHU1ODkzXHU1OTk5XHU1ZWRmXHU2M2NmXHU2NjM0XHU2NzczXHU2ZTNhXHU3MzJiXHU3YWQ3XHU4''@;'; put 'put ''MmQ3XHU5MzI4XHU1MmQ5XHU1ZGViXHU2MWFlXHU2MWNiXHU2MjBhXHU2MmM3XHU2NGFiXHU2NWUwXHU2OTU5XHU2YjY2XHU2YmNiXHU3MTIxXHU3M2Y3XHU3NTVkXHU3ZTQ2XHU4MjFlXHU4MzAyXHU4NTZhXHU4YWEzXHU4Y2JmXHU5NzI3XHU5ZDYxXHU1OGE4XHU5ZWQ4XHU1MDExXHU1MjBl''@;'; put 'put ''XHU1NDNiXHU1NTRmXHU2NTg3Il0sWyJkYWExIiwiXHU2Yzc2XHU3ZDBhXHU3ZDBiXHU4MDVlXHU4NjhhXHU5NTgwXHU5NmVmXHU1MmZmXHU2Yzk1XHU3MjY5XHU1NDczXHU1YTlhXHU1YzNlXHU1ZDRiXHU1ZjRjXHU1ZmFlXHU2NzJhXHU2OGI2XHU2OTYzXHU2ZTNjXHU2ZTQ0XHU3NzA5XHU3''@;'; put 'put ''YzczXHU3ZjhlXHU4NTg3XHU4YjBlXHU4ZmY3XHU5NzYxXHU5ZWY0XHU1Y2I3XHU2MGI2XHU2MTBkXHU2MWFiXHU2NTRmXHU2NWZiXHU2NWZjXHU2YzExXHU2Y2VmXHU3MzlmXHU3M2M5XHU3ZGUxXHU5NTk0XHU1YmM2XHU4NzFjXHU4YjEwXHU1MjVkXHU1MzVhXHU2MmNkXHU2NDBmXHU2NGIy''@;'; put 'put ''XHU2NzM0XHU2YTM4XHU2Y2NhXHU3M2MwXHU3NDllXHU3Yjk0XHU3Yzk1XHU3ZTFiXHU4MThhXHU4MjM2XHU4NTg0XHU4ZmViXHU5NmY5XHU5OWMxXHU0ZjM0XHU1MzRhXHU1M2NkXHU1M2RiXHU2MmNjXHU2NDJjXHU2NTAwXHU2NTkxXHU2OWMzXHU2Y2VlXHU2ZjU4XHU3M2VkXHU3NTU0XHU3''@;'; put 'put ''NjIyXHU3NmU0XHU3NmZjXHU3OGQwXHU3OGZiXHU3OTJjXHU3ZDQ2XHU4MjJjXHU4N2UwXHU4ZmQ0XHU5ODEyXHU5OGVmXHU1MmMzXHU2MmQ0XHU2NGE1XHU2ZTI0XHU2ZjUxIl0sWyJkYmExIiwiXHU3NjdjXHU4ZGNiXHU5MWIxXHU5MjYyXHU5YWVlXHU5YjQzXHU1MDIzXHU1MDhkXHU1NzRh''@;'; put 'put ''XHU1OWE4XHU1YzI4XHU1ZTQ3XHU1Zjc3XHU2MjNmXHU2NTNlXHU2NWI5XHU2NWMxXHU2NjA5XHU2NzhiXHU2OTljXHU2ZWMyXHU3OGM1XHU3ZDIxXHU4MGFhXHU4MTgwXHU4MjJiXHU4MmIzXHU4NGExXHU4NjhjXHU4YTJhXHU4YjE3XHU5MGE2XHU5NjMyXHU5ZjkwXHU1MDBkXHU0ZmYzXHVm''@;'; put 'put ''OTYzXHU1N2Y5XHU1Zjk4XHU2MmRjXHU2MzkyXHU2NzZmXHU2ZTQzXHU3MTE5XHU3NmMzXHU4MGNjXHU4MGRhXHU4OGY0XHU4OGY1XHU4OTE5XHU4Y2UwXHU4ZjI5XHU5MTRkXHU5NjZhXHU0ZjJmXHU0ZjcwXHU1ZTFiXHU2N2NmXHU2ODIyXHU3NjdkXHU3NjdlXHU5YjQ0XHU1ZTYxXHU2YTBh''@;'; put 'put ''XHU3MTY5XHU3MWQ0XHU3NTZhXHVmOTY0XHU3ZTQxXHU4NTQzXHU4NWU5XHU5OGRjXHU0ZjEwXHU3YjRmXHU3ZjcwXHU5NWE1XHU1MWUxXHU1ZTA2XHU2OGI1XHU2YzNlXHU2YzRlXHU2Y2RiXHU3MmFmXHU3YmM0XHU4MzAzXHU2Y2Q1XHU3NDNhXHU1MGZiXHU1Mjg4XHU1OGMxXHU2NGQ4XHU2''@;'; put 'put ''YTk3XHU3NGE3XHU3NjU2Il0sWyJkY2ExIiwiXHU3OGE3XHU4NjE3XHU5NWUyXHU5NzM5XHVmOTY1XHU1MzVlXHU1ZjAxXHU4YjhhXHU4ZmE4XHU4ZmFmXHU5MDhhXHU1MjI1XHU3N2E1XHU5YzQ5XHU5ZjA4XHU0ZTE5XHU1MDAyXHU1MTc1XHU1YzViXHU1ZTc3XHU2NjFlXHU2NjNhXHU2N2M0''@;'; put 'put ''XHU2OGM1XHU3MGIzXHU3NTAxXHU3NWM1XHU3OWM5XHU3YWRkXHU4ZjI3XHU5OTIwXHU5YTA4XHU0ZmRkXHU1ODIxXHU1ODMxXHU1YmY2XHU2NjZlXHU2YjY1XHU2ZDExXHU2ZTdhXHU2ZjdkXHU3M2U0XHU3NTJiXHU4M2U5XHU4OGRjXHU4OTEzXHU4YjVjXHU4ZjE0XHU0ZjBmXHU1MGQ1XHU1''@;'; put 'put ''MzEwXHU1MzVjXHU1YjkzXHU1ZmE5XHU2NzBkXHU3OThmXHU4MTc5XHU4MzJmXHU4NTE0XHU4OTA3XHU4OTg2XHU4ZjM5XHU4ZjNiXHU5OWE1XHU5YzEyXHU2NzJjXHU0ZTc2XHU0ZmY4XHU1OTQ5XHU1YzAxXHU1Y2VmXHU1Y2YwXHU2MzY3XHU2OGQyXHU3MGZkXHU3MWEyXHU3NDJiXHU3ZTJi''@;'; put 'put ''XHU4NGVjXHU4NzAyXHU5MDIyXHU5MmQyXHU5Y2YzXHU0ZTBkXHU0ZWQ4XHU0ZmVmXHU1MDg1XHU1MjU2XHU1MjZmXHU1NDI2XHU1NDkwXHU1N2UwXHU1OTJiXHU1YTY2Il0sWyJkZGExIiwiXHU1YjVhXHU1Yjc1XHU1YmNjXHU1ZTljXHVmOTY2XHU2Mjc2XHU2NTc3XHU2NWE3XHU2ZDZlXHU2''@;'; put 'put ''ZWE1XHU3MjM2XHU3YjI2XHU3YzNmXHU3ZjM2XHU4MTUwXHU4MTUxXHU4MTlhXHU4MjQwXHU4Mjk5XHU4M2E5XHU4YTAzXHU4Y2EwXHU4Y2U2XHU4Y2ZiXHU4ZDc0XHU4ZGJhXHU5MGU4XHU5MWRjXHU5NjFjXHU5NjQ0XHU5OWQ5XHU5Y2U3XHU1MzE3XHU1MjA2XHU1NDI5XHU1Njc0XHU1OGIz''@;'; put 'put ''XHU1OTU0XHU1OTZlXHU1ZmZmXHU2MWE0XHU2MjZlXHU2NjEwXHU2YzdlXHU3MTFhXHU3NmM2XHU3Yzg5XHU3Y2RlXHU3ZDFiXHU4MmFjXHU4Y2MxXHU5NmYwXHVmOTY3XHU0ZjViXHU1ZjE3XHU1ZjdmXHU2MmMyXHU1ZDI5XHU2NzBiXHU2OGRhXHU3ODdjXHU3ZTQzXHU5ZDZjXHU0ZTE1XHU1''@;'; put 'put ''MDk5XHU1MzE1XHU1MzJhXHU1MzUxXHU1OTgzXHU1YTYyXHU1ZTg3XHU2MGIyXHU2MThhXHU2MjQ5XHU2Mjc5XHU2NTkwXHU2Nzg3XHU2OWE3XHU2YmQ0XHU2YmQ2XHU2YmQ3XHU2YmQ4XHU2Y2I4XHVmOTY4XHU3NDM1XHU3NWZhXHU3ODEyXHU3ODkxXHU3OWQ1XHU3OWQ4XHU3YzgzXHU3ZGNi''@;'; put 'put ''XHU3ZmUxXHU4MGE1Il0sWyJkZWExIiwiXHU4MTNlXHU4MWMyXHU4M2YyXHU4NzFhXHU4OGU4XHU4YWI5XHU4YjZjXHU4Y2JiXHU5MTE5XHU5NzVlXHU5OGRiXHU5ZjNiXHU1NmFjXHU1YjJhXHU1ZjZjXHU2NThjXHU2YWIzXHU2YmFmXHU2ZDVjXHU2ZmYxXHU3MDE1XHU3MjVkXHU3M2FkXHU4''@;'; put 'put ''Y2E3XHU4Y2QzXHU5ODNiXHU2MTkxXHU2YzM3XHU4MDU4XHU5YTAxXHU0ZTRkXHU0ZThiXHU0ZTliXHU0ZWQ1XHU0ZjNhXHU0ZjNjXHU0ZjdmXHU0ZmRmXHU1MGZmXHU1M2YyXHU1M2Y4XHU1NTA2XHU1NWUzXHU1NmRiXHU1OGViXHU1OTYyXHU1YTExXHU1YmViXHU1YmZhXHU1YzA0XHU1ZGYz''@;'; put 'put ''XHU1ZTJiXHU1Zjk5XHU2MDFkXHU2MzY4XHU2NTljXHU2NWFmXHU2N2Y2XHU2N2ZiXHU2OGFkXHU2YjdiXHU2Yzk5XHU2Y2Q3XHU2ZTIzXHU3MDA5XHU3MzQ1XHU3ODAyXHU3OTNlXHU3OTQwXHU3OTYwXHU3OWMxXHU3YmU5XHU3ZDE3XHU3ZDcyXHU4MDg2XHU4MjBkXHU4MzhlXHU4NGQxXHU4''@;'; put 'put ''NmM3XHU4OGRmXHU4YTUwXHU4YTVlXHU4YjFkXHU4Y2RjXHU4ZDY2XHU4ZmFkXHU5MGFhXHU5OGZjXHU5OWRmXHU5ZTlkXHU1MjRhXHVmOTY5XHU2NzE0XHVmOTZhIl0sWyJkZmExIiwiXHU1MDk4XHU1MjJhXHU1YzcxXHU2NTYzXHU2YzU1XHU3M2NhXHU3NTIzXHU3NTlkXHU3Yjk3XHU4NDlj''@;'; put 'put ''XHU5MTc4XHU5NzMwXHU0ZTc3XHU2NDkyXHU2YmJhXHU3MTVlXHU4NWE5XHU0ZTA5XHVmOTZiXHU2NzQ5XHU2OGVlXHU2ZTE3XHU4MjlmXHU4NTE4XHU4ODZiXHU2M2Y3XHU2ZjgxXHU5MjEyXHU5OGFmXHU0ZTBhXHU1MGI3XHU1MGNmXHU1MTFmXHU1NTQ2XHU1NWFhXHU1NjE3XHU1YjQwXHU1''@;'; put 'put ''YzE5XHU1Y2UwXHU1ZTM4XHU1ZThhXHU1ZWEwXHU1ZWMyXHU2MGYzXHU2ODUxXHU2YTYxXHU2ZTU4XHU3MjNkXHU3MjQwXHU3MmMwXHU3NmY4XHU3OTY1XHU3YmIxXHU3ZmQ0XHU4OGYzXHU4OWY0XHU4YTczXHU4YzYxXHU4Y2RlXHU5NzFjXHU1ODVlXHU3NGJkXHU4Y2ZkXHU1NWM3XHVmOTZj''@;'; put 'put ''XHU3YTYxXHU3ZDIyXHU4MjcyXHU3MjcyXHU3NTFmXHU3NTI1XHVmOTZkXHU3YjE5XHU1ODg1XHU1OGZiXHU1ZGJjXHU1ZThmXHU1ZWI2XHU1ZjkwXHU2MDU1XHU2MjkyXHU2MzdmXHU2NTRkXHU2NjkxXHU2NmQ5XHU2NmY4XHU2ODE2XHU2OGYyXHU3MjgwXHU3NDVlXHU3YjZlXHU3ZDZlXHU3''@;'; put 'put ''ZGQ2XHU3ZjcyIl0sWyJlMGExIiwiXHU4MGU1XHU4MjEyXHU4NWFmXHU4OTdmXHU4YTkzXHU5MDFkXHU5MmU0XHU5ZWNkXHU5ZjIwXHU1OTE1XHU1OTZkXHU1ZTJkXHU2MGRjXHU2NjE0XHU2NjczXHU2NzkwXHU2YzUwXHU2ZGM1XHU2ZjVmXHU3N2YzXHU3OGE5XHU4NGM2XHU5MWNiXHU5MzJi''@;'; put 'put ''XHU0ZWQ5XHU1MGNhXHU1MTQ4XHU1NTg0XHU1YjBiXHU1YmEzXHU2MjQ3XHU2NTdlXHU2NWNiXHU2ZTMyXHU3MTdkXHU3NDAxXHU3NDQ0XHU3NDg3XHU3NGJmXHU3NjZjXHU3OWFhXHU3ZGRhXHU3ZTU1XHU3ZmE4XHU4MTdhXHU4MWIzXHU4MjM5XHU4NjFhXHU4N2VjXHU4YTc1XHU4ZGUzXHU5''@;'; put 'put ''MDc4XHU5MjkxXHU5NDI1XHU5OTRkXHU5YmFlXHU1MzY4XHU1YzUxXHU2OTU0XHU2Y2M0XHU2ZDI5XHU2ZTJiXHU4MjBjXHU4NTliXHU4OTNiXHU4YTJkXHU4YWFhXHU5NmVhXHU5ZjY3XHU1MjYxXHU2NmI5XHU2YmIyXHU3ZTk2XHU4N2ZlXHU4ZDBkXHU5NTgzXHU5NjVkXHU2NTFkXHU2ZDg5''@;'; put 'put ''XHU3MWVlXHVmOTZlXHU1N2NlXHU1OWQzXHU1YmFjXHU2MDI3XHU2MGZhXHU2MjEwXHU2NjFmXHU2NjVmXHU3MzI5XHU3M2Y5XHU3NmRiXHU3NzAxXHU3YjZjIl0sWyJlMWExIiwiXHU4MDU2XHU4MDcyXHU4MTY1XHU4YWEwXHU5MTkyXHU0ZTE2XHU1MmUyXHU2YjcyXHU2ZDE3XHU3YTA1XHU3''@;'; put 'put ''YjM5XHU3ZDMwXHVmOTZmXHU4Y2IwXHU1M2VjXHU1NjJmXHU1ODUxXHU1YmI1XHU1YzBmXHU1YzExXHU1ZGUyXHU2MjQwXHU2MzgzXHU2NDE0XHU2NjJkXHU2OGIzXHU2Y2JjXHU2ZDg4XHU2ZWFmXHU3MDFmXHU3MGE0XHU3MWQyXHU3NTI2XHU3NThmXHU3NThlXHU3NjE5XHU3YjExXHU3YmUw''@;'; put 'put ''XHU3YzJiXHU3ZDIwXHU3ZDM5XHU4NTJjXHU4NTZkXHU4NjA3XHU4YTM0XHU5MDBkXHU5MDYxXHU5MGI1XHU5MmI3XHU5N2Y2XHU5YTM3XHU0ZmQ3XHU1YzZjXHU2NzVmXHU2ZDkxXHU3YzlmXHU3ZThjXHU4YjE2XHU4ZDE2XHU5MDFmXHU1YjZiXHU1ZGZkXHU2NDBkXHU4NGMwXHU5MDVjXHU5''@;'; put 'put ''OGUxXHU3Mzg3XHU1YjhiXHU2MDlhXHU2NzdlXHU2ZGRlXHU4YTFmXHU4YWE2XHU5MDAxXHU5ODBjXHU1MjM3XHVmOTcwXHU3MDUxXHU3ODhlXHU5Mzk2XHU4ODcwXHU5MWQ3XHU0ZmVlXHU1M2Q3XHU1NWZkXHU1NmRhXHU1NzgyXHU1OGZkXHU1YWMyXHU1Yjg4XHU1Y2FiXHU1Y2MwXHU1ZTI1''@;'; put 'put ''XHU2MTAxIl0sWyJlMmExIiwiXHU2MjBkXHU2MjRiXHU2Mzg4XHU2NDFjXHU2NTM2XHU2NTc4XHU2YTM5XHU2YjhhXHU2YzM0XHU2ZDE5XHU2ZjMxXHU3MWU3XHU3MmU5XHU3Mzc4XHU3NDA3XHU3NGIyXHU3NjI2XHU3NzYxXHU3OWMwXHU3YTU3XHU3YWVhXHU3Y2I5XHU3ZDhmXHU3ZGFjXHU3''@;'; put 'put ''ZTYxXHU3ZjllXHU4MTI5XHU4MzMxXHU4NDkwXHU4NGRhXHU4NWVhXHU4ODk2XHU4YWIwXHU4YjkwXHU4ZjM4XHU5MDQyXHU5MDgzXHU5MTZjXHU5Mjk2XHU5MmI5XHU5NjhiXHU5NmE3XHU5NmE4XHU5NmQ2XHU5NzAwXHU5ODA4XHU5OTk2XHU5YWQzXHU5YjFhXHU1M2Q0XHU1ODdlXHU1OTE5''@;'; put 'put ''XHU1YjcwXHU1YmJmXHU2ZGQxXHU2ZjVhXHU3MTlmXHU3NDIxXHU3NGI5XHU4MDg1XHU4M2ZkXHU1ZGUxXHU1Zjg3XHU1ZmFhXHU2MDQyXHU2NWVjXHU2ODEyXHU2OTZmXHU2YTUzXHU2Yjg5XHU2ZDM1XHU2ZGYzXHU3M2UzXHU3NmZlXHU3N2FjXHU3YjRkXHU3ZDE0XHU4MTIzXHU4MjFjXHU4''@;'; put 'put ''MzQwXHU4NGY0XHU4NTYzXHU4YTYyXHU4YWM0XHU5MTg3XHU5MzFlXHU5ODA2XHU5OWI0XHU2MjBjXHU4ODUzXHU4ZmYwXHU5MjY1XHU1ZDA3XHU1ZDI3Il0sWyJlM2ExIiwiXHU1ZDY5XHU3NDVmXHU4MTlkXHU4NzY4XHU2ZmQ1XHU2MmZlXHU3ZmQyXHU4OTM2XHU4OTcyXHU0ZTFlXHU0ZTU4''@;'; put 'put ''XHU1MGU3XHU1MmRkXHU1MzQ3XHU2MjdmXHU2NjA3XHU3ZTY5XHU4ODA1XHU5NjVlXHU0ZjhkXHU1MzE5XHU1NjM2XHU1OWNiXHU1YWE0XHU1YzM4XHU1YzRlXHU1YzRkXHU1ZTAyXHU1ZjExXHU2MDQzXHU2NWJkXHU2NjJmXHU2NjQyXHU2N2JlXHU2N2Y0XHU3MzFjXHU3N2UyXHU3OTNhXHU3''@;'; put 'put ''ZmM1XHU4NDk0XHU4NGNkXHU4OTk2XHU4YTY2XHU4YTY5XHU4YWUxXHU4YzU1XHU4YzdhXHU1N2Y0XHU1YmQ0XHU1ZjBmXHU2MDZmXHU2MmVkXHU2OTBkXHU2Yjk2XHU2ZTVjXHU3MTg0XHU3YmQyXHU4NzU1XHU4YjU4XHU4ZWZlXHU5OGRmXHU5OGZlXHU0ZjM4XHU0ZjgxXHU0ZmUxXHU1NDdi''@;'; put 'put ''XHU1YTIwXHU1YmI4XHU2MTNjXHU2NWIwXHU2NjY4XHU3MWZjXHU3NTMzXHU3OTVlXHU3ZDMzXHU4MTRlXHU4MWUzXHU4Mzk4XHU4NWFhXHU4NWNlXHU4NzAzXHU4YTBhXHU4ZWFiXHU4ZjliXHVmOTcxXHU4ZmM1XHU1OTMxXHU1YmE0XHU1YmU2XHU2MDg5XHU1YmU5XHU1YzBiXHU1ZmMzXHU2''@;'; put 'put ''YzgxIl0sWyJlNGExIiwiXHVmOTcyXHU2ZGYxXHU3MDBiXHU3NTFhXHU4MmFmXHU4YWY2XHU0ZWMwXHU1MzQxXHVmOTczXHU5NmQ5XHU2YzBmXHU0ZTllXHU0ZmM0XHU1MTUyXHU1NTVlXHU1YTI1XHU1Y2U4XHU2MjExXHU3MjU5XHU4MmJkXHU4M2FhXHU4NmZlXHU4ODU5XHU4YTFkXHU5NjNm''@;'; put 'put ''XHU5NmM1XHU5OTEzXHU5ZDA5XHU5ZDVkXHU1ODBhXHU1Y2IzXHU1ZGJkXHU1ZTQ0XHU2MGUxXHU2MTE1XHU2M2UxXHU2YTAyXHU2ZTI1XHU5MTAyXHU5MzU0XHU5ODRlXHU5YzEwXHU5Zjc3XHU1Yjg5XHU1Y2I4XHU2MzA5XHU2NjRmXHU2ODQ4XHU3NzNjXHU5NmMxXHU5NzhkXHU5ODU0XHU5''@;'; put 'put ''YjlmXHU2NWExXHU4YjAxXHU4ZWNiXHU5NWJjXHU1NTM1XHU1Y2E5XHU1ZGQ2XHU1ZWI1XHU2Njk3XHU3NjRjXHU4M2Y0XHU5NWM3XHU1OGQzXHU2MmJjXHU3MmNlXHU5ZDI4XHU0ZWYwXHU1OTJlXHU2MDBmXHU2NjNiXHU2YjgzXHU3OWU3XHU5ZDI2XHU1MzkzXHU1NGMwXHU1N2MzXHU1ZDE2''@;'; put 'put ''XHU2MTFiXHU2NmQ2XHU2ZGFmXHU3ODhkXHU4MjdlXHU5Njk4XHU5NzQ0XHU1Mzg0XHU2MjdjXHU2Mzk2XHU2ZGIyXHU3ZTBhXHU4MTRiXHU5ODRkIl0sWyJlNWExIiwiXHU2YWZiXHU3ZjRjXHU5ZGFmXHU5ZTFhXHU0ZTVmXHU1MDNiXHU1MWI2XHU1OTFjXHU2MGY5XHU2M2Y2XHU2OTMwXHU3''@;'; put 'put ''MjNhXHU4MDM2XHVmOTc0XHU5MWNlXHU1ZjMxXHVmOTc1XHVmOTc2XHU3ZDA0XHU4MmU1XHU4NDZmXHU4NGJiXHU4NWU1XHU4ZThkXHVmOTc3XHU0ZjZmXHVmOTc4XHVmOTc5XHU1OGU0XHU1YjQzXHU2MDU5XHU2M2RhXHU2NTE4XHU2NTZkXHU2Njk4XHVmOTdhXHU2OTRhXHU2YTIzXHU2ZDBi''@;'; put 'put ''XHU3MDAxXHU3MTZjXHU3NWQyXHU3NjBkXHU3OWIzXHU3YTcwXHVmOTdiXHU3ZjhhXHVmOTdjXHU4OTQ0XHVmOTdkXHU4YjkzXHU5MWMwXHU5NjdkXHVmOTdlXHU5OTBhXHU1NzA0XHU1ZmExXHU2NWJjXHU2ZjAxXHU3NjAwXHU3OWE2XHU4YTllXHU5OWFkXHU5YjVhXHU5ZjZjXHU1MTA0XHU2''@;'; put 'put ''MWI2XHU2MjkxXHU2YThkXHU4MWM2XHU1MDQzXHU1ODMwXHU1ZjY2XHU3MTA5XHU4YTAwXHU4YWZhXHU1YjdjXHU4NjE2XHU0ZmZhXHU1MTNjXHU1NmI0XHU1OTQ0XHU2M2E5XHU2ZGY5XHU1ZGFhXHU2OTZkXHU1MTg2XHU0ZTg4XHU0ZjU5XHVmOTdmXHVmOTgwXHVmOTgxXHU1OTgyXHVmOTgy''@;'; put 'put ''Il0sWyJlNmExIiwiXHVmOTgzXHU2YjVmXHU2YzVkXHVmOTg0XHU3NGI1XHU3OTE2XHVmOTg1XHU4MjA3XHU4MjQ1XHU4MzM5XHU4ZjNmXHU4ZjVkXHVmOTg2XHU5OTE4XHVmOTg3XHVmOTg4XHVmOTg5XHU0ZWE2XHVmOThhXHU1N2RmXHU1Zjc5XHU2NjEzXHVmOThiXHVmOThjXHU3NWFiXHU3''@;'; put 'put ''ZTc5XHU4YjZmXHVmOThkXHU5MDA2XHU5YTViXHU1NmE1XHU1ODI3XHU1OWY4XHU1YTFmXHU1YmI0XHVmOThlXHU1ZWY2XHVmOThmXHVmOTkwXHU2MzUwXHU2MzNiXHVmOTkxXHU2OTNkXHU2Yzg3XHU2Y2JmXHU2ZDhlXHU2ZDkzXHU2ZGY1XHU2ZjE0XHVmOTkyXHU3MGRmXHU3MTM2XHU3MTU5''@;'; put 'put ''XHVmOTkzXHU3MWMzXHU3MWQ1XHVmOTk0XHU3ODRmXHU3ODZmXHVmOTk1XHU3Yjc1XHU3ZGUzXHVmOTk2XHU3ZTJmXHVmOTk3XHU4ODRkXHU4ZWRmXHVmOTk4XHVmOTk5XHVmOTlhXHU5MjViXHVmOTliXHU5Y2Y2XHVmOTljXHVmOTlkXHVmOTllXHU2MDg1XHU2ZDg1XHVmOTlmXHU3MWIxXHVm''@;'; put 'put ''OWEwXHVmOWExXHU5NWIxXHU1M2FkXHVmOWEyXHVmOWEzXHVmOWE0XHU2N2QzXHVmOWE1XHU3MDhlXHU3MTMwXHU3NDMwXHU4Mjc2XHU4MmQyIl0sWyJlN2ExIiwiXHVmOWE2XHU5NWJiXHU5YWU1XHU5ZTdkXHU2NmM0XHVmOWE3XHU3MWMxXHU4NDQ5XHVmOWE4XHVmOWE5XHU1ODRiXHVmOWFh''@;'; put 'put ''XHVmOWFiXHU1ZGI4XHU1ZjcxXHVmOWFjXHU2NjIwXHU2NjhlXHU2OTc5XHU2OWFlXHU2YzM4XHU2Y2YzXHU2ZTM2XHU2ZjQxXHU2ZmRhXHU3MDFiXHU3MDJmXHU3MTUwXHU3MWRmXHU3MzcwXHVmOWFkXHU3NDViXHVmOWFlXHU3NGQ0XHU3NmM4XHU3YTRlXHU3ZTkzXHVmOWFmXHVmOWIwXHU4''@;'; put 'put ''MmYxXHU4YTYwXHU4ZmNlXHVmOWIxXHU5MzQ4XHVmOWIyXHU5NzE5XHVmOWIzXHVmOWI0XHU0ZTQyXHU1MDJhXHVmOWI1XHU1MjA4XHU1M2UxXHU2NmYzXHU2YzZkXHU2ZmNhXHU3MzBhXHU3NzdmXHU3YTYyXHU4MmFlXHU4NWRkXHU4NjAyXHVmOWI2XHU4OGQ0XHU4YTYzXHU4YjdkXHU4YzZi''@;'; put 'put ''XHVmOWI3XHU5MmIzXHVmOWI4XHU5NzEzXHU5ODEwXHU0ZTk0XHU0ZjBkXHU0ZmM5XHU1MGIyXHU1MzQ4XHU1NDNlXHU1NDMzXHU1NWRhXHU1ODYyXHU1OGJhXHU1OTY3XHU1YTFiXHU1YmU0XHU2MDlmXHVmOWI5XHU2MWNhXHU2NTU2XHU2NWZmXHU2NjY0XHU2OGE3XHU2YzVhXHU2ZmIzIl0s''@;'; put 'put ''WyJlOGExIiwiXHU3MGNmXHU3MWFjXHU3MzUyXHU3YjdkXHU4NzA4XHU4YWE0XHU5YzMyXHU5ZjA3XHU1YzRiXHU2YzgzXHU3MzQ0XHU3Mzg5XHU5MjNhXHU2ZWFiXHU3NDY1XHU3NjFmXHU3YTY5XHU3ZTE1XHU4NjBhXHU1MTQwXHU1OGM1XHU2NGMxXHU3NGVlXHU3NTE1XHU3NjcwXHU3ZmMx''@;'; put 'put ''XHU5MDk1XHU5NmNkXHU5OTU0XHU2ZTI2XHU3NGU2XHU3YWE5XHU3YWFhXHU4MWU1XHU4NmQ5XHU4Nzc4XHU4YTFiXHU1YTQ5XHU1YjhjXHU1YjliXHU2OGExXHU2OTAwXHU2ZDYzXHU3M2E5XHU3NDEzXHU3NDJjXHU3ODk3XHU3ZGU5XHU3ZmViXHU4MTE4XHU4MTU1XHU4MzllXHU4YzRjXHU5''@;'; put 'put ''NjJlXHU5ODExXHU2NmYwXHU1ZjgwXHU2NWZhXHU2Nzg5XHU2YzZhXHU3MzhiXHU1MDJkXHU1YTAzXHU2YjZhXHU3N2VlXHU1OTE2XHU1ZDZjXHU1ZGNkXHU3MzI1XHU3NTRmXHVmOWJhXHVmOWJiXHU1MGU1XHU1MWY5XHU1ODJmXHU1OTJkXHU1OTk2XHU1OWRhXHU1YmU1XHVmOWJjXHVmOWJk''@;'; put 'put ''XHU1ZGEyXHU2MmQ3XHU2NDE2XHU2NDkzXHU2NGZlXHVmOWJlXHU2NmRjXHVmOWJmXHU2YTQ4XHVmOWMwXHU3MWZmXHU3NDY0XHVmOWMxIl0sWyJlOWExIiwiXHU3YTg4XHU3YWFmXHU3ZTQ3XHU3ZTVlXHU4MDAwXHU4MTcwXHVmOWMyXHU4N2VmXHU4OTgxXHU4YjIwXHU5MDU5XHVmOWMzXHU5''@;'; put 'put ''MDgwXHU5OTUyXHU2MTdlXHU2YjMyXHU2ZDc0XHU3ZTFmXHU4OTI1XHU4ZmIxXHU0ZmQxXHU1MGFkXHU1MTk3XHU1MmM3XHU1N2M3XHU1ODg5XHU1YmI5XHU1ZWI4XHU2MTQyXHU2OTk1XHU2ZDhjXHU2ZTY3XHU2ZWI2XHU3MTk0XHU3NDYyXHU3NTI4XHU3NTJjXHU4MDczXHU4MzM4XHU4NGM5''@;'; put 'put ''XHU4ZTBhXHU5Mzk0XHU5M2RlXHVmOWM0XHU0ZThlXHU0ZjUxXHU1MDc2XHU1MTJhXHU1M2M4XHU1M2NiXHU1M2YzXHU1Yjg3XHU1YmQzXHU1YzI0XHU2MTFhXHU2MTgyXHU2NWY0XHU3MjViXHU3Mzk3XHU3NDQwXHU3NmMyXHU3OTUwXHU3OTkxXHU3OWI5XHU3ZDA2XHU3ZmJkXHU4MjhiXHU4''@;'; put 'put ''NWQ1XHU4NjVlXHU4ZmMyXHU5MDQ3XHU5MGY1XHU5MWVhXHU5Njg1XHU5NmU4XHU5NmU5XHU1MmQ2XHU1ZjY3XHU2NWVkXHU2NjMxXHU2ODJmXHU3MTVjXHU3YTM2XHU5MGMxXHU5ODBhXHU0ZTkxXHVmOWM1XHU2YTUyXHU2YjllXHU2ZjkwXHU3MTg5XHU4MDE4XHU4MmI4XHU4NTUzIl0sWyJl''@;'; put 'put ''YWExIiwiXHU5MDRiXHU5Njk1XHU5NmYyXHU5N2ZiXHU4NTFhXHU5YjMxXHU0ZTkwXHU3MThhXHU5NmM0XHU1MTQzXHU1MzlmXHU1NGUxXHU1NzEzXHU1NzEyXHU1N2EzXHU1YTliXHU1YWM0XHU1YmMzXHU2MDI4XHU2MTNmXHU2M2Y0XHU2Yzg1XHU2ZDM5XHU2ZTcyXHU2ZTkwXHU3MjMwXHU3''@;'; put 'put ''MzNmXHU3NDU3XHU4MmQxXHU4ODgxXHU4ZjQ1XHU5MDYwXHVmOWM2XHU5NjYyXHU5ODU4XHU5ZDFiXHU2NzA4XHU4ZDhhXHU5MjVlXHU0ZjRkXHU1MDQ5XHU1MGRlXHU1MzcxXHU1NzBkXHU1OWQ0XHU1YTAxXHU1YzA5XHU2MTcwXHU2NjkwXHU2ZTJkXHU3MjMyXHU3NDRiXHU3ZGVmXHU4MGMz''@;'; put 'put ''XHU4NDBlXHU4NDY2XHU4NTNmXHU4NzVmXHU4ODViXHU4OTE4XHU4YjAyXHU5MDU1XHU5N2NiXHU5YjRmXHU0ZTczXHU0ZjkxXHU1MTEyXHU1MTZhXHVmOWM3XHU1NTJmXHU1NWE5XHU1YjdhXHU1YmE1XHU1ZTdjXHU1ZTdkXHU1ZWJlXHU2MGEwXHU2MGRmXHU2MTA4XHU2MTA5XHU2M2M0XHU2''@;'; put 'put ''NTM4XHU2NzA5XHVmOWM4XHU2N2Q0XHU2N2RhXHVmOWM5XHU2OTYxXHU2OTYyXHU2Y2I5XHU2ZDI3XHVmOWNhXHU2ZTM4XHVmOWNiIl0sWyJlYmExIiwiXHU2ZmUxXHU3MzM2XHU3MzM3XHVmOWNjXHU3NDVjXHU3NTMxXHVmOWNkXHU3NjUyXHVmOWNlXHVmOWNmXHU3ZGFkXHU4MWZlXHU4NDM4''@;'; put 'put ''XHU4OGQ1XHU4YTk4XHU4YWRiXHU4YWVkXHU4ZTMwXHU4ZTQyXHU5MDRhXHU5MDNlXHU5MDdhXHU5MTQ5XHU5MWM5XHU5MzZlXHVmOWQwXHVmOWQxXHU1ODA5XHVmOWQyXHU2YmQzXHU4MDg5XHU4MGIyXHVmOWQzXHVmOWQ0XHU1MTQxXHU1OTZiXHU1YzM5XHVmOWQ1XHVmOWQ2XHU2ZjY0XHU3''@;'; put 'put ''M2E3XHU4MGU0XHU4ZDA3XHVmOWQ3XHU5MjE3XHU5NThmXHVmOWQ4XHVmOWQ5XHVmOWRhXHVmOWRiXHU4MDdmXHU2MjBlXHU3MDFjXHU3ZDY4XHU4NzhkXHVmOWRjXHU1N2EwXHU2MDY5XHU2MTQ3XHU2YmI3XHU4YWJlXHU5MjgwXHU5NmIxXHU0ZTU5XHU1NDFmXHU2ZGViXHU4NTJkXHU5Njcw''@;'; put 'put ''XHU5N2YzXHU5OGVlXHU2M2Q2XHU2Y2UzXHU5MDkxXHU1MWRkXHU2MWM5XHU4MWJhXHU5ZGY5XHU0ZjlkXHU1MDFhXHU1MTAwXHU1YjljXHU2MTBmXHU2MWZmXHU2NGVjXHU2OTA1XHU2YmM1XHU3NTkxXHU3N2UzXHU3ZmE5XHU4MjY0XHU4NThmXHU4N2ZiXHU4ODYzXHU4YWJjIl0sWyJlY2Ex''@;'; put 'put ''IiwiXHU4YjcwXHU5MWFiXHU0ZThjXHU0ZWU1XHU0ZjBhXHVmOWRkXHVmOWRlXHU1OTM3XHU1OWU4XHVmOWRmXHU1ZGYyXHU1ZjFiXHU1ZjViXHU2MDIxXHVmOWUwXHVmOWUxXHVmOWUyXHVmOWUzXHU3MjNlXHU3M2U1XHVmOWU0XHU3NTcwXHU3NWNkXHVmOWU1XHU3OWZiXHVmOWU2XHU4MDBj''@;'; put 'put ''XHU4MDMzXHU4MDg0XHU4MmUxXHU4MzUxXHVmOWU3XHVmOWU4XHU4Y2JkXHU4Y2IzXHU5MDg3XHVmOWU5XHVmOWVhXHU5OGY0XHU5OTBjXHVmOWViXHVmOWVjXHU3MDM3XHU3NmNhXHU3ZmNhXHU3ZmNjXHU3ZmZjXHU4YjFhXHU0ZWJhXHU0ZWMxXHU1MjAzXHU1MzcwXHVmOWVkXHU1NGJkXHU1''@;'; put 'put ''NmUwXHU1OWZiXHU1YmM1XHU1ZjE1XHU1ZmNkXHU2ZTZlXHVmOWVlXHVmOWVmXHU3ZDZhXHU4MzM1XHVmOWYwXHU4NjkzXHU4YThkXHVmOWYxXHU5NzZkXHU5Nzc3XHVmOWYyXHVmOWYzXHU0ZTAwXHU0ZjVhXHU0ZjdlXHU1OGY5XHU2NWU1XHU2ZWEyXHU5MDM4XHU5M2IwXHU5OWI5XHU0ZWZi''@;'; put 'put ''XHU1OGVjXHU1OThhXHU1OWQ5XHU2MDQxXHVmOWY0XHVmOWY1XHU3YTE0XHVmOWY2XHU4MzRmXHU4Y2MzXHU1MTY1XHU1MzQ0Il0sWyJlZGExIiwiXHVmOWY3XHVmOWY4XHVmOWY5XHU0ZWNkXHU1MjY5XHU1YjU1XHU4MmJmXHU0ZWQ0XHU1MjNhXHU1NGE4XHU1OWM5XHU1OWZmXHU1YjUwXHU1''@;'; put 'put ''YjU3XHU1YjVjXHU2MDYzXHU2MTQ4XHU2ZWNiXHU3MDk5XHU3MTZlXHU3Mzg2XHU3NGY3XHU3NWI1XHU3OGMxXHU3ZDJiXHU4MDA1XHU4MWVhXHU4MzI4XHU4NTE3XHU4NWM5XHU4YWVlXHU4Y2M3XHU5NmNjXHU0ZjVjXHU1MmZhXHU1NmJjXHU2NWFiXHU2NjI4XHU3MDdjXHU3MGI4XHU3MjM1''@;'; put 'put ''XHU3ZGJkXHU4MjhkXHU5MTRjXHU5NmMwXHU5ZDcyXHU1YjcxXHU2OGU3XHU2Yjk4XHU2ZjdhXHU3NmRlXHU1YzkxXHU2NmFiXHU2ZjViXHU3YmI0XHU3YzJhXHU4ODM2XHU5NmRjXHU0ZTA4XHU0ZWQ3XHU1MzIwXHU1ODM0XHU1OGJiXHU1OGVmXHU1OTZjXHU1YzA3XHU1ZTMzXHU1ZTg0XHU1''@;'; put 'put ''ZjM1XHU2MzhjXHU2NmIyXHU2NzU2XHU2YTFmXHU2YWEzXHU2YjBjXHU2ZjNmXHU3MjQ2XHVmOWZhXHU3MzUwXHU3NDhiXHU3YWUwXHU3Y2E3XHU4MTc4XHU4MWRmXHU4MWU3XHU4MzhhXHU4NDZjXHU4NTIzXHU4NTk0XHU4NWNmXHU4OGRkXHU4ZDEzXHU5MWFjXHU5NTc3Il0sWyJlZWExIiwi''@;'; put 'put ''XHU5NjljXHU1MThkXHU1NGM5XHU1NzI4XHU1YmIwXHU2MjRkXHU2NzUwXHU2ODNkXHU2ODkzXHU2ZTNkXHU2ZWQzXHU3MDdkXHU3ZTIxXHU4OGMxXHU4Y2ExXHU4ZjA5XHU5ZjRiXHU5ZjRlXHU3MjJkXHU3YjhmXHU4YWNkXHU5MzFhXHU0ZjQ3XHU0ZjRlXHU1MTMyXHU1NDgwXHU1OWQwXHU1''@;'; put 'put ''ZTk1XHU2MmI1XHU2Nzc1XHU2OTZlXHU2YTE3XHU2Y2FlXHU2ZTFhXHU3MmQ5XHU3MzJhXHU3NWJkXHU3YmI4XHU3ZDM1XHU4MmU3XHU4M2Y5XHU4NDU3XHU4NWY3XHU4YTViXHU4Y2FmXHU4ZTg3XHU5MDE5XHU5MGI4XHU5NmNlXHU5ZjVmXHU1MmUzXHU1NDBhXHU1YWUxXHU1YmMyXHU2NDU4''@;'; put 'put ''XHU2NTc1XHU2ZWY0XHU3MmM0XHVmOWZiXHU3Njg0XHU3YTRkXHU3YjFiXHU3YzRkXHU3ZTNlXHU3ZmRmXHU4MzdiXHU4YjJiXHU4Y2NhXHU4ZDY0XHU4ZGUxXHU4ZTVmXHU4ZmVhXHU4ZmY5XHU5MDY5XHU5M2QxXHU0ZjQzXHU0ZjdhXHU1MGIzXHU1MTY4XHU1MTc4XHU1MjRkXHU1MjZhXHU1''@;'; put 'put ''ODYxXHU1ODdjXHU1OTYwXHU1YzA4XHU1YzU1XHU1ZWRiXHU2MDliXHU2MjMwXHU2ODEzXHU2YmJmXHU2YzA4XHU2ZmIxIl0sWyJlZmExIiwiXHU3MTRlXHU3NDIwXHU3NTMwXHU3NTM4XHU3NTUxXHU3NjcyXHU3YjRjXHU3YjhiXHU3YmFkXHU3YmM2XHU3ZThmXHU4YTZlXHU4ZjNlXHU4ZjQ5''@;'; put 'put ''XHU5MjNmXHU5MjkzXHU5MzIyXHU5NDJiXHU5NmZiXHU5ODVhXHU5ODZiXHU5OTFlXHU1MjA3XHU2MjJhXHU2Mjk4XHU2ZDU5XHU3NjY0XHU3YWNhXHU3YmMwXHU3ZDc2XHU1MzYwXHU1Y2JlXHU1ZTk3XHU2ZjM4XHU3MGI5XHU3Yzk4XHU5NzExXHU5YjhlXHU5ZWRlXHU2M2E1XHU2NDdhXHU4''@;'; put 'put ''Nzc2XHU0ZTAxXHU0ZTk1XHU0ZWFkXHU1MDVjXHU1MDc1XHU1NDQ4XHU1OWMzXHU1YjlhXHU1ZTQwXHU1ZWFkXHU1ZWY3XHU1ZjgxXHU2MGM1XHU2MzNhXHU2NTNmXHU2NTc0XHU2NWNjXHU2Njc2XHU2Njc4XHU2N2ZlXHU2OTY4XHU2YTg5XHU2YjYzXHU2YzQwXHU2ZGMwXHU2ZGU4XHU2ZTFm''@;'; put 'put ''XHU2ZTVlXHU3MDFlXHU3MGExXHU3MzhlXHU3M2ZkXHU3NTNhXHU3NzViXHU3ODg3XHU3OThlXHU3YTBiXHU3YTdkXHU3Y2JlXHU3ZDhlXHU4MjQ3XHU4YTAyXHU4YWVhXHU4YzllXHU5MTJkXHU5MTRhXHU5MWQ4XHU5MjY2XHU5MmNjXHU5MzIwXHU5NzA2XHU5NzU2Il0sWyJmMGExIiwiXHU5''@;'; put 'put ''NzVjXHU5ODAyXHU5ZjBlXHU1MjM2XHU1MjkxXHU1NTdjXHU1ODI0XHU1ZTFkXHU1ZjFmXHU2MDhjXHU2M2QwXHU2OGFmXHU2ZmRmXHU3OTZkXHU3YjJjXHU4MWNkXHU4NWJhXHU4OGZkXHU4YWY4XHU4ZTQ0XHU5MThkXHU5NjY0XHU5NjliXHU5NzNkXHU5ODRjXHU5ZjRhXHU0ZmNlXHU1MTQ2''@;'; put 'put ''XHU1MWNiXHU1MmE5XHU1NjMyXHU1ZjE0XHU1ZjZiXHU2M2FhXHU2NGNkXHU2NWU5XHU2NjQxXHU2NmZhXHU2NmY5XHU2NzFkXHU2ODlkXHU2OGQ3XHU2OWZkXHU2ZjE1XHU2ZjZlXHU3MTY3XHU3MWU1XHU3MjJhXHU3NGFhXHU3NzNhXHU3OTU2XHU3OTVhXHU3OWRmXHU3YTIwXHU3YTk1XHU3''@;'; put 'put ''Yzk3XHU3Y2RmXHU3ZDQ0XHU3ZTcwXHU4MDg3XHU4NWZiXHU4NmE0XHU4YTU0XHU4YWJmXHU4ZDk5XHU4ZTgxXHU5MDIwXHU5MDZkXHU5MWUzXHU5NjNiXHU5NmQ1XHU5Y2U1XHU2NWNmXHU3YzA3XHU4ZGIzXHU5M2MzXHU1YjU4XHU1YzBhXHU1MzUyXHU2MmQ5XHU3MzFkXHU1MDI3XHU1Yjk3''@;'; put 'put ''XHU1ZjllXHU2MGIwXHU2MTZiXHU2OGQ1XHU2ZGQ5XHU3NDJlXHU3YTJlXHU3ZDQyXHU3ZDljXHU3ZTMxXHU4MTZiIl0sWyJmMWExIiwiXHU4ZTJhXHU4ZTM1XHU5MzdlXHU5NDE4XHU0ZjUwXHU1NzUwXHU1ZGU2XHU1ZWE3XHU2MzJiXHU3ZjZhXHU0ZTNiXHU0ZjRmXHU0ZjhmXHU1MDVhXHU1''@;'; put 'put ''OWRkXHU4MGM0XHU1NDZhXHU1NDY4XHU1NWZlXHU1OTRmXHU1Yjk5XHU1ZGRlXHU1ZWRhXHU2NjVkXHU2NzMxXHU2N2YxXHU2ODJhXHU2Y2U4XHU2ZDMyXHU2ZTRhXHU2ZjhkXHU3MGI3XHU3M2UwXHU3NTg3XHU3YzRjXHU3ZDAyXHU3ZDJjXHU3ZGEyXHU4MjFmXHU4NmRiXHU4YTNiXHU4YTg1''@;'; put 'put ''XHU4ZDcwXHU4ZThhXHU4ZjMzXHU5MDMxXHU5MTRlXHU5MTUyXHU5NDQ0XHU5OWQwXHU3YWY5XHU3Y2E1XHU0ZmNhXHU1MTAxXHU1MWM2XHU1N2M4XHU1YmVmXHU1Y2ZiXHU2NjU5XHU2YTNkXHU2ZDVhXHU2ZTk2XHU2ZmVjXHU3MTBjXHU3NTZmXHU3YWUzXHU4ODIyXHU5MDIxXHU5MDc1XHU5''@;'; put 'put ''NmNiXHU5OWZmXHU4MzAxXHU0ZTJkXHU0ZWYyXHU4ODQ2XHU5MWNkXHU1MzdkXHU2YWRiXHU2OTZiXHU2YzQxXHU4NDdhXHU1ODllXHU2MThlXHU2NmZlXHU2MmVmXHU3MGRkXHU3NTExXHU3NWM3XHU3ZTUyXHU4NGI4XHU4YjQ5XHU4ZDA4XHU0ZTRiXHU1M2VhIl0sWyJmMmExIiwiXHU1NGFi''@;'; put 'put ''XHU1NzMwXHU1NzQwXHU1ZmQ3XHU2MzAxXHU2MzA3XHU2NDZmXHU2NTJmXHU2NWU4XHU2NjdhXHU2NzlkXHU2N2IzXHU2YjYyXHU2YzYwXHU2YzlhXHU2ZjJjXHU3N2U1XHU3ODI1XHU3OTQ5XHU3OTU3XHU3ZDE5XHU4MGEyXHU4MTAyXHU4MWYzXHU4MjlkXHU4MmI3XHU4NzE4XHU4YThjXHVm''@;'; put 'put ''OWZjXHU4ZDA0XHU4ZGJlXHU5MDcyXHU3NmY0XHU3YTE5XHU3YTM3XHU3ZTU0XHU4MDc3XHU1NTA3XHU1NWQ0XHU1ODc1XHU2MzJmXHU2NDIyXHU2NjQ5XHU2NjRiXHU2ODZkXHU2OTliXHU2Yjg0XHU2ZDI1XHU2ZWIxXHU3M2NkXHU3NDY4XHU3NGExXHU3NTViXHU3NWI5XHU3NmUxXHU3NzFl''@;'; put 'put ''XHU3NzhiXHU3OWU2XHU3ZTA5XHU3ZTFkXHU4MWZiXHU4NTJmXHU4ODk3XHU4YTNhXHU4Y2QxXHU4ZWViXHU4ZmIwXHU5MDMyXHU5M2FkXHU5NjYzXHU5NjczXHU5NzA3XHU0Zjg0XHU1M2YxXHU1OWVhXHU1YWM5XHU1ZTE5XHU2ODRlXHU3NGM2XHU3NWJlXHU3OWU5XHU3YTkyXHU4MWEzXHU4''@;'; put 'put ''NmVkXHU4Y2VhXHU4ZGNjXHU4ZmVkXHU2NTlmXHU2NzE1XHVmOWZkXHU1N2Y3XHU2ZjU3XHU3ZGRkXHU4ZjJmIl0sWyJmM2ExIiwiXHU5M2Y2XHU5NmM2XHU1ZmI1XHU2MWYyXHU2Zjg0XHU0ZTE0XHU0Zjk4XHU1MDFmXHU1M2M5XHU1NWRmXHU1ZDZmXHU1ZGVlXHU2YjIxXHU2YjY0XHU3OGNi''@;'; put 'put ''XHU3YjlhXHVmOWZlXHU4ZTQ5XHU4ZWNhXHU5MDZlXHU2MzQ5XHU2NDNlXHU3NzQwXHU3YTg0XHU5MzJmXHU5NDdmXHU5ZjZhXHU2NGIwXHU2ZmFmXHU3MWU2XHU3NGE4XHU3NGRhXHU3YWM0XHU3YzEyXHU3ZTgyXHU3Y2IyXHU3ZTk4XHU4YjlhXHU4ZDBhXHU5NDdkXHU5OTEwXHU5OTRjXHU1''@;'; put 'put ''MjM5XHU1YmRmXHU2NGU2XHU2NzJkXHU3ZDJlXHU1MGVkXHU1M2MzXHU1ODc5XHU2MTU4XHU2MTU5XHU2MWZhXHU2NWFjXHU3YWQ5XHU4YjkyXHU4Yjk2XHU1MDA5XHU1MDIxXHU1Mjc1XHU1NTMxXHU1YTNjXHU1ZWUwXHU1ZjcwXHU2MTM0XHU2NTVlXHU2NjBjXHU2NjM2XHU2NmEyXHU2OWNk''@;'; put 'put ''XHU2ZWM0XHU2ZjMyXHU3MzE2XHU3NjIxXHU3YTkzXHU4MTM5XHU4MjU5XHU4M2Q2XHU4NGJjXHU1MGI1XHU1N2YwXHU1YmMwXHU1YmU4XHU1ZjY5XHU2M2ExXHU3ODI2XHU3ZGI1XHU4M2RjXHU4NTIxXHU5MWM3XHU5MWY1XHU1MThhXHU2N2Y1XHU3YjU2Il0sWyJmNGExIiwiXHU4Y2FjXHU1''@;'; put 'put ''MWM0XHU1OWJiXHU2MGJkXHU4NjU1XHU1MDFjXHVmOWZmXHU1MjU0XHU1YzNhXHU2MTdkXHU2MjFhXHU2MmQzXHU2NGYyXHU2NWE1XHU2ZWNjXHU3NjIwXHU4MTBhXHU4ZTYwXHU5NjVmXHU5NmJiXHU0ZWRmXHU1MzQzXHU1NTk4XHU1OTI5XHU1ZGRkXHU2NGM1XHU2Y2M5XHU2ZGZhXHU3Mzk0''@;'; put 'put ''XHU3YTdmXHU4MjFiXHU4NWE2XHU4Y2U0XHU4ZTEwXHU5MDc3XHU5MWU3XHU5NWUxXHU5NjIxXHU5N2M2XHU1MWY4XHU1NGYyXHU1NTg2XHU1ZmI5XHU2NGE0XHU2Zjg4XHU3ZGI0XHU4ZjFmXHU4ZjRkXHU5NDM1XHU1MGM5XHU1YzE2XHU2Y2JlXHU2ZGZiXHU3NTFiXHU3N2JiXHU3YzNkXHU3''@;'; put 'put ''YzY0XHU4YTc5XHU4YWMyXHU1ODFlXHU1OWJlXHU1ZTE2XHU2Mzc3XHU3MjUyXHU3NThhXHU3NzZiXHU4YWRjXHU4Y2JjXHU4ZjEyXHU1ZWYzXHU2Njc0XHU2ZGY4XHU4MDdkXHU4M2MxXHU4YWNiXHU5NzUxXHU5YmQ2XHVmYTAwXHU1MjQzXHU2NmZmXHU2ZDk1XHU2ZWVmXHU3ZGUwXHU4YWU2''@;'; put 'put ''XHU5MDJlXHU5MDVlXHU5YWQ0XHU1MjFkXHU1MjdmXHU1NGU4XHU2MTk0XHU2Mjg0XHU2MmRiXHU2OGEyIl0sWyJmNWExIiwiXHU2OTEyXHU2OTVhXHU2YTM1XHU3MDkyXHU3MTI2XHU3ODVkXHU3OTAxXHU3OTBlXHU3OWQyXHU3YTBkXHU4MDk2XHU4Mjc4XHU4MmQ1XHU4MzQ5XHU4NTQ5XHU4''@;'; put 'put ''YzgyXHU4ZDg1XHU5MTYyXHU5MThiXHU5MWFlXHU0ZmMzXHU1NmQxXHU3MWVkXHU3N2Q3XHU4NzAwXHU4OWY4XHU1YmY4XHU1ZmQ2XHU2NzUxXHU5MGE4XHU1M2UyXHU1ODVhXHU1YmY1XHU2MGE0XHU2MTgxXHU2NDYwXHU3ZTNkXHU4MDcwXHU4NTI1XHU5MjgzXHU2NGFlXHU1MGFjXHU1ZDE0''@;'; put 'put ''XHU2NzAwXHU1ODljXHU2MmJkXHU2M2E4XHU2OTBlXHU2OTc4XHU2YTFlXHU2ZTZiXHU3NmJhXHU3OWNiXHU4MmJiXHU4NDI5XHU4YWNmXHU4ZGE4XHU4ZmZkXHU5MTEyXHU5MTRiXHU5MTljXHU5MzEwXHU5MzE4XHU5MzlhXHU5NmRiXHU5YTM2XHU5YzBkXHU0ZTExXHU3NTVjXHU3OTVkXHU3''@;'; put 'put ''YWZhXHU3YjUxXHU3YmM5XHU3ZTJlXHU4NGM0XHU4ZTU5XHU4ZTc0XHU4ZWY4XHU5MDEwXHU2NjI1XHU2OTNmXHU3NDQzXHU1MWZhXHU2NzJlXHU5ZWRjXHU1MTQ1XHU1ZmUwXHU2Yzk2XHU4N2YyXHU4ODVkXHU4ODc3XHU2MGI0XHU4MWI1XHU4NDAzIl0sWyJmNmExIiwiXHU4ZDA1XHU1M2Q2''@;'; put 'put ''XHU1NDM5XHU1NjM0XHU1YTM2XHU1YzMxXHU3MDhhXHU3ZmUwXHU4MDVhXHU4MTA2XHU4MWVkXHU4ZGEzXHU5MTg5XHU5YTVmXHU5ZGYyXHU1MDc0XHU0ZWM0XHU1M2EwXHU2MGZiXHU2ZTJjXHU1YzY0XHU0Zjg4XHU1MDI0XHU1NWU0XHU1Y2Q5XHU1ZTVmXHU2MDY1XHU2ODk0XHU2Y2JiXHU2''@;'; put 'put ''ZGM0XHU3MWJlXHU3NWQ0XHU3NWY0XHU3NjYxXHU3YTFhXHU3YTQ5XHU3ZGM3XHU3ZGZiXHU3ZjZlXHU4MWY0XHU4NmE5XHU4ZjFjXHU5NmM5XHU5OWIzXHU5ZjUyXHU1MjQ3XHU1MmM1XHU5OGVkXHU4OWFhXHU0ZTAzXHU2N2QyXHU2ZjA2XHU0ZmI1XHU1YmUyXHU2Nzk1XHU2Yzg4XHU2ZDc4''@;'; put 'put ''XHU3NDFiXHU3ODI3XHU5MWRkXHU5MzdjXHU4N2M0XHU3OWU0XHU3YTMxXHU1ZmViXHU0ZWQ2XHU1NGE0XHU1NTNlXHU1OGFlXHU1OWE1XHU2MGYwXHU2MjUzXHU2MmQ2XHU2NzM2XHU2OTU1XHU4MjM1XHU5NjQwXHU5OWIxXHU5OWRkXHU1MDJjXHU1MzUzXHU1NTQ0XHU1NzdjXHVmYTAxXHU2''@;'; put 'put ''MjU4XHVmYTAyXHU2NGUyXHU2NjZiXHU2N2RkXHU2ZmMxXHU2ZmVmXHU3NDIyXHU3NDM4XHU4YTE3Il0sWyJmN2ExIiwiXHU5NDM4XHU1NDUxXHU1NjA2XHU1NzY2XHU1ZjQ4XHU2MTlhXHU2YjRlXHU3MDU4XHU3MGFkXHU3ZGJiXHU4YTk1XHU1OTZhXHU4MTJiXHU2M2EyXHU3NzA4XHU4MDNk''@;'; put 'put ''XHU4Y2FhXHU1ODU0XHU2NDJkXHU2OWJiXHU1Yjk1XHU1ZTExXHU2ZTZmXHVmYTAzXHU4NTY5XHU1MTRjXHU1M2YwXHU1OTJhXHU2MDIwXHU2MTRiXHU2Yjg2XHU2YzcwXHU2Y2YwXHU3YjFlXHU4MGNlXHU4MmQ0XHU4ZGM2XHU5MGIwXHU5OGIxXHVmYTA0XHU2NGM3XHU2ZmE0XHU2NDkxXHU2''@;'; put 'put ''NTA0XHU1MTRlXHU1NDEwXHU1NzFmXHU4YTBlXHU2MTVmXHU2ODc2XHVmYTA1XHU3NWRiXHU3YjUyXHU3ZDcxXHU5MDFhXHU1ODA2XHU2OWNjXHU4MTdmXHU4OTJhXHU5MDAwXHU5ODM5XHU1MDc4XHU1OTU3XHU1OWFjXHU2Mjk1XHU5MDBmXHU5YjJhXHU2MTVkXHU3Mjc5XHU5NWQ2XHU1NzYx''@;'; put 'put ''XHU1YTQ2XHU1ZGY0XHU2MjhhXHU2NGFkXHU2NGZhXHU2Nzc3XHU2Y2UyXHU2ZDNlXHU3MjJjXHU3NDM2XHU3ODM0XHU3Zjc3XHU4MmFkXHU4ZGRiXHU5ODE3XHU1MjI0XHU1NzQyXHU2NzdmXHU3MjQ4XHU3NGUzXHU4Y2E5XHU4ZmE2XHU5MjExIl0sWyJmOGExIiwiXHU5NjJhXHU1MTZiXHU1''@;'; put 'put ''M2VkXHU2MzRjXHU0ZjY5XHU1NTA0XHU2MDk2XHU2NTU3XHU2YzliXHU2ZDdmXHU3MjRjXHU3MmZkXHU3YTE3XHU4OTg3XHU4YzlkXHU1ZjZkXHU2ZjhlXHU3MGY5XHU4MWE4XHU2MTBlXHU0ZmJmXHU1MDRmXHU2MjQxXHU3MjQ3XHU3YmM3XHU3ZGU4XHU3ZmU5XHU5MDRkXHU5N2FkXHU5YTE5''@;'; put 'put ''XHU4Y2I2XHU1NzZhXHU1ZTczXHU2N2IwXHU4NDBkXHU4YTU1XHU1NDIwXHU1YjE2XHU1ZTYzXHU1ZWUyXHU1ZjBhXHU2NTgzXHU4MGJhXHU4NTNkXHU5NTg5XHU5NjViXHU0ZjQ4XHU1MzA1XHU1MzBkXHU1MzBmXHU1NDg2XHU1NGZhXHU1NzAzXHU1ZTAzXHU2MDE2XHU2MjliXHU2MmIxXHU2''@;'; put 'put ''MzU1XHVmYTA2XHU2Y2UxXHU2ZDY2XHU3NWIxXHU3ODMyXHU4MGRlXHU4MTJmXHU4MmRlXHU4NDYxXHU4NGIyXHU4ODhkXHU4OTEyXHU5MDBiXHU5MmVhXHU5OGZkXHU5YjkxXHU1ZTQ1XHU2NmI0XHU2NmRkXHU3MDExXHU3MjA2XHVmYTA3XHU0ZmY1XHU1MjdkXHU1ZjZhXHU2MTUzXHU2NzUz''@;'; put 'put ''XHU2YTE5XHU2ZjAyXHU3NGUyXHU3OTY4XHU4ODY4XHU4Yzc5XHU5OGM3XHU5OGM0XHU5YTQzIl0sWyJmOWExIiwiXHU1NGMxXHU3YTFmXHU2OTUzXHU4YWY3XHU4YzRhXHU5OGE4XHU5OWFlXHU1ZjdjXHU2MmFiXHU3NWIyXHU3NmFlXHU4OGFiXHU5MDdmXHU5NjQyXHU1MzM5XHU1ZjNjXHU1''@;'; put 'put ''ZmM1XHU2Y2NjXHU3M2NjXHU3NTYyXHU3NThiXHU3YjQ2XHU4MmZlXHU5OTlkXHU0ZTRmXHU5MDNjXHU0ZTBiXHU0ZjU1XHU1M2E2XHU1OTBmXHU1ZWM4XHU2NjMwXHU2Y2IzXHU3NDU1XHU4Mzc3XHU4NzY2XHU4Y2MwXHU5MDUwXHU5NzFlXHU5YzE1XHU1OGQxXHU1Yjc4XHU4NjUwXHU4YjE0''@;'; put 'put ''XHU5ZGI0XHU1YmQyXHU2MDY4XHU2MDhkXHU2NWYxXHU2YzU3XHU2ZjIyXHU2ZmEzXHU3MDFhXHU3ZjU1XHU3ZmYwXHU5NTkxXHU5NTkyXHU5NjUwXHU5N2QzXHU1MjcyXHU4ZjQ0XHU1MWZkXHU1NDJiXHU1NGI4XHU1NTYzXHU1NThhXHU2YWJiXHU2ZGI1XHU3ZGQ4XHU4MjY2XHU5MjljXHU5''@;'; put 'put ''Njc3XHU5ZTc5XHU1NDA4XHU1NGM4XHU3NmQyXHU4NmU0XHU5NWE0XHU5NWQ0XHU5NjVjXHU0ZWEyXHU0ZjA5XHU1OWVlXHU1YWU2XHU1ZGY3XHU2MDUyXHU2Mjk3XHU2NzZkXHU2ODQxXHU2Yzg2XHU2ZTJmXHU3ZjM4XHU4MDliXHU4MjJhIl0sWyJmYWExIiwiXHVmYTA4XHVmYTA5XHU5ODA1''@;'; put 'put ''XHU0ZWE1XHU1MDU1XHU1NGIzXHU1NzkzXHU1OTVhXHU1YjY5XHU1YmIzXHU2MWM4XHU2OTc3XHU2ZDc3XHU3MDIzXHU4N2Y5XHU4OWUzXHU4YTcyXHU4YWU3XHU5MDgyXHU5OWVkXHU5YWI4XHU1MmJlXHU2ODM4XHU1MDE2XHU1ZTc4XHU2NzRmXHU4MzQ3XHU4ODRjXHU0ZWFiXHU1NDExXHU1''@;'; put 'put ''NmFlXHU3M2U2XHU5MTE1XHU5N2ZmXHU5OTA5XHU5OTU3XHU5OTk5XHU1NjUzXHU1ODlmXHU4NjViXHU4YTMxXHU2MWIyXHU2YWY2XHU3MzdiXHU4ZWQyXHU2YjQ3XHU5NmFhXHU5YTU3XHU1OTU1XHU3MjAwXHU4ZDZiXHU5NzY5XHU0ZmQ0XHU1Y2Y0XHU1ZjI2XHU2MWY4XHU2NjViXHU2Y2Vi''@;'; put 'put ''XHU3MGFiXHU3Mzg0XHU3M2I5XHU3M2ZlXHU3NzI5XHU3NzRkXHU3ZDQzXHU3ZDYyXHU3ZTIzXHU4MjM3XHU4ODUyXHVmYTBhXHU4Y2UyXHU5MjQ5XHU5ODZmXHU1YjUxXHU3YTc0XHU4ODQwXHU5ODAxXHU1YWNjXHU0ZmUwXHU1MzU0XHU1OTNlXHU1Y2ZkXHU2MzNlXHU2ZDc5XHU3MmY5XHU4''@;'; put 'put ''MTA1XHU4MTA3XHU4M2EyXHU5MmNmXHU5ODMwXHU0ZWE4XHU1MTQ0XHU1MjExXHU1NzhiIl0sWyJmYmExIiwiXHU1ZjYyXHU2Y2MyXHU2ZWNlXHU3MDA1XHU3MDUwXHU3MGFmXHU3MTkyXHU3M2U5XHU3NDY5XHU4MzRhXHU4N2EyXHU4ODYxXHU5MDA4XHU5MGEyXHU5M2EzXHU5OWE4XHU1MTZl''@;'; put 'put ''XHU1ZjU3XHU2MGUwXHU2MTY3XHU2NmIzXHU4NTU5XHU4ZTRhXHU5MWFmXHU5NzhiXHU0ZTRlXHU0ZTkyXHU1NDdjXHU1OGQ1XHU1OGZhXHU1OTdkXHU1Y2I1XHU1ZjI3XHU2MjM2XHU2MjQ4XHU2NjBhXHU2NjY3XHU2YmViXHU2ZDY5XHU2ZGNmXHU2ZTU2XHU2ZWY4XHU2Zjk0XHU2ZmUwXHU2''@;'; put 'put ''ZmU5XHU3MDVkXHU3MmQwXHU3NDI1XHU3NDVhXHU3NGUwXHU3NjkzXHU3OTVjXHU3Y2NhXHU3ZTFlXHU4MGUxXHU4MmE2XHU4NDZiXHU4NGJmXHU4NjRlXHU4NjVmXHU4Nzc0XHU4Yjc3XHU4YzZhXHU5M2FjXHU5ODAwXHU5ODY1XHU2MGQxXHU2MjE2XHU5MTc3XHU1YTVhXHU2NjBmXHU2ZGY3''@;'; put 'put ''XHU2ZTNlXHU3NDNmXHU5YjQyXHU1ZmZkXHU2MGRhXHU3YjBmXHU1NGM0XHU1ZjE4XHU2YzVlXHU2Y2QzXHU2ZDJhXHU3MGQ4XHU3ZDA1XHU4Njc5XHU4YTBjXHU5ZDNiXHU1MzE2XHU1NDhjXHU1YjA1XHU2YTNhXHU3MDZiXHU3NTc1Il0sWyJmY2ExIiwiXHU3OThkXHU3OWJlXHU4MmIxXHU4''@;'; put 'put ''M2VmXHU4YTcxXHU4YjQxXHU4Y2E4XHU5Nzc0XHVmYTBiXHU2NGY0XHU2NTJiXHU3OGJhXHU3OGJiXHU3YTZiXHU0ZTM4XHU1NTlhXHU1OTUwXHU1YmE2XHU1ZTdiXHU2MGEzXHU2M2RiXHU2YjYxXHU2NjY1XHU2ODUzXHU2ZTE5XHU3MTY1XHU3NGIwXHU3ZDA4XHU5MDg0XHU5YTY5XHU5YzI1''@;'; put 'put ''XHU2ZDNiXHU2ZWQxXHU3MzNlXHU4YzQxXHU5NWNhXHU1MWYwXHU1ZTRjXHU1ZmE4XHU2MDRkXHU2MGY2XHU2MTMwXHU2MTRjXHU2NjQzXHU2NjQ0XHU2OWE1XHU2Y2MxXHU2ZTVmXHU2ZWM5XHU2ZjYyXHU3MTRjXHU3NDljXHU3Njg3XHU3YmMxXHU3YzI3XHU4MzUyXHU4NzU3XHU5MDUxXHU5''@;'; put 'put ''NjhkXHU5ZWMzXHU1MzJmXHU1NmRlXHU1ZWZiXHU1ZjhhXHU2MDYyXHU2MDk0XHU2MWY3XHU2NjY2XHU2NzAzXHU2YTljXHU2ZGVlXHU2ZmFlXHU3MDcwXHU3MzZhXHU3ZTZhXHU4MWJlXHU4MzM0XHU4NmQ0XHU4YWE4XHU4Y2M0XHU1MjgzXHU3MzcyXHU1Yjk2XHU2YTZiXHU5NDA0XHU1NGVl''@;'; put 'put ''XHU1Njg2XHU1YjVkXHU2NTQ4XHU2NTg1XHU2NmM5XHU2ODlmXHU2ZDhkXHU2ZGM2Il0sWyJmZGExIiwiXHU3MjNiXHU4MGI0XHU5MTc1XHU5YTRkXHU0ZmFmXHU1MDE5XHU1MzlhXHU1NDBlXHU1NDNjXHU1NTg5XHU1NWM1XHU1ZTNmXHU1ZjhjXHU2NzNkXHU3MTY2XHU3M2RkXHU5MDA1XHU1''@;'; put 'put ''MmRiXHU1MmYzXHU1ODY0XHU1OGNlXHU3MTA0XHU3MThmXHU3MWZiXHU4NWIwXHU4YTEzXHU2Njg4XHU4NWE4XHU1NWE3XHU2Njg0XHU3MTRhXHU4NDMxXHU1MzQ5XHU1NTk5XHU2YmMxXHU1ZjU5XHU1ZmJkXHU2M2VlXHU2Njg5XHU3MTQ3XHU4YWYxXHU4ZjFkXHU5ZWJlXHU0ZjExXHU2NDNh''@;'; put 'put ''XHU3MGNiXHU3NTY2XHU4NjY3XHU2MDY0XHU4YjRlXHU5ZGY4XHU1MTQ3XHU1MWY2XHU1MzA4XHU2ZDM2XHU4MGY4XHU5ZWQxXHU2NjE1XHU2YjIzXHU3MDk4XHU3NWQ1XHU1NDAzXHU1Yzc5XHU3ZDA3XHU4YTE2XHU2YjIwXHU2YjNkXHU2YjQ2XHU1NDM4XHU2MDcwXHU2ZDNkXHU3ZmQ1XHU4''@;'; put 'put ''MjA4XHU1MGQ2XHU1MWRlXHU1NTljXHU1NjZiXHU1NmNkXHU1OWVjXHU1YjA5XHU1ZTBjXHU2MTk5XHU2MTk4XHU2MjMxXHU2NjVlXHU2NmU2XHU3MTk5XHU3MWI5XHU3MWJhXHU3MmE3XHU3OWE3XHU3YTAwXHU3ZmIyXHU4YTcwIl1dJyl9LDcyMzI0OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4''@;'; put 'put ''cG9ydHM9SlNPTi5wYXJzZSgnW1siMCIsIlxcdTAwMDAiLDEyN10sWyJhMTQwIiwiXHUzMDAwXHVmZjBjXHUzMDAxXHUzMDAyXHVmZjBlXHUyMDI3XHVmZjFiXHVmZjFhXHVmZjFmXHVmZjAxXHVmZTMwXHUyMDI2XHUyMDI1XHVmZTUwXHVmZTUxXHVmZTUyXHhiN1x1ZmU1NFx1ZmU1NVx1ZmU1''@;'; put 'put ''Nlx1ZmU1N1x1ZmY1Y1x1MjAxM1x1ZmUzMVx1MjAxNFx1ZmUzM1x1MjU3NFx1ZmUzNFx1ZmU0Zlx1ZmYwOFx1ZmYwOVx1ZmUzNVx1ZmUzNlx1ZmY1Ylx1ZmY1ZFx1ZmUzN1x1ZmUzOFx1MzAxNFx1MzAxNVx1ZmUzOVx1ZmUzYVx1MzAxMFx1MzAxMVx1ZmUzYlx1ZmUzY1x1MzAwYVx1MzAwYlx1''@;'; put 'put ''ZmUzZFx1ZmUzZVx1MzAwOFx1MzAwOVx1ZmUzZlx1ZmU0MFx1MzAwY1x1MzAwZFx1ZmU0MVx1ZmU0Mlx1MzAwZVx1MzAwZlx1ZmU0M1x1ZmU0NFx1ZmU1OVx1ZmU1YSJdLFsiYTFhMSIsIlx1ZmU1Ylx1ZmU1Y1x1ZmU1ZFx1ZmU1ZVx1MjAxOFx1MjAxOVx1MjAxY1x1MjAxZFx1MzAxZFx1MzAx''@;'; put 'put ''ZVx1MjAzNVx1MjAzMlx1ZmYwM1x1ZmYwNlx1ZmYwYVx1MjAzYlx4YTdcdTMwMDNcdTI1Y2JcdTI1Y2ZcdTI1YjNcdTI1YjJcdTI1Y2VcdTI2MDZcdTI2MDVcdTI1YzdcdTI1YzZcdTI1YTFcdTI1YTBcdTI1YmRcdTI1YmNcdTMyYTNcdTIxMDVceGFmXHVmZmUzXHVmZjNmXHUwMmNkXHVmZTQ5''@;'; put 'put ''XHVmZTRhXHVmZTRkXHVmZTRlXHVmZTRiXHVmZTRjXHVmZTVmXHVmZTYwXHVmZTYxXHVmZjBiXHVmZjBkXHhkN1x4ZjdceGIxXHUyMjFhXHVmZjFjXHVmZjFlXHVmZjFkXHUyMjY2XHUyMjY3XHUyMjYwXHUyMjFlXHUyMjUyXHUyMjYxXHVmZTYyIiw0LCJcdWZmNWVcdTIyMjlcdTIyMmFcdTIy''@;'; put 'put ''YTVcdTIyMjBcdTIyMWZcdTIyYmZcdTMzZDJcdTMzZDFcdTIyMmJcdTIyMmVcdTIyMzVcdTIyMzRcdTI2NDBcdTI2NDJcdTIyOTVcdTIyOTlcdTIxOTFcdTIxOTNcdTIxOTBcdTIxOTJcdTIxOTZcdTIxOTdcdTIxOTlcdTIxOThcdTIyMjVcdTIyMjNcdWZmMGYiXSxbImEyNDAiLCJcdWZmM2Nc''@;'; put 'put ''dTIyMTVcdWZlNjhcdWZmMDRcdWZmZTVcdTMwMTJcdWZmZTBcdWZmZTFcdWZmMDVcdWZmMjBcdTIxMDNcdTIxMDlcdWZlNjlcdWZlNmFcdWZlNmJcdTMzZDVcdTMzOWNcdTMzOWRcdTMzOWVcdTMzY2VcdTMzYTFcdTMzOGVcdTMzOGZcdTMzYzRceGIwXHU1MTU5XHU1MTViXHU1MTVlXHU1MTVk''@;'; put 'put ''XHU1MTYxXHU1MTYzXHU1NWU3XHU3NGU5XHU3Y2NlXHUyNTgxIiw3LCJcdTI1OGZcdTI1OGVcdTI1OGRcdTI1OGNcdTI1OGJcdTI1OGFcdTI1ODlcdTI1M2NcdTI1MzRcdTI1MmNcdTI1MjRcdTI1MWNcdTI1OTRcdTI1MDBcdTI1MDJcdTI1OTVcdTI1MGNcdTI1MTBcdTI1MTRcdTI1MThcdTI1''@;'; put 'put ''NmQiXSxbImEyYTEiLCJcdTI1NmVcdTI1NzBcdTI1NmZcdTI1NTBcdTI1NWVcdTI1NmFcdTI1NjFcdTI1ZTJcdTI1ZTNcdTI1ZTVcdTI1ZTRcdTI1NzFcdTI1NzJcdTI1NzNcdWZmMTAiLDksIlx1MjE2MCIsOSwiXHUzMDIxIiw4LCJcdTUzNDFcdTUzNDRcdTUzNDVcdWZmMjEiLDI1LCJcdWZm''@;'; put 'put ''NDEiLDIxXSxbImEzNDAiLCJcdWZmNTdcdWZmNThcdWZmNTlcdWZmNWFcdTAzOTEiLDE2LCJcdTAzYTMiLDYsIlx1MDNiMSIsMTYsIlx1MDNjMyIsNiwiXHUzMTA1IiwxMF0sWyJhM2ExIiwiXHUzMTEwIiwyNSwiXHUwMmQ5XHUwMmM5XHUwMmNhXHUwMmM3XHUwMmNiIl0sWyJhM2UxIiwiXHUy''@;'; put 'put ''MGFjIl0sWyJhNDQwIiwiXHU0ZTAwXHU0ZTU5XHU0ZTAxXHU0ZTAzXHU0ZTQzXHU0ZTVkXHU0ZTg2XHU0ZThjXHU0ZWJhXHU1MTNmXHU1MTY1XHU1MTZiXHU1MWUwXHU1MjAwXHU1MjAxXHU1MjliXHU1MzE1XHU1MzQxXHU1MzVjXHU1M2M4XHU0ZTA5XHU0ZTBiXHU0ZTA4XHU0ZTBhXHU0ZTJi''@;'; put 'put ''XHU0ZTM4XHU1MWUxXHU0ZTQ1XHU0ZTQ4XHU0ZTVmXHU0ZTVlXHU0ZThlXHU0ZWExXHU1MTQwXHU1MjAzXHU1MmZhXHU1MzQzXHU1M2M5XHU1M2UzXHU1NzFmXHU1OGViXHU1OTE1XHU1OTI3XHU1OTczXHU1YjUwXHU1YjUxXHU1YjUzXHU1YmY4XHU1YzBmXHU1YzIyXHU1YzM4XHU1YzcxXHU1''@;'; put 'put ''ZGRkXHU1ZGU1XHU1ZGYxXHU1ZGYyXHU1ZGYzXHU1ZGZlXHU1ZTcyXHU1ZWZlXHU1ZjBiXHU1ZjEzXHU2MjRkIl0sWyJhNGExIiwiXHU0ZTExXHU0ZTEwXHU0ZTBkXHU0ZTJkXHU0ZTMwXHU0ZTM5XHU0ZTRiXHU1YzM5XHU0ZTg4XHU0ZTkxXHU0ZTk1XHU0ZTkyXHU0ZTk0XHU0ZWEyXHU0ZWMx''@;'; put 'put ''XHU0ZWMwXHU0ZWMzXHU0ZWM2XHU0ZWM3XHU0ZWNkXHU0ZWNhXHU0ZWNiXHU0ZWM0XHU1MTQzXHU1MTQxXHU1MTY3XHU1MTZkXHU1MTZlXHU1MTZjXHU1MTk3XHU1MWY2XHU1MjA2XHU1MjA3XHU1MjA4XHU1MmZiXHU1MmZlXHU1MmZmXHU1MzE2XHU1MzM5XHU1MzQ4XHU1MzQ3XHU1MzQ1XHU1''@;'; put 'put ''MzVlXHU1Mzg0XHU1M2NiXHU1M2NhXHU1M2NkXHU1OGVjXHU1OTI5XHU1OTJiXHU1OTJhXHU1OTJkXHU1YjU0XHU1YzExXHU1YzI0XHU1YzNhXHU1YzZmXHU1ZGY0XHU1ZTdiXHU1ZWZmXHU1ZjE0XHU1ZjE1XHU1ZmMzXHU2MjA4XHU2MjM2XHU2MjRiXHU2MjRlXHU2NTJmXHU2NTg3XHU2NTk3''@;'; put 'put ''XHU2NWE0XHU2NWI5XHU2NWU1XHU2NmYwXHU2NzA4XHU2NzI4XHU2YjIwXHU2YjYyXHU2Yjc5XHU2YmNiXHU2YmQ0XHU2YmRiXHU2YzBmXHU2YzM0XHU3MDZiXHU3MjJhXHU3MjM2XHU3MjNiXHU3MjQ3XHU3MjU5XHU3MjViXHU3MmFjXHU3MzhiXHU0ZTE5Il0sWyJhNTQwIiwiXHU0ZTE2XHU0''@;'; put 'put ''ZTE1XHU0ZTE0XHU0ZTE4XHU0ZTNiXHU0ZTRkXHU0ZTRmXHU0ZTRlXHU0ZWU1XHU0ZWQ4XHU0ZWQ0XHU0ZWQ1XHU0ZWQ2XHU0ZWQ3XHU0ZWUzXHU0ZWU0XHU0ZWQ5XHU0ZWRlXHU1MTQ1XHU1MTQ0XHU1MTg5XHU1MThhXHU1MWFjXHU1MWY5XHU1MWZhXHU1MWY4XHU1MjBhXHU1MmEwXHU1Mjlm''@;'; put 'put ''XHU1MzA1XHU1MzA2XHU1MzE3XHU1MzFkXHU0ZWRmXHU1MzRhXHU1MzQ5XHU1MzYxXHU1MzYwXHU1MzZmXHU1MzZlXHU1M2JiXHU1M2VmXHU1M2U0XHU1M2YzXHU1M2VjXHU1M2VlXHU1M2U5XHU1M2U4XHU1M2ZjXHU1M2Y4XHU1M2Y1XHU1M2ViXHU1M2U2XHU1M2VhXHU1M2YyXHU1M2YxXHU1''@;'; put 'put ''M2YwXHU1M2U1XHU1M2VkXHU1M2ZiXHU1NmRiXHU1NmRhXHU1OTE2Il0sWyJhNWExIiwiXHU1OTJlXHU1OTMxXHU1OTc0XHU1OTc2XHU1YjU1XHU1YjgzXHU1YzNjXHU1ZGU4XHU1ZGU3XHU1ZGU2XHU1ZTAyXHU1ZTAzXHU1ZTczXHU1ZTdjXHU1ZjAxXHU1ZjE4XHU1ZjE3XHU1ZmM1XHU2MjBh''@;'; put 'put ''XHU2MjUzXHU2MjU0XHU2MjUyXHU2MjUxXHU2NWE1XHU2NWU2XHU2NzJlXHU2NzJjXHU2NzJhXHU2NzJiXHU2NzJkXHU2YjYzXHU2YmNkXHU2YzExXHU2YzEwXHU2YzM4XHU2YzQxXHU2YzQwXHU2YzNlXHU3MmFmXHU3Mzg0XHU3Mzg5XHU3NGRjXHU3NGU2XHU3NTE4XHU3NTFmXHU3NTI4XHU3''@;'; put 'put ''NTI5XHU3NTMwXHU3NTMxXHU3NTMyXHU3NTMzXHU3NThiXHU3NjdkXHU3NmFlXHU3NmJmXHU3NmVlXHU3N2RiXHU3N2UyXHU3N2YzXHU3OTNhXHU3OWJlXHU3YTc0XHU3YWNiXHU0ZTFlXHU0ZTFmXHU0ZTUyXHU0ZTUzXHU0ZTY5XHU0ZTk5XHU0ZWE0XHU0ZWE2XHU0ZWE1XHU0ZWZmXHU0ZjA5''@;'; put 'put ''XHU0ZjE5XHU0ZjBhXHU0ZjE1XHU0ZjBkXHU0ZjEwXHU0ZjExXHU0ZjBmXHU0ZWYyXHU0ZWY2XHU0ZWZiXHU0ZWYwXHU0ZWYzXHU0ZWZkXHU0ZjAxXHU0ZjBiXHU1MTQ5XHU1MTQ3XHU1MTQ2XHU1MTQ4XHU1MTY4Il0sWyJhNjQwIiwiXHU1MTcxXHU1MThkXHU1MWIwXHU1MjE3XHU1MjExXHU1''@;'; put 'put ''MjEyXHU1MjBlXHU1MjE2XHU1MmEzXHU1MzA4XHU1MzIxXHU1MzIwXHU1MzcwXHU1MzcxXHU1NDA5XHU1NDBmXHU1NDBjXHU1NDBhXHU1NDEwXHU1NDAxXHU1NDBiXHU1NDA0XHU1NDExXHU1NDBkXHU1NDA4XHU1NDAzXHU1NDBlXHU1NDA2XHU1NDEyXHU1NmUwXHU1NmRlXHU1NmRkXHU1NzMz''@;'; put 'put ''XHU1NzMwXHU1NzI4XHU1NzJkXHU1NzJjXHU1NzJmXHU1NzI5XHU1OTE5XHU1OTFhXHU1OTM3XHU1OTM4XHU1OTg0XHU1OTc4XHU1OTgzXHU1OTdkXHU1OTc5XHU1OTgyXHU1OTgxXHU1YjU3XHU1YjU4XHU1Yjg3XHU1Yjg4XHU1Yjg1XHU1Yjg5XHU1YmZhXHU1YzE2XHU1Yzc5XHU1ZGRlXHU1''@;'; put 'put ''ZTA2XHU1ZTc2XHU1ZTc0Il0sWyJhNmExIiwiXHU1ZjBmXHU1ZjFiXHU1ZmQ5XHU1ZmQ2XHU2MjBlXHU2MjBjXHU2MjBkXHU2MjEwXHU2MjYzXHU2MjViXHU2MjU4XHU2NTM2XHU2NWU5XHU2NWU4XHU2NWVjXHU2NWVkXHU2NmYyXHU2NmYzXHU2NzA5XHU2NzNkXHU2NzM0XHU2NzMxXHU2NzM1''@;'; put 'put ''XHU2YjIxXHU2YjY0XHU2YjdiXHU2YzE2XHU2YzVkXHU2YzU3XHU2YzU5XHU2YzVmXHU2YzYwXHU2YzUwXHU2YzU1XHU2YzYxXHU2YzViXHU2YzRkXHU2YzRlXHU3MDcwXHU3MjVmXHU3MjVkXHU3NjdlXHU3YWY5XHU3YzczXHU3Y2Y4XHU3ZjM2XHU3ZjhhXHU3ZmJkXHU4MDAxXHU4MDAzXHU4''@;'; put 'put ''MDBjXHU4MDEyXHU4MDMzXHU4MDdmXHU4MDg5XHU4MDhiXHU4MDhjXHU4MWUzXHU4MWVhXHU4MWYzXHU4MWZjXHU4MjBjXHU4MjFiXHU4MjFmXHU4MjZlXHU4MjcyXHU4MjdlXHU4NjZiXHU4ODQwXHU4ODRjXHU4ODYzXHU4OTdmXHU5NjIxXHU0ZTMyXHU0ZWE4XHU0ZjRkXHU0ZjRmXHU0ZjQ3''@;'; put 'put ''XHU0ZjU3XHU0ZjVlXHU0ZjM0XHU0ZjViXHU0ZjU1XHU0ZjMwXHU0ZjUwXHU0ZjUxXHU0ZjNkXHU0ZjNhXHU0ZjM4XHU0ZjQzXHU0ZjU0XHU0ZjNjXHU0ZjQ2XHU0ZjYzIl0sWyJhNzQwIiwiXHU0ZjVjXHU0ZjYwXHU0ZjJmXHU0ZjRlXHU0ZjM2XHU0ZjU5XHU0ZjVkXHU0ZjQ4XHU0ZjVhXHU1''@;'; put 'put ''MTRjXHU1MTRiXHU1MTRkXHU1MTc1XHU1MWI2XHU1MWI3XHU1MjI1XHU1MjI0XHU1MjI5XHU1MjJhXHU1MjI4XHU1MmFiXHU1MmE5XHU1MmFhXHU1MmFjXHU1MzIzXHU1MzczXHU1Mzc1XHU1NDFkXHU1NDJkXHU1NDFlXHU1NDNlXHU1NDI2XHU1NDRlXHU1NDI3XHU1NDQ2XHU1NDQzXHU1NDMz''@;'; put 'put ''XHU1NDQ4XHU1NDQyXHU1NDFiXHU1NDI5XHU1NDRhXHU1NDM5XHU1NDNiXHU1NDM4XHU1NDJlXHU1NDM1XHU1NDM2XHU1NDIwXHU1NDNjXHU1NDQwXHU1NDMxXHU1NDJiXHU1NDFmXHU1NDJjXHU1NmVhXHU1NmYwXHU1NmU0XHU1NmViXHU1NzRhXHU1NzUxXHU1NzQwXHU1NzRkIl0sWyJhN2Ex''@;'; put 'put ''IiwiXHU1NzQ3XHU1NzRlXHU1NzNlXHU1NzUwXHU1NzRmXHU1NzNiXHU1OGVmXHU1OTNlXHU1OTlkXHU1OTkyXHU1OWE4XHU1OTllXHU1OWEzXHU1OTk5XHU1OTk2XHU1OThkXHU1OWE0XHU1OTkzXHU1OThhXHU1OWE1XHU1YjVkXHU1YjVjXHU1YjVhXHU1YjViXHU1YjhjXHU1YjhiXHU1Yjhm''@;'; put 'put ''XHU1YzJjXHU1YzQwXHU1YzQxXHU1YzNmXHU1YzNlXHU1YzkwXHU1YzkxXHU1Yzk0XHU1YzhjXHU1ZGViXHU1ZTBjXHU1ZThmXHU1ZTg3XHU1ZThhXHU1ZWY3XHU1ZjA0XHU1ZjFmXHU1ZjY0XHU1ZjYyXHU1Zjc3XHU1Zjc5XHU1ZmQ4XHU1ZmNjXHU1ZmQ3XHU1ZmNkXHU1ZmYxXHU1ZmViXHU1''@;'; put 'put ''ZmY4XHU1ZmVhXHU2MjEyXHU2MjExXHU2Mjg0XHU2Mjk3XHU2Mjk2XHU2MjgwXHU2Mjc2XHU2Mjg5XHU2MjZkXHU2MjhhXHU2MjdjXHU2MjdlXHU2Mjc5XHU2MjczXHU2MjkyXHU2MjZmXHU2Mjk4XHU2MjZlXHU2Mjk1XHU2MjkzXHU2MjkxXHU2Mjg2XHU2NTM5XHU2NTNiXHU2NTM4XHU2NWYx''@;'; put 'put ''XHU2NmY0XHU2NzVmXHU2NzRlXHU2NzRmXHU2NzUwXHU2NzUxXHU2NzVjXHU2NzU2XHU2NzVlXHU2NzQ5XHU2NzQ2XHU2NzYwIl0sWyJhODQwIiwiXHU2NzUzXHU2NzU3XHU2YjY1XHU2YmNmXHU2YzQyXHU2YzVlXHU2Yzk5XHU2YzgxXHU2Yzg4XHU2Yzg5XHU2Yzg1XHU2YzliXHU2YzZhXHU2''@;'; put 'put ''YzdhXHU2YzkwXHU2YzcwXHU2YzhjXHU2YzY4XHU2Yzk2XHU2YzkyXHU2YzdkXHU2YzgzXHU2YzcyXHU2YzdlXHU2Yzc0XHU2Yzg2XHU2Yzc2XHU2YzhkXHU2Yzk0XHU2Yzk4XHU2YzgyXHU3MDc2XHU3MDdjXHU3MDdkXHU3MDc4XHU3MjYyXHU3MjYxXHU3MjYwXHU3MmM0XHU3MmMyXHU3Mzk2''@;'; put 'put ''XHU3NTJjXHU3NTJiXHU3NTM3XHU3NTM4XHU3NjgyXHU3NmVmXHU3N2UzXHU3OWMxXHU3OWMwXHU3OWJmXHU3YTc2XHU3Y2ZiXHU3ZjU1XHU4MDk2XHU4MDkzXHU4MDlkXHU4MDk4XHU4MDliXHU4MDlhXHU4MGIyXHU4MjZmXHU4MjkyIl0sWyJhOGExIiwiXHU4MjhiXHU4MjhkXHU4OThiXHU4''@;'; put 'put ''OWQyXHU4YTAwXHU4YzM3XHU4YzQ2XHU4YzU1XHU4YzlkXHU4ZDY0XHU4ZDcwXHU4ZGIzXHU4ZWFiXHU4ZWNhXHU4ZjliXHU4ZmIwXHU4ZmMyXHU4ZmM2XHU4ZmM1XHU4ZmM0XHU1ZGUxXHU5MDkxXHU5MGEyXHU5MGFhXHU5MGE2XHU5MGEzXHU5MTQ5XHU5MWM2XHU5MWNjXHU5NjMyXHU5NjJl''@;'; put 'put ''XHU5NjMxXHU5NjJhXHU5NjJjXHU0ZTI2XHU0ZTU2XHU0ZTczXHU0ZThiXHU0ZTliXHU0ZTllXHU0ZWFiXHU0ZWFjXHU0ZjZmXHU0ZjlkXHU0ZjhkXHU0ZjczXHU0ZjdmXHU0ZjZjXHU0ZjliXHU0ZjhiXHU0Zjg2XHU0ZjgzXHU0ZjcwXHU0Zjc1XHU0Zjg4XHU0ZjY5XHU0ZjdiXHU0Zjk2XHU0''@;'; put 'put ''ZjdlXHU0ZjhmXHU0ZjkxXHU0ZjdhXHU1MTU0XHU1MTUyXHU1MTU1XHU1MTY5XHU1MTc3XHU1MTc2XHU1MTc4XHU1MWJkXHU1MWZkXHU1MjNiXHU1MjM4XHU1MjM3XHU1MjNhXHU1MjMwXHU1MjJlXHU1MjM2XHU1MjQxXHU1MmJlXHU1MmJiXHU1MzUyXHU1MzU0XHU1MzUzXHU1MzUxXHU1MzY2''@;'; put 'put ''XHU1Mzc3XHU1Mzc4XHU1Mzc5XHU1M2Q2XHU1M2Q0XHU1M2Q3XHU1NDczXHU1NDc1Il0sWyJhOTQwIiwiXHU1NDk2XHU1NDc4XHU1NDk1XHU1NDgwXHU1NDdiXHU1NDc3XHU1NDg0XHU1NDkyXHU1NDg2XHU1NDdjXHU1NDkwXHU1NDcxXHU1NDc2XHU1NDhjXHU1NDlhXHU1NDYyXHU1NDY4XHU1''@;'; put 'put ''NDhiXHU1NDdkXHU1NDhlXHU1NmZhXHU1NzgzXHU1Nzc3XHU1NzZhXHU1NzY5XHU1NzYxXHU1NzY2XHU1NzY0XHU1NzdjXHU1OTFjXHU1OTQ5XHU1OTQ3XHU1OTQ4XHU1OTQ0XHU1OTU0XHU1OWJlXHU1OWJiXHU1OWQ0XHU1OWI5XHU1OWFlXHU1OWQxXHU1OWM2XHU1OWQwXHU1OWNkXHU1OWNi''@;'; put 'put ''XHU1OWQzXHU1OWNhXHU1OWFmXHU1OWIzXHU1OWQyXHU1OWM1XHU1YjVmXHU1YjY0XHU1YjYzXHU1Yjk3XHU1YjlhXHU1Yjk4XHU1YjljXHU1Yjk5XHU1YjliXHU1YzFhXHU1YzQ4XHU1YzQ1Il0sWyJhOWExIiwiXHU1YzQ2XHU1Y2I3XHU1Y2ExXHU1Y2I4XHU1Y2E5XHU1Y2FiXHU1Y2IxXHU1''@;'; put 'put ''Y2IzXHU1ZTE4XHU1ZTFhXHU1ZTE2XHU1ZTE1XHU1ZTFiXHU1ZTExXHU1ZTc4XHU1ZTlhXHU1ZTk3XHU1ZTljXHU1ZTk1XHU1ZTk2XHU1ZWY2XHU1ZjI2XHU1ZjI3XHU1ZjI5XHU1ZjgwXHU1ZjgxXHU1ZjdmXHU1ZjdjXHU1ZmRkXHU1ZmUwXHU1ZmZkXHU1ZmY1XHU1ZmZmXHU2MDBmXHU2MDE0''@;'; put 'put ''XHU2MDJmXHU2MDM1XHU2MDE2XHU2MDJhXHU2MDE1XHU2MDIxXHU2MDI3XHU2MDI5XHU2MDJiXHU2MDFiXHU2MjE2XHU2MjE1XHU2MjNmXHU2MjNlXHU2MjQwXHU2MjdmXHU2MmM5XHU2MmNjXHU2MmM0XHU2MmJmXHU2MmMyXHU2MmI5XHU2MmQyXHU2MmRiXHU2MmFiXHU2MmQzXHU2MmQ0XHU2''@;'; put 'put ''MmNiXHU2MmM4XHU2MmE4XHU2MmJkXHU2MmJjXHU2MmQwXHU2MmQ5XHU2MmM3XHU2MmNkXHU2MmI1XHU2MmRhXHU2MmIxXHU2MmQ4XHU2MmQ2XHU2MmQ3XHU2MmM2XHU2MmFjXHU2MmNlXHU2NTNlXHU2NWE3XHU2NWJjXHU2NWZhXHU2NjE0XHU2NjEzXHU2NjBjXHU2NjA2XHU2NjAyXHU2NjBl''@;'; put 'put ''XHU2NjAwXHU2NjBmXHU2NjE1XHU2NjBhIl0sWyJhYTQwIiwiXHU2NjA3XHU2NzBkXHU2NzBiXHU2NzZkXHU2NzhiXHU2Nzk1XHU2NzcxXHU2NzljXHU2NzczXHU2Nzc3XHU2Nzg3XHU2NzlkXHU2Nzk3XHU2NzZmXHU2NzcwXHU2NzdmXHU2Nzg5XHU2NzdlXHU2NzkwXHU2Nzc1XHU2NzlhXHU2''@;'; put 'put ''NzkzXHU2NzdjXHU2NzZhXHU2NzcyXHU2YjIzXHU2YjY2XHU2YjY3XHU2YjdmXHU2YzEzXHU2YzFiXHU2Y2UzXHU2Y2U4XHU2Y2YzXHU2Y2IxXHU2Y2NjXHU2Y2U1XHU2Y2IzXHU2Y2JkXHU2Y2JlXHU2Y2JjXHU2Y2UyXHU2Y2FiXHU2Y2Q1XHU2Y2QzXHU2Y2I4XHU2Y2M0XHU2Y2I5XHU2Y2Mx''@;'; put 'put ''XHU2Y2FlXHU2Y2Q3XHU2Y2M1XHU2Y2YxXHU2Y2JmXHU2Y2JiXHU2Y2UxXHU2Y2RiXHU2Y2NhXHU2Y2FjXHU2Y2VmXHU2Y2RjXHU2Y2Q2XHU2Y2UwIl0sWyJhYWExIiwiXHU3MDk1XHU3MDhlXHU3MDkyXHU3MDhhXHU3MDk5XHU3MjJjXHU3MjJkXHU3MjM4XHU3MjQ4XHU3MjY3XHU3MjY5XHU3''@;'; put 'put ''MmMwXHU3MmNlXHU3MmQ5XHU3MmQ3XHU3MmQwXHU3M2E5XHU3M2E4XHU3MzlmXHU3M2FiXHU3M2E1XHU3NTNkXHU3NTlkXHU3NTk5XHU3NTlhXHU3Njg0XHU3NmMyXHU3NmYyXHU3NmY0XHU3N2U1XHU3N2ZkXHU3OTNlXHU3OTQwXHU3OTQxXHU3OWM5XHU3OWM4XHU3YTdhXHU3YTc5XHU3YWZh''@;'; put 'put ''XHU3Y2ZlXHU3ZjU0XHU3ZjhjXHU3ZjhiXHU4MDA1XHU4MGJhXHU4MGE1XHU4MGEyXHU4MGIxXHU4MGExXHU4MGFiXHU4MGE5XHU4MGI0XHU4MGFhXHU4MGFmXHU4MWU1XHU4MWZlXHU4MjBkXHU4MmIzXHU4MjlkXHU4Mjk5XHU4MmFkXHU4MmJkXHU4MjlmXHU4MmI5XHU4MmIxXHU4MmFjXHU4''@;'; put 'put ''MmE1XHU4MmFmXHU4MmI4XHU4MmEzXHU4MmIwXHU4MmJlXHU4MmI3XHU4NjRlXHU4NjcxXHU1MjFkXHU4ODY4XHU4ZWNiXHU4ZmNlXHU4ZmQ0XHU4ZmQxXHU5MGI1XHU5MGI4XHU5MGIxXHU5MGI2XHU5MWM3XHU5MWQxXHU5NTc3XHU5NTgwXHU5NjFjXHU5NjQwXHU5NjNmXHU5NjNiXHU5NjQ0''@;'; put 'put ''Il0sWyJhYjQwIiwiXHU5NjQyXHU5NmI5XHU5NmU4XHU5NzUyXHU5NzVlXHU0ZTlmXHU0ZWFkXHU0ZWFlXHU0ZmUxXHU0ZmI1XHU0ZmFmXHU0ZmJmXHU0ZmUwXHU0ZmQxXHU0ZmNmXHU0ZmRkXHU0ZmMzXHU0ZmI2XHU0ZmQ4XHU0ZmRmXHU0ZmNhXHU0ZmQ3XHU0ZmFlXHU0ZmQwXHU0ZmM0XHU0''@;'; put 'put ''ZmMyXHU0ZmRhXHU0ZmNlXHU0ZmRlXHU0ZmI3XHU1MTU3XHU1MTkyXHU1MTkxXHU1MWEwXHU1MjRlXHU1MjQzXHU1MjRhXHU1MjRkXHU1MjRjXHU1MjRiXHU1MjQ3XHU1MmM3XHU1MmM5XHU1MmMzXHU1MmMxXHU1MzBkXHU1MzU3XHU1MzdiXHU1MzlhXHU1M2RiXHU1NGFjXHU1NGMwXHU1NGE4''@;'; put 'put ''XHU1NGNlXHU1NGM5XHU1NGI4XHU1NGE2XHU1NGIzXHU1NGM3XHU1NGMyXHU1NGJkXHU1NGFhXHU1NGMxIl0sWyJhYmExIiwiXHU1NGM0XHU1NGM4XHU1NGFmXHU1NGFiXHU1NGIxXHU1NGJiXHU1NGE5XHU1NGE3XHU1NGJmXHU1NmZmXHU1NzgyXHU1NzhiXHU1N2EwXHU1N2EzXHU1N2EyXHU1''@;'; put 'put ''N2NlXHU1N2FlXHU1NzkzXHU1OTU1XHU1OTUxXHU1OTRmXHU1OTRlXHU1OTUwXHU1OWRjXHU1OWQ4XHU1OWZmXHU1OWUzXHU1OWU4XHU1YTAzXHU1OWU1XHU1OWVhXHU1OWRhXHU1OWU2XHU1YTAxXHU1OWZiXHU1YjY5XHU1YmEzXHU1YmE2XHU1YmE0XHU1YmEyXHU1YmE1XHU1YzAxXHU1YzRl''@;'; put 'put ''XHU1YzRmXHU1YzRkXHU1YzRiXHU1Y2Q5XHU1Y2QyXHU1ZGY3XHU1ZTFkXHU1ZTI1XHU1ZTFmXHU1ZTdkXHU1ZWEwXHU1ZWE2XHU1ZWZhXHU1ZjA4XHU1ZjJkXHU1ZjY1XHU1Zjg4XHU1Zjg1XHU1ZjhhXHU1ZjhiXHU1Zjg3XHU1ZjhjXHU1Zjg5XHU2MDEyXHU2MDFkXHU2MDIwXHU2MDI1XHU2''@;'; put 'put ''MDBlXHU2MDI4XHU2MDRkXHU2MDcwXHU2MDY4XHU2MDYyXHU2MDQ2XHU2MDQzXHU2MDZjXHU2MDZiXHU2MDZhXHU2MDY0XHU2MjQxXHU2MmRjXHU2MzE2XHU2MzA5XHU2MmZjXHU2MmVkXHU2MzAxXHU2MmVlXHU2MmZkXHU2MzA3XHU2MmYxXHU2MmY3Il0sWyJhYzQwIiwiXHU2MmVmXHU2MmVj''@;'; put 'put ''XHU2MmZlXHU2MmY0XHU2MzExXHU2MzAyXHU2NTNmXHU2NTQ1XHU2NWFiXHU2NWJkXHU2NWUyXHU2NjI1XHU2NjJkXHU2NjIwXHU2NjI3XHU2NjJmXHU2NjFmXHU2NjI4XHU2NjMxXHU2NjI0XHU2NmY3XHU2N2ZmXHU2N2QzXHU2N2YxXHU2N2Q0XHU2N2QwXHU2N2VjXHU2N2I2XHU2N2FmXHU2''@;'; put 'put ''N2Y1XHU2N2U5XHU2N2VmXHU2N2M0XHU2N2QxXHU2N2I0XHU2N2RhXHU2N2U1XHU2N2I4XHU2N2NmXHU2N2RlXHU2N2YzXHU2N2IwXHU2N2Q5XHU2N2UyXHU2N2RkXHU2N2QyXHU2YjZhXHU2YjgzXHU2Yjg2XHU2YmI1XHU2YmQyXHU2YmQ3XHU2YzFmXHU2Y2M5XHU2ZDBiXHU2ZDMyXHU2ZDJh''@;'; put 'put ''XHU2ZDQxXHU2ZDI1XHU2ZDBjXHU2ZDMxXHU2ZDFlXHU2ZDE3Il0sWyJhY2ExIiwiXHU2ZDNiXHU2ZDNkXHU2ZDNlXHU2ZDM2XHU2ZDFiXHU2Y2Y1XHU2ZDM5XHU2ZDI3XHU2ZDM4XHU2ZDI5XHU2ZDJlXHU2ZDM1XHU2ZDBlXHU2ZDJiXHU3MGFiXHU3MGJhXHU3MGIzXHU3MGFjXHU3MGFmXHU3''@;'; put 'put ''MGFkXHU3MGI4XHU3MGFlXHU3MGE0XHU3MjMwXHU3MjcyXHU3MjZmXHU3Mjc0XHU3MmU5XHU3MmUwXHU3MmUxXHU3M2I3XHU3M2NhXHU3M2JiXHU3M2IyXHU3M2NkXHU3M2MwXHU3M2IzXHU3NTFhXHU3NTJkXHU3NTRmXHU3NTRjXHU3NTRlXHU3NTRiXHU3NWFiXHU3NWE0XHU3NWE1XHU3NWEy''@;'; put 'put ''XHU3NWEzXHU3Njc4XHU3Njg2XHU3Njg3XHU3Njg4XHU3NmM4XHU3NmM2XHU3NmMzXHU3NmM1XHU3NzAxXHU3NmY5XHU3NmY4XHU3NzA5XHU3NzBiXHU3NmZlXHU3NmZjXHU3NzA3XHU3N2RjXHU3ODAyXHU3ODE0XHU3ODBjXHU3ODBkXHU3OTQ2XHU3OTQ5XHU3OTQ4XHU3OTQ3XHU3OWI5XHU3''@;'; put 'put ''OWJhXHU3OWQxXHU3OWQyXHU3OWNiXHU3YTdmXHU3YTgxXHU3YWZmXHU3YWZkXHU3YzdkXHU3ZDAyXHU3ZDA1XHU3ZDAwXHU3ZDA5XHU3ZDA3XHU3ZDA0XHU3ZDA2XHU3ZjM4XHU3ZjhlXHU3ZmJmXHU4MDA0Il0sWyJhZDQwIiwiXHU4MDEwXHU4MDBkXHU4MDExXHU4MDM2XHU4MGQ2XHU4MGU1''@;'; put 'put ''XHU4MGRhXHU4MGMzXHU4MGM0XHU4MGNjXHU4MGUxXHU4MGRiXHU4MGNlXHU4MGRlXHU4MGU0XHU4MGRkXHU4MWY0XHU4MjIyXHU4MmU3XHU4MzAzXHU4MzA1XHU4MmUzXHU4MmRiXHU4MmU2XHU4MzA0XHU4MmU1XHU4MzAyXHU4MzA5XHU4MmQyXHU4MmQ3XHU4MmYxXHU4MzAxXHU4MmRjXHU4''@;'; put 'put ''MmQ0XHU4MmQxXHU4MmRlXHU4MmQzXHU4MmRmXHU4MmVmXHU4MzA2XHU4NjUwXHU4Njc5XHU4NjdiXHU4NjdhXHU4ODRkXHU4ODZiXHU4OTgxXHU4OWQ0XHU4YTA4XHU4YTAyXHU4YTAzXHU4YzllXHU4Y2EwXHU4ZDc0XHU4ZDczXHU4ZGI0XHU4ZWNkXHU4ZWNjXHU4ZmYwXHU4ZmU2XHU4ZmUy''@;'; put 'put ''XHU4ZmVhXHU4ZmU1Il0sWyJhZGExIiwiXHU4ZmVkXHU4ZmViXHU4ZmU0XHU4ZmU4XHU5MGNhXHU5MGNlXHU5MGMxXHU5MGMzXHU5MTRiXHU5MTRhXHU5MWNkXHU5NTgyXHU5NjUwXHU5NjRiXHU5NjRjXHU5NjRkXHU5NzYyXHU5NzY5XHU5N2NiXHU5N2VkXHU5N2YzXHU5ODAxXHU5OGE4XHU5''@;'; put 'put ''OGRiXHU5OGRmXHU5OTk2XHU5OTk5XHU0ZTU4XHU0ZWIzXHU1MDBjXHU1MDBkXHU1MDIzXHU0ZmVmXHU1MDI2XHU1MDI1XHU0ZmY4XHU1MDI5XHU1MDE2XHU1MDA2XHU1MDNjXHU1MDFmXHU1MDFhXHU1MDEyXHU1MDExXHU0ZmZhXHU1MDAwXHU1MDE0XHU1MDI4XHU0ZmYxXHU1MDIxXHU1MDBi''@;'; put 'put ''XHU1MDE5XHU1MDE4XHU0ZmYzXHU0ZmVlXHU1MDJkXHU1MDJhXHU0ZmZlXHU1MDJiXHU1MDA5XHU1MTdjXHU1MWE0XHU1MWE1XHU1MWEyXHU1MWNkXHU1MWNjXHU1MWM2XHU1MWNiXHU1MjU2XHU1MjVjXHU1MjU0XHU1MjViXHU1MjVkXHU1MzJhXHU1MzdmXHU1MzlmXHU1MzlkXHU1M2RmXHU1''@;'; put 'put ''NGU4XHU1NTEwXHU1NTAxXHU1NTM3XHU1NGZjXHU1NGU1XHU1NGYyXHU1NTA2XHU1NGZhXHU1NTE0XHU1NGU5XHU1NGVkXHU1NGUxXHU1NTA5XHU1NGVlXHU1NGVhIl0sWyJhZTQwIiwiXHU1NGU2XHU1NTI3XHU1NTA3XHU1NGZkXHU1NTBmXHU1NzAzXHU1NzA0XHU1N2MyXHU1N2Q0XHU1N2Ni''@;'; put 'put ''XHU1N2MzXHU1ODA5XHU1OTBmXHU1OTU3XHU1OTU4XHU1OTVhXHU1YTExXHU1YTE4XHU1YTFjXHU1YTFmXHU1YTFiXHU1YTEzXHU1OWVjXHU1YTIwXHU1YTIzXHU1YTI5XHU1YTI1XHU1YTBjXHU1YTA5XHU1YjZiXHU1YzU4XHU1YmIwXHU1YmIzXHU1YmI2XHU1YmI0XHU1YmFlXHU1YmI1XHU1''@;'; put 'put ''YmI5XHU1YmI4XHU1YzA0XHU1YzUxXHU1YzU1XHU1YzUwXHU1Y2VkXHU1Y2ZkXHU1Y2ZiXHU1Y2VhXHU1Y2U4XHU1Y2YwXHU1Y2Y2XHU1ZDAxXHU1Y2Y0XHU1ZGVlXHU1ZTJkXHU1ZTJiXHU1ZWFiXHU1ZWFkXHU1ZWE3XHU1ZjMxXHU1ZjkyXHU1ZjkxXHU1ZjkwXHU2MDU5Il0sWyJhZWExIiwi''@;'; put 'put ''XHU2MDYzXHU2MDY1XHU2MDUwXHU2MDU1XHU2MDZkXHU2MDY5XHU2MDZmXHU2MDg0XHU2MDlmXHU2MDlhXHU2MDhkXHU2MDk0XHU2MDhjXHU2MDg1XHU2MDk2XHU2MjQ3XHU2MmYzXHU2MzA4XHU2MmZmXHU2MzRlXHU2MzNlXHU2MzJmXHU2MzU1XHU2MzQyXHU2MzQ2XHU2MzRmXHU2MzQ5XHU2''@;'; put 'put ''MzNhXHU2MzUwXHU2MzNkXHU2MzJhXHU2MzJiXHU2MzI4XHU2MzRkXHU2MzRjXHU2NTQ4XHU2NTQ5XHU2NTk5XHU2NWMxXHU2NWM1XHU2NjQyXHU2NjQ5XHU2NjRmXHU2NjQzXHU2NjUyXHU2NjRjXHU2NjQ1XHU2NjQxXHU2NmY4XHU2NzE0XHU2NzE1XHU2NzE3XHU2ODIxXHU2ODM4XHU2ODQ4''@;'; put 'put ''XHU2ODQ2XHU2ODUzXHU2ODM5XHU2ODQyXHU2ODU0XHU2ODI5XHU2OGIzXHU2ODE3XHU2ODRjXHU2ODUxXHU2ODNkXHU2N2Y0XHU2ODUwXHU2ODQwXHU2ODNjXHU2ODQzXHU2ODJhXHU2ODQ1XHU2ODEzXHU2ODE4XHU2ODQxXHU2YjhhXHU2Yjg5XHU2YmI3XHU2YzIzXHU2YzI3XHU2YzI4XHU2''@;'; put 'put ''YzI2XHU2YzI0XHU2Y2YwXHU2ZDZhXHU2ZDk1XHU2ZDg4XHU2ZDg3XHU2ZDY2XHU2ZDc4XHU2ZDc3XHU2ZDU5XHU2ZDkzIl0sWyJhZjQwIiwiXHU2ZDZjXHU2ZDg5XHU2ZDZlXHU2ZDVhXHU2ZDc0XHU2ZDY5XHU2ZDhjXHU2ZDhhXHU2ZDc5XHU2ZDg1XHU2ZDY1XHU2ZDk0XHU3MGNhXHU3MGQ4''@;'; put 'put ''XHU3MGU0XHU3MGQ5XHU3MGM4XHU3MGNmXHU3MjM5XHU3Mjc5XHU3MmZjXHU3MmY5XHU3MmZkXHU3MmY4XHU3MmY3XHU3Mzg2XHU3M2VkXHU3NDA5XHU3M2VlXHU3M2UwXHU3M2VhXHU3M2RlXHU3NTU0XHU3NTVkXHU3NTVjXHU3NTVhXHU3NTU5XHU3NWJlXHU3NWM1XHU3NWM3XHU3NWIyXHU3''@;'; put 'put ''NWIzXHU3NWJkXHU3NWJjXHU3NWI5XHU3NWMyXHU3NWI4XHU3NjhiXHU3NmIwXHU3NmNhXHU3NmNkXHU3NmNlXHU3NzI5XHU3NzFmXHU3NzIwXHU3NzI4XHU3N2U5XHU3ODMwXHU3ODI3XHU3ODM4XHU3ODFkXHU3ODM0XHU3ODM3Il0sWyJhZmExIiwiXHU3ODI1XHU3ODJkXHU3ODIwXHU3ODFm''@;'; put 'put ''XHU3ODMyXHU3OTU1XHU3OTUwXHU3OTYwXHU3OTVmXHU3OTU2XHU3OTVlXHU3OTVkXHU3OTU3XHU3OTVhXHU3OWU0XHU3OWUzXHU3OWU3XHU3OWRmXHU3OWU2XHU3OWU5XHU3OWQ4XHU3YTg0XHU3YTg4XHU3YWQ5XHU3YjA2XHU3YjExXHU3Yzg5XHU3ZDIxXHU3ZDE3XHU3ZDBiXHU3ZDBhXHU3''@;'; put 'put ''ZDIwXHU3ZDIyXHU3ZDE0XHU3ZDEwXHU3ZDE1XHU3ZDFhXHU3ZDFjXHU3ZDBkXHU3ZDE5XHU3ZDFiXHU3ZjNhXHU3ZjVmXHU3Zjk0XHU3ZmM1XHU3ZmMxXHU4MDA2XHU4MDE4XHU4MDE1XHU4MDE5XHU4MDE3XHU4MDNkXHU4MDNmXHU4MGYxXHU4MTAyXHU4MGYwXHU4MTA1XHU4MGVkXHU4MGY0''@;'; put 'put ''XHU4MTA2XHU4MGY4XHU4MGYzXHU4MTA4XHU4MGZkXHU4MTBhXHU4MGZjXHU4MGVmXHU4MWVkXHU4MWVjXHU4MjAwXHU4MjEwXHU4MjJhXHU4MjJiXHU4MjI4XHU4MjJjXHU4MmJiXHU4MzJiXHU4MzUyXHU4MzU0XHU4MzRhXHU4MzM4XHU4MzUwXHU4MzQ5XHU4MzM1XHU4MzM0XHU4MzRmXHU4''@;'; put 'put ''MzMyXHU4MzM5XHU4MzM2XHU4MzE3XHU4MzQwXHU4MzMxXHU4MzI4XHU4MzQzIl0sWyJiMDQwIiwiXHU4NjU0XHU4NjhhXHU4NmFhXHU4NjkzXHU4NmE0XHU4NmE5XHU4NjhjXHU4NmEzXHU4NjljXHU4ODcwXHU4ODc3XHU4ODgxXHU4ODgyXHU4ODdkXHU4ODc5XHU4YTE4XHU4YTEwXHU4YTBl''@;'; put 'put ''XHU4YTBjXHU4YTE1XHU4YTBhXHU4YTE3XHU4YTEzXHU4YTE2XHU4YTBmXHU4YTExXHU4YzQ4XHU4YzdhXHU4Yzc5XHU4Y2ExXHU4Y2EyXHU4ZDc3XHU4ZWFjXHU4ZWQyXHU4ZWQ0XHU4ZWNmXHU4ZmIxXHU5MDAxXHU5MDA2XHU4ZmY3XHU5MDAwXHU4ZmZhXHU4ZmY0XHU5MDAzXHU4ZmZkXHU5''@;'; put 'put ''MDA1XHU4ZmY4XHU5MDk1XHU5MGUxXHU5MGRkXHU5MGUyXHU5MTUyXHU5MTRkXHU5MTRjXHU5MWQ4XHU5MWRkXHU5MWQ3XHU5MWRjXHU5MWQ5XHU5NTgzXHU5NjYyXHU5NjYzXHU5NjYxIl0sWyJiMGExIiwiXHU5NjViXHU5NjVkXHU5NjY0XHU5NjU4XHU5NjVlXHU5NmJiXHU5OGUyXHU5OWFj''@;'; put 'put ''XHU5YWE4XHU5YWQ4XHU5YjI1XHU5YjMyXHU5YjNjXHU0ZTdlXHU1MDdhXHU1MDdkXHU1MDVjXHU1MDQ3XHU1MDQzXHU1MDRjXHU1MDVhXHU1MDQ5XHU1MDY1XHU1MDc2XHU1MDRlXHU1MDU1XHU1MDc1XHU1MDc0XHU1MDc3XHU1MDRmXHU1MDBmXHU1MDZmXHU1MDZkXHU1MTVjXHU1MTk1XHU1''@;'; put 'put ''MWYwXHU1MjZhXHU1MjZmXHU1MmQyXHU1MmQ5XHU1MmQ4XHU1MmQ1XHU1MzEwXHU1MzBmXHU1MzE5XHU1MzNmXHU1MzQwXHU1MzNlXHU1M2MzXHU2NmZjXHU1NTQ2XHU1NTZhXHU1NTY2XHU1NTQ0XHU1NTVlXHU1NTYxXHU1NTQzXHU1NTRhXHU1NTMxXHU1NTU2XHU1NTRmXHU1NTU1XHU1NTJm''@;'; put 'put ''XHU1NTY0XHU1NTM4XHU1NTJlXHU1NTVjXHU1NTJjXHU1NTYzXHU1NTMzXHU1NTQxXHU1NTU3XHU1NzA4XHU1NzBiXHU1NzA5XHU1N2RmXHU1ODA1XHU1ODBhXHU1ODA2XHU1N2UwXHU1N2U0XHU1N2ZhXHU1ODAyXHU1ODM1XHU1N2Y3XHU1N2Y5XHU1OTIwXHU1OTYyXHU1YTM2XHU1YTQxXHU1''@;'; put 'put ''YTQ5XHU1YTY2XHU1YTZhXHU1YTQwIl0sWyJiMTQwIiwiXHU1YTNjXHU1YTYyXHU1YTVhXHU1YTQ2XHU1YTRhXHU1YjcwXHU1YmM3XHU1YmM1XHU1YmM0XHU1YmMyXHU1YmJmXHU1YmM2XHU1YzA5XHU1YzA4XHU1YzA3XHU1YzYwXHU1YzVjXHU1YzVkXHU1ZDA3XHU1ZDA2XHU1ZDBlXHU1ZDFi''@;'; put 'put ''XHU1ZDE2XHU1ZDIyXHU1ZDExXHU1ZDI5XHU1ZDE0XHU1ZDE5XHU1ZDI0XHU1ZDI3XHU1ZDE3XHU1ZGUyXHU1ZTM4XHU1ZTM2XHU1ZTMzXHU1ZTM3XHU1ZWI3XHU1ZWI4XHU1ZWI2XHU1ZWI1XHU1ZWJlXHU1ZjM1XHU1ZjM3XHU1ZjU3XHU1ZjZjXHU1ZjY5XHU1ZjZiXHU1Zjk3XHU1Zjk5XHU1''@;'; put 'put ''ZjllXHU1Zjk4XHU1ZmExXHU1ZmEwXHU1ZjljXHU2MDdmXHU2MGEzXHU2MDg5XHU2MGEwXHU2MGE4XHU2MGNiXHU2MGI0XHU2MGU2XHU2MGJkIl0sWyJiMWExIiwiXHU2MGM1XHU2MGJiXHU2MGI1XHU2MGRjXHU2MGJjXHU2MGQ4XHU2MGQ1XHU2MGM2XHU2MGRmXHU2MGI4XHU2MGRhXHU2MGM3''@;'; put 'put ''XHU2MjFhXHU2MjFiXHU2MjQ4XHU2M2EwXHU2M2E3XHU2MzcyXHU2Mzk2XHU2M2EyXHU2M2E1XHU2Mzc3XHU2MzY3XHU2Mzk4XHU2M2FhXHU2MzcxXHU2M2E5XHU2Mzg5XHU2MzgzXHU2MzliXHU2MzZiXHU2M2E4XHU2Mzg0XHU2Mzg4XHU2Mzk5XHU2M2ExXHU2M2FjXHU2MzkyXHU2MzhmXHU2''@;'; put 'put ''MzgwXHU2MzdiXHU2MzY5XHU2MzY4XHU2MzdhXHU2NTVkXHU2NTU2XHU2NTUxXHU2NTU5XHU2NTU3XHU1NTVmXHU2NTRmXHU2NTU4XHU2NTU1XHU2NTU0XHU2NTljXHU2NTliXHU2NWFjXHU2NWNmXHU2NWNiXHU2NWNjXHU2NWNlXHU2NjVkXHU2NjVhXHU2NjY0XHU2NjY4XHU2NjY2XHU2NjVl''@;'; put 'put ''XHU2NmY5XHU1MmQ3XHU2NzFiXHU2ODgxXHU2OGFmXHU2OGEyXHU2ODkzXHU2OGI1XHU2ODdmXHU2ODc2XHU2OGIxXHU2OGE3XHU2ODk3XHU2OGIwXHU2ODgzXHU2OGM0XHU2OGFkXHU2ODg2XHU2ODg1XHU2ODk0XHU2ODlkXHU2OGE4XHU2ODlmXHU2OGExXHU2ODgyXHU2YjMyXHU2YmJhIl0s''@;'; put 'put ''WyJiMjQwIiwiXHU2YmViXHU2YmVjXHU2YzJiXHU2ZDhlXHU2ZGJjXHU2ZGYzXHU2ZGQ5XHU2ZGIyXHU2ZGUxXHU2ZGNjXHU2ZGU0XHU2ZGZiXHU2ZGZhXHU2ZTA1XHU2ZGM3XHU2ZGNiXHU2ZGFmXHU2ZGQxXHU2ZGFlXHU2ZGRlXHU2ZGY5XHU2ZGI4XHU2ZGY3XHU2ZGY1XHU2ZGM1XHU2ZGQy''@;'; put 'put ''XHU2ZTFhXHU2ZGI1XHU2ZGRhXHU2ZGViXHU2ZGQ4XHU2ZGVhXHU2ZGYxXHU2ZGVlXHU2ZGU4XHU2ZGM2XHU2ZGM0XHU2ZGFhXHU2ZGVjXHU2ZGJmXHU2ZGU2XHU3MGY5XHU3MTA5XHU3MTBhXHU3MGZkXHU3MGVmXHU3MjNkXHU3MjdkXHU3MjgxXHU3MzFjXHU3MzFiXHU3MzE2XHU3MzEzXHU3''@;'; put 'put ''MzE5XHU3Mzg3XHU3NDA1XHU3NDBhXHU3NDAzXHU3NDA2XHU3M2ZlXHU3NDBkXHU3NGUwXHU3NGY2Il0sWyJiMmExIiwiXHU3NGY3XHU3NTFjXHU3NTIyXHU3NTY1XHU3NTY2XHU3NTYyXHU3NTcwXHU3NThmXHU3NWQ0XHU3NWQ1XHU3NWI1XHU3NWNhXHU3NWNkXHU3NjhlXHU3NmQ0XHU3NmQy''@;'; put 'put ''XHU3NmRiXHU3NzM3XHU3NzNlXHU3NzNjXHU3NzM2XHU3NzM4XHU3NzNhXHU3ODZiXHU3ODQzXHU3ODRlXHU3OTY1XHU3OTY4XHU3OTZkXHU3OWZiXHU3YTkyXHU3YTk1XHU3YjIwXHU3YjI4XHU3YjFiXHU3YjJjXHU3YjI2XHU3YjE5XHU3YjFlXHU3YjJlXHU3YzkyXHU3Yzk3XHU3Yzk1XHU3''@;'; put 'put ''ZDQ2XHU3ZDQzXHU3ZDcxXHU3ZDJlXHU3ZDM5XHU3ZDNjXHU3ZDQwXHU3ZDMwXHU3ZDMzXHU3ZDQ0XHU3ZDJmXHU3ZDQyXHU3ZDMyXHU3ZDMxXHU3ZjNkXHU3ZjllXHU3ZjlhXHU3ZmNjXHU3ZmNlXHU3ZmQyXHU4MDFjXHU4MDRhXHU4MDQ2XHU4MTJmXHU4MTE2XHU4MTIzXHU4MTJiXHU4MTI5''@;'; put 'put ''XHU4MTMwXHU4MTI0XHU4MjAyXHU4MjM1XHU4MjM3XHU4MjM2XHU4MjM5XHU4MzhlXHU4MzllXHU4Mzk4XHU4Mzc4XHU4M2EyXHU4Mzk2XHU4M2JkXHU4M2FiXHU4MzkyXHU4MzhhXHU4MzkzXHU4Mzg5XHU4M2EwXHU4Mzc3XHU4MzdiXHU4MzdjIl0sWyJiMzQwIiwiXHU4Mzg2XHU4M2E3XHU4''@;'; put 'put ''NjU1XHU1ZjZhXHU4NmM3XHU4NmMwXHU4NmI2XHU4NmM0XHU4NmI1XHU4NmM2XHU4NmNiXHU4NmIxXHU4NmFmXHU4NmM5XHU4ODUzXHU4ODllXHU4ODg4XHU4OGFiXHU4ODkyXHU4ODk2XHU4ODhkXHU4ODhiXHU4OTkzXHU4OThmXHU4YTJhXHU4YTFkXHU4YTIzXHU4YTI1XHU4YTMxXHU4YTJk''@;'; put 'put ''XHU4YTFmXHU4YTFiXHU4YTIyXHU4YzQ5XHU4YzVhXHU4Y2E5XHU4Y2FjXHU4Y2FiXHU4Y2E4XHU4Y2FhXHU4Y2E3XHU4ZDY3XHU4ZDY2XHU4ZGJlXHU4ZGJhXHU4ZWRiXHU4ZWRmXHU5MDE5XHU5MDBkXHU5MDFhXHU5MDE3XHU5MDIzXHU5MDFmXHU5MDFkXHU5MDEwXHU5MDE1XHU5MDFlXHU5''@;'; put 'put ''MDIwXHU5MDBmXHU5MDIyXHU5MDE2XHU5MDFiXHU5MDE0Il0sWyJiM2ExIiwiXHU5MGU4XHU5MGVkXHU5MGZkXHU5MTU3XHU5MWNlXHU5MWY1XHU5MWU2XHU5MWUzXHU5MWU3XHU5MWVkXHU5MWU5XHU5NTg5XHU5NjZhXHU5Njc1XHU5NjczXHU5Njc4XHU5NjcwXHU5Njc0XHU5Njc2XHU5Njc3''@;'; put 'put ''XHU5NjZjXHU5NmMwXHU5NmVhXHU5NmU5XHU3YWUwXHU3YWRmXHU5ODAyXHU5ODAzXHU5YjVhXHU5Y2U1XHU5ZTc1XHU5ZTdmXHU5ZWE1XHU5ZWJiXHU1MGEyXHU1MDhkXHU1MDg1XHU1MDk5XHU1MDkxXHU1MDgwXHU1MDk2XHU1MDk4XHU1MDlhXHU2NzAwXHU1MWYxXHU1MjcyXHU1Mjc0XHU1''@;'; put 'put ''Mjc1XHU1MjY5XHU1MmRlXHU1MmRkXHU1MmRiXHU1MzVhXHU1M2E1XHU1NTdiXHU1NTgwXHU1NWE3XHU1NTdjXHU1NThhXHU1NTlkXHU1NTk4XHU1NTgyXHU1NTljXHU1NWFhXHU1NTk0XHU1NTg3XHU1NThiXHU1NTgzXHU1NWIzXHU1NWFlXHU1NTlmXHU1NTNlXHU1NWIyXHU1NTlhXHU1NWJi''@;'; put 'put ''XHU1NWFjXHU1NWIxXHU1NTdlXHU1NTg5XHU1NWFiXHU1NTk5XHU1NzBkXHU1ODJmXHU1ODJhXHU1ODM0XHU1ODI0XHU1ODMwXHU1ODMxXHU1ODIxXHU1ODFkXHU1ODIwXHU1OGY5XHU1OGZhXHU1OTYwIl0sWyJiNDQwIiwiXHU1YTc3XHU1YTlhXHU1YTdmXHU1YTkyXHU1YTliXHU1YWE3XHU1''@;'; put 'put ''YjczXHU1YjcxXHU1YmQyXHU1YmNjXHU1YmQzXHU1YmQwXHU1YzBhXHU1YzBiXHU1YzMxXHU1ZDRjXHU1ZDUwXHU1ZDM0XHU1ZDQ3XHU1ZGZkXHU1ZTQ1XHU1ZTNkXHU1ZTQwXHU1ZTQzXHU1ZTdlXHU1ZWNhXHU1ZWMxXHU1ZWMyXHU1ZWM0XHU1ZjNjXHU1ZjZkXHU1ZmE5XHU1ZmFhXHU1ZmE4''@;'; put 'put ''XHU2MGQxXHU2MGUxXHU2MGIyXHU2MGI2XHU2MGUwXHU2MTFjXHU2MTIzXHU2MGZhXHU2MTE1XHU2MGYwXHU2MGZiXHU2MGY0XHU2MTY4XHU2MGYxXHU2MTBlXHU2MGY2XHU2MTA5XHU2MTAwXHU2MTEyXHU2MjFmXHU2MjQ5XHU2M2EzXHU2MzhjXHU2M2NmXHU2M2MwXHU2M2U5XHU2M2M5XHU2''@;'; put 'put ''M2M2XHU2M2NkIl0sWyJiNGExIiwiXHU2M2QyXHU2M2UzXHU2M2QwXHU2M2UxXHU2M2Q2XHU2M2VkXHU2M2VlXHU2Mzc2XHU2M2Y0XHU2M2VhXHU2M2RiXHU2NDUyXHU2M2RhXHU2M2Y5XHU2NTVlXHU2NTY2XHU2NTYyXHU2NTYzXHU2NTkxXHU2NTkwXHU2NWFmXHU2NjZlXHU2NjcwXHU2Njc0''@;'; put 'put ''XHU2Njc2XHU2NjZmXHU2NjkxXHU2NjdhXHU2NjdlXHU2Njc3XHU2NmZlXHU2NmZmXHU2NzFmXHU2NzFkXHU2OGZhXHU2OGQ1XHU2OGUwXHU2OGQ4XHU2OGQ3XHU2OTA1XHU2OGRmXHU2OGY1XHU2OGVlXHU2OGU3XHU2OGY5XHU2OGQyXHU2OGYyXHU2OGUzXHU2OGNiXHU2OGNkXHU2OTBkXHU2''@;'; put 'put ''OTEyXHU2OTBlXHU2OGM5XHU2OGRhXHU2OTZlXHU2OGZiXHU2YjNlXHU2YjNhXHU2YjNkXHU2Yjk4XHU2Yjk2XHU2YmJjXHU2YmVmXHU2YzJlXHU2YzJmXHU2YzJjXHU2ZTJmXHU2ZTM4XHU2ZTU0XHU2ZTIxXHU2ZTMyXHU2ZTY3XHU2ZTRhXHU2ZTIwXHU2ZTI1XHU2ZTIzXHU2ZTFiXHU2ZTVi''@;'; put 'put ''XHU2ZTU4XHU2ZTI0XHU2ZTU2XHU2ZTZlXHU2ZTJkXHU2ZTI2XHU2ZTZmXHU2ZTM0XHU2ZTRkXHU2ZTNhXHU2ZTJjXHU2ZTQzXHU2ZTFkXHU2ZTNlXHU2ZWNiIl0sWyJiNTQwIiwiXHU2ZTg5XHU2ZTE5XHU2ZTRlXHU2ZTYzXHU2ZTQ0XHU2ZTcyXHU2ZTY5XHU2ZTVmXHU3MTE5XHU3MTFhXHU3''@;'; put 'put ''MTI2XHU3MTMwXHU3MTIxXHU3MTM2XHU3MTZlXHU3MTFjXHU3MjRjXHU3Mjg0XHU3MjgwXHU3MzM2XHU3MzI1XHU3MzM0XHU3MzI5XHU3NDNhXHU3NDJhXHU3NDMzXHU3NDIyXHU3NDI1XHU3NDM1XHU3NDM2XHU3NDM0XHU3NDJmXHU3NDFiXHU3NDI2XHU3NDI4XHU3NTI1XHU3NTI2XHU3NTZi''@;'; put 'put ''XHU3NTZhXHU3NWUyXHU3NWRiXHU3NWUzXHU3NWQ5XHU3NWQ4XHU3NWRlXHU3NWUwXHU3NjdiXHU3NjdjXHU3Njk2XHU3NjkzXHU3NmI0XHU3NmRjXHU3NzRmXHU3N2VkXHU3ODVkXHU3ODZjXHU3ODZmXHU3YTBkXHU3YTA4XHU3YTBiXHU3YTA1XHU3YTAwXHU3YTk4Il0sWyJiNWExIiwiXHU3''@;'; put 'put ''YTk3XHU3YTk2XHU3YWU1XHU3YWUzXHU3YjQ5XHU3YjU2XHU3YjQ2XHU3YjUwXHU3YjUyXHU3YjU0XHU3YjRkXHU3YjRiXHU3YjRmXHU3YjUxXHU3YzlmXHU3Y2E1XHU3ZDVlXHU3ZDUwXHU3ZDY4XHU3ZDU1XHU3ZDJiXHU3ZDZlXHU3ZDcyXHU3ZDYxXHU3ZDY2XHU3ZDYyXHU3ZDcwXHU3ZDcz''@;'; put 'put ''XHU1NTg0XHU3ZmQ0XHU3ZmQ1XHU4MDBiXHU4MDUyXHU4MDg1XHU4MTU1XHU4MTU0XHU4MTRiXHU4MTUxXHU4MTRlXHU4MTM5XHU4MTQ2XHU4MTNlXHU4MTRjXHU4MTUzXHU4MTc0XHU4MjEyXHU4MjFjXHU4M2U5XHU4NDAzXHU4M2Y4XHU4NDBkXHU4M2UwXHU4M2M1XHU4NDBiXHU4M2MxXHU4''@;'; put 'put ''M2VmXHU4M2YxXHU4M2Y0XHU4NDU3XHU4NDBhXHU4M2YwXHU4NDBjXHU4M2NjXHU4M2ZkXHU4M2YyXHU4M2NhXHU4NDM4XHU4NDBlXHU4NDA0XHU4M2RjXHU4NDA3XHU4M2Q0XHU4M2RmXHU4NjViXHU4NmRmXHU4NmQ5XHU4NmVkXHU4NmQ0XHU4NmRiXHU4NmU0XHU4NmQwXHU4NmRlXHU4ODU3''@;'; put 'put ''XHU4OGMxXHU4OGMyXHU4OGIxXHU4OTgzXHU4OTk2XHU4YTNiXHU4YTYwXHU4YTU1XHU4YTVlXHU4YTNjXHU4YTQxIl0sWyJiNjQwIiwiXHU4YTU0XHU4YTViXHU4YTUwXHU4YTQ2XHU4YTM0XHU4YTNhXHU4YTM2XHU4YTU2XHU4YzYxXHU4YzgyXHU4Y2FmXHU4Y2JjXHU4Y2IzXHU4Y2JkXHU4''@;'; put 'put ''Y2MxXHU4Y2JiXHU4Y2MwXHU4Y2I0XHU4Y2I3XHU4Y2I2XHU4Y2JmXHU4Y2I4XHU4ZDhhXHU4ZDg1XHU4ZDgxXHU4ZGNlXHU4ZGRkXHU4ZGNiXHU4ZGRhXHU4ZGQxXHU4ZGNjXHU4ZGRiXHU4ZGM2XHU4ZWZiXHU4ZWY4XHU4ZWZjXHU4ZjljXHU5MDJlXHU5MDM1XHU5MDMxXHU5MDM4XHU5MDMy''@;'; put 'put ''XHU5MDM2XHU5MTAyXHU5MGY1XHU5MTA5XHU5MGZlXHU5MTYzXHU5MTY1XHU5MWNmXHU5MjE0XHU5MjE1XHU5MjIzXHU5MjA5XHU5MjFlXHU5MjBkXHU5MjEwXHU5MjA3XHU5MjExXHU5NTk0XHU5NThmXHU5NThiXHU5NTkxIl0sWyJiNmExIiwiXHU5NTkzXHU5NTkyXHU5NThlXHU5NjhhXHU5''@;'; put 'put ''NjhlXHU5NjhiXHU5NjdkXHU5Njg1XHU5Njg2XHU5NjhkXHU5NjcyXHU5Njg0XHU5NmMxXHU5NmM1XHU5NmM0XHU5NmM2XHU5NmM3XHU5NmVmXHU5NmYyXHU5N2NjXHU5ODA1XHU5ODA2XHU5ODA4XHU5OGU3XHU5OGVhXHU5OGVmXHU5OGU5XHU5OGYyXHU5OGVkXHU5OWFlXHU5OWFkXHU5ZWMz''@;'; put 'put ''XHU5ZWNkXHU5ZWQxXHU0ZTgyXHU1MGFkXHU1MGI1XHU1MGIyXHU1MGIzXHU1MGM1XHU1MGJlXHU1MGFjXHU1MGI3XHU1MGJiXHU1MGFmXHU1MGM3XHU1MjdmXHU1Mjc3XHU1MjdkXHU1MmRmXHU1MmU2XHU1MmU0XHU1MmUyXHU1MmUzXHU1MzJmXHU1NWRmXHU1NWU4XHU1NWQzXHU1NWU2XHU1''@;'; put 'put ''NWNlXHU1NWRjXHU1NWM3XHU1NWQxXHU1NWUzXHU1NWU0XHU1NWVmXHU1NWRhXHU1NWUxXHU1NWM1XHU1NWM2XHU1NWU1XHU1NWM5XHU1NzEyXHU1NzEzXHU1ODVlXHU1ODUxXHU1ODU4XHU1ODU3XHU1ODVhXHU1ODU0XHU1ODZiXHU1ODRjXHU1ODZkXHU1ODRhXHU1ODYyXHU1ODUyXHU1ODRi''@;'; put 'put ''XHU1OTY3XHU1YWMxXHU1YWM5XHU1YWNjXHU1YWJlXHU1YWJkXHU1YWJjIl0sWyJiNzQwIiwiXHU1YWIzXHU1YWMyXHU1YWIyXHU1ZDY5XHU1ZDZmXHU1ZTRjXHU1ZTc5XHU1ZWM5XHU1ZWM4XHU1ZjEyXHU1ZjU5XHU1ZmFjXHU1ZmFlXHU2MTFhXHU2MTBmXHU2MTQ4XHU2MTFmXHU2MGYzXHU2''@;'; put 'put ''MTFiXHU2MGY5XHU2MTAxXHU2MTA4XHU2MTRlXHU2MTRjXHU2MTQ0XHU2MTRkXHU2MTNlXHU2MTM0XHU2MTI3XHU2MTBkXHU2MTA2XHU2MTM3XHU2MjIxXHU2MjIyXHU2NDEzXHU2NDNlXHU2NDFlXHU2NDJhXHU2NDJkXHU2NDNkXHU2NDJjXHU2NDBmXHU2NDFjXHU2NDE0XHU2NDBkXHU2NDM2''@;'; put 'put ''XHU2NDE2XHU2NDE3XHU2NDA2XHU2NTZjXHU2NTlmXHU2NWIwXHU2Njk3XHU2Njg5XHU2Njg3XHU2Njg4XHU2Njk2XHU2Njg0XHU2Njk4XHU2NjhkXHU2NzAzXHU2OTk0XHU2OTZkIl0sWyJiN2ExIiwiXHU2OTVhXHU2OTc3XHU2OTYwXHU2OTU0XHU2OTc1XHU2OTMwXHU2OTgyXHU2OTRhXHU2''@;'; put 'put ''OTY4XHU2OTZiXHU2OTVlXHU2OTUzXHU2OTc5XHU2OTg2XHU2OTVkXHU2OTYzXHU2OTViXHU2YjQ3XHU2YjcyXHU2YmMwXHU2YmJmXHU2YmQzXHU2YmZkXHU2ZWEyXHU2ZWFmXHU2ZWQzXHU2ZWI2XHU2ZWMyXHU2ZTkwXHU2ZTlkXHU2ZWM3XHU2ZWM1XHU2ZWE1XHU2ZTk4XHU2ZWJjXHU2ZWJh''@;'; put 'put ''XHU2ZWFiXHU2ZWQxXHU2ZTk2XHU2ZTljXHU2ZWM0XHU2ZWQ0XHU2ZWFhXHU2ZWE3XHU2ZWI0XHU3MTRlXHU3MTU5XHU3MTY5XHU3MTY0XHU3MTQ5XHU3MTY3XHU3MTVjXHU3MTZjXHU3MTY2XHU3MTRjXHU3MTY1XHU3MTVlXHU3MTQ2XHU3MTY4XHU3MTU2XHU3MjNhXHU3MjUyXHU3MzM3XHU3''@;'; put 'put ''MzQ1XHU3MzNmXHU3MzNlXHU3NDZmXHU3NDVhXHU3NDU1XHU3NDVmXHU3NDVlXHU3NDQxXHU3NDNmXHU3NDU5XHU3NDViXHU3NDVjXHU3NTc2XHU3NTc4XHU3NjAwXHU3NWYwXHU3NjAxXHU3NWYyXHU3NWYxXHU3NWZhXHU3NWZmXHU3NWY0XHU3NWYzXHU3NmRlXHU3NmRmXHU3NzViXHU3NzZi''@;'; put 'put ''XHU3NzY2XHU3NzVlXHU3NzYzIl0sWyJiODQwIiwiXHU3Nzc5XHU3NzZhXHU3NzZjXHU3NzVjXHU3NzY1XHU3NzY4XHU3NzYyXHU3N2VlXHU3ODhlXHU3OGIwXHU3ODk3XHU3ODk4XHU3ODhjXHU3ODg5XHU3ODdjXHU3ODkxXHU3ODkzXHU3ODdmXHU3OTdhXHU3OTdmXHU3OTgxXHU4NDJjXHU3''@;'; put 'put ''OWJkXHU3YTFjXHU3YTFhXHU3YTIwXHU3YTE0XHU3YTFmXHU3YTFlXHU3YTlmXHU3YWEwXHU3Yjc3XHU3YmMwXHU3YjYwXHU3YjZlXHU3YjY3XHU3Y2IxXHU3Y2IzXHU3Y2I1XHU3ZDkzXHU3ZDc5XHU3ZDkxXHU3ZDgxXHU3ZDhmXHU3ZDViXHU3ZjZlXHU3ZjY5XHU3ZjZhXHU3ZjcyXHU3ZmE5''@;'; put 'put ''XHU3ZmE4XHU3ZmE0XHU4MDU2XHU4MDU4XHU4MDg2XHU4MDg0XHU4MTcxXHU4MTcwXHU4MTc4XHU4MTY1XHU4MTZlXHU4MTczXHU4MTZiIl0sWyJiOGExIiwiXHU4MTc5XHU4MTdhXHU4MTY2XHU4MjA1XHU4MjQ3XHU4NDgyXHU4NDc3XHU4NDNkXHU4NDMxXHU4NDc1XHU4NDY2XHU4NDZiXHU4''@;'; put 'put ''NDQ5XHU4NDZjXHU4NDViXHU4NDNjXHU4NDM1XHU4NDYxXHU4NDYzXHU4NDY5XHU4NDZkXHU4NDQ2XHU4NjVlXHU4NjVjXHU4NjVmXHU4NmY5XHU4NzEzXHU4NzA4XHU4NzA3XHU4NzAwXHU4NmZlXHU4NmZiXHU4NzAyXHU4NzAzXHU4NzA2XHU4NzBhXHU4ODU5XHU4OGRmXHU4OGQ0XHU4OGQ5''@;'; put 'put ''XHU4OGRjXHU4OGQ4XHU4OGRkXHU4OGUxXHU4OGNhXHU4OGQ1XHU4OGQyXHU4OTljXHU4OWUzXHU4YTZiXHU4YTcyXHU4YTczXHU4YTY2XHU4YTY5XHU4YTcwXHU4YTg3XHU4YTdjXHU4YTYzXHU4YWEwXHU4YTcxXHU4YTg1XHU4YTZkXHU4YTYyXHU4YTZlXHU4YTZjXHU4YTc5XHU4YTdiXHU4''@;'; put 'put ''YTNlXHU4YTY4XHU4YzYyXHU4YzhhXHU4Yzg5XHU4Y2NhXHU4Y2M3XHU4Y2M4XHU4Y2M0XHU4Y2IyXHU4Y2MzXHU4Y2MyXHU4Y2M1XHU4ZGUxXHU4ZGRmXHU4ZGU4XHU4ZGVmXHU4ZGYzXHU4ZGZhXHU4ZGVhXHU4ZGU0XHU4ZGU2XHU4ZWIyXHU4ZjAzXHU4ZjA5XHU4ZWZlXHU4ZjBhIl0sWyJi''@;'; put 'put ''OTQwIiwiXHU4ZjlmXHU4ZmIyXHU5MDRiXHU5MDRhXHU5MDUzXHU5MDQyXHU5MDU0XHU5MDNjXHU5MDU1XHU5MDUwXHU5MDQ3XHU5MDRmXHU5MDRlXHU5MDRkXHU5MDUxXHU5MDNlXHU5MDQxXHU5MTEyXHU5MTE3XHU5MTZjXHU5MTZhXHU5MTY5XHU5MWM5XHU5MjM3XHU5MjU3XHU5MjM4XHU5''@;'; put 'put ''MjNkXHU5MjQwXHU5MjNlXHU5MjViXHU5MjRiXHU5MjY0XHU5MjUxXHU5MjM0XHU5MjQ5XHU5MjRkXHU5MjQ1XHU5MjM5XHU5MjNmXHU5MjVhXHU5NTk4XHU5Njk4XHU5Njk0XHU5Njk1XHU5NmNkXHU5NmNiXHU5NmM5XHU5NmNhXHU5NmY3XHU5NmZiXHU5NmY5XHU5NmY2XHU5NzU2XHU5Nzc0''@;'; put 'put ''XHU5Nzc2XHU5ODEwXHU5ODExXHU5ODEzXHU5ODBhXHU5ODEyXHU5ODBjXHU5OGZjXHU5OGY0Il0sWyJiOWExIiwiXHU5OGZkXHU5OGZlXHU5OWIzXHU5OWIxXHU5OWI0XHU5YWUxXHU5Y2U5XHU5ZTgyXHU5ZjBlXHU5ZjEzXHU5ZjIwXHU1MGU3XHU1MGVlXHU1MGU1XHU1MGQ2XHU1MGVkXHU1''@;'; put 'put ''MGRhXHU1MGQ1XHU1MGNmXHU1MGQxXHU1MGYxXHU1MGNlXHU1MGU5XHU1MTYyXHU1MWYzXHU1MjgzXHU1MjgyXHU1MzMxXHU1M2FkXHU1NWZlXHU1NjAwXHU1NjFiXHU1NjE3XHU1NWZkXHU1NjE0XHU1NjA2XHU1NjA5XHU1NjBkXHU1NjBlXHU1NWY3XHU1NjE2XHU1NjFmXHU1NjA4XHU1NjEw''@;'; put 'put ''XHU1NWY2XHU1NzE4XHU1NzE2XHU1ODc1XHU1ODdlXHU1ODgzXHU1ODkzXHU1ODhhXHU1ODc5XHU1ODg1XHU1ODdkXHU1OGZkXHU1OTI1XHU1OTIyXHU1OTI0XHU1OTZhXHU1OTY5XHU1YWUxXHU1YWU2XHU1YWU5XHU1YWQ3XHU1YWQ2XHU1YWQ4XHU1YWUzXHU1Yjc1XHU1YmRlXHU1YmU3XHU1''@;'; put 'put ''YmUxXHU1YmU1XHU1YmU2XHU1YmU4XHU1YmUyXHU1YmU0XHU1YmRmXHU1YzBkXHU1YzYyXHU1ZDg0XHU1ZDg3XHU1ZTViXHU1ZTYzXHU1ZTU1XHU1ZTU3XHU1ZTU0XHU1ZWQzXHU1ZWQ2XHU1ZjBhXHU1ZjQ2XHU1ZjcwXHU1ZmI5XHU2MTQ3Il0sWyJiYTQwIiwiXHU2MTNmXHU2MTRiXHU2MTc3''@;'; put 'put ''XHU2MTYyXHU2MTYzXHU2MTVmXHU2MTVhXHU2MTU4XHU2MTc1XHU2MjJhXHU2NDg3XHU2NDU4XHU2NDU0XHU2NGE0XHU2NDc4XHU2NDVmXHU2NDdhXHU2NDUxXHU2NDY3XHU2NDM0XHU2NDZkXHU2NDdiXHU2NTcyXHU2NWExXHU2NWQ3XHU2NWQ2XHU2NmEyXHU2NmE4XHU2NjlkXHU2OTljXHU2''@;'; put 'put ''OWE4XHU2OTk1XHU2OWMxXHU2OWFlXHU2OWQzXHU2OWNiXHU2OTliXHU2OWI3XHU2OWJiXHU2OWFiXHU2OWI0XHU2OWQwXHU2OWNkXHU2OWFkXHU2OWNjXHU2OWE2XHU2OWMzXHU2OWEzXHU2YjQ5XHU2YjRjXHU2YzMzXHU2ZjMzXHU2ZjE0XHU2ZWZlXHU2ZjEzXHU2ZWY0XHU2ZjI5XHU2ZjNl''@;'; put 'put ''XHU2ZjIwXHU2ZjJjXHU2ZjBmXHU2ZjAyXHU2ZjIyIl0sWyJiYWExIiwiXHU2ZWZmXHU2ZWVmXHU2ZjA2XHU2ZjMxXHU2ZjM4XHU2ZjMyXHU2ZjIzXHU2ZjE1XHU2ZjJiXHU2ZjJmXHU2Zjg4XHU2ZjJhXHU2ZWVjXHU2ZjAxXHU2ZWYyXHU2ZWNjXHU2ZWY3XHU3MTk0XHU3MTk5XHU3MTdkXHU3''@;'; put 'put ''MThhXHU3MTg0XHU3MTkyXHU3MjNlXHU3MjkyXHU3Mjk2XHU3MzQ0XHU3MzUwXHU3NDY0XHU3NDYzXHU3NDZhXHU3NDcwXHU3NDZkXHU3NTA0XHU3NTkxXHU3NjI3XHU3NjBkXHU3NjBiXHU3NjA5XHU3NjEzXHU3NmUxXHU3NmUzXHU3Nzg0XHU3NzdkXHU3NzdmXHU3NzYxXHU3OGMxXHU3ODlm''@;'; put 'put ''XHU3OGE3XHU3OGIzXHU3OGE5XHU3OGEzXHU3OThlXHU3OThmXHU3OThkXHU3YTJlXHU3YTMxXHU3YWFhXHU3YWE5XHU3YWVkXHU3YWVmXHU3YmExXHU3Yjk1XHU3YjhiXHU3Yjc1XHU3Yjk3XHU3YjlkXHU3Yjk0XHU3YjhmXHU3YmI4XHU3Yjg3XHU3Yjg0XHU3Y2I5XHU3Y2JkXHU3Y2JlXHU3''@;'; put 'put ''ZGJiXHU3ZGIwXHU3ZDljXHU3ZGJkXHU3ZGJlXHU3ZGEwXHU3ZGNhXHU3ZGI0XHU3ZGIyXHU3ZGIxXHU3ZGJhXHU3ZGEyXHU3ZGJmXHU3ZGI1XHU3ZGI4XHU3ZGFkXHU3ZGQyXHU3ZGM3XHU3ZGFjIl0sWyJiYjQwIiwiXHU3ZjcwXHU3ZmUwXHU3ZmUxXHU3ZmRmXHU4MDVlXHU4MDVhXHU4MDg3''@;'; put 'put ''XHU4MTUwXHU4MTgwXHU4MThmXHU4MTg4XHU4MThhXHU4MTdmXHU4MTgyXHU4MWU3XHU4MWZhXHU4MjA3XHU4MjE0XHU4MjFlXHU4MjRiXHU4NGM5XHU4NGJmXHU4NGM2XHU4NGM0XHU4NDk5XHU4NDllXHU4NGIyXHU4NDljXHU4NGNiXHU4NGI4XHU4NGMwXHU4NGQzXHU4NDkwXHU4NGJjXHU4''@;'; put 'put ''NGQxXHU4NGNhXHU4NzNmXHU4NzFjXHU4NzNiXHU4NzIyXHU4NzI1XHU4NzM0XHU4NzE4XHU4NzU1XHU4NzM3XHU4NzI5XHU4OGYzXHU4OTAyXHU4OGY0XHU4OGY5XHU4OGY4XHU4OGZkXHU4OGU4XHU4OTFhXHU4OGVmXHU4YWE2XHU4YThjXHU4YTllXHU4YWEzXHU4YThkXHU4YWExXHU4YTkz''@;'; put 'put ''XHU4YWE0Il0sWyJiYmExIiwiXHU4YWFhXHU4YWE1XHU4YWE4XHU4YTk4XHU4YTkxXHU4YTlhXHU4YWE3XHU4YzZhXHU4YzhkXHU4YzhjXHU4Y2QzXHU4Y2QxXHU4Y2QyXHU4ZDZiXHU4ZDk5XHU4ZDk1XHU4ZGZjXHU4ZjE0XHU4ZjEyXHU4ZjE1XHU4ZjEzXHU4ZmEzXHU5MDYwXHU5MDU4XHU5''@;'; put 'put ''MDVjXHU5MDYzXHU5MDU5XHU5MDVlXHU5MDYyXHU5MDVkXHU5MDViXHU5MTE5XHU5MTE4XHU5MTFlXHU5MTc1XHU5MTc4XHU5MTc3XHU5MTc0XHU5Mjc4XHU5MjgwXHU5Mjg1XHU5Mjk4XHU5Mjk2XHU5MjdiXHU5MjkzXHU5MjljXHU5MmE4XHU5MjdjXHU5MjkxXHU5NWExXHU5NWE4XHU5NWE5''@;'; put 'put ''XHU5NWEzXHU5NWE1XHU5NWE0XHU5Njk5XHU5NjljXHU5NjliXHU5NmNjXHU5NmQyXHU5NzAwXHU5NzdjXHU5Nzg1XHU5N2Y2XHU5ODE3XHU5ODE4XHU5OGFmXHU5OGIxXHU5OTAzXHU5OTA1XHU5OTBjXHU5OTA5XHU5OWMxXHU5YWFmXHU5YWIwXHU5YWU2XHU5YjQxXHU5YjQyXHU5Y2Y0XHU5''@;'; put 'put ''Y2Y2XHU5Y2YzXHU5ZWJjXHU5ZjNiXHU5ZjRhXHU1MTA0XHU1MTAwXHU1MGZiXHU1MGY1XHU1MGY5XHU1MTAyXHU1MTA4XHU1MTA5XHU1MTA1XHU1MWRjIl0sWyJiYzQwIiwiXHU1Mjg3XHU1Mjg4XHU1Mjg5XHU1MjhkXHU1MjhhXHU1MmYwXHU1M2IyXHU1NjJlXHU1NjNiXHU1NjM5XHU1NjMy''@;'; put 'put ''XHU1NjNmXHU1NjM0XHU1NjI5XHU1NjUzXHU1NjRlXHU1NjU3XHU1Njc0XHU1NjM2XHU1NjJmXHU1NjMwXHU1ODgwXHU1ODlmXHU1ODllXHU1OGIzXHU1ODljXHU1OGFlXHU1OGE5XHU1OGE2XHU1OTZkXHU1YjA5XHU1YWZiXHU1YjBiXHU1YWY1XHU1YjBjXHU1YjA4XHU1YmVlXHU1YmVjXHU1''@;'; put 'put ''YmU5XHU1YmViXHU1YzY0XHU1YzY1XHU1ZDlkXHU1ZDk0XHU1ZTYyXHU1ZTVmXHU1ZTYxXHU1ZWUyXHU1ZWRhXHU1ZWRmXHU1ZWRkXHU1ZWUzXHU1ZWUwXHU1ZjQ4XHU1ZjcxXHU1ZmI3XHU1ZmI1XHU2MTc2XHU2MTY3XHU2MTZlXHU2MTVkXHU2MTU1XHU2MTgyIl0sWyJiY2ExIiwiXHU2MTdj''@;'; put 'put ''XHU2MTcwXHU2MTZiXHU2MTdlXHU2MWE3XHU2MTkwXHU2MWFiXHU2MThlXHU2MWFjXHU2MTlhXHU2MWE0XHU2MTk0XHU2MWFlXHU2MjJlXHU2NDY5XHU2NDZmXHU2NDc5XHU2NDllXHU2NGIyXHU2NDg4XHU2NDkwXHU2NGIwXHU2NGE1XHU2NDkzXHU2NDk1XHU2NGE5XHU2NDkyXHU2NGFlXHU2''@;'; put 'put ''NGFkXHU2NGFiXHU2NDlhXHU2NGFjXHU2NDk5XHU2NGEyXHU2NGIzXHU2NTc1XHU2NTc3XHU2NTc4XHU2NmFlXHU2NmFiXHU2NmI0XHU2NmIxXHU2YTIzXHU2YTFmXHU2OWU4XHU2YTAxXHU2YTFlXHU2YTE5XHU2OWZkXHU2YTIxXHU2YTEzXHU2YTBhXHU2OWYzXHU2YTAyXHU2YTA1XHU2OWVk''@;'; put 'put ''XHU2YTExXHU2YjUwXHU2YjRlXHU2YmE0XHU2YmM1XHU2YmM2XHU2ZjNmXHU2ZjdjXHU2Zjg0XHU2ZjUxXHU2ZjY2XHU2ZjU0XHU2Zjg2XHU2ZjZkXHU2ZjViXHU2Zjc4XHU2ZjZlXHU2ZjhlXHU2ZjdhXHU2ZjcwXHU2ZjY0XHU2Zjk3XHU2ZjU4XHU2ZWQ1XHU2ZjZmXHU2ZjYwXHU2ZjVmXHU3''@;'; put 'put ''MTlmXHU3MWFjXHU3MWIxXHU3MWE4XHU3MjU2XHU3MjliXHU3MzRlXHU3MzU3XHU3NDY5XHU3NDhiXHU3NDgzIl0sWyJiZDQwIiwiXHU3NDdlXHU3NDgwXHU3NTdmXHU3NjIwXHU3NjI5XHU3NjFmXHU3NjI0XHU3NjI2XHU3NjIxXHU3NjIyXHU3NjlhXHU3NmJhXHU3NmU0XHU3NzhlXHU3Nzg3''@;'; put 'put ''XHU3NzhjXHU3NzkxXHU3NzhiXHU3OGNiXHU3OGM1XHU3OGJhXHU3OGNhXHU3OGJlXHU3OGQ1XHU3OGJjXHU3OGQwXHU3YTNmXHU3YTNjXHU3YTQwXHU3YTNkXHU3YTM3XHU3YTNiXHU3YWFmXHU3YWFlXHU3YmFkXHU3YmIxXHU3YmM0XHU3YmI0XHU3YmM2XHU3YmM3XHU3YmMxXHU3YmEwXHU3''@;'; put 'put ''YmNjXHU3Y2NhXHU3ZGUwXHU3ZGY0XHU3ZGVmXHU3ZGZiXHU3ZGQ4XHU3ZGVjXHU3ZGRkXHU3ZGU4XHU3ZGUzXHU3ZGRhXHU3ZGRlXHU3ZGU5XHU3ZDllXHU3ZGQ5XHU3ZGYyXHU3ZGY5XHU3Zjc1XHU3Zjc3XHU3ZmFmIl0sWyJiZGExIiwiXHU3ZmU5XHU4MDI2XHU4MTliXHU4MTljXHU4MTlk''@;'; put 'put ''XHU4MWEwXHU4MTlhXHU4MTk4XHU4NTE3XHU4NTNkXHU4NTFhXHU4NGVlXHU4NTJjXHU4NTJkXHU4NTEzXHU4NTExXHU4NTIzXHU4NTIxXHU4NTE0XHU4NGVjXHU4NTI1XHU4NGZmXHU4NTA2XHU4NzgyXHU4Nzc0XHU4Nzc2XHU4NzYwXHU4NzY2XHU4Nzc4XHU4NzY4XHU4NzU5XHU4NzU3XHU4''@;'; put 'put ''NzRjXHU4NzUzXHU4ODViXHU4ODVkXHU4OTEwXHU4OTA3XHU4OTEyXHU4OTEzXHU4OTE1XHU4OTBhXHU4YWJjXHU4YWQyXHU4YWM3XHU4YWM0XHU4YTk1XHU4YWNiXHU4YWY4XHU4YWIyXHU4YWM5XHU4YWMyXHU4YWJmXHU4YWIwXHU4YWQ2XHU4YWNkXHU4YWI2XHU4YWI5XHU4YWRiXHU4YzRj''@;'; put 'put ''XHU4YzRlXHU4YzZjXHU4Y2UwXHU4Y2RlXHU4Y2U2XHU4Y2U0XHU4Y2VjXHU4Y2VkXHU4Y2UyXHU4Y2UzXHU4Y2RjXHU4Y2VhXHU4Y2UxXHU4ZDZkXHU4ZDlmXHU4ZGEzXHU4ZTJiXHU4ZTEwXHU4ZTFkXHU4ZTIyXHU4ZTBmXHU4ZTI5XHU4ZTFmXHU4ZTIxXHU4ZTFlXHU4ZWJhXHU4ZjFkXHU4''@;'; put 'put ''ZjFiXHU4ZjFmXHU4ZjI5XHU4ZjI2XHU4ZjJhXHU4ZjFjXHU4ZjFlIl0sWyJiZTQwIiwiXHU4ZjI1XHU5MDY5XHU5MDZlXHU5MDY4XHU5MDZkXHU5MDc3XHU5MTMwXHU5MTJkXHU5MTI3XHU5MTMxXHU5MTg3XHU5MTg5XHU5MThiXHU5MTgzXHU5MmM1XHU5MmJiXHU5MmI3XHU5MmVhXHU5MmFj''@;'; put 'put ''XHU5MmU0XHU5MmMxXHU5MmIzXHU5MmJjXHU5MmQyXHU5MmM3XHU5MmYwXHU5MmIyXHU5NWFkXHU5NWIxXHU5NzA0XHU5NzA2XHU5NzA3XHU5NzA5XHU5NzYwXHU5NzhkXHU5NzhiXHU5NzhmXHU5ODIxXHU5ODJiXHU5ODFjXHU5OGIzXHU5OTBhXHU5OTEzXHU5OTEyXHU5OTE4XHU5OWRkXHU5''@;'; put 'put ''OWQwXHU5OWRmXHU5OWRiXHU5OWQxXHU5OWQ1XHU5OWQyXHU5OWQ5XHU5YWI3XHU5YWVlXHU5YWVmXHU5YjI3XHU5YjQ1XHU5YjQ0XHU5Yjc3XHU5YjZmXHU5ZDA2XHU5ZDA5Il0sWyJiZWExIiwiXHU5ZDAzXHU5ZWE5XHU5ZWJlXHU5ZWNlXHU1OGE4XHU5ZjUyXHU1MTEyXHU1MTE4XHU1MTE0''@;'; put 'put ''XHU1MTEwXHU1MTE1XHU1MTgwXHU1MWFhXHU1MWRkXHU1MjkxXHU1MjkzXHU1MmYzXHU1NjU5XHU1NjZiXHU1Njc5XHU1NjY5XHU1NjY0XHU1Njc4XHU1NjZhXHU1NjY4XHU1NjY1XHU1NjcxXHU1NjZmXHU1NjZjXHU1NjYyXHU1Njc2XHU1OGMxXHU1OGJlXHU1OGM3XHU1OGM1XHU1OTZlXHU1''@;'; put 'put ''YjFkXHU1YjM0XHU1Yjc4XHU1YmYwXHU1YzBlXHU1ZjRhXHU2MWIyXHU2MTkxXHU2MWE5XHU2MThhXHU2MWNkXHU2MWI2XHU2MWJlXHU2MWNhXHU2MWM4XHU2MjMwXHU2NGM1XHU2NGMxXHU2NGNiXHU2NGJiXHU2NGJjXHU2NGRhXHU2NGM0XHU2NGM3XHU2NGMyXHU2NGNkXHU2NGJmXHU2NGQy''@;'; put 'put ''XHU2NGQ0XHU2NGJlXHU2NTc0XHU2NmM2XHU2NmM5XHU2NmI5XHU2NmM0XHU2NmM3XHU2NmI4XHU2YTNkXHU2YTM4XHU2YTNhXHU2YTU5XHU2YTZiXHU2YTU4XHU2YTM5XHU2YTQ0XHU2YTYyXHU2YTYxXHU2YTRiXHU2YTQ3XHU2YTM1XHU2YTVmXHU2YTQ4XHU2YjU5XHU2Yjc3XHU2YzA1XHU2''@;'; put 'put ''ZmMyXHU2ZmIxXHU2ZmExIl0sWyJiZjQwIiwiXHU2ZmMzXHU2ZmE0XHU2ZmMxXHU2ZmE3XHU2ZmIzXHU2ZmMwXHU2ZmI5XHU2ZmI2XHU2ZmE2XHU2ZmEwXHU2ZmI0XHU3MWJlXHU3MWM5XHU3MWQwXHU3MWQyXHU3MWM4XHU3MWQ1XHU3MWI5XHU3MWNlXHU3MWQ5XHU3MWRjXHU3MWMzXHU3MWM0''@;'; put 'put ''XHU3MzY4XHU3NDljXHU3NGEzXHU3NDk4XHU3NDlmXHU3NDllXHU3NGUyXHU3NTBjXHU3NTBkXHU3NjM0XHU3NjM4XHU3NjNhXHU3NmU3XHU3NmU1XHU3N2EwXHU3NzllXHU3NzlmXHU3N2E1XHU3OGU4XHU3OGRhXHU3OGVjXHU3OGU3XHU3OWE2XHU3YTRkXHU3YTRlXHU3YTQ2XHU3YTRjXHU3''@;'; put 'put ''YTRiXHU3YWJhXHU3YmQ5XHU3YzExXHU3YmM5XHU3YmU0XHU3YmRiXHU3YmUxXHU3YmU5XHU3YmU2XHU3Y2Q1XHU3Y2Q2XHU3ZTBhIl0sWyJiZmExIiwiXHU3ZTExXHU3ZTA4XHU3ZTFiXHU3ZTIzXHU3ZTFlXHU3ZTFkXHU3ZTA5XHU3ZTEwXHU3Zjc5XHU3ZmIyXHU3ZmYwXHU3ZmYxXHU3ZmVl''@;'; put 'put ''XHU4MDI4XHU4MWIzXHU4MWE5XHU4MWE4XHU4MWZiXHU4MjA4XHU4MjU4XHU4MjU5XHU4NTRhXHU4NTU5XHU4NTQ4XHU4NTY4XHU4NTY5XHU4NTQzXHU4NTQ5XHU4NTZkXHU4NTZhXHU4NTVlXHU4NzgzXHU4NzlmXHU4NzllXHU4N2EyXHU4NzhkXHU4ODYxXHU4OTJhXHU4OTMyXHU4OTI1XHU4''@;'; put 'put ''OTJiXHU4OTIxXHU4OWFhXHU4OWE2XHU4YWU2XHU4YWZhXHU4YWViXHU4YWYxXHU4YjAwXHU4YWRjXHU4YWU3XHU4YWVlXHU4YWZlXHU4YjAxXHU4YjAyXHU4YWY3XHU4YWVkXHU4YWYzXHU4YWY2XHU4YWZjXHU4YzZiXHU4YzZkXHU4YzkzXHU4Y2Y0XHU4ZTQ0XHU4ZTMxXHU4ZTM0XHU4ZTQy''@;'; put 'put ''XHU4ZTM5XHU4ZTM1XHU4ZjNiXHU4ZjJmXHU4ZjM4XHU4ZjMzXHU4ZmE4XHU4ZmE2XHU5MDc1XHU5MDc0XHU5MDc4XHU5MDcyXHU5MDdjXHU5MDdhXHU5MTM0XHU5MTkyXHU5MzIwXHU5MzM2XHU5MmY4XHU5MzMzXHU5MzJmXHU5MzIyXHU5MmZjXHU5MzJiXHU5MzA0XHU5MzFhIl0sWyJjMDQw''@;'; put 'put ''IiwiXHU5MzEwXHU5MzI2XHU5MzIxXHU5MzE1XHU5MzJlXHU5MzE5XHU5NWJiXHU5NmE3XHU5NmE4XHU5NmFhXHU5NmQ1XHU5NzBlXHU5NzExXHU5NzE2XHU5NzBkXHU5NzEzXHU5NzBmXHU5NzViXHU5NzVjXHU5NzY2XHU5Nzk4XHU5ODMwXHU5ODM4XHU5ODNiXHU5ODM3XHU5ODJkXHU5ODM5''@;'; put 'put ''XHU5ODI0XHU5OTEwXHU5OTI4XHU5OTFlXHU5OTFiXHU5OTIxXHU5OTFhXHU5OWVkXHU5OWUyXHU5OWYxXHU5YWI4XHU5YWJjXHU5YWZiXHU5YWVkXHU5YjI4XHU5YjkxXHU5ZDE1XHU5ZDIzXHU5ZDI2XHU5ZDI4XHU5ZDEyXHU5ZDFiXHU5ZWQ4XHU5ZWQ0XHU5ZjhkXHU5ZjljXHU1MTJhXHU1''@;'; put 'put ''MTFmXHU1MTIxXHU1MTMyXHU1MmY1XHU1NjhlXHU1NjgwXHU1NjkwXHU1Njg1XHU1Njg3Il0sWyJjMGExIiwiXHU1NjhmXHU1OGQ1XHU1OGQzXHU1OGQxXHU1OGNlXHU1YjMwXHU1YjJhXHU1YjI0XHU1YjdhXHU1YzM3XHU1YzY4XHU1ZGJjXHU1ZGJhXHU1ZGJkXHU1ZGI4XHU1ZTZiXHU1ZjRj''@;'; put 'put ''XHU1ZmJkXHU2MWM5XHU2MWMyXHU2MWM3XHU2MWU2XHU2MWNiXHU2MjMyXHU2MjM0XHU2NGNlXHU2NGNhXHU2NGQ4XHU2NGUwXHU2NGYwXHU2NGU2XHU2NGVjXHU2NGYxXHU2NGUyXHU2NGVkXHU2NTgyXHU2NTgzXHU2NmQ5XHU2NmQ2XHU2YTgwXHU2YTk0XHU2YTg0XHU2YWEyXHU2YTljXHU2''@;'; put 'put ''YWRiXHU2YWEzXHU2YTdlXHU2YTk3XHU2YTkwXHU2YWEwXHU2YjVjXHU2YmFlXHU2YmRhXHU2YzA4XHU2ZmQ4XHU2ZmYxXHU2ZmRmXHU2ZmUwXHU2ZmRiXHU2ZmU0XHU2ZmViXHU2ZmVmXHU2ZjgwXHU2ZmVjXHU2ZmUxXHU2ZmU5XHU2ZmQ1XHU2ZmVlXHU2ZmYwXHU3MWU3XHU3MWRmXHU3MWVl''@;'; put 'put ''XHU3MWU2XHU3MWU1XHU3MWVkXHU3MWVjXHU3MWY0XHU3MWUwXHU3MjM1XHU3MjQ2XHU3MzcwXHU3MzcyXHU3NGE5XHU3NGIwXHU3NGE2XHU3NGE4XHU3NjQ2XHU3NjQyXHU3NjRjXHU3NmVhXHU3N2IzXHU3N2FhXHU3N2IwXHU3N2FjIl0sWyJjMTQwIiwiXHU3N2E3XHU3N2FkXHU3N2VmXHU3''@;'; put 'put ''OGY3XHU3OGZhXHU3OGY0XHU3OGVmXHU3OTAxXHU3OWE3XHU3OWFhXHU3YTU3XHU3YWJmXHU3YzA3XHU3YzBkXHU3YmZlXHU3YmY3XHU3YzBjXHU3YmUwXHU3Y2UwXHU3Y2RjXHU3Y2RlXHU3Y2UyXHU3Y2RmXHU3Y2Q5XHU3Y2RkXHU3ZTJlXHU3ZTNlXHU3ZTQ2XHU3ZTM3XHU3ZTMyXHU3ZTQz''@;'; put 'put ''XHU3ZTJiXHU3ZTNkXHU3ZTMxXHU3ZTQ1XHU3ZTQxXHU3ZTM0XHU3ZTM5XHU3ZTQ4XHU3ZTM1XHU3ZTNmXHU3ZTJmXHU3ZjQ0XHU3ZmYzXHU3ZmZjXHU4MDcxXHU4MDcyXHU4MDcwXHU4MDZmXHU4MDczXHU4MWM2XHU4MWMzXHU4MWJhXHU4MWMyXHU4MWMwXHU4MWJmXHU4MWJkXHU4MWM5XHU4''@;'; put 'put ''MWJlXHU4MWU4XHU4MjA5XHU4MjcxXHU4NWFhIl0sWyJjMWExIiwiXHU4NTg0XHU4NTdlXHU4NTljXHU4NTkxXHU4NTk0XHU4NWFmXHU4NTliXHU4NTg3XHU4NWE4XHU4NThhXHU4NjY3XHU4N2MwXHU4N2QxXHU4N2IzXHU4N2QyXHU4N2M2XHU4N2FiXHU4N2JiXHU4N2JhXHU4N2M4XHU4N2Ni''@;'; put 'put ''XHU4OTNiXHU4OTM2XHU4OTQ0XHU4OTM4XHU4OTNkXHU4OWFjXHU4YjBlXHU4YjE3XHU4YjE5XHU4YjFiXHU4YjBhXHU4YjIwXHU4YjFkXHU4YjA0XHU4YjEwXHU4YzQxXHU4YzNmXHU4YzczXHU4Y2ZhXHU4Y2ZkXHU4Y2ZjXHU4Y2Y4XHU4Y2ZiXHU4ZGE4XHU4ZTQ5XHU4ZTRiXHU4ZTQ4XHU4''@;'; put 'put ''ZTRhXHU4ZjQ0XHU4ZjNlXHU4ZjQyXHU4ZjQ1XHU4ZjNmXHU5MDdmXHU5MDdkXHU5MDg0XHU5MDgxXHU5MDgyXHU5MDgwXHU5MTM5XHU5MWEzXHU5MTllXHU5MTljXHU5MzRkXHU5MzgyXHU5MzI4XHU5Mzc1XHU5MzRhXHU5MzY1XHU5MzRiXHU5MzE4XHU5MzdlXHU5MzZjXHU5MzViXHU5Mzcw''@;'; put 'put ''XHU5MzVhXHU5MzU0XHU5NWNhXHU5NWNiXHU5NWNjXHU5NWM4XHU5NWM2XHU5NmIxXHU5NmI4XHU5NmQ2XHU5NzFjXHU5NzFlXHU5N2EwXHU5N2QzXHU5ODQ2XHU5OGI2XHU5OTM1XHU5YTAxIl0sWyJjMjQwIiwiXHU5OWZmXHU5YmFlXHU5YmFiXHU5YmFhXHU5YmFkXHU5ZDNiXHU5ZDNmXHU5''@;'; put 'put ''ZThiXHU5ZWNmXHU5ZWRlXHU5ZWRjXHU5ZWRkXHU5ZWRiXHU5ZjNlXHU5ZjRiXHU1M2UyXHU1Njk1XHU1NmFlXHU1OGQ5XHU1OGQ4XHU1YjM4XHU1ZjVkXHU2MWUzXHU2MjMzXHU2NGY0XHU2NGYyXHU2NGZlXHU2NTA2XHU2NGZhXHU2NGZiXHU2NGY3XHU2NWI3XHU2NmRjXHU2NzI2XHU2YWIz''@;'; put 'put ''XHU2YWFjXHU2YWMzXHU2YWJiXHU2YWI4XHU2YWMyXHU2YWFlXHU2YWFmXHU2YjVmXHU2Yjc4XHU2YmFmXHU3MDA5XHU3MDBiXHU2ZmZlXHU3MDA2XHU2ZmZhXHU3MDExXHU3MDBmXHU3MWZiXHU3MWZjXHU3MWZlXHU3MWY4XHU3Mzc3XHU3Mzc1XHU3NGE3XHU3NGJmXHU3NTE1XHU3NjU2XHU3''@;'; put 'put ''NjU4Il0sWyJjMmExIiwiXHU3NjUyXHU3N2JkXHU3N2JmXHU3N2JiXHU3N2JjXHU3OTBlXHU3OWFlXHU3YTYxXHU3YTYyXHU3YTYwXHU3YWM0XHU3YWM1XHU3YzJiXHU3YzI3XHU3YzJhXHU3YzFlXHU3YzIzXHU3YzIxXHU3Y2U3XHU3ZTU0XHU3ZTU1XHU3ZTVlXHU3ZTVhXHU3ZTYxXHU3ZTUy''@;'; put 'put ''XHU3ZTU5XHU3ZjQ4XHU3ZmY5XHU3ZmZiXHU4MDc3XHU4MDc2XHU4MWNkXHU4MWNmXHU4MjBhXHU4NWNmXHU4NWE5XHU4NWNkXHU4NWQwXHU4NWM5XHU4NWIwXHU4NWJhXHU4NWI5XHU4NWE2XHU4N2VmXHU4N2VjXHU4N2YyXHU4N2UwXHU4OTg2XHU4OWIyXHU4OWY0XHU4YjI4XHU4YjM5XHU4''@;'; put 'put ''YjJjXHU4YjJiXHU4YzUwXHU4ZDA1XHU4ZTU5XHU4ZTYzXHU4ZTY2XHU4ZTY0XHU4ZTVmXHU4ZTU1XHU4ZWMwXHU4ZjQ5XHU4ZjRkXHU5MDg3XHU5MDgzXHU5MDg4XHU5MWFiXHU5MWFjXHU5MWQwXHU5Mzk0XHU5MzhhXHU5Mzk2XHU5M2EyXHU5M2IzXHU5M2FlXHU5M2FjXHU5M2IwXHU5Mzk4''@;'; put 'put ''XHU5MzlhXHU5Mzk3XHU5NWQ0XHU5NWQ2XHU5NWQwXHU5NWQ1XHU5NmUyXHU5NmRjXHU5NmQ5XHU5NmRiXHU5NmRlXHU5NzI0XHU5N2EzXHU5N2E2Il0sWyJjMzQwIiwiXHU5N2FkXHU5N2Y5XHU5ODRkXHU5ODRmXHU5ODRjXHU5ODRlXHU5ODUzXHU5OGJhXHU5OTNlXHU5OTNmXHU5OTNkXHU5''@;'; put 'put ''OTJlXHU5OWE1XHU5YTBlXHU5YWMxXHU5YjAzXHU5YjA2XHU5YjRmXHU5YjRlXHU5YjRkXHU5YmNhXHU5YmM5XHU5YmZkXHU5YmM4XHU5YmMwXHU5ZDUxXHU5ZDVkXHU5ZDYwXHU5ZWUwXHU5ZjE1XHU5ZjJjXHU1MTMzXHU1NmE1XHU1OGRlXHU1OGRmXHU1OGUyXHU1YmY1XHU5ZjkwXHU1ZWVj''@;'; put 'put ''XHU2MWYyXHU2MWY3XHU2MWY2XHU2MWY1XHU2NTAwXHU2NTBmXHU2NmUwXHU2NmRkXHU2YWU1XHU2YWRkXHU2YWRhXHU2YWQzXHU3MDFiXHU3MDFmXHU3MDI4XHU3MDFhXHU3MDFkXHU3MDE1XHU3MDE4XHU3MjA2XHU3MjBkXHU3MjU4XHU3MmEyXHU3Mzc4Il0sWyJjM2ExIiwiXHU3MzdhXHU3''@;'; put 'put ''NGJkXHU3NGNhXHU3NGUzXHU3NTg3XHU3NTg2XHU3NjVmXHU3NjYxXHU3N2M3XHU3OTE5XHU3OWIxXHU3YTZiXHU3YTY5XHU3YzNlXHU3YzNmXHU3YzM4XHU3YzNkXHU3YzM3XHU3YzQwXHU3ZTZiXHU3ZTZkXHU3ZTc5XHU3ZTY5XHU3ZTZhXHU3Zjg1XHU3ZTczXHU3ZmI2XHU3ZmI5XHU3ZmI4''@;'; put 'put ''XHU4MWQ4XHU4NWU5XHU4NWRkXHU4NWVhXHU4NWQ1XHU4NWU0XHU4NWU1XHU4NWY3XHU4N2ZiXHU4ODA1XHU4ODBkXHU4N2Y5XHU4N2ZlXHU4OTYwXHU4OTVmXHU4OTU2XHU4OTVlXHU4YjQxXHU4YjVjXHU4YjU4XHU4YjQ5XHU4YjVhXHU4YjRlXHU4YjRmXHU4YjQ2XHU4YjU5XHU4ZDA4XHU4''@;'; put 'put ''ZDBhXHU4ZTdjXHU4ZTcyXHU4ZTg3XHU4ZTc2XHU4ZTZjXHU4ZTdhXHU4ZTc0XHU4ZjU0XHU4ZjRlXHU4ZmFkXHU5MDhhXHU5MDhiXHU5MWIxXHU5MWFlXHU5M2UxXHU5M2QxXHU5M2RmXHU5M2MzXHU5M2M4XHU5M2RjXHU5M2RkXHU5M2Q2XHU5M2UyXHU5M2NkXHU5M2Q4XHU5M2U0XHU5M2Q3''@;'; put 'put ''XHU5M2U4XHU5NWRjXHU5NmI0XHU5NmUzXHU5NzJhXHU5NzI3XHU5NzYxXHU5N2RjXHU5N2ZiXHU5ODVlIl0sWyJjNDQwIiwiXHU5ODU4XHU5ODViXHU5OGJjXHU5OTQ1XHU5OTQ5XHU5YTE2XHU5YTE5XHU5YjBkXHU5YmU4XHU5YmU3XHU5YmQ2XHU5YmRiXHU5ZDg5XHU5ZDYxXHU5ZDcyXHU5''@;'; put 'put ''ZDZhXHU5ZDZjXHU5ZTkyXHU5ZTk3XHU5ZTkzXHU5ZWI0XHU1MmY4XHU1NmE4XHU1NmI3XHU1NmI2XHU1NmI0XHU1NmJjXHU1OGU0XHU1YjQwXHU1YjQzXHU1YjdkXHU1YmY2XHU1ZGM5XHU2MWY4XHU2MWZhXHU2NTE4XHU2NTE0XHU2NTE5XHU2NmU2XHU2NzI3XHU2YWVjXHU3MDNlXHU3MDMw''@;'; put 'put ''XHU3MDMyXHU3MjEwXHU3MzdiXHU3NGNmXHU3NjYyXHU3NjY1XHU3OTI2XHU3OTJhXHU3OTJjXHU3OTJiXHU3YWM3XHU3YWY2XHU3YzRjXHU3YzQzXHU3YzRkXHU3Y2VmXHU3Y2YwXHU4ZmFlXHU3ZTdkXHU3ZTdjIl0sWyJjNGExIiwiXHU3ZTgyXHU3ZjRjXHU4MDAwXHU4MWRhXHU4MjY2XHU4''@;'; put 'put ''NWZiXHU4NWY5XHU4NjExXHU4NWZhXHU4NjA2XHU4NjBiXHU4NjA3XHU4NjBhXHU4ODE0XHU4ODE1XHU4OTY0XHU4OWJhXHU4OWY4XHU4YjcwXHU4YjZjXHU4YjY2XHU4YjZmXHU4YjVmXHU4YjZiXHU4ZDBmXHU4ZDBkXHU4ZTg5XHU4ZTgxXHU4ZTg1XHU4ZTgyXHU5MWI0XHU5MWNiXHU5NDE4''@;'; put 'put ''XHU5NDAzXHU5M2ZkXHU5NWUxXHU5NzMwXHU5OGM0XHU5OTUyXHU5OTUxXHU5OWE4XHU5YTJiXHU5YTMwXHU5YTM3XHU5YTM1XHU5YzEzXHU5YzBkXHU5ZTc5XHU5ZWI1XHU5ZWU4XHU5ZjJmXHU5ZjVmXHU5ZjYzXHU5ZjYxXHU1MTM3XHU1MTM4XHU1NmMxXHU1NmMwXHU1NmMyXHU1OTE0XHU1''@;'; put 'put ''YzZjXHU1ZGNkXHU2MWZjXHU2MWZlXHU2NTFkXHU2NTFjXHU2NTk1XHU2NmU5XHU2YWZiXHU2YjA0XHU2YWZhXHU2YmIyXHU3MDRjXHU3MjFiXHU3MmE3XHU3NGQ2XHU3NGQ0XHU3NjY5XHU3N2QzXHU3YzUwXHU3ZThmXHU3ZThjXHU3ZmJjXHU4NjE3XHU4NjJkXHU4NjFhXHU4ODIzXHU4ODIy''@;'; put 'put ''XHU4ODIxXHU4ODFmXHU4OTZhXHU4OTZjXHU4OWJkXHU4Yjc0Il0sWyJjNTQwIiwiXHU4Yjc3XHU4YjdkXHU4ZDEzXHU4ZThhXHU4ZThkXHU4ZThiXHU4ZjVmXHU4ZmFmXHU5MWJhXHU5NDJlXHU5NDMzXHU5NDM1XHU5NDNhXHU5NDM4XHU5NDMyXHU5NDJiXHU5NWUyXHU5NzM4XHU5NzM5XHU5''@;'; put 'put ''NzMyXHU5N2ZmXHU5ODY3XHU5ODY1XHU5OTU3XHU5YTQ1XHU5YTQzXHU5YTQwXHU5YTNlXHU5YWNmXHU5YjU0XHU5YjUxXHU5YzJkXHU5YzI1XHU5ZGFmXHU5ZGI0XHU5ZGMyXHU5ZGI4XHU5ZTlkXHU5ZWVmXHU5ZjE5XHU5ZjVjXHU5ZjY2XHU5ZjY3XHU1MTNjXHU1MTNiXHU1NmM4XHU1NmNh''@;'; put 'put ''XHU1NmM5XHU1YjdmXHU1ZGQ0XHU1ZGQyXHU1ZjRlXHU2MWZmXHU2NTI0XHU2YjBhXHU2YjYxXHU3MDUxXHU3MDU4XHU3MzgwXHU3NGU0XHU3NThhXHU3NjZlXHU3NjZjIl0sWyJjNWExIiwiXHU3OWIzXHU3YzYwXHU3YzVmXHU4MDdlXHU4MDdkXHU4MWRmXHU4OTcyXHU4OTZmXHU4OWZjXHU4''@;'; put 'put ''YjgwXHU4ZDE2XHU4ZDE3XHU4ZTkxXHU4ZTkzXHU4ZjYxXHU5MTQ4XHU5NDQ0XHU5NDUxXHU5NDUyXHU5NzNkXHU5NzNlXHU5N2MzXHU5N2MxXHU5ODZiXHU5OTU1XHU5YTU1XHU5YTRkXHU5YWQyXHU5YjFhXHU5YzQ5XHU5YzMxXHU5YzNlXHU5YzNiXHU5ZGQzXHU5ZGQ3XHU5ZjM0XHU5ZjZj''@;'; put 'put ''XHU5ZjZhXHU5Zjk0XHU1NmNjXHU1ZGQ2XHU2MjAwXHU2NTIzXHU2NTJiXHU2NTJhXHU2NmVjXHU2YjEwXHU3NGRhXHU3YWNhXHU3YzY0XHU3YzYzXHU3YzY1XHU3ZTkzXHU3ZTk2XHU3ZTk0XHU4MWUyXHU4NjM4XHU4NjNmXHU4ODMxXHU4YjhhXHU5MDkwXHU5MDhmXHU5NDYzXHU5NDYwXHU5''@;'; put 'put ''NDY0XHU5NzY4XHU5ODZmXHU5OTVjXHU5YTVhXHU5YTViXHU5YTU3XHU5YWQzXHU5YWQ0XHU5YWQxXHU5YzU0XHU5YzU3XHU5YzU2XHU5ZGU1XHU5ZTlmXHU5ZWY0XHU1NmQxXHU1OGU5XHU2NTJjXHU3MDVlXHU3NjcxXHU3NjcyXHU3N2Q3XHU3ZjUwXHU3Zjg4XHU4ODM2XHU4ODM5XHU4ODYy''@;'; put 'put ''XHU4YjkzXHU4YjkyIl0sWyJjNjQwIiwiXHU4Yjk2XHU4Mjc3XHU4ZDFiXHU5MWMwXHU5NDZhXHU5NzQyXHU5NzQ4XHU5NzQ0XHU5N2M2XHU5ODcwXHU5YTVmXHU5YjIyXHU5YjU4XHU5YzVmXHU5ZGY5XHU5ZGZhXHU5ZTdjXHU5ZTdkXHU5ZjA3XHU5Zjc3XHU5ZjcyXHU1ZWYzXHU2YjE2XHU3''@;'; put 'put ''MDYzXHU3YzZjXHU3YzZlXHU4ODNiXHU4OWMwXHU4ZWExXHU5MWMxXHU5NDcyXHU5NDcwXHU5ODcxXHU5OTVlXHU5YWQ2XHU5YjIzXHU5ZWNjXHU3MDY0XHU3N2RhXHU4YjlhXHU5NDc3XHU5N2M5XHU5YTYyXHU5YTY1XHU3ZTljXHU4YjljXHU4ZWFhXHU5MWM1XHU5NDdkXHU5NDdlXHU5NDdj''@;'; put 'put ''XHU5Yzc3XHU5Yzc4XHU5ZWY3XHU4YzU0XHU5NDdmXHU5ZTFhXHU3MjI4XHU5YTZhXHU5YjMxXHU5ZTFiXHU5ZTFlXHU3YzcyIl0sWyJjOTQwIiwiXHU0ZTQyXHU0ZTVjXHU1MWY1XHU1MzFhXHU1MzgyXHU0ZTA3XHU0ZTBjXHU0ZTQ3XHU0ZThkXHU1NmQ3XHVmYTBjXHU1YzZlXHU1ZjczXHU0''@;'; put 'put ''ZTBmXHU1MTg3XHU0ZTBlXHU0ZTJlXHU0ZTkzXHU0ZWMyXHU0ZWM5XHU0ZWM4XHU1MTk4XHU1MmZjXHU1MzZjXHU1M2I5XHU1NzIwXHU1OTAzXHU1OTJjXHU1YzEwXHU1ZGZmXHU2NWUxXHU2YmIzXHU2YmNjXHU2YzE0XHU3MjNmXHU0ZTMxXHU0ZTNjXHU0ZWU4XHU0ZWRjXHU0ZWU5XHU0ZWUx''@;'; put 'put ''XHU0ZWRkXHU0ZWRhXHU1MjBjXHU1MzFjXHU1MzRjXHU1NzIyXHU1NzIzXHU1OTE3XHU1OTJmXHU1YjgxXHU1Yjg0XHU1YzEyXHU1YzNiXHU1Yzc0XHU1YzczXHU1ZTA0XHU1ZTgwXHU1ZTgyXHU1ZmM5XHU2MjA5XHU2MjUwXHU2YzE1Il0sWyJjOWExIiwiXHU2YzM2XHU2YzQzXHU2YzNmXHU2''@;'; put 'put ''YzNiXHU3MmFlXHU3MmIwXHU3MzhhXHU3OWI4XHU4MDhhXHU5NjFlXHU0ZjBlXHU0ZjE4XHU0ZjJjXHU0ZWY1XHU0ZjE0XHU0ZWYxXHU0ZjAwXHU0ZWY3XHU0ZjA4XHU0ZjFkXHU0ZjAyXHU0ZjA1XHU0ZjIyXHU0ZjEzXHU0ZjA0XHU0ZWY0XHU0ZjEyXHU1MWIxXHU1MjEzXHU1MjA5XHU1MjEw''@;'; put 'put ''XHU1MmE2XHU1MzIyXHU1MzFmXHU1MzRkXHU1MzhhXHU1NDA3XHU1NmUxXHU1NmRmXHU1NzJlXHU1NzJhXHU1NzM0XHU1OTNjXHU1OTgwXHU1OTdjXHU1OTg1XHU1OTdiXHU1OTdlXHU1OTc3XHU1OTdmXHU1YjU2XHU1YzE1XHU1YzI1XHU1YzdjXHU1YzdhXHU1YzdiXHU1YzdlXHU1ZGRmXHU1''@;'; put 'put ''ZTc1XHU1ZTg0XHU1ZjAyXHU1ZjFhXHU1Zjc0XHU1ZmQ1XHU1ZmQ0XHU1ZmNmXHU2MjVjXHU2MjVlXHU2MjY0XHU2MjYxXHU2MjY2XHU2MjYyXHU2MjU5XHU2MjYwXHU2MjVhXHU2MjY1XHU2NWVmXHU2NWVlXHU2NzNlXHU2NzM5XHU2NzM4XHU2NzNiXHU2NzNhXHU2NzNmXHU2NzNjXHU2NzMz''@;'; put 'put ''XHU2YzE4XHU2YzQ2XHU2YzUyXHU2YzVjXHU2YzRmXHU2YzRhXHU2YzU0XHU2YzRiIl0sWyJjYTQwIiwiXHU2YzRjXHU3MDcxXHU3MjVlXHU3MmI0XHU3MmI1XHU3MzhlXHU3NTJhXHU3NjdmXHU3YTc1XHU3ZjUxXHU4Mjc4XHU4MjdjXHU4MjgwXHU4MjdkXHU4MjdmXHU4NjRkXHU4OTdlXHU5''@;'; put 'put ''MDk5XHU5MDk3XHU5MDk4XHU5MDliXHU5MDk0XHU5NjIyXHU5NjI0XHU5NjIwXHU5NjIzXHU0ZjU2XHU0ZjNiXHU0ZjYyXHU0ZjQ5XHU0ZjUzXHU0ZjY0XHU0ZjNlXHU0ZjY3XHU0ZjUyXHU0ZjVmXHU0ZjQxXHU0ZjU4XHU0ZjJkXHU0ZjMzXHU0ZjNmXHU0ZjYxXHU1MThmXHU1MWI5XHU1MjFj''@;'; put 'put ''XHU1MjFlXHU1MjIxXHU1MmFkXHU1MmFlXHU1MzA5XHU1MzYzXHU1MzcyXHU1MzhlXHU1MzhmXHU1NDMwXHU1NDM3XHU1NDJhXHU1NDU0XHU1NDQ1XHU1NDE5XHU1NDFjXHU1NDI1XHU1NDE4Il0sWyJjYWExIiwiXHU1NDNkXHU1NDRmXHU1NDQxXHU1NDI4XHU1NDI0XHU1NDQ3XHU1NmVlXHU1''@;'; put 'put ''NmU3XHU1NmU1XHU1NzQxXHU1NzQ1XHU1NzRjXHU1NzQ5XHU1NzRiXHU1NzUyXHU1OTA2XHU1OTQwXHU1OWE2XHU1OTk4XHU1OWEwXHU1OTk3XHU1OThlXHU1OWEyXHU1OTkwXHU1OThmXHU1OWE3XHU1OWExXHU1YjhlXHU1YjkyXHU1YzI4XHU1YzJhXHU1YzhkXHU1YzhmXHU1Yzg4XHU1Yzhi''@;'; put 'put ''XHU1Yzg5XHU1YzkyXHU1YzhhXHU1Yzg2XHU1YzkzXHU1Yzk1XHU1ZGUwXHU1ZTBhXHU1ZTBlXHU1ZThiXHU1ZTg5XHU1ZThjXHU1ZTg4XHU1ZThkXHU1ZjA1XHU1ZjFkXHU1Zjc4XHU1Zjc2XHU1ZmQyXHU1ZmQxXHU1ZmQwXHU1ZmVkXHU1ZmU4XHU1ZmVlXHU1ZmYzXHU1ZmUxXHU1ZmU0XHU1''@;'; put 'put ''ZmUzXHU1ZmZhXHU1ZmVmXHU1ZmY3XHU1ZmZiXHU2MDAwXHU1ZmY0XHU2MjNhXHU2MjgzXHU2MjhjXHU2MjhlXHU2MjhmXHU2Mjk0XHU2Mjg3XHU2MjcxXHU2MjdiXHU2MjdhXHU2MjcwXHU2MjgxXHU2Mjg4XHU2Mjc3XHU2MjdkXHU2MjcyXHU2Mjc0XHU2NTM3XHU2NWYwXHU2NWY0XHU2NWYz''@;'; put 'put ''XHU2NWYyXHU2NWY1XHU2NzQ1XHU2NzQ3Il0sWyJjYjQwIiwiXHU2NzU5XHU2NzU1XHU2NzRjXHU2NzQ4XHU2NzVkXHU2NzRkXHU2NzVhXHU2NzRiXHU2YmQwXHU2YzE5XHU2YzFhXHU2Yzc4XHU2YzY3XHU2YzZiXHU2Yzg0XHU2YzhiXHU2YzhmXHU2YzcxXHU2YzZmXHU2YzY5XHU2YzlhXHU2''@;'; put 'put ''YzZkXHU2Yzg3XHU2Yzk1XHU2YzljXHU2YzY2XHU2YzczXHU2YzY1XHU2YzdiXHU2YzhlXHU3MDc0XHU3MDdhXHU3MjYzXHU3MmJmXHU3MmJkXHU3MmMzXHU3MmM2XHU3MmMxXHU3MmJhXHU3MmM1XHU3Mzk1XHU3Mzk3XHU3MzkzXHU3Mzk0XHU3MzkyXHU3NTNhXHU3NTM5XHU3NTk0XHU3NTk1''@;'; put 'put ''XHU3NjgxXHU3OTNkXHU4MDM0XHU4MDk1XHU4MDk5XHU4MDkwXHU4MDkyXHU4MDljXHU4MjkwXHU4MjhmXHU4Mjg1XHU4MjhlXHU4MjkxXHU4MjkzIl0sWyJjYmExIiwiXHU4MjhhXHU4MjgzXHU4Mjg0XHU4Yzc4XHU4ZmM5XHU4ZmJmXHU5MDlmXHU5MGExXHU5MGE1XHU5MDllXHU5MGE3XHU5''@;'; put 'put ''MGEwXHU5NjMwXHU5NjI4XHU5NjJmXHU5NjJkXHU0ZTMzXHU0Zjk4XHU0ZjdjXHU0Zjg1XHU0ZjdkXHU0ZjgwXHU0Zjg3XHU0Zjc2XHU0Zjc0XHU0Zjg5XHU0Zjg0XHU0Zjc3XHU0ZjRjXHU0Zjk3XHU0ZjZhXHU0ZjlhXHU0Zjc5XHU0ZjgxXHU0Zjc4XHU0ZjkwXHU0ZjljXHU0Zjk0XHU0Zjll''@;'; put 'put ''XHU0ZjkyXHU0ZjgyXHU0Zjk1XHU0ZjZiXHU0ZjZlXHU1MTllXHU1MWJjXHU1MWJlXHU1MjM1XHU1MjMyXHU1MjMzXHU1MjQ2XHU1MjMxXHU1MmJjXHU1MzBhXHU1MzBiXHU1MzNjXHU1MzkyXHU1Mzk0XHU1NDg3XHU1NDdmXHU1NDgxXHU1NDkxXHU1NDgyXHU1NDg4XHU1NDZiXHU1NDdhXHU1''@;'; put 'put ''NDdlXHU1NDY1XHU1NDZjXHU1NDc0XHU1NDY2XHU1NDhkXHU1NDZmXHU1NDYxXHU1NDYwXHU1NDk4XHU1NDYzXHU1NDY3XHU1NDY0XHU1NmY3XHU1NmY5XHU1NzZmXHU1NzcyXHU1NzZkXHU1NzZiXHU1NzcxXHU1NzcwXHU1Nzc2XHU1NzgwXHU1Nzc1XHU1NzdiXHU1NzczXHU1Nzc0XHU1NzYy''@;'; put 'put ''Il0sWyJjYzQwIiwiXHU1NzY4XHU1NzdkXHU1OTBjXHU1OTQ1XHU1OWI1XHU1OWJhXHU1OWNmXHU1OWNlXHU1OWIyXHU1OWNjXHU1OWMxXHU1OWI2XHU1OWJjXHU1OWMzXHU1OWQ2XHU1OWIxXHU1OWJkXHU1OWMwXHU1OWM4XHU1OWI0XHU1OWM3XHU1YjYyXHU1YjY1XHU1YjkzXHU1Yjk1XHU1''@;'; put 'put ''YzQ0XHU1YzQ3XHU1Y2FlXHU1Y2E0XHU1Y2EwXHU1Y2I1XHU1Y2FmXHU1Y2E4XHU1Y2FjXHU1YzlmXHU1Y2EzXHU1Y2FkXHU1Y2EyXHU1Y2FhXHU1Y2E3XHU1YzlkXHU1Y2E1XHU1Y2I2XHU1Y2IwXHU1Y2E2XHU1ZTE3XHU1ZTE0XHU1ZTE5XHU1ZjI4XHU1ZjIyXHU1ZjIzXHU1ZjI0XHU1ZjU0''@;'; put 'put ''XHU1ZjgyXHU1ZjdlXHU1ZjdkXHU1ZmRlXHU1ZmU1XHU2MDJkXHU2MDI2XHU2MDE5XHU2MDMyXHU2MDBiIl0sWyJjY2ExIiwiXHU2MDM0XHU2MDBhXHU2MDE3XHU2MDMzXHU2MDFhXHU2MDFlXHU2MDJjXHU2MDIyXHU2MDBkXHU2MDEwXHU2MDJlXHU2MDEzXHU2MDExXHU2MDBjXHU2MDA5XHU2''@;'; put 'put ''MDFjXHU2MjE0XHU2MjNkXHU2MmFkXHU2MmI0XHU2MmQxXHU2MmJlXHU2MmFhXHU2MmI2XHU2MmNhXHU2MmFlXHU2MmIzXHU2MmFmXHU2MmJiXHU2MmE5XHU2MmIwXHU2MmI4XHU2NTNkXHU2NWE4XHU2NWJiXHU2NjA5XHU2NWZjXHU2NjA0XHU2NjEyXHU2NjA4XHU2NWZiXHU2NjAzXHU2NjBi''@;'; put 'put ''XHU2NjBkXHU2NjA1XHU2NWZkXHU2NjExXHU2NjEwXHU2NmY2XHU2NzBhXHU2Nzg1XHU2NzZjXHU2NzhlXHU2NzkyXHU2Nzc2XHU2NzdiXHU2Nzk4XHU2Nzg2XHU2Nzg0XHU2Nzc0XHU2NzhkXHU2NzhjXHU2NzdhXHU2NzlmXHU2NzkxXHU2Nzk5XHU2NzgzXHU2NzdkXHU2NzgxXHU2Nzc4XHU2''@;'; put 'put ''Nzc5XHU2Nzk0XHU2YjI1XHU2YjgwXHU2YjdlXHU2YmRlXHU2YzFkXHU2YzkzXHU2Y2VjXHU2Y2ViXHU2Y2VlXHU2Y2Q5XHU2Y2I2XHU2Y2Q0XHU2Y2FkXHU2Y2U3XHU2Y2I3XHU2Y2QwXHU2Y2MyXHU2Y2JhXHU2Y2MzXHU2Y2M2XHU2Y2VkXHU2Y2YyIl0sWyJjZDQwIiwiXHU2Y2QyXHU2Y2Rk''@;'; put 'put ''XHU2Y2I0XHU2YzhhXHU2YzlkXHU2YzgwXHU2Y2RlXHU2Y2MwXHU2ZDMwXHU2Y2NkXHU2Y2M3XHU2Y2IwXHU2Y2Y5XHU2Y2NmXHU2Y2U5XHU2Y2QxXHU3MDk0XHU3MDk4XHU3MDg1XHU3MDkzXHU3MDg2XHU3MDg0XHU3MDkxXHU3MDk2XHU3MDgyXHU3MDlhXHU3MDgzXHU3MjZhXHU3MmQ2XHU3''@;'; put 'put ''MmNiXHU3MmQ4XHU3MmM5XHU3MmRjXHU3MmQyXHU3MmQ0XHU3MmRhXHU3MmNjXHU3MmQxXHU3M2E0XHU3M2ExXHU3M2FkXHU3M2E2XHU3M2EyXHU3M2EwXHU3M2FjXHU3MzlkXHU3NGRkXHU3NGU4XHU3NTNmXHU3NTQwXHU3NTNlXHU3NThjXHU3NTk4XHU3NmFmXHU3NmYzXHU3NmYxXHU3NmYw''@;'; put 'put ''XHU3NmY1XHU3N2Y4XHU3N2ZjXHU3N2Y5XHU3N2ZiXHU3N2ZhIl0sWyJjZGExIiwiXHU3N2Y3XHU3OTQyXHU3OTNmXHU3OWM1XHU3YTc4XHU3YTdiXHU3YWZiXHU3Yzc1XHU3Y2ZkXHU4MDM1XHU4MDhmXHU4MGFlXHU4MGEzXHU4MGI4XHU4MGI1XHU4MGFkXHU4MjIwXHU4MmEwXHU4MmMwXHU4''@;'; put 'put ''MmFiXHU4MjlhXHU4Mjk4XHU4MjliXHU4MmI1XHU4MmE3XHU4MmFlXHU4MmJjXHU4MjllXHU4MmJhXHU4MmI0XHU4MmE4XHU4MmExXHU4MmE5XHU4MmMyXHU4MmE0XHU4MmMzXHU4MmI2XHU4MmEyXHU4NjcwXHU4NjZmXHU4NjZkXHU4NjZlXHU4YzU2XHU4ZmQyXHU4ZmNiXHU4ZmQzXHU4ZmNk''@;'; put 'put ''XHU4ZmQ2XHU4ZmQ1XHU4ZmQ3XHU5MGIyXHU5MGI0XHU5MGFmXHU5MGIzXHU5MGIwXHU5NjM5XHU5NjNkXHU5NjNjXHU5NjNhXHU5NjQzXHU0ZmNkXHU0ZmM1XHU0ZmQzXHU0ZmIyXHU0ZmM5XHU0ZmNiXHU0ZmMxXHU0ZmQ0XHU0ZmRjXHU0ZmQ5XHU0ZmJiXHU0ZmIzXHU0ZmRiXHU0ZmM3XHU0''@;'; put 'put ''ZmQ2XHU0ZmJhXHU0ZmMwXHU0ZmI5XHU0ZmVjXHU1MjQ0XHU1MjQ5XHU1MmMwXHU1MmMyXHU1MzNkXHU1MzdjXHU1Mzk3XHU1Mzk2XHU1Mzk5XHU1Mzk4XHU1NGJhXHU1NGExXHU1NGFkXHU1NGE1XHU1NGNmIl0sWyJjZTQwIiwiXHU1NGMzXHU4MzBkXHU1NGI3XHU1NGFlXHU1NGQ2XHU1NGI2''@;'; put 'put ''XHU1NGM1XHU1NGM2XHU1NGEwXHU1NDcwXHU1NGJjXHU1NGEyXHU1NGJlXHU1NDcyXHU1NGRlXHU1NGIwXHU1N2I1XHU1NzllXHU1NzlmXHU1N2E0XHU1NzhjXHU1Nzk3XHU1NzlkXHU1NzliXHU1Nzk0XHU1Nzk4XHU1NzhmXHU1Nzk5XHU1N2E1XHU1NzlhXHU1Nzk1XHU1OGY0XHU1OTBkXHU1''@;'; put 'put ''OTUzXHU1OWUxXHU1OWRlXHU1OWVlXHU1YTAwXHU1OWYxXHU1OWRkXHU1OWZhXHU1OWZkXHU1OWZjXHU1OWY2XHU1OWU0XHU1OWYyXHU1OWY3XHU1OWRiXHU1OWU5XHU1OWYzXHU1OWY1XHU1OWUwXHU1OWZlXHU1OWY0XHU1OWVkXHU1YmE4XHU1YzRjXHU1Y2QwXHU1Y2Q4XHU1Y2NjXHU1Y2Q3''@;'; put 'put ''XHU1Y2NiXHU1Y2RiIl0sWyJjZWExIiwiXHU1Y2RlXHU1Y2RhXHU1Y2M5XHU1Y2M3XHU1Y2NhXHU1Y2Q2XHU1Y2QzXHU1Y2Q0XHU1Y2NmXHU1Y2M4XHU1Y2M2XHU1Y2NlXHU1Y2RmXHU1Y2Y4XHU1ZGY5XHU1ZTIxXHU1ZTIyXHU1ZTIzXHU1ZTIwXHU1ZTI0XHU1ZWIwXHU1ZWE0XHU1ZWEyXHU1''@;'; put 'put ''ZTliXHU1ZWEzXHU1ZWE1XHU1ZjA3XHU1ZjJlXHU1ZjU2XHU1Zjg2XHU2MDM3XHU2MDM5XHU2MDU0XHU2MDcyXHU2MDVlXHU2MDQ1XHU2MDUzXHU2MDQ3XHU2MDQ5XHU2MDViXHU2MDRjXHU2MDQwXHU2MDQyXHU2MDVmXHU2MDI0XHU2MDQ0XHU2MDU4XHU2MDY2XHU2MDZlXHU2MjQyXHU2MjQz''@;'; put 'put ''XHU2MmNmXHU2MzBkXHU2MzBiXHU2MmY1XHU2MzBlXHU2MzAzXHU2MmViXHU2MmY5XHU2MzBmXHU2MzBjXHU2MmY4XHU2MmY2XHU2MzAwXHU2MzEzXHU2MzE0XHU2MmZhXHU2MzE1XHU2MmZiXHU2MmYwXHU2NTQxXHU2NTQzXHU2NWFhXHU2NWJmXHU2NjM2XHU2NjIxXHU2NjMyXHU2NjM1XHU2''@;'; put 'put ''NjFjXHU2NjI2XHU2NjIyXHU2NjMzXHU2NjJiXHU2NjNhXHU2NjFkXHU2NjM0XHU2NjM5XHU2NjJlXHU2NzBmXHU2NzEwXHU2N2MxXHU2N2YyXHU2N2M4XHU2N2JhIl0sWyJjZjQwIiwiXHU2N2RjXHU2N2JiXHU2N2Y4XHU2N2Q4XHU2N2MwXHU2N2I3XHU2N2M1XHU2N2ViXHU2N2U0XHU2N2Rm''@;'; put 'put ''XHU2N2I1XHU2N2NkXHU2N2IzXHU2N2Y3XHU2N2Y2XHU2N2VlXHU2N2UzXHU2N2MyXHU2N2I5XHU2N2NlXHU2N2U3XHU2N2YwXHU2N2IyXHU2N2ZjXHU2N2M2XHU2N2VkXHU2N2NjXHU2N2FlXHU2N2U2XHU2N2RiXHU2N2ZhXHU2N2M5XHU2N2NhXHU2N2MzXHU2N2VhXHU2N2NiXHU2YjI4XHU2''@;'; put 'put ''YjgyXHU2Yjg0XHU2YmI2XHU2YmQ2XHU2YmQ4XHU2YmUwXHU2YzIwXHU2YzIxXHU2ZDI4XHU2ZDM0XHU2ZDJkXHU2ZDFmXHU2ZDNjXHU2ZDNmXHU2ZDEyXHU2ZDBhXHU2Y2RhXHU2ZDMzXHU2ZDA0XHU2ZDE5XHU2ZDNhXHU2ZDFhXHU2ZDExXHU2ZDAwXHU2ZDFkXHU2ZDQyIl0sWyJjZmExIiwi''@;'; put 'put ''XHU2ZDAxXHU2ZDE4XHU2ZDM3XHU2ZDAzXHU2ZDBmXHU2ZDQwXHU2ZDA3XHU2ZDIwXHU2ZDJjXHU2ZDA4XHU2ZDIyXHU2ZDA5XHU2ZDEwXHU3MGI3XHU3MDlmXHU3MGJlXHU3MGIxXHU3MGIwXHU3MGExXHU3MGI0XHU3MGI1XHU3MGE5XHU3MjQxXHU3MjQ5XHU3MjRhXHU3MjZjXHU3MjcwXHU3''@;'; put 'put ''MjczXHU3MjZlXHU3MmNhXHU3MmU0XHU3MmU4XHU3MmViXHU3MmRmXHU3MmVhXHU3MmU2XHU3MmUzXHU3Mzg1XHU3M2NjXHU3M2MyXHU3M2M4XHU3M2M1XHU3M2I5XHU3M2I2XHU3M2I1XHU3M2I0XHU3M2ViXHU3M2JmXHU3M2M3XHU3M2JlXHU3M2MzXHU3M2M2XHU3M2I4XHU3M2NiXHU3NGVj''@;'; put 'put ''XHU3NGVlXHU3NTJlXHU3NTQ3XHU3NTQ4XHU3NWE3XHU3NWFhXHU3Njc5XHU3NmM0XHU3NzA4XHU3NzAzXHU3NzA0XHU3NzA1XHU3NzBhXHU3NmY3XHU3NmZiXHU3NmZhXHU3N2U3XHU3N2U4XHU3ODA2XHU3ODExXHU3ODEyXHU3ODA1XHU3ODEwXHU3ODBmXHU3ODBlXHU3ODA5XHU3ODAzXHU3''@;'; put 'put ''ODEzXHU3OTRhXHU3OTRjXHU3OTRiXHU3OTQ1XHU3OTQ0XHU3OWQ1XHU3OWNkXHU3OWNmXHU3OWQ2XHU3OWNlXHU3YTgwIl0sWyJkMDQwIiwiXHU3YTdlXHU3YWQxXHU3YjAwXHU3YjAxXHU3YzdhXHU3Yzc4XHU3Yzc5XHU3YzdmXHU3YzgwXHU3YzgxXHU3ZDAzXHU3ZDA4XHU3ZDAxXHU3ZjU4''@;'; put 'put ''XHU3ZjkxXHU3ZjhkXHU3ZmJlXHU4MDA3XHU4MDBlXHU4MDBmXHU4MDE0XHU4MDM3XHU4MGQ4XHU4MGM3XHU4MGUwXHU4MGQxXHU4MGM4XHU4MGMyXHU4MGQwXHU4MGM1XHU4MGUzXHU4MGQ5XHU4MGRjXHU4MGNhXHU4MGQ1XHU4MGM5XHU4MGNmXHU4MGQ3XHU4MGU2XHU4MGNkXHU4MWZmXHU4''@;'; put 'put ''MjIxXHU4Mjk0XHU4MmQ5XHU4MmZlXHU4MmY5XHU4MzA3XHU4MmU4XHU4MzAwXHU4MmQ1XHU4MzNhXHU4MmViXHU4MmQ2XHU4MmY0XHU4MmVjXHU4MmUxXHU4MmYyXHU4MmY1XHU4MzBjXHU4MmZiXHU4MmY2XHU4MmYwXHU4MmVhIl0sWyJkMGExIiwiXHU4MmU0XHU4MmUwXHU4MmZhXHU4MmYz''@;'; put 'put ''XHU4MmVkXHU4Njc3XHU4Njc0XHU4NjdjXHU4NjczXHU4ODQxXHU4ODRlXHU4ODY3XHU4ODZhXHU4ODY5XHU4OWQzXHU4YTA0XHU4YTA3XHU4ZDcyXHU4ZmUzXHU4ZmUxXHU4ZmVlXHU4ZmUwXHU5MGYxXHU5MGJkXHU5MGJmXHU5MGQ1XHU5MGM1XHU5MGJlXHU5MGM3XHU5MGNiXHU5MGM4XHU5''@;'; put 'put ''MWQ0XHU5MWQzXHU5NjU0XHU5NjRmXHU5NjUxXHU5NjUzXHU5NjRhXHU5NjRlXHU1MDFlXHU1MDA1XHU1MDA3XHU1MDEzXHU1MDIyXHU1MDMwXHU1MDFiXHU0ZmY1XHU0ZmY0XHU1MDMzXHU1MDM3XHU1MDJjXHU0ZmY2XHU0ZmY3XHU1MDE3XHU1MDFjXHU1MDIwXHU1MDI3XHU1MDM1XHU1MDJm''@;'; put 'put ''XHU1MDMxXHU1MDBlXHU1MTVhXHU1MTk0XHU1MTkzXHU1MWNhXHU1MWM0XHU1MWM1XHU1MWM4XHU1MWNlXHU1MjYxXHU1MjVhXHU1MjUyXHU1MjVlXHU1MjVmXHU1MjU1XHU1MjYyXHU1MmNkXHU1MzBlXHU1MzllXHU1NTI2XHU1NGUyXHU1NTE3XHU1NTEyXHU1NGU3XHU1NGYzXHU1NGU0XHU1''@;'; put 'put ''NTFhXHU1NGZmXHU1NTA0XHU1NTA4XHU1NGViXHU1NTExXHU1NTA1XHU1NGYxIl0sWyJkMTQwIiwiXHU1NTBhXHU1NGZiXHU1NGY3XHU1NGY4XHU1NGUwXHU1NTBlXHU1NTAzXHU1NTBiXHU1NzAxXHU1NzAyXHU1N2NjXHU1ODMyXHU1N2Q1XHU1N2QyXHU1N2JhXHU1N2M2XHU1N2JkXHU1N2Jj''@;'; put 'put ''XHU1N2I4XHU1N2I2XHU1N2JmXHU1N2M3XHU1N2QwXHU1N2I5XHU1N2MxXHU1OTBlXHU1OTRhXHU1YTE5XHU1YTE2XHU1YTJkXHU1YTJlXHU1YTE1XHU1YTBmXHU1YTE3XHU1YTBhXHU1YTFlXHU1YTMzXHU1YjZjXHU1YmE3XHU1YmFkXHU1YmFjXHU1YzAzXHU1YzU2XHU1YzU0XHU1Y2VjXHU1''@;'; put 'put ''Y2ZmXHU1Y2VlXHU1Y2YxXHU1Y2Y3XHU1ZDAwXHU1Y2Y5XHU1ZTI5XHU1ZTI4XHU1ZWE4XHU1ZWFlXHU1ZWFhXHU1ZWFjXHU1ZjMzXHU1ZjMwXHU1ZjY3XHU2MDVkXHU2MDVhXHU2MDY3Il0sWyJkMWExIiwiXHU2MDQxXHU2MGEyXHU2MDg4XHU2MDgwXHU2MDkyXHU2MDgxXHU2MDlkXHU2MDgz''@;'; put 'put ''XHU2MDk1XHU2MDliXHU2MDk3XHU2MDg3XHU2MDljXHU2MDhlXHU2MjE5XHU2MjQ2XHU2MmYyXHU2MzEwXHU2MzU2XHU2MzJjXHU2MzQ0XHU2MzQ1XHU2MzM2XHU2MzQzXHU2M2U0XHU2MzM5XHU2MzRiXHU2MzRhXHU2MzNjXHU2MzI5XHU2MzQxXHU2MzM0XHU2MzU4XHU2MzU0XHU2MzU5XHU2''@;'; put 'put ''MzJkXHU2MzQ3XHU2MzMzXHU2MzVhXHU2MzUxXHU2MzM4XHU2MzU3XHU2MzQwXHU2MzQ4XHU2NTRhXHU2NTQ2XHU2NWM2XHU2NWMzXHU2NWM0XHU2NWMyXHU2NjRhXHU2NjVmXHU2NjQ3XHU2NjUxXHU2NzEyXHU2NzEzXHU2ODFmXHU2ODFhXHU2ODQ5XHU2ODMyXHU2ODMzXHU2ODNiXHU2ODRi''@;'; put 'put ''XHU2ODRmXHU2ODE2XHU2ODMxXHU2ODFjXHU2ODM1XHU2ODJiXHU2ODJkXHU2ODJmXHU2ODRlXHU2ODQ0XHU2ODM0XHU2ODFkXHU2ODEyXHU2ODE0XHU2ODI2XHU2ODI4XHU2ODJlXHU2ODRkXHU2ODNhXHU2ODI1XHU2ODIwXHU2YjJjXHU2YjJmXHU2YjJkXHU2YjMxXHU2YjM0XHU2YjZkXHU4''@;'; put 'put ''MDgyXHU2Yjg4XHU2YmU2XHU2YmU0Il0sWyJkMjQwIiwiXHU2YmU4XHU2YmUzXHU2YmUyXHU2YmU3XHU2YzI1XHU2ZDdhXHU2ZDYzXHU2ZDY0XHU2ZDc2XHU2ZDBkXHU2ZDYxXHU2ZDkyXHU2ZDU4XHU2ZDYyXHU2ZDZkXHU2ZDZmXHU2ZDkxXHU2ZDhkXHU2ZGVmXHU2ZDdmXHU2ZDg2XHU2ZDVl''@;'; put 'put ''XHU2ZDY3XHU2ZDYwXHU2ZDk3XHU2ZDcwXHU2ZDdjXHU2ZDVmXHU2ZDgyXHU2ZDk4XHU2ZDJmXHU2ZDY4XHU2ZDhiXHU2ZDdlXHU2ZDgwXHU2ZDg0XHU2ZDE2XHU2ZDgzXHU2ZDdiXHU2ZDdkXHU2ZDc1XHU2ZDkwXHU3MGRjXHU3MGQzXHU3MGQxXHU3MGRkXHU3MGNiXHU3ZjM5XHU3MGUyXHU3''@;'; put 'put ''MGQ3XHU3MGQyXHU3MGRlXHU3MGUwXHU3MGQ0XHU3MGNkXHU3MGM1XHU3MGM2XHU3MGM3XHU3MGRhXHU3MGNlXHU3MGUxXHU3MjQyXHU3Mjc4Il0sWyJkMmExIiwiXHU3Mjc3XHU3Mjc2XHU3MzAwXHU3MmZhXHU3MmY0XHU3MmZlXHU3MmY2XHU3MmYzXHU3MmZiXHU3MzAxXHU3M2QzXHU3M2Q5''@;'; put 'put ''XHU3M2U1XHU3M2Q2XHU3M2JjXHU3M2U3XHU3M2UzXHU3M2U5XHU3M2RjXHU3M2QyXHU3M2RiXHU3M2Q0XHU3M2RkXHU3M2RhXHU3M2Q3XHU3M2Q4XHU3M2U4XHU3NGRlXHU3NGRmXHU3NGY0XHU3NGY1XHU3NTIxXHU3NTViXHU3NTVmXHU3NWIwXHU3NWMxXHU3NWJiXHU3NWM0XHU3NWMwXHU3''@;'; put 'put ''NWJmXHU3NWI2XHU3NWJhXHU3NjhhXHU3NmM5XHU3NzFkXHU3NzFiXHU3NzEwXHU3NzEzXHU3NzEyXHU3NzIzXHU3NzExXHU3NzE1XHU3NzE5XHU3NzFhXHU3NzIyXHU3NzI3XHU3ODIzXHU3ODJjXHU3ODIyXHU3ODM1XHU3ODJmXHU3ODI4XHU3ODJlXHU3ODJiXHU3ODIxXHU3ODI5XHU3ODMz''@;'; put 'put ''XHU3ODJhXHU3ODMxXHU3OTU0XHU3OTViXHU3OTRmXHU3OTVjXHU3OTUzXHU3OTUyXHU3OTUxXHU3OWViXHU3OWVjXHU3OWUwXHU3OWVlXHU3OWVkXHU3OWVhXHU3OWRjXHU3OWRlXHU3OWRkXHU3YTg2XHU3YTg5XHU3YTg1XHU3YThiXHU3YThjXHU3YThhXHU3YTg3XHU3YWQ4XHU3YjEwIl0s''@;'; put 'put ''WyJkMzQwIiwiXHU3YjA0XHU3YjEzXHU3YjA1XHU3YjBmXHU3YjA4XHU3YjBhXHU3YjBlXHU3YjA5XHU3YjEyXHU3Yzg0XHU3YzkxXHU3YzhhXHU3YzhjXHU3Yzg4XHU3YzhkXHU3Yzg1XHU3ZDFlXHU3ZDFkXHU3ZDExXHU3ZDBlXHU3ZDE4XHU3ZDE2XHU3ZDEzXHU3ZDFmXHU3ZDEyXHU3ZDBm''@;'; put 'put ''XHU3ZDBjXHU3ZjVjXHU3ZjYxXHU3ZjVlXHU3ZjYwXHU3ZjVkXHU3ZjViXHU3Zjk2XHU3ZjkyXHU3ZmMzXHU3ZmMyXHU3ZmMwXHU4MDE2XHU4MDNlXHU4MDM5XHU4MGZhXHU4MGYyXHU4MGY5XHU4MGY1XHU4MTAxXHU4MGZiXHU4MTAwXHU4MjAxXHU4MjJmXHU4MjI1XHU4MzMzXHU4MzJkXHU4''@;'; put 'put ''MzQ0XHU4MzE5XHU4MzUxXHU4MzI1XHU4MzU2XHU4MzNmXHU4MzQxXHU4MzI2XHU4MzFjXHU4MzIyIl0sWyJkM2ExIiwiXHU4MzQyXHU4MzRlXHU4MzFiXHU4MzJhXHU4MzA4XHU4MzNjXHU4MzRkXHU4MzE2XHU4MzI0XHU4MzIwXHU4MzM3XHU4MzJmXHU4MzI5XHU4MzQ3XHU4MzQ1XHU4MzRj''@;'; put 'put ''XHU4MzUzXHU4MzFlXHU4MzJjXHU4MzRiXHU4MzI3XHU4MzQ4XHU4NjUzXHU4NjUyXHU4NmEyXHU4NmE4XHU4Njk2XHU4NjhkXHU4NjkxXHU4NjllXHU4Njg3XHU4Njk3XHU4Njg2XHU4NjhiXHU4NjlhXHU4Njg1XHU4NmE1XHU4Njk5XHU4NmExXHU4NmE3XHU4Njk1XHU4Njk4XHU4NjhlXHU4''@;'; put 'put ''NjlkXHU4NjkwXHU4Njk0XHU4ODQzXHU4ODQ0XHU4ODZkXHU4ODc1XHU4ODc2XHU4ODcyXHU4ODgwXHU4ODcxXHU4ODdmXHU4ODZmXHU4ODgzXHU4ODdlXHU4ODc0XHU4ODdjXHU4YTEyXHU4YzQ3XHU4YzU3XHU4YzdiXHU4Y2E0XHU4Y2EzXHU4ZDc2XHU4ZDc4XHU4ZGI1XHU4ZGI3XHU4ZGI2''@;'; put 'put ''XHU4ZWQxXHU4ZWQzXHU4ZmZlXHU4ZmY1XHU5MDAyXHU4ZmZmXHU4ZmZiXHU5MDA0XHU4ZmZjXHU4ZmY2XHU5MGQ2XHU5MGUwXHU5MGQ5XHU5MGRhXHU5MGUzXHU5MGRmXHU5MGU1XHU5MGQ4XHU5MGRiXHU5MGQ3XHU5MGRjXHU5MGU0XHU5MTUwIl0sWyJkNDQwIiwiXHU5MTRlXHU5MTRmXHU5''@;'; put 'put ''MWQ1XHU5MWUyXHU5MWRhXHU5NjVjXHU5NjVmXHU5NmJjXHU5OGUzXHU5YWRmXHU5YjJmXHU0ZTdmXHU1MDcwXHU1MDZhXHU1MDYxXHU1MDVlXHU1MDYwXHU1MDUzXHU1MDRiXHU1MDVkXHU1MDcyXHU1MDQ4XHU1MDRkXHU1MDQxXHU1MDViXHU1MDRhXHU1MDYyXHU1MDE1XHU1MDQ1XHU1MDVm''@;'; put 'put ''XHU1MDY5XHU1MDZiXHU1MDYzXHU1MDY0XHU1MDQ2XHU1MDQwXHU1MDZlXHU1MDczXHU1MDU3XHU1MDUxXHU1MWQwXHU1MjZiXHU1MjZkXHU1MjZjXHU1MjZlXHU1MmQ2XHU1MmQzXHU1MzJkXHU1MzljXHU1NTc1XHU1NTc2XHU1NTNjXHU1NTRkXHU1NTUwXHU1NTM0XHU1NTJhXHU1NTUxXHU1''@;'; put 'put ''NTYyXHU1NTM2XHU1NTM1XHU1NTMwXHU1NTUyXHU1NTQ1Il0sWyJkNGExIiwiXHU1NTBjXHU1NTMyXHU1NTY1XHU1NTRlXHU1NTM5XHU1NTQ4XHU1NTJkXHU1NTNiXHU1NTQwXHU1NTRiXHU1NzBhXHU1NzA3XHU1N2ZiXHU1ODE0XHU1N2UyXHU1N2Y2XHU1N2RjXHU1N2Y0XHU1ODAwXHU1N2Vk''@;'; put 'put ''XHU1N2ZkXHU1ODA4XHU1N2Y4XHU1ODBiXHU1N2YzXHU1N2NmXHU1ODA3XHU1N2VlXHU1N2UzXHU1N2YyXHU1N2U1XHU1N2VjXHU1N2UxXHU1ODBlXHU1N2ZjXHU1ODEwXHU1N2U3XHU1ODAxXHU1ODBjXHU1N2YxXHU1N2U5XHU1N2YwXHU1ODBkXHU1ODA0XHU1OTVjXHU1YTYwXHU1YTU4XHU1''@;'; put 'put ''YTU1XHU1YTY3XHU1YTVlXHU1YTM4XHU1YTM1XHU1YTZkXHU1YTUwXHU1YTVmXHU1YTY1XHU1YTZjXHU1YTUzXHU1YTY0XHU1YTU3XHU1YTQzXHU1YTVkXHU1YTUyXHU1YTQ0XHU1YTViXHU1YTQ4XHU1YThlXHU1YTNlXHU1YTRkXHU1YTM5XHU1YTRjXHU1YTcwXHU1YTY5XHU1YTQ3XHU1YTUx''@;'; put 'put ''XHU1YTU2XHU1YTQyXHU1YTVjXHU1YjcyXHU1YjZlXHU1YmMxXHU1YmMwXHU1YzU5XHU1ZDFlXHU1ZDBiXHU1ZDFkXHU1ZDFhXHU1ZDIwXHU1ZDBjXHU1ZDI4XHU1ZDBkXHU1ZDI2XHU1ZDI1XHU1ZDBmIl0sWyJkNTQwIiwiXHU1ZDMwXHU1ZDEyXHU1ZDIzXHU1ZDFmXHU1ZDJlXHU1ZTNlXHU1''@;'; put 'put ''ZTM0XHU1ZWIxXHU1ZWI0XHU1ZWI5XHU1ZWIyXHU1ZWIzXHU1ZjM2XHU1ZjM4XHU1ZjliXHU1Zjk2XHU1ZjlmXHU2MDhhXHU2MDkwXHU2MDg2XHU2MGJlXHU2MGIwXHU2MGJhXHU2MGQzXHU2MGQ0XHU2MGNmXHU2MGU0XHU2MGQ5XHU2MGRkXHU2MGM4XHU2MGIxXHU2MGRiXHU2MGI3XHU2MGNh''@;'; put 'put ''XHU2MGJmXHU2MGMzXHU2MGNkXHU2MGMwXHU2MzMyXHU2MzY1XHU2MzhhXHU2MzgyXHU2MzdkXHU2M2JkXHU2MzllXHU2M2FkXHU2MzlkXHU2Mzk3XHU2M2FiXHU2MzhlXHU2MzZmXHU2Mzg3XHU2MzkwXHU2MzZlXHU2M2FmXHU2Mzc1XHU2MzljXHU2MzZkXHU2M2FlXHU2MzdjXHU2M2E0XHU2''@;'; put 'put ''MzNiXHU2MzlmIl0sWyJkNWExIiwiXHU2Mzc4XHU2Mzg1XHU2MzgxXHU2MzkxXHU2MzhkXHU2MzcwXHU2NTUzXHU2NWNkXHU2NjY1XHU2NjYxXHU2NjViXHU2NjU5XHU2NjVjXHU2NjYyXHU2NzE4XHU2ODc5XHU2ODg3XHU2ODkwXHU2ODljXHU2ODZkXHU2ODZlXHU2OGFlXHU2OGFiXHU2OTU2''@;'; put 'put ''XHU2ODZmXHU2OGEzXHU2OGFjXHU2OGE5XHU2ODc1XHU2ODc0XHU2OGIyXHU2ODhmXHU2ODc3XHU2ODkyXHU2ODdjXHU2ODZiXHU2ODcyXHU2OGFhXHU2ODgwXHU2ODcxXHU2ODdlXHU2ODliXHU2ODk2XHU2ODhiXHU2OGEwXHU2ODg5XHU2OGE0XHU2ODc4XHU2ODdiXHU2ODkxXHU2ODhjXHU2''@;'; put 'put ''ODhhXHU2ODdkXHU2YjM2XHU2YjMzXHU2YjM3XHU2YjM4XHU2YjkxXHU2YjhmXHU2YjhkXHU2YjhlXHU2YjhjXHU2YzJhXHU2ZGMwXHU2ZGFiXHU2ZGI0XHU2ZGIzXHU2ZTc0XHU2ZGFjXHU2ZGU5XHU2ZGUyXHU2ZGI3XHU2ZGY2XHU2ZGQ0XHU2ZTAwXHU2ZGM4XHU2ZGUwXHU2ZGRmXHU2ZGQ2''@;'; put 'put ''XHU2ZGJlXHU2ZGU1XHU2ZGRjXHU2ZGRkXHU2ZGRiXHU2ZGY0XHU2ZGNhXHU2ZGJkXHU2ZGVkXHU2ZGYwXHU2ZGJhXHU2ZGQ1XHU2ZGMyXHU2ZGNmXHU2ZGM5Il0sWyJkNjQwIiwiXHU2ZGQwXHU2ZGYyXHU2ZGQzXHU2ZGZkXHU2ZGQ3XHU2ZGNkXHU2ZGUzXHU2ZGJiXHU3MGZhXHU3MTBkXHU3''@;'; put 'put ''MGY3XHU3MTE3XHU3MGY0XHU3MTBjXHU3MGYwXHU3MTA0XHU3MGYzXHU3MTEwXHU3MGZjXHU3MGZmXHU3MTA2XHU3MTEzXHU3MTAwXHU3MGY4XHU3MGY2XHU3MTBiXHU3MTAyXHU3MTBlXHU3MjdlXHU3MjdiXHU3MjdjXHU3MjdmXHU3MzFkXHU3MzE3XHU3MzA3XHU3MzExXHU3MzE4XHU3MzBh''@;'; put 'put ''XHU3MzA4XHU3MmZmXHU3MzBmXHU3MzFlXHU3Mzg4XHU3M2Y2XHU3M2Y4XHU3M2Y1XHU3NDA0XHU3NDAxXHU3M2ZkXHU3NDA3XHU3NDAwXHU3M2ZhXHU3M2ZjXHU3M2ZmXHU3NDBjXHU3NDBiXHU3M2Y0XHU3NDA4XHU3NTY0XHU3NTYzXHU3NWNlXHU3NWQyXHU3NWNmIl0sWyJkNmExIiwiXHU3''@;'; put 'put ''NWNiXHU3NWNjXHU3NWQxXHU3NWQwXHU3NjhmXHU3Njg5XHU3NmQzXHU3NzM5XHU3NzJmXHU3NzJkXHU3NzMxXHU3NzMyXHU3NzM0XHU3NzMzXHU3NzNkXHU3NzI1XHU3NzNiXHU3NzM1XHU3ODQ4XHU3ODUyXHU3ODQ5XHU3ODRkXHU3ODRhXHU3ODRjXHU3ODI2XHU3ODQ1XHU3ODUwXHU3OTY0''@;'; put 'put ''XHU3OTY3XHU3OTY5XHU3OTZhXHU3OTYzXHU3OTZiXHU3OTYxXHU3OWJiXHU3OWZhXHU3OWY4XHU3OWY2XHU3OWY3XHU3YThmXHU3YTk0XHU3YTkwXHU3YjM1XHU3YjQ3XHU3YjM0XHU3YjI1XHU3YjMwXHU3YjIyXHU3YjI0XHU3YjMzXHU3YjE4XHU3YjJhXHU3YjFkXHU3YjMxXHU3YjJiXHU3''@;'; put 'put ''YjJkXHU3YjJmXHU3YjMyXHU3YjM4XHU3YjFhXHU3YjIzXHU3Yzk0XHU3Yzk4XHU3Yzk2XHU3Y2EzXHU3ZDM1XHU3ZDNkXHU3ZDM4XHU3ZDM2XHU3ZDNhXHU3ZDQ1XHU3ZDJjXHU3ZDI5XHU3ZDQxXHU3ZDQ3XHU3ZDNlXHU3ZDNmXHU3ZDRhXHU3ZDNiXHU3ZDI4XHU3ZjYzXHU3Zjk1XHU3Zjlj''@;'; put 'put ''XHU3ZjlkXHU3ZjliXHU3ZmNhXHU3ZmNiXHU3ZmNkXHU3ZmQwXHU3ZmQxXHU3ZmM3XHU3ZmNmXHU3ZmM5XHU4MDFmIl0sWyJkNzQwIiwiXHU4MDFlXHU4MDFiXHU4MDQ3XHU4MDQzXHU4MDQ4XHU4MTE4XHU4MTI1XHU4MTE5XHU4MTFiXHU4MTJkXHU4MTFmXHU4MTJjXHU4MTFlXHU4MTIxXHU4''@;'; put 'put ''MTE1XHU4MTI3XHU4MTFkXHU4MTIyXHU4MjExXHU4MjM4XHU4MjMzXHU4MjNhXHU4MjM0XHU4MjMyXHU4Mjc0XHU4MzkwXHU4M2EzXHU4M2E4XHU4MzhkXHU4MzdhXHU4MzczXHU4M2E0XHU4Mzc0XHU4MzhmXHU4MzgxXHU4Mzk1XHU4Mzk5XHU4Mzc1XHU4Mzk0XHU4M2E5XHU4MzdkXHU4Mzgz''@;'; put 'put ''XHU4MzhjXHU4MzlkXHU4MzliXHU4M2FhXHU4MzhiXHU4MzdlXHU4M2E1XHU4M2FmXHU4Mzg4XHU4Mzk3XHU4M2IwXHU4MzdmXHU4M2E2XHU4Mzg3XHU4M2FlXHU4Mzc2XHU4MzlhXHU4NjU5XHU4NjU2XHU4NmJmXHU4NmI3Il0sWyJkN2ExIiwiXHU4NmMyXHU4NmMxXHU4NmM1XHU4NmJhXHU4''@;'; put 'put ''NmIwXHU4NmM4XHU4NmI5XHU4NmIzXHU4NmI4XHU4NmNjXHU4NmI0XHU4NmJiXHU4NmJjXHU4NmMzXHU4NmJkXHU4NmJlXHU4ODUyXHU4ODg5XHU4ODk1XHU4OGE4XHU4OGEyXHU4OGFhXHU4ODlhXHU4ODkxXHU4OGExXHU4ODlmXHU4ODk4XHU4OGE3XHU4ODk5XHU4ODliXHU4ODk3XHU4OGE0''@;'; put 'put ''XHU4OGFjXHU4ODhjXHU4ODkzXHU4ODhlXHU4OTgyXHU4OWQ2XHU4OWQ5XHU4OWQ1XHU4YTMwXHU4YTI3XHU4YTJjXHU4YTFlXHU4YzM5XHU4YzNiXHU4YzVjXHU4YzVkXHU4YzdkXHU4Y2E1XHU4ZDdkXHU4ZDdiXHU4ZDc5XHU4ZGJjXHU4ZGMyXHU4ZGI5XHU4ZGJmXHU4ZGMxXHU4ZWQ4XHU4''@;'; put 'put ''ZWRlXHU4ZWRkXHU4ZWRjXHU4ZWQ3XHU4ZWUwXHU4ZWUxXHU5MDI0XHU5MDBiXHU5MDExXHU5MDFjXHU5MDBjXHU5MDIxXHU5MGVmXHU5MGVhXHU5MGYwXHU5MGY0XHU5MGYyXHU5MGYzXHU5MGQ0XHU5MGViXHU5MGVjXHU5MGU5XHU5MTU2XHU5MTU4XHU5MTVhXHU5MTUzXHU5MTU1XHU5MWVj''@;'; put 'put ''XHU5MWY0XHU5MWYxXHU5MWYzXHU5MWY4XHU5MWU0XHU5MWY5XHU5MWVhIl0sWyJkODQwIiwiXHU5MWViXHU5MWY3XHU5MWU4XHU5MWVlXHU5NTdhXHU5NTg2XHU5NTg4XHU5NjdjXHU5NjZkXHU5NjZiXHU5NjcxXHU5NjZmXHU5NmJmXHU5NzZhXHU5ODA0XHU5OGU1XHU5OTk3XHU1MDliXHU1''@;'; put 'put ''MDk1XHU1MDk0XHU1MDllXHU1MDhiXHU1MGEzXHU1MDgzXHU1MDhjXHU1MDhlXHU1MDlkXHU1MDY4XHU1MDljXHU1MDkyXHU1MDgyXHU1MDg3XHU1MTVmXHU1MWQ0XHU1MzEyXHU1MzExXHU1M2E0XHU1M2E3XHU1NTkxXHU1NWE4XHU1NWE1XHU1NWFkXHU1NTc3XHU1NjQ1XHU1NWEyXHU1NTkz''@;'; put 'put ''XHU1NTg4XHU1NThmXHU1NWI1XHU1NTgxXHU1NWEzXHU1NTkyXHU1NWE0XHU1NTdkXHU1NThjXHU1NWE2XHU1NTdmXHU1NTk1XHU1NWExXHU1NThlXHU1NzBjXHU1ODI5XHU1ODM3Il0sWyJkOGExIiwiXHU1ODE5XHU1ODFlXHU1ODI3XHU1ODIzXHU1ODI4XHU1N2Y1XHU1ODQ4XHU1ODI1XHU1''@;'; put 'put ''ODFjXHU1ODFiXHU1ODMzXHU1ODNmXHU1ODM2XHU1ODJlXHU1ODM5XHU1ODM4XHU1ODJkXHU1ODJjXHU1ODNiXHU1OTYxXHU1YWFmXHU1YTk0XHU1YTlmXHU1YTdhXHU1YWEyXHU1YTllXHU1YTc4XHU1YWE2XHU1YTdjXHU1YWE1XHU1YWFjXHU1YTk1XHU1YWFlXHU1YTM3XHU1YTg0XHU1YThh''@;'; put 'put ''XHU1YTk3XHU1YTgzXHU1YThiXHU1YWE5XHU1YTdiXHU1YTdkXHU1YThjXHU1YTljXHU1YThmXHU1YTkzXHU1YTlkXHU1YmVhXHU1YmNkXHU1YmNiXHU1YmQ0XHU1YmQxXHU1YmNhXHU1YmNlXHU1YzBjXHU1YzMwXHU1ZDM3XHU1ZDQzXHU1ZDZiXHU1ZDQxXHU1ZDRiXHU1ZDNmXHU1ZDM1XHU1''@;'; put 'put ''ZDUxXHU1ZDRlXHU1ZDU1XHU1ZDMzXHU1ZDNhXHU1ZDUyXHU1ZDNkXHU1ZDMxXHU1ZDU5XHU1ZDQyXHU1ZDM5XHU1ZDQ5XHU1ZDM4XHU1ZDNjXHU1ZDMyXHU1ZDM2XHU1ZDQwXHU1ZDQ1XHU1ZTQ0XHU1ZTQxXHU1ZjU4XHU1ZmE2XHU1ZmE1XHU1ZmFiXHU2MGM5XHU2MGI5XHU2MGNjXHU2MGUy''@;'; put 'put ''XHU2MGNlXHU2MGM0XHU2MTE0Il0sWyJkOTQwIiwiXHU2MGYyXHU2MTBhXHU2MTE2XHU2MTA1XHU2MGY1XHU2MTEzXHU2MGY4XHU2MGZjXHU2MGZlXHU2MGMxXHU2MTAzXHU2MTE4XHU2MTFkXHU2MTEwXHU2MGZmXHU2MTA0XHU2MTBiXHU2MjRhXHU2Mzk0XHU2M2IxXHU2M2IwXHU2M2NlXHU2''@;'; put 'put ''M2U1XHU2M2U4XHU2M2VmXHU2M2MzXHU2NDlkXHU2M2YzXHU2M2NhXHU2M2UwXHU2M2Y2XHU2M2Q1XHU2M2YyXHU2M2Y1XHU2NDYxXHU2M2RmXHU2M2JlXHU2M2RkXHU2M2RjXHU2M2M0XHU2M2Q4XHU2M2QzXHU2M2MyXHU2M2M3XHU2M2NjXHU2M2NiXHU2M2M4XHU2M2YwXHU2M2Q3XHU2M2Q5''@;'; put 'put ''XHU2NTMyXHU2NTY3XHU2NTZhXHU2NTY0XHU2NTVjXHU2NTY4XHU2NTY1XHU2NThjXHU2NTlkXHU2NTllXHU2NWFlXHU2NWQwXHU2NWQyIl0sWyJkOWExIiwiXHU2NjdjXHU2NjZjXHU2NjdiXHU2NjgwXHU2NjcxXHU2Njc5XHU2NjZhXHU2NjcyXHU2NzAxXHU2OTBjXHU2OGQzXHU2OTA0XHU2''@;'; put 'put ''OGRjXHU2OTJhXHU2OGVjXHU2OGVhXHU2OGYxXHU2OTBmXHU2OGQ2XHU2OGY3XHU2OGViXHU2OGU0XHU2OGY2XHU2OTEzXHU2OTEwXHU2OGYzXHU2OGUxXHU2OTA3XHU2OGNjXHU2OTA4XHU2OTcwXHU2OGI0XHU2OTExXHU2OGVmXHU2OGM2XHU2OTE0XHU2OGY4XHU2OGQwXHU2OGZkXHU2OGZj''@;'; put 'put ''XHU2OGU4XHU2OTBiXHU2OTBhXHU2OTE3XHU2OGNlXHU2OGM4XHU2OGRkXHU2OGRlXHU2OGU2XHU2OGY0XHU2OGQxXHU2OTA2XHU2OGQ0XHU2OGU5XHU2OTE1XHU2OTI1XHU2OGM3XHU2YjM5XHU2YjNiXHU2YjNmXHU2YjNjXHU2Yjk0XHU2Yjk3XHU2Yjk5XHU2Yjk1XHU2YmJkXHU2YmYwXHU2''@;'; put 'put ''YmYyXHU2YmYzXHU2YzMwXHU2ZGZjXHU2ZTQ2XHU2ZTQ3XHU2ZTFmXHU2ZTQ5XHU2ZTg4XHU2ZTNjXHU2ZTNkXHU2ZTQ1XHU2ZTYyXHU2ZTJiXHU2ZTNmXHU2ZTQxXHU2ZTVkXHU2ZTczXHU2ZTFjXHU2ZTMzXHU2ZTRiXHU2ZTQwXHU2ZTUxXHU2ZTNiXHU2ZTAzXHU2ZTJlXHU2ZTVlIl0sWyJk''@;'; put 'put ''YTQwIiwiXHU2ZTY4XHU2ZTVjXHU2ZTYxXHU2ZTMxXHU2ZTI4XHU2ZTYwXHU2ZTcxXHU2ZTZiXHU2ZTM5XHU2ZTIyXHU2ZTMwXHU2ZTUzXHU2ZTY1XHU2ZTI3XHU2ZTc4XHU2ZTY0XHU2ZTc3XHU2ZTU1XHU2ZTc5XHU2ZTUyXHU2ZTY2XHU2ZTM1XHU2ZTM2XHU2ZTVhXHU3MTIwXHU3MTFlXHU3''@;'; put 'put ''MTJmXHU3MGZiXHU3MTJlXHU3MTMxXHU3MTIzXHU3MTI1XHU3MTIyXHU3MTMyXHU3MTFmXHU3MTI4XHU3MTNhXHU3MTFiXHU3MjRiXHU3MjVhXHU3Mjg4XHU3Mjg5XHU3Mjg2XHU3Mjg1XHU3MjhiXHU3MzEyXHU3MzBiXHU3MzMwXHU3MzIyXHU3MzMxXHU3MzMzXHU3MzI3XHU3MzMyXHU3MzJk''@;'; put 'put ''XHU3MzI2XHU3MzIzXHU3MzM1XHU3MzBjXHU3NDJlXHU3NDJjXHU3NDMwXHU3NDJiXHU3NDE2Il0sWyJkYWExIiwiXHU3NDFhXHU3NDIxXHU3NDJkXHU3NDMxXHU3NDI0XHU3NDIzXHU3NDFkXHU3NDI5XHU3NDIwXHU3NDMyXHU3NGZiXHU3NTJmXHU3NTZmXHU3NTZjXHU3NWU3XHU3NWRhXHU3''@;'; put 'put ''NWUxXHU3NWU2XHU3NWRkXHU3NWRmXHU3NWU0XHU3NWQ3XHU3Njk1XHU3NjkyXHU3NmRhXHU3NzQ2XHU3NzQ3XHU3NzQ0XHU3NzRkXHU3NzQ1XHU3NzRhXHU3NzRlXHU3NzRiXHU3NzRjXHU3N2RlXHU3N2VjXHU3ODYwXHU3ODY0XHU3ODY1XHU3ODVjXHU3ODZkXHU3ODcxXHU3ODZhXHU3ODZl''@;'; put 'put ''XHU3ODcwXHU3ODY5XHU3ODY4XHU3ODVlXHU3ODYyXHU3OTc0XHU3OTczXHU3OTcyXHU3OTcwXHU3YTAyXHU3YTBhXHU3YTAzXHU3YTBjXHU3YTA0XHU3YTk5XHU3YWU2XHU3YWU0XHU3YjRhXHU3YjNiXHU3YjQ0XHU3YjQ4XHU3YjRjXHU3YjRlXHU3YjQwXHU3YjU4XHU3YjQ1XHU3Y2EyXHU3''@;'; put 'put ''YzllXHU3Y2E4XHU3Y2ExXHU3ZDU4XHU3ZDZmXHU3ZDYzXHU3ZDUzXHU3ZDU2XHU3ZDY3XHU3ZDZhXHU3ZDRmXHU3ZDZkXHU3ZDVjXHU3ZDZiXHU3ZDUyXHU3ZDU0XHU3ZDY5XHU3ZDUxXHU3ZDVmXHU3ZDRlXHU3ZjNlXHU3ZjNmXHU3ZjY1Il0sWyJkYjQwIiwiXHU3ZjY2XHU3ZmEyXHU3ZmEw''@;'; put 'put ''XHU3ZmExXHU3ZmQ3XHU4MDUxXHU4MDRmXHU4MDUwXHU4MGZlXHU4MGQ0XHU4MTQzXHU4MTRhXHU4MTUyXHU4MTRmXHU4MTQ3XHU4MTNkXHU4MTRkXHU4MTNhXHU4MWU2XHU4MWVlXHU4MWY3XHU4MWY4XHU4MWY5XHU4MjA0XHU4MjNjXHU4MjNkXHU4MjNmXHU4Mjc1XHU4MzNiXHU4M2NmXHU4''@;'; put 'put ''M2Y5XHU4NDIzXHU4M2MwXHU4M2U4XHU4NDEyXHU4M2U3XHU4M2U0XHU4M2ZjXHU4M2Y2XHU4NDEwXHU4M2M2XHU4M2M4XHU4M2ViXHU4M2UzXHU4M2JmXHU4NDAxXHU4M2RkXHU4M2U1XHU4M2Q4XHU4M2ZmXHU4M2UxXHU4M2NiXHU4M2NlXHU4M2Q2XHU4M2Y1XHU4M2M5XHU4NDA5XHU4NDBm''@;'; put 'put ''XHU4M2RlXHU4NDExXHU4NDA2XHU4M2MyXHU4M2YzIl0sWyJkYmExIiwiXHU4M2Q1XHU4M2ZhXHU4M2M3XHU4M2QxXHU4M2VhXHU4NDEzXHU4M2MzXHU4M2VjXHU4M2VlXHU4M2M0XHU4M2ZiXHU4M2Q3XHU4M2UyXHU4NDFiXHU4M2RiXHU4M2ZlXHU4NmQ4XHU4NmUyXHU4NmU2XHU4NmQzXHU4''@;'; put 'put ''NmUzXHU4NmRhXHU4NmVhXHU4NmRkXHU4NmViXHU4NmRjXHU4NmVjXHU4NmU5XHU4NmQ3XHU4NmU4XHU4NmQxXHU4ODQ4XHU4ODU2XHU4ODU1XHU4OGJhXHU4OGQ3XHU4OGI5XHU4OGI4XHU4OGMwXHU4OGJlXHU4OGI2XHU4OGJjXHU4OGI3XHU4OGJkXHU4OGIyXHU4OTAxXHU4OGM5XHU4OTk1''@;'; put 'put ''XHU4OTk4XHU4OTk3XHU4OWRkXHU4OWRhXHU4OWRiXHU4YTRlXHU4YTRkXHU4YTM5XHU4YTU5XHU4YTQwXHU4YTU3XHU4YTU4XHU4YTQ0XHU4YTQ1XHU4YTUyXHU4YTQ4XHU4YTUxXHU4YTRhXHU4YTRjXHU4YTRmXHU4YzVmXHU4YzgxXHU4YzgwXHU4Y2JhXHU4Y2JlXHU4Y2IwXHU4Y2I5XHU4''@;'; put 'put ''Y2I1XHU4ZDg0XHU4ZDgwXHU4ZDg5XHU4ZGQ4XHU4ZGQzXHU4ZGNkXHU4ZGM3XHU4ZGQ2XHU4ZGRjXHU4ZGNmXHU4ZGQ1XHU4ZGQ5XHU4ZGM4XHU4ZGQ3XHU4ZGM1XHU4ZWVmXHU4ZWY3XHU4ZWZhIl0sWyJkYzQwIiwiXHU4ZWY5XHU4ZWU2XHU4ZWVlXHU4ZWU1XHU4ZWY1XHU4ZWU3XHU4ZWU4''@;'; put 'put ''XHU4ZWY2XHU4ZWViXHU4ZWYxXHU4ZWVjXHU4ZWY0XHU4ZWU5XHU5MDJkXHU5MDM0XHU5MDJmXHU5MTA2XHU5MTJjXHU5MTA0XHU5MGZmXHU5MGZjXHU5MTA4XHU5MGY5XHU5MGZiXHU5MTAxXHU5MTAwXHU5MTA3XHU5MTA1XHU5MTAzXHU5MTYxXHU5MTY0XHU5MTVmXHU5MTYyXHU5MTYwXHU5''@;'; put 'put ''MjAxXHU5MjBhXHU5MjI1XHU5MjAzXHU5MjFhXHU5MjI2XHU5MjBmXHU5MjBjXHU5MjAwXHU5MjEyXHU5MWZmXHU5MWZkXHU5MjA2XHU5MjA0XHU5MjI3XHU5MjAyXHU5MjFjXHU5MjI0XHU5MjE5XHU5MjE3XHU5MjA1XHU5MjE2XHU5NTdiXHU5NThkXHU5NThjXHU5NTkwXHU5Njg3XHU5Njdl''@;'; put 'put ''XHU5Njg4Il0sWyJkY2ExIiwiXHU5Njg5XHU5NjgzXHU5NjgwXHU5NmMyXHU5NmM4XHU5NmMzXHU5NmYxXHU5NmYwXHU5NzZjXHU5NzcwXHU5NzZlXHU5ODA3XHU5OGE5XHU5OGViXHU5Y2U2XHU5ZWY5XHU0ZTgzXHU0ZTg0XHU0ZWI2XHU1MGJkXHU1MGJmXHU1MGM2XHU1MGFlXHU1MGM0XHU1''@;'; put 'put ''MGNhXHU1MGI0XHU1MGM4XHU1MGMyXHU1MGIwXHU1MGMxXHU1MGJhXHU1MGIxXHU1MGNiXHU1MGM5XHU1MGI2XHU1MGI4XHU1MWQ3XHU1MjdhXHU1Mjc4XHU1MjdiXHU1MjdjXHU1NWMzXHU1NWRiXHU1NWNjXHU1NWQwXHU1NWNiXHU1NWNhXHU1NWRkXHU1NWMwXHU1NWQ0XHU1NWM0XHU1NWU5''@;'; put 'put ''XHU1NWJmXHU1NWQyXHU1NThkXHU1NWNmXHU1NWQ1XHU1NWUyXHU1NWQ2XHU1NWM4XHU1NWYyXHU1NWNkXHU1NWQ5XHU1NWMyXHU1NzE0XHU1ODUzXHU1ODY4XHU1ODY0XHU1ODRmXHU1ODRkXHU1ODQ5XHU1ODZmXHU1ODU1XHU1ODRlXHU1ODVkXHU1ODU5XHU1ODY1XHU1ODViXHU1ODNkXHU1''@;'; put 'put ''ODYzXHU1ODcxXHU1OGZjXHU1YWM3XHU1YWM0XHU1YWNiXHU1YWJhXHU1YWI4XHU1YWIxXHU1YWI1XHU1YWIwXHU1YWJmXHU1YWM4XHU1YWJiXHU1YWM2Il0sWyJkZDQwIiwiXHU1YWI3XHU1YWMwXHU1YWNhXHU1YWI0XHU1YWI2XHU1YWNkXHU1YWI5XHU1YTkwXHU1YmQ2XHU1YmQ4XHU1YmQ5''@;'; put 'put ''XHU1YzFmXHU1YzMzXHU1ZDcxXHU1ZDYzXHU1ZDRhXHU1ZDY1XHU1ZDcyXHU1ZDZjXHU1ZDVlXHU1ZDY4XHU1ZDY3XHU1ZDYyXHU1ZGYwXHU1ZTRmXHU1ZTRlXHU1ZTRhXHU1ZTRkXHU1ZTRiXHU1ZWM1XHU1ZWNjXHU1ZWM2XHU1ZWNiXHU1ZWM3XHU1ZjQwXHU1ZmFmXHU1ZmFkXHU2MGY3XHU2''@;'; put 'put ''MTQ5XHU2MTRhXHU2MTJiXHU2MTQ1XHU2MTM2XHU2MTMyXHU2MTJlXHU2MTQ2XHU2MTJmXHU2MTRmXHU2MTI5XHU2MTQwXHU2MjIwXHU5MTY4XHU2MjIzXHU2MjI1XHU2MjI0XHU2M2M1XHU2M2YxXHU2M2ViXHU2NDEwXHU2NDEyXHU2NDA5XHU2NDIwXHU2NDI0Il0sWyJkZGExIiwiXHU2NDMz''@;'; put 'put ''XHU2NDQzXHU2NDFmXHU2NDE1XHU2NDE4XHU2NDM5XHU2NDM3XHU2NDIyXHU2NDIzXHU2NDBjXHU2NDI2XHU2NDMwXHU2NDI4XHU2NDQxXHU2NDM1XHU2NDJmXHU2NDBhXHU2NDFhXHU2NDQwXHU2NDI1XHU2NDI3XHU2NDBiXHU2M2U3XHU2NDFiXHU2NDJlXHU2NDIxXHU2NDBlXHU2NTZmXHU2''@;'; put 'put ''NTkyXHU2NWQzXHU2Njg2XHU2NjhjXHU2Njk1XHU2NjkwXHU2NjhiXHU2NjhhXHU2Njk5XHU2Njk0XHU2Njc4XHU2NzIwXHU2OTY2XHU2OTVmXHU2OTM4XHU2OTRlXHU2OTYyXHU2OTcxXHU2OTNmXHU2OTQ1XHU2OTZhXHU2OTM5XHU2OTQyXHU2OTU3XHU2OTU5XHU2OTdhXHU2OTQ4XHU2OTQ5''@;'; put 'put ''XHU2OTM1XHU2OTZjXHU2OTMzXHU2OTNkXHU2OTY1XHU2OGYwXHU2OTc4XHU2OTM0XHU2OTY5XHU2OTQwXHU2OTZmXHU2OTQ0XHU2OTc2XHU2OTU4XHU2OTQxXHU2OTc0XHU2OTRjXHU2OTNiXHU2OTRiXHU2OTM3XHU2OTVjXHU2OTRmXHU2OTUxXHU2OTMyXHU2OTUyXHU2OTJmXHU2OTdiXHU2''@;'; put 'put ''OTNjXHU2YjQ2XHU2YjQ1XHU2YjQzXHU2YjQyXHU2YjQ4XHU2YjQxXHU2YjliXHVmYTBkXHU2YmZiXHU2YmZjIl0sWyJkZTQwIiwiXHU2YmY5XHU2YmY3XHU2YmY4XHU2ZTliXHU2ZWQ2XHU2ZWM4XHU2ZThmXHU2ZWMwXHU2ZTlmXHU2ZTkzXHU2ZTk0XHU2ZWEwXHU2ZWIxXHU2ZWI5XHU2ZWM2''@;'; put 'put ''XHU2ZWQyXHU2ZWJkXHU2ZWMxXHU2ZTllXHU2ZWM5XHU2ZWI3XHU2ZWIwXHU2ZWNkXHU2ZWE2XHU2ZWNmXHU2ZWIyXHU2ZWJlXHU2ZWMzXHU2ZWRjXHU2ZWQ4XHU2ZTk5XHU2ZTkyXHU2ZThlXHU2ZThkXHU2ZWE0XHU2ZWExXHU2ZWJmXHU2ZWIzXHU2ZWQwXHU2ZWNhXHU2ZTk3XHU2ZWFlXHU2''@;'; put 'put ''ZWEzXHU3MTQ3XHU3MTU0XHU3MTUyXHU3MTYzXHU3MTYwXHU3MTQxXHU3MTVkXHU3MTYyXHU3MTcyXHU3MTc4XHU3MTZhXHU3MTYxXHU3MTQyXHU3MTU4XHU3MTQzXHU3MTRiXHU3MTcwXHU3MTVmXHU3MTUwXHU3MTUzIl0sWyJkZWExIiwiXHU3MTQ0XHU3MTRkXHU3MTVhXHU3MjRmXHU3Mjhk''@;'; put 'put ''XHU3MjhjXHU3MjkxXHU3MjkwXHU3MjhlXHU3MzNjXHU3MzQyXHU3MzNiXHU3MzNhXHU3MzQwXHU3MzRhXHU3MzQ5XHU3NDQ0XHU3NDRhXHU3NDRiXHU3NDUyXHU3NDUxXHU3NDU3XHU3NDQwXHU3NDRmXHU3NDUwXHU3NDRlXHU3NDQyXHU3NDQ2XHU3NDRkXHU3NDU0XHU3NGUxXHU3NGZmXHU3''@;'; put 'put ''NGZlXHU3NGZkXHU3NTFkXHU3NTc5XHU3NTc3XHU2OTgzXHU3NWVmXHU3NjBmXHU3NjAzXHU3NWY3XHU3NWZlXHU3NWZjXHU3NWY5XHU3NWY4XHU3NjEwXHU3NWZiXHU3NWY2XHU3NWVkXHU3NWY1XHU3NWZkXHU3Njk5XHU3NmI1XHU3NmRkXHU3NzU1XHU3NzVmXHU3NzYwXHU3NzUyXHU3NzU2''@;'; put 'put ''XHU3NzVhXHU3NzY5XHU3NzY3XHU3NzU0XHU3NzU5XHU3NzZkXHU3N2UwXHU3ODg3XHU3ODlhXHU3ODk0XHU3ODhmXHU3ODg0XHU3ODk1XHU3ODg1XHU3ODg2XHU3OGExXHU3ODgzXHU3ODc5XHU3ODk5XHU3ODgwXHU3ODk2XHU3ODdiXHU3OTdjXHU3OTgyXHU3OTdkXHU3OTc5XHU3YTExXHU3''@;'; put 'put ''YTE4XHU3YTE5XHU3YTEyXHU3YTE3XHU3YTE1XHU3YTIyXHU3YTEzIl0sWyJkZjQwIiwiXHU3YTFiXHU3YTEwXHU3YWEzXHU3YWEyXHU3YTllXHU3YWViXHU3YjY2XHU3YjY0XHU3YjZkXHU3Yjc0XHU3YjY5XHU3YjcyXHU3YjY1XHU3YjczXHU3YjcxXHU3YjcwXHU3YjYxXHU3Yjc4XHU3Yjc2''@;'; put 'put ''XHU3YjYzXHU3Y2IyXHU3Y2I0XHU3Y2FmXHU3ZDg4XHU3ZDg2XHU3ZDgwXHU3ZDhkXHU3ZDdmXHU3ZDg1XHU3ZDdhXHU3ZDhlXHU3ZDdiXHU3ZDgzXHU3ZDdjXHU3ZDhjXHU3ZDk0XHU3ZDg0XHU3ZDdkXHU3ZDkyXHU3ZjZkXHU3ZjZiXHU3ZjY3XHU3ZjY4XHU3ZjZjXHU3ZmE2XHU3ZmE1XHU3''@;'; put 'put ''ZmE3XHU3ZmRiXHU3ZmRjXHU4MDIxXHU4MTY0XHU4MTYwXHU4MTc3XHU4MTVjXHU4MTY5XHU4MTViXHU4MTYyXHU4MTcyXHU2NzIxXHU4MTVlXHU4MTc2XHU4MTY3XHU4MTZmIl0sWyJkZmExIiwiXHU4MTQ0XHU4MTYxXHU4MjFkXHU4MjQ5XHU4MjQ0XHU4MjQwXHU4MjQyXHU4MjQ1XHU4NGYx''@;'; put 'put ''XHU4NDNmXHU4NDU2XHU4NDc2XHU4NDc5XHU4NDhmXHU4NDhkXHU4NDY1XHU4NDUxXHU4NDQwXHU4NDg2XHU4NDY3XHU4NDMwXHU4NDRkXHU4NDdkXHU4NDVhXHU4NDU5XHU4NDc0XHU4NDczXHU4NDVkXHU4NTA3XHU4NDVlXHU4NDM3XHU4NDNhXHU4NDM0XHU4NDdhXHU4NDQzXHU4NDc4XHU4''@;'; put 'put ''NDMyXHU4NDQ1XHU4NDI5XHU4M2Q5XHU4NDRiXHU4NDJmXHU4NDQyXHU4NDJkXHU4NDVmXHU4NDcwXHU4NDM5XHU4NDRlXHU4NDRjXHU4NDUyXHU4NDZmXHU4NGM1XHU4NDhlXHU4NDNiXHU4NDQ3XHU4NDM2XHU4NDMzXHU4NDY4XHU4NDdlXHU4NDQ0XHU4NDJiXHU4NDYwXHU4NDU0XHU4NDZl''@;'; put 'put ''XHU4NDUwXHU4NzBiXHU4NzA0XHU4NmY3XHU4NzBjXHU4NmZhXHU4NmQ2XHU4NmY1XHU4NzRkXHU4NmY4XHU4NzBlXHU4NzA5XHU4NzAxXHU4NmY2XHU4NzBkXHU4NzA1XHU4OGQ2XHU4OGNiXHU4OGNkXHU4OGNlXHU4OGRlXHU4OGRiXHU4OGRhXHU4OGNjXHU4OGQwXHU4OTg1XHU4OTliXHU4''@;'; put 'put ''OWRmXHU4OWU1XHU4OWU0Il0sWyJlMDQwIiwiXHU4OWUxXHU4OWUwXHU4OWUyXHU4OWRjXHU4OWU2XHU4YTc2XHU4YTg2XHU4YTdmXHU4YTYxXHU4YTNmXHU4YTc3XHU4YTgyXHU4YTg0XHU4YTc1XHU4YTgzXHU4YTgxXHU4YTc0XHU4YTdhXHU4YzNjXHU4YzRiXHU4YzRhXHU4YzY1XHU4YzY0''@;'; put 'put ''XHU4YzY2XHU4Yzg2XHU4Yzg0XHU4Yzg1XHU4Y2NjXHU4ZDY4XHU4ZDY5XHU4ZDkxXHU4ZDhjXHU4ZDhlXHU4ZDhmXHU4ZDhkXHU4ZDkzXHU4ZDk0XHU4ZDkwXHU4ZDkyXHU4ZGYwXHU4ZGUwXHU4ZGVjXHU4ZGYxXHU4ZGVlXHU4ZGQwXHU4ZGU5XHU4ZGUzXHU4ZGUyXHU4ZGU3XHU4ZGYyXHU4''@;'; put 'put ''ZGViXHU4ZGY0XHU4ZjA2XHU4ZWZmXHU4ZjAxXHU4ZjAwXHU4ZjA1XHU4ZjA3XHU4ZjA4XHU4ZjAyXHU4ZjBiXHU5MDUyXHU5MDNmIl0sWyJlMGExIiwiXHU5MDQ0XHU5MDQ5XHU5MDNkXHU5MTEwXHU5MTBkXHU5MTBmXHU5MTExXHU5MTE2XHU5MTE0XHU5MTBiXHU5MTBlXHU5MTZlXHU5MTZm''@;'; put 'put ''XHU5MjQ4XHU5MjUyXHU5MjMwXHU5MjNhXHU5MjY2XHU5MjMzXHU5MjY1XHU5MjVlXHU5MjgzXHU5MjJlXHU5MjRhXHU5MjQ2XHU5MjZkXHU5MjZjXHU5MjRmXHU5MjYwXHU5MjY3XHU5MjZmXHU5MjM2XHU5MjYxXHU5MjcwXHU5MjMxXHU5MjU0XHU5MjYzXHU5MjUwXHU5MjcyXHU5MjRlXHU5''@;'; put 'put ''MjUzXHU5MjRjXHU5MjU2XHU5MjMyXHU5NTlmXHU5NTljXHU5NTllXHU5NTliXHU5NjkyXHU5NjkzXHU5NjkxXHU5Njk3XHU5NmNlXHU5NmZhXHU5NmZkXHU5NmY4XHU5NmY1XHU5NzczXHU5Nzc3XHU5Nzc4XHU5NzcyXHU5ODBmXHU5ODBkXHU5ODBlXHU5OGFjXHU5OGY2XHU5OGY5XHU5OWFm''@;'; put 'put ''XHU5OWIyXHU5OWIwXHU5OWI1XHU5YWFkXHU5YWFiXHU5YjViXHU5Y2VhXHU5Y2VkXHU5Y2U3XHU5ZTgwXHU5ZWZkXHU1MGU2XHU1MGQ0XHU1MGQ3XHU1MGU4XHU1MGYzXHU1MGRiXHU1MGVhXHU1MGRkXHU1MGU0XHU1MGQzXHU1MGVjXHU1MGYwXHU1MGVmXHU1MGUzXHU1MGUwIl0sWyJlMTQw''@;'; put 'put ''IiwiXHU1MWQ4XHU1MjgwXHU1MjgxXHU1MmU5XHU1MmViXHU1MzMwXHU1M2FjXHU1NjI3XHU1NjE1XHU1NjBjXHU1NjEyXHU1NWZjXHU1NjBmXHU1NjFjXHU1NjAxXHU1NjEzXHU1NjAyXHU1NWZhXHU1NjFkXHU1NjA0XHU1NWZmXHU1NWY5XHU1ODg5XHU1ODdjXHU1ODkwXHU1ODk4XHU1ODg2''@;'; put 'put ''XHU1ODgxXHU1ODdmXHU1ODc0XHU1ODhiXHU1ODdhXHU1ODg3XHU1ODkxXHU1ODhlXHU1ODc2XHU1ODgyXHU1ODg4XHU1ODdiXHU1ODk0XHU1ODhmXHU1OGZlXHU1OTZiXHU1YWRjXHU1YWVlXHU1YWU1XHU1YWQ1XHU1YWVhXHU1YWRhXHU1YWVkXHU1YWViXHU1YWYzXHU1YWUyXHU1YWUwXHU1''@;'; put 'put ''YWRiXHU1YWVjXHU1YWRlXHU1YWRkXHU1YWQ5XHU1YWU4XHU1YWRmXHU1Yjc3XHU1YmUwIl0sWyJlMWExIiwiXHU1YmUzXHU1YzYzXHU1ZDgyXHU1ZDgwXHU1ZDdkXHU1ZDg2XHU1ZDdhXHU1ZDgxXHU1ZDc3XHU1ZDhhXHU1ZDg5XHU1ZDg4XHU1ZDdlXHU1ZDdjXHU1ZDhkXHU1ZDc5XHU1ZDdm''@;'; put 'put ''XHU1ZTU4XHU1ZTU5XHU1ZTUzXHU1ZWQ4XHU1ZWQxXHU1ZWQ3XHU1ZWNlXHU1ZWRjXHU1ZWQ1XHU1ZWQ5XHU1ZWQyXHU1ZWQ0XHU1ZjQ0XHU1ZjQzXHU1ZjZmXHU1ZmI2XHU2MTJjXHU2MTI4XHU2MTQxXHU2MTVlXHU2MTcxXHU2MTczXHU2MTUyXHU2MTUzXHU2MTcyXHU2MTZjXHU2MTgwXHU2''@;'; put 'put ''MTc0XHU2MTU0XHU2MTdhXHU2MTViXHU2MTY1XHU2MTNiXHU2MTZhXHU2MTYxXHU2MTU2XHU2MjI5XHU2MjI3XHU2MjJiXHU2NDJiXHU2NDRkXHU2NDViXHU2NDVkXHU2NDc0XHU2NDc2XHU2NDcyXHU2NDczXHU2NDdkXHU2NDc1XHU2NDY2XHU2NGE2XHU2NDRlXHU2NDgyXHU2NDVlXHU2NDVj''@;'; put 'put ''XHU2NDRiXHU2NDUzXHU2NDYwXHU2NDUwXHU2NDdmXHU2NDNmXHU2NDZjXHU2NDZiXHU2NDU5XHU2NDY1XHU2NDc3XHU2NTczXHU2NWEwXHU2NmExXHU2NmEwXHU2NjlmXHU2NzA1XHU2NzA0XHU2NzIyXHU2OWIxXHU2OWI2XHU2OWM5Il0sWyJlMjQwIiwiXHU2OWEwXHU2OWNlXHU2OTk2XHU2''@;'; put 'put ''OWIwXHU2OWFjXHU2OWJjXHU2OTkxXHU2OTk5XHU2OThlXHU2OWE3XHU2OThkXHU2OWE5XHU2OWJlXHU2OWFmXHU2OWJmXHU2OWM0XHU2OWJkXHU2OWE0XHU2OWQ0XHU2OWI5XHU2OWNhXHU2OTlhXHU2OWNmXHU2OWIzXHU2OTkzXHU2OWFhXHU2OWExXHU2OTllXHU2OWQ5XHU2OTk3XHU2OTkw''@;'; put 'put ''XHU2OWMyXHU2OWI1XHU2OWE1XHU2OWM2XHU2YjRhXHU2YjRkXHU2YjRiXHU2YjllXHU2YjlmXHU2YmEwXHU2YmMzXHU2YmM0XHU2YmZlXHU2ZWNlXHU2ZWY1XHU2ZWYxXHU2ZjAzXHU2ZjI1XHU2ZWY4XHU2ZjM3XHU2ZWZiXHU2ZjJlXHU2ZjA5XHU2ZjRlXHU2ZjE5XHU2ZjFhXHU2ZjI3XHU2''@;'; put 'put ''ZjE4XHU2ZjNiXHU2ZjEyXHU2ZWVkXHU2ZjBhIl0sWyJlMmExIiwiXHU2ZjM2XHU2ZjczXHU2ZWY5XHU2ZWVlXHU2ZjJkXHU2ZjQwXHU2ZjMwXHU2ZjNjXHU2ZjM1XHU2ZWViXHU2ZjA3XHU2ZjBlXHU2ZjQzXHU2ZjA1XHU2ZWZkXHU2ZWY2XHU2ZjM5XHU2ZjFjXHU2ZWZjXHU2ZjNhXHU2ZjFm''@;'; put 'put ''XHU2ZjBkXHU2ZjFlXHU2ZjA4XHU2ZjIxXHU3MTg3XHU3MTkwXHU3MTg5XHU3MTgwXHU3MTg1XHU3MTgyXHU3MThmXHU3MTdiXHU3MTg2XHU3MTgxXHU3MTk3XHU3MjQ0XHU3MjUzXHU3Mjk3XHU3Mjk1XHU3MjkzXHU3MzQzXHU3MzRkXHU3MzUxXHU3MzRjXHU3NDYyXHU3NDczXHU3NDcxXHU3''@;'; put 'put ''NDc1XHU3NDcyXHU3NDY3XHU3NDZlXHU3NTAwXHU3NTAyXHU3NTAzXHU3NTdkXHU3NTkwXHU3NjE2XHU3NjA4XHU3NjBjXHU3NjE1XHU3NjExXHU3NjBhXHU3NjE0XHU3NmI4XHU3NzgxXHU3NzdjXHU3Nzg1XHU3NzgyXHU3NzZlXHU3NzgwXHU3NzZmXHU3NzdlXHU3NzgzXHU3OGIyXHU3OGFh''@;'; put 'put ''XHU3OGI0XHU3OGFkXHU3OGE4XHU3ODdlXHU3OGFiXHU3ODllXHU3OGE1XHU3OGEwXHU3OGFjXHU3OGEyXHU3OGE0XHU3OTk4XHU3OThhXHU3OThiXHU3OTk2XHU3OTk1XHU3OTk0XHU3OTkzIl0sWyJlMzQwIiwiXHU3OTk3XHU3OTg4XHU3OTkyXHU3OTkwXHU3YTJiXHU3YTRhXHU3YTMwXHU3''@;'; put 'put ''YTJmXHU3YTI4XHU3YTI2XHU3YWE4XHU3YWFiXHU3YWFjXHU3YWVlXHU3Yjg4XHU3YjljXHU3YjhhXHU3YjkxXHU3YjkwXHU3Yjk2XHU3YjhkXHU3YjhjXHU3YjliXHU3YjhlXHU3Yjg1XHU3Yjk4XHU1Mjg0XHU3Yjk5XHU3YmE0XHU3YjgyXHU3Y2JiXHU3Y2JmXHU3Y2JjXHU3Y2JhXHU3ZGE3''@;'; put 'put ''XHU3ZGI3XHU3ZGMyXHU3ZGEzXHU3ZGFhXHU3ZGMxXHU3ZGMwXHU3ZGM1XHU3ZDlkXHU3ZGNlXHU3ZGM0XHU3ZGM2XHU3ZGNiXHU3ZGNjXHU3ZGFmXHU3ZGI5XHU3ZDk2XHU3ZGJjXHU3ZDlmXHU3ZGE2XHU3ZGFlXHU3ZGE5XHU3ZGExXHU3ZGM5XHU3ZjczXHU3ZmUyXHU3ZmUzXHU3ZmU1XHU3''@;'; put 'put ''ZmRlIl0sWyJlM2ExIiwiXHU4MDI0XHU4MDVkXHU4MDVjXHU4MTg5XHU4MTg2XHU4MTgzXHU4MTg3XHU4MThkXHU4MThjXHU4MThiXHU4MjE1XHU4NDk3XHU4NGE0XHU4NGExXHU4NDlmXHU4NGJhXHU4NGNlXHU4NGMyXHU4NGFjXHU4NGFlXHU4NGFiXHU4NGI5XHU4NGI0XHU4NGMxXHU4NGNk''@;'; put 'put ''XHU4NGFhXHU4NDlhXHU4NGIxXHU4NGQwXHU4NDlkXHU4NGE3XHU4NGJiXHU4NGEyXHU4NDk0XHU4NGM3XHU4NGNjXHU4NDliXHU4NGE5XHU4NGFmXHU4NGE4XHU4NGQ2XHU4NDk4XHU4NGI2XHU4NGNmXHU4NGEwXHU4NGQ3XHU4NGQ0XHU4NGQyXHU4NGRiXHU4NGIwXHU4NDkxXHU4NjYxXHU4''@;'; put 'put ''NzMzXHU4NzIzXHU4NzI4XHU4NzZiXHU4NzQwXHU4NzJlXHU4NzFlXHU4NzIxXHU4NzE5XHU4NzFiXHU4NzQzXHU4NzJjXHU4NzQxXHU4NzNlXHU4NzQ2XHU4NzIwXHU4NzMyXHU4NzJhXHU4NzJkXHU4NzNjXHU4NzEyXHU4NzNhXHU4NzMxXHU4NzM1XHU4NzQyXHU4NzI2XHU4NzI3XHU4NzM4''@;'; put 'put ''XHU4NzI0XHU4NzFhXHU4NzMwXHU4NzExXHU4OGY3XHU4OGU3XHU4OGYxXHU4OGYyXHU4OGZhXHU4OGZlXHU4OGVlXHU4OGZjXHU4OGY2XHU4OGZiIl0sWyJlNDQwIiwiXHU4OGYwXHU4OGVjXHU4OGViXHU4OTlkXHU4OWExXHU4OTlmXHU4OTllXHU4OWU5XHU4OWViXHU4OWU4XHU4YWFiXHU4''@;'; put 'put ''YTk5XHU4YThiXHU4YTkyXHU4YThmXHU4YTk2XHU4YzNkXHU4YzY4XHU4YzY5XHU4Y2Q1XHU4Y2NmXHU4Y2Q3XHU4ZDk2XHU4ZTA5XHU4ZTAyXHU4ZGZmXHU4ZTBkXHU4ZGZkXHU4ZTBhXHU4ZTAzXHU4ZTA3XHU4ZTA2XHU4ZTA1XHU4ZGZlXHU4ZTAwXHU4ZTA0XHU4ZjEwXHU4ZjExXHU4ZjBl''@;'; put 'put ''XHU4ZjBkXHU5MTIzXHU5MTFjXHU5MTIwXHU5MTIyXHU5MTFmXHU5MTFkXHU5MTFhXHU5MTI0XHU5MTIxXHU5MTFiXHU5MTdhXHU5MTcyXHU5MTc5XHU5MTczXHU5MmE1XHU5MmE0XHU5Mjc2XHU5MjliXHU5MjdhXHU5MmEwXHU5Mjk0XHU5MmFhXHU5MjhkIl0sWyJlNGExIiwiXHU5MmE2XHU5''@;'; put 'put ''MjlhXHU5MmFiXHU5Mjc5XHU5Mjk3XHU5MjdmXHU5MmEzXHU5MmVlXHU5MjhlXHU5MjgyXHU5Mjk1XHU5MmEyXHU5MjdkXHU5Mjg4XHU5MmExXHU5MjhhXHU5Mjg2XHU5MjhjXHU5Mjk5XHU5MmE3XHU5MjdlXHU5Mjg3XHU5MmE5XHU5MjlkXHU5MjhiXHU5MjJkXHU5NjllXHU5NmExXHU5NmZm''@;'; put 'put ''XHU5NzU4XHU5NzdkXHU5NzdhXHU5NzdlXHU5NzgzXHU5NzgwXHU5NzgyXHU5NzdiXHU5Nzg0XHU5NzgxXHU5NzdmXHU5N2NlXHU5N2NkXHU5ODE2XHU5OGFkXHU5OGFlXHU5OTAyXHU5OTAwXHU5OTA3XHU5OTlkXHU5OTljXHU5OWMzXHU5OWI5XHU5OWJiXHU5OWJhXHU5OWMyXHU5OWJkXHU5''@;'; put 'put ''OWM3XHU5YWIxXHU5YWUzXHU5YWU3XHU5YjNlXHU5YjNmXHU5YjYwXHU5YjYxXHU5YjVmXHU5Y2YxXHU5Y2YyXHU5Y2Y1XHU5ZWE3XHU1MGZmXHU1MTAzXHU1MTMwXHU1MGY4XHU1MTA2XHU1MTA3XHU1MGY2XHU1MGZlXHU1MTBiXHU1MTBjXHU1MGZkXHU1MTBhXHU1MjhiXHU1MjhjXHU1MmYx''@;'; put 'put ''XHU1MmVmXHU1NjQ4XHU1NjQyXHU1NjRjXHU1NjM1XHU1NjQxXHU1NjRhXHU1NjQ5XHU1NjQ2XHU1NjU4Il0sWyJlNTQwIiwiXHU1NjVhXHU1NjQwXHU1NjMzXHU1NjNkXHU1NjJjXHU1NjNlXHU1NjM4XHU1NjJhXHU1NjNhXHU1NzFhXHU1OGFiXHU1ODlkXHU1OGIxXHU1OGEwXHU1OGEzXHU1''@;'; put 'put ''OGFmXHU1OGFjXHU1OGE1XHU1OGExXHU1OGZmXHU1YWZmXHU1YWY0XHU1YWZkXHU1YWY3XHU1YWY2XHU1YjAzXHU1YWY4XHU1YjAyXHU1YWY5XHU1YjAxXHU1YjA3XHU1YjA1XHU1YjBmXHU1YzY3XHU1ZDk5XHU1ZDk3XHU1ZDlmXHU1ZDkyXHU1ZGEyXHU1ZDkzXHU1ZDk1XHU1ZGEwXHU1ZDlj''@;'; put 'put ''XHU1ZGExXHU1ZDlhXHU1ZDllXHU1ZTY5XHU1ZTVkXHU1ZTYwXHU1ZTVjXHU3ZGYzXHU1ZWRiXHU1ZWRlXHU1ZWUxXHU1ZjQ5XHU1ZmIyXHU2MThiXHU2MTgzXHU2MTc5XHU2MWIxXHU2MWIwXHU2MWEyXHU2MTg5Il0sWyJlNWExIiwiXHU2MTliXHU2MTkzXHU2MWFmXHU2MWFkXHU2MTlmXHU2''@;'; put 'put ''MTkyXHU2MWFhXHU2MWExXHU2MThkXHU2MTY2XHU2MWIzXHU2MjJkXHU2NDZlXHU2NDcwXHU2NDk2XHU2NGEwXHU2NDg1XHU2NDk3XHU2NDljXHU2NDhmXHU2NDhiXHU2NDhhXHU2NDhjXHU2NGEzXHU2NDlmXHU2NDY4XHU2NGIxXHU2NDk4XHU2NTc2XHU2NTdhXHU2NTc5XHU2NTdiXHU2NWIy''@;'; put 'put ''XHU2NWIzXHU2NmI1XHU2NmIwXHU2NmE5XHU2NmIyXHU2NmI3XHU2NmFhXHU2NmFmXHU2YTAwXHU2YTA2XHU2YTE3XHU2OWU1XHU2OWY4XHU2YTE1XHU2OWYxXHU2OWU0XHU2YTIwXHU2OWZmXHU2OWVjXHU2OWUyXHU2YTFiXHU2YTFkXHU2OWZlXHU2YTI3XHU2OWYyXHU2OWVlXHU2YTE0XHU2''@;'; put 'put ''OWY3XHU2OWU3XHU2YTQwXHU2YTA4XHU2OWU2XHU2OWZiXHU2YTBkXHU2OWZjXHU2OWViXHU2YTA5XHU2YTA0XHU2YTE4XHU2YTI1XHU2YTBmXHU2OWY2XHU2YTI2XHU2YTA3XHU2OWY0XHU2YTE2XHU2YjUxXHU2YmE1XHU2YmEzXHU2YmEyXHU2YmE2XHU2YzAxXHU2YzAwXHU2YmZmXHU2YzAy''@;'; put 'put ''XHU2ZjQxXHU2ZjI2XHU2ZjdlXHU2Zjg3XHU2ZmM2XHU2ZjkyIl0sWyJlNjQwIiwiXHU2ZjhkXHU2Zjg5XHU2ZjhjXHU2ZjYyXHU2ZjRmXHU2Zjg1XHU2ZjVhXHU2Zjk2XHU2Zjc2XHU2ZjZjXHU2ZjgyXHU2ZjU1XHU2ZjcyXHU2ZjUyXHU2ZjUwXHU2ZjU3XHU2Zjk0XHU2ZjkzXHU2ZjVkXHU2''@;'; put 'put ''ZjAwXHU2ZjYxXHU2ZjZiXHU2ZjdkXHU2ZjY3XHU2ZjkwXHU2ZjUzXHU2ZjhiXHU2ZjY5XHU2ZjdmXHU2Zjk1XHU2ZjYzXHU2Zjc3XHU2ZjZhXHU2ZjdiXHU3MWIyXHU3MWFmXHU3MTliXHU3MWIwXHU3MWEwXHU3MTlhXHU3MWE5XHU3MWI1XHU3MTlkXHU3MWE1XHU3MTllXHU3MWE0XHU3MWEx''@;'; put 'put ''XHU3MWFhXHU3MTljXHU3MWE3XHU3MWIzXHU3Mjk4XHU3MjlhXHU3MzU4XHU3MzUyXHU3MzVlXHU3MzVmXHU3MzYwXHU3MzVkXHU3MzViXHU3MzYxXHU3MzVhXHU3MzU5Il0sWyJlNmExIiwiXHU3MzYyXHU3NDg3XHU3NDg5XHU3NDhhXHU3NDg2XHU3NDgxXHU3NDdkXHU3NDg1XHU3NDg4XHU3''@;'; put 'put ''NDdjXHU3NDc5XHU3NTA4XHU3NTA3XHU3NTdlXHU3NjI1XHU3NjFlXHU3NjE5XHU3NjFkXHU3NjFjXHU3NjIzXHU3NjFhXHU3NjI4XHU3NjFiXHU3NjljXHU3NjlkXHU3NjllXHU3NjliXHU3NzhkXHU3NzhmXHU3Nzg5XHU3Nzg4XHU3OGNkXHU3OGJiXHU3OGNmXHU3OGNjXHU3OGQxXHU3OGNl''@;'; put 'put ''XHU3OGQ0XHU3OGM4XHU3OGMzXHU3OGM0XHU3OGM5XHU3OTlhXHU3OWExXHU3OWEwXHU3OTljXHU3OWEyXHU3OTliXHU2Yjc2XHU3YTM5XHU3YWIyXHU3YWI0XHU3YWIzXHU3YmI3XHU3YmNiXHU3YmJlXHU3YmFjXHU3YmNlXHU3YmFmXHU3YmI5XHU3YmNhXHU3YmI1XHU3Y2M1XHU3Y2M4XHU3''@;'; put 'put ''Y2NjXHU3Y2NiXHU3ZGY3XHU3ZGRiXHU3ZGVhXHU3ZGU3XHU3ZGQ3XHU3ZGUxXHU3ZTAzXHU3ZGZhXHU3ZGU2XHU3ZGY2XHU3ZGYxXHU3ZGYwXHU3ZGVlXHU3ZGRmXHU3Zjc2XHU3ZmFjXHU3ZmIwXHU3ZmFkXHU3ZmVkXHU3ZmViXHU3ZmVhXHU3ZmVjXHU3ZmU2XHU3ZmU4XHU4MDY0XHU4MDY3''@;'; put 'put ''XHU4MWEzXHU4MTlmIl0sWyJlNzQwIiwiXHU4MTllXHU4MTk1XHU4MWEyXHU4MTk5XHU4MTk3XHU4MjE2XHU4MjRmXHU4MjUzXHU4MjUyXHU4MjUwXHU4MjRlXHU4MjUxXHU4NTI0XHU4NTNiXHU4NTBmXHU4NTAwXHU4NTI5XHU4NTBlXHU4NTA5XHU4NTBkXHU4NTFmXHU4NTBhXHU4NTI3XHU4''@;'; put 'put ''NTFjXHU4NGZiXHU4NTJiXHU4NGZhXHU4NTA4XHU4NTBjXHU4NGY0XHU4NTJhXHU4NGYyXHU4NTE1XHU4NGY3XHU4NGViXHU4NGYzXHU4NGZjXHU4NTEyXHU4NGVhXHU4NGU5XHU4NTE2XHU4NGZlXHU4NTI4XHU4NTFkXHU4NTJlXHU4NTAyXHU4NGZkXHU4NTFlXHU4NGY2XHU4NTMxXHU4NTI2''@;'; put 'put ''XHU4NGU3XHU4NGU4XHU4NGYwXHU4NGVmXHU4NGY5XHU4NTE4XHU4NTIwXHU4NTMwXHU4NTBiXHU4NTE5XHU4NTJmXHU4NjYyIl0sWyJlN2ExIiwiXHU4NzU2XHU4NzYzXHU4NzY0XHU4Nzc3XHU4N2UxXHU4NzczXHU4NzU4XHU4NzU0XHU4NzViXHU4NzUyXHU4NzYxXHU4NzVhXHU4NzUxXHU4''@;'; put 'put ''NzVlXHU4NzZkXHU4NzZhXHU4NzUwXHU4NzRlXHU4NzVmXHU4NzVkXHU4NzZmXHU4NzZjXHU4NzdhXHU4NzZlXHU4NzVjXHU4NzY1XHU4NzRmXHU4NzdiXHU4Nzc1XHU4NzYyXHU4NzY3XHU4NzY5XHU4ODVhXHU4OTA1XHU4OTBjXHU4OTE0XHU4OTBiXHU4OTE3XHU4OTE4XHU4OTE5XHU4OTA2''@;'; put 'put ''XHU4OTE2XHU4OTExXHU4OTBlXHU4OTA5XHU4OWEyXHU4OWE0XHU4OWEzXHU4OWVkXHU4OWYwXHU4OWVjXHU4YWNmXHU4YWM2XHU4YWI4XHU4YWQzXHU4YWQxXHU4YWQ0XHU4YWQ1XHU4YWJiXHU4YWQ3XHU4YWJlXHU4YWMwXHU4YWM1XHU4YWQ4XHU4YWMzXHU4YWJhXHU4YWJkXHU4YWQ5XHU4''@;'; put 'put ''YzNlXHU4YzRkXHU4YzhmXHU4Y2U1XHU4Y2RmXHU4Y2Q5XHU4Y2U4XHU4Y2RhXHU4Y2RkXHU4Y2U3XHU4ZGEwXHU4ZDljXHU4ZGExXHU4ZDliXHU4ZTIwXHU4ZTIzXHU4ZTI1XHU4ZTI0XHU4ZTJlXHU4ZTE1XHU4ZTFiXHU4ZTE2XHU4ZTExXHU4ZTE5XHU4ZTI2XHU4ZTI3Il0sWyJlODQwIiwi''@;'; put 'put ''XHU4ZTE0XHU4ZTEyXHU4ZTE4XHU4ZTEzXHU4ZTFjXHU4ZTE3XHU4ZTFhXHU4ZjJjXHU4ZjI0XHU4ZjE4XHU4ZjFhXHU4ZjIwXHU4ZjIzXHU4ZjE2XHU4ZjE3XHU5MDczXHU5MDcwXHU5MDZmXHU5MDY3XHU5MDZiXHU5MTJmXHU5MTJiXHU5MTI5XHU5MTJhXHU5MTMyXHU5MTI2XHU5MTJlXHU5''@;'; put 'put ''MTg1XHU5MTg2XHU5MThhXHU5MTgxXHU5MTgyXHU5MTg0XHU5MTgwXHU5MmQwXHU5MmMzXHU5MmM0XHU5MmMwXHU5MmQ5XHU5MmI2XHU5MmNmXHU5MmYxXHU5MmRmXHU5MmQ4XHU5MmU5XHU5MmQ3XHU5MmRkXHU5MmNjXHU5MmVmXHU5MmMyXHU5MmU4XHU5MmNhXHU5MmM4XHU5MmNlXHU5MmU2''@;'; put 'put ''XHU5MmNkXHU5MmQ1XHU5MmM5XHU5MmUwXHU5MmRlXHU5MmU3XHU5MmQxXHU5MmQzIl0sWyJlOGExIiwiXHU5MmI1XHU5MmUxXHU5MmM2XHU5MmI0XHU5NTdjXHU5NWFjXHU5NWFiXHU5NWFlXHU5NWIwXHU5NmE0XHU5NmEyXHU5NmQzXHU5NzA1XHU5NzA4XHU5NzAyXHU5NzVhXHU5NzhhXHU5''@;'; put 'put ''NzhlXHU5Nzg4XHU5N2QwXHU5N2NmXHU5ODFlXHU5ODFkXHU5ODI2XHU5ODI5XHU5ODI4XHU5ODIwXHU5ODFiXHU5ODI3XHU5OGIyXHU5OTA4XHU5OGZhXHU5OTExXHU5OTE0XHU5OTE2XHU5OTE3XHU5OTE1XHU5OWRjXHU5OWNkXHU5OWNmXHU5OWQzXHU5OWQ0XHU5OWNlXHU5OWM5XHU5OWQ2''@;'; put 'put ''XHU5OWQ4XHU5OWNiXHU5OWQ3XHU5OWNjXHU5YWIzXHU5YWVjXHU5YWViXHU5YWYzXHU5YWYyXHU5YWYxXHU5YjQ2XHU5YjQzXHU5YjY3XHU5Yjc0XHU5YjcxXHU5YjY2XHU5Yjc2XHU5Yjc1XHU5YjcwXHU5YjY4XHU5YjY0XHU5YjZjXHU5Y2ZjXHU5Y2ZhXHU5Y2ZkXHU5Y2ZmXHU5Y2Y3XHU5''@;'; put 'put ''ZDA3XHU5ZDAwXHU5Y2Y5XHU5Y2ZiXHU5ZDA4XHU5ZDA1XHU5ZDA0XHU5ZTgzXHU5ZWQzXHU5ZjBmXHU5ZjEwXHU1MTFjXHU1MTEzXHU1MTE3XHU1MTFhXHU1MTExXHU1MWRlXHU1MzM0XHU1M2UxXHU1NjcwXHU1NjYwXHU1NjZlIl0sWyJlOTQwIiwiXHU1NjczXHU1NjY2XHU1NjYzXHU1NjZk''@;'; put 'put ''XHU1NjcyXHU1NjVlXHU1Njc3XHU1NzFjXHU1NzFiXHU1OGM4XHU1OGJkXHU1OGM5XHU1OGJmXHU1OGJhXHU1OGMyXHU1OGJjXHU1OGM2XHU1YjE3XHU1YjE5XHU1YjFiXHU1YjIxXHU1YjE0XHU1YjEzXHU1YjEwXHU1YjE2XHU1YjI4XHU1YjFhXHU1YjIwXHU1YjFlXHU1YmVmXHU1ZGFjXHU1''@;'; put 'put ''ZGIxXHU1ZGE5XHU1ZGE3XHU1ZGI1XHU1ZGIwXHU1ZGFlXHU1ZGFhXHU1ZGE4XHU1ZGIyXHU1ZGFkXHU1ZGFmXHU1ZGI0XHU1ZTY3XHU1ZTY4XHU1ZTY2XHU1ZTZmXHU1ZWU5XHU1ZWU3XHU1ZWU2XHU1ZWU4XHU1ZWU1XHU1ZjRiXHU1ZmJjXHU2MTlkXHU2MWE4XHU2MTk2XHU2MWM1XHU2MWI0''@;'; put 'put ''XHU2MWM2XHU2MWMxXHU2MWNjXHU2MWJhIl0sWyJlOWExIiwiXHU2MWJmXHU2MWI4XHU2MThjXHU2NGQ3XHU2NGQ2XHU2NGQwXHU2NGNmXHU2NGM5XHU2NGJkXHU2NDg5XHU2NGMzXHU2NGRiXHU2NGYzXHU2NGQ5XHU2NTMzXHU2NTdmXHU2NTdjXHU2NWEyXHU2NmM4XHU2NmJlXHU2NmMwXHU2''@;'; put 'put ''NmNhXHU2NmNiXHU2NmNmXHU2NmJkXHU2NmJiXHU2NmJhXHU2NmNjXHU2NzIzXHU2YTM0XHU2YTY2XHU2YTQ5XHU2YTY3XHU2YTMyXHU2YTY4XHU2YTNlXHU2YTVkXHU2YTZkXHU2YTc2XHU2YTViXHU2YTUxXHU2YTI4XHU2YTVhXHU2YTNiXHU2YTNmXHU2YTQxXHU2YTZhXHU2YTY0XHU2YTUw''@;'; put 'put ''XHU2YTRmXHU2YTU0XHU2YTZmXHU2YTY5XHU2YTYwXHU2YTNjXHU2YTVlXHU2YTU2XHU2YTU1XHU2YTRkXHU2YTRlXHU2YTQ2XHU2YjU1XHU2YjU0XHU2YjU2XHU2YmE3XHU2YmFhXHU2YmFiXHU2YmM4XHU2YmM3XHU2YzA0XHU2YzAzXHU2YzA2XHU2ZmFkXHU2ZmNiXHU2ZmEzXHU2ZmM3XHU2''@;'; put 'put ''ZmJjXHU2ZmNlXHU2ZmM4XHU2ZjVlXHU2ZmM0XHU2ZmJkXHU2ZjllXHU2ZmNhXHU2ZmE4XHU3MDA0XHU2ZmE1XHU2ZmFlXHU2ZmJhXHU2ZmFjXHU2ZmFhXHU2ZmNmXHU2ZmJmXHU2ZmI4Il0sWyJlYTQwIiwiXHU2ZmEyXHU2ZmM5XHU2ZmFiXHU2ZmNkXHU2ZmFmXHU2ZmIyXHU2ZmIwXHU3MWM1''@;'; put 'put ''XHU3MWMyXHU3MWJmXHU3MWI4XHU3MWQ2XHU3MWMwXHU3MWMxXHU3MWNiXHU3MWQ0XHU3MWNhXHU3MWM3XHU3MWNmXHU3MWJkXHU3MWQ4XHU3MWJjXHU3MWM2XHU3MWRhXHU3MWRiXHU3MjlkXHU3MjllXHU3MzY5XHU3MzY2XHU3MzY3XHU3MzZjXHU3MzY1XHU3MzZiXHU3MzZhXHU3NDdmXHU3''@;'; put 'put ''NDlhXHU3NGEwXHU3NDk0XHU3NDkyXHU3NDk1XHU3NGExXHU3NTBiXHU3NTgwXHU3NjJmXHU3NjJkXHU3NjMxXHU3NjNkXHU3NjMzXHU3NjNjXHU3NjM1XHU3NjMyXHU3NjMwXHU3NmJiXHU3NmU2XHU3NzlhXHU3NzlkXHU3N2ExXHU3NzljXHU3NzliXHU3N2EyXHU3N2EzXHU3Nzk1XHU3Nzk5''@;'; put 'put ''Il0sWyJlYWExIiwiXHU3Nzk3XHU3OGRkXHU3OGU5XHU3OGU1XHU3OGVhXHU3OGRlXHU3OGUzXHU3OGRiXHU3OGUxXHU3OGUyXHU3OGVkXHU3OGRmXHU3OGUwXHU3OWE0XHU3YTQ0XHU3YTQ4XHU3YTQ3XHU3YWI2XHU3YWI4XHU3YWI1XHU3YWIxXHU3YWI3XHU3YmRlXHU3YmUzXHU3YmU3XHU3''@;'; put 'put ''YmRkXHU3YmQ1XHU3YmU1XHU3YmRhXHU3YmU4XHU3YmY5XHU3YmQ0XHU3YmVhXHU3YmUyXHU3YmRjXHU3YmViXHU3YmQ4XHU3YmRmXHU3Y2QyXHU3Y2Q0XHU3Y2Q3XHU3Y2QwXHU3Y2QxXHU3ZTEyXHU3ZTIxXHU3ZTE3XHU3ZTBjXHU3ZTFmXHU3ZTIwXHU3ZTEzXHU3ZTBlXHU3ZTFjXHU3ZTE1''@;'; put 'put ''XHU3ZTFhXHU3ZTIyXHU3ZTBiXHU3ZTBmXHU3ZTE2XHU3ZTBkXHU3ZTE0XHU3ZTI1XHU3ZTI0XHU3ZjQzXHU3ZjdiXHU3ZjdjXHU3ZjdhXHU3ZmIxXHU3ZmVmXHU4MDJhXHU4MDI5XHU4MDZjXHU4MWIxXHU4MWE2XHU4MWFlXHU4MWI5XHU4MWI1XHU4MWFiXHU4MWIwXHU4MWFjXHU4MWI0XHU4''@;'; put 'put ''MWIyXHU4MWI3XHU4MWE3XHU4MWYyXHU4MjU1XHU4MjU2XHU4MjU3XHU4NTU2XHU4NTQ1XHU4NTZiXHU4NTRkXHU4NTUzXHU4NTYxXHU4NTU4Il0sWyJlYjQwIiwiXHU4NTQwXHU4NTQ2XHU4NTY0XHU4NTQxXHU4NTYyXHU4NTQ0XHU4NTUxXHU4NTQ3XHU4NTYzXHU4NTNlXHU4NTViXHU4NTcx''@;'; put 'put ''XHU4NTRlXHU4NTZlXHU4NTc1XHU4NTU1XHU4NTY3XHU4NTYwXHU4NThjXHU4NTY2XHU4NTVkXHU4NTU0XHU4NTY1XHU4NTZjXHU4NjYzXHU4NjY1XHU4NjY0XHU4NzliXHU4NzhmXHU4Nzk3XHU4NzkzXHU4NzkyXHU4Nzg4XHU4NzgxXHU4Nzk2XHU4Nzk4XHU4Nzc5XHU4Nzg3XHU4N2EzXHU4''@;'; put 'put ''Nzg1XHU4NzkwXHU4NzkxXHU4NzlkXHU4Nzg0XHU4Nzk0XHU4NzljXHU4NzlhXHU4Nzg5XHU4OTFlXHU4OTI2XHU4OTMwXHU4OTJkXHU4OTJlXHU4OTI3XHU4OTMxXHU4OTIyXHU4OTI5XHU4OTIzXHU4OTJmXHU4OTJjXHU4OTFmXHU4OWYxXHU4YWUwIl0sWyJlYmExIiwiXHU4YWUyXHU4YWYy''@;'; put 'put ''XHU4YWY0XHU4YWY1XHU4YWRkXHU4YjE0XHU4YWU0XHU4YWRmXHU4YWYwXHU4YWM4XHU4YWRlXHU4YWUxXHU4YWU4XHU4YWZmXHU4YWVmXHU4YWZiXHU4YzkxXHU4YzkyXHU4YzkwXHU4Y2Y1XHU4Y2VlXHU4Y2YxXHU4Y2YwXHU4Y2YzXHU4ZDZjXHU4ZDZlXHU4ZGE1XHU4ZGE3XHU4ZTMzXHU4''@;'; put 'put ''ZTNlXHU4ZTM4XHU4ZTQwXHU4ZTQ1XHU4ZTM2XHU4ZTNjXHU4ZTNkXHU4ZTQxXHU4ZTMwXHU4ZTNmXHU4ZWJkXHU4ZjM2XHU4ZjJlXHU4ZjM1XHU4ZjMyXHU4ZjM5XHU4ZjM3XHU4ZjM0XHU5MDc2XHU5MDc5XHU5MDdiXHU5MDg2XHU5MGZhXHU5MTMzXHU5MTM1XHU5MTM2XHU5MTkzXHU5MTkw''@;'; put 'put ''XHU5MTkxXHU5MThkXHU5MThmXHU5MzI3XHU5MzFlXHU5MzA4XHU5MzFmXHU5MzA2XHU5MzBmXHU5MzdhXHU5MzM4XHU5MzNjXHU5MzFiXHU5MzIzXHU5MzEyXHU5MzAxXHU5MzQ2XHU5MzJkXHU5MzBlXHU5MzBkXHU5MmNiXHU5MzFkXHU5MmZhXHU5MzI1XHU5MzEzXHU5MmY5XHU5MmY3XHU5''@;'; put 'put ''MzM0XHU5MzAyXHU5MzI0XHU5MmZmXHU5MzI5XHU5MzM5XHU5MzM1XHU5MzJhXHU5MzE0XHU5MzBjIl0sWyJlYzQwIiwiXHU5MzBiXHU5MmZlXHU5MzA5XHU5MzAwXHU5MmZiXHU5MzE2XHU5NWJjXHU5NWNkXHU5NWJlXHU5NWI5XHU5NWJhXHU5NWI2XHU5NWJmXHU5NWI1XHU5NWJkXHU5NmE5''@;'; put 'put ''XHU5NmQ0XHU5NzBiXHU5NzEyXHU5NzEwXHU5Nzk5XHU5Nzk3XHU5Nzk0XHU5N2YwXHU5N2Y4XHU5ODM1XHU5ODJmXHU5ODMyXHU5OTI0XHU5OTFmXHU5OTI3XHU5OTI5XHU5OTllXHU5OWVlXHU5OWVjXHU5OWU1XHU5OWU0XHU5OWYwXHU5OWUzXHU5OWVhXHU5OWU5XHU5OWU3XHU5YWI5XHU5''@;'; put 'put ''YWJmXHU5YWI0XHU5YWJiXHU5YWY2XHU5YWZhXHU5YWY5XHU5YWY3XHU5YjMzXHU5YjgwXHU5Yjg1XHU5Yjg3XHU5YjdjXHU5YjdlXHU5YjdiXHU5YjgyXHU5YjkzXHU5YjkyXHU5YjkwXHU5YjdhXHU5Yjk1Il0sWyJlY2ExIiwiXHU5YjdkXHU5Yjg4XHU5ZDI1XHU5ZDE3XHU5ZDIwXHU5ZDFl''@;'; put 'put ''XHU5ZDE0XHU5ZDI5XHU5ZDFkXHU5ZDE4XHU5ZDIyXHU5ZDEwXHU5ZDE5XHU5ZDFmXHU5ZTg4XHU5ZTg2XHU5ZTg3XHU5ZWFlXHU5ZWFkXHU5ZWQ1XHU5ZWQ2XHU5ZWZhXHU5ZjEyXHU5ZjNkXHU1MTI2XHU1MTI1XHU1MTIyXHU1MTI0XHU1MTIwXHU1MTI5XHU1MmY0XHU1NjkzXHU1NjhjXHU1''@;'; put 'put ''NjhkXHU1Njg2XHU1Njg0XHU1NjgzXHU1NjdlXHU1NjgyXHU1NjdmXHU1NjgxXHU1OGQ2XHU1OGQ0XHU1OGNmXHU1OGQyXHU1YjJkXHU1YjI1XHU1YjMyXHU1YjIzXHU1YjJjXHU1YjI3XHU1YjI2XHU1YjJmXHU1YjJlXHU1YjdiXHU1YmYxXHU1YmYyXHU1ZGI3XHU1ZTZjXHU1ZTZhXHU1ZmJl''@;'; put 'put ''XHU1ZmJiXHU2MWMzXHU2MWI1XHU2MWJjXHU2MWU3XHU2MWUwXHU2MWU1XHU2MWU0XHU2MWU4XHU2MWRlXHU2NGVmXHU2NGU5XHU2NGUzXHU2NGViXHU2NGU0XHU2NGU4XHU2NTgxXHU2NTgwXHU2NWI2XHU2NWRhXHU2NmQyXHU2YThkXHU2YTk2XHU2YTgxXHU2YWE1XHU2YTg5XHU2YTlmXHU2''@;'; put 'put ''YTliXHU2YWExXHU2YTllXHU2YTg3XHU2YTkzXHU2YThlIl0sWyJlZDQwIiwiXHU2YTk1XHU2YTgzXHU2YWE4XHU2YWE0XHU2YTkxXHU2YTdmXHU2YWE2XHU2YTlhXHU2YTg1XHU2YThjXHU2YTkyXHU2YjViXHU2YmFkXHU2YzA5XHU2ZmNjXHU2ZmE5XHU2ZmY0XHU2ZmQ0XHU2ZmUzXHU2ZmRj''@;'; put 'put ''XHU2ZmVkXHU2ZmU3XHU2ZmU2XHU2ZmRlXHU2ZmYyXHU2ZmRkXHU2ZmUyXHU2ZmU4XHU3MWUxXHU3MWYxXHU3MWU4XHU3MWYyXHU3MWU0XHU3MWYwXHU3MWUyXHU3MzczXHU3MzZlXHU3MzZmXHU3NDk3XHU3NGIyXHU3NGFiXHU3NDkwXHU3NGFhXHU3NGFkXHU3NGIxXHU3NGE1XHU3NGFmXHU3''@;'; put 'put ''NTEwXHU3NTExXHU3NTEyXHU3NTBmXHU3NTg0XHU3NjQzXHU3NjQ4XHU3NjQ5XHU3NjQ3XHU3NmE0XHU3NmU5XHU3N2I1XHU3N2FiXHU3N2IyXHU3N2I3XHU3N2I2Il0sWyJlZGExIiwiXHU3N2I0XHU3N2IxXHU3N2E4XHU3N2YwXHU3OGYzXHU3OGZkXHU3OTAyXHU3OGZiXHU3OGZjXHU3OGYy''@;'; put 'put ''XHU3OTA1XHU3OGY5XHU3OGZlXHU3OTA0XHU3OWFiXHU3OWE4XHU3YTVjXHU3YTViXHU3YTU2XHU3YTU4XHU3YTU0XHU3YTVhXHU3YWJlXHU3YWMwXHU3YWMxXHU3YzA1XHU3YzBmXHU3YmYyXHU3YzAwXHU3YmZmXHU3YmZiXHU3YzBlXHU3YmY0XHU3YzBiXHU3YmYzXHU3YzAyXHU3YzA5XHU3''@;'; put 'put ''YzAzXHU3YzAxXHU3YmY4XHU3YmZkXHU3YzA2XHU3YmYwXHU3YmYxXHU3YzEwXHU3YzBhXHU3Y2U4XHU3ZTJkXHU3ZTNjXHU3ZTQyXHU3ZTMzXHU5ODQ4XHU3ZTM4XHU3ZTJhXHU3ZTQ5XHU3ZTQwXHU3ZTQ3XHU3ZTI5XHU3ZTRjXHU3ZTMwXHU3ZTNiXHU3ZTM2XHU3ZTQ0XHU3ZTNhXHU3ZjQ1''@;'; put 'put ''XHU3ZjdmXHU3ZjdlXHU3ZjdkXHU3ZmY0XHU3ZmYyXHU4MDJjXHU4MWJiXHU4MWM0XHU4MWNjXHU4MWNhXHU4MWM1XHU4MWM3XHU4MWJjXHU4MWU5XHU4MjViXHU4MjVhXHU4MjVjXHU4NTgzXHU4NTgwXHU4NThmXHU4NWE3XHU4NTk1XHU4NWEwXHU4NThiXHU4NWEzXHU4NTdiXHU4NWE0XHU4''@;'; put 'put ''NTlhXHU4NTllIl0sWyJlZTQwIiwiXHU4NTc3XHU4NTdjXHU4NTg5XHU4NWExXHU4NTdhXHU4NTc4XHU4NTU3XHU4NThlXHU4NTk2XHU4NTg2XHU4NThkXHU4NTk5XHU4NTlkXHU4NTgxXHU4NWEyXHU4NTgyXHU4NTg4XHU4NTg1XHU4NTc5XHU4NTc2XHU4NTk4XHU4NTkwXHU4NTlmXHU4NjY4''@;'; put 'put ''XHU4N2JlXHU4N2FhXHU4N2FkXHU4N2M1XHU4N2IwXHU4N2FjXHU4N2I5XHU4N2I1XHU4N2JjXHU4N2FlXHU4N2M5XHU4N2MzXHU4N2MyXHU4N2NjXHU4N2I3XHU4N2FmXHU4N2M0XHU4N2NhXHU4N2I0XHU4N2I2XHU4N2JmXHU4N2I4XHU4N2JkXHU4N2RlXHU4N2IyXHU4OTM1XHU4OTMzXHU4''@;'; put 'put ''OTNjXHU4OTNlXHU4OTQxXHU4OTUyXHU4OTM3XHU4OTQyXHU4OWFkXHU4OWFmXHU4OWFlXHU4OWYyXHU4OWYzXHU4YjFlIl0sWyJlZWExIiwiXHU4YjE4XHU4YjE2XHU4YjExXHU4YjA1XHU4YjBiXHU4YjIyXHU4YjBmXHU4YjEyXHU4YjE1XHU4YjA3XHU4YjBkXHU4YjA4XHU4YjA2XHU4YjFj''@;'; put 'put ''XHU4YjEzXHU4YjFhXHU4YzRmXHU4YzcwXHU4YzcyXHU4YzcxXHU4YzZmXHU4Yzk1XHU4Yzk0XHU4Y2Y5XHU4ZDZmXHU4ZTRlXHU4ZTRkXHU4ZTUzXHU4ZTUwXHU4ZTRjXHU4ZTQ3XHU4ZjQzXHU4ZjQwXHU5MDg1XHU5MDdlXHU5MTM4XHU5MTlhXHU5MWEyXHU5MTliXHU5MTk5XHU5MTlmXHU5''@;'; put 'put ''MWExXHU5MTlkXHU5MWEwXHU5M2ExXHU5MzgzXHU5M2FmXHU5MzY0XHU5MzU2XHU5MzQ3XHU5MzdjXHU5MzU4XHU5MzVjXHU5Mzc2XHU5MzQ5XHU5MzUwXHU5MzUxXHU5MzYwXHU5MzZkXHU5MzhmXHU5MzRjXHU5MzZhXHU5Mzc5XHU5MzU3XHU5MzU1XHU5MzUyXHU5MzRmXHU5MzcxXHU5Mzc3''@;'; put 'put ''XHU5MzdiXHU5MzYxXHU5MzVlXHU5MzYzXHU5MzY3XHU5MzgwXHU5MzRlXHU5MzU5XHU5NWM3XHU5NWMwXHU5NWM5XHU5NWMzXHU5NWM1XHU5NWI3XHU5NmFlXHU5NmIwXHU5NmFjXHU5NzIwXHU5NzFmXHU5NzE4XHU5NzFkXHU5NzE5XHU5NzlhXHU5N2ExXHU5NzljIl0sWyJlZjQwIiwiXHU5''@;'; put 'put ''NzllXHU5NzlkXHU5N2Q1XHU5N2Q0XHU5N2YxXHU5ODQxXHU5ODQ0XHU5ODRhXHU5ODQ5XHU5ODQ1XHU5ODQzXHU5OTI1XHU5OTJiXHU5OTJjXHU5OTJhXHU5OTMzXHU5OTMyXHU5OTJmXHU5OTJkXHU5OTMxXHU5OTMwXHU5OTk4XHU5OWEzXHU5OWExXHU5YTAyXHU5OWZhXHU5OWY0XHU5OWY3''@;'; put 'put ''XHU5OWY5XHU5OWY4XHU5OWY2XHU5OWZiXHU5OWZkXHU5OWZlXHU5OWZjXHU5YTAzXHU5YWJlXHU5YWZlXHU5YWZkXHU5YjAxXHU5YWZjXHU5YjQ4XHU5YjlhXHU5YmE4XHU5YjllXHU5YjliXHU5YmE2XHU5YmExXHU5YmE1XHU5YmE0XHU5Yjg2XHU5YmEyXHU5YmEwXHU5YmFmXHU5ZDMzXHU5''@;'; put 'put ''ZDQxXHU5ZDY3XHU5ZDM2XHU5ZDJlXHU5ZDJmXHU5ZDMxXHU5ZDM4XHU5ZDMwIl0sWyJlZmExIiwiXHU5ZDQ1XHU5ZDQyXHU5ZDQzXHU5ZDNlXHU5ZDM3XHU5ZDQwXHU5ZDNkXHU3ZmY1XHU5ZDJkXHU5ZThhXHU5ZTg5XHU5ZThkXHU5ZWIwXHU5ZWM4XHU5ZWRhXHU5ZWZiXHU5ZWZmXHU5ZjI0''@;'; put 'put ''XHU5ZjIzXHU5ZjIyXHU5ZjU0XHU5ZmEwXHU1MTMxXHU1MTJkXHU1MTJlXHU1Njk4XHU1NjljXHU1Njk3XHU1NjlhXHU1NjlkXHU1Njk5XHU1OTcwXHU1YjNjXHU1YzY5XHU1YzZhXHU1ZGMwXHU1ZTZkXHU1ZTZlXHU2MWQ4XHU2MWRmXHU2MWVkXHU2MWVlXHU2MWYxXHU2MWVhXHU2MWYwXHU2''@;'; put 'put ''MWViXHU2MWQ2XHU2MWU5XHU2NGZmXHU2NTA0XHU2NGZkXHU2NGY4XHU2NTAxXHU2NTAzXHU2NGZjXHU2NTk0XHU2NWRiXHU2NmRhXHU2NmRiXHU2NmQ4XHU2YWM1XHU2YWI5XHU2YWJkXHU2YWUxXHU2YWM2XHU2YWJhXHU2YWI2XHU2YWI3XHU2YWM3XHU2YWI0XHU2YWFkXHU2YjVlXHU2YmM5''@;'; put 'put ''XHU2YzBiXHU3MDA3XHU3MDBjXHU3MDBkXHU3MDAxXHU3MDA1XHU3MDE0XHU3MDBlXHU2ZmZmXHU3MDAwXHU2ZmZiXHU3MDI2XHU2ZmZjXHU2ZmY3XHU3MDBhXHU3MjAxXHU3MWZmXHU3MWY5XHU3MjAzXHU3MWZkXHU3Mzc2Il0sWyJmMDQwIiwiXHU3NGI4XHU3NGMwXHU3NGI1XHU3NGMxXHU3''@;'; put 'put ''NGJlXHU3NGI2XHU3NGJiXHU3NGMyXHU3NTE0XHU3NTEzXHU3NjVjXHU3NjY0XHU3NjU5XHU3NjUwXHU3NjUzXHU3NjU3XHU3NjVhXHU3NmE2XHU3NmJkXHU3NmVjXHU3N2MyXHU3N2JhXHU3OGZmXHU3OTBjXHU3OTEzXHU3OTE0XHU3OTA5XHU3OTEwXHU3OTEyXHU3OTExXHU3OWFkXHU3OWFj''@;'; put 'put ''XHU3YTVmXHU3YzFjXHU3YzI5XHU3YzE5XHU3YzIwXHU3YzFmXHU3YzJkXHU3YzFkXHU3YzI2XHU3YzI4XHU3YzIyXHU3YzI1XHU3YzMwXHU3ZTVjXHU3ZTUwXHU3ZTU2XHU3ZTYzXHU3ZTU4XHU3ZTYyXHU3ZTVmXHU3ZTUxXHU3ZTYwXHU3ZTU3XHU3ZTUzXHU3ZmI1XHU3ZmIzXHU3ZmY3XHU3''@;'; put 'put ''ZmY4XHU4MDc1XHU4MWQxXHU4MWQyIl0sWyJmMGExIiwiXHU4MWQwXHU4MjVmXHU4MjVlXHU4NWI0XHU4NWM2XHU4NWMwXHU4NWMzXHU4NWMyXHU4NWIzXHU4NWI1XHU4NWJkXHU4NWM3XHU4NWM0XHU4NWJmXHU4NWNiXHU4NWNlXHU4NWM4XHU4NWM1XHU4NWIxXHU4NWI2XHU4NWQyXHU4NjI0''@;'; put 'put ''XHU4NWI4XHU4NWI3XHU4NWJlXHU4NjY5XHU4N2U3XHU4N2U2XHU4N2UyXHU4N2RiXHU4N2ViXHU4N2VhXHU4N2U1XHU4N2RmXHU4N2YzXHU4N2U0XHU4N2Q0XHU4N2RjXHU4N2QzXHU4N2VkXHU4N2Q4XHU4N2UzXHU4N2E0XHU4N2Q3XHU4N2Q5XHU4ODAxXHU4N2Y0XHU4N2U4XHU4N2RkXHU4''@;'; put 'put ''OTUzXHU4OTRiXHU4OTRmXHU4OTRjXHU4OTQ2XHU4OTUwXHU4OTUxXHU4OTQ5XHU4YjJhXHU4YjI3XHU4YjIzXHU4YjMzXHU4YjMwXHU4YjM1XHU4YjQ3XHU4YjJmXHU4YjNjXHU4YjNlXHU4YjMxXHU4YjI1XHU4YjM3XHU4YjI2XHU4YjM2XHU4YjJlXHU4YjI0XHU4YjNiXHU4YjNkXHU4YjNh''@;'; put 'put ''XHU4YzQyXHU4Yzc1XHU4Yzk5XHU4Yzk4XHU4Yzk3XHU4Y2ZlXHU4ZDA0XHU4ZDAyXHU4ZDAwXHU4ZTVjXHU4ZTYyXHU4ZTYwXHU4ZTU3XHU4ZTU2XHU4ZTVlXHU4ZTY1XHU4ZTY3Il0sWyJmMTQwIiwiXHU4ZTViXHU4ZTVhXHU4ZTYxXHU4ZTVkXHU4ZTY5XHU4ZTU0XHU4ZjQ2XHU4ZjQ3XHU4''@;'; put 'put ''ZjQ4XHU4ZjRiXHU5MTI4XHU5MTNhXHU5MTNiXHU5MTNlXHU5MWE4XHU5MWE1XHU5MWE3XHU5MWFmXHU5MWFhXHU5M2I1XHU5MzhjXHU5MzkyXHU5M2I3XHU5MzliXHU5MzlkXHU5Mzg5XHU5M2E3XHU5MzhlXHU5M2FhXHU5MzllXHU5M2E2XHU5Mzk1XHU5Mzg4XHU5Mzk5XHU5MzlmXHU5Mzhk''@;'; put 'put ''XHU5M2IxXHU5MzkxXHU5M2IyXHU5M2E0XHU5M2E4XHU5M2I0XHU5M2EzXHU5M2E1XHU5NWQyXHU5NWQzXHU5NWQxXHU5NmIzXHU5NmQ3XHU5NmRhXHU1ZGMyXHU5NmRmXHU5NmQ4XHU5NmRkXHU5NzIzXHU5NzIyXHU5NzI1XHU5N2FjXHU5N2FlXHU5N2E4XHU5N2FiXHU5N2E0XHU5N2FhIl0s''@;'; put 'put ''WyJmMWExIiwiXHU5N2EyXHU5N2E1XHU5N2Q3XHU5N2Q5XHU5N2Q2XHU5N2Q4XHU5N2ZhXHU5ODUwXHU5ODUxXHU5ODUyXHU5OGI4XHU5OTQxXHU5OTNjXHU5OTNhXHU5YTBmXHU5YTBiXHU5YTA5XHU5YTBkXHU5YTA0XHU5YTExXHU5YTBhXHU5YTA1XHU5YTA3XHU5YTA2XHU5YWMwXHU5YWRj''@;'; put 'put ''XHU5YjA4XHU5YjA0XHU5YjA1XHU5YjI5XHU5YjM1XHU5YjRhXHU5YjRjXHU5YjRiXHU5YmM3XHU5YmM2XHU5YmMzXHU5YmJmXHU5YmMxXHU5YmI1XHU5YmI4XHU5YmQzXHU5YmI2XHU5YmM0XHU5YmI5XHU5YmJkXHU5ZDVjXHU5ZDUzXHU5ZDRmXHU5ZDRhXHU5ZDViXHU5ZDRiXHU5ZDU5XHU5''@;'; put 'put ''ZDU2XHU5ZDRjXHU5ZDU3XHU5ZDUyXHU5ZDU0XHU5ZDVmXHU5ZDU4XHU5ZDVhXHU5ZThlXHU5ZThjXHU5ZWRmXHU5ZjAxXHU5ZjAwXHU5ZjE2XHU5ZjI1XHU5ZjJiXHU5ZjJhXHU5ZjI5XHU5ZjI4XHU5ZjRjXHU5ZjU1XHU1MTM0XHU1MTM1XHU1Mjk2XHU1MmY3XHU1M2I0XHU1NmFiXHU1NmFk''@;'; put 'put ''XHU1NmE2XHU1NmE3XHU1NmFhXHU1NmFjXHU1OGRhXHU1OGRkXHU1OGRiXHU1OTEyXHU1YjNkXHU1YjNlXHU1YjNmXHU1ZGMzXHU1ZTcwIl0sWyJmMjQwIiwiXHU1ZmJmXHU2MWZiXHU2NTA3XHU2NTEwXHU2NTBkXHU2NTA5XHU2NTBjXHU2NTBlXHU2NTg0XHU2NWRlXHU2NWRkXHU2NmRlXHU2''@;'; put 'put ''YWU3XHU2YWUwXHU2YWNjXHU2YWQxXHU2YWQ5XHU2YWNiXHU2YWRmXHU2YWRjXHU2YWQwXHU2YWViXHU2YWNmXHU2YWNkXHU2YWRlXHU2YjYwXHU2YmIwXHU2YzBjXHU3MDE5XHU3MDI3XHU3MDIwXHU3MDE2XHU3MDJiXHU3MDIxXHU3MDIyXHU3MDIzXHU3MDI5XHU3MDE3XHU3MDI0XHU3MDFj''@;'; put 'put ''XHU3MDJhXHU3MjBjXHU3MjBhXHU3MjA3XHU3MjAyXHU3MjA1XHU3MmE1XHU3MmE2XHU3MmE0XHU3MmEzXHU3MmExXHU3NGNiXHU3NGM1XHU3NGI3XHU3NGMzXHU3NTE2XHU3NjYwXHU3N2M5XHU3N2NhXHU3N2M0XHU3N2YxXHU3OTFkXHU3OTFiIl0sWyJmMmExIiwiXHU3OTIxXHU3OTFjXHU3''@;'; put 'put ''OTE3XHU3OTFlXHU3OWIwXHU3YTY3XHU3YTY4XHU3YzMzXHU3YzNjXHU3YzM5XHU3YzJjXHU3YzNiXHU3Y2VjXHU3Y2VhXHU3ZTc2XHU3ZTc1XHU3ZTc4XHU3ZTcwXHU3ZTc3XHU3ZTZmXHU3ZTdhXHU3ZTcyXHU3ZTc0XHU3ZTY4XHU3ZjRiXHU3ZjRhXHU3ZjgzXHU3Zjg2XHU3ZmI3XHU3ZmZk''@;'; put 'put ''XHU3ZmZlXHU4MDc4XHU4MWQ3XHU4MWQ1XHU4MjY0XHU4MjYxXHU4MjYzXHU4NWViXHU4NWYxXHU4NWVkXHU4NWQ5XHU4NWUxXHU4NWU4XHU4NWRhXHU4NWQ3XHU4NWVjXHU4NWYyXHU4NWY4XHU4NWQ4XHU4NWRmXHU4NWUzXHU4NWRjXHU4NWQxXHU4NWYwXHU4NWU2XHU4NWVmXHU4NWRlXHU4''@;'; put 'put ''NWUyXHU4ODAwXHU4N2ZhXHU4ODAzXHU4N2Y2XHU4N2Y3XHU4ODA5XHU4ODBjXHU4ODBiXHU4ODA2XHU4N2ZjXHU4ODA4XHU4N2ZmXHU4ODBhXHU4ODAyXHU4OTYyXHU4OTVhXHU4OTViXHU4OTU3XHU4OTYxXHU4OTVjXHU4OTU4XHU4OTVkXHU4OTU5XHU4OTg4XHU4OWI3XHU4OWI2XHU4OWY2''@;'; put 'put ''XHU4YjUwXHU4YjQ4XHU4YjRhXHU4YjQwXHU4YjUzXHU4YjU2XHU4YjU0XHU4YjRiXHU4YjU1Il0sWyJmMzQwIiwiXHU4YjUxXHU4YjQyXHU4YjUyXHU4YjU3XHU4YzQzXHU4Yzc3XHU4Yzc2XHU4YzlhXHU4ZDA2XHU4ZDA3XHU4ZDA5XHU4ZGFjXHU4ZGFhXHU4ZGFkXHU4ZGFiXHU4ZTZkXHU4''@;'; put 'put ''ZTc4XHU4ZTczXHU4ZTZhXHU4ZTZmXHU4ZTdiXHU4ZWMyXHU4ZjUyXHU4ZjUxXHU4ZjRmXHU4ZjUwXHU4ZjUzXHU4ZmI0XHU5MTQwXHU5MTNmXHU5MWIwXHU5MWFkXHU5M2RlXHU5M2M3XHU5M2NmXHU5M2MyXHU5M2RhXHU5M2QwXHU5M2Y5XHU5M2VjXHU5M2NjXHU5M2Q5XHU5M2E5XHU5M2U2''@;'; put 'put ''XHU5M2NhXHU5M2Q0XHU5M2VlXHU5M2UzXHU5M2Q1XHU5M2M0XHU5M2NlXHU5M2MwXHU5M2QyXHU5M2U3XHU5NTdkXHU5NWRhXHU5NWRiXHU5NmUxXHU5NzI5XHU5NzJiXHU5NzJjXHU5NzI4XHU5NzI2Il0sWyJmM2ExIiwiXHU5N2IzXHU5N2I3XHU5N2I2XHU5N2RkXHU5N2RlXHU5N2RmXHU5''@;'; put 'put ''ODVjXHU5ODU5XHU5ODVkXHU5ODU3XHU5OGJmXHU5OGJkXHU5OGJiXHU5OGJlXHU5OTQ4XHU5OTQ3XHU5OTQzXHU5OWE2XHU5OWE3XHU5YTFhXHU5YTE1XHU5YTI1XHU5YTFkXHU5YTI0XHU5YTFiXHU5YTIyXHU5YTIwXHU5YTI3XHU5YTIzXHU5YTFlXHU5YTFjXHU5YTE0XHU5YWMyXHU5YjBi''@;'; put 'put ''XHU5YjBhXHU5YjBlXHU5YjBjXHU5YjM3XHU5YmVhXHU5YmViXHU5YmUwXHU5YmRlXHU5YmU0XHU5YmU2XHU5YmUyXHU5YmYwXHU5YmQ0XHU5YmQ3XHU5YmVjXHU5YmRjXHU5YmQ5XHU5YmU1XHU5YmQ1XHU5YmUxXHU5YmRhXHU5ZDc3XHU5ZDgxXHU5ZDhhXHU5ZDg0XHU5ZDg4XHU5ZDcxXHU5''@;'; put 'put ''ZDgwXHU5ZDc4XHU5ZDg2XHU5ZDhiXHU5ZDhjXHU5ZDdkXHU5ZDZiXHU5ZDc0XHU5ZDc1XHU5ZDcwXHU5ZDY5XHU5ZDg1XHU5ZDczXHU5ZDdiXHU5ZDgyXHU5ZDZmXHU5ZDc5XHU5ZDdmXHU5ZDg3XHU5ZDY4XHU5ZTk0XHU5ZTkxXHU5ZWMwXHU5ZWZjXHU5ZjJkXHU5ZjQwXHU5ZjQxXHU5ZjRk''@;'; put 'put ''XHU5ZjU2XHU5ZjU3XHU5ZjU4XHU1MzM3XHU1NmIyIl0sWyJmNDQwIiwiXHU1NmI1XHU1NmIzXHU1OGUzXHU1YjQ1XHU1ZGM2XHU1ZGM3XHU1ZWVlXHU1ZWVmXHU1ZmMwXHU1ZmMxXHU2MWY5XHU2NTE3XHU2NTE2XHU2NTE1XHU2NTEzXHU2NWRmXHU2NmU4XHU2NmUzXHU2NmU0XHU2YWYzXHU2''@;'; put 'put ''YWYwXHU2YWVhXHU2YWU4XHU2YWY5XHU2YWYxXHU2YWVlXHU2YWVmXHU3MDNjXHU3MDM1XHU3MDJmXHU3MDM3XHU3MDM0XHU3MDMxXHU3MDQyXHU3MDM4XHU3MDNmXHU3MDNhXHU3MDM5XHU3MDQwXHU3MDNiXHU3MDMzXHU3MDQxXHU3MjEzXHU3MjE0XHU3MmE4XHU3MzdkXHU3MzdjXHU3NGJh''@;'; put 'put ''XHU3NmFiXHU3NmFhXHU3NmJlXHU3NmVkXHU3N2NjXHU3N2NlXHU3N2NmXHU3N2NkXHU3N2YyXHU3OTI1XHU3OTIzXHU3OTI3XHU3OTI4XHU3OTI0XHU3OTI5Il0sWyJmNGExIiwiXHU3OWIyXHU3YTZlXHU3YTZjXHU3YTZkXHU3YWY3XHU3YzQ5XHU3YzQ4XHU3YzRhXHU3YzQ3XHU3YzQ1XHU3''@;'; put 'put ''Y2VlXHU3ZTdiXHU3ZTdlXHU3ZTgxXHU3ZTgwXHU3ZmJhXHU3ZmZmXHU4MDc5XHU4MWRiXHU4MWQ5XHU4MjBiXHU4MjY4XHU4MjY5XHU4NjIyXHU4NWZmXHU4NjAxXHU4NWZlXHU4NjFiXHU4NjAwXHU4NWY2XHU4NjA0XHU4NjA5XHU4NjA1XHU4NjBjXHU4NWZkXHU4ODE5XHU4ODEwXHU4ODEx''@;'; put 'put ''XHU4ODE3XHU4ODEzXHU4ODE2XHU4OTYzXHU4OTY2XHU4OWI5XHU4OWY3XHU4YjYwXHU4YjZhXHU4YjVkXHU4YjY4XHU4YjYzXHU4YjY1XHU4YjY3XHU4YjZkXHU4ZGFlXHU4ZTg2XHU4ZTg4XHU4ZTg0XHU4ZjU5XHU4ZjU2XHU4ZjU3XHU4ZjU1XHU4ZjU4XHU4ZjVhXHU5MDhkXHU5MTQzXHU5''@;'; put 'put ''MTQxXHU5MWI3XHU5MWI1XHU5MWIyXHU5MWIzXHU5NDBiXHU5NDEzXHU5M2ZiXHU5NDIwXHU5NDBmXHU5NDE0XHU5M2ZlXHU5NDE1XHU5NDEwXHU5NDI4XHU5NDE5XHU5NDBkXHU5M2Y1XHU5NDAwXHU5M2Y3XHU5NDA3XHU5NDBlXHU5NDE2XHU5NDEyXHU5M2ZhXHU5NDA5XHU5M2Y4XHU5NDBh''@;'; put 'put ''XHU5M2ZmIl0sWyJmNTQwIiwiXHU5M2ZjXHU5NDBjXHU5M2Y2XHU5NDExXHU5NDA2XHU5NWRlXHU5NWUwXHU5NWRmXHU5NzJlXHU5NzJmXHU5N2I5XHU5N2JiXHU5N2ZkXHU5N2ZlXHU5ODYwXHU5ODYyXHU5ODYzXHU5ODVmXHU5OGMxXHU5OGMyXHU5OTUwXHU5OTRlXHU5OTU5XHU5OTRjXHU5''@;'; put 'put ''OTRiXHU5OTUzXHU5YTMyXHU5YTM0XHU5YTMxXHU5YTJjXHU5YTJhXHU5YTM2XHU5YTI5XHU5YTJlXHU5YTM4XHU5YTJkXHU5YWM3XHU5YWNhXHU5YWM2XHU5YjEwXHU5YjEyXHU5YjExXHU5YzBiXHU5YzA4XHU5YmY3XHU5YzA1XHU5YzEyXHU5YmY4XHU5YzQwXHU5YzA3XHU5YzBlXHU5YzA2''@;'; put 'put ''XHU5YzE3XHU5YzE0XHU5YzA5XHU5ZDlmXHU5ZDk5XHU5ZGE0XHU5ZDlkXHU5ZDkyXHU5ZDk4XHU5ZDkwXHU5ZDliIl0sWyJmNWExIiwiXHU5ZGEwXHU5ZDk0XHU5ZDljXHU5ZGFhXHU5ZDk3XHU5ZGExXHU5ZDlhXHU5ZGEyXHU5ZGE4XHU5ZDllXHU5ZGEzXHU5ZGJmXHU5ZGE5XHU5ZDk2XHU5''@;'; put 'put ''ZGE2XHU5ZGE3XHU5ZTk5XHU5ZTliXHU5ZTlhXHU5ZWU1XHU5ZWU0XHU5ZWU3XHU5ZWU2XHU5ZjMwXHU5ZjJlXHU5ZjViXHU5ZjYwXHU5ZjVlXHU5ZjVkXHU5ZjU5XHU5ZjkxXHU1MTNhXHU1MTM5XHU1Mjk4XHU1Mjk3XHU1NmMzXHU1NmJkXHU1NmJlXHU1YjQ4XHU1YjQ3XHU1ZGNiXHU1ZGNm''@;'; put 'put ''XHU1ZWYxXHU2MWZkXHU2NTFiXHU2YjAyXHU2YWZjXHU2YjAzXHU2YWY4XHU2YjAwXHU3MDQzXHU3MDQ0XHU3MDRhXHU3MDQ4XHU3MDQ5XHU3MDQ1XHU3MDQ2XHU3MjFkXHU3MjFhXHU3MjE5XHU3MzdlXHU3NTE3XHU3NjZhXHU3N2QwXHU3OTJkXHU3OTMxXHU3OTJmXHU3YzU0XHU3YzUzXHU3''@;'; put 'put ''Y2YyXHU3ZThhXHU3ZTg3XHU3ZTg4XHU3ZThiXHU3ZTg2XHU3ZThkXHU3ZjRkXHU3ZmJiXHU4MDMwXHU4MWRkXHU4NjE4XHU4NjJhXHU4NjI2XHU4NjFmXHU4NjIzXHU4NjFjXHU4NjE5XHU4NjI3XHU4NjJlXHU4NjIxXHU4NjIwXHU4NjI5XHU4NjFlXHU4NjI1Il0sWyJmNjQwIiwiXHU4ODI5''@;'; put 'put ''XHU4ODFkXHU4ODFiXHU4ODIwXHU4ODI0XHU4ODFjXHU4ODJiXHU4ODRhXHU4OTZkXHU4OTY5XHU4OTZlXHU4OTZiXHU4OWZhXHU4Yjc5XHU4Yjc4XHU4YjQ1XHU4YjdhXHU4YjdiXHU4ZDEwXHU4ZDE0XHU4ZGFmXHU4ZThlXHU4ZThjXHU4ZjVlXHU4ZjViXHU4ZjVkXHU5MTQ2XHU5MTQ0XHU5''@;'; put 'put ''MTQ1XHU5MWI5XHU5NDNmXHU5NDNiXHU5NDM2XHU5NDI5XHU5NDNkXHU5NDNjXHU5NDMwXHU5NDM5XHU5NDJhXHU5NDM3XHU5NDJjXHU5NDQwXHU5NDMxXHU5NWU1XHU5NWU0XHU5NWUzXHU5NzM1XHU5NzNhXHU5N2JmXHU5N2UxXHU5ODY0XHU5OGM5XHU5OGM2XHU5OGMwXHU5OTU4XHU5OTU2''@;'; put 'put ''XHU5YTM5XHU5YTNkXHU5YTQ2XHU5YTQ0XHU5YTQyXHU5YTQxXHU5YTNhIl0sWyJmNmExIiwiXHU5YTNmXHU5YWNkXHU5YjE1XHU5YjE3XHU5YjE4XHU5YjE2XHU5YjNhXHU5YjUyXHU5YzJiXHU5YzFkXHU5YzFjXHU5YzJjXHU5YzIzXHU5YzI4XHU5YzI5XHU5YzI0XHU5YzIxXHU5ZGI3XHU5''@;'; put 'put ''ZGI2XHU5ZGJjXHU5ZGMxXHU5ZGM3XHU5ZGNhXHU5ZGNmXHU5ZGJlXHU5ZGM1XHU5ZGMzXHU5ZGJiXHU5ZGI1XHU5ZGNlXHU5ZGI5XHU5ZGJhXHU5ZGFjXHU5ZGM4XHU5ZGIxXHU5ZGFkXHU5ZGNjXHU5ZGIzXHU5ZGNkXHU5ZGIyXHU5ZTdhXHU5ZTljXHU5ZWViXHU5ZWVlXHU5ZWVkXHU5ZjFi''@;'; put 'put ''XHU5ZjE4XHU5ZjFhXHU5ZjMxXHU5ZjRlXHU5ZjY1XHU5ZjY0XHU5ZjkyXHU0ZWI5XHU1NmM2XHU1NmM1XHU1NmNiXHU1OTcxXHU1YjRiXHU1YjRjXHU1ZGQ1XHU1ZGQxXHU1ZWYyXHU2NTIxXHU2NTIwXHU2NTI2XHU2NTIyXHU2YjBiXHU2YjA4XHU2YjA5XHU2YzBkXHU3MDU1XHU3MDU2XHU3''@;'; put 'put ''MDU3XHU3MDUyXHU3MjFlXHU3MjFmXHU3MmE5XHU3MzdmXHU3NGQ4XHU3NGQ1XHU3NGQ5XHU3NGQ3XHU3NjZkXHU3NmFkXHU3OTM1XHU3OWI0XHU3YTcwXHU3YTcxXHU3YzU3XHU3YzVjXHU3YzU5XHU3YzViXHU3YzVhIl0sWyJmNzQwIiwiXHU3Y2Y0XHU3Y2YxXHU3ZTkxXHU3ZjRmXHU3Zjg3''@;'; put 'put ''XHU4MWRlXHU4MjZiXHU4NjM0XHU4NjM1XHU4NjMzXHU4NjJjXHU4NjMyXHU4NjM2XHU4ODJjXHU4ODI4XHU4ODI2XHU4ODJhXHU4ODI1XHU4OTcxXHU4OWJmXHU4OWJlXHU4OWZiXHU4YjdlXHU4Yjg0XHU4YjgyXHU4Yjg2XHU4Yjg1XHU4YjdmXHU4ZDE1XHU4ZTk1XHU4ZTk0XHU4ZTlhXHU4''@;'; put 'put ''ZTkyXHU4ZTkwXHU4ZTk2XHU4ZTk3XHU4ZjYwXHU4ZjYyXHU5MTQ3XHU5NDRjXHU5NDUwXHU5NDRhXHU5NDRiXHU5NDRmXHU5NDQ3XHU5NDQ1XHU5NDQ4XHU5NDQ5XHU5NDQ2XHU5NzNmXHU5N2UzXHU5ODZhXHU5ODY5XHU5OGNiXHU5OTU0XHU5OTViXHU5YTRlXHU5YTUzXHU5YTU0XHU5YTRj''@;'; put 'put ''XHU5YTRmXHU5YTQ4XHU5YTRhIl0sWyJmN2ExIiwiXHU5YTQ5XHU5YTUyXHU5YTUwXHU5YWQwXHU5YjE5XHU5YjJiXHU5YjNiXHU5YjU2XHU5YjU1XHU5YzQ2XHU5YzQ4XHU5YzNmXHU5YzQ0XHU5YzM5XHU5YzMzXHU5YzQxXHU5YzNjXHU5YzM3XHU5YzM0XHU5YzMyXHU5YzNkXHU5YzM2XHU5''@;'; put 'put ''ZGRiXHU5ZGQyXHU5ZGRlXHU5ZGRhXHU5ZGNiXHU5ZGQwXHU5ZGRjXHU5ZGQxXHU5ZGRmXHU5ZGU5XHU5ZGQ5XHU5ZGQ4XHU5ZGQ2XHU5ZGY1XHU5ZGQ1XHU5ZGRkXHU5ZWI2XHU5ZWYwXHU5ZjM1XHU5ZjMzXHU5ZjMyXHU5ZjQyXHU5ZjZiXHU5Zjk1XHU5ZmEyXHU1MTNkXHU1Mjk5XHU1OGU4''@;'; put 'put ''XHU1OGU3XHU1OTcyXHU1YjRkXHU1ZGQ4XHU4ODJmXHU1ZjRmXHU2MjAxXHU2MjAzXHU2MjA0XHU2NTI5XHU2NTI1XHU2NTk2XHU2NmViXHU2YjExXHU2YjEyXHU2YjBmXHU2YmNhXHU3MDViXHU3MDVhXHU3MjIyXHU3MzgyXHU3MzgxXHU3MzgzXHU3NjcwXHU3N2Q0XHU3YzY3XHU3YzY2XHU3''@;'; put 'put ''ZTk1XHU4MjZjXHU4NjNhXHU4NjQwXHU4NjM5XHU4NjNjXHU4NjMxXHU4NjNiXHU4NjNlXHU4ODMwXHU4ODMyXHU4ODJlXHU4ODMzXHU4OTc2XHU4OTc0XHU4OTczXHU4OWZlIl0sWyJmODQwIiwiXHU4YjhjXHU4YjhlXHU4YjhiXHU4Yjg4XHU4YzQ1XHU4ZDE5XHU4ZTk4XHU4ZjY0XHU4ZjYz''@;'; put 'put ''XHU5MWJjXHU5NDYyXHU5NDU1XHU5NDVkXHU5NDU3XHU5NDVlXHU5N2M0XHU5N2M1XHU5ODAwXHU5YTU2XHU5YTU5XHU5YjFlXHU5YjFmXHU5YjIwXHU5YzUyXHU5YzU4XHU5YzUwXHU5YzRhXHU5YzRkXHU5YzRiXHU5YzU1XHU5YzU5XHU5YzRjXHU5YzRlXHU5ZGZiXHU5ZGY3XHU5ZGVmXHU5''@;'; put 'put ''ZGUzXHU5ZGViXHU5ZGY4XHU5ZGU0XHU5ZGY2XHU5ZGUxXHU5ZGVlXHU5ZGU2XHU5ZGYyXHU5ZGYwXHU5ZGUyXHU5ZGVjXHU5ZGY0XHU5ZGYzXHU5ZGU4XHU5ZGVkXHU5ZWMyXHU5ZWQwXHU5ZWYyXHU5ZWYzXHU5ZjA2XHU5ZjFjXHU5ZjM4XHU5ZjM3XHU5ZjM2XHU5ZjQzXHU5ZjRmIl0sWyJm''@;'; put 'put ''OGExIiwiXHU5ZjcxXHU5ZjcwXHU5ZjZlXHU5ZjZmXHU1NmQzXHU1NmNkXHU1YjRlXHU1YzZkXHU2NTJkXHU2NmVkXHU2NmVlXHU2YjEzXHU3MDVmXHU3MDYxXHU3MDVkXHU3MDYwXHU3MjIzXHU3NGRiXHU3NGU1XHU3N2Q1XHU3OTM4XHU3OWI3XHU3OWI2XHU3YzZhXHU3ZTk3XHU3Zjg5XHU4''@;'; put 'put ''MjZkXHU4NjQzXHU4ODM4XHU4ODM3XHU4ODM1XHU4ODRiXHU4Yjk0XHU4Yjk1XHU4ZTllXHU4ZTlmXHU4ZWEwXHU4ZTlkXHU5MWJlXHU5MWJkXHU5MWMyXHU5NDZiXHU5NDY4XHU5NDY5XHU5NmU1XHU5NzQ2XHU5NzQzXHU5NzQ3XHU5N2M3XHU5N2U1XHU5YTVlXHU5YWQ1XHU5YjU5XHU5YzYz''@;'; put 'put ''XHU5YzY3XHU5YzY2XHU5YzYyXHU5YzVlXHU5YzYwXHU5ZTAyXHU5ZGZlXHU5ZTA3XHU5ZTAzXHU5ZTA2XHU5ZTA1XHU5ZTAwXHU5ZTAxXHU5ZTA5XHU5ZGZmXHU5ZGZkXHU5ZTA0XHU5ZWEwXHU5ZjFlXHU5ZjQ2XHU5Zjc0XHU5Zjc1XHU5Zjc2XHU1NmQ0XHU2NTJlXHU2NWI4XHU2YjE4XHU2''@;'; put 'put ''YjE5XHU2YjE3XHU2YjFhXHU3MDYyXHU3MjI2XHU3MmFhXHU3N2Q4XHU3N2Q5XHU3OTM5XHU3YzY5XHU3YzZiXHU3Y2Y2XHU3ZTlhIl0sWyJmOTQwIiwiXHU3ZTk4XHU3ZTliXHU3ZTk5XHU4MWUwXHU4MWUxXHU4NjQ2XHU4NjQ3XHU4NjQ4XHU4OTc5XHU4OTdhXHU4OTdjXHU4OTdiXHU4OWZm''@;'; put 'put ''XHU4Yjk4XHU4Yjk5XHU4ZWE1XHU4ZWE0XHU4ZWEzXHU5NDZlXHU5NDZkXHU5NDZmXHU5NDcxXHU5NDczXHU5NzQ5XHU5ODcyXHU5OTVmXHU5YzY4XHU5YzZlXHU5YzZkXHU5ZTBiXHU5ZTBkXHU5ZTEwXHU5ZTBmXHU5ZTEyXHU5ZTExXHU5ZWExXHU5ZWY1XHU5ZjA5XHU5ZjQ3XHU5Zjc4XHU5''@;'; put 'put ''ZjdiXHU5ZjdhXHU5Zjc5XHU1NzFlXHU3MDY2XHU3YzZmXHU4ODNjXHU4ZGIyXHU4ZWE2XHU5MWMzXHU5NDc0XHU5NDc4XHU5NDc2XHU5NDc1XHU5YTYwXHU5Yzc0XHU5YzczXHU5YzcxXHU5Yzc1XHU5ZTE0XHU5ZTEzXHU5ZWY2XHU5ZjBhIl0sWyJmOWExIiwiXHU5ZmE0XHU3MDY4XHU3MDY1''@;'; put 'put ''XHU3Y2Y3XHU4NjZhXHU4ODNlXHU4ODNkXHU4ODNmXHU4YjllXHU4YzljXHU4ZWE5XHU4ZWM5XHU5NzRiXHU5ODczXHU5ODc0XHU5OGNjXHU5OTYxXHU5OWFiXHU5YTY0XHU5YTY2XHU5YTY3XHU5YjI0XHU5ZTE1XHU5ZTE3XHU5ZjQ4XHU2MjA3XHU2YjFlXHU3MjI3XHU4NjRjXHU4ZWE4XHU5''@;'; put 'put ''NDgyXHU5NDgwXHU5NDgxXHU5YTY5XHU5YTY4XHU5YjJlXHU5ZTE5XHU3MjI5XHU4NjRiXHU4YjlmXHU5NDgzXHU5Yzc5XHU5ZWI3XHU3Njc1XHU5YTZiXHU5YzdhXHU5ZTFkXHU3MDY5XHU3MDZhXHU5ZWE0XHU5ZjdlXHU5ZjQ5XHU5Zjk4XHU3ODgxXHU5MmI5XHU4OGNmXHU1OGJiXHU2MDUy''@;'; put 'put ''XHU3Y2E3XHU1YWZhXHUyNTU0XHUyNTY2XHUyNTU3XHUyNTYwXHUyNTZjXHUyNTYzXHUyNTVhXHUyNTY5XHUyNTVkXHUyNTUyXHUyNTY0XHUyNTU1XHUyNTVlXHUyNTZhXHUyNTYxXHUyNTU4XHUyNTY3XHUyNTViXHUyNTUzXHUyNTY1XHUyNTU2XHUyNTVmXHUyNTZiXHUyNTYyXHUyNTU5XHUy''@;'; put 'put ''NTY4XHUyNTVjXHUyNTUxXHUyNTUwXHUyNTZkXHUyNTZlXHUyNTcwXHUyNTZmXHUyNTkzIl1dJyl9LDU2NDA2OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9SlNPTi5wYXJzZSgnW1siMCIsIlxcdTAwMDAiLDEyN10sWyI4ZWExIiwiXHVmZjYxIiw2Ml0sWyJhMWExIiwiXHUzMDAwXHUz''@;'; put 'put ''MDAxXHUzMDAyXHVmZjBjXHVmZjBlXHUzMGZiXHVmZjFhXHVmZjFiXHVmZjFmXHVmZjAxXHUzMDliXHUzMDljXHhiNFx1ZmY0MFx4YThcdWZmM2VcdWZmZTNcdWZmM2ZcdTMwZmRcdTMwZmVcdTMwOWRcdTMwOWVcdTMwMDNcdTRlZGRcdTMwMDVcdTMwMDZcdTMwMDdcdTMwZmNcdTIwMTVcdTIw''@;'; put 'put ''MTBcdWZmMGZcdWZmM2NcdWZmNWVcdTIyMjVcdWZmNWNcdTIwMjZcdTIwMjVcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdWZmMDhcdWZmMDlcdTMwMTRcdTMwMTVcdWZmM2JcdWZmM2RcdWZmNWJcdWZmNWRcdTMwMDgiLDksIlx1ZmYwYlx1ZmYwZFx4YjFceGQ3XHhmN1x1ZmYxZFx1MjI2MFx1''@;'; put 'put ''ZmYxY1x1ZmYxZVx1MjI2Nlx1MjI2N1x1MjIxZVx1MjIzNFx1MjY0Mlx1MjY0MFx4YjBcdTIwMzJcdTIwMzNcdTIxMDNcdWZmZTVcdWZmMDRcdWZmZTBcdWZmZTFcdWZmMDVcdWZmMDNcdWZmMDZcdWZmMGFcdWZmMjBceGE3XHUyNjA2XHUyNjA1XHUyNWNiXHUyNWNmXHUyNWNlXHUyNWM3Il0s''@;'; put 'put ''WyJhMmExIiwiXHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyNWJkXHUyNWJjXHUyMDNiXHUzMDEyXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUzMDEzIl0sWyJhMmJhIiwiXHUyMjA4XHUyMjBiXHUyMjg2XHUyMjg3XHUyMjgyXHUyMjgzXHUyMjJhXHUyMjI5Il0sWyJhMmNhIiwi''@;'; put 'put ''XHUyMjI3XHUyMjI4XHVmZmUyXHUyMWQyXHUyMWQ0XHUyMjAwXHUyMjAzIl0sWyJhMmRjIiwiXHUyMjIwXHUyMmE1XHUyMzEyXHUyMjAyXHUyMjA3XHUyMjYxXHUyMjUyXHUyMjZhXHUyMjZiXHUyMjFhXHUyMjNkXHUyMjFkXHUyMjM1XHUyMjJiXHUyMjJjIl0sWyJhMmYyIiwiXHUyMTJiXHUy''@;'; put 'put ''MDMwXHUyNjZmXHUyNjZkXHUyNjZhXHUyMDIwXHUyMDIxXHhiNiJdLFsiYTJmZSIsIlx1MjVlZiJdLFsiYTNiMCIsIlx1ZmYxMCIsOV0sWyJhM2MxIiwiXHVmZjIxIiwyNV0sWyJhM2UxIiwiXHVmZjQxIiwyNV0sWyJhNGExIiwiXHUzMDQxIiw4Ml0sWyJhNWExIiwiXHUzMGExIiw4NV0sWyJh''@;'; put 'put ''NmExIiwiXHUwMzkxIiwxNiwiXHUwM2EzIiw2XSxbImE2YzEiLCJcdTAzYjEiLDE2LCJcdTAzYzMiLDZdLFsiYTdhMSIsIlx1MDQxMCIsNSwiXHUwNDAxXHUwNDE2IiwyNV0sWyJhN2QxIiwiXHUwNDMwIiw1LCJcdTA0NTFcdTA0MzYiLDI1XSxbImE4YTEiLCJcdTI1MDBcdTI1MDJcdTI1MGNc''@;'; put 'put ''dTI1MTBcdTI1MThcdTI1MTRcdTI1MWNcdTI1MmNcdTI1MjRcdTI1MzRcdTI1M2NcdTI1MDFcdTI1MDNcdTI1MGZcdTI1MTNcdTI1MWJcdTI1MTdcdTI1MjNcdTI1MzNcdTI1MmJcdTI1M2JcdTI1NGJcdTI1MjBcdTI1MmZcdTI1MjhcdTI1MzdcdTI1M2ZcdTI1MWRcdTI1MzBcdTI1MjVcdTI1''@;'; put 'put ''MzhcdTI1NDIiXSxbImFkYTEiLCJcdTI0NjAiLDE5LCJcdTIxNjAiLDldLFsiYWRjMCIsIlx1MzM0OVx1MzMxNFx1MzMyMlx1MzM0ZFx1MzMxOFx1MzMyN1x1MzMwM1x1MzMzNlx1MzM1MVx1MzM1N1x1MzMwZFx1MzMyNlx1MzMyM1x1MzMyYlx1MzM0YVx1MzMzYlx1MzM5Y1x1MzM5ZFx1MzM5''@;'; put 'put ''ZVx1MzM4ZVx1MzM4Zlx1MzNjNFx1MzNhMSJdLFsiYWRkZiIsIlx1MzM3Ylx1MzAxZFx1MzAxZlx1MjExNlx1MzNjZFx1MjEyMVx1MzJhNCIsNCwiXHUzMjMxXHUzMjMyXHUzMjM5XHUzMzdlXHUzMzdkXHUzMzdjXHUyMjUyXHUyMjYxXHUyMjJiXHUyMjJlXHUyMjExXHUyMjFhXHUyMmE1XHUy''@;'; put 'put ''MjIwXHUyMjFmXHUyMmJmXHUyMjM1XHUyMjI5XHUyMjJhIl0sWyJiMGExIiwiXHU0ZTljXHU1NTE2XHU1YTAzXHU5NjNmXHU1NGMwXHU2MTFiXHU2MzI4XHU1OWY2XHU5MDIyXHU4NDc1XHU4MzFjXHU3YTUwXHU2MGFhXHU2M2UxXHU2ZTI1XHU2NWVkXHU4NDY2XHU4MmE2XHU5YmY1XHU2ODkz''@;'; put 'put ''XHU1NzI3XHU2NWExXHU2MjcxXHU1YjliXHU1OWQwXHU4NjdiXHU5OGY0XHU3ZDYyXHU3ZGJlXHU5YjhlXHU2MjE2XHU3YzlmXHU4OGI3XHU1Yjg5XHU1ZWI1XHU2MzA5XHU2Njk3XHU2ODQ4XHU5NWM3XHU5NzhkXHU2NzRmXHU0ZWU1XHU0ZjBhXHU0ZjRkXHU0ZjlkXHU1MDQ5XHU1NmYyXHU1''@;'; put 'put ''OTM3XHU1OWQ0XHU1YTAxXHU1YzA5XHU2MGRmXHU2MTBmXHU2MTcwXHU2NjEzXHU2OTA1XHU3MGJhXHU3NTRmXHU3NTcwXHU3OWZiXHU3ZGFkXHU3ZGVmXHU4MGMzXHU4NDBlXHU4ODYzXHU4YjAyXHU5MDU1XHU5MDdhXHU1MzNiXHU0ZTk1XHU0ZWE1XHU1N2RmXHU4MGIyXHU5MGMxXHU3OGVm''@;'; put 'put ''XHU0ZTAwXHU1OGYxXHU2ZWEyXHU5MDM4XHU3YTMyXHU4MzI4XHU4MjhiXHU5YzJmXHU1MTQxXHU1MzcwXHU1NGJkXHU1NGUxXHU1NmUwXHU1OWZiXHU1ZjE1XHU5OGYyXHU2ZGViXHU4MGU0XHU4NTJkIl0sWyJiMWExIiwiXHU5NjYyXHU5NjcwXHU5NmEwXHU5N2ZiXHU1NDBiXHU1M2YzXHU1''@;'; put 'put ''Yjg3XHU3MGNmXHU3ZmJkXHU4ZmMyXHU5NmU4XHU1MzZmXHU5ZDVjXHU3YWJhXHU0ZTExXHU3ODkzXHU4MWZjXHU2ZTI2XHU1NjE4XHU1NTA0XHU2YjFkXHU4NTFhXHU5YzNiXHU1OWU1XHU1M2E5XHU2ZDY2XHU3NGRjXHU5NThmXHU1NjQyXHU0ZTkxXHU5MDRiXHU5NmYyXHU4MzRmXHU5OTBj''@;'; put 'put ''XHU1M2UxXHU1NWI2XHU1YjMwXHU1ZjcxXHU2NjIwXHU2NmYzXHU2ODA0XHU2YzM4XHU2Y2YzXHU2ZDI5XHU3NDViXHU3NmM4XHU3YTRlXHU5ODM0XHU4MmYxXHU4ODViXHU4YTYwXHU5MmVkXHU2ZGIyXHU3NWFiXHU3NmNhXHU5OWM1XHU2MGE2XHU4YjAxXHU4ZDhhXHU5NWIyXHU2OThlXHU1''@;'; put 'put ''M2FkXHU1MTg2XHU1NzEyXHU1ODMwXHU1OTQ0XHU1YmI0XHU1ZWY2XHU2MDI4XHU2M2E5XHU2M2Y0XHU2Y2JmXHU2ZjE0XHU3MDhlXHU3MTE0XHU3MTU5XHU3MWQ1XHU3MzNmXHU3ZTAxXHU4Mjc2XHU4MmQxXHU4NTk3XHU5MDYwXHU5MjViXHU5ZDFiXHU1ODY5XHU2NWJjXHU2YzVhXHU3NTI1''@;'; put 'put ''XHU1MWY5XHU1OTJlXHU1OTY1XHU1ZjgwXHU1ZmRjIl0sWyJiMmExIiwiXHU2MmJjXHU2NWZhXHU2YTJhXHU2YjI3XHU2YmI0XHU3MzhiXHU3ZmMxXHU4OTU2XHU5ZDJjXHU5ZDBlXHU5ZWM0XHU1Y2ExXHU2Yzk2XHU4MzdiXHU1MTA0XHU1YzRiXHU2MWI2XHU4MWM2XHU2ODc2XHU3MjYxXHU0''@;'; put 'put ''ZTU5XHU0ZmZhXHU1Mzc4XHU2MDY5XHU2ZTI5XHU3YTRmXHU5N2YzXHU0ZTBiXHU1MzE2XHU0ZWVlXHU0ZjU1XHU0ZjNkXHU0ZmExXHU0ZjczXHU1MmEwXHU1M2VmXHU1NjA5XHU1OTBmXHU1YWMxXHU1YmI2XHU1YmUxXHU3OWQxXHU2Njg3XHU2NzljXHU2N2I2XHU2YjRjXHU2Y2IzXHU3MDZi''@;'; put 'put ''XHU3M2MyXHU3OThkXHU3OWJlXHU3YTNjXHU3Yjg3XHU4MmIxXHU4MmRiXHU4MzA0XHU4Mzc3XHU4M2VmXHU4M2QzXHU4NzY2XHU4YWIyXHU1NjI5XHU4Y2E4XHU4ZmU2XHU5MDRlXHU5NzFlXHU4NjhhXHU0ZmM0XHU1Y2U4XHU2MjExXHU3MjU5XHU3NTNiXHU4MWU1XHU4MmJkXHU4NmZlXHU4''@;'; put 'put ''Y2MwXHU5NmM1XHU5OTEzXHU5OWQ1XHU0ZWNiXHU0ZjFhXHU4OWUzXHU1NmRlXHU1ODRhXHU1OGNhXHU1ZWZiXHU1ZmViXHU2MDJhXHU2MDk0XHU2MDYyXHU2MWQwXHU2MjEyXHU2MmQwXHU2NTM5Il0sWyJiM2ExIiwiXHU5YjQxXHU2NjY2XHU2OGIwXHU2ZDc3XHU3MDcwXHU3NTRjXHU3Njg2''@;'; put 'put ''XHU3ZDc1XHU4MmE1XHU4N2Y5XHU5NThiXHU5NjhlXHU4YzlkXHU1MWYxXHU1MmJlXHU1OTE2XHU1NGIzXHU1YmIzXHU1ZDE2XHU2MTY4XHU2OTgyXHU2ZGFmXHU3ODhkXHU4NGNiXHU4ODU3XHU4YTcyXHU5M2E3XHU5YWI4XHU2ZDZjXHU5OWE4XHU4NmQ5XHU1N2EzXHU2N2ZmXHU4NmNlXHU5''@;'; put 'put ''MjBlXHU1MjgzXHU1Njg3XHU1NDA0XHU1ZWQzXHU2MmUxXHU2NGI5XHU2ODNjXHU2ODM4XHU2YmJiXHU3MzcyXHU3OGJhXHU3YTZiXHU4OTlhXHU4OWQyXHU4ZDZiXHU4ZjAzXHU5MGVkXHU5NWEzXHU5Njk0XHU5NzY5XHU1YjY2XHU1Y2IzXHU2OTdkXHU5ODRkXHU5ODRlXHU2MzliXHU3YjIw''@;'; put 'put ''XHU2YTJiXHU2YTdmXHU2OGI2XHU5YzBkXHU2ZjVmXHU1MjcyXHU1NTlkXHU2MDcwXHU2MmVjXHU2ZDNiXHU2ZTA3XHU2ZWQxXHU4NDViXHU4OTEwXHU4ZjQ0XHU0ZTE0XHU5YzM5XHU1M2Y2XHU2OTFiXHU2YTNhXHU5Nzg0XHU2ODJhXHU1MTVjXHU3YWMzXHU4NGIyXHU5MWRjXHU5MzhjXHU1''@;'; put 'put ''NjViXHU5ZDI4XHU2ODIyXHU4MzA1XHU4NDMxIl0sWyJiNGExIiwiXHU3Y2E1XHU1MjA4XHU4MmM1XHU3NGU2XHU0ZTdlXHU0ZjgzXHU1MWEwXHU1YmQyXHU1MjBhXHU1MmQ4XHU1MmU3XHU1ZGZiXHU1NTlhXHU1ODJhXHU1OWU2XHU1YjhjXHU1Yjk4XHU1YmRiXHU1ZTcyXHU1ZTc5XHU2MGEz''@;'; put 'put ''XHU2MTFmXHU2MTYzXHU2MWJlXHU2M2RiXHU2NTYyXHU2N2QxXHU2ODUzXHU2OGZhXHU2YjNlXHU2YjUzXHU2YzU3XHU2ZjIyXHU2Zjk3XHU2ZjQ1XHU3NGIwXHU3NTE4XHU3NmUzXHU3NzBiXHU3YWZmXHU3YmExXHU3YzIxXHU3ZGU5XHU3ZjM2XHU3ZmYwXHU4MDlkXHU4MjY2XHU4MzllXHU4''@;'; put 'put ''OWIzXHU4YWNjXHU4Y2FiXHU5MDg0XHU5NDUxXHU5NTkzXHU5NTkxXHU5NWEyXHU5NjY1XHU5N2QzXHU5OTI4XHU4MjE4XHU0ZTM4XHU1NDJiXHU1Y2I4XHU1ZGNjXHU3M2E5XHU3NjRjXHU3NzNjXHU1Y2E5XHU3ZmViXHU4ZDBiXHU5NmMxXHU5ODExXHU5ODU0XHU5ODU4XHU0ZjAxXHU0ZjBl''@;'; put 'put ''XHU1MzcxXHU1NTljXHU1NjY4XHU1N2ZhXHU1OTQ3XHU1YjA5XHU1YmM0XHU1YzkwXHU1ZTBjXHU1ZTdlXHU1ZmNjXHU2M2VlXHU2NzNhXHU2NWQ3XHU2NWUyXHU2NzFmXHU2OGNiXHU2OGM0Il0sWyJiNWExIiwiXHU2YTVmXHU1ZTMwXHU2YmM1XHU2YzE3XHU2YzdkXHU3NTdmXHU3OTQ4XHU1''@;'; put 'put ''YjYzXHU3YTAwXHU3ZDAwXHU1ZmJkXHU4OThmXHU4YTE4XHU4Y2I0XHU4ZDc3XHU4ZWNjXHU4ZjFkXHU5OGUyXHU5YTBlXHU5YjNjXHU0ZTgwXHU1MDdkXHU1MTAwXHU1OTkzXHU1YjljXHU2MjJmXHU2MjgwXHU2NGVjXHU2YjNhXHU3MmEwXHU3NTkxXHU3OTQ3XHU3ZmE5XHU4N2ZiXHU4YWJj''@;'; put 'put ''XHU4YjcwXHU2M2FjXHU4M2NhXHU5N2EwXHU1NDA5XHU1NDAzXHU1NWFiXHU2ODU0XHU2YTU4XHU4YTcwXHU3ODI3XHU2Nzc1XHU5ZWNkXHU1Mzc0XHU1YmEyXHU4MTFhXHU4NjUwXHU5MDA2XHU0ZTE4XHU0ZTQ1XHU0ZWM3XHU0ZjExXHU1M2NhXHU1NDM4XHU1YmFlXHU1ZjEzXHU2MDI1XHU2''@;'; put 'put ''NTUxXHU2NzNkXHU2YzQyXHU2YzcyXHU2Y2UzXHU3MDc4XHU3NDAzXHU3YTc2XHU3YWFlXHU3YjA4XHU3ZDFhXHU3Y2ZlXHU3ZDY2XHU2NWU3XHU3MjViXHU1M2JiXHU1YzQ1XHU1ZGU4XHU2MmQyXHU2MmUwXHU2MzE5XHU2ZTIwXHU4NjVhXHU4YTMxXHU4ZGRkXHU5MmY4XHU2ZjAxXHU3OWE2''@;'; put 'put ''XHU5YjVhXHU0ZWE4XHU0ZWFiXHU0ZWFjIl0sWyJiNmExIiwiXHU0ZjliXHU0ZmEwXHU1MGQxXHU1MTQ3XHU3YWY2XHU1MTcxXHU1MWY2XHU1MzU0XHU1MzIxXHU1MzdmXHU1M2ViXHU1NWFjXHU1ODgzXHU1Y2UxXHU1ZjM3XHU1ZjRhXHU2MDJmXHU2MDUwXHU2MDZkXHU2MzFmXHU2NTU5XHU2''@;'; put 'put ''YTRiXHU2Y2MxXHU3MmMyXHU3MmVkXHU3N2VmXHU4MGY4XHU4MTA1XHU4MjA4XHU4NTRlXHU5MGY3XHU5M2UxXHU5N2ZmXHU5OTU3XHU5YTVhXHU0ZWYwXHU1MWRkXHU1YzJkXHU2NjgxXHU2OTZkXHU1YzQwXHU2NmYyXHU2OTc1XHU3Mzg5XHU2ODUwXHU3YzgxXHU1MGM1XHU1MmU0XHU1NzQ3''@;'; put 'put ''XHU1ZGZlXHU5MzI2XHU2NWE0XHU2YjIzXHU2YjNkXHU3NDM0XHU3OTgxXHU3OWJkXHU3YjRiXHU3ZGNhXHU4MmI5XHU4M2NjXHU4ODdmXHU4OTVmXHU4YjM5XHU4ZmQxXHU5MWQxXHU1NDFmXHU5MjgwXHU0ZTVkXHU1MDM2XHU1M2U1XHU1MzNhXHU3MmQ3XHU3Mzk2XHU3N2U5XHU4MmU2XHU4''@;'; put 'put ''ZWFmXHU5OWM2XHU5OWM4XHU5OWQyXHU1MTc3XHU2MTFhXHU4NjVlXHU1NWIwXHU3YTdhXHU1MDc2XHU1YmQzXHU5MDQ3XHU5Njg1XHU0ZTMyXHU2YWRiXHU5MWU3XHU1YzUxXHU1YzQ4Il0sWyJiN2ExIiwiXHU2Mzk4XHU3YTlmXHU2YzkzXHU5Nzc0XHU4ZjYxXHU3YWFhXHU3MThhXHU5Njg4''@;'; put 'put ''XHU3YzgyXHU2ODE3XHU3ZTcwXHU2ODUxXHU5MzZjXHU1MmYyXHU1NDFiXHU4NWFiXHU4YTEzXHU3ZmE0XHU4ZWNkXHU5MGUxXHU1MzY2XHU4ODg4XHU3OTQxXHU0ZmMyXHU1MGJlXHU1MjExXHU1MTQ0XHU1NTUzXHU1NzJkXHU3M2VhXHU1NzhiXHU1OTUxXHU1ZjYyXHU1Zjg0XHU2MDc1XHU2''@;'; put 'put ''MTc2XHU2MTY3XHU2MWE5XHU2M2IyXHU2NDNhXHU2NTZjXHU2NjZmXHU2ODQyXHU2ZTEzXHU3NTY2XHU3YTNkXHU3Y2ZiXHU3ZDRjXHU3ZDk5XHU3ZTRiXHU3ZjZiXHU4MzBlXHU4MzRhXHU4NmNkXHU4YTA4XHU4YTYzXHU4YjY2XHU4ZWZkXHU5ODFhXHU5ZDhmXHU4MmI4XHU4ZmNlXHU5YmU4''@;'; put 'put ''XHU1Mjg3XHU2MjFmXHU2NDgzXHU2ZmMwXHU5Njk5XHU2ODQxXHU1MDkxXHU2YjIwXHU2YzdhXHU2ZjU0XHU3YTc0XHU3ZDUwXHU4ODQwXHU4YTIzXHU2NzA4XHU0ZWY2XHU1MDM5XHU1MDI2XHU1MDY1XHU1MTdjXHU1MjM4XHU1MjYzXHU1NWE3XHU1NzBmXHU1ODA1XHU1YWNjXHU1ZWZhXHU2''@;'; put 'put ''MWIyXHU2MWY4XHU2MmYzXHU2MzcyIl0sWyJiOGExIiwiXHU2OTFjXHU2YTI5XHU3MjdkXHU3MmFjXHU3MzJlXHU3ODE0XHU3ODZmXHU3ZDc5XHU3NzBjXHU4MGE5XHU4OThiXHU4YjE5XHU4Y2UyXHU4ZWQyXHU5MDYzXHU5Mzc1XHU5NjdhXHU5ODU1XHU5YTEzXHU5ZTc4XHU1MTQzXHU1Mzlm''@;'; put 'put ''XHU1M2IzXHU1ZTdiXHU1ZjI2XHU2ZTFiXHU2ZTkwXHU3Mzg0XHU3M2ZlXHU3ZDQzXHU4MjM3XHU4YTAwXHU4YWZhXHU5NjUwXHU0ZTRlXHU1MDBiXHU1M2U0XHU1NDdjXHU1NmZhXHU1OWQxXHU1YjY0XHU1ZGYxXHU1ZWFiXHU1ZjI3XHU2MjM4XHU2NTQ1XHU2N2FmXHU2ZTU2XHU3MmQwXHU3''@;'; put 'put ''Y2NhXHU4OGI0XHU4MGExXHU4MGUxXHU4M2YwXHU4NjRlXHU4YTg3XHU4ZGU4XHU5MjM3XHU5NmM3XHU5ODY3XHU5ZjEzXHU0ZTk0XHU0ZTkyXHU0ZjBkXHU1MzQ4XHU1NDQ5XHU1NDNlXHU1YTJmXHU1ZjhjXHU1ZmExXHU2MDlmXHU2OGE3XHU2YThlXHU3NDVhXHU3ODgxXHU4YTllXHU4YWE0''@;'; put 'put ''XHU4Yjc3XHU5MTkwXHU0ZTVlXHU5YmM5XHU0ZWE0XHU0ZjdjXHU0ZmFmXHU1MDE5XHU1MDE2XHU1MTQ5XHU1MTZjXHU1MjlmXHU1MmI5XHU1MmZlXHU1MzlhXHU1M2UzXHU1NDExIl0sWyJiOWExIiwiXHU1NDBlXHU1NTg5XHU1NzUxXHU1N2EyXHU1OTdkXHU1YjU0XHU1YjVkXHU1YjhmXHU1''@;'; put 'put ''ZGU1XHU1ZGU3XHU1ZGY3XHU1ZTc4XHU1ZTgzXHU1ZTlhXHU1ZWI3XHU1ZjE4XHU2MDUyXHU2MTRjXHU2Mjk3XHU2MmQ4XHU2M2E3XHU2NTNiXHU2NjAyXHU2NjQzXHU2NmY0XHU2NzZkXHU2ODIxXHU2ODk3XHU2OWNiXHU2YzVmXHU2ZDJhXHU2ZDY5XHU2ZTJmXHU2ZTlkXHU3NTMyXHU3Njg3''@;'; put 'put ''XHU3ODZjXHU3YTNmXHU3Y2UwXHU3ZDA1XHU3ZDE4XHU3ZDVlXHU3ZGIxXHU4MDE1XHU4MDAzXHU4MGFmXHU4MGIxXHU4MTU0XHU4MThmXHU4MjJhXHU4MzUyXHU4ODRjXHU4ODYxXHU4YjFiXHU4Y2EyXHU4Y2ZjXHU5MGNhXHU5MTc1XHU5MjcxXHU3ODNmXHU5MmZjXHU5NWE0XHU5NjRkXHU5''@;'; put 'put ''ODA1XHU5OTk5XHU5YWQ4XHU5ZDNiXHU1MjViXHU1MmFiXHU1M2Y3XHU1NDA4XHU1OGQ1XHU2MmY3XHU2ZmUwXHU4YzZhXHU4ZjVmXHU5ZWI5XHU1MTRiXHU1MjNiXHU1NDRhXHU1NmZkXHU3YTQwXHU5MTc3XHU5ZDYwXHU5ZWQyXHU3MzQ0XHU2ZjA5XHU4MTcwXHU3NTExXHU1ZmZkXHU2MGRh''@;'; put 'put ''XHU5YWE4XHU3MmRiXHU4ZmJjIl0sWyJiYWExIiwiXHU2YjY0XHU5ODAzXHU0ZWNhXHU1NmYwXHU1NzY0XHU1OGJlXHU1YTVhXHU2MDY4XHU2MWM3XHU2NjBmXHU2NjA2XHU2ODM5XHU2OGIxXHU2ZGY3XHU3NWQ1XHU3ZDNhXHU4MjZlXHU5YjQyXHU0ZTliXHU0ZjUwXHU1M2M5XHU1NTA2XHU1''@;'; put 'put ''ZDZmXHU1ZGU2XHU1ZGVlXHU2N2ZiXHU2Yzk5XHU3NDczXHU3ODAyXHU4YTUwXHU5Mzk2XHU4OGRmXHU1NzUwXHU1ZWE3XHU2MzJiXHU1MGI1XHU1MGFjXHU1MThkXHU2NzAwXHU1NGM5XHU1ODVlXHU1OWJiXHU1YmIwXHU1ZjY5XHU2MjRkXHU2M2ExXHU2ODNkXHU2YjczXHU2ZTA4XHU3MDdk''@;'; put 'put ''XHU5MWM3XHU3MjgwXHU3ODE1XHU3ODI2XHU3OTZkXHU2NThlXHU3ZDMwXHU4M2RjXHU4OGMxXHU4ZjA5XHU5NjliXHU1MjY0XHU1NzI4XHU2NzUwXHU3ZjZhXHU4Y2ExXHU1MWI0XHU1NzQyXHU5NjJhXHU1ODNhXHU2OThhXHU4MGI0XHU1NGIyXHU1ZDBlXHU1N2ZjXHU3ODk1XHU5ZGZhXHU0''@;'; put 'put ''ZjVjXHU1MjRhXHU1NDhiXHU2NDNlXHU2NjI4XHU2NzE0XHU2N2Y1XHU3YTg0XHU3YjU2XHU3ZDIyXHU5MzJmXHU2ODVjXHU5YmFkXHU3YjM5XHU1MzE5XHU1MThhXHU1MjM3Il0sWyJiYmExIiwiXHU1YmRmXHU2MmY2XHU2NGFlXHU2NGU2XHU2NzJkXHU2YmJhXHU4NWE5XHU5NmQxXHU3Njkw''@;'; put 'put ''XHU5YmQ2XHU2MzRjXHU5MzA2XHU5YmFiXHU3NmJmXHU2NjUyXHU0ZTA5XHU1MDk4XHU1M2MyXHU1YzcxXHU2MGU4XHU2NDkyXHU2NTYzXHU2ODVmXHU3MWU2XHU3M2NhXHU3NTIzXHU3Yjk3XHU3ZTgyXHU4Njk1XHU4YjgzXHU4Y2RiXHU5MTc4XHU5OTEwXHU2NWFjXHU2NmFiXHU2YjhiXHU0''@;'; put 'put ''ZWQ1XHU0ZWQ0XHU0ZjNhXHU0ZjdmXHU1MjNhXHU1M2Y4XHU1M2YyXHU1NWUzXHU1NmRiXHU1OGViXHU1OWNiXHU1OWM5XHU1OWZmXHU1YjUwXHU1YzRkXHU1ZTAyXHU1ZTJiXHU1ZmQ3XHU2MDFkXHU2MzA3XHU2NTJmXHU1YjVjXHU2NWFmXHU2NWJkXHU2NWU4XHU2NzlkXHU2YjYyXHU2Yjdi''@;'; put 'put ''XHU2YzBmXHU3MzQ1XHU3OTQ5XHU3OWMxXHU3Y2Y4XHU3ZDE5XHU3ZDJiXHU4MGEyXHU4MTAyXHU4MWYzXHU4OTk2XHU4YTVlXHU4YTY5XHU4YTY2XHU4YThjXHU4YWVlXHU4Y2M3XHU4Y2RjXHU5NmNjXHU5OGZjXHU2YjZmXHU0ZThiXHU0ZjNjXHU0ZjhkXHU1MTUwXHU1YjU3XHU1YmZhXHU2''@;'; put 'put ''MTQ4XHU2MzAxXHU2NjQyIl0sWyJiY2ExIiwiXHU2YjIxXHU2ZWNiXHU2Y2JiXHU3MjNlXHU3NGJkXHU3NWQ0XHU3OGMxXHU3OTNhXHU4MDBjXHU4MDMzXHU4MWVhXHU4NDk0XHU4ZjllXHU2YzUwXHU5ZTdmXHU1ZjBmXHU4YjU4XHU5ZDJiXHU3YWZhXHU4ZWY4XHU1YjhkXHU5NmViXHU0ZTAz''@;'; put 'put ''XHU1M2YxXHU1N2Y3XHU1OTMxXHU1YWM5XHU1YmE0XHU2MDg5XHU2ZTdmXHU2ZjA2XHU3NWJlXHU4Y2VhXHU1YjlmXHU4NTAwXHU3YmUwXHU1MDcyXHU2N2Y0XHU4MjlkXHU1YzYxXHU4NTRhXHU3ZTFlXHU4MjBlXHU1MTk5XHU1YzA0XHU2MzY4XHU4ZDY2XHU2NTljXHU3MTZlXHU3OTNlXHU3''@;'; put 'put ''ZDE3XHU4MDA1XHU4YjFkXHU4ZWNhXHU5MDZlXHU4NmM3XHU5MGFhXHU1MDFmXHU1MmZhXHU1YzNhXHU2NzUzXHU3MDdjXHU3MjM1XHU5MTRjXHU5MWM4XHU5MzJiXHU4MmU1XHU1YmMyXHU1ZjMxXHU2MGY5XHU0ZTNiXHU1M2Q2XHU1Yjg4XHU2MjRiXHU2NzMxXHU2YjhhXHU3MmU5XHU3M2Uw''@;'; put 'put ''XHU3YTJlXHU4MTZiXHU4ZGEzXHU5MTUyXHU5OTk2XHU1MTEyXHU1M2Q3XHU1NDZhXHU1YmZmXHU2Mzg4XHU2YTM5XHU3ZGFjXHU5NzAwXHU1NmRhXHU1M2NlXHU1NDY4Il0sWyJiZGExIiwiXHU1Yjk3XHU1YzMxXHU1ZGRlXHU0ZmVlXHU2MTAxXHU2MmZlXHU2ZDMyXHU3OWMwXHU3OWNiXHU3''@;'; put 'put ''ZDQyXHU3ZTRkXHU3ZmQyXHU4MWVkXHU4MjFmXHU4NDkwXHU4ODQ2XHU4OTcyXHU4YjkwXHU4ZTc0XHU4ZjJmXHU5MDMxXHU5MTRiXHU5MTZjXHU5NmM2XHU5MTljXHU0ZWMwXHU0ZjRmXHU1MTQ1XHU1MzQxXHU1ZjkzXHU2MjBlXHU2N2Q0XHU2YzQxXHU2ZTBiXHU3MzYzXHU3ZTI2XHU5MWNk''@;'; put 'put ''XHU5MjgzXHU1M2Q0XHU1OTE5XHU1YmJmXHU2ZGQxXHU3OTVkXHU3ZTJlXHU3YzliXHU1ODdlXHU3MTlmXHU1MWZhXHU4ODUzXHU4ZmYwXHU0ZmNhXHU1Y2ZiXHU2NjI1XHU3N2FjXHU3YWUzXHU4MjFjXHU5OWZmXHU1MWM2XHU1ZmFhXHU2NWVjXHU2OTZmXHU2Yjg5XHU2ZGYzXHU2ZTk2XHU2''@;'; put 'put ''ZjY0XHU3NmZlXHU3ZDE0XHU1ZGUxXHU5MDc1XHU5MTg3XHU5ODA2XHU1MWU2XHU1MjFkXHU2MjQwXHU2NjkxXHU2NmQ5XHU2ZTFhXHU1ZWI2XHU3ZGQyXHU3ZjcyXHU2NmY4XHU4NWFmXHU4NWY3XHU4YWY4XHU1MmE5XHU1M2Q5XHU1OTczXHU1ZThmXHU1ZjkwXHU2MDU1XHU5MmU0XHU5NjY0''@;'; put 'put ''XHU1MGI3XHU1MTFmIl0sWyJiZWExIiwiXHU1MmRkXHU1MzIwXHU1MzQ3XHU1M2VjXHU1NGU4XHU1NTQ2XHU1NTMxXHU1NjE3XHU1OTY4XHU1OWJlXHU1YTNjXHU1YmI1XHU1YzA2XHU1YzBmXHU1YzExXHU1YzFhXHU1ZTg0XHU1ZThhXHU1ZWUwXHU1ZjcwXHU2MjdmXHU2Mjg0XHU2MmRiXHU2''@;'; put 'put ''MzhjXHU2Mzc3XHU2NjA3XHU2NjBjXHU2NjJkXHU2Njc2XHU2NzdlXHU2OGEyXHU2YTFmXHU2YTM1XHU2Y2JjXHU2ZDg4XHU2ZTA5XHU2ZTU4XHU3MTNjXHU3MTI2XHU3MTY3XHU3NWM3XHU3NzAxXHU3ODVkXHU3OTAxXHU3OTY1XHU3OWYwXHU3YWUwXHU3YjExXHU3Y2E3XHU3ZDM5XHU4MDk2''@;'; put 'put ''XHU4M2Q2XHU4NDhiXHU4NTQ5XHU4ODVkXHU4OGYzXHU4YTFmXHU4YTNjXHU4YTU0XHU4YTczXHU4YzYxXHU4Y2RlXHU5MWE0XHU5MjY2XHU5MzdlXHU5NDE4XHU5NjljXHU5Nzk4XHU0ZTBhXHU0ZTA4XHU0ZTFlXHU0ZTU3XHU1MTk3XHU1MjcwXHU1N2NlXHU1ODM0XHU1OGNjXHU1YjIyXHU1''@;'; put 'put ''ZTM4XHU2MGM1XHU2NGZlXHU2NzYxXHU2NzU2XHU2ZDQ0XHU3MmI2XHU3NTczXHU3YTYzXHU4NGI4XHU4YjcyXHU5MWI4XHU5MzIwXHU1NjMxXHU1N2Y0XHU5OGZlIl0sWyJiZmExIiwiXHU2MmVkXHU2OTBkXHU2Yjk2XHU3MWVkXHU3ZTU0XHU4MDc3XHU4MjcyXHU4OWU2XHU5OGRmXHU4NzU1''@;'; put 'put ''XHU4ZmIxXHU1YzNiXHU0ZjM4XHU0ZmUxXHU0ZmI1XHU1NTA3XHU1YTIwXHU1YmRkXHU1YmU5XHU1ZmMzXHU2MTRlXHU2MzJmXHU2NWIwXHU2NjRiXHU2OGVlXHU2OTliXHU2ZDc4XHU2ZGYxXHU3NTMzXHU3NWI5XHU3NzFmXHU3OTVlXHU3OWU2XHU3ZDMzXHU4MWUzXHU4MmFmXHU4NWFhXHU4''@;'; put 'put ''OWFhXHU4YTNhXHU4ZWFiXHU4ZjliXHU5MDMyXHU5MWRkXHU5NzA3XHU0ZWJhXHU0ZWMxXHU1MjAzXHU1ODc1XHU1OGVjXHU1YzBiXHU3NTFhXHU1YzNkXHU4MTRlXHU4YTBhXHU4ZmM1XHU5NjYzXHU5NzZkXHU3YjI1XHU4YWNmXHU5ODA4XHU5MTYyXHU1NmYzXHU1M2E4XHU5MDE3XHU1NDM5''@;'; put 'put ''XHU1NzgyXHU1ZTI1XHU2M2E4XHU2YzM0XHU3MDhhXHU3NzYxXHU3YzhiXHU3ZmUwXHU4ODcwXHU5MDQyXHU5MTU0XHU5MzEwXHU5MzE4XHU5NjhmXHU3NDVlXHU5YWM0XHU1ZDA3XHU1ZDY5XHU2NTcwXHU2N2EyXHU4ZGE4XHU5NmRiXHU2MzZlXHU2NzQ5XHU2OTE5XHU4M2M1XHU5ODE3XHU5''@;'; put 'put ''NmMwXHU4OGZlIl0sWyJjMGExIiwiXHU2Zjg0XHU2NDdhXHU1YmY4XHU0ZTE2XHU3MDJjXHU3NTVkXHU2NjJmXHU1MWM0XHU1MjM2XHU1MmUyXHU1OWQzXHU1ZjgxXHU2MDI3XHU2MjEwXHU2NTNmXHU2NTc0XHU2NjFmXHU2Njc0XHU2OGYyXHU2ODE2XHU2YjYzXHU2ZTA1XHU3MjcyXHU3NTFm''@;'; put 'put ''XHU3NmRiXHU3Y2JlXHU4MDU2XHU1OGYwXHU4OGZkXHU4OTdmXHU4YWEwXHU4YTkzXHU4YWNiXHU5MDFkXHU5MTkyXHU5NzUyXHU5NzU5XHU2NTg5XHU3YTBlXHU4MTA2XHU5NmJiXHU1ZTJkXHU2MGRjXHU2MjFhXHU2NWE1XHU2NjE0XHU2NzkwXHU3N2YzXHU3YTRkXHU3YzRkXHU3ZTNlXHU4''@;'; put 'put ''MTBhXHU4Y2FjXHU4ZDY0XHU4ZGUxXHU4ZTVmXHU3OGE5XHU1MjA3XHU2MmQ5XHU2M2E1XHU2NDQyXHU2Mjk4XHU4YTJkXHU3YTgzXHU3YmMwXHU4YWFjXHU5NmVhXHU3ZDc2XHU4MjBjXHU4NzQ5XHU0ZWQ5XHU1MTQ4XHU1MzQzXHU1MzYwXHU1YmEzXHU1YzAyXHU1YzE2XHU1ZGRkXHU2MjI2''@;'; put 'put ''XHU2MjQ3XHU2NGIwXHU2ODEzXHU2ODM0XHU2Y2M5XHU2ZDQ1XHU2ZDE3XHU2N2QzXHU2ZjVjXHU3MTRlXHU3MTdkXHU2NWNiXHU3YTdmXHU3YmFkXHU3ZGRhIl0sWyJjMWExIiwiXHU3ZTRhXHU3ZmE4XHU4MTdhXHU4MjFiXHU4MjM5XHU4NWE2XHU4YTZlXHU4Y2NlXHU4ZGY1XHU5MDc4XHU5''@;'; put 'put ''MDc3XHU5MmFkXHU5MjkxXHU5NTgzXHU5YmFlXHU1MjRkXHU1NTg0XHU2ZjM4XHU3MTM2XHU1MTY4XHU3OTg1XHU3ZTU1XHU4MWIzXHU3Y2NlXHU1NjRjXHU1ODUxXHU1Y2E4XHU2M2FhXHU2NmZlXHU2NmZkXHU2OTVhXHU3MmQ5XHU3NThmXHU3NThlXHU3OTBlXHU3OTU2XHU3OWRmXHU3Yzk3''@;'; put 'put ''XHU3ZDIwXHU3ZDQ0XHU4NjA3XHU4YTM0XHU5NjNiXHU5MDYxXHU5ZjIwXHU1MGU3XHU1Mjc1XHU1M2NjXHU1M2UyXHU1MDA5XHU1NWFhXHU1OGVlXHU1OTRmXHU3MjNkXHU1YjhiXHU1YzY0XHU1MzFkXHU2MGUzXHU2MGYzXHU2MzVjXHU2MzgzXHU2MzNmXHU2M2JiXHU2NGNkXHU2NWU5XHU2''@;'; put 'put ''NmY5XHU1ZGUzXHU2OWNkXHU2OWZkXHU2ZjE1XHU3MWU1XHU0ZTg5XHU3NWU5XHU3NmY4XHU3YTkzXHU3Y2RmXHU3ZGNmXHU3ZDljXHU4MDYxXHU4MzQ5XHU4MzU4XHU4NDZjXHU4NGJjXHU4NWZiXHU4OGM1XHU4ZDcwXHU5MDAxXHU5MDZkXHU5Mzk3XHU5NzFjXHU5YTEyXHU1MGNmXHU1ODk3''@;'; put 'put ''XHU2MThlIl0sWyJjMmExIiwiXHU4MWQzXHU4NTM1XHU4ZDA4XHU5MDIwXHU0ZmMzXHU1MDc0XHU1MjQ3XHU1MzczXHU2MDZmXHU2MzQ5XHU2NzVmXHU2ZTJjXHU4ZGIzXHU5MDFmXHU0ZmQ3XHU1YzVlXHU4Y2NhXHU2NWNmXHU3ZDlhXHU1MzUyXHU4ODk2XHU1MTc2XHU2M2MzXHU1YjU4XHU1''@;'; put 'put ''YjZiXHU1YzBhXHU2NDBkXHU2NzUxXHU5MDVjXHU0ZWQ2XHU1OTFhXHU1OTJhXHU2YzcwXHU4YTUxXHU1NTNlXHU1ODE1XHU1OWE1XHU2MGYwXHU2MjUzXHU2N2MxXHU4MjM1XHU2OTU1XHU5NjQwXHU5OWM0XHU5YTI4XHU0ZjUzXHU1ODA2XHU1YmZlXHU4MDEwXHU1Y2IxXHU1ZTJmXHU1Zjg1''@;'; put 'put ''XHU2MDIwXHU2MTRiXHU2MjM0XHU2NmZmXHU2Y2YwXHU2ZWRlXHU4MGNlXHU4MTdmXHU4MmQ0XHU4ODhiXHU4Y2I4XHU5MDAwXHU5MDJlXHU5NjhhXHU5ZWRiXHU5YmRiXHU0ZWUzXHU1M2YwXHU1OTI3XHU3YjJjXHU5MThkXHU5ODRjXHU5ZGY5XHU2ZWRkXHU3MDI3XHU1MzUzXHU1NTQ0XHU1''@;'; put 'put ''Yjg1XHU2MjU4XHU2MjllXHU2MmQzXHU2Y2EyXHU2ZmVmXHU3NDIyXHU4YTE3XHU5NDM4XHU2ZmMxXHU4YWZlXHU4MzM4XHU1MWU3XHU4NmY4XHU1M2VhIl0sWyJjM2ExIiwiXHU1M2U5XHU0ZjQ2XHU5MDU0XHU4ZmIwXHU1OTZhXHU4MTMxXHU1ZGZkXHU3YWVhXHU4ZmJmXHU2OGRhXHU4YzM3''@;'; put 'put ''XHU3MmY4XHU5YzQ4XHU2YTNkXHU4YWIwXHU0ZTM5XHU1MzU4XHU1NjA2XHU1NzY2XHU2MmM1XHU2M2EyXHU2NWU2XHU2YjRlXHU2ZGUxXHU2ZTViXHU3MGFkXHU3N2VkXHU3YWVmXHU3YmFhXHU3ZGJiXHU4MDNkXHU4MGM2XHU4NmNiXHU4YTk1XHU5MzViXHU1NmUzXHU1OGM3XHU1ZjNlXHU2''@;'; put 'put ''NWFkXHU2Njk2XHU2YTgwXHU2YmI1XHU3NTM3XHU4YWM3XHU1MDI0XHU3N2U1XHU1NzMwXHU1ZjFiXHU2MDY1XHU2NjdhXHU2YzYwXHU3NWY0XHU3YTFhXHU3ZjZlXHU4MWY0XHU4NzE4XHU5MDQ1XHU5OWIzXHU3YmM5XHU3NTVjXHU3YWY5XHU3YjUxXHU4NGM0XHU5MDEwXHU3OWU5XHU3YTky''@;'; put 'put ''XHU4MzM2XHU1YWUxXHU3NzQwXHU0ZTJkXHU0ZWYyXHU1Yjk5XHU1ZmUwXHU2MmJkXHU2NjNjXHU2N2YxXHU2Y2U4XHU4NjZiXHU4ODc3XHU4YTNiXHU5MTRlXHU5MmYzXHU5OWQwXHU2YTE3XHU3MDI2XHU3MzJhXHU4MmU3XHU4NDU3XHU4Y2FmXHU0ZTAxXHU1MTQ2XHU1MWNiXHU1NThiXHU1''@;'; put 'put ''YmY1Il0sWyJjNGExIiwiXHU1ZTE2XHU1ZTMzXHU1ZTgxXHU1ZjE0XHU1ZjM1XHU1ZjZiXHU1ZmI0XHU2MWYyXHU2MzExXHU2NmEyXHU2NzFkXHU2ZjZlXHU3MjUyXHU3NTNhXHU3NzNhXHU4MDc0XHU4MTM5XHU4MTc4XHU4Nzc2XHU4YWJmXHU4YWRjXHU4ZDg1XHU4ZGYzXHU5MjlhXHU5NTc3''@;'; put 'put ''XHU5ODAyXHU5Y2U1XHU1MmM1XHU2MzU3XHU3NmY0XHU2NzE1XHU2Yzg4XHU3M2NkXHU4Y2MzXHU5M2FlXHU5NjczXHU2ZDI1XHU1ODljXHU2OTBlXHU2OWNjXHU4ZmZkXHU5MzlhXHU3NWRiXHU5MDFhXHU1ODVhXHU2ODAyXHU2M2I0XHU2OWZiXHU0ZjQzXHU2ZjJjXHU2N2Q4XHU4ZmJiXHU4''@;'; put 'put ''NTI2XHU3ZGI0XHU5MzU0XHU2OTNmXHU2ZjcwXHU1NzZhXHU1OGY3XHU1YjJjXHU3ZDJjXHU3MjJhXHU1NDBhXHU5MWUzXHU5ZGI0XHU0ZWFkXHU0ZjRlXHU1MDVjXHU1MDc1XHU1MjQzXHU4YzllXHU1NDQ4XHU1ODI0XHU1YjlhXHU1ZTFkXHU1ZTk1XHU1ZWFkXHU1ZWY3XHU1ZjFmXHU2MDhj''@;'; put 'put ''XHU2MmI1XHU2MzNhXHU2M2QwXHU2OGFmXHU2YzQwXHU3ODg3XHU3OThlXHU3YTBiXHU3ZGUwXHU4MjQ3XHU4YTAyXHU4YWU2XHU4ZTQ0XHU5MDEzIl0sWyJjNWExIiwiXHU5MGI4XHU5MTJkXHU5MWQ4XHU5ZjBlXHU2Y2U1XHU2NDU4XHU2NGUyXHU2NTc1XHU2ZWY0XHU3Njg0XHU3YjFiXHU5''@;'; put 'put ''MDY5XHU5M2QxXHU2ZWJhXHU1NGYyXHU1ZmI5XHU2NGE0XHU4ZjRkXHU4ZmVkXHU5MjQ0XHU1MTc4XHU1ODZiXHU1OTI5XHU1YzU1XHU1ZTk3XHU2ZGZiXHU3ZThmXHU3NTFjXHU4Y2JjXHU4ZWUyXHU5ODViXHU3MGI5XHU0ZjFkXHU2YmJmXHU2ZmIxXHU3NTMwXHU5NmZiXHU1MTRlXHU1NDEw''@;'; put 'put ''XHU1ODM1XHU1ODU3XHU1OWFjXHU1YzYwXHU1ZjkyXHU2NTk3XHU2NzVjXHU2ZTIxXHU3NjdiXHU4M2RmXHU4Y2VkXHU5MDE0XHU5MGZkXHU5MzRkXHU3ODI1XHU3ODNhXHU1MmFhXHU1ZWE2XHU1NzFmXHU1OTc0XHU2MDEyXHU1MDEyXHU1MTVhXHU1MWFjXHU1MWNkXHU1MjAwXHU1NTEwXHU1''@;'; put 'put ''ODU0XHU1ODU4XHU1OTU3XHU1Yjk1XHU1Y2Y2XHU1ZDhiXHU2MGJjXHU2Mjk1XHU2NDJkXHU2NzcxXHU2ODQzXHU2OGJjXHU2OGRmXHU3NmQ3XHU2ZGQ4XHU2ZTZmXHU2ZDliXHU3MDZmXHU3MWM4XHU1ZjUzXHU3NWQ4XHU3OTc3XHU3YjQ5XHU3YjU0XHU3YjUyXHU3Y2Q2XHU3ZDcxXHU1MjMw''@;'; put 'put ''Il0sWyJjNmExIiwiXHU4NDYzXHU4NTY5XHU4NWU0XHU4YTBlXHU4YjA0XHU4YzQ2XHU4ZTBmXHU5MDAzXHU5MDBmXHU5NDE5XHU5Njc2XHU5ODJkXHU5YTMwXHU5NWQ4XHU1MGNkXHU1MmQ1XHU1NDBjXHU1ODAyXHU1YzBlXHU2MWE3XHU2NDllXHU2ZDFlXHU3N2IzXHU3YWU1XHU4MGY0XHU4''@;'; put 'put ''NDA0XHU5MDUzXHU5Mjg1XHU1Y2UwXHU5ZDA3XHU1MzNmXHU1Zjk3XHU1ZmIzXHU2ZDljXHU3Mjc5XHU3NzYzXHU3OWJmXHU3YmU0XHU2YmQyXHU3MmVjXHU4YWFkXHU2ODAzXHU2YTYxXHU1MWY4XHU3YTgxXHU2OTM0XHU1YzRhXHU5Y2Y2XHU4MmViXHU1YmM1XHU5MTQ5XHU3MDFlXHU1Njc4''@;'; put 'put ''XHU1YzZmXHU2MGM3XHU2NTY2XHU2YzhjXHU4YzVhXHU5MDQxXHU5ODEzXHU1NDUxXHU2NmM3XHU5MjBkXHU1OTQ4XHU5MGEzXHU1MTg1XHU0ZTRkXHU1MWVhXHU4NTk5XHU4YjBlXHU3MDU4XHU2MzdhXHU5MzRiXHU2OTYyXHU5OWI0XHU3ZTA0XHU3NTc3XHU1MzU3XHU2OTYwXHU4ZWRmXHU5''@;'; put 'put ''NmUzXHU2YzVkXHU0ZThjXHU1YzNjXHU1ZjEwXHU4ZmU5XHU1MzAyXHU4Y2QxXHU4MDg5XHU4Njc5XHU1ZWZmXHU2NWU1XHU0ZTczXHU1MTY1Il0sWyJjN2ExIiwiXHU1OTgyXHU1YzNmXHU5N2VlXHU0ZWZiXHU1OThhXHU1ZmNkXHU4YThkXHU2ZmUxXHU3OWIwXHU3OTYyXHU1YmU3XHU4NDcx''@;'; put 'put ''XHU3MzJiXHU3MWIxXHU1ZTc0XHU1ZmY1XHU2MzdiXHU2NDlhXHU3MWMzXHU3Yzk4XHU0ZTQzXHU1ZWZjXHU0ZTRiXHU1N2RjXHU1NmEyXHU2MGE5XHU2ZmMzXHU3ZDBkXHU4MGZkXHU4MTMzXHU4MWJmXHU4ZmIyXHU4OTk3XHU4NmE0XHU1ZGY0XHU2MjhhXHU2NGFkXHU4OTg3XHU2Nzc3XHU2''@;'; put 'put ''Y2UyXHU2ZDNlXHU3NDM2XHU3ODM0XHU1YTQ2XHU3Zjc1XHU4MmFkXHU5OWFjXHU0ZmYzXHU1ZWMzXHU2MmRkXHU2MzkyXHU2NTU3XHU2NzZmXHU3NmMzXHU3MjRjXHU4MGNjXHU4MGJhXHU4ZjI5XHU5MTRkXHU1MDBkXHU1N2Y5XHU1YTkyXHU2ODg1XHU2OTczXHU3MTY0XHU3MmZkXHU4Y2I3''@;'; put 'put ''XHU1OGYyXHU4Y2UwXHU5NjZhXHU5MDE5XHU4NzdmXHU3OWU0XHU3N2U3XHU4NDI5XHU0ZjJmXHU1MjY1XHU1MzVhXHU2MmNkXHU2N2NmXHU2Y2NhXHU3NjdkXHU3Yjk0XHU3Yzk1XHU4MjM2XHU4NTg0XHU4ZmViXHU2NmRkXHU2ZjIwXHU3MjA2XHU3ZTFiXHU4M2FiXHU5OWMxXHU5ZWE2Il0s''@;'; put 'put ''WyJjOGExIiwiXHU1MWZkXHU3YmIxXHU3ODcyXHU3YmI4XHU4MDg3XHU3YjQ4XHU2YWU4XHU1ZTYxXHU4MDhjXHU3NTUxXHU3NTYwXHU1MTZiXHU5MjYyXHU2ZThjXHU3NjdhXHU5MTk3XHU5YWVhXHU0ZjEwXHU3ZjcwXHU2MjljXHU3YjRmXHU5NWE1XHU5Y2U5XHU1NjdhXHU1ODU5XHU4NmU0''@;'; put 'put ''XHU5NmJjXHU0ZjM0XHU1MjI0XHU1MzRhXHU1M2NkXHU1M2RiXHU1ZTA2XHU2NDJjXHU2NTkxXHU2NzdmXHU2YzNlXHU2YzRlXHU3MjQ4XHU3MmFmXHU3M2VkXHU3NTU0XHU3ZTQxXHU4MjJjXHU4NWU5XHU4Y2E5XHU3YmM0XHU5MWM2XHU3MTY5XHU5ODEyXHU5OGVmXHU2MzNkXHU2NjY5XHU3''@;'; put 'put ''NTZhXHU3NmU0XHU3OGQwXHU4NTQzXHU4NmVlXHU1MzJhXHU1MzUxXHU1NDI2XHU1OTgzXHU1ZTg3XHU1ZjdjXHU2MGIyXHU2MjQ5XHU2Mjc5XHU2MmFiXHU2NTkwXHU2YmQ0XHU2Y2NjXHU3NWIyXHU3NmFlXHU3ODkxXHU3OWQ4XHU3ZGNiXHU3Zjc3XHU4MGE1XHU4OGFiXHU4YWI5XHU4Y2Ji''@;'; put 'put ''XHU5MDdmXHU5NzVlXHU5OGRiXHU2YTBiXHU3YzM4XHU1MDk5XHU1YzNlXHU1ZmFlXHU2Nzg3XHU2YmQ4XHU3NDM1XHU3NzA5XHU3ZjhlIl0sWyJjOWExIiwiXHU5ZjNiXHU2N2NhXHU3YTE3XHU1MzM5XHU3NThiXHU5YWVkXHU1ZjY2XHU4MTlkXHU4M2YxXHU4MDk4XHU1ZjNjXHU1ZmM1XHU3''@;'; put 'put ''NTYyXHU3YjQ2XHU5MDNjXHU2ODY3XHU1OWViXHU1YTliXHU3ZDEwXHU3NjdlXHU4YjJjXHU0ZmY1XHU1ZjZhXHU2YTE5XHU2YzM3XHU2ZjAyXHU3NGUyXHU3OTY4XHU4ODY4XHU4YTU1XHU4Yzc5XHU1ZWRmXHU2M2NmXHU3NWM1XHU3OWQyXHU4MmQ3XHU5MzI4XHU5MmYyXHU4NDljXHU4NmVk''@;'; put 'put ''XHU5YzJkXHU1NGMxXHU1ZjZjXHU2NThjXHU2ZDVjXHU3MDE1XHU4Y2E3XHU4Y2QzXHU5ODNiXHU2NTRmXHU3NGY2XHU0ZTBkXHU0ZWQ4XHU1N2UwXHU1OTJiXHU1YTY2XHU1YmNjXHU1MWE4XHU1ZTAzXHU1ZTljXHU2MDE2XHU2Mjc2XHU2NTc3XHU2NWE3XHU2NjZlXHU2ZDZlXHU3MjM2XHU3''@;'; put 'put ''YjI2XHU4MTUwXHU4MTlhXHU4Mjk5XHU4YjVjXHU4Y2EwXHU4Y2U2XHU4ZDc0XHU5NjFjXHU5NjQ0XHU0ZmFlXHU2NGFiXHU2YjY2XHU4MjFlXHU4NDYxXHU4NTZhXHU5MGU4XHU1YzAxXHU2OTUzXHU5OGE4XHU4NDdhXHU4NTU3XHU0ZjBmXHU1MjZmXHU1ZmE5XHU1ZTQ1XHU2NzBkIl0sWyJj''@;'; put 'put ''YWExIiwiXHU3OThmXHU4MTc5XHU4OTA3XHU4OTg2XHU2ZGY1XHU1ZjE3XHU2MjU1XHU2Y2I4XHU0ZWNmXHU3MjY5XHU5YjkyXHU1MjA2XHU1NDNiXHU1Njc0XHU1OGIzXHU2MWE0XHU2MjZlXHU3MTFhXHU1OTZlXHU3Yzg5XHU3Y2RlXHU3ZDFiXHU5NmYwXHU2NTg3XHU4MDVlXHU0ZTE5XHU0''@;'; put 'put ''Zjc1XHU1MTc1XHU1ODQwXHU1ZTYzXHU1ZTczXHU1ZjBhXHU2N2M0XHU0ZTI2XHU4NTNkXHU5NTg5XHU5NjViXHU3YzczXHU5ODAxXHU1MGZiXHU1OGMxXHU3NjU2XHU3OGE3XHU1MjI1XHU3N2E1XHU4NTExXHU3Yjg2XHU1MDRmXHU1OTA5XHU3MjQ3XHU3YmM3XHU3ZGU4XHU4ZmJhXHU4ZmQ0''@;'; put 'put ''XHU5MDRkXHU0ZmJmXHU1MmM5XHU1YTI5XHU1ZjAxXHU5N2FkXHU0ZmRkXHU4MjE3XHU5MmVhXHU1NzAzXHU2MzU1XHU2YjY5XHU3NTJiXHU4OGRjXHU4ZjE0XHU3YTQyXHU1MmRmXHU1ODkzXHU2MTU1XHU2MjBhXHU2NmFlXHU2YmNkXHU3YzNmXHU4M2U5XHU1MDIzXHU0ZmY4XHU1MzA1XHU1''@;'; put 'put ''NDQ2XHU1ODMxXHU1OTQ5XHU1YjlkXHU1Y2YwXHU1Y2VmXHU1ZDI5XHU1ZTk2XHU2MmIxXHU2MzY3XHU2NTNlXHU2NWI5XHU2NzBiIl0sWyJjYmExIiwiXHU2Y2Q1XHU2Y2UxXHU3MGY5XHU3ODMyXHU3ZTJiXHU4MGRlXHU4MmIzXHU4NDBjXHU4NGVjXHU4NzAyXHU4OTEyXHU4YTJhXHU4YzRh''@;'; put 'put ''XHU5MGE2XHU5MmQyXHU5OGZkXHU5Y2YzXHU5ZDZjXHU0ZTRmXHU0ZWExXHU1MDhkXHU1MjU2XHU1NzRhXHU1OWE4XHU1ZTNkXHU1ZmQ4XHU1ZmQ5XHU2MjNmXHU2NmI0XHU2NzFiXHU2N2QwXHU2OGQyXHU1MTkyXHU3ZDIxXHU4MGFhXHU4MWE4XHU4YjAwXHU4YzhjXHU4Y2JmXHU5MjdlXHU5''@;'; put 'put ''NjMyXHU1NDIwXHU5ODJjXHU1MzE3XHU1MGQ1XHU1MzVjXHU1OGE4XHU2NGIyXHU2NzM0XHU3MjY3XHU3NzY2XHU3YTQ2XHU5MWU2XHU1MmMzXHU2Y2ExXHU2Yjg2XHU1ODAwXHU1ZTRjXHU1OTU0XHU2NzJjXHU3ZmZiXHU1MWUxXHU3NmM2XHU2NDY5XHU3OGU4XHU5YjU0XHU5ZWJiXHU1N2Ni''@;'; put 'put ''XHU1OWI5XHU2NjI3XHU2NzlhXHU2YmNlXHU1NGU5XHU2OWQ5XHU1ZTU1XHU4MTljXHU2Nzk1XHU5YmFhXHU2N2ZlXHU5YzUyXHU2ODVkXHU0ZWE2XHU0ZmUzXHU1M2M4XHU2MmI5XHU2NzJiXHU2Y2FiXHU4ZmM0XHU0ZmFkXHU3ZTZkXHU5ZWJmXHU0ZTA3XHU2MTYyXHU2ZTgwIl0sWyJjY2Ex''@;'; put 'put ''IiwiXHU2ZjJiXHU4NTEzXHU1NDczXHU2NzJhXHU5YjQ1XHU1ZGYzXHU3Yjk1XHU1Y2FjXHU1YmM2XHU4NzFjXHU2ZTRhXHU4NGQxXHU3YTE0XHU4MTA4XHU1OTk5XHU3YzhkXHU2YzExXHU3NzIwXHU1MmQ5XHU1OTIyXHU3MTIxXHU3MjVmXHU3N2RiXHU5NzI3XHU5ZDYxXHU2OTBiXHU1YTdm''@;'; put 'put ''XHU1YTE4XHU1MWE1XHU1NDBkXHU1NDdkXHU2NjBlXHU3NmRmXHU4ZmY3XHU5Mjk4XHU5Y2Y0XHU1OWVhXHU3MjVkXHU2ZWM1XHU1MTRkXHU2OGM5XHU3ZGJmXHU3ZGVjXHU5NzYyXHU5ZWJhXHU2NDc4XHU2YTIxXHU4MzAyXHU1OTg0XHU1YjVmXHU2YmRiXHU3MzFiXHU3NmYyXHU3ZGIyXHU4''@;'; put 'put ''MDE3XHU4NDk5XHU1MTMyXHU2NzI4XHU5ZWQ5XHU3NmVlXHU2NzYyXHU1MmZmXHU5OTA1XHU1YzI0XHU2MjNiXHU3YzdlXHU4Y2IwXHU1NTRmXHU2MGI2XHU3ZDBiXHU5NTgwXHU1MzAxXHU0ZTVmXHU1MWI2XHU1OTFjXHU3MjNhXHU4MDM2XHU5MWNlXHU1ZjI1XHU3N2UyXHU1Mzg0XHU1Zjc5''@;'; put 'put ''XHU3ZDA0XHU4NWFjXHU4YTMzXHU4ZThkXHU5NzU2XHU2N2YzXHU4NWFlXHU5NDUzXHU2MTA5XHU2MTA4XHU2Y2I5XHU3NjUyIl0sWyJjZGExIiwiXHU4YWVkXHU4ZjM4XHU1NTJmXHU0ZjUxXHU1MTJhXHU1MmM3XHU1M2NiXHU1YmE1XHU1ZTdkXHU2MGEwXHU2MTgyXHU2M2Q2XHU2NzA5XHU2''@;'; put 'put ''N2RhXHU2ZTY3XHU2ZDhjXHU3MzM2XHU3MzM3XHU3NTMxXHU3OTUwXHU4OGQ1XHU4YTk4XHU5MDRhXHU5MDkxXHU5MGY1XHU5NmM0XHU4NzhkXHU1OTE1XHU0ZTg4XHU0ZjU5XHU0ZTBlXHU4YTg5XHU4ZjNmXHU5ODEwXHU1MGFkXHU1ZTdjXHU1OTk2XHU1YmI5XHU1ZWI4XHU2M2RhXHU2M2Zh''@;'; put 'put ''XHU2NGMxXHU2NmRjXHU2OTRhXHU2OWQ4XHU2ZDBiXHU2ZWI2XHU3MTk0XHU3NTI4XHU3YWFmXHU3ZjhhXHU4MDAwXHU4NDQ5XHU4NGM5XHU4OTgxXHU4YjIxXHU4ZTBhXHU5MDY1XHU5NjdkXHU5OTBhXHU2MTdlXHU2MjkxXHU2YjMyXHU2YzgzXHU2ZDc0XHU3ZmNjXHU3ZmZjXHU2ZGMwXHU3''@;'; put 'put ''Zjg1XHU4N2JhXHU4OGY4XHU2NzY1XHU4M2IxXHU5ODNjXHU5NmY3XHU2ZDFiXHU3ZDYxXHU4NDNkXHU5MTZhXHU0ZTcxXHU1Mzc1XHU1ZDUwXHU2YjA0XHU2ZmViXHU4NWNkXHU4NjJkXHU4OWE3XHU1MjI5XHU1NDBmXHU1YzY1XHU2NzRlXHU2OGE4XHU3NDA2XHU3NDgzIl0sWyJjZWExIiwi''@;'; put 'put ''XHU3NWUyXHU4OGNmXHU4OGUxXHU5MWNjXHU5NmUyXHU5Njc4XHU1ZjhiXHU3Mzg3XHU3YWNiXHU4NDRlXHU2M2EwXHU3NTY1XHU1Mjg5XHU2ZDQxXHU2ZTljXHU3NDA5XHU3NTU5XHU3ODZiXHU3YzkyXHU5Njg2XHU3YWRjXHU5ZjhkXHU0ZmI2XHU2MTZlXHU2NWM1XHU4NjVjXHU0ZTg2XHU0''@;'; put 'put ''ZWFlXHU1MGRhXHU0ZTIxXHU1MWNjXHU1YmVlXHU2NTk5XHU2ODgxXHU2ZGJjXHU3MzFmXHU3NjQyXHU3N2FkXHU3YTFjXHU3Y2U3XHU4MjZmXHU4YWQyXHU5MDdjXHU5MWNmXHU5Njc1XHU5ODE4XHU1MjliXHU3ZGQxXHU1MDJiXHU1Mzk4XHU2Nzk3XHU2ZGNiXHU3MWQwXHU3NDMzXHU4MWU4''@;'; put 'put ''XHU4ZjJhXHU5NmEzXHU5YzU3XHU5ZTlmXHU3NDYwXHU1ODQxXHU2ZDk5XHU3ZDJmXHU5ODVlXHU0ZWU0XHU0ZjM2XHU0ZjhiXHU1MWI3XHU1MmIxXHU1ZGJhXHU2MDFjXHU3M2IyXHU3OTNjXHU4MmQzXHU5MjM0XHU5NmI3XHU5NmY2XHU5NzBhXHU5ZTk3XHU5ZjYyXHU2NmE2XHU2Yjc0XHU1''@;'; put 'put ''MjE3XHU1MmEzXHU3MGM4XHU4OGMyXHU1ZWM5XHU2MDRiXHU2MTkwXHU2ZjIzXHU3MTQ5XHU3YzNlXHU3ZGY0XHU4MDZmIl0sWyJjZmExIiwiXHU4NGVlXHU5MDIzXHU5MzJjXHU1NDQyXHU5YjZmXHU2YWQzXHU3MDg5XHU4Y2MyXHU4ZGVmXHU5NzMyXHU1MmI0XHU1YTQxXHU1ZWNhXHU1ZjA0''@;'; put 'put ''XHU2NzE3XHU2OTdjXHU2OTk0XHU2ZDZhXHU2ZjBmXHU3MjYyXHU3MmZjXHU3YmVkXHU4MDAxXHU4MDdlXHU4NzRiXHU5MGNlXHU1MTZkXHU5ZTkzXHU3OTg0XHU4MDhiXHU5MzMyXHU4YWQ2XHU1MDJkXHU1NDhjXHU4YTcxXHU2YjZhXHU4Y2M0XHU4MTA3XHU2MGQxXHU2N2EwXHU5ZGYyXHU0''@;'; put 'put ''ZTk5XHU0ZTk4XHU5YzEwXHU4YTZiXHU4NWMxXHU4NTY4XHU2OTAwXHU2ZTdlXHU3ODk3XHU4MTU1Il0sWyJkMGExIiwiXHU1ZjBjXHU0ZTEwXHU0ZTE1XHU0ZTJhXHU0ZTMxXHU0ZTM2XHU0ZTNjXHU0ZTNmXHU0ZTQyXHU0ZTU2XHU0ZTU4XHU0ZTgyXHU0ZTg1XHU4YzZiXHU0ZThhXHU4MjEy''@;'; put 'put ''XHU1ZjBkXHU0ZThlXHU0ZTllXHU0ZTlmXHU0ZWEwXHU0ZWEyXHU0ZWIwXHU0ZWIzXHU0ZWI2XHU0ZWNlXHU0ZWNkXHU0ZWM0XHU0ZWM2XHU0ZWMyXHU0ZWQ3XHU0ZWRlXHU0ZWVkXHU0ZWRmXHU0ZWY3XHU0ZjA5XHU0ZjVhXHU0ZjMwXHU0ZjViXHU0ZjVkXHU0ZjU3XHU0ZjQ3XHU0Zjc2XHU0''@;'; put 'put ''Zjg4XHU0ZjhmXHU0Zjk4XHU0ZjdiXHU0ZjY5XHU0ZjcwXHU0ZjkxXHU0ZjZmXHU0Zjg2XHU0Zjk2XHU1MTE4XHU0ZmQ0XHU0ZmRmXHU0ZmNlXHU0ZmQ4XHU0ZmRiXHU0ZmQxXHU0ZmRhXHU0ZmQwXHU0ZmU0XHU0ZmU1XHU1MDFhXHU1MDI4XHU1MDE0XHU1MDJhXHU1MDI1XHU1MDA1XHU0ZjFj''@;'; put 'put ''XHU0ZmY2XHU1MDIxXHU1MDI5XHU1MDJjXHU0ZmZlXHU0ZmVmXHU1MDExXHU1MDA2XHU1MDQzXHU1MDQ3XHU2NzAzXHU1MDU1XHU1MDUwXHU1MDQ4XHU1MDVhXHU1MDU2XHU1MDZjXHU1MDc4XHU1MDgwXHU1MDlhXHU1MDg1XHU1MGI0XHU1MGIyIl0sWyJkMWExIiwiXHU1MGM5XHU1MGNhXHU1''@;'; put 'put ''MGIzXHU1MGMyXHU1MGQ2XHU1MGRlXHU1MGU1XHU1MGVkXHU1MGUzXHU1MGVlXHU1MGY5XHU1MGY1XHU1MTA5XHU1MTAxXHU1MTAyXHU1MTE2XHU1MTE1XHU1MTE0XHU1MTFhXHU1MTIxXHU1MTNhXHU1MTM3XHU1MTNjXHU1MTNiXHU1MTNmXHU1MTQwXHU1MTUyXHU1MTRjXHU1MTU0XHU1MTYy''@;'; put 'put ''XHU3YWY4XHU1MTY5XHU1MTZhXHU1MTZlXHU1MTgwXHU1MTgyXHU1NmQ4XHU1MThjXHU1MTg5XHU1MThmXHU1MTkxXHU1MTkzXHU1MTk1XHU1MTk2XHU1MWE0XHU1MWE2XHU1MWEyXHU1MWE5XHU1MWFhXHU1MWFiXHU1MWIzXHU1MWIxXHU1MWIyXHU1MWIwXHU1MWI1XHU1MWJkXHU1MWM1XHU1''@;'; put 'put ''MWM5XHU1MWRiXHU1MWUwXHU4NjU1XHU1MWU5XHU1MWVkXHU1MWYwXHU1MWY1XHU1MWZlXHU1MjA0XHU1MjBiXHU1MjE0XHU1MjBlXHU1MjI3XHU1MjJhXHU1MjJlXHU1MjMzXHU1MjM5XHU1MjRmXHU1MjQ0XHU1MjRiXHU1MjRjXHU1MjVlXHU1MjU0XHU1MjZhXHU1Mjc0XHU1MjY5XHU1Mjcz''@;'; put 'put ''XHU1MjdmXHU1MjdkXHU1MjhkXHU1Mjk0XHU1MjkyXHU1MjcxXHU1Mjg4XHU1MjkxXHU4ZmE4Il0sWyJkMmExIiwiXHU4ZmE3XHU1MmFjXHU1MmFkXHU1MmJjXHU1MmI1XHU1MmMxXHU1MmNkXHU1MmQ3XHU1MmRlXHU1MmUzXHU1MmU2XHU5OGVkXHU1MmUwXHU1MmYzXHU1MmY1XHU1MmY4XHU1''@;'; put 'put ''MmY5XHU1MzA2XHU1MzA4XHU3NTM4XHU1MzBkXHU1MzEwXHU1MzBmXHU1MzE1XHU1MzFhXHU1MzIzXHU1MzJmXHU1MzMxXHU1MzMzXHU1MzM4XHU1MzQwXHU1MzQ2XHU1MzQ1XHU0ZTE3XHU1MzQ5XHU1MzRkXHU1MWQ2XHU1MzVlXHU1MzY5XHU1MzZlXHU1OTE4XHU1MzdiXHU1Mzc3XHU1Mzgy''@;'; put 'put ''XHU1Mzk2XHU1M2EwXHU1M2E2XHU1M2E1XHU1M2FlXHU1M2IwXHU1M2I2XHU1M2MzXHU3YzEyXHU5NmQ5XHU1M2RmXHU2NmZjXHU3MWVlXHU1M2VlXHU1M2U4XHU1M2VkXHU1M2ZhXHU1NDAxXHU1NDNkXHU1NDQwXHU1NDJjXHU1NDJkXHU1NDNjXHU1NDJlXHU1NDM2XHU1NDI5XHU1NDFkXHU1''@;'; put 'put ''NDRlXHU1NDhmXHU1NDc1XHU1NDhlXHU1NDVmXHU1NDcxXHU1NDc3XHU1NDcwXHU1NDkyXHU1NDdiXHU1NDgwXHU1NDc2XHU1NDg0XHU1NDkwXHU1NDg2XHU1NGM3XHU1NGEyXHU1NGI4XHU1NGE1XHU1NGFjXHU1NGM0XHU1NGM4XHU1NGE4Il0sWyJkM2ExIiwiXHU1NGFiXHU1NGMyXHU1NGE0''@;'; put 'put ''XHU1NGJlXHU1NGJjXHU1NGQ4XHU1NGU1XHU1NGU2XHU1NTBmXHU1NTE0XHU1NGZkXHU1NGVlXHU1NGVkXHU1NGZhXHU1NGUyXHU1NTM5XHU1NTQwXHU1NTYzXHU1NTRjXHU1NTJlXHU1NTVjXHU1NTQ1XHU1NTU2XHU1NTU3XHU1NTM4XHU1NTMzXHU1NTVkXHU1NTk5XHU1NTgwXHU1NGFmXHU1''@;'; put 'put ''NThhXHU1NTlmXHU1NTdiXHU1NTdlXHU1NTk4XHU1NTllXHU1NWFlXHU1NTdjXHU1NTgzXHU1NWE5XHU1NTg3XHU1NWE4XHU1NWRhXHU1NWM1XHU1NWRmXHU1NWM0XHU1NWRjXHU1NWU0XHU1NWQ0XHU1NjE0XHU1NWY3XHU1NjE2XHU1NWZlXHU1NWZkXHU1NjFiXHU1NWY5XHU1NjRlXHU1NjUw''@;'; put 'put ''XHU3MWRmXHU1NjM0XHU1NjM2XHU1NjMyXHU1NjM4XHU1NjZiXHU1NjY0XHU1NjJmXHU1NjZjXHU1NjZhXHU1Njg2XHU1NjgwXHU1NjhhXHU1NmEwXHU1Njk0XHU1NjhmXHU1NmE1XHU1NmFlXHU1NmI2XHU1NmI0XHU1NmMyXHU1NmJjXHU1NmMxXHU1NmMzXHU1NmMwXHU1NmM4XHU1NmNlXHU1''@;'; put 'put ''NmQxXHU1NmQzXHU1NmQ3XHU1NmVlXHU1NmY5XHU1NzAwXHU1NmZmXHU1NzA0XHU1NzA5Il0sWyJkNGExIiwiXHU1NzA4XHU1NzBiXHU1NzBkXHU1NzEzXHU1NzE4XHU1NzE2XHU1NWM3XHU1NzFjXHU1NzI2XHU1NzM3XHU1NzM4XHU1NzRlXHU1NzNiXHU1NzQwXHU1NzRmXHU1NzY5XHU1N2Mw''@;'; put 'put ''XHU1Nzg4XHU1NzYxXHU1NzdmXHU1Nzg5XHU1NzkzXHU1N2EwXHU1N2IzXHU1N2E0XHU1N2FhXHU1N2IwXHU1N2MzXHU1N2M2XHU1N2Q0XHU1N2QyXHU1N2QzXHU1ODBhXHU1N2Q2XHU1N2UzXHU1ODBiXHU1ODE5XHU1ODFkXHU1ODcyXHU1ODIxXHU1ODYyXHU1ODRiXHU1ODcwXHU2YmMwXHU1''@;'; put 'put ''ODUyXHU1ODNkXHU1ODc5XHU1ODg1XHU1OGI5XHU1ODlmXHU1OGFiXHU1OGJhXHU1OGRlXHU1OGJiXHU1OGI4XHU1OGFlXHU1OGM1XHU1OGQzXHU1OGQxXHU1OGQ3XHU1OGQ5XHU1OGQ4XHU1OGU1XHU1OGRjXHU1OGU0XHU1OGRmXHU1OGVmXHU1OGZhXHU1OGY5XHU1OGZiXHU1OGZjXHU1OGZk''@;'; put 'put ''XHU1OTAyXHU1OTBhXHU1OTEwXHU1OTFiXHU2OGE2XHU1OTI1XHU1OTJjXHU1OTJkXHU1OTMyXHU1OTM4XHU1OTNlXHU3YWQyXHU1OTU1XHU1OTUwXHU1OTRlXHU1OTVhXHU1OTU4XHU1OTYyXHU1OTYwXHU1OTY3XHU1OTZjXHU1OTY5Il0sWyJkNWExIiwiXHU1OTc4XHU1OTgxXHU1OTlkXHU0''@;'; put 'put ''ZjVlXHU0ZmFiXHU1OWEzXHU1OWIyXHU1OWM2XHU1OWU4XHU1OWRjXHU1OThkXHU1OWQ5XHU1OWRhXHU1YTI1XHU1YTFmXHU1YTExXHU1YTFjXHU1YTA5XHU1YTFhXHU1YTQwXHU1YTZjXHU1YTQ5XHU1YTM1XHU1YTM2XHU1YTYyXHU1YTZhXHU1YTlhXHU1YWJjXHU1YWJlXHU1YWNiXHU1YWMy''@;'; put 'put ''XHU1YWJkXHU1YWUzXHU1YWQ3XHU1YWU2XHU1YWU5XHU1YWQ2XHU1YWZhXHU1YWZiXHU1YjBjXHU1YjBiXHU1YjE2XHU1YjMyXHU1YWQwXHU1YjJhXHU1YjM2XHU1YjNlXHU1YjQzXHU1YjQ1XHU1YjQwXHU1YjUxXHU1YjU1XHU1YjVhXHU1YjViXHU1YjY1XHU1YjY5XHU1YjcwXHU1YjczXHU1''@;'; put 'put ''Yjc1XHU1Yjc4XHU2NTg4XHU1YjdhXHU1YjgwXHU1YjgzXHU1YmE2XHU1YmI4XHU1YmMzXHU1YmM3XHU1YmM5XHU1YmQ0XHU1YmQwXHU1YmU0XHU1YmU2XHU1YmUyXHU1YmRlXHU1YmU1XHU1YmViXHU1YmYwXHU1YmY2XHU1YmYzXHU1YzA1XHU1YzA3XHU1YzA4XHU1YzBkXHU1YzEzXHU1YzIw''@;'; put 'put ''XHU1YzIyXHU1YzI4XHU1YzM4XHU1YzM5XHU1YzQxXHU1YzQ2XHU1YzRlXHU1YzUzIl0sWyJkNmExIiwiXHU1YzUwXHU1YzRmXHU1YjcxXHU1YzZjXHU1YzZlXHU0ZTYyXHU1Yzc2XHU1Yzc5XHU1YzhjXHU1YzkxXHU1Yzk0XHU1OTliXHU1Y2FiXHU1Y2JiXHU1Y2I2XHU1Y2JjXHU1Y2I3XHU1''@;'; put 'put ''Y2M1XHU1Y2JlXHU1Y2M3XHU1Y2Q5XHU1Y2U5XHU1Y2ZkXHU1Y2ZhXHU1Y2VkXHU1ZDhjXHU1Y2VhXHU1ZDBiXHU1ZDE1XHU1ZDE3XHU1ZDVjXHU1ZDFmXHU1ZDFiXHU1ZDExXHU1ZDE0XHU1ZDIyXHU1ZDFhXHU1ZDE5XHU1ZDE4XHU1ZDRjXHU1ZDUyXHU1ZDRlXHU1ZDRiXHU1ZDZjXHU1ZDcz''@;'; put 'put ''XHU1ZDc2XHU1ZDg3XHU1ZDg0XHU1ZDgyXHU1ZGEyXHU1ZDlkXHU1ZGFjXHU1ZGFlXHU1ZGJkXHU1ZDkwXHU1ZGI3XHU1ZGJjXHU1ZGM5XHU1ZGNkXHU1ZGQzXHU1ZGQyXHU1ZGQ2XHU1ZGRiXHU1ZGViXHU1ZGYyXHU1ZGY1XHU1ZTBiXHU1ZTFhXHU1ZTE5XHU1ZTExXHU1ZTFiXHU1ZTM2XHU1''@;'; put 'put ''ZTM3XHU1ZTQ0XHU1ZTQzXHU1ZTQwXHU1ZTRlXHU1ZTU3XHU1ZTU0XHU1ZTVmXHU1ZTYyXHU1ZTY0XHU1ZTQ3XHU1ZTc1XHU1ZTc2XHU1ZTdhXHU5ZWJjXHU1ZTdmXHU1ZWEwXHU1ZWMxXHU1ZWMyXHU1ZWM4XHU1ZWQwXHU1ZWNmIl0sWyJkN2ExIiwiXHU1ZWQ2XHU1ZWUzXHU1ZWRkXHU1ZWRh''@;'; put 'put ''XHU1ZWRiXHU1ZWUyXHU1ZWUxXHU1ZWU4XHU1ZWU5XHU1ZWVjXHU1ZWYxXHU1ZWYzXHU1ZWYwXHU1ZWY0XHU1ZWY4XHU1ZWZlXHU1ZjAzXHU1ZjA5XHU1ZjVkXHU1ZjVjXHU1ZjBiXHU1ZjExXHU1ZjE2XHU1ZjI5XHU1ZjJkXHU1ZjM4XHU1ZjQxXHU1ZjQ4XHU1ZjRjXHU1ZjRlXHU1ZjJmXHU1''@;'; put 'put ''ZjUxXHU1ZjU2XHU1ZjU3XHU1ZjU5XHU1ZjYxXHU1ZjZkXHU1ZjczXHU1Zjc3XHU1ZjgzXHU1ZjgyXHU1ZjdmXHU1ZjhhXHU1Zjg4XHU1ZjkxXHU1Zjg3XHU1ZjllXHU1Zjk5XHU1Zjk4XHU1ZmEwXHU1ZmE4XHU1ZmFkXHU1ZmJjXHU1ZmQ2XHU1ZmZiXHU1ZmU0XHU1ZmY4XHU1ZmYxXHU1ZmRk''@;'; put 'put ''XHU2MGIzXHU1ZmZmXHU2MDIxXHU2MDYwXHU2MDE5XHU2MDEwXHU2MDI5XHU2MDBlXHU2MDMxXHU2MDFiXHU2MDE1XHU2MDJiXHU2MDI2XHU2MDBmXHU2MDNhXHU2MDVhXHU2MDQxXHU2MDZhXHU2MDc3XHU2MDVmXHU2MDRhXHU2MDQ2XHU2MDRkXHU2MDYzXHU2MDQzXHU2MDY0XHU2MDQyXHU2''@;'; put 'put ''MDZjXHU2MDZiXHU2MDU5XHU2MDgxXHU2MDhkXHU2MGU3XHU2MDgzXHU2MDlhIl0sWyJkOGExIiwiXHU2MDg0XHU2MDliXHU2MDk2XHU2MDk3XHU2MDkyXHU2MGE3XHU2MDhiXHU2MGUxXHU2MGI4XHU2MGUwXHU2MGQzXHU2MGI0XHU1ZmYwXHU2MGJkXHU2MGM2XHU2MGI1XHU2MGQ4XHU2MTRk''@;'; put 'put ''XHU2MTE1XHU2MTA2XHU2MGY2XHU2MGY3XHU2MTAwXHU2MGY0XHU2MGZhXHU2MTAzXHU2MTIxXHU2MGZiXHU2MGYxXHU2MTBkXHU2MTBlXHU2MTQ3XHU2MTNlXHU2MTI4XHU2MTI3XHU2MTRhXHU2MTNmXHU2MTNjXHU2MTJjXHU2MTM0XHU2MTNkXHU2MTQyXHU2MTQ0XHU2MTczXHU2MTc3XHU2''@;'; put 'put ''MTU4XHU2MTU5XHU2MTVhXHU2MTZiXHU2MTc0XHU2MTZmXHU2MTY1XHU2MTcxXHU2MTVmXHU2MTVkXHU2MTUzXHU2MTc1XHU2MTk5XHU2MTk2XHU2MTg3XHU2MWFjXHU2MTk0XHU2MTlhXHU2MThhXHU2MTkxXHU2MWFiXHU2MWFlXHU2MWNjXHU2MWNhXHU2MWM5XHU2MWY3XHU2MWM4XHU2MWMz''@;'; put 'put ''XHU2MWM2XHU2MWJhXHU2MWNiXHU3Zjc5XHU2MWNkXHU2MWU2XHU2MWUzXHU2MWY2XHU2MWZhXHU2MWY0XHU2MWZmXHU2MWZkXHU2MWZjXHU2MWZlXHU2MjAwXHU2MjA4XHU2MjA5XHU2MjBkXHU2MjBjXHU2MjE0XHU2MjFiIl0sWyJkOWExIiwiXHU2MjFlXHU2MjIxXHU2MjJhXHU2MjJlXHU2''@;'; put 'put ''MjMwXHU2MjMyXHU2MjMzXHU2MjQxXHU2MjRlXHU2MjVlXHU2MjYzXHU2MjViXHU2MjYwXHU2MjY4XHU2MjdjXHU2MjgyXHU2Mjg5XHU2MjdlXHU2MjkyXHU2MjkzXHU2Mjk2XHU2MmQ0XHU2MjgzXHU2Mjk0XHU2MmQ3XHU2MmQxXHU2MmJiXHU2MmNmXHU2MmZmXHU2MmM2XHU2NGQ0XHU2MmM4''@;'; put 'put ''XHU2MmRjXHU2MmNjXHU2MmNhXHU2MmMyXHU2MmM3XHU2MjliXHU2MmM5XHU2MzBjXHU2MmVlXHU2MmYxXHU2MzI3XHU2MzAyXHU2MzA4XHU2MmVmXHU2MmY1XHU2MzUwXHU2MzNlXHU2MzRkXHU2NDFjXHU2MzRmXHU2Mzk2XHU2MzhlXHU2MzgwXHU2M2FiXHU2Mzc2XHU2M2EzXHU2MzhmXHU2''@;'; put 'put ''Mzg5XHU2MzlmXHU2M2I1XHU2MzZiXHU2MzY5XHU2M2JlXHU2M2U5XHU2M2MwXHU2M2M2XHU2M2UzXHU2M2M5XHU2M2QyXHU2M2Y2XHU2M2M0XHU2NDE2XHU2NDM0XHU2NDA2XHU2NDEzXHU2NDI2XHU2NDM2XHU2NTFkXHU2NDE3XHU2NDI4XHU2NDBmXHU2NDY3XHU2NDZmXHU2NDc2XHU2NDRl''@;'; put 'put ''XHU2NTJhXHU2NDk1XHU2NDkzXHU2NGE1XHU2NGE5XHU2NDg4XHU2NGJjIl0sWyJkYWExIiwiXHU2NGRhXHU2NGQyXHU2NGM1XHU2NGM3XHU2NGJiXHU2NGQ4XHU2NGMyXHU2NGYxXHU2NGU3XHU4MjA5XHU2NGUwXHU2NGUxXHU2MmFjXHU2NGUzXHU2NGVmXHU2NTJjXHU2NGY2XHU2NGY0XHU2''@;'; put 'put ''NGYyXHU2NGZhXHU2NTAwXHU2NGZkXHU2NTE4XHU2NTFjXHU2NTA1XHU2NTI0XHU2NTIzXHU2NTJiXHU2NTM0XHU2NTM1XHU2NTM3XHU2NTM2XHU2NTM4XHU3NTRiXHU2NTQ4XHU2NTU2XHU2NTU1XHU2NTRkXHU2NTU4XHU2NTVlXHU2NTVkXHU2NTcyXHU2NTc4XHU2NTgyXHU2NTgzXHU4Yjhh''@;'; put 'put ''XHU2NTliXHU2NTlmXHU2NWFiXHU2NWI3XHU2NWMzXHU2NWM2XHU2NWMxXHU2NWM0XHU2NWNjXHU2NWQyXHU2NWRiXHU2NWQ5XHU2NWUwXHU2NWUxXHU2NWYxXHU2NzcyXHU2NjBhXHU2NjAzXHU2NWZiXHU2NzczXHU2NjM1XHU2NjM2XHU2NjM0XHU2NjFjXHU2NjRmXHU2NjQ0XHU2NjQ5XHU2''@;'; put 'put ''NjQxXHU2NjVlXHU2NjVkXHU2NjY0XHU2NjY3XHU2NjY4XHU2NjVmXHU2NjYyXHU2NjcwXHU2NjgzXHU2Njg4XHU2NjhlXHU2Njg5XHU2Njg0XHU2Njk4XHU2NjlkXHU2NmMxXHU2NmI5XHU2NmM5XHU2NmJlXHU2NmJjIl0sWyJkYmExIiwiXHU2NmM0XHU2NmI4XHU2NmQ2XHU2NmRhXHU2NmUw''@;'; put 'put ''XHU2NjNmXHU2NmU2XHU2NmU5XHU2NmYwXHU2NmY1XHU2NmY3XHU2NzBmXHU2NzE2XHU2NzFlXHU2NzI2XHU2NzI3XHU5NzM4XHU2NzJlXHU2NzNmXHU2NzM2XHU2NzQxXHU2NzM4XHU2NzM3XHU2NzQ2XHU2NzVlXHU2NzYwXHU2NzU5XHU2NzYzXHU2NzY0XHU2Nzg5XHU2NzcwXHU2N2E5XHU2''@;'; put 'put ''NzdjXHU2NzZhXHU2NzhjXHU2NzhiXHU2N2E2XHU2N2ExXHU2Nzg1XHU2N2I3XHU2N2VmXHU2N2I0XHU2N2VjXHU2N2IzXHU2N2U5XHU2N2I4XHU2N2U0XHU2N2RlXHU2N2RkXHU2N2UyXHU2N2VlXHU2N2I5XHU2N2NlXHU2N2M2XHU2N2U3XHU2YTljXHU2ODFlXHU2ODQ2XHU2ODI5XHU2ODQw''@;'; put 'put ''XHU2ODRkXHU2ODMyXHU2ODRlXHU2OGIzXHU2ODJiXHU2ODU5XHU2ODYzXHU2ODc3XHU2ODdmXHU2ODlmXHU2ODhmXHU2OGFkXHU2ODk0XHU2ODlkXHU2ODliXHU2ODgzXHU2YWFlXHU2OGI5XHU2ODc0XHU2OGI1XHU2OGEwXHU2OGJhXHU2OTBmXHU2ODhkXHU2ODdlXHU2OTAxXHU2OGNhXHU2''@;'; put 'put ''OTA4XHU2OGQ4XHU2OTIyXHU2OTI2XHU2OGUxXHU2OTBjXHU2OGNkIl0sWyJkY2ExIiwiXHU2OGQ0XHU2OGU3XHU2OGQ1XHU2OTM2XHU2OTEyXHU2OTA0XHU2OGQ3XHU2OGUzXHU2OTI1XHU2OGY5XHU2OGUwXHU2OGVmXHU2OTI4XHU2OTJhXHU2OTFhXHU2OTIzXHU2OTIxXHU2OGM2XHU2OTc5''@;'; put 'put ''XHU2OTc3XHU2OTVjXHU2OTc4XHU2OTZiXHU2OTU0XHU2OTdlXHU2OTZlXHU2OTM5XHU2OTc0XHU2OTNkXHU2OTU5XHU2OTMwXHU2OTYxXHU2OTVlXHU2OTVkXHU2OTgxXHU2OTZhXHU2OWIyXHU2OWFlXHU2OWQwXHU2OWJmXHU2OWMxXHU2OWQzXHU2OWJlXHU2OWNlXHU1YmU4XHU2OWNhXHU2''@;'; put 'put ''OWRkXHU2OWJiXHU2OWMzXHU2OWE3XHU2YTJlXHU2OTkxXHU2OWEwXHU2OTljXHU2OTk1XHU2OWI0XHU2OWRlXHU2OWU4XHU2YTAyXHU2YTFiXHU2OWZmXHU2YjBhXHU2OWY5XHU2OWYyXHU2OWU3XHU2YTA1XHU2OWIxXHU2YTFlXHU2OWVkXHU2YTE0XHU2OWViXHU2YTBhXHU2YTEyXHU2YWMx''@;'; put 'put ''XHU2YTIzXHU2YTEzXHU2YTQ0XHU2YTBjXHU2YTcyXHU2YTM2XHU2YTc4XHU2YTQ3XHU2YTYyXHU2YTU5XHU2YTY2XHU2YTQ4XHU2YTM4XHU2YTIyXHU2YTkwXHU2YThkXHU2YWEwXHU2YTg0XHU2YWEyXHU2YWEzIl0sWyJkZGExIiwiXHU2YTk3XHU4NjE3XHU2YWJiXHU2YWMzXHU2YWMyXHU2''@;'; put 'put ''YWI4XHU2YWIzXHU2YWFjXHU2YWRlXHU2YWQxXHU2YWRmXHU2YWFhXHU2YWRhXHU2YWVhXHU2YWZiXHU2YjA1XHU4NjE2XHU2YWZhXHU2YjEyXHU2YjE2XHU5YjMxXHU2YjFmXHU2YjM4XHU2YjM3XHU3NmRjXHU2YjM5XHU5OGVlXHU2YjQ3XHU2YjQzXHU2YjQ5XHU2YjUwXHU2YjU5XHU2YjU0''@;'; put 'put ''XHU2YjViXHU2YjVmXHU2YjYxXHU2Yjc4XHU2Yjc5XHU2YjdmXHU2YjgwXHU2Yjg0XHU2YjgzXHU2YjhkXHU2Yjk4XHU2Yjk1XHU2YjllXHU2YmE0XHU2YmFhXHU2YmFiXHU2YmFmXHU2YmIyXHU2YmIxXHU2YmIzXHU2YmI3XHU2YmJjXHU2YmM2XHU2YmNiXHU2YmQzXHU2YmRmXHU2YmVjXHU2''@;'; put 'put ''YmViXHU2YmYzXHU2YmVmXHU5ZWJlXHU2YzA4XHU2YzEzXHU2YzE0XHU2YzFiXHU2YzI0XHU2YzIzXHU2YzVlXHU2YzU1XHU2YzYyXHU2YzZhXHU2YzgyXHU2YzhkXHU2YzlhXHU2YzgxXHU2YzliXHU2YzdlXHU2YzY4XHU2YzczXHU2YzkyXHU2YzkwXHU2Y2M0XHU2Y2YxXHU2Y2QzXHU2Y2Jk''@;'; put 'put ''XHU2Y2Q3XHU2Y2M1XHU2Y2RkXHU2Y2FlXHU2Y2IxXHU2Y2JlIl0sWyJkZWExIiwiXHU2Y2JhXHU2Y2RiXHU2Y2VmXHU2Y2Q5XHU2Y2VhXHU2ZDFmXHU4ODRkXHU2ZDM2XHU2ZDJiXHU2ZDNkXHU2ZDM4XHU2ZDE5XHU2ZDM1XHU2ZDMzXHU2ZDEyXHU2ZDBjXHU2ZDYzXHU2ZDkzXHU2ZDY0XHU2''@;'; put 'put ''ZDVhXHU2ZDc5XHU2ZDU5XHU2ZDhlXHU2ZDk1XHU2ZmU0XHU2ZDg1XHU2ZGY5XHU2ZTE1XHU2ZTBhXHU2ZGI1XHU2ZGM3XHU2ZGU2XHU2ZGI4XHU2ZGM2XHU2ZGVjXHU2ZGRlXHU2ZGNjXHU2ZGU4XHU2ZGQyXHU2ZGM1XHU2ZGZhXHU2ZGQ5XHU2ZGU0XHU2ZGQ1XHU2ZGVhXHU2ZGVlXHU2ZTJk''@;'; put 'put ''XHU2ZTZlXHU2ZTJlXHU2ZTE5XHU2ZTcyXHU2ZTVmXHU2ZTNlXHU2ZTIzXHU2ZTZiXHU2ZTJiXHU2ZTc2XHU2ZTRkXHU2ZTFmXHU2ZTQzXHU2ZTNhXHU2ZTRlXHU2ZTI0XHU2ZWZmXHU2ZTFkXHU2ZTM4XHU2ZTgyXHU2ZWFhXHU2ZTk4XHU2ZWM5XHU2ZWI3XHU2ZWQzXHU2ZWJkXHU2ZWFmXHU2''@;'; put 'put ''ZWM0XHU2ZWIyXHU2ZWQ0XHU2ZWQ1XHU2ZThmXHU2ZWE1XHU2ZWMyXHU2ZTlmXHU2ZjQxXHU2ZjExXHU3MDRjXHU2ZWVjXHU2ZWY4XHU2ZWZlXHU2ZjNmXHU2ZWYyXHU2ZjMxXHU2ZWVmXHU2ZjMyXHU2ZWNjIl0sWyJkZmExIiwiXHU2ZjNlXHU2ZjEzXHU2ZWY3XHU2Zjg2XHU2ZjdhXHU2Zjc4''@;'; put 'put ''XHU2ZjgxXHU2ZjgwXHU2ZjZmXHU2ZjViXHU2ZmYzXHU2ZjZkXHU2ZjgyXHU2ZjdjXHU2ZjU4XHU2ZjhlXHU2ZjkxXHU2ZmMyXHU2ZjY2XHU2ZmIzXHU2ZmEzXHU2ZmExXHU2ZmE0XHU2ZmI5XHU2ZmM2XHU2ZmFhXHU2ZmRmXHU2ZmQ1XHU2ZmVjXHU2ZmQ0XHU2ZmQ4XHU2ZmYxXHU2ZmVlXHU2''@;'; put 'put ''ZmRiXHU3MDA5XHU3MDBiXHU2ZmZhXHU3MDExXHU3MDAxXHU3MDBmXHU2ZmZlXHU3MDFiXHU3MDFhXHU2Zjc0XHU3MDFkXHU3MDE4XHU3MDFmXHU3MDMwXHU3MDNlXHU3MDMyXHU3MDUxXHU3MDYzXHU3MDk5XHU3MDkyXHU3MGFmXHU3MGYxXHU3MGFjXHU3MGI4XHU3MGIzXHU3MGFlXHU3MGRm''@;'; put 'put ''XHU3MGNiXHU3MGRkXHU3MGQ5XHU3MTA5XHU3MGZkXHU3MTFjXHU3MTE5XHU3MTY1XHU3MTU1XHU3MTg4XHU3MTY2XHU3MTYyXHU3MTRjXHU3MTU2XHU3MTZjXHU3MThmXHU3MWZiXHU3MTg0XHU3MTk1XHU3MWE4XHU3MWFjXHU3MWQ3XHU3MWI5XHU3MWJlXHU3MWQyXHU3MWM5XHU3MWQ0XHU3''@;'; put 'put ''MWNlXHU3MWUwXHU3MWVjXHU3MWU3XHU3MWY1XHU3MWZjIl0sWyJlMGExIiwiXHU3MWY5XHU3MWZmXHU3MjBkXHU3MjEwXHU3MjFiXHU3MjI4XHU3MjJkXHU3MjJjXHU3MjMwXHU3MjMyXHU3MjNiXHU3MjNjXHU3MjNmXHU3MjQwXHU3MjQ2XHU3MjRiXHU3MjU4XHU3Mjc0XHU3MjdlXHU3Mjgy''@;'; put 'put ''XHU3MjgxXHU3Mjg3XHU3MjkyXHU3Mjk2XHU3MmEyXHU3MmE3XHU3MmI5XHU3MmIyXHU3MmMzXHU3MmM2XHU3MmM0XHU3MmNlXHU3MmQyXHU3MmUyXHU3MmUwXHU3MmUxXHU3MmY5XHU3MmY3XHU1MDBmXHU3MzE3XHU3MzBhXHU3MzFjXHU3MzE2XHU3MzFkXHU3MzM0XHU3MzJmXHU3MzI5XHU3''@;'; put 'put ''MzI1XHU3MzNlXHU3MzRlXHU3MzRmXHU5ZWQ4XHU3MzU3XHU3MzZhXHU3MzY4XHU3MzcwXHU3Mzc4XHU3Mzc1XHU3MzdiXHU3MzdhXHU3M2M4XHU3M2IzXHU3M2NlXHU3M2JiXHU3M2MwXHU3M2U1XHU3M2VlXHU3M2RlXHU3NGEyXHU3NDA1XHU3NDZmXHU3NDI1XHU3M2Y4XHU3NDMyXHU3NDNh''@;'; put 'put ''XHU3NDU1XHU3NDNmXHU3NDVmXHU3NDU5XHU3NDQxXHU3NDVjXHU3NDY5XHU3NDcwXHU3NDYzXHU3NDZhXHU3NDc2XHU3NDdlXHU3NDhiXHU3NDllXHU3NGE3XHU3NGNhXHU3NGNmXHU3NGQ0XHU3M2YxIl0sWyJlMWExIiwiXHU3NGUwXHU3NGUzXHU3NGU3XHU3NGU5XHU3NGVlXHU3NGYyXHU3''@;'; put 'put ''NGYwXHU3NGYxXHU3NGY4XHU3NGY3XHU3NTA0XHU3NTAzXHU3NTA1XHU3NTBjXHU3NTBlXHU3NTBkXHU3NTE1XHU3NTEzXHU3NTFlXHU3NTI2XHU3NTJjXHU3NTNjXHU3NTQ0XHU3NTRkXHU3NTRhXHU3NTQ5XHU3NTViXHU3NTQ2XHU3NTVhXHU3NTY5XHU3NTY0XHU3NTY3XHU3NTZiXHU3NTZk''@;'; put 'put ''XHU3NTc4XHU3NTc2XHU3NTg2XHU3NTg3XHU3NTc0XHU3NThhXHU3NTg5XHU3NTgyXHU3NTk0XHU3NTlhXHU3NTlkXHU3NWE1XHU3NWEzXHU3NWMyXHU3NWIzXHU3NWMzXHU3NWI1XHU3NWJkXHU3NWI4XHU3NWJjXHU3NWIxXHU3NWNkXHU3NWNhXHU3NWQyXHU3NWQ5XHU3NWUzXHU3NWRlXHU3''@;'; put 'put ''NWZlXHU3NWZmXHU3NWZjXHU3NjAxXHU3NWYwXHU3NWZhXHU3NWYyXHU3NWYzXHU3NjBiXHU3NjBkXHU3NjA5XHU3NjFmXHU3NjI3XHU3NjIwXHU3NjIxXHU3NjIyXHU3NjI0XHU3NjM0XHU3NjMwXHU3NjNiXHU3NjQ3XHU3NjQ4XHU3NjQ2XHU3NjVjXHU3NjU4XHU3NjYxXHU3NjYyXHU3NjY4''@;'; put 'put ''XHU3NjY5XHU3NjZhXHU3NjY3XHU3NjZjXHU3NjcwIl0sWyJlMmExIiwiXHU3NjcyXHU3Njc2XHU3Njc4XHU3NjdjXHU3NjgwXHU3NjgzXHU3Njg4XHU3NjhiXHU3NjhlXHU3Njk2XHU3NjkzXHU3Njk5XHU3NjlhXHU3NmIwXHU3NmI0XHU3NmI4XHU3NmI5XHU3NmJhXHU3NmMyXHU3NmNkXHU3''@;'; put 'put ''NmQ2XHU3NmQyXHU3NmRlXHU3NmUxXHU3NmU1XHU3NmU3XHU3NmVhXHU4NjJmXHU3NmZiXHU3NzA4XHU3NzA3XHU3NzA0XHU3NzI5XHU3NzI0XHU3NzFlXHU3NzI1XHU3NzI2XHU3NzFiXHU3NzM3XHU3NzM4XHU3NzQ3XHU3NzVhXHU3NzY4XHU3NzZiXHU3NzViXHU3NzY1XHU3NzdmXHU3Nzdl''@;'; put 'put ''XHU3Nzc5XHU3NzhlXHU3NzhiXHU3NzkxXHU3N2EwXHU3NzllXHU3N2IwXHU3N2I2XHU3N2I5XHU3N2JmXHU3N2JjXHU3N2JkXHU3N2JiXHU3N2M3XHU3N2NkXHU3N2Q3XHU3N2RhXHU3N2RjXHU3N2UzXHU3N2VlXHU3N2ZjXHU3ODBjXHU3ODEyXHU3OTI2XHU3ODIwXHU3OTJhXHU3ODQ1XHU3''@;'; put 'put ''ODhlXHU3ODc0XHU3ODg2XHU3ODdjXHU3ODlhXHU3ODhjXHU3OGEzXHU3OGI1XHU3OGFhXHU3OGFmXHU3OGQxXHU3OGM2XHU3OGNiXHU3OGQ0XHU3OGJlXHU3OGJjXHU3OGM1XHU3OGNhXHU3OGVjIl0sWyJlM2ExIiwiXHU3OGU3XHU3OGRhXHU3OGZkXHU3OGY0XHU3OTA3XHU3OTEyXHU3OTEx''@;'; put 'put ''XHU3OTE5XHU3OTJjXHU3OTJiXHU3OTQwXHU3OTYwXHU3OTU3XHU3OTVmXHU3OTVhXHU3OTU1XHU3OTUzXHU3OTdhXHU3OTdmXHU3OThhXHU3OTlkXHU3OWE3XHU5ZjRiXHU3OWFhXHU3OWFlXHU3OWIzXHU3OWI5XHU3OWJhXHU3OWM5XHU3OWQ1XHU3OWU3XHU3OWVjXHU3OWUxXHU3OWUzXHU3''@;'; put 'put ''YTA4XHU3YTBkXHU3YTE4XHU3YTE5XHU3YTIwXHU3YTFmXHU3OTgwXHU3YTMxXHU3YTNiXHU3YTNlXHU3YTM3XHU3YTQzXHU3YTU3XHU3YTQ5XHU3YTYxXHU3YTYyXHU3YTY5XHU5ZjlkXHU3YTcwXHU3YTc5XHU3YTdkXHU3YTg4XHU3YTk3XHU3YTk1XHU3YTk4XHU3YTk2XHU3YWE5XHU3YWM4''@;'; put 'put ''XHU3YWIwXHU3YWI2XHU3YWM1XHU3YWM0XHU3YWJmXHU5MDgzXHU3YWM3XHU3YWNhXHU3YWNkXHU3YWNmXHU3YWQ1XHU3YWQzXHU3YWQ5XHU3YWRhXHU3YWRkXHU3YWUxXHU3YWUyXHU3YWU2XHU3YWVkXHU3YWYwXHU3YjAyXHU3YjBmXHU3YjBhXHU3YjA2XHU3YjMzXHU3YjE4XHU3YjE5XHU3''@;'; put 'put ''YjFlXHU3YjM1XHU3YjI4XHU3YjM2XHU3YjUwIl0sWyJlNGExIiwiXHU3YjdhXHU3YjA0XHU3YjRkXHU3YjBiXHU3YjRjXHU3YjQ1XHU3Yjc1XHU3YjY1XHU3Yjc0XHU3YjY3XHU3YjcwXHU3YjcxXHU3YjZjXHU3YjZlXHU3YjlkXHU3Yjk4XHU3YjlmXHU3YjhkXHU3YjljXHU3YjlhXHU3Yjhi''@;'; put 'put ''XHU3YjkyXHU3YjhmXHU3YjVkXHU3Yjk5XHU3YmNiXHU3YmMxXHU3YmNjXHU3YmNmXHU3YmI0XHU3YmM2XHU3YmRkXHU3YmU5XHU3YzExXHU3YzE0XHU3YmU2XHU3YmU1XHU3YzYwXHU3YzAwXHU3YzA3XHU3YzEzXHU3YmYzXHU3YmY3XHU3YzE3XHU3YzBkXHU3YmY2XHU3YzIzXHU3YzI3XHU3''@;'; put 'put ''YzJhXHU3YzFmXHU3YzM3XHU3YzJiXHU3YzNkXHU3YzRjXHU3YzQzXHU3YzU0XHU3YzRmXHU3YzQwXHU3YzUwXHU3YzU4XHU3YzVmXHU3YzY0XHU3YzU2XHU3YzY1XHU3YzZjXHU3Yzc1XHU3YzgzXHU3YzkwXHU3Y2E0XHU3Y2FkXHU3Y2EyXHU3Y2FiXHU3Y2ExXHU3Y2E4XHU3Y2IzXHU3Y2Iy''@;'; put 'put ''XHU3Y2IxXHU3Y2FlXHU3Y2I5XHU3Y2JkXHU3Y2MwXHU3Y2M1XHU3Y2MyXHU3Y2Q4XHU3Y2QyXHU3Y2RjXHU3Y2UyXHU5YjNiXHU3Y2VmXHU3Y2YyXHU3Y2Y0XHU3Y2Y2XHU3Y2ZhXHU3ZDA2Il0sWyJlNWExIiwiXHU3ZDAyXHU3ZDFjXHU3ZDE1XHU3ZDBhXHU3ZDQ1XHU3ZDRiXHU3ZDJlXHU3''@;'; put 'put ''ZDMyXHU3ZDNmXHU3ZDM1XHU3ZDQ2XHU3ZDczXHU3ZDU2XHU3ZDRlXHU3ZDcyXHU3ZDY4XHU3ZDZlXHU3ZDRmXHU3ZDYzXHU3ZDkzXHU3ZDg5XHU3ZDViXHU3ZDhmXHU3ZDdkXHU3ZDliXHU3ZGJhXHU3ZGFlXHU3ZGEzXHU3ZGI1XHU3ZGM3XHU3ZGJkXHU3ZGFiXHU3ZTNkXHU3ZGEyXHU3ZGFm''@;'; put 'put ''XHU3ZGRjXHU3ZGI4XHU3ZDlmXHU3ZGIwXHU3ZGQ4XHU3ZGRkXHU3ZGU0XHU3ZGRlXHU3ZGZiXHU3ZGYyXHU3ZGUxXHU3ZTA1XHU3ZTBhXHU3ZTIzXHU3ZTIxXHU3ZTEyXHU3ZTMxXHU3ZTFmXHU3ZTA5XHU3ZTBiXHU3ZTIyXHU3ZTQ2XHU3ZTY2XHU3ZTNiXHU3ZTM1XHU3ZTM5XHU3ZTQzXHU3''@;'; put 'put ''ZTM3XHU3ZTMyXHU3ZTNhXHU3ZTY3XHU3ZTVkXHU3ZTU2XHU3ZTVlXHU3ZTU5XHU3ZTVhXHU3ZTc5XHU3ZTZhXHU3ZTY5XHU3ZTdjXHU3ZTdiXHU3ZTgzXHU3ZGQ1XHU3ZTdkXHU4ZmFlXHU3ZTdmXHU3ZTg4XHU3ZTg5XHU3ZThjXHU3ZTkyXHU3ZTkwXHU3ZTkzXHU3ZTk0XHU3ZTk2XHU3ZThl''@;'; put 'put ''XHU3ZTliXHU3ZTljXHU3ZjM4XHU3ZjNhIl0sWyJlNmExIiwiXHU3ZjQ1XHU3ZjRjXHU3ZjRkXHU3ZjRlXHU3ZjUwXHU3ZjUxXHU3ZjU1XHU3ZjU0XHU3ZjU4XHU3ZjVmXHU3ZjYwXHU3ZjY4XHU3ZjY5XHU3ZjY3XHU3Zjc4XHU3ZjgyXHU3Zjg2XHU3ZjgzXHU3Zjg4XHU3Zjg3XHU3ZjhjXHU3''@;'; put 'put ''Zjk0XHU3ZjllXHU3ZjlkXHU3ZjlhXHU3ZmEzXHU3ZmFmXHU3ZmIyXHU3ZmI5XHU3ZmFlXHU3ZmI2XHU3ZmI4XHU4YjcxXHU3ZmM1XHU3ZmM2XHU3ZmNhXHU3ZmQ1XHU3ZmQ0XHU3ZmUxXHU3ZmU2XHU3ZmU5XHU3ZmYzXHU3ZmY5XHU5OGRjXHU4MDA2XHU4MDA0XHU4MDBiXHU4MDEyXHU4MDE4''@;'; put 'put ''XHU4MDE5XHU4MDFjXHU4MDIxXHU4MDI4XHU4MDNmXHU4MDNiXHU4MDRhXHU4MDQ2XHU4MDUyXHU4MDU4XHU4MDVhXHU4MDVmXHU4MDYyXHU4MDY4XHU4MDczXHU4MDcyXHU4MDcwXHU4MDc2XHU4MDc5XHU4MDdkXHU4MDdmXHU4MDg0XHU4MDg2XHU4MDg1XHU4MDliXHU4MDkzXHU4MDlhXHU4''@;'; put 'put ''MGFkXHU1MTkwXHU4MGFjXHU4MGRiXHU4MGU1XHU4MGQ5XHU4MGRkXHU4MGM0XHU4MGRhXHU4MGQ2XHU4MTA5XHU4MGVmXHU4MGYxXHU4MTFiXHU4MTI5XHU4MTIzXHU4MTJmXHU4MTRiIl0sWyJlN2ExIiwiXHU5NjhiXHU4MTQ2XHU4MTNlXHU4MTUzXHU4MTUxXHU4MGZjXHU4MTcxXHU4MTZl''@;'; put 'put ''XHU4MTY1XHU4MTY2XHU4MTc0XHU4MTgzXHU4MTg4XHU4MThhXHU4MTgwXHU4MTgyXHU4MWEwXHU4MTk1XHU4MWE0XHU4MWEzXHU4MTVmXHU4MTkzXHU4MWE5XHU4MWIwXHU4MWI1XHU4MWJlXHU4MWI4XHU4MWJkXHU4MWMwXHU4MWMyXHU4MWJhXHU4MWM5XHU4MWNkXHU4MWQxXHU4MWQ5XHU4''@;'; put 'put ''MWQ4XHU4MWM4XHU4MWRhXHU4MWRmXHU4MWUwXHU4MWU3XHU4MWZhXHU4MWZiXHU4MWZlXHU4MjAxXHU4MjAyXHU4MjA1XHU4MjA3XHU4MjBhXHU4MjBkXHU4MjEwXHU4MjE2XHU4MjI5XHU4MjJiXHU4MjM4XHU4MjMzXHU4MjQwXHU4MjU5XHU4MjU4XHU4MjVkXHU4MjVhXHU4MjVmXHU4MjY0''@;'; put 'put ''XHU4MjYyXHU4MjY4XHU4MjZhXHU4MjZiXHU4MjJlXHU4MjcxXHU4Mjc3XHU4Mjc4XHU4MjdlXHU4MjhkXHU4MjkyXHU4MmFiXHU4MjlmXHU4MmJiXHU4MmFjXHU4MmUxXHU4MmUzXHU4MmRmXHU4MmQyXHU4MmY0XHU4MmYzXHU4MmZhXHU4MzkzXHU4MzAzXHU4MmZiXHU4MmY5XHU4MmRlXHU4''@;'; put 'put ''MzA2XHU4MmRjXHU4MzA5XHU4MmQ5Il0sWyJlOGExIiwiXHU4MzM1XHU4MzM0XHU4MzE2XHU4MzMyXHU4MzMxXHU4MzQwXHU4MzM5XHU4MzUwXHU4MzQ1XHU4MzJmXHU4MzJiXHU4MzE3XHU4MzE4XHU4Mzg1XHU4MzlhXHU4M2FhXHU4MzlmXHU4M2EyXHU4Mzk2XHU4MzIzXHU4MzhlXHU4Mzg3''@;'; put 'put ''XHU4MzhhXHU4MzdjXHU4M2I1XHU4MzczXHU4Mzc1XHU4M2EwXHU4Mzg5XHU4M2E4XHU4M2Y0XHU4NDEzXHU4M2ViXHU4M2NlXHU4M2ZkXHU4NDAzXHU4M2Q4XHU4NDBiXHU4M2MxXHU4M2Y3XHU4NDA3XHU4M2UwXHU4M2YyXHU4NDBkXHU4NDIyXHU4NDIwXHU4M2JkXHU4NDM4XHU4NTA2XHU4''@;'; put 'put ''M2ZiXHU4NDZkXHU4NDJhXHU4NDNjXHU4NTVhXHU4NDg0XHU4NDc3XHU4NDZiXHU4NGFkXHU4NDZlXHU4NDgyXHU4NDY5XHU4NDQ2XHU4NDJjXHU4NDZmXHU4NDc5XHU4NDM1XHU4NGNhXHU4NDYyXHU4NGI5XHU4NGJmXHU4NDlmXHU4NGQ5XHU4NGNkXHU4NGJiXHU4NGRhXHU4NGQwXHU4NGMx''@;'; put 'put ''XHU4NGM2XHU4NGQ2XHU4NGExXHU4NTIxXHU4NGZmXHU4NGY0XHU4NTE3XHU4NTE4XHU4NTJjXHU4NTFmXHU4NTE1XHU4NTE0XHU4NGZjXHU4NTQwXHU4NTYzXHU4NTU4XHU4NTQ4Il0sWyJlOWExIiwiXHU4NTQxXHU4NjAyXHU4NTRiXHU4NTU1XHU4NTgwXHU4NWE0XHU4NTg4XHU4NTkxXHU4''@;'; put 'put ''NThhXHU4NWE4XHU4NTZkXHU4NTk0XHU4NTliXHU4NWVhXHU4NTg3XHU4NTljXHU4NTc3XHU4NTdlXHU4NTkwXHU4NWM5XHU4NWJhXHU4NWNmXHU4NWI5XHU4NWQwXHU4NWQ1XHU4NWRkXHU4NWU1XHU4NWRjXHU4NWY5XHU4NjBhXHU4NjEzXHU4NjBiXHU4NWZlXHU4NWZhXHU4NjA2XHU4NjIy''@;'; put 'put ''XHU4NjFhXHU4NjMwXHU4NjNmXHU4NjRkXHU0ZTU1XHU4NjU0XHU4NjVmXHU4NjY3XHU4NjcxXHU4NjkzXHU4NmEzXHU4NmE5XHU4NmFhXHU4NjhiXHU4NjhjXHU4NmI2XHU4NmFmXHU4NmM0XHU4NmM2XHU4NmIwXHU4NmM5XHU4ODIzXHU4NmFiXHU4NmQ0XHU4NmRlXHU4NmU5XHU4NmVjXHU4''@;'; put 'put ''NmRmXHU4NmRiXHU4NmVmXHU4NzEyXHU4NzA2XHU4NzA4XHU4NzAwXHU4NzAzXHU4NmZiXHU4NzExXHU4NzA5XHU4NzBkXHU4NmY5XHU4NzBhXHU4NzM0XHU4NzNmXHU4NzM3XHU4NzNiXHU4NzI1XHU4NzI5XHU4NzFhXHU4NzYwXHU4NzVmXHU4Nzc4XHU4NzRjXHU4NzRlXHU4Nzc0XHU4NzU3''@;'; put 'put ''XHU4NzY4XHU4NzZlXHU4NzU5Il0sWyJlYWExIiwiXHU4NzUzXHU4NzYzXHU4NzZhXHU4ODA1XHU4N2EyXHU4NzlmXHU4NzgyXHU4N2FmXHU4N2NiXHU4N2JkXHU4N2MwXHU4N2QwXHU5NmQ2XHU4N2FiXHU4N2M0XHU4N2IzXHU4N2M3XHU4N2M2XHU4N2JiXHU4N2VmXHU4N2YyXHU4N2UwXHU4''@;'; put 'put ''ODBmXHU4ODBkXHU4N2ZlXHU4N2Y2XHU4N2Y3XHU4ODBlXHU4N2QyXHU4ODExXHU4ODE2XHU4ODE1XHU4ODIyXHU4ODIxXHU4ODMxXHU4ODM2XHU4ODM5XHU4ODI3XHU4ODNiXHU4ODQ0XHU4ODQyXHU4ODUyXHU4ODU5XHU4ODVlXHU4ODYyXHU4ODZiXHU4ODgxXHU4ODdlXHU4ODllXHU4ODc1''@;'; put 'put ''XHU4ODdkXHU4OGI1XHU4ODcyXHU4ODgyXHU4ODk3XHU4ODkyXHU4OGFlXHU4ODk5XHU4OGEyXHU4ODhkXHU4OGE0XHU4OGIwXHU4OGJmXHU4OGIxXHU4OGMzXHU4OGM0XHU4OGQ0XHU4OGQ4XHU4OGQ5XHU4OGRkXHU4OGY5XHU4OTAyXHU4OGZjXHU4OGY0XHU4OGU4XHU4OGYyXHU4OTA0XHU4''@;'; put 'put ''OTBjXHU4OTBhXHU4OTEzXHU4OTQzXHU4OTFlXHU4OTI1XHU4OTJhXHU4OTJiXHU4OTQxXHU4OTQ0XHU4OTNiXHU4OTM2XHU4OTM4XHU4OTRjXHU4OTFkXHU4OTYwXHU4OTVlIl0sWyJlYmExIiwiXHU4OTY2XHU4OTY0XHU4OTZkXHU4OTZhXHU4OTZmXHU4OTc0XHU4OTc3XHU4OTdlXHU4OTgz''@;'; put 'put ''XHU4OTg4XHU4OThhXHU4OTkzXHU4OTk4XHU4OWExXHU4OWE5XHU4OWE2XHU4OWFjXHU4OWFmXHU4OWIyXHU4OWJhXHU4OWJkXHU4OWJmXHU4OWMwXHU4OWRhXHU4OWRjXHU4OWRkXHU4OWU3XHU4OWY0XHU4OWY4XHU4YTAzXHU4YTE2XHU4YTEwXHU4YTBjXHU4YTFiXHU4YTFkXHU4YTI1XHU4''@;'; put 'put ''YTM2XHU4YTQxXHU4YTViXHU4YTUyXHU4YTQ2XHU4YTQ4XHU4YTdjXHU4YTZkXHU4YTZjXHU4YTYyXHU4YTg1XHU4YTgyXHU4YTg0XHU4YWE4XHU4YWExXHU4YTkxXHU4YWE1XHU4YWE2XHU4YTlhXHU4YWEzXHU4YWM0XHU4YWNkXHU4YWMyXHU4YWRhXHU4YWViXHU4YWYzXHU4YWU3XHU4YWU0''@;'; put 'put ''XHU4YWYxXHU4YjE0XHU4YWUwXHU4YWUyXHU4YWY3XHU4YWRlXHU4YWRiXHU4YjBjXHU4YjA3XHU4YjFhXHU4YWUxXHU4YjE2XHU4YjEwXHU4YjE3XHU4YjIwXHU4YjMzXHU5N2FiXHU4YjI2XHU4YjJiXHU4YjNlXHU4YjI4XHU4YjQxXHU4YjRjXHU4YjRmXHU4YjRlXHU4YjQ5XHU4YjU2XHU4''@;'; put 'put ''YjViXHU4YjVhXHU4YjZiIl0sWyJlY2ExIiwiXHU4YjVmXHU4YjZjXHU4YjZmXHU4Yjc0XHU4YjdkXHU4YjgwXHU4YjhjXHU4YjhlXHU4YjkyXHU4YjkzXHU4Yjk2XHU4Yjk5XHU4YjlhXHU4YzNhXHU4YzQxXHU4YzNmXHU4YzQ4XHU4YzRjXHU4YzRlXHU4YzUwXHU4YzU1XHU4YzYyXHU4YzZj''@;'; put 'put ''XHU4Yzc4XHU4YzdhXHU4YzgyXHU4Yzg5XHU4Yzg1XHU4YzhhXHU4YzhkXHU4YzhlXHU4Yzk0XHU4YzdjXHU4Yzk4XHU2MjFkXHU4Y2FkXHU4Y2FhXHU4Y2JkXHU4Y2IyXHU4Y2IzXHU4Y2FlXHU4Y2I2XHU4Y2M4XHU4Y2MxXHU4Y2U0XHU4Y2UzXHU4Y2RhXHU4Y2ZkXHU4Y2ZhXHU4Y2ZiXHU4''@;'; put 'put ''ZDA0XHU4ZDA1XHU4ZDBhXHU4ZDA3XHU4ZDBmXHU4ZDBkXHU4ZDEwXHU5ZjRlXHU4ZDEzXHU4Y2NkXHU4ZDE0XHU4ZDE2XHU4ZDY3XHU4ZDZkXHU4ZDcxXHU4ZDczXHU4ZDgxXHU4ZDk5XHU4ZGMyXHU4ZGJlXHU4ZGJhXHU4ZGNmXHU4ZGRhXHU4ZGQ2XHU4ZGNjXHU4ZGRiXHU4ZGNiXHU4ZGVh''@;'; put 'put ''XHU4ZGViXHU4ZGRmXHU4ZGUzXHU4ZGZjXHU4ZTA4XHU4ZTA5XHU4ZGZmXHU4ZTFkXHU4ZTFlXHU4ZTEwXHU4ZTFmXHU4ZTQyXHU4ZTM1XHU4ZTMwXHU4ZTM0XHU4ZTRhIl0sWyJlZGExIiwiXHU4ZTQ3XHU4ZTQ5XHU4ZTRjXHU4ZTUwXHU4ZTQ4XHU4ZTU5XHU4ZTY0XHU4ZTYwXHU4ZTJhXHU4''@;'; put 'put ''ZTYzXHU4ZTU1XHU4ZTc2XHU4ZTcyXHU4ZTdjXHU4ZTgxXHU4ZTg3XHU4ZTg1XHU4ZTg0XHU4ZThiXHU4ZThhXHU4ZTkzXHU4ZTkxXHU4ZTk0XHU4ZTk5XHU4ZWFhXHU4ZWExXHU4ZWFjXHU4ZWIwXHU4ZWM2XHU4ZWIxXHU4ZWJlXHU4ZWM1XHU4ZWM4XHU4ZWNiXHU4ZWRiXHU4ZWUzXHU4ZWZj''@;'; put 'put ''XHU4ZWZiXHU4ZWViXHU4ZWZlXHU4ZjBhXHU4ZjA1XHU4ZjE1XHU4ZjEyXHU4ZjE5XHU4ZjEzXHU4ZjFjXHU4ZjFmXHU4ZjFiXHU4ZjBjXHU4ZjI2XHU4ZjMzXHU4ZjNiXHU4ZjM5XHU4ZjQ1XHU4ZjQyXHU4ZjNlXHU4ZjRjXHU4ZjQ5XHU4ZjQ2XHU4ZjRlXHU4ZjU3XHU4ZjVjXHU4ZjYyXHU4''@;'; put 'put ''ZjYzXHU4ZjY0XHU4ZjljXHU4ZjlmXHU4ZmEzXHU4ZmFkXHU4ZmFmXHU4ZmI3XHU4ZmRhXHU4ZmU1XHU4ZmUyXHU4ZmVhXHU4ZmVmXHU5MDg3XHU4ZmY0XHU5MDA1XHU4ZmY5XHU4ZmZhXHU5MDExXHU5MDE1XHU5MDIxXHU5MDBkXHU5MDFlXHU5MDE2XHU5MDBiXHU5MDI3XHU5MDM2XHU5MDM1''@;'; put 'put ''XHU5MDM5XHU4ZmY4Il0sWyJlZWExIiwiXHU5MDRmXHU5MDUwXHU5MDUxXHU5MDUyXHU5MDBlXHU5MDQ5XHU5MDNlXHU5MDU2XHU5MDU4XHU5MDVlXHU5MDY4XHU5MDZmXHU5MDc2XHU5NmE4XHU5MDcyXHU5MDgyXHU5MDdkXHU5MDgxXHU5MDgwXHU5MDhhXHU5MDg5XHU5MDhmXHU5MGE4XHU5''@;'; put 'put ''MGFmXHU5MGIxXHU5MGI1XHU5MGUyXHU5MGU0XHU2MjQ4XHU5MGRiXHU5MTAyXHU5MTEyXHU5MTE5XHU5MTMyXHU5MTMwXHU5MTRhXHU5MTU2XHU5MTU4XHU5MTYzXHU5MTY1XHU5MTY5XHU5MTczXHU5MTcyXHU5MThiXHU5MTg5XHU5MTgyXHU5MWEyXHU5MWFiXHU5MWFmXHU5MWFhXHU5MWI1''@;'; put 'put ''XHU5MWI0XHU5MWJhXHU5MWMwXHU5MWMxXHU5MWM5XHU5MWNiXHU5MWQwXHU5MWQ2XHU5MWRmXHU5MWUxXHU5MWRiXHU5MWZjXHU5MWY1XHU5MWY2XHU5MjFlXHU5MWZmXHU5MjE0XHU5MjJjXHU5MjE1XHU5MjExXHU5MjVlXHU5MjU3XHU5MjQ1XHU5MjQ5XHU5MjY0XHU5MjQ4XHU5Mjk1XHU5''@;'; put 'put ''MjNmXHU5MjRiXHU5MjUwXHU5MjljXHU5Mjk2XHU5MjkzXHU5MjliXHU5MjVhXHU5MmNmXHU5MmI5XHU5MmI3XHU5MmU5XHU5MzBmXHU5MmZhXHU5MzQ0XHU5MzJlIl0sWyJlZmExIiwiXHU5MzE5XHU5MzIyXHU5MzFhXHU5MzIzXHU5MzNhXHU5MzM1XHU5MzNiXHU5MzVjXHU5MzYwXHU5Mzdj''@;'; put 'put ''XHU5MzZlXHU5MzU2XHU5M2IwXHU5M2FjXHU5M2FkXHU5Mzk0XHU5M2I5XHU5M2Q2XHU5M2Q3XHU5M2U4XHU5M2U1XHU5M2Q4XHU5M2MzXHU5M2RkXHU5M2QwXHU5M2M4XHU5M2U0XHU5NDFhXHU5NDE0XHU5NDEzXHU5NDAzXHU5NDA3XHU5NDEwXHU5NDM2XHU5NDJiXHU5NDM1XHU5NDIxXHU5''@;'; put 'put ''NDNhXHU5NDQxXHU5NDUyXHU5NDQ0XHU5NDViXHU5NDYwXHU5NDYyXHU5NDVlXHU5NDZhXHU5MjI5XHU5NDcwXHU5NDc1XHU5NDc3XHU5NDdkXHU5NDVhXHU5NDdjXHU5NDdlXHU5NDgxXHU5NDdmXHU5NTgyXHU5NTg3XHU5NThhXHU5NTk0XHU5NTk2XHU5NTk4XHU5NTk5XHU5NWEwXHU5NWE4''@;'; put 'put ''XHU5NWE3XHU5NWFkXHU5NWJjXHU5NWJiXHU5NWI5XHU5NWJlXHU5NWNhXHU2ZmY2XHU5NWMzXHU5NWNkXHU5NWNjXHU5NWQ1XHU5NWQ0XHU5NWQ2XHU5NWRjXHU5NWUxXHU5NWU1XHU5NWUyXHU5NjIxXHU5NjI4XHU5NjJlXHU5NjJmXHU5NjQyXHU5NjRjXHU5NjRmXHU5NjRiXHU5Njc3XHU5''@;'; put 'put ''NjVjXHU5NjVlIl0sWyJmMGExIiwiXHU5NjVkXHU5NjVmXHU5NjY2XHU5NjcyXHU5NjZjXHU5NjhkXHU5Njk4XHU5Njk1XHU5Njk3XHU5NmFhXHU5NmE3XHU5NmIxXHU5NmIyXHU5NmIwXHU5NmI0XHU5NmI2XHU5NmI4XHU5NmI5XHU5NmNlXHU5NmNiXHU5NmM5XHU5NmNkXHU4OTRkXHU5NmRj''@;'; put 'put ''XHU5NzBkXHU5NmQ1XHU5NmY5XHU5NzA0XHU5NzA2XHU5NzA4XHU5NzEzXHU5NzBlXHU5NzExXHU5NzBmXHU5NzE2XHU5NzE5XHU5NzI0XHU5NzJhXHU5NzMwXHU5NzM5XHU5NzNkXHU5NzNlXHU5NzQ0XHU5NzQ2XHU5NzQ4XHU5NzQyXHU5NzQ5XHU5NzVjXHU5NzYwXHU5NzY0XHU5NzY2XHU5''@;'; put 'put ''NzY4XHU1MmQyXHU5NzZiXHU5NzcxXHU5Nzc5XHU5Nzg1XHU5NzdjXHU5NzgxXHU5NzdhXHU5Nzg2XHU5NzhiXHU5NzhmXHU5NzkwXHU5NzljXHU5N2E4XHU5N2E2XHU5N2EzXHU5N2IzXHU5N2I0XHU5N2MzXHU5N2M2XHU5N2M4XHU5N2NiXHU5N2RjXHU5N2VkXHU5ZjRmXHU5N2YyXHU3YWRm''@;'; put 'put ''XHU5N2Y2XHU5N2Y1XHU5ODBmXHU5ODBjXHU5ODM4XHU5ODI0XHU5ODIxXHU5ODM3XHU5ODNkXHU5ODQ2XHU5ODRmXHU5ODRiXHU5ODZiXHU5ODZmXHU5ODcwIl0sWyJmMWExIiwiXHU5ODcxXHU5ODc0XHU5ODczXHU5OGFhXHU5OGFmXHU5OGIxXHU5OGI2XHU5OGM0XHU5OGMzXHU5OGM2XHU5''@;'; put 'put ''OGU5XHU5OGViXHU5OTAzXHU5OTA5XHU5OTEyXHU5OTE0XHU5OTE4XHU5OTIxXHU5OTFkXHU5OTFlXHU5OTI0XHU5OTIwXHU5OTJjXHU5OTJlXHU5OTNkXHU5OTNlXHU5OTQyXHU5OTQ5XHU5OTQ1XHU5OTUwXHU5OTRiXHU5OTUxXHU5OTUyXHU5OTRjXHU5OTU1XHU5OTk3XHU5OTk4XHU5OWE1''@;'; put 'put ''XHU5OWFkXHU5OWFlXHU5OWJjXHU5OWRmXHU5OWRiXHU5OWRkXHU5OWQ4XHU5OWQxXHU5OWVkXHU5OWVlXHU5OWYxXHU5OWYyXHU5OWZiXHU5OWY4XHU5YTAxXHU5YTBmXHU5YTA1XHU5OWUyXHU5YTE5XHU5YTJiXHU5YTM3XHU5YTQ1XHU5YTQyXHU5YTQwXHU5YTQzXHU5YTNlXHU5YTU1XHU5''@;'; put 'put ''YTRkXHU5YTViXHU5YTU3XHU5YTVmXHU5YTYyXHU5YTY1XHU5YTY0XHU5YTY5XHU5YTZiXHU5YTZhXHU5YWFkXHU5YWIwXHU5YWJjXHU5YWMwXHU5YWNmXHU5YWQxXHU5YWQzXHU5YWQ0XHU5YWRlXHU5YWRmXHU5YWUyXHU5YWUzXHU5YWU2XHU5YWVmXHU5YWViXHU5YWVlXHU5YWY0XHU5YWYx''@;'; put 'put ''XHU5YWY3Il0sWyJmMmExIiwiXHU5YWZiXHU5YjA2XHU5YjE4XHU5YjFhXHU5YjFmXHU5YjIyXHU5YjIzXHU5YjI1XHU5YjI3XHU5YjI4XHU5YjI5XHU5YjJhXHU5YjJlXHU5YjJmXHU5YjMyXHU5YjQ0XHU5YjQzXHU5YjRmXHU5YjRkXHU5YjRlXHU5YjUxXHU5YjU4XHU5Yjc0XHU5YjkzXHU5''@;'; put 'put ''YjgzXHU5YjkxXHU5Yjk2XHU5Yjk3XHU5YjlmXHU5YmEwXHU5YmE4XHU5YmI0XHU5YmMwXHU5YmNhXHU5YmI5XHU5YmM2XHU5YmNmXHU5YmQxXHU5YmQyXHU5YmUzXHU5YmUyXHU5YmU0XHU5YmQ0XHU5YmUxXHU5YzNhXHU5YmYyXHU5YmYxXHU5YmYwXHU5YzE1XHU5YzE0XHU5YzA5XHU5YzEz''@;'; put 'put ''XHU5YzBjXHU5YzA2XHU5YzA4XHU5YzEyXHU5YzBhXHU5YzA0XHU5YzJlXHU5YzFiXHU5YzI1XHU5YzI0XHU5YzIxXHU5YzMwXHU5YzQ3XHU5YzMyXHU5YzQ2XHU5YzNlXHU5YzVhXHU5YzYwXHU5YzY3XHU5Yzc2XHU5Yzc4XHU5Y2U3XHU5Y2VjXHU5Y2YwXHU5ZDA5XHU5ZDA4XHU5Y2ViXHU5''@;'; put 'put ''ZDAzXHU5ZDA2XHU5ZDJhXHU5ZDI2XHU5ZGFmXHU5ZDIzXHU5ZDFmXHU5ZDQ0XHU5ZDE1XHU5ZDEyXHU5ZDQxXHU5ZDNmXHU5ZDNlXHU5ZDQ2XHU5ZDQ4Il0sWyJmM2ExIiwiXHU5ZDVkXHU5ZDVlXHU5ZDY0XHU5ZDUxXHU5ZDUwXHU5ZDU5XHU5ZDcyXHU5ZDg5XHU5ZDg3XHU5ZGFiXHU5ZDZm''@;'; put 'put ''XHU5ZDdhXHU5ZDlhXHU5ZGE0XHU5ZGE5XHU5ZGIyXHU5ZGM0XHU5ZGMxXHU5ZGJiXHU5ZGI4XHU5ZGJhXHU5ZGM2XHU5ZGNmXHU5ZGMyXHU5ZGQ5XHU5ZGQzXHU5ZGY4XHU5ZGU2XHU5ZGVkXHU5ZGVmXHU5ZGZkXHU5ZTFhXHU5ZTFiXHU5ZTFlXHU5ZTc1XHU5ZTc5XHU5ZTdkXHU5ZTgxXHU5''@;'; put 'put ''ZTg4XHU5ZThiXHU5ZThjXHU5ZTkyXHU5ZTk1XHU5ZTkxXHU5ZTlkXHU5ZWE1XHU5ZWE5XHU5ZWI4XHU5ZWFhXHU5ZWFkXHU5NzYxXHU5ZWNjXHU5ZWNlXHU5ZWNmXHU5ZWQwXHU5ZWQ0XHU5ZWRjXHU5ZWRlXHU5ZWRkXHU5ZWUwXHU5ZWU1XHU5ZWU4XHU5ZWVmXHU5ZWY0XHU5ZWY2XHU5ZWY3''@;'; put 'put ''XHU5ZWY5XHU5ZWZiXHU5ZWZjXHU5ZWZkXHU5ZjA3XHU5ZjA4XHU3NmI3XHU5ZjE1XHU5ZjIxXHU5ZjJjXHU5ZjNlXHU5ZjRhXHU5ZjUyXHU5ZjU0XHU5ZjYzXHU5ZjVmXHU5ZjYwXHU5ZjYxXHU5ZjY2XHU5ZjY3XHU5ZjZjXHU5ZjZhXHU5Zjc3XHU5ZjcyXHU5Zjc2XHU5Zjk1XHU5ZjljXHU5''@;'; put 'put ''ZmEwIl0sWyJmNGExIiwiXHU1ODJmXHU2OWM3XHU5MDU5XHU3NDY0XHU1MWRjXHU3MTk5Il0sWyJmOWExIiwiXHU3ZThhXHU4OTFjXHU5MzQ4XHU5Mjg4XHU4NGRjXHU0ZmM5XHU3MGJiXHU2NjMxXHU2OGM4XHU5MmY5XHU2NmZiXHU1ZjQ1XHU0ZTI4XHU0ZWUxXHU0ZWZjXHU0ZjAwXHU0ZjAz''@;'; put 'put ''XHU0ZjM5XHU0ZjU2XHU0ZjkyXHU0ZjhhXHU0ZjlhXHU0Zjk0XHU0ZmNkXHU1MDQwXHU1MDIyXHU0ZmZmXHU1MDFlXHU1MDQ2XHU1MDcwXHU1MDQyXHU1MDk0XHU1MGY0XHU1MGQ4XHU1MTRhXHU1MTY0XHU1MTlkXHU1MWJlXHU1MWVjXHU1MjE1XHU1MjljXHU1MmE2XHU1MmMwXHU1MmRiXHU1''@;'; put 'put ''MzAwXHU1MzA3XHU1MzI0XHU1MzcyXHU1MzkzXHU1M2IyXHU1M2RkXHVmYTBlXHU1NDljXHU1NDhhXHU1NGE5XHU1NGZmXHU1NTg2XHU1NzU5XHU1NzY1XHU1N2FjXHU1N2M4XHU1N2M3XHVmYTBmXHVmYTEwXHU1ODllXHU1OGIyXHU1OTBiXHU1OTUzXHU1OTViXHU1OTVkXHU1OTYzXHU1OWE0''@;'; put 'put ''XHU1OWJhXHU1YjU2XHU1YmMwXHU3NTJmXHU1YmQ4XHU1YmVjXHU1YzFlXHU1Y2E2XHU1Y2JhXHU1Y2Y1XHU1ZDI3XHU1ZDUzXHVmYTExXHU1ZDQyXHU1ZDZkXHU1ZGI4XHU1ZGI5XHU1ZGQwXHU1ZjIxXHU1ZjM0XHU1ZjY3XHU1ZmI3Il0sWyJmYWExIiwiXHU1ZmRlXHU2MDVkXHU2MDg1XHU2''@;'; put 'put ''MDhhXHU2MGRlXHU2MGQ1XHU2MTIwXHU2MGYyXHU2MTExXHU2MTM3XHU2MTMwXHU2MTk4XHU2MjEzXHU2MmE2XHU2M2Y1XHU2NDYwXHU2NDlkXHU2NGNlXHU2NTRlXHU2NjAwXHU2NjE1XHU2NjNiXHU2NjA5XHU2NjJlXHU2NjFlXHU2NjI0XHU2NjY1XHU2NjU3XHU2NjU5XHVmYTEyXHU2Njcz''@;'; put 'put ''XHU2Njk5XHU2NmEwXHU2NmIyXHU2NmJmXHU2NmZhXHU2NzBlXHVmOTI5XHU2NzY2XHU2N2JiXHU2ODUyXHU2N2MwXHU2ODAxXHU2ODQ0XHU2OGNmXHVmYTEzXHU2OTY4XHVmYTE0XHU2OTk4XHU2OWUyXHU2YTMwXHU2YTZiXHU2YTQ2XHU2YTczXHU2YTdlXHU2YWUyXHU2YWU0XHU2YmQ2XHU2''@;'; put 'put ''YzNmXHU2YzVjXHU2Yzg2XHU2YzZmXHU2Y2RhXHU2ZDA0XHU2ZDg3XHU2ZDZmXHU2ZDk2XHU2ZGFjXHU2ZGNmXHU2ZGY4XHU2ZGYyXHU2ZGZjXHU2ZTM5XHU2ZTVjXHU2ZTI3XHU2ZTNjXHU2ZWJmXHU2Zjg4XHU2ZmI1XHU2ZmY1XHU3MDA1XHU3MDA3XHU3MDI4XHU3MDg1XHU3MGFiXHU3MTBm''@;'; put 'put ''XHU3MTA0XHU3MTVjXHU3MTQ2XHU3MTQ3XHVmYTE1XHU3MWMxXHU3MWZlXHU3MmIxIl0sWyJmYmExIiwiXHU3MmJlXHU3MzI0XHVmYTE2XHU3Mzc3XHU3M2JkXHU3M2M5XHU3M2Q2XHU3M2UzXHU3M2QyXHU3NDA3XHU3M2Y1XHU3NDI2XHU3NDJhXHU3NDI5XHU3NDJlXHU3NDYyXHU3NDg5XHU3''@;'; put 'put ''NDlmXHU3NTAxXHU3NTZmXHU3NjgyXHU3NjljXHU3NjllXHU3NjliXHU3NmE2XHVmYTE3XHU3NzQ2XHU1MmFmXHU3ODIxXHU3ODRlXHU3ODY0XHU3ODdhXHU3OTMwXHVmYTE4XHVmYTE5XHVmYTFhXHU3OTk0XHVmYTFiXHU3OTliXHU3YWQxXHU3YWU3XHVmYTFjXHU3YWViXHU3YjllXHVmYTFk''@;'; put 'put ''XHU3ZDQ4XHU3ZDVjXHU3ZGI3XHU3ZGEwXHU3ZGQ2XHU3ZTUyXHU3ZjQ3XHU3ZmExXHVmYTFlXHU4MzAxXHU4MzYyXHU4MzdmXHU4M2M3XHU4M2Y2XHU4NDQ4XHU4NGI0XHU4NTUzXHU4NTU5XHU4NTZiXHVmYTFmXHU4NWIwXHVmYTIwXHVmYTIxXHU4ODA3XHU4OGY1XHU4YTEyXHU4YTM3XHU4''@;'; put 'put ''YTc5XHU4YWE3XHU4YWJlXHU4YWRmXHVmYTIyXHU4YWY2XHU4YjUzXHU4YjdmXHU4Y2YwXHU4Y2Y0XHU4ZDEyXHU4ZDc2XHVmYTIzXHU4ZWNmXHVmYTI0XHVmYTI1XHU5MDY3XHU5MGRlXHVmYTI2XHU5MTE1XHU5MTI3XHU5MWRhIl0sWyJmY2ExIiwiXHU5MWQ3XHU5MWRlXHU5MWVkXHU5MWVl''@;'; put 'put ''XHU5MWU0XHU5MWU1XHU5MjA2XHU5MjEwXHU5MjBhXHU5MjNhXHU5MjQwXHU5MjNjXHU5MjRlXHU5MjU5XHU5MjUxXHU5MjM5XHU5MjY3XHU5MmE3XHU5Mjc3XHU5Mjc4XHU5MmU3XHU5MmQ3XHU5MmQ5XHU5MmQwXHVmYTI3XHU5MmQ1XHU5MmUwXHU5MmQzXHU5MzI1XHU5MzIxXHU5MmZiXHVm''@;'; put 'put ''YTI4XHU5MzFlXHU5MmZmXHU5MzFkXHU5MzAyXHU5MzcwXHU5MzU3XHU5M2E0XHU5M2M2XHU5M2RlXHU5M2Y4XHU5NDMxXHU5NDQ1XHU5NDQ4XHU5NTkyXHVmOWRjXHVmYTI5XHU5NjlkXHU5NmFmXHU5NzMzXHU5NzNiXHU5NzQzXHU5NzRkXHU5NzRmXHU5NzUxXHU5NzU1XHU5ODU3XHU5ODY1''@;'; put 'put ''XHVmYTJhXHVmYTJiXHU5OTI3XHVmYTJjXHU5OTllXHU5YTRlXHU5YWQ5XHU5YWRjXHU5Yjc1XHU5YjcyXHU5YjhmXHU5YmIxXHU5YmJiXHU5YzAwXHU5ZDcwXHU5ZDZiXHVmYTJkXHU5ZTE5XHU5ZWQxIl0sWyJmY2YxIiwiXHUyMTcwIiw5LCJcdWZmZTJcdWZmZTRcdWZmMDdcdWZmMDIiXSxb''@;'; put 'put ''IjhmYTJhZiIsIlx1MDJkOFx1MDJjN1x4YjhcdTAyZDlcdTAyZGRceGFmXHUwMmRiXHUwMmRhXHVmZjVlXHUwMzg0XHUwMzg1Il0sWyI4ZmEyYzIiLCJceGExXHhhNlx4YmYiXSxbIjhmYTJlYiIsIlx4YmFceGFhXHhhOVx4YWVcdTIxMjJceGE0XHUyMTE2Il0sWyI4ZmE2ZTEiLCJcdTAzODZc''@;'; put 'put ''dTAzODhcdTAzODlcdTAzOGFcdTAzYWEiXSxbIjhmYTZlNyIsIlx1MDM4YyJdLFsiOGZhNmU5IiwiXHUwMzhlXHUwM2FiIl0sWyI4ZmE2ZWMiLCJcdTAzOGYiXSxbIjhmYTZmMSIsIlx1MDNhY1x1MDNhZFx1MDNhZVx1MDNhZlx1MDNjYVx1MDM5MFx1MDNjY1x1MDNjMlx1MDNjZFx1MDNjYlx1''@;'; put 'put ''MDNiMFx1MDNjZSJdLFsiOGZhN2MyIiwiXHUwNDAyIiwxMCwiXHUwNDBlXHUwNDBmIl0sWyI4ZmE3ZjIiLCJcdTA0NTIiLDEwLCJcdTA0NWVcdTA0NWYiXSxbIjhmYTlhMSIsIlx4YzZcdTAxMTAiXSxbIjhmYTlhNCIsIlx1MDEyNiJdLFsiOGZhOWE2IiwiXHUwMTMyIl0sWyI4ZmE5YTgiLCJc''@;'; put 'put ''dTAxNDFcdTAxM2YiXSxbIjhmYTlhYiIsIlx1MDE0YVx4ZDhcdTAxNTIiXSxbIjhmYTlhZiIsIlx1MDE2Nlx4ZGUiXSxbIjhmYTljMSIsIlx4ZTZcdTAxMTFceGYwXHUwMTI3XHUwMTMxXHUwMTMzXHUwMTM4XHUwMTQyXHUwMTQwXHUwMTQ5XHUwMTRiXHhmOFx1MDE1M1x4ZGZcdTAxNjdceGZl''@;'; put 'put ''Il0sWyI4ZmFhYTEiLCJceGMxXHhjMFx4YzRceGMyXHUwMTAyXHUwMWNkXHUwMTAwXHUwMTA0XHhjNVx4YzNcdTAxMDZcdTAxMDhcdTAxMGNceGM3XHUwMTBhXHUwMTBlXHhjOVx4YzhceGNiXHhjYVx1MDExYVx1MDExNlx1MDExMlx1MDExOCJdLFsiOGZhYWJhIiwiXHUwMTFjXHUwMTFlXHUw''@;'; put 'put ''MTIyXHUwMTIwXHUwMTI0XHhjZFx4Y2NceGNmXHhjZVx1MDFjZlx1MDEzMFx1MDEyYVx1MDEyZVx1MDEyOFx1MDEzNFx1MDEzNlx1MDEzOVx1MDEzZFx1MDEzYlx1MDE0M1x1MDE0N1x1MDE0NVx4ZDFceGQzXHhkMlx4ZDZceGQ0XHUwMWQxXHUwMTUwXHUwMTRjXHhkNVx1MDE1NFx1MDE1OFx1''@;'; put 'put ''MDE1Nlx1MDE1YVx1MDE1Y1x1MDE2MFx1MDE1ZVx1MDE2NFx1MDE2Mlx4ZGFceGQ5XHhkY1x4ZGJcdTAxNmNcdTAxZDNcdTAxNzBcdTAxNmFcdTAxNzJcdTAxNmVcdTAxNjhcdTAxZDdcdTAxZGJcdTAxZDlcdTAxZDVcdTAxNzRceGRkXHUwMTc4XHUwMTc2XHUwMTc5XHUwMTdkXHUwMTdiIl0s''@;'; put 'put ''WyI4ZmFiYTEiLCJceGUxXHhlMFx4ZTRceGUyXHUwMTAzXHUwMWNlXHUwMTAxXHUwMTA1XHhlNVx4ZTNcdTAxMDdcdTAxMDlcdTAxMGRceGU3XHUwMTBiXHUwMTBmXHhlOVx4ZThceGViXHhlYVx1MDExYlx1MDExN1x1MDExM1x1MDExOVx1MDFmNVx1MDExZFx1MDExZiJdLFsiOGZhYmJkIiwi''@;'; put 'put ''XHUwMTIxXHUwMTI1XHhlZFx4ZWNceGVmXHhlZVx1MDFkMCJdLFsiOGZhYmM1IiwiXHUwMTJiXHUwMTJmXHUwMTI5XHUwMTM1XHUwMTM3XHUwMTNhXHUwMTNlXHUwMTNjXHUwMTQ0XHUwMTQ4XHUwMTQ2XHhmMVx4ZjNceGYyXHhmNlx4ZjRcdTAxZDJcdTAxNTFcdTAxNGRceGY1XHUwMTU1XHUw''@;'; put 'put ''MTU5XHUwMTU3XHUwMTViXHUwMTVkXHUwMTYxXHUwMTVmXHUwMTY1XHUwMTYzXHhmYVx4ZjlceGZjXHhmYlx1MDE2ZFx1MDFkNFx1MDE3MVx1MDE2Ylx1MDE3M1x1MDE2Zlx1MDE2OVx1MDFkOFx1MDFkY1x1MDFkYVx1MDFkNlx1MDE3NVx4ZmRceGZmXHUwMTc3XHUwMTdhXHUwMTdlXHUwMTdj''@;'; put 'put ''Il0sWyI4ZmIwYTEiLCJcdTRlMDJcdTRlMDRcdTRlMDVcdTRlMGNcdTRlMTJcdTRlMWZcdTRlMjNcdTRlMjRcdTRlMjhcdTRlMmJcdTRlMmVcdTRlMmZcdTRlMzBcdTRlMzVcdTRlNDBcdTRlNDFcdTRlNDRcdTRlNDdcdTRlNTFcdTRlNWFcdTRlNWNcdTRlNjNcdTRlNjhcdTRlNjlcdTRlNzRc''@;'; put 'put ''dTRlNzVcdTRlNzlcdTRlN2ZcdTRlOGRcdTRlOTZcdTRlOTdcdTRlOWRcdTRlYWZcdTRlYjlcdTRlYzNcdTRlZDBcdTRlZGFcdTRlZGJcdTRlZTBcdTRlZTFcdTRlZTJcdTRlZThcdTRlZWZcdTRlZjFcdTRlZjNcdTRlZjVcdTRlZmRcdTRlZmVcdTRlZmZcdTRmMDBcdTRmMDJcdTRmMDNcdTRm''@;'; put 'put ''MDhcdTRmMGJcdTRmMGNcdTRmMTJcdTRmMTVcdTRmMTZcdTRmMTdcdTRmMTlcdTRmMmVcdTRmMzFcdTRmNjBcdTRmMzNcdTRmMzVcdTRmMzdcdTRmMzlcdTRmM2JcdTRmM2VcdTRmNDBcdTRmNDJcdTRmNDhcdTRmNDlcdTRmNGJcdTRmNGNcdTRmNTJcdTRmNTRcdTRmNTZcdTRmNThcdTRmNWZc''@;'; put 'put ''dTRmNjNcdTRmNmFcdTRmNmNcdTRmNmVcdTRmNzFcdTRmNzdcdTRmNzhcdTRmNzlcdTRmN2FcdTRmN2RcdTRmN2VcdTRmODFcdTRmODJcdTRmODQiXSxbIjhmYjFhMSIsIlx1NGY4NVx1NGY4OVx1NGY4YVx1NGY4Y1x1NGY4ZVx1NGY5MFx1NGY5Mlx1NGY5M1x1NGY5NFx1NGY5N1x1NGY5OVx1''@;'; put 'put ''NGY5YVx1NGY5ZVx1NGY5Zlx1NGZiMlx1NGZiN1x1NGZiOVx1NGZiYlx1NGZiY1x1NGZiZFx1NGZiZVx1NGZjMFx1NGZjMVx1NGZjNVx1NGZjNlx1NGZjOFx1NGZjOVx1NGZjYlx1NGZjY1x1NGZjZFx1NGZjZlx1NGZkMlx1NGZkY1x1NGZlMFx1NGZlMlx1NGZmMFx1NGZmMlx1NGZmY1x1NGZm''@;'; put 'put ''ZFx1NGZmZlx1NTAwMFx1NTAwMVx1NTAwNFx1NTAwN1x1NTAwYVx1NTAwY1x1NTAwZVx1NTAxMFx1NTAxM1x1NTAxN1x1NTAxOFx1NTAxYlx1NTAxY1x1NTAxZFx1NTAxZVx1NTAyMlx1NTAyN1x1NTAyZVx1NTAzMFx1NTAzMlx1NTAzM1x1NTAzNVx1NTA0MFx1NTA0MVx1NTA0Mlx1NTA0NVx1''@;'; put 'put ''NTA0Nlx1NTA0YVx1NTA0Y1x1NTA0ZVx1NTA1MVx1NTA1Mlx1NTA1M1x1NTA1N1x1NTA1OVx1NTA1Zlx1NTA2MFx1NTA2Mlx1NTA2M1x1NTA2Nlx1NTA2N1x1NTA2YVx1NTA2ZFx1NTA3MFx1NTA3MVx1NTAzYlx1NTA4MVx1NTA4M1x1NTA4NFx1NTA4Nlx1NTA4YVx1NTA4ZVx1NTA4Zlx1NTA5''@;'; put 'put ''MCJdLFsiOGZiMmExIiwiXHU1MDkyXHU1MDkzXHU1MDk0XHU1MDk2XHU1MDliXHU1MDljXHU1MDllIiw0LCJcdTUwYWFcdTUwYWZcdTUwYjBcdTUwYjlcdTUwYmFcdTUwYmRcdTUwYzBcdTUwYzNcdTUwYzRcdTUwYzdcdTUwY2NcdTUwY2VcdTUwZDBcdTUwZDNcdTUwZDRcdTUwZDhcdTUwZGNc''@;'; put 'put ''dTUwZGRcdTUwZGZcdTUwZTJcdTUwZTRcdTUwZTZcdTUwZThcdTUwZTlcdTUwZWZcdTUwZjFcdTUwZjZcdTUwZmFcdTUwZmVcdTUxMDNcdTUxMDZcdTUxMDdcdTUxMDhcdTUxMGJcdTUxMGNcdTUxMGRcdTUxMGVcdTUwZjJcdTUxMTBcdTUxMTdcdTUxMTlcdTUxMWJcdTUxMWNcdTUxMWRcdTUx''@;'; put 'put ''MWVcdTUxMjNcdTUxMjdcdTUxMjhcdTUxMmNcdTUxMmRcdTUxMmZcdTUxMzFcdTUxMzNcdTUxMzRcdTUxMzVcdTUxMzhcdTUxMzlcdTUxNDJcdTUxNGFcdTUxNGZcdTUxNTNcdTUxNTVcdTUxNTdcdTUxNThcdTUxNWZcdTUxNjRcdTUxNjZcdTUxN2VcdTUxODNcdTUxODRcdTUxOGJcdTUxOGVc''@;'; put 'put ''dTUxOThcdTUxOWRcdTUxYTFcdTUxYTNcdTUxYWRcdTUxYjhcdTUxYmFcdTUxYmNcdTUxYmVcdTUxYmZcdTUxYzIiXSxbIjhmYjNhMSIsIlx1NTFjOFx1NTFjZlx1NTFkMVx1NTFkMlx1NTFkM1x1NTFkNVx1NTFkOFx1NTFkZVx1NTFlMlx1NTFlNVx1NTFlZVx1NTFmMlx1NTFmM1x1NTFmNFx1''@;'; put 'put ''NTFmN1x1NTIwMVx1NTIwMlx1NTIwNVx1NTIxMlx1NTIxM1x1NTIxNVx1NTIxNlx1NTIxOFx1NTIyMlx1NTIyOFx1NTIzMVx1NTIzMlx1NTIzNVx1NTIzY1x1NTI0NVx1NTI0OVx1NTI1NVx1NTI1N1x1NTI1OFx1NTI1YVx1NTI1Y1x1NTI1Zlx1NTI2MFx1NTI2MVx1NTI2Nlx1NTI2ZVx1NTI3''@;'; put 'put ''N1x1NTI3OFx1NTI3OVx1NTI4MFx1NTI4Mlx1NTI4NVx1NTI4YVx1NTI4Y1x1NTI5M1x1NTI5NVx1NTI5Nlx1NTI5N1x1NTI5OFx1NTI5YVx1NTI5Y1x1NTJhNFx1NTJhNVx1NTJhNlx1NTJhN1x1NTJhZlx1NTJiMFx1NTJiNlx1NTJiN1x1NTJiOFx1NTJiYVx1NTJiYlx1NTJiZFx1NTJjMFx1''@;'; put 'put ''NTJjNFx1NTJjNlx1NTJjOFx1NTJjY1x1NTJjZlx1NTJkMVx1NTJkNFx1NTJkNlx1NTJkYlx1NTJkY1x1NTJlMVx1NTJlNVx1NTJlOFx1NTJlOVx1NTJlYVx1NTJlY1x1NTJmMFx1NTJmMVx1NTJmNFx1NTJmNlx1NTJmN1x1NTMwMFx1NTMwM1x1NTMwYVx1NTMwYiJdLFsiOGZiNGExIiwiXHU1''@;'; put 'put ''MzBjXHU1MzExXHU1MzEzXHU1MzE4XHU1MzFiXHU1MzFjXHU1MzFlXHU1MzFmXHU1MzI1XHU1MzI3XHU1MzI4XHU1MzI5XHU1MzJiXHU1MzJjXHU1MzJkXHU1MzMwXHU1MzMyXHU1MzM1XHU1MzNjXHU1MzNkXHU1MzNlXHU1MzQyXHU1MzRjXHU1MzRiXHU1MzU5XHU1MzViXHU1MzYxXHU1MzYz''@;'; put 'put ''XHU1MzY1XHU1MzZjXHU1MzZkXHU1MzcyXHU1Mzc5XHU1MzdlXHU1MzgzXHU1Mzg3XHU1Mzg4XHU1MzhlXHU1MzkzXHU1Mzk0XHU1Mzk5XHU1MzlkXHU1M2ExXHU1M2E0XHU1M2FhXHU1M2FiXHU1M2FmXHU1M2IyXHU1M2I0XHU1M2I1XHU1M2I3XHU1M2I4XHU1M2JhXHU1M2JkXHU1M2MwXHU1''@;'; put 'put ''M2M1XHU1M2NmXHU1M2QyXHU1M2QzXHU1M2Q1XHU1M2RhXHU1M2RkXHU1M2RlXHU1M2UwXHU1M2U2XHU1M2U3XHU1M2Y1XHU1NDAyXHU1NDEzXHU1NDFhXHU1NDIxXHU1NDI3XHU1NDI4XHU1NDJhXHU1NDJmXHU1NDMxXHU1NDM0XHU1NDM1XHU1NDQzXHU1NDQ0XHU1NDQ3XHU1NDRkXHU1NDRm''@;'; put 'put ''XHU1NDVlXHU1NDYyXHU1NDY0XHU1NDY2XHU1NDY3XHU1NDY5XHU1NDZiXHU1NDZkXHU1NDZlXHU1NDc0XHU1NDdmIl0sWyI4ZmI1YTEiLCJcdTU0ODFcdTU0ODNcdTU0ODVcdTU0ODhcdTU0ODlcdTU0OGRcdTU0OTFcdTU0OTVcdTU0OTZcdTU0OWNcdTU0OWZcdTU0YTFcdTU0YTZcdTU0YTdc''@;'; put 'put ''dTU0YTlcdTU0YWFcdTU0YWRcdTU0YWVcdTU0YjFcdTU0YjdcdTU0YjlcdTU0YmFcdTU0YmJcdTU0YmZcdTU0YzZcdTU0Y2FcdTU0Y2RcdTU0Y2VcdTU0ZTBcdTU0ZWFcdTU0ZWNcdTU0ZWZcdTU0ZjZcdTU0ZmNcdTU0ZmVcdTU0ZmZcdTU1MDBcdTU1MDFcdTU1MDVcdTU1MDhcdTU1MDlcdTU1''@;'; put 'put ''MGNcdTU1MGRcdTU1MGVcdTU1MTVcdTU1MmFcdTU1MmJcdTU1MzJcdTU1MzVcdTU1MzZcdTU1M2JcdTU1M2NcdTU1M2RcdTU1NDFcdTU1NDdcdTU1NDlcdTU1NGFcdTU1NGRcdTU1NTBcdTU1NTFcdTU1NThcdTU1NWFcdTU1NWJcdTU1NWVcdTU1NjBcdTU1NjFcdTU1NjRcdTU1NjZcdTU1N2Zc''@;'; put 'put ''dTU1ODFcdTU1ODJcdTU1ODZcdTU1ODhcdTU1OGVcdTU1OGZcdTU1OTFcdTU1OTJcdTU1OTNcdTU1OTRcdTU1OTdcdTU1YTNcdTU1YTRcdTU1YWRcdTU1YjJcdTU1YmZcdTU1YzFcdTU1YzNcdTU1YzZcdTU1YzlcdTU1Y2JcdTU1Y2NcdTU1Y2VcdTU1ZDFcdTU1ZDIiXSxbIjhmYjZhMSIsIlx1''@;'; put 'put ''NTVkM1x1NTVkN1x1NTVkOFx1NTVkYlx1NTVkZVx1NTVlMlx1NTVlOVx1NTVmNlx1NTVmZlx1NTYwNVx1NTYwOFx1NTYwYVx1NTYwZCIsNSwiXHU1NjE5XHU1NjJjXHU1NjMwXHU1NjMzXHU1NjM1XHU1NjM3XHU1NjM5XHU1NjNiXHU1NjNjXHU1NjNkXHU1NjNmXHU1NjQwXHU1NjQxXHU1NjQz''@;'; put 'put ''XHU1NjQ0XHU1NjQ2XHU1NjQ5XHU1NjRiXHU1NjRkXHU1NjRmXHU1NjU0XHU1NjVlXHU1NjYwXHU1NjYxXHU1NjYyXHU1NjYzXHU1NjY2XHU1NjY5XHU1NjZkXHU1NjZmXHU1NjcxXHU1NjcyXHU1Njc1XHU1Njg0XHU1Njg1XHU1Njg4XHU1NjhiXHU1NjhjXHU1Njk1XHU1Njk5XHU1NjlhXHU1''@;'; put 'put ''NjlkXHU1NjllXHU1NjlmXHU1NmE2XHU1NmE3XHU1NmE4XHU1NmE5XHU1NmFiXHU1NmFjXHU1NmFkXHU1NmIxXHU1NmIzXHU1NmI3XHU1NmJlXHU1NmM1XHU1NmM5XHU1NmNhXHU1NmNiXHU1NmNmXHU1NmQwXHU1NmNjXHU1NmNkXHU1NmQ5XHU1NmRjXHU1NmRkXHU1NmRmXHU1NmUxXHU1NmU0''@;'; put 'put ''Iiw0LCJcdTU2ZjFcdTU2ZWJcdTU2ZWQiXSxbIjhmYjdhMSIsIlx1NTZmNlx1NTZmN1x1NTcwMVx1NTcwMlx1NTcwN1x1NTcwYVx1NTcwY1x1NTcxMVx1NTcxNVx1NTcxYVx1NTcxYlx1NTcxZFx1NTcyMFx1NTcyMlx1NTcyM1x1NTcyNFx1NTcyNVx1NTcyOVx1NTcyYVx1NTcyY1x1NTcyZVx1''@;'; put 'put ''NTcyZlx1NTczM1x1NTczNFx1NTczZFx1NTczZVx1NTczZlx1NTc0NVx1NTc0Nlx1NTc0Y1x1NTc0ZFx1NTc1Mlx1NTc2Mlx1NTc2NVx1NTc2N1x1NTc2OFx1NTc2Ylx1NTc2ZCIsNCwiXHU1NzczXHU1Nzc0XHU1Nzc1XHU1Nzc3XHU1Nzc5XHU1NzdhXHU1NzdiXHU1NzdjXHU1NzdlXHU1Nzgx''@;'; put 'put ''XHU1NzgzXHU1NzhjXHU1Nzk0XHU1Nzk3XHU1Nzk5XHU1NzlhXHU1NzljXHU1NzlkXHU1NzllXHU1NzlmXHU1N2ExXHU1Nzk1XHU1N2E3XHU1N2E4XHU1N2E5XHU1N2FjXHU1N2I4XHU1N2JkXHU1N2M3XHU1N2M4XHU1N2NjXHU1N2NmXHU1N2Q1XHU1N2RkXHU1N2RlXHU1N2U0XHU1N2U2XHU1''@;'; put 'put ''N2U3XHU1N2U5XHU1N2VkXHU1N2YwXHU1N2Y1XHU1N2Y2XHU1N2Y4XHU1N2ZkXHU1N2ZlXHU1N2ZmXHU1ODAzXHU1ODA0XHU1ODA4XHU1ODA5XHU1N2UxIl0sWyI4ZmI4YTEiLCJcdTU4MGNcdTU4MGRcdTU4MWJcdTU4MWVcdTU4MWZcdTU4MjBcdTU4MjZcdTU4MjdcdTU4MmRcdTU4MzJcdTU4''@;'; put 'put ''MzlcdTU4M2ZcdTU4NDlcdTU4NGNcdTU4NGRcdTU4NGZcdTU4NTBcdTU4NTVcdTU4NWZcdTU4NjFcdTU4NjRcdTU4NjdcdTU4NjhcdTU4NzhcdTU4N2NcdTU4N2ZcdTU4ODBcdTU4ODFcdTU4ODdcdTU4ODhcdTU4ODlcdTU4OGFcdTU4OGNcdTU4OGRcdTU4OGZcdTU4OTBcdTU4OTRcdTU4OTZc''@;'; put 'put ''dTU4OWRcdTU4YTBcdTU4YTFcdTU4YTJcdTU4YTZcdTU4YTlcdTU4YjFcdTU4YjJcdTU4YzRcdTU4YmNcdTU4YzJcdTU4YzhcdTU4Y2RcdTU4Y2VcdTU4ZDBcdTU4ZDJcdTU4ZDRcdTU4ZDZcdTU4ZGFcdTU4ZGRcdTU4ZTFcdTU4ZTJcdTU4ZTlcdTU4ZjNcdTU5MDVcdTU5MDZcdTU5MGJcdTU5''@;'; put 'put ''MGNcdTU5MTJcdTU5MTNcdTU5MTRcdTg2NDFcdTU5MWRcdTU5MjFcdTU5MjNcdTU5MjRcdTU5MjhcdTU5MmZcdTU5MzBcdTU5MzNcdTU5MzVcdTU5MzZcdTU5M2ZcdTU5NDNcdTU5NDZcdTU5NTJcdTU5NTNcdTU5NTlcdTU5NWJcdTU5NWRcdTU5NWVcdTU5NWZcdTU5NjFcdTU5NjNcdTU5NmJc''@;'; put 'put ''dTU5NmQiXSxbIjhmYjlhMSIsIlx1NTk2Zlx1NTk3Mlx1NTk3NVx1NTk3Nlx1NTk3OVx1NTk3Ylx1NTk3Y1x1NTk4Ylx1NTk4Y1x1NTk4ZVx1NTk5Mlx1NTk5NVx1NTk5N1x1NTk5Zlx1NTlhNFx1NTlhN1x1NTlhZFx1NTlhZVx1NTlhZlx1NTliMFx1NTliM1x1NTliN1x1NTliYVx1NTliY1x1''@;'; put 'put ''NTljMVx1NTljM1x1NTljNFx1NTljOFx1NTljYVx1NTljZFx1NTlkMlx1NTlkZFx1NTlkZVx1NTlkZlx1NTllM1x1NTllNFx1NTllN1x1NTllZVx1NTllZlx1NTlmMVx1NTlmMlx1NTlmNFx1NTlmN1x1NWEwMFx1NWEwNFx1NWEwY1x1NWEwZFx1NWEwZVx1NWExMlx1NWExM1x1NWExZVx1NWEy''@;'; put 'put ''M1x1NWEyNFx1NWEyN1x1NWEyOFx1NWEyYVx1NWEyZFx1NWEzMFx1NWE0NFx1NWE0NVx1NWE0N1x1NWE0OFx1NWE0Y1x1NWE1MFx1NWE1NVx1NWE1ZVx1NWE2M1x1NWE2NVx1NWE2N1x1NWE2ZFx1NWE3N1x1NWE3YVx1NWE3Ylx1NWE3ZVx1NWE4Ylx1NWE5MFx1NWE5M1x1NWE5Nlx1NWE5OVx1''@;'; put 'put ''NWE5Y1x1NWE5ZVx1NWE5Zlx1NWFhMFx1NWFhMlx1NWFhN1x1NWFhY1x1NWFiMVx1NWFiMlx1NWFiM1x1NWFiNVx1NWFiOFx1NWFiYVx1NWFiYlx1NWFiZiJdLFsiOGZiYWExIiwiXHU1YWM0XHU1YWM2XHU1YWM4XHU1YWNmXHU1YWRhXHU1YWRjXHU1YWUwXHU1YWU1XHU1YWVhXHU1YWVlXHU1''@;'; put 'put ''YWY1XHU1YWY2XHU1YWZkXHU1YjAwXHU1YjAxXHU1YjA4XHU1YjE3XHU1YjM0XHU1YjE5XHU1YjFiXHU1YjFkXHU1YjIxXHU1YjI1XHU1YjJkXHU1YjM4XHU1YjQxXHU1YjRiXHU1YjRjXHU1YjUyXHU1YjU2XHU1YjVlXHU1YjY4XHU1YjZlXHU1YjZmXHU1YjdjXHU1YjdkXHU1YjdlXHU1Yjdm''@;'; put 'put ''XHU1YjgxXHU1Yjg0XHU1Yjg2XHU1YjhhXHU1YjhlXHU1YjkwXHU1YjkxXHU1YjkzXHU1Yjk0XHU1Yjk2XHU1YmE4XHU1YmE5XHU1YmFjXHU1YmFkXHU1YmFmXHU1YmIxXHU1YmIyXHU1YmI3XHU1YmJhXHU1YmJjXHU1YmMwXHU1YmMxXHU1YmNkXHU1YmNmXHU1YmQ2Iiw0LCJcdTViZTBcdTVi''@;'; put 'put ''ZWZcdTViZjFcdTViZjRcdTViZmRcdTVjMGNcdTVjMTdcdTVjMWVcdTVjMWZcdTVjMjNcdTVjMjZcdTVjMjlcdTVjMmJcdTVjMmNcdTVjMmVcdTVjMzBcdTVjMzJcdTVjMzVcdTVjMzZcdTVjNTlcdTVjNWFcdTVjNWNcdTVjNjJcdTVjNjNcdTVjNjdcdTVjNjhcdTVjNjkiXSxbIjhmYmJhMSIs''@;'; put 'put ''Ilx1NWM2ZFx1NWM3MFx1NWM3NFx1NWM3NVx1NWM3YVx1NWM3Ylx1NWM3Y1x1NWM3ZFx1NWM4N1x1NWM4OFx1NWM4YVx1NWM4Zlx1NWM5Mlx1NWM5ZFx1NWM5Zlx1NWNhMFx1NWNhMlx1NWNhM1x1NWNhNlx1NWNhYVx1NWNiMlx1NWNiNFx1NWNiNVx1NWNiYVx1NWNjOVx1NWNjYlx1NWNkMlx1''@;'; put 'put ''NWNkZFx1NWNkN1x1NWNlZVx1NWNmMVx1NWNmMlx1NWNmNFx1NWQwMVx1NWQwNlx1NWQwZFx1NWQxMlx1NWQyYlx1NWQyM1x1NWQyNFx1NWQyNlx1NWQyN1x1NWQzMVx1NWQzNFx1NWQzOVx1NWQzZFx1NWQzZlx1NWQ0Mlx1NWQ0M1x1NWQ0Nlx1NWQ0OFx1NWQ1NVx1NWQ1MVx1NWQ1OVx1NWQ0''@;'; put 'put ''YVx1NWQ1Zlx1NWQ2MFx1NWQ2MVx1NWQ2Mlx1NWQ2NFx1NWQ2YVx1NWQ2ZFx1NWQ3MFx1NWQ3OVx1NWQ3YVx1NWQ3ZVx1NWQ3Zlx1NWQ4MVx1NWQ4M1x1NWQ4OFx1NWQ4YVx1NWQ5Mlx1NWQ5M1x1NWQ5NFx1NWQ5NVx1NWQ5OVx1NWQ5Ylx1NWQ5Zlx1NWRhMFx1NWRhN1x1NWRhYlx1NWRiMFx1''@;'; put 'put ''NWRiNFx1NWRiOFx1NWRiOVx1NWRjM1x1NWRjN1x1NWRjYlx1NWRkMFx1NWRjZVx1NWRkOFx1NWRkOVx1NWRlMFx1NWRlNCJdLFsiOGZiY2ExIiwiXHU1ZGU5XHU1ZGY4XHU1ZGY5XHU1ZTAwXHU1ZTA3XHU1ZTBkXHU1ZTEyXHU1ZTE0XHU1ZTE1XHU1ZTE4XHU1ZTFmXHU1ZTIwXHU1ZTJlXHU1''@;'; put 'put ''ZTI4XHU1ZTMyXHU1ZTM1XHU1ZTNlXHU1ZTRiXHU1ZTUwXHU1ZTQ5XHU1ZTUxXHU1ZTU2XHU1ZTU4XHU1ZTViXHU1ZTVjXHU1ZTVlXHU1ZTY4XHU1ZTZhIiw0LCJcdTVlNzBcdTVlODBcdTVlOGJcdTVlOGVcdTVlYTJcdTVlYTRcdTVlYTVcdTVlYThcdTVlYWFcdTVlYWNcdTVlYjFcdTVlYjNc''@;'; put 'put ''dTVlYmRcdTVlYmVcdTVlYmZcdTVlYzZcdTVlY2NcdTVlY2JcdTVlY2VcdTVlZDFcdTVlZDJcdTVlZDRcdTVlZDVcdTVlZGNcdTVlZGVcdTVlZTVcdTVlZWJcdTVmMDJcdTVmMDZcdTVmMDdcdTVmMDhcdTVmMGVcdTVmMTlcdTVmMWNcdTVmMWRcdTVmMjFcdTVmMjJcdTVmMjNcdTVmMjRcdTVm''@;'; put 'put ''MjhcdTVmMmJcdTVmMmNcdTVmMmVcdTVmMzBcdTVmMzRcdTVmMzZcdTVmM2JcdTVmM2RcdTVmM2ZcdTVmNDBcdTVmNDRcdTVmNDVcdTVmNDdcdTVmNGRcdTVmNTBcdTVmNTRcdTVmNThcdTVmNWJcdTVmNjBcdTVmNjNcdTVmNjRcdTVmNjciXSxbIjhmYmRhMSIsIlx1NWY2Zlx1NWY3Mlx1NWY3''@;'; put 'put ''NFx1NWY3NVx1NWY3OFx1NWY3YVx1NWY3ZFx1NWY3ZVx1NWY4OVx1NWY4ZFx1NWY4Zlx1NWY5Nlx1NWY5Y1x1NWY5ZFx1NWZhMlx1NWZhN1x1NWZhYlx1NWZhNFx1NWZhY1x1NWZhZlx1NWZiMFx1NWZiMVx1NWZiOFx1NWZjNFx1NWZjN1x1NWZjOFx1NWZjOVx1NWZjYlx1NWZkMCIsNCwiXHU1''@;'; put 'put ''ZmRlXHU1ZmUxXHU1ZmUyXHU1ZmU4XHU1ZmU5XHU1ZmVhXHU1ZmVjXHU1ZmVkXHU1ZmVlXHU1ZmVmXHU1ZmYyXHU1ZmYzXHU1ZmY2XHU1ZmZhXHU1ZmZjXHU2MDA3XHU2MDBhXHU2MDBkXHU2MDEzXHU2MDE0XHU2MDE3XHU2MDE4XHU2MDFhXHU2MDFmXHU2MDI0XHU2MDJkXHU2MDMzXHU2MDM1''@;'; put 'put ''XHU2MDQwXHU2MDQ3XHU2MDQ4XHU2MDQ5XHU2MDRjXHU2MDUxXHU2MDU0XHU2MDU2XHU2MDU3XHU2MDVkXHU2MDYxXHU2MDY3XHU2MDcxXHU2MDdlXHU2MDdmXHU2MDgyXHU2MDg2XHU2MDg4XHU2MDhhXHU2MDhlXHU2MDkxXHU2MDkzXHU2MDk1XHU2MDk4XHU2MDlkXHU2MDllXHU2MGEyXHU2''@;'; put 'put ''MGE0XHU2MGE1XHU2MGE4XHU2MGIwXHU2MGIxXHU2MGI3Il0sWyI4ZmJlYTEiLCJcdTYwYmJcdTYwYmVcdTYwYzJcdTYwYzRcdTYwYzhcdTYwYzlcdTYwY2FcdTYwY2JcdTYwY2VcdTYwY2ZcdTYwZDRcdTYwZDVcdTYwZDlcdTYwZGJcdTYwZGRcdTYwZGVcdTYwZTJcdTYwZTVcdTYwZjJcdTYw''@;'; put 'put ''ZjVcdTYwZjhcdTYwZmNcdTYwZmRcdTYxMDJcdTYxMDdcdTYxMGFcdTYxMGNcdTYxMTAiLDQsIlx1NjExNlx1NjExN1x1NjExOVx1NjExY1x1NjExZVx1NjEyMlx1NjEyYVx1NjEyYlx1NjEzMFx1NjEzMVx1NjEzNVx1NjEzNlx1NjEzN1x1NjEzOVx1NjE0MVx1NjE0NVx1NjE0Nlx1NjE0OVx1''@;'; put 'put ''NjE1ZVx1NjE2MFx1NjE2Y1x1NjE3Mlx1NjE3OFx1NjE3Ylx1NjE3Y1x1NjE3Zlx1NjE4MFx1NjE4MVx1NjE4M1x1NjE4NFx1NjE4Ylx1NjE4ZFx1NjE5Mlx1NjE5M1x1NjE5N1x1NjE5OFx1NjE5Y1x1NjE5ZFx1NjE5Zlx1NjFhMFx1NjFhNVx1NjFhOFx1NjFhYVx1NjFhZFx1NjFiOFx1NjFi''@;'; put 'put ''OVx1NjFiY1x1NjFjMFx1NjFjMVx1NjFjMlx1NjFjZVx1NjFjZlx1NjFkNVx1NjFkY1x1NjFkZFx1NjFkZVx1NjFkZlx1NjFlMVx1NjFlMlx1NjFlN1x1NjFlOVx1NjFlNSJdLFsiOGZiZmExIiwiXHU2MWVjXHU2MWVkXHU2MWVmXHU2MjAxXHU2MjAzXHU2MjA0XHU2MjA3XHU2MjEzXHU2MjE1''@;'; put 'put ''XHU2MjFjXHU2MjIwXHU2MjIyXHU2MjIzXHU2MjI3XHU2MjI5XHU2MjJiXHU2MjM5XHU2MjNkXHU2MjQyXHU2MjQzXHU2MjQ0XHU2MjQ2XHU2MjRjXHU2MjUwXHU2MjUxXHU2MjUyXHU2MjU0XHU2MjU2XHU2MjVhXHU2MjVjXHU2MjY0XHU2MjZkXHU2MjZmXHU2MjczXHU2MjdhXHU2MjdkXHU2''@;'; put 'put ''MjhkXHU2MjhlXHU2MjhmXHU2MjkwXHU2MmE2XHU2MmE4XHU2MmIzXHU2MmI2XHU2MmI3XHU2MmJhXHU2MmJlXHU2MmJmXHU2MmM0XHU2MmNlXHU2MmQ1XHU2MmQ2XHU2MmRhXHU2MmVhXHU2MmYyXHU2MmY0XHU2MmZjXHU2MmZkXHU2MzAzXHU2MzA0XHU2MzBhXHU2MzBiXHU2MzBkXHU2MzEw''@;'; put 'put ''XHU2MzEzXHU2MzE2XHU2MzE4XHU2MzI5XHU2MzJhXHU2MzJkXHU2MzM1XHU2MzM2XHU2MzM5XHU2MzNjXHU2MzQxXHU2MzQyXHU2MzQzXHU2MzQ0XHU2MzQ2XHU2MzRhXHU2MzRiXHU2MzRlXHU2MzUyXHU2MzUzXHU2MzU0XHU2MzU4XHU2MzViXHU2MzY1XHU2MzY2XHU2MzZjXHU2MzZkXHU2''@;'; put 'put ''MzcxXHU2Mzc0XHU2Mzc1Il0sWyI4ZmMwYTEiLCJcdTYzNzhcdTYzN2NcdTYzN2RcdTYzN2ZcdTYzODJcdTYzODRcdTYzODdcdTYzOGFcdTYzOTBcdTYzOTRcdTYzOTVcdTYzOTlcdTYzOWFcdTYzOWVcdTYzYTRcdTYzYTZcdTYzYWRcdTYzYWVcdTYzYWZcdTYzYmRcdTYzYzFcdTYzYzVcdTYz''@;'; put 'put ''YzhcdTYzY2VcdTYzZDFcdTYzZDNcdTYzZDRcdTYzZDVcdTYzZGNcdTYzZTBcdTYzZTVcdTYzZWFcdTYzZWNcdTYzZjJcdTYzZjNcdTYzZjVcdTYzZjhcdTYzZjlcdTY0MDlcdTY0MGFcdTY0MTBcdTY0MTJcdTY0MTRcdTY0MThcdTY0MWVcdTY0MjBcdTY0MjJcdTY0MjRcdTY0MjVcdTY0Mjlc''@;'; put 'put ''dTY0MmFcdTY0MmZcdTY0MzBcdTY0MzVcdTY0M2RcdTY0M2ZcdTY0NGJcdTY0NGZcdTY0NTFcdTY0NTJcdTY0NTNcdTY0NTRcdTY0NWFcdTY0NWJcdTY0NWNcdTY0NWRcdTY0NWZcdTY0NjBcdTY0NjFcdTY0NjNcdTY0NmRcdTY0NzNcdTY0NzRcdTY0N2JcdTY0N2RcdTY0ODVcdTY0ODdcdTY0''@;'; put 'put ''OGZcdTY0OTBcdTY0OTFcdTY0OThcdTY0OTlcdTY0OWJcdTY0OWRcdTY0OWZcdTY0YTFcdTY0YTNcdTY0YTZcdTY0YThcdTY0YWNcdTY0YjNcdTY0YmRcdTY0YmVcdTY0YmYiXSxbIjhmYzFhMSIsIlx1NjRjNFx1NjRjOVx1NjRjYVx1NjRjYlx1NjRjY1x1NjRjZVx1NjRkMFx1NjRkMVx1NjRk''@;'; put 'put ''NVx1NjRkN1x1NjRlNFx1NjRlNVx1NjRlOVx1NjRlYVx1NjRlZFx1NjRmMFx1NjRmNVx1NjRmN1x1NjRmYlx1NjRmZlx1NjUwMVx1NjUwNFx1NjUwOFx1NjUwOVx1NjUwYVx1NjUwZlx1NjUxM1x1NjUxNFx1NjUxNlx1NjUxOVx1NjUxYlx1NjUxZVx1NjUxZlx1NjUyMlx1NjUyNlx1NjUyOVx1''@;'; put 'put ''NjUyZVx1NjUzMVx1NjUzYVx1NjUzY1x1NjUzZFx1NjU0M1x1NjU0N1x1NjU0OVx1NjU1MFx1NjU1Mlx1NjU1NFx1NjU1Zlx1NjU2MFx1NjU2N1x1NjU2Ylx1NjU3YVx1NjU3ZFx1NjU4MVx1NjU4NVx1NjU4YVx1NjU5Mlx1NjU5NVx1NjU5OFx1NjU5ZFx1NjVhMFx1NjVhM1x1NjVhNlx1NjVh''@;'; put 'put ''ZVx1NjViMlx1NjViM1x1NjViNFx1NjViZlx1NjVjMlx1NjVjOFx1NjVjOVx1NjVjZVx1NjVkMFx1NjVkNFx1NjVkNlx1NjVkOFx1NjVkZlx1NjVmMFx1NjVmMlx1NjVmNFx1NjVmNVx1NjVmOVx1NjVmZVx1NjVmZlx1NjYwMFx1NjYwNFx1NjYwOFx1NjYwOVx1NjYwZFx1NjYxMVx1NjYxMlx1''@;'; put 'put ''NjYxNVx1NjYxNlx1NjYxZCJdLFsiOGZjMmExIiwiXHU2NjFlXHU2NjIxXHU2NjIyXHU2NjIzXHU2NjI0XHU2NjI2XHU2NjI5XHU2NjJhXHU2NjJiXHU2NjJjXHU2NjJlXHU2NjMwXHU2NjMxXHU2NjMzXHU2NjM5XHU2NjM3XHU2NjQwXHU2NjQ1XHU2NjQ2XHU2NjRhXHU2NjRjXHU2NjUxXHU2''@;'; put 'put ''NjRlXHU2NjU3XHU2NjU4XHU2NjU5XHU2NjViXHU2NjVjXHU2NjYwXHU2NjYxXHU2NmZiXHU2NjZhXHU2NjZiXHU2NjZjXHU2NjdlXHU2NjczXHU2Njc1XHU2NjdmXHU2Njc3XHU2Njc4XHU2Njc5XHU2NjdiXHU2NjgwXHU2NjdjXHU2NjhiXHU2NjhjXHU2NjhkXHU2NjkwXHU2NjkyXHU2Njk5''@;'; put 'put ''XHU2NjlhXHU2NjliXHU2NjljXHU2NjlmXHU2NmEwXHU2NmE0XHU2NmFkXHU2NmIxXHU2NmIyXHU2NmI1XHU2NmJiXHU2NmJmXHU2NmMwXHU2NmMyXHU2NmMzXHU2NmM4XHU2NmNjXHU2NmNlXHU2NmNmXHU2NmQ0XHU2NmRiXHU2NmRmXHU2NmU4XHU2NmViXHU2NmVjXHU2NmVlXHU2NmZhXHU2''@;'; put 'put ''NzA1XHU2NzA3XHU2NzBlXHU2NzEzXHU2NzE5XHU2NzFjXHU2NzIwXHU2NzIyXHU2NzMzXHU2NzNlXHU2NzQ1XHU2NzQ3XHU2NzQ4XHU2NzRjXHU2NzU0XHU2NzU1XHU2NzVkIl0sWyI4ZmMzYTEiLCJcdTY3NjZcdTY3NmNcdTY3NmVcdTY3NzRcdTY3NzZcdTY3N2JcdTY3ODFcdTY3ODRcdTY3''@;'; put 'put ''OGVcdTY3OGZcdTY3OTFcdTY3OTNcdTY3OTZcdTY3OThcdTY3OTlcdTY3OWJcdTY3YjBcdTY3YjFcdTY3YjJcdTY3YjVcdTY3YmJcdTY3YmNcdTY3YmRcdTY3ZjlcdTY3YzBcdTY3YzJcdTY3YzNcdTY3YzVcdTY3YzhcdTY3YzlcdTY3ZDJcdTY3ZDdcdTY3ZDlcdTY3ZGNcdTY3ZTFcdTY3ZTZc''@;'; put 'put ''dTY3ZjBcdTY3ZjJcdTY3ZjZcdTY3ZjdcdTY4NTJcdTY4MTRcdTY4MTlcdTY4MWRcdTY4MWZcdTY4MjhcdTY4MjdcdTY4MmNcdTY4MmRcdTY4MmZcdTY4MzBcdTY4MzFcdTY4MzNcdTY4M2JcdTY4M2ZcdTY4NDRcdTY4NDVcdTY4NGFcdTY4NGNcdTY4NTVcdTY4NTdcdTY4NThcdTY4NWJcdTY4''@;'; put 'put ''NmJcdTY4NmUiLDQsIlx1Njg3NVx1Njg3OVx1Njg3YVx1Njg3Ylx1Njg3Y1x1Njg4Mlx1Njg4NFx1Njg4Nlx1Njg4OFx1Njg5Nlx1Njg5OFx1Njg5YVx1Njg5Y1x1NjhhMVx1NjhhM1x1NjhhNVx1NjhhOVx1NjhhYVx1NjhhZVx1NjhiMlx1NjhiYlx1NjhjNVx1NjhjOFx1NjhjY1x1NjhjZiJd''@;'; put 'put ''LFsiOGZjNGExIiwiXHU2OGQwXHU2OGQxXHU2OGQzXHU2OGQ2XHU2OGQ5XHU2OGRjXHU2OGRkXHU2OGU1XHU2OGU4XHU2OGVhXHU2OGViXHU2OGVjXHU2OGVkXHU2OGYwXHU2OGYxXHU2OGY1XHU2OGY2XHU2OGZiXHU2OGZjXHU2OGZkXHU2OTA2XHU2OTA5XHU2OTBhXHU2OTEwXHU2OTExXHU2''@;'; put 'put ''OTEzXHU2OTE2XHU2OTE3XHU2OTMxXHU2OTMzXHU2OTM1XHU2OTM4XHU2OTNiXHU2OTQyXHU2OTQ1XHU2OTQ5XHU2OTRlXHU2OTU3XHU2OTViXHU2OTYzXHU2OTY0XHU2OTY1XHU2OTY2XHU2OTY4XHU2OTY5XHU2OTZjXHU2OTcwXHU2OTcxXHU2OTcyXHU2OTdhXHU2OTdiXHU2OTdmXHU2OTgw''@;'; put 'put ''XHU2OThkXHU2OTkyXHU2OTk2XHU2OTk4XHU2OWExXHU2OWE1XHU2OWE2XHU2OWE4XHU2OWFiXHU2OWFkXHU2OWFmXHU2OWI3XHU2OWI4XHU2OWJhXHU2OWJjXHU2OWM1XHU2OWM4XHU2OWQxXHU2OWQ2XHU2OWQ3XHU2OWUyXHU2OWU1XHU2OWVlXHU2OWVmXHU2OWYxXHU2OWYzXHU2OWY1XHU2''@;'; put 'put ''OWZlXHU2YTAwXHU2YTAxXHU2YTAzXHU2YTBmXHU2YTExXHU2YTE1XHU2YTFhXHU2YTFkXHU2YTIwXHU2YTI0XHU2YTI4XHU2YTMwXHU2YTMyIl0sWyI4ZmM1YTEiLCJcdTZhMzRcdTZhMzdcdTZhM2JcdTZhM2VcdTZhM2ZcdTZhNDVcdTZhNDZcdTZhNDlcdTZhNGFcdTZhNGVcdTZhNTBcdTZh''@;'; put 'put ''NTFcdTZhNTJcdTZhNTVcdTZhNTZcdTZhNWJcdTZhNjRcdTZhNjdcdTZhNmFcdTZhNzFcdTZhNzNcdTZhN2VcdTZhODFcdTZhODNcdTZhODZcdTZhODdcdTZhODlcdTZhOGJcdTZhOTFcdTZhOWJcdTZhOWRcdTZhOWVcdTZhOWZcdTZhYTVcdTZhYWJcdTZhYWZcdTZhYjBcdTZhYjFcdTZhYjRc''@;'; put 'put ''dTZhYmRcdTZhYmVcdTZhYmZcdTZhYzZcdTZhYzlcdTZhYzhcdTZhY2NcdTZhZDBcdTZhZDRcdTZhZDVcdTZhZDZcdTZhZGNcdTZhZGRcdTZhZTRcdTZhZTdcdTZhZWNcdTZhZjBcdTZhZjFcdTZhZjJcdTZhZmNcdTZhZmRcdTZiMDJcdTZiMDNcdTZiMDZcdTZiMDdcdTZiMDlcdTZiMGZcdTZi''@;'; put 'put ''MTBcdTZiMTFcdTZiMTdcdTZiMWJcdTZiMWVcdTZiMjRcdTZiMjhcdTZiMmJcdTZiMmNcdTZiMmZcdTZiMzVcdTZiMzZcdTZiM2JcdTZiM2ZcdTZiNDZcdTZiNGFcdTZiNGRcdTZiNTJcdTZiNTZcdTZiNThcdTZiNWRcdTZiNjBcdTZiNjdcdTZiNmJcdTZiNmVcdTZiNzBcdTZiNzVcdTZiN2Qi''@;'; put 'put ''XSxbIjhmYzZhMSIsIlx1NmI3ZVx1NmI4Mlx1NmI4NVx1NmI5N1x1NmI5Ylx1NmI5Zlx1NmJhMFx1NmJhMlx1NmJhM1x1NmJhOFx1NmJhOVx1NmJhY1x1NmJhZFx1NmJhZVx1NmJiMFx1NmJiOFx1NmJiOVx1NmJiZFx1NmJiZVx1NmJjM1x1NmJjNFx1NmJjOVx1NmJjY1x1NmJkNlx1NmJkYVx1''@;'; put 'put ''NmJlMVx1NmJlM1x1NmJlNlx1NmJlN1x1NmJlZVx1NmJmMVx1NmJmN1x1NmJmOVx1NmJmZlx1NmMwMlx1NmMwNFx1NmMwNVx1NmMwOVx1NmMwZFx1NmMwZVx1NmMxMFx1NmMxMlx1NmMxOVx1NmMxZlx1NmMyNlx1NmMyN1x1NmMyOFx1NmMyY1x1NmMyZVx1NmMzM1x1NmMzNVx1NmMzNlx1NmMz''@;'; put 'put ''YVx1NmMzYlx1NmMzZlx1NmM0YVx1NmM0Ylx1NmM0ZFx1NmM0Zlx1NmM1Mlx1NmM1NFx1NmM1OVx1NmM1Ylx1NmM1Y1x1NmM2Ylx1NmM2ZFx1NmM2Zlx1NmM3NFx1NmM3Nlx1NmM3OFx1NmM3OVx1NmM3Ylx1NmM4NVx1NmM4Nlx1NmM4N1x1NmM4OVx1NmM5NFx1NmM5NVx1NmM5N1x1NmM5OFx1''@;'; put 'put ''NmM5Y1x1NmM5Zlx1NmNiMFx1NmNiMlx1NmNiNFx1NmNjMlx1NmNjNlx1NmNjZFx1NmNjZlx1NmNkMFx1NmNkMVx1NmNkMlx1NmNkNFx1NmNkNiJdLFsiOGZjN2ExIiwiXHU2Y2RhXHU2Y2RjXHU2Y2UwXHU2Y2U3XHU2Y2U5XHU2Y2ViXHU2Y2VjXHU2Y2VlXHU2Y2YyXHU2Y2Y0XHU2ZDA0XHU2''@;'; put 'put ''ZDA3XHU2ZDBhXHU2ZDBlXHU2ZDBmXHU2ZDExXHU2ZDEzXHU2ZDFhXHU2ZDI2XHU2ZDI3XHU2ZDI4XHU2YzY3XHU2ZDJlXHU2ZDJmXHU2ZDMxXHU2ZDM5XHU2ZDNjXHU2ZDNmXHU2ZDU3XHU2ZDVlXHU2ZDVmXHU2ZDYxXHU2ZDY1XHU2ZDY3XHU2ZDZmXHU2ZDcwXHU2ZDdjXHU2ZDgyXHU2ZDg3''@;'; put 'put ''XHU2ZDkxXHU2ZDkyXHU2ZDk0XHU2ZDk2XHU2ZDk3XHU2ZDk4XHU2ZGFhXHU2ZGFjXHU2ZGI0XHU2ZGI3XHU2ZGI5XHU2ZGJkXHU2ZGJmXHU2ZGM0XHU2ZGM4XHU2ZGNhXHU2ZGNlXHU2ZGNmXHU2ZGQ2XHU2ZGRiXHU2ZGRkXHU2ZGRmXHU2ZGUwXHU2ZGUyXHU2ZGU1XHU2ZGU5XHU2ZGVmXHU2''@;'; put 'put ''ZGYwXHU2ZGY0XHU2ZGY2XHU2ZGZjXHU2ZTAwXHU2ZTA0XHU2ZTFlXHU2ZTIyXHU2ZTI3XHU2ZTMyXHU2ZTM2XHU2ZTM5XHU2ZTNiXHU2ZTNjXHU2ZTQ0XHU2ZTQ1XHU2ZTQ4XHU2ZTQ5XHU2ZTRiXHU2ZTRmXHU2ZTUxXHU2ZTUyXHU2ZTUzXHU2ZTU0XHU2ZTU3XHU2ZTVjXHU2ZTVkXHU2ZTVl''@;'; put 'put ''Il0sWyI4ZmM4YTEiLCJcdTZlNjJcdTZlNjNcdTZlNjhcdTZlNzNcdTZlN2JcdTZlN2RcdTZlOGRcdTZlOTNcdTZlOTlcdTZlYTBcdTZlYTdcdTZlYWRcdTZlYWVcdTZlYjFcdTZlYjNcdTZlYmJcdTZlYmZcdTZlYzBcdTZlYzFcdTZlYzNcdTZlYzdcdTZlYzhcdTZlY2FcdTZlY2RcdTZlY2Vc''@;'; put 'put ''dTZlY2ZcdTZlZWJcdTZlZWRcdTZlZWVcdTZlZjlcdTZlZmJcdTZlZmRcdTZmMDRcdTZmMDhcdTZmMGFcdTZmMGNcdTZmMGRcdTZmMTZcdTZmMThcdTZmMWFcdTZmMWJcdTZmMjZcdTZmMjlcdTZmMmFcdTZmMmZcdTZmMzBcdTZmMzNcdTZmMzZcdTZmM2JcdTZmM2NcdTZmMmRcdTZmNGZcdTZm''@;'; put 'put ''NTFcdTZmNTJcdTZmNTNcdTZmNTdcdTZmNTlcdTZmNWFcdTZmNWRcdTZmNWVcdTZmNjFcdTZmNjJcdTZmNjhcdTZmNmNcdTZmN2RcdTZmN2VcdTZmODNcdTZmODdcdTZmODhcdTZmOGJcdTZmOGNcdTZmOGRcdTZmOTBcdTZmOTJcdTZmOTNcdTZmOTRcdTZmOTZcdTZmOWFcdTZmOWZcdTZmYTBc''@;'; put 'put ''dTZmYTVcdTZmYTZcdTZmYTdcdTZmYThcdTZmYWVcdTZmYWZcdTZmYjBcdTZmYjVcdTZmYjZcdTZmYmNcdTZmYzVcdTZmYzdcdTZmYzhcdTZmY2EiXSxbIjhmYzlhMSIsIlx1NmZkYVx1NmZkZVx1NmZlOFx1NmZlOVx1NmZmMFx1NmZmNVx1NmZmOVx1NmZmY1x1NmZmZFx1NzAwMFx1NzAwNVx1''@;'; put 'put ''NzAwNlx1NzAwN1x1NzAwZFx1NzAxN1x1NzAyMFx1NzAyM1x1NzAyZlx1NzAzNFx1NzAzN1x1NzAzOVx1NzAzY1x1NzA0M1x1NzA0NFx1NzA0OFx1NzA0OVx1NzA0YVx1NzA0Ylx1NzA1NFx1NzA1NVx1NzA1ZFx1NzA1ZVx1NzA0ZVx1NzA2NFx1NzA2NVx1NzA2Y1x1NzA2ZVx1NzA3NVx1NzA3''@;'; put 'put ''Nlx1NzA3ZVx1NzA4MVx1NzA4NVx1NzA4Nlx1NzA5NCIsNCwiXHU3MDliXHU3MGE0XHU3MGFiXHU3MGIwXHU3MGIxXHU3MGI0XHU3MGI3XHU3MGNhXHU3MGQxXHU3MGQzXHU3MGQ0XHU3MGQ1XHU3MGQ2XHU3MGQ4XHU3MGRjXHU3MGU0XHU3MGZhXHU3MTAzIiw0LCJcdTcxMGJcdTcxMGNcdTcx''@;'; put 'put ''MGZcdTcxMWVcdTcxMjBcdTcxMmJcdTcxMmRcdTcxMmZcdTcxMzBcdTcxMzFcdTcxMzhcdTcxNDFcdTcxNDVcdTcxNDZcdTcxNDdcdTcxNGFcdTcxNGJcdTcxNTBcdTcxNTJcdTcxNTdcdTcxNWFcdTcxNWNcdTcxNWVcdTcxNjAiXSxbIjhmY2FhMSIsIlx1NzE2OFx1NzE3OVx1NzE4MFx1NzE4''@;'; put 'put ''NVx1NzE4N1x1NzE4Y1x1NzE5Mlx1NzE5YVx1NzE5Ylx1NzFhMFx1NzFhMlx1NzFhZlx1NzFiMFx1NzFiMlx1NzFiM1x1NzFiYVx1NzFiZlx1NzFjMFx1NzFjMVx1NzFjNFx1NzFjYlx1NzFjY1x1NzFkM1x1NzFkNlx1NzFkOVx1NzFkYVx1NzFkY1x1NzFmOFx1NzFmZVx1NzIwMFx1NzIwN1x1''@;'; put 'put ''NzIwOFx1NzIwOVx1NzIxM1x1NzIxN1x1NzIxYVx1NzIxZFx1NzIxZlx1NzIyNFx1NzIyYlx1NzIyZlx1NzIzNFx1NzIzOFx1NzIzOVx1NzI0MVx1NzI0Mlx1NzI0M1x1NzI0NVx1NzI0ZVx1NzI0Zlx1NzI1MFx1NzI1M1x1NzI1NVx1NzI1Nlx1NzI1YVx1NzI1Y1x1NzI1ZVx1NzI2MFx1NzI2''@;'; put 'put ''M1x1NzI2OFx1NzI2Ylx1NzI2ZVx1NzI2Zlx1NzI3MVx1NzI3N1x1NzI3OFx1NzI3Ylx1NzI3Y1x1NzI3Zlx1NzI4NFx1NzI4OVx1NzI4ZFx1NzI4ZVx1NzI5M1x1NzI5Ylx1NzJhOFx1NzJhZFx1NzJhZVx1NzJiMVx1NzJiNFx1NzJiZVx1NzJjMVx1NzJjN1x1NzJjOVx1NzJjY1x1NzJkNVx1''@;'; put 'put ''NzJkNlx1NzJkOFx1NzJkZlx1NzJlNVx1NzJmM1x1NzJmNFx1NzJmYVx1NzJmYiJdLFsiOGZjYmExIiwiXHU3MmZlXHU3MzAyXHU3MzA0XHU3MzA1XHU3MzA3XHU3MzBiXHU3MzBkXHU3MzEyXHU3MzEzXHU3MzE4XHU3MzE5XHU3MzFlXHU3MzIyXHU3MzI0XHU3MzI3XHU3MzI4XHU3MzJjXHU3''@;'; put 'put ''MzMxXHU3MzMyXHU3MzM1XHU3MzNhXHU3MzNiXHU3MzNkXHU3MzQzXHU3MzRkXHU3MzUwXHU3MzUyXHU3MzU2XHU3MzU4XHU3MzVkXHU3MzVlXHU3MzVmXHU3MzYwXHU3MzY2XHU3MzY3XHU3MzY5XHU3MzZiXHU3MzZjXHU3MzZlXHU3MzZmXHU3MzcxXHU3Mzc3XHU3Mzc5XHU3MzdjXHU3Mzgw''@;'; put 'put ''XHU3MzgxXHU3MzgzXHU3Mzg1XHU3Mzg2XHU3MzhlXHU3MzkwXHU3MzkzXHU3Mzk1XHU3Mzk3XHU3Mzk4XHU3MzljXHU3MzllXHU3MzlmXHU3M2EwXHU3M2EyXHU3M2E1XHU3M2E2XHU3M2FhXHU3M2FiXHU3M2FkXHU3M2I1XHU3M2I3XHU3M2I5XHU3M2JjXHU3M2JkXHU3M2JmXHU3M2M1XHU3''@;'; put 'put ''M2M2XHU3M2M5XHU3M2NiXHU3M2NjXHU3M2NmXHU3M2QyXHU3M2QzXHU3M2Q2XHU3M2Q5XHU3M2RkXHU3M2UxXHU3M2UzXHU3M2U2XHU3M2U3XHU3M2U5XHU3M2Y0XHU3M2Y1XHU3M2Y3XHU3M2Y5XHU3M2ZhXHU3M2ZiXHU3M2ZkIl0sWyI4ZmNjYTEiLCJcdTczZmZcdTc0MDBcdTc0MDFcdTc0''@;'; put 'put ''MDRcdTc0MDdcdTc0MGFcdTc0MTFcdTc0MWFcdTc0MWJcdTc0MjRcdTc0MjZcdTc0MjgiLDksIlx1NzQzOVx1NzQ0MFx1NzQ0M1x1NzQ0NFx1NzQ0Nlx1NzQ0N1x1NzQ0Ylx1NzQ0ZFx1NzQ1MVx1NzQ1Mlx1NzQ1N1x1NzQ1ZFx1NzQ2Mlx1NzQ2Nlx1NzQ2N1x1NzQ2OFx1NzQ2Ylx1NzQ2ZFx1''@;'; put 'put ''NzQ2ZVx1NzQ3MVx1NzQ3Mlx1NzQ4MFx1NzQ4MVx1NzQ4NVx1NzQ4Nlx1NzQ4N1x1NzQ4OVx1NzQ4Zlx1NzQ5MFx1NzQ5MVx1NzQ5Mlx1NzQ5OFx1NzQ5OVx1NzQ5YVx1NzQ5Y1x1NzQ5Zlx1NzRhMFx1NzRhMVx1NzRhM1x1NzRhNlx1NzRhOFx1NzRhOVx1NzRhYVx1NzRhYlx1NzRhZVx1NzRh''@;'; put 'put ''Zlx1NzRiMVx1NzRiMlx1NzRiNVx1NzRiOVx1NzRiYlx1NzRiZlx1NzRjOFx1NzRjOVx1NzRjY1x1NzRkMFx1NzRkM1x1NzRkOFx1NzRkYVx1NzRkYlx1NzRkZVx1NzRkZlx1NzRlNFx1NzRlOFx1NzRlYVx1NzRlYlx1NzRlZlx1NzRmNFx1NzRmYVx1NzRmYlx1NzRmY1x1NzRmZlx1NzUwNiJd''@;'; put 'put ''LFsiOGZjZGExIiwiXHU3NTEyXHU3NTE2XHU3NTE3XHU3NTIwXHU3NTIxXHU3NTI0XHU3NTI3XHU3NTI5XHU3NTJhXHU3NTJmXHU3NTM2XHU3NTM5XHU3NTNkXHU3NTNlXHU3NTNmXHU3NTQwXHU3NTQzXHU3NTQ3XHU3NTQ4XHU3NTRlXHU3NTUwXHU3NTUyXHU3NTU3XHU3NTVlXHU3NTVmXHU3''@;'; put 'put ''NTYxXHU3NTZmXHU3NTcxXHU3NTc5Iiw1LCJcdTc1ODFcdTc1ODVcdTc1OTBcdTc1OTJcdTc1OTNcdTc1OTVcdTc1OTlcdTc1OWNcdTc1YTJcdTc1YTRcdTc1YjRcdTc1YmFcdTc1YmZcdTc1YzBcdTc1YzFcdTc1YzRcdTc1YzZcdTc1Y2NcdTc1Y2VcdTc1Y2ZcdTc1ZDdcdTc1ZGNcdTc1ZGZc''@;'; put 'put ''dTc1ZTBcdTc1ZTFcdTc1ZTRcdTc1ZTdcdTc1ZWNcdTc1ZWVcdTc1ZWZcdTc1ZjFcdTc1ZjlcdTc2MDBcdTc2MDJcdTc2MDNcdTc2MDRcdTc2MDdcdTc2MDhcdTc2MGFcdTc2MGNcdTc2MGZcdTc2MTJcdTc2MTNcdTc2MTVcdTc2MTZcdTc2MTlcdTc2MWJcdTc2MWNcdTc2MWRcdTc2MWVcdTc2''@;'; put 'put ''MjNcdTc2MjVcdTc2MjZcdTc2MjlcdTc2MmRcdTc2MzJcdTc2MzNcdTc2MzVcdTc2MzhcdTc2MzkiXSxbIjhmY2VhMSIsIlx1NzYzYVx1NzYzY1x1NzY0YVx1NzY0MFx1NzY0MVx1NzY0M1x1NzY0NFx1NzY0NVx1NzY0OVx1NzY0Ylx1NzY1NVx1NzY1OVx1NzY1Zlx1NzY2NFx1NzY2NVx1NzY2''@;'; put 'put ''ZFx1NzY2ZVx1NzY2Zlx1NzY3MVx1NzY3NFx1NzY4MVx1NzY4NVx1NzY4Y1x1NzY4ZFx1NzY5NVx1NzY5Ylx1NzY5Y1x1NzY5ZFx1NzY5Zlx1NzZhMFx1NzZhMiIsNiwiXHU3NmFhXHU3NmFkXHU3NmJkXHU3NmMxXHU3NmM1XHU3NmM5XHU3NmNiXHU3NmNjXHU3NmNlXHU3NmQ0XHU3NmQ5XHU3''@;'; put 'put ''NmUwXHU3NmU2XHU3NmU4XHU3NmVjXHU3NmYwXHU3NmYxXHU3NmY2XHU3NmY5XHU3NmZjXHU3NzAwXHU3NzA2XHU3NzBhXHU3NzBlXHU3NzEyXHU3NzE0XHU3NzE1XHU3NzE3XHU3NzE5XHU3NzFhXHU3NzFjXHU3NzIyXHU3NzI4XHU3NzJkXHU3NzJlXHU3NzJmXHU3NzM0XHU3NzM1XHU3NzM2''@;'; put 'put ''XHU3NzM5XHU3NzNkXHU3NzNlXHU3NzQyXHU3NzQ1XHU3NzQ2XHU3NzRhXHU3NzRkXHU3NzRlXHU3NzRmXHU3NzUyXHU3NzU2XHU3NzU3XHU3NzVjXHU3NzVlXHU3NzVmXHU3NzYwXHU3NzYyIl0sWyI4ZmNmYTEiLCJcdTc3NjRcdTc3NjdcdTc3NmFcdTc3NmNcdTc3NzBcdTc3NzJcdTc3NzNc''@;'; put 'put ''dTc3NzRcdTc3N2FcdTc3N2RcdTc3ODBcdTc3ODRcdTc3OGNcdTc3OGRcdTc3OTRcdTc3OTVcdTc3OTZcdTc3OWFcdTc3OWZcdTc3YTJcdTc3YTdcdTc3YWFcdTc3YWVcdTc3YWZcdTc3YjFcdTc3YjVcdTc3YmVcdTc3YzNcdTc3YzlcdTc3ZDFcdTc3ZDJcdTc3ZDVcdTc3ZDlcdTc3ZGVcdTc3''@;'; put 'put ''ZGZcdTc3ZTBcdTc3ZTRcdTc3ZTZcdTc3ZWFcdTc3ZWNcdTc3ZjBcdTc3ZjFcdTc3ZjRcdTc3ZjhcdTc3ZmJcdTc4MDVcdTc4MDZcdTc4MDlcdTc4MGRcdTc4MGVcdTc4MTFcdTc4MWRcdTc4MjFcdTc4MjJcdTc4MjNcdTc4MmRcdTc4MmVcdTc4MzBcdTc4MzVcdTc4MzdcdTc4NDNcdTc4NDRc''@;'; put 'put ''dTc4NDdcdTc4NDhcdTc4NGNcdTc4NGVcdTc4NTJcdTc4NWNcdTc4NWVcdTc4NjBcdTc4NjFcdTc4NjNcdTc4NjRcdTc4NjhcdTc4NmFcdTc4NmVcdTc4N2FcdTc4N2VcdTc4OGFcdTc4OGZcdTc4OTRcdTc4OThcdTc4YTFcdTc4OWRcdTc4OWVcdTc4OWZcdTc4YTRcdTc4YThcdTc4YWNcdTc4''@;'; put 'put ''YWRcdTc4YjBcdTc4YjFcdTc4YjJcdTc4YjMiXSxbIjhmZDBhMSIsIlx1NzhiYlx1NzhiZFx1NzhiZlx1NzhjN1x1NzhjOFx1NzhjOVx1NzhjY1x1NzhjZVx1NzhkMlx1NzhkM1x1NzhkNVx1NzhkNlx1NzhlNFx1NzhkYlx1NzhkZlx1NzhlMFx1NzhlMVx1NzhlNlx1NzhlYVx1NzhmMlx1Nzhm''@;'; put 'put ''M1x1NzkwMFx1NzhmNlx1NzhmN1x1NzhmYVx1NzhmYlx1NzhmZlx1NzkwNlx1NzkwY1x1NzkxMFx1NzkxYVx1NzkxY1x1NzkxZVx1NzkxZlx1NzkyMFx1NzkyNVx1NzkyN1x1NzkyOVx1NzkyZFx1NzkzMVx1NzkzNFx1NzkzNVx1NzkzYlx1NzkzZFx1NzkzZlx1Nzk0NFx1Nzk0NVx1Nzk0Nlx1''@;'; put 'put ''Nzk0YVx1Nzk0Ylx1Nzk0Zlx1Nzk1MVx1Nzk1NFx1Nzk1OFx1Nzk1Ylx1Nzk1Y1x1Nzk2N1x1Nzk2OVx1Nzk2Ylx1Nzk3Mlx1Nzk3OVx1Nzk3Ylx1Nzk3Y1x1Nzk3ZVx1Nzk4Ylx1Nzk4Y1x1Nzk5MVx1Nzk5M1x1Nzk5NFx1Nzk5NVx1Nzk5Nlx1Nzk5OFx1Nzk5Ylx1Nzk5Y1x1NzlhMVx1Nzlh''@;'; put 'put ''OFx1NzlhOVx1NzlhYlx1NzlhZlx1NzliMVx1NzliNFx1NzliOFx1NzliYlx1NzljMlx1NzljNFx1NzljN1x1NzljOFx1NzljYVx1NzljZlx1NzlkNFx1NzlkNlx1NzlkYVx1NzlkZFx1NzlkZSJdLFsiOGZkMWExIiwiXHU3OWUwXHU3OWUyXHU3OWU1XHU3OWVhXHU3OWViXHU3OWVkXHU3OWYx''@;'; put 'put ''XHU3OWY4XHU3OWZjXHU3YTAyXHU3YTAzXHU3YTA3XHU3YTA5XHU3YTBhXHU3YTBjXHU3YTExXHU3YTE1XHU3YTFiXHU3YTFlXHU3YTIxXHU3YTI3XHU3YTJiXHU3YTJkXHU3YTJmXHU3YTMwXHU3YTM0XHU3YTM1XHU3YTM4XHU3YTM5XHU3YTNhXHU3YTQ0XHU3YTQ1XHU3YTQ3XHU3YTQ4XHU3''@;'; put 'put ''YTRjXHU3YTU1XHU3YTU2XHU3YTU5XHU3YTVjXHU3YTVkXHU3YTVmXHU3YTYwXHU3YTY1XHU3YTY3XHU3YTZhXHU3YTZkXHU3YTc1XHU3YTc4XHU3YTdlXHU3YTgwXHU3YTgyXHU3YTg1XHU3YTg2XHU3YThhXHU3YThiXHU3YTkwXHU3YTkxXHU3YTk0XHU3YTllXHU3YWEwXHU3YWEzXHU3YWFj''@;'; put 'put ''XHU3YWIzXHU3YWI1XHU3YWI5XHU3YWJiXHU3YWJjXHU3YWM2XHU3YWM5XHU3YWNjXHU3YWNlXHU3YWQxXHU3YWRiXHU3YWU4XHU3YWU5XHU3YWViXHU3YWVjXHU3YWYxXHU3YWY0XHU3YWZiXHU3YWZkXHU3YWZlXHU3YjA3XHU3YjE0XHU3YjFmXHU3YjIzXHU3YjI3XHU3YjI5XHU3YjJhXHU3''@;'; put 'put ''YjJiXHU3YjJkXHU3YjJlXHU3YjJmXHU3YjMwIl0sWyI4ZmQyYTEiLCJcdTdiMzFcdTdiMzRcdTdiM2RcdTdiM2ZcdTdiNDBcdTdiNDFcdTdiNDdcdTdiNGVcdTdiNTVcdTdiNjBcdTdiNjRcdTdiNjZcdTdiNjlcdTdiNmFcdTdiNmRcdTdiNmZcdTdiNzJcdTdiNzNcdTdiNzdcdTdiODRcdTdi''@;'; put 'put ''ODlcdTdiOGVcdTdiOTBcdTdiOTFcdTdiOTZcdTdiOWJcdTdiOWVcdTdiYTBcdTdiYTVcdTdiYWNcdTdiYWZcdTdiYjBcdTdiYjJcdTdiYjVcdTdiYjZcdTdiYmFcdTdiYmJcdTdiYmNcdTdiYmRcdTdiYzJcdTdiYzVcdTdiYzhcdTdiY2FcdTdiZDRcdTdiZDZcdTdiZDdcdTdiZDlcdTdiZGFc''@;'; put 'put ''dTdiZGJcdTdiZThcdTdiZWFcdTdiZjJcdTdiZjRcdTdiZjVcdTdiZjhcdTdiZjlcdTdiZmFcdTdiZmNcdTdiZmVcdTdjMDFcdTdjMDJcdTdjMDNcdTdjMDRcdTdjMDZcdTdjMDlcdTdjMGJcdTdjMGNcdTdjMGVcdTdjMGZcdTdjMTlcdTdjMWJcdTdjMjBcdTdjMjVcdTdjMjZcdTdjMjhcdTdj''@;'; put 'put ''MmNcdTdjMzFcdTdjMzNcdTdjMzRcdTdjMzZcdTdjMzlcdTdjM2FcdTdjNDZcdTdjNGFcdTdjNTVcdTdjNTFcdTdjNTJcdTdjNTNcdTdjNTkiLDVdLFsiOGZkM2ExIiwiXHU3YzYxXHU3YzYzXHU3YzY3XHU3YzY5XHU3YzZkXHU3YzZlXHU3YzcwXHU3YzcyXHU3Yzc5XHU3YzdjXHU3YzdkXHU3''@;'; put 'put ''Yzg2XHU3Yzg3XHU3YzhmXHU3Yzk0XHU3YzllXHU3Y2EwXHU3Y2E2XHU3Y2IwXHU3Y2I2XHU3Y2I3XHU3Y2JhXHU3Y2JiXHU3Y2JjXHU3Y2JmXHU3Y2M0XHU3Y2M3XHU3Y2M4XHU3Y2M5XHU3Y2NkXHU3Y2NmXHU3Y2QzXHU3Y2Q0XHU3Y2Q1XHU3Y2Q3XHU3Y2Q5XHU3Y2RhXHU3Y2RkXHU3Y2U2''@;'; put 'put ''XHU3Y2U5XHU3Y2ViXHU3Y2Y1XHU3ZDAzXHU3ZDA3XHU3ZDA4XHU3ZDA5XHU3ZDBmXHU3ZDExXHU3ZDEyXHU3ZDEzXHU3ZDE2XHU3ZDFkXHU3ZDFlXHU3ZDIzXHU3ZDI2XHU3ZDJhXHU3ZDJkXHU3ZDMxXHU3ZDNjXHU3ZDNkXHU3ZDNlXHU3ZDQwXHU3ZDQxXHU3ZDQ3XHU3ZDQ4XHU3ZDRkXHU3''@;'; put 'put ''ZDUxXHU3ZDUzXHU3ZDU3XHU3ZDU5XHU3ZDVhXHU3ZDVjXHU3ZDVkXHU3ZDY1XHU3ZDY3XHU3ZDZhXHU3ZDcwXHU3ZDc4XHU3ZDdhXHU3ZDdiXHU3ZDdmXHU3ZDgxXHU3ZDgyXHU3ZDgzXHU3ZDg1XHU3ZDg2XHU3ZDg4XHU3ZDhiXHU3ZDhjXHU3ZDhkXHU3ZDkxXHU3ZDk2XHU3ZDk3XHU3ZDlk''@;'; put 'put ''Il0sWyI4ZmQ0YTEiLCJcdTdkOWVcdTdkYTZcdTdkYTdcdTdkYWFcdTdkYjNcdTdkYjZcdTdkYjdcdTdkYjlcdTdkYzIiLDQsIlx1N2RjY1x1N2RjZFx1N2RjZVx1N2RkN1x1N2RkOVx1N2UwMFx1N2RlMlx1N2RlNVx1N2RlNlx1N2RlYVx1N2RlYlx1N2RlZFx1N2RmMVx1N2RmNVx1N2RmNlx1''@;'; put 'put ''N2RmOVx1N2RmYVx1N2UwOFx1N2UxMFx1N2UxMVx1N2UxNVx1N2UxN1x1N2UxY1x1N2UxZFx1N2UyMFx1N2UyN1x1N2UyOFx1N2UyY1x1N2UyZFx1N2UyZlx1N2UzM1x1N2UzNlx1N2UzZlx1N2U0NFx1N2U0NVx1N2U0N1x1N2U0ZVx1N2U1MFx1N2U1Mlx1N2U1OFx1N2U1Zlx1N2U2MVx1N2U2''@;'; put 'put ''Mlx1N2U2NVx1N2U2Ylx1N2U2ZVx1N2U2Zlx1N2U3M1x1N2U3OFx1N2U3ZVx1N2U4MVx1N2U4Nlx1N2U4N1x1N2U4YVx1N2U4ZFx1N2U5MVx1N2U5NVx1N2U5OFx1N2U5YVx1N2U5ZFx1N2U5ZVx1N2YzY1x1N2YzYlx1N2YzZFx1N2YzZVx1N2YzZlx1N2Y0M1x1N2Y0NFx1N2Y0N1x1N2Y0Zlx1''@;'; put 'put ''N2Y1Mlx1N2Y1M1x1N2Y1Ylx1N2Y1Y1x1N2Y1ZFx1N2Y2MVx1N2Y2M1x1N2Y2NFx1N2Y2NVx1N2Y2Nlx1N2Y2ZCJdLFsiOGZkNWExIiwiXHU3ZjcxXHU3ZjdkXHU3ZjdlXHU3ZjdmXHU3ZjgwXHU3ZjhiXHU3ZjhkXHU3ZjhmXHU3ZjkwXHU3ZjkxXHU3Zjk2XHU3Zjk3XHU3ZjljXHU3ZmExXHU3''@;'; put 'put ''ZmEyXHU3ZmE2XHU3ZmFhXHU3ZmFkXHU3ZmI0XHU3ZmJjXHU3ZmJmXHU3ZmMwXHU3ZmMzXHU3ZmM4XHU3ZmNlXHU3ZmNmXHU3ZmRiXHU3ZmRmXHU3ZmUzXHU3ZmU1XHU3ZmU4XHU3ZmVjXHU3ZmVlXHU3ZmVmXHU3ZmYyXHU3ZmZhXHU3ZmZkXHU3ZmZlXHU3ZmZmXHU4MDA3XHU4MDA4XHU4MDBh''@;'; put 'put ''XHU4MDBkXHU4MDBlXHU4MDBmXHU4MDExXHU4MDEzXHU4MDE0XHU4MDE2XHU4MDFkXHU4MDFlXHU4MDFmXHU4MDIwXHU4MDI0XHU4MDI2XHU4MDJjXHU4MDJlXHU4MDMwXHU4MDM0XHU4MDM1XHU4MDM3XHU4MDM5XHU4MDNhXHU4MDNjXHU4MDNlXHU4MDQwXHU4MDQ0XHU4MDYwXHU4MDY0XHU4''@;'; put 'put ''MDY2XHU4MDZkXHU4MDcxXHU4MDc1XHU4MDgxXHU4MDg4XHU4MDhlXHU4MDljXHU4MDllXHU4MGE2XHU4MGE3XHU4MGFiXHU4MGI4XHU4MGI5XHU4MGM4XHU4MGNkXHU4MGNmXHU4MGQyXHU4MGQ0XHU4MGQ1XHU4MGQ3XHU4MGQ4XHU4MGUwXHU4MGVkXHU4MGVlIl0sWyI4ZmQ2YTEiLCJcdTgw''@;'; put 'put ''ZjBcdTgwZjJcdTgwZjNcdTgwZjZcdTgwZjlcdTgwZmFcdTgwZmVcdTgxMDNcdTgxMGJcdTgxMTZcdTgxMTdcdTgxMThcdTgxMWNcdTgxMWVcdTgxMjBcdTgxMjRcdTgxMjdcdTgxMmNcdTgxMzBcdTgxMzVcdTgxM2FcdTgxM2NcdTgxNDVcdTgxNDdcdTgxNGFcdTgxNGNcdTgxNTJcdTgxNTdc''@;'; put 'put ''dTgxNjBcdTgxNjFcdTgxNjdcdTgxNjhcdTgxNjlcdTgxNmRcdTgxNmZcdTgxNzdcdTgxODFcdTgxOTBcdTgxODRcdTgxODVcdTgxODZcdTgxOGJcdTgxOGVcdTgxOTZcdTgxOThcdTgxOWJcdTgxOWVcdTgxYTJcdTgxYWVcdTgxYjJcdTgxYjRcdTgxYmJcdTgxY2JcdTgxYzNcdTgxYzVcdTgx''@;'; put 'put ''Y2FcdTgxY2VcdTgxY2ZcdTgxZDVcdTgxZDdcdTgxZGJcdTgxZGRcdTgxZGVcdTgxZTFcdTgxZTRcdTgxZWJcdTgxZWNcdTgxZjBcdTgxZjFcdTgxZjJcdTgxZjVcdTgxZjZcdTgxZjhcdTgxZjlcdTgxZmRcdTgxZmZcdTgyMDBcdTgyMDNcdTgyMGZcdTgyMTNcdTgyMTRcdTgyMTlcdTgyMWFc''@;'; put 'put ''dTgyMWRcdTgyMjFcdTgyMjJcdTgyMjhcdTgyMzJcdTgyMzRcdTgyM2FcdTgyNDNcdTgyNDRcdTgyNDVcdTgyNDYiXSxbIjhmZDdhMSIsIlx1ODI0Ylx1ODI0ZVx1ODI0Zlx1ODI1MVx1ODI1Nlx1ODI1Y1x1ODI2MFx1ODI2M1x1ODI2N1x1ODI2ZFx1ODI3NFx1ODI3Ylx1ODI3ZFx1ODI3Zlx1''@;'; put 'put ''ODI4MFx1ODI4MVx1ODI4M1x1ODI4NFx1ODI4N1x1ODI4OVx1ODI4YVx1ODI4ZVx1ODI5MVx1ODI5NFx1ODI5Nlx1ODI5OFx1ODI5YVx1ODI5Ylx1ODJhMFx1ODJhMVx1ODJhM1x1ODJhNFx1ODJhN1x1ODJhOFx1ODJhOVx1ODJhYVx1ODJhZVx1ODJiMFx1ODJiMlx1ODJiNFx1ODJiN1x1ODJi''@;'; put 'put ''YVx1ODJiY1x1ODJiZVx1ODJiZlx1ODJjNlx1ODJkMFx1ODJkNVx1ODJkYVx1ODJlMFx1ODJlMlx1ODJlNFx1ODJlOFx1ODJlYVx1ODJlZFx1ODJlZlx1ODJmNlx1ODJmN1x1ODJmZFx1ODJmZVx1ODMwMFx1ODMwMVx1ODMwN1x1ODMwOFx1ODMwYVx1ODMwYlx1ODM1NFx1ODMxYlx1ODMxZFx1''@;'; put 'put ''ODMxZVx1ODMxZlx1ODMyMVx1ODMyMlx1ODMyY1x1ODMyZFx1ODMyZVx1ODMzMFx1ODMzM1x1ODMzN1x1ODMzYVx1ODMzY1x1ODMzZFx1ODM0Mlx1ODM0M1x1ODM0NFx1ODM0N1x1ODM0ZFx1ODM0ZVx1ODM1MVx1ODM1NVx1ODM1Nlx1ODM1N1x1ODM3MFx1ODM3OCJdLFsiOGZkOGExIiwiXHU4''@;'; put 'put ''MzdkXHU4MzdmXHU4MzgwXHU4MzgyXHU4Mzg0XHU4Mzg2XHU4MzhkXHU4MzkyXHU4Mzk0XHU4Mzk1XHU4Mzk4XHU4Mzk5XHU4MzliXHU4MzljXHU4MzlkXHU4M2E2XHU4M2E3XHU4M2E5XHU4M2FjXHU4M2JlXHU4M2JmXHU4M2MwXHU4M2M3XHU4M2M5XHU4M2NmXHU4M2QwXHU4M2QxXHU4M2Q0''@;'; put 'put ''XHU4M2RkXHU4MzUzXHU4M2U4XHU4M2VhXHU4M2Y2XHU4M2Y4XHU4M2Y5XHU4M2ZjXHU4NDAxXHU4NDA2XHU4NDBhXHU4NDBmXHU4NDExXHU4NDE1XHU4NDE5XHU4M2FkXHU4NDJmXHU4NDM5XHU4NDQ1XHU4NDQ3XHU4NDQ4XHU4NDRhXHU4NDRkXHU4NDRmXHU4NDUxXHU4NDUyXHU4NDU2XHU4''@;'; put 'put ''NDU4XHU4NDU5XHU4NDVhXHU4NDVjXHU4NDYwXHU4NDY0XHU4NDY1XHU4NDY3XHU4NDZhXHU4NDcwXHU4NDczXHU4NDc0XHU4NDc2XHU4NDc4XHU4NDdjXHU4NDdkXHU4NDgxXHU4NDg1XHU4NDkyXHU4NDkzXHU4NDk1XHU4NDllXHU4NGE2XHU4NGE4XHU4NGE5XHU4NGFhXHU4NGFmXHU4NGIx''@;'; put 'put ''XHU4NGI0XHU4NGJhXHU4NGJkXHU4NGJlXHU4NGMwXHU4NGMyXHU4NGM3XHU4NGM4XHU4NGNjXHU4NGNmXHU4NGQzIl0sWyI4ZmQ5YTEiLCJcdTg0ZGNcdTg0ZTdcdTg0ZWFcdTg0ZWZcdTg0ZjBcdTg0ZjFcdTg0ZjJcdTg0ZjdcdTg1MzJcdTg0ZmFcdTg0ZmJcdTg0ZmRcdTg1MDJcdTg1MDNc''@;'; put 'put ''dTg1MDdcdTg1MGNcdTg1MGVcdTg1MTBcdTg1MWNcdTg1MWVcdTg1MjJcdTg1MjNcdTg1MjRcdTg1MjVcdTg1MjdcdTg1MmFcdTg1MmJcdTg1MmZcdTg1MzNcdTg1MzRcdTg1MzZcdTg1M2ZcdTg1NDZcdTg1NGYiLDQsIlx1ODU1Nlx1ODU1OVx1ODU1YyIsNiwiXHU4NTY0XHU4NTZiXHU4NTZm''@;'; put 'put ''XHU4NTc5XHU4NTdhXHU4NTdiXHU4NTdkXHU4NTdmXHU4NTgxXHU4NTg1XHU4NTg2XHU4NTg5XHU4NThiXHU4NThjXHU4NThmXHU4NTkzXHU4NTk4XHU4NTlkXHU4NTlmXHU4NWEwXHU4NWEyXHU4NWE1XHU4NWE3XHU4NWI0XHU4NWI2XHU4NWI3XHU4NWI4XHU4NWJjXHU4NWJkXHU4NWJlXHU4''@;'; put 'put ''NWJmXHU4NWMyXHU4NWM3XHU4NWNhXHU4NWNiXHU4NWNlXHU4NWFkXHU4NWQ4XHU4NWRhXHU4NWRmXHU4NWUwXHU4NWU2XHU4NWU4XHU4NWVkXHU4NWYzXHU4NWY2XHU4NWZjIl0sWyI4ZmRhYTEiLCJcdTg1ZmZcdTg2MDBcdTg2MDRcdTg2MDVcdTg2MGRcdTg2MGVcdTg2MTBcdTg2MTFcdTg2''@;'; put 'put ''MTJcdTg2MThcdTg2MTlcdTg2MWJcdTg2MWVcdTg2MjFcdTg2MjdcdTg2MjlcdTg2MzZcdTg2MzhcdTg2M2FcdTg2M2NcdTg2M2RcdTg2NDBcdTg2NDJcdTg2NDZcdTg2NTJcdTg2NTNcdTg2NTZcdTg2NTdcdTg2NThcdTg2NTlcdTg2NWRcdTg2NjAiLDQsIlx1ODY2OVx1ODY2Y1x1ODY2Zlx1''@;'; put 'put ''ODY3NVx1ODY3Nlx1ODY3N1x1ODY3YVx1ODY4ZFx1ODY5MVx1ODY5Nlx1ODY5OFx1ODY5YVx1ODY5Y1x1ODZhMVx1ODZhNlx1ODZhN1x1ODZhOFx1ODZhZFx1ODZiMVx1ODZiM1x1ODZiNFx1ODZiNVx1ODZiN1x1ODZiOFx1ODZiOVx1ODZiZlx1ODZjMFx1ODZjMVx1ODZjM1x1ODZjNVx1ODZk''@;'; put 'put ''MVx1ODZkMlx1ODZkNVx1ODZkN1x1ODZkYVx1ODZkY1x1ODZlMFx1ODZlM1x1ODZlNVx1ODZlN1x1ODY4OFx1ODZmYVx1ODZmY1x1ODZmZFx1ODcwNFx1ODcwNVx1ODcwN1x1ODcwYlx1ODcwZVx1ODcwZlx1ODcxMFx1ODcxM1x1ODcxNFx1ODcxOVx1ODcxZVx1ODcxZlx1ODcyMVx1ODcyMyJd''@;'; put 'put ''LFsiOGZkYmExIiwiXHU4NzI4XHU4NzJlXHU4NzJmXHU4NzMxXHU4NzMyXHU4NzM5XHU4NzNhXHU4NzNjXHU4NzNkXHU4NzNlXHU4NzQwXHU4NzQzXHU4NzQ1XHU4NzRkXHU4NzU4XHU4NzVkXHU4NzYxXHU4NzY0XHU4NzY1XHU4NzZmXHU4NzcxXHU4NzcyXHU4NzdiXHU4NzgzIiw2LCJcdTg3''@;'; put 'put ''OGJcdTg3OGNcdTg3OTBcdTg3OTNcdTg3OTVcdTg3OTdcdTg3OThcdTg3OTlcdTg3OWVcdTg3YTBcdTg3YTNcdTg3YTdcdTg3YWNcdTg3YWRcdTg3YWVcdTg3YjFcdTg3YjVcdTg3YmVcdTg3YmZcdTg3YzFcdTg3YzhcdTg3YzlcdTg3Y2FcdTg3Y2VcdTg3ZDVcdTg3ZDZcdTg3ZDlcdTg3ZGFc''@;'; put 'put ''dTg3ZGNcdTg3ZGZcdTg3ZTJcdTg3ZTNcdTg3ZTRcdTg3ZWFcdTg3ZWJcdTg3ZWRcdTg3ZjFcdTg3ZjNcdTg3ZjhcdTg3ZmFcdTg3ZmZcdTg4MDFcdTg4MDNcdTg4MDZcdTg4MDlcdTg4MGFcdTg4MGJcdTg4MTBcdTg4MTlcdTg4MTJcdTg4MTNcdTg4MTRcdTg4MThcdTg4MWFcdTg4MWJcdTg4''@;'; put 'put ''MWNcdTg4MWVcdTg4MWZcdTg4MjhcdTg4MmRcdTg4MmVcdTg4MzBcdTg4MzJcdTg4MzUiXSxbIjhmZGNhMSIsIlx1ODgzYVx1ODgzY1x1ODg0MVx1ODg0M1x1ODg0NVx1ODg0OFx1ODg0OVx1ODg0YVx1ODg0Ylx1ODg0ZVx1ODg1MVx1ODg1NVx1ODg1Nlx1ODg1OFx1ODg1YVx1ODg1Y1x1ODg1''@;'; put 'put ''Zlx1ODg2MFx1ODg2NFx1ODg2OVx1ODg3MVx1ODg3OVx1ODg3Ylx1ODg4MFx1ODg5OFx1ODg5YVx1ODg5Ylx1ODg5Y1x1ODg5Zlx1ODhhMFx1ODhhOFx1ODhhYVx1ODhiYVx1ODhiZFx1ODhiZVx1ODhjMFx1ODhjYSIsNCwiXHU4OGQxXHU4OGQyXHU4OGQzXHU4OGRiXHU4OGRlXHU4OGU3XHU4''@;'; put 'put ''OGVmXHU4OGYwXHU4OGYxXHU4OGY1XHU4OGY3XHU4OTAxXHU4OTA2XHU4OTBkXHU4OTBlXHU4OTBmXHU4OTE1XHU4OTE2XHU4OTE4XHU4OTE5XHU4OTFhXHU4OTFjXHU4OTIwXHU4OTI2XHU4OTI3XHU4OTI4XHU4OTMwXHU4OTMxXHU4OTMyXHU4OTM1XHU4OTM5XHU4OTNhXHU4OTNlXHU4OTQw''@;'; put 'put ''XHU4OTQyXHU4OTQ1XHU4OTQ2XHU4OTQ5XHU4OTRmXHU4OTUyXHU4OTU3XHU4OTVhXHU4OTViXHU4OTVjXHU4OTYxXHU4OTYyXHU4OTYzXHU4OTZiXHU4OTZlXHU4OTcwXHU4OTczXHU4OTc1XHU4OTdhIl0sWyI4ZmRkYTEiLCJcdTg5N2JcdTg5N2NcdTg5N2RcdTg5ODlcdTg5OGRcdTg5OTBc''@;'; put 'put ''dTg5OTRcdTg5OTVcdTg5OWJcdTg5OWNcdTg5OWZcdTg5YTBcdTg5YTVcdTg5YjBcdTg5YjRcdTg5YjVcdTg5YjZcdTg5YjdcdTg5YmNcdTg5ZDQiLDQsIlx1ODllNVx1ODllOVx1ODllYlx1ODllZFx1ODlmMVx1ODlmM1x1ODlmNlx1ODlmOVx1ODlmZFx1ODlmZlx1OGEwNFx1OGEwNVx1OGEw''@;'; put 'put ''N1x1OGEwZlx1OGExMVx1OGExMlx1OGExNFx1OGExNVx1OGExZVx1OGEyMFx1OGEyMlx1OGEyNFx1OGEyNlx1OGEyYlx1OGEyY1x1OGEyZlx1OGEzNVx1OGEzN1x1OGEzZFx1OGEzZVx1OGE0MFx1OGE0M1x1OGE0NVx1OGE0N1x1OGE0OVx1OGE0ZFx1OGE0ZVx1OGE1M1x1OGE1Nlx1OGE1N1x1''@;'; put 'put ''OGE1OFx1OGE1Y1x1OGE1ZFx1OGE2MVx1OGE2NVx1OGE2N1x1OGE3NVx1OGE3Nlx1OGE3N1x1OGE3OVx1OGE3YVx1OGE3Ylx1OGE3ZVx1OGE3Zlx1OGE4MFx1OGE4M1x1OGE4Nlx1OGE4Ylx1OGE4Zlx1OGE5MFx1OGE5Mlx1OGE5Nlx1OGE5N1x1OGE5OVx1OGE5Zlx1OGFhN1x1OGFhOVx1OGFh''@;'; put 'put ''ZVx1OGFhZlx1OGFiMyJdLFsiOGZkZWExIiwiXHU4YWI2XHU4YWI3XHU4YWJiXHU4YWJlXHU4YWMzXHU4YWM2XHU4YWM4XHU4YWM5XHU4YWNhXHU4YWQxXHU4YWQzXHU4YWQ0XHU4YWQ1XHU4YWQ3XHU4YWRkXHU4YWRmXHU4YWVjXHU4YWYwXHU4YWY0XHU4YWY1XHU4YWY2XHU4YWZjXHU4YWZm''@;'; put 'put ''XHU4YjA1XHU4YjA2XHU4YjBiXHU4YjExXHU4YjFjXHU4YjFlXHU4YjFmXHU4YjBhXHU4YjJkXHU4YjMwXHU4YjM3XHU4YjNjXHU4YjQyIiw0LCJcdThiNDhcdThiNTJcdThiNTNcdThiNTRcdThiNTlcdThiNGRcdThiNWVcdThiNjNcdThiNmRcdThiNzZcdThiNzhcdThiNzlcdThiN2NcdThi''@;'; put 'put ''N2VcdThiODFcdThiODRcdThiODVcdThiOGJcdThiOGRcdThiOGZcdThiOTRcdThiOTVcdThiOWNcdThiOWVcdThiOWZcdThjMzhcdThjMzlcdThjM2RcdThjM2VcdThjNDVcdThjNDdcdThjNDlcdThjNGJcdThjNGZcdThjNTFcdThjNTNcdThjNTRcdThjNTdcdThjNThcdThjNWJcdThjNWRc''@;'; put 'put ''dThjNTlcdThjNjNcdThjNjRcdThjNjZcdThjNjhcdThjNjlcdThjNmRcdThjNzNcdThjNzVcdThjNzZcdThjN2JcdThjN2VcdThjODYiXSxbIjhmZGZhMSIsIlx1OGM4N1x1OGM4Ylx1OGM5MFx1OGM5Mlx1OGM5M1x1OGM5OVx1OGM5Ylx1OGM5Y1x1OGNhNFx1OGNiOVx1OGNiYVx1OGNjNVx1''@;'; put 'put ''OGNjNlx1OGNjOVx1OGNjYlx1OGNjZlx1OGNkNlx1OGNkNVx1OGNkOVx1OGNkZFx1OGNlMVx1OGNlOFx1OGNlY1x1OGNlZlx1OGNmMFx1OGNmMlx1OGNmNVx1OGNmN1x1OGNmOFx1OGNmZVx1OGNmZlx1OGQwMVx1OGQwM1x1OGQwOVx1OGQxMlx1OGQxN1x1OGQxYlx1OGQ2NVx1OGQ2OVx1OGQ2''@;'; put 'put ''Y1x1OGQ2ZVx1OGQ3Zlx1OGQ4Mlx1OGQ4NFx1OGQ4OFx1OGQ4ZFx1OGQ5MFx1OGQ5MVx1OGQ5NVx1OGQ5ZVx1OGQ5Zlx1OGRhMFx1OGRhNlx1OGRhYlx1OGRhY1x1OGRhZlx1OGRiMlx1OGRiNVx1OGRiN1x1OGRiOVx1OGRiYlx1OGRjMFx1OGRjNVx1OGRjNlx1OGRjN1x1OGRjOFx1OGRjYVx1''@;'; put 'put ''OGRjZVx1OGRkMVx1OGRkNFx1OGRkNVx1OGRkN1x1OGRkOVx1OGRlNFx1OGRlNVx1OGRlN1x1OGRlY1x1OGRmMFx1OGRiY1x1OGRmMVx1OGRmMlx1OGRmNFx1OGRmZFx1OGUwMVx1OGUwNFx1OGUwNVx1OGUwNlx1OGUwYlx1OGUxMVx1OGUxNFx1OGUxNlx1OGUyMFx1OGUyMVx1OGUyMiJdLFsi''@;'; put 'put ''OGZlMGExIiwiXHU4ZTIzXHU4ZTI2XHU4ZTI3XHU4ZTMxXHU4ZTMzXHU4ZTM2XHU4ZTM3XHU4ZTM4XHU4ZTM5XHU4ZTNkXHU4ZTQwXHU4ZTQxXHU4ZTRiXHU4ZTRkXHU4ZTRlXHU4ZTRmXHU4ZTU0XHU4ZTViXHU4ZTVjXHU4ZTVkXHU4ZTVlXHU4ZTYxXHU4ZTYyXHU4ZTY5XHU4ZTZjXHU4ZTZk''@;'; put 'put ''XHU4ZTZmXHU4ZTcwXHU4ZTcxXHU4ZTc5XHU4ZTdhXHU4ZTdiXHU4ZTgyXHU4ZTgzXHU4ZTg5XHU4ZTkwXHU4ZTkyXHU4ZTk1XHU4ZTlhXHU4ZTliXHU4ZTlkXHU4ZTllXHU4ZWEyXHU4ZWE3XHU4ZWE5XHU4ZWFkXHU4ZWFlXHU4ZWIzXHU4ZWI1XHU4ZWJhXHU4ZWJiXHU4ZWMwXHU4ZWMxXHU4''@;'; put 'put ''ZWMzXHU4ZWM0XHU4ZWM3XHU4ZWNmXHU4ZWQxXHU4ZWQ0XHU4ZWRjXHU4ZWU4XHU4ZWVlXHU4ZWYwXHU4ZWYxXHU4ZWY3XHU4ZWY5XHU4ZWZhXHU4ZWVkXHU4ZjAwXHU4ZjAyXHU4ZjA3XHU4ZjA4XHU4ZjBmXHU4ZjEwXHU4ZjE2XHU4ZjE3XHU4ZjE4XHU4ZjFlXHU4ZjIwXHU4ZjIxXHU4ZjIz''@;'; put 'put ''XHU4ZjI1XHU4ZjI3XHU4ZjI4XHU4ZjJjXHU4ZjJkXHU4ZjJlXHU4ZjM0XHU4ZjM1XHU4ZjM2XHU4ZjM3XHU4ZjNhXHU4ZjQwXHU4ZjQxIl0sWyI4ZmUxYTEiLCJcdThmNDNcdThmNDdcdThmNGZcdThmNTEiLDQsIlx1OGY1OFx1OGY1ZFx1OGY1ZVx1OGY2NVx1OGY5ZFx1OGZhMFx1OGZhMVx1''@;'; put 'put ''OGZhNFx1OGZhNVx1OGZhNlx1OGZiNVx1OGZiNlx1OGZiOFx1OGZiZVx1OGZjMFx1OGZjMVx1OGZjNlx1OGZjYVx1OGZjYlx1OGZjZFx1OGZkMFx1OGZkMlx1OGZkM1x1OGZkNVx1OGZlMFx1OGZlM1x1OGZlNFx1OGZlOFx1OGZlZVx1OGZmMVx1OGZmNVx1OGZmNlx1OGZmYlx1OGZmZVx1OTAw''@;'; put 'put ''Mlx1OTAwNFx1OTAwOFx1OTAwY1x1OTAxOFx1OTAxYlx1OTAyOFx1OTAyOVx1OTAyZlx1OTAyYVx1OTAyY1x1OTAyZFx1OTAzM1x1OTAzNFx1OTAzN1x1OTAzZlx1OTA0M1x1OTA0NFx1OTA0Y1x1OTA1Ylx1OTA1ZFx1OTA2Mlx1OTA2Nlx1OTA2N1x1OTA2Y1x1OTA3MFx1OTA3NFx1OTA3OVx1''@;'; put 'put ''OTA4NVx1OTA4OFx1OTA4Ylx1OTA4Y1x1OTA4ZVx1OTA5MFx1OTA5NVx1OTA5N1x1OTA5OFx1OTA5OVx1OTA5Ylx1OTBhMFx1OTBhMVx1OTBhMlx1OTBhNVx1OTBiMFx1OTBiMlx1OTBiM1x1OTBiNFx1OTBiNlx1OTBiZFx1OTBjY1x1OTBiZVx1OTBjMyJdLFsiOGZlMmExIiwiXHU5MGM0XHU5''@;'; put 'put ''MGM1XHU5MGM3XHU5MGM4XHU5MGQ1XHU5MGQ3XHU5MGQ4XHU5MGQ5XHU5MGRjXHU5MGRkXHU5MGRmXHU5MGU1XHU5MGQyXHU5MGY2XHU5MGViXHU5MGVmXHU5MGYwXHU5MGY0XHU5MGZlXHU5MGZmXHU5MTAwXHU5MTA0XHU5MTA1XHU5MTA2XHU5MTA4XHU5MTBkXHU5MTEwXHU5MTE0XHU5MTE2''@;'; put 'put ''XHU5MTE3XHU5MTE4XHU5MTFhXHU5MTFjXHU5MTFlXHU5MTIwXHU5MTI1XHU5MTIyXHU5MTIzXHU5MTI3XHU5MTI5XHU5MTJlXHU5MTJmXHU5MTMxXHU5MTM0XHU5MTM2XHU5MTM3XHU5MTM5XHU5MTNhXHU5MTNjXHU5MTNkXHU5MTQzXHU5MTQ3XHU5MTQ4XHU5MTRmXHU5MTUzXHU5MTU3XHU5''@;'; put 'put ''MTU5XHU5MTVhXHU5MTViXHU5MTYxXHU5MTY0XHU5MTY3XHU5MTZkXHU5MTc0XHU5MTc5XHU5MTdhXHU5MTdiXHU5MTgxXHU5MTgzXHU5MTg1XHU5MTg2XHU5MThhXHU5MThlXHU5MTkxXHU5MTkzXHU5MTk0XHU5MTk1XHU5MTk4XHU5MTllXHU5MWExXHU5MWE2XHU5MWE4XHU5MWFjXHU5MWFk''@;'; put 'put ''XHU5MWFlXHU5MWIwXHU5MWIxXHU5MWIyXHU5MWIzXHU5MWI2XHU5MWJiXHU5MWJjXHU5MWJkXHU5MWJmIl0sWyI4ZmUzYTEiLCJcdTkxYzJcdTkxYzNcdTkxYzVcdTkxZDNcdTkxZDRcdTkxZDdcdTkxZDlcdTkxZGFcdTkxZGVcdTkxZTRcdTkxZTVcdTkxZTlcdTkxZWFcdTkxZWMiLDUsIlx1''@;'; put 'put ''OTFmN1x1OTFmOVx1OTFmYlx1OTFmZFx1OTIwMFx1OTIwMVx1OTIwNFx1OTIwNVx1OTIwNlx1OTIwN1x1OTIwOVx1OTIwYVx1OTIwY1x1OTIxMFx1OTIxMlx1OTIxM1x1OTIxNlx1OTIxOFx1OTIxY1x1OTIxZFx1OTIyM1x1OTIyNFx1OTIyNVx1OTIyNlx1OTIyOFx1OTIyZVx1OTIyZlx1OTIz''@;'; put 'put ''MFx1OTIzM1x1OTIzNVx1OTIzNlx1OTIzOFx1OTIzOVx1OTIzYVx1OTIzY1x1OTIzZVx1OTI0MFx1OTI0Mlx1OTI0M1x1OTI0Nlx1OTI0N1x1OTI0YVx1OTI0ZFx1OTI0ZVx1OTI0Zlx1OTI1MVx1OTI1OFx1OTI1OVx1OTI1Y1x1OTI1ZFx1OTI2MFx1OTI2MVx1OTI2NVx1OTI2N1x1OTI2OFx1''@;'; put 'put ''OTI2OVx1OTI2ZVx1OTI2Zlx1OTI3MFx1OTI3NSIsNCwiXHU5MjdiXHU5MjdjXHU5MjdkXHU5MjdmXHU5Mjg4XHU5Mjg5XHU5MjhhXHU5MjhkXHU5MjhlXHU5MjkyXHU5Mjk3Il0sWyI4ZmU0YTEiLCJcdTkyOTlcdTkyOWZcdTkyYTBcdTkyYTRcdTkyYTVcdTkyYTdcdTkyYThcdTkyYWJcdTky''@;'; put 'put ''YWZcdTkyYjJcdTkyYjZcdTkyYjhcdTkyYmFcdTkyYmJcdTkyYmNcdTkyYmRcdTkyYmYiLDQsIlx1OTJjNVx1OTJjNlx1OTJjN1x1OTJjOFx1OTJjYlx1OTJjY1x1OTJjZFx1OTJjZVx1OTJkMFx1OTJkM1x1OTJkNVx1OTJkN1x1OTJkOFx1OTJkOVx1OTJkY1x1OTJkZFx1OTJkZlx1OTJlMFx1''@;'; put 'put ''OTJlMVx1OTJlM1x1OTJlNVx1OTJlN1x1OTJlOFx1OTJlY1x1OTJlZVx1OTJmMFx1OTJmOVx1OTJmYlx1OTJmZlx1OTMwMFx1OTMwMlx1OTMwOFx1OTMwZFx1OTMxMVx1OTMxNFx1OTMxNVx1OTMxY1x1OTMxZFx1OTMxZVx1OTMxZlx1OTMyMVx1OTMyNFx1OTMyNVx1OTMyN1x1OTMyOVx1OTMy''@;'; put 'put ''YVx1OTMzM1x1OTMzNFx1OTMzNlx1OTMzN1x1OTM0N1x1OTM0OFx1OTM0OVx1OTM1MFx1OTM1MVx1OTM1Mlx1OTM1NVx1OTM1N1x1OTM1OFx1OTM1YVx1OTM1ZVx1OTM2NFx1OTM2NVx1OTM2N1x1OTM2OVx1OTM2YVx1OTM2ZFx1OTM2Zlx1OTM3MFx1OTM3MVx1OTM3M1x1OTM3NFx1OTM3NiJd''@;'; put 'put ''LFsiOGZlNWExIiwiXHU5MzdhXHU5MzdkXHU5MzdmXHU5MzgwXHU5MzgxXHU5MzgyXHU5Mzg4XHU5MzhhXHU5MzhiXHU5MzhkXHU5MzhmXHU5MzkyXHU5Mzk1XHU5Mzk4XHU5MzliXHU5MzllXHU5M2ExXHU5M2EzXHU5M2E0XHU5M2E2XHU5M2E4XHU5M2FiXHU5M2I0XHU5M2I1XHU5M2I2XHU5''@;'; put 'put ''M2JhXHU5M2E5XHU5M2MxXHU5M2M0XHU5M2M1XHU5M2M2XHU5M2M3XHU5M2M5Iiw0LCJcdTkzZDNcdTkzZDlcdTkzZGNcdTkzZGVcdTkzZGZcdTkzZTJcdTkzZTZcdTkzZTdcdTkzZjlcdTkzZjdcdTkzZjhcdTkzZmFcdTkzZmJcdTkzZmRcdTk0MDFcdTk0MDJcdTk0MDRcdTk0MDhcdTk0MDlc''@;'; put 'put ''dTk0MGRcdTk0MGVcdTk0MGZcdTk0MTVcdTk0MTZcdTk0MTdcdTk0MWZcdTk0MmVcdTk0MmZcdTk0MzFcdTk0MzJcdTk0MzNcdTk0MzRcdTk0M2JcdTk0M2ZcdTk0M2RcdTk0NDNcdTk0NDVcdTk0NDhcdTk0NGFcdTk0NGNcdTk0NTVcdTk0NTlcdTk0NWNcdTk0NWZcdTk0NjFcdTk0NjNcdTk0''@;'; put 'put ''NjhcdTk0NmJcdTk0NmRcdTk0NmVcdTk0NmZcdTk0NzFcdTk0NzJcdTk0ODRcdTk0ODNcdTk1NzhcdTk1NzkiXSxbIjhmZTZhMSIsIlx1OTU3ZVx1OTU4NFx1OTU4OFx1OTU4Y1x1OTU4ZFx1OTU4ZVx1OTU5ZFx1OTU5ZVx1OTU5Zlx1OTVhMVx1OTVhNlx1OTVhOVx1OTVhYlx1OTVhY1x1OTVi''@;'; put 'put ''NFx1OTViNlx1OTViYVx1OTViZFx1OTViZlx1OTVjNlx1OTVjOFx1OTVjOVx1OTVjYlx1OTVkMFx1OTVkMVx1OTVkMlx1OTVkM1x1OTVkOVx1OTVkYVx1OTVkZFx1OTVkZVx1OTVkZlx1OTVlMFx1OTVlNFx1OTVlNlx1OTYxZFx1OTYxZVx1OTYyMlx1OTYyNFx1OTYyNVx1OTYyNlx1OTYyY1x1''@;'; put 'put ''OTYzMVx1OTYzM1x1OTYzN1x1OTYzOFx1OTYzOVx1OTYzYVx1OTYzY1x1OTYzZFx1OTY0MVx1OTY1Mlx1OTY1NFx1OTY1Nlx1OTY1N1x1OTY1OFx1OTY2MVx1OTY2ZVx1OTY3NFx1OTY3Ylx1OTY3Y1x1OTY3ZVx1OTY3Zlx1OTY4MVx1OTY4Mlx1OTY4M1x1OTY4NFx1OTY4OVx1OTY5MVx1OTY5''@;'; put 'put ''Nlx1OTY5YVx1OTY5ZFx1OTY5Zlx1OTZhNFx1OTZhNVx1OTZhNlx1OTZhOVx1OTZhZVx1OTZhZlx1OTZiM1x1OTZiYVx1OTZjYVx1OTZkMlx1NWRiMlx1OTZkOFx1OTZkYVx1OTZkZFx1OTZkZVx1OTZkZlx1OTZlOVx1OTZlZlx1OTZmMVx1OTZmYVx1OTcwMiJdLFsiOGZlN2ExIiwiXHU5NzAz''@;'; put 'put ''XHU5NzA1XHU5NzA5XHU5NzFhXHU5NzFiXHU5NzFkXHU5NzIxXHU5NzIyXHU5NzIzXHU5NzI4XHU5NzMxXHU5NzMzXHU5NzQxXHU5NzQzXHU5NzRhXHU5NzRlXHU5NzRmXHU5NzU1XHU5NzU3XHU5NzU4XHU5NzVhXHU5NzViXHU5NzYzXHU5NzY3XHU5NzZhXHU5NzZlXHU5NzczXHU5Nzc2XHU5''@;'; put 'put ''Nzc3XHU5Nzc4XHU5NzdiXHU5NzdkXHU5NzdmXHU5NzgwXHU5Nzg5XHU5Nzk1XHU5Nzk2XHU5Nzk3XHU5Nzk5XHU5NzlhXHU5NzllXHU5NzlmXHU5N2EyXHU5N2FjXHU5N2FlXHU5N2IxXHU5N2IyXHU5N2I1XHU5N2I2XHU5N2I4XHU5N2I5XHU5N2JhXHU5N2JjXHU5N2JlXHU5N2JmXHU5N2Mx''@;'; put 'put ''XHU5N2M0XHU5N2M1XHU5N2M3XHU5N2M5XHU5N2NhXHU5N2NjXHU5N2NkXHU5N2NlXHU5N2QwXHU5N2QxXHU5N2Q0XHU5N2Q3XHU5N2Q4XHU5N2Q5XHU5N2RkXHU5N2RlXHU5N2UwXHU5N2RiXHU5N2UxXHU5N2U0XHU5N2VmXHU5N2YxXHU5N2Y0XHU5N2Y3XHU5N2Y4XHU5N2ZhXHU5ODA3XHU5''@;'; put 'put ''ODBhXHU5ODE5XHU5ODBkXHU5ODBlXHU5ODE0XHU5ODE2XHU5ODFjXHU5ODFlXHU5ODIwXHU5ODIzXHU5ODI2Il0sWyI4ZmU4YTEiLCJcdTk4MmJcdTk4MmVcdTk4MmZcdTk4MzBcdTk4MzJcdTk4MzNcdTk4MzVcdTk4MjVcdTk4M2VcdTk4NDRcdTk4NDdcdTk4NGFcdTk4NTFcdTk4NTJcdTk4''@;'; put 'put ''NTNcdTk4NTZcdTk4NTdcdTk4NTlcdTk4NWFcdTk4NjJcdTk4NjNcdTk4NjVcdTk4NjZcdTk4NmFcdTk4NmNcdTk4YWJcdTk4YWRcdTk4YWVcdTk4YjBcdTk4YjRcdTk4YjdcdTk4YjhcdTk4YmFcdTk4YmJcdTk4YmZcdTk4YzJcdTk4YzVcdTk4YzhcdTk4Y2NcdTk4ZTFcdTk4ZTNcdTk4ZTVc''@;'; put 'put ''dTk4ZTZcdTk4ZTdcdTk4ZWFcdTk4ZjNcdTk4ZjZcdTk5MDJcdTk5MDdcdTk5MDhcdTk5MTFcdTk5MTVcdTk5MTZcdTk5MTdcdTk5MWFcdTk5MWJcdTk5MWNcdTk5MWZcdTk5MjJcdTk5MjZcdTk5MjdcdTk5MmJcdTk5MzEiLDQsIlx1OTkzOVx1OTkzYVx1OTkzYlx1OTkzY1x1OTk0MFx1OTk0''@;'; put 'put ''MVx1OTk0Nlx1OTk0N1x1OTk0OFx1OTk0ZFx1OTk0ZVx1OTk1NFx1OTk1OFx1OTk1OVx1OTk1Ylx1OTk1Y1x1OTk1ZVx1OTk1Zlx1OTk2MFx1OTk5Ylx1OTk5ZFx1OTk5Zlx1OTlhNlx1OTliMFx1OTliMVx1OTliMlx1OTliNSJdLFsiOGZlOWExIiwiXHU5OWI5XHU5OWJhXHU5OWJkXHU5OWJm''@;'; put 'put ''XHU5OWMzXHU5OWM5XHU5OWQzXHU5OWQ0XHU5OWQ5XHU5OWRhXHU5OWRjXHU5OWRlXHU5OWU3XHU5OWVhXHU5OWViXHU5OWVjXHU5OWYwXHU5OWY0XHU5OWY1XHU5OWY5XHU5OWZkXHU5OWZlXHU5YTAyXHU5YTAzXHU5YTA0XHU5YTBiXHU5YTBjXHU5YTEwXHU5YTExXHU5YTE2XHU5YTFlXHU5''@;'; put 'put ''YTIwXHU5YTIyXHU5YTIzXHU5YTI0XHU5YTI3XHU5YTJkXHU5YTJlXHU5YTMzXHU5YTM1XHU5YTM2XHU5YTM4XHU5YTQ3XHU5YTQxXHU5YTQ0XHU5YTRhXHU5YTRiXHU5YTRjXHU5YTRlXHU5YTUxXHU5YTU0XHU5YTU2XHU5YTVkXHU5YWFhXHU5YWFjXHU5YWFlXHU5YWFmXHU5YWIyXHU5YWI0''@;'; put 'put ''XHU5YWI1XHU5YWI2XHU5YWI5XHU5YWJiXHU5YWJlXHU5YWJmXHU5YWMxXHU5YWMzXHU5YWM2XHU5YWM4XHU5YWNlXHU5YWQwXHU5YWQyXHU5YWQ1XHU5YWQ2XHU5YWQ3XHU5YWRiXHU5YWRjXHU5YWUwXHU5YWU0XHU5YWU1XHU5YWU3XHU5YWU5XHU5YWVjXHU5YWYyXHU5YWYzXHU5YWY1XHU5''@;'; put 'put ''YWY5XHU5YWZhXHU5YWZkXHU5YWZmIiw0XSxbIjhmZWFhMSIsIlx1OWIwNFx1OWIwNVx1OWIwOFx1OWIwOVx1OWIwYlx1OWIwY1x1OWIwZFx1OWIwZVx1OWIxMFx1OWIxMlx1OWIxNlx1OWIxOVx1OWIxYlx1OWIxY1x1OWIyMFx1OWIyNlx1OWIyYlx1OWIyZFx1OWIzM1x1OWIzNFx1OWIzNVx1''@;'; put 'put ''OWIzN1x1OWIzOVx1OWIzYVx1OWIzZFx1OWI0OFx1OWI0Ylx1OWI0Y1x1OWI1NVx1OWI1Nlx1OWI1N1x1OWI1Ylx1OWI1ZVx1OWI2MVx1OWI2M1x1OWI2NVx1OWI2Nlx1OWI2OFx1OWI2YSIsNCwiXHU5YjczXHU5Yjc1XHU5Yjc3XHU5Yjc4XHU5Yjc5XHU5YjdmXHU5YjgwXHU5Yjg0XHU5Yjg1''@;'; put 'put ''XHU5Yjg2XHU5Yjg3XHU5Yjg5XHU5YjhhXHU5YjhiXHU5YjhkXHU5YjhmXHU5YjkwXHU5Yjk0XHU5YjlhXHU5YjlkXHU5YjllXHU5YmE2XHU5YmE3XHU5YmE5XHU5YmFjXHU5YmIwXHU5YmIxXHU5YmIyXHU5YmI3XHU5YmI4XHU5YmJiXHU5YmJjXHU5YmJlXHU5YmJmXHU5YmMxXHU5YmM3XHU5''@;'; put 'put ''YmM4XHU5YmNlXHU5YmQwXHU5YmQ3XHU5YmQ4XHU5YmRkXHU5YmRmXHU5YmU1XHU5YmU3XHU5YmVhXHU5YmViXHU5YmVmXHU5YmYzXHU5YmY3XHU5YmY4Il0sWyI4ZmViYTEiLCJcdTliZjlcdTliZmFcdTliZmRcdTliZmZcdTljMDBcdTljMDJcdTljMGJcdTljMGZcdTljMTFcdTljMTZcdTlj''@;'; put 'put ''MThcdTljMTlcdTljMWFcdTljMWNcdTljMWVcdTljMjJcdTljMjNcdTljMjYiLDQsIlx1OWMzMVx1OWMzNVx1OWMzNlx1OWMzN1x1OWMzZFx1OWM0MVx1OWM0M1x1OWM0NFx1OWM0NVx1OWM0OVx1OWM0YVx1OWM0ZVx1OWM0Zlx1OWM1MFx1OWM1M1x1OWM1NFx1OWM1Nlx1OWM1OFx1OWM1Ylx1''@;'; put 'put ''OWM1ZFx1OWM1ZVx1OWM1Zlx1OWM2M1x1OWM2OVx1OWM2YVx1OWM1Y1x1OWM2Ylx1OWM2OFx1OWM2ZVx1OWM3MFx1OWM3Mlx1OWM3NVx1OWM3N1x1OWM3Ylx1OWNlNlx1OWNmMlx1OWNmN1x1OWNmOVx1OWQwYlx1OWQwMlx1OWQxMVx1OWQxN1x1OWQxOFx1OWQxY1x1OWQxZFx1OWQxZVx1OWQy''@;'; put 'put ''Zlx1OWQzMFx1OWQzMlx1OWQzM1x1OWQzNFx1OWQzYVx1OWQzY1x1OWQ0NVx1OWQzZFx1OWQ0Mlx1OWQ0M1x1OWQ0N1x1OWQ0YVx1OWQ1M1x1OWQ1NFx1OWQ1Zlx1OWQ2M1x1OWQ2Mlx1OWQ2NVx1OWQ2OVx1OWQ2YVx1OWQ2Ylx1OWQ3MFx1OWQ3Nlx1OWQ3N1x1OWQ3YiJdLFsiOGZlY2ExIiwi''@;'; put 'put ''XHU5ZDdjXHU5ZDdlXHU5ZDgzXHU5ZDg0XHU5ZDg2XHU5ZDhhXHU5ZDhkXHU5ZDhlXHU5ZDkyXHU5ZDkzXHU5ZDk1XHU5ZDk2XHU5ZDk3XHU5ZDk4XHU5ZGExXHU5ZGFhXHU5ZGFjXHU5ZGFlXHU5ZGIxXHU5ZGI1XHU5ZGI5XHU5ZGJjXHU5ZGJmXHU5ZGMzXHU5ZGM3XHU5ZGM5XHU5ZGNhXHU5''@;'; put 'put ''ZGQ0XHU5ZGQ1XHU5ZGQ2XHU5ZGQ3XHU5ZGRhXHU5ZGRlXHU5ZGRmXHU5ZGUwXHU5ZGU1XHU5ZGU3XHU5ZGU5XHU5ZGViXHU5ZGVlXHU5ZGYwXHU5ZGYzXHU5ZGY0XHU5ZGZlXHU5ZTBhXHU5ZTAyXHU5ZTA3XHU5ZTBlXHU5ZTEwXHU5ZTExXHU5ZTEyXHU5ZTE1XHU5ZTE2XHU5ZTE5XHU5ZTFj''@;'; put 'put ''XHU5ZTFkXHU5ZTdhXHU5ZTdiXHU5ZTdjXHU5ZTgwXHU5ZTgyXHU5ZTgzXHU5ZTg0XHU5ZTg1XHU5ZTg3XHU5ZThlXHU5ZThmXHU5ZTk2XHU5ZTk4XHU5ZTliXHU5ZTllXHU5ZWE0XHU5ZWE4XHU5ZWFjXHU5ZWFlXHU5ZWFmXHU5ZWIwXHU5ZWIzXHU5ZWI0XHU5ZWI1XHU5ZWM2XHU5ZWM4XHU5''@;'; put 'put ''ZWNiXHU5ZWQ1XHU5ZWRmXHU5ZWU0XHU5ZWU3XHU5ZWVjXHU5ZWVkXHU5ZWVlXHU5ZWYwXHU5ZWYxXHU5ZWYyXHU5ZWY1Il0sWyI4ZmVkYTEiLCJcdTllZjhcdTllZmZcdTlmMDJcdTlmMDNcdTlmMDlcdTlmMGZcdTlmMTBcdTlmMTFcdTlmMTJcdTlmMTRcdTlmMTZcdTlmMTdcdTlmMTlcdTlm''@;'; put 'put ''MWFcdTlmMWJcdTlmMWZcdTlmMjJcdTlmMjZcdTlmMmFcdTlmMmJcdTlmMmZcdTlmMzFcdTlmMzJcdTlmMzRcdTlmMzdcdTlmMzlcdTlmM2FcdTlmM2NcdTlmM2RcdTlmM2ZcdTlmNDFcdTlmNDMiLDQsIlx1OWY1M1x1OWY1NVx1OWY1Nlx1OWY1N1x1OWY1OFx1OWY1YVx1OWY1ZFx1OWY1ZVx1''@;'; put 'put ''OWY2OFx1OWY2OVx1OWY2ZCIsNCwiXHU5ZjczXHU5Zjc1XHU5ZjdhXHU5ZjdkXHU5ZjhmXHU5ZjkwXHU5ZjkxXHU5ZjkyXHU5Zjk0XHU5Zjk2XHU5Zjk3XHU5ZjllXHU5ZmExXHU5ZmEyXHU5ZmEzXHU5ZmE1Il1dJyl9LDk5MTI5OnVlPT57InVzZSBzdHJpY3QiO3VlLmV4cG9ydHM9SlNPTi5w''@;'; put 'put ''YXJzZSgneyJ1Q2hhcnMiOlsxMjgsMTY1LDE2OSwxNzgsMTg0LDIxNiwyMjYsMjM1LDIzOCwyNDQsMjQ4LDI1MSwyNTMsMjU4LDI3NiwyODQsMzAwLDMyNSwzMjksMzM0LDM2NCw0NjMsNDY1LDQ2Nyw0NjksNDcxLDQ3Myw0NzUsNDc3LDUwNiw1OTQsNjEwLDcxMiw3MTYsNzMwLDkzMCw5Mzgs''@;'; put 'put ''OTYyLDk3MCwxMDI2LDExMDQsMTEwNiw4MjA5LDgyMTUsODIxOCw4MjIyLDgyMzEsODI0MSw4MjQ0LDgyNDYsODI1Miw4MzY1LDg0NTIsODQ1NCw4NDU4LDg0NzEsODQ4Miw4NTU2LDg1NzAsODU5Niw4NjAyLDg3MTMsODcyMCw4NzIyLDg3MjYsODczMSw4NzM3LDg3NDAsODc0Miw4NzQ4LDg3''@;'; put 'put ''NTEsODc2MCw4NzY2LDg3NzcsODc4MSw4Nzg3LDg4MDIsODgwOCw4ODE2LDg4NTQsODg1OCw4ODcwLDg4OTYsODk3OSw5MzIyLDkzNzIsOTU0OCw5NTg4LDk2MTYsOTYyMiw5NjM0LDk2NTIsOTY2Miw5NjcyLDk2NzYsOTY4MCw5NzAyLDk3MzUsOTczOCw5NzkzLDk3OTUsMTE5MDYsMTE5MDks''@;'; put 'put ''MTE5MTMsMTE5MTcsMTE5MjgsMTE5NDQsMTE5NDcsMTE5NTEsMTE5NTYsMTE5NjAsMTE5NjQsMTE5NzksMTIyODQsMTIyOTIsMTIzMTIsMTIzMTksMTIzMzAsMTIzNTEsMTI0MzYsMTI0NDcsMTI1MzUsMTI1NDMsMTI1ODYsMTI4NDIsMTI4NTAsMTI5NjQsMTMyMDAsMTMyMTUsMTMyMTgsMTMy''@;'; put 'put ''NTMsMTMyNjMsMTMyNjcsMTMyNzAsMTMzODQsMTM0MjgsMTM3MjcsMTM4MzksMTM4NTEsMTQ2MTcsMTQ3MDMsMTQ4MDEsMTQ4MTYsMTQ5NjQsMTUxODMsMTU0NzEsMTU1ODUsMTY0NzEsMTY3MzYsMTcyMDgsMTczMjUsMTczMzAsMTczNzQsMTc2MjMsMTc5OTcsMTgwMTgsMTgyMTIsMTgyMTgs''@;'; put 'put ''MTgzMDEsMTgzMTgsMTg3NjAsMTg4MTEsMTg4MTQsMTg4MjAsMTg4MjMsMTg4NDQsMTg4NDgsMTg4NzIsMTk1NzYsMTk2MjAsMTk3MzgsMTk4ODcsNDA4NzAsNTkyNDQsNTkzMzYsNTkzNjcsNTk0MTMsNTk0MTcsNTk0MjMsNTk0MzEsNTk0MzcsNTk0NDMsNTk0NTIsNTk0NjAsNTk0NzgsNTk0''@;'; put 'put ''OTMsNjM3ODksNjM4NjYsNjM4OTQsNjM5NzYsNjM5ODYsNjQwMTYsNjQwMTgsNjQwMjEsNjQwMjUsNjQwMzQsNjQwMzcsNjQwNDIsNjUwNzQsNjUwOTMsNjUxMDcsNjUxMTIsNjUxMjcsNjUxMzIsNjUzNzUsNjU1MTAsNjU1MzZdLCJnYkNoYXJzIjpbMCwzNiwzOCw0NSw1MCw4MSw4OSw5NSw5''@;'; put 'put ''NiwxMDAsMTAzLDEwNCwxMDUsMTA5LDEyNiwxMzMsMTQ4LDE3MiwxNzUsMTc5LDIwOCwzMDYsMzA3LDMwOCwzMDksMzEwLDMxMSwzMTIsMzEzLDM0MSw0MjgsNDQzLDU0NCw1NDUsNTU4LDc0MSw3NDIsNzQ5LDc1MCw4MDUsODE5LDgyMCw3OTIyLDc5MjQsNzkyNSw3OTI3LDc5MzQsNzk0Myw3''@;'; put 'put ''OTQ0LDc5NDUsNzk1MCw4MDYyLDgxNDgsODE0OSw4MTUyLDgxNjQsODE3NCw4MjM2LDgyNDAsODI2Miw4MjY0LDgzNzQsODM4MCw4MzgxLDgzODQsODM4OCw4MzkwLDgzOTIsODM5Myw4Mzk0LDgzOTYsODQwMSw4NDA2LDg0MTYsODQxOSw4NDI0LDg0MzcsODQzOSw4NDQ1LDg0ODIsODQ4NSw4''@;'; put 'put ''NDk2LDg1MjEsODYwMyw4OTM2LDg5NDYsOTA0Niw5MDUwLDkwNjMsOTA2Niw5MDc2LDkwOTIsOTEwMCw5MTA4LDkxMTEsOTExMyw5MTMxLDkxNjIsOTE2NCw5MjE4LDkyMTksMTEzMjksMTEzMzEsMTEzMzQsMTEzMzYsMTEzNDYsMTEzNjEsMTEzNjMsMTEzNjYsMTEzNzAsMTEzNzIsMTEzNzUs''@;'; put 'put ''MTEzODksMTE2ODIsMTE2ODYsMTE2ODcsMTE2OTIsMTE2OTQsMTE3MTQsMTE3MTYsMTE3MjMsMTE3MjUsMTE3MzAsMTE3MzYsMTE5ODIsMTE5ODksMTIxMDIsMTIzMzYsMTIzNDgsMTIzNTAsMTIzODQsMTIzOTMsMTIzOTUsMTIzOTcsMTI1MTAsMTI1NTMsMTI4NTEsMTI5NjIsMTI5NzMsMTM3''@;'; put 'put ''MzgsMTM4MjMsMTM5MTksMTM5MzMsMTQwODAsMTQyOTgsMTQ1ODUsMTQ2OTgsMTU1ODMsMTU4NDcsMTYzMTgsMTY0MzQsMTY0MzgsMTY0ODEsMTY3MjksMTcxMDIsMTcxMjIsMTczMTUsMTczMjAsMTc0MDIsMTc0MTgsMTc4NTksMTc5MDksMTc5MTEsMTc5MTUsMTc5MTYsMTc5MzYsMTc5Mzks''@;'; put 'put ''MTc5NjEsMTg2NjQsMTg3MDMsMTg4MTQsMTg5NjIsMTkwNDMsMzM0NjksMzM0NzAsMzM0NzEsMzM0ODQsMzM0ODUsMzM0OTAsMzM0OTcsMzM1MDEsMzM1MDUsMzM1MTMsMzM1MjAsMzM1MzYsMzM1NTAsMzc4NDUsMzc5MjEsMzc5NDgsMzgwMjksMzgwMzgsMzgwNjQsMzgwNjUsMzgwNjYsMzgw''@;'; put 'put ''NjksMzgwNzUsMzgwNzYsMzgwNzgsMzkxMDgsMzkxMDksMzkxMTMsMzkxMTQsMzkxMTUsMzkxMTYsMzkyNjUsMzkzOTQsMTg5MDAwXX0nKX0sNTU5MTQ6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1KU09OLnBhcnNlKCdbWyJhMTQwIiwiXHVlNGM2Iiw2Ml0sWyJhMTgwIiwiXHVlNTA1''@;'; put 'put ''IiwzMl0sWyJhMjQwIiwiXHVlNTI2Iiw2Ml0sWyJhMjgwIiwiXHVlNTY1IiwzMl0sWyJhMmFiIiwiXHVlNzY2Iiw1XSxbImEyZTMiLCJcdTIwYWNcdWU3NmQiXSxbImEyZWYiLCJcdWU3NmVcdWU3NmYiXSxbImEyZmQiLCJcdWU3NzBcdWU3NzEiXSxbImEzNDAiLCJcdWU1ODYiLDYyXSxbImEz''@;'; put 'put ''ODAiLCJcdWU1YzUiLDMxLCJcdTMwMDAiXSxbImE0NDAiLCJcdWU1ZTYiLDYyXSxbImE0ODAiLCJcdWU2MjUiLDMyXSxbImE0ZjQiLCJcdWU3NzIiLDEwXSxbImE1NDAiLCJcdWU2NDYiLDYyXSxbImE1ODAiLCJcdWU2ODUiLDMyXSxbImE1ZjciLCJcdWU3N2QiLDddLFsiYTY0MCIsIlx1ZTZh''@;'; put 'put ''NiIsNjJdLFsiYTY4MCIsIlx1ZTZlNSIsMzJdLFsiYTZiOSIsIlx1ZTc4NSIsN10sWyJhNmQ5IiwiXHVlNzhkIiw2XSxbImE2ZWMiLCJcdWU3OTRcdWU3OTUiXSxbImE2ZjMiLCJcdWU3OTYiXSxbImE2ZjYiLCJcdWU3OTciLDhdLFsiYTc0MCIsIlx1ZTcwNiIsNjJdLFsiYTc4MCIsIlx1ZTc0''@;'; put 'put ''NSIsMzJdLFsiYTdjMiIsIlx1ZTdhMCIsMTRdLFsiYTdmMiIsIlx1ZTdhZiIsMTJdLFsiYTg5NiIsIlx1ZTdiYyIsMTBdLFsiYThiYyIsIlx1ZTdjNyJdLFsiYThiZiIsIlx1MDFmOSJdLFsiYThjMSIsIlx1ZTdjOVx1ZTdjYVx1ZTdjYlx1ZTdjYyJdLFsiYThlYSIsIlx1ZTdjZCIsMjBdLFsi''@;'; put 'put ''YTk1OCIsIlx1ZTdlMiJdLFsiYTk1YiIsIlx1ZTdlMyJdLFsiYTk1ZCIsIlx1ZTdlNFx1ZTdlNVx1ZTdlNiJdLFsiYTk4OSIsIlx1MzAzZVx1MmZmMCIsMTFdLFsiYTk5NyIsIlx1ZTdmNCIsMTJdLFsiYTlmMCIsIlx1ZTgwMSIsMTRdLFsiYWFhMSIsIlx1ZTAwMCIsOTNdLFsiYWJhMSIsIlx1''@;'; put 'put ''ZTA1ZSIsOTNdLFsiYWNhMSIsIlx1ZTBiYyIsOTNdLFsiYWRhMSIsIlx1ZTExYSIsOTNdLFsiYWVhMSIsIlx1ZTE3OCIsOTNdLFsiYWZhMSIsIlx1ZTFkNiIsOTNdLFsiZDdmYSIsIlx1ZTgxMCIsNF0sWyJmOGExIiwiXHVlMjM0Iiw5M10sWyJmOWExIiwiXHVlMjkyIiw5M10sWyJmYWExIiwi''@;'; put 'put ''XHVlMmYwIiw5M10sWyJmYmExIiwiXHVlMzRlIiw5M10sWyJmY2ExIiwiXHVlM2FjIiw5M10sWyJmZGExIiwiXHVlNDBhIiw5M10sWyJmZTUwIiwiXHUyZTgxXHVlODE2XHVlODE3XHVlODE4XHUyZTg0XHUzNDczXHUzNDQ3XHUyZTg4XHUyZThiXHVlODFlXHUzNTllXHUzNjFhXHUzNjBlXHUy''@;'; put 'put ''ZThjXHUyZTk3XHUzOTZlXHUzOTE4XHVlODI2XHUzOWNmXHUzOWRmXHUzYTczXHUzOWQwXHVlODJiXHVlODJjXHUzYjRlXHUzYzZlXHUzY2UwXHUyZWE3XHVlODMxXHVlODMyXHUyZWFhXHU0MDU2XHU0MTVmXHUyZWFlXHU0MzM3XHUyZWIzXHUyZWI2XHUyZWI3XHVlODNiXHU0M2IxXHU0M2Fj''@;'; put 'put ''XHUyZWJiXHU0M2RkXHU0NGQ2XHU0NjYxXHU0NjRjXHVlODQzIl0sWyJmZTgwIiwiXHU0NzIzXHU0NzI5XHU0NzdjXHU0NzhkXHUyZWNhXHU0OTQ3XHU0OTdhXHU0OTdkXHU0OTgyXHU0OTgzXHU0OTg1XHU0OTg2XHU0OTlmXHU0OTliXHU0OWI3XHU0OWI2XHVlODU0XHVlODU1XHU0Y2EzXHU0''@;'; put 'put ''YzlmXHU0Y2EwXHU0Y2ExXHU0Yzc3XHU0Y2EyXHU0ZDEzIiw2LCJcdTRkYWVcdWU4NjRcdWU0NjgiLDkzXV0nKX0sNDA2Nzk6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1KU09OLnBhcnNlKCdbWyIwIiwiXFx1MDAwMCIsMTI4XSxbImExIiwiXHVmZjYxIiw2Ml0sWyI4MTQwIiwiXHUz''@;'; put 'put ''MDAwXHUzMDAxXHUzMDAyXHVmZjBjXHVmZjBlXHUzMGZiXHVmZjFhXHVmZjFiXHVmZjFmXHVmZjAxXHUzMDliXHUzMDljXHhiNFx1ZmY0MFx4YThcdWZmM2VcdWZmZTNcdWZmM2ZcdTMwZmRcdTMwZmVcdTMwOWRcdTMwOWVcdTMwMDNcdTRlZGRcdTMwMDVcdTMwMDZcdTMwMDdcdTMwZmNcdTIw''@;'; put 'put ''MTVcdTIwMTBcdWZmMGZcdWZmM2NcdWZmNWVcdTIyMjVcdWZmNWNcdTIwMjZcdTIwMjVcdTIwMThcdTIwMTlcdTIwMWNcdTIwMWRcdWZmMDhcdWZmMDlcdTMwMTRcdTMwMTVcdWZmM2JcdWZmM2RcdWZmNWJcdWZmNWRcdTMwMDgiLDksIlx1ZmYwYlx1ZmYwZFx4YjFceGQ3Il0sWyI4MTgwIiwi''@;'; put 'put ''XHhmN1x1ZmYxZFx1MjI2MFx1ZmYxY1x1ZmYxZVx1MjI2Nlx1MjI2N1x1MjIxZVx1MjIzNFx1MjY0Mlx1MjY0MFx4YjBcdTIwMzJcdTIwMzNcdTIxMDNcdWZmZTVcdWZmMDRcdWZmZTBcdWZmZTFcdWZmMDVcdWZmMDNcdWZmMDZcdWZmMGFcdWZmMjBceGE3XHUyNjA2XHUyNjA1XHUyNWNiXHUy''@;'; put 'put ''NWNmXHUyNWNlXHUyNWM3XHUyNWM2XHUyNWExXHUyNWEwXHUyNWIzXHUyNWIyXHUyNWJkXHUyNWJjXHUyMDNiXHUzMDEyXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUzMDEzIl0sWyI4MWI4IiwiXHUyMjA4XHUyMjBiXHUyMjg2XHUyMjg3XHUyMjgyXHUyMjgzXHUyMjJhXHUyMjI5Il0sWyI4''@;'; put 'put ''MWM4IiwiXHUyMjI3XHUyMjI4XHVmZmUyXHUyMWQyXHUyMWQ0XHUyMjAwXHUyMjAzIl0sWyI4MWRhIiwiXHUyMjIwXHUyMmE1XHUyMzEyXHUyMjAyXHUyMjA3XHUyMjYxXHUyMjUyXHUyMjZhXHUyMjZiXHUyMjFhXHUyMjNkXHUyMjFkXHUyMjM1XHUyMjJiXHUyMjJjIl0sWyI4MWYwIiwiXHUy''@;'; put 'put ''MTJiXHUyMDMwXHUyNjZmXHUyNjZkXHUyNjZhXHUyMDIwXHUyMDIxXHhiNiJdLFsiODFmYyIsIlx1MjVlZiJdLFsiODI0ZiIsIlx1ZmYxMCIsOV0sWyI4MjYwIiwiXHVmZjIxIiwyNV0sWyI4MjgxIiwiXHVmZjQxIiwyNV0sWyI4MjlmIiwiXHUzMDQxIiw4Ml0sWyI4MzQwIiwiXHUzMGExIiw2''@;'; put 'put ''Ml0sWyI4MzgwIiwiXHUzMGUwIiwyMl0sWyI4MzlmIiwiXHUwMzkxIiwxNiwiXHUwM2EzIiw2XSxbIjgzYmYiLCJcdTAzYjEiLDE2LCJcdTAzYzMiLDZdLFsiODQ0MCIsIlx1MDQxMCIsNSwiXHUwNDAxXHUwNDE2IiwyNV0sWyI4NDcwIiwiXHUwNDMwIiw1LCJcdTA0NTFcdTA0MzYiLDddLFsi''@;'; put 'put ''ODQ4MCIsIlx1MDQzZSIsMTddLFsiODQ5ZiIsIlx1MjUwMFx1MjUwMlx1MjUwY1x1MjUxMFx1MjUxOFx1MjUxNFx1MjUxY1x1MjUyY1x1MjUyNFx1MjUzNFx1MjUzY1x1MjUwMVx1MjUwM1x1MjUwZlx1MjUxM1x1MjUxYlx1MjUxN1x1MjUyM1x1MjUzM1x1MjUyYlx1MjUzYlx1MjU0Ylx1MjUy''@;'; put 'put ''MFx1MjUyZlx1MjUyOFx1MjUzN1x1MjUzZlx1MjUxZFx1MjUzMFx1MjUyNVx1MjUzOFx1MjU0MiJdLFsiODc0MCIsIlx1MjQ2MCIsMTksIlx1MjE2MCIsOV0sWyI4NzVmIiwiXHUzMzQ5XHUzMzE0XHUzMzIyXHUzMzRkXHUzMzE4XHUzMzI3XHUzMzAzXHUzMzM2XHUzMzUxXHUzMzU3XHUzMzBk''@;'; put 'put ''XHUzMzI2XHUzMzIzXHUzMzJiXHUzMzRhXHUzMzNiXHUzMzljXHUzMzlkXHUzMzllXHUzMzhlXHUzMzhmXHUzM2M0XHUzM2ExIl0sWyI4NzdlIiwiXHUzMzdiIl0sWyI4NzgwIiwiXHUzMDFkXHUzMDFmXHUyMTE2XHUzM2NkXHUyMTIxXHUzMmE0Iiw0LCJcdTMyMzFcdTMyMzJcdTMyMzlcdTMz''@;'; put 'put ''N2VcdTMzN2RcdTMzN2NcdTIyNTJcdTIyNjFcdTIyMmJcdTIyMmVcdTIyMTFcdTIyMWFcdTIyYTVcdTIyMjBcdTIyMWZcdTIyYmZcdTIyMzVcdTIyMjlcdTIyMmEiXSxbIjg4OWYiLCJcdTRlOWNcdTU1MTZcdTVhMDNcdTk2M2ZcdTU0YzBcdTYxMWJcdTYzMjhcdTU5ZjZcdTkwMjJcdTg0NzVc''@;'; put 'put ''dTgzMWNcdTdhNTBcdTYwYWFcdTYzZTFcdTZlMjVcdTY1ZWRcdTg0NjZcdTgyYTZcdTliZjVcdTY4OTNcdTU3MjdcdTY1YTFcdTYyNzFcdTViOWJcdTU5ZDBcdTg2N2JcdTk4ZjRcdTdkNjJcdTdkYmVcdTliOGVcdTYyMTZcdTdjOWZcdTg4YjdcdTViODlcdTVlYjVcdTYzMDlcdTY2OTdcdTY4''@;'; put 'put ''NDhcdTk1YzdcdTk3OGRcdTY3NGZcdTRlZTVcdTRmMGFcdTRmNGRcdTRmOWRcdTUwNDlcdTU2ZjJcdTU5MzdcdTU5ZDRcdTVhMDFcdTVjMDlcdTYwZGZcdTYxMGZcdTYxNzBcdTY2MTNcdTY5MDVcdTcwYmFcdTc1NGZcdTc1NzBcdTc5ZmJcdTdkYWRcdTdkZWZcdTgwYzNcdTg0MGVcdTg4NjNc''@;'; put 'put ''dThiMDJcdTkwNTVcdTkwN2FcdTUzM2JcdTRlOTVcdTRlYTVcdTU3ZGZcdTgwYjJcdTkwYzFcdTc4ZWZcdTRlMDBcdTU4ZjFcdTZlYTJcdTkwMzhcdTdhMzJcdTgzMjhcdTgyOGJcdTljMmZcdTUxNDFcdTUzNzBcdTU0YmRcdTU0ZTFcdTU2ZTBcdTU5ZmJcdTVmMTVcdTk4ZjJcdTZkZWJcdTgw''@;'; put 'put ''ZTRcdTg1MmQiXSxbIjg5NDAiLCJcdTk2NjJcdTk2NzBcdTk2YTBcdTk3ZmJcdTU0MGJcdTUzZjNcdTViODdcdTcwY2ZcdTdmYmRcdThmYzJcdTk2ZThcdTUzNmZcdTlkNWNcdTdhYmFcdTRlMTFcdTc4OTNcdTgxZmNcdTZlMjZcdTU2MThcdTU1MDRcdTZiMWRcdTg1MWFcdTljM2JcdTU5ZTVc''@;'; put 'put ''dTUzYTlcdTZkNjZcdTc0ZGNcdTk1OGZcdTU2NDJcdTRlOTFcdTkwNGJcdTk2ZjJcdTgzNGZcdTk5MGNcdTUzZTFcdTU1YjZcdTViMzBcdTVmNzFcdTY2MjBcdTY2ZjNcdTY4MDRcdTZjMzhcdTZjZjNcdTZkMjlcdTc0NWJcdTc2YzhcdTdhNGVcdTk4MzRcdTgyZjFcdTg4NWJcdThhNjBcdTky''@;'; put 'put ''ZWRcdTZkYjJcdTc1YWJcdTc2Y2FcdTk5YzVcdTYwYTZcdThiMDFcdThkOGFcdTk1YjJcdTY5OGVcdTUzYWRcdTUxODYiXSxbIjg5ODAiLCJcdTU3MTJcdTU4MzBcdTU5NDRcdTViYjRcdTVlZjZcdTYwMjhcdTYzYTlcdTYzZjRcdTZjYmZcdTZmMTRcdTcwOGVcdTcxMTRcdTcxNTlcdTcxZDVc''@;'; put 'put ''dTczM2ZcdTdlMDFcdTgyNzZcdTgyZDFcdTg1OTdcdTkwNjBcdTkyNWJcdTlkMWJcdTU4NjlcdTY1YmNcdTZjNWFcdTc1MjVcdTUxZjlcdTU5MmVcdTU5NjVcdTVmODBcdTVmZGNcdTYyYmNcdTY1ZmFcdTZhMmFcdTZiMjdcdTZiYjRcdTczOGJcdTdmYzFcdTg5NTZcdTlkMmNcdTlkMGVcdTll''@;'; put 'put ''YzRcdTVjYTFcdTZjOTZcdTgzN2JcdTUxMDRcdTVjNGJcdTYxYjZcdTgxYzZcdTY4NzZcdTcyNjFcdTRlNTlcdTRmZmFcdTUzNzhcdTYwNjlcdTZlMjlcdTdhNGZcdTk3ZjNcdTRlMGJcdTUzMTZcdTRlZWVcdTRmNTVcdTRmM2RcdTRmYTFcdTRmNzNcdTUyYTBcdTUzZWZcdTU2MDlcdTU5MGZc''@;'; put 'put ''dTVhYzFcdTViYjZcdTViZTFcdTc5ZDFcdTY2ODdcdTY3OWNcdTY3YjZcdTZiNGNcdTZjYjNcdTcwNmJcdTczYzJcdTc5OGRcdTc5YmVcdTdhM2NcdTdiODdcdTgyYjFcdTgyZGJcdTgzMDRcdTgzNzdcdTgzZWZcdTgzZDNcdTg3NjZcdThhYjJcdTU2MjlcdThjYThcdThmZTZcdTkwNGVcdTk3''@;'; put 'put ''MWVcdTg2OGFcdTRmYzRcdTVjZThcdTYyMTFcdTcyNTlcdTc1M2JcdTgxZTVcdTgyYmRcdTg2ZmVcdThjYzBcdTk2YzVcdTk5MTNcdTk5ZDVcdTRlY2JcdTRmMWFcdTg5ZTNcdTU2ZGVcdTU4NGFcdTU4Y2FcdTVlZmJcdTVmZWJcdTYwMmFcdTYwOTRcdTYwNjJcdTYxZDBcdTYyMTJcdTYyZDBc''@;'; put 'put ''dTY1MzkiXSxbIjhhNDAiLCJcdTliNDFcdTY2NjZcdTY4YjBcdTZkNzdcdTcwNzBcdTc1NGNcdTc2ODZcdTdkNzVcdTgyYTVcdTg3ZjlcdTk1OGJcdTk2OGVcdThjOWRcdTUxZjFcdTUyYmVcdTU5MTZcdTU0YjNcdTViYjNcdTVkMTZcdTYxNjhcdTY5ODJcdTZkYWZcdTc4OGRcdTg0Y2JcdTg4''@;'; put 'put ''NTdcdThhNzJcdTkzYTdcdTlhYjhcdTZkNmNcdTk5YThcdTg2ZDlcdTU3YTNcdTY3ZmZcdTg2Y2VcdTkyMGVcdTUyODNcdTU2ODdcdTU0MDRcdTVlZDNcdTYyZTFcdTY0YjlcdTY4M2NcdTY4MzhcdTZiYmJcdTczNzJcdTc4YmFcdTdhNmJcdTg5OWFcdTg5ZDJcdThkNmJcdThmMDNcdTkwZWRc''@;'; put 'put ''dTk1YTNcdTk2OTRcdTk3NjlcdTViNjZcdTVjYjNcdTY5N2RcdTk4NGRcdTk4NGVcdTYzOWJcdTdiMjBcdTZhMmIiXSxbIjhhODAiLCJcdTZhN2ZcdTY4YjZcdTljMGRcdTZmNWZcdTUyNzJcdTU1OWRcdTYwNzBcdTYyZWNcdTZkM2JcdTZlMDdcdTZlZDFcdTg0NWJcdTg5MTBcdThmNDRcdTRl''@;'; put 'put ''MTRcdTljMzlcdTUzZjZcdTY5MWJcdTZhM2FcdTk3ODRcdTY4MmFcdTUxNWNcdTdhYzNcdTg0YjJcdTkxZGNcdTkzOGNcdTU2NWJcdTlkMjhcdTY4MjJcdTgzMDVcdTg0MzFcdTdjYTVcdTUyMDhcdTgyYzVcdTc0ZTZcdTRlN2VcdTRmODNcdTUxYTBcdTViZDJcdTUyMGFcdTUyZDhcdTUyZTdc''@;'; put 'put ''dTVkZmJcdTU1OWFcdTU4MmFcdTU5ZTZcdTViOGNcdTViOThcdTViZGJcdTVlNzJcdTVlNzlcdTYwYTNcdTYxMWZcdTYxNjNcdTYxYmVcdTYzZGJcdTY1NjJcdTY3ZDFcdTY4NTNcdTY4ZmFcdTZiM2VcdTZiNTNcdTZjNTdcdTZmMjJcdTZmOTdcdTZmNDVcdTc0YjBcdTc1MThcdTc2ZTNcdTc3''@;'; put 'put ''MGJcdTdhZmZcdTdiYTFcdTdjMjFcdTdkZTlcdTdmMzZcdTdmZjBcdTgwOWRcdTgyNjZcdTgzOWVcdTg5YjNcdThhY2NcdThjYWJcdTkwODRcdTk0NTFcdTk1OTNcdTk1OTFcdTk1YTJcdTk2NjVcdTk3ZDNcdTk5MjhcdTgyMThcdTRlMzhcdTU0MmJcdTVjYjhcdTVkY2NcdTczYTlcdTc2NGNc''@;'; put 'put ''dTc3M2NcdTVjYTlcdTdmZWJcdThkMGJcdTk2YzFcdTk4MTFcdTk4NTRcdTk4NThcdTRmMDFcdTRmMGVcdTUzNzFcdTU1OWNcdTU2NjhcdTU3ZmFcdTU5NDdcdTViMDlcdTViYzRcdTVjOTBcdTVlMGNcdTVlN2VcdTVmY2NcdTYzZWVcdTY3M2FcdTY1ZDdcdTY1ZTJcdTY3MWZcdTY4Y2JcdTY4''@;'; put 'put ''YzQiXSxbIjhiNDAiLCJcdTZhNWZcdTVlMzBcdTZiYzVcdTZjMTdcdTZjN2RcdTc1N2ZcdTc5NDhcdTViNjNcdTdhMDBcdTdkMDBcdTVmYmRcdTg5OGZcdThhMThcdThjYjRcdThkNzdcdThlY2NcdThmMWRcdTk4ZTJcdTlhMGVcdTliM2NcdTRlODBcdTUwN2RcdTUxMDBcdTU5OTNcdTViOWNc''@;'; put 'put ''dTYyMmZcdTYyODBcdTY0ZWNcdTZiM2FcdTcyYTBcdTc1OTFcdTc5NDdcdTdmYTlcdTg3ZmJcdThhYmNcdThiNzBcdTYzYWNcdTgzY2FcdTk3YTBcdTU0MDlcdTU0MDNcdTU1YWJcdTY4NTRcdTZhNThcdThhNzBcdTc4MjdcdTY3NzVcdTllY2RcdTUzNzRcdTViYTJcdTgxMWFcdTg2NTBcdTkw''@;'; put 'put ''MDZcdTRlMThcdTRlNDVcdTRlYzdcdTRmMTFcdTUzY2FcdTU0MzhcdTViYWVcdTVmMTNcdTYwMjVcdTY1NTEiXSxbIjhiODAiLCJcdTY3M2RcdTZjNDJcdTZjNzJcdTZjZTNcdTcwNzhcdTc0MDNcdTdhNzZcdTdhYWVcdTdiMDhcdTdkMWFcdTdjZmVcdTdkNjZcdTY1ZTdcdTcyNWJcdTUzYmJc''@;'; put 'put ''dTVjNDVcdTVkZThcdTYyZDJcdTYyZTBcdTYzMTlcdTZlMjBcdTg2NWFcdThhMzFcdThkZGRcdTkyZjhcdTZmMDFcdTc5YTZcdTliNWFcdTRlYThcdTRlYWJcdTRlYWNcdTRmOWJcdTRmYTBcdTUwZDFcdTUxNDdcdTdhZjZcdTUxNzFcdTUxZjZcdTUzNTRcdTUzMjFcdTUzN2ZcdTUzZWJcdTU1''@;'; put 'put ''YWNcdTU4ODNcdTVjZTFcdTVmMzdcdTVmNGFcdTYwMmZcdTYwNTBcdTYwNmRcdTYzMWZcdTY1NTlcdTZhNGJcdTZjYzFcdTcyYzJcdTcyZWRcdTc3ZWZcdTgwZjhcdTgxMDVcdTgyMDhcdTg1NGVcdTkwZjdcdTkzZTFcdTk3ZmZcdTk5NTdcdTlhNWFcdTRlZjBcdTUxZGRcdTVjMmRcdTY2ODFc''@;'; put 'put ''dTY5NmRcdTVjNDBcdTY2ZjJcdTY5NzVcdTczODlcdTY4NTBcdTdjODFcdTUwYzVcdTUyZTRcdTU3NDdcdTVkZmVcdTkzMjZcdTY1YTRcdTZiMjNcdTZiM2RcdTc0MzRcdTc5ODFcdTc5YmRcdTdiNGJcdTdkY2FcdTgyYjlcdTgzY2NcdTg4N2ZcdTg5NWZcdThiMzlcdThmZDFcdTkxZDFcdTU0''@;'; put 'put ''MWZcdTkyODBcdTRlNWRcdTUwMzZcdTUzZTVcdTUzM2FcdTcyZDdcdTczOTZcdTc3ZTlcdTgyZTZcdThlYWZcdTk5YzZcdTk5YzhcdTk5ZDJcdTUxNzdcdTYxMWFcdTg2NWVcdTU1YjBcdTdhN2FcdTUwNzZcdTViZDNcdTkwNDdcdTk2ODVcdTRlMzJcdTZhZGJcdTkxZTdcdTVjNTFcdTVjNDgi''@;'; put 'put ''XSxbIjhjNDAiLCJcdTYzOThcdTdhOWZcdTZjOTNcdTk3NzRcdThmNjFcdTdhYWFcdTcxOGFcdTk2ODhcdTdjODJcdTY4MTdcdTdlNzBcdTY4NTFcdTkzNmNcdTUyZjJcdTU0MWJcdTg1YWJcdThhMTNcdTdmYTRcdThlY2RcdTkwZTFcdTUzNjZcdTg4ODhcdTc5NDFcdTRmYzJcdTUwYmVcdTUy''@;'; put 'put ''MTFcdTUxNDRcdTU1NTNcdTU3MmRcdTczZWFcdTU3OGJcdTU5NTFcdTVmNjJcdTVmODRcdTYwNzVcdTYxNzZcdTYxNjdcdTYxYTlcdTYzYjJcdTY0M2FcdTY1NmNcdTY2NmZcdTY4NDJcdTZlMTNcdTc1NjZcdTdhM2RcdTdjZmJcdTdkNGNcdTdkOTlcdTdlNGJcdTdmNmJcdTgzMGVcdTgzNGFc''@;'; put 'put ''dTg2Y2RcdThhMDhcdThhNjNcdThiNjZcdThlZmRcdTk4MWFcdTlkOGZcdTgyYjhcdThmY2VcdTliZTgiXSxbIjhjODAiLCJcdTUyODdcdTYyMWZcdTY0ODNcdTZmYzBcdTk2OTlcdTY4NDFcdTUwOTFcdTZiMjBcdTZjN2FcdTZmNTRcdTdhNzRcdTdkNTBcdTg4NDBcdThhMjNcdTY3MDhcdTRl''@;'; put 'put ''ZjZcdTUwMzlcdTUwMjZcdTUwNjVcdTUxN2NcdTUyMzhcdTUyNjNcdTU1YTdcdTU3MGZcdTU4MDVcdTVhY2NcdTVlZmFcdTYxYjJcdTYxZjhcdTYyZjNcdTYzNzJcdTY5MWNcdTZhMjlcdTcyN2RcdTcyYWNcdTczMmVcdTc4MTRcdTc4NmZcdTdkNzlcdTc3MGNcdTgwYTlcdTg5OGJcdThiMTlc''@;'; put 'put ''dThjZTJcdThlZDJcdTkwNjNcdTkzNzVcdTk2N2FcdTk4NTVcdTlhMTNcdTllNzhcdTUxNDNcdTUzOWZcdTUzYjNcdTVlN2JcdTVmMjZcdTZlMWJcdTZlOTBcdTczODRcdTczZmVcdTdkNDNcdTgyMzdcdThhMDBcdThhZmFcdTk2NTBcdTRlNGVcdTUwMGJcdTUzZTRcdTU0N2NcdTU2ZmFcdTU5''@;'; put 'put ''ZDFcdTViNjRcdTVkZjFcdTVlYWJcdTVmMjdcdTYyMzhcdTY1NDVcdTY3YWZcdTZlNTZcdTcyZDBcdTdjY2FcdTg4YjRcdTgwYTFcdTgwZTFcdTgzZjBcdTg2NGVcdThhODdcdThkZThcdTkyMzdcdTk2YzdcdTk4NjdcdTlmMTNcdTRlOTRcdTRlOTJcdTRmMGRcdTUzNDhcdTU0NDlcdTU0M2Vc''@;'; put 'put ''dTVhMmZcdTVmOGNcdTVmYTFcdTYwOWZcdTY4YTdcdTZhOGVcdTc0NWFcdTc4ODFcdThhOWVcdThhYTRcdThiNzdcdTkxOTBcdTRlNWVcdTliYzlcdTRlYTRcdTRmN2NcdTRmYWZcdTUwMTlcdTUwMTZcdTUxNDlcdTUxNmNcdTUyOWZcdTUyYjlcdTUyZmVcdTUzOWFcdTUzZTNcdTU0MTEiXSxb''@;'; put 'put ''IjhkNDAiLCJcdTU0MGVcdTU1ODlcdTU3NTFcdTU3YTJcdTU5N2RcdTViNTRcdTViNWRcdTViOGZcdTVkZTVcdTVkZTdcdTVkZjdcdTVlNzhcdTVlODNcdTVlOWFcdTVlYjdcdTVmMThcdTYwNTJcdTYxNGNcdTYyOTdcdTYyZDhcdTYzYTdcdTY1M2JcdTY2MDJcdTY2NDNcdTY2ZjRcdTY3NmRc''@;'; put 'put ''dTY4MjFcdTY4OTdcdTY5Y2JcdTZjNWZcdTZkMmFcdTZkNjlcdTZlMmZcdTZlOWRcdTc1MzJcdTc2ODdcdTc4NmNcdTdhM2ZcdTdjZTBcdTdkMDVcdTdkMThcdTdkNWVcdTdkYjFcdTgwMTVcdTgwMDNcdTgwYWZcdTgwYjFcdTgxNTRcdTgxOGZcdTgyMmFcdTgzNTJcdTg4NGNcdTg4NjFcdThi''@;'; put 'put ''MWJcdThjYTJcdThjZmNcdTkwY2FcdTkxNzVcdTkyNzFcdTc4M2ZcdTkyZmNcdTk1YTRcdTk2NGQiXSxbIjhkODAiLCJcdTk4MDVcdTk5OTlcdTlhZDhcdTlkM2JcdTUyNWJcdTUyYWJcdTUzZjdcdTU0MDhcdTU4ZDVcdTYyZjdcdTZmZTBcdThjNmFcdThmNWZcdTllYjlcdTUxNGJcdTUyM2Jc''@;'; put 'put ''dTU0NGFcdTU2ZmRcdTdhNDBcdTkxNzdcdTlkNjBcdTllZDJcdTczNDRcdTZmMDlcdTgxNzBcdTc1MTFcdTVmZmRcdTYwZGFcdTlhYThcdTcyZGJcdThmYmNcdTZiNjRcdTk4MDNcdTRlY2FcdTU2ZjBcdTU3NjRcdTU4YmVcdTVhNWFcdTYwNjhcdTYxYzdcdTY2MGZcdTY2MDZcdTY4MzlcdTY4''@;'; put 'put ''YjFcdTZkZjdcdTc1ZDVcdTdkM2FcdTgyNmVcdTliNDJcdTRlOWJcdTRmNTBcdTUzYzlcdTU1MDZcdTVkNmZcdTVkZTZcdTVkZWVcdTY3ZmJcdTZjOTlcdTc0NzNcdTc4MDJcdThhNTBcdTkzOTZcdTg4ZGZcdTU3NTBcdTVlYTdcdTYzMmJcdTUwYjVcdTUwYWNcdTUxOGRcdTY3MDBcdTU0Yzlc''@;'; put 'put ''dTU4NWVcdTU5YmJcdTViYjBcdTVmNjlcdTYyNGRcdTYzYTFcdTY4M2RcdTZiNzNcdTZlMDhcdTcwN2RcdTkxYzdcdTcyODBcdTc4MTVcdTc4MjZcdTc5NmRcdTY1OGVcdTdkMzBcdTgzZGNcdTg4YzFcdThmMDlcdTk2OWJcdTUyNjRcdTU3MjhcdTY3NTBcdTdmNmFcdThjYTFcdTUxYjRcdTU3''@;'; put 'put ''NDJcdTk2MmFcdTU4M2FcdTY5OGFcdTgwYjRcdTU0YjJcdTVkMGVcdTU3ZmNcdTc4OTVcdTlkZmFcdTRmNWNcdTUyNGFcdTU0OGJcdTY0M2VcdTY2MjhcdTY3MTRcdTY3ZjVcdTdhODRcdTdiNTZcdTdkMjJcdTkzMmZcdTY4NWNcdTliYWRcdTdiMzlcdTUzMTlcdTUxOGFcdTUyMzciXSxbIjhl''@;'; put 'put ''NDAiLCJcdTViZGZcdTYyZjZcdTY0YWVcdTY0ZTZcdTY3MmRcdTZiYmFcdTg1YTlcdTk2ZDFcdTc2OTBcdTliZDZcdTYzNGNcdTkzMDZcdTliYWJcdTc2YmZcdTY2NTJcdTRlMDlcdTUwOThcdTUzYzJcdTVjNzFcdTYwZThcdTY0OTJcdTY1NjNcdTY4NWZcdTcxZTZcdTczY2FcdTc1MjNcdTdi''@;'; put 'put ''OTdcdTdlODJcdTg2OTVcdThiODNcdThjZGJcdTkxNzhcdTk5MTBcdTY1YWNcdTY2YWJcdTZiOGJcdTRlZDVcdTRlZDRcdTRmM2FcdTRmN2ZcdTUyM2FcdTUzZjhcdTUzZjJcdTU1ZTNcdTU2ZGJcdTU4ZWJcdTU5Y2JcdTU5YzlcdTU5ZmZcdTViNTBcdTVjNGRcdTVlMDJcdTVlMmJcdTVmZDdc''@;'; put 'put ''dTYwMWRcdTYzMDdcdTY1MmZcdTViNWNcdTY1YWZcdTY1YmRcdTY1ZThcdTY3OWRcdTZiNjIiXSxbIjhlODAiLCJcdTZiN2JcdTZjMGZcdTczNDVcdTc5NDlcdTc5YzFcdTdjZjhcdTdkMTlcdTdkMmJcdTgwYTJcdTgxMDJcdTgxZjNcdTg5OTZcdThhNWVcdThhNjlcdThhNjZcdThhOGNcdThh''@;'; put 'put ''ZWVcdThjYzdcdThjZGNcdTk2Y2NcdTk4ZmNcdTZiNmZcdTRlOGJcdTRmM2NcdTRmOGRcdTUxNTBcdTViNTdcdTViZmFcdTYxNDhcdTYzMDFcdTY2NDJcdTZiMjFcdTZlY2JcdTZjYmJcdTcyM2VcdTc0YmRcdTc1ZDRcdTc4YzFcdTc5M2FcdTgwMGNcdTgwMzNcdTgxZWFcdTg0OTRcdThmOWVc''@;'; put 'put ''dTZjNTBcdTllN2ZcdTVmMGZcdThiNThcdTlkMmJcdTdhZmFcdThlZjhcdTViOGRcdTk2ZWJcdTRlMDNcdTUzZjFcdTU3ZjdcdTU5MzFcdTVhYzlcdTViYTRcdTYwODlcdTZlN2ZcdTZmMDZcdTc1YmVcdThjZWFcdTViOWZcdTg1MDBcdTdiZTBcdTUwNzJcdTY3ZjRcdTgyOWRcdTVjNjFcdTg1''@;'; put 'put ''NGFcdTdlMWVcdTgyMGVcdTUxOTlcdTVjMDRcdTYzNjhcdThkNjZcdTY1OWNcdTcxNmVcdTc5M2VcdTdkMTdcdTgwMDVcdThiMWRcdThlY2FcdTkwNmVcdTg2YzdcdTkwYWFcdTUwMWZcdTUyZmFcdTVjM2FcdTY3NTNcdTcwN2NcdTcyMzVcdTkxNGNcdTkxYzhcdTkzMmJcdTgyZTVcdTViYzJc''@;'; put 'put ''dTVmMzFcdTYwZjlcdTRlM2JcdTUzZDZcdTViODhcdTYyNGJcdTY3MzFcdTZiOGFcdTcyZTlcdTczZTBcdTdhMmVcdTgxNmJcdThkYTNcdTkxNTJcdTk5OTZcdTUxMTJcdTUzZDdcdTU0NmFcdTViZmZcdTYzODhcdTZhMzlcdTdkYWNcdTk3MDBcdTU2ZGFcdTUzY2VcdTU0NjgiXSxbIjhmNDAi''@;'; put 'put ''LCJcdTViOTdcdTVjMzFcdTVkZGVcdTRmZWVcdTYxMDFcdTYyZmVcdTZkMzJcdTc5YzBcdTc5Y2JcdTdkNDJcdTdlNGRcdTdmZDJcdTgxZWRcdTgyMWZcdTg0OTBcdTg4NDZcdTg5NzJcdThiOTBcdThlNzRcdThmMmZcdTkwMzFcdTkxNGJcdTkxNmNcdTk2YzZcdTkxOWNcdTRlYzBcdTRmNGZc''@;'; put 'put ''dTUxNDVcdTUzNDFcdTVmOTNcdTYyMGVcdTY3ZDRcdTZjNDFcdTZlMGJcdTczNjNcdTdlMjZcdTkxY2RcdTkyODNcdTUzZDRcdTU5MTlcdTViYmZcdTZkZDFcdTc5NWRcdTdlMmVcdTdjOWJcdTU4N2VcdTcxOWZcdTUxZmFcdTg4NTNcdThmZjBcdTRmY2FcdTVjZmJcdTY2MjVcdTc3YWNcdTdh''@;'; put 'put ''ZTNcdTgyMWNcdTk5ZmZcdTUxYzZcdTVmYWFcdTY1ZWNcdTY5NmZcdTZiODlcdTZkZjMiXSxbIjhmODAiLCJcdTZlOTZcdTZmNjRcdTc2ZmVcdTdkMTRcdTVkZTFcdTkwNzVcdTkxODdcdTk4MDZcdTUxZTZcdTUyMWRcdTYyNDBcdTY2OTFcdTY2ZDlcdTZlMWFcdTVlYjZcdTdkZDJcdTdmNzJc''@;'; put 'put ''dTY2ZjhcdTg1YWZcdTg1ZjdcdThhZjhcdTUyYTlcdTUzZDlcdTU5NzNcdTVlOGZcdTVmOTBcdTYwNTVcdTkyZTRcdTk2NjRcdTUwYjdcdTUxMWZcdTUyZGRcdTUzMjBcdTUzNDdcdTUzZWNcdTU0ZThcdTU1NDZcdTU1MzFcdTU2MTdcdTU5NjhcdTU5YmVcdTVhM2NcdTViYjVcdTVjMDZcdTVj''@;'; put 'put ''MGZcdTVjMTFcdTVjMWFcdTVlODRcdTVlOGFcdTVlZTBcdTVmNzBcdTYyN2ZcdTYyODRcdTYyZGJcdTYzOGNcdTYzNzdcdTY2MDdcdTY2MGNcdTY2MmRcdTY2NzZcdTY3N2VcdTY4YTJcdTZhMWZcdTZhMzVcdTZjYmNcdTZkODhcdTZlMDlcdTZlNThcdTcxM2NcdTcxMjZcdTcxNjdcdTc1Yzdc''@;'; put 'put ''dTc3MDFcdTc4NWRcdTc5MDFcdTc5NjVcdTc5ZjBcdTdhZTBcdTdiMTFcdTdjYTdcdTdkMzlcdTgwOTZcdTgzZDZcdTg0OGJcdTg1NDlcdTg4NWRcdTg4ZjNcdThhMWZcdThhM2NcdThhNTRcdThhNzNcdThjNjFcdThjZGVcdTkxYTRcdTkyNjZcdTkzN2VcdTk0MThcdTk2OWNcdTk3OThcdTRl''@;'; put 'put ''MGFcdTRlMDhcdTRlMWVcdTRlNTdcdTUxOTdcdTUyNzBcdTU3Y2VcdTU4MzRcdTU4Y2NcdTViMjJcdTVlMzhcdTYwYzVcdTY0ZmVcdTY3NjFcdTY3NTZcdTZkNDRcdTcyYjZcdTc1NzNcdTdhNjNcdTg0YjhcdThiNzJcdTkxYjhcdTkzMjBcdTU2MzFcdTU3ZjRcdTk4ZmUiXSxbIjkwNDAiLCJc''@;'; put 'put ''dTYyZWRcdTY5MGRcdTZiOTZcdTcxZWRcdTdlNTRcdTgwNzdcdTgyNzJcdTg5ZTZcdTk4ZGZcdTg3NTVcdThmYjFcdTVjM2JcdTRmMzhcdTRmZTFcdTRmYjVcdTU1MDdcdTVhMjBcdTViZGRcdTViZTlcdTVmYzNcdTYxNGVcdTYzMmZcdTY1YjBcdTY2NGJcdTY4ZWVcdTY5OWJcdTZkNzhcdTZk''@;'; put 'put ''ZjFcdTc1MzNcdTc1YjlcdTc3MWZcdTc5NWVcdTc5ZTZcdTdkMzNcdTgxZTNcdTgyYWZcdTg1YWFcdTg5YWFcdThhM2FcdThlYWJcdThmOWJcdTkwMzJcdTkxZGRcdTk3MDdcdTRlYmFcdTRlYzFcdTUyMDNcdTU4NzVcdTU4ZWNcdTVjMGJcdTc1MWFcdTVjM2RcdTgxNGVcdThhMGFcdThmYzVc''@;'; put 'put ''dTk2NjNcdTk3NmRcdTdiMjVcdThhY2ZcdTk4MDhcdTkxNjJcdTU2ZjNcdTUzYTgiXSxbIjkwODAiLCJcdTkwMTdcdTU0MzlcdTU3ODJcdTVlMjVcdTYzYThcdTZjMzRcdTcwOGFcdTc3NjFcdTdjOGJcdTdmZTBcdTg4NzBcdTkwNDJcdTkxNTRcdTkzMTBcdTkzMThcdTk2OGZcdTc0NWVcdTlh''@;'; put 'put ''YzRcdTVkMDdcdTVkNjlcdTY1NzBcdTY3YTJcdThkYThcdTk2ZGJcdTYzNmVcdTY3NDlcdTY5MTlcdTgzYzVcdTk4MTdcdTk2YzBcdTg4ZmVcdTZmODRcdTY0N2FcdTViZjhcdTRlMTZcdTcwMmNcdTc1NWRcdTY2MmZcdTUxYzRcdTUyMzZcdTUyZTJcdTU5ZDNcdTVmODFcdTYwMjdcdTYyMTBc''@;'; put 'put ''dTY1M2ZcdTY1NzRcdTY2MWZcdTY2NzRcdTY4ZjJcdTY4MTZcdTZiNjNcdTZlMDVcdTcyNzJcdTc1MWZcdTc2ZGJcdTdjYmVcdTgwNTZcdTU4ZjBcdTg4ZmRcdTg5N2ZcdThhYTBcdThhOTNcdThhY2JcdTkwMWRcdTkxOTJcdTk3NTJcdTk3NTlcdTY1ODlcdTdhMGVcdTgxMDZcdTk2YmJcdTVl''@;'; put 'put ''MmRcdTYwZGNcdTYyMWFcdTY1YTVcdTY2MTRcdTY3OTBcdTc3ZjNcdTdhNGRcdTdjNGRcdTdlM2VcdTgxMGFcdThjYWNcdThkNjRcdThkZTFcdThlNWZcdTc4YTlcdTUyMDdcdTYyZDlcdTYzYTVcdTY0NDJcdTYyOThcdThhMmRcdTdhODNcdTdiYzBcdThhYWNcdTk2ZWFcdTdkNzZcdTgyMGNc''@;'; put 'put ''dTg3NDlcdTRlZDlcdTUxNDhcdTUzNDNcdTUzNjBcdTViYTNcdTVjMDJcdTVjMTZcdTVkZGRcdTYyMjZcdTYyNDdcdTY0YjBcdTY4MTNcdTY4MzRcdTZjYzlcdTZkNDVcdTZkMTdcdTY3ZDNcdTZmNWNcdTcxNGVcdTcxN2RcdTY1Y2JcdTdhN2ZcdTdiYWRcdTdkZGEiXSxbIjkxNDAiLCJcdTdl''@;'; put 'put ''NGFcdTdmYThcdTgxN2FcdTgyMWJcdTgyMzlcdTg1YTZcdThhNmVcdThjY2VcdThkZjVcdTkwNzhcdTkwNzdcdTkyYWRcdTkyOTFcdTk1ODNcdTliYWVcdTUyNGRcdTU1ODRcdTZmMzhcdTcxMzZcdTUxNjhcdTc5ODVcdTdlNTVcdTgxYjNcdTdjY2VcdTU2NGNcdTU4NTFcdTVjYThcdTYzYWFc''@;'; put 'put ''dTY2ZmVcdTY2ZmRcdTY5NWFcdTcyZDlcdTc1OGZcdTc1OGVcdTc5MGVcdTc5NTZcdTc5ZGZcdTdjOTdcdTdkMjBcdTdkNDRcdTg2MDdcdThhMzRcdTk2M2JcdTkwNjFcdTlmMjBcdTUwZTdcdTUyNzVcdTUzY2NcdTUzZTJcdTUwMDlcdTU1YWFcdTU4ZWVcdTU5NGZcdTcyM2RcdTViOGJcdTVj''@;'; put 'put ''NjRcdTUzMWRcdTYwZTNcdTYwZjNcdTYzNWNcdTYzODNcdTYzM2ZcdTYzYmIiXSxbIjkxODAiLCJcdTY0Y2RcdTY1ZTlcdTY2ZjlcdTVkZTNcdTY5Y2RcdTY5ZmRcdTZmMTVcdTcxZTVcdTRlODlcdTc1ZTlcdTc2ZjhcdTdhOTNcdTdjZGZcdTdkY2ZcdTdkOWNcdTgwNjFcdTgzNDlcdTgzNThc''@;'; put 'put ''dTg0NmNcdTg0YmNcdTg1ZmJcdTg4YzVcdThkNzBcdTkwMDFcdTkwNmRcdTkzOTdcdTk3MWNcdTlhMTJcdTUwY2ZcdTU4OTdcdTYxOGVcdTgxZDNcdTg1MzVcdThkMDhcdTkwMjBcdTRmYzNcdTUwNzRcdTUyNDdcdTUzNzNcdTYwNmZcdTYzNDlcdTY3NWZcdTZlMmNcdThkYjNcdTkwMWZcdTRm''@;'; put 'put ''ZDdcdTVjNWVcdThjY2FcdTY1Y2ZcdTdkOWFcdTUzNTJcdTg4OTZcdTUxNzZcdTYzYzNcdTViNThcdTViNmJcdTVjMGFcdTY0MGRcdTY3NTFcdTkwNWNcdTRlZDZcdTU5MWFcdTU5MmFcdTZjNzBcdThhNTFcdTU1M2VcdTU4MTVcdTU5YTVcdTYwZjBcdTYyNTNcdTY3YzFcdTgyMzVcdTY5NTVc''@;'; put 'put ''dTk2NDBcdTk5YzRcdTlhMjhcdTRmNTNcdTU4MDZcdTViZmVcdTgwMTBcdTVjYjFcdTVlMmZcdTVmODVcdTYwMjBcdTYxNGJcdTYyMzRcdTY2ZmZcdTZjZjBcdTZlZGVcdTgwY2VcdTgxN2ZcdTgyZDRcdTg4OGJcdThjYjhcdTkwMDBcdTkwMmVcdTk2OGFcdTllZGJcdTliZGJcdTRlZTNcdTUz''@;'; put 'put ''ZjBcdTU5MjdcdTdiMmNcdTkxOGRcdTk4NGNcdTlkZjlcdTZlZGRcdTcwMjdcdTUzNTNcdTU1NDRcdTViODVcdTYyNThcdTYyOWVcdTYyZDNcdTZjYTJcdTZmZWZcdTc0MjJcdThhMTdcdTk0MzhcdTZmYzFcdThhZmVcdTgzMzhcdTUxZTdcdTg2ZjhcdTUzZWEiXSxbIjkyNDAiLCJcdTUzZTlc''@;'; put 'put ''dTRmNDZcdTkwNTRcdThmYjBcdTU5NmFcdTgxMzFcdTVkZmRcdTdhZWFcdThmYmZcdTY4ZGFcdThjMzdcdTcyZjhcdTljNDhcdTZhM2RcdThhYjBcdTRlMzlcdTUzNThcdTU2MDZcdTU3NjZcdTYyYzVcdTYzYTJcdTY1ZTZcdTZiNGVcdTZkZTFcdTZlNWJcdTcwYWRcdTc3ZWRcdTdhZWZcdTdi''@;'; put 'put ''YWFcdTdkYmJcdTgwM2RcdTgwYzZcdTg2Y2JcdThhOTVcdTkzNWJcdTU2ZTNcdTU4YzdcdTVmM2VcdTY1YWRcdTY2OTZcdTZhODBcdTZiYjVcdTc1MzdcdThhYzdcdTUwMjRcdTc3ZTVcdTU3MzBcdTVmMWJcdTYwNjVcdTY2N2FcdTZjNjBcdTc1ZjRcdTdhMWFcdTdmNmVcdTgxZjRcdTg3MThc''@;'; put 'put ''dTkwNDVcdTk5YjNcdTdiYzlcdTc1NWNcdTdhZjlcdTdiNTFcdTg0YzQiXSxbIjkyODAiLCJcdTkwMTBcdTc5ZTlcdTdhOTJcdTgzMzZcdTVhZTFcdTc3NDBcdTRlMmRcdTRlZjJcdTViOTlcdTVmZTBcdTYyYmRcdTY2M2NcdTY3ZjFcdTZjZThcdTg2NmJcdTg4NzdcdThhM2JcdTkxNGVcdTky''@;'; put 'put ''ZjNcdTk5ZDBcdTZhMTdcdTcwMjZcdTczMmFcdTgyZTdcdTg0NTdcdThjYWZcdTRlMDFcdTUxNDZcdTUxY2JcdTU1OGJcdTViZjVcdTVlMTZcdTVlMzNcdTVlODFcdTVmMTRcdTVmMzVcdTVmNmJcdTVmYjRcdTYxZjJcdTYzMTFcdTY2YTJcdTY3MWRcdTZmNmVcdTcyNTJcdTc1M2FcdTc3M2Fc''@;'; put 'put ''dTgwNzRcdTgxMzlcdTgxNzhcdTg3NzZcdThhYmZcdThhZGNcdThkODVcdThkZjNcdTkyOWFcdTk1NzdcdTk4MDJcdTljZTVcdTUyYzVcdTYzNTdcdTc2ZjRcdTY3MTVcdTZjODhcdTczY2RcdThjYzNcdTkzYWVcdTk2NzNcdTZkMjVcdTU4OWNcdTY5MGVcdTY5Y2NcdThmZmRcdTkzOWFcdTc1''@;'; put 'put ''ZGJcdTkwMWFcdTU4NWFcdTY4MDJcdTYzYjRcdTY5ZmJcdTRmNDNcdTZmMmNcdTY3ZDhcdThmYmJcdTg1MjZcdTdkYjRcdTkzNTRcdTY5M2ZcdTZmNzBcdTU3NmFcdTU4ZjdcdTViMmNcdTdkMmNcdTcyMmFcdTU0MGFcdTkxZTNcdTlkYjRcdTRlYWRcdTRmNGVcdTUwNWNcdTUwNzVcdTUyNDNc''@;'; put 'put ''dThjOWVcdTU0NDhcdTU4MjRcdTViOWFcdTVlMWRcdTVlOTVcdTVlYWRcdTVlZjdcdTVmMWZcdTYwOGNcdTYyYjVcdTYzM2FcdTYzZDBcdTY4YWZcdTZjNDBcdTc4ODdcdTc5OGVcdTdhMGJcdTdkZTBcdTgyNDdcdThhMDJcdThhZTZcdThlNDRcdTkwMTMiXSxbIjkzNDAiLCJcdTkwYjhcdTkx''@;'; put 'put ''MmRcdTkxZDhcdTlmMGVcdTZjZTVcdTY0NThcdTY0ZTJcdTY1NzVcdTZlZjRcdTc2ODRcdTdiMWJcdTkwNjlcdTkzZDFcdTZlYmFcdTU0ZjJcdTVmYjlcdTY0YTRcdThmNGRcdThmZWRcdTkyNDRcdTUxNzhcdTU4NmJcdTU5MjlcdTVjNTVcdTVlOTdcdTZkZmJcdTdlOGZcdTc1MWNcdThjYmNc''@;'; put 'put ''dThlZTJcdTk4NWJcdTcwYjlcdTRmMWRcdTZiYmZcdTZmYjFcdTc1MzBcdTk2ZmJcdTUxNGVcdTU0MTBcdTU4MzVcdTU4NTdcdTU5YWNcdTVjNjBcdTVmOTJcdTY1OTdcdTY3NWNcdTZlMjFcdTc2N2JcdTgzZGZcdThjZWRcdTkwMTRcdTkwZmRcdTkzNGRcdTc4MjVcdTc4M2FcdTUyYWFcdTVl''@;'; put 'put ''YTZcdTU3MWZcdTU5NzRcdTYwMTJcdTUwMTJcdTUxNWFcdTUxYWMiXSxbIjkzODAiLCJcdTUxY2RcdTUyMDBcdTU1MTBcdTU4NTRcdTU4NThcdTU5NTdcdTViOTVcdTVjZjZcdTVkOGJcdTYwYmNcdTYyOTVcdTY0MmRcdTY3NzFcdTY4NDNcdTY4YmNcdTY4ZGZcdTc2ZDdcdTZkZDhcdTZlNmZc''@;'; put 'put ''dTZkOWJcdTcwNmZcdTcxYzhcdTVmNTNcdTc1ZDhcdTc5NzdcdTdiNDlcdTdiNTRcdTdiNTJcdTdjZDZcdTdkNzFcdTUyMzBcdTg0NjNcdTg1NjlcdTg1ZTRcdThhMGVcdThiMDRcdThjNDZcdThlMGZcdTkwMDNcdTkwMGZcdTk0MTlcdTk2NzZcdTk4MmRcdTlhMzBcdTk1ZDhcdTUwY2RcdTUy''@;'; put 'put ''ZDVcdTU0MGNcdTU4MDJcdTVjMGVcdTYxYTdcdTY0OWVcdTZkMWVcdTc3YjNcdTdhZTVcdTgwZjRcdTg0MDRcdTkwNTNcdTkyODVcdTVjZTBcdTlkMDdcdTUzM2ZcdTVmOTdcdTVmYjNcdTZkOWNcdTcyNzlcdTc3NjNcdTc5YmZcdTdiZTRcdTZiZDJcdTcyZWNcdThhYWRcdTY4MDNcdTZhNjFc''@;'; put 'put ''dTUxZjhcdTdhODFcdTY5MzRcdTVjNGFcdTljZjZcdTgyZWJcdTViYzVcdTkxNDlcdTcwMWVcdTU2NzhcdTVjNmZcdTYwYzdcdTY1NjZcdTZjOGNcdThjNWFcdTkwNDFcdTk4MTNcdTU0NTFcdTY2YzdcdTkyMGRcdTU5NDhcdTkwYTNcdTUxODVcdTRlNGRcdTUxZWFcdTg1OTlcdThiMGVcdTcw''@;'; put 'put ''NThcdTYzN2FcdTkzNGJcdTY5NjJcdTk5YjRcdTdlMDRcdTc1NzdcdTUzNTdcdTY5NjBcdThlZGZcdTk2ZTNcdTZjNWRcdTRlOGNcdTVjM2NcdTVmMTBcdThmZTlcdTUzMDJcdThjZDFcdTgwODlcdTg2NzlcdTVlZmZcdTY1ZTVcdTRlNzNcdTUxNjUiXSxbIjk0NDAiLCJcdTU5ODJcdTVjM2Zc''@;'; put 'put ''dTk3ZWVcdTRlZmJcdTU5OGFcdTVmY2RcdThhOGRcdTZmZTFcdTc5YjBcdTc5NjJcdTViZTdcdTg0NzFcdTczMmJcdTcxYjFcdTVlNzRcdTVmZjVcdTYzN2JcdTY0OWFcdTcxYzNcdTdjOThcdTRlNDNcdTVlZmNcdTRlNGJcdTU3ZGNcdTU2YTJcdTYwYTlcdTZmYzNcdTdkMGRcdTgwZmRcdTgx''@;'; put 'put ''MzNcdTgxYmZcdThmYjJcdTg5OTdcdTg2YTRcdTVkZjRcdTYyOGFcdTY0YWRcdTg5ODdcdTY3NzdcdTZjZTJcdTZkM2VcdTc0MzZcdTc4MzRcdTVhNDZcdTdmNzVcdTgyYWRcdTk5YWNcdTRmZjNcdTVlYzNcdTYyZGRcdTYzOTJcdTY1NTdcdTY3NmZcdTc2YzNcdTcyNGNcdTgwY2NcdTgwYmFc''@;'; put 'put ''dThmMjlcdTkxNGRcdTUwMGRcdTU3ZjlcdTVhOTJcdTY4ODUiXSxbIjk0ODAiLCJcdTY5NzNcdTcxNjRcdTcyZmRcdThjYjdcdTU4ZjJcdThjZTBcdTk2NmFcdTkwMTlcdTg3N2ZcdTc5ZTRcdTc3ZTdcdTg0MjlcdTRmMmZcdTUyNjVcdTUzNWFcdTYyY2RcdTY3Y2ZcdTZjY2FcdTc2N2RcdTdi''@;'; put 'put ''OTRcdTdjOTVcdTgyMzZcdTg1ODRcdThmZWJcdTY2ZGRcdTZmMjBcdTcyMDZcdTdlMWJcdTgzYWJcdTk5YzFcdTllYTZcdTUxZmRcdTdiYjFcdTc4NzJcdTdiYjhcdTgwODdcdTdiNDhcdTZhZThcdTVlNjFcdTgwOGNcdTc1NTFcdTc1NjBcdTUxNmJcdTkyNjJcdTZlOGNcdTc2N2FcdTkxOTdc''@;'; put 'put ''dTlhZWFcdTRmMTBcdTdmNzBcdTYyOWNcdTdiNGZcdTk1YTVcdTljZTlcdTU2N2FcdTU4NTlcdTg2ZTRcdTk2YmNcdTRmMzRcdTUyMjRcdTUzNGFcdTUzY2RcdTUzZGJcdTVlMDZcdTY0MmNcdTY1OTFcdTY3N2ZcdTZjM2VcdTZjNGVcdTcyNDhcdTcyYWZcdTczZWRcdTc1NTRcdTdlNDFcdTgy''@;'; put 'put ''MmNcdTg1ZTlcdThjYTlcdTdiYzRcdTkxYzZcdTcxNjlcdTk4MTJcdTk4ZWZcdTYzM2RcdTY2NjlcdTc1NmFcdTc2ZTRcdTc4ZDBcdTg1NDNcdTg2ZWVcdTUzMmFcdTUzNTFcdTU0MjZcdTU5ODNcdTVlODdcdTVmN2NcdTYwYjJcdTYyNDlcdTYyNzlcdTYyYWJcdTY1OTBcdTZiZDRcdTZjY2Nc''@;'; put 'put ''dTc1YjJcdTc2YWVcdTc4OTFcdTc5ZDhcdTdkY2JcdTdmNzdcdTgwYTVcdTg4YWJcdThhYjlcdThjYmJcdTkwN2ZcdTk3NWVcdTk4ZGJcdTZhMGJcdTdjMzhcdTUwOTlcdTVjM2VcdTVmYWVcdTY3ODdcdTZiZDhcdTc0MzVcdTc3MDlcdTdmOGUiXSxbIjk1NDAiLCJcdTlmM2JcdTY3Y2FcdTdh''@;'; put 'put ''MTdcdTUzMzlcdTc1OGJcdTlhZWRcdTVmNjZcdTgxOWRcdTgzZjFcdTgwOThcdTVmM2NcdTVmYzVcdTc1NjJcdTdiNDZcdTkwM2NcdTY4NjdcdTU5ZWJcdTVhOWJcdTdkMTBcdTc2N2VcdThiMmNcdTRmZjVcdTVmNmFcdTZhMTlcdTZjMzdcdTZmMDJcdTc0ZTJcdTc5NjhcdTg4NjhcdThhNTVc''@;'; put 'put ''dThjNzlcdTVlZGZcdTYzY2ZcdTc1YzVcdTc5ZDJcdTgyZDdcdTkzMjhcdTkyZjJcdTg0OWNcdTg2ZWRcdTljMmRcdTU0YzFcdTVmNmNcdTY1OGNcdTZkNWNcdTcwMTVcdThjYTdcdThjZDNcdTk4M2JcdTY1NGZcdTc0ZjZcdTRlMGRcdTRlZDhcdTU3ZTBcdTU5MmJcdTVhNjZcdTViY2NcdTUx''@;'; put 'put ''YThcdTVlMDNcdTVlOWNcdTYwMTZcdTYyNzZcdTY1NzciXSxbIjk1ODAiLCJcdTY1YTdcdTY2NmVcdTZkNmVcdTcyMzZcdTdiMjZcdTgxNTBcdTgxOWFcdTgyOTlcdThiNWNcdThjYTBcdThjZTZcdThkNzRcdTk2MWNcdTk2NDRcdTRmYWVcdTY0YWJcdTZiNjZcdTgyMWVcdTg0NjFcdTg1NmFc''@;'; put 'put ''dTkwZThcdTVjMDFcdTY5NTNcdTk4YThcdTg0N2FcdTg1NTdcdTRmMGZcdTUyNmZcdTVmYTlcdTVlNDVcdTY3MGRcdTc5OGZcdTgxNzlcdTg5MDdcdTg5ODZcdTZkZjVcdTVmMTdcdTYyNTVcdTZjYjhcdTRlY2ZcdTcyNjlcdTliOTJcdTUyMDZcdTU0M2JcdTU2NzRcdTU4YjNcdTYxYTRcdTYy''@;'; put 'put ''NmVcdTcxMWFcdTU5NmVcdTdjODlcdTdjZGVcdTdkMWJcdTk2ZjBcdTY1ODdcdTgwNWVcdTRlMTlcdTRmNzVcdTUxNzVcdTU4NDBcdTVlNjNcdTVlNzNcdTVmMGFcdTY3YzRcdTRlMjZcdTg1M2RcdTk1ODlcdTk2NWJcdTdjNzNcdTk4MDFcdTUwZmJcdTU4YzFcdTc2NTZcdTc4YTdcdTUyMjVc''@;'; put 'put ''dTc3YTVcdTg1MTFcdTdiODZcdTUwNGZcdTU5MDlcdTcyNDdcdTdiYzdcdTdkZThcdThmYmFcdThmZDRcdTkwNGRcdTRmYmZcdTUyYzlcdTVhMjlcdTVmMDFcdTk3YWRcdTRmZGRcdTgyMTdcdTkyZWFcdTU3MDNcdTYzNTVcdTZiNjlcdTc1MmJcdTg4ZGNcdThmMTRcdTdhNDJcdTUyZGZcdTU4''@;'; put 'put ''OTNcdTYxNTVcdTYyMGFcdTY2YWVcdTZiY2RcdTdjM2ZcdTgzZTlcdTUwMjNcdTRmZjhcdTUzMDVcdTU0NDZcdTU4MzFcdTU5NDlcdTViOWRcdTVjZjBcdTVjZWZcdTVkMjlcdTVlOTZcdTYyYjFcdTYzNjdcdTY1M2VcdTY1YjlcdTY3MGIiXSxbIjk2NDAiLCJcdTZjZDVcdTZjZTFcdTcwZjlc''@;'; put 'put ''dTc4MzJcdTdlMmJcdTgwZGVcdTgyYjNcdTg0MGNcdTg0ZWNcdTg3MDJcdTg5MTJcdThhMmFcdThjNGFcdTkwYTZcdTkyZDJcdTk4ZmRcdTljZjNcdTlkNmNcdTRlNGZcdTRlYTFcdTUwOGRcdTUyNTZcdTU3NGFcdTU5YThcdTVlM2RcdTVmZDhcdTVmZDlcdTYyM2ZcdTY2YjRcdTY3MWJcdTY3''@;'; put 'put ''ZDBcdTY4ZDJcdTUxOTJcdTdkMjFcdTgwYWFcdTgxYThcdThiMDBcdThjOGNcdThjYmZcdTkyN2VcdTk2MzJcdTU0MjBcdTk4MmNcdTUzMTdcdTUwZDVcdTUzNWNcdTU4YThcdTY0YjJcdTY3MzRcdTcyNjdcdTc3NjZcdTdhNDZcdTkxZTZcdTUyYzNcdTZjYTFcdTZiODZcdTU4MDBcdTVlNGNc''@;'; put 'put ''dTU5NTRcdTY3MmNcdTdmZmJcdTUxZTFcdTc2YzYiXSxbIjk2ODAiLCJcdTY0NjlcdTc4ZThcdTliNTRcdTllYmJcdTU3Y2JcdTU5YjlcdTY2MjdcdTY3OWFcdTZiY2VcdTU0ZTlcdTY5ZDlcdTVlNTVcdTgxOWNcdTY3OTVcdTliYWFcdTY3ZmVcdTljNTJcdTY4NWRcdTRlYTZcdTRmZTNcdTUz''@;'; put 'put ''YzhcdTYyYjlcdTY3MmJcdTZjYWJcdThmYzRcdTRmYWRcdTdlNmRcdTllYmZcdTRlMDdcdTYxNjJcdTZlODBcdTZmMmJcdTg1MTNcdTU0NzNcdTY3MmFcdTliNDVcdTVkZjNcdTdiOTVcdTVjYWNcdTViYzZcdTg3MWNcdTZlNGFcdTg0ZDFcdTdhMTRcdTgxMDhcdTU5OTlcdTdjOGRcdTZjMTFc''@;'; put 'put ''dTc3MjBcdTUyZDlcdTU5MjJcdTcxMjFcdTcyNWZcdTc3ZGJcdTk3MjdcdTlkNjFcdTY5MGJcdTVhN2ZcdTVhMThcdTUxYTVcdTU0MGRcdTU0N2RcdTY2MGVcdTc2ZGZcdThmZjdcdTkyOThcdTljZjRcdTU5ZWFcdTcyNWRcdTZlYzVcdTUxNGRcdTY4YzlcdTdkYmZcdTdkZWNcdTk3NjJcdTll''@;'; put 'put ''YmFcdTY0NzhcdTZhMjFcdTgzMDJcdTU5ODRcdTViNWZcdTZiZGJcdTczMWJcdTc2ZjJcdTdkYjJcdTgwMTdcdTg0OTlcdTUxMzJcdTY3MjhcdTllZDlcdTc2ZWVcdTY3NjJcdTUyZmZcdTk5MDVcdTVjMjRcdTYyM2JcdTdjN2VcdThjYjBcdTU1NGZcdTYwYjZcdTdkMGJcdTk1ODBcdTUzMDFc''@;'; put 'put ''dTRlNWZcdTUxYjZcdTU5MWNcdTcyM2FcdTgwMzZcdTkxY2VcdTVmMjVcdTc3ZTJcdTUzODRcdTVmNzlcdTdkMDRcdTg1YWNcdThhMzNcdThlOGRcdTk3NTZcdTY3ZjNcdTg1YWVcdTk0NTNcdTYxMDlcdTYxMDhcdTZjYjlcdTc2NTIiXSxbIjk3NDAiLCJcdThhZWRcdThmMzhcdTU1MmZcdTRm''@;'; put 'put ''NTFcdTUxMmFcdTUyYzdcdTUzY2JcdTViYTVcdTVlN2RcdTYwYTBcdTYxODJcdTYzZDZcdTY3MDlcdTY3ZGFcdTZlNjdcdTZkOGNcdTczMzZcdTczMzdcdTc1MzFcdTc5NTBcdTg4ZDVcdThhOThcdTkwNGFcdTkwOTFcdTkwZjVcdTk2YzRcdTg3OGRcdTU5MTVcdTRlODhcdTRmNTlcdTRlMGVc''@;'; put 'put ''dThhODlcdThmM2ZcdTk4MTBcdTUwYWRcdTVlN2NcdTU5OTZcdTViYjlcdTVlYjhcdTYzZGFcdTYzZmFcdTY0YzFcdTY2ZGNcdTY5NGFcdTY5ZDhcdTZkMGJcdTZlYjZcdTcxOTRcdTc1MjhcdTdhYWZcdTdmOGFcdTgwMDBcdTg0NDlcdTg0YzlcdTg5ODFcdThiMjFcdThlMGFcdTkwNjVcdTk2''@;'; put 'put ''N2RcdTk5MGFcdTYxN2VcdTYyOTFcdTZiMzIiXSxbIjk3ODAiLCJcdTZjODNcdTZkNzRcdTdmY2NcdTdmZmNcdTZkYzBcdTdmODVcdTg3YmFcdTg4ZjhcdTY3NjVcdTgzYjFcdTk4M2NcdTk2ZjdcdTZkMWJcdTdkNjFcdTg0M2RcdTkxNmFcdTRlNzFcdTUzNzVcdTVkNTBcdTZiMDRcdTZmZWJc''@;'; put 'put ''dTg1Y2RcdTg2MmRcdTg5YTdcdTUyMjlcdTU0MGZcdTVjNjVcdTY3NGVcdTY4YThcdTc0MDZcdTc0ODNcdTc1ZTJcdTg4Y2ZcdTg4ZTFcdTkxY2NcdTk2ZTJcdTk2NzhcdTVmOGJcdTczODdcdTdhY2JcdTg0NGVcdTYzYTBcdTc1NjVcdTUyODlcdTZkNDFcdTZlOWNcdTc0MDlcdTc1NTlcdTc4''@;'; put 'put ''NmJcdTdjOTJcdTk2ODZcdTdhZGNcdTlmOGRcdTRmYjZcdTYxNmVcdTY1YzVcdTg2NWNcdTRlODZcdTRlYWVcdTUwZGFcdTRlMjFcdTUxY2NcdTViZWVcdTY1OTlcdTY4ODFcdTZkYmNcdTczMWZcdTc2NDJcdTc3YWRcdTdhMWNcdTdjZTdcdTgyNmZcdThhZDJcdTkwN2NcdTkxY2ZcdTk2NzVc''@;'; put 'put ''dTk4MThcdTUyOWJcdTdkZDFcdTUwMmJcdTUzOThcdTY3OTdcdTZkY2JcdTcxZDBcdTc0MzNcdTgxZThcdThmMmFcdTk2YTNcdTljNTdcdTllOWZcdTc0NjBcdTU4NDFcdTZkOTlcdTdkMmZcdTk4NWVcdTRlZTRcdTRmMzZcdTRmOGJcdTUxYjdcdTUyYjFcdTVkYmFcdTYwMWNcdTczYjJcdTc5''@;'; put 'put ''M2NcdTgyZDNcdTkyMzRcdTk2YjdcdTk2ZjZcdTk3MGFcdTllOTdcdTlmNjJcdTY2YTZcdTZiNzRcdTUyMTdcdTUyYTNcdTcwYzhcdTg4YzJcdTVlYzlcdTYwNGJcdTYxOTBcdTZmMjNcdTcxNDlcdTdjM2VcdTdkZjRcdTgwNmYiXSxbIjk4NDAiLCJcdTg0ZWVcdTkwMjNcdTkzMmNcdTU0NDJc''@;'; put 'put ''dTliNmZcdTZhZDNcdTcwODlcdThjYzJcdThkZWZcdTk3MzJcdTUyYjRcdTVhNDFcdTVlY2FcdTVmMDRcdTY3MTdcdTY5N2NcdTY5OTRcdTZkNmFcdTZmMGZcdTcyNjJcdTcyZmNcdTdiZWRcdTgwMDFcdTgwN2VcdTg3NGJcdTkwY2VcdTUxNmRcdTllOTNcdTc5ODRcdTgwOGJcdTkzMzJcdThh''@;'; put 'put ''ZDZcdTUwMmRcdTU0OGNcdThhNzFcdTZiNmFcdThjYzRcdTgxMDdcdTYwZDFcdTY3YTBcdTlkZjJcdTRlOTlcdTRlOThcdTljMTBcdThhNmJcdTg1YzFcdTg1NjhcdTY5MDBcdTZlN2VcdTc4OTdcdTgxNTUiXSxbIjk4OWYiLCJcdTVmMGNcdTRlMTBcdTRlMTVcdTRlMmFcdTRlMzFcdTRlMzZc''@;'; put 'put ''dTRlM2NcdTRlM2ZcdTRlNDJcdTRlNTZcdTRlNThcdTRlODJcdTRlODVcdThjNmJcdTRlOGFcdTgyMTJcdTVmMGRcdTRlOGVcdTRlOWVcdTRlOWZcdTRlYTBcdTRlYTJcdTRlYjBcdTRlYjNcdTRlYjZcdTRlY2VcdTRlY2RcdTRlYzRcdTRlYzZcdTRlYzJcdTRlZDdcdTRlZGVcdTRlZWRcdTRl''@;'; put 'put ''ZGZcdTRlZjdcdTRmMDlcdTRmNWFcdTRmMzBcdTRmNWJcdTRmNWRcdTRmNTdcdTRmNDdcdTRmNzZcdTRmODhcdTRmOGZcdTRmOThcdTRmN2JcdTRmNjlcdTRmNzBcdTRmOTFcdTRmNmZcdTRmODZcdTRmOTZcdTUxMThcdTRmZDRcdTRmZGZcdTRmY2VcdTRmZDhcdTRmZGJcdTRmZDFcdTRmZGFc''@;'; put 'put ''dTRmZDBcdTRmZTRcdTRmZTVcdTUwMWFcdTUwMjhcdTUwMTRcdTUwMmFcdTUwMjVcdTUwMDVcdTRmMWNcdTRmZjZcdTUwMjFcdTUwMjlcdTUwMmNcdTRmZmVcdTRmZWZcdTUwMTFcdTUwMDZcdTUwNDNcdTUwNDdcdTY3MDNcdTUwNTVcdTUwNTBcdTUwNDhcdTUwNWFcdTUwNTZcdTUwNmNcdTUw''@;'; put 'put ''NzhcdTUwODBcdTUwOWFcdTUwODVcdTUwYjRcdTUwYjIiXSxbIjk5NDAiLCJcdTUwYzlcdTUwY2FcdTUwYjNcdTUwYzJcdTUwZDZcdTUwZGVcdTUwZTVcdTUwZWRcdTUwZTNcdTUwZWVcdTUwZjlcdTUwZjVcdTUxMDlcdTUxMDFcdTUxMDJcdTUxMTZcdTUxMTVcdTUxMTRcdTUxMWFcdTUxMjFc''@;'; put 'put ''dTUxM2FcdTUxMzdcdTUxM2NcdTUxM2JcdTUxM2ZcdTUxNDBcdTUxNTJcdTUxNGNcdTUxNTRcdTUxNjJcdTdhZjhcdTUxNjlcdTUxNmFcdTUxNmVcdTUxODBcdTUxODJcdTU2ZDhcdTUxOGNcdTUxODlcdTUxOGZcdTUxOTFcdTUxOTNcdTUxOTVcdTUxOTZcdTUxYTRcdTUxYTZcdTUxYTJcdTUx''@;'; put 'put ''YTlcdTUxYWFcdTUxYWJcdTUxYjNcdTUxYjFcdTUxYjJcdTUxYjBcdTUxYjVcdTUxYmRcdTUxYzVcdTUxYzlcdTUxZGJcdTUxZTBcdTg2NTVcdTUxZTlcdTUxZWQiXSxbIjk5ODAiLCJcdTUxZjBcdTUxZjVcdTUxZmVcdTUyMDRcdTUyMGJcdTUyMTRcdTUyMGVcdTUyMjdcdTUyMmFcdTUyMmVc''@;'; put 'put ''dTUyMzNcdTUyMzlcdTUyNGZcdTUyNDRcdTUyNGJcdTUyNGNcdTUyNWVcdTUyNTRcdTUyNmFcdTUyNzRcdTUyNjlcdTUyNzNcdTUyN2ZcdTUyN2RcdTUyOGRcdTUyOTRcdTUyOTJcdTUyNzFcdTUyODhcdTUyOTFcdThmYThcdThmYTdcdTUyYWNcdTUyYWRcdTUyYmNcdTUyYjVcdTUyYzFcdTUy''@;'; put 'put ''Y2RcdTUyZDdcdTUyZGVcdTUyZTNcdTUyZTZcdTk4ZWRcdTUyZTBcdTUyZjNcdTUyZjVcdTUyZjhcdTUyZjlcdTUzMDZcdTUzMDhcdTc1MzhcdTUzMGRcdTUzMTBcdTUzMGZcdTUzMTVcdTUzMWFcdTUzMjNcdTUzMmZcdTUzMzFcdTUzMzNcdTUzMzhcdTUzNDBcdTUzNDZcdTUzNDVcdTRlMTdc''@;'; put 'put ''dTUzNDlcdTUzNGRcdTUxZDZcdTUzNWVcdTUzNjlcdTUzNmVcdTU5MThcdTUzN2JcdTUzNzdcdTUzODJcdTUzOTZcdTUzYTBcdTUzYTZcdTUzYTVcdTUzYWVcdTUzYjBcdTUzYjZcdTUzYzNcdTdjMTJcdTk2ZDlcdTUzZGZcdTY2ZmNcdTcxZWVcdTUzZWVcdTUzZThcdTUzZWRcdTUzZmFcdTU0''@;'; put 'put ''MDFcdTU0M2RcdTU0NDBcdTU0MmNcdTU0MmRcdTU0M2NcdTU0MmVcdTU0MzZcdTU0MjlcdTU0MWRcdTU0NGVcdTU0OGZcdTU0NzVcdTU0OGVcdTU0NWZcdTU0NzFcdTU0NzdcdTU0NzBcdTU0OTJcdTU0N2JcdTU0ODBcdTU0NzZcdTU0ODRcdTU0OTBcdTU0ODZcdTU0YzdcdTU0YTJcdTU0Yjhc''@;'; put 'put ''dTU0YTVcdTU0YWNcdTU0YzRcdTU0YzhcdTU0YTgiXSxbIjlhNDAiLCJcdTU0YWJcdTU0YzJcdTU0YTRcdTU0YmVcdTU0YmNcdTU0ZDhcdTU0ZTVcdTU0ZTZcdTU1MGZcdTU1MTRcdTU0ZmRcdTU0ZWVcdTU0ZWRcdTU0ZmFcdTU0ZTJcdTU1MzlcdTU1NDBcdTU1NjNcdTU1NGNcdTU1MmVcdTU1''@;'; put 'put ''NWNcdTU1NDVcdTU1NTZcdTU1NTdcdTU1MzhcdTU1MzNcdTU1NWRcdTU1OTlcdTU1ODBcdTU0YWZcdTU1OGFcdTU1OWZcdTU1N2JcdTU1N2VcdTU1OThcdTU1OWVcdTU1YWVcdTU1N2NcdTU1ODNcdTU1YTlcdTU1ODdcdTU1YThcdTU1ZGFcdTU1YzVcdTU1ZGZcdTU1YzRcdTU1ZGNcdTU1ZTRc''@;'; put 'put ''dTU1ZDRcdTU2MTRcdTU1ZjdcdTU2MTZcdTU1ZmVcdTU1ZmRcdTU2MWJcdTU1ZjlcdTU2NGVcdTU2NTBcdTcxZGZcdTU2MzRcdTU2MzZcdTU2MzJcdTU2MzgiXSxbIjlhODAiLCJcdTU2NmJcdTU2NjRcdTU2MmZcdTU2NmNcdTU2NmFcdTU2ODZcdTU2ODBcdTU2OGFcdTU2YTBcdTU2OTRcdTU2''@;'; put 'put ''OGZcdTU2YTVcdTU2YWVcdTU2YjZcdTU2YjRcdTU2YzJcdTU2YmNcdTU2YzFcdTU2YzNcdTU2YzBcdTU2YzhcdTU2Y2VcdTU2ZDFcdTU2ZDNcdTU2ZDdcdTU2ZWVcdTU2ZjlcdTU3MDBcdTU2ZmZcdTU3MDRcdTU3MDlcdTU3MDhcdTU3MGJcdTU3MGRcdTU3MTNcdTU3MThcdTU3MTZcdTU1Yzdc''@;'; put 'put ''dTU3MWNcdTU3MjZcdTU3MzdcdTU3MzhcdTU3NGVcdTU3M2JcdTU3NDBcdTU3NGZcdTU3NjlcdTU3YzBcdTU3ODhcdTU3NjFcdTU3N2ZcdTU3ODlcdTU3OTNcdTU3YTBcdTU3YjNcdTU3YTRcdTU3YWFcdTU3YjBcdTU3YzNcdTU3YzZcdTU3ZDRcdTU3ZDJcdTU3ZDNcdTU4MGFcdTU3ZDZcdTU3''@;'; put 'put ''ZTNcdTU4MGJcdTU4MTlcdTU4MWRcdTU4NzJcdTU4MjFcdTU4NjJcdTU4NGJcdTU4NzBcdTZiYzBcdTU4NTJcdTU4M2RcdTU4NzlcdTU4ODVcdTU4YjlcdTU4OWZcdTU4YWJcdTU4YmFcdTU4ZGVcdTU4YmJcdTU4YjhcdTU4YWVcdTU4YzVcdTU4ZDNcdTU4ZDFcdTU4ZDdcdTU4ZDlcdTU4ZDhc''@;'; put 'put ''dTU4ZTVcdTU4ZGNcdTU4ZTRcdTU4ZGZcdTU4ZWZcdTU4ZmFcdTU4ZjlcdTU4ZmJcdTU4ZmNcdTU4ZmRcdTU5MDJcdTU5MGFcdTU5MTBcdTU5MWJcdTY4YTZcdTU5MjVcdTU5MmNcdTU5MmRcdTU5MzJcdTU5MzhcdTU5M2VcdTdhZDJcdTU5NTVcdTU5NTBcdTU5NGVcdTU5NWFcdTU5NThcdTU5''@;'; put 'put ''NjJcdTU5NjBcdTU5NjdcdTU5NmNcdTU5NjkiXSxbIjliNDAiLCJcdTU5NzhcdTU5ODFcdTU5OWRcdTRmNWVcdTRmYWJcdTU5YTNcdTU5YjJcdTU5YzZcdTU5ZThcdTU5ZGNcdTU5OGRcdTU5ZDlcdTU5ZGFcdTVhMjVcdTVhMWZcdTVhMTFcdTVhMWNcdTVhMDlcdTVhMWFcdTVhNDBcdTVhNmNc''@;'; put 'put ''dTVhNDlcdTVhMzVcdTVhMzZcdTVhNjJcdTVhNmFcdTVhOWFcdTVhYmNcdTVhYmVcdTVhY2JcdTVhYzJcdTVhYmRcdTVhZTNcdTVhZDdcdTVhZTZcdTVhZTlcdTVhZDZcdTVhZmFcdTVhZmJcdTViMGNcdTViMGJcdTViMTZcdTViMzJcdTVhZDBcdTViMmFcdTViMzZcdTViM2VcdTViNDNcdTVi''@;'; put 'put ''NDVcdTViNDBcdTViNTFcdTViNTVcdTViNWFcdTViNWJcdTViNjVcdTViNjlcdTViNzBcdTViNzNcdTViNzVcdTViNzhcdTY1ODhcdTViN2FcdTViODAiXSxbIjliODAiLCJcdTViODNcdTViYTZcdTViYjhcdTViYzNcdTViYzdcdTViYzlcdTViZDRcdTViZDBcdTViZTRcdTViZTZcdTViZTJc''@;'; put 'put ''dTViZGVcdTViZTVcdTViZWJcdTViZjBcdTViZjZcdTViZjNcdTVjMDVcdTVjMDdcdTVjMDhcdTVjMGRcdTVjMTNcdTVjMjBcdTVjMjJcdTVjMjhcdTVjMzhcdTVjMzlcdTVjNDFcdTVjNDZcdTVjNGVcdTVjNTNcdTVjNTBcdTVjNGZcdTViNzFcdTVjNmNcdTVjNmVcdTRlNjJcdTVjNzZcdTVj''@;'; put 'put ''NzlcdTVjOGNcdTVjOTFcdTVjOTRcdTU5OWJcdTVjYWJcdTVjYmJcdTVjYjZcdTVjYmNcdTVjYjdcdTVjYzVcdTVjYmVcdTVjYzdcdTVjZDlcdTVjZTlcdTVjZmRcdTVjZmFcdTVjZWRcdTVkOGNcdTVjZWFcdTVkMGJcdTVkMTVcdTVkMTdcdTVkNWNcdTVkMWZcdTVkMWJcdTVkMTFcdTVkMTRc''@;'; put 'put ''dTVkMjJcdTVkMWFcdTVkMTlcdTVkMThcdTVkNGNcdTVkNTJcdTVkNGVcdTVkNGJcdTVkNmNcdTVkNzNcdTVkNzZcdTVkODdcdTVkODRcdTVkODJcdTVkYTJcdTVkOWRcdTVkYWNcdTVkYWVcdTVkYmRcdTVkOTBcdTVkYjdcdTVkYmNcdTVkYzlcdTVkY2RcdTVkZDNcdTVkZDJcdTVkZDZcdTVk''@;'; put 'put ''ZGJcdTVkZWJcdTVkZjJcdTVkZjVcdTVlMGJcdTVlMWFcdTVlMTlcdTVlMTFcdTVlMWJcdTVlMzZcdTVlMzdcdTVlNDRcdTVlNDNcdTVlNDBcdTVlNGVcdTVlNTdcdTVlNTRcdTVlNWZcdTVlNjJcdTVlNjRcdTVlNDdcdTVlNzVcdTVlNzZcdTVlN2FcdTllYmNcdTVlN2ZcdTVlYTBcdTVlYzFc''@;'; put 'put ''dTVlYzJcdTVlYzhcdTVlZDBcdTVlY2YiXSxbIjljNDAiLCJcdTVlZDZcdTVlZTNcdTVlZGRcdTVlZGFcdTVlZGJcdTVlZTJcdTVlZTFcdTVlZThcdTVlZTlcdTVlZWNcdTVlZjFcdTVlZjNcdTVlZjBcdTVlZjRcdTVlZjhcdTVlZmVcdTVmMDNcdTVmMDlcdTVmNWRcdTVmNWNcdTVmMGJcdTVm''@;'; put 'put ''MTFcdTVmMTZcdTVmMjlcdTVmMmRcdTVmMzhcdTVmNDFcdTVmNDhcdTVmNGNcdTVmNGVcdTVmMmZcdTVmNTFcdTVmNTZcdTVmNTdcdTVmNTlcdTVmNjFcdTVmNmRcdTVmNzNcdTVmNzdcdTVmODNcdTVmODJcdTVmN2ZcdTVmOGFcdTVmODhcdTVmOTFcdTVmODdcdTVmOWVcdTVmOTlcdTVmOThc''@;'; put 'put ''dTVmYTBcdTVmYThcdTVmYWRcdTVmYmNcdTVmZDZcdTVmZmJcdTVmZTRcdTVmZjhcdTVmZjFcdTVmZGRcdTYwYjNcdTVmZmZcdTYwMjFcdTYwNjAiXSxbIjljODAiLCJcdTYwMTlcdTYwMTBcdTYwMjlcdTYwMGVcdTYwMzFcdTYwMWJcdTYwMTVcdTYwMmJcdTYwMjZcdTYwMGZcdTYwM2FcdTYw''@;'; put 'put ''NWFcdTYwNDFcdTYwNmFcdTYwNzdcdTYwNWZcdTYwNGFcdTYwNDZcdTYwNGRcdTYwNjNcdTYwNDNcdTYwNjRcdTYwNDJcdTYwNmNcdTYwNmJcdTYwNTlcdTYwODFcdTYwOGRcdTYwZTdcdTYwODNcdTYwOWFcdTYwODRcdTYwOWJcdTYwOTZcdTYwOTdcdTYwOTJcdTYwYTdcdTYwOGJcdTYwZTFc''@;'; put 'put ''dTYwYjhcdTYwZTBcdTYwZDNcdTYwYjRcdTVmZjBcdTYwYmRcdTYwYzZcdTYwYjVcdTYwZDhcdTYxNGRcdTYxMTVcdTYxMDZcdTYwZjZcdTYwZjdcdTYxMDBcdTYwZjRcdTYwZmFcdTYxMDNcdTYxMjFcdTYwZmJcdTYwZjFcdTYxMGRcdTYxMGVcdTYxNDdcdTYxM2VcdTYxMjhcdTYxMjdcdTYx''@;'; put 'put ''NGFcdTYxM2ZcdTYxM2NcdTYxMmNcdTYxMzRcdTYxM2RcdTYxNDJcdTYxNDRcdTYxNzNcdTYxNzdcdTYxNThcdTYxNTlcdTYxNWFcdTYxNmJcdTYxNzRcdTYxNmZcdTYxNjVcdTYxNzFcdTYxNWZcdTYxNWRcdTYxNTNcdTYxNzVcdTYxOTlcdTYxOTZcdTYxODdcdTYxYWNcdTYxOTRcdTYxOWFc''@;'; put 'put ''dTYxOGFcdTYxOTFcdTYxYWJcdTYxYWVcdTYxY2NcdTYxY2FcdTYxYzlcdTYxZjdcdTYxYzhcdTYxYzNcdTYxYzZcdTYxYmFcdTYxY2JcdTdmNzlcdTYxY2RcdTYxZTZcdTYxZTNcdTYxZjZcdTYxZmFcdTYxZjRcdTYxZmZcdTYxZmRcdTYxZmNcdTYxZmVcdTYyMDBcdTYyMDhcdTYyMDlcdTYy''@;'; put 'put ''MGRcdTYyMGNcdTYyMTRcdTYyMWIiXSxbIjlkNDAiLCJcdTYyMWVcdTYyMjFcdTYyMmFcdTYyMmVcdTYyMzBcdTYyMzJcdTYyMzNcdTYyNDFcdTYyNGVcdTYyNWVcdTYyNjNcdTYyNWJcdTYyNjBcdTYyNjhcdTYyN2NcdTYyODJcdTYyODlcdTYyN2VcdTYyOTJcdTYyOTNcdTYyOTZcdTYyZDRc''@;'; put 'put ''dTYyODNcdTYyOTRcdTYyZDdcdTYyZDFcdTYyYmJcdTYyY2ZcdTYyZmZcdTYyYzZcdTY0ZDRcdTYyYzhcdTYyZGNcdTYyY2NcdTYyY2FcdTYyYzJcdTYyYzdcdTYyOWJcdTYyYzlcdTYzMGNcdTYyZWVcdTYyZjFcdTYzMjdcdTYzMDJcdTYzMDhcdTYyZWZcdTYyZjVcdTYzNTBcdTYzM2VcdTYz''@;'; put 'put ''NGRcdTY0MWNcdTYzNGZcdTYzOTZcdTYzOGVcdTYzODBcdTYzYWJcdTYzNzZcdTYzYTNcdTYzOGZcdTYzODlcdTYzOWZcdTYzYjVcdTYzNmIiXSxbIjlkODAiLCJcdTYzNjlcdTYzYmVcdTYzZTlcdTYzYzBcdTYzYzZcdTYzZTNcdTYzYzlcdTYzZDJcdTYzZjZcdTYzYzRcdTY0MTZcdTY0MzRc''@;'; put 'put ''dTY0MDZcdTY0MTNcdTY0MjZcdTY0MzZcdTY1MWRcdTY0MTdcdTY0MjhcdTY0MGZcdTY0NjdcdTY0NmZcdTY0NzZcdTY0NGVcdTY1MmFcdTY0OTVcdTY0OTNcdTY0YTVcdTY0YTlcdTY0ODhcdTY0YmNcdTY0ZGFcdTY0ZDJcdTY0YzVcdTY0YzdcdTY0YmJcdTY0ZDhcdTY0YzJcdTY0ZjFcdTY0''@;'; put 'put ''ZTdcdTgyMDlcdTY0ZTBcdTY0ZTFcdTYyYWNcdTY0ZTNcdTY0ZWZcdTY1MmNcdTY0ZjZcdTY0ZjRcdTY0ZjJcdTY0ZmFcdTY1MDBcdTY0ZmRcdTY1MThcdTY1MWNcdTY1MDVcdTY1MjRcdTY1MjNcdTY1MmJcdTY1MzRcdTY1MzVcdTY1MzdcdTY1MzZcdTY1MzhcdTc1NGJcdTY1NDhcdTY1NTZc''@;'; put 'put ''dTY1NTVcdTY1NGRcdTY1NThcdTY1NWVcdTY1NWRcdTY1NzJcdTY1NzhcdTY1ODJcdTY1ODNcdThiOGFcdTY1OWJcdTY1OWZcdTY1YWJcdTY1YjdcdTY1YzNcdTY1YzZcdTY1YzFcdTY1YzRcdTY1Y2NcdTY1ZDJcdTY1ZGJcdTY1ZDlcdTY1ZTBcdTY1ZTFcdTY1ZjFcdTY3NzJcdTY2MGFcdTY2''@;'; put 'put ''MDNcdTY1ZmJcdTY3NzNcdTY2MzVcdTY2MzZcdTY2MzRcdTY2MWNcdTY2NGZcdTY2NDRcdTY2NDlcdTY2NDFcdTY2NWVcdTY2NWRcdTY2NjRcdTY2NjdcdTY2NjhcdTY2NWZcdTY2NjJcdTY2NzBcdTY2ODNcdTY2ODhcdTY2OGVcdTY2ODlcdTY2ODRcdTY2OThcdTY2OWRcdTY2YzFcdTY2Yjlc''@;'; put 'put ''dTY2YzlcdTY2YmVcdTY2YmMiXSxbIjllNDAiLCJcdTY2YzRcdTY2YjhcdTY2ZDZcdTY2ZGFcdTY2ZTBcdTY2M2ZcdTY2ZTZcdTY2ZTlcdTY2ZjBcdTY2ZjVcdTY2ZjdcdTY3MGZcdTY3MTZcdTY3MWVcdTY3MjZcdTY3MjdcdTk3MzhcdTY3MmVcdTY3M2ZcdTY3MzZcdTY3NDFcdTY3MzhcdTY3''@;'; put 'put ''MzdcdTY3NDZcdTY3NWVcdTY3NjBcdTY3NTlcdTY3NjNcdTY3NjRcdTY3ODlcdTY3NzBcdTY3YTlcdTY3N2NcdTY3NmFcdTY3OGNcdTY3OGJcdTY3YTZcdTY3YTFcdTY3ODVcdTY3YjdcdTY3ZWZcdTY3YjRcdTY3ZWNcdTY3YjNcdTY3ZTlcdTY3YjhcdTY3ZTRcdTY3ZGVcdTY3ZGRcdTY3ZTJc''@;'; put 'put ''dTY3ZWVcdTY3YjlcdTY3Y2VcdTY3YzZcdTY3ZTdcdTZhOWNcdTY4MWVcdTY4NDZcdTY4MjlcdTY4NDBcdTY4NGRcdTY4MzJcdTY4NGUiXSxbIjllODAiLCJcdTY4YjNcdTY4MmJcdTY4NTlcdTY4NjNcdTY4NzdcdTY4N2ZcdTY4OWZcdTY4OGZcdTY4YWRcdTY4OTRcdTY4OWRcdTY4OWJcdTY4''@;'; put 'put ''ODNcdTZhYWVcdTY4YjlcdTY4NzRcdTY4YjVcdTY4YTBcdTY4YmFcdTY5MGZcdTY4OGRcdTY4N2VcdTY5MDFcdTY4Y2FcdTY5MDhcdTY4ZDhcdTY5MjJcdTY5MjZcdTY4ZTFcdTY5MGNcdTY4Y2RcdTY4ZDRcdTY4ZTdcdTY4ZDVcdTY5MzZcdTY5MTJcdTY5MDRcdTY4ZDdcdTY4ZTNcdTY5MjVc''@;'; put 'put ''dTY4ZjlcdTY4ZTBcdTY4ZWZcdTY5MjhcdTY5MmFcdTY5MWFcdTY5MjNcdTY5MjFcdTY4YzZcdTY5NzlcdTY5NzdcdTY5NWNcdTY5NzhcdTY5NmJcdTY5NTRcdTY5N2VcdTY5NmVcdTY5MzlcdTY5NzRcdTY5M2RcdTY5NTlcdTY5MzBcdTY5NjFcdTY5NWVcdTY5NWRcdTY5ODFcdTY5NmFcdTY5''@;'; put 'put ''YjJcdTY5YWVcdTY5ZDBcdTY5YmZcdTY5YzFcdTY5ZDNcdTY5YmVcdTY5Y2VcdTViZThcdTY5Y2FcdTY5ZGRcdTY5YmJcdTY5YzNcdTY5YTdcdTZhMmVcdTY5OTFcdTY5YTBcdTY5OWNcdTY5OTVcdTY5YjRcdTY5ZGVcdTY5ZThcdTZhMDJcdTZhMWJcdTY5ZmZcdTZiMGFcdTY5ZjlcdTY5ZjJc''@;'; put 'put ''dTY5ZTdcdTZhMDVcdTY5YjFcdTZhMWVcdTY5ZWRcdTZhMTRcdTY5ZWJcdTZhMGFcdTZhMTJcdTZhYzFcdTZhMjNcdTZhMTNcdTZhNDRcdTZhMGNcdTZhNzJcdTZhMzZcdTZhNzhcdTZhNDdcdTZhNjJcdTZhNTlcdTZhNjZcdTZhNDhcdTZhMzhcdTZhMjJcdTZhOTBcdTZhOGRcdTZhYTBcdTZh''@;'; put 'put ''ODRcdTZhYTJcdTZhYTMiXSxbIjlmNDAiLCJcdTZhOTdcdTg2MTdcdTZhYmJcdTZhYzNcdTZhYzJcdTZhYjhcdTZhYjNcdTZhYWNcdTZhZGVcdTZhZDFcdTZhZGZcdTZhYWFcdTZhZGFcdTZhZWFcdTZhZmJcdTZiMDVcdTg2MTZcdTZhZmFcdTZiMTJcdTZiMTZcdTliMzFcdTZiMWZcdTZiMzhc''@;'; put 'put ''dTZiMzdcdTc2ZGNcdTZiMzlcdTk4ZWVcdTZiNDdcdTZiNDNcdTZiNDlcdTZiNTBcdTZiNTlcdTZiNTRcdTZiNWJcdTZiNWZcdTZiNjFcdTZiNzhcdTZiNzlcdTZiN2ZcdTZiODBcdTZiODRcdTZiODNcdTZiOGRcdTZiOThcdTZiOTVcdTZiOWVcdTZiYTRcdTZiYWFcdTZiYWJcdTZiYWZcdTZi''@;'; put 'put ''YjJcdTZiYjFcdTZiYjNcdTZiYjdcdTZiYmNcdTZiYzZcdTZiY2JcdTZiZDNcdTZiZGZcdTZiZWNcdTZiZWJcdTZiZjNcdTZiZWYiXSxbIjlmODAiLCJcdTllYmVcdTZjMDhcdTZjMTNcdTZjMTRcdTZjMWJcdTZjMjRcdTZjMjNcdTZjNWVcdTZjNTVcdTZjNjJcdTZjNmFcdTZjODJcdTZjOGRc''@;'; put 'put ''dTZjOWFcdTZjODFcdTZjOWJcdTZjN2VcdTZjNjhcdTZjNzNcdTZjOTJcdTZjOTBcdTZjYzRcdTZjZjFcdTZjZDNcdTZjYmRcdTZjZDdcdTZjYzVcdTZjZGRcdTZjYWVcdTZjYjFcdTZjYmVcdTZjYmFcdTZjZGJcdTZjZWZcdTZjZDlcdTZjZWFcdTZkMWZcdTg4NGRcdTZkMzZcdTZkMmJcdTZk''@;'; put 'put ''M2RcdTZkMzhcdTZkMTlcdTZkMzVcdTZkMzNcdTZkMTJcdTZkMGNcdTZkNjNcdTZkOTNcdTZkNjRcdTZkNWFcdTZkNzlcdTZkNTlcdTZkOGVcdTZkOTVcdTZmZTRcdTZkODVcdTZkZjlcdTZlMTVcdTZlMGFcdTZkYjVcdTZkYzdcdTZkZTZcdTZkYjhcdTZkYzZcdTZkZWNcdTZkZGVcdTZkY2Nc''@;'; put 'put ''dTZkZThcdTZkZDJcdTZkYzVcdTZkZmFcdTZkZDlcdTZkZTRcdTZkZDVcdTZkZWFcdTZkZWVcdTZlMmRcdTZlNmVcdTZlMmVcdTZlMTlcdTZlNzJcdTZlNWZcdTZlM2VcdTZlMjNcdTZlNmJcdTZlMmJcdTZlNzZcdTZlNGRcdTZlMWZcdTZlNDNcdTZlM2FcdTZlNGVcdTZlMjRcdTZlZmZcdTZl''@;'; put 'put ''MWRcdTZlMzhcdTZlODJcdTZlYWFcdTZlOThcdTZlYzlcdTZlYjdcdTZlZDNcdTZlYmRcdTZlYWZcdTZlYzRcdTZlYjJcdTZlZDRcdTZlZDVcdTZlOGZcdTZlYTVcdTZlYzJcdTZlOWZcdTZmNDFcdTZmMTFcdTcwNGNcdTZlZWNcdTZlZjhcdTZlZmVcdTZmM2ZcdTZlZjJcdTZmMzFcdTZlZWZc''@;'; put 'put ''dTZmMzJcdTZlY2MiXSxbImUwNDAiLCJcdTZmM2VcdTZmMTNcdTZlZjdcdTZmODZcdTZmN2FcdTZmNzhcdTZmODFcdTZmODBcdTZmNmZcdTZmNWJcdTZmZjNcdTZmNmRcdTZmODJcdTZmN2NcdTZmNThcdTZmOGVcdTZmOTFcdTZmYzJcdTZmNjZcdTZmYjNcdTZmYTNcdTZmYTFcdTZmYTRcdTZm''@;'; put 'put ''YjlcdTZmYzZcdTZmYWFcdTZmZGZcdTZmZDVcdTZmZWNcdTZmZDRcdTZmZDhcdTZmZjFcdTZmZWVcdTZmZGJcdTcwMDlcdTcwMGJcdTZmZmFcdTcwMTFcdTcwMDFcdTcwMGZcdTZmZmVcdTcwMWJcdTcwMWFcdTZmNzRcdTcwMWRcdTcwMThcdTcwMWZcdTcwMzBcdTcwM2VcdTcwMzJcdTcwNTFc''@;'; put 'put ''dTcwNjNcdTcwOTlcdTcwOTJcdTcwYWZcdTcwZjFcdTcwYWNcdTcwYjhcdTcwYjNcdTcwYWVcdTcwZGZcdTcwY2JcdTcwZGQiXSxbImUwODAiLCJcdTcwZDlcdTcxMDlcdTcwZmRcdTcxMWNcdTcxMTlcdTcxNjVcdTcxNTVcdTcxODhcdTcxNjZcdTcxNjJcdTcxNGNcdTcxNTZcdTcxNmNcdTcx''@;'; put 'put ''OGZcdTcxZmJcdTcxODRcdTcxOTVcdTcxYThcdTcxYWNcdTcxZDdcdTcxYjlcdTcxYmVcdTcxZDJcdTcxYzlcdTcxZDRcdTcxY2VcdTcxZTBcdTcxZWNcdTcxZTdcdTcxZjVcdTcxZmNcdTcxZjlcdTcxZmZcdTcyMGRcdTcyMTBcdTcyMWJcdTcyMjhcdTcyMmRcdTcyMmNcdTcyMzBcdTcyMzJc''@;'; put 'put ''dTcyM2JcdTcyM2NcdTcyM2ZcdTcyNDBcdTcyNDZcdTcyNGJcdTcyNThcdTcyNzRcdTcyN2VcdTcyODJcdTcyODFcdTcyODdcdTcyOTJcdTcyOTZcdTcyYTJcdTcyYTdcdTcyYjlcdTcyYjJcdTcyYzNcdTcyYzZcdTcyYzRcdTcyY2VcdTcyZDJcdTcyZTJcdTcyZTBcdTcyZTFcdTcyZjlcdTcy''@;'; put 'put ''ZjdcdTUwMGZcdTczMTdcdTczMGFcdTczMWNcdTczMTZcdTczMWRcdTczMzRcdTczMmZcdTczMjlcdTczMjVcdTczM2VcdTczNGVcdTczNGZcdTllZDhcdTczNTdcdTczNmFcdTczNjhcdTczNzBcdTczNzhcdTczNzVcdTczN2JcdTczN2FcdTczYzhcdTczYjNcdTczY2VcdTczYmJcdTczYzBc''@;'; put 'put ''dTczZTVcdTczZWVcdTczZGVcdTc0YTJcdTc0MDVcdTc0NmZcdTc0MjVcdTczZjhcdTc0MzJcdTc0M2FcdTc0NTVcdTc0M2ZcdTc0NWZcdTc0NTlcdTc0NDFcdTc0NWNcdTc0NjlcdTc0NzBcdTc0NjNcdTc0NmFcdTc0NzZcdTc0N2VcdTc0OGJcdTc0OWVcdTc0YTdcdTc0Y2FcdTc0Y2ZcdTc0''@;'; put 'put ''ZDRcdTczZjEiXSxbImUxNDAiLCJcdTc0ZTBcdTc0ZTNcdTc0ZTdcdTc0ZTlcdTc0ZWVcdTc0ZjJcdTc0ZjBcdTc0ZjFcdTc0ZjhcdTc0ZjdcdTc1MDRcdTc1MDNcdTc1MDVcdTc1MGNcdTc1MGVcdTc1MGRcdTc1MTVcdTc1MTNcdTc1MWVcdTc1MjZcdTc1MmNcdTc1M2NcdTc1NDRcdTc1NGRc''@;'; put 'put ''dTc1NGFcdTc1NDlcdTc1NWJcdTc1NDZcdTc1NWFcdTc1NjlcdTc1NjRcdTc1NjdcdTc1NmJcdTc1NmRcdTc1NzhcdTc1NzZcdTc1ODZcdTc1ODdcdTc1NzRcdTc1OGFcdTc1ODlcdTc1ODJcdTc1OTRcdTc1OWFcdTc1OWRcdTc1YTVcdTc1YTNcdTc1YzJcdTc1YjNcdTc1YzNcdTc1YjVcdTc1''@;'; put 'put ''YmRcdTc1YjhcdTc1YmNcdTc1YjFcdTc1Y2RcdTc1Y2FcdTc1ZDJcdTc1ZDlcdTc1ZTNcdTc1ZGVcdTc1ZmVcdTc1ZmYiXSxbImUxODAiLCJcdTc1ZmNcdTc2MDFcdTc1ZjBcdTc1ZmFcdTc1ZjJcdTc1ZjNcdTc2MGJcdTc2MGRcdTc2MDlcdTc2MWZcdTc2MjdcdTc2MjBcdTc2MjFcdTc2MjJc''@;'; put 'put ''dTc2MjRcdTc2MzRcdTc2MzBcdTc2M2JcdTc2NDdcdTc2NDhcdTc2NDZcdTc2NWNcdTc2NThcdTc2NjFcdTc2NjJcdTc2NjhcdTc2NjlcdTc2NmFcdTc2NjdcdTc2NmNcdTc2NzBcdTc2NzJcdTc2NzZcdTc2NzhcdTc2N2NcdTc2ODBcdTc2ODNcdTc2ODhcdTc2OGJcdTc2OGVcdTc2OTZcdTc2''@;'; put 'put ''OTNcdTc2OTlcdTc2OWFcdTc2YjBcdTc2YjRcdTc2YjhcdTc2YjlcdTc2YmFcdTc2YzJcdTc2Y2RcdTc2ZDZcdTc2ZDJcdTc2ZGVcdTc2ZTFcdTc2ZTVcdTc2ZTdcdTc2ZWFcdTg2MmZcdTc2ZmJcdTc3MDhcdTc3MDdcdTc3MDRcdTc3MjlcdTc3MjRcdTc3MWVcdTc3MjVcdTc3MjZcdTc3MWJc''@;'; put 'put ''dTc3MzdcdTc3MzhcdTc3NDdcdTc3NWFcdTc3NjhcdTc3NmJcdTc3NWJcdTc3NjVcdTc3N2ZcdTc3N2VcdTc3NzlcdTc3OGVcdTc3OGJcdTc3OTFcdTc3YTBcdTc3OWVcdTc3YjBcdTc3YjZcdTc3YjlcdTc3YmZcdTc3YmNcdTc3YmRcdTc3YmJcdTc3YzdcdTc3Y2RcdTc3ZDdcdTc3ZGFcdTc3''@;'; put 'put ''ZGNcdTc3ZTNcdTc3ZWVcdTc3ZmNcdTc4MGNcdTc4MTJcdTc5MjZcdTc4MjBcdTc5MmFcdTc4NDVcdTc4OGVcdTc4NzRcdTc4ODZcdTc4N2NcdTc4OWFcdTc4OGNcdTc4YTNcdTc4YjVcdTc4YWFcdTc4YWZcdTc4ZDFcdTc4YzZcdTc4Y2JcdTc4ZDRcdTc4YmVcdTc4YmNcdTc4YzVcdTc4Y2Fc''@;'; put 'put ''dTc4ZWMiXSxbImUyNDAiLCJcdTc4ZTdcdTc4ZGFcdTc4ZmRcdTc4ZjRcdTc5MDdcdTc5MTJcdTc5MTFcdTc5MTlcdTc5MmNcdTc5MmJcdTc5NDBcdTc5NjBcdTc5NTdcdTc5NWZcdTc5NWFcdTc5NTVcdTc5NTNcdTc5N2FcdTc5N2ZcdTc5OGFcdTc5OWRcdTc5YTdcdTlmNGJcdTc5YWFcdTc5''@;'; put 'put ''YWVcdTc5YjNcdTc5YjlcdTc5YmFcdTc5YzlcdTc5ZDVcdTc5ZTdcdTc5ZWNcdTc5ZTFcdTc5ZTNcdTdhMDhcdTdhMGRcdTdhMThcdTdhMTlcdTdhMjBcdTdhMWZcdTc5ODBcdTdhMzFcdTdhM2JcdTdhM2VcdTdhMzdcdTdhNDNcdTdhNTdcdTdhNDlcdTdhNjFcdTdhNjJcdTdhNjlcdTlmOWRc''@;'; put 'put ''dTdhNzBcdTdhNzlcdTdhN2RcdTdhODhcdTdhOTdcdTdhOTVcdTdhOThcdTdhOTZcdTdhYTlcdTdhYzhcdTdhYjAiXSxbImUyODAiLCJcdTdhYjZcdTdhYzVcdTdhYzRcdTdhYmZcdTkwODNcdTdhYzdcdTdhY2FcdTdhY2RcdTdhY2ZcdTdhZDVcdTdhZDNcdTdhZDlcdTdhZGFcdTdhZGRcdTdh''@;'; put 'put ''ZTFcdTdhZTJcdTdhZTZcdTdhZWRcdTdhZjBcdTdiMDJcdTdiMGZcdTdiMGFcdTdiMDZcdTdiMzNcdTdiMThcdTdiMTlcdTdiMWVcdTdiMzVcdTdiMjhcdTdiMzZcdTdiNTBcdTdiN2FcdTdiMDRcdTdiNGRcdTdiMGJcdTdiNGNcdTdiNDVcdTdiNzVcdTdiNjVcdTdiNzRcdTdiNjdcdTdiNzBc''@;'; put 'put ''dTdiNzFcdTdiNmNcdTdiNmVcdTdiOWRcdTdiOThcdTdiOWZcdTdiOGRcdTdiOWNcdTdiOWFcdTdiOGJcdTdiOTJcdTdiOGZcdTdiNWRcdTdiOTlcdTdiY2JcdTdiYzFcdTdiY2NcdTdiY2ZcdTdiYjRcdTdiYzZcdTdiZGRcdTdiZTlcdTdjMTFcdTdjMTRcdTdiZTZcdTdiZTVcdTdjNjBcdTdj''@;'; put 'put ''MDBcdTdjMDdcdTdjMTNcdTdiZjNcdTdiZjdcdTdjMTdcdTdjMGRcdTdiZjZcdTdjMjNcdTdjMjdcdTdjMmFcdTdjMWZcdTdjMzdcdTdjMmJcdTdjM2RcdTdjNGNcdTdjNDNcdTdjNTRcdTdjNGZcdTdjNDBcdTdjNTBcdTdjNThcdTdjNWZcdTdjNjRcdTdjNTZcdTdjNjVcdTdjNmNcdTdjNzVc''@;'; put 'put ''dTdjODNcdTdjOTBcdTdjYTRcdTdjYWRcdTdjYTJcdTdjYWJcdTdjYTFcdTdjYThcdTdjYjNcdTdjYjJcdTdjYjFcdTdjYWVcdTdjYjlcdTdjYmRcdTdjYzBcdTdjYzVcdTdjYzJcdTdjZDhcdTdjZDJcdTdjZGNcdTdjZTJcdTliM2JcdTdjZWZcdTdjZjJcdTdjZjRcdTdjZjZcdTdjZmFcdTdk''@;'; put 'put ''MDYiXSxbImUzNDAiLCJcdTdkMDJcdTdkMWNcdTdkMTVcdTdkMGFcdTdkNDVcdTdkNGJcdTdkMmVcdTdkMzJcdTdkM2ZcdTdkMzVcdTdkNDZcdTdkNzNcdTdkNTZcdTdkNGVcdTdkNzJcdTdkNjhcdTdkNmVcdTdkNGZcdTdkNjNcdTdkOTNcdTdkODlcdTdkNWJcdTdkOGZcdTdkN2RcdTdkOWJc''@;'; put 'put ''dTdkYmFcdTdkYWVcdTdkYTNcdTdkYjVcdTdkYzdcdTdkYmRcdTdkYWJcdTdlM2RcdTdkYTJcdTdkYWZcdTdkZGNcdTdkYjhcdTdkOWZcdTdkYjBcdTdkZDhcdTdkZGRcdTdkZTRcdTdkZGVcdTdkZmJcdTdkZjJcdTdkZTFcdTdlMDVcdTdlMGFcdTdlMjNcdTdlMjFcdTdlMTJcdTdlMzFcdTdl''@;'; put 'put ''MWZcdTdlMDlcdTdlMGJcdTdlMjJcdTdlNDZcdTdlNjZcdTdlM2JcdTdlMzVcdTdlMzlcdTdlNDNcdTdlMzciXSxbImUzODAiLCJcdTdlMzJcdTdlM2FcdTdlNjdcdTdlNWRcdTdlNTZcdTdlNWVcdTdlNTlcdTdlNWFcdTdlNzlcdTdlNmFcdTdlNjlcdTdlN2NcdTdlN2JcdTdlODNcdTdkZDVc''@;'; put 'put ''dTdlN2RcdThmYWVcdTdlN2ZcdTdlODhcdTdlODlcdTdlOGNcdTdlOTJcdTdlOTBcdTdlOTNcdTdlOTRcdTdlOTZcdTdlOGVcdTdlOWJcdTdlOWNcdTdmMzhcdTdmM2FcdTdmNDVcdTdmNGNcdTdmNGRcdTdmNGVcdTdmNTBcdTdmNTFcdTdmNTVcdTdmNTRcdTdmNThcdTdmNWZcdTdmNjBcdTdm''@;'; put 'put ''NjhcdTdmNjlcdTdmNjdcdTdmNzhcdTdmODJcdTdmODZcdTdmODNcdTdmODhcdTdmODdcdTdmOGNcdTdmOTRcdTdmOWVcdTdmOWRcdTdmOWFcdTdmYTNcdTdmYWZcdTdmYjJcdTdmYjlcdTdmYWVcdTdmYjZcdTdmYjhcdThiNzFcdTdmYzVcdTdmYzZcdTdmY2FcdTdmZDVcdTdmZDRcdTdmZTFc''@;'; put 'put ''dTdmZTZcdTdmZTlcdTdmZjNcdTdmZjlcdTk4ZGNcdTgwMDZcdTgwMDRcdTgwMGJcdTgwMTJcdTgwMThcdTgwMTlcdTgwMWNcdTgwMjFcdTgwMjhcdTgwM2ZcdTgwM2JcdTgwNGFcdTgwNDZcdTgwNTJcdTgwNThcdTgwNWFcdTgwNWZcdTgwNjJcdTgwNjhcdTgwNzNcdTgwNzJcdTgwNzBcdTgw''@;'; put 'put ''NzZcdTgwNzlcdTgwN2RcdTgwN2ZcdTgwODRcdTgwODZcdTgwODVcdTgwOWJcdTgwOTNcdTgwOWFcdTgwYWRcdTUxOTBcdTgwYWNcdTgwZGJcdTgwZTVcdTgwZDlcdTgwZGRcdTgwYzRcdTgwZGFcdTgwZDZcdTgxMDlcdTgwZWZcdTgwZjFcdTgxMWJcdTgxMjlcdTgxMjNcdTgxMmZcdTgxNGIi''@;'; put 'put ''XSxbImU0NDAiLCJcdTk2OGJcdTgxNDZcdTgxM2VcdTgxNTNcdTgxNTFcdTgwZmNcdTgxNzFcdTgxNmVcdTgxNjVcdTgxNjZcdTgxNzRcdTgxODNcdTgxODhcdTgxOGFcdTgxODBcdTgxODJcdTgxYTBcdTgxOTVcdTgxYTRcdTgxYTNcdTgxNWZcdTgxOTNcdTgxYTlcdTgxYjBcdTgxYjVcdTgx''@;'; put 'put ''YmVcdTgxYjhcdTgxYmRcdTgxYzBcdTgxYzJcdTgxYmFcdTgxYzlcdTgxY2RcdTgxZDFcdTgxZDlcdTgxZDhcdTgxYzhcdTgxZGFcdTgxZGZcdTgxZTBcdTgxZTdcdTgxZmFcdTgxZmJcdTgxZmVcdTgyMDFcdTgyMDJcdTgyMDVcdTgyMDdcdTgyMGFcdTgyMGRcdTgyMTBcdTgyMTZcdTgyMjlc''@;'; put 'put ''dTgyMmJcdTgyMzhcdTgyMzNcdTgyNDBcdTgyNTlcdTgyNThcdTgyNWRcdTgyNWFcdTgyNWZcdTgyNjQiXSxbImU0ODAiLCJcdTgyNjJcdTgyNjhcdTgyNmFcdTgyNmJcdTgyMmVcdTgyNzFcdTgyNzdcdTgyNzhcdTgyN2VcdTgyOGRcdTgyOTJcdTgyYWJcdTgyOWZcdTgyYmJcdTgyYWNcdTgy''@;'; put 'put ''ZTFcdTgyZTNcdTgyZGZcdTgyZDJcdTgyZjRcdTgyZjNcdTgyZmFcdTgzOTNcdTgzMDNcdTgyZmJcdTgyZjlcdTgyZGVcdTgzMDZcdTgyZGNcdTgzMDlcdTgyZDlcdTgzMzVcdTgzMzRcdTgzMTZcdTgzMzJcdTgzMzFcdTgzNDBcdTgzMzlcdTgzNTBcdTgzNDVcdTgzMmZcdTgzMmJcdTgzMTdc''@;'; put 'put ''dTgzMThcdTgzODVcdTgzOWFcdTgzYWFcdTgzOWZcdTgzYTJcdTgzOTZcdTgzMjNcdTgzOGVcdTgzODdcdTgzOGFcdTgzN2NcdTgzYjVcdTgzNzNcdTgzNzVcdTgzYTBcdTgzODlcdTgzYThcdTgzZjRcdTg0MTNcdTgzZWJcdTgzY2VcdTgzZmRcdTg0MDNcdTgzZDhcdTg0MGJcdTgzYzFcdTgz''@;'; put 'put ''ZjdcdTg0MDdcdTgzZTBcdTgzZjJcdTg0MGRcdTg0MjJcdTg0MjBcdTgzYmRcdTg0MzhcdTg1MDZcdTgzZmJcdTg0NmRcdTg0MmFcdTg0M2NcdTg1NWFcdTg0ODRcdTg0NzdcdTg0NmJcdTg0YWRcdTg0NmVcdTg0ODJcdTg0NjlcdTg0NDZcdTg0MmNcdTg0NmZcdTg0NzlcdTg0MzVcdTg0Y2Fc''@;'; put 'put ''dTg0NjJcdTg0YjlcdTg0YmZcdTg0OWZcdTg0ZDlcdTg0Y2RcdTg0YmJcdTg0ZGFcdTg0ZDBcdTg0YzFcdTg0YzZcdTg0ZDZcdTg0YTFcdTg1MjFcdTg0ZmZcdTg0ZjRcdTg1MTdcdTg1MThcdTg1MmNcdTg1MWZcdTg1MTVcdTg1MTRcdTg0ZmNcdTg1NDBcdTg1NjNcdTg1NThcdTg1NDgiXSxb''@;'; put 'put ''ImU1NDAiLCJcdTg1NDFcdTg2MDJcdTg1NGJcdTg1NTVcdTg1ODBcdTg1YTRcdTg1ODhcdTg1OTFcdTg1OGFcdTg1YThcdTg1NmRcdTg1OTRcdTg1OWJcdTg1ZWFcdTg1ODdcdTg1OWNcdTg1NzdcdTg1N2VcdTg1OTBcdTg1YzlcdTg1YmFcdTg1Y2ZcdTg1YjlcdTg1ZDBcdTg1ZDVcdTg1ZGRc''@;'; put 'put ''dTg1ZTVcdTg1ZGNcdTg1ZjlcdTg2MGFcdTg2MTNcdTg2MGJcdTg1ZmVcdTg1ZmFcdTg2MDZcdTg2MjJcdTg2MWFcdTg2MzBcdTg2M2ZcdTg2NGRcdTRlNTVcdTg2NTRcdTg2NWZcdTg2NjdcdTg2NzFcdTg2OTNcdTg2YTNcdTg2YTlcdTg2YWFcdTg2OGJcdTg2OGNcdTg2YjZcdTg2YWZcdTg2''@;'; put 'put ''YzRcdTg2YzZcdTg2YjBcdTg2YzlcdTg4MjNcdTg2YWJcdTg2ZDRcdTg2ZGVcdTg2ZTlcdTg2ZWMiXSxbImU1ODAiLCJcdTg2ZGZcdTg2ZGJcdTg2ZWZcdTg3MTJcdTg3MDZcdTg3MDhcdTg3MDBcdTg3MDNcdTg2ZmJcdTg3MTFcdTg3MDlcdTg3MGRcdTg2ZjlcdTg3MGFcdTg3MzRcdTg3M2Zc''@;'; put 'put ''dTg3MzdcdTg3M2JcdTg3MjVcdTg3MjlcdTg3MWFcdTg3NjBcdTg3NWZcdTg3NzhcdTg3NGNcdTg3NGVcdTg3NzRcdTg3NTdcdTg3NjhcdTg3NmVcdTg3NTlcdTg3NTNcdTg3NjNcdTg3NmFcdTg4MDVcdTg3YTJcdTg3OWZcdTg3ODJcdTg3YWZcdTg3Y2JcdTg3YmRcdTg3YzBcdTg3ZDBcdTk2''@;'; put 'put ''ZDZcdTg3YWJcdTg3YzRcdTg3YjNcdTg3YzdcdTg3YzZcdTg3YmJcdTg3ZWZcdTg3ZjJcdTg3ZTBcdTg4MGZcdTg4MGRcdTg3ZmVcdTg3ZjZcdTg3ZjdcdTg4MGVcdTg3ZDJcdTg4MTFcdTg4MTZcdTg4MTVcdTg4MjJcdTg4MjFcdTg4MzFcdTg4MzZcdTg4MzlcdTg4MjdcdTg4M2JcdTg4NDRc''@;'; put 'put ''dTg4NDJcdTg4NTJcdTg4NTlcdTg4NWVcdTg4NjJcdTg4NmJcdTg4ODFcdTg4N2VcdTg4OWVcdTg4NzVcdTg4N2RcdTg4YjVcdTg4NzJcdTg4ODJcdTg4OTdcdTg4OTJcdTg4YWVcdTg4OTlcdTg4YTJcdTg4OGRcdTg4YTRcdTg4YjBcdTg4YmZcdTg4YjFcdTg4YzNcdTg4YzRcdTg4ZDRcdTg4''@;'; put 'put ''ZDhcdTg4ZDlcdTg4ZGRcdTg4ZjlcdTg5MDJcdTg4ZmNcdTg4ZjRcdTg4ZThcdTg4ZjJcdTg5MDRcdTg5MGNcdTg5MGFcdTg5MTNcdTg5NDNcdTg5MWVcdTg5MjVcdTg5MmFcdTg5MmJcdTg5NDFcdTg5NDRcdTg5M2JcdTg5MzZcdTg5MzhcdTg5NGNcdTg5MWRcdTg5NjBcdTg5NWUiXSxbImU2''@;'; put 'put ''NDAiLCJcdTg5NjZcdTg5NjRcdTg5NmRcdTg5NmFcdTg5NmZcdTg5NzRcdTg5NzdcdTg5N2VcdTg5ODNcdTg5ODhcdTg5OGFcdTg5OTNcdTg5OThcdTg5YTFcdTg5YTlcdTg5YTZcdTg5YWNcdTg5YWZcdTg5YjJcdTg5YmFcdTg5YmRcdTg5YmZcdTg5YzBcdTg5ZGFcdTg5ZGNcdTg5ZGRcdTg5''@;'; put 'put ''ZTdcdTg5ZjRcdTg5ZjhcdThhMDNcdThhMTZcdThhMTBcdThhMGNcdThhMWJcdThhMWRcdThhMjVcdThhMzZcdThhNDFcdThhNWJcdThhNTJcdThhNDZcdThhNDhcdThhN2NcdThhNmRcdThhNmNcdThhNjJcdThhODVcdThhODJcdThhODRcdThhYThcdThhYTFcdThhOTFcdThhYTVcdThhYTZc''@;'; put 'put ''dThhOWFcdThhYTNcdThhYzRcdThhY2RcdThhYzJcdThhZGFcdThhZWJcdThhZjNcdThhZTciXSxbImU2ODAiLCJcdThhZTRcdThhZjFcdThiMTRcdThhZTBcdThhZTJcdThhZjdcdThhZGVcdThhZGJcdThiMGNcdThiMDdcdThiMWFcdThhZTFcdThiMTZcdThiMTBcdThiMTdcdThiMjBcdThi''@;'; put 'put ''MzNcdTk3YWJcdThiMjZcdThiMmJcdThiM2VcdThiMjhcdThiNDFcdThiNGNcdThiNGZcdThiNGVcdThiNDlcdThiNTZcdThiNWJcdThiNWFcdThiNmJcdThiNWZcdThiNmNcdThiNmZcdThiNzRcdThiN2RcdThiODBcdThiOGNcdThiOGVcdThiOTJcdThiOTNcdThiOTZcdThiOTlcdThiOWFc''@;'; put 'put ''dThjM2FcdThjNDFcdThjM2ZcdThjNDhcdThjNGNcdThjNGVcdThjNTBcdThjNTVcdThjNjJcdThjNmNcdThjNzhcdThjN2FcdThjODJcdThjODlcdThjODVcdThjOGFcdThjOGRcdThjOGVcdThjOTRcdThjN2NcdThjOThcdTYyMWRcdThjYWRcdThjYWFcdThjYmRcdThjYjJcdThjYjNcdThj''@;'; put 'put ''YWVcdThjYjZcdThjYzhcdThjYzFcdThjZTRcdThjZTNcdThjZGFcdThjZmRcdThjZmFcdThjZmJcdThkMDRcdThkMDVcdThkMGFcdThkMDdcdThkMGZcdThkMGRcdThkMTBcdTlmNGVcdThkMTNcdThjY2RcdThkMTRcdThkMTZcdThkNjdcdThkNmRcdThkNzFcdThkNzNcdThkODFcdThkOTlc''@;'; put 'put ''dThkYzJcdThkYmVcdThkYmFcdThkY2ZcdThkZGFcdThkZDZcdThkY2NcdThkZGJcdThkY2JcdThkZWFcdThkZWJcdThkZGZcdThkZTNcdThkZmNcdThlMDhcdThlMDlcdThkZmZcdThlMWRcdThlMWVcdThlMTBcdThlMWZcdThlNDJcdThlMzVcdThlMzBcdThlMzRcdThlNGEiXSxbImU3NDAi''@;'; put 'put ''LCJcdThlNDdcdThlNDlcdThlNGNcdThlNTBcdThlNDhcdThlNTlcdThlNjRcdThlNjBcdThlMmFcdThlNjNcdThlNTVcdThlNzZcdThlNzJcdThlN2NcdThlODFcdThlODdcdThlODVcdThlODRcdThlOGJcdThlOGFcdThlOTNcdThlOTFcdThlOTRcdThlOTlcdThlYWFcdThlYTFcdThlYWNc''@;'; put 'put ''dThlYjBcdThlYzZcdThlYjFcdThlYmVcdThlYzVcdThlYzhcdThlY2JcdThlZGJcdThlZTNcdThlZmNcdThlZmJcdThlZWJcdThlZmVcdThmMGFcdThmMDVcdThmMTVcdThmMTJcdThmMTlcdThmMTNcdThmMWNcdThmMWZcdThmMWJcdThmMGNcdThmMjZcdThmMzNcdThmM2JcdThmMzlcdThm''@;'; put 'put ''NDVcdThmNDJcdThmM2VcdThmNGNcdThmNDlcdThmNDZcdThmNGVcdThmNTdcdThmNWMiXSxbImU3ODAiLCJcdThmNjJcdThmNjNcdThmNjRcdThmOWNcdThmOWZcdThmYTNcdThmYWRcdThmYWZcdThmYjdcdThmZGFcdThmZTVcdThmZTJcdThmZWFcdThmZWZcdTkwODdcdThmZjRcdTkwMDVc''@;'; put 'put ''dThmZjlcdThmZmFcdTkwMTFcdTkwMTVcdTkwMjFcdTkwMGRcdTkwMWVcdTkwMTZcdTkwMGJcdTkwMjdcdTkwMzZcdTkwMzVcdTkwMzlcdThmZjhcdTkwNGZcdTkwNTBcdTkwNTFcdTkwNTJcdTkwMGVcdTkwNDlcdTkwM2VcdTkwNTZcdTkwNThcdTkwNWVcdTkwNjhcdTkwNmZcdTkwNzZcdTk2''@;'; put 'put ''YThcdTkwNzJcdTkwODJcdTkwN2RcdTkwODFcdTkwODBcdTkwOGFcdTkwODlcdTkwOGZcdTkwYThcdTkwYWZcdTkwYjFcdTkwYjVcdTkwZTJcdTkwZTRcdTYyNDhcdTkwZGJcdTkxMDJcdTkxMTJcdTkxMTlcdTkxMzJcdTkxMzBcdTkxNGFcdTkxNTZcdTkxNThcdTkxNjNcdTkxNjVcdTkxNjlc''@;'; put 'put ''dTkxNzNcdTkxNzJcdTkxOGJcdTkxODlcdTkxODJcdTkxYTJcdTkxYWJcdTkxYWZcdTkxYWFcdTkxYjVcdTkxYjRcdTkxYmFcdTkxYzBcdTkxYzFcdTkxYzlcdTkxY2JcdTkxZDBcdTkxZDZcdTkxZGZcdTkxZTFcdTkxZGJcdTkxZmNcdTkxZjVcdTkxZjZcdTkyMWVcdTkxZmZcdTkyMTRcdTky''@;'; put 'put ''MmNcdTkyMTVcdTkyMTFcdTkyNWVcdTkyNTdcdTkyNDVcdTkyNDlcdTkyNjRcdTkyNDhcdTkyOTVcdTkyM2ZcdTkyNGJcdTkyNTBcdTkyOWNcdTkyOTZcdTkyOTNcdTkyOWJcdTkyNWFcdTkyY2ZcdTkyYjlcdTkyYjdcdTkyZTlcdTkzMGZcdTkyZmFcdTkzNDRcdTkzMmUiXSxbImU4NDAiLCJc''@;'; put 'put ''dTkzMTlcdTkzMjJcdTkzMWFcdTkzMjNcdTkzM2FcdTkzMzVcdTkzM2JcdTkzNWNcdTkzNjBcdTkzN2NcdTkzNmVcdTkzNTZcdTkzYjBcdTkzYWNcdTkzYWRcdTkzOTRcdTkzYjlcdTkzZDZcdTkzZDdcdTkzZThcdTkzZTVcdTkzZDhcdTkzYzNcdTkzZGRcdTkzZDBcdTkzYzhcdTkzZTRcdTk0''@;'; put 'put ''MWFcdTk0MTRcdTk0MTNcdTk0MDNcdTk0MDdcdTk0MTBcdTk0MzZcdTk0MmJcdTk0MzVcdTk0MjFcdTk0M2FcdTk0NDFcdTk0NTJcdTk0NDRcdTk0NWJcdTk0NjBcdTk0NjJcdTk0NWVcdTk0NmFcdTkyMjlcdTk0NzBcdTk0NzVcdTk0NzdcdTk0N2RcdTk0NWFcdTk0N2NcdTk0N2VcdTk0ODFc''@;'; put 'put ''dTk0N2ZcdTk1ODJcdTk1ODdcdTk1OGFcdTk1OTRcdTk1OTZcdTk1OThcdTk1OTkiXSxbImU4ODAiLCJcdTk1YTBcdTk1YThcdTk1YTdcdTk1YWRcdTk1YmNcdTk1YmJcdTk1YjlcdTk1YmVcdTk1Y2FcdTZmZjZcdTk1YzNcdTk1Y2RcdTk1Y2NcdTk1ZDVcdTk1ZDRcdTk1ZDZcdTk1ZGNcdTk1''@;'; put 'put ''ZTFcdTk1ZTVcdTk1ZTJcdTk2MjFcdTk2MjhcdTk2MmVcdTk2MmZcdTk2NDJcdTk2NGNcdTk2NGZcdTk2NGJcdTk2NzdcdTk2NWNcdTk2NWVcdTk2NWRcdTk2NWZcdTk2NjZcdTk2NzJcdTk2NmNcdTk2OGRcdTk2OThcdTk2OTVcdTk2OTdcdTk2YWFcdTk2YTdcdTk2YjFcdTk2YjJcdTk2YjBc''@;'; put 'put ''dTk2YjRcdTk2YjZcdTk2YjhcdTk2YjlcdTk2Y2VcdTk2Y2JcdTk2YzlcdTk2Y2RcdTg5NGRcdTk2ZGNcdTk3MGRcdTk2ZDVcdTk2ZjlcdTk3MDRcdTk3MDZcdTk3MDhcdTk3MTNcdTk3MGVcdTk3MTFcdTk3MGZcdTk3MTZcdTk3MTlcdTk3MjRcdTk3MmFcdTk3MzBcdTk3MzlcdTk3M2RcdTk3''@;'; put 'put ''M2VcdTk3NDRcdTk3NDZcdTk3NDhcdTk3NDJcdTk3NDlcdTk3NWNcdTk3NjBcdTk3NjRcdTk3NjZcdTk3NjhcdTUyZDJcdTk3NmJcdTk3NzFcdTk3NzlcdTk3ODVcdTk3N2NcdTk3ODFcdTk3N2FcdTk3ODZcdTk3OGJcdTk3OGZcdTk3OTBcdTk3OWNcdTk3YThcdTk3YTZcdTk3YTNcdTk3YjNc''@;'; put 'put ''dTk3YjRcdTk3YzNcdTk3YzZcdTk3YzhcdTk3Y2JcdTk3ZGNcdTk3ZWRcdTlmNGZcdTk3ZjJcdTdhZGZcdTk3ZjZcdTk3ZjVcdTk4MGZcdTk4MGNcdTk4MzhcdTk4MjRcdTk4MjFcdTk4MzdcdTk4M2RcdTk4NDZcdTk4NGZcdTk4NGJcdTk4NmJcdTk4NmZcdTk4NzAiXSxbImU5NDAiLCJcdTk4''@;'; put 'put ''NzFcdTk4NzRcdTk4NzNcdTk4YWFcdTk4YWZcdTk4YjFcdTk4YjZcdTk4YzRcdTk4YzNcdTk4YzZcdTk4ZTlcdTk4ZWJcdTk5MDNcdTk5MDlcdTk5MTJcdTk5MTRcdTk5MThcdTk5MjFcdTk5MWRcdTk5MWVcdTk5MjRcdTk5MjBcdTk5MmNcdTk5MmVcdTk5M2RcdTk5M2VcdTk5NDJcdTk5NDlc''@;'; put 'put ''dTk5NDVcdTk5NTBcdTk5NGJcdTk5NTFcdTk5NTJcdTk5NGNcdTk5NTVcdTk5OTdcdTk5OThcdTk5YTVcdTk5YWRcdTk5YWVcdTk5YmNcdTk5ZGZcdTk5ZGJcdTk5ZGRcdTk5ZDhcdTk5ZDFcdTk5ZWRcdTk5ZWVcdTk5ZjFcdTk5ZjJcdTk5ZmJcdTk5ZjhcdTlhMDFcdTlhMGZcdTlhMDVcdTk5''@;'; put 'put ''ZTJcdTlhMTlcdTlhMmJcdTlhMzdcdTlhNDVcdTlhNDJcdTlhNDBcdTlhNDMiXSxbImU5ODAiLCJcdTlhM2VcdTlhNTVcdTlhNGRcdTlhNWJcdTlhNTdcdTlhNWZcdTlhNjJcdTlhNjVcdTlhNjRcdTlhNjlcdTlhNmJcdTlhNmFcdTlhYWRcdTlhYjBcdTlhYmNcdTlhYzBcdTlhY2ZcdTlhZDFc''@;'; put 'put ''dTlhZDNcdTlhZDRcdTlhZGVcdTlhZGZcdTlhZTJcdTlhZTNcdTlhZTZcdTlhZWZcdTlhZWJcdTlhZWVcdTlhZjRcdTlhZjFcdTlhZjdcdTlhZmJcdTliMDZcdTliMThcdTliMWFcdTliMWZcdTliMjJcdTliMjNcdTliMjVcdTliMjdcdTliMjhcdTliMjlcdTliMmFcdTliMmVcdTliMmZcdTli''@;'; put 'put ''MzJcdTliNDRcdTliNDNcdTliNGZcdTliNGRcdTliNGVcdTliNTFcdTliNThcdTliNzRcdTliOTNcdTliODNcdTliOTFcdTliOTZcdTliOTdcdTliOWZcdTliYTBcdTliYThcdTliYjRcdTliYzBcdTliY2FcdTliYjlcdTliYzZcdTliY2ZcdTliZDFcdTliZDJcdTliZTNcdTliZTJcdTliZTRc''@;'; put 'put ''dTliZDRcdTliZTFcdTljM2FcdTliZjJcdTliZjFcdTliZjBcdTljMTVcdTljMTRcdTljMDlcdTljMTNcdTljMGNcdTljMDZcdTljMDhcdTljMTJcdTljMGFcdTljMDRcdTljMmVcdTljMWJcdTljMjVcdTljMjRcdTljMjFcdTljMzBcdTljNDdcdTljMzJcdTljNDZcdTljM2VcdTljNWFcdTlj''@;'; put 'put ''NjBcdTljNjdcdTljNzZcdTljNzhcdTljZTdcdTljZWNcdTljZjBcdTlkMDlcdTlkMDhcdTljZWJcdTlkMDNcdTlkMDZcdTlkMmFcdTlkMjZcdTlkYWZcdTlkMjNcdTlkMWZcdTlkNDRcdTlkMTVcdTlkMTJcdTlkNDFcdTlkM2ZcdTlkM2VcdTlkNDZcdTlkNDgiXSxbImVhNDAiLCJcdTlkNWRc''@;'; put 'put ''dTlkNWVcdTlkNjRcdTlkNTFcdTlkNTBcdTlkNTlcdTlkNzJcdTlkODlcdTlkODdcdTlkYWJcdTlkNmZcdTlkN2FcdTlkOWFcdTlkYTRcdTlkYTlcdTlkYjJcdTlkYzRcdTlkYzFcdTlkYmJcdTlkYjhcdTlkYmFcdTlkYzZcdTlkY2ZcdTlkYzJcdTlkZDlcdTlkZDNcdTlkZjhcdTlkZTZcdTlk''@;'; put 'put ''ZWRcdTlkZWZcdTlkZmRcdTllMWFcdTllMWJcdTllMWVcdTllNzVcdTllNzlcdTllN2RcdTllODFcdTllODhcdTllOGJcdTllOGNcdTllOTJcdTllOTVcdTllOTFcdTllOWRcdTllYTVcdTllYTlcdTllYjhcdTllYWFcdTllYWRcdTk3NjFcdTllY2NcdTllY2VcdTllY2ZcdTllZDBcdTllZDRc''@;'; put 'put ''dTllZGNcdTllZGVcdTllZGRcdTllZTBcdTllZTVcdTllZThcdTllZWYiXSxbImVhODAiLCJcdTllZjRcdTllZjZcdTllZjdcdTllZjlcdTllZmJcdTllZmNcdTllZmRcdTlmMDdcdTlmMDhcdTc2YjdcdTlmMTVcdTlmMjFcdTlmMmNcdTlmM2VcdTlmNGFcdTlmNTJcdTlmNTRcdTlmNjNcdTlm''@;'; put 'put ''NWZcdTlmNjBcdTlmNjFcdTlmNjZcdTlmNjdcdTlmNmNcdTlmNmFcdTlmNzdcdTlmNzJcdTlmNzZcdTlmOTVcdTlmOWNcdTlmYTBcdTU4MmZcdTY5YzdcdTkwNTlcdTc0NjRcdTUxZGNcdTcxOTkiXSxbImVkNDAiLCJcdTdlOGFcdTg5MWNcdTkzNDhcdTkyODhcdTg0ZGNcdTRmYzlcdTcwYmJc''@;'; put 'put ''dTY2MzFcdTY4YzhcdTkyZjlcdTY2ZmJcdTVmNDVcdTRlMjhcdTRlZTFcdTRlZmNcdTRmMDBcdTRmMDNcdTRmMzlcdTRmNTZcdTRmOTJcdTRmOGFcdTRmOWFcdTRmOTRcdTRmY2RcdTUwNDBcdTUwMjJcdTRmZmZcdTUwMWVcdTUwNDZcdTUwNzBcdTUwNDJcdTUwOTRcdTUwZjRcdTUwZDhcdTUx''@;'; put 'put ''NGFcdTUxNjRcdTUxOWRcdTUxYmVcdTUxZWNcdTUyMTVcdTUyOWNcdTUyYTZcdTUyYzBcdTUyZGJcdTUzMDBcdTUzMDdcdTUzMjRcdTUzNzJcdTUzOTNcdTUzYjJcdTUzZGRcdWZhMGVcdTU0OWNcdTU0OGFcdTU0YTlcdTU0ZmZcdTU1ODZcdTU3NTlcdTU3NjVcdTU3YWNcdTU3YzhcdTU3Yzdc''@;'; put 'put ''dWZhMGYiXSxbImVkODAiLCJcdWZhMTBcdTU4OWVcdTU4YjJcdTU5MGJcdTU5NTNcdTU5NWJcdTU5NWRcdTU5NjNcdTU5YTRcdTU5YmFcdTViNTZcdTViYzBcdTc1MmZcdTViZDhcdTViZWNcdTVjMWVcdTVjYTZcdTVjYmFcdTVjZjVcdTVkMjdcdTVkNTNcdWZhMTFcdTVkNDJcdTVkNmRcdTVk''@;'; put 'put ''YjhcdTVkYjlcdTVkZDBcdTVmMjFcdTVmMzRcdTVmNjdcdTVmYjdcdTVmZGVcdTYwNWRcdTYwODVcdTYwOGFcdTYwZGVcdTYwZDVcdTYxMjBcdTYwZjJcdTYxMTFcdTYxMzdcdTYxMzBcdTYxOThcdTYyMTNcdTYyYTZcdTYzZjVcdTY0NjBcdTY0OWRcdTY0Y2VcdTY1NGVcdTY2MDBcdTY2MTVc''@;'; put 'put ''dTY2M2JcdTY2MDlcdTY2MmVcdTY2MWVcdTY2MjRcdTY2NjVcdTY2NTdcdTY2NTlcdWZhMTJcdTY2NzNcdTY2OTlcdTY2YTBcdTY2YjJcdTY2YmZcdTY2ZmFcdTY3MGVcdWY5MjlcdTY3NjZcdTY3YmJcdTY4NTJcdTY3YzBcdTY4MDFcdTY4NDRcdTY4Y2ZcdWZhMTNcdTY5NjhcdWZhMTRcdTY5''@;'; put 'put ''OThcdTY5ZTJcdTZhMzBcdTZhNmJcdTZhNDZcdTZhNzNcdTZhN2VcdTZhZTJcdTZhZTRcdTZiZDZcdTZjM2ZcdTZjNWNcdTZjODZcdTZjNmZcdTZjZGFcdTZkMDRcdTZkODdcdTZkNmZcdTZkOTZcdTZkYWNcdTZkY2ZcdTZkZjhcdTZkZjJcdTZkZmNcdTZlMzlcdTZlNWNcdTZlMjdcdTZlM2Nc''@;'; put 'put ''dTZlYmZcdTZmODhcdTZmYjVcdTZmZjVcdTcwMDVcdTcwMDdcdTcwMjhcdTcwODVcdTcwYWJcdTcxMGZcdTcxMDRcdTcxNWNcdTcxNDZcdTcxNDdcdWZhMTVcdTcxYzFcdTcxZmVcdTcyYjEiXSxbImVlNDAiLCJcdTcyYmVcdTczMjRcdWZhMTZcdTczNzdcdTczYmRcdTczYzlcdTczZDZcdTcz''@;'; put 'put ''ZTNcdTczZDJcdTc0MDdcdTczZjVcdTc0MjZcdTc0MmFcdTc0MjlcdTc0MmVcdTc0NjJcdTc0ODlcdTc0OWZcdTc1MDFcdTc1NmZcdTc2ODJcdTc2OWNcdTc2OWVcdTc2OWJcdTc2YTZcdWZhMTdcdTc3NDZcdTUyYWZcdTc4MjFcdTc4NGVcdTc4NjRcdTc4N2FcdTc5MzBcdWZhMThcdWZhMTlc''@;'; put 'put ''dWZhMWFcdTc5OTRcdWZhMWJcdTc5OWJcdTdhZDFcdTdhZTdcdWZhMWNcdTdhZWJcdTdiOWVcdWZhMWRcdTdkNDhcdTdkNWNcdTdkYjdcdTdkYTBcdTdkZDZcdTdlNTJcdTdmNDdcdTdmYTFcdWZhMWVcdTgzMDFcdTgzNjJcdTgzN2ZcdTgzYzdcdTgzZjZcdTg0NDhcdTg0YjRcdTg1NTNcdTg1''@;'; put 'put ''NTkiXSxbImVlODAiLCJcdTg1NmJcdWZhMWZcdTg1YjBcdWZhMjBcdWZhMjFcdTg4MDdcdTg4ZjVcdThhMTJcdThhMzdcdThhNzlcdThhYTdcdThhYmVcdThhZGZcdWZhMjJcdThhZjZcdThiNTNcdThiN2ZcdThjZjBcdThjZjRcdThkMTJcdThkNzZcdWZhMjNcdThlY2ZcdWZhMjRcdWZhMjVc''@;'; put 'put ''dTkwNjdcdTkwZGVcdWZhMjZcdTkxMTVcdTkxMjdcdTkxZGFcdTkxZDdcdTkxZGVcdTkxZWRcdTkxZWVcdTkxZTRcdTkxZTVcdTkyMDZcdTkyMTBcdTkyMGFcdTkyM2FcdTkyNDBcdTkyM2NcdTkyNGVcdTkyNTlcdTkyNTFcdTkyMzlcdTkyNjdcdTkyYTdcdTkyNzdcdTkyNzhcdTkyZTdcdTky''@;'; put 'put ''ZDdcdTkyZDlcdTkyZDBcdWZhMjdcdTkyZDVcdTkyZTBcdTkyZDNcdTkzMjVcdTkzMjFcdTkyZmJcdWZhMjhcdTkzMWVcdTkyZmZcdTkzMWRcdTkzMDJcdTkzNzBcdTkzNTdcdTkzYTRcdTkzYzZcdTkzZGVcdTkzZjhcdTk0MzFcdTk0NDVcdTk0NDhcdTk1OTJcdWY5ZGNcdWZhMjlcdTk2OWRc''@;'; put 'put ''dTk2YWZcdTk3MzNcdTk3M2JcdTk3NDNcdTk3NGRcdTk3NGZcdTk3NTFcdTk3NTVcdTk4NTdcdTk4NjVcdWZhMmFcdWZhMmJcdTk5MjdcdWZhMmNcdTk5OWVcdTlhNGVcdTlhZDlcdTlhZGNcdTliNzVcdTliNzJcdTliOGZcdTliYjFcdTliYmJcdTljMDBcdTlkNzBcdTlkNmJcdWZhMmRcdTll''@;'; put 'put ''MTlcdTllZDEiXSxbImVlZWYiLCJcdTIxNzAiLDksIlx1ZmZlMlx1ZmZlNFx1ZmYwN1x1ZmYwMiJdLFsiZjA0MCIsIlx1ZTAwMCIsNjJdLFsiZjA4MCIsIlx1ZTAzZiIsMTI0XSxbImYxNDAiLCJcdWUwYmMiLDYyXSxbImYxODAiLCJcdWUwZmIiLDEyNF0sWyJmMjQwIiwiXHVlMTc4Iiw2Ml0s''@;'; put 'put ''WyJmMjgwIiwiXHVlMWI3IiwxMjRdLFsiZjM0MCIsIlx1ZTIzNCIsNjJdLFsiZjM4MCIsIlx1ZTI3MyIsMTI0XSxbImY0NDAiLCJcdWUyZjAiLDYyXSxbImY0ODAiLCJcdWUzMmYiLDEyNF0sWyJmNTQwIiwiXHVlM2FjIiw2Ml0sWyJmNTgwIiwiXHVlM2ViIiwxMjRdLFsiZjY0MCIsIlx1ZTQ2''@;'; put 'put ''OCIsNjJdLFsiZjY4MCIsIlx1ZTRhNyIsMTI0XSxbImY3NDAiLCJcdWU1MjQiLDYyXSxbImY3ODAiLCJcdWU1NjMiLDEyNF0sWyJmODQwIiwiXHVlNWUwIiw2Ml0sWyJmODgwIiwiXHVlNjFmIiwxMjRdLFsiZjk0MCIsIlx1ZTY5YyJdLFsiZmE0MCIsIlx1MjE3MCIsOSwiXHUyMTYwIiw5LCJc''@;'; put 'put ''dWZmZTJcdWZmZTRcdWZmMDdcdWZmMDJcdTMyMzFcdTIxMTZcdTIxMjFcdTIyMzVcdTdlOGFcdTg5MWNcdTkzNDhcdTkyODhcdTg0ZGNcdTRmYzlcdTcwYmJcdTY2MzFcdTY4YzhcdTkyZjlcdTY2ZmJcdTVmNDVcdTRlMjhcdTRlZTFcdTRlZmNcdTRmMDBcdTRmMDNcdTRmMzlcdTRmNTZcdTRm''@;'; put 'put ''OTJcdTRmOGFcdTRmOWFcdTRmOTRcdTRmY2RcdTUwNDBcdTUwMjJcdTRmZmZcdTUwMWVcdTUwNDZcdTUwNzBcdTUwNDJcdTUwOTRcdTUwZjRcdTUwZDhcdTUxNGEiXSxbImZhODAiLCJcdTUxNjRcdTUxOWRcdTUxYmVcdTUxZWNcdTUyMTVcdTUyOWNcdTUyYTZcdTUyYzBcdTUyZGJcdTUzMDBc''@;'; put 'put ''dTUzMDdcdTUzMjRcdTUzNzJcdTUzOTNcdTUzYjJcdTUzZGRcdWZhMGVcdTU0OWNcdTU0OGFcdTU0YTlcdTU0ZmZcdTU1ODZcdTU3NTlcdTU3NjVcdTU3YWNcdTU3YzhcdTU3YzdcdWZhMGZcdWZhMTBcdTU4OWVcdTU4YjJcdTU5MGJcdTU5NTNcdTU5NWJcdTU5NWRcdTU5NjNcdTU5YTRcdTU5''@;'; put 'put ''YmFcdTViNTZcdTViYzBcdTc1MmZcdTViZDhcdTViZWNcdTVjMWVcdTVjYTZcdTVjYmFcdTVjZjVcdTVkMjdcdTVkNTNcdWZhMTFcdTVkNDJcdTVkNmRcdTVkYjhcdTVkYjlcdTVkZDBcdTVmMjFcdTVmMzRcdTVmNjdcdTVmYjdcdTVmZGVcdTYwNWRcdTYwODVcdTYwOGFcdTYwZGVcdTYwZDVc''@;'; put 'put ''dTYxMjBcdTYwZjJcdTYxMTFcdTYxMzdcdTYxMzBcdTYxOThcdTYyMTNcdTYyYTZcdTYzZjVcdTY0NjBcdTY0OWRcdTY0Y2VcdTY1NGVcdTY2MDBcdTY2MTVcdTY2M2JcdTY2MDlcdTY2MmVcdTY2MWVcdTY2MjRcdTY2NjVcdTY2NTdcdTY2NTlcdWZhMTJcdTY2NzNcdTY2OTlcdTY2YTBcdTY2''@;'; put 'put ''YjJcdTY2YmZcdTY2ZmFcdTY3MGVcdWY5MjlcdTY3NjZcdTY3YmJcdTY4NTJcdTY3YzBcdTY4MDFcdTY4NDRcdTY4Y2ZcdWZhMTNcdTY5NjhcdWZhMTRcdTY5OThcdTY5ZTJcdTZhMzBcdTZhNmJcdTZhNDZcdTZhNzNcdTZhN2VcdTZhZTJcdTZhZTRcdTZiZDZcdTZjM2ZcdTZjNWNcdTZjODZc''@;'; put 'put ''dTZjNmZcdTZjZGFcdTZkMDRcdTZkODdcdTZkNmYiXSxbImZiNDAiLCJcdTZkOTZcdTZkYWNcdTZkY2ZcdTZkZjhcdTZkZjJcdTZkZmNcdTZlMzlcdTZlNWNcdTZlMjdcdTZlM2NcdTZlYmZcdTZmODhcdTZmYjVcdTZmZjVcdTcwMDVcdTcwMDdcdTcwMjhcdTcwODVcdTcwYWJcdTcxMGZcdTcx''@;'; put 'put ''MDRcdTcxNWNcdTcxNDZcdTcxNDdcdWZhMTVcdTcxYzFcdTcxZmVcdTcyYjFcdTcyYmVcdTczMjRcdWZhMTZcdTczNzdcdTczYmRcdTczYzlcdTczZDZcdTczZTNcdTczZDJcdTc0MDdcdTczZjVcdTc0MjZcdTc0MmFcdTc0MjlcdTc0MmVcdTc0NjJcdTc0ODlcdTc0OWZcdTc1MDFcdTc1NmZc''@;'; put 'put ''dTc2ODJcdTc2OWNcdTc2OWVcdTc2OWJcdTc2YTZcdWZhMTdcdTc3NDZcdTUyYWZcdTc4MjFcdTc4NGVcdTc4NjRcdTc4N2FcdTc5MzBcdWZhMThcdWZhMTkiXSxbImZiODAiLCJcdWZhMWFcdTc5OTRcdWZhMWJcdTc5OWJcdTdhZDFcdTdhZTdcdWZhMWNcdTdhZWJcdTdiOWVcdWZhMWRcdTdk''@;'; put 'put ''NDhcdTdkNWNcdTdkYjdcdTdkYTBcdTdkZDZcdTdlNTJcdTdmNDdcdTdmYTFcdWZhMWVcdTgzMDFcdTgzNjJcdTgzN2ZcdTgzYzdcdTgzZjZcdTg0NDhcdTg0YjRcdTg1NTNcdTg1NTlcdTg1NmJcdWZhMWZcdTg1YjBcdWZhMjBcdWZhMjFcdTg4MDdcdTg4ZjVcdThhMTJcdThhMzdcdThhNzlc''@;'; put 'put ''dThhYTdcdThhYmVcdThhZGZcdWZhMjJcdThhZjZcdThiNTNcdThiN2ZcdThjZjBcdThjZjRcdThkMTJcdThkNzZcdWZhMjNcdThlY2ZcdWZhMjRcdWZhMjVcdTkwNjdcdTkwZGVcdWZhMjZcdTkxMTVcdTkxMjdcdTkxZGFcdTkxZDdcdTkxZGVcdTkxZWRcdTkxZWVcdTkxZTRcdTkxZTVcdTky''@;'; put 'put ''MDZcdTkyMTBcdTkyMGFcdTkyM2FcdTkyNDBcdTkyM2NcdTkyNGVcdTkyNTlcdTkyNTFcdTkyMzlcdTkyNjdcdTkyYTdcdTkyNzdcdTkyNzhcdTkyZTdcdTkyZDdcdTkyZDlcdTkyZDBcdWZhMjdcdTkyZDVcdTkyZTBcdTkyZDNcdTkzMjVcdTkzMjFcdTkyZmJcdWZhMjhcdTkzMWVcdTkyZmZc''@;'; put 'put ''dTkzMWRcdTkzMDJcdTkzNzBcdTkzNTdcdTkzYTRcdTkzYzZcdTkzZGVcdTkzZjhcdTk0MzFcdTk0NDVcdTk0NDhcdTk1OTJcdWY5ZGNcdWZhMjlcdTk2OWRcdTk2YWZcdTk3MzNcdTk3M2JcdTk3NDNcdTk3NGRcdTk3NGZcdTk3NTFcdTk3NTVcdTk4NTdcdTk4NjVcdWZhMmFcdWZhMmJcdTk5''@;'; put 'put ''MjdcdWZhMmNcdTk5OWVcdTlhNGVcdTlhZDkiXSxbImZjNDAiLCJcdTlhZGNcdTliNzVcdTliNzJcdTliOGZcdTliYjFcdTliYmJcdTljMDBcdTlkNzBcdTlkNmJcdWZhMmRcdTllMTlcdTllZDEiXV0nKX0sMTU1Nzk6dWU9PnsidXNlIHN0cmljdCI7dWUuZXhwb3J0cz1KU09OLnBhcnNlKCd7''@;'; put 'put ''IjIuMTYuODQwLjEuMTAxLjMuNC4xLjEiOiJhZXMtMTI4LWVjYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIiOiJhZXMtMTI4LWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjMiOiJhZXMtMTI4LW9mYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQiOiJhZXMtMTI4LWNmYiIsIjIuMTYuODQw''@;'; put 'put ''LjEuMTAxLjMuNC4xLjIxIjoiYWVzLTE5Mi1lY2IiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMiI6ImFlcy0xOTItY2JjIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjMiOiJhZXMtMTkyLW9mYiIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjI0IjoiYWVzLTE5Mi1jZmIiLCIyLjE2Ljg0MC4xLjEw''@;'; put 'put ''MS4zLjQuMS40MSI6ImFlcy0yNTYtZWNiIiwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDIiOiJhZXMtMjU2LWNiYyIsIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQzIjoiYWVzLTI1Ni1vZmIiLCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40NCI6ImFlcy0yNTYtY2ZiIn0nKX19LHVlPT57dWUodWUucz0z''@;'; put 'put ''MDE2MSl9XSk7'';'; 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.7fb414ef0acea64b-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 ''LyohCiAqIENvcHlyaWdodCAoYykgSEFORFNPTkNPREUgc3AuIHogby4gby4KICoKICogSEFORFNPTlRBQkxFIGlzIGEgc29mdHdhcmUgZGlzdHJpYnV0ZWQgYnkgSEFORFNPTkNPREUgc3AuIHogby4gby4sIGEgUG9saXNoIGNvcnBvcmF0aW9uIGJhc2VkIGluCiAqIEdkeW5pYSwgUG9sYW5k''@;'; put 'put ''LCBhdCBBbGVqYSBad3ljaWVzdHdhIDk2LTk4LCByZWdpc3RlcmVkIGJ5IHRoZSBEaXN0cmljdCBDb3VydCBpbiBHZGFuc2sgdW5kZXIgbnVtYmVyCiAqIDUzODY1MSwgRVUgdGF4IElEIG51bWJlcjogUEw1ODYyMjk0MDAyLCBzaGFyZSBjYXBpdGFsOiBQTE4gNjIsODAwLjAwLgogKgogKiBU''@;'; put 'put ''aGlzIHNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXdzLCBpbmNsdWRpbmcgaW50ZXJuYXRpb25hbCB0cmVhdGllcywgYW5kIGR1YWwtCiAqIGxpY2Vuc2VkIC0gZGVwZW5kaW5nIG9uIHdoZXRoZXIgeW91ciB1c2UgZm9yIGNvbW1lcmNpYWwgcHVycG9z''@;'; put 'put ''ZXMsIG1lYW5pbmcgaW50ZW5kZWQgZm9yIG9yCiAqIHJlc3VsdGluZyBpbiBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBtb25ldGFyeSBjb21wZW5zYXRpb24sIG9yIG5vdC4KICoKICogSWYgeW91ciB1c2UgaXMgc3RyaWN0bHkgcGVyc29uYWwgb3Igc29sZWx5IGZvciBldmFsdWF0aW9uIHB1''@;'; put 'put ''cnBvc2VzLCBtZWFuaW5nIGZvciB0aGUgcHVycG9zZXMgb2YgdGVzdGluZwogKiB0aGUgc3VpdGFiaWxpdHksIHBlcmZvcm1hbmNlLCBhbmQgdXNlZnVsbmVzcyBvZiB0aGlzIHNvZnR3YXJlIG91dHNpZGUgdGhlIHByb2R1Y3Rpb24gZW52aXJvbm1lbnQsCiAqIHlvdSBhZ3JlZSB0byBiZSBi''@;'; put 'put ''b3VuZCBieSB0aGUgdGVybXMgaW5jbHVkZWQgaW4gdGhlICJoYW5kc29udGFibGUtbm9uLWNvbW1lcmNpYWwtbGljZW5zZS5wZGYiIGZpbGUuCiAqCiAqIFlvdXIgdXNlIG9mIHRoaXMgc29mdHdhcmUgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgaW5j''@;'; put 'put ''bHVkZWQgaW4gYW4gYXBwbGljYWJsZQogKiBsaWNlbnNlIGFncmVlbWVudC4KICoKICogSW4gYW55IGNhc2UsIHlvdSBtdXN0IG5vdCBtYWtlIGFueSBzdWNoIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGFzIHRvIGRldmVsb3Agc29mdHdhcmUgd2hpY2ggbWF5IGJlCiAqIGNvbnNpZGVyZWQgY29t''@;'; put 'put ''cGV0aXRpdmUgd2l0aCB0aGlzIHNvZnR3YXJlLgogKgogKiBVTkxFU1MgRVhQUkVTU0xZIEFHUkVFRCBPVEhFUldJU0UsIEhBTkRTT05DT0RFIFBST1ZJREVTIFRISVMgU09GVFdBUkUgT04gQU4gIkFTIElTIgogKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0Yg''@;'; put 'put ''QU5ZIEtJTkQsIEFORCBJTiBOTyBFVkVOVCBBTkQgVU5ERVIgTk8KICogTEVHQUwgVEhFT1JZLCBTSEFMTCBIQU5EU09OQ09ERSBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIERJUkVDVCwKICogSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENP''@;'; put 'put ''TlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIEFSSVNJTkcgRlJPTQogKiBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSElTIFNPRlRXQVJFLgogKgogKiBWZXJzaW9uOiAxNS4yLjAKICogUmVsZWFzZSBkYXRlOiAxOS8wMy8yMDI1IChidWlsdCBhdCAxOS8wMy8yMDI1IDA5''@;'; put 'put ''OjQyOjA0KQogKi8uaGFuZHNvbnRhYmxlIC50YWJsZSB0aCwuaGFuZHNvbnRhYmxlIC50YWJsZSB0ZHtib3JkZXItdG9wOm5vbmV9LmhhbmRzb250YWJsZSB0cntiYWNrZ3JvdW5kOiNmZmZ9LmhhbmRzb250YWJsZSB0ZHtiYWNrZ3JvdW5kLWNvbG9yOmluaGVyaXR9LmhhbmRzb250YWJsZSAu''@;'; put 'put ''dGFibGUgY2FwdGlvbit0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aCwuaGFuZHNvbnRhYmxlIC50YWJsZSBjYXB0aW9uK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRkLC5oYW5kc29udGFibGUgLnRhYmxlIGNvbGdyb3VwK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRoLC5oYW5kc29udGFibGUgLnRhYmxl''@;'; put 'put ''IGNvbGdyb3VwK3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRkLC5oYW5kc29udGFibGUgLnRhYmxlIHRoZWFkOmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkIHRoLC5oYW5kc29udGFibGUgLnRhYmxlIHRoZWFkOmZpcnN0LWNoaWxkIHRyOmZpcnN0LWNoaWxkIHRke2JvcmRlci10b3A6MXB4IHNv''@;'; put 'put ''bGlkICNDQ0NDQ0N9LmhhbmRzb250YWJsZSAudGFibGUtYm9yZGVyZWR7Ym9yZGVyOjA7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlfS5oYW5kc29udGFibGUgLnRhYmxlLWJvcmRlcmVkIHRoLC5oYW5kc29udGFibGUgLnRhYmxlLWJvcmRlcmVkIHRke2JvcmRlci1sZWZ0Om5vbmV9LmhhbmRz''@;'; put 'put ''b250YWJsZSAudGFibGUtYm9yZGVyZWQgdGg6Zmlyc3QtY2hpbGQsLmhhbmRzb250YWJsZSAudGFibGUtYm9yZGVyZWQgdGQ6Zmlyc3QtY2hpbGR7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNDQ0NDQ0N9LmhhbmRzb250YWJsZSAudGFibGU+dGJvZHk+dHI+dGQsLmhhbmRzb250YWJsZSAudGFi''@;'; put 'put ''bGU+dGJvZHk+dHI+dGgsLmhhbmRzb250YWJsZSAudGFibGU+dGZvb3Q+dHI+dGQsLmhhbmRzb250YWJsZSAudGFibGU+dGZvb3Q+dHI+dGgsLmhhbmRzb250YWJsZSAudGFibGU+dGhlYWQ+dHI+dGQsLmhhbmRzb250YWJsZSAudGFibGU+dGhlYWQ+dHI+dGh7bGluZS1oZWlnaHQ6MjFweDtw''@;'; put 'put ''YWRkaW5nOjB9LmNvbC1sZy0xLmhhbmRzb250YWJsZSwuY29sLWxnLTEwLmhhbmRzb250YWJsZSwuY29sLWxnLTExLmhhbmRzb250YWJsZSwuY29sLWxnLTEyLmhhbmRzb250YWJsZSwuY29sLWxnLTIuaGFuZHNvbnRhYmxlLC5jb2wtbGctMy5oYW5kc29udGFibGUsLmNvbC1sZy00LmhhbmRz''@;'; put 'put ''b250YWJsZSwuY29sLWxnLTUuaGFuZHNvbnRhYmxlLC5jb2wtbGctNi5oYW5kc29udGFibGUsLmNvbC1sZy03LmhhbmRzb250YWJsZSwuY29sLWxnLTguaGFuZHNvbnRhYmxlLC5jb2wtbGctOS5oYW5kc29udGFibGUsLmNvbC1tZC0xLmhhbmRzb250YWJsZSwuY29sLW1kLTEwLmhhbmRzb250''@;'; put 'put ''YWJsZSwuY29sLW1kLTExLmhhbmRzb250YWJsZSwuY29sLW1kLTEyLmhhbmRzb250YWJsZSwuY29sLW1kLTIuaGFuZHNvbnRhYmxlLC5jb2wtbWQtMy5oYW5kc29udGFibGUsLmNvbC1tZC00LmhhbmRzb250YWJsZSwuY29sLW1kLTUuaGFuZHNvbnRhYmxlLC5jb2wtbWQtNi5oYW5kc29udGFi''@;'; put 'put ''bGUsLmNvbC1tZC03LmhhbmRzb250YWJsZSwuY29sLW1kLTguaGFuZHNvbnRhYmxlLC5jb2wtbWQtOS5oYW5kc29udGFibGUgLmNvbC1zbS0xLmhhbmRzb250YWJsZSwuY29sLXNtLTEwLmhhbmRzb250YWJsZSwuY29sLXNtLTExLmhhbmRzb250YWJsZSwuY29sLXNtLTEyLmhhbmRzb250YWJs''@;'; put 'put ''ZSwuY29sLXNtLTIuaGFuZHNvbnRhYmxlLC5jb2wtc20tMy5oYW5kc29udGFibGUsLmNvbC1zbS00LmhhbmRzb250YWJsZSwuY29sLXNtLTUuaGFuZHNvbnRhYmxlLC5jb2wtc20tNi5oYW5kc29udGFibGUsLmNvbC1zbS03LmhhbmRzb250YWJsZSwuY29sLXNtLTguaGFuZHNvbnRhYmxlLC5j''@;'; put 'put ''b2wtc20tOS5oYW5kc29udGFibGUgLmNvbC14cy0xLmhhbmRzb250YWJsZSwuY29sLXhzLTEwLmhhbmRzb250YWJsZSwuY29sLXhzLTExLmhhbmRzb250YWJsZSwuY29sLXhzLTEyLmhhbmRzb250YWJsZSwuY29sLXhzLTIuaGFuZHNvbnRhYmxlLC5jb2wteHMtMy5oYW5kc29udGFibGUsLmNv''@;'; put 'put ''bC14cy00LmhhbmRzb250YWJsZSwuY29sLXhzLTUuaGFuZHNvbnRhYmxlLC5jb2wteHMtNi5oYW5kc29udGFibGUsLmNvbC14cy03LmhhbmRzb250YWJsZSwuY29sLXhzLTguaGFuZHNvbnRhYmxlLC5jb2wteHMtOS5oYW5kc29udGFibGV7cGFkZGluZy1sZWZ0OjA7cGFkZGluZy1yaWdodDow''@;'; put 'put ''fS5oYW5kc29udGFibGUgLnRhYmxlLXN0cmlwZWQ+dGJvZHk+dHI6bnRoLW9mLXR5cGUoMm4pe2JhY2tncm91bmQtY29sb3I6I2ZmZn0uaGFuZHNvbnRhYmxlIC5oaWRle2Rpc3BsYXk6bm9uZX0uaGFuZHNvbnRhYmxlIC5yZWxhdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxl''@;'; put 'put ''IC53dEhpZGVye3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjB9LmhhbmRzb250YWJsZSAud3RTcHJlYWRlcntwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDowO2hlaWdodDphdXRvfS5oYW5kc29udGFibGUgdGFibGUsLmhhbmRzb250YWJsZSB0Ym9keSwuaGFuZHNvbnRhYmxlIHRoZWFkLC5oYW5k''@;'; put 'put ''c29udGFibGUgdGQsLmhhbmRzb250YWJsZSB0aCwuaGFuZHNvbnRhYmxlIGlucHV0LC5oYW5kc29udGFibGUgdGV4dGFyZWEsLmhhbmRzb250YWJsZSBkaXZ7Ym94LXNpemluZzpjb250ZW50LWJveDstd2Via2l0LWJveC1zaXppbmc6Y29udGVudC1ib3g7LW1vei1ib3gtc2l6aW5nOmNvbnRl''@;'; put 'put ''bnQtYm94fS5oYW5kc29udGFibGUgaW5wdXQsLmhhbmRzb250YWJsZSB0ZXh0YXJlYXttaW4taGVpZ2h0OmluaXRpYWx9LmhhbmRzb250YWJsZSB0YWJsZS5odENvcmV7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlO2JvcmRlci1zcGFjaW5nOjA7bWFyZ2luOjA7Ym9yZGVyLXdpZHRoOjA7dGFi''@;'; put 'put ''bGUtbGF5b3V0OmZpeGVkO3dpZHRoOjA7b3V0bGluZS13aWR0aDowO2N1cnNvcjpkZWZhdWx0O21heC13aWR0aDpub25lO21heC1oZWlnaHQ6bm9uZX0uaGFuZHNvbnRhYmxlIGNvbCwuaGFuZHNvbnRhYmxlIGNvbC5yb3dIZWFkZXJ7d2lkdGg6NTBweH0uaGFuZHNvbnRhYmxlIHRoLC5oYW5k''@;'; put 'put ''c29udGFibGUgdGR7Ym9yZGVyLXRvcC13aWR0aDowO2JvcmRlci1sZWZ0LXdpZHRoOjA7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjY2NjO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNjY2M7aGVpZ2h0OjIycHg7ZW1wdHktY2VsbHM6c2hvdztsaW5lLWhlaWdodDoyMXB4O3BhZGRpbmc6MCA0''@;'; put 'put ''cHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO3ZlcnRpY2FsLWFsaWduOnRvcDtvdmVyZmxvdzpoaWRkZW47b3V0bGluZTpub25lO291dGxpbmUtd2lkdGg6MDt3aGl0ZS1zcGFjZTpwcmUtd3JhcH1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHRoLFtkaXI9cnRsXS5oYW5kc29udGFibGUgdGR7Ym9y''@;'; put 'put ''ZGVyLXJpZ2h0LXdpZHRoOjA7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNjY2N9LmhhbmRzb250YWJsZSB0aDpsYXN0LWNoaWxke2JvcmRlci1sZWZ0Om5vbmU7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjY2NjO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNjY2N9W2Rpcj1ydGxdLmhhbmRzb250''@;'; put 'put ''YWJsZSB0aDpsYXN0LWNoaWxke2JvcmRlci1yaWdodDpub25lO2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjfS5oYW5kc29udGFibGUgdGg6Zmlyc3QtY2hpbGQsLmhhbmRzb250YWJsZSB0ZDpmaXJzdC1vZi10eXBle2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjfVtkaXI9cnRsXS5oYW5k''@;'; put 'put ''c29udGFibGUgdGg6Zmlyc3QtY2hpbGQsW2Rpcj1ydGxdLmhhbmRzb250YWJsZSB0ZDpmaXJzdC1vZi10eXBle2JvcmRlci1yaWdodDoxcHggc29saWQgI2NjY30uaGFuZHNvbnRhYmxlIC5odF9jbG9uZV90b3AgdGg6bnRoLWNoaWxkKDIpe2JvcmRlci1sZWZ0LXdpZHRoOjA7Ym9yZGVyLXJp''@;'; put 'put ''Z2h0OjFweCBzb2xpZCAjY2NjfVtkaXI9cnRsXS5oYW5kc29udGFibGUgLmh0X2Nsb25lX3RvcCB0aDpudGgtY2hpbGQoMil7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNjY2N9LmhhbmRzb250YWJsZS5odFJvd0hlYWRlcnMgdGhlYWQgdHIgdGg6bnRoLWNo''@;'; put 'put ''aWxkKDIpe2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2NjfVtkaXI9cnRsXS5oYW5kc29udGFibGUuaHRSb3dIZWFkZXJzIHRoZWFkIHRyIHRoOm50aC1jaGlsZCgyKXtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2N9LmhhbmRzb250YWJsZSB0cjpmaXJzdC1jaGlsZCB0aCwuaGFuZHNvbnRh''@;'; put 'put ''YmxlIHRyOmZpcnN0LWNoaWxkIHRke2JvcmRlci10b3A6MXB4IHNvbGlkICNjY2N9Lmh0X21hc3Rlcjpub3QoLmlubmVyQm9yZGVySW5saW5lU3RhcnQpOm5vdCguZW1wdHlDb2x1bW5zKSB0Ym9keSB0ciB0aCwuaHRfbWFzdGVyOm5vdCguaW5uZXJCb3JkZXJJbmxpbmVTdGFydCk6bm90KC5l''@;'; put 'put ''bXB0eUNvbHVtbnMpIHRoZWFkIHRyIHRoOmZpcnN0LWNoaWxkLC5odF9tYXN0ZXI6bm90KC5pbm5lckJvcmRlcklubGluZVN0YXJ0KTpub3QoLmVtcHR5Q29sdW1ucyl+LmhhbmRzb250YWJsZTpub3QoLmh0R2hvc3RUYWJsZSkgdGJvZHkgdHIgdGgsLmh0X21hc3Rlcjpub3QoLmlubmVyQm9y''@;'; put 'put ''ZGVySW5saW5lU3RhcnQpOm5vdCguZW1wdHlDb2x1bW5zKX4uaGFuZHNvbnRhYmxlOm5vdCguaHRfY2xvbmVfdG9wKTpub3QoLmh0R2hvc3RUYWJsZSkgdGhlYWQgdHIgdGg6Zmlyc3QtY2hpbGR7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7Ym9yZGVyLWxlZnQ6MXB4IHNvbGlkICNjY2N9W2Rpcj1y''@;'; put 'put ''dGxdLmh0X21hc3Rlcjpub3QoLmlubmVyQm9yZGVySW5saW5lU3RhcnQpOm5vdCguZW1wdHlDb2x1bW5zKSB0Ym9keSB0ciB0aCxbZGlyPXJ0bF0uaHRfbWFzdGVyOm5vdCguaW5uZXJCb3JkZXJJbmxpbmVTdGFydCk6bm90KC5lbXB0eUNvbHVtbnMpIHRoZWFkIHRyIHRoOmZpcnN0LWNoaWxk''@;'; put 'put ''LFtkaXI9cnRsXS5odF9tYXN0ZXI6bm90KC5pbm5lckJvcmRlcklubGluZVN0YXJ0KTpub3QoLmVtcHR5Q29sdW1ucyl+LmhhbmRzb250YWJsZTpub3QoLmh0R2hvc3RUYWJsZSkgdGJvZHkgdHIgdGgsW2Rpcj1ydGxdLmh0X21hc3Rlcjpub3QoLmlubmVyQm9yZGVySW5saW5lU3RhcnQpOm5v''@;'; put 'put ''dCguZW1wdHlDb2x1bW5zKX4uaGFuZHNvbnRhYmxlOm5vdCguaHRfY2xvbmVfdG9wKTpub3QoLmh0R2hvc3RUYWJsZSkgdGhlYWQgdHIgdGg6Zmlyc3QtY2hpbGR7Ym9yZGVyLWxlZnQtd2lkdGg6MDtib3JkZXItcmlnaHQ6MXB4IHNvbGlkICNjY2N9Lmh0X21hc3Rlcjpub3QoLmlubmVyQm9y''@;'; put 'put ''ZGVyVG9wKTpub3QoLmlubmVyQm9yZGVyQm90dG9tKSB0aGVhZCB0cjpsYXN0LWNoaWxkIHRoLC5odF9tYXN0ZXI6bm90KC5pbm5lckJvcmRlclRvcCk6bm90KC5pbm5lckJvcmRlckJvdHRvbSl+LmhhbmRzb250YWJsZSB0aGVhZCB0cjpsYXN0LWNoaWxkIHRoLC5odF9tYXN0ZXI6bm90KC5p''@;'; put 'put ''bm5lckJvcmRlclRvcCk6bm90KC5pbm5lckJvcmRlckJvdHRvbSkgdGhlYWQgdHIubGFzdENoaWxkIHRoLC5odF9tYXN0ZXI6bm90KC5pbm5lckJvcmRlclRvcCk6bm90KC5pbm5lckJvcmRlckJvdHRvbSl+LmhhbmRzb250YWJsZSB0aGVhZCB0ci5sYXN0Q2hpbGQgdGh7Ym9yZGVyLWJvdHRv''@;'; put 'put ''bS13aWR0aDowfS5oYW5kc29udGFibGUgdGh7YmFja2dyb3VuZC1jb2xvcjojZjBmMGYwO2NvbG9yOiMyMjI7dGV4dC1hbGlnbjpjZW50ZXI7Zm9udC13ZWlnaHQ6NDAwO3doaXRlLXNwYWNlOm5vd3JhcH0uaGFuZHNvbnRhYmxlIHRoZWFkIHRoe3BhZGRpbmc6MH0uaGFuZHNvbnRhYmxlIHRo''@;'; put 'put ''LmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiNjY2N9LmhhbmRzb250YWJsZSB0aGVhZCB0aCAucmVsYXRpdmV7cGFkZGluZzoycHggNHB4fS5oYW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7bGluZS1oZWlnaHQ6MS4xfS5oYW5kc29udGFibGUgLnd0Qm9y''@;'; put 'put ''ZGVye3Bvc2l0aW9uOmFic29sdXRlO2ZvbnQtc2l6ZTowfS5oYW5kc29udGFibGUgLnd0Qm9yZGVyLmhpZGRlbntkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS5oYW5kc29udGFibGUgLnd0Qm9yZGVyLmN1cnJlbnR7ei1pbmRleDoxMH0uaGFuZHNvbnRhYmxlIC53dEJvcmRlci5hcmVhe3otaW5k''@;'; put 'put ''ZXg6OH0uaGFuZHNvbnRhYmxlIC53dEJvcmRlci5maWxse3otaW5kZXg6Nn0uaGFuZHNvbnRhYmxlIC53dEJvcmRlci5jb3JuZXJ7Zm9udC1zaXplOjA7Y3Vyc29yOmNyb3NzaGFpcn0uaHRfY2xvbmVfbWFzdGVye3otaW5kZXg6MTAwfS5odF9jbG9uZV9pbmxpbmVfc3RhcnR7ei1pbmRleDox''@;'; put 'put ''MjB9Lmh0X2Nsb25lX2JvdHRvbXt6LWluZGV4OjEzMH0uaHRfY2xvbmVfYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXJ7ei1pbmRleDoxNTB9Lmh0X2Nsb25lX3RvcHt6LWluZGV4OjE2MH0uaHRfY2xvbmVfdG9wX2lubGluZV9zdGFydF9jb3JuZXJ7ei1pbmRleDoxODB9LmhhbmRzb250YWJs''@;'; put 'put ''ZSBjb2wuaGlkZGVue3dpZHRoOjAhaW1wb3J0YW50fS5oYW5kc29udGFibGUgdHIuaGlkZGVuLC5oYW5kc29udGFibGUgdHIuaGlkZGVuIHRkLC5oYW5kc29udGFibGUgdHIuaGlkZGVuIHRoe2Rpc3BsYXk6bm9uZX0uaHRfbWFzdGVyLC5odF9jbG9uZV9pbmxpbmVfc3RhcnQsLmh0X2Nsb25l''@;'; put 'put ''X3RvcCwuaHRfY2xvbmVfYm90dG9te292ZXJmbG93OmhpZGRlbn0uaHRfbWFzdGVyIC53dEhvbGRlcntvdmVyZmxvdzphdXRvfS5oYW5kc29udGFibGUgLmh0X21hc3RlciB0YWJsZS5odENvcmU+dGhlYWQsLmhhbmRzb250YWJsZSAuaHRfbWFzdGVyIHRhYmxlLmh0Q29yZT50Ym9keT50cj50''@;'; put 'put ''aCwuaGFuZHNvbnRhYmxlIC5odF9jbG9uZV9pbmxpbmVfc3RhcnQgdGFibGUuaHRDb3JlPnRoZWFke3Zpc2liaWxpdHk6aGlkZGVufS5odF9jbG9uZV90b3AgLnd0SG9sZGVyLC5odF9jbG9uZV9pbmxpbmVfc3RhcnQgLnd0SG9sZGVyLC5odF9jbG9uZV9ib3R0b20gLnd0SG9sZGVye292ZXJm''@;'; put 'put ''bG93OmhpZGRlbn0uaGFuZHNvbnRhYmxle3Bvc2l0aW9uOnJlbGF0aXZlO3RvdWNoLWFjdGlvbjptYW5pcHVsYXRpb247Zm9udC1mYW1pbHk6LWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsU2Vnb2UgVUksUm9ib3RvLE94eWdlbixVYnVudHUsSGVsdmV0aWNhIE5ldWUsQXJpYWws''@;'; put 'put ''c2Fucy1zZXJpZjtmb250LXNpemU6MTNweDtmb250LXdlaWdodDo0MDA7Y29sb3I6IzM3MzczN30uaGFuZHNvbnRhYmxlIGF7Y29sb3I6IzEwNGFjY30uaGFuZHNvbnRhYmxlLmh0QXV0b1NpemV7dmlzaWJpbGl0eTpoaWRkZW47bGVmdDotOTkwMDBweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6''@;'; put 'put ''LTk5MDAwcHh9LmhhbmRzb250YWJsZSB0ZC5odEludmFsaWR7YmFja2dyb3VuZC1jb2xvcjojZmZiZWJhIWltcG9ydGFudH0uaGFuZHNvbnRhYmxlIHRkLmh0Tm9XcmFwe3doaXRlLXNwYWNlOm5vd3JhcH0uaGFuZHNvbnRhYmxlIHRkLmludmlzaWJsZVNlbGVjdGlvbiwuaGFuZHNvbnRhYmxl''@;'; put 'put ''IHRoLmludmlzaWJsZVNlbGVjdGlvbntvdXRsaW5lOm5vbmV9LmhhbmRzb250YWJsZSB0ZC5pbnZpc2libGVTZWxlY3Rpb246OnNlbGVjdGlvbiwuaGFuZHNvbnRhYmxlIHRoLmludmlzaWJsZVNlbGVjdGlvbjo6c2VsZWN0aW9ue2JhY2tncm91bmQ6I2ZmZjB9LmhvdC1kaXNwbGF5LWxpY2Vu''@;'; put 'put ''c2UtaW5mb3tmb250LWZhbWlseTotYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxTZWdvZSBVSSxSb2JvdG8sT3h5Z2VuLFVidW50dSxIZWx2ZXRpY2EgTmV1ZSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMHB4O2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojMzczNzM3O3BhZGRp''@;'; put 'put ''bmc6NXB4IDAgM3B4O3RleHQtYWxpZ246bGVmdH0uaG90LWRpc3BsYXktbGljZW5zZS1pbmZvIGF7Y29sb3I6IzEwNGFjYztmb250LXNpemU6MTBweH0uaGFuZHNvbnRhYmxlIC5odEZvY3VzQ2F0Y2hlcntwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4Oi0xO29wYWNpdHk6MDtib3JkZXI6MDtt''@;'; put 'put ''YXJnaW46MDtwYWRkaW5nOjA7d2lkdGg6MDtoZWlnaHQ6MH0uaGFuZHNvbnRhYmxlIC5tYW51YWxDb2x1bW5SZXNpemVye3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2N1cnNvcjpjb2wtcmVzaXplO3otaW5kZXg6MjEwO3dpZHRoOjVweDtoZWlnaHQ6MjVweH0uaGFuZHNvbnRhYmxlIC5tYW51''@;'; put 'put ''YWxSb3dSZXNpemVye3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDtjdXJzb3I6cm93LXJlc2l6ZTt6LWluZGV4OjIxMDtoZWlnaHQ6NXB4O3dpZHRoOjUwcHh9LmhhbmRzb250YWJsZSAubWFudWFsQ29sdW1uUmVzaXplcjpob3ZlciwuaGFuZHNvbnRhYmxlIC5tYW51YWxDb2x1bW5SZXNpemVy''@;'; put 'put ''LmFjdGl2ZSwuaGFuZHNvbnRhYmxlIC5tYW51YWxSb3dSZXNpemVyOmhvdmVyLC5oYW5kc29udGFibGUgLm1hbnVhbFJvd1Jlc2l6ZXIuYWN0aXZle2JhY2tncm91bmQtY29sb3I6IzM0YTlkYn0uaGFuZHNvbnRhYmxlIC5tYW51YWxDb2x1bW5SZXNpemVyR3VpZGV7cG9zaXRpb246YWJzb2x1''@;'; put 'put ''dGU7cmlnaHQ6dW5zZXQ7dG9wOjA7YmFja2dyb3VuZC1jb2xvcjojMzRhOWRiO2Rpc3BsYXk6bm9uZTt3aWR0aDowO2JvcmRlci1yaWdodDoxcHggZGFzaGVkICM3Nzc7Ym9yZGVyLWxlZnQ6bm9uZTttYXJnaW4tbGVmdDo1cHg7bWFyZ2luLXJpZ2h0OnVuc2V0fVtkaXI9cnRsXS5oYW5kc29u''@;'; put 'put ''dGFibGUgLm1hbnVhbENvbHVtblJlc2l6ZXJHdWlkZXtsZWZ0OnVuc2V0O2JvcmRlci1sZWZ0OjFweCBkYXNoZWQgIzc3Nztib3JkZXItcmlnaHQ6bm9uZTttYXJnaW4tcmlnaHQ6NXB4O21hcmdpbi1sZWZ0OnVuc2V0fS5oYW5kc29udGFibGUgLm1hbnVhbFJvd1Jlc2l6ZXJHdWlkZXtwb3Np''@;'; put 'put ''dGlvbjphYnNvbHV0ZTtsZWZ0OjA7Ym90dG9tOjA7YmFja2dyb3VuZC1jb2xvcjojMzRhOWRiO2Rpc3BsYXk6bm9uZTtoZWlnaHQ6MDtib3JkZXItYm90dG9tOjFweCBkYXNoZWQgIzc3NzttYXJnaW4tdG9wOjVweH0uaGFuZHNvbnRhYmxlIC5tYW51YWxDb2x1bW5SZXNpemVyR3VpZGUuYWN0''@;'; put 'put ''aXZlLC5oYW5kc29udGFibGUgLm1hbnVhbFJvd1Jlc2l6ZXJHdWlkZS5hY3RpdmV7ZGlzcGxheTpibG9jazt6LWluZGV4OjIwOX0uaGFuZHNvbnRhYmxlIHRkLmFyZWEsLmhhbmRzb250YWJsZSB0ZC5hcmVhLTEsLmhhbmRzb250YWJsZSB0ZC5hcmVhLTIsLmhhbmRzb250YWJsZSB0ZC5hcmVh''@;'; put 'put ''LTMsLmhhbmRzb250YWJsZSB0ZC5hcmVhLTQsLmhhbmRzb250YWJsZSB0ZC5hcmVhLTUsLmhhbmRzb250YWJsZSB0ZC5hcmVhLTYsLmhhbmRzb250YWJsZSB0ZC5hcmVhLTd7cG9zaXRpb246cmVsYXRpdmV9LmhhbmRzb250YWJsZSB0ZC5hcmVhOmJlZm9yZSwuaGFuZHNvbnRhYmxlIHRkLmFy''@;'; put 'put ''ZWEtMTpiZWZvcmUsLmhhbmRzb250YWJsZSB0ZC5hcmVhLTI6YmVmb3JlLC5oYW5kc29udGFibGUgdGQuYXJlYS0zOmJlZm9yZSwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtNDpiZWZvcmUsLmhhbmRzb250YWJsZSB0ZC5hcmVhLTU6YmVmb3JlLC5oYW5kc29udGFibGUgdGQuYXJlYS02OmJlZm9y''@;'; put 'put ''ZSwuaGFuZHNvbnRhYmxlIHRkLmFyZWEtNzpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDowO2JhY2tncm91bmQ6IzAwNWVmZn0uaGFuZHNvbnRhYmxlIHRkLmFyZWE6YmVmb3Jle29wYWNpdHk6LjF9LmhhbmRzb250YWJsZSB0ZC5hcmVhLTE6YmVmb3Jle29wYWNp''@;'; put 'put ''dHk6LjJ9LmhhbmRzb250YWJsZSB0ZC5hcmVhLTI6YmVmb3Jle29wYWNpdHk6LjI3fS5oYW5kc29udGFibGUgdGQuYXJlYS0zOmJlZm9yZXtvcGFjaXR5Oi4zNX0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtNDpiZWZvcmV7b3BhY2l0eTouNDF9LmhhbmRzb250YWJsZSB0ZC5hcmVhLTU6YmVmb3Jl''@;'; put 'put ''e29wYWNpdHk6LjQ3fS5oYW5kc29udGFibGUgdGQuYXJlYS02OmJlZm9yZXtvcGFjaXR5Oi41NH0uaGFuZHNvbnRhYmxlIHRkLmFyZWEtNzpiZWZvcmV7b3BhY2l0eTouNTh9LmhhbmRzb250YWJsZSB0Ym9keSB0aC5jdXJyZW50LC5oYW5kc29udGFibGUgdGhlYWQgdGguY3VycmVudHtib3gt''@;'; put 'put ''c2hhZG93Omluc2V0IDAgMCAwIDJweCAjNGI4OWZmfS5oYW5kc29udGFibGUgdGJvZHkgdGguaHRfX2hpZ2hsaWdodCwuaGFuZHNvbnRhYmxlIHRoZWFkIHRoLmh0X19oaWdobGlnaHR7YmFja2dyb3VuZC1jb2xvcjojZGNkY2RjfS5oYW5kc29udGFibGUgdGJvZHkgdGguaHRfX2FjdGl2ZV9o''@;'; put 'put ''aWdobGlnaHQsLmhhbmRzb250YWJsZSB0aGVhZCB0aC5odF9fYWN0aXZlX2hpZ2hsaWdodHtiYWNrZ3JvdW5kLWNvbG9yOiM4ZWIwZTc7Y29sb3I6IzAwMH0uaGFuZHNvbnRhYmxlSW5wdXR7Ym9yZGVyOm5vbmU7b3V0bGluZS13aWR0aDowO21hcmdpbjowO3BhZGRpbmc6MXB4IDVweCAwO2Zv''@;'; put 'put ''bnQtZmFtaWx5OmluaGVyaXQ7bGluZS1oZWlnaHQ6MjFweDtmb250LXNpemU6aW5oZXJpdDtib3gtc2hhZG93OjAgMCAwIDJweCAjNTI5MmY3IGluc2V0O3Jlc2l6ZTpub25lO2Rpc3BsYXk6YmxvY2s7Y29sb3I6IzAwMDtib3JkZXItcmFkaXVzOjA7YmFja2dyb3VuZC1jb2xvcjojZmZmO2Jv''@;'; put 'put ''eC1zaXppbmc6Ym9yZGVyLWJveCFpbXBvcnRhbnR9LmhhbmRzb250YWJsZUlucHV0OmZvY3Vze291dGxpbmU6bm9uZX0uaGFuZHNvbnRhYmxlSW5wdXRIb2xkZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowfS5odFNlbGVjdEVkaXRvcntwb3NpdGlvbjphYnNvbHV0ZX0uaHRTZWxl''@;'; put 'put ''Y3RFZGl0b3Igc2VsZWN0ey13ZWJraXQtYXBwZWFyYW5jZTptZW51bGlzdC1idXR0b24haW1wb3J0YW50O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7Ym9yZGVyOjJweCBzb2xpZCAjNGI4OWZmO2JveC1zaXppbmc6Ym9yZGVyLWJveCFpbXBvcnRhbnR9Lmh0U2VsZWN0RWRpdG9yIHNlbGVjdDpm''@;'; put 'put ''b2N1c3tvdXRsaW5lOm5vbmV9Lmh0U2VsZWN0RWRpdG9yIC5odEF1dG9jb21wbGV0ZUFycm93e2Rpc3BsYXk6bm9uZX0uaGFuZHNvbnRhYmxlIC5odERpbW1lZHtjb2xvcjojNzc3fS5oYW5kc29udGFibGUgLmh0U3VibWVudXtwb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNvbnRhYmxlIC5odFN1''@;'; put 'put ''Ym1lbnUgOmFmdGVye2NvbnRlbnQ6IlwyNWI2Ijtjb2xvcjojNzc3O3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjVweDtmb250LXNpemU6OXB4fVtkaXI9cnRsXS5oYW5kc29udGFibGUgLmh0U3VibWVudSA6YWZ0ZXJ7Y29udGVudDoiIn1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5odFN1Ym1l''@;'; put 'put ''bnUgOmJlZm9yZXtjb250ZW50OiJcMjVjMCI7Y29sb3I6Izc3Nztwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjVweDtmb250LXNpemU6OXB4fS5oYW5kc29udGFibGUgLmh0TGVmdHt0ZXh0LWFsaWduOmxlZnR9LmhhbmRzb250YWJsZSAuaHRDZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LmhhbmRz''@;'; put 'put ''b250YWJsZSAuaHRSaWdodHt0ZXh0LWFsaWduOnJpZ2h0fS5oYW5kc29udGFibGUgLmh0SnVzdGlmeXt0ZXh0LWFsaWduOmp1c3RpZnl9LmhhbmRzb250YWJsZSAuaHRUb3B7dmVydGljYWwtYWxpZ246dG9wfS5oYW5kc29udGFibGUgLmh0TWlkZGxle3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0u''@;'; put 'put ''aGFuZHNvbnRhYmxlIC5odEJvdHRvbXt2ZXJ0aWNhbC1hbGlnbjpib3R0b219LmhhbmRzb250YWJsZSAuaHRQbGFjZWhvbGRlcntjb2xvcjojOTk5fS5oYW5kc29udGFibGUubGlzdGJveHttYXJnaW46MH0uaGFuZHNvbnRhYmxlLmxpc3Rib3ggLmh0X21hc3RlciB0YWJsZXtib3JkZXI6MXB4''@;'; put 'put ''IHNvbGlkICNjY2M7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlO2JhY2tncm91bmQ6I2ZmZn0uaGFuZHNvbnRhYmxlLmxpc3Rib3ggdGgsLmhhbmRzb250YWJsZS5saXN0Ym94IHRyOmZpcnN0LWNoaWxkIHRoLC5oYW5kc29udGFibGUubGlzdGJveCB0cjpsYXN0LWNoaWxkIHRoLC5oYW5kc29u''@;'; put 'put ''dGFibGUubGlzdGJveCB0cjpmaXJzdC1jaGlsZCB0ZCwuaGFuZHNvbnRhYmxlLmxpc3Rib3ggdGR7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50IWltcG9ydGFudH0uaGFuZHNvbnRhYmxlLmxpc3Rib3ggdGgsLmhhbmRzb250YWJsZS5saXN0Ym94IHRke3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0''@;'; put 'put ''LW92ZXJmbG93OmVsbGlwc2lzfS5oYW5kc29udGFibGUubGlzdGJveCB0ZC5odERpbW1lZHtjdXJzb3I6ZGVmYXVsdDtjb2xvcjppbmhlcml0O2ZvbnQtc3R5bGU6aW5oZXJpdH0uaGFuZHNvbnRhYmxlLmxpc3Rib3ggLnd0Qm9yZGVye3Zpc2liaWxpdHk6aGlkZGVufS5oYW5kc29udGFibGUu''@;'; put 'put ''bGlzdGJveCB0ciB0ZC5jdXJyZW50LC5oYW5kc29udGFibGUubGlzdGJveCB0cjpob3ZlciB0ZHtiYWNrZ3JvdW5kOiNlZWV9Lmh0X2VkaXRvcl9oaWRkZW57ei1pbmRleDotMX0uaHRfZWRpdG9yX3Zpc2libGV7ei1pbmRleDoyMDB9LmhhbmRzb250YWJsZSB0ZC5odFNlYXJjaFJlc3VsdHti''@;'; put 'put ''YWNrZ3JvdW5kOiNmY2VkZDk7Y29sb3I6IzU4MzcwN30uaGFuZHNvbnRhYmxlLm1vYmlsZSwuaGFuZHNvbnRhYmxlLm1vYmlsZSAud3RIb2xkZXJ7LXdlYmtpdC10b3VjaC1jYWxsb3V0Om5vbmU7LXdlYmtpdC11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmU7LXdlYmtpdC10YXAt''@;'; put 'put ''aGlnaGxpZ2h0LWNvbG9yOnJnYmEoMCwwLDAsMCk7LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2h9LmhhbmRzb250YWJsZS5tb2JpbGUgLmhhbmRzb250YWJsZUlucHV0OmZvY3Vze2JveC1zaGFkb3c6MCAwIDAgMnB4ICM1MjkyZjcgaW5zZXQ7LXdlYmtpdC1hcHBlYXJhbmNlOm5v''@;'; put 'put ''bmV9LmhhbmRzb250YWJsZSAudG9wU2VsZWN0aW9uSGFuZGxlLC5oYW5kc29udGFibGUgLnRvcFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhLC5oYW5kc29udGFibGUgLmJvdHRvbVNlbGVjdGlvbkhhbmRsZSwuaGFuZHNvbnRhYmxlIC5ib3R0b21TZWxlY3Rpb25IYW5kbGUtSGl0QXJlYXtsZWZ0''@;'; put 'put ''Oi0xMDAwMHB4O3JpZ2h0OnVuc2V0O3RvcDotMTAwMDBweDt6LWluZGV4Ojk5OTl9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAudG9wU2VsZWN0aW9uSGFuZGxlLFtkaXI9cnRsXS5oYW5kc29udGFibGUgLnRvcFNlbGVjdGlvbkhhbmRsZS1IaXRBcmVhLFtkaXI9cnRsXS5oYW5kc29udGFibGUg''@;'; put 'put ''LmJvdHRvbVNlbGVjdGlvbkhhbmRsZSxbZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5ib3R0b21TZWxlY3Rpb25IYW5kbGUtSGl0QXJlYXtyaWdodDotMTAwMDBweDtsZWZ0OnVuc2V0fS5oYW5kc29udGFibGUuaGlkZS10d2VlbnthbmltYXRpb246b3BhY2l0eS1oaWRlIC4zczthbmltYXRpb24t''@;'; put 'put ''ZmlsbC1tb2RlOmZvcndhcmRzOy13ZWJraXQtYW5pbWF0aW9uLWZpbGwtbW9kZTpmb3J3YXJkc30uaGFuZHNvbnRhYmxlLnNob3ctdHdlZW57YW5pbWF0aW9uOm9wYWNpdHktc2hvdyAuM3M7YW5pbWF0aW9uLWZpbGwtbW9kZTpmb3J3YXJkczstd2Via2l0LWFuaW1hdGlvbi1maWxsLW1vZGU6''@;'; put 'put ''Zm9yd2FyZHN9LmhhbmRzb250YWJsZSAuaHRBdXRvY29tcGxldGVBcnJvd3tmbG9hdDpyaWdodDtmb250LXNpemU6MTBweDtjb2xvcjojYmJiO2N1cnNvcjpkZWZhdWx0O3dpZHRoOjE2cHg7dGV4dC1hbGlnbjpjZW50ZXJ9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuaHRBdXRvY29tcGxldGVB''@;'; put 'put ''cnJvd3tmbG9hdDpsZWZ0fS5oYW5kc29udGFibGUgdGQuaHRJbnZhbGlkIC5odEF1dG9jb21wbGV0ZUFycm93e2NvbG9yOiM1NTV9LmhhbmRzb250YWJsZSB0ZC5odEludmFsaWQgLmh0QXV0b2NvbXBsZXRlQXJyb3c6aG92ZXJ7Y29sb3I6IzFhMWExYX0uaGFuZHNvbnRhYmxlIHRkIC5odEF1''@;'; put 'put ''dG9jb21wbGV0ZUFycm93OmhvdmVye2NvbG9yOiM3Nzd9LmhhbmRzb250YWJsZSB0ZC5hcmVhIC5odEF1dG9jb21wbGV0ZUFycm93e2NvbG9yOiNkM2QzZDN9LmhhbmRzb250YWJsZSAuaHRDaGVja2JveFJlbmRlcmVySW5wdXQubm9WYWx1ZXtvcGFjaXR5Oi41fS5oYW5kc29udGFibGUgLmh0''@;'; put 'put ''Q2hlY2tib3hSZW5kZXJlckxhYmVse2ZvbnQtc2l6ZTppbmhlcml0O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1ibG9ja30uaGFuZHNvbnRhYmxlIC5odENoZWNrYm94UmVuZGVyZXJMYWJlbC5mdWxsV2lkdGh7d2lkdGg6MTAwJX0uaGFuZHNv''@;'; put 'put ''bnRhYmxlIC5jb2xsYXBzaWJsZUluZGljYXRvcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC01MCUpO2xlZnQ6dW5zZXQ7cmlnaHQ6NXB4O2JvcmRlcjoxcHggc29saWQgI0E2QTZBNjtsaW5lLWhlaWdodDo4cHg7Y29sb3I6IzIyMjtib3JkZXItcmFk''@;'; put 'put ''aXVzOjEwcHg7Zm9udC1zaXplOjEwcHg7d2lkdGg6MTBweDtoZWlnaHQ6MTBweDtjdXJzb3I6cG9pbnRlcjtib3gtc2hhZG93OjAgMCAwIDNweCAjZWVlO2JhY2tncm91bmQ6I2VlZTt0ZXh0LWFsaWduOmNlbnRlcn1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIC5jb2xsYXBzaWJsZUluZGljYXRv''@;'; put 'put ''cntyaWdodDp1bnNldDtsZWZ0OjVweH0uaGFuZHNvbnRhYmxlW2Rpcj1sdHJdIHRoZWFkIHRoOmhhcyguY29sbGFwc2libGVJbmRpY2F0b3IpIGRpdi5odFJpZ2h0IHNwYW4uY29sSGVhZGVye21hcmdpbi1yaWdodDoyMHB4fS5oYW5kc29udGFibGVbZGlyPXJ0bF0gdGhlYWQgdGg6aGFzKC5j''@;'; put 'put ''b2xsYXBzaWJsZUluZGljYXRvcikgZGl2Lmh0TGVmdCBzcGFuLmNvbEhlYWRlcnttYXJnaW4tbGVmdDoyMHB4fS5oYW5kc29udGFibGUgLmNvbHVtblNvcnRpbmd7cG9zaXRpb246cmVsYXRpdmV9LmhhbmRzb250YWJsZVtkaXI9bHRyXSBkaXYuaHRSaWdodCBzcGFuW2NsYXNzKj1hc2NlbmRp''@;'; put 'put ''bmddLC5oYW5kc29udGFibGVbZGlyPWx0cl0gZGl2Lmh0UmlnaHQgc3BhbltjbGFzcyo9ZGVzY2VuZGluZ117bWFyZ2luLXJpZ2h0OjEwcHg7bWFyZ2luLWxlZnQ6LTEwcHh9LmhhbmRzb250YWJsZVtkaXI9cnRsXSBkaXYuaHRMZWZ0IHNwYW5bY2xhc3MqPWFzY2VuZGluZ10sLmhhbmRzb250''@;'; put 'put ''YWJsZVtkaXI9cnRsXSBkaXYuaHRMZWZ0IHNwYW5bY2xhc3MqPWRlc2NlbmRpbmdde21hcmdpbi1sZWZ0OjEwcHg7bWFyZ2luLXJpZ2h0Oi0xMHB4fS5oYW5kc29udGFibGVbZGlyPWx0cl0gZGl2Lmh0UmlnaHQgc3BhbltjbGFzcyo9YXNjZW5kaW5nXTpvbmx5LWNoaWxkLC5oYW5kc29udGFi''@;'; put 'put ''bGVbZGlyPWx0cl0gZGl2Lmh0UmlnaHQgc3BhbltjbGFzcyo9ZGVzY2VuZGluZ106b25seS1jaGlsZHttYXJnaW4tcmlnaHQ6MTVweDttYXJnaW4tbGVmdDotMTVweH0uaGFuZHNvbnRhYmxlW2Rpcj1ydGxdIGRpdi5odExlZnQgc3BhbltjbGFzcyo9YXNjZW5kaW5nXTpvbmx5LWNoaWxkLC5o''@;'; put 'put ''YW5kc29udGFibGVbZGlyPXJ0bF0gZGl2Lmh0TGVmdCBzcGFuW2NsYXNzKj1kZXNjZW5kaW5nXTpvbmx5LWNoaWxke21hcmdpbi1sZWZ0OjE1cHg7bWFyZ2luLXJpZ2h0Oi0xNXB4fS5oYW5kc29udGFibGUgLmNvbHVtblNvcnRpbmcuc29ydEFjdGlvbjpob3Zlcnt0ZXh0LWRlY29yYXRpb246''@;'; put 'put ''dW5kZXJsaW5lO2N1cnNvcjpwb2ludGVyfS5oYW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZzpiZWZvcmV7dG9wOjUwJTttYXJnaW4tdG9wOi02cHg7cGFkZGluZy1sZWZ0OjhweDtwYWRkaW5nLXJpZ2h0OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTlweDtsZWZ0''@;'; put 'put ''OnVuc2V0O2NvbnRlbnQ6IiI7aGVpZ2h0OjEwcHg7d2lkdGg6NXB4O2JhY2tncm91bmQtc2l6ZTpjb250YWluO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6cmlnaHR9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5T''@;'; put 'put ''b3J0aW5nOmJlZm9yZXtwYWRkaW5nLXJpZ2h0OjhweDtwYWRkaW5nLWxlZnQ6MDtsZWZ0Oi05cHg7cmlnaHQ6dW5zZXQ7YmFja2dyb3VuZC1wb3NpdGlvbi14OmxlZnR9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nLmFzY2VuZGluZzpiZWZvcmV7YmFja2dyb3Vu''@;'; put 'put ''ZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCUUFBQUFvQ0FNQUFBREo3eXJwQUFBQUtsQk1WRVVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUtFODZJQUFBQURYUlNUbE1BQkJF''@;'; put 'put ''bVJHcHJsSlc3MmU3N3RUa1RLd0FBQUZOSlJFRlVlQUh0emprU2dDQVVCTkhQZ3NveTk3K3VsR1hScUpFNUwreGt4b1l0MlVkc0xiNWJxRklOeithTHV1TG41ckl1MlJrTzNmWnBXRU5pbU5naXc2aUJZUlRQTUxKakdGeFFaMWh4eGIveEJJMXFDOGszOUNkS0FBQUFBRWxGVGtTdVFtQ0MpfS5o''@;'; put 'put ''YW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZy5kZXNjZW5kaW5nOmJlZm9yZXtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJRQUFBQW9DQU1BQUFESjd5cnBBQUFBS2xCTVZFVUFBQUFBQUFB''@;'; put 'put ''QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBS0U4NklBQUFBRFhSU1RsTUFCQkVtUkdwcmxKVzcyZTc3dFRrVEt3QUFBRkpKUkVGVWVBSHR6amtTZ0NBUVJORm1RWVVaN245ZEtVdnJ1MFRtdlBBbjNicjBRZmdkWjV4eDZ4K3JRbjIzR3FUWW5xMUZEY251''@;'; put 'put ''elpJTzJXbWVkVnFJUlZ4Z0dLRXlqTmdZUmpLR2taMWhGSVozSTcwTHlNMFZ0VThBQUFBQVNVVk9SSzVDWUlJPSl9Lmh0R2hvc3RUYWJsZSAuaHRDb3JlIHNwYW4uY29sSGVhZGVyLmNvbHVtblNvcnRpbmc6bm90KC5pbmRpY2F0b3JEaXNhYmxlZCk6YmVmb3Jle2NvbnRlbnQ6IioiO2Rpc3Bs''@;'; put 'put ''YXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmctcmlnaHQ6MjBweH0uaGFuZHNvbnRhYmxlLmh0R2hvc3RUYWJsZSB0YWJsZSB0aGVhZCB0aHtib3JkZXItYm90dG9tLXdpZHRoOjB9LmhhbmRzb250YWJsZS5odEdob3N0VGFibGUgdGFibGUgdGJvZHkgdHIgdGgsLmhh''@;'; put 'put ''bmRzb250YWJsZS5odEdob3N0VGFibGUgdGFibGUgdGJvZHkgdHIgdGR7Ym9yZGVyLXRvcC13aWR0aDowfS5oYW5kc29udGFibGUgLmh0Q29tbWVudENlbGx7cG9zaXRpb246cmVsYXRpdmV9LmhhbmRzb250YWJsZSAuaHRDb21tZW50Q2VsbDphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFi''@;'; put 'put ''c29sdXRlO3RvcDowO3JpZ2h0OjA7bGVmdDp1bnNldDtib3JkZXItbGVmdDo2cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0Om5vbmU7Ym9yZGVyLXRvcDo2cHggc29saWQgYmxhY2t9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuaHRDb21tZW50Q2VsbDphZnRlcntsZWZ0OjA7cmln''@;'; put 'put ''aHQ6dW5zZXQ7Ym9yZGVyLXJpZ2h0OjZweCBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItbGVmdDpub25lfS5odENvbW1lbnRzQ29udGFpbmVyIC5odENvbW1lbnRze2Rpc3BsYXk6bm9uZTt6LWluZGV4OjEwNTk7cG9zaXRpb246YWJzb2x1dGV9Lmh0Q29tbWVudHNDb250YWluZXIgLmh0Q29t''@;'; put 'put ''bWVudFRleHRBcmVhe2JveC1zaGFkb3c6IzAwMDAwMDFlIDAgMXB4IDNweCwjMDAwMDAwM2QgMCAxcHggMnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3JkZXI6bm9uZTtib3JkZXItbGVmdDozcHggc29saWQgI2NjYztib3JkZXItcmlnaHQ6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7''@;'; put 'put ''d2lkdGg6MjE1cHg7aGVpZ2h0OjkwcHg7Zm9udC1zaXplOjEycHg7cGFkZGluZzo1cHg7b3V0bGluZTowIWltcG9ydGFudDstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX1bZGlyPXJ0bF0uaHRDb21tZW50c0NvbnRhaW5lciAuaHRDb21tZW50VGV4dEFyZWF7Ym9yZGVyLXJpZ2h0OjNweCBzb2xp''@;'; put 'put ''ZCAjY2NjO2JvcmRlci1sZWZ0Om5vbmV9Lmh0Q29tbWVudHNDb250YWluZXIgLmh0Q29tbWVudFRleHRBcmVhOmZvY3Vze2JveC1zaGFkb3c6IzAwMDAwMDFlIDAgMXB4IDNweCwjMDAwMDAwM2QgMCAxcHggMnB4LGluc2V0IDAgMCAwIDFweCAjNTI5MmY3O2JvcmRlci1sZWZ0OjNweCBzb2xp''@;'; put 'put ''ZCAjNTI5MmY3O2JvcmRlci1yaWdodDpub25lfVtkaXI9cnRsXS5odENvbW1lbnRzQ29udGFpbmVyIC5odENvbW1lbnRUZXh0QXJlYTpmb2N1c3tib3JkZXItcmlnaHQ6M3B4IHNvbGlkICM1MjkyZjc7Ym9yZGVyLWxlZnQ6bm9uZX0vKiEKICogSGFuZHNvbnRhYmxlIENvbnRleHRNZW51CiAq''@;'; put 'put ''Ly5odENvbnRleHRNZW51Om5vdCguaHRHaG9zdFRhYmxlKXtkaXNwbGF5Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDYwfS5odENvbnRleHRNZW51IC5odF9jbG9uZV90b3AsLmh0Q29udGV4dE1lbnUgLmh0X2Nsb25lX2JvdHRvbSwuaHRDb250ZXh0TWVudSAuaHRfY2xvbmVf''@;'; put 'put ''aW5saW5lX3N0YXJ0LC5odENvbnRleHRNZW51IC5odF9jbG9uZV90b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciwuaHRDb250ZXh0TWVudSAuaHRfY2xvbmVfYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXJ7ZGlzcGxheTpub25lfS5odENvbnRleHRNZW51IC5odF9tYXN0ZXIgdGFibGUuaHRDb3Jl''@;'; put 'put ''e2JvcmRlci1jb2xvcjojY2NjO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItdG9wLXdpZHRoOjFweDtib3JkZXItYm90dG9tLXdpZHRoOjJweDtib3JkZXItbGVmdC13aWR0aDoxcHg7Ym9yZGVyLXJpZ2h0LXdpZHRoOjJweH1bZGlyPXJ0bF0uaHRDb250ZXh0TWVudSAuaHRfbWFzdGVyIHRh''@;'; put 'put ''YmxlLmh0Q29yZXtib3JkZXItcmlnaHQtd2lkdGg6MXB4O2JvcmRlci1sZWZ0LXdpZHRoOjJweH0uaHRDb250ZXh0TWVudS5oYW5kc29udGFibGU6Zm9jdXN7b3V0bGluZTpub25lfS5odENvbnRleHRNZW51IC53dEJvcmRlcnt2aXNpYmlsaXR5OmhpZGRlbn0uaHRDb250ZXh0TWVudSB0YWJs''@;'; put 'put ''ZSB0Ym9keSB0ciB0ZHtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLXdpZHRoOjA7cGFkZGluZzo0cHggNnB4IDA7Y3Vyc29yOnBvaW50ZXI7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRy''@;'; put 'put ''IHRkOmZpcnN0LWNoaWxke2JvcmRlci10b3Atd2lkdGg6MDtib3JkZXItYm90dG9tLXdpZHRoOjA7Ym9yZGVyLWxlZnQtd2lkdGg6MDtib3JkZXItcmlnaHQtd2lkdGg6MH1bZGlyPXJ0bF0uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZDpmaXJzdC1jaGlsZHtib3JkZXItcmlnaHQt''@;'; put 'put ''d2lkdGg6MDtib3JkZXItbGVmdC13aWR0aDowfS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGltbWVke2ZvbnQtc3R5bGU6bm9ybWFsO2NvbG9yOiMzMjMyMzJ9Lmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQuY3VycmVudHtiYWNrZ3JvdW5kOiNmM2YzZjN9Lmh0''@;'; put 'put ''Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHRTZXBhcmF0b3J7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U2ZTZlNjtoZWlnaHQ6MDtwYWRkaW5nOjA7Y3Vyc29yOmRlZmF1bHR9Lmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaXNhYmxlZHtjb2xvcjojOTk5O2N1cnNv''@;'; put 'put ''cjpkZWZhdWx0fS5odENvbnRleHRNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGlzYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZDojZmZmO2NvbG9yOiM5OTk7Y3Vyc29yOmRlZmF1bHR9Lmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIuaHRIaWRkZW57ZGlzcGxheTpub25lfS5odENvbnRleHRN''@;'; put 'put ''ZW51IHRhYmxlIHRib2R5IHRyIHRkIC5odEl0ZW1XcmFwcGVye21hcmdpbi1sZWZ0OjEwcHg7bWFyZ2luLXJpZ2h0OjZweH1bZGlyPXJ0bF0uaHRDb250ZXh0TWVudSB0YWJsZSB0Ym9keSB0ciB0ZCAuaHRJdGVtV3JhcHBlcnttYXJnaW4tcmlnaHQ6MTBweDttYXJnaW4tbGVmdDo2cHh9Lmh0''@;'; put 'put ''Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQgZGl2IHNwYW4uc2VsZWN0ZWR7bWFyZ2luLXRvcDotMnB4O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NHB4O3JpZ2h0OjB9W2Rpcj1ydGxdLmh0Q29udGV4dE1lbnUgdGFibGUgdGJvZHkgdHIgdGQgZGl2IHNwYW4uc2VsZWN0ZWR7cmlnaHQ6''@;'; put 'put ''NHB4O2xlZnQ6MH0uaHRDb250ZXh0TWVudSAuaHRfbWFzdGVyIC53dEhvbGRlcntvdmVyZmxvdzpoaWRkZW59dGV4dGFyZWEuSGFuZHNvbnRhYmxlQ29weVBhc3Rle3Bvc2l0aW9uOmZpeGVkIWltcG9ydGFudDt0b3A6MCFpbXBvcnRhbnQ7cmlnaHQ6MTAwJSFpbXBvcnRhbnQ7b3ZlcmZsb3c6''@;'; put 'put ''aGlkZGVuO29wYWNpdHk6MDtvdXRsaW5lOjAgbm9uZSFpbXBvcnRhbnR9LyohCiAqIEhhbmRzb250YWJsZSBEcm9wZG93bk1lbnUKICovLmhhbmRzb250YWJsZSAuY2hhbmdlVHlwZXtiYWNrZ3JvdW5kOiNlZWU7Ym9yZGVyLXJhZGl1czoycHg7Ym9yZGVyOjFweCBzb2xpZCAjYmJiO2NvbG9y''@;'; put 'put ''OiNiYmI7Zm9udC1zaXplOjlweDtsaW5lLWhlaWdodDo5cHg7cGFkZGluZzoycHg7bWFyZ2luOjNweCAxcHggMCA1cHg7ZmxvYXQ6cmlnaHR9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuY2hhbmdlVHlwZXtmbG9hdDpsZWZ0fS5oYW5kc29udGFibGVbZGlyPXJ0bF0gLmNoYW5nZVR5cGV7bWFy''@;'; put 'put ''Z2luOjNweCA1cHggMCAxcHh9LmhhbmRzb250YWJsZSAuY2hhbmdlVHlwZTpiZWZvcmV7Y29udGVudDoiXDI1YmMgICJ9LmhhbmRzb250YWJsZSAuY2hhbmdlVHlwZTpob3Zlcntib3JkZXI6MXB4IHNvbGlkICM3Nzc7Y29sb3I6Izc3NztjdXJzb3I6cG9pbnRlcn0uaHREcm9wZG93bk1lbnU6''@;'; put 'put ''bm90KC5odEdob3N0VGFibGUpe2Rpc3BsYXk6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwNjB9Lmh0RHJvcGRvd25NZW51IC5odF9jbG9uZV90b3AsLmh0RHJvcGRvd25NZW51IC5odF9jbG9uZV9ib3R0b20sLmh0RHJvcGRvd25NZW51IC5odF9jbG9uZV9pbmxpbmVfc3RhcnQs''@;'; put 'put ''Lmh0RHJvcGRvd25NZW51IC5odF9jbG9uZV90b3BfaW5saW5lX3N0YXJ0X2Nvcm5lciwuaHREcm9wZG93bk1lbnUgLmh0X2Nsb25lX2JvdHRvbV9pbmxpbmVfc3RhcnRfY29ybmVye2Rpc3BsYXk6bm9uZX0uaHREcm9wZG93bk1lbnUgdGFibGUuaHRDb3Jle2JvcmRlci1jb2xvcjojY2NjO2Jv''@;'; put 'put ''cmRlci1zdHlsZTpzb2xpZDtib3JkZXItdG9wLXdpZHRoOjFweDtib3JkZXItYm90dG9tLXdpZHRoOjJweDtib3JkZXItbGVmdC13aWR0aDoxcHg7Ym9yZGVyLXJpZ2h0LXdpZHRoOjJweH1bZGlyPXJ0bF0uaHREcm9wZG93bk1lbnUgdGFibGUuaHRDb3Jle2JvcmRlci1yaWdodC13aWR0aDox''@;'; put 'put ''cHg7Ym9yZGVyLWxlZnQtd2lkdGg6MnB4fS5odERyb3Bkb3duTWVudS5oYW5kc29udGFibGU6Zm9jdXN7b3V0bGluZTpub25lfS5odERyb3Bkb3duTWVudSAud3RCb3JkZXJ7dmlzaWJpbGl0eTpoaWRkZW59Lmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRke2JhY2tncm91bmQ6I2Zm''@;'; put 'put ''Zjtib3JkZXItd2lkdGg6MDtwYWRkaW5nOjRweCA2cHggMDtjdXJzb3I6cG9pbnRlcjtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Lmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkOmZpcnN0LWNoaWxke2JvcmRlci10b3At''@;'; put 'put ''d2lkdGg6MDtib3JkZXItcmlnaHQtd2lkdGg6MDtib3JkZXItYm90dG9tLXdpZHRoOjA7Ym9yZGVyLWxlZnQtd2lkdGg6MH1bZGlyPXJ0bF0uaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQ6Zmlyc3QtY2hpbGR7Ym9yZGVyLWxlZnQtd2lkdGg6MDtib3JkZXItcmlnaHQtd2lkdGg6''@;'; put 'put ''MH0uaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaW1tZWR7Zm9udC1zdHlsZTpub3JtYWw7Y29sb3I6IzMyMzIzMn0uaHREcm9wZG93bk1lbnUgdGFibGUgdGJvZHkgdHIgdGQuY3VycmVudHtiYWNrZ3JvdW5kOiNlOWU5ZTl9Lmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5''@;'; put 'put ''IHRyIHRkLmh0U2VwYXJhdG9ye2JvcmRlci10b3A6MXB4IHNvbGlkICNlNmU2ZTY7aGVpZ2h0OjA7cGFkZGluZzowO2N1cnNvcjpkZWZhdWx0fS5odERyb3Bkb3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odERpc2FibGVke2NvbG9yOiM5OTl9Lmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5''@;'; put 'put ''IHRyIHRkLmh0RGlzYWJsZWQ6aG92ZXJ7YmFja2dyb3VuZDojZmZmO2NvbG9yOiM5OTk7Y3Vyc29yOmRlZmF1bHR9Lmh0RHJvcGRvd25NZW51Om5vdCguaHRHaG9zdFRhYmxlKSB0YWJsZSB0Ym9keSB0ci5odEhpZGRlbntkaXNwbGF5Om5vbmV9Lmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5''@;'; put 'put ''IHRyIHRkIC5odEl0ZW1XcmFwcGVye21hcmdpbi1sZWZ0OjEwcHg7bWFyZ2luLXJpZ2h0OjEwcHh9W2Rpcj1ydGxdLmh0RHJvcGRvd25NZW51IHRhYmxlIHRib2R5IHRyIHRkIC5odEl0ZW1XcmFwcGVye21hcmdpbi1yaWdodDoxMHB4O21hcmdpbi1sZWZ0OjEwcHh9Lmh0RHJvcGRvd25NZW51''@;'; put 'put ''IHRhYmxlIHRib2R5IHRyIHRkIGRpdiBzcGFuLnNlbGVjdGVke21hcmdpbi10b3A6LTJweDtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjRweDtyaWdodDowfVtkaXI9cnRsXS5odERyb3Bkb3duTWVudSB0YWJsZSB0Ym9keSB0ciB0ZCBkaXYgc3Bhbi5zZWxlY3RlZHtyaWdodDo0cHg7bGVmdDow''@;'; put 'put ''fS5odERyb3Bkb3duTWVudSAuaHRfbWFzdGVyIC53dEhvbGRlcntvdmVyZmxvdzpoaWRkZW59LyohCiAqIEhhbmRzb250YWJsZSBGaWx0ZXJzCiAqLy5odEZpbHRlcnNDb25kaXRpb25zTWVudTpub3QoLmh0R2hvc3RUYWJsZSl7ZGlzcGxheTpub25lO3Bvc2l0aW9uOmFic29sdXRlO3otaW5k''@;'; put 'put ''ZXg6MTA3MH0uaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgLmh0X2Nsb25lX3RvcCwuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgLmh0X2Nsb25lX2JvdHRvbSwuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgLmh0X2Nsb25lX2lubGluZV9zdGFydCwuaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgLmh0''@;'; put 'put ''X2Nsb25lX3RvcF9pbmxpbmVfc3RhcnRfY29ybmVyLC5odEZpbHRlcnNDb25kaXRpb25zTWVudSAuaHRfY2xvbmVfYm90dG9tX2lubGluZV9zdGFydF9jb3JuZXJ7ZGlzcGxheTpub25lfS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZS5odENvcmV7Ym9yZGVyOjFweCBzb2xpZCAjYmJi''@;'; put 'put ''O2JvcmRlci1ib3R0b20td2lkdGg6MnB4O2JvcmRlci1yaWdodC13aWR0aDoycHh9Lmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IC53dEJvcmRlcnt2aXNpYmlsaXR5OmhpZGRlbn0uaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGR7YmFja2dyb3VuZDojZmZmO2JvcmRl''@;'; put 'put ''ci13aWR0aDowO3BhZGRpbmc6NHB4IDZweCAwO2N1cnNvcjpwb2ludGVyO292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1vdmVyZmxvdzplbGxpcHNpc30uaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQ6Zmlyc3QtY2hpbGR7Ym9yZGVyLXRv''@;'; put 'put ''cC13aWR0aDowO2JvcmRlci1yaWdodC13aWR0aDowO2JvcmRlci1ib3R0b20td2lkdGg6MDtib3JkZXItbGVmdC13aWR0aDowfVtkaXI9cnRsXS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZDpmaXJzdC1jaGlsZHtib3JkZXItbGVmdC13aWR0aDowO2JvcmRlci1y''@;'; put 'put ''aWdodC13aWR0aDowfS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5odERpbW1lZHtmb250LXN0eWxlOm5vcm1hbDtjb2xvcjojMzIzMjMyfS5odEZpbHRlcnNDb25kaXRpb25zTWVudSB0YWJsZSB0Ym9keSB0ciB0ZC5jdXJyZW50e2JhY2tncm91bmQ6I2U5ZTll''@;'; put 'put ''OX0uaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHRTZXBhcmF0b3J7Ym9yZGVyLXRvcDoxcHggc29saWQgI2U2ZTZlNjtoZWlnaHQ6MDtwYWRkaW5nOjB9Lmh0RmlsdGVyc0NvbmRpdGlvbnNNZW51IHRhYmxlIHRib2R5IHRyIHRkLmh0RGlzYWJsZWR7Y29sb3I6''@;'; put 'put ''Izk5OX0uaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQuaHREaXNhYmxlZDpob3ZlcntiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6Izk5OTtjdXJzb3I6ZGVmYXVsdH0uaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQgLmh0SXRlbVdyYXBwZXJ7''@;'; put 'put ''bWFyZ2luLWxlZnQ6MTBweDttYXJnaW4tcmlnaHQ6MTBweH0uaHRGaWx0ZXJzQ29uZGl0aW9uc01lbnUgdGFibGUgdGJvZHkgdHIgdGQgZGl2IHNwYW4uc2VsZWN0ZWR7bWFyZ2luLXRvcDotMnB4O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6NHB4fS5odEZpbHRlcnNDb25kaXRpb25zTWVudSAu''@;'; put 'put ''aHRfbWFzdGVyIC53dEhvbGRlcntvdmVyZmxvdzpoaWRkZW59LmhhbmRzb250YWJsZSAuaHRNZW51RmlsdGVyaW5ne2JvcmRlci1ib3R0b206MXB4IGRvdHRlZCAjY2NjO2hlaWdodDoxMzVweDtvdmVyZmxvdzpoaWRkZW59LmhhbmRzb250YWJsZSAuaHRfbWFzdGVyIHRhYmxlIHRkLmh0Q3Vz''@;'; put 'put ''dG9tTWVudVJlbmRlcmVye2JhY2tncm91bmQtY29sb3I6I2ZmZjtjdXJzb3I6YXV0b30uaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNNZW51TGFiZWx7Zm9udC1zaXplOi43NWVtfS5oYW5kc29udGFibGUgLmh0RmlsdGVyc01lbnVBY3Rpb25CYXJ7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZy10''@;'; put 'put ''b3A6MTBweDtwYWRkaW5nLWJvdHRvbTozcHh9LmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzTWVudUNvbmRpdGlvbi5ib3JkZXJ7Ym9yZGVyLWJvdHRvbToxcHggZG90dGVkICNjY2MhaW1wb3J0YW50fS5oYW5kc29udGFibGUgLmh0RmlsdGVyc01lbnVDb25kaXRpb24gLmh0VUlJbnB1dHtwYWRk''@;'; put 'put ''aW5nOjAgMCA1cHh9LmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzTWVudVZhbHVle2JvcmRlci1ib3R0b206MXB4IGRvdHRlZCAjY2NjIWltcG9ydGFudH0uaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNNZW51VmFsdWUgLmh0VUlNdWx0aXBsZVNlbGVjdFNlYXJjaHtwYWRkaW5nOjB9LmhhbmRzb250''@;'; put 'put ''YWJsZSAuaHRGaWx0ZXJzTWVudUNvbmRpdGlvbiAuaHRVSUlucHV0IGlucHV0LC5oYW5kc29udGFibGUgLmh0RmlsdGVyc01lbnVWYWx1ZSAuaHRVSU11bHRpcGxlU2VsZWN0U2VhcmNoIGlucHV0e2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOi43NWVtO3BhZGRpbmc6NHB4O2JveC1z''@;'; put 'put ''aXppbmc6Ym9yZGVyLWJveDt3aWR0aDoxMDAlfS5odFVJTXVsdGlwbGVTZWxlY3QgLmh0X21hc3RlciAud3RIb2xkZXJ7b3ZlcmZsb3cteTpzY3JvbGx9LmhhbmRzb250YWJsZSAuaHRGaWx0ZXJzQWN0aXZlIC5jaGFuZ2VUeXBle2JvcmRlcjoxcHggc29saWQgIzUwOTI3Mjtjb2xvcjojMTg4''@;'; put 'put ''MDRlO2JhY2tncm91bmQtY29sb3I6I2QyZTBkOX0uaGFuZHNvbnRhYmxlIC5odFVJU2VsZWN0QWxse21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjEwcHh9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuaHRVSVNlbGVjdEFsbHttYXJnaW4tcmlnaHQ6MDttYXJnaW4tbGVmdDoxMHB4fS5oYW5k''@;'; put 'put ''c29udGFibGUgLmh0VUlDbGVhckFsbCwuaGFuZHNvbnRhYmxlIC5odFVJU2VsZWN0QWxse2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5oYW5kc29udGFibGUgLmh0VUlDbGVhckFsbCBhLC5oYW5kc29udGFibGUgLmh0VUlTZWxlY3RBbGwgYXtmb250LXNpemU6Ljc1ZW19LmhhbmRzb250YWJsZSAu''@;'; put 'put ''aHRVSVNlbGVjdGlvbkNvbnRyb2xze3RleHQtYWxpZ246cmlnaHR9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuaHRVSVNlbGVjdGlvbkNvbnRyb2xze3RleHQtYWxpZ246bGVmdH0uaGFuZHNvbnRhYmxlIC5odENoZWNrYm94UmVuZGVyZXJJbnB1dHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJn''@;'; put 'put ''aW46MCA1cHggMCAwO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtoZWlnaHQ6MWVtfVtkaXI9cnRsXS5oYW5kc29udGFibGUgLmh0Q2hlY2tib3hSZW5kZXJlcklucHV0e21hcmdpbi1sZWZ0OjVweDttYXJnaW4tcmlnaHQ6MH0uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXR7cGFkZGluZzozcHggMCA3''@;'; put 'put ''cHg7cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXJ9LmhhbmRzb250YWJsZSAuaHRVSUlucHV0IGlucHV0e2JvcmRlci1yYWRpdXM6MnB4O2JvcmRlcjoxcHggc29saWQgI2QyZDFkMX0uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXRJY29ue3Bvc2l0aW9uOmFic29sdXRlfS5oYW5k''@;'; put 'put ''c29udGFibGUgLmh0VUlJbnB1dC5odFVJQnV0dG9ue2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5oYW5kc29udGFibGUgLmh0VUlJbnB1dC5odFVJQnV0dG9uIGlucHV0e2JhY2tncm91bmQtY29sb3I6I2VlZTtjb2xvcjojMDAwO2N1cnNvcjpwb2ludGVyO2ZvbnQtZmFt''@;'; put 'put ''aWx5OmluaGVyaXQ7Zm9udC1zaXplOi43NWVtO2ZvbnQtd2VpZ2h0OjcwMDtoZWlnaHQ6MTlweDttaW4td2lkdGg6NjRweH0uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXQuaHRVSUJ1dHRvbiBpbnB1dDpob3Zlcntib3JkZXItY29sb3I6I2I5YjliOX0uaGFuZHNvbnRhYmxlIC5odFVJSW5wdXQu''@;'; put 'put ''aHRVSUJ1dHRvbk9Le21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OjEwcHh9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuaHRVSUlucHV0Lmh0VUlCdXR0b25PS3ttYXJnaW4tcmlnaHQ6MDttYXJnaW4tbGVmdDoxMHB4fS5oYW5kc29udGFibGUgLmh0VUlJbnB1dC5odFVJQnV0dG9uT0sgaW5w''@;'; put 'put ''dXR7YmFja2dyb3VuZC1jb2xvcjojMGY5ZDU4O2JvcmRlci1jb2xvcjojMTg4MDRlO2NvbG9yOiNmZmZ9LmhhbmRzb250YWJsZSAuaHRVSUlucHV0Lmh0VUlCdXR0b25PSyBpbnB1dDpmb2N1cy12aXNpYmxle2JhY2tncm91bmQtY29sb3I6IzkyZGQ4ZDtib3JkZXItY29sb3I6IzdjYjg3ODtj''@;'; put 'put ''b2xvcjojMDAwfS5oYW5kc29udGFibGUgLmh0VUlJbnB1dC5odFVJQnV0dG9uT0sgaW5wdXQ6aG92ZXJ7Ym9yZGVyLWNvbG9yOiMxYTZmNDZ9LmhhbmRzb250YWJsZSAuaHRVSVNlbGVjdHtjdXJzb3I6cG9pbnRlcjttYXJnaW4tYm90dG9tOjdweDtwb3NpdGlvbjpyZWxhdGl2ZX0uaGFuZHNv''@;'; put 'put ''bnRhYmxlIC5odFVJU2VsZWN0Q2FwdGlvbntiYWNrZ3JvdW5kLWNvbG9yOiNlOGU4ZTg7Ym9yZGVyLXJhZGl1czoycHg7Ym9yZGVyOjFweCBzb2xpZCAjZDJkMWQxO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOi43NWVtO2ZvbnQtd2VpZ2h0OjcwMDtwYWRkaW5nOjNweCAyMHB4IDNw''@;'; put 'put ''eCAxMHB4O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbn0uaGFuZHNvbnRhYmxlIC5odFVJU2VsZWN0Q2FwdGlvbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNlOGU4ZTg7Ym9yZGVyOjFweCBzb2xpZCAjYjliOWI5fS5oYW5kc29udGFi''@;'; put 'put ''bGUgLmh0VUlTZWxlY3REcm9wZG93bjphZnRlcntjb250ZW50OiJcMjViMiI7Zm9udC1zaXplOjdweDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoxMHB4O3RvcDowfS5oYW5kc29udGFibGUgLmh0VUlTZWxlY3REcm9wZG93bjpiZWZvcmV7Y29udGVudDoiXDI1YmMiO2ZvbnQtc2l6ZTo3cHg7''@;'; put 'put ''cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MTBweDt0b3A6OHB4fS5oYW5kc29udGFibGUgLmh0VUlNdWx0aXBsZVNlbGVjdCAuaGFuZHNvbnRhYmxlIC5odENvcmV7Ym9yZGVyOm5vbmV9LmhhbmRzb250YWJsZSAuaHRVSU11bHRpcGxlU2VsZWN0IC5oYW5kc29udGFibGUgLmh0Q29yZSB0ZDpo''@;'; put 'put ''b3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjV9LmhhbmRzb250YWJsZSAuaHRVSU11bHRpcGxlU2VsZWN0U2VhcmNoIGlucHV0e2JvcmRlci1yYWRpdXM6MnB4O2JvcmRlcjoxcHggc29saWQgI2QyZDFkMTtwYWRkaW5nOjNweH0uaGFuZHNvbnRhYmxlIC5odFVJUmFkaW97ZGlzcGxheTpp''@;'; put 'put ''bmxpbmUtYmxvY2s7bWFyZ2luLWxlZnQ6MDttYXJnaW4tcmlnaHQ6NXB4O2hlaWdodDoxMDAlfVtkaXI9cnRsXS5oYW5kc29udGFibGUgLmh0VUlSYWRpb3ttYXJnaW4tcmlnaHQ6MDttYXJnaW4tbGVmdDo1cHh9LmhhbmRzb250YWJsZSAuaHRVSVJhZGlvOmxhc3QtY2hpbGR7bWFyZ2luLXJp''@;'; put 'put ''Z2h0OjB9LmhhbmRzb250YWJsZSAuaHRVSVJhZGlvPmlucHV0W3R5cGU9cmFkaW9de21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0Oi41ZXh9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSAuaHRVSVJhZGlvPmlucHV0W3R5cGU9cmFkaW9de21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0Oi41ZXh9''@;'; put 'put ''LmhhbmRzb250YWJsZSAuaHRVSVJhZGlvIGxhYmVse3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uaGFuZHNvbnRhYmxlIC5odEZpbHRlcnNNZW51T3BlcmF0b3Jze3BhZGRpbmctYm90dG9tOjVweH0uaGFuZHNvbnRhYmxlIHRoLmJlZm9yZUhpZGRlbkNvbHVtbntwb3NpdGlvbjpyZWxhdGl2ZX0u''@;'; put 'put ''aGFuZHNvbnRhYmxlIHRoLmJlZm9yZUhpZGRlbkNvbHVtbjphZnRlciwuaGFuZHNvbnRhYmxlIHRoLmFmdGVySGlkZGVuQ29sdW1uOmJlZm9yZXtjb2xvcjojYmJiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7Zm9udC1zaXplOjVwdDt0cmFuc2Zvcm06dHJhbnNsYXRlWSgtNTAlKX0uaGFu''@;'; put 'put ''ZHNvbnRhYmxlIHRoLmFmdGVySGlkZGVuQ29sdW1ue3Bvc2l0aW9uOnJlbGF0aXZlfS5oYW5kc29udGFibGVbZGlyPWx0cl0gdGguYWZ0ZXJIaWRkZW5Db2x1bW4gZGl2Lmh0TGVmdHttYXJnaW4tbGVmdDoxMHB4fS5oYW5kc29udGFibGVbZGlyPWx0cl0gdGguYmVmb3JlSGlkZGVuQ29sdW1u''@;'; put 'put ''IGRpdi5odFJpZ2h0LC5oYW5kc29udGFibGVbZGlyPXJ0bF0gdGguYWZ0ZXJIaWRkZW5Db2x1bW4gZGl2Lmh0UmlnaHR7bWFyZ2luLXJpZ2h0OjEwcHh9LmhhbmRzb250YWJsZVtkaXI9cnRsXSB0aC5iZWZvcmVIaWRkZW5Db2x1bW4gZGl2Lmh0TGVmdHttYXJnaW4tbGVmdDoxMHB4fS5oYW5k''@;'; put 'put ''c29udGFibGUgdGguYmVmb3JlSGlkZGVuQ29sdW1uOmFmdGVye3JpZ2h0OjFweDtjb250ZW50OiJcMjVjMCJ9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSB0aC5iZWZvcmVIaWRkZW5Db2x1bW46YWZ0ZXJ7cmlnaHQ6aW5pdGlhbDtsZWZ0OjFweDtjb250ZW50OiJcMjViNiJ9LmhhbmRzb250YWJs''@;'; put 'put ''ZSB0aC5hZnRlckhpZGRlbkNvbHVtbjpiZWZvcmV7bGVmdDoxcHg7Y29udGVudDoiXDI1YjYifVtkaXI9cnRsXS5oYW5kc29udGFibGUgdGguYWZ0ZXJIaWRkZW5Db2x1bW46YmVmb3Jle3JpZ2h0OjFweDtsZWZ0OmluaXRpYWw7Y29udGVudDoiXDI1YzAifS8qIQogKiBIYW5kc29udGFibGUg''@;'; put 'put ''SGlkZGVuUm93cwogKi8uaGFuZHNvbnRhYmxlIHRoLmJlZm9yZUhpZGRlblJvdzpiZWZvcmUsLmhhbmRzb250YWJsZSB0aC5hZnRlckhpZGRlblJvdzphZnRlcntjb2xvcjojYmJiO2ZvbnQtc2l6ZTo2cHQ7bGluZS1oZWlnaHQ6NnB0O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MnB4fS5oYW5k''@;'; put 'put ''c29udGFibGUgdGguYmVmb3JlSGlkZGVuUm93LC5oYW5kc29udGFibGUgdGguYWZ0ZXJIaWRkZW5Sb3d7cG9zaXRpb246cmVsYXRpdmV9LmhhbmRzb250YWJsZSB0aC5iZWZvcmVIaWRkZW5Sb3c6YmVmb3Jle2NvbnRlbnQ6IlwyNWIyIjtib3R0b206MnB4fS5oYW5kc29udGFibGUgdGguYWZ0''@;'; put 'put ''ZXJIaWRkZW5Sb3c6YWZ0ZXJ7Y29udGVudDoiXDI1YmMiO3RvcDoycHh9LmhhbmRzb250YWJsZS5odF9fc2VsZWN0aW9uLS1yb3dzIHRib2R5IHRoLmJlZm9yZUhpZGRlblJvdy5odF9faGlnaGxpZ2h0OmJlZm9yZSwuaGFuZHNvbnRhYmxlLmh0X19zZWxlY3Rpb24tLXJvd3MgdGJvZHkgdGgu''@;'; put 'put ''YWZ0ZXJIaWRkZW5Sb3cuaHRfX2hpZ2hsaWdodDphZnRlcntjb2xvcjojZWVlfS5oYW5kc29udGFibGUgdGQuYWZ0ZXJIaWRkZW5Sb3cuZmlyc3RWaXNpYmxlUm93LC5oYW5kc29udGFibGUgdGguYWZ0ZXJIaWRkZW5Sb3cuZmlyc3RWaXNpYmxlUm93e2JvcmRlci10b3A6MXB4IHNvbGlkICND''@;'; put 'put ''Q0N9Lmh0Um93SGVhZGVycyAuaHRfbWFzdGVyLmlubmVyQm9yZGVySW5saW5lU3RhcnR+Lmh0X2Nsb25lX3RvcF9pbmxpbmVfc3RhcnRfY29ybmVyIHRoOm50aC1jaGlsZCgyKSwuaHRSb3dIZWFkZXJzIC5odF9tYXN0ZXIuaW5uZXJCb3JkZXJJbmxpbmVTdGFydH4uaHRfY2xvbmVfaW5saW5l''@;'; put 'put ''X3N0YXJ0IHRkOmZpcnN0LW9mLXR5cGV7Ym9yZGVyLWxlZnQ6MCBub25lfS5oYW5kc29udGFibGUuaHRfX21hbnVhbENvbHVtbk1vdmUuYWZ0ZXItc2VsZWN0aW9uLS1jb2x1bW5zIHRoZWFkIHRoLmh0X19oaWdobGlnaHR7Y3Vyc29yOm1vdmU7Y3Vyc29yOmdyYWJ9LmhhbmRzb250YWJsZS5o''@;'; put 'put ''dF9fbWFudWFsQ29sdW1uTW92ZS5vbi1tb3ZpbmctLWNvbHVtbnMgKiwuaGFuZHNvbnRhYmxlLmh0X19tYW51YWxDb2x1bW5Nb3ZlLm9uLW1vdmluZy0tY29sdW1ucyB0aGVhZCB0aC5odF9faGlnaGxpZ2h0e2N1cnNvcjptb3ZlO2N1cnNvcjpncmFiYmluZ30uaGFuZHNvbnRhYmxlLmh0X19t''@;'; put 'put ''YW51YWxDb2x1bW5Nb3ZlLm9uLW1vdmluZy0tY29sdW1ucyAubWFudWFsQ29sdW1uUmVzaXplcntkaXNwbGF5Om5vbmV9LmhhbmRzb250YWJsZSAuaHRfX21hbnVhbENvbHVtbk1vdmUtLWd1aWRlbGluZSwuaGFuZHNvbnRhYmxlIC5odF9fbWFudWFsQ29sdW1uTW92ZS0tYmFja2xpZ2h0e3Bv''@;'; put 'put ''c2l0aW9uOmFic29sdXRlO2hlaWdodDoxMDAlO2Rpc3BsYXk6bm9uZX0uaGFuZHNvbnRhYmxlIC5odF9fbWFudWFsQ29sdW1uTW92ZS0tZ3VpZGVsaW5le2JhY2tncm91bmQ6Izc1NzU3NTt3aWR0aDoycHg7dG9wOjA7bWFyZ2luLWlubGluZS1zdGFydDotMXB4O21hcmdpbi1pbmxpbmUtZW5k''@;'; put 'put ''OjA7ei1pbmRleDoyMDV9LmhhbmRzb250YWJsZSAuaHRfX21hbnVhbENvbHVtbk1vdmUtLWJhY2tsaWdodHtiYWNrZ3JvdW5kOiMzNDM0MzQ7YmFja2dyb3VuZDojMzQzNDM0NDA7ZGlzcGxheTpub25lO3otaW5kZXg6MjA1O3BvaW50ZXItZXZlbnRzOm5vbmV9LmhhbmRzb250YWJsZS5vbi1t''@;'; put 'put ''b3ZpbmctLWNvbHVtbnMuc2hvdy11aSAuaHRfX21hbnVhbENvbHVtbk1vdmUtLWd1aWRlbGluZSwuaGFuZHNvbnRhYmxlLm9uLW1vdmluZy0tY29sdW1ucyAuaHRfX21hbnVhbENvbHVtbk1vdmUtLWJhY2tsaWdodHtkaXNwbGF5OmJsb2NrfS5oYW5kc29udGFibGUuaHRfX21hbnVhbFJvd01v''@;'; put 'put ''dmUuYWZ0ZXItc2VsZWN0aW9uLS1yb3dzIHRib2R5IHRoLmh0X19oaWdobGlnaHR7Y3Vyc29yOm1vdmU7Y3Vyc29yOmdyYWJ9LmhhbmRzb250YWJsZS5odF9fbWFudWFsUm93TW92ZS5vbi1tb3ZpbmctLXJvd3MgKiwuaGFuZHNvbnRhYmxlLmh0X19tYW51YWxSb3dNb3ZlLm9uLW1vdmluZy0t''@;'; put 'put ''cm93cyB0Ym9keSB0aC5odF9faGlnaGxpZ2h0e2N1cnNvcjptb3ZlO2N1cnNvcjpncmFiYmluZ30uaGFuZHNvbnRhYmxlLmh0X19tYW51YWxSb3dNb3ZlLm9uLW1vdmluZy0tcm93cyAubWFudWFsUm93UmVzaXplcntkaXNwbGF5Om5vbmV9LmhhbmRzb250YWJsZSAuaHRfX21hbnVhbFJvd01v''@;'; put 'put ''dmUtLWd1aWRlbGluZSwuaGFuZHNvbnRhYmxlIC5odF9fbWFudWFsUm93TW92ZS0tYmFja2xpZ2h0e3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjEwMCU7ZGlzcGxheTpub25lfS5oYW5kc29udGFibGUgLmh0X19tYW51YWxSb3dNb3ZlLS1ndWlkZWxpbmV7YmFja2dyb3VuZDojNzU3NTc1O2hl''@;'; put 'put ''aWdodDoycHg7bGVmdDowO21hcmdpbi10b3A6LTFweDt6LWluZGV4OjIwNX0uaGFuZHNvbnRhYmxlIC5odF9fbWFudWFsUm93TW92ZS0tYmFja2xpZ2h0e2JhY2tncm91bmQ6IzM0MzQzNDtiYWNrZ3JvdW5kOiMzNDM0MzQ0MDtkaXNwbGF5Om5vbmU7ei1pbmRleDoyMDU7cG9pbnRlci1ldmVu''@;'; put 'put ''dHM6bm9uZX0uaGFuZHNvbnRhYmxlLm9uLW1vdmluZy0tcm93cy5zaG93LXVpIC5odF9fbWFudWFsUm93TW92ZS0tZ3VpZGVsaW5lLC5oYW5kc29udGFibGUub24tbW92aW5nLS1yb3dzIC5odF9fbWFudWFsUm93TW92ZS0tYmFja2xpZ2h0e2Rpc3BsYXk6YmxvY2t9LmhhbmRzb250YWJsZSB0''@;'; put 'put ''Ym9keSB0ZFtyb3dzcGFuXVtjbGFzcyo9YXJlYV1bY2xhc3MqPWhpZ2hsaWdodF06bm90KFtjbGFzcyo9ZnVsbHlTZWxlY3RlZE1lcmdlZENlbGxdKTpiZWZvcmV7b3BhY2l0eTowfS5oYW5kc29udGFibGUgdGJvZHkgdGRbcm93c3Bhbl1bY2xhc3MqPWFyZWFdW2NsYXNzKj1oaWdobGlnaHRd''@;'; put 'put ''W2NsYXNzKj1mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbC1tdWx0aXBsZV06YmVmb3Jle29wYWNpdHk6LjF9LmhhbmRzb250YWJsZSB0Ym9keSB0ZFtyb3dzcGFuXVtjbGFzcyo9YXJlYV1bY2xhc3MqPWhpZ2hsaWdodF1bY2xhc3MqPWZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsLTBdOmJlZm9yZXtv''@;'; put 'put ''cGFjaXR5Oi4xfS5oYW5kc29udGFibGUgdGJvZHkgdGRbcm93c3Bhbl1bY2xhc3MqPWFyZWFdW2NsYXNzKj1oaWdobGlnaHRdW2NsYXNzKj1mdWxseVNlbGVjdGVkTWVyZ2VkQ2VsbC0xXTpiZWZvcmV7b3BhY2l0eTouMn0uaGFuZHNvbnRhYmxlIHRib2R5IHRkW3Jvd3NwYW5dW2NsYXNzKj1h''@;'; put 'put ''cmVhXVtjbGFzcyo9aGlnaGxpZ2h0XVtjbGFzcyo9ZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwtMl06YmVmb3Jle29wYWNpdHk6LjI3fS5oYW5kc29udGFibGUgdGJvZHkgdGRbcm93c3Bhbl1bY2xhc3MqPWFyZWFdW2NsYXNzKj1oaWdobGlnaHRdW2NsYXNzKj1mdWxseVNlbGVjdGVkTWVyZ2Vk''@;'; put 'put ''Q2VsbC0zXTpiZWZvcmV7b3BhY2l0eTouMzV9LmhhbmRzb250YWJsZSB0Ym9keSB0ZFtyb3dzcGFuXVtjbGFzcyo9YXJlYV1bY2xhc3MqPWhpZ2hsaWdodF1bY2xhc3MqPWZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsLTRdOmJlZm9yZXtvcGFjaXR5Oi40MX0uaGFuZHNvbnRhYmxlIHRib2R5IHRk''@;'; put 'put ''W3Jvd3NwYW5dW2NsYXNzKj1hcmVhXVtjbGFzcyo9aGlnaGxpZ2h0XVtjbGFzcyo9ZnVsbHlTZWxlY3RlZE1lcmdlZENlbGwtNV06YmVmb3Jle29wYWNpdHk6LjQ3fS5oYW5kc29udGFibGUgdGJvZHkgdGRbcm93c3Bhbl1bY2xhc3MqPWFyZWFdW2NsYXNzKj1oaWdobGlnaHRdW2NsYXNzKj1m''@;'; put 'put ''dWxseVNlbGVjdGVkTWVyZ2VkQ2VsbC02XTpiZWZvcmV7b3BhY2l0eTouNTR9LmhhbmRzb250YWJsZSB0Ym9keSB0ZFtyb3dzcGFuXVtjbGFzcyo9YXJlYV1bY2xhc3MqPWhpZ2hsaWdodF1bY2xhc3MqPWZ1bGx5U2VsZWN0ZWRNZXJnZWRDZWxsLTddOmJlZm9yZXtvcGFjaXR5Oi41OH0uaGFu''@;'; put 'put ''ZHNvbnRhYmxlW2Rpcj1sdHJdIGRpdi5odFJpZ2h0IHNwYW5bY2xhc3MqPXNvcnQtXXttYXJnaW4tcmlnaHQ6MTVweDttYXJnaW4tbGVmdDotMTVweH0uaGFuZHNvbnRhYmxlW2Rpcj1ydGxdIGRpdi5odExlZnQgc3BhbltjbGFzcyo9c29ydC1de21hcmdpbi1sZWZ0OjE1cHg7bWFyZ2luLXJp''@;'; put 'put ''Z2h0Oi0xNXB4fS5oYW5kc29udGFibGVbZGlyPWx0cl0gZGl2Lmh0UmlnaHQgc3BhbltjbGFzcyo9c29ydC1dOm9ubHktY2hpbGR7bWFyZ2luLXJpZ2h0OjIwcHg7bWFyZ2luLWxlZnQ6LTIwcHh9LmhhbmRzb250YWJsZVtkaXI9cnRsXSBkaXYuaHRMZWZ0IHNwYW5bY2xhc3MqPXNvcnQtXTpv''@;'; put 'put ''bmx5LWNoaWxke21hcmdpbi1sZWZ0OjIwcHg7bWFyZ2luLXJpZ2h0Oi0yMHB4fS5oYW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZzphZnRlcnt0b3A6NTAlO21hcmdpbi10b3A6LTJweDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDotMTVweDtsZWZ0OnVuc2V0O3BhZGRp''@;'; put 'put ''bmctbGVmdDo1cHg7cGFkZGluZy1yaWdodDp1bnNldDtmb250LXNpemU6OHB4O2hlaWdodDo4cHg7bGluZS1oZWlnaHQ6MS4xfVtkaXI9cnRsXS5oYW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZzphZnRlcntsZWZ0Oi0xNXB4O3JpZ2h0OnVuc2V0O3BhZGRpbmctcmln''@;'; put 'put ''aHQ6NXB4O3BhZGRpbmctbGVmdDp1bnNldH0uaGFuZHNvbnRhYmxlIHNwYW4uY29sSGVhZGVyLmNvbHVtblNvcnRpbmdbY2xhc3NePXNvcnQtXTphZnRlciwuaGFuZHNvbnRhYmxlIHNwYW4uY29sSGVhZGVyLmNvbHVtblNvcnRpbmdbY2xhc3MqPSIgc29ydC0iXTphZnRlcntjb250ZW50OiIr''@;'; put 'put ''In0uaGFuZHNvbnRhYmxlIHNwYW4uY29sSGVhZGVyLmNvbHVtblNvcnRpbmcuc29ydC0xOmFmdGVye2NvbnRlbnQ6IjEifS5oYW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZy5zb3J0LTI6YWZ0ZXJ7Y29udGVudDoiMiJ9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRl''@;'; put 'put ''ci5jb2x1bW5Tb3J0aW5nLnNvcnQtMzphZnRlcntjb250ZW50OiIzIn0uaGFuZHNvbnRhYmxlIHNwYW4uY29sSGVhZGVyLmNvbHVtblNvcnRpbmcuc29ydC00OmFmdGVye2NvbnRlbnQ6IjQifS5oYW5kc29udGFibGUgc3Bhbi5jb2xIZWFkZXIuY29sdW1uU29ydGluZy5zb3J0LTU6YWZ0ZXJ7''@;'; put 'put ''Y29udGVudDoiNSJ9LmhhbmRzb250YWJsZSBzcGFuLmNvbEhlYWRlci5jb2x1bW5Tb3J0aW5nLnNvcnQtNjphZnRlcntjb250ZW50OiI2In0uaGFuZHNvbnRhYmxlIHNwYW4uY29sSGVhZGVyLmNvbHVtblNvcnRpbmcuc29ydC03OmFmdGVye2NvbnRlbnQ6IjcifS5odEdob3N0VGFibGUgdGgg''@;'; put 'put ''ZGl2IGJ1dHRvbi5jaGFuZ2VUeXBlK3NwYW4uY29sSGVhZGVyLmNvbHVtblNvcnRpbmc6bm90KC5pbmRpY2F0b3JEaXNhYmxlZCl7cGFkZGluZy1yaWdodDo1cHh9LmhhbmRzb250YWJsZSB0aGVhZCB0aC5oaWRkZW5IZWFkZXI6bm90KDpmaXJzdC1vZi10eXBlKXtkaXNwbGF5Om5vbmV9dGhl''@;'; put 'put ''YWQgdGguaGlkZGVuSGVhZGVyVGV4dCAuY29sSGVhZGVye29wYWNpdHk6MH0uaGFuZHNvbnRhYmxlIHRoLmh0X25lc3RpbmdMZXZlbHN7dGV4dC1hbGlnbjpsZWZ0O3BhZGRpbmctbGVmdDo3cHh9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSB0aC5odF9uZXN0aW5nTGV2ZWxze3RleHQtYWxpZ246''@;'; put 'put ''cmlnaHQ7cGFkZGluZy1yaWdodDo3cHh9LmhhbmRzb250YWJsZSB0aCBkaXYuaHRfbmVzdGluZ0xldmVsc3tkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjExcHg7cmlnaHQ6dW5zZXR9W2Rpcj1ydGxdLmhhbmRzb250YWJsZSB0aCBkaXYuaHRfbmVzdGluZ0xl''@;'; put 'put ''dmVsc3tyaWdodDoxMXB4O2xlZnQ6dW5zZXR9LmhhbmRzb250YWJsZS5pbm5lckJvcmRlcklubGluZVN0YXJ0IHRoIGRpdi5odF9uZXN0aW5nTGV2ZWxzLC5oYW5kc29udGFibGUuaW5uZXJCb3JkZXJJbmxpbmVTdGFydH4uaGFuZHNvbnRhYmxlIHRoIGRpdi5odF9uZXN0aW5nTGV2ZWxze3Jp''@;'; put 'put ''Z2h0OjEwcHg7bGVmdDp1bnNldH1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlLmlubmVyQm9yZGVySW5saW5lU3RhcnQgdGggZGl2Lmh0X25lc3RpbmdMZXZlbHMsW2Rpcj1ydGxdLmhhbmRzb250YWJsZS5pbm5lckJvcmRlcklubGluZVN0YXJ0fi5oYW5kc29udGFibGUgdGggZGl2Lmh0X25lc3Rp''@;'; put 'put ''bmdMZXZlbHN7bGVmdDoxMHB4O3JpZ2h0OnVuc2V0fS5oYW5kc29udGFibGUgdGggc3Bhbi5odF9uZXN0aW5nTGV2ZWx7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmhhbmRzb250YWJsZSB0aCBzcGFuLmh0X25lc3RpbmdMZXZlbF9lbXB0eXtkaXNwbGF5OmlubGluZS1ibG9jazt3aWR0aDoxMHB4''@;'; put 'put ''O2hlaWdodDoxcHg7ZmxvYXQ6bGVmdH1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlIHRoIHNwYW4uaHRfbmVzdGluZ0xldmVsX2VtcHR5e2Zsb2F0OnJpZ2h0fS5oYW5kc29udGFibGUgdGggc3Bhbi5odF9uZXN0aW5nTGV2ZWw6YWZ0ZXJ7Y29udGVudDoiXDI1MTAiO2ZvbnQtc2l6ZTo5cHg7ZGlz''@;'; put 'put ''cGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246cmVsYXRpdmU7Ym90dG9tOjNweH0uaGFuZHNvbnRhYmxlIHRoIGRpdi5odF9uZXN0aW5nQnV0dG9ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0Oi0ycHg7bGVmdDp1bnNldDtjdXJzb3I6cG9pbnRlcn1bZGly''@;'; put 'put ''PXJ0bF0uaGFuZHNvbnRhYmxlIHRoIGRpdi5odF9uZXN0aW5nQnV0dG9ue2xlZnQ6LTJweDtyaWdodDp1bnNldH0uaGFuZHNvbnRhYmxlIHRoIGRpdi5odF9uZXN0aW5nQnV0dG9uLmh0X25lc3RpbmdFeHBhbmQ6YWZ0ZXJ7Y29udGVudDoiKyJ9LmhhbmRzb250YWJsZSB0aCBkaXYuaHRfbmVz''@;'; put 'put ''dGluZ0J1dHRvbi5odF9uZXN0aW5nQ29sbGFwc2U6YWZ0ZXJ7Y29udGVudDoiLSJ9LmhhbmRzb250YWJsZS5pbm5lckJvcmRlcklubGluZVN0YXJ0IHRoIGRpdi5odF9uZXN0aW5nQnV0dG9uLC5oYW5kc29udGFibGUuaW5uZXJCb3JkZXJJbmxpbmVTdGFydH4uaGFuZHNvbnRhYmxlIHRoIGRp''@;'; put 'put ''di5odF9uZXN0aW5nQnV0dG9ue3JpZ2h0OjA7bGVmdDp1bnNldH1bZGlyPXJ0bF0uaGFuZHNvbnRhYmxlLmlubmVyQm9yZGVySW5saW5lU3RhcnQgdGggZGl2Lmh0X25lc3RpbmdCdXR0b24sW2Rpcj1ydGxdLmhhbmRzb250YWJsZS5pbm5lckJvcmRlcklubGluZVN0YXJ0fi5oYW5kc29udGFi''@;'; put 'put ''bGUgdGggZGl2Lmh0X25lc3RpbmdCdXR0b257bGVmdDowO3JpZ2h0OnVuc2V0fS8qIQogKiBQaWthZGF5CiAqIENvcHlyaWdodCDCqSAyMDE0IERhdmlkIEJ1c2hlbGwgfCBCU0QgJiBNSVQgbGljZW5zZSB8IGh0dHBzOi8vZGJ1c2hlbGwuY29tLwogKi8ucGlrYS1zaW5nbGV7ei1pbmRleDo5''@;'; put 'put ''OTk5O2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmU7Y29sb3I6IzMzMztiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JvcmRlci1ib3R0b20tY29sb3I6I2JiYjtmb250LWZhbWlseTpIZWx2ZXRpY2EgTmV1ZSxIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZn0u''@;'; put 'put ''cGlrYS1zaW5nbGU6YmVmb3JlLC5waWthLXNpbmdsZTphZnRlcntjb250ZW50OiIgIjtkaXNwbGF5OnRhYmxlfS5waWthLXNpbmdsZTphZnRlcntjbGVhcjpib3RofS5waWthLXNpbmdsZS5pcy1oaWRkZW57ZGlzcGxheTpub25lfS5waWthLXNpbmdsZS5pcy1ib3VuZHtwb3NpdGlvbjphYnNv''@;'; put 'put ''bHV0ZTtib3gtc2hhZG93OjAgNXB4IDE1cHggLTVweCAjMDAwMDAwODB9LnBpa2EtbGVuZGFye2Zsb2F0OmxlZnQ7d2lkdGg6MjQwcHg7bWFyZ2luOjhweH0ucGlrYS10aXRsZXtwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmNlbnRlcn0ucGlrYS1sYWJlbHtkaXNwbGF5OmlubGluZS1i''@;'; put 'put ''bG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4Ojk5OTk7b3ZlcmZsb3c6aGlkZGVuO21hcmdpbjowO3BhZGRpbmc6NXB4IDNweDtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoyMHB4O2ZvbnQtd2VpZ2h0OjcwMDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LnBpa2EtdGl0bGUgc2VsZWN0''@;'; put 'put ''e2N1cnNvcjpwb2ludGVyO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6OTk5ODttYXJnaW46MDtsZWZ0OjA7dG9wOjVweDtvcGFjaXR5OjB9LnBpa2EtcHJldiwucGlrYS1uZXh0e2Rpc3BsYXk6YmxvY2s7Y3Vyc29yOnBvaW50ZXI7cG9zaXRpb246cmVsYXRpdmU7b3V0bGluZTpub25lO2Jv''@;'; put 'put ''cmRlcjowO3BhZGRpbmc6MDt3aWR0aDoyMHB4O2hlaWdodDozMHB4O3RleHQtaW5kZW50OjIwcHg7d2hpdGUtc3BhY2U6bm93cmFwO292ZXJmbG93OmhpZGRlbjtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtcG9zaXRpb246Y2VudGVyIGNlbnRlcjtiYWNrZ3JvdW5k''@;'; put 'put ''LXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjc1JSA3NSU7b3BhY2l0eTouNX0ucGlrYS1wcmV2OmhvdmVyLC5waWthLW5leHQ6aG92ZXJ7b3BhY2l0eToxfS5waWthLXByZXYsLmlzLXJ0bCAucGlrYS1uZXh0e2Zsb2F0OmxlZnQ7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTpp''@;'; put 'put ''bWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCUUFBQUFlQ0FZQUFBQXNFajVyQUFBQVVrbEVRVlI0MnUzVk1Rb0FJQkFEUWY4UGdqK09EOWhHMkN0T05KQjJ5bVFrS2UwSGJ3QVAweHVjRGlRV0FSSVRJREVCRW5NZ01ROFM4K0FxQklsNmtLZ0hpWHFRcUFlSmVwQm8v''@;'; put 'put ''ejM4Si9VMHVBSGxhQmtCbDlJNEd3QUFBQUJKUlU1RXJrSmdnZz09KX0ucGlrYS1uZXh0LC5pcy1ydGwgLnBpa2EtcHJldntmbG9hdDpyaWdodDtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUJRQUFBQWVDQVlBQUFB''@;'; put 'put ''c0VqNXJBQUFBVTBsRVFWUjQydTNWT3dvQU1BZ0UwZHdmQW5OalUyNmJZa0JDRkd3ZmlMOVZWV29PK0JKNEdmM2d0c0VLS29GQk5UQ29DQVlWd2FBaUdOUUdNVUhNa2pHYmdqazJtSU9OdVhvMG5DOFhuQ2YxSlhnQXJWSVpBUWg1VEtZQUFBQUFTVVZPUks1Q1lJST0pfS5waWthLXByZXYuaXMt''@;'; put 'put ''ZGlzYWJsZWQsLnBpa2EtbmV4dC5pcy1kaXNhYmxlZHtjdXJzb3I6ZGVmYXVsdDtvcGFjaXR5Oi4yfS5waWthLXNlbGVjdHtkaXNwbGF5OmlubGluZS1ibG9ja30ucGlrYS10YWJsZXt3aWR0aDoxMDAlO2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowO2JvcmRlcjow''@;'; put 'put ''fS5waWthLXRhYmxlIHRoLC5waWthLXRhYmxlIHRke3dpZHRoOjE0LjI4NTcxNDI4NTcxNDI4NiU7cGFkZGluZzowfS5waWthLXRhYmxlIHRoe2NvbG9yOiM5OTk7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MjVweDtmb250LXdlaWdodDo3MDA7dGV4dC1hbGlnbjpjZW50ZXJ9LnBpa2Et''@;'; put 'put ''YnV0dG9ue2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94O291dGxpbmU6bm9uZTtib3JkZXI6MDttYXJnaW46MDt3aWR0aDoxMDAlO3BhZGRpbmc6NXB4O2NvbG9yOiM2NjY7Zm9udC1zaXplOjEycHg7''@;'; put 'put ''bGluZS1oZWlnaHQ6MTVweDt0ZXh0LWFsaWduOmNlbnRlcjtiYWNrZ3JvdW5kOiNmNWY1ZjU7aGVpZ2h0OmluaXRpYWx9LnBpa2Etd2Vla3tmb250LXNpemU6MTFweDtjb2xvcjojOTk5fS5pcy10b2RheSAucGlrYS1idXR0b257Y29sb3I6IzNhZjtmb250LXdlaWdodDo3MDB9LmlzLXNlbGVj''@;'; put 'put ''dGVkIC5waWthLWJ1dHRvbiwuaGFzLWV2ZW50IC5waWthLWJ1dHRvbntjb2xvcjojZmZmO2ZvbnQtd2VpZ2h0OjcwMDtiYWNrZ3JvdW5kOiMzYWY7Ym94LXNoYWRvdzppbnNldCAwIDFweCAzcHggIzE3OGZlNTtib3JkZXItcmFkaXVzOjNweH0uaGFzLWV2ZW50IC5waWthLWJ1dHRvbntiYWNr''@;'; put 'put ''Z3JvdW5kOiMwMDVkYTk7Ym94LXNoYWRvdzppbnNldCAwIDFweCAzcHggIzAwNzZjOX0uaXMtZGlzYWJsZWQgLnBpa2EtYnV0dG9uLC5pcy1pbnJhbmdlIC5waWthLWJ1dHRvbntiYWNrZ3JvdW5kOiNkNWU5Zjd9LmlzLXN0YXJ0cmFuZ2UgLnBpa2EtYnV0dG9ue2NvbG9yOiNmZmY7YmFja2dy''@;'; put 'put ''b3VuZDojNmNiMzFkO2JveC1zaGFkb3c6bm9uZTtib3JkZXItcmFkaXVzOjNweH0uaXMtZW5kcmFuZ2UgLnBpa2EtYnV0dG9ue2NvbG9yOiNmZmY7YmFja2dyb3VuZDojM2FmO2JveC1zaGFkb3c6bm9uZTtib3JkZXItcmFkaXVzOjNweH0uaXMtZGlzYWJsZWQgLnBpa2EtYnV0dG9ue3BvaW50''@;'; put 'put ''ZXItZXZlbnRzOm5vbmU7Y3Vyc29yOmRlZmF1bHQ7Y29sb3I6Izk5OTtvcGFjaXR5Oi4zfS5pcy1vdXRzaWRlLWN1cnJlbnQtbW9udGggLnBpa2EtYnV0dG9ue2NvbG9yOiM5OTk7b3BhY2l0eTouM30uaXMtc2VsZWN0aW9uLWRpc2FibGVke3BvaW50ZXItZXZlbnRzOm5vbmU7Y3Vyc29yOmRl''@;'; put 'put ''ZmF1bHR9LnBpa2EtYnV0dG9uOmhvdmVyLC5waWthLXJvdy5waWNrLXdob2xlLXdlZWs6aG92ZXIgLnBpa2EtYnV0dG9ue2NvbG9yOiNmZmY7YmFja2dyb3VuZDojZmY4MDAwO2JveC1zaGFkb3c6bm9uZTtib3JkZXItcmFkaXVzOjNweH0ucGlrYS10YWJsZSBhYmJye2JvcmRlci1ib3R0b206''@;'; put 'put ''bm9uZTtjdXJzb3I6aGVscH1jbHItaWNvbntkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MDtoZWlnaHQ6MTZweDt3aWR0aDoxNnB4O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtmaWxsOmN1cnJlbnRDb2xvcn1jbHItaWNvbiAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2V7c3Ryb2tlOmN1cnJl''@;'; put 'put ''bnRDb2xvcn1jbHItaWNvbi5pcy1ncmVlbixjbHItaWNvbi5pcy1zdWNjZXNze2ZpbGw6IzJlODUwMH1jbHItaWNvbi5pcy1ncmVlbiAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2UsY2xyLWljb24uaXMtc3VjY2VzcyAudHJhbnNwYXJlbnQtZmlsbC1zdHJva2V7c3Ryb2tlOiMyZTg1MDB9Y2xy''@;'; put 'put ''LWljb24uaXMtcmVkLGNsci1pY29uLmlzLWRhbmdlcixjbHItaWNvbi5pcy1lcnJvcntmaWxsOiNlMDIyMDB9Y2xyLWljb24uaXMtcmVkIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZSxjbHItaWNvbi5pcy1kYW5nZXIgLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tlLGNsci1pY29uLmlzLWVycm9y''@;'; put 'put ''IC50cmFuc3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6I2UwMjIwMH1jbHItaWNvbi5pcy13YXJuaW5ne2ZpbGw6I2MyN2IwMH1jbHItaWNvbi5pcy13YXJuaW5nIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6I2MyN2IwMH1jbHItaWNvbi5pcy1ibHVlLGNsci1pY29uLmlzLWlu''@;'; put 'put ''Zm97ZmlsbDojMDA3N2I4fWNsci1pY29uLmlzLWJsdWUgLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tlLGNsci1pY29uLmlzLWluZm8gLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tle3N0cm9rZTojMDA3N2I4fWNsci1pY29uLmlzLXdoaXRlLGNsci1pY29uLmlzLWludmVyc2V7ZmlsbDojZmZmfWNs''@;'; put 'put ''ci1pY29uLmlzLXdoaXRlIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZSxjbHItaWNvbi5pcy1pbnZlcnNlIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6I2ZmZn1jbHItaWNvbi5pcy1oaWdobGlnaHR7ZmlsbDojMDA3N2I4fWNsci1pY29uLmlzLWhpZ2hsaWdodCAudHJhbnNwYXJl''@;'; put 'put ''bnQtZmlsbC1zdHJva2V7c3Ryb2tlOiMwMDc3Yjh9Y2xyLWljb25bc2hhcGUkPSIgdXAiXSBzdmcsY2xyLWljb25bZGlyPXVwXSBzdmd7dHJhbnNmb3JtOnJvdGF0ZSgwKX1jbHItaWNvbltzaGFwZSQ9IiBkb3duIl0gc3ZnLGNsci1pY29uW2Rpcj1kb3duXSBzdmd7dHJhbnNmb3JtOnJvdGF0''@;'; put 'put ''ZSgxODBkZWcpfWNsci1pY29uW3NoYXBlJD0iIHJpZ2h0Il0gc3ZnLGNsci1pY29uW2Rpcj1yaWdodF0gc3Zne3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfWNsci1pY29uW3NoYXBlJD0iIGxlZnQiXSBzdmcsY2xyLWljb25bZGlyPWxlZnRdIHN2Z3t0cmFuc2Zvcm06cm90YXRlKDI3MGRlZyl9''@;'; put 'put ''Y2xyLWljb25bZmxpcD1ob3Jpem9udGFsXSBzdmd7dHJhbnNmb3JtOnNjYWxlKC0xKSByb3RhdGVYKDE4MGRlZyl9Y2xyLWljb25bZmxpcD12ZXJ0aWNhbF0gc3Zne3RyYW5zZm9ybTpzY2FsZSgtMSkgcm90YXRlWSgxODBkZWcpfWNsci1pY29uIC5jbHItaS1iYWRnZXtmaWxsOiNlMDIyMDB9''@;'; put 'put ''Y2xyLWljb24gLmNsci1pLWJhZGdlIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6I2UwMjIwMH1jbHItaWNvbj4qe2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7ZGlzcGxheTpibG9jaztwb2ludGVyLWV2ZW50czpub25lfWNsci1pY29uPnN2Z3t0cmFuc2l0aW9uOmluaGVyaXR9Y2xy''@;'; put 'put ''LWljb24+c3ZnIHRpdGxle2Rpc3BsYXk6bm9uZX1jbHItaWNvbiAuY2xyLWktc29saWQsY2xyLWljb24gLmNsci1pLXNvbGlkLS1iYWRnZWQsY2xyLWljb24gLmNsci1pLXNvbGlkLS1hbGVydGVke2Rpc3BsYXk6bm9uZX1jbHItaWNvbiAuY2xyLWktb3V0bGluZS0tYWxlcnRlZDpub3QoLmNs''@;'; put 'put ''ci1pLW91dGxpbmUpLGNsci1pY29uIC5jbHItaS1vdXRsaW5lLS1iYWRnZWQ6bm90KC5jbHItaS1vdXRsaW5lKXtkaXNwbGF5Om5vbmV9Y2xyLWljb25bY2xhc3MqPWhhcy1hbGVydF0gLmNhbi1hbGVydCAuY2xyLWktb3V0bGluZS0tYWxlcnRlZHtkaXNwbGF5OmJsb2NrfWNsci1pY29uW2Ns''@;'; put 'put ''YXNzKj1oYXMtYWxlcnRdIC5jYW4tYWxlcnQgLmNsci1pLW91dGxpbmU6bm90KC5jbHItaS1vdXRsaW5lLS1hbGVydGVkKXtkaXNwbGF5Om5vbmV9Y2xyLWljb25bY2xhc3MqPWhhcy1iYWRnZV0gLmNhbi1iYWRnZSAuY2xyLWktb3V0bGluZS0tYmFkZ2Vke2Rpc3BsYXk6YmxvY2t9Y2xyLWlj''@;'; put 'put ''b25bY2xhc3MqPWhhcy1iYWRnZV0gLmNhbi1iYWRnZSAuY2xyLWktb3V0bGluZTpub3QoLmNsci1pLW91dGxpbmUtLWJhZGdlZCl7ZGlzcGxheTpub25lfWNsci1pY29uLmlzLXNvbGlkIC5oYXMtc29saWQgLmNsci1pLXNvbGlke2Rpc3BsYXk6YmxvY2t9Y2xyLWljb24uaXMtc29saWQgLmhh''@;'; put 'put ''cy1zb2xpZCAuY2xyLWktb3V0bGluZSxjbHItaWNvbi5pcy1zb2xpZCAuaGFzLXNvbGlkIC5jbHItaS1vdXRsaW5lLS1iYWRnZWR7ZGlzcGxheTpub25lfWNsci1pY29uLmlzLXNvbGlkIC5oYXMtc29saWQgLmNsci1pLXNvbGlkLS1hbGVydGVkOm5vdCguY2xyLWktc29saWQpLGNsci1pY29u''@;'; put 'put ''LmlzLXNvbGlkIC5oYXMtc29saWQgLmNsci1pLXNvbGlkLS1iYWRnZWQ6bm90KC5jbHItaS1zb2xpZCl7ZGlzcGxheTpub25lfWNsci1pY29uLmlzLXNvbGlkW2NsYXNzKj1oYXMtYmFkZ2VdIC5jYW4tYmFkZ2UuaGFzLXNvbGlkIC5jbHItaS1zb2xpZC0tYmFkZ2Vke2Rpc3BsYXk6YmxvY2t9''@;'; put 'put ''Y2xyLWljb24uaXMtc29saWRbY2xhc3MqPWhhcy1iYWRnZV0gLmNhbi1iYWRnZS5oYXMtc29saWQgLmNsci1pLW91dGxpbmUsY2xyLWljb24uaXMtc29saWRbY2xhc3MqPWhhcy1iYWRnZV0gLmNhbi1iYWRnZS5oYXMtc29saWQgLmNsci1pLW91dGxpbmUtLWJhZGdlZCxjbHItaWNvbi5pcy1z''@;'; put 'put ''b2xpZFtjbGFzcyo9aGFzLWJhZGdlXSAuY2FuLWJhZGdlLmhhcy1zb2xpZCAuY2xyLWktc29saWQ6bm90KC5jbHItaS1zb2xpZC0tYmFkZ2VkKXtkaXNwbGF5Om5vbmV9Y2xyLWljb24uaXMtc29saWRbY2xhc3MqPWhhcy1hbGVydF0gLmNhbi1hbGVydC5oYXMtc29saWQgLmNsci1pLXNvbGlk''@;'; put 'put ''LS1hbGVydGVke2Rpc3BsYXk6YmxvY2t9Y2xyLWljb24uaXMtc29saWRbY2xhc3MqPWhhcy1hbGVydF0gLmNhbi1hbGVydC5oYXMtc29saWQgLmNsci1pLW91dGxpbmUsY2xyLWljb24uaXMtc29saWRbY2xhc3MqPWhhcy1hbGVydF0gLmNhbi1hbGVydC5oYXMtc29saWQgLmNsci1pLW91dGxp''@;'; put 'put ''bmUtLWFsZXJ0ZWQsY2xyLWljb24uaXMtc29saWRbY2xhc3MqPWhhcy1hbGVydF0gLmNhbi1hbGVydC5oYXMtc29saWQgLmNsci1pLXNvbGlkOm5vdCguY2xyLWktc29saWQtLWFsZXJ0ZWQpe2Rpc3BsYXk6bm9uZX1jbHItaWNvbi5oYXMtYmFkZ2UtLXN1Y2Nlc3MgLmNsci1pLWJhZGdle2Zp''@;'; put 'put ''bGw6IzJlODUwMH1jbHItaWNvbi5oYXMtYmFkZ2UtLXN1Y2Nlc3MgLmNsci1pLWJhZGdlIC50cmFuc3BhcmVudC1maWxsLXN0cm9rZXtzdHJva2U6IzJlODUwMH1jbHItaWNvbi5oYXMtYmFkZ2UtLWVycm9yIC5jbHItaS1iYWRnZXtmaWxsOiNlMDIyMDB9Y2xyLWljb24uaGFzLWJhZGdlLS1l''@;'; put 'put ''cnJvciAuY2xyLWktYmFkZ2UgLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tle3N0cm9rZTojZTAyMjAwfWNsci1pY29uLmhhcy1iYWRnZS0taW5mbyAuY2xyLWktYmFkZ2V7ZmlsbDojMDA3N2I4fWNsci1pY29uLmhhcy1iYWRnZS0taW5mbyAuY2xyLWktYmFkZ2UgLnRyYW5zcGFyZW50LWZpbGwt''@;'; put 'put ''c3Ryb2tle3N0cm9rZTojMDA3N2I4fWNsci1pY29uLmhhcy1hbGVydCAuY2xyLWktYWxlcnR7ZmlsbDojYzI3YjAwfWNsci1pY29uLmhhcy1hbGVydCAuY2xyLWktYWxlcnQgLnRyYW5zcGFyZW50LWZpbGwtc3Ryb2tle3N0cm9rZTojYzI3YjAwfWNsci1pY29uIC5pcy1vZmYtc2NyZWVue3Bv''@;'; put 'put ''c2l0aW9uOmZpeGVkIWltcG9ydGFudDtib3JkZXI6MCFpbXBvcnRhbnQ7aGVpZ2h0OjFweCFpbXBvcnRhbnQ7d2lkdGg6MXB4IWltcG9ydGFudDtsZWZ0OjAhaW1wb3J0YW50O3RvcDotMXB4IWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4haW1wb3J0YW50O3BhZGRpbmc6MCFpbXBvcnRhbnQ7''@;'; put 'put ''bWFyZ2luOjAgMCAtMXB4IWltcG9ydGFudH1AY2hhcnNldCAiVVRGLTgiOzpyb290ey0tY2RzLWdsb2JhbC1iYXNlOjIwOy0tY2RzLWdsb2JhbC1zY2FsZS1zcGFjZToxOy0tY2RzLWdsb2JhbC1zY2FsZS1sYXlvdXQtc3BhY2U6MTstLWNkcy1nbG9iYWwtc2NhbGUtdHlwb2dyYXBoeToxOy0t''@;'; put 'put ''Y2RzLWdsb2JhbC1sYXlvdXQtZ3JpZC1jb2xzOjEyOy0tY2RzLWdsb2JhbC1sYXlvdXQtd2lkdGgteHM6NTc2cHg7LS1jZHMtZ2xvYmFsLWxheW91dC13aWR0aC1zbTo3NjhweDstLWNkcy1nbG9iYWwtbGF5b3V0LXdpZHRoLW1kOjk5MnB4Oy0tY2RzLWdsb2JhbC1sYXlvdXQtd2lkdGgtbGc6''@;'; put 'put ''MTIwMHB4Oy0tY2RzLWdsb2JhbC1sYXlvdXQtd2lkdGgteGw6MTQ0MHB4Oy0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UteHh4czpjYWxjKDIgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMSkpOy0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UteHhzOmNhbGMoNCAqIHZhcigtLWNkcy1pbnRl''@;'; put 'put ''cm5hbC1zY2FsZS0xKSk7LS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14czpjYWxjKDggKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMSkpOy0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2Utc206Y2FsYygxMiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0xKSk7LS1jZHMtZ2xvYmFsLWxh''@;'; put 'put ''eW91dC1zcGFjZS1tZDpjYWxjKDE2ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTEpKTstLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLWxnOmNhbGMoMjQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMSkpOy0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UteGw6Y2FsYygzMiAqIHZhcigt''@;'; put 'put ''LWNkcy1pbnRlcm5hbC1zY2FsZS0xKSk7LS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14eGw6Y2FsYyg0OCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0xKSk7LS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14eHhsOmNhbGMoNjQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMSkpOy0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS0wOmNhbGMoMCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTE6Y2FsYygxICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtMjpjYWxjKDIgKiB2YXIoLS1jZHMtaW50ZXJuYWwt''@;'; put 'put ''c2NhbGUtMikpOy0tY2RzLWdsb2JhbC1zcGFjZS0zOmNhbGMoNCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTQ6Y2FsYyg2ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtNTpjYWxjKDggKiB2YXIoLS1j''@;'; put 'put ''ZHMtaW50ZXJuYWwtc2NhbGUtMikpOy0tY2RzLWdsb2JhbC1zcGFjZS02OmNhbGMoMTIgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMikpOy0tY2RzLWdsb2JhbC1zcGFjZS03OmNhbGMoMTYgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMikpOy0tY2RzLWdsb2JhbC1zcGFjZS04OmNh''@;'; put 'put ''bGMoMTggKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMikpOy0tY2RzLWdsb2JhbC1zcGFjZS05OmNhbGMoMjQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMikpOy0tY2RzLWdsb2JhbC1zcGFjZS0xMDpjYWxjKDMyICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTIpKTstLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtMTE6Y2FsYygzNiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTEyOmNhbGMoNDggKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMikpOy0tY2RzLWdsb2JhbC1zcGFjZS0xMzpjYWxjKDY0ICogdmFyKC0tY2RzLWludGVybmFs''@;'; put 'put ''LXNjYWxlLTIpKTstLWNkcy1nbG9iYWwtc3BhY2UtMTQ6Y2FsYyg3MiAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0yKSk7LS1jZHMtZ2xvYmFsLXNwYWNlLTE1OmNhbGMoOTYgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMikpOy0tY2RzLWdsb2JhbC1jb2xvci1ibGFjazpoc2woMCwg''@;'; put 'put ''MCUsIDAlKTstLWNkcy1nbG9iYWwtY29sb3Itd2hpdGU6aHNsKDAsIDAlLCAxMDAlKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNTA6aHNsKDkzLCA4MCUsIDk0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTEwMDpoc2woOTMsIDgwJSwgODMlKTstLWNkcy1nbG9iYWwtY29sb3ItZ3Jl''@;'; put 'put ''ZW4tMjAwOmhzbCg5MywgODAlLCA3MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi0zMDA6aHNsKDkzLCA4MCUsIDU2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTQwMDpoc2woOTMsIDgwJSwgNDglKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNTAwOmhzbCg5MywgODAlLCA0NCUp''@;'; put 'put ''Oy0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi02MDA6aHNsKDkzLCA4MCUsIDM3JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTcwMDpoc2woOTMsIDgwJSwgMjglKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tODAwOmhzbCg5MywgODAlLCAyMyUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmVl''@;'; put 'put ''bi05MDA6aHNsKDkzLCA4MCUsIDE3JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTEwMDA6aHNsKDkzLCA4MCUsIDEyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMjU6aHNsKDE5OCwgMTAwJSwgOTYlKTstLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MDpoc2woMTk4LCAxMDAlLCA5NSUp''@;'; put 'put ''Oy0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTc1OmhzbCgxOTgsIDEwMCUsIDk0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMTAwOmhzbCgxOTgsIDEwMCUsIDg3JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMjAwOmhzbCgxOTgsIDEwMCUsIDc4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWJs''@;'; put 'put ''dWUtMzAwOmhzbCgxOTgsIDEwMCUsIDcwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNDAwOmhzbCgxOTgsIDEwMCUsIDU5JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTAwOmhzbCgxOTgsIDEwMCUsIDQ4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNjAwOmhzbCgxOTgsIDEwMCUs''@;'; put 'put ''IDQzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwOmhzbCgxOTgsIDEwMCUsIDM0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtODAwOmhzbCgxOTgsIDEwMCUsIDI3JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtOTAwOmhzbCgxOTgsIDEwMCUsIDIxJSk7LS1jZHMtZ2xvYmFsLWNv''@;'; put 'put ''bG9yLWJsdWUtMTAwMDpoc2woMTk4LCAxMDAlLCAxNSUpOy0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNTA6aHNsKDI4MiwgMTAwJSwgOTclKTstLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTEwMDpoc2woMjgyLCA4MCUsIDkxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0yMDA6aHNs''@;'; put 'put ''KDI4MiwgNzMlLCA4MyUpOy0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMzAwOmhzbCgyODIsIDY2JSwgNzQlKTstLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTQwMDpoc2woMjgyLCA2MCUsIDY1JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC01MDA6aHNsKDI4MiwgNjAlLCA1NyUpOy0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNjAwOmhzbCgyODIsIDYwJSwgNDklKTstLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTcwMDpoc2woMjgzLCA4MCUsIDM2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC04MDA6aHNsKDI4MiwgMTAwJSwgMjYlKTstLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''dmlvbGV0LTkwMDpoc2woMjgyLCAxMDAlLCAxOSUpOy0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMTAwMDpoc2woMjgyLCAxMDAlLCAxNCUpOy0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNTA6aHNsKDksIDEwMCUsIDk3JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC0xMDA6aHNsKDksIDEwMCUs''@;'; put 'put ''IDk0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC0yMDA6aHNsKDksIDEwMCUsIDg4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC0zMDA6aHNsKDksIDEwMCUsIDc5JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC00MDA6aHNsKDksIDEwMCUsIDcxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC01''@;'; put 'put ''MDA6aHNsKDksIDEwMCUsIDY1JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC02MDA6aHNsKDksIDEwMCUsIDU5JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDA6aHNsKDksIDEwMCUsIDQ0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC04MDA6aHNsKDksIDEwMCUsIDM4JSk7LS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLXJlZC05MDA6aHNsKDksIDEwMCUsIDI4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC0xMDAwOmhzbCg5LCAxMDAlLCAyMiUpOy0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS01MDpoc2woNDEsIDEwMCUsIDk2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTEwMDpoc2woNDEs''@;'; put 'put ''IDEwMCUsIDkyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTIwMDpoc2woNDEsIDEwMCUsIDg2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTMwMDpoc2woNDEsIDEwMCUsIDc4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTQwMDpoc2woNDEsIDEwMCUsIDcwJSk7LS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLW9jaHJlLTUwMDpoc2woNDAsIDEwMCUsIDU5JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTYwMDpoc2woMzksIDEwMCUsIDUwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTcwMDpoc2woMzgsIDEwMCUsIDQyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTgwMDpo''@;'; put 'put ''c2woMzcsIDEwMCUsIDMyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTkwMDpoc2woMzYsIDEwMCUsIDI3JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTEwMDA6aHNsKDM1LCAxMDAlLCAxOSUpOy0tY2RzLWdsb2JhbC1jb2xvci1sYXZlbmRlci01MDpoc2woMjM4LCAxMDAlLCA5NiUp''@;'; put 'put ''Oy0tY2RzLWdsb2JhbC1jb2xvci1sYXZlbmRlci0xMDA6aHNsKDIzOCwgNTglLCA4OCUpOy0tY2RzLWdsb2JhbC1jb2xvci1sYXZlbmRlci0yMDA6aHNsKDIzOCwgNTMlLCA3OSUpOy0tY2RzLWdsb2JhbC1jb2xvci1sYXZlbmRlci0zMDA6aHNsKDIzOCwgNTIlLCA3MCUpOy0tY2RzLWdsb2Jh''@;'; put 'put ''bC1jb2xvci1sYXZlbmRlci00MDA6aHNsKDIzOCwgNTglLCA2NCUpOy0tY2RzLWdsb2JhbC1jb2xvci1sYXZlbmRlci01MDA6aHNsKDIzOCwgNTklLCA1OCUpOy0tY2RzLWdsb2JhbC1jb2xvci1sYXZlbmRlci02MDA6aHNsKDIzOCwgNjAlLCA1MiUpOy0tY2RzLWdsb2JhbC1jb2xvci1sYXZl''@;'; put 'put ''bmRlci03MDA6aHNsKDIzOCwgNjklLCA0NSUpOy0tY2RzLWdsb2JhbC1jb2xvci1sYXZlbmRlci04MDA6aHNsKDIzOCwgMTAwJSwgMzIlKTstLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItOTAwOmhzbCgyMzgsIDEwMCUsIDIyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTEwMDA6''@;'; put 'put ''aHNsKDIzOCwgMTAwJSwgMTQlKTstLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtNTA6aHNsKDIxMSwgMTAwJSwgOTUlKTstLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtMTAwOmhzbCgyMTEsIDEwMCUsIDg4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTIwMDpoc2woMjExLCAxMDAlLCA4MSUp''@;'; put 'put ''Oy0tY2RzLWdsb2JhbC1jb2xvci1henVyZS0zMDA6aHNsKDIxMSwgMTAwJSwgNzAlKTstLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtNDAwOmhzbCgyMTEsIDEwMCUsIDYyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTUwMDpoc2woMjExLCAxMDAlLCA1NCUpOy0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1henVyZS02MDA6aHNsKDIxMSwgMTAwJSwgNDYlKTstLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtNzAwOmhzbCgyMTEsIDEwMCUsIDM3JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTgwMDpoc2woMjExLCAxMDAlLCAyNiUpOy0tY2RzLWdsb2JhbC1jb2xvci1henVyZS05MDA6aHNsKDIx''@;'; put 'put ''MSwgMTAwJSwgMTglKTstLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtMTAwMDpoc2woMjExLCAxMDAlLCAxNCUpOy0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTUwOmhzbCgxODQsIDEwMCUsIDk2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtMTAwOmhzbCgxODQsIDEwMCUsIDg2JSk7LS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLWFxdWEtMjAwOmhzbCgxODQsIDEwMCUsIDc1JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtMzAwOmhzbCgxODQsIDEwMCUsIDYyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNDAwOmhzbCgxODQsIDEwMCUsIDQ4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNTAw''@;'; put 'put ''OmhzbCgxODQsIDEwMCUsIDQzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNjAwOmhzbCgxODQsIDEwMCUsIDM0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNzAwOmhzbCgxODQsIDEwMCUsIDI1JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtODAwOmhzbCgxODQsIDEwMCUsIDE4JSk7''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtOTAwOmhzbCgxODQsIDEwMCUsIDEzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtMTAwMDpoc2woMTg0LCAxMDAlLCAxMCUpOy0tY2RzLWdsb2JhbC1jb2xvci1qYWRlLTUwOmhzbCgxNjAsIDgzJSwgOTUlKTstLWNkcy1nbG9iYWwtY29sb3ItamFk''@;'; put 'put ''ZS0xMDA6aHNsKDE2MCwgODIlLCA4OCUpOy0tY2RzLWdsb2JhbC1jb2xvci1qYWRlLTIwMDpoc2woMTYwLCA3OCUsIDc4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtMzAwOmhzbCgxNjAsIDY5JSwgNjUlKTstLWNkcy1nbG9iYWwtY29sb3ItamFkZS00MDA6aHNsKDE2MCwgNjklLCA1MyUp''@;'; put 'put ''Oy0tY2RzLWdsb2JhbC1jb2xvci1qYWRlLTUwMDpoc2woMTYwLCA2NCUsIDQ1JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtNjAwOmhzbCgxNjAsIDY5JSwgMzYlKTstLWNkcy1nbG9iYWwtY29sb3ItamFkZS03MDA6aHNsKDE2MCwgNjQlLCAzMCUpOy0tY2RzLWdsb2JhbC1jb2xvci1qYWRl''@;'; put 'put ''LTgwMDpoc2woMTYwLCAxMDAlLCAyMSUpOy0tY2RzLWdsb2JhbC1jb2xvci1qYWRlLTkwMDpoc2woMTYwLCA3MCUsIDE4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWphZGUtMTAwMDpoc2woMTYwLCA2OSUsIDE0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy01MDpoc2woNTAsIDEwMCUsIDk1''@;'; put 'put ''JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy0xMDA6aHNsKDUwLCAxMDAlLCA4NCUpOy0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctMjAwOmhzbCg1MCwgMTAwJSwgNzMlKTstLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTMwMDpoc2woNTAsIDEwMCUsIDU3JSk7LS1jZHMtZ2xvYmFsLWNv''@;'; put 'put ''bG9yLXllbGxvdy00MDA6aHNsKDQ2LCAxMDAlLCA1MiUpOy0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctNTAwOmhzbCg0NCwgMTAwJSwgNDclKTstLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTYwMDpoc2woNDIsIDEwMCUsIDQyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy03MDA6aHNs''@;'; put 'put ''KDQwLCAxMDAlLCAzNyUpOy0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctODAwOmhzbCg0MCwgMTAwJSwgMjYlKTstLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTkwMDpoc2woNDAsIDEwMCUsIDE4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy0xMDAwOmhzbCg0MCwgMTAwJSwgMTMlKTst''@;'; put 'put ''LWNkcy1nbG9iYWwtY29sb3ItbGltZS01MDpoc2woNjYsIDEwMCUsIDk0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtMTAwOmhzbCg2NiwgOTUlLCA4MyUpOy0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTIwMDpoc2woNjYsIDg1JSwgNzAlKTstLWNkcy1nbG9iYWwtY29sb3ItbGltZS0zMDA6''@;'; put 'put ''aHNsKDY2LCA4MCUsIDU4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtNDAwOmhzbCg2NiwgODAlLCA0OCUpOy0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTUwMDpoc2woNjYsIDkwJSwgNDElKTstLWNkcy1nbG9iYWwtY29sb3ItbGltZS02MDA6aHNsKDY2LCA5MCUsIDM2JSk7LS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLWxpbWUtNzAwOmhzbCg2NiwgMTAwJSwgMjglKTstLWNkcy1nbG9iYWwtY29sb3ItbGltZS04MDA6aHNsKDY2LCAxMDAlLCAyMiUpOy0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTkwMDpoc2woNjYsIDEwMCUsIDEyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtMTAwMDpoc2wo''@;'; put 'put ''NjYsIDEwMCUsIDclKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTUwOmhzbCgyNSwgMTAwJSwgOTUlKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTEwMDpoc2woMjUsIDEwMCUsIDg4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS0yMDA6aHNsKDI1LCA5NCUsIDc4''@;'; put 'put ''JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS0zMDA6aHNsKDI1LCAxMDAlLCA3MiUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtNDAwOmhzbCgyNSwgMTAwJSwgNjIlKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTUwMDpoc2woMjUsIDEwMCUsIDQ4JSk7LS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLXRhbmdlcmluZS02MDA6aHNsKDI1LCAxMDAlLCA0MSUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtNzAwOmhzbCgyNSwgMTAwJSwgMzQlKTstLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTgwMDpoc2woMjUsIDEwMCUsIDI1JSk7LS1jZHMtZ2xvYmFsLWNv''@;'; put 'put ''bG9yLXRhbmdlcmluZS05MDA6aHNsKDI1LCAxMDAlLCAxOSUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtMTAwMDpoc2woMjUsIDEwMCUsIDE1JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW1hZ2VudGEtNTA6aHNsKDM0NSwgMTAwJSwgOTUlKTstLWNkcy1nbG9iYWwtY29sb3ItbWFnZW50''@;'; put 'put ''YS0xMDA6aHNsKDM0NSwgMTAwJSwgODclKTstLWNkcy1nbG9iYWwtY29sb3ItbWFnZW50YS0yMDA6aHNsKDM0NSwgMTAwJSwgNzklKTstLWNkcy1nbG9iYWwtY29sb3ItbWFnZW50YS0zMDA6aHNsKDM0NSwgMTAwJSwgNzAlKTstLWNkcy1nbG9iYWwtY29sb3ItbWFnZW50YS00MDA6aHNsKDM0''@;'; put 'put ''NSwgMTAwJSwgNjElKTstLWNkcy1nbG9iYWwtY29sb3ItbWFnZW50YS01MDA6aHNsKDM0NSwgODElLCA1MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1tYWdlbnRhLTYwMDpoc2woMzQ1LCA4MyUsIDQwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLW1hZ2VudGEtNzAwOmhzbCgzNDUsIDkxJSwgMzElKTst''@;'; put 'put ''LWNkcy1nbG9iYWwtY29sb3ItbWFnZW50YS04MDA6aHNsKDM0NSwgMTAwJSwgMjQlKTstLWNkcy1nbG9iYWwtY29sb3ItbWFnZW50YS05MDA6aHNsKDM0NSwgMTAwJSwgMTklKTstLWNkcy1nbG9iYWwtY29sb3ItbWFnZW50YS0xMDAwOmhzbCgzNDUsIDEwMCUsIDE1JSk7LS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLXBpbmstNTA6aHNsKDMyNCwgMTAwJSwgOTclKTstLWNkcy1nbG9iYWwtY29sb3ItcGluay0xMDA6aHNsKDMyNCwgOTUlLCA5MSUpOy0tY2RzLWdsb2JhbC1jb2xvci1waW5rLTIwMDpoc2woMzI0LCA4NCUsIDgxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXBpbmstMzAwOmhzbCgzMjQs''@;'; put 'put ''IDc4JSwgNzAlKTstLWNkcy1nbG9iYWwtY29sb3ItcGluay00MDA6aHNsKDMyNCwgNzglLCA2MiUpOy0tY2RzLWdsb2JhbC1jb2xvci1waW5rLTUwMDpoc2woMzI0LCA2NCUsIDUxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXBpbmstNjAwOmhzbCgzMjQsIDgwJSwgMzklKTstLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItcGluay03MDA6aHNsKDMyNCwgMTAwJSwgMzAlKTstLWNkcy1nbG9iYWwtY29sb3ItcGluay04MDA6aHNsKDMyNCwgMTAwJSwgMjQlKTstLWNkcy1nbG9iYWwtY29sb3ItcGluay05MDA6aHNsKDMyNCwgMTAwJSwgMTglKTstLWNkcy1nbG9iYWwtY29sb3ItcGluay0xMDAwOmhzbCgz''@;'; put 'put ''MjQsIDEwMCUsIDE1JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXdhcm0tZ3JheS01MDpoc2woMjgyLCAzJSwgOTclKTstLWNkcy1nbG9iYWwtY29sb3Itd2FybS1ncmF5LTEwMDpoc2woMjgyLCAzJSwgOTIlKTstLWNkcy1nbG9iYWwtY29sb3Itd2FybS1ncmF5LTIwMDpoc2woMjgyLCAzJSwgODQl''@;'; put 'put ''KTstLWNkcy1nbG9iYWwtY29sb3Itd2FybS1ncmF5LTMwMDpoc2woMjgyLCAzJSwgNzQlKTstLWNkcy1nbG9iYWwtY29sb3Itd2FybS1ncmF5LTQwMDpoc2woMjgyLCAzJSwgNjMlKTstLWNkcy1nbG9iYWwtY29sb3Itd2FybS1ncmF5LTUwMDpoc2woMjgyLCAzJSwgNTQlKTstLWNkcy1nbG9i''@;'; put 'put ''YWwtY29sb3Itd2FybS1ncmF5LTYwMDpoc2woMjgyLCAzJSwgNDMlKTstLWNkcy1nbG9iYWwtY29sb3Itd2FybS1ncmF5LTcwMDpoc2woMjgyLCAzJSwgMzUlKTstLWNkcy1nbG9iYWwtY29sb3Itd2FybS1ncmF5LTgwMDpoc2woMjgyLCAzJSwgMjglKTstLWNkcy1nbG9iYWwtY29sb3Itd2Fy''@;'; put 'put ''bS1ncmF5LTkwMDpoc2woMjgyLCAzJSwgMjAlKTstLWNkcy1nbG9iYWwtY29sb3Itd2FybS1ncmF5LTEwMDA6aHNsKDI4MiwgMyUsIDE0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXNsYXRlLTUwOmhzbCgyMzgsIDIwJSwgOTYlKTstLWNkcy1nbG9iYWwtY29sb3Itc2xhdGUtMTAwOmhzbCgyMzgs''@;'; put 'put ''IDIwJSwgOTElKTstLWNkcy1nbG9iYWwtY29sb3Itc2xhdGUtMjAwOmhzbCgyMzgsIDIwJSwgODIlKTstLWNkcy1nbG9iYWwtY29sb3Itc2xhdGUtMzAwOmhzbCgyMzgsIDIwJSwgNzMlKTstLWNkcy1nbG9iYWwtY29sb3Itc2xhdGUtNDAwOmhzbCgyMzgsIDIwJSwgNjMlKTstLWNkcy1nbG9i''@;'; put 'put ''YWwtY29sb3Itc2xhdGUtNTAwOmhzbCgyMzgsIDIzJSwgNTYlKTstLWNkcy1nbG9iYWwtY29sb3Itc2xhdGUtNjAwOmhzbCgyMzgsIDI0JSwgNDklKTstLWNkcy1nbG9iYWwtY29sb3Itc2xhdGUtNzAwOmhzbCgyMzgsIDI4JSwgMzglKTstLWNkcy1nbG9iYWwtY29sb3Itc2xhdGUtODAwOmhz''@;'; put 'put ''bCgyMzgsIDI4JSwgMjklKTstLWNkcy1nbG9iYWwtY29sb3Itc2xhdGUtOTAwOmhzbCgyMzgsIDI4JSwgMjIlKTstLWNkcy1nbG9iYWwtY29sb3Itc2xhdGUtMTAwMDpoc2woMjM4LCAyOCUsIDE0JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWljZS01MDpoc2woMjExLCAxMDAlLCA5NyUpOy0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci1pY2UtMTAwOmhzbCgyMTEsIDU4JSwgOTAlKTstLWNkcy1nbG9iYWwtY29sb3ItaWNlLTIwMDpoc2woMjExLCA1MyUsIDgxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWljZS0zMDA6aHNsKDIxMSwgNDklLCA3MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1pY2UtNDAwOmhzbCgy''@;'; put 'put ''MTEsIDQ3JSwgNjIlKTstLWNkcy1nbG9iYWwtY29sb3ItaWNlLTUwMDpoc2woMjExLCA0NyUsIDUzJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWljZS02MDA6aHNsKDIxMSwgNTYlLCA0NCUpOy0tY2RzLWdsb2JhbC1jb2xvci1pY2UtNzAwOmhzbCgyMTEsIDY5JSwgMzQlKTstLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItaWNlLTgwMDpoc2woMjExLCA2OSUsIDI3JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWljZS05MDA6aHNsKDIxMSwgMTAwJSwgMjAlKTstLWNkcy1nbG9iYWwtY29sb3ItaWNlLTEwMDA6aHNsKDIxMSwgMTAwJSwgMTQlKTstLWNkcy1nbG9iYWwtY29sb3ItY29vbC1ncmF5LTUwOmhzbCgy''@;'; put 'put ''MTEsIDIwJSwgOTYlKTstLWNkcy1nbG9iYWwtY29sb3ItY29vbC1ncmF5LTEwMDpoc2woMjExLCAyMCUsIDkwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS0yMDA6aHNsKDIxMSwgMjAlLCA4MSUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb29sLWdyYXktMzAwOmhzbCgyMTEsIDIwJSwg''@;'; put 'put ''NzIlKTstLWNkcy1nbG9iYWwtY29sb3ItY29vbC1ncmF5LTQwMDpoc2woMjExLCAyMCUsIDYxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS01MDA6aHNsKDIxMSwgMjAlLCA1MyUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb29sLWdyYXktNjAwOmhzbCgyMTEsIDIwJSwgNDQlKTstLWNk''@;'; put 'put ''cy1nbG9iYWwtY29sb3ItY29vbC1ncmF5LTcwMDpoc2woMjExLCAyMyUsIDM2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS04MDA6aHNsKDIxMSwgMzAlLCAyOCUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb29sLWdyYXktOTAwOmhzbCgyMTEsIDQwJSwgMjIlKTstLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItY29vbC1ncmF5LTEwMDA6aHNsKDIxMSwgNjMlLCAxNCUpOy0tY2RzLWdsb2JhbC1jb2xvci10YW4tNTA6aHNsKDQxLCAyMyUsIDk2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXRhbi0xMDA6aHNsKDQxLCAyMiUsIDkxJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXRhbi0yMDA6aHNsKDQxLCAy''@;'; put 'put ''NyUsIDgyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXRhbi0zMDA6aHNsKDQxLCAyMyUsIDY4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXRhbi00MDA6aHNsKDQxLCAyMyUsIDU4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXRhbi01MDA6aHNsKDQxLCAyMCUsIDQ3JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXRh''@;'; put 'put ''bi02MDA6aHNsKDQxLCAyMCUsIDQwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXRhbi03MDA6aHNsKDQxLCAyMCUsIDMyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXRhbi04MDA6aHNsKDQxLCAyMyUsIDI2JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLXRhbi05MDA6aHNsKDQxLCAyMyUsIDIxJSk7LS1jZHMt''@;'; put 'put ''Z2xvYmFsLWNvbG9yLXRhbi0xMDAwOmhzbCg0MSwgMjIlLCAxNiUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjU6aHNsKDE5OCwgMzMlLCA5OSUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTA6aHNsKDE5OCwgMzYlLCA5NiUpOy0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1jb25zdHJ1Y3Rpb24tMTAwOmhzbCgxOTgsIDIwJSwgOTElKTstLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMDpoc2woMTk4LCAxNCUsIDgyJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0zMDA6aHNsKDE5OCwgMTAlLCA3MSUpOy0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1jb25zdHJ1Y3Rpb24tNDAwOmhzbCgxOTgsIDklLCA1NiUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTAwOmhzbCgxOTgsIDEwJSwgNDYlKTstLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMDpoc2woMTk4LCAxNCUsIDM2JSk7LS1jZHMtZ2xvYmFsLWNvbG9y''@;'; put 'put ''LWNvbnN0cnVjdGlvbi03MDA6aHNsKDE5OCwgMTklLCAyOCUpOy0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwOmhzbCgxOTgsIDIzJSwgMjMlKTstLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTkwMDpoc2woMTk4LCAyOCUsIDE4JSk7LS1jZHMtZ2xvYmFsLWNvbG9y''@;'; put 'put ''LWNvbnN0cnVjdGlvbi0xMDAwOmhzbCgxOTgsIDMwJSwgMTUlKTstLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTExMDA6aHNsKDIwMCwgMzElLCAxMyUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmF5LTA6aHNsKDAsIDAlLCAxMDAlKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JheS01MDpo''@;'; put 'put ''c2woMCwgMCUsIDk4JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyYXktMTAwOmhzbCgwLCAwJSwgOTUlKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JheS0yMDA6aHNsKDAsIDAlLCA5MSUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmF5LTMwMDpoc2woMCwgMCUsIDg3JSk7LS1jZHMtZ2xvYmFsLWNvbG9y''@;'; put 'put ''LWdyYXktNDAwOmhzbCgwLCAwJSwgODAlKTstLWNkcy1nbG9iYWwtY29sb3ItZ3JheS01MDA6aHNsKDAsIDAlLCA3MCUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmF5LTYwMDpoc2woMCwgMCUsIDU1JSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyYXktNzAwOmhzbCgwLCAwJSwgNDAlKTstLWNkcy1n''@;'; put 'put ''bG9iYWwtY29sb3ItZ3JheS04MDA6aHNsKDAsIDAlLCAyNyUpOy0tY2RzLWdsb2JhbC1jb2xvci1ncmF5LTkwMDpoc2woMCwgMCUsIDIwJSk7LS1jZHMtZ2xvYmFsLWNvbG9yLWdyYXktMTAwMDpoc2woMCwgMCUsIDAlKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci0xMDA6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci13aGl0ZSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0''@;'; put 'put ''aW9uLTgwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTkwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNDUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMDApOy0tY2Rz''@;'; put 'put ''LWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsYWNrKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1saWdodDozMDA7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtcmVndWxhcjo0MDA7LS1jZHMtZ2xvYmFs''@;'; put 'put ''LXR5cG9ncmFwaHktZm9udC13ZWlnaHQtbWVkaXVtOjUwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZDo2MDA7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtYm9sZDo2MDA7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQt''@;'; put 'put ''ZXh0cmFib2xkOjYwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXNpemUtMDpjYWxjKDEwICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXNpemUtMTpjYWxjKDExICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTst''@;'; put 'put ''LWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXNpemUtMjpjYWxjKDEyICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXNpemUtMzpjYWxjKDEzICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1nbG9iYWwtdHlw''@;'; put 'put ''b2dyYXBoeS1mb250LXNpemUtNDpjYWxjKDE0ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXNpemUtNTpjYWxjKDE2ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXNp''@;'; put 'put ''emUtNjpjYWxjKDIwICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXNpemUtNzpjYWxjKDI0ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXNpemUtODpjYWxjKDMyICog''@;'; put 'put ''dmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXNpemUtOTpjYWxjKDQwICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LWZhbWlseToiQ2xhcml0eSBDaXR5IiwgIkF2ZW5pciBO''@;'; put 'put ''ZXh0Iiwgc2Fucy1zZXJpZjstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkZXItZm9udC1mYW1pbHk6IkNsYXJpdHkgQ2l0eSIsICJBdmVuaXIgTmV4dCIsIHNhbnMtc2VyaWY7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbW9ub3NwYWNlLWZvbnQtZmFtaWx5OnVpLW1vbm9zcGFjZSwgQ29u''@;'; put 'put ''c29sYXMsIE1lbmxvLCBNb25hY28sIG1vbm9zcGFjZTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodDouMTQ3NWVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodDouMTcwM2VtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0Oi41MTdl''@;'; put 'put ''bTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTgwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFw''@;'; put 'put ''aHktbGluay1jb2xvci12aXNpdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItNjAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1sYXZlbmRlci03MDApOy0tY2RzLWdsb2JhbC10eXBvZ3Jh''@;'; put 'put ''cGh5LWxpbmstb24tY29sb3JiZzp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsYWNrKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZTpjYWxjKDE0ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVp''@;'; put 'put ''Z2h0OjEuNDI4NTcxNGVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmc6LS4wMDcxNDI4NmVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQ6NDAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC1zaXplOmNhbGMo''@;'; put 'put ''NDAgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktbGluZS1oZWlnaHQ6MS4xZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1sZXR0ZXItc3BhY2luZzotLjAxMjVlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1k''@;'; put 'put ''aXNwbGF5LWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkaW5nLWZvbnQtc2l6ZTpjYWxjKDMyICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkaW5nLWxpbmUtaGVpZ2h0OjEuMTI1ZW07LS1jZHMtZ2xv''@;'; put 'put ''YmFsLXR5cG9ncmFwaHktaGVhZGluZy1sZXR0ZXItc3BhY2luZzotLjAxMjVlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkaW5nLWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkbGluZS1mb250LXNpemU6Y2FsYygzMiAqIHZhcigtLWNkcy1pbnRlcm5h''@;'; put 'put ''bC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktaGVhZGxpbmUtbGluZS1oZWlnaHQ6MS4xMjVlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkbGluZS1sZXR0ZXItc3BhY2luZzotLjAxMjVlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkbGluZS1mb250LXdlaWdo''@;'; put 'put ''dDo1MDA7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtZm9udC1zaXplOmNhbGMoMjQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRpdGxlLWxpbmUtaGVpZ2h0OjEuMzMzMzMzZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0''@;'; put 'put ''bGUtbGV0dGVyLXNwYWNpbmc6LS4wMDgzMzMzM2VtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRpdGxlLWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtc2l6ZTpjYWxjKDIwICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1n''@;'; put 'put ''bG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0OjEuMmVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmc6LS4wMWVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWdsb2JhbC10eXBvZ3Jh''@;'; put 'put ''cGh5LXN1YnNlY3Rpb24tZm9udC1zaXplOmNhbGMoMTYgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQ6MS41ZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1sZXR0ZXItc3BhY2lu''@;'; put 'put ''ZzotLjAxMjVlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWZvbnQtc2l6ZTpjYWxjKDE2ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBo''@;'; put 'put ''eS1tZXNzYWdlLWxpbmUtaGVpZ2h0OjEuNWVtOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtbGV0dGVyLXNwYWNpbmc6LS4wMTI1ZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1mb250LXdlaWdodDpjYWxjKDQwMCAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1i''@;'; put 'put ''YXNlKSkpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemU6Y2FsYygxMyAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0OjEuMjMwNzdlbTstLWNkcy1nbG9iYWwtdHlwb2dy''@;'; put 'put ''YXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmc6LS4wMDc2OTJlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQ6NDAwOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplOmNhbGMoMTEgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2Nh''@;'; put 'put ''bGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNhcHRpb24tbGluZS1oZWlnaHQ6MS40NTQ1NDVlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nOi4wMTgxODJlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0OjQw''@;'; put 'put ''MDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC1zaXplOmNhbGMoMTAgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1saW5lLWhlaWdodDoxLjJlbTstLWNkcy1nbG9iYWwtdHlwb2dyYXBo''@;'; put 'put ''eS1zbWFsbGNhcHRpb24tbGV0dGVyLXNwYWNpbmc6LjA1ZW07LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1pbmZvLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWds''@;'; put 'put ''b2JhbC10eXBvZ3JhcGh5LXN1Y2Nlc3MtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi04MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXdhcm5pbmctaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS05MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRhbmdl''@;'; put 'put ''ci1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC04MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LW5ldXRyYWwtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNhYmxlZDp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc2FibGVkLWJ1dHRvbjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MDApOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tZHVyYXRpb24taW5zdGFudDowczstLWNkcy1nbG9iYWwt''@;'; put 'put ''YW5pbWF0aW9uLWR1cmF0aW9uLXF1aWNrZXN0Oi4xczstLWNkcy1nbG9iYWwtYW5pbWF0aW9uLWR1cmF0aW9uLXF1aWNrZXI6LjE1czstLWNkcy1nbG9iYWwtYW5pbWF0aW9uLWR1cmF0aW9uLXF1aWNrOi4yczstLWNkcy1nbG9iYWwtYW5pbWF0aW9uLWR1cmF0aW9uLXNlY29uZGFyeTouM3M7''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWFuaW1hdGlvbi1kdXJhdGlvbi1wcmltYXJ5Oi40czstLWNkcy1nbG9iYWwtYW5pbWF0aW9uLWR1cmF0aW9uLXNsb3c6LjVzOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tZHVyYXRpb24tc2xvd2VyOi43czstLWNkcy1nbG9iYWwtYW5pbWF0aW9uLWR1cmF0aW9uLXNsb3dl''@;'; put 'put ''c3Q6LjhzOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tZWFzaW5nLXByaW1hcnk6Y3ViaWMtYmV6aWVyKDAsLjk5LDAsLjk5KTstLWNkcy1nbG9iYWwtYW5pbWF0aW9uLWVhc2luZy1zZWNvbmRhcnk6Y3ViaWMtYmV6aWVyKDAsIDEuNSwgLjUsIDEpOy0tY2RzLWdsb2JhbC1hbmltYXRpb24tZWFz''@;'; put 'put ''aW5nLWxvb3A6Y3ViaWMtYmV6aWVyKC4xNywgLjQsIC44LCAuNzkpOy0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMDpjYWxjKDQgKiAoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0yMDA6Y2FsYygxMiAq''@;'; put 'put ''ICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTMwMDo1MCU7LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDA6Y2FsYygxICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jZHMtYWxpYXMt''@;'; put 'put ''b2JqZWN0LWJvcmRlci13aWR0aC0yMDA6Y2FsYygyICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0zMDA6Y2FsYygzICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jZHMtYWxpYXMtb2JqZWN0LWJv''@;'; put 'put ''cmRlci13aWR0aC00MDA6Y2FsYyg0ICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3ItdGlu''@;'; put 'put ''dDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDApOy0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3Itc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKTstLWNkcy1hbGlhcy1vYmplY3Qtc2hhZG93LTEwMDowIGNhbGMoKDEgLyB2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkgKiAxcmVtKSBjYWxjKCgzIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpICogMXJlbSkgMCBoc2xhKDE5OCwgMzAlLCAxNSUsIC41KTstLWNkcy1hbGlhcy1vYmplY3Qtc2hhZG93LTIwMDowIGNhbGMoKDEgLyB2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWJhc2UsIDIwKSkgKiAxcmVtKSBjYWxjKCgzIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpICogMXJlbSkgMCBoc2xhKDE5OCwgMzAlLCAxNSUsIC4zKTstLWNkcy1hbGlhcy1vYmplY3Qtc2hhZG93LTMwMDowIGNhbGMoKDEgLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UsIDIwKSkgKiAx''@;'; put 'put ''cmVtKSBjYWxjKCgzIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlLCAyMCkpICogMXJlbSkgMCBoc2xhKDE5OCwgMzAlLCAxNSUsIC4yKTstLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0wOmhzbGEoMCwgMCUsIDAlLCAwKTstLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0xMDA6aHNsYSgwLCAw''@;'; put 'put ''JSwgMCUsIC4yKTstLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0yMDA6aHNsYSgwLCAwJSwgMCUsIC40KTstLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0zMDA6aHNsYSgwLCAwJSwgMCUsIC42KTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZTpIaWdobGlnaHQgc29s''@;'; put 'put ''aWQgMnB4Oy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lLXdlYmtpdDo1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3I7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUtb2Zmc2V0OjFweDstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rp''@;'; put 'put ''b24tdG91Y2gtdGFyZ2V0OmNhbGMoMzYgKiAoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWlu''@;'; put 'put ''dGVyYWN0aW9uLWJhY2tncm91bmQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci13aGl0ZSk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFj''@;'; put 'put ''dGlvbi1iYWNrZ3JvdW5kLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03NSk7LS1jZHMtYWxpYXMtb2JqZWN0''@;'; put 'put ''LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25z''@;'; put 'put ''dHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1kaXNhYmxlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci1ibHVlLTcwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb29sLWdyYXktNTApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLWhvdmVyOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03NSk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUt''@;'; put 'put ''c2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci13aGl0ZSk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtc2VsZWN0ZWQtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50''@;'; put 'put ''ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1zZWxlY3RlZC1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNk''@;'; put 'put ''cy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDAw''@;'; put 'put ''KTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3Itc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1''@;'; put 'put ''Y3Rpb24tMzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtODAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1jbGljazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtOTAwKTstLWNk''@;'; put 'put ''cy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTkwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8tc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTkwMCk7LS1jZHMtYWxpYXMtb2Jq''@;'; put 'put ''ZWN0LWludGVyYWN0aW9uLWluZm8tc2Vjb25kYXJ5LWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXN1Y2Nlc3MtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi04MDApOy0tY2RzLWFsaWFzLW9iamVj''@;'; put 'put ''dC1pbnRlcmFjdGlvbi1zdWNjZXNzLWNsaWNrOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tc3VjY2Vzcy1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi05MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRl''@;'; put 'put ''cmFjdGlvbi1zdWNjZXNzLXNlY29uZGFyeS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTUwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24td2FybmluZy1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWlu''@;'; put 'put ''dGVyYWN0aW9uLXdhcm5pbmctY2xpY2s6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi05MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi13YXJuaW5nLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTkwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0''@;'; put 'put ''aW9uLXdhcm5pbmctc2Vjb25kYXJ5LWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNTApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1kYW5nZXItaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtODAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rp''@;'; put 'put ''b24tZGFuZ2VyLWNsaWNrOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTkwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWRhbmdlci1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFuZ2VyLXNl''@;'; put 'put ''Y29uZGFyeS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC01MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW5ldXRyYWwtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tbmV1''@;'; put 'put ''dHJhbC1jbGljazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1uZXV0cmFsLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFj''@;'; put 'put ''dGlvbi1uZXV0cmFsLXNlY29uZGFyeS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWludmVyc2UtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlh''@;'; put 'put ''cy1vYmplY3QtaW50ZXJhY3Rpb24taW52ZXJzZS1jbGljazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbnZlcnNlLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0t''@;'; put 'put ''Y2RzLWFsaWFzLW9iamVjdC1hcHAtYmFja2dyb3VuZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yNSk7LS1jZHMtYWxpYXMtb2JqZWN0LW92ZXJsYXktYmFja2dyb3VuZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKTstLWNkcy1hbGlhcy1vYmplY3Qtb3Zlcmxh''@;'; put 'put ''eS1iYWNrZHJvcC1iYWNrZ3JvdW5kOmhzbGEoMCwgMCUsIDAlLCAuNik7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC10aW50OnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtZGFyazp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS01MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2U6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQt''@;'; put 'put ''aW52ZXJzZS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2Utc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTAwKTstLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtY29udGFpbmVyLWJhY2tkcm9wLWJhY2tncm91bmQ6aHNsYSgwLCAwJSwgMTAwJSwgLjYpOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWluZm86dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWluZm8tdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTApOy0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWFsaWFz''@;'; put 'put ''LXN0YXR1cy1zdWNjZXNzOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNzAwKTstLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcy10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNTApOy0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItZ3JlZW4tODAwKTstLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZzp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTUwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmctdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTEwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLXdh''@;'; put 'put ''cm5pbmctc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS02MDApOy0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLWRhcms6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS04MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQt''@;'; put 'put ''NzAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNTApOy0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXItc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtODAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLWRhcms6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtOTAwKTstLWNkcy1hbGlhcy1zdGF0dXMtbmV1dHJhbDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24t''@;'; put 'put ''NTApOy0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTcwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTMwMCk7LS1jZHMtYWxpYXMtc3RhdHVz''@;'; put 'put ''LWRpc2FibGVkLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNDAwKTstLWNkcy1hbGlhcy1zdGF0dXMtYWx0OnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtY29sb3ItdmlvbGV0LTcwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWFsdC10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTYwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWFsdC1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC05MDApOy0tY2RzLWFsaWFzLXV0''@;'; put 'put ''aWxpdHktZ3JheTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktZ3JheS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwKTstLWNkcy1hbGlhcy11dGlsaXR5LWdyYXktc2hhZGU6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ibHVlLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwKTstLWNkcy1hbGlhcy11dGls''@;'; put 'put ''aXR5LWJsdWUtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTgwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1saWdodC1ibHVlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0zMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktbGlnaHQtYmx1ZS10aW50OnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItYmx1ZS01MCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1saWdodC1ibHVlLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS02MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktZGFyay1ibHVlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtODAwKTstLWNkcy1hbGlhcy11dGls''@;'; put 'put ''aXR5LWRhcmstYmx1ZS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtNTApOy0tY2RzLWFsaWFzLXV0aWxpdHktZGFyay1ibHVlLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtMTAwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ncmVlbjp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLWdyZWVuLTcwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ncmVlbi10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNTApOy0tY2RzLWFsaWFzLXV0aWxpdHktZ3JlZW4tc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi04MDApOy0tY2RzLWFsaWFzLXV0aWxp''@;'; put 'put ''dHkteWVsbG93OnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNTAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXllbGxvdy10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMTAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXllbGxvdy1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9y''@;'; put 'put ''LW9jaHJlLTcwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1yZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXJlZC10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTUwKTstLWNkcy1hbGlhcy11dGlsaXR5LXJlZC1zaGFkZTp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLXJlZC04MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktdGFuZ2VyaW5lOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTQwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS10YW5nZXJpbmUtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS01MCk7''@;'; put 'put ''LS1jZHMtYWxpYXMtdXRpbGl0eS10YW5nZXJpbmUtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtNjAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXZpb2xldDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC02MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktdmlvbGV0LXRp''@;'; put 'put ''bnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNTApOy0tY2RzLWFsaWFzLXV0aWxpdHktdmlvbGV0LXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTgwMCk7LS1jZHMtYWxpYXMtdml6LWJvcmRlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0x''@;'; put 'put ''MTAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xLWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTYwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMi12aW9sZXQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNjAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0zLWFx''@;'; put 'put ''dWE6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTgwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNC1saW1lOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGltZS03MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTUtYmx1ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtODAwKTst''@;'; put 'put ''LWNkcy1hbGlhcy12aXotZ2VuZXJhbC02LWFxdWE6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTEwMDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTctdmlvbGV0OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTgwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtOC1saW1lOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3ItbGltZS05MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTktYmx1ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xMC1saW1lOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGltZS0xMDAwKTstLWNk''@;'; put 'put ''cy1hbGlhcy12aXotZ2VuZXJhbC0xMS1hcXVhOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS02MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTEyLXZpb2xldDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0xMDAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xMy12aW9sZXQ6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNzAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xNC1ibHVlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0xMDAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xNS1hcXVhOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS03MDAp''@;'; put 'put ''Oy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTE2LWxpbWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTgwMCk7LS1jZHMtYWxpYXMtdml6LXNldmVyaXR5LW5ldXRyYWw6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy12aXotc2V2ZXJpdHkt''@;'; put 'put ''c3VjY2Vzczp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNldmVyaXR5LXdhcm5pbmc6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctNzAwKTstLWNkcy1hbGlhcy12aXotc2V2ZXJpdHktd2FybmluZy1saWdodDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLXllbGxvdy00MDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS1pbW1lZGlhdGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtNDAwKTstLWNkcy1hbGlhcy12aXotc2V2ZXJpdHktY3JpdGljYWw6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNzAwKTstLWNkcy1h''@;'; put 'put ''bGlhcy12aXotc2V2ZXJpdHktZnJlZS1zcGFjZS1maWxsOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1jZHMtYWxpYXMtdml6LXNldmVyaXR5LWZyZWUtc3BhY2UtYm9yZGVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTQwMCk7LS1jZHMt''@;'; put 'put ''YWxpYXMtdml6LXNlcXVlbnRpYWwtYmx1ZS01MDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0xMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtMjAw''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0zMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1''@;'; put 'put ''ZS00MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1''@;'; put 'put ''ZW50aWFsLWJsdWUtNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS03MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtOTAwOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtY29sb3ItYmx1ZS05MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWJsdWUtMTAwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMTAwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTUwKTst''@;'; put 'put ''LWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTEwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1''@;'; put 'put ''ZW50aWFsLXZpb2xldC0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTQwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTUwMDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC01MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtNzAwOnZhcigtLWNkcy1nbG9iYWwtY29s''@;'; put 'put ''b3ItdmlvbGV0LTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC05MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtOTAwKTstLWNk''@;'; put 'put ''cy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtMTAwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0xMDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS01MDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTUwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlh''@;'; put 'put ''bC1vY2hyZS0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS0xMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTIwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtMzAwOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtY29sb3Itb2NocmUtMzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS00MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS00MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTUwMCk7''@;'; put 'put ''LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS03MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50''@;'; put 'put ''aWFsLW9jaHJlLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTgwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtOTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS0xMDAwOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtY29sb3Itb2NocmUtMTAwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtYXF1YS01MDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNTApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0xMDApOy0t''@;'; put 'put ''Y2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0zMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFx''@;'; put 'put ''dWEtNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS00MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS01MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtNjAwOnZhcigtLWNkcy1nbG9iYWwtY29s''@;'; put 'put ''b3ItYXF1YS02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS03MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS04MDApOy0tY2RzLWFsaWFzLXZp''@;'; put 'put ''ei1zZXF1ZW50aWFsLWFxdWEtOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS05MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWFxdWEtMTAwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtMTAwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tNTA6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVl''@;'; put 'put ''bi0yMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTMwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNDAwKTstLWNkcy1hbGlhcy12aXot''@;'; put 'put ''c2VxdWVudGlhbC1ncmVlbi01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi01MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTYwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tNzAwOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTkwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdy''@;'; put 'put ''ZWVuLTkwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tMTAwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTEwMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC01MDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC01MCk7LS1jZHMtYWxpYXMtdml6LXNl''@;'; put 'put ''cXVlbnRpYWwtcmVkLTEwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC0xMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtMzAwOnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtY29sb3ItcmVkLTMwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTQwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC00MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNTAwKTstLWNkcy1hbGlhcy12''@;'; put 'put ''aXotc2VxdWVudGlhbC1yZWQtNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTYwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTcwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC04MDA6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci1yZWQtODAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTkwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTEwMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMTAwMCk7LS1jZHMt''@;'; put 'put ''YWxpYXMtdml6LWRpdmVyZ2luZy12aW9sZXQtYXF1YS12LTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0yMDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctdmlvbGV0LWFxdWEtdi0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMzAwKTstLWNkcy1hbGlhcy12''@;'; put 'put ''aXotZGl2ZXJnaW5nLXZpb2xldC1hcXVhLXYtNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTQwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy12aW9sZXQtYXF1YS12LTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC01MDApOy0tY2RzLWFsaWFzLXZpei1kaXZl''@;'; put 'put ''cmdpbmctdmlvbGV0LWFxdWEtdi02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNjAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLXZpb2xldC1hcXVhLXYtNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTcwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy12''@;'; put 'put ''aW9sZXQtYXF1YS1uZXV0cmFsOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTUwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLXZpb2xldC1hcXVhLWEtNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS00MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctdmlvbGV0LWFx''@;'; put 'put ''dWEtYS01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTUwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy12aW9sZXQtYXF1YS1hLTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNjAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLXZpb2xldC1hcXVhLWEtNzAwOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS03MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctdmlvbGV0LWFxdWEtYS04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTgwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy12aW9sZXQtYXF1YS1hLTkwMDp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLWFxdWEtOTAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1iLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMzAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1iLTQwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUt''@;'; put 'put ''NDAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1iLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1iLTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNjAwKTstLWNkcy1hbGlh''@;'; put 'put ''cy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1iLTcwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtamFkZS1iLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtODAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5n''@;'; put 'put ''LWJsdWUtamFkZS1uZXV0cmFsOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWphZGUtai0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1qYWRlLTMwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWphZGUtai00''@;'; put 'put ''MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1qYWRlLTQwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWphZGUtai01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1qYWRlLTUwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWphZGUtai02MDA6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1qYWRlLTYwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWphZGUtai03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1qYWRlLTcwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWphZGUtai04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1qYWRl''@;'; put 'put ''LTgwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWdyZWVuLWItMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0zMDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1ncmVlbi1iLTQwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNDAwKTstLWNkcy1h''@;'; put 'put ''bGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtZ3JlZW4tYi01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWdyZWVuLWItNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS02MDApOy0tY2RzLWFsaWFzLXZpei1kaXZl''@;'; put 'put ''cmdpbmctYmx1ZS1ncmVlbi1iLTcwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtZ3JlZW4tYi04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTgwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWdy''@;'; put 'put ''ZWVuLW5ldXRyYWw6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtZ3JlZW4tZy0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi0zMDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1ncmVlbi1nLTQwMDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTQwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWdyZWVuLWctNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNTAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWJsdWUtZ3JlZW4tZy02MDA6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1ncmVlbi02MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctYmx1ZS1ncmVlbi1nLTcwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTcwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ibHVlLWdyZWVuLWctODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3It''@;'; put 'put ''Z3JlZW4tODAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWdyZWVuLXllbGxvdy1yZWQtZy0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi0yMDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctZ3JlZW4teWVsbG93LXJlZC1nLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9y''@;'; put 'put ''LWdyZWVuLTMwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLWctNDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNDAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWdyZWVuLXllbGxvdy1yZWQtZy01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1ncmVlbi01MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctZ3JlZW4teWVsbG93LXJlZC1nLTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTYwMCk7LS1jZHMtYWxpYXMtdml6LWRpdmVyZ2luZy1ncmVlbi15ZWxsb3ctcmVkLWctNzAwOnZhcigtLWNkcy1nbG9iYWwtY29s''@;'; put 'put ''b3ItZ3JlZW4tNzAwKTstLWNkcy1hbGlhcy12aXotZGl2ZXJnaW5nLWdyZWVuLXllbGxvdy1yZWQtbmV1dHJhbDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy0yMDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctZ3JlZW4teWVsbG93LXJlZC1yLTQwMDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWNvbG9yLXJlZC00MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctZ3JlZW4teWVsbG93LXJlZC1yLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC01MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctZ3JlZW4teWVsbG93LXJlZC1yLTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNv''@;'; put 'put ''bG9yLXJlZC02MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctZ3JlZW4teWVsbG93LXJlZC1yLTcwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctZ3JlZW4teWVsbG93LXJlZC1yLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9y''@;'; put 'put ''LXJlZC04MDApOy0tY2RzLWFsaWFzLXZpei1kaXZlcmdpbmctZ3JlZW4teWVsbG93LXJlZC1yLTkwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC05MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktY29sb3ItMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9y''@;'; put 'put ''LTQwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi05MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtY29sb3ItYmxhY2spOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtbGlnaHQ6MzAwOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtcmVndWxhcjo0MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1tZWRpdW06NTAwOy0tY2RzLWFs''@;'; put 'put ''aWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQ6NjAwOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtYm9sZDo2MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1leHRyYWJvbGQ6NjAwOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC1zaXpl''@;'; put 'put ''LTA6Y2FsYygxMCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtMTpjYWxjKDExICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0yOmNhbGMoMTIgKiB2YXIo''@;'; put 'put ''LS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC1zaXplLTM6Y2FsYygxMyAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtNDpjYWxjKDE0ICogdmFyKC0tY2RzLWludGVybmFsLXNj''@;'; put 'put ''YWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS01OmNhbGMoMTYgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC1zaXplLTY6Y2FsYygyMCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxp''@;'; put 'put ''YXMtdHlwb2dyYXBoeS1mb250LXNpemUtNzpjYWxjKDI0ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS04OmNhbGMoMzIgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9u''@;'; put 'put ''dC1zaXplLTk6Y2FsYyg0MCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LWZhbWlseToiQ2xhcml0eSBDaXR5IiwgIkF2ZW5pciBOZXh0Iiwgc2Fucy1zZXJpZjstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWhlYWRlci1mb250LWZhbWls''@;'; put 'put ''eToiQ2xhcml0eSBDaXR5IiwgIkF2ZW5pciBOZXh0Iiwgc2Fucy1zZXJpZjstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LW1vbm9zcGFjZS1mb250LWZhbWlseTp1aS1tb25vc3BhY2UsIENvbnNvbGFzLCBNZW5sbywgTW9uYWNvLCBtb25vc3BhY2U7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS10b3At''@;'; put 'put ''Z2FwLWhlaWdodDouMTQ3NWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0Oi4xNzAzZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS14LWhlaWdodDouNTE3ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1''@;'; put 'put ''ZS03MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvci1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtODAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxhdmVuZGVyLTYwMCk7LS1jZHMt''@;'; put 'put ''YWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1sYXZlbmRlci03MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1vbi1jb2xvcmJnOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmxhY2spOy0tY2RzLWFsaWFzLXR5cG9n''@;'; put 'put ''cmFwaHktYm9keS1mb250LXNpemU6Y2FsYygxNCAqIHZhcigtLWNkcy1pbnRlcm5hbC1zY2FsZS0zKSk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0OjEuNDI4NTcxNGVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZzotLjAwNzE0Mjg2''@;'; put 'put ''ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0OjQwMDstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC1zaXplOmNhbGMoNDAgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzcGxheS1saW5lLWhl''@;'; put 'put ''aWdodDoxLjFlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktbGV0dGVyLXNwYWNpbmc6LS4wMTI1ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNwbGF5LWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWhlYWRpbmctZm9udC1zaXplOmNhbGMoMzIgKiB2''@;'; put 'put ''YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGluZy1saW5lLWhlaWdodDoxLjEyNWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGluZy1sZXR0ZXItc3BhY2luZzotLjAxMjVlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWhlYWRpbmct''@;'; put 'put ''Zm9udC13ZWlnaHQ6NTAwOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGxpbmUtZm9udC1zaXplOmNhbGMoMzIgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGxpbmUtbGluZS1oZWlnaHQ6MS4xMjVlbTstLWNkcy1hbGlhcy10eXBv''@;'; put 'put ''Z3JhcGh5LWhlYWRsaW5lLWxldHRlci1zcGFjaW5nOi0uMDEyNWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGxpbmUtZm9udC13ZWlnaHQ6NTAwOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktdGl0bGUtZm9udC1zaXplOmNhbGMoMjQgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykp''@;'; put 'put ''Oy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQ6MS4zMzMzMzNlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXRpdGxlLWxldHRlci1zcGFjaW5nOi0uMDA4MzMzMzNlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXRpdGxlLWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC1zaXplOmNhbGMoMjAgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodDoxLjJlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmc6''@;'; put 'put ''LS4wMWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXdlaWdodDo1MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtc2l6ZTpjYWxjKDE2ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNl''@;'; put 'put ''Y3Rpb24tbGluZS1oZWlnaHQ6MS41ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxldHRlci1zcGFjaW5nOi0uMDEyNWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXdlaWdodDo1MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1tZXNzYWdlLWZv''@;'; put 'put ''bnQtc2l6ZTpjYWxjKDE2ICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LW1lc3NhZ2UtbGluZS1oZWlnaHQ6MS41ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1tZXNzYWdlLWxldHRlci1zcGFjaW5nOi0uMDEyNWVtOy0tY2RzLWFsaWFzLXR5''@;'; put 'put ''cG9ncmFwaHktbWVzc2FnZS1mb250LXdlaWdodDpjYWxjKDQwMCAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZTpjYWxjKDEzICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodDoxLjIzMDc3ZW07LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmc6LS4wMDc2OTJlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodDo0MDA7LS1jZHMtYWxpYXMt''@;'; put 'put ''dHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZTpjYWxjKDExICogdmFyKC0tY2RzLWludGVybmFsLXNjYWxlLTMpKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGluZS1oZWlnaHQ6MS40NTQ1NDVlbTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGV0dGVyLXNwYWNp''@;'; put 'put ''bmc6LjAxODE4MmVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodDo0MDA7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC1zaXplOmNhbGMoMTAgKiB2YXIoLS1jZHMtaW50ZXJuYWwtc2NhbGUtMykpOy0tY2RzLWFsaWFzLXR5cG9ncmFw''@;'; put 'put ''aHktc21hbGxjYXB0aW9uLWxpbmUtaGVpZ2h0OjEuMmVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxldHRlci1zcGFjaW5nOi4wNWVtOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWZvbnQtd2VpZ2h0OjUwMDstLWNkcy1hbGlhcy10eXBvZ3JhcGh5''@;'; put 'put ''LWluZm8taG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTgwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWNjZXNzLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tODAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXdhcm5pbmctaG92ZXI6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1vY2hyZS05MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGFuZ2VyLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTgwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1uZXV0cmFsLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTcw''@;'; put 'put ''MCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQtYnV0dG9uOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwMCk7LS1jZHMtaW50''@;'; put 'put ''ZXJuYWwtc2NhbGUtMTpjYWxjKCgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkgKiB2YXIoLS1jZHMtZ2xvYmFsLXNjYWxlLWxheW91dC1zcGFjZSkpOy0tY2RzLWludGVybmFsLXNjYWxlLTI6Y2FsYygoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpICogdmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zY2FsZS1zcGFjZSkpOy0tY2RzLWludGVybmFsLXNjYWxlLTM6Y2FsYygoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpICogdmFyKC0tY2RzLWdsb2JhbC1zY2FsZS10eXBvZ3JhcGh5KSl9aHRtbHtmb250LXNpemU6Y2FsYygodmFyKC0tY2RzLWdsb2JhbC1iYXNlKS8xNikq''@;'; put 'put ''MTAwJSk7Ym94LXNpemluZzpib3JkZXItYm94IWltcG9ydGFudH0qLDphZnRlciw6YmVmb3Jle2JveC1zaXppbmc6aW5oZXJpdCFpbXBvcnRhbnR9W2Nkcy1iYXNlLWZvbnQ9IjE2Il17LS1jZHMtZ2xvYmFsLWJhc2U6MTZ9W2Nkcy10aGVtZV17YmFja2dyb3VuZDp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''b2JqZWN0LWFwcC1iYWNrZ3JvdW5kKTtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNTAwKX1bY2RzLWNvbnRyb2xdIDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcntjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItMjAwKX1bY2RzLWNvbnRy''@;'; put 'put ''b2xdIDo6LW1vei1wbGFjZWhvbGRlcntjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItMjAwKX1bY2RzLWNvbnRyb2xdW19kaXNhYmxlZF17LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItMjAwOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpfWh0bWxb''@;'; put 'put ''Y2RzLWZvY3VzLXRyYXBde292ZXJmbG93OmhpZGRlbiFpbXBvcnRhbnQ7d2lkdGg6MTAwdnc7aGVpZ2h0OjEwMHZofVtjZHMtdGV4dF17Zm9udC1mYW1pbHk6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtZmFtaWx5KTttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowfVtjZHMt''@;'; put 'put ''dGV4dF1bY2RzLWxheW91dH49Z3JpZF06YWZ0ZXIsW2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj1ncmlkXTpiZWZvcmUsW2Nkcy10ZXh0XVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXTphZnRlcixbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdOmJlZm9yZSxbY2RzLXRleHRdW2Nkcy1s''@;'; put 'put ''YXlvdXR+PXZlcnRpY2FsXTphZnRlcixbY2RzLXRleHRdW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXTpiZWZvcmV7ZGlzcGxheTpub25lfVtjZHMtdGV4dCo9ZGlzcGxheV0sW2Nkcy10ZXh0Kj1oZWFkaW5nXSxbY2RzLXRleHQqPWhlYWRsaW5lXSxbY2RzLXRleHQqPXNlY3Rpb25dLFtjZHMtdGV4''@;'; put 'put ''dCo9c3Vic2VjdGlvbl0sW2Nkcy10ZXh0Kj10aXRsZV17Zm9udC1mYW1pbHk6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRlci1mb250LWZhbWlseSk7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTQwMCl9W2Nkcy10ZXh0Kj1ib2R5XSxbY2RzLXRleHQq''@;'; put 'put ''PWNhcHRpb25dLFtjZHMtdGV4dCo9bWVzc2FnZV0sW2Nkcy10ZXh0Kj1zZWNvbmRhcnldLFtjZHMtdGV4dCo9c21hbGxjYXB0aW9uXXtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNTAwKX1bY2RzLXRleHQqPWlubGluZV17d2lkdGg6YXV0byFpbXBvcnRhbnQ7ZGlz''@;'; put 'put ''cGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50fVtjZHMtdGV4dCo9ZGlzcGxheV17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC13ZWlnaHQp''@;'; put 'put ''O2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1sZXR0ZXItc3BhY2luZyl9W2Nkcy10ZXh0Kj1kaXNwbGF5XTpiZWZvcmV7Y29udGVudDoi''@;'; put 'put ''IjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kaXNwbGF5LWxpbmUtaGVpZ2h0KSAtIDFlbSkvMikp''@;'; put 'put ''Ki0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1kaXNwbGF5XTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzcGxheS1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4''@;'; put 'put ''dCo9aGVhZGluZ10sW2Nkcy10ZXh0Kj1oZWFkbGluZV17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkaW5nLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRpbmctZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1oZWFkaW5nLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktaGVhZGluZy1sZXR0ZXItc3BhY2luZyl9W2Nkcy10ZXh0Kj1oZWFkaW5nXTpiZWZvcmUsW2Nkcy10ZXh0Kj1oZWFkbGluZV06YmVm''@;'; put 'put ''b3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktaGVhZGluZy1saW5lLWhlaWdo''@;'; put 'put ''dCkgLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9aGVhZGluZ106YWZ0ZXIsW2Nkcy10ZXh0Kj1oZWFkbGluZV06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''dHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWhlYWRpbmctbGluZS1o''@;'; put 'put ''ZWlnaHQpIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXRpdGxlXXtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRpdGxlLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRpdGxlLWZvbnQtd2VpZ2h0KTts''@;'; put 'put ''aW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10aXRsZS1sZXR0ZXItc3BhY2luZyl9W2Nkcy10ZXh0Kj10aXRsZV06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxh''@;'; put 'put ''eTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpICsgLjAz''@;'; put 'put ''N2VtKX1bY2RzLXRleHQqPXRpdGxlXTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dy''@;'; put 'put ''YXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdGl0bGUtbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXNlY3Rpb25de2Zv''@;'; put 'put ''bnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1s''@;'; put 'put ''aW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpfVtjZHMtdGV4dCo9c2VjdGlvbl06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2Fs''@;'; put 'put ''YygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9c2VjdGlvbl06YWZ0ZXJ7Y29udGVudDoi''@;'; put 'put ''IjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXN1YnNlY3Rpb25de2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFw''@;'; put 'put ''aHktc3Vic2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNp''@;'; put 'put ''bmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpfVtjZHMtdGV4dCo9c3Vic2VjdGlvbl06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9c3Vic2VjdGlvbl06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJs''@;'; put 'put ''b2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBo''@;'; put 'put ''eS14LWhlaWdodCkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPWJvZHlde2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWZvbnQt''@;'; put 'put ''d2VpZ2h0KTtmb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5''@;'; put 'put ''LWJvZHktbGluZS1oZWlnaHQpfVtjZHMtdGV4dCo9Ym9keV06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCh2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgKyAuMWVtKX1bY2RzLXRleHQqPWJvZHldOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1ib2R5LWxpbmUt''@;'; put 'put ''aGVpZ2h0KSAtIDFlbSkvMikpKi0xKSAtIC4wNDRlbSl9Ym9keVtjZHMtdGV4dCo9Ym9keV06YWZ0ZXIsYm9keVtjZHMtdGV4dCo9Ym9keV06YmVmb3Jle2NvbnRlbnQ6bm9uZX1bY2RzLXRleHQqPW1lc3NhZ2Vde2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2Fn''@;'; put 'put ''ZS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tZXNzYWdlLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC10eXBvZ3JhcGh5LW1lc3NhZ2UtbGV0dGVyLXNwYWNpbmcpfVtjZHMtdGV4dCo9bWVzc2FnZV06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhl''@;'; put 'put ''aWdodCkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbWVzc2FnZS1saW5lLWhlaWdodCkgLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9bWVzc2FnZV06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRv''@;'; put 'put ''cDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygodmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC10eXBvZ3JhcGh5LW1lc3NhZ2UtbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXNlY29uZGFyeV17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRl''@;'; put 'put ''ci1zcGFjaW5nKX1bY2RzLXRleHQqPXNlY29uZGFyeV06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCh2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0KSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1zZWNvbmRhcnldOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1z''@;'; put 'put ''ZWNvbmRhcnktbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPWNhcHRpb25de2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1j''@;'; put 'put ''YXB0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNhcHRpb24tbGV0dGVyLXNwYWNpbmcpfVtjZHMtdGV4dCo9Y2FwdGlv''@;'; put 'put ''bl06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY2FwdGlvbi1saW5l''@;'; put 'put ''LWhlaWdodCkgLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9Y2FwdGlvbl06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhl''@;'; put 'put ''aWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNhcHRpb24tbGluZS1oZWlnaHQpIC0gMWVtKS8yKSkqLTEp''@;'; put 'put ''IC0gLjA0NGVtKX1bY2RzLXRleHQqPXNtYWxsY2FwdGlvbl17Zm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWZvbnQtd2VpZ2h0KTts''@;'; put 'put ''aW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxldHRlci1zcGFjaW5nKX1bY2RzLXRleHQqPXNtYWxsY2FwdGlvbl06YmVm''@;'; put 'put ''b3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxpbmUt''@;'; put 'put ''aGVpZ2h0KSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1zbWFsbGNhcHRpb25dOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdh''@;'; put 'put ''cC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGluZS1oZWlnaHQpIC0gMWVt''@;'; put 'put ''KS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHR+PWxpbmtde2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yKSFpbXBvcnRhbnQ7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZSFpbXBvcnRhbnQ7bGluZS1oZWlnaHQ6aW5oZXJpdCFpbXBvcnRhbnQ7Zm9udC1z''@;'; put 'put ''aXplOmluaGVyaXQhaW1wb3J0YW50fVtjZHMtdGV4dH49bGlua106Zm9jdXN7b3V0bGluZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUpO291dGxpbmUtb2Zmc2V0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZS1vZmZzZXQpfVtj''@;'; put 'put ''ZHMtdGV4dH49bGlua106aG92ZXJ7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItaG92ZXIpIWltcG9ydGFudH1bY2RzLXRleHR+PWxpbmtdOnZpc2l0ZWQ6bm90KFtjZHMtdGV4dH49c3RhdGljXSksW2Nkcy10ZXh0fj1saW5rXVtjZHMtdGV4dH49dmlzaXRl''@;'; put 'put ''ZF17Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItdmlzaXRlZCkhaW1wb3J0YW50fVtjZHMtdGV4dH49bGlua106dmlzaXRlZDpub3QoW2Nkcy10ZXh0fj1zdGF0aWNdKTpob3ZlcixbY2RzLXRleHR+PWxpbmtdW2Nkcy10ZXh0fj12aXNpdGVkXTpob3Zlcntj''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci12aXNpdGVkLWhvdmVyKSFpbXBvcnRhbnR9QG1lZGlhICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86MCl7W2Nkcy10ZXh0PWxpbmtdOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1p''@;'; put 'put ''bnRlcmFjdGlvbi1vdXRsaW5lLXdlYmtpdCl9fVtjZHMtdGV4dH49Y29kZV17Y29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpO2ZvbnQtZmFtaWx5Om1vbm9zcGFjZX1bY2RzLWRpdmlkZXJde2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9y''@;'; put 'put ''ZGVyLXdpZHRoLTEwMCk7b3ZlcmZsb3c6aGlkZGVuO2JveC1zaGFkb3c6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpIDAgMCAwIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgaW5zZXR9W2Nkcy10ZXh0fj1leHRyYWJvbGRde2ZvbnQtd2VpZ2h0''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1leHRyYWJvbGQpIWltcG9ydGFudH1bY2RzLXRleHR+PWJvbGRde2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1ib2xkKSFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1zZW1pYm9s''@;'; put 'put ''ZF17Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKSFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1tZWRpdW1de2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1tZWRpdW0pIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLXRleHR+PXJlZ3VsYXJde2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1yZWd1bGFyKSFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1saWdodF17Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWxpZ2h0''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1jYXBpdGFsaXplXXt0ZXh0LXRyYW5zZm9ybTpjYXBpdGFsaXplIWltcG9ydGFudH1bY2RzLXRleHR+PXVwcGVyY2FzZV17dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlIWltcG9ydGFudH1bY2RzLXRleHR+PWxvd2VyY2FzZV17dGV4dC10cmFuc2Zvcm06''@;'; put 'put ''bG93ZXJjYXNlIWltcG9ydGFudH1bY2RzLXRleHR+PXRydW5jYXRlXXtvdmVyZmxvdzpoaWRkZW4haW1wb3J0YW50O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXMhaW1wb3J0YW50O3doaXRlLXNwYWNlOm5vd3JhcCFpbXBvcnRhbnR9W2Nkcy10ZXh0fj10cnVuY2F0ZV06YWZ0ZXIsW2Nkcy10ZXh0''@;'; put 'put ''fj10cnVuY2F0ZV06YmVmb3Jle2NvbnRlbnQ6bm9uZX1bY2RzLXRleHR+PWp1c3RpZnlde3RleHQtYWxpZ246anVzdGlmeSFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1sZWZ0XXt0ZXh0LWFsaWduOmxlZnQhaW1wb3J0YW50fVtjZHMtdGV4dH49cmlnaHRde3RleHQtYWxpZ246cmlnaHQhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtdGV4dH49Y2VudGVyXXt0ZXh0LWFsaWduOmNlbnRlciFpbXBvcnRhbnR9W2Nkcy10ZXh0fj1tb25vc3BhY2Vde2ZvbnQtZmFtaWx5OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1tb25vc3BhY2UtZm9udC1mYW1pbHkpfVtjZHMtdGV4dH49bGhlXXtwYWRkaW5nOi4wNXB4''@;'; put 'put ''IDB9W2Nkcy10ZXh0fj1saGVdOmJlZm9yZXtjb250ZW50OiIiO21hcmdpbi10b3A6LS4xMjRlbTtkaXNwbGF5OmJsb2NrO2hlaWdodDowfVtjZHMtdGV4dH49bGhlXTphZnRlcntjb250ZW50OiIiO21hcmdpbi1ib3R0b206LS4yMjFlbTtkaXNwbGF5OmJsb2NrO2hlaWdodDowfVtjZHMtbGF5''@;'; put 'put ''b3V0fj1kaXNhYmxlLWxoZV06YWZ0ZXIsW2Nkcy1sYXlvdXR+PWRpc2FibGUtbGhlXTpiZWZvcmUsW2Nkcy10ZXh0fj1kaXNhYmxlLWxoZV06YWZ0ZXIsW2Nkcy10ZXh0fj1kaXNhYmxlLWxoZV06YmVmb3Jle2NvbnRlbnQ6bm9uZX1bY2RzLXRleHQqPWgwXSxbY2RzLXRleHQqPWgxXSxbY2Rz''@;'; put 'put ''LXRleHQqPWgyXSxbY2RzLXRleHQqPWgzXSxbY2RzLXRleHQqPWg0XSxbY2RzLXRleHQqPWg1XSxbY2RzLXRleHQqPWg2XXtmb250LWZhbWlseTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktaGVhZGVyLWZvbnQtZmFtaWx5LCAiQ2xhcml0eSBDaXR5IiwgIkF2ZW5pciBOZXh0Iiwgc2Fu''@;'; put 'put ''cy1zZXJpZik7Zm9udC1zaXplOjJyZW07Zm9udC13ZWlnaHQ6MjAwO2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci00MDApO2xpbmUtaGVpZ2h0OjEuMmVtO2xldHRlci1zcGFjaW5nOi0uMDEyNWVtfVtjZHMtdGV4dCo9aDBdOmJlZm9yZXtjb250ZW50OiIiO2Rpc3Bs''@;'; put 'put ''YXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgY2FsYygoMS4yZW0gLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9aDBdOmFmdGVye2NvbnRlbnQ6IiI7ZGlz''@;'; put 'put ''cGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5''@;'; put 'put ''cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKDEuMmVtIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPWgxXSxbY2RzLXRleHQqPWgyXSxbY2RzLXRleHQqPWgzXSxbY2RzLXRleHQqPWg0XSxbY2RzLXRleHQqPWg1XSxbY2RzLXRleHQqPWg2XXtmb250LXNpemU6MS42cmVt''@;'; put 'put ''O2xpbmUtaGVpZ2h0OjEuNWVtO2xldHRlci1zcGFjaW5nOi0uMDE1NmVtfVtjZHMtdGV4dCo9aDFdOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1o''@;'; put 'put ''ZWlnaHQpICsgLjI1ZW0pKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1oMV06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgLjI1ZW0pKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1oMl0sW2Nkcy10ZXh0Kj1oM10sW2Nkcy10ZXh0Kj1oNF0sW2Nkcy10ZXh0Kj1o''@;'; put 'put ''NV0sW2Nkcy10ZXh0Kj1oNl17Zm9udC1zaXplOjEuNHJlbTtsaW5lLWhlaWdodDoxLjcxNDNlbTtsZXR0ZXItc3BhY2luZzotLjAxNzg1N2VtfVtjZHMtdGV4dCo9aDJdOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMo''@;'; put 'put ''KCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgY2FsYygoMS43MTQzZW0gLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9aDJdOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2Fs''@;'; put 'put ''YygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKDEuNzE0M2VtIC0gMWVt''@;'; put 'put ''KS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPWgzXSxbY2RzLXRleHQqPWg0XSxbY2RzLXRleHQqPWg1XSxbY2RzLXRleHQqPWg2XXtmb250LXNpemU6MS4xcmVtO2xpbmUtaGVpZ2h0OjEuMDkwOWVtO2xldHRlci1zcGFjaW5nOi0uMDEzNjM2ZW19W2Nkcy10ZXh0Kj1oM106YmVmb3Jl''@;'; put 'put ''e2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCgxLjA5MDllbSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1oM106''@;'; put 'put ''YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAt''@;'; put 'put ''IHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygoMS4wOTA5ZW0gLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9aDRdLFtjZHMtdGV4dCo9aDVdLFtjZHMtdGV4dCo9aDZde2ZvbnQtc2l6ZTouOXJlbTtsaW5lLWhlaWdodDoxLjMzMzMzM2Vt''@;'; put 'put ''O2xldHRlci1zcGFjaW5nOi0uMDExMTExZW19W2Nkcy10ZXh0Kj1oNF06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCgx''@;'; put 'put ''LjMzMzMzM2VtIC0gMWVtKS8yKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWg0XTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0''@;'; put 'put ''KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCgxLjMzMzMzM2VtIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPWg1XSxbY2RzLXRleHQqPWg2XXtm''@;'; put 'put ''b250LXNpemU6LjhyZW07Zm9udC13ZWlnaHQ6NDAwO2xpbmUtaGVpZ2h0OjEuNWVtO2xldHRlci1zcGFjaW5nOi0uMDEyNWVtfVtjZHMtdGV4dCo9aDVdOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgLjI1ZW0pKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1oNV06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''dHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgLjI1ZW0pKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1oNl17Zm9udC1zaXplOi43''@;'; put 'put ''cmVtO2ZvbnQtd2VpZ2h0OjUwMDtsZXR0ZXItc3BhY2luZzotLjAzMTI1ZW19W2Nkcy10ZXh0Kj1oNl06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2Fw''@;'; put 'put ''LWhlaWdodCkgKyAuMjVlbSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPWg2XTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAt''@;'; put 'put ''IHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyAuMjVlbSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXAwXSxbY2RzLXRleHQqPXAxXXtmb250LXNpemU6MS4ycmVtO2ZvbnQtd2Vp''@;'; put 'put ''Z2h0OjQwMDtjb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNTAwKTtsaW5lLWhlaWdodDoxLjE2NjY3ZW07bGV0dGVyLXNwYWNpbmc6LS4wMDgzMzNlbX1bY2RzLXRleHQqPXAwXTpiZWZvcmV7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7''@;'; put 'put ''bWFyZ2luLWJvdHRvbTpjYWxjKCgodmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSArIGNhbGMoKDEuMTY2NjdlbSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1wMF06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dp''@;'; put 'put ''ZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsg''@;'; put 'put ''Y2FsYygoMS4xNjY2N2VtIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX1bY2RzLXRleHQqPXAxXXtmb250LXNpemU6LjdyZW07Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7bGluZS1oZWlnaHQ6MS43MTQyOWVtO2xldHRlci1zcGFjaW5nOi0uMDE0Mjg2ZW19''@;'; put 'put ''W2Nkcy10ZXh0Kj1wMV06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCgxLjcxNDI5ZW0gLSAxZW0pLzIpKSotMSkgKyAu''@;'; put 'put ''MDM3ZW0pfVtjZHMtdGV4dCo9cDFdOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3Jh''@;'; put 'put ''cGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKDEuNzE0MjllbSAtIDFlbSkvMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1wMl0sW2Nkcy10ZXh0Kj1wM10sW2Nkcy10ZXh0Kj1wNF0sW2Nkcy10ZXh0Kj1wNV17''@;'; put 'put ''Zm9udC1zaXplOi42NXJlbTtmb250LXdlaWdodDo1MDA7Y29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7bGluZS1oZWlnaHQ6MS44NDYxNWVtO2xldHRlci1zcGFjaW5nOi0uMDA3NjkyZW19W2Nkcy10ZXh0Kj1wMl06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxh''@;'; put 'put ''eTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyBjYWxjKCgxLjg0NjE1ZW0gLSAxZW0pLzIpKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4dCo9cDJdOmFmdGVye2NvbnRlbnQ6IiI7''@;'; put 'put ''ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKDEuODQ2MTVlbSAtIDFlbSkvMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1wM10sW2Nkcy10ZXh0Kj1wNF0sW2Nkcy10ZXh0Kj1wNV17Zm9udC13ZWlnaHQ6NDAwfVtjZHMtdGV4dCo9cDNdOmJlZm9yZXtjb250ZW50OiIiO2Rpc3Bs''@;'; put 'put ''YXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgY2FsYygoMS44NDYxNWVtIC0gMWVtKS8yKSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPXAzXTphZnRlcntjb250ZW50OiIi''@;'; put 'put ''O2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMoKCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyBjYWxjKCgxLjg0NjE1ZW0gLSAxZW0pLzIpKSotMSkgLSAuMDQ0ZW0pfVtjZHMtdGV4dCo9cDRdLFtjZHMtdGV4dCo9cDVde2ZvbnQtc2l6ZTouNnJlbTtmb250LXdlaWdodDo2MDA7bGluZS1oZWlnaHQ6MmVtO2xldHRlci1zcGFjaW5nOi0uMDA4''@;'; put 'put ''MzMzZW19W2Nkcy10ZXh0Kj1wNF06YmVmb3Jle2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi1ib3R0b206Y2FsYygoKHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgKyAuNWVtKSotMSkgKyAuMDM3ZW0pfVtjZHMtdGV4''@;'; put 'put ''dCo9cDRdOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWFzY2VuZGVyLWhl''@;'; put 'put ''aWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIC41ZW0pKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1wNV17Zm9udC13ZWlnaHQ6NDAwfVtjZHMtdGV4dCo9cDVdOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDtt''@;'; put 'put ''YXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgLjVlbSkqLTEpICsgLjAzN2VtKX1bY2RzLXRleHQqPXA1XTphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tdG9wOmNhbGMo''@;'; put 'put ''KCgoMWVtIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXRvcC1nYXAtaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1hc2NlbmRlci1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXgtaGVpZ2h0KSkgKyAuNWVtKSotMSkgLSAuMDQ0ZW0pfVtj''@;'; put 'put ''ZHMtdGV4dCo9cDZdLFtjZHMtdGV4dCo9cDddLFtjZHMtdGV4dCo9cDhde2ZvbnQtc2l6ZTouNTVyZW07Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci00MDApO2xpbmUtaGVpZ2h0OjEuMDkwOTA5ZW07bGV0dGVyLXNwYWNpbmc6LjAxODE4''@;'; put 'put ''MmVtfVtjZHMtdGV4dCo9cDZdOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgY2FsYygoMS4wOTA5MDllbSAtIDFlbSkvMikpKi0x''@;'; put 'put ''KSArIC4wMzdlbSl9W2Nkcy10ZXh0Kj1wNl06YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5''@;'; put 'put ''cG9ncmFwaHktYXNjZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygoMS4wOTA5MDllbSAtIDFlbSkvMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1wN10sW2Nkcy10ZXh0Kj1wOF17Zm9udC13ZWlnaHQ6NDAwfVtjZHMtdGV4''@;'; put 'put ''dCo9cDddOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgY2FsYygoMS4wOTA5MDllbSAtIDFlbSkvMikpKi0xKSArIC4wMzdlbSl9''@;'; put 'put ''W2Nkcy10ZXh0Kj1wN106YWZ0ZXJ7Y29udGVudDoiIjtkaXNwbGF5OmJsb2NrO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKCgoKDFlbSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS10b3AtZ2FwLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYXNj''@;'; put 'put ''ZW5kZXItaGVpZ2h0KSAtIHZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS14LWhlaWdodCkpICsgY2FsYygoMS4wOTA5MDllbSAtIDFlbSkvMikpKi0xKSAtIC4wNDRlbSl9W2Nkcy10ZXh0Kj1wOF17Zm9udC1zaXplOi41cmVtO2xpbmUtaGVpZ2h0OjEuMmVtO2xldHRlci1zcGFjaW5nOi4w''@;'; put 'put ''MmVtfVtjZHMtdGV4dCo9cDhdOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjA7d2lkdGg6MDttYXJnaW4tYm90dG9tOmNhbGMoKCh2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpICsgY2FsYygoMS4yZW0gLSAxZW0pLzIpKSotMSkgKyAu''@;'; put 'put ''MDM3ZW0pfVtjZHMtdGV4dCo9cDhdOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygoKCgxZW0gLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktdG9wLWdhcC1oZWlnaHQpIC0gdmFyKC0tY2RzLWdsb2JhbC10eXBvZ3Jh''@;'; put 'put ''cGh5LWFzY2VuZGVyLWhlaWdodCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHkteC1oZWlnaHQpKSArIGNhbGMoKDEuMmVtIC0gMWVtKS8yKSkqLTEpIC0gLjA0NGVtKX06aG9zdCw6cm9vdHstLVwzYjQgMTp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14eHhzKTstLVwzYjQg''@;'; put 'put ''Mjp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14eHMpOy0tXDNiNCAzOnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLXhzKTstLVwzYjQgNDp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS1zbSk7LS1cM2I0IDU6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UtbWQp''@;'; put 'put ''Oy0tXDNiNCA2OnZhcigtLWNkcy1nbG9iYWwtbGF5b3V0LXNwYWNlLWxnKTstLVwzYjQgNzp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1zcGFjZS14bCk7LS1cM2I0IDg6dmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtc3BhY2UteHhsKTstLVwzYjQgOTp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1z''@;'; put 'put ''cGFjZS14eHhsKX1bY2RzLWxheW91dCo9ImFsaWduOmZpbGwiXT4qe2ZsZXgtZ3JvdzoxIWltcG9ydGFudDtmbGV4LWJhc2lzOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0id3JhcDpub25lIl17ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNo''@;'; put 'put ''Il17ZmxleC1ncm93OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ246c2hyaW5rIl17ZmxleC1zaHJpbms6MSFpbXBvcnRhbnQ7ZmxleC1ncm93OjAhaW1wb3J0YW50fUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXtbY2RzLWxheW91dCo9ImFsaWduQHhzOmZpbGwiXT4qe2ZsZXgtZ3Jv''@;'; put 'put ''dzoxIWltcG9ydGFudDtmbGV4LWJhc2lzOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0id3JhcEB4czpub25lIl17ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpzdHJldGNoIl17ZmxleC1ncm93OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxp''@;'; put 'put ''Z25AeHM6c2hyaW5rIl17ZmxleC1zaHJpbms6MSFpbXBvcnRhbnQ7ZmxleC1ncm93OjAhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpmaWxsIl0+KntmbGV4LWdyb3c6MSFpbXBvcnRhbnQ7ZmxleC1iYXNpczowIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49IndyYXBAc206bm9uZSJde2ZsZXgtd3JhcDpub3dyYXAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206c3RyZXRjaCJde2ZsZXgtZ3JvdzoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImFsaWduQHNtOnNocmluayJde2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50''@;'; put 'put ''O2ZsZXgtZ3JvdzowIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpe1tjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6ZmlsbCJdPip7ZmxleC1ncm93OjEhaW1wb3J0YW50O2ZsZXgtYmFzaXM6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJ3cmFwQG1kOm5vbmUiXXtmbGV4LXdyYXA6''@;'; put 'put ''bm93cmFwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImFsaWduQG1kOnN0cmV0Y2giXXtmbGV4LWdyb3c6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpzaHJpbmsiXXtmbGV4LXNocmluazoxIWltcG9ydGFudDtmbGV4LWdyb3c6MCFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdp''@;'; put 'put ''ZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpmaWxsIl0+KntmbGV4LWdyb3c6MSFpbXBvcnRhbnQ7ZmxleC1iYXNpczowIWltcG9ydGFudH1bY2RzLWxheW91dH49IndyYXBAbGc6bm9uZSJde2ZsZXgtd3JhcDpub3dyYXAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iYWxpZ25A''@;'; put 'put ''bGc6c3RyZXRjaCJde2ZsZXgtZ3JvdzoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImFsaWduQGxnOnNocmluayJde2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50O2ZsZXgtZ3JvdzowIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTQ0MHB4KXtbY2RzLWxheW91dCo9ImFsaWduQHhsOmZp''@;'; put 'put ''bGwiXT4qe2ZsZXgtZ3JvdzoxIWltcG9ydGFudDtmbGV4LWJhc2lzOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0id3JhcEB4bDpub25lIl17ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpzdHJldGNoIl17ZmxleC1ncm93OjEhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iYWxpZ25AeGw6c2hyaW5rIl17ZmxleC1zaHJpbms6MSFpbXBvcnRhbnQ7ZmxleC1ncm93OjAhaW1wb3J0YW50fX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF17ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdyYXA6d3JhcDtqdXN0aWZ5LWl0ZW1zOmZs''@;'; put 'put ''ZXgtc3RhcnQ7YWxpZ24taXRlbXM6ZmxleC1zdGFydDt3aWR0aDoxMDAlO21hcmdpbjowO21pbi1oZWlnaHQ6MH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dH49dmVydGljYWxdLFtj''@;'; put 'put ''ZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLXRleHRde3dpZHRoOmluaXRpYWwhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dG9wIl17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91''@;'; put 'put ''dCo9ImFsaWduOmJvdHRvbSJde2FsaWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ246cmln''@;'; put 'put ''aHQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNl''@;'; put 'put ''bnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9Im9yZGVyOnJldmVyc2UiXXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJl''@;'; put 'put ''dGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtc3RyZXRjaCJde2p1c3RpZnktY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2Rz''@;'; put 'put ''LWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduOnN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOnZl''@;'; put 'put ''cnRpY2FsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2VudGVyIl17bWFyZ2luLWxlZnQ6''@;'; put 'put ''YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpib3R0''@;'; put 'put ''b20iXXthbGlnbi1zZWxmOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduOnJpZ2h0Il17bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJde21hcmdpbi1y''@;'; put 'put ''aWdodDphdXRvIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp0b3AiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25A''@;'; put 'put ''eHM6Ym90dG9tIl17YWxpZ24taXRlbXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpsZWZ0Il17anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpyaWdo''@;'; put 'put ''dCJde2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxh''@;'; put 'put ''eW91dCo9ImFsaWduQHhzOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWNv''@;'; put 'put ''bnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0ib3JkZXJAeHM6cmV2ZXJzZSJde2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtc3RyZXRjaCJde2Fs''@;'; put 'put ''aWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpob3Jpem9udGFsLXN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpz''@;'; put 'put ''dHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PWhvcml6''@;'; put 'put ''b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtY2VudGVyIl17YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxp''@;'; put 'put ''Z25AeHM6aG9yaXpvbnRhbC1jZW50ZXIiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dG9wIl17YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5''@;'; put 'put ''b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHhzOmJvdHRvbSJde2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49''@;'; put 'put ''aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp0b3AiXXthbGlnbi1pdGVtczpmbGV4''@;'; put 'put ''LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Ym90dG9tIl17YWxpZ24taXRlbXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpsZWZ0Il17anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpyaWdodCJde2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjth''@;'; put 'put ''bGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOmNlbnRlciJd''@;'; put 'put ''e2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0ib3JkZXJAc206cmV2ZXJzZSJde2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlfVtjZHMtbGF5b3V0fj1ob3Jp''@;'; put 'put ''em9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVydGljYWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206aG9yaXpvbnRhbC1zdHJl''@;'; put 'put ''dGNoIl17anVzdGlmeS1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFsLXN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxp''@;'; put 'put ''Z25Ac206c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxd''@;'; put 'put ''PltjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVydGljYWwtY2VudGVyIl17YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25Ac206''@;'; put 'put ''Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25Ac206aG9yaXpvbnRhbC1jZW50ZXIiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5''@;'; put 'put ''b3V0Kj0iYWxpZ25Ac206dG9wIl17YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHNtOmJvdHRvbSJde2FsaWduLXNlbGY6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25A''@;'; put 'put ''c206cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXR+PWhvcml6''@;'; put 'put ''b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp0b3AiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Ym90dG9tIl17YWxpZ24taXRlbXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJhbGlnbkBtZDpsZWZ0Il17anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpyaWdodCJde2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91''@;'; put 'put ''dCo9ImFsaWduQG1kOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2Rz''@;'; put 'put ''LWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0ib3JkZXJAbWQ6cmV2''@;'; put 'put ''ZXJzZSJde2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dmVydGljYWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0''@;'; put 'put ''fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpob3Jpem9udGFsLXN0cmV0Y2giXT4qe2Zs''@;'; put 'put ''ZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25A''@;'; put 'put ''bWQ6c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dmVydGljYWwtY2VudGVyIl17YWxpZ24tc2VsZjpjZW50''@;'; put 'put ''ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1jZW50ZXIiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudDttYXJnaW4tcmln''@;'; put 'put ''aHQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dG9wIl17YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQG1kOmJvdHRvbSJde2FsaWduLXNlbGY6Zmxl''@;'; put 'put ''eC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6cmlnaHQiXXttYXJnaW4tbGVmdDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG8haW1w''@;'; put 'put ''b3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpe1tjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dG9wIl17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmJvdHRvbSJd''@;'; put 'put ''e2FsaWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6bGVmdCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6cmlnaHQiXXtqdXN0aWZ5''@;'; put 'put ''LWNvbnRlbnQ6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGln''@;'; put 'put ''bkBsZzpob3Jpem9udGFsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRl''@;'; put 'put ''cn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9Im9yZGVyQGxnOnJldmVyc2UiXXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpz''@;'; put 'put ''dHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtc3RyZXRjaCJde2p1c3RpZnktY29udGVudDpzdHJldGNoO2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9u''@;'; put 'put ''dGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6aG9yaXpvbnRhbC1zdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtmbGV4''@;'; put 'put ''LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQGxnOmNlbnRlciJdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2Rz''@;'; put 'put ''LWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQGxnOmNlbnRlciJdLFtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQGxnOmhvcml6''@;'; put 'put ''b250YWwtY2VudGVyIl17bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQGxnOnRvcCJde2FsaWduLXNlbGY6ZmxleC1zdGFydH1bY2RzLWxheW91dH49aG9yaXpv''@;'; put 'put ''bnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpib3R0b20iXXthbGlnbi1zZWxmOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQGxnOnJpZ2h0Il17bWFyZ2luLWxlZnQ6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxd''@;'; put 'put ''PltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6bGVmdCJde21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTQ0MHB4KXtbY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnRvcCJde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpib3R0b20iXXthbGlnbi1pdGVtczpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2RzLWxheW91''@;'; put 'put ''dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGljYWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRl''@;'; put 'put ''bnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Y2VudGVyIl17YWxpZ24taXRl''@;'; put 'put ''bXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJvcmRlckB4bDpyZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2V9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJhbGlnbkB4bDp2ZXJ0aWNhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0''@;'; put 'put ''aWZ5LWNvbnRlbnQ6c3RyZXRjaDtmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtc3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpzdHJl''@;'; put 'put ''dGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpzdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJhbGlnbkB4bDpjZW50ZXIiXSxbY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp2ZXJ0aWNhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXSxb''@;'; put 'put ''Y2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpob3Jpem9udGFsLWNlbnRlciJde21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50O21hcmdpbi1yaWdodDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGln''@;'; put 'put ''bkB4bDp0b3AiXXthbGlnbi1zZWxmOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PWhvcml6b250YWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Ym90dG9tIl17YWxpZ24tc2VsZjpmbGV4LWVuZH1bY2RzLWxheW91dH49aG9yaXpvbnRhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpyaWdodCJd''@;'; put 'put ''e21hcmdpbi1sZWZ0OmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj1ob3Jpem9udGFsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0byFpbXBvcnRhbnR9fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF17d2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1k''@;'; put 'put ''aXJlY3Rpb246Y29sdW1uO2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXSxbY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJhbGlnbjpib3R0b20iXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246bGVmdCJde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246cmln''@;'; put 'put ''aHQiXXthbGlnbi1pdGVtczpmbGV4LWVuZH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1jZW50ZXIiXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOmhvcml6b250YWwtY2Vu''@;'; put 'put ''dGVyIl17YWxpZ24taXRlbXM6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9Im9yZGVyOnJldmVy''@;'; put 'put ''c2UiXXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZX1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1zdHJldGNoIl17anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246dmVy''@;'; put 'put ''dGljYWwtc3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl17''@;'; put 'put ''YWxpZ24taXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl0sW2Nk''@;'; put 'put ''cy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOnZlcnRpY2FsLWNlbnRlciJde21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOmNlbnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNh''@;'; put 'put ''bF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpob3Jpem9udGFsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjp0b3AiXXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJhbGlnbjpib3R0b20iXXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJde21hcmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduOmxl''@;'; put 'put ''ZnQiXXttYXJnaW4tcmlnaHQ6YXV0b31AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dG9wIl17anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxp''@;'; put 'put ''Z25AeHM6Ym90dG9tIl17anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmxlZnQiXXthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOnJpZ2h0''@;'; put 'put ''Il17YWxpZ24taXRlbXM6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtY2VudGVyIl17anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpob3Jpem9udGFs''@;'; put 'put ''LWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJvcmRl''@;'; put 'put ''ckB4czpyZXZlcnNlIl17ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2V9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtc3RyZXRjaCJde2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91''@;'; put 'put ''dCo9ImFsaWduQHhzOnZlcnRpY2FsLXN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmhvcml6b250YWwtc3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0iYWxpZ25AeHM6c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6c3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxh''@;'; put 'put ''eW91dCo9ImFsaWduQHhzOmNlbnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp2ZXJ0aWNhbC1jZW50ZXIiXXttYXJnaW4tdG9wOmF1dG87bWFyZ2luLWJvdHRvbTphdXRvfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGln''@;'; put 'put ''bkB4czpjZW50ZXIiXSxbY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1zZWxmOmNlbnRlcn1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dG9wIl17bWFyZ2luLWJvdHRvbTph''@;'; put 'put ''dXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6Ym90dG9tIl17bWFyZ2luLXRvcDphdXRvIWltcG9ydGFudH1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6cmlnaHQiXXttYXJnaW4tbGVmdDphdXRv''@;'; put 'put ''fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpsZWZ0Il17bWFyZ2luLXJpZ2h0OmF1dG99fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXtbY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp0b3AiXXtqdXN0aWZ5LWNvbnRlbnQ6''@;'; put 'put ''ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpib3R0b20iXXtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206bGVmdCJde2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206cmlnaHQiXXthbGlnbi1pdGVtczpmbGV4LWVuZH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp2ZXJ0aWNhbC1jZW50ZXIiXXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMt''@;'; put 'put ''bGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOmhvcml6b250YWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHNtOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRl''@;'; put 'put ''bnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9Im9yZGVyQHNtOnJldmVyc2UiXXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZX1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp2ZXJ0aWNhbC1zdHJldGNoIl17anVzdGlm''@;'; put 'put ''eS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVydGljYWwtc3RyZXRjaCJdPip7ZmxleC1ncm93OjF9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206aG9yaXpvbnRhbC1zdHJldGNoIl17YWxp''@;'; put 'put ''Z24taXRlbXM6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpzdHJl''@;'; put 'put ''dGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25Ac206Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHNtOnZlcnRpY2FsLWNlbnRlciJde21hcmdpbi10b3A6YXV0bzttYXJnaW4tYm90''@;'; put 'put ''dG9tOmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHNtOmNlbnRlciJdLFtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpob3Jpem9udGFsLWNlbnRlciJde2FsaWduLXNlbGY6Y2VudGVyfVtjZHMtbGF5b3V0fj12ZXJ0''@;'; put 'put ''aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp0b3AiXXttYXJnaW4tYm90dG9tOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpib3R0b20iXXttYXJnaW4tdG9wOmF1dG8haW1wb3J0YW50fVtjZHMtbGF5b3V0fj12ZXJ0aWNh''@;'; put 'put ''bF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpyaWdodCJde21hcmdpbi1sZWZ0OmF1dG99W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHNtOmxlZnQiXXttYXJnaW4tcmlnaHQ6YXV0b319QG1lZGlhIChtaW4td2lkdGg6OTkycHgpe1tjZHMtbGF5b3V0fj12ZXJ0''@;'; put 'put ''aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnRvcCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOmJvdHRvbSJde2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJhbGlnbkBtZDpsZWZ0Il17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpyaWdodCJde2FsaWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWdu''@;'; put 'put ''QG1kOnZlcnRpY2FsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''YWxpZ25AbWQ6Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0ib3JkZXJAbWQ6cmV2ZXJzZSJde2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlfVtjZHMtbGF5b3V0fj12ZXJ0aWNh''@;'; put 'put ''bF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnZlcnRpY2FsLXN0cmV0Y2giXXtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp2ZXJ0aWNhbC1zdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49dmVydGlj''@;'; put 'put ''YWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpob3Jpem9udGFsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNo''@;'; put 'put ''fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpjZW50ZXIiXSxbY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxp''@;'; put 'put ''Z25AbWQ6dmVydGljYWwtY2VudGVyIl17bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQG1kOmhvcml6''@;'; put 'put ''b250YWwtY2VudGVyIl17YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQG1kOnRvcCJde21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQG1kOmJvdHRv''@;'; put 'put ''bSJde21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQG1kOnJpZ2h0Il17bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6bGVmdCJde21hcmdpbi1yaWdo''@;'; put 'put ''dDphdXRvfX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnRvcCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmJvdHRvbSJd''@;'; put 'put ''e2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpsZWZ0Il17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpyaWdodCJde2FsaWduLWl0ZW1z''@;'; put 'put ''OmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6aG9yaXpvbnRhbC1jZW50ZXIiXXthbGln''@;'; put 'put ''bi1pdGVtczpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0ib3JkZXJAbGc6cmV2ZXJzZSJd''@;'; put 'put ''e2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLXN0cmV0Y2giXXtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp2''@;'; put 'put ''ZXJ0aWNhbC1zdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpob3Jpem9udGFsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnN0''@;'; put 'put ''cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnN0cmV0Y2giXT4qe2ZsZXgtZ3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkBs''@;'; put 'put ''ZzpjZW50ZXIiXSxbY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dmVydGljYWwtY2VudGVyIl17bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6Y2VudGVyIl0s''@;'; put 'put ''W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtY2VudGVyIl17YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQGxnOnRvcCJde21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQGxnOmJvdHRvbSJde21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQGxnOnJpZ2h0Il17bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49''@;'; put 'put ''dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6bGVmdCJde21hcmdpbi1yaWdodDphdXRvfX1AbWVkaWEgKG1pbi13aWR0aDoxNDQwcHgpe1tjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnRvcCJde2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fVtj''@;'; put 'put ''ZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmJvdHRvbSJde2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpsZWZ0Il17YWxpZ24taXRlbXM6ZmxleC1zdGFydH1bY2RzLWxheW91dH49''@;'; put 'put ''dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpyaWdodCJde2FsaWduLWl0ZW1zOmZsZXgtZW5kfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnZlcnRpY2FsLWNlbnRlciJde2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRp''@;'; put 'put ''Y2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6aG9yaXpvbnRhbC1jZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PXZlcnRpY2FsXVtjZHMtbGF5b3V0Kj0ib3JkZXJAeGw6cmV2ZXJzZSJde2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnZlcnRpY2FsLXN0cmV0Y2giXXtqdXN0aWZ5LWNvbnRlbnQ6c3Ry''@;'; put 'put ''ZXRjaH1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp2ZXJ0aWNhbC1zdHJldGNoIl0+KntmbGV4LWdyb3c6MX1bY2RzLWxheW91dH49dmVydGljYWxdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpob3Jpem9udGFsLXN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJl''@;'; put 'put ''dGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnN0cmV0Y2giXT4qe2ZsZXgt''@;'; put 'put ''Z3JvdzoxfVtjZHMtbGF5b3V0fj12ZXJ0aWNhbF0+W2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpjZW50ZXIiXSxbY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGljYWwtY2VudGVyIl17bWFyZ2luLXRvcDphdXRvO21hcmdpbi1ib3R0b206YXV0b31bY2Rz''@;'; put 'put ''LWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Y2VudGVyIl0sW2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOmhvcml6b250YWwtY2VudGVyIl17YWxpZ24tc2VsZjpjZW50ZXJ9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxh''@;'; put 'put ''eW91dCo9ImFsaWduQHhsOnRvcCJde21hcmdpbi1ib3R0b206YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91dCo9ImFsaWduQHhsOmJvdHRvbSJde21hcmdpbi10b3A6YXV0byFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PXZlcnRpY2FsXT5bY2RzLWxheW91''@;'; put 'put ''dCo9ImFsaWduQHhsOnJpZ2h0Il17bWFyZ2luLWxlZnQ6YXV0b31bY2RzLWxheW91dH49dmVydGljYWxdPltjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6bGVmdCJde21hcmdpbi1yaWdodDphdXRvfX1bY2RzLWxheW91dH49Z3JpZF17ZGlzcGxheTpncmlkO2FsaWduLWl0ZW1zOnN0YXJ0O2FsaWdu''@;'; put 'put ''LWNvbnRlbnQ6c3RhcnQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCh2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC1ncmlkLWNvbHMpLDFmcik7d2lkdGg6MTAwJX1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9cm93c117Z3JpZC10ZW1wbGF0ZS1yb3dzOnJlcGVhdCgxMixhdXRv''@;'; put 'put ''KX1bY2RzLWxheW91dH49Z3JpZF0+W2Nkcy1sYXlvdXQqPXJvd117YWxpZ24tc2VsZjpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iY29sczphdXRvIl17Z3JpZC1hdXRvLWZsb3c6Y29sdW1uO2dyaWQtdGVtcGxhdGUtY29sdW1uczppbml0aWFsfVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0iY29sc0AiXT4qe2dyaWQtY29sdW1uOnNwYW4gdmFyKC0tY2RzLWdsb2JhbC1sYXlvdXQtZ3JpZC1jb2xzKX1bY2RzLWxheW91dCo9ImNvbEAiXXtncmlkLWNvbHVtbjpzcGFuIDEyfVtjZHMtbGF5b3V0Kj0iY29sczoxIl0+KntncmlkLWNvbHVtbjpzcGFuIDEvc3BhbiAxfVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0icm93czoxIl0+KntncmlkLXJvdzpzcGFuIDEvc3BhbiAxfVtjZHMtbGF5b3V0Kj0iY29sczoyIl0+KntncmlkLWNvbHVtbjpzcGFuIDIvc3BhbiAyfVtjZHMtbGF5b3V0Kj0icm93czoyIl0+KntncmlkLXJvdzpzcGFuIDIvc3BhbiAyfVtjZHMtbGF5b3V0Kj0iY29sczozIl0+Kntn''@;'; put 'put ''cmlkLWNvbHVtbjpzcGFuIDMvc3BhbiAzfVtjZHMtbGF5b3V0Kj0icm93czozIl0+KntncmlkLXJvdzpzcGFuIDMvc3BhbiAzfVtjZHMtbGF5b3V0Kj0iY29sczo0Il0+KntncmlkLWNvbHVtbjpzcGFuIDQvc3BhbiA0fVtjZHMtbGF5b3V0Kj0icm93czo0Il0+KntncmlkLXJvdzpzcGFuIDQv''@;'; put 'put ''c3BhbiA0fVtjZHMtbGF5b3V0Kj0iY29sczo1Il0+KntncmlkLWNvbHVtbjpzcGFuIDUvc3BhbiA1fVtjZHMtbGF5b3V0Kj0icm93czo1Il0+KntncmlkLXJvdzpzcGFuIDUvc3BhbiA1fVtjZHMtbGF5b3V0Kj0iY29sczo2Il0+KntncmlkLWNvbHVtbjpzcGFuIDYvc3BhbiA2fVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0icm93czo2Il0+KntncmlkLXJvdzpzcGFuIDYvc3BhbiA2fVtjZHMtbGF5b3V0Kj0iY29sczo3Il0+KntncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3fVtjZHMtbGF5b3V0Kj0icm93czo3Il0+KntncmlkLXJvdzpzcGFuIDcvc3BhbiA3fVtjZHMtbGF5b3V0Kj0iY29sczo4Il0+Kntn''@;'; put 'put ''cmlkLWNvbHVtbjpzcGFuIDgvc3BhbiA4fVtjZHMtbGF5b3V0Kj0icm93czo4Il0+KntncmlkLXJvdzpzcGFuIDgvc3BhbiA4fVtjZHMtbGF5b3V0Kj0iY29sczo5Il0+KntncmlkLWNvbHVtbjpzcGFuIDkvc3BhbiA5fVtjZHMtbGF5b3V0Kj0icm93czo5Il0+KntncmlkLXJvdzpzcGFuIDkv''@;'; put 'put ''c3BhbiA5fVtjZHMtbGF5b3V0Kj0iY29sczoxMCJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMC9zcGFuIDEwfVtjZHMtbGF5b3V0Kj0icm93czoxMCJdPip7Z3JpZC1yb3c6c3BhbiAxMC9zcGFuIDEwfVtjZHMtbGF5b3V0Kj0iY29sczoxMSJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMS9zcGFuIDEx''@;'; put 'put ''fVtjZHMtbGF5b3V0Kj0icm93czoxMSJdPip7Z3JpZC1yb3c6c3BhbiAxMS9zcGFuIDExfVtjZHMtbGF5b3V0Kj0iY29sczoxMiJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMi9zcGFuIDEyfVtjZHMtbGF5b3V0Kj0icm93czoxMiJdPip7Z3JpZC1yb3c6c3BhbiAxMi9zcGFuIDEyfVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iY29sOjEiXXtncmlkLWNvbHVtbjpzcGFuIDEvc3BhbiAxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzoxIl17Z3JpZC1yb3c6c3BhbiAxL3NwYW4gMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6MiJde2dyaWQtY29sdW1uOnNwYW4gMi9zcGFuIDIhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0icm93OjIiXXtncmlkLXJvdzpzcGFuIDIvc3BhbiAyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDozIl17Z3JpZC1jb2x1bW46c3BhbiAzL3NwYW4gMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6MyJde2dyaWQtcm93OnNwYW4gMy9zcGFuIDMhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0Kj0iY29sOjQiXXtncmlkLWNvbHVtbjpzcGFuIDQvc3BhbiA0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzo0Il17Z3JpZC1yb3c6c3BhbiA0L3NwYW4gNCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6NSJde2dyaWQtY29sdW1uOnNwYW4gNS9zcGFuIDUhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OjUiXXtncmlkLXJvdzpzcGFuIDUvc3BhbiA1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDo2Il17Z3JpZC1jb2x1bW46c3BhbiA2L3NwYW4gNiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6NiJde2dyaWQtcm93OnNwYW4gNi9zcGFuIDYh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOjciXXtncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzo3Il17Z3JpZC1yb3c6c3BhbiA3L3NwYW4gNyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6OCJde2dyaWQtY29sdW1uOnNwYW4gOC9z''@;'; put 'put ''cGFuIDghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OjgiXXtncmlkLXJvdzpzcGFuIDgvc3BhbiA4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDo5Il17Z3JpZC1jb2x1bW46c3BhbiA5L3NwYW4gOSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6OSJde2dyaWQtcm93OnNwYW4g''@;'; put 'put ''OS9zcGFuIDkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOjEwIl17Z3JpZC1jb2x1bW46c3BhbiAxMC9zcGFuIDEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzoxMCJde2dyaWQtcm93OnNwYW4gMTAvc3BhbiAxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6MTEiXXtncmlk''@;'; put 'put ''LWNvbHVtbjpzcGFuIDExL3NwYW4gMTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OjExIl17Z3JpZC1yb3c6c3BhbiAxMS9zcGFuIDExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDoxMiJde2dyaWQtY29sdW1uOnNwYW4gMTIvc3BhbiAxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJyb3c6MTIiXXtncmlkLXJvdzpzcGFuIDEyL3NwYW4gMTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOnN0YXJ0LTEiXXtncmlkLWNvbHVtbi1zdGFydDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDplbmQtMSJde2dyaWQtY29sdW1uLWVuZDoxIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dCo9InJvdzpzdGFydC0xIl17Z3JpZC1yb3ctc3RhcnQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6ZW5kLTEiXXtncmlkLXJvdy1lbmQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6c3RhcnQtMiJde2dyaWQtY29sdW1uLXN0YXJ0OjIhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iY29sOmVuZC0yIl17Z3JpZC1jb2x1bW4tZW5kOjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OnN0YXJ0LTIiXXtncmlkLXJvdy1zdGFydDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzplbmQtMiJde2dyaWQtcm93LWVuZDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9''@;'; put 'put ''ImNvbDpzdGFydC0zIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6ZW5kLTMiXXtncmlkLWNvbHVtbi1lbmQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6c3RhcnQtMyJde2dyaWQtcm93LXN0YXJ0OjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0icm93OmVuZC0zIl17Z3JpZC1yb3ctZW5kOjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOnN0YXJ0LTQiXXtncmlkLWNvbHVtbi1zdGFydDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDplbmQtNCJde2dyaWQtY29sdW1uLWVuZDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9''@;'; put 'put ''InJvdzpzdGFydC00Il17Z3JpZC1yb3ctc3RhcnQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6ZW5kLTQiXXtncmlkLXJvdy1lbmQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6c3RhcnQtNSJde2dyaWQtY29sdW1uLXN0YXJ0OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''Y29sOmVuZC01Il17Z3JpZC1jb2x1bW4tZW5kOjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OnN0YXJ0LTUiXXtncmlkLXJvdy1zdGFydDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzplbmQtNSJde2dyaWQtcm93LWVuZDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDpz''@;'; put 'put ''dGFydC02Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6ZW5kLTYiXXtncmlkLWNvbHVtbi1lbmQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6c3RhcnQtNiJde2dyaWQtcm93LXN0YXJ0OjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93''@;'; put 'put ''OmVuZC02Il17Z3JpZC1yb3ctZW5kOjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOnN0YXJ0LTciXXtncmlkLWNvbHVtbi1zdGFydDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDplbmQtNyJde2dyaWQtY29sdW1uLWVuZDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzpz''@;'; put 'put ''dGFydC03Il17Z3JpZC1yb3ctc3RhcnQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6ZW5kLTciXXtncmlkLXJvdy1lbmQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6c3RhcnQtOCJde2dyaWQtY29sdW1uLXN0YXJ0OjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOmVu''@;'; put 'put ''ZC04Il17Z3JpZC1jb2x1bW4tZW5kOjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OnN0YXJ0LTgiXXtncmlkLXJvdy1zdGFydDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzplbmQtOCJde2dyaWQtcm93LWVuZDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDpzdGFydC05''@;'; put 'put ''Il17Z3JpZC1jb2x1bW4tc3RhcnQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6ZW5kLTkiXXtncmlkLWNvbHVtbi1lbmQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6c3RhcnQtOSJde2dyaWQtcm93LXN0YXJ0OjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OmVuZC05''@;'; put 'put ''Il17Z3JpZC1yb3ctZW5kOjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOnN0YXJ0LTEwIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOmVuZC0xMCJde2dyaWQtY29sdW1uLWVuZDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6c3Rh''@;'; put 'put ''cnQtMTAiXXtncmlkLXJvdy1zdGFydDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6ZW5kLTEwIl17Z3JpZC1yb3ctZW5kOjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbDpzdGFydC0xMSJde2dyaWQtY29sdW1uLXN0YXJ0OjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNv''@;'; put 'put ''bDplbmQtMTEiXXtncmlkLWNvbHVtbi1lbmQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OnN0YXJ0LTExIl17Z3JpZC1yb3ctc3RhcnQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93OmVuZC0xMSJde2dyaWQtcm93LWVuZDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJj''@;'; put 'put ''b2w6c3RhcnQtMTIiXXtncmlkLWNvbHVtbi1zdGFydDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2w6ZW5kLTEyIl17Z3JpZC1jb2x1bW4tZW5kOjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvdzpzdGFydC0xMiJde2dyaWQtcm93LXN0YXJ0OjEyIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dCo9InJvdzplbmQtMTIiXXtncmlkLXJvdy1lbmQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOnN0YXJ0LTEzIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sOmVuZC0xMyJde2dyaWQtY29sdW1uLWVuZDoxMyFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJyb3c6c3RhcnQtMTMiXXtncmlkLXJvdy1zdGFydDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3c6ZW5kLTEzIl17Z3JpZC1yb3ctZW5kOjEzIWltcG9ydGFudH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduOnRvcCJde2FsaWduLWNvbnRlbnQ6''@;'; put 'put ''c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpyaWdodCJde2p1c3RpZnktY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpib3R0b20iXXthbGlnbi1jb250ZW50OmVuZH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91''@;'; put 'put ''dCo9ImFsaWduOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjp2ZXJ0aWNhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJhbGlnbjpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbjpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0''@;'; put 'put ''Y2g7anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246dmVydGljYWwtY2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iYWxpZ246aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ246Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2Vu''@;'; put 'put ''dGVyO2p1c3RpZnktaXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpe1tjZHMtbGF5b3V0Kj0iY29sc0B4czoxIl0+KntncmlkLWNvbHVtbjpzcGFuIDEvc3BhbiAxfVtjZHMtbGF5b3V0Kj0icm93c0B4czoxIl0+KntncmlkLXJvdzpz''@;'; put 'put ''cGFuIDEvc3BhbiAxfVtjZHMtbGF5b3V0Kj0iY29sc0B4czoyIl0+KntncmlkLWNvbHVtbjpzcGFuIDIvc3BhbiAyfVtjZHMtbGF5b3V0Kj0icm93c0B4czoyIl0+KntncmlkLXJvdzpzcGFuIDIvc3BhbiAyfVtjZHMtbGF5b3V0Kj0iY29sc0B4czozIl0+KntncmlkLWNvbHVtbjpzcGFuIDMv''@;'; put 'put ''c3BhbiAzfVtjZHMtbGF5b3V0Kj0icm93c0B4czozIl0+KntncmlkLXJvdzpzcGFuIDMvc3BhbiAzfVtjZHMtbGF5b3V0Kj0iY29sc0B4czo0Il0+KntncmlkLWNvbHVtbjpzcGFuIDQvc3BhbiA0fVtjZHMtbGF5b3V0Kj0icm93c0B4czo0Il0+KntncmlkLXJvdzpzcGFuIDQvc3BhbiA0fVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iY29sc0B4czo1Il0+KntncmlkLWNvbHVtbjpzcGFuIDUvc3BhbiA1fVtjZHMtbGF5b3V0Kj0icm93c0B4czo1Il0+KntncmlkLXJvdzpzcGFuIDUvc3BhbiA1fVtjZHMtbGF5b3V0Kj0iY29sc0B4czo2Il0+KntncmlkLWNvbHVtbjpzcGFuIDYvc3BhbiA2fVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0icm93c0B4czo2Il0+KntncmlkLXJvdzpzcGFuIDYvc3BhbiA2fVtjZHMtbGF5b3V0Kj0iY29sc0B4czo3Il0+KntncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3fVtjZHMtbGF5b3V0Kj0icm93c0B4czo3Il0+KntncmlkLXJvdzpzcGFuIDcvc3BhbiA3fVtjZHMtbGF5b3V0Kj0iY29s''@;'; put 'put ''c0B4czo4Il0+KntncmlkLWNvbHVtbjpzcGFuIDgvc3BhbiA4fVtjZHMtbGF5b3V0Kj0icm93c0B4czo4Il0+KntncmlkLXJvdzpzcGFuIDgvc3BhbiA4fVtjZHMtbGF5b3V0Kj0iY29sc0B4czo5Il0+KntncmlkLWNvbHVtbjpzcGFuIDkvc3BhbiA5fVtjZHMtbGF5b3V0Kj0icm93c0B4czo5''@;'; put 'put ''Il0+KntncmlkLXJvdzpzcGFuIDkvc3BhbiA5fVtjZHMtbGF5b3V0Kj0iY29sc0B4czoxMCJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMC9zcGFuIDEwfVtjZHMtbGF5b3V0Kj0icm93c0B4czoxMCJdPip7Z3JpZC1yb3c6c3BhbiAxMC9zcGFuIDEwfVtjZHMtbGF5b3V0Kj0iY29sc0B4czoxMSJd''@;'; put 'put ''Pip7Z3JpZC1jb2x1bW46c3BhbiAxMS9zcGFuIDExfVtjZHMtbGF5b3V0Kj0icm93c0B4czoxMSJdPip7Z3JpZC1yb3c6c3BhbiAxMS9zcGFuIDExfVtjZHMtbGF5b3V0Kj0iY29sc0B4czoxMiJdPip7Z3JpZC1jb2x1bW46c3BhbiAxMi9zcGFuIDEyfVtjZHMtbGF5b3V0Kj0icm93c0B4czox''@;'; put 'put ''MiJdPip7Z3JpZC1yb3c6c3BhbiAxMi9zcGFuIDEyfX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjEiXT4qe2dyaWQtY29sdW1uOnNwYW4gMS9zcGFuIDF9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjEiXT4qe2dyaWQtcm93OnNwYW4gMS9zcGFuIDF9W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJjb2xzQHNtOjIiXT4qe2dyaWQtY29sdW1uOnNwYW4gMi9zcGFuIDJ9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjIiXT4qe2dyaWQtcm93OnNwYW4gMi9zcGFuIDJ9W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjMiXT4qe2dyaWQtY29sdW1uOnNwYW4gMy9zcGFuIDN9W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJyb3dzQHNtOjMiXT4qe2dyaWQtcm93OnNwYW4gMy9zcGFuIDN9W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjQiXT4qe2dyaWQtY29sdW1uOnNwYW4gNC9zcGFuIDR9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjQiXT4qe2dyaWQtcm93OnNwYW4gNC9zcGFuIDR9W2Nkcy1sYXlvdXQqPSJjb2xz''@;'; put 'put ''QHNtOjUiXT4qe2dyaWQtY29sdW1uOnNwYW4gNS9zcGFuIDV9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjUiXT4qe2dyaWQtcm93OnNwYW4gNS9zcGFuIDV9W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjYiXT4qe2dyaWQtY29sdW1uOnNwYW4gNi9zcGFuIDZ9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjYi''@;'; put 'put ''XT4qe2dyaWQtcm93OnNwYW4gNi9zcGFuIDZ9W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjciXT4qe2dyaWQtY29sdW1uOnNwYW4gNy9zcGFuIDd9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjciXT4qe2dyaWQtcm93OnNwYW4gNy9zcGFuIDd9W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjgiXT4qe2dyaWQt''@;'; put 'put ''Y29sdW1uOnNwYW4gOC9zcGFuIDh9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjgiXT4qe2dyaWQtcm93OnNwYW4gOC9zcGFuIDh9W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjkiXT4qe2dyaWQtY29sdW1uOnNwYW4gOS9zcGFuIDl9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjkiXT4qe2dyaWQtcm93OnNw''@;'; put 'put ''YW4gOS9zcGFuIDl9W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjEwIl0+KntncmlkLWNvbHVtbjpzcGFuIDEwL3NwYW4gMTB9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjEwIl0+KntncmlkLXJvdzpzcGFuIDEwL3NwYW4gMTB9W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjExIl0+KntncmlkLWNvbHVtbjpz''@;'; put 'put ''cGFuIDExL3NwYW4gMTF9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjExIl0+KntncmlkLXJvdzpzcGFuIDExL3NwYW4gMTF9W2Nkcy1sYXlvdXQqPSJjb2xzQHNtOjEyIl0+KntncmlkLWNvbHVtbjpzcGFuIDEyL3NwYW4gMTJ9W2Nkcy1sYXlvdXQqPSJyb3dzQHNtOjEyIl0+KntncmlkLXJvdzpz''@;'; put 'put ''cGFuIDEyL3NwYW4gMTJ9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dCo9ImNvbHNAbWQ6MSJdPip7Z3JpZC1jb2x1bW46c3BhbiAxL3NwYW4gMX1bY2RzLWxheW91dCo9InJvd3NAbWQ6MSJdPip7Z3JpZC1yb3c6c3BhbiAxL3NwYW4gMX1bY2RzLWxheW91dCo9ImNvbHNA''@;'; put 'put ''bWQ6MiJdPip7Z3JpZC1jb2x1bW46c3BhbiAyL3NwYW4gMn1bY2RzLWxheW91dCo9InJvd3NAbWQ6MiJdPip7Z3JpZC1yb3c6c3BhbiAyL3NwYW4gMn1bY2RzLWxheW91dCo9ImNvbHNAbWQ6MyJdPip7Z3JpZC1jb2x1bW46c3BhbiAzL3NwYW4gM31bY2RzLWxheW91dCo9InJvd3NAbWQ6MyJd''@;'; put 'put ''Pip7Z3JpZC1yb3c6c3BhbiAzL3NwYW4gM31bY2RzLWxheW91dCo9ImNvbHNAbWQ6NCJdPip7Z3JpZC1jb2x1bW46c3BhbiA0L3NwYW4gNH1bY2RzLWxheW91dCo9InJvd3NAbWQ6NCJdPip7Z3JpZC1yb3c6c3BhbiA0L3NwYW4gNH1bY2RzLWxheW91dCo9ImNvbHNAbWQ6NSJdPip7Z3JpZC1j''@;'; put 'put ''b2x1bW46c3BhbiA1L3NwYW4gNX1bY2RzLWxheW91dCo9InJvd3NAbWQ6NSJdPip7Z3JpZC1yb3c6c3BhbiA1L3NwYW4gNX1bY2RzLWxheW91dCo9ImNvbHNAbWQ6NiJdPip7Z3JpZC1jb2x1bW46c3BhbiA2L3NwYW4gNn1bY2RzLWxheW91dCo9InJvd3NAbWQ6NiJdPip7Z3JpZC1yb3c6c3Bh''@;'; put 'put ''biA2L3NwYW4gNn1bY2RzLWxheW91dCo9ImNvbHNAbWQ6NyJdPip7Z3JpZC1jb2x1bW46c3BhbiA3L3NwYW4gN31bY2RzLWxheW91dCo9InJvd3NAbWQ6NyJdPip7Z3JpZC1yb3c6c3BhbiA3L3NwYW4gN31bY2RzLWxheW91dCo9ImNvbHNAbWQ6OCJdPip7Z3JpZC1jb2x1bW46c3BhbiA4L3Nw''@;'; put 'put ''YW4gOH1bY2RzLWxheW91dCo9InJvd3NAbWQ6OCJdPip7Z3JpZC1yb3c6c3BhbiA4L3NwYW4gOH1bY2RzLWxheW91dCo9ImNvbHNAbWQ6OSJdPip7Z3JpZC1jb2x1bW46c3BhbiA5L3NwYW4gOX1bY2RzLWxheW91dCo9InJvd3NAbWQ6OSJdPip7Z3JpZC1yb3c6c3BhbiA5L3NwYW4gOX1bY2Rz''@;'; put 'put ''LWxheW91dCo9ImNvbHNAbWQ6MTAiXT4qe2dyaWQtY29sdW1uOnNwYW4gMTAvc3BhbiAxMH1bY2RzLWxheW91dCo9InJvd3NAbWQ6MTAiXT4qe2dyaWQtcm93OnNwYW4gMTAvc3BhbiAxMH1bY2RzLWxheW91dCo9ImNvbHNAbWQ6MTEiXT4qe2dyaWQtY29sdW1uOnNwYW4gMTEvc3BhbiAxMX1b''@;'; put 'put ''Y2RzLWxheW91dCo9InJvd3NAbWQ6MTEiXT4qe2dyaWQtcm93OnNwYW4gMTEvc3BhbiAxMX1bY2RzLWxheW91dCo9ImNvbHNAbWQ6MTIiXT4qe2dyaWQtY29sdW1uOnNwYW4gMTIvc3BhbiAxMn1bY2RzLWxheW91dCo9InJvd3NAbWQ6MTIiXT4qe2dyaWQtcm93OnNwYW4gMTIvc3BhbiAxMn19''@;'; put 'put ''QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXtbY2RzLWxheW91dCo9ImNvbHNAbGc6MSJdPip7Z3JpZC1jb2x1bW46c3BhbiAxL3NwYW4gMX1bY2RzLWxheW91dCo9InJvd3NAbGc6MSJdPip7Z3JpZC1yb3c6c3BhbiAxL3NwYW4gMX1bY2RzLWxheW91dCo9ImNvbHNAbGc6MiJdPip7Z3JpZC1j''@;'; put 'put ''b2x1bW46c3BhbiAyL3NwYW4gMn1bY2RzLWxheW91dCo9InJvd3NAbGc6MiJdPip7Z3JpZC1yb3c6c3BhbiAyL3NwYW4gMn1bY2RzLWxheW91dCo9ImNvbHNAbGc6MyJdPip7Z3JpZC1jb2x1bW46c3BhbiAzL3NwYW4gM31bY2RzLWxheW91dCo9InJvd3NAbGc6MyJdPip7Z3JpZC1yb3c6c3Bh''@;'; put 'put ''biAzL3NwYW4gM31bY2RzLWxheW91dCo9ImNvbHNAbGc6NCJdPip7Z3JpZC1jb2x1bW46c3BhbiA0L3NwYW4gNH1bY2RzLWxheW91dCo9InJvd3NAbGc6NCJdPip7Z3JpZC1yb3c6c3BhbiA0L3NwYW4gNH1bY2RzLWxheW91dCo9ImNvbHNAbGc6NSJdPip7Z3JpZC1jb2x1bW46c3BhbiA1L3Nw''@;'; put 'put ''YW4gNX1bY2RzLWxheW91dCo9InJvd3NAbGc6NSJdPip7Z3JpZC1yb3c6c3BhbiA1L3NwYW4gNX1bY2RzLWxheW91dCo9ImNvbHNAbGc6NiJdPip7Z3JpZC1jb2x1bW46c3BhbiA2L3NwYW4gNn1bY2RzLWxheW91dCo9InJvd3NAbGc6NiJdPip7Z3JpZC1yb3c6c3BhbiA2L3NwYW4gNn1bY2Rz''@;'; put 'put ''LWxheW91dCo9ImNvbHNAbGc6NyJdPip7Z3JpZC1jb2x1bW46c3BhbiA3L3NwYW4gN31bY2RzLWxheW91dCo9InJvd3NAbGc6NyJdPip7Z3JpZC1yb3c6c3BhbiA3L3NwYW4gN31bY2RzLWxheW91dCo9ImNvbHNAbGc6OCJdPip7Z3JpZC1jb2x1bW46c3BhbiA4L3NwYW4gOH1bY2RzLWxheW91''@;'; put 'put ''dCo9InJvd3NAbGc6OCJdPip7Z3JpZC1yb3c6c3BhbiA4L3NwYW4gOH1bY2RzLWxheW91dCo9ImNvbHNAbGc6OSJdPip7Z3JpZC1jb2x1bW46c3BhbiA5L3NwYW4gOX1bY2RzLWxheW91dCo9InJvd3NAbGc6OSJdPip7Z3JpZC1yb3c6c3BhbiA5L3NwYW4gOX1bY2RzLWxheW91dCo9ImNvbHNA''@;'; put 'put ''bGc6MTAiXT4qe2dyaWQtY29sdW1uOnNwYW4gMTAvc3BhbiAxMH1bY2RzLWxheW91dCo9InJvd3NAbGc6MTAiXT4qe2dyaWQtcm93OnNwYW4gMTAvc3BhbiAxMH1bY2RzLWxheW91dCo9ImNvbHNAbGc6MTEiXT4qe2dyaWQtY29sdW1uOnNwYW4gMTEvc3BhbiAxMX1bY2RzLWxheW91dCo9InJv''@;'; put 'put ''d3NAbGc6MTEiXT4qe2dyaWQtcm93OnNwYW4gMTEvc3BhbiAxMX1bY2RzLWxheW91dCo9ImNvbHNAbGc6MTIiXT4qe2dyaWQtY29sdW1uOnNwYW4gMTIvc3BhbiAxMn1bY2RzLWxheW91dCo9InJvd3NAbGc6MTIiXT4qe2dyaWQtcm93OnNwYW4gMTIvc3BhbiAxMn19QG1lZGlhIChtaW4td2lk''@;'; put 'put ''dGg6MTQ0MHB4KXtbY2RzLWxheW91dCo9ImNvbHNAeGw6MSJdPip7Z3JpZC1jb2x1bW46c3BhbiAxL3NwYW4gMX1bY2RzLWxheW91dCo9InJvd3NAeGw6MSJdPip7Z3JpZC1yb3c6c3BhbiAxL3NwYW4gMX1bY2RzLWxheW91dCo9ImNvbHNAeGw6MiJdPip7Z3JpZC1jb2x1bW46c3BhbiAyL3Nw''@;'; put 'put ''YW4gMn1bY2RzLWxheW91dCo9InJvd3NAeGw6MiJdPip7Z3JpZC1yb3c6c3BhbiAyL3NwYW4gMn1bY2RzLWxheW91dCo9ImNvbHNAeGw6MyJdPip7Z3JpZC1jb2x1bW46c3BhbiAzL3NwYW4gM31bY2RzLWxheW91dCo9InJvd3NAeGw6MyJdPip7Z3JpZC1yb3c6c3BhbiAzL3NwYW4gM31bY2Rz''@;'; put 'put ''LWxheW91dCo9ImNvbHNAeGw6NCJdPip7Z3JpZC1jb2x1bW46c3BhbiA0L3NwYW4gNH1bY2RzLWxheW91dCo9InJvd3NAeGw6NCJdPip7Z3JpZC1yb3c6c3BhbiA0L3NwYW4gNH1bY2RzLWxheW91dCo9ImNvbHNAeGw6NSJdPip7Z3JpZC1jb2x1bW46c3BhbiA1L3NwYW4gNX1bY2RzLWxheW91''@;'; put 'put ''dCo9InJvd3NAeGw6NSJdPip7Z3JpZC1yb3c6c3BhbiA1L3NwYW4gNX1bY2RzLWxheW91dCo9ImNvbHNAeGw6NiJdPip7Z3JpZC1jb2x1bW46c3BhbiA2L3NwYW4gNn1bY2RzLWxheW91dCo9InJvd3NAeGw6NiJdPip7Z3JpZC1yb3c6c3BhbiA2L3NwYW4gNn1bY2RzLWxheW91dCo9ImNvbHNA''@;'; put 'put ''eGw6NyJdPip7Z3JpZC1jb2x1bW46c3BhbiA3L3NwYW4gN31bY2RzLWxheW91dCo9InJvd3NAeGw6NyJdPip7Z3JpZC1yb3c6c3BhbiA3L3NwYW4gN31bY2RzLWxheW91dCo9ImNvbHNAeGw6OCJdPip7Z3JpZC1jb2x1bW46c3BhbiA4L3NwYW4gOH1bY2RzLWxheW91dCo9InJvd3NAeGw6OCJd''@;'; put 'put ''Pip7Z3JpZC1yb3c6c3BhbiA4L3NwYW4gOH1bY2RzLWxheW91dCo9ImNvbHNAeGw6OSJdPip7Z3JpZC1jb2x1bW46c3BhbiA5L3NwYW4gOX1bY2RzLWxheW91dCo9InJvd3NAeGw6OSJdPip7Z3JpZC1yb3c6c3BhbiA5L3NwYW4gOX1bY2RzLWxheW91dCo9ImNvbHNAeGw6MTAiXT4qe2dyaWQt''@;'; put 'put ''Y29sdW1uOnNwYW4gMTAvc3BhbiAxMH1bY2RzLWxheW91dCo9InJvd3NAeGw6MTAiXT4qe2dyaWQtcm93OnNwYW4gMTAvc3BhbiAxMH1bY2RzLWxheW91dCo9ImNvbHNAeGw6MTEiXT4qe2dyaWQtY29sdW1uOnNwYW4gMTEvc3BhbiAxMX1bY2RzLWxheW91dCo9InJvd3NAeGw6MTEiXT4qe2dy''@;'; put 'put ''aWQtcm93OnNwYW4gMTEvc3BhbiAxMX1bY2RzLWxheW91dCo9ImNvbHNAeGw6MTIiXT4qe2dyaWQtY29sdW1uOnNwYW4gMTIvc3BhbiAxMn1bY2RzLWxheW91dCo9InJvd3NAeGw6MTIiXT4qe2dyaWQtcm93OnNwYW4gMTIvc3BhbiAxMn19QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpe1tjZHMt''@;'; put 'put ''bGF5b3V0Kj0iY29sQHhzOjEiXXtncmlkLWNvbHVtbjpzcGFuIDEvc3BhbiAxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czoxIl17Z3JpZC1yb3c6c3BhbiAxL3NwYW4gMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6MiJde2dyaWQtY29sdW1uOnNwYW4gMi9zcGFuIDIh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOjIiXXtncmlkLXJvdzpzcGFuIDIvc3BhbiAyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czozIl17Z3JpZC1jb2x1bW46c3BhbiAzL3NwYW4gMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6MyJde2dyaWQtcm93OnNw''@;'; put 'put ''YW4gMy9zcGFuIDMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOjQiXXtncmlkLWNvbHVtbjpzcGFuIDQvc3BhbiA0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czo0Il17Z3JpZC1yb3c6c3BhbiA0L3NwYW4gNCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6NSJd''@;'; put 'put ''e2dyaWQtY29sdW1uOnNwYW4gNS9zcGFuIDUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOjUiXXtncmlkLXJvdzpzcGFuIDUvc3BhbiA1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czo2Il17Z3JpZC1jb2x1bW46c3BhbiA2L3NwYW4gNiFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJyb3dAeHM6NiJde2dyaWQtcm93OnNwYW4gNi9zcGFuIDYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOjciXXtncmlkLWNvbHVtbjpzcGFuIDcvc3BhbiA3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czo3Il17Z3JpZC1yb3c6c3BhbiA3L3NwYW4gNyFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6OCJde2dyaWQtY29sdW1uOnNwYW4gOC9zcGFuIDghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOjgiXXtncmlkLXJvdzpzcGFuIDgvc3BhbiA4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czo5Il17Z3JpZC1jb2x1bW46c3BhbiA5''@;'; put 'put ''L3NwYW4gOSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6OSJde2dyaWQtcm93OnNwYW4gOS9zcGFuIDkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOjEwIl17Z3JpZC1jb2x1bW46c3BhbiAxMC9zcGFuIDEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czoxMCJd''@;'; put 'put ''e2dyaWQtcm93OnNwYW4gMTAvc3BhbiAxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6MTEiXXtncmlkLWNvbHVtbjpzcGFuIDExL3NwYW4gMTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOjExIl17Z3JpZC1yb3c6c3BhbiAxMS9zcGFuIDExIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dCo9ImNvbEB4czoxMiJde2dyaWQtY29sdW1uOnNwYW4gMTIvc3BhbiAxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6MTIiXXtncmlkLXJvdzpzcGFuIDEyL3NwYW4gMTIhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7W2Nkcy1sYXlvdXQqPSJjb2xA''@;'; put 'put ''c206MSJde2dyaWQtY29sdW1uOnNwYW4gMS9zcGFuIDEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOjEiXXtncmlkLXJvdzpzcGFuIDEvc3BhbiAxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbToyIl17Z3JpZC1jb2x1bW46c3BhbiAyL3NwYW4gMiFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJyb3dAc206MiJde2dyaWQtcm93OnNwYW4gMi9zcGFuIDIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOjMiXXtncmlkLWNvbHVtbjpzcGFuIDMvc3BhbiAzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTozIl17Z3JpZC1yb3c6c3BhbiAzL3NwYW4gMyFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206NCJde2dyaWQtY29sdW1uOnNwYW4gNC9zcGFuIDQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOjQiXXtncmlkLXJvdzpzcGFuIDQvc3BhbiA0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTo1Il17Z3JpZC1jb2x1bW46''@;'; put 'put ''c3BhbiA1L3NwYW4gNSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206NSJde2dyaWQtcm93OnNwYW4gNS9zcGFuIDUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOjYiXXtncmlkLWNvbHVtbjpzcGFuIDYvc3BhbiA2IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTo2''@;'; put 'put ''Il17Z3JpZC1yb3c6c3BhbiA2L3NwYW4gNiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206NyJde2dyaWQtY29sdW1uOnNwYW4gNy9zcGFuIDchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOjciXXtncmlkLXJvdzpzcGFuIDcvc3BhbiA3IWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dCo9ImNvbEBzbTo4Il17Z3JpZC1jb2x1bW46c3BhbiA4L3NwYW4gOCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206OCJde2dyaWQtcm93OnNwYW4gOC9zcGFuIDghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOjkiXXtncmlkLWNvbHVtbjpzcGFuIDkvc3BhbiA5IWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dCo9InJvd0BzbTo5Il17Z3JpZC1yb3c6c3BhbiA5L3NwYW4gOSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206MTAiXXtncmlkLWNvbHVtbjpzcGFuIDEwL3NwYW4gMTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOjEwIl17Z3JpZC1yb3c6c3Bh''@;'; put 'put ''biAxMC9zcGFuIDEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbToxMSJde2dyaWQtY29sdW1uOnNwYW4gMTEvc3BhbiAxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206MTEiXXtncmlkLXJvdzpzcGFuIDExL3NwYW4gMTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29s''@;'; put 'put ''QHNtOjEyIl17Z3JpZC1jb2x1bW46c3BhbiAxMi9zcGFuIDEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbToxMiJde2dyaWQtcm93OnNwYW4gMTIvc3BhbiAxMiFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXtbY2RzLWxheW91dCo9ImNvbEBtZDoxIl17Z3JpZC1j''@;'; put 'put ''b2x1bW46c3BhbiAxL3NwYW4gMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6MSJde2dyaWQtcm93OnNwYW4gMS9zcGFuIDEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOjIiXXtncmlkLWNvbHVtbjpzcGFuIDIvc3BhbiAyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJv''@;'; put 'put ''d0BtZDoyIl17Z3JpZC1yb3c6c3BhbiAyL3NwYW4gMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6MyJde2dyaWQtY29sdW1uOnNwYW4gMy9zcGFuIDMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOjMiXXtncmlkLXJvdzpzcGFuIDMvc3BhbiAzIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dCo9ImNvbEBtZDo0Il17Z3JpZC1jb2x1bW46c3BhbiA0L3NwYW4gNCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6NCJde2dyaWQtcm93OnNwYW4gNC9zcGFuIDQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOjUiXXtncmlkLWNvbHVtbjpzcGFuIDUvc3BhbiA1''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDo1Il17Z3JpZC1yb3c6c3BhbiA1L3NwYW4gNSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6NiJde2dyaWQtY29sdW1uOnNwYW4gNi9zcGFuIDYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOjYiXXtncmlkLXJvdzpz''@;'; put 'put ''cGFuIDYvc3BhbiA2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDo3Il17Z3JpZC1jb2x1bW46c3BhbiA3L3NwYW4gNyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6NyJde2dyaWQtcm93OnNwYW4gNy9zcGFuIDchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOjgi''@;'; put 'put ''XXtncmlkLWNvbHVtbjpzcGFuIDgvc3BhbiA4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDo4Il17Z3JpZC1yb3c6c3BhbiA4L3NwYW4gOCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6OSJde2dyaWQtY29sdW1uOnNwYW4gOS9zcGFuIDkhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0icm93QG1kOjkiXXtncmlkLXJvdzpzcGFuIDkvc3BhbiA5IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDoxMCJde2dyaWQtY29sdW1uOnNwYW4gMTAvc3BhbiAxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6MTAiXXtncmlkLXJvdzpzcGFuIDEwL3NwYW4gMTAh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOjExIl17Z3JpZC1jb2x1bW46c3BhbiAxMS9zcGFuIDExIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDoxMSJde2dyaWQtcm93OnNwYW4gMTEvc3BhbiAxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6MTIiXXtncmlk''@;'; put 'put ''LWNvbHVtbjpzcGFuIDEyL3NwYW4gMTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOjEyIl17Z3JpZC1yb3c6c3BhbiAxMi9zcGFuIDEyIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXtbY2RzLWxheW91dCo9ImNvbEBsZzoxIl17Z3JpZC1jb2x1bW46c3BhbiAx''@;'; put 'put ''L3NwYW4gMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6MSJde2dyaWQtcm93OnNwYW4gMS9zcGFuIDEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOjIiXXtncmlkLWNvbHVtbjpzcGFuIDIvc3BhbiAyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzoyIl17Z3Jp''@;'; put 'put ''ZC1yb3c6c3BhbiAyL3NwYW4gMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6MyJde2dyaWQtY29sdW1uOnNwYW4gMy9zcGFuIDMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOjMiXXtncmlkLXJvdzpzcGFuIDMvc3BhbiAzIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNv''@;'; put 'put ''bEBsZzo0Il17Z3JpZC1jb2x1bW46c3BhbiA0L3NwYW4gNCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6NCJde2dyaWQtcm93OnNwYW4gNC9zcGFuIDQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOjUiXXtncmlkLWNvbHVtbjpzcGFuIDUvc3BhbiA1IWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dCo9InJvd0BsZzo1Il17Z3JpZC1yb3c6c3BhbiA1L3NwYW4gNSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6NiJde2dyaWQtY29sdW1uOnNwYW4gNi9zcGFuIDYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOjYiXXtncmlkLXJvdzpzcGFuIDYvc3BhbiA2''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzo3Il17Z3JpZC1jb2x1bW46c3BhbiA3L3NwYW4gNyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6NyJde2dyaWQtcm93OnNwYW4gNy9zcGFuIDchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOjgiXXtncmlkLWNvbHVt''@;'; put 'put ''bjpzcGFuIDgvc3BhbiA4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzo4Il17Z3JpZC1yb3c6c3BhbiA4L3NwYW4gOCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6OSJde2dyaWQtY29sdW1uOnNwYW4gOS9zcGFuIDkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxn''@;'; put 'put ''OjkiXXtncmlkLXJvdzpzcGFuIDkvc3BhbiA5IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzoxMCJde2dyaWQtY29sdW1uOnNwYW4gMTAvc3BhbiAxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6MTAiXXtncmlkLXJvdzpzcGFuIDEwL3NwYW4gMTAhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iY29sQGxnOjExIl17Z3JpZC1jb2x1bW46c3BhbiAxMS9zcGFuIDExIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzoxMSJde2dyaWQtcm93OnNwYW4gMTEvc3BhbiAxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6MTIiXXtncmlkLWNvbHVtbjpzcGFu''@;'; put 'put ''IDEyL3NwYW4gMTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOjEyIl17Z3JpZC1yb3c6c3BhbiAxMi9zcGFuIDEyIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTQ0MHB4KXtbY2RzLWxheW91dCo9ImNvbEB4bDoxIl17Z3JpZC1jb2x1bW46c3BhbiAxL3NwYW4gMSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6MSJde2dyaWQtcm93OnNwYW4gMS9zcGFuIDEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOjIiXXtncmlkLWNvbHVtbjpzcGFuIDIvc3BhbiAyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDoyIl17Z3JpZC1yb3c6c3BhbiAy''@;'; put 'put ''L3NwYW4gMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6MyJde2dyaWQtY29sdW1uOnNwYW4gMy9zcGFuIDMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOjMiXXtncmlkLXJvdzpzcGFuIDMvc3BhbiAzIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDo0Il17Z3Jp''@;'; put 'put ''ZC1jb2x1bW46c3BhbiA0L3NwYW4gNCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6NCJde2dyaWQtcm93OnNwYW4gNC9zcGFuIDQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOjUiXXtncmlkLWNvbHVtbjpzcGFuIDUvc3BhbiA1IWltcG9ydGFudH1bY2RzLWxheW91dCo9''@;'; put 'put ''InJvd0B4bDo1Il17Z3JpZC1yb3c6c3BhbiA1L3NwYW4gNSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6NiJde2dyaWQtY29sdW1uOnNwYW4gNi9zcGFuIDYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOjYiXXtncmlkLXJvdzpzcGFuIDYvc3BhbiA2IWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dCo9ImNvbEB4bDo3Il17Z3JpZC1jb2x1bW46c3BhbiA3L3NwYW4gNyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6NyJde2dyaWQtcm93OnNwYW4gNy9zcGFuIDchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOjgiXXtncmlkLWNvbHVtbjpzcGFuIDgvc3Bh''@;'; put 'put ''biA4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDo4Il17Z3JpZC1yb3c6c3BhbiA4L3NwYW4gOCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6OSJde2dyaWQtY29sdW1uOnNwYW4gOS9zcGFuIDkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOjkiXXtncmlkLXJv''@;'; put 'put ''dzpzcGFuIDkvc3BhbiA5IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDoxMCJde2dyaWQtY29sdW1uOnNwYW4gMTAvc3BhbiAxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6MTAiXXtncmlkLXJvdzpzcGFuIDEwL3NwYW4gMTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''Y29sQHhsOjExIl17Z3JpZC1jb2x1bW46c3BhbiAxMS9zcGFuIDExIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDoxMSJde2dyaWQtcm93OnNwYW4gMTEvc3BhbiAxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6MTIiXXtncmlkLWNvbHVtbjpzcGFuIDEyL3NwYW4gMTIh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOjEyIl17Z3JpZC1yb3c6c3BhbiAxMi9zcGFuIDEyIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpe1tjZHMtbGF5b3V0Kj0iY29sQHhzOnN0YXJ0LTEiXXtncmlkLWNvbHVtbi1zdGFydDoxIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dCo9ImNvbEB4czplbmQtMSJde2dyaWQtY29sdW1uLWVuZDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czpzdGFydC0xIl17Z3JpZC1yb3ctc3RhcnQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6ZW5kLTEiXXtncmlkLXJvdy1lbmQ6MSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJjb2xAeHM6c3RhcnQtMiJde2dyaWQtY29sdW1uLXN0YXJ0OjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOmVuZC0yIl17Z3JpZC1jb2x1bW4tZW5kOjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOnN0YXJ0LTIiXXtncmlkLXJvdy1zdGFydDoyIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czplbmQtMiJde2dyaWQtcm93LWVuZDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czpzdGFydC0zIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6ZW5kLTMiXXtncmlkLWNvbHVtbi1l''@;'; put 'put ''bmQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6c3RhcnQtMyJde2dyaWQtcm93LXN0YXJ0OjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOmVuZC0zIl17Z3JpZC1yb3ctZW5kOjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOnN0YXJ0LTQiXXtncmlkLWNv''@;'; put 'put ''bHVtbi1zdGFydDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czplbmQtNCJde2dyaWQtY29sdW1uLWVuZDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czpzdGFydC00Il17Z3JpZC1yb3ctc3RhcnQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6ZW5kLTQi''@;'; put 'put ''XXtncmlkLXJvdy1lbmQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6c3RhcnQtNSJde2dyaWQtY29sdW1uLXN0YXJ0OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOmVuZC01Il17Z3JpZC1jb2x1bW4tZW5kOjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhz''@;'; put 'put ''OnN0YXJ0LTUiXXtncmlkLXJvdy1zdGFydDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czplbmQtNSJde2dyaWQtcm93LWVuZDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czpzdGFydC02Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJjb2xAeHM6ZW5kLTYiXXtncmlkLWNvbHVtbi1lbmQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6c3RhcnQtNiJde2dyaWQtcm93LXN0YXJ0OjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOmVuZC02Il17Z3JpZC1yb3ctZW5kOjYhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iY29sQHhzOnN0YXJ0LTciXXtncmlkLWNvbHVtbi1zdGFydDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czplbmQtNyJde2dyaWQtY29sdW1uLWVuZDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czpzdGFydC03Il17Z3JpZC1yb3ctc3RhcnQ6NyFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6ZW5kLTciXXtncmlkLXJvdy1lbmQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6c3RhcnQtOCJde2dyaWQtY29sdW1uLXN0YXJ0OjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOmVuZC04Il17Z3JpZC1jb2x1bW4tZW5kOjgh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOnN0YXJ0LTgiXXtncmlkLXJvdy1zdGFydDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czplbmQtOCJde2dyaWQtcm93LWVuZDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czpzdGFydC05Il17Z3JpZC1jb2x1bW4t''@;'; put 'put ''c3RhcnQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6ZW5kLTkiXXtncmlkLWNvbHVtbi1lbmQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6c3RhcnQtOSJde2dyaWQtcm93LXN0YXJ0OjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOmVuZC05Il17Z3Jp''@;'; put 'put ''ZC1yb3ctZW5kOjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOnN0YXJ0LTEwIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOmVuZC0xMCJde2dyaWQtY29sdW1uLWVuZDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6''@;'; put 'put ''c3RhcnQtMTAiXXtncmlkLXJvdy1zdGFydDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6ZW5kLTEwIl17Z3JpZC1yb3ctZW5kOjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4czpzdGFydC0xMSJde2dyaWQtY29sdW1uLXN0YXJ0OjExIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dCo9ImNvbEB4czplbmQtMTEiXXtncmlkLWNvbHVtbi1lbmQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOnN0YXJ0LTExIl17Z3JpZC1yb3ctc3RhcnQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhzOmVuZC0xMSJde2dyaWQtcm93LWVuZDoxMSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6c3RhcnQtMTIiXXtncmlkLWNvbHVtbi1zdGFydDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeHM6ZW5kLTEyIl17Z3JpZC1jb2x1bW4tZW5kOjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czpzdGFydC0xMiJde2dyaWQtcm93''@;'; put 'put ''LXN0YXJ0OjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4czplbmQtMTIiXXtncmlkLXJvdy1lbmQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOnN0YXJ0LTEzIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhzOmVuZC0x''@;'; put 'put ''MyJde2dyaWQtY29sdW1uLWVuZDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6c3RhcnQtMTMiXXtncmlkLXJvdy1zdGFydDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeHM6ZW5kLTEzIl17Z3JpZC1yb3ctZW5kOjEzIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lk''@;'; put 'put ''dGg6NzY4cHgpe1tjZHMtbGF5b3V0Kj0iY29sQHNtOnN0YXJ0LTEiXXtncmlkLWNvbHVtbi1zdGFydDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTplbmQtMSJde2dyaWQtY29sdW1uLWVuZDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTpzdGFydC0xIl17Z3JpZC1y''@;'; put 'put ''b3ctc3RhcnQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206ZW5kLTEiXXtncmlkLXJvdy1lbmQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206c3RhcnQtMiJde2dyaWQtY29sdW1uLXN0YXJ0OjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOmVuZC0yIl17''@;'; put 'put ''Z3JpZC1jb2x1bW4tZW5kOjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOnN0YXJ0LTIiXXtncmlkLXJvdy1zdGFydDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTplbmQtMiJde2dyaWQtcm93LWVuZDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTpzdGFy''@;'; put 'put ''dC0zIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206ZW5kLTMiXXtncmlkLWNvbHVtbi1lbmQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206c3RhcnQtMyJde2dyaWQtcm93LXN0YXJ0OjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0i''@;'; put 'put ''cm93QHNtOmVuZC0zIl17Z3JpZC1yb3ctZW5kOjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOnN0YXJ0LTQiXXtncmlkLWNvbHVtbi1zdGFydDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTplbmQtNCJde2dyaWQtY29sdW1uLWVuZDo0IWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dCo9InJvd0BzbTpzdGFydC00Il17Z3JpZC1yb3ctc3RhcnQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206ZW5kLTQiXXtncmlkLXJvdy1lbmQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206c3RhcnQtNSJde2dyaWQtY29sdW1uLXN0YXJ0OjUhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0Kj0iY29sQHNtOmVuZC01Il17Z3JpZC1jb2x1bW4tZW5kOjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOnN0YXJ0LTUiXXtncmlkLXJvdy1zdGFydDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTplbmQtNSJde2dyaWQtcm93LWVuZDo1IWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTpzdGFydC02Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206ZW5kLTYiXXtncmlkLWNvbHVtbi1lbmQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206c3RhcnQtNiJde2dyaWQtcm93LXN0''@;'; put 'put ''YXJ0OjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOmVuZC02Il17Z3JpZC1yb3ctZW5kOjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOnN0YXJ0LTciXXtncmlkLWNvbHVtbi1zdGFydDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTplbmQtNyJde2dyaWQt''@;'; put 'put ''Y29sdW1uLWVuZDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTpzdGFydC03Il17Z3JpZC1yb3ctc3RhcnQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206ZW5kLTciXXtncmlkLXJvdy1lbmQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206c3RhcnQtOCJd''@;'; put 'put ''e2dyaWQtY29sdW1uLXN0YXJ0OjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOmVuZC04Il17Z3JpZC1jb2x1bW4tZW5kOjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOnN0YXJ0LTgiXXtncmlkLXJvdy1zdGFydDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0Bz''@;'; put 'put ''bTplbmQtOCJde2dyaWQtcm93LWVuZDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTpzdGFydC05Il17Z3JpZC1jb2x1bW4tc3RhcnQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206ZW5kLTkiXXtncmlkLWNvbHVtbi1lbmQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJyb3dAc206c3RhcnQtOSJde2dyaWQtcm93LXN0YXJ0OjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOmVuZC05Il17Z3JpZC1yb3ctZW5kOjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOnN0YXJ0LTEwIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTAhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iY29sQHNtOmVuZC0xMCJde2dyaWQtY29sdW1uLWVuZDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206c3RhcnQtMTAiXXtncmlkLXJvdy1zdGFydDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206ZW5kLTEwIl17Z3JpZC1yb3ctZW5kOjEwIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTpzdGFydC0xMSJde2dyaWQtY29sdW1uLXN0YXJ0OjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBzbTplbmQtMTEiXXtncmlkLWNvbHVtbi1lbmQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOnN0YXJ0LTExIl17Z3Jp''@;'; put 'put ''ZC1yb3ctc3RhcnQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHNtOmVuZC0xMSJde2dyaWQtcm93LWVuZDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206c3RhcnQtMTIiXXtncmlkLWNvbHVtbi1zdGFydDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAc206''@;'; put 'put ''ZW5kLTEyIl17Z3JpZC1jb2x1bW4tZW5kOjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTpzdGFydC0xMiJde2dyaWQtcm93LXN0YXJ0OjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BzbTplbmQtMTIiXXtncmlkLXJvdy1lbmQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''Kj0iY29sQHNtOnN0YXJ0LTEzIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHNtOmVuZC0xMyJde2dyaWQtY29sdW1uLWVuZDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206c3RhcnQtMTMiXXtncmlkLXJvdy1zdGFydDoxMyFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAc206ZW5kLTEzIl17Z3JpZC1yb3ctZW5kOjEzIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpe1tjZHMtbGF5b3V0Kj0iY29sQG1kOnN0YXJ0LTEiXXtncmlkLWNvbHVtbi1zdGFydDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNv''@;'; put 'put ''bEBtZDplbmQtMSJde2dyaWQtY29sdW1uLWVuZDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDpzdGFydC0xIl17Z3JpZC1yb3ctc3RhcnQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6ZW5kLTEiXXtncmlkLXJvdy1lbmQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJjb2xAbWQ6c3RhcnQtMiJde2dyaWQtY29sdW1uLXN0YXJ0OjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOmVuZC0yIl17Z3JpZC1jb2x1bW4tZW5kOjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOnN0YXJ0LTIiXXtncmlkLXJvdy1zdGFydDoyIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dCo9InJvd0BtZDplbmQtMiJde2dyaWQtcm93LWVuZDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDpzdGFydC0zIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6ZW5kLTMiXXtncmlkLWNvbHVtbi1lbmQ6MyFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6c3RhcnQtMyJde2dyaWQtcm93LXN0YXJ0OjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOmVuZC0zIl17Z3JpZC1yb3ctZW5kOjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOnN0YXJ0LTQiXXtncmlkLWNvbHVtbi1zdGFy''@;'; put 'put ''dDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDplbmQtNCJde2dyaWQtY29sdW1uLWVuZDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDpzdGFydC00Il17Z3JpZC1yb3ctc3RhcnQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6ZW5kLTQiXXtncmlkLXJv''@;'; put 'put ''dy1lbmQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6c3RhcnQtNSJde2dyaWQtY29sdW1uLXN0YXJ0OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOmVuZC01Il17Z3JpZC1jb2x1bW4tZW5kOjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOnN0YXJ0LTUi''@;'; put 'put ''XXtncmlkLXJvdy1zdGFydDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDplbmQtNSJde2dyaWQtcm93LWVuZDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDpzdGFydC02Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6''@;'; put 'put ''ZW5kLTYiXXtncmlkLWNvbHVtbi1lbmQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6c3RhcnQtNiJde2dyaWQtcm93LXN0YXJ0OjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOmVuZC02Il17Z3JpZC1yb3ctZW5kOjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29s''@;'; put 'put ''QG1kOnN0YXJ0LTciXXtncmlkLWNvbHVtbi1zdGFydDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDplbmQtNyJde2dyaWQtY29sdW1uLWVuZDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDpzdGFydC03Il17Z3JpZC1yb3ctc3RhcnQ6NyFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJyb3dAbWQ6ZW5kLTciXXtncmlkLXJvdy1lbmQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6c3RhcnQtOCJde2dyaWQtY29sdW1uLXN0YXJ0OjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOmVuZC04Il17Z3JpZC1jb2x1bW4tZW5kOjghaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0Kj0icm93QG1kOnN0YXJ0LTgiXXtncmlkLXJvdy1zdGFydDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDplbmQtOCJde2dyaWQtcm93LWVuZDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDpzdGFydC05Il17Z3JpZC1jb2x1bW4tc3RhcnQ6OSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6ZW5kLTkiXXtncmlkLWNvbHVtbi1lbmQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6c3RhcnQtOSJde2dyaWQtcm93LXN0YXJ0OjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOmVuZC05Il17Z3JpZC1yb3ctZW5k''@;'; put 'put ''OjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOnN0YXJ0LTEwIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOmVuZC0xMCJde2dyaWQtY29sdW1uLWVuZDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6c3RhcnQtMTAi''@;'; put 'put ''XXtncmlkLXJvdy1zdGFydDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6ZW5kLTEwIl17Z3JpZC1yb3ctZW5kOjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBtZDpzdGFydC0xMSJde2dyaWQtY29sdW1uLXN0YXJ0OjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNv''@;'; put 'put ''bEBtZDplbmQtMTEiXXtncmlkLWNvbHVtbi1lbmQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOnN0YXJ0LTExIl17Z3JpZC1yb3ctc3RhcnQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QG1kOmVuZC0xMSJde2dyaWQtcm93LWVuZDoxMSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJjb2xAbWQ6c3RhcnQtMTIiXXtncmlkLWNvbHVtbi1zdGFydDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbWQ6ZW5kLTEyIl17Z3JpZC1jb2x1bW4tZW5kOjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDpzdGFydC0xMiJde2dyaWQtcm93LXN0YXJ0OjEy''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BtZDplbmQtMTIiXXtncmlkLXJvdy1lbmQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOnN0YXJ0LTEzIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQG1kOmVuZC0xMyJde2dyaWQt''@;'; put 'put ''Y29sdW1uLWVuZDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6c3RhcnQtMTMiXXtncmlkLXJvdy1zdGFydDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbWQ6ZW5kLTEzIl17Z3JpZC1yb3ctZW5kOjEzIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4''@;'; put 'put ''KXtbY2RzLWxheW91dCo9ImNvbEBsZzpzdGFydC0xIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6ZW5kLTEiXXtncmlkLWNvbHVtbi1lbmQ6MSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6c3RhcnQtMSJde2dyaWQtcm93LXN0YXJ0''@;'; put 'put ''OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOmVuZC0xIl17Z3JpZC1yb3ctZW5kOjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOnN0YXJ0LTIiXXtncmlkLWNvbHVtbi1zdGFydDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzplbmQtMiJde2dyaWQtY29s''@;'; put 'put ''dW1uLWVuZDoyIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzpzdGFydC0yIl17Z3JpZC1yb3ctc3RhcnQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6ZW5kLTIiXXtncmlkLXJvdy1lbmQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6c3RhcnQtMyJde2dy''@;'; put 'put ''aWQtY29sdW1uLXN0YXJ0OjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOmVuZC0zIl17Z3JpZC1jb2x1bW4tZW5kOjMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOnN0YXJ0LTMiXXtncmlkLXJvdy1zdGFydDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzpl''@;'; put 'put ''bmQtMyJde2dyaWQtcm93LWVuZDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzpzdGFydC00Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6ZW5kLTQiXXtncmlkLWNvbHVtbi1lbmQ6NCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJy''@;'; put 'put ''b3dAbGc6c3RhcnQtNCJde2dyaWQtcm93LXN0YXJ0OjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOmVuZC00Il17Z3JpZC1yb3ctZW5kOjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOnN0YXJ0LTUiXXtncmlkLWNvbHVtbi1zdGFydDo1IWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dCo9ImNvbEBsZzplbmQtNSJde2dyaWQtY29sdW1uLWVuZDo1IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzpzdGFydC01Il17Z3JpZC1yb3ctc3RhcnQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6ZW5kLTUiXXtncmlkLXJvdy1lbmQ6NSFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXQqPSJjb2xAbGc6c3RhcnQtNiJde2dyaWQtY29sdW1uLXN0YXJ0OjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOmVuZC02Il17Z3JpZC1jb2x1bW4tZW5kOjYhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOnN0YXJ0LTYiXXtncmlkLXJvdy1zdGFydDo2IWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzplbmQtNiJde2dyaWQtcm93LWVuZDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzpzdGFydC03Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6ZW5kLTciXXtncmlkLWNvbHVtbi1l''@;'; put 'put ''bmQ6NyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6c3RhcnQtNyJde2dyaWQtcm93LXN0YXJ0OjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOmVuZC03Il17Z3JpZC1yb3ctZW5kOjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOnN0YXJ0LTgiXXtncmlkLWNv''@;'; put 'put ''bHVtbi1zdGFydDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzplbmQtOCJde2dyaWQtY29sdW1uLWVuZDo4IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzpzdGFydC04Il17Z3JpZC1yb3ctc3RhcnQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6ZW5kLTgi''@;'; put 'put ''XXtncmlkLXJvdy1lbmQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6c3RhcnQtOSJde2dyaWQtY29sdW1uLXN0YXJ0OjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOmVuZC05Il17Z3JpZC1jb2x1bW4tZW5kOjkhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxn''@;'; put 'put ''OnN0YXJ0LTkiXXtncmlkLXJvdy1zdGFydDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzplbmQtOSJde2dyaWQtcm93LWVuZDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzpzdGFydC0xMCJde2dyaWQtY29sdW1uLXN0YXJ0OjEwIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dCo9ImNvbEBsZzplbmQtMTAiXXtncmlkLWNvbHVtbi1lbmQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOnN0YXJ0LTEwIl17Z3JpZC1yb3ctc3RhcnQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOmVuZC0xMCJde2dyaWQtcm93LWVuZDoxMCFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXQqPSJjb2xAbGc6c3RhcnQtMTEiXXtncmlkLWNvbHVtbi1zdGFydDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAbGc6ZW5kLTExIl17Z3JpZC1jb2x1bW4tZW5kOjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzpzdGFydC0xMSJde2dyaWQtcm93LXN0''@;'; put 'put ''YXJ0OjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0BsZzplbmQtMTEiXXtncmlkLXJvdy1lbmQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOnN0YXJ0LTEyIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQGxnOmVuZC0xMiJd''@;'; put 'put ''e2dyaWQtY29sdW1uLWVuZDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6c3RhcnQtMTIiXXtncmlkLXJvdy1zdGFydDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAbGc6ZW5kLTEyIl17Z3JpZC1yb3ctZW5kOjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBs''@;'; put 'put ''ZzpzdGFydC0xMyJde2dyaWQtY29sdW1uLXN0YXJ0OjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEBsZzplbmQtMTMiXXtncmlkLWNvbHVtbi1lbmQ6MTMhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QGxnOnN0YXJ0LTEzIl17Z3JpZC1yb3ctc3RhcnQ6MTMhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0icm93QGxnOmVuZC0xMyJde2dyaWQtcm93LWVuZDoxMyFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjE0NDBweCl7W2Nkcy1sYXlvdXQqPSJjb2xAeGw6c3RhcnQtMSJde2dyaWQtY29sdW1uLXN0YXJ0OjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOmVu''@;'; put 'put ''ZC0xIl17Z3JpZC1jb2x1bW4tZW5kOjEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOnN0YXJ0LTEiXXtncmlkLXJvdy1zdGFydDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDplbmQtMSJde2dyaWQtcm93LWVuZDoxIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4''@;'; put 'put ''bDpzdGFydC0yIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6ZW5kLTIiXXtncmlkLWNvbHVtbi1lbmQ6MiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6c3RhcnQtMiJde2dyaWQtcm93LXN0YXJ0OjIhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0icm93QHhsOmVuZC0yIl17Z3JpZC1yb3ctZW5kOjIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOnN0YXJ0LTMiXXtncmlkLWNvbHVtbi1zdGFydDozIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDplbmQtMyJde2dyaWQtY29sdW1uLWVuZDozIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dCo9InJvd0B4bDpzdGFydC0zIl17Z3JpZC1yb3ctc3RhcnQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6ZW5kLTMiXXtncmlkLXJvdy1lbmQ6MyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6c3RhcnQtNCJde2dyaWQtY29sdW1uLXN0YXJ0OjQhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOmVuZC00Il17Z3JpZC1jb2x1bW4tZW5kOjQhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOnN0YXJ0LTQiXXtncmlkLXJvdy1zdGFydDo0IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDplbmQtNCJde2dyaWQtcm93LWVuZDo0''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDpzdGFydC01Il17Z3JpZC1jb2x1bW4tc3RhcnQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6ZW5kLTUiXXtncmlkLWNvbHVtbi1lbmQ6NSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6c3RhcnQtNSJde2dyaWQt''@;'; put 'put ''cm93LXN0YXJ0OjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOmVuZC01Il17Z3JpZC1yb3ctZW5kOjUhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOnN0YXJ0LTYiXXtncmlkLWNvbHVtbi1zdGFydDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDplbmQtNiJd''@;'; put 'put ''e2dyaWQtY29sdW1uLWVuZDo2IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDpzdGFydC02Il17Z3JpZC1yb3ctc3RhcnQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6ZW5kLTYiXXtncmlkLXJvdy1lbmQ6NiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6c3Rh''@;'; put 'put ''cnQtNyJde2dyaWQtY29sdW1uLXN0YXJ0OjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOmVuZC03Il17Z3JpZC1jb2x1bW4tZW5kOjchaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOnN0YXJ0LTciXXtncmlkLXJvdy1zdGFydDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9''@;'; put 'put ''InJvd0B4bDplbmQtNyJde2dyaWQtcm93LWVuZDo3IWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDpzdGFydC04Il17Z3JpZC1jb2x1bW4tc3RhcnQ6OCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6ZW5kLTgiXXtncmlkLWNvbHVtbi1lbmQ6OCFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXQqPSJyb3dAeGw6c3RhcnQtOCJde2dyaWQtcm93LXN0YXJ0OjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOmVuZC04Il17Z3JpZC1yb3ctZW5kOjghaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOnN0YXJ0LTkiXXtncmlkLWNvbHVtbi1zdGFydDo5IWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dCo9ImNvbEB4bDplbmQtOSJde2dyaWQtY29sdW1uLWVuZDo5IWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDpzdGFydC05Il17Z3JpZC1yb3ctc3RhcnQ6OSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6ZW5kLTkiXXtncmlkLXJvdy1lbmQ6OSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6c3RhcnQtMTAiXXtncmlkLWNvbHVtbi1zdGFydDoxMCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6ZW5kLTEwIl17Z3JpZC1jb2x1bW4tZW5kOjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDpzdGFydC0xMCJde2dyaWQt''@;'; put 'put ''cm93LXN0YXJ0OjEwIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDplbmQtMTAiXXtncmlkLXJvdy1lbmQ6MTAhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOnN0YXJ0LTExIl17Z3JpZC1jb2x1bW4tc3RhcnQ6MTEhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iY29sQHhsOmVu''@;'; put 'put ''ZC0xMSJde2dyaWQtY29sdW1uLWVuZDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6c3RhcnQtMTEiXXtncmlkLXJvdy1zdGFydDoxMSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJyb3dAeGw6ZW5kLTExIl17Z3JpZC1yb3ctZW5kOjExIWltcG9ydGFudH1bY2RzLWxheW91dCo9''@;'; put 'put ''ImNvbEB4bDpzdGFydC0xMiJde2dyaWQtY29sdW1uLXN0YXJ0OjEyIWltcG9ydGFudH1bY2RzLWxheW91dCo9ImNvbEB4bDplbmQtMTIiXXtncmlkLWNvbHVtbi1lbmQ6MTIhaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOnN0YXJ0LTEyIl17Z3JpZC1yb3ctc3RhcnQ6MTIhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0Kj0icm93QHhsOmVuZC0xMiJde2dyaWQtcm93LWVuZDoxMiFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6c3RhcnQtMTMiXXtncmlkLWNvbHVtbi1zdGFydDoxMyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXQqPSJjb2xAeGw6ZW5kLTEzIl17Z3JpZC1jb2x1bW4t''@;'; put 'put ''ZW5kOjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDpzdGFydC0xMyJde2dyaWQtcm93LXN0YXJ0OjEzIWltcG9ydGFudH1bY2RzLWxheW91dCo9InJvd0B4bDplbmQtMTMiXXtncmlkLXJvdy1lbmQ6MTMhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7W2Nkcy1s''@;'; put 'put ''YXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czp0b3AiXXthbGlnbi1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6cmlnaHQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZW5kfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxp''@;'; put 'put ''Z25AeHM6Ym90dG9tIl17YWxpZ24tY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4czpsZWZ0Il17anVzdGlmeS1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6dmVydGljYWwtc3RyZXRjaCJde2Fs''@;'; put 'put ''aWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlk''@;'; put 'put ''XVtjZHMtbGF5b3V0Kj0iYWxpZ25AeHM6c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhzOnZl''@;'; put 'put ''cnRpY2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2Rz''@;'; put 'put ''LWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhzOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7W2Nkcy1sYXlv''@;'; put 'put ''dXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTp0b3AiXXthbGlnbi1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206cmlnaHQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZW5kfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25A''@;'; put 'put ''c206Ym90dG9tIl17YWxpZ24tY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBzbTpsZWZ0Il17anVzdGlmeS1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206dmVydGljYWwtc3RyZXRjaCJde2FsaWdu''@;'; put 'put ''LWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25Ac206aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtj''@;'; put 'put ''ZHMtbGF5b3V0Kj0iYWxpZ25Ac206c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHNtOnZlcnRp''@;'; put 'put ''Y2FsLWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHNtOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxh''@;'; put 'put ''eW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHNtOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXR+''@;'; put 'put ''PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDp0b3AiXXthbGlnbi1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6cmlnaHQiXXtqdXN0aWZ5LWNvbnRlbnQ6ZW5kfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6''@;'; put 'put ''Ym90dG9tIl17YWxpZ24tY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBtZDpsZWZ0Il17anVzdGlmeS1jb250ZW50OnN0YXJ0fVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6dmVydGljYWwtc3RyZXRjaCJde2FsaWduLWl0''@;'; put 'put ''ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbWQ6aG9yaXpvbnRhbC1zdHJldGNoIl17anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0iYWxpZ25AbWQ6c3RyZXRjaCJde2FsaWduLWl0ZW1zOnN0cmV0Y2g7YWxpZ24tY29udGVudDpzdHJldGNoO2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQG1kOnZlcnRpY2Fs''@;'; put 'put ''LWNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQG1kOmhvcml6b250YWwtY2VudGVyIl17anVzdGlmeS1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn1bY2RzLWxheW91''@;'; put 'put ''dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQG1kOmNlbnRlciJde2FsaWduLWl0ZW1zOmNlbnRlcjthbGlnbi1jb250ZW50OmNlbnRlcjtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpe1tjZHMtbGF5b3V0fj1n''@;'; put 'put ''cmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6dG9wIl17YWxpZ24tY29udGVudDpzdGFydH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnJpZ2h0Il17anVzdGlmeS1jb250ZW50OmVuZH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmJv''@;'; put 'put ''dHRvbSJde2FsaWduLWNvbnRlbnQ6ZW5kfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AbGc6bGVmdCJde2p1c3RpZnktY29udGVudDpzdGFydH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQGxnOnZlcnRpY2FsLXN0cmV0Y2giXXthbGlnbi1pdGVt''@;'; put 'put ''czpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQGxnOmhvcml6b250YWwtc3RyZXRjaCJde2p1c3RpZnktaXRlbXM6c3RyZXRjaDtqdXN0aWZ5LWNvbnRlbnQ6c3RyZXRjaH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxh''@;'; put 'put ''eW91dCo9ImFsaWduQGxnOnN0cmV0Y2giXXthbGlnbi1pdGVtczpzdHJldGNoO2FsaWduLWNvbnRlbnQ6c3RyZXRjaDtqdXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzp2ZXJ0aWNhbC1j''@;'; put 'put ''ZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpob3Jpem9udGFsLWNlbnRlciJde2p1c3RpZnktaXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkBsZzpjZW50ZXIiXXthbGlnbi1pdGVtczpjZW50ZXI7YWxpZ24tY29udGVudDpjZW50ZXI7anVzdGlmeS1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcn19QG1lZGlhIChtaW4td2lkdGg6MTQ0MHB4KXtbY2RzLWxheW91dH49Z3Jp''@;'; put 'put ''ZF1bY2RzLWxheW91dCo9ImFsaWduQHhsOnRvcCJde2FsaWduLWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpyaWdodCJde2p1c3RpZnktY29udGVudDplbmR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpib3R0''@;'; put 'put ''b20iXXthbGlnbi1jb250ZW50OmVuZH1bY2RzLWxheW91dH49Z3JpZF1bY2RzLWxheW91dCo9ImFsaWduQHhsOmxlZnQiXXtqdXN0aWZ5LWNvbnRlbnQ6c3RhcnR9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDp2ZXJ0aWNhbC1zdHJldGNoIl17YWxpZ24taXRlbXM6''@;'; put 'put ''c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlvdXQqPSJhbGlnbkB4bDpob3Jpem9udGFsLXN0cmV0Y2giXXtqdXN0aWZ5LWl0ZW1zOnN0cmV0Y2g7anVzdGlmeS1jb250ZW50OnN0cmV0Y2h9W2Nkcy1sYXlvdXR+PWdyaWRdW2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJhbGlnbkB4bDpzdHJldGNoIl17YWxpZ24taXRlbXM6c3RyZXRjaDthbGlnbi1jb250ZW50OnN0cmV0Y2g7anVzdGlmeS1pdGVtczpzdHJldGNoO2p1c3RpZnktY29udGVudDpzdHJldGNofVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6dmVydGljYWwtY2Vu''@;'; put 'put ''dGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1ncmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6aG9yaXpvbnRhbC1jZW50ZXIiXXtqdXN0aWZ5LWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfVtjZHMtbGF5b3V0fj1n''@;'; put 'put ''cmlkXVtjZHMtbGF5b3V0Kj0iYWxpZ25AeGw6Y2VudGVyIl17YWxpZ24taXRlbXM6Y2VudGVyO2FsaWduLWNvbnRlbnQ6Y2VudGVyO2p1c3RpZnktaXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXJ9fVtjZHMtbGF5b3V0fj0iZGlzcGxheTpub25lIl17ZGlzcGxheTpub25lIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49ImRpc3BsYXk6ZmxleCJde2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5OmNvbnRlbnRzIl17ZGlzcGxheTpjb250ZW50cyFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5OmJsb2NrIl17ZGlzcGxheTpibG9jayFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5OmlubGluZSJde2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudH1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QHNtOm5vbmUiXXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iZGlzcGxh''@;'; put 'put ''eUBzbTpmbGV4Il17ZGlzcGxheTpmbGV4IWltcG9ydGFudH1bY2RzLWxheW91dH49ImRpc3BsYXlAc206YmxvY2siXXtkaXNwbGF5OmJsb2NrIWltcG9ydGFudH1bY2RzLWxheW91dH49ImRpc3BsYXlAc206aW5saW5lIl17ZGlzcGxheTppbmxpbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13''@;'; put 'put ''aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QG1kOm5vbmUiXXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iZGlzcGxheUBtZDpmbGV4Il17ZGlzcGxheTpmbGV4IWltcG9ydGFudH1bY2RzLWxheW91dH49ImRpc3BsYXlAbWQ6YmxvY2siXXtkaXNwbGF5OmJs''@;'; put 'put ''b2NrIWltcG9ydGFudH1bY2RzLWxheW91dH49ImRpc3BsYXlAbWQ6aW5saW5lIl17ZGlzcGxheTppbmxpbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpe1tjZHMtbGF5b3V0fj0iZGlzcGxheUBsZzpub25lIl17ZGlzcGxheTpub25lIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49ImRpc3BsYXlAbGc6ZmxleCJde2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QGxnOmJsb2NrIl17ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QGxnOmlubGluZSJde2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudH19QG1l''@;'; put 'put ''ZGlhIChtaW4td2lkdGg6MTQ0MHB4KXtbY2RzLWxheW91dH49ImRpc3BsYXlAeGw6bm9uZSJde2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJkaXNwbGF5QHhsOmZsZXgiXXtkaXNwbGF5OmZsZXghaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iZGlzcGxheUB4bDpibG9jayJd''@;'; put 'put ''e2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iZGlzcGxheUB4bDppbmxpbmUiXXtkaXNwbGF5OmlubGluZSFpbXBvcnRhbnR9fTo6c2xvdHRlZChbY2RzLWxheW91dH49ImRpc3BsYXk6c2NyZWVuLXJlYWRlci1vbmx5Il0pLFtjZHMtbGF5b3V0fj0iZGlzcGxheTpzY3Jl''@;'; put 'put ''ZW4tcmVhZGVyLW9ubHkiXXtwb3NpdGlvbjphYnNvbHV0ZSFpbXBvcnRhbnQ7Y2xpcDpyZWN0KDFweCwxcHgsMXB4LDFweCk7Y2xpcC1wYXRoOmluc2V0KDUwJSk7cGFkZGluZzowO2JvcmRlcjowO2hlaWdodDoxcHg7d2lkdGg6MXB4O292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dy''@;'; put 'put ''YXA7dG9wOjA7bGVmdDowO2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fVtjZHMtbGF5b3V0Kj0iZ2FwOm5vbmUiXXtnYXA6MH1bY2RzLWxheW91dCo9ImdhcDp4eHhzIl17Z2FwOnZhcigtLVwzYjQgMSl9W2Nkcy1sYXlvdXQqPSJnYXA6eHhzIl17Z2FwOnZhcigtLVwzYjQgMil9W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJnYXA6eHMiXXtnYXA6dmFyKC0tXDNiNCAzKX1bY2RzLWxheW91dCo9ImdhcDpzbSJde2dhcDp2YXIoLS1cM2I0IDQpfVtjZHMtbGF5b3V0Kj0iZ2FwOm1kIl17Z2FwOnZhcigtLVwzYjQgNSl9W2Nkcy1sYXlvdXQqPSJnYXA6bGciXXtnYXA6dmFyKC0tXDNiNCA2KX1bY2RzLWxheW91''@;'; put 'put ''dCo9ImdhcDp4bCJde2dhcDp2YXIoLS1cM2I0IDcpfVtjZHMtbGF5b3V0Kj0iZ2FwOnh4bCJde2dhcDp2YXIoLS1cM2I0IDgpfVtjZHMtbGF5b3V0Kj0iZ2FwOnh4eGwiXXtnYXA6dmFyKC0tXDNiNCA5KX1bY2RzLWxheW91dH49InA6bm9uZSJde3BhZGRpbmc6MCFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PSJtOm5vbmUiXXttYXJnaW46MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOnh4eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibTp4eHhzIl17bWFyZ2luOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icDp4eHMi''@;'; put 'put ''XXtwYWRkaW5nOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibTp4eHMiXXttYXJnaW46dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOnhzIl17cGFkZGluZzp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im06eHMiXXttYXJn''@;'; put 'put ''aW46dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOnNtIl17cGFkZGluZzp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im06c20iXXttYXJnaW46dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOm1kIl17cGFkZGluZzp2YXIo''@;'; put 'put ''LS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im06bWQiXXttYXJnaW46dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOmxnIl17cGFkZGluZzp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im06bGciXXttYXJnaW46dmFyKC0tXDNiNCA2''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOnhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im06eGwiXXttYXJnaW46dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwOnh4bCJde3BhZGRpbmc6dmFyKC0tXDNiNCA4KSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJtOnh4bCJde21hcmdpbjp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InA6eHh4bCJde3BhZGRpbmc6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtOnh4eGwiXXttYXJnaW46dmFyKC0tXDNiNCA5KSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJwLXg6bm9uZSJde3BhZGRpbmctbGVmdDowIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15Om5vbmUiXXtwYWRkaW5nLXRvcDowIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49InAteDp4eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6eHh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9t''@;'; put 'put ''OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14Onh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15Onh4cyJde3BhZGRpbmctdG9wOnZhcigt''@;'; put 'put ''LVwzYjQgMikhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14OnhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PSJwLXk6eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteDpzbSJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZh''@;'; put 'put ''cigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15OnNtIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXg6bWQiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNi''@;'; put 'put ''NCA1KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteTptZCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''cC14OmxnIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6bGciXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1c''@;'; put 'put ''M2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteDp4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15OnhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA3KSFp''@;'; put 'put ''bXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXg6eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXk6''@;'; put 'put ''eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXg6eHh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwz''@;'; put 'put ''YjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15Onh4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teDpub25lIl17bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnQ7''@;'; put 'put ''bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15Om5vbmUiXXttYXJnaW4tdG9wOjAhaW1wb3J0YW50O21hcmdpbi1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXg6eHh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O21hcmdp''@;'; put 'put ''bi1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teTp4eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14Onh4cyJde21hcmdpbi1sZWZ0''@;'; put 'put ''OnZhcigtLVwzYjQgMikhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teTp4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PSJtLXg6eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXk6eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFy''@;'; put 'put ''KC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXg6c20iXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXk6c20iXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNCkh''@;'; put 'put ''aW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXg6bWQiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXk6bWQi''@;'; put 'put ''XXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXg6bGciXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXk6bGciXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXg6eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDttYXJn''@;'; put 'put ''aW4tcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXk6eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXg6eHhsIl17bWFyZ2luLWxlZnQ6''@;'; put 'put ''dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15Onh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49Im0teDp4eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15Onh4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206''@;'; put 'put ''dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXQ6bm9uZSJde3BhZGRpbmctdG9wOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yOm5vbmUiXXtwYWRkaW5nLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iOm5vbmUiXXtwYWRkaW5nLWJvdHRvbTow''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbDpub25lIl17cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10Onh4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtcjp4eHhzIl17cGFkZGluZy1yaWdodDp2YXIo''@;'; put 'put ''LS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYjp4eHhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWw6eHh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdDp4''@;'; put 'put ''eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtcjp4eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iOnh4cyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0icC1sOnh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdDp4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yOnhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1c''@;'; put 'put ''M2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYjp4cyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sOnhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10OnNtIl17cGFk''@;'; put 'put ''ZGluZy10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXI6c20iXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iOnNtIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PSJwLWw6c20iXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXQ6bWQiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtcjptZCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWI6bWQiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbDptZCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdDpsZyJde3BhZGRpbmctdG9wOnZh''@;'; put 'put ''cigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yOmxnIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYjpsZyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sOmxn''@;'; put 'put ''Il17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10OnhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXI6eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMt''@;'; put 'put ''bGF5b3V0fj0icC1iOnhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWw6eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXQ6eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA4''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXI6eHhsIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYjp4eGwiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbDp4eGwiXXtwYWRk''@;'; put 'put ''aW5nLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXQ6eHh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yOnh4eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0icC1iOnh4eGwiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbDp4eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10Om5vbmUiXXttYXJnaW4tdG9wOjAhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0ibS1yOm5vbmUiXXttYXJnaW4tcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWI6bm9uZSJde21hcmdpbi1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWw6bm9uZSJde21hcmdpbi1sZWZ0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''bS10Onh4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yOnh4eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWI6eHh4cyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWw6eHh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10Onh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXI6eHhzIl17bWFyZ2luLXJpZ2h0OnZh''@;'; put 'put ''cigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iOnh4cyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWw6eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXQ6eHMi''@;'; put 'put ''XXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yOnhzIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iOnhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49Im0tbDp4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10OnNtIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tcjpzbSJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49Im0tYjpzbSJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWw6c20iXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdDptZCJde21hcmdpbi10b3A6dmFyKC0t''@;'; put 'put ''XDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXI6bWQiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWI6bWQiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sOm1kIl17bWFy''@;'; put 'put ''Z2luLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXQ6bGciXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yOmxnIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''bS1iOmxnIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbDpsZyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10OnhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49Im0tcjp4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYjp4bCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWw6eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0''@;'; put 'put ''IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdDp4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yOnh4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYjp4eGwiXXttYXJnaW4t''@;'; put 'put ''Ym90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sOnh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10Onh4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''bS1yOnh4eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWI6eHh4bCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWw6eHh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOSkhaW1w''@;'; put 'put ''b3J0YW50fUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXtbY2RzLWxheW91dCo9ImdhcEB4czpub25lIl17Z2FwOjB9W2Nkcy1sYXlvdXQqPSJnYXBAeHM6eHh4cyJde2dhcDp2YXIoLS1cM2I0IDEpfVtjZHMtbGF5b3V0Kj0iZ2FwQHhzOnh4cyJde2dhcDp2YXIoLS1cM2I0IDIpfVtjZHMtbGF5''@;'; put 'put ''b3V0Kj0iZ2FwQHhzOnhzIl17Z2FwOnZhcigtLVwzYjQgMyl9W2Nkcy1sYXlvdXQqPSJnYXBAeHM6c20iXXtnYXA6dmFyKC0tXDNiNCA0KX1bY2RzLWxheW91dCo9ImdhcEB4czptZCJde2dhcDp2YXIoLS1cM2I0IDUpfVtjZHMtbGF5b3V0Kj0iZ2FwQHhzOmxnIl17Z2FwOnZhcigtLVwzYjQg''@;'; put 'put ''Nil9W2Nkcy1sYXlvdXQqPSJnYXBAeHM6eGwiXXtnYXA6dmFyKC0tXDNiNCA3KX1bY2RzLWxheW91dCo9ImdhcEB4czp4eGwiXXtnYXA6dmFyKC0tXDNiNCA4KX1bY2RzLWxheW91dCo9ImdhcEB4czp4eHhsIl17Z2FwOnZhcigtLVwzYjQgOSl9W2Nkcy1sYXlvdXR+PSJwQHhzOm5vbmUiXXtw''@;'; put 'put ''YWRkaW5nOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4czpub25lIl17bWFyZ2luOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4czp4eHhzIl17cGFkZGluZzp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeHM6eHh4cyJde21hcmdpbjp2YXIoLS1cM2I0''@;'; put 'put ''IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeHM6eHhzIl17cGFkZGluZzp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeHM6eHhzIl17bWFyZ2luOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4czp4cyJde3BhZGRpbmc6dmFyKC0t''@;'; put 'put ''XDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhzOnhzIl17bWFyZ2luOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4czpzbSJde3BhZGRpbmc6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhzOnNtIl17bWFyZ2luOnZhcigt''@;'; put 'put ''LVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4czptZCJde3BhZGRpbmc6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhzOm1kIl17bWFyZ2luOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4czpsZyJde3BhZGRpbmc6dmFy''@;'; put 'put ''KC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhzOmxnIl17bWFyZ2luOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4czp4bCJde3BhZGRpbmc6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhzOnhsIl17bWFyZ2luOnZh''@;'; put 'put ''cigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4czp4eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4czp4eGwiXXttYXJnaW46dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhzOnh4eGwiXXtwYWRk''@;'; put 'put ''aW5nOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4czp4eHhsIl17bWFyZ2luOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhzOm5vbmUiXXtwYWRkaW5nLWxlZnQ6MCFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDowIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49InAteUB4czpub25lIl17cGFkZGluZy10b3A6MCFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeHM6eHh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwz''@;'; put 'put ''YjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhzOnh4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4czp4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0t''@;'; put 'put ''XDNiNCAyKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4czp4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49InAteEB4czp4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhzOnhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7cGFkZGluZy1i''@;'; put 'put ''b3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeHM6c20iXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4czpzbSJde3BhZGRpbmct''@;'; put 'put ''dG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhzOm1kIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJwLXlAeHM6bWQiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4czpsZyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFu''@;'; put 'put ''dDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhzOmxnIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeHM6eGwi''@;'; put 'put ''XXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4czp4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQg''@;'; put 'put ''NykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhzOnh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhzOnh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQg''@;'; put 'put ''OCkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhzOnh4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49InAteUB4czp4eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeHM6bm9uZSJde21hcmdpbi1sZWZ0OjAhaW1wb3J0YW50O21hcmdpbi1yaWdodDowIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49Im0teUB4czpub25lIl17bWFyZ2luLXRvcDowIWltcG9ydGFudDttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhzOnh4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0t''@;'; put 'put ''XDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeHM6eHh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4czp4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1c''@;'; put 'put ''M2I0IDIpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeHM6eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0ibS14QHhzOnhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhzOnhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZh''@;'; put 'put ''cigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhzOnNtIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhzOnNtIl17bWFyZ2luLXRvcDp2YXIoLS1c''@;'; put 'put ''M2I0IDQpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhzOm1kIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0ibS15QHhzOm1kIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhzOmxnIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZh''@;'; put 'put ''cigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhzOmxnIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhzOnhsIl17bWFyZ2luLWxlZnQ6dmFyKC0t''@;'; put 'put ''XDNiNCA3KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhzOnhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0ibS14QHhzOnh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4czp4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206''@;'; put 'put ''dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeHM6eHh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4czp4eHhsIl17bWFyZ2luLXRvcDp2''@;'; put 'put ''YXIoLS1cM2I0IDkpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhzOm5vbmUiXXtwYWRkaW5nLXRvcDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4czpub25lIl17cGFkZGluZy1yaWdodDowIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49InAtYkB4czpub25lIl17cGFkZGluZy1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeHM6bm9uZSJde3BhZGRpbmctbGVmdDowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4czp4eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAxKSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeHM6eHh4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeHM6eHh4cyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhzOnh4''@;'; put 'put ''eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeHM6eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeHM6eHhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49InAtYkB4czp4eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4czp4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeHM6eHMiXXtwYWRk''@;'; put 'put ''aW5nLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4czp4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeHM6eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49InAtbEB4czp4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4czpzbSJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhzOnNtIl17cGFkZGluZy1yaWdodDp2YXIo''@;'; put 'put ''LS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4czpzbSJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhzOnNtIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10''@;'; put 'put ''QHhzOm1kIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeHM6bWQiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhzOm1kIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA1KSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeHM6bWQiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeHM6bGciXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4czpsZyJde3BhZGRp''@;'; put 'put ''bmctcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeHM6bGciXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4czpsZyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49InAtdEB4czp4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhzOnhsIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4czp4bCJde3BhZGRpbmctYm90dG9tOnZh''@;'; put 'put ''cigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhzOnhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhzOnh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1y''@;'; put 'put ''QHhzOnh4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeHM6eHhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeHM6eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQg''@;'; put 'put ''OCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhzOnh4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4czp4eHhsIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4czp4''@;'; put 'put ''eHhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeHM6eHh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4czpub25lIl17bWFyZ2luLXRvcDowIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49Im0tckB4czpub25lIl17bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhzOm5vbmUiXXttYXJnaW4tYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhzOm5vbmUiXXttYXJnaW4tbGVmdDowIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49Im0tdEB4czp4eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4czp4eHhzIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhzOnh4eHMiXXttYXJnaW4tYm90dG9tOnZhcigt''@;'; put 'put ''LVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhzOnh4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4czp4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhz''@;'; put 'put ''Onh4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4czp4eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhzOnh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMikhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhzOnhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4czp4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4czp4cyJde21hcmdpbi1i''@;'; put 'put ''b3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeHM6eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4czpzbSJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PSJtLXJAeHM6c20iXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeHM6c20iXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhzOnNtIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA0''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeHM6bWQiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhzOm1kIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhzOm1kIl17bWFy''@;'; put 'put ''Z2luLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4czptZCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhzOmxnIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49Im0tckB4czpsZyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4czpsZyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeHM6bGciXXttYXJnaW4tbGVmdDp2YXIoLS1c''@;'; put 'put ''M2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4czp4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeHM6eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeHM6eGwi''@;'; put 'put ''XXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhzOnhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeHM6eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49Im0tckB4czp4eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeHM6eHhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4czp4eGwiXXttYXJnaW4tbGVm''@;'; put 'put ''dDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4czp4eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4czp4eHhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0ibS1iQHhzOnh4eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhzOnh4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpe1tjZHMtbGF5b3V0Kj0iZ2FwQHNt''@;'; put 'put ''Om5vbmUiXXtnYXA6MH1bY2RzLWxheW91dCo9ImdhcEBzbTp4eHhzIl17Z2FwOnZhcigtLVwzYjQgMSl9W2Nkcy1sYXlvdXQqPSJnYXBAc206eHhzIl17Z2FwOnZhcigtLVwzYjQgMil9W2Nkcy1sYXlvdXQqPSJnYXBAc206eHMiXXtnYXA6dmFyKC0tXDNiNCAzKX1bY2RzLWxheW91dCo9Imdh''@;'; put 'put ''cEBzbTpzbSJde2dhcDp2YXIoLS1cM2I0IDQpfVtjZHMtbGF5b3V0Kj0iZ2FwQHNtOm1kIl17Z2FwOnZhcigtLVwzYjQgNSl9W2Nkcy1sYXlvdXQqPSJnYXBAc206bGciXXtnYXA6dmFyKC0tXDNiNCA2KX1bY2RzLWxheW91dCo9ImdhcEBzbTp4bCJde2dhcDp2YXIoLS1cM2I0IDcpfVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0iZ2FwQHNtOnh4bCJde2dhcDp2YXIoLS1cM2I0IDgpfVtjZHMtbGF5b3V0Kj0iZ2FwQHNtOnh4eGwiXXtnYXA6dmFyKC0tXDNiNCA5KX1bY2RzLWxheW91dH49InBAc206bm9uZSJde3BhZGRpbmc6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHNtOm5vbmUiXXttYXJnaW46''@;'; put 'put ''MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHNtOnh4eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBzbTp4eHhzIl17bWFyZ2luOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBzbTp4eHMiXXtwYWRkaW5nOnZhcigt''@;'; put 'put ''LVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBzbTp4eHMiXXttYXJnaW46dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHNtOnhzIl17cGFkZGluZzp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1Ac206eHMiXXttYXJnaW46dmFy''@;'; put 'put ''KC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHNtOnNtIl17cGFkZGluZzp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1Ac206c20iXXttYXJnaW46dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHNtOm1kIl17cGFkZGluZzp2''@;'; put 'put ''YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1Ac206bWQiXXttYXJnaW46dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHNtOmxnIl17cGFkZGluZzp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1Ac206bGciXXttYXJnaW46''@;'; put 'put ''dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHNtOnhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1Ac206eGwiXXttYXJnaW46dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHNtOnh4bCJde3BhZGRp''@;'; put 'put ''bmc6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHNtOnh4bCJde21hcmdpbjp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAc206eHh4bCJde3BhZGRpbmc6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHNtOnh4eGwi''@;'; put 'put ''XXttYXJnaW46dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAc206bm9uZSJde3BhZGRpbmctbGVmdDowIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHNtOm5vbmUiXXtwYWRkaW5nLXRvcDowIWltcG9ydGFudDtw''@;'; put 'put ''YWRkaW5nLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBzbTp4eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAc206eHh4cyJde3BhZGRpbmct''@;'; put 'put ''dG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHNtOnh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0fj0icC15QHNtOnh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHNtOnhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0''@;'; put 'put ''YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAc206eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBzbTpz''@;'; put 'put ''bSJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHNtOnNtIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNi''@;'; put 'put ''NCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAc206bWQiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBzbTptZCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQg''@;'; put 'put ''NSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHNtOmxnIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PSJwLXlAc206bGciXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBzbTp4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0''@;'; put 'put ''OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHNtOnhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAc206eHhsIl17cGFkZGluZy1sZWZ0''@;'; put 'put ''OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAc206eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJwLXhAc206eHh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHNtOnh4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDkpIWltcG9ydGFu''@;'; put 'put ''dDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBzbTpub25lIl17bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHNtOm5vbmUiXXttYXJnaW4tdG9wOjAhaW1wb3J0''@;'; put 'put ''YW50O21hcmdpbi1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAc206eHh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBzbTp4eHhzIl17bWFyZ2lu''@;'; put 'put ''LXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHNtOnh4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDIpIWltcG9ydGFu''@;'; put 'put ''dH1bY2RzLWxheW91dH49Im0teUBzbTp4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAc206eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudDtt''@;'; put 'put ''YXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAc206eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAc206c20iXXttYXJn''@;'; put 'put ''aW4tbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAc206c20iXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJtLXhAc206bWQiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAc206bWQiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O21h''@;'; put 'put ''cmdpbi1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAc206bGciXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAc206bGciXXttYXJn''@;'; put 'put ''aW4tdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAc206eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJtLXlAc206eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAc206eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7''@;'; put 'put ''bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHNtOnh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBzbTp4eHhsIl17''@;'; put 'put ''bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHNtOnh4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA5KSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAc206bm9uZSJde3BhZGRpbmctdG9wOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHNtOm5vbmUiXXtwYWRkaW5nLXJpZ2h0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHNtOm5vbmUiXXtwYWRkaW5nLWJvdHRvbTowIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49InAtbEBzbTpub25lIl17cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHNtOnh4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBzbTp4eHhzIl17cGFkZGluZy1yaWdodDp2''@;'; put 'put ''YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBzbTp4eHhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAc206eHh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49InAtdEBzbTp4eHMiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBzbTp4eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHNtOnh4cyJde3BhZGRpbmctYm90dG9tOnZhcigt''@;'; put 'put ''LVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHNtOnh4cyJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBzbTp4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHNt''@;'; put 'put ''OnhzIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBzbTp4cyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHNtOnhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMykhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHNtOnNtIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAc206c20iXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHNtOnNtIl17cGFkZGlu''@;'; put 'put ''Zy1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAc206c20iXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAc206bWQiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49InAtckBzbTptZCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAc206bWQiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBzbTptZCJde3BhZGRpbmctbGVmdDp2YXIo''@;'; put 'put ''LS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBzbTpsZyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHNtOmxnIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBz''@;'; put 'put ''bTpsZyJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHNtOmxnIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHNtOnhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA3KSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAc206eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHNtOnhsIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAc206eGwiXXtwYWRk''@;'; put 'put ''aW5nLWxlZnQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAc206eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAc206eHhsIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2Rz''@;'; put 'put ''LWxheW91dH49InAtYkBzbTp4eGwiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBzbTp4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAc206eHh4bCJde3BhZGRpbmctdG9w''@;'; put 'put ''OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHNtOnh4eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHNtOnh4eGwiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49InAtbEBzbTp4eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHNtOm5vbmUiXXttYXJnaW4tdG9wOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHNtOm5vbmUiXXttYXJnaW4tcmlnaHQ6MCFpbXBvcnRhbnR9W2Nk''@;'; put 'put ''cy1sYXlvdXR+PSJtLWJAc206bm9uZSJde21hcmdpbi1ib3R0b206MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAc206bm9uZSJde21hcmdpbi1sZWZ0OjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHNtOnh4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0ibS1yQHNtOnh4eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAc206eHh4cyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAc206eHh4cyJde21hcmdp''@;'; put 'put ''bi1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHNtOnh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAc206eHhzIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0ibS1iQHNtOnh4cyJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAc206eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAc206eHMiXXttYXJnaW4tdG9wOnZhcigtLVwz''@;'; put 'put ''YjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHNtOnhzIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHNtOnhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBzbTp4''@;'; put 'put ''cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHNtOnNtIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBzbTpzbSJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49Im0tYkBzbTpzbSJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAc206c20iXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBzbTptZCJde21hcmdpbi10b3A6dmFy''@;'; put 'put ''KC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAc206bWQiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAc206bWQiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1s''@;'; put 'put ''QHNtOm1kIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAc206bGciXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHNtOmxnIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0fj0ibS1iQHNtOmxnIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBzbTpsZyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHNtOnhsIl17bWFyZ2luLXRv''@;'; put 'put ''cDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBzbTp4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBzbTp4bCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PSJtLWxAc206eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBzbTp4eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHNtOnh4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDgp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBzbTp4eGwiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHNtOnh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHNtOnh4eGwi''@;'; put 'put ''XXttYXJnaW4tdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHNtOnh4eGwiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAc206eHh4bCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA5KSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJtLWxAc206eHh4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7W2Nkcy1sYXlvdXQqPSJnYXBAbWQ6bm9uZSJde2dhcDowfVtjZHMtbGF5b3V0Kj0iZ2FwQG1kOnh4eHMiXXtnYXA6dmFyKC0t''@;'; put 'put ''XDNiNCAxKX1bY2RzLWxheW91dCo9ImdhcEBtZDp4eHMiXXtnYXA6dmFyKC0tXDNiNCAyKX1bY2RzLWxheW91dCo9ImdhcEBtZDp4cyJde2dhcDp2YXIoLS1cM2I0IDMpfVtjZHMtbGF5b3V0Kj0iZ2FwQG1kOnNtIl17Z2FwOnZhcigtLVwzYjQgNCl9W2Nkcy1sYXlvdXQqPSJnYXBAbWQ6bWQi''@;'; put 'put ''XXtnYXA6dmFyKC0tXDNiNCA1KX1bY2RzLWxheW91dCo9ImdhcEBtZDpsZyJde2dhcDp2YXIoLS1cM2I0IDYpfVtjZHMtbGF5b3V0Kj0iZ2FwQG1kOnhsIl17Z2FwOnZhcigtLVwzYjQgNyl9W2Nkcy1sYXlvdXQqPSJnYXBAbWQ6eHhsIl17Z2FwOnZhcigtLVwzYjQgOCl9W2Nkcy1sYXlvdXQq''@;'; put 'put ''PSJnYXBAbWQ6eHh4bCJde2dhcDp2YXIoLS1cM2I0IDkpfVtjZHMtbGF5b3V0fj0icEBtZDpub25lIl17cGFkZGluZzowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbWQ6bm9uZSJde21hcmdpbjowIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbWQ6eHh4cyJde3BhZGRpbmc6dmFyKC0t''@;'; put 'put ''XDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQG1kOnh4eHMiXXttYXJnaW46dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQG1kOnh4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQG1kOnh4cyJde21hcmdpbjp2''@;'; put 'put ''YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbWQ6eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBtZDp4cyJde21hcmdpbjp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbWQ6c20iXXtwYWRkaW5n''@;'; put 'put ''OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBtZDpzbSJde21hcmdpbjp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbWQ6bWQiXXtwYWRkaW5nOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBtZDptZCJde21hcmdp''@;'; put 'put ''bjp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbWQ6bGciXXtwYWRkaW5nOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBtZDpsZyJde21hcmdpbjp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbWQ6eGwiXXtwYWRk''@;'; put 'put ''aW5nOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBtZDp4bCJde21hcmdpbjp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbWQ6eHhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbWQ6eHhsIl17''@;'; put 'put ''bWFyZ2luOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBtZDp4eHhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbWQ6eHh4bCJde21hcmdpbjp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBt''@;'; put 'put ''ZDpub25lIl17cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbWQ6bm9uZSJde3BhZGRpbmctdG9wOjAhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QG1kOnh4eHMi''@;'; put 'put ''XXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBtZDp4eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNi''@;'; put 'put ''NCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbWQ6eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbWQ6eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNi''@;'; put 'put ''NCAyKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbWQ6eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49InAteUBtZDp4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QG1kOnNtIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O3BhZGRpbmctcmln''@;'; put 'put ''aHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbWQ6c20iXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBtZDptZCJde3BhZGRpbmctbGVm''@;'; put 'put ''dDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QG1kOm1kIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJwLXhAbWQ6bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBtZDpsZyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50O3Bh''@;'; put 'put ''ZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QG1kOnhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbWQ6eGwiXXtw''@;'; put 'put ''YWRkaW5nLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBtZDp4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDgp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBtZDp4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBtZDp4eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQg''@;'; put 'put ''OSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbWQ6eHh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0ibS14QG1kOm5vbmUiXXttYXJnaW4tbGVmdDowIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbWQ6bm9uZSJde21hcmdpbi10b3A6MCFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBtZDp4''@;'; put 'put ''eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QG1kOnh4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNi''@;'; put 'put ''NCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAbWQ6eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QG1kOnh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAy''@;'; put 'put ''KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBtZDp4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0t''@;'; put 'put ''eUBtZDp4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBtZDpzbSJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1c''@;'; put 'put ''M2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBtZDpzbSJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBtZDptZCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQg''@;'; put 'put ''NSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBtZDptZCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0t''@;'; put 'put ''eEBtZDpsZyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBtZDpsZyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1c''@;'; put 'put ''M2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBtZDp4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBtZDp4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA3''@;'; put 'put ''KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBtZDp4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJt''@;'; put 'put ''LXlAbWQ6eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QG1kOnh4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFy''@;'; put 'put ''KC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbWQ6eHh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBtZDpub25lIl17cGFkZGluZy10b3A6MCFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbWQ6bm9uZSJde3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbWQ6bm9uZSJde3BhZGRpbmctYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQG1kOm5vbmUiXXtwYWRkaW5nLWxlZnQ6MCFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbWQ6eHh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQG1kOnh4eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQG1kOnh4eHMiXXtw''@;'; put 'put ''YWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBtZDp4eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QG1kOnh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0icC1yQG1kOnh4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbWQ6eHhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbWQ6eHhzIl17cGFkZGlu''@;'; put 'put ''Zy1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QG1kOnhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbWQ6eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0icC1iQG1kOnhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbWQ6eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbWQ6c20iXXtwYWRkaW5nLXRvcDp2YXIoLS1c''@;'; put 'put ''M2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBtZDpzbSJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbWQ6c20iXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBt''@;'; put 'put ''ZDpzbSJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBtZDptZCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQG1kOm1kIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49InAtYkBtZDptZCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQG1kOm1kIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QG1kOmxnIl17cGFkZGlu''@;'; put 'put ''Zy10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbWQ6bGciXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQG1kOmxnIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PSJwLWxAbWQ6bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbWQ6eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBtZDp4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0t''@;'; put 'put ''XDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbWQ6eGwiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBtZDp4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBt''@;'; put 'put ''ZDp4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBtZDp4eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQG1kOnh4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOCkh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQG1kOnh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBtZDp4eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbWQ6eHh4bCJd''@;'; put 'put ''e3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbWQ6eHh4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQG1kOnh4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbWQ6bm9uZSJde21hcmdpbi10b3A6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbWQ6bm9uZSJde21hcmdpbi1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBtZDpub25lIl17bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49Im0tbEBtZDpub25lIl17bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbWQ6eHh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbWQ6eHh4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0''@;'; put 'put ''IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBtZDp4eHhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBtZDp4eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbWQ6''@;'; put 'put ''eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBtZDp4eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbWQ6eHhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9y''@;'; put 'put ''dGFudH1bY2RzLWxheW91dH49Im0tbEBtZDp4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBtZDp4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbWQ6eHMiXXttYXJnaW4tcmln''@;'; put 'put ''aHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbWQ6eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQG1kOnhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PSJtLXRAbWQ6c20iXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQG1kOnNtIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQG1kOnNtIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDQp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBtZDpzbSJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QG1kOm1kIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBtZDptZCJde21hcmdp''@;'; put 'put ''bi1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBtZDptZCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAbWQ6bWQiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49Im0tdEBtZDpsZyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbWQ6bGciXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbWQ6bGciXXttYXJnaW4tYm90dG9tOnZhcigtLVwz''@;'; put 'put ''YjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQG1kOmxnIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbWQ6eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQG1kOnhsIl17''@;'; put 'put ''bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQG1kOnhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBtZDp4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0fj0ibS10QG1kOnh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbWQ6eHhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQG1kOnh4bCJde21hcmdpbi1ib3R0b206''@;'; put 'put ''dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAbWQ6eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbWQ6eHh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJt''@;'; put 'put ''LXJAbWQ6eHh4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBtZDp4eHhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBtZDp4eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNi''@;'; put 'put ''NCA5KSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7W2Nkcy1sYXlvdXQqPSJnYXBAbGc6bm9uZSJde2dhcDowfVtjZHMtbGF5b3V0Kj0iZ2FwQGxnOnh4eHMiXXtnYXA6dmFyKC0tXDNiNCAxKX1bY2RzLWxheW91dCo9ImdhcEBsZzp4eHMiXXtnYXA6dmFyKC0tXDNiNCAy''@;'; put 'put ''KX1bY2RzLWxheW91dCo9ImdhcEBsZzp4cyJde2dhcDp2YXIoLS1cM2I0IDMpfVtjZHMtbGF5b3V0Kj0iZ2FwQGxnOnNtIl17Z2FwOnZhcigtLVwzYjQgNCl9W2Nkcy1sYXlvdXQqPSJnYXBAbGc6bWQiXXtnYXA6dmFyKC0tXDNiNCA1KX1bY2RzLWxheW91dCo9ImdhcEBsZzpsZyJde2dhcDp2''@;'; put 'put ''YXIoLS1cM2I0IDYpfVtjZHMtbGF5b3V0Kj0iZ2FwQGxnOnhsIl17Z2FwOnZhcigtLVwzYjQgNyl9W2Nkcy1sYXlvdXQqPSJnYXBAbGc6eHhsIl17Z2FwOnZhcigtLVwzYjQgOCl9W2Nkcy1sYXlvdXQqPSJnYXBAbGc6eHh4bCJde2dhcDp2YXIoLS1cM2I0IDkpfVtjZHMtbGF5b3V0fj0icEBs''@;'; put 'put ''Zzpub25lIl17cGFkZGluZzowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbGc6bm9uZSJde21hcmdpbjowIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbGc6eHh4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQGxnOnh4eHMiXXttYXJnaW46''@;'; put 'put ''dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQGxnOnh4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQGxnOnh4cyJde21hcmdpbjp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbGc6eHMiXXtwYWRk''@;'; put 'put ''aW5nOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBsZzp4cyJde21hcmdpbjp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbGc6c20iXXtwYWRkaW5nOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBsZzpzbSJde21h''@;'; put 'put ''cmdpbjp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbGc6bWQiXXtwYWRkaW5nOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBsZzptZCJde21hcmdpbjp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbGc6bGciXXtw''@;'; put 'put ''YWRkaW5nOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBsZzpsZyJde21hcmdpbjp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbGc6eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUBsZzp4bCJd''@;'; put 'put ''e21hcmdpbjp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAbGc6eHhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbGc6eHhsIl17bWFyZ2luOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEBsZzp4''@;'; put 'put ''eHhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AbGc6eHh4bCJde21hcmdpbjp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBsZzpub25lIl17cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6MCFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbGc6bm9uZSJde3BhZGRpbmctdG9wOjAhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QGxnOnh4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdo''@;'; put 'put ''dDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBsZzp4eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbGc6eHhzIl17cGFkZGluZy1s''@;'; put 'put ''ZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbGc6eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJwLXhAbGc6eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBsZzp4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50''@;'; put 'put ''O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QGxnOnNtIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbGc6c20i''@;'; put 'put ''XXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBsZzptZCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQg''@;'; put 'put ''NSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QGxnOm1kIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAbGc6bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA2''@;'; put 'put ''KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBsZzpsZyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''cC14QGxnOnhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAbGc6eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2''@;'; put 'put ''YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBsZzp4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUBsZzp4eGwiXXtwYWRkaW5nLXRvcDp2''@;'; put 'put ''YXIoLS1cM2I0IDgpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEBsZzp4eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJwLXlAbGc6eHh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QGxnOm5vbmUiXXttYXJnaW4tbGVmdDowIWltcG9ydGFudDttYXJnaW4tcmln''@;'; put 'put ''aHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbGc6bm9uZSJde21hcmdpbi10b3A6MCFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBsZzp4eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7bWFyZ2luLXJp''@;'; put 'put ''Z2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QGxnOnh4eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAbGc6eHhzIl17bWFyZ2luLWxl''@;'; put 'put ''ZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QGxnOnh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49Im0teEBsZzp4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBsZzp4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7bWFyZ2lu''@;'; put 'put ''LWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBsZzpzbSJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBsZzpzbSJde21hcmdpbi10''@;'; put 'put ''b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBsZzptZCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49Im0teUBsZzptZCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBsZzpsZyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50O21hcmdp''@;'; put 'put ''bi1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBsZzpsZyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEBsZzp4bCJde21hcmdpbi1s''@;'; put 'put ''ZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUBsZzp4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49Im0teEBsZzp4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbGc6eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDttYXJn''@;'; put 'put ''aW4tYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QGxnOnh4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAbGc6eHh4bCJde21h''@;'; put 'put ''cmdpbi10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBsZzpub25lIl17cGFkZGluZy10b3A6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbGc6bm9uZSJde3BhZGRpbmctcmlnaHQ6''@;'; put 'put ''MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbGc6bm9uZSJde3BhZGRpbmctYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQGxnOm5vbmUiXXtwYWRkaW5nLWxlZnQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbGc6eHh4cyJde3BhZGRpbmctdG9wOnZhcigt''@;'; put 'put ''LVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQGxnOnh4eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQGxnOnh4eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49''@;'; put 'put ''InAtbEBsZzp4eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QGxnOnh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQGxnOnh4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNi''@;'; put 'put ''NCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbGc6eHhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbGc6eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QGxn''@;'; put 'put ''OnhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbGc6eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQGxnOnhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbGc6eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbGc6c20iXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBsZzpzbSJde3BhZGRpbmct''@;'; put 'put ''cmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbGc6c20iXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBsZzpzbSJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49InAtdEBsZzptZCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQGxnOm1kIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkBsZzptZCJde3BhZGRpbmctYm90dG9tOnZhcigt''@;'; put 'put ''LVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQGxnOm1kIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QGxnOmxnIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbGc6''@;'; put 'put ''bGciXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQGxnOmxnIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAbGc6bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAbGc6eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckBsZzp4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAbGc6eGwiXXtwYWRkaW5n''@;'; put 'put ''LWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEBsZzp4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBsZzp4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxh''@;'; put 'put ''eW91dH49InAtckBsZzp4eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQGxnOnh4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQGxnOnh4bCJde3BhZGRpbmctbGVmdDp2''@;'; put 'put ''YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEBsZzp4eHhsIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAbGc6eHh4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+''@;'; put 'put ''PSJwLWJAbGc6eHh4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQGxnOnh4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbGc6bm9uZSJde21hcmdpbi10b3A6MCFpbXBv''@;'; put 'put ''cnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbGc6bm9uZSJde21hcmdpbi1yaWdodDowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBsZzpub25lIl17bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBsZzpub25lIl17bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnR9''@;'; put 'put ''W2Nkcy1sYXlvdXR+PSJtLXRAbGc6eHh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbGc6eHh4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBsZzp4eHhzIl17bWFyZ2luLWJv''@;'; put 'put ''dHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBsZzp4eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbGc6eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91''@;'; put 'put ''dH49Im0tckBsZzp4eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbGc6eHhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBsZzp4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1c''@;'; put 'put ''M2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBsZzp4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbGc6eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbGc6eHMi''@;'; put 'put ''XXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQGxnOnhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbGc6c20iXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtj''@;'; put 'put ''ZHMtbGF5b3V0fj0ibS1yQGxnOnNtIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQGxnOnNtIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBsZzpzbSJde21hcmdpbi1sZWZ0OnZh''@;'; put 'put ''cigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QGxnOm1kIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckBsZzptZCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkBs''@;'; put 'put ''ZzptZCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAbGc6bWQiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEBsZzpsZyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJtLXJAbGc6bGciXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAbGc6bGciXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQGxnOmxnIl17bWFyZ2luLWxl''@;'; put 'put ''ZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbGc6eGwiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQGxnOnhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0i''@;'; put 'put ''bS1iQGxnOnhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBsZzp4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QGxnOnh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA4KSFp''@;'; put 'put ''bXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbGc6eHhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQGxnOnh4bCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAbGc6eHhsIl17''@;'; put 'put ''bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAbGc6eHh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAbGc6eHh4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49Im0tYkBsZzp4eHhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEBsZzp4eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjE0NDBweCl7W2Nkcy1sYXlv''@;'; put 'put ''dXQqPSJnYXBAeGw6bm9uZSJde2dhcDowfVtjZHMtbGF5b3V0Kj0iZ2FwQHhsOnh4eHMiXXtnYXA6dmFyKC0tXDNiNCAxKX1bY2RzLWxheW91dCo9ImdhcEB4bDp4eHMiXXtnYXA6dmFyKC0tXDNiNCAyKX1bY2RzLWxheW91dCo9ImdhcEB4bDp4cyJde2dhcDp2YXIoLS1cM2I0IDMpfVtjZHMt''@;'; put 'put ''bGF5b3V0Kj0iZ2FwQHhsOnNtIl17Z2FwOnZhcigtLVwzYjQgNCl9W2Nkcy1sYXlvdXQqPSJnYXBAeGw6bWQiXXtnYXA6dmFyKC0tXDNiNCA1KX1bY2RzLWxheW91dCo9ImdhcEB4bDpsZyJde2dhcDp2YXIoLS1cM2I0IDYpfVtjZHMtbGF5b3V0Kj0iZ2FwQHhsOnhsIl17Z2FwOnZhcigtLVwz''@;'; put 'put ''YjQgNyl9W2Nkcy1sYXlvdXQqPSJnYXBAeGw6eHhsIl17Z2FwOnZhcigtLVwzYjQgOCl9W2Nkcy1sYXlvdXQqPSJnYXBAeGw6eHh4bCJde2dhcDp2YXIoLS1cM2I0IDkpfVtjZHMtbGF5b3V0fj0icEB4bDpub25lIl17cGFkZGluZzowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeGw6bm9u''@;'; put 'put ''ZSJde21hcmdpbjowIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeGw6eHh4cyJde3BhZGRpbmc6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhsOnh4eHMiXXttYXJnaW46dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwQHhsOnh4cyJde3Bh''@;'; put 'put ''ZGRpbmc6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtQHhsOnh4cyJde21hcmdpbjp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeGw6eHMiXXtwYWRkaW5nOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4bDp4cyJd''@;'; put 'put ''e21hcmdpbjp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeGw6c20iXXtwYWRkaW5nOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4bDpzbSJde21hcmdpbjp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeGw6bWQi''@;'; put 'put ''XXtwYWRkaW5nOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4bDptZCJde21hcmdpbjp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeGw6bGciXXtwYWRkaW5nOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4bDps''@;'; put 'put ''ZyJde21hcmdpbjp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeGw6eGwiXXtwYWRkaW5nOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibUB4bDp4bCJde21hcmdpbjp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InBAeGw6''@;'; put 'put ''eHhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im1AeGw6eHhsIl17bWFyZ2luOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icEB4bDp4eHhsIl17cGFkZGluZzp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49''@;'; put 'put ''Im1AeGw6eHh4bCJde21hcmdpbjp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4bDpub25lIl17cGFkZGluZy1sZWZ0OjAhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeGw6bm9uZSJde3BhZGRpbmctdG9wOjAh''@;'; put 'put ''aW1wb3J0YW50O3BhZGRpbmctYm90dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhsOnh4eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4bDp4eHhz''@;'; put 'put ''Il17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeGw6eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNi''@;'; put 'put ''NCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeGw6eHhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeGw6eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNi''@;'; put 'put ''NCAzKSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4bDp4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMykhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0icC14QHhsOnNtIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeGw6c20iXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRv''@;'; put 'put ''bTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4bDptZCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudDtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC15QHhsOm1kIl17cGFkZGluZy10b3A6''@;'; put 'put ''dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnQ7cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXhAeGw6bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49InAteUB4bDpsZyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNikhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC14QHhsOnhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50O3Bh''@;'; put 'put ''ZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeGw6eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4bDp4eGwiXXtw''@;'; put 'put ''YWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnQ7cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAteUB4bDp4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDgp''@;'; put 'put ''IWltcG9ydGFudH1bY2RzLWxheW91dH49InAteEB4bDp4eHhsIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgOSkhaW1wb3J0YW50O3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXlAeGw6eHh4bCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQg''@;'; put 'put ''OSkhaW1wb3J0YW50O3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14QHhsOm5vbmUiXXttYXJnaW4tbGVmdDowIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeGw6bm9uZSJde21hcmdpbi10''@;'; put 'put ''b3A6MCFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4bDp4eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhsOnh4''@;'; put 'put ''eHMiXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50O21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXhAeGw6eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQg''@;'; put 'put ''MikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS15QHhsOnh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4bDp4cyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgMykh''@;'; put 'put ''aW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4bDp4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDMpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4''@;'; put 'put ''bDpzbSJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4bDpzbSJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0''@;'; put 'put ''IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4bDptZCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4bDptZCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA1KSFp''@;'; put 'put ''bXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4bDpsZyJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4''@;'; put 'put ''bDpsZyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDYpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4bDp4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50O21hcmdpbi1yaWdodDp2YXIoLS1cM2I0''@;'; put 'put ''IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teUB4bDp4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0teEB4bDp4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDgp''@;'; put 'put ''IWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeGw6eHhsIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudDttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS14''@;'; put 'put ''QHhsOnh4eGwiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudDttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXlAeGw6eHh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnQ7bWFyZ2luLWJvdHRvbTp2YXIo''@;'; put 'put ''LS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4bDpub25lIl17cGFkZGluZy10b3A6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeGw6bm9uZSJde3BhZGRpbmctcmlnaHQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeGw6bm9uZSJde3BhZGRpbmctYm90''@;'; put 'put ''dG9tOjAhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhsOm5vbmUiXXtwYWRkaW5nLWxlZnQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeGw6eHh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhsOnh4eHMiXXtwYWRk''@;'; put 'put ''aW5nLXJpZ2h0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhsOnh4eHMiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4bDp4eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMSkhaW1wb3J0YW50''@;'; put 'put ''fVtjZHMtbGF5b3V0fj0icC10QHhsOnh4cyJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1yQHhsOnh4cyJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeGw6eHhzIl17cGFkZGluZy1i''@;'; put 'put ''b3R0b206dmFyKC0tXDNiNCAyKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeGw6eHhzIl17cGFkZGluZy1sZWZ0OnZhcigtLVwzYjQgMikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhsOnhzIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlv''@;'; put 'put ''dXR+PSJwLXJAeGw6eHMiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhsOnhzIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeGw6eHMiXXtwYWRkaW5nLWxlZnQ6dmFyKC0t''@;'; put 'put ''XDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeGw6c20iXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4bDpzbSJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA0KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeGw6''@;'; put 'put ''c20iXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4bDpzbSJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4bDptZCJde3BhZGRpbmctdG9wOnZhcigtLVwzYjQgNSkhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0fj0icC1yQHhsOm1kIl17cGFkZGluZy1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtYkB4bDptZCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhsOm1kIl17cGFkZGlu''@;'; put 'put ''Zy1sZWZ0OnZhcigtLVwzYjQgNSkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC10QHhsOmxnIl17cGFkZGluZy10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeGw6bGciXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5''@;'; put 'put ''b3V0fj0icC1iQHhsOmxnIl17cGFkZGluZy1ib3R0b206dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWxAeGw6bGciXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXRAeGw6eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1c''@;'; put 'put ''M2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4bDp4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA3KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeGw6eGwiXXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtbEB4''@;'; put 'put ''bDp4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4bDp4eGwiXXtwYWRkaW5nLXRvcDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtckB4bDp4eGwiXXtwYWRkaW5nLXJpZ2h0OnZhcigtLVwzYjQgOCkhaW1w''@;'; put 'put ''b3J0YW50fVtjZHMtbGF5b3V0fj0icC1iQHhsOnh4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0icC1sQHhsOnh4bCJde3BhZGRpbmctbGVmdDp2YXIoLS1cM2I0IDgpIWltcG9ydGFudH1bY2RzLWxheW91dH49InAtdEB4bDp4eHhsIl17''@;'; put 'put ''cGFkZGluZy10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLXJAeGw6eHh4bCJde3BhZGRpbmctcmlnaHQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJwLWJAeGw6eHh4bCJde3BhZGRpbmctYm90dG9tOnZhcigtLVwzYjQgOSkhaW1wb3J0''@;'; put 'put ''YW50fVtjZHMtbGF5b3V0fj0icC1sQHhsOnh4eGwiXXtwYWRkaW5nLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeGw6bm9uZSJde21hcmdpbi10b3A6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeGw6bm9uZSJde21hcmdpbi1yaWdodDowIWlt''@;'; put 'put ''cG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4bDpub25lIl17bWFyZ2luLWJvdHRvbTowIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4bDpub25lIl17bWFyZ2luLWxlZnQ6MCFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeGw6eHh4cyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCAx''@;'; put 'put ''KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeGw6eHh4cyJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4bDp4eHhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDEpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4bDp4''@;'; put 'put ''eHhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAxKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeGw6eHhzIl17bWFyZ2luLXRvcDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4bDp4eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAyKSFpbXBvcnRh''@;'; put 'put ''bnR9W2Nkcy1sYXlvdXR+PSJtLWJAeGw6eHhzIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4bDp4eHMiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDIpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4bDp4cyJde21hcmdpbi10''@;'; put 'put ''b3A6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeGw6eHMiXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeGw6eHMiXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgMykhaW1wb3J0YW50fVtjZHMtbGF5b3V0''@;'; put 'put ''fj0ibS1sQHhsOnhzIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCAzKSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeGw6c20iXXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhsOnNtIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNCkh''@;'; put 'put ''aW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhsOnNtIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDQpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4bDpzbSJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhsOm1kIl17bWFy''@;'; put 'put ''Z2luLXRvcDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tckB4bDptZCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4bDptZCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA1KSFpbXBvcnRhbnR9W2Nkcy1s''@;'; put 'put ''YXlvdXR+PSJtLWxAeGw6bWQiXXttYXJnaW4tbGVmdDp2YXIoLS1cM2I0IDUpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tdEB4bDpsZyJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeGw6bGciXXttYXJnaW4tcmlnaHQ6dmFyKC0tXDNi''@;'; put 'put ''NCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWJAeGw6bGciXXttYXJnaW4tYm90dG9tOnZhcigtLVwzYjQgNikhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1sQHhsOmxnIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA2KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXRAeGw6eGwi''@;'; put 'put ''XXttYXJnaW4tdG9wOnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1yQHhsOnhsIl17bWFyZ2luLXJpZ2h0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhsOnhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0IDcpIWltcG9ydGFudH1b''@;'; put 'put ''Y2RzLWxheW91dH49Im0tbEB4bDp4bCJde21hcmdpbi1sZWZ0OnZhcigtLVwzYjQgNykhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS10QHhsOnh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeGw6eHhsIl17bWFyZ2luLXJpZ2h0OnZh''@;'; put 'put ''cigtLVwzYjQgOCkhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0ibS1iQHhsOnh4bCJde21hcmdpbi1ib3R0b206dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLWxAeGw6eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA4KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJt''@;'; put 'put ''LXRAeGw6eHh4bCJde21hcmdpbi10b3A6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9W2Nkcy1sYXlvdXR+PSJtLXJAeGw6eHh4bCJde21hcmdpbi1yaWdodDp2YXIoLS1cM2I0IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tYkB4bDp4eHhsIl17bWFyZ2luLWJvdHRvbTp2YXIoLS1cM2I0''@;'; put 'put ''IDkpIWltcG9ydGFudH1bY2RzLWxheW91dH49Im0tbEB4bDp4eHhsIl17bWFyZ2luLWxlZnQ6dmFyKC0tXDNiNCA5KSFpbXBvcnRhbnR9fVtjZHMtbGF5b3V0PW5vLXNjcm9sbGluZ117b3ZlcmZsb3c6aGlkZGVuIWltcG9ydGFudH1bY2RzLWxheW91dH49ImNvbnRhaW5lcjpmaWxsIl0sW2Nk''@;'; put 'put ''cy1sYXlvdXR+PWZpbGxde3dpZHRoOjEwMCUhaW1wb3J0YW50fVtjZHMtbGF5b3V0fj0iY29udGFpbmVyOmNlbnRlciJde21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OmF1dG99W2Nkcy1sYXlvdXR+PSJjb250YWluZXI6eHMiXXt3aWR0aDoxMDAlO21heC13aWR0aDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWxheW91dC13aWR0aC14cyl9W2Nkcy1sYXlvdXR+PSJjb250YWluZXI6c20iXXt3aWR0aDoxMDAlO21heC13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC13aWR0aC1zbSl9W2Nkcy1sYXlvdXR+PSJjb250YWluZXI6bWQiXXt3aWR0aDoxMDAlO21heC13aWR0aDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWxheW91dC13aWR0aC1tZCl9W2Nkcy1sYXlvdXR+PSJjb250YWluZXI6bGciXXt3aWR0aDoxMDAlO21heC13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLWxheW91dC13aWR0aC1sZyl9W2Nkcy1sYXlvdXR+PSJjb250YWluZXI6eGwiXXt3aWR0aDoxMDAlO21heC13aWR0aDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWxheW91dC13aWR0aC14bCl9Kiw6YWZ0ZXIsOmJlZm9yZSw6aG9zdHtib3gtc2l6aW5nOmJvcmRlci1ib3h9W2Nkcy10aGVtZX49ZGFya117LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY29sb3ItNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2RzLWds''@;'; put 'put ''b2JhbC10eXBvZ3JhcGh5LWNvbG9yLTQwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5''@;'; put 'put ''LWNvbG9yLTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0zMDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTEwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsYWNrKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yOnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtY29sb3ItYmx1ZS00MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTIwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1jb2xvci12aXNpdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5k''@;'; put 'put ''ZXItMzAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1sYXZlbmRlci0yMDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWNvbG9yLTQ1MDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01''@;'; put 'put ''MCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzYWJsZWQtYnV0dG9uOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTkwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZGlzYWJsZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTAwKTstLWNkcy1n''@;'; put 'put ''bG9iYWwtdHlwb2dyYXBoeS1pbmZvLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0yMDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXN1Y2Nlc3MtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi00MDApOy0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LXdhcm5pbmct''@;'; put 'put ''aG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctNjAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1kYW5nZXItaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNDAwKTstLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1uZXV0cmFsLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItY29uc3RydWN0aW9uLTIwMCk7LS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktbGluay1vbi1jb2xvcmJnOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmxh''@;'; put 'put ''Y2spOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTMwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0zMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy10''@;'; put 'put ''eXBvZ3JhcGh5LWNvbG9yLTQwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUw''@;'; put 'put ''MDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkLWJ1dHRvbjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi05MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1jb25zdHJ1Y3Rpb24tNTAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWluZm8taG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTIwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWNjZXNzLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNDAwKTstLWNkcy1h''@;'; put 'put ''bGlhcy10eXBvZ3JhcGh5LXdhcm5pbmctaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctNjAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRhbmdlci1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC00MDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbmV1dHJhbC1o''@;'; put 'put ''b3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0yMDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1vbi1jb2xvcmJnOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvcjp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNDAwKTstLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWxpbmstY29sb3ItaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTIwMCk7LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1sYXZlbmRlci0zMDApOy0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvci12aXNpdGVkLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItbGF2ZW5kZXItMjAwKTstLWNkcy1hbGlhcy1vYmplY3QtYXBwLWJhY2tncm91bmQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1''@;'; put 'put ''Y3Rpb24tMTAwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZHJvcC1iYWNrZ3JvdW5kOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0zMDApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0''@;'; put 'put ''cnVjdGlvbi05MDApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMDApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNv''@;'; put 'put ''bG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC1kYXJrOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTExMDApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC1pbnZlcnNlOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2UtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3Vu''@;'; put 'put ''ZC1pbnZlcnNlLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTMwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibGFjayk7LS1jZHMtYWxpYXMtb2JqZWN0LW92ZXJsYXktYmFja2dyb3Vu''@;'; put 'put ''ZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi05MDApOy0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTAwKTstLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yLXRpbnQ6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNDAwKTstLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LXNoYWRvdy0xMDA6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEp''@;'; put 'put ''IHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikgMCB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMzAwKTstLWNkcy1hbGlhcy1vYmplY3Qtc2hhZG93LTIwMDowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSAwIHZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy1vYmplY3Qtb3BhY2l0eS0yMDApOy0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMzAwOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpIDAgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWlu''@;'; put 'put ''dGVyYWN0aW9uLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJh''@;'; put 'put ''Y3Rpb24tY29sb3ItYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLXNlbGVjdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCk7LS1jZHMtYWxpYXMtb2JqZWN0''@;'; put 'put ''LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwMCk7LS1jZHMtYWxpYXMt''@;'; put 'put ''b2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAw''@;'; put 'put ''KTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi03MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWRpc2Fi''@;'; put 'put ''bGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTcwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaGlnaGxpZ2h0OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS00MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNr''@;'; put 'put ''Z3JvdW5kLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTExMDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtb2Jq''@;'; put 'put ''ZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25z''@;'; put 'put ''dHJ1Y3Rpb24tNzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1zZWxlY3RlZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRl''@;'; put 'put ''LXNlbGVjdGVkLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50''@;'; put 'put ''ZXJhY3Rpb24taW5mby1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8t''@;'; put 'put ''c2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8tY2xpY2s6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8tc2Vjb25kYXJ5LWhv''@;'; put 'put ''dmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0xMDAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tc3VjY2Vzcy1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTQwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXN1Y2Nlc3MtYWN0aXZlOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tc3VjY2Vzcy1jbGljazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXN1Y2Nlc3Mtc2Vjb25kYXJ5LWhvdmVy''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMTAwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXdhcm5pbmctaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctMzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24td2FybmluZy1hY3RpdmU6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1jb2xvci15ZWxsb3ctNTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24td2FybmluZy1jbGljazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy01MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi13YXJuaW5nLXNlY29uZGFyeS1ob3Zl''@;'; put 'put ''cjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy0xMDAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFuZ2VyLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTQwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWRhbmdlci1hY3RpdmU6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1yZWQtNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tZGFuZ2VyLWNsaWNrOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWRhbmdlci1zZWNvbmRhcnktaG92ZXI6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci1yZWQtMTAwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW5ldXRyYWwtaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tbmV1dHJhbC1hY3RpdmU6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNDAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tbmV1dHJhbC1jbGljazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi00MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1uZXV0cmFsLXNlY29uZGFy''@;'; put 'put ''eS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbnZlcnNlLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTcwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9u''@;'; put 'put ''LWludmVyc2UtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWludmVyc2UtY2xpY2s6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwKTstLWNkcy1hbGlhcy1zdGF0dXMtdGlu''@;'; put 'put ''dDp0cmFuc3BhcmVudDstLWNkcy1hbGlhcy1zdGF0dXMtaW5mbzp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNDAwKTstLWNkcy1hbGlhcy1zdGF0dXMtaW5mby10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS04MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvLXNoYWRlOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS01MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNTAwKTstLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcy10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tODAwKTstLWNkcy1h''@;'; put 'put ''bGlhcy1zdGF0dXMtc3VjY2Vzcy1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTYwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmc6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS00MDApOy0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLXRpbnQ6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1vY2hyZS05MDApOy0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNTAwKTstLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1kYXJrOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNjAwKTstLWNkcy1hbGlh''@;'; put 'put ''cy1zdGF0dXMtZGFuZ2VyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTUwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlci10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTkwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlci1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9y''@;'; put 'put ''LXJlZC02MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXItZGFyazp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC05MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTMwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRy''@;'; put 'put ''YWwtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi03MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTQwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkOnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNzAwKTstLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1''@;'; put 'put ''Y3Rpb24tNTAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWdyYXk6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWdyYXktdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDAwKTstLWNkcy1hbGlhcy11dGls''@;'; put 'put ''aXR5LWdyYXktc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTMwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1ibHVlLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci1ibHVlLTEwMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktYmx1ZS1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMjAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWxpZ2h0LWJsdWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1saWdo''@;'; put 'put ''dC1ibHVlLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTEwMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktbGlnaHQtYmx1ZS1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTAwKTstLWNkcy1hbGlhcy11dGlsaXR5LWRhcmstYmx1ZTp2YXIoLS1jZHMtZ2xvYmFsLWNv''@;'; put 'put ''bG9yLWF6dXJlLTIwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1kYXJrLWJsdWUtdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWF6dXJlLTEwMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktZGFyay1ibHVlLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXp1cmUtNTApOy0tY2RzLWFsaWFz''@;'; put 'put ''LXV0aWxpdHktZ3JlZW46dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi00MDApOy0tY2RzLWFsaWFzLXV0aWxpdHktZ3JlZW4tdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTEwMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktZ3JlZW4tc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1j''@;'; put 'put ''b2xvci1ncmVlbi0yMDApOy0tY2RzLWFsaWFzLXV0aWxpdHkteWVsbG93OnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNDAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXllbGxvdy10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtOTAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXll''@;'; put 'put ''bGxvdy1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTMwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS1yZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNTAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXJlZC10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTEwMDApOy0t''@;'; put 'put ''Y2RzLWFsaWFzLXV0aWxpdHktcmVkLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTIwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS10YW5nZXJpbmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci10YW5nZXJpbmUtNjAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXRhbmdlcmluZS10aW50OnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTEwMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktdGFuZ2VyaW5lLXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdGFuZ2VyaW5lLTQwMCk7LS1jZHMtYWxpYXMtdXRpbGl0eS12aW9sZXQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9s''@;'; put 'put ''ZXQtNDAwKTstLWNkcy1hbGlhcy11dGlsaXR5LXZpb2xldC10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTEwMDApOy0tY2RzLWFsaWFzLXV0aWxpdHktdmlvbGV0LXNoYWRlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTIwMCk7LS1jZHMtYWxpYXMtdml6LWJvcmRl''@;'; put 'put ''cjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvb2wtZ3JheS01MCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMS1ibHVlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS00MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTItdmlvbGV0OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0''@;'; put 'put ''LTQwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMy1hcXVhOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0yMDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTQtbGltZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtMzAwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC01LWJsdWU6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTIwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNi1hcXVhOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS01MCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtNy12aW9sZXQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMjAwKTst''@;'; put 'put ''LWNkcy1hbGlhcy12aXotZ2VuZXJhbC04LWxpbWU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1saW1lLTEwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtOS1ibHVlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0zMDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTEwLWxpbWU6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1saW1lLTUwKTstLWNkcy1hbGlhcy12aXotZ2VuZXJhbC0xMS1hcXVhOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS00MDApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTEyLXZpb2xldDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC01MCk7LS1jZHMt''@;'; put 'put ''YWxpYXMtdml6LWdlbmVyYWwtMTMtdmlvbGV0OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTMwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTQtYmx1ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNTApOy0tY2RzLWFsaWFzLXZpei1nZW5lcmFsLTE1LWFxdWE6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1hcXVhLTMwMCk7LS1jZHMtYWxpYXMtdml6LWdlbmVyYWwtMTYtbGltZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWxpbWUtMjAwKTstLWNkcy1hbGlhcy12aXotc2V2ZXJpdHktbmV1dHJhbDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0zMDAp''@;'; put 'put ''Oy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS1zdWNjZXNzOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNTAwKTstLWNkcy1hbGlhcy12aXotc2V2ZXJpdHktd2FybmluZzp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXllbGxvdy0zMDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS13YXJu''@;'; put 'put ''aW5nLWxpZ2h0OnZhcigtLWNkcy1nbG9iYWwtY29sb3IteWVsbG93LTMwMCk7LS1jZHMtYWxpYXMtdml6LXNldmVyaXR5LWltbWVkaWF0ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXRhbmdlcmluZS00MDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS1jcml0aWNhbDp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLXJlZC03MDApOy0tY2RzLWFsaWFzLXZpei1zZXZlcml0eS1mcmVlLXNwYWNlLWZpbGw6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ibHVlLTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS0x''@;'; put 'put ''MDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ibHVlLTEwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtOTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ibHVlLTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtODAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVu''@;'; put 'put ''dGlhbC1ibHVlLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ibHVlLTQwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ibHVlLTUwMDp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLWNvbG9yLWJsdWUtNTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ibHVlLTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ibHVlLTcwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMzAwKTstLWNkcy1h''@;'; put 'put ''bGlhcy12aXotc2VxdWVudGlhbC1ibHVlLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ibHVlLTkwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ibHVlLTEw''@;'; put 'put ''MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtNTA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMTAwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTEwMDp2YXIoLS1jZHMtZ2xvYmFsLWNv''@;'; put 'put ''bG9yLXZpb2xldC05MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtODAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtMzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTcwMCk7LS1j''@;'; put 'put ''ZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTQwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC02MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtNTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVu''@;'; put 'put ''dGlhbC12aW9sZXQtNjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTQwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTcwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXZpb2xldC0zMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXZpb2xldC04MDA6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1jb2xvci12aW9sZXQtMjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC12aW9sZXQtOTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItdmlvbGV0LTEwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtdmlvbGV0LTEwMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xv''@;'; put 'put ''ci12aW9sZXQtNTApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMTAwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtMTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtOTAwKTstLWNkcy1hbGlh''@;'; put 'put ''cy12aXotc2VxdWVudGlhbC1vY2hyZS0yMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS04MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTcwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUt''@;'; put 'put ''NDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtNjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS01MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS01MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNv''@;'; put 'put ''bG9yLW9jaHJlLTQwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtNzAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itb2NocmUtMzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1vY2hyZS04MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS0yMDApOy0tY2RzLWFs''@;'; put 'put ''aWFzLXZpei1zZXF1ZW50aWFsLW9jaHJlLTkwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTEwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtb2NocmUtMTAwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLW9jaHJlLTUwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1hcXVh''@;'; put 'put ''LTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYXF1YS0xMDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1hcXVhLTEwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtOTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1hcXVhLTIwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9y''@;'; put 'put ''LWFxdWEtODAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1hcXVhLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1hcXVhLTQwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNjAwKTstLWNkcy1hbGlhcy12aXot''@;'; put 'put ''c2VxdWVudGlhbC1hcXVhLTUwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNTAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1hcXVhLTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtNDAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1hcXVhLTcwMDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLWNvbG9yLWFxdWEtMzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1hcXVhLTgwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtMjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1hcXVhLTkwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWFxdWEtMTAwKTst''@;'; put 'put ''LWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1hcXVhLTEwMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1hcXVhLTUwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi01MDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTEwMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFs''@;'; put 'put ''LWdyZWVuLTEwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTkwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tODAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi0zMDA6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1jb2xvci1ncmVlbi03MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTQwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTYwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtZ3JlZW4tNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tNTAwKTst''@;'; put 'put ''LWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi02MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi00MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTcwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWdyZWVuLTMwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRp''@;'; put 'put ''YWwtZ3JlZW4tODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3JlZW4tMjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1ncmVlbi05MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmVlbi0xMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLWdyZWVuLTEwMDA6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci1ncmVlbi01MCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTUwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTEwMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC0xMDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtOTAwKTstLWNkcy1h''@;'; put 'put ''bGlhcy12aXotc2VxdWVudGlhbC1yZWQtMjAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTgwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTMwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC03MDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC00MDA6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtNjAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtNTAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTUwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTYwMDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC00MDApOy0t''@;'; put 'put ''Y2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC03MDA6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1yZWQtMzAwKTstLWNkcy1hbGlhcy12aXotc2VxdWVudGlhbC1yZWQtODAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTIwMCk7LS1jZHMtYWxpYXMtdml6LXNlcXVlbnRpYWwtcmVkLTkw''@;'; put 'put ''MDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC0xMDApOy0tY2RzLWFsaWFzLXZpei1zZXF1ZW50aWFsLXJlZC0xMDAwOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItcmVkLTUwKX06cm9vdHstLWNkcy1nbG9iYWwtYmFzZToyMH1odG1se2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7bGluZS1oZWln''@;'; put 'put ''aHQ6MS4xNTstbXMtdGV4dC1zaXplLWFkanVzdDoxMDAlOy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlfWJvZHl7bWFyZ2luOjB9YXJ0aWNsZSxhc2lkZSxkZXRhaWxzLGZpZ2NhcHRpb24sZmlndXJlLGZvb3RlcixoZWFkZXIsbWFpbixtZW51LG5hdixzZWN0aW9uLHN1bW1hcnl7ZGlz''@;'; put 'put ''cGxheTpibG9ja31hdWRpbyxjYW52YXMscHJvZ3Jlc3MsdmlkZW97ZGlzcGxheTppbmxpbmUtYmxvY2t9YXVkaW86bm90KFtjb250cm9sc10pe2Rpc3BsYXk6bm9uZTtoZWlnaHQ6MH1wcm9ncmVzc3t2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX10ZW1wbGF0ZSxbaGlkZGVuXXtkaXNwbGF5Om5v''@;'; put 'put ''bmV9YXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50Oy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uLXNraXA6b2JqZWN0c31hOmFjdGl2ZSxhOmhvdmVye291dGxpbmUtd2lkdGg6MH1hYmJyW3RpdGxlXXtib3JkZXItYm90dG9tOm5vbmU7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTstd2Vi''@;'; put 'put ''a2l0LXRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkfWIsc3Ryb25ne2ZvbnQtd2VpZ2h0OmluaGVyaXR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6Ym9sZGVyfWRmbntmb250LXN0eWxlOml0YWxpY31oMXtmb250LXNpemU6MmVt''@;'; put 'put ''O21hcmdpbjouNjdlbSAwfW1hcmt7YmFja2dyb3VuZC1jb2xvcjojZmYwO2NvbG9yOiMwMDB9c21hbGx7Zm9udC1zaXplOjgwJX1zdWIsc3Vwe2ZvbnQtc2l6ZTo3NSU7bGluZS1oZWlnaHQ6MDtwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX1zdWJ7Ym90dG9tOi0u''@;'; put 'put ''MjVlbX1zdXB7dG9wOi0uNWVtfWltZ3tib3JkZXItc3R5bGU6bm9uZX1zdmc6bm90KDpyb290KXtvdmVyZmxvdzpoaWRkZW59Y29kZSxrYmQscHJlLHNhbXB7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO2ZvbnQtc2l6ZToxZW19ZmlndXJle21hcmdpbjoxZW0gNDBweH1ocntib3gtc2l6aW5nOmNv''@;'; put 'put ''bnRlbnQtYm94O2hlaWdodDowO292ZXJmbG93OnZpc2libGV9YnV0dG9uLGlucHV0LG9wdGdyb3VwLHNlbGVjdCx0ZXh0YXJlYXtmb250OmluaGVyaXQ7bWFyZ2luOjB9dGV4dGFyZWF7bGluZS1oZWlnaHQ6MS4xNX1vcHRncm91cHtmb250LXdlaWdodDo3MDB9YnV0dG9uLGlucHV0e292ZXJm''@;'; put 'put ''bG93OnZpc2libGV9YnV0dG9uLHNlbGVjdHt0ZXh0LXRyYW5zZm9ybTpub25lfWJ1dHRvbixodG1sIFt0eXBlPWJ1dHRvbl0sW3R5cGU9cmVzZXRdLFt0eXBlPXN1Ym1pdF17LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbn1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsW3R5cGU9YnV0dG9uXTo6''@;'; put 'put ''LW1vei1mb2N1cy1pbm5lcixbdHlwZT1yZXNldF06Oi1tb3otZm9jdXMtaW5uZXIsW3R5cGU9c3VibWl0XTo6LW1vei1mb2N1cy1pbm5lcntib3JkZXItc3R5bGU6bm9uZTtwYWRkaW5nOjB9ZmllbGRzZXR7Ym9yZGVyOjFweCBzb2xpZCBzaWx2ZXI7bWFyZ2luOjAgMnB4O3BhZGRpbmc6LjM1''@;'; put 'put ''ZW0gLjYyNWVtIC43NWVtfWxlZ2VuZHtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6aW5oZXJpdDtkaXNwbGF5OnRhYmxlO21heC13aWR0aDoxMDAlO3BhZGRpbmc6MDt3aGl0ZS1zcGFjZTpub3JtYWx9dGV4dGFyZWF7b3ZlcmZsb3c6YXV0b31bdHlwZT1jaGVja2JveF0sW3R5cGU9cmFk''@;'; put 'put ''aW9de2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjB9W3R5cGU9bnVtYmVyXTo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixbdHlwZT1udW1iZXJdOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfVt0eXBlPXNlYXJjaF17LXdlYmtpdC1hcHBlYXJhbmNlOnRl''@;'; put 'put ''eHRmaWVsZDtvdXRsaW5lLW9mZnNldDotMnB4fVt0eXBlPXNlYXJjaF06Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24sW3R5cGU9c2VhcmNoXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX06Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9u''@;'; put 'put ''ey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247Zm9udDppbmhlcml0fTpyb290ey0tY2xyLWNvbG9yLW5ldXRyYWwtMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3ItbmV1dHJhbC01MDpoc2woMTk4LCAwJSwgOTglKTstLWNsci1jb2xvci1uZXV0cmFsLTEwMDpoc2woMTk4LCAwJSwg''@;'; put 'put ''OTUlKTstLWNsci1jb2xvci1uZXV0cmFsLTIwMDpoc2woMTk4LCAwJSwgOTElKTstLWNsci1jb2xvci1uZXV0cmFsLTMwMDpoc2woMTk4LCAwJSwgODclKTstLWNsci1jb2xvci1uZXV0cmFsLTQwMDpoc2woMTk4LCAwJSwgODAlKTstLWNsci1jb2xvci1uZXV0cmFsLTUwMDpoc2woMTk4LCAw''@;'; put 'put ''JSwgNzAlKTstLWNsci1jb2xvci1uZXV0cmFsLTYwMDpoc2woMTk4LCAwJSwgNTUlKTstLWNsci1jb2xvci1uZXV0cmFsLTcwMDpoc2woMTk4LCAwJSwgNDAlKTstLWNsci1jb2xvci1uZXV0cmFsLTgwMDpoc2woMTk4LCAwJSwgMjclKTstLWNsci1jb2xvci1uZXV0cmFsLTkwMDpoc2woMTk4''@;'; put 'put ''LCAwJSwgMjAlKTstLWNsci1jb2xvci1uZXV0cmFsLTEwMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1uZXV0cmFsLTA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1uZXV0cmFsLTUwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tbmV1dHJhbC0xMDA6''@;'; put 'put ''aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1uZXV0cmFsLTIwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRyYWwtMzAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tbmV1dHJhbC00MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1u''@;'; put 'put ''ZXV0cmFsLTUwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLW5ldXRyYWwtNjAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1vbi1uZXV0cmFsLTcwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3Itb24tbmV1dHJhbC04MDA6aHNsKDE5OCwgMCUsIDEwMCUp''@;'; put 'put ''Oy0tY2xyLWNvbG9yLW9uLW5ldXRyYWwtOTAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1vbi1uZXV0cmFsLTEwMDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLWFjdGlvbi01MDpoc2woMTk4LCA4MyUsIDk0JSk7LS1jbHItY29sb3ItYWN0aW9uLTEwMDpoc2woMTk4''@;'; put 'put ''LCA4MSUsIDg4JSk7LS1jbHItY29sb3ItYWN0aW9uLTIwMDpoc2woMTk4LCA3OCUsIDc4JSk7LS1jbHItY29sb3ItYWN0aW9uLTMwMDpoc2woMTk4LCA2OSUsIDY5JSk7LS1jbHItY29sb3ItYWN0aW9uLTQwMDpoc2woMTk4LCA2NiUsIDU3JSk7LS1jbHItY29sb3ItYWN0aW9uLTUwMDpoc2wo''@;'; put 'put ''MTk4LCA4MCUsIDQ2JSk7LS1jbHItY29sb3ItYWN0aW9uLTYwMDpoc2woMTk4LCAxMDAlLCAzMiUpOy0tY2xyLWNvbG9yLWFjdGlvbi03MDA6aHNsKDE5OCwgMTAwJSwgMjglKTstLWNsci1jb2xvci1hY3Rpb24tODAwOmhzbCgxOTgsIDEwMCUsIDI0JSk7LS1jbHItY29sb3ItYWN0aW9uLTkw''@;'; put 'put ''MDpoc2woMTk4LCAxMDAlLCAyMSUpOy0tY2xyLWNvbG9yLWFjdGlvbi0xMDAwOmhzbCgxOTgsIDEwMCUsIDE1JSk7LS1jbHItY29sb3Itb24tYWN0aW9uLTUwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tYWN0aW9uLTEwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9u''@;'; put 'put ''LWFjdGlvbi0yMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1hY3Rpb24tMzAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tYWN0aW9uLTQwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLWFjdGlvbi01MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1j''@;'; put 'put ''b2xvci1vbi1hY3Rpb24tNjAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1vbi1hY3Rpb24tNzAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1vbi1hY3Rpb24tODAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1vbi1hY3Rpb24tOTAwOmhzbCgxOTgsIDAl''@;'; put 'put ''LCAxMDAlKTstLWNsci1jb2xvci1vbi1hY3Rpb24tMTAwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi01MDpoc2woMjgyLCAxMDAlLCA5NSUpOy0tY2xyLWNvbG9yLXNlY29uZGFyeS1hY3Rpb24tMTAwOmhzbCgyODIsIDU5JSwgODclKTstLWNsci1j''@;'; put 'put ''b2xvci1zZWNvbmRhcnktYWN0aW9uLTIwMDpoc2woMjgyLCA1MSUsIDc4JSk7LS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi0zMDA6aHNsKDI4MiwgNDUlLCA3MCUpOy0tY2xyLWNvbG9yLXNlY29uZGFyeS1hY3Rpb24tNDAwOmhzbCgyODIsIDQ0JSwgNjIlKTstLWNsci1jb2xvci1zZWNv''@;'; put 'put ''bmRhcnktYWN0aW9uLTUwMDpoc2woMjgyLCA0MyUsIDU0JSk7LS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi02MDA6aHNsKDI4MiwgNTAlLCA0NSUpOy0tY2xyLWNvbG9yLXNlY29uZGFyeS1hY3Rpb24tNzAwOmhzbCgyODIsIDY5JSwgMzclKTstLWNsci1jb2xvci1zZWNvbmRhcnktYWN0''@;'; put 'put ''aW9uLTgwMDpoc2woMjgyLCAxMDAlLCAyOSUpOy0tY2xyLWNvbG9yLXNlY29uZGFyeS1hY3Rpb24tOTAwOmhzbCgyODIsIDEwMCUsIDIyJSk7LS1jbHItY29sb3Itc2Vjb25kYXJ5LWFjdGlvbi0xMDAwOmhzbCgyODIsIDEwMCUsIDE0JSk7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlv''@;'; put 'put ''bi01MDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXNlY29uZGFyeS1hY3Rpb24tMTAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi0yMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1zZWNvbmRhcnktYWN0aW9uLTMwMDpo''@;'; put 'put ''c2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXNlY29uZGFyeS1hY3Rpb24tNDAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi01MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLXNlY29uZGFyeS1hY3Rpb24tNjAwOmhzbCgx''@;'; put 'put ''OTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1vbi1zZWNvbmRhcnktYWN0aW9uLTcwMDpoc2woMTk4LCAwJSwgMTAwJSk7LS1jbHItY29sb3Itb24tc2Vjb25kYXJ5LWFjdGlvbi04MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLXNlY29uZGFyeS1hY3Rpb24tOTAwOmhzbCgx''@;'; put 'put ''OTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1vbi1zZWNvbmRhcnktYWN0aW9uLTEwMDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLWRhbmdlci01MDpoc2woOSwgMTAwJSwgOTclKTstLWNsci1jb2xvci1kYW5nZXItMTAwOmhzbCg5LCA5NSUsIDkyJSk7LS1jbHItY29sb3ItZGFu''@;'; put 'put ''Z2VyLTIwMDpoc2woOSwgOTElLCA4NiUpOy0tY2xyLWNvbG9yLWRhbmdlci0zMDA6aHNsKDksIDgzJSwgNzYlKTstLWNsci1jb2xvci1kYW5nZXItNDAwOmhzbCg5LCA4NSUsIDY3JSk7LS1jbHItY29sb3ItZGFuZ2VyLTUwMDpoc2woOSwgODglLCA2MSUpOy0tY2xyLWNvbG9yLWRhbmdlci02''@;'; put 'put ''MDA6aHNsKDksIDkyJSwgNTAlKTstLWNsci1jb2xvci1kYW5nZXItNzAwOmhzbCg5LCAxMDAlLCA0MyUpOy0tY2xyLWNvbG9yLWRhbmdlci04MDA6aHNsKDksIDEwMCUsIDM4JSk7LS1jbHItY29sb3ItZGFuZ2VyLTkwMDpoc2woOSwgMTAwJSwgMzAlKTstLWNsci1jb2xvci1kYW5nZXItMTAw''@;'; put 'put ''MDpoc2woOSwgMTAwJSwgMjAlKTstLWNsci1jb2xvci1vbi1kYW5nZXItNTA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1kYW5nZXItMTAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tZGFuZ2VyLTIwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLWRh''@;'; put 'put ''bmdlci0zMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1kYW5nZXItNDAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tZGFuZ2VyLTUwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLWRhbmdlci02MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xv''@;'; put 'put ''ci1vbi1kYW5nZXItNzAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1vbi1kYW5nZXItODAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1vbi1kYW5nZXItOTAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1vbi1kYW5nZXItMTAwMDpoc2woMTk4LCAwJSwg''@;'; put 'put ''MTAwJSk7LS1jbHItY29sb3Itd2FybmluZy01MDpoc2woNDgsIDEwMCUsIDk1JSk7LS1jbHItY29sb3Itd2FybmluZy0xMDA6aHNsKDQ4LCAxMDAlLCA4OSUpOy0tY2xyLWNvbG9yLXdhcm5pbmctMjAwOmhzbCg0OCwgMTAwJSwgODMlKTstLWNsci1jb2xvci13YXJuaW5nLTMwMDpoc2woNDgs''@;'; put 'put ''IDk4JSwgNzIlKTstLWNsci1jb2xvci13YXJuaW5nLTQwMDpoc2woNDgsIDk0JSwgNTclKTstLWNsci1jb2xvci13YXJuaW5nLTUwMDpoc2woNDgsIDk1JSwgNDglKTstLWNsci1jb2xvci13YXJuaW5nLTYwMDpoc2woNDYsIDEwMCUsIDQ1JSk7LS1jbHItY29sb3Itd2FybmluZy03MDA6aHNs''@;'; put 'put ''KDQzLCAxMDAlLCA0MiUpOy0tY2xyLWNvbG9yLXdhcm5pbmctODAwOmhzbCg0MSwgMTAwJSwgMzQlKTstLWNsci1jb2xvci13YXJuaW5nLTkwMDpoc2woMzgsIDEwMCUsIDI4JSk7LS1jbHItY29sb3Itd2FybmluZy0xMDAwOmhzbCgzMSwgMTAwJSwgMTklKTstLWNsci1jb2xvci1vbi13YXJu''@;'; put 'put ''aW5nLTUwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24td2FybmluZy0xMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi13YXJuaW5nLTIwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmctMzAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29s''@;'; put 'put ''b3Itb24td2FybmluZy00MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi13YXJuaW5nLTUwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmctNjAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24td2FybmluZy03MDA6aHNsKDE5OCwgMCUsIDAl''@;'; put 'put ''KTstLWNsci1jb2xvci1vbi13YXJuaW5nLTgwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXdhcm5pbmctOTAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24td2FybmluZy0xMDAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1zdWNjZXNzLTUwOmhzbCg5''@;'; put 'put ''MywgNTIlLCA4OCUpOy0tY2xyLWNvbG9yLXN1Y2Nlc3MtMTAwOmhzbCg5MywgNTglLCA3NSUpOy0tY2xyLWNvbG9yLXN1Y2Nlc3MtMjAwOmhzbCg5MywgNzYlLCA0OSUpOy0tY2xyLWNvbG9yLXN1Y2Nlc3MtMzAwOmhzbCg5MywgNzclLCA0NCUpOy0tY2xyLWNvbG9yLXN1Y2Nlc3MtNDAwOmhz''@;'; put 'put ''bCg5MywgNzklLCA0MCUpOy0tY2xyLWNvbG9yLXN1Y2Nlc3MtNTAwOmhzbCg5MywgNjclLCAzOCUpOy0tY2xyLWNvbG9yLXN1Y2Nlc3MtNjAwOmhzbCg5MywgODUlLCAzMiUpOy0tY2xyLWNvbG9yLXN1Y2Nlc3MtNzAwOmhzbCg5MywgMTAwJSwgMjYlKTstLWNsci1jb2xvci1zdWNjZXNzLTgw''@;'; put 'put ''MDpoc2woOTMsIDEwMCUsIDIxJSk7LS1jbHItY29sb3Itc3VjY2Vzcy05MDA6aHNsKDkzLCAxMDAlLCAxNiUpOy0tY2xyLWNvbG9yLXN1Y2Nlc3MtMTAwMDpoc2woOTMsIDEwMCUsIDEzJSk7LS1jbHItY29sb3Itb24tc3VjY2Vzcy01MDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9u''@;'; put 'put ''LXN1Y2Nlc3MtMTAwOmhzbCgxOTgsIDAlLCAwJSk7LS1jbHItY29sb3Itb24tc3VjY2Vzcy0yMDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1zdWNjZXNzLTMwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXN1Y2Nlc3MtNDAwOmhzbCgxOTgsIDAlLCAwJSk7LS1j''@;'; put 'put ''bHItY29sb3Itb24tc3VjY2Vzcy01MDA6aHNsKDE5OCwgMCUsIDAlKTstLWNsci1jb2xvci1vbi1zdWNjZXNzLTYwMDpoc2woMTk4LCAwJSwgMCUpOy0tY2xyLWNvbG9yLW9uLXN1Y2Nlc3MtNzAwOmhzbCgxOTgsIDAlLCAxMDAlKTstLWNsci1jb2xvci1vbi1zdWNjZXNzLTgwMDpoc2woMTk4''@;'; put 'put ''LCAwJSwgMTAwJSk7LS1jbHItY29sb3Itb24tc3VjY2Vzcy05MDA6aHNsKDE5OCwgMCUsIDEwMCUpOy0tY2xyLWNvbG9yLW9uLXN1Y2Nlc3MtMTAwMDpoc2woMTk4LCAwJSwgMTAwJSl9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItZ3JpZC1ndXR0ZXItd2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1z''@;'; put 'put ''cGFjZS05KTstLWNsci1ncmlkLWNvbnRhaW5lci1wYWRkaW5nOmNhbGModmFyKC0tY2xyLWdyaWQtZ3V0dGVyLXdpZHRoKSAqIC41KTstLWNsci1ncmlkLWNvbHVtbi1wYWRkaW5nOmNhbGModmFyKC0tY2xyLWdyaWQtZ3V0dGVyLXdpZHRoKSAqIC41KTstLWNsci1ncmlkLXJvdy1tYXJnaW46''@;'; put 'put ''Y2FsYyh2YXIoLS1jbHItZ3JpZC1ndXR0ZXItd2lkdGgpICogLS41KX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1jbG9zZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci1jbG9zZS1jb2xvci1ob3Zlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0''@;'; put 'put ''LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci1jbG9zZS1jb2xvci1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLWJhc2Vmb250LXNpemU6MTI1JTstLWNsci1nbG9iYWwtYm9yZGVycmFkaXVzOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLWdsb2JhbC1ib3JkZXJ3aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApOy0tY2xyLWdsb2JhbC1hcHAtYmFja2dyb3VuZDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWFwcC1iYWNrZ3JvdW5kKTstLWNs''@;'; put 'put ''ci1nbG9iYWwtc2VsZWN0aW9uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZCk7LS1jbHItZ2xvYmFsLW9uLXNlbGVjdGlvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLXNlbGVjdGVkKTst''@;'; put 'put ''LWNsci1nbG9iYWwtaG92ZXItY29sb3I6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWxpbmstY29sb3ItaG92ZXIpOy0tY2xyLWdsb2JhbC1jb250ZW50LWhlYWRlci1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItZ2xvYmFsLWZvbnQt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1nbG9iYWwtc3VjY2Vzcy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLWdsb2JhbC1lcnJvci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcil9OnJvb3R7''@;'; put 'put ''LS1jbHItcG9wb3Zlci1ib3gtc2hhZG93LWNvbG9yOnJnYmEoMTQwLCAxNDAsIDE0MCwgLjI1KX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1tZXRyb3BvbGlzLWZvbnQtZmFtaWx5Ok1ldHJvcG9saXMsICJBdmVuaXIgTmV4dCIsICJIZWx2ZXRpY2EgTmV1ZSIsIEFyaWFsLCBzYW5zLXNlcmlm''@;'; put 'put ''Oy0tY2xyLWJvZHktZm9udDp2YXIoLS1jbHItbWV0cm9wb2xpcy1mb250LWZhbWlseSk7LS1jbHItZm9udDp2YXIoLS1jbHItYm9keS1mb250KTstLWNsci1kaXNwbGF5LWZvbnQ6dmFyKC0tY2xyLW1ldHJvcG9saXMtZm9udC1mYW1pbHkpOy0tY2xyLWZvbnQtd2VpZ2h0LWxpZ2h0OnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWxpZ2h0KTstLWNsci1mb250LXdlaWdodC1yZWd1bGFyOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXJlZ3VsYXIpOy0tY2xyLWZvbnQtd2VpZ2h0LXNlbWlib2xkOnZhcigtLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKTstLWNsci1mb250LXdlaWdodC1ib2xkOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LWJvbGQpOy0tY2xyLWZvbnQtd2VpZ2h0LWV4dHJhYm9sZDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1leHRy''@;'; put 'put ''YWJvbGQpOy0tY2xyLWgxLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTMwMCk7LS1jbHItaDEtZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC1zaXplKTstLWNsci1oMS1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1kaXNwbGF5LWZvbnQtd2VpZ2h0KTstLWNsci1oMS1mb250LWZhbWlseTp2YXIoLS1jbHItZGlzcGxheS1mb250KTstLWNsci1oMS1saW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNwbGF5LWxpbmUtaGVpZ2h0KTstLWNsci1oMS1sZXR0ZXItc3BhY2lu''@;'; put 'put ''Zzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNwbGF5LWxldHRlci1zcGFjaW5nKTstLWNsci1oMi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0zMDApOy0tY2xyLWgyLWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1oZWFkbGluZS1mb250''@;'; put 'put ''LXNpemUpOy0tY2xyLWgyLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWhlYWRsaW5lLWZvbnQtd2VpZ2h0KTstLWNsci1oMi1mb250LWZhbWlseTp2YXIoLS1jbHItZGlzcGxheS1mb250KTstLWNsci1oMi1saW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dy''@;'; put 'put ''YXBoeS1oZWFkbGluZS1saW5lLWhlaWdodCk7LS1jbHItaDItbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaGVhZGxpbmUtbGV0dGVyLXNwYWNpbmcpOy0tY2xyLWgzLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTMwMCk7LS1jbHItaDMt''@;'; put 'put ''Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXRpdGxlLWZvbnQtc2l6ZSk7LS1jbHItaDMtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktdGl0bGUtZm9udC13ZWlnaHQpOy0tY2xyLWgzLWZvbnQtZmFtaWx5OnZhcigtLWNsci1kaXNwbGF5LWZvbnQp''@;'; put 'put ''Oy0tY2xyLWgzLWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXRpdGxlLWxpbmUtaGVpZ2h0KTstLWNsci1oMy1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS10aXRsZS1sZXR0ZXItc3BhY2luZyk7LS1jbHItaDQtY29sb3I6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMzAwKTstLWNsci1oNC1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXNpemUpOy0tY2xyLWg0LWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQpOy0t''@;'; put 'put ''Y2xyLWg0LWZvbnQtZmFtaWx5OnZhcigtLWNsci1kaXNwbGF5LWZvbnQpOy0tY2xyLWg0LWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQpOy0tY2xyLWg0LWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNl''@;'; put 'put ''Y3Rpb24tbGV0dGVyLXNwYWNpbmcpOy0tY2xyLWg1LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTMwMCk7LS1jbHItaDUtZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC1zaXplKTstLWNsci1oNS1mb250LXdlaWdodDp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtd2VpZ2h0KTstLWNsci1oNS1mb250LWZhbWlseTp2YXIoLS1jbHItZGlzcGxheS1mb250KTstLWNsci1oNS1saW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxpbmUtaGVpZ2h0''@;'; put 'put ''KTstLWNsci1oNS1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWxldHRlci1zcGFjaW5nKTstLWNsci1oNi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0zMDApOy0tY2xyLWg2LWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtdHlwb2dyYXBoeS1tZXNzYWdlLWZvbnQtc2l6ZSk7LS1jbHItaDYtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbWVzc2FnZS1mb250LXdlaWdodCk7LS1jbHItaDYtZm9udC1mYW1pbHk6dmFyKC0tY2xyLWRpc3BsYXktZm9udCk7LS1jbHItaDYtbGluZS1oZWln''@;'; put 'put ''aHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbWVzc2FnZS1saW5lLWhlaWdodCk7LS1jbHItaDYtbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbWVzc2FnZS1sZXR0ZXItc3BhY2luZyk7LS1jbHItcDAtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFw''@;'; put 'put ''aHktY29sb3ItNDUwKTstLWNsci1wMC1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpOy0tY2xyLXAwLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpOy0tY2xyLXAwLWxpbmUtaGVpZ2h0OnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQpOy0tY2xyLXAwLWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpOy0tY2xyLXAxLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQ1''@;'; put 'put ''MCk7LS1jbHItcDEtZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTstLWNsci1wMS1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTstLWNsci1wMS1saW5lLWhlaWdodDp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KTstLWNsci1wMS1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTstLWNsci1wMi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00NTApOy0tY2xyLXAy''@;'; put 'put ''LWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTstLWNsci1wMi1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1tZWRpdW0pOy0tY2xyLXAyLWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtOSk7LS1jbHItcDItbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTstLWNsci1wMy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00NTApOy0tY2xyLXAzLWZvbnQtc2l6ZTp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTstLWNsci1wMy1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpOy0tY2xyLXAzLWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7LS1jbHIt''@;'; put 'put ''cDMtbGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTstLWNsci1wNC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00NTApOy0tY2xyLXA0LWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dy''@;'; put 'put ''YXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTstLWNsci1wNC1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7LS1jbHItcDQtbGluZS1oZWlnaHQ6Y2FsYygyMCAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2xy''@;'; put 'put ''LXA0LWxldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7LS1jbHItcDUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDUwKTstLWNsci1wNS1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9n''@;'; put 'put ''cmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7LS1jbHItcDUtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTstLWNsci1wNS1saW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpOy0tY2xyLXA1LWxldHRlci1zcGFj''@;'; put 'put ''aW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7LS1jbHItcDYtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDUwKTstLWNsci1wNi1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1m''@;'; put 'put ''b250LXNpemUpOy0tY2xyLXA2LWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC13ZWlnaHQpOy0tY2xyLXA2LWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGluZS1oZWlnaHQpOy0tY2xyLXA2LWxldHRlci1z''@;'; put 'put ''cGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGV0dGVyLXNwYWNpbmcpOy0tY2xyLXA3LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQ1MCk7LS1jbHItcDctZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2Fw''@;'; put 'put ''dGlvbi1mb250LXNpemUpOy0tY2xyLXA3LWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXdlaWdodCk7LS1jbHItcDctbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxpbmUtaGVpZ2h0KTst''@;'; put 'put ''LWNsci1wNy1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGV0dGVyLXNwYWNpbmcpOy0tY2xyLXA4LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQ1MCk7LS1jbHItcDgtZm9udC1zaXplOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXNpemUpOy0tY2xyLXA4LWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXdlaWdodCk7LS1jbHItcDgtbGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxj''@;'; put 'put ''YXB0aW9uLWxpbmUtaGVpZ2h0KTstLWNsci1wOC1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGV0dGVyLXNwYWNpbmcpOy0tY2xyLWxpc3QtaXRlbS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApfS5jbHIt''@;'; put 'put ''YWxpZ24tYmFzZWxpbmV7dmVydGljYWwtYWxpZ246YmFzZWxpbmUhaW1wb3J0YW50fS5jbHItYWxpZ24tdG9we3ZlcnRpY2FsLWFsaWduOnRvcCFpbXBvcnRhbnR9LmNsci1hbGlnbi1taWRkbGV7dmVydGljYWwtYWxpZ246bWlkZGxlIWltcG9ydGFudH0uY2xyLWFsaWduLWJvdHRvbXt2ZXJ0''@;'; put 'put ''aWNhbC1hbGlnbjpib3R0b20haW1wb3J0YW50fS5jbHItYWxpZ24tdGV4dC1ib3R0b217dmVydGljYWwtYWxpZ246dGV4dC1ib3R0b20haW1wb3J0YW50fS5jbHItYWxpZ24tdGV4dC10b3B7dmVydGljYWwtYWxpZ246dGV4dC10b3AhaW1wb3J0YW50fS5jbHItY2xlYXJmaXg6YWZ0ZXJ7Y29u''@;'; put 'put ''dGVudDoiIjtkaXNwbGF5OnRhYmxlO2NsZWFyOmJvdGh9LmNsci1kaXNwbGF5LWJsb2Nre2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fS5jbHItZGlzcGxheS1pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50fS5jbHItZGlzcGxheS1pbmxpbmV7ZGlzcGxheTppbmxp''@;'; put 'put ''bmUhaW1wb3J0YW50fS5jbHItZmxleC1yb3d7ZmxleC1kaXJlY3Rpb246cm93IWltcG9ydGFudH0uY2xyLWZsZXgtY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbiFpbXBvcnRhbnR9LmNsci1mbGV4LXJvdy1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlIWltcG9ydGFudH0u''@;'; put 'put ''Y2xyLWZsZXgtY29sdW1uLXJldmVyc2V7ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC13cmFwe2ZsZXgtd3JhcDp3cmFwIWltcG9ydGFudH0uY2xyLWZsZXgtbm93cmFwe2ZsZXgtd3JhcDpub3dyYXAhaW1wb3J0YW50fS5jbHItZmxleC13cmFwLXJl''@;'; put 'put ''dmVyc2V7ZmxleC13cmFwOndyYXAtcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LWZpbGx7ZmxleDoxIDEgYXV0byFpbXBvcnRhbnR9LmNsci1mbGV4LWdyb3ctMHtmbGV4LWdyb3c6MCFpbXBvcnRhbnR9LmNsci1mbGV4LWdyb3ctMXtmbGV4LWdyb3c6MSFpbXBvcnRhbnR9LmNsci1mbGV4''@;'; put 'put ''LXNocmluay0we2ZsZXgtc2hyaW5rOjAhaW1wb3J0YW50fS5jbHItZmxleC1zaHJpbmstMXtmbGV4LXNocmluazoxIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1zdGFydHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtZW5k''@;'; put 'put ''e2p1c3RpZnktY29udGVudDpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXIhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW4haW1wb3J0YW50''@;'; put 'put ''fS5jbHItanVzdGlmeS1jb250ZW50LWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLXN0YXJ0e2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtZW5ke2FsaWduLWl0ZW1zOmZsZXgtZW5k''@;'; put 'put ''IWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtYmFzZWxpbmV7YWxpZ24taXRlbXM6YmFzZWxpbmUhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNo''@;'; put 'put ''IWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtc3RhcnR7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtZW5ke2FsaWduLWNvbnRlbnQ6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1jZW50ZXJ7YWxpZ24tY29udGVu''@;'; put 'put ''dDpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1iZXR3ZWVue2FsaWduLWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LWFyb3VuZHthbGlnbi1jb250ZW50OnNwYWNlLWFyb3VuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50''@;'; put 'put ''LXN0cmV0Y2h7YWxpZ24tY29udGVudDpzdHJldGNoIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtYXV0b3thbGlnbi1zZWxmOmF1dG8haW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1zdGFydHthbGlnbi1zZWxmOmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1lbmR7YWxp''@;'; put 'put ''Z24tc2VsZjpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLWNlbnRlcnthbGlnbi1zZWxmOmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLWJhc2VsaW5le2FsaWduLXNlbGY6YmFzZWxpbmUhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1zdHJldGNoe2FsaWduLXNl''@;'; put 'put ''bGY6c3RyZXRjaCFpbXBvcnRhbnR9QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5jbHItZmxleC1zbS1yb3d7ZmxleC1kaXJlY3Rpb246cm93IWltcG9ydGFudH0uY2xyLWZsZXgtc20tY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbiFpbXBvcnRhbnR9LmNsci1mbGV4LXNtLXJvdy1yZXZl''@;'; put 'put ''cnNle2ZsZXgtZGlyZWN0aW9uOnJvdy1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgtc20tY29sdW1uLXJldmVyc2V7ZmxleC1kaXJlY3Rpb246Y29sdW1uLXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC1zbS13cmFwe2ZsZXgtd3JhcDp3cmFwIWltcG9ydGFudH0uY2xyLWZsZXgtc20t''@;'; put 'put ''bm93cmFwe2ZsZXgtd3JhcDpub3dyYXAhaW1wb3J0YW50fS5jbHItZmxleC1zbS13cmFwLXJldmVyc2V7ZmxleC13cmFwOndyYXAtcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LXNtLWZpbGx7ZmxleDoxIDEgYXV0byFpbXBvcnRhbnR9LmNsci1mbGV4LXNtLWdyb3ctMHtmbGV4LWdyb3c6''@;'; put 'put ''MCFpbXBvcnRhbnR9LmNsci1mbGV4LXNtLWdyb3ctMXtmbGV4LWdyb3c6MSFpbXBvcnRhbnR9LmNsci1mbGV4LXNtLXNocmluay0we2ZsZXgtc2hyaW5rOjAhaW1wb3J0YW50fS5jbHItZmxleC1zbS1zaHJpbmstMXtmbGV4LXNocmluazoxIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVu''@;'; put 'put ''dC1zbS1zdGFydHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtc20tZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtc20tY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXIh''@;'; put 'put ''aW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LXNtLWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW4haW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LXNtLWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWl0''@;'; put 'put ''ZW1zLXNtLXN0YXJ0e2FsaWduLWl0ZW1zOmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtc20tZW5ke2FsaWduLWl0ZW1zOmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLXNtLWNlbnRlcnthbGlnbi1pdGVtczpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxp''@;'; put 'put ''Z24taXRlbXMtc20tYmFzZWxpbmV7YWxpZ24taXRlbXM6YmFzZWxpbmUhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtc20tc3RyZXRjaHthbGlnbi1pdGVtczpzdHJldGNoIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtc20tc3RhcnR7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0IWlt''@;'; put 'put ''cG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtc20tZW5ke2FsaWduLWNvbnRlbnQ6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1zbS1jZW50ZXJ7YWxpZ24tY29udGVudDpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1zbS1iZXR3ZWVue2FsaWduLWNv''@;'; put 'put ''bnRlbnQ6c3BhY2UtYmV0d2VlbiFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LXNtLWFyb3VuZHthbGlnbi1jb250ZW50OnNwYWNlLWFyb3VuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LXNtLXN0cmV0Y2h7YWxpZ24tY29udGVudDpzdHJldGNoIWltcG9ydGFudH0uY2xyLWFs''@;'; put 'put ''aWduLXNlbGYtc20tYXV0b3thbGlnbi1zZWxmOmF1dG8haW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1zbS1zdGFydHthbGlnbi1zZWxmOmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1zbS1lbmR7YWxpZ24tc2VsZjpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1z''@;'; put 'put ''ZWxmLXNtLWNlbnRlcnthbGlnbi1zZWxmOmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXNtLWJhc2VsaW5le2FsaWduLXNlbGY6YmFzZWxpbmUhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1zbS1zdHJldGNoe2FsaWduLXNlbGY6c3RyZXRjaCFpbXBvcnRhbnR9fUBtZWRpYSAo''@;'; put 'put ''bWluLXdpZHRoOjc2OHB4KXsuY2xyLWZsZXgtbWQtcm93e2ZsZXgtZGlyZWN0aW9uOnJvdyFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW4haW1wb3J0YW50fS5jbHItZmxleC1tZC1yb3ctcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJz''@;'; put 'put ''ZSFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLWNvbHVtbi1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOmNvbHVtbi1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgtbWQtd3JhcHtmbGV4LXdyYXA6d3JhcCFpbXBvcnRhbnR9LmNsci1mbGV4LW1kLW5vd3JhcHtmbGV4LXdyYXA6bm93cmFwIWltcG9y''@;'; put 'put ''dGFudH0uY2xyLWZsZXgtbWQtd3JhcC1yZXZlcnNle2ZsZXgtd3JhcDp3cmFwLXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC1tZC1maWxse2ZsZXg6MSAxIGF1dG8haW1wb3J0YW50fS5jbHItZmxleC1tZC1ncm93LTB7ZmxleC1ncm93OjAhaW1wb3J0YW50fS5jbHItZmxleC1tZC1ncm93''@;'; put 'put ''LTF7ZmxleC1ncm93OjEhaW1wb3J0YW50fS5jbHItZmxleC1tZC1zaHJpbmstMHtmbGV4LXNocmluazowIWltcG9ydGFudH0uY2xyLWZsZXgtbWQtc2hyaW5rLTF7ZmxleC1zaHJpbms6MSFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtbWQtc3RhcnR7anVzdGlmeS1jb250ZW50OmZs''@;'; put 'put ''ZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LW1kLWVuZHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LW1kLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVu''@;'; put 'put ''dC1tZC1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1tZC1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1tZC1zdGFydHthbGlnbi1pdGVtczpmbGV4''@;'; put 'put ''LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLW1kLWVuZHthbGlnbi1pdGVtczpmbGV4LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1tZC1jZW50ZXJ7YWxpZ24taXRlbXM6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLW1kLWJhc2VsaW5le2FsaWduLWl0''@;'; put 'put ''ZW1zOmJhc2VsaW5lIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLW1kLXN0cmV0Y2h7YWxpZ24taXRlbXM6c3RyZXRjaCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LW1kLXN0YXJ0e2FsaWduLWNvbnRlbnQ6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LW1k''@;'; put 'put ''LWVuZHthbGlnbi1jb250ZW50OmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtbWQtY2VudGVye2FsaWduLWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtbWQtYmV0d2VlbnthbGlnbi1jb250ZW50OnNwYWNlLWJldHdlZW4haW1wb3J0YW50''@;'; put 'put ''fS5jbHItYWxpZ24tY29udGVudC1tZC1hcm91bmR7YWxpZ24tY29udGVudDpzcGFjZS1hcm91bmQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1tZC1zdHJldGNoe2FsaWduLWNvbnRlbnQ6c3RyZXRjaCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLW1kLWF1dG97YWxpZ24tc2VsZjph''@;'; put 'put ''dXRvIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbWQtc3RhcnR7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbWQtZW5ke2FsaWduLXNlbGY6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1tZC1jZW50ZXJ7YWxpZ24tc2VsZjpjZW50''@;'; put 'put ''ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1tZC1iYXNlbGluZXthbGlnbi1zZWxmOmJhc2VsaW5lIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbWQtc3RyZXRjaHthbGlnbi1zZWxmOnN0cmV0Y2ghaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7LmNsci1mbGV4LWxn''@;'; put 'put ''LXJvd3tmbGV4LWRpcmVjdGlvbjpyb3chaW1wb3J0YW50fS5jbHItZmxleC1sZy1jb2x1bW57ZmxleC1kaXJlY3Rpb246Y29sdW1uIWltcG9ydGFudH0uY2xyLWZsZXgtbGctcm93LXJldmVyc2V7ZmxleC1kaXJlY3Rpb246cm93LXJldmVyc2UhaW1wb3J0YW50fS5jbHItZmxleC1sZy1jb2x1''@;'; put 'put ''bW4tcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpjb2x1bW4tcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LWxnLXdyYXB7ZmxleC13cmFwOndyYXAhaW1wb3J0YW50fS5jbHItZmxleC1sZy1ub3dyYXB7ZmxleC13cmFwOm5vd3JhcCFpbXBvcnRhbnR9LmNsci1mbGV4LWxnLXdyYXAtcmV2ZXJz''@;'; put 'put ''ZXtmbGV4LXdyYXA6d3JhcC1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgtbGctZmlsbHtmbGV4OjEgMSBhdXRvIWltcG9ydGFudH0uY2xyLWZsZXgtbGctZ3Jvdy0we2ZsZXgtZ3JvdzowIWltcG9ydGFudH0uY2xyLWZsZXgtbGctZ3Jvdy0xe2ZsZXgtZ3JvdzoxIWltcG9ydGFudH0uY2xy''@;'; put 'put ''LWZsZXgtbGctc2hyaW5rLTB7ZmxleC1zaHJpbms6MCFpbXBvcnRhbnR9LmNsci1mbGV4LWxnLXNocmluay0xe2ZsZXgtc2hyaW5rOjEhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LWxnLXN0YXJ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWp1c3Rp''@;'; put 'put ''ZnktY29udGVudC1sZy1lbmR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC1sZy1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlciFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtbGctYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6''@;'; put 'put ''c3BhY2UtYmV0d2VlbiFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQtbGctYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtbGctc3RhcnR7YWxpZ24taXRlbXM6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1p''@;'; put 'put ''dGVtcy1sZy1lbmR7YWxpZ24taXRlbXM6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24taXRlbXMtbGctY2VudGVye2FsaWduLWl0ZW1zOmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy1sZy1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1h''@;'; put 'put ''bGlnbi1pdGVtcy1sZy1zdHJldGNoe2FsaWduLWl0ZW1zOnN0cmV0Y2ghaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1sZy1zdGFydHthbGlnbi1jb250ZW50OmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC1sZy1lbmR7YWxpZ24tY29udGVudDpmbGV4LWVuZCFp''@;'; put 'put ''bXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LWxnLWNlbnRlcnthbGlnbi1jb250ZW50OmNlbnRlciFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LWxnLWJldHdlZW57YWxpZ24tY29udGVudDpzcGFjZS1iZXR3ZWVuIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtbGctYXJvdW5k''@;'; put 'put ''e2FsaWduLWNvbnRlbnQ6c3BhY2UtYXJvdW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQtbGctc3RyZXRjaHthbGlnbi1jb250ZW50OnN0cmV0Y2ghaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi1sZy1hdXRve2FsaWduLXNlbGY6YXV0byFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxm''@;'; put 'put ''LWxnLXN0YXJ0e2FsaWduLXNlbGY6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLWxnLWVuZHthbGlnbi1zZWxmOmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYtbGctY2VudGVye2FsaWduLXNlbGY6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYt''@;'; put 'put ''bGctYmFzZWxpbmV7YWxpZ24tc2VsZjpiYXNlbGluZSFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLWxnLXN0cmV0Y2h7YWxpZ24tc2VsZjpzdHJldGNoIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6MTIwMHB4KXsuY2xyLWZsZXgteGwtcm93e2ZsZXgtZGlyZWN0aW9uOnJvdyFpbXBv''@;'; put 'put ''cnRhbnR9LmNsci1mbGV4LXhsLWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW4haW1wb3J0YW50fS5jbHItZmxleC14bC1yb3ctcmV2ZXJzZXtmbGV4LWRpcmVjdGlvbjpyb3ctcmV2ZXJzZSFpbXBvcnRhbnR9LmNsci1mbGV4LXhsLWNvbHVtbi1yZXZlcnNle2ZsZXgtZGlyZWN0aW9uOmNv''@;'; put 'put ''bHVtbi1yZXZlcnNlIWltcG9ydGFudH0uY2xyLWZsZXgteGwtd3JhcHtmbGV4LXdyYXA6d3JhcCFpbXBvcnRhbnR9LmNsci1mbGV4LXhsLW5vd3JhcHtmbGV4LXdyYXA6bm93cmFwIWltcG9ydGFudH0uY2xyLWZsZXgteGwtd3JhcC1yZXZlcnNle2ZsZXgtd3JhcDp3cmFwLXJldmVyc2UhaW1w''@;'; put 'put ''b3J0YW50fS5jbHItZmxleC14bC1maWxse2ZsZXg6MSAxIGF1dG8haW1wb3J0YW50fS5jbHItZmxleC14bC1ncm93LTB7ZmxleC1ncm93OjAhaW1wb3J0YW50fS5jbHItZmxleC14bC1ncm93LTF7ZmxleC1ncm93OjEhaW1wb3J0YW50fS5jbHItZmxleC14bC1zaHJpbmstMHtmbGV4LXNocmlu''@;'; put 'put ''azowIWltcG9ydGFudH0uY2xyLWZsZXgteGwtc2hyaW5rLTF7ZmxleC1zaHJpbms6MSFpbXBvcnRhbnR9LmNsci1qdXN0aWZ5LWNvbnRlbnQteGwtc3RhcnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnQhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LXhsLWVuZHtqdXN0aWZ5LWNv''@;'; put 'put ''bnRlbnQ6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItanVzdGlmeS1jb250ZW50LXhsLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0uY2xyLWp1c3RpZnktY29udGVudC14bC1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuIWltcG9ydGFudH0uY2xy''@;'; put 'put ''LWp1c3RpZnktY29udGVudC14bC1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy14bC1zdGFydHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLXhsLWVuZHthbGlnbi1pdGVtczpmbGV4''@;'; put 'put ''LWVuZCFpbXBvcnRhbnR9LmNsci1hbGlnbi1pdGVtcy14bC1jZW50ZXJ7YWxpZ24taXRlbXM6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLXhsLWJhc2VsaW5le2FsaWduLWl0ZW1zOmJhc2VsaW5lIWltcG9ydGFudH0uY2xyLWFsaWduLWl0ZW1zLXhsLXN0cmV0Y2h7YWxpZ24t''@;'; put 'put ''aXRlbXM6c3RyZXRjaCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LXhsLXN0YXJ0e2FsaWduLWNvbnRlbnQ6ZmxleC1zdGFydCFpbXBvcnRhbnR9LmNsci1hbGlnbi1jb250ZW50LXhsLWVuZHthbGlnbi1jb250ZW50OmZsZXgtZW5kIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQt''@;'; put 'put ''eGwtY2VudGVye2FsaWduLWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0uY2xyLWFsaWduLWNvbnRlbnQteGwtYmV0d2VlbnthbGlnbi1jb250ZW50OnNwYWNlLWJldHdlZW4haW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC14bC1hcm91bmR7YWxpZ24tY29udGVudDpzcGFjZS1hcm91bmQh''@;'; put 'put ''aW1wb3J0YW50fS5jbHItYWxpZ24tY29udGVudC14bC1zdHJldGNoe2FsaWduLWNvbnRlbnQ6c3RyZXRjaCFpbXBvcnRhbnR9LmNsci1hbGlnbi1zZWxmLXhsLWF1dG97YWxpZ24tc2VsZjphdXRvIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYteGwtc3RhcnR7YWxpZ24tc2VsZjpmbGV4LXN0''@;'; put 'put ''YXJ0IWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYteGwtZW5ke2FsaWduLXNlbGY6ZmxleC1lbmQhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi14bC1jZW50ZXJ7YWxpZ24tc2VsZjpjZW50ZXIhaW1wb3J0YW50fS5jbHItYWxpZ24tc2VsZi14bC1iYXNlbGluZXthbGlnbi1zZWxmOmJhc2Vs''@;'; put 'put ''aW5lIWltcG9ydGFudH0uY2xyLWFsaWduLXNlbGYteGwtc3RyZXRjaHthbGlnbi1zZWxmOnN0cmV0Y2ghaW1wb3J0YW50fX0uY2xyLWZsZXgteHMtZmlyc3R7b3JkZXI6LTF9LmNsci1mbGV4LXhzLWxhc3R7b3JkZXI6MX0uY2xyLWZsZXgteHMtdW5vcmRlcmVke29yZGVyOjB9LmNsci1mbGV4''@;'; put 'put ''LWl0ZW1zLXhzLXRvcHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5jbHItZmxleC1pdGVtcy14cy1taWRkbGV7YWxpZ24taXRlbXM6Y2VudGVyfS5jbHItZmxleC1pdGVtcy14cy1ib3R0b217YWxpZ24taXRlbXM6ZmxleC1lbmR9LmNsci1mbGV4LXhzLXRvcHthbGlnbi1zZWxmOmZsZXgtc3Rh''@;'; put 'put ''cnR9LmNsci1mbGV4LXhzLW1pZGRsZXthbGlnbi1zZWxmOmNlbnRlcn0uY2xyLWZsZXgteHMtYm90dG9te2FsaWduLXNlbGY6ZmxleC1lbmR9LmNsci1mbGV4LWl0ZW1zLXhzLWxlZnR7anVzdGlmeS1jb250ZW50OmZsZXgtc3RhcnR9LmNsci1mbGV4LWl0ZW1zLXhzLWNlbnRlcntqdXN0aWZ5''@;'; put 'put ''LWNvbnRlbnQ6Y2VudGVyfS5jbHItZmxleC1pdGVtcy14cy1yaWdodHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmNsci1mbGV4LWl0ZW1zLXhzLWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5jbHItZmxleC1pdGVtcy14cy1iZXR3ZWVue2p1c3RpZnktY29udGVudDpz''@;'; put 'put ''cGFjZS1iZXR3ZWVufUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXsuY2xyLWZsZXgtc20tZmlyc3R7b3JkZXI6LTF9LmNsci1mbGV4LXNtLWxhc3R7b3JkZXI6MX0uY2xyLWZsZXgtc20tdW5vcmRlcmVke29yZGVyOjB9fUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXsuY2xyLWZsZXgtaXRlbXMt''@;'; put 'put ''c20tdG9we2FsaWduLWl0ZW1zOmZsZXgtc3RhcnR9LmNsci1mbGV4LWl0ZW1zLXNtLW1pZGRsZXthbGlnbi1pdGVtczpjZW50ZXJ9LmNsci1mbGV4LWl0ZW1zLXNtLWJvdHRvbXthbGlnbi1pdGVtczpmbGV4LWVuZH19QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5jbHItZmxleC1zbS10b3B7''@;'; put 'put ''YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fS5jbHItZmxleC1zbS1taWRkbGV7YWxpZ24tc2VsZjpjZW50ZXJ9LmNsci1mbGV4LXNtLWJvdHRvbXthbGlnbi1zZWxmOmZsZXgtZW5kfX1AbWVkaWEgKG1pbi13aWR0aDo1NzZweCl7LmNsci1mbGV4LWl0ZW1zLXNtLWxlZnR7anVzdGlmeS1jb250ZW50''@;'; put 'put ''OmZsZXgtc3RhcnR9LmNsci1mbGV4LWl0ZW1zLXNtLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5jbHItZmxleC1pdGVtcy1zbS1yaWdodHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmNsci1mbGV4LWl0ZW1zLXNtLWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5k''@;'; put 'put ''fS5jbHItZmxleC1pdGVtcy1zbS1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7LmNsci1mbGV4LW1kLWZpcnN0e29yZGVyOi0xfS5jbHItZmxleC1tZC1sYXN0e29yZGVyOjF9LmNsci1mbGV4LW1kLXVub3JkZXJlZHtvcmRl''@;'; put 'put ''cjowfX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7LmNsci1mbGV4LWl0ZW1zLW1kLXRvcHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5jbHItZmxleC1pdGVtcy1tZC1taWRkbGV7YWxpZ24taXRlbXM6Y2VudGVyfS5jbHItZmxleC1pdGVtcy1tZC1ib3R0b217YWxpZ24taXRlbXM6ZmxleC1l''@;'; put 'put ''bmR9fUBtZWRpYSAobWluLXdpZHRoOjc2OHB4KXsuY2xyLWZsZXgtbWQtdG9we2FsaWduLXNlbGY6ZmxleC1zdGFydH0uY2xyLWZsZXgtbWQtbWlkZGxle2FsaWduLXNlbGY6Y2VudGVyfS5jbHItZmxleC1tZC1ib3R0b217YWxpZ24tc2VsZjpmbGV4LWVuZH19QG1lZGlhIChtaW4td2lkdGg6''@;'; put 'put ''NzY4cHgpey5jbHItZmxleC1pdGVtcy1tZC1sZWZ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5jbHItZmxleC1pdGVtcy1tZC1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uY2xyLWZsZXgtaXRlbXMtbWQtcmlnaHR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5jbHItZmxl''@;'; put 'put ''eC1pdGVtcy1tZC1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0uY2xyLWZsZXgtaXRlbXMtbWQtYmV0d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpey5jbHItZmxleC1sZy1maXJzdHtvcmRlcjotMX0uY2xyLWZs''@;'; put 'put ''ZXgtbGctbGFzdHtvcmRlcjoxfS5jbHItZmxleC1sZy11bm9yZGVyZWR7b3JkZXI6MH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpey5jbHItZmxleC1pdGVtcy1sZy10b3B7YWxpZ24taXRlbXM6ZmxleC1zdGFydH0uY2xyLWZsZXgtaXRlbXMtbGctbWlkZGxle2FsaWduLWl0ZW1zOmNlbnRl''@;'; put 'put ''cn0uY2xyLWZsZXgtaXRlbXMtbGctYm90dG9te2FsaWduLWl0ZW1zOmZsZXgtZW5kfX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7LmNsci1mbGV4LWxnLXRvcHthbGlnbi1zZWxmOmZsZXgtc3RhcnR9LmNsci1mbGV4LWxnLW1pZGRsZXthbGlnbi1zZWxmOmNlbnRlcn0uY2xyLWZsZXgtbGct''@;'; put 'put ''Ym90dG9te2FsaWduLXNlbGY6ZmxleC1lbmR9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXsuY2xyLWZsZXgtaXRlbXMtbGctbGVmdHtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1zdGFydH0uY2xyLWZsZXgtaXRlbXMtbGctY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmNsci1mbGV4LWl0''@;'; put 'put ''ZW1zLWxnLXJpZ2h0e2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uY2xyLWZsZXgtaXRlbXMtbGctYXJvdW5ke2p1c3RpZnktY29udGVudDpzcGFjZS1hcm91bmR9LmNsci1mbGV4LWl0ZW1zLWxnLWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59fUBtZWRpYSAobWluLXdp''@;'; put 'put ''ZHRoOjEyMDBweCl7LmNsci1mbGV4LXhsLWZpcnN0e29yZGVyOi0xfS5jbHItZmxleC14bC1sYXN0e29yZGVyOjF9LmNsci1mbGV4LXhsLXVub3JkZXJlZHtvcmRlcjowfX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey5jbHItZmxleC1pdGVtcy14bC10b3B7YWxpZ24taXRlbXM6ZmxleC1z''@;'; put 'put ''dGFydH0uY2xyLWZsZXgtaXRlbXMteGwtbWlkZGxle2FsaWduLWl0ZW1zOmNlbnRlcn0uY2xyLWZsZXgtaXRlbXMteGwtYm90dG9te2FsaWduLWl0ZW1zOmZsZXgtZW5kfX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey5jbHItZmxleC14bC10b3B7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fS5j''@;'; put 'put ''bHItZmxleC14bC1taWRkbGV7YWxpZ24tc2VsZjpjZW50ZXJ9LmNsci1mbGV4LXhsLWJvdHRvbXthbGlnbi1zZWxmOmZsZXgtZW5kfX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey5jbHItZmxleC1pdGVtcy14bC1sZWZ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5jbHItZmxleC1p''@;'; put 'put ''dGVtcy14bC1jZW50ZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uY2xyLWZsZXgtaXRlbXMteGwtcmlnaHR7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5jbHItZmxleC1pdGVtcy14bC1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0uY2xyLWZsZXgtaXRlbXMteGwtYmV0''@;'; put 'put ''d2VlbntqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2Vlbn19LmNsci1mbG9hdC14cy1sZWZ0e2Zsb2F0OmxlZnQhaW1wb3J0YW50fS5jbHItZmxvYXQteHMtcmlnaHR7ZmxvYXQ6cmlnaHQhaW1wb3J0YW50fS5jbHItZmxvYXQteHMtbm9uZXtmbG9hdDpub25lIWltcG9ydGFudH1AbWVkaWEg''@;'; put 'put ''KG1pbi13aWR0aDo1NzZweCl7LmNsci1mbG9hdC1zbS1sZWZ0e2Zsb2F0OmxlZnQhaW1wb3J0YW50fS5jbHItZmxvYXQtc20tcmlnaHR7ZmxvYXQ6cmlnaHQhaW1wb3J0YW50fS5jbHItZmxvYXQtc20tbm9uZXtmbG9hdDpub25lIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6NzY4cHgp''@;'; put 'put ''ey5jbHItZmxvYXQtbWQtbGVmdHtmbG9hdDpsZWZ0IWltcG9ydGFudH0uY2xyLWZsb2F0LW1kLXJpZ2h0e2Zsb2F0OnJpZ2h0IWltcG9ydGFudH0uY2xyLWZsb2F0LW1kLW5vbmV7ZmxvYXQ6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjk5MnB4KXsuY2xyLWZsb2F0LWxnLWxl''@;'; put 'put ''ZnR7ZmxvYXQ6bGVmdCFpbXBvcnRhbnR9LmNsci1mbG9hdC1sZy1yaWdodHtmbG9hdDpyaWdodCFpbXBvcnRhbnR9LmNsci1mbG9hdC1sZy1ub25le2Zsb2F0Om5vbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey5jbHItZmxvYXQteGwtbGVmdHtmbG9hdDpsZWZ0IWlt''@;'; put 'put ''cG9ydGFudH0uY2xyLWZsb2F0LXhsLXJpZ2h0e2Zsb2F0OnJpZ2h0IWltcG9ydGFudH0uY2xyLWZsb2F0LXhsLW5vbmV7ZmxvYXQ6bm9uZSFpbXBvcnRhbnR9fS5jbHItaW52aXNpYmxle3Zpc2liaWxpdHk6aGlkZGVuIWltcG9ydGFudH0uY2xyLWhpZGRlbi14cy11cHtkaXNwbGF5Om5vbmUh''@;'; put 'put ''aW1wb3J0YW50fUBtZWRpYSAobWF4LXdpZHRoOjU3NS45OHB4KXsuY2xyLWhpZGRlbi14cy1kb3due2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXsuY2xyLWhpZGRlbi1zbS11cHtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1heC13aWR0''@;'; put 'put ''aDo3NjcuOThweCl7LmNsci1oaWRkZW4tc20tZG93bntkaXNwbGF5Om5vbmUhaW1wb3J0YW50fX1AbWVkaWEgKG1pbi13aWR0aDo3NjhweCl7LmNsci1oaWRkZW4tbWQtdXB7ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhIChtYXgtd2lkdGg6OTkxLjk4cHgpey5jbHItaGlkZGVuLW1k''@;'; put 'put ''LWRvd257ZGlzcGxheTpub25lIWltcG9ydGFudH19QG1lZGlhIChtaW4td2lkdGg6OTkycHgpey5jbHItaGlkZGVuLWxnLXVwe2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fUBtZWRpYSAobWF4LXdpZHRoOjExOTkuOThweCl7LmNsci1oaWRkZW4tbGctZG93bntkaXNwbGF5Om5vbmUhaW1wb3J0''@;'; put 'put ''YW50fX1AbWVkaWEgKG1pbi13aWR0aDoxMjAwcHgpey5jbHItaGlkZGVuLXhsLXVwe2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9fS5jbHItaGlkZGVuLXhsLWRvd24sLmNsci12aXNpYmxlLXByaW50LWJsb2Nre2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9QG1lZGlhIHByaW50ey5jbHItdmlzaWJs''@;'; put 'put ''ZS1wcmludC1ibG9ja3tkaXNwbGF5OmJsb2NrIWltcG9ydGFudH19LmNsci12aXNpYmxlLXByaW50LWlubGluZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fUBtZWRpYSBwcmludHsuY2xyLXZpc2libGUtcHJpbnQtaW5saW5le2Rpc3BsYXk6aW5saW5lIWltcG9ydGFudH19LmNsci12aXNpYmxl''@;'; put 'put ''LXByaW50LWlubGluZS1ibG9ja3tkaXNwbGF5Om5vbmUhaW1wb3J0YW50fUBtZWRpYSBwcmludHsuY2xyLXZpc2libGUtcHJpbnQtaW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudH19QG1lZGlhIHByaW50ey5jbHItaGlkZGVuLXByaW50e2Rpc3BsYXk6bm9uZSFp''@;'; put 'put ''bXBvcnRhbnR9fS5jbHItY29udGFpbmVye3dpZHRoOjEwMCU7cGFkZGluZy1yaWdodDp2YXIoLS1jbHItZ3JpZC1jb250YWluZXItcGFkZGluZyk7cGFkZGluZy1sZWZ0OnZhcigtLWNsci1ncmlkLWNvbnRhaW5lci1wYWRkaW5nKTttYXJnaW4tcmlnaHQ6YXV0bzttYXJnaW4tbGVmdDphdXRv''@;'; put 'put ''fS5jbHItcm93e2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDttYXJnaW4tcmlnaHQ6dmFyKC0tY2xyLWdyaWQtcm93LW1hcmdpbik7bWFyZ2luLWxlZnQ6dmFyKC0tY2xyLWdyaWQtcm93LW1hcmdpbil9LmNsci1uby1ndXR0ZXJze21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OjB9LmNs''@;'; put 'put ''ci1uby1ndXR0ZXJzPi5jbHItY29sLC5jbHItbm8tZ3V0dGVycz5bY2xhc3MqPWNsci1jb2wtXXtwYWRkaW5nLXJpZ2h0OjA7cGFkZGluZy1sZWZ0OjB9LmNsci1jb2wteGwsLmNsci1jb2wteGwtYXV0bywuY2xyLWNvbC14bC0xMiwuY2xyLWNvbC14bC0xMSwuY2xyLWNvbC14bC0xMCwuY2xy''@;'; put 'put ''LWNvbC14bC05LC5jbHItY29sLXhsLTgsLmNsci1jb2wteGwtNywuY2xyLWNvbC14bC02LC5jbHItY29sLXhsLTUsLmNsci1jb2wteGwtNCwuY2xyLWNvbC14bC0zLC5jbHItY29sLXhsLTIsLmNsci1jb2wteGwtMSwuY2xyLWNvbC1sZywuY2xyLWNvbC1sZy1hdXRvLC5jbHItY29sLWxnLTEy''@;'; put 'put ''LC5jbHItY29sLWxnLTExLC5jbHItY29sLWxnLTEwLC5jbHItY29sLWxnLTksLmNsci1jb2wtbGctOCwuY2xyLWNvbC1sZy03LC5jbHItY29sLWxnLTYsLmNsci1jb2wtbGctNSwuY2xyLWNvbC1sZy00LC5jbHItY29sLWxnLTMsLmNsci1jb2wtbGctMiwuY2xyLWNvbC1sZy0xLC5jbHItY29s''@;'; put 'put ''LW1kLC5jbHItY29sLW1kLWF1dG8sLmNsci1jb2wtbWQtMTIsLmNsci1jb2wtbWQtMTEsLmNsci1jb2wtbWQtMTAsLmNsci1jb2wtbWQtOSwuY2xyLWNvbC1tZC04LC5jbHItY29sLW1kLTcsLmNsci1jb2wtbWQtNiwuY2xyLWNvbC1tZC01LC5jbHItY29sLW1kLTQsLmNsci1jb2wtbWQtMywu''@;'; put 'put ''Y2xyLWNvbC1tZC0yLC5jbHItY29sLW1kLTEsLmNsci1jb2wtc20sLmNsci1jb2wtc20tYXV0bywuY2xyLWNvbC1zbS0xMiwuY2xyLWNvbC1zbS0xMSwuY2xyLWNvbC1zbS0xMCwuY2xyLWNvbC1zbS05LC5jbHItY29sLXNtLTgsLmNsci1jb2wtc20tNywuY2xyLWNvbC1zbS02LC5jbHItY29s''@;'; put 'put ''LXNtLTUsLmNsci1jb2wtc20tNCwuY2xyLWNvbC1zbS0zLC5jbHItY29sLXNtLTIsLmNsci1jb2wtc20tMSwuY2xyLWNvbCwuY2xyLWNvbC1hdXRvLC5jbHItY29sLTEyLC5jbHItY29sLTExLC5jbHItY29sLTEwLC5jbHItY29sLTksLmNsci1jb2wtOCwuY2xyLWNvbC03LC5jbHItY29sLTYs''@;'; put 'put ''LmNsci1jb2wtNSwuY2xyLWNvbC00LC5jbHItY29sLTMsLmNsci1jb2wtMiwuY2xyLWNvbC0xe3dpZHRoOjEwMCU7bWluLWhlaWdodDouMDVyZW07cGFkZGluZy1yaWdodDp2YXIoLS1jbHItZ3JpZC1jb2x1bW4tcGFkZGluZyk7cGFkZGluZy1sZWZ0OnZhcigtLWNsci1ncmlkLWNvbHVtbi1w''@;'; put 'put ''YWRkaW5nKX0uY2xyLWNvbHtmbGV4LWJhc2lzOjA7ZmxleC1ncm93OjE7bWF4LXdpZHRoOjEwMCV9LmNsci1jb2wtYXV0b3tmbGV4OjAgMCBhdXRvO3dpZHRoOmF1dG87bWF4LXdpZHRoOm5vbmV9LmNsci1jb2wtMXtmbGV4OjAgMCA4LjMzMzMzMzMzMzMlO21heC13aWR0aDo4LjMzMzMzMzMz''@;'; put 'put ''MzMlfS5jbHItY29sLTJ7ZmxleDowIDAgMTYuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjE2LjY2NjY2NjY2NjclfS5jbHItY29sLTN7ZmxleDowIDAgMjUlO21heC13aWR0aDoyNSV9LmNsci1jb2wtNHtmbGV4OjAgMCAzMy4zMzMzMzMzMzMzJTttYXgtd2lkdGg6MzMuMzMzMzMzMzMzMyV9LmNs''@;'; put 'put ''ci1jb2wtNXtmbGV4OjAgMCA0MS42NjY2NjY2NjY3JTttYXgtd2lkdGg6NDEuNjY2NjY2NjY2NyV9LmNsci1jb2wtNntmbGV4OjAgMCA1MCU7bWF4LXdpZHRoOjUwJX0uY2xyLWNvbC03e2ZsZXg6MCAwIDU4LjMzMzMzMzMzMzMlO21heC13aWR0aDo1OC4zMzMzMzMzMzMzJX0uY2xyLWNvbC04''@;'; put 'put ''e2ZsZXg6MCAwIDY2LjY2NjY2NjY2NjclO21heC13aWR0aDo2Ni42NjY2NjY2NjY3JX0uY2xyLWNvbC05e2ZsZXg6MCAwIDc1JTttYXgtd2lkdGg6NzUlfS5jbHItY29sLTEwe2ZsZXg6MCAwIDgzLjMzMzMzMzMzMzMlO21heC13aWR0aDo4My4zMzMzMzMzMzMzJX0uY2xyLWNvbC0xMXtmbGV4''@;'; put 'put ''OjAgMCA5MS42NjY2NjY2NjY3JTttYXgtd2lkdGg6OTEuNjY2NjY2NjY2NyV9LmNsci1jb2wtMTJ7ZmxleDowIDAgMTAwJTttYXgtd2lkdGg6MTAwJX0uY2xyLW9yZGVyLWZpcnN0e29yZGVyOi0xfS5jbHItb3JkZXItbGFzdHtvcmRlcjoxM30uY2xyLW9yZGVyLTB7b3JkZXI6MH0uY2xyLW9y''@;'; put 'put ''ZGVyLTF7b3JkZXI6MX0uY2xyLW9yZGVyLTJ7b3JkZXI6Mn0uY2xyLW9yZGVyLTN7b3JkZXI6M30uY2xyLW9yZGVyLTR7b3JkZXI6NH0uY2xyLW9yZGVyLTV7b3JkZXI6NX0uY2xyLW9yZGVyLTZ7b3JkZXI6Nn0uY2xyLW9yZGVyLTd7b3JkZXI6N30uY2xyLW9yZGVyLTh7b3JkZXI6OH0uY2xy''@;'; put 'put ''LW9yZGVyLTl7b3JkZXI6OX0uY2xyLW9yZGVyLTEwe29yZGVyOjEwfS5jbHItb3JkZXItMTF7b3JkZXI6MTF9LmNsci1vcmRlci0xMntvcmRlcjoxMn0uY2xyLW9mZnNldC0xe21hcmdpbi1sZWZ0OjguMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtMnttYXJnaW4tbGVmdDoxNi42NjY2NjY2NjY3''@;'; put 'put ''JX0uY2xyLW9mZnNldC0ze21hcmdpbi1sZWZ0OjI1JX0uY2xyLW9mZnNldC00e21hcmdpbi1sZWZ0OjMzLjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LTV7bWFyZ2luLWxlZnQ6NDEuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQtNnttYXJnaW4tbGVmdDo1MCV9LmNsci1vZmZzZXQtN3ttYXJnaW4t''@;'; put 'put ''bGVmdDo1OC4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC04e21hcmdpbi1sZWZ0OjY2LjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LTl7bWFyZ2luLWxlZnQ6NzUlfS5jbHItb2Zmc2V0LTEwe21hcmdpbi1sZWZ0OjgzLjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LTExe21hcmdpbi1sZWZ0OjkxLjY2''@;'; put 'put ''NjY2NjY2NjclfUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXsuY2xyLWNvbC1zbXtmbGV4LWJhc2lzOjA7ZmxleC1ncm93OjE7bWF4LXdpZHRoOjEwMCV9LmNsci1jb2wtc20tYXV0b3tmbGV4OjAgMCBhdXRvO3dpZHRoOmF1dG87bWF4LXdpZHRoOm5vbmV9LmNsci1jb2wtc20tMXtmbGV4OjAg''@;'; put 'put ''MCA4LjMzMzMzMzMzMzMlO21heC13aWR0aDo4LjMzMzMzMzMzMzMlfS5jbHItY29sLXNtLTJ7ZmxleDowIDAgMTYuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjE2LjY2NjY2NjY2NjclfS5jbHItY29sLXNtLTN7ZmxleDowIDAgMjUlO21heC13aWR0aDoyNSV9LmNsci1jb2wtc20tNHtmbGV4OjAg''@;'; put 'put ''MCAzMy4zMzMzMzMzMzMzJTttYXgtd2lkdGg6MzMuMzMzMzMzMzMzMyV9LmNsci1jb2wtc20tNXtmbGV4OjAgMCA0MS42NjY2NjY2NjY3JTttYXgtd2lkdGg6NDEuNjY2NjY2NjY2NyV9LmNsci1jb2wtc20tNntmbGV4OjAgMCA1MCU7bWF4LXdpZHRoOjUwJX0uY2xyLWNvbC1zbS03e2ZsZXg6''@;'; put 'put ''MCAwIDU4LjMzMzMzMzMzMzMlO21heC13aWR0aDo1OC4zMzMzMzMzMzMzJX0uY2xyLWNvbC1zbS04e2ZsZXg6MCAwIDY2LjY2NjY2NjY2NjclO21heC13aWR0aDo2Ni42NjY2NjY2NjY3JX0uY2xyLWNvbC1zbS05e2ZsZXg6MCAwIDc1JTttYXgtd2lkdGg6NzUlfS5jbHItY29sLXNtLTEwe2Zs''@;'; put 'put ''ZXg6MCAwIDgzLjMzMzMzMzMzMzMlO21heC13aWR0aDo4My4zMzMzMzMzMzMzJX0uY2xyLWNvbC1zbS0xMXtmbGV4OjAgMCA5MS42NjY2NjY2NjY3JTttYXgtd2lkdGg6OTEuNjY2NjY2NjY2NyV9LmNsci1jb2wtc20tMTJ7ZmxleDowIDAgMTAwJTttYXgtd2lkdGg6MTAwJX0uY2xyLW9yZGVy''@;'; put 'put ''LXNtLWZpcnN0e29yZGVyOi0xfS5jbHItb3JkZXItc20tbGFzdHtvcmRlcjoxM30uY2xyLW9yZGVyLXNtLTB7b3JkZXI6MH0uY2xyLW9yZGVyLXNtLTF7b3JkZXI6MX0uY2xyLW9yZGVyLXNtLTJ7b3JkZXI6Mn0uY2xyLW9yZGVyLXNtLTN7b3JkZXI6M30uY2xyLW9yZGVyLXNtLTR7b3JkZXI6''@;'; put 'put ''NH0uY2xyLW9yZGVyLXNtLTV7b3JkZXI6NX0uY2xyLW9yZGVyLXNtLTZ7b3JkZXI6Nn0uY2xyLW9yZGVyLXNtLTd7b3JkZXI6N30uY2xyLW9yZGVyLXNtLTh7b3JkZXI6OH0uY2xyLW9yZGVyLXNtLTl7b3JkZXI6OX0uY2xyLW9yZGVyLXNtLTEwe29yZGVyOjEwfS5jbHItb3JkZXItc20tMTF7''@;'; put 'put ''b3JkZXI6MTF9LmNsci1vcmRlci1zbS0xMntvcmRlcjoxMn0uY2xyLW9mZnNldC1zbS0we21hcmdpbi1sZWZ0OjB9LmNsci1vZmZzZXQtc20tMXttYXJnaW4tbGVmdDo4LjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LXNtLTJ7bWFyZ2luLWxlZnQ6MTYuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQt''@;'; put 'put ''c20tM3ttYXJnaW4tbGVmdDoyNSV9LmNsci1vZmZzZXQtc20tNHttYXJnaW4tbGVmdDozMy4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC1zbS01e21hcmdpbi1sZWZ0OjQxLjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LXNtLTZ7bWFyZ2luLWxlZnQ6NTAlfS5jbHItb2Zmc2V0LXNtLTd7bWFyZ2lu''@;'; put 'put ''LWxlZnQ6NTguMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtc20tOHttYXJnaW4tbGVmdDo2Ni42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC1zbS05e21hcmdpbi1sZWZ0Ojc1JX0uY2xyLW9mZnNldC1zbS0xMHttYXJnaW4tbGVmdDo4My4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC1zbS0xMXttYXJn''@;'; put 'put ''aW4tbGVmdDo5MS42NjY2NjY2NjY3JX19QG1lZGlhIChtaW4td2lkdGg6NzY4cHgpey5jbHItY29sLW1ke2ZsZXgtYmFzaXM6MDtmbGV4LWdyb3c6MTttYXgtd2lkdGg6MTAwJX0uY2xyLWNvbC1tZC1hdXRve2ZsZXg6MCAwIGF1dG87d2lkdGg6YXV0bzttYXgtd2lkdGg6bm9uZX0uY2xyLWNv''@;'; put 'put ''bC1tZC0xe2ZsZXg6MCAwIDguMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjguMzMzMzMzMzMzMyV9LmNsci1jb2wtbWQtMntmbGV4OjAgMCAxNi42NjY2NjY2NjY3JTttYXgtd2lkdGg6MTYuNjY2NjY2NjY2NyV9LmNsci1jb2wtbWQtM3tmbGV4OjAgMCAyNSU7bWF4LXdpZHRoOjI1JX0uY2xyLWNv''@;'; put 'put ''bC1tZC00e2ZsZXg6MCAwIDMzLjMzMzMzMzMzMzMlO21heC13aWR0aDozMy4zMzMzMzMzMzMzJX0uY2xyLWNvbC1tZC01e2ZsZXg6MCAwIDQxLjY2NjY2NjY2NjclO21heC13aWR0aDo0MS42NjY2NjY2NjY3JX0uY2xyLWNvbC1tZC02e2ZsZXg6MCAwIDUwJTttYXgtd2lkdGg6NTAlfS5jbHIt''@;'; put 'put ''Y29sLW1kLTd7ZmxleDowIDAgNTguMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjU4LjMzMzMzMzMzMzMlfS5jbHItY29sLW1kLTh7ZmxleDowIDAgNjYuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjY2LjY2NjY2NjY2NjclfS5jbHItY29sLW1kLTl7ZmxleDowIDAgNzUlO21heC13aWR0aDo3NSV9LmNs''@;'; put 'put ''ci1jb2wtbWQtMTB7ZmxleDowIDAgODMuMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjgzLjMzMzMzMzMzMzMlfS5jbHItY29sLW1kLTExe2ZsZXg6MCAwIDkxLjY2NjY2NjY2NjclO21heC13aWR0aDo5MS42NjY2NjY2NjY3JX0uY2xyLWNvbC1tZC0xMntmbGV4OjAgMCAxMDAlO21heC13aWR0aDox''@;'; put 'put ''MDAlfS5jbHItb3JkZXItbWQtZmlyc3R7b3JkZXI6LTF9LmNsci1vcmRlci1tZC1sYXN0e29yZGVyOjEzfS5jbHItb3JkZXItbWQtMHtvcmRlcjowfS5jbHItb3JkZXItbWQtMXtvcmRlcjoxfS5jbHItb3JkZXItbWQtMntvcmRlcjoyfS5jbHItb3JkZXItbWQtM3tvcmRlcjozfS5jbHItb3Jk''@;'; put 'put ''ZXItbWQtNHtvcmRlcjo0fS5jbHItb3JkZXItbWQtNXtvcmRlcjo1fS5jbHItb3JkZXItbWQtNntvcmRlcjo2fS5jbHItb3JkZXItbWQtN3tvcmRlcjo3fS5jbHItb3JkZXItbWQtOHtvcmRlcjo4fS5jbHItb3JkZXItbWQtOXtvcmRlcjo5fS5jbHItb3JkZXItbWQtMTB7b3JkZXI6MTB9LmNs''@;'; put 'put ''ci1vcmRlci1tZC0xMXtvcmRlcjoxMX0uY2xyLW9yZGVyLW1kLTEye29yZGVyOjEyfS5jbHItb2Zmc2V0LW1kLTB7bWFyZ2luLWxlZnQ6MH0uY2xyLW9mZnNldC1tZC0xe21hcmdpbi1sZWZ0OjguMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtbWQtMnttYXJnaW4tbGVmdDoxNi42NjY2NjY2NjY3''@;'; put 'put ''JX0uY2xyLW9mZnNldC1tZC0ze21hcmdpbi1sZWZ0OjI1JX0uY2xyLW9mZnNldC1tZC00e21hcmdpbi1sZWZ0OjMzLjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LW1kLTV7bWFyZ2luLWxlZnQ6NDEuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQtbWQtNnttYXJnaW4tbGVmdDo1MCV9LmNsci1vZmZz''@;'; put 'put ''ZXQtbWQtN3ttYXJnaW4tbGVmdDo1OC4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC1tZC04e21hcmdpbi1sZWZ0OjY2LjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LW1kLTl7bWFyZ2luLWxlZnQ6NzUlfS5jbHItb2Zmc2V0LW1kLTEwe21hcmdpbi1sZWZ0OjgzLjMzMzMzMzMzMzMlfS5jbHItb2Zm''@;'; put 'put ''c2V0LW1kLTExe21hcmdpbi1sZWZ0OjkxLjY2NjY2NjY2NjclfX1AbWVkaWEgKG1pbi13aWR0aDo5OTJweCl7LmNsci1jb2wtbGd7ZmxleC1iYXNpczowO2ZsZXgtZ3JvdzoxO21heC13aWR0aDoxMDAlfS5jbHItY29sLWxnLWF1dG97ZmxleDowIDAgYXV0bzt3aWR0aDphdXRvO21heC13aWR0''@;'; put 'put ''aDpub25lfS5jbHItY29sLWxnLTF7ZmxleDowIDAgOC4zMzMzMzMzMzMzJTttYXgtd2lkdGg6OC4zMzMzMzMzMzMzJX0uY2xyLWNvbC1sZy0ye2ZsZXg6MCAwIDE2LjY2NjY2NjY2NjclO21heC13aWR0aDoxNi42NjY2NjY2NjY3JX0uY2xyLWNvbC1sZy0ze2ZsZXg6MCAwIDI1JTttYXgtd2lk''@;'; put 'put ''dGg6MjUlfS5jbHItY29sLWxnLTR7ZmxleDowIDAgMzMuMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjMzLjMzMzMzMzMzMzMlfS5jbHItY29sLWxnLTV7ZmxleDowIDAgNDEuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjQxLjY2NjY2NjY2NjclfS5jbHItY29sLWxnLTZ7ZmxleDowIDAgNTAlO21heC13''@;'; put 'put ''aWR0aDo1MCV9LmNsci1jb2wtbGctN3tmbGV4OjAgMCA1OC4zMzMzMzMzMzMzJTttYXgtd2lkdGg6NTguMzMzMzMzMzMzMyV9LmNsci1jb2wtbGctOHtmbGV4OjAgMCA2Ni42NjY2NjY2NjY3JTttYXgtd2lkdGg6NjYuNjY2NjY2NjY2NyV9LmNsci1jb2wtbGctOXtmbGV4OjAgMCA3NSU7bWF4''@;'; put 'put ''LXdpZHRoOjc1JX0uY2xyLWNvbC1sZy0xMHtmbGV4OjAgMCA4My4zMzMzMzMzMzMzJTttYXgtd2lkdGg6ODMuMzMzMzMzMzMzMyV9LmNsci1jb2wtbGctMTF7ZmxleDowIDAgOTEuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjkxLjY2NjY2NjY2NjclfS5jbHItY29sLWxnLTEye2ZsZXg6MCAwIDEw''@;'; put 'put ''MCU7bWF4LXdpZHRoOjEwMCV9LmNsci1vcmRlci1sZy1maXJzdHtvcmRlcjotMX0uY2xyLW9yZGVyLWxnLWxhc3R7b3JkZXI6MTN9LmNsci1vcmRlci1sZy0we29yZGVyOjB9LmNsci1vcmRlci1sZy0xe29yZGVyOjF9LmNsci1vcmRlci1sZy0ye29yZGVyOjJ9LmNsci1vcmRlci1sZy0ze29y''@;'; put 'put ''ZGVyOjN9LmNsci1vcmRlci1sZy00e29yZGVyOjR9LmNsci1vcmRlci1sZy01e29yZGVyOjV9LmNsci1vcmRlci1sZy02e29yZGVyOjZ9LmNsci1vcmRlci1sZy03e29yZGVyOjd9LmNsci1vcmRlci1sZy04e29yZGVyOjh9LmNsci1vcmRlci1sZy05e29yZGVyOjl9LmNsci1vcmRlci1sZy0x''@;'; put 'put ''MHtvcmRlcjoxMH0uY2xyLW9yZGVyLWxnLTExe29yZGVyOjExfS5jbHItb3JkZXItbGctMTJ7b3JkZXI6MTJ9LmNsci1vZmZzZXQtbGctMHttYXJnaW4tbGVmdDowfS5jbHItb2Zmc2V0LWxnLTF7bWFyZ2luLWxlZnQ6OC4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC1sZy0ye21hcmdpbi1sZWZ0''@;'; put 'put ''OjE2LjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LWxnLTN7bWFyZ2luLWxlZnQ6MjUlfS5jbHItb2Zmc2V0LWxnLTR7bWFyZ2luLWxlZnQ6MzMuMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQtbGctNXttYXJnaW4tbGVmdDo0MS42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC1sZy02e21hcmdpbi1sZWZ0''@;'; put 'put ''OjUwJX0uY2xyLW9mZnNldC1sZy03e21hcmdpbi1sZWZ0OjU4LjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LWxnLTh7bWFyZ2luLWxlZnQ6NjYuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQtbGctOXttYXJnaW4tbGVmdDo3NSV9LmNsci1vZmZzZXQtbGctMTB7bWFyZ2luLWxlZnQ6ODMuMzMzMzMz''@;'; put 'put ''MzMzMyV9LmNsci1vZmZzZXQtbGctMTF7bWFyZ2luLWxlZnQ6OTEuNjY2NjY2NjY2NyV9fUBtZWRpYSAobWluLXdpZHRoOjEyMDBweCl7LmNsci1jb2wteGx7ZmxleC1iYXNpczowO2ZsZXgtZ3JvdzoxO21heC13aWR0aDoxMDAlfS5jbHItY29sLXhsLWF1dG97ZmxleDowIDAgYXV0bzt3aWR0''@;'; put 'put ''aDphdXRvO21heC13aWR0aDpub25lfS5jbHItY29sLXhsLTF7ZmxleDowIDAgOC4zMzMzMzMzMzMzJTttYXgtd2lkdGg6OC4zMzMzMzMzMzMzJX0uY2xyLWNvbC14bC0ye2ZsZXg6MCAwIDE2LjY2NjY2NjY2NjclO21heC13aWR0aDoxNi42NjY2NjY2NjY3JX0uY2xyLWNvbC14bC0ze2ZsZXg6''@;'; put 'put ''MCAwIDI1JTttYXgtd2lkdGg6MjUlfS5jbHItY29sLXhsLTR7ZmxleDowIDAgMzMuMzMzMzMzMzMzMyU7bWF4LXdpZHRoOjMzLjMzMzMzMzMzMzMlfS5jbHItY29sLXhsLTV7ZmxleDowIDAgNDEuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjQxLjY2NjY2NjY2NjclfS5jbHItY29sLXhsLTZ7Zmxl''@;'; put 'put ''eDowIDAgNTAlO21heC13aWR0aDo1MCV9LmNsci1jb2wteGwtN3tmbGV4OjAgMCA1OC4zMzMzMzMzMzMzJTttYXgtd2lkdGg6NTguMzMzMzMzMzMzMyV9LmNsci1jb2wteGwtOHtmbGV4OjAgMCA2Ni42NjY2NjY2NjY3JTttYXgtd2lkdGg6NjYuNjY2NjY2NjY2NyV9LmNsci1jb2wteGwtOXtm''@;'; put 'put ''bGV4OjAgMCA3NSU7bWF4LXdpZHRoOjc1JX0uY2xyLWNvbC14bC0xMHtmbGV4OjAgMCA4My4zMzMzMzMzMzMzJTttYXgtd2lkdGg6ODMuMzMzMzMzMzMzMyV9LmNsci1jb2wteGwtMTF7ZmxleDowIDAgOTEuNjY2NjY2NjY2NyU7bWF4LXdpZHRoOjkxLjY2NjY2NjY2NjclfS5jbHItY29sLXhs''@;'; put 'put ''LTEye2ZsZXg6MCAwIDEwMCU7bWF4LXdpZHRoOjEwMCV9LmNsci1vcmRlci14bC1maXJzdHtvcmRlcjotMX0uY2xyLW9yZGVyLXhsLWxhc3R7b3JkZXI6MTN9LmNsci1vcmRlci14bC0we29yZGVyOjB9LmNsci1vcmRlci14bC0xe29yZGVyOjF9LmNsci1vcmRlci14bC0ye29yZGVyOjJ9LmNs''@;'; put 'put ''ci1vcmRlci14bC0ze29yZGVyOjN9LmNsci1vcmRlci14bC00e29yZGVyOjR9LmNsci1vcmRlci14bC01e29yZGVyOjV9LmNsci1vcmRlci14bC02e29yZGVyOjZ9LmNsci1vcmRlci14bC03e29yZGVyOjd9LmNsci1vcmRlci14bC04e29yZGVyOjh9LmNsci1vcmRlci14bC05e29yZGVyOjl9''@;'; put 'put ''LmNsci1vcmRlci14bC0xMHtvcmRlcjoxMH0uY2xyLW9yZGVyLXhsLTExe29yZGVyOjExfS5jbHItb3JkZXIteGwtMTJ7b3JkZXI6MTJ9LmNsci1vZmZzZXQteGwtMHttYXJnaW4tbGVmdDowfS5jbHItb2Zmc2V0LXhsLTF7bWFyZ2luLWxlZnQ6OC4zMzMzMzMzMzMzJX0uY2xyLW9mZnNldC14''@;'; put 'put ''bC0ye21hcmdpbi1sZWZ0OjE2LjY2NjY2NjY2NjclfS5jbHItb2Zmc2V0LXhsLTN7bWFyZ2luLWxlZnQ6MjUlfS5jbHItb2Zmc2V0LXhsLTR7bWFyZ2luLWxlZnQ6MzMuMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQteGwtNXttYXJnaW4tbGVmdDo0MS42NjY2NjY2NjY3JX0uY2xyLW9mZnNldC14''@;'; put 'put ''bC02e21hcmdpbi1sZWZ0OjUwJX0uY2xyLW9mZnNldC14bC03e21hcmdpbi1sZWZ0OjU4LjMzMzMzMzMzMzMlfS5jbHItb2Zmc2V0LXhsLTh7bWFyZ2luLWxlZnQ6NjYuNjY2NjY2NjY2NyV9LmNsci1vZmZzZXQteGwtOXttYXJnaW4tbGVmdDo3NSV9LmNsci1vZmZzZXQteGwtMTB7bWFyZ2lu''@;'; put 'put ''LWxlZnQ6ODMuMzMzMzMzMzMzMyV9LmNsci1vZmZzZXQteGwtMTF7bWFyZ2luLWxlZnQ6OTEuNjY2NjY2NjY2NyV9fS5jbHItYnJlYWstcm93e3dpZHRoOjEwMCV9Kiw6YmVmb3JlLDphZnRlcntib3gtc2l6aW5nOmJvcmRlci1ib3h9dWwubGlzdC11bnN0eWxlZDpub3QoW2Nkcy1saXN0XSl7''@;'; put 'put ''cGFkZGluZy1sZWZ0OjA7bWFyZ2luLWxlZnQ6MDtsaXN0LXN0eWxlLXBvc2l0aW9uOm91dHNpZGV9dWwubGlzdC11bnN0eWxlZDpub3QoW2Nkcy1saXN0XSkgbGk6Om1hcmtlcntjb2xvcjp0cmFuc3BhcmVudH1saXtjb2xvcjp2YXIoLS1jbHItbGlzdC1pdGVtLWNvbG9yKTtmb250LXNpemU6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQpO2xldHRlci1z''@;'; put 'put ''cGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpfXVsOm5vdChbY2RzLWxpc3RdKSxvbDpub3QoW2Nkcy1saXN0XSl7bGlzdC1zdHlsZS1wb3NpdGlvbjppbnNpZGU7bWFyZ2luLWxlZnQ6MDttYXJnaW4tdG9wOjA7bWFyZ2luLWJvdHRvbTowO3Bh''@;'; put 'put ''ZGRpbmctbGVmdDowfXVsLmxpc3Q6bm90KFtjZHMtbGlzdF0pLG9sLmxpc3Q6bm90KFtjZHMtbGlzdF0pe2xpc3Qtc3R5bGUtcG9zaXRpb246b3V0c2lkZTttYXJnaW4tbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfXVsLmxpc3Q6bm90KFtjZHMtbGlzdF0pLmNvbXBhY3Q+bGksb2wu''@;'; put 'put ''bGlzdDpub3QoW2Nkcy1saXN0XSkuY29tcGFjdD5saXttYXJnaW4tYm90dG9tOjB9dWw6bm90KC5saXN0LXVuc3R5bGVkKTpub3QoW2Nkcy1saXN0XSk+bGk+dWwubGlzdC11bnN0eWxlZCxvbDpub3QoW2Nkcy1saXN0XSk+bGk+dWwubGlzdC11bnN0eWxlZHttYXJnaW4tbGVmdDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTYpfWxpPnVsOm5vdChbY2RzLWxpc3RdKXttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX11bC5saXN0LWdyb3VwOm5vdChbY2RzLWxpc3RdKXttYXJnaW4tdG9wOjB9dWw6bm90KFtjZHMtbGlzdF0pLmxpc3Qtc3BhY2Vy''@;'; put 'put ''LG9sOm5vdChbY2RzLWxpc3RdKS5saXN0LXNwYWNlcnttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9cHJle21hcmdpbjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpIDB9cHJle2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlk''@;'; put 'put ''IHZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKX1wcmUgY29kZXt3aGl0ZS1zcGFjZTpwcmV9Y29kZS5jbHItY29kZXtjb2xvcjp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''dXRpbGl0eS1yZWQpO3BhZGRpbmc6MDtiYWNrZ3JvdW5kOjAgMH1oMTpub3QoW2Nkcy10ZXh0XSl7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21hcmdpbi1ib3R0b206MDtmb250LWZhbWlseTp2YXIoLS1jbHItaDEtZm9udC1mYW1pbHkpO2NvbG9yOnZhcigtLWNsci1o''@;'; put 'put ''MS1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1oMS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1oMS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLWgxLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItaDEtbGV0dGVyLXNwYWNpbmcpfWgy''@;'; put 'put ''Om5vdChbY2RzLXRleHRdKXttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1oMi1mb250LWZhbWlseSk7Y29sb3I6dmFyKC0tY2xyLWgyLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2xyLWgyLWZvbnQtc2l6''@;'; put 'put ''ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWgyLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jbHItaDItbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNsci1oMi1sZXR0ZXItc3BhY2luZyl9aDM6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWgzLWZvbnQtZmFtaWx5KTtjb2xvcjp2YXIoLS1jbHItaDMtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItaDMtZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItaDMtZm9udC13ZWlnaHQp''@;'; put 'put ''O2xpbmUtaGVpZ2h0OnZhcigtLWNsci1oMy1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLWgzLWxldHRlci1zcGFjaW5nKX1oNDpub3QoW2Nkcy10ZXh0XSl7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21hcmdpbi1ib3R0b206MDtmb250LWZhbWls''@;'; put 'put ''eTp2YXIoLS1jbHItaDQtZm9udC1mYW1pbHkpO2NvbG9yOnZhcigtLWNsci1oNC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNsci1oNC1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1oNC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLWg0LWxpbmUtaGVpZ2h0KTts''@;'; put 'put ''ZXR0ZXItc3BhY2luZzp2YXIoLS1jbHItaDQtbGV0dGVyLXNwYWNpbmcpfWg1Om5vdChbY2RzLXRleHRdKXttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1oNS1mb250LWZhbWlseSk7Y29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWg1LWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2xyLWg1LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWg1LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jbHItaDUtbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNsci1oNS1sZXR0ZXItc3BhY2lu''@;'; put 'put ''Zyl9aDY6bm90KFtjZHMtdGV4dF0pe21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW4tYm90dG9tOjA7Zm9udC1mYW1pbHk6dmFyKC0tY2xyLWg2LWZvbnQtZmFtaWx5KTtjb2xvcjp2YXIoLS1jbHItaDYtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItaDYtZm9u''@;'; put 'put ''dC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItaDYtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci1oNi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLWg2LWxldHRlci1zcGFjaW5nKX1ib2R5Om5vdChbY2RzLXRleHRdKXttYXJnaW4tdG9wOjAhaW1w''@;'; put 'put ''b3J0YW50O21hcmdpbi1ib3R0b206MDtmb250LWZhbWlseTp2YXIoLS1jbHItZm9udCk7Y29sb3I6dmFyKC0tY2xyLXAxLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2xyLXAxLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXAxLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIo''@;'; put 'put ''LS1jbHItcDEtbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNsci1wMS1sZXR0ZXItc3BhY2luZyl9Ym9keSBwOm5vdChbY2RzLXRleHRdKXttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1m''@;'; put 'put ''b250KTtjb2xvcjp2YXIoLS1jbHItcDEtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItcDEtZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItcDEtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci1wMS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xy''@;'; put 'put ''LXAxLWxldHRlci1zcGFjaW5nKX1ib2R5IC5wMDpub3QoW2Nkcy10ZXh0XSksYm9keSBwLnAwOm5vdChbY2RzLXRleHRdKXttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1mb250KTtjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItcDAtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItcDAtZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItcDAtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci1wMC1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLXAwLWxldHRlci1zcGFjaW5n''@;'; put 'put ''KX1ib2R5IC5wMjpub3QoW2Nkcy10ZXh0XSksYm9keSBwLnAyOm5vdChbY2RzLXRleHRdKXttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1mb250KTtjb2xvcjp2YXIoLS1jbHItcDItY29sb3IpO2ZvbnQt''@;'; put 'put ''c2l6ZTp2YXIoLS1jbHItcDItZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItcDItZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci1wMi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLXAyLWxldHRlci1zcGFjaW5nKX1ib2R5IC5wMzpub3QoW2Nk''@;'; put 'put ''cy10ZXh0XSksYm9keSBwLnAzOm5vdChbY2RzLXRleHRdKXttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1mb250KTtjb2xvcjp2YXIoLS1jbHItcDMtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItcDMt''@;'; put 'put ''Zm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItcDMtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci1wMy1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLXAzLWxldHRlci1zcGFjaW5nKX1ib2R5IC5wNDpub3QoW2Nkcy10ZXh0XSksYm9keSBwLnA0''@;'; put 'put ''Om5vdChbY2RzLXRleHRdKXttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1mb250KTtjb2xvcjp2YXIoLS1jbHItcDQtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItcDQtZm9udC1zaXplKTtmb250LXdl''@;'; put 'put ''aWdodDp2YXIoLS1jbHItcDQtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci1wNC1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLXA0LWxldHRlci1zcGFjaW5nKX1ib2R5IC5wNTpub3QoW2Nkcy10ZXh0XSksYm9keSBwLnA1Om5vdChbY2RzLXRleHRdKXtt''@;'; put 'put ''YXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1mb250KTtjb2xvcjp2YXIoLS1jbHItcDUtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItcDUtZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItcDUt''@;'; put 'put ''Zm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci1wNS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLXA1LWxldHRlci1zcGFjaW5nKX1ib2R5IC5wNjpub3QoW2Nkcy10ZXh0XSksYm9keSBwLnA2Om5vdChbY2RzLXRleHRdKXttYXJnaW4tdG9wOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1mb250KTtjb2xvcjp2YXIoLS1jbHItcDYtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItcDYtZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItcDYtZm9udC13ZWlnaHQpO2xpbmUt''@;'; put 'put ''aGVpZ2h0OnZhcigtLWNsci1wNi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLXA2LWxldHRlci1zcGFjaW5nKX1ib2R5IC5wNzpub3QoW2Nkcy10ZXh0XSksYm9keSBwLnA3Om5vdChbY2RzLXRleHRdKXttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7''@;'; put 'put ''bWFyZ2luLWJvdHRvbTowO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1mb250KTtjb2xvcjp2YXIoLS1jbHItcDctY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItcDctZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItcDctZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci1w''@;'; put 'put ''Ny1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLXA3LWxldHRlci1zcGFjaW5nKX1ib2R5IC5wODpub3QoW2Nkcy10ZXh0XSksYm9keSBwLnA4Om5vdChbY2RzLXRleHRdKXttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLWJvdHRvbTowO2Zv''@;'; put 'put ''bnQtZmFtaWx5OnZhcigtLWNsci1mb250KTtjb2xvcjp2YXIoLS1jbHItcDgtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItcDgtZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItcDgtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci1wOC1saW5lLWhlaWdodCk7bGV0''@;'; put 'put ''dGVyLXNwYWNpbmc6dmFyKC0tY2xyLXA4LWxldHRlci1zcGFjaW5nKX0udGV4dC1saWdodHtmb250LXdlaWdodDp2YXIoLS1jbHItZm9udC13ZWlnaHQtbGlnaHQpfS50ZXh0LXJpZ2h0e3RleHQtYWxpZ246cmlnaHQhaW1wb3J0YW50fS50ZXh0LWNlbnRlcnt0ZXh0LWFsaWduOmNlbnRlciFp''@;'; put 'put ''bXBvcnRhbnR9LnRleHQtbGVmdHt0ZXh0LWFsaWduOmxlZnQhaW1wb3J0YW50fS50ZXh0LWp1c3RpZnl7dGV4dC1hbGlnbjpqdXN0aWZ5IWltcG9ydGFudH1odG1sOm5vdChbY2RzLXRleHRdKXtjb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00NTApO2ZvbnQtZmFtaWx5''@;'; put 'put ''OnZhcigtLWNsci1mb250KTtmb250LXNpemU6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpLzE2KjEwMCUpfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLWxpbmstYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWxpbmstY29sb3IpOy0tY2xyLWxpbmstY29sb3I6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvcik7LS1jbHItbGluay1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yLWhvdmVyKTstLWNsci1saW5rLXZpc2l0ZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xv''@;'; put 'put ''ci12aXNpdGVkKTstLWNsci1saW5rLXZpc2l0ZWQtY29sb3ItaG92ZXI6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvci12aXNpdGVkLWhvdmVyKX1odG1se2JveC1zaXppbmc6Ym9yZGVyLWJveH0qLDpiZWZvcmUsOmFmdGVye2JveC1zaXppbmc6aW5oZXJpdH1odG1sey1t''@;'; put 'put ''cy1vdmVyZmxvdy1zdHlsZTpzY3JvbGxiYXI7LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOnRyYW5zcGFyZW50fWltZ3t2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9W3JvbGU9YnV0dG9uXXtjdXJzb3I6cG9pbnRlcn1hLGFyZWEsYnV0dG9uLFtyb2xlPWJ1dHRvbl0saW5wdXQsbGFiZWwsc2Vs''@;'; put 'put ''ZWN0LHN1bW1hcnksdGV4dGFyZWF7dG91Y2gtYWN0aW9uOm1hbmlwdWxhdGlvbn1pbnB1dCxidXR0b24sc2VsZWN0LHRleHRhcmVhe2JvcmRlci1yYWRpdXM6MH1pbnB1dFt0eXBlPXJhZGlvXTpkaXNhYmxlZCxpbnB1dFt0eXBlPWNoZWNrYm94XTpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93''@;'; put 'put ''ZWR9aW5wdXRbdHlwZT1kYXRlXSxpbnB1dFt0eXBlPXRpbWVdLGlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdLGlucHV0W3R5cGU9bW9udGhdey13ZWJraXQtYXBwZWFyYW5jZTpsaXN0Ym94fXRleHRhcmVhe3Jlc2l6ZTp2ZXJ0aWNhbH1maWVsZHNldHttaW4td2lkdGg6MDtwYWRkaW5nOjA7''@;'; put 'put ''bWFyZ2luOjA7Ym9yZGVyOjB9bGVnZW5ke2Rpc3BsYXk6YmxvY2s7d2lkdGg6MTAwJTtwYWRkaW5nOjA7bGluZS1oZWlnaHQ6aW5oZXJpdH1pbnB1dFt0eXBlPXNlYXJjaF17LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9W2hpZGRlbl17ZGlzcGxheTpub25lIWltcG9ydGFudH1kbHttYXJnaW4t''@;'; put 'put ''Ym90dG9tOjA7bWFyZ2luLXRvcDoxcmVtfXRhYmxle2JvcmRlci1zcGFjaW5nOjB9LmNsci1zci1vbmx5e3Bvc2l0aW9uOmFic29sdXRlO2NsaXA6cmVjdCgxcHgsMXB4LDFweCwxcHgpO2NsaXAtcGF0aDppbnNldCg1MCUpO3BhZGRpbmc6MDtib3JkZXI6MDtoZWlnaHQ6MXB4O3dpZHRoOjFw''@;'; put 'put ''eDtvdmVyZmxvdzpoaWRkZW47d2hpdGUtc3BhY2U6bm93cmFwO3RvcDowO2xlZnQ6MH0uYWxlcnQtaWNvbiwuY2xyLWljb257ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtwYWRkaW5n''@;'; put 'put ''OjA7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTpjb250YWluO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0uYWxlcnQtaWNvbi5jbHItaWNvbi13YXJuaW5nLC5hbGVydC1pY29uLmljb24td2FybmluZywuY2xyLWljb24uY2xyLWljb24td2FybmluZywuY2xyLWlj''@;'; put 'put ''b24uaWNvbi13YXJuaW5ne2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnJTIwdmVyc2lvbiUzRCUyMjEuMSUyMiUyMHZpZXdCb3glM0QlMjI1JTIwNSUyMDI2JTIwMjYlMjIlMjBwcmVzZXJ2ZUFzcGVjdFJhdGlvJTNEJTIyeE1pZFlN''@;'; put 'put ''aWQlMjBtZWV0JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlMjB4bWxucyUzQXhsaW5rJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYxOTk5JTJGeGxpbmslMjIlM0UlM0NkZWZzJTNFJTNDc3R5bGUlMjB0eXBlJTNEJTIydGV4''@;'; put 'put ''dCUyRmNzcyUyMiUzRSUwQSUwOS5jbHItaS1vdXRsaW5lJTdCZmlsbC1ydWxlJTNBZXZlbm9kZCUzQmNsaXAtcnVsZSUzQWV2ZW5vZGQlM0JmaWxsJTNBJTIzNzQ3NDc0JTNCJTdEJTNDJTJGc3R5bGUlM0UlM0MlMkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTNDdGl0bGUlM0VleGNsYW1hdGlvbi10cmlhbmdsZS1saW5lJTNDJTJGdGl0bGUlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIwY2xhc3MlM0QlMjJjbHItaS1vdXRsaW5lJTIwY2xyLWktb3V0bGlu''@;'; put 'put ''ZS1wYXRoLTElMjIlMjBkJTNEJTIyTTE4JTJDMjEuMzJhMS4zJTJDMS4zJTJDMCUyQzAlMkMwJTJDMS4zLTEuM1YxNGExLjMlMkMxLjMlMkMwJTJDMSUyQzAtMi42JTJDMHY2QTEuMyUyQzEuMyUyQzAlMkMwJTJDMCUyQzE4JTJDMjEuMzJaJTIyJTNFJTNDJTJGcGF0aCUzRSUzQ2NpcmNsZSUy''@;'; put 'put ''MGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUtcGF0aC0yJTIyJTIwY3glM0QlMjIxNy45NSUyMiUyMGN5JTNEJTIyMjQuMjclMjIlMjByJTNEJTIyMS41JTIyJTNFJTNDJTJGY2lyY2xlJTNFJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1p''@;'; put 'put ''LW91dGxpbmUtcGF0aC0zJTIyJTIwZCUzRCUyMk0zMC4zMyUyQzI1LjU0JTJDMjAuNTklMkM3LjZhMyUyQzMlMkMwJTJDMCUyQzAtNS4yNyUyQzBMNS41NyUyQzI1LjU0QTMlMkMzJTJDMCUyQzAlMkMwJTJDOC4yMSUyQzMwSDI3LjY5YTMlMkMzJTJDMCUyQzAlMkMwJTJDMi42NC00LjQzWm0t''@;'; put 'put ''MS43OCUyQzEuOTRhMSUyQzElMkMwJTJDMCUyQzEtLjg2LjQ5SDguMjFhMSUyQzElMkMwJTJDMCUyQzEtLjg4LTEuNDhMMTcuMDclMkM4LjU1YTElMkMxJTJDMCUyQzAlMkMxJTJDMS43NiUyQzBsOS43NCUyQzE3Ljk0QTElMkMxJTJDMCUyQzAlMkMxJTJDMjguNTUlMkMyNy40OFolMjIlM0Ul''@;'; put 'put ''M0MlMkZwYXRoJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGc3ZnJTNFKX0uYWxlcnQtaWNvbi5jbHItaWNvbi13YXJuaW5nLXdoaXRlLC5jbHItaWNvbi5jbHItaWNvbi13YXJuaW5nLXdoaXRle2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdl''@;'; put 'put ''L3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUyMHZlcnNpb24lM0QlMjIxLjElMjIlMjB2aWV3Qm94JTNEJTIyNSUyMDUlMjAyNiUyMDI2JTIyJTIwcHJlc2VydmVBc3BlY3RSYXRpbyUzRCUyMnhNaWRZTWlkJTIwbWVldCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5v''@;'; put 'put ''cmclMkYyMDAwJTJGc3ZnJTIyJTIweG1sbnMlM0F4bGluayUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMTk5OSUyRnhsaW5rJTIyJTNFJTNDZGVmcyUzRSUzQ3N0eWxlJTIwdHlwZSUzRCUyMnRleHQlMkZjc3MlMjIlM0UlMEElMDkuY2xyLWktb3V0bGluZSU3QmZpbGwtcnVsZSUz''@;'; put 'put ''QWV2ZW5vZGQlM0JjbGlwLXJ1bGUlM0FldmVub2RkJTNCZmlsbCUzQWhzbCgxOTgsIDAlLCAxMDAlKSUzQiU3RCUzQyUyRnN0eWxlJTNFJTNDJTJGZGVmcyUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3RpdGxlJTNFZXhjbGFtYXRpb24t''@;'; put 'put ''dHJpYW5nbGUtbGluZSUzQyUyRnRpdGxlJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUtcGF0aC0xJTIyJTIwZCUzRCUyMk0xOCUyQzIxLjMyYTEuMyUy''@;'; put 'put ''QzEuMyUyQzAlMkMwJTJDMCUyQzEuMy0xLjNWMTRhMS4zJTJDMS4zJTJDMCUyQzElMkMwLTIuNiUyQzB2NkExLjMlMkMxLjMlMkMwJTJDMCUyQzAlMkMxOCUyQzIxLjMyWiUyMiUzRSUzQyUyRnBhdGglM0UlM0NjaXJjbGUlMjBjbGFzcyUzRCUyMmNsci1pLW91dGxpbmUlMjBjbHItaS1vdXRs''@;'; put 'put ''aW5lLXBhdGgtMiUyMiUyMGN4JTNEJTIyMTcuOTUlMjIlMjBjeSUzRCUyMjI0LjI3JTIyJTIwciUzRCUyMjEuNSUyMiUzRSUzQyUyRmNpcmNsZSUzRSUzQ3BhdGglMjBjbGFzcyUzRCUyMmNsci1pLW91dGxpbmUlMjBjbHItaS1vdXRsaW5lLXBhdGgtMyUyMiUyMGQlM0QlMjJNMzAuMzMlMkMy''@;'; put 'put ''NS41NCUyQzIwLjU5JTJDNy42YTMlMkMzJTJDMCUyQzAlMkMwLTUuMjclMkMwTDUuNTclMkMyNS41NEEzJTJDMyUyQzAlMkMwJTJDMCUyQzguMjElMkMzMEgyNy42OWEzJTJDMyUyQzAlMkMwJTJDMCUyQzIuNjQtNC40M1ptLTEuNzglMkMxLjk0YTElMkMxJTJDMCUyQzAlMkMxLS44Ni40OUg4''@;'; put 'put ''LjIxYTElMkMxJTJDMCUyQzAlMkMxLS44OC0xLjQ4TDE3LjA3JTJDOC41NWExJTJDMSUyQzAlMkMwJTJDMSUyQzEuNzYlMkMwbDkuNzQlMkMxNy45NEExJTJDMSUyQzAlMkMwJTJDMSUyQzI4LjU1JTJDMjcuNDhaJTIyJTNFJTNDJTJGcGF0aCUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUzQyUyRnN2ZyUzRSIpfS5hbGVydC1pY29uLmNsci12bXctbG9nbywuY2xyLWljb24uY2xyLXZtdy1sb2dve2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDM2JTIw''@;'; put 'put ''MzYlMjIlMjB2ZXJzaW9uJTNEJTIyMS4xJTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlMjB4bWxucyUzQXhsaW5rJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYxOTk5JTJGeGxpbmslMjIlM0UlMEElMjAlMjAlMjAlMjAlM0N0''@;'; put 'put ''aXRsZSUzRXZtJTIwYnVnJTNDJTJGdGl0bGUlM0UlMEElMjAlMjAlMjAlMjAlM0NkZWZzJTNFJTNDJTJGZGVmcyUzRSUwQSUyMCUyMCUyMCUyMCUzQ2clMjBpZCUzRCUyMkhlYWRlcnMlMjIlMjBzdHJva2UlM0QlMjJub25lJTIyJTIwc3Ryb2tlLXdpZHRoJTNEJTIyMSUyMiUyMGZpbGwlM0Ql''@;'; put 'put ''MjJub25lJTIyJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2clMjBpZCUzRCUyMkNMLUhlYWRlcnMtU3BlY3MlMjIlMjB0cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUoLTI2Mi4wMDAwMDAlMkMlMjAtMTc1LjAwMDAwMCklMjIlM0Ul''@;'; put 'put ''MEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NnJTIwaWQlM0QlMjIwMSUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSgyMzguMDAwMDAwJTJDJTIwMTYzLjAwMDAwMCklMjIlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlM0NnJTIwaWQlM0QlMjJ2bS1idWclMjIlMjB0cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUoMjQuNzAzMTI1JTJDJTIwMTIuMDAwMDAwKSUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3JlY3QlMjBpZCUz''@;'; put 'put ''RCUyMlJlY3RhbmdsZS00MiUyMiUyMGZpbGwtb3BhY2l0eSUzRCUyMjAuMjUlMjIlMjBmaWxsJTNEJTIyJTIzREREREREJTIyJTIwb3BhY2l0eSUzRCUyMjAuNiUyMiUyMHglM0QlMjIwJTIyJTIweSUzRCUyMjAlMjIlMjB3aWR0aCUzRCUyMjM2JTIyJTIwaGVpZ2h0JTNEJTIyMzYlMjIlMjBy''@;'; put 'put ''eCUzRCUyMjMlMjIlM0UlM0MlMkZyZWN0JTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGQlM0QlMjJNNy42Mzk0ODM3NiUyQzEzLjg3NjI0MDIlMjBDNy4zMjI2NTMyNCUyQzEzLjIwOTcwODIlMjA2LjUz''@;'; put 'put ''OTc4MTUyJTJDMTIuOTA4NTEzOSUyMDUuODA5MjMwNDIlMkMxMy4yMTk5MzQlMjBDNS4wNzc3MTA0MyUyQzEzLjUzMjI4MzclMjA0LjgwOTMyNDk1JTJDMTQuMzEwMzY5MSUyMDUuMTM5NzIwMDclMkMxNC45NzY5MDExJTIwTDguMjA3MjU5NTQlMkMyMS4zNzQ0OTIzJTIwQzguNjg5NzcyMDcl''@;'; put 'put ''MkMyMi4zNzg0NzM1JTIwOS4xOTg0NDQ5MSUyQzIyLjkwMzcwNDQlMjAxMC4xNTI4MTIxJTJDMjIuOTAzNzA0NCUyMEMxMS4xNzIwOTU1JTJDMjIuOTAzNzA0NCUyMDExLjYxNjgyMDklMkMyMi4zMzEwNjMzJTIwMTIuMDk4MzY0NiUyQzIxLjM3NDQ5MjMlMjBDMTIuMDk4MzY0NiUyQzIxLjM3''@;'; put 'put ''NDQ5MjMlMjAxNC43NzQ0NjgyJTJDMTUuNzg0NzM0MSUyMDE0LjgwMTU5NzQlMkMxNS43MjYxNjg1JTIwQzE0LjgyODcyNjYlMkMxNS42NjY2NzMzJTIwMTQuOTE0OTU4OCUyQzE1LjQ4NjMyODYlMjAxNS4xODcyMTk5JTJDMTUuNDg3MjU4MiUyMEMxNS40MTc4MTgyJTJDMTUuNDkwMDQ3JTIw''@;'; put 'put ''MTUuNjEwNjI5NCUyQzE1LjY2NTc0MzclMjAxNS42MTA2Mjk0JTJDMTUuOTAxODY1MiUyMEwxNS42MTA2Mjk0JTJDMjEuMzY5ODQ0MyUyMEMxNS42MTA2Mjk0JTJDMjIuMjEyMDczJTIwMTYuMDk3OTg2NSUyQzIyLjkwMzcwNDQlMjAxNy4wMzQ5MTM0JTJDMjIuOTAzNzA0NCUyMEMxNy45NzE4''@;'; put 'put ''NDAzJTJDMjIuOTAzNzA0NCUyMDE4LjQ3ODU3NTQlMkMyMi4yMTIwNzMlMjAxOC40Nzg1NzU0JTJDMjEuMzY5ODQ0MyUyMEwxOC40Nzg1NzU0JTJDMTYuODk2NTUwMyUyMEMxOC40Nzg1NzU0JTJDMTYuMDMzODcwMiUyMDE5LjEyMTkyNTQlMkMxNS40NzQyNDM2JTIwMjAuMDAwNzE4MyUyQzE1''@;'; put 'put ''LjQ3NDI0MzYlMjBDMjAuODc4NTQyMyUyQzE1LjQ3NDI0MzYlMjAyMS40NjM3NTgzJTJDMTYuMDUyNDYyNCUyMDIxLjQ2Mzc1ODMlMkMxNi44OTY1NTAzJTIwTDIxLjQ2Mzc1ODMlMkMyMS4zNjk4NDQzJTIwQzIxLjQ2Mzc1ODMlMkMyMi4yMTIwNzMlMjAyMS45NTIwODQyJTJDMjIuOTAzNzA0''@;'; put 'put ''NCUyMDIyLjg4ODA0MjMlMkMyMi45MDM3MDQ0JTIwQzIzLjgyNDAwMDMlMkMyMi45MDM3MDQ0JTIwMjQuMzMyNjczMSUyQzIyLjIxMjA3MyUyMDI0LjMzMjY3MzElMkMyMS4zNjk4NDQzJTIwTDI0LjMzMjY3MzElMkMxNi44OTY1NTAzJTIwQzI0LjMzMjY3MzElMkMxNi4wMzM4NzAyJTIwMjQu''@;'; put 'put ''OTc1MDU0MyUyQzE1LjQ3NDI0MzYlMjAyNS44NTM4NDcyJTJDMTUuNDc0MjQzNiUyMEMyNi43MzA3MDIzJTJDMTUuNDc0MjQzNiUyMDI3LjMxNjg4NzElMkMxNi4wNTI0NjI0JTIwMjcuMzE2ODg3MSUyQzE2Ljg5NjU1MDMlMjBMMjcuMzE2ODg3MSUyQzIxLjM2OTg0NDMlMjBDMjcuMzE2ODg3''@;'; put 'put ''MSUyQzIyLjIxMjA3MyUyMDI3LjgwNTIxMzElMkMyMi45MDM3MDQ0JTIwMjguNzQyMTQlMkMyMi45MDM3MDQ0JTIwQzI5LjY3NzEyOTElMkMyMi45MDM3MDQ0JTIwMzAuMTg0ODMzMSUyQzIyLjIxMjA3MyUyMDMwLjE4NDgzMzElMkMyMS4zNjk4NDQzJTIwTDMwLjE4NDgzMzElMkMxNi4yNzgz''@;'; put 'put ''NTgyJTIwQzMwLjE4NDgzMzElMkMxNC40MDcwNDg4JTIwMjguNjE4MTIwNyUyQzEzLjA5NjI5NTYlMjAyNi43MzA3MDIzJTJDMTMuMDk2Mjk1NiUyMEMyNC44NDUyMjE2JTJDMTMuMDk2Mjk1NiUyMDIzLjY2NTEwMDYlMkMxNC4zNDc1NTM2JTIwMjMuNjY1MTAwNiUyQzE0LjM0NzU1MzYlMjBD''@;'; put 'put ''MjMuMDM3MjUzJTJDMTMuNTY2Njc5MyUyMDIyLjE3MjAyNDclMkMxMy4wOTcyMjUyJTIwMjAuNzA4OTg0NyUyQzEzLjA5NzIyNTIlMjBDMTkuMTY0NTU3JTJDMTMuMDk3MjI1MiUyMDE3LjgxMjk0MDYlMkMxNC4zNDc1NTM2JTIwMTcuODEyOTQwNiUyQzE0LjM0NzU1MzYlMjBDMTcuMTg0MTI0''@;'; put 'put ''MSUyQzEzLjU2NjY3OTMlMjAxNi4xMTU0MjY3JTJDMTMuMDk3MjI1MiUyMDE1LjIzMDgyMDQlMkMxMy4wOTcyMjUyJTIwQzEzLjg2MTc2MzglMkMxMy4wOTcyMjUyJTIwMTIuNzc0NjU3MiUyQzEzLjY3NTQ0NCUyMDEyLjExMTkyOTIlMkMxNS4xMzAyODcxJTIwTDEwLjE1MjgxMjElMkMxOS41''@;'; put 'put ''NjA4MTg5JTIwTDcuNjM5NDgzNzYlMkMxMy44NzYyNDAyJTIyJTIwaWQlM0QlMjJGaWxsLTQlMjIlMjBmaWxsJTNEJTIyJTIzRkZGRkZGJTIyJTNFJTNDJTJGcGF0aCUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRmclM0UlMEElMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0MlMkZnJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwQSUyMCUyMCUyMCUyMCUzQyUyRmclM0UlMEElM0MlMkZzdmclM0UiKX0uaXMtb2ZmLXNjcmVlbntwb3NpdGlvbjpmaXhlZCFpbXBvcnRhbnQ7Ym9y''@;'; put 'put ''ZGVyOjAhaW1wb3J0YW50O2hlaWdodDoxcHghaW1wb3J0YW50O3dpZHRoOjFweCFpbXBvcnRhbnQ7bGVmdDowIWltcG9ydGFudDt0b3A6LjA1cmVtIWltcG9ydGFudDtvdmVyZmxvdzpoaWRkZW4haW1wb3J0YW50O3Zpc2liaWxpdHk6aGlkZGVuIWltcG9ydGFudDtwYWRkaW5nOjAhaW1wb3J0''@;'; put 'put ''YW50O21hcmdpbjowIDAgLjA1cmVtIWltcG9ydGFudH0uY2xyLXBvcG92ZXItY29udGVudHtwb3NpdGlvbjpmaXhlZDt6LWluZGV4OjEwNTB9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItYnRuLXZlcnRpY2FsLW1hcmdpbjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpOy0tY2xyLWJ0bi1ob3Jp''@;'; put 'put ''em9udGFsLW1hcmdpbjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpOy0tY2xyLWJ0bi1ob3Jpem9udGFsLXBhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTstLWNsci1idG4tdmVydGljYWwtcGFkZGluZzowOy0tY2xyLWJ0bi1wYWRkaW5nOnZhcigtLWNsci1idG4tdmVydGljYWwt''@;'; put 'put ''cGFkZGluZykgdmFyKC0tY2xyLWJ0bi1ob3Jpem9udGFsLXBhZGRpbmcpOy0tY2xyLWJ0bi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7LS1jbHItYnRuLWhlaWdodC1zbTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpOy0tY2xyLWJ0bi1ib3JkZXItcmFkaXVzOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLWJ0bi1ib3JkZXItd2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKTstLWNsci1idG4tYXBwZWFyYW5jZS1zdGFuZGFyZC1oZWlnaHQ6dmFyKC0tY2xyLWJ0bi1oZWlnaHQtc20pOy0tY2xyLWJ0bi1hcHBlYXJhbmNl''@;'; put 'put ''LXN0YW5kYXJkLXBhZGRpbmc6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpOy0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLWljb24tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLWJ0bi1hcHBlYXJhbmNlLWZvcm0taGVpZ2h0OnZhcigtLWNsci1idG4taGVpZ2h0''@;'; put 'put ''KTstLWNsci1idG4tYXBwZWFyYW5jZS1mb3JtLXBhZGRpbmc6dmFyKC0tY2xyLWJ0bi1wYWRkaW5nKTstLWNsci1idG4tZ3JvdXAtZm9jdXMtb3V0bGluZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUpOy0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcjp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItYnRuLW91dGxpbmUtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvKTstLWNsci1idG4tZGVmYXVs''@;'; put 'put ''dC1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1kZWZhdWx0LWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJh''@;'; put 'put ''Y3Rpb24taW5mby1zZWNvbmRhcnktaG92ZXIpOy0tY2xyLWJ0bi1kZWZhdWx0LWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWluZm8taG92ZXIpOy0tY2xyLWJ0bi1kZWZhdWx0LWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY29sb3IpOy0tY2xyLWJ0''@;'; put 'put ''bi1kZWZhdWx0LWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1idG4tZGVmYXVsdC1kaXNhYmxlZC1iZy1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9n''@;'; put 'put ''cmFwaHktY29sb3ItMTAwKTstLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1jb2xvcik7LS1jbHItYnRu''@;'; put 'put ''LWRlZmF1bHQtY2hlY2tlZC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8taG92ZXIpOy0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtYWN0aXZlLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWNvbG9yKTstLWNsci1idG4t''@;'; put 'put ''ZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY29sb3IpOy0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQtYnV0dG9uKTstLWNsci1idG4tZGVmYXVsdC1j''@;'; put 'put ''aGVja2VkLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJvcmRlci1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYnRuLXByaW1hcnktb3V0bGluZS1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRl''@;'; put 'put ''cmFjdGlvbi1pbmZvLXNlY29uZGFyeS1ob3Zlcik7LS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1pbmZvLWhvdmVyKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1''@;'; put 'put ''bHQtb3V0bGluZS1jb2xvcik7LS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2Fi''@;'; put 'put ''bGVkKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2Fi''@;'; put 'put ''bGVkKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWNoZWNrZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYmctY29sb3Ip''@;'; put 'put ''Oy0tY2xyLWJ0bi1wcmltYXJ5LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItYnRuLXByaW1hcnktYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvKTstLWNsci1idG4tcHJpbWFyeS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXN0YXR1cy1pbmZvKTstLWNsci1idG4tcHJpbWFyeS1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8taG92ZXIpOy0tY2xyLWJ0bi1wcmltYXJ5LWhvdmVyLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1jb2xvcik7LS1jbHItYnRuLXBy''@;'; put 'put ''aW1hcnktYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItYnRuLXByaW1hcnktYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW5mby1hY3RpdmUpOy0tY2xyLWJ0bi1wcmltYXJ5LWRpc2FibGVk''@;'; put 'put ''LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkLWJ1dHRvbik7LS1jbHItYnRuLXByaW1hcnktZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLXByaW1hcnktZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi1wcmltYXJ5LWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvKTstLWNsci1idG4tcHJpbWFyeS1jaGVja2VkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1j''@;'; put 'put ''bHItYnRuLXByaW1hcnktb3V0bGluZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8pOy0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWNvbG9yKTstLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWJnLWNv''@;'; put 'put ''bG9yOnZhcigtLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8tc2Vjb25kYXJ5LWhvdmVyKTstLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWhvdmVy''@;'; put 'put ''LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWluZm8taG92ZXIpOy0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1hY3RpdmUtY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtY29sb3IpOy0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0''@;'; put 'put ''bi1kZWZhdWx0LW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtY2hlY2tlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''dHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLXN1Y2Nlc3MtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAw''@;'; put 'put ''KTstLWNsci1idG4tc3VjY2Vzcy1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLWJ0bi1zdWNjZXNzLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtYmctY29sb3IpOy0tY2xyLWJ0bi1zdWNjZXNzLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tc3VjY2Vzcy1ob3Zlcik7LS1jbHItYnRuLXN1Y2Nlc3MtaG92ZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWNvbG9yKTstLWNsci1idG4tc3VjY2Vzcy1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3It''@;'; put 'put ''MTAwKTstLWNsci1idG4tc3VjY2Vzcy1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1zdWNjZXNzLWFjdGl2ZSk7LS1jbHItYnRuLXN1Y2Nlc3MtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQtYnV0dG9u''@;'; put 'put ''KTstLWNsci1idG4tc3VjY2Vzcy1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1idG4tc3VjY2Vzcy1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLXN1Y2Nlc3MtY2hl''@;'; put 'put ''Y2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtY29sb3IpOy0tY2xyLWJ0bi1zdWNjZXNzLWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWJnLWNvbG9yKTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3Vj''@;'; put 'put ''Y2Vzcyk7LS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItYnRuLXN1Y2Nlc3Mtb3V0''@;'; put 'put ''bGluZS1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXN1Y2Nlc3Mtc2Vjb25kYXJ5LWhvdmVyKTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1Y2Nlc3MtaG92ZXIpOy0tY2xy''@;'; put 'put ''LWJ0bi1zdWNjZXNzLW91dGxpbmUtYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1jb2xvcik7LS1jbHItYnRuLXN1''@;'; put 'put ''Y2Nlc3Mtb3V0bGluZS1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLXN1Y2Nl''@;'; put 'put ''c3Mtb3V0bGluZS1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tc3VjY2Vz''@;'; put 'put ''cy1vdXRsaW5lLWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtY29sb3IpOy0tY2xyLWJ0bi1kYW5nZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1idG4tZGFuZ2VyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1z''@;'; put 'put ''dGF0dXMtZGFuZ2VyKTstLWNsci1idG4tZGFuZ2VyLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1iZy1jb2xvcik7LS1jbHItYnRuLWRhbmdlci1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWRhbmdlci1ob3Zlcik7LS1jbHItYnRu''@;'; put 'put ''LWRhbmdlci1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1jb2xvcik7LS1jbHItYnRuLWRhbmdlci1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1kYW5nZXItYWN0aXZlKTstLWNsci1idG4tZGFuZ2VyLWFjdGl2ZS1jb2xvcjp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJ0bi1kYW5nZXItZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQtYnV0dG9uKTstLWNsci1idG4tZGFuZ2VyLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0''@;'; put 'put ''dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi1kYW5nZXItZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi1kYW5nZXItY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1iZy1jb2xvcik7LS1jbHItYnRuLWRhbmdl''@;'; put 'put ''ci1jaGVja2VkLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWNvbG9yKTstLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpOy0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLW91dGxpbmUtYmct''@;'; put 'put ''Y29sb3IpOy0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXIpOy0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWRhbmdlci1zZWNvbmRh''@;'; put 'put ''cnktaG92ZXIpOy0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kYW5nZXItaG92ZXIpOy0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1iZy1jb2xv''@;'; put 'put ''cik7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWNvbG9yKTstLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWJ0bi1k''@;'; put 'put ''YW5nZXItb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1idG4tZGFu''@;'; put 'put ''Z2VyLW91dGxpbmUtY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWJnLWNvbG9yKTstLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWNvbG9yKTstLWNsci1idG4td2FybmluZy1jb2xv''@;'; put 'put ''cjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsYWNrKTstLWNsci1idG4td2FybmluZy1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmcpOy0tY2xyLWJ0bi13YXJuaW5nLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctYmctY29sb3IpOy0tY2xyLWJ0bi13''@;'; put 'put ''YXJuaW5nLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24td2FybmluZy1ob3Zlcik7LS1jbHItYnRuLXdhcm5pbmctaG92ZXItY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWNvbG9yKTstLWNsci1idG4td2FybmluZy1hY3RpdmUtYmctY29sb3I6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi13YXJuaW5nLWFjdGl2ZSk7LS1jbHItYnRuLXdhcm5pbmctYWN0aXZlLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1jb2xvcik7LS1jbHItYnRuLXdhcm5pbmctZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9n''@;'; put 'put ''cmFwaHktZGlzYWJsZWQtYnV0dG9uKTstLWNsci1idG4td2FybmluZy1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1idG4td2FybmluZy1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7''@;'; put 'put ''LS1jbHItYnRuLXdhcm5pbmctY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctYmctY29sb3IpOy0tY2xyLWJ0bi13YXJuaW5nLWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWNvbG9yKTstLWNsci1idG4td2FybmluZy1vdXRsaW5lLWNvbG9yOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1kYXJrKTstLWNsci1idG4td2FybmluZy1vdXRsaW5lLWJnLWNvbG9yOnZhcigtLWNsci1idG4tb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy13YXJu''@;'; put 'put ''aW5nLWRhcmspOy0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi13YXJuaW5nLXNlY29uZGFyeS1ob3Zlcik7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''dHlwb2dyYXBoeS13YXJuaW5nLWhvdmVyKTstLWNsci1idG4td2FybmluZy1vdXRsaW5lLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJu''@;'; put 'put ''aW5nLW91dGxpbmUtY29sb3IpOy0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91''@;'; put 'put ''dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0''@;'; put 'put ''bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1jaGVja2VkLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWNvbG9yKTstLWNsci1idG4tbmV1dHJhbC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJ0bi1u''@;'; put 'put ''ZXV0cmFsLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtbmV1dHJhbCk7LS1jbHItYnRuLW5ldXRyYWwtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1iZy1jb2xvcik7LS1jbHItYnRuLW5ldXRyYWwtaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVj''@;'; put 'put ''dC1pbnRlcmFjdGlvbi1uZXV0cmFsLWhvdmVyKTstLWNsci1idG4tbmV1dHJhbC1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtY29sb3IpOy0tY2xyLWJ0bi1uZXV0cmFsLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW5ldXRyYWwt''@;'; put 'put ''YWN0aXZlKTstLWNsci1idG4tbmV1dHJhbC1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWNvbG9yKTstLWNsci1idG4tbmV1dHJhbC1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZC1idXR0b24pOy0tY2xyLWJ0bi1uZXV0cmFsLWRp''@;'; put 'put ''c2FibGVkLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi1uZXV0cmFsLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRpc2FibGVkKTstLWNsci1idG4tbmV1dHJhbC1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1idG4tbmV1dHJhbC1iZy1jb2xvcik7LS1jbHItYnRuLW5ldXRyYWwtY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtY29sb3IpOy0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsKTstLWNsci1idG4tbmV1dHJh''@;'; put 'put ''bC1vdXRsaW5lLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtb3BhY2l0eS0wKTstLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1jb2xvcik7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1ob3Zlci1jb2xv''@;'; put 'put ''cjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1uZXV0cmFsLWhvdmVyKTstLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tbmV1dHJhbC1zZWNvbmRhcnktaG92ZXIpOy0tY2xyLWJ0bi1uZXV0cmFsLW91''@;'; put 'put ''dGxpbmUtYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtbmV1dHJhbCk7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTApOy0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtZGlzYWJsZWQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYmctY29sb3IpOy0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtZGlzYWJsZWQtYm9yZGVy''@;'; put 'put ''LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1iZy1jb2xvcik7LS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1jaGVja2VkLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWNvbG9yKTstLWNsci1idG4tbGluay1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8pOy0tY2xyLWJ0bi1saW5rLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLWJvcmRl''@;'; put 'put ''ci1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWNvbG9yKTstLWNsci1idG4tbGluay1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7''@;'; put 'put ''LS1jbHItYnRuLWxpbmstaG92ZXItYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaW5mby1ob3Zlcik7LS1jbHItYnRuLWxpbmstdmlzaXRlZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yLXZpc2l0ZWQpOy0tY2xyLWJ0bi1saW5rLXZpc2l0ZWQtaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvci12aXNpdGVkLWhvdmVyKTstLWNsci1idG4tbGluay1kaXNhYmxlZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLWxpbmstZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQt''@;'; put 'put ''YmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstY2hlY2tlZC1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtODAwKTstLWNsci1idG4tbGluay1wcmltYXJ5LWNv''@;'; put 'put ''bG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mbyk7LS1jbHItYnRuLWxpbmstcHJpbWFyeS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1wcmltYXJ5LWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJn''@;'; put 'put ''LWNvbG9yKTstLWNsci1idG4tbGluay1wcmltYXJ5LWhvdmVyLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXByaW1hcnktaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktaW5mby1ob3Zlcik7LS1jbHItYnRu''@;'; put 'put ''LWxpbmstcHJpbWFyeS1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXByaW1hcnktY29sb3IpOy0tY2xyLWJ0bi1saW5rLXByaW1hcnktYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXByaW1hcnktZGlzYWJs''@;'; put 'put ''ZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWJ0bi1saW5rLXByaW1hcnktZGlzYWJsZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstcHJpbWFyeS1kaXNhYmxlZC1ib3JkZXItY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstcHJpbWFyeS1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXByaW1hcnktY2hlY2tlZC1jb2xvcjp2YXIoLS1jbHItYnRu''@;'; put 'put ''LWxpbmstcHJpbWFyeS1jb2xvcik7LS1jbHItYnRuLWxpbmstc3VjY2Vzcy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmst''@;'; put 'put ''c3VjY2Vzcy1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstc3VjY2Vzcy1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1zdWNjZXNzLWhvdmVyLWNvbG9y''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1Y2Nlc3MtaG92ZXIpOy0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtYWN0aXZlLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNjZXNzLWNvbG9yKTstLWNsci1idG4tbGluay1zdWNjZXNzLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRu''@;'; put 'put ''LXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1zdWNjZXNzLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1idG4tbGluay1zdWNjZXNzLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQt''@;'; put 'put ''YmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9y''@;'; put 'put ''KTstLWNsci1idG4tbGluay1zdWNjZXNzLWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtY29sb3IpOy0tY2xyLWJ0bi1saW5rLXdhcm5pbmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLWRhcmspOy0tY2xyLWJ0bi1saW5rLXdhcm5pbmctYmct''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstd2FybmluZy1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstd2FybmluZy1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jbHItYnRu''@;'; put 'put ''LXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay13YXJuaW5nLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXdhcm5pbmctaG92ZXIpOy0tY2xyLWJ0bi1saW5rLXdhcm5pbmctYWN0aXZlLWNvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWNv''@;'; put 'put ''bG9yKTstLWNsci1idG4tbGluay13YXJuaW5nLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay13YXJuaW5nLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1idG4t''@;'; put 'put ''bGluay13YXJuaW5nLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXdhcm5pbmctZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLXdh''@;'; put 'put ''cm5pbmctY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay13YXJuaW5nLWNoZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXdhcm5pbmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLWRhbmdlci1jb2xvcjp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLWRhbmdlci1ib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1j''@;'; put 'put ''bHItYnRuLWxpbmstZGFuZ2VyLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLWRhbmdlci1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kYW5nZXItaG92ZXIpOy0tY2xyLWJ0bi1saW5rLWRhbmdl''@;'; put 'put ''ci1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRhbmdlci1jb2xvcik7LS1jbHItYnRuLWxpbmstZGFuZ2VyLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1kYW5nZXItZGlzYWJsZWQtY29sb3I6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWJ0bi1saW5rLWRhbmdlci1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1kYW5nZXItZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4t''@;'; put 'put ''dHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLWRhbmdlci1jaGVja2VkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLWRhbmdlci1jaGVja2VkLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItY29sb3Ip''@;'; put 'put ''Oy0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsKTstLWNsci1idG4tbGluay1uZXV0cmFsLWJnLWNvbG9yOnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtYm9yZGVyLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1idG4tdHJhbnNwYXJlbnQtYmctY29sb3IpOy0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtaG92ZXItYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstbmV1dHJhbC1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1uZXV0cmFsLWhvdmVyKTstLWNsci1idG4tbGluay1uZXV0cmFsLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1jb2xvcik7LS1jbHItYnRuLWxpbmstbmV1dHJhbC1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xv''@;'; put 'put ''cik7LS1jbHItYnRuLWxpbmstbmV1dHJhbC1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItYnRuLWxpbmstbmV1dHJhbC1kaXNhYmxlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4t''@;'; put 'put ''bGluay1uZXV0cmFsLWRpc2FibGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXRyYW5zcGFyZW50LWJnLWNvbG9yKTstLWNsci1idG4tbGluay1uZXV0cmFsLWNoZWNrZWQtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWxpbmstbmV1''@;'; put 'put ''dHJhbC1jaGVja2VkLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1uZXV0cmFsLWNvbG9yKTstLWNsci1idG4taW52ZXJzZS1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKTstLWNsci1idG4taW52ZXJzZS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci13aGl0''@;'; put 'put ''ZSk7LS1jbHItYnRuLWludmVyc2UtYmctY29sb3I6dmFyKC0tY2xyLWJ0bi10cmFuc3BhcmVudC1iZy1jb2xvcik7LS1jbHItYnRuLWludmVyc2UtaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbnZlcnNlLWhvdmVyKTstLWNsci1idG4taW52ZXJz''@;'; put 'put ''ZS1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtY29sb3IpOy0tY2xyLWJ0bi1pbnZlcnNlLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWludmVyc2UtYWN0aXZlKTstLWNsci1idG4taW52ZXJzZS1hY3RpdmUtY29sb3I6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci13aGl0ZSk7LS1jbHItYnRuLWludmVyc2UtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWJ0bi1pbnZlcnNlLWRpc2FibGVkLWJnLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJnLWNv''@;'; put 'put ''bG9yKTstLWNsci1idG4taW52ZXJzZS1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItYnRuLWludmVyc2UtY2hlY2tlZC1iZy1jb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtYmctY29sb3IpOy0tY2xyLWJ0bi1pbnZlcnNlLWNo''@;'; put 'put ''ZWNrZWQtY29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWNvbG9yKX0uYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bntjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmlubGluZS1mbGV4O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2FsaWduLWl0ZW1zOmNlbnRlcjtw''@;'; put 'put ''bGFjZS1jb250ZW50OmNlbnRlcjstd2Via2l0LWFwcGVhcmFuY2U6bm9uZSFpbXBvcnRhbnQ7Ym9yZGVyOnZhcigtLWNsci1idG4tYm9yZGVyLXdpZHRoKSBzb2xpZDtib3JkZXItcmFkaXVzOnZhcigtLWNsci1idG4tYm9yZGVyLXJhZGl1cyk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtMTQpO21heC13aWR0aDpjYWxjKDM2MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7d2hpdGUtc3BhY2U6bm93cmFwO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVuO3RleHQtYWxpZ246Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO3ZlcnRpY2Fs''@;'; put 'put ''LWFsaWduOm1pZGRsZTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jb2xvcik7Zm9udC13ZWlnaHQ6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtMik7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTEpO3RleHQtdHJhbnNmb3JtOnVwcGVyY2FzZTtoZWlnaHQ6dmFyKC0tY2xyLWJ0bi1hcHBlYXJhbmNlLWZvcm0taGVpZ2h0KTtwYWRkaW5nOnZhcigtLWNsci1idG4tYXBwZWFyYW5jZS1mb3JtLXBhZGRpbmcpfS5idG46aG92ZXIsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAu''@;'; put 'put ''YnRuOmhvdmVye3RleHQtZGVjb3JhdGlvbjpub25lfS5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4t''@;'; put 'put ''ZGVmYXVsdC1jb2xvcil9LmJ0bjpob3ZlciwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1ob3Zlci1jb2xvcil9LmJ0''@;'; put 'put ''bjpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bjpob3ZlciBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWhv''@;'; put 'put ''dmVyLWNvbG9yKX0uYnRuOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWFjdGl2ZS1jb2xvcil9LmJ0''@;'; put 'put ''bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVs''@;'; put 'put ''dC1hY3RpdmUtY29sb3IpfS5idG4uZGlzYWJsZWQsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuZGlzYWJsZWQuYnRuLC5idG46ZGlzYWJsZWQsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1kaXNhYmxl''@;'; put 'put ''ZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5kaXNhYmxlZCBjZHMtaWNv''@;'; put 'put ''biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5kaXNhYmxlZC5idG4gY2RzLWljb24sLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5kaXNhYmxlZC5idG4gY2xyLWljb24sLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxl''@;'; put 'put ''dmVsIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVkLWNvbG9yKX0uYnRuIC5j''@;'; put 'put ''bHItbG9hZGluZy1idG4tY29udGVudCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gLmNsci1sb2FkaW5nLWJ0bi1jb250ZW50e2Rpc3BsYXk6ZmxleDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTthbGlnbi1pdGVtczpjZW50ZXJ9LmJ0bi1ncm91cD4uYnRuIGNsci1p''@;'; put 'put ''Y29uLC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29ue3RyYW5zZm9ybTp0cmFuc2xhdGUzZCgwLGNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSksMCl9YS5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSBhLmJ0biwu''@;'; put 'put ''YnRuLmJ0bi1zZWNvbmRhcnksLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXNlY29uZGFyeS5idG4sLmJ0bi1zZWNvbmRhcnkgLmJ0biwuYnRuLXNlY29uZGFyeSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAu''@;'; put 'put ''YnRuLXNlY29uZGFyeSAuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNvbG9yKX1hLmJ0biBjZHMtaWNv''@;'; put 'put ''biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuYnRuIGNkcy1pY29uLGEuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gYS5idG4gY2xyLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5IGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0''@;'; put 'put ''bi1zZWNvbmRhcnkuYnRuIGNkcy1pY29uLC5idG4uYnRuLXNlY29uZGFyeSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc2Vjb25kYXJ5LmJ0biBjbHItaWNvbiwuYnRuLXNlY29uZGFyeSAuYnRuIGNkcy1pY29uLC5idG4tc2Vjb25kYXJ5IC5hbGVydC1hcHAt''@;'; put 'put ''bGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc2Vjb25kYXJ5IC5idG4gY2RzLWljb24sLmJ0bi1zZWNvbmRhcnkgLmJ0biBjbHItaWNvbiwuYnRuLXNlY29uZGFyeSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5i''@;'; put 'put ''dG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXNlY29uZGFyeSAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jb2xvcil9YS5idG46aG92ZXIsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSBhLmJ0bjpob3ZlciwuYnRuLmJ0''@;'; put 'put ''bi1zZWNvbmRhcnk6aG92ZXIsLmJ0bi1zZWNvbmRhcnkgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWhvdmVyLWNvbG9yKX1hLmJ0bjpob3ZlciBjZHMtaWNvbiwuYWxl''@;'; put 'put ''cnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuYnRuOmhvdmVyIGNkcy1pY29uLGEuYnRuOmhvdmVyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gYS5idG46aG92ZXIgY2xyLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5OmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLXNlY29u''@;'; put 'put ''ZGFyeTpob3ZlciBjbHItaWNvbiwuYnRuLXNlY29uZGFyeSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tc2Vjb25kYXJ5IC5idG46aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWhvdmVyLWNvbG9yKX1hLmJ0bjphY3RpdmUsLmFsZXJ0LWFwcC1sZXZlbCAuYWxl''@;'; put 'put ''cnQtaXRlbSBhLmJ0bjphY3RpdmUsLmJ0bi5idG4tc2Vjb25kYXJ5OmFjdGl2ZSwuYnRuLXNlY29uZGFyeSAuYnRuOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1hY3RpdmUt''@;'; put 'put ''Y29sb3IpfWEuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuYnRuOmFjdGl2ZSBjZHMtaWNvbixhLmJ0bjphY3RpdmUgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSBhLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0bi5idG4tc2Vj''@;'; put 'put ''b25kYXJ5OmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnk6YWN0aXZlIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5IC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tc2Vjb25kYXJ5IC5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1hY3RpdmUt''@;'; put 'put ''Y29sb3IpfWEuYnRuLmRpc2FibGVkLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gYS5kaXNhYmxlZC5idG4sYS5idG46ZGlzYWJsZWQsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSBhLmJ0bjpkaXNhYmxlZCwuYnRuLmJ0bi1zZWNvbmRhcnkuZGlzYWJsZWQsLmJ0bi5idG4tc2Vj''@;'; put 'put ''b25kYXJ5OmRpc2FibGVkLC5idG4tc2Vjb25kYXJ5IC5idG4uZGlzYWJsZWQsLmJ0bi1zZWNvbmRhcnkgLmJ0bjpkaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1i''@;'; put 'put ''dG4tZGVmYXVsdC1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1kaXNhYmxlZC1ib3JkZXItY29sb3IpfWEuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gYS5kaXNhYmxlZC5idG4gY2RzLWljb24s''@;'; put 'put ''YS5idG4uZGlzYWJsZWQgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSBhLmRpc2FibGVkLmJ0biBjbHItaWNvbixhLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIGEuYnRuOmRpc2FibGVkIGNkcy1pY29uLGEuYnRuOmRpc2Fi''@;'; put 'put ''bGVkIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gYS5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLXNlY29uZGFyeS5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJs''@;'; put 'put ''ZWQgY2RzLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5OmRpc2FibGVkIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5IC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1zZWNvbmRhcnkgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLXNlY29uZGFyeSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5i''@;'; put 'put ''dG4tc2Vjb25kYXJ5IC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWRpc2FibGVkLWNvbG9yKX0uYnRuLmJ0bi1pbmZvLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1pbmZvLmJ0biwuYnRuLWluZm8gLmJ0biwuYnRuLWluZm8gLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1pbmZvIC5idG4sLmJ0bi5idG4tcHJpbWFyeSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tcHJpbWFyeS5idG4sLmJ0bi1wcmltYXJ5IC5idG4sLmJ0bi1wcmlt''@;'; put 'put ''YXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tcHJpbWFyeSAuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4t''@;'; put 'put ''cHJpbWFyeS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWNvbG9yKX0uYnRuLmJ0bi1pbmZvIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1pbmZvLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1pbmZvIGNsci1pY29uLC5hbGVydC1hcHAtbGV2''@;'; put 'put ''ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1pbmZvLmJ0biBjbHItaWNvbiwuYnRuLWluZm8gLmJ0biBjZHMtaWNvbiwuYnRuLWluZm8gLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1pbmZvIC5idG4gY2RzLWlj''@;'; put 'put ''b24sLmJ0bi1pbmZvIC5idG4gY2xyLWljb24sLmJ0bi1pbmZvIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW5mbyAuYnRuIGNsci1pY29uLC5idG4uYnRuLXByaW1hcnkgY2RzLWljb24sLmFsZXJ0''@;'; put 'put ''LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXByaW1hcnkuYnRuIGNkcy1pY29uLC5idG4uYnRuLXByaW1hcnkgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXByaW1hcnkuYnRuIGNsci1pY29uLC5idG4tcHJpbWFyeSAuYnRuIGNkcy1pY29uLC5idG4tcHJp''@;'; put 'put ''bWFyeSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXByaW1hcnkgLmJ0biBjZHMtaWNvbiwuYnRuLXByaW1hcnkgLmJ0biBjbHItaWNvbiwuYnRuLXByaW1hcnkgLmFsZXJ0LWFwcC1sZXZlbCAuYWxl''@;'; put 'put ''cnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1wcmltYXJ5IC5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWNvbG9yKX0uYnRuLmJ0bi1pbmZvOmhvdmVyLC5idG4taW5mbyAuYnRuOmhvdmVyLC5idG4uYnRuLXBy''@;'; put 'put ''aW1hcnk6aG92ZXIsLmJ0bi1wcmltYXJ5IC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1ob3Zlci1jb2xvcil9LmJ0bi5idG4taW5mbzpob3ZlciBjZHMtaWNvbiwuYnRu''@;'; put 'put ''LmJ0bi1pbmZvOmhvdmVyIGNsci1pY29uLC5idG4taW5mbyAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4taW5mbyAuYnRuOmhvdmVyIGNsci1pY29uLC5idG4uYnRuLXByaW1hcnk6aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tcHJpbWFyeTpob3ZlciBjbHItaWNvbiwuYnRuLXByaW1hcnkgLmJ0''@;'; put 'put ''bjpob3ZlciBjZHMtaWNvbiwuYnRuLXByaW1hcnkgLmJ0bjpob3ZlciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktaG92ZXItY29sb3IpfS5idG4uYnRuLWluZm86YWN0aXZlLC5idG4taW5mbyAuYnRuOmFjdGl2ZSwuYnRuLmJ0bi1wcmltYXJ5OmFjdGl2ZSwuYnRuLXBy''@;'; put 'put ''aW1hcnkgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1pbmZvOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1pbmZvOmFjdGl2''@;'; put 'put ''ZSBjbHItaWNvbiwuYnRuLWluZm8gLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1pbmZvIC5idG46YWN0aXZlIGNsci1pY29uLC5idG4uYnRuLXByaW1hcnk6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLXByaW1hcnk6YWN0aXZlIGNsci1pY29uLC5idG4tcHJpbWFyeSAuYnRuOmFjdGl2ZSBj''@;'; put 'put ''ZHMtaWNvbiwuYnRuLXByaW1hcnkgLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4taW5mby5kaXNhYmxlZCwuYnRuLmJ0bi1pbmZvOmRpc2FibGVkLC5idG4taW5mbyAuYnRuLmRpc2FibGVkLC5idG4taW5mbyAu''@;'; put 'put ''YnRuOmRpc2FibGVkLC5idG4uYnRuLXByaW1hcnkuZGlzYWJsZWQsLmJ0bi5idG4tcHJpbWFyeTpkaXNhYmxlZCwuYnRuLXByaW1hcnkgLmJ0bi5kaXNhYmxlZCwuYnRuLXByaW1hcnkgLmJ0bjpkaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktZGlzYWJsZWQtY29sb3IpO2N1''@;'; put 'put ''cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1kaXNhYmxlZC1ib3JkZXItY29sb3IpfS5idG4uYnRuLWluZm8uZGlzYWJsZWQgY2RzLWljb24s''@;'; put 'put ''LmJ0bi5idG4taW5mby5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1pbmZvOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWluZm86ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1pbmZvIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1pbmZvIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0''@;'; put 'put ''bi1pbmZvIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1pbmZvIC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tcHJpbWFyeS5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1wcmltYXJ5LmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLXByaW1hcnk6ZGlzYWJsZWQgY2RzLWlj''@;'; put 'put ''b24sLmJ0bi5idG4tcHJpbWFyeTpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLXByaW1hcnkgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLXByaW1hcnkgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLXByaW1hcnkgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLXByaW1hcnkgLmJ0bjpk''@;'; put 'put ''aXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLXN1Y2Nlc3MsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXN1Y2Nlc3MuYnRuLC5idG4tc3VjY2VzcyAuYnRuLC5idG4tc3VjY2VzcyAuYWxlcnQtYXBw''@;'; put 'put ''LWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXN1Y2Nlc3MgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtYmctY29s''@;'; put 'put ''b3IpO2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1jb2xvcil9LmJ0bi5idG4tc3VjY2VzcyBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc3VjY2Vzcy5idG4gY2RzLWljb24sLmJ0bi5idG4tc3VjY2VzcyBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5h''@;'; put 'put ''bGVydC1pdGVtIC5idG4tc3VjY2Vzcy5idG4gY2xyLWljb24sLmJ0bi1zdWNjZXNzIC5idG4gY2RzLWljb24sLmJ0bi1zdWNjZXNzIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc3VjY2VzcyAuYnRu''@;'; put 'put ''IGNkcy1pY29uLC5idG4tc3VjY2VzcyAuYnRuIGNsci1pY29uLC5idG4tc3VjY2VzcyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXN1Y2Nlc3MgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YnRuLXN1Y2Nlc3MtY29sb3IpfS5idG4uYnRuLXN1Y2Nlc3M6aG92ZXIsLmJ0bi1zdWNjZXNzIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1ob3Zlci1jb2xvcil9LmJ0''@;'; put 'put ''bi5idG4tc3VjY2Vzczpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1zdWNjZXNzOmhvdmVyIGNsci1pY29uLC5idG4tc3VjY2VzcyAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tc3VjY2VzcyAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1ob3Zlci1jb2xv''@;'; put 'put ''cil9LmJ0bi5idG4tc3VjY2VzczphY3RpdmUsLmJ0bi1zdWNjZXNzIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tc3VjY2Vz''@;'; put 'put ''czphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tc3VjY2VzczphY3RpdmUgY2xyLWljb24sLmJ0bi1zdWNjZXNzIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tc3VjY2VzcyAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtYWN0aXZlLWNvbG9yKX0uYnRu''@;'; put 'put ''LmJ0bi1zdWNjZXNzLmRpc2FibGVkLC5idG4uYnRuLXN1Y2Nlc3M6ZGlzYWJsZWQsLmJ0bi1zdWNjZXNzIC5idG4uZGlzYWJsZWQsLmJ0bi1zdWNjZXNzIC5idG46ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7''@;'; put 'put ''YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtZGlzYWJsZWQtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0uYnRuLmJ0bi1zdWNjZXNzLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLXN1Y2Nl''@;'; put 'put ''c3MuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tc3VjY2VzczpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1zdWNjZXNzOmRpc2FibGVkIGNsci1pY29uLC5idG4tc3VjY2VzcyAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tc3VjY2VzcyAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5i''@;'; put 'put ''dG4tc3VjY2VzcyAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tc3VjY2VzcyAuYnRuOmRpc2FibGVkIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1kaXNhYmxlZC1jb2xvcil9LmJ0bi5idG4td2FybmluZywuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4t''@;'; put 'put ''d2FybmluZy5idG4sLmJ0bi13YXJuaW5nIC5idG4sLmJ0bi13YXJuaW5nIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4td2FybmluZyAuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctYm9yZGVy''@;'; put 'put ''LWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJuaW5nLmJ0biBj''@;'; put 'put ''ZHMtaWNvbiwuYnRuLmJ0bi13YXJuaW5nIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJuaW5nLmJ0biBjbHItaWNvbiwuYnRuLXdhcm5pbmcgLmJ0biBjZHMtaWNvbiwuYnRuLXdhcm5pbmcgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNk''@;'; put 'put ''cy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJuaW5nIC5idG4gY2RzLWljb24sLmJ0bi13YXJuaW5nIC5idG4gY2xyLWljb24sLmJ0bi13YXJuaW5nIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5h''@;'; put 'put ''bGVydC1pdGVtIC5idG4td2FybmluZyAuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1jb2xvcil9LmJ0bi5idG4td2FybmluZzpob3ZlciwuYnRuLXdhcm5pbmcgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1ob3Zlci1i''@;'; put 'put ''Zy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLXdhcm5pbmc6aG92ZXIgY2xyLWljb24sLmJ0bi13YXJuaW5nIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi13YXJuaW5nIC5idG46''@;'; put 'put ''aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nOmFjdGl2ZSwuYnRuLXdhcm5pbmcgLmJ0bjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctYWN0aXZlLWJnLWNvbG9yKTtjb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYnRuLXdhcm5pbmctYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi13YXJuaW5nOmFjdGl2ZSBjbHItaWNvbiwuYnRuLXdhcm5pbmcgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi13YXJuaW5nIC5idG46YWN0aXZlIGNs''@;'; put 'put ''ci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1hY3RpdmUtY29sb3IpfS5idG4uYnRuLXdhcm5pbmcuZGlzYWJsZWQsLmJ0bi5idG4td2FybmluZzpkaXNhYmxlZCwuYnRuLXdhcm5pbmcgLmJ0bi5kaXNhYmxlZCwuYnRuLXdhcm5pbmcgLmJ0bjpkaXNhYmxlZHtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYnRuLXdhcm5pbmctZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1kaXNhYmxlZC1ib3JkZXItY29s''@;'; put 'put ''b3IpfS5idG4uYnRuLXdhcm5pbmcuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4td2FybmluZy5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi13YXJuaW5nOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLXdhcm5pbmc6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi13YXJuaW5nIC5idG4uZGlz''@;'; put 'put ''YWJsZWQgY2RzLWljb24sLmJ0bi13YXJuaW5nIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi13YXJuaW5nIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi13YXJuaW5nIC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLWRpc2FibGVkLWNvbG9y''@;'; put 'put ''KX0uYnRuLmJ0bi1kYW5nZXIsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWRhbmdlci5idG4sLmJ0bi1kYW5nZXIgLmJ0biwuYnRuLWRhbmdlciAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWRhbmdl''@;'; put 'put ''ciAuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWNvbG9yKX0uYnRuLmJ0bi1kYW5nZXIgY2RzLWljb24sLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWRhbmdlci5idG4gY2RzLWljb24sLmJ0bi5idG4tZGFuZ2VyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1kYW5nZXIuYnRuIGNsci1pY29uLC5idG4tZGFuZ2VyIC5idG4gY2RzLWljb24sLmJ0bi1kYW5n''@;'; put 'put ''ZXIgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1kYW5nZXIgLmJ0biBjZHMtaWNvbiwuYnRuLWRhbmdlciAuYnRuIGNsci1pY29uLC5idG4tZGFuZ2VyIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0''@;'; put 'put ''ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tZGFuZ2VyIC5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItY29sb3IpfS5idG4uYnRuLWRhbmdlcjpob3ZlciwuYnRuLWRhbmdlciAuYnRuOmhvdmVye2JhY2tncm91bmQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1kYW5nZXI6aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tZGFuZ2VyOmhvdmVyIGNsci1pY29uLC5idG4tZGFuZ2VyIC5idG46aG92ZXIg''@;'; put 'put ''Y2RzLWljb24sLmJ0bi1kYW5nZXIgLmJ0bjpob3ZlciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1ob3Zlci1jb2xvcil9LmJ0bi5idG4tZGFuZ2VyOmFjdGl2ZSwuYnRuLWRhbmdlciAuYnRuOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2Vy''@;'; put 'put ''LWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1kYW5nZXI6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLWRhbmdlcjphY3RpdmUgY2xyLWljb24sLmJ0bi1kYW5nZXIgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1kYW5n''@;'; put 'put ''ZXIgLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1kYW5nZXIuZGlzYWJsZWQsLmJ0bi5idG4tZGFuZ2VyOmRpc2FibGVkLC5idG4tZGFuZ2VyIC5idG4uZGlzYWJsZWQsLmJ0bi1kYW5nZXIgLmJ0bjpkaXNhYmxl''@;'; put 'put ''ZHtjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItZGlzYWJsZWQtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1kaXNhYmxlZC1i''@;'; put 'put ''b3JkZXItY29sb3IpfS5idG4uYnRuLWRhbmdlci5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1kYW5nZXIuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tZGFuZ2VyOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWRhbmdlcjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLWRhbmdlciAuYnRu''@;'; put 'put ''LmRpc2FibGVkIGNkcy1pY29uLC5idG4tZGFuZ2VyIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1kYW5nZXIgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWRhbmdlciAuYnRuOmRpc2FibGVkIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLWRpc2FibGVkLWNvbG9y''@;'; put 'put ''KX0uYnRuLmJ0bi1uZXV0cmFsLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1uZXV0cmFsLmJ0biwuYnRuLW5ldXRyYWwgLmJ0biwuYnRuLW5ldXRyYWwgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1u''@;'; put 'put ''ZXV0cmFsIC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtY29sb3IpfS5idG4uYnRuLW5ldXRyYWwgY2Rz''@;'; put 'put ''LWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW5ldXRyYWwuYnRuIGNkcy1pY29uLC5idG4uYnRuLW5ldXRyYWwgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW5ldXRyYWwuYnRuIGNsci1pY29uLC5idG4tbmV1dHJhbCAuYnRuIGNkcy1p''@;'; put 'put ''Y29uLC5idG4tbmV1dHJhbCAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW5ldXRyYWwgLmJ0biBjZHMtaWNvbiwuYnRuLW5ldXRyYWwgLmJ0biBjbHItaWNvbiwuYnRuLW5ldXRyYWwgLmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1uZXV0cmFsIC5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWNvbG9yKX0uYnRuLmJ0bi1uZXV0cmFsOmhvdmVyLC5idG4tbmV1dHJhbCAuYnRu''@;'; put 'put ''OmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtaG92ZXItY29sb3IpfS5idG4uYnRuLW5ldXRyYWw6aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tbmV1dHJhbDpob3ZlciBjbHItaWNv''@;'; put 'put ''biwuYnRuLW5ldXRyYWwgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLW5ldXRyYWwgLmJ0bjpob3ZlciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtaG92ZXItY29sb3IpfS5idG4uYnRuLW5ldXRyYWw6YWN0aXZlLC5idG4tbmV1dHJhbCAuYnRuOmFjdGl2ZXtiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1hY3RpdmUtY29sb3IpfS5idG4uYnRuLW5ldXRyYWw6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLW5ldXRyYWw6YWN0aXZlIGNsci1pY29uLC5idG4tbmV1''@;'; put 'put ''dHJhbCAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLW5ldXRyYWwgLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbC5kaXNhYmxlZCwuYnRuLmJ0bi1uZXV0cmFsOmRpc2FibGVkLC5idG4tbmV1dHJh''@;'; put 'put ''bCAuYnRuLmRpc2FibGVkLC5idG4tbmV1dHJhbCAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWRpc2FibGVkLWJnLWNvbG9yKTti''@;'; put 'put ''b3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbC5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1uZXV0cmFsLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLW5ldXRyYWw6ZGlzYWJsZWQgY2RzLWljb24sLmJ0''@;'; put 'put ''bi5idG4tbmV1dHJhbDpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLW5ldXRyYWwgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW5ldXRyYWwgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLW5ldXRyYWwgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW5ldXRyYWwgLmJ0bjpkaXNhYmxl''@;'; put 'put ''ZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLW91dGxpbmUsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUuYnRuLC5idG4uYnRuLW91dGxpbmUgLmJ0biwuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGlu''@;'; put 'put ''ZSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc2Vjb25kYXJ5LW91dGxpbmUuYnRuLC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5LC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5idG4sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAu''@;'; put 'put ''YnRuLC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0biwuYnRuLW91dGxpbmUtc2Vjb25k''@;'; put 'put ''YXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0biwuYnRuLW91dGxpbmUgLmJ0biwuYnRuLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lIC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1iZy1jb2xvcik7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtY29sb3IpfS5idG4uYnRuLW91dGxpbmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUuYnRuIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQt''@;'; put 'put ''aXRlbSAuYnRuLW91dGxpbmUuYnRuIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXNl''@;'; put 'put ''Y29uZGFyeS1vdXRsaW5lLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc2Vjb25kYXJ5LW91dGxpbmUuYnRuIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGNkcy1pY29u''@;'; put 'put ''LC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5idG4gY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmJ0biBjbHItaWNv''@;'; put 'put ''biwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG4gY2Rz''@;'; put 'put ''LWljb24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRu''@;'; put 'put ''IGNsci1pY29uLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0biBjZHMtaWNvbiwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1zZWNvbmRhcnkg''@;'; put 'put ''LmJ0biBjZHMtaWNvbiwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtc2Vjb25k''@;'; put 'put ''YXJ5IC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4tb3V0''@;'; put 'put ''bGluZSAuYnRuIGNsci1pY29uLC5idG4tb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGlu''@;'; put 'put ''ZS1jb2xvcil9LmJ0bi5idG4tb3V0bGluZTpob3ZlciwuYnRuLmJ0bi1vdXRsaW5lIC5idG46aG92ZXIsLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6aG92ZXIsLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6aG92ZXIsLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuOmhvdmVyLC5idG4t''@;'; put 'put ''b3V0bGluZS1zZWNvbmRhcnkgLmJ0bjpob3ZlciwuYnRuLW91dGxpbmUgLmJ0bjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1ob3Zlci1jb2xvcil9''@;'; put 'put ''LmJ0bi5idG4tb3V0bGluZTpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lOmhvdmVyIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lIC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6''@;'; put 'put ''aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6aG92ZXIgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6aG92ZXIgY2xyLWljb24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAu''@;'; put 'put ''YnRuOmhvdmVyIGNkcy1pY29uLC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRuOmhvdmVyIGNsci1pY29uLC5idG4tb3V0bGluZSAuYnRu''@;'; put 'put ''OmhvdmVyIGNkcy1pY29uLC5idG4tb3V0bGluZSAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1vdXRsaW5lOmFjdGl2ZSwuYnRuLmJ0bi1vdXRsaW5lIC5idG46YWN0aXZlLC5idG4uYnRuLXNlY29u''@;'; put 'put ''ZGFyeS1vdXRsaW5lOmFjdGl2ZSwuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTphY3RpdmUsLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuOmFjdGl2ZSwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG46YWN0aXZlLC5idG4tb3V0bGluZSAuYnRuOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1idG4tZGVmYXVsdC1vdXRsaW5lLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1vdXRsaW5lOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lOmFjdGl2ZSBjbHItaWNvbiwu''@;'; put 'put ''YnRuLmJ0bi1vdXRsaW5lIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUgLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lOmFjdGl2ZSBjbHItaWNvbiwuYnRu''@;'; put 'put ''LmJ0bi1vdXRsaW5lLXNlY29uZGFyeTphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnk6YWN0aXZlIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAuYnRuOmFjdGl2ZSBjbHIt''@;'; put 'put ''aWNvbiwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0bi1vdXRsaW5lIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4tb3V0bGluZSAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLW91dGxpbmUuZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lIC5idG4uZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZSAuYnRuOmRpc2FibGVkLC5idG4u''@;'; put 'put ''YnRuLXNlY29uZGFyeS1vdXRsaW5lLmRpc2FibGVkLC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lOmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkLC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0''@;'; put 'put ''bi5kaXNhYmxlZCwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG46ZGlzYWJsZWQsLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRuLmRpc2FibGVkLC5idG4tb3V0bGluZS1zZWNvbmRhcnkgLmJ0bjpkaXNhYmxlZCwuYnRuLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCwuYnRuLW91dGxpbmUgLmJ0''@;'; put 'put ''bjpkaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtZGlzYWJsZWQtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYnRuLWRlZmF1bHQtb3V0bGluZS1kaXNhYmxlZC1ib3JkZXItY29sb3IpfS5idG4uYnRuLW91dGxpbmUuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW91''@;'; put 'put ''dGxpbmU6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZSAuYnRu''@;'; put 'put ''OmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLXNl''@;'; put 'put ''Y29uZGFyeS1vdXRsaW5lOmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkIGNkcy1p''@;'; put 'put ''Y29uLC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkIGNsci1pY29uLC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLXNlY29uZGFyeS1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1zZWNvbmRhcnktb3V0bGluZSAu''@;'; put 'put ''YnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tc2Vjb25kYXJ5LW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4t''@;'; put 'put ''b3V0bGluZS1zZWNvbmRhcnkgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUtc2Vjb25kYXJ5IC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1v''@;'; put 'put ''dXRsaW5lIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LW91dGxpbmUtZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLXByaW1hcnktb3V0bGluZSwuYWxlcnQtYXBwLWxldmVsIC5hbGVy''@;'; put 'put ''dC1pdGVtIC5idG4tcHJpbWFyeS1vdXRsaW5lLmJ0biwuYnRuLW91dGxpbmUtaW5mbyAuYnRuLC5idG4tb3V0bGluZS1pbmZvIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1pbmZvIC5idG4sLmJ0bi1p''@;'; put 'put ''bmZvLW91dGxpbmUgLmJ0biwuYnRuLWluZm8tb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWluZm8tb3V0bGluZSAuYnRuLC5idG4tcHJpbWFyeS1vdXRsaW5lIC5idG4sLmJ0bi1wcmltYXJ5LW91dGxp''@;'; put 'put ''bmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0biwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuLC5idG4tb3V0bGluZS1wcmltYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0''@;'; put 'put ''ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG4sLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLXByaW1hcnkuYnRuLC5idG4uYnRuLW91dGxpbmUtaW5mbywu''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1pbmZvLmJ0biwuYnRuLmJ0bi1pbmZvLW91dGxpbmUsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWluZm8tb3V0bGluZS5idG4sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5i''@;'; put 'put ''dG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtY29sb3IpfS5idG4u''@;'; put 'put ''YnRuLXByaW1hcnktb3V0bGluZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tcHJpbWFyeS1vdXRsaW5lLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXByaW1h''@;'; put 'put ''cnktb3V0bGluZS5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lLWluZm8gLmJ0biBjZHMtaWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtaW5mbyAu''@;'; put 'put ''YnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS1pbmZvIC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lLWluZm8gLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLWluZm8gLmJ0biBjbHItaWNv''@;'; put 'put ''biwuYnRuLWluZm8tb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4taW5mby1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW5mby1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi1pbmZv''@;'; put 'put ''LW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWluZm8tb3V0bGluZSAuYnRuIGNsci1pY29uLC5idG4tcHJpbWFyeS1vdXRsaW5l''@;'; put 'put ''IC5idG4gY2RzLWljb24sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLXByaW1hcnktb3V0bGluZSAu''@;'; put 'put ''YnRuIGNsci1pY29uLC5idG4tcHJpbWFyeS1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tcHJpbWFyeS1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0''@;'; put 'put ''biBjZHMtaWNvbiwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG4g''@;'; put 'put ''Y2xyLWljb24sLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0biBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgY2Rz''@;'; put 'put ''LWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtcHJpbWFyeS5idG4gY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLXByaW1hcnkuYnRuIGNsci1pY29u''@;'; put 'put ''LC5idG4uYnRuLW91dGxpbmUtaW5mbyBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1pbmZvLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWluZm8gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUt''@;'; put 'put ''aW5mby5idG4gY2xyLWljb24sLmJ0bi5idG4taW5mby1vdXRsaW5lIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1pbmZvLW91dGxpbmUuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5i''@;'; put 'put ''dG4uYnRuLWluZm8tb3V0bGluZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4taW5mby1vdXRsaW5lLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXBy''@;'; put 'put ''aW1hcnktb3V0bGluZS1jb2xvcil9LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lOmhvdmVyLC5idG4tb3V0bGluZS1pbmZvIC5idG46aG92ZXIsLmJ0bi1pbmZvLW91dGxpbmUgLmJ0bjpob3ZlciwuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuOmhvdmVyLC5idG4tb3V0bGluZS1wcmltYXJ5IC5i''@;'; put 'put ''dG46aG92ZXIsLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5OmhvdmVyLC5idG4uYnRuLW91dGxpbmUtaW5mbzpob3ZlciwuYnRuLmJ0bi1pbmZvLW91dGxpbmU6aG92ZXIsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLXByaW1hcnktb3V0bGluZTpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6aG92ZXIg''@;'; put 'put ''Y2xyLWljb24sLmJ0bi1vdXRsaW5lLWluZm8gLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYnRuOmhvdmVyIGNsci1pY29uLC5idG4taW5mby1vdXRsaW5lIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1pbmZvLW91dGxpbmUgLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRu''@;'; put 'put ''LXByaW1hcnktb3V0bGluZSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tcHJpbWFyeS1vdXRsaW5lIC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuOmhvdmVyIGNsci1pY29uLC5idG4u''@;'; put 'put ''YnRuLW91dGxpbmUtcHJpbWFyeTpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6aG92ZXIgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1pbmZvOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtaW5mbzpob3ZlciBjbHItaWNvbiwuYnRuLmJ0bi1pbmZvLW91''@;'; put 'put ''dGxpbmU6aG92ZXIgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi5idG4taW5mby1vdXRsaW5lOmhvdmVyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuYnRuOmhv''@;'; put 'put ''dmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6YWN0aXZlLC5idG4tb3V0bGluZS1pbmZvIC5idG46YWN0aXZlLC5idG4taW5mby1vdXRsaW5lIC5idG46YWN0aXZlLC5idG4tcHJpbWFy''@;'; put 'put ''eS1vdXRsaW5lIC5idG46YWN0aXZlLC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG46YWN0aXZlLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTphY3RpdmUsLmJ0bi5idG4tb3V0bGluZS1pbmZvOmFjdGl2ZSwuYnRuLmJ0bi1pbmZvLW91dGxpbmU6YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwuYWxl''@;'; put 'put ''cnQtaW5mbyAuYWxlcnQtaXRlbSAuYnRuOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1wcmltYXJ5LW91''@;'; put 'put ''dGxpbmU6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLXByaW1hcnktb3V0bGluZTphY3RpdmUgY2xyLWljb24sLmJ0bi1vdXRsaW5lLWluZm8gLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1vdXRsaW5lLWluZm8gLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0bi1pbmZvLW91dGxpbmUgLmJ0bjph''@;'; put 'put ''Y3RpdmUgY2RzLWljb24sLmJ0bi1pbmZvLW91dGxpbmUgLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0bjph''@;'; put 'put ''Y3RpdmUgY2RzLWljb24sLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5OmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6YWN0aXZlIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtaW5mbzphY3Rp''@;'; put 'put ''dmUgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1pbmZvOmFjdGl2ZSBjbHItaWNvbiwuYnRuLmJ0bi1pbmZvLW91dGxpbmU6YWN0aXZlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1pbmZvLW91''@;'; put 'put ''dGxpbmU6YWN0aXZlIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxl''@;'; put 'put ''ZCwuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6ZGlzYWJsZWQsLmJ0bi1vdXRsaW5lLWluZm8gLmJ0bi5kaXNhYmxlZCwuYnRuLW91dGxpbmUtaW5mbyAuYnRuOmRpc2FibGVkLC5idG4taW5mby1vdXRsaW5lIC5idG4uZGlzYWJsZWQsLmJ0bi1pbmZvLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCwu''@;'; put 'put ''YnRuLXByaW1hcnktb3V0bGluZSAuYnRuLmRpc2FibGVkLC5idG4tcHJpbWFyeS1vdXRsaW5lIC5idG46ZGlzYWJsZWQsLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0bi5kaXNhYmxlZCwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuOmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeS5k''@;'; put 'put ''aXNhYmxlZCwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1pbmZvLmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCwuYnRuLmJ0bi1pbmZvLW91dGxpbmUuZGlzYWJsZWQsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5h''@;'; put 'put ''bGVydC1pdGVtIC5idG4uZGlzYWJsZWQsLmJ0bi5idG4taW5mby1vdXRsaW5lOmRpc2FibGVkLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWRpc2FibGVkLWNvbG9yKTtjdXJz''@;'; put 'put ''b3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXByaW1hcnktb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1vdXRsaW5lLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tcHJpbWFyeS1v''@;'; put 'put ''dXRsaW5lLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lOmRpc2FibGVkIGNsci1pY29uLC5idG4tb3V0bGlu''@;'; put 'put ''ZS1pbmZvIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLWluZm8gLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLW91dGxpbmUtaW5mbyAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tb3V0bGluZS1pbmZvIC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1pbmZvLW91''@;'; put 'put ''dGxpbmUgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWluZm8tb3V0bGluZSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4taW5mby1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1pbmZvLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLXByaW1hcnkt''@;'; put 'put ''b3V0bGluZSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tcHJpbWFyeS1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1wcmltYXJ5LW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLXByaW1hcnktb3V0bGluZSAuYnRuOmRpc2FibGVkIGNsci1pY29uLC5i''@;'; put 'put ''dG4tb3V0bGluZS1wcmltYXJ5IC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLXByaW1hcnkgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLW91dGxpbmUtcHJpbWFyeSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tb3V0bGluZS1wcmltYXJ5IC5idG46ZGlzYWJsZWQg''@;'; put 'put ''Y2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeS5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5OmRp''@;'; put 'put ''c2FibGVkIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWluZm8uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1pbmZvOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxl''@;'; put 'put ''ZCBjbHItaWNvbiwuYnRuLmJ0bi1pbmZvLW91dGxpbmUuZGlzYWJsZWQgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4taW5mby1vdXRsaW5lLmRpc2FibGVkIGNsci1pY29uLC5hbGVydC1hcHAt''@;'; put 'put ''bGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLWluZm8tb3V0bGluZTpkaXNhYmxlZCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1p''@;'; put 'put ''bmZvLW91dGxpbmU6ZGlzYWJsZWQgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LW91dGxpbmUtZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLXN1Y2Nlc3Mtb3V0''@;'; put 'put ''bGluZSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc3VjY2Vzcy1vdXRsaW5lLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLmJ0biwuYnRuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRu''@;'; put 'put ''LW91dGxpbmUtc3VjY2Vzcy5idG4sLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0biwuYnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYnRuLC5idG4tb3V0''@;'; put 'put ''bGluZS1zdWNjZXNzIC5idG4sLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91''@;'; put 'put ''dGxpbmUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1jb2xvcil9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lIGNkcy1pY29uLC5hbGVydC1hcHAt''@;'; put 'put ''bGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zdWNjZXNzLW91dGxpbmUuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVy''@;'; put 'put ''dC1pdGVtIC5idG4tc3VjY2Vzcy1vdXRsaW5lLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRu''@;'; put 'put ''LW91dGxpbmUtc3VjY2Vzcy5idG4gY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuYnRuIGNsci1pY29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0''@;'; put 'put ''bi1zdWNjZXNzLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYnRuIGNsci1pY29uLC5idG4t''@;'; put 'put ''c3VjY2Vzcy1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0biBjZHMtaWNvbiwuYnRuLW91''@;'; put 'put ''dGxpbmUtc3VjY2VzcyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG4gY2xyLWljb24sLmJ0bi1vdXRs''@;'; put 'put ''aW5lLXN1Y2Nlc3MgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1jb2xvcil9LmJ0''@;'; put 'put ''bi5idG4tc3VjY2Vzcy1vdXRsaW5lOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAuYnRuOmhvdmVyLC5idG4uYnRuLW91dGxpbmUtc3VjY2Vzczpob3ZlciwuYnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYnRuOmhvdmVyLC5idG4tb3V0bGluZS1zdWNjZXNz''@;'; put 'put ''IC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZTpob3ZlciBjZHMtaWNvbiwu''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmU6aG92ZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtIC5idG46aG92ZXIgY2xyLWljb24s''@;'; put 'put ''LmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtc3VjY2Vzczpob3ZlciBjbHItaWNvbiwuYnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG46aG92ZXIgY2xyLWljb24sLmJ0''@;'; put 'put ''bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmU6YWN0aXZlLC5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAuYnRuOmFjdGl2ZSwuYnRuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6YWN0aXZlLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG46YWN0aXZlLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZTphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNj''@;'; put 'put ''ZXNzIC5hbGVydC1pdGVtIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZTphY3RpdmUgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtIC5idG46YWN0aXZlIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtc3VjY2Vz''@;'; put 'put ''czphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzOmFjdGl2ZSBjbHItaWNvbiwuYnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLW91dGxpbmUtc3VjY2VzcyAu''@;'; put 'put ''YnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLXN1Y2Nlc3Mtb3V0bGluZS5kaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsLmFs''@;'; put 'put ''ZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLmJ0bi5kaXNhYmxlZCwuYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmU6ZGlzYWJsZWQsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzLmRpc2FibGVkLC5i''@;'; put 'put ''dG4uYnRuLW91dGxpbmUtc3VjY2VzczpkaXNhYmxlZCwuYnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYnRuLmRpc2FibGVkLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG46ZGlzYWJsZWQsLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0bi5kaXNhYmxlZCwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuOmRp''@;'; put 'put ''c2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3Mtb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1idG4tc3VjY2Vzcy1vdXRsaW5lLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lLmRpc2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLXN1''@;'; put 'put ''Y2Nlc3Mtb3V0bGluZS5kaXNhYmxlZCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmU6ZGlzYWJsZWQgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1z''@;'; put 'put ''dWNjZXNzIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lOmRpc2FibGVkIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbSAuYnRuOmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLW91dGxp''@;'; put 'put ''bmUtc3VjY2Vzcy5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1zdWNjZXNzOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtc3VjY2VzczpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLXN1''@;'; put 'put ''Y2Nlc3Mtb3V0bGluZSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tc3VjY2Vzcy1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1zdWNjZXNzLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLXN1Y2Nlc3Mtb3V0bGluZSAuYnRuOmRpc2FibGVkIGNsci1p''@;'; put 'put ''Y29uLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLW91dGxpbmUtc3VjY2VzcyAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tb3V0bGluZS1zdWNjZXNzIC5idG46ZGlz''@;'; put 'put ''YWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLXdhcm5pbmctb3V0bGluZSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4td2FybmluZy1vdXRsaW5lLmJ0biwuYWxlcnQtYXBwLWxldmVsLmFs''@;'; put 'put ''ZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0biwuYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmcsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtd2FybmluZy5idG4sLmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0biwuYnRuLXdhcm5pbmctb3V0bGluZSAuYWxlcnQtYXBw''@;'; put 'put ''LWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLXdhcm5pbmctb3V0bGluZSAuYnRuLC5idG4tb3V0bGluZS13YXJuaW5nIC5idG4sLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWJnLWNvbG9yKTtj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1jb2xvcil9LmJ0bi5idG4td2FybmluZy1vdXRsaW5lIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi13YXJuaW5nLW91dGxpbmUuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2Fy''@;'; put 'put ''bmluZyAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5idG4uYnRuLXdhcm5pbmctb3V0bGluZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4td2FybmluZy1vdXRsaW5lLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0''@;'; put 'put ''LWl0ZW0gLmJ0biBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmcgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtd2FybmluZy5idG4gY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nIGNsci1pY29uLC5hbGVydC1hcHAtbGV2''@;'; put 'put ''ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLXdhcm5pbmcuYnRuIGNsci1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi13YXJuaW5nLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwg''@;'; put 'put ''LmFsZXJ0LWl0ZW0gLmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLXdhcm5pbmctb3V0bGluZSAuYnRuIGNsci1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5h''@;'; put 'put ''bGVydC1pdGVtIC5idG4td2FybmluZy1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0biBjZHMtaWNvbiwuYnRuLW91dGxpbmUtd2FybmluZyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxl''@;'; put 'put ''cnQtaXRlbSAuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS13YXJuaW5nIC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0''@;'; put 'put ''LWl0ZW0gLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1jb2xvcil9LmJ0bi5idG4td2FybmluZy1vdXRsaW5lOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbSAuYnRuOmhv''@;'; put 'put ''dmVyLC5idG4uYnRuLW91dGxpbmUtd2FybmluZzpob3ZlciwuYnRuLXdhcm5pbmctb3V0bGluZSAuYnRuOmhvdmVyLC5idG4tb3V0bGluZS13YXJuaW5nIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1ob3Zlci1iZy1jb2xvcik7Y29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLXdhcm5pbmctb3V0bGluZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi13YXJuaW5n''@;'; put 'put ''LW91dGxpbmU6aG92ZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtd2FybmluZzpob3ZlciBjbHItaWNv''@;'; put 'put ''biwuYnRuLXdhcm5pbmctb3V0bGluZSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuOmhvdmVyIGNsci1pY29u''@;'; put 'put ''e2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi13YXJuaW5nLW91dGxpbmU6YWN0aXZlLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbSAuYnRuOmFjdGl2ZSwuYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmc6YWN0''@;'; put 'put ''aXZlLC5idG4td2FybmluZy1vdXRsaW5lIC5idG46YWN0aXZlLC5idG4tb3V0bGluZS13YXJuaW5nIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0''@;'; put 'put ''bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLXdhcm5pbmctb3V0bGluZTphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5idG46YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLXdhcm5pbmctb3V0bGluZTphY3RpdmUgY2xyLWljb24s''@;'; put 'put ''LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5idG46YWN0aXZlIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtd2FybmluZzphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nOmFjdGl2ZSBjbHItaWNvbiwuYnRuLXdhcm5pbmctb3V0bGlu''@;'; put 'put ''ZSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLXdhcm5pbmctb3V0bGluZSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YnRuLXdhcm5pbmctb3V0bGluZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLXdhcm5pbmctb3V0bGluZS5kaXNhYmxlZCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0bi5kaXNhYmxlZCwuYnRuLmJ0bi13YXJuaW5nLW91dGxpbmU6ZGlzYWJsZWQsLmFsZXJ0''@;'; put 'put ''LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQsLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nLmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUtd2FybmluZzpkaXNhYmxlZCwuYnRuLXdhcm5pbmctb3V0bGluZSAuYnRuLmRpc2FibGVkLC5idG4td2Fybmlu''@;'; put 'put ''Zy1vdXRsaW5lIC5idG46ZGlzYWJsZWQsLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0bi5kaXNhYmxlZCwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7''@;'; put 'put ''YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1vdXRsaW5lLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4td2FybmluZy1vdXRsaW5lLmRpc2FibGVk''@;'; put 'put ''IGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLXdhcm5pbmctb3V0bGluZS5kaXNhYmxlZCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLmJ0''@;'; put 'put ''bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi13YXJuaW5nLW91dGxpbmU6ZGlzYWJsZWQgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4td2FybmluZy1vdXRsaW5lOmRpc2FibGVkIGNs''@;'; put 'put ''ci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbSAuYnRuOmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtd2FybmluZy5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLXdhcm5pbmcuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5i''@;'; put 'put ''dG4tb3V0bGluZS13YXJuaW5nOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtd2FybmluZzpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLXdhcm5pbmctb3V0bGluZSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4td2FybmluZy1vdXRsaW5lIC5idG4uZGlzYWJsZWQgY2xyLWlj''@;'; put 'put ''b24sLmJ0bi13YXJuaW5nLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLXdhcm5pbmctb3V0bGluZSAuYnRuOmRpc2FibGVkIGNsci1pY29uLC5idG4tb3V0bGluZS13YXJuaW5nIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1vdXRsaW5lLXdhcm5pbmcgLmJ0bi5kaXNh''@;'; put 'put ''YmxlZCBjbHItaWNvbiwuYnRuLW91dGxpbmUtd2FybmluZyAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tb3V0bGluZS13YXJuaW5nIC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLWRh''@;'; put 'put ''bmdlci1vdXRsaW5lLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1kYW5nZXItb3V0bGluZS5idG4sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0biwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlciwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVt''@;'; put 'put ''IC5idG4tb3V0bGluZS1kYW5nZXIuYnRuLC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0biwuYnRuLWRhbmdlci1vdXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0biwuYnRuLW91''@;'; put 'put ''dGxpbmUtZGFuZ2VyIC5idG4sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxp''@;'; put 'put ''bmUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtY29sb3IpfS5idG4uYnRuLWRhbmdlci1vdXRsaW5lIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwg''@;'; put 'put ''LmFsZXJ0LWl0ZW0gLmJ0bi1kYW5nZXItb3V0bGluZS5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1kYW5nZXItb3V0bGluZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5i''@;'; put 'put ''dG4tZGFuZ2VyLW91dGxpbmUuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1kYW5nZXIgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW91dGxpbmUtZGFu''@;'; put 'put ''Z2VyLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlciBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1kYW5nZXIuYnRuIGNsci1pY29uLC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLWRhbmdlci1vdXRsaW5l''@;'; put 'put ''IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0biBjZHMtaWNvbiwuYnRuLWRhbmdlci1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1kYW5nZXItb3V0bGluZSAuYWxl''@;'; put 'put ''cnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWRhbmdlci1vdXRsaW5lIC5idG4gY2xyLWljb24sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS1kYW5nZXIgLmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuIGNkcy1pY29uLC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0biBjbHItaWNvbiwuYnRuLW91dGxpbmUtZGFuZ2VyIC5hbGVydC1hcHAtbGV2''@;'; put 'put ''ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWNvbG9yKX0uYnRuLmJ0bi1kYW5nZXItb3V0bGluZTpob3Zlciwu''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAuYnRuOmhvdmVyLC5idG4uYnRuLW91dGxpbmUtZGFuZ2VyOmhvdmVyLC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0bjpob3ZlciwuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1kYW5nZXItb3V0bGluZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQt''@;'; put 'put ''aXRlbSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4uYnRuLWRhbmdlci1vdXRsaW5lOmhvdmVyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5idG46aG92ZXIgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1kYW5nZXI6aG92ZXIgY2RzLWljb24s''@;'; put 'put ''LmJ0bi5idG4tb3V0bGluZS1kYW5nZXI6aG92ZXIgY2xyLWljb24sLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuOmhvdmVyIGNkcy1pY29uLC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0bjpob3ZlciBjbHItaWNvbiwuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1v''@;'; put 'put ''dXRsaW5lLWRhbmdlciAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtaG92ZXItY29sb3IpfS5idG4uYnRuLWRhbmdlci1vdXRsaW5lOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAuYnRuOmFjdGl2''@;'; put 'put ''ZSwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlcjphY3RpdmUsLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuOmFjdGl2ZSwuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1hY3RpdmUtYmctY29sb3IpO2NvbG9y''@;'; put 'put ''OnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1kYW5nZXItb3V0bGluZTphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tZGFuZ2VyLW91''@;'; put 'put ''dGxpbmU6YWN0aXZlIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5idG46YWN0aXZlIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtZGFuZ2VyOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLWRhbmdlcjphY3RpdmUgY2xyLWljb24s''@;'; put 'put ''LmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLWRhbmdlci1vdXRsaW5lIC5idG46YWN0aXZlIGNsci1pY29uLC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuOmFjdGl2ZSBjbHItaWNvbntj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tZGFuZ2VyLW91dGxpbmUuZGlzYWJsZWQsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0bi5kaXNhYmxlZCwuYnRuLmJ0bi1kYW5nZXItb3V0bGluZTpkaXNh''@;'; put 'put ''YmxlZCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAuYnRuOmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUtZGFuZ2VyLmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUtZGFuZ2VyOmRpc2FibGVkLC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCwuYnRu''@;'; put 'put ''LWRhbmdlci1vdXRsaW5lIC5idG46ZGlzYWJsZWQsLmJ0bi1vdXRsaW5lLWRhbmdlciAuYnRuLmRpc2FibGVkLC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0bjpkaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93''@;'; put 'put ''ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1kaXNhYmxlZC1ib3JkZXItY29sb3IpfS5idG4uYnRuLWRhbmdlci1vdXRsaW5lLmRpc2FibGVk''@;'; put 'put ''IGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tZGFuZ2VyLW91dGxpbmUuZGlzYWJsZWQgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW0gLmJ0bi5k''@;'; put 'put ''aXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1kYW5nZXItb3V0bGluZTpkaXNhYmxlZCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWRhbmdlci1vdXRsaW5lOmRpc2FibGVkIGNsci1pY29u''@;'; put 'put ''LC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5idG46ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1kYW5nZXIuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1kYW5nZXIuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tb3V0bGlu''@;'; put 'put ''ZS1kYW5nZXI6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1kYW5nZXI6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tZGFuZ2VyLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLWRhbmdl''@;'; put 'put ''ci1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1kYW5nZXItb3V0bGluZSAuYnRuOmRpc2FibGVkIGNsci1pY29uLC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUtZGFuZ2VyIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0''@;'; put 'put ''bi1vdXRsaW5lLWRhbmdlciAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tb3V0bGluZS1kYW5nZXIgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1vdXRsaW5lLWRpc2FibGVkLWNvbG9yKX0uYnRuLmJ0bi1uZXV0cmFsLW91dGxpbmUsLmFsZXJ0''@;'; put 'put ''LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW5ldXRyYWwtb3V0bGluZS5idG4sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtIC5idG4sLmJ0bi5idG4tb3V0bGluZS1uZXV0cmFsLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLW5l''@;'; put 'put ''dXRyYWwuYnRuLC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG4sLmJ0bi1uZXV0cmFsLW91dGxpbmUgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1uZXV0cmFsLW91dGxpbmUgLmJ0biwuYnRuLW91dGxpbmUtbmV1dHJh''@;'; put 'put ''bCAuYnRuLC5idG4tb3V0bGluZS1uZXV0cmFsIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWJvcmRl''@;'; put 'put ''ci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtY29sb3IpfS5idG4uYnRuLW5ldXRyYWwtb3V0bGluZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVy''@;'; put 'put ''dC1pdGVtIC5idG4tbmV1dHJhbC1vdXRsaW5lLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1uZXV0cmFsLW91dGxpbmUgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRu''@;'; put 'put ''LW5ldXRyYWwtb3V0bGluZS5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmJ0bi5idG4tb3V0bGluZS1uZXV0cmFsIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLW5l''@;'; put 'put ''dXRyYWwuYnRuIGNkcy1pY29uLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1uZXV0cmFsLmJ0biBjbHItaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuIGNkcy1pY29uLC5idG4tbmV1dHJhbC1v''@;'; put 'put ''dXRsaW5lIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG4gY2RzLWljb24sLmJ0bi1uZXV0cmFsLW91dGxpbmUgLmJ0biBjbHItaWNvbiwuYnRuLW5ldXRyYWwtb3V0''@;'; put 'put ''bGluZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuIGNsci1pY29uLC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG4gY2RzLWljb24sLmJ0bi1vdXRsaW5lLW5ldXRy''@;'; put 'put ''YWwgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0biBjZHMtaWNvbiwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuIGNsci1pY29uLC5idG4tb3V0bGluZS1uZXV0cmFs''@;'; put 'put ''IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtY29sb3IpfS5idG4uYnRuLW5ldXRy''@;'; put 'put ''YWwtb3V0bGluZTpob3ZlciwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW0gLmJ0bjpob3ZlciwuYnRuLmJ0bi1vdXRsaW5lLW5ldXRyYWw6aG92ZXIsLmJ0bi1uZXV0cmFsLW91dGxpbmUgLmJ0bjpob3ZlciwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuOmhvdmVy''@;'; put 'put ''e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1uZXV0cmFsLW91dGxpbmU6aG92ZXIgY2RzLWljb24sLmFsZXJ0LWFwcC1s''@;'; put 'put ''ZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tbmV1dHJhbC1vdXRsaW5lOmhvdmVyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbSAuYnRuOmhvdmVyIGNsci1pY29uLC5idG4uYnRuLW91''@;'; put 'put ''dGxpbmUtbmV1dHJhbDpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLW5ldXRyYWw6aG92ZXIgY2xyLWljb24sLmJ0bi1uZXV0cmFsLW91dGxpbmUgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuOmhvdmVyIGNsci1pY29uLC5idG4tb3V0bGluZS1u''@;'; put 'put ''ZXV0cmFsIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0bjpob3ZlciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbmV1dHJhbC1vdXRsaW5lOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVs''@;'; put 'put ''LmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW0gLmJ0bjphY3RpdmUsLmJ0bi5idG4tb3V0bGluZS1uZXV0cmFsOmFjdGl2ZSwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuOmFjdGl2ZSwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1i''@;'; put 'put ''dG4tbmV1dHJhbC1vdXRsaW5lLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1uZXV0cmFsLW91dGxpbmU6YWN0aXZlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQt''@;'; put 'put ''aXRlbSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLmJ0bi1uZXV0cmFsLW91dGxpbmU6YWN0aXZlIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbSAuYnRuOmFjdGl2ZSBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLW5ldXRyYWw6YWN0aXZlIGNk''@;'; put 'put ''cy1pY29uLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbDphY3RpdmUgY2xyLWljb24sLmJ0bi1uZXV0cmFsLW91dGxpbmUgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1uZXV0cmFsLW91dGxpbmUgLmJ0bjphY3RpdmUgY2xyLWljb24sLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0bjphY3RpdmUg''@;'; put 'put ''Y2RzLWljb24sLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1uZXV0cmFsLW91dGxpbmUuZGlzYWJsZWQsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFs''@;'; put 'put ''IC5hbGVydC1pdGVtIC5idG4uZGlzYWJsZWQsLmJ0bi5idG4tbmV1dHJhbC1vdXRsaW5lOmRpc2FibGVkLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbSAuYnRuOmRpc2FibGVkLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbC5kaXNhYmxlZCwuYnRuLmJ0bi1vdXRs''@;'; put 'put ''aW5lLW5ldXRyYWw6ZGlzYWJsZWQsLmJ0bi1uZXV0cmFsLW91dGxpbmUgLmJ0bi5kaXNhYmxlZCwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuOmRpc2FibGVkLC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG4uZGlzYWJsZWQsLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0bjpkaXNhYmxlZHtjb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYnRuLW5ldXRyYWwtb3V0bGluZS1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1uZXV0cmFsLW91dGxpbmUtZGlzYWJsZWQtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLW5ldXRy''@;'; put 'put ''YWwtb3V0bGluZS1kaXNhYmxlZC1ib3JkZXItY29sb3IpfS5idG4uYnRuLW5ldXRyYWwtb3V0bGluZS5kaXNhYmxlZCBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW0gLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1uZXV0cmFsLW91dGxp''@;'; put 'put ''bmUuZGlzYWJsZWQgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tbmV1dHJhbC1vdXRsaW5lOmRpc2FibGVkIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxl''@;'; put 'put ''cnQtaXRlbSAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLW5ldXRyYWwtb3V0bGluZTpkaXNhYmxlZCBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW0gLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLW5ldXRyYWwu''@;'; put 'put ''ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tb3V0bGluZS1uZXV0cmFsLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLW91dGxpbmUtbmV1dHJhbDpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1vdXRsaW5lLW5ldXRyYWw6ZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1uZXV0cmFsLW91dGxp''@;'; put 'put ''bmUgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW5ldXRyYWwtb3V0bGluZSAuYnRuLmRpc2FibGVkIGNsci1pY29uLC5idG4tbmV1dHJhbC1vdXRsaW5lIC5idG46ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1uZXV0cmFsLW91dGxpbmUgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLW91''@;'; put 'put ''dGxpbmUtbmV1dHJhbCAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4tb3V0bGluZS1uZXV0cmFsIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1vdXRsaW5lLW5ldXRyYWwgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLW91dGxpbmUtbmV1dHJhbCAuYnRuOmRpc2FibGVkIGNsci1p''@;'; put 'put ''Y29ue2NvbG9yOnZhcigtLWNsci1idG4tbmV1dHJhbC1vdXRsaW5lLWRpc2FibGVkLWNvbG9yKX0uYnRuLmJ0bi1saW5rLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLmJ0biwuYnRuLWxpbmsgLmJ0biwuYnRuLWxpbmsgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRl''@;'; put 'put ''bSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rIC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxp''@;'; put 'put ''bmstY29sb3IpfS5idG4uYnRuLWxpbmsgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmsuYnRuIGNkcy1pY29uLC5idG4uYnRuLWxpbmsgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmsuYnRuIGNsci1pY29uLC5idG4t''@;'; put 'put ''bGluayAuYnRuIGNkcy1pY29uLC5idG4tbGluayAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmsgLmJ0biBjZHMtaWNvbiwuYnRuLWxpbmsgLmJ0biBjbHItaWNvbiwuYnRuLWxpbmsgLmFsZXJ0''@;'; put 'put ''LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rIC5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWNvbG9yKX0uYnRuLmJ0bi1saW5rOmhvdmVyLC5idG4tbGluayAuYnRuOmhvdmVye2Jh''@;'; put 'put ''Y2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstaG92ZXItY29sb3IpfS5idG4uYnRuLWxpbms6aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tbGluazpob3ZlciBjbHItaWNvbiwuYnRuLWxpbmsgLmJ0bjpob3Zl''@;'; put 'put ''ciBjZHMtaWNvbiwuYnRuLWxpbmsgLmJ0bjpob3ZlciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstaG92ZXItY29sb3IpfS5idG4uYnRuLWxpbms6YWN0aXZlLC5idG4tbGluayAuYnRuOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1hY3RpdmUt''@;'; put 'put ''YmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWxpbms6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLWxpbms6YWN0aXZlIGNsci1pY29uLC5idG4tbGluayAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLWxpbmsgLmJ0bjphY3RpdmUgY2xy''@;'; put 'put ''LWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4tbGluay5kaXNhYmxlZCwuYnRuLmJ0bi1saW5rOmRpc2FibGVkLC5idG4tbGluayAuYnRuLmRpc2FibGVkLC5idG4tbGluayAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tbGluay1k''@;'; put 'put ''aXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tbGluay5kaXNhYmxl''@;'; put 'put ''ZCBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLWxpbms6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbGluazpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLWxpbmsgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWxpbmsgLmJ0bi5kaXNhYmxlZCBj''@;'; put 'put ''bHItaWNvbiwuYnRuLWxpbmsgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWxpbmsgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLWxpbmstcHJpbWFyeSwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVt''@;'; put 'put ''IC5idG4tbGluay1wcmltYXJ5LmJ0biwuYnRuLWxpbmstcHJpbWFyeSAuYnRuLC5idG4tbGluay1wcmltYXJ5IC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1wcmltYXJ5IC5idG57Ym9yZGVyLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4tbGluay1wcmltYXJ5LWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXByaW1hcnktY29sb3IpfS5idG4uYnRuLWxpbmstcHJpbWFyeSBjZHMtaWNvbiwu''@;'; put 'put ''YWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1wcmltYXJ5LmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXByaW1hcnkgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstcHJpbWFyeS5idG4gY2xyLWljb24sLmJ0bi1saW5rLXByaW1h''@;'; put 'put ''cnkgLmJ0biBjZHMtaWNvbiwuYnRuLWxpbmstcHJpbWFyeSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstcHJpbWFyeSAuYnRuIGNkcy1pY29uLC5idG4tbGluay1wcmltYXJ5IC5idG4gY2xy''@;'; put 'put ''LWljb24sLmJ0bi1saW5rLXByaW1hcnkgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXByaW1hcnkgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1jb2xv''@;'; put 'put ''cil9LmJ0bi5idG4tbGluay1wcmltYXJ5OmhvdmVyLC5idG4tbGluay1wcmltYXJ5IC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXByaW1hcnktaG92ZXItY29sb3Ip''@;'; put 'put ''fS5idG4uYnRuLWxpbmstcHJpbWFyeTpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXByaW1hcnk6aG92ZXIgY2xyLWljb24sLmJ0bi1saW5rLXByaW1hcnkgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLWxpbmstcHJpbWFyeSAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1idG4tbGluay1wcmltYXJ5LWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLXByaW1hcnk6YWN0aXZlLC5idG4tbGluay1wcmltYXJ5IC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXByaW1hcnktYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYnRuLWxpbmstcHJpbWFyeS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWxpbmstcHJpbWFyeTphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tbGluay1wcmltYXJ5OmFjdGl2ZSBjbHItaWNvbiwuYnRuLWxpbmstcHJpbWFyeSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLWxpbmstcHJpbWFy''@;'; put 'put ''eSAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWxpbmstcHJpbWFyeS5kaXNhYmxlZCwuYnRuLmJ0bi1saW5rLXByaW1hcnk6ZGlzYWJsZWQsLmJ0bi1saW5rLXByaW1hcnkgLmJ0bi5kaXNhYmxlZCwu''@;'; put 'put ''YnRuLWxpbmstcHJpbWFyeSAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstcHJpbWFyeS1kaXNhYmxlZC1iZy1jb2xvcik7Ym9y''@;'; put 'put ''ZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1wcmltYXJ5LWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tbGluay1wcmltYXJ5LmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWxpbmstcHJpbWFyeS5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1saW5rLXByaW1hcnk6ZGlz''@;'; put 'put ''YWJsZWQgY2RzLWljb24sLmJ0bi5idG4tbGluay1wcmltYXJ5OmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluay1wcmltYXJ5IC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1saW5rLXByaW1hcnkgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLWxpbmstcHJpbWFyeSAuYnRuOmRpc2Fi''@;'; put 'put ''bGVkIGNkcy1pY29uLC5idG4tbGluay1wcmltYXJ5IC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXByaW1hcnktZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLWxpbmstc3VjY2VzcywuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1z''@;'; put 'put ''dWNjZXNzLmJ0biwuYnRuLWxpbmstc3VjY2VzcyAuYnRuLC5idG4tbGluay1zdWNjZXNzIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1zdWNjZXNzIC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4t''@;'; put 'put ''bGluay1zdWNjZXNzLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtY29sb3IpfS5idG4uYnRuLWxpbmstc3VjY2VzcyBjZHMtaWNvbiwuYWxlcnQtYXBwLWxl''@;'; put 'put ''dmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1zdWNjZXNzLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXN1Y2Nlc3MgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstc3VjY2Vzcy5idG4gY2xyLWljb24sLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0biBjZHMt''@;'; put 'put ''aWNvbiwuYnRuLWxpbmstc3VjY2VzcyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstc3VjY2VzcyAuYnRuIGNkcy1pY29uLC5idG4tbGluay1zdWNjZXNzIC5idG4gY2xyLWljb24sLmJ0bi1s''@;'; put 'put ''aW5rLXN1Y2Nlc3MgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1jb2xvcil9LmJ0bi5idG4t''@;'; put 'put ''bGluay1zdWNjZXNzOmhvdmVyLC5idG4tbGluay1zdWNjZXNzIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtaG92ZXItY29sb3IpfS5idG4uYnRuLWxp''@;'; put 'put ''bmstc3VjY2Vzczpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXN1Y2Nlc3M6aG92ZXIgY2xyLWljb24sLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLWxpbmstc3VjY2VzcyAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1z''@;'; put 'put ''dWNjZXNzLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLXN1Y2Nlc3M6YWN0aXZlLC5idG4tbGluay1zdWNjZXNzIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmst''@;'; put 'put ''c3VjY2Vzcy1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWxpbmstc3VjY2VzczphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tbGluay1zdWNjZXNzOmFjdGl2ZSBjbHItaWNvbiwuYnRuLWxpbmstc3VjY2VzcyAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLWxpbmstc3VjY2VzcyAuYnRuOmFjdGl2''@;'; put 'put ''ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWxpbmstc3VjY2Vzcy5kaXNhYmxlZCwuYnRuLmJ0bi1saW5rLXN1Y2Nlc3M6ZGlzYWJsZWQsLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0bi5kaXNhYmxlZCwuYnRuLWxpbmstc3Vj''@;'; put 'put ''Y2VzcyAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tbGluay1zdWNjZXNzLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstc3VjY2Vzcy1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4tbGluay1zdWNjZXNzLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tbGluay1zdWNjZXNzLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWxpbmstc3VjY2Vzcy5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1saW5rLXN1Y2Nlc3M6ZGlzYWJsZWQgY2RzLWlj''@;'; put 'put ''b24sLmJ0bi5idG4tbGluay1zdWNjZXNzOmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluay1zdWNjZXNzIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1saW5rLXN1Y2Nlc3MgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLWxpbmstc3VjY2VzcyAuYnRuOmRpc2FibGVkIGNkcy1pY29u''@;'; put 'put ''LC5idG4tbGluay1zdWNjZXNzIC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXN1Y2Nlc3MtZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLWxpbmstd2FybmluZywuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay13YXJuaW5nLmJ0biwu''@;'; put 'put ''YnRuLWxpbmstd2FybmluZyAuYnRuLC5idG4tbGluay13YXJuaW5nIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay13YXJuaW5nIC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5n''@;'; put 'put ''LWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXdhcm5pbmctY29sb3IpfS5idG4uYnRuLWxpbmstd2FybmluZyBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1p''@;'; put 'put ''dGVtIC5idG4tbGluay13YXJuaW5nLmJ0biBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXdhcm5pbmcgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstd2FybmluZy5idG4gY2xyLWljb24sLmJ0bi1saW5rLXdhcm5pbmcgLmJ0biBjZHMtaWNvbiwuYnRuLWxp''@;'; put 'put ''bmstd2FybmluZyAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstd2FybmluZyAuYnRuIGNkcy1pY29uLC5idG4tbGluay13YXJuaW5nIC5idG4gY2xyLWljb24sLmJ0bi1saW5rLXdhcm5pbmcg''@;'; put 'put ''LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLXdhcm5pbmcgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1jb2xvcil9LmJ0bi5idG4tbGluay13YXJuaW5n''@;'; put 'put ''OmhvdmVyLC5idG4tbGluay13YXJuaW5nIC5idG46aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXdhcm5pbmctaG92ZXItY29sb3IpfS5idG4uYnRuLWxpbmstd2FybmluZzpo''@;'; put 'put ''b3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLXdhcm5pbmc6aG92ZXIgY2xyLWljb24sLmJ0bi1saW5rLXdhcm5pbmcgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLWxpbmstd2FybmluZyAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWhvdmVy''@;'; put 'put ''LWNvbG9yKX0uYnRuLmJ0bi1saW5rLXdhcm5pbmc6YWN0aXZlLC5idG4tbGluay13YXJuaW5nIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXdhcm5pbmctYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1hY3Rp''@;'; put 'put ''dmUtY29sb3IpfS5idG4uYnRuLWxpbmstd2FybmluZzphY3RpdmUgY2RzLWljb24sLmJ0bi5idG4tbGluay13YXJuaW5nOmFjdGl2ZSBjbHItaWNvbiwuYnRuLWxpbmstd2FybmluZyAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLWxpbmstd2FybmluZyAuYnRuOmFjdGl2ZSBjbHItaWNvbntj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWxpbmstd2FybmluZy5kaXNhYmxlZCwuYnRuLmJ0bi1saW5rLXdhcm5pbmc6ZGlzYWJsZWQsLmJ0bi1saW5rLXdhcm5pbmcgLmJ0bi5kaXNhYmxlZCwuYnRuLWxpbmstd2FybmluZyAuYnRuOmRp''@;'; put 'put ''c2FibGVke2NvbG9yOnZhcigtLWNsci1idG4tbGluay13YXJuaW5nLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstd2FybmluZy1kaXNhYmxlZC1iZy1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4t''@;'; put 'put ''bGluay13YXJuaW5nLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4tbGluay13YXJuaW5nLmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWxpbmstd2FybmluZy5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLmJ0bi1saW5rLXdhcm5pbmc6ZGlzYWJsZWQgY2RzLWljb24sLmJ0bi5idG4t''@;'; put 'put ''bGluay13YXJuaW5nOmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluay13YXJuaW5nIC5idG4uZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1saW5rLXdhcm5pbmcgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLWxpbmstd2FybmluZyAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tbGluay13''@;'; put 'put ''YXJuaW5nIC5idG46ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLXdhcm5pbmctZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLWxpbmstZGFuZ2VyLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLWRhbmdlci5idG4sLmJ0bi1saW5rLWRhbmdl''@;'; put 'put ''ciAuYnRuLC5idG4tbGluay1kYW5nZXIgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLWRhbmdlciAuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGFuZ2VyLWJvcmRlci1jb2xvcik7YmFj''@;'; put 'put ''a2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGFuZ2VyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGFuZ2VyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLWRhbmdlciBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1kYW5nZXIu''@;'; put 'put ''YnRuIGNkcy1pY29uLC5idG4uYnRuLWxpbmstZGFuZ2VyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLWRhbmdlci5idG4gY2xyLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYnRuIGNkcy1pY29uLC5idG4tbGluay1kYW5nZXIgLmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLWRhbmdlciAuYnRuIGNkcy1pY29uLC5idG4tbGluay1kYW5nZXIgLmJ0biBjbHItaWNvbiwuYnRuLWxpbmstZGFuZ2VyIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0g''@;'; put 'put ''LmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4tbGluay1kYW5nZXIgLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGFuZ2VyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLWRhbmdlcjpob3ZlciwuYnRuLWxpbmstZGFuZ2VyIC5idG46aG92''@;'; put 'put ''ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGFuZ2VyLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGFuZ2VyLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLWRhbmdlcjpob3ZlciBjZHMtaWNvbiwuYnRuLmJ0bi1saW5rLWRhbmdlcjpo''@;'; put 'put ''b3ZlciBjbHItaWNvbiwuYnRuLWxpbmstZGFuZ2VyIC5idG46aG92ZXIgY2RzLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYnRuOmhvdmVyIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItaG92ZXItY29sb3IpfS5idG4uYnRuLWxpbmstZGFuZ2VyOmFjdGl2ZSwuYnRu''@;'; put 'put ''LWxpbmstZGFuZ2VyIC5idG46YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRhbmdlci1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1kYW5nZXItYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1saW5rLWRhbmdlcjphY3RpdmUgY2RzLWlj''@;'; put 'put ''b24sLmJ0bi5idG4tbGluay1kYW5nZXI6YWN0aXZlIGNsci1pY29uLC5idG4tbGluay1kYW5nZXIgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGFuZ2VyLWFjdGl2ZS1jb2xvcil9LmJ0''@;'; put 'put ''bi5idG4tbGluay1kYW5nZXIuZGlzYWJsZWQsLmJ0bi5idG4tbGluay1kYW5nZXI6ZGlzYWJsZWQsLmJ0bi1saW5rLWRhbmdlciAuYnRuLmRpc2FibGVkLC5idG4tbGluay1kYW5nZXIgLmJ0bjpkaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGFuZ2VyLWRpc2FibGVkLWNvbG9y''@;'; put 'put ''KTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGFuZ2VyLWRpc2FibGVkLWJnLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRhbmdlci1kaXNhYmxlZC1ib3JkZXItY29sb3IpfS5idG4uYnRuLWxpbmstZGFuZ2Vy''@;'; put 'put ''LmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWxpbmstZGFuZ2VyLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLWxpbmstZGFuZ2VyOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWxpbmstZGFuZ2VyOmRpc2FibGVkIGNsci1pY29uLC5idG4tbGluay1kYW5nZXIgLmJ0bi5kaXNhYmxl''@;'; put 'put ''ZCBjZHMtaWNvbiwuYnRuLWxpbmstZGFuZ2VyIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1saW5rLWRhbmdlciAuYnRuOmRpc2FibGVkIGNkcy1pY29uLC5idG4tbGluay1kYW5nZXIgLmJ0bjpkaXNhYmxlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGFuZ2VyLWRp''@;'; put 'put ''c2FibGVkLWNvbG9yKX0uYnRuLmJ0bi1saW5rLW5ldXRyYWwsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstbmV1dHJhbC5idG4sLmJ0bi1saW5rLW5ldXRyYWwgLmJ0biwuYnRuLWxpbmstbmV1dHJhbCAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4sLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstbmV1dHJhbCAuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtYmctY29sb3IpO2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1idG4tbGluay1uZXV0cmFsLWNvbG9yKX0uYnRuLmJ0bi1saW5rLW5ldXRyYWwgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWxpbmstbmV1dHJhbC5idG4gY2RzLWljb24sLmJ0bi5idG4tbGluay1uZXV0cmFsIGNsci1pY29uLC5hbGVydC1hcHAt''@;'; put 'put ''bGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLW5ldXRyYWwuYnRuIGNsci1pY29uLC5idG4tbGluay1uZXV0cmFsIC5idG4gY2RzLWljb24sLmJ0bi1saW5rLW5ldXRyYWwgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0''@;'; put 'put ''LWl0ZW0gLmJ0bi1saW5rLW5ldXRyYWwgLmJ0biBjZHMtaWNvbiwuYnRuLWxpbmstbmV1dHJhbCAuYnRuIGNsci1pY29uLC5idG4tbGluay1uZXV0cmFsIC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4t''@;'; put 'put ''bGluay1uZXV0cmFsIC5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtY29sb3IpfS5idG4uYnRuLWxpbmstbmV1dHJhbDpob3ZlciwuYnRuLWxpbmstbmV1dHJhbCAuYnRuOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLW5ldXRy''@;'; put 'put ''YWwtaG92ZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tbGluay1uZXV0cmFsLWhvdmVyLWNvbG9yKX0uYnRuLmJ0bi1saW5rLW5ldXRyYWw6aG92ZXIgY2RzLWljb24sLmJ0bi5idG4tbGluay1uZXV0cmFsOmhvdmVyIGNsci1pY29uLC5idG4tbGluay1uZXV0cmFsIC5idG46aG92''@;'; put 'put ''ZXIgY2RzLWljb24sLmJ0bi1saW5rLW5ldXRyYWwgLmJ0bjpob3ZlciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1ob3Zlci1jb2xvcil9LmJ0bi5idG4tbGluay1uZXV0cmFsOmFjdGl2ZSwuYnRuLWxpbmstbmV1dHJhbCAuYnRuOmFjdGl2ZXtiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOnZhcigtLWNsci1idG4tbGluay1uZXV0cmFsLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1saW5rLW5ldXRyYWw6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLWxpbmstbmV1dHJhbDphY3RpdmUg''@;'; put 'put ''Y2xyLWljb24sLmJ0bi1saW5rLW5ldXRyYWwgLmJ0bjphY3RpdmUgY2RzLWljb24sLmJ0bi1saW5rLW5ldXRyYWwgLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtYWN0aXZlLWNvbG9yKX0uYnRuLmJ0bi1saW5rLW5ldXRyYWwuZGlzYWJsZWQs''@;'; put 'put ''LmJ0bi5idG4tbGluay1uZXV0cmFsOmRpc2FibGVkLC5idG4tbGluay1uZXV0cmFsIC5idG4uZGlzYWJsZWQsLmJ0bi1saW5rLW5ldXRyYWwgLmJ0bjpkaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2Jh''@;'; put 'put ''Y2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLW5ldXRyYWwtZGlzYWJsZWQtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstbmV1dHJhbC1kaXNhYmxlZC1ib3JkZXItY29sb3IpfS5idG4uYnRuLWxpbmstbmV1dHJhbC5kaXNhYmxlZCBjZHMtaWNvbiwu''@;'; put 'put ''YnRuLmJ0bi1saW5rLW5ldXRyYWwuZGlzYWJsZWQgY2xyLWljb24sLmJ0bi5idG4tbGluay1uZXV0cmFsOmRpc2FibGVkIGNkcy1pY29uLC5idG4uYnRuLWxpbmstbmV1dHJhbDpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLWxpbmstbmV1dHJhbCAuYnRuLmRpc2FibGVkIGNkcy1pY29uLC5idG4t''@;'; put 'put ''bGluay1uZXV0cmFsIC5idG4uZGlzYWJsZWQgY2xyLWljb24sLmJ0bi1saW5rLW5ldXRyYWwgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWxpbmstbmV1dHJhbCAuYnRuOmRpc2FibGVkIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1uZXV0cmFsLWRpc2FibGVkLWNvbG9y''@;'; put 'put ''KX0uYnRuLmJ0bi1pbnZlcnNlLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1pbnZlcnNlLmJ0biwuYnRuLWludmVyc2UgLmJ0biwuYnRuLWludmVyc2UgLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1p''@;'; put 'put ''bnZlcnNlIC5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtY29sb3IpfS5idG4uYnRuLWludmVyc2UgY2Rz''@;'; put 'put ''LWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWludmVyc2UuYnRuIGNkcy1pY29uLC5idG4uYnRuLWludmVyc2UgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWludmVyc2UuYnRuIGNsci1pY29uLC5idG4taW52ZXJzZSAuYnRuIGNkcy1p''@;'; put 'put ''Y29uLC5idG4taW52ZXJzZSAuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWludmVyc2UgLmJ0biBjZHMtaWNvbiwuYnRuLWludmVyc2UgLmJ0biBjbHItaWNvbiwuYnRuLWludmVyc2UgLmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1pbnZlcnNlIC5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWNvbG9yKX0uYnRuLmJ0bi1pbnZlcnNlOmhvdmVyLC5idG4taW52ZXJzZSAuYnRu''@;'; put 'put ''OmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtaG92ZXItY29sb3IpfS5idG4uYnRuLWludmVyc2U6aG92ZXIgY2RzLWljb24sLmJ0bi5idG4taW52ZXJzZTpob3ZlciBjbHItaWNv''@;'; put 'put ''biwuYnRuLWludmVyc2UgLmJ0bjpob3ZlciBjZHMtaWNvbiwuYnRuLWludmVyc2UgLmJ0bjpob3ZlciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtaG92ZXItY29sb3IpfS5idG4uYnRuLWludmVyc2U6YWN0aXZlLC5idG4taW52ZXJzZSAuYnRuOmFjdGl2ZXtiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1hY3RpdmUtY29sb3IpfS5idG4uYnRuLWludmVyc2U6YWN0aXZlIGNkcy1pY29uLC5idG4uYnRuLWludmVyc2U6YWN0aXZlIGNsci1pY29uLC5idG4taW52''@;'; put 'put ''ZXJzZSAuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLWludmVyc2UgLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWFjdGl2ZS1jb2xvcil9LmJ0bi5idG4taW52ZXJzZS5kaXNhYmxlZCwuYnRuLmJ0bi1pbnZlcnNlOmRpc2FibGVkLC5idG4taW52ZXJz''@;'; put 'put ''ZSAuYnRuLmRpc2FibGVkLC5idG4taW52ZXJzZSAuYnRuOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWRpc2FibGVkLWJnLWNvbG9yKTti''@;'; put 'put ''b3JkZXItY29sb3I6dmFyKC0tY2xyLWJ0bi1pbnZlcnNlLWRpc2FibGVkLWJvcmRlci1jb2xvcil9LmJ0bi5idG4taW52ZXJzZS5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLmJ0bi1pbnZlcnNlLmRpc2FibGVkIGNsci1pY29uLC5idG4uYnRuLWludmVyc2U6ZGlzYWJsZWQgY2RzLWljb24sLmJ0''@;'; put 'put ''bi5idG4taW52ZXJzZTpkaXNhYmxlZCBjbHItaWNvbiwuYnRuLWludmVyc2UgLmJ0bi5kaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWludmVyc2UgLmJ0bi5kaXNhYmxlZCBjbHItaWNvbiwuYnRuLWludmVyc2UgLmJ0bjpkaXNhYmxlZCBjZHMtaWNvbiwuYnRuLWludmVyc2UgLmJ0bjpkaXNhYmxl''@;'; put 'put ''ZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtZGlzYWJsZWQtY29sb3IpfS5idG4uYnRuLXNtLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0biwuYnRuLXNtIC5idG57Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQt''@;'; put 'put ''c2VtaWJvbGQpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtMSk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzpjYWxjKC4yKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTt0ZXh0LXRyYW5zZm9y''@;'; put 'put ''bTp1cHBlcmNhc2U7aGVpZ2h0OnZhcigtLWNsci1idG4tYXBwZWFyYW5jZS1zdGFuZGFyZC1oZWlnaHQpO3BhZGRpbmc6dmFyKC0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLXBhZGRpbmcpfS5idG4tYmxvY2t7ZGlzcGxheTpmbGV4O3dpZHRoOjEwMCU7bWF4LXdpZHRoOjEwMCV9LmJ0''@;'; put 'put ''biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG57bWFyZ2luOnZhcigtLWNsci1idG4tdmVydGljYWwtbWFyZ2luKSB2YXIoLS1jbHItYnRuLWhvcml6b250YWwtbWFyZ2luKSB2YXIoLS1jbHItYnRuLXZlcnRpY2FsLW1hcmdpbikgMH0uYnRuLmJ0bi1saW5rLC5hbGVydC1hcHAt''@;'; put 'put ''bGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bi1saW5rLmJ0bnttYXJnaW4tcmlnaHQ6MH0uYnRuLmJ0bi1saW5rLmJ0bi1pbnZlcnNle2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudH0uYnRuLXNtOm5vdCguYnRuLWxpbmspIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmJ0bjpu''@;'; put 'put ''b3QoLmJ0bi1saW5rKSBjbHItaWNvbnt0cmFuc2Zvcm06dHJhbnNsYXRlM2QoMCxjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpLDApfS5idG4tc206bm90KC5idG4tbGluaykgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuOm5vdCguYnRuLWxpbmsp''@;'; put 'put ''IGNsci1pY29uLC5idG4tc206bm90KC5idG4tbGluaykgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuOm5vdCguYnRuLWxpbmspIGNkcy1pY29ue2hlaWdodDp2YXIoLS1jbHItYnRuLWFwcGVhcmFuY2Utc3RhbmRhcmQtaWNvbi1zaXplKTt3aWR0aDp2YXIoLS1j''@;'; put 'put ''bHItYnRuLWFwcGVhcmFuY2Utc3RhbmRhcmQtaWNvbi1zaXplKX0uYnRuLWljb257bWluLXdpZHRoOjB9LmJ0bi1ncm91cC5idG4tbGluayAuZHJvcGRvd24tdG9nZ2xle2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1idG4tbGluay1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWNvbG9yKX0uYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGUgY2RzLWljb24sLmJ0bi1ncm91cC5idG4tbGluayAuZHJvcGRvd24tdG9nZ2xlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1i''@;'; put 'put ''dG4tbGluay1jb2xvcil9LmJ0bi1ncm91cC5idG4tbGluayAuZHJvcGRvd24tdG9nZ2xlOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstaG92ZXItY29sb3IpfS5idG4tZ3JvdXAuYnRuLWxp''@;'; put 'put ''bmsgLmRyb3Bkb3duLXRvZ2dsZTpob3ZlciBjZHMtaWNvbiwuYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGU6aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWhvdmVyLWNvbG9yKX0uYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGU6YWN0''@;'; put 'put ''aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWFjdGl2ZS1jb2xvcil9LmJ0bi1ncm91cC5idG4tbGluayAuZHJvcGRvd24tdG9nZ2xlOmFjdGl2ZSBjZHMtaWNvbiwuYnRuLWdyb3VwLmJ0bi1s''@;'; put 'put ''aW5rIC5kcm9wZG93bi10b2dnbGU6YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tbGluay1hY3RpdmUtY29sb3IpfS5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZS5kaXNhYmxlZCwuYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGU6ZGlzYWJs''@;'; put 'put ''ZWR7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGlzYWJsZWQtYmctY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstZGlzYWJsZWQtYm9yZGVy''@;'; put 'put ''LWNvbG9yKX0uYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGUuZGlzYWJsZWQgY2RzLWljb24sLmJ0bi1ncm91cC5idG4tbGluayAuZHJvcGRvd24tdG9nZ2xlLmRpc2FibGVkIGNsci1pY29uLC5idG4tZ3JvdXAuYnRuLWxpbmsgLmRyb3Bkb3duLXRvZ2dsZTpkaXNhYmxlZCBj''@;'; put 'put ''ZHMtaWNvbiwuYnRuLWdyb3VwLmJ0bi1saW5rIC5kcm9wZG93bi10b2dnbGU6ZGlzYWJsZWQgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWRpc2FibGVkLWNvbG9yKX0uYnRuLWdyb3VwLmJ0bi1zbSAuYnRuLWdyb3VwLW92ZXJmbG93Pi5kcm9wZG93bi10b2dnbGUsLmFsZXJ0''@;'; put 'put ''LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuYnRuLWdyb3VwLmJ0biAuYnRuLWdyb3VwLW92ZXJmbG93Pi5kcm9wZG93bi10b2dnbGV7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1mb250LXNpemUtMSk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzpjYWxjKC4yKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7aGVpZ2h0OnZhcigtLWNsci1idG4tYXBwZWFy''@;'; put 'put ''YW5jZS1zdGFuZGFyZC1oZWlnaHQpO3BhZGRpbmc6dmFyKC0tY2xyLWJ0bi1hcHBlYXJhbmNlLXN0YW5kYXJkLXBhZGRpbmcpfS5jaGVja2JveC5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuY2hlY2tib3guYnRuLC5jaGVja2JveC1pbmxpbmUuYnRuLC5hbGVydC1hcHAtbGV2''@;'; put 'put ''ZWwgLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGluZS5idG4sLnJhZGlvLmJ0biwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5yYWRpby5idG4sLnJhZGlvLWlubGluZS5idG4sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAucmFkaW8taW5saW5lLmJ0bntwYWRkaW5nOjB9LmNo''@;'; put 'put ''ZWNrYm94LmJ0biBsYWJlbCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4gbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4gbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0biBsYWJlbCwucmFkaW8uYnRuIGxhYmVs''@;'; put 'put ''LC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBsYWJlbCwucmFkaW8taW5saW5lLmJ0biBsYWJlbCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5yYWRpby1pbmxpbmUuYnRuIGxhYmVse2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6aW5saW5lLWZsZXg7Z2FwOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7YWxpZ24taXRlbXM6Y2VudGVyO3BsYWNlLWNvbnRlbnQ6Y2VudGVyOy13ZWJraXQtYXBwZWFyYW5jZTpub25lIWltcG9ydGFudDtwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX0uY2hlY2tib3guYnRuLmRpc2FibGVkIGxhYmVsLC5j''@;'; put 'put ''aGVja2JveC5idG46ZGlzYWJsZWQgbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uZGlzYWJsZWQgbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG46ZGlzYWJsZWQgbGFiZWwsLnJhZGlvLmJ0bi5kaXNhYmxlZCBsYWJlbCwucmFkaW8uYnRuOmRpc2FibGVkIGxhYmVsLC5yYWRpby1pbmxpbmUu''@;'; put 'put ''YnRuLmRpc2FibGVkIGxhYmVsLC5yYWRpby1pbmxpbmUuYnRuOmRpc2FibGVkIGxhYmVse2N1cnNvcjpub3QtYWxsb3dlZH0uY2hlY2tib3guYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdK2xhYmVsOmJlZm9yZSwuY2hlY2tib3guYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdK2xhYmVsOmFmdGVy''@;'; put 'put ''LC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdK2xhYmVsOmJlZm9yZSwuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XStsYWJlbDphZnRlcntjb250ZW50Om5vbmV9LnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXStsYWJlbDpiZWZvcmUs''@;'; put 'put ''LnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXStsYWJlbDphZnRlciwucmFkaW8taW5saW5lLmJ0biBpbnB1dFt0eXBlPXJhZGlvXStsYWJlbDpiZWZvcmUsLnJhZGlvLWlubGluZS5idG4gaW5wdXRbdHlwZT1yYWRpb10rbGFiZWw6YWZ0ZXJ7Y29udGVudDpub25lfS5jaGVja2JveC5idG4g''@;'; put 'put ''aW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1i''@;'; put 'put ''dG4tZGVmYXVsdC1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuIGlu''@;'; put 'put ''cHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1jb2xvcil9LmNoZWNrYm94LmJ0biBp''@;'; put 'put ''bnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1ob3Zlci1iZy1jb2xvcik7''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtaG92ZXItY29sb3IpfS5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFi''@;'; put 'put ''ZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigt''@;'; put 'put ''LWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWNvbG9yKX0uY2hlY2tib3guYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVse2JhY2tncm91''@;'; put 'put ''bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtYWN0aXZlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1hY3RpdmUtY29sb3IpfS5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xy''@;'; put 'put ''LWljb24sLmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0biBp''@;'; put 'put ''bnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1hY3RpdmUtY29sb3IpfS5jaGVja2JveC5idG4uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2ti''@;'; put 'put ''b3guYnRuOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94''@;'; put 'put ''XTpjaGVja2VkK2xhYmVse2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWJnLWNvbG9yKX0uY2hlY2tib3guYnRuLmRpc2FibGVkIGlucHV0W3R5''@;'; put 'put ''cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHIt''@;'; put 'put ''aWNvbiwuY2hlY2tib3guYnRuOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0''@;'; put 'put ''bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG46ZGlzYWJsZWQgaW5wdXRb''@;'; put 'put ''dHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1kaXNhYmxlZC1jb2xvcil9LmNoZWNrYm94LmJ0biBsYWJlbCwuYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4gbGFiZWwsLmNoZWNr''@;'; put 'put ''Ym94LWlubGluZS5idG4gbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0biBsYWJlbHt3aWR0aDoxMDAlfS5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4u''@;'; put 'put ''YnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNr''@;'; put 'put ''ZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0''@;'; put 'put ''bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hl''@;'; put 'put ''Y2tib3guYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94''@;'; put 'put ''XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5l''@;'; put 'put ''LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91''@;'; put 'put ''dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLW91dGxpbmUg''@;'; put 'put ''aW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1p''@;'; put 'put ''bmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtY29sb3IpfS5jaGVja2JveC5idG4uYnRuLXNlY29uZGFy''@;'; put 'put ''eSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hl''@;'; put 'put ''Y2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2Jv''@;'; put 'put ''eC5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1wcmltYXJ5''@;'; put 'put ''LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRs''@;'; put 'put ''aW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0''@;'; put 'put ''W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBl''@;'; put 'put ''PWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3guYnRuIGlu''@;'; put 'put ''cHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2Jv''@;'; put 'put ''eC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlw''@;'; put 'put ''ZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNr''@;'; put 'put ''Ym94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJl''@;'; put 'put ''bD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24s''@;'; put 'put ''LmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMt''@;'; put 'put ''aWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCts''@;'; put 'put ''YWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVj''@;'; put 'put ''a2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNr''@;'; put 'put ''Ym94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGlu''@;'; put 'put ''ZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVy''@;'; put 'put ''dC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1p''@;'; put 'put ''bmxpbmUuYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1jb2xvcil9LmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNo''@;'; put 'put ''ZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwuY2hlY2tib3guYnRuLmJ0''@;'; put 'put ''bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtcHJp''@;'; put 'put ''bWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9''@;'; put 'put ''Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlw''@;'; put 'put ''ZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tl''@;'; put 'put ''ZDpob3ZlcitsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3Zlcits''@;'; put 'put ''YWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIr''@;'; put 'put ''bGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xh''@;'; put 'put ''YmVsLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06''@;'; put 'put ''Y2hlY2tlZDpob3ZlcitsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1ob3Zlci1jb2xvcil9LmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0''@;'; put 'put ''W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94''@;'; put 'put ''XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIr''@;'; put 'put ''bGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVs''@;'; put 'put ''PmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIr''@;'; put 'put ''bGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpo''@;'; put 'put ''b3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVj''@;'; put 'put ''a2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNo''@;'; put 'put ''ZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5w''@;'; put 'put ''dXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4u''@;'; put 'put ''YnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUu''@;'; put 'put ''YnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlu''@;'; put 'put ''bGluZS5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUu''@;'; put 'put ''YnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5l''@;'; put 'put ''LmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29u''@;'; put 'put ''LC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2Vk''@;'; put 'put ''OmhvdmVyK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9''@;'; put 'put ''Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUt''@;'; put 'put ''c2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwu''@;'; put 'put ''YWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3Zl''@;'; put 'put ''citsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGluZS5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1pbmZv''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVs''@;'; put 'put ''dC1jaGVja2VkLWhvdmVyLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbCwuY2hlY2ti''@;'; put 'put ''b3guYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnkt''@;'; put 'put ''b3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5w''@;'; put 'put ''dXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3guYnRu''@;'; put 'put ''IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hl''@;'; put 'put ''Y2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0''@;'; put 'put ''aXZlK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6''@;'; put 'put ''YWN0aXZlK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNr''@;'; put 'put ''ZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5''@;'; put 'put ''cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1hY3Rp''@;'; put 'put ''dmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1jb2xvcil9LmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXNlY29u''@;'; put 'put ''ZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1j''@;'; put 'put ''aGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNo''@;'; put 'put ''ZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2Jv''@;'; put 'put ''eF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlw''@;'; put 'put ''ZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1''@;'; put 'put ''dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXNlY29u''@;'; put 'put ''ZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZv''@;'; put 'put ''IC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3guYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2''@;'; put 'put ''ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFj''@;'; put 'put ''dGl2ZStsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6''@;'; put 'put ''YWN0aXZlK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6''@;'; put 'put ''YWN0aXZlK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2Jv''@;'; put 'put ''eF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxp''@;'; put 'put ''bmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUu''@;'; put 'put ''YnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNv''@;'; put 'put ''biwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNr''@;'; put 'put ''ZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC1p''@;'; put 'put ''bmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZDph''@;'; put 'put ''Y3RpdmUrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1hY3RpdmUtY29sb3IpfS5jaGVj''@;'; put 'put ''a2JveC5idG4uYnRuLXNlY29uZGFyeS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLWluZm8uZGlz''@;'; put 'put ''YWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1pbmZvOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hl''@;'; put 'put ''Y2tib3guYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5i''@;'; put 'put ''dG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4t''@;'; put 'put ''b3V0bGluZS1wcmltYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5l''@;'; put 'put ''LXNlY29uZGFyeTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC5idG4uYnRuLWluZm8tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQt''@;'; put 'put ''aXRlbSAuY2hlY2tib3guYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZv''@;'; put 'put ''IC5hbGVydC1pdGVtIC5jaGVja2JveC5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLWluZm8uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3guYnRuLmJ0bi1v''@;'; put 'put ''dXRsaW5lLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXNlY29u''@;'; put 'put ''ZGFyeTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm86ZGlzYWJsZWQgaW5w''@;'; put 'put ''dXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hl''@;'; put 'put ''Y2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlw''@;'; put 'put ''ZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6ZGlzYWJsZWQg''@;'; put 'put ''aW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTpkaXNh''@;'; put 'put ''YmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXNlY29u''@;'; put 'put ''ZGFyeTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvLW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0''@;'; put 'put ''LWl0ZW0gLmNoZWNrYm94LWlubGluZS5idG4uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mby1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1s''@;'; put 'put ''ZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxpbmUuYnRuOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVj''@;'; put 'put ''a2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbHtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1kaXNhYmxlZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1kaXNhYmxlZC1iZy1jb2xvcil9LmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LmRpc2FibGVkIGlu''@;'; put 'put ''cHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0''@;'; put 'put ''W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm8uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2Jv''@;'; put 'put ''eF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xh''@;'; put 'put ''YmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2Rz''@;'; put 'put ''LWljb24sLmNoZWNrYm94LmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwu''@;'; put 'put ''Y2hlY2tib3guYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5j''@;'; put 'put ''ZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tl''@;'; put 'put ''ZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hl''@;'; put 'put ''Y2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpkaXNhYmxlZCBp''@;'; put 'put ''bnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeS5k''@;'; put 'put ''aXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUt''@;'; put 'put ''cHJpbWFyeTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5i''@;'; put 'put ''dG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5j''@;'; put 'put ''aGVja2JveC5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xy''@;'; put 'put ''LWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG4uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1pbmZvLW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1j''@;'; put 'put ''aGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC5idG4uYnRuLWluZm8tb3V0''@;'; put 'put ''bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3guYnRuOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24s''@;'; put 'put ''LmNoZWNrYm94LmJ0bi5idG4taW5mby1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2Jv''@;'; put 'put ''eF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLWluZm8uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLWluZm8uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVj''@;'; put 'put ''a2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3guYnRuLmJ0bi1vdXRsaW5lLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1j''@;'; put 'put ''aGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXNlY29uZGFyeS5kaXNhYmxlZCBp''@;'; put 'put ''bnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zZWNvbmRhcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5''@;'; put 'put ''OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5m''@;'; put 'put ''by5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbmZvOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWlu''@;'; put 'put ''Zm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0''@;'; put 'put ''bi1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5l''@;'; put 'put ''LmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwu''@;'; put 'put ''Y2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUuZGlzYWJs''@;'; put 'put ''ZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5i''@;'; put 'put ''dG4tc2Vjb25kYXJ5LW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMt''@;'; put 'put ''aWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtcHJpbWFyeS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNr''@;'; put 'put ''Ym94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5OmRp''@;'; put 'put ''c2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5i''@;'; put 'put ''dG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+''@;'; put 'put ''Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPWNo''@;'; put 'put ''ZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRu''@;'; put 'put ''LmJ0bi1pbmZvLW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLmNoZWNrYm94LWlubGluZS5idG4uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hl''@;'; put 'put ''Y2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW5mby1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5jaGVja2JveC1pbmxp''@;'; put 'put ''bmUuYnRuOmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWluZm8tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2''@;'; put 'put ''ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAuY2hlY2tib3gtaW5saW5lLmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLWluZm8uZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2Jv''@;'; put 'put ''eF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tb3V0bGluZS1pbmZvLmRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLW91dGxpbmUtaW5mbzpkaXNhYmxlZCBp''@;'; put 'put ''bnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1vdXRsaW5lLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hl''@;'; put 'put ''Y2tlZC1kaXNhYmxlZC1jb2xvcil9LmNoZWNrYm94LmJ0bi5idG4tcHJpbWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYnRuLXByaW1hcnktY2hlY2tlZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWNoZWNrZWQtY29sb3IpfS5jaGVja2JveC5idG4uYnRuLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gu''@;'; put 'put ''YnRuLmJ0bi1wcmltYXJ5IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXByaW1hcnkgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tcHJp''@;'; put 'put ''bWFyeSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1zdWNjZXNzIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlu''@;'; put 'put ''bGluZS5idG4uYnRuLXN1Y2Nlc3MgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtY2hlY2tlZC1jb2xvcil9LmNoZWNrYm94''@;'; put 'put ''LmJ0bi5idG4tc3VjY2VzcyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLXN1Y2Nlc3MgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4tc3VjY2VzcyBp''@;'; put 'put ''bnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1zdWNjZXNzIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWNoZWNrZWQtY29sb3IpfS5j''@;'; put 'put ''aGVja2JveC5idG4uYnRuLXdhcm5pbmcgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4td2FybmluZyBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5n''@;'; put 'put ''LWNoZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi13YXJuaW5nIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4td2FybmluZyBpbnB1dFt0''@;'; put 'put ''eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi13YXJuaW5nIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLXdhcm5pbmcgaW5wdXRbdHlwZT1jaGVja2Jv''@;'; put 'put ''eF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctY2hlY2tlZC1jb2xvcil9LmNoZWNrYm94LmJ0bi5idG4tZGFuZ2VyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWRhbmdlciBpbnB1''@;'; put 'put ''dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItY2hlY2tlZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItY2hlY2tlZC1jb2xvcil9LmNoZWNrYm94LmJ0bi5idG4tZGFuZ2VyIGlucHV0W3R5cGU9''@;'; put 'put ''Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4tZGFuZ2VyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWRhbmdlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xh''@;'; put 'put ''YmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1kYW5nZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1saW5rIGlucHV0W3R5cGU9''@;'; put 'put ''Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWwsLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWxpbmsgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tbGluay1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWxp''@;'; put 'put ''bmstY2hlY2tlZC1jb2xvcil9LmNoZWNrYm94LmJ0bi5idG4tbGluayBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC5idG4uYnRuLWxpbmsgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuY2hlY2tib3gtaW5s''@;'; put 'put ''aW5lLmJ0bi5idG4tbGluayBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1saW5rIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWNoZWNr''@;'; put 'put ''ZWQtY29sb3IpfS5jaGVja2JveC5idG4uYnRuLWludmVyc2UgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbCwuY2hlY2tib3gtaW5saW5lLmJ0bi5idG4taW52ZXJzZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWJ0bi1pbnZlcnNlLWNoZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1jaGVja2VkLWNvbG9yKX0uY2hlY2tib3guYnRuLmJ0bi1pbnZlcnNlIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LmJ0bi5idG4taW52''@;'; put 'put ''ZXJzZSBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5jaGVja2JveC1pbmxpbmUuYnRuLmJ0bi1pbnZlcnNlIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmNoZWNrYm94LWlubGluZS5idG4uYnRuLWludmVyc2UgaW5wdXRb''@;'; put 'put ''dHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNo''@;'; put 'put ''ZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1ob3Zlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtaG92ZXItY29sb3IpfS5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtaG92ZXItY29sb3IpfS5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1hY3RpdmUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1jb2xvcil9LnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigt''@;'; put 'put ''LWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWFjdGl2ZS1jb2xvcil9LnJhZGlvLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbHtjb2xvcjp2YXIoLS1jbHItYnRuLWRl''@;'; put 'put ''ZmF1bHQtY2hlY2tlZC1kaXNhYmxlZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1kaXNhYmxlZC1iZy1jb2xvcil9LnJhZGlvLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5i''@;'; put 'put ''dG4uZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bjpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVs''@;'; put 'put ''PmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWRpc2FibGVkLWNvbG9yKX0ucmFkaW8uYnRuIGxhYmVsLC5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBsYWJlbHt3aWR0aDoxMDAlfS5yYWRpby5idG4uYnRuLXNlY29uZGFyeSBpbnB1''@;'; put 'put ''dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5l''@;'; put 'put ''IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFk''@;'; put 'put ''aW8uYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAucmFk''@;'; put 'put ''aW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1iZy1jb2xvcik7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29u''@;'; put 'put ''LC5yYWRpby5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpj''@;'; put 'put ''aGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8u''@;'; put 'put ''YnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1v''@;'; put 'put ''dXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9cmFk''@;'; put 'put ''aW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVs''@;'; put 'put ''PmNkcy1pY29uLC5yYWRpby5idG4uYnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xy''@;'; put 'put ''LWljb24sLnJhZGlvLmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNv''@;'; put 'put ''biwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLWluZm8gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1''@;'; put 'put ''bHQtY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLnJhZGlvLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUgaW5w''@;'; put 'put ''dXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbCwucmFkaW8uYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbCwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhv''@;'; put 'put ''dmVyK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLnJhZGlvLmJ0bi5idG4t''@;'; put 'put ''aW5mby1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLWlu''@;'; put 'put ''Zm8gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1ob3Zlci1jb2xvcil9LnJhZGlvLmJ0bi5i''@;'; put 'put ''dG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPXJh''@;'; put 'put ''ZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xy''@;'; put 'put ''LWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4u''@;'; put 'put ''YnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tc2Vj''@;'; put 'put ''b25kYXJ5LW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXBy''@;'; put 'put ''aW1hcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5''@;'; put 'put ''IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6aG92ZXIrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5y''@;'; put 'put ''YWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDpob3ZlcitsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0''@;'; put 'put ''LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5m''@;'; put 'put ''byBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmhvdmVyK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tZGVmYXVsdC1jaGVja2VkLWhvdmVyLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWwsLnJh''@;'; put 'put ''ZGlvLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlv''@;'; put 'put ''XTpjaGVja2VkOmFjdGl2ZStsYWJlbCwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWws''@;'; put 'put ''LnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWwsLnJhZGlvLmJ0bi5idG4taW5mby1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5m''@;'; put 'put ''byAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4tZGVm''@;'; put 'put ''YXVsdC1jaGVja2VkLWFjdGl2ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kZWZhdWx0LWNoZWNrZWQtYWN0aXZlLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5i''@;'; put 'put ''dG4tc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLWluZm8gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4taW5mbyBpbnB1dFt0eXBlPXJhZGlv''@;'; put 'put ''XTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+''@;'; put 'put ''Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tcHJpbWFyeS1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXByaW1hcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNv''@;'; put 'put ''biwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbiwu''@;'; put 'put ''cmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXByaW1hcnkgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5yYWRpby5i''@;'; put 'put ''dG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4u''@;'; put 'put ''YnRuLWluZm8tb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jbHItaWNvbiwu''@;'; put 'put ''cmFkaW8uYnRuLmJ0bi1pbmZvLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+Y2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZDphY3RpdmUrbGFiZWw+''@;'; put 'put ''Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1pbmZvIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6YWN0aXZlK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtaW5mbyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkOmFjdGl2ZStsYWJlbD5jZHMtaWNvbntjb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1hY3RpdmUtY29sb3IpfS5yYWRpby5idG4uYnRuLXNlY29uZGFyeS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpj''@;'; put 'put ''aGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLWluZm8uZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1pbmZvOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS5kaXNhYmxl''@;'; put 'put ''ZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCts''@;'; put 'put ''YWJlbCwucmFkaW8uYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRu''@;'; put 'put ''LXNlY29uZGFyeS1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1wcmltYXJ5OmRp''@;'; put 'put ''c2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLXNlY29uZGFyeTpkaXNhYmxlZCBpbnB1dFt0eXBl''@;'; put 'put ''PXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLWluZm8tb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuLmRpc2FibGVkIGlucHV0W3R5cGU9cmFk''@;'; put 'put ''aW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4taW5mby1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRpby5idG46ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106''@;'; put 'put ''Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLWluZm8uZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbHtjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYnRuLWRlZmF1bHQtY2hlY2tlZC1kaXNhYmxlZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1kaXNhYmxlZC1iZy1jb2xvcil9LnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQr''@;'; put 'put ''bGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24s''@;'; put 'put ''LnJhZGlvLmJ0bi5idG4tc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4taW5mby5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLWluZm8u''@;'; put 'put ''ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1pbmZvOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4taW5mbzpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlv''@;'; put 'put ''XTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2Rz''@;'; put 'put ''LWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0''@;'; put 'put ''bi1wcmltYXJ5LW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1w''@;'; put 'put ''cmltYXJ5LW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1wcmltYXJ5LW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNv''@;'; put 'put ''bmRhcnktb3V0bGluZS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXNlY29uZGFyeS1vdXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tc2Vj''@;'; put 'put ''b25kYXJ5LW91dGxpbmU6ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1zZWNvbmRhcnktb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91''@;'; put 'put ''dGxpbmUtcHJpbWFyeS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtcHJpbWFyeS5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxp''@;'; put 'put ''bmUtcHJpbWFyeTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtcHJpbWFyeTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUt''@;'; put 'put ''c2Vjb25kYXJ5LmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5l''@;'; put 'put ''LXNlY29uZGFyeTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4taW5mby1v''@;'; put 'put ''dXRsaW5lLmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRpby5idG4uZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8u''@;'; put 'put ''YnRuLmJ0bi1pbmZvLW91dGxpbmUuZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0bi5kaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNk''@;'; put 'put ''cy1pY29uLC5yYWRpby5idG4uYnRuLWluZm8tb3V0bGluZTpkaXNhYmxlZCBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNo''@;'; put 'put ''ZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4taW5mby1vdXRsaW5lOmRpc2FibGVkIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtIC5yYWRpby5idG46ZGlzYWJsZWQgaW5wdXRb''@;'; put 'put ''dHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLWluZm8uZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLWluZm8uZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRp''@;'; put 'put ''b106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLWluZm86ZGlzYWJsZWQgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tl''@;'; put 'put ''ZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtY2hlY2tlZC1kaXNhYmxlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4tcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1wcmltYXJ5LWNo''@;'; put 'put ''ZWNrZWQtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1wcmltYXJ5IGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5idG4tcHJpbWFyeSBpbnB1dFt0eXBlPXJhZGlvXTpj''@;'; put 'put ''aGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tcHJpbWFyeS1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1zdWNjZXNzIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXN1Y2Nlc3MtY2hlY2tl''@;'; put 'put ''ZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLXN1Y2Nlc3MgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1zdWNjZXNzIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNr''@;'; put 'put ''ZWQrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLXdhcm5pbmcgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4td2FybmluZy1jaGVja2VkLWJn''@;'; put 'put ''LWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4td2FybmluZyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXdhcm5pbmcgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCts''@;'; put 'put ''YWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4tZGFuZ2VyIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1jaGVja2VkLWJnLWNvbG9y''@;'; put 'put ''KTtjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1kYW5nZXIgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1kYW5nZXIgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMt''@;'; put 'put ''aWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWRhbmdlci1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBp''@;'; put 'put ''bnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc3VjY2VzcyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVse2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtY2hlY2tlZC1iZy1jb2xvcik7Y29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLW91dGxpbmUtY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4tc3VjY2Vzcy1vdXRsaW5lIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1pdGVtIC5yYWRp''@;'; put 'put ''by5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1zdWNjZXNzLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW0gLnJh''@;'; put 'put ''ZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc3VjY2VzcyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtc3VjY2VzcyBpbnB1dFt0eXBlPXJh''@;'; put 'put ''ZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1idG4tc3VjY2Vzcy1vdXRsaW5lLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLXdhcm5pbmctb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQt''@;'; put 'put ''d2FybmluZyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmct''@;'; put 'put ''b3V0bGluZS1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLXdhcm5pbmctb3V0bGluZS1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi13YXJuaW5nLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwuYWxlcnQtYXBwLWxldmVs''@;'; put 'put ''LmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW0gLnJhZGlvLmJ0biBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5yYWRpby5idG4uYnRuLXdhcm5pbmctb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNkcy1pY29uLC5hbGVydC1hcHAtbGV2''@;'; put 'put ''ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb24sLnJhZGlvLmJ0bi5idG4tb3V0bGluZS13YXJuaW5nIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2xyLWljb24sLnJhZGlvLmJ0bi5i''@;'; put 'put ''dG4tb3V0bGluZS13YXJuaW5nIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi13YXJuaW5nLW91dGxpbmUtY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4tZGFuZ2VyLW91dGxpbmUgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tl''@;'; put 'put ''ZCtsYWJlbCwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbSAucmFkaW8uYnRuIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWwsLnJhZGlvLmJ0bi5idG4tb3V0bGluZS1kYW5nZXIgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbHtiYWNrZ3JvdW5k''@;'; put 'put ''LWNvbG9yOnZhcigtLWNsci1idG4tZGFuZ2VyLW91dGxpbmUtY2hlY2tlZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1kYW5nZXItb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVs''@;'; put 'put ''PmNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jbHItaWNvbiwucmFkaW8uYnRuLmJ0bi1kYW5nZXItb3V0bGluZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVs''@;'; put 'put ''PmNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pdGVtIC5yYWRpby5idG4gaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbiwucmFkaW8uYnRuLmJ0bi1vdXRsaW5lLWRhbmdlciBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVs''@;'; put 'put ''PmNsci1pY29uLC5yYWRpby5idG4uYnRuLW91dGxpbmUtZGFuZ2VyIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1kYW5nZXItb3V0bGluZS1jaGVja2VkLWNvbG9yKX0ucmFkaW8uYnRuLmJ0bi1saW5rIGlucHV0W3R5cGU9cmFk''@;'; put 'put ''aW9dOmNoZWNrZWQrbGFiZWx7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYnRuLWxpbmstY2hlY2tlZC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLWxpbmsgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5j''@;'; put 'put ''bHItaWNvbiwucmFkaW8uYnRuLmJ0bi1saW5rIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrbGFiZWw+Y2RzLWljb257Y29sb3I6dmFyKC0tY2xyLWJ0bi1saW5rLWNoZWNrZWQtY29sb3IpfS5yYWRpby5idG4uYnRuLWludmVyc2UgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbHti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1idG4taW52ZXJzZS1jaGVja2VkLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtY2hlY2tlZC1jb2xvcil9LnJhZGlvLmJ0bi5idG4taW52ZXJzZSBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkK2xhYmVsPmNsci1pY29uLC5y''@;'; put 'put ''YWRpby5idG4uYnRuLWludmVyc2UgaW5wdXRbdHlwZT1yYWRpb106Y2hlY2tlZCtsYWJlbD5jZHMtaWNvbntjb2xvcjp2YXIoLS1jbHItYnRuLWludmVyc2UtY2hlY2tlZC1jb2xvcil9LmJ0bi1ncm91cHtkaXNwbGF5OmlubGluZS1mbGV4O21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTYpfS5idG4tZ3JvdXAgY2xyLWRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Ym9yZGVyLXJhZGl1czowfS5idG4tZ3JvdXAgY2xyLWRyb3Bkb3duOmxhc3QtY2hpbGQgLmRyb3Bkb3duLXRvZ2dsZXtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1jbHItYnRuLWJvcmRlci1y''@;'; put 'put ''YWRpdXMpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWNsci1idG4tYm9yZGVyLXJhZGl1cyl9LmJ0bi1ncm91cCAuYnRue21hcmdpbjowO292ZXJmbG93OmhpZGRlbn0uYnRuLWdyb3VwIC5idG4gbGFiZWx7aGVpZ2h0OjEwMCV9LmJ0bi1ncm91cCAuYnRuIGlucHV0W3R5cGU9''@;'; put 'put ''cmFkaW9dOmhvdmVyLC5idG4tZ3JvdXAgLmJ0biBpbnB1dFt0eXBlPWNoZWNrYm94XTpob3ZlcnthcHBlYXJhbmNlOm5vbmU7b3BhY2l0eToxO3RvcDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7Ym9yZGVyOkhpZ2hsaWdodCBzb2xpZCAycHh9LmJ0bi1ncm91cCAuYnRuIGlucHV0W3R5cGU9''@;'; put 'put ''cmFkaW9dOmhvdmVyOjotbXMtY2hlY2ssLmJ0bi1ncm91cCAuYnRuIGlucHV0W3R5cGU9Y2hlY2tib3hdOmhvdmVyOjotbXMtY2hlY2t7ZGlzcGxheTpub25lfS5idG4tZ3JvdXAgLmJ0bjpub3QoOmZpcnN0LWNoaWxkKXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1s''@;'; put 'put ''ZWZ0LXJhZGl1czowfS5idG4tZ3JvdXAgLmJ0bjpub3QoOmxhc3QtY2hpbGQpe2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH0uYnRuLWdyb3VwIC5idG46ZGlzYWJsZWQ6bm90KDpsYXN0LWNoaWxkKXtib3JkZXItcmlnaHQ6bm9uZX0uYnRu''@;'; put 'put ''LWdyb3VwIC50b29sdGlwOm5vdCg6Zmlyc3QtY2hpbGQpIC5idG57Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0uYnRuLWdyb3VwIC50b29sdGlwOm5vdCg6bGFzdC1jaGlsZCkgLmJ0bntib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO2JvcmRl''@;'; put 'put ''ci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9LmJ0bi1ncm91cC5idG4tcHJpbWFyeSAudG9vbHRpcDpub3QoOmxhc3QtY2hpbGQpPi5idG4sLmJ0bi1ncm91cC5idG4tcHJpbWFyeT4uYnRuOm5vdCg6bGFzdC1jaGlsZCksLmJ0bi1ncm91cC5idG4tbmV1dHJhbCAudG9vbHRpcDpub3QoOmxhc3Qt''@;'; put 'put ''Y2hpbGQpPi5idG4sLmJ0bi1ncm91cC5idG4tbmV1dHJhbD4uYnRuOm5vdCg6bGFzdC1jaGlsZCksLmJ0bi1ncm91cC5idG4tc3VjY2VzcyAudG9vbHRpcDpub3QoOmxhc3QtY2hpbGQpPi5idG4sLmJ0bi1ncm91cC5idG4tc3VjY2Vzcz4uYnRuOm5vdCg6bGFzdC1jaGlsZCksLmJ0bi1ncm91''@;'; put 'put ''cC5idG4tZGFuZ2VyIC50b29sdGlwOm5vdCg6bGFzdC1jaGlsZCk+LmJ0biwuYnRuLWdyb3VwLmJ0bi1kYW5nZXI+LmJ0bjpub3QoOmxhc3QtY2hpbGQpLC5idG4tZ3JvdXAuYnRuLXdhcm5pbmcgLnRvb2x0aXA6bm90KDpsYXN0LWNoaWxkKT4uYnRuLC5idG4tZ3JvdXAuYnRuLXdhcm5pbmc+''@;'; put 'put ''LmJ0bjpub3QoOmxhc3QtY2hpbGQpe21hcmdpbjowIHZhcigtLWNsci1idG4tYm9yZGVyLXdpZHRoKSAwIDB9LmJ0bi1ncm91cD4uYnRuLWdyb3VwLW92ZXJmbG93e3Bvc2l0aW9uOnJlbGF0aXZlfS5idG4tZ3JvdXA+LmJ0bi1ncm91cC1vdmVyZmxvdzpsYXN0LWNoaWxkOm5vdCg6Zmlyc3Qt''@;'; put 'put ''Y2hpbGQpPi5idG46Zmlyc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowIHZhcigtLWNsci1idG4tYm9yZGVyLXJhZGl1cykgdmFyKC0tY2xyLWJ0bi1ib3JkZXItcmFkaXVzKSAwfS5idG4tZ3JvdXA+LmJ0bi1ncm91cC1vdmVyZmxvdzpsYXN0LWNoaWxkOmZpcnN0LWNoaWxkPi5idG46Zmlyc3Qt''@;'; put 'put ''Y2hpbGR7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItYnRuLWJvcmRlci1yYWRpdXMpfS5idG4tZ3JvdXAgLmJ0bjpub3QoW2Rpc2FibGVkXSkrLmJ0bntib3JkZXItbGVmdDpub25lfS5idG4tZ3JvdXAgLnRvb2x0aXA6bm90KDpmaXJzdC1jaGlsZCkgLmJ0bntib3JkZXItbGVmdDpub25lfS5i''@;'; put 'put ''dG4tZ3JvdXAgLmJ0bjpub3QoW2Rpc2FibGVkXSkrLmJ0bi1ncm91cC1vdmVyZmxvdyAuYnRue2JvcmRlci1sZWZ0Om5vbmV9LmJ0bi1ncm91cC5idG4tbGluayAuZHJvcGRvd24tdG9nZ2xlLC5idG4tZ3JvdXAuYnRuLWljb24tbGluay5idG4tbGluayAuYnRuLC5idG4tZ3JvdXAuYnRuLWlj''@;'; put 'put ''b24gLmJ0bnttaW4td2lkdGg6MH0uYnRuLWdyb3VwIC5jbHItaWNvbi10aXRsZXtkaXNwbGF5Om5vbmU7dGV4dC10cmFuc2Zvcm06bm9uZX0uYnRuLWdyb3VwIC5kcm9wZG93bi10b2dnbGV7ZGlzcGxheTpibG9ja30uYnRuLWdyb3VwIC5kcm9wZG93bi1tZW51IGNkcy1pY29uLC5idG4tZ3Jv''@;'; put 'put ''dXAgLmRyb3Bkb3duLW1lbnUgY2xyLWljb257ZGlzcGxheTpub25lfS5idG4tZ3JvdXAgLmRyb3Bkb3duLW1lbnUgLmNsci1pY29uLXRpdGxle2Rpc3BsYXk6aW5saW5lfS5jaGVja2JveCwucmFkaW97cG9zaXRpb246cmVsYXRpdmV9LmNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdLC5j''@;'; put 'put ''aGVja2JveCBpbnB1dFt0eXBlPXJhZGlvXSwucmFkaW8gaW5wdXRbdHlwZT1jaGVja2JveF0sLnJhZGlvIGlucHV0W3R5cGU9cmFkaW9de2N1cnNvcjpwb2ludGVyO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtoZWlnaHQ6MDt3aWR0aDowO29wYWNpdHk6MH0uZHJvcGRvd24tbWVu''@;'; put 'put ''dS5jbHItYnV0dG9uLWdyb3VwLW1lbnV7dmlzaWJpbGl0eTp2aXNpYmxlfWJ1dHRvbi5jbG9zZXtwYWRkaW5nOjA7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9LmNsb3Nle2Zsb2F0OnJpZ2h0O2ZvbnQtc2l6ZToxLjhyZW07''@;'; put 'put ''dHJhbnNpdGlvbjpjb2xvciBsaW5lYXIgLjJzO2ZvbnQtd2VpZ2h0OjIwMDt0ZXh0LXNoYWRvdzpub25lO2xpbmUtaGVpZ2h0OmluaGVyaXQ7Y29sb3I6dmFyKC0tY2xyLWNsb3NlLWNvbG9yKX0uY2xvc2UgY2RzLWljb24sLmNsb3NlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWNsb3NlLWNv''@;'; put 'put ''bG9yKX0uY2xvc2U6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLWNsb3NlLWNvbG9yLWhvdmVyKX0uY2xvc2U6aG92ZXIgY2RzLWljb24sLmNsb3NlOmhvdmVyIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWNsb3NlLWNvbG9yLWhvdmVyKX0uY2xvc2U6YWN0aXZle2NvbG9yOnZhcigtLWNsci1jbG9z''@;'; put 'put ''ZS1jb2xvci1hY3RpdmUpfS5jbG9zZTphY3RpdmUgY2RzLWljb24sLmNsb3NlOmFjdGl2ZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1jbG9zZS1jb2xvci1hY3RpdmUpfS5jbG9zZTpmb2N1c3tvdXRsaW5lOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZSk7b3V0''@;'; put 'put ''bGluZS1jb2xvcjotd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1vZmZzZXQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lLW9mZnNldCl9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItYWxlcnQtYm9yZGVycmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLWFwcC1hbGVydC1wYWdlci13aWR0aDpjYWxjKDE0NCAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2xyLWFsZXJ0LWFjdGlvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWFs''@;'; put 'put ''ZXJ0LWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLWFsZXJ0LWNsb3NlLWljb24tY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWFjdGlvbi1jb2xvcik7LS1jbHItYWxlcnQtY2xvc2UtaWNvbi1ob3Zlci1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYWxlcnQtYWN0aW9uLWFjdGl2ZS1jb2xvcik7LS1jbHItYXBwLWxldmVsLWFsZXJ0LWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2xyLWFwcC1hbGVydC1jbG9zZS1pY29uLWNvbG9yOnZhcigtLWNsci1hcHAtbGV2ZWwtYWxlcnQtY29sb3IpOy0t''@;'; put 'put ''Y2xyLWFsZXJ0LWluZm8tYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvLXRpbnQpOy0tY2xyLWFsZXJ0LWluZm8tZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWFsZXJ0LWluZm8tYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy1zdGF0dXMtaW5mbyk7LS1jbHItYWxlcnQtaW5mby1pY29uLWNvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1mb250LWNvbG9yKTstLWNsci1hbGVydC1pbmZvLWFj''@;'; put 'put ''dGlvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1mb250LWNvbG9yKTstLWNsci1hbGVydC1pbmZvLWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWFjdGlvbi1hY3RpdmUtY29sb3IpOy0tY2xyLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1ob3Zlci1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYWxlcnQtY2xvc2UtaWNvbi1ob3Zlci1jb2xvcik7LS1jbHItYWxlcnQtc3VjY2Vzcy1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MtdGludCk7LS1jbHItYWxlcnQtc3VjY2Vzcy1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUw''@;'; put 'put ''MCk7LS1jbHItYWxlcnQtc3VjY2Vzcy1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzKTstLWNsci1hbGVydC1zdWNjZXNzLWljb24tY29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcik7LS1jbHItYWxlcnQtc3VjY2Vzcy1jbG9zZS1pY29u''@;'; put 'put ''LWNvbG9yOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYWxl''@;'; put 'put ''cnQtYWN0aW9uLWFjdGl2ZS1jb2xvcik7LS1jbHItYWxlcnQtc3VjY2Vzcy1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKTstLWNsci1hbGVydC13YXJuaW5nLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2Fybmlu''@;'; put 'put ''Zy10aW50KTstLWNsci1hbGVydC13YXJuaW5nLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1hbGVydC13YXJuaW5nLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmcpOy0tY2xyLWFsZXJ0LXdhcm5pbmctaWNv''@;'; put 'put ''bi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1mb250LWNvbG9yKTstLWNsci1hbGVydC13YXJuaW5nLWNsb3NlLWljb24tY29sb3I6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcik7LS1jbHItYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3I6dmFyKC0tY2xyLWFsZXJ0''@;'; put 'put ''LXdhcm5pbmctZm9udC1jb2xvcik7LS1jbHItYWxlcnQtd2FybmluZy1hY3Rpb24tYWN0aXZlLWNvbG9yOnZhcigtLWNsci1hbGVydC1hY3Rpb24tYWN0aXZlLWNvbG9yKTstLWNsci1hbGVydC13YXJuaW5nLWNsb3NlLWljb24taG92ZXItY29sb3I6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmct''@;'; put 'put ''Zm9udC1jb2xvcik7LS1jbHItYWxlcnQtZGFuZ2VyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLXRpbnQpOy0tY2xyLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItYWxlcnQtZGFuZ2VyLWJv''@;'; put 'put ''cmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7LS1jbHItYWxlcnQtZGFuZ2VyLWljb24tY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKTstLWNsci1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2Vy''@;'; put 'put ''LWZvbnQtY29sb3IpOy0tY2xyLWFsZXJ0LWRhbmdlci1hY3Rpb24tY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKTstLWNsci1hbGVydC1kYW5nZXItYWN0aW9uLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYWxlcnQtYWN0aW9uLWFjdGl2ZS1jb2xvcik7LS1jbHItYWxl''@;'; put 'put ''cnQtZGFuZ2VyLWNsb3NlLWljb24taG92ZXItY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWNsb3NlLWljb24taG92ZXItY29sb3IpOy0tY2xyLWFsZXJ0LW5ldXRyYWwtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsLXRpbnQpOy0tY2xyLWFsZXJ0LW5ldXRyYWwtZm9udC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWFsZXJ0LW5ldXRyYWwtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtbmV1dHJhbCk7LS1jbHItYWxlcnQtbmV1dHJhbC1pY29uLWNvbG9yOnZhcigtLWNsci1hbGVydC1uZXV0cmFsLWZv''@;'; put 'put ''bnQtY29sb3IpOy0tY2xyLWFsZXJ0LW5ldXRyYWwtY2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yKTstLWNsci1hbGVydC1uZXV0cmFsLWFjdGlvbi1jb2xvcjp2YXIoLS1jbHItYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yKTstLWNsci1hbGVydC1u''@;'; put 'put ''ZXV0cmFsLWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWFjdGlvbi1hY3RpdmUtY29sb3IpOy0tY2xyLWFsZXJ0LW5ldXRyYWwtY2xvc2UtaWNvbi1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtY2xvc2UtaWNvbi1ob3Zlci1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LWlu''@;'; put 'put ''Zm8tYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvKTstLWNsci1hcHAtYWxlcnQtaW5mby1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItYXBwLWFsZXJ0LWluZm8tYm9yZGVyLWNvbG9yOm5vbmU7LS1jbHItYXBwLWFsZXJ0''@;'; put 'put ''LWluZm8taWNvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24tYWN0aXZlLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtaW5mby1jbG9zZS1pY29uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtaW5mby1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNs''@;'; put 'put ''ci1hcHAtYWxlcnQtaW5mby1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtd2FybmluZy1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXdhcm5pbmcpOy0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWZvbnQtY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibGFjayk7LS1jbHIt''@;'; put 'put ''YXBwLWFsZXJ0LXdhcm5pbmctYm9yZGVyLWNvbG9yOm5vbmU7LS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctaWNvbi1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctY2xvc2UtaWNvbi1jb2xvcjp2YXIoLS1jbHItYXBw''@;'; put 'put ''LWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtd2FybmluZy1hY3Rpb24tYWN0aXZlLWNvbG9yOnZhcigtLWNsci1hcHAtYWxl''@;'; put 'put ''cnQtd2FybmluZy1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWhvdmVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMt''@;'; put 'put ''ZGFuZ2VyKTstLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWJvcmRlci1jb2xvcjpub25lOy0tY2xyLWFwcC1hbGVydC1kYW5nZXItaWNvbi1jb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YXBwLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWNsb3NlLWljb24tY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LWRhbmdlci1hY3Rpb24tY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1k''@;'; put 'put ''YW5nZXItZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LWRhbmdlci1hY3Rpb24tYWN0aXZlLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1ob3Zlci1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0''@;'; put 'put ''LWRhbmdlci1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1h''@;'; put 'put ''cHAtYWxlcnQtc3VjY2Vzcy1ib3JkZXItY29sb3I6bm9uZTstLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1pY29uLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1jbG9zZS1pY29uLWNvbG9yOnZhcigtLWNsci1hcHAt''@;'; put 'put ''YWxlcnQtc3VjY2Vzcy1mb250LWNvbG9yKTstLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1hY3Rpb24tY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWFjdGlvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVy''@;'; put 'put ''dC1zdWNjZXNzLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWNsb3NlLWljb24taG92ZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMt''@;'; put 'put ''bmV1dHJhbCk7LS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWJvcmRlci1jb2xvcjpub25lOy0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWljb24tY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWFwcC1hbGVydC1uZXV0cmFsLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWNsb3NlLWljb24tY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWZvbnQtY29sb3IpOy0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWFjdGlvbi1jb2xvcjp2YXIoLS1jbHItYXBw''@;'; put 'put ''LWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWFjdGl2ZS1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtY2xvc2UtaWNvbi1ob3Zlci1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYXBwLWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcik7LS1jbHItYXBwLWFsZXJ0LXBhZ2VyLXRleHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1hcHAtYWxlcnQtaW5mby1wYWdlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWlu''@;'; put 'put ''Zm8tc2hhZGUpOy0tY2xyLWFwcC1hbGVydC13YXJuaW5nLXBhZ2VyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1zaGFkZSk7LS1jbHItYXBwLWFsZXJ0LWRhbmdlci1wYWdlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlci1zaGFkZSk7LS1j''@;'; put 'put ''bHItYXBwLWFsZXJ0LXN1Y2Nlc3MtcGFnZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzLXNoYWRlKTstLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1wYWdlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwtc2hhZGUpOy0tY2xyLWFwcC1hbGVy''@;'; put 'put ''dC1pbmZvLXBhZ2VyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1hcHAtYWxlcnQtd2FybmluZy1wYWdlci1mb250LWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmxhY2spOy0tY2xyLWFwcC1hbGVydC1kYW5nZXItcGFnZXItZm9u''@;'; put 'put ''dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLXBhZ2VyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1wYWdlci1mb250LWNvbG9y''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTEwMCk7LS1jbHItbGlnaHR3ZWlnaHQtYWxlcnQtaW5mby1pY29uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mbyk7LS1jbHItbGlnaHR3ZWlnaHQtYWxlcnQtaW5mby1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10''@;'; put 'put ''eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItbGlnaHR3ZWlnaHQtYWxlcnQtd2FybmluZy1pY29uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtd2FybmluZy1kYXJrKTstLWNsci1saWdodHdlaWdodC1hbGVydC13YXJuaW5nLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9n''@;'; put 'put ''cmFwaHktY29sb3ItNTAwKTstLWNsci1saWdodHdlaWdodC1hbGVydC1kYW5nZXItaWNvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7LS1jbHItbGlnaHR3ZWlnaHQtYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3It''@;'; put 'put ''NTAwKTstLWNsci1saWdodHdlaWdodC1hbGVydC1zdWNjZXNzLWljb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzKTstLWNsci1saWdodHdlaWdodC1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNs''@;'; put 'put ''ci1saWdodHdlaWdodC1hbGVydC1uZXV0cmFsLWljb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1uZXV0cmFsLXNoYWRlKTstLWNsci1saWdodHdlaWdodC1hbGVydC1uZXV0cmFsLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKX0uYWxlcnQt''@;'; put 'put ''aWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uYWxlcnQtaWNvbi13cmFwcGVye2Rp''@;'; put 'put ''c3BsYXk6aW5saW5lLWZsZXg7ZmxleDowIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uYWxlcnQtaXRlbXtmbGV4OjEgMSBhdXRvO2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6bm93cmFwO2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS04KX0uYWxlcnQtaXRlbXN7ZmxleDoxIDEgYXV0bztmbGV4LWZsb3c6Y29sdW1uIG5vd3JhcDtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgMDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtkaXNwbGF5OmZsZXh9LmFsZXJ0LWl0ZW0+c3BhbiwuYWxlcnQt''@;'; put 'put ''dGV4dHtmbGV4OjEgMTt0ZXh0LWFsaWduOmxlZnQ7YWxpZ24tc2VsZjpjZW50ZXJ9LmFsZXJ0e2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXNpemUtMyk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0''@;'; put 'put ''KTtsaW5lLWhlaWdodDpjYWxjKDIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJl''@;'; put 'put ''Y3Rpb246cm93O3dpZHRoOmF1dG87Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItYWxlcnQtYm9yZGVycmFkaXVzKTtwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2Ut''@;'; put 'put ''NCk7YmFja2dyb3VuZDp2YXIoLS1jbHItYWxlcnQtaW5mby1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tZm9udC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWFsZXJ0LWluZm8tYm9yZGVy''@;'; put 'put ''LWNvbG9yKX0uYWxlcnQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGF7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tZm9udC1jb2xvcil9LmFsZXJ0IC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhIGNkcy1pY29uLC5hbGVydCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYSBjbHItaWNv''@;'; put 'put ''bntmaWxsOnZhcigtLWNsci1hbGVydC1pbmZvLWZvbnQtY29sb3IpfS5hbGVydCAuYWxlcnQtaWNvbntjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1pY29uLWNvbG9yKX0uYWxlcnQgLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFs''@;'; put 'put ''ZXJ0LWluZm8tYWN0aW9uLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWFjdGl2ZS1jb2xvcil9LmFsZXJ0IC5hbGVydC1hY3Rpb24sLmFsZXJ0IC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0u''@;'; put 'put ''YWxlcnQgLmFsZXJ0LWFjdGlvbi5idG4sLmFsZXJ0IC5kcm9wZG93bi10b2dnbGUuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpO2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcil9LmFsZXJ0IC5hbGVydC1hY3Rpb24uYnRu''@;'; put 'put ''IGNkcy1pY29uLC5hbGVydCAuYWxlcnQtYWN0aW9uLmJ0biBjbHItaWNvbiwuYWxlcnQgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2RzLWljb24sLmFsZXJ0IC5kcm9wZG93bi10b2dnbGUuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcil9LmFsZXJ0''@;'; put 'put ''IC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcil9LmFsZXJ0IC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQgLmFsZXJ0LWFjdGlvbi5i''@;'; put 'put ''dG46YWN0aXZlIGNsci1pY29uLC5hbGVydCAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0IC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpfS5hbGVydCAuY2xvc2V7Y29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0IC5jbG9zZSBjZHMtaWNvbiwuYWxlcnQgLmNsb3NlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0IC5jbG9zZTpmb2N1cywuYWxlcnQgLmNsb3Nl''@;'; put 'put ''OmhvdmVyLC5hbGVydCAuY2xvc2U6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydCAuY2xvc2U6Zm9jdXMgY2RzLWljb24sLmFsZXJ0IC5jbG9zZTpmb2N1cyBjbHItaWNvbiwuYWxlcnQgLmNsb3NlOmhvdmVyIGNkcy1pY29u''@;'; put 'put ''LC5hbGVydCAuY2xvc2U6aG92ZXIgY2xyLWljb24sLmFsZXJ0IC5jbG9zZTphY3RpdmUgY2RzLWljb24sLmFsZXJ0IC5jbG9zZTphY3RpdmUgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtaW5mb3tiYWNrZ3Jv''@;'; put 'put ''dW5kOnZhcigtLWNsci1hbGVydC1pbmZvLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1mb250LWNvbG9yKTtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItYWxlcnQtaW5mby1ib3JkZXItY29sb3IpfS5h''@;'; put 'put ''bGVydC5hbGVydC1pbmZvIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhe2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWZvbnQtY29sb3IpfS5hbGVydC5hbGVydC1pbmZvIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhIGNkcy1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5hbGVydC1pdGVt''@;'; put 'put ''cyAuYWxlcnQtaXRlbSBhIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFsZXJ0LWluZm8tZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWljb257Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8taWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbnMg''@;'; put 'put ''LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWFjdGl2ZS1jb2xvcil9LmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbiwuYWxlcnQuYWxl''@;'; put 'put ''cnQtaW5mbyAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbi5idG4sLmFsZXJ0LmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZS5idG57Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1h''@;'; put 'put ''bGVydC1pbmZvLWFjdGlvbi1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9uLmJ0biBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9uLmJ0biBjbHItaWNvbiwuYWxlcnQuYWxl''@;'; put 'put ''cnQtaW5mbyAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtaW5mbyAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24uYnRuOmFj''@;'; put 'put ''dGl2ZSwuYWxlcnQuYWxlcnQtaW5mbyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWluZm8gLmFs''@;'; put 'put ''ZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNsci1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtaW5mbyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWlu''@;'; put 'put ''Zm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtaW5mbyAuY2xvc2V7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWluZm8gLmNsb3NlIGNkcy1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5jbG9zZSBjbHItaWNvbntmaWxsOnZhcigt''@;'; put 'put ''LWNsci1hbGVydC1pbmZvLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC5hbGVydC1pbmZvIC5jbG9zZTpmb2N1cywuYWxlcnQuYWxlcnQtaW5mbyAuY2xvc2U6aG92ZXIsLmFsZXJ0LmFsZXJ0LWluZm8gLmNsb3NlOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtaW5mby1jbG9zZS1pY29u''@;'; put 'put ''LWhvdmVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtaW5mbyAuY2xvc2U6Zm9jdXMgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWluZm8gLmNsb3NlOmZvY3VzIGNsci1pY29uLC5hbGVydC5hbGVydC1pbmZvIC5jbG9zZTpob3ZlciBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtaW5mbyAuY2xvc2U6aG92ZXIg''@;'; put 'put ''Y2xyLWljb24sLmFsZXJ0LmFsZXJ0LWluZm8gLmNsb3NlOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtaW5mbyAuY2xvc2U6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3N7YmFj''@;'; put 'put ''a2dyb3VuZDp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtYm9y''@;'; put 'put ''ZGVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1mb250LWNvbG9yKX0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYSBjZHMtaWNvbiwuYWxlcnQu''@;'; put 'put ''YWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3IpfS5hbGVydC5hbGVydC1zdWNjZXNzIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWljb24tY29sb3Ip''@;'; put 'put ''fS5hbGVydC5hbGVydC1zdWNjZXNzIC5hbGVydC1hY3Rpb25zIC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWFjdGlvbi1hY3RpdmUtY29sb3Ip''@;'; put 'put ''fS5hbGVydC5hbGVydC1zdWNjZXNzIC5hbGVydC1hY3Rpb24sLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1zdWNjZXNzIC5hbGVydC1hY3Rpb24uYnRuLC5hbGVydC5h''@;'; put 'put ''bGVydC1zdWNjZXNzIC5kcm9wZG93bi10b2dnbGUuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1hY3Rpb24tY29sb3IpO2NvbG9yOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbi5i''@;'; put 'put ''dG4gY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbi5idG4gY2xyLWljb24sLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb257Y29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUsLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2NvbG9yOnZhcigtLWNsci1hbGVydC1zdWNjZXNz''@;'; put 'put ''LWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNkcy1pY29uLC5hbGVydC5hbGVydC1zdWNjZXNzIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0''@;'; put 'put ''bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmNsb3Nle2NvbG9yOnZhcigtLWNsci1h''@;'; put 'put ''bGVydC1zdWNjZXNzLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC5hbGVydC1zdWNjZXNzIC5jbG9zZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYWxlcnQtc3VjY2Vzcy1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQuYWxlcnQt''@;'; put 'put ''c3VjY2VzcyAuY2xvc2U6Zm9jdXMsLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmhvdmVyLC5hbGVydC5hbGVydC1zdWNjZXNzIC5jbG9zZTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LmFsZXJ0LXN1Y2Nlc3Mg''@;'; put 'put ''LmNsb3NlOmZvY3VzIGNkcy1pY29uLC5hbGVydC5hbGVydC1zdWNjZXNzIC5jbG9zZTpmb2N1cyBjbHItaWNvbiwuYWxlcnQuYWxlcnQtc3VjY2VzcyAuY2xvc2U6aG92ZXIgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmhvdmVyIGNsci1pY29uLC5hbGVydC5hbGVydC1z''@;'; put 'put ''dWNjZXNzIC5jbG9zZTphY3RpdmUgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmFjdGl2ZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC1zdWNjZXNzLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC5hbGVydC13YXJuaW5ne2JhY2tncm91bmQ6dmFyKC0t''@;'; put 'put ''Y2xyLWFsZXJ0LXdhcm5pbmctYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1hbGVydC13YXJuaW5nLWJvcmRlci1jb2xvcil9LmFs''@;'; put 'put ''ZXJ0LmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGF7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGEgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcg''@;'; put 'put ''LmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGEgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1mb250LWNvbG9yKX0uYWxlcnQuYWxlcnQtd2FybmluZyAuYWxlcnQtaWNvbntjb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1pY29uLWNvbG9yKX0uYWxlcnQuYWxlcnQt''@;'; put 'put ''d2FybmluZyAuYWxlcnQtYWN0aW9ucyAuZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1hY3Rpb24tYWN0aXZlLWNvbG9yKX0uYWxlcnQuYWxlcnQt''@;'; put 'put ''d2FybmluZyAuYWxlcnQtYWN0aW9uLC5hbGVydC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9uLmJ0biwuYWxlcnQuYWxlcnQtd2FybmluZyAu''@;'; put 'put ''ZHJvcGRvd24tdG9nZ2xlLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24uYnRuIGNkcy1pY29uLC5h''@;'; put 'put ''bGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24uYnRuIGNsci1pY29uLC5hbGVydC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGUuYnRuIGNkcy1pY29uLC5hbGVydC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGUuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1h''@;'; put 'put ''bGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlLC5hbGVydC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3Ip''@;'; put 'put ''fS5hbGVydC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2xyLWljb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZlIGNkcy1p''@;'; put 'put ''Y29uLC5hbGVydC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC13YXJuaW5nIC5jbG9zZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1j''@;'; put 'put ''bG9zZS1pY29uLWNvbG9yKX0uYWxlcnQuYWxlcnQtd2FybmluZyAuY2xvc2UgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmNsb3NlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFsZXJ0LXdhcm5pbmctY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmNsb3Nl''@;'; put 'put ''OmZvY3VzLC5hbGVydC5hbGVydC13YXJuaW5nIC5jbG9zZTpob3ZlciwuYWxlcnQuYWxlcnQtd2FybmluZyAuY2xvc2U6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hbGVydC13YXJuaW5nLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC5hbGVydC13YXJuaW5nIC5jbG9zZTpmb2N1cyBj''@;'; put 'put ''ZHMtaWNvbiwuYWxlcnQuYWxlcnQtd2FybmluZyAuY2xvc2U6Zm9jdXMgY2xyLWljb24sLmFsZXJ0LmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmhvdmVyIGNkcy1pY29uLC5hbGVydC5hbGVydC13YXJuaW5nIC5jbG9zZTpob3ZlciBjbHItaWNvbiwuYWxlcnQuYWxlcnQtd2FybmluZyAuY2xvc2U6''@;'; put 'put ''YWN0aXZlIGNkcy1pY29uLC5hbGVydC5hbGVydC13YXJuaW5nIC5jbG9zZTphY3RpdmUgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQuYWxlcnQtZGFuZ2Vye2JhY2tncm91bmQ6dmFyKC0tY2xyLWFsZXJ0LWRhbmdl''@;'; put 'put ''ci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKTtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWJvcmRlci1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAu''@;'; put 'put ''YWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpfS5hbGVydC5hbGVydC1kYW5nZXIgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGEgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0''@;'; put 'put ''ZW0gYSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hbGVydC1kYW5nZXItZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQtaWNvbntjb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWljb24tY29sb3IpfS5hbGVydC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbnMgLmRy''@;'; put 'put ''b3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1hY3Rpb24tY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWFjdGlvbi1hY3RpdmUtY29sb3IpfS5hbGVydC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbiwuYWxlcnQu''@;'; put 'put ''YWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbi5idG4sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0bntib3JkZXItY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1hY3Rpb24tY29sb3IpO2NvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb24uYnRuIGNkcy1pY29uLC5hbGVydC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbi5idG4g''@;'; put 'put ''Y2xyLWljb24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGUuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItYWN0aW9uLWNvbG9yKX0uYWxlcnQuYWxlcnQt''@;'; put 'put ''ZGFuZ2VyIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLmJ0bjphY3Rp''@;'; put 'put ''dmUgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2xyLWljb24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0bjph''@;'; put 'put ''Y3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1hY3Rpb24tY29sb3IpfS5hbGVydC5hbGVydC1kYW5nZXIgLmNsb3Nle2NvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2UgY2RzLWlj''@;'; put 'put ''b24sLmFsZXJ0LmFsZXJ0LWRhbmdlciAuY2xvc2UgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC5hbGVydC1kYW5nZXIgLmNsb3NlOmZvY3VzLC5hbGVydC5hbGVydC1kYW5nZXIgLmNsb3NlOmhvdmVyLC5hbGVydC5hbGVydC1k''@;'; put 'put ''YW5nZXIgLmNsb3NlOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC5hbGVydC1kYW5nZXIgLmNsb3NlOmZvY3VzIGNkcy1pY29uLC5hbGVydC5hbGVydC1kYW5nZXIgLmNsb3NlOmZvY3VzIGNsci1pY29uLC5hbGVydC5h''@;'; put 'put ''bGVydC1kYW5nZXIgLmNsb3NlOmhvdmVyIGNkcy1pY29uLC5hbGVydC5hbGVydC1kYW5nZXIgLmNsb3NlOmhvdmVyIGNsci1pY29uLC5hbGVydC5hbGVydC1kYW5nZXIgLmNsb3NlOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQuYWxlcnQtZGFuZ2VyIC5jbG9zZTphY3RpdmUgY2xyLWljb257Zmls''@;'; put 'put ''bDp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC5hbGVydC1uZXV0cmFse2JhY2tncm91bmQ6dmFyKC0tY2xyLWFsZXJ0LW5ldXRyYWwtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1hbGVydC1uZXV0cmFsLWZvbnQtY29sb3IpO2JvcmRlcjp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1hbGVydC1uZXV0cmFsLWJvcmRlci1jb2xvcil9LmFsZXJ0LmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGF7Y29sb3I6dmFyKC0tY2xyLWFsZXJ0LW5ldXRyYWwtZm9u''@;'; put 'put ''dC1jb2xvcil9LmFsZXJ0LmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGEgY2RzLWljb24sLmFsZXJ0LmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGEgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yKX0u''@;'; put 'put ''YWxlcnQgLmFsZXJ0LWl0ZW0+c3BhbiwuYWxlcnQgLmFsZXJ0LWl0ZW0gLmFsZXJ0LXRleHQsLmFsZXJ0IC5hbGVydC1pdGVtIC5hbGVydC1hY3Rpb25ze3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSAwfS5hbGVydCAuYWxlcnQtaXRlbSAuY2xyLWljb257aGVpZ2h0OnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtOCk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KTttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KX0uYWxlcnQgLmFsZXJ0LWl0ZW0gLmNsci1pY29uKy5hbGVydC10ZXh0e3BhZGRpbmctbGVmdDowfS5hbGVydCAuYWxlcnQtaXRl''@;'; put 'put ''bSAuY2xyLWljb24rLmFsZXJ0LXRleHQ6YmVmb3Jle2NvbnRlbnQ6bm9uZX0uYWxlcnQgLmFsZXJ0LWFjdGlvbnN7ZmxleDowIDAgYXV0bzt3aGl0ZS1zcGFjZTpub3dyYXB9LmFsZXJ0IC5hbGVydC1hY3Rpb25zPi5hbGVydC1hY3Rpb246bm90KDpsYXN0LWNoaWxkKSwuYWxlcnQgLmFsZXJ0''@;'; put 'put ''LWFjdGlvbnM+LmRyb3Bkb3duOm5vdCg6bGFzdC1jaGlsZCl7bWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9LmFsZXJ0IC5hbGVydC1hY3Rpb25zIC5kcm9wZG93bi1pdGVte2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi10ZXh0LWNvbG9yKX0uYWxlcnQgLmFsZXJ0LWFj''@;'; put 'put ''dGlvbiwuYWxlcnQgLmRyb3Bkb3duLXRvZ2dsZXt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfS5hbGVydCAuYWxlcnQtYWN0aW9uIGJ1dHRvbi5kcm9wZG93bi10b2dnbGU6bm90KC5idG4pe2JhY2tncm91bmQ6MCAwO2N1cnNvcjpwb2ludGVyO2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi10''@;'; put 'put ''ZXh0LWNvbG9yKX0uYWxlcnQgLmRyb3Bkb3duLXRvZ2dsZTpub3QoLmJ0bil7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjB9LmFsZXJ0IC5jbG9zZXtvcmRlcjoxMDA7ZmxleDowIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTt3aWR0''@;'; put 'put ''aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21hcmdpbjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDB9LmFsZXJ0IC5jbG9zZSBjZHMtaWNvbiwuYWxlcnQgLmNsb3NlIGNsci1pY29ue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtOSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5hbGVydCAuYWxlcnQtc3Bpbm5lci5zcGlubmVyLWlubGluZXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTt3aWR0aDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttYXJnaW46MH0uYWxlcnQgLmFsZXJ0LXNwaW5uZXIuc3Bpbm5lci1pbmxpbmU6YmVmb3JlLC5hbGVydCAuYWxlcnQtc3Bpbm5l''@;'; put 'put ''ci5zcGlubmVyLWlubGluZTphZnRlcntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uYWxl''@;'; put 'put ''cnQgLmNsb3Nlfi5hbGVydC1pdGVtPi5hbGVydC1hY3Rpb25ze3BhZGRpbmctcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX0uYWxlcnQgLmNsb3Nlfi5hbGVydC1pdGVtPi5hbGVydC1hY3Rpb25zPi5hbGVydC1hY3Rpb246bGFzdC1jaGlsZHttYXJnaW4tcmlnaHQ6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS02KX0uYWxlcnQuYWxlcnQtbGlnaHR3ZWlnaHR7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjB9LmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0IC5hbGVydC1pdGVtc3twYWRkaW5nOjB9LmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0IC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbXtt''@;'; put 'put ''aW4taGVpZ2h0OjA7bWFyZ2luOjB9LmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0IC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbT5zcGFuLC5hbGVydC5hbGVydC1saWdodHdlaWdodCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gLmFsZXJ0LWFjdGlvbnMsLmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0''@;'; put 'put ''IC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSAuYWxlcnQtdGV4dHtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpfS5hbGVydC5hbGVydC1saWdodHdlaWdodCAuY2xvc2V7ZGlzcGxheTpub25lfS5hbGVydC5hbGVydC1saWdo''@;'; put 'put ''dHdlaWdodDpub3QoLmFsZXJ0LXNtKSAuYWxlcnQtaWNvbnttYXJnaW46MH0uYWxlcnQuYWxlcnQtbGlnaHR3ZWlnaHQuYWxlcnQtaW5mbyAuYWxlcnQtdGV4dHtjb2xvcjp2YXIoLS1jbHItbGlnaHR3ZWlnaHQtYWxlcnQtaW5mby1mb250LWNvbG9yKX0uYWxlcnQuYWxlcnQtbGlnaHR3ZWln''@;'; put 'put ''aHQuYWxlcnQtaW5mbyAuYWxlcnQtaWNvbntjb2xvcjp2YXIoLS1jbHItbGlnaHR3ZWlnaHQtYWxlcnQtaW5mby1pY29uLWNvbG9yKX0uYWxlcnQuYWxlcnQtbGlnaHR3ZWlnaHQuYWxlcnQtd2FybmluZyAuYWxlcnQtdGV4dHtjb2xvcjp2YXIoLS1jbHItbGlnaHR3ZWlnaHQtYWxlcnQtd2Fy''@;'; put 'put ''bmluZy1mb250LWNvbG9yKX0uYWxlcnQuYWxlcnQtbGlnaHR3ZWlnaHQuYWxlcnQtd2FybmluZyAuYWxlcnQtaWNvbntjb2xvcjp2YXIoLS1jbHItbGlnaHR3ZWlnaHQtYWxlcnQtd2FybmluZy1pY29uLWNvbG9yKX0uYWxlcnQuYWxlcnQtbGlnaHR3ZWlnaHQuYWxlcnQtZGFuZ2VyIC5hbGVy''@;'; put 'put ''dC10ZXh0e2NvbG9yOnZhcigtLWNsci1saWdodHdlaWdodC1hbGVydC1kYW5nZXItZm9udC1jb2xvcil9LmFsZXJ0LmFsZXJ0LWxpZ2h0d2VpZ2h0LmFsZXJ0LWRhbmdlciAuYWxlcnQtaWNvbntjb2xvcjp2YXIoLS1jbHItbGlnaHR3ZWlnaHQtYWxlcnQtZGFuZ2VyLWljb24tY29sb3IpfS5h''@;'; put 'put ''bGVydC5hbGVydC1saWdodHdlaWdodC5hbGVydC1zdWNjZXNzIC5hbGVydC10ZXh0e2NvbG9yOnZhcigtLWNsci1saWdodHdlaWdodC1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3IpfS5hbGVydC5hbGVydC1saWdodHdlaWdodC5hbGVydC1zdWNjZXNzIC5hbGVydC1pY29ue2NvbG9yOnZhcigt''@;'; put 'put ''LWNsci1saWdodHdlaWdodC1hbGVydC1zdWNjZXNzLWljb24tY29sb3IpfS5hbGVydC5hbGVydC1saWdodHdlaWdodC5hbGVydC1uZXV0cmFsIC5hbGVydC10ZXh0e2NvbG9yOnZhcigtLWNsci1saWdodHdlaWdodC1hbGVydC1uZXV0cmFsLWZvbnQtY29sb3IpfS5hbGVydC5hbGVydC1saWdo''@;'; put 'put ''dHdlaWdodC5hbGVydC1uZXV0cmFsIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1saWdodHdlaWdodC1hbGVydC1uZXV0cmFsLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWx7bWFyZ2luOjA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO292ZXJmbG93LXk6YXV0bztiYWNrZ3JvdW5k''@;'; put 'put ''OnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1ib3JkZXIt''@;'; put 'put ''Y29sb3IpfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGF7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGEgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAu''@;'; put 'put ''YWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1mb250LWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1pY29uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVs''@;'; put 'put ''IC5hbGVydC1hY3Rpb25zIC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWFjdGl2ZS1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbCAu''@;'; put 'put ''YWxlcnQtYWN0aW9uLC5hbGVydC1hcHAtbGV2ZWwgLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsIC5hbGVydC1hY3Rpb24uYnRuLC5hbGVydC1hcHAtbGV2ZWwgLmRyb3Bkb3duLXRvZ2dsZS5idG57''@;'; put 'put ''Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWFjdGlvbi5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQt''@;'; put 'put ''YWN0aW9uLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsIC5kcm9wZG93bi10b2dnbGUuYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcil9LmFsZXJ0''@;'; put 'put ''LWFwcC1sZXZlbCAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUsLmFsZXJ0LWFwcC1sZXZlbCAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtYWN0aW9uLmJ0bjphY3Rp''@;'; put 'put ''dmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2xy''@;'; put 'put ''LWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2V7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwgLmNsb3NlIGNkcy1pY29uLC5hbGVydC1h''@;'; put 'put ''cHAtbGV2ZWwgLmNsb3NlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwgLmNsb3NlOmZvY3VzLC5hbGVydC1hcHAtbGV2ZWwgLmNsb3NlOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwgLmNsb3NlOmFjdGl2ZXtj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2U6Zm9jdXMgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2U6Zm9jdXMgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2U6aG92ZXIgY2Rz''@;'; put 'put ''LWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2U6aG92ZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbCAuY2xvc2U6YWN0aXZlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwgLmNsb3NlOmFjdGl2ZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1jbG9zZS1pY29u''@;'; put 'put ''LWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtIC5idG57bWFyZ2luOjB9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZve2JhY2tncm91bmQ6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tZm9u''@;'; put 'put ''dC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWJvcmRlci1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhe2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1hcHAtYWxlcnQtaW5mby1mb250LWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGEgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSBhIGNsci1pY29ue2Zp''@;'; put 'put ''bGw6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWZvbnQtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtaWNvbntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8taWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb25z''@;'; put 'put ''IC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWFjdGl2ZS1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVy''@;'; put 'put ''dC1hY3Rpb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1hY3Rpb24uYnRuLC5hbGVydC1hcHAtbGV2ZWwuYWxl''@;'; put 'put ''cnQtaW5mbyAuZHJvcGRvd24tdG9nZ2xlLmJ0bntib3JkZXItY29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5hbGVydC1hY3Rp''@;'; put 'put ''b24uYnRuIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9uLmJ0biBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5kcm9wZG93''@;'; put 'put ''bi10b2dnbGUuYnRuIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUu''@;'; put 'put ''YnRuOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuYWxlcnQtYWN0aW9uLmJ0bjph''@;'; put 'put ''Y3RpdmUgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5kcm9wZG93bi10b2dnbGUuYnRuOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1hcHAt''@;'; put 'put ''YWxlcnQtaW5mby1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuY2xvc2V7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuY2xvc2UgY2RzLWljb24sLmFsZXJ0LWFwcC1s''@;'; put 'put ''ZXZlbC5hbGVydC1pbmZvIC5jbG9zZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNsb3NlOmZvY3VzLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuY2xvc2U6aG92ZXIsLmFs''@;'; put 'put ''ZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5jbG9zZTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuY2xvc2U6Zm9jdXMgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVy''@;'; put 'put ''dC1pbmZvIC5jbG9zZTpmb2N1cyBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWluZm8gLmNsb3NlOmhvdmVyIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtaW5mbyAuY2xvc2U6aG92ZXIgY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5jbG9zZTph''@;'; put 'put ''Y3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1pbmZvIC5jbG9zZTphY3RpdmUgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYXBwLWFsZXJ0LWluZm8tY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXJ7YmFja2dyb3VuZDp2YXIo''@;'; put 'put ''LS1jbHItYXBwLWFsZXJ0LWRhbmdlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItZm9udC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItYm9yZGVy''@;'; put 'put ''LWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1mb250LWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0g''@;'; put 'put ''YSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1pY29ue2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb25zIC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcik7Ym9y''@;'; put 'put ''ZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWFjdGlvbi1hY3RpdmUtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''YXBwLWFsZXJ0LWRhbmdlci1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb24uYnRuLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5kcm9wZG93bi10b2dnbGUuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWRh''@;'; put 'put ''bmdlci1hY3Rpb24tY29sb3IpO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbi5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlv''@;'; put 'put ''bi5idG4gY2xyLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5n''@;'; put 'put ''ZXItYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWFj''@;'; put 'put ''dGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmFsZXJ0LWFjdGlvbi5idG46YWN0aXZlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRh''@;'; put 'put ''bmdlciAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFw''@;'; put 'put ''cC1sZXZlbC5hbGVydC1kYW5nZXIgLmNsb3Nle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5jbG9zZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuY2xvc2UgY2xy''@;'; put 'put ''LWljb257ZmlsbDp2YXIoLS1jbHItYXBwLWFsZXJ0LWRhbmdlci1jbG9zZS1pY29uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuY2xvc2U6Zm9jdXMsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmNsb3NlOmhvdmVyLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQt''@;'; put 'put ''ZGFuZ2VyIC5jbG9zZTphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmNsb3NlOmZvY3VzIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5jbG9z''@;'; put 'put ''ZTpmb2N1cyBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LWRhbmdlciAuY2xvc2U6aG92ZXIgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmNsb3NlOmhvdmVyIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtZGFuZ2VyIC5jbG9zZTphY3RpdmUg''@;'; put 'put ''Y2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXIgLmNsb3NlOmFjdGl2ZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLWNsb3NlLWljb24taG92ZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbHtiYWNrZ3JvdW5kOnZhcigt''@;'; put 'put ''LWNsci1hcHAtYWxlcnQtbmV1dHJhbC1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1ib3Jk''@;'; put 'put ''ZXItY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtZm9udC1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1pdGVtcyAuYWxlcnQt''@;'; put 'put ''aXRlbSBhIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1mb250LWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0''@;'; put 'put ''LWFjdGlvbnMgLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWFjdGlvbi1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1hY3Rpb24tYWN0aXZlLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFs''@;'; put 'put ''ZXJ0LW5ldXRyYWwgLmFsZXJ0LWFjdGlvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWFjdGlv''@;'; put 'put ''bi5idG4sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5kcm9wZG93bi10b2dnbGUuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5ldXRyYWwtYWN0aW9uLWNvbG9yKX0uYWxl''@;'; put 'put ''cnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmFsZXJ0LWFjdGlvbi5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1hY3Rpb24uYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuZHJvcGRvd24tdG9nZ2xlLmJ0biBj''@;'; put 'put ''ZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1hY3Rpb24uYnRu''@;'; put 'put ''OmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuYWxlcnQtYWN0aW9uLmJ0bjph''@;'; put 'put ''Y3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwu''@;'; put 'put ''YWxlcnQtbmV1dHJhbCAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5jbG9zZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5l''@;'; put 'put ''dXRyYWwtY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5jbG9zZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmNsb3NlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLWNsb3NlLWljb24tY29s''@;'; put 'put ''b3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJhbCAuY2xvc2U6Zm9jdXMsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5jbG9zZTpob3ZlciwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmNsb3NlOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LW5l''@;'; put 'put ''dXRyYWwtY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5jbG9zZTpmb2N1cyBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmNsb3NlOmZvY3VzIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtbmV1dHJh''@;'; put 'put ''bCAuY2xvc2U6aG92ZXIgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1uZXV0cmFsIC5jbG9zZTpob3ZlciBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmNsb3NlOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LW5ldXRyYWwgLmNs''@;'; put 'put ''b3NlOmFjdGl2ZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmd7YmFja2dyb3VuZDp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctYmctY29sb3IpO2NvbG9yOnZh''@;'; put 'put ''cigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1mb250LWNvbG9yKTtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctYm9yZGVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcg''@;'; put 'put ''LmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGF7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWZvbnQtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtaXRlbXMgLmFsZXJ0LWl0ZW0gYSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdh''@;'; put 'put ''cm5pbmcgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGEgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctZm9udC1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1p''@;'; put 'put ''Y29uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQt''@;'; put 'put ''d2FybmluZy1hY3Rpb24tYWN0aXZlLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNv''@;'; put 'put ''bG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbi5idG4sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5kcm9wZG93bi10b2dnbGUuYnRue2JvcmRlci1jb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9yKTtjb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmFsZXJ0LWFjdGlvbi5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24uYnRuIGNsci1pY29uLC5hbGVy''@;'; put 'put ''dC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcil9''@;'; put 'put ''LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1hY3Rpb24tY29sb3IpfS5h''@;'; put 'put ''bGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmRyb3Bk''@;'; put 'put ''b3duLXRvZ2dsZS5idG46YWN0aXZlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5h''@;'; put 'put ''bGVydC13YXJuaW5nIC5jbG9zZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5jbG9zZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmNsb3NlIGNsci1pY29u''@;'; put 'put ''e2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xvc2U6Zm9jdXMsLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5jbG9zZTpob3ZlciwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdh''@;'; put 'put ''cm5pbmcgLmNsb3NlOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5jbG9zZTpmb2N1cyBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmNs''@;'; put 'put ''b3NlOmZvY3VzIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtd2FybmluZyAuY2xvc2U6aG92ZXIgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC13YXJuaW5nIC5jbG9zZTpob3ZlciBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmFj''@;'; put 'put ''dGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXdhcm5pbmcgLmNsb3NlOmFjdGl2ZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1jbG9zZS1pY29uLWhvdmVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3N7YmFja2dyb3Vu''@;'; put 'put ''ZDp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1mb250LWNvbG9yKTtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nl''@;'; put 'put ''c3MtYm9yZGVyLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGF7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWZvbnQtY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtaXRlbXMg''@;'; put 'put ''LmFsZXJ0LWl0ZW0gYSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIGEgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtZm9udC1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNz''@;'; put 'put ''IC5hbGVydC1pY29ue2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1pY29uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbnMgLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGV7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNz''@;'; put 'put ''LWFjdGlvbi1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1hY3Rpb24tYWN0aXZlLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRv''@;'; put 'put ''Z2dsZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbi5idG4sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5kcm9wZG93bi10b2dnbGUuYnRue2JvcmRlci1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtYWN0aW9uLWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0LWFjdGlvbi5idG4gY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZl''@;'; put 'put ''bC5hbGVydC1zdWNjZXNzIC5hbGVydC1hY3Rpb24uYnRuIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZS5idG4gY2xyLWljb257''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2ZSwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZle2Nv''@;'; put 'put ''bG9yOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1hY3Rpb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuYWxlcnQtYWN0aW9uLmJ0bjphY3RpdmUgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5hbGVydC1hY3Rpb24uYnRuOmFjdGl2''@;'; put 'put ''ZSBjbHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmRyb3Bkb3duLXRvZ2dsZS5idG46YWN0aXZlIGNkcy1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuZHJvcGRvd24tdG9nZ2xlLmJ0bjphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFw''@;'; put 'put ''cC1hbGVydC1zdWNjZXNzLWFjdGlvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5jbG9zZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5jbG9zZSBjZHMtaWNv''@;'; put 'put ''biwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLWNsb3NlLWljb24tY29sb3IpfS5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuY2xvc2U6Zm9jdXMsLmFsZXJ0LWFwcC1sZXZlbC5hbGVy''@;'; put 'put ''dC1zdWNjZXNzIC5jbG9zZTpob3ZlciwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtY2xvc2UtaWNvbi1ob3Zlci1jb2xvcil9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5jbG9zZTpm''@;'; put 'put ''b2N1cyBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmZvY3VzIGNsci1pY29uLC5hbGVydC1hcHAtbGV2ZWwuYWxlcnQtc3VjY2VzcyAuY2xvc2U6aG92ZXIgY2RzLWljb24sLmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1zdWNjZXNzIC5jbG9zZTpob3ZlciBj''@;'; put 'put ''bHItaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmFjdGl2ZSBjZHMtaWNvbiwuYWxlcnQtYXBwLWxldmVsLmFsZXJ0LXN1Y2Nlc3MgLmNsb3NlOmFjdGl2ZSBjbHItaWNvbntmaWxsOnZhcigtLWNsci1hcHAtYWxlcnQtc3VjY2Vzcy1jbG9zZS1pY29uLWhvdmVy''@;'; put 'put ''LWNvbG9yKX0uYWxlcnQtYXBwLWxldmVsIC5hbGVydC1pdGVtc3thbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW17anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7bWlu''@;'; put 'put ''LWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWl0ZW0gLmFsZXJ0LWFjdGlvbnN7cGFkZGluZzowfS5hbGVydC1hcHAtbGV2ZWwgLmNsb3Nle21hcmdpbjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpIDB9LmFsZXJ0LXNtIC5hbGVydC1p''@;'; put 'put ''dGVtcyAuYWxlcnQtaXRlbXttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmFsZXJ0LXNtIC5hbGVydC1pY29uLXdyYXBwZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtYmFzaXM6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03''@;'; put 'put ''KX0uYWxlcnQtc20gLmFsZXJ0LWljb257aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmFs''@;'; put 'put ''ZXJ0LXNtIC5hbGVydC1pdGVtPnNwYW4sLmFsZXJ0LXNtIC5hbGVydC1pdGVtIC5hbGVydC10ZXh0LC5hbGVydC1zbSAuYWxlcnQtaXRlbSAuYWxlcnQtYWN0aW9uc3tmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1s''@;'; put 'put ''ZXR0ZXItc3BhY2luZyk7cGFkZGluZzowfS5hbGVydC1zbSAuY2xvc2V7bWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgMH0uYWxlcnQtc20gLmFsZXJ0LXNwaW5uZXIuc3Bpbm5lci1pbmxpbmV7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS03KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmFsZXJ0LXNtIC5hbGVydC1zcGlubmVyLnNwaW5uZXItaW5saW5lOmJlZm9yZSwuYWxlcnQtc20gLmFsZXJ0LXNwaW5uZXIuc3Bp''@;'; put 'put ''bm5lci1pbmxpbmU6YWZ0ZXJ7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmFsZXJ0LXNt''@;'; put 'put ''LmFsZXJ0LWxpZ2h0d2VpZ2h0e2JhY2tncm91bmQ6MCAwO2JvcmRlcjowfS5hbGVydC1zbS5hbGVydC1saWdodHdlaWdodCAuYWxlcnQtaXRlbXN7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmFsZXJ0LXNtLmFsZXJ0LWxpZ2h0d2VpZ2h0IC5hbGVydC1pdGVtcyAuYWxlcnQtaXRl''@;'; put 'put ''bXtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgMH0uYWxlcnQtc20uYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtPnNwYW4sLmFsZXJ0LXNtLmFsZXJ0LWxpZ2h0d2VpZ2h0IC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSAuYWxlcnQtYWN0aW9ucywu''@;'; put 'put ''YWxlcnQtc20uYWxlcnQtbGlnaHR3ZWlnaHQgLmFsZXJ0LWl0ZW1zIC5hbGVydC1pdGVtIC5hbGVydC10ZXh0e2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlv''@;'; put 'put ''bi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyl9LmFsZXJ0LXNtLmFsZXJ0LWxpZ2h0d2Vp''@;'; put 'put ''Z2h0IC5hbGVydC1pdGVtcyAuYWxlcnQtaXRlbSAuYWxlcnQtaWNvbi13cmFwcGVye2ZsZXgtYmFzaXM6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uYWxlcnQtc20uYWxlcnQtbGlnaHR3ZWlnaHQgLmNsb3Nle2Rpc3BsYXk6bm9u''@;'; put 'put ''ZX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc2OHB4KXsuYWxlcnQgLmFsZXJ0LWl0ZW17ZmxleC13cmFwOndyYXB9LmFsZXJ0IC5hbGVydC1pdGVtIC5hbGVydC10ZXh0e21heC13aWR0aDo5MCU7d2lkdGg6OTAlO2ZsZXgtYmFzaXM6OTAlfS5hbGVydCAuYWxlcnQtaXRlbSAuYWxl''@;'; put 'put ''cnQtYWN0aW9uc3tmbGV4OjEgMCAxMDAlfS5hbGVydC1hcHAtbGV2ZWwgLmFsZXJ0LWFjdGlvbnN7bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMil9fS5hbGVydC1oaWRkZW57ZGlzcGxheTpub25lfS5hbGVydHMgLmFsZXJ0e21hcmdpbi10b3A6MH0uYWxlcnRzIC5hbGVy''@;'; put 'put ''dHMtd3JhcHBlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93fS5hbGVydHMgLmFsZXJ0cy13cmFwcGVyIGNsci1hbGVydHtmbGV4OjEgMSAxMDAlfS5hbGVydHMuYWxlcnQtaW5mb3tiYWNrZ3JvdW5kOnZhcigtLWNsci1hcHAtYWxlcnQtaW5mby1wYWdlci1iZy1jb2xvcil9LmFs''@;'; put 'put ''ZXJ0cy5hbGVydC13YXJuaW5ne2JhY2tncm91bmQ6dmFyKC0tY2xyLWFwcC1hbGVydC13YXJuaW5nLXBhZ2VyLWJnLWNvbG9yKX0uYWxlcnRzLmFsZXJ0LWRhbmdlcntiYWNrZ3JvdW5kOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLXBhZ2VyLWJnLWNvbG9yKX0uYWxlcnRzLmFsZXJ0LXN1''@;'; put 'put ''Y2Nlc3N7YmFja2dyb3VuZDp2YXIoLS1jbHItYXBwLWFsZXJ0LXN1Y2Nlc3MtcGFnZXItYmctY29sb3IpfS5hbGVydHMuYWxlcnQtbmV1dHJhbHtiYWNrZ3JvdW5kOnZhcigtLWNsci1hcHAtYWxlcnQtbmV1dHJhbC1wYWdlci1iZy1jb2xvcil9LmFsZXJ0cy1wYWdlcntjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItYXBwLWFsZXJ0LXBhZ2VyLXRleHQtY29sb3IpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7ZmxleDoxIDAgdmFyKC0tY2xyLWFwcC1hbGVydC1wYWdlci13aWR0aCl9LmFsZXJ0LWluZm8gLmFsZXJ0cy1wYWdlcntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LWlu''@;'; put 'put ''Zm8tcGFnZXItZm9udC1jb2xvcil9LmFsZXJ0LXdhcm5pbmcgLmFsZXJ0cy1wYWdlcntjb2xvcjp2YXIoLS1jbHItYXBwLWFsZXJ0LXdhcm5pbmctcGFnZXItZm9udC1jb2xvcil9LmFsZXJ0LWRhbmdlciAuYWxlcnRzLXBhZ2Vye2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtZGFuZ2VyLXBh''@;'; put 'put ''Z2VyLWZvbnQtY29sb3IpfS5hbGVydC1zdWNjZXNzIC5hbGVydHMtcGFnZXJ7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLXBhZ2VyLWZvbnQtY29sb3IpfS5hbGVydC1uZXV0cmFsIC5hbGVydHMtcGFnZXJ7Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1uZXV0cmFsLXBhZ2Vy''@;'; put 'put ''LWZvbnQtY29sb3IpfS5hbGVydHMtcGFnZXItYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjA7Ym94''@;'; put 'put ''LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtcGFnZXItdGV4dC1jb2xvcik7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OnZhcigtLWNsci1idG4tYXBwZWFyYW5jZS1zdGFuZGFy''@;'; put 'put ''ZC1oZWlnaHQpfWJ1dHRvbi5hbGVydHMtcGFnZXItYnV0dG9ue2N1cnNvcjpwb2ludGVyfS5hbGVydHMtcGFnZXItYnV0dG9uIGNkcy1pY29uLC5hbGVydHMtcGFnZXItYnV0dG9uIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtcGFnZXItdGV4dC1jb2xvcil9LmFsZXJ0LWlu''@;'; put 'put ''Zm8gLmFsZXJ0cy1wYWdlci1idXR0b24gY2RzLWljb24sLmFsZXJ0LWluZm8gLmFsZXJ0cy1wYWdlci1idXR0b24gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1pbmZvLXBhZ2VyLWZvbnQtY29sb3IpfS5hbGVydC13YXJuaW5nIC5hbGVydHMtcGFnZXItYnV0dG9uIGNkcy1p''@;'; put 'put ''Y29uLC5hbGVydC13YXJuaW5nIC5hbGVydHMtcGFnZXItYnV0dG9uIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1hcHAtYWxlcnQtd2FybmluZy1wYWdlci1mb250LWNvbG9yKX0uYWxlcnQtZGFuZ2VyIC5hbGVydHMtcGFnZXItYnV0dG9uIGNkcy1pY29uLC5hbGVydC1kYW5nZXIgLmFsZXJ0''@;'; put 'put ''cy1wYWdlci1idXR0b24gY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1kYW5nZXItcGFnZXItZm9udC1jb2xvcil9LmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0cy1wYWdlci1idXR0b24gY2RzLWljb24sLmFsZXJ0LXN1Y2Nlc3MgLmFsZXJ0cy1wYWdlci1idXR0b24gY2xyLWljb257''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWFwcC1hbGVydC1zdWNjZXNzLXBhZ2VyLWZvbnQtY29sb3IpfS5hbGVydC1uZXV0cmFsIC5hbGVydHMtcGFnZXItYnV0dG9uIGNkcy1pY29uLC5hbGVydC1uZXV0cmFsIC5hbGVydHMtcGFnZXItYnV0dG9uIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci1hcHAtYWxl''@;'; put 'put ''cnQtbmV1dHJhbC1wYWdlci1mb250LWNvbG9yKX0uYWxlcnRzLXBhZ2VyLWNvbnRyb2x7ZGlzcGxheTpmbGV4O3doaXRlLXNwYWNlOm5vd3JhcDtoZWlnaHQ6MTAwJTthbGlnbi1pdGVtczpjZW50ZXI7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2Ut''@;'; put 'put ''OSl9LmFsZXJ0cy1wYWdlci1jb250cm9sPip7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZsZXg6MSAxIGF1dG99OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItY2FyZC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5k''@;'; put 'put ''KTstLWNsci1jYXJkLWRpdmlkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpOy0tY2xyLWNhcmQtdGl0bGUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1jYXJkLXRpdGxlLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtd2VpZ2h0KTstLWNsci1jYXJkLWJvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItY2FyZC1ib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgt''@;'; put 'put ''MTAwKTstLWNsci1jYXJkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItY2FyZC1ib3gtc2hhZG93OnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtc2hhZG93LTMwMCk7LS1jbHItY2FyZC1jbGlja2FibGUtYm9yZGVyLWNvbG9yOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpOy0tY2xyLWNhcmQtY2xpY2thYmxlLWJveC1zaGFkb3c6MCAwIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSB2YXIoLS1jbHItY2FyZC1jbGlja2FibGUtYm9yZGVyLWNvbG9yKTstLWNsci1jYXJkLWhl''@;'; put 'put ''YWRlci10aXRsZS1jb2xvcjp2YXIoLS1jbHItY2FyZC10aXRsZS1jb2xvcik7LS1jbHItY2FyZC1jb250ZW50LXRpdGxlLWNvbG9yOnZhcigtLWNsci1jYXJkLXRpdGxlLWNvbG9yKTstLWNsci1jYXJkLXRleHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKX0u''@;'; put 'put ''Y2FyZHtib3gtc2hhZG93OnZhcigtLWNsci1jYXJkLWJveC1zaGFkb3cpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXJhZGl1cyk7Ym9yZGVyOnZhcigtLWNsci1jYXJkLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWNhcmQtYm9yZGVyLWNvbG9yKX0uY2FyZC5j''@;'; put 'put ''bGlja2FibGU6aG92ZXJ7Ym94LXNoYWRvdzp2YXIoLS1jbHItY2FyZC1jbGlja2FibGUtYm94LXNoYWRvdyk7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWNhcmQtY2xpY2thYmxlLWJvcmRlci1jb2xvcik7Y3Vyc29yOnBv''@;'; put 'put ''aW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7dHJhbnNpdGlvbjpib3JkZXIgLjJzIGVhc2UsYm94LXNoYWRvdyAuMnMgZWFzZSx0cmFuc2Zvcm0gLjJzIGVhc2V9LmNhcmQtYmxvY2sgLmNhcmQtZGl2aWRlciwuY2FyZCAuY2FyZC10aXRsZSwuY2FyZCAuY2FyZC10ZXh0LC5jYXJkIC5jYXJk''@;'; put 'put ''LW1lZGlhLWJsb2NrLC5jYXJkIC5saXN0LC5jYXJkIC5saXN0LXVuc3R5bGVke21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNhcmQtYmxvY2sgLmNhcmQtZGl2aWRlcjpsYXN0LWNoaWxkLC5jYXJkIC5jYXJkLXRpdGxlOmxhc3QtY2hpbGQs''@;'; put 'put ''LmNhcmQgLmNhcmQtdGV4dDpsYXN0LWNoaWxkLC5jYXJkIC5jYXJkLW1lZGlhLWJsb2NrOmxhc3QtY2hpbGQsLmNhcmQgLmxpc3Q6bGFzdC1jaGlsZCwuY2FyZCAubGlzdC11bnN0eWxlZDpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0uY2FyZC5jYXJkLWltZz5pbWcsLmNhcmQ+LmNhcmQt''@;'; put 'put ''aW1nOmZpcnN0LWNoaWxkOmxhc3QtY2hpbGQ+aW1nLC5jYXJkLWltZz5pbWd7ZGlzcGxheTpibG9jaztoZWlnaHQ6YXV0bzt3aWR0aDoxMDAlO21heC13aWR0aDoxMDAlfS5jYXJke3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItY2Fy''@;'; put 'put ''ZC1iZy1jb2xvcik7d2lkdGg6MTAwJTttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9LmNhcmQgLmFsZXJ0e21hcmdpbjowIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAwfS5jYXJkIC5idG4tbGlua3ttaW4td2lkdGg6MDtwYWRkaW5nOjB9LmNhcmQuY2xpY2thYmxl''@;'; put 'put ''e2NvbG9yOmluaGVyaXR9LmNhcmQ+Lmxpc3QsLmNhcmQ+Lmxpc3QtdW5zdHlsZWR7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCl9LmNhcmQgLmxpc3QtZ3JvdXB7cGFkZGluZy1sZWZ0OjA7bWFyZ2luLWJvdHRvbTowO2xpc3Qtc3R5''@;'; put 'put ''bGU6bm9uZX0uY2FyZCAubGlzdC1ncm91cC1pdGVte2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWNhcmQtYmct''@;'; put 'put ''Y29sb3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItY2FyZC1ib3JkZXItY29sb3IpfUBzdXBwb3J0cyAoLW1zLWltZS1hbGlnbjphdXRvKXsuY2FyZCAuZHJvcGRvd24+LmRyb3Bkb3duLXRvZ2dsZTphZnRlcntkaXNwbGF5Omlu''@;'; put 'put ''bGluZS1ibG9jazttYXJnaW4tdG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSl9fS5jYXJkLWJsb2Nre3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2FyZC1mb290ZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztnYXA6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS01KTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX1oMy5jYXJkLWhlYWRlciwuY2FyZC1oZWFkZXJ7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC1zaXplKTtmb250LXdl''@;'; put 'put ''aWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxl''@;'; put 'put ''dHRlci1zcGFjaW5nKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7Y29sb3I6dmFyKC0tY2xyLWNhcmQtaGVhZGVyLXRpdGxlLWNvbG9yKX1oNC5jYXJkLXRpdGxlLC5jYXJkLXRpdGxle2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZv''@;'; put 'put ''bnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktc3Vic2VjdGlvbi1sZXR0ZXItc3BhY2luZyk7Y29sb3I6dmFyKC0tY2xyLWNhcmQtY29udGVudC10aXRsZS1jb2xvcil9aDEuY2FyZC1oZWFkZXIsaDEuY2FyZC10aXRsZSxoMi5jYXJkLWhlYWRlcixoMi5jYXJkLXRpdGxlLGgzLmNhcmQtaGVhZGVyLGgzLmNhcmQtdGl0''@;'; put 'put ''bGUsaDQuY2FyZC1oZWFkZXIsaDQuY2FyZC10aXRsZSxoNS5jYXJkLWhlYWRlcixoNS5jYXJkLXRpdGxlLGg2LmNhcmQtaGVhZGVyLGg2LmNhcmQtdGl0bGV7bWFyZ2luLXRvcDowfS5jYXJkLXRleHR7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXpl''@;'; put 'put ''KTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxl''@;'; put 'put ''dHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItY2FyZC10ZXh0LWNvbG9yKX0uY2FyZC1pbWc6Zmlyc3QtY2hpbGQ+aW1ne2JvcmRlci1yYWRpdXM6MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWNsci1jYXJkLWJvcmRlci1yYWRpdXMpO2JvcmRlci10b3AtcmlnaHQtcmFkaXVz''@;'; put 'put ''OnZhcigtLWNsci1jYXJkLWJvcmRlci1yYWRpdXMpfS5jYXJkLWltZzpsYXN0LWNoaWxkPmltZ3tib3JkZXItcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1jbHItY2FyZC1ib3JkZXItcmFkaXVzKTtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp2YXIoLS1jbHIt''@;'; put 'put ''Y2FyZC1ib3JkZXItcmFkaXVzKX0uY2FyZC5jYXJkLWltZz5pbWcsLmNhcmQ+LmNhcmQtaW1nOmZpcnN0LWNoaWxkOmxhc3QtY2hpbGQ+aW1ne2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXJhZGl1cyl9LmNhcmQtYmxvY2sgLmJ0biwuY2FyZC1ibG9jayAuYnRuLmJ0bi1s''@;'; put 'put ''aW5rLC5jYXJkLWJsb2NrIC5jYXJkLWxpbmssLmNhcmQtZm9vdGVyIC5idG4sLmNhcmQtZm9vdGVyIC5idG4uYnRuLWxpbmssLmNhcmQtZm9vdGVyIC5jYXJkLWxpbmssLmNhcmQtYmxvY2sgLmJ0bi1ncm91cCAuYnRuLC5jYXJkLWZvb3RlciAuYnRuLWdyb3VwIC5idG57bWFyZ2luOjB9LmNh''@;'; put 'put ''cmQtaGVhZGVyLC5jYXJkLWJsb2Nre2JvcmRlci1ib3R0b206dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItY2FyZC1ib3JkZXItY29sb3IpfS5jYXJkLWhlYWRlcjpsYXN0LWNoaWxkLC5jYXJkLWJsb2NrOmxhc3QtY2hpbGR7Ym9yZGVyLWJvdHRvbTpub25l''@;'; put 'put ''fS5jYXJkLWRpdmlkZXJ7ZGlzcGxheTpibG9jaztib3JkZXItYm90dG9tOnZhcigtLWNsci1jYXJkLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWNhcmQtZGl2aWRlci1jb2xvcil9LmNhcmQtYmxvY2sgLmNhcmQtZGl2aWRlcnttYXJnaW4tbGVmdDpjYWxjKC0xKnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtOCkpO21hcmdpbi1yaWdodDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCkpO3dpZHRoOmF1dG99LmNhcmQtaGVhZGVyKy5jYXJkLWRpdmlkZXIsLmNhcmQtYmxvY2srLmNhcmQtZGl2aWRlcntkaXNwbGF5Om5vbmV9LmNhcmQtbWVkaWEtYmxvY2t7ZGlzcGxh''@;'; put 'put ''eTpmbGV4fS5jYXJkLW1lZGlhLWJsb2NrIC5jYXJkLW1lZGlhLWltYWdle2Rpc3BsYXk6aW5saW5lLWJsb2NrO2ZsZXg6MCAwIGF1dG87aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTMpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTMpO21heC1oZWlnaHQ6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS0xMyk7bWF4LXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTMpfS5jYXJkLW1lZGlhLWJsb2NrIC5jYXJkLW1lZGlhLWRlc2NyaXB0aW9ue2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyk7ZGlz''@;'; put 'put ''cGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtjb2xvcjp2YXIoLS1jbHItY2FyZC10ZXh0LWNvbG9yKTttYXJnaW4tbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jYXJkLW1lZGlhLWJsb2NrIC5jYXJkLW1lZGlhLXRpdGxlLC5jYXJkLW1lZGlhLWJsb2NrIHNwYW4sLmNh''@;'; put 'put ''cmQtbWVkaWEtYmxvY2sgLmNhcmQtbWVkaWEtdGV4dHtkaXNwbGF5OmlubGluZS1ibG9ja30uY2FyZC1tZWRpYS1ibG9jay53cmFwe2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uY2FyZC1tZWRpYS1ibG9jay53cmFwIC5jYXJkLW1lZGlhLWRlc2NyaXB0aW9ue21hcmdpbi1sZWZ0OjA7bWFyZ2lu''@;'; put 'put ''LXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jYXJkLWJsb2NrPi5saXN0LC5jYXJkLWJsb2NrPi5saXN0LXVuc3R5bGVke3BhZGRpbmc6MH1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOjU3NnB4KXsuY2FyZC1jb2x1bW5ze2NvbHVtbi1jb3VudDozO2NvbHVtbi1nYXA6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS02KTticmVhay1pbnNpZGU6YXZvaWQ7Y29sdW1uLWZpbGw6YmFsYW5jZTstd2Via2l0LXBlcnNwZWN0aXZlOjF9LmNhcmQtY29sdW1ucy5jYXJkLWNvbHVtbnMtMntjb2x1bW4tY291bnQ6Mn0uY2FyZC1jb2x1bW5zLmNhcmQtY29sdW1ucy00e2NvbHVtbi1j''@;'; put 'put ''b3VudDo0fS5jYXJkLWNvbHVtbnMgLmNhcmR7ZGlzcGxheTppbmxpbmUtYmxvY2s7bWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCl9LmNhcmQtY29sdW1ucyAuY2xpY2thYmxle2JhY2tmYWNlLXZpc2liaWxpdHk6aGlkZGVufX1Ac3VwcG9ydHMgKC1tcy1pbWUtYWxpZ246YXV0byl7''@;'; put 'put ''LmNhcmQgLmNoZWNrYm94LmJ0biBsYWJlbCwuY2FyZCAuY2hlY2tib3gtaW5saW5lLmJ0biBsYWJlbCwuY2FyZCAucmFkaW8uYnRuIGxhYmVsLC5jYXJkIC5yYWRpby1pbmxpbmUuYnRuIGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrfX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1uYXYtYm94''@;'; put 'put ''LXNoYWRvdy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItbmF2LWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtYWN0aXZlKTstLWNsci1uYXYtc2VsZWN0ZWQtYmctY29sb3I6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTApOy0tY2xyLW5hdi1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXIpOy0tY2xyLW5hdi1zZWxlY3RlZC1ob3Zlci1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1v''@;'; put 'put ''YmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1ob3Zlcik7LS1jbHItbmF2LXNlbGVjdGVkLWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1hY3RpdmUpOy0tY2xyLW5hdi1saW5r''@;'; put 'put ''LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLW5hdi1saW5rLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSl9QG1lZGlhIHNjcmVlbntzZWN0aW9uW2FyaWEtaGlkZGVuPXRydWVd''@;'; put 'put ''e2Rpc3BsYXk6bm9uZX19W2RhdGEtaGlkZGVuPXRydWVde2Rpc3BsYXk6bm9uZX1idXR0b24ubmF2LWxpbmt7Ym9yZGVyLXJhZGl1czowO3RleHQtdHJhbnNmb3JtOmNhcGl0YWxpemU7bWluLXdpZHRoOjB9LnRhYnMtb3ZlcmZsb3d7cG9zaXRpb246cmVsYXRpdmV9LnRhYnMtb3ZlcmZsb3cg''@;'; put 'put ''LmRyb3Bkb3duLW1lbnV7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTApO2JveC1zaGFkb3c6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMTAwKTtvdmVyZmxvdzpoaWRkZW59LnRhYnMtb3ZlcmZsb3cgLmJ0bntsaW5lLWhlaWdodDpjYWxjKDIwKigxcmVtL3ZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtYmFzZSkpKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC1zaXplLTQpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0w''@;'; put 'put ''KX0udGFiLWNvbnRlbnR7ZGlzcGxheTppbmxpbmV9XzotbXMtZnVsbHNjcmVlbiAudGFiLWNvbnRlbnQsOnJvb3QgLnRhYi1jb250ZW50e2Rpc3BsYXk6aW5saW5lLWJsb2NrO3dpZHRoOjEwMCV9LnRhYnMtdmVydGljYWx7ZGlzcGxheTpmbGV4fS50YWJzLXZlcnRpY2FsPi5uYXZ7aGVpZ2h0''@;'; put 'put ''OmF1dG87Ym94LXNoYWRvdzpub25lO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpzdHJldGNoO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO292ZXJmbG93OmF1dG87ZmxleC1zaHJpbms6MDtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7''@;'; put 'put ''d2lkdGg6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyKTtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0udGFicy12ZXJ0aWNhbD4ubmF2IC5uYXYtbGlua3t0ZXh0LWFsaWduOmxlZnQ7cGFkZGlu''@;'; put 'put ''ZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7Ym9yZGVyOjA7ZmxleC1zaHJpbms6MDttYXJnaW4tdG9wOjA7bWFyZ2luLWxlZnQ6MDt3aWR0aDoxMDAlfS50YWJzLXZlcnRpY2FsPi5uYXYgLm5hdi1saW5rLmJ0bnttYXJnaW4tYm90dG9tOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSl9''@;'; put 'put ''LnRhYnMtdmVydGljYWw+Lm5hdiAubmF2LWxpbmsuYWN0aXZlOmJlZm9yZSwudGFicy12ZXJ0aWNhbD4ubmF2IC5uYXYtbGluazpob3ZlcjpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTtib3JkZXI6MDtib3JkZXIt''@;'; put 'put ''bGVmdDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0zMDApIHNvbGlkIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpO3RyYW5zaXRpb246Ym9yZGVyLWxlZnQgLjJzIGVhc2UtaW59LnRhYnMtYWN0aW9uc3tkaXNwbGF5''@;'; put 'put ''OmlubGluZS1mbGV4O3dpZHRoOjEwMCV9LnRhYnMtYWN0aW9uc1twb3NpdGlvbn49bGVmdF17anVzdGlmeS1jb250ZW50OnN0YXJ0fS50YWJzLWFjdGlvbnNbcG9zaXRpb25+PXJpZ2h0XXtqdXN0aWZ5LWNvbnRlbnQ6ZW5kfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLWRyb3Bkb3duLWFjdGl2''@;'; put 'put ''ZS10ZXh0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci1kcm9wZG93bi1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTstLWNsci1kcm9wZG93bi1ib3JkZXItY29sb3I6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpOy0tY2xyLWRyb3Bkb3duLWRpdmlkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3ItdGludCk7LS1jbHItZHJvcGRvd24tZGl2aWRlci1ib3JkZXItd2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKTst''@;'; put 'put ''LWNsci1kcm9wZG93bi1jaGlsZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpOy0tY2xyLWRyb3Bkb3duLWJnLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcik7LS1jbHItZHJvcGRv''@;'; put 'put ''d24tc2VsZWN0aW9uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZCk7LS1jbHItZHJvcGRvd24tdGV4dC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci1kcm9wZG93bi1oZWFkZXIt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1kcm9wZG93bi1oZWFkZXItZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtbWVkaXVtKTstLWNsci1kcm9wZG93bi1pdGVtLWZvbnQtd2VpZ2h0OnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7LS1jbHItZHJvcGRvd24taXRlbS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci1kcm9wZG93bi1pdGVtLWJnLWNvbG9yOnRyYW5zcGFyZW50Oy0tY2xyLWRyb3Bkb3du''@;'; put 'put ''LWl0ZW0taG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1ob3Zlcik7LS1jbHItZHJvcGRvd24taXRlbS1ob3Zlci1iZy1jb2xvcjp2YXIoIC0tY2xyLWRyb3Bkb3duLWJnLWhvdmVyLWNvbG9yICk7LS1jbHItZHJvcGRvd24taXRlbS1hY3RpdmUt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLWRyb3Bkb3duLWl0ZW0tYWN0aXZlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmUpOy0tY2xyLWRyb3Bkb3duLWl0ZW0t''@;'; put 'put ''c2VsZWN0ZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1zZWxlY3RlZCk7LS1jbHItZHJvcGRvd24taXRlbS1zZWxlY3RlZC1iZy1jb2xvcjp2YXIoIC0tY2xyLWRyb3Bkb3duLXNlbGVjdGlvbi1jb2xvciApOy0tY2xyLWRyb3Bkb3duLWl0ZW0tc2Vs''@;'; put 'put ''ZWN0ZWQtaG92ZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyKTstLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJh''@;'; put 'put ''Y2tncm91bmQtc2VsZWN0ZWQtYWN0aXZlKTstLWNsci1kcm9wZG93bi1pdGVtLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpOy0tY2xyLWRyb3Bkb3duLWl0ZW0tZGlzYWJsZWQtYmctY29sb3I6dHJhbnNwYXJlbnR9LmRy''@;'; put 'put ''b3Bkb3duLW1lbnUgLmJ0biwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeSwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8sLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5LC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1z''@;'; put 'put ''ZWNvbmRhcnksLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmcsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2VzcywuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlciwuZHJvcGRvd24tbWVudSAuYnRuLXBy''@;'; put 'put ''aW1hcnksLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2VzcywuZHJvcGRvd24tbWVudSAuYnRuLWxpbmssLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW0sLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWhlYWRlcntvdmVyZmxvdzpoaWRkZW47''@;'; put 'put ''dGV4dC1vdmVyZmxvdzplbGxpcHNpczt0ZXh0LWFsaWduOmxlZnR9LmRyb3Bkb3due3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xle2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOnJl''@;'; put 'put ''bGF0aXZlO21hcmdpbjowO3doaXRlLXNwYWNlOm5vd3JhcDtjdXJzb3I6cG9pbnRlcn0uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZSBjbHItaWNvbltzaGFwZV49Y2FyZXRdLC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlIGNsci1pY29uW3NoYXBlXj1hbmdsZV17Y29sb3I6aW5oZXJpdDto''@;'; put 'put ''ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZSBj''@;'; put 'put ''ZHMtaWNvbltzaGFwZV49Y2FyZXRdLC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlIGNkcy1pY29uW3NoYXBlXj1hbmdsZV17bWFyZ2luLXRvcDp1bnNldDtjb2xvcjppbmhlcml0O2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2Ut''@;'; put 'put ''Nyl9LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUuYnRue3RleHQtb3ZlcmZsb3c6dW5zZXR9LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUuYnRuIGNsci1pY29ue3RyYW5zZm9ybTpub25lfS5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbltzaGFwZV49Y2FyZXRdLC5k''@;'; put 'put ''cm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbltzaGFwZV49Y2FyZXRdLC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjZHMtaWNvbltzaGFwZV49YW5nbGVdLC5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLmJ0biBjbHItaWNvbltzaGFwZV49YW5nbGVde3JpZ2h0''@;'; put 'put ''OnZhcigtLWNsci1idG4taG9yaXpvbnRhbC1wYWRkaW5nKX0uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZTpub3QoLmJ0bil7cGFkZGluZzowO2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1hY3RpdmUtdGV4dC1jb2xvcil9LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGU6bm90KC5idG4pIGNk''@;'; put 'put ''cy1pY29uW3NoYXBlXj1jYXJldF0sLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGU6bm90KC5idG4pIGNsci1pY29uW3NoYXBlXj1jYXJldF0sLmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGU6bm90KC5idG4pIGNkcy1pY29uW3NoYXBlXj1hbmdsZV0sLmRyb3Bkb3duIC5kcm9wZG93bi10b2dn''@;'; put 'put ''bGU6bm90KC5idG4pIGNsci1pY29uW3NoYXBlXj1hbmdsZV17cmlnaHQ6MH0uZHJvcGRvd24gYnV0dG9uLmRyb3Bkb3duLXRvZ2dsZTpub3QoLmJ0bil7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWFjdGl2ZS10ZXh0LWNv''@;'; put 'put ''bG9yKX0uZHJvcGRvd24tbWVudT4qe2Rpc3BsYXk6YmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwfS5kcm9wZG93bi1tZW51e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47cG9zaXRpb246YWJzb2x1dGU7dG9wOjEwMCU7bGVmdDowO21pbi13aWR0aDpjYWxjKDEyMCooMXJlbS92''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWF4LXdpZHRoOmNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1iZy1jb2xvcik7Ym9yZGVyLXdpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdp''@;'; put 'put ''ZHRoLTEwMCk7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24tYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2JveC1zaGFkb3c6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1z''@;'; put 'put ''aGFkb3ctMjAwKTttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMik7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpIDA7dmlzaWJpbGl0eTpoaWRkZW47ei1pbmRleDoxMDUwfS5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1oZWFkZXJ7Y29sb3I6dmFyKC0tY2xyLWRy''@;'; put 'put ''b3Bkb3duLWhlYWRlci1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1kcm9wZG93bi1oZWFkZXItZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2Ut''@;'; put 'put ''OSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTtwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttYXJnaW46MH0uZHJvcGRvd24tbWVudSAuZHJvcGRvd24taGVhZGVyfi5kcm9wZG93bi1pdGVtLC5k''@;'; put 'put ''cm9wZG93bi1tZW51IC5kcm9wZG93bi1oZWFkZXJ+LmRyb3Bkb3duPi5kcm9wZG93bi1pdGVte3BhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKX0uZHJvcGRvd24tbWVudSAuYnRuLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LC5kcm9wZG93bi1tZW51IC5idG4t''@;'; put 'put ''aW5mbywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnksLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZywuZHJvcGRvd24tbWVudSAuYnRuLW91''@;'; put 'put ''dGxpbmUtZGFuZ2VyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeSwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmcsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLC5kcm9w''@;'; put 'put ''ZG93bi1tZW51IC5idG4tbGluaywuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbXtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tZm9udC13ZWlnaHQpO2xpbmUtaGVp''@;'; put 'put ''Z2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJv''@;'; put 'put ''cGRvd24taXRlbS1iZy1jb2xvcik7Ym9yZGVyOjA7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpmbGV4O2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO2FsaWduLWl0ZW1zOmNlbnRlcjtoZWlnaHQ6YXV0bzttYXJnaW46MDt3aWR0aDoxMDAlO3RleHQtdHJhbnNmb3JtOm5vbmV9LmRyb3Bk''@;'; put 'put ''b3duLW1lbnUgLmJ0bi5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnkuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4taW5mby5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5hY3Rp''@;'; put 'put ''dmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmcuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNj''@;'; put 'put ''ZXNzLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5LmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmcuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vzcy5hY3RpdmUsLmRyb3Bkb3duLW1lbnUg''@;'; put 'put ''LmJ0bi1saW5rLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbS5hY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtYmctY29sb3IpfS5kcm9w''@;'; put 'put ''ZG93bi1tZW51IC5idG46aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnk6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZTpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeTpob3Zlciwu''@;'; put 'put ''ZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXI6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6aG92''@;'; put 'put ''ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXI6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5OmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZzpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3M6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmhv''@;'; put 'put ''dmVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOmhvdmVye2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWhvdmVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWhvdmVyLWJnLWNvbG9yKTt0ZXh0LWRlY29yYXRpb246bm9uZX0uZHJv''@;'; put 'put ''cGRvd24tbWVudSAuYnRuOmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTpob3Zlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6aG92ZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51''@;'; put 'put ''IC5idG4tb3V0bGluZS1wcmltYXJ5OmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZzpob3Zlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRh''@;'; put 'put ''bmdlcjpob3Zlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6aG92ZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyOmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnk6aG92ZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5i''@;'; put 'put ''dG4td2FybmluZzpob3Zlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzOmhvdmVyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWxpbms6aG92ZXIuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOmhvdmVyLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWhvdmVyLWJnLWNvbG9yKX0uZHJvcGRvd24tbWVudSAuYnRuOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91''@;'; put 'put ''dGxpbmU6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5OmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZzphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1v''@;'; put 'put ''dXRsaW5lLWRhbmdlcjphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3M6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnk6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZzphY3Rp''@;'; put 'put ''dmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWxpbms6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tYWN0aXZlLWJnLWNvbG9yKX0uZHJvcGRvd24tbWVudSAuYnRuOmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnk6YWN0aXZlLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWluZm86YWN0aXZlLmFjdGl2ZSwuZHJv''@;'; put 'put ''cGRvd24tbWVudSAuYnRuLW91dGxpbmU6YWN0aXZlLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeTphY3RpdmUuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnk6YWN0aXZlLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxp''@;'; put 'put ''bmUtd2FybmluZzphY3RpdmUuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXI6YWN0aXZlLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2VzczphY3RpdmUuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyOmFjdGl2ZS5hY3RpdmUs''@;'; put 'put ''LmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5OmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nOmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzOmFjdGl2ZS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmFjdGl2ZS5hY3RpdmUs''@;'; put 'put ''LmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06YWN0aXZlLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWFjdGl2ZS1iZy1jb2xvcil9LmRyb3Bkb3duLW1lbnUgLmJ0bjpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFy''@;'; put 'put ''eTpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLWluZm86Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5OmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnk6Zm9jdXMsLmRyb3Bk''@;'; put 'put ''b3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmc6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzczpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlcjpmb2N1cywuZHJvcGRvd24tbWVu''@;'; put 'put ''dSAuYnRuLXByaW1hcnk6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vzczpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLWxpbms6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06Zm9jdXN7ei1pbmRleDpp''@;'; put 'put ''bmhlcml0fS5kcm9wZG93bi1tZW51IC5idG4uZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bjpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeS5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLWlu''@;'; put 'put ''Zm8uZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6ZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQs''@;'; put 'put ''LmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGlu''@;'; put 'put ''ZS13YXJuaW5nLmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nOmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpkaXNhYmxlZCwuZHJvcGRvd24tbWVu''@;'; put 'put ''dSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2VzczpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlcjpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAu''@;'; put 'put ''YnRuLXByaW1hcnkuZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5OmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5kaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmc6ZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmRpc2Fi''@;'; put 'put ''bGVkLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2VzczpkaXNhYmxlZCwuZHJvcGRvd24tbWVudSAuYnRuLWxpbmsuZGlzYWJsZWQsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmRpc2FibGVkLC5kcm9wZG93bi1tZW51IC5k''@;'; put 'put ''cm9wZG93bi1pdGVtOmRpc2FibGVke3BvaW50ZXItZXZlbnRzOm5vbmU7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tZGlzYWJsZWQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tZGlzYWJsZWQtYmctY29sb3IpOy13ZWJraXQtdXNlci1zZWxl''@;'; put 'put ''Y3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5kcm9wZG93bi1tZW51IC5idG4uZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bjpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeS5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29u''@;'; put 'put ''ZGFyeTpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8uZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvOmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91''@;'; put 'put ''dGxpbmU6ZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnkuZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5kaXNh''@;'; put 'put ''YmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5OmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nOmRpc2FibGVkOmhvdmVy''@;'; put 'put ''LC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVu''@;'; put 'put ''dSAuYnRuLW91dGxpbmUtc3VjY2VzczpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlcjpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnkuZGlzYWJsZWQ6aG92ZXIs''@;'; put 'put ''LmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5OmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5kaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmc6ZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmRpc2FibGVk''@;'; put 'put ''OmhvdmVyLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2VzczpkaXNhYmxlZDpob3ZlciwuZHJvcGRvd24tbWVudSAuYnRuLWxpbmsuZGlzYWJsZWQ6aG92ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rOmRpc2FibGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmRpc2Fi''@;'; put 'put ''bGVkOmhvdmVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtOmRpc2FibGVkOmhvdmVye2JhY2tncm91bmQ6MCAwfS5kcm9wZG93bi1tZW51IC5idG4uZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG46ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tc2Vj''@;'; put 'put ''b25kYXJ5LmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeTpkaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvLmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWluZm86ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51''@;'; put 'put ''IC5idG4tb3V0bGluZS5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lOmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnk6ZGlz''@;'; put 'put ''YWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnkuZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnk6ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmRpc2FibGVk''@;'; put 'put ''OmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZzpkaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlci5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlcjpkaXNhYmxlZDphY3RpdmUsLmRy''@;'; put 'put ''b3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzOmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1k''@;'; put 'put ''YW5nZXI6ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeS5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5OmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmcuZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1t''@;'; put 'put ''ZW51IC5idG4td2FybmluZzpkaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3M6ZGlzYWJsZWQ6YWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tbGluay5kaXNhYmxlZDphY3RpdmUsLmRy''@;'; put 'put ''b3Bkb3duLW1lbnUgLmJ0bi1saW5rOmRpc2FibGVkOmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbS5kaXNhYmxlZDphY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06ZGlzYWJsZWQ6YWN0aXZle2JhY2tncm91bmQ6MCAwO2JveC1zaGFkb3c6bm9uZX0uZHJv''@;'; put 'put ''cGRvd24tbWVudSAuYnRuLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeS5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5LmFj''@;'; put 'put ''dGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZy5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlci5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1''@;'; put 'put ''Y2Nlc3MuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyLmFjdGl2ZSwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnkuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5hY3RpdmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmFjdGl2ZSwuZHJvcGRvd24tbWVu''@;'; put 'put ''dSAuYnRuLWxpbmsuYWN0aXZlLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmFjdGl2ZXtwb3NpdGlvbjpyZWxhdGl2ZX0uZHJvcGRvd24tbWVudSAuYnRuLmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnkuYWN0aXZlOmJlZm9yZSwuZHJvcGRvd24tbWVu''@;'; put 'put ''dSAuYnRuLWluZm8uYWN0aXZlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUuYWN0aXZlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5hY3RpdmU6YmVmb3JlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnkuYWN0aXZlOmJl''@;'; put 'put ''Zm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZy5hY3RpdmU6YmVmb3JlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuYWN0aXZlOmJlZm9yZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3VjY2Vzcy5hY3RpdmU6YmVmb3JlLC5kcm9wZG93bi1t''@;'; put 'put ''ZW51IC5idG4tZGFuZ2VyLmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5LmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nLmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3du''@;'; put 'put ''LW1lbnUgLmJ0bi1saW5rLmFjdGl2ZTpiZWZvcmUsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW0uYWN0aXZlOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDt3aWR0aDoxMDAlO2JvcmRlcjowO2JvcmRlci1sZWZ0OnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTMwMCkgc29saWQgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7dHJhbnNpdGlvbjpib3JkZXItbGVmdCAuMnMgZWFzZS1pbn0uZHJvcGRvd24tbWVudSAuYnRuLmV4cGFuZGFibGUsLmRy''@;'; put 'put ''b3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnkuZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8uZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUuZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5leHBhbmRhYmxlLC5kcm9w''@;'; put 'put ''ZG93bi1tZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnkuZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZy5leHBhbmRhYmxlLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZXhwYW5kYWJsZSwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUt''@;'; put 'put ''c3VjY2Vzcy5leHBhbmRhYmxlLC5kcm9wZG93bi1tZW51IC5idG4tZGFuZ2VyLmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5LmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi13YXJuaW5nLmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzLmV4''@;'; put 'put ''cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rLmV4cGFuZGFibGUsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW0uZXhwYW5kYWJsZXtwYWRkaW5nLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9LmRyb3Bkb3duLW1lbnUgLmJ0bi5leHBhbmRhYmxlOmFmdGVyLC5k''@;'; put 'put ''cm9wZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5LmV4cGFuZGFibGU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvLmV4cGFuZGFibGU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLmV4cGFuZGFibGU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1h''@;'; put 'put ''cnkuZXhwYW5kYWJsZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmV4cGFuZGFibGU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXdhcm5pbmcuZXhwYW5kYWJsZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyLmV4''@;'; put 'put ''cGFuZGFibGU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZXhwYW5kYWJsZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLWRhbmdlci5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeS5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93''@;'; put 'put ''bi1tZW51IC5idG4td2FybmluZy5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vzcy5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tbGluay5leHBhbmRhYmxlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmV4cGFuZGFibGU6''@;'; put 'put ''YWZ0ZXJ7Y29udGVudDoiIjttYXNrOnVybCgiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDEyJTIwMTIlMjIlM0UlMEElMjAlMjAl''@;'; put 'put ''MjAlMjAlM0NkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDc3R5bGUlM0UuY2xzLTElN0JmaWxsJTNBJ25vbmUnJTNCJTdEJTNDJTJGc3R5bGUlM0UlMEElMjAlMjAlMjAlMjAlM0MlMkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTNDdGl0bGUlM0VDYXJldCUzQyUyRnRpdGxl''@;'; put 'put ''JTNFJTBBJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xzLTElMjIlMjBkJTNEJTIyTTYlMkM5TDEuMiUyQzQuMmEwLjY4JTJDMC42OCUyQzAlMkMwJTJDMSUyQzEtMUw2JTJDNy4wOCUyQzkuODQlMkMzLjI0YTAuNjglMkMwLjY4JTJDMCUyQzElMkMxJTJDMSUyQzFaJTIyJTJG''@;'; put 'put ''JTNFJTBBJTNDJTJGc3ZnJTNFJTBBIik7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6bm8tcmVwZWF0Oy13ZWJraXQtbWFzay1zaXplOmNvdmVyO21hc2stc2l6ZTpjb3ZlcjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWNvbG9yKTto''@;'; put 'put ''ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO3RyYW5zZm9ybTpyb3RhdGUoLTkwZGVnKTttYXJnaW4tbGVmdDphdXRvfS5kcm9wZG93bi1tZW51IC5idG4uZXhwYW5kYWJsZS5hY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUg''@;'; put 'put ''LmJ0bi1zZWNvbmRhcnkuZXhwYW5kYWJsZS5hY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvLmV4cGFuZGFibGUuYWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5leHBhbmRhYmxlLmFjdGl2ZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxp''@;'; put 'put ''bmUtcHJpbWFyeS5leHBhbmRhYmxlLmFjdGl2ZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmV4cGFuZGFibGUuYWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmV4cGFuZGFibGUuYWN0aXZlOmFmdGVyLC5kcm9wZG93''@;'; put 'put ''bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZXhwYW5kYWJsZS5hY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZXhwYW5kYWJsZS5hY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXIuZXhwYW5kYWJsZS5hY3RpdmU6YWZ0ZXIsLmRy''@;'; put 'put ''b3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5LmV4cGFuZGFibGUuYWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5leHBhbmRhYmxlLmFjdGl2ZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3MuZXhwYW5kYWJsZS5hY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1l''@;'; put 'put ''bnUgLmJ0bi1saW5rLmV4cGFuZGFibGUuYWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmV4cGFuZGFibGUuYWN0aXZlOmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtY29sb3IpfS5kcm9wZG93bi1tZW51IC5i''@;'; put 'put ''dG4uZXhwYW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLXNlY29uZGFyeS5leHBhbmRhYmxlOmhvdmVyOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4taW5mby5leHBhbmRhYmxlOmhvdmVyOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS5leHBhbmRhYmxl''@;'; put 'put ''OmhvdmVyOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5LmV4cGFuZGFibGU6aG92ZXI6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5leHBhbmRhYmxlOmhvdmVyOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJu''@;'; put 'put ''aW5nLmV4cGFuZGFibGU6aG92ZXI6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlci5leHBhbmRhYmxlOmhvdmVyOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzLmV4cGFuZGFibGU6aG92ZXI6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1k''@;'; put 'put ''YW5nZXIuZXhwYW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLXByaW1hcnkuZXhwYW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmcuZXhwYW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3MuZXhwYW5k''@;'; put 'put ''YWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLWxpbmsuZXhwYW5kYWJsZTpob3ZlcjphZnRlciwuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbS5leHBhbmRhYmxlOmhvdmVyOmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0taG92ZXIt''@;'; put 'put ''Y29sb3IpfS5kcm9wZG93bi1tZW51IC5idG4uZXhwYW5kYWJsZTphY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnkuZXhwYW5kYWJsZTphY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1pbmZvLmV4cGFuZGFibGU6YWN0aXZlOmFmdGVyLC5kcm9wZG93bi1t''@;'; put 'put ''ZW51IC5idG4tb3V0bGluZS5leHBhbmRhYmxlOmFjdGl2ZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFyeS5leHBhbmRhYmxlOmFjdGl2ZTphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc2Vjb25kYXJ5LmV4cGFuZGFibGU6YWN0aXZlOmFmdGVyLC5k''@;'; put 'put ''cm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmV4cGFuZGFibGU6YWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZXhwYW5kYWJsZTphY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXN1Y2Nlc3MuZXhwYW5kYWJsZTph''@;'; put 'put ''Y3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXIuZXhwYW5kYWJsZTphY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1wcmltYXJ5LmV4cGFuZGFibGU6YWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5leHBhbmRhYmxlOmFjdGl2ZTphZnRl''@;'; put 'put ''ciwuZHJvcGRvd24tbWVudSAuYnRuLXN1Y2Nlc3MuZXhwYW5kYWJsZTphY3RpdmU6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1saW5rLmV4cGFuZGFibGU6YWN0aXZlOmFmdGVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmV4cGFuZGFibGU6YWN0aXZlOmFmdGVye2JhY2tncm91''@;'; put 'put ''bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tYWN0aXZlLWNvbG9yKX0uZHJvcGRvd24tbWVudSAuYnRuLmV4cGFuZGFibGUuZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi5leHBhbmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tc2Vjb25k''@;'; put 'put ''YXJ5LmV4cGFuZGFibGUuZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zZWNvbmRhcnkuZXhwYW5kYWJsZTpkaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8uZXhwYW5kYWJsZS5kaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLWluZm8uZXhw''@;'; put 'put ''YW5kYWJsZTpkaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUuZXhwYW5kYWJsZS5kaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUuZXhwYW5kYWJsZTpkaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtcHJpbWFy''@;'; put 'put ''eS5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1wcmltYXJ5LmV4cGFuZGFibGU6ZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXNlY29uZGFyeS5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1t''@;'; put 'put ''ZW51IC5idG4tb3V0bGluZS1zZWNvbmRhcnkuZXhwYW5kYWJsZTpkaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZy5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS13YXJuaW5nLmV4cGFuZGFibGU6ZGlz''@;'; put 'put ''YWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLWRhbmdlci5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1kYW5nZXIuZXhwYW5kYWJsZTpkaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtc3Vj''@;'; put 'put ''Y2Vzcy5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzLmV4cGFuZGFibGU6ZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmJ0bi1kYW5nZXIuZXhwYW5kYWJsZS5kaXNhYmxlZDphZnRlciwuZHJvcGRvd24tbWVudSAuYnRu''@;'; put 'put ''LWRhbmdlci5leHBhbmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeS5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeS5leHBhbmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4td2Fy''@;'; put 'put ''bmluZy5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4td2FybmluZy5leHBhbmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vzcy5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tc3VjY2Vz''@;'; put 'put ''cy5leHBhbmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tbGluay5leHBhbmRhYmxlLmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5idG4tbGluay5leHBhbmRhYmxlOmRpc2FibGVkOmFmdGVyLC5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1pdGVtLmV4cGFu''@;'; put 'put ''ZGFibGUuZGlzYWJsZWQ6YWZ0ZXIsLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW0uZXhwYW5kYWJsZTpkaXNhYmxlZDphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWRpc2FibGVkLWNvbG9yKX0uZHJvcGRvd24tbWVudSAuYnRuOmZvY3VzLC5kcm9w''@;'; put 'put ''ZG93bi1tZW51IC5idG4tc2Vjb25kYXJ5OmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4taW5mbzpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmU6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5lLXByaW1hcnk6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1vdXRsaW5l''@;'; put 'put ''LXNlY29uZGFyeTpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtd2FybmluZzpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLW91dGxpbmUtZGFuZ2VyOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tb3V0bGluZS1zdWNjZXNzOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tZGFu''@;'; put 'put ''Z2VyOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tcHJpbWFyeTpmb2N1cywuZHJvcGRvd24tbWVudSAuYnRuLXdhcm5pbmc6Zm9jdXMsLmRyb3Bkb3duLW1lbnUgLmJ0bi1zdWNjZXNzOmZvY3VzLC5kcm9wZG93bi1tZW51IC5idG4tbGluazpmb2N1cywuZHJvcGRvd24tbWVudSAuZHJvcGRv''@;'; put 'put ''d24taXRlbTpmb2N1c3tvdXRsaW5lLW9mZnNldDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikpfS5kcm9wZG93bi1tZW51IC5idG4sLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW17cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9QG1lZGlhIHNjcmVlbiBh''@;'; put 'put ''bmQgKG1heC13aWR0aDo1NzZweCl7LmRyb3Bkb3duLW1lbnUgLmJ0biwuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbXtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX19LmRyb3Bkb3duLW1lbnUgYS5kcm9wZG93bi1pdGVte3Rl''@;'; put 'put ''eHQtZGVjb3JhdGlvbjpub25lfS5kcm9wZG93bi1tZW51IC5kcm9wZG93bi1kaXZpZGVye2JvcmRlci1ib3R0b20td2lkdGg6dmFyKC0tY2xyLWRyb3Bkb3duLWRpdmlkZXItYm9yZGVyLXdpZHRoKTtib3JkZXItYm90dG9tLXN0eWxlOnNvbGlkO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLWRyb3Bkb3duLWRpdmlkZXItY29sb3IpO21hcmdpbjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5idG4tZ3JvdXAtb3ZlcmZsb3cub3Blbj4uZHJvcGRvd24tbWVudSwuYnRuLWdyb3VwLW92ZXJmbG93Lm9wZW4+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudSwu''@;'; put 'put ''dGFicy1vdmVyZmxvdy5vcGVuPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93Lm9wZW4+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24ub3Blbj4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24ub3Blbj4uZHJvcGRvd24tbWVudS13cmFwcGVyPi5kcm9w''@;'; put 'put ''ZG93bi1tZW51e3Zpc2liaWxpdHk6dmlzaWJsZX0uYnRuLWdyb3VwLW92ZXJmbG93LmJvdHRvbS1sZWZ0Pi5kcm9wZG93bi1tZW51LC5idG4tZ3JvdXAtb3ZlcmZsb3cuYm90dG9tLXJpZ2h0Pi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LmJvdHRvbS1sZWZ0Pi5kcm9wZG93bi1tZW51''@;'; put 'put ''LC50YWJzLW92ZXJmbG93LmJvdHRvbS1yaWdodD4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24uYm90dG9tLWxlZnQ+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLmJvdHRvbS1yaWdodD4uZHJvcGRvd24tbWVudXt0b3A6MTAwJTtib3R0b206YXV0bzttYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1z''@;'; put 'put ''cGFjZS0yKSAwIDAgMH0uYnRuLWdyb3VwLW92ZXJmbG93LmJvdHRvbS1sZWZ0Pi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LmJvdHRvbS1sZWZ0Pi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5ib3R0b20tbGVmdD4uZHJvcGRvd24tbWVudXtsZWZ0OjA7cmlnaHQ6YXV0b30uYnRuLWdy''@;'; put 'put ''b3VwLW92ZXJmbG93LmJvdHRvbS1yaWdodD4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy5ib3R0b20tcmlnaHQ+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLmJvdHRvbS1yaWdodD4uZHJvcGRvd24tbWVudXtyaWdodDowO2xlZnQ6YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LnRvcC1s''@;'; put 'put ''ZWZ0Pi5kcm9wZG93bi1tZW51LC5idG4tZ3JvdXAtb3ZlcmZsb3cudG9wLXJpZ2h0Pi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LnRvcC1sZWZ0Pi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LnRvcC1yaWdodD4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24udG9wLWxlZnQ+LmRy''@;'; put 'put ''b3Bkb3duLW1lbnUsLmRyb3Bkb3duLnRvcC1yaWdodD4uZHJvcGRvd24tbWVudXt0b3A6YXV0bztib3R0b206MTAwJTttYXJnaW46MCAwIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikgMH0uYnRuLWdyb3VwLW92ZXJmbG93LnRvcC1sZWZ0Pi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93''@;'; put 'put ''LnRvcC1sZWZ0Pi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi50b3AtbGVmdD4uZHJvcGRvd24tbWVudXtsZWZ0OjA7cmlnaHQ6YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LnRvcC1yaWdodD4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy50b3AtcmlnaHQ+LmRyb3Bkb3duLW1lbnUsLmRy''@;'; put 'put ''b3Bkb3duLnRvcC1yaWdodD4uZHJvcGRvd24tbWVudXtyaWdodDowO2xlZnQ6YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LC5idG4tZ3JvdXAtb3ZlcmZsb3cubGVmdC1ib3R0b20+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cubGVmdC10b3A+''@;'; put 'put ''LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cubGVmdC1ib3R0b20+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVudXtyaWdodDoxMDAlO2xlZnQ6YXV0bzttYXJnaW46MCB2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTIpIDAgMH0uYnRuLWdyb3VwLW92ZXJmbG93LmxlZnQtYm90dG9tPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LmxlZnQtYm90dG9tPi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVudXt0b3A6MDtib3R0b206YXV0''@;'; put 'put ''b30uYnRuLWdyb3VwLW92ZXJmbG93LmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93LmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5sZWZ0LXRvcD4uZHJvcGRvd24tbWVudXtib3R0b206MDt0b3A6YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LnJpZ2h0LXRv''@;'; put 'put ''cD4uZHJvcGRvd24tbWVudSwuYnRuLWdyb3VwLW92ZXJmbG93LnJpZ2h0LWJvdHRvbT4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy5yaWdodC10b3A+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cucmlnaHQtYm90dG9tPi5kcm9wZG93bi1tZW51LC5kcm9wZG93bi5yaWdodC10''@;'; put 'put ''b3A+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLnJpZ2h0LWJvdHRvbT4uZHJvcGRvd24tbWVudXtsZWZ0OjEwMCU7cmlnaHQ6YXV0bzttYXJnaW46MCAwIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKX0uYnRuLWdyb3VwLW92ZXJmbG93LnJpZ2h0LWJvdHRvbT4uZHJvcGRvd24tbWVudSwu''@;'; put 'put ''dGFicy1vdmVyZmxvdy5yaWdodC1ib3R0b20+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLnJpZ2h0LWJvdHRvbT4uZHJvcGRvd24tbWVudXt0b3A6MDtib3R0b206YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93LnJpZ2h0LXRvcD4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdy5yaWdodC10''@;'; put 'put ''b3A+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duLnJpZ2h0LXRvcD4uZHJvcGRvd24tbWVudXtib3R0b206MDt0b3A6YXV0b30uYnRuLWdyb3VwLW92ZXJmbG93IC5kcm9wZG93biAuZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdyAuZHJvcGRvd24gLmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3du''@;'; put 'put ''IC5kcm9wZG93biAuZHJvcGRvd24tbWVudXtib3JkZXItY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWNoaWxkLWJvcmRlci1jb2xvcik7cG9zaXRpb246YWJzb2x1dGV9LmJ0bi1ncm91cC1vdmVyZmxvdyAuZHJvcGRvd24ubGVmdC10b3A+LmRyb3Bkb3duLW1lbnUsLmJ0bi1ncm91cC1vdmVy''@;'; put 'put ''ZmxvdyAuZHJvcGRvd24ubGVmdC10b3A+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdyAuZHJvcGRvd24ubGVmdC10b3A+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cgLmRyb3Bkb3duLmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LXdyYXBw''@;'; put 'put ''ZXI+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duIC5kcm9wZG93bi5sZWZ0LXRvcD4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24gLmRyb3Bkb3duLmxlZnQtdG9wPi5kcm9wZG93bi1tZW51LXdyYXBwZXI+LmRyb3Bkb3duLW1lbnV7aW5zZXQ6MCAxMDAlIGF1dG8gYXV0bzttYXJnaW4tdG9wOmNh''@;'; put 'put ''bGMoKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCkpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7bWFyZ2luLXJpZ2h0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSl9LmJ0bi1ncm91cC1vdmVyZmxvdyAuZHJvcGRvd24ucmlnaHQtdG9wPi5kcm9wZG93bi1tZW51''@;'; put 'put ''LC5idG4tZ3JvdXAtb3ZlcmZsb3cgLmRyb3Bkb3duLnJpZ2h0LXRvcD4uZHJvcGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93IC5kcm9wZG93bi5yaWdodC10b3A+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cgLmRyb3Bkb3duLnJpZ2h0LXRvcD4u''@;'; put 'put ''ZHJvcGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1tZW51LC5kcm9wZG93biAuZHJvcGRvd24ucmlnaHQtdG9wPi5kcm9wZG93bi1tZW51LC5kcm9wZG93biAuZHJvcGRvd24ucmlnaHQtdG9wPi5kcm9wZG93bi1tZW51LXdyYXBwZXI+LmRyb3Bkb3duLW1lbnV7aW5zZXQ6MCBhdXRvIGF1''@;'; put 'put ''dG8gMTAwJTttYXJnaW4tdG9wOmNhbGMoKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCkpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7bWFyZ2luLWxlZnQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpKX0uYnRuLWdyb3VwLW92ZXJmbG93IC5kcm9wZG93bi5sZWZ0''@;'; put 'put ''LWJvdHRvbT4uZHJvcGRvd24tbWVudSwuYnRuLWdyb3VwLW92ZXJmbG93IC5kcm9wZG93bi5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVudS13cmFwcGVyPi5kcm9wZG93bi1tZW51LC50YWJzLW92ZXJmbG93IC5kcm9wZG93bi5sZWZ0LWJvdHRvbT4uZHJvcGRvd24tbWVudSwudGFicy1vdmVy''@;'; put 'put ''ZmxvdyAuZHJvcGRvd24ubGVmdC1ib3R0b20+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudSwuZHJvcGRvd24gLmRyb3Bkb3duLmxlZnQtYm90dG9tPi5kcm9wZG93bi1tZW51LC5kcm9wZG93biAuZHJvcGRvd24ubGVmdC1ib3R0b20+LmRyb3Bkb3duLW1lbnUtd3JhcHBl''@;'; put 'put ''cj4uZHJvcGRvd24tbWVudXtpbnNldDphdXRvIDEwMCUgMCBhdXRvO21hcmdpbi1ib3R0b206Y2FsYygoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKTttYXJnaW4tcmlnaHQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMp''@;'; put 'put ''KX0uYnRuLWdyb3VwLW92ZXJmbG93IC5kcm9wZG93bi5yaWdodC1ib3R0b20+LmRyb3Bkb3duLW1lbnUsLmJ0bi1ncm91cC1vdmVyZmxvdyAuZHJvcGRvd24ucmlnaHQtYm90dG9tPi5kcm9wZG93bi1tZW51LXdyYXBwZXI+LmRyb3Bkb3duLW1lbnUsLnRhYnMtb3ZlcmZsb3cgLmRyb3Bkb3du''@;'; put 'put ''LnJpZ2h0LWJvdHRvbT4uZHJvcGRvd24tbWVudSwudGFicy1vdmVyZmxvdyAuZHJvcGRvd24ucmlnaHQtYm90dG9tPi5kcm9wZG93bi1tZW51LXdyYXBwZXI+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duIC5kcm9wZG93bi5yaWdodC1ib3R0b20+LmRyb3Bkb3duLW1lbnUsLmRyb3Bkb3duIC5k''@;'; put 'put ''cm9wZG93bi5yaWdodC1ib3R0b20+LmRyb3Bkb3duLW1lbnUtd3JhcHBlcj4uZHJvcGRvd24tbWVudXtpbnNldDphdXRvIGF1dG8gMCAxMDAlO21hcmdpbi1ib3R0b206Y2FsYygoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKTttYXJn''@;'; put 'put ''aW4tbGVmdDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykpfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLWxvZ2luLXRpdGxlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItbG9naW4taGludC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlw''@;'; put 'put ''b2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWxvZ2luLWZvb3Rlci1nYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTstLWNsci1sb2dpbi1jb3B5cmlnaHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktbGluay1jb2xvcik7LS1jbHItbG9naW4tYmFja2dyb3VuZC1jb2xvcjp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTstLWNsci1sb2dpbi13ZWxjb21lLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItbG9naW4tZXJyb3ItYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2Vy''@;'; put 'put ''LWJnLWNvbG9yKTstLWNsci1sb2dpbi1lcnJvci1pY29uLWNvbG9yOnZhcigtLWNsci1hbGVydC1kYW5nZXItaWNvbi1jb2xvcik7LS1jbHItbG9naW4tbG9nby1jb2xvcjojNzE3MTc1Oy0tY2xyLWxvZ2luLXRyYWRlbWFyay1jb2xvcjp2YXIoLS1jbHItaDItY29sb3IpOy0tY2xyLWxvZ2lu''@;'; put 'put ''LXRyYWRlbWFyay1mb250LXdlaWdodDp2YXIoLS1jbHItaDItZm9udC13ZWlnaHQpOy0tY2xyLWxvZ2luLXRyYWRlbWFyay1mb250LWZhbWlseTp2YXIoLS1jbHItaDItZm9udC1mYW1pbHkpOy0tY2xyLWxvZ2luLXRyYWRlbWFyay1mb250LXNpemU6dmFyKC0tY2xyLWgyLWZvbnQtc2l6ZSk7''@;'; put 'put ''LS1jbHItbG9naW4tdHJhZGVtYXJrLWxldHRlci1zcGFjaW5nOnZhcigtLWNsci1oMi1sZXR0ZXItc3BhY2luZyl9OnJvb3QgW2Nkcy10aGVtZX49ZGFya117LS1jbHItbG9naW4tbG9nby1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXdoaXRlKX0ubG9naW4td3JhcHBlcntkaXNwbGF5''@;'; put 'put ''OmZsZXg7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZDp1cmwoZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0MlM0Z4bWwlMjB2ZXJzaW9uJTNEJTIyMS4wJTIyJTIwZW5jb2RpbmclM0QlMjJ1dGYtOCUyMiUzRiUzRSUwRCUwQSUzQyUyMURPQ1RZUEUlMjBzdmclMjBQVUJMSUMlMjAl''@;'; put 'put ''MjItJTJGJTJGVzNDJTJGJTJGRFREJTIwU1ZHJTIwMS4xJTJGJTJGRU4lMjIlMjAlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRkdyYXBoaWNzJTJGU1ZHJTJGMS4xJTJGRFREJTJGc3ZnMTEuZHRkJTIyJTNFJTBEJTBBJTNDc3ZnJTBEJTBBJTIwJTIwJTIwJTIwJTIwdmVyc2lvbiUzRCUy''@;'; put 'put ''MjEuMSUyMiUwRCUwQSUyMCUyMCUyMCUyMCUyMGlkJTNEJTIybm8tYXNwZWN0LXJhdGlvJTIyJTBEJTBBJTIwJTIwJTIwJTIwJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlMEQlMEElMjAlMjAlMjAlMjAlMjB4bWxucyUzQXhsaW5rJTNEJTIy''@;'; put 'put ''aHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYxOTk5JTJGeGxpbmslMjIlMEQlMEElMjAlMjAlMjAlMjAlMjB4JTNEJTIyMHB4JTIyJTBEJTBBJTIwJTIwJTIwJTIwJTIweSUzRCUyMjBweCUyMiUwRCUwQSUyMCUyMCUyMCUyMCUyMGhlaWdodCUzRCUyMjIwNTUuNTVweCUyMiUwRCUwQSUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMHdpZHRoJTNEJTIyMTQ0MHB4JTIyJTBEJTBBJTIwJTIwJTIwJTIwJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMjA1NS41NSUyMDE0NDAlMjIlMEQlMEElMjAlMjAlMjAlMjAlMjBwcmVzZXJ2ZUFzcGVjdFJhdGlvJTNEJTIyeE1pbllNaW4lMjBzbGljZSUyMiUzRSUwRCUwQSUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2Rlc2MlM0VMb2dpbiUyMEltYWdlJTNDJTJGZGVzYyUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2clMjBzdHJva2UlM0QlMjJub25lJTIyJTIwc3Ryb2tlLXdpZHRoJTNEJTIyMSUyMiUyMGZpbGwl''@;'; put 'put ''M0QlMjJub25lJTIyJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyMHRyYW5zZm9ybSUzRCUyMnRyYW5zbGF0ZSUyODAuMDAwMDAwJTJDJTIwLTQuMDAwMDAwJTI5JTIyJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDZyUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUzQ2clM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NyZWN0JTIwZmlsbCUzRCUyMiUyM0ZBRkFGQSUyMiUyMHglM0QlMjIwJTIyJTIweSUzRCUyMjQlMjIlM0UlM0MlMkZyZWN0JTNFJTBEJTBBJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjMwMDdDQkIlMjIlMjBvcGFjaXR5JTNEJTIyMC40JTIyJTIwc3R5bGUlM0QlMjJtaXgtYmxlbmQtbW9kZSUzQSUyMG11bHRpcGx5JTNCJTIyJTIwcG9pbnRzJTNEJTIyMTEw''@;'; put 'put ''OC40MyUyMDE0NDMuNjMlMjAxMTA5LjA4JTIwMTQ0My42MyUyMDQ0My40NCUyMDc3Ny43NCUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzkzRDhDQSUyMiUy''@;'; put 'put ''MG9wYWNpdHklM0QlMjIwLjYlMjIlMjBzdHlsZSUzRCUyMm1peC1ibGVuZC1tb2RlJTNBJTIwb3ZlcmxheSUzQiUyMiUyMHBvaW50cyUzRCUyMjAuNzklMjAzMzQuOTIlMjA0NDMuNDQlMjA3NzcuNzQlMjAwLjc5JTIwMzM0LjQ5JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQTBERUVBJTIyJTIwcG9pbnRzJTNEJTIyMC43OSUyMDIxMS44OCUyMDAuNzklMjAzMjkuNiUyMDU5LjYyJTIwMjcwLjc3JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9pbnRzJTNEJTIyMTYwLjY1JTIwMTY5Ljc0JTIwMC43OSUyMDkuNzMlMjAwLjc5JTIwMjExLjg4JTIwOTAuMjclMjAzMDEuNDYlMjA1OS42''@;'; put 'put ''MiUyMDI3MC43NyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0NERTNFRSUyMiUyMHBvaW50cyUzRCUyMjUwMy43NyUyMDE0NDMuNjMlMjA2OTcuNDclMjAx''@;'; put 'put ''NDQzLjYzJTIwODAzLjc0JTIwMTMzNy4zNiUyMDcwNi45MyUyMDEyNDAuNDMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNDREUzRUUlMjIlMjBwb2ludHMl''@;'; put 'put ''M0QlMjIxNTguMzMlMjA2OTEuMTUlMjAwLjc5JTIwODQ4LjcyJTIwMC43OSUyMDE0MjcuNDMlMjA0NDcuNTIlMjA5ODAuNyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUz''@;'; put 'put ''RCUyMiUyM0NFRERFMCUyMiUyMHBvaW50cyUzRCUyMjI1Ny43MSUyMDU5MS43NSUyMDAuNzklMjAzMzQuNDklMjAwLjc5JTIwNTMzLjQyJTIwMTU4LjMzJTIwNjkxLjE1JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQTlDOUQ1JTIyJTIwcG9pbnRzJTNEJTIyMC43OSUyMDUzMy40MiUyMDAuNzklMjA4NDguNzIlMjAxNTguMzMlMjA2OTEuMTUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBRkQ0RTclMjIlMjBwb2ludHMlM0QlMjI4MDYuNDYlMjAxMTQwLjg5JTIwNTQ2Ljk0JTIwODgxLjI4JTIwNDQ3LjUyJTIwOTgwLjclMjA3MDYuOTMlMjAxMjQwLjQzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOEZDNERGJTIyJTIwcG9pbnRzJTNEJTIyNDQ3LjUyJTIwOTgwLjclMjAwLjc5JTIwMTQyNy40MyUyMDAuNzklMjAxNDQzLjYzJTIwNTAzLjc3JTIwMTQ0My42MyUy''@;'; put 'put ''MDcwNi45MyUyMDEyNDAuNDMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM3MEMwREMlMjIlMjBwb2ludHMlM0QlMjI2MDguMjMlMjA4MTkuOTklMjA1NDYu''@;'; put 'put ''OTQlMjA4ODEuMjglMjA4MDYuNDYlMjAxMTQwLjg5JTIwODY3LjY0JTIwMTA3OS43JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9p''@;'; put 'put ''bnRzJTNEJTIyNDIwLjA1JTIwNDI5LjM5JTIwMzE5LjAxJTIwNTMwLjQ1JTIwNjA4LjIzJTIwODE5Ljk5JTIwNzA5LjMlMjA3MTguOTElMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUy''@;'; put 'put ''MGZpbGwlM0QlMjIlMjM2OUFGRDQlMjIlMjBwb2ludHMlM0QlMjI3MDkuMyUyMDcxOC45MSUyMDYwOC4yMyUyMDgxOS45OSUyMDg2Ny42NCUyMDEwNzkuNyUyMDk2OC43NCUyMDk3OC42JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOEVCNUJDJTIyJTIwcG9pbnRzJTNEJTIyNjE5LjU5JTIwMjI5LjgyJTIwMzkzLjQyJTIwMy4xMiUyMDMyNy4yNyUyMDMuMTIlMjAxNjAuNjUlMjAxNjkuNzQlMjA0MjAuMDUlMjA0MjkuMzklMjIlM0UlM0MlMkZwb2x5''@;'; put 'put ''Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM4RUI1QkMlMjIlMjBwb2ludHMlM0QlMjIzMTkuMDElMjA1MzAuNDUlMjAzMTkuMDElMjA1MzAuNDUlMjA5MC4yNyUyMDMwMS40NiUyMiUz''@;'; put 'put ''RSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzdDQjBDNyUyMiUyMHBvaW50cyUzRCUyMjE2MC42NSUyMDE2OS43NCUyMDU5LjYyJTIwMjcwLjc3JTIwOTAuMjclMjAz''@;'; put 'put ''MDEuNDYlMjAzMTkuMDElMjA1MzAuNDUlMjA0MjAuMDUlMjA0MjkuMzklMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM4NEM0RDIlMjIlMjBwb2ludHMlM0Ql''@;'; put 'put ''MjI1OS42MiUyMDI3MC43NyUyMDAuNzklMjAzMjkuNiUyMDAuNzklMjAzMzQuNDklMjAyNTcuNzElMjA1OTEuNzUlMjAzMTkuMDElMjA1MzAuNDUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9s''@;'; put 'put ''eWdvbiUyMGZpbGwlM0QlMjIlMjM3Q0IwQzclMjIlMjBwb2ludHMlM0QlMjI1MzcuNTUlMjAzLjEyJTIwMzkzLjQyJTIwMy4xMiUyMDYxOS41OSUyMDIyOS44MiUyMDY5MS43NCUyMDE1Ny42NiUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzg3RDFEQiUyMiUyMHBvaW50cyUzRCUyMjg0Ni4yNSUyMDMuMTIlMjA1MzcuNTUlMjAzLjEyJTIwNjkxLjc0JTIwMTU3LjY2JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQ0RFM0VFJTIyJTIwcG9pbnRzJTNEJTIyOTA5Ljg3JTIwMTQ0My42MyUyMDg1MC4xOSUyMDEzODMuODclMjA3OTAuNDMlMjAxNDQzLjYzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQTBERUVBJTIyJTIwcG9pbnRzJTNEJTIyMzE5LjAxJTIwNTMwLjQ1JTIwMjU3LjcxJTIwNTkxLjc1JTIwNDQzLjQ0JTIwNzc3Ljc0JTIwNTQ2Ljk0JTIwODgxLjI4JTIw''@;'; put 'put ''NjA4LjIzJTIwODE5Ljk5JTIwODY3LjY0JTIwMTA3OS43JTIwODY3LjY0JTIwMTA3OS43JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQTBERUVBJTIyJTIw''@;'; put 'put ''cG9pbnRzJTNEJTIyODY3LjY0JTIwMTA3OS43JTIwODA2LjQ2JTIwMTE0MC44OSUyMDkwMy4zMSUyMDEyMzcuNzglMjA5NjQuNDYlMjAxMTc2LjYzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3Bv''@;'; put 'put ''bHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIwcG9pbnRzJTNEJTIyMTA2NS41NyUyMDEwNzUuNTIlMjA5NjguNzQlMjA5NzguNiUyMDg2Ny42NCUyMDEwNzkuNyUyMDk2NC40NiUyMDExNzYuNjMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5NkM3REYlMjIlMjBwb2ludHMlM0QlMjI5NjQuNDYlMjAxMTc2LjYzJTIwODY3LjY0JTIwMTA3OS43JTIwODY3LjY0JTIwMTA3OS43JTIwOTY0LjQ2JTIwMTE3Ni42MyUyMiUzRSUzQyUyRnBvbHln''@;'; put 'put ''b24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzk2QzdERiUyMiUyMHBvaW50cyUzRCUyMjEwMTAuOTIlMjAxMjIzLjEzJTIwMTIzMS4xNiUyMDE0NDMuNjMlMjAxMDEwLjkyJTIwMTIyMy4x''@;'; put 'put ''MyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzk2QzdERiUyMiUyMHBvaW50cyUzRCUyMjEyNDAuMDglMjA3MDcuMjIlMjAxMTY3LjklMjA3NzkuNCUyMDEy''@;'; put 'put ''NjQuNjglMjA4NzYuNCUyMDEzMzYuODclMjA4MDQuMjIlMjAxMjQwLjA4JTIwNzA3LjIxJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIyJTIw''@;'; put 'put ''cG9pbnRzJTNEJTIyOTgwLjgzJTIwNDQ3LjM5JTIwNjkxLjc0JTIwMTU3LjY2JTIwNjE5LjU5JTIwMjI5LjgyJTIwOTA4LjY2JTIwNTE5LjU2JTIwOTgwLjgzJTIwNDQ3LjM5JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQUZENEU3JTIyJTIwcG9pbnRzJTNEJTIyNzA5LjMlMjA3MTguOTElMjA5NjguNzQlMjA5NzguNiUyMDExNjcuOTElMjA3NzkuNCUyMDkwOC42NiUyMDUxOS41NSUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzY5QUZENCUyMiUyMHBvaW50cyUzRCUyMjk4MC44MyUyMDQ0Ny4zOSUyMDkwOC42NiUyMDUxOS41NSUyMDExNjcuOTElMjA3NzkuNCUyMDEyNDAuMDglMjA3MDcuMjElMjIlM0Ul''@;'; put 'put ''M0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBMERFRUElMjIlMjBwb2ludHMlM0QlMjIxMDM0LjU5JTIwMy4xMiUyMDg0Ni4yNSUyMDMuMTIlMjA2OTEuNzQlMjAxNTcu''@;'; put 'put ''NjYlMjA5ODAuODMlMjA0NDcuMzklMjAxMjI5Ljc1JTIwMTk4LjQ3JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQTBERUVBJTIyJTIwcG9pbnRzJTNEJTIy''@;'; put 'put ''MTI0MC4wOCUyMDcwNy4yMSUyMDEzMzYuODclMjA4MDQuMjIlMjAxNTg2LjAxJTIwNTU1LjA4JTIwMTQ4OS4xNCUyMDQ1OC4xMiUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmls''@;'; put 'put ''bCUzRCUyMiUyMzcwQzBEQyUyMiUyMHBvaW50cyUzRCUyMjEyMjkuNzUlMjAxOTguNDclMjA5ODAuODMlMjA0NDcuMzklMjAxMjQwLjA4JTIwNzA3LjIxJTIwMTQ4OS4xNCUyMDQ1OC4xMiUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0I3Q0VEMiUyMiUyMHBvaW50cyUzRCUyMjEyOTIuMjIlMjAxMzAyLjM4JTIwMTQzMy4zMiUyMDE0NDMuNjMlMjAxODMwLjYxJTIwMTQ0My42MyUyMDE0OTEuMTglMjAxMTAzLjQyJTIyJTNFJTNDJTJGcG9seWdvbiUz''@;'; put 'put ''RSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQTBERUVBJTIyJTIwcG9pbnRzJTNEJTIyMTAxMC45MiUyMDEyMjMuMTMlMjA5NDkuNzglMjAxMjg0LjI3JTIwMTEwOS4wOCUyMDE0NDMuNjMlMjAx''@;'; put 'put ''MTUwLjk4JTIwMTQ0My42MyUyMDExOTEuMDklMjAxNDAzLjUxJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNzVCOEM1JTIyJTIwcG9pbnRzJTNEJTIyMTE1''@;'; put 'put ''MC45OCUyMDE0NDMuNjMlMjAxMjMxLjE2JTIwMTQ0My42MyUyMDExOTEuMDklMjAxNDAzLjUxJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTZDN0RGJTIy''@;'; put 'put ''JTIwcG9pbnRzJTNEJTIyMTI5Mi4yMiUyMDEzMDIuMzglMjAxMTEyLjAzJTIwMTEyMi4wMiUyMDEwMTAuOTIlMjAxMjIzLjEzJTIwMTE5MS4wOSUyMDE0MDMuNTElMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM2RUE0QkMlMjIlMjBwb2ludHMlM0QlMjIxMTkxLjA5JTIwMTQwMy41MSUyMDEyMzEuMTYlMjAxNDQzLjYzJTIwMTQzMy4zMiUyMDE0NDMuNjMlMjAxMjkyLjIyJTIwMTMwMi4zOCUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzAwN0NCQiUyMiUyMG9wYWNpdHklM0QlMjIwLjQlMjIlMjBzdHlsZSUzRCUyMm1peC1ibGVuZC1tb2RlJTNBJTIwbXVsdGlwbHklM0IlMjIlMjBwb2ludHMlM0QlMjIxMzgz''@;'; put 'put ''LjMlMjA4NTAuNzUlMjAxMzExLjEyJTIwOTIyLjk0JTIwMTQ5MS4xOCUyMDExMDMuNDIlMjAxNTYzLjM3JTIwMTAzMS4yMyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUz''@;'; put 'put ''RCUyMiUyM0I3Q0VEMiUyMiUyMHBvaW50cyUzRCUyMjE0OTEuMTglMjAxMTAzLjQyJTIwMTgzMC42MSUyMDE0NDMuNjMlMjAxOTc0Ljg2JTIwMTQ0My42MyUyMDE1NjMuMzclMjAxMDMxLjIzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNkVBNEJDJTIyJTIwcG9pbnRzJTNEJTIyMTQ5MS4xOCUyMDExMDMuNDIlMjAxODMwLjYxJTIwMTQ0My42MyUyMDE5NzQuODYlMjAxNDQzLjYzJTIwMTU2My4zNyUyMDEwMzEuMjMlMjIlM0UlM0MlMkZwb2x5Z29u''@;'; put 'put ''JTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBMERFRUElMjIlMjBwb2ludHMlM0QlMjIxODEyLjY1JTIwNzgxLjk1JTIwMTYzMi40NiUyMDYwMS41OSUyMDEzODMuMyUyMDg1MC43NSUyMDE1''@;'; put 'put ''NjMuMzclMjAxMDMxLjIzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQjdDRUQyJTIyJTIwcG9pbnRzJTNEJTIyMTU2My4zNyUyMDEwMzEuMjMlMjAxOTc0''@;'; put 'put ''Ljg2JTIwMTQ0My42MyUyMDIwNTQuNDUlMjAxNDQzLjYzJTIwMjA1NC40NSUyMDEwMjMuOTklMjAxODEyLjY1JTIwNzgxLjk1JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxs''@;'; put 'put ''JTNEJTIyJTIzNzhDQUQ0JTIyJTIwcG9pbnRzJTNEJTIyMTU2My4zNyUyMDEwMzEuMjMlMjAxOTc0Ljg2JTIwMTQ0My42MyUyMDIwNTQuNDUlMjAxNDQzLjYzJTIwMjA1NC40NSUyMDEwMjMuOTklMjAxODEyLjY1JTIwNzgxLjk1JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzOTFDNUUwJTIyJTIwcG9pbnRzJTNEJTIyODAzLjc0JTIwMTMzNy4zNiUyMDg1MC4xOSUyMDEzODMuODclMjA5NDkuNzglMjAxMjg0LjI3JTIwOTAzLjMxJTIwMTIzNy43OCUy''@;'; put 'put ''MiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzkxQzVFMCUyMiUyMHBvaW50cyUzRCUyMjEwNjUuNTclMjAxMDc1LjUyJTIwMTExMi4wMyUyMDExMjIuMDIlMjAx''@;'; put 'put ''MzExLjEyJTIwOTIyLjk0JTIwMTI2NC42OSUyMDg3Ni40JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNzdCOEQ5JTIyJTIwcG9pbnRzJTNEJTIyNjk3LjQ3''@;'; put 'put ''JTIwMTQ0My42MyUyMDc5MC40MyUyMDE0NDMuNjMlMjA4NTAuMTklMjAxMzgzLjg3JTIwODAzLjc0JTIwMTMzNy4zNiUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUy''@;'; put 'put ''MiUyM0EwREVFQSUyMiUyMHBvaW50cyUzRCUyMjk2NC40NiUyMDExNzYuNjMlMjA5MDMuMzElMjAxMjM3Ljc4JTIwOTQ5Ljc4JTIwMTI4NC4yNyUyMDEwMTAuOTIlMjAxMjIzLjEzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNURCNUQ2JTIyJTIwcG9pbnRzJTNEJTIyOTY0LjQ2JTIwMTE3Ni42MyUyMDkwMy4zMSUyMDEyMzcuNzglMjA5NDkuNzglMjAxMjg0LjI3JTIwMTAxMC45MiUyMDEyMjMuMTMlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBB''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjM5NkM3REYlMjIlMjB0cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUlMjgxMDM4LjI0NzI5NyUyQyUyMDExNDkuMjc1NDI5JTI5JTIwcm90YXRlJTI4LTQ0Ljk3MDAwMCUy''@;'; put 'put ''OSUyMHRyYW5zbGF0ZSUyOC0xMDM4LjI0NzI5NyUyQyUyMC0xMTQ5LjI3NTQyOSUyOSUyMCUyMiUyMHglM0QlMjI5NjYuNzUyMjk3JTIyJTIweSUzRCUyMjExMTYuNDEwNDMlMjIlMjB3aWR0aCUzRCUyMjE0Mi45OSUyMiUyMGhlaWdodCUzRCUyMjY1LjczJTIyJTNFJTNDJTJGcmVjdCUzRSUw''@;'; put 'put ''RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3JlY3QlMjBmaWxsJTNEJTIyJTIzNTdBOEQwJTIyJTIwdHJhbnNmb3JtJTNEJTIydHJhbnNsYXRlJTI4MTAzOC4yNDcyOTclMkMlMjAxMTQ5LjI3NTQyOSUyOSUyMHJvdGF0ZSUyOC00NC45NzAw''@;'; put 'put ''MDAlMjklMjB0cmFuc2xhdGUlMjgtMTAzOC4yNDcyOTclMkMlMjAtMTE0OS4yNzU0MjklMjklMjAlMjIlMjB4JTNEJTIyOTY2Ljc1MjI5NyUyMiUyMHklM0QlMjIxMTE2LjQxMDQzJTIyJTIwd2lkdGglM0QlMjIxNDIuOTklMjIlMjBoZWlnaHQlM0QlMjI2NS43MyUyMiUzRSUzQyUyRnJlY3Ql''@;'; put 'put ''M0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzk2QzdERiUyMiUyMHBvaW50cyUzRCUyMjEwMTAuOTIlMjAxMjIzLjEzJTIwMTAxMC45MiUyMDEyMjMuMTMlMjA5NjQuNDYlMjAxMTc2LjYzJTIw''@;'; put 'put ''OTY0LjQ2JTIwMTE3Ni42MyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzAwMDAwMCUyMiUyMG9wYWNpdHklM0QlMjIwLjQyJTIyJTIwcG9pbnRzJTNEJTIy''@;'; put 'put ''MTAxMC45MiUyMDEyMjMuMTMlMjAxMDEwLjkyJTIwMTIyMy4xMyUyMDk2NC40NiUyMDExNzYuNjMlMjA5NjQuNDYlMjAxMTc2LjYzJTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBm''@;'; put 'put ''aWxsJTNEJTIyJTIzMDA3Q0JCJTIyJTIwb3BhY2l0eSUzRCUyMjAuNCUyMiUyMHN0eWxlJTNEJTIybWl4LWJsZW5kLW1vZGUlM0ElMjBtdWx0aXBseSUzQiUyMiUyMHBvaW50cyUzRCUyMjEzMzYuODclMjA4MDQuMjIlMjAxMjY0LjY5JTIwODc2LjQlMjAxMzExLjEyJTIwOTIyLjk0JTIwMTM4''@;'; put 'put ''My4zJTIwODUwLjc1JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzNTdBOEQwJTIyJTIwcG9pbnRzJTNEJTIyMTMzNi44NyUyMDgwNC4yMiUyMDEyNjQuNjkl''@;'; put 'put ''MjA4NzYuNCUyMDEzMTEuMTIlMjA5MjIuOTQlMjAxMzgzLjMlMjA4NTAuNzUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM5M0Q4Q0ElMjIlMjBvcGFjaXR5''@;'; put 'put ''JTNEJTIyMC42JTIyJTIwc3R5bGUlM0QlMjJtaXgtYmxlbmQtbW9kZSUzQSUyMG92ZXJsYXklM0IlMjIlMjBwb2ludHMlM0QlMjIxMzM2Ljg3JTIwODA0LjIyJTIwMTM4My4zJTIwODUwLjc1JTIwMTYzMi40NiUyMDYwMS41OSUyMDE1ODYuMDElMjA1NTUuMDglMjIlM0UlM0MlMkZwb2x5Z29u''@;'; put 'put ''JTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM1REI1RDYlMjIlMjBwb2ludHMlM0QlMjIxMzM2Ljg3JTIwODA0LjIyJTIwMTM4My4zJTIwODUwLjc1JTIwMTYzMi40NiUyMDYwMS41OSUyMDE1''@;'; put 'put ''ODYuMDElMjA1NTUuMDglMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjNBRkQzRTYlMjIlMjBwb2ludHMlM0QlMjIyMDU2JTIwMC4xMiUyMDE2NDUuNDklMjAw''@;'; put 'put ''LjEyJTIwMTY0OC40OSUyMDMuMTIlMjAxOTQ0LjA3JTIwMy4xMiUyMDE3OTYuMjIlMjAxNTAuOTklMjAxODkzLjEyJTIwMjQ3Ljk3JTIwMjA1NC40NSUyMDg2LjY0JTIwMjA1NC40NSUyMDE3OS42JTIwMTkzOS41OCUyMDI5NC40NyUyMDIwNTYlMjA0MTElMjIlM0UlM0MlMkZwb2x5Z29uJTNF''@;'; put 'put ''JTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcG9seWdvbiUyMGZpbGwlM0QlMjIlMjM3QUI5RDklMjIlMjBwb2ludHMlM0QlMjIxNjQ4LjQ5JTIwMy4xMiUyMDE3OTYuMjIlMjAxNTAuOTklMjAxOTQ0LjA3JTIwMy4xMiUyMiUzRSUzQyUy''@;'; put 'put ''RnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzY2QUVENCUyMiUyMHBvaW50cyUzRCUyMjIwNTQuNDUlMjA4Ni42NCUyMDE4OTMuMTIlMjAyNDcuOTclMjAxOTM5LjU4JTIwMjk0''@;'; put 'put ''LjQ3JTIwMjA1NC40NSUyMDE3OS42JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQjdDRUQyJTIyJTIwcG9pbnRzJTNEJTIyMTg4NC44MiUyMDcwOS43OCUy''@;'; put 'put ''MDIwNTQuNDUlMjA4NzkuNTclMjAyMDU0LjQ1JTIwNTQwLjE1JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQUZENEU3JTIyJTIwcG9pbnRzJTNEJTIyMTQ4''@;'; put 'put ''OS4xNCUyMDQ1OC4xMiUyMDE0ODkuMTQlMjA0NTguMTIlMjAxMzcxLjEzJTIwMzM5Ljk5JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BvbHlnb24lMjBmaWxsJTNEJTIyJTIzQUZENEU3JTIyJTIw''@;'; put 'put ''cG9pbnRzJTNEJTIyMTc5Ni4yMiUyMDE1MC45OSUyMDE2NDguNDklMjAzLjEyJTIwMTQyNS4xJTIwMy4xMiUyMDEzMDEuOTElMjAxMjYuMzElMjAxNTYxLjMlMjAzODUuOTUlMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjM5MUM1RTAlMjIlMjB0cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUlMjgxNzk4Ljk1NDA2NiUyQyUyMDM4OC43OTg3ODElMjklMjByb3RhdGUlMjgtNDQuOTcwMDAwJTI5JTIwdHJhbnNsYXRlJTI4LTE3OTguOTU0MDY2JTJDJTIwLTM4OC43''@;'; put 'put ''OTg3ODElMjklMjAlMjIlMjB4JTNEJTIyMTYzMi44MjQwNyUyMiUyMHklM0QlMjIzNTUuOTMzNzgxJTIyJTIwd2lkdGglM0QlMjIzMzIuMjYlMjIlMjBoZWlnaHQlM0QlMjI2NS43MyUyMiUzRSUzQyUyRnJlY3QlM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzkxQzVFMCUyMiUyMHBvaW50cyUzRCUyMjE1ODYuMDElMjA1NTUuMDglMjAxNjMyLjQ2JTIwNjAxLjU5JTIwMTYzMi40NiUyMDYwMS41OSUyMDE1ODYuMDElMjA1NTUuMDglMjIlM0UlM0MlMkZwb2x5Z29uJTNFJTBEJTBBJTIw''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjNCM0VBRUUlMjIlMjB0cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUlMjgxNTczLjcxMTU3NyUyQyUyMDQ3MC42MjAyNjMlMjklMjByb3RhdGUlMjgtNDUuMDAwMDAwJTI5JTIw''@;'; put 'put ''dHJhbnNsYXRlJTI4LTE1NzMuNzExNTc3JTJDJTIwLTQ3MC42MjAyNjMlMjklMjAlMjIlMjB4JTNEJTIyMTUyMi42ODE1OCUyMiUyMHklM0QlMjI0MDIuMDg1MjYzJTIyJTIwd2lkdGglM0QlMjIxMDIuMDYlMjIlMjBoZWlnaHQlM0QlMjIxMzcuMDclMjIlM0UlM0MlMkZyZWN0JTNFJTBEJTBB''@;'; put 'put ''JTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjNCM0VBRUUlMjIlMjB0cmFuc2Zvcm0lM0QlMjJ0cmFuc2xhdGUlMjgxNzU4LjY3Njc1OCUyQyUyMDY1NS43NjcxMjAlMjklMjByb3RhdGUlMjgtNDQuOTcwMDAwJTI5''@;'; put 'put ''JTIwdHJhbnNsYXRlJTI4LTE3NTguNjc2NzU4JTJDJTIwLTY1NS43NjcxMjAlMjklMjAlMjIlMjB4JTNEJTIyMTcwNy42NDY3NiUyMiUyMHklM0QlMjI1MjguMjkyMTIlMjIlMjB3aWR0aCUzRCUyMjEwMi4wNiUyMiUyMGhlaWdodCUzRCUyMjI1NC45NSUyMiUzRSUzQyUyRnJlY3QlM0UlMEQl''@;'; put 'put ''MEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyM0IzRUFFRSUyMiUyMHBvaW50cyUzRCUyMjEzMDEuOTElMjAxMjYuMzElMjAxMTc4Ljg0JTIwMy4xMiUyMDEwMzQuNTklMjAzLjEyJTIwMTIyOS43NSUyMDE5''@;'; put 'put ''OC40NyUyMiUzRSUzQyUyRnBvbHlnb24lM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0Nwb2x5Z29uJTIwZmlsbCUzRCUyMiUyMzgzQzBDOCUyMiUyMHBvaW50cyUzRCUyMjE4MTIuNjUlMjA3ODEuOTUlMjAyMDU0LjQ1JTIwMTAyMy45''@;'; put 'put ''OSUyMDIwNTQuNDUlMjA4NzkuNTclMjAxODg0LjgyJTIwNzA5Ljc4JTIyJTNFJTNDJTJGcG9seWdvbiUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3JlY3QlMjBmaWxsJTNEJTIyJTIzN0RDNkRDJTIyJTIwdHJhbnNmb3JtJTNEJTIy''@;'; put 'put ''dHJhbnNsYXRlJTI4MTM5NS41MTY5MDElMkMlMjAyOTIuMjA2NTE5JTI5JTIwcm90YXRlJTI4LTQ1LjAwMDAwMCUyOSUyMHRyYW5zbGF0ZSUyOC0xMzk1LjUxNjkwMSUyQyUyMC0yOTIuMjA2NTE5JTI5JTIwJTIyJTIweCUzRCUyMjEzNDQuNDkxOSUyMiUyMHklM0QlMjIxMDguNzAxNTE5JTIy''@;'; put 'put ''JTIwd2lkdGglM0QlMjIxMDIuMDUlMjIlMjBoZWlnaHQlM0QlMjIzNjcuMDElMjIlM0UlM0MlMkZyZWN0JTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcmVjdCUyMGZpbGwlM0QlMjIlMjM2OEI4RDUlMjIlMjB0cmFuc2Zvcm0lM0Ql''@;'; put 'put ''MjJ0cmFuc2xhdGUlMjgxNjQ1LjMxMzYxOSUyQyUyMDU0Mi4yNDk3NjAlMjklMjByb3RhdGUlMjgtNDUuMDAwMDAwJTI5JTIwdHJhbnNsYXRlJTI4LTE2NDUuMzEzNjE5JTJDJTIwLTU0Mi4yNDk3NjAlMjklMjAlMjIlMjB4JTNEJTIyMTU5NC4yODM2MiUyMiUyMHklM0QlMjI1MDkuMzg0NzYl''@;'; put 'put ''MjIlMjB3aWR0aCUzRCUyMjEwMi4wNiUyMiUyMGhlaWdodCUzRCUyMjY1LjczJTIyJTNFJTNDJTJGcmVjdCUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRmclM0UlMEQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NnJTIw''@;'; put 'put ''dHJhbnNmb3JtJTNEJTIydHJhbnNsYXRlJTI4MC4wMDAwMDAlMkMlMjAzLjAwMDAwMCUyOSUyMiUyMHN0cm9rZSUzRCUyMiUyMzAwMDAwMCUyMiUyMG9wYWNpdHklM0QlMjIwLjE1JTIyJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTND''@;'; put 'put ''cGF0aCUyMGQlM0QlMjJNMC45NSUyQzAuMTIlMjBMMC45NSUyQzg0MC4xMiUyMiUyMGlkJTNEJTIyU2hhcGUlMjIlM0UlM0MlMkZwYXRoJTNFJTBEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwRCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUz''@;'; put 'put ''QyUyRmclM0UlMEQlMEElMjAlMjAlMjAlMjAlM0MlMkZnJTNFJTBEJTBBJTNDJTJGc3ZnJTNFKTtiYWNrZ3JvdW5kLXNpemU6MTAwJTtiYWNrZ3JvdW5kLXBvc2l0aW9uOmNhbGMoNTgwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKSAwO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVh''@;'; put 'put ''dH0ubG9naW4td3JhcHBlciAubG9naW57YmFja2dyb3VuZDp2YXIoLS1jbHItbG9naW4tYmFja2dyb3VuZC1jb2xvcik7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtw''@;'; put 'put ''YWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7aGVpZ2h0OmF1dG87bWluLWhlaWdodDoxMDB2aDt3aWR0aDpjYWxjKDU4MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1mb290ZXIsLmxvZ2luLXdyYXBwZXIgLmxvZ2lu''@;'; put 'put ''IC5sb2dpbi1oZWFkZXJ7ZGlzcGxheTpmbGV4O3dpZHRoOjEwMCU7ZmxleC1kaXJlY3Rpb246cm93O2FsaWduLWl0ZW1zOmNlbnRlcn0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWZvb3RlciAuYWN0aW9ucywubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWhlYWRlciAuYWN0aW9u''@;'; put 'put ''c3ttYXJnaW4tbGVmdDphdXRvfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4taGVhZGVyIC5sb2dve2hlaWdodDoxNnB4O3dpZHRoOjEwMCU7bWFzazp1cmwoZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCxcICUzQ3N2ZyUyMHdpZHRoJTNEJTIyMTA1JTIyJTIwaGVpZ2h0JTNE''@;'; put 'put ''JTIyMTYlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxMDUlMjAxNiUyMiUyMGZpbGwlM0QlMjJub25lJTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlMEElM0NwYXRoJTIwZCUzRCUyMk00NC45MzcxJTIwMTQuOEw0MC4zNTk4JTIw''@;'; put 'put ''Mi4wMDA4MkM0MC4yOTMyJTIwMS44MDA5NCUyMDQwLjIyNjYlMjAxLjYwMTA2JTIwNDAuMjI2NiUyMDEuNDAxMTdDNDAuMjI2NiUyMDAuODY4MTUzJTIwNDAuNjkzJTIwMC4zNDE3OTclMjA0MS4zNTI2JTIwMC4zNDE3OTdDNDEuOTUyMiUyMDAuMzQxNzk3JTIwNDIuMzQ1MyUyMDAuNzQxNTYz''@;'; put 'put ''JTIwNDIuNDc4NiUyMDEuMjY3OTJMNDYuMjU2NCUyMDEyLjI3NDhMNTAuMTAwOCUyMDEuMjY3OTJDNTAuMzAwNyUyMDAuNzM0OSUyMDUwLjYzMzglMjAwLjM0MTc5NyUyMDUxLjIyNjglMjAwLjM0MTc5N0g1MS4zNkM1MS45NTk3JTIwMC4zNDE3OTclMjA1Mi4zNTI4JTIwMC43NDE1NjMlMjA1''@;'; put 'put ''Mi41NTI3JTIwMS4yNjc5Mkw1Ni4zMzA1JTIwMTIuMjc0OEw2MC4xNzQ5JTIwMS4yMDEyOUM2MC4zMDgyJTIwMC43MzQ5MDElMjA2MC42NDEzJTIwMC4zNDE3OTclMjA2MS4yMzQzJTIwMC4zNDE3OTdDNjEuOTAwNiUyMDAuMzQxNzk3JTIwNjIuMzYwMyUyMDAuODA4MTg4JTIwNjIuMzYwMyUy''@;'; put 'put ''MDEuNDAxMTdDNjIuMzYwMyUyMDEuNjAxMDYlMjA2Mi4yOTM2JTIwMS44Njc1NyUyMDYyLjIyNyUyMDIuMDAwODJMNTcuNTgzMSUyMDE0LjhDNTcuMzE2NiUyMDE1LjQ2NjMlMjA1Ni44NTAyJTIwMTUuNzkyOCUyMDU2LjMyMzglMjAxNS43OTI4SDU2LjI1NzJDNTUuNjU3NSUyMDE1Ljc5Mjgl''@;'; put 'put ''MjA1NS4yNjQ0JTIwMTUuNDU5NiUyMDU0Ljk5NzklMjAxNC44TDUxLjI4NjglMjAzLjkyNjM2TDQ3LjUwOSUyMDE0LjhDNDcuMzA5MSUyMDE1LjQ2NjMlMjA0Ni44NDk0JTIwMTUuNzkyOCUyMDQ2LjMxNjMlMjAxNS43OTI4SDQ2LjI0OTdDNDUuNjUwMSUyMDE1Ljc5MjglMjA0NS4xOTAzJTIw''@;'; put 'put ''MTUuNDU5NiUyMDQ0LjkyMzglMjAxNC44SDQ0LjkzNzFaJTIyJTIwZmlsbCUzRCUyMiUyMzcxNzE3NSUyMiUyRiUzRSUwQSUzQ3BhdGglMjBkJTNEJTIyTTc4LjM1MjUlMjAxLjQ2NzhDNzguMzUyNSUyMDAuODY4MTUyJTIwNzguODE4OSUyMDAuMzQxNzk3JTIwNzkuNDc4NSUyMDAuMzQxNzk3''@;'; put 'put ''QzgwLjEzODIlMjAwLjM0MTc5NyUyMDgwLjYwNDUlMjAwLjgwODE4NyUyMDgwLjYwNDUlMjAxLjQ2NzhWNC4wNTI5NkM4MS43MzA2JTIwMS41MzQ0MyUyMDg0LjE4MjUlMjAwLjM0MTc5NyUyMDg1Ljg0MTUlMjAwLjM0MTc5N0M4Ni41MDExJTIwMC4zNDE3OTclMjA4Ni45Njc1JTIwMC44MDgx''@;'; put 'put ''ODclMjA4Ni45Njc1JTIwMS40Njc4Qzg2Ljk2NzUlMjAyLjA2NzQ1JTIwODYuNTY3NyUyMDIuNTI3MTglMjA4NS45NzQ3JTIwMi41OTM4MUM4My4wNTY0JTIwMi45MjY5NSUyMDgwLjY3MTIlMjA1LjExMjM0JTIwODAuNjcxMiUyMDkuNDg5NzhWMTQuNTkzNUM4MC42NzEyJTIwMTUuMTkzMSUy''@;'; put 'put ''MDgwLjIwNDglMjAxNS43MTk1JTIwNzkuNTQ1MiUyMDE1LjcxOTVDNzguODg1NiUyMDE1LjcxOTUlMjA3OC40MTkyJTIwMTUuMTg2NCUyMDc4LjQxOTIlMjAxNC41OTM1VjEuNDYxMTQlMjIlMjBmaWxsJTNEJTIyJTIzNzE3MTc1JTIyJTJGJTNFJTBBJTNDcGF0aCUyMGQlM0QlMjJNOTQuMTI5''@;'; put 'put ''NCUyMDE1LjkyNzJDOTAuMDg1MSUyMDE1LjkyNzIlMjA4Ni43MDclMjAxMi43NDI0JTIwODYuNzA3JTIwOC4xNzE3VjguMTA1MDhDODYuNzA3JTIwMy43OTQyNyUyMDg5LjY5MTklMjAwLjM0OTYwOSUyMDkzLjgwMjklMjAwLjM0OTYwOUM5OC4xODAzJTIwMC4zNDk2MDklMjAxMDAuNjk5JTIw''@;'; put 'put ''My45OTQxNSUyMDEwMC42OTklMjA3LjkxMTg2QzEwMC42OTklMjA4LjUxMTUxJTIwMTAwLjIzMiUyMDguOTcxMjMlMjA5OS42Mzk1JTIwOC45NzEyM0g4OC44OTkxQzg5LjIzMjIlMjAxMi4yMjI3JTIwOTEuNDg0MiUyMDE0LjAwODMlMjA5NC4xMzYlMjAxNC4wMDgzQzk1Ljk5NDklMjAxNC4w''@;'; put 'put ''MDgzJTIwOTcuMzIwOCUyMDEzLjI4MiUyMDk4LjM4MDIlMjAxMi4yODI2Qzk4LjU4MDElMjAxMi4xNDk0JTIwOTguNzglMjAxMi4wMTYxJTIwOTkuMDM5OCUyMDEyLjAxNjFDOTkuNTcyOCUyMDEyLjAxNjElMjAxMDAuMDMzJTIwMTIuNDgyNSUyMDEwMC4wMzMlMjAxMi45NDIyQzEwMC4wMzMl''@;'; put 'put ''MjAxMy4yMDg4JTIwOTkuODk5MyUyMDEzLjQ3NTMlMjA5OS42OTk0JTIwMTMuNjY4NUM5OC4zMDY5JTIwMTQuOTk0NCUyMDk2LjY0NzklMjAxNS45MjA1JTIwOTQuMTI5NCUyMDE1LjkyMDVWMTUuOTI3MlpNOTguNTA2OCUyMDcuMjM4OTFDOTguMzA2OSUyMDQuNTIwNTElMjA5Ni43MTQ1JTIw''@;'; put 'put ''Mi4xMzUyMyUyMDkzLjgwMjklMjAyLjEzNTIzQzkxLjIxNzclMjAyLjEzNTIzJTIwODkuMjkyMiUyMDQuMzIwNjIlMjA4OC45NjU3JTIwNy4yMzg5MUg5OC41MTM1SDk4LjUwNjhaJTIyJTIwZmlsbCUzRCUyMiUyMzcxNzE3NSUyMiUyRiUzRSUwQSUzQ3BhdGglMjBkJTNEJTIyTTYyLjM3NSUy''@;'; put 'put ''MDExLjIxNThDNjIuMzc1JTIwNy45NjQ0JTIwNjUuMDI2OCUyMDYuMzA1MzclMjA2OC44MDQ2JTIwNi4zMDUzN0M3MC43MzAxJTIwNi4zMDUzNyUyMDcyLjEyMjYlMjA2LjU3MTg4JTIwNzMuNDQxOSUyMDYuOTcxNjVWNi40Mzg2M0M3My40NDE5JTIwMy43MjAyMiUyMDcxLjc4MjglMjAyLjMy''@;'; put 'put ''NzclMjA2OC45MzEyJTIwMi4zMjc3QzY3LjQwNTQlMjAyLjMyNzclMjA2Ni41NDU5JTIwMi41Mjc1OCUyMDY1LjQxOTklMjAyLjk5Mzk3QzY1LjI4NjYlMjAzLjA2MDYlMjA2NS4xNTM0JTIwMy4wNjA2JTIwNjUuMDIwMSUyMDMuMDYwNkM2NC40ODcxJTIwMy4wNjA2JTIwNjQuMDI3NCUyMDIu''@;'; put 'put ''NTk0MjElMjA2NC4wMjc0JTIwMi4wNjc4NUM2NC4wMjc0JTIwMS42MDE0NiUyMDY0LjIyNzMlMjAxLjM0MTYxJTIwNjQuNjI3JTIwMS4xNDE3MkM2Ni4wODYyJTIwMC40NzU0NDclMjA2Ny4yMTIyJTIwMC4yODIyMjclMjA2OS4xMzc3JTIwMC4yODIyMjdDNzEuMjU2NSUyMDAuMjgyMjI3JTIw''@;'; put 'put ''NzIuOTE1NSUyMDAuODE1MjUyJTIwNzMuOTc0OSUyMDEuOTQxMjZDNzQuOTY3NiUyMDIuOTM0MDElMjA3NS41MDA3JTIwNC4zOTMxNiUyMDc1LjUwMDclMjA2LjMxODdWMTQuNjA3MkM3NS41MDA3JTIwMTUuMjczNSUyMDc1LjAzNDMlMjAxNS43MzMyJTIwNzQuNDQxMyUyMDE1LjczMzJDNzMu''@;'; put 'put ''Nzc1JTIwMTUuNzMzMiUyMDczLjM4MTklMjAxNS4yNjY4JTIwNzMuMzgxOSUyMDE0LjY3MzhWMTMuMjE0N0M3Mi4zMjI1JTIwMTQuNjA3MiUyMDcwLjU5NjklMjAxNS43OTk4JTIwNjcuOTQ1MSUyMDE1Ljc5OThDNjUuMjI2NyUyMDE1LjkzMzElMjA2Mi4zNzUlMjAxNC4zNDA3JTIwNjIuMzc1''@;'; put 'put ''JTIwMTEuMjIyNVYxMS4yMTU4Wk03My41MTUyJTIwMTAuMDg5OFY4LjYzMDY4QzcyLjM4OTElMjA4LjI5NzU0JTIwNzAuOTMlMjA3Ljk2NDQlMjA2OS4wNzExJTIwNy45NjQ0QzY2LjIxOTQlMjA3Ljk2NDQlMjA2NC42OTM3JTIwOS4yMjM2NiUyMDY0LjY5MzclMjAxMS4wODI2VjExLjE0OTJD''@;'; put 'put ''NjQuNjkzNyUyMDEzLjA3NDclMjA2Ni40MTkzJTIwMTQuMTM0MSUyMDY4LjQ3MTQlMjAxNC4xMzQxQzcxLjI1NjUlMjAxNC4xMzQxJTIwNzMuNTA4NSUyMDEyLjQ3NTElMjA3My41MDg1JTIwMTAuMDg5OEg3My41MTUyWiUyMiUyMGZpbGwlM0QlMjIlMjM3MTcxNzUlMjIlMkYlM0UlMEElM0Nw''@;'; put 'put ''YXRoJTIwZCUzRCUyMk00LjEwMjIyJTIwMS4yNjg2MkMzLjYzNTgzJTIwMC4yMDkyMzclMjAyLjM3NjU2JTIwLTAuMzIzNzg3JTIwMS4yNTA1NSUyMDAuMjA5MjM1QzAuMTI0NTQ1JTIwMC43NDIyNTYlMjAtMC4yNzUyMTglMjAyLjAwMTUyJTIwMC4xOTExNzYlMjAzLjA2MDlMNC45NjE3MiUy''@;'; put 'put ''MDEzLjQ3NDhDNS42ODc5NiUyMDE1LjEzMzglMjA2LjQ4NzQ5JTIwMTUuOTI2NyUyMDguMDEzMjclMjAxNS45MjY3QzkuNTM5MDQlMjAxNS45MjY3JTIwMTAuMjY1MyUyMDE1LjAwMDYlMjAxMS4wNjQ4JTIwMTMuNDc0OEMxMS4wNjQ4JTIwMTMuNDc0OCUyMDE1LjI0MjQlMjA0LjM4Njc5JTIw''@;'; put 'put ''MTUuMzA5JTIwNC4zMjY4M0MxNS4zNzU2JTIwNC4yNjAyJTIwMTUuNTA4OSUyMDMuOTI3MDYlMjAxNS45MDg2JTIwMy45MjcwNkMxNi4yNDE4JTIwMy45MjcwNiUyMDE2LjU2ODMlMjA0LjE5MzU3JTIwMTYuNTY4MyUyMDQuNTkzMzRWMTMuNDgxNUMxNi41NjgzJTIwMTQuODc0JTIwMTcuMjk0''@;'; put 'put ''NSUyMDE2JTIwMTguODIwMyUyMDE2QzIwLjM0NjElMjAxNiUyMDIxLjA3MjMlMjAxNC44NzQlMjAyMS4wNzIzJTIwMTMuNDgxNVY2LjE4NTc0QzIxLjA3MjMlMjA0Ljc5MzIyJTIwMjIuMDY1JTIwMy44NjcxJTIwMjMuNDU3NiUyMDMuODY3MUMyNC44NTAxJTIwMy44NjcxJTIwMjUuNzA5NiUy''@;'; put 'put ''MDQuNzkzMjIlMjAyNS43MDk2JTIwNi4xODU3NFYxMy40ODE1QzI1LjcwOTYlMjAxNC44NzQlMjAyNi40NDI1JTIwMTYlMjAyNy45NjE2JTIwMTZDMjkuNDgwNyUyMDE2JTIwMzAuMjEzNiUyMDE0Ljg3NCUyMDMwLjIxMzYlMjAxMy40ODE1VjYuMTg1NzRDMzAuMjEzNiUyMDQuNzkzMjIlMjAz''@;'; put 'put ''MS4yMDY0JTIwMy44NjcxJTIwMzIuNTk4OSUyMDMuODY3MUMzMy45OTE0JTIwMy44NjcxJTIwMzQuODUwOSUyMDQuNzkzMjIlMjAzNC44NTA5JTIwNi4xODU3NFYxMy40ODE1QzM0Ljg1MDklMjAxNC44NzQlMjAzNS41NzcxJTIwMTYlMjAzNy4xMDI5JTIwMTZDMzguNjI4NyUyMDE2JTIwMzku''@;'; put 'put ''MzU0OSUyMDE0Ljg3NCUyMDM5LjM1NDklMjAxMy40ODE1VjUuMTkyOTlDMzkuMzU0OSUyMDIuMTQxNDQlMjAzNi45MDMlMjAwLjAyMjY3ODElMjAzMy45ODQ3JTIwMC4wMjI2NzgxQzMxLjA2NjQlMjAwLjAyMjY3ODElMjAyOS4yMTQyJTIwMi4wODE0OCUyMDI5LjIxNDIlMjAyLjA4MTQ4QzI4''@;'; put 'put ''LjA4ODIlMjAwLjgyMjIxMyUyMDI2Ljc2MjMlMjAwLjAyMjY3ODElMjAyNC41MTAzJTIwMC4wMjI2NzgxQzIyLjEyNSUyMDAuMDIyNjc4MSUyMDE5Ljk5OTYlMjAyLjA4MTQ4JTIwMTkuOTk5NiUyMDIuMDgxNDhDMTkuMDA2OCUyMDAuODIyMjEzJTIwMTcuMzQ3OCUyMDAuMDIyNjc4MSUyMDE1''@;'; put 'put ''Ljk1NTMlMjAwLjAyMjY3ODFDMTMuODM2NSUyMDAuMDIyNjc4MSUyMDEyLjExMDklMjAwLjk0ODgwNSUyMDExLjExODElMjAzLjM0MDc0TDguMDY2NTclMjAxMC41Njk4TDQuMDg4ODklMjAxLjI4ODYxTDQuMTAyMjIlMjAxLjI2ODYyWiUyMiUyMGZpbGwlM0QlMjIlMjM3MTcxNzUlMjIlMkYl''@;'; put 'put ''M0UlMEElM0NwYXRoJTIwZCUzRCUyMk0xMDAuODkyJTIwMi4yMDA3MUMxMDAuODkyJTIwMS4xNDEzMyUyMDEwMS42ODQlMjAwLjM0MTc5NyUyMDEwMi43NTElMjAwLjM0MTc5N0MxMDMuODE3JTIwMC4zNDE3OTclMjAxMDQuNjA5JTIwMS4yMDEyOSUyMDEwNC42MDklMjAyLjIwMDcxQzEwNC42''@;'; put 'put ''MDklMjAzLjIwMDEzJTIwMTAzLjgxNyUyMDQuMDU5NjIlMjAxMDIuNzUxJTIwNC4wNTk2MkMxMDEuNzU4JTIwNC4wNTk2MiUyMDEwMC44OTIlMjAzLjIwMDEzJTIwMTAwLjg5MiUyMDIuMjAwNzFaTTEwNC4yNyUyMDIuMjAwNzFDMTA0LjI3JTIwMS4zNDEyMSUyMDEwMy42MSUyMDAuNjc0OTM1''@;'; put 'put ''JTIwMTAyLjc0NCUyMDAuNjc0OTM1QzEwMS44NzglMjAwLjY3NDkzNSUyMDEwMS4yMTglMjAxLjQwMTE4JTIwMTAxLjIxOCUyMDIuMjAwNzFDMTAxLjIxOCUyMDMuMDYwMjElMjAxMDEuODc4JTIwMy43MjY0OCUyMDEwMi43NDQlMjAzLjcyNjQ4QzEwMy42MSUyMDMuNzI2NDglMjAxMDQuMjcl''@;'; put 'put ''MjAzLjAwMDI0JTIwMTA0LjI3JTIwMi4yMDA3MVolMjIlMjBmaWxsJTNEJTIyJTIzNzE3MTc1JTIyJTJGJTNFJTBBJTNDcGF0aCUyMGQlM0QlMjJNMTAyLjA4NSUyMDEuNDAyMDNDMTAyLjA4NSUyMDEuMjY4NzclMjAxMDIuMTUyJTIwMS4yMDIxNSUyMDEwMi4yODUlMjAxLjIwMjE1SDEwMi44''@;'; put 'put ''ODVDMTAzLjE1MSUyMDEuMjAyMTUlMjAxMDMuMjg0JTIwMS4yNjg3NyUyMDEwMy40MTglMjAxLjQwMjAzQzEwMy41NTElMjAxLjUzNTI4JTIwMTAzLjU1MSUyMDEuNjY4NTQlMjAxMDMuNTUxJTIwMS44MDE3OUMxMDMuNTUxJTIwMi4wNjgzJTIwMTAzLjQxOCUyMDIuMjY4MTklMjAxMDMuMjE4''@;'; put 'put ''JTIwMi4zMzQ4MkwxMDMuNDg0JTIwMi42Njc5NkMxMDMuNTI5JTIwMi43MTIzNyUyMDEwMy41NTElMjAyLjc1Njc5JTIwMTAzLjU1MSUyMDIuODAxMjFDMTAzLjU1MSUyMDIuOTM0NDYlMjAxMDMuNDg0JTIwMy4wMDEwOSUyMDEwMy4zNTElMjAzLjAwMTA5QzEwMy4yODQlMjAzLjAwMTA5JTIw''@;'; put 'put ''MTAzLjIxOCUyMDIuOTM0NDclMjAxMDMuMTUxJTIwMi44Njc4NEwxMDIuNzUxJTIwMi40MDE0NEgxMDIuNDE4VjIuODAxMjFDMTAyLjQxOCUyMDIuOTM0NDYlMjAxMDIuMzUyJTIwMy4wMDEwOSUyMDEwMi4yMTglMjAzLjAwMTA5QzEwMi4wODUlMjAzLjAwMTA5JTIwMTAyLjAxOSUyMDIuOTM0''@;'; put 'put ''NDYlMjAxMDIuMDE5JTIwMi44MDEyMVYxLjQwODY5SDEwMi4wODVWMS40MDIwM1pNMTAyLjg3OCUyMDIuMTI4MjdDMTAzLjA3OCUyMDIuMTI4MjclMjAxMDMuMjExJTIwMS45OTUwMiUyMDEwMy4yMTElMjAxLjg2MTc2QzEwMy4yMTElMjAxLjY2MTg4JTIwMTAzLjA3OCUyMDEuNTk1MjUlMjAx''@;'; put 'put ''MDIuODc4JTIwMS41OTUyNUgxMDIuNDc4VjIuMTI4MjdIMTAyLjg3OFolMjIlMjBmaWxsJTNEJTIyJTIzNzE3MTc1JTIyJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBKTstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItbG9naW4tbG9nby1jb2xvcil9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1mb290ZXJ7Z2FwOnZhcigtLWNsci1sb2dpbi1mb290ZXItZ2FwKX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWZvb3RlciBhLC5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZm9v''@;'; put 'put ''dGVyIC5jb3B5cmlnaHR7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dy''@;'; put 'put ''YXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItbG9naW4tY29weXJpZ2h0LWNvbG9yKX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWJvZHl7''@;'; put 'put ''aGVpZ2h0OjEwMCU7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjt3aWR0aDpjYWxjKDMyMCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC50aXRsZXtm''@;'; put 'put ''b250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzcGxheS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktbGlu''@;'; put 'put ''ZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc3BsYXktbGV0dGVyLXNwYWNpbmcpO2NvbG9yOnZhcigtLWNsci1sb2dpbi10aXRsZS1jb2xvcil9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC50aXRsZSAud2VsY29tZXtjb2xvcjp2YXIoLS1jbHIt''@;'; put 'put ''bG9naW4td2VsY29tZS1jb2xvcik7bWFyZ2luOjAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDB9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC50aXRsZSAuc3VidGl0bGUsLmxvZ2luLXdyYXBwZXIgLmxvZ2luIC50aXRsZSAuaGludHtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9n''@;'; put 'put ''cmFwaHktc2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpO2NvbG9yOnZhcigtLWNsci1sb2dpbi1oaW50LWNvbG9yKTttYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAwIDAgMH0ubG9naW4td3JhcHBlciAubG9naW4gLnRyYWRlbWFya3tjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItbG9naW4tdHJhZGVtYXJrLWNvbG9yKTtmb250LXdlaWdodDp2YXIoLS1jbHItbG9naW4tdHJhZGVtYXJrLWZvbnQtd2VpZ2h0KTtmb250LWZhbWlseTp2YXIoLS1jbHItbG9naW4tdHJhZGVtYXJrLWZvbnQtZmFtaWx5KTtmb250LXNpemU6dmFyKC0tY2xyLWxvZ2luLXRyYWRlbWFyay1m''@;'; put 'put ''b250LXNpemUpO2xldHRlci1zcGFjaW5nOnZhcigtLWNsci1sb2dpbi10cmFkZW1hcmstbGV0dGVyLXNwYWNpbmcpfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXB7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwYWRkaW5nLXRvcDp2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTEzKTt3aWR0aDoxMDAlfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmF1dGgtc291cmNlLC5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLnVzZXJuYW1lLC5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLnBhc3N3b3JkLC5sb2dp''@;'; put 'put ''bi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNoZWNrYm94LC5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNsci1mb3JtLWNvbnRyb2x7bWFyZ2luOjAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpIDB9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91''@;'; put 'put ''cCAuY2xyLWNoZWNrYm94LXdyYXBwZXJ7bWFyZ2luOjAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzKSAwfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNsci1jb250cm9sLWNvbnRhaW5lcntkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCV9LmxvZ2luLXdyYXBwZXIgLmxv''@;'; put 'put ''Z2luIC5sb2dpbi1ncm91cCAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItc2VsZWN0LXdyYXBwZXIsLmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItc2VsZWN0e3dpZHRoOjEwMCV9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5s''@;'; put 'put ''b2dpbi1ncm91cCAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQtd3JhcHBlcj4uY2xyLWlucHV0e3dpZHRoOjEwMCV9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItaW5wdXQtd3JhcHBlcnt3aWR0aDoxMDAlfS5s''@;'; put 'put ''b2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNsci1jb250cm9sLWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXI+LmNsci1pbnB1dC1ncm91cHttYXgtd2lkdGg6MTAwJTt3aWR0aDoxMDAlfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmNsci1jb250cm9s''@;'; put 'put ''LWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXI+LmNsci1pbnB1dC1ncm91cD4uY2xyLWlucHV0e3dpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkpfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLnRvb2x0aXAtdmFsaWRhdGlvbnttYXJnaW4t''@;'; put 'put ''dG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCl9LmxvZ2luLXdyYXBwZXIgLmxvZ2luIC5sb2dpbi1ncm91cCAudG9vbHRpcC12YWxpZGF0aW9uIC51c2VybmFtZSwubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC50b29sdGlwLXZhbGlkYXRpb24gLnBhc3N3b3Jke3dpZHRo''@;'; put 'put ''OjEwMCU7bWFyZ2luLXRvcDowfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmVycm9ye2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRh''@;'; put 'put ''cnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OmNhbGMoMjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7ZGlzcGxheTpub25lO3BhZGRpbmc6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS01KTtiYWNrZ3JvdW5kOnZhcigtLWNsci1sb2dpbi1lcnJvci1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYWxlcnQtZGFuZ2VyLWZvbnQtY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7''@;'; put 'put ''Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWFsZXJ0LWRhbmdlci1ib3JkZXItY29sb3IpfS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmVycm9yOmJlZm9yZXtjb250ZW50OiIiO21hc2s6dXJsKCJkYXRh''@;'; put 'put ''OmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUyMHZlcnNpb24lM0QlMjIxLjElMjIlMjB2aWV3Qm94JTNEJTIyNSUyMDUlMjAyNiUyMDI2JTIyJTIwcHJlc2VydmVBc3BlY3RSYXRpbyUzRCUyMnhNaWRZTWlkJTIwbWVldCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3''@;'; put 'put ''dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIweG1sbnMlM0F4bGluayUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMTk5OSUyRnhsaW5rJTIyJTNFJTNDZGVmcyUzRSUzQ3N0eWxlJTNFLmNsci1pLW91dGxpbmUlN0JmaWxsJTNBJ25vbmUnJTNCJTdEJTNDJTJGc3R5bGUlM0UlM0Ml''@;'; put 'put ''MkZkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDdGl0bGUlM0VleGNsYW1hdGlvbi1jaXJjbGUtbGluZSUzQyUyRnRpdGxlJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDcGF0''@;'; put 'put ''aCUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUtcGF0aC0xJTIyJTIwZCUzRCUyMk0xOCUyQzZBMTIlMkMxMiUyQzAlMkMxJTJDMCUyQzMwJTJDMTglMkMxMiUyQzEyJTJDMCUyQzAlMkMwJTJDMTglMkM2Wm0wJTJDMjJBMTAlMkMxMCUyQzAlMkMxJTJDMSUyQzI4''@;'; put 'put ''JTJDMTglMkMxMCUyQzEwJTJDMCUyQzAlMkMxJTJDMTglMkMyOFolMjIlM0UlM0MlMkZwYXRoJTNFJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xyLWktb3V0bGluZSUyMGNsci1pLW91dGxpbmUtcGF0aC0yJTIyJTIwZCUzRCUyMk0xOCUyQzIwLjA3YTEuMyUyQzEuMyUyQzAlMkMwJTJDMS0xLjMt''@;'; put 'put ''MS4zdi02YTEuMyUyQzEuMyUyQzAlMkMxJTJDMSUyQzIuNiUyQzB2NkExLjMlMkMxLjMlMkMwJTJDMCUyQzElMkMxOCUyQzIwLjA3WiUyMiUzRSUzQyUyRnBhdGglM0UlM0NjaXJjbGUlMjBjbGFzcyUzRCUyMmNsci1pLW91dGxpbmUlMjBjbHItaS1vdXRsaW5lLXBhdGgtMyUyMiUyMGN4JTNE''@;'; put 'put ''JTIyMTcuOTUlMjIlMjBjeSUzRCUyMjIzLjAyJTIyJTIwciUzRCUyMjEuNSUyMiUzRSUzQyUyRmNpcmNsZSUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQyUyRnN2ZyUzRSIpOy13ZWJraXQtbWFzay1yZXBlYXQ6bm8tcmVwZWF0O21hc2stcmVwZWF0Om5vLXJl''@;'; put 'put ''cGVhdDstd2Via2l0LW1hc2stc2l6ZTpjb3ZlcjttYXNrLXNpemU6Y292ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbG9naW4tZXJyb3ItaWNvbi1jb2xvcik7bWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSAwIDA7aGVpZ2h0''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5lcnJvci5hY3RpdmV7ZGlzcGxheTpmbGV4fS5sb2dpbi13cmFwcGVyIC5sb2dpbiAubG9naW4tZ3JvdXAgLmVycm9yLmFj''@;'; put 'put ''dGl2ZTpiZWZvcmV7ZmxleDowIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2luLWdyb3VwIC5idG57bWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgMDttYXgtd2lkdGg6bm9uZX0ubG9naW4td3JhcHBlciAubG9naW4gLmxvZ2lu''@;'; put 'put ''LWdyb3VwIC5zaWdudXB7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2xl''@;'; put 'put ''dHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpO3RleHQtYWxpZ246Y2VudGVyfS5sb2dpbi13cmFwcGVyIC5sb2dpbjphZnRlcntwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO2Rpc3BsYXk6YmxvY2s7d2lkdGg6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS0xKTtoZWlnaHQ6MTAwJTtiYWNrZ3JvdW5kOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmxhY2spO29wYWNpdHk6LjE7dG9wOjA7cmlnaHQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpKX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc2OHB4KXsu''@;'; put 'put ''bG9naW4td3JhcHBlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2JhY2tncm91bmQ6dmFyKC0tY2xyLWxvZ2luLWJhY2tncm91bmQtY29sb3IpfS5sb2dpbi13cmFwcGVyIC5sb2dpbnt3aWR0aDoxMDAlO21hcmdpbi1sZWZ0OjA7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpIDIw''@;'; put 'put ''JX0ubG9naW4td3JhcHBlciAubG9naW46YWZ0ZXJ7Y29udGVudDpub25lfX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjU3NnB4KXsubG9naW4td3JhcHBlciAubG9naW57cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpIDE1JX19Lm1haW4tY29udGFpbmVye2Rpc3BsYXk6''@;'; put 'put ''ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47aGVpZ2h0OjEwMHZoO2JhY2tncm91bmQ6dmFyKC0tY2xyLWdsb2JhbC1hcHAtYmFja2dyb3VuZCl9Lm1haW4tY29udGFpbmVyIC5hbGVydC5hbGVydC1hcHAtbGV2ZWx7ZmxleDowIDAgYXV0bztvdmVyZmxvdy14OmhpZGRlbn0ubWFpbi1jb250''@;'; put 'put ''YWluZXIgaGVhZGVyLC5tYWluLWNvbnRhaW5lciAuaGVhZGVye2ZsZXg6MCAwIHZhcigtLWNsci1oZWFkZXItaGVpZ2h0KX0ubWFpbi1jb250YWluZXIgLnN1Yi1uYXYsLm1haW4tY29udGFpbmVyIC5zdWJuYXZ7ZmxleDowIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSl9Lm1haW4tY29u''@;'; put 'put ''dGFpbmVyIC51LW1haW4tY29udGFpbmVye2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleDoxIDEgYXV0bztvdmVyZmxvdzpoaWRkZW59Lm1haW4tY29udGFpbmVyIC5jb250ZW50LWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7ZmxleDoxIDEgYXV0bzttaW4taGVpZ2h0Oi4w''@;'; put 'put ''NXJlbX0ubWFpbi1jb250YWluZXIgLmNvbnRlbnQtY29udGFpbmVyIC5jb250ZW50LWFyZWF7ZmxleDoxIDEgYXV0bztvdmVyZmxvdy15OmF1dG87LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7cGFkZGluZzoxLjJyZW19Lm1haW4tY29udGFpbmVyIC5jb250ZW50LWNvbnRhaW5l''@;'; put 'put ''ciAuY29udGVudC1hcmVhPjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9Lm1haW4tY29udGFpbmVyIC5jb250ZW50LWNvbnRhaW5lciAuY2xyLXZlcnRpY2FsLW5hdntmbGV4OjAgMCBhdXRvO29yZGVyOi0xfUBtZWRpYSBwcmludHsubWFpbi1jb250YWluZXJ7aGVpZ2h0OmF1dG99fWJvZHku''@;'; put 'put ''bm8tc2Nyb2xsaW5nLGJvZHlbY2RzLWxheW91dD1uby1zY3JvbGxpbmddLGJvZHkubm8tc2Nyb2xsaW5nIC5tYWluLWNvbnRhaW5lciAuY29udGVudC1jb250YWluZXIgLmNvbnRlbnQtYXJlYSxib2R5W2Nkcy1sYXlvdXQ9bm8tc2Nyb2xsaW5nXSAubWFpbi1jb250YWluZXIgLmNvbnRlbnQt''@;'; put 'put ''Y29udGFpbmVyIC5jb250ZW50LWFyZWF7b3ZlcmZsb3c6aGlkZGVufTpyb290IFtjZHMtdGhlbWVdey0tY2xyLW1vZGFsLWJvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItbW9kYWwtY2xvc2UtY29sb3I6dmFyKC0tY2xyLWNsb3Nl''@;'; put 'put ''LWNvbG9yKTstLWNsci1tb2RhbC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTstLWNsci1tb2RhbC1jb250ZW50LWJveC1zaGFkb3c6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMzAwKTstLWNsci1tb2RhbC1iYWNrZHJvcC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW92ZXJsYXktYmFja2Ryb3AtYmFja2dyb3VuZCk7LS1jbHItbW9kYWwtc20td2lkdGg6Y2FsYygyODggKiAoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNsci1tb2RhbC1tZC13aWR0aDpjYWxjKDU3NiAqICgxcmVtIC8gdmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1iYXNlKSkpOy0tY2xyLW1vZGFsLWxnLXdpZHRoOmNhbGMoODY0ICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jbHItbW9kYWwteGwtd2lkdGg6Y2FsYygxMTUyICogKDFyZW0gLyB2YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7LS1jbHItbW9kYWwtdGl0''@;'; put 'put ''bGUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1tb2RhbC10aXRsZS1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXNpemUpOy0tY2xyLW1vZGFsLXRpdGxlLWZvbnQtZmFtaWx5OnZhcigtLWNsci1mb250''@;'; put 'put ''KTstLWNsci1tb2RhbC10aXRsZS1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtd2VpZ2h0KTstLWNsci1tb2RhbC10aXRsZS1saW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0KTstLWNsci1t''@;'; put 'put ''b2RhbC10aXRsZS1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxldHRlci1zcGFjaW5nKX0uY2xyLXNpZGUtcGFuZWwtcGlubmVkLXNte3BhZGRpbmctcmlnaHQ6dmFyKC0tY2xyLW1vZGFsLXNtLXdpZHRoKSFpbXBvcnRhbnR9LmNsci1zaWRlLXBh''@;'; put 'put ''bmVsLXBpbm5lZC1tZHtwYWRkaW5nLXJpZ2h0OnZhcigtLWNsci1tb2RhbC1tZC13aWR0aCkhaW1wb3J0YW50fS5jbHItc2lkZS1wYW5lbC1waW5uZWQtbGd7cGFkZGluZy1yaWdodDp2YXIoLS1jbHItbW9kYWwtbGctd2lkdGgpIWltcG9ydGFudH0uY2xyLXNpZGUtcGFuZWwtcGlubmVkLXhs''@;'; put 'put ''e3BhZGRpbmctcmlnaHQ6dmFyKC0tY2xyLW1vZGFsLXhsLXdpZHRoKSFpbXBvcnRhbnR9LmNsci1tb2RhbC1ob3N0e292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0uY2xyLW1vZGFsLWhvc3QgLm1vZGFsLC5jbHItbW9kYWwtaG9zdCAubW9kYWwtYmFja2Ryb3B7cG9zaXRpb246''@;'; put 'put ''YWJzb2x1dGV9Lm1vZGFse3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7ei1pbmRleDoxMDUwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7cGFkZGluZzpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2Ut''@;'; put 'put ''OSkqMik7bWF4LXdpZHRoOjEwMCV9Lm1vZGFsIC5hbGVydCsubW9kYWwtaGVhZGVyLC5tb2RhbCAuYWxlcnQrLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZXttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo1NzZweCl7Lm1v''@;'; put 'put ''ZGFse3BhZGRpbmc6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpLzIpfX0uc2lkZS1wYW5lbCAubW9kYWx7bGVmdDppbml0aWFsO3BhZGRpbmc6MDtoZWlnaHQ6MTAwJX0uc2lkZS1wYW5lbCAubW9kYWwgLm1vZGFsLWNvbnRlbnQtd3JhcHBlcntoZWlnaHQ6MTAwJX0uc2lkZS1wYW5l''@;'; put 'put ''bCAubW9kYWwgLm1vZGFsLWNvbnRlbnQtd3JhcHBlciAubW9kYWwtY29udGVudHtoZWlnaHQ6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5zaWRlLXBhbmVsIC5tb2RhbCAubW9kYWwtZGlhbG9ne2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtoZWlnaHQ6MTAwJX0u''@;'; put 'put ''c2lkZS1wYW5lbCAubW9kYWwubW9kYWwtZnVsbC1zY3JlZW57aW5zZXQ6MDtwYWRkaW5nOjB9LnNpZGUtcGFuZWwgLm1vZGFsIC5tb2RhbC1ib2R5LXdyYXBwZXJ7ZmxleDoxIDE7bWF4LWhlaWdodDoxMDAlfS5tb2RhbC1kaWFsb2d7cG9zaXRpb246cmVsYXRpdmU7ei1pbmRleDoxMDUwO3dp''@;'; put 'put ''ZHRoOnZhcigtLWNsci1tb2RhbC1tZC13aWR0aCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItbW9kYWwtYm9yZGVyLXJhZGl1cyk7Ym94LXNoYWRvdzp2YXIoLS1jbHItbW9kYWwtY29udGVudC1ib3gtc2hhZG93KTtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgt''@;'; put 'put ''MTAwKSBzb2xpZCB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLW1vZGFsLWJnLWNvbG9yKTttYXgtd2lkdGg6MTAwJX0ubW9kYWwtZGlhbG9nLm1vZGFsLXNte3dpZHRoOnZhcigtLWNsci1tb2RhbC1zbS13''@;'; put 'put ''aWR0aCl9Lm1vZGFsLWRpYWxvZy5tb2RhbC1sZ3t3aWR0aDp2YXIoLS1jbHItbW9kYWwtbGctd2lkdGgpfS5tb2RhbC1kaWFsb2cubW9kYWwteGx7d2lkdGg6dmFyKC0tY2xyLW1vZGFsLXhsLXdpZHRoKX0ubW9kYWwtZGlhbG9nIC5tb2RhbC1jb250ZW50e3BhZGRpbmc6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS05KX0ubW9kYWwtaGVhZGVyLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGV7Ym9yZGVyLWJvdHRvbTpub25lO3BhZGRpbmc6MCAwIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkgMH0ubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxle2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRl''@;'; put 'put ''bnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5tb2RhbC1oZWFkZXIgLm1vZGFsLXRpdGxlLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLm1vZGFsLXRpdGxlLC5tb2RhbC1oZWFkZXIgLnNpZGUtcGFuZWwtdGl0bGUsLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAu''@;'; put 'put ''c2lkZS1wYW5lbC10aXRsZXtjb2xvcjp2YXIoLS1jbHItbW9kYWwtdGl0bGUtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXdlaWdo''@;'; put 'put ''dCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1sZXR0ZXItc3BhY2luZyk7bWFyZ2luOjB9Lm1vZGFsLWhlYWRlciAubW9kYWwtdGl0bGU6''@;'; put 'put ''bm90KFtjZHMtdGV4dF0pLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLm1vZGFsLXRpdGxlOm5vdChbY2RzLXRleHRdKSwubW9kYWwtaGVhZGVyIC5zaWRlLXBhbmVsLXRpdGxlOm5vdChbY2RzLXRleHRdKSwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5zaWRlLXBhbmVsLXRpdGxlOm5v''@;'; put 'put ''dChbY2RzLXRleHRdKXtmb250LWZhbWlseTp2YXIoLS1jbHItbW9kYWwtdGl0bGUtZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItbW9kYWwtdGl0bGUtZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItbW9kYWwtdGl0bGUtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZh''@;'; put 'put ''cigtLWNsci1tb2RhbC10aXRsZS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2xyLW1vZGFsLXRpdGxlLWxldHRlci1zcGFjaW5nKX0ubW9kYWwtaGVhZGVyIC5jbG9zZSwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5jbG9zZSwubW9kYWwtaGVhZGVyIC5waW5uYWJsZSwu''@;'; put 'put ''bW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5waW5uYWJsZXtmb250LXNpemU6aW5pdGlhbDtsaW5lLWhlaWdodDppbml0aWFsfS5tb2RhbC1oZWFkZXIgLmNsb3NlIGNkcy1pY29uLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLmNsb3NlIGNkcy1pY29uLC5tb2RhbC1oZWFkZXIgLmNsb3Nl''@;'; put 'put ''IGNsci1pY29uLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLmNsb3NlIGNsci1pY29uLC5tb2RhbC1oZWFkZXIgLnBpbm5hYmxlIGNkcy1pY29uLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLnBpbm5hYmxlIGNkcy1pY29uLC5tb2RhbC1oZWFkZXIgLnBpbm5hYmxlIGNsci1pY29uLC5t''@;'; put 'put ''b2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLnBpbm5hYmxlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLW1vZGFsLWNsb3NlLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5tb2RhbC1oZWFkZXIgLmNsb3NlOmhv''@;'; put 'put ''dmVyIGNkcy1pY29uLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLmNsb3NlOmhvdmVyIGNkcy1pY29uLC5tb2RhbC1oZWFkZXIgLmNsb3NlOmhvdmVyIGNsci1pY29uLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLmNsb3NlOmhvdmVyIGNsci1pY29uLC5tb2RhbC1oZWFkZXIgLnBpbm5h''@;'; put 'put ''YmxlOmhvdmVyIGNkcy1pY29uLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLnBpbm5hYmxlOmhvdmVyIGNkcy1pY29uLC5tb2RhbC1oZWFkZXIgLnBpbm5hYmxlOmhvdmVyIGNsci1pY29uLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLnBpbm5hYmxlOmhvdmVyIGNsci1pY29ue2ZpbGw6''@;'; put 'put ''dmFyKC0tY2xyLWNsb3NlLWNvbG9yLWhvdmVyKX0ubW9kYWwtaGVhZGVyIC5jbG9zZTpob3ZlcjphY3RpdmUgY2RzLWljb24sLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAuY2xvc2U6aG92ZXI6YWN0aXZlIGNkcy1pY29uLC5tb2RhbC1oZWFkZXIgLmNsb3NlOmhvdmVyOmFjdGl2ZSBjbHIt''@;'; put 'put ''aWNvbiwubW9kYWwtaGVhZGVyLS1hY2Nlc3NpYmxlIC5jbG9zZTpob3ZlcjphY3RpdmUgY2xyLWljb24sLm1vZGFsLWhlYWRlciAucGlubmFibGU6aG92ZXI6YWN0aXZlIGNkcy1pY29uLC5tb2RhbC1oZWFkZXItLWFjY2Vzc2libGUgLnBpbm5hYmxlOmhvdmVyOmFjdGl2ZSBjZHMtaWNvbiwu''@;'; put 'put ''bW9kYWwtaGVhZGVyIC5waW5uYWJsZTpob3ZlcjphY3RpdmUgY2xyLWljb24sLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAucGlubmFibGU6aG92ZXI6YWN0aXZlIGNsci1pY29ue2ZpbGw6dmFyKC0tY2xyLWNsb3NlLWNvbG9yLWFjdGl2ZSl9Lm1vZGFsLWhlYWRlciAucGlubmFibGUsLm1v''@;'; put 'put ''ZGFsLWhlYWRlci0tYWNjZXNzaWJsZSAucGlubmFibGV7cGFkZGluZzowO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQ6MCAwO2JvcmRlcjowO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2FwcGVhcmFuY2U6bm9uZTstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX0ubW9k''@;'; put 'put ''YWwtdGl0bGUtd3JhcHBlcntmbGV4OjF9Lm1vZGFsLXRpdGxlLXdyYXBwZXIgLm1vZGFsLXRpdGxlIGgzLC5tb2RhbC10aXRsZS13cmFwcGVyIC5zaWRlLXBhbmVsLXRpdGxlIGgze21hcmdpbi10b3A6MH0ubW9kYWwtYm9keS13cmFwcGVye21heC1oZWlnaHQ6NzB2aDtvdmVyZmxvdy15OmF1''@;'; put 'put ''dG87b3ZlcmZsb3cteDpoaWRkZW59Lm1vZGFsLWJvZHktd3JhcHBlciAubW9kYWwtYm9keSwubW9kYWwtYm9keS13cmFwcGVyIC5zaWRlLXBhbmVsLWJvZHl7Y29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9n''@;'; put 'put ''cmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpfS5tb2RhbC1ib2R5LXdyYXBwZXI+OmZpcnN0LWNoaWxke21hcmdpbi10b3A6MH0ubW9kYWwtYm9keS13cmFwcGVyPjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0ubW9kYWwtZm9vdGVyLC5zaWRlLXBhbmVsLWZvb3RlcntkaXNw''@;'; put 'put ''bGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KSAwIDAgMDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0ubW9kYWwtZm9vdGVyIC5idG4sLnNpZGUtcGFuZWwtZm9vdGVyIC5idG57bWFyZ2luOjB9LnNpZGUtcGFu''@;'; put 'put ''ZWwtZm9vdGVye3BhZGRpbmctdG9wOjB9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDo3NjhweCkgYW5kIChvcmllbnRhdGlvbjpsYW5kc2NhcGUpey5tb2RhbC1ib2R5LXdyYXBwZXJ7bWF4LWhlaWdodDo1NXZofX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjU3NnB4KXsubW9k''@;'; put 'put ''YWwtYm9keS13cmFwcGVye21heC1oZWlnaHQ6NTV2aH19Lm1vZGFsLWJhY2tkcm9we3Bvc2l0aW9uOmZpeGVkO2luc2V0OjA7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbW9kYWwtYmFja2Ryb3AtY29sb3IpO3otaW5kZXg6MTA0MH0ubW9kYWwgLm1vZGFsLW5hdntkaXNwbGF5Om5vbmV9''@;'; put 'put ''Lm1vZGFsLm1vZGFsLWZ1bGwtc2NyZWVue3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtoZWlnaHQ6MTAwJX0ubW9kYWwubW9kYWwtZnVsbC1zY3JlZW4gLm1vZGFsLWRpYWxvZ3tkaXNwbGF5OmZsZXg7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJX0ubW9kYWwubW9kYWwtZnVsbC1z''@;'; put 'put ''Y3JlZW4gLm1vZGFsLWRpYWxvZyAubW9kYWwtY29udGVudC13cmFwcGVye2Rpc3BsYXk6ZmxleDtmbGV4LWdyb3c6MX0ubW9kYWwubW9kYWwtZnVsbC1zY3JlZW4gLm1vZGFsLWRpYWxvZyAubW9kYWwtY29udGVudHtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2ZsZXgtZ3Jv''@;'; put 'put ''dzoxfS5tb2RhbC5tb2RhbC1mdWxsLXNjcmVlbiAubW9kYWwtZGlhbG9nIC5tb2RhbC1ib2R5LXdyYXBwZXIsLm1vZGFsLm1vZGFsLWZ1bGwtc2NyZWVuIC5tb2RhbC1kaWFsb2cgLm1vZGFsLWJvZHl7ZmxleC1ncm93OjE7bWF4LWhlaWdodDoxMDAlfTpyb290IFtjZHMtdGhlbWVdey0tY2xy''@;'; put 'put ''LWhlYWRlci1oZWlnaHQ6Y2FsYyg2MCAqICgxcmVtIC8gdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpOy0tY2xyLWhlYWRlci1kaXZpZGVyLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jbHItaGVhZGVyLWJnLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''Y29sb3ItY29vbC1ncmF5LTEwMDApOy0tY2xyLWhlYWRlci0yLWJnLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jbHItaGVhZGVyLTMtYmctY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1henVyZS05MDApOy0tY2xyLWhlYWRlci00LWJnLWNv''@;'; put 'put ''bG9yOnZhcigtLWNsci1oZWFkZXItMy1iZy1jb2xvcik7LS1jbHItaGVhZGVyLTUtYmctY29sb3I6dmFyKC0tY2xyLWhlYWRlci0zLWJnLWNvbG9yKTstLWNsci1oZWFkZXItNi1iZy1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLWJnLWNvbG9yKTstLWNsci1oZWFkZXItNy1iZy1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItaGVhZGVyLTItYmctY29sb3IpOy0tY2xyLWhlYWRlci1mb250LWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1jbHItaGVhZGVyLWZvbnQtY29sb3ItaG92ZXI6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNTApOy0tY2xy''@;'; put 'put ''LWhlYWRlci10aXRsZS1mb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXdlaWdodCk7LS1jbHItaGVhZGVyLXRpdGxlLWZvbnQtZmFtaWx5OnZhcigtLWNsci1mb250KTstLWNsci1oZWFkZXItc2VhcmNoLWljb24tc2l6ZTp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTkpOy0tY2xyLWhlYWRlci1zZWFyY2gtbWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTstLWNsci1oZWFkZXItc2VhcmNoLW1hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLWhlYWRlci1zZWFyY2gtZ2FwOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtNSk7LS1jbHItaGVhZGVyLXNlYXJjaC1pbnB1dC1mb250LWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpOy0tY2xyLWhlYWRlci1zZWFyY2gtcGxhY2Vob2xkZXItZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2Vp''@;'; put 'put ''Z2h0LXJlZ3VsYXIpOy0tY2xyLWhlYWRlci1zZWFyY2gtcGxhY2Vob2xkZXItdGV4dC1jb2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi00MDApOy0tY2xyLWhlYWRlci1zZWFyY2gtYm9yZGVyLWFjdGl2ZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0''@;'; put 'put ''aC0xMDApIHNvbGlkIEhpZ2hsaWdodDstLWNsci1oZWFkZXItc2VhcmNoLWJvcmRlci1ob3Zlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApIHNvbGlkIHZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTQwMCl9aGVhZGVyLC5oZWFkZXJ7ZGlzcGxh''@;'; put 'put ''eTpmbGV4O2NvbG9yOnZhcigtLWNsci1oZWFkZXItZm9udC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLWJnLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2xyLWhlYWRlci1oZWlnaHQpO3doaXRlLXNwYWNlOm5vd3JhcH1oZWFkZXIuaGVhZGVyLTEsLmhlYWRlci5oZWFk''@;'; put 'put ''ZXItMXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1oZWFkZXItYmctY29sb3IpfWhlYWRlci5oZWFkZXItMiwuaGVhZGVyLmhlYWRlci0ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci0yLWJnLWNvbG9yKX1oZWFkZXIuaGVhZGVyLTMsLmhlYWRlci5oZWFkZXItM3tiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWNsci1oZWFkZXItMy1iZy1jb2xvcil9aGVhZGVyLmhlYWRlci00LC5oZWFkZXIuaGVhZGVyLTR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLTQtYmctY29sb3IpfWhlYWRlci5oZWFkZXItNSwuaGVhZGVyLmhlYWRlci01e2JhY2tncm91bmQt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWhlYWRlci01LWJnLWNvbG9yKX1oZWFkZXIuaGVhZGVyLTYsLmhlYWRlci5oZWFkZXItNntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1oZWFkZXItNi1iZy1jb2xvcil9aGVhZGVyLmhlYWRlci03LC5oZWFkZXIuaGVhZGVyLTd7YmFja2dyb3VuZC1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItaGVhZGVyLTctYmctY29sb3IpfWhlYWRlci5oZWFkZXItOCwuaGVhZGVyLmhlYWRlci04e2JhY2tncm91bmQtY29sb3I6IzBmMTcxY31oZWFkZXIgLmJyYW5kaW5nLC5oZWFkZXIgLmJyYW5kaW5ne2Rpc3BsYXk6ZmxleDtmbGV4OjAgMCBhdXRvO21pbi13aWR0aDpjYWxjKDIw''@;'; put 'put ''NCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9aGVhZGVyIC5icmFuZGluZz5hLGhlYWRlciAuYnJhbmRpbmc+Lm5hdi1saW5rLC5oZWFkZXIgLmJyYW5kaW5nPmEsLmhlYWRlciAuYnJhbmRpbmc+Lm5hdi1saW5re2Rp''@;'; put 'put ''c3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO3RleHQtZGVjb3JhdGlvbjpub25lO2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX1oZWFkZXIgLmJyYW5kaW5nPmE6Zm9jdXMsaGVhZGVyIC5icmFuZGluZz4u''@;'; put 'put ''bmF2LWxpbms6Zm9jdXMsLmhlYWRlciAuYnJhbmRpbmc+YTpmb2N1cywuaGVhZGVyIC5icmFuZGluZz4ubmF2LWxpbms6Zm9jdXN7b3V0bGluZS1vZmZzZXQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpKX1oZWFkZXIgLmJyYW5kaW5nIC5jbHItaWNvbixoZWFkZXIgLmJyYW5k''@;'; put 'put ''aW5nIGNkcy1pY29uLGhlYWRlciAuYnJhbmRpbmcgY2xyLWljb24sLmhlYWRlciAuYnJhbmRpbmcgLmNsci1pY29uLC5oZWFkZXIgLmJyYW5kaW5nIGNkcy1pY29uLC5oZWFkZXIgLmJyYW5kaW5nIGNsci1pY29ue2ZsZXgtZ3JvdzowO2ZsZXgtc2hyaW5rOjA7aGVpZ2h0OnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtMTEpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpfWhlYWRlciAuYnJhbmRpbmcgLnRpdGxlLC5oZWFkZXIgLmJyYW5kaW5nIC50aXRsZXtjb2xvcjp2YXIoLS1jbHItaGVhZGVyLWZvbnQtY29sb3IpO2ZvbnQtZmFtaWx5OnZhcigtLWNsci1oZWFkZXItdGl0''@;'; put 'put ''bGUtZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWhlYWRlci10aXRsZS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vi''@;'; put 'put ''c2VjdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1sZXR0ZXItc3BhY2luZyk7dGV4dC1kZWNvcmF0aW9uOm5vbmV9aGVhZGVyIC5zZXR0aW5ncyAubmF2LXRleHQsaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtdGV4''@;'; put 'put ''dCxoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtdGV4dCwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LXRleHQsLmhlYWRlciAuaGVhZGVyLW5hdiAubmF2LXRleHQsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi10ZXh0e2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1i''@;'; put 'put ''b2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1z''@;'; put 'put ''cGFjaW5nKX1oZWFkZXIgLnNldHRpbmdzIGNsci1pY29uLGhlYWRlciAuaGVhZGVyLW5hdiBjbHItaWNvbixoZWFkZXIgLmhlYWRlci1hY3Rpb25zIGNsci1pY29uLC5oZWFkZXIgLnNldHRpbmdzIGNsci1pY29uLC5oZWFkZXIgLmhlYWRlci1uYXYgY2xyLWljb24sLmhlYWRlciAuaGVhZGVy''@;'; put 'put ''LWFjdGlvbnMgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1mb250LWNvbG9yKX1oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluayxoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLGhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rLC5oZWFkZXIgLnNldHRpbmdzIC5uYXYt''@;'; put 'put ''bGluaywuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluaywuaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmt7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpjZW50ZXI7cGFkZGluZzp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTgpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1mb250LWNvbG9yKX1oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluazpob3ZlcixoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rOmhvdmVyLGhl''@;'; put 'put ''YWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rOmhvdmVyLC5oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluazpob3ZlciwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluazpob3ZlciwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbms6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLWhl''@;'; put 'put ''YWRlci1mb250LWNvbG9yLWhvdmVyKX1oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluazpkaXNhYmxlZCxoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rOmRpc2FibGVkLGhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rOmRpc2FibGVkLC5oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGlu''@;'; put 'put ''azpkaXNhYmxlZCwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluazpkaXNhYmxlZCwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbms6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfWhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rIGNkcy1pY29uLGhlYWRlciAuc2V0dGluZ3Mg''@;'; put 'put ''Lm5hdi1saW5rIGNsci1pY29uLGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmsgY2RzLWljb24saGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluayBjbHItaWNvbixoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluayBjZHMtaWNvbixoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYt''@;'; put 'put ''bGluayBjbHItaWNvbiwuaGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsgY2RzLWljb24sLmhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rIGNsci1pY29uLC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rIGNkcy1pY29uLC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rIGNsci1pY29u''@;'; put 'put ''LC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluayBjZHMtaWNvbiwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsgY2xyLWljb257aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX1oZWFkZXIgLnNldHRp''@;'; put 'put ''bmdzIC5uYXYtbGluay5uYXYtaWNvbi10ZXh0LGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmsubmF2LWljb24tdGV4dCxoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluay5uYXYtaWNvbi10ZXh0LC5oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluay5uYXYtaWNvbi10ZXh0LC5oZWFk''@;'; put 'put ''ZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLm5hdi1pY29uLXRleHQsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rLm5hdi1pY29uLXRleHR7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCl9aGVhZGVyIC5zZXR0aW5ncyAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjZHMtaWNv''@;'; put 'put ''bixoZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluay5uYXYtaWNvbi10ZXh0IGNsci1pY29uLGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjZHMtaWNvbixoZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgY2xyLWljb24saGVhZGVyIC5o''@;'; put 'put ''ZWFkZXItYWN0aW9ucyAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjZHMtaWNvbixoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluay5uYXYtaWNvbi10ZXh0IGNsci1pY29uLC5oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluay5uYXYtaWNvbi10ZXh0IGNkcy1pY29uLC5oZWFkZXIgLnNl''@;'; put 'put ''dHRpbmdzIC5uYXYtbGluay5uYXYtaWNvbi10ZXh0IGNsci1pY29uLC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rLm5hdi1pY29uLXRleHQgY2RzLWljb24sLmhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjbHItaWNvbiwuaGVhZGVyIC5oZWFkZXItYWN0''@;'; put 'put ''aW9ucyAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjZHMtaWNvbiwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsubmF2LWljb24tdGV4dCBjbHItaWNvbnt0cmFuc2Zvcm06bm9uZX1oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0LGhlYWRlciAu''@;'; put 'put ''aGVhZGVyLW5hdiAubmF2LWxpbmsgLm5hdi1pY29uKy5uYXYtdGV4dCxoZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0LC5oZWFkZXIgLnNldHRpbmdzIC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0LC5oZWFkZXIgLmhlYWRlci1uYXYgLm5h''@;'; put 'put ''di1saW5rIC5uYXYtaWNvbisubmF2LXRleHQsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rIC5uYXYtaWNvbisubmF2LXRleHR7ZGlzcGxheTpub25lfWhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rLmFjdGl2ZSAubmF2LXRleHQsaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGlu''@;'; put 'put ''ay5hY3RpdmUgLm5hdi10ZXh0LGhlYWRlciAuaGVhZGVyLWFjdGlvbnMgLm5hdi1saW5rLmFjdGl2ZSAubmF2LXRleHQsLmhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rLmFjdGl2ZSAubmF2LXRleHQsLmhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbmsuYWN0aXZlIC5uYXYtdGV4dCwuaGVh''@;'; put 'put ''ZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbmsuYWN0aXZlIC5uYXYtdGV4dHtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtsaW5l''@;'; put 'put ''LWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpfWhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rOmZvY3VzLGhlYWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbms6Zm9jdXMs''@;'; put 'put ''aGVhZGVyIC5oZWFkZXItYWN0aW9ucyAubmF2LWxpbms6Zm9jdXMsLmhlYWRlciAuc2V0dGluZ3MgLm5hdi1saW5rOmZvY3VzLC5oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rOmZvY3VzLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zIC5uYXYtbGluazpmb2N1c3tvdXRsaW5lLW9mZnNldDpj''@;'; put 'put ''YWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCkpfWhlYWRlciAuaGVhZGVyLW5hdiwuaGVhZGVyIC5oZWFkZXItbmF2e2Rpc3BsYXk6ZmxleDtmbGV4OjAgMCBhdXRvO2FsaWduLWl0ZW1zOmNlbnRlcjtwb3NpdGlvbjpyZWxhdGl2ZX1oZWFkZXIgLmhlYWRlci1uYXY6YmVmb3JlLC5o''@;'; put 'put ''ZWFkZXIgLmhlYWRlci1uYXY6YmVmb3Jle2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2NvbnRlbnQ6IiI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLWRpdmlkZXItY29sb3IpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTt3aWR0aDp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApO3RvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2xlZnQ6MH1oZWFkZXIgLmhlYWRlci1uYXYgLm5hdi1saW5rOmZpcnN0LW9mLXR5cGUsaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluazpsYXN0LW9mLXR5cGUsLmhl''@;'; put 'put ''YWRlciAuaGVhZGVyLW5hdiAubmF2LWxpbms6Zmlyc3Qtb2YtdHlwZSwuaGVhZGVyIC5oZWFkZXItbmF2IC5uYXYtbGluazpsYXN0LW9mLXR5cGV7cG9zaXRpb246cmVsYXRpdmV9aGVhZGVyIC5zZXR0aW5ncyxoZWFkZXIgLmhlYWRlci1hY3Rpb25zLC5oZWFkZXIgLnNldHRpbmdzLC5oZWFk''@;'; put 'put ''ZXIgLmhlYWRlci1hY3Rpb25ze2ZsZXg6MSAwIGF1dG87ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpmbGV4LWVuZH1oZWFkZXIgLnNldHRpbmdzPjpub3QoLmRyb3Bkb3duKTpiZWZvcmUsaGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24+LmRyb3Bkb3duLXRvZ2dsZTpiZWZvcmUsaGVh''@;'; put 'put ''ZGVyIC5oZWFkZXItYWN0aW9ucz46bm90KC5kcm9wZG93bik6YmVmb3JlLGhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duPi5kcm9wZG93bi10b2dnbGU6YmVmb3JlLC5oZWFkZXIgLnNldHRpbmdzPjpub3QoLmRyb3Bkb3duKTpiZWZvcmUsLmhlYWRlciAuc2V0dGluZ3M+LmRyb3Bk''@;'; put 'put ''b3duPi5kcm9wZG93bi10b2dnbGU6YmVmb3JlLC5oZWFkZXIgLmhlYWRlci1hY3Rpb25zPjpub3QoLmRyb3Bkb3duKTpiZWZvcmUsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duPi5kcm9wZG93bi10b2dnbGU6YmVmb3Jle2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOmFi''@;'; put 'put ''c29sdXRlO2NvbnRlbnQ6IiI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLWRpdmlkZXItY29sb3IpO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTt3aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApO3RvcDp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTYpO2xlZnQ6MH1oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlLGhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duPi5kcm9wZG93bi10b2dnbGUsLmhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duPi5kcm9wZG93bi10b2dnbGUsLmhlYWRl''@;'; put 'put ''ciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duPi5kcm9wZG93bi10b2dnbGV7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7b3V0bGluZS1vZmZz''@;'; put 'put ''ZXQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpKTthbGlnbi1pdGVtczpjZW50ZXI7Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1mb250LWNvbG9yKX1oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmhvdmVyLGhlYWRlciAuaGVhZGVyLWFjdGlvbnM+''@;'; put 'put ''LmRyb3Bkb3duPi5kcm9wZG93bi10b2dnbGU6aG92ZXIsLmhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duPi5kcm9wZG93bi10b2dnbGU6aG92ZXIsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duPi5kcm9wZG93bi10b2dnbGU6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1m''@;'; put 'put ''b250LWNvbG9yLWhvdmVyKX1oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93bj4uZHJvcGRvd24tdG9nZ2xlOmRpc2FibGVkLGhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duPi5kcm9wZG93bi10b2dnbGU6ZGlzYWJsZWQsLmhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duPi5kcm9wZG93''@;'; put 'put ''bi10b2dnbGU6ZGlzYWJsZWQsLmhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duPi5kcm9wZG93bi10b2dnbGU6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfWhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2LWljb24gY2RzLWljb246bm90KFtz''@;'; put 'put ''aGFwZV49YW5nbGVdKSxoZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm5hdi1pY29uIGNsci1pY29uOm5vdChbc2hhcGVePWFuZ2xlXSksaGVhZGVyIC5oZWFkZXItYWN0aW9ucz4uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5uYXYtaWNvbiBjZHMtaWNvbjpu''@;'; put 'put ''b3QoW3NoYXBlXj1hbmdsZV0pLGhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2LWljb24gY2xyLWljb246bm90KFtzaGFwZV49YW5nbGVdKSwuaGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5uYXYtaWNvbiBjZHMt''@;'; put 'put ''aWNvbjpub3QoW3NoYXBlXj1hbmdsZV0pLC5oZWFkZXIgLnNldHRpbmdzPi5kcm9wZG93biAuZHJvcGRvd24tdG9nZ2xlLm5hdi1pY29uIGNsci1pY29uOm5vdChbc2hhcGVePWFuZ2xlXSksLmhlYWRlciAuaGVhZGVyLWFjdGlvbnM+LmRyb3Bkb3duIC5kcm9wZG93bi10b2dnbGUubmF2LWlj''@;'; put 'put ''b24gY2RzLWljb246bm90KFtzaGFwZV49YW5nbGVdKSwuaGVhZGVyIC5oZWFkZXItYWN0aW9ucz4uZHJvcGRvd24gLmRyb3Bkb3duLXRvZ2dsZS5uYXYtaWNvbiBjbHItaWNvbjpub3QoW3NoYXBlXj1hbmdsZV0pe2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtOSl9aGVhZGVyIC5zZXR0aW5ncz4uZHJvcGRvd24gLmRyb3Bkb3duLW1lbnUsaGVhZGVyIC5oZWFkZXItYWN0aW9ucz4uZHJvcGRvd24gLmRyb3Bkb3duLW1lbnUsLmhlYWRlciAuc2V0dGluZ3M+LmRyb3Bkb3duIC5kcm9wZG93bi1tZW51LC5oZWFkZXIgLmhl''@;'; put 'put ''YWRlci1hY3Rpb25zPi5kcm9wZG93biAuZHJvcGRvd24tbWVudXttYXJnaW4tdG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSk7bWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7bGVmdDphdXRvO3JpZ2h0OjB9aGVhZGVyIC5zZWFyY2gtYm94LGhlYWRl''@;'; put 'put ''ciAuc2VhcmNoLC5oZWFkZXIgLnNlYXJjaC1ib3gsLmhlYWRlciAuc2VhcmNoe2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleDowIDAgYXV0bzttYXgtd2lkdGg6Y2FsYygyODgqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO3BhZGRpbmc6MDtwb3NpdGlvbjpyZWxh''@;'; put 'put ''dGl2ZTtjb2xvcjp2YXIoLS1jbHItaGVhZGVyLWZvbnQtY29sb3IpfWhlYWRlciAuc2VhcmNoLWJveDpob3ZlcixoZWFkZXIgLnNlYXJjaDpob3ZlciwuaGVhZGVyIC5zZWFyY2gtYm94OmhvdmVyLC5oZWFkZXIgLnNlYXJjaDpob3Zlcntjb2xvcjp2YXIoLS1jbHItaGVhZGVyLWZvbnQtY29s''@;'; put 'put ''b3ItaG92ZXIpfWhlYWRlciAuc2VhcmNoLWJveDpkaXNhYmxlZCxoZWFkZXIgLnNlYXJjaDpkaXNhYmxlZCwuaGVhZGVyIC5zZWFyY2gtYm94OmRpc2FibGVkLC5oZWFkZXIgLnNlYXJjaDpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWR9aGVhZGVyIC5zZWFyY2gtYm94OmJlZm9yZSxoZWFk''@;'; put 'put ''ZXIgLnNlYXJjaDpiZWZvcmUsLmhlYWRlciAuc2VhcmNoLWJveDpiZWZvcmUsLmhlYWRlciAuc2VhcmNoOmJlZm9yZXtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci1kaXZpZGVyLWNvbG9y''@;'; put 'put ''KTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7d2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTt0b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtsZWZ0OmF1dG99aGVhZGVyIC5zZWFyY2gtYm94Pi5uYXYtaWNvbixoZWFkZXIgLnNlYXJj''@;'; put 'put ''aD4ubmF2LWljb24sLmhlYWRlciAuc2VhcmNoLWJveD4ubmF2LWljb24sLmhlYWRlciAuc2VhcmNoPi5uYXYtaWNvbnttYXJnaW46MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpIGNhbGMoMyooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05''@;'; put 'put ''KX1oZWFkZXIgLnNlYXJjaC1ib3ggbGFiZWwsaGVhZGVyIC5zZWFyY2ggbGFiZWwsLmhlYWRlciAuc2VhcmNoLWJveCBsYWJlbCwuaGVhZGVyIC5zZWFyY2ggbGFiZWx7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZy1sZWZ0OnZhcigtLWNsci1oZWFkZXItc2VhcmNoLWdhcCk7bWFyZ2lu''@;'; put 'put ''LWxlZnQ6dmFyKC0tY2xyLWhlYWRlci1zZWFyY2gtbWFyZ2luLWxlZnQpO21hcmdpbi1yaWdodDp2YXIoLS1jbHItaGVhZGVyLXNlYXJjaC1tYXJnaW4tcmlnaHQpO3RleHQtYWxpZ246Y2VudGVyfWhlYWRlciAuc2VhcmNoLWJveCBsYWJlbDpiZWZvcmUsaGVhZGVyIC5zZWFyY2ggbGFiZWw6''@;'; put 'put ''YmVmb3JlLC5oZWFkZXIgLnNlYXJjaC1ib3ggbGFiZWw6YmVmb3JlLC5oZWFkZXIgLnNlYXJjaCBsYWJlbDpiZWZvcmV7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29udGVudDoiIjtiYWNrZ3JvdW5kLWltYWdlOnVybChkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUyMHht''@;'; put 'put ''bG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMzYlMjAzNiUyMiUzRSUzQ2RlZnMlM0UlM0NzdHlsZSUzRS5jbHMtMSU3QmZpbGwlM0ElMjNmZmZmZmYlM0IlN0QlM0MlMkZzdHlsZSUzRSUzQyUyRmRlZnMlM0Ul''@;'; put 'put ''M0N0aXRsZSUzRVNlYXJjaCUzQyUyRnRpdGxlJTNFJTNDZyUyMGlkJTNEJTIyaWNvbnMlMjIlM0UlM0NwYXRoJTIwY2xhc3MlM0QlMjJjbHMtMSUyMiUyMGQlM0QlMjJNMTUlMkM0LjA1QTEwLjk1JTJDMTAuOTUlMkMwJTJDMSUyQzElMkM0LjA1JTJDMTUlMkMxMSUyQzExJTJDMCUyQzAlMkMx''@;'; put 'put ''JTJDMTUlMkM0LjA1TTE1JTJDMkExMyUyQzEzJTJDMCUyQzElMkMwJTJDMjglMkMxNSUyQzEzJTJDMTMlMkMwJTJDMCUyQzAlMkMxNSUyQzJaJTIyJTJGJTNFJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xzLTElMjIlMjAlMjBkJTNEJTIyTTMzLjcxJTJDMzIuMjlsLTcuMzctNy40Mi0xLjQyJTJD''@;'; put 'put ''MS40MSUyQzcuMzclMkM3LjQyYTElMkMxJTJDMCUyQzElMkMwJTJDMS40Mi0xLjQxWiUyMiUyRiUzRSUzQyUyRmclM0UlM0MlMkZzdmclM0UpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6Y29udGFpbjtjdXJzb3I6cG9pbnRlcjtoZWlnaHQ6dmFyKC0tY2xy''@;'; put 'put ''LWhlYWRlci1zZWFyY2gtaWNvbi1zaXplKTt3aWR0aDp2YXIoLS1jbHItaGVhZGVyLXNlYXJjaC1pY29uLXNpemUpO21pbi1oZWlnaHQ6dmFyKC0tY2xyLWhlYWRlci1zZWFyY2gtaWNvbi1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xyLWhlYWRlci1zZWFyY2gtaWNvbi1zaXplKTt2ZXJ0aWNh''@;'; put 'put ''bC1hbGlnbjptaWRkbGU7bWFyZ2luOjA7bWFyZ2luLXJpZ2h0OmNhbGMoLTEqKHZhcigtLWNsci1oZWFkZXItc2VhcmNoLWljb24tc2l6ZSkgKyB2YXIoLS1jbHItaGVhZGVyLXNlYXJjaC1nYXApKSl9aGVhZGVyIC5zZWFyY2gtYm94IGxhYmVsIGlucHV0LGhlYWRlciAuc2VhcmNoIGxhYmVs''@;'; put 'put ''IGlucHV0LC5oZWFkZXIgLnNlYXJjaC1ib3ggbGFiZWwgaW5wdXQsLmhlYWRlciAuc2VhcmNoIGxhYmVsIGlucHV0e2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luOmF1dG99aGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9dGV4dF0saGVhZGVyIC5zZWFy''@;'; put 'put ''Y2ggaW5wdXRbdHlwZT10ZXh0XSwuaGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9dGV4dF0sLmhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF17Ym9yZGVyOjA7YmFja2dyb3VuZDowIDA7Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1zZWFyY2gtaW5wdXQtZm9udC1jb2xvcik7Ym9y''@;'; put 'put ''ZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7cGFkZGluZzowIDAgMCBjYWxjKHZhcigtLWNsci1oZWFkZXItc2VhcmNoLWljb24tc2l6ZSkgKyAyKnZhcigtLWNsci1oZWFkZXItc2Vh''@;'; put 'put ''cmNoLWdhcCkpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtsaW5lLWhlaWdodDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpfWhlYWRlciAuc2VhcmNoLWJveCBpbnB1dFt0eXBlPXRleHRdOi13ZWJraXQtYXV0b2ZpbGwsaGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9''@;'; put 'put ''dGV4dF06LXdlYmtpdC1hdXRvZmlsbDpmb2N1cyxoZWFkZXIgLnNlYXJjaCBpbnB1dFt0eXBlPXRleHRdOi13ZWJraXQtYXV0b2ZpbGwsaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTotd2Via2l0LWF1dG9maWxsOmZvY3VzLC5oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10''@;'; put 'put ''ZXh0XTotd2Via2l0LWF1dG9maWxsLC5oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTotd2Via2l0LWF1dG9maWxsOmZvY3VzLC5oZWFkZXIgLnNlYXJjaCBpbnB1dFt0eXBlPXRleHRdOi13ZWJraXQtYXV0b2ZpbGwsLmhlYWRlciAuc2VhcmNoIGlucHV0W3R5cGU9dGV4dF06''@;'; put 'put ''LXdlYmtpdC1hdXRvZmlsbDpmb2N1c3std2Via2l0LXRyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAwcyA2MDAwMDBzLGNvbG9yIDBzIDYwMDAwMHM7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLWNvbG9yIDBzIDYwMDAwMHMsY29sb3IgMHMgNjAwMDAwc31oZWFkZXIgLnNlYXJjaC1ib3ggaW5w''@;'; put 'put ''dXRbdHlwZT10ZXh0XTo6cGxhY2Vob2xkZXIsaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTo6cGxhY2Vob2xkZXIsLmhlYWRlciAuc2VhcmNoLWJveCBpbnB1dFt0eXBlPXRleHRdOjpwbGFjZWhvbGRlciwuaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTo6cGxhY2Vob2xk''@;'; put 'put ''ZXJ7Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1zZWFyY2gtcGxhY2Vob2xkZXItdGV4dC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0''@;'; put 'put ''KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpfWhlYWRlciAuc2VhcmNoLWJveCBpbnB1dFt0eXBlPXRleHRdOmhvdmVyLGhlYWRlciAuc2VhcmNoIGlucHV0''@;'; put 'put ''W3R5cGU9dGV4dF06aG92ZXIsLmhlYWRlciAuc2VhcmNoLWJveCBpbnB1dFt0eXBlPXRleHRdOmhvdmVyLC5oZWFkZXIgLnNlYXJjaCBpbnB1dFt0eXBlPXRleHRdOmhvdmVye2JvcmRlcjp2YXIoLS1jbHItaGVhZGVyLXNlYXJjaC1ib3JkZXItaG92ZXIpfWhlYWRlciAuc2VhcmNoLWJveCBp''@;'; put 'put ''bnB1dFt0eXBlPXRleHRdOmZvY3VzLXZpc2libGUsaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTpmb2N1cy12aXNpYmxlLC5oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTpmb2N1cy12aXNpYmxlLC5oZWFkZXIgLnNlYXJjaCBpbnB1dFt0eXBlPXRleHRdOmZvY3Vz''@;'; put 'put ''LXZpc2libGV7b3V0bGluZTowO2JvcmRlcjp2YXIoLS1jbHItaGVhZGVyLXNlYXJjaC1ib3JkZXItYWN0aXZlKX1oZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTpmb2N1cyxoZWFkZXIgLnNlYXJjaC1ib3ggaW5wdXRbdHlwZT10ZXh0XTphY3RpdmUsaGVhZGVyIC5zZWFyY2gg''@;'; put 'put ''aW5wdXRbdHlwZT10ZXh0XTpmb2N1cyxoZWFkZXIgLnNlYXJjaCBpbnB1dFt0eXBlPXRleHRdOmFjdGl2ZSwuaGVhZGVyIC5zZWFyY2gtYm94IGlucHV0W3R5cGU9dGV4dF06Zm9jdXMsLmhlYWRlciAuc2VhcmNoLWJveCBpbnB1dFt0eXBlPXRleHRdOmFjdGl2ZSwuaGVhZGVyIC5zZWFyY2gg''@;'; put 'put ''aW5wdXRbdHlwZT10ZXh0XTpmb2N1cywuaGVhZGVyIC5zZWFyY2ggaW5wdXRbdHlwZT10ZXh0XTphY3RpdmV7YmFja2dyb3VuZDowIDB9aGVhZGVyIC5icmFuZGluZysuc2VhcmNoLGhlYWRlciAuYnJhbmRpbmcrLnNlYXJjaC1ib3gsLmhlYWRlciAuYnJhbmRpbmcrLnNlYXJjaCwuaGVhZGVy''@;'; put 'put ''IC5icmFuZGluZysuc2VhcmNoLWJveHtwb3NpdGlvbjpyZWxhdGl2ZX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjc2OHB4KXtoZWFkZXIgLnNlYXJjaC1ib3gsaGVhZGVyIC5zZWFyY2gsLmhlYWRlciAuc2VhcmNoLWJveCwuaGVhZGVyIC5zZWFyY2h7ZmxleDoxIDAgYXV0bzttYXgt''@;'; put 'put ''d2lkdGg6bm9uZTtkaXNwbGF5Om5vbmV9aGVhZGVyIC5zZWFyY2gtYm94IGxhYmVsLGhlYWRlciAuc2VhcmNoIGxhYmVsLC5oZWFkZXIgLnNlYXJjaC1ib3ggbGFiZWwsLmhlYWRlciAuc2VhcmNoIGxhYmVse3BhZGRpbmc6MH19YTpub3QoLmJ0biwubmF2LWxpbmssLmRyb3Bkb3duLWl0ZW0s''@;'; put 'put ''LmxhYmVsLC5hbGVydC1hY3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayl7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtcmVndWxhcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0zKTtsaW5lLWhl''@;'; put 'put ''aWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOmNhbGMoLS4xKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX1hOm5vdCguYnRuLC5uYXYtbGluaywuZHJvcGRvd24taXRlbSwubGFiZWwsLmFsZXJ0LWFjdGlvbiwuYmFkZ2UsLmNsci10cmVlbm9kZS1s''@;'; put 'put ''aW5rKTpsaW5re2NvbG9yOnZhcigtLWNsci1saW5rLWNvbG9yKX1hOm5vdCguYnRuLC5uYXYtbGluaywuZHJvcGRvd24taXRlbSwubGFiZWwsLmFsZXJ0LWFjdGlvbiwuYmFkZ2UsLmNsci10cmVlbm9kZS1saW5rKTpsaW5rOmhvdmVye2NvbG9yOnZhcigtLWNsci1saW5rLWhvdmVyLWNvbG9y''@;'; put 'put ''KX1hOm5vdCguYnRuLC5uYXYtbGluaywuZHJvcGRvd24taXRlbSwubGFiZWwsLmFsZXJ0LWFjdGlvbiwuYmFkZ2UsLmNsci10cmVlbm9kZS1saW5rKTpsaW5rOmhvdmVyIGNkcy1pY29uLGE6bm90KC5idG4sLm5hdi1saW5rLC5kcm9wZG93bi1pdGVtLC5sYWJlbCwuYWxlcnQtYWN0aW9uLC5i''@;'; put 'put ''YWRnZSwuY2xyLXRyZWVub2RlLWxpbmspOmxpbms6aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWxpbmstaG92ZXItY29sb3IpfWE6bm90KC5idG4sLm5hdi1saW5rLC5kcm9wZG93bi1pdGVtLC5sYWJlbCwuYWxlcnQtYWN0aW9uLC5iYWRnZSwuY2xyLXRyZWVub2RlLWxpbmspOmxp''@;'; put 'put ''bms6YWN0aXZle2NvbG9yOnZhcigtLWNsci1saW5rLWFjdGl2ZS1jb2xvcil9YTpub3QoLmJ0biwubmF2LWxpbmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVydC1hY3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayk6bGluazphY3RpdmUgY2RzLWljb24sYTpub3QoLmJ0biwubmF2''@;'; put 'put ''LWxpbmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVydC1hY3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayk6bGluazphY3RpdmUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWxpbmstYWN0aXZlLWNvbG9yKX1hOm5vdCguYnRuLC5uYXYtbGluaywuZHJvcGRvd24taXRlbSwubGFi''@;'; put 'put ''ZWwsLmFsZXJ0LWFjdGlvbiwuYmFkZ2UsLmNsci10cmVlbm9kZS1saW5rKTp2aXNpdGVke2NvbG9yOnZhcigtLWNsci1saW5rLXZpc2l0ZWQtY29sb3IpfWE6bm90KC5idG4sLm5hdi1saW5rLC5kcm9wZG93bi1pdGVtLC5sYWJlbCwuYWxlcnQtYWN0aW9uLC5iYWRnZSwuY2xyLXRyZWVub2Rl''@;'; put 'put ''LWxpbmspOnZpc2l0ZWQgY2RzLWljb24sYTpub3QoLmJ0biwubmF2LWxpbmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVydC1hY3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayk6dmlzaXRlZCBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItbGluay12aXNpdGVkLWNvbG9yKX1hOm5v''@;'; put 'put ''dCguYnRuLC5uYXYtbGluaywuZHJvcGRvd24taXRlbSwubGFiZWwsLmFsZXJ0LWFjdGlvbiwuYmFkZ2UsLmNsci10cmVlbm9kZS1saW5rKTp2aXNpdGVkOmhvdmVye2NvbG9yOnZhcigtLWNsci1saW5rLXZpc2l0ZWQtY29sb3ItaG92ZXIpfWE6bm90KC5idG4sLm5hdi1saW5rLC5kcm9wZG93''@;'; put 'put ''bi1pdGVtLC5sYWJlbCwuYWxlcnQtYWN0aW9uLC5iYWRnZSwuY2xyLXRyZWVub2RlLWxpbmspOnZpc2l0ZWQ6aG92ZXIgY2RzLWljb24sYTpub3QoLmJ0biwubmF2LWxpbmssLmRyb3Bkb3duLWl0ZW0sLmxhYmVsLC5hbGVydC1hY3Rpb24sLmJhZGdlLC5jbHItdHJlZW5vZGUtbGluayk6dmlz''@;'; put 'put ''aXRlZDpob3ZlciBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItbGluay12aXNpdGVkLWNvbG9yLWhvdmVyKX1hLmxpbmstbm9ybWFsOmxpbmt7Y29sb3I6dmFyKC0tY2xyLWxpbmstY29sb3IpfWEubGluay1ob3ZlcmVkOmxpbmt7Y29sb3I6dmFyKC0tY2xyLWxpbmstaG92ZXItY29sb3IpfWEu''@;'; put 'put ''bGluay1jbGlja2VkOmxpbmt7Y29sb3I6dmFyKC0tY2xyLWxpbmstYWN0aXZlLWNvbG9yKX1hLmxpbmstdmlzaXRlZDpsaW5re2NvbG9yOnZhcigtLWNsci1saW5rLXZpc2l0ZWQtY29sb3IpfWEubGluay12aXNpdGVkLWhvdmVyOmxpbmt7Y29sb3I6dmFyKC0tY2xyLWxpbmstdmlzaXRlZC1j''@;'; put 'put ''b2xvci1ob3Zlcil9Lm5hdntkaXNwbGF5OmZsZXg7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO2xpc3Qtc3R5bGUtdHlwZTpub25lO2FsaWduLWl0ZW1zOmNlbnRlcjttYXJnaW46MDt3aWR0aDoxMDAlO3doaXRlLXNwYWNlOm5vd3JhcDtib3gtc2hhZG93OjAgY2FsYygtMSp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApKSAwIHZhcigtLWNsci1uYXYtYm94LXNoYWRvdy1jb2xvcikgaW5zZXQ7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9Lm5hdiAubmF2LWl0ZW17ZGlzcGxheTppbmxpbmUtYmxvY2t9Lm5hdiAubmF2LWl0ZW0uYWN0''@;'; put 'put ''aXZlPi5uYXYtbGlua3tjb2xvcjp2YXIoLS1jbHItbmF2LWxpbmstYWN0aXZlLWNvbG9yKTtib3gtc2hhZG93OjAgY2FsYygtMSp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApKSAwIHZhcigtLWNsci1uYXYtYm94LXNoYWRvdy1jb2xvcikgaW5zZXR9Lm5hdiAubmF2''@;'; put 'put ''LWxpbmt7cG9zaXRpb246cmVsYXRpdmU7Y29sb3I6dmFyKC0tY2xyLW5hdi1saW5rLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQp''@;'; put 'put ''O2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTMpO2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5uYXYgLm5hdi1saW5rLmJ0bnt0ZXh0LXRyYW5zZm9ybTpub25lO21hcmdpbjowIDAgY2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKTtib3JkZXItcmFkaXVzOjB9Lm5hdiAubmF2LWxpbmsuZHJvcGRvd24tdG9n''@;'; put 'put ''Z2xle3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0ubmF2IC5uYXYtbGluay5kcm9wZG93bi10b2dnbGUgY2RzLWljb257Y29sb3I6dmFyKC0tY2xyLW5hdi1saW5rLWNvbG9yKX0ubmF2IC5uYXYtbGluazpob3ZlciwubmF2IC5uYXYtbGluazpmb2N1cywubmF2IC5uYXYtbGlu''@;'; put 'put ''azphY3RpdmV7Y29sb3I6aW5oZXJpdH0ubmF2IC5uYXYtbGluazphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbmF2LWFjdGl2ZS1iZy1jb2xvcil9Lm5hdiAubmF2LWxpbms6aG92ZXI6YmVmb3JlLC5uYXYgLm5hdi1saW5rLmFjdGl2ZTpiZWZvcmV7Y29udGVudDoiIjtwb3Np''@;'; put 'put ''dGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTtib3JkZXI6MDtib3JkZXItYm90dG9tOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTMwMCkgc29saWQgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhp''@;'; put 'put ''Z2hsaWdodCk7dHJhbnNpdGlvbjpib3JkZXItYm90dG9tIC4ycyBlYXNlLWlufS5uYXYgLm5hdi1saW5rOmhvdmVyLC5uYXYgLm5hdi1saW5rOmZvY3VzLC5uYXYgLm5hdi1saW5rOmFjdGl2ZSwubmF2IC5uYXYtbGluay5hY3RpdmV7dGV4dC1kZWNvcmF0aW9uOm5vbmV9Lm5hdiAubmF2LWxp''@;'; put 'put ''bmsuYWN0aXZle2NvbG9yOnZhcigtLWNsci1uYXYtbGluay1hY3RpdmUtY29sb3IpfS5uYXYgLm5hdi1saW5rLmFjdGl2ZTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1uYXYtc2VsZWN0ZWQtaG92ZXItYmFja2dyb3VuZC1jb2xvcil9Lm5hdiAubmF2LWxpbmsuYWN0aXZlOmFj''@;'; put 'put ''dGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1uYXYtc2VsZWN0ZWQtYWN0aXZlLWJhY2tncm91bmQtY29sb3IpfS5uYXYgLm5hdi1saW5rLm5hdi1pdGVte21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLXN1Ym5hdi1i''@;'; put 'put ''Zy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKX0uc3ViLW5hdiwuc3VibmF2e2Rpc3BsYXk6ZmxleDtib3gtc2hhZG93OjAgY2FsYygtMSp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApKSAwIHZhcigtLWNsci1uYXYtYm94''@;'; put 'put ''LXNoYWRvdy1jb2xvcikgaW5zZXQ7Ym94LXNoYWRvdzowIC0uMDVyZW0gMCB2YXIoLS1jbHItbmF2LWJveC1zaGFkb3ctY29sb3IsIGhzbCgxOTgsIDAlLCA4MCUpKSBpbnNldDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItc3VibmF2LWJnLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSl9LnN1Yi1uYXYgLm5hdiwuc3VibmF2IC5uYXZ7ZmxleDoxIDEgYXV0bztwYWRkaW5nLWxlZnQ6MS4ycmVtfS5zdWItbmF2IC5uYXYtaXRlbSwuc3ViLW5hdiAubmF2LWl0ZW0gYSwu''@;'; put 'put ''c3VibmF2IC5uYXYtaXRlbSwuc3VibmF2IC5uYXYtaXRlbSBhe3RleHQtZGVjb3JhdGlvbjpub25lfS5zdWItbmF2IGFzaWRlLC5zdWJuYXYgYXNpZGV7ZmxleDowIDAgYXV0bztkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEx''@;'; put 'put ''KTtwYWRkaW5nOjAgMS4ycmVtfS5zdWItbmF2IGFzaWRlPjpsYXN0LWNoaWxkLC5zdWJuYXYgYXNpZGU+Omxhc3QtY2hpbGR7bWFyZ2luLXJpZ2h0OjA7cGFkZGluZy1yaWdodDowfTpyb290IFtjZHMtdGhlbWVdey0tY2xyLXZlcnRpY2FsLW5hdi1kaXZpZGVyLWNvbG9yOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItdmVydGljYWwtbmF2LWljb24tYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xy''@;'; put 'put ''LXZlcnRpY2FsLW5hdi1pY29uLXJpZ2h0LW1hcmdpbjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpOy0tY2xyLXZlcnRpY2FsLW5hdi1jb2xsYXBzZWQtY2FyZXQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTstLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1jb2xvcjp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLXBhZGRpbmc6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTstLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1jaGlsZC1wYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS02KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApOy0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTstLWNsci12ZXJ0aWNhbC1uYXYtbWluLXdpZHRoOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtMTIpOy0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWFjdGl2ZS1mb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpOy0tY2xyLXZlcnRpY2FsLW5hdi1zZWxlY3RlZC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2Jq''@;'; put 'put ''ZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtc2VsZWN0ZWQpOy0tY2xyLXZlcnRpY2FsLW5hdi1zZWxlY3RlZC1ob3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtc2VsZWN0ZWQtaG92ZXIpOy0tY2xyLXZlcnRp''@;'; put 'put ''Y2FsLW5hdi1zZWxlY3RlZC1hY3RpdmUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkLWFjdGl2ZSk7LS1jbHItdmVydGljYWwtbmF2LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24t''@;'; put 'put ''YmFja2dyb3VuZC1zaGFkZSk7LS1jbHItdmVydGljYWwtbmF2LWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1ob3Zlcik7LS1jbHItdmVydGljYWwtbmF2LWFjdGl2ZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2Jq''@;'; put 'put ''ZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtYWN0aXZlKTstLWNsci12ZXJ0aWNhbC1uYXYtYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS10b3AtbGV2ZWwtZm9udC13ZWln''@;'; put 'put ''aHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKTstLWNsci12ZXJ0aWNhbC1uYXYtdG9nZ2xlLWljb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItdmVydGljYWwtbmF2LXRvZ2dsZS1pY29uLWhv''@;'; put 'put ''dmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLXZlcnRpY2FsLW5hdi10b2dnbGUtaWNvbi1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLXZlcnRpY2Fs''@;'; put 'put ''LW5hdi10b2dnbGUtaWNvbi1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkKTstLWNsci12ZXJ0aWNhbC1uYXYtdG9nZ2xlLWJ1dHRvbi1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApOy0tY2xyLXZlcnRpY2FsLW5h''@;'; put 'put ''di10cmlnZ2VyLWRpdmlkZXItYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci12ZXJ0aWNhbC1uYXYtdHJpZ2dlci1kaXZpZGVyLWJvcmRlci13aWR0aDp2YXIoLS1jbHItZ2xvYmFsLWJvcmRlcndpZHRoKTstLWNsci12ZXJ0aWNhbC1uYXYt''@;'; put 'put ''dHJpZ2dlci1jb2xsYXBzZWQtbWFyZ2luOm1peGlucy5iYXNlbGluZVB4KDMpOy0tY2xyLXZlcnRpY2FsLW5hdi1oZWFkZXItZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKTstLWNsci12ZXJ0aWNhbC1uYXYtaGVhZGVyLXBhZGRp''@;'; put 'put ''bmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jbHItdmVydGljYWwtbmF2e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47d2lkdGg6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21pbi13aWR0aDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtYmctY29sb3IpO3dpbGwtY2hhbmdlOndpZHRoO3RyYW5zaXRpb246d2lkdGggLjJzIGVhc2UtaW4tb3V0fS5jbHItdmVydGljYWwtbmF2IC5uYXYtZGl2aWRlcntib3JkZXIt''@;'; put 'put ''d2lkdGg6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi10cmlnZ2VyLWRpdmlkZXItYm9yZGVyLXdpZHRoKTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtdHJpZ2dlci1kaXZpZGVyLWJvcmRlci1jb2xvcil9LmNsci12ZXJ0aWNhbC1uYXYgLm5h''@;'; put 'put ''di1jb250ZW50e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleDoxIDEgYXV0bztnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtwYWRkaW5nLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpO292ZXJmbG93LXk6YXV0bztvdmVyZmxvdy14OmhpZGRlbn0uY2xy''@;'; put 'put ''LXZlcnRpY2FsLW5hdiAubmF2LWdyb3Vwe2Rpc3BsYXk6YmxvY2s7ZmxleDowIDAgYXV0bztoZWlnaHQ6YXV0bzttaW4taGVpZ2h0OnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1oZWlnaHQpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudHtkaXNwbGF5OmZsZXg7Y29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQuYWN0aXZle2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2Fs''@;'; put 'put ''LW5hdi1zZWxlY3RlZC1iZy1jb2xvcik7cG9zaXRpb246cmVsYXRpdmV9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50LmFjdGl2ZTpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTtib3JkZXI6MDti''@;'; put 'put ''b3JkZXItbGVmdDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0zMDApIHNvbGlkIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpO3RyYW5zaXRpb246Ym9yZGVyLWxlZnQgLjJzIGVhc2UtaW59LmNsci12ZXJ0aWNhbC1u''@;'; put 'put ''YXYgLm5hdi1ncm91cC1jb250ZW50LmFjdGl2ZSAubmF2LWljb257ZmlsbDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tYWN0aXZlLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQuYWN0aXZlOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZl''@;'; put 'put ''cnRpY2FsLW5hdi1zZWxlY3RlZC1ob3Zlci1iZy1jb2xvcil9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50LmFjdGl2ZTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWFjdGl2ZS1iZy1jb2xvcil9LmNsci12ZXJ0aWNh''@;'; put 'put ''bC1uYXYgLm5hdi1ncm91cC1jb250ZW50OmhvdmVye2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1ob3Zlci1iZy1jb2xvcik7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmNsci12ZXJ0''@;'; put 'put ''aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50OmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWFjdGl2ZS1iZy1jb2xvcil9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1j''@;'; put 'put ''b250ZW50IC5uYXYtbGlua3tmbGV4OjEgMSBhdXRvO3BhZGRpbmctbGVmdDowO21pbi13aWR0aDowfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWljb257bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2''@;'; put 'put ''LWdyb3VwLWNvbnRlbnQgLm5hdi10ZXh0e3BhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWljb24rLm5hdi10ZXh0e3BhZGRpbmctbGVmdDowfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAt''@;'; put 'put ''Y29udGVudCAubmF2LWxpbmsrLm5hdi1ncm91cC10ZXh0e2Rpc3BsYXk6bm9uZX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQ+Lm5hdi1saW5rLmFjdGl2ZSwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNvbnRlbnQ+Lm5hdi1saW5rOmFjdGl2ZXtmb250LXdlaWdo''@;'; put 'put ''dDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tYWN0aXZlLWZvbnQtd2VpZ2h0KX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLWNoaWxkcmVue292ZXJmbG93LXk6aGlkZGVufS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlciwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3Vw''@;'; put 'put ''LXRyaWdnZXJ7ZmxleDowIDAgdmFyKC0tY2xyLXZlcnRpY2FsLW5hdi10b2dnbGUtYnV0dG9uLXNpemUpO2JvcmRlcjowO2hlaWdodDp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRvZ2dsZS1idXR0b24tc2l6ZSk7cGFkZGluZzowO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Y3Vyc29y''@;'; put 'put ''OnBvaW50ZXI7b3V0bGluZS1vZmZzZXQ6Y2FsYygtMSpjYWxjKDUqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRyaWdnZXIgY2RzLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXSwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRyaWdnZXIgY2xy''@;'; put 'put ''LWljb25bc2hhcGU9YW5nbGUtZG91YmxlXSwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXIgY2RzLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXSwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXIgY2xyLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXXtjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItdmVydGljYWwtbmF2LXRvZ2dsZS1pY29uLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRyaWdnZXIgY2RzLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTpob3ZlciwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRyaWdnZXIgY2xyLWljb25bc2hhcGU9YW5nbGUtZG91Ymxl''@;'; put 'put ''XTpob3ZlciwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXIgY2RzLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTpob3ZlciwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXIgY2xyLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTpob3Zlcntjb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItdmVydGljYWwtbmF2LXRvZ2dsZS1pY29uLWhvdmVyLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LXRyaWdnZXIgY2RzLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTphY3RpdmUsLmNsci12ZXJ0aWNhbC1uYXYgLm5hdi10cmlnZ2VyIGNsci1pY29uW3NoYXBlPWFuZ2xlLWRvdWJs''@;'; put 'put ''ZV06YWN0aXZlLC5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlciBjZHMtaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdOmFjdGl2ZSwuY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXIgY2xyLWljb25bc2hhcGU9YW5nbGUtZG91YmxlXTphY3RpdmV7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLXZlcnRpY2FsLW5hdi10b2dnbGUtaWNvbi1hY3RpdmUtY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlcjpkaXNhYmxlZCBjZHMtaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlcjpkaXNhYmxlZCBjbHItaWNvbltz''@;'; put 'put ''aGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlci5kaXNhYmxlZCBjZHMtaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlci5kaXNhYmxlZCBjbHItaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVy''@;'; put 'put ''dGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlcjpkaXNhYmxlZCBjZHMtaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlcjpkaXNhYmxlZCBjbHItaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYt''@;'; put 'put ''Z3JvdXAtdHJpZ2dlci5kaXNhYmxlZCBjZHMtaWNvbltzaGFwZT1hbmdsZS1kb3VibGVdLC5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlci5kaXNhYmxlZCBjbHItaWNvbltzaGFwZT1hbmdsZS1kb3VibGVde2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtdG9nZ2xlLWlj''@;'; put 'put ''b24tZGlzYWJsZWQtY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtoZWlnaHQ6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWhlaWdodCk7cGFkZGluZzp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWFyZ2luLWJvdHRvbTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlciBjZHMtaWNvbnttYXJnaW4tcmlnaHQ6MDtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1z''@;'; put 'put ''cGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlci5vbi1jb2xsYXBzZXtkaXNwbGF5OmJsb2NrfS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlci5vbi1jb2xsYXBzZSBjZHMtaWNvbnttYXJnaW46MH0uY2xyLXZl''@;'; put 'put ''cnRpY2FsLW5hdiAubmF2LWdyb3VwLXRyaWdnZXJ7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG87Y29sb3I6aW5oZXJpdDtvdmVyZmxvdzpoaWRkZW47dGV4dC1hbGlnbjpsZWZ0fS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtdHJpZ2dlciAubmF2LWdyb3VwLXRyaWdnZXItaWNvbntm''@;'; put 'put ''bGV4LXNocmluazowO3dpZHRoOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1zaXplKTttYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTthbGlnbi1zZWxmOmNlbnRlcjt0cmFuc2l0aW9uOmFsbCAuMnMgZWFzZS1pbi1vdXR9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi10cmlnZ2Vy''@;'; put 'put ''LWljb257dHJhbnNpdGlvbjphbGwgLjJzIGVhc2UtaW4tb3V0fS5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlcisubmF2LWNvbnRlbnR7Ym9yZGVyLXRvcC13aWR0aDp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRyaWdnZXItZGl2aWRlci1ib3JkZXItd2lkdGgpO2JvcmRlci10b3Atc3R5''@;'; put 'put ''bGU6c29saWQ7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXRyaWdnZXItZGl2aWRlci1ib3JkZXItY29sb3IpO3BhZGRpbmctdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC10ZXh0LC5jbHItdmVydGljYWwt''@;'; put 'put ''bmF2IC5uYXYtbGlua3toZWlnaHQ6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWhlaWdodCk7cGFkZGluZzp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tcGFkZGluZyk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdo''@;'; put 'put ''dDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpO2Rpc3BsYXk6ZmxleDthbGln''@;'; put 'put ''bi1pdGVtczpjZW50ZXI7b3V0bGluZS1vZmZzZXQ6Y2FsYygtMSpjYWxjKDUqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWdyb3VwLXRleHQsLmNsci12ZXJ0aWNhbC1uYXYgLm5hdi10ZXh0e2ZsZXg6MSAxIGF1dG87d2hpdGUtc3BhY2U6''@;'; put 'put ''bm93cmFwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5jbHItdmVydGljYWwtbmF2IC5uYXYtbGlua3tkaXNwbGF5OmZsZXg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWNvbG9yKX0uY2xyLXZlcnRpY2FsLW5h''@;'; put 'put ''diAubmF2LWxpbmsuYWN0aXZle2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1zZWxlY3RlZC1iZy1jb2xvcik7cG9zaXRpb246cmVsYXRpdmV9LmNsci12ZXJ0aWNhbC1uYXYgLm5h''@;'; put 'put ''di1saW5rLmFjdGl2ZTpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTtib3JkZXI6MDtib3JkZXItbGVmdDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0zMDApIHNvbGlkIHZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQpO3RyYW5zaXRpb246Ym9yZGVyLWxlZnQgLjJzIGVhc2UtaW59LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1saW5rLmFjdGl2ZSAubmF2LWljb257ZmlsbDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tYWN0aXZlLWNv''@;'; put 'put ''bG9yKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbmsuYWN0aXZlOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1zZWxlY3RlZC1ob3Zlci1iZy1jb2xvcil9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1saW5rLmFjdGl2ZTphY3RpdmV7YmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWFjdGl2ZS1iZy1jb2xvcil9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1saW5rOmhvdmVye2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZl''@;'; put 'put ''cnRpY2FsLW5hdi1ob3Zlci1iZy1jb2xvcik7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1saW5rOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2''@;'; put 'put ''LWFjdGl2ZS1iZy1jb2xvcil9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1oZWFkZXJ7cGFkZGluZzp2YXIoLS1jbHItdmVydGljYWwtbmF2LWhlYWRlci1wYWRkaW5nKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC1zaXplLTIpO2ZvbnQtd2VpZ2h0OnZhcigtLWNs''@;'; put 'put ''ci12ZXJ0aWNhbC1uYXYtaGVhZGVyLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDoxLjMzMzMzM2VtO2xldHRlci1zcGFjaW5nOi0uMDA4MzMzMzNlbX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWljb257ZmxleDowIDAgdmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pY29uLXNpemUpO2FsaWduLXNl''@;'; put 'put ''bGY6Y2VudGVyO2hlaWdodDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pY29uLXNpemUpO21pbi1oZWlnaHQ6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1pY29uLXNpemUpO21pbi13aWR0aDp2YXIoLS1jbHItdmVydGljYWwt''@;'; put 'put ''bmF2LWljb24tc2l6ZSk7bWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7dmVydGljYWwtYWxpZ246bWlkZGxlfS5jbHItdmVydGljYWwtbmF2IGNsci12ZXJ0aWNhbC1uYXYtZ3JvdXAtY2hpbGRyZW57ZGlzcGxheTpibG9ja30uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWJ0''@;'; put 'put ''bntmbGV4OjEgMSBhdXRvO3BhZGRpbmc6MDttYXJnaW46MDtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MDtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lLW9mZnNldDpjYWxjKC0xKmNhbGMoNSooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkpfS5jbHItdmVydGljYWwtbmF2Pi5uYXYtbGluaywu''@;'; put 'put ''Y2xyLXZlcnRpY2FsLW5hdiAubmF2LWNvbnRlbnQ+Lm5hdi1saW5re2ZsZXg6MCAwIHZhcigtLWNsci12ZXJ0aWNhbC1uYXYtdG9nZ2xlLWJ1dHRvbi1zaXplKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbmsrLm5hdi1ncm91cC10cmlnZ2Vye2ZsZXg6MCAwIHZhcigtLWNsci12ZXJ0aWNh''@;'; put 'put ''bC1uYXYtdG9nZ2xlLWJ1dHRvbi1zaXplKX0uY2xyLXZlcnRpY2FsLW5hdiAubmF2LWxpbmsrLm5hdi1ncm91cC10cmlnZ2VyIC5uYXYtZ3JvdXAtdGV4dHtkaXNwbGF5Om5vbmV9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1pY29uKy5uYXYtZ3JvdXAtdGV4dHtwYWRkaW5nLWxlZnQ6MH0uY2xy''@;'; put 'put ''LXZlcnRpY2FsLW5hdi5oYXMtbmF2LWdyb3VwcyAubmF2LWdyb3VwIC5uYXYtZ3JvdXAtdGV4dCwuY2xyLXZlcnRpY2FsLW5hdi5oYXMtbmF2LWdyb3VwcyAubmF2LWdyb3VwIC5uYXYtZ3JvdXAtdHJpZ2dlcntmb250LXdlaWdodDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tdG9wLWxl''@;'; put 'put ''dmVsLWZvbnQtd2VpZ2h0KX0uY2xyLXZlcnRpY2FsLW5hdi5oYXMtbmF2LWdyb3VwcyAubmF2LWdyb3VwLWNoaWxkcmVuIC5uYXYtbGluaywuY2xyLXZlcnRpY2FsLW5hdi5oYXMtaWNvbnMgLm5hdi1ncm91cC1jaGlsZHJlbiAubmF2LWxpbmt7cGFkZGluZzp2YXIoLS1jbHItdmVydGljYWwt''@;'; put 'put ''bmF2LWl0ZW0tY2hpbGQtcGFkZGluZyl9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC5hY3RpdmU6bm90KC5pcy1leHBhbmRlZCkgLm5hdi1ncm91cC1jb250ZW50e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1zZWxlY3RlZC1iZy1jb2xvcil9LmNsci12ZXJ0''@;'; put 'put ''aWNhbC1uYXYgLm5hdi1ncm91cC5hY3RpdmU6bm90KC5pcy1leHBhbmRlZCkgLm5hdi1ncm91cC1jb250ZW50IC5uYXYtaWNvbntmaWxsOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1hY3RpdmUtY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWxp''@;'; put 'put ''bmsuYWN0aXZlfi5uYXYtZ3JvdXAtdHJpZ2dlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtYmctY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWxpbms6aG92ZXJ+Lm5hdi1ncm91cC10cmlnZ2Vye2JhY2tn''@;'; put 'put ''cm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1ob3Zlci1iZy1jb2xvcil9LmNsci12ZXJ0aWNhbC1uYXYgLm5hdi1ncm91cC1jb250ZW50IC5uYXYtbGluazphY3RpdmV+Lm5hdi1ncm91cC10cmlnZ2Vye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1h''@;'; put 'put ''Y3RpdmUtYmctY29sb3IpfS5jbHItdmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWxpbmsuYWN0aXZlOmhvdmVyfi5uYXYtZ3JvdXAtdHJpZ2dlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtaG92ZXItYmctY29sb3IpfS5jbHIt''@;'; put 'put ''dmVydGljYWwtbmF2IC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWxpbmsuYWN0aXZlOmFjdGl2ZX4ubmF2LWdyb3VwLXRyaWdnZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWFjdGl2ZS1iZy1jb2xvcil9LmNsci12ZXJ0aWNhbC1uYXY6bm90KC5p''@;'; put 'put ''cy1jb2xsYXBzZWQpIC5uYXYtbGluaysubmF2LWdyb3VwLXRyaWdnZXJ7anVzdGlmeS1jb250ZW50OmNlbnRlcn0ubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2''@;'; put 'put ''LmlzLWNvbGxhcHNlZHt3aWR0aDp2YXIoLS1jbHItdmVydGljYWwtbmF2LW1pbi13aWR0aCk7bWluLXdpZHRoOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtbWluLXdpZHRoKTttYXgtd2lkdGg6Y2FsYyh2YXIoLS1jbHItdmVydGljYWwtbmF2LW1pbi13aWR0aCkgKyBjYWxjKDE0KigxcmVtL3Zh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtYmFzZSkpKSk7Y3Vyc29yOnBvaW50ZXJ9Lm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2FsLW5hdi5pcy1jb2xsYXBzZWQgLm5hdi1pY29ue21h''@;'; put 'put ''cmdpbjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51''@;'; put 'put ''XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWxpbmt7ZmxleDowIDAgdmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1taW4td2lkdGgpfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNz''@;'; put 'put ''Kj1vcGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtZ3JvdXAtY29udGVudCAubmF2LWxpbmt+Lm5hdi1ncm91cC10cmlnZ2Vye2ZsZXg6MCAwIGNhbGModmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1jb2xsYXBzZWQtY2FyZXQtc2l6ZSkgKyB2''@;'; put 'put ''YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tcmlnaHQtbWFyZ2luKSk7dHJhbnNmb3JtOnRyYW5zbGF0ZShjYWxjKC0xKnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1zaXplKSkpO3BvaW50ZXItZXZlbnRzOm5vbmV9Lm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZs''@;'; put 'put ''b3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2FsLW5hdi5pcy1jb2xsYXBzZWQgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51''@;'; put 'put ''XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtZ3JvdXAtdHJpZ2dlcntwYWRkaW5nOjB9Lm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2FsLW5hdi5p''@;'; put 'put ''cy1jb2xsYXBzZWQgLm5hdi1ncm91cC10cmlnZ2Vye3BhZGRpbmctbGVmdDowfS5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYt''@;'; put 'put ''Z3JvdXAtdHJpZ2dlciBjbHItaWNvbi5uYXYtZ3JvdXAtdHJpZ2dlci1pY29ue2hlaWdodDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0taGVpZ2h0KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21hcmdpbi1sZWZ0OmNhbGMoMyooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJh''@;'; put 'put ''c2UpKSk7bWFyZ2luLXJpZ2h0OjB9Lm1haW4tY29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2FsLW5hdi5pcy1jb2xsYXBzZWQgLm5hdi1ncm91cC10cmlnZ2VyIGNkcy1pY29uLm5h''@;'; put 'put ''di1ncm91cC10cmlnZ2VyLWljb257d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttYXJnaW46MH0ubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2Lmlz''@;'; put 'put ''LWNvbGxhcHNlZCAubmF2LWdyb3VwLC5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVuLWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkIC5uYXYtbGlua3tkaXNwbGF5Om5vbmV9Lm1haW4t''@;'; put 'put ''Y29udGFpbmVyOm5vdChbY2xhc3MqPW9wZW4tb3ZlcmZsb3ctbWVudV0pOm5vdChbY2xhc3MqPW9wZW4taGFtYnVyZ2VyLW1lbnVdKSAuY2xyLXZlcnRpY2FsLW5hdi5pcy1jb2xsYXBzZWQuaGFzLWljb25zIC5uYXYtZ3JvdXB7ZGlzcGxheTpibG9ja30ubWFpbi1jb250YWluZXI6bm90KFtj''@;'; put 'put ''bGFzcyo9b3Blbi1vdmVyZmxvdy1tZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZC5oYXMtaWNvbnMgLm5hdi1saW5re2Rpc3BsYXk6ZmxleH0ubWFpbi1jb250YWluZXI6bm90KFtjbGFzcyo9b3Blbi1vdmVyZmxv''@;'; put 'put ''dy1tZW51XSk6bm90KFtjbGFzcyo9b3Blbi1oYW1idXJnZXItbWVudV0pIC5jbHItdmVydGljYWwtbmF2LmlzLWNvbGxhcHNlZC5oYXMtaWNvbnMgLm5hdi1ncm91cC10ZXh0LC5tYWluLWNvbnRhaW5lcjpub3QoW2NsYXNzKj1vcGVuLW92ZXJmbG93LW1lbnVdKTpub3QoW2NsYXNzKj1vcGVu''@;'; put 'put ''LWhhbWJ1cmdlci1tZW51XSkgLmNsci12ZXJ0aWNhbC1uYXYuaXMtY29sbGFwc2VkLmhhcy1pY29ucyAubmF2LXRleHR7cG9zaXRpb246YWJzb2x1dGU7Y2xpcDpyZWN0KDFweCwxcHgsMXB4LDFweCk7Y2xpcC1wYXRoOmluc2V0KDUwJSk7cGFkZGluZzowO2JvcmRlcjowO2hlaWdodDoxcHg7''@;'; put 'put ''d2lkdGg6MXB4O292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7dG9wOjA7bGVmdDowfS5jbHItdmVydGljYWwtbmF2Lm5hdi10cmlnZ2VyLS1ib3R0b20gLm5hdi10cmlnZ2Vye29yZGVyOjI7bWFyZ2luLXRvcDowfS5jbHItdmVydGljYWwtbmF2Lm5hdi10cmlnZ2VyLS1ib3R0''@;'; put 'put ''b20gLm5hdi10cmlnZ2VyKy5uYXYtY29udGVudHtib3JkZXItYm90dG9tLXdpZHRoOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtdHJpZ2dlci1kaXZpZGVyLWJvcmRlci13aWR0aCk7Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZDtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNh''@;'; put 'put ''bC1uYXYtdHJpZ2dlci1kaXZpZGVyLWJvcmRlci1jb2xvcik7Ym9yZGVyLXRvcDpub25lO3BhZGRpbmctdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCl9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItc2xpZGluZy1wYW5lbC10ZXh0LWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItZ3Jh''@;'; put 'put ''eS03MDApOy0tY2xyLXJlc3BvbnNpdmUtbmF2LXRyaWdnZXItYmctY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ncmF5LTApOy0tY2xyLXJlc3BvbnNpdmUtbmF2LXRyaWdnZXItYm9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNs''@;'; put 'put ''ci1yZXNwb25zaXZlLW5hdi1vdmVyZmxvdy1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLXJlc3BvbnNpdmUtbmF2LWhhbWJ1cmdlci1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0x''@;'; put 'put ''MDApfS5jbHItbmF2LWNsb3Nle21hcmdpbjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2JhY2tncm91bmQ6MCAwO2JvcmRlcjowO2NvbG9yOnZhcigtLWNvbG9yKTstLWNvbG9yOnZhcigtLWNkcy1nbG9iYWwtY29sb3Itd2hpdGUpfS5jbHItbmF2LWNsb3NlOmhvdmVyLC5jbHItbmF2LWNs''@;'; put 'put ''b3NlOmZvY3Vzey0tY29sb3I6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci13YXJtLWdyYXktMTAwKX0uaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyLC5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlcntkaXNwbGF5Om5vbmV9LmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcj5zcGFuLC5oZWFkZXItaGFtYnVy''@;'; put 'put ''Z2VyLXRyaWdnZXI+c3BhbjpiZWZvcmUsLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcj5zcGFuOmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7YmFja2dyb3VuZDp2YXIoLS1j''@;'; put 'put ''bHItcmVzcG9uc2l2ZS1uYXYtdHJpZ2dlci1iZy1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKX0uaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyPnNwYW57cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246bWlkZGxlfS5o''@;'; put 'put ''ZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI+c3BhbjpiZWZvcmUsLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcj5zcGFuOmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowfS5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI+c3BhbjpiZWZvcmV7dG9wOmNhbGMoLTEqdmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS01KSl9LmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcj5zcGFuOmFmdGVye2JvdHRvbTpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpfS5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIuYWN0aXZlPnNwYW57YmFja2dyb3VuZDowIDB9LmhlYWRlci1oYW1i''@;'; put 'put ''dXJnZXItdHJpZ2dlci5hY3RpdmU+c3BhbjpiZWZvcmUsLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlci5hY3RpdmU+c3BhbjphZnRlcntsZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7dHJhbnNmb3JtLW9yaWdpbjo5JTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNnMgZWFzZX0uaGVhZGVy''@;'; put 'put ''LWhhbWJ1cmdlci10cmlnZ2VyLmFjdGl2ZT5zcGFuOmJlZm9yZXt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVnKX0uaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyLmFjdGl2ZT5zcGFuOmFmdGVye3RyYW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX0uaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI+c3BhbiwuaGVh''@;'; put 'put ''ZGVyLW92ZXJmbG93LXRyaWdnZXI+c3BhbjpiZWZvcmUsLmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyPnNwYW46YWZ0ZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTtiYWNrZ3JvdW5k''@;'; put 'put ''OnZhcigtLWNsci1yZXNwb25zaXZlLW5hdi10cmlnZ2VyLWJnLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyPnNwYW57cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246bWlkZGxlfS5oZWFkZXItb3Zl''@;'; put 'put ''cmZsb3ctdHJpZ2dlcj5zcGFuOmJlZm9yZSwuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI+c3BhbjphZnRlcntjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MH0uaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI+c3BhbjpiZWZvcmV7dG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1z''@;'; put 'put ''cGFjZS01KSl9LmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyPnNwYW46YWZ0ZXJ7Ym90dG9tOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9LmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyLmFjdGl2ZT5zcGFue2JhY2tncm91bmQ6MCAwfS5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlci5h''@;'; put 'put ''Y3RpdmU+c3BhbjpiZWZvcmUsLmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyLmFjdGl2ZT5zcGFuOmFmdGVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bGVmdDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCkp''@;'; put 'put ''O3RyYW5zZm9ybS1vcmlnaW46LTMlO3RyYW5zaXRpb246dHJhbnNmb3JtIC42cyBlYXNlfS5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlci5hY3RpdmU+c3BhbjpiZWZvcmV7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9LmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyLmFjdGl2ZT5zcGFuOmFmdGVye3Ry''@;'; put 'put ''YW5zZm9ybTpyb3RhdGUoLTQ1ZGVnKX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjk5MnB4KXsubWFpbi1jb250YWluZXIgLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlciwubWFpbi1jb250YWluZXIgLmhlYWRlci1vdmVyZmxvdy10cmlnZ2Vye2Rpc3BsYXk6aW5saW5lLWJsb2NrO2Jv''@;'; put 'put ''cmRlcjowO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2hlaWdodDp2YXIoLS1jbHItaGVhZGVyLWhlaWdodCk7d2lkdGg6dmFyKC0tY2xyLWhlYWRlci1oZWlnaHQpO3BhZGRpbmc6MCAwIHZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtMykgMDt0ZXh0LWFsaWduOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXA7Y29sb3I6dmFyKC0tY2xyLWhlYWRlci1mb250LWNvbG9yKX0ubWFpbi1jb250YWluZXIgLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcjpmb2N1cywubWFpbi1jb250YWluZXIgLmhlYWRlci1vdmVyZmxvdy10''@;'; put 'put ''cmlnZ2VyOmZvY3Vze291dGxpbmUtb2Zmc2V0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSl9Lm1haW4tY29udGFpbmVyIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXI6aG92ZXIsLm1haW4tY29udGFpbmVyIC5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlcjpob3Zlcntjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItaGVhZGVyLWZvbnQtY29sb3ItaG92ZXIpfS5tYWluLWNvbnRhaW5lciAuaGVhZGVyLWhhbWJ1cmdlci10cmlnZ2VyOmRpc2FibGVkLC5tYWluLWNvbnRhaW5lciAuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXI6ZGlzYWJsZWR7Y3Vyc29yOm5vdC1hbGxvd2VkfS5tYWluLWNvbnRh''@;'; put 'put ''aW5lciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyIC5jbHItdmVydGljYWwtbmF2LmNsci1uYXYtbGV2ZWwtMXtk''@;'; put 'put ''aXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO3Bvc2l0aW9uOmZpeGVkO2luc2V0OjAgYXV0byAwIDA7YmFja2dyb3VuZDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWJnLWNvbG9yKTt6LWluZGV4OjEwMzk7aGVpZ2h0OjEwMHZoO3RyYW5zZm9ybTp0cmFuc2xhdGUoY2FsYygtMSpj''@;'; put 'put ''YWxjKDM2MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkpKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgZWFzZX0ubWFpbi1jb250YWluZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250''@;'; put 'put ''YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lciAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtwb3NpdGlvbjpmaXhlZDtpbnNldDowIDAgMCBhdXRvO2JhY2tncm91bmQ6dmFyKC0t''@;'; put 'put ''Y2xyLXZlcnRpY2FsLW5hdi1iZy1jb2xvcik7ei1pbmRleDoxMDM5O2hlaWdodDoxMDB2aDt0cmFuc2Zvcm06dHJhbnNsYXRlKGNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKSk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjNzIGVhc2V9Lm1haW4tY29udGFpbmVyIC5zdWJu''@;'; put 'put ''YXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIGFzaWRlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0xIGFzaWRlLC5t''@;'; put 'put ''YWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiBhc2lkZSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1u''@;'; put 'put ''YXYtbGV2ZWwtMiBhc2lkZXtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6c3RyZXRjaH0ubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEgYXNpZGUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSBhc2lkZSwubWFpbi1jb250YWlu''@;'; put 'put ''ZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIgYXNpZGUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiBhc2lkZXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO3dpZHRoOjEwMCV9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYsLm1haW4t''@;'; put 'put ''Y29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdntwYWRkaW5nLWxlZnQ6MDtnYXA6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS01KX0ubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWl0ZW0sLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtaXRlbSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIgLm5h''@;'; put 'put ''diAubmF2LWl0ZW0sLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtaXRlbXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7bWFyZ2luLXJpZ2h0OjB9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5h''@;'; put 'put ''di1saW5rLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbmssLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAu''@;'; put 'put ''bmF2LWxpbmt7cGFkZGluZzp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tcGFkZGluZyk7d2lkdGg6MTAwJTttYXgtd2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpcztjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY29sb3IpfS5tYWlu''@;'; put 'put ''LWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYg''@;'; put 'put ''Lm5hdi1saW5rLmFjdGl2ZSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tYWN0aXZlLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1u''@;'; put 'put ''YXYtc2VsZWN0ZWQtYmctY29sb3IpO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmU6YmVmb3JlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbmsu''@;'; put 'put ''YWN0aXZlOmJlZm9yZSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbmsuYWN0aXZlOmJlZm9yZSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZTpiZWZvcmV7Y29udGVudDoiIjtw''@;'; put 'put ''b3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtib3R0b206MDtsZWZ0OjA7d2lkdGg6MTAwJTtib3JkZXI6MDtib3JkZXItbGVmdDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0zMDApIHNvbGlkIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1o''@;'; put 'put ''aWdobGlnaHQpO3RyYW5zaXRpb246Ym9yZGVyLWxlZnQgLjJzIGVhc2UtaW59Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rLmFjdGl2ZSAubmF2LWljb24sLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5u''@;'; put 'put ''YXYtbGluay5hY3RpdmUgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluay5hY3RpdmUgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbmsuYWN0aXZlIC5uYXYt''@;'; put 'put ''aWNvbntmaWxsOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaWNvbi1hY3RpdmUtY29sb3IpfS5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmU6aG92ZXIsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2''@;'; put 'put ''IC5uYXYtbGluay5hY3RpdmU6aG92ZXIsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZTpob3ZlciwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZTpob3ZlcntiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtaG92ZXItYmctY29sb3IpfS5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmU6YWN0aXZlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxl''@;'; put 'put ''dmVsLTEgLm5hdiAubmF2LWxpbmsuYWN0aXZlOmFjdGl2ZSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbmsuYWN0aXZlOmFjdGl2ZSwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2''@;'; put 'put ''ZTphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LXNlbGVjdGVkLWFjdGl2ZS1iZy1jb2xvcil9Lm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHIt''@;'; put 'put ''bmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbms6aG92ZXIsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbms6aG92ZXJ7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLXZlcnRpY2FsLW5hdi1pdGVtLWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWhvdmVyLWJnLWNvbG9yKTt0ZXh0LWRlY29yYXRpb246bm9uZX0ubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2''@;'; put 'put ''LWxpbms6YWN0aXZlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbms6YWN0aXZlLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluazphY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNs''@;'; put 'put ''ci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluazphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1hY3RpdmUtYmctY29sb3IpfS5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1u''@;'; put 'put ''YXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluazpob3ZlciwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbmsuYWN0aXZlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdiAubmF2LWxpbms6aG92ZXIsLm1haW4tY29u''@;'; put 'put ''dGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYt''@;'; put 'put ''bGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluazpob3ZlciwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYgLm5hdi1saW5rLmFjdGl2ZXtib3gtc2hhZG93Om5vbmV9Lm1haW4tY29udGFp''@;'; put 'put ''bmVyIC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYgLm5hdi1saW5rOmhvdmVyOm5vdCguYWN0aXZlKTpiZWZvcmUsLm1haW4tY29udGFpbmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2IC5uYXYtbGluazpob3Zlcjpub3QoLmFjdGl2ZSk6YmVmb3JlLC5tYWluLWNvbnRhaW5l''@;'; put 'put ''ciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2IC5uYXYtbGluazpob3Zlcjpub3QoLmFjdGl2ZSk6YmVmb3JlLC5tYWluLWNvbnRhaW5lciAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdiAubmF2LWxpbms6aG92ZXI6bm90KC5hY3RpdmUpOmJlZm9yZXtjb250ZW50Om5vbmV9Lm1h''@;'; put 'put ''aW4tY29udGFpbmVyIC5jbHItdmVydGljYWwtbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0ye2JvcmRlci1yaWdodDpub25lfS5tYWluLWNvbnRhaW5lciAuaGVhZGVyLW92ZXJmbG93LXRyaWdnZXJ7cG9zaXRpb246''@;'; put 'put ''cmVsYXRpdmV9Lm1haW4tY29udGFpbmVyIC5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlcjphZnRlcntkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtjb250ZW50OiIiO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWhlYWRlci1kaXZpZGVyLWNvbG9yKTtoZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7d2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTt0b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtsZWZ0OjB9Lm1haW4tY29udGFpbmVyIC5oZWFkZXIgLmJyYW5kaW5ne21heC13aWR0aDpjYWxjKDI0MCooMXJl''@;'; put 'put ''bS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWluLXdpZHRoOjA7b3ZlcmZsb3c6aGlkZGVufS5tYWluLWNvbnRhaW5lciAuaGVhZGVyIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIrLmJyYW5kaW5ne3BhZGRpbmctbGVmdDowO21hcmdpbi1sZWZ0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS01KSl9Lm1haW4tY29udGFpbmVyIC5oZWFkZXIgLmhlYWRlci1oYW1idXJnZXItdHJpZ2dlcisuYnJhbmRpbmcgLmNsci1pY29uLC5tYWluLWNvbnRhaW5lciAuaGVhZGVyIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIrLmJyYW5kaW5nIC5sb2dvLC5tYWluLWNvbnRhaW5lciAu''@;'; put 'put ''aGVhZGVyIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIrLmJyYW5kaW5nIGNkcy1pY29uLC5tYWluLWNvbnRhaW5lciAuaGVhZGVyIC5oZWFkZXItaGFtYnVyZ2VyLXRyaWdnZXIrLmJyYW5kaW5nIGNsci1pY29ue2Rpc3BsYXk6bm9uZX0ubWFpbi1jb250YWluZXIgLmhlYWRlciAuYnJhbmRp''@;'; put 'put ''bmcrLmhlYWRlci1vdmVyZmxvdy10cmlnZ2VyLC5tYWluLWNvbnRhaW5lciAuaGVhZGVyIC5oZWFkZXItbmF2Ky5oZWFkZXItb3ZlcmZsb3ctdHJpZ2dlciwubWFpbi1jb250YWluZXIgLmhlYWRlciAuaGVhZGVyLW5hdisuY2RrLXZpc3VhbGx5LWhpZGRlbisuaGVhZGVyLW92ZXJmbG93LXRy''@;'; put 'put ''aWdnZXJ7bWFyZ2luLWxlZnQ6YXV0b30ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItYmFja2Ryb3AsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItYmFja2Ryb3B7cG9zaXRpb246Zml4ZWQ7aW5zZXQ6''@;'; put 'put ''MDtiYWNrZ3JvdW5kOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtb3ZlcmxheS1iYWNrZHJvcC1iYWNrZ3JvdW5kKTtjdXJzb3I6cG9pbnRlcjt6LWluZGV4OjEwMzh9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEg''@;'; put 'put ''Lm5hdi1saW5rLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluaywubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5u''@;'; put 'put ''YXYtbGluaywubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGlua3tmbGV4OjAgMCBhdXRvO29wYWNpdHk6MTtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY29sb3IpfS5tYWluLWNvbnRh''@;'; put 'put ''aW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluayAubmF2LWljb24sLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rIC5m''@;'; put 'put ''YSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0y''@;'; put 'put ''IC5uYXYtbGluayAuZmEsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHIt''@;'; put 'put ''bmF2LWxldmVsLTEgLm5hdi1saW5rIC5mYSwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluayAubmF2LWljb24sLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFk''@;'; put 'put ''ZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsgLmZhe2Rpc3BsYXk6bm9uZX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsgLm5hdi10ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLWhh''@;'; put 'put ''bWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluayAubmF2LXRleHQsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsgLm5hdi10ZXh0LC5tYWlu''@;'; put 'put ''LWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rIC5uYXYtdGV4dHtkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCkgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTQpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7d2hpdGUtc3BhY2U6bm9ybWFsO2NvbG9yOnZhcigtLWNsci1zbGlkaW5nLXBhbmVsLXRleHQtY29sb3IpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7Zm9udC13ZWlnaHQ6NDAwfS5tYWluLWNvbnRhaW5lci5vcGVu''@;'; put 'put ''LWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluayAubmF2LWljb24rLm5hdi10ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluayAu''@;'; put 'put ''bmF2LWljb24rLm5hdi10ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rIC5uYXYtaWNvbisubmF2LXRleHQsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5o''@;'; put 'put ''ZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsgLm5hdi1pY29uKy5uYXYtdGV4dHtkaXNwbGF5OmlubGluZS1ibG9ja30ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsuYWN0aXZl''@;'; put 'put ''LC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmUsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2''@;'; put 'put ''LWxpbmsuYWN0aXZlLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rLmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tYWN0aXZlLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtYmctY29sb3IpO3Bvc2l0aW9uOnJlbGF0aXZlfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluay5hY3RpdmU6YmVmb3JlLC5tYWluLWNv''@;'; put 'put ''bnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmU6YmVmb3JlLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1s''@;'; put 'put ''aW5rLmFjdGl2ZTpiZWZvcmUsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsuYWN0aXZlOmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDt3''@;'; put 'put ''aWR0aDoxMDAlO2JvcmRlcjowO2JvcmRlci1sZWZ0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTMwMCkgc29saWQgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7dHJhbnNpdGlvbjpib3JkZXItbGVmdCAuMnMgZWFz''@;'; put 'put ''ZS1pbn0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsuYWN0aXZlIC5uYXYtaWNvbiwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1u''@;'; put 'put ''YXYtbGV2ZWwtMiAubmF2LWxpbmsuYWN0aXZlIC5uYXYtaWNvbiwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluay5hY3RpdmUgLm5hdi1pY29uLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93''@;'; put 'put ''LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rLmFjdGl2ZSAubmF2LWljb257ZmlsbDp2YXIoLS1jbHItdmVydGljYWwtbmF2LWljb24tYWN0aXZlLWNvbG9yKX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFk''@;'; put 'put ''ZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsuYWN0aXZlOmhvdmVyLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmU6aG92ZXIsLm1haW4tY29udGFpbmVyLm9wZW4tb3Zl''@;'; put 'put ''cmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmsuYWN0aXZlOmhvdmVyLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rLmFjdGl2ZTpob3Zlcnti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQtaG92ZXItYmctY29sb3IpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluay5hY3RpdmU6YWN0aXZlLC5tYWlu''@;'; put 'put ''LWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmU6YWN0aXZlLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5h''@;'; put 'put ''di1saW5rLmFjdGl2ZTphY3RpdmUsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxpbmsuYWN0aXZlOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtc2VsZWN0ZWQt''@;'; put 'put ''YWN0aXZlLWJnLWNvbG9yKX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbms6aG92ZXIsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHIt''@;'; put 'put ''bmF2LWxldmVsLTIgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rOmhvdmVyLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVy''@;'; put 'put ''LW5hdi5jbHItbmF2LWxldmVsLTIgLm5hdi1saW5rOmhvdmVye2NvbG9yOnZhcigtLWNsci12ZXJ0aWNhbC1uYXYtaXRlbS1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1ob3Zlci1iZy1jb2xvcik7dGV4dC1kZWNvcmF0aW9uOm5vbmV9Lm1h''@;'; put 'put ''aW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rOmFjdGl2ZSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxp''@;'; put 'put ''bms6YWN0aXZlLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rOmFjdGl2ZSwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZl''@;'; put 'put ''bC0yIC5uYXYtbGluazphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1hY3RpdmUtYmctY29sb3IpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIg''@;'; put 'put ''LmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluay5hY3RpdmU+Lm5hdi10ZXh0LC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yIC5uYXYtbGluay5hY3RpdmU+Lm5hdi10ZXh0LC5tYWluLWNvbnRh''@;'; put 'put ''aW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlciAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLmFjdGl2ZT4ubmF2LXRleHQsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuaGVhZGVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiAubmF2LWxp''@;'; put 'put ''bmsuYWN0aXZlPi5uYXYtdGV4dHtjb2xvcjppbmhlcml0fS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dlciwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItdmVydGljYWwtbmF2IC5uYXYtdHJpZ2dl''@;'; put 'put ''cntkaXNwbGF5Om5vbmV9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmd7cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO292ZXJmbG93OmhpZGRlbjt3aWR0aDpjYWxjKDM2MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWF4LXdp''@;'; put 'put ''ZHRoOmNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTt6LWluZGV4OjEwNDA7cGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmc+Lm5hdi1saW5re292ZXJm''@;'; put 'put ''bG93OmhpZGRlbn0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5icmFuZGluZyAuY2xyLWljb24sLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmcgLmxvZ28sLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2Vy''@;'; put 'put ''LW1lbnUgLmhlYWRlciAuYnJhbmRpbmcgY2RzLWljb24sLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJhbmRpbmcgY2xyLWljb257ZGlzcGxheTppbmxpbmUtYmxvY2t9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlciAuYnJh''@;'; put 'put ''bmRpbmcgY2RzLWljb25bc2hhcGU9dm0tYnVnXSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyIC5icmFuZGluZyBjbHItaWNvbltzaGFwZT12bS1idWddLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmJyYW5kaW5nIC5jbHIt''@;'; put 'put ''dm13LWxvZ297YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItaGVhZGVyLWJnLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmJyYW5kaW5nIC50''@;'; put 'put ''aXRsZXtjb2xvcjp2YXIoLS1jbHItdmVydGljYWwtbmF2LWl0ZW0tY29sb3IpO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVufS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItbmF2LWNsb3Nle3Bvc2l0aW9uOmZpeGVkO3RvcDowO3JpZ2h0OmF1''@;'; put 'put ''dG87bGVmdDowO3otaW5kZXg6MTAzOTt0cmFuc2Zvcm06dHJhbnNsYXRlKGNhbGMoY2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSkpO3RyYW5zaXRpb246dHJhbnNmb3JtIC42cyBlYXNlfS5tYWluLWNvbnRhaW5lci5v''@;'; put 'put ''cGVuLWhhbWJ1cmdlci1tZW51IC5jbHItbmF2LWNsb3NlOmFmdGVye2NvbnRlbnQ6bm9uZX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuY2xyLW5hdi1jbG9zZT5zcGFue2JhY2tncm91bmQ6MCAwfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHIt''@;'; put 'put ''bmF2LWNsb3NlPnNwYW46YmVmb3JlLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW46YWZ0ZXJ7bGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO3RyYW5zZm9ybS1vcmlnaW46OSU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjZzIGVhc2V9''@;'; put 'put ''Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci1uYXYtY2xvc2U+c3BhbjpiZWZvcmV7dHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci1uYXYtY2xvc2U+c3BhbjphZnRlcnt0cmFuc2Zvcm06cm90YXRl''@;'; put 'put ''KC00NWRlZyl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xLC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1t''@;'; put 'put ''ZW51IC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTF7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1jbHItaGVhZGVyLWhlaWdodCkgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTkpKTt0cmFuc2Zvcm06dHJhbnNsYXRlKDApO3RyYW5zaXRpb246dHJhbnNmb3JtIC4zcyBlYXNlfS5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLnN1Ym5hdi5j''@;'; put 'put ''bHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTJ7dHJhbnNmb3JtOnRyYW5zbGF0ZSgw''@;'; put 'put ''KTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuM3MgZWFzZX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRh''@;'; put 'put ''aW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0ye3BhZGRpbmctdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLW5hdi1jbG9zZXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtyaWdodDow''@;'; put 'put ''O2xlZnQ6YXV0bzt6LWluZGV4OjEwMzk7dHJhbnNmb3JtOnRyYW5zbGF0ZShjYWxjKC0xKmNhbGMoY2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSkpKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNnMgZWFzZX0ubWFpbi1j''@;'; put 'put ''b250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItbmF2LWNsb3NlOmFmdGVye2NvbnRlbnQ6bm9uZX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW57YmFja2dyb3VuZDowIDB9Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVu''@;'; put 'put ''dSAuY2xyLW5hdi1jbG9zZT5zcGFuOmJlZm9yZSwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW46YWZ0ZXJ7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMik7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZWZ0OmNhbGMo''@;'; put 'put ''LTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KSk7dHJhbnNmb3JtLW9yaWdpbjotMyU7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjZzIGVhc2V9Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLW5hdi1jbG9zZT5zcGFuOmJlZm9yZXt0cmFuc2Zvcm06cm90YXRlKDQ1ZGVn''@;'; put 'put ''KX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5jbHItbmF2LWNsb3NlPnNwYW46YWZ0ZXJ7dHJhbnNmb3JtOnJvdGF0ZSgtNDVkZWcpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWlu''@;'; put 'put ''ZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci12ZXJ0aWNhbC1uYXYuY2xy''@;'; put 'put ''LW5hdi1sZXZlbC0xe292ZXJmbG93OmluaGVyaXQ7d2lkdGg6Y2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21heC13aWR0aDpjYWxjKDM2MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmhl''@;'; put 'put ''YWRlci1uYXYuY2xyLW5hdi1sZXZlbC0xOmJlZm9yZSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMTpiZWZvcmUsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0xOmJlZm9y''@;'; put 'put ''ZSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTE6YmVmb3Jle2NvbnRlbnQ6bm9uZX0ubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuaGVhZGVyLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5r''@;'; put 'put ''LC5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0xIC5uYXYtbGluaywubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEgLm5hdi1saW5rLC5tYWluLWNvbnRhaW5lci5vcGVuLWhh''@;'; put 'put ''bWJ1cmdlci1tZW51IC5jbHItdmVydGljYWwtbmF2LmNsci1uYXYtbGV2ZWwtMSAubmF2LWxpbmt7d2lkdGg6MTAwJX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51IC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1tZW51''@;'; put 'put ''IC5zdWJuYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0ye3dpZHRoOmNhbGMo''@;'; put 'put ''MzYwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttYXgtd2lkdGg6Y2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOjU3NnB4KXsubWFpbi1jb250YWluZXIgLmhlYWRlciAuYnJhbmRpbmd7bWF4LXdpZHRo''@;'; put 'put ''OmNhbGMoMTQ0KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttaW4td2lkdGg6MDtvdmVyZmxvdzpoaWRkZW59Lm1haW4tY29udGFpbmVyIC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIgLnN1Ym5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFp''@;'; put 'put ''bmVyIC5zdWItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0xe3RyYW5zZm9ybTp0cmFuc2xhdGUoY2FsYygtMSpjYWxjKDI4OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkpKX0ubWFpbi1jb250YWluZXIg''@;'; put 'put ''LmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lciAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMiwubWFpbi1jb250YWluZXIgLnN1Yi1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lciAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTJ7dHJhbnNm''@;'; put 'put ''b3JtOnRyYW5zbGF0ZShjYWxjKDI4OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXIgLmJyYW5kaW5ne3dpZHRoOmNhbGMoMjg4KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttYXgtd2lkdGg6''@;'; put 'put ''Y2FsYygyODgqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5tYWluLWNvbnRhaW5lci5vcGVuLWhhbWJ1cmdlci1tZW51IC5oZWFkZXItbmF2LmNsci1uYXYtbGV2ZWwtMSwubWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3VibmF2LmNsci1uYXYtbGV2ZWwtMSwu''@;'; put 'put ''bWFpbi1jb250YWluZXIub3Blbi1oYW1idXJnZXItbWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTEsLm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci12ZXJ0aWNhbC1uYXYuY2xyLW5hdi1sZXZlbC0xe292ZXJmbG93OmluaGVyaXQ7d2lkdGg6Y2FsYygyODgqKDFy''@;'; put 'put ''ZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21heC13aWR0aDpjYWxjKDI4OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9Lm1haW4tY29udGFpbmVyLm9wZW4taGFtYnVyZ2VyLW1lbnUgLmNsci1uYXYtY2xvc2V7cG9zaXRpb246Zml4ZWQ7dG9wOjA7cmlnaHQ6YXV0bztsZWZ0''@;'; put 'put ''OjA7ei1pbmRleDoxMDM5O3RyYW5zZm9ybTp0cmFuc2xhdGUoY2FsYyhjYWxjKDI4OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKSk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjZzIGVhc2V9Lm1haW4tY29udGFpbmVyLm9wZW4taGFt''@;'; put 'put ''YnVyZ2VyLW1lbnUgLmNsci1uYXYtY2xvc2U6YWZ0ZXJ7Y29udGVudDpub25lfS5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLmhlYWRlci1uYXYuY2xyLW5hdi1sZXZlbC0yLC5tYWluLWNvbnRhaW5lci5vcGVuLW92ZXJmbG93LW1lbnUgLnN1Ym5hdi5jbHItbmF2LWxldmVs''@;'; put 'put ''LTIsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuc3ViLW5hdi5jbHItbmF2LWxldmVsLTIsLm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLXZlcnRpY2FsLW5hdi5jbHItbmF2LWxldmVsLTJ7d2lkdGg6Y2FsYygyODgqKDFyZW0vdmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1iYXNlKSkpO21heC13aWR0aDpjYWxjKDI4OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9Lm1haW4tY29udGFpbmVyLm9wZW4tb3ZlcmZsb3ctbWVudSAuY2xyLW5hdi1jbG9zZXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtyaWdodDowO2xlZnQ6YXV0bzt6LWluZGV4OjEwMzk7''@;'; put 'put ''dHJhbnNmb3JtOnRyYW5zbGF0ZShjYWxjKC0xKmNhbGMoY2FsYygyODgqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSkpKTt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuNnMgZWFzZX0ubWFpbi1jb250YWluZXIub3Blbi1vdmVyZmxvdy1t''@;'; put 'put ''ZW51IC5jbHItbmF2LWNsb3NlOmFmdGVye2NvbnRlbnQ6bm9uZX19OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItYmFkZ2UtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS1ncmF5KTstLWNsci1iYWRnZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xv''@;'; put 'put ''ci0xMDApOy0tY2xyLWJhZGdlLWluZm8tYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktYmx1ZSk7LS1jbHItYmFkZ2UtaW5mby1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJhZGdlLXN1Y2Nlc3MtYmctY29sb3I6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLXV0aWxpdHktZ3JlZW4pOy0tY2xyLWJhZGdlLXN1Y2Nlc3MtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1iYWRnZS13YXJuaW5nLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LXllbGxvdyk7LS1jbHItYmFkZ2Utd2FybmluZy1j''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsYWNrKTstLWNsci1iYWRnZS1kYW5nZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktcmVkKTstLWNsci1iYWRnZS1kYW5nZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1iYWRn''@;'; put 'put ''ZS1ncmF5LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LWdyYXkpOy0tY2xyLWJhZGdlLWdyYXktY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1iYWRnZS1wdXJwbGUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktdmlvbGV0''@;'; put 'put ''KTstLWNsci1iYWRnZS1wdXJwbGUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNsci1iYWRnZS1ibHVlLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LWRhcmstYmx1ZSk7LS1jbHItYmFkZ2UtYmx1ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''dHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWJhZGdlLW9yYW5nZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS10YW5nZXJpbmUpOy0tY2xyLWJhZGdlLW9yYW5nZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWJhZGdlLWxpZ2h0''@;'; put 'put ''LWJsdWUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktbGlnaHQtYmx1ZSk7LS1jbHItYmFkZ2UtbGlnaHQtYmx1ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApfS5iYWRnZXtkaXNwbGF5OmlubGluZS1mbGV4O3ZlcnRpY2FsLWFsaWduOm1pZGRs''@;'; put 'put ''ZTthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1iYWRnZS1iYWNrZ3JvdW5kLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTti''@;'; put 'put ''b3JkZXItcmFkaXVzOmNhbGMoMip2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKSk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNt''@;'; put 'put ''YWxsY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGV0dGVyLXNwYWNpbmcpO3BhZGRp''@;'; put 'put ''bmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS1jbHItYmFkZ2UtY29sb3IpfS5iYWRn''@;'; put 'put ''ZTp2aXNpdGVke2NvbG9yOnZhcigtLWNsci1iYWRnZS1jb2xvcil9LmJhZGdlOmxpbmt7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItYmFkZ2UtZ3JheS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWdyYXktY29sb3IpfS5iYWRnZS5iYWRnZS1ncmF5LC5iYWRnZS5iYWRnZS0x''@;'; put 'put ''e2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLWdyYXktYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1iYWRnZS1ncmF5LWNvbG9yKX0uYmFkZ2UuYmFkZ2UtcHVycGxlLC5iYWRnZS5iYWRnZS0ye2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLXB1cnBsZS1iZy1jb2xvcik7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWJhZGdlLXB1cnBsZS1jb2xvcil9LmJhZGdlLmJhZGdlLWJsdWUsLmJhZGdlLmJhZGdlLTN7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2UtYmx1ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWJsdWUtY29sb3IpfS5iYWRnZS5iYWRnZS1vcmFuZ2UsLmJhZGdlLmJh''@;'; put 'put ''ZGdlLTR7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2Utb3JhbmdlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYmFkZ2Utb3JhbmdlLWNvbG9yKX0uYmFkZ2UuYmFkZ2UtbGlnaHQtYmx1ZSwuYmFkZ2UuYmFkZ2UtNXtiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRnZS1saWdodC1ibHVlLWJn''@;'; put 'put ''LWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYmFkZ2UtbGlnaHQtYmx1ZS1jb2xvcil9LmJhZGdlLmJhZGdlLWluZm97YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2UtaW5mby1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWluZm8tY29sb3IpfS5iYWRnZS5iYWRnZS1zdWNjZXNze2Jh''@;'; put 'put ''Y2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLXN1Y2Nlc3MtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1iYWRnZS1zdWNjZXNzLWNvbG9yKX0uYmFkZ2UuYmFkZ2UtZGFuZ2Vye2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLWRhbmdlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdl''@;'; put 'put ''LWRhbmdlci1jb2xvcil9LmJhZGdlLmJhZGdlLXdhcm5pbmd7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2Utd2FybmluZy1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLXdhcm5pbmctY29sb3IpfV86LW1zLWlucHV0LXBsYWNlaG9sZGVyIC5iYWRnZSw6cm9vdCAuYmFkZ2V7cGFk''@;'; put 'put ''ZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpIGNhbGMoMyooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkgMH1Ac3VwcG9ydHMgKC1tcy1pbWUtYWxpZ246YXV0byl7LmJhZGdle3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSBjYWxjKDMqKDFyZW0vdmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1iYXNlKSkpIDB9fTpyb290IFtjZHMtdGhlbWVdey0tY2xyLWxhYmVsLWZvbnQtY29sb3ItbGlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1sYWJlbC1mb250LWNvbG9yLWRhcms6dmFyKC0tY2xyLWNvbG9yLW5ldXRyYWwtMTAwMCk7LS1j''@;'; put 'put ''bHItbGFiZWwtZGVmYXVsdC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktZ3JheSk7LS1jbHItbGFiZWwtZGVmYXVsdC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItbGFiZWwtYmctaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhvdmVyKTstLWNsci1sYWJlbC1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci1sYWJlbC1iZy1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRl''@;'; put 'put ''cmFjdGlvbi1iYWNrZ3JvdW5kLWFjdGl2ZSk7LS1jbHItbGFiZWwtYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci1sYWJlbC1iZy1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9u''@;'; put 'put ''LWJhY2tncm91bmQtZGlzYWJsZWQpOy0tY2xyLWxhYmVsLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1sYWJlbC1kaXNhYmxlZC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItbGFiZWwt''@;'; put 'put ''Z3JheS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItbGFiZWwtZ3JheS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktZ3JheSk7LS1jbHItbGFiZWwtZ3JheS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01''@;'; put 'put ''MDApOy0tY2xyLWxhYmVsLXB1cnBsZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItbGFiZWwtcHVycGxlLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS12aW9sZXQpOy0tY2xyLWxhYmVsLXB1cnBsZS1jb2xvcjp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxhYmVsLWJsdWUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTApOy0tY2xyLWxhYmVsLWJsdWUtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LWRhcmstYmx1ZSk7LS1jbHItbGFiZWwt''@;'; put 'put ''Ymx1ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxhYmVsLW9yYW5nZS1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItbGFiZWwtb3JhbmdlLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0''@;'; put 'put ''eS10YW5nZXJpbmUpOy0tY2xyLWxhYmVsLW9yYW5nZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xyLWxhYmVsLWxpZ2h0LWJsdWUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1vcGFjaXR5LTApOy0tY2xyLWxhYmVsLWxpZ2h0LWJsdWUt''@;'; put 'put ''Ym9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5LWxpZ2h0LWJsdWUpOy0tY2xyLWxhYmVsLWxpZ2h0LWJsdWUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1sYWJlbC1pbmZvLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy11dGlsaXR5''@;'; put 'put ''LWJsdWUtdGludCk7LS1jbHItbGFiZWwtaW5mby1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItbGFiZWwtaW5mby1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktYmx1ZSk7LS1jbHItbGFiZWwtc3VjY2Vzcy1iZy1jb2xv''@;'; put 'put ''cjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS1ncmVlbi10aW50KTstLWNsci1sYWJlbC1zdWNjZXNzLWZvbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1sYWJlbC1zdWNjZXNzLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS1n''@;'; put 'put ''cmVlbik7LS1jbHItbGFiZWwtd2FybmluZy1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS15ZWxsb3ctdGludCk7LS1jbHItbGFiZWwtd2FybmluZy1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItbGFiZWwtd2FybmluZy1ib3Jk''@;'; put 'put ''ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHkteWVsbG93KTstLWNsci1sYWJlbC1kYW5nZXItYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLXV0aWxpdHktcmVkLXRpbnQpOy0tY2xyLWxhYmVsLWRhbmdlci1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9y''@;'; put 'put ''LTUwMCk7LS1jbHItbGFiZWwtZGFuZ2VyLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdXRpbGl0eS1yZWQpOy0tY2xyLWxhYmVsLWJvcmRlci13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApfS5sYWJlbCxhLmxhYmVse2ZvbnQtc2l6ZTp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVy''@;'; put 'put ''LXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7ZGlzcGxheTppbmxpbmUtZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTtwYWRkaW5nOnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtMykgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtib3JkZXI6dmFyKC0tY2xyLWxhYmVsLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWxhYmVsLWRlZmF1bHQtYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''Ym9yZGVyLXJhZGl1cy0yMDApO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21hcmdpbjowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSAwO3doaXRlLXNwYWNlOm5vd3JhcDtjb2xvcjp2YXIoLS1jbHItbGFiZWwtZm9udC1jb2xv''@;'; put 'put ''ci1saWdodCk7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LmxhYmVsPi5iYWRnZSwubGFiZWw+Y2RzLWljb24sYS5sYWJlbD4uYmFkZ2UsYS5sYWJlbD5jZHMtaWNvbnttYXJnaW46MDt0ZXh0LWRlY29yYXRpb246bm9uZX0ubGFiZWwgY2RzLWljb24sYS5sYWJlbCBjZHMtaWNvbnttYXJnaW4tbGVm''@;'; put 'put ''dDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5sYWJlbCAuYmFkZ2UrY2RzLWljb24sYS5sYWJlbCAuYmFkZ2UrY2RzLWljb257bWFyZ2luLWxlZnQ6MH0ubGFiZWw+Y2RzLWljb246bGFzdC1jaGlsZCwubGFiZWw+c3BhbjpsYXN0LWNoaWxkLmJhZGdlLGEubGFiZWw+Y2RzLWljb246bGFz''@;'; put 'put ''dC1jaGlsZCxhLmxhYmVsPnNwYW46bGFzdC1jaGlsZC5iYWRnZXttYXJnaW4tcmlnaHQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpKX0ubGFiZWwuY2xpY2thYmxlPi50ZXh0LGEubGFiZWwuY2xpY2thYmxlPi50ZXh0e3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LmxhYmVs''@;'; put 'put ''OnZpc2l0ZWQsYS5sYWJlbDp2aXNpdGVke2NvbG9yOnZhcigtLWNsci1sYWJlbC1mb250LWNvbG9yLWxpZ2h0KX0ubGFiZWw6Zm9jdXMsLmxhYmVsOmhvdmVyLC5sYWJlbDphY3RpdmUsYS5sYWJlbDpmb2N1cyxhLmxhYmVsOmhvdmVyLGEubGFiZWw6YWN0aXZle3RleHQtZGVjb3JhdGlvbjpu''@;'; put 'put ''b25lfS5sYWJlbC5jbGlja2FibGU6bm90KC5kaXNhYmxlZCk6aG92ZXIsYS5sYWJlbC5jbGlja2FibGU6bm90KC5kaXNhYmxlZCk6aG92ZXJ7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZDp2YXIoLS1jbHItbGFiZWwtYmctaG92ZXItY29sb3IpO2NvbG9yOnZhcigtLWNsci1sYWJl''@;'; put 'put ''bC1ob3Zlci1jb2xvcil9LmxhYmVsLmNsaWNrYWJsZTpub3QoLmRpc2FibGVkKTphY3RpdmUsYS5sYWJlbC5jbGlja2FibGU6bm90KC5kaXNhYmxlZCk6YWN0aXZle2NvbG9yOnZhcigtLWNsci1sYWJlbC1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQ6dmFyKC0tY2xyLWxhYmVsLWJnLWFjdGl2''@;'; put 'put ''ZS1jb2xvcik7dHJhbnNmb3JtOnRyYW5zbGF0ZVkodmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSl9LmxhYmVsLmxhYmVsLWdyYXksLmxhYmVsLmxhYmVsLTEsYS5sYWJlbC5sYWJlbC1ncmF5LGEubGFiZWwubGFiZWwtMXtib3JkZXI6dmFyKC0tY2xyLWxhYmVsLWJvcmRlci13aWR0aCkgc29s''@;'; put 'put ''aWQgdmFyKC0tY2xyLWxhYmVsLWdyYXktYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1sYWJlbC1ncmF5LWJnLWNvbG9yKX0ubGFiZWwubGFiZWwtZ3JheT4uYmFkZ2UsYS5sYWJlbC5sYWJlbC1ncmF5Pi5iYWRnZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRnZS1n''@;'; put 'put ''cmF5LWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYmFkZ2UtZ3JheS1jb2xvcil9LmxhYmVsLmxhYmVsLXB1cnBsZSwubGFiZWwubGFiZWwtMixhLmxhYmVsLmxhYmVsLXB1cnBsZSxhLmxhYmVsLmxhYmVsLTJ7Ym9yZGVyOnZhcigtLWNsci1sYWJlbC1ib3JkZXItd2lkdGgpIHNvbGlkIHZh''@;'; put 'put ''cigtLWNsci1sYWJlbC1wdXJwbGUtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1sYWJlbC1wdXJwbGUtYmctY29sb3IpfS5sYWJlbC5sYWJlbC1wdXJwbGU+LmJhZGdlLGEubGFiZWwubGFiZWwtcHVycGxlPi5iYWRnZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRn''@;'; put 'put ''ZS1wdXJwbGUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1iYWRnZS1wdXJwbGUtY29sb3IpfS5sYWJlbC5sYWJlbC1ibHVlLC5sYWJlbC5sYWJlbC0zLGEubGFiZWwubGFiZWwtYmx1ZSxhLmxhYmVsLmxhYmVsLTN7Ym9yZGVyOnZhcigtLWNsci1sYWJlbC1ib3JkZXItd2lkdGgpIHNvbGlk''@;'; put 'put ''IHZhcigtLWNsci1sYWJlbC1ibHVlLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbGFiZWwtYmx1ZS1iZy1jb2xvcil9LmxhYmVsLmxhYmVsLWJsdWU+LmJhZGdlLGEubGFiZWwubGFiZWwtYmx1ZT4uYmFkZ2V7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2UtYmx1''@;'; put 'put ''ZS1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWJsdWUtY29sb3IpfS5sYWJlbC5sYWJlbC1vcmFuZ2UsLmxhYmVsLmxhYmVsLTQsYS5sYWJlbC5sYWJlbC1vcmFuZ2UsYS5sYWJlbC5sYWJlbC00e2JvcmRlcjp2YXIoLS1jbHItbGFiZWwtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIo''@;'; put 'put ''LS1jbHItbGFiZWwtb3JhbmdlLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItbGFiZWwtb3JhbmdlLWJnLWNvbG9yKX0ubGFiZWwubGFiZWwtb3JhbmdlPi5iYWRnZSxhLmxhYmVsLmxhYmVsLW9yYW5nZT4uYmFkZ2V7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2Ut''@;'; put 'put ''b3JhbmdlLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYmFkZ2Utb3JhbmdlLWNvbG9yKX0ubGFiZWwubGFiZWwtbGlnaHQtYmx1ZSwubGFiZWwubGFiZWwtNSxhLmxhYmVsLmxhYmVsLWxpZ2h0LWJsdWUsYS5sYWJlbC5sYWJlbC01e2JvcmRlcjp2YXIoLS1jbHItbGFiZWwtYm9yZGVyLXdp''@;'; put 'put ''ZHRoKSBzb2xpZCB2YXIoLS1jbHItbGFiZWwtbGlnaHQtYmx1ZS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWxhYmVsLWxpZ2h0LWJsdWUtYmctY29sb3IpfS5sYWJlbC5sYWJlbC1saWdodC1ibHVlPi5iYWRnZSxhLmxhYmVsLmxhYmVsLWxpZ2h0LWJsdWU+LmJh''@;'; put 'put ''ZGdle2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLWxpZ2h0LWJsdWUtYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1iYWRnZS1saWdodC1ibHVlLWNvbG9yKX0ubGFiZWwubGFiZWwtaW5mbyxhLmxhYmVsLmxhYmVsLWluZm97YmFja2dyb3VuZDp2YXIoLS1jbHItbGFiZWwtaW5mby1iZy1j''@;'; put 'put ''b2xvcik7Y29sb3I6dmFyKC0tY2xyLWxhYmVsLWluZm8tZm9udC1jb2xvcik7Ym9yZGVyOnZhcigtLWNsci1sYWJlbC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLWNsci1sYWJlbC1pbmZvLWJvcmRlci1jb2xvcil9LmxhYmVsLmxhYmVsLWluZm8+LmJhZGdlLGEubGFiZWwubGFiZWwtaW5m''@;'; put 'put ''bz4uYmFkZ2V7YmFja2dyb3VuZDp2YXIoLS1jbHItYmFkZ2UtaW5mby1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWJhZGdlLWluZm8tY29sb3IpfS5sYWJlbC5sYWJlbC1zdWNjZXNzLGEubGFiZWwubGFiZWwtc3VjY2Vzc3tiYWNrZ3JvdW5kOnZhcigtLWNsci1sYWJlbC1zdWNjZXNzLWJn''@;'; put 'put ''LWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItbGFiZWwtc3VjY2Vzcy1mb250LWNvbG9yKTtib3JkZXI6dmFyKC0tY2xyLWxhYmVsLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWxhYmVsLXN1Y2Nlc3MtYm9yZGVyLWNvbG9yKX0ubGFiZWwubGFiZWwtc3VjY2Vzcz4uYmFkZ2UsYS5sYWJl''@;'; put 'put ''bC5sYWJlbC1zdWNjZXNzPi5iYWRnZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRnZS1zdWNjZXNzLWJnLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItYmFkZ2Utc3VjY2Vzcy1jb2xvcil9LmxhYmVsLmxhYmVsLXdhcm5pbmcsYS5sYWJlbC5sYWJlbC13YXJuaW5ne2JhY2tncm91bmQ6dmFyKC0t''@;'; put 'put ''Y2xyLWxhYmVsLXdhcm5pbmctYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1sYWJlbC13YXJuaW5nLWZvbnQtY29sb3IpO2JvcmRlcjp2YXIoLS1jbHItbGFiZWwtYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItbGFiZWwtd2FybmluZy1ib3JkZXItY29sb3IpfS5sYWJlbC5sYWJlbC13''@;'; put 'put ''YXJuaW5nPi5iYWRnZSxhLmxhYmVsLmxhYmVsLXdhcm5pbmc+LmJhZGdle2JhY2tncm91bmQ6dmFyKC0tY2xyLWJhZGdlLXdhcm5pbmctYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1iYWRnZS13YXJuaW5nLWNvbG9yKX0ubGFiZWwubGFiZWwtZGFuZ2VyLGEubGFiZWwubGFiZWwtZGFuZ2Vy''@;'; put 'put ''e2JhY2tncm91bmQ6dmFyKC0tY2xyLWxhYmVsLWRhbmdlci1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWxhYmVsLWRhbmdlci1mb250LWNvbG9yKTtib3JkZXI6dmFyKC0tY2xyLWxhYmVsLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWxhYmVsLWRhbmdlci1ib3JkZXItY29sb3Ip''@;'; put 'put ''fS5sYWJlbC5sYWJlbC1kYW5nZXI+LmJhZGdlLGEubGFiZWwubGFiZWwtZGFuZ2VyPi5iYWRnZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1iYWRnZS1kYW5nZXItYmctY29sb3IpO2NvbG9yOnZhcigtLWNsci1iYWRnZS1kYW5nZXItY29sb3IpfS5sYWJlbC5kaXNhYmxlZCwubGFiZWw6ZGlzYWJs''@;'; put 'put ''ZWQsYS5sYWJlbC5kaXNhYmxlZCxhLmxhYmVsOmRpc2FibGVke2N1cnNvcjpub3QtYWxsb3dlZDtwb2ludGVyLWV2ZW50czpub25lO2JhY2tncm91bmQ6dmFyKC0tY2xyLWxhYmVsLWJnLWRpc2FibGVkLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItbGFiZWwtZGlzYWJsZWQtY29sb3IpO2JvcmRl''@;'; put 'put ''ci1jb2xvcjp2YXIoLS1jbHItbGFiZWwtZGlzYWJsZWQtYm9yZGVyLWNvbG9yKX0ubGFiZWwuZGlzYWJsZWQgLmJhZGdlLC5sYWJlbDpkaXNhYmxlZCAuYmFkZ2UsYS5sYWJlbC5kaXNhYmxlZCAuYmFkZ2UsYS5sYWJlbDpkaXNhYmxlZCAuYmFkZ2V7YmFja2dyb3VuZDp2YXIoLS1jbHItbGFi''@;'; put 'put ''ZWwtZGlzYWJsZWQtY29sb3IpfUAtbW96LWRvY3VtZW50IHVybC1wcmVmaXgoKXsubGFiZWwsYS5sYWJlbHt2ZXJ0aWNhbC1hbGlnbjpib3R0b219fTpyb290IFtjZHMtdGhlbWVdey0tY2xyLXByb2dyZXNzLWRlZmF1bHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1pbmZvKTstLWNs''@;'; put 'put ''ci1wcm9ncmVzcy1hbHQtY29sb3ItMTp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyLXNoYWRlKTstLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMzp2YXIoLS1jZHMtYWxpYXMtc3Rh''@;'; put 'put ''dHVzLXdhcm5pbmcpOy0tY2xyLXByb2dyZXNzLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtc2hhZGUpOy0tY2xyLXByb2dyZXNzLWxhYmVsLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCl9LnByb2dyZXNzLC5w''@;'; put 'put ''cm9ncmVzcy1zdGF0aWN7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItcmFkaXVzOjA7Zm9udC1zaXplOmluaGVyaXQ7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7bWFyZ2luOjA7b3ZlcmZsb3c6aGlkZGVuO21heC1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1z''@;'; put 'put ''cGFjZS02KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlfS5wcm9ncmVzcz5wcm9ncmVzc3std2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFu''@;'; put 'put ''Y2U6bm9uZTtjb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtZGVmYXVsdC1jb2xvcik7ZGlzcGxheTpibG9jaztiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1iZy1jb2xvcik7Ym9yZGVyOjA7aGVpZ2h0OjEwMCU7d2lkdGg6MTAwJX0ucHJvZ3Jlc3M+cHJvZ3Jlc3M6Oi13ZWJr''@;'; put 'put ''aXQtcHJvZ3Jlc3MtdmFsdWV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtZGVmYXVsdC1jb2xvcil9LnByb2dyZXNzPnByb2dyZXNzOjotbW96LXByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1kZWZhdWx0LWNvbG9yKX0ucHJvZ3Jl''@;'; put 'put ''c3M+cHJvZ3Jlc3NbdmFsdWU9IjAiXTo6LW1vei1wcm9ncmVzcy1iYXJ7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7Y29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWJnLWNvbG9yKTttaW4t''@;'; put 'put ''d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMik7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtiYWNrZ3JvdW5kLWltYWdlOm5vbmV9LnByb2dyZXNzPnByb2dyZXNzW3ZhbHVlPSIwIl06Oi13ZWJraXQtcHJvZ3Jlc3MtdmFsdWV7LXdlYmtpdC10cmFuc2l0aW9uOm5vbmU7dHJh''@;'; put 'put ''bnNpdGlvbjpub25lfS5wcm9ncmVzcz5wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy1iYXJ7Ym9yZGVyLXJhZGl1czowO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWJnLWNvbG9yKX0ucHJvZ3Jlc3M+cHJvZ3Jlc3M6Oi13ZWJraXQtcHJvZ3Jlc3MtaW5uZXItZWxlbWVu''@;'; put 'put ''dHstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFuY2U6bm9uZX0ucHJvZ3Jlc3M+cHJvZ3Jlc3M6Oi13ZWJraXQtcHJvZ3Jlc3MtdmFsdWV7LXdlYmtpdC10cmFuc2l0aW9uOndpZHRoIC4yM3MgZWFzZS1p''@;'; put 'put ''bjt0cmFuc2l0aW9uOndpZHRoIC4yM3MgZWFzZS1pbjtib3JkZXItcmFkaXVzOjB9LnByb2dyZXNzLnN1Y2Nlc3M+cHJvZ3Jlc3N7Y29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0xKX0ucHJvZ3Jlc3Muc3VjY2Vzcz5wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZXti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMSl9LnByb2dyZXNzLnN1Y2Nlc3M+cHJvZ3Jlc3M6Oi1tb3otcHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0xKX0ucHJvZ3Jlc3Mud2FybmluZz5wcm9n''@;'; put 'put ''cmVzc3tjb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTMpfS5wcm9ncmVzcy53YXJuaW5nPnByb2dyZXNzOjotd2Via2l0LXByb2dyZXNzLXZhbHVle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0zKX0ucHJvZ3Jlc3Mud2FybmluZz5wcm9n''@;'; put 'put ''cmVzczo6LW1vei1wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTMpfS5wcm9ncmVzcy5kYW5nZXI+cHJvZ3Jlc3N7Y29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0yKX0ucHJvZ3Jlc3MuZGFuZ2VyPnByb2dyZXNzOjot''@;'; put 'put ''d2Via2l0LXByb2dyZXNzLXZhbHVle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0yKX0ucHJvZ3Jlc3MuZGFuZ2VyPnByb2dyZXNzOjotbW96LXByb2dyZXNzLWJhcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMil9''@;'; put 'put ''LnByb2dyZXNzLmxhYmVsZWQsLnByb2dyZXNzLXN0YXRpYy5sYWJlbGVke3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmctcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7Y29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWxhYmVsLWNvbG9yKX0ucHJvZ3Jlc3MubGFiZWxlZD5zcGFuLC5w''@;'; put 'put ''cm9ncmVzcy1zdGF0aWMubGFiZWxlZD5zcGFue2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MDttYXJnaW4tdG9wOjA7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGV0dGVyLXNwYWNpbmcpfS5wcm9ncmVzcy5jb21wYWN0Om5vdCgu''@;'; put 'put ''bGFiZWxlZCksLnByb2dyZXNzLXN0YXRpYy5jb21wYWN0Om5vdCgubGFiZWxlZCl7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LnByb2dyZXNzLmNvbXBhY3QubGFiZWxlZD4ucHJvZ3Jlc3MtbWV0ZXIsLnByb2dyZXNzLXN0YXRpYy5jb21wYWN0LmxhYmVsZWQ+LnByb2dyZXNz''@;'; put 'put ''LW1ldGVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO3RvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfUBrZXlmcmFtZXMgY2xyLXByb2dyZXNzLWZhZGV7MCV7b3BhY2l0eToxfXRve29wYWNpdHk6MH19LnByb2dyZXNzLnByb2dyZXNzLWZhZGU+cHJvZ3Jlc3NbdmFsdWU9''@;'; put 'put ''IjEwMCJdLC5wcm9ncmVzcy5wcm9ncmVzcy1mYWRlPnByb2dyZXNzW3ZhbHVlPSIxMDAiXStzcGFue2FuaW1hdGlvbjpjbHItcHJvZ3Jlc3MtZmFkZSAuM3MgbGluZWFyIC41cyBmb3J3YXJkc30ucHJvZ3Jlc3MuZmxhc2gtZGFuZ2VyPnByb2dyZXNzLC5wcm9ncmVzcy5mbGFzaD5wcm9ncmVz''@;'; put 'put ''c3t0cmFuc2l0aW9uOmNvbG9yIC4xcyBlYXNlLW91dCAxc30ucHJvZ3Jlc3MuZmxhc2gtZGFuZ2VyPnByb2dyZXNzOjotd2Via2l0LXByb2dyZXNzLXZhbHVlLC5wcm9ncmVzcy5mbGFzaD5wcm9ncmVzczo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZXstd2Via2l0LXRyYW5zaXRpb246d2lkdGgg''@;'; put 'put ''LjIzcyBlYXNlLWluLGJhY2tncm91bmQtY29sb3IgLjFzIGVhc2Utb3V0IC4zczt0cmFuc2l0aW9uOndpZHRoIC4yM3MgZWFzZS1pbixiYWNrZ3JvdW5kLWNvbG9yIC4xcyBlYXNlLW91dCAuM3N9LnByb2dyZXNzLmZsYXNoLWRhbmdlcj5wcm9ncmVzc1t2YWx1ZT0iMCJdOjotd2Via2l0LXBy''@;'; put 'put ''b2dyZXNzLXZhbHVlLC5wcm9ncmVzcy5mbGFzaD5wcm9ncmVzc1t2YWx1ZT0iMCJdOjotd2Via2l0LXByb2dyZXNzLXZhbHVley13ZWJraXQtdHJhbnNpdGlvbjpub25lO3RyYW5zaXRpb246bm9uZX0ucHJvZ3Jlc3MuZmxhc2gtZGFuZ2VyPnByb2dyZXNzOjotbW96LXByb2dyZXNzLWJhciwu''@;'; put 'put ''cHJvZ3Jlc3MuZmxhc2g+cHJvZ3Jlc3M6Oi1tb3otcHJvZ3Jlc3MtYmFyey1tb3otdHJhbnNpdGlvbjp3aWR0aCAuMjNzIGVhc2UtaW4sYmFja2dyb3VuZC1jb2xvciAuMXMgZWFzZS1vdXQgLjNzO3RyYW5zaXRpb246d2lkdGggLjIzcyBlYXNlLWluLGJhY2tncm91bmQtY29sb3IgLjFzIGVh''@;'; put 'put ''c2Utb3V0IC4zc30ucHJvZ3Jlc3MuZmxhc2g+cHJvZ3Jlc3NbdmFsdWU9IjEwMCJde2NvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMSl9LnByb2dyZXNzLmZsYXNoPnByb2dyZXNzW3ZhbHVlPSIxMDAiXTo6LXdlYmtpdC1wcm9ncmVzcy12YWx1ZXtiYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMSl9LnByb2dyZXNzLmZsYXNoPnByb2dyZXNzW3ZhbHVlPSIxMDAiXTo6LW1vei1wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTEpfS5wcm9ncmVzcy5wcm9ncmVzcy1mYWRlLmZs''@;'; put 'put ''YXNoPnByb2dyZXNzW3ZhbHVlPSIxMDAiXSwucHJvZ3Jlc3MucHJvZ3Jlc3MtZmFkZS5mbGFzaD5wcm9ncmVzc1t2YWx1ZT0iMTAwIl0rc3BhbnthbmltYXRpb246Y2xyLXByb2dyZXNzLWZhZGUgLjZzIGxpbmVhciAxcyBmb3J3YXJkc30ucHJvZ3Jlc3MuZmxhc2gtZGFuZ2VyPnByb2dyZXNz''@;'; put 'put ''W3ZhbHVlPSIxMDAiXXtjb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTIpfS5wcm9ncmVzcy5mbGFzaC1kYW5nZXI+cHJvZ3Jlc3NbdmFsdWU9IjEwMCJdOjotd2Via2l0LXByb2dyZXNzLXZhbHVle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xv''@;'; put 'put ''ci0yKX0ucHJvZ3Jlc3MuZmxhc2gtZGFuZ2VyPnByb2dyZXNzW3ZhbHVlPSIxMDAiXTo6LW1vei1wcm9ncmVzcy1iYXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtYWx0LWNvbG9yLTIpfUBrZXlmcmFtZXMgY2xyLXByb2dyZXNzLWxvb3BlcnswJXtsZWZ0Oi0xMDAlfXRv''@;'; put 'put ''e2xlZnQ6MTAwJX19LnByb2dyZXNzLmxvb3B7cG9zaXRpb246cmVsYXRpdmV9LnByb2dyZXNzLmxvb3A+cHJvZ3Jlc3N7b3ZlcmZsb3c6aGlkZGVuO2NvbG9yOnRyYW5zcGFyZW50fS5wcm9ncmVzcy5sb29wPnByb2dyZXNzOjotd2Via2l0LXByb2dyZXNzLXZhbHVle2JhY2tncm91bmQtY29s''@;'; put 'put ''b3I6dHJhbnNwYXJlbnR9LnByb2dyZXNzLmxvb3A+cHJvZ3Jlc3M6Oi1tb3otcHJvZ3Jlc3MtYmFye2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LnByb2dyZXNzLmxvb3A6YWZ0ZXJ7YW5pbWF0aW9uOmNsci1wcm9ncmVzcy1sb29wZXIgMnMgZWFzZS1pbi1vdXQgaW5maW5pdGU7Y29u''@;'; put 'put ''dGVudDoiICI7dG9wOjA7Ym90dG9tOjA7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6YmxvY2s7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3MtZGVmYXVsdC1jb2xvcik7d2lkdGg6NTAlfS5wcm9ncmVzcy5sb29wLmRhbmdlcjphZnRlcntiYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMil9LnByb2dyZXNzLmxvb3Aud2FybmluZzphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMyl9LnByb2dyZXNzLmxvb3Auc3VjY2VzczphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1wcm9ncmVzcy1hbHQtY29sb3ItMSl9LnByb2dyZXNzLXN0YXRpY3twb3NpdGlvbjpyZWxhdGl2ZTtib3JkZXI6MDt3aWR0aDoxMDAlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWJnLWNvbG9yKTtkaXNw''@;'; put 'put ''bGF5OmJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjB9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWRlZmF1bHQtY29sb3IpO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0''@;'; put 'put ''ZTtkaXNwbGF5OmJsb2NrO3dpZHRoOjA7Y29udGVudDoiICJ9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIyIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+''@;'; put 'put ''LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjMiXTpiZWZvcmV7d2lkdGg6MiV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI1Il06YmVmb3JlLC5wcm9n''@;'; put 'put ''cmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjYiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNyJdOmJlZm9yZXt3aWR0aDo1JX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI4Il06''@;'; put 'put ''YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjkiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMTAiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0i''@;'; put 'put ''MTEiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMTIiXTpiZWZvcmV7d2lkdGg6MTAlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjEzIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1l''@;'; put 'put ''dGVyW2RhdGEtdmFsdWU9IjE0Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjE1Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjE2Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dy''@;'; put 'put ''ZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjE3Il06YmVmb3Jle3dpZHRoOjE1JX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIxOCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIxOSJdOmJlZm9yZSwucHJvZ3Jl''@;'; put 'put ''c3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIyMCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIyMSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIyMiJdOmJlZm9yZXt3''@;'; put 'put ''aWR0aDoyMCV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMjMiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMjQiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1''@;'; put 'put ''ZT0iMjUiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMjYiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMjciXTpiZWZvcmV7d2lkdGg6MjUlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNz''@;'; put 'put ''LW1ldGVyW2RhdGEtdmFsdWU9IjI4Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjI5Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjMwIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnBy''@;'; put 'put ''b2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjMxIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjMyIl06YmVmb3Jle3dpZHRoOjMwJX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzMyJdOmJlZm9yZSwucHJv''@;'; put 'put ''Z3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzNCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzNSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzNiJdOmJlZm9y''@;'; put 'put ''ZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSIzNyJdOmJlZm9yZXt3aWR0aDozNSV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iMzgiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12''@;'; put 'put ''YWx1ZT0iMzkiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNDAiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNDEiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJb''@;'; put 'put ''ZGF0YS12YWx1ZT0iNDIiXTpiZWZvcmV7d2lkdGg6NDAlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjQzIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjQ0Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+''@;'; put 'put ''LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjQ1Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjQ2Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjQ3Il06YmVmb3Jle3dpZHRoOjQ1JX0u''@;'; put 'put ''cHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI0OCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI0OSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI1MCJdOmJl''@;'; put 'put ''Zm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI1MSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI1MiJdOmJlZm9yZXt3aWR0aDo1MCV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0''@;'; put 'put ''YS12YWx1ZT0iNTMiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNTQiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNTUiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0''@;'; put 'put ''ZXJbZGF0YS12YWx1ZT0iNTYiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNTciXTpiZWZvcmV7d2lkdGg6NTUlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjU4Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0''@;'; put 'put ''aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjU5Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjYwIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjYxIl06YmVmb3JlLC5wcm9ncmVz''@;'; put 'put ''cy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjYyIl06YmVmb3Jle3dpZHRoOjYwJX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2MyJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2NCJd''@;'; put 'put ''OmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2NSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI2NiJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVl''@;'; put 'put ''PSI2NyJdOmJlZm9yZXt3aWR0aDo2NSV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNjgiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNjkiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3Mt''@;'; put 'put ''bWV0ZXJbZGF0YS12YWx1ZT0iNzAiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNzEiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iNzIiXTpiZWZvcmV7d2lkdGg6NzAlfS5wcm9ncmVzcy1z''@;'; put 'put ''dGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjczIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijc0Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijc1Il06YmVmb3JlLC5wcm9n''@;'; put 'put ''cmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijc2Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijc3Il06YmVmb3Jle3dpZHRoOjc1JX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3''@;'; put 'put ''OCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI3OSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI4MCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZh''@;'; put 'put ''bHVlPSI4MSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI4MiJdOmJlZm9yZXt3aWR0aDo4MCV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iODMiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jl''@;'; put 'put ''c3MtbWV0ZXJbZGF0YS12YWx1ZT0iODQiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iODUiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iODYiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4u''@;'; put 'put ''cHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iODciXTpiZWZvcmV7d2lkdGg6ODUlfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijg4Il06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9Ijg5Il06YmVmb3JlLC5w''@;'; put 'put ''cm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjkwIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjkxIl06YmVmb3JlLC5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjkyIl06YmVm''@;'; put 'put ''b3Jle3dpZHRoOjkwJX0ucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5MyJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5NCJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRh''@;'; put 'put ''LXZhbHVlPSI5NSJdOmJlZm9yZSwucHJvZ3Jlc3Mtc3RhdGljPi5wcm9ncmVzcy1tZXRlcltkYXRhLXZhbHVlPSI5NiJdOmJlZm9yZXt3aWR0aDo5NSV9LnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iOTciXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJv''@;'; put 'put ''Z3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iOTgiXTpiZWZvcmUsLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJbZGF0YS12YWx1ZT0iOTkiXTpiZWZvcmV7d2lkdGg6OTglfS5wcm9ncmVzcy1zdGF0aWM+LnByb2dyZXNzLW1ldGVyW2RhdGEtdmFsdWU9IjEwMCJdOmJlZm9yZXt3aWR0''@;'; put 'put ''aDoxMDAlfS5wcm9ncmVzcy1zdGF0aWMubGFiZWxlZD4ucHJvZ3Jlc3MtbWV0ZXJ7cmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSl9LnByb2dyZXNzLXN0YXRpYy5zdWNjZXNzPi5wcm9ncmVzcy1tZXRlcjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItcHJvZ3Jlc3Mt''@;'; put 'put ''YWx0LWNvbG9yLTEpfS5wcm9ncmVzcy1zdGF0aWMud2FybmluZz4ucHJvZ3Jlc3MtbWV0ZXI6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0zKX0ucHJvZ3Jlc3Mtc3RhdGljLmRhbmdlcj4ucHJvZ3Jlc3MtbWV0ZXI6YmVmb3Jle2JhY2tncm91''@;'; put 'put ''bmQtY29sb3I6dmFyKC0tY2xyLXByb2dyZXNzLWFsdC1jb2xvci0yKX0uY2FyZC1ibG9jayAucHJvZ3Jlc3MsLmNhcmQtYmxvY2sgLnByb2dyZXNzLXN0YXRpYywuY2FyZC1mb290ZXIgLnByb2dyZXNzLC5jYXJkLWZvb3RlciAucHJvZ3Jlc3Mtc3RhdGlje2hlaWdodDp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTMpO3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6MDttYXJnaW46Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpKSAwIDB9LmNhcmQtYmxvY2sgLnByb2dyZXNzLnRvcCwuY2FyZC1ibG9jayAucHJvZ3Jlc3Mtc3RhdGljLnRvcCwuY2FyZC1mb290ZXIgLnByb2dyZXNz''@;'; put 'put ''LnRvcCwuY2FyZC1mb290ZXIgLnByb2dyZXNzLXN0YXRpYy50b3B7bWFyZ2luLXRvcDowO3RvcDowO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6dmFyKC0tY2xyLWNhcmQtYm9yZGVyLXJhZGl1cywgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCkpO2JvcmRlci10b3At''@;'; put 'put ''cmlnaHQtcmFkaXVzOnZhcigtLWNsci1jYXJkLWJvcmRlci1yYWRpdXMsIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApKX0uY2FyZC1ibG9jayAucHJvZ3Jlc3M+cHJvZ3Jlc3MsLmNhcmQtYmxvY2sgLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXIsLmNh''@;'; put 'put ''cmQtZm9vdGVyIC5wcm9ncmVzcz5wcm9ncmVzcywuY2FyZC1mb290ZXIgLnByb2dyZXNzLXN0YXRpYz4ucHJvZ3Jlc3MtbWV0ZXJ7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7cG9zaXRpb246YWJzb2x1dGV9LnByb2dyZXNzLWJsb2Nre2Rpc3BsYXk6ZmxleDt3aWR0aDoxMDAl''@;'; put 'put ''O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2NvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1sYWJlbC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcp''@;'; put 'put ''fS5wcm9ncmVzcy1ibG9jaz4qe2ZsZXg6MCAwIGF1dG87cGFkZGluZy1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5wcm9ncmVzcy1ibG9jaz46bGFzdC1jaGlsZHtwYWRkaW5nLXJpZ2h0OjB9LnByb2dyZXNzLWJsb2NrPmxhYmVsLC5wcm9ncmVzcy1ibG9jaz5zcGFue21heC13''@;'; put 'put ''aWR0aDozMyV9LnByb2dyZXNzLWJsb2NrPi5wcm9ncmVzcywucHJvZ3Jlc3MtYmxvY2s+LnByb2dyZXNzLXN0YXRpY3tmbGV4OjAgMSBhdXRvfS5wcm9ncmVzcy1ibG9jaz4ucHJvZ3Jlc3MtZ3JvdXB7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2hlaWdodDphdXRvO2ZsZXg6MCAxIGF1dG87ZGlz''@;'; put 'put ''cGxheTpmbGV4O3dpZHRoOjEwMCV9LnByb2dyZXNzLWJsb2NrPi5wcm9ncmVzcy1ncm91cCAuY2xyLXJvd3ttYXJnaW4tbGVmdDowO21hcmdpbi1yaWdodDowO2NvbG9yOnZhcigtLWNsci1wcm9ncmVzcy1sYWJlbC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5''@;'; put 'put ''LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKX0ucHJvZ3Jlc3MtYmxvY2s+LnByb2dyZXNzLWdyb3VwIC5jbHItcm93PltjbGFzcyo9Y2xyLWNvbC1de3BhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MH0uY2FyZC1ibG9jayAucHJvZ3Jlc3MtYmxvY2t7bWFyZ2lu''@;'; put 'put ''LWJvdHRvbTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3BhZGRpbmc6MH0uY2FyZC1ibG9jayAucHJvZ3Jlc3MtYmxvY2s6bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrPmxhYmVse21heC13aWR0aDozMyV9LmNhcmQtYmxvY2sgLnByb2dy''@;'; put 'put ''ZXNzLWJsb2NrIC5wcm9ncmVzcywuY2FyZC1ibG9jayAucHJvZ3Jlc3MtYmxvY2sgLnByb2dyZXNzLXN0YXRpY3twb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTttYXJnaW4tdG9wOjB9LmNhcmQtYmxvY2sgLnByb2dyZXNzLWJsb2NrIC5wcm9ncmVz''@;'; put 'put ''cz5wcm9ncmVzcywuY2FyZC1ibG9jayAucHJvZ3Jlc3MtYmxvY2sgLnByb2dyZXNzPi5wcm9ncmVzcy1tZXRlciwuY2FyZC1ibG9jayAucHJvZ3Jlc3MtYmxvY2sgLnByb2dyZXNzLXN0YXRpYz5wcm9ncmVzcywuY2FyZC1ibG9jayAucHJvZ3Jlc3MtYmxvY2sgLnByb2dyZXNzLXN0YXRpYz4u''@;'; put 'put ''cHJvZ3Jlc3MtbWV0ZXJ7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9XzotbXMtaW5wdXQtcGxhY2Vob2xkZXIgLnByb2dyZXNzLWJsb2NrPmxhYmVsLDpyb290IC5wcm9ncmVzcy1ibG9jaz5sYWJlbHtkaXNwbGF5OmlubGluZS1ibG9ja306cm9vdCBbY2RzLXRoZW1lXXstLWNs''@;'; put 'put ''ci1zcGlubmVyLWRlZmF1bHQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTE0KTstLWNsci1zcGlubmVyLW1lZGl1bS1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpOy0tY2xyLXNwaW5uZXItc21hbGwtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpOy0tY2xyLXNwaW5u''@;'; put 'put ''ZXItaW5zaWRlLWJ1dHRvbi1zdHJva2Utd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTstLWNsci1zcGlubmVyLWluc2lkZS10cmVldmlldy1zdHJva2Utd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTstLWNsci1zcGlu''@;'; put 'put ''bmVyLWRlZmF1bHQtc3Ryb2tlLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCk7LS1jbHItc3Bpbm5lci1tZWRpdW0tc3Ryb2tlLXdpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTQwMCk7LS1jbHItc3Bpbm5lci1zbWFsbC1zdHJva2Utd2lkdGg6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMjAwKTstLWNsci1zcGlubmVyLWZpbGwtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC1zaGFkZSk7LS1jbHItc3Bpbm5lci1maWxsLWludmVyc2UtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC1pbnZlcnNlLXRpbnQpOy0tY2xyLXNwaW5uZXItZmlsbC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWluZm8pOy0tY2xyLXNwaW5uZXItZmlsbC1pbnZlcnNlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtaW5mby10aW50KTst''@;'; put 'put ''LWNsci1zcGlubmVyLWJvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTMwMCk7LS1jbHItc3Bpbm5lci1tYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX0uc3Bpbm5lcntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmlubGluZS1i''@;'; put 'put ''bG9jaztoZWlnaHQ6dmFyKC0tY2xyLXNwaW5uZXItZGVmYXVsdC1zaXplKTt3aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1kZWZhdWx0LXNpemUpO21pbi1oZWlnaHQ6dmFyKC0tY2xyLXNwaW5uZXItZGVmYXVsdC1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItZGVmYXVsdC1zaXpl''@;'; put 'put ''KTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNv''@;'; put 'put ''bmRhcnktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7YW5pbWF0aW9uOnNwaW4gMXMgbGluZWFyIGluZmluaXRlO21hcmdpbi1yaWdodDowO3BhZGRpbmc6MDt0ZXh0LWluZGVudDoxMDAlO292''@;'; put 'put ''ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXB9LnNwaW5uZXI6YWZ0ZXJ7Y29udGVudDoiIjtoZWlnaHQ6dmFyKC0tY2xyLXNwaW5uZXItZGVmYXVsdC1zaXplKTt3aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1kZWZhdWx0LXNpemUpO21pbi1oZWlnaHQ6dmFyKC0tY2xyLXNwaW5uZXIt''@;'; put 'put ''ZGVmYXVsdC1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItZGVmYXVsdC1zaXplKTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7Y2xpcC1wYXRoOmVsbGlwc2UoMTAwJSA1My41JSBhdCAwIDApO2JvcmRlcjp2YXIoLS1jbHItc3Bpbm5lci1kZWZhdWx0LXN0cm9rZS13''@;'; put 'put ''aWR0aCkgc29saWQgdmFyKC0tY2xyLXNwaW5uZXItZmlsbC1jb2xvcik7Ym9yZGVyLXJpZ2h0LWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1ib3R0b20tY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItc3Bpbm5lci1ib3JkZXItcmFkaXVzKX0uc3Bpbm5lcjpiZWZv''@;'; put 'put ''cmV7Y29udGVudDoiIjtoZWlnaHQ6dmFyKC0tY2xyLXNwaW5uZXItZGVmYXVsdC1zaXplKTt3aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1kZWZhdWx0LXNpemUpO21pbi1oZWlnaHQ6dmFyKC0tY2xyLXNwaW5uZXItZGVmYXVsdC1zaXplKTttaW4td2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItZGVm''@;'; put 'put ''YXVsdC1zaXplKTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7Ym9yZGVyOnZhcigtLWNsci1zcGlubmVyLWRlZmF1bHQtc3Ryb2tlLXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItc3Bpbm5lci1maWxsLWJnLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNsci1zcGlubmVyLWJvcmRl''@;'; put 'put ''ci1yYWRpdXMpfS5zcGlubmVyLnNwaW5uZXItbWR7aGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLW1lZGl1bS1zaXplKTt3aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1tZWRpdW0tc2l6ZSk7bWluLWhlaWdodDp2YXIoLS1jbHItc3Bpbm5lci1tZWRpdW0tc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNs''@;'; put 'put ''ci1zcGlubmVyLW1lZGl1bS1zaXplKX0uc3Bpbm5lci5zcGlubmVyLW1kOmJlZm9yZSwuc3Bpbm5lci5zcGlubmVyLW1kOmFmdGVye2hlaWdodDp2YXIoLS1jbHItc3Bpbm5lci1tZWRpdW0tc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItbWVkaXVtLXNpemUpO21pbi1oZWlnaHQ6dmFy''@;'; put 'put ''KC0tY2xyLXNwaW5uZXItbWVkaXVtLXNpemUpO21pbi13aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1tZWRpdW0tc2l6ZSk7Ym9yZGVyLXdpZHRoOnZhcigtLWNsci1zcGlubmVyLW1lZGl1bS1zdHJva2Utd2lkdGgpfS5zcGlubmVyLnNwaW5uZXItaW5saW5lLC5zcGlubmVyLnNwaW5uZXItc217''@;'; put 'put ''aGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLXNtYWxsLXNpemUpO3dpZHRoOnZhcigtLWNsci1zcGlubmVyLXNtYWxsLXNpemUpO21pbi1oZWlnaHQ6dmFyKC0tY2xyLXNwaW5uZXItc21hbGwtc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1zcGlubmVyLXNtYWxsLXNpemUpfS5zcGlubmVyLnNw''@;'; put 'put ''aW5uZXItaW5saW5lOmJlZm9yZSwuc3Bpbm5lci5zcGlubmVyLWlubGluZTphZnRlciwuc3Bpbm5lci5zcGlubmVyLXNtOmJlZm9yZSwuc3Bpbm5lci5zcGlubmVyLXNtOmFmdGVye2hlaWdodDp2YXIoLS1jbHItc3Bpbm5lci1zbWFsbC1zaXplKTt3aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1z''@;'; put 'put ''bWFsbC1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1zcGlubmVyLXNtYWxsLXNpemUpO21pbi13aWR0aDp2YXIoLS1jbHItc3Bpbm5lci1zbWFsbC1zaXplKTtib3JkZXItd2lkdGg6dmFyKC0tY2xyLXNwaW5uZXItc21hbGwtc3Ryb2tlLXdpZHRoKX0uc3Bpbm5lci5zcGlubmVyLWlubGlu''@;'; put 'put ''ZXt2ZXJ0aWNhbC1hbGlnbjp0ZXh0LWJvdHRvbTttYXJnaW4tcmlnaHQ6dmFyKC0tY2xyLXNwaW5uZXItbWFyZ2luLXJpZ2h0KX0uc3Bpbm5lci5zcGlubmVyLWludmVyc2U6YmVmb3Jle2JvcmRlci1jb2xvcjp2YXIoLS1jbHItc3Bpbm5lci1maWxsLWludmVyc2UtYmctY29sb3IpfS5zcGlu''@;'; put 'put ''bmVyLnNwaW5uZXItaW52ZXJzZTphZnRlcntib3JkZXItY29sb3I6dmFyKC0tY2xyLXNwaW5uZXItZmlsbC1pbnZlcnNlLWNvbG9yKTtib3JkZXItcmlnaHQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp0cmFuc3BhcmVudH0uc3Bpbm5lci5zcGlubmVyLW5ldXRyYWwt''@;'; put 'put ''MDpiZWZvcmV7Ym9yZGVyLWNvbG9yOiMwMDB9LnNwaW5uZXIuc3Bpbm5lci1uZXV0cmFsLTA6YWZ0ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1zcGlubmVyLWZpbGwtY29sb3IpO2JvcmRlci1yaWdodC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItYm90dG9tLWNvbG9yOnRyYW5zcGFyZW50''@;'; put 'put ''fS5zcGlubmVyLnNwaW5uZXItY2hlY2t7YW5pbWF0aW9uOm5vbmU7bWFzazp1cmwoZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB2ZXJzaW9uJTNEJTIyMS4xJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMzYlMjAzNiUyMiUyMHByZXNlcnZlQXNwZWN0UmF0aW8l''@;'; put 'put ''M0QlMjJ4TWlkWU1pZCUyMG1lZXQlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHhtbG5zJTNBeGxpbmslM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjE5OTklMkZ4bGluayUyMiUyMGZvY3VzYWJsZSUzRCUyMmZhbHNlJTIy''@;'; put 'put ''JTIwYXJpYS1oaWRkZW4lM0QlMjJ0cnVlJTIyJTIwcm9sZSUzRCUyMmltZyUyMiUzRSUzQ3BhdGglMjBmaWxsJTNEJTIyJTIzNzQ3NDc0JTIyJTIwY2xhc3MlM0QlMjJjbHItaS1vdXRsaW5lJTIwY2xyLWktb3V0bGluZS1wYXRoLTElMjIlMjBkJTNEJTIyTTEzLjcyJTJDMjcuNjklMkMzLjI5''@;'; put 'put ''JTJDMTcuMjdhMSUyQzElMkMwJTJDMCUyQzElMkMxLjQxLTEuNDFsOSUyQzlMMzEuMjklMkM3LjI5YTElMkMxJTJDMCUyQzAlMkMxJTJDMS40MSUyQzEuNDFaJTIyJTNFJTNDJTJGcGF0aCUzRSUzQyUyRnN2ZyUzRSk7LXdlYmtpdC1tYXNrLXJlcGVhdDpuby1yZXBlYXQ7bWFzay1yZXBlYXQ6''@;'; put 'put ''bm8tcmVwZWF0O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWJ0bi1zdWNjZXNzLWNoZWNrZWQtY29sb3IpfS5zcGlubmVyLnNwaW5uZXItY2hlY2s6YWZ0ZXIsLnNwaW5uZXIuc3Bpbm5lci1jaGVjazpiZWZvcmV7Ym9yZGVyOjB9LmJ0biAuc3Bpbm5lcnttYXJnaW4tcmlnaHQ6MDtoZWln''@;'; put 'put ''aHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uYnRuIC5zcGlubmVyOmJlZm9yZSwuYnRuIC5zcGlu''@;'; put 'put ''bmVyOmFmdGVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2JvcmRlci13aWR0aDp2YXIo''@;'; put 'put ''LS1jbHItc3Bpbm5lci1pbnNpZGUtYnV0dG9uLXN0cm9rZS13aWR0aCl9LmJ0bi1pY29uOm5vdCguYnRuLXNtKSAuc3Bpbm5lcntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLXRyZWVub2RlLXNwaW5uZXItY29udGFpbmVyIC5zcGlubmVye2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLWhlaWdodDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jbHItdHJlZW5vZGUtc3Bpbm5lci1jb250YWluZXIgLnNwaW5uZXI6YmVmb3JlLC5jbHItdHJlZW5vZGUtc3Bpbm5lci1jb250YWluZXIgLnNwaW5uZXI6YWZ0ZXJ7aGVpZ2h0OnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7Ym9yZGVyLXdpZHRoOnZhcigtLWNsci1zcGlubmVyLWluc2lk''@;'; put 'put ''ZS10cmVldmlldy1zdHJva2Utd2lkdGgpfUBrZXlmcmFtZXMgc3BpbnswJXt0cmFuc2Zvcm06cm90YXRlKDApfXRve3RyYW5zZm9ybTpyb3RhdGUoMzYwZGVnKX19OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItdGFibGUtYm9yZGVyd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXIt''@;'; put 'put ''d2lkdGgtMTAwKTstLWNsci10YWJsZS1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLXRhYmxlLWNvcm5lcmNlbGxyYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItdGFibGUtY2Vs''@;'; put 'put ''bC1wYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTstLWNsci10YWJsZS1jZWxsLWNvbXBhY3QtcGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItdGFibGUtbm9ib3Jk''@;'; put 'put ''ZXItYm9yZGVyd2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0wKTstLWNsci10YWJsZS1kYXRhLWNlbGwtZm9udC1zaXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXNpemUtNCk7LS1jbHItdGFibGUtZGF0YS1jZWxsLWxpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtNyk7LS1jbHItdGFibGUtZGF0YS1jZWxsLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1yZWd1bGFyKTstLWNsci10YWJsZS1oZWFkZXItY2VsbC1mb250LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS0x''@;'; put 'put ''KTstLWNsci10YWJsZS1oZWFkZXItY2VsbC1saW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLXRhYmxlLWhlYWRlci1jZWxsLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7LS1jbHItdGFibGUtYmdj''@;'; put 'put ''b2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTstLWNsci10aGVhZC1iZ2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtdGludCk7LS1jbHItdGFibGUtaGVhZGVyLWJvcmRlci1ib3R0b20tY29sb3I6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpOy0tY2xyLXRhYmxlLWZvb3Rlci1ib3JkZXItdG9wLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci10YWJsZS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3Ip''@;'; put 'put ''Oy0tY2xyLXRhYmxlcm93LWJvcmRlcmNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci10YWJsZS1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItdGFibGUtbWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtOSkgMCAwIDA7LS1jbHItdGhlYWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci10YWJsZS1zbWFsbHBhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KTstLWNsci10YWJsZS1ib3R0b21jZWxscGFkZGluZzpjYWxjKHZhcigtLWNsci10''@;'; put 'put ''YWJsZS1jZWxscGFkZGluZykgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKTstLWNsci10YWJsZS10b3BjZWxscGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpOy0tY2xyLXRhYmxlLWZvbnRzaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNp''@;'; put 'put ''emUpOy0tY2xyLXRhYmxlLWxpbmVoZWlnaHQ6bWl4aW5zLmJhc2VsaW5lUHgoMTQpOy0tY2xyLXRhYmxlLWNlbGxwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7LS1jbHItdGFibGUtY29tcGFjdC1yb3ctaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7LS1jbHItdGFi''@;'; put 'put ''bGUtY29tcGFjdC12ZXJ0aWNhbC1wYWRkaW5nOmNhbGMoICh2YXIoLS1jbHItdGFibGUtY29tcGFjdC1yb3ctaGVpZ2h0KSAtIHZhcigtLWNsci10YWJsZS1saW5laGVpZ2h0KSkgKiAuNSApfS50YWJsZXtib3JkZXItY29sbGFwc2U6c2VwYXJhdGU7Ym9yZGVyOnZhcigtLWNsci10YWJsZS1i''@;'; put 'put ''b3JkZXJ3aWR0aCkgc29saWQgdmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItdGFibGUtYm9yZGVyLXJhZGl1cyk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYmdjb2xvcik7Y29sb3I6dmFyKC0tY2xyLXRhYmxlLWZvbnQtY29s''@;'; put 'put ''b3IpO21hcmdpbjp2YXIoLS1jbHItdGFibGUtbWFyZ2luKTttYXgtd2lkdGg6MTAwJTt3aWR0aDoxMDAlfS50YWJsZSB0aCwudGFibGUgdGR7Ym9yZGVyLXRvcC1zdHlsZTpzb2xpZDtib3JkZXItdG9wLXdpZHRoOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3aWR0aCk7Ym9yZGVyLXRvcC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItdGFibGVyb3ctYm9yZGVyY29sb3IpO3BhZGRpbmc6dmFyKC0tY2xyLXRhYmxlLWNlbGwtcGFkZGluZyk7dGV4dC1hbGlnbjpjZW50ZXI7dmVydGljYWwtYWxpZ246dG9wfS50YWJsZSB0aC5sZWZ0LC50YWJsZSB0ZC5sZWZ0e3RleHQtYWxpZ246bGVmdH0udGFibGUgdGgu''@;'; put 'put ''bGVmdDpmaXJzdC1jaGlsZCwudGFibGUgdGQubGVmdDpmaXJzdC1jaGlsZHtwYWRkaW5nLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0udGFibGUgdGgucmlnaHQsLnRhYmxlIHRkLnJpZ2h0e3RleHQtYWxpZ246cmlnaHR9LnRhYmxlIHRke21pbi1oZWlnaHQ6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS0xMCk7Zm9udC1zaXplOnZhcigtLWNsci10YWJsZS1kYXRhLWNlbGwtZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItdGFibGUtZGF0YS1jZWxsLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jbHItdGFibGUtZGF0YS1jZWxsLWxpbmUtaGVpZ2h0KTts''@;'; put 'put ''ZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpfS50YWJsZSB0aHtjb2xvcjp2YXIoLS1jbHItdGhlYWQtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9u''@;'; put 'put ''dC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRp''@;'; put 'put ''b24tbGV0dGVyLXNwYWNpbmcpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRoZWFkLWJnY29sb3IpO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtib3JkZXItYm90dG9tLXN0eWxlOnNvbGlkO2JvcmRlci1ib3R0b20td2lkdGg6dmFyKC0tY2xyLXRhYmxlLWJvcmRlcndpZHRoKTtib3JkZXIt''@;'; put 'put ''Ym90dG9tLWNvbG9yOnZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IpO2JvcmRlci10b3A6MCBub25lfS50YWJsZSB0Ym9keSB0cjpmaXJzdC1jaGlsZCB0ZHtib3JkZXItdG9wOjAgbm9uZX0udGFibGUgdGJvZHkrdGJvZHl7Ym9yZGVyLXRvcC1zdHlsZTpzb2xpZDtib3JkZXItdG9wLXdp''@;'; put 'put ''ZHRoOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3aWR0aCk7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yKX0udGFibGUgdGhlYWQgdGg6Zmlyc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNv''@;'; put 'put ''cm5lcmNlbGxyYWRpdXMpfS50YWJsZSB0aGVhZCB0aDpsYXN0LWNoaWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1jbHItdGFibGUtY29ybmVyY2VsbHJhZGl1cyl9LnRhYmxlIHRib2R5Omxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1j''@;'; put 'put ''aGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1jbHItdGFibGUtY29ybmVyY2VsbHJhZGl1cyl9LnRhYmxlIHRib2R5Omxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZCB0ZDpsYXN0LWNoaWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJp''@;'; put 'put ''Z2h0LXJhZGl1czp2YXIoLS1jbHItdGFibGUtY29ybmVyY2VsbHJhZGl1cyl9LnRhYmxlLWNvbXBhY3QgdGgsLnRhYmxlLWNvbXBhY3QgdGR7bWluLWhlaWdodDp2YXIoLS1jbHItdGFibGUtY29tcGFjdC1yb3ctaGVpZ2h0KTtwYWRkaW5nOnZhcigtLWNsci10YWJsZS1jZWxsLWNvbXBhY3Qt''@;'; put 'put ''cGFkZGluZyl9LnRhYmxlLnRhYmxlLXZlcnRpY2FsIHRoZWFkIHRoe2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtkaXNwbGF5Om5vbmV9LnRhYmxlLnRhYmxlLXZlcnRpY2FsIHRoe2JvcmRlci1ib3R0b206MDtib3JkZXItdG9wLXN0eWxlOnNvbGlkO2JvcmRlci10b3Atd2lkdGg6dmFyKC0t''@;'; put 'put ''Y2xyLXRhYmxlLWJvcmRlcndpZHRoKTtib3JkZXItdG9wLWNvbG9yOnZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IpO3ZlcnRpY2FsLWFsaWduOnRvcH0udGFibGUudGFibGUtdmVydGljYWwgdGQsLnRhYmxlLnRhYmxlLXZlcnRpY2FsIHRoe3RleHQtYWxpZ246bGVmdDtib3JkZXItY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcil9LnRhYmxlLnRhYmxlLXZlcnRpY2FsIHRkOmZpcnN0LWNoaWxkLC50YWJsZS50YWJsZS12ZXJ0aWNhbCB0aDpmaXJzdC1jaGlsZHtib3JkZXItcmlnaHQtc3R5bGU6c29saWQ7Ym9yZGVyLXJpZ2h0LXdpZHRoOnZhcigtLWNsci10YWJs''@;'; put 'put ''ZS1ib3JkZXJ3aWR0aCk7Ym9yZGVyLXJpZ2h0LWNvbG9yOnZhcigtLWNsci10YWJsZS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRoZWFkLWJnY29sb3IpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9s''@;'; put 'put ''ZCl9LnRhYmxlLnRhYmxlLXZlcnRpY2FsIHRib2R5OmZpcnN0LW9mLXR5cGUgdHI6Zmlyc3QtY2hpbGQgdGgsLnRhYmxlLnRhYmxlLXZlcnRpY2FsIHRib2R5OmZpcnN0LW9mLXR5cGUgdHI6Zmlyc3QtY2hpbGQgdGR7Ym9yZGVyLXRvcDowIG5vbmV9LnRhYmxlLnRhYmxlLXZlcnRpY2FsIHRi''@;'; put 'put ''b2R5OmZpcnN0LW9mLXR5cGUgdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsLnRhYmxlLnRhYmxlLXZlcnRpY2FsIHRib2R5OmZpcnN0LW9mLXR5cGUgdHI6Zmlyc3QtY2hpbGQgdGQ6Zmlyc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6dmFyKC0t''@;'; put 'put ''Y2xyLXRhYmxlLWNvcm5lcmNlbGxyYWRpdXMpfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpmaXJzdC1vZi10eXBlIHRyOmZpcnN0LWNoaWxkIHRoOmxhc3QtY2hpbGQsLnRhYmxlLnRhYmxlLXZlcnRpY2FsIHRib2R5OmZpcnN0LW9mLXR5cGUgdHI6Zmlyc3QtY2hpbGQgdGQ6bGFzdC1j''@;'; put 'put ''aGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNlbGxyYWRpdXMpfS50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQsLnRhYmxlLnRhYmxlLXZlcnRp''@;'; put 'put ''Y2FsIHRib2R5Omxhc3QtY2hpbGQgdHI6bGFzdC1jaGlsZCB0ZDpmaXJzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1jbHItdGFibGUtY29ybmVyY2VsbHJhZGl1cyl9LnRhYmxlLnRhYmxlLXZlcnRpY2FsIHRib2R5Omxhc3QtY2hpbGQg''@;'; put 'put ''dHI6bGFzdC1jaGlsZCB0aDpsYXN0LWNoaWxkLC50YWJsZS50YWJsZS12ZXJ0aWNhbCB0Ym9keTpsYXN0LWNoaWxkIHRyOmxhc3QtY2hpbGQgdGQ6bGFzdC1jaGlsZHtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNlbGxy''@;'; put 'put ''YWRpdXMpfS50YWJsZS50YWJsZS1ub2JvcmRlcntib3JkZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXdpZHRoOjB9LnRhYmxlLnRhYmxlLW5vYm9yZGVyIHRoe2JvcmRlci1ib3R0b20tY29sb3I6dHJhbnNwYXJlbnQ7Ym9y''@;'; put 'put ''ZGVyLXRvcDowIG5vbmV9LnRhYmxlLnRhYmxlLW5vYm9yZGVyIHRoOmZpcnN0LWNoaWxke2JvcmRlci1yaWdodDowIG5vbmV9LnRhYmxlLnRhYmxlLW5vYm9yZGVyIHRke2JvcmRlci10b3A6MCBub25lO3BhZGRpbmctdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9LnRhYmxlLnRhYmxl''@;'; put 'put ''LW5vYm9yZGVyIHRkOmZpcnN0LWNoaWxke2JvcmRlci1yaWdodDowIG5vbmV9LnRhYmxlLnRhYmxlLW5vYm9yZGVyIHRoZWFkIHRoOmZpcnN0LWNoaWxkLC50YWJsZS50YWJsZS1ub2JvcmRlciB0aGVhZCB0aDpsYXN0LWNoaWxke2JvcmRlci1yYWRpdXM6MH0udGFibGUudGFibGUtbm9ib3Jk''@;'; put 'put ''ZXIgdGgsLnRhYmxlLnRhYmxlLW5vYm9yZGVyIHRke2JvcmRlci1yYWRpdXM6MCFpbXBvcnRhbnR9LnRhYmxlLnRhYmxlLW5vYm9yZGVyIHRoOmZpcnN0LWNoaWxkLC50YWJsZS50YWJsZS1ub2JvcmRlciB0ZDpmaXJzdC1jaGlsZHtwYWRkaW5nLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS03KX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLXRvb2x0aXAtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItMTAwKTstLWNs''@;'; put 'put ''ci10b29sdGlwLWJvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItdG9vbHRpcC1mb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktYm9keS1mb250LXdlaWdodCl9LnRvb2x0aXB7ZGlzcGxheTppbmxpbmUtYmxv''@;'; put 'put ''Y2s7cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpsZWZ0O292ZXJmbG93OnZpc2libGV9LnRvb2x0aXA+LnRvb2x0aXAtY29udGVudHt2aXNpYmlsaXR5OmhpZGRlbjtvcGFjaXR5OjA7dHJhbnNpdGlvbjpvcGFjaXR5IC4zcyBsaW5lYXI7d2hpdGUtc3BhY2U6bm9ybWFsO3otaW5kZXg6''@;'; put 'put ''MTA1MH0udG9vbHRpcD4udG9vbHRpcC1jb250ZW50OmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO2luc2V0Oi0yMHB4O2NvbnRlbnQ6IiI7ei1pbmRleDotMX0udG9vbHRpcD4udG9vbHRpcC1jb250ZW50IGxpe2NvbG9yOmluaGVyaXR9LnRvb2x0aXA6aG92ZXI+LnRvb2x0aXAtY29udGVudCwu''@;'; put 'put ''dG9vbHRpcDpmb2N1cz4udG9vbHRpcC1jb250ZW50e3Zpc2liaWxpdHk6dmlzaWJsZTtvcGFjaXR5OjF9LnRvb2x0aXA6aG92ZXI+LnRvb2x0aXAtY29udGVudDplbXB0eSwudG9vbHRpcDpmb2N1cz4udG9vbHRpcC1jb250ZW50OmVtcHR5e3Zpc2liaWxpdHk6aGlkZGVuO29wYWNpdHk6MH0u''@;'; put 'put ''dG9vbHRpcDpmb2N1c3tvdXRsaW5lOjB9LnRvb2x0aXA6Zm9jdXM+OmZpcnN0LWNoaWxke291dGxpbmUtb2Zmc2V0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZS1vZmZzZXQpO291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRs''@;'; put 'put ''aW5lKX0udG9vbHRpcD4udG9vbHRpcC1jb250ZW50LC50b29sdGlwLnRvb2x0aXAtdG9wLXJpZ2h0Pi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLXRvcC1yaWdodHttYXJnaW46MDt3aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LWJhc2UpKSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItdG9vbHRpcC1ib3JkZXItcmFkaXVzKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7Y29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItdG9vbHRpcC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtwb3NpdGlvbjphYnNvbHV0ZTtpbnNldDphdXRvIGF1dG8gMTAwJSA1MCU7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowO21hcmdpbi1ib3R0b206Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpICsgdmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS01KSl9LnRvb2x0aXA+LnRvb2x0aXAtY29udGVudDpiZWZvcmUsLnRvb2x0aXAudG9vbHRpcC10b3AtcmlnaHQ+LnRvb2x0aXAtY29udGVudDpiZWZvcmUsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLXRvcC1yaWdodDpiZWZvcmV7Y29udGVudDoi''@;'; put 'put ''Ijtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lO2xlZnQ6MDt0b3A6YXV0bztyaWdodDphdXRvO2JvdHRvbTpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikpO2JvcmRlci1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdmFyKC0tY2xyLXRv''@;'; put 'put ''b2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB0cmFuc3BhcmVudDtib3Jk''@;'; put 'put ''ZXItcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB0cmFuc3BhcmVudH0udG9vbHRpcC50b29sdGlwLXRvcC1sZWZ0Pi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLXRvcC1sZWZ0e21hcmdpbjowO3dpZHRoOmNhbGMoMjQwKigx''@;'; put 'put ''cmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtib3JkZXItcmFkaXVzOnZhcigtLWNsci10b29sdGlwLWJvcmRlci1yYWRpdXMpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtjb2xvcjp2YXIoLS1jbHItdG9vbHRpcC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1j''@;'; put 'put ''bHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci10b29sdGlwLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xl''@;'; put 'put ''dHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OmF1dG8gNTAlIDEwMCUgYXV0bztib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowO21hcmdpbi1ib3R0b206Y2FsYyh2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTYpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9LnRvb2x0aXAudG9vbHRpcC10b3AtbGVmdD4udG9vbHRpcC1jb250ZW50OmJlZm9yZSwudG9vbHRpcCAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtdG9wLWxlZnQ6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJz''@;'; put 'put ''b2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTtyaWdodDowO3RvcDphdXRvO2xlZnQ6YXV0bztib3R0b206Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKTtib3JkZXItcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yKTtib3JkZXItdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1sZWZ0OnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdHJhbnNwYXJlbnR9LnRvb2x0aXAudG9vbHRpcC1ib3R0b20tcmlnaHQ+LnRvb2x0aXAtY29udGVudCwudG9vbHRpcCAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtYm90dG9tLXJpZ2h0e21hcmdpbjowO3dpZHRoOmNhbGMoMjQwKigxcmVtL3Zh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtYmFzZSkpKTtib3JkZXItcmFkaXVzOnZhcigtLWNsci10b29sdGlwLWJvcmRlci1yYWRpdXMpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtjb2xvcjp2YXIoLS1jbHItdG9vbHRpcC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdG9v''@;'; put 'put ''bHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci10b29sdGlwLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1z''@;'; put 'put ''cGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpO3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjEwMCUgYXV0byBhdXRvIDUwJTtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7bWFyZ2luLXRvcDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikg''@;'; put 'put ''KyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpKX0udG9vbHRpcC50b29sdGlwLWJvdHRvbS1yaWdodD4udG9vbHRpcC1jb250ZW50OmJlZm9yZSwudG9vbHRpcCAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtYm90dG9tLXJpZ2h0OmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRl''@;'; put 'put ''O3BvaW50ZXItZXZlbnRzOm5vbmU7bGVmdDowO2JvdHRvbTphdXRvO3JpZ2h0OmF1dG87dG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSk7Ym9yZGVyLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yKTtib3JkZXItYm90dG9tOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTUpIHNvbGlkIHRyYW5zcGFyZW50fS50b29sdGlwLnRvb2x0aXAtYm90dG9tLWxlZnQ+LnRvb2x0aXAtY29udGVudCwudG9vbHRpcCAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtYm90dG9tLWxlZnR7bWFyZ2luOjA7d2lkdGg6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1iYXNlKSkpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXRvb2x0aXAtYm9yZGVyLXJhZGl1cyk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2NvbG9yOnZhcigtLWNsci10b29sdGlwLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10b29sdGlwLWJh''@;'; put 'put ''Y2tncm91bmQtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLXRvb2x0aXAtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bGV0dGVyLXNwYWNpbmc6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyk7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MTAwJSA1MCUgYXV0byBhdXRvO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7bWFyZ2luLXRvcDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgKyB2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTUpKX0udG9vbHRpcC50b29sdGlwLWJvdHRvbS1sZWZ0Pi50b29sdGlwLWNvbnRlbnQ6YmVmb3JlLC50b29sdGlwIC50b29sdGlwLWNvbnRlbnQudG9vbHRpcC1ib3R0b20tbGVmdDpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVy''@;'; put 'put ''LWV2ZW50czpub25lO3JpZ2h0OjA7Ym90dG9tOmF1dG87bGVmdDphdXRvO3RvcDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikpO2JvcmRlci1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHZhcigtLWNsci10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO2Jv''@;'; put 'put ''cmRlci1ib3R0b206dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1z''@;'; put 'put ''cGFjZS01KSBzb2xpZCB0cmFuc3BhcmVudH0udG9vbHRpcC50b29sdGlwLXJpZ2h0Pi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLXJpZ2h0e3Bvc2l0aW9uOmFic29sdXRlO2luc2V0OjUwJSBhdXRvIGF1dG8gMTAwJTttYXJnaW46MDt3aWR0aDpj''@;'; put 'put ''YWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItdG9vbHRpcC1ib3JkZXItcmFkaXVzKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7Y29sb3I6dmFyKC0tY2xyLXRvb2x0aXAtY29sb3IpO2JhY2tncm91bmQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItdG9vbHRpcC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1z''@;'; put 'put ''cGFjZS03KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKTtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjA7bWFyZ2luLWxlZnQ6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01''@;'; put 'put ''KSl9LnRvb2x0aXAudG9vbHRpcC1yaWdodD4udG9vbHRpcC1jb250ZW50OmJlZm9yZSwudG9vbHRpcCAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtcmlnaHQ6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6bm9uZTt0b3A6MDtib3R0b206YXV0bzty''@;'; put 'put ''aWdodDphdXRvO2xlZnQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKTtib3JkZXItdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2Ut''@;'; put 'put ''NSkgc29saWQgdmFyKC0tY2xyLXRvb2x0aXAtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdHJhbnNwYXJlbnR9LnRvb2x0''@;'; put 'put ''aXAudG9vbHRpcC1sZWZ0Pi50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLWxlZnR7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6NTAlIDEwMCUgYXV0byBhdXRvO21hcmdpbjowO3dpZHRoOmNhbGMoMjQwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFz''@;'; put 'put ''ZSkpKTtib3JkZXItcmFkaXVzOnZhcigtLWNsci10b29sdGlwLWJvcmRlci1yYWRpdXMpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtjb2xvcjp2YXIoLS1jbHItdG9vbHRpcC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci10b29sdGlwLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjA7bWFyZ2luLXJpZ2h0OmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpfS50b29sdGlwLnRvb2x0aXAtbGVmdD4udG9vbHRp''@;'; put 'put ''cC1jb250ZW50OmJlZm9yZSwudG9vbHRpcCAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtbGVmdDpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtwb2ludGVyLWV2ZW50czpub25lO3RvcDowO2JvdHRvbTphdXRvO2xlZnQ6YXV0bztyaWdodDpjYWxjKC0xKnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtNikpO2JvcmRlci10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB2YXIoLS1jbHItdG9vbHRpcC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHZhcigtLWNsci10b29sdGlwLWJhY2tncm91''@;'; put 'put ''bmQtY29sb3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB0cmFuc3BhcmVudDtib3JkZXItcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSBzb2xpZCB0cmFuc3BhcmVudH0udG9vbHRpcC50b29sdGlwLXhzPi50b29sdGlwLWNvbnRlbnQsLnRv''@;'; put 'put ''b2x0aXAgLnRvb2x0aXAtY29udGVudC50b29sdGlwLXhze3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTQpfS50b29sdGlwLnRvb2x0aXAtc20+LnRvb2x0aXAtY29udGVudCwudG9vbHRpcCAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtc217d2lkdGg6Y2FsYygxMjAqKDFyZW0vdmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1iYXNlKSkpfS50b29sdGlwLnRvb2x0aXAtbWQ+LnRvb2x0aXAtY29udGVudCwudG9vbHRpcCAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtbWR7d2lkdGg6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS50b29sdGlwLnRvb2x0aXAtbGc+LnRv''@;'; put 'put ''b2x0aXAtY29udGVudCwudG9vbHRpcCAudG9vbHRpcC1jb250ZW50LnRvb2x0aXAtbGd7d2lkdGg6Y2FsYygzNjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS50b29sdGlwPi5idG4rLnRvb2x0aXAtY29udGVudCwudG9vbHRpcC50b29sdGlwLXRvcC1yaWdodD4uYnRuKy50b29s''@;'; put 'put ''dGlwLWNvbnRlbnQsLnRvb2x0aXAudG9vbHRpcC10b3AtbGVmdD4uYnRuKy50b29sdGlwLWNvbnRlbnR7bWFyZ2luLWJvdHRvbTpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIC0gdmFyKC0tY2xyLWJ0bi12ZXJ0aWNhbC1tYXJnaW4p''@;'; put 'put ''KX0udG9vbHRpcC50b29sdGlwLWJvdHRvbS1yaWdodD4uYnRuKy50b29sdGlwLWNvbnRlbnQsLnRvb2x0aXAudG9vbHRpcC1ib3R0b20tbGVmdD4uYnRuKy50b29sdGlwLWNvbnRlbnR7bWFyZ2luLXRvcDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgKyB2YXIoLS1jZHMtZ2xvYmFs''@;'; put 'put ''LXNwYWNlLTUpIC0gdmFyKC0tY2xyLWJ0bi12ZXJ0aWNhbC1tYXJnaW4pKX0udG9vbHRpcC50b29sdGlwLXJpZ2h0Pi5idG4rLnRvb2x0aXAtY29udGVudHttYXJnaW4tbGVmdDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIC0gdmFy''@;'; put 'put ''KC0tY2xyLWJ0bi1ob3Jpem9udGFsLW1hcmdpbikpfS50b29sdGlwPi5jbHItaWNvbnttYXJnaW4tcmlnaHQ6MH0udG9vbHRpcD5zdmd7cG9pbnRlci1ldmVudHM6bm9uZX0udG9vbHRpcC10cmlnZ2VyOmZvY3VzKy50b29sdGlwLWNvbnRlbnR7dmlzaWJpbGl0eTp2aXNpYmxlfTpyb290IFtj''@;'; put 'put ''ZHMtdGhlbWVdey0tY2xyLWZvcm1zLWJhc2VsaW5lOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCk7LS1jbHItZm9ybXMtaWNvbi1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7LS1jbHItZm9ybS1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qt''@;'; put 'put ''aW50ZXJhY3Rpb24tYmFja2dyb3VuZCk7LS1jbHItZm9ybXMtbGFiZWwtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1mb3Jtcy10ZXh0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItZm9ybXMtaW52YWxp''@;'; put 'put ''ZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7LS1jbHItZm9ybXMtaW52YWxpZC10ZXh0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyKTstLWNsci1mb3Jtcy12YWxpZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLWZv''@;'; put 'put ''cm1zLXZhbGlkLXRleHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzKTstLWNsci1mb3Jtcy1zdWJ0ZXh0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTMwMCk7LS1jbHItZm9ybXMtcGxhY2Vob2xkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5''@;'; put 'put ''cG9ncmFwaHktY29sb3ItMjAwKTstLWNsci1mb3Jtcy1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1ib3JkZXItY29sb3IpOy0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5k''@;'; put 'put ''LWhpZ2hsaWdodCk7LS1jbHItZm9ybXMtc3VidGV4dC1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItZm9ybXMtYm9yZGVyLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJs''@;'; put 'put ''ZWQpOy0tY2xyLWZvcm1zLXRleHQtZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWZvcm1zLWxhYmVsLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci1mb3Jtcy1wbGFjZWhvbGRl''@;'; put 'put ''ci1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItZm9ybXMtbGFiZWwtZm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpOy0tY2xyLWZvcm1zLWlucHV0LXBhZGRpbmc6MCBjYWxj''@;'; put 'put ''KDQgKiB2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpIC8gMyk7LS1jbHItZm9ybXMtaW5wdXQtd3JhcHBlci1oZWlnaHQ6Y2FsYyg0ICogdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSk7LS1jbHItZm9ybXMtaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb24tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTcpOy0tY2xyLWZvcm1zLWlucHV0LWdyb3VwLWljb24tZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItZm9ybXMtY2hlY2tib3gtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItZm9ybXMtY2hlY2tib3gtYm9yZGVy''@;'; put 'put ''LXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNsci1mb3Jtcy1jaGVja2JveC1sYWJlbC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtbGFiZWwtY29sb3IpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7LS1jbHItZm9ybXMtY2hlY2tib3gtaW5kZXRlcm1pbmF0ZS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7LS1jbHItZm9ybXMtY2hlY2ti''@;'; put 'put ''b3gtbWFyay1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWRpc2FibGVkLWxhYmVsLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1sYWJlbC1kaXNhYmxlZC1jb2xvcik7LS1jbHItZm9ybXMtY2hlY2tib3gtZGlz''@;'; put 'put ''YWJsZWQtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybS1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yKTstLWNsci1mb3Jtcy1jaGVja2JveC1kaXNhYmxlZC1jaGVja2VkLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItZm9ybXMt''@;'; put 'put ''Y2hlY2tib3gtZGlzYWJsZWQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWZvcm1zLWNoZWNrYm94LWRpc2FibGVkLWluZGV0ZXJtaW5hdGUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItZm9ybXMtY2hlY2ti''@;'; put 'put ''b3gtZGlzYWJsZWQtbWFyay1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQpOy0tY2xyLWZvcm1zLXJhZGlvLWxhYmVsLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1sYWJlbC1jb2xvcik7LS1jbHItZm9ybXMtcmFkaW8tbGFiZWwtZGlzYWJsZWQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZGlzYWJsZWQpOy0tY2xyLWZvcm1zLXJhZGlvLWRpc2FibGVkLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm0tZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcik7LS1jbHItZm9ybXMtcmFkaW8tZGlzYWJsZWQtbWFyay1jb2xvcjp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWZvcm1zLXJhZGlvLXNlbGVjdGVkLXNoYWRvdzppbnNldCAwIDAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1oaWdobGlnaHQp''@;'; put 'put ''Oy0tY2xyLWZvcm1zLXJhZGlvLWNoZWNrZWQtZGlzYWJsZWQtc2hhZG93Omluc2V0IDAgMCAwIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCkgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCk7LS1jbHItZm9ybXMtcGFzc3dvcmQtZXllLWljb24tY29s''@;'; put 'put ''b3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItZm9ybXMtcGFzc3dvcmQtZGlzYWJsZWQtZXllLWljb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItZm9ybXMtcmFuZ2UtcHJvZ3Jlc3MtZmlsbC1jb2xvcjp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaGlnaGxpZ2h0KTstLWNsci1mb3Jtcy1yYW5nZS10cmFjay1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLXNoYWRlKTstLWNsci1mb3Jtcy1yYW5nZS10cmFjay1ib3JkZXIt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7LS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItZm9ybXMtcmFuZ2UtdHJhY2staGVpZ2h0OnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtMyk7LS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLXJhZGl1czp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpOy0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWJvcmRlci13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpOy0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNz''@;'; put 'put ''LWZpbGwtY29sb3ItZGlzYWJsZWQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCk7LS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stY29sb3ItZGlzYWJsZWQ6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZC10aW50KTstLWNsci1mb3Jtcy1yYW5n''@;'; put 'put ''ZS10cmFjay1ib3JkZXItY29sb3ItZGlzYWJsZWQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCk7LS1jbHItZm9ybXMtc2VsZWN0LWhvdmVyLWJhY2tncm91bmQ6dHJhbnNwYXJlbnQ7LS1jbHItZm9ybXMtc2VsZWN0LWRpc2FibGVkLWNvbG9yOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpOy0tY2xyLWZvcm1zLXNlbGVjdC1ob3Zlci1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1ob3Zlcik7LS1jbHItZm9ybXMtc2VsZWN0LWRpc2FibGVkLWJv''@;'; put 'put ''cmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkKTstLWNsci1mb3Jtcy1zZWxlY3QtY2FyZXQtaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1ob3Zlcik7LS1jbHItZm9ybXMtc2VsZWN0''@;'; put 'put ''LWNhcmV0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1zaXplOmNhbGMoMTAgKiAoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNsci1mb3Jtcy1zZWxlY3Qtb3B0aW9uLWNvbG9yOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItZm9ybXMtc2VsZWN0LW9wdGlvbi1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZCk7LS1jbHItZm9ybXMtc2VsZWN0LW11bHRpcGxlLWJhY2tncm91bmQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCk7LS1jbHItZm9ybXMtc2VsZWN0LW11bHRpcGxlLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItZm9ybXMtc2VsZWN0LW11bHRpcGxlLW9wdGlvbi1jb2xv''@;'; put 'put ''cjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1zZWxlY3RlZC1vcHRpb24tYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQpOy0tY2xyLWZv''@;'; put 'put ''cm1zLXRleHRhcmVhLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCk7LS1jbHItZm9ybXMtdGV4dGFyZWEtZGlzYWJsZWQtYmFja2dyb3VuZDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTstLWNs''@;'; put 'put ''ci1mb3Jtcy10ZXh0YXJlYS1ib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApOy0tY2xyLWZvcm1zLWRhdGFsaXN0LWNhcmV0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtbmV1dHJhbCk7LS1jbHItZm9ybXMtZGF0YWxpc3QtY2FyZXQt''@;'; put 'put ''ZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7LS1jbHItZm9ybXMtZGF0YWxpc3QtY2FyZXQtaWNvbi1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNsci1kYXRlLWNvbnRhaW5lciAuY2xyLWlucHV0LXdyYXBwZXJ7bWF4LXdpZHRoOi1tb3ot''@;'; put 'put ''Zml0LWNvbnRlbnQ7bWF4LXdpZHRoOmZpdC1jb250ZW50fS5jbHItZm9ybS1jb250cm9se21hcmdpbi10b3A6Y2FsYyg0KnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6ZmxleC1zdGFydH0uY2xyLWZvcm0t''@;'; put 'put ''Y29udHJvbCBpbnB1dDo6LW1zLXJldmVhbCwuY2xyLWZvcm0tY29udHJvbCBpbnB1dDo6LW1zLWNsZWFye2Rpc3BsYXk6bm9uZX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1kaXNhYmxlZC1jb2xvcil9LmNsci1mb3JtLWNvbnRyb2wtZGlz''@;'; put 'put ''YWJsZWQgbGFiZWwsLmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1jb250cm9sLWxhYmVse2NvbG9yOnZhcigtLWNsci1mb3Jtcy1sYWJlbC1kaXNhYmxlZC1jb2xvcil9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1pbnB1dCwuY2xyLWZvcm0tY29udHJvbC1kaXNhYmxl''@;'; put 'put ''ZCAuY2xyLXRleHRhcmVhLC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItc2VsZWN0LC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItbnVtYmVyLWlucHV0e2NvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0LWRpc2FibGVkLWNvbG9yKTtib3JkZXItYm90dG9tLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1mb3Jtcy1ib3JkZXItZGlzYWJsZWQtY29sb3IpfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIGlucHV0W3R5cGU9cmFuZ2VdOjotd2Via2l0LXNsaWRlci10aHVtYiwuY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCBpbnB1dFt0eXBlPXJhbmdlXTo6LW1vei1yYW5nZS10aHVt''@;'; put 'put ''YntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1yYW5nZS1wcm9ncmVzcy1maWxsLWNvbG9yLWRpc2FibGVkLCB2YXIoLS1jbHItZm9ybXMtcmFuZ2UtcHJvZ3Jlc3MtZmlsbC1jb2xvci1kaXNhYmxlZCkpfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItc3VidGV4dHtj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItZm9ybXMtc3VidGV4dC1kaXNhYmxlZC1jb2xvcil9LmNsci1mb3JtLWNvbnRyb2wtbXVsdGl7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtd3JhcDp3cmFwfS5jbHItZm9ybS1jb250cm9sLW11bHRpIC5jbHItY29udHJvbC1sYWJlbHt3aWR0aDoxMDAlfS5jbHItY29u''@;'; put 'put ''dHJvbC1sYWJlbHtkaXNwbGF5OmJsb2NrO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1sYWJlbC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1mb3Jtcy1sYWJlbC1mb250LXdlaWdodCk7''@;'; put 'put ''bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpfS5jbHItY29udHJvbC1jb250YWluZXJ7ZGlzcGxheTppbmxp''@;'; put 'put ''bmUtYmxvY2s7Zm9udC1zaXplOnZhcigtLWNsci1wMi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpfS5jbHItY29udHJvbC1pbmxpbmV7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2FsaWduLWNvbnRlbnQ6ZmxleC1zdGFydH0uY2xyLWNvbnRyb2wtaW5saW5lIC5jbHItY29udHJvbC1sYWJlbHtkaXNwbGF5''@;'; put 'put ''OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6Y2FsYygyKnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpO3dpZHRoOmF1dG99LmNsci1zdWJ0ZXh0e2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdo''@;'; put 'put ''dDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRl''@;'; put 'put ''ci1zcGFjaW5nKTtjb2xvcjp2YXIoLS1jbHItZm9ybXMtc3VidGV4dC1jb2xvcik7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5jbHItc3VidGV4dC5lcnJvcntjb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC10ZXh0LWNvbG9yKX0uY2xyLXN1YnRleHQuc3VjY2Vz''@;'; put 'put ''c3tjb2xvcjp2YXIoLS1jbHItZm9ybXMtdmFsaWQtdGV4dC1jb2xvcil9LmNsci1zdWJ0ZXh0LXdyYXBwZXJ7ZmxleC1iYXNpczoxMDAlO2Rpc3BsYXk6ZmxleH0uY2xyLXZhbGlkYXRlLWljb257aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpO3dpZHRoOnZhcigtLWNsci1mb3Jt''@;'; put 'put ''cy1pY29uLXNpemUpO21pbi1oZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLWljb24tc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtmaWxsOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtkaXNw''@;'; put 'put ''bGF5Om5vbmV9LmNsci1zdWNjZXNzIC5jbHItdmFsaWRhdGUtaWNvbntkaXNwbGF5OmlubGluZS1ibG9jaztjb2xvcjp2YXIoLS1jbHItZm9ybXMtdmFsaWQtY29sb3IpO2ZpbGw6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKX0uY2xyLWVycm9yIC5jbHItdmFsaWRhdGUtaWNvbntkaXNw''@;'; put 'put ''bGF5OmlubGluZS1ibG9ja30uY2xyLWZvcm0taG9yaXpvbnRhbCAuY2xyLWZvcm0tY29udHJvbD4uY2xyLWNvbnRyb2wtbGFiZWwsLmNsci1mb3JtLWhvcml6b250YWwgLmNsci1mb3JtLWNvbnRyb2w+LmNsci1mb3JtLWNvbnRyb2wuY2xyLWZvcm0tY29udHJvbC1tdWx0aSAuY2xyLWNvbnRy''@;'; put 'put ''b2wtbGFiZWx7d2lkdGg6Y2FsYygzMip2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpKTtmbGV4LXNocmluazowO21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uY2xyLWZvcm0taG9yaXpvbnRhbC5jbHItcm93IC5jbHItY29udHJvbC1sYWJlbHt3aWR0aDphdXRvfS5jbHIt''@;'; put 'put ''Zm9ybS1ob3Jpem9udGFsIC5jbHItZm9ybS1jb250cm9se2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9LmNsci1mb3JtOm5vdCguY2xyLWZvcm0tY29tcGFjdCkgLmNsci1jb250cm9sLWNvbnRhaW5lci5jbHItZXJyb3I+LmNsci1zdWJ0ZXh0LXdyYXBwZXIgLmNsci12YWxpZGF0''@;'; put 'put ''ZS1pY29uLC5jbHItZm9ybTpub3QoLmNsci1mb3JtLWNvbXBhY3QpIC5jbHItY29udHJvbC1jb250YWluZXIuY2xyLXN1Y2Nlc3M+LmNsci1zdWJ0ZXh0LXdyYXBwZXIgLmNsci12YWxpZGF0ZS1pY29ue21hcmdpbi1sZWZ0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSl9LmNs''@;'; put 'put ''ci1mb3JtLWNvbXBhY3QgLmNsci1mb3JtLWNvbnRyb2w+LmNsci1jb250cm9sLWxhYmVse3dpZHRoOmNhbGMoMzIqdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSk7bWluLXdpZHRoOmNhbGMoMzIqdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1mb3Jt''@;'; put 'put ''LWNvbnRyb2wuY2xyLXJvdz4uY2xyLWNvbnRyb2wtbGFiZWx7d2lkdGg6YXV0bzttaW4td2lkdGg6YXV0b30uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWNvbnRyb2wtbGFiZWx7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZm9ybS1j''@;'; put 'put ''b250cm9se2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3c7bWFyZ2luLXRvcDpjYWxjKDIqdmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1jb250cm9sLWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXB9LmNsci1mb3JtLWNv''@;'; put 'put ''bXBhY3QgLmNsci1zdWJ0ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZXJyb3IgLmNsci1zdWJ0ZXh0LC5jbHItZm9ybS1jb21wYWN0IC5jbHItc3VjY2VzcyAuY2xyLXN1YnRleHR7''@;'; put 'put ''bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWVycm9yIC5jbHItc3VidGV4dC5lcnJvciwuY2xyLWZvcm0tY29tcGFjdCAuY2xyLWVycm9yIC5jbHItc3VidGV4dC5zdWNjZXNzLC5jbHItZm9ybS1jb21wYWN0IC5jbHItc3VjY2Vz''@;'; put 'put ''cyAuY2xyLXN1YnRleHQuZXJyb3IsLmNsci1mb3JtLWNvbXBhY3QgLmNsci1zdWNjZXNzIC5jbHItc3VidGV4dC5zdWNjZXNze21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1lcnJvciAuY2xyLXZhbGlkYXRlLWljb24sLmNsci1m''@;'; put 'put ''b3JtLWNvbXBhY3QgLmNsci1zdWNjZXNzIC5jbHItdmFsaWRhdGUtaWNvbnttYXJnaW4tbGVmdDowfS5jbHItZm9ybS1jb21wYWN0IC5jbHItc3VidGV4dC13cmFwcGVye2ZsZXgtYmFzaXM6YXV0bztkaXNwbGF5OmlubGluZS1ibG9ja30uY2xyLWZvcm17cGFkZGluZzp2YXIoLS1jbHItZm9y''@;'; put 'put ''bXMtYmFzZWxpbmUpfS5jbHItZm9ybS1mdWxsLXdpZHRoIC5jbHItZm9ybS1jb250cm9sIC5jbHItY29udHJvbC1jb250YWluZXIsLmNsci1mb3JtLWZ1bGwtd2lkdGggLmNsci1mb3JtLWNvbnRyb2wgLmNsci1zZWxlY3Qtd3JhcHBlciwuY2xyLWZvcm0tZnVsbC13aWR0aCAuY2xyLWZvcm0t''@;'; put 'put ''Y29udHJvbCAuY2xyLWlucHV0LXdyYXBwZXIsLmNsci1mb3JtLWZ1bGwtd2lkdGggLmNsci1mb3JtLWNvbnRyb2wgLmNsci1udW1iZXItaW5wdXQtd3JhcHBlciwuY2xyLWZvcm0tZnVsbC13aWR0aCAuY2xyLWZvcm0tY29udHJvbCAuY2xyLWNvbWJvYm94e3dpZHRoOmNhbGMoMTAwJSAtIHZh''@;'; put 'put ''cigtLWNsci1mb3Jtcy1pY29uLXNpemUpKX0uY2xyLWZvcm0tZnVsbC13aWR0aCAuY2xyLWZvcm0tY29udHJvbCAuY2xyLWNvbWJvYm94LXdyYXBwZXIsLmNsci1mb3JtLWZ1bGwtd2lkdGggLmNsci1mb3JtLWNvbnRyb2wgLmNsci1jb21ib2JveC1pbnB1dC13cmFwcGVyLC5jbHItZm9ybS1m''@;'; put 'put ''dWxsLXdpZHRoIC5jbHItZm9ybS1jb250cm9sIC5jbHItdGV4dGFyZWEtd3JhcHBlciwuY2xyLWZvcm0tZnVsbC13aWR0aCAuY2xyLWZvcm0tY29udHJvbCAuY2xyLWlucHV0LWdyb3VwLC5jbHItZm9ybS1mdWxsLXdpZHRoIC5jbHItZm9ybS1jb250cm9sIGlucHV0LC5jbHItZm9ybS1mdWxs''@;'; put 'put ''LXdpZHRoIC5jbHItZm9ybS1jb250cm9sIHRleHRhcmVhLC5jbHItZm9ybS1mdWxsLXdpZHRoIC5jbHItZm9ybS1jb250cm9sIHNlbGVjdHt3aWR0aDoxMDAlfS5jbHItZm9ybS1mdWxsLXdpZHRoIC5jbHItZm9ybS1jb250cm9sIC5jbHItY29tYm9ib3gsLmNsci1mb3JtLWZ1bGwtd2lkdGgu''@;'; put 'put ''Y2xyLWZvcm0tY29tcGFjdCAuY2xyLWZvcm0tY29udHJvbCAuY2xyLWlucHV0LXdyYXBwZXIsLmNsci1mb3JtLWZ1bGwtd2lkdGguY2xyLWZvcm0tY29tcGFjdCAuY2xyLWZvcm0tY29udHJvbCAuY2xyLW51bWJlci1pbnB1dC13cmFwcGVyLC5jbHItZm9ybS1mdWxsLXdpZHRoLmNsci1mb3Jt''@;'; put 'put ''LWNvbXBhY3QgLmNsci1mb3JtLWNvbnRyb2wgLmNsci1zZWxlY3Qtd3JhcHBlciwuY2xyLWZvcm0tZnVsbC13aWR0aC5jbHItZm9ybS1jb21wYWN0IC5jbHItZm9ybS1jb250cm9sIC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlcntkaXNwbGF5OmlubGluZS1mbGV4fS5jbHItZm9ybS1mdWxsLXdp''@;'; put 'put ''ZHRoLmNsci1mb3JtLWNvbXBhY3QgLmNsci1jb250cm9sLWNvbnRhaW5lcntmbGV4LXdyYXA6bm93cmFwfS5jbHItZm9ybS1mdWxsLXdpZHRoLmNsci1mb3JtLWNvbXBhY3QgLmNsci1zdWJ0ZXh0e2ZsZXg6MCAwIGF1dG99LmNsci1mb3JtLWZ1bGwtd2lkdGg6bm90KC5jbHItZm9ybS1jb21w''@;'; put 'put ''YWN0KSAuY2xyLWZvcm0tY29udHJvbCAuY2xyLWVycm9yIC5jbHItc2VsZWN0LXdyYXBwZXI6YWZ0ZXIsLmNsci1mb3JtLWZ1bGwtd2lkdGg6bm90KC5jbHItZm9ybS1jb21wYWN0KSAuY2xyLWZvcm0tY29udHJvbCAuY2xyLXN1Y2Nlc3MgLmNsci1zZWxlY3Qtd3JhcHBlcjphZnRlcntyaWdo''@;'; put 'put ''dDp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpfS5jbHItZm9ybS1mdWxsLXdpZHRoOm5vdCguY2xyLWZvcm0tY29tcGFjdCkgLmNsci1mb3JtLWNvbnRyb2wgLmNsci1jb250cm9sLWNvbnRhaW5lcjpub3QoLmNsci1lcnJvcik6bm90KC5jbHItc3VjY2VzcykgdGV4dGFyZWF7d2lkdGg6Y2Fs''@;'; put 'put ''YygxMDAlIC0gdmFyKC0tY2xyLWZvcm1zLWljb24tc2l6ZSkpfS5jbHItZm9ybS1ncm91cHtwYWRkaW5nOnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9LmNsci1yZXF1aXJlZC1tYXJrOmFmdGVye2NvbnRlbnQ6IioiO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtmaWxs''@;'; put 'put ''OnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC1zaXplLTMpO21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9LmNsci1jaGVja2JveC13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3Bs''@;'; put 'put ''YXk6ZmxleH0uY2xyLWNoZWNrYm94LXdyYXBwZXIgLmNsci1jb250cm9sLWxhYmVse2ZvbnQtd2VpZ2h0OjQwMDtkaXNwbGF5OmJsb2NrfS5jbHItY2hlY2tib3gtd3JhcHBlcn4uY2xyLXZhbGlkYXRlLWljb257bWFyZ2luLWxlZnQ6MH0uY2xyLWNoZWNrYm94LXdyYXBwZXJ+LmNsci1zdWJ0''@;'; put 'put ''ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5jbHItY2hlY2tib3gtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jazttYXJnaW4tdG9wOjA7Y3Vyc29yOnBvaW50ZXI7bWluLWhlaWdodDpjYWxjKHZhcigtLWNsci1mb3Jtcy1iYXNlbGlu''@;'; put 'put ''ZSkqNCk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSBjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpKTtjb2xvcjp2YXIoLS1jbHItZm9ybXMtbGFiZWwtY29sb3IpO2Zv''@;'; put 'put ''bnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFy''@;'; put 'put ''eS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0uY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF17cG9zaXRpb246YWJzb2x1dGU7b3BhY2l0eTowO3RvcDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTMpO2xlZnQ6MDtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWw6YmVmb3Jle3Bvc2l0''@;'; put 'put ''aW9uOmFic29sdXRlO3RvcDpjYWxjKChjYWxjKHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkqNCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpKSouNSk7bGVmdDowO2NvbnRlbnQ6IiI7ZGlzcGxheTppbmxpbmUtYmxvY2s7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lk''@;'; put 'put ''dGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtib3JkZXI6LjA1cmVtIHNvbGlkIHZhcigtLWNsci1mb3Jtcy1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LWJvcmRlci1yYWRpdXMpfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBl''@;'; put 'put ''PWNoZWNrYm94XTpmb2N1cysuY2xyLWNvbnRyb2wtbGFiZWw6YmVmb3Jle291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lKTtvdXRsaW5lLWNvbG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLW9mZnNldDp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''b2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUtb2Zmc2V0KX0uY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF0rLmNsci1jb250cm9sLWxhYmVsOmFmdGVye3Bvc2l0aW9uOmFic29sdXRlO2NvbnRlbnQ6IiI7ZGlzcGxheTpub25lO2hlaWdodDpjYWxjKGNhbGMoY2Fs''@;'; put 'put ''Yyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpKi41KSouNSkgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKTt3aWR0aDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykqLjUpO2JvcmRlci1sZWZ0OmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSouMTI1KSBzb2xpZCB2YXIo''@;'; put 'put ''LS1jbHItZm9ybXMtY2hlY2tib3gtbWFyay1jb2xvcik7Ym9yZGVyLWJvdHRvbTpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykqLjEyNSkgc29saWQgdmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LW1hcmstY29sb3IpO3RvcDpjYWxjKCh2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpKjQg''@;'; put 'put ''LSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpKSouNSk7bGVmdDpjYWxjKGNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSouNSkqLjUpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKGNhbGMoY2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpKi41KSouNSkpIHJvdGF0ZSgtNDVkZWcpfS5j''@;'; put 'put ''bHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkKy5jbHItY29udHJvbC1sYWJlbDpiZWZvcmV7YmFja2dyb3VuZDp2YXIoLS1jbHItZm9ybXMtY2hlY2tib3gtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyOjB9LmNsci1jaGVja2JveC13cmFwcGVyIGlucHV0''@;'; put 'put ''W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrLmNsci1jb250cm9sLWxhYmVsOmFmdGVye2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XS5jbHItaW5kZXRlcm1pbmF0ZSsuY2xyLWNvbnRyb2wtbGFiZWw6YmVmb3JlLC5jbHItY2hl''@;'; put 'put ''Y2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTppbmRldGVybWluYXRlKy5jbHItY29udHJvbC1sYWJlbDpiZWZvcmV7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LWluZGV0ZXJtaW5h''@;'; put 'put ''dGUtYm9yZGVyLWNvbG9yKX0uY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF0uY2xyLWluZGV0ZXJtaW5hdGUrLmNsci1jb250cm9sLWxhYmVsOmFmdGVyLC5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTppbmRldGVybWluYXRlKy5jbHIt''@;'; put 'put ''Y29udHJvbC1sYWJlbDphZnRlcntib3JkZXItbGVmdDpub25lO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LWluZGV0ZXJtaW5hdGUtYm9yZGVyLWNvbG9yKTtkaXNwbGF5OmlubGluZS1ibG9jazt0cmFuc2Zvcm06dHJhbnNsYXRlWShjYWxjKGNhbGModmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS03KSouNSkqLjUpKX0uY2xyLWNoZWNrYm94LXdyYXBwZXIuY2xyLWNoZWNrYm94LWlubGluZXtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7YWxpZ24tY29udGVudDpmbGV4LXN0YXJ0fS5jbHItY2hlY2tib3gtd3JhcHBlci5jbHItY2hlY2tib3gtaW5s''@;'; put 'put ''aW5lIC5jbHItY29udHJvbC1sYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6Y2FsYygyKnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpO3dpZHRoOmF1dG99LmNsci1lcnJvciAuY2xyLWNoZWNrYm94LXdyYXBwZXI6bm90KC5kYXRhZ3JpZC1zZWxlY3QgLmNsci1jaGVj''@;'; put 'put ''a2JveC13cmFwcGVyKSBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWw6YmVmb3Jle2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcil9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1jaGVja2JveC13cmFwcGVyIC5jbHItY29udHJv''@;'; put 'put ''bC1sYWJlbCwuY2xyLWNoZWNrYm94LXdyYXBwZXIuY2xyLWNoZWNrYm94LXdyYXBwZXItZGlzYWJsZWQgLmNsci1jb250cm9sLWxhYmVse2N1cnNvcjpub3QtYWxsb3dlZDtjb2xvcjp2YXIoLS1jbHItZm9ybXMtbGFiZWwtZGlzYWJsZWQtY29sb3IpfS5jbHItZm9ybS1jb250cm9sLWRpc2Fi''@;'; put 'put ''bGVkIC5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWw6YmVmb3JlLC5jbHItY2hlY2tib3gtd3JhcHBlci5jbHItY2hlY2tib3gtd3JhcHBlci1kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWw6''@;'; put 'put ''YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm0tZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1jaGVja2JveC1kaXNhYmxlZC1ib3JkZXItY29sb3IpfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItY2hlY2ti''@;'; put 'put ''b3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkKy5jbHItY29udHJvbC1sYWJlbDpiZWZvcmUsLmNsci1jaGVja2JveC13cmFwcGVyLmNsci1jaGVja2JveC13cmFwcGVyLWRpc2FibGVkIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrLmNsci1jb250cm9sLWxhYmVs''@;'; put 'put ''OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1jaGVja2JveC1kaXNhYmxlZC1jaGVja2VkLWJhY2tncm91bmQtY29sb3IpO2JvcmRlcjowfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpj''@;'; put 'put ''aGVja2VkKy5jbHItY29udHJvbC1sYWJlbDphZnRlciwuY2xyLWNoZWNrYm94LXdyYXBwZXIuY2xyLWNoZWNrYm94LXdyYXBwZXItZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCsuY2xyLWNvbnRyb2wtbGFiZWw6YWZ0ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jt''@;'; put 'put ''cy1jaGVja2JveC1kaXNhYmxlZC1tYXJrLWNvbG9yKX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF0uY2xyLWluZGV0ZXJtaW5hdGUrLmNsci1jb250cm9sLWxhYmVsOmFmdGVyLC5jbHItZm9ybS1jb250cm9sLWRp''@;'; put 'put ''c2FibGVkIC5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTppbmRldGVybWluYXRlKy5jbHItY29udHJvbC1sYWJlbDphZnRlciwuY2xyLWNoZWNrYm94LXdyYXBwZXIuY2xyLWNoZWNrYm94LXdyYXBwZXItZGlzYWJsZWQgaW5wdXRbdHlwZT1jaGVja2JveF0uY2xy''@;'; put 'put ''LWluZGV0ZXJtaW5hdGUrLmNsci1jb250cm9sLWxhYmVsOmFmdGVyLC5jbHItY2hlY2tib3gtd3JhcHBlci5jbHItY2hlY2tib3gtd3JhcHBlci1kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTppbmRldGVybWluYXRlKy5jbHItY29udHJvbC1sYWJlbDphZnRlcntib3JkZXItY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWZvcm1zLWNoZWNrYm94LWRpc2FibGVkLWluZGV0ZXJtaW5hdGUtY29sb3IpO2JvcmRlci1sZWZ0Om5vbmV9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1jaGVja2JveC13cmFwcGVye21heC13aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDthbGlnbi1jb250''@;'; put 'put ''ZW50OmZsZXgtc3RhcnQ7aGVpZ2h0OmNhbGModmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSo0KX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWNoZWNrYm94LXdyYXBwZXJ+LmNsci1zdWJ0ZXh0e21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9LmNsci1mb3JtLWNvbXBhY3Qg''@;'; put 'put ''LmNsci1jaGVja2JveC13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6Y2FsYygyKnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpO3dpZHRoOmF1dG99LmNsci1mb3JtLWNvbXBhY3QgLmNsci1jaGVja2JveC13cmFwcGVyIC5jbHIt''@;'; put 'put ''Y29udHJvbC1sYWJlbHttYXJnaW4tdG9wOjB9LmNsci1maWxlLXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLXRvcDp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpfS5jbHItZmlsZS13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHtmb250LXdlaWdodDo0MDA7ZGlzcGxheTpibG9j''@;'; put 'put ''a30uY2xyLWZpbGUtd3JhcHBlcn4uY2xyLXZhbGlkYXRlLWljb257bWFyZ2luLWxlZnQ6MH0uY2xyLWZpbGUtd3JhcHBlcn4uY2xyLXN1YnRleHR7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmNsci1maWxlLXdyYXBwZXIgLmJ0bnttYXJnaW46MH0uY2xyLWZpbGV7aGVpZ2h0OjA7d2lkdGg6MDtv''@;'; put 'put ''cGFjaXR5OjA7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6LTF9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1maWxlLXdyYXBwZXJ7bWF4LXdpZHRoOjEwMCU7bWFyZ2luLXRvcDowfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZmlsZS13cmFwcGVyfi5jbHItc3VidGV4''@;'; put 'put ''dHttYXJnaW4tbGVmdDp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZmlsZS13cmFwcGVyfi5jbHItdmFsaWRhdGUtaWNvbntsaW5lLWhlaWdodDpjYWxjKHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkqNCl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1m''@;'; put 'put ''aWxlLXdyYXBwZXJ+LmNsci1zdWJ0ZXh0e2xpbmUtaGVpZ2h0OmNhbGModmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSo0KTttYXJnaW4tdG9wOjB9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1maWxlLXdyYXBwZXIgLmNsci1jb250cm9sLWxhYmVse21hcmdpbi10b3A6MDtsaW5lLWhlaWdodDox''@;'; put 'put ''LjA4cmVtfS5jbHItZm9ybS1jb21wYWN0IC5jbHItZmlsZS13cmFwcGVyIC5idG57aGVpZ2h0OjEuMnJlbX0uY2xyLWZpbGUtaW5wdXQtd3JhcHBlcntkaXNwbGF5OmZsZXg7cG9zaXRpb246cmVsYXRpdmU7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5jbHItZmlsZS1p''@;'; put 'put ''bnB1dC13cmFwcGVyIC5jbHItZmlsZS1pbnB1dHtoZWlnaHQ6MDt3aWR0aDowO29wYWNpdHk6MDtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDotMX0uY2xyLWZpbGUtaW5wdXQtd3JhcHBlciAuY2xyLWZpbGUtaW5wdXQtYnJvd3NlLWJ1dHRvbiwuY2xyLWZpbGUt''@;'; put 'put ''aW5wdXQtd3JhcHBlciAuY2xyLWZpbGUtaW5wdXQtY2xlYXItYnV0dG9ue21hcmdpbjowO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpfS5jbHItZmlsZS1pbnB1dC13cmFwcGVyIC5jbHItZmlsZS1pbnB1dC1jbGVhci1idXR0b257cGFkZGluZzowIHZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtMikhaW1wb3J0YW50O21pbi13aWR0aDp1bnNldDtib3JkZXI6MH0uY2xyLWZpbGUtaW5wdXQtd3JhcHBlciAuY2xyLWZpbGUtaW5wdXQtYnJvd3NlLWJ1dHRvbi10ZXh0e292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS5jbHItZm9ybS1jb21wYWN0''@;'; put 'put ''IC5jbHItZmlsZS1pbnB1dC13cmFwcGVye21hcmdpbi10b3A6MH1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOjc2OHB4KXsuY2xyLWZvcm0taG9yaXpvbnRhbCAuY2xyLWZpbGUtaW5wdXQtd3JhcHBlcnttYXJnaW4tdG9wOjB9fS5jbHItZmlsZS1saXN0IC5jbHItZmlsZS1saXN0LWl0''@;'; put 'put ''ZW17bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO21heC13aWR0aDo1MDBweH0uY2xyLWZpbGUtbGlzdCAuY2xyLWZpbGUtbGFiZWwtYW5kLXN0YXR1cy1pY29ue2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jbHItZmlsZS1saXN0IC5jbHItZmls''@;'; put 'put ''ZS1sYWJlbHt3aGl0ZS1zcGFjZTp3cmFwO2hlaWdodDp1bnNldDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKTtwYWRkaW5nLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyl9LmNsci1maWxlLWxpc3QgLmNs''@;'; put 'put ''ci1maWxlLWNsZWFyLWJ1dHRvbnttYXJnaW46MDtwYWRkaW5nOjA7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7aGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tbGluZS1oZWlnaHQpfS5jbHItZmlsZS1saXN0IC5jbHItZmlsZS1jbGVhci1idXR0''@;'; put 'put ''b24gY2RzLWljb257bWFyZ2luOjB9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1maWxlLWxpc3QtaXRlbXtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7YWxpZ24taXRlbXM6Y2VudGVyO2NvbHVtbi1nYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uY2xyLWZvcm0tY29tcGFjdCAuY2xy''@;'; put 'put ''LWZpbGUtbGlzdC1pdGVtIC5jbHItc3VidGV4dHttYXJnaW46MCFpbXBvcnRhbnR9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1maWxlLWxpc3QtYnJlYWt7ZmxleC1iYXNpczoxMDAlO2hlaWdodDowfS5jbHItaW5wdXQtd3JhcHBlcnt3aGl0ZS1zcGFjZTpub3dyYXA7bWF4LWhlaWdodDp2YXIo''@;'; put 'put ''LS1jbHItZm9ybXMtaW5wdXQtd3JhcHBlci1oZWlnaHQpfS5jbHItaW5wdXR7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjowO2JvcmRlci1y''@;'; put 'put ''YWRpdXM6MDtib3gtc2hhZG93Om5vbmU7YmFja2dyb3VuZDowIDA7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1pbnB1dC13cmFwcGVyLWhlaWdodCk7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXRleHQtY29sb3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lk''@;'; put 'put ''dGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWNvbG9yKTtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOnZhcigtLWNsci1mb3Jtcy1pbnB1dC1wYWRkaW5nKTttYXgtaGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1pbnB1dC13cmFwcGVyLWhl''@;'; put 'put ''aWdodCk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTts''@;'; put 'put ''ZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpfS5jbHItaW5wdXQ6Zm9jdXN7b3V0bGluZTowfS5jbHItaW5wdXRbcmVhZG9ubHlde2JvcmRlcjowfS5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pe2JhY2tncm91bmQ6bGlu''@;'; put 'put ''ZWFyLWdyYWRpZW50KHRvIGJvdHRvbSx0cmFuc3BhcmVudCA5NSUsdmFyKC0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3IpIDk1JSkgbm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTowIDEwMCU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXNpemUgLjJzIGVhc2V9LmNsci1pbnB1dDpub3QoW3JlYWRv''@;'; put 'put ''bmx5XSk6Zm9jdXMsLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSkuY2xyLWZvY3VzLC5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pOmZvY3VzLXdpdGhpbntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1mb2N1c2VkLWNvbG9yKTtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAl''@;'; put 'put ''fS5jbHItaW5wdXQ6ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXRleHQtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLWlucHV0OmRpc2FibGVkOjpwbGFjZWhvbGRlcntjb2xvcjp2YXIoLS1jbHItZm9ybXMtcGxhY2Vob2xkZXItZGlzYWJsZWQtY29sb3Ip''@;'; put 'put ''fS5jbHItZXJyb3IgLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSl7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcik7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHRyYW5zcGFyZW50IDk1JSx2YXIoLS1jbHItZm9ybXMtaW52YWxp''@;'; put 'put ''ZC1jb2xvcikgOTUlKSBuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjAgMTAwJTt0cmFuc2l0aW9uOmJhY2tncm91bmQtc2l6ZSAuMnMgZWFzZX0uY2xyLWVycm9yIC5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pOmZvY3VzLC5jbHItZXJyb3IgLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSku''@;'; put 'put ''Y2xyLWZvY3VzLC5jbHItZXJyb3IgLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSk6Zm9jdXMtd2l0aGlue2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IpO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCV9LmNsci1zdWNjZXNzIC5jbHItaW5wdXQ6bm90''@;'; put 'put ''KFtyZWFkb25seV0pe2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sdHJhbnNwYXJlbnQgOTUlLHZhcigtLWNsci1mb3Jtcy12YWxpZC1jb2xvcikgOTUlKSBuby1yZXBlYXQ7YmFja2dy''@;'; put 'put ''b3VuZC1zaXplOjAgMTAwJTt0cmFuc2l0aW9uOmJhY2tncm91bmQtc2l6ZSAuMnMgZWFzZX0uY2xyLXN1Y2Nlc3MgLmNsci1pbnB1dDpub3QoW3JlYWRvbmx5XSk6Zm9jdXMsLmNsci1zdWNjZXNzIC5jbHItaW5wdXQ6bm90KFtyZWFkb25seV0pLmNsci1mb2N1cywuY2xyLXN1Y2Nlc3MgLmNs''@;'; put 'put ''ci1pbnB1dDpub3QoW3JlYWRvbmx5XSk6Zm9jdXMtd2l0aGlue2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlfS5jbHItZm9ybS1jb250cm9sLnJvdyAuY2xyLWlucHV0LXdyYXBwZXJ7bWF4LXdpZHRoOmNh''@;'; put 'put ''bGMoMTAwJSAtIHZhcigtLWNsci1mb3Jtcy1pY29uLXNpemUpKX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLWlucHV0e21heC13aWR0aDoxMDAlfS5jbHItZm9ybS1jb21wYWN0IC5jbHItaW5wdXR+LmNsci1zdWJ0ZXh0e21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9LmNs''@;'; put 'put ''ci1mb3JtLWNvbnRyb2wtcmVhZG9ubHkgLmNsci1pbnB1dHtib3JkZXI6MH0uY2xyLWZvcm0tY29udHJvbC1tdWx0aSAuY2xyLWlucHV0e21heC13aWR0aDpjYWxjKDEwMCUgKyB2YXIoLS1jbHItZm9ybXMtaWNvbi1zaXplKSl9OjpwbGFjZWhvbGRlcntjb2xvcjp2YXIoLS1jbHItZm9ybXMt''@;'; put 'put ''cGxhY2Vob2xkZXItY29sb3IpfS5jbHItaW5wdXQtZ3JvdXB7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXRleHQtY29sb3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWNvbG9yKTtkaXNw''@;'; put 'put ''bGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sdHJhbnNwYXJlbnQgOTUlLHZhcigtLWNsci1mb3Jtcy1mb2N1c2VkLWNvbG9yKSA5NSUpIG5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6MCAxMDAlO3RyYW5zaXRp''@;'; put 'put ''b246YmFja2dyb3VuZC1zaXplIC4ycyBlYXNlO3Bvc2l0aW9uOnJlbGF0aXZlO21heC13aWR0aDoxMDAlO21heC1oZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLWlucHV0LXdyYXBwZXItaGVpZ2h0KX0uY2xyLWlucHV0LWdyb3VwOmZvY3VzLC5jbHItaW5wdXQtZ3JvdXAuY2xyLWZvY3VzLC5jbHIt''@;'; put 'put ''aW5wdXQtZ3JvdXA6Zm9jdXMtd2l0aGlue2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3IpO2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCV9LmNsci1pbnB1dC1ncm91cC5jbHItZm9jdXN7d2lkdGg6YXV0b30uY2xyLWlucHV0LWdyb3VwIC5jbHItaW5w''@;'; put 'put ''dXR7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjA7bWFyZ2luLXJpZ2h0OjA7bWF4LXdpZHRoOjEwMCV9LmNsci1pbnB1dC1ncm91cCAuY2xyLWlucHV0Om5vdChbcmVhZG9ubHldKTpmb2N1c3tiYWNrZ3JvdW5kLXNpemU6MDtib3JkZXI6MH0uY2xyLWlucHV0LWdyb3VwIHNlbGVjdCwuY2xyLWlu''@;'; put 'put ''cHV0LWdyb3VwIC5jbHItc2VsZWN0LXdyYXBwZXIgc2VsZWN0LC5jbHItaW5wdXQtZ3JvdXAgLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdHtib3JkZXI6MH0uY2xyLWlucHV0LWdyb3VwIC5jbHItaW5wdXQtZ3JvdXAtYWRkb257Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXN1YnRleHQt''@;'; put 'put ''Y29sb3IpfS5jbHItaW5wdXQtZ3JvdXAgLmNsci1pbnB1dC1ncm91cC1hY3Rpb25ze2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5jbHItaW5wdXQtZ3JvdXAgLmNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFw''@;'; put 'put ''cGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MDtwYWRkaW5nOjA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2JveC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kOjAgMDtwYWRkaW5nOjAgY2FsYygxLjUqdmFyKC0tY2xyLWZvcm1zLWJh''@;'; put 'put ''c2VsaW5lKSk7Y3Vyc29yOnBvaW50ZXJ9YnV0dG9uLmNsci1pbnB1dC1ncm91cCAuY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9ue2N1cnNvcjpwb2ludGVyfS5jbHItaW5wdXQtZ3JvdXAgLmNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbiBjZHMtaWNvbiwuY2xyLWlucHV0LWdyb3VwIC5j''@;'; put 'put ''bHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb24gY2xyLWljb257ZmlsbDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLWlucHV0LWdyb3VwLWljb24tYWN0aW9uLXNpemUpO3dpZHRoOnZhcigtLWNsci1mb3Jtcy1pbnB1dC1n''@;'; put 'put ''cm91cC1pY29uLWFjdGlvbi1zaXplKTt0cmFuc2Zvcm06dHJhbnNsYXRlKGNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSksY2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKSl9LmNsci1lcnJvciAuY2xyLWlucHV0LWdyb3Vwe2JvcmRlci1ib3R0b20tY29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IpO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSx0cmFuc3BhcmVudCA5NSUsdmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29sb3IpIDk1JSkgbm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTowIDEwMCU7dHJhbnNpdGlvbjpiYWNr''@;'; put 'put ''Z3JvdW5kLXNpemUgLjJzIGVhc2V9LmNsci1lcnJvciAuY2xyLWlucHV0LWdyb3VwOmZvY3VzLC5jbHItZXJyb3IgLmNsci1pbnB1dC1ncm91cC5jbHItZm9jdXMsLmNsci1lcnJvciAuY2xyLWlucHV0LWdyb3VwOmZvY3VzLXdpdGhpbntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1m''@;'; put 'put ''b3Jtcy1pbnZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlfS5jbHItc3VjY2VzcyAuY2xyLWlucHV0LWdyb3Vwe2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sdHJh''@;'; put 'put ''bnNwYXJlbnQgOTUlLHZhcigtLWNsci1mb3Jtcy12YWxpZC1jb2xvcikgOTUlKSBuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjAgMTAwJTt0cmFuc2l0aW9uOmJhY2tncm91bmQtc2l6ZSAuMnMgZWFzZX0uY2xyLXN1Y2Nlc3MgLmNsci1pbnB1dC1ncm91cDpmb2N1cywuY2xyLXN1Y2Nlc3Mg''@;'; put 'put ''LmNsci1pbnB1dC1ncm91cC5jbHItZm9jdXMsLmNsci1zdWNjZXNzIC5jbHItaW5wdXQtZ3JvdXA6Zm9jdXMtd2l0aGlue2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kLXNpemU6MTAwJSAxMDAlfS5jbHItZm9ybS1jb250cm9sLWRp''@;'; put 'put ''c2FibGVkIC5jbHItaW5wdXQtZ3JvdXB7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWRpc2FibGVkLWNvbG9yKX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9ue2NvbG9yOnZhcigtLWNsci1mb3Jtcy10ZXh0''@;'; put 'put ''LWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWR9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbiBjZHMtaWNvbntmaWxsOnZhcigtLWNsci1mb3Jtcy1pbnB1dC1ncm91cC1pY29uLWRpc2FibGVkLWNvbG9yKX0uY2xyLWZvcm0t''@;'; put 'put ''Y29udHJvbC1yZWFkb25seSAuY2xyLWlucHV0LWdyb3Vwe2JvcmRlcjowO2JhY2tncm91bmQ6MCAwfS5jbHItZm9ybS1jb250cm9sLXJlYWRvbmx5IC5jbHItaW5wdXQtZ3JvdXAtYWN0aW9uc3tkaXNwbGF5Om5vbmV9LmNsci1mb3JtLWhvcml6b250YWwgLmNsci1pbnB1dC1ncm91cHttYXgt''@;'; put 'put ''d2lkdGg6MTAwJTtwYWRkaW5nLXJpZ2h0OjB9LmNsci1yYWRpby13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleH0uY2xyLXJhZGlvLXdyYXBwZXIgLmNsci1jb250cm9sLWxhYmVse2ZvbnQtd2VpZ2h0OjQwMDtkaXNwbGF5OmJsb2NrfS5jbHItcmFkaW8td3JhcHBlcn4u''@;'; put 'put ''Y2xyLXZhbGlkYXRlLWljb257bWFyZ2luLWxlZnQ6MH0uY2xyLXJhZGlvLXdyYXBwZXJ+LmNsci1zdWJ0ZXh0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5jbHItcmFkaW8td3JhcHBlciBpbnB1dFt0eXBlPXJhZGlvXXtwb3NpdGlvbjphYnNvbHV0ZTtvcGFjaXR5OjA7dG9wOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtMyk7bGVmdDowO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNsci1yYWRpby13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHtwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO21hcmdpbi10''@;'; put 'put ''b3A6MDtjdXJzb3I6cG9pbnRlcjttaW4taGVpZ2h0OmNhbGModmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSo0KTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpIGNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSArIHZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtNSkpO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1yYWRpby1sYWJlbC1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29u''@;'; put 'put ''ZGFyeS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpfS5jbHItcmFkaW8td3JhcHBl''@;'; put 'put ''ciAuY2xyLWNvbnRyb2wtbGFiZWw6ZW1wdHl7cGFkZGluZy1sZWZ0OjB9LmNsci1yYWRpby13cmFwcGVyIGlucHV0W3R5cGU9cmFkaW9dKy5jbHItY29udHJvbC1sYWJlbDpiZWZvcmV7cG9zaXRpb246YWJzb2x1dGU7dG9wOmNhbGMoKGNhbGModmFyKC0tY2xyLWZvcm1zLWJhc2VsaW5lKSo0''@;'; put 'put ''KSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykpKi41KTtsZWZ0OjA7Y29udGVudDoiIjtkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2JvcmRlcjouMDVyZW0gc29saWQgdmFyKC0t''@;'; put 'put ''Y2xyLWZvcm1zLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czo1MCV9LmNsci1yYWRpby13cmFwcGVyIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQrLmNsci1jb250cm9sLWxhYmVsOmJlZm9yZXtib3gtc2hhZG93OnZhcigtLWNsci1mb3Jtcy1yYWRpby1zZWxlY3RlZC1zaGFkb3cpO2Jv''@;'; put 'put ''cmRlcjowfS5jbHItcmFkaW8td3JhcHBlciBpbnB1dFt0eXBlPXJhZGlvXTpmb2N1cysuY2xyLWNvbnRyb2wtbGFiZWw6YmVmb3Jle291dGxpbmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lKTtvdXRsaW5lLWNvbG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xv''@;'; put 'put ''cjtvdXRsaW5lLW9mZnNldDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUtb2Zmc2V0KX0uY2xyLXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlwZT1yYWRpb106Zm9jdXM6Y2hlY2tlZCsuY2xyLWNvbnRyb2wtbGFiZWw6YmVmb3Jle291dGxpbmU6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1pbnRlcmFjdGlvbi1vdXRsaW5lKTtvdXRsaW5lLWNvbG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLW9mZnNldDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUtb2Zmc2V0KX0uY2xyLXJhZGlvLXdyYXBwZXIgaW5wdXRbdHlw''@;'; put 'put ''ZT1yYWRpb106ZGlzYWJsZWQrLmNsci1jb250cm9sLWxhYmVsOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1yYWRpby1kaXNhYmxlZC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1k''@;'; put 'put ''aXNhYmxlZCl9LmNsci1yYWRpby13cmFwcGVyIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQ6ZGlzYWJsZWQrLmNsci1jb250cm9sLWxhYmVsOmJlZm9yZXtib3gtc2hhZG93OnZhcigtLWNsci1mb3Jtcy1yYWRpby1jaGVja2VkLWRpc2FibGVkLXNoYWRvdyl9LmNsci1mb3JtLWNvbnRyb2wt''@;'; put 'put ''ZGlzYWJsZWQgLmNsci1yYWRpby13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHtjdXJzb3I6bm90LWFsbG93ZWQ7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhZGlvLWxhYmVsLWRpc2FibGVkLWNvbG9yKX0uY2xyLWVycm9yIC5jbHItcmFkaW8td3JhcHBlciBpbnB1dFt0eXBlPXJhZGlvXSsu''@;'; put 'put ''Y2xyLWNvbnRyb2wtbGFiZWw6YmVmb3Jle2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcil9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1yYWRpby13cmFwcGVye21heC13aWR0aDoxMDAlO2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDthbGlnbi1jb250ZW50OmZs''@;'; put 'put ''ZXgtc3RhcnQ7aGVpZ2h0OmNhbGMoNCp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpKX0uY2xyLWZvcm0tY29tcGFjdCAuY2xyLXJhZGlvLXdyYXBwZXJ+LmNsci1zdWJ0ZXh0e21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9LmNsci1mb3JtLWNvbXBhY3QgLmNsci1yYWRp''@;'; put 'put ''by13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHtkaXNwbGF5OmlubGluZS1ibG9jazttYXJnaW4tcmlnaHQ6Y2FsYygyKnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpO3dpZHRoOmF1dG99LmNsci1mb3JtLWNvbXBhY3QgLmNsci1yYWRpby13cmFwcGVyIC5jbHItY29udHJvbC1sYWJlbHtt''@;'; put 'put ''YXJnaW4tdG9wOjB9LmNsci1zZWxlY3Qtd3JhcHBlciwuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXJ7cG9zaXRpb246cmVsYXRpdmU7d2hpdGUtc3BhY2U6bm93cmFwfS5jbHItc2VsZWN0LXdyYXBwZXIgc2VsZWN0LC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3R7LXdlYmtpdC1hcHBl''@;'; put 'put ''YXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtib3gtc2hhZG93Om5vbmU7YmFja2dyb3VuZDowIDA7aGVpZ2h0OnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtOSk7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXRleHQtY29sb3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWNvbG9yKTtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWdu''@;'; put 'put ''LWl0ZW1zOmNlbnRlcjtmb250LXNpemU6dmFyKC0tY2xyLXAyLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2xldHRlci1zcGFjaW5nOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzowIGNhbGModmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1zaXplKSArIHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkqMikgMCB2YXIoLS1jbHItZm9y''@;'; put 'put ''bXMtYmFzZWxpbmUpO2N1cnNvcjpwb2ludGVyO3otaW5kZXg6Mn0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpmb2N1cywuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0OmZvY3Vze291dGxpbmU6MH0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpub3QoW211bHRpcGxlXSksLmNs''@;'; put 'put ''ci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdDpub3QoW211bHRpcGxlXSl7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHRyYW5zcGFyZW50IDk1JSx2YXIoLS1jbHItZm9ybXMtZm9jdXNlZC1jb2xvcikgOTUlKSBuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjAgMTAw''@;'; put 'put ''JTt0cmFuc2l0aW9uOmJhY2tncm91bmQtc2l6ZSAuMnMgZWFzZX0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpub3QoW211bHRpcGxlXSk6Zm9jdXMsLmNsci1zZWxlY3Qtd3JhcHBlciBzZWxlY3Q6bm90KFttdWx0aXBsZV0pLmNsci1mb2N1cywuY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVj''@;'; put 'put ''dDpub3QoW211bHRpcGxlXSk6Zm9jdXMtd2l0aGluLC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3Q6bm90KFttdWx0aXBsZV0pOmZvY3VzLC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3Q6bm90KFttdWx0aXBsZV0pLmNsci1mb2N1cywuY2xyLW11bHRpc2VsZWN0LXdyYXBw''@;'; put 'put ''ZXIgc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpmb2N1cy13aXRoaW57Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtZm9jdXNlZC1jb2xvcik7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJX0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdFttdWx0aXBsZV06Zm9jdXMsLmNsci1t''@;'; put 'put ''dWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdFttdWx0aXBsZV06Zm9jdXN7b3V0bGluZS1jb2xvcjpIaWdobGlnaHQ7b3V0bGluZS1jb2xvcjotd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1zdHlsZTphdXRvO291dGxpbmUtd2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKX0u''@;'; put 'put ''Y2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpob3ZlciwuY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDphY3RpdmUsLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdDpob3ZlciwuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0OmFjdGl2ZXtib3JkZXItY29sb3I6dmFyKC0tY2xy''@;'; put 'put ''LWZvcm1zLXNlbGVjdC1ob3Zlci1ib3JkZXItY29sb3IpO2JhY2tncm91bmQ6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1ob3Zlci1iYWNrZ3JvdW5kKX0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpob3ZlcjpkaXNhYmxlZCwuY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDphY3RpdmU6ZGlz''@;'; put 'put ''YWJsZWQsLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdDpob3ZlcjpkaXNhYmxlZCwuY2xyLW11bHRpc2VsZWN0LXdyYXBwZXIgc2VsZWN0OmFjdGl2ZTpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtZGlzYWJsZWQt''@;'; put 'put ''Ym9yZGVyLWNvbG9yKX0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdDpkaXNhYmxlZCBvcHRpb24sLmNsci1zZWxlY3Qtd3JhcHBlciBzZWxlY3Qgb3B0aW9uOmRpc2FibGVkLC5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciBzZWxlY3Q6ZGlzYWJsZWQgb3B0aW9uLC5jbHItbXVsdGlzZWxlY3Qt''@;'; put 'put ''d3JhcHBlciBzZWxlY3Qgb3B0aW9uOmRpc2FibGVke2NvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLXNlbGVjdC13cmFwcGVyIHNlbGVjdCBvcHRpb24sLmNsci1tdWx0aXNlbGVjdC13cmFwcGVyIHNlbGVjdCBvcHRp''@;'; put 'put ''b257Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1vcHRpb24tY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1vcHRpb24tYmFja2dyb3VuZC1jb2xvcil9LmNsci1zZWxlY3Qtd3JhcHBlciBzZWxlY3Q6Oi1tcy1leHBhbmQsLmNsci1tdWx0aXNlbGVj''@;'; put 'put ''dC13cmFwcGVyIHNlbGVjdDo6LW1zLWV4cGFuZHtkaXNwbGF5Om5vbmV9LmNsci1zZWxlY3Qtd3JhcHBlcnttYXgtaGVpZ2h0OmNhbGMoNCp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpKTtkaXNwbGF5OmlubGluZS1ibG9ja30uY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVye3Bvc2l0aW9uOmFi''@;'; put 'put ''c29sdXRlO2NvbnRlbnQ6IiI7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtY2FyZXQtc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1zaXplKTt0b3A6Y2FsYyguNSooNCp2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpIC0gdmFyKC0tY2xyLWZvcm1zLXNlbGVj''@;'; put 'put ''dC1jYXJldC1zaXplKSkpO3JpZ2h0OnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSk7bWFyZ2luOjA7bWFzazp1cmwoZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMHZpZXdC''@;'; put 'put ''b3glM0QlMjIwJTIwMCUyMDEyJTIwMTIlMjIlM0UlMEElMjAlMjAlMjAlMjAlM0NkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDc3R5bGUlM0UuY2xzLTElN0JmaWxsJTNBJTIzOWE5YTlhJTNCJTdEJTNDJTJGc3R5bGUlM0UlMEElMjAlMjAlMjAlMjAlM0MlMkZkZWZzJTNF''@;'; put 'put ''JTBBJTIwJTIwJTIwJTIwJTNDdGl0bGUlM0VDYXJldCUzQyUyRnRpdGxlJTNFJTBBJTIwJTIwJTIwJTIwJTNDcGF0aCUyMGNsYXNzJTNEJTIyY2xzLTElMjIlMjBkJTNEJTIyTTYlMkM5TDEuMiUyQzQuMmEwLjY4JTJDMC42OCUyQzAlMkMwJTJDMSUyQzEtMUw2JTJDNy4wOCUyQzkuODQlMkMz''@;'; put 'put ''LjI0YTAuNjglMkMwLjY4JTJDMCUyQzElMkMxJTJDMSUyQzFaJTIyJTJGJTNFJTBBJTNDJTJGc3ZnJTNFJTBBKTstd2Via2l0LW1hc2stcmVwZWF0Om5vLXJlcGVhdDttYXNrLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtc2VsZWN0LWNhcmV0LWNv''@;'; put 'put ''bG9yKX0uY2xyLXNlbGVjdC13cmFwcGVyOmhvdmVyOmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1ob3Zlci1jb2xvcil9LmNsci1lcnJvciAuY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVyLC5jbHItc3VjY2VzcyAuY2xyLXNlbGVjdC13cmFwcGVy''@;'; put 'put ''OmFmdGVye3JpZ2h0OmNhbGModmFyKC0tY2xyLWZvcm1zLWljb24tc2l6ZSkgKyB2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpKX0uY2xyLW11bHRpc2VsZWN0LXdyYXBwZXJ7ZGlzcGxheTpmbGV4fS5jbHItbXVsdGlzZWxlY3Qtd3JhcHBlciAuY2xyLXZhbGlkYXRlLWljb257bWFyZ2luLWxl''@;'; put 'put ''ZnQ6MH1zZWxlY3RbbXVsdGlwbGVdLHNlbGVjdFtzaXplXXtwYWRkaW5nOjA7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQ6dmFyKC0tY2xy''@;'; put 'put ''LWZvcm1zLXNlbGVjdC1tdWx0aXBsZS1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2hlaWdodDphdXRvO21pbi13aWR0aDpjYWxjKDEyMCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9c2VsZWN0''@;'; put 'put ''W211bHRpcGxlXTpob3ZlcixzZWxlY3RbbXVsdGlwbGVdOmFjdGl2ZSxzZWxlY3Rbc2l6ZV06aG92ZXIsc2VsZWN0W3NpemVdOmFjdGl2ZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtbXVsdGlwbGUtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1m''@;'; put 'put ''b3Jtcy1zZWxlY3QtbXVsdGlwbGUtYm9yZGVyLWNvbG9yKX1zZWxlY3RbbXVsdGlwbGVdIG9wdGlvbixzZWxlY3Rbc2l6ZV0gb3B0aW9ue3BhZGRpbmc6Y2FsYyh2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpKi41KSB2YXIoLS1jbHItZm9ybXMtYmFzZWxpbmUpO2NvbG9yOnZhcigtLWNsci1m''@;'; put 'put ''b3Jtcy1zZWxlY3QtbXVsdGlwbGUtb3B0aW9uLWNvbG9yKX1zZWxlY3RbbXVsdGlwbGVdIG9wdGlvbjpjaGVja2VkLHNlbGVjdFtzaXplXSBvcHRpb246Y2hlY2tlZHtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1zZWxlY3QtbXVsdGlwbGUtc2VsZWN0ZWQtb3B0aW9uLWJhY2tn''@;'; put 'put ''cm91bmQtY29sb3IpfS5jbHItZXJyb3Igc2VsZWN0Om5vdChbbXVsdGlwbGVdKXtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKTtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBib3R0b20sdHJhbnNwYXJlbnQgOTUlLHZhcigtLWNsci1mb3Jt''@;'; put 'put ''cy1pbnZhbGlkLWNvbG9yKSA5NSUpIG5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6MCAxMDAlO3RyYW5zaXRpb246YmFja2dyb3VuZC1zaXplIC4ycyBlYXNlfS5jbHItZXJyb3Igc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpmb2N1cywuY2xyLWVycm9yIHNlbGVjdDpub3QoW211bHRpcGxlXSku''@;'; put 'put ''Y2xyLWZvY3VzLC5jbHItZXJyb3Igc2VsZWN0Om5vdChbbXVsdGlwbGVdKTpmb2N1cy13aXRoaW57Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcik7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJX0uY2xyLWVycm9yIHNlbGVjdFttdWx0aXBsZV17Ym9y''@;'; put 'put ''ZGVyLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1pbnZhbGlkLWNvbG9yKX0uY2xyLXN1Y2Nlc3Mgc2VsZWN0Om5vdChbbXVsdGlwbGVdKXtib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy12YWxpZC1jb2xvcik7YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLHRy''@;'; put 'put ''YW5zcGFyZW50IDk1JSx2YXIoLS1jbHItZm9ybXMtdmFsaWQtY29sb3IpIDk1JSkgbm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTowIDEwMCU7dHJhbnNpdGlvbjpiYWNrZ3JvdW5kLXNpemUgLjJzIGVhc2V9LmNsci1zdWNjZXNzIHNlbGVjdDpub3QoW211bHRpcGxlXSk6Zm9jdXMsLmNsci1z''@;'; put 'put ''dWNjZXNzIHNlbGVjdDpub3QoW211bHRpcGxlXSkuY2xyLWZvY3VzLC5jbHItc3VjY2VzcyBzZWxlY3Q6bm90KFttdWx0aXBsZV0pOmZvY3VzLXdpdGhpbntib3JkZXItYm90dG9tLWNvbG9yOnZhcigtLWNsci1mb3Jtcy12YWxpZC1jb2xvcik7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJX0u''@;'; put 'put ''Y2xyLXN1Y2Nlc3Mgc2VsZWN0W211bHRpcGxlXXtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuY2xyLXNlbGVjdC5kaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItZm9ybXMtc2VsZWN0LWRpc2FibGVkLWNvbG9yKTtj''@;'; put 'put ''dXJzb3I6bm90LWFsbG93ZWR9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1zZWxlY3QuZGlzYWJsZWQ6aG92ZXI6YWZ0ZXJ7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLXNlbGVjdC1jYXJldC1jb2xvcil9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1zZWxlY3QuZGlzYWJs''@;'; put 'put ''ZWQ+c2VsZWN0LC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItc2VsZWN0IHNlbGVjdDpkaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItZm9ybXMtc2VsZWN0LWRpc2FibGVkLWNvbG9yKTtjdXJzb3I6bm90LWFsbG93ZWR9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmNsci1zZWxl''@;'; put 'put ''Y3QuZGlzYWJsZWQ+c2VsZWN0OmhvdmVyLC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItc2VsZWN0IHNlbGVjdDpkaXNhYmxlZDpob3ZlcntiYWNrZ3JvdW5kOjAgMDtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLWJvcmRlci1jb2xvcil9LmNsci1mb3JtLWNvbXBhY3QgLmNs''@;'; put 'put ''ci1tdWx0aXNlbGVjdC13cmFwcGVye21hcmdpbi10b3A6MH0uY2xyLXRleHRhcmVhLXdyYXBwZXJ7d2hpdGUtc3BhY2U6bm93cmFwO2Rpc3BsYXk6ZmxleDttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9LmNsci10ZXh0YXJlYS13cmFwcGVyIC5jbHItdmFsaWRhdGUtaWNv''@;'; put 'put ''bnttYXJnaW4tbGVmdDowfS5jbHItdGV4dGFyZWF7bWF4LXdpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpO2hlaWdodDphdXRvO3Jlc2l6ZTp2ZXJ0aWNhbDtib3JkZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIo''@;'; put 'put ''LS1jbHItZm9ybXMtYm9yZGVyLWNvbG9yKTtiYWNrZ3JvdW5kOnZhcigtLWNsci1mb3Jtcy10ZXh0YXJlYS1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZm9ybXMtdGV4dGFyZWEtYm9yZGVyLXJhZGl1''@;'; put 'put ''cyk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVp''@;'; put 'put ''Z2h0OmNhbGMoMjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyl9LmNsci10ZXh0YXJlYTpmb2N1c3tvdXRsaW5lLWNvbG9yOkhpZ2hsaWdodDtvdXRsaW5lLWNv''@;'; put 'put ''bG9yOi13ZWJraXQtZm9jdXMtcmluZy1jb2xvcjtvdXRsaW5lLXN0eWxlOmF1dG87b3V0bGluZS13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpO291dGxpbmUtY29sb3I6dmFyKC0tY2xyLWZvcm1zLWZvY3VzZWQtY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtZm9j''@;'; put 'put ''dXNlZC1jb2xvcil9LmNsci10ZXh0YXJlYTpkaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXRleHRhcmVhLWRpc2FibGVkLWJhY2tncm91bmQpO2JvcmRl''@;'; put 'put ''ci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWRpc2FibGVkLWNvbG9yKX0uY2xyLXN1Y2Nlc3MgLmNsci10ZXh0YXJlYXtib3JkZXItY29sb3I6dmFyKC0tY2xyLWZvcm1zLXZhbGlkLWNvbG9yKTtvdXRsaW5lLWNvbG9yOnZhcigtLWNsci1mb3Jtcy12YWxpZC1jb2xvcil9LmNsci1l''@;'; put 'put ''cnJvciAuY2xyLXRleHRhcmVhe2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcik7b3V0bGluZS1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcil9LmNsci1jb250cm9sLWNvbnRhaW5lciB0ZXh0YXJlYXt3aWR0aDphdXRvfS5jbHItZm9ybS1jb250''@;'; put 'put ''cm9sLnJvdyAuY2xyLXRleHRhcmVhLXdyYXBwZXJ7bWF4LXdpZHRoOmNhbGMoMTAwJSAtIHZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSkpfS5jbHItZm9ybS1jb21wYWN0IC5jbHItdGV4dGFyZWEtd3JhcHBlcnttYXJnaW4tdG9wOjB9LmNsci1mb3JtLWNvbXBhY3QgLmNsci10ZXh0YXJlYS13''@;'; put 'put ''cmFwcGVyIC5jbHItdGV4dGFyZWF7bWF4LXdpZHRoOjEwMCV9LmNsci1mb3JtLWNvbXBhY3QgLmNsci10ZXh0YXJlYS13cmFwcGVyIC5jbHItdGV4dGFyZWF+LmNsci1zdWJ0ZXh0e21hcmdpbi1sZWZ0OnZhcigtLWNsci1mb3Jtcy1iYXNlbGluZSl9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHIt''@;'; put 'put ''dG9nZ2xlLWJnLWNvbG9yLW9mZjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLW5ldXRyYWwpOy0tY2xyLXRvZ2dsZS1iZy1jb2xvci1vbjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLXRvZ2dsZS1oYW5kbGUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRl''@;'; put 'put ''cmFjdGlvbi1iYWNrZ3JvdW5kKTstLWNsci10b2dnbGUtaGFuZGxlLWJvcmRlci1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWJnLWNvbG9yLW9mZik7LS1jbHItdG9nZ2xlLWhhbmRsZS1ib3JkZXItY29sb3Itb246dmFyKC0tY2xyLXRvZ2dsZS1iZy1jb2xvci1vbik7LS1jbHItdG9nZ2xlLWRp''@;'; put 'put ''c2FibGVkLWRlZmF1bHQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpOy0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1kZWZhdWx0LWhhbmRsZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91''@;'; put 'put ''bmQpOy0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vZmYtYm9yZGVyLWNvbG9yOnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtZGVmYXVsdC1ib3JkZXItY29sb3IpOy0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vZmYtYmctY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1kZWZhdWx0LWhhbmRs''@;'; put 'put ''ZS1jb2xvcik7LS1jbHItdG9nZ2xlLWRpc2FibGVkLW9mZi1oYW5kbGUtYm9yZGVyLWNvbG9yOnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtZGVmYXVsdC1ib3JkZXItY29sb3IpOy0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1ib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxl''@;'; put 'put ''ZC1kZWZhdWx0LWJvcmRlci1jb2xvcik7LS1jbHItdG9nZ2xlLWRpc2FibGVkLW9uLWJnLWNvbG9yOnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtZGVmYXVsdC1ib3JkZXItY29sb3IpOy0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1oYW5kbGUtYm9yZGVyLWNvbG9yOnZhcigtLWNsci10b2dn''@;'; put 'put ''bGUtZGlzYWJsZWQtZGVmYXVsdC1ib3JkZXItY29sb3IpfS5jbHItdG9nZ2xlLXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF17LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmV9LmNsci10''@;'; put 'put ''b2dnbGUtd3JhcHBlcnt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jazttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0uY2xyLXRvZ2dsZS13cmFwcGVyIGxhYmVs''@;'; put 'put ''e2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO2N1cnNvcjpwb2ludGVyO21hcmdpbi1yaWdodDowO21hcmdpbi1sZWZ0OmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCkgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2Jh''@;'; put 'put ''bC1zcGFjZS05KX0uY2xyLXRvZ2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hde3Bvc2l0aW9uOmFic29sdXRlO3RvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpO3JpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCk7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7''@;'; put 'put ''d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTtvcGFjaXR5OjB9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XStsYWJlbDpiZWZvcmV7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTppbmxpbmUtYmxvY2s7Y29udGVudDoiIjtib3JkZXI6dmFyKC0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMjAwKSBzb2xpZCB2YXIoLS1jbHItdG9nZ2xlLWJnLWNvbG9yLW9mZik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMjAwKTtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10b2dnbGUtYmctY29sb3Itb2ZmKTt0b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTtyaWdodDowO2xlZnQ6Y2FsYygtMSpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApICsgdmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS01KSkpO3RyYW5zaXRpb24tZHVyYXRpb246LjE1czt0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjplYXNlLWluO3RyYW5zaXRpb24tcHJvcGVydHk6Ym9yZGVyLWNvbG9yLGJhY2tncm91bmQtY29sb3J9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNr''@;'; put 'put ''Ym94XTpmb2N1cytsYWJlbDpiZWZvcmV7b3V0bGluZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmUpO291dGxpbmUtY29sb3I6LXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtb2Zmc2V0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24t''@;'; put 'put ''b3V0bGluZS1vZmZzZXQpfS5jbHItdG9nZ2xlLXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbDpiZWZvcmV7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci10b2dnbGUtYmctY29sb3Itb24pO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1iZy1jb2xvci1v''@;'; put 'put ''bik7dHJhbnNpdGlvbi1kdXJhdGlvbjouMTVzO3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2UtaW47dHJhbnNpdGlvbi1wcm9wZXJ0eTpib3JkZXItY29sb3IsYmFja2dyb3VuZC1jb2xvcn0uY2xyLXRvZ2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdK2xhYmVsOmFmdGVy''@;'; put 'put ''e3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbnRlbnQ6IiI7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCkgc29saWQgdmFyKC0tY2xyLXRvZ2dsZS1oYW5kbGUtYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0zMDApO3JpZ2h0OjA7dG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWhhbmRsZS1iZy1jb2xvcik7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS03KTtsZWZ0OmNhbGMoLTEqY2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpKTt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXM7dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1pbjt0cmFuc2l0''@;'; put 'put ''aW9uLXByb3BlcnR5OnJpZ2h0LGxlZnR9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsOmFmdGVye2JvcmRlci1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWhhbmRsZS1ib3JkZXItY29sb3Itb24pO3JpZ2h0OmNhbGMoLTEqY2FsYyh2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTEwKSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpKTtsZWZ0OmNhbGMoLTEqY2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpKTt0cmFuc2l0aW9uLWR1cmF0aW9uOi4xNXM7dHJhbnNpdGlvbi10aW1p''@;'; put 'put ''bmctZnVuY3Rpb246ZWFzZS1pbjt0cmFuc2l0aW9uLXByb3BlcnR5OnJpZ2h0LGxlZnR9LmNsci10b2dnbGUtd3JhcHBlci5kaXNhYmxlZCBsYWJlbHtjdXJzb3I6bm90LWFsbG93ZWR9LmNsci10b2dnbGUtd3JhcHBlci5kaXNhYmxlZCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xh''@;'; put 'put ''YmVsOmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vbi1iZy1jb2xvcil9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpk''@;'; put 'put ''aXNhYmxlZCtsYWJlbHtjdXJzb3I6bm90LWFsbG93ZWR9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpkaXNhYmxlZCtsYWJlbDpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWRpc2FibGVkLW9mZi1iZy1jb2xvcik7Ym9yZGVyLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtb2ZmLWJvcmRlci1jb2xvcil9LmNsci10b2dnbGUtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpkaXNhYmxlZCtsYWJlbDphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtb2ZmLWJnLWNvbG9yKTti''@;'; put 'put ''b3JkZXItY29sb3I6dmFyKC0tY2xyLXRvZ2dsZS1kaXNhYmxlZC1vZmYtaGFuZGxlLWJvcmRlci1jb2xvcik7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt0b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uY2xyLXRv''@;'; put 'put ''Z2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6ZGlzYWJsZWQrbGFiZWw6YmVmb3Jle2JvcmRlci1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWRpc2FibGVkLW9uLWJvcmRlci1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdG9nZ2xlLWRpc2FibGVkLW9u''@;'; put 'put ''LWJnLWNvbG9yKX0uY2xyLXRvZ2dsZS13cmFwcGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQ6ZGlzYWJsZWQrbGFiZWw6YWZ0ZXJ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci10b2dnbGUtZGlzYWJsZWQtb24taGFuZGxlLWJvcmRlci1jb2xvcik7aGVpZ2h0OnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt0b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTtsZWZ0OmNhbGMoLTEqY2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpKX0uY2xyLXRvZ2dsZS13cmFw''@;'; put 'put ''cGVyIGlucHV0W3R5cGU9Y2hlY2tib3hdOmRpc2FibGVkK2xhYmVsOmFmdGVye2xlZnQ6Y2FsYygtMSpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSkpfS5jbHItdG9nZ2xlLXdyYXBwZXIucmlnaHQtbGFiZWwgbGFiZWx7bWFyZ2lu''@;'; put 'put ''LWxlZnQ6Y2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpO21hcmdpbi1yaWdodDowfS5jbHItdG9nZ2xlLXdyYXBwZXIucmlnaHQtbGFiZWwgaW5wdXRbdHlwZT1jaGVja2JveF0rbGFiZWw6YmVmb3Jle3JpZ2h0OjA7bGVmdDpjYWxj''@;'; put 'put ''KC0xKmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCkgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpKSl9LmNsci10b2dnbGUtd3JhcHBlci5yaWdodC1sYWJlbCBpbnB1dFt0eXBlPWNoZWNrYm94XStsYWJlbDphZnRlcntyaWdodDowO2xlZnQ6Y2FsYygtMSpjYWxjKHZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtMTApICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSkpO3RyYW5zaXRpb24tcHJvcGVydHk6bGVmdH0uY2xyLXRvZ2dsZS13cmFwcGVyLnJpZ2h0LWxhYmVsIGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrbGFiZWw6YWZ0ZXJ7bGVmdDpjYWxjKC0xKmNhbGMo''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpKSk7dHJhbnNpdGlvbi1wcm9wZXJ0eTpsZWZ0fS5jbHItdG9nZ2xlLXdyYXBwZXIgLmNsci1jb250cm9sLWxhYmVse2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBv''@;'; put 'put ''Z3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2lu''@;'; put 'put ''Zzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSAwO21hcmdpbi10b3A6MH0uY2xyLWNvbnRyb2wtaW5saW5lIC5jbHItdG9nZ2xlLXdyYXBwZXIgLmNsci1jb250cm9sLWxhYmVse2Rp''@;'; put 'put ''c3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1yaWdodDowfS5jbHItdG9nZ2xlLXJpZ2h0IGxhYmVse2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0OmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCkgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUp''@;'; put 'put ''KX0uY2xyLXRvZ2dsZS1yaWdodCBpbnB1dFt0eXBlPWNoZWNrYm94XStsYWJlbDpiZWZvcmV7bGVmdDp1bnNldDtyaWdodDpjYWxjKC0xKmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCkgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpKSl9LmNsci10b2dnbGUtcmlnaHQgaW5wdXRb''@;'; put 'put ''dHlwZT1jaGVja2JveF0rbGFiZWw6YWZ0ZXJ7bGVmdDp1bnNldDtyaWdodDpjYWxjKC0xKmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpKSk7dHJhbnNpdGlvbi1wcm9wZXJ0eTpyaWdodH0uY2xyLXRvZ2dsZS1yaWdodCBpbnB1dFt0''@;'; put 'put ''eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsOmFmdGVye2xlZnQ6dW5zZXQ7cmlnaHQ6Y2FsYygtMSpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSkpO3RyYW5zaXRpb24tcHJvcGVydHk6cmlnaHR9LmNsci10b2dnbGUtcmlnaHQg''@;'; put 'put ''aW5wdXRbdHlwZT1jaGVja2JveF06ZGlzYWJsZWQrbGFiZWw6YWZ0ZXJ7bGVmdDp1bnNldDtyaWdodDpjYWxjKC0xKmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpKSl9LmNsci10b2dnbGUtcmlnaHQgaW5wdXRbdHlwZT1jaGVja2Jv''@;'; put 'put ''eF06Y2hlY2tlZDpkaXNhYmxlZCtsYWJlbDphZnRlcntsZWZ0OnVuc2V0O3JpZ2h0OmNhbGMoLTEqY2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpKX0uY2xyLXRvZ2dsZS1yaWdodCAuY2xyLWNvbnRyb2wtaW5saW5lIC5jbHItdG9n''@;'; put 'put ''Z2xlLXdyYXBwZXIgLmNsci1jb250cm9sLWxhYmVse21hcmdpbi1yaWdodDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSl9LmNsci1yYW5nZS13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNv''@;'; put 'put ''bnRlbnQ6ZmxleC1zdGFydDthbGlnbi1pdGVtczpmbGV4LWVuZDtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRodW1iLWhlaWdodCk7d2hpdGUtc3BhY2U6bm93cmFwfS5jbHItcmFuZ2Utd3JhcHBlciAuZmlsbC1pbnB1dHtwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7ZGlzcGxheTpp''@;'; put 'put ''bmxpbmUtYmxvY2s7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpO3BvaW50ZXItZXZlbnRzOm5vbmU7Y3Vyc29yOnBvaW50ZXI7ei1pbmRleDoxMDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1mb3Jtcy1yYW5nZS1wcm9ncmVzcy1maWxsLWNvbG9yKTtib3Jk''@;'; put 'put ''ZXItcmFkaXVzOnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1ib3JkZXItcmFkaXVzKTtib3JkZXItc3R5bGU6bm9uZX0uY2xyLXJhbmdle2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmZsZXgtZW5kO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFu''@;'; put 'put ''Z2UtdGh1bWItaGVpZ2h0KX0uY2xyLXJhbmdlOmRpc2FibGVke3BvaW50ZXItZXZlbnRzOmF1dG87Y3Vyc29yOm5vdC1hbGxvd2VkOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2xlZnQ6MDtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWhlaWdodCk7YmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stY29sb3ItZGlzYWJsZWQpfS5jbHItcmFuZ2U6ZGlzYWJsZWQ6Oi13ZWJraXQtc2xpZGVyLXRodW1iey13ZWJraXQtYXBwZWFyYW5jZTpub25lO3RyYW5zZm9ybTp0cmFuc2xhdGVZKGNhbGModmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRodW1i''@;'; put 'put ''LWhlaWdodCkvMiAtIHZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpLzIgKyB2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLXdpZHRoKSkpO2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZp''@;'; put 'put ''bGwtY29sb3ItZGlzYWJsZWQpO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KX0uY2xyLXJhbmdlOmRpc2FibGVkOjotbW96LXJhbmdlLXRodW1ie2JvcmRlcjowO2JvcmRlci1yYWRpdXM6''@;'; put 'put ''NTAlO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3ItZGlzYWJsZWQpO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KX0uY2xyLXJh''@;'; put 'put ''bmdlOmRpc2FibGVkKy5maWxsLWlucHV0e3BvaW50ZXItZXZlbnRzOmF1dG87Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3ItZGlzYWJsZWQpfWlucHV0W3R5cGU9cmFuZ2Vde3BhZGRpbmc6MDstd2Vi''@;'; put 'put ''a2l0LWFwcGVhcmFuY2U6bm9uZTtsZWZ0OjA7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWNvbG9yKTtib3JkZXI6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWJvcmRlci13''@;'; put 'put ''aWR0aCkgc29saWQgdmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLXJhZGl1cyl9aW5wdXRbdHlwZT1yYW5nZV06Oi13ZWJraXQtc2xpZGVyLXRodW1iey13ZWJraXQtYXBwZWFy''@;'; put 'put ''YW5jZTpub25lO3RyYW5zZm9ybTp0cmFuc2xhdGVZKGNhbGModmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRodW1iLWhlaWdodCkvMiAtIHZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpLzIgKyB2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stYm9yZGVyLXdpZHRoKSkpO2JvcmRl''@;'; put 'put ''ci1yYWRpdXM6NTAlO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3IpO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KX1pbnB1dFt0''@;'; put 'put ''eXBlPXJhbmdlXTpkaXNhYmxlZHtib3JkZXI6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWJvcmRlci1jb2xvci1kaXNhYmxlZCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJh''@;'; put 'put ''Y2stYm9yZGVyLXJhZGl1cyl9aW5wdXRbdHlwZT1yYW5nZV06Oi1tb3otcmFuZ2UtdGh1bWJ7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czo1MCU7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtcHJvZ3Jlc3MtZmlsbC1jb2xvcik7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1y''@;'; put 'put ''YW5nZS10aHVtYi1oZWlnaHQpO3dpZHRoOnZhcigtLWNsci1mb3Jtcy1yYW5nZS10aHVtYi1oZWlnaHQpfUBzdXBwb3J0cyAoLW1zLWltZS1hbGlnbjphdXRvKXsuY2xyLXJhbmdlLXdyYXBwZXIgLmZpbGwtaW5wdXR7ZGlzcGxheTpub25lfS5jbHItcmFuZ2Utd3JhcHBlci5wcm9ncmVzcy1m''@;'; put 'put ''aWxsIGlucHV0W3R5cGU9cmFuZ2VdOjotbXMtZmlsbC1sb3dlcntoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWhlaWdodCk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtcHJvZ3Jlc3MtZmlsbC1jb2xvcil9aW5wdXRbdHlwZT1yYW5nZV17Ym9yZGVy''@;'; put 'put ''OjA7bWFyZ2luOjA7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7bGVmdDowO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fWlucHV0W3R5cGU9cmFuZ2VdOjotbXMtdHJhY2t7bWFyZ2luOjA7Ym9yZGVyOjA7aGVp''@;'; put 'put ''Z2h0OnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpO2N1cnNvcjpwb2ludGVyO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWNvbG9yKX1pbnB1dFt0eXBlPXJhbmdlXTo6LW1zLXRodW1ie2JvcmRlcjowO2JvcmRlci1yYWRpdXM6NTAlO2Jh''@;'; put 'put ''Y2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwtY29sb3IpO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KX19XzotbXMtZnVsbHNjcmVlbiAuY2xy''@;'; put 'put ''LXJhbmdlLXdyYXBwZXIgLmZpbGwtaW5wdXQsOnJvb3QgLmNsci1yYW5nZS13cmFwcGVyIC5maWxsLWlucHV0e2Rpc3BsYXk6bm9uZX1fOi1tcy1mdWxsc2NyZWVuIC5jbHItcmFuZ2Utd3JhcHBlci5wcm9ncmVzcy1maWxsIGlucHV0W3R5cGU9cmFuZ2VdOjotbXMtZmlsbC1sb3dlciw6cm9v''@;'; put 'put ''dCAuY2xyLXJhbmdlLXdyYXBwZXIucHJvZ3Jlc3MtZmlsbCBpbnB1dFt0eXBlPXJhbmdlXTo6LW1zLWZpbGwtbG93ZXJ7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1yYW5nZS10cmFjay1oZWlnaHQpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwt''@;'; put 'put ''Y29sb3IpfV86LW1zLWZ1bGxzY3JlZW4gaW5wdXRbdHlwZT1yYW5nZV06Oi1tcy10b29sdGlwLDpyb290IGlucHV0W3R5cGU9cmFuZ2VdOjotbXMtdG9vbHRpcHt2aXNpYmlsaXR5OmhpZGRlbn1fOi1tcy1mdWxsc2NyZWVuIGlucHV0W3R5cGU9cmFuZ2VdLDpyb290IGlucHV0W3R5cGU9cmFu''@;'; put 'put ''Z2Vde2JvcmRlcjowO21hcmdpbjowOy13ZWJraXQtYXBwZWFyYW5jZTpub25lO2xlZnQ6MDtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRodW1iLWhlaWdodCk7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH1fOi1tcy1mdWxsc2NyZWVuIGlucHV0W3R5cGU9cmFuZ2VdOjotbXMt''@;'; put 'put ''dHJhY2ssOnJvb3QgaW5wdXRbdHlwZT1yYW5nZV06Oi1tcy10cmFja3tib3JkZXI6MDttYXJnaW46MDtoZWlnaHQ6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXRyYWNrLWhlaWdodCk7Y3Vyc29yOnBvaW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdHJhY2stY29s''@;'; put 'put ''b3IpfV86LW1zLWZ1bGxzY3JlZW4gaW5wdXRbdHlwZT1yYW5nZV06Oi1tcy10aHVtYiw6cm9vdCBpbnB1dFt0eXBlPXJhbmdlXTo6LW1zLXRodW1ie2JvcmRlcjowO2JvcmRlci1yYWRpdXM6NTAlO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXJhbmdlLXByb2dyZXNzLWZpbGwt''@;'; put 'put ''Y29sb3IpO2hlaWdodDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KTt3aWR0aDp2YXIoLS1jbHItZm9ybXMtcmFuZ2UtdGh1bWItaGVpZ2h0KX1pbnB1dFtjbHJEYXRhbGlzdElucHV0XXtwb3NpdGlvbjpyZWxhdGl2ZX1pbnB1dFtjbHJEYXRhbGlzdElucHV0XTo6LXdlYmtp''@;'; put 'put ''dC1jYWxlbmRhci1waWNrZXItaW5kaWNhdG9ye29wYWNpdHk6MDtjdXJzb3I6dGV4dH0uY2xyLWlucHV0LWdyb3VwIGlucHV0W2NsckRhdGFsaXN0SW5wdXRde3otaW5kZXg6Mn0uY2xyLWlucHV0LWdyb3VwIC5jbHItZGF0YWxpc3QtY2FyZXR7cG9zaXRpb246YWJzb2x1dGU7dG9wOjI1JTty''@;'; put 'put ''aWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2NvbG9yOnZhcigtLWNsci1mb3Jtcy1kYXRhbGlzdC1jYXJldC1jb2xvcik7Y3Vyc29yOnRleHQ7aGVpZ2h0OnZhcigtLWNsci1mb3Jtcy1kYXRhbGlzdC1jYXJldC1pY29uLXNpemUpO3dpZHRoOnZhcigtLWNsci1mb3Jtcy1kYXRhbGlz''@;'; put 'put ''dC1jYXJldC1pY29uLXNpemUpfS5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIC5jbHItZGF0YWxpc3QtY2FyZXR7Y29sb3I6dmFyKC0tY2xyLWZvcm1zLWRhdGFsaXN0LWNhcmV0LWRpc2FibGVkLWNvbG9yKX1jbHItZGF0YWxpc3QtY29udGFpbmVyIC5jbHItaW5wdXQtZ3JvdXB7cGFkZGlu''@;'; put 'put ''Zy1yaWdodDowfS5jbHItaW5wdXQtd3JhcHBlciBpbnB1dFtjbHJQYXNzd29yZF0rYnV0dG9uLmNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbiAuY2xyLXBhc3N3b3JkLWV5ZS1pY29ue2NvbG9yOnZhcigtLWNsci1mb3Jtcy1wYXNzd29yZC1leWUtaWNvbi1jb2xvcil9LmNsci1pbnB1dC13''@;'; put 'put ''cmFwcGVyIGlucHV0W2NsclBhc3N3b3JkXStidXR0b24uY2xyLWlucHV0LWdyb3VwLWljb24tYWN0aW9uW2Rpc2FibGVkXSAuY2xyLXBhc3N3b3JkLWV5ZS1pY29ue2ZpbGw6dmFyKC0tY2xyLWZvcm1zLXBhc3N3b3JkLWRpc2FibGVkLWV5ZS1pY29uLWNvbG9yKX0uY2xyLWlucHV0LXdyYXBw''@;'; put 'put ''ZXIgaW5wdXRbY2xyUGFzc3dvcmRdW2Rpc2FibGVkXXtjb2xvcjp2YXIoLS1jbHItZm9ybXMtcGFzc3dvcmQtZGlzYWJsZWQtZXllLWljb24tY29sb3IpfS5jbHItbnVtYmVyLWlucHV0LXdyYXBwZXJ7ZGlzcGxheTppbmxpbmUtYmxvY2s7d2hpdGUtc3BhY2U6bm93cmFwO21heC1oZWlnaHQ6''@;'; put 'put ''dmFyKC0tY2xyLWZvcm1zLWlucHV0LXdyYXBwZXItaGVpZ2h0KX0uY2xyLW51bWJlci1pbnB1dC13cmFwcGVyIC5jbHItbnVtYmVyLWlucHV0ey1tb3otYXBwZWFyYW5jZTp0ZXh0ZmllbGR9LmNsci1udW1iZXItaW5wdXQtd3JhcHBlciAuY2xyLW51bWJlci1pbnB1dDo6LXdlYmtpdC1vdXRl''@;'; put 'put ''ci1zcGluLWJ1dHRvbiwuY2xyLW51bWJlci1pbnB1dC13cmFwcGVyIC5jbHItbnVtYmVyLWlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lO21hcmdpbjowfS5jbHItbnVtYmVyLWlucHV0LXdyYXBwZXIgLmNsci1udW1iZXItaW5wdXQtc2Vw''@;'; put 'put ''YXJhdG9ye2JhY2tncm91bmQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSk7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNsci1udW1iZXItaW5wdXQtd3JhcHBlciAuY2xyLWlucHV0LWdyb3VwLWlj''@;'; put 'put ''b24tYWN0aW9ue2hlaWdodDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkgLSB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0yMDApKTt3aWR0aDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkgLSB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0''@;'; put 'put ''aC0yMDApKTtwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uY2xyLW51bWJlci1pbnB1dC13cmFwcGVyIC5jbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb246aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91''@;'; put 'put ''bmQtaG92ZXIpfS5jbHItbnVtYmVyLWlucHV0LXdyYXBwZXIgLmNsci1pbnB1dC1ncm91cC1pY29uLWFjdGlvbjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtYWN0aXZlKX0uY2xyLW51bWJlci1pbnB1dC13cmFw''@;'; put 'put ''cGVyIC5jbHItaW5wdXQtZ3JvdXAtaWNvbi1hY3Rpb246ZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjp1bnNldH06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1jYWxlbmRhci1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xy''@;'; put 'put ''LWNhbGVuZGFyLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItY2FsZW5kYXItb3B0aW9uLXRleHQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItY2FsZW5kYXItYWN0aXZlLW9wdGlvbi1i''@;'; put 'put ''b3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7LS1jbHItY2FsZW5kYXItcmFuZ2UtY2VsbC1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3Rl''@;'; put 'put ''ZCk7LS1jbHItY2FsZW5kYXItYnRuLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWNhbGVuZGFyLXRvZGF5LWRhdGUtY2VsbC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWNhbGVuZGFyLXRvZGF5''@;'; put 'put ''LWRhdGUtY2VsbC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1ib3JkZXItY29sb3IpOy0tY2xyLWNhbGVuZGFyLWFjdGl2ZS1jZWxsLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhp''@;'; put 'put ''Z2hsaWdodCk7LS1jbHItY2FsZW5kYXItYWN0aXZlLWZvY3VzLWNlbGwtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaGlnaGxpZ2h0KTstLWNsci1jYWxlbmRhci1hY3RpdmUtY2VsbC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''dHlwb2dyYXBoeS1jb2xvci0xMDApOy0tY2xyLWNhbGVuZGFyLWJ0bi1waWNrZXItdHJpZ2dlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yKTstLWNsci1jYWxlbmRhci1idG4tcGlja2VyLXRyaWdnZXItaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5''@;'; put 'put ''cG9ncmFwaHktbGluay1jb2xvci1ob3Zlcik7LS1jbHItY2FsZW5kYXItYnRuLXBpY2tlci10cmlnZ2VyLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1saW5rLWNvbG9yKTstLWNsci1jYWxlbmRhci1idG4taG92ZXItZm9jdXMtY29sb3I6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhvdmVyKTstLWNsci1jYWxlbmRhci1idG4taG92ZXItZm9jdXMtY29sb3ItdGV4dDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci1jYWxlbmRhci1idG4tYWN0aXZlLWNvbG9yOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci1jYWxlbmRhci1idG4tYWN0aXZlLWNvbG9yLWJnOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmUpOy0tY2xyLWNhbGVuZGFyLXdlZWtkYXktZm9udC1zaXpl''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXNpemUtMyk7LS1jbHItY2FsZW5kYXItdG9kYXktZGF0ZS1jZWxsLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7LS1jbHItY2FsZW5kYXItcGlja2VyLWJ0bi1mb250''@;'; put 'put ''LXNpemU6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtc2l6ZS02KTstLWNsci1jYWxlbmRhci1waWNrZXItYnRuLWZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1mb250LXdlaWdodC1tZWRpdW0pfS5kYXRlcGlja2Vye2Rpc3BsYXk6ZmxleDtmbGV4LWRp''@;'; put 'put ''cmVjdGlvbjpyb3c7ZmxleC13cmFwOndyYXA7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDpjYWxjKCg3KnZhcigtLWNkcy1nbG9iYWwtc3BhY2Ut''@;'; put 'put ''MTEpKSArICgyKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykpICsgKDIqdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSkpO2hlaWdodDpjYWxjKCg4KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpKSArICgyKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykpICsgKDIq''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSkgKyA2KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykpO2JhY2tncm91bmQ6dmFyKC0tY2xyLWNhbGVuZGFyLWJhY2tncm91bmQtY29sb3IpO2JvcmRlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0x''@;'; put 'put ''MDApIHNvbGlkIHZhcigtLWNsci1jYWxlbmRhci1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7Ym94LXNoYWRvdzp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LXNoYWRvdy0xMDApO3otaW5kZXg6MTA1MH0uZGF0ZXBp''@;'; put 'put ''Y2tlciAuZGF0ZXBpY2tlci12aWV3LW1hbmFnZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtyb3ctZ2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7d2lkdGg6Y2FsYygoNyp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKSkgKyAoMip2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTcpKSArICgyKnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkpIC0gMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpKTtwYWRkaW5nLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uZGF0ZXBpY2tlci5oYXMtcmFuZ2Utb3B0aW9ue3dpZHRoOmNhbGMo''@;'; put 'put ''KDcqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkpICsgKDIqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSkgKyAoMip2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApKSArIDE1MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSArIHZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtNykgKyAyKnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkpfS5kYXRlcGlja2VyLmhhcy1hY3Rpb24tYnV0dG9uc3toZWlnaHQ6Y2FsYygoOCp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKSkgKyAoMip2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpKSArICgy''@;'; put 'put ''KnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkpICsgNip2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpICsgdmFyKC0tY2xyLWJ0bi1oZWlnaHQpICsgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpO3Jvdy1nYXA6dmFy''@;'; put 'put ''KC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uZGF0ZXBpY2tlciAuZGF0ZXBpY2tlci1hY3Rpb25ze21pbi13aWR0aDoxMDAlO2hlaWdodDpjYWxjKHZhcigtLWNsci1idG4taGVpZ2h0KSArIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykpO2Rpc3BsYXk6ZmxleDtib3JkZXItdG9wOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtMSkgc29saWQgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYm9yZGVyLWNvbG9yKTtqdXN0aWZ5LWNvbnRlbnQ6ZW5kO3BhZGRpbmctdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7Z2FwOnZhcigtLWNsci1idG4taG9yaXpvbnRhbC1tYXJnaW4p''@;'; put 'put ''fS5kYXRlcGlja2VyIC5kYXRlcGlja2VyLWFjdGlvbnMgYnV0dG9ue21hcmdpbjowfS5jbHItZGF0ZS1yYW5nZS1waWNrZXItbmF2e3dpZHRoOmNhbGMoMTUwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVy''@;'; put 'put ''LXJhZGl1cy0xMDApO2hlaWdodDoxMDAlfS5jYWxlbmRhci1oZWFkZXJ7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjt3aWR0aDpjYWxjKDcqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkpfS5jYWxlbmRhci1zd2l0Y2hlcnMs''@;'; put 'put ''LnllYXItc3dpdGNoZXJze2Rpc3BsYXk6ZmxleH0ueWVhci1zd2l0Y2hlcnN7ZmxleDowIDAgYXV0bzthbGlnbi1zZWxmOmNlbnRlcjt3aWR0aDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpKjMpfS5jYWxlbmRhci10YWJsZXtmbGV4OjEgMSBhdXRvO2JvcmRlci1zcGFjaW5nOjAg''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTt3aWR0aDoxMDAlfXRkLmNhbGVuZGFyLWNlbGwsdGQuY2FsZW5kYXItdGFibGUgLmNhbGVuZGFyLWNlbGx7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO21pbi1oZWlnaHQ6''@;'; put 'put ''dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3BhZGRpbmc6MDt0ZXh0LWFsaWduOmNlbnRlcn0uZGF5e2Rpc3BsYXk6aW5saW5lfS53ZWVrZGF5c3tmbGV4OjAgMCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKX0ud2Vla2Rh''@;'; put 'put ''eXtmb250LXNpemU6dmFyKC0tY2xyLWNhbGVuZGFyLXdlZWtkYXktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUt''@;'; put 'put ''aGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpfS5jYWxlbmRhci1idG57aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO21pbi1oZWln''@;'; put 'put ''aHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO3BhZGRpbmc6MDttYXJnaW46MCFpbXBvcnRhbnQ7Y29sb3I6aW5oZXJpdDtib3JkZXI6MDtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJh''@;'; put 'put ''ZGl1cy0xMDApO2JhY2tncm91bmQ6MCAwO2N1cnNvcjpwb2ludGVyO2ZvbnQtc2l6ZTp2YXIoLS1jbHItY2FsZW5kYXItcGlja2VyLWJ0bi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1jYWxlbmRhci1waWNrZXItYnRuLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxldHRlci1zcGFjaW5nKX0uY2FsZW5kYXItYnRuLmluLXJhbmdle2JhY2tncm91bmQ6dmFyKC0tY2xyLWNhbGVuZGFyLXJhbmdl''@;'; put 'put ''LWNlbGwtYmFja2dyb3VuZC1jb2xvcik7Ym9yZGVyLXJhZGl1czowfS5jYWxlbmRhci1idG46aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1jbHItY2FsZW5kYXItYnRuLWhvdmVyLWZvY3VzLWNvbG9yKX0uY2FsZW5kYXItYnRuOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1i''@;'; put 'put ''bHVlLTcwMCkgc29saWQgMnB4O291dGxpbmUtb2Zmc2V0OmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSk7YmFja2dyb3VuZDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXIpfS5jYWxlbmRhci1idG46YWN0aXZle2JhY2tncm91bmQ6''@;'; put 'put ''dmFyKC0tY2xyLWNhbGVuZGFyLWJ0bi1hY3RpdmUtY29sb3ItYmcpfS5kYXktYnRue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO21pbi13aWR0aDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTtwYWRkaW5nOjA7bWFyZ2luOjAhaW1wb3J0YW50O2JvcmRlcjowO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7YmFja2dyb3VuZDowIDA7Y3Vyc29yOnBvaW50ZXI7Zm9udC1zaXplOnZhcigt''@;'; put 'put ''LWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1j''@;'; put 'put ''ZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpO3dpZHRoOjEwMCU7Y29sb3I6aW5oZXJpdH0uZGF5LWJ0bi5pbi1yYW5nZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1jYWxlbmRhci1yYW5nZS1jZWxsLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1yYWRpdXM6MH0u''@;'; put 'put ''ZGF5LWJ0bjpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWNsci1jYWxlbmRhci1idG4taG92ZXItZm9jdXMtY29sb3IpfS5kYXktYnRuOmZvY3Vze291dGxpbmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTcwMCkgc29saWQgMnB4O291dGxpbmUtb2Zmc2V0OmNhbGMoLTEqdmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS0yKSk7YmFja2dyb3VuZDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXIpfS5kYXktYnRuOmFjdGl2ZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1jYWxlbmRhci1idG4tYWN0aXZlLWNvbG9yLWJnKX0uZGF5LWJ0bjpob3Zlcntj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItY2FsZW5kYXItYnRuLWhvdmVyLWZvY3VzLWNvbG9yLXRleHQpfS5kYXktYnRuOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItY2FsZW5kYXItYnRuLWFjdGl2ZS1jb2xvcil9LmRheS1idG4uaXMtdG9kYXl7Y29sb3I6dmFyKC0tY2xyLWNhbGVuZGFyLXRvZGF5LWRhdGUt''@;'; put 'put ''Y2VsbC1jb2xvcik7Ym9yZGVyOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgc29saWQgdmFyKC0tY2xyLWNhbGVuZGFyLXRvZGF5LWRhdGUtY2VsbC1ib3JkZXItY29sb3IpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1jYWxlbmRhci10b2RheS1kYXRlLWNlbGwtZm9udC13ZWlnaHQpfS5kYXkt''@;'; put 'put ''YnRuLmlzLXNlbGVjdGVkLC5kYXktYnRuLmlzLXN0YXJ0LXJhbmdlLC5kYXktYnRuLmlzLWVuZC1yYW5nZXtiYWNrZ3JvdW5kOnZhcigtLWNsci1jYWxlbmRhci1hY3RpdmUtY2VsbC1iYWNrZ3JvdW5kLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItY2FsZW5kYXItYWN0aXZlLWNlbGwtY29sb3Ip''@;'; put 'put ''fS5kYXktYnRuLmlzLXN0YXJ0LXJhbmdlOm5vdCguaXMtZW5kLXJhbmdlKXtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9LmRheS1idG4uaXMtZW5kLXJhbmdlOm5vdCguaXMtc3RhcnQtcmFuZ2Upe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6''@;'; put 'put ''MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LmRheS1idG4uaXMtc2VsZWN0ZWQ6Zm9jdXN7YmFja2dyb3VuZDp2YXIoLS1jbHItY2FsZW5kYXItYWN0aXZlLWZvY3VzLWNlbGwtYmFja2dyb3VuZC1jb2xvcil9LmRheS1idG4uaXMtZXhjbHVkZWR7ZGlzcGxheTpub25lfS5kYXktYnRu''@;'; put 'put ''LmlzLWRpc2FibGVke2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpO3BvaW50ZXItZXZlbnRzOm5vbmU7YmFja2dyb3VuZDowIDB9LmNhbGVuZGFyLXBpY2tlcnN7ZGlzcGxheTpmbGV4fS5zd2l0Y2hlcntjb2xvcjp2YXIoLS1jbHItY2Fs''@;'; put 'put ''ZW5kYXItYnRuLWNvbG9yKX0uc3dpdGNoZXI6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLWNhbGVuZGFyLWJ0bi1ob3Zlci1mb2N1cy1jb2xvci10ZXh0KX0uc3dpdGNoZXI6YWN0aXZle2NvbG9yOnZhcigtLWNsci1jYWxlbmRhci1idG4tYWN0aXZlLWNvbG9yKX0uc3dpdGNoZXIgY2RzLWljb24s''@;'; put 'put ''LnN3aXRjaGVyIGNsci1pY29ue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCl9Lm1vbnRocGlja2VyLXRyaWdnZXIsLnllYXJwaWNrZXItdHJpZ2dlcnt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEzKTtjb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItY2FsZW5kYXItYnRuLXBpY2tlci10cmlnZ2VyLWNvbG9yKTt0ZXh0LWFsaWduOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXA7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9Lm1vbnRocGlja2VyLXRyaWdnZXIueWVhci1yYW5nZSwueWVhcnBpY2tlci10''@;'; put 'put ''cmlnZ2VyLnllYXItcmFuZ2V7d2lkdGg6dW5zZXQ7YWxpZ24tY29udGVudDpjZW50ZXI7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS5tb250aHBpY2tlciwueWVhcnBpY2tlcnttaW4taGVpZ2h0OmNhbGMoNip2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEyKSl9Lm1vbnRocGlj''@;'; put 'put ''a2VyLC55ZWFycGlja2VyLC5kYXlwaWNrZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO3Jvdy1nYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtoZWlnaHQ6Y2FsYyg5KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApICsgMyp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpKTt3aWR0''@;'; put 'put ''aDpjYWxjKDcqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkpO292ZXJmbG93OmhpZGRlbn0ueWVhcnN7ZmxleC1kaXJlY3Rpb246cm93fS5tb250aCwueWVhcntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7bWluLWhl''@;'; put 'put ''aWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSk7cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7bWFyZ2luOjAhaW1wb3J0YW50O2NvbG9yOmluaGVyaXQ7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTtiYWNrZ3JvdW5kOjAgMDtjdXJzb3I6cG9pbnRlcjtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHkt''@;'; put 'put ''c2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7aGVpZ2h0OnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtMTIpO3dpZHRoOmNhbGMoLjUqY2FsYygoNyp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKSkgKyAoMip2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpKSArICgyKnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkpKSAtIHZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtNykgLSB2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApKX0ubW9udGg6aG92ZXIsLnllYXI6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLWNhbGVuZGFyLWJ0bi1ob3Zlci1mb2N1cy1jb2xvci10ZXh0KX0ubW9udGg6YWN0aXZlLC55ZWFyOmFjdGl2ZXtj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItY2FsZW5kYXItYnRuLWFjdGl2ZS1jb2xvcil9Lm1vbnRoLmlzLXRvZGF5LC55ZWFyLmlzLXRvZGF5e2NvbG9yOnZhcigtLWNsci1jYWxlbmRhci10b2RheS1kYXRlLWNlbGwtY29sb3IpO2JvcmRlcjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpIHNvbGlkIHZhcigt''@;'; put 'put ''LWNsci1jYWxlbmRhci10b2RheS1kYXRlLWNlbGwtYm9yZGVyLWNvbG9yKTtmb250LXdlaWdodDp2YXIoLS1jbHItY2FsZW5kYXItdG9kYXktZGF0ZS1jZWxsLWZvbnQtd2VpZ2h0KX0ubW9udGguaXMtc2VsZWN0ZWQsLm1vbnRoLmlzLXN0YXJ0LXJhbmdlLC5tb250aC5pcy1lbmQtcmFuZ2Us''@;'; put 'put ''LnllYXIuaXMtc2VsZWN0ZWQsLnllYXIuaXMtc3RhcnQtcmFuZ2UsLnllYXIuaXMtZW5kLXJhbmdle2JhY2tncm91bmQ6dmFyKC0tY2xyLWNhbGVuZGFyLWFjdGl2ZS1jZWxsLWJhY2tncm91bmQtY29sb3IpO2NvbG9yOnZhcigtLWNsci1jYWxlbmRhci1hY3RpdmUtY2VsbC1jb2xvcil9Lm1v''@;'; put 'put ''bnRoLmlzLXN0YXJ0LXJhbmdlOm5vdCguaXMtZW5kLXJhbmdlKSwueWVhci5pcy1zdGFydC1yYW5nZTpub3QoLmlzLWVuZC1yYW5nZSl7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowfS5tb250aC5pcy1lbmQtcmFuZ2U6bm90KC5pcy1zdGFy''@;'; put 'put ''dC1yYW5nZSksLnllYXIuaXMtZW5kLXJhbmdlOm5vdCguaXMtc3RhcnQtcmFuZ2Upe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9Lm1vbnRoLmlzLXNlbGVjdGVkOmZvY3VzLC55ZWFyLmlzLXNlbGVjdGVkOmZvY3Vze2JhY2tncm91bmQ6dmFy''@;'; put 'put ''KC0tY2xyLWNhbGVuZGFyLWFjdGl2ZS1mb2N1cy1jZWxsLWJhY2tncm91bmQtY29sb3IpfS5tb250aC5pcy1kaXNhYmxlZCwueWVhci5pcy1kaXNhYmxlZHtjb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkKTtwb2ludGVyLWV2ZW50czpub25l''@;'; put 'put ''fS5tb250aC5pcy1kaXNhYmxlZDpob3ZlciwueWVhci5pcy1kaXNhYmxlZDpob3ZlcntiYWNrZ3JvdW5kOjAgMH0ubW9udGhzLC55ZWFyc3tyb3ctZ2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7ZmxleC13cmFwOndyYXA7ZGlzcGxheTpmbGV4fS5tb250aHt0ZXh0LWFsaWduOmNlbnRl''@;'; put 'put ''cjtoZWlnaHQ6Y2FsYyg1KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpO3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpc30ueWVhcnt0ZXh0LWFsaWduOmNlbnRlcn06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1jb21ib2JveC1ib3JkZXIt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItY29sb3IpOy0tY2xyLWNvbWJvYm94LWlucHV0LWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC10aW50KTstLWNsci1jb21ib2JveC1waWxsLWJhY2tncm91bmQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kKTstLWNsci1jb21ib2JveC1waWxsLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItY29tYm9ib3gtcGlsbC1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItY29tYm9ib3gtZmlsdGVyLWhpZ2hsaWdodDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaGlnaGxpZ2h0KTstLWNsci1jb21ib2JveC1taW4td2lkdGg6Y2FsYygxNjggKiAoMXJlbSAvIHZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtYmFzZSkpKTstLWNsci1jb21ib2JveC1tdWx0aS1taW4td2lkdGg6Y2FsYygzNjAgKiAoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNsci1jb21ib2JveC1taW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7LS1jbHItY29tYm9ib3gtZm9udC1z''@;'; put 'put ''aXplOnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTstLWNsci1jb21ib2JveC1mb250LXdlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtd2VpZ2h0KTstLWNsci1jb21ib2JveC10ZXh0LWNvbG9yOnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItY29tYm9ib3gtYm9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNsci1jb21ib2JveC1wYWRkaW5nLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTstLWNsci1jb21i''@;'; put 'put ''b2JveC10cmlnZ2VyLXBhZGRpbmctbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpOy0tY2xyLWNvbWJvYm94LXRyaWdnZXItcGFkZGluZy1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpOy0tY2xyLWNvbWJvYm94LXRyaWdnZXItZ2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2Ut''@;'; put 'put ''Nik7LS1jbHItY29tYm9ib3gtdHJpZ2dlci1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWNvbWJvYm94LWhvdmVyLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhv''@;'; put 'put ''dmVyKTstLWNsci1jb21ib2JveC1hY3RpdmUtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtYWN0aXZlKTstLWNsci1jb21ib2JveC1waWxsLXBhZGRpbmc6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpOy0tY2xyLWNvbWJv''@;'; put 'put ''Ym94LXBpbGwtbWFyZ2luOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSAwIDA7LS1jbHItY29tYm9ib3gtcGlsbC1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTstLWNsci1jb21ib2JveC1waWxsLXJlbW92ZS1pY29uLWNvbG9yOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWNvbWJvYm94LWNhcmV0LWljb24tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY2xyLWNvbWJvYm94LXBpbGwtYm9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRp''@;'; put 'put ''dXMtMTAwKX0uY2xyLWNvbWJvYm94LWZvcm0tY29udHJvbHthbGlnbi1pdGVtczpzdHJldGNofS5jbHItY29tYm9ib3gtZm9ybS1jb250cm9sIC5jbHItZXJyb3IgLmNsci12YWxpZGF0ZS1pY29ue21hcmdpbi1sZWZ0OjB9LmNsci1mb2N1cy1pbmRpY2F0b3J7YmFja2dyb3VuZC1jb2xvcjp2''@;'; put 'put ''YXIoLS1jbHItZm9ybXMtZm9jdXNlZC1jb2xvcik7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMik7d2lkdGg6MDt0cmFuc2l0aW9uOndpZHRoIC4ycyBlYXNlO3Bvc2l0aW9uOmFic29sdXRlO2JvdHRvbTpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpO2xlZnQ6MDti''@;'; put 'put ''b3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWNsci1jb21ib2JveC1ib3JkZXItcmFkaXVzKTtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp2YXIoLS1jbHItY29tYm9ib3gtYm9yZGVyLXJhZGl1cyl9LmNsci1mb2N1c3t3aWR0aDoxMDAlfS5jbHItZXJyb3IgLmNsci1mb2N1cy1p''@;'; put 'put ''bmRpY2F0b3J7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZm9ybXMtaW52YWxpZC1jb2xvcil9LmNsci1jb21ib2JveC13cmFwcGVye3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6MCBjYWxjKHZhcigtLWNsci1jb21ib2JveC10cmlnZ2VyLWdhcCkgKyB2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTYpICsgdmFyKC0tY2xyLWNvbWJvYm94LXRyaWdnZXItcGFkZGluZy1yaWdodCkpIDAgdmFyKC0tY2xyLWNvbWJvYm94LXRyaWdnZXItcGFkZGluZy1sZWZ0KTttaW4taGVpZ2h0OnZhcigtLWNsci1jb21ib2JveC1taW4taGVpZ2h0KTttaW4td2lkdGg6dmFyKC0tY2xyLWNvbWJvYm94''@;'; put 'put ''LW1pbi13aWR0aCk7Zm9udC1zaXplOnZhcigtLWNsci1jb21ib2JveC1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1jb21ib2JveC1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6Y2FsYygyMCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7Y29sb3I6dmFyKC0tY2xyLWZv''@;'; put 'put ''cm1zLXRleHQtY29sb3IpO2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZCB2YXIoLS1jbHItZm9ybXMtYm9yZGVyLWNvbG9yKTtkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOnZh''@;'; put 'put ''cigtLWNsci1jb21ib2JveC1pbnB1dC1iYWNrZ3JvdW5kLWNvbG9yKTtib3JkZXItd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1jb21ib2JveC1ib3JkZXItY29sb3IpO2JvcmRl''@;'; put 'put ''ci1yYWRpdXM6dmFyKC0tY2xyLWNvbWJvYm94LWJvcmRlci1yYWRpdXMpfS5jbHItY29tYm9ib3gtd3JhcHBlciAuY2xyLWlucHV0e3BhZGRpbmc6MDttYXgtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNsci1jb21ib2JveC13cmFwcGVyIC5jbHItaW5wdXQ6bm90KDpkaXNh''@;'; put 'put ''YmxlZCl7Y29sb3I6dmFyKC0tY2xyLWNvbWJvYm94LXRleHQtY29sb3IpfS5jbHItY29tYm9ib3gtd3JhcHBlci5tdWx0aXttaW4td2lkdGg6bWluKHZhcigtLWNsci1jb21ib2JveC1tdWx0aS1taW4td2lkdGgpLDEwMCUpO3BhZGRpbmctYm90dG9tOmNhbGMoMyooMXJlbS92YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWJhc2UpKSl9LmNsci1jb21ib2JveC13cmFwcGVyIC5jbHItaW5wdXQuY2xyLWNvbWJvYm94LWlucHV0OmZvY3Vze2JhY2tncm91bmQ6MCAwfS5jbHItY29tYm9ib3gtd3JhcHBlci5pbnZhbGlke2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLWZvcm1zLWludmFsaWQtY29s''@;'; put 'put ''b3IpfS5jbHItY29tYm9ib3gtd3JhcHBlciAuY2xyLWNvbWJvYm94LWlucHV0e2JhY2tncm91bmQ6MCAwO2JvcmRlci1ib3R0b206bm9uZTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmNsci1jb21ib2JveC13cmFwcGVyIC5jbHItY29tYm9ib3gtcmVtb3ZlLWJ0bntiYWNrZ3JvdW5kOjAgMDti''@;'; put 'put ''b3JkZXI6MDtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7cGFkZGluZzowO2NvbG9yOnZhcigtLWNsci1jb21ib2JveC1waWxsLXJlbW92ZS1pY29uLWNvbG9yKX0uY2xyLWNvbWJvYm94LXdyYXBwZXIgLmxhYmVsLWNvbWJvYm94LXBpbGx7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10''@;'; put 'put ''eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKTtoZWlnaHQ6dmFyKC0tY2xyLWNvbWJvYm94LXBpbGwtaGVpZ2h0KTttYXJnaW46dmFyKC0tY2xyLWNvbWJvYm94LXBpbGwtbWFyZ2luKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1jb21ib2JveC1w''@;'; put 'put ''aWxsLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpO2JvcmRlci1zdHlsZTpzb2xpZDthbGlnbi1pdGVtczpjZW50ZXI7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItY29tYm9ib3gtcGlsbC1ib3JkZXItcmFkaXVzKTtib3JkZXItY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWNvbWJvYm94LXBpbGwtYm9yZGVyLWNvbG9yKTtwYWRkaW5nOnZhcigtLWNsci1jb21ib2JveC1waWxsLXBhZGRpbmcpfS5jbHItY29tYm9ib3gtd3JhcHBlciAubGFiZWwtY29tYm9ib3gtcGlsbCAuY2xyLWNvbWJvYm94LXBpbGwtY29udGVudHtmb250LXNpemU6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC13ZWlnaHQpO2NvbG9yOnZhcigtLWNsci1jb21ib2JveC1waWxsLWZvbnQtY29sb3IpO3BhZGRpbmc6MH0uY2xyLWNvbWJvYm94''@;'; put 'put ''LXdyYXBwZXIgLmxhYmVsLWNvbWJvYm94LXBpbGwgY2RzLWljb24sLmNsci1jb21ib2JveC13cmFwcGVyIC5sYWJlbC1jb21ib2JveC1waWxsIGNsci1pY29ue21hcmdpbi10b3A6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKX0uY2xyLWNvbWJvYm94LXdyYXBwZXIgLmxhYmVs''@;'; put 'put ''LWNvbWJvYm94LXBpbGwgY2RzLWljb25bc2hhcGU9d2luZG93LWNsb3NlXSwuY2xyLWNvbWJvYm94LXdyYXBwZXIgLmxhYmVsLWNvbWJvYm94LXBpbGwgY2xyLWljb25bc2hhcGU9d2luZG93LWNsb3NlXXtjb2xvcjp2YXIoLS1jbHItY29tYm9ib3gtcGlsbC1mb250LWNvbG9yKX0uY2xyLWNv''@;'; put 'put ''bWJvYm94LXdyYXBwZXIgLmNsci1jb21ib2JveC1pbnB1dC13cmFwcGVye2JvcmRlcjowO2JhY2tncm91bmQ6MCAwfS5jbHItY29tYm9ib3gtd3JhcHBlcjpub3QoLmRpc2FibGVkKTpob3ZlciwuY2xyLWNvbWJvYm94LXdyYXBwZXI6Zm9jdXMtd2l0aGlue2JhY2tncm91bmQtY29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWNvbWJvYm94LWhvdmVyLWJhY2tncm91bmQtY29sb3IpfS5jbHItY29tYm9ib3gtdHJpZ2dlcntwYWRkaW5nLWxlZnQ6dmFyKC0tY2xyLWNvbWJvYm94LXRyaWdnZXItcGFkZGluZy1sZWZ0KTtwYWRkaW5nLXJpZ2h0OnZhcigtLWNsci1jb21ib2JveC10cmlnZ2VyLXBhZGRpbmct''@;'; put 'put ''cmlnaHQpO21hcmdpbjphdXRvO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO3JpZ2h0OjA7YmFja2dyb3VuZDowIDA7Ym9yZGVyOjA7Y29sb3I6Y3VycmVudENvbG9yO2N1cnNvcjpwb2ludGVyO291dGxpbmU6MH0uY2xyLWNvbWJvYm94LXRyaWdnZXI6ZGlzYWJsZWR7Y29sb3I6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCl9LmNsci1jb21ib2JveC10cmlnZ2VyOmRpc2FibGVkIGNkcy1pY29uW3NoYXBlPWFuZ2xlXSwuY2xyLWNvbWJvYm94LXRyaWdnZXI6ZGlzYWJsZWQgY2xyLWljb25bc2hhcGU9YW5nbGVde2NvbG9yOnZh''@;'; put 'put ''cigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpfS5jbHItY29tYm9ib3gtdHJpZ2dlciBjZHMtaWNvbltzaGFwZT1hbmdsZV0sLmNsci1jb21ib2JveC10cmlnZ2VyIGNsci1pY29uW3NoYXBlPWFuZ2xlXXtjb2xvcjp2YXIoLS1jbHItY29tYm9ib3gtdHJp''@;'; put 'put ''Z2dlci1mb250LWNvbG9yKTtoZWlnaHQ6dmFyKC0tY2xyLWNvbWJvYm94LWNhcmV0LWljb24tc2l6ZSk7d2lkdGg6dmFyKC0tY2xyLWNvbWJvYm94LWNhcmV0LWljb24tc2l6ZSk7bWluLWhlaWdodDp2YXIoLS1jbHItY29tYm9ib3gtY2FyZXQtaWNvbi1zaXplKTttaW4td2lkdGg6dmFyKC0t''@;'; put 'put ''Y2xyLWNvbWJvYm94LWNhcmV0LWljb24tc2l6ZSl9LmNsci1jb21ib2JveC1vcHRpb25ze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47cG9zaXRpb246YWJzb2x1dGU7dG9wOjEwMCU7bGVmdDowO21pbi13aWR0aDpjYWxjKDEyMCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJh''@;'; put 'put ''c2UpKSk7bWF4LXdpZHRoOmNhbGMoMzYwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1iZy1jb2xvcik7Ym9yZGVyLXdpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCk7Ym9yZGVyLXN0''@;'; put 'put ''eWxlOnNvbGlkO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24tYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO2JveC1zaGFkb3c6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMjAwKTttYXJnaW4t''@;'; put 'put ''dG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMik7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpIDA7dmlzaWJpbGl0eTpoaWRkZW47ei1pbmRleDoxMDUwO3Bvc2l0aW9uOnN0YXRpYzttYXgtaGVpZ2h0OmNhbGMoMjQwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtv''@;'; put 'put ''dmVyZmxvdy15OmF1dG87dmlzaWJpbGl0eTp2aXNpYmxlfS5jbHItY29tYm9ib3gtb3B0aW9ucyAuY2xyLWNvbWJvYm94LW9wdGlvbnMtbG9hZGluZ3twYWRkaW5nOmNhbGMoMyooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKX0uY2xyLWNv''@;'; put 'put ''bWJvYm94LW9wdGlvbnMgLmNsci1jb21ib2JveC1vcHRpb25zLWxvYWRpbmcgLmNsci1jb21ib2JveC1vcHRpb25zLWxvYWRpbmctdGV4dHtwYWRkaW5nLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS00KX0uY2xyLWNvbWJvYm94LW9wdGlvbnMgLmNsci1jb21ib2JveC1vcHRpb25zLWVt''@;'; put 'put ''cHR5LXRleHR7cGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9LmNsci1jb21ib2JveC1vcHRpb257Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWZv''@;'; put 'put ''bnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tY29sb3IpO2JhY2tncm91bmQt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tYmctY29sb3IpO2JvcmRlcjowO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6ZmxleDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKTthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OmF1dG87bWFyZ2luOjA7d2lkdGg6MTAwJTt0ZXh0LXRy''@;'; put 'put ''YW5zZm9ybTpub25lfS5jbHItY29tYm9ib3gtb3B0aW9uLmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1zZWxlY3RlZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1zZWxlY3RlZC1iZy1jb2xvcil9LmNsci1jb21ib2JveC1vcHRp''@;'; put 'put ''b246aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0taG92ZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0taG92ZXItYmctY29sb3IpO3RleHQtZGVjb3JhdGlvbjpub25lfS5jbHItY29tYm9ib3gtb3B0aW9uOmhvdmVyLmFjdGl2ZXti''@;'; put 'put ''YWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWhvdmVyLWJnLWNvbG9yKX0uY2xyLWNvbWJvYm94LW9wdGlvbjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tYWN0aXZlLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1k''@;'; put 'put ''cm9wZG93bi1pdGVtLWFjdGl2ZS1iZy1jb2xvcil9LmNsci1jb21ib2JveC1vcHRpb246YWN0aXZlLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLXNlbGVjdGVkLWFjdGl2ZS1iZy1jb2xvcil9LmNsci1jb21ib2JveC1vcHRpb246Zm9jdXN7ei1pbmRl''@;'; put 'put ''eDppbmhlcml0fS5jbHItY29tYm9ib3gtb3B0aW9uLmRpc2FibGVkLC5jbHItY29tYm9ib3gtb3B0aW9uOmRpc2FibGVke3BvaW50ZXItZXZlbnRzOm5vbmU7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tZGlzYWJsZWQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRy''@;'; put 'put ''b3Bkb3duLWl0ZW0tZGlzYWJsZWQtYmctY29sb3IpOy13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5jbHItY29tYm9ib3gtb3B0aW9uLmRpc2FibGVkOmhvdmVyLC5jbHItY29tYm9ib3gtb3B0aW9uOmRpc2FibGVkOmhvdmVye2JhY2tncm91bmQ6MCAwfS5jbHIt''@;'; put 'put ''Y29tYm9ib3gtb3B0aW9uLmRpc2FibGVkOmFjdGl2ZSwuY2xyLWNvbWJvYm94LW9wdGlvbjpkaXNhYmxlZDphY3RpdmV7YmFja2dyb3VuZDowIDA7Ym94LXNoYWRvdzpub25lfS5jbHItY29tYm9ib3gtb3B0aW9uLmNsci1mb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1jb21ib2Jv''@;'; put 'put ''eC1hY3RpdmUtYmFja2dyb3VuZC1jb2xvcil9LmNsci1jb21ib2JveC1vcHRpb25zIC5jbHItY29tYm9ib3gtb3B0aW9ue3BhZGRpbmc6MCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NTc2cHgpey5jbHItY29tYm9ib3gtb3B0aW9ucyAu''@;'; put 'put ''Y2xyLWNvbWJvYm94LW9wdGlvbntwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX19LmNsci1jb21ib2JveC1kaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItZm9ybXMtdGV4dC1kaXNhYmxlZC1jb2xvcik7Y3Vyc29yOm5vdC1hbGxvd2Vk''@;'; put 'put ''fS5jbHItY29tYm9ib3gtZGlzYWJsZWQgLmNsci1jb21ib2JveC1pbnB1dCwuY2xyLWNvbWJvYm94LWRpc2FibGVkIC5jbHItY29tYm9ib3gtcmVtb3ZlLWJ0biwuY2xyLWNvbWJvYm94LWRpc2FibGVkIC5jbHItY29tYm9ib3gtdHJpZ2dlcntjdXJzb3I6bm90LWFsbG93ZWR9LmNsci1maWx0''@;'; put 'put ''ZXItaGlnaGxpZ2h0IGJ7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtjb2xvcjp2YXIoLS1jbHItY29tYm9ib3gtZmlsdGVyLWhpZ2hsaWdodCl9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItc3RhY2stdmlldy1ib3JkZXItd2lk''@;'; put 'put ''dGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTstLWNsci1zdGFjay12aWV3LWJvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItc3RhY2stdmlldy1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9i''@;'; put 'put ''amVjdC1ib3JkZXItY29sb3IpOy0tY2xyLXN0YWNrLWJsb2NrLWNoYW5nZWQtYm9yZGVyLXRvcC1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1ib3JkZXItY29sb3IpOy0tY2xyLXN0YWNrLXZpZXctdGl0bGUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTst''@;'; put 'put ''LWNsci1zdGFjay12aWV3LXJvdy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLXN0YWNrLXZpZXctcm93LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLXN0YWNrLXZpZXctZXhwYW5kYWJs''@;'; put 'put ''ZS1yb3ctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItc3RhY2stdmlldy1leHBhbmRhYmxlLXJvdy1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQpOy0tY2xyLXN0YWNrLXZpZXctZXhwYW5k''@;'; put 'put ''YWJsZS1yb3ctaG92ZXI6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1ob3Zlcik7LS1jbHItc3RhY2stdmlldy1leHBhbmRhYmxlLXJvdy1iZy1ob3Zlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaG92ZXIpOy0tY2xyLXN0''@;'; put 'put ''YWNrLXZpZXctZXhwYW5kYWJsZS1yb3ctYWN0aXZlOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWJnLWFjdGl2ZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91''@;'; put 'put ''bmQtYWN0aXZlKTstLWNsci1zdGFjay12aWV3LWV4cGFuZGVkLXJvdy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLXNlbGVjdGVkKTstLWNsci1zdGFjay12aWV3LWV4cGFuZGVkLXJvdy1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVy''@;'; put 'put ''YWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQpOy0tY2xyLXN0YWNrLXZpZXctZXhwYW5kZWQtaG92ZXItcm93LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1ob3Zlcik7LS1jbHItc3RhY2stdmlldy1leHBhbmRlZC1hY3Rp''@;'; put 'put ''dmUtcm93LWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1hY3RpdmUpOy0tY2xyLXN0YWNrLXZpZXctcm93LWZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTstLWNsci1z''@;'; put 'put ''dGFjay12aWV3LXJvdy1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpOy0tY2xyLXN0YWNrLXZpZXctcm93LWxpbmUtaGVpZ2h0OmNhbGMoMjAgKiAoMXJlbSAvIHZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTstLWNsci1zdGFjay12''@;'; put 'put ''aWV3LXJvdy1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpOy0tY2xyLXN0YWNrLXZpZXctc3RhY2stYmxvY2stYm9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc3RhY2stdmlldy1ib3JkZXItY29sb3IpOy0tY2xyLXN0YWNr''@;'; put 'put ''LXZpZXctc3RhY2stY2hpbGRyZW4tc3RhY2stYmxvY2stYm9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1ib3JkZXItY29sb3IpOy0tY2xyLXN0YWNrLXZpZXctc3RhY2stY2hpbGRyZW4tc3RhY2stYmxvY2stbGFiZWwtYW5kLWNvbnRlbnQtYmctY29sb3I6dmFyKC0t''@;'; put 'put ''Y2xyLXN0YWNrLXZpZXctYmctY29sb3IpOy0tY2xyLXN0YWNrLXZpZXctc3RhY2stYmxvY2stY2FyZXQtY29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctZXhwYW5kYWJsZS1yb3ctY29sb3IpOy0tY2xyLXN0YWNrLXZpZXctY29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctcm93LWNvbG9yKTst''@;'; put 'put ''LWNsci1zdGFjay12aWV3LWJnLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LXJvdy1iZy1jb2xvcik7LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1sYWJlbC1mb250LXNpemU6dmFyKC0tY2xyLXN0YWNrLXZpZXctcm93LWZvbnQtc2l6ZSk7LS1jbHItc3RhY2stdmlldy1zdGFjay1i''@;'; put 'put ''bG9jay1sYWJlbC1mb250LXdlaWdodDp2YXIoLS1jbHItc3RhY2stdmlldy1yb3ctZm9udC13ZWlnaHQpOy0tY2xyLXN0YWNrLXZpZXctc3RhY2stYmxvY2stbGFiZWwtbGluZS1oZWlnaHQ6dmFyKC0tY2xyLXN0YWNrLXZpZXctcm93LWxpbmUtaGVpZ2h0KTstLWNsci1zdGFjay12aWV3LXN0''@;'; put 'put ''YWNrLWJsb2NrLWxhYmVsLWxldHRlci1zcGFjaW5nOnZhcigtLWNsci1zdGFjay12aWV3LXJvdy1sZXR0ZXItc3BhY2luZyk7LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1leHBhbmRlZC1iZy1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1leHBhbmRlZC1yb3ctYmctY29sb3IpOy0t''@;'; put 'put ''Y2xyLXN0YWNrLXZpZXctc3RhY2stYmxvY2stZXhwYW5kYWJsZS1ob3Zlcjp2YXIoLS1jbHItc3RhY2stdmlldy1leHBhbmRhYmxlLXJvdy1ob3Zlcik7LS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1leHBhbmRlZC10ZXh0LWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGVk''@;'; put 'put ''LXJvdy1jb2xvcil9LnN0YWNrLWhlYWRlcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1lbmR9LnN0YWNrLWhlYWRlciAuc3RhY2stdGl0bGV7ZGlzcGxheTpibG9jaztmbGV4OjEgMSBhdXRvO21hcmdpbjowO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAwO2NvbG9y''@;'; put 'put ''OnZhcigtLWNsci1zdGFjay12aWV3LXRpdGxlLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVp''@;'; put 'put ''Z2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpfS5zdGFjay1oZWFkZXIgLnN0YWNrLWFjdGlvbnN7ZGlzcGxheTpibG9j''@;'; put 'put ''aztmbGV4OjAgMCBhdXRvfS5zdGFjay1oZWFkZXIgLnN0YWNrLWFjdGlvbnMgLnN0YWNrLWFjdGlvbnttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSl9LnN0YWNrLXZpZXd7b3ZlcmZsb3cteTphdXRvO3dvcmQtd3JhcDpicmVhay13b3JkO21hcmdpbi10b3A6MDtib3JkZXI6''@;'; put 'put ''dmFyKC0tY2xyLXN0YWNrLXZpZXctYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1jbHItc3RhY2stdmlldy1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXN0YWNrLXZpZXctYm9yZGVyLXJhZGl1cyl9LnN0YWNrLXZpZXcgZGQsLnN0YWNrLXZpZXcgZHR7bWFyZ2luLWlu''@;'; put 'put ''bGluZS1zdGFydDowO21hcmdpbi1sZWZ0OjB9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2Nre2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IHdyYXA7b3ZlcmZsb3cteTpoaWRkZW47Ym9yZGVyLWJvdHRvbS13aWR0aDp2YXIoLS1jbHItc3RhY2stdmlldy1ib3JkZXItd2lkdGgpO2JvcmRlci1i''@;'; put 'put ''b3R0b20tc3R5bGU6c29saWQ7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1ib3JkZXItYm90dG9tKX0uc3RhY2stdmlldz4uc3RhY2stYmxvY2s6bGFzdC1jaGlsZCwuc3RhY2stdmlldz46bGFzdC1jaGlsZCAuc3RhY2stYmxvY2s6bGFzdC1v''@;'; put 'put ''Zi10eXBle2JvcmRlci1ib3R0b206bm9uZX0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stY2hhbmdlZDpiZWZvcmV7Y29udGVudDoiICI7cG9zaXRpb246YWJzb2x1dGU7aGVpZ2h0OjA7d2lkdGg6MDtib3JkZXItdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgc29saWQgdmFyKC0tY2xy''@;'; put 'put ''LXN0YWNrLWJsb2NrLWNoYW5nZWQtYm9yZGVyLXRvcC1jb2xvcik7Ym9yZGVyLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgc29saWQgdHJhbnNwYXJlbnR9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWNhcmV0e2FsaWduLXNlbGY6Y2VudGVyfS5zdGFjay12aWV3IC5zdGFjay1i''@;'; put 'put ''bG9jay1sYWJlbHtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO2NvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWNvbG9yKTtiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWJnLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2xyLXN0YWNrLXZpZXctc3RhY2stYmxvY2stbGFiZWwtZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1sYWJlbC1mb250LXdlaWdodCk7''@;'; put 'put ''bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXN0YWNrLXZpZXctc3RhY2stYmxvY2stbGFiZWwtbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNsci1zdGFjay12aWV3LXN0YWNrLWJsb2NrLWxhYmVsLWxldHRlci1zcGFjaW5nKTtmbGV4OjEgMSBhdXRvO2Rpc3BsYXk6ZmxleDthbGln''@;'; put 'put ''bi1pdGVtczpjZW50ZXJ9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWxhYmVsOmZvY3Vze291dGxpbmUtY29sb3I6SGlnaGxpZ2h0O291dGxpbmUtY29sb3I6LXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtc3R5bGU6YXV0bztvdXRsaW5lLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtMSk7b3V0bGluZS1vZmZzZXQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKX0uc3RhY2stdmlldyAuc3RhY2stdmlldy1rZXl7ZmxleDowIDEgNDAlO21heC13aWR0aDo0MCU7bWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LnN0YWNrLXZpZXcg''@;'; put 'put ''LnN0YWNrLWJsb2NrLWNhcmV0e2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpOy0tY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLXN0YWNrLXZpZXctc3RhY2stYmxvY2stY2FyZXQtY29sb3IpO21hcmdpbi1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1jb250ZW50e2ZsZXg6MSAxIGF1dG87d2lkdGg6NjAlO21hcmdpbi1ib3R0b206MH0uc3RhY2st''@;'; put 'put ''dmlldyAuc3RhY2stYmxvY2stY29udGVudD46Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDowfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1jb250ZW50PjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH0uc3RhY2stdmlldyAuc3RhY2stY2hpbGRyZW57ZmxleDowIDAgYXV0bzt3aWR0aDoxMDAl''@;'; put 'put ''fS5zdGFjay12aWV3IC5zdGFjay1jaGlsZHJlbiAuc3RhY2stYmxvY2t7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1jaGlsZHJlbi1zdGFjay1ibG9jay1ib3JkZXItYm90dG9tLWNvbG9yKX0uc3RhY2stdmlldyAuc3RhY2stY2hpbGRyZW4+LnN0YWNr''@;'; put 'put ''LWJsb2NrOmxhc3QtY2hpbGQsLnN0YWNrLXZpZXcgLnN0YWNrLWNoaWxkcmVuPjpsYXN0LWNoaWxkIC5zdGFjay1ibG9jazpsYXN0LW9mLXR5cGV7Ym9yZGVyLWJvdHRvbTpub25lfS5zdGFjay12aWV3IC5zdGFjay1jaGlsZHJlbiAuc3RhY2stYmxvY2stbGFiZWwsLnN0YWNrLXZpZXcgLnN0''@;'; put 'put ''YWNrLWNoaWxkcmVuIC5zdGFjay1ibG9jay1jb250ZW50e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctc3RhY2stY2hpbGRyZW4tc3RhY2stYmxvY2stbGFiZWwtYW5kLWNvbnRlbnQtYmctY29sb3IpfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlPi5z''@;'; put 'put ''dGFjay1ibG9jay1sYWJlbHtwYWRkaW5nLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtjb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1leHBhbmRhYmxlLXJvdy1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1leHBhbmRhYmxlLXJvdy1iZy1jb2xv''@;'; put 'put ''cik7Y3Vyc29yOnBvaW50ZXJ9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGU+LnN0YWNrLWJsb2NrLWxhYmVsOmJlZm9yZXtkaXNwbGF5OmlubGluZS1ibG9jaztjb250ZW50OiIiO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtNyk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6Y29udGFpbjt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7YmFja2dy''@;'; put 'put ''b3VuZC1pbWFnZTp1cmwoImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxMiUyMDEyJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTNDZGVm''@;'; put 'put ''cyUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3N0eWxlJTNFLmNscy0xJTdCZmlsbCUzQXZhcigtLWNsci1hY2NvcmRpb24tdGV4dC1jb2xvciklM0IlN0QlM0MlMkZzdHlsZSUzRSUwQSUyMCUyMCUyMCUyMCUzQyUyRmRlZnMlM0UlMEElMjAlMjAlMjAlMjAlM0N0aXRsZSUzRUNh''@;'; put 'put ''cmV0JTNDJTJGdGl0bGUlM0UlMEElMjAlMjAlMjAlMjAlM0NwYXRoJTIwY2xhc3MlM0QlMjJjbHMtMSUyMiUyMGQlM0QlMjJNNiUyQzlMMS4yJTJDNC4yYTAuNjglMkMwLjY4JTJDMCUyQzAlMkMxJTJDMS0xTDYlMkM3LjA4JTJDOS44NCUyQzMuMjRhMC42OCUyQzAuNjglMkMwJTJDMSUyQzEl''@;'; put 'put ''MkMxJTJDMVolMjIlMkYlM0UlMEElM0MlMkZzdmclM0UlMEEiKTt0cmFuc2Zvcm06cm90YXRlKC05MGRlZyk7bWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGU+LnN0YWNrLWJsb2NrLWxhYmVsLC5zdGFjay12''@;'; put 'put ''aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlPi5zdGFjay1ibG9jay1jb250ZW50e3RyYW5zaXRpb246YmFja2dyb3VuZC1jb2xvciAuMnMgZWFzZS1pbi1vdXQsY29sb3IgLjJzIGVhc2UtaW4tb3V0fS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlOm5vdCguc3RhY2stYmxv''@;'; put 'put ''Y2stZXhwYW5kZWQpPi5zdGFjay1ibG9jay1sYWJlbDpob3Zlcntjb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1leHBhbmRhYmxlLWhvdmVyKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWJnLWhvdmVyKX0uc3RhY2st''@;'; put 'put ''dmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZTpub3QoLnN0YWNrLWJsb2NrLWV4cGFuZGVkKT4uc3RhY2stYmxvY2stbGFiZWw6aG92ZXIgLnN0YWNrLWJsb2NrLWNhcmV0e2ZpbGw6dmFyKC0tY2xyLXN0YWNrLXZpZXctc3RhY2stYmxvY2stZXhwYW5kYWJsZS1ob3Zlcil9LnN0YWNrLXZp''@;'; put 'put ''ZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGU6bm90KC5zdGFjay1ibG9jay1leHBhbmRlZCk+LnN0YWNrLWJsb2NrLWxhYmVsOmhvdmVyOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1leHBhbmRhYmxlLXJvdy1hY3RpdmUpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXN0''@;'; put 'put ''YWNrLXZpZXctZXhwYW5kYWJsZS1yb3ctYmctYWN0aXZlKX0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZTpub3QoLnN0YWNrLWJsb2NrLWV4cGFuZGVkKT4uc3RhY2stYmxvY2stbGFiZWw6aG92ZXI6YWN0aXZlIC5zdGFjay1ibG9jay1jYXJldHtmaWxsOnZhcigtLWNsci1z''@;'; put 'put ''dGFjay12aWV3LWV4cGFuZGFibGUtcm93LWFjdGl2ZSl9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGUuc3RhY2stYmxvY2stZXhwYW5kZWQ+LnN0YWNrLWJsb2NrLWxhYmVse2JvcmRlci1ib3R0b20td2lkdGg6dmFyKC0tY2xyLXN0YWNrLXZpZXctYm9yZGVyLXdpZHRoKTti''@;'; put 'put ''b3JkZXItYm90dG9tLXN0eWxlOnNvbGlkO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctc3RhY2stYmxvY2stYm9yZGVyLWJvdHRvbSk7Y29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctc3RhY2stYmxvY2stZXhwYW5kZWQtdGV4dC1jb2xvcik7YmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1leHBhbmRlZC1iZy1jb2xvcil9LnN0YWNrLXZpZXcgLnN0YWNrLWJsb2NrLWV4cGFuZGFibGUuc3RhY2stYmxvY2stZXhwYW5kZWQ+LnN0YWNrLWJsb2NrLWxhYmVsOmJlZm9yZXt0cmFuc2Zvcm06cm90YXRlKDApfS5zdGFj''@;'; put 'put ''ay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5zdGFjay1ibG9jay1sYWJlbCAuc3RhY2stYmxvY2stY2FyZXR7ZmlsbDp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1leHBhbmRlZC10ZXh0LWNvbG9yKX0uc3RhY2stdmlldyAuc3Rh''@;'; put 'put ''Y2stYmxvY2stZXhwYW5kYWJsZS5zdGFjay1ibG9jay1leHBhbmRlZD4uc3RhY2stYmxvY2stbGFiZWw6aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLXN0YWNrLXZpZXctc3RhY2stYmxvY2stZXhwYW5kYWJsZS1ob3Zlcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1leHBh''@;'; put 'put ''bmRlZC1ob3Zlci1yb3ctYmctY29sb3IpfS5zdGFjay12aWV3IC5zdGFjay1ibG9jay1leHBhbmRhYmxlLnN0YWNrLWJsb2NrLWV4cGFuZGVkPi5zdGFjay1ibG9jay1sYWJlbDpob3ZlciAuc3RhY2stYmxvY2stY2FyZXR7ZmlsbDp2YXIoLS1jbHItc3RhY2stdmlldy1zdGFjay1ibG9jay1l''@;'; put 'put ''eHBhbmRhYmxlLWhvdmVyKX0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZS5zdGFjay1ibG9jay1leHBhbmRlZD4uc3RhY2stYmxvY2stbGFiZWw6aG92ZXI6YWN0aXZle2NvbG9yOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWFjdGl2ZSk7YmFja2dyb3Vu''@;'; put 'put ''ZC1jb2xvcjp2YXIoLS1jbHItc3RhY2stdmlldy1leHBhbmRlZC1hY3RpdmUtcm93LWJnLWNvbG9yKX0uc3RhY2stdmlldyAuc3RhY2stYmxvY2stZXhwYW5kYWJsZS5zdGFjay1ibG9jay1leHBhbmRlZD4uc3RhY2stYmxvY2stbGFiZWw6aG92ZXI6YWN0aXZlIC5zdGFjay1ibG9jay1jYXJl''@;'; put 'put ''dHtmaWxsOnZhcigtLWNsci1zdGFjay12aWV3LWV4cGFuZGFibGUtcm93LWFjdGl2ZSl9Lm1vZGFsIC5zdGFjay12aWV3e21hcmdpbi1ib3R0b206MH0uc3RhY2stdmlldyBjbHItc3RhY2stYmxvY2suc3RhY2stYmxvY2stZXhwYW5kYWJsZSAuc3RhY2stYmxvY2stbGFiZWw6YmVmb3Jle2Nv''@;'; put 'put ''bnRlbnQ6bm9uZX0uc3RhY2stdmlldyAuc3RhY2stY2hpbGRyZW4gY2xyLXN0YWNrLWJsb2NrIC5zdGFjay1ibG9jay1sYWJlbCAuc3RhY2stdmlldy1rZXksLnN0YWNrLXZpZXcgLnN0YWNrLWNoaWxkcmVuIC5zdGFjay1ibG9jay1sYWJlbCAuc3RhY2stdmlldy1rZXl7cGFkZGluZy1sZWZ0''@;'; put 'put ''OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9LnN0YWNrLXZpZXcgLnN0YWNrLWNoaWxkcmVuIGNsci1zdGFjay1ibG9jayAuc3RhY2stYmxvY2stbGFiZWw6YmVmb3JlLC5zdGFjay12aWV3IC5zdGFjay1jaGlsZHJlbiAuc3RhY2stYmxvY2stbGFiZWw6YmVmb3Jle2Rpc3BsYXk6bm9uZX06''@;'; put 'put ''cm9vdCBbY2RzLXRoZW1lXXstLWNsci10cmVlLWJvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItdHJlZS1saW5rLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcik7''@;'; put 'put ''LS1jbHItdHJlZS1saW5rLXNlbGVjdGlvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQpOy0tY2xyLXRyZWUtbGluay10ZXh0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLXRy''@;'; put 'put ''ZWUtbm9kZS1jYXJldC1saW5rLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLXRyZWUtbm9kZS1jYXJldC1saW5rLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2''@;'; put 'put ''ZSk7LS1jbHItdHJlZS1ub2RlLWNhcmV0LWxpbmstZGlzYWJsZWQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1kaXNhYmxlZCk7LS1jbHItdHJlZS1ub2RlLWNhcmV0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3Ip''@;'; put 'put ''Oy0tY2xyLXRyZWUtbm9kZS1jYXJldC1ob3Zlci1jb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNhcmV0LWxpbmstaG92ZXItY29sb3IpOy0tY2xyLXRyZWUtbm9kZS1jYXJldC1hY3RpdmUtY29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jYXJldC1saW5rLWFjdGl2ZS1jb2xvcik7LS1jbHIt''@;'; put 'put ''dHJlZS1ub2RlLWNhcmV0LWRpc2FibGVkLWNvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY2FyZXQtbGluay1kaXNhYmxlZC1jb2xvcik7LS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtdGV4dC1vbmx5LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItdHJl''@;'; put 'put ''ZS1ub2RlLWNvbnRlbnQtY29sb3I6dmFyKC0tY2xyLXRyZWUtbGluay10ZXh0LWNvbG9yKTstLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtaG92ZXItY29sb3I6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1ob3Zlcik7LS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtYmctaG92ZXItY29sb3I6dmFyKC0tY2xyLXRyZWUtbGluay1ob3Zlci1jb2xvcik7LS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1v''@;'; put 'put ''YmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTstLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWFjdGl2ZSk7LS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtc2VsZWN0ZWQtY29sb3I6''@;'; put 'put ''dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1zZWxlY3RlZCk7LS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtYmctc2VsZWN0ZWQtY29sb3I6dmFyKC0tY2xyLXRyZWUtbGluay1zZWxlY3Rpb24tY29sb3IpOy0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWJnLXNlbGVjdGVk''@;'; put 'put ''LWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1ob3Zlcik7LS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtYmctc2VsZWN0ZWQtYWN0aXZlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dy''@;'; put 'put ''b3VuZC1zZWxlY3RlZC1hY3RpdmUpOy0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWRpc2FibGVkKTstLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9w''@;'; put 'put ''YWNpdHktMCl9LmNsci10cmVlLW5vZGV7ZGlzcGxheTpibG9ja30uY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lcntjdXJzb3I6bm90LWFsbG93ZWR9LmNsci10cmVlLW5vZGUuZGlzYWJsZWQgLmNsci10cmVlLW5vZGUtY29udGVudC1jb250''@;'; put 'put ''YWluZXIgLmNsci10cmVlbm9kZS1saW5re3BvaW50ZXItZXZlbnRzOm5vbmV9LmNsci10cmVlLW5vZGUuZGlzYWJsZWQgLmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXIgLmNsci10cmVlbm9kZS1saW5rLC5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRl''@;'; put 'put ''bnQtY29udGFpbmVyIC5jbHItdHJlZW5vZGUtY29udGVudCwuY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVub2RlLWNoZWNrYm94IC5jbHItY29udHJvbC1sYWJlbHtjb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNvbnRl''@;'; put 'put ''bnQtZGlzYWJsZWQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWJnLWRpc2FibGVkLWNvbG9yKX0uY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVub2RlLWxpbmsgY2RzLWlj''@;'; put 'put ''b24sLmNsci10cmVlLW5vZGUuZGlzYWJsZWQgLmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXIgLmNsci10cmVlbm9kZS1saW5rIGNsci1pY29uLC5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIC5jbHItdHJlZW5vZGUtY29udGVu''@;'; put 'put ''dCBjZHMtaWNvbiwuY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVub2RlLWNvbnRlbnQgY2xyLWljb24sLmNsci10cmVlLW5vZGUuZGlzYWJsZWQgLmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXIgLmNsci10cmVl''@;'; put 'put ''bm9kZS1jaGVja2JveCAuY2xyLWNvbnRyb2wtbGFiZWwgY2RzLWljb24sLmNsci10cmVlLW5vZGUuZGlzYWJsZWQgLmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXIgLmNsci10cmVlbm9kZS1jaGVja2JveCAuY2xyLWNvbnRyb2wtbGFiZWwgY2xyLWljb257ZmlsbDp2YXIoLS1jbHIt''@;'; put 'put ''dHJlZS1ub2RlLWNhcmV0LWRpc2FibGVkLWNvbG9yKX0uY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVub2RlLWNhcmV0e2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLXRyZWUtbm9kZS5kaXNhYmxlZCAuY2xyLXRyZWUtbm9k''@;'; put 'put ''ZS1jb250ZW50LWNvbnRhaW5lciAuY2xyLXRyZWVub2RlLWNhcmV0IGNkcy1pY29uLC5jbHItdHJlZS1ub2RlLmRpc2FibGVkIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyIC5jbHItdHJlZW5vZGUtY2FyZXQgY2xyLWljb257ZmlsbDp2YXIoLS1jbHItdHJlZS1ub2RlLWNhcmV0''@;'; put 'put ''LWRpc2FibGVkLWNvbG9yKX0uY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lcntkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5n''@;'; put 'put ''KX0uY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lcj4uY2xyLXRyZWVub2RlLWNoZWNrYm94LmNsci1jaGVja2JveC13cmFwcGVye3dpZHRoOjEwMCU7cGFkZGluZzowfS5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyPi5jbHItdHJlZW5vZGUtY2hlY2tib3guY2xyLWNoZWNr''@;'; put 'put ''Ym94LXdyYXBwZXI6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCl9LmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXI+LmNsci10cmVlbm9kZS1jaGVja2JveC5jbHItY2hlY2tib3gtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWx7d2lkdGg6''@;'; put 'put ''MTAwJTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApfS5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyPi5jbHItdHJlZW5vZGUt''@;'; put 'put ''Y2hlY2tib3guY2xyLWNoZWNrYm94LXdyYXBwZXIgLmNsci1jb250cm9sLWxhYmVsOmJlZm9yZXtsZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7dG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9LmNsci10cmVlLW5vZGUtY29udGVudC1jb250YWluZXI+LmNsci10cmVlbm9kZS1j''@;'; put 'put ''aGVja2JveC5jbHItY2hlY2tib3gtd3JhcHBlciAuY2xyLWNvbnRyb2wtbGFiZWw6YWZ0ZXJ7bGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO3RvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpfS5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyOmZvY3VzLXZpc2libGV7b3V0''@;'; put 'put ''bGluZTowfS5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyOmZvY3VzPi5jbHItdHJlZW5vZGUtY29udGVudCwuY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbnRhaW5lcjpmb2N1cz4uY2xyLXRyZWVub2RlLWNoZWNrYm94IC5jbHItY29udHJvbC1sYWJlbHtvdXRsaW5lLW9mZnNldDpj''@;'; put 'put ''YWxjKC0xKnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCkpO291dGxpbmUtY29sb3I6SGlnaGxpZ2h0O291dGxpbmUtY29sb3I6LXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yO291dGxpbmUtc3R5bGU6YXV0bztvdXRsaW5lLXdpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtYm9yZGVyLXdpZHRoLTIwMCl9LmNsci10cmVlbm9kZS1jb250ZW50e2ZsZXg6MSAxIGF1dG87ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO2NvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY29udGVudC10ZXh0''@;'; put 'put ''LW9ubHktY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWJnLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNsci10cmVlLWJvcmRlci1yYWRpdXMpIDAgMCB2YXIoLS1jbHItdHJlZS1ib3JkZXItcmFkaXVzKX0uY2xyLXRyZWVub2RlLWNvbnRl''@;'; put 'put ''bnQ6Zmlyc3QtY2hpbGR7bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCl9LmNsci10cmVlbm9kZS1jb250ZW50LmNsci10cmVlbm9kZS10ZXh0LW9ubHl7cGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9LmNsci10cmVlbm9kZS1jb250ZW50IGNkcy1p''@;'; put 'put ''Y29uLC5jbHItdHJlZW5vZGUtY29udGVudCBjbHItaWNvbntoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1z''@;'; put 'put ''cGFjZS03KTtjb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtdGV4dC1vbmx5LWNvbG9yKTttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmNsci10cmVlbm9kZS1jb250ZW50IC5jbHItdHJlZW5vZGUtbGluay5hY3Rp''@;'; put 'put ''dmUsLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkKy5jbHItY29udHJvbC1sYWJlbHtjb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtc2VsZWN0ZWQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250''@;'; put 'put ''ZW50LWJnLXNlbGVjdGVkLWNvbG9yKX0uY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5rLC5jbHItdHJlZW5vZGUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0rLmNsci1jb250cm9sLWxhYmVse2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXRyZWUtYm9yZGVyLXJh''@;'; put 'put ''ZGl1cyk7Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1jb2xvcil9LmNsci10cmVlbm9kZS1jb250ZW50IC5jbHItdHJlZW5vZGUtbGluayBjZHMtaWNvbiwuY2xyLXRyZWVub2Rl''@;'; put 'put ''LWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5rIGNsci1pY29uLC5jbHItdHJlZW5vZGUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0rLmNsci1jb250cm9sLWxhYmVsIGNkcy1pY29uLC5jbHItdHJlZW5vZGUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF0rLmNsci1jb250cm9s''@;'; put 'put ''LWxhYmVsIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY29udGVudC1jb2xvcil9LmNsci10cmVlbm9kZS1jb250ZW50IC5jbHItdHJlZW5vZGUtbGluazpob3ZlciwuY2xyLXRyZWVub2RlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdKy5jbHItY29udHJvbC1sYWJl''@;'; put 'put ''bDpob3Zlcntjb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtaG92ZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWJnLWhvdmVyLWNvbG9yKX0uY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5rOmhvdmVyIGNk''@;'; put 'put ''cy1pY29uLC5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLXRyZWVub2RlLWxpbms6aG92ZXIgY2xyLWljb24sLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWw6aG92ZXIgY2RzLWljb24sLmNsci10cmVlbm9kZS1jaGVja2JveCBp''@;'; put 'put ''bnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWw6aG92ZXIgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWhvdmVyLWNvbG9yKX0uY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5rOmFjdGl2ZSwuY2xyLXRyZWVub2RlLWNo''@;'; put 'put ''ZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdKy5jbHItY29udHJvbC1sYWJlbDphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLXRyZWUtbm9kZS1jb250ZW50LWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNvbnRlbnQtYmctYWN0aXZlLWNvbG9yKX0u''@;'; put 'put ''Y2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5rOmFjdGl2ZSBjZHMtaWNvbiwuY2xyLXRyZWVub2RlLWNvbnRlbnQgLmNsci10cmVlbm9kZS1saW5rOmFjdGl2ZSBjbHItaWNvbiwuY2xyLXRyZWVub2RlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdKy5jbHItY29u''@;'; put 'put ''dHJvbC1sYWJlbDphY3RpdmUgY2RzLWljb24sLmNsci10cmVlbm9kZS1jaGVja2JveCBpbnB1dFt0eXBlPWNoZWNrYm94XSsuY2xyLWNvbnRyb2wtbGFiZWw6YWN0aXZlIGNsci1pY29ue2NvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY29udGVudC1hY3RpdmUtY29sb3IpfS5jbHItdHJlZW5v''@;'; put 'put ''ZGUtY29udGVudCAuY2xyLXRyZWVub2RlLWxpbmsuYWN0aXZlOmhvdmVyLC5jbHItdHJlZW5vZGUtY2hlY2tib3ggaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCsuY2xyLWNvbnRyb2wtbGFiZWw6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdHJlZS1ub2RlLWNvbnRlbnQt''@;'; put 'put ''Ymctc2VsZWN0ZWQtaG92ZXItY29sb3IpfS5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLXRyZWVub2RlLWxpbmsuYWN0aXZlOmFjdGl2ZSwuY2xyLXRyZWVub2RlLWNoZWNrYm94IGlucHV0W3R5cGU9Y2hlY2tib3hdOmNoZWNrZWQrLmNsci1jb250cm9sLWxhYmVsOmFjdGl2ZXtiYWNrZ3Jv''@;'; put 'put ''dW5kLWNvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY29udGVudC1iZy1zZWxlY3RlZC1hY3RpdmUtY29sb3IpfS5jbHItdHJlZW5vZGUtY2FyZXR7ZmxleDowIDAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7bWFyZ2luOjA7cGFkZGluZzowO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTEwKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTtiYWNrZ3JvdW5kOjAgMDtib3JkZXI6MDtjdXJzb3I6cG9pbnRlcjtjb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItdHJlZS1ub2RlLWNhcmV0LWNvbG9yKX0uY2xyLXRyZWVub2RlLWNhcmV0OmhvdmVye2NvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY2FyZXQtaG92ZXItY29sb3IpfS5jbHItdHJlZW5vZGUtY2FyZXQ6YWN0aXZle2NvbG9yOnZhcigtLWNsci10cmVlLW5vZGUtY2FyZXQtYWN0aXZl''@;'; put 'put ''LWNvbG9yKX0uY2xyLXRyZWUtbm9kZS1jYXJldC1pY29ue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7dmVydGljYWwtYWxpZ246bWlkZGxlfS5jbHItdHJlZW5vZGUtc3Bpbm5lci1jb250YWluZXJ7aGVpZ2h0OnZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtMTApO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO3BhZGRpbmc6Y2FsYygodmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpKSouNSl9LmNsci10cmVlbm9kZS1zcGlubmVye2hlaWdodDp2YXIoLS1j''@;'; put 'put ''ZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5jbHItdHJlZW5vZGUtY2hpbGRyZW57bWFyZ2luLWxlZnQ6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1zcGFjZS0xMCk7d2lsbC1jaGFuZ2U6aGVpZ2h0O292ZXJmbG93LXk6aGlkZGVufS5jbHItdHJlZW5vZGUtbGlua3tkaXNwbGF5OmlubGluZS1ibG9jaztoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO21hcmdpbjowO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KTtib3JkZXI6MDtjdXJzb3I6cG9pbnRlcjt0ZXh0LWFsaWduOmxlZnR9LmNsci10cmVlbm9kZS1saW5rOmhvdmVyLC5jbHItdHJlZW5vZGUtbGluazpmb2N1''@;'; put 'put ''c3t0ZXh0LWRlY29yYXRpb246bm9uZX06cm9vdCBbY2RzLXRoZW1lXXstLWNsci1kYXRhZ3JpZC1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTUwMCk7LS1jbHItZGF0YWdyaWQtZGVmYXVsdC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1i''@;'; put 'put ''b3JkZXItY29sb3IpOy0tY2xyLWRhdGFncmlkLWljb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItZGF0YWdyaWQtcm93LWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcik7''@;'; put 'put ''LS1jbHItZGF0YWdyaWQtcm93LWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtYWN0aXZlKTstLWNsci1kYXRhZ3JpZC1yb3ctaG92ZXItZm9udC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci01MDApOy0tY2xy''@;'; put 'put ''LWRhdGFncmlkLWFjdGlvbi10b2dnbGUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUpOy0tY2xyLWRhdGFncmlkLXBhZ2luYXRpb24tYnRuLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWRh''@;'; put 'put ''dGFncmlkLXBhZ2luYXRpb24tYnRuLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGlzYWJsZWQpOy0tY2xyLWRhdGFncmlkLXBhZ2luYXRpb24taW5wdXQtYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLWNvbG9yKTstLWNsci1kYXRhZ3Jp''@;'; put 'put ''ZC1wYWdpbmF0aW9uLWlucHV0LWJvcmRlci1mb2N1cy1jb2xvcjp2YXIoLS1jbHItZm9ybXMtZm9jdXNlZC1jb2xvcik7LS1jbHItZGF0YWdyaWQtcG9wb3Zlci1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTstLWNsci1kYXRhZ3JpZC1wb3Bv''@;'; put 'put ''dmVyLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItZGF0YWdyaWQtcG9wb3Zlci1mb250LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItZGF0YWdyaWQtYWN0aW9uLXBvcG92ZXItaG92ZXItY29s''@;'; put 'put ''b3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhvdmVyKTstLWNsci1kYXRhZ3JpZC1yb3ctc2VsZWN0ZWQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNTAwKTstLWNsci1kYXRhZ3JpZC1yb3ctc2VsZWN0ZWQtYmFja2dyb3VuZC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQpOy0tY2xyLWRhdGFncmlkLXJvdy1zZWxlY3RlZC1hY3RpdmUtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQt''@;'; put 'put ''YWN0aXZlKTstLWNsci1kYXRhZ3JpZC1yb3ctc2VsZWN0ZWQtaG92ZXItYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQtaG92ZXIpOy0tY2xyLWRhdGFncmlkLWNvbHVtbi1zd2l0Y2gtaGVhZGVyLWZvbnQtY29s''@;'; put 'put ''b3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItZGF0YWdyaWQtY29sdW1uLXN3aXRjaC1oZWFkZXItZm9udC1ob3Zlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci1kYXRhZ3JpZC1jb2x1''@;'; put 'put ''bW4tc3dpdGNoLWhlYWRlci1mb250LWhvdmVyLWFjdGl2ZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHItZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWljb24tb3Blbi1iZy1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9u''@;'; put 'put ''LWJhY2tncm91bmQtaGlnaGxpZ2h0KTstLWNsci1kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtaWNvbi1vcGVuLWljb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kKTstLWNsci1kYXRhZ3JpZC1wbGFjZWhvbGRlci1jb2xvcjp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtdHlwb2dyYXBoeS1jb2xvci0yMDApOy0tY2xyLWRhdGFncmlkLWxvYWRpbmctYmFja2dyb3VuZDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZHJvcC1iYWNrZ3JvdW5kKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWdhcDp2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTMpOy0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtcGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1ib3JkZXItY29sb3IpOy0t''@;'; put 'put ''Y2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtZmlsbC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMCk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS10ZXh0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItZGF0YWdyaWQt''@;'; put 'put ''Y29sdW1uLXRvZ2dsZS1kaXNhYmxlZC1jb2xvcjp2YXIoLS1jbHItYnRuLWRlZmF1bHQtZGlzYWJsZWQtY29sb3IpOy0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtYm9yZGVyLWhvdmVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItYWN0aXZlKTst''@;'; put 'put ''LWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWZpbGwtaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLXRleHQtaG92ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHkt''@;'; put 'put ''Y29sb3ItNTAwKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWJvcmRlci1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1ib3JkZXItY29sb3IpOy0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtZmlsbC1hY3RpdmUtY29sb3I6dmFyKC0tY2Rz''@;'; put 'put ''LWFsaWFzLW9iamVjdC1vcGFjaXR5LTApOy0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtdGV4dC1hY3RpdmUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci1kYXRhZ3JpZC1kZXRhaWwtcGFuZS1jb250ZW50LXBhZGRpbmc6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS03KTstLWNsci1kYXRhZ3JpZC1kZXRhaWwtcGFuZS1jbG9zZS1pY29uLXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTstLWNsci1kYXRhZ3JpZC1kZXRhaWwtYm9keS10ZXh0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHIt''@;'; put 'put ''ZGF0YWdyaWQtZGV0YWlsLWhlYWRlci10aXRsZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLWRhdGFncmlkLWRldGFpbC1wYW5lLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLWRhdGFn''@;'; put 'put ''cmlkLWRldGFpbC1wYW5lLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItZm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC1zaXplKTstLWNsci1kYXRhZ3JpZC1w''@;'; put 'put ''bGFjZWhvbGRlci1mb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWZvbnQtd2VpZ2h0KTstLWNsci1kYXRhZ3JpZC1wbGFjZWhvbGRlci1saW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxpbmUtaGVpZ2h0KTstLWNsci1k''@;'; put 'put ''YXRhZ3JpZC1wbGFjZWhvbGRlci1sZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWxldHRlci1zcGFjaW5nKTstLWNsci1kYXRhZ3JpZC1wbGFjZWhvbGRlci1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJh''@;'; put 'put ''Y2tncm91bmQpOy0tY2xyLWRhdGFncmlkLXBvcG92ZXJzLWJveC1zaGFkb3c6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMTAwKTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yLWhlaWdodDpjYWxjKDEwMCUgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpKTstLWNsci1k''@;'; put 'put ''YXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSk7LS1jbHItZGF0YWdyaWQtY29sdW1uLXJlc2l6ZS1oYW5kbGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYm9yZGVyLWNvbG9yKTstLWNsci1kYXRhZ3JpZC1m''@;'; put 'put ''aWx0ZXItdG9nZ2xlLXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTstLWNsci1kYXRhZ3JpZC1mb290ZXItcGFnaW5hdGlvbi1nYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTstLWNsci1kYXRhZ3JpZC1maXhlZC1jb2x1bW4tc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEy''@;'; put 'put ''KTstLWNsci1kYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yLWV4cGFuZGJ5OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7LS1jbHItZGF0YWdyaWQtaWNvbi1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7LS1jbHItZGF0YWdyaWQtYWN0aW9uLWFycm93LXNpemU6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS00KTstLWNsci1kYXRhZ3JpZC1jb21wYWN0LW91dGxpbmUtb2Zmc2V0OmNhbGMoLTEgKiB0b2tlbnMuJGNkcy1nbG9iYWwtc3BhY2UtMyk7LS1jbHItZGF0YWdyaWQtaG9yaXpvbnRhbC1wYWRkaW5nOm1peGlucy5iYXNlbGluZVB4KDkpfS5kYXRhZ3JpZHtib3JkZXItY29s''@;'; put 'put ''bGFwc2U6c2VwYXJhdGU7Ym9yZGVyOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3aWR0aCkgc29saWQgdmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jbHItdGFibGUtYm9yZGVyLXJhZGl1cyk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGFibGUt''@;'; put 'put ''Ymdjb2xvcik7Y29sb3I6dmFyKC0tY2xyLXRhYmxlLWZvbnQtY29sb3IpO21hcmdpbjp2YXIoLS1jbHItdGFibGUtbWFyZ2luKTttYXgtd2lkdGg6MTAwJTt3aWR0aDoxMDAlfS5kYXRhZ3JpZCAuZGF0YWdyaWQtY29sdW1uLC5kYXRhZ3JpZCAuZGF0YWdyaWQtY2VsbHtib3JkZXItdG9wLXN0''@;'; put 'put ''eWxlOnNvbGlkO2JvcmRlci10b3Atd2lkdGg6dmFyKC0tY2xyLXRhYmxlLWJvcmRlcndpZHRoKTtib3JkZXItdG9wLWNvbG9yOnZhcigtLWNsci10YWJsZXJvdy1ib3JkZXJjb2xvcik7cGFkZGluZzp2YXIoLS1jbHItdGFibGUtY2VsbC1wYWRkaW5nKTt0ZXh0LWFsaWduOmNlbnRlcjt2ZXJ0''@;'; put 'put ''aWNhbC1hbGlnbjp0b3B9LmRhdGFncmlkIC5kYXRhZ3JpZC1jb2x1bW4ubGVmdCwuZGF0YWdyaWQgLmRhdGFncmlkLWNlbGwubGVmdHt0ZXh0LWFsaWduOmxlZnR9LmRhdGFncmlkIC5kYXRhZ3JpZC1jb2x1bW4ubGVmdDpmaXJzdC1jaGlsZCwuZGF0YWdyaWQgLmRhdGFncmlkLWNlbGwubGVm''@;'; put 'put ''dDpmaXJzdC1jaGlsZHtwYWRkaW5nLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uZGF0YWdyaWQgLmRhdGFncmlkLWNvbHVtbi5yaWdodCwuZGF0YWdyaWQgLmRhdGFncmlkLWNlbGwucmlnaHR7dGV4dC1hbGlnbjpyaWdodH0uZGF0YWdyaWQgLmRhdGFncmlkLWNlbGx7bWluLWhl''@;'; put 'put ''aWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEwKTtmb250LXNpemU6dmFyKC0tY2xyLXRhYmxlLWRhdGEtY2VsbC1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNsci10YWJsZS1kYXRhLWNlbGwtZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNsci10YWJsZS1kYXRhLWNl''@;'; put 'put ''bGwtbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyl9LmRhdGFncmlkIC5kYXRhZ3JpZC1jb2x1bW57Y29sb3I6dmFyKC0tY2xyLXRoZWFkLWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFz''@;'; put 'put ''LXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LXNlbWlib2xkKTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2lu''@;'; put 'put ''Zzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci10aGVhZC1iZ2NvbG9yKTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Ym9yZGVyLWJvdHRvbS1zdHlsZTpzb2xpZDtib3JkZXItYm90dG9tLXdpZHRoOnZh''@;'; put 'put ''cigtLWNsci10YWJsZS1ib3JkZXJ3aWR0aCk7Ym9yZGVyLWJvdHRvbS1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yKTtib3JkZXItdG9wOjAgbm9uZX0uZGF0YWdyaWQgLmRhdGFncmlkLWJvZHkgLmRhdGFncmlkLXJvdzpmaXJzdC1jaGlsZCAuZGF0YWdyaWQtY2VsbHtib3Jk''@;'; put 'put ''ZXItdG9wOjAgbm9uZX0uZGF0YWdyaWQgLmRhdGFncmlkLWJvZHkrLmRhdGFncmlkLWJvZHl7Ym9yZGVyLXRvcC1zdHlsZTpzb2xpZDtib3JkZXItdG9wLXdpZHRoOnZhcigtLWNsci10YWJsZS1ib3JkZXJ3aWR0aCk7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNv''@;'; put 'put ''bG9yKX0uZGF0YWdyaWQgLmRhdGFncmlkLWhlYWRlciAuZGF0YWdyaWQtY29sdW1uOmZpcnN0LWNoaWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzKX0uZGF0YWdyaWQgLmRhdGFncmlkLWhlYWRlciAuZGF0''@;'; put 'put ''YWdyaWQtY29sdW1uOmxhc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWNsci10YWJsZS1jb3JuZXJjZWxscmFkaXVzKX0uZGF0YWdyaWQgLmRhdGFncmlkLWJvZHk6bGFzdC1jaGlsZCAuZGF0YWdyaWQtcm93Omxhc3QtY2hpbGQgLmRhdGFn''@;'; put 'put ''cmlkLWNlbGw6Zmlyc3QtY2hpbGR7Ym9yZGVyLXJhZGl1czowO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tY2xyLXRhYmxlLWNvcm5lcmNlbGxyYWRpdXMpfS5kYXRhZ3JpZCAuZGF0YWdyaWQtYm9keTpsYXN0LWNoaWxkIC5kYXRhZ3JpZC1yb3c6bGFzdC1jaGlsZCAuZGF0YWdy''@;'; put 'put ''aWQtY2VsbDpsYXN0LWNoaWxke2JvcmRlci1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp2YXIoLS1jbHItdGFibGUtY29ybmVyY2VsbHJhZGl1cyl9LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWNvbHVtbiwuZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtY2VsbHtt''@;'; put 'put ''aW4taGVpZ2h0OnZhcigtLWNsci10YWJsZS1jb21wYWN0LXJvdy1oZWlnaHQpO3BhZGRpbmc6dmFyKC0tY2xyLXRhYmxlLWNlbGwtY29tcGFjdC1wYWRkaW5nKX0uZGF0YWdyaWQtaG9zdHtkaXNwbGF5OmZsZXg7ZmxleC1mbG93OmNvbHVtbiBub3dyYXA7cG9zaXRpb246cmVsYXRpdmV9LmRh''@;'; put 'put ''dGFncmlke2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowOy1tcy1vdmVyZmxvdy1zdHlsZTotbXMtYXV0b2hpZGluZy1zY3JvbGxiYXI7b3ZlcmZsb3c6YXV0bztmbGV4OjEgMSBhdXRvO21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1z''@;'; put 'put ''cGFjZS02KX0uZGF0YWdyaWQuY2RrLXZpcnR1YWwtc2Nyb2xsYWJsZSAuZGF0YWdyaWQtcm93c3tmbGV4LWdyb3c6MH0uZGF0YWdyaWQtb3ZlcmZsb3ctZWxsaXBzaXMgLmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtc2Nyb2xsaW5nLWNlbGxzPi5kYXRhZ3JpZC1jZWxse3RleHQtb3ZlcmZsb3c6''@;'; put 'put ''ZWxsaXBzaXM7b3ZlcmZsb3c6aGlkZGVuO3doaXRlLXNwYWNlOm5vd3JhcH0uZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldHtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMikgdmFyKC0tY2xyLWRhdGFncmlkLWhvcml6b250YWwtcGFkZGluZykgdmFyKC0tY2RzLWdsb2JhbC1zcGFj''@;'; put 'put ''ZS0zKTt0ZXh0LWFsaWduOmNlbnRlcn0uZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5v''@;'; put 'put ''bmU7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtib3gtc2hhZG93Om5vbmU7YmFja2dyb3VuZDowIDA7Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApfWJ1dHRv''@;'; put 'put ''bi5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LWJ1dHRvbntjdXJzb3I6cG9pbnRlcn0uZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1pY29ue2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1pY29u''@;'; put 'put ''LWNvbG9yKX0uZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1pY29uIHN2Z3t0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMnMgZWFzZS1pbi1vdXR9LmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLnNwaW5uZXJ7bWFyZ2luLXRvcDp2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTQpfS5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LmRhdGFncmlkLWNvbHVtbntwYWRkaW5nOnZhcigtLWNsci10YWJsZS10b3BjZWxscGFkZGluZykgdmFyKC0tY2xyLXRhYmxlLWNlbGxwYWRkaW5nKSB2YXIoLS1jbHItdGFibGUtYm90dG9tY2VsbHBhZGRpbmcpfS5k''@;'; put 'put ''YXRhZ3JpZC1oZWFkZXIsLmRhdGFncmlkLWJvZHksLmRhdGFncmlkLXJvdywuZGF0YWdyaWQtY29sdW1uLC5kYXRhZ3JpZC1jZWxsLC5kYXRhZ3JpZC1maXhlZC1jb2x1bW57ZGlzcGxheTpibG9ja30uZGF0YWdyaWQtcm93e2JvcmRlci10b3Atc3R5bGU6c29saWQ7Ym9yZGVyLXRvcC13aWR0''@;'; put 'put ''aDp2YXIoLS1jbHItdGFibGUtYm9yZGVyd2lkdGgpO2JvcmRlci10b3AtY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcil9LmRhdGFncmlkLXJvdzpmaXJzdC1vZi10eXBle2JvcmRlci10b3A6bm9uZX0uZGF0YWdyaWQtcm93OmhvdmVyLC5kYXRhZ3JpZC1yb3c6aG92ZXIgLmRh''@;'; put 'put ''dGFncmlkLXJvdy1zdGlja3l7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcm93LWhvdmVyLWNvbG9yKX0uZGF0YWdyaWQtcm93LmRhdGFncmlkLXNlbGVjdGVkLC5kYXRhZ3JpZC1yb3cuZGF0YWdyaWQtc2VsZWN0ZWQgLmRhdGFncmlkLXJvdy1zdGlja3l7Y29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWRhdGFncmlkLXJvdy1zZWxlY3RlZCk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcm93LXNlbGVjdGVkLWJhY2tncm91bmQtY29sb3IpfS5kYXRhZ3JpZC1yb3cuZGF0YWdyaWQtc2VsZWN0ZWQ6aG92ZXIsLmRhdGFncmlkLXJvdy5kYXRhZ3JpZC1zZWxlY3Rl''@;'; put 'put ''ZDpob3ZlciAuZGF0YWdyaWQtcm93LXN0aWNreXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1yb3ctc2VsZWN0ZWQtaG92ZXItYmFja2dyb3VuZC1jb2xvcil9LmRhdGFncmlkLXJvdy5kYXRhZ3JpZC1zZWxlY3RlZDphY3RpdmUsLmRhdGFncmlkLXJvdy5kYXRhZ3JpZC1z''@;'; put 'put ''ZWxlY3RlZDphY3RpdmUgLmRhdGFncmlkLXJvdy1zdGlja3l7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcm93LXNlbGVjdGVkLWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yKX0uZGF0YWdyaWQtcm93OmFjdGl2ZSwuZGF0YWdyaWQtcm93OmFjdGl2ZSAuZGF0YWdyaWQtcm93''@;'; put 'put ''LXN0aWNreXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1yb3ctYWN0aXZlLWNvbG9yKX0uZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1yb3ctZGV0YWlsLXdyYXBwZXJ7ZmxleDoxIDEgYXV0bztkaXNwbGF5OmZsZXh9LmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtcm93LWRldGFp''@;'; put 'put ''bHt3aWR0aDphdXRvfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXJvdy1kZXRhaWwgLmRhdGFncmlkLWNlbGx7cGFkZGluZy10b3A6MDtib3JkZXI6MH0uZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1yb3ctZGV0YWlsIC5kYXRhZ3JpZC1jZWxsLmRhdGFncmlkLWNvbnRhaW5lcntmb250LXNpemU6''@;'; put 'put ''dmFyKC0tY2xyLXRhYmxlLWZvbnRzaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKX0uZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1zZWxlY3R7bWluLXdpZHRoOmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAtIHZhcigtLWNsci10YWJsZS1ib3JkZXJ3aWR0aCkpO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRk''@;'; put 'put ''aW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1zZWxlY3QsLmRhdGFncmlkLXJvdyAuZGF0YWdyaWQtc2VsZWN0IGlucHV0e2N1cnNvcjpwb2ludGVyfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXNl''@;'; put 'put ''bGVjdC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkLC5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXNlbGVjdC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVkIGlucHV0e2N1cnNvcjpub3QtYWxsb3dlZH0uZGF0YWdyaWQtcm93IC5kYXRhZ3JpZC1zaWducG9zdC10cmlnZ2VyIC5zaWducG9zdHtt''@;'; put 'put ''YXJnaW46Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpKSAwO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXNpZ25wb3N0LXRyaWdnZXIgLnNpZ25wb3N0IC5zaWducG9zdC10cmlnZ2Vye2hlaWdodDppbmhlcml0O2xpbmUt''@;'; put 'put ''aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9LmRhdGFncmlkLXJvdy5kYXRhZ3JpZC1yb3ctbG9hZGluZyAuZGF0YWdyaWQtcm93LXN0aWNreXtkaXNwbGF5Om5vbmV9LmRhdGFncmlkLXJvdy5kYXRhZ3JpZC1yb3ctbG9hZGluZyAuZGF0YWdyaWQtY2VsbHtkaXNwbGF5OmZsZXg7''@;'; put 'put ''cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5kYXRhZ3JpZC1yb3ctc3RpY2t5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJnY29s''@;'; put 'put ''b3IpO2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6bm93cmFwO3Bvc2l0aW9uOnN0aWNreTtsZWZ0OjA7ei1pbmRleDo1MDB9LmRhdGFncmlkLXJvdy1zdGlja3kgLmRhdGFncmlkLWNlbGw6bGFzdC1jaGlsZDphZnRlcntjb250ZW50OiIiO3dpZHRoOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4t''@;'; put 'put ''c2VwYXJhdG9yLXdpZHRoKTtoZWlnaHQ6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3ItaGVpZ2h0KTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1j''@;'; put 'put ''b2xvcil9LmRhdGFncmlkLXJvdy1zY3JvbGxhYmxle2ZsZXg6MSAxIGF1dG87ZGlzcGxheTpmbGV4O2ZsZXgtZmxvdzpjb2x1bW4gbm93cmFwfS5kYXRhZ3JpZC1yb3ctc2Nyb2xsYWJsZS5pcy1yZXBsYWNlZHtmbGV4LWRpcmVjdGlvbjpyb3d9LmRhdGFncmlkLXJvdy1zY3JvbGxhYmxlLmlz''@;'; put 'put ''LXJlcGxhY2VkIC5kYXRhZ3JpZC1zY3JvbGxpbmctY2VsbHN7ZmxleDowIDAgYXV0b30uZGF0YWdyaWQtcm93LXNjcm9sbGFibGUgLmRhdGFncmlkLWNvbHVtbjpsYXN0LWNoaWxkIC5kYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9ye2Rpc3BsYXk6bm9uZX0uZGF0YWdyaWQtcm93LWZsZXh7Zmxl''@;'; put 'put ''eDoxIDEgYXV0bztkaXNwbGF5OmZsZXg7ZmxleC1mbG93OnJvdyBub3dyYXB9LmRhdGFncmlkLXJvdy1mbGV4IC5kYXRhZ3JpZC1yb3ctZGV0YWlse2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IG5vd3JhcH0uZGF0YWdyaWQtcm93LWZsZXggLmRhdGFncmlkLXJvdy1kZXRhaWwgLmRhdGFn''@;'; put 'put ''cmlkLWNlbGx7cGFkZGluZy10b3A6MH0uZGF0YWdyaWQtc2Nyb2xsaW5nLWNlbGxzLC5kYXRhZ3JpZC1zY3JvbGxpbmctZGV0YWlsc3tkaXNwbGF5OmZsZXg7ZmxleDoxIDEgYXV0bztmbGV4LWZsb3c6cm93IG5vd3JhcH0uZGF0YWdyaWQtYWN0aW9uLWJhcnttYXJnaW4tdG9wOnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtOSl9LmRhdGFncmlkLWFjdGlvbi1iYXJ+LmRhdGFncmlkLXNwaW5uZXJ7aGVpZ2h0OmNhbGMoMTAwJSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSkpO3RvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5kYXRhZ3JpZC1oZWFkZXJ7cG9zaXRpb246c3RpY2t5''@;'; put 'put ''O3RvcDowO3otaW5kZXg6NTAxO3dpZHRoOmF1dG99LmRhdGFncmlkLWhlYWRlciAuZGF0YWdyaWQtY29sdW1ue2JvcmRlci1ib3R0b206bm9uZX0uZGF0YWdyaWQtaGVhZGVyIC5kYXRhZ3JpZC1yb3d7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGhlYWQtYmdjb2xvcik7Ym9yZGVyLXRv''@;'; put 'put ''cDpub25lO2JvcmRlci1ib3R0b20tc3R5bGU6c29saWQ7Ym9yZGVyLWJvdHRvbS13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApO2JvcmRlci1ib3R0b20tY29sb3I6dmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcil9LmRhdGFncmlkLWhlYWRlciAuZGF0''@;'; put 'put ''YWdyaWQtcm93IC5kYXRhZ3JpZC1yb3ctc3RpY2t5e2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXRoZWFkLWJnY29sb3IpO3otaW5kZXg6NTAyfS5kYXRhZ3JpZC1oZWFkZXIgLmRhdGFncmlkLXJvdzpob3ZlciwuZGF0YWdyaWQtaGVhZGVyIC5kYXRhZ3JpZC1yb3c6aG92ZXIgLmRhdGFn''@;'; put 'put ''cmlkLXJvdy1zdGlja3l7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGhlYWQtYmdjb2xvcil9LmRhdGFncmlkLWhlYWRlciAuZGF0YWdyaWQtcm93LXNjcm9sbGFibGV7ZmxleC1kaXJlY3Rpb246cm93fS5kYXRhZ3JpZC10YWJsZS13cmFwcGVye2Rpc3BsYXk6ZmxleDtmbGV4OjEgMSBh''@;'; put 'put ''dXRvO21pbi1oZWlnaHQ6MTAwJX0uZGF0YWdyaWQtdGFibGUsLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1yb3dze2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleDoxIDEgYXV0b30uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWJvZHl7d2lkdGg6YXV0b30uZGF0YWdy''@;'; put 'put ''aWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbntwb3NpdGlvbjpyZWxhdGl2ZTt0ZXh0LWFsaWduOmxlZnQ7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTUpO2Rpc3BsYXk6ZmxleDtmbGV4OjEgMSBhdXRvO3ZlcnRpY2FsLWFsaWduOnRvcDtib3JkZXI6MH0uZGF0YWdyaWQtdGFi''@;'; put 'put ''bGUgLmRhdGFncmlkLWNvbHVtbjpmb2N1c3tvdXRsaW5lOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZSk7b3V0bGluZS1jb2xvcjotd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1vZmZzZXQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIp''@;'; put 'put ''KX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiBjbHItZGctZmlsdGVyLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIGNsci1kZy1zdHJpbmctZmlsdGVyLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIGNsci1kZy1udW1lcmljLWZpbHRlcntkaXNwbGF5''@;'; put 'put ''OmZsZXg7b3JkZXI6OTk7bWFyZ2luLWxlZnQ6YXV0bzthbGlnbi1pdGVtczpjZW50ZXJ9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLW51bWVyaWMtZmlsdGVyLWlucHV0e3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTQpfS5kYXRhZ3JpZC10YWJsZSAu''@;'; put 'put ''ZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1udW1lcmljLWZpbHRlci1pbnB1dCAuY2xyLWZvcm0tY29udHJvbHttYXJnaW4tdG9wOjB9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWZpbHRlci10b2dnbGV7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1h''@;'; put 'put ''cHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtib3gtc2hhZG93Om5vbmU7YmFja2dyb3VuZDowIDA7Y3Vyc29yOnBvaW50ZXI7ZmxvYXQ6cmlnaHQ7dmVydGljYWwt''@;'; put 'put ''YWxpZ246bWlkZGxlO2hlaWdodDp2YXIoLS1jbHItZGF0YWdyaWQtZmlsdGVyLXRvZ2dsZS1zaXplKTt3aWR0aDp2YXIoLS1jbHItZGF0YWdyaWQtZmlsdGVyLXRvZ2dsZS1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1kYXRhZ3JpZC1maWx0ZXItdG9nZ2xlLXNpemUpO21pbi13aWR0aDp2''@;'; put 'put ''YXIoLS1jbHItZGF0YWdyaWQtZmlsdGVyLXRvZ2dsZS1zaXplKTttYXJnaW4tbGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtiYWNrZ3JvdW5kLXNpemU6Y29udGFpbn1idXR0b24uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVt''@;'; put 'put ''biAuZGF0YWdyaWQtZmlsdGVyLXRvZ2dsZXtjdXJzb3I6cG9pbnRlcn0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtZmlsdGVyLXRvZ2dsZSBjZHMtaWNvbiwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtZmlsdGVyLXRvZ2dsZSBj''@;'; put 'put ''bHItaWNvbntjb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtZmlsdGVyLXRvZ2dsZTpob3ZlciBjZHMtaWNvbiwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0''@;'; put 'put ''YWdyaWQtZmlsdGVyLXRvZ2dsZTpob3ZlciBjbHItaWNvbntjb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtZmlsdGVyLXRvZ2dsZS5kYXRhZ3JpZC1maWx0ZXItb3Bl''@;'; put 'put ''biBjZHMtaWNvbiwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtZmlsdGVyLXRvZ2dsZS5kYXRhZ3JpZC1maWx0ZXItb3BlbiBjbHItaWNvbntjb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSl9LmRhdGFncmlkLXRh''@;'; put 'put ''YmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWZpbHRlci10b2dnbGUuZGF0YWdyaWQtZmlsdGVyZWQgY2RzLWljb24sLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWZpbHRlci10b2dnbGUuZGF0YWdyaWQtZmlsdGVyZWQgY2xyLWljb257Y29sb3I6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1zZWxlY3RlZCl9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4uZGF0YWdyaWQtZml4ZWQtd2lkdGh7ZmxleDowIDAgYXV0b30uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1u''@;'; put 'put ''LWZsZXh7ZGlzcGxheTpmbGV4O2ZsZXg6MSAxIGF1dG99LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi10aXRsZXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFu''@;'; put 'put ''Y2U6bm9uZTttYXJnaW46MDtwYWRkaW5nOjA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2JveC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kOjAgMDtjb2xvcjp2YXIoLS1jbHItdGFibGUtZm9udC1jb2xvcik7dGV4dC1hbGlnbjpsZWZ0O2ZsZXg6MSAxIGF1dG87YWxpZ24taXRlbXM6Y2VudGVy''@;'; put 'put ''O2FsaWduLXNlbGY6Y2VudGVyO2Rpc3BsYXk6ZmxleH1idXR0b24uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXRpdGxle2N1cnNvcjpwb2ludGVyfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tdGl0bGUg''@;'; put 'put ''LnNpZ25wb3N0IC5zaWducG9zdC1hY3Rpb24uYnRue2hlaWdodDppbmhlcml0O2xpbmUtaGVpZ2h0OmluaGVyaXR9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi10aXRsZSAuY2xyLWNoZWNrYm94LXdyYXBwZXIgLmNsci1jb250cm9sLWxhYmVse21h''@;'; put 'put ''cmdpbi10b3A6Y2FsYygtMSoxMCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gYnV0dG9uLmRhdGFncmlkLWNvbHVtbi10aXRsZTpob3Zlcnt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO2N1cnNvcjpwb2ludGVyfS5kYXRh''@;'; put 'put ''Z3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIGJ1dHRvbi5kYXRhZ3JpZC1jb2x1bW4tdGl0bGUgLnNvcnQtaWNvbntjb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTttYXJnaW4tbGVmdDphdXRvO2hlaWdodDp2YXIoLS1jbHItZGF0YWdyaWQtaWNvbi1z''@;'; put 'put ''aXplKTt3aWR0aDp2YXIoLS1jbHItZGF0YWdyaWQtaWNvbi1zaXplKTt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gYnV0dG9uLmRhdGFncmlkLWNvbHVtbi10aXRsZSAuc29ydC1pY29uOmhvdmVye2NvbG9yOnZhcigtLWNkcy1hbGlhcy1v''@;'; put 'put ''YmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIGJ1dHRvbi5kYXRhZ3JpZC1jb2x1bW4tdGl0bGUgLnNvcnQtaWNvbjphY3RpdmV7Y29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1hY3RpdmUp''@;'; put 'put ''fS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9ye2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleDowIDAgYXV0bzt3aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApO29yZGVyOjEwMDtt''@;'; put 'put ''YXJnaW4tbGVmdDphdXRvO2hlaWdodDoxMDAlfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uIC5kYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yOmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7aGVpZ2h0OnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9y''@;'; put 'put ''LWhlaWdodCk7d2lkdGg6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3Itd2lkdGgpO3JpZ2h0OjA7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXNl''@;'; put 'put ''cGFyYXRvciAuZGF0YWdyaWQtY29sdW1uLWhhbmRsZXstd2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTstbXMtYXBwZWFyYW5jZTpub25lOy1vLWFwcGVhcmFuY2U6bm9uZTttYXJnaW46MDtwYWRkaW5nOjA7Ym9yZGVyOjA7Ym9yZGVyLXJhZGl1czowO2JveC1z''@;'; put 'put ''aGFkb3c6bm9uZTtiYWNrZ3JvdW5kOjAgMDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDpjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKTtyaWdodDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCkpO3RvcDpjYWxjKC0xKnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtc3BhY2UtNCkpO2N1cnNvcjpjb2wtcmVzaXplO2hlaWdodDpjYWxjKDEwMCUgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpIC0gdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSk7ei1pbmRleDo1MDF9YnV0dG9uLmRhdGFncmlkLXRhYmxl''@;'; put 'put ''IC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3IgLmRhdGFncmlkLWNvbHVtbi1oYW5kbGV7Y3Vyc29yOnBvaW50ZXJ9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVtbi1zZXBhcmF0b3IgLmRhdGFncmlkLWNvbHVtbi1yZXNp''@;'; put 'put ''emUtdHJhY2tlcntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpKTtkaXNwbGF5Om5vbmU7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKTtoZWlnaHQ6MDtib3JkZXItcmlnaHQtc3R5bGU6ZG90dGVkO2JvcmRlci1yaWdodC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtMzAwKTtib3JkZXItcmlnaHQtd2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKTt0cmFuc2Zvcm06dHJhbnNsYXRlKDApO2N1cnNvcjpjb2wtcmVzaXplfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29s''@;'; put 'put ''dW1uIC5kYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yIC5kYXRhZ3JpZC1jb2x1bW4tcmVzaXplLXRyYWNrZXIub24tYXJyb3cta2V5LXJlc2l6ZXt0cmFuc2l0aW9uOnRyYW5zZm9ybSAuMnMgZWFzZS1vdXR9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLWNvbHVt''@;'; put 'put ''bi1zZXBhcmF0b3IgLmV4Y2VlZGVkLW1heHtib3JkZXItcmlnaHQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBkb3R0ZWQgdmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kYW5nZXItZGFyayl9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlk''@;'; put 'put ''LXNpZ25wb3N0LXRyaWdnZXIgLnNpZ25wb3N0e21hcmdpbjpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkpIDA7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4gLmRhdGFncmlkLXNpZ25wb3N0LXRyaWdnZXIg''@;'; put 'put ''LnNpZ25wb3N0IC5zaWducG9zdC10cmlnZ2Vye2hlaWdodDppbmhlcml0O2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4uZGF0YWdyaWQtc2VsZWN0LC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY29sdW1uLmRh''@;'; put 'put ''dGFncmlkLWV4cGFuZGFibGUtY2FyZXQsLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jb2x1bW4uZGF0YWdyaWQtcm93LWFjdGlvbnN7bWF4LXdpZHRoOnZhcigtLWNsci1kYXRhZ3JpZC1maXhlZC1jb2x1bW4tc2l6ZSk7bWluLXdpZHRoOnZhcigtLWNsci1kYXRhZ3JpZC1maXhlZC1jb2x1''@;'; put 'put ''bW4tc2l6ZSl9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxse2ZsZXg6MSAxIGF1dG87dGV4dC1hbGlnbjpsZWZ0O21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTE1KTtib3JkZXI6MH0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGwuZGF0YWdyaWQtZml4ZWQtd2lk''@;'; put 'put ''dGh7ZmxleDowIDAgYXV0b30uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGwuZGF0YWdyaWQtZml4ZWQtY29sdW1ue2ZsZXg6MCAwIHZhcigtLWNsci1kYXRhZ3JpZC1maXhlZC1jb2x1bW4tc2l6ZSk7bWF4LXdpZHRoOnZhcigtLWNsci1kYXRhZ3JpZC1maXhlZC1jb2x1bW4tc2l6ZSk7''@;'; put 'put ''bWluLXdpZHRoOnZhcigtLWNsci1kYXRhZ3JpZC1maXhlZC1jb2x1bW4tc2l6ZSl9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsLmRhdGFncmlkLXJvdy1hY3Rpb25ze2JhY2tncm91bmQ6MCAwfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbC5kYXRhZ3JpZC1leHBhbmRhYmxl''@;'; put 'put ''LWNhcmV0e3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSB2YXIoLS1jbHItZGF0YWdyaWQtaG9yaXpvbnRhbC1wYWRkaW5nKSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO3RleHQtYWxpZ246Y2VudGVyfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbDpmb2N1c3tvdXRs''@;'; put 'put ''aW5lOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tb3V0bGluZSk7b3V0bGluZS1jb2xvcjotd2Via2l0LWZvY3VzLXJpbmctY29sb3I7b3V0bGluZS1vZmZzZXQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTIpKX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWNl''@;'; put 'put ''bGwgLmRhdGFncmlkLWFjdGlvbi10b2dnbGV7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtib3gtc2hhZG93''@;'; put 'put ''Om5vbmU7YmFja2dyb3VuZDowIDB9YnV0dG9uLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsIC5kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xle2N1cnNvcjpwb2ludGVyfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbCAuZGF0YWdyaWQtYWN0aW9uLXRvZ2dsZSBjZHMtaWNvbiwuZGF0''@;'; put 'put ''YWdyaWQtdGFibGUgLmRhdGFncmlkLWNlbGwgLmRhdGFncmlkLWFjdGlvbi10b2dnbGUgY2xyLWljb257Y29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWljb24tY29sb3IpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtY2VsbCAuZGF0YWdyaWQtYWN0aW9uLXRvZ2dsZTphY3RpdmUgY2RzLWlj''@;'; put 'put ''b24sLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsIC5kYXRhZ3JpZC1hY3Rpb24tdG9nZ2xlOmFjdGl2ZSBjbHItaWNvbntjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtYWN0aW9uLXRvZ2dsZS1jb2xvcil9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1jZWxsIC5jbHItdG9nZ2xlLXdy''@;'; put 'put ''YXBwZXJ7bWFyZ2luLXRvcDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikpO3BhZGRpbmctdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQsLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1yb3ctYWN0aW9u''@;'; put 'put ''cywuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXR7cG9zaXRpb246cmVsYXRpdmV9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQgLmRhdGFncmlkLWFjdGlvbi10b2dnbGU6YmVmb3JlLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtZGV0YWls''@;'; put 'put ''LWNhcmV0IC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtYnV0dG9uOmJlZm9yZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWRldGFpbC1jYXJldCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1idXR0b246YmVmb3JlLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtcm93LWFjdGlvbnMgLmRh''@;'; put 'put ''dGFncmlkLWFjdGlvbi10b2dnbGU6YmVmb3JlLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtcm93LWFjdGlvbnMgLmRhdGFncmlkLWRldGFpbC1jYXJldC1idXR0b246YmVmb3JlLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtcm93LWFjdGlvbnMgLmRhdGFncmlkLWV4cGFuZGFibGUtY2Fy''@;'; put 'put ''ZXQtYnV0dG9uOmJlZm9yZSwuZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWFjdGlvbi10b2dnbGU6YmVmb3JlLC5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWJ1dHRvbjpi''@;'; put 'put ''ZWZvcmUsLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LWJ1dHRvbjpiZWZvcmV7Y29udGVudDoiIjtwb3NpdGlvbjphYnNvbHV0ZTtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO3RvcDowO2xlZnQ6MH0uZGF0YWdyaWQt''@;'; put 'put ''dGFibGUgLmRhdGFncmlkLXBsYWNlaG9sZGVyLWNvbnRhaW5lcntmbGV4OjEgMSBhdXRvO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2JvcmRlci10b3Atc3R5bGU6c29saWQ7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yKTtib3JkZXIt''@;'; put 'put ''dG9wLXdpZHRoOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCl9LmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1wbGFjZWhvbGRlcntiYWNrZ3JvdW5kOnZhcigtLWNsci1kYXRhZ3JpZC1wbGFjZWhvbGRlci1iYWNrZ3JvdW5kLWNvbG9yKTtkaXNwbGF5Om5vbmU7d2lk''@;'; put 'put ''dGg6MTAwJX0uZGF0YWdyaWQtdGFibGUgLmRhdGFncmlkLXBsYWNlaG9sZGVyLmRhdGFncmlkLWVtcHR5e2JvcmRlci10b3A6MDtkaXNwbGF5OmZsZXg7ZmxleC1mbG93OmNvbHVtbiBub3dyYXA7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0O2dhcDp2YXIo''@;'; put 'put ''LS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtmb250LXNpemU6dmFyKC0tY2xyLWRhdGFncmlkLXBsYWNlaG9sZGVyLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2xyLWRhdGFncmlkLXBsYWNlaG9sZGVyLWZvbnQtd2VpZ2h0KTts''@;'; put 'put ''aW5lLWhlaWdodDp2YXIoLS1jbHItZGF0YWdyaWQtcGxhY2Vob2xkZXItbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNsci1kYXRhZ3JpZC1wbGFjZWhvbGRlci1sZXR0ZXItc3BhY2luZyk7Y29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBsYWNlaG9sZGVyLWNvbG9yKX0uZGF0''@;'; put 'put ''YWdyaWQtdGFibGUgLmRhdGFncmlkLXBsYWNlaG9sZGVyIC5kYXRhZ3JpZC1wbGFjZWhvbGRlci1pbWFnZXtoZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMyk7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91''@;'; put 'put ''bmQtc2l6ZTpjb250YWluO2JhY2tncm91bmQtcG9zaXRpb246Y2VudGVyO2JhY2tncm91bmQtaW1hZ2U6dXJsKCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDYwJTIwNzIlMjIlMjB2ZXJzaW9uJTNEJTIyMS4xJTIyJTIweG1s''@;'; put 'put ''bnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlMjB4bWxucyUzQXhsaW5rJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYxOTk5JTJGeGxpbmslMjIlM0UlMEElMjAlMjAlMjAlMjAlM0NkZWZzJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTNDZWxsaXBzZSUyMGlkJTNEJTIycGF0aC0xJTIyJTIwY3glM0QlMjIzMCUyMiUyMGN5JTNEJTIyNjEuNzY2NjY2NyUyMiUyMHJ4JTNEJTIyMTUuNDUxMjkwNCUyMiUyMHJ5JTNEJTIyNC43MzMzMzMzMyUyMiUzRSUzQyUyRmVsbGlwc2UlM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''M0NtYXNrJTIwaWQlM0QlMjJtYXNrLTIlMjIlMjBtYXNrQ29udGVudFVuaXRzJTNEJTIydXNlclNwYWNlT25Vc2UlMjIlMjBtYXNrVW5pdHMlM0QlMjJvYmplY3RCb3VuZGluZ0JveCUyMiUyMHglM0QlMjIwJTIyJTIweSUzRCUyMjAlMjIlMjB3aWR0aCUzRCUyMjMwLjkwMjU4MDglMjIlMjBo''@;'; put 'put ''ZWlnaHQlM0QlMjI5LjQ2NjY2NjY3JTIyJTIwZmlsbCUzRCUyMndoaXRlJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDdXNlJTIweGxpbmslM0FocmVmJTNEJTIyJTIzcGF0aC0xJTIyJTNFJTNDJTJGdXNlJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIw''@;'; put 'put ''JTIwJTNDJTJGbWFzayUzRSUwQSUyMCUyMCUyMCUyMCUzQyUyRmRlZnMlM0UlMEElMjAlMjAlMjAlMjAlM0NnJTIwaWQlM0QlMjJQYWdlLTElMjIlMjBzdHJva2UlM0QlMjJub25lJTIyJTIwc3Ryb2tlLXdpZHRoJTNEJTIyMSUyMiUyMGZpbGwlM0QlMjJub25lJTIyJTIwZmlsbC1ydWxlJTNE''@;'; put 'put ''JTIyZXZlbm9kZCUyMiUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2clMjBpZCUzRCUyMkFydGJvYXJkJTIyJTNFJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTNDdXNlJTIwaWQlM0QlMjJPdmFsLTEwJTIyJTIwc3Ryb2tlJTNEJTIyJTIzQzFERkVGJTIy''@;'; put 'put ''JTIwbWFzayUzRCUyMnVybCglMjNtYXNrLTIpJTIyJTIwc3Ryb2tlLXdpZHRoJTNEJTIyMi44JTIyJTIwc3Ryb2tlLWxpbmVjYXAlM0QlMjJzcXVhcmUlMjIlMjBzdHJva2UtZGFzaGFycmF5JTNEJTIyMyUyQzYlMkMzJTJDNSUyMiUyMHhsaW5rJTNBaHJlZiUzRCUyMiUyM3BhdGgtMSUyMiUz''@;'; put 'put ''RSUzQyUyRnVzZSUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BhdGglMjBkJTNEJTIyTTM4LjQ2MTM2NDclMkMxOC4xNjQyNDU2JTIwTDMwLjk4OTAxMzclMkMzNC45MTQxODQ2JTIwTDMxJTJDNDclMjBMMzIuNTk3Nzc4MyUyQzQ2LjUxNjcyMzYlMjBMMzIu''@;'; put 'put ''NTk3Nzc4MyUyQzM0LjkxNDE4NDYlMjBMNTEuMDY3MzIxOCUyQzE1Ljc1NjA0MjUlMjBDNTEuMDY3MzIxOCUyQzE1Ljc1NjA0MjUlMjA0OC42Mjk1MTY2JTJDMTYuNjU0Mjk2OSUyMDQ0Ljk2Mjg5MDYlMkMxNy4zMzkyMzM0JTIwQzQxLjI5NjI2NDYlMkMxOC4wMjQxNjk5JTIwMzguNDYxMzY0''@;'; put 'put ''NyUyQzE4LjE2NDI0NTYlMjAzOC40NjEzNjQ3JTJDMTguMTY0MjQ1NiUyMFolMjIlMjBpZCUzRCUyMlBhdGgtMTk1JTIyJTIwZmlsbCUzRCUyMiUyM0MxREZFRiUyMiUzRSUzQyUyRnBhdGglM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlM0NwYXRoJTIwZCUzRCUy''@;'; put 'put ''Mk00Ljc0NjM5MjI2JTJDMTIuNTY2MTg1NSUyMEw0LjYyMDY1NzI2JTJDMTIuMTYwNTM0OCUyMEw1LjM1MTU0MTQlMkMxMS4xNjI1MDQ0JTIwTDUuNzc2MjIzODUlMkMxMS4xNTk5MzklMjBMNi4yMDkzNjMwOSUyQzEyLjU1NzM0ODElMjBMNC43NDYzOTIyNiUyQzEyLjU2NjE4NTUlMjBaJTIw''@;'; put 'put ''TTYuMjA5MzYzMDklMkMxMi41NTczNDgxJTIwTDYuMzI1NDI2MzIlMkMxMi45MzE3OTU0JTIwTDI4LjQ5NjM4NTUlMkMzNC44Nzk2NzE4JTIwTDI4LjQ5NjM4NTUlMkM0Ny44MDk2NjkxJTIwTDMyLjYlMkM0Ni40ODM2NTEzJTIwTDMyLjYlMkMzNC44OTkyMzY1JTIwTDUzLjk3MzQ5NCUyQzEy''@;'; put 'put ''LjcwMzU4MTMlMjBMNTMuOTczNDk0JTJDMTIuMjY4ODIwMSUyMEw2LjIwOTM2MzA5JTJDMTIuNTU3MzQ4MSUyMFolMjBNNTUuMzczNDk0JTJDMTAuODYwMzM3NiUyMEw1NS4zNzM0OTQlMkMxMy4yNjgwNjY0JTIwTDM0JTJDMzUuNDYzNzIxNiUyMEwzNCUyQzQ3LjUwMjU0MDElMjBMMjcuMDk2''@;'; put 'put ''Mzg1NSUyQzQ5LjczMzMzMzMlMjBMMjcuMDk2Mzg1NSUyQzM1LjQ2MzcyMTklMjBMNS4wOTE3OTY4OCUyQzEzLjY4MDU0MiUyMEw0LjMxMzI1MzAxJTJDMTEuMTY4Nzc2NCUyMEw1NS4zNzM0OTQlMkMxMC44NjAzMzc2JTIwWiUyMiUyMGlkJTNEJTIyUGF0aC0xNDklMjIlMjBmaWxsJTNEJTIy''@;'; put 'put ''JTIzN0ZCREREJTIyJTNFJTNDJTJGcGF0aCUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ2VsbGlwc2UlMjBpZCUzRCUyMk92YWwtOSUyMiUyMGZpbGwlM0QlMjIlMjNGRkZGRkYlMjIlMjBjeCUzRCUyMjMwJTIyJTIwY3klM0QlMjIxMS43ODU2NTQlMjIlMjBy''@;'; put 'put ''eCUzRCUyMjI2JTIyJTIwcnklM0QlMjI2Ljc4NTY1NDAxJTIyJTNFJTNDJTJGZWxsaXBzZSUzRSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BhdGglMjBkJTNEJTIyTTMwJTJDMTcuMTcxMzA4JTIwQzM2Ljg3NzIxNzclMkMxNy4xNzEzMDglMjA0My4zMTEyMjgy''@;'; put 'put ''JTJDMTYuNDYxMDcwMSUyMDQ4LjAzMTIzNzElMkMxNS4yMjkyMTA2JTIwQzUwLjI3Nzc2MTElMkMxNC42NDI4OTc3JTIwNTIuMDUwNzYxOSUyQzEzLjk1Nzk2NzclMjA1My4yMjE2MjMxJTJDMTMuMjM1NDk3MyUyMEM1NC4xOTM4NTY1JTJDMTIuNjM1NTg4NiUyMDU0LjYlMkMxMi4xMTc1ODkx''@;'; put 'put ''JTIwNTQuNiUyQzExLjc4NTY1NCUyMEM1NC42JTJDMTEuNDUzNzE4OSUyMDU0LjE5Mzg1NjUlMkMxMC45MzU3MTk0JTIwNTMuMjIxNjIzMSUyQzEwLjMzNTgxMDclMjBDNTIuMDUwNzYxOSUyQzkuNjEzMzQwMzIlMjA1MC4yNzc3NjExJTJDOC45Mjg0MTAzNCUyMDQ4LjAzMTIzNzElMkM4LjM0''@;'; put 'put ''MjA5NzQ2JTIwQzQzLjMxMTIyODIlMkM3LjExMDIzNzk1JTIwMzYuODc3MjE3NyUyQzYuNCUyMDMwJTJDNi40JTIwQzIzLjEyMjc4MjMlMkM2LjQlMjAxNi42ODg3NzE4JTJDNy4xMTAyMzc5NSUyMDExLjk2ODc2MjklMkM4LjM0MjA5NzQ2JTIwQzkuNzIyMjM4ODYlMkM4LjkyODQxMDM0JTIw''@;'; put 'put ''Ny45NDkyMzgxNCUyQzkuNjEzMzQwMzIlMjA2Ljc3ODM3Njg5JTJDMTAuMzM1ODEwNyUyMEM1LjgwNjE0MzUlMkMxMC45MzU3MTk0JTIwNS40JTJDMTEuNDUzNzE4OSUyMDUuNCUyQzExLjc4NTY1NCUyMEM1LjQlMkMxMi4xMTc1ODkxJTIwNS44MDYxNDM1JTJDMTIuNjM1NTg4NiUyMDYuNzc4''@;'; put 'put ''Mzc2ODklMkMxMy4yMzU0OTczJTIwQzcuOTQ5MjM4MTQlMkMxMy45NTc5Njc3JTIwOS43MjIyMzg4NiUyQzE0LjY0Mjg5NzclMjAxMS45Njg3NjI5JTJDMTUuMjI5MjEwNiUyMEMxNi42ODg3NzE4JTJDMTYuNDYxMDcwMSUyMDIzLjEyMjc4MjMlMkMxNy4xNzEzMDglMjAzMCUyQzE3LjE3MTMw''@;'; put 'put ''OCUyMFolMjBNMzAlMkMxOC41NzEzMDglMjBDMTUuNjQwNTk2NSUyQzE4LjU3MTMwOCUyMDQlMkMxNS41MzMyNjcyJTIwNCUyQzExLjc4NTY1NCUyMEM0JTJDOC4wMzgwNDA3OCUyMDE1LjY0MDU5NjUlMkM1JTIwMzAlMkM1JTIwQzQ0LjM1OTQwMzUlMkM1JTIwNTYlMkM4LjAzODA0MDc4JTIw''@;'; put 'put ''NTYlMkMxMS43ODU2NTQlMjBDNTYlMkMxNS41MzMyNjcyJTIwNDQuMzU5NDAzNSUyQzE4LjU3MTMwOCUyMDMwJTJDMTguNTcxMzA4JTIwWiUyMiUyMGlkJTNEJTIyT3ZhbC05LUNvcHklMjIlMjBmaWxsJTNEJTIyJTIzN0ZCREREJTIyJTNFJTNDJTJGcGF0aCUzRSUwQSUyMCUyMCUyMCUyMCUy''@;'; put 'put ''MCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUzQ3BhdGglMjBkJTNEJTIyTTE4LjI2MDg2NDMlMkM3LjE0NTYyOTg4JTIwTDIyLjcyNzM1NiUyQzE2LjkwNDcyNDElMjBDMjIuNzI3MzU2JTJDMTYuOTA0NzI0MSUyMDE1LjMwMDY1OTIlMkMxNi4zOTExNzQzJTIwMTAuMjc2MDAxJTJDMTQuNzUxMTU5''@;'; put 'put ''NyUyMEM1LjI1MTM0Mjc3JTJDMTMuMTExMTQ1JTIwNS4zODAzMTAwNiUyQzExLjgyODQzMDIlMjA1LjM4MDMxMDA2JTJDMTEuNjg4MjkzNSUyMEM1LjM4MDMxMDA2JTJDMTAuNDgzMjgzMSUyMDguMTY2MzMxNTIlMkM5LjQxODc3NzE2JTIwMTEuMTE0NTYzJTJDOC41NzMyNDIxOSUyMEMxNC41''@;'; put 'put ''NDkzMTklMkM3LjU4ODE3NDkyJTIwMTguMjYwODY0MyUyQzcuMTQ1NjI5ODglMjAxOC4yNjA4NjQzJTJDNy4xNDU2Mjk4OCUyMFolMjIlMjBpZCUzRCUyMlBhdGgtMTk2JTIyJTIwZmlsbCUzRCUyMiUyM0MxREZFRiUyMiUzRSUzQyUyRnBhdGglM0UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAl''@;'; put 'put ''MjAlM0MlMkZnJTNFJTBBJTIwJTIwJTIwJTIwJTNDJTJGZyUzRSUwQSUzQyUyRnN2ZyUzRSIpfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtaGlkZGVuLWNvbHVtbi5kYXRhZ3JpZC1jb2x1bW4sLmRhdGFncmlkLXRhYmxlIC5kYXRhZ3JpZC1oaWRkZW4tY29sdW1uLmRhdGFncmlkLWNlbGx7''@;'; put 'put ''ZGlzcGxheTpub25lfS5kYXRhZ3JpZC10YWJsZSAuZGF0YWdyaWQtcm93LXNjcm9sbGFibGUgLmRhdGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvcjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tcmVzaXplLWhhbmRsZXItY29s''@;'; put 'put ''b3IpfS5kYXRhZ3JpZC1yb3ctcmVwbGFjZWQgLmRhdGFncmlkLXNjcm9sbGluZy1jZWxscyAuZGF0YWdyaWQtY2VsbDpub3QoLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQpOm5vdCguZGF0YWdyaWQtcm93LWFjdGlvbnMpOm5vdCguZGF0YWdyaWQtc2VsZWN0KXtkaXNwbGF5Om5vbmV9LmRh''@;'; put 'put ''dGFncmlkLXJvdy1yZXBsYWNlZCAuZGF0YWdyaWQtcm93LWRldGFpbCAuZGF0YWdyaWQtY2VsbHtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6dmFyKC0tY2xyLXRhYmxlLWNlbGwtcGFkZGluZyl9LmRhdGFncmlkLXJvdy1yZXBsYWNlZCAuZGF0YWdyaWQtcm93LWRldGFpbCAuZGF0YWdyaWQtY2Vs''@;'; put 'put ''bC5kYXRhZ3JpZC1oaWRkZW4tY29sdW1ue2Rpc3BsYXk6bm9uZX0uZGF0YWdyaWQtcm93LXJlcGxhY2VkIC5kYXRhZ3JpZC1yb3ctZGV0YWlsIC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0e3BhZGRpbmctdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMil9LmRhdGFncmlkLWZvb3Rlcntm''@;'; put 'put ''bGV4OjAgMCBhdXRvO2Rpc3BsYXk6ZmxleDtmbGV4LWZsb3c6cm93IG5vd3JhcDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjthbGlnbi1pdGVtczpzdHJldGNoO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2ZvbnQtc2l6''@;'; put 'put ''ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdo''@;'; put 'put ''dCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItdGhlYWQtYmdjb2xvcik7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItdGFibGUtZm9vdGVy''@;'; put 'put ''LWJvcmRlci10b3AtY29sb3IpO2JvcmRlci13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApO2JvcmRlci10b3A6bm9uZTtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFk''@;'; put 'put ''aXVzLTEwMCk7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKX0uZGF0YWdyaWQtZm9vdGVyIC5wYWdpbmF0aW9ue2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7ZmxleC13cmFwOndyYXA7anVzdGlmeS1jb250''@;'; put 'put ''ZW50OmZsZXgtZW5kO2dhcDp2YXIoLS1jbHItZGF0YWdyaWQtZm9vdGVyLXBhZ2luYXRpb24tZ2FwKX0uZGF0YWdyaWQtZm9vdGVyIC5wYWdpbmF0aW9uLXNpemV7ZGlzcGxheTpibG9jaztmbGV4OjEgMSBhdXRvO3doaXRlLXNwYWNlOm5vd3JhcDt0ZXh0LWFsaWduOnJpZ2h0fS5kYXRhZ3Jp''@;'; put 'put ''ZC1mb290ZXIgLnBhZ2luYXRpb24tc2l6ZSAuY2xyLXBhZ2Utc2l6ZS1zZWxlY3R7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250''@;'; put 'put ''LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGV0dGVyLXNwYWNpbmcpO21hcmdpbi1sZWZ0OnZhcigtLWNk''@;'; put 'put ''cy1nbG9iYWwtc3BhY2UtNik7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7dmVydGljYWwtYWxpZ246bWlkZGxlfS5kYXRhZ3JpZC1mb290ZXIgLnBhZ2luYXRpb24tZGVzY3JpcHRpb257d2hpdGUtc3BhY2U6bm93cmFwfS5kYXRhZ3JpZC1mb290ZXIgLnBhZ2luYXRpb24tbGlz''@;'; put 'put ''dHtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZTtmbGV4OjAgMCBhdXRvO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LmRhdGFncmlkLWZvb3RlciAuY29sdW1uLXN3''@;'; put 'put ''aXRjaC13cmFwcGVyIC5jb2x1bW4tdG9nZ2xlLS1hY3Rpb257bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCk7dGV4dC10cmFuc2Zvcm06Y2FwaXRhbGl6ZTtwYWRkaW5nOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLXBhZGRpbmcpO2JvcmRlci1jb2xvcjp2YXIo''@;'; put 'put ''LS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1ib3JkZXItY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtZmlsbC1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtdGV4dC1jb2xvcik7bWFyZ2luOjB9''@;'; put 'put ''LmRhdGFncmlkLWZvb3RlciAuY29sdW1uLXN3aXRjaC13cmFwcGVyIC5jb2x1bW4tdG9nZ2xlLS1hY3Rpb24uZGlzYWJsZWQsLmRhdGFncmlkLWZvb3RlciAuY29sdW1uLXN3aXRjaC13cmFwcGVyIC5jb2x1bW4tdG9nZ2xlLS1hY3Rpb246ZGlzYWJsZWQsLmRhdGFncmlkLWZvb3RlciAuY29s''@;'; put 'put ''dW1uLXN3aXRjaC13cmFwcGVyIC5jb2x1bW4tdG9nZ2xlLS1hY3Rpb24uZGlzYWJsZWQ6aG92ZXIsLmRhdGFncmlkLWZvb3RlciAuY29sdW1uLXN3aXRjaC13cmFwcGVyIC5jb2x1bW4tdG9nZ2xlLS1hY3Rpb246ZGlzYWJsZWQ6aG92ZXIsLmRhdGFncmlkLWZvb3RlciAuY29sdW1uLXN3aXRj''@;'; put 'put ''aC13cmFwcGVyIC5jb2x1bW4tdG9nZ2xlLS1hY3Rpb24uZGlzYWJsZWQ6YWN0aXZlLC5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9uOmRpc2FibGVkOmFjdGl2ZXtjdXJzb3I6bm90LWFsbG93ZWQ7Ym9yZGVyLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWRpc2FibGVkLWNvbG9yKTtjb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1kaXNhYmxlZC1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtY29sdW1uLXRvZ2dsZS1maWxsLWNvbG9yKX0uZGF0''@;'; put 'put ''YWdyaWQtZm9vdGVyIC5jb2x1bW4tc3dpdGNoLXdyYXBwZXIgLmNvbHVtbi10b2dnbGUtLWFjdGlvbjpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtYm9yZGVyLWhvdmVyLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kYXRhZ3Jp''@;'; put 'put ''ZC1jb2x1bW4tdG9nZ2xlLWZpbGwtaG92ZXItY29sb3IpO2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLXRleHQtaG92ZXItY29sb3IpfS5kYXRhZ3JpZC1mb290ZXIgLmNvbHVtbi1zd2l0Y2gtd3JhcHBlciAuY29sdW1uLXRvZ2dsZS0tYWN0aW9uOmFjdGl2ZSwuZGF0''@;'; put 'put ''YWdyaWQtZm9vdGVyIC5jb2x1bW4tc3dpdGNoLXdyYXBwZXIgLmNvbHVtbi10b2dnbGUtLWFjdGlvbjpmb2N1c3tib3gtc2hhZG93Om5vbmU7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLWJvcmRlci1hY3RpdmUtY29sb3IpO2JhY2tncm91bmQtY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi10b2dnbGUtZmlsbC1hY3RpdmUtY29sb3IpO2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tdG9nZ2xlLXRleHQtYWN0aXZlLWNvbG9yKX0uZGF0YWdyaWQtZm9vdGVyIC5jbHItZm9ybS1jb250cm9sLWRpc2FibGVke2Rpc3BsYXk6Zmxl''@;'; put 'put ''eDthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OjEwMCV9LmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmRhdGFncmlkLWZvb3Rlci1zZWxlY3QuY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbHtjdXJzb3I6ZGVmYXVsdDttYXJnaW4tcmln''@;'; put 'put ''aHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KX0uY2xyLWZvcm0tY29udHJvbC1kaXNhYmxlZCAuZGF0YWdyaWQtZm9vdGVyLXNlbGVjdC5jbHItY2hlY2tib3gtd3JhcHBlciBpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkK2xhYmVsOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigt''@;'; put 'put ''LWNsci1mb3Jtcy1sYWJlbC1kaXNhYmxlZC1jb2xvcil9LmRhdGFncmlkLXNwaW5uZXJ7cG9zaXRpb246YWJzb2x1dGU7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3dpZHRoOjEwMCU7dG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNik7''@;'; put 'put ''aGVpZ2h0OmNhbGMoMTAwJSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWxvYWRpbmctYmFja2dyb3VuZCk7ei1pbmRleDo1OTB9LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLXJvdy1yZXBsYWNlZCAuZGF0YWdyaWQt''@;'; put 'put ''cm93LWRldGFpbCAuZGF0YWdyaWQtY2VsbHtwYWRkaW5nOnZhcigtLWNsci10YWJsZS1jZWxsLWNvbXBhY3QtcGFkZGluZyl9LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWhlYWRlcnttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9LmRhdGFncmlkLWNvbXBhY3QgLmRh''@;'; put 'put ''dGFncmlkLWNvbHVtbiAuZGF0YWdyaWQtY29sdW1uLXNlcGFyYXRvcjphZnRlcntoZWlnaHQ6Y2FsYygxMDAlIC0gKC41KnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tc2VwYXJhdG9yLWV4cGFuZGJ5KSkpfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLXNlbGVj''@;'; put 'put ''dHtwYWRkaW5nOjAgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0LmRhdGFncmlkLWNlbGx7cGFkZGluZzowfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1jZWxsIGNsci1pY29ue21hcmdpbi10b3A6Y2FsYygtMSp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7bWFyZ2luLWJvdHRvbTpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykpO3RyYW5zZm9ybTp0cmFuc2xhdGVZKGNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSkpfS5kYXRh''@;'; put 'put ''Z3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1jZWxsIGNkcy1pY29ue21hcmdpbi10b3A6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSk7bWFyZ2luLWJvdHRvbTpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMykpfS5kYXRh''@;'; put 'put ''Z3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1jZWxsIC5iYWRnZXttYXJnaW4tdG9wOmNhbGMoLTEqdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSk7bWFyZ2luLWJvdHRvbTpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1leHBhbmRh''@;'; put 'put ''YmxlLWNhcmV0e3RleHQtYWxpZ246Y2VudGVyfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IC5zcGlubmVye21hcmdpbi10b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldCAu''@;'; put 'put ''ZGF0YWdyaWQtZXhwYW5kYWJsZS1jYXJldC1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtib3gt''@;'; put 'put ''c2hhZG93Om5vbmU7YmFja2dyb3VuZDowIDA7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtvdXRsaW5lLW9mZnNldDp2YXIoLS1jbHItZGF0YWdyaWQtY29tcGFjdC1vdXRsaW5lLW9mZnNldCl9YnV0dG9uLmRhdGFncmlk''@;'; put 'put ''LWNvbXBhY3QgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQtYnV0dG9ue2N1cnNvcjpwb2ludGVyfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0IC5kYXRhZ3JpZC1leHBhbmRhYmxlLWNhcmV0LWljb257bWFy''@;'; put 'put ''Z2luOjB9LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQuZGF0YWdyaWQtY2VsbHtwYWRkaW5nOjB9LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWV4cGFuZGFibGUtY2FyZXQuZGF0YWdyaWQtY29sdW1ue3BhZGRpbmctdG9wOmNhbGModmFyKC0tY2xyLXRh''@;'; put 'put ''YmxlLWNvbXBhY3QtdmVydGljYWwtcGFkZGluZykgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKTtwYWRkaW5nLWJvdHRvbTp2YXIoLS1jbHItdGFibGUtY29tcGFjdC12ZXJ0aWNhbC1wYWRkaW5nKX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtc2lnbnBvc3QtdHJpZ2dlciAuc2ln''@;'; put 'put ''bnBvc3QgLnNpZ25wb3N0LXRyaWdnZXIgY2RzLWljb246bm90KFtzaGFwZT1pbmZvLWNpcmNsZV0sW3NoYXBlPWV4Y2xhbWF0aW9uLXRyaWFuZ2xlXSxbc2hhcGU9ZXhjbGFtYXRpb24tY2lyY2xlXSxbc2hhcGU9Y2hlY2stY2lyY2xlXSxbc2hhcGU9aW5mb10sW3NoYXBlPWVycm9yXSksLmRh''@;'; put 'put ''dGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLXNpZ25wb3N0LXRyaWdnZXIgLnNpZ25wb3N0IC5zaWducG9zdC10cmlnZ2VyIGNsci1pY29uOm5vdChbc2hhcGU9aW5mby1jaXJjbGVdLFtzaGFwZT1leGNsYW1hdGlvbi10cmlhbmdsZV0sW3NoYXBlPWV4Y2xhbWF0aW9uLWNpcmNsZV0sW3NoYXBl''@;'; put 'put ''PWNoZWNrLWNpcmNsZV0sW3NoYXBlPWluZm9dLFtzaGFwZT1lcnJvcl0pe2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWZvb3RlcntwYWRkaW5nOjAgdmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS03KTttaW4taGVpZ2h0OnZhcigtLWNsci10YWJsZS1jb21wYWN0LXJvdy1oZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSktdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKX0uZGF0YWdyaWQtY29tcGFjdCAuZGF0YWdyaWQtZm9vdGVyIC5wYWdp''@;'; put 'put ''bmF0aW9ue2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9LmRhdGFncmlkLWNvbXBhY3QgLmRhdGFncmlkLWZvb3RlciAuY29sdW1uLXN3aXRjaC13cmFwcGVyIC5jb2x1bW4tdG9nZ2xlLS1hY3Rpb257b3V0bGluZS1vZmZzZXQ6dmFyKC0tY2xyLWRhdGFncmlkLWNvbXBh''@;'; put 'put ''Y3Qtb3V0bGluZS1vZmZzZXQpfS5kYXRhZ3JpZC1jb21wYWN0IC5kYXRhZ3JpZC1mb290ZXIgLmNsci1mb3JtLWNvbnRyb2wtZGlzYWJsZWQgLmRhdGFncmlkLWZvb3Rlci1zZWxlY3QuY2xyLWNoZWNrYm94LXdyYXBwZXIgaW5wdXRbdHlwZT1jaGVja2JveF06Y2hlY2tlZCtsYWJlbHt0b3A6''@;'; put 'put ''MH0uZGF0YWdyaWQtZm9vdGVyLWRlc2NyaXB0aW9ue2ZsZXg6MSAxIGF1dG87ZmxleC13cmFwOm5vd3JhcDt3aGl0ZS1zcGFjZTpub3dyYXA7ZGlzcGxheTpibG9jazt0ZXh0LWFsaWduOnJpZ2h0O21hcmdpbjphdXRvIDB9LnBhZ2luYXRpb24tbGlzdHtsaXN0LXN0eWxlOm5vbmU7ZGlzcGxh''@;'; put 'put ''eTpmbGV4O2ZsZXgtZmxvdzpyb3cgbm93cmFwO2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6c3RyZXRjaH0ucGFnaW5hdGlvbi1saXN0IC5wYWdpbmF0aW9uLWN1cnJlbnR7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXNp''@;'; put 'put ''emUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNtYWxsY2FwdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc21hbGxjYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMt''@;'; put 'put ''dHlwb2dyYXBoeS1zbWFsbGNhcHRpb24tbGV0dGVyLXNwYWNpbmcpO2JhY2tncm91bmQ6MCAwO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWZvcm1zLXRleHRhcmVhLWJhY2tncm91bmQtY29sb3IpO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcGFnaW5hdGlvbi1pbnB1dC1i''@;'; put 'put ''b3JkZXItY29sb3IpO2JvcmRlci13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItcmFkaXVzOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXJhZGl1cy0xMDApO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTkpO3RleHQtYWxpZ246Y2VudGVyO3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnR9LnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1jdXJyZW50OmZvY3VzLC5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tY3VycmVudC5jbHItZm9jdXN7YmFja2dyb3VuZDowIDA7Ym9y''@;'; put 'put ''ZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLWRhdGFncmlkLXBhZ2luYXRpb24taW5wdXQtYm9yZGVyLWZvY3VzLWNvbG9yKX0ucGFnaW5hdGlvbi1saXN0Pip7cGFkZGluZzowIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMil9LnBh''@;'; put 'put ''Z2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1maXJzdCwucGFnaW5hdGlvbi1saXN0IC5wYWdpbmF0aW9uLWxhc3QsLnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1wcmV2aW91cywucGFnaW5hdGlvbi1saXN0IC5wYWdpbmF0aW9uLW5leHR7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNl''@;'; put 'put ''bnRlcjtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOmNvbnRhaW59LnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1maXJzdDpkaXNhYmxlZCwucGFnaW5hdGlvbi1saXN0IC5wYWdpbmF0aW9uLWxhc3Q6ZGlzYWJsZWQsLnBhZ2luYXRpb24tbGlzdCAucGFn''@;'; put 'put ''aW5hdGlvbi1wcmV2aW91czpkaXNhYmxlZCwucGFnaW5hdGlvbi1saXN0IC5wYWdpbmF0aW9uLW5leHQ6ZGlzYWJsZWR7Y29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1kaXNhYmxlZCk7Y3Vyc29yOm5vdC1hbGxvd2VkO29wYWNpdHk6MX0ucGFnaW5hdGlvbi1saXN0IC5wYWdpbmF0aW9u''@;'; put 'put ''LWZpcnN0LC5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tcHJldmlvdXN7bWFyZ2luLXJpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9LnBhZ2luYXRpb24tbGlzdCAucGFnaW5hdGlvbi1sYXN0LC5wYWdpbmF0aW9uLWxpc3QgLnBhZ2luYXRpb24tbmV4dHttYXJnaW4tbGVmdDp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5wYWdpbmF0aW9uLWxpc3QgYnV0dG9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lOy1tcy1hcHBlYXJhbmNlOm5vbmU7LW8tYXBwZWFyYW5jZTpub25lO21hcmdpbjowO3BhZGRpbmc6MDtib3JkZXI6MDtib3Jk''@;'; put 'put ''ZXItcmFkaXVzOjA7Ym94LXNoYWRvdzpub25lO2JhY2tncm91bmQ6MCAwO2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wYWdpbmF0aW9uLWJ0bi1jb2xvcik7Y3Vyc29yOnBvaW50ZXJ9YnV0dG9uLnBhZ2luYXRpb24tbGlzdCBidXR0b257Y3Vyc29yOnBvaW50ZXJ9LmRhdGFncmlkLWNlbGwt''@;'; put 'put ''d2lkdGgtemVyb3tib3JkZXI6MCFpbXBvcnRhbnQ7cGFkZGluZzowIWltcG9ydGFudDt3aWR0aDowO2ZsZXg6MCAwIGF1dG8haW1wb3J0YW50O21pbi13aWR0aDowIWltcG9ydGFudDtkaXNwbGF5OmJsb2NrIWltcG9ydGFudDt2aXNpYmlsaXR5OmhpZGRlbiFpbXBvcnRhbnQ7cG9zaXRpb246''@;'; put 'put ''YWJzb2x1dGUhaW1wb3J0YW50O3RvcDowO2xlZnQ6MH0uZGF0YWdyaWQtb3V0ZXItd3JhcHBlcntkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246cm93O2ZsZXgtZ3JvdzoxO292ZXJmbG93OmF1dG99LmRhdGFncmlkLWlubmVyLXdyYXBwZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9u''@;'; put 'put ''OmNvbHVtbjtmbGV4LWdyb3c6MTtvdmVyZmxvdzphdXRvO21pbi13aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9LmRhdGFncmlkLWRldGFpbC1vcGVuPi5kYXRhZ3JpZC1vdXRlci13cmFwcGVyPi5kYXRhZ3JpZC1pbm5lci13cmFwcGVyIGRpdi5kYXRhZ3Jp''@;'; put 'put ''ZC10YWJsZXttYXgtd2lkdGg6MTAwJTtvdmVyZmxvdzpoaWRkZW59LmRhdGFncmlkLWRldGFpbC1vcGVuPi5kYXRhZ3JpZC1vdXRlci13cmFwcGVyPi5kYXRhZ3JpZC1pbm5lci13cmFwcGVyPi5jZGstdmlydHVhbC1zY3JvbGxhYmxlIGRpdi5kYXRhZ3JpZC10YWJsZXtvdmVyZmxvdzp1bnNl''@;'; put 'put ''dH0uZGF0YWdyaWQtZGV0YWlsLW9wZW4+LmRhdGFncmlkLW91dGVyLXdyYXBwZXI+LmRhdGFncmlkLWlubmVyLXdyYXBwZXIgY2xyLWRnLWNlbGx7d2lkdGg6MTAwJSFpbXBvcnRhbnR9LmRhdGFncmlkLWRldGFpbC1vcGVuPi5kYXRhZ3JpZC1vdXRlci13cmFwcGVyPi5kYXRhZ3JpZC1pbm5l''@;'; put 'put ''ci13cmFwcGVyIGNsci1kZy1jb2x1bW46Zmlyc3QtY2hpbGR7d2lkdGg6YXV0byFpbXBvcnRhbnR9LmRhdGFncmlkLWRldGFpbC1vcGVuIC5kYXRhZ3JpZHtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowO2JvcmRlci1yaWdodDpub25lfS5kYXRhZ3JpZC1kZXRhaWwtb3BlbiAuZGF0YWdyaWQt''@;'; put 'put ''aW5uZXItd3JhcHBlcnt3aWR0aDozNCV9LmRhdGFncmlkLWRldGFpbC1vcGVuIC5kYXRhZ3JpZC1wbGFjZWhvbGRlci1jb250YWluZXIsLmRhdGFncmlkLWRldGFpbC1vcGVuIC5kYXRhZ3JpZC1yb3d7Ym9yZGVyLXJpZ2h0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEw''@;'; put 'put ''MCkgc29saWQgdmFyKC0tY2xyLXRhYmxlLWJvcmRlci1jb2xvcil9LmRhdGFncmlkLWRldGFpbC1vcGVuIC5kYXRhZ3JpZC1mb290ZXJ7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MH0uZGF0YWdyaWQtZGV0YWlsLW9wZW4gLnBhZ2luYXRpb257d2lkdGg6MTAwJX0uZGF0YWdyaWQtZGV0''@;'; put 'put ''YWlsLW9wZW4gLnBhZ2luYXRpb24tZGVzY3JpcHRpb24tY29tcGFjdHt0ZXh0LWFsaWduOmxlZnQ7ZmxleDoxfS5kYXRhZ3JpZC1kZXRhaWwtb3BlbiAuZGF0YWdyaWQtZm9vdGVyIC5wYWdpbmF0aW9uLWxpc3R7bWFyZ2luLXJpZ2h0OjB9LmRhdGFncmlkLXJvdy1kZXRhaWwtb3Blbntwb3Np''@;'; put 'put ''dGlvbjpyZWxhdGl2ZX0uZGF0YWdyaWQtcm93LWRldGFpbC1vcGVuOmJlZm9yZXtjb250ZW50OiIiO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlcjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodC1jb2xv''@;'; put 'put ''cjp2YXIoLS1jbHItdGFibGUtYm9yZGVyLWNvbG9yKTt0b3A6Y2FsYygxMCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7cmlnaHQ6MH0uZGF0YWdyaWQtcm93LWRldGFpbC1vcGVuOmFmdGVye2NvbnRlbnQ6IiI7ZGlzcGxheTppbmxpbmUtYmxvY2s7cG9zaXRpb246YWJzb2x1dGU7''@;'; put 'put ''Ym9yZGVyOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1wb3BvdmVyLWJnLWNvbG9yKTt0b3A6Y2FsYygxMSooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7cmlnaHQ6Y2FsYygtMSp2''@;'; put 'put ''YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKX0uZGF0YWdyaWQtZGV0YWlsLXBhbmV7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpO2JvcmRlci13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXIt''@;'; put 'put ''Y29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWRldGFpbC1wYW5lLWJvcmRlci1jb2xvcik7Ym9yZGVyLWxlZnQ6bm9uZTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp2YXIo''@;'; put 'put ''LS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTtiYWNrZ3JvdW5kOnZhcigtLWNsci1kYXRhZ3JpZC1kZXRhaWwtcGFuZS1iZy1jb2xvcik7b3ZlcmZsb3c6aGlkZGVuO2Rpc3BsYXk6YmxvY2s7ZmxleC1ncm93OjI7d2lkdGg6NjYlfS5kYXRhZ3JpZC1kZXRhaWwtcGFuZS1j''@;'; put 'put ''b250ZW50e2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47b3ZlcmZsb3c6YXV0bztoZWlnaHQ6MTAwJTtwYWRkaW5nOnZhcigtLWNsci1kYXRhZ3JpZC1kZXRhaWwtcGFuZS1jb250ZW50LXBhZGRpbmcpfS5kYXRhZ3JpZC1kZXRhaWwtYm9keXtmbGV4OjEgMSBhdXRvO3BhZGRp''@;'; put 'put ''bmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KSAwO2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1kZXRhaWwtYm9keS10ZXh0LWNvbG9yKX0uZGF0YWdyaWQtZGV0YWlsLWhlYWRlcntmbGV4OjAgMCBhdXRvO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWN0aW9uLWZv''@;'; put 'put ''bnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9n''@;'; put 'put ''cmFwaHktc2VjdGlvbi1sZXR0ZXItc3BhY2luZyk7bWFyZ2luLXRvcDowO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpyb3d9LmRhdGFncmlkLWRldGFpbC1oZWFkZXIgLmRhdGFncmlkLWRldGFpbC1oZWFkZXItdGl0bGV7ZmxleDoxIDEgYXV0bztjb2xvcjp2YXIoLS1jbHItZGF0YWdy''@;'; put 'put ''aWQtZGV0YWlsLWhlYWRlci10aXRsZS1jb2xvcil9LmRhdGFncmlkLWRldGFpbC1oZWFkZXIgLmRhdGFncmlkLWRldGFpbC1wYW5lLWNsb3Nle2ZsZXg6MSAxIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6ZmxleC1lbmR9LmRhdGFncmlk''@;'; put 'put ''LWRldGFpbC1oZWFkZXIgLmRhdGFncmlkLWRldGFpbC1wYW5lLWNsb3NlIC5idG4uYnRuLWxpbmt7bWluLXdpZHRoOmF1dG87bWFyZ2luOjA7cGFkZGluZy1yaWdodDowfS5kYXRhZ3JpZC1kZXRhaWwtaGVhZGVyIC5kYXRhZ3JpZC1kZXRhaWwtcGFuZS1jbG9zZSAuYnRuLmJ0bi1saW5rIGNk''@;'; put 'put ''cy1pY29ue2hlaWdodDp2YXIoLS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtY2xvc2UtaWNvbi1zaXplKTt3aWR0aDp2YXIoLS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtY2xvc2UtaWNvbi1zaXplKTttaW4taGVpZ2h0OnZhcigtLWNsci1kYXRhZ3JpZC1kZXRhaWwtcGFuZS1jbG9zZS1p''@;'; put 'put ''Y29uLXNpemUpO21pbi13aWR0aDp2YXIoLS1jbHItZGF0YWdyaWQtZGV0YWlsLXBhbmUtY2xvc2UtaWNvbi1zaXplKTtjb2xvcjp2YXIoLS1jbHItbW9kYWwtY2xvc2UtY29sb3IpfS5kYXRhZ3JpZC1kZXRhaWwtY2FyZXR7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXJ9LmRh''@;'; put 'put ''dGFncmlkLWRldGFpbC1jYXJldC5kYXRhZ3JpZC1jZWxse3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKSAwfS5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQgLmRhdGFncmlkLWRldGFpbC1jYXJldC1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5v''@;'; put 'put ''bmU7LW1zLWFwcGVhcmFuY2U6bm9uZTstby1hcHBlYXJhbmNlOm5vbmU7bWFyZ2luOjA7cGFkZGluZzowO2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtib3gtc2hhZG93Om5vbmU7YmFja2dyb3VuZDowIDA7Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7''@;'; put 'put ''d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX1idXR0b24uZGF0YWdyaWQtZGV0YWlsLWNhcmV0IC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtYnV0dG9ue2N1cnNvcjpwb2ludGVyfS5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQgLmRhdGFncmlkLWRldGFpbC1jYXJldC1idXR0b246ZGlzYWJs''@;'; put 'put ''ZWQgY2RzLWljb24uZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWljb257LS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWRpc2FibGVkKX0uZGF0YWdyaWQtZGV0YWlsLWNhcmV0IC5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQtYnV0dG9uLmlzLW9wZW4gLmRhdGFn''@;'; put 'put ''cmlkLWRldGFpbC1jYXJldC1pY29ue2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWljb24tb3Blbi1iZy1jb2xvcik7Y29sb3I6dmFyKC0tY2xyLWRh''@;'; put 'put ''dGFncmlkLWRldGFpbC1jYXJldC1pY29uLW9wZW4taWNvbi1jb2xvcil9LmRhdGFncmlkLWRldGFpbC1jYXJldCAuZGF0YWdyaWQtZGV0YWlsLWNhcmV0LWljb257Y29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWljb24tY29sb3IpfS5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQgLnNwaW5uZXJ7bWFy''@;'; put 'put ''Z2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTQpfS5kYXRhZ3JpZC1kZXRhaWwtY2FyZXQuZGF0YWdyaWQtY29sdW1ue3BhZGRpbmc6dmFyKC0tY2xyLXRhYmxlLXRvcGNlbGxwYWRkaW5nKSB2YXIoLS1jbHItdGFibGUtY2VsbHBhZGRpbmcpIHZhcigtLWNsci10YWJsZS1ib3R0b21j''@;'; put 'put ''ZWxscGFkZGluZyl9LmRhdGFncmlkLWRldGFpbC1vdmVybGF5LmRhdGFncmlkLWRldGFpbC1vcGVuPi5kYXRhZ3JpZC1vdXRlci13cmFwcGVyPi5kYXRhZ3JpZC1pbm5lci13cmFwcGVye3dpZHRoOjA7bWluLXdpZHRoOnVuc2V0fS5kYXRhZ3JpZC1kZXRhaWwtb3ZlcmxheSAuZGF0YWdyaWQt''@;'; put 'put ''ZGV0YWlsLXBhbmV7Ym9yZGVyLWxlZnQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSBzb2xpZDtib3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWRldGFpbC1wYW5lLWJvcmRlci1jb2xvcik7Ym9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0''@;'; put 'put ''LWJvcmRlci1yYWRpdXMtMTAwKTt3aWR0aDoxMDAlfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6NTc2cHgpey5kYXRhZ3JpZC1kZXRhaWwtb3Blbj4uZGF0YWdyaWQtb3V0ZXItd3JhcHBlcj4uZGF0YWdyaWQtaW5uZXItd3JhcHBlcntkaXNwbGF5Om5vbmV9LmRhdGFncmlkLWRldGFp''@;'; put 'put ''bC1wYW5le2JvcmRlci1sZWZ0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQ7Ym9yZGVyLWNvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1kZXRhaWwtcGFuZS1ib3JkZXItY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3Jk''@;'; put 'put ''ZXItcmFkaXVzLTEwMCl9fS5jb2x1bW4tc3dpdGNoe2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTgpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXIt''@;'; put 'put ''YmctY29sb3IpO2JvcmRlci13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXItYm9yZGVyLWNvbG9yKTtib3gtc2hhZG93OnZhcigtLWNsci1kYXRhZ3Jp''@;'; put 'put ''ZC1wb3BvdmVycy1ib3gtc2hhZG93KTt3aWR0aDpjYWxjKDI1MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt6LWluZGV4OjEwNTB9LmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1oZWFkZXJ7ZGlzcGxheTpmbGV4O2p1c3Rp''@;'; put 'put ''ZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zdWJzZWN0aW9uLWZvbnQtc2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0t''@;'; put 'put ''Y2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1sZXR0ZXItc3BhY2luZyl9LmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1oZWFkZXIgaDEsLmNvbHVtbi1zd2l0Y2ggLnN3''@;'; put 'put ''aXRjaC1oZWFkZXIgaDIsLmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1oZWFkZXIgaDMsLmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1oZWFkZXIgaDQsLmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1oZWFkZXIgaDUsLmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1oZWFkZXIgaDZ7Y29sb3I6dmFyKC0tY2xyLXAx''@;'; put 'put ''LWNvbG9yKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc3Vic2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LXN1YnNlY3Rpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXN1YnNlY3Rpb24tbGV0dGVyLXNwYWNpbmcpO21hcmdpbjowfS5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGJ1dHRvbnttaW4td2lkdGg6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS04KTttYXJnaW46MDtwYWRkaW5nOjB9LmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1oZWFkZXIgYnV0dG9uIGNkcy1pY29ue2NvbG9yOnZhcigtLWNsci1kYXRhZ3JpZC1jb2x1bW4tc3dpdGNoLWhlYWRlci1mb250LWNvbG9yKX0uY29sdW1uLXN3aXRjaCAuc3dpdGNoLWhlYWRl''@;'; put 'put ''ciBidXR0b24gY2RzLWljb246aG92ZXJ7Y29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLWNvbHVtbi1zd2l0Y2gtaGVhZGVyLWZvbnQtaG92ZXItY29sb3IpfS5jb2x1bW4tc3dpdGNoIC5zd2l0Y2gtaGVhZGVyIGJ1dHRvbiBjZHMtaWNvbjphY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWRhdGFncmlk''@;'; put 'put ''LWNvbHVtbi1zd2l0Y2gtaGVhZGVyLWZvbnQtYWN0aXZlLWNvbG9yKX0uY29sdW1uLXN3aXRjaCAuc3dpdGNoLWNvbnRlbnR7bWF4LWhlaWdodDpjYWxjKDMwMCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7b3ZlcmZsb3cteTphdXRvO21pbi1oZWlnaHQ6Y2FsYyh2YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLXNwYWNlLTkpICsgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMTAwKSl9LmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1jb250ZW50IGxpe2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7cGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtMil9LmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1mb290ZXIgLmJ0bnttYXJnaW46MDtwYWRkaW5nOjB9LmNvbHVtbi1zd2l0Y2ggLnN3aXRjaC1mb290ZXIgLmFjdGlvbi1yaWdodHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfS5kYXRhZ3JpZC1maWx0ZXJ7bWFyZ2lu''@;'; put 'put ''LXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO2JhY2tncm91bmQ6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXItYmctY29sb3IpO2JvcmRlci13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApO2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItY29sb3I6''@;'; put 'put ''dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXItYm9yZGVyLWNvbG9yKTtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCk7Ym94LXNoYWRvdzp2YXIoLS1jbHItZGF0YWdyaWQtcG9wb3ZlcnMtYm94LXNoYWRvdyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJv''@;'; put 'put ''cmRlci1yYWRpdXMtMTAwKTtmb250LXdlaWdodDo0MDB9LmRhdGFncmlkLWZpbHRlciAuZGF0YWdyaWQtZmlsdGVyLWNsb3NlLXdyYXBwZXJ7dGV4dC1hbGlnbjpyaWdodH0uZGF0YWdyaWQtZmlsdGVyIC5kYXRhZ3JpZC1maWx0ZXItY2xvc2Utd3JhcHBlciAuY2xvc2V7ZmxvYXQ6bm9uZTtm''@;'; put 'put ''b250LXNpemU6dW5zZXR9LmRhdGFncmlkLWZpbHRlciAuZGF0YWdyaWQtZmlsdGVyLWFwcGx5e21hcmdpbi1ib3R0b206MH0uZGF0YWdyaWQtZmlsdGVyIC5kYXRhZ3JpZC1udW1lcmljLWZpbHRlci1mb3Jte2Rpc3BsYXk6ZmxleDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX0uZGF0''@;'; put 'put ''YWdyaWQtZmlsdGVyIC5kYXRhZ3JpZC1udW1lcmljLWZpbHRlci1mb3JtIGlucHV0LmRhdGFncmlkLW51bWVyaWMtZmlsdGVyLWlucHV0e3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTUpfS5kYXRhZ3JpZC1maWx0ZXIgLmNsci1mb3JtLWNvbnRyb2x7bWFyZ2luLXRvcDowfS5kYXRh''@;'; put 'put ''Z3JpZC1hY3Rpb24tb3ZlcmZsb3d7cG9zaXRpb246YWJzb2x1dGU7YmFja2dyb3VuZDp2YXIoLS1jbHItZGF0YWdyaWQtcG9wb3Zlci1iZy1jb2xvcik7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNCk7Ym9yZGVy''@;'; put 'put ''LXN0eWxlOnNvbGlkO2JvcmRlci13aWR0aDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci13aWR0aC0xMDApO2JvcmRlci1jb2xvcjp2YXIoLS1jbHItZGF0YWdyaWQtcG9wb3Zlci1ib3JkZXItY29sb3IpO2JveC1zaGFkb3c6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXJzLWJveC1z''@;'; put 'put ''aGFkb3cpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7Zm9udC13ZWlnaHQ6NDAwO3doaXRlLXNwYWNlOm5vd3JhcH0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93OmJlZm9yZXtjb250ZW50OiIiO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1''@;'; put 'put ''MCU7cmlnaHQ6MTAwJTtoZWlnaHQ6MDt3aWR0aDowO21hcmdpbi10b3A6Y2FsYygtMSp2YXIoLS1jbHItZGF0YWdyaWQtYWN0aW9uLWFycm93LXNpemUpKTtib3JkZXItdG9wOnZhcigtLWNsci1kYXRhZ3JpZC1hY3Rpb24tYXJyb3ctc2l6ZSkgc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLWJv''@;'; put 'put ''dHRvbTp2YXIoLS1jbHItZGF0YWdyaWQtYWN0aW9uLWFycm93LXNpemUpIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1yaWdodC13aWR0aDp2YXIoLS1jbHItZGF0YWdyaWQtYWN0aW9uLWFycm93LXNpemUpO2JvcmRlci1yaWdodC1zdHlsZTpzb2xpZDtib3JkZXItcmlnaHQtY29sb3I6dmFy''@;'; put 'put ''KC0tY2xyLWRhdGFncmlkLXBvcG92ZXItYm9yZGVyLWNvbG9yKX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93OmFmdGVye2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtyaWdodDoxMDAlO2hlaWdodDowO3dpZHRoOjA7bWFyZ2luLXRvcDpjYWxjKC0xKnZhcigtLWNsci1k''@;'; put 'put ''YXRhZ3JpZC1hY3Rpb24tYXJyb3ctc2l6ZSkgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKTtib3JkZXItdG9wOmNhbGModmFyKC0tY2xyLWRhdGFncmlkLWFjdGlvbi1hcnJvdy1zaXplKSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpIHNvbGlkIHRyYW5zcGFyZW50O2JvcmRlci1i''@;'; put 'put ''b3R0b206Y2FsYyh2YXIoLS1jbHItZGF0YWdyaWQtYWN0aW9uLWFycm93LXNpemUpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSkgc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXJpZ2h0LXdpZHRoOmNhbGModmFyKC0tY2xyLWRhdGFncmlkLWFjdGlvbi1hcnJvdy1zaXplKSAtIHZhcigt''@;'; put 'put ''LWNkcy1nbG9iYWwtc3BhY2UtMSkpO2JvcmRlci1yaWdodC1zdHlsZTpzb2xpZDtib3JkZXItcmlnaHQtY29sb3I6dmFyKC0tY2xyLWRhdGFncmlkLXBvcG92ZXItYmctY29sb3IpfS5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3cgLmFjdGlvbi1pdGVte2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxp''@;'; put 'put ''YXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1z''@;'; put 'put ''ZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpO2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWJnLWNvbG9yKTtib3JkZXI6MDtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmZsZXg7Z2FwOnZhcigtLWNkcy1n''@;'; put 'put ''bG9iYWwtc3BhY2UtMyk7YWxpZ24taXRlbXM6Y2VudGVyO2hlaWdodDphdXRvO21hcmdpbjowO3dpZHRoOjEwMCU7dGV4dC10cmFuc2Zvcm06bm9uZX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbS5hY3RpdmV7Y29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2Vs''@;'; put 'put ''ZWN0ZWQtY29sb3IpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWRyb3Bkb3duLWl0ZW0tc2VsZWN0ZWQtYmctY29sb3IpfS5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3cgLmFjdGlvbi1pdGVtOmhvdmVye2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWhvdmVyLWNvbG9yKTtiYWNr''@;'; put 'put ''Z3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWhvdmVyLWJnLWNvbG9yKTt0ZXh0LWRlY29yYXRpb246bm9uZX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTpob3Zlci5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRl''@;'; put 'put ''bS1zZWxlY3RlZC1ob3Zlci1iZy1jb2xvcil9LmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAuYWN0aW9uLWl0ZW06YWN0aXZle2NvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWFjdGl2ZS1jb2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1hY3RpdmUt''@;'; put 'put ''YmctY29sb3IpfS5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3cgLmFjdGlvbi1pdGVtOmFjdGl2ZS5hY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbHItZHJvcGRvd24taXRlbS1zZWxlY3RlZC1hY3RpdmUtYmctY29sb3IpfS5kYXRhZ3JpZC1hY3Rpb24tb3ZlcmZsb3cgLmFjdGlvbi1p''@;'; put 'put ''dGVtOmZvY3Vze3otaW5kZXg6aW5oZXJpdH0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbS5kaXNhYmxlZCwuZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTpkaXNhYmxlZHtwb2ludGVyLWV2ZW50czpub25lO2NvbG9yOnZhcigtLWNsci1kcm9wZG93''@;'; put 'put ''bi1pdGVtLWRpc2FibGVkLWNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1kcm9wZG93bi1pdGVtLWRpc2FibGVkLWJnLWNvbG9yKTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7dXNlci1zZWxlY3Q6bm9uZX0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbS5k''@;'; put 'put ''aXNhYmxlZDpob3ZlciwuZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbTpkaXNhYmxlZDpob3ZlcntiYWNrZ3JvdW5kOjAgMH0uZGF0YWdyaWQtYWN0aW9uLW92ZXJmbG93IC5hY3Rpb24taXRlbS5kaXNhYmxlZDphY3RpdmUsLmRhdGFncmlkLWFjdGlvbi1vdmVyZmxvdyAu''@;'; put 'put ''YWN0aW9uLWl0ZW06ZGlzYWJsZWQ6YWN0aXZle2JhY2tncm91bmQ6MCAwO2JveC1zaGFkb3c6bm9uZX0uZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZXtkaXNwbGF5OmJsb2NrfS5kYXRhZ3JpZC1ob3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZCwuZGF0''@;'; put 'put ''YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtZm9vdGVyLC5kYXRhZ3JpZC1ob3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZC1yb3ctbWFzdGVyLC5kYXRhZ3JpZC1ob3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZC1yb3ct''@;'; put 'put ''Y2xpY2thYmxle2Rpc3BsYXk6bm9uZX0uZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtY2FsY3VsYXRpb24tdGFibGV7ZGlzcGxheTp0YWJsZTt0YWJsZS1sYXlvdXQ6YXV0b30uZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0''@;'; put 'put ''YWdyaWQtY2FsY3VsYXRpb24tdGFibGUgLmRhdGFncmlkLWNhbGN1bGF0aW9uLWhlYWRlcntkaXNwbGF5OnRhYmxlLWhlYWRlci1ncm91cH0uZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtY2FsY3VsYXRpb24tdGFibGUgLmRhdGFncmlkLWNhbGN1bGF0''@;'; put 'put ''aW9uLWhlYWRlciAuZGF0YWdyaWQtY29sdW1ue2Rpc3BsYXk6dGFibGUtY2VsbDttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xNSl9LmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUgLmRhdGFncmlkLWNhbGN1bGF0aW9uLXRhYmxlIC5kYXRhZ3JpZC1jYWxj''@;'; put 'put ''dWxhdGlvbi1oZWFkZXIgLmRhdGFncmlkLWNvbHVtbntib3JkZXItY29sb3I6dmFyKC0tY2xyLXRhYmxlcm93LWJvcmRlcmNvbG9yKTtib3JkZXItd2lkdGg6dmFyKC0tY2xyLXRhYmxlLWJvcmRlcndpZHRoKTtib3JkZXItc3R5bGU6c29saWQ7cGFkZGluZzp2YXIoLS1jbHItdGFibGUtdG9w''@;'; put 'put ''Y2VsbHBhZGRpbmcpIHZhcigtLWNsci10YWJsZS1jZWxscGFkZGluZykgdmFyKC0tY2xyLXRhYmxlLWJvdHRvbWNlbGxwYWRkaW5nKTt2ZXJ0aWNhbC1hbGlnbjp0b3A7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2''@;'; put 'put ''YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1z''@;'; put 'put ''cGFjaW5nKTttYXJnaW4tdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWFyZ2luLWJvdHRvbTowfS5kYXRhZ3JpZC1ob3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZC1jYWxjdWxhdGlvbi10YWJsZSAuZGF0YWdyaWQtcm93e2Rpc3BsYXk6dGFibGUtcm93fS5kYXRh''@;'; put 'put ''Z3JpZC1ob3N0LmRhdGFncmlkLWNhbGN1bGF0ZS1tb2RlIC5kYXRhZ3JpZC1jYWxjdWxhdGlvbi10YWJsZSAuZGF0YWdyaWQtcm93IGNsci1leHBhbmRhYmxlLWFuaW1hdGlvbntkaXNwbGF5Om5vbmV9LmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUgLmRhdGFncmlkLWNh''@;'; put 'put ''bGN1bGF0aW9uLXRhYmxlIC5kYXRhZ3JpZC1yb3cgLmRhdGFncmlkLWNlbGx7ZGlzcGxheTp0YWJsZS1jZWxsO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTE1KTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0''@;'; put 'put ''OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktYm9keS1sZXR0ZXItc3BhY2luZyk7cGFkZGluZzp2YXIoLS1jbHIt''@;'; put 'put ''dGFibGUtdG9wY2VsbHBhZGRpbmcpIHZhcigtLWNsci10YWJsZS1jZWxscGFkZGluZykgdmFyKC0tY2xyLXRhYmxlLWJvdHRvbWNlbGxwYWRkaW5nKTt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUgLmRhdGFncmlkLWNvbHVtbi1zZXBh''@;'; put 'put ''cmF0b3IsLmRhdGFncmlkLWhvc3QuZGF0YWdyaWQtY2FsY3VsYXRlLW1vZGUgLmRhdGFncmlkLXBsYWNlaG9sZGVyLWNvbnRhaW5lciwuZGF0YWdyaWQtaG9zdC5kYXRhZ3JpZC1jYWxjdWxhdGUtbW9kZSAuZGF0YWdyaWQtZml4ZWQtY29sdW1ue2Rpc3BsYXk6bm9uZX0uZmFkZXtvcGFjaXR5''@;'; put 'put ''OjA7dHJhbnNpdGlvbjpvcGFjaXR5IC4ycyBlYXNlLWluLW91dDt3aWxsLWNoYW5nZTpvcGFjaXR5fS5mYWRlLmlue29wYWNpdHk6MX0uZmFkZURvd257b3BhY2l0eTowO3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0yNSUpO3RyYW5zaXRpb246b3BhY2l0eSAuMnMgZWFzZS1pbi1vdXQsdHJhbnNm''@;'; put 'put ''b3JtIC4ycyBlYXNlLWluLW91dDt3aWxsLWNoYW5nZTpvcGFjaXR5LHRyYW5zZm9ybX0uZmFkZURvd24uaW57b3BhY2l0eToxO3RyYW5zZm9ybTp0cmFuc2xhdGUoMCl9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2U6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05''@;'; put 'put ''KTstLWNsci13aXphcmQtbWFpbi1iZ2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3Qtb3ZlcmxheS1iYWNrZ3JvdW5kKTstLWNsci13aXphcmQtbWFpbi10ZXh0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItd2l6YXJkLXN0ZXBuYXYtYmdjb2xv''@;'; put 'put ''cjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQpOy0tY2xyLXdpemFyZC1zdGVwbmF2LXRleHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci13aXphcmQtc3RlcG5hdi10ZXh0LWFjdGl2ZTp2YXIoLS1jZHMtYWxpYXMtb2Jq''@;'; put 'put ''ZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHItd2l6YXJkLXN0ZXBuYXYtdGV4dC1ob3Zlcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWhvdmVyKTstLWNsci13aXphcmQtc3RlcG5hdi10ZXh0LS1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVj''@;'; put 'put ''dC1pbnRlcmFjdGlvbi1jb2xvci1zZWxlY3RlZCk7LS1jbHItd2l6YXJkLXN0ZXBuYXYtdGV4dC1kaXNhYmxlZDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1kaXNhYmxlZCk7LS1jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbS1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1u''@;'; put 'put ''ZXV0cmFsLXRpbnQpOy0tY2xyLXdpemFyZC1zdGVwbmF2LWJvcmRlci1zaXplOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7LS1jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbS1ib3JkZXItY29sb3ItLWFjdGl2ZTp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLXN1Y2Nlc3MpOy0tY2xyLXdpemFyZC1z''@;'; put 'put ''dGVwbmF2LXNlbGVjdGVkLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtaGlnaGxpZ2h0KTstLWNsci13aXphcmQtc3RlcG5hdi1hY3RpdmUtYmdjb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91''@;'; put 'put ''bmQtc2VsZWN0ZWQpOy0tY2xyLXdpemFyZC1zdGVwbmF2LXNlbGVjdGVkLWJnY29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LWFjdGl2ZS1iZ2NvbG9yKTstLWNsci13aXphcmQtc3RlcG5hdi1zZWxlY3RlZC1ob3Zlci1iZ2NvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJh''@;'; put 'put ''Y3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZC1ob3Zlcik7LS1jbHItd2l6YXJkLXN0ZXBuYXYtc2VsZWN0ZWQtYWN0aXZlLWJnY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2ZSk7LS1jbHItd2l6YXJkLXN0ZXBuYXYtbGlu''@;'; put 'put ''ay1lcnJvci1pY29uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyKTstLWNsci13aXphcmQtc3RlcG5hdi1saW5rLWNvbXBsZXRlLWljb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLXN0YXR1cy1zdWNjZXNzKTstLWNsci13aXphcmQtc3RlcG5hdi1ib3JkZXItY29sb3I6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYm9yZGVyLWNvbG9yKTstLWNsci13aXphcmQtc3RlcG5hdi1saW5rLWhvdmVyLWJnLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1ob3Zlcik7LS1jbHItd2l6YXJkLXN0ZXBuYXYtbGluay1h''@;'; put 'put ''Y3RpdmUtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWFjdGl2ZSk7LS1jbHItd2l6YXJkLXN0ZXBuYXYtbGluay1wYWRkaW5nOmNhbGModmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAtIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpOy0t''@;'; put 'put ''Y2xyLXdpemFyZC1zdGVwbmF2LWl0ZW0tZXJyb3ItYm9yZGVyLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtZGFuZ2VyKTstLWNsci13aXphcmQtdGl0bGUtdGV4dDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLXdpemFyZC1mb290ZXItaGVpZ2h0OmF1''@;'; put 'put ''dG87LS1jbHItd2l6YXJkLWhlYWRlci1hY3Rpb24tY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvcik7LS1jbHItd2l6YXJkLWhlYWRlci1hY3Rpb24tY29sb3ItLWhvdmVyZWQ6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1ob3Zl''@;'; put 'put ''cik7LS1jbHItd2l6YXJkLWJveC1zaGFkb3c6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1zaGFkb3ctMzAwKTstLWNsci13aXphcmQtYm9yZGVyLXJhZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNsci13aXphcmQtY29udGVudC1iYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpfS5jbHItd2l6YXJkIC5tb2RhbC1kaWFsb2d7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7Ym94LXNoYWRvdzp2YXIoLS1jbHItd2l6YXJkLWJveC1zaGFk''@;'; put 'put ''b3cpO2hlaWdodDo1MCU7bWF4LWhlaWdodDoxMDAlfS5jbHItd2l6YXJkIC5tb2RhbC1jb250ZW50e2JvcmRlci1yYWRpdXM6MCB2YXIoLS1jbHItd2l6YXJkLWJvcmRlci1yYWRpdXMpIHZhcigtLWNsci13aXphcmQtYm9yZGVyLXJhZGl1cykgMDtib3gtc2hhZG93Om5vbmU7cGFkZGluZzp2''@;'; put 'put ''YXIoLS1jbHItd2l6YXJkLWRlZmF1bHQtc3BhY2UpO2ZsZXg6MiAyIGF1dG87d2lkdGg6NjYlO2hlaWdodDppbml0aWFsO292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6ZmxleC1zdGFydDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOnZhcigtLWNsci13aXphcmQt''@;'; put 'put ''ZGVmYXVsdC1zcGFjZSl9LmNsci13aXphcmQgLm1vZGFsLWhlYWRlci0tYWNjZXNzaWJsZXtmbGV4OjAgMCBhdXRvO3dpZHRoOjEwMCU7cGFkZGluZzowfS5jbHItd2l6YXJkIC5tb2RhbC10aXRsZXtjb2xvcjp2YXIoLS1jbHItd2l6YXJkLXRpdGxlLXRleHQpO2Rpc3BsYXk6ZmxleDtmbGV4''@;'; put 'put ''LWRpcmVjdGlvbjpyb3c7d2lkdGg6MTAwJX0uY2xyLXdpemFyZCAubW9kYWwtYm9keXtmbGV4OjEgMSBhdXRvO2NvbG9yOnZhcigtLWNsci13aXphcmQtbWFpbi10ZXh0LWNvbG9yKTt3aWR0aDoxMDAlfS5jbHItd2l6YXJkIC5tb2RhbC1mb290ZXJ7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAl''@;'; put 'put ''O2ZsZXg6MCAwIHZhcigtLWNsci13aXphcmQtZm9vdGVyLWhlaWdodCk7aGVpZ2h0OnZhcigtLWNsci13aXphcmQtZm9vdGVyLWhlaWdodCk7bWluLWhlaWdodDp2YXIoLS1jbHItd2l6YXJkLWZvb3Rlci1oZWlnaHQpO21heC1oZWlnaHQ6dmFyKC0tY2xyLXdpemFyZC1mb290ZXItaGVpZ2h0''@;'; put 'put ''KTtwYWRkaW5nOjB9LmNsci13aXphcmQgLmNsci13aXphcmQtYnRue21hcmdpbjowO21heC13aWR0aDoxMDAlO2Rpc3BsYXk6YmxvY2t9LmNsci13aXphcmQgLm1vZGFsLXRpdGxlLXRleHR7ZGlzcGxheTppbmxpbmUtYmxvY2s7ZmxleDowIDEgYXV0bzt3aWR0aDoxMDAlO291dGxpbmU6MH0u''@;'; put 'put ''Y2xyLXdpemFyZCAubW9kYWwtdGl0bGUtd3JhcHBlcnt3aWR0aDoxMDAlfS5jbHItd2l6YXJkIC5tb2RhbC1oZWFkZXItYWN0aW9ucy13cmFwcGVye2ZsZXg6MSAwIGF1dG87aGVpZ2h0OnZhcigtLWNsci13aXphcmQtZGVmYXVsdC1zcGFjZSk7cGFkZGluZy1sZWZ0OnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtNik7cGFkZGluZy1yaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWhlYWRlci1hY3Rpb24td3JhcHBlcntkaXNwbGF5OmlubGluZS1mbGV4fS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWhlYWRlci1hY3Rpb257aGVpZ2h0OnZh''@;'; put 'put ''cigtLWNsci13aXphcmQtZGVmYXVsdC1zcGFjZSk7d2lkdGg6dmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKTtib3JkZXI6MDtwYWRkaW5nOjA7bWFyZ2luOjA7bWluLXdpZHRoOnZhcigtLWNsci13aXphcmQtZGVmYXVsdC1zcGFjZSk7bGluZS1oZWlnaHQ6dmFyKC0tY2xyLXdpemFy''@;'; put 'put ''ZC1kZWZhdWx0LXNwYWNlKTtmb250LXNpemU6dmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKTtjb2xvcjp2YXIoLS1jbHItd2l6YXJkLWhlYWRlci1hY3Rpb24tY29sb3IpO3RyYW5zaXRpb246Y29sb3IgbGluZWFyIC4yc30uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1oZWFkZXItYWN0''@;'; put 'put ''aW9uIGF7Y29sb3I6dmFyKC0tY2xyLXdpemFyZC1oZWFkZXItYWN0aW9uLWNvbG9yKX0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1oZWFkZXItYWN0aW9uOmhvdmVyLC5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWhlYWRlci1hY3Rpb246YWN0aXZlLC5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWhl''@;'; put 'put ''YWRlci1hY3Rpb246Zm9jdXN7Y29sb3I6dmFyKC0tY2xyLXdpemFyZC1oZWFkZXItYWN0aW9uLWNvbG9yLS1ob3ZlcmVkKX0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1oZWFkZXItYWN0aW9uIGNkcy1pY29uLC5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWhlYWRlci1hY3Rpb24gY2xyLWljb257''@;'; put 'put ''aGVpZ2h0OnZhcigtLWNsci13aXphcmQtZGVmYXVsdC1zcGFjZSk7d2lkdGg6dmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKX0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LXdyYXBwZXJ7ZmxleDoxIDEgYXV0bztoZWlnaHQ6MTAwJTt3aWR0aDozNCU7bWF4LXdpZHRoOjM0''@;'; put 'put ''JTtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO29yZGVyOi0xO292ZXJmbG93OmhpZGRlbjtvdmVyZmxvdy15OmF1dG87Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1nbG9iYWwtYm9yZGVyd2lkdGgpIHNvbGlkIHZhcigtLWNsci13aXphcmQtc3RlcG5hdi1ib3JkZXItY29sb3Ip''@;'; put 'put ''O2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LWJnY29sb3IpO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXdpemFyZC1ib3JkZXItcmFkaXVzKSAwIDAgdmFyKC0tY2xyLXdpemFyZC1ib3JkZXItcmFkaXVzKX0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2''@;'; put 'put ''e3BhZGRpbmc6MCAwIHZhcigtLWNsci13aXphcmQtZGVmYXVsdC1zcGFjZSkgdmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKTtkaXNwbGF5OmJsb2NrO2NvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi10ZXh0KTt3aWR0aDoxMDAlO2ZsZXg6MSAxIGF1dG99LmNsci13aXphcmQg''@;'; put 'put ''LmNsci13aXphcmQtc3RlcG5hdi1saXN0e2Rpc3BsYXk6YmxvY2s7Ym94LXNoYWRvdzpub25lO2NvdW50ZXItcmVzZXQ6YTt3aGl0ZS1zcGFjZTpub3dyYXA7aGVpZ2h0OmF1dG87bGlzdC1zdHlsZS10eXBlOm5vbmU7bWFyZ2luOjA7d2lkdGg6MTAwJX0uY2xyLXdpemFyZCAuY2xyLXdpemFy''@;'; put 'put ''ZC1zdGVwbmF2LWl0ZW17ZGlzcGxheTpibG9jaztib3JkZXItbGVmdDp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtYm9yZGVyLXNpemUpIHNvbGlkIHZhcigtLWNsci13aXphcmQtc3RlcG5hdi1pdGVtLWJvcmRlci1jb2xvcik7bWFyZ2luLWJvdHRvbTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTEpO2NvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi10ZXh0KTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi1iZ2NvbG9yKX0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWl0ZW0gYnV0dG9uLmNsci13aXphcmQtc3RlcG5hdi1saW5re2NvbG9y''@;'; put 'put ''OmluaGVyaXQ7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0fS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbS5kaXNhYmxlZHtjb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtdGV4dC1kaXNhYmxlZCl9LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1pdGVtLmFj''@;'; put 'put ''dGl2ZXtjb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtdGV4dC0tYWN0aXZlKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi1zZWxlY3RlZC1iZ2NvbG9yKTtib3JkZXItbGVmdC1jb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtc2VsZWN0ZWQtYm9y''@;'; put 'put ''ZGVyLWNvbG9yKX0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWl0ZW0uYWN0aXZlOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LXNlbGVjdGVkLWhvdmVyLWJnY29sb3IpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbS5h''@;'; put 'put ''Y3RpdmU6YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LXNlbGVjdGVkLWFjdGl2ZS1iZ2NvbG9yKX0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWl0ZW06bm90KC5kaXNhYmxlZCk6bm90KC5hY3RpdmUpOmhvdmVye2NvbG9yOnZhcigtLWNs''@;'; put 'put ''ci13aXphcmQtc3RlcG5hdi10ZXh0LWhvdmVyKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi1saW5rLWhvdmVyLWJnLWNvbG9yKX0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWl0ZW06bm90KC5kaXNhYmxlZCk6bm90KC5hY3RpdmUpOmFjdGl2ZXtj''@;'; put 'put ''b2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtdGV4dC1hY3RpdmUpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LWxpbmstYWN0aXZlLWJnLWNvbG9yKX0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWl0ZW0gLmNsci13aXphcmQtc3RlcG5hdi1s''@;'; put 'put ''aW5rLXRpdGxle3dvcmQtYnJlYWs6YnJlYWstd29yZDt3aGl0ZS1zcGFjZTpub3JtYWx9LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1pdGVtLmNvbXBsZXRle2JvcmRlci1jb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbS1ib3JkZXItY29sb3ItLWFjdGl2ZSk7dHJh''@;'; put 'put ''bnNpdGlvbjpib3JkZXItY29sb3IgLjJzIGVhc2UtaW59LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1pdGVtLmNvbXBsZXRlIC5jbHItd2l6YXJkLXN0ZXBuYXYtbGluay1pY29uIGNkcy1pY29uey0tY29sb3I6dmFyKC0tY2xyLXdpemFyZC1zdGVwbmF2LWxpbmstY29tcGxldGUt''@;'; put 'put ''aWNvbi1jb2xvcil9LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1pdGVtLmVycm9ye2JvcmRlci1jb2xvcjp2YXIoLS1jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbS1lcnJvci1ib3JkZXItY29sb3IpO3RyYW5zaXRpb246Ym9yZGVyLWNvbG9yIC4ycyBlYXNlLWlufS5jbHItd2l6YXJk''@;'; put 'put ''IC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbS5lcnJvciAuY2xyLXdpemFyZC1zdGVwbmF2LWxpbmstaWNvbiBjZHMtaWNvbnstLWNvbG9yOnZhcigtLWNsci13aXphcmQtc3RlcG5hdi1saW5rLWVycm9yLWljb24tY29sb3IpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtaXRlbS5u''@;'; put 'put ''by1jbGljayBidXR0b257cG9pbnRlci1ldmVudHM6bm9uZX0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1zdGVwbmF2LWxpbmt7d2lkdGg6MTAwJTtkaXNwbGF5OmZsZXg7cGxhY2UtY29udGVudDpub3JtYWw7Y29sb3I6aW5oZXJpdDthbGlnbi1pdGVtczpjZW50ZXI7dGV4dC1hbGlnbjpsZWZ0''@;'; put 'put ''O3RleHQtdHJhbnNmb3JtOm5vbmU7bWFyZ2luOjA7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpO2hlaWdodDphdXRvO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMik7bWF4LXdpZHRoOmluaGVyaXQ7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3Jh''@;'; put 'put ''cGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1tZWRpdW0pO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtbGluayAuY2xyLXdpemFyZC1zdGVwbmF2LWxpbmstaWNvbntkaXNwbGF5OmZsZXh9LmNsci13aXphcmQgLmNsci13aXphcmQtc3RlcG5hdi1saW5rIC5jbHItd2l6YXJkLXN0''@;'; put 'put ''ZXBuYXYtbGluay1pY29uLC5jbHItd2l6YXJkIC5jbHItd2l6YXJkLXN0ZXBuYXYtbGluayAuY2xyLXdpemFyZC1zdGVwbmF2LWxpbmstcGFnZS1udW1iZXJ7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC10aXRsZXttYXJnaW4tdG9wOjA7''@;'; put 'put ''ZmxleDowIDAgYXV0bztjb2xvcjp2YXIoLS1jbHItd2l6YXJkLXRpdGxlLXRleHQpO3BhZGRpbmc6dmFyKC0tY2xyLXdpemFyZC1kZWZhdWx0LXNwYWNlKTtmb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2VjdGlvbi1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNk''@;'; put 'put ''cy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY3Rpb24tbGV0dGVyLXNwYWNpbmcp''@;'; put 'put ''fS5jbHItd2l6YXJkIC5tb2RhbC1jb250ZW50LXdyYXBwZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4OjEgMSAxMDAlO2hlaWdodDoxMDAlO3dpZHRoOjEwMCU7bWF4LWhlaWdodDoxMDAlfS5jbHItd2l6YXJkIC5tb2RhbC1jb250ZW50LXdyYXBwZXIgLm1vZGFsLW5h''@;'; put 'put ''dntoZWlnaHQ6YXV0b30uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1mb290ZXItYnV0dG9uc3t0ZXh0LWFsaWduOnJpZ2h0O21hcmdpbjowfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWZvb3Rlci1idXR0b25zLXdyYXBwZXJ7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOnJvdztmbGV4LXdy''@;'; put 'put ''YXA6bm93cmFwO2p1c3RpZnktY29udGVudDpmbGV4LWVuZDtnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KX0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1idG4td3JhcHBlcntmbGV4OjAgMSBhdXRvfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWJ0bi13cmFwcGVyW2FyaWEtaGlkZGVuPXRy''@;'; put 'put ''dWVde2Rpc3BsYXk6bm9uZX0uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1idG4uYnRuLWxpbmt7cGFkZGluZzowfS5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWNvbnRlbnR7ZGlzcGxheTpibG9ja30uY2xyLXdpemFyZCAuY2xyLXdpemFyZC1wYWdlOm5vdChbYXJpYS1oaWRkZW49dHJ1ZV0pe2Rp''@;'; put 'put ''c3BsYXk6YmxvY2t9LmNsci13aXphcmQgLm1vZGFsLWRpYWxvZ3toZWlnaHQ6NzV2aH0uY2xyLXdpemFyZCAubW9kYWwtYm9keS13cmFwcGVye21heC1oZWlnaHQ6MTAwJTtkaXNwbGF5OmZsZXg7ZmxleC1ncm93OjE7d2lkdGg6MTAwJX0uY2xyLXdpemFyZC53aXphcmQtbWQgLm1vZGFsLWRp''@;'; put 'put ''YWxvZ3ttaW4taGVpZ2h0OmNhbGMoNDIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttYXgtaGVpZ2h0OmNhbGMoNTA0KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0uY2xyLXdpemFyZC53aXphcmQtbWQgLm1vZGFsLWNvbnRlbnQsLmNsci13aXphcmQud2l6YXJkLW1k''@;'; put 'put ''IC5jbHItd2l6YXJkLXN0ZXBuYXYtd3JhcHBlcnttYXgtaGVpZ2h0OmNhbGMoNTA0KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0uY2xyLXdpemFyZC53aXphcmQtbWQgLmNsci13aXphcmQtc3RlcG5hdi13cmFwcGVye21pbi13aWR0aDpjYWxjKDIxNiooMXJlbS92YXIoLS1jZHMt''@;'; put 'put ''Z2xvYmFsLWJhc2UpKSk7bWF4LXdpZHRoOmNhbGMoMjQwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0uY2xyLXdpemFyZC53aXphcmQtbGcgLm1vZGFsLWRpYWxvZ3ttaW4taGVpZ2h0OmNhbGMoNDIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTttYXgtaGVpZ2h0OmNh''@;'; put 'put ''bGMoNzIwKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0uY2xyLXdpemFyZC53aXphcmQtbGcgLm1vZGFsLWNvbnRlbnQsLmNsci13aXphcmQud2l6YXJkLWxnIC5jbHItd2l6YXJkLXN0ZXBuYXYtd3JhcHBlcnttYXgtaGVpZ2h0OmNhbGMoNzIwKigxcmVtL3ZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtYmFzZSkpKX0uY2xyLXdpemFyZC53aXphcmQtbGcgLm5hdi1wYW5lbCwuY2xyLXdpemFyZC53aXphcmQtbGcgLmNsci13aXphcmQtc3RlcG5hdi13cmFwcGVye21pbi13aWR0aDpjYWxjKDI0MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWF4LXdpZHRoOmNhbGMoMjg4Kigx''@;'; put 'put ''cmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX0uY2xyLXdpemFyZC53aXphcmQteGwgLm1vZGFsLWRpYWxvZ3toZWlnaHQ6NzV2aDttYXgtaGVpZ2h0Om5vbmV9LmNsci13aXphcmQud2l6YXJkLXhsIC5uYXYtcGFuZWwsLmNsci13aXphcmQud2l6YXJkLXhsIC5jbHItd2l6YXJkLXN0ZXBu''@;'; put 'put ''YXYtd3JhcHBlcnttaW4td2lkdGg6Y2FsYygyNDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21heC13aWR0aDpjYWxjKDMyMCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9LmNsci13aXphcmQgLnNwaW5uZXI6bm90KC5zcGlubmVyLWlubGluZSk6bm90KC5jbHItdHJl''@;'; put 'put ''ZW5vZGUtc3Bpbm5lcil7bGVmdDpjYWxjKDUwJSArIGNhbGMoMTE1KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKSk7cG9zaXRpb246YWJzb2x1dGU7dG9wOjQwJX0uY2xyLXdpemFyZC1wYWdlPjpmaXJzdC1jaGlsZHttYXJnaW4tdG9wOjB9LmNsci13aXphcmQtcGFnZT46Zmlyc3Qt''@;'; put 'put ''Y2hpbGQ+OmZpcnN0LWNoaWxke21hcmdpbi10b3A6MH0uY2xyLXdpemFyZC1wYWdlPmZvcm06Zmlyc3QtY2hpbGR7cGFkZGluZy10b3A6MH0uY2xyLXdpemFyZC1wYWdlPmZvcm06Zmlyc3QtY2hpbGQ+LmZvcm0tYmxvY2s6Zmlyc3QtY2hpbGR7bWFyZ2luLXRvcDowfS5jbHItd2l6YXJkLS1p''@;'; put 'put ''bmxpbmV7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlfS5jbHItd2l6YXJkLS1pbmxpbmU+Y2xyLW1vZGFsPi5tb2RhbDpmb2N1c3tvdXRsaW5lLXN0eWxlOm5vbmU7b3V0bGluZS1jb2xvcjp0cmFuc3BhcmVudH0uY2xyLXdpemFyZC0taW5saW5lIGNsci1tb2RhbHtoZWlnaHQ6MTAwJTt3aWR0''@;'; put 'put ''aDoxMDAlO2Rpc3BsYXk6YmxvY2t9LmNsci13aXphcmQtLWlubGluZSAubW9kYWx7cGFkZGluZzowO3Bvc2l0aW9uOnN0YXRpYztoZWlnaHQ6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNsci13aXphcmQtLWlubGluZSAubW9kYWwgLmNvbnRlbnQtY29udGFpbmVye2hlaWdodDoxMDAlfS5jbHIt''@;'; put 'put ''d2l6YXJkLS1pbmxpbmUgLm1vZGFsIC5jb250ZW50LWNvbnRhaW5lciAubmF2LXBhbmVse2hlaWdodDo5OSU7d2lkdGg6OTklfS5jbHItd2l6YXJkLS1pbmxpbmUgLm1vZGFsIC5tb2RhbC1jb250ZW50e2JveC1zaGFkb3c6bm9uZX0uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbCAubW9kYWwt''@;'; put 'put ''ZGlhbG9ne21pbi1oZWlnaHQ6MTAwJTtoZWlnaHQ6MTAwJTt3aWR0aDoxMDAlO3otaW5kZXg6YXV0b30uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbC1ib2R5LXdyYXBwZXJ7aGVpZ2h0OjEwMCV9LmNsci13aXphcmQtLWlubGluZSAubW9kYWwtaGVhZGVyIC5jbG9zZXtkaXNwbGF5Om5vbmV9''@;'; put 'put ''LmNsci13aXphcmQtLWlubGluZSAubmF2Lm5hdkxpc3R7cGFkZGluZy10b3A6MH0uY2xyLXdpemFyZC0taW5saW5lIC5tb2RhbC1kaWFsb2cgLm1vZGFsLWNvbnRlbnQgLm1vZGFsLWJvZHkgLmNvbnRlbnQtYXJlYXtvdmVyZmxvdy15OmF1dG99LmNsci13aXphcmQtLWlubGluZSAubW9kYWwt''@;'; put 'put ''YmFja2Ryb3B7aGVpZ2h0OjA7d2lkdGg6MDtkaXNwbGF5Om5vbmV9LmNsci13aXphcmQtLWlubGluZSAubW9kYWwtY29udGVudC13cmFwcGVye2FsaWduLWl0ZW1zOnN0cmV0Y2g7aGVpZ2h0OjEwMCV9LmNsci13aXphcmQtLWlubGluZSAuY2xyLXdpemFyZC1zdGVwbmF2LXdyYXBwZXIsLmNs''@;'; put 'put ''ci13aXphcmQtLWlubGluZS5jbHItd2l6YXJkIC5tb2RhbC1jb250ZW50e21pbi1oZWlnaHQ6MTAwJTtoZWlnaHQ6YXV0bzttYXgtaGVpZ2h0OjEwMCV9LmNsci13aXphcmQtLWlubGluZSAuY2xyLXdpemFyZC1zdGVwbmF2LXdyYXBwZXIgLmNsci13aXphcmQtc3RlcG5hdiwuY2xyLXdpemFy''@;'; put 'put ''ZC0taW5saW5lLmNsci13aXphcmQgLm1vZGFsLWNvbnRlbnQgLmNsci13aXphcmQtc3RlcG5hdntoZWlnaHQ6MTAwJX0uY2xyLXdpemFyZC0tbm8tc2hhZG93IC5tb2RhbC1jb250ZW50LXdyYXBwZXIsLmNsci13aXphcmQtLW5vLXNoYWRvdyAubW9kYWwtZGlhbG9ne2JveC1zaGFkb3c6bm9u''@;'; put 'put ''ZX0uY2xyLXdpemFyZC0tbm8tdGl0bGUgLmNsci13aXphcmQtdGl0bGV7ZGlzcGxheTpub25lfS5jbHItd2l6YXJkLS1uby10aXRsZSAuY2xyLXdpemFyZC1zdGVwbmF2e3BhZGRpbmctdG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9QG1lZGlhIHNjcmVlbnsuY2xyLXdpemFyZC1wYWdl''@;'; put 'put ''W2FyaWEtaGlkZGVuPXRydWVde2Rpc3BsYXk6bm9uZX19QHN1cHBvcnRzICgtbXMtaW1lLWFsaWduOmF1dG8pey5jbHItd2l6YXJkIC5jbHItd2l6YXJkLWhlYWRlci1hY3Rpb257bWFyZ2luLXRvcDpjYWxjKC0zKigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX19OnJvb3QgW2Nkcy10''@;'; put 'put ''aGVtZV17LS1jbHItc2lnbnBvc3QtY29udGVudC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xyLXNpZ25wb3N0LWNvbnRlbnQtYmctY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZCk7LS1jbHItc2lnbnBvc3Qt''@;'; put 'put ''Y29udGVudC1ib3JkZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1ib3JkZXItY29sb3IpOy0tY2xyLXNpZ25wb3N0LWFjdGlvbi1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yKTstLWNsci1zaWducG9zdC1hY3Rpb24taG92''@;'; put 'put ''ZXItY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1jb2xvci1ob3Zlcik7LS1jbHItc2lnbnBvc3QtYWN0aW9uLWFjdGl2ZS1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHItc2lnbnBvc3QtYm9yZGVyLXJh''@;'; put 'put ''ZGl1czp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1yYWRpdXMtMTAwKTstLWNsci1zaWducG9zdC1wb2ludGVyLXNpemU6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KTstLWNsci1zaWducG9zdC1wb2ludGVyLWJvcmRlcjp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1zaXplKSBz''@;'; put 'put ''b2xpZCB2YXIoLS1jbHItc2lnbnBvc3QtY29udGVudC1ib3JkZXItY29sb3IpOy0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcjp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1zaXplKSBzb2xpZCB0cmFuc3BhcmVudDstLWNsci1zaWducG9zdC1wb2ludGVyLXBzZXVk''@;'; put 'put ''by1ib3JkZXI6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItc2l6ZSkgc29saWQgdmFyKC0tY2xyLXNpZ25wb3N0LWNvbnRlbnQtYmctY29sb3IpOy0tY2xyLXNpZ25wb3N0LXBvaW50ZXItcHN1ZWRvLWJvcmRlcjp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1wc2V1ZG8tYm9yZGVyKTst''@;'; put 'put ''LWNsci1zaWducG9zdC1ib3JkZXItc2l6ZTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1zaXplKX0uc2lnbnBvc3R7ZGlzcGxheTppbmxpbmUtYmxvY2t9LnNpZ25wb3N0OmhvdmVye2N1cnNvcjpwb2ludGVyfS5zaWducG9zdCAuc2lnbnBvc3QtYWN0aW9uOm5vdCguY2xvc2Upe21hcmdp''@;'; put 'put ''bjowO3BhZGRpbmc6MDtib3JkZXItd2lkdGg6MDtjb2xvcjp2YXIoLS1jbHItc2lnbnBvc3QtYWN0aW9uLWNvbG9yKX0uc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbjpub3QoLmNsb3NlKSBjZHMtaWNvbiwuc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbjpub3QoLmNsb3NlKSBjbHItaWNvbnto''@;'; put 'put ''ZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO2NvbG9yOnZhcigtLWNsci1zaWducG9zdC1hY3Rpb24tY29sb3IpfS5zaWducG9zdCAuc2lnbnBvc3QtYWN0aW9uOm5vdCguY2xvc2UpIGNkcy1pY29uOmhvdmVyLC5zaWducG9z''@;'; put 'put ''dCAuc2lnbnBvc3QtYWN0aW9uOm5vdCguY2xvc2UpIGNsci1pY29uOmhvdmVyLC5zaWducG9zdCAuc2lnbnBvc3QtYWN0aW9uOm5vdCguY2xvc2UpOmhvdmVye2NvbG9yOnZhcigtLWNsci1zaWducG9zdC1hY3Rpb24taG92ZXItY29sb3IpfS5zaWducG9zdCAuc2lnbnBvc3QtYWN0aW9uOm5v''@;'; put 'put ''dCguY2xvc2UpLmFjdGl2ZSBjZHMtaWNvbiwuc2lnbnBvc3QgLnNpZ25wb3N0LWFjdGlvbjpub3QoLmNsb3NlKS5hY3RpdmUgY2xyLWljb24sLnNpZ25wb3N0IC5zaWducG9zdC1hY3Rpb246bm90KC5jbG9zZSkuYWN0aXZle2NvbG9yOnZhcigtLWNsci1zaWducG9zdC1hY3Rpb24tYWN0aXZl''@;'; put 'put ''LWNvbG9yKX0uc2lnbnBvc3QgLnNpZ25wb3N0LWNvbnRlbnQtaGVhZGVyIGJ1dHRvbntsaW5lLWhlaWdodDowO2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcp''@;'; put 'put ''O21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5zaWducG9zdCAuc2lnbnBvc3QtY29udGVudC1oZWFkZXIgYnV0dG9uIGNkcy1pY29uLC5zaWducG9zdCAuc2lnbnBvc3QtY29udGVudC1oZWFkZXIgYnV0dG9uIGNsci1pY29ue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO21pbi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpfS5zaWducG9zdC10cmlnZ2Vye21hcmdpbjowO2Rpc3BsYXk6aW5saW5lLWZsZXh9LnNpZ25w''@;'; put 'put ''b3N0LWNvbnRlbnR7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDttaW4td2lkdGg6Y2FsYygyMTYqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpO21heC13aWR0aDpjYWxjKDM2MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWluLWhlaWdodDp2YXIoLS1jZHMtZ2xv''@;'; put 'put ''YmFsLXNwYWNlLTEyKTttYXgtaGVpZ2h0OmNhbGMoNTA0KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtkaXNwbGF5OmlubGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt6LWluZGV4OjEwNTB9LnNpZ25wb3N0LWNvbnRlbnQ6aG92ZXJ7Y3Vyc29yOmRlZmF1bHR9LnNpZ25wb3N0''@;'; put 'put ''LWNvbnRlbnQgLnBvcG92ZXItcG9pbnRlcntoZWlnaHQ6MDt3aWR0aDowO3Bvc2l0aW9uOmFic29sdXRlfS5zaWducG9zdC1jb250ZW50IC5wb3BvdmVyLXBvaW50ZXI6YmVmb3Jle2NvbnRlbnQ6IiI7aGVpZ2h0OjA7d2lkdGg6MDtwb3NpdGlvbjphYnNvbHV0ZX0uc2lnbnBvc3QtY29udGVu''@;'; put 'put ''dC50b3AtbGVmdCAucG9wb3Zlci1wb2ludGVyLC5zaWducG9zdC1jb250ZW50LnRvcC1taWRkbGUgLnBvcG92ZXItcG9pbnRlciwuc2lnbnBvc3QtY29udGVudC50b3AtcmlnaHQgLnBvcG92ZXItcG9pbnRlcntib3JkZXItdG9wOnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWJvcmRlcik7''@;'; put 'put ''Ym90dG9tOmNhbGMoLTEqdmFyKC0tY2xyLXNpZ25wb3N0LWJvcmRlci1zaXplKSl9LnNpZ25wb3N0LWNvbnRlbnQudG9wLWxlZnQgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNvbnRlbnQudG9wLW1pZGRsZSAucG9wb3Zlci1wb2ludGVyOmJlZm9yZSwuc2lnbnBvc3QtY29u''@;'; put 'put ''dGVudC50b3AtcmlnaHQgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmV7Ym9yZGVyLXRvcDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1wc3VlZG8tYm9yZGVyKTtib3R0b206dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKX0uc2lnbnBvc3QtY29udGVudC50b3AtbGVmdCAuc2lnbnBvc3Qtd3Jh''@;'; put 'put ''cHtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowfS5zaWducG9zdC1jb250ZW50LnRvcC1sZWZ0IC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLWxlZnQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7cmlnaHQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTEpKX0uc2lnbnBvc3QtY29udGVudC50b3AtbGVmdCAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3JkZXItbGVmdDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTtyaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpfS5zaWducG9zdC1jb250ZW50''@;'; put 'put ''LnRvcC1taWRkbGUgLnBvcG92ZXItcG9pbnRlcntib3JkZXItcmlnaHQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7bGVmdDo1MCV9LnNpZ25wb3N0LWNvbnRlbnQudG9wLW1pZGRsZSAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3JkZXItcmlnaHQ6dmFy''@;'; put 'put ''KC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7bGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpfS5zaWducG9zdC1jb250ZW50LnRvcC1yaWdodCAuc2lnbnBvc3Qtd3JhcHtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LnNpZ25wb3N0LWNvbnRlbnQudG9w''@;'; put 'put ''LXJpZ2h0IC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO2xlZnQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKX0uc2lnbnBvc3QtY29udGVudC50b3AtcmlnaHQgLnBvcG92ZXItcG9pbnRl''@;'; put 'put ''cjpiZWZvcmV7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO2xlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKX0uc2lnbnBvc3QtY29udGVudC5ib3R0b20tbGVmdCAucG9wb3Zlci1wb2ludGVyLC5zaWducG9zdC1jb250ZW50LmJv''@;'; put 'put ''dHRvbS1taWRkbGUgLnBvcG92ZXItcG9pbnRlciwuc2lnbnBvc3QtY29udGVudC5ib3R0b20tcmlnaHQgLnBvcG92ZXItcG9pbnRlcntib3JkZXItYm90dG9tOnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWJvcmRlcik7dG9wOmNhbGMoLTEqdmFyKC0tY2xyLXNpZ25wb3N0LWJvcmRlci1z''@;'; put 'put ''aXplKSl9LnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLWxlZnQgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLW1pZGRsZSAucG9wb3Zlci1wb2ludGVyOmJlZm9yZSwuc2lnbnBvc3QtY29udGVudC5ib3R0b20tcmlnaHQgLnBvcG92ZXItcG9pbnRlcjpi''@;'; put 'put ''ZWZvcmV7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1wc3VlZG8tYm9yZGVyKTt0b3A6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKX0uc2lnbnBvc3QtY29udGVudC5ib3R0b20tbGVmdCAuc2lnbnBvc3Qtd3JhcHtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowfS5z''@;'; put 'put ''aWducG9zdC1jb250ZW50LmJvdHRvbS1sZWZ0IC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLWxlZnQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7cmlnaHQ6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKX0uc2lnbnBvc3QtY29udGVudC5ib3R0''@;'; put 'put ''b20tbGVmdCAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3JkZXItbGVmdDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTtyaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpfS5zaWducG9zdC1jb250ZW50LmJvdHRvbS1taWRkbGUgLnBvcG92ZXItcG9p''@;'; put 'put ''bnRlcntib3JkZXItcmlnaHQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7bGVmdDo1MCV9LnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLW1pZGRsZSAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3JkZXItcmlnaHQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50''@;'; put 'put ''ZXItaW52aXNpYmxlLWJvcmRlcik7cmlnaHQ6Y2FsYygtMSp2YXIoLS1jbHItc2lnbnBvc3QtYm9yZGVyLXNpemUpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSl9LnNpZ25wb3N0LWNvbnRlbnQuYm90dG9tLXJpZ2h0IC5zaWducG9zdC13cmFwe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6''@;'; put 'put ''MH0uc2lnbnBvc3QtY29udGVudC5ib3R0b20tcmlnaHQgLnBvcG92ZXItcG9pbnRlcntib3JkZXItcmlnaHQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7bGVmdDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpfS5zaWducG9zdC1jb250ZW50''@;'; put 'put ''LmJvdHRvbS1yaWdodCAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3JkZXItcmlnaHQ6dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7bGVmdDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpfS5zaWducG9zdC1jb250ZW50LmxlZnQtdG9wIC5wb3BvdmVyLXBv''@;'; put 'put ''aW50ZXIsLnNpZ25wb3N0LWNvbnRlbnQubGVmdC1taWRkbGUgLnBvcG92ZXItcG9pbnRlciwuc2lnbnBvc3QtY29udGVudC5sZWZ0LWJvdHRvbSAucG9wb3Zlci1wb2ludGVye2JvcmRlci1sZWZ0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWJvcmRlcik7cmlnaHQ6Y2FsYygtMSp2YXIo''@;'; put 'put ''LS1jbHItc2lnbnBvc3QtYm9yZGVyLXNpemUpKX0uc2lnbnBvc3QtY29udGVudC5sZWZ0LXRvcCAucG9wb3Zlci1wb2ludGVyOmJlZm9yZSwuc2lnbnBvc3QtY29udGVudC5sZWZ0LW1pZGRsZSAucG9wb3Zlci1wb2ludGVyOmJlZm9yZSwuc2lnbnBvc3QtY29udGVudC5sZWZ0LWJvdHRvbSAu''@;'; put 'put ''cG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3JkZXItbGVmdDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1wc3VlZG8tYm9yZGVyKX0uc2lnbnBvc3QtY29udGVudC5sZWZ0LXRvcCAuc2lnbnBvc3Qtd3JhcHtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowfS5zaWducG9zdC1jb250ZW50''@;'; put 'put ''LmxlZnQtdG9wIC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLXRvcDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTtib3R0b206Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKX0uc2lnbnBvc3QtY29udGVudC5sZWZ0LXRvcCAucG9wb3Zlci1wb2lu''@;'; put 'put ''dGVyOmJlZm9yZXtib3JkZXItdG9wOnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO3RvcDpjYWxjKC0xKnZhcigtLWNsci1zaWducG9zdC1ib3JkZXItc2l6ZSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKTtyaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTIpfS5zaWducG9zdC1jb250ZW50LmxlZnQtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1pbnZpc2libGUtYm9yZGVyKTt0b3A6NTAlfS5zaWducG9zdC1jb250ZW50LmxlZnQtbWlkZGxlIC5wb3BvdmVyLXBvaW50''@;'; put 'put ''ZXI6YmVmb3Jle2JvcmRlci1ib3R0b206dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7dG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSk7bGVmdDpjYWxjKC0xKnZhcigtLWNsci1zaWducG9zdC1ib3JkZXItc2l6ZSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNw''@;'; put 'put ''YWNlLTIpKX0uc2lnbnBvc3QtY29udGVudC5sZWZ0LWJvdHRvbSAuc2lnbnBvc3Qtd3JhcHtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowfS5zaWducG9zdC1jb250ZW50LmxlZnQtYm90dG9tIC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLWJvdHRvbTp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRl''@;'; put 'put ''ci1pbnZpc2libGUtYm9yZGVyKTt0b3A6Y2FsYygtMSp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKX0uc2lnbnBvc3QtY29udGVudC5sZWZ0LWJvdHRvbSAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3JkZXItYm90dG9tOnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1i''@;'; put 'put ''b3JkZXIpO3RvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpO2xlZnQ6Y2FsYygtMSp2YXIoLS1jbHItc2lnbnBvc3QtYm9yZGVyLXNpemUpIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0yKSl9LnNpZ25wb3N0LWNvbnRlbnQucmlnaHQtdG9wIC5wb3BvdmVyLXBvaW50ZXIsLnNpZ25wb3N0''@;'; put 'put ''LWNvbnRlbnQucmlnaHQtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXIsLnNpZ25wb3N0LWNvbnRlbnQucmlnaHQtYm90dG9tIC5wb3BvdmVyLXBvaW50ZXJ7Ym9yZGVyLXJpZ2h0OnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWJvcmRlcik7bGVmdDpjYWxjKC0xKnZhcigtLWNsci1zaWducG9z''@;'; put 'put ''dC1ib3JkZXItc2l6ZSkpfS5zaWducG9zdC1jb250ZW50LnJpZ2h0LXRvcCAucG9wb3Zlci1wb2ludGVyOmJlZm9yZSwuc2lnbnBvc3QtY29udGVudC5yaWdodC1taWRkbGUgLnBvcG92ZXItcG9pbnRlcjpiZWZvcmUsLnNpZ25wb3N0LWNvbnRlbnQucmlnaHQtYm90dG9tIC5wb3BvdmVyLXBv''@;'; put 'put ''aW50ZXI6YmVmb3Jle2JvcmRlci1yaWdodDp2YXIoLS1jbHItc2lnbnBvc3QtcG9pbnRlci1wc3VlZG8tYm9yZGVyKTtsZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMil9LnNpZ25wb3N0LWNvbnRlbnQucmlnaHQtdG9wIC5zaWducG9zdC13cmFwe2JvcmRlci1ib3R0b20tbGVmdC1yYWRp''@;'; put 'put ''dXM6MH0uc2lnbnBvc3QtY29udGVudC5yaWdodC10b3AgLnBvcG92ZXItcG9pbnRlcntib3JkZXItdG9wOnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO2JvdHRvbTpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpfS5zaWducG9zdC1jb250ZW50''@;'; put 'put ''LnJpZ2h0LXRvcCAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3JkZXItdG9wOnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO3RvcDpjYWxjKC0xKnZhcigtLWNsci1zaWducG9zdC1ib3JkZXItc2l6ZSkgLSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpKX0u''@;'; put 'put ''c2lnbnBvc3QtY29udGVudC5yaWdodC1taWRkbGUgLnBvcG92ZXItcG9pbnRlcntib3JkZXItYm90dG9tOnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO3RvcDo1MCV9LnNpZ25wb3N0LWNvbnRlbnQucmlnaHQtbWlkZGxlIC5wb3BvdmVyLXBvaW50ZXI6YmVm''@;'; put 'put ''b3Jle2JvcmRlci1ib3R0b206dmFyKC0tY2xyLXNpZ25wb3N0LXBvaW50ZXItaW52aXNpYmxlLWJvcmRlcik7dG9wOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSl9LnNpZ25wb3N0LWNvbnRlbnQucmlnaHQtYm90dG9tIC5zaWducG9zdC13cmFwe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MH0u''@;'; put 'put ''c2lnbnBvc3QtY29udGVudC5yaWdodC1ib3R0b20gLnBvcG92ZXItcG9pbnRlcntib3JkZXItYm90dG9tOnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO3RvcDpjYWxjKC0xKnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkpfS5zaWducG9zdC1jb250ZW50LnJp''@;'; put 'put ''Z2h0LWJvdHRvbSAucG9wb3Zlci1wb2ludGVyOmJlZm9yZXtib3JkZXItYm90dG9tOnZhcigtLWNsci1zaWducG9zdC1wb2ludGVyLWludmlzaWJsZS1ib3JkZXIpO3RvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpfS5zaWducG9zdC1jb250ZW50LWhlYWRlcntkaXNwbGF5OmZsZXg7anVz''@;'; put 'put ''dGlmeS1jb250ZW50OmZsZXgtZW5kO2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTMpO3dpZHRoOjEwMCU7YmFja2dyb3VuZC1jb2xvcjppbmhlcml0O3RvcDowO2JvcmRlci1yYWRpdXM6dmFyKC0tY2xyLXNpZ25wb3N0LWJvcmRlci1yYWRpdXMpfS5zaWducG9zdC1jb250ZW50LWhlYWRl''@;'; put 'put ''ciAuc2lnbnBvc3QtdGl0bGV7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5''@;'; put 'put ''cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY2FwdGlvbi1sZXR0ZXItc3BhY2luZyk7bWFyZ2luLXJpZ2h0OmF1dG99LnNpZ25wb3N0LXdyYXB7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7cGFkZGlu''@;'; put 'put ''Zzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNykgY2FsYygxNSooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7Ym9yZGVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTEwMCkgc29saWQgdmFyKC0tY2xyLXNpZ25wb3N0''@;'; put 'put ''LWNvbnRlbnQtYm9yZGVyLWNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLWNsci1zaWducG9zdC1ib3JkZXItcmFkaXVzKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1zaWducG9zdC1jb250ZW50LWJnLWNvbG9yKTt6LWluZGV4OjEwNTA7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpm''@;'; put 'put ''bGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uc2lnbnBvc3QtY29udGVudC1ib2R5e3BhZGRpbmctYm90dG9tOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSk7Y29sb3I6dmFyKC0tY2xyLXNpZ25wb3N0LWNvbnRlbnQtY29sb3IpO3RleHQtYWxpZ246bGVmdDttYXgtaGVpZ2h0OmNhbGMoNDUw''@;'; put 'put ''KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTtvdmVyZmxvdy15OmF1dG87Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtd2VpZ2h0KTtsaW5lLWhl''@;'; put 'put ''aWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGV0dGVyLXNwYWNpbmcpfS5jbHItYWNjb3JkaW9ue2Rpc3BsYXk6YmxvY2s7bWFyZ2luLWJvdHRvbTp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5j''@;'; put 'put ''bHItYWNjb3JkaW9uLXBhbmVse2Rpc3BsYXk6YmxvY2t9LmNsci1hY2NvcmRpb24taGVhZGVye2NvbG9yOnZhcigtLWNsci1hY2NvcmRpb24tdGV4dC1jb2xvcik7Ym94LXNoYWRvdzp2YXIoLS1jbHItYWNjb3JkaW9uLWhlYWRlci1sZWZ0LWluZGljYXRvcik7YmFja2dyb3VuZDp2YXIoLS1j''@;'; put 'put ''bHItYWNjb3JkaW9uLWhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yKTt0cmFuc2l0aW9uOmFsbCAuMnMgZWFzZS1pbi1vdXQ7Ym9yZGVyOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMSkgc29saWQgdmFyKC0tY2xyLWFjY29yZGlvbi1ib3JkZXItY29sb3IpO2JvcmRlci1ib3R0b20td2lkdGg6MDt3''@;'; put 'put ''aWR0aDoxMDAlO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OmNhbGMoMjAqKDFyZW0vdmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1iYXNlKSkpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1sZXR0ZXItc3BhY2luZyk7dGV4dC1hbGlnbjpsZWZ0fS5jbHItYWNjb3JkaW9uLWhlYWRlcjpob3Zlcntjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLXRleHQtY29sb3It''@;'; put 'put ''aG92ZXIpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi1oZWFkZXItaG92ZXItYmFja2dyb3VuZC1jb2xvcil9LmNsci1hY2NvcmRpb24taGVhZGVyOmFjdGl2ZXtjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLXRleHQtY29sb3ItYWN0aXZlKTtiYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yKX0uY2xyLWFjY29yZGlvbi1wYW5lbC1kaXNhYmxlZD5kaXY+LmNsci1hY2NvcmRpb24taGVhZGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi1oZWFkZXItYmFja2dyb3VuZC1j''@;'; put 'put ''b2xvcil9LmNsci1hY2NvcmRpb24tcGFuZWwtZGlzYWJsZWQ+ZGl2Pi5jbHItYWNjb3JkaW9uLWhlYWRlcjpob3ZlciwuY2xyLWFjY29yZGlvbi1wYW5lbC1kaXNhYmxlZD5kaXY+LmNsci1hY2NvcmRpb24taGVhZGVyOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1hY2NvcmRp''@;'; put 'put ''b24taGVhZGVyLWJhY2tncm91bmQtY29sb3IpfS5jbHItYWNjb3JkaW9uLXBhbmVsLWRpc2FibGVkPi5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4+LmNsci1hY2NvcmRpb24taGVhZGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi1oZWFkZXItZGlzYWJsZWQtYmFja2dy''@;'; put 'put ''b3VuZC1jb2xvcil9LmNsci1hY2NvcmRpb24tcGFuZWwtZGlzYWJsZWQ+LmNsci1hY2NvcmRpb24tcGFuZWwtb3Blbj4uY2xyLWFjY29yZGlvbi1oZWFkZXI6aG92ZXIsLmNsci1hY2NvcmRpb24tcGFuZWwtZGlzYWJsZWQ+LmNsci1hY2NvcmRpb24tcGFuZWwtb3Blbj4uY2xyLWFjY29yZGlv''@;'; put 'put ''bi1oZWFkZXI6YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi1oZWFkZXItZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcil9LmNsci1hY2NvcmRpb24tcGFuZWw6bGFzdC1jaGlsZCAuY2xyLWFjY29yZGlvbi1jb250ZW50LC5jbHItYWNjb3JkaW9uLXBhbmVsOmxh''@;'; put 'put ''c3QtY2hpbGQgLmNsci1hY2NvcmRpb24taGVhZGVye2JvcmRlci1ib3R0b206dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xKSBzb2xpZCB2YXIoLS1jbHItYWNjb3JkaW9uLWJvcmRlci1jb2xvcil9LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbntkaXNwbGF5OmZsZXg7ZmxleC1mbG93OnJv''@;'; put 'put ''dyB3cmFwO2ZsZXg6MSAxIDA7d2lkdGg6MTAwJTtib3JkZXI6MDtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCk7YmFja2dyb3VuZDowIDA7dGV4dC1hbGlnbjpsZWZ0O2N1cnNvcjpwb2ludGVyO2NvbG9yOmluaGVyaXQ7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9QG1l''@;'; put 'put ''ZGlhIChtaW4td2lkdGg6NTc2cHgpey5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b257ZmxleC1mbG93OnJvd319LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbjpkaXNhYmxlZHtjdXJzb3I6bm90LWFsbG93ZWR9LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbjpkaXNhYmxlZCAuY2xy''@;'; put 'put ''LWFjY29yZGlvbi1zdGF0dXMsLmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbjpkaXNhYmxlZCAuY2xyLWFjY29yZGlvbi10aXRsZSwuY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uOmRpc2FibGVkIC5jbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9ue2NvbG9yOnZhcigtLWNsci1hY2NvcmRp''@;'; put 'put ''b24tcGFuZWwtZGlzYWJsZWQtY29sb3IpfS5jbHItYWNjb3JkaW9uLXN0YXR1c3t3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTtkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjp0b3B9LmNsci1hY2NvcmRpb24tdGl0bGV7ZGlzcGxheTppbmxpbmUtYmxvY2t9LmNs''@;'; put 'put ''ci1hY2NvcmRpb24taGVhZGVyLWhhcy1kZXNjcmlwdGlvbiAuY2xyLWFjY29yZGlvbi10aXRsZXttaW4td2lkdGg6dmFyKC0tY2xyLWFjY29yZGlvbi1zdGVwLXRpdGxlLW1pbi13aWR0aCk7bWF4LXdpZHRoOmNhbGMoMjY0KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKTt3aWR0aDox''@;'; put 'put ''MDAlfUBtZWRpYSAobWluLXdpZHRoOjU3NnB4KXsuY2xyLWFjY29yZGlvbi1oZWFkZXItaGFzLWRlc2NyaXB0aW9uIC5jbHItYWNjb3JkaW9uLXRpdGxle21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9fS5jbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9ue2Rpc3BsYXk6aW5s''@;'; put 'put ''aW5lLWJsb2NrO21heC13aWR0aDpjYWxjKDY1MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9QG1lZGlhIChtaW4td2lkdGg6NTc2cHgpey5jbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9ue21hcmdpbi1sZWZ0OmNhbGMoNDAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfX0u''@;'; put 'put ''Y2xyLWFjY29yZGlvbi1jb250ZW50e2JhY2tncm91bmQ6dmFyKC0tY2xyLWFjY29yZGlvbi1jb250ZW50LWJhY2tncm91bmQtY29sb3IpO2JvcmRlcjp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTEpIHNvbGlkIHZhcigtLWNsci1hY2NvcmRpb24tYm9yZGVyLWNvbG9yKTtib3JkZXItYm90dG9t''@;'; put 'put ''OjA7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KTtkaXNwbGF5Om5vbmV9LmNsci1hY2NvcmRpb24tY29udGVudCAuY2xyLWZvcm0sLmNsci1hY2NvcmRpb24tY29udGVudC5uZy10cmlnZ2Vye3BhZGRpbmc6MH1AbWVkaWEgKG1pbi13aWR0aDo1NzZw''@;'; put 'put ''eCl7LmNsci1hY2NvcmRpb24tY29udGVudHtwYWRkaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCkgY2FsYyg1NCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSl9fS5jbHItYWNjb3JkaW9uLWlubmVyLWNvbnRlbnR7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfUBt''@;'; put 'put ''ZWRpYSAobWluLXdpZHRoOjU3NnB4KXsuY2xyLWFjY29yZGlvbi1pbm5lci1jb250ZW50e3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS04KSBjYWxjKDU0KigxcmVtL3ZhcigtLWNkcy1nbG9iYWwtYmFzZSkpKX19LmNsci1hY2NvcmRpb24tYW5nbGV7dHJhbnNpdGlvbjphbGwgLjJz''@;'; put 'put ''IGVhc2UtaW4tb3V0O3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpfS5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4+LmNsci1hY2NvcmRpb24taGVhZGVye2JveC1zaGFkb3c6dmFyKC0tY2xyLWFjY29yZGlvbi1oZWFkZXItbGVmdC1jdXJyZW50LWluZGljYXRvcil9LmNsci1hY2NvcmRpb24tcGFu''@;'; put 'put ''ZWwtb3BlbiAuY2xyLWFjY29yZGlvbi1wYW5lbC1jb21wbGV0ZT4uY2xyLWFjY29yZGlvbi1oZWFkZXJ7Ym94LXNoYWRvdzppbnNldCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDAgMCB2YXIoLS1jbHItYWNjb3JkaW9uLWJvcmRlci1sZWZ0LWNvbG9yLWNvbXBsZXRlKX0uY2xyLWFjY29y''@;'; put 'put ''ZGlvbi1wYW5lbC1vcGVuIC5jbHItYWNjb3JkaW9uLXBhbmVsLWVycm9yPi5jbHItYWNjb3JkaW9uLWhlYWRlcntib3gtc2hhZG93Omluc2V0IHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgMCAwIHZhcigtLWNsci1hY2NvcmRpb24tYm9yZGVyLWxlZnQtY29sb3ItZXJyb3IpfS5jbHItYWNj''@;'; put 'put ''b3JkaW9uLXBhbmVsLW9wZW4+LmNsci1hY2NvcmRpb24tY29udGVudC1yZWdpb24gLmNsci1hY2NvcmRpb24tY29udGVudHtkaXNwbGF5OmJsb2NrfS5jbHItYWNjb3JkaW9uLXBhbmVsLW9wZW4+LmNsci1hY2NvcmRpb24taGVhZGVye2JhY2tncm91bmQ6dmFyKC0tY2xyLWFjY29yZGlvbi1o''@;'; put 'put ''ZWFkZXItb3Blbi1iYWNrZ3JvdW5kLWNvbG9yKX0uY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuPi5jbHItYWNjb3JkaW9uLWhlYWRlcjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNsci1hY2NvcmRpb24taGVhZGVyLW9wZW4taG92ZXItYmFja2dyb3VuZC1jb2xvcil9LmNsci1hY2Nv''@;'; put 'put ''cmRpb24tcGFuZWwtb3Blbj4uY2xyLWFjY29yZGlvbi1oZWFkZXI6YWN0aXZle2NvbG9yOnZhcigtLWNsci1hY2NvcmRpb24tdGV4dC1jb2xvci1hY3RpdmUpO2JhY2tncm91bmQtY29sb3I6dmFyKC0tY2xyLWFjY29yZGlvbi1oZWFkZXItb3Blbi1hY3RpdmUtYmFja2dyb3VuZC1jb2xvcil9''@;'; put 'put ''LmNsci1hY2NvcmRpb24tcGFuZWwtb3Blbj4uY2xyLWFjY29yZGlvbi1oZWFkZXIgLmNsci1hY2NvcmRpb24tYW5nbGV7dmlzaWJpbGl0eTp2aXNpYmxlO3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKX0uY2xyLWFjY29yZGlvbi1wYW5lbC1jb21wbGV0ZT4uY2xyLWFjY29yZGlvbi1jb21wbGV0''@;'; put 'put ''ZS1pY29ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbG9yOnZhcigtLWNsci1hY2NvcmRpb24tY29tcGxldGUtY29sb3IpfS5jbHItYWNjb3JkaW9uLXBhbmVsLWNvbXBsZXRlPi5jbHItYWNjb3JkaW9uLWFuZ2xle3Zpc2liaWxpdHk6dmlzaWJsZX0uY2xyLWFjY29yZGlvbi1wYW5lbC1jb21w''@;'; put 'put ''bGV0ZT4uY2xyLWFjY29yZGlvbi1oZWFkZXJ7Ym94LXNoYWRvdzppbnNldCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDAgMCB2YXIoLS1jbHItYWNjb3JkaW9uLWJvcmRlci1sZWZ0LWNvbG9yLWNvbXBsZXRlKX0uY2xyLWFjY29yZGlvbi1wYW5lbC1jb21wbGV0ZSAubmctdHJpZ2dlci5j''@;'; put 'put ''bHItYWNjb3JkaW9uLWNvbnRlbnR7ZGlzcGxheTpibG9ja30uY2xyLWFjY29yZGlvbi1wYW5lbC1lcnJvcj4uY2xyLWFjY29yZGlvbi1oZWFkZXJ7Ym94LXNoYWRvdzppbnNldCB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIDAgMCB2YXIoLS1jbHItYWNjb3JkaW9uLWJvcmRlci1sZWZ0LWNv''@;'; put 'put ''bG9yLWVycm9yKX0uY2xyLWFjY29yZGlvbi1wYW5lbC1lcnJvcj4uY2xyLWFjY29yZGlvbi1lcnJvci1pY29ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO2NvbG9yOnZhcigtLWNsci1hY2NvcmRpb24tZXJyb3ItY29sb3IpfS5jbHItYWNjb3JkaW9uLXBhbmVsLWVycm9yIC5jbHItYWNjb3JkaW9u''@;'; put 'put ''LW51bWJlciwuY2xyLWFjY29yZGlvbi1wYW5lbC1jb21wbGV0ZSAuY2xyLWFjY29yZGlvbi1udW1iZXJ7cG9zaXRpb246YWJzb2x1dGU7Y2xpcDpyZWN0KDFweCwxcHgsMXB4LDFweCk7Y2xpcC1wYXRoOmluc2V0KDUwJSk7cGFkZGluZzowO2JvcmRlcjowO2hlaWdodDoxcHg7d2lkdGg6MXB4''@;'; put 'put ''O292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7dG9wOjA7bGVmdDowfS5jbHItYWNjb3JkaW9uOm5vdCguY2xyLXN0ZXBwZXItZm9ybXMpIC5jbHItYWNjb3JkaW9uLWhlYWRlcjpub3QoLmNsci1zdGVwcGVyLWhlYWRlcil7Ym94LXNoYWRvdzpub25lfS5jbHItYWNjb3JkaW9u''@;'; put 'put ''Om5vdCguY2xyLXN0ZXBwZXItZm9ybXMpIC5jbHItYWNjb3JkaW9uLXBhbmVsOmZpcnN0LWNoaWxkIC5jbHItYWNjb3JkaW9uLWhlYWRlcjpub3QoLmNsci1zdGVwcGVyLWhlYWRlcil7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1jbHItYWNjb3JkaW9uLWJvcmRlci1yYWRpdXMpO2Jv''@;'; put 'put ''cmRlci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWNsci1hY2NvcmRpb24tYm9yZGVyLXJhZGl1cyl9LmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBlci1mb3JtcykgLmNsci1hY2NvcmRpb24tcGFuZWw6bGFzdC1jaGlsZCAuY2xyLWFjY29yZGlvbi1oZWFkZXI6bm90KC5jbHItc3RlcHBl''@;'; put 'put ''ci1oZWFkZXIpLC5jbHItYWNjb3JkaW9uOm5vdCguY2xyLXN0ZXBwZXItZm9ybXMpIC5jbHItYWNjb3JkaW9uLXBhbmVsOmxhc3QtY2hpbGQgLmNsci1hY2NvcmRpb24taGVhZGVyOm5vdCguY2xyLXN0ZXBwZXItaGVhZGVyKSsuY2xyLWFjY29yZGlvbi1jb250ZW50LXJlZ2lvbj4uY2xyLWFj''@;'; put 'put ''Y29yZGlvbi1jb250ZW50e2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tY2xyLWFjY29yZGlvbi1ib3JkZXItcmFkaXVzKTtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp2YXIoLS1jbHItYWNjb3JkaW9uLWJvcmRlci1yYWRpdXMpfS5jbHItYWNjb3JkaW9uOm5vdCguY2xyLXN0''@;'; put 'put ''ZXBwZXItZm9ybXMpIC5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b257YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTYpfS5jbHItYWNjb3JkaW9uOm5vdCguY2xyLXN0ZXBwZXItZm9ybXMpIC5jbHIt''@;'; put 'put ''YWNjb3JkaW9uLWNvbnRlbnR7cGFkZGluZzowfS5jbHItYWNjb3JkaW9uOm5vdCguY2xyLXN0ZXBwZXItZm9ybXMpIC5jbHItYWNjb3JkaW9uLWlubmVyLWNvbnRlbnR7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNikgdmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTtjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWNvbnRlbnQtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jbHItYWNjb3JkaW9uLWNvbnRlbnQtZm9udC1zaXplKX0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVy''@;'; put 'put ''LWZvcm1zKSAuY2xyLWFjY29yZGlvbi1wYW5lbC1kaXNhYmxlZCAuY2xyLWFjY29yZGlvbi1pbm5lci1jb250ZW50e2NvbG9yOnZhcigtLWNsci1hY2NvcmRpb24tcGFuZWwtZGlzYWJsZWQtY29sb3IpO2N1cnNvcjpub3QtYWxsb3dlZH0uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVy''@;'; put 'put ''LWZvcm1zKSAuY2xyLWFjY29yZGlvbi1zdGF0dXN7d2lkdGg6YXV0b30uY2xyLWFjY29yZGlvbjpub3QoLmNsci1zdGVwcGVyLWZvcm1zKSAuY2xyLWFjY29yZGlvbi1zdGF0dXMgY2RzLWljb24sLmNsci1hY2NvcmRpb246bm90KC5jbHItc3RlcHBlci1mb3JtcykgLmNsci1hY2NvcmRpb24t''@;'; put 'put ''c3RhdHVzIGNsci1pY29ue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTcpO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyl9LmNsci1hY2NvcmRpb24tcGFuZWwtb3Blbj4uY2xyLWFjY29yZGlvbi1oZWFkZXJ7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowIWltcG9ydGFu''@;'; put 'put ''dDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowIWltcG9ydGFudDtib3JkZXItYm90dG9tOjAhaW1wb3J0YW50fTpyb290IFtjZHMtdGhlbWVdey0tY2xyLWFjY29yZGlvbi10ZXh0LWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3IpOy0tY2xyLWFjY29y''@;'; put 'put ''ZGlvbi10ZXh0LWNvbG9yLWhvdmVyOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItaG92ZXIpOy0tY2xyLWFjY29yZGlvbi10ZXh0LWNvbG9yLWFjdGl2ZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWNvbG9yLWFjdGl2ZSk7LS1jbHItYWNjb3Jk''@;'; put 'put ''aW9uLXBhbmVsLWRpc2FibGVkLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tY29sb3ItZGlzYWJsZWQpOy0tY2xyLWFjY29yZGlvbi1hY3RpdmUtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2Vs''@;'; put 'put ''ZWN0ZWQpOy0tY2xyLWFjY29yZGlvbi1jb250ZW50LWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1hcHAtYmFja2dyb3VuZCk7LS1jbHItYWNjb3JkaW9uLWNvbnRlbnQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDUwKTstLWNsci1hY2Nv''@;'; put 'put ''cmRpb24tY29udGVudC1mb250LXNpemU6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWZvbnQtc2l6ZSk7LS1jbHItYWNjb3JkaW9uLWhlYWRlci1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQpOy0tY2xyLWFj''@;'; put 'put ''Y29yZGlvbi1oZWFkZXItZGlzYWJsZWQtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kKTstLWNsci1hY2NvcmRpb24taGVhZGVyLWhvdmVyLWJhY2tncm91bmQtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlv''@;'; put 'put ''bi1iYWNrZ3JvdW5kLWhvdmVyKTstLWNsci1hY2NvcmRpb24taGVhZGVyLWFjdGl2ZS1iYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1hY3RpdmUpOy0tY2xyLWFjY29yZGlvbi1oZWFkZXItb3Blbi1iYWNrZ3JvdW5kLWNvbG9y''@;'; put 'put ''OnZhcigtLWNsci1hY2NvcmRpb24tYWN0aXZlLWJhY2tncm91bmQtY29sb3IpOy0tY2xyLWFjY29yZGlvbi1oZWFkZXItb3Blbi1hY3RpdmUtYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQtYWN0aXZlKTstLWNs''@;'; put 'put ''ci1hY2NvcmRpb24taGVhZGVyLW9wZW4taG92ZXItYmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQtaG92ZXIpOy0tY2xyLWFjY29yZGlvbi1lcnJvci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdl''@;'; put 'put ''cik7LS1jbHItYWNjb3JkaW9uLWNvbXBsZXRlLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItYWNjb3JkaW9uLWJvcmRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWJvcmRlci1jb2xvcik7LS1jbHItYWNjb3JkaW9uLWJvcmRlci1yYWRpdXM6dmFy''@;'; put 'put ''KC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItcmFkaXVzLTEwMCk7LS1jbHItYWNjb3JkaW9uLWJvcmRlci1sZWZ0LWNvbG9yLWNvbXBsZXRlOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItYWNjb3JkaW9uLWJvcmRlci1sZWZ0LWNvbG9yLWVycm9yOnZhcigtLWNkcy1h''@;'; put 'put ''bGlhcy1zdGF0dXMtZGFuZ2VyKTstLWNsci1hY2NvcmRpb24taGVhZGVyLWxlZnQtaW5kaWNhdG9yOmluc2V0IHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSkgMCAwIHZhcigtLWNkcy1hbGlhcy1zdGF0dXMtbmV1dHJhbC10aW50KTstLWNsci1hY2NvcmRpb24taGVhZGVyLWxlZnQtY3VycmVu''@;'; put 'put ''dC1pbmRpY2F0b3I6aW5zZXQgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSAwIDAgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7LS1jbHItYWNjb3JkaW9uLXN0ZXAtdGl0bGUtbWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2Ut''@;'; put 'put ''MTMpfS5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b257YWxpZ24taXRlbXM6Y2VudGVyO2dhcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpO21pbi1oZWlnaHQ6Y2FsYyg1NiooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJh''@;'; put 'put ''c2UpKSk7cGFkZGluZzp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTUpIHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOCkgdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTkpfS5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNj''@;'; put 'put ''b3JkaW9uLWhlYWRlci1idXR0b24+LmNsci1zdGVwLXN0YXR1c3ttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTIpO3dpZHRoOnZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtc3BhY2UtMTIpO2Rpc3BsYXk6aW5saW5lLWZsZXg7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSk7YWxpZ24taXRlbXM6Y2VudGVyfS5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b24+LmNsci1zdGVwLXN0YXR1''@;'; put 'put ''cz4uY2xyLXN0ZXAtZXJyb3ItaWNvbiwuY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItc3RlcC1zdGF0dXM+LmNsci1zdGVwLWNvbXBsZXRlLWljb257aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7''@;'; put 'put ''d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KTtwYWRkaW5nOjB9LmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbj4uY2xyLXN0ZXAtc3RhdHVzPi5jbHItc3RlcC1lcnJvci1pY29ue2NvbG9yOnZhcigtLWNsci1h''@;'; put 'put ''Y2NvcmRpb24tZXJyb3ItY29sb3IpfS5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b24+LmNsci1zdGVwLXN0YXR1cz4uY2xyLXN0ZXAtY29tcGxldGUtaWNvbntjb2xvcjp2YXIoLS1jbHItYWNjb3JkaW9uLWNvbXBsZXRl''@;'; put 'put ''LWNvbG9yKX0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItc3RlcC10aXRsZS13cmFwcGVye21pbi13aWR0aDp2YXIoLS1jbHItYWNjb3JkaW9uLXN0ZXAtdGl0bGUtbWluLXdpZHRoKTttYXgtd2lkdGg6Y2Fs''@;'; put 'put ''YygyNjQqMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKTt3aWR0aDoxMDAlO2Rpc3BsYXk6aW5saW5lLWZsZXg7Z2FwOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMyk7YWxpZ24taXRlbXM6Y2VudGVyO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWZvbnQtc2l6''@;'; put 'put ''ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktZm9udC13ZWlnaHQtc2VtaWJvbGQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktbGluZS1oZWlnaHQpO2xldHRlci1zcGFjaW5nOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJv''@;'; put 'put ''ZHktbGV0dGVyLXNwYWNpbmcpfS5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3JkaW9uLWhlYWRlci1idXR0b24+LmNsci1zdGVwLXRpdGxlLXdyYXBwZXI+LmNsci1zdGVwLW51bWJlcnttaW4td2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KX0u''@;'; put 'put ''Y2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItc3RlcC10aXRsZS13cmFwcGVyPi5jbHItYWNjb3JkaW9uLXRpdGxle21pbi13aWR0aDppbml0aWFsO21heC13aWR0aDppbml0aWFsO3dpZHRoOmluaXRpYWw7bWFy''@;'; put 'put ''Z2luLWxlZnQ6MH0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItYWNjb3JkaW9uLWRlc2NyaXB0aW9uLC5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3JkaW9uLWhlYWRl''@;'; put 'put ''ci1idXR0b24+LmNsci1zdGVwLWRlc2NyaXB0aW9ue21hcmdpbi1sZWZ0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSk7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWJvZHktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5''@;'; put 'put ''LWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1ib2R5LWxldHRlci1zcGFjaW5nKX1AbWVkaWEgKG1heC13aWR0aDo1NzZweCl7LmNsci1z''@;'; put 'put ''dGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbntnYXA6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0zKX0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHIt''@;'; put 'put ''c3RlcC1zdGF0dXN7bWluLXdpZHRoOmluaXRpYWw7d2lkdGg6aW5pdGlhbH0uY2xyLXN0ZXBwZXItZm9ybXMgLmNsci1zdGVwcGVyLWhlYWRlcj4uY2xyLWFjY29yZGlvbi1oZWFkZXItYnV0dG9uPi5jbHItc3RlcC10aXRsZS13cmFwcGVye3dpZHRoOmluaXRpYWx9LmNsci1zdGVwcGVyLWZv''@;'; put 'put ''cm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbj4uY2xyLXN0ZXAtdGl0bGUtd3JhcHBlcj4uY2xyLXN0ZXAtbnVtYmVye21pbi13aWR0aDppbml0aWFsfS5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXBwZXItaGVhZGVyPi5jbHItYWNjb3JkaW9u''@;'; put 'put ''LWhlYWRlci1idXR0b24+LmNsci1hY2NvcmRpb24tZGVzY3JpcHRpb24sLmNsci1zdGVwcGVyLWZvcm1zIC5jbHItc3RlcHBlci1oZWFkZXI+LmNsci1hY2NvcmRpb24taGVhZGVyLWJ1dHRvbj4uY2xyLXN0ZXAtZGVzY3JpcHRpb257bWFyZ2luLWxlZnQ6MH19LmNsci1zdGVwcGVyLWZvcm1z''@;'; put 'put ''IC5jbHItYWNjb3JkaW9uLXBhbmVsLWluYWN0aXZlOm5vdCguY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuKT4uY2xyLXN0ZXBwZXItaGVhZGVyIC5jbHItc3RlcC1hbmdsZXt2aXNpYmlsaXR5OmhpZGRlbn1AbWVkaWEgKG1heC13aWR0aDo1NzZweCl7LmNsci1zdGVwcGVyLWZvcm1zIC5jbHIt''@;'; put 'put ''YWNjb3JkaW9uLXBhbmVsLWluYWN0aXZlOm5vdCguY2xyLWFjY29yZGlvbi1wYW5lbC1vcGVuKT4uY2xyLXN0ZXBwZXItaGVhZGVyIC5jbHItc3RlcC1hbmdsZXtkaXNwbGF5Om5vbmV9fS5jbHItc3RlcHBlci1mb3JtcyAuY2xyLXN0ZXAtYnV0dG9ue21hcmdpbi10b3A6dmFyKC0tY2RzLWds''@;'; put 'put ''b2JhbC1zcGFjZS05KTttYXJnaW4tcmlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS02KX1jbHItc3RlcHBlci1wYW5lbCAuY2xyLWFjY29yZGlvbi1pbm5lci1jb250ZW50e3BhZGRpbmc6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS05KSB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKX06cm9v''@;'; put 'put ''dCBbY2RzLXRoZW1lXXstLWNsci10aW1lbGluZS1saW5lLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYm9yZGVyLWNvbG9yKTstLWNsci10aW1lbGluZS1zdGVwLWhlYWRlci1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApOy0tY2xy''@;'; put 'put ''LXRpbWVsaW5lLXN0ZXAtdGl0bGUtY29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKTstLWNsci10aW1lbGluZS1zdGVwLWRlc2NyaXB0aW9uLWNvbG9yOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNvbG9yLTQwMCk7LS1jbHItdGltZWxpbmUtaW5jb21wbGV0''@;'; put 'put ''ZS1zdGVwLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYm9yZGVyLWNvbG9yKTstLWNsci10aW1lbGluZS1jdXJyZW50LXN0ZXAtY29sb3I6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhpZ2hsaWdodCk7LS1jbHItdGltZWxp''@;'; put 'put ''bmUtc3VjY2Vzcy1zdGVwLWNvbG9yOnZhcigtLWNkcy1hbGlhcy1zdGF0dXMtc3VjY2Vzcyk7LS1jbHItdGltZWxpbmUtZXJyb3Itc3RlcC1jb2xvcjp2YXIoLS1jZHMtYWxpYXMtc3RhdHVzLWRhbmdlcik7LS1jbHItdGltZWxpbmUtc3RlcC10aXRsZS1mb250LXdlaWdodDp2YXIoLS1jZHMt''@;'; put 'put ''YWxpYXMtdHlwb2dyYXBoeS1mb250LXdlaWdodC1zZW1pYm9sZCk7LS1jbHItdGltZWxpbmUtc3RlcC1pbnRlcm5hbC1zcGFjaW5nOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNil9LmNsci10aW1lbGluZXtkaXNwbGF5OmZsZXg7cGFkZGluZzp2YXIoLS1jbHItdGltZWxpbmUtc3RlcC1pbnRl''@;'; put 'put ''cm5hbC1zcGFjaW5nKX0uY2xyLXRpbWVsaW5lLXN0ZXB7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjt3aWR0aDoxMDAlO21pbi13aWR0aDpjYWxjKDE3NSooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWFyZ2luLWxlZnQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS01''@;'; put 'put ''KX0uY2xyLXRpbWVsaW5lLXN0ZXAgY2RzLWljb24sLmNsci10aW1lbGluZS1zdGVwIGNsci1pY29ue2hlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTt3aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKTttaW4taGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpO21p''@;'; put 'put ''bi13aWR0aDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKX0uY2xyLXRpbWVsaW5lLXN0ZXAgY2RzLWljb25bc2hhcGU9Y2lyY2xlXSwuY2xyLXRpbWVsaW5lLXN0ZXAgY2xyLWljb25bc2hhcGU9Y2lyY2xlXXtjb2xvcjp2YXIoLS1jbHItdGltZWxpbmUtaW5jb21wbGV0ZS1zdGVwLWNvbG9y''@;'; put 'put ''KX0uY2xyLXRpbWVsaW5lLXN0ZXAgY2RzLWljb25bc2hhcGU9ZG90LWNpcmNsZV0sLmNsci10aW1lbGluZS1zdGVwIGNsci1pY29uW3NoYXBlPWRvdC1jaXJjbGVde2NvbG9yOnZhcigtLWNsci10aW1lbGluZS1jdXJyZW50LXN0ZXAtY29sb3IpfS5jbHItdGltZWxpbmUtc3RlcCBjZHMtaWNv''@;'; put 'put ''bltzaGFwZT1zdWNjZXNzLXN0YW5kYXJkXSwuY2xyLXRpbWVsaW5lLXN0ZXAgY2xyLWljb25bc2hhcGU9c3VjY2Vzcy1zdGFuZGFyZF17Y29sb3I6dmFyKC0tY2xyLXRpbWVsaW5lLXN1Y2Nlc3Mtc3RlcC1jb2xvcil9LmNsci10aW1lbGluZS1zdGVwIGNkcy1pY29uW3NoYXBlPWVycm9yLXN0''@;'; put 'put ''YW5kYXJkXSwuY2xyLXRpbWVsaW5lLXN0ZXAgY2xyLWljb25bc2hhcGU9ZXJyb3Itc3RhbmRhcmRde2NvbG9yOnZhcigtLWNsci10aW1lbGluZS1lcnJvci1zdGVwLWNvbG9yKX0uY2xyLXRpbWVsaW5lLXN0ZXAgY2xyLXNwaW5uZXIuc3Bpbm5lcnttYXJnaW46dmFyKC0tY2RzLWdsb2JhbC1z''@;'; put 'put ''cGFjZS0yKX0uY2xyLXRpbWVsaW5lLXN0ZXAgY2xyLXNwaW5uZXIuc3Bpbm5lciwuY2xyLXRpbWVsaW5lLXN0ZXAgY2xyLXNwaW5uZXIuc3Bpbm5lcjphZnRlciwuY2xyLXRpbWVsaW5lLXN0ZXAgY2xyLXNwaW5uZXIuc3Bpbm5lcjpiZWZvcmV7aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3Bh''@;'; put 'put ''Y2UtMTApO3dpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApO21pbi1oZWlnaHQ6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMCk7bWluLXdpZHRoOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTApfS5jbHItdGltZWxpbmUtc3RlcDpub3QoOmxhc3Qtb2YtdHlwZSkgLmNsci10aW1lbGlu''@;'; put 'put ''ZS1zdGVwLWJvZHk6YmVmb3Jle2NvbnRlbnQ6IiI7YmFja2dyb3VuZDp2YXIoLS1jbHItdGltZWxpbmUtbGluZS1jb2xvcik7aGVpZ2h0OnZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCk7d2lkdGg6Y2FsYygxMDAlIC0gdmFyKC0tY2RzLWdsb2JhbC1zcGFjZS0xMSkg''@;'; put 'put ''KyB2YXIoLS1jbHItdGltZWxpbmUtc3RlcC1pbnRlcm5hbC1zcGFjaW5nKSk7dHJhbnNmb3JtOnRyYW5zbGF0ZShjYWxjKHZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpIC0gdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMjAwKSksY2FsYygtLjUqKHZhcigtLWNkcy1hbGlh''@;'; put 'put ''cy1vYmplY3QtYm9yZGVyLXdpZHRoLTIwMCkgKyB2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKSkpKX0uY2xyLXRpbWVsaW5lLXN0ZXAtaGVhZGVye3doaXRlLXNwYWNlOm5vd3JhcDttYXJnaW4tYm90dG9tOnZhcigtLWNsci10aW1lbGluZS1zdGVwLWludGVybmFsLXNwYWNpbmcpO2NvbG9y''@;'; put 'put ''OnZhcigtLWNsci10aW1lbGluZS1zdGVwLWhlYWRlci1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1mb250LXNpemUpO2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWZvbnQtd2VpZ2h0LW1lZGl1bSk7bGluZS1oZWln''@;'; put 'put ''aHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpfS5jbHItdGltZWxpbmUtc3RlcC1ib2R5e2Rpc3BsYXk6ZmxleDtmbGV4LWRp''@;'; put 'put ''cmVjdGlvbjpjb2x1bW59LmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2RzLWljb24sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2xyLWljb257aGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNyk7d2lkdGg6dmFyKC0tY2RzLWdsb2JhbC1zcGFjZS03KTttaW4td2lkdGg6aW5pdGlhbDtt''@;'; put 'put ''aW4taGVpZ2h0OmluaXRpYWx9LmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2RzLWljb25bc2hhcGU9Y2lyY2xlXSwuY2xyLXRpbWVsaW5lLXN0ZXAtYm9keSBjZHMtaWNvbltzaGFwZT1kb3QtY2lyY2xlXSwuY2xyLXRpbWVsaW5lLXN0ZXAtYm9keSBjZHMtaWNvbltzaGFwZT1zdWNjZXNzLXN0''@;'; put 'put ''YW5kYXJkXSwuY2xyLXRpbWVsaW5lLXN0ZXAtYm9keSBjZHMtaWNvbltzaGFwZT1lcnJvci1zdGFuZGFyZF0sLmNsci10aW1lbGluZS1zdGVwLWJvZHkgY2xyLWljb25bc2hhcGU9Y2lyY2xlXSwuY2xyLXRpbWVsaW5lLXN0ZXAtYm9keSBjbHItaWNvbltzaGFwZT1kb3QtY2lyY2xlXSwuY2xy''@;'; put 'put ''LXRpbWVsaW5lLXN0ZXAtYm9keSBjbHItaWNvbltzaGFwZT1zdWNjZXNzLXN0YW5kYXJkXSwuY2xyLXRpbWVsaW5lLXN0ZXAtYm9keSBjbHItaWNvbltzaGFwZT1lcnJvci1zdGFuZGFyZF17Y29sb3I6aW5oZXJpdH0uY2xyLXRpbWVsaW5lLXN0ZXAtdGl0bGV7bWFyZ2luOnZhcigtLWNsci10''@;'; put 'put ''aW1lbGluZS1zdGVwLWludGVybmFsLXNwYWNpbmcpIDA7Y29sb3I6dmFyKC0tY2xyLXRpbWVsaW5lLXN0ZXAtdGl0bGUtY29sb3IpO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jbHItdGltZWxpbmUt''@;'; put 'put ''c3RlcC10aXRsZS1mb250LXdlaWdodCk7bGluZS1oZWlnaHQ6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktbGV0dGVyLXNwYWNpbmcpfS5jbHItdGltZWxp''@;'; put 'put ''bmUtc3RlcC1kZXNjcmlwdGlvbntjb2xvcjp2YXIoLS1jbHItdGltZWxpbmUtc3RlcC1kZXNjcmlwdGlvbi1jb2xvcik7Zm9udC1zaXplOnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LWNhcHRpb24tZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1j''@;'; put 'put ''YXB0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxpbmUtaGVpZ2h0KTtsZXR0ZXItc3BhY2luZzp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jYXB0aW9uLWxldHRlci1zcGFjaW5nKX0uY2xyLXRpbWVsaW5lLXN0ZXAt''@;'; put 'put ''ZGVzY3JpcHRpb24gYnV0dG9ue2Rpc3BsYXk6YmxvY2s7bWFyZ2luLXRvcDp2YXIoLS1jbHItdGltZWxpbmUtc3RlcC1pbnRlcm5hbC1zcGFjaW5nKX0uY2xyLXRpbWVsaW5lLXN0ZXAtZGVzY3JpcHRpb24gaW1ne3dpZHRoOjEwMCU7bWFyZ2luLXRvcDp2YXIoLS1jZHMtZ2xvYmFsLXNwYWNl''@;'; put 'put ''LTUpfS5jbHItdGltZWxpbmUuY2xyLXRpbWVsaW5lLXZlcnRpY2Fse2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjttaW4td2lkdGg6Y2FsYygzMjAqKDFyZW0vdmFyKC0tY2RzLWdsb2JhbC1iYXNlKSkpfS5jbHItdGltZWxpbmUuY2xyLXRpbWVsaW5lLXZlcnRpY2FsIC5jbHItdGltZWxpbmUtc3Rl''@;'; put 'put ''cHtmbGV4LWRpcmVjdGlvbjpyb3c7bWFyZ2luLWxlZnQ6MDtwb3NpdGlvbjpyZWxhdGl2ZX0uY2xyLXRpbWVsaW5lLmNsci10aW1lbGluZS12ZXJ0aWNhbCAuY2xyLXRpbWVsaW5lLXN0ZXA6bm90KDpsYXN0LW9mLXR5cGUpe21hcmdpbi1ib3R0b206dmFyKC0tY2xyLXRpbWVsaW5lLXN0ZXAt''@;'; put 'put ''aW50ZXJuYWwtc3BhY2luZyl9LmNsci10aW1lbGluZS5jbHItdGltZWxpbmUtdmVydGljYWwgLmNsci10aW1lbGluZS1zdGVwOm5vdCg6bGFzdC1vZi10eXBlKSAuY2xyLXRpbWVsaW5lLXN0ZXAtYm9keTpiZWZvcmV7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6dmFyKC0tY2RzLWFsaWFzLW9i''@;'; put 'put ''amVjdC1ib3JkZXItd2lkdGgtMjAwKTtoZWlnaHQ6Y2FsYygxMDAlIC0gKC41KnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtMTEpICsgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMjAwKSkpO3RyYW5zZm9ybTp0cmFuc2xhdGUoY2FsYygtLjUqKHZhcigtLWNkcy1nbG9iYWwt''@;'; put 'put ''c3BhY2UtMTEpICsgdmFyKC0tY2RzLWFsaWFzLW9iamVjdC1ib3JkZXItd2lkdGgtMjAwKSkgLSB2YXIoLS1jbHItdGltZWxpbmUtc3RlcC1pbnRlcm5hbC1zcGFjaW5nKSksY2FsYyh2YXIoLS1jZHMtZ2xvYmFsLXNwYWNlLTExKSAtIHZhcigtLWNkcy1hbGlhcy1vYmplY3QtYm9yZGVyLXdp''@;'; put 'put ''ZHRoLTIwMCkpKX0uY2xyLXRpbWVsaW5lLmNsci10aW1lbGluZS12ZXJ0aWNhbCAuY2xyLXRpbWVsaW5lLXN0ZXAtaGVhZGVye3RleHQtYWxpZ246cmlnaHQ7d2hpdGUtc3BhY2U6bm9ybWFsO3dvcmQtYnJlYWs6YnJlYWstd29yZDt3aWR0aDpjYWxjKDYwKigxcmVtL3ZhcigtLWNkcy1nbG9i''@;'; put 'put ''YWwtYmFzZSkpKTttaW4td2lkdGg6Y2FsYyg2MCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWFyZ2luOnZhcigtLWNsci10aW1lbGluZS1zdGVwLWludGVybmFsLXNwYWNpbmcpIHZhcigtLWNsci10aW1lbGluZS1zdGVwLWludGVybmFsLXNwYWNpbmcpIDAgMH0uY2xyLXRpbWVs''@;'; put 'put ''aW5lLmNsci10aW1lbGluZS12ZXJ0aWNhbCAuY2xyLXRpbWVsaW5lLXN0ZXAtYm9keXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO21pbi13aWR0aDpjYWxjKDE3OCooMXJlbS92YXIoLS1jZHMtZ2xvYmFsLWJhc2UpKSk7bWFyZ2luLWxlZnQ6dmFyKC0tY2xyLXRpbWVsaW5l''@;'; put 'put ''LXN0ZXAtaW50ZXJuYWwtc3BhY2luZyl9OnJvb3QgW2Nkcy10aGVtZV17LS1jbHItYnJlYWRjcnVtYi1pdGVtLXNwYWNlOnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtNSl9LmNsci1icmVhZGNydW1iLW1lbnV7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO2FsaWduLWl0ZW1zOmNlbnRlcn0u''@;'; put 'put ''Y2xyLWJyZWFkY3J1bWItbWVudSAuY2xyLWJyZWFkY3J1bWItaXRlbXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2ZvbnQtc2l6ZTp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1zZWNvbmRhcnktZm9udC1zaXplKTtmb250LXdlaWdodDp2YXIoLS1jZHMtYWxpYXMtdHlwb2dy''@;'; put 'put ''YXBoeS1zZWNvbmRhcnktZm9udC13ZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1hbGlhcy10eXBvZ3JhcGh5LXNlY29uZGFyeS1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktc2Vjb25kYXJ5LWxldHRlci1zcGFjaW5nKX0uY2xyLWJy''@;'; put 'put ''ZWFkY3J1bWItbWVudSAuY2xyLWJyZWFkY3J1bWItaXRlbSBhe3RleHQtZGVjb3JhdGlvbjpub25lO3RleHQtYWxpZ246Y2VudGVyO2xpbmUtaGVpZ2h0OnZhcigtLWNkcy1nbG9iYWwtc3BhY2UtOSl9LmNsci1icmVhZGNydW1iLW1lbnUgLmNsci1icmVhZGNydW1iLWl0ZW06bm90KDpsYXN0''@;'; put 'put ''LWNoaWxkKTphZnRlcntjb250ZW50OiIvIjttYXJnaW46MCB2YXIoLS1jbHItYnJlYWRjcnVtYi1pdGVtLXNwYWNlKTtjb2xvcjp2YXIoLS1jZHMtYWxpYXMtdHlwb2dyYXBoeS1jb2xvci00MDApfS5jbHItYnJlYWRjcnVtYi1tZW51IC5jbHItYnJlYWRjcnVtYi1pdGVtOmxhc3QtY2hpbGR7''@;'; put 'put ''Y29sb3I6dmFyKC0tY2RzLWFsaWFzLXR5cG9ncmFwaHktY29sb3ItNDAwKX0uY2xyLWJyZWFkY3J1bWItbWVudSAuY2xyLWJyZWFkY3J1bWItZXhwYW5ke21hcmdpbjowO3BhZGRpbmc6MDtnYXA6MDttaW4td2lkdGg6LW1vei1maXQtY29udGVudDttaW4td2lkdGg6Zml0LWNvbnRlbnR9QGZv''@;'; put 'put ''bnQtZmFjZXtmb250LWZhbWlseTpNZXRyb3BvbGlzO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi9mb250LXdvZmY7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R1JnQUJBQUFBQUZRZ0FCTUFBQUFBbThBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJHUmxSTkFBQUJxQUFBQUJ3QUFB''@;'; put 'put ''QWNmTkg1NWtkRVJVWUFBQUhFQUFBQVRRQUFBR0lIMVFmOFIxQlBVd0FBQWhRQUFBY2FBQUFPZGp5K2VqbEhVMVZDQUFBSk1BQUFBQ0FBQUFBZ1JIWk1kVTlUTHpJQUFBbFFBQUFBVFFBQUFHQm9QcXpyWTIxaGNBQUFDYUFBQUFKc0FBQURubmRERDdGamRuUWdBQUFNREFBQUFEQUFBQUE4RVk0''@;'; put 'put ''QmpHWndaMjBBQUF3OEFBQUdPZ0FBRFJaMlpIMTJaMkZ6Y0FBQUVuZ0FBQUFJQUFBQUNBQUFBQkJuYkhsbUFBQVNnQUFBTm5NQUFHZ1V4RklnTjJobFlXUUFBRWowQUFBQU5nQUFBRFlMWVlnVWFHaGxZUUFBU1N3QUFBQWhBQUFBSkFkMkJESm9iWFI0QUFCSlVBQUFBb2dBQUFUdXVQSS9GR3h2''@;'; put 'put ''WTJFQUFFdllBQUFDY2dBQUFucUphbkJ3YldGNGNBQUFUa3dBQUFBZ0FBQUFJQUtFQWVsdVlXMWxBQUJPYkFBQUFZSUFBQU5XTGRDRTlYQnZjM1FBQUUvd0FBQURvUUFBQmlHWEZqMktjSEpsY0FBQVU1UUFBQUNCQUFBQWpSbFFBaEIzWldKbUFBQlVHQUFBQUFZQUFBQUc5bmhZbUFBQUFBRUFB''@;'; put 'put ''QUFBMUZHMWFnQUFBQURUd1oyR0FBQUFBTlMrcHZWNDJnMk1RUXFFUUJERUVrZjBNTFBvZjd5cEwvRG9mWGZWL3ovQUlnUkMwVFFDTFI2Y2RGUmtqVnNvN0h6VHYxRDRCN200MDQ4RE9sb3BObHY2NDVTZVhYTFQ1MXNYelNhK1czQUYzQUFBQUhqYWpWY0JiRmJWRmY3T3VmZSt2LzBMV0VvTENC''@;'; put 'put ''MERVaGt4VFdXRVNVVkdpV01Gc1ZQRG1FRUhabHVjWTYxUTdCalppREZLSFpxbDZZekREcEUwcUF5TU5zQlFzU0t5cHF2T09VZGtZNlloWUZ3SHlEWW0wN25GQ1BMMnZmTis2RjlvdC9HRmo4TzU5OTE3enpuZjdibUZBTWhpTWhaQzV0WFdMVVlCUEQySVl6aitJMUM0aG04M3JVVHBpbTgyTmFC''@;'; put 'put ''OFJjT0tCczRHL2Nsb09pTmh4Kyt5R0kwSm1HSWVod3JVdVk1ME5GcGxxMHJVaW9nZnlmRFYvR0tjK1FKS0wwQlFHN2VTQTJhakJaOGlsbkZRSG9QelpLd2NRUkdHOFdSL2o3dmo3WEZ2ZkJSRC9Jay9HSExrdDRONis3aDMvditQeHo4ZGNvWDNoaHdaK2p4L2pQY09NYkk5N292M0piakkzOHUv''@;'; put 'put ''djBrdzJCNXhLN09rbU1oTVQyRzJQa2NvcWdpSHF3aVA2VVRBRjRnSU00a01yaUVLTUlzb1pHNW5zMUpyQ01IOStCRm5Qa2dFWnJ5Ri9oY0l3WXVFNENWQ2NaRHcrQVBoY1pRSStETVI0VGdSNFQwaXdta2lndytJRE00UWhhemVwMXd0SnJKU0xNVW9sQklwSVpkS0tYa2NLNXZsMnRPb2tncCtj''@;'; put 'put ''eVVoZHU3MHhHb25kblppYnljT21FY1VvSllveEFJaWkwVkVFUnJ4ZmE2UVJCSlpKSkZGRXZBVFBNcjViVVFoZm9aTm5QOEVmczc1MjRraTdDUXkyRVVVNEJkRUJydUpBanhIWlBBOFVZQTlSQ0U2aVVMc0o3TG9JckxvSnJMb0liSjRsUkQ4bWhETFRvUjNpQ0w4aVVqem9wWVh0Yng0eTB1d3ZB''@;'; put 'put ''VExpN2U4ZU11TGx6RXlodm02WEM0bkp6a0tYTFdLR1pyQ0dsZXh0dE5aMDVuTXpDeG1wQkdyY0RlYThEMnNaaTN2eHpvMDR3Rm00VUZHdjVNUlBjZEt2c2dLSG1UbGpySml4MW1wMHp6SkdidFp4ZHkzTkxsZmVxL2R3OWVraVhFUHA3cjJVWGV0OGI4R1VhdU5ESFlITG95Y1NqRElsNmVIdkJ1''@;'; put 'put ''bnppdWU5L3BvM0J3M1h6eVMzcnA0Yzd4NTBKRy8yRGVLY3RPRW1DWVVYeU1jYmlVOGJpTUNsaElSRmZFbzV5UnFFRk9EbWhvVUhVU0VIVVJrbFJhcnRGaWx4U290VmxmRk1jTGhCT0Z3a25BNFN3U2NJeUlaS1NOWjExRXlpbHdtWmVTa29tSVZGUmt2NDdtK29oS1hFVVVZU1F3enBZc3BYVTNw''@;'; put 'put ''THFmMCtVUyswcjNGRStYRmt6R2x1NXpTK3pYdUxTcHZVV1VzcXZOS1R6V2VxbnN2TWJTdWsyaTlhVlp6RVNiS2RSWm54dlRyVEwrYWl6bFJzZVlpVDdTc2VmSG5LOXBaRmpJeVRhN2g3c2xQcjFwR3VJajF1cFZ4TFdVa2JZeGtJeDVqTkUvZ1NUeUZyWXhvT3lQWndkdll5ZE4yOFpROVBOMHgx''@;'; put 'put ''dUFrVDNhT0p4akYzY1p3bC9GY2NZTHBXVEhDT2txSnFhT0V1OVRRRXJOcjJJbU9SQlBJZmN4L3Q2eVhGbmxFTmtxN2JKVm5aSmZza1gzU0xhL0xBVGtraCtWZE9TR241RVA1V002cDE2d1c2Mmd0MThrNlZhdDBoczdTdVZxcmRicElsK2p0ZW9mVzZ5cGRvL2ZvT24xSVczV0RidEl0dWswN2RM''@;'; put 'put ''ZDI2bjd0MFRmMExYMWJqMmlmbnRUMzlTUDl4TUZGYnBncmNXUGRCRmZocm5UVDNOVnV0cnZPTFhBM3VzWHVOdmNOZDZlN3l6VzVIN2g3M1FQdXgrNWgxK1kydXlmZDAyNkhlOTd0ZFYzdU5mZW0rNzNyZGUrNFkrNnY3aC91Mys2c1YxL2dSL2hTUDg1UDlGTjhwWi91cS8wY1A4OHY5RGY3Vy94''@;'; put 'put ''Uy95Mi8zSy8wcS8xYWY1OWY3MXY4STM2amIvZGIvVE4rbDkvajkvbHUvN28vNEEvNXcvNWRmOEtmOGgvNmovMjU0RU0yRklmUm9UeE1EbE5EVlpnUlpvVzVvVGJVaFVWaFNiZzkzQkhxdzZxd0p0d1Qxb1dIUW12WUVEYUZMV0ZiNkFpN1EyZllIM3JDRytHdDhIWTRFdnJDeWZCKytDaDhFaUdL''@;'; put 'put ''b21HOEhVMjZrOXhzUE4rNHhuaER3bWcwYmpQUDJuNS9qbTh3cmpTKzFuaGx3bHBtOXZYR2M0d3JsRDlUNVFyanE0eXJFMGE5Y2J1K1RHNHdmNlh4YlBQM0dwOHh6MFRqeDQwbkdVZkdDMXc5K1NuanBzRlpmNVVYWTQzNUwyRjgyWGlMY1dNL3k3STBkclB2TW43VmVNT2xuR2JBN0V2NWV1TUs3''@;'; put 'put ''ZnBmck04T3lGWFhZSXk1eG84YjEvY3pzOWRsMmZ2dm5PYXphMUNlbE1kTmVXY2VZT2ZWdE5uOFY1Zy8zNTV2T1d3eGUxbGU1dE1vQnRnMm1xb2kzNTltdFRxMWJVNnFtYlE2YWRTcFBuTjJ6cC9NYVRPNzNhMDVyOTZjeGc2YTNaUFl1WnFtR1Z1YlUzSzR5SitlSWMzYkFiUFhXbzBPSmZOZHFz''@;'; put 'put ''QWJiSzllbTJNM0l0WHRBSCtsMldkeU5kcDVRZFg1L3ZRR1hadW5tYlFpK2ZaV3M3K2UrbTIrM1FzdE03L3BJYWUwU1huMkhPUElQRVBaZnpQN2JvdXUxdXczemM1ZnVTYitKYmtxM245UnBmSjNyTTdkN3E3L2d3Zk9WSHpXM3FYZ3Uyc3FzNUs4VGoyN2RpVzdZUExDanZCNXZzUXltSUZxOXJD''@;'; put 'put ''a2M0OWczLzRpZTNyU3VVZmFHN1hFT3Zjby9sNjFrSDJvamlqRFRleHpvOW5wYnVIdlBrdUljdXZsbjJIWFc4YXUxY2kzMjBSN3ZjMWtSMi9uZWx2WStiNWl2ZStyN0g0dnMwTytnZ1A0RGw5MHAvRkRlMVZ1eEQ4bDRERjI0dkhvc0o3YXlmT0tYR2EvbTBXUWVMMnA4RDdjU1Y3UGJsZUVzZHly''@;'; put 'put ''Z2hGTnc5VTg5WFU4NVkxWXpORVhUTHUvTXo1c2JIZUdHdTNuZzhiTGpiY1o5eG1mTlM3Q2w3alBjbnhYTWxJZ2haS1ZJaGt1SXk0OTBYOEF0bEtYV0FBQUFBRUFBQUFLQUJ3QUhnQUJSRVpNVkFBSUFBUUFBQUFBLy84QUFBQUFBQUI0Mm1OZ1pySmduTURBeXNEQzFNVVV3Y0RBNEEyaEdlTVlS''@;'; put 'put ''QmpOZ0h5Z0ZCeXdNeUNCVU85d1B3WUhCZ1hWUDh6Uy80MFpHSmlQTXFvcU1EQk1Cc2t4c1RLdEIxSUtERXdBeGxjS05nQUFBSGphdFpOWlVJNVJITVovLzdkOUVTb1U5ZmIyYWROR29oUkY5cVhJdnBTczJiS3YyUnJyRUVORlVzaWVKS01aRTFOVHRodnV1RFZqakw3UGxWdnVEQjNIVjB3enpM''@;'; put 'put ''aHladDV6M25QT25PZWNlWjdmSDNDaDZ3dEJkSTlVNnBrNDU2NVNyTWNsak1PTmdaUndpenJ1MGtnVHpiVFFKaDRTSUlNa1RBWkxuQ1JKcXFSTHBreVZITW1UUWltU0VpUFZlR1c4ZDRreWo1dXQ1aFB6aStWdUJWckJWcWhsczZLc1lWYTZkZC9tSC9sTktYMkh4WTBlMm85cDQ1bjRTbjh4eFNh''@;'; put 'put ''eGtpZ3BraVlaa2lYWmtpc0Zza0UyYSsyWHhsdXRmY2hzTWR2Tno1WmhCVmhCVm9oVGU2aVY5a3RiZlZRdjFIUDFWTFdyVnZWSU5hdUhxa2sxcWdaVnIrclVOVldyYWxTMXFsS1Zxa0tWcVRPcVZKM29mTk9aMVpuMC9aT2ozRkhneUhmRTJBZmEvZXcrZGkrN205M28rTnJ4dWVQd2g1QjN5VjFl''@;'; put 'put ''L2FmbWJuZzdrK0NQV3dTais4LzRoMGJYU1JkY2RYYnVlT0NKRjk3NDRFc3YvT2hOSC9yaVR3Q0I5S00vQXdnaVdHYzhTS2NlaWttWVRpUWNHNE9KSUpJb29vbGhDTEhFRVU4Q2lReGxHRWtNSjVrUmpDU0ZWRWFSUmpxakdVTUdtWXpWekdReG5nbE1aQktUbWNKVXBqR2RHV1NUdzB4bWtjdHM1''@;'; put 'put ''akNYZWN4bkFRdFp4R0pOV2g3NUxLV0FaU3huaFg3L0RuYXltMklPY1p6VGxGTkdCZWM1UnlWVlZIT1JHaTV4aGN2VWNwWHIzTlFVL1dUME5nMmFwWHVhcHA5dEZhdTFIZEZzNEd5M04rdFpvL3RkblBqdFZ1RmZITHhBUFp0WjJXTmxMWnNrUm85YjJNNHg3RGdrWFBNWktWRzZBaUs0bzNjZW9H''@;'; put 'put ''bVdCRjBQOGQxbmlweGh4TEtOdld4bEgzczR3RUZkUy9zNXdsRzlkWmhTVG5HUzE3cWFlckZPdk1SYmZOZ29mcHAvengrUXphcm9lTnBqWU1BQ0hJSFFrc0dTYVQwREE5TnVKbFlHaHY4aHpOTC9qWmwyLy8vQ2RJQko4UCtYLzM0Z1BnRElQUTBpZU5xdFZtbDMwMFlVbGJ4bEl4dFphRkZMeDB5''@;'; put 'put ''Y3B0SElwQlNDQVFOQml1MUN1amhiSzBGcHBUaEo5d1c2MFgxZjhLOTVjdHB6NkRkK1d1OGIyU2FCaEo3MjFCLzA3c3k3TTIrYmVXTXlsQ0JqM2E4RVFpemROWWFXbHlpM2VzMm5VeGJOQk9HMmFLNzdsQ3BFZi9VYXZVYWpJVGVzZko2TWdBeFBMcllNMC9CQzF5RlRrUWkzSFVvcHNTbm9YcDB5''@;'; put 'put ''MDlkYU0yYS9WMmxVS0ZmeDg1UXVCQ3ZYL2J6TVcwMWZVTDJPcVlYQUVsUmlWQW9DRVNmc2FKTm1NTlVlQ1pwai9Sd3o3OVY5QVcrYWthRCt1aDlpUnJDdW45RThvL25RQ29NZ3NNaTBnMENTVWZlM2dzQ2h0QkxZSjFPSTRGbldxL3VVbFM3bHBJczRBakpEaHpKS3dpK3hHV2MzWE1FYTl0aEtQ''@;'; put 'put ''T0F2U0pVR3BXZnpVSHFpS1pvd0VNOWxDd2h5MlEvclZyUVMrRExJQjRJV1ZuM29MQTZ0YmQraHJLSWV6MjRacVNSVE9ReWxLNUZ4NlVhVTJ0Z21zd0VEbEoxMXFFY0pkblhBYTl6TkdCdUNkNkNGTUdCS3VLaGQ3Vld0bmdIRHE3aXorVzd1KzlUZVd2UW51NWcyWFBBUWR5Z3FUUmx4WFhTK0RJ''@;'; put 'put ''dHpTc0tDa3gwdlVSMFpMU1ltQmc1WVRsTllaVmozUTl1OTZKRFNBYlVHK3RNb3RpWHp3V3plb1VFVnAxSVYyb3dXSFJwU0lBcEJoN3lydkJ4QXVnRU44bWdGbzBHTUhCckdOaU02SlFJWmFNQXVEWG1oYUlhQ2hwQTBoMGJVMHBvZlp6WVhneWthM0pLM0hScFZTOHYrMG1veWFlVXhQNmJuRDZ2''@;'; put 'put ''WUdQYlcvWGg0R0FXTVhCcTIrY3ppSkx2eElmNE00a1BtSkNxUkx0VDltSk9IYU4wbTZzdG1aL01TeXpyWVN2UzhCRmVCWndKRVVvUC9OY3p1TGRVQkJZd05ZMHdpV3g0WkYxdW1hZXBhalNrak5sS1ZOWitHcFNzcU5JREQxdy9Eb1N0Q21QOXpkTlEwaGd6WGJZYng0WnhOZDJ6ck9OSTBqdGpH''@;'; put 'put ''YkljbVZHeXluRVNlV1I1UmNacmxZeXJPc0h4Y3hWbVdSMVdjWTJtcHVJZmxFeXJ1WmZta2l2dFlQcU5rSisrVUM1RmhLWXBrM3VBTDR0RHNMdVZrVjNrelVkcTdsTk5kNWExRWVVd1pOR2ovaC9pZVFuekg0SmRBZkN6emlJL2xjY1RIVWlJK2xsT0lqMlVCOGJHY1Jud3NuMFo4TEdjUUgwdWxS''@;'; put 'put ''RmtmVTBmQjdHZ29QSGJCMDZYRTFWTjhWb3VLSEpzYzNNSVR1QUExY1VBVlpWU1MzQkVmeWJBNCtybHVhYzFKT2pFYlo4MkppbzlHeGdFK3V6c3pENnRQS25GYSsvc2NlR2JsWVNPNG5mc2E1M2xqOGcrRGY0c1haU2srYVU1d2NLZVFBSGk4djhPNEZWSEpvZE9xZUtUczBQdy9VWEdDRzZDZlFV''@;'; put 'put ''Mk15WUlvaWhyZmZPVHlTck5aa3pXMENoOVBCRG9yMnNHOGFVNk1JNlVsdEtoSkdnRXRnNjVaMERUcTgreXRabEVLVVc1aXY3TjdLYUtZN0VVWnpJQXBLT1Ntc2JEczc2UkVXbGc3cWVuMDBjRGxSdHFMbml3MVcxWnhoYjBINzJQSXpTeDVOMUpldUNrcDdVV2JVS2U4eUFJT3VaRTl1Q2FDVzJq''@;'; put 'put ''dnNvcGlTbGlvSWo0SWJRWDc3V05FSmkwemd5NkJJbVJ4c3JJUDdZb2RPYUtDZGdMZmV0SXE3OXRDN2M5MThpQXdtNTF1NTBHV2thTHpYUlgxYW4xVjF0Z29WNi9jVFI4SDA4NndzZVlYUlJsUExudmZuaFRzVjZjRXVRSkdWM2EvN2tueDlqdlc3VXBKUHRzWGRubmlkVW9WOGwrQUIwUHVsUGNp''@;'; put 'put ''R2tXUnMxaWxFYyt2VzNneVJUa294a1Z6SEJmMDBoN3RpbFhmbzEzWWQrMmpWbHhXVkxJZlpkQlZkTlp1d2pjK1h3anFRQ29LV3FRaVZuZzZaRDZiblpyd3NaUzRMRVhjczJUWFJmUWRQQ0VkNHI4NHhMWC82OXh5Rk55aXloSmRhTmNKeVFkdEh5dm9yU1c3azRjcVJtZnR2R3hub2gxSk4rZ2Fn''@;'; put 'put ''cDVJTGpqK1h1QXVqeFhwRk83ejh3Zk1YOEYyNXZnWW5RYStxdWdNeEJMbnJZSUVpeXJlMGs2bVhsQjhoR2tKOEVYVlFyTUNlQW5BWlBDeWFwbDZwZzZnWjVhWlV3RllZUTZEVmVZd1dHTU9nM1cxZzY1M0dlZ1ZJRk9qVjlXT21jejVRTWxjd0R5VDBUWG1hWFNkZVJxOXhqeU5ickJORCtCMXRz''@;'; put 'put ''bmdEYmJKSUdTYkRDTG1WQUUybU1PZ3dSd0dtOHhoc0tYOWNvRzJ0VitNM3RSK01YcEwrOFhvYmUwWG8zZTBYNHplMVg0eGVrLzd4ZWg5NVBoY3Q0QWY2QkZkQlB3d2daY0FQK0trNjlFQ1JqZnhqTFk1dHhMSW5JODF4Mnh6UHNIaTg5MWRQOVVqdmVLekJQS0t6eFBJOU52WXAwMzRJb0ZNK0RL''@;'; put 'put ''QlRQZ0szSEozdjYvMVNOTy9TU0RUdjAwZzA3L0R5amJoK3dReTRZY0VNdUZIY0M5MDkvdEpqelQ5NXdReS9aY0VNdjFYckd3VGZrc2dFMzVQSUJQdXFKMitUS3J6WjlXMXFYZUwwbFAxMjUxMzJQa2JaVE82TEFBQUFBRUFBZi8vQUE5NDJyVjlDWGhiVjVub09lZEt1cElsMmI1YUxjdWJyTlhX''@;'; put 'put ''YW11enZNalhTN3d2Y2J6RlNSeG5jNXkwS1YzU2xpNGhwTFFORkFxVUFXWllocjR1MEtGTVM1SzJkS0h0RkNoUTJxSExERytBZWNNSDVRMHpMRy9ZQmpvd2JYMDkvem4zWGxtMjdLYndmUysxSlB2cXJQLzU5K1VVbGFIRnRTVCtGT2RHSEtwQWR1UkNYdFNFMGlpSHV0QVFjb21PM254bmV6YVRi''@;'; put 'put ''QTc2NnF1ckhFS2xRVU5RV1NLczlRZ2UzcDYwZSszSnREZWRUUFBzazRkZjFhZjBHZjJrMzhDVHRQcTcwb1oxeUNiVCtGUFNzN2pyUDN0NjcrdnR2ZSsrM2thUHA3ZTM5MGl2NTliN2pqUjZqbmp1dSs4K3o1RWp0dzRNM0hkMG9PRkY3bWQ5SHI4SGZtNDYxamd3NERzSXZ3MTRPbnNiajl6UTVv''@;'; put 'put ''enZ2UExLQjYrOGNtZDh4UlAzd0E5Q0JFMnYvUjZkSStmWTN2eGlJOElZTFNLRXlrY1JJZHlTQm5PY2t4dlRhRFFWbW5LL1VLbmxuV0Zya3ZNNkF1bFVKdG5xc050MDN2M0Q1b1RHN2JaWnE2dXQ1SnhrZWRGdHM3amRGcHNib2JVMU5JZ2Z4V1BrazVXTnFBeWhTZzdlSDBGMDNpQzhYUWZ6dWxF''@;'; put 'put ''OXVtSDB2SGZuYmpGVW9TTkl5eEZNRUY0MllvT2hmTFM4MHN6eHZIN1JWRWIwZW1GVWd3bXBJR051TVVBZnNDK1JuajlhMms5cHVDRFdJVlJmVjFzRDA3aXJYVlZPV0xCVktQemphOE9ZVC9KZTNwdGxyMnlTdlpJOGUvSDBTL3liekkzbUcyTnRzYnZnZGEzNTJzdzd6ZGNwZjkxZ2Z2aXV6RjM0''@;'; put 'put ''YTk5TlB3Yi8wdDlOUHc3LzB0OEZTTWJXSGlVUjhnZmtRU0VVUjUxaUx1YjMxZFZXdTV3MnM2bk1ZT2FJRGlPT2pDRENrWnNSUnZnV0NtYTBCSEJ4b3JHbXBxWjRVOXhoRnl4YTNoSDJsV1BBa1hRTUI3TU9weERENlZRZVp3RlpIRTRlbmdsMTJJNGN6blE1ZkdUU3FVQlFJSkhVa1IxaXo4bG9h''@;'; put 'put ''T2Z4b3dkYTkrYkVLeFpEdnBubzVlK1E5b3M3T2thd2VXWjA2dWE1Tk5mZHkyY2pyVHNyY1dYMXJxSGtiRnJYMldXY2JmVkdlT2xOOSs1SlhKTzIvWjRmYnBXeUk2bVdEb2YwSnF4TmkrSnIvMFgrbFh3Sk1NVUtweFpISGVpRjBmTlZjSEpoSTlhV1lhelQ0aFdrUTNxRFRuOE1hVFJvaVdDS1NX''@;'; put 'put ''WTRFbTdKeEJPT3ErREczS1BuZzlBbC9wWmRFRFJsL2ZnbEUrWjVKdzlubnR5aUJ5SFFsblpEVy9kYVdCQURpVVJEZzgyR1VLSWowWjVKTmNRYllxR0FyZDVXVjExbHRRaVZzSm55UURsdkQxdGs0Q1piQWFhMmN1ekZTZXkxVUtCNkczVjJteU9KTm4yZngrdmYvZlZBTURRWWlRN0NleFIvcUZO''@;'; put 'put ''cTdyd20xeDZKdExXSDhkUkFLRGdZbGIrS3RkR0h1UWhlakU3RVczWkdvNU9KbG9rbzNyVTZoVDg0a000TURtVFRBOUx4NkVSTFlpSVduWXkzVEVZVEE1bjBJUDBLOXNlaHByWGZreFBrTVlCOUdQaFBYdXlJUi8xMU5XNlgwNERMT0ZMUGtJcGlQbDRDTW5hTWFvdXdLaEpwYUlpa0k2bUdjRU56''@;'; put 'put ''dUZFSG1LVU42cnlOZEUvWjRvM0JOODVNMXFuam5ZanV6Q252MHBJTkJPSFBPcHdraWFWOUp6dVA1Tzd4MUVYR0U1SGg4TnhjNXNwSVV5YVJ2RnI2ZEZkdC9VUmZyamswZmpwL3RubW9tVCt3M0xLUXUya2dPdWlMaklUREk4MzVVWi80VHZGQTFmSGhhOGp4OWxoTlY2Z2hHMjd1V2owM2Q4dFkx''@;'; put 'put ''LzZRNkFWaUFINkJQa0UraVV3b09ucmVBWWhpcEN5Sm5TOEdKS2hFOU05NStCTXZVdElaWDNqRTdpT3dIV3VCSTFWZzcyeDVsU0E0eS9rZy9vOUQzc29xcCtBOWxJSFcrYlU1SENOUHdkaTZoMDFhbkFnek5wWjFBdm5ZblB6bkw3bmtzSGR1NFp4MzE0OXZ1T0hIdS8yN3YzN1ZEeTRFWUNLZzV6''@;'; put 'put ''bGNwL2JUUVQ4bkk3YXNETERZdVlVNTcySG9mTXVGSDF6MWRlakh1dE4rSGZnbTRIMWZRck5JRkx2OEdKUEpIZDJ4UnBkTnEwZDRGOVlpYm9URFdJT1JGcU1WSGRacXlSSkZhTzBZN0c0V3pRd1BaZEpOd2RvYU4wK3hFMWJhalhuZ0JuQnFRZmdqbStuR3dZRDhXN0xWNmFqSHdTSUlaTExBSnRo''@;'; put 'put ''enV3MDZWV0NIMDhGK1o3M2hQeWRqM1Y4MkczVGVpb1p5cmNiTWE4cWMwWEFrWmkvVDhHYXR4dExzMHhuTXdLejB1c3BLTG1UVGFzMDhWeWFFZFJHbkkrd280M2l6VHVNSU9ZdzZ2ZG1BYnpMcmExcWFhOHhWUEdmU2E0eThXUkFzRmlOdjFPaE5YRmxqVFhOTGpkNXMxanRhNDZaeXJzSEltWFJh''@;'; put 'put ''RTE4bUVHZ2ltSGlUVm1maXloc3MrbmlyUTIrbUI0djYwSEZTVGxMSWlBS0FFeG9PYTJZQmw0RXpZQTR0QTduVG85ZmdjY2JESzNWOGRSaDdxZlJNVXltYUpPWGZ6RC8zWFA2Yk9QNU4rZ3NkYjNMdE5Ib003VVRseUNrQzZhSkJGYVdBTUh3V2lqMkE4NDNySW8yZkRKcXRJTkdjTmZXaDQ5RUVG''@;'; put 'put ''VzMrdWxxeGxZN1ZobjZMTzNBTXFMRkt0RE5rbkYxSFJxR1NvYUxIN21uRG5MU0tZMTFzUDhNZ1l6OEg4eHVwdGtDZkFKZkQySW5wUVJ0Um1ZK0RBeTZXcUVjVWFXb3FTRks4OXB1MVIvSEh5VTloWGtFc3A0T0M1TUJYeXhOU1ZvVW5CNlM3QjhoUDMzd1pNZm5hQWJ6aUdIa1MyRnM5aW9oTmdG''@;'; put 'put ''aHN4ekpYd0NEWTJRSXFnWjRxNnl2cnFoeU1EK3BnSVpyTmZJNmtVekhzYmFSRUFnd0E0M2NQRHI1N2F1cjA0T0RwcWZ6QlRPWmdQbjhva3ptVU4rMjlaMlhsN3IxNzcxNVp1V2R2NTlqWnVkbjNqbzZlblpzN084WmdVQTN2YjRDODF5RzNXQVZIeVFHOFJtU3VqUUUveHdRckF4MGZ6Q1lGNzVP''@;'; put 'put ''MzFENllFc21CMlphVHExT0k5VytCVGVsaFB5N1VMQWFOWmJBZHdBWkNSaGc0R2J1akNzc2lZakpHY1BxQ0dyNHFuUFZUL2tWWHp3Y0xISzRDdy9tMHdLbjBOdTFvdW1KbkxIcjljT2VoM05qTXQvQkpxYW50WC9LWHBwcDZBNWY3eGY3VVlxN3YxTkNEOGhtR0FKNWFtRCtNdXNWT2R6WE01UU9D''@;'; put 'put ''aGhYQU1rQ1NRd3NDY29uak5FdUFvTEFZa0pkTGxLYWRqSnpEcU5ubjkvajlQTytDazZhY0k5bktXR3NZcDUydEdYbU5PajZZVWJtd0F2eFhUa1dpdnFQNXhGajQwTnlPZ2JGOXpjT1J6RUpUZVBIOStTUHRBMjJkVTUyWDlKcDYycHVUV1g5UFU3NjNFL2QzK3ZPK2RDcDBLakdYN3RvbGxNLzJa''@;'; put 'put ''ZmVtR0Q2RTRDMEY4QzlEWmhRVm0wMFlVSEJFcDRWOVlBVDY2bEVBSVJPbEZab3hvOUZvTmdJTkM1Wkt1bDYvSjRpVEF0Vll2V2tCNDl1a3p4dnd6UGlsbDRyU3p4OXN3eTlJdVk0SGY0WnZrTTdLNTlRR2NITENQQTFVNzNFQWV4TXFPYUpCR0U0SzNwR0dBWWtzeXBKN0k1QWFVSDJqWUEyVUFF''@;'; put 'put ''aytQMHBWZkthQWxqOStWNlM1ZWFVOVBoR0pUQ1FtUjFzTitJUFNRM3pmWE9keVovNUVyNms5R1k4bHcyUFJ5RkFvVzRXWHVsNXZTUi9JOTZ5ME0xaDB3aHI5Y0padTBPTjd4VzRnSW80RXFvaFdRMFowd0dJMFdrNnpnZ3BpbEljRnF0eWlwZ2FobXFhYWtLOFJPbGQ3L1FFOUtNUklXUkxsSUJU''@;'; put 'put ''TG5IeUFra3N0aGo4czZnYm9rU2J4ZTQ1MmRaM29QWDFtOE5UWU8yWjlvM081L1pucXkzcjlFNUhZUkx6L3NMbHkzeEIrTUhPd08zK3M2OGs3Vi83bXdLN1c0YW5iNTJ6cGJ1bE1mTHc1UHR3MDNyVjdXWVp6QjJ6RXdPaXBYcXdCR1lJWk5WRStoSm51RHRvdmFEY2NMQTk3MGg0N01JaW5wSGZq''@;'; put 'put ''bDZUdkRKT3J1bHBXMzBQMWlSVEFvWWJCSVF6ajlZczlOaDBCYmp2Q0Z3RkI0UnA2QUFLR3MySmNJeEtoY0loMFJOcFRyVFhobW1ZWkdoRURaV09VZTJRMnFSUUtmQXF3a0ZtSlUvazdXRTRZWi9uSjVUMnp2WjNEM2NjNk9vOTFqN1gzenZaYzBkYzBFbytNUkVCN2lJK0VXbllsVXRPUnlLNTBZ''@;'; put 'put ''bGVMcVdVKzI3WGY3cGpMcHFaanNabFVidGJtMk4rWm5XL0J0M3R5Zmw5SFkyT0hMNUJySU5JRlh6NFE2dlppN08wT0JmSSt0Tlg1MTFYQzBSdjBZRDhRMkxvV0NGbExWb0FVT05ndnh6bEdpNlNGZXY2TkRYVEhBYStmbmI5RFBuNVEwU25DZG1INmh3SUJDNFhGT3ZQODNLYVQ3Mkw0c0lPZGZB''@;'; put 'put ''dkRBdkxreHBPWHNVRTZRMDlleGdGNUQweW00TmRCZnNDeVJzOUhRVk55VXFiT1ZpckkxcHRXdHQ3Y1ZGREJkOENrVm9xZkw0Z1drd2toazlQa3NGUXlRYVJUTkExVkVKRXRoSkpOK2NSMzFsaXBkTExXU0hPcW5BSjdqOGxhL0RyWWV4V3dEaDRKeUlTL2dBd1hNSDRjZitGOE1reHhONHNXc1VT''@;'; put 'put ''bUFYZDFEK3NJNkZQV3ROOXV4dllzZms2NkFaL0ZYWmxYODA4L25XZjc3RU5mSmVYNFh3QmJlZFFvMWxNY3AyWWUyRTRjbVZWWVB1R29MbEJKT1Q3bEV2Uy9QdnozVXBxOS9pVi9aeDdtSEVPTHhLck95Y0djMlNoT2ErM2FNWHdXNW54T3luMGFabncxOHlxZDA3MzJlL3d0d0k4cTVFTlpNZVV3''@;'; put 'put ''R1NtTHhKVE5jekR4NlNLWlF4bStGbXMwVHMyWXkrWHl1YnorS2w5UVJ4ZWl5czExcnM1TXVXSTUvMHo3M3FTdnB5azc3dy92Tzl1K21FcnViZTh4cStDOVdodnM4RFoyK3BMeDVwTXRNOG5JenB6eFBVV21OVjFuWk8xMmJnZTVGM1dqQ1ZqTCtUckFBYUhSUS9SY2c0Vm85SjBkWUdkeUkrNzFa''@;'; put 'put ''d2IxMllMY09HUTBFQTNJQVIzbHlyb3kwQzM1dzBoaGRzQkU5SHB1Q1RZbzZLbk5WZy90bzJCY2E3QmhIcjNkVGszVU5nU1k2UTJjZnVXaW5iV0FxUzFVSm5CSXU3SjlMNTdYelNPZGpsOWkzU2NYd01hckVrV0V4QWx4ZkdnQWdKRVBCSm9DdmtEQXhMdEx0Sm5HUUxDSU9sc2R6cXlUWnlaYzYw''@;'; put 'put ''Ym1sR3hsZG9HWHF0SE16cU9QSFVuY2YvN1lWVis1NHNpRFI1TlRzV2ludm02MkpUN2MzSE84dlhYUVltNHZpNFRxNjlvRGk1L1p1L3pGbGYxMzdjc2Z6bHJhMzlFZjNHTWc3ZW40emtSUDZ1cWpEeDY1L0N0WEh2enMwc1JsR2JCREU1R0paUC9KdnBpM1Y5djZUKzZHUUhpaGQvWmo4eXZubHZk''@;'; put 'put ''K1pySEc0L1kzdkxZOGFpdEw1ek1McWJZQmR1WU44UFoxNFBzOFNQS3dHREpnQU13SVlDQ2dwQWFrT0JXcllGUlFqVXF2MTVmcHkyUVZ1UXFrT005TTJxQVJrNngwN2VBQWp0T2Z3L2ZmZjg4OTVOenExS3Y0akhRR2dMNGZ4ajhHNDFlQ3B0V0l1c1IyNFB3d2d3Nm9EdVNqZGhuT1ZuRVE4VmpX''@;'; put 'put ''eE9sYzdtcUw0S212Ym5RM1Zqa0VsOFVWYWRBelJYaWpBUEJncXVxQXptTzNLcjhJKzNGcmRpNlJqTGYzcFJZN3BLL2hVTWZvZU5kUGZ0TTNOOWYzRzNJdU10R1NIbmRXTDdabDVoTDQxcjUwcXUvWDBxUGpIUjFqMG04cEg2SHk2d05BcDdVb0pvYXJYY1l5aWlRaktydDJiSEJod1lOYVZCUHdC''@;'; put 'put ''NmdMUzdOKy9uenBtZVBzdlFjTzNMczRjS1lsRXJva04zN0x4TVF0NDdsTFFwR1dNd01tT0xtbGV3OW1XeU5OaWFuM1RrNitieXJSSEcxcGczT2hjSHVFNlZkMlpyVVV3TVFNY2dWTUpxUE5ZclNiN0lFRzZ0dXhxbGdaeGxrRi9TaEVmbjdKZll1TDkxM3k4NS9QM3pZK2Z0djgvZVRjN3I4K2ZQ''@;'; put 'put ''Z3p1enVHMzdOcjEwM0RxODh4K1Q4Sjg4VmdQaU9LaXhHVksxSmRTck1Jb3F1OFdCdG1Wb1pSOW5pQmFtV2wvRkdRWDNmZzY2VDM0VHNsRC80UnVlcTF2Q1Ixa1hOZGhmSFRNTDRCTllrQmRYeks2ZGlvcW9vQlh4aVFnWTdNZUI0YjJjdkdQU1hkMG9QL25RMzZWWFZNZWw1M3dubDVVRnBzQmEw''@;'; put 'put ''TGNmV0VhTFJNaWRkcUVFTXVaZ003cUNiS1dDeG9HNkFSQnJ5eW1lY1JOaEx2cHNOTGUvRUhzTFhsanVGRmRvRERkOEFCWHQ4bEgyRDZSTk4zOEdIcHYrTTUrUWpiRWxIMUNQMmU4Nml3NTZzWVRJT2lUMUZYbDBGSHB2dWxmcWtLdEJtV21PNFdYa2w0SjFlSjBxSW80bnNwT2VGdXVtM3BKZHdx''@;'; put 'put ''ajRzK3pIeXNWdXJBV0xkNVpITVJESjVKVWFTOXFKMEVzdWNaYUN0UUxHTG1CY05vcGl5VEpRNlF5Y25BTHFCS20xOEQzWXMwWlZnR0piTUhUelpFblh0Ynd2MEJFYXd6VTNjeUhzMUZkcmJpZjVSaWZaZDB3aHo3WUtncjJENGJ4RnFEWGt1WWRNUE04OGJKbmxPcnhTTEwwNlNBa3dhZ0NSQmQr''@;'; put 'put ''MFI4NmF6MEtrNU5TNys3R3RZcm5RU2Qrem5wL1hqazFFc01mdjB3TG9GeHRWUW5aWXVtb3pFNmtFR25SVnBCb0l2MkE1NGtCVUtrWHJFTFVHNzFRNncvcGFGZnJLK0wzMkpkTmtGZGx3R01FcTlnZ0JQWUwySWQxb21pOUxyME9sMldEZi9INmhRSnNzOS9Wc2Y5UzRiTGRhS2JKNlJrVkV0aFZB''@;'; put 'put ''ekw4c3BqUGc0akR0RmplWUlNd25pRHEwOVEva3R4K0hmL1AreHFtZW5zdi92QWdidjNqOTg4TVhIenVJeTRDc3M1ZU8vUzBtY1BkazY5YjNMeXZWTXkzako1UUhIMklPek5CSHdITEdOWUJaQXFoNm1iWk4yUkQxc3NOOXNzWm51NVhRZzA2S2dUMzFQZ1BYYXZ5cGFGU1Z3OWNHVlB6NVVELzBm''@;'; put 'put ''RUZmTW5Uc3kvVE02MUhjNkRISk53eDh6ZzRLejBmREVNYkdCVjVzUU05YXRyaVE3TVBPYUI1RENIaDlmTnAyTGZ0dDF1RDltRHNVQ1FNbUdRNUU1K2d6U0dGWkZzTU92Y0pJcko3eUpOWTAwNzQxZDJMYW93V3B1NHB1bTZCbDhCU0xqcTJrUnZZa2NnWEFDVzlQMzhjdUpZOEZDcUdGeEY4Q3FI''@;'; put 'put ''OVlEOEpOUUJwNXFteTZDS0tPeE5JWGVmenlNSVZzcDdZTFZXYnhCc1lJRkJUcHRVWUVZT1hqYi82TWpEejRrTWRGTHNaUVkyZk12VjVSTDhZK0Q3TklXYzdFZDhqVVRJVXloSTVaWERUdTFpUXJWS0ZWVFV5VnNrcjRJbzRJdjRLS2dvalNzcVNpQ29RbXVkK3ptY0NrNzk4djNwMEpGYjB4Tk5l''@;'; put 'put ''NDllZlZuSFNzOHRKMExoNDluWVVOT2VvMWRlbVRzeFlzeWxXbzk0TzcyWnJpcjM5SGgyVC9KUWEzUGMyK1ZyYVhPNWQrL01MaVJsUGhnRkdBMHpIVVAyMVJUTVN0bTVvcWphMkF0MnBSZW94ZjByVXZNckVjektMb1dPNXdBL3prSi9PL0tJZFlwREgrUGlyZG1SemVhenFhS1k4cTJOTEF6WG5o''@;'; put 'put ''a1Vzd3p6eE1FelU2YVJXMmJ3SjZXVnZ1TWRIY2Y3Nkc4enQ0eklhMVgxSVIyZFM4dnNZT0NhQ3NPVXVRNm8vRExYb1h3TStBYjV1dlFQQS9DRFRkaEV1UzY4N2lJSFlDdy9tRWthUmtzd1ZobmwrOEFvYUZpSmlYRzJlZUFVbGtvdGxhSkpONlkvbk5lSXZmNmhiend6K0pXdkQvMjg1eHZmN0lI''@;'; put 'put ''aG5pTDk3RFZGZHE5K1hsNG55RkJ5TStOdHdCc05PaGdhanA2eW4vSlJMT09heFdJUktGeGhsVENrZ1kyT1QySGQ1STkrTklsNTZiOG5mL1RxSko2WDdzYys2UWQ0SHUrR2Q1ODh0Z1hHUGdOajYxR3RXSzNqZ0FnTERFN3hCRmdFNmdsUXhvUWpDMG0vMlBuVG4wOUkvNjhQVitHL2tqNFBveDJY''@;'; put 'put ''ZmtiSGFvZXhSRlh1VTNpdXU5a0t2b1dDbTgwaXNCVm5aUmNEQ1A5Mi9JQzBGNzhoVGVNTHE2OG5TWGRYY3ZXcnN1eWZXdnNnYmlNL2ZKdFdYQklRQzE1VFB6MTM3cWZraDYyclZ1cDdYWHRqN1ZGODF6WStVQTUwVyswQVhwSmRvQmkxd0h4VmhmbGsvOXd5b21vWjlkZlMrZEQ2ZkU1ZyttbDR0''@;'; put 'put ''Y0IwUCswaHYyeDk4eHdkUG9NL2d4K1VjZXVDN2tpLzZBRHV6cnlXTURQMTRGNnRlRmd1NkZDL05RbnNnZmQrTDNOWCswMDM1MEFLL2VyVlYrbWFwYlYza2wxcjUyRzZCamJHTmo1ak9nUVBBQ1JrWnZXQm5UbjVYTHVKaU40a0wwTmZKK3RyZ3A1RDhNM1ZGaERIOHF4WnA3ZTc5OFlzK1VyRmgy''@;'; put 'put ''WCsxZ3I2d3krSWdLb0I0M2FLNDFXWTB6aEJJQWlneGRmVmFqbWRWa1BOV0syT2FHVnZKZFhpWFl4V1J2VllwMU9WTGplWW1PNkEyKytwaDVGY1ByL1hhZ0E0SVljZEFGWHM2bUsyRWJWd0xhQitxZUV3ZlBwRTNuMGl1K3VTekdMN3hOTEF6b0ZwMS80RjF5WGxzNU05dXljNmlIRE5RZWtidXlL''@;'; put 'put ''dGUwZGFKeUwxOXI1OXNXU3I1TTYzVFZmM3RDYTc1SmcweVlOOHNZQUYwaTEyVnBRUnJZYnh5Y3JSZ2x2R3hYU29EYzQ1cXhVaGE2UFY0M1pCVDJEYm01eHpRWXBUUXJGUFRoVzlIenVSejUvbzdUNWNuOC9YSCs0T3pTUVNNOG4wZEN3Mm5TYkM0STFqWTZjR085UEw1RW5wMzlLZFVrM2JvYzdP''@;'; put 'put ''ZzIzVTdYMHdDMmVVQUhqL0J1Qzl0UTNpMnQ0R2NieWxEZkxiR3dZSGJ4aEtMdnJEN3FGZ2RsODZ2UzhiR25hSC9mdFRwcUYzall5Y0dncjVtbXNiY2djN09nN2xQSFhOL2laNjlobUFtMmNkYmdMSDRFYWh4UURIVkd2bHJIbm16MU1VN0dLNFdRSmVnY0lOS3dlOXZrcUJiSmJMSGdxdVhoVjRO''@;'; put 'put ''ekdJSlJuMHlKT3JPNWJUbllPbnhzWnVCT0JoOStwVldRcXhUTnZCenM1RDFGNEN1QkVmd00ySjZxaVZDVHlHSTB3UUUwNURsZ3ZMYzQzcWl2U0hxaXFFcXVxcWF0M1Y4SmNEREFPNlVwOE1zV0l0d2xOSGtrVEhlMkN4K01nQmQ3RGgrdmIrNndaM1hMTmo3QjBkMHFnMk01dWF1TFFNWDZzN01C''@;'; put 'put ''bjExVFo3bzBPbnhrWnZIQnkrZFNFOTM0TC9kbm5uMUJGR2Z5QVA4QlI1QmFUVkhyR3NBdXUwbFJqcHlJanNES2xCT3AxMkNUU0dLbVp3bzBYUWZtVEhHOHRRcUFabFZ3ZDB0bEw2NVlKWTV2V3kyQlhQdTJWZTU2WDhoem1HbVBOWVozL3MxbHZ6TXpQOXFWU2t3UkdvOWhGdFRrcmhiK2NHMjBj''@;'; put 'put ''OE1VZXpSNmIxK05vTXFRRVkwbGo4a0xpanJwTG90SW9mRTJnWkdKNk9yRkQ2aG9sQnNhRnVHVmZCbVdsRll3MGdPK1Z3T0l4UUgvRDdmWlRHc2FDUUM3TXFNaHU4bVlBRjZSSXNxT20rY3FqelNsOU53MkxMd3JHNkZiSDMwcTZ1UzN0N2p0YmRPcHRJekthVDAvSDRkSkpvcGRiZWxmWkFmV3V0''@;'; put 'put ''Wisvay9uUzdlTVhBaml2RVhQcVF0Q2N4bHdYN3ZtVXVEZEJuY0IrSHR6OEFIdHRwcE1JaSs3WVpEb095eHJ4dHJpSnpERlFKd2VhMVVmdVQwanFBVW5IWENBcTU0OHNXV3ZJVCtlaElPSiszTDdZUm9YVlBUbm9FOS9kTUIzcUQwbU5BMTYrRk13eWUzZkQrY2ZJVmtORVYxQUlzdUZPcjZNRUpv''@;'; put 'put ''Nm8xWFZGdU5qRjNxWGFUdTVRSEViTGI1YkpZNEFXOGhGemlzZ2pWMVlMRnRiejZCb3kvOXRUYUJQb0lHOTlOY2I0QytISTUxc0JwYVl0bTRqaUdKeHJnY2hxTld6UEdYTFJ1VTdYVFlSWFlySHlKazFZNUtxWTg2Ynd6eWdyZUVhMG9NL3NGdHpmZm4xcGZ5cHMvTWZCcExkOVVUektyTDdRTk0z''@;'; put 'put ''Z0RTd0RxZXhKRzk0b05CZzNRRzZleVc3b2FWVDhSckV6YVl5cm9HQzhGMkZiL1lPTEx5L2s4YnByQ1ZkTFBmblgwZlFET1doeVY1UmM5bnZmRHVLcmRXMWxpOTQ0QmxJQlZ5RzI1SU9DeUY2WEVsb1pxMmU3VmFnVkdYTG9sTUFaMU90ZW9oc2I5NUhQM29rYXZZUFZhdlRZRFVGSFIwZXMyL0pL''@;'; put 'put ''MHkzZ0w3K1MrNlZoK3FFMmN5Zy9TdDd4MUt0MCtaNi9jMzFtRUVoUDU5VStpSFd1S2Q2WkFKQlZ3VXRpRWs4S2ZnWlAydDRHVDJsbUdrZ3FmSElSNU45bWJyb3ZhbTQ2M3RqZGZPelU4ZkdwdzhNYmg0UnNITTR2WjdHSW1TOSt6cHBGM0RRMmRvaElHNUV5dS9YQXVkNmk5L1ZDdS9WQzd2SjVw''@;'; put 'put ''NERsNVdFK0piQmFLWmZPNldLWUFzdUtMeW1ZVk1IK1diSlorVFM0c2w4aG1LZzluUUI0S1c4aERvVWdlcm92Q1Vaa3ZiaWNQaFl0eHdyZVFoOXJWU1N5c0M4UmxLYlJCSG1JMERmaTFBR3MxMFN3OE9UcXI0dGU2SmdIQ1E3REpPcmNsazdRWE1PcHZUZ3kwNzAwQ0diN1NrNHRQcDZVZkVlMGwx''@;'; put 'put ''STREM2VScEdET3dwYjNwMm14dkJwRGZGeTYyTnpQRjVxWkRrVXpVMmlUczJMNTlWZFN6YnlFOTJEZXdmekkrMVJvLzBGeS9jNlNscjJ0bmRqRGNNcHN5TmZsaXZTMytZTlR1N3NzMDkvcnIzWW1XcUsreHFWcnc1Y0xoL29ETUkveXd4aW55VVpEbmNUSGl4RHEyYjhMZFRGa2lXYVRPVTRDQlRx''@;'; put 'put ''ZHFBRXh1V2h1cDRQVExlcWlnNUgwQVI2SnUvRXdXVDlsYXExUDlNelA1OTd6SFYyMnBOOW9yaFpGMlBKUDcwSWR5MGdPZVpsTVo0MDB3NzM4UnJVelBITTB1R2RFQ2Q2R3pVZjBJVWVKQ2FwS0dIZG05TmkvemNSYnBSWlRkeWxhNWdQK0xrbkdiU3RSdzNHOEFCUU5SNHpIcEtVYlVlRmplTCtq''@;'; put 'put ''VnhFYTBhaDZFYXFtcHVvRmdZUmFGVlRZdDNUc2VmMnpIcTFrUW5pUDRVU3BETUxBOXhGbWhmNm1OS3J5MWplcnR2ZTB2TWg5NWYrK0QrUTkrS0E4alR1Q0g2R3YxRFh5L05GK3dwZkVmWVd5V2QxUEdhN0NHc2pscTZjRFlIQ2x5Z0lLdFN2SEVBeGFQTlpoMFpwTzhGWis3OTk3aGIzMWwrTk9m''@;'; put 'put ''SG43bXVlOS9IK3RYWDN4eFZmb2pIYmR1Yll5NFlGeUJ3dHFvSjdCa2pNRUFWb1l1b0tHYlV6eWJGcHVYb2FHTWhkMllZN3NveC94aGYyV3R0N2FwdlA1Zis1LzVVdCt2cXNheWp3alpDcWVyajVpbEx2enM2cE9kV1N6dkJkZ25mZ25tM01hT0ZkN2FqczNnUHVsWmZJZjBGQjZRanJYZ1QzYTBT''@;'; put 'put ''Q3NkYk56dzJoNjhsendCSEFWZzVHSnlvQkxqb1VhV1ZRUU41aFdDeFdoU2NGQXhwNG5oTGd6c1AwMTFLWnE5NlN3bmRxY2NGT0ZwR0p6SHBsbC9JdHNXOTgrT2FEdnlMdXp6Qjd6WWxlL1EzaG5xVDM4d0ZXMkpwVzdQOUFmMWNYMU5vdm1PZU5aa3ppUStIRTdVNk9Nd3kyVnJqNks3dDdHSnFZ''@;'; put 'put ''UzlMSlZTa29Lby8ya1Azcy9XSGhMOWVtYkxDbUJSTm1JOHVKNVd0MFJCTlVtelpRbHZDenRCYkFUbGdINld4dXF6ZGFRV0E5YmJHM1h3Q1NjU1l5c09CSHhzeFNPei9uaGJOZ0U3ZVNjc052emhlTlpzeXNidmFLYUwxUWY3TTdlbllpM1IxQWZUL1NIOTJocnF3YzM0TlA2Q3dHUHptaVQ5RWhr''@;'; put 'put ''dUlQeTQ5RXNXSmFheVp0ZmFIUG9pRVZSOWpLMk9DanpYcUpwRFlpVWwraGpUaWVSa0x0QU9raDlWNHFtK1lYT0NDR3I4ZEhVSC9wVXFYeDhGKzIwYzFRQmxBWmRzcUs5eFZ6bHRWck8yVEZhQzFCUmRXWGxtUEVpb2x0R0Zoc3U5NlJoUmMzTHBXZEtrWEhyR1ByQ1hnRHZqbDJaall2NUlMbmNr''@;'; put 'put ''TDhhbUc4TlYrVVp2ZDFWWXVtbStyMisrSWNSMTl4ckhydXJ0dldyVUtIWnhRVTl6ZFQwbnpXc2FxcHV2UGluZ3U0V1RjdTVVRmhZYVlYR3VQbEdFbzZWSkdvaW51WjQ4SHRaaUFreVRKOHpseTVSOG1xM0I4MFZ1OTFwVUs5ajhQdERmcUtya3QzdlNXWll0dDlIOHJNVTB4NGRFSkdOSExnY3lk''@;'; put 'put ''TWRKVjd4eUlRZWMrc1VYdTdycTYxN00zZDUvb2xOTVJXTnQwYW5rN2JrWE4vaWVITlFUYk1QSWdNSDJRRHpMTmppcXd3VFVGQTNobHN0WVdyYWNYK1N3V3kxcUNuYWxrU1poczNSNHU1ckVCeTlHOFBpMmgxNTU1WlUrZUQzMFIrcXR3djI1UGJucnJvTTNmQ2wxV2JIejZ5ZDc4Qng1Z09WQnRE''@;'; put 'put ''SXZTWkFtQ2dJeU04ZmxrcGFqd01LVFcyUTZVQWRLc1NMZFd2VDd2cW9xb2RKVkpaeFRQc2tlK3VtcXBML0xuNEMvWVpUR1g4Wi9WOW1JdzFwVXllRXdlbEx4Mjh6aWE4alp0K1B6b2ZrSzNUZ2p2VURPdHJ4ZG40K1Q5ejdSZHpaTFhxNDRJL082NE5wTGdNUG40TFJCZjBkVWZDSnltb3JPOTFB''@;'; put 'put ''eHh0eDJ6RzBiWUZJQkt6cE1CMVZwcVAvVzJMK1NhenZjOWR2MGpXa2NidG1keSsxdVdhMG5YMXpkSmVkaS9nUjlDbmNBME9wRWR4R1hJSlI5VEJZbE1HYUtvTGRZWGMxTWtKKzRyUFRENmxMOFdXc2llbzFtUWFKcjJkNHFuVGJBWmFzQnhKZWU4bWV3ckUxZ1dUZUFPZzN5V0hNRnpiWUFycjJ5''@;'; put 'put ''emxnUDBHRjJ1a1VQYXdLWWRYcTdOZ3NpelNWMUlaZlY1L05Sd1UxQng2TFJ6TFpWdEJ2cXV3TGhsVW0rRkd3TFZjVXFMYlUrUjUzZGFpdXY5Q1NxTlBxb3Y4WVhxekFIS1JKWWpjSkVEck9haGhTYys3UHMzQ004UGZjSWVsckp4eGpCLzh6NGxRKzFpOW5HS3FkSlErVHdBa0YwclF3aFpRWUcw''@;'; put 'put ''dWNBVWtTZXordDIyYTBGdkVURkxFeEpqcUp1SVoycWZRS3p3U0dGcjNtMnlDRlo1M1BTbVMyeVNOZ2VtTitjdTc2eUVkWks4M1Q2MEVmUkY1RCtBc0huNVRTZExkb2N4ODV0MnB4VTIyQWVmWEdiTml1Rk5tWjB4elp0NWdwekhVV2ZrOXVRelcyK1VSakhpTDY5c1kyY0g4RTl4R2pCZ2diRmZv''@;'; put 'put ''SHlJaWIxOVFnREY5TERPZWcxeXdaZ2tMcEYwQ3NWZjdaVzFweVlHV1dwdEVEdkNvVkJHWUZqWWpWaW5xWkpGS0FoZ0NWaFV5UG4wbXY3Ui9EdFJDZDVmcWFFMEdsQ1JaZjBEdndSNlhLa3hMMUZscWVRUWErTDdrdzZHTkR3T2pkZ2FqVU5tYmtxQUkvTE1lRzBDdnBIYUN5S3cxZkFHOUs4US9V''@;'; put 'put ''eU9VWVI4SFRGcEFMcGR3RFc3U1kweWNaR00zTm9INFExcDk5dUoxcHZFOXZRaVR0MXNWNWllSE1IbWcxRmptelJENDNSdEJ4andOOE0xR2NGQTZvR3BHVUZWdm5EWmdxVVplaFdybEN5ZUcxUHVVWmZ1NWs4cStZL1ByOVZqa1k4eTNueFJxcHQweC81eko2U3BBMktUeXlIZ3VGM1NLR0I5ek44''@;'; put 'put ''d2tWNHVibk5jZlR3Tm0xT3FtMkFCbTdjcHMxY1laeWo2Q3E1elRwK3IxRXQ3Y05zcm9pOG5yVTd0aG9IVnhhMU9ZNXNtOXVzL1FMR2VZMnRKeUt2WisxdlM5cjhPN1Q1STF1UFBNN1J0WHMycmdkb3FSbmVYbUN4MGxxYXpidFIwMWpVWXhvb05SU3BHaFVWOEZGYlVjTktyZXpRelF3eXAyemQw''@;'; put 'put ''R2ZHVTFKUWpYeWdxeVFQNWl0K1RrNTRHUmxSVTE2K2cvK3hrUGFDdS9PNGRmVjJPZm5sRDNsV2lnUndZREY5eGxOYUZKN3lpUkpZc1RnMWcxV3JjcjZQbGZDZHpXMk80OXcyYlU2cWJlQjhYOW1telVxaGpSazl0RTJidWNKY1I5RnptL2dYUnJ2UVgrS3ZFUjBJQTkzRGVwb2JDVXBsRUVna21I''@;'; put 'put ''Vm1uVGh6ZStSMitlZURZVHloL25iNzdXR2s1dlAranVYSSsxQ2MxZ2RGd3JVMUxvZkpvR2MrR3BhMm83ZzlISEw0UkZjVVB2SDcvWEYvTEdnTldsa0d0cHJWR2dBYkwxdVVMNWZra2NPSkZUSkZja2dhVSsvSE02a0RkKzl2dnpTV0hwNkxaNEEyMjA5RTA4T3pxLzhXOHVOVC92a1kwQ2crY2ZO''@;'; put 'put ''RXlDZmRBbitSbW5mdldQcnN3WUMzNjFETG1SMUFuZlEzNlRzcklmeHdUVDBRcWZUOXFmZE5abzgyU2VNMTlReDJMS2JNenFsTk9jc25TczU3YzV2ajZQOXUwK2FrMmdiTzhndmJ0SmtyakhNVTNiMlpWbVc5bDgzVnFjejE5TVp4TnVVYXhCajNoSFBRTHV1d0V1VW9GSzJCNUtsdzJDcWNsVTRo''@;'; put 'put ''NEtuazVRaG9zaWhEdzEvSTBPajU1NUlNalZNc1JhUHRwbWRtQmdkbnBCZGttVFBEY25HZUJScHVFV05HVU1LWkdnSUNoMXRSRXk2Wld4c3Y2dVIwUWF2UDQvZEV2Q3drVVpLN0hjYnA5WUlGbFhGVC8rcE1lbDh1dHkvVkdtbnJTZTNKN2hrSTd3ak45ZTNvNkJpZmJHK2ZGSWs1T1oxSVRDZFRN''@;'; put 'put ''MVh1L2RuMGZFdUhyenZZTWRveGttNGJIYyt0U2dCSE9WNzVNc0N4SDJRdlFYMlh5L1M5OFRrSDhQMUUwZlBuMWZhWVAxRGMvdW5DYzNOdjhmTUhDdU1mblM5Nnpya0w3WTFVT3dNYWd1ZmNYYUREUlVITDYwSEh4T1VhZ0ozSERVcUNIZXRKRHV2S0RLQjQ4am90RGFPVzZValpDdElqSGEvWExa''@;'; put 'put ''c05STTBHZG8yV0cwMGNGWWJVdHdPMGxVN0hZZ2lsZTlKaVozc3NGVXUySkdDQ2lOWG45Zmw5L2dvQXVSckVrdE5UUzZLcnNnTjdVMmdMMFZ4ek5lWktYcFhqWEgzWGV1dXVHZHA3YVhIb2RmQ0F3M3Q1VDBuc1M3cGxJa3BEc3BQOWNoUnNvS05qWUdGc1BTYmJsYzNraTJOaTBreDROQnFvN21s''@;'; put 'put ''TmRjbzRsbGdUV2V3emd5Nkk3a1RjMDZEUmF1eFlwMDJCV3E4cnFQV3FYdVBuNFN1Q2RWZWc0aFQ3UWxDS25xTWJxYnBKZ0RYVzZrQnBmc3ZXb3JlMEliVUUwSkZDZXcydEFnWEpCTXZNeUFxSm5xOE9hLzVFUllRVzBXV1MrSENKSXRKemFkZFdrZHJHdVVSNWlRR1IwNDllczZNa2VOc1kwalJp''@;'; put 'put ''aXBOeVRKVGkvSkJNQ3pmSXVMcnhPYVdGZTR1ZVA2KzJ4L3lseGUwZktJeHo5QkI3dmtaWncyMXNuSmZrOFQ4Z3R4OEZnQm1MbmgrdmtOdi9HM3o4aG8zL2tqeitmZkx6SDhQSDc5ajRjdnVqbjFtdnEyZ2xmdy9hUWhUdEVhMlZ6S3RhQytvQWFBTTJxNlVNRDhsNTV3N1ZCUzFzeUE1eml6YWFw''@;'; put 'put ''c0Zoc2xMOEdDeTV1cnE2YUYwazRBdjRhZDZzS3BrS2lWQUJLaURwU2RKczdzMWVlZnhQaStLVnc4Tlg5WFNkNkQvV0Z6NTh5bm13UHRzVkRCOXlqbFRNeG1PemJablplR0l1UXl4Zk9MRHo5RUR2dGFQREozdG1adWF6cVhDMXI3ckdHMGw1Vmw5STdtdHYyNU5LN3NtMTcwMEJ2T1JZRU9VMVV6''@;'; put 'put ''S3ZHVm1IK3lDRDR5NTJUbjNvdlZzK1A0N09GejEvWG5rTzhMMnVlSnluQzgvTmU0cWZQNkErUjBjdmwzbFdIenBOeWtrZDg1TzUwU0c1d0xxR1ZpdFExd3ZTOEZpcjBSN1dxVUZHRnkya2JVUklwNWFFcU8yMFdzMDhrSTEyaVhXWVhCQWR6Q0J5VjFhRGNGS2RiSHBxb1JZSFBjRXVLaTVxd0E3''@;'; put 'put ''Rk12MHBMYi80amxyTzhEWFZKSjNOWDFpdll1QUs4UzBuV0c3TnJBWUpMUHRRc05ybE5PcTBHajNHV2s0SmhLd25NR3pXWER3ZVQ3T255VzhKV2pab0xzV0tDOU5ibkZpT3dta1VyUVc0WmtOdytNYkI2ZjZHNFc1dmFQalU0SzdCaG1GUk90bUNUYWw4ZGpHTDhXTFc1WlJlUytieHgvZW5odDQx''@;'; put 'put ''MHVJZkRoeElEWjBhYVEyTVNtL21jWHVnL1ZEdXUrMkhjNEdCR3VrNVA1eVJIRmVnWjcxYnBqR0ZKamMrcHpqd3NhTG56NnZ0TWIrdnVQMERoWEdPVHN2UFpWODZIV2VmTXM3SGkrSnlGOHVaK2JQaWNzS2ZINWZqVnJaSW1pbmF4d1BLUG1CL002akl4azhVL0FESEZMMitXSStXWmZyWmdrdy9O''@;'; put 'put ''bExjZDIvQlAyQlE5TGJTdmhjS2N0OHdMZk91aHJWcHpncTZtaE5WVS9pNXNJN1RZNEtkSUZHNEVaQXhpQm8vUjVrT3pTNlhHRlcxS0N0TlM2bXFycXIyQ1lMZzhGRFpvbFc4TjltZ1hIUWhTK2pXckpGd1ZtOUx2TU11OUJjcU1Hb2FQYlVOMWgvY2YvOGR0Ym1FczhuMEtWYU4wZWl1YmJEakhh''@;'; put 'put ''d21nK1owVFpNYzBFZ3ppTEJGY1EvVlNOeVlLaVE4aVVVTm5KN1hZNjIrbVNaQlU2V0UxeE8rVUlucW91dXNBQ3ROcjFkam5Fb3dEZFlkRG9jejRYVEFad1UxSk9RcEF5TzlzUEwwTm1xSVhWQTNFeWhLK0NJNXVpMjNveVRwNi9BSmVYOC9WNU8vNkM3ZFVXUGZ4dXd2bWhER3R2eVJRaGFZYWk5''@;'; put 'put ''OWdPbllBVVhIL2tPSnJpN25YMUY2R0ZEbzRaTkZmVStxZmJFZVBiTk4zK2VWdmdUckQ2N2Jsbyt3dmtHbDc4MGxlRVJ6cmI1R25vUTJnNnhOQldqeEZtU0FObzl6RnRvSTJpajJNMkRvdTVHYW4zVUlhTFFhdmhrUSt5d2FZdERUYWtzdFRaeldvbVU0bXNwQ0JaWEM1NmpqblBFOUp4bHp1OTNO''@;'; put 'put ''N3FZZ2pZQUd2SXJyM0Z1U3A2VVd3cVBONGVsRFBSdmkwK2ZQNTN2V1VIR1FlblQxUzBWSlczOGI2KzFkZldSRG1Mcmd4MGdVL0JqSFlObGJ3QlgwajdNRi9lUFlMTnJLQjRMTDBQZTI2YXZxTGh5MFVlcGRnQVpvdlVzTjllcFZnb3dRTUszWFZUTkpLWUx6aTRqbkZZY2VaWGNWbzB5WUFRRllX''@;'; put 'put ''WDF4RGFvUmJGNmEwUzFRWEZmcllMd3FSanRsNU04V0ZjWk15dWhiUTlHN1JucTJVQ1hEa0RVTXVCeXFZY1V0Tkk1MG1PV3owUnRmem9oV3Z3LzRiemtHeFJRMEdoNEVyd2EwWUErdHVVTTZFTFE2elRLTjBhZ0hyVno5d0JJUUdKbGFxWWoycTAwWkFQRGhyWHJRYkxKS2RtVk16T1cxQnZ4ZUx3''@;'; put 'put ''M3hhRFp1U0ZlU0hDZHJ0THlhSTNkOVlaTUdXOW1tVExrV3NDdHNZdUJ2RktPaHNsYlp1Y05HaXRQbXdJSndlTXZ3OTFqeTNCWStNZjBXUHJITitxdGVrWldzVG9qeDhXYUZqejliMGxmT2ZhTjhmRVRtNHl0S1grblh0TVpJN2d2NFUwR01URWRpN1RucWxJcWhQRG9zSG9qV0V6MWY1YVNHT0sy''@;'; put 'put ''RFIwTkc2aHptOUpvVmc2b29sUVAxNlhRQ2RXc3lOSkxqamt0eTNERWVwKzZ1ZUQ3ZWxVMVh4Q3BpNFNhdnA2YmFicVZ1cnlxVHFpVFJxMVJrdmNqNUorYlZZYmVyeGxzWE1BaE9wK1dYYnl2RmJxK251cm90NmdpSDZPVW5jMjgzM3c3MCtmOE4rRlhHYUZyMkJSNWIrM2lKdi9CbGFLTmxOQzNy''@;'; put 'put ''L01mdVVISUcxcWJSRDRFdXJUVE9UaVdtVlk2enEyWG9GR1NxdlBHQmZHVHAxcXFVQWQxQ0piNGZVdXlydG9zeXdWRXhVUjB4a2JzVlVjaGs5Tm9iTU5jVExOYm5vVGVxMkcxRXczbXdYTFpmT0RKVldhd29FQWtMRWpmVWdSWGlxREJ2bVVKblZSZmtwT1UvNnBJV3FOVldWVlU1U1pmbWRWdnk5''@;'; put 'put ''ZkxpMUZpZ1VMWHFnSFhXdCtoNS9NZlZONVNGQWc3U1NzMi9XdmV0QWcvak4vbUdXTTRkMkdMYVFtNmNVSkliTjVyUDB6d1NHRzhmNFBRVklFY2FBWGNaVHVOdnlYWWJQT2NZcms4b3oyOWp6MWtkRnBPYmNVVnVscFhRRDRBRWwzTzNRcHRKcFkwRlBTcTNlVlJ0STlkelBhbU9BK05meFdRY0xw''@;'; put 'put ''SnhkSnd3YXpPcHRMbHVZeHM1ajVaMEFZNllhUWFieVZobUFNMmUweE8xc20xVGtaZ1ptZTJGSWpFK1RaRWthK2NGMGlYMTd0a2pmdVFqWFYyNExpYkc4SlQweXFnNEtrbW9rS3VMV1E1amcxaHJMT04xVktqcWxlcTVTcVVZeE00dWU4RThhTFhLd0JoUDVjZkg4MVA0UUxQMEFuYUd4QkErSWoz''@;'; put 'put ''WlhPeGp2bDcxTVFPTWZsVUNSOWtXZkZteEJhbitjWmZjRjg3bUw5bVp0U2huODN1NXZmUnJta2VvdG9mbjl4WE5kYkxnejliRGFXdzkxL01GdTFOL0RCWDVsUk1Gdi9JeDlPVVNmVVcyczg0V2JNZGpoOUJXL205Y2p2NnhKTzYyMFg0bHVQeTByRE9uZ0xFK0MrZHFBWXUvWGN3V3FsRDFwRkNH''@;'; put 'put ''YXFEbGRtcWVEVE0yYXEwMURodExySk1Gc1dzOXZLYXlReHBoVzFkYi9MSW9YdjJIL2ZjY09IRFBmaEtYUER2bGdJOGlqSGQvZXYvUzNmdTdWbDhnMllsYkp5ZmVQYVRZbGR3YkxKODBpZHJSbERqaHhIb2RkZDB4clFFNHZWYXZXVFlaaUU0blYxVzZSbzE4R1VkMWVzVmxsMHI1d0lwSXRhZHky''@;'; put 'put ''WXd2Nld1Tk5OT1VVNnN2NFBPYllkRWJIWGJyZkx4SXlEWnM0dWhJbHJaY2greXBHN3FoMGZ1dWtVR1doem44THEvbnVxR0N6SldPRldWazRqTWJjdFhIZTNzbTVCek44VzV4VEJhK3hXbWFhdjY2SW9NUHNyTk5LL2o3VEFsZXlIbUg5R3huWmQvUG1LS3JBZjRlWlBpYlZ2RDBDYms5NE84Q3c5''@;'; put 'put ''OVo1Ym14YUs2VDZseUF2Ky9kY3E3OURIOW5aZnkxeVhPeHVqaTJ6b3l5enJ0S2NGL09aYVRybkpQWHFjUldZMnNpcTZrVDBSdWlNOW5hVUsvUjZkMDA2bDVkQ2FLZHBsaHJGUDlqZEdOY0ZmVEZKUkRzRHRrZzB1S3RBNnV4VFlIVmkvZWkzc3Y0NWtEcHhickpRZDh0UXF0YmRKUmpxeVpmeEVk''@;'; put 'put ''VEc2d1dBNWdCUHRrOXVVMTBGVis4ZXBCRTBrZDJWR3dWYUIyOFByRjlUZUhOODZtU2VHdE8yeFovaXlwRGxwY3FzcnpVUEp4WlRXdExmWjFHeTIrTWhXdEczS0R4RG04WkVPZDUzUktpeWVCbzNaZHgwWUQ0UlR0dEdSQy9TSzl0QStLbC9aU0F1QzhjZW5zQmNYeXhCRno4OUtHUkxRUGppYVhB''@;'; put 'put ''dGxtNW83dTBqU1duRmF6ZlBrMjNtRDVQcXZRSnRIMXNHL3A4WHFWUHJNOHF0YVJBbjdTVzFJTWVGdTFWY0xUSWFRYUpZS0tYWjQxNHNFWTk1Q2FFYUlycEZTeEVSVTVSUjVXYW9NRjBPVUx3QVpEa2Jxd2VWalB0b0VIYzZiZlJRd3h1YWt3TEFnaytzcWtQaXhUUTRuNUdXUFNNMkkxVFc1NFF0''@;'; put 'put ''YnRwK1N1ZXRXNXhDalZsdENZMnRnbldmVVUxc242Z0FacjNIRWZQaWE0bXJPZWE3Y1NnajlvSU1aUkVUaUpJcTlIZVhJWnBiWS9oQ2hCZUFGNWEyY054bWtXZFhOOVRFa0NKcnZmUkc4anBpM1VDY0c3WlhnbW1GSFhqS0pBczBDMk80aXdiMnduQW9xNkliU0lxdURSRDI4a3dId2RLY0RlU1hj''@;'; put 'put ''L2FibWp3VjJ3UlFCbE1GbWR5eDZwMGZqa25pOVVzTXh6TktqajZ6aEljcGJubVAyQzY2cnlzcTVLbUVuMVdqdjBtQ3JIZlkraGpwYm96ODgyZUxmaG1qdzJnb3JqeE53cXhaU1A2VmtuY21QVmxjVWZaMzJ1OEFXMFZ1d1k5N1BOYjlRV0x2K0JieHVWTFNLbTNubWIxMW43VUliWTVnQ1dWdzht''@;'; put 'put ''QzZNUGNpSEo3aFhwSEtuUDdyaHRGME1QdnEvTDZmZkpkRnJMWGZKTTNaRk45TmprN2VHYktyS3NxZUF5cURseXRWR3FUYzZ3dUcxc2FGQmVCdjlyeHlSUEZkZHNzNzM2YTdBQzdoNjNWQUxhaUhtczVQNmEzRWluSi90UmZXVWkvTDNaWCttaE5UY2hESTlRYi9aUWJjL0hYYlVxeVEzWkxGcWZt''@;'; put 'put ''NTljTlRIZlVPTEE1U2I5Z3hqRjhvZlhnREtmYTVWd0JQRldDQzNJK1B1VjdlNWcreEtQdkZlVUhuRlR6QStENXJTVjlaUi80ODZvUEhQT0xxS2p2WENHMzRDZzZWWUlMckU2YjRVdVhvak05VkRLK25BTlA4V1ZSMXBrVVhKUDd6cWw5d1Q3OTdqWjlIMUQ2VWovY25VVjlUeGI2NnRFTjIvUjlY''@;'; put 'put ''cDBYNjNzWm5yTDZ0MXZoN0N1b3I0Qm01ZEs2QmVZckVOYXZOM0V6eEt4QTVWWjJ2WWx1VTNXYnZxaXE3YUhOcFd4eS9pd2VJYysvelpwdEo2M1ovbHpYc2ZUVXpqUjUvcmJGeGEzSEtOUnBFSFF6ME03VlNwV0dNa1kyeVh1NzB6dW4wc2U2eVBPTGk3Y3BZNHpqdytRQ3ZXMlJqZEZJOHdZMDFO''@;'; put 'put ''RlZta0pyUmlZL1YwaElWdmJMekl2N3grcENqbXh0YmRZUnFoMXJJdU4xZFNHNzAya1AxZGJMYyt4QmR6Qi9TSUROOFpiNXVadXpuZWNWNzhhNk4wT3VnWVIxbXprM3k2ZHVZNlBTWWo2YVVieWl4UnpHM0h5aDhJeDdXMW5WeGZjazM5alpHUTdEcTlybnEzYjUvUzR5THY4ZDdtenl1K1NIY3A3''@;'; put 'put ''d05GcEZOaVNnZHJhQ3VNclBhS1VrQXlHdGNnRDVQcys0R1VlL21aUXJSM3dPalpKWnJkenRXK1RjdmFIRDYyNHBPSFFmWko0Ym0rTEpsZStkSlYzNERIa2FkdDdMNXMzYUFJWjY1cyt5WWp3RVFwRFZlQkNNVnRqTkJmTnFjVGZoSnBtUzV3QlJxRlVRQTFITlRiMTRsT3JZZEJIMGFndHp2VXR3''@;'; put 'put ''bUVPbVpqNFJ0TFBmZzJiNk8rbXpXQ3ZLaC9oc3Avb3BuMGMzZnB6bGcvT29tcTJxUWd2WU9FU3QxS3V0bGtJZXVaUDMrcFhFY0p6dFBac2hMMWZjOUdHV0lJN1g1cVJmcnoyOGRqOHFSejQyZ3F0OGkyb1ZYMkVzZnVObHVGK1FmWkEyVjQzM0RkbTN5UHlNQmY1NHZjb2ZVUi9PYk1NZlgxYjVJ''@;'; put 'put ''K3BEVHhYeDF2Vyt4L0dYTDlyM09CYUwrczRWK2g3RlF5WDhVZTc3UUtIdlVlcTNaUGNUTHRBNFFuRU00czAxV1FkNGMwM1JBUkpydTZrdlgvWkxzemJmZkZPU1l6dHZTa29iMmIrOVVoakhETHh1YS8vMjB3WC90bmtjYlprNzFyZUZqckV4emt0UTN3bmxmbFgwbjhTQW94ZS9mL2dmcERpT2Rx''@;'; put 'put ''aDl1UGEzMFljamIwcHFuMkg4YlhTQjNBazQwL293b012UXBzdTRYWnN1NDVhcmhoWWVrYkhJcWpxOVpTRjlnVjZuWEcybjF5bVRXK2w5eWhhM2ZKOHloU1ArRm5xTWZBcWdVSUdvTEdBMVFHU2tVQU1FNjhBbjJUcHFVZnNqdGVWRVhZcVpGZGF6KytMWllxd2J5ajQ0eHY0V0h2VlYrU3pzUnBH''@;'; put 'put ''TkszSnV1OEIvM1dhdHJ0SjE0K3ZJcHlxRDhyclorcjhLNjdjVTFrOVJTdDBJdlhQcmNkeU5QLzJuMVZIOHI3NitlTHkzTi82NC9CSHZrL0ZuR1BBcWhIWUNiZ2lBRzE1NC95ckRjUUhmREExNGVrKy9abmZSUGYzZGFCUm0rdy81cnY2V0Nxd3RsNi9SMTJPZENaY1pkV1hGVis5YnpSYk9hT1NX''@;'; put 'put ''QkVNbHJ5bStzVDk5a1k3czluMjVOMDk3YzhxOS9ia3QrMjF4YzM5Slh6QTBNbU5qb3FqZTREODJQemEzYTZjNEtvNE05Q2U2RS9tMnpKYTMrZHYrak52OEd6Yjk3U3RxMjVENWsyLzZ4OE9Ed2NJZjBoUHF2ZjkzNS83VS93SEFsdjh6Z1BYL0tRQzlWeWlOMXZEZjBkc21IdFppbkFoM1l5ZkFM''@;'; put 'put ''bkJ2NWhPZnlMeitkZE5qVDVpVk81M1NvR1FyN1RqV0xwaDE4dEZQZkNMOTJjLzJQdkdZNmV2ZllMTGlaOHFkaW5FMEtZN1Z1SWxHQitMUGlPbk51Qm9xQ2pYY3NnR1RNb3lOTkErOGtQbHZ3a2FqNnVsZ3RtRXNFbTV1RWl4K3NQa0VxOTlNZlZTRmV6cUNZQkJTMHdJKzhxU1FiS2VqbVVRQVpD''@;'; put 'put ''ZDgwUGpYaS9LVmkyTzNMVHYyVFhLNlhZZGNSMjRaVmhMK1p6N2t4Y1BTWjNrTlhwTE8xMzkwVDRKZHc5aDdjaWpuZEhycWMzMlhkckpzL3dNVHVWcHZ0UzAzZTBLVzd6aE95dkZsd0FkMUQ0TkNsMkJjVDc0cDlqSjZSeXhUZEVEVjRZQXJld1FQNFZaWDZZdnhvU1RBcFU2cEpkZC95V1UxYTBs''@;'; put 'put ''aWkwdFNTb3ZDNjk2cUtQeU41VzFyd29ITzVUbEJCdUNFRWx0NGdORy8vUHlDOG53OTlpay9mNzd3bkwrNitQa0Q2bk4wOU5MaTUrdmo5NEZhdGY3OGJLSDlzZjFJZ2NFMHVReGdRR01GK2k4MWVhMFlZRkJpaXFtUVdMZkRBcHRoY3Bsc2x4VURSckhML3JNSVBvcU5ObGNFSXNVOCs0c05XUW5y''@;'; put 'put ''YTZaMnRid1hzTDMvb21ndlR4ZGdZcDZUNVNoTisva0l1NXRDeFlXazRKMVdycU9nMzYvTndQZmEwdSsxcTVQb2Z3QVBmbng1QUFBQkFBQUFBUUFBdENjQXdsOFBQUFVBSHdQb0FBQUFBTlBCbllZQUFBQUExTDZtOWY5Vy91OEVXQVBGQUFBQUNBQUNBQUFBQUFBQWVOcGpZR1JnWUQ3Njd6WURB''@;'; put 'put ''MHZILzdEL2sxa2lHSUFpeUlEUkdnQ2xoZ2F2QUFBQWVOcU5sRTFvRTFFVWhjKzdrNVVMd1Q4VUJTbHFFbHVicEsyaERhWTBsQlJiYlVyU2puWVJha1doQ3hkYVlyVzZGdEc2RXhFWFhma0RVdmN1QmJIdVJNZ211TktLK0VNVVdseGtJUzA0bnZ1YXFYWFNnb0hETnpPNWI5Njc1NTE1cG9ZejRN''@;'; put 'put ''OE1VUWNvQTlmY1I3ODhSRlRPSSs3c1FFSWVvQmtmMFcvRzBFUEZ6UXpTTW95c0FmSm1DaWtzNG9TNTYvMlVKMGliSXZiS1NiUkxEdzdMQkZWQVNzNmhXMDV6VEFGSnZiYjFITXU2TG4wUG1UTTE3SE5LYUpVdmFKSkhHSmM1MXRiSUNkWVZxU3J2WHlHUEJWN3Y0aHczTVNhSDBPY01zSVoxVHBU''@;'; put 'put ''LzMwRGU4aFpydUhhWlJremVZMVRmR1dwR1dKNGhJdmV3WGE3am1MbUFZYTU1aFd3M245RXBCZSszU1NNalhlaVFLM0JsTjlySVRuSFJ4cDdETWtrZnNoaENCUm04OVY3SU5nemlIWExPRkhMNlhLN1plbGZIbUt2MGNCRXhNOGx4V2Y2ZllHOUpISlE5N0cwQSswVlljd2RIekZaY0pPUG1KWHJw''@;'; put 'put ''KzRpZHMwaFB1RVl6aXo2enhKcm55TmgxalNPS0QvUTh5ZnNsSk9uWHFsY2J5UGxPcW4vcTNUcGh3U3VyZitRUDZwdXpCUzIrZDBISlRveFlxbi9ycGY3UlorbkFLZXZWQm5MS3BQYmkvaXRVdkRmMGI1RDhTbjJTUzh5RjcxMVFtZ3RsMXZyN1YrcWYrcXpVZm5YT0lMVjNuZCtuNW9qN1l2dTl6''@;'; put 'put ''VDFWUDNSTm0xR3pwdnRkSjcycWNMM3FYUk81UWg3WFBtd0dtUVBOb1daaGpXY1JOaEh1dmM2ci9RVm9mV1Z2YTF4R010VENlWmxielU0RG1XWE5Vd09uNnhuenFmdWpIbTFDL1Fac0RuVVAxYi82dDZCNURGSXp6bXhtckI0ejgyVXlSM1ZUcjVuRFgzd0diOVIvWjVBTm50Ym5aRzdoVkZmUEd5''@;'; put 'put ''eFRUd0hwUmNxNWpCVFBCSHN1bUhseW5weWx2eVZlODF3S3pTQmhXaEdoWWpMblZXMCtISTR0NGVoL2labUIrd2ViUC9VTWVOcE53bDFJR2dFQUFHRHp2MU5QTy9XNjgrNjZYKzl1ZXVlZGR4RVJFVEpFUWlRa1lrajBFTkZEUkVRUFEwSmt4QWpwSVh5SWlCZ2pJbVNFaEl3WUlTTjZrQmdSd3dl''@;'; put 'put ''SkhpUWlJaVFpZWhnU01tVHNaUS9qK3d3R3cvSS9lNFp5RDlLemJvd2JUNHdQSm9NSk4xVk5kMmFybVRLL05VK2JEOHcxaTlFeVo5bXhQRnFUMWlYcm95MXAyN0VkMnM1czk3YU9QZFdiNk0zMi9nUWdJQW5rZ0JMUWRsQ09JY2VDWTl2eHpYSG50RG9ubkJ2T2xvdHpyYnAyWFhWWEcyVEFOSmdG''@;'; put 'put ''RDhCenNBbDIzUVB1VWZjN2Q5VURlcVk4WlUrM0w5Vlg3V3RESExRQ2ZZYU92VWJ2bUxmZ3ZmRnB2aGxmeGZmazUvMEovM3YvdnI4SlcrRUplQjQrZ2svaGwvNVlmN0cvampnUkJCbEMwc2dIcElUYVVSKzZpT2JSSXJxUEhxUG42SFdBQ2p3SC9tQWVqTUVHc1FTV3dSYXhQSGFKM1dBdnVBR0hj''@;'; put 'put ''QTRmd3Fmd0duNkZ0L0FPQVJBNE1VMVVpTy9FRDZKQjNCSlB4T3ZBSmpsSXhzZ1VtU0hueVJVeVQyNlEyNVNkOGxFVUpWSERWSnhLVXhVYXBoazZRby9RQ1hxU0x0TW45QVY5UmJmb1gweU1PV1hxVEpONVpqb3N3T0lzeHhiWVhiYkVuckExRHVJK2NVZGNsYnZrcnJuNzRFcndZN0FZUE9jUlBz''@;'; put 'put ''VEgrQlNmNFJmNVBGL2s5L2tHM3hWQUlTRHdnaWJFaGJRd0p5d0xhOEttMEJSbnhHVXhKeGJFTGJFa2ZoVnJZdjNOWVdndHRCWGFDNGZDamZCRCtGV3lTejZKbHpRcExxV2xMMUpYQnVXQUxNbkRjbEtla1Jma25GeVFkK1dTZkMxM0lvRklLcEtOVkNOdFpVeVpWVGFWUGFXc25Db1hTbE5wS1Iw''@;'; put 'put ''VlVIRlZWRWZVeEg5bTFaeGFVYytpUUpTSmprY3owWXcyb2MxcFdlMUJhK3RHZlZRZjE2ZjBXWDFKWDlYWDlZWitxei9wdndlQnYwdEF2U29BQUFBQkFBQUJQQUJZQUFvQVB3QUVBQUlBS0FBNUFJc0FBQUNEQVJZQUF3QUJlTnFGa3MxT3drQVVoYzhVSklER0tERXVHaGQ5QWZsVEllcFN3MFpR''@;'; put 'put ''SXdvN0VoQUVJbEF0eFlUWDhDbjBUZng1QWQyNGR1M2FoWWZodHFEQmtFazczOHk1OTl5NTB3S0k0UU1CcUdBRXdDR2ZNU3RZWEkzWndETHF3Z0ZrNEFnSGtjU0Q4QUpNdkFtSG1Qc2xIRVpheFlRak1KWG51WWh0VlJGZVFrbmRDNjlnVFgwS3J5S3F2b1dmc0c2RWhKK1JORGFFWHhBMjhzS3Zp''@;'; put 'put ''QnJuWTM0UHdEUXFPSUNOR3d4NTRqYWFhTUhseVI3NXBIbnlGRHV4VUtOcU1hNmxZL3JrSXVjdXMvck03U0dPQWhyTWM3U1RqWTVFNVgzSE0rcE5ES2hVR1pWaVJsS1BmVnpnQ0dVY2syWjViRTU1ekt0aC9hbFM0c3BoVEZ1ZjBacXFPcTlTaVhUSjJXYk1xUE1UNWpjNGovTHExS3JrVStwRFhk''@;'; put 'put ''L2wzdjkzTS9KenVkcERndVB1bDdPdGZidSthNXlhemJXWDA1ZXNKbFdYdXdOK0NTOG13ZG1yMmRWZFRtb21ablk0YTIvU2M1bHFEVmM2My9WdnF5QjNsOU9xeFpIUldwWW5TMkdYN3kzcytQOUtGdGVNYTJoL1IrNDk1enNXY2NzTzJsUWN4blIrQUdpaWd2Y0FBSGphYlpOWGJCeFZGSWEvMzdG''@;'; put 'put ''MzNUWk83NzFYeDE3M3hDa3VhOGV4WXljdWNlekVTY2E3WTJmeGVoZkd1M0ZzdWdRQ0hrRHd3alBsQ1JDOUNpUjRRS0pYMFhzSDBYbWtCKy9jQ1Y0azdzTjgveG1kODU4ejk5NGhDM2VkRzJBZS83TlVtMzZReFF5eXljR0huMXp5eUtlQVFnTE1wSWhaekdZT2M2ZnE1N09BaFN4aU1VdFl5aktX''@;'; put 'put ''czRLVnJHSTFhMWpMT3RhemdZMXNZak5iMk1vMnRsUE1Ea29vSlVnWjVWUlFTUlhWMUxDVFhkU3ltejNzWlI5MTFOTkFJeUdhYUdZL0xSeWdsVFlPMGs0SGh6aE1KMTEwMDhNUmVqbEtILzBjNHpnRG5PQWtwN0M0bmF1NG1wdTVnVHQ0bit1NWxxZjVtRHU1amJ0NW5tZTVoMEhDM0VpRUY3RjVq''@;'; put 'put ''aGQ0bFpkNG1WZjRsaUhlNERWZTUxNkcrWVdiZUpzM2VZdlRmTStQWE1jRlJCbGhsQmh4YmlIQlJWeUl3eGdwa3B4aG5PODR5eVFUWE15bFhNSmozTXJsWE1ZVlhNa1AvTVRqeXRJTVpTdEhQdm41aTc4NUo1U3JQT1ZMS2xDaEFwcXBJczNTYk0zaFYzN1RYTTNUZkMzUVFpM2lkOTdSWWkzUlVp''@;'; put 'put ''M1RjcTNnYzc3UVNxM1NhcTNSV3EzVGVtM1FSbTNpUHU3WFptM1JWbTNUZGhWcmgwcjRnei81a3E5VXFxREtWSzRLVmFwSzFhclJUdTFTclhacmovWnFIMCtvVHZWcVVDTmY4NDFDdk10bmZNQ0hmTVNudk1jbmFsS3o5cXRGQjlTcU5oMVV1enAwU0lmVnFTNTFxMGRIMU1zRFBNZ2pQTXBEUE13''@;'; put 'put ''MTNLV2pQTU9UUEtVK2ZsYS9qdW00Qm5SQ0ozVktsZ1lWVmtTMmh2eDFvMWJZU2NUOWxxR3ZidEN4ejlnK3k0Vy9MakdjaU5zamZzdlExeGkyMGtrUmc4YXBDaXZwRDNrV3RtRitLSkpJV3VHd0hVL20yLzlLZjhpenNqMnJrUEd3WFJRMmh4T2pvNVpKTFJ6T0NQd3RubnZVWTR2bkV6VXNiTTJz''@;'; put 'put ''SE1rSWZHMVdPSlcwZlRHRE50TXZadEJ1WHNaZEZMWm5lc1F6UGRwTmV0eUZ2OE9iSVdFWTZEaWRpZzliVG1vMFpxV1NnVVJtNU9zMEhSelRvVE96ZzVQWm9kTjBjQXk2VE5XWUMzOHFIaTBwclF4NkxQTjFtNlNrbWFiSG15WmxtTlBqUk9QRE9hbjBNOUR6bjhsU21aRy94OXZCbEdGQmJ6anFo''@;'; put 'put ''Rk9qUXpIN2JNRjRodTdMMEJQVDJ0ZHZacHgwa2Q4L2ZkcVQwNmVkbmpoWVZ1V3lMRmpwNngxMnJLbHJOVzdRYXh6R1hlVDFScUsyWTQ5RngvTEd6NnQwWFdtb3Z0cGpqY2NHajQyK1BtTTA0U0w5TmxoU0V2Ulk1ckhjWTRYSFNzTmdVM1lvNVNUY29LS3BJY2NxdG1MSmZNdWR4VWozN3FkbGtU''@;'; put 'put ''WDkyZWs0WUowZjBDUzYzZE95d1B0OWpEYjdtdFo1VnZvMFRISXlHb3U0eWJuVzJOUWVSV3duTDJKNzZoKzNaYmNoQUFBQWVOcGo4TjdCY0NJb1lpTWpZMS9rQnNhZEhBd2NETWtGR3huWW5UWkpNakpvZ1JpYmVUZ1lPU0FzTVRZd2k4TnBGN01EQXlNREo1RE42YlNMQWNwbVpuRFpxTUxZRVJp''@;'; put 'put ''eHdhRWpZaU56aXN0R05SQnZGMGNEQXlPTFEwZHlTQVJJU1NRUWJPYmpZT1RSMnNINHYzVURTKzlHSmdhWHphd3BiQXd1TGdEK0hDVmdBQUFBQUFGWW1QWjNBQUE9KSBmb3JtYXQoIndvZmYiKTtmb250LXdlaWdodDoyMDA7Zm9udC1zdHlsZTpub3JtYWx9QGZvbnQtZmFjZXtmb250LWZhbWls''@;'; put 'put ''eTpNZXRyb3BvbGlzO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi9mb250LXdvZmY7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R1JnQUJBQUFBQUZVa0FCTUFBQUFBcFFnQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJHUmxSTkFBQUJxQUFBQUJ3QUFBQWNmTkg1NWtkRVJVWUFBQUhF''@;'; put 'put ''QUFBQVRRQUFBR0lIMVFmOFIxQlBVd0FBQWhRQUFBY1hBQUFPZGo1OGZFeEhVMVZDQUFBSkxBQUFBQ0FBQUFBZ1JIWk1kVTlUTHpJQUFBbE1BQUFBVFFBQUFHQm9RS3p6WTIxaGNBQUFDWndBQUFKc0FBQURubmRERDdGamRuUWdBQUFNQ0FBQUFEQUFBQUE4RWF3QnBHWndaMjBBQUF3NEFBQUdP''@;'; put 'put ''Z0FBRFJaMlpIMTJaMkZ6Y0FBQUVuUUFBQUFJQUFBQUNBQUFBQkJuYkhsbUFBQVNmQUFBTjR3QUFIRzQvN0hHREdobFlXUUFBRW9JQUFBQU5nQUFBRFlMWllnU2FHaGxZUUFBU2tBQUFBQWhBQUFBSkFkNkJDQm9iWFI0QUFCS1pBQUFBb1lBQUFUYXExTStWV3h2WTJFQUFFenNBQUFDY3dBQUFu''@;'; put 'put ''cE43akxtYldGNGNBQUFUMkFBQUFBZ0FBQUFJQUtFQXBGdVlXMWxBQUJQZ0FBQUFYRUFBQU1RSSt4NFlYQnZjM1FBQUZEMEFBQURvUUFBQmlHWEZqMktjSEpsY0FBQVZKZ0FBQUNCQUFBQWpSbFFBaEIzWldKbUFBQlZIQUFBQUFZQUFBQUc5bmRZbUFBQUFBRUFBQUFBMUZHMWFnQUFBQURUd1oy''@;'; put 'put ''R0FBQUFBTlMrcHZWNDJnMk1RUXFFUUJERUVrZjBNTFBvZjd5cEwvRG9mWGZWL3ovQUlnUkMwVFFDTFI2Y2RGUmtqVnNvN0h6VHYxRDRCN200MDQ4RE9sb3BObHY2NDVTZVhYTFQ1MXNYelNhK1czQUYzQUFBQUhqYWpWY05iSmJWRlg3T3VmZSszOWV2Z0tXVUg2RWdJVmdiMHhSR21BaXlhUmhV''@;'; put 'put ''UnlxU2ppa2FadmJqbklQeDEyRXpGdWY0Y1dnV1VoZUhEQWxwRVBreDJnQ2lZa1hHdW9ZeHh6WUN5Z3hoWUZ3SHlCWW0wK2xDUkhuM3ZPZjlzQy9RYnVNSkQ0ZHo3M3Z2UGVjOHQrY1dBcUNBRVpnS21WeFhQd041ZUhvUXgzRDhSNkJ3Yzc3ZE9BOFZjNy9ST0FlVmMrZk1uY1Bab0Q4WlRXY2s3''@;'; put 'put ''UGhkQVFNd0RGWG1jUmlKZXRlYWprWUxiRldKbWhIeEkrbTlpRjhNTmw5QXhXY1ExTVhONUlDSldJbFBFY3RnS0kvQmVUSklqcUVVdlhpeWY4UWQ4WmI0U0h3Y1BmeUozKzl4NVBmZGVqdTVkL2IvSitPZjk3akN1ejJPOUh5ZVA4VzdlaGpaRW5mR3V4TmM1ai9Ddjc5TDBOMGVjVE96cEJqT1RG''@;'; put 'put ''Y3hXOWNSaWxyQ1lSVGhNWVlJK0R3UllSeVJ3M2dpandsRUNYTTdrWlZxSWdSTDhSUE9mSlFJelBoSytsOG1CSzhRZ2xjSnhTSEM0MDNDNHpnUjhGY2l3a2tpd3J0RWhMTkVEdThUT1p3blNsaTlUN2xhVEJTa1RNcFFJdVZTVHE2UUN2SmdWcmJBdFVkVEpTUDV6ZldFMkxuVEU2dWQyTm1Kdlow''@;'; put 'put ''NFlES1JSeDFSZ3R1SUFocUlVc3pIZzF3aGlTU3lTQ0tMSk9CeFBNbjVxNGtTL0FKck9mOXBiT0w4TFVRcHRoRTViQ2Z5ZUlISVlRZVJ4NHRFRGk4UmVld2tTdEJHbEdBUFVVQTdVVUFIVWNCZW9vRGZFSUxmRW1MWmlmQTJVWXEvRUdsZTFQS2lsaGR2ZVFtV2wyQjU4WllYYjNueE1sQUdNbDlY''@;'; put 'put ''eTlYa0pFZUJxOVl5UTFXc2NTMXJPNFkxSGNmTVRHQkc1bU1CRnFJUjM4Y2kxbklwbG1FNUhtRVdIbVgwMnhqUmk2emtLNnpnSVZidU9DdDJrcFU2eTVPY3Q1dFZ4bjBya3Z1bEQ5czkzQ2VOakxzMzFiV2J1bXVPUCtwR3JUYlMzUjM0Yk9STWdtNitQTnZqM1RoelVmRzgxOGZqNWZIeXkwZlNX''@;'; put 'put ''eGV2aTlkMU8vSTMrMFpSYVpvUTA0VGlxNFREM1lUSFBVVEFMQ0tpSXA3a25FUU5ZbXBRVTRPaWxZaXdsWWlzMG1LVkZxdTBXS1hGNnFvNFFUaWNJaHhPRXc2ZkVBRVhpRWo2U2wvV3RaLzBJL2VYL3VTa29tSVZGUmtpUTdpK29nWlhFYVhvUy9ReXBZc3BYVTNwcnFqMFc0bXMwcjNGRTJYaXla''@;'; put 'put ''blNYVkhwWFJyM0ZwVzNxSElXMVVXbHB4cFAxYjJMNkZuWFNiVGVOS3ZGQ0JQbE9vc3paL3AxcGw4dHhweW9XSXVSSjFyV1RQeFpSVHZMUWs1R3kzanVudnowcW1PRURhelgzWXhyRmlOWnpValc0Q2xHOHpRMjRCbHNaRVJiR01sVzNzWTJucmFkcDl6TDA1MWdEVTd6WkJkNGduN2NiU0IzR2NJ''@;'; put 'put ''Vmg1bWVGWDJzbzVTYk9zcTV5ODIweE95YjJZbU9SY1BJbmN4L2g2eVFsZktFckpFVzJTalB5WGJaS2J1bFExNlhBM0pZanNvN2Nrck95QWR5VGk2bzE0S1c2UUN0MUJGYXJiVTZWaWZvTFZxbjlkcWdNL1ZldlU5bjZ3SnQwb2QwbVQ2bXpicEsxK3A2M2F5dHVrUGJkSS91MWYxNlVOL1NZOXFw''@;'; put 'put ''cC9VOS9WQS9kbkNSNitYSzNTQTN6STEwMTd2UjdnWTMwVTF5dDdscGJvYTd4MzNkM2UrKzV4cmREOXpEN2hIM1UvY3p0OXF0Y3h2Y3MyNnJlOG50Y3UxdW4vdURlOE1kY1crN0UrN3Y3cC91Mys0VHJ6N3YrL2dLUDlnUDkxVyt4by94Ti9vditzbCtxcC91Ny9Tei9EZjlBMzZlWCtSLzZKZjRG''@;'; put 'put ''WDZsZjhLdjhTMStvMy9PYi9jNy9XN2Y0Vi8zQi94aGY5Uy80MC81TS80RGY4NWZDRDRVUWxrWUVDckRpRkFkYXNQWU1DSGNFdXBDZldnSU04Tzk0YjR3T3l3SVRlR2hzQ3c4RnByRHFyQTJyQStiUTJ2WUVkckNuckEzN0E4SHcxdmhXT2dNcDhONzRjUHdjWVFvaW5yeGRpeldiZVFseG5VWlhw''@;'; put 'put ''VXdtb3hiekxPMHkxL2thY1kxeGpjWlA1aXdEalY3dXZFazQydVZQMU9sMm5pVThaU0VzZEI0azc1R2JqVC9lT09KNXU4MFBtK2U2NHczR0ZjWjU0MGIzR3p5ODhhTHUyZDlNeHVqK2E5Z1RETisxcmlwaStXdU5IYXo1eG52TTE1MUphY1pNUHRLbm01OHJiYi9MOWFObCtTcXZUdkdsNDJmTVY3''@;'; put 'put ''WXhjeGV1Mlh2djNPYXovWnV1U3JEaXpObnZzVE8xSFNKK2F2Tm43WFRyRDV1OWwyWnpJL3FHcjFvMjJpcWlxdy96ZXFVMUxZNXFXYlM2cVJScC9vczJrVi9NcWZGN0UydTZhSjZpeHA3dyt6OWlWMnNhWnF4Vk51cDlyTCs5QXhwM2c2YS9TT3IwWjlONStkc2ZxcWNUcHRqTnlMVjdTWCtHclBQ''@;'; put 'put ''cDdiTlNWV2Q5YWMzNkthTVp0S0taTzBYelA1VzZyZjVkaTkwcVBrM21EOVZXbFhHbm1TY04wOVA5a2ZwZmJIbzdqRDdzTm5abGV2aVh5WFZpZmRjVnFuc2psT0t0N3Y5LytCTFp5cXVzWGNwK082cVpsYVMxNmxuMTY1aEYweGUyQkUreDVkWURtTnhJM3RZMHJuN3NHOS9nVDA5NmR4OTdZMWFi''@;'; put 'put ''cDI3SDMrdm1zbytWRS8weHgzc2N3UFk2ZTdrN3o0emlVcnI1VVBaOWI3R3JqV2ZiN2ZoOW5vYng0N2V3dlhXcy9QZGJyM3ZLK3grcjdGRC9oSUg4QjIrNk01aXNiMHExK0JmRXZBVU8vRVF0RnBQYmVONVJhNnkzODBpU1B4alUrRVMzRTlld1c1WGlrSGNheVFqR28wYmVPcEpQT1Uwek9Eb3Iw''@;'; put 'put ''MjdmelErYW14M0J2c3lmTWg0cnZGbTQxUlZPYk5MOFNYdTh3QytLem5KUzRrVXBGUjZTNThyVC9RZjZqNmJLUUFBQVFBQUFBb0FIQUFlQUFGRVJreFVBQWdBQkFBQUFBRC8vd0FBQUFBQUFIamFZMkJtY21DY3dNREt3TUxVeFJUQndNRGdEYUVaNHhoRUdNMkFmS0FVSExBeklJRlE3M0EvQmdj''@;'; put 'put ''R0JkVS96TkwvalJrWW1JOHlxaXN3TUV3R3lUR3hNcTBIVWdvTVRBREpaUXBBQUFBQWVOcTFrMWxRamxFY3huLy90MzBSS2hUMTl2WnAwMGFpRkVYMnBjaStsS3pac3EvWkd1c1FRMFZTeUo0a294a1RVMU8yRys2NE5XT012cytWVys0TUhjZFhURFBNdUhKbTNuUGVjODZjNTV4NW50OGZjS0hy''@;'; put 'put ''QzBGMGoxVHFtVGpucmxLc3h5V013NDJCbEhDTE91N1NTQlBOdE5BbUhoSWdneVJNQmt1Y0pFbXFwRXVtVEpVY3laTkNLWklTSTlWNFpieDNpVEtQbTYzbUUvT0w1VzRGV3NGV3FHV3pvcXhoVnJwMTMrWWYrVTBwZllmRmpSN2FqMm5qbWZoS2Z6SEZKckdTS0NtU0pobVNKZG1TS3dXeVFUWnI3''@;'; put 'put ''WmZHVzYxOXlHd3gyODNQbG1FRldFRldpRk43cUpYMlMxdDlWQy9VYy9WVXRhdFc5VWcxcTRlcVNUV3FCbFd2NnRRMVZhdHFWTFdxVXBXcVFwV3BNNnBVbmVoODA1blZtZlQ5azZQY1VlRElkOFRZQjlyOTdENTJMN3ViM2VqNDJ2RzU0L0NIa0hmSlhWNzlwK1p1ZUR1VDRJOWJCS1A3ei9pSFJ0''@;'; put 'put ''ZEpGMXgxZHU1NDRJa1gzdmpnU3kvODZFMGYrdUpQQUlIMG96OERDQ0pZWnp4SXB4NktTWmhPSkJ3Ymc0a2draWlpaVdFSXNjUVJUd0tKREdVWVNRd25tUkdNSklWVVJwRkdPcU1aUXdhWmpOWE1aREdlQ1V4a0VwT1p3bFNtTVowWlpKUERUR2FSeTJ6bU1KZDV6R2NCQzFuRVlrMWFIdmtzcFlC''@;'; put 'put ''bExHZUZmdjhPZHJLYllnNXhuTk9VVTBZRjV6bEhKVlZVYzVFYUxuR0Z5OVJ5bGV2YzFCVDlaUFEyRFpxbGU1cW1uMjBWcTdVZDBXemdiTGMzNjFtaisxMmMrTzFXNFY4Y3ZFQTltMW5aWTJVdG15UkdqMXZZempIc09DUmM4eGtwVWJvQ0lyaWpkeDZnYVpZRVhRL3gzV2VLbkdIRXNvMjliR1Vm''@;'; put 'put ''ZXpqQVFWMUwrem5DVWIxMW1GSk9jWkxYdXBwNnNVNjh4RnQ4MkNoK21uL1BINUROcXVoNDJtTmd3QUw4Z2RDWndabHBQUU1EMDI0bVZnYUcveUhNMHYrTm1YYi8vOEowakVudy81Zi9maUErQU05UERWaDQycTFXYVhmVFJoU1Z2R1VqRzFsb1VVdkhUSnltMGNpa0ZJSUJBMEdLN1VLNk9Gc3JR''@;'; put 'put ''V21sT0VuM0JiclJmVi93cjNseTJuUG9OMzVhN3h2WkpvR0VudmJVSC9UdXpMc3piNXQ1WXpLVUlHUGRyd1JDTE4wMWhwYVhLTGQ2emFkVEZzMEU0YlpvcnZ1VUtrUi85UnE5UnFNaE42eDhub3lBREU4dXRnelQ4RUxYSVZPUkNMY2RTaW14S2VoZW5UTFQxMW96WnI5WGFWUW9WL0h6bEM0RUs5''@;'; put 'put ''Zjl2TXhiVFY5UXZZNnBoY0FTVkdKVUNnSVJKK3hvazJZdzFSNEptbVA5SERQdjFYMEJiNXFSb1A2NkgySkdzSzZmMFR5aitkQUtneUN3eUxTRFFKSlI5N2VDd0tHMEV0Z25VNGpnV2Rhcis1U1ZMdVdraXpnQ01rT0hNa3JDTDdFWlp6ZGN3UnIyMkVvODRDOUlsUWFsWi9OUWVxSXBtakFRejJV''@;'; put 'put ''TENITFpEK3RXdEJMNE1zZ0hnaFpXZmVnc0RxMXQzNkdzb2g3UGJobXBKRk01REtVcmtYSHBScFRhMkNhekFRT1VuWFdvUndsMmRjQnIzTTBZRzRKM29JVXdZRXE0cUYzdFZhMmVBY09ydUxQNWJ1NzcxTjVhOUNlN21EWmM4QkIzS0NwTkdYRmRkTDRNaTNOS3dvS1RIUzlSSFJrdEppWUdEbGhP''@;'; put 'put ''VTFobFdQZEQyNzNva05JQnRRYjYweWkySmZQQmJONmhRUlduVWhYYWpCWWRHbElnQ2tHSHZLdThIRUM2QVEzeWFBV2pRWXdjR3NZMkl6b2xBaGxvd0M0TmVhRm9ob0tHa0RTSFJ0VFNtaDluTmhlREtScmNrcmNkR2xWTHkvN1NhakpwNVRFL3B1Y1BxOWdZOXRiOWVIZ1lCWXhjR3JiNXpPSWt1''@;'; put 'put ''L0VoL2d6aVErWWtLcEV1MVAyWWs0ZG8zU2JxeTJabjh4TExPdGhLOUx3RVY0Rm5Ba1JTZy84MXpPNHQxUUVGakExalRDSmJIaGtYVzZacDZscU5LU00yVXBVMW40YWxLeW8wZ01QWEQ4T2hLMEtZLzNOMDFEU0dETmR0aHZIaG5FMTNiT3M0MGpTTzJNWnNoeVpVYkxLY1JKNVpIbEZ4bXVWaktz''@;'; put 'put ''NndmRnpGV1paSFZaeGphYW00aCtVVEt1NWwrYVNLKzFnK28yUW43NVFMa1dFcGltVGU0QXZpME93dTVXUlhlVE5SMnJ1VTAxM2xyVVI1VEJrMGFQK0grSjVDZk1mZ2wwQjhMUE9JaitWeHhNZFNJajZXVTRpUFpRSHhzWnhHZkN5ZlJud3NaeEFmUzZWRVdSOVRSOEhzYUNnOGRzSFRwY1RWVTN4''@;'; put 'put ''V2k0b2NteHpjd2hPNEFEVnhRQlZsVkpMY0VSL0pzRGo2dVc1cHpVazZNUnRuelltS2owYkdBVDY3T3pNUHEwOHFjVnI3K3h4NFp1VmhJN2lkK3hybmVXUHlENE4vaXhkbEtUNXBUbkJ3cDVBQWVMeS93N2dWVWNtaDA2cDRwT3pRL0Q5UmNZSWJvSjlCVFl6SmdpaUtHdDk4NVBKS3MxbVROYlFL''@;'; put 'put ''SDA4RU9pdmF3YnhwVG93anBTVzBxRWthQVMyRHJsblFOT3J6N0sxbVVRcFJibUsvczNzcG9wanNSUm5NZ0NrbzVLYXhzT3p2cEVSYVdEdXA2ZlRSd09WRzJvdWVMRFZiVm5HRnZRZnZZOGpOTEhrM1VsNjRLU250Ulp0UXA3eklBZzY1a1QyNEpvSmJhTyt5aW1KS1dLZ2lQZ2h0QmZ2dFkwUW1M''@;'; put 'put ''VE9ETG9FaVpIR3lzZy90aWgwNW9vSjJBdDk2MGlydjIwTHR6M1h5SURDYm5XN25RWmFSb3ZOZEZmVnFmVlhXMkNoWHI5eE5Id2ZUenJDeDVoZEZHVTh1ZTkrZUZPeFhwd1M1QWtaWGRyL3VTZkgyTzlidFNraysyeGQyZWVKMVNoWHlYNEFIUSs2VTl5SWFSWkd6V0tVUno2OWJlREpGT1NqR1JY''@;'; put 'put ''TWNGL1RTSHUyS1ZkK2pYZGgzN2FOV1hGWlVzaDlsMEZWMDFtN0NOejVmQ09wQUtncGFwQ0pXZURwa1BwdWRtdkN4bExnc1JkeXpaTmRGOUIwOElSM2l2empFdGYvcjNISVUzS0xLRWwxbzF3bkpCMjBmSytpdEpidVRoeXBHWisyOGJHZWlIVWszNkJxQ25rZ3VPUDVlNEM2UEZla1U3dlB6Qjh4''@;'; put 'put ''ZndYYm0rQmlkQnI2cTZBekVFdWV0Z2dTTEt0N1NUcVplVUh5RWFRbndSZFZDc3dKNENjQms4TEpxbVhxbURxQm5scGxUQVZoaERvTlY1akJZWXc2RGRiV0RybmNaNkJVZ1U2TlgxWTZaelBsQXlWekFQSlBSTmVacGRKMTVHcjNHUEkxdXNFMFA0SFcyeWVBTnRza2daSnNNSXVaVUFUYVl3NkRC''@;'; put 'put ''SEFhYnpHR3dwZjF5Z2JhMVg0emUxSDR4ZWt2N3hlaHQ3UmVqZDdSZmpON1ZmakY2VC92RjZIM2srRnkzZ0Ivb0VWMEUvRENCbHdBLzRxVHIwUUpHTi9HTXRqbTNFc2ljanpYSGJITSt3ZUx6M1YwLzFTTzk0ck1FOG9yUEU4ajAyOWluVGZnaWdVejRNb0ZNK0FyY2NuZS9yL1ZJMDc5SklOTy9U''@;'; put 'put ''U0RUdjhQS051SDdCRExoaHdReTRVZHdMM1QzKzBtUE5QM25CREw5bHdReS9WZXNiQk4rU3lBVGZrOGdFKzZvbmI1TXF2Tm4xYldwZDR2U1UvWGJuWGZZK1J0bE03b3NBQUFBQVFBQi8vOEFEM2phdFgwSmVHUFZlZWc1NTBxNmtqZnRrbVY1MFM3YnNpVGIycnhidHJ4S3R1eXh4K1BaUEo1aHh1''@;'; put 'put ''TVpHQWlUR1FqTERFc0lKU1NrU1VOQzJnUkNDRHhhYUZrbXdMQk1GZ2hmU2lZTEpDOXRtclJaMnJRcDlBWFN0RWxMK3NEeSs4ODU5MHF5SmM4TStiNEhZOG0rT3V0Ly9uMDVRaFZvYVQyQ1B5dllrWUMweUl4c3lJMWFVQXgxbzM0MGdXeEp5L0JBWDA4aUhtbjFlNXJxYWkxNm5VWkJVRVY3UU9u''@;'; put 'put ''VU8wVnp4T3cyUjJMdVdDUW1zbmNSZnBXZjBtZjBuWDRDVDJMeTcxSWIxaUVSaWVIUDVsN0cvZjg1TlB6dzhQREREdys3bk03aDRlRkR3ODdiSHo3a2NoNXlQdnp3dzg1RGgyNGZHM3Y0OEpqanU4SWJLYWZYQ2Y5dVBlSWFHL01jZ04vR25IM0Rya00zZEZuRHM4ZVBQM2I4K0d4NDFSbDJ3aitF''@;'; put 'put ''Q0pwZi94MzZHbm1DN2MyYmRDR00wUkpDcUNhRENCR1dGVmdRck1LVVFxSFFLbXE4ZXAxU3RBYU1FY0Z0OGNXaThVaW54V3hTdVpmMm1tS0N3MkcxTkRWWnlCTTV3M2NkVnJQRFliWTZFRnBmUitQNE1ieElIdFM1VUFWQ09nRmVuMFowWGorODNBRHoybEVUdWlIelpPZnN6bVN6VmtXUVVpQ1lJ''@;'; put 'put ''THhTaVRXYW1reU5ybG9RUmZWU1ZRVlJxL1VaQlNaRVM2YnNTUjk5d0Q1RWF2RndhVCtwNGE1a0kwSk5qUTMxTUkyOXpsWnJoUVViOWZuL3hJWUFGaU9pVzNRbjJFOGl3bjRpSXZzUjZZZjR2NkxYYXE4TkRnZnZnWi9qMnVQUjkydFBTSDlkbzMzdW51ZzkrS3V2OWo4Ri8vVy8ydjgwL05mL0tr''@;'; put 'put ''QXl0SDZXaE1uYnFCRjVVUnRxVHdiYkFpNm52YTdXYWpaVVZxakZHa1NVQUdhU0JqQ1EyeEJHK0VNQUVpdWFhdExyQlFDd1J3Vm9FZlA1RXhackxJUmowUUdjQVBTd1dFV2YzOXlJelFnZTE4QmJQQmFGQnlSOC9FajJwcjBkMDNzdjI5KzVzeXQ3MWE3MmlabkwzNWM3M05VYlNXSXltUnEvL0Vv''@;'; put 'put ''eE9hemIzVCt0WDdQTlp6dTJ4OFgrL3BxNS90R2EzOVR0bk1mMmR2MVBOVU90dVpHUlVEQm1lZ3NXb2tUaDlmOG1iNUpuQUNPTWNEcGgxSXUrbFhteUZrNG9VSW1WRlJpcmxIZ1ZxWkJhbzFJZlFRb0ZXaWFZWWt3MWdGNVlyaEtKSUdpRktYdm1TVDkwQ1Yrd0M0S21ySis0WElWRjBTckMyVWJL''@;'; put 'put ''OUNBRTJ0SnVxSHl2WGJ1U3Z2WjJoOE5rUXFpOXQ3MG5IbldFSGFGbW42bkoxRmhYYXpUb2RiQ1pHbCtOYUE0WU9FZ2puUUJLVXcxMjR3aDJHeWdzM1M2VjJXU0pvRTJmRCtEQ1oxK1liRzZaRElYWUsvN29jSzUxK05wNG9yVTEzdFdDWnlkYjhoOEYyTU5FSzE0S1pVTWRNNkhRVExoOUpvam4x''@;'; put 'put ''cmJodTFPZGtaRlV0RE9WT3hpY2FRL1R6NkJGTUo2S2RJN1FqMkIvQW1wWi94MDVTWjVGRGhRQVBqT1E3QTBIdlUwTjlYVzFGYmhDSUE2TUJKS21HSTZYZ1Z3dEdTVVFLWU1Nb0ZCYm05UFpGbXVMT2dQTzFqYVhTclFFbEg2VjIwWDNGRThVN3d3K3NzWVRWcFZvUmJBMUs5K2xJZUh6QTJyQlRr''@;'; put 'put ''bHc5OUkxL1FlN3BtY2I2NE96bmNGMFlQdjIvdjN0alVNZG9mZm5QdGNWbitqdjhEVk5uaHp1R1p6dkYvZnNEKy9zVFIxMHQwejRncE9Cd0dSZ2NObzV2akkrMzNEbDBFbXlPeEtJajliSFc1cmpheTlucjV1MVo4SzlZNER6d0JmUWcrUkJWSU9DbVNkYkFGRXFLZXRoNTRzQkNYU0kvcmtJZitJ''@;'; put 'put ''bFNpSFR1NTYyZUFsc3h4RExzeDdSSkxwMzZ1MUdvMTB2dHVFZmtlT3RScnZkMkhxY0JLREh3UG9PbkNCZlJ0Vkk5VlMxRXJjSEdNdEtXTm4yck9Lang0NnROQzlzMzc3UXZQQ3pXMjc5NlVMcnpoYytjTzI1eFFDZEVPaDNCL2JMZlVYb3k4SGpUM0RBaFZpL0ZSamg1c1Z6MTM3Z2haMnRDeis5''@;'; put 'put ''OVphZkxiQyt2Zmc2dkVTK0Nqc1pUZzR1VG8wbi9QVldVUTJjS2QyUFVUVWMyaVMwQXVRbk55RWlZQ0tjb2l5V0g2UXdCU01zbzMxenMrMGhsME1wbWdJR3R1WjRRaVhDLzI2WHp3OS9KK0tEMk05L28yZHB0Y0QvUGo4N1lNNlFvUzN0US8raS9FNVVhYkdWL3diWTdLSmQvUllyMjRuNzYxbzFG''@;'; put 'put ''aFRWdGMxV3BWSlZwVkJVMWdjRGdXQjlwVUpScFZJcHJNMjExUW9CcTdVVkZmbDJDdFdGMnVIcnFqWFdpRXJicURHNUdPTldWcXQwT3IxZXAxTlZLOVdpS0ZTN1RKcEdyU3BpMVZSZmVrc0cxeFE2U21wSUZGVWlYOUtOWURyRkF1QTlBQklMYUFWWUEwVVRCWjVtZkYybkV1c0MyRTBsYW94SzFn''@;'; put 'put ''aXBlVEh6SXZ6RExTKyttSDdwSlRyZTlQcU42Q1cwSC9EUG1nUXlSK015K2dFUmVRd1UwNEE4WEFVeEo4NDBWMWxBeXRVN0hjR2pvVEFWZDBGMzQyQVhIYXNML1FyMzRpaFFibTNTekJCM29ZQzRlaDBkek9nME83dXdrRnZEMFVtMm4wbVF1OC9BL0pWVWc2QlBnQ05pYk1VVUJ5cFJoVWNBVmxV''@;'; put 'put ''c1pZOUtFcllxTDEzeCttL1d6K0tIeU9zd3J6NVpRd2NGWVlKUDhna3BXOE16QzdrSEZzanI3NzZHbU16dEJiNXlMVGtIckxBSnRTVmJnS3V5SFhNT2drSFlzd1hvZ1BaMFRickdXZ3ZqbVNDTUFvck5QSkhFb2lGQUprcE1qVENUNm9PVGt4K2NuNFBYVytmNzlrV2orL3I2OXNWaSsvcXE5bnh4''@;'; put 'put ''ZGZXQlBYc2VXRjM5NHA2SnlWdm41bTZkbUtDdkhBWjFsQlJBQjFBaGU3SVdqbElBZUtVNWg4ZFlpNmYwUmdZNjBaK0k2TjFQWCtkNlpEQkxack05SjlhMklkYS9BelpWQ2Z1eG9kYWt2Nm9TdGdQWVFFaWFnWk94UnFyRUxDRW1qL1JXajE4aDFnWUdNU1ZtdW5xVjZJOUx6RkNMNFh3NjNwa1lh''@;'; put 'put ''aDcyZHUveUpaWSszWGVvTjdQNE5GN0srWVorT0xBYWJlNTNkRVdDSCtyYzJ6ZDZZK2JlTkorL0dlQ3BoL2xiMEdDeXoxWUxjN2t3a0RTc0F3dFV1QU9WNHhXWVhiRU1DQXFMQWRtNnJNSktwVlZKVDdrRk5YczhUbzlYRkcxdzBwUzVSRHFwSEFyZ21OVWlDYVRDQ2tVSjlOKy90VG51UHRRL3NY''@;'; put 'put ''UGYvR1I2ZlBmaVVIeUhQN3JuRTBPcnZabWUvc1crSzhlcWhtS1JVSFNpdDI5Z0F1T2g3dmhZWnpoOGZYZ2hQakNucjlrKzByMDd3bkdoR1Y0R0FQWVZ3T1dDeWRZcTRFazRyVkxDSGpBQy9mVXdnSStKWEsxaXFyS3lzcnF5R3VqS29LTnI5VHI5T0tLbkdxdzdwc2Y0enR3akZYaGg5K3BxTnZm''@;'; put 'put ''N1B4L0NyK1FHeC8vODEvaGc3ajRPb3k2QVVTUE0wNGo2a3QwbWpCWGFHb0VvNE56VENGNlJBb1M4SUpBbEx1RTNBcWdSTmJqMFJxOUhCcEFsMGlrSlk5RlA2VW1NNXhIeVo5Y0hJenN2RDZkYjlrN01qWGRYNEh0eVo4V1JtY0hWL3NIM2pWWDFSTHIzTjQ4Rmh1ZGk5ZmhBK3ZWUTVNQndhclVM''@;'; put 'put ''WU5BSGE0dkErVFdnVnNxdERYbzRPMzhkVVNwSVdnVnNSYUVVRktzb0wyWkZXSmpNSVJwQnIyeHNiV3p4dXFGenZkZnJVNFBlaHFURlVLNUJpUVhFRENlU0JrQzVpRUZXSkVSS01YY2RIUmk0YXV6Mlc5STNUL2Z0YXdsNEprTHgzVEhIU3I4bjA3eHZmR2lwV3JjNGloK0RoUTRlNmZ2S3ZTdC9j''@;'; put 'put ''YUMxdWQvdG5ibGptNll6a2Z0SWNNSS9DdHVjTzBEbERaeGpGYU9ocG1TOUFnaUlVUkRsUFpqcDhLQUZnL1pEMVVyc2pEbk53QlNleU4yRnY1LzcwVzZ5a3U1ZHU0dnFHMUdBUXl2QXdRNXc2RUVqeVNHVGlnQ0hUWXRGUUpBNGhScUFnT0dNR0tjSUJPcnJFUXIwQkxvakhmV3Q5UzBlRnd4UjE2''@;'; put 'put ''YWhyS3VjeGlIQng1QW5RTW85ck5LZi9ockNtTWtiN3g5ZVNBMU1ERjNSUDNERlVLWjNlR0g0eEpobkl0d3lIaGphMVQ3dUJwVXBQdXZ6emNaQnFhcHFYK3dlMkd1dTNkYWRtRzhMemlkNlp5Mld2ZjNkaSszNEU0MXhyeXZlTkJMeHhSdEk3bmxIdDlmZjU4VFkyZWYzZGpzWS9tODZlNGNCanIx''@;'; put 'put ''Q0F6WUVnVzByZ1hDVlpCWFFYNEM5Q29JbFV5UWQ1TE9IM2NMWis3eGVkdllXNmVnNUhRL2dma3ovbFBadm9KRGc3TklTd1UrVm5Qb2d3NFlVTy9ZT2lnSGszT1pUNTdpUSt3ZzlkbmIrc0FjbVEvQTZ5QXNyNWVlVWY3TkY2cm54cHVUR1cxVVZRbFhXS290Qnh3UUw1ZWVHSXNGQ3lnZ1pxL1NP''@;'; put 'put ''NzVhbFRlNkEvQnZZZEV4MjRuV3c2YlF3bVlqMFFNYjNJODBaakovRDl6OFpDVkM2VDZDZE9FY1dBUzlWVDZrSTZGREdtTmRjamMwSjRCQzM0ZE80cC9jWFk4OC9QODdPSW9YT2tScjhUNENKSW5JbG15aitVbE1PRkNTQkxFZ3NuQWhVdHVzb0I2ZTBULzlQNFcvbll1em5uOUtmVE1PY1UyZ25N''@;'; put 'put ''Y3B6Q2pCbklvaGpTck55Q3ArR09WL0pkZC8vL1BOanYrajlCWjNUdnY0Ny9CcWNmeTN5b0VReWFxbXFwR3dQVTdZdHdNUTNGY2tReXNDVldLR3dLcVpzTnB2SDV2YldldndxdWhCWkRoYjRkQTBHMjYxWWJqL1hzeWZpSEdpT3pua2plLzlvWUg4MHNxZG5SaStEOTVUUzArVm9Tamc3ZzVFVDdk''@;'; put 'put ''c2piYk85VmJjVW1jOTBuVzNyZHdtam9DY1BvaXgrSnZOa0JXaktCcWVEcUlYaEpvT2dVUGYxRWtEUU5CaGJWUnMrMFJSOVl0cWlUN25tdTNidDRwTTBWMnFJQW1TQ2luSm9WUVVHcmZJZ2toZ2dNQmExV2xnR3dPalZVOUxVUVRDOEZWaXppQzYxaytrOVR0TDBoMHhDRFlzQUhLaGFJNmhYTDlw''@;'; put 'put ''WkNZWkhCeFZDQWxLdWJ0MUxGRldBWXlweG1YV2YyVVgvUzlZbWt3Z2xzOG5waVRFNHF3R2ZyOVhyOGZtcVJIdUo4dVNpTmxhUmtBQWpySU5abDUweVg1VFVxazVtcm9BQm11RGFnTVErUnA0ODh2NFhyejcwMk9Ib1hDalVyMjZjNzVoY1NoM3I2UncxVktmMEhrOWpZN2QzNmI0OUs0K3Y3dnZD''@;'; put 'put ''M29HRENVUFBWU1BOTzlVNEhndG13LzJSazRjZk8vUytGNDhmZUdnNWUyVTgxT3dQNzU4ZU9aRUtlb2FWQzJldFRlNld4ZUdGVHkydVByR3k1NzZsZXFmZDYxaTdiRXJVUm5xaU96cGlReFFmQVMzSkQwRGVpS0E1QkpMTkdneHdTUU4xQUxrb1FHdWdZbHpBVEh0VHE5VVY2Z3F1anRlQzFpQXlV''@;'; put 'put ''OXRmaVVsMzd0YlJCUnltLzFidS84Szk5NUluMXJiOUt6NmErd3pBZkIrTWZ4ekcxNEZXNTBMOXlSNlFPRENEQ2pnQ3lHVWxWYWNrQjVXSXVkWlA1N0xYR2ZUT3BqcVgzVlZyMGRzTXRqYUhtaW5kR3dXUEUwc0tsdGtvLzdJUDl5WjJ0SGQwOUExRmwzcHp6Mk4vOStSazk0OS9tZHkyTGZsTDhr''@;'; put 'put ''UmJ0aU02MXRDNHB5dStveDNmTmREZVB2Q1QzTG54cnE3eEhOTnRxTno4S0pNaG9XU2d6bFpaUVhFa0xZc0t5d1lYR2p4ZzBzSkhYV2g1bE1pckNNVUhqaE1QN3QvLzROTFlMUjB4MzBwaThuUW1jM295c2VLTGRkd3lWZ1hudHZ6Z2dVUm52Q1UwZlZ0bTZvUFpVRXU4ZytveUZHNHZNSDNPekN5''@;'; put 'put ''a1BKaVlvMEFDVTFXbHlWQnByakw3d0xvRThNZ29HY0FKQ2ZjQ1dML3ZqV09QTEM4L2N1eU5OeFp1ejJSdVgvZ3NlV0xudlFjUDNyZHpmT3pVek15Tlkycy9aM3VmZ2ZuNllMNUtGRTYyeVJ5YjZtNktKUkNiTmNXYU43Tm9Lcm5IRFZRNW8xbmkzM3FuK2ZQNG10eEg4ZWR6UnZ3V1dmbEYrdC9U''@;'; put 'put ''NUFsSnQ1YkgxNkNXcEU4ZW4zSmhOcXFzMnNBSEdxU2hJek4rekVaMXkrUE84RUZ6ci9CQitYbmREK2ZsUkxGa0o1aEpTR2dpUktGa0JvTlNnUmh5a1dVWTJVSTFYOGIrUWNzeHdxRzV1VW5wMUJjSjlkTERpN254WGRqWWZ2ZkVFanZBaVUrRlk5N3J1dmtCdHEvNnZvRXZ6LzIydlpzZllYZDcz''@;'; put 'put ''Ti9PajlEZDhGQmh6N2N3bVBxVEhrazlYZ0dkbk82WCtzdTBhRE1zTWQwdC9FVGdsZHlTelYyUnplSlBVM0xDM1hUYnViL0JiWHhjZEIvejhScXBZNlZnWDNIVEZJeXJtV3lXOXFJMkdjakZ2MmIwQjFqRVRCbUcwVXc1SjhzQ0lKT1ZnVjJIdEVhdkFyb1hUQmRZQmFXeUp6L1ExRzFhRFBkbnM0''@;'; put 'put ''bURnMVhKenE1QTE5NUovRnF1WStSWUg5L24zdncrSGNrR2pWcEptT1RGekNNb2NNK3QwV0Rnc2o2aXh4RU4wQVNJMWIxWnZIYzE5M01jWGNtOWN3eldtL3NRUHBYN2E4Q2Y1UHRmWmVPT3dMZ2FHRmRKZFdHMmFEb2FKUTBKZEVxazFPdnBvcjJBSnhFOTBlUjZzMm5BdWJYUHNmNlVobjVmV0pk''@;'; put 'put ''WVpsMG12Ynd1RFJoQmJuMGxuTUMrTEZwSDY5bnMranBkbEJQL2ZHMGJFZG43LzZEOHVBOHhYRzVNMmtWQ1NrWTE1RWZGc0N3M0d4TS9tczNtZHRCaitUNEp3NGpodGU5VC9rdHgrTGYvUDJ4NHpuVDJQYkIvL3dQN0prK24wNmNuT2VKS0xPZkFnOHZMRHgyWXlINXdLblBiTk1kYnBwOVFuRDBJ''@;'; put 'put ''ZTZzQ3ZnTldPS3dDU0ZYQTFDVlRDQ1RBRm11cVRZWnFjNDFaNzNPb2FCREJtZWM5WnJmTWx2VXoyRHAyTXBVNk9YWStpelVMcTZzTDU4Z1RYU3VEZ3l0ZGIrT2g3TWhJTnZlVFloaVlhQndtMlVrZCswcWlBck5TSU5RMVdqRFpGRVdlVWJQWjNHSnVEdnY4bEFHREVMZUsvbUppcG83MWVNS2Zz''@;'; put 'put ''RzRTd3VTM3pkN3B6dG53OGY0bEdVQzVWN2U3citpOHFxNGhEeU5jZjNVNDFUUG1EK1JobGZ1WHB2cWxubVhQWXFnWVhFWHdxb0UxZ2Z3RWdhSEFzaW04QXBxSXhONGtjdmQ0bkhxOWtmSWV1bUszSDJ4dVBZT2NVdllWa0lOSDVyKzA2L0d6V1FhNlhNODVCalo4MndsRDd1MjNHZlErU1FFbitU''@;'; put 'put ''WC9pNFRKbHdGcUlLOXFyUVFrTnNGRjRLTE81eUo1MVlLYXZVRVBCWmRGdG1xb0Z6UkVTdGdmOXljQ09POTdYMGY0cXBISWhIZnhzc3lCV04vUm9jbHJJdTF0aDJJdEk3NGRCNjg2a2JocXV2TEsvbkRVbVhCRUUxWkRXNlk3dmpzYUNmZTNocHlKcG81SWJkMnU3VjI3bzJ5dFFZRFRKTk16dUc4''@;'; put 'put ''b2I5SnlaNDVrQ21BMzJMUnVvQmpUNjZUKzlTeVl0R21KbG5jQWpud0srcHVSTTlrb0JSc3dMdDZlR1psTUhwTXNqaW56a3ZZbzhUSHN1bTB5RzEvdTYxdU9aeWR2bTYrYXVtTUgvbVR1cXFIVm5wN1ZJZnJiamp1bU9IM0xPcEdLenFWa05qaHdUb2xwY3M0REpnbm5QSlNYQWU4Z1A4aDlmd0gr''@;'; put 'put ''WVJCcGxQUEN6eGt5QTJONUVWS1lHRDNCV0JXVTl3T3pvS0V0SnNyWjVvRmJHSFJLS2tramRrei9DZTVLN1BidS9Pclp4Yk5mM2ZtcjZhKzlPQTNEL1ExcFl6L2J5T1RhczN5ZElFZkozWXkvQVgvVXFHQm9PSDdLZ21veW1PT2J3V0RRVTdqQ0ttRklEUnNkWkpxNC8rLytiaG1MdWY5aDd6dHpm''@;'; put 'put ''NEZ0dWRmeEl2ejJPcmJ4c1EwdzlzZGdiRFZxU05hcEJLRERQSk9UdkJBR0Z0eVN4b1FqOCtkK2RlQ25QOStYZTNNTzErTFA1SjdDMDdtanVUZm9XRDB3MXJncyt5azhDMjY5dkY4ajc5WXo2Tm1LRTl5OUFRcEFEK2dUUnduSkhjQVBydjEyZ1BqVEEycy81dkovMi9ySGNELzUyU1ZhbVJGQUxQ''@;'; put 'put ''alo5dWFqajc1SmZ0YTk1dXlHSHV2dnJKL0ZUMnpoY3hWQXYxVXU0R1h1Y3NXb0ErWnJ5TThuK3dPcGFrYjl3M1ErVkpqUENvdy9CajhkTU4yYlBlVG4zZTgrUVllUDQvdncweHkzenFnT2pTUXR3T0dabHhSbXBoN2prNUozNTR3S2pSZ2pScmRmZFArbzk0R2htMjVPZ2l6NjlULzhBMTF6YnYz''@;'; put 'put ''OVpHNzlHWmpPd2NiWXdrZE5oeEFCZ0lSc1gvdXJUSXFmNnlCSllwRjhEL3BhV2Q4cTZEa0JuNXcwZ0VqbXN5YXM3c0daNjN2SVZ3MmY0RHl1RTNTSTN4QTlzaU0vK2tIU1pNT0NvaGFFZ2g0MCthWkdwYUJTS3RMY3lIUkFZNldLVUdNTGJHeXEwTnN5YXF4U29XVUpIeVhqMGxPbUhTVXQxbGpX''@;'; put 'put ''MHlTYjh1SmpYdHB3MUtnelUvOVd2Yi9lNTNKUXo1Ykg2elpxNEtpUXhReG5WV1RFV1F2ZVdnT29nWEs0RU45K1JjYStFcCsvUExHVXlPNU9UcmtuQTQySGRsZ08xa3pOOXM1UGRoSDlOUWR5MzlqVzFyRTcwemtUYURBT0x0b3MvWjA1YjNka3h0d1hDaWVRRko4bkV5RHJER0FOUFhkV1cwR1VJ''@;'; put 'put ''Qzg0OUJvQWFYV1p2SlBLSm5rbzZUYXRlZEE1TnplaXF0OEdYNllFdDR1TWRna0RVWWlaakVhRWpDNmowMjZESllQczJ1UVo5Vk9pMHN2dTBHTDk0NzRyQndhdVRQVWZhTXhrR2cvMGUyYmEybVk2TzJmYjJtWTdpWDcweG16MjFHaDM5QUE1bC91M2FIZk9COFphNzk1b2RHOXY3MUtVNDJrNzRO''@;'; put 'put ''emJnSFBsYlRIYjFyYVk1WUsyMkgrZG1wdzhOUjVkOWticlJueVJ4UWo4ODQzWm85NERzYXIwNlltSlUrbG1UNlRla2RnWFR5eDFPUnNqM2xaNlpuRTRzMEQrelBSQzhabFIyREV3TWtPakdNb0ZkSGR1YnNTUVUyU3UxdzI0ZnBIUkxtR2cwak16K054NmVtWllRdkVDZVBSa3MyNFVvRWVWa2cv''@;'; put 'put ''dUZEdXRUblp5NU56YTZJRm85K2lwYlBaR09EaHNYVHUxK2N3SVBUUGlnVE16bzNwcTZRT1BGd2hUaG9pZ0lDdjVaZG95cWlJOXptSUJiYmZlWXJmVlVnbHU4REgzcTRlZlZtR3haaWRkbjBwMHduTHh3YVhha1BNRFhhUFhUWTVlTTNyeTF0d3U5VXBtOGxBRjNxdmVrVTU0NmpvOGJXT25wek9u''@;'; put 'put ''eHI1NDUvUmwrRE43MHVrOUhLZEFGdVB0d1Bzc2FIZXlRb3RWU2gxR0twTG0yU3IxU0tWU0xvUEdWc3NjSG1oSmdTWFBLOHRRcVFOalF3VmNaclgwdzEzSkNvK2J4U2xGMGM3bGpKdnlmdVkwNUVpb01yOTA4ODJaYmR2R0UvRldyNlplYjNVU1pTbzNnTCtlR3U5Sk94T2FLbTg5MDRPM2t4YUFI''@;'; put 'put ''ODNSK0hheXFsRkhWRXFObXZtd0pmNEtEQTFram9xc1VzMXlXVlFRaVhBWk1JMEYvcHB2UjVraHJKTzJScVZ0VFpjMDVxVU54L2lyQTFRbm5xa0JtMmp5ZWIwZXlsK3h2dGlYSHQvZ1NnYzhqSlhnWWN2UWlYVC8xUjVuNDg3MlhZY0FKVWVQOWZjZkc5Mk1rc3BjNS9CcWo2K3B0OEd4ZldwN2Uy''@;'; put 'put ''enc2dkh4cXdkaTdidHloMExib3BGdG9kQzJTSFJiaUovOU5DQ29BbWpZVEtOakJoNVhZYlFFQ2p2ekJ0dUtUSEpBUkwzSmJhSStDTXJxNERnbGY1MWU0bmI0aGwwZG1ZbnV3R1JiSm1OZGloTjlaRTlQN2xrOE9EanJHWERubmdXMjluWnJqTkhFSUx4K2tmdzE2R2hhNmdYSSsvUnJLZkxvTTdK''@;'; put 'put ''SFJWdFRYY1hjK2NwTjdud1JWSWk5RFExbVUwT0R5WmZKa0lPTkp2cXJxWEhmMmpzdy92b3I2MWxwZkR1bE9TM0k1UnBRUVVsYVdUU1RJREJjVmV4WHdVYnRDaDVDc0ZmVldTMUdQWnRWTEFraUZEc0JWUGtWWEJYVVZsVjV0YmFtekhpaXNKUjNmNlVSQjVRcVR3T0pySDIzaCt0bXdKcFlMTFVT''@;'; put 'put ''dVpNT2pRTG9YV0NtaVk2dlJ0WlA5VWFtN1dHcTZEQlJBckJ0L3NtK3A1WXlHV3pmajJ0emIveHk3NTBBempiY3lNK1JIczluWUZ6Wjk2RXI4WDFNQVpTQVcvRzJRZ1RveVkzKzlLeWpqcmsrT0IxWktCRXJsOVdpU2xBcTlSa0ZqVFFYMkRXUU9qeWtUVlRRaEtoVXR1SVdwZ3YwdjFCWFNoOTB3''@;'; put 'put ''VzdrY3V1TmJxUGJwQUZ1VVlSZXFnMi9STXljT09DVlBMazluRWxGQjdMOEpXT2FpZlRzTk92MjloYWhYYWJvblNpbldzSzlrYzYrQXQ1VG52emhaemphY3hBWW1mV2twTlN1bHpGZjJyK1Y0MHNKWVVpYkw5dHp5MDUwMjlVWEl5bnpKWkNVY2g0b2lzdVljZGpQSm4rSjdhTCtFc3VGL1NWY01S''@;'; put 'put ''aS9jWEx5eHZGT3FoZDBjdTFBVWd2U3B5WW1UcWRUWFV1SitMNEVWdytRcE05dEIzMU9YMTZmbzNKYUJXSVFDTDJnV0ZFZ0dYR3hQcWN2VmRNMk5qUmRmTFJMR09pUzlEbjVPUDRnZlM3M1czTG1RRGw5anVwUTIwR0gwcGZWb1FvN3N4VXBNNWtOSW8ycFB2cE5xdEhtaHFhTGozWUpBMTFRaDlK''@;'; put 'put ''ZlRIWmRRSWRTcnMzZzZvSVNkU0RYV2FyM3pzUExZWUJURmJyK0daN0V3WUdrWjZKV3dKTHVTM1VTRGhpelRIZ0Z4WmgvYUNyZmE0c09zT216ZWhPM3ZRM3hpRGxQbXM5Y1B0NnpKd0xzK0cvNlU3Q0ozTTlwMEFhaklPam5MOEk2ZmFnakdUTERRaTFnYkNOUzhOYlpOcnVmZk1qckNYRDNFMC8r''@;'; put 'put ''aUxNMEFUblR6U3I2NUF5Q1JrSmwwSGVPaC95N2RrUUdYWkhnY3Zid1RIaC9xMmQ2SXRSWEYrMUtqSVN1bUt0cTlpYUcycngxYmxPMWZTZ3hPdDlrNytsbzlvQW1hZEE3dWtOak82aStCMnZjVHU0R2ZTK2NiTE5nRlpQNVJMaU5pa2F5UkFNcEFBZXdKUGR6VFpUcGNFWW5WZUs4TkRzdnBwZlN6''@;'; put 'put ''VUF3MFhCZVBJRzN0OFlUNDl1MlpXNisyV25WMTJ2TXpuUVBUcWYrK0k5VHViUDEzaW9ObFRuQW53QzVHYjhWYUVLYnpHK0JZVW9DZjdONVlKVS9vc284a3JJSEMwWkIyWjViZGlyd1c3UGI1R1pobENMTm4wcHpIcGpVRTRHeTJTNlo2UUp5dmdNY0ZwZ3Vuc3k5eEpndW5vVDkySUY0YTRsU3p1''@;'; put 'put ''bVN2VUN5N3FzM01HK0ZrYnV0N052LzZwSHRQNTRBeld3ZVAwYjFFd3ppRGdrTzZGL3EvOUpmMlAvbG5yMzFZME1mdTNYMjhmRTdQem9PSXk3akIralAyanY0dnR6QmdwOU9oTEZaRG1HRnFNQUtLdCtvRndYR0ZraFJnTVZnTUZERWMvcEZ0OUVmc1NZaW9oRS84Ymw3ZDM3enhaMmZ1bnZuMTE1''@;'; put 'put ''NTlWV3NYbnY1NWJYYzcrbTRqZXRUeEFYajZxbXVXS2tHdklZaEFibWxvU2xlNzZkcnR6TzgxaU9kd2VTVzNLb1VUUWF4d0haUmc4VmpYa09kdTg2bGJmeW4rV2YrY3R1YmRWT0pwL1hKYWxOZGtvaTVPZno0Mmt2SmJzejNFb2VYVjJIT0xYeGsrZ3Y3eU9LNEkvZTMrQk81VjNFMGQ2UVgzemJl''@;'; put 'put ''bXpzOXpzWU5yTy9HZThuendIVUJSamFtQU9nd25uQ3hERWxvc0NneEFveG05QmFxUWlsQ3VCK0RiSTVSUlozbXFsdHJpTm5LZzY0aXBVNFJheGE5d1ZnczZGMmNWdlgzV3JEWDUvTmlhMitmNnZQTkk3R1BkYllsZ3AxM3hWUE42cGltcnEzbEU2RkVkVTBpOVBIV29FMFRnMW11WEQrTEh0bkMz''@;'; put 'put ''MGExdHl2NytxUUVSK3JmM28yWDJkcWJrMTQxODVQcE1ZSzE0L0ZDT3ZFeUJkVU1yUVlnb2lsZ0JiSHU1NGxLQ2NwZEVvMmtBUVBLbTEwcWVJY1RDZlgxV3ZtS0xiMzlxdW44VG81cmJNSFdqNGNTTmRXSjBDZGEydW8wTVhWektuNVhaekRSMXZteDJFaXplbjBkRGVCV2ZETitWQy9pNnZXMTNG''@;'; put 'put ''dEljd2JoNTNKdnNRd1pLdVBtMW5lZ3J4SzlyT3V6MVZHRnhKYVJjK0tNcEVUWFovbzJUMHdGclREeWVTbVhKTGpYRkNONk9YZGtiUlQvV3JheHorSzN5VFNxUTA2S0tZME5kVGFyeFdUVVZTdEpGWS90d2F3TFV0a0hxSDkxTE9lU2x5QndUejh0UHFESENMSWVyR3lQeFFvaXpZeC9PQmZLOWgz''@;'; put 'put ''czdqN1lsdzNPT3FOdEE0T2hhTzdEMmQ3ZXJLdFpPWmlxbmo0K09IaDh1bXFvWCtsdmluUm9jbGRXZGtaT1hXbkVkeGl2VFBIOElFVDZRUyt2UjZsa0VvNlRKcHdoa2VhMWkzaFNpUWt3WDVHd01CSXpIV25tbVNpeWlCSW4wbnBVVDNNRHdSNmdhckhYN0l3bFdMWnZzU3NIanBDbUtaTCt0Zjg3''@;'; put 'put ''TkRDUU9EZzRlbTF0ZC9XT1JILzJXOTlLcDMyZWM2azdSbzcxU1JIS08xTG5pdjNZRnRTZGpKc3cwdUMwR2hhR0tTYzdyTUlFMUViUVpGY3FXSmtKejQrMG1JMEd1YVJFVjBtTFNsaDVqMWxPUUlZZlJ1RDRzNCsvOXRwcmMvRHorTytvNXh0UHBtWlRKMDdBQ3o1TTNkL2MvaU1MZUE4NXczSzZP''@;'; put 'put ''cG5IMVUrVG5BRjVXUkJrV1NsUVFPR1pNbGxkMUJsYmJKUjFGdjIrMjA3ejVPM0d4NlIzc21BM0d1cnJEZlIzL2c3NDJvYWkrSWY0UlowTEIxUklKK0FBK283a0E1N0QxNUE3TDhWL1RIT3pCbkU4OXkxeVorSlMvY2RXMGYzY3pCLzNrTzhaYnVLOHpiLytLbDZITTlCU1d4QWhwaWpjUk1YdkI2''@;'; put 'put ''bmdZaUVBRmdMeU1TbUFKZldxbDJwYk5CWlVNM3FrcCt2Z1lHN2dtZ0hjMHJHenUzdFg1MW9UK2ZPMVhUeEcvRlAwbDNnRWdOYVl0QmR4QlVMWnhVeFI4blc4Q0hxWE5UWmF6STJONXA4Mldpd05EUmFMWkZzT3JpZlIvOUFNYm5RdDI1dk9hZ0k4TnRJc1FqWGx4Mmt1cngxZzRJQmdWMXhOTTh1''@;'; put 'put ''QVM2OFdHT2wrT3N3c0tKbXNDV0RXVFZ1MTRWTGFobXhHajhkRHBUUUZIYy9pZCtYVkk1WWFDOElxSHZuZi9xNVdXMWhuYkFBTngyUTAxZWljMFZxRkdQUTJlSUs2cWxhcldhODFWdXF6VkpqQXVVZmgzSC9HenIxTnBPZmVocjRyNVo2bDhUOHkvdVJCUGNtRXE5WmFwU0E4WEVrUVhTdERTTTZ3''@;'; put 'put ''UU5yc1I1S0k4N2p0TnJNeGo1ZW9tR1ZKV1o3VXZhcVNGV1BnTUxoVDRtUE5aZkxsQ253dGQxMlpqRG0yQnhhREUyN1F1V0N0TkNjeGhmNEVQWXJVWndoKzhsSEdjTXUwT1lycnQyaHpRbTZEUmZUVUZtMVc4MjJxMFdlMmFMTW5QOWRoOUZlOERkbmM1aHY1Y1NyUkR6YTI0ZmxXd25sR0N3WTBs''@;'; put 'put ''a3pwS1h1a2NGY2pERXhJRGNlZ1ZxeG9nRGVxbGtBMWxVSmpTcTRvTWF2V29ETkFaNjNFbnlxQldXSTVBU2RHYzdKQUlRRHJLaUFuNHVSK3YzczN2b3MwNUl3LzVSazVORDBybmJzVjM1eTdsZWZRSkZuT1V4eTlrNnlQeC93K2hhaXFFd0FyYkZyQTN4b01MMms3SVA4a3gzMmFmZ0lNNjJwNFFZ''@;'; put 'put ''cXJaSmVwSllPQW1VdTJKb2k2L2JCcWU5NElDZEkrQ0N0dXV0Uk9idWdVMnRCSk9IV3hYc25BNWc0MDdaTWNLdE9QVzNpVlBtOHJrSjRSREx0NmtJOWFMRE9IemVSWEpqNHVJVHhaK3NCUWpVSnMzRXlidFRzK3VhTmN3bGM0b1hEaGpTVGJyVGwwNzY2U0REREFKWll2eFhDN1djTC8yeGt1NFNL''@;'; put 'put ''YzNOem1LSHAyaXpZbjVEYUEvN2RzMFdaUGZwekQ2SHJlcG9EYjYxUnkzTWZtYXVQcldmOVl1WEd3bzZqTlVlQnZtOXFzL3p1TXM4N1cwOGJYcy81a1NSc2FORmF3OWZCeERxOC9zbkU5UUVjME1QTnRsbmZSUUNzUk5tb1lTMnBNa3k0MFJTcUdWZ3R2RGRwNlZqWnFobTdWSUc4cUNyNFBaaVZG''@;'; put 'put ''OUxMZkE0Z3FJb0xReHkvejVMblJVVGw5N2x2NGZENkZEbmVuY2R2YW4vSkV1bCttL3hOZ3dIS0RHQy9wa0hqSi9TVndZdmt1REU2ZDB0aytWc0p2TnJjNWloTmJ0RGtodDRHemZYV0xOcXY1TnRYb1MxdTAyWk9mNnpCNlpSUGZ3bWdPZlJKL200QXBoVlJQcVduK04yaVFmcUFPZjhLYXNPS1JP''@;'; put 'put ''MkozZkRqMllmb3ZpbWZZRy9zamh1UjZoTit5dWg0M0NtSlJNb2d0V0VFQ3JRMzF0aXFWVXFIQlNKbFBlNllmQ1VVZllXVSs3N2xzcjdJZDhwblB0Y3pWUTlNaUxCbFZtWWlxZytjZlN2NGdDNCtEcWtvRHFsdVBjL0VoS01PcEFXNFQ5TFQ1akg0anF4RXFsQmlJN2tUQm93VGlIbG1zbUR0SEVV''@;'; put 'put ''L1J3WllJZVRHeS80RjlYWmNISXdzN1F4SGdMdDJYdDhHdmE3L3hPUEFWNDR2QVpQRHUwMm1QSTNmUCtDS3huUjVaZnVpQXg5V3owbkY2RkxnTC9TMzM5L3Q5K1A0NDhKamN2MlEvT0JYWjc4c2RpQ04yL2l5M2h1RmFsNFNQVDVmZzdPWTJSOUcvYnRIbWhOd0c4UEdKTGRyc3lZOXpHUDNGWmw3''@;'; put 'put ''RGRYWTJWNTgwMTBzYng5bVVkeFZpekYrcHdNb1ZGWmFpamZuQ1loQ2JXb3RKYTlWWjlUNm5UdVNaSUpHaWJEVnZQbHR0OXBXU2JMWHJlYnJhVGQrVXM5VW9MV3lIdVhYa1pkUkNmVjhWWUVBd0ZZcm1xNjNLdWVjc3ZJT1hWRHgxMnVoMWVwd0JOd3NQNW4zUW9yeUVXTDVPTEY4UVJVTUEyMW11''@;'; put 'put ''VXV3eWxzcThtS0lwekttRXQ5YzEyZDA5bVNVMTBmbFFhRDU2cEp0bk00L1RMT1p4WjhJUlM0M0cxOWI1dWZLOGplOEJIRWRBY1NBb2RhamNjd0hnZTAvUjgvTnlleXd1RjdmL1N2NTVkYXI0K1puOCtJZDNGajBYN1BuMmxUY2p4Z2ZndWZCbm9IKzJvUWhLb2lQSmxRYUFuYXNlTkJ3enJsQjNZ''@;'; put 'put ''VldGQnBSbVVhV2tWUnNWS2xLeGl0UklKYXBWSzlVYUlsZHQyREkxbFZVQ2xlVVMrVVdqd1NCQzBXUjBzTGM3R0FsMnRvZGhnb0FCcU0zcjhXb0I1SEl3ZVVPZWZsR0tCNCt5Ykl3eEkxcnhJK2Q5a0IveGdQUFFTWS96NU1pK294dlNQMGFYclo3TCt6ZEZvWE4zVHJiUnBKRDBFSTlIRDNiRmh4''@;'; put 'put ''YXpSVmtoaVk2T1JDRThuVHZTTXRMc00vZUYydU04OXlISmNoL2lXSkdzYnc4N0hRcWxJZ3FtaUpnM1JSUnBNMWJKT2xrUVRHa1ZuTmJWTEVaN2xXeGkyMmljVnJVTUNoQUxBREF2cHozUHpVS3NrMHFrZGN1WDFvdHFaZUdOdmZDcGkzVkx0cFgwb0lZUU9sU21veW9mSTR1anVKbXJaOVFab0hp''@;'; put 'put ''UGFsa05wc29jUGxLaWxpV1BEWlJML25BdHRtdExiS2x1emZRMXd5WDVJSzRXd2MxdExKN3JRR2xvZ3RQV1Zhak1jMHBiWHloNmZsNXVqOFdqeGUzUDVNYzVmQmw3dnY0S3ZOM0R4bm1Wai85aDNqNEQwTE1YUFQ5cTR1My9EN3o5WHpiK3Ezejh2K1RQLzVtK3NmRjUrOE1Qb1h5OVhJSjhCN1Nu''@;'; put 'put ''SU5xZE5PcVlxN3FobnQxcVlUSWFLdkJFNXNrNkd1cVUvZm42RGRtMzlxU0pwcitCTkZ3dGZneFdiV05qWTdDeHplZnhlV2xOZ2l6a1pQbG05VkdsZ2QyRmtiQ0ttNE1uK0I4WGt5Y20weWVIK2k1UEhSeHAyWGVEZlUvY1B0WGlPR2dmdDgyMEJXWmpuYk50d1cwUlV2V0Y1Ym1iSjFMWFppYmVu''@;'; put 'put ''OXcyT3hjZmFHNDJORFhaMndZY2F6OXEzNUdJTG5TR0YyS0p4UTVhMjhiaW41UjNiZU84YTdFQTkzRUd4emtPM3h2TFBhZm45MWpSOC9OeWV5eGVXOXorSy9ubjFidUxuNS9KajMvNGZad0hwdEMxcEliNG1JL1FqaTdqOTNEUTVBL21oa0lLRVNzVnlvTXFPWGh2bzZFOUYwSXE1ckJhTGJSVEto''@;'; put 'put ''V0xRRVBLWmRaaFpsZlN3cXhEdTY0T2hKM3NZRlJUYTcwNG1RQ014T0ppTm15VXJQVFhhZG5kOStReXRoZGs4M3c4L1ZTaGVrM0l4MTZ0WU1XMjVQVTRFMmhrZmwrZHpWb0p1cGQ2Z3g0SEh3bEZIeFhyY2VWNmxlMVFSbyt6YmFuSEZjZjFMcTdIMmNycGNSY2NndWx4VHFlenhkbnNOZmdORy9T''@;'; put 'put ''NFlqV09hbkVLcTVFcmNSYUs1WDRCNUlqTE8zbmorT3hJdzhLd3l3ZWNhR2FzY1NHVnU2bmxuWTQ0c0tKL1g0ejQzd2tuOENmM1JpWk9wME91YWM5eUJCaFEySjE5SjQ1OUx1QkIzK2xhU2d4MzUvN2VDZmpGNDB3VVQzZHkvRDNNOFc3amM0cS9mMXIwL0x6Y0hvc0hpdHVmeVk5eldNSmZIZ09o''@;'; put 'put ''NCt5Vnh2bE1VYnliNThJTkp2dWtnSGY1WE1PaTJQT2xoSjMxZjNqWVdWZ3RtMGVZMzhjWmFSK3d2MTJveUZjVHlmdHpqa2gyV3JGZHhQV2JPL1A2elpGTWNkL0w4bjRlamFURGx2WjlMcThEYWJaenZ1dFlueGRjekI5dG8vQ3J4U3BCcE5GVHJDUkNXc1FxUkEzWnc4eWVZSmNlWldTTjBvaW1y''@;'; put 'put ''RmFyeldyejZQVjZzMU10MWdXVTNBdVg4UE5hUEs2c2RDWXFpZUJ5ZDNUMDFZL2s2L0pzemlaN28vN2Y3di9DSnhxNk81dnJQOHRLOUJ3MmU2TVJqN0pDUFNuUGQ1NE1BbjBIVUFKZnpvbXVucXBvOVpocWFDSUpoelNDV2dTeVZBZEErMURKWkY2MmpiTFF4blRSY1M0OFJKNER0TUFhUlRVUlYr''@;'; put 'put ''VTdHR3hnNHF2VjNHZHBaYUhjalhsd3dkSU9BRTZ0MUF1VmRqSzl0MW5lNHdTVWUramIydG9TYlhHZnh3ajZhYk96UXF5WGp6R2VpRzJsbjVyMTh0bjZpdEtSeVNBOVpZdStOQ1Y1OVFwKzRMK1NVNVBwc1Z0YnE4WTI1U2JUZkdXR0JaOHU1Q2hML29DUE12dkxKOWxmLzFGaXgvSDhYTW9meGlU''@;'; put 'put ''KzhHZEZmVS9JZmJFYXZiQkYzL05TWDRMVlhPZmhOWStzcjEvcWUwc0pYZEZjM0IrUmM5Qm1uTFhSQ2w2aEdtbWd6WE5DTlcwRWJTVGZFRkRzelVqTzN6MEdQS3NPUHZuN3N3WUYwYWpsc0x5UGlrK01CQ1ZhZ1lQUzVjdU5iUmthRWVLWHVHanp5VHF0VzdabWtvSjJZWkxEbXZkOVh1cjQ3MlZv''@;'; put 'put ''aWtZR3U5M2VhbS94MDR3Rm4xc0tVN2xMVW56bEMzUFE1aXlWWTBNYjBsUWVmVFF6bFB0OWNhN0s1TnF6UmZtKy82c3ptVno3OGdidW12Y2JSdkord3lQb1dMbXpCdjMyenJ4K2UyUUJsZk01NGdyMDR5MzZ5cnF4QUcyK3p1c3FnVS9SV3RKNk5KNGMwWUhLb01mMGpnKzVBb1FTbjdpRVJGSHlu''@;'; put 'put ''bE9ScE0wd1pRbUkwNmlVdzQwbU42M0cwbE1TbEd0WTNUS2RXU1hXV2xUVU9zTnB5a0dKcmk3M2dsemh5dWluQStqTDI4RHJVbW1NOWlETGc2YTN4ZDJTTkxwZElDTnJNRkdxUUdNV1FkbWc1UkpPV2k2UFZLRElxUlFyTkJaYXNJYjRPV2ZrR3d0WWRwZFhic29BZ0ErVzYwRXprWFUrbjYvTkY2''@;'; put 'put ''aDFHWHhldDV0WlR4czNwTnFjVk0waU42S2NXbjA2djBXMVdyc2h3VG9FTm5CTDlrSEp3TlhXU2JzMkdYRWgyUnBzM1RZci9pN0x1QzdqZTFhWDhUMXZ0b3ZVa2wzRWFudVpqRzJWWk96TFpmeW9ORitheXRnMGw3RW5wYjY1dDJoZE1POExlS01sQnNrUENlMEZLNnBCSVNBSU1ha1BOaEcxV0d1''@;'; put 'put ''bERpTjZWdzZhNEV3aFVFa0RNWUphc2FxUjlmQWFHajVRTGxlb2lGTEp3L25MUEp3dmNZWnd1UzRWV0tYUzg0Nm90SnZwdmM3MG5pZWhqTUlSRGxQWGQzZ2czSitJYVVQYVVLREY3YXl2TXh1cEM3eTJTallRS0E1d204RDZIcE8xc2FQZTduTzROY1k2dS9FL0xpbHZlNGV2MFJadHR6Yjc3VWFE''@;'; put 'put ''ZmR1bEpuR0RMVXVMbi9TTTMvQzR3SkgxZTB0aUJ6K0VObFdNMzNCNzk4aG5rSlFITTQvZUJKNWhwRmtUYXRDNGpEeS9ScjVXaDZkWGNUbnQwVnVjcklSTEZzeWdtOHFNNFUxS0d5WmRsak1ESmxlYnE4akRramJGOUNoWXhUeDZrY1g4blNpWjdEZWJpRUp3WW40TlVlR1VKVk5EbXlkZ2xoemlh''@;'; put 'put ''QVFMM0tLdExwdVdiWlFYWktWbHhmS1M5a2s1QUROMGFVMFdhOGJMRjFmSUNWaXp3enJyMnpVaS9wKzFkNlNGQXAzUXVQMURoVGdMOEZmTkpqOHJ5K05HOXhCbFB0OWFYNUp2bmNsa2FQSVlqTGNYNk80V2tMc3VvQzlHZC9pSDNHY0J6L1dNSHJQUzgwK3o1NnkrbStrWllVblAwSmJRT0lBRU53''@;'; put 'put ''aC9CRzFtcERZV2RKYTNPU3UzNFhYaTUrUnhZUHk3bUU2QWkzUUNPczRJYXpNanRmbVRqVzE0ZlFqcEJ4eXBwcG5GVlpVVkdqQkNCVFdSSytZM0ZaOVhvMnB6dnZoY2pGRWtTWmhGTStuUDljN1Baei95a1hRYW13T1pBSjdKL1hnOE0vNWJxZjZraHVYRU81SU5sUldpaWtwOHRWU1JyNU9LUzgz''@;'; put 'put ''c3Nqb3Nna1VrRFlwcjVqSlRVNWs1ZkZscjdwdFk3OC80OFhMdW02MEZuZWtoQnNNT0NUNy9XUUpEN2dQNW51UURvYnJhbzd3dm5NdEQ3THc2SkQ1SmVIdDRyaUI2dVQzQTZvV2l1VTdrWTF0cWRHNkx1YzduL1MzcUU2Z294aFRKeDVpT1NIb2gyU1FMeGhudGNwL0prY3RRdVZnWXJrSG5TMkx2''@;'; put 'put ''bS93NXVPWmFidE9BR1NoOEg4N1VnQnBvemtQK1pnczF5Vjl0b2FFbC9ISnVIVE5VRzR6MUZoUEwrK1VLZ3EwUVk1ZFpJUTJ6RjlTcENGY1IxbDdlOThYOSs3KzREM0RBT0R0NU9wTStuZVpLd3VLZjdWdis0djcwMmorVHB1bGJNNW5yVWtqeXB3aEFHY0FsT2xBWDJwYk1XckZhUlYzZ1RKc0JW''@;'; put 'put ''cTlVSzFhcU5FU2xrdjBWbFdLRlVPU3g2T3gwdVJEcTdPcE14S0t1RGxkN2F6T001VEI0ZkI1dk5TeDZvK083d01NTHd0K3hpWmtqcmdZSWJYS0ZsZHQ3L2VnNFM0MGZ2YzdyT2praUtRTzVxNHRTNVBIMUcydXYrbnJIZWRMOFdFL3ZLRlVMaXJQbTgvVllrbjV3a0oxclRNTGRyNVhnQk0rSHB1''@;'; put 'put ''ZTZ3UDJkODFKZndOR0RESGRqRW82K3lOdm4zcUw1MDFKNytyeXBhSzRUOGx5QXV4OHVPOWNWREhjWE9PN1c4N2xZblQxYloxeGE1MzBsZU0vem9lazZkL0IxSGtOU0RtT1MxZWdQMC95S1dMU3BVYUVVN1RUcnBrNEhhb2VXNVZmVWI1bGZJWXJNTlc3SmV3RXVKYi9pb3AzSzVsZGNwTmVXK1JX''@;'; put 'put ''bC9hVDhDbSt3bWVaWEdGaCtCZmZKbDArdzhGM0tiUVFrSEZtWjBKWkx0dmpvWlJlOG8rQ1Bkc1lGOSthc2k4b0RGNzYxZ0o5ZGNEM0pjdHdIVVM3WjFJRkZWV2RUbzZBVU42YkhLQytRSGlQQnh2YUhISi90RHpvKzJ4OTRmTGFTNC9NRW1pOHRQUVpmTkprZnYzaGdxbXllVEhpZmIrc1UvK3lD''@;'; put 'put ''c2lSYlJ1bHZ1a0RTZjRGV1Q4aTBDblIrZUF0YVBTL1RLbGJIOHVmTjdxaHdvaGVTT2xyaGpxelZJQm1xNkNXZ1V1NGZERUF6eTY5bTBWNXlpdm81cFVRdGpab3daWTRRdkIvRXVSM0xSOVZHdXlpUWNOTWw5VW0yYkdwTzd4a2crRkJKTHdXOUpGc1A2M1lpS3FSb0dxR1JtckxzR3MyeUowWGRB''@;'; put 'put ''L1IyRGJ4Z0xITVk5ZFgweW8zUUpvaW44bGR3c0hxS0pLdW5DS05Ya3JZV3JCWmF6VVNqRHBvSTBlUWprOHEwVEFsS2hmSzJDa3pyVnpWWGd6QURNTlA2VVVGUUxLbDRGV2xKZERGWTZLUFdrSnN1MWluWldyNjlGR0VzNmlaUVdGRWJNSXpDck1yREN0Q2lMcE10UW91NHRQVER5a2dBdDVYaWNI''@;'; put 'put ''ZWhIc1JiNzlXVlJoTEY4V2h4a1VqQ292YnlHQ0s3RTRYaGFrTEMxV3RLY0pYV3NQeWE2YTJMWEc4bHZTVzZMYytwaU9SektvNmd6NVhxMGN6UGYyZmV6MzlrdWpqMzR4djVuSTFLOUZwSlBnYnJ5K0w1TEtZQWJXNHRseE1DZXRtalpmc0dDbkVLWExNWFNmZTV6TFA3WER5b045bGxCdDVVRFNj''@;'; put 'put ''TC9CUUxhZW1HTFBsK2VCWkNLQmhJME1QanFYVjdQUHkrTEpaQnNjbHBzK242Ri9LcHlkdm10ZWE4WjhOeTJRZWtlMkRJRSt6V0YxMkQ1TXh3TmxqdWZWL3hwVEJTelNtc2RRNXNJQzk2bXpzSWFqUmdQS294RnJ5NDZMWkc2YW15OE5SVXB1M21abm52ZHIxVWtFUnJlYlp5YUR1a050VEhuQy82''@;'; put 'put ''S2VQRHZ2QllGeCtHU29BS0R5M1liR2IxVUJ0ZDFCc0xpUXEyTVpuakR1bml1cUpNa2FIY1dqV3h1Y0lvYjQ0eVhLZDM1VEI2Nk9INVEzaXhCSTk1UFJIbDNic1pMb3JvSjBVNVF5ZmtuQ0Y0L3BHU3Zqd1dkRjZPQldGeFB5cnF1eWVmYjNRWTNWYUN4K3dPRzRici9aSU8rRlRKK0x5R2grTDZF''@;'; put 'put ''dGNCcjBkRmZmZklmY0hPL3RzdCtwNlIrbEpmNStlSytwN0k5MVdqVTF2MFBTL1BpOVhEREc5WmJUaTEzYlhVNTBHckRHamRGZk41c0NJbXNwOGFGWFpHVkZwVVUrNzZONVZiS0tyNC90TG1NbStwSG1DR25ML0UrMnlzOUQ2YkI4Y085OHhrdThuNU8zZnNLRDlHdnM2TXdFa1FjbEtxTXBQR1NF''@;'; put 'put ''UkU5MkIzZHFibjhCZzV2MlBIbmRJWTAvZ2dlUTZzY3FuS29vTFFPb3MwbUZQVXoxRmFGMUNOcXJ4Q3ZzcEMyalN6bHg2WmFneWJZblYxTVZPNFlhcUZURGZDbnhZTC9OSEU1bGxBbjJPK0hSK2I1NEkxQjVzck9IYVhWR3RJTlNMVHVGcXdzeHFSTGpacWtENEhEVzFWaVFWZ0hZdjU0bWJoa2lw''@;'; put 'put ''RmlyL2o0c2ErdmtBQWZtcmQ3bHI2UTZiNTM0RytOdjZnMXMxckgrWXhKWDA5Nm1FckNOZkFaclFVWTlKS1Z1SEJLclVBcG91TUd3djBreGxlL2VheEtLUnFFZWs3R1lxYzZEZjJOVm42ODQ3eng1Z1h5aWk1ek5tNURaRisvRUh5RmRqNU1KczNBYklBYTVodnpvVHhoQm9MckU0TnpuS1YzZXkw''@;'; put 'put ''S0YvOFFvUVpwcTFhUUpRckplUkE5SXNUQ2xsZCtib0VYTjFrMDF1cVRiV3FrRzdXWFBRN0dUUVl0VFVPai9nQitaMmZ4eUIramRXNGlLaU9yVXFyQkl5Y29GYjNTYU1oWHh0akZkMWVxZGdGRC9HS2w1cy9iampOYUc5YjdxMzFwOVlmUnpYSXcwYXcxWlNwdVBQa3h4STNmam5CNDl5ZldsdHY5''@;'; put 'put ''NzNML2FUTVo1cm5rVGZJUEJLbGNIUUxIdms5bVVlaUZIcXVpTDhXK2g0Rm0vbGlmWS9pMGFLK2UvSjlEK1BaRWg3Sis1N0o5ejBNZkk3WjN1dmJhYnltT05iejdqclhZZDVkbDNTWWRwQ3hIbWEzVDBodHZ2NXVqc2YxM3MxSmJYZzhZVFUvVGpVNnRFVTg0U3Y1ZUVMMU5DcWJVNXBDSDk5Q1Bu''@;'; put 'put ''d3ZueXVRV3BIdXZFZHZFZzJPWFB6N0lMNmZDK1BJdU54SDZMbUVQZ0o1TnlmM0djZGZSdWZJQTRBem5VOEJ1a3hrbnJRVWY1R0tiZE1YcWZES3gxMVBjeXd5eWc1OExxaWZwMTl2MFZSTHY5NkMzRTYvMzhMczROOXZRWDEwK0t2b0pmSWdRRUVMVUVueE9rYVN5dGN4d2pyd2JXd2REYWpuNllZ''@;'; put 'put ''YUlpK2xtbDErdzc3cmh5M0d1S0dVVFdEc2I5ZFpUNjNId0c1YzI3Z2k2NVlMZkd1THRkYVhyaHZmU1I3VStmbTYyZnEvQ2VzMzVOZFBVVXJlQ0FZcy9CS2V4QSs4dDlxd0I4YkhPenJHeGpxK3hOODZ4am4rVEFKZWphTDlnQnRnYytuYzhQcE5odU42VEM5SkUrbDNMQ2tPRkgzSDBpREt3R3h2''@;'; put 'put ''OHZ5dURpMVcxdkN2UUZKalZSV3VxRlJWRkg5dGtySGFJRlJXQ3N0NmpVNVVGSC9iVXV3aUhkazNKL0hlSXUwdFNOKzUxRjIyWDVsdlhTcnBDNHBmZkdvcW1aUy9mV2xxY1dySDNHd3lrMHlQamJRUHRnOTB4Y3QrRTVQcEQvZ21Kc2VtdnoxRmJSM3g5L3d0VFhpaTZJL2NXZms3bSs1L3oxL2VW''@;'; put 'put ''UGFMbkFwZjZFVHZYWXppQ3VDZFNxUjZDclRyOXNBZ3RnTHNmQStrN3I0NzljNDNkRTgvcTVmdXZJeGl2ZHhPWU8zOENhc1loRllQUERENjdOTzZiN3pDWk1VYjByM1RZVFNUbktxM0V3Vzl2YUlTMDI4dVVJQUFKQXBoUllOSkJjYVZ0TDRsWDlCVWhTc3JaWmNOczIxRGJZSFdGcjNCQ3phcjN1''@;'; put 'put ''aXRCdnUyY0krV0h3eGFhaHZCMndBcFZOVFNqRUQ2ZlZGTzVnN0czK2JYVW1jK3ZHSmR5aExsdGtOMUIyK2JrT3FZcGova3dvbmNHWldBNTNJdk9qNHkxOGV1cWs0ZUgwL1ZhZTJPMVBDUlhsYkV0RGlXcW04eW0xTFp5L2ozL09BV1VvTlBBQjlVUFFWS1hUdmpldnltL3hPc1dKa3FPcURxQ01D''@;'; put 'put ''Vm5Yb25FZGJXNkE4cTNMdkc3d3hSUDJNelZpdEplNWw3ek43akhSenZITmp5Q2c0cHY0VFpxN2hkaXBXY3plZWRCR2lzbVQwdnhKcjU4L1A1NStMTnhjL1B5TS9SNGV1S254ZkdUNkVQRlQyL005Lyt5Qlh5dlNuejVBYUFBWTE5cUo5cGNSc3h3S0RFSEpNaFViREZmSnRoY2dPM3pZb0JJOWxt''@;'; put 'put ''LzEwRUg4bE8yMUVFSXNsRXU2YzB0NDZ0bWZvRitGNXdKYnEvYUM5ZnljT2srbUQrYmhQMGVYWjNrNHdMRWIxN1hycXVpWDYrdmgwK1Y1WitybHliUWY4UDJ6K2Mwd0FCQUFBQUFRQUEzNXZtaGw4UFBQVUFId1BvQUFBQUFOUEJuWVlBQUFBQTFMNm05ZjlSL3UwRVlRUEZBQUFBQ0FBQ0FBQUFB''@;'; put 'put ''QUFBZU5wallHUmdZRDc2N3lZREE4dkUvNEgvVzFnU0dZQWl5SURSRUFDbElBYWhBQUFBZU5wMWxEOU1VMUVVeHI5elhnZWlnOEhCUVNzYURWUXRmNldCS21odEpLTFNwaTNQb0RGYXc4QmswQWdKTGtZUzQ4UkFRdUtpQXlRZERIRXpjWEZ3Y3REQlJDWUhuUWhMYllpU3lBVFI1M2N1TFdKYjJu''@;'; put 'put ''ejV0ZS9kKys0NTMvM2VsWFhjQmorU3BvNVJqZkJsSG9OYVFFVEgwTzZGMGFIek9Ja1NCbVVNNTZsMmVZNCt6ZUdpTkNBdGs0ampONjdJUXJDbXI5RW5vemlvYVhUcFZaelErOVIxeE1sK3ZjRTVlY1RzdHh2UHVSelRhODhoVTdLSlE5NER0T292SE5WWHlPc2l4MjZRazhqb0tQV2QvejhqZzFY''@;'; put 'put ''K0RuT05aN2lsVVF4NEk4aDdTa1Y0L3lreWpqTWN3enAxQ20xYXdvZzlNM1FHemZvV0xicUEvVHFOczNJUE9kYThTWFpKQ1QyYURmN0lKU1QwSEU3clkvamFoRTZ5UjMxMHloM09mY1RuWnBIR01oSllEajdvRVF4aEJTbHZHaW03cmcvZGVOL215Qk42dUlZMm1lQzhMTzkzczdja2ptdUV2ZVhR''@;'; put 'put ''cE1veE00aktBWXlUN2ZLT3ZqWmkySzE1bDU2d1JubkJXdmFnVmQ0ZzRlb2FSd1EvTUNCeGR6MUd2N2E4cXFNUVNQUFB2TnNockFhZnpEL3lKMVgwOXVKVXhidHE2V0VNTzVwL08yWCswV2U5Z0d2T3F6cnlQcExXaS8rL3pEZjZOMFNXcUJYVzFML3RYYlVzRjhhczgvZWZ6RC96MldqOTJwclZ0''@;'; put 'put ''TjV0L1FvdFI5d1g2MWZudUtmbWg5VzBHeTFydHQ5bDBxdHZyUGNMdll1U0FYblorbkFaWkE0c2g1YUZiVEl2MG8xbTg5YjZxNkg1eXQ0cUREVWdGZ3B6WGViV3NsTkRlK2VZcHhwT2xUTldvZTJQZWJRTDdSMXdPYlE5TlAvSzc0TGxzWnEyVnpMTDdKa0t6UHhYTWtVbHFQZEk2ajVlUTVDclBM''@;'; put 'put ''T2FOWjZXMTVSMXdDdHVuVGZZb0Y0Q21rVGNtMENjWjhLZ08xT1d5Q1d5Z0pzNnk3T0M1MUpvRGgzU2l4YXFUUmVEb3N1SHg3bmMxenBmSC81ZjdSendwQUFBZU5wTndsOUlHbkVBQUdBei81U2VwNlhwZWQ2ZHQvTThyN3ZUenArLzAyTU0yVU5FaU1Ud29jZUlJUkU5UkE4aEVURmloRWhFUkE4''@;'; put 'put ''UkVqNkVqQkVTTVlhSVJJeUlpT0ZEaE1RSWtSRXloZ3pwUVNTa2g3M3NZWHlmUnFOWi9xZWdPUm5BQnRhMHF2WkUrNkI5SG5RT1hnNjJkVGFkb0V2cTBycVNycVpIOUV2Nmd2NlBZY2F3WW1nYms4YWNNVzg4TTlhTjdhSDRjSGE0YkVKTUtkTzJxV3BxbWFGNTNwd3hmemJYelYyRVJxYVFYZVRH''@;'; put 'put ''d2xuU2xxcmxBYldoVVRTTjdxTVZ0R1UxV0FscjNEcHYvV0E5dE1WdGR5UFlTR25rWlRRNTJyZEg3UXYyTC9hbXZldklPSnBqM0ZqVk9lTThkblpkSWRlQnEreHFZVFlzZ1dXd0M2enVKdHlTZTg1OTR1N2hVWHdWMzhRTGVBWC81VUU4SzU0Tno1Mm41ZWtSUXdST1NFU2N5SklwTWsxbXlCeVpK''@;'; put 'put ''MHZrQlhsTFBsSWg2aTJWb3RKVWhzcFJlYXJpelhuejNwTDN3bnZyZmFScGVwWGVwSGZvUTdwSW45SG5yOTR4REJOaVhqTlRUSXFaWTVhWURQT1I2Zm0wUHRTSCt6Z2Y4TVY5Uit4N2RwbGRaN1BzUGx0Z2UzNnQzK0duL2NBZjkrOXdlOXd4ZDhwOTQycGNrM3ZpbmdQRlFEbHdHYWdIZnZJeS81''@;'; put 'put ''Vy81dS80RnYvRXY0dzN4anZqZlVFV3RvUURvU1JVaEN2aFh2Z3Q5RVZFZkNNdWlHdmlscmduSG9tbllsV3NpVC9FdHRpVEpxVXI2VjU2bERwU1A0Z0VzYUFRaklZY29jNkVaZ0taT0pJbjVWbDVVVjZYcy9LaFhKVEw4bVVZQzlmQ3pYQTcvQUtHQUE0a29JSUVtQVdMWUJWOEFqZWdIYUVpMDVI''@;'; put 'put ''dHlEVzBRUURuNEFyY2dMc3dEMHV3QXIvREJ1ekF2b0lvMkgrQWtsUTJsVDJsb1hTamVGU0lDakU2Qm1QVHNYTHNPbFpYVVJWWE9SV29jVFdoenFwRjlVdzlWMnRxNHk5TU04bWdBQUFCQUFBQlBBQmdBQW9BUUFBRUFBSUFLQUE1QUlzQUFBQ0RBYlVBQXdBQmVOcU5rczFPd2xBUWhjOXQwWUFh''@;'; put 'put ''NDhLNFlHRzZNTzZFZ2dRaUxqVnNGRFFTd1MwSUFwRmFMY1hFclUvaTF2Y3d4cDhYMEkyUDRETjRlanRVSlkweE4rVitkODZabWQ0cEFKYndDQk1xa1FLd3l5ZGtoV1dlUWphd2lCTmhFMldjQ1Nld2hqdmhHYVR4SUR6TCtJZHdFbmxsQ0tlUVZnWGhlUlJVVFhnQkRYVXIvSVFWOVNiOERGdDlD''@;'; put 'put ''cjhnYWF3S3YyTE9XQS81M1VUYXNMRURGNWU0Z1ljQmV1akRoNFY3UG5uWXlLRklhbE8xNk90cno0aGM1KzR3YThUY0MyUlFSWmQ1bnE3a1lxaGRSNHoxTU9hcFJTVkhsNjNYTm82eGh5WnFwTGk4amFuTU9JODE1V253NURFKzBPOWovZWoybnc0TlJrL3Bjc25CVFE5WW84czl5TzFRYTVFUHFR''@;'; put 'put ''ZmFQdmZPSDdNSTV1ZnpWRWFXNi9wWFpWZlhkYUtxR1dvdXo1T2NrV1QxcVBxTWpqbjVpU2ZMZmRMVDBUZjk3cG1OdldXVHNUYi9iNEhEajJaU2xRbFZ0R3B4RmJWV1l1OGN0dmk3aVVMMDlVczRwNitycTNveTNVcFVzWTRydnVPQWlrZlA4QXZjdlhoekFBQUFlTnB0azFkc0hGVVVoci9mc1hm''@;'; put 'put ''ZE5rN3Z2VmZIWHZmRUtTNXJ4N0ZqSnk1eDdNUkp4cnRqWi9GNkY4YTdjV3k2QkFJZVFQRENNK1VKRUwwS0pIaEFvbGZSZXdmUmVhUUg3OXdKWGlUdXczei9HWjN6bnpQMzNpRUxkNTBiWUI3L3MxU2JmcERGRExMSndZZWZYUExJcDRCQ0FzeWtpRm5NWmc1enArcm5zNENGTEdJeFMxaktNcGF6''@;'; put 'put ''Z3BXc1lqVnJXTXM2MXJPQmpXeGlNMXZZeWphMlU4d09TaWdsU0JubFZGQkpGZFhVc0pOZDFMS2JQZXhsSDNYVTAwQWpJWnBvWmo4dEhLQ1ZOZzdTVGdlSE9Fd25YWFRUd3hGNk9Vb2YvUnpqT0FPYzRDU25zTGlkcTdpYW03bUJPM2lmNjdtV3AvbVlPN21OdTNtZVo3bUhRY0xjU0lRWHNYbU9G''@;'; put 'put ''M2lWbDNpWlYvaVdJZDdnTlY3blhvYjVoWnQ0bXpkNWk5Tjh6NDljeHdWRUdXR1VHSEZ1SWNGRlhJakRHQ21TbkdHYzd6akxKQk5jektWY3dtUGN5dVZjeGhWY3lRLzh4T1BLMGd4bEswYysrZm1MdnprbmxLczg1VXNxVUtFQ21xa2l6ZEpzemVGWGZ0TmN6ZE44TGRCQ0xlSjMzdEZpTGRGU0xk''@;'; put 'put ''TnlyZUJ6dnRCS3JkSnFyZEZhcmRONmJkQkdiZUkrN3RkbWJkRldiZE4yRld1SFN2aURQL21TcjFTcW9NcFVyZ3BWcWtyVnF0Rk83Vkt0ZG11UDltb2ZUNmhPOVdwUUkxL3pqVUs4eTJkOHdJZDh4S2U4eHlkcVVyUDJxMFVIMUtvMkhWUzdPblJJaDlXcExuV3JSMGZVeXdNOHlDTTh5a004ekRY''@;'; put 'put ''Y3BhTTh3NU04cFQ1K1ZyK082YmdHZEVJbmRVcVdCaFZXUkxhRy9IV2pWdGhKeFAyV29hOXUwTEhQMkQ3TGhiOHVNWnlJMnlOK3k5RFhHTGJTU1JHRHhxa0tLK2tQZVJhMllYNG9ra2hhNGJBZFQrYmIvMHAveUxPeVBhdVE4YkJkRkRhSEU2T2psa2t0SE00SS9DMmVlOVJqaStjVE5TeHN6YXdj''@;'; put 'put ''eVFoOGJWWTRsYlI5TVlNMjB5OW0wRzVleGwwVXRtZDZ4RE05MmsxNjNJVy93NXNoWVJqb09KMktEMXRPYWpSbXBaS0JSR2JrNnpRZEhOT2hNN09EazltaDAzUndETHBNMVpnTGZ5b2VMU210REhvczgzV2JwS1NacHNlYkptV1kwK05FNDhNNXFmUXowUE9meVZLWmtiL0gyOEdVWVVGdk9PcUVV''@;'; put 'put ''Nk5ETWZ0c3dYaUc3c3ZRRTlQYTEyOW1uSFNSM3o5OTJwUFRwNTJlT0ZoVzViSXNXT25ySFhhc3FXczFidEJySE1aZDVQVkdvclpqajBYSDhzYlBxM1JkYWFpKzJtT054d2FQamI0K1l6VGhJdjAyV0ZJUzlGam1zZHhqaGNkS3cyQlRkaWpsSk55Z29xa2h4eXEyWXNsOHk1M0ZTUGZ1cDJXUk5m''@;'; put 'put ''M1o2VGhnblIvUUpMcmQwN0xBKzMyTU52dWExbmxXK2pSTWNqSWFpN2pKdWRiWTFCNUZiQ2N2WW52cUg3ZGx0eUVBQUFCNDJtUHczc0Z3SWloaUl5TmpYK1FHeHAwY0RCd015UVViR2RpZE5ra3lNbWlCR0p0NU9CZzVJQ3d4TmpDTHcya1hzd01ESXdNbmtNM3B0SXNCeW1abWNObW93dGdSR0xI''@;'; put 'put ''Qm9TTmlJM09LeTBZMUVHOFhSd01ESTR0RFIzSklCRWhKSkJCczV1Tmc1Tkhhd2ZpL2RRTkw3MFltQnBmTnJDbHNEQzR1QVA0Y0pXQUFBQUFBQVZpWTluWUFBQT09KSBmb3JtYXQoIndvZmYiKTtmb250LXdlaWdodDo0MDA7Zm9udC1zdHlsZTpub3JtYWx9QGZvbnQtZmFjZXtmb250LWZhbWls''@;'; put 'put ''eTpNZXRyb3BvbGlzO3NyYzp1cmwoZGF0YTphcHBsaWNhdGlvbi9mb250LXdvZmY7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R1JnQUJBQUFBQUZYd0FCTUFBQUFBb09BQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJHUmxSTkFBQUJxQUFBQUJ3QUFBQWNmS1RiTEVkRVJVWUFBQUhF''@;'; put 'put ''QUFBQVRRQUFBR0lIMVFmOFIxQlBVd0FBQWhRQUFBY2ZBQUFPZGoraGZYUkhVMVZDQUFBSk5BQUFBQ0FBQUFBZ1JIWk1kVTlUTHpJQUFBbFVBQUFBVGdBQUFHQm9xYTMrWTIxaGNBQUFDYVFBQUFKc0FBQURubmRERDdGamRuUWdBQUFNRUFBQUFEQUFBQUE4RWQ4QnkyWndaMjBBQUF4QUFBQUdP''@;'; put 'put ''Z0FBRFJaMlpIMTJaMkZ6Y0FBQUVud0FBQUFJQUFBQUNBQUFBQkJuYkhsbUFBQVNoQUFBT0RrQUFHMDhzTkd5TldobFlXUUFBRXJBQUFBQU5nQUFBRFlMYTRZSGFHaGxZUUFBU3ZnQUFBQWhBQUFBSkFlRUJDQm9iWFI0QUFCTEhBQUFBb3NBQUFUYXNuZzVQbXh2WTJFQUFFMm9BQUFDYndBQUFu''@;'; put 'put ''cHlWVmZhYldGNGNBQUFVQmdBQUFBZ0FBQUFJQUtSQWg1dVlXMWxBQUJRT0FBQUFZVUFBQU5rTCthR1NuQnZjM1FBQUZIQUFBQURvUUFBQmlHWEZqMktjSEpsY0FBQVZXUUFBQUNCQUFBQWpSbFFBaEIzWldKbUFBQlY2QUFBQUFZQUFBQUc5RzFZbUFBQUFBRUFBQUFBMUNTWXVnQUFBQURUd1oy''@;'; put 'put ''R0FBQUFBTlMrcE90NDJnMk1RUXFFUUJERUVrZjBNTFBvZjd5cEwvRG9mWGZWL3ovQUlnUkMwVFFDTFI2Y2RGUmtqVnNvN0h6VHYxRDRCN200MDQ4RE9sb3BObHY2NDVTZVhYTFQ1MXNYelNhK1czQUYzQUFBQUhqYWpWY0xiRlZWRmwzN2ZPNXIzd01zcFh5RVVna2hVQWhXaGpDaUNLTnhtbHBJ''@;'; put 'put ''Unhtc0JBMFlOWTRma005VVpLYkd5R2NVelVqcXhKR0taRUxRTXRwZ0JVVEZxa2hlQ1A2SUlmZ0pFaXdFSzJMOUFTb2FJOHAxM1gwZmNFdjdadXhLVjNmM09mZmNzL2RlNSszeklBRFNHSW9wa01xcW1sb1V3TkdETUlUbEg0R0JuZk9YdW5rb21YdGozUnlVenAwemR3NW5nLzVvTko0UnNlVnph''@;'; put 'put ''ZlJER1lhcngySVlhbXhMUEJvczBGVWxhRURBaDZUblFqNHhVSDBlSmFjaHFBb2J5QjRUc1FLL0lKU0JNTndHNThrQWFVTUdQYml6STJFMmJBNzNodnVSNXlmOEp1L0k3bTY5bjJCQXAvOC9DLytkZDRXT3ZDTnRlVWYyaHRrOEk4M2h3WEJyaExPZjRPL09DRjEyaXZEenNJRlpNaGpDVEE5bnRr''@;'; put 'put ''WVFCaFdFeFFXRXcxakM0L2RFZ1BGRUNoY1RCWmhBRkRLM0UxbXBSWVJnS2U3bnpBY0l6NHl2b1A5RlF2QVNJWGlaTUhpWGNIaWZjTmhQZUh4Q0JQaVVDUEFaRWVBb2tjSTNSQW9uaUVKVzd4ZXVGaEpwS1pJaUZFcXhGSk5McElROGtKVk5jKzB4Vk1rd1BqT0tFTjEzdkdPak83YTZZNmM3OXFn''@;'; put 'put ''a0NsQkZGS0thU0dNYWtjRjgzTVVWb2tnQ2pTVFFTRHdleGtyT2J5UUs4UmhXYy80VCtDL25QMDFrc0pGSVlSTlJnT2VJRkRZVEJYaWVTT0VGb2dCYmlFSzBFb1hZUnFTUkpkTFlUcVN4ZzBqamRVTHdKaUdhblFBSGlBdytKdUs4R00yTDBidzR6WXZYdkhqTmk5TzhPTTJMay83U24vazZWODRs''@;'; put 'put ''UnpueVhMV0NHUnJPR2xld3RtTlowL0hNekFSbVpENFc0SytvdzUxWXlGb3V4VEw4QS9jeEN3OHcrbzJNNkhsVzhpVlc4RjFXYmo4cjlpa3JkWlE3T2FFbnE0anZMWW5PbDdsWHorRWJVc2U0ZTFKZlc2bTdodkQ3YnRTcUk5SDV5RHZ5SlhHc215ZVA1VDBiWCtiKzdndS9EZytFRDRVUG5UMlNP''@;'; put 'put ''NUZOWWRQcC83NUlqSHl1enhpVXFpWkVOV0Z3RFdGeExlRndIZUV4a3dpb2lKV2NFNmxCVkExRzFXRFFRZ1RZUUFSYWFkRktpMVphdE5LaWRUVTRSRmdjSml3NkNJdWZDWStUUkNDOXBUZnIya2Y2a1B0S1gzSlVVZEdLaWd5U1FWemZZRFRPSVRMb1RmUlFwWXNxM2FqU2JVN3BWeEJKcFR1Tkow''@;'; put 'put ''akVrMUtsMjV6U3oyamNhVlJPbzBwcFZLZVVIbXM4VnZjclJINWRSOUU2MWF6SlJSZ3AxMnFjS2RXdlZmMmFYTXlSaWswdThrakxKaEYvVXRGV3M1Q1NNWEl4M3g1OWVsVXh3bW1zMTdXTWF5WWphV1FrcS9BNG8za0NUNklKNnhqUjA0eGtBMDlqSzNlYjVTNTNjSGVIV0lNTzd1d2tkOUNIYit2''@;'; put 'put ''UHR3emlpbVdxWjROZTJsR0t3NlcwaTluZkxxVWxhbC9LVHRRV2xKSGJtZi90c2x4V3lDT3lTdGJJT2xrdm0yU0xiSlh0OHBic2tnOWtueHlVdy9LVmZDcy95a25qVE5vVW1YNm0xQXcxNWFiQ2pETVR6R1dteXRTWWFXYUd1ZDdjYkdhYkJXYVJ1Y2NzTXcrYUJ2T29XVzNXbXFkTWk5bHNXczAy''@;'; put 'put ''czhQc05Mdk5IdE5tMmsySE9XS09tNThzYkdCNzJHSTd3SmJaWVhhVUhXTXZ0QlB0NWJiYVhtbHI3WFgyQm51THZjUFcyYi9iZSsxOTlwLzJYN2JSL3NjK2FadnRCdnVDZmNWbTdSdjJIZnVlM1dzUDJFUDJDM3ZNL21CL2RzWVZ1RjZ1eEExMFE5eHdOOXFOZFJlNVA3aEtOOFZOZGRQZFRIZVR1''@;'; put 'put ''ODNOY3d2ZDNXNkpXKzVXdUVmY0tyZkdyWFByM1NhM3hXMTEyOTFiYnBmN3dPMXpCOTFoOTVYNzF2M29UbnJuMDc3STkvT2xmcWd2OXhWK25KL2dML05WdnNaUDh6UDg5ZjVtUDlzdjhJdjhQWDZaZjlBMytFZjlhci9XUCtWYi9HYmY2cmY1SFg2bjMrMzMrRGJmN2p2OEVYL2MveFFnQ0lJZVBC''@;'; put 'put ''MzFaaU41aVhLbGNyVnlZOFJZck55c25tWEtLeE04VmJsQ2VaTHkzeUkyZzlXdVZhNVNIbUg0bVNybHloWEtreU5HdmZLejV0VlR0bHlpUEVuOTdjb24xRE5LdVVsNXBISkcrYzkyTnZrWjVmcnVtVlUvRTJPMStyc3dwaXR2Vmw1OGhtVldITHZhODVUZlZGN1psZU1NcU4yVmE1VkhtT3ovWTJv''@;'; put 'put ''M21hdHNkNHlweWkzSzlXZVkyY3RxOXY0M3gvbk1kc3NqRTF5ZjJITW5PMUhUSmVvdlYzL1NydFFjUHFiMnJFVG00eWc2MlRrVitiUDhqV3BQam0yZEUyc21yazRjZGF6UG5KM3pSM09hMVg3V0xqcWwzcHpHUGxUNy9jak8xVFRPV0t6dFdIdEpmMXpaT0cvdnFiMVlhL1NSNnZ4cm5UOVYzOVd1''@;'; put 'put ''Yy9SRXhMcnQ1SzlRKzBTdWdodFBxenJwajAvUXBJUm00b29rN2VmVXZqWDI2M3c5RjJhdytwdlVIeXR0Wk1LdVVzNm9KNTk5WE8yN05icXIxTjZqZG5MbDZuQUwrWHpsWktXU2I1eWNPOTNaMzhDZFp4cWNwL2RTOE41VnpxeEV0MVBIcmoyYVhUQzZZUWY0SFc5aUtZekRSZXhoVWVmdXhiNDlp''@;'; put 'put ''VDA5NnR5OTlZNWFySjI3RC92T0ZQYWhHcUl2cm1LZjY4ZE9ONTNmZldZUXBkckxCN1ByeldMWG1zKzcyeEM5dlkxblIxL0Q5ZGF5OC8xSmU5L1Y3SDZ2c2tPK2hsMjRsVGU2bzZqWFcrVXFmQ2NlajdNVEQwS0w5dFJXN2xma0hQMXVGa0RDV0lWTGNBdDVPYnRkaHQ5MXloamJLTjY5TCtTdUwr''@;'; put 'put ''Y3VyMFF0Ujk5VzdlNVZQcWlzWndhN0U2eVZ3RjNLNjVVLzFxejFWVHVEUC9JOXQrRjJTVW1CRkVwYU10SlRlblhkMGE5OWw1OTBBQUFCQUFBQUNnQWNBQjRBQVVSR1RGUUFDQUFFQUFBQUFQLy9BQUFBQUFBQWVOcGpZR1p5Wi96Q3dNckF3dFRGRk1IQXdPQU5vUm5qR0VRWXpZQjhCallHT0dC''@;'; put 'put ''blFBS2gzdUYrREE0TUNxcC9tS1gvR3pNd01KOWsxRkZnWUpnTWttTmlaVm9QcEJRWW1BRHdiUXExQUFCNDJyV1RXVkNPVVJ6R2YvKzNmUkVxRlBYMjltblRScUlVUmZhbHlMNlVyTm15cjlrYTZ4QkRSVkxJbmlTakdSTlRVN1liN3JnMVk0eSt6NVZiN2d3ZHgxZE1NOHk0Y21iZWM5NXp6cHpu''@;'; put 'put ''bkhtZTN4OXdvZXNMUVhTUFZPcVpPT2V1VXF6SEpZekRqWUdVY0lzNjd0SklFODIwMENZZUVpQ0RKRXdHUzV3a1NhcWtTNlpNbFJ6SmswSXBraElqMVhobHZIZUpNbyticmVZVDg0dmxiZ1Zhd1Zhb1piT2lyR0ZXdW5YZjVoLzVUU2w5aDhXTkh0cVBhZU9aK0VwL01jVW1zWklvS1pJbUdaSWwy''@;'; put 'put ''WklyQmJKQk5tdnRsOFpiclgzSWJESGJ6YytXWVFWWVFWYUlVM3VvbGZaTFczMVVMOVJ6OVZTMXExYjFTRFdyaDZwSk5hb0dWYS9xMURWVnEycFV0YXBTbGFwQ2xha3pxbFNkNkh6VG1kV1o5UDJUbzl4UjRNaDN4TmdIMnYzc1BuWXZ1NXZkNlBqYThibmo4SWVRZDhsZFh2Mm41bTU0TzVQZ2ox''@;'; put 'put ''c0VvL3ZQK0lkRzEwa1hYSFYyN25qZ2lSZmUrT0JMTC96b1RSLzY0azhBZ2ZTalB3TUlJbGhuUEVpbkhvcEptRTRrSEJ1RGlTQ1NLS0tKWVFpeHhCRlBBb2tNWlJoSkRDZVpFWXdraFZSR2tVWTZveGxEQnBtTTFjeGtNWjRKVEdRU2s1bkNWS1l4blJsa2s4Tk1acEhMYk9Zd2wzbk1ad0VMV2NS''@;'; put 'put ''aVRWb2UrU3lsZ0dVc1o0VisvdzUyc3B0aURuR2MwNVJUUmdYbk9VY2xWVlJ6a1JvdWNZWEwxSEtWNjl6VUZQMWs5RFlObXFWN21xYWZiUldydFIzUmJPQnN0emZyV2FQN1haejQ3VmJoWHh5OFFEMmJXZGxqWlMyYkpFYVBXOWpPTWV3NEpGenpHU2xSdWdJaXVLTjNIcUJwbGdSZEQvSGRaNHFj''@;'; put 'put ''WWNTeWpiMXNaUjk3T01CQlhVdjdPY0pSdlhXWVVrNXhrdGU2bW5xeFRyekVXM3pZS0g2YWY4OGZrTTJxNkhqYVkyREFBcEtCTUl3aGpHazlBd1BUYmlaV0JvYi9JY3pTLzQyWmR2Ly93blNKU2ZEL2wvOStJRDRBMnM4TnNuamFyVlpwZDlOR0ZKVzhaU01iV1doUlM4ZE1uS2JSeUtRVWdnRURR''@;'; put 'put ''WXJ0UXJvNFd5dEJhYVU0U2ZjRnV0RjlYL0N2ZVhMYWMrZzNmbHJ2RzlrbWdZU2U5dFFmOU83TXV6TnZtM2xqTXBRZ1k5MnZCRUlzM1RXR2xwY290M3JOcDFNV3pRVGh0bWl1KzVRcVJILzFHcjFHb3lFM3JIeWVqSUFNVHk2MkROUHdRdGNoVTVFSXR4MUtLYkVwNkY2ZE10UFhXak5tdjFkcFZD''@;'; put 'put ''aFg4Zk9VTGdRcjEvMjh6RnROWDFDOWpxbUZ3QkpVWWxRS0FoRW43R2lUWmpEVkhnbWFZLzBjTSsvVmZRRnZtcEdnL3JvZllrYXdycC9SUEtQNTBBcURJTERJdElOQWtsSDN0NExBb2JRUzJDZFRpT0JaMXF2N2xKVXU1YVNMT0FJeVE0Y3lTc0l2c1Jsbk4xekJHdmJZU2p6Z0wwaVZCcVZuODFC''@;'; put 'put ''Nm9pbWFNQkRQWlFzSWN0a1A2MWEwRXZneXlBZUNGbFo5NkN3T3JXM2ZvYXlpSHM5dUdha2tVemtNcFN1UmNlbEdsTnJZSnJNQkE1U2RkYWhIQ1haMXdHdmN6UmdiZ25lZ2hUQmdTcmlvWGUxVnJaNEJ3NnU0cy9sdTd2dlUzbHIwSjd1WU5sendFSGNvS2swWmNWMTB2Z3lMYzByQ2dwTWRMMUVk''@;'; put 'put ''R1MwbUpnWU9XRTVUV0dWWTkwUGJ2ZWlRMGdHMUJ2clRLTFlsODhGczNxRkJGYWRTRmRxTUZoMGFVaUFLUVllOHE3d2NRTG9CRGZKb0JhTkJqQndheGpZak9pVUNHV2pBTGcxNW9XaUdnb2FRTklkRzFOS2FIMmMyRjRNcEd0eVN0eDBhVlV2TC90SnFNbW5sTVQrbTV3K3IyQmoyMXYxNGVCZ0Zq''@;'; put 'put ''RndhdHZuTTRpUzc4U0grRE9KRDVpUXFrUzdVL1ppVGgyamRKdXJMWm1mekVzczYyRXIwdkFSWGdXY0NSRktEL3pYTTdpM1ZBUVdNRFdOTUlsc2VHUmRicG1ucVdvMHBJelpTbFRXZmhxVXJLalNBdzljUHc2RXJRcGovYzNUVU5JWU0xMjJHOGVHY1RYZHM2empTTkk3WXhteUhKbFJzc3B4RW5s''@;'; put 'put ''a2VVWEdhNVdNcXpyQjhYTVZabGtkVm5HTnBxYmlINVJNcTdtWDVwSXI3V0Q2alpDZnZsQXVSWVNtS1pON2dDK0xRN0M3bFpGZDVNMUhhdTVUVFhlV3RSSGxNR1RSby80ZjRua0o4eCtDWFFId3M4NGlQNVhIRXgxSWlQcFpUaUk5bEFmR3huRVo4TEo5R2ZDeG5FQjlMcFVSWkgxTkh3ZXhvS0R4''@;'; put 'put ''MndkT2x4TlZUZkZhTGloeWJITnpDRTdnQU5YRkFGV1ZVa3R3Ukg4bXdPUHE1Ym1uTlNUb3hHMmZOaVlxUFJzWUJQcnM3TXcrclR5cHhXdnY3SEhobTVXRWp1SjM3R3VkNVkvSVBnMytMRjJVcFBtbE9jSENua0FCNHZML0R1QlZSeWFIVHFuaWs3TkQ4UDFGeGdodWduMEZOak1tQ0tJb2EzM3pr''@;'; put 'put ''OGtxeldaTTF0QW9mVHdRNks5ckJ2R2xPakNPbEpiU29TUm9CTFlPdVdkQTA2dlBzcldaUkNsRnVZcit6ZXltaW1PeEZHY3lBS1Nqa3ByR3c3TytrUkZwWU82bnA5TkhBNVViYWk1NHNOVnRXY1lXOUIrOWp5TTBzZVRkU1hyZ3BLZTFGbTFDbnZNZ0NEcm1SUGJnbWdsdG83N0tLWWtwWXFDSStD''@;'; put 'put ''RzBGKysxalJDWXRNNE11Z1NKa2NiS3lEKzJLSFRtaWduWUMzM3JTS3UvYlF1M1BkZklnTUp1ZGJ1ZEJscEdpODEwVjlXcDlWZGJZS0ZldjNFMGZCOVBPc0xIbUYwVVpUeTU3MzU0VTdGZW5CTGtDUmxkMnYrNUo4Zlk3MXUxS1NUN2JGM1o1NG5WS0ZmSmZnQWREN3BUM0locEZrYk5ZcFJIUHIx''@;'; put 'put ''dDRNa1U1S01aRmN4d1g5TkllN1lwVjM2TmQySGZ0bzFaY1ZsU3lIMlhRVlhUV2JzSTNQbDhJNmtBcUNscWtJbFo0T21RK201MmE4TEdVdUN4RjNMTmsxMFgwSFR3aEhlSy9PTVMxLyt2Y2NoVGNvc29TWFdqWENja0hiUjhyNkswbHU1T0hLa1puN2J4c1o2SWRTVGZvR29LZVNDNDQvbDdnTG84''@;'; put 'put ''VjZSVHU4L01IekYvQmR1YjRHSjBHdnFyb0RNUVM1NjJDQklzcTN0Sk9wbDVRZklScENmQkYxVUt6QW5nSndHVHdzbXFaZXFZT29HZVdtVk1CV0dFT2cxWG1NRmhqRG9OMXRZT3VkeG5vRlNCVG8xZlZqcG5NK1VESlhNQThrOUUxNW1sMG5Ya2F2Y1k4alc2d1RRL2dkYmJKNEEyMnlTQmttd3dp''@;'; put 'put ''NWxRQk5wakRvTUVjQnB2TVliQ2wvWEtCdHJWZmpON1VmakY2Uy92RjZHM3RGNk4zdEYrTTN0VitNWHBQKzhYb2ZlVDRYTGVBSCtnUlhRVDhNSUdYQUQvaXBPdlJBa1kzOFl5Mk9iY1N5SnlQTmNkc2N6N0I0dlBkWFQvVkk3M2lzd1R5aXM4VHlQVGIyS2ROK0NLQlRQZ3lnVXo0Q3R4eWQ3K3Y5''@;'; put 'put ''VWpUdjBrZzA3OU5JTk8vdzhvMjRmc0VNdUdIQkRMaFIzQXZkUGY3U1k4MC9lY0VNdjJYQkRMOVY2eHNFMzVMSUJOK1R5QVQ3cWlkdmt5cTgyZlZ0YWwzaTlKVDlkdWRkOWo1RzJVenVpd0FBQUFCQUFILy93QVBlTnExZlFsNFpGV1o2RG5uVnRXdExhblVucVN5MVo2bGt0cFNxZXlwN0V0bDZY''@;'; put 'put ''Um43ZTRrdlNYcHBxRnA2SVZGUUJBYkJrVlJuSEVieFVFUUIxa2FCRnFVWlJ4R0JaNDlMaU1PT283b20zRkdIYmZuRzBaMEpEZnZQK2ZjVzNXek5UamY5NkNUVk83OXovYWZmei8vZjRLTWFHRTlpVDh1ZUpDQUxNaUpTcEFmMWFBVWFrRWRhQWlWWkZ3OW5lMnQ2YVprYlRoUVdWcnNzaFlaTkFR''@;'; put 'put ''WlkzVmFyOVVyT3BOT3Z6T1o4cWVTS1pIOUZPR2o4cFErb3ovcEczaVNVajdMTUt4Qk9wbkNINWYrRG5mODMrNmVCM3A2SG5pZ3grZjE5dlQwSE9ueG5udmdpTTk3eFB2QUF3OTRqeHc1TnpEd3dNcEExZDhMUCt2MUJyM3c3NWFqdm9HQndFSDROT0J0Ny9FZHViN1pIZDExMVZXUFhIWFZydWlx''@;'; put 'put ''TitxRmZ3Z1JOTHIrT3ZvV09jL1dGc3o0RU1ab0FTRlVtRVdFQ0VzYUxBaHVZVlNqMFZnMGhVRnJrVlowMTltVGd0OFZTalUySlJNdXAwUG5uemxUMHFjTmg4czhvWkNIbkpkOFA2d3VLdzJIUzh1cUVWcGZSMzM0WG53RGViREloNHdJRlFudy9TVkV4dzNBdHh0aFhBK3FSTU9aQVl1T0lLMUFN''@;'; put 'put ''RUY0MllRTmhzSnNZVkdCSUlyNkJiT1I2UFhXckFZVFlpR2pDRlZXbEpkQkswOXBTYkVieHJkYmMvK0o1WFZZVElwKzBaOW1YK2trKzBxSzdFdWtML0dic1N2dEp5SzdJdStOVEVRdXR4K1BYV0cvQWo2OUY1NmNzUDNOZTJQdnhSZWV6ejRDLzJXZnp6NEsvMldmUjRDWjBQb0Ywa2JlUUJVb2lD''@;'; put 'put ''S29QbE1icWZONVBhWEZicWZOWk5TTGhZaG9BVzFrQkphRkNUNEk2M09qMFVxclZRQnNCWFN3eDZsUU9PMXlweHB3cXJFVHAyR3ZYVzR4RkhaV1lDZUN4NFhZYVd0S05jSUQwbmJtc3FsM0hlakk3ajF5SkxtdmRlckt4ZGIrOFJOWFNaZEhFM1ZOdjg2MFpLNDRLV1o2aXZabGgydy9LcDNlbFp4''@;'; put 'put ''cEZqczZ6YnRITzYzLzZKbWJ3dTRhNnd1R0ZyODAzMVpkM1dEOUpzeERpeUxydnlOcjVDbllYVHRnT29yYTBQL0tQbGE4YXk1VFo4SmFJOFk2TFY1Rk9xUTM2UFJIa1VhRGxnaW11MThBZXlBc21VVWlDQlpoMUpOOUxBeE5vcGRzZ2dDVXRST1h6RmdVM2VLb0o1UGNwZ1VoQUV1Ym9lMWJ6Yzlu''@;'; put 'put ''UXJGWVZaWERnVkNzTGRiYTFGZ1ZyV3FvRGprcUhSV2x4WGFidFFnV1V4Z3FGSjExTm83UlpBSXc2U2pFZnB6RWZvWkt2MC9uZExpU2FOUDdUcHgvOTZtUm10cVJXQXkrWjZQNHZidWs4TVRwUkRJVWppZERlTzlJTFR6a3I2cmo5R0VpalBjMWpFZmp1eG9hSm1MeGlYbzh0VGFKLzdJakd1M3Np''@;'; put 'put ''RFYwU3Z2cUorSlIrZzRnNnJ2cDQ4NkdhQ2VpdEJOY2Y1M2NRTDZBdktnZU5hSE9URnM4R3E2cUtQZVVtSWhSSUY2TUJESkNhUnN2QWV1NXNscGdPSVlab0tDR0JwK3ZvYWtoNWF2M1JTSituZWlxMDRiQ09yK1BMcW9wclY0YXZITTNwZDA2MFkzbzJ0eDhuYlkwZ05PbGtxQXZzZTkwMTNKTGRx''@;'; put 'put ''SzhOTHFuTVRaUlB6RTkxRmRYT1JHTm5aVCtNbGxjMnROVTczY01YTkd4T3BvMitocm5ZblB0dlFmOE5mMmhobXdra3Exdkh3M3NHZWlhREN6M25TSWowWEJwMmxzYUR3Y1NhNjkxWHoyY21tektJSVFwbjZNbnlZUElqT3laSWlwRjJQYmlVV2VBd01SdGVYa2grcWV0WHJmYmE3WEU4SDhzZTkw''@;'; put 'put ''K245dTdQSXhvSDYzck03aVBQSXNLa082SkFpMk8xVEV4azNZRGc4Q2l4QWV2dkhLMWNXclg1SjdHMlIvZDhxN1g5alJOUDNYcTFGTlRhZGEyRnRvMkttMUZhTXVSRUU1ei9OVHVtWVIycTlERHFlbW5yajcxNUV6VG50ZmVkY3VQOXJDMktYd0NIeURQbzRPb09aUGFPekhVVkYzaDF1bGhFU01D''@;'; put 'put ''eGhxTXRCaXQ2ckJXUzVhQWVGMWFFRUlBZW1EUDdzNzJXSVBQV3lkU1NvU1pwcHZTT2hIKzkvdkMvRGZnOVFZY0R2SGZrZ20zQy81bnYzRlVBQ3hBTlBGWDdOZENEQnRaZ2ZsdnRKc3d0SGU1bVpoOTNtclVFYnVqMnFyVFdRMGFjM0dEd1cwMnV3ME54V2FOc1VpanQxWTc3RVJudEpvTEtKelJa''@;'; put 'put ''Z2c1R1dBQkE3U1dhcUtPQWdib0RCbHNSZ3BaZ0U5WVRLVUpuN25BN2pNS0Z0RmdFUXN0R3IxV3E5ZFlDdlVXdlZpa01mcnNCV1pmb3RSazRaQmlrZWd6QXlpOFphQ2lBVnZOSE5Uc2c1Y2NsdUcwR3kwVEIybEdKaFRLK0pGR3dKcHBvRzJRRkZoQXk4RCtlQUVCYXNlWTRDN1NpYVYxMkU4MVlJ''@;'; put 'put ''cHF3aVJ4UEx2L21XZjJQNHU5eno0Ny8venp0TCtCOVd2UXQ5RjFxQkM1TThES2FGQ2hNV0NVZ0kzU0dIQ0FUMFZtdTJvTFBLRndtVGNjamgyTHhFRTloVk8xL3VFMDdhc1IvUVMzNDA3Z3p1S01FOUdPcHVtY1lVWUlabFJFTzdON25kNUdySmQranp2M3N2WDBncDU4RWNZM1VZMVBuNERVdzlp''@;'; put 'put ''TktUR1lrREVnQUJHb3RlSmxza1kwNTdRaFh2L1YrZ1Y4Z2Z3VXhyVm1DbW1udDhMWXAvbUFWSFRoa2N1bCt5NG5QMzJUaW01UUprMGdPMjRoejRDNHEwU1JUQTBRSDFzeGx4SVlsRE9iUUZFUktOYktvb3BpRjVPTG9HL3FOSnZsSGtrMU5tQy9qekpTQll3azNwYk4zalk5ZlM2YlBUZWRub25G''@;'; put 'put ''WnRMcDJYaDhObTNlOStuVjFYdjM3YnQzZGZYVCt4WjZyeDBkdmFhMzk1clIwV3Q3R1E1ZzNiZ2NkTFlPZVRMRnNKVUM0R3VFUzNHTUxYalVhbWVvRThQcHBOWC9oV3RxbjlxOVF0S2p3KzlZbTBTc2ZSUVdWUXpyS1VhMW1iREpDTXNCYWlCa2hLR1RpVDlxZEN3Z3BuT3M3a0JJSXhiWGRXRkZh''@;'; put 'put ''b3ZoSmxuY1dUQnNUL1ROdnJiUnBxYVpVTitCajJlT2RZek0zWXVISmZlZWI3VXNScHU2R3hQdDV4cVhPdnF2SGZxelJUYTJIM0JaQVdQWG9LNU1lMGt4ak9QRG1NRG9NQVdtdUJIQnl6Q3laZ21JRXlZQ3VuT0o4cnlic1hzTnFnNEV2SUdnS0piQUxsT2hra3hRUFFPV21qdlJ0SGw2b296MmZ6''@;'; put 'put ''aFgyeDA0MU5xemEybzhtKzJkM05XZW5BcDFMWHk0LzNqN1NHdkhUT2RWdytaTXFyY3VrV2xNcGZGZTNKeU1kVWJyTzYrTFRUZTE3N1lWN3VsdDNaZmtkT0NIYjFuQXV4R2tHMWdmWmpBeThJaE9DMnZBQ0d6TkZVQWRVNmtXemFqSlpDb3dGUUJQMllyb1hJUGVNRTVhcWJYcFQxa0ZmS3Ywa0Ft''@;'; put 'put ''UFhYdjQ4UEp2NzVuRVg1YUc1dTk1QS9kTHo4RHE0NENmR2hpakRMVm5XbXdnOWdyTUJHdkFuaGxCOEIxcFFJRUxBbG5nMm5zamNzQWM4MW50QVQ5RERoZzZTUmtqWXBoeWtkaVVJOE8vT05JMXQ5S3paMC92Wk0rZ0VYOVcrcUt1WjZ6emFFZjNxUkh6NVVQN3h0dmFoaE5WZUhYeFlpUjVxS2Z2''@;'; put 'put ''V0V1T0I3cGczenlvR3ZXRDdRTnJ0d0xSQkl1SlZpT002RUNhYUxTQ1poWGxOS2dJODFJRVExa1p6SzY2TE96M1F2dlNRRENrQjRzTXliT2h3b0x5aUZ2a3JBSENPR25MMFJwbGs0OGU2OHhjUFhqSDdkbHplNjZjYnd6MFJ4cW5FcmpxVUl1N056alQzVEpWV0RqZWpUL2ZlTENuKzdMMjV6Nngr''@;'; put 'put ''dGtERStOZWIvOTEyYnFZOU5IcWJuL0hTRWRpYkpiU0hnZ2Q0bVo4VTVrcEEzMkNHZGRRZVlPWm5RMTJMVmcxMUZyRTNwVFhDWUxncjZTUDRCOUxQenBOSmhkSDF6NUo3WWdvNENIRjhCQUczNk12MCszUUVaQ3FJNklLQTdKMDBBTUdNT3dQa3c3VjFSUUoxYW5xeG1oOVdiZ3M1S3VpcUlnWXFM''@;'; put 'put ''amF6cENRa2FPeW90ejBNK2loUWtKdGlaK2Y3WnZzYnUvcnZiS3IrOHFld1pidVhmMW5oMUp6ayszdHUyWlR2WHRqd3dIL2NIeHZyemsyMjlxeHoxVzhxN2w1S2xJL2xXN2Q1WEx2YTIrZGkrS1B0c2ZxTzlvYjRtMkM5Sld1aEsrcEF1T0tKbCtpaSs1MUd0YVl5ZTkxUlJIc3NRRzRWRSsxQnF4''@;'; put 'put ''VUN6eXFKYXRBNlFJc1R4QmNXWlVTVVBhYUx6QVlDTEs5ZHZHdDVod0wycGIrSWkvWVJwZk9aYUlyaWIrNFpaY3piUGU3MkRiWDB4MG56MnpjWmI3ejBrZm9OclA5cG10Z2VvTG9RQ2U0cWN5bU1wck4wTW9kS2kxM3FNeG1oTXh1czh0V3hKU0hUcllnRk9WQnRsRWtaZkpQZkl1aVVhUlR5aWZ3''@;'; put 'put ''czVoK0pEcndzMEQvV2tWa0JlbjhQbVI0SE9Pbjhmc2VTOVp4T3B3aGhNd0RIZXFlMEJHd2tleXBvTE1BTzlQNDY5TDc4Q2tjSC92QnpFTVB6VEsrNjBaUEVBZitCVkNlaUh5WlNrcXYxRGRENEJDUWFWbE1FNEhxN3lJcXBTbW4wLys3OFhla2V2YjFpL25iNW1ITUVSalRxWXdwd0pqcGVwelNP''@;'; put 'put ''clVqK0JTTStYVXA5Y2hERDgzOFlPd0hkRXozK3V2NE83RC9UckNXMDVsR3UwRlB4UnVtNGxtQWdXOVM2UWtxcUxWWW8zRnJSbDB1bDlkVkZTejJCM1YwSWpJSDU2UXhNTFp6ZzcvNnhPNmpmYzB6QTUyTHQzY2Rhb3JQcFE4NEZNemVxdXVPMUhWTmRWNFZuMm1NVExhYVQvd2c3OHJTK1VYVzd4''@;'; put 'put ''VDZ5WDJBbXduMG80eTV5a2FNaHM0T0lvS1F6RDdtQndjcEJZYU9RZEFZYmpKam94WWJaNUVXSkxXb3hVZVJhTUo2VVg4WTZYU0szMFA5SzFpRzFVQzlxeHBvbkZRYXcySU5Sc0d3K3BhZDZNRERhc20xUWtnbklOM3F6cTMxZW5FV2dVdTl4THFaQUQrcnBLY0hvWjZKbnZIaFFWaFVKaFFLMjBP''@;'; put 'put ''QlVLaEFMTnRpUXZoQ1lSWHZKRnp1dEZ2a0VpRkJNYTZ5TGhMTVl2Y3JvbFRtcjk3SFZxLys4c25sUjViVE05Rm9oN0ZpVnpRMld0ZHpXV3U4ejI2ZUx0SzREZDd5OHJSLzN5ZjJMeis2c25EUFlzZHl5dDV5c3RmZUYwekVhZ2RybTZPblZ4NWV2dkxMVngyNGIzSGl5blFrSEtxUDdHcnNQZFZY''@;'; put 'put ''NSsvU1RialB0SmdxcW1xbXU2WS9PTFA2NlBMK1Qrd3ZyeW9MZUxFeHRpY1JiWXhPMU1mYjJmNlZ3cmZ2Z1J3V1FaUFdaYW9OV0VQd0NGQVJrSlVHdENoVmJXRHdVMHRHcjljYjlVWnVtaGFERmhXWmF4azJZUktSUHQ1K0VvZnB2OE4zd24vay9OcmtUL0dBOUNYQSs2d2MweWhDSmNpSE9qS3RJ''@;'; put 'put ''SWxoQkIxd2psWkR0TlM4a0lNckl1WVdNQjNMVTJxemVpdExmUjVmc2N0YVlpdUpWT21aQWJwUklIc3gwNnAxMkdsWFBzemlnWmI1UkR6ZTBkMTBvRU42Qk5jMzl2UTB2dlJxNi9CdzY2dmtmR1E4M2pqc3FkamIwalFkd3g5TTE5VTFmMVY2cVN1UjZQb1haZy9GUU5iZURieFdqaG95ZGFVbEpx''@;'; put 'put ''T0dHaFdLUEhWdENQL0FnM0pVRmdxR2FQaEhreWNCY2V1dTQ2YjdEeDI2ZjJubzFzUmdZTEd4OTB4Ly81bmV4c1hBWU9MV0lmUEIrNWVXN2p2WWt1d0xSNGF1SFJpNGJpZ1M3a3Uyd0w1UXZIMloyVGRPNWkzazBNUWNZeGxOWnBQRFpuS2FuYUVxTFVXUFFwaDFPQzBUWUIyMnp2N3F4Q01IRHo1''@;'; put 'put ''eTRsZi9PWEY5Zi84N3h0OVB6czk5NHZEaFQ4N3R6NXdhSHI0Nkl4blkyc0dBSVgwd25nbEZNeEZGc2xGN1JyTUF1cVZRYllVeTY5N0V3MHRnM3RpZHNweXplcDJQNDh1bFA4Y2Zra1Q4QnpMNWxjVnZMNUx6aTJoRC93WlVrd2twL1ZOcHhYcFZWRDY4TUNBRDdabkpMZGFyWCtsM2hYYjYwcUww''@;'; put 'put ''WGQ0cDM2LzdZYis4S0pWSmdNdUFoRXBDTkZwbVBHczFpQkVYOTArcEpjakVKR2gvTzJ5YW43dFhYdXRHL3QyMGVTay8vak5jRnZ1TDRhWFBIRHIwbWFXUlA0OE4razgwOWRFTjdJdnM4eitOcjVaK0hXL2pXOWlhNkF2Vjh5MnM4SHdnditZN0dVN0RtWUJzTWk2RGpVclhTK05ERnJRWmw1aXVG''@;'; put 'put ''cjZTOEozY3VTemRzYnlNcjZIc2hLUFN0OGw1NlRYc2cxNW9xOGRaZkpMR0ZWUytCbmZUd05FWVhWNm1yUURXQ2Zyakc0ei9nSXFZYWM4b21obXNaRWtBWW5JenRCY2hpejJvZ2VaNVV4NW1RYm5zc2V1OWcvWmRkYzJEeXkzTDNlWk1vcjg2dWFjYnRGUzg3L0oydnM0WjZPcERiSjFWbVhLRFhr''@;'; put 'put ''dVloc0lzQWlid0dLWGRadU02TVduRlNRUDJnMnZvbjFuR2ZiZEkvNDdyMy9sZlIyQzYwc2Z4aXZSMTZUYmNlUHhsM2k4SVl2Q1h6eU10dFJIWnBHbHZpRzQrUjUwV2FhMVdPdWtnMEVuU1NoeFN3OG9pME56YWVkWWVlQWdJSURjdmNadDVPYXpLdkR6Z0ZQaXRKdGlCMmVYZi9uYVpmc0djdXZE''@;'; put 'put ''ZkF2Si9UbjlLYnJsUDhqQ2o0NHFNUnlSa1M0KzJYSThZcHVSbi9lSDNMaTlMWitpV3ZFRU1hNVB3OVFhVnZaUitmLy8vdzVmbEFnZW84dUI5UzcybisvdFA5M0twSTRzYmVMcDAvOEdGb2VzR0JxNGQ0alRMZEFHbDErT3dOalBJSFBCR1lSYkFwZ0ttb1lsOEFCeVdXRmpnc0JVNEM1M1dVSldP''@;'; put 'put ''QnIrOU9ibmo5Q3NpMlpyRjNpRVk5L1RRczh2WW50MjNML3NvT2QreW1zbXN0dndHancyMHR3OUliNnB4NEtBMmZDWkJBOWhFSzFCSFJxQmh3THdQbzFGRkFaMU9aOWdacWcrRnFmQkZNQWR4Z3lLbU1lUjBPTzF1Mm9BVjh2dVFmN2gxTEhwVis1S0NIdWxYUFlkYWwrdHorTUVWVnpSMDlmV0dh''@;'; put 'put ''bko0a3Y2UW1PNmI2NTlRSVNxUHAwS1lDK2hNUWdOaWlrdTRqTFJhV2FUSkxBNU9zdFZxcC9LR3p0UWZCci9UeWpDbVRjcTRJc2NQVHB3Ly9kZjNMRE9VU2YyUE1uVGhXMDQ1Ly9DYjN6Q3N2WXNpak5GMGFQMi9TQnQ1RnJ3QjBGRXVKL1ZIQ1ZhaGlRWllWVHFxR29XREVUOUZVOTRMRFRlUWJR''@;'; put 'put ''U2VXNmFsajUzcVdMNnhiM1JpWWZ4d2M4Y1ZmYVBYcDFvank0M0JkbDlvc092VW1kYXJKa3duc2djNklnMXhwNjFodEsxbGZ5b1JIYTJPbE1jOGxkVWVpMmR1cG0xL2lzNnpCbkEweWV3S0hoZkp1WFk4a0NHYnlOZ1B2cDBmdU1UNHYwbjF2eXlEYTdjbzgrNHVvSXQ3b0QzWXZaa0tPWmlPc1hw''@;'; put 'put ''cFR1UndCQnlLK3FYQ2l2c3ppdHpDdnR1enkvSDU1dWE1K01yb2JkUG1zVHRtOGZ1bDB4MEhtc0Ewd0hkS1Y4L2VNY2JsakdJRDZlaFlXdWFMZ3FTVWhTU1hOR0NxYzBsam9CRjFEeWJmazc1L0V2N1IvUUdHUHIvMkhWTFArZ0t2UUZQQ2VBajZNbEpaRHdLQ251RXcxYzBXRHhMQ1ZxU2xtcE1L''@;'; put 'put ''SGZnbitFM1lYM255d1lkUFB2emd5WDlaZnVvTFZGSzhUc3pzYTVMNDEzNklsTDdKcDVnOEEzbG8wRUhYaElaanFZMkdPYTNaYkRZcnhTdk1Fcm8wc043eEo3RHdqcTk5N1Rvc1NHdlhmKzNGNi9DYzlOZFlsUDZBWitIVEg3REkreTZBdmo4R2ZldFJlYVpVUjNrdko5aGtiOXpHem03a1BtSExx''@;'; put 'put ''cVJmWGYvMzN6b2ovZVlvTHNDZmxwN0hQZEtpOUorMHJ5Ym9hN2VpNnlrKzh5R3RuSCtmQzJuWnJHekdhZTdtZzhKdnd1K1Qza0dLcEZQNGcydi9Oa0hJNHNTYXhQWDkrUHE3Y1QvNTd0djB2cEpBV1BBMS9zWm5Qdk1HK2U3QVdoc3dFRjcvL2ZvRi9MYzd4QnNGc0dmMWwrTUZIbTdFS0FyamhY''@;'; put 'put ''UGpLZkV3YW9yUjJDZ2REK1hIYzRPd1Q4Rlg5SUVIZnYvN0p2TFZnVGZQMCs0VCtKUDRDNXkySHRjZDZjdTRRS3F6Q0NHTVRLT2xwK1VveCtNNjFHZFAydjFoMGYvdDRVK09uemt6QnRybjE5LzhKcDJ6dEg0bDJiMytOQXhYeGZyWUlUNUx1eEFCZ1lSTXJUMDhOTXozdFl0a3NKdThBbTNkcksw''@;'; put 'put ''WldsSnBmOW9HUGlBZk5lMzJkeDI0ZG9oODJmSG4zS2VyQjV2aEQ4UUtmQkZDTjJZY3hWalF1RUVSV01GeXJ5alhDanF0Qm53N0I3aG5WUUNzMVJIdEt2TTlxUUZma3RWajZvcko5T2dCdTJjckNPVXFCcWVZWlBNWnA4ZURrQ2ZrQ1hvcllkaVNRTkJ2TndCU2tjc0pXRlVIcG5LT3JBM3NNK1hj''@;'; put 'put ''Q3Q5KzljR3lwZmpVOGZSU3k4anV6c0hPcWNEUi9iWjVjL2RvYXFRN1FheG5EMGt2RG9ZamU3T0ppYnF5b3BheHV1RkdLWjZzNzNjMDFkVEUrWnJIUU41TWd4NnlnWmZ5N0FXTEVUUVFsbGRaRHNSVmxNMUZXRXJrY0JwZEl1Z2k4RlM5QU9UZERFUk5zZzJCTjltbDlTcUhmVHNEQW96cXRXTHVi''@;'; put 'put ''NENaQjAvVlliY2paUGZadlo0U21EYm9tRTJodkRCbEFLc1N3VlBiQjUrN29yUHppdDYycFlwRGh5b1gyOXdqTlRVajBZYmhtcHJoQm1JRkYySDhodjVVZkM5NVJ2cHRMQ1cxUktkVHFhbG9kQ3FWbW81eW1vb0FmVWhBSCtXb01STTNBaDVLVERESlVtQnlJZWN0bGV6c0xia3U2UzI5ZnROSTlz''@;'; put 'put ''Ymhwa09oWG5kM29HRWlHcDJJQm5xS2U4T0htODBqTnc0TjNUQlNHK29zclVoTXh4UFRpVXBQUnpqQzk0L2FFYzI1L2JNSzZ2MmppR1I3dzV3QjlmNVo4dnUzR1lnUnFjakNocHhJbGYyamdJV1hCR1Q3SjcrbDBNeDQyZ2l6ZGY5c0liK1Y3aCtXQ1Q2UEpDdlp0SCtrK1ZERlVsc3YzOFRGeXF2''@;'; put 'put ''WnprWFpMcEpuMXZyM3hsUDlONHlQdjZNL0ZjT1d0YnMyN3grTjJieE93ckIvTHRpVVRLYUQwSTFqaDY1Z3d4QkJRNVp6TTVYbkx4T2RHeXhnZDdtN3JMUUVtanJCajZMekRmQnRVeHRmWGpwSG5laUZLZU9GYVhlbjc1cm1vZXVIK3M4T2pwOXNrNDRaNTN1NjVzMjR5VENhR2EwcXpnUWlBemVN''@;'; put 'put ''ajc1aklQdWUvVDI3OFJYWnJxNHNwVEV2ZkZzazM0Smg5MmFNUlZpbnRXS2tvekVsdWxsbFNLZlRMb0dsVmN5Q0UyaEJnK1ZvSWlncVQ2WVVIQU1kU0ozVnJTL25NOGFnbjUydmlhS0g2d2cvbGRzOEZNYnBVZWY4MXZYWEh4d2ZIMjB2YTNJRzlPVkZya3FpblpJbThPTlRuWjBURG11UDN1VDNV''@;'; put 'put ''RHhHMTZkSUkrQ3hFdFdoYXpPV2lpS2kwK1pqczdLSUJEa0hha05IVnFsaHVDUnFpTXp6REtsMkppSnpJRlE4d2t3cElOb0VCaUt5cWdxaHFycXEybEFBUnF3TUJZTUJLaUt4VmVaMjdyVjE0STNFa3lLcXMzL1MySHZOYU5lcFVMaHNOcnBucVhLeHRmZDRSOGZ4M3RhbENxREgvdjY1dVg2aWxS''@;'; put 'put ''STlxNjJoeWhGUHhXaHZ0ajdlZFhKdzhHUm5NckpIdW1idndNRDgvTUFBUC91amhyQ1Z4U1ZQUG1WakpoUGZHamRpYkFRbU1ZdEZsaWhXc013OWJ1N3NiMzBOYi9JUFdiUkRmZ09NVXNDdFBhdkQ3NkJoQVNyaFlOZmtRSnBWRm5MNDl2bjR3ZDdHVUUvNDBLSGllZGlXNUw1VzZRdTR1WFhZMit5''@;'; put 'put ''Vi9nYWsyVnExTE9zNzRQdVQ1Qi9BanJLZ0FUNXRWeTRvWFV3cHhTcmJxWjZNQSt3NVRBMk5WZFhqZVdvNldBb0x6Q3hTcmQwVXFSYkJDampnOTVjVSsvM0ZpY09IeWI1QWNiRS80QzRPekt6OWtZNi8vdEw2dUR4K0tUcVNNVnBBdHhaaURjbFJ0MVkxRjBGZ3BLczVvQVBNZURTTXVoRUFDSWlk''@;'; put 'put ''UG0xOENUS0ZSZEZMelNVdXB4eEhGN2ZFMFdWSGdKckp1dHhFVDhhTENrcjh4UldIeHpyeUUzN3pQNDM2TWFQZlF3SnJyM2J1WXZzK0NBdWdaNFltdFBRRkEzUFNsSjIzY2cxSTU0UTM3TG1WYXp6MUM5aHRjSFlYMks4YjNzelBYN0JaN2N3aXhOUVlZaW9NWE9tdTc1Nzk5SjVEaDlhdXhSN3Az''@;'; put 'put ''NzQvZFE2MnN3ZnJPUjJpejhGOEJOVE9wMkdpd1F3NUlDSlB3S1NLa1hqWWIwb0FiWDcreVh6UVpPalFJU28ra2JKT29ROTQyMC9sVHluRzJpcU1XRXliTXJXTENoYnRrbDdVQ1ZxdE5hdWhwN1pzV1NCNTRIZjZWZ2R2aVU1WGtuczV6MEkxZnVUelcrMSt1OTloQVBtam9tVGRoZzlKSitkZStF''@;'; put 'put ''NytaanAyc0NQZVBNQytIVDdzR0lzM3o3cHQrOW9VQ205dEdlcE5TYzhwUDRsMktGemZISXMxSXhXZldzRy9IcnRnTlJQT3FIUU5kdVpPYWFrOHNxcTVrTkhVRnY3a1RPaEFkcGo4WmliVWljcU1aUjVzMnEwN2ZMaDRUczJEblEzUzQwU2JEY2NVL1RNS2M5b1U5eWg1eTdpSDY5SnhqOWR2eklM''@;'; put 'put ''cE1IVGpDQmdLekhKb2lPNkt3ai9aY0JpNVlRamV6WURkRUo5T2NBTkNzZjJtd1Bhek10dmg2R2JiajJweUhiZ3Z3UHg1QTR4aXlNNDFQWk1LbTIxREZjemJzTk1VOVAyUDdEVHB2OG5qODl2WmFkUW1tZ0tiU0ZuWFJwc292NjRTbFdHU1ZYUVNzM0tzbTJ5bURUQ1hzRitzbTFYUW4yQy9hTmNt''@;'; put 'put ''c0M1dndNeEwvVnZ0VDNEYjhVbFlsd24xWEREcHFLY3VyOHJLRkNiWU10ejhaTWFBVTZIb3ZGbEs3WUFMSUdXWW1MRTFKWjBLQ2IrODNMUHJtSGo0TVA3SHRwbkpQdW1maVBZd2o3bThqbCtFOFlMVTNuVmdncDNnSGNPd0lQeHlrWmVTelpHWElBb0VhZ1BNM2cycFFpOVlzVFM0VHFaeEYwTEY4''@;'; put 'put ''c3RuR3FLemM1R201bzZsUGNmMnhBL1hSY1lHcXBQdWhrVHpZUHpFakxrNk9OZ1ZyS2lxc3BiMmRBeE1WNVVOeDd4bGptS0h4VnJaSGh1YW8vWVN6SEdSZkFqc3BXZ200c1k2R3VZRnMrNVdxa3ZJQWowMEFDU0FaM2FBbTNMTUJyTDdxQkVVNU82VlZjNHpBb2xMRDdDYTBualIyVlRXUGpvK2Z2''@;'; put 'put ''RDY2eXRkUmVYNkVxdGpvaFBIcHQ3Ly9pbnBWWS9mcE9jNVNLOERQclZNdnRoaFFKS1RMeUJhWkkycGNnZmR5bE5aOE9jOVFDNWZRTVg3V2V4ZlpRWlRSY1ZtWkNVV0tsYWFGU0VEeFBKSEVDa2daUEN3OUJJVk1uaEN6c2toZFVTcjVPUW9rUXpGQnJUYW1NZHQ1NkVYMS9GNzd6bitUd3RnK0p6''@;'; put 'put ''QWQxTUZqY0VxUmtJMXROOGF3N0ZlT29aVHZuek56Vk0zbjExK2ROOE5OKzZESHQrSmI2RmZhMy9FTjBzMzUyTk5OdWliNVlBWlJRM05KNkdkWXd4OUMwUjFLR0N6MlNqMWVNT2kzeDVPdXROSjBZN3ZlOS83VDN6MXVaUHZQbmZpMmE4Ky96eldyMzMrODI5S2I5QitTOVpIU1QzMGE2WFpNQ1k5''@;'; put 'put ''Z1NsVEk0SElYVlBpUEVEbjdtSEVhVVZGTm9jNkxOaUZCYmFLUWl3ZXIzV1YrMHA4NXRMWExudmdrNnMvOGV4dWVkSTFXbVJ6cFlsZU9vby91bmF4TDRQNVdrQjg0dS9CbUR2RWVheVhqdk1rc0UvNkNiNUhlZzBIcEwwaitORDhpSFRQUE91M2VuMHZQa0srQ0ZLck9oTXNZY1lsYUdrODVQTVNt''@;'; put 'put ''dU1HSUxNeVAyTTBZWFZSL1UxRGdHbFFSaWxnc3pCTktIWVhFcWViSHhXS2xNdEViTjVmamVzYlV4RmN2VENoYjJ0MTRsQW9ITVN1bGpiOVBUVURUYmZGNjNycTR1ZlNBOVg2Ym9PN3R2bzlEZW1Dd25UREhkVzF4WVp1R09leTlRdm9DUlkzMmprL0RteUl5NGFIbFZ3MW1uKzVGNit5ZFFCKzlD''@;'; put 'put ''enVRMCtwaG53WUQ3SXVadVhUZTRRbmFPNDJFUjExYnRCcFlaNkJrcVlaSm1rUUR5S1FQOGdvV0E5c1QyMWJpd3VtSGdwaFoydWJmaGRkRkJXdTFmdDNMUnVLYTZ2dmFFZ1hGcVFiM2xOZDZ6WjA2NnNIMHVmWXdtNUw5OWZvYWU1NUM2N0d0K0ZIclNJdVdGK1hmb2tNanlQOHRQUkxsZzNCYzk5''@;'; put 'put ''bjBMZVliTFd3VXlzNlFhcVFtVkhPY3AzczlMeG9vL0hMREV1ZWFBaTJUZkpCT1htZzVVd0ptRkJLdnNCYVAzNU44VDh2WUltTUFTOTRLV1lxeWt0TDNDNkh2YWhBUzh6OGZBcEduWmJUN2tIY2w3SWNPcDQxem1QWE5GK2NiaXJvVG5BL0ErQWpnMnJCUDV5S1RuVWNibTA1MGpIVnNOdmJHMmh0''@;'; put 'put ''Qy9WS2QvYzBOdllFYTdXWlB2UFlWVjFkVjQ0VjlIUnFxNzJkdFNicEwweVJqcHNQMlBHQzdXQWJ6NEZFWkF4c3lUTFVtOG5BVHRGa0lpVFNYR1FSRDJzeEFhRXFFblljd3Z3em1sVWtpdHk1Unp6cHE4eHFEd1pBczFEakx1ajBwdElzZTFNZDdOQ1ZZNXA2UnNiV2ZqcVV5YlNzWkFhdTh3d1dU''@;'; put 'put ''TVNiaDU1N2JtNnVvZmFod1hOOWw3ZkxwMnkzREQ2a2pzMjZVRXVteVlHUkFZK0FpeWt5dDJSRmh3bVlUV0RHTFJ0WmpRRFBlWE01N1RhbEJxRElSS3NBV0htRlUwa29oUy9HOFBqUmU3N3lsYThjaGE5N1dEUVhEdzVtQjArY2dHLzRLQTNwc3YzcUlwUDRhdkljeTk5SnNDaGltQ2F0QXYyeXdQ''@;'; put 'put ''NlNWcUNJd2hQYlpQRFFBS1BhKzBpb1BpOVdWcnBkVlpYdXg5alBLaGVacEQrOVR2cU0vd1I2clVGSi9IL3czeFg1Y0owV0ZRbTREcjBxeHpYSDhTM2tycmNURTZWNU9GMjRSM3FlM05YOWRtT2lidEYvNGVBSGhzZ3JEbGx1QjlhL0FYN1BvN0RUL2d6NDRhRHBFTG1KcXRWM1VTM0d3dHJzV0NQ''@;'; put 'put ''RXRBSld6Qjk2bUV2UE53b0hMbXR0WHM3ZzhyR3pZemdRbjI5dDNadFlxeUlmWFRzS2ZYZWlWOUNYUUhXWjZKbWlTakFRS2pJbVZNbTBUU3JzSFFvRVNrdmg2eFg0NGZmRFJ6bmV1OTZKMXFGQk1UckQxbVlCZTBWak41QjhWTUpNb3hKZzNJT3ExcHlrU1VRZ3RGZnpVdlVBTzMwQkM1Q0JBR0hk''@;'; put 'put ''dEJNTTE5bkZ5RzBQQkFKVVoxUE1zUVFORm81UTVUelNXcE5YcTFzakpUR3JzOXp2OEFCdFdteFY3Y1g2U0tnODJGQlVFSFU3TElVMm8yMHN6ZXBqWXJEbnYyTjdIdEhSUFkrZzd6RTZESytQNEg5bHNzbUxXalBwU3FmRHJDSDg2STBnT2xGR2pGeFlnZVk1Z0dSMTU2MHFkdG10T1pwRWFuSEZV''@;'; put 'put ''M0VTYWJkT01WbEJ0dUNrTE1GaW0vT2k4dUpNdW1welpoU2JPenRMRW00cTh0RnFIcXVJZXRHZm9jOGgvZU1FUC9ZNUptUzNnVG1HSFR2QW5GVmdzSWdlM0FIbThoeE1BZnJvRGpDcnViRlcwTDBjaG15R2VUblhqd2w5Y3lNTXp4TVNYZ01aWkFGVGZ6RFRaNlh5aDJsNmNNSkI4dENzTkwxbTJR''@;'; put 'put ''QUNVYmNBZHFaOHhxUGwxaEp6NVd4Rk5taHRrWVdTQ1NRa1ZqSkhValNaQ0t3Q2NGR3lTZ2FKdExibkRMNlRORXZpdDNrcXlWMTNrZk9MMG9meE1la2pMUGVqaytYcXBEREpsTmJXQ0VRajZpcUFOTXV4QnBmWmdHNnRtQWhhbWR6cjZkR3NnRS9DTjZRNW9RUVBaZmt0TzJ1ZzNRN0FuRDJFUmcy''@;'; put 'put ''b0FkdEFHeUdzdWVsdHQ2cWs5VUFiV2drM3ZHV3pUR1J6QzVyWFI0NXMxNURIL1drY0lZVWFnN1hBZGw0blZUVThCbXZCc21qWXpIM2JudmNtOGN1TGdjR0c2M29LOVpXYldkTTljL2ZNNW95bHlVaTRMOXFzOFc3azJHYmprVS9NYmN4Z1FveW1XTDRQby9GcW1RL2V5V2dLcTJoek04d3g5UGdP''@;'; put 'put ''TUdjVkdPQ0RhM2VBV2MzMXM0Sk9jcGc4amE5ZnBEa3piS3dJbjgvNis3YjBBNklDSjFRd3g1Qm5NOHo2cndIR3h1WVQ0Zk5aUDc4RjV0OEJwb1ROaC9lenN2N1pqZk1CZnFxRmI5OW5PUVRsTkx0OG8zV3hvR2RuREFhVmVXR3h3STl5U3htcjhYTkNzd0xRTmNaOEhJRTVURW1yRWtNQTNrcUtv''@;'; put 'put ''UER4MTNueTE4REFyNlo1K3RleitKbGNDaGh1V01UK3RVZDRJdGlMaS84QU9HRDVMVXlteEdXWmN1OFdQTEdjRFlhbmhMeTNuOWtpZHpiREhNT3hIV0RPS2pDd3QxL2RBZWJ5SEV3QmVuSUhtTlhjV0N2b3VVM3lpK1pNM1lGZkpRNVFBcm9uZEFqSDZvSmg0SXh3bXVac3V2R0h6NzA3Yys2Mjd0''@;'; put 'put ''dk9kYjc3M0IzbjN0M0pQbWZlZlE2eGVqVWxSNFZXdWRhamM3Si82OElhVWxkYlhsWmkxdEdVYktRVlJqenNxYUI2aXVIcFBHOVF6SUlwOUxqZWxkVnRPRUVFZzBKOXBPVGlSNEk2OVhGZnBoQ1l2VDRRQ2RuRGRsWnhvV1J4aDhBOVRLc3lVSk1pY3JreEQ0MGpYdTZGWFVueTFlVEIrNWJTcTVH''@;'; put 'put ''R0kvTU5qY0RhVFVjajlVZm1KRlJaaGtlN3NzRGhPSE82djZKTWVpS1RKY1UzOUMzZGY5QlhtVnFKMzlnSHZPMnRiRnlSZmp6dHd6ZFREcGYrTUhUZFFNTzBYN3E1bnVLZTVXbXdmVzZXYWVIUkxmU3lHZVlZK3ZFT01HY1ZHS0NGeis0QXM1cnJad1Y5YWpPZmMxdVpqZFV1ai9YY3huNDI1ZTgw''@;'; put 'put ''Wk9xQU9yUWFyRjNXWWZuNEsxZUVDWnJMNG5KWTNFVnVhOGhiSlBLc2dxUXEyeW1ZeTNaYWVXWkx0dE9abHRWTTkwckw5ZDhiYUcvdmw5WnlzU3ZpSlY4RFNUWC9sQkhzZGhvdXFRZnFxQUFkQUVwTW9NZEUrWFJUdktERGN0aTZURTVxWE0wQnFsN1BaNHoyZ0RmZ3JmT3pZNjFjakZSVXBwcFNj''@;'; put 'put ''bzFTaWw2Z2NlYXhsaU9aek9IbWcrMDBXM1ozZTh2d2NFdDdKTm5iMDVqc1hTYm1wdWxvZExycFdMcGlYM1BUZEd5ZTVzbk9kRWFpN1oxeG1qTUt1T1o1QXE4QXJ2dEF2eFBVdTRpMmVTN0FIbnhBOWZ5aUFvL0ZXVFg4QzdubkJRUHE1OC9sK2wrWlVEMFhLblB3cGhzNW44Sno0VU5nSDBaUUVt''@;'; put 'put ''VndONi9wTFNzRExIczlZSTA0c1ZIZmpIVkdBeUdpam5wMnVoRzVpSGRIR0JPRnliODJiUE42ZnA2UEV3SENvbFdHcTBpUGRLSmV0MXhnSUVwR2ZrbTIwR1FXcUJiUEp3M1FjWnN1MmNhTWN5MnloZGhrVWdtTXpPYUdLTitNRmc2L1pSZGdSbFExTnRiWEk5U1lhZXhxYTZsUDFpZGlVY0JjblQz''@;'; put 'put ''Z0R3UURRVXZPckZEUzNMZGtZUER6aVUwSHZpQnpPbkR1dlBGbGZ2cWJPUm4wWHRtN2RFS1ZuakhYdlZBU1dHM2JmQ0lzZmFBM1RMTTJlbHI0MlhCTEl0RXlONVpQMjRqWFJ4S3FrMkxwRG4rYlArQm9xcW1Oc2J5RVRwYVhrRUlQWmNxRFdLdHBEQkdkTmxWS2tLNEVDNmk0RURhNEFMeG1uV3dX''@;'; put 'put ''Qm1oNUFBRmpRUWNjcFdPc3gwcmRlTkxGQVpEQ0hxellkVUVLQzNBM1hSbzQ0OXNDeHdyZ2orVEF0UlQzeGhDejNoaTNCblIvb3VGR0V5WHdEK2JpbHEyR1czSDM4YTd0c2ljQ2Rac050eGJEMk9tZUxka1VuTDk0ZmdEbDN5SE8xOHZiUGFkOC9SSFY4NHNLUEJZWDFmRFA1ZnBabVdIUDE3L0d6''@;'; put 'put ''dXhvUDkvZy9kL080V2xRTEtKNmZzeko0WDhHejgycy8yL3cvaC9rejM4TXorMnNmdzYvY2krUEw5R2FxVTd5VFZRR1Z0YmVqTDJJMVFiS2xwUERialBpb2V4anBmUVlUd25lV3pka2w5SkRYd3lhQUpOVjlXTndkOHZMeTJ2TGF3SytVSkRtMnlzcVdORys3aEExS1VMY3BpQnk4cW1PMjlvL24r''@;'; put 'put ''NDVreDA5Mjl0MnJPZEFiM2pmbWZMSnFvYWwvZ01WUFFWejFjT3hnWGw2OUdINTFOS2VXNFo3ejQ0T1hkVTFQanJSMkJzb3JneW42M3JMMTM2MmxJMk8xaThPeDhjakZFLzhUSS9LeTBrdUwvZm04VDNLOExlYjQvWDBkcy9wdmoyZ2VuNVJnY2ZpRldyNEYzTFBDL2FybnorWDYzOWxtY3ZkYm5S''@;'; put 'put ''RXJtdTJnTVhjbGdIdHJGUE96QkVMVFNFTmtQOHNrTDkyU1FTKzFFNHdqOUJUVkFyYVZZa2s2cWxycmo1R0I4ZFFYYU9FcmNHZ3B5UVFLUGtGcmFYNmx2d0wvbEtvdENRWUxDa05kYzAvcjN5RU9TbG5qRzVVaFdweU5wc0RiTFl3UUxsTllKM3BGWnNObmdxcXA5dmFiQ1hiMld6cUE3THRiRGF2''@;'; put 'put ''MTF2anJRN2F3cllOTnB2YVpLTVdtOFp0NXdhYml4cHNZUUVFWnpnNGN1UFFaRS9aL2g1ZkNCaDZvcjlzZnk4SXU1L1V4S0s3b3Y4OEVmWENKL3pCL1ltaEcwY2lWV09oaFNTd2NyMTMvTGR4YlBJQU4zOFIyTGs5S3IzaFlmdkd6MmpvL3M5eHVqaUl0bmxPNmVKRHF1Y1hGWGdzN2xYRFA1ZnJa''@;'; put 'put ''MlUzZjg3UEhtZy8rK1YrN2xhZHEvS2NyQS9uejFXM1RaZmJlcmE2UTdyY3RvZXcyNytXTStmb0llemJQSVcxL3M5UFlZWFZyZWx5T2R3OEorTUdjRGFKVkRHWGxseGM1aWo2MkJhL2h0cy9kK1hzbjZPRGFMdVlEamFnKzNab203T2RzR0dTeThiUzlUMkNGMnhmTi9UU2tXa3R3VUI5V0lmSmlC''@;'; put 'put ''NU1idGhxc3NMS2ZlaTlNMERQU2xtZEhZMFdGeGVYRnBjR2FPekc0YVZCQnkyUG9hWDlZVjRLeGxWK0ltMGlndGVmaUhlNEM5cHpkV0hGRmVVbFpSYnB6anZ2cW1oTkJNdDRpVmlGdTloanhaMnNVRXpPTzkxRGVvQm42VTFDVDNNR0xQT0E2VldLaWVDQXFkVkg5SUplRkRIVzE4Q1VtV1cyM1d1''@;'; put 'put ''dC9Gcm00UnJvV2RRVGNWV3BaQzhCeDFxdjU1RkN0M3FKbmt6OVZsaFEzQmE1QWRvRVA1K3gxdGJXcG1vYlF3RTdHRTFocjFFc3k2RWx0WVBONUxRcWlBcXBNbGhKRDBWWnlaWWsxcFdyT2VwK3F5U3pVZ1NHeS9vM0pyUFMvRmFHelkvbGsxcGx2L2h1NWd1RlpGL281MXQ4S3A3TFNYbDNRT2Jk''@;'; put 'put ''RDZyYW5sWGFZajE2YkllMkYrVzJCT3ZuT0gyeTJqWFdOaXkzUGIydHovNWI4Z3pBRERJWWk5QUJKcmtCWUo0V01BVUNHRGxHQXBUL3pseU81N1VnVDByaHpXc1hiQnBpMEN1bnpTR3FWakFTdEdnWk5nZ2tpMTR2NTlEUlV4RitNUVZQQ0tMU3AzWkhhQ2JGYVJNbTFkMUVFVU1iV3hSZXNzVUc0''@;'; put 'put ''RHljVGlmbjhhcUJhVHpQNXZGNGFqMDFZWG9pSC9MTHh6WCtMV21neWtVZ2FITTJ4YldaRGVrVTk5OS9LQ1A5VXAxVDBiLzJqQ29uOUdPdDdlMXJYOStRVlpHTG9iWGtZbWhINGY5dDlodnN1YnR5OXR6UmNiUmQvQTBiMFhkMmFLdllnZ0xBZkpIWHlBSFA5N0U3RmdZemZVV2dpSzJBTzM2R1RM''@;'; put 'put ''UDdLZU9KQzBnVTVZQXlGZktXTERNa2dESHRXdVhZemVHblZUWld5b0JLUGFKZjRUTzN6SkdxQXNWaHpsVVZURTVKVHlqVmlveUhtcG1JNGpXRzlLeHloZVhLaGxBOWVtZkdScjJLRUNaYXNCMklBV3dCbWdsZkJ2UlJEZWErUnF2VExOTmdyYkxqOHUwNExHT0dTUSttcllJS0tGcy9QcnhkQzVx''@;'; put 'put ''b1doUU9oK3ZERVpmUEhtcjBCMW1ZVjl5MEl0Mld0RnZxR3lBNTlmYkgyY0xjSW5XNmdvMHB1TlhnbVVtL2tiMnVVbmVoc25LYkZhdnljY0VIdzJkNFN1NDJzVmo5TnJIWXpiNkFYdllGV0swbW81RmFXV2Q5ZVV0Ym5rOUxhV1NFNjZ4VGNsdnBaN1RPazdjRjJyR1FVc1R2ZndCNHdZOEtVUU5x''@;'; put 'put ''UmZka0hQV1ZSQzhxNVFvQ3ZRNEVEWEg1VUdlaVJ4U0NYck5xd1BsNlhsSFVMb0VicmRYeTArMGxmcnJ0b1pkNmJZVTJZcDNPeXR1Z1RTM0FtWTVHYVlRMjJocHRTU1V0RFphR3VocS90NnpVYWFlUjJtS3pZdHJTKzZpNE5lditFOUoyY1dWVlZkZ2ZNRGdycTF6Ly9aWVp2Sk4xdnJLMmhwSmdU''@;'; put 'put ''YVhMVlRYNnR0SjV3WmQ2RFlpeGl2RS9qMWtmWGYvVWxyajI5d0NtbFBFLzk3ZU9mb3pIdE9McmU5RHJ3TU1PbnVkQXNJUG5nU2hYZWZBY0lLNHpBMTZYbDVYTHlDZHdhVm9rcVhEcTY1UlVMZVpsSFdkUHF1c2NnUUx5a0d3cjBOelpkUmpyQlhZVzdhVzU2MDRIMFFoZUpqSjBxbzJWVFhOTGpx''@;'; put 'put ''Tlkwa0pWUldteDIyVXAyRFl2MXE1TXlLMmUwU0g1akhxWXpxekNiVDhjNTFQTG4xV3ZWY0VzeTJNbUhYNTk3WS95TklGbWFmbk5VL2t6QUpCM3hrMXhTSlpqQ242d05sZkhhOTFTeHp0NCtEQk5jb0wrWm9BSFBnUzYwQWUwem5nQS95djNtZUY1QmVPTmNmbjVwOWx6Vmp2TGRIOVUxdjNXTGZ3''@;'; put 'put ''R0hJcnJoZmNBeklRTTQwSVhPTXdGQlliWDRENmo5QVA5UDh6ME5GYnBhZHJQWVFZekljT2Mzd2pEOC9sSkw5QklBYzM0Tkp1TUJuQzFCRDFScXBFM0ZmWVdvQUpucnJCWFRGRWlTVHRGSittVkduYnRXcm4xMXNWRnNBRVhhdkNJOVBQZWhkNGZ5dlVDWHBhWG5NMFVtSXlpam1wZ2ZUNHYzUVFm''@;'; put 'put ''aStSNnZseGFjTDdFejhOK1V3NWI1dWVmZExMN3N6RE5DNVRIeDk3SlEyTmpoeWJ4d1JycEphd0xMNFR4blBTRG10eVp5VTNLbVFuZzhSZmI0UnA4OWxka241M2FXZmR6V3duMjcyRzJyM0ZadHZIWTZoQTh0eEtyQWc4NGZTRm5XejNNWkhCY2xzR2YzMkdzaTduNGdQNDRVcDJUdE9UT1NZNmlw''@;'; put 'put ''N2JZWmR4dnZpdm40eDlkUU51ZDUrREN6V2NzY3R1cGZQd0JGMTRtNTZHQ3NINFY5dDZHeXVtNWZlNTJBVDNKWFM5Z29LWFVTcTRZODlUSzdXVXVCOHNyNVlxOUpIOWNuRXV1Y0dKcjNnenE0NnA5N2ZrRDl4ODhkUDhTNlpIRVlYcDBlYnFQSy9lNWp5OHUzYnUwS0pueGZ3MmNIUmk0a3Q5RkNI''@;'; put 'put ''TVcvaDMwTzExWEM1cktUTHF4WG1jZ3RBQ1poUWVBaGpSYXZXYlpiQ0E2blJJS01JbEdRUlVNU0NiOWZvU1NMY25tcHBRLzRZL1gxVUIzWG5zZ0ZBZ1d3THczaGxIek1sNmx0aldiYkRwWmhRdGxQSDdhZXpvWVBOTXp6TktiZTA0SEF5ZTdGVFV1WGFQS2M4YlhicWlyNld4S2RmSE01NDdHVkR2''@;'; put 'put ''VDUwU2QvSXl2cEpwZDF1dkgyZDZtWlByOTRoYTY0RG0zZEcrbmVXd3VLOXQrUUtmSEdmMm1aRHE5eU9HbG45RWNYUm1lUG8vbWJJampqSDVUTXYzZXZPMVlaeGo5VG5QNnRmR3hXTzB6bTJlVFBNK1BiS0Y5bnF0TDV6bkQ1M2tFeVhYVG5heHV1Z3Y5ZDhZVmo1V1hhWFQ2RXF6QnhZVkUwQlNB''@;'; put 'put ''dWFEWlBsY0F6TThsMFBrdTd2ZHA4ZFpUZjlzMnVRSnYzV3JiWElHM2FyWmpyc0EyRFhtdWdEa1k4ZFAwSEsvVkFGN0ZKVUxOb2JkUkhrN2FycjFpbTZDeiszMnJseW9aUDM1U3R6bjJiRHgweVJKeWViOVl6blVIV2dmakNvdTZXQVhSaXVYQWs2VzA0RkM5YzZLOGM1R05PeWVLdWlWRUt6QlFQ''@;'; put 'put ''aUswSmNtamZ0UEd2V1dqeWkyN0RidndGcTNZRWVOMjI3YTFIZDgxVTZDMm1tMmFIdnlaUzUwUDRMZktMTWN2SGh6ZkxzRWp2aFRlTWQxODE0eDJjNWFITmx5NWMvNjVpamZQS3J3SmZMMjRBMjllVkhnVDYrczRiOVlBYjlLN0FxclFGek1XTnhhUXl3ekt3RVR2SXBTM0ZnQTE3S1NHbm55U0cy''@;'; put 'put ''aVFUMDR6TXVnSnMvTzJITmhFYUJNTlBZaDVPMjB5Tlp2QTVXT2JMYTAwTkpZSUpoNU10b282N0hTYnFOZnBGWGZZSStySTB6c084RDc3MW4zd09PbTlCNXV5NEhweTF5Q3d2UDVPbHRmZmdMNldLYTdCZXFIV1NReDZCeWFHWEZLZk5rZi9XbzMyVmlPR2lXTERTVkJjZ0dGYVV5Z0ltZ1Vkcnl6''@;'; put 'put ''a3VYdklneFFzMWVmYjZBM2twcmRxbEtuZEhwNmxCcUlqcW1ZQ3hST1YydzJvbmhVYnVBRlROTEtoMllHU3R4WWd1Q25oNC9nVzJrMjA1MnNTQW1YVlJadXpDSnYxbzJsMW1VS2YyeGhnOU1mdXBHQTBtcFpwOUlvdE5Pb0ZHMFpndHV3c3QyWEp4Qlo3bCtjaHRPVHlFSTV1bzRkNHJQeXVYS3o4''@;'; put 'put ''NkFoUzVUQzhuTXR6TUtHLzM1TER3TnF5ODIwV2x3ZVltN2ZMb3dBYjdCUGJ0bTNQeC9weDRXNGszNmV4aDkybkVhRG5NMDRRUndXd3JZVkE0c3hObHROUDhuSDF2Tk1FTFFLQlluL1F3ZThuWXRrRW04SVFtNjdmSVBlTTNqYXR0K1ZpRDQ0ajE4bjNjSkR6N05ZTlM2a2NiUEI1M1BlY1ZGL0t3''@;'; put 'put ''ZWM2QUhPZEE3L0lqMjdpVXRwU3JJZE5FVEVXL0ZpSDZabE5FWHZpWjVGcjRGRThMQWQ3eStSS0YxcFpzazE4dDBwK1RXTzZ1ZXFUalNGZFk0Q1d1SVc5b2lyRXZiVVNKWm1MNHBJNUZrUlMxNlVjenJ1dndiTE5CU3FLa3doN3hlNEtZZlRZeW5OZThOZ1dPdUsxS0ZSbTdtVzBJS0x2cVBKY3pp''@;'; put 'put ''cDVMdkQ4M1Z2YThyT0hpOHJaQXhibmthcnRhaTVIWmdYZHNJV08yQjBlak5ZNlpGdHJTNTZiWFA5QmFXMkIyMXJ5ZVNOdnU2cTBCZC8zMnp1MGZVNXVTK09CSDFhMVBadHJxMGRuZDJoN1VSa1g2OXNZM2JDNld1cFBGOUk0Qk0xSXB6VTdMQTdCQ21ESUFXcTlleGhSRjZJQ2UwQzU3a3BWRG12''@;'; put 'put ''SWw4Ritma3Z0SzgwYlAwd3V2czI3UE56MExvL1B6SzcyajQvMWtZdDM3dDY5ZlIrNStpU0NiZ1dlT3kxWEo4bDlwSk9pdjZ0dmJMeC9kWlpjM0wzN1RybVBFWHdGZVE3MlVjN0dOeEthano5aUFCVTV0RjMrZUFFeUI0VmNOcjRjY21KT3ljUGpsWTJPVkdscHl0RllNVkZMUnFvcVVnNlh5NUdx''@;'; put 'put ''cUdMalRLS0hXS3dseE1hNVpHNzY1a3gvSmJzL0h5bVJhd2xHc0VPb1pMVUV6YXhYZW04T3phWmYxV0lCT0h3MlZ3UXF2SzJLQXZYOTlUZDFkVVVpblowUmVvRTYvU0lqL1BkSVY0SS9jUHQ0anZ3ZVFMb2JXVkVybTBHMEVCWmpvZFF5b21XVkFPeFdHTURwTEpPRUFuMHp3YXVtQWk2TlhGVWcz''@;'; put 'put ''OE91Q2pMZjBGSGg3czhGbGg5aFVTRzNIRkxtZDdtVGRudzdlUUZHN21IanBwM1FzNEZWYVRrd0h0SmpZWkFlbUpOWnFrNkJmbGVWS3pTSU1NR01ReGZvVUsxTUhJaWFmTW9WeS9TR2RLNHkvYmpBVjJ4MW0reHViYnBvMnNrKzI5eTZ0R1dHZE5xc0JRVVZYc003K0UvOURYdy91dkIvc0ZvSUVa''@;'; put 'put ''WHlpZ0V0SUdlSXVyYW43YlpjRFlWYjlBZmxvZ2ljUGZDQlFmS0s0NVlQT2Q3SitLNVgrdG42ayt0ZkFxWUtzQjVLK0Yza0crdTBBcm0reEkyWGtsL2dnVTFQVlZWNG5RY3RXUUF6Sng5dlV1UWo2c1YxTzhqSFZ4VDVpSHJSNHdodDAvWVlmdm90Mng3RFhhcTJxN20ySzdoL2kzemtiWi9MdFYx''@;'; put 'put ''QlgrZis3Zm9nUGM5UW40VzgrVHR1UDd6NU85bCtpQUJNbVBuR1F6TE0wd3lHcUdCNHJQM3lYRDhGUUEzYng5cGZ5TVhhQzhiUXRqbVF2ZWk5TytpR1YzTG4wcjBIdU81dFJQOUdUTGpqcmUrQmYxV3F3UjF6U2h1aC9XMjBFZlJ2L2w1cDA0MC9neTZTendMTmxERjZHZHBjRU1mcHhhN0V5M2xz''@;'; put 'put ''OW9YOEJmYms5ZzAzMkRQYkIzOFdmWnM4Q0N1MkFBWml2TGFOeEhLMWJUQW0vbXMyWmptOTBhbThFT2g4UXlHVHdJUmFvRGhnWXpkSWJSeGJ1K05Vc0c2SGFWV3BQdlA1NFVmSWcwVmhQajgyejMrR2VkcHk4NlJrb2t5WVl2Rmh2QXZXWk5tcExvald4Yk82b0UxMThZKzMrbnp3cjRYK2V4Zytl''@;'; put 'put ''ZW52WHZqQThkUUxkUE5PZEIzc1BUZ3lSWDc0L3MrTWhxM0FJd2prUUdUOWQ1b3pxcitQMGdYVU9JdCt5Zk1jNHhhc0xlUi92a1NQZFdac05PbU02ajk1WWkrd0NTYVRzR1ExRklrYTlWOUtTYjFGUS9aWFQzaHJrYllXNUwrWDBySnR1MjMrWXNxV3R1Q0JOSTJPWmpMS1gwNFpuUjJkMmIwcms4''@;'; put 'put ''Mk1EUFRGdW1LZHpVM2IvaFVWeC8vZ3I2aFViZm85b0lLdGF2cVQvOElLSHNrcXY0eEVwZlBLMzF2NUsvb2g4YWY4NFpYODU0bUczQjloeWY4eEZneldmUktYNEwrak4rWThBUVp6cks0THV3RjNnZnQyMzMzMzdqZGZ0RDl4d2NGcldRR3VRb0VUR0Z3NDdSWnJQL2pCM1ovKzlPQ0ZKK3d2dnN4''@;'; put 'put ''MHdTL2tPM1NqYUNJeld1WWhHbnJIZ0lsWjZScFFjT0JiTHhzd01XSnNvclVPdVJvWE0wdE81UkVRK0I1RkRaRzYyaHFyTFFqT29OVWVMS0RCcTl4RlEySHdGRm5tU1NyWlNmS1ZsVFJoREpEczlyS1FLaXR2U2R3Nk5QYWVGZmZNSU5FTTd5OVp2bTFFTG1rWnVOYUxLNldYWUNHdDB2Y3Jic3BP''@;'; put 'put ''c210M3U2OGU3Qzh1QUNYZWUxazdLMmdaNitvdks3SGIrZ2RtWlpubEpRNThQY2c1M1JPRTFoRFljN2Q3WDAvdjlXYUdESmd5QWtoZHI5VkxoTFUxK3BYTFhXaVI3MkxRUDFWaUw5Q1MyRFozUFcyOUs2SGw4Q1h1U3ZqajNoMnZTcEJqOWkxVXh1T1lmT2J3K1Z3c3Y0WHFMdlpjZGM3S25sL01Q''@;'; put 'put ''UmV2UTl2Qm81V3IxTS96L2ZmS2ZpcC9mbGNPL3VneDVUNktQZVJkZ0FNdmlnTU9xbjAyRERqWTdHTXBpTWg3V0lITktIa1g4N2pVYUpFOXJuV2tRZzkzdjlRSWtsMnZlemZuUHJENVVuK2Jyd1A4N1UrcDF2RkNEaDhGUjNNNS9PZzh1M05Hb1lPazFUK20zQjZEYWQ0YnZOZHVmYTlkbTBEL0Q1''@;'; put 'put ''RDhFaUlBQUFBQUFRQUFBQUVBQUE4Q0creGZEenoxQUI4RDZBQUFBQURUd1oyR0FBQUFBTlMrcE92L1EvN29CSFVEeVFBQUFBZ0FBZ0FBQUFBQUFIamFZMkJrWUdBKytlOEtBd1BMb3YvTy95dFlTaG1BSXNpQTBSQUFwZklHcXdBQUFIamFkWlEvYUpOUkZNWFB2VjhHUlJ5c1dGRnNhekhXSmtT''@;'; put 'put ''YTF0aHF3Y1kweFZTVFNGdHJnMElYY1ZBUnNhQ3A0dUpTc1E0dTR1UmtFRjBzNnVSVy93emk0SzZUT0VsVVdtZ29XQXIxODl4bklqR0pDWWNmZWZuZWUvZWVkNzRueTVnRVA1S2xXcWtkeU1ockRHa0JRYjJJRGkrTWlEN0VicXhnU0M2aG53ckxmZXpYY1NTa0NVZGtDakZaajZRODh4ZjBKWG9s''@;'; put 'put ''ajJiKzE2V2oyS1hUMUNTNk5ZOWVQWVUrUGN2eFBQcmM4NXlyR1k1eEhmS1lyR0tyTjhXOVN0aXV6NUhUT1VSMWxieUd0SjZuaXZ6OUVXbXNJYU90Mk1LYUpuUWZCcjNUeUhrZUZlTC9zMGc3M3VQenJGMnZJNlFMR0xFMUF3ZlFwdlBVRTJ6VVc2enpDbzZ6NWhXeVM3NmhSMGY4WHpLQnVCN0dY''@;'; put 'put ''cDFCVm5leWxobXVOWWFJbkVPNzNtVHRPUXhqQ1lldzVML1hUcVJRd3JCM0J5a2JaNTBSTjQ5elpCWlpLYUZEYm5CZWpuMG0wT3dOb1VVajdHMGMyM1FkZXVRdU9xVUZGOGl3dk1KQjg5M3RPWTJZMVNndldFc2JRanlMdUt2ck5vTDRpUUVaY09OUityWEhlZFZBZ1NiUy9EUHZxb1ExLzRQNVJ5''@;'; put 'put ''NVNYNzNOQ0ZlOHE1VUdrWEUwLzZwbC90Rm5ubG5XZWRWQTNqeHB2WXo5Sy9yMmp2Nmx5Q0wxUmEveS9DdmUxY3B5WVRUL3FtWCttYzlHNjlmMnJLWDFidnRYYURuaXVWaS8rcURzeTVqYnB6RXRhM2JlWmRLcno2ejNFNzNySm4zeXFQWGhNc2djV0E0dEMzOTVCdTB5aUhiejF2cXJZOGpWRUtr''@;'; put 'put ''d3NBSFJ3Q2J1eTl4YWR1cklMRnVlNnNoOHU0eFZhT2RqSHYySDlnNjRITm9abW4vbGQ4SHlXRXZMdUJTWVBkTlR4UEdkUEVFbHFEZm8xekRINENjcmE5YXl6dFB5bnJJTWVNVS85dzFXcWNlQXhoSHpMdk1lYVNyZktZdmtJdmtJSi9VdDd3cmVTNEVDMzhNa2dsUlk1L3dmTGg4ZTUvSmNHM3l6''@;'; put 'put ''eVA0R2o1Znd0QUI0MmtYQ1hVZ2FjUUFBY0x1dU03OHVNenZQMjNtZmVwOTVudi96N2tFaVFpSkNJcUluaWVIRGlCZ3hZc1NJaUlneHhoNUdSRVFQRVNJUnNZYzlEQW1KRVNFajloQWpJa1JpakpBaEVoSWlNVWFJak5qTFlQeCtOcHR0OForODdXT1hyU3NMVWRBMlZJVEswSDMzWHZkWmR3T0c0''@;'; put 'put ''REE4REwrRkQrRmF6MmpQVWs4SllaQVVVclJqOWhuN25IM1ZucmNYZStIZXVzUHZXSEFVSEEwbjdrdzV0NTBsWjhXRnVJQnJ4clhtT25EZHVjUHVkZmVweCt2UlBmT2VEYytKcDRHaWFCSjlpaTZoTytneFdrRmJmYy83SHIwVDNtcS8zdi9HWi9ObGZYbmZuNEd4Z1pjREZUL2xuL2VYQjBjR2x3''@;'; put 'put ''ZlBNUmlid2hheEhIWWVnQUphWUNXd0hiZ0pOSEVLWDhDUDhZZGdJamdhekFaWGdoK0NGNFJHSklrTklrOFVpRE9pUXR3UzdTZWpwSmZreUFRNVRtYklCWEtOM0NUM3lTYjVHUEtHdUZBaU5CN0toSllwbU1Jb2lVcFNrMVNXeXRFUWpkSUVMZENBSHFIVFRKcHBNUjBXWVgwc3hTcXN4YWJZS2Ji''@;'; put 'put ''RWZtT3YyUnJiWWpzY3drMXoxMXlOYTNFZEh1RjkvQTYvengveEpmNkt2d2tyNFhLNEhyNlBRQkUwd2tSQUpCbHBSRG9DSXVCQ1dIZ2xkRVMzaUl1S2FJa3BzU0YySkVRYWxyYWtBK216OUZXNmttclNieG1SY1hsQ2ZpZnZ5b2R5UVQ2VkwrVWZjbE51SzA0RlUrYVVXNld0d3FwWEpWVk5UYXFU''@;'; put 'put ''YW1aSWovWkdpYWdRTFdxejJndHRYZHZTY3RvbjdVUzcwTDdIdE5oQnJCajdFaXZIcXJGN0hkSlJuZEdIOUJFOXJhL3FPYjJrLzRxVDhXeDhMMTRIQ0FCZ0RFeURaMkFSdkFZYklBOEs0QXhjZ3ArZytaK0JHSXlSTm1hTlBlUElxQm90bzVXb0o5cW0yMXcxMzV1N1p0bXNtbmZtZ3dWWnFFVlk4''@;'; put 'put ''OWFTdFc1dFd2bS9hbXpBVFFBQUFRQUFBVHdBWWdBS0FEOEFCQUFDQUNnQU9RQ0xBQUFBa0FGQkFBTUFBWGphaFpMTlRzSkFGSVZQQ3hxSWhLQXhMcnBxWExpVHZ5Z1lYR3JjQ0dva2xwMEpTQVZpc2RBV0UxL0ZOekR4UWZ4NUFqYytnMHVYbmc2M0NBWWxrMmErbVh2dXVUTzNBMkFOSDRoQml5''@;'; put 'put ''Y0JIUEliczRaTnJzYXNJNDFyNFJqMkVBakhVY1NUOEJLTWljOHljNytFRXlocWhuQVNobFlWWHNHT0ZubW1ZR2tQd2htc2E1L0NxMGpwY2VGbmJPZ1o0UmZrOVMzaFZ5UjBTL2dOYWYxeXpPOHhHTHFEQTdnWTRCNGVldWlneTVPYmVPUlhSQjRGbEVndFJrM3F1a3Jqayt1Yys4enltWHVMTEdx''@;'; put 'put ''d21lY3BKeGVPcU1MZE5ubEU3VG01UTNMUXBLN0FuTHdhKzdqQU1SbzRJYzF6Mlo1eFdWekgvRlhKNHNxanFxZE9hazVWWGx6TjRueEZqVXRWMklGVE90aFQ5WnJrTThiRFdKVnorNThlaFgwTnVLb2d4M0UzNCt3cTMvN0VOY3VZeTNXVTQwdFdoOUdBdXlQK2tVaVQ0eHpWN0t0Ny90VE16YjNq''@;'; put 'put ''WDN2UnJSdmtGdDl5NkJCTU9sYVQvaDJwcU1sUlVyRXl6MVpndklKZHZwam8xWlJ4UTUzTkNnUHB2MDF2bjltUmF4MUQ3dlFZOHhoenZnSEZmWVZqQUFBQWVOcHRrMWRzSEZVVWhyL2ZzWGZkTms3dnZWZkhYdmZFS1M1cng3RmpKeTV4N01SSnhydGpaL0Y2RjhhN2NXeTZCQUllUVBEQ00rVUpF''@;'; put 'put ''TDBLSkhoQW9sZlJld2ZSZWFRSDc5d0pYaVR1dzN6L0daM3puelAzM2lFTGQ1MGJZQjcvczFTYmZwREZETExKd1llZlhQTElwNEJDQXN5a2lGbk1aZzV6cCtybnM0Q0ZMR0l4UzFqS01wYXpncFdzWWpWcldNczYxck9Cald4aU0xdll5amEyVTh3T1NpZ2xTQm5sVkZCSkZkWFVzSk5kMUxLYlBl''@;'; put 'put ''eGxIM1hVMDBBaklacG9aajh0SEtDVk5nN1NUZ2VIT0V3blhYVFR3eEY2T1VvZi9SempPQU9jNENTbnNMaWRxN2lhbTdtQk8zaWY2N21XcC9tWU83bU51M21lWjdtSFFjTGNTSVFYc1htT0YzaVZsM2laVi9pV0lkN2dOVjduWG9iNWhadDRtemQ1aTlOOHo0OWN4d1ZFR1dHVUdIRnVJY0ZGWElq''@;'; put 'put ''REdDbVNuR0djN3pqTEpCTmN6S1Zjd21QY3l1VmN4aFZjeVEvOHhPUEswZ3hsSzBjKytmbUx2emtubEtzODVVc3FVS0VDbXFraXpkSnN6ZUZYZnROY3pkTjhMZEJDTGVKMzN0RmlMZEZTTGROeXJlQnp2dEJLcmRKcXJkRmFyZE42YmRCR2JlSSs3dGRtYmRGV2JkTjJGV3VIU3ZpRFAvbVNyMVNx''@;'; put 'put ''b01wVXJncFZxa3JWcXRGTzdWS3RkbXVQOW1vZlQ2aE85V3BRSTEvempVSzh5MmQ4d0lkOHhLZTh4eWRxVXJQMnEwVUgxS28ySFZTN09uUkloOVdwTG5XclIwZlV5d004eUNNOHlrTTh6RFhjcGFNOHc1TThwVDUrVnIrTzZiZ0dkRUluZFVxV0JoVldSTGFHL0hXalZ0aEp4UDJXb2E5dTBMSFAy''@;'; put 'put ''RDdMaGI4dU1aeUkyeU4reTlEWEdMYlNTUkdEeHFrS0sra1BlUmEyWVg0b2traGE0YkFkVCtiYi8wcC95TE95UGF1UThiQmRGRGFIRTZPamxra3RITTRJL0MyZWU5UmppK2NUTlN4c3phd2N5UWg4YlZZNGxiUjlNWU0yMHk5bTBHNWV4bDBVdG1kNnhETTkyazE2M0lXL3c1c2hZUmpvT0oyS0Qx''@;'; put 'put ''dE9halJtcFpLQlJHYms2elFkSE5PaE03T0RrOW1oMDNSd0RMcE0xWmdMZnlvZUxTbXRESG9zODNXYnBLU1pwc2ViSm1XWTArTkU0OE01cWZRejBQT2Z5Vktaa2IvSDI4R1VZVUZ2T09xRVU2TkRNZnRzd1hpRzdzdlFFOVBhMTI5bW5IU1Izejk5MnBQVHA1MmVPRmhXNWJJc1dPbnJIWGFzcVdz''@;'; put 'put ''MWJ0QnJITVpkNVBWR29yWmpqMFhIOHNiUHEzUmRhYWkrMm1PTnh3YVBqYjQrWXpUaEl2MDJXRklTOUZqbXNkeGpoY2RLdzJCVGRpamxKTnlnb3FraHh5cTJZc2w4eTUzRlNQZnVwMldSTmYzWjZUaGduUi9RSkxyZDA3TEErMzJNTnZ1YTFubFcralJNY2pJYWk3akp1ZGJZMUI1RmJDY3ZZbnZx''@;'; put 'put ''SDdkbHR5RUFBQUI0Mm1QdzNzRndJaWhpSXlOalgrUUd4cDBjREJ3TXlRVWJHZGlkTmtreU1taUJHSnQ1T0JnNUlDd3hOakNMdzJrWHN3TURJd01ua00zcHRJc0J5bVptY05tb3d0Z1JHTEhCb1NOaUkzT0t5MFkxRUc4WFJ3TURJNHREUjNKSUJFaEpKQkJzNXVOZzVOSGF3ZmkvZFFOTDcwWW1C''@;'; put 'put ''cGZOckNsc0RDNHVBUDRjSldBQUFBQUFBVmlZOUd3QUFBPT0pIGZvcm1hdCgid29mZiIpO2ZvbnQtd2VpZ2h0OjUwMDtmb250LXN0eWxlOm5vcm1hbH1AZm9udC1mYWNle2ZvbnQtZmFtaWx5Ok1ldHJvcG9saXM7c3JjOnVybChkYXRhOmFwcGxpY2F0aW9uL2ZvbnQtd29mZjtjaGFyc2V0PXV0''@;'; put 'put ''Zi04O2Jhc2U2NCxkMDlHUmdBQkFBQUFBRmFFQUJNQUFBQUFvdUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkdSbFJOQUFBQnFBQUFBQndBQUFBY2ZOSDU1a2RFUlVZQUFBSEVBQUFBVFFBQUFHSUgxUWY4UjFCUFV3QUFBaFFBQUFjWUFBQU9ka0RDZnBaSFUxVkNBQUFKTEFBQUFD''@;'; put 'put ''QUFBQUFnUkhaTWRVOVRMeklBQUFsTUFBQUFUUUFBQUdCcEVxOEpZMjFoY0FBQUNad0FBQUpzQUFBRG5uZEREN0ZqZG5RZ0FBQU1DQUFBQURBQUFBQThFaEVCOFdad1oyMEFBQXc0QUFBR09nQUFEUloyWkgxMloyRnpjQUFBRW5RQUFBQUlBQUFBQ0FBQUFCQm5iSGxtQUFBU2ZBQUFPTXdBQUc4''@;'; put 'put ''a0hkN1lsMmhsWVdRQUFFdElBQUFBTmdBQUFEWUxjNGdSYUdobFlRQUFTNEFBQUFBaEFBQUFKQWVSQkNCb2JYUjRBQUJMcEFBQUFvd0FBQVRhdVk0MEoyeHZZMkVBQUU0d0FBQUNkQUFBQW5yVSs3bjJiV0Y0Y0FBQVVLUUFBQUFnQUFBQUlBS1VBMUJ1WVcxbEFBQlF4QUFBQVk0QUFBTjZNZ2lJ''@;'; put 'put ''V25CdmMzUUFBRkpVQUFBRG9RQUFCaUdYRmoyS2NISmxjQUFBVmZnQUFBQ0JBQUFBalJsUUFoQjNaV0ptQUFCV2ZBQUFBQVlBQUFBRzluaFltQUFBQUFFQUFBQUExRkcxYWdBQUFBRFR3WjJHQUFBQUFOUytwdlY0MmcyTVFRcUVRQkRFRWtmME1MUG9mN3lwTC9Eb2ZYZlYvei9BSWdSQzBUUUNM''@;'; put 'put ''UjZjZEZSa2pWc283SHpUdjFENEI3bTQwNDhET2xvcE5sdjY0NVNlWFhMVDUxc1h6U2ErVzNBRjNBQUFBSGphalZjTmJKYlZGWDdPdWZlK1gvc1ZhaW5sUitnWUlZUWhhVG9nVEpRZ0drWTYweFJVeGx3MWFMYnBuSU1oakRIQ051Y0tjMkFXQXBzL1hTVUxRKzEwa2dxc0NuYldrWVl3UnR4Q1pC''@;'; put 'put ''TERvREFHRmFweE1vUXRCcFYzejN2ZUQvdld0dE0rNmRQVGMrOTczM3ZPZWU1MzdnY0JrTWM0MUVMbTFOUXRRQkU4UFloak9QNFJLTnppYnk2L0R4Vkx2cjU4TVNxWExGNnltTE5CZnpLYXpralk4Yms4aG1NTUpwakhZVHpxWEVzNkdpMnpWU1hhZ0lnUHllQVZmR0tVK1FJcVBvS2dKdDVBRHBp''@;'; put 'put ''SjlmZ1FzWXlDY2h1Y0p5T2xFeVVZeEoyZGpUdmlaK1BEOFRFTThCT2ZHM0RrVUwvZUxsVDIrdit0K0pFQlYzaHp3SkdqQTQvRSt3WVllVFkrSHJjbitKai9NSC8va3FEdjIrUFg0bzN4UnVaMUxETTlnZG42SEtHb0podytUM2hNSlFLK1FFU1lUdVJ3TFZHRUdVUXhjenVUbFZwSkNGYmpaNXk1''@;'; put 'put ''amdqTStIcjZkeEtDRnduQkh3akZRY0xqTmNMakdCRndpb2p3QmhIaERCSGhMSkhET1NLSDk0bGlWdTlEcmhZVGVTbVRNaFJMdVpTVEs2U0NQSXFWelhQdHlWVEplRDR6aVJEYmQ3cGp0UjA3MjdHM0hRZk1JWXBRUXhUalJpS1ArVVFKbHVMN1hDR0pKTEpJSW9za1lDTWU0L3hHb2hpL3dpYk9m''@;'; put 'put ''d0svNWZ4bmlCSnNKM0xZUVJUaDkwUU9yVVFSbmlkeWVJRW93aTZpR0cxRU1YWVRlWFFRZWV3aDh0aEw1UEVuUXZCblFpdzdFWTRUSmZnbmtlWkZMUzlxZWZHV2wyQjVDWllYYjNueGxoY3ZJMlFFODNXbFhFbE9jaFM0YWpVek5JRTFybVp0cDdLbTA1bVpHY3pJVWl6RGQ3RWMzOE1LMW5JMTF1''@;'; put 'put ''Q25lSkJaV01mb3R6T2k1MW5KRjFuQmc2emNNVmJzRFZicUxIZnl2cDJzTXI2M0lqbGYrb0NkdzMyeW5IRVBwcjdhcWJ1TjhYLzZVYXVOOE8rWkFVZmVKQzcwOCtUNVR6cFBjV2Y4ci9nZjhTTTlKeTk3MHVJejhkWjQ2MGYvZFdlZnQyZVVKempSaEpnbUZGOGhIRzRqUEc0bkFoWVNFUlh4R09j''@;'; put 'put ''a2FoQlRnNW9hRkMxRWhHMUVaSlVXcTdSWXBjVXFMVlpYUlJmaGNKcHc2Q1ljUGlBQ0xoR1JESkVock90UUdVb2VKc1BJU1VYRktpb3lXa1p6ZlVVVnJpQktNSVFZWkVvWFU3cWEwbDFCNlY4aXNrcjNGaytVaVNkblNuY0ZwZmRvM0Z0VTNxTEtXVlNYbFo1cVBGWDNTOFRBdWs2aTlhWlpMVVNZ''@;'; put 'put ''S05kWm5EblRyelA5YWlIbVJNVmFpRHpSc21iaXp5cmFXUlp5TWxtdTVkdVRUNjhhUmppZjlicU5jUzFrSkkyTXBBbVBNNW9uOENTZVFqTWplb2FSYk9OcGJPTnVPN2pMdmR4ZEYydlF6WjFkNGc2RzhtMGorSmJSWEhHTTZWbFJhaDJsUFA0SjdYTE13L1cweE96cjJZazZvekhrazh6L0hsa3I2''@;'; put 'put ''K1ZoYVpMTjBpeGJaWWZza3BkbGoreVhBM0pJanNnSk9TMXZ5N3Z5bmx4U3Iza3QwK0ZhcWVOMG9sYnJOSjJoTjJpTjF1bDhyZGM3OVc1ZHBNdDBwZDZ2YS9RaDNhQ1A2aWJkb2s5cmk3WnFtKzdXdmZxS3ZxcXZhNmVlMUc1OVJ5L29SUWNYdVVHdTNJMTBZOXg0TjhsTmRsZTdtVzYydTlITmN3''@;'; put 'put ''dmM3ZTVyN2g3M0hiZmNyWElQdUFmZHo5MHZYS1A3dFh2Uy9jNXRjeSs0bDF5SDIrZis2djdtRHJ2anJzdTk1Zjd0L3VzKzhPcUxmS212OEtQOFdEL0JWL21wL2hvL3k4L3h0ZjVtZjZ0ZjZML2g3L1gzK1JYK2g3N0JyL1hyL2NPK3lXLzJ6WDZyMytGMytaZjlIci9mSC9DSC9CRi93cC8yYi90''@;'; put 'put ''My9YditVdkFoSDhyQzhGQVp4b1dKb1RwTUN6UENEYUVtMUlYNW9UN2NHZTRPaThLeXNETGNIOWFFaDhLRzhHallGTGFFcDBOTGFBMXRZWGZZRzE0SnI0YlhRMmM0R2JyRE8rRkN1QmdoaXFKQlBCMnJkRHU1d1hpMmNhMXhVOEpZWjl4cW5qWEdqUm0reFhpSzhTeGpXNDExU3V6NnpHcVRsSitw''@;'; put 'put ''Y3BWeHRmSGNoTEhhZUtlMmt4dk1mMTBQNDVUeHhjeFR6Y1pWeHFYR3Q3aEY1QmJqVmYyem5zdkVXR3YrUG93N2pOdU4xL1d3M0pYR2J2WVM0LzNHalgwNXpjQUFPNmszbnFRZG44VDZ5MTY1NnVpUDhWWGpuY2FyZTVoNSt6VDhmMVptYm50NFZXYlB2ZXhNVFJ2TWY1WDVzL1pzeStGdnpMNHJr''@;'; put 'put ''L24wTGIxc0cwM3JtL1UzbVQwM3RXMU9xcG0wT21uVXFUNExkc0dmekdrMWU2ZGJlVm05QlkxMW1uMDBzUXMxVFhPU2Fqdk5UTmJmbUxFUG1kMWdOVHBxT2ovVm8wQnF0ZVB5aVVCZi94U3pMNmEyelVsVm5mV25KMmhXUmpQVm1jeW45ZzZ6RjJXcVlIblRTdk0zbXo5VldsWEdUck5hbXNsOFgv''@;'; put 'put ''dTgyVCt5Nkc0eSsrOW1aMWV1amJjbEs4ZlBmYXhTMlRmT0xaenVqay9CdldjcVBtdjNVdkRlTlpGWlNXNm5ubDI3aWwwd3VXRkhtTUtiV0E3VGNBMTdXTks1UzltM3IyTlBUenIzRUx1amxsdm5Ic3J2VmJYc1EzWEVNTnpFUGplY25lNVdmdmVwSnlxdGwzK0dYZThPZHEybHZMdU50ZHZiZEhi''@;'; put 'put ''MHpWeHZDenZmWE90OVgyYjNhMmVIL0NNTzRGdTgwWjNGRCt4VzJZVHpFdkE0Ty9Gb3RGaFBiZU4rUmE2dzcyWVJKRjVoS216QVBlUzE3SFlsR01sM2pXZEVrM0UxZHoyYnU1eUhCUnc5YU5ydE1qNXRiR2NHUnpKODFQakh4czhabjdDc2pUTzdCRi9rZSs3RnR5VW5SVklzZVNtUndWTGFkMGYv''@;'; put 'put ''QTNJRm9iY0FBUUFBQUFvQUhBQWVBQUZFUmt4VUFBZ0FCQUFBQUFELy93QUFBQUFBQUhqYVkyQm04bVdLWUdCbFlHSHFBdElNRE40UW1qR09RWVRSRE1obllHZUFBeVFtQTBPb2Q3Z2Znd09EZ3VvZlp1bi94Z3dNek9jWURSVVlHQ2FENUpoWW1kWURLUVVHSmdDOGlRb3JBQUFBZU5xMWsxbFFq''@;'; put 'put ''bEVjeG4vL3QzMFJLaFQxOXZacDAwYWlGRVgycGNpK2xLelpzcS9aR3VzUVEwVlN5SjRrb3hrVFUxTzJHKzY0TldPTXZzK1ZXKzRNSGNkWFREUE11SEptM25QZWM4NmM1NXg1bnQ4ZmNLSHJDMEYwajFUcW1Uam5ybEtzeHlXTXc0MkJsSENMT3U3U1NCUE50TkFtSGhJZ2d5Uk1Ca3VjSkVtcXBF''@;'; put 'put ''dW1USlVjeVpOQ0taSVNJOVY0WmJ4M2lUS1BtNjNtRS9PTDVXNEZXc0ZXcUdXem9xeGhWcnAxMytZZitVMHBmWWZGalI3YWoybmptZmhLZnpIRkpyR1NLQ21TSmhtU0pkbVNLd1d5UVRacjdaZkdXNjE5eUd3eDI4M1BsbUVGV0VGV2lGTjdxSlgyUzF0OVZDL1VjL1ZVdGF0VzlVZzFxNGVxU1RX''@;'; put 'put ''cUJsV3Y2dFExVmF0cVZMV3FVcFdxUXBXcE02cFVuZWg4MDVuVm1mVDlrNlBjVWVESWQ4VFlCOXI5N0Q1Mkw3dWIzZWo0MnZHNTQvQ0hrSGZKWFY3OXArWnVlRHVUNEk5YkJLUDd6L2lIUnRkSkYxeDFkdTU0NElrWDN2amdTeS84NkUwZit1SlBBSUgwb3o4RENDSllaenhJcHg2S1NaaE9KQndi''@;'; put 'put ''ZzRrZ2tpaWlpV0VJc2NRUlR3S0pER1VZU1F3bm1SR01KSVZVUnBGR09xTVpRd2Faak5YTVpER2VDVXhrRXBPWndsU21NWjBaWkpQRFRHYVJ5MnptTUpkNXpHY0JDMW5FWWsxYUh2a3NwWUJsTEdlRmZ2OE9kcktiWWc1eG5OT1VVMFlGNXpsSEpWVlVjNUVhTG5HRnk5UnlsZXZjMUJUOVpQUTJE''@;'; put 'put ''WnFsZTVxbW4yMFZxN1VkMFd6Z2JMYzM2MW1qKzEyYytPMVc0VjhjdkVBOW0xblpZMlV0bXlSR2oxdll6akhzT0NSYzh4a3BVYm9DSXJpamR4NmdhWllFWFEveDNXZUtuR0hFc28yOWJHVWZlempBUVYxTCt6bkNVYjExbUZKT2NaTFh1cHA2c1U2OHhGdDgyQ2grbW4vUEg1RE5xdWg0Mm1OZ3dB''@;'; put 'put ''TEtnVENESVlOcFBRTUQwMjRtVmdhRy95SE0wditObVhiLy84SjBqMG53LzVmL2ZpQStBT1lMRGdwNDJxMVdhWGZUUmhTVnZHVWpHMWxvVVV2SFRKeW0wY2lrRklJQkEwR0s3VUs2T0ZzclFXbWxPRW4zQmJyUmZWL3dyM2x5Mm5Qb04zNWE3eHZaSm9HRW52YlVIL1R1ekxzemI1dDVZektVSUdQ''@;'; put 'put ''ZHJ3UkNMTjAxaHBhWEtMZDZ6YWRURnMwRTRiWm9ydnVVS2tSLzlScTlScU1oTjZ4OG5veUFERTh1dGd6VDhFTFhJVk9SQ0xjZFNpbXhLZWhlblRMVDExb3pacjlYYVZRb1YvSHpsQzRFSzlmOXZNeGJUVjlRdlk2cGhjQVNWR0pVQ2dJUkoreG9rMll3MVI0Sm1tUDlIRFB2MVgwQmI1cVJvUDY2''@;'; put 'put ''SDJKR3NLNmYwVHlqK2RBS2d5Q3d5TFNEUUpKUjk3ZUN3S0cwRXRnblU0amdXZGFyKzVTVkx1V2tpemdDTWtPSE1rckNMN0VaWnpkY3dScjIyRW84NEM5SWxRYWxaL05RZXFJcG1qQVF6MlVMQ0hMWkQrdFd0Qkw0TXNnSGdoWldmZWdzRHExdDM2R3NvaDdQYmhtcEpGTTVES1Vya1hIcFJwVGEy''@;'; put 'put ''Q2F6QVFPVW5YV29Sd2wyZGNCcjNNMFlHNEozb0lVd1lFcTRxRjN0VmEyZUFjT3J1TFA1YnU3NzFONWE5Q2U3bURaYzhCQjNLQ3BOR1hGZGRMNE1pM05Ld29LVEhTOVJIUmt0SmlZR0RsaE9VMWhsV1BkRDI3M29rTklCdFFiNjB5aTJKZlBCYk42aFFSV25VaFhhakJZZEdsSWdDa0dIdkt1OEhF''@;'; put 'put ''QzZBUTN5YUFXalFZd2NHc1kySXpvbEFobG93QzROZWFGb2hvS0drRFNIUnRUU21oOW5OaGVES1JyY2tyY2RHbFZMeS83U2FqSnA1VEUvcHVjUHE5Z1k5dGI5ZUhnWUJZeGNHcmI1ek9Ja3UvRWgvZ3ppUStZa0twRXUxUDJZazRkbzNTYnF5MlpuOHhMTE90aEs5THdFVjRGbkFrUlNnLzgxek80''@;'; put 'put ''dDFRRUZqQTFqVENKYkhoa1hXNlpwNmxxTktTTTJVcFUxbjRhbEt5bzBnTVBYRDhPaEswS1kvM04wMURTR0ROZHRodkhobkUxM2JPczQwalNPMk1ac2h5WlViTEtjUko1WkhsRnhtdVZqS3M2d2ZGekZXWlpIVlp4amFhbTRoK1VUS3U1bCthU0srMWcrbzJRbjc1UUxrV0VwaW1UZTRBdmkwT3d1''@;'; put 'put ''NVdSWGVUTlIycnVVMDEzbHJVUjVUQmswYVArSCtKNUNmTWZnbDBCOExQT0lqK1Z4eE1kU0lqNldVNGlQWlFIeHNaeEdmQ3lmUm53c1p4QWZTNlZFV1I5VFI4SHNhQ2c4ZHNIVHBjVFZVM3hXaTRvY214emN3aE80QURWeFFCVmxWSkxjRVIvSnNEajZ1VzVwelVrNk1SdG56WW1LajBiR0FUNjdP''@;'; put 'put ''ek1QcTA4cWNWcjcreHg0WnVWaEk3aWQreHJuZVdQeUQ0Ti9peGRsS1Q1cFRuQndwNUFBZUx5L3c3Z1ZVY21oMDZwNHBPelEvRDlSY1lJYm9KOUJUWXpKZ2lpS0d0OTg1UEpLczFtVE5iUUtIMDhFT2l2YXdieHBUb3dqcFNXMHFFa2FBUzJEcmxuUU5Pcno3SzFtVVFwUmJtSy9zM3Nwb3Bqc1JS''@;'; put 'put ''bk1nQ2tvNUtheHNPenZwRVJhV0R1cDZmVFJ3T1ZHMm91ZUxEVmJWbkdGdlFmdlk4ak5MSGszVWw2NEtTbnRSWnRRcDd6SUFnNjVrVDI0Sm9KYmFPK3lpbUpLV0tnaVBnaHRCZnZ0WTBRbUxUT0RMb0VpWkhHeXNnL3RpaDA1b29KMkF0OTYwaXJ2MjBMdHozWHlJRENiblc3blFaYVJvdk5kRmZW''@;'; put 'put ''cWZWWFcyQ2hYcjl4Tkh3ZlR6ckN4NWhkRkdVOHVlOStlRk94WHB3UzVBa1pYZHIvdVNmSDJPOWJ0U2trKzJ4ZDJlZUoxU2hYeVg0QUhRKzZVOXlJYVJaR3pXS1VSejY5YmVESkZPU2pHUlhNY0YvVFNIdTJLVmQralhkaDM3YU5XWEZaVXNoOWwwRlYwMW03Q056NWZDT3BBS2dwYXBDSldlRHBr''@;'; put 'put ''UHB1ZG12Q3hsTGdzUmR5elpOZEY5QjA4SVIzaXZ6akV0Zi9yM0hJVTNLTEtFbDFvMXduSkIyMGZLK2l0SmJ1VGh5cEdaKzI4YkdlaUhVazM2QnFDbmtndU9QNWU0QzZQRmVrVTd2UHpCOHhmd1hibStCaWRCcjZxNkF6RUV1ZXRnZ1NMS3Q3U1RxWmVVSHlFYVFud1JkVkNzd0o0Q2NCazhMSnFt''@;'; put 'put ''WHFtRHFCbmxwbFRBVmhoRG9OVjVqQllZdzZEZGJXRHJuY1o2QlVnVTZOWDFZNlp6UGxBeVZ6QVBKUFJOZVpwZEoxNUdyM0dQSTF1c0UwUDRIVzJ5ZUFOdHNrZ1pKc01JdVpVQVRhWXc2REJIQWFiekdHd3BmMXlnYmExWDR6ZTFINHhla3Y3eGVodDdSZWpkN1Jmak43VmZqRjZUL3ZGNkgzaytG''@;'; put 'put ''eTNnQi9vRVYwRS9EQ0Jsd0EvNHFUcjBRSkdOL0dNdGptM0VzaWNqelhIYkhNK3dlTHozVjAvMVNPOTRyTUU4b3JQRThqMDI5aW5UZmdpZ1V6NE1vRk0rQXJjY25lL3IvVkkwNzlKSU5PL1RTRFR2OFBLTnVIN0JETGhod1F5NFVkd0wzVDMrMG1QTlAzbkJETDlsd1F5L1Zlc2JCTitTeUFUZms4''@;'; put 'put ''Z0UrNm9uYjVNcXZObjFiV3BkNHZTVS9YYm5YZlkrUnRsTTdvc0FBQUFBUUFCLy84QUQzamF0WDBKZEZ6RmxXaFZ2ZTczZWxPcjk1YlUybHE5U2QydDF0SnF0ZlorV216dHEyMWsyUmF5c0MzSjJHQmJack94TWVDUUJRSWhKTTVrZzRTUVl6SWhZSlpBSUNReldTWWh6b0ovZnVZUEp3bVRTZUNm''@;'; put 'put ''SkgreVRENGhrOG1BbnY2dHF2ZGFyYzA0ODgvWVVxdjd2VnYxcXU1K2I5MnFSaVkwdlp6RUh4ZDhTRUQ1eUkwS1VRQlZvUlJxUnUyb0R4WEtucTZPdHBaMFl6SWFDWllWRlhqc05xT09JRk50VE8rMyt5VjMwaDF3SjFPQlZESWxzYjhTdk5XdTBtdjBMNzBEVjFMYWV4V0dOVWduVS9qanlqZHgr''@;'; put 'put ''eHVkWGVlN3VzNmY3NnJ3Kzd1NnV2WjMrZTg2djcvQ3Y5OS8vdng1Ly83OWQyM2RlbjV1YS9rUGhGOTMrME4rK0xsam9XTHIxdUFzdk52cWIrdXEySCt5eVZzemR1elk0OGVPamRYTSsydjg4SU1RUVZ1WDMwU3Zrd3RzYmlHNUFtR01waEZDMWtGRWlEQ2p3NExnRllaME9sMit6aHF5Mi9TU04r''@;'; put 'put ''Wk1DZ0ZQT05YUW1LejN1RjFpWVBTK2t1MkdSS0tpTEZGZFRpNG85YityOFpjbEVtWCtHb1NXbDFFblBvY2ZKaGRzRmNpRWtFMkExMWNSZlc0RnZOd096L1doTXRRdmI4MFhDZElMQkJPRUQ1aXgwV2dkdE5yeUJFa3lURnRNeEdDd0Qrb3dJZmxrQ0tHeTBwSmlhT1VyS2l6d3d2T2Q5dXcvcVNT''@;'; put 'put ''R3BhUVVrQUpwOXB0T3N0K2t4SDRsZXBPUStFSHZRblE2ZWlaNmRYUy9aMzk4empNUDc4N0FsWG5QdDg3RXorREhIOThGQ0QyLzYvRmRuNE4vdXg1SGdKbXk1ZWRJTC9rektrRkJGRU1KT1JhTCtzdUxDcjBlbDkxc01raFdSUENBSGlQY0QvUENCTS9DQkwxb3FOUnVGd0JkUVJHSW5BcEgwaDV2''@;'; put 'put ''S29FQmJXbWd0Y2NyaFNQdVV1eEdjTldLM1k3R1ZBTmNJTDBuRHUxKzk3NitnY241K2NVOXUyKzR1cWRuNE5oeDVWZzRHb3kvMmxqVGRHUlJrcnR0dTZlNm5kLzA3WmdZWHpTM2Qxakc5N1RhdmxLMDh5cnNET2FmTjlhVUtrZnJLL3dSMjlOSWo2cVcvMTJ3a21lQnNrN0FjZzFxUmQ4ZGZMSmdi''@;'; put 'put ''S2NjTTJPOUNXTlJqK2VSaUF4RzBiQ0FkRG8wUXpDbGZCN2dYNWl4U0VRUThvVWgzK0NURVdoU2M5a21DRUJaTzJuR2dpWEpLdzM1NU9RR0xRZ0JXTm9NYmR4cWFrb08xOWFXbDd0Y0NOVzIxclkwTnBUWGxDY3F3NjR5VjJsUmdkTmh0OEZrckdHcjVJNDVLREk3Y0xJZXNPaXk0Z0JPNGdCRFk2''@;'; put 'put ''QkNkTHM4U2JUbWZnZGV1ZmVwb1doMHVMWnVPQm9icXNQdjM2T0U5aXdtRW9GZ2RTS0E1NFppY0xGdWlONEtKbW9DQVhweEtqRmFXemVXU0l6QmF6VythbWtjZnpZZGl6ZWxxMk5wWlNJeFdsYzdWbFBESUFiVDhWZ1R2WVVvMy9pWC8wamVSYjZFeWxFY05hSU91YlUyRVM0cktTNHFNQmtGVWc2''@;'; put 'put ''OExwQUJ5dGQ0QnNUT002Z0hZV09ZQWVhcHJ2YjdxeHVyVS82NFB4YXZFQ1ZQVEI4UkF4V2NnWEpuQnJlOGpXbXZLSGtSblpxWFQ5T1JEa2VBcldDcXBIaGthckZ6dnFWdnRMaWdicktoWVh2TjBMYjZ2cXFTNmJyRTljb25FcDdDdHBwb21Ta3oyUk9MOWRUbGpZL1ZUclYzVHdjck84T0prVVQx''@;'; put 'put ''Y0UzellMaDFxSDBndms4K1RscmlnY0xhMG9KNG9LSjY2UytwM1dNRnpjRzZGb1F3bFhIMExaQmxDM0xLTnFwQkdIbnhrRHRJWU9DT0ZWMGhCYTV5UjN5K0NQQTdmdlZ3MEZkWjZRc2U3a1cwajhibHEvQVkrUXJLUStJemVYcGNHMk1xSnUxbHMvQktuMXRjUEpnWkh4NGV6K3o2K2Rtei96TGV0''@;'; put 'put ''ZTNDa1NOUGJPdG1iY1BRVnRiYVN0Q1dZeUdTNWdnS1R3d1BUMlFPUWcvejI1NDRjdVRDdHE0eDZPUG5ZNnh0QXUvSCs4amZvWG1VbGh0bWhucWFxZ0NYTUljQkFXTWRSaURXOHlMVzY4a004SzVIRC9vSElPZW1KdVdPdXBxQVB5WlJSb1NCcGh2VG9nVC9BeFhoQ1AvWUNCVGc3eW1sdkI1dktm''@;'; put 'put ''YXl6eG9xUktrUmJxWHBSeSs3WU1VU0pTYUZkTHZnVTZBQ09ramdDTDhnQmw1MG1VV1NWeEJ3NlkxR20wNXZMWWlXVzYybDFWNnJYbWMzaUFadmhXUTNFOUhzeXJPNlRGZ1U3QzRoNE9DZ0JzbGVyUzl3dXdwcVhaSWhCMW9Rc1FsRVk3L0Q0a3VVNWhzOWZyUE9hRFNZSElhOFBKTW9tdktzQm9k''@;'; put 'put ''Wk1waDAxbkxSWnNndlRmZ3NEb2ZGVmFzcmRPYzVoRElUQlRZYThuV21mQ0lhamFMTm9yTWFEQ1lOM2wyb3EzVlpIQlRISFdpV0ZKSTJaRVpoT1lCMEF0YnRBRjRIellFRmRBRFVBWjVHZ090aHBzUnRvbFFVd3dGcURWUFVLaVpKNFpldSt4TDg0S0lYWGxqNDhwZHBmNW5sUmZRTDlFRmtSVjRa''@;'; put 'put ''eG85Nk5aNER3UWs2S00rQlNGVGs0SG84WVNtclRwU0hFOVhKYXhPMU5lWGxpZmJheXUyTnRLODY5TSs0QS9lQnRCYklia1E3MmtINUFrYUVZRVEyMnBuVDcvYlg0VHpsajdqdkVPT1pkckNaUDRIbm02bjFwMWRBQzJMc3haUTd6TWdVRklBcmNpM2tJZFU2V3JLV0VTLy9adms1L0IzeUszaXVY''@;'; put 'put ''YmJTVHMvQ3MyL2dENlNxREc4NXE1dy9TMzcxOWlYRTdHWGQ4cHZrSHZJaXFMOHlGSmVyZ0J2WmpMbld3R0NvMlFCc05qQ3laYmJTQWcvVGsyQjZZcnExZXBDa0doTEFYRlN3U3VGSmhydUhoKytlbkh6ZjBORDdKdXRINC9IUit2cXhlSHlzM3JMN00vUHpEKy9lL2ZEOC9HZDJMM1pjdjNYcjll''@;'; put 'put ''M3Q5TFdENFlBU05nMHlMeUtmWEFDa0ZBQmZBMXlyWTV5UGgreE9oam9wa2s3YUF5L2VsUHo2L2xPa2JIRG4yYVZ4eE5ySFlWSmhtRThCaXNvUnN3bW1BOXhBeUFCREoxT0gxQUdaUnN3RzJiM0JzRTRxaUdXd3BzV2xTS09xLy9JeGtLZDZTVzdjVXB2Y1Zqays5MkRQZFpuK3lmdHhXcEhtdnB2''@;'; put 'put ''Y0hxdHBxYXNkZkhmak5SMWJidTYrWVpFOXV4UndHWVZuVjZHTTNGWllBTStwd0pqQTAyRUlBOVNHZzBFL0FFL1d6UUJ6d2tBUTBzOVFKZUJsOGwrRktvTkJmekFrU1lWQVphcGtrdlhNN2tpcHBLZHg3ZkFrRmUzL2VIZDhLTFEzM2Q0MzJEODgzTkhYMTFRM0hoclkrOG0rNjl2N1d0cTN5emNN''@;'; put 'put ''V1RLcGlhcEVVM1dpQmgvR2RmRm9LbDQxZEtKMlIyUGJoTjI2dmJOMWR3UG5nMUo0MlFsNE40RzJxNWFqRnZBMzhJQ29oemxnQkg3bkhLQ09tZGg4M1pEWmJNNHo1NEZNT1d4MHJDRi9CQ2Z0MVBNTUZHSUJuMVlldCtDdDUyWm1UdjNrM0N4K1FSay9kQTVJR0ZGK3pPa1RBeHcxd0hPS0tZNGNv''@;'; put 'put ''QXZ6TEVTQXpyRWVBWTUwQUtFRHV5NElaSm9iOWRVNEFnK3R3dTRNQmhpT3dQVlJNVlFoUmFnd1NZMVpicnovd01EVTNvN0JvZmFSamgwbS9MenlWUkhlTGJSMzNUSml1WFpxY2t0RFNxNE40dXNXbjRvbXIrbmVlbTBMeDBFdGpHMEE2T2RERWRRbmI3RUJEdXpBUEFWWUo0U3dYcWNiRUVHeDZQ''@;'; put 'put ''U0NiaDVsamFzRVk5TjBSSEV4akRCU0hBNzRvWXVpWUNoc0FEOE5xU09pZW9PcGJJbExpUVFmSEZtMjh5VHhJd2M3dW03c3YvZmU0WHQySHQvVkh1aU8xUTRsZE9WWE54ZzcvS010ZFlQNUJUZmlMelhzNitvKzFQYVZUeDU4ZEdaNHBxeXNlYUU3VktVOFd0RmNudTVNeGo5TThadUVpUVNZL0pU''@;'; put 'put ''SnhXQm9NSk1lcW5jdzg3M0Ixd1Z2aHpxUTJKL3l1MEVoUEtBOGpQK2cvTzk3U2Z2aTFVc1hxSDhSQlR4MHFuaElvUjY1MHlVUzBLNERVczcwVlMxaGdPbGpJQkRURXBXVkZBT1ZxY3FHbW1xS2g0cHlpb2U0a2FxdGpUd01GVE01M3BXWHZnZmJaQ1hVeC9qWGsxdUhNODJkV3hhN3VvLzNkRFhK''@;'; put 'put ''UTcwbkIrdEcraHNiKzBacTI4ZGpYUkN3eE1iYkxUVlRyVzFUM29MUnB1YnQ4ZXJ0VGMyajNnSzRzck1HUDlRWXJVdzNWc1VhQk9WU1U3eTBwb2lRb3BwUzZrUVJWQTl6SEZxaGRTblFGK2l0TjRMQUdnQnJPcGlzSHNSVlQrYUI2UVdZb1NCNEJuUHNnVVpyZnhtZFl5Z1lZclQyY0ZKejRRVXJU''@;'; put 'put ''RCtvYzNhQTVlYmFFV2o5OSt1b0xEUHFOMU15VjFLQ2t4ZFhVNWxUWG5rRXlNeklUZWZBN0FXeGdHM3dVdDFOZFRVYlhpRVBzdlE4eUxKWUVMSjRMUjZIalJrUlVYVXROQ05DTmpBb0ZlcGZmRVN6TE1wZDJqdUl2WmlkSkJhSXZmSVJza3ZJRG9pNkZSbWZ3dmg1Zk91VHlSamx3elRhVGtTeUcv''@;'; put 'put ''aFFmRVlrNERzNVV5RjNIbmFuOFNYbGIvQkJISm45MGR5REQ4NHp1ZXRBajVGQy9DZmdQQWwxREQ1WkJtR0JBMUV2VnBqVjRrWTdCcysvZ0hJeWplUVFoQkJraDZySWlUQTg5UnkxOEZTVFV6VkEvM2ZnbnlvaDl2dW5oWk1MTUo0K0dJOVhHNDhBNDBsWDQ1VGVyZS9EQjJFOGw1UzZGeDk4Y081''@;'; put 'put ''SHN6K2k0M0V1djRsZkFkNXdJejlxbDFzMG5uQUMrd3RVbWdRZEVnN0F5TGp6UnJWaVZrZDVQQjYvcHp6a0RRYVpiblNxQWk1RlZyamV2U3JLZldKb2IwZjljR2QvOVEyOW5mdlQ4K1BIdkJydTc5WTFWNFliK3dhU3JmVTdHN3V2Yyt6NVB5c0JNRUh4NWZjTFc4Z2pTRVlqNkpMczlwZVhDUWFo''@;'; put 'put ''R3hzTkRxd3p0cmNSRVZpWVIxalZFUGZxc0hFUzFEaEVUVlM3aWlicUV1NURxdVlDdldBd0NET2dkTzBHR3BaVjBVZ09pR0V3Q29iNWQyeXNCOExVVVRVdElQMzg1cTBrU1p4RW9pak5zT2FqRUpBVmRBSVRkNDUwRHZkdGhWbGt3dUZZS0JnT1d5VGZPdGVpZ2dZZFdRWHE4ZEt3aEF0U1BjVnZq''@;'; put 'put ''dGRSenp4NzBDZ1ozTEFpYlowWDVoYS9kblQrQy91YmQ5WFZ0bHVLUnhLRDA1MEhXMnE2blpaNWE1N1pXdTRyYnFpWStzVDAzQmZtOWp3NDAzWWc1V28rMXUzdkYzRWlGcEhERGRFYkRueGg3c2pYanUxOWVIcjhXRk1zRW83dEcrcyszbDNsYnpQMGRUU08yb3JMS3JlMzcvakE5cmtuRHV6NXhK''@;'; put 'put ''NlM4cEtnSDNzbk1yWllmYXkzcXJxUjJ4WW52THdLZWxrQ0N4dVRLNDFZeDRKN0hYQzBEcXdydFhVUUdWQVB4OENjWGU2eUZvQjFsVmdJR2pGalVxcDhzZUVlWEFZL2Q4K2VPSEhxRkxtd05QNXI3RmYrQmRBT1VRZDVIL1NmRDU0UDQxclFYL0FFRWVSRnJ5TjY2bmFvQ1JnSmM4K1lQcXVvMEc0''@;'; put 'put ''ckx5MzBGL205Ymx1QnZTQldibUNPS2NPOHBwLzltRm5aR0hZN3RUZGplTHgxVDhOc1cxZlQvb3p5R1p4TXRMWW12blF4MmRtWnZFZ3V4RWZyOWplVTdHNXEzRkdMUDFJWEN0YzlydnhUT2haTC93UFZDOVdnZHo4R3NsV0NHdVE2Q09OUm9SbHNhUkdZV1JBdFZYOTVWaVdKNEVJSktnNkh3alJK''@;'; put 'put ''bEdVTmoyWkhjK21PRzgvdjIzZCs3OEM3azFQbFUzVWRoMlg1Y0VmZGxIOW4vWHNHTExPZm5abDVaTGExWVZzbzFuVkU3anpTRlExUHBGb1piU2p1dnNWOEh6ZUxKTEtvWWtHMGlpcUwyZVV3dXkzdWNMbWVva2hqemhnT3FVd1l3L2F4TjQ0K3VXL2ZrMGZmUU10OVJ6T1pvMzEza2dzN1A3bHYz''@;'; put 'put ''NE03ajdVZTdPNWVhRldTRkFjUW1ZTHR1UURxdUVhT2F6cU5LaERkTk9nU2E2Nkh5angvTTA5RFVYM2lWdldiM2UvK0I3eFBlUkMvZCtrdG9pZnQ1eGVmV1NRWEZybVBwZlZ2UkZWeVdPc2ZlRTNIZXRYY0FMaGhSRWJhTStVejFyTTlvUFY3bW5iNnhLTHlPdStVMCsxdmdXNSsxQ28zMllCY2R2''@;'; put 'put ''RE55N0FPbUF3NnBscFJyME9NelZhMEluT1J3Qzl3QXZFQ1BBRHoyM05NNG5vaXBnTDRYVGhVZDI1dzl0RjkreDZkSGZwdzNWVDVnV1RtT2xtK0xoTVpLMzhNbjFUK05kbk9TZG1XekpLeXlIdGFtL2RIR1Y0amNsRDFKUStBRDB2blRQTkorV2d0UGpHZE1md200WlY4OUxUeXQ2ZFA0MGtxVmpp''@;'; put 'put ''ay9KUmNVSDZOQzZDWGZtajFMWmJMcEhtSW5GaUVoM0VRaVBSellRUllPOWlPZndKWUcrVWs1dnJqQWU1N3dlQm1CR0FvTDBPOURlVTdRenBvdnVMcXd5aW91RDE1dW1LN295K1M3RHpWdXRCbGtlc25nalg5TGZnbHBhN25jQnVuN3loMGRaN05zMXd1TVJyMEJCeDBQSUJaeGt6ZytVeW53OEh0''@;'; put 'put ''WWRLT2swWWNnTkF4TUhvYVYzOU0rUjJPZlB6MTZkTXd1U2Z4bVBKRDVYWmN1ZjhmZUwvVXFTaUZmdlhVZDJTRHByMmhxNUdHT2ozUzIrMTAwQ0hnbGFRZEZGTGcxQ0x3M2RJM1dYdVFJOEc2TWk1cGczRzU3TnE0ZkJBMEJPeG1vTURZNmRkZVAzWHE5ZGZvbUtieEk0RDg3OUcvU2tydGszeVI4''@;'; put 'put ''WEtwN0pNSVdkZWpJOXNqaGlFRldILzQwS2xUeWpuYVh3bCtIZnA3WFNtaGNrNTVXUG52aUhXNTJ0bDcvcHByenUvdE9KVEpIT3JndWtkVk9yT1B6TXg4ZG5heDYwaW5mS1NMY3l6VE81UmZqN1A4bHB0R3F6QUtFRlVCMDlURlNySWNwbWpOY3pueTNGYTNQVnd1MGtTNVA2dDczSUdzYnU3RnNm''@;'; put 'put ''NGJ1N3R2N0gvaU5DN3BIQjN0L0RTNTBMTFExYlhROGl1OHE3MmhvZjAxbElzREYvWHQ1WHFhN0NaNmdlaDFvUFFFQ0pPemdZMHVKMnZvZHJzajduQjFPRUpWTU5oeXJ4VEpGV01ZalM0ZFNYc2JWMkdGS01HS0xWMEROVWZiOW1yb1VYN1dNdFcxSjVERkR5NjdOdDQyTEFjcnMzaDZvMnBrZUt5''@;'; put 'put ''MWV6MmVUZ0NlckRDV3BGeWJSK1dheG9yVWRCNEFSMFNORlVXQk1MR0VJYnZ0UURwazlWTXA5OGI4RVloTjdYN1YvL0txY1hVTTQ5OTg1cTdUREcyN2hyNmdESDZhWWUxWHYySjRHMTRzZUpQampjdEcyZktmU0MvNUNxcEVkWExDQzVGaEFWZ3NSSEl4UmozREhLTlZpU0toNmlERkdCVnhIcXBD''@;'; put 'put ''YUpNZ3EzUWZpM3BVdHZyOXVaYSsrVnZiZS95ZDdXTnpyWmxqdlNPM04vWlVIMGdtTy90MjNueEwrNDFqNXViR3FlbUdTSEdnME9xc0h1NW9uV21zcTlrVGlhWkNsVlV1MzlSa3gweUtqVFdveHZLU21rUEpobjg4NmFHNnlqZ0E4VjhBSkFhOVNocGVQUVhoMzZJcXgvM0FJNDlDZS9CLzVWSTFF''@;'; put 'put ''WTl4N3R6Y3lPVUt1alNEVEJVWEQzZzBIWWI5ZDQrY1Rvd25HOFlUcDRidjNta1p1V2NudmxzNTJiU3J2bjVYRTM2M2N0UE9lMFk0WGwwdzFuOW04U284UzgvaVZkQ2Fxc0xrV2dkY2RxNTFqRFFiNzhQa241VmYzS1A4NHU2Zi9JVHFYUGo5TXpHeXZnb1IwcFV5ZVlLK1RGVHZnN0tnYXovTWxM''@;'; put 'put ''UEpnN1p3MlBUVWtsSUZCRDlDd0l3RGhlLzcwQ1B2L2N5SDN2ZmowMTk0SEJTNTRzSy9wYitnT1JTRjhIRkM3RUUrejNRYjZFYWpDRjBUbXN1bGZJZTVhWEU0SEhhS1Z4aGxCSHcySWVsTkovRmphUG5Eeno3M0liUzhmTzdaNXg3QU81WFB2ZmttbnNRNzMzd1QralNvZXR5QVN1UWlrY3BmVnJt''@;'; put 'put ''cGticURMZlVZMlVoQnMrRUM1UThmK3VyWDdsUCs3eG5nd01lVml6aXRiRk1VTGU2ZjFtdyt4ZU5LMmlzYisyZlRYZzQ3RzJtYXB3REE4Q2Z4cmNyN1FaMi9HNTlaK3FjWi9MUEZHYVdDMi8yQjVWdnhDUGsrajh3OEcwUm10aXVQek1ET3V2MERXUGZ3dzhyYjVQdmJsblpzWTdoZC92Zmw1L0NQ''@;'; put 'put ''TnNsWkN1RDdtczdpWFR4bFNmMlFXM0hkNnZIUWxBVWJEOU1ENm5pMGJCdDE1bWptbFk0SDVZN0hDOFlpQlg1VTljTVBZNTN5ZGoxNWJOdmJGeml0YS9DRCtNdWNKNThTOS9mSUhyQU1MQXNKSTZNWjJSdlVETXBUSXVweEpwMlUzQmNuUDc3NzBLRmR3RHUvLytZMzZaeVU1VU5rWXZsRmVHZzU2''@;'; put 'put ''Mk9USEREdFFnSUNFTEo5NlF0Ynh2anpNeVNEdytRVmFPdGxiUzJZeHE4STNlREFZSXpZVTlQZVFHYnh4aDNrNjU2UDh2Z2lBakpMaUozbE0yNlh2WVZZMEJXQU1YRkFGRkJXU2tROXNJU29oNGpRQlNnckIzaTlTR2k0SnVobWFEeFFPR2pBb29obVZGYjJnZnUwSG9RS0pJUFQvTG9wMmEybFFY''@;'; put 'put ''aXFKeGdPT0kyQVcrUnhBM0p6VFlSWERZTWJhUjRrcGEyWDRidHZ1Ymw0S3BIZVdkKzh0Nld2djcycll5UjYvVjdycUtsbFMwSnVqaFA3emZ1VWl4MkJTTlZnWGYxSXZOaGEzeFBaMGFpMEpTSXRycHBnTUs2dU01TlpzR2NPVklwK3hLZG55c2M2d1lTUm5nejR0QStBaG9FcGZydUVNc2xnTnF0''@;'; put 'put ''VHFLYnc2TlRCMVBrNFYvblhBbEdQYjFXeVR3MlUvZHJhNCthQUFKTnpXNHNvVnNGTVFUenNja0tNNkN4MWxoUjZZVFoydTNOTitqQkM1Y2ZPTWtrcks0NzQrY1B0N1lkN212ZVVuVHhadHFlNWZQdjJUbmxpUWliMkxiZU9qSnphVWxjOVFWNVUvcU82VGhtOHVyOS9lcnEvLzJyZ3IwckFtUjU0''@;'; put 'put ''NVhJeFdPSG1NWmpuc2pIWUg4OE1EZDArMEh3Z1BPSHVLSS8yUmVISG4vRk1ST2JhTEFPbisvcE9EVlJIK2dxS3E0ZmoxY1BWSllXOVZRbk92M0VZMDFhVmpsK1RUWGFJandWR1FwVm9GSHVNSUN5OHlDVmEvZ3JSMWdJeGpwVllpcEp6ckVZMENtaTlMQ0FqbW5xWFFqTmR0eHBtUGRFYzRZQ2RF''@;'; put 'put ''ZzJ2NFg2UDEwNXlpRWEyQXEyYWVoamxtdmFVVFFEQk9vRnc1TVdsTFdQeDJpMm5Sa1p1M1ZJYngrTFN3MW1pWldVOEJuVHpBREZrdVoxUWdtSG10ZWxBNytySWdlem8xREdyM09YMXdwOFNiM0ZSSVRSMVF6Ukd4eGprNU1wMTR2elVheE1sUHhBVjd4enlEUHR2YVI2NHRYL3JMZjJqaTIzS1Nm''@;'; put 'put ''Tnd1bUU0RDl2TTNhbTlwWjZ4UVBYV1V5TkR0MjRkdW5lbXNSdHZhVXNtMjZqdUFrY2JMNUQvQVk4OUk1dHNXTlJEbkNoU0tsSUNGU05SMU0rQXgxYkFraDFvV2dmMHM2dkd6c2RyQ0xJd25vMWc1Q0lJUWtSUVRmUHJid0k1VEtFQVcreVRKQjlZZU9yZDJPbHlIOHUyYWY3V3Y5eDQ0ODJEZ3hO''@;'; put 'put ''eVNhc25ZUFRsZTBxSS9vQ3lGMy82UUdQbmRvOXp4R2lxS0FKY1I1ZTNrdzdBZFJtS29ZOXdIblNVWXIxZ3cwUmNTUkw3MkVYZDZvdXFuaWtIVlFrbVNDVHpNQmxoUmdLRzV1cUJrY1hKdEd3V2hHcFltQWNGUkd2QVFNdVdseU5VSGl1UGhvTXduckp3S0JTa1doYmJWY1hBNDhkMnZKcmxVcXRZ''@;'; put 'put ''cmdNVVF1ZU5sZFcrcXhKRHU4cDJwN3NPdGJVZDZrcGZYVHcyTnRiUlBqYmFRZlJLZmRkOFM3aHNxckNrcDdVN21zZ2M3ZTA5MmxGYk5heThiNnlqWTNTMG8yTU02QXNlT1NsaDhjUFJaKzEwS1ZzbHJSY3gwWU1yTTNwbUxVaFdOS3ZVMjlhTmJzT2RsWXNzODZMZUFXcm1BUUpjeUdsM0JsdzBS''@;'; put 'put ''VUZWSVJDVXo0a0c3VzZZS0Q0M1dYZFRlMjNEd01tVEJWY2xpVDI1dTBYNUVxNUxkWGNsbEpkQW9zTFZYSFpvcHVmYjVHZmd2K1dqclh6SW5tekN2SUJ5a0YzMWozMHkrS1J3Q3p5SStaekxVOVExeWJmbVdWZ1dYYjhtaXk2Qk43Ry9xcXFrdUtxcXVPUGtTYkl0V2t6ZkZrZEhsdDZpejEvK3p2''@;'; put 'put ''S0krbndmMmsrdEVoR3NvT095a3FIUEdZc2dNSmJXN1JVQkt6NGQ0M29FQUFKaVMyT3JiNElPWWhsK242WEk2M0hhMmVpa2RUbiszQnlEbUIzcFlxTTkzK1MzZWtwT2J1dGFHZkxiYjVrTjB6cXhvb2k0bDE3cjJiR1NHNGdCM2MxbzVrdEdGaXhxbExkelUwbkhoVmZSM001TlkrNE5vRFlFM2RQ''@;'; put 'put ''czQ2bzdVMVBQT2V4TzVwVmk2bEF4V3dmKzgxVXYzL2RBLzhtVFA3OGZseXF2dlR4OEIxaXpIWCtpNDZFVkdsOGwxTDlxNDhNd1UxOVVUY3lvQXpEbjVHcDg3Sk9Xekp1YSt1Sks4cVliNkFXcWw4OFQrRnZZQVhJZlFGYzlWMTVFc0I2ckZzaERGWTUreGlDSmdsNXZIOVRSbFdVMkpkQkk4Sm5l''@;'; put 'put ''RmVFdUVjWEM3TTBwbGk0S29Jb0E4REJ3c1JIVTBsb3VYczNPOWJUU0prbCtNRmwzYzFPOFBuTnpVM1dkZlBLa2E2aTJjYkxBdWF0RjQrOVVzck85UnZtbTlwZm90NGJqRFlucUZKOURONU5STzhqT09MV2tXTENBWHRJc3FaT0ZjbnFxamV5NVVzajRhcDE4WGxZSXBUVkNXTnNyVWltc3o1SENw''@;'; put 'put ''cWp5QXRGdkNURmZqZm9kRXpDdU5mbVh3bmZNdjNndW4zK2hMc2VaZ1FIMkd1Mkx4Y0RwNkkvRitxT3F3ekZ3cXEvdjlNQUMrQnZ4NFdydWVIQ2RzQlYwL0N5TWgvb2NoNW1uU0V5NVBnZnpBRVNCK3RVNTNockZrcE43Q0V3N3JIVWtjMkN1MEtsei83Vk9uVUtlbWxqbDAxSC9hVHY0VDN3dVox''@;'; put 'put ''US9tRHRSbVB2QjhFRVFWdnZCMmVrVjV2ZzFnNXB4WWs2U2ZZM0x0UXJteXQyZjFKVzRQL3FsMGJkWDNKOHhaWExGKzhGb0s3eWNJRlM5ZFQ1clpzVUpmQloyWmluQkRlSWVLL01SM0JvenIzaXkxRDE0RGhRTTB6Q094cVJiazdrZnoyYTJ6WjA4aWY5WDI4S3VBZVV0b3QvUFphaDgrVTM4QTNo''@;'; put 'put ''ZUpmV1JQZkJBTDBUbjRDV3pKVUExNVZPNFVjb252aWJsRTk0ZzQxT0t2YVdFS3VadjM1SkliOXNWU3RTbE04UHh1cW5taHJsNE1qaGM0WSs1b3ZHbWdlVFIzWmFxMEk2MmtnS2ZMOThXYkk3WERsVDVTNmE4QllWdW05dVdsMStScVIrWW9qNFhqSFdCZkFoOHJobzU3c1VpVFRtRGEzaVcyaFF5''@;'; put 'put ''VFJjeEFCc1EzdTNsN2lCemtad1YxRWNLOFhVMXUxb1RCY3hJRjlVYTAzakIwMW9pVHd3TzNuempqU1dlZkoreHhPblozb205Qis2Nzc0RHlIMFVWSmlPekNTRFBQcUxuZXNhWjlVWlZQUU1xUnJXZU9YR2xWN3VxR29DVlVKTHJHVmZBRldEckVUazhSRzBXRzVXZCtLaDZhZEtVRFhETVc2QmFR''@;'; put 'put ''Tm5nZnVVU1ZUYTRWNjBoQXQ5TnI5VVFhVmtWelUrME8xajA3dVRwSDhjZEgvblFuVDg5RHU3UGUvRXQxRml6WEk5UUMrM1g1NUhzbDg4akZadzhmSHp1aGtNbm56aHk1UG9qME9PbjhDejlYWG9MWDZNOHRKTHZBbytUMTZ5WkpCM1cwWlFYelNwQTN3TEpXYVJ3T0J4NmxyeVVBczRJVFNaSlR2''@;'; put 'put ''eVIyODdjOVkwWDNuM1RUWGU5OEkzSEg4ZUdwWWNmZmx2NU0rdDNlWWcwUWI4MldyMWpOdEFoVTJZbGF0ZVVVZmZTc2ZzRWRmWEI0Y3hsMUF3VzJDeEU2UVB0M3FKQVdjTGwrZWtkZjNQZmJUOXR2dVdMMXJ5ZHpvb0VNU3EzNFR1WFhybVA4UHBHZUhrZG5yZEp2c20rYWI1Sm92bW1CSFlvYitM''@;'; put 'put ''SHNmSTc3RkVHcDNEbm9Tbmw3dyt4M09YeUxueVl2SUQ4cUZJT0ZiQjhJRmhxM09jdnAzbGdtc3VjVkFVYm8xRzdoOXB3bW9KTWczWkpnYmhGUU5JZ3JpRnVMMXUrbEtpb1NUaC9Ob3FyRzFKeEhOdTd6ZFRjNU1iRGtUQjJOeldiUGhYdGF6cFRFeDJPMXQ3VzNGZHBHRFo0SStHN0pvdXM2ZXAz''@;'; put 'put ''aGFzOGhtRk9zN25sNTlEZnNmelU1clY4NEVmTTdkeXAxZFZoaU5WMjRldlpQQUEvQnBZL3N1VVQxT2ZIakVjeG1sUXIwaEFlcFNYblJITEZ2R0RYSWcyTjZUQk1KNEhCWlNNd0FRL1RWVjR3RjFLRURqMFVHYUpETjI2YmplRjRRd1BNYVhiYmxNRlRGWDVYZGRwYU5IbFhPT0tGZVZUMk5kOVdD''@;'; put 'put ''L09xT2RQVUY1V1dsMUVLUi9COStHbTdoUE1RVVg2RGpFOGgvTHp5RzFhdFFXMWh6L0pWNkJkTXYrYXoxVE02T0dxUW1WUE9FbXRPdW02MTJnRm16aVV2aUFUL0p2bU1XcnJRZTEvSmRtTFhxaFdXdHVDWCtUTXFsNThqZWpLTUNsRTV4VXBKY1dHQngrMTA1RnQwMk1MWHllQ3BPOVRFSWtiRFJh''@;'; put 'put ''em1Na2pyM0xrT3BTWHVsS0RoaUIyaTF5Q0UxZUFCNEsvdjI5VitvS1ZsZjhldTJ1M2xFeFcxOVlFSjVaUHBlRHhOTEhKUDN2RFJUT2JJY0Y1WGh4aXQ2QXVibEJmTmtkNTNiWGZpbEhON2t0VnAwcnpwaTZnWWRjc3kwSklXT2lHSjFrOUx1RjhQY1IzR0VtRkxNaXd5b3hWUGtzU1RBWWhYcEJY''@;'; put 'put ''Ym5hRWdtQmJxM0lYYy9sU2FWWml1MHZnbG1KYkhrZW1sZnh6dDdtNWQ2TjV5VzhtT3ZQNVlmZGVUVDg3TnBlbytNWGkyNTNDYnV0SjM2K0FuVUU1dTJJT2E1VVlYUmtZOEFOR2x4TUtTT1JFVGNKbkF1Qjh3c1QwTnZDNlA0bExiczJBejAxMExiRHVJV3l0NmhWOG01UGpySDNqaGhSZk9QUC84''@;'; put 'put ''OC9mOWttYVRjYy9nbHNHREIrRUZINklwWlVhckRCbkM3eU1YV1cxUlBjdENSbWhoTGZBdFcxQ1kwUXNVVVhoMGcrb2ltcURNalQ3cWM5N3ZDd2FMQ2tQQm9tZUNJZmFYRE5HLzRZS2lrUFlYZURXQzZva1JmOXRXZ1dNNlpCTndETDJtNWtVSDhMM2szSlhrVkdrZFVBYVBLRStUYzROWG1sUDFT''@;'; put 'put ''b0V2TGo2d2c3eml1WlBMc0gvNVpkSk9uZ0JLQjJTSXdObUN6MjNVbk41SkxSZExxN1BsbERDekJGanpkK2lDTWwxWHNmWWVhbTJlNjhSdGUyN2VnOHZxZDdXMDdxbGZLaWQzTDkwRWZUZWo3Nkh2NE4yQXRGTFpsNk1RQ0ZVVm96a0Z2NDI1Mkl0R1MwdWkwWkx2UlV0TG8vUlh6UmN2dDRNWk1Z''@;'; put 'put ''UGR1cEhOTGQrRmljNXBKRHdoSVlCQnR0SjhCRGoyQXNHNm80aXVYUWhrZmtXYjdtVXJyZUR5TVJCZ3JOczJnK0YydWdCNW5jRmdrTnBwaWpsZVIxNFJYbFdRU2ZmRy9MU3FOVkZVYnlzbzhUc0w3WFpIbnF1OHUwQWZENWVFRTdhOEJxOGpQODltY2cybDJYNmVPTkRjeW1nZTExT2F4OUhyZkQv''@;'; put 'put ''UDhnRCtKZE5MZnRRcGQ1UUI1N3RnWUc3cXpRNGdQU0lDTGRHam1CTTFiY1hLYXlFeVJzaGZYdWgxMmxXTlJZTmlsS3V4MUJLaWxUUVkzVUtERzFRbDFyeTJNR3RGb3luWHJpM05RbXdPck1aSHVNTldRVmZnN0JMRVliZWp6eVBEVXdRLytYbW1hRGVBT1FqNmVHT1lFeG9NbHRCRG04QWN5OExr''@;'; put 'put ''b1k5dUFuTTgrNnc1OUdFT1E5YkN2Snp0eHd4OHVRb0dhQUEraS9CSFZsdmtRRnZsYmp0VmpSVGxCb1JCQVJtUWpoaDBCNHlnRjhWcGNEUFZwU1k5ZDVSWU5PZXdPYUJ4dnFxYnpLQW9zVmJJa3FMMVRYNDN0Z3Zra0ZiUXNvd0dQNERmVDdZdHZmVXRYdGx5NTUza3dxTHlHTjZoUE1aclVkcFpE''@;'; put 'put ''VkVLRzJWL0ZSYjFVVUlnTEFmMVdJSjF1TmdCSEd6SFJCQUhTdW5tS2M3OTFiUWFSTUJINFFYcHJsL0pNVEoxcnNac1lPajJ3dGg5TEJmcGdFWUoyZ2hoM1cxWDNLcVVibWxhMVVvNDlZN041UGphRmlCOUF0bS9VVU8rVmtEVENpblVFSXFDRlByZDFQTHdkRzQrVmpYRldtRmNFNE5vaFFzdlRm''@;'; put 'put ''bDNKazcyV1BWbGF5WFZPL25BanJXbFZIUFI4RVJkaTg2L1dvQ2JUQWMrdm5OMWFSWHdGYXRCWW54ZXFjckNDY1pYT0ljLzE4SWNSSTl0QW5OQ2d3RlpPTG9KelBGc1AzUHduOEdzOFBueTkyZ05EM3RXbkk5bitmM3IrZ0dteGwwNU1BZkJ1cStCV2Y0dHdBVFplT0o4UE11UHI0TUJhNFhqYkR5''@;'; put 'put ''OG43bmxSMWFQQjJTcUNsNSt5V29hU2xDYjNMemEwNWcyc1BVSlk0NnJrWjhQZjByeWk5bitSRGMweXdPN1kxckpKYkNBS1dubkplVzBHTTJkbE1ENDR4L3hnclMrdmpkMjhJcTBMK0RIc2xWcE9MQ0lpNWErd1d2VC9uYnhhY0FCcTdkaGVxVk8xU3VmV1ljblZrUEM4RlN2MHZhVDYzVFBXcGlE''@;'; put 'put ''dUdvVG1CTWFETkQySzV2QUhNdkM1S0huTm9FNW5uM1dISHA2alE2anRXRzNRN3hTQXBaQWZFWkV1RFlXaW9CWVJOTGV0RmZ5NG8vY2VlZkFuV2VIejk0eGNNZWR0NS9OdmorTDJPS3lWalBqQlJzVVJYZXA4YTBMNjBobHhGZmtOWXQ2SFJoYXZURGdZMWVGbktzWXJxcjVsZ0tXU2FFbEE1NUJj''@;'; put 'put ''ZFdTSXpnWHVjdFJIcjZHS09hdUQ4cldpb3FLYUVWVjJCRnhzQjBpMlZKektaQ3RxcWN4SXZKNE1hOTgxVkZPaUdCUGtud3ZlYzM1dmRmdXJqeStNNUVFbVQ1STN5bjVSUVc0cGlrRGtvMHJEMlhxbEI4Mlo0ajMxcDZaejg2MjFzelhuZXFoRWwwenIveDZ1QXhmRXdDeGZxUHJTT2RFcC9KUWdO''@;'; put 'put ''czZWaVBDNk51azhzQ2o2K1ZwRGN4QjlPTk5ZRTVvTUZsYnR4N21lTFlmelk3bHlEZjNsOW16MnRSbnZiQzZuNXg2SzFwSGxKQmp3QlY2SGRZZkVMRzZmSmJkUEFwbUs5L2p5dmZhdlBhdzN5YXg2akozTXFmcUtwU3R1anAxWWFYcVNoNWpWVmZIV2hjNnV4WmFidnAxUjBORCsrdHFYV0tTZkJk''@;'; put 'put ''a2Z1cFpNL2p0TkhmbEI0NG9CYVV2UU1BeHJ4VlRlL2p5c0lqVmxIV3hXbFk1bndYTXVUMGxtNXhCZjlBZkQ3RFZyblg3S21JNHBSVTZwVFJMUUpOZXZhM1hkbmNmYkUwbVdQWHVjS3ErczdNK1ZWSGQxbEpUMDNxS0dKdDIxdFh0YkdvWUwrUVZ2SWRwNWU1Y1k3aXFvVEd1T0RudGVhM0JLNERy''@;'; put 'put ''SGpEdUJIVlBiWFJkQUJyY2szUDlrZ2FQcGJGYytKZXkxL01HY3E5ZnpQWS90elhudWhETXdwdFBjL21FNjhKOTRDTldvd1lrazBPRFQ1cm9pa3BGTVJEVkIzNkFHNXRJRXhaTjhHRFJLQkFraVFOZ3FjMEFVN1l4RERaTDRFeVlKUXBtdVlLdWJGZldWZWxhTU1NR1lDc1F4bzBocHVnL1BzVVlN''@;'; put 'put ''b25FTkdtQW1GQ1VpSGdnejBpbzk4c1QrRmF6UmFCT3cwcGRBNTF4Nm5KTkxEamJZTkNLemViY3hwYS8vbm0yLzUvblVXUTFnc3pTNXZNZzNhSmt1T0xXc3J5MklWcHBSdmVGdjJNWERNbHllU3FWU0lDakphY3lyYzJKaGtTeXJoWjRMRTVEbjFBd2xKLzF1dFpzVVBEbWJQbGd5emxyMXRaUll6''@;'; put 'put ''dk81c0pmNU92c0hZZkQ1WWU3OWg1ZnFZTnB1cnEyZlhkUmFIL0wyc1YzNWZPRHREeW1wWTZ2d3RkWHg1TlRROW55bU9LaWVGVmxkYzZpdlBJNU9lRjMxUVJEM0E1V2d1OU1hejhhMEdOeVNSRHJkY2tRRWZVTmhVQ2ZBZ3pCY1I1SUdNVEdSRlNqUm9nS1JHRDBvMGdFRFNReVZjWGlLMTdKc2hj''@;'; put 'put ''c2xROXI5QXBSV0lDNzdmTEFjc1U2T0hhK3dmNHN1SjZ0NVllWmU4dnkxTHEvMHJHbHRTajRLd2Z5MS91MUJaM1haVGFxVDhHbXRXNnRjZmlHcm5YbEtsazlGR042cm8vcnYybTB3WFdxL3o2UWMvMlNCbytsN2Jud0Y3UDl6SEg5dC93dHRyWkorM21aOS85dUR0OE5CR3pMdVg3UXcrRi9DZGRM''@;'; put 'put ''V2Y4djgvNGY1ZGRmaGV0aDFqK0huM3VRNStIcVdhM04vMlMxWXJ0a3A0MHRwMlFQdm5DWWNCOHZ4ZkJvQ3gzMlZkWEFkSUVjZzhYRVpENzM4cFNjVjF6TWE4SENJYnBIUW5OUnN1NUplTVhseWwwUHdtOXM3N2xsZVBoa1Q4dEMxNTdPOE9TUnN0NkJZNTNUNWEwbDQrT2Q4dmhFSjdFL2RQWDJz''@;'; put 'put ''d1BkTnczMUhzc01EZmJYOVpjbmF4cWkvYjZsdit6b2txL2ExdGw5bFlZZlVzTHN5VGkzSnlwZCtMb2p4ZHNFeCtmaGphNVRlajJVYy8yU0JvK2xmYm53TDJXdnIrNy9ZcmIvdVNsdWx6clFObEpJK2xsTzFVZjNUUURmYTNVRmlLWHZrQTVZZnBKdElKTkFGdldqTEZ6MjJZckErOUF5clFhYXQ4''@;'; put 'put ''Z3ROWUNvT1hjSEdjNlB4a3FMbzFVbGY2RDczWDZvZnNCZnBuK2p4YVd4cG9XWHRMY3dKbTBOMWt0enNGbGYxdXNpT2hJSkZ4WHE5RHF6Z2FpK0xMMHFyRnpkMEpjdDNNaVh6VjAxM01pWDlmdjlWZjdLMER2NXNqcXZ1bVhTdzF4WkNkUmxQRHgwWm1CNFM5Rys3b29JdkJ2WldyU3ZSemxYL0hL''@;'; put 'put ''d010b2YrMDVmelBjRGZ4Ui9jRTk5MyttQmFPbElhRG9KRWh3ckcvMWwvTjg4SU1PUGdoRFh4WDd2cHVmSHNMVXJTdnVkcTJSNDlmVVZHZWJYTDJud1dSbm0xeTltKzFGbFdGMlBvZjNzVWZ1NU4yZk5tZGU1ZlR5M1ZIR1R1c1AxNjg2YjFCMXV1RUM5OFcyMUJKRXVVUDkzbFIwcXd2eWFzc01z''@;'; put 'put ''VGk2cU9BRmM5ZVhtelRMWlBOVUNlbUJkak1kOXduTlpuM0NoSjdmdDRXeit5b2dlM0tUdE43SitvM0ZVM1pPM3ZFMm9nSGlnQUtTelhXNHB3cEt1QUl1WURCZ2dEQUVTa3ptMkhVdlA5aFd3RlZTMUpLdXdzTkJYNkF2NjdYYTd5MCt6TDNxZVZFd0hJbnk3WHBLanFUNk53ZCt2Q05mWHRidkxH''@;'; put 'put ''cks3OTdDbjJGZFFZRk4rYytMRWZXVnQ5VUVmM3ozazgzZ0tiRGpOTnZTcDlYN2JTQy9JYWd5bDBRdGM4SHdsV0tjdmhoakNndzFDVFlJWURVYU1qVEVzWWZCRU43OEw1bHlWM0tpMlJaTXBIYkM0aFlOMERRSFBpSVRQVWswMHNSS0F4SHBnRm55d0preSt2YmtOcG1SSFBCNVB4eHZEUVdjZ0dB''@;'; put 'put ''NjQvSFFWSW91YlRRcUNRWXZaTlhTRmM0cURTUy9EbTNsOWdmRGNMUnlCZjlFS2hUa1cxeFlLMCtKaGh0TlBhZ1hEYXE3Z1l5eE9ES3R4NGkvV3hadThQcGJLN2xaVmR1L081aGsreG1KVjFoWWIwUGxOMmw1UzJ4SnNHT1Y4eXZZWXNyWVJ0ZTNDT2o2TlF4eGpKaThDVEMrRHlSZDJrRDhoSThB''@;'; put 'put ''OFQvNUVnUUJHelJ1QkJKekoxczIrQy9SSkVZenBOZG5rQU1McmdPYmFLbnlZbWhXTUJEMDZBUHhyeSs3MDFhaE9zRll3UmJWUGRGTm90SnJxUkZORHExdFlMOXRpRmZBS25DaXFCZEc1d05UOWR2aDh2ckF2RktMVkN1R0F1cVFWV0Y5Ym9oWXZvTndTazNkMXJLb3hlZWloa3gzS3YydUZKcDFM''@;'; put 'put ''ZjU5VFovditycWFtcFIvbjZpbWVUOHhrODRrTGFQODZPblBmN1Z6V2QxdFFkZG1hWENRMm9SOXMwbGJ6K3dTQWVZcm5xRURlaDluWkdLQ05pckVCczExT2VsSEg5MVdxSjJMUStudUpTU0VnVVJNOXBvdTRObHFST0xwTFZQc2YwRVNNRERPeFVoNGpldVVXbm5IdjRlTEVwWWhjV0tRcGR5WTRU''@;'; put 'put ''QWN0c0pyakVJcWpNN0tEUmd3aFRQUUdjQUJCdHlDNnlid0krS0FTWEhrZGpQUUF6VlJybEZXUE4yTGxRc3lQWkZZcHBJR3lPZU45RzdVZ3RIUXVIQTdId3pGUGhUTWNESVJZamx0UzUrRFZWTXJhNm1YcTl5TzFndm0xclJZNnEySTZYWjF0ZFNGekVLSXU1UzlxUUZYc3RUcGhzaG1ZdnNXUlU5''@;'; put 'put ''UU00UldlWlhYTkcrU2hEUnZrb2RmNitRYlZSMkI3WjVtTmlxbzI2cXZyMnZKNlkycWpCcmlOV2xUYktxL1RmYmU4TGZCS1B2RWpma1lId0FzMXlJb1NxQVg5bVV1N3R4cEwraktzTTBBb3AvTmlJdWpvRVM2b3o4ZnVpQnZjVWExQ3pFeVhjUVNEYnQ2SVZ6WmhTNUorQnNKb3F2YTFmYjFPa25O''@;'; put 'put ''dzIvb21KaXlLZHQ0UXJXMG1WeU5rcE9lODRQbHMwOHZBMC9pN3BvYW12V3RhYXBwVHlmeEVmaUpXRmZBWEY3bWROUDFkWU5IOFlub2NBSGVGOVg5RlJUUXVEUVdyUWlGallTQlVpSVYzckk0ZXFndVhkY2FMQTVWMC9icjNDa3FsSWY3Nk9UQjRndWtSdmc2d3NQend1cldDbndCTUpkTWpQRVpi''@;'; put 'put ''K0FSZjAyMWEzb1lVMEFVdXVqT1VybmpTNDFjSTdzK2U0OElMcXpUcDkvalpuaVpOTHVoT1dFM2dGU2J2dWxPVzFWS3UraHZVaGlCNDFyZlpXcjhmSFpMTmJ1cjIrMEhRcVJFSjBKVmpNWWNwVk84K1B5dXNqTGFsTExSWktWQmVBekJGdDJtVmx4WkJoSm1mdDJHSnNsTmRsazE3YzhjK3I1WUxi''@;'; put 'put ''S0Z6S1BIbW4yemprMWdwRzFnS3czeEthdlAwK04rVzNsSm5wSzdsb0crdHJNR0Fqald0eVFkck5jVDY3TDV1KzdwOTNiUTBXTC8wRnZRM0NuSjRucDAzbWVCeWlIL1AvWCs0SG1QeU9hSmVmNEpmcDN1cG1aOVJvL29aem5VeXorSjU0VjZBR1ZWaFBPZzVEdk9jQnNQM1pMK285UVA5ZjUvNUJE''@;'; put 'put ''akhKNkQ5M01sZ1JqZUc0ZnN5U0Ivd1V4NnR2TFdZVFVaUkR4Skl0TjNwYXpaNjU2RTh0N2JST3lXbDByUVkyeTI1U1o4U0FQLysxS25GeGJjaVJ5SjRpL0tmbWFNZDM5SDJmVFN3K3ZCQk9jOXNra1JxNlEwSWExWGlabmhyVS9kMFpzdXpWN1o1K3RnbmJiRnJhdXFMYmxiN2d5VXc5K3J6Y2NQ''@;'; put 'put ''NHlhR2hrK040YjVWeThUL0RSOEo0UXZsdEZjcXVXZDJoclZrQkhsL2ZDTmVraFBsMDQ2dGkvVEdnM3hjWlhldFUvV3JsOEhDOWhOZzFlTURwUmJUeXJCUFo5VEVEK3R3bXo3cVV6VU1ZOXFHY2RhcE1kcDFxQVQyNXpnZms4Zm01YkM1aFlSSnR0SjZHcld2WHVOUzIrMWJ5SE5pcTdoc0N4U3ZR''@;'; put 'put ''UGJZT29GS0xuTTZlT0dFZzJTTW5qSFJydlZhdnh5TENFbWV4eDhXS2VxbHJZYUlGTHBvemtTMTBjV1A3eW5idkhlcnkvUXV6ZEIvOExPbGRlcXNyYzBqT0hNN3dSZnlwVDF3OTgrbXJGNVVVL2w3bXNDelBOek03Qm1NV2ZnNytCWjFYTTlvdWozc3hqVVQwT3BwZTF3c0R3RU02dlVGM3dHSWtv''@;'; put 'put ''cWlsSE15U1NjaEpPaVNUZ1FCQ3llWmtVMk1xVUIrb2kxVkJkMzVuTUJ3TTVjRzRWeWRwVjh4Qmp0K2dXM09Pak9wRENIazhPOXQ1SkJ3NUt2TUM4OHpSU1BDNmpPWklLTGZsMUp2alcxYnRqMnFzcTAzekN2VEdtdG9VY3lsMHVVWG91Sjg2RjZwdmNZTFJOcVh5NzlQcitJTFhQMVBhN3VDNVB6''@;'; put 'put ''WCs3UVUrUGNINE42WHk2U3NjWG5tZDFrdXI4UFI2UjlZL1BjSDRONlh5NzgwYlB1dDJ4cjg3T1A4YStiUFlIbmcyemtaMW5BK3M0MzFlTjAzSGVSVWY1MjV0LzN3NzJ6L2ZnZDZXUytyQUdha3ZLUmIwVWhIZGZZaDF1TUFLTGtrZUs5cmdlZWY0Nm5vTlNSSm53UFAxREtLVk5NYTZjbzNxTmVV''@;'; put 'put ''YTc5aW9kRjJOaDNEcW5WcXhkY09OaWpYV3QrTzFHdVpRZFlTV2FkZ05VbkVzS0c2YXliNkNRd0pJNzZuck44aHBleDg0ZUpsekE2NWZGQ3ZXcExZdHM1YzdSa0N0ZjI5bjllOHlYU2VvdzZLK3ZwVG94SklpZ25UZ0xpR2dGeEh5VnE4VDZOZzZnYlpTcWRhdWJMSk9vS05uYU4xMmVXQzZUckFH''@;'; put 'put ''VGwwbjBNQkZ2dWN2WGduNFphdWdsMEV2TGFoOXA0cDgvSU85b3h2aE4zbE4rSEpsK3RzbXBUV0xCMmt4VW5iWnV2MGNlVHFoeVJQSTR1UW04blJKa3lkc0tPZnlGQVI1b21jOGxLTVg1SHd2VU1SakFZcVk2WG1US2tWaUdrVW82c2dwbWdCVTY3T01Cc0w4czNXRWlXY1JmaVZ0NUtvMTRDcDUx''@;'; put 'put ''clhTVVRMWllkamxxSndHODFRYVRDQU1mbWtUV3RFZ254NFhnR2VkNjZuaEs2WG5WYXlwSXV6TUhsL0I5a08wcy8wUUNmUnR1YUFLRzRTb214Z05Ma3lNMmFKSWZWYk42SFg2c3lZTUE4WEdvMkJzQU1OME42WWc2S1pGdmllVDF6NGlYM1pac25xbGpjRklibnVuUm5KMFkzaFdXb24yNXpRVEtK''@;'; put 'put ''N29lUVlKVk0wMmFYZ0JVelRyb2R1RW85ZHYzUEJTQWNDcGRSeWNrbGYyY2dSOGNkdmFLc3kwYWF3NWQzdkhSSUVseFBpUG5TWENlRFN0OHVqNlhFZ0orQjBGelArYzVQNG51V2Fkajhwck9ETFpHbzZGRFd3SHo2V2Z5K2JTdFp3S2IvdHl0a1pFcTFITXJmOWdiVmx0QU12YkE4d2RHOVdnZ045''@;'; put 'put ''MDM0WnRoMWZXQXJDMUQ2bm5vR3hqNTZBRTZOcU5DN1ErTFJyT28vc3FCdFJUcGJRengxbk9YUXQyMkphL1FMQWdFSFR4TTZab1VMb21jN0htMUJUeTZQRGRrN1pzdXNJeGYwbzlQWVZjWUdlbFdMMXFnc0pmNUgzNFdPNVJLbndmempZeUMzRk1DTjNHdzNrcm1GUUJZbTFkQ0FON0RmaFdYU0Ra''@;'; put 'put ''Vlp3U3ZiYkRhK1AwcjUvZjV5bGZiVVZuVGNiWEhQUTdBNjZBeTArdDI3cFU3OHJXbmFROW14TW5zeXdpemMvZHluTVM1MGFuYXpmMWFKRWQwSXFkOGNMNHNZWFhDK0d1ZFh6RTkrOVFuYm1MOFlLRXZwdFRJM1JDcXhHQzY3ZXRhOHZYS0M1cGF4Ullta0E1Ylk5bjY0dm0wQTNyK0lpZHdjSjRy''@;'; put 'put ''WDNUZWthK2I0YnkyalQzajQ2Z25MYkh0YlliNWcxNTI0dHFXNW8zL0dCTzJ4UFp0aHZscG5qYlM5cHpzYUdCbjcxQzl5WFRHRGlmN3NpZ0ZmMTBueE1aUU9xbUliS1hldHcreHRUNXlMclJrV1ZpSUQ5bkcvSFRHK3dkcHJYM041TkxWM2llaXBlZXAzSis0ZURZOE5Bb3VYVC82T2pHZldUM2RS''@;'; put 'put ''RjBGdGp5Qm5WWGw5cEhPaWtGTXFORHcyTUhGOGlsa1pINzFUNTZvWTl2UUhTcjdtZ3dFYnFuWVlDR0duMGIxZURuSVV0SXlPNW9VQ2ZOZ29rbngvd3Ryb2Fpb2daWFMvbDRqUFQ2eTF0Y1hpOTg4TFBuREtFWFdUNGx6SjV6MmZyK3Ric2x0QjBTS3lrT2RUOUdMd2I5eHZaak5MRmU2U1pXdWlO''@;'; put 'put ''aEhxUVVZMkV5dTRsV3VLSmRHYm5mVzNCN1oyZDFRcFlUM3ZKeXI4ZnY5NURlemdUOW5PaHM4bnY0UmI3UFlCdldnMDJ6b3hZMmdob3JUQ2FmY2d6OW1vbys5ZVFld09razA0WUN2VU9uYWtlMm9FZW43c3hRejkrdldGR0lwOXBMdk1OYy9FSDdQYzdTT1Q0bThKa3lScmNrYWNQdkp5K0JYSGV4''@;'; put 'put ''NTZicGZrd2oyOTNteHJqUGdJVmVkaWpSSkRXcHdNUHoydEVsUkJqbHV4V0NJYmJaalQ0ZjBjUHYyVkhhM0FOVWFTb0dzQ1ZRNkhDYkhCNTl4cENzY1dzZjVQemRwTjF1czVoOXBVYTZROGhpTGk0MTNhN1NKRVBYaWRpNXRVVjg1NFVldUxLUGhxVTNPQjNadlNoZUtSQlNONWZnSGNmNERwTy84''@;'; put 'put ''ZHpCNUs5UmVYMzV1ZVZ2SXlzS3NoNEsrYm56cS9lNUJiTjlDYXNQb1A4S3oxK1doSUpWeWpMUFRiSThKZGNwWEZmZW9lbEsxSTByTnRHVnIyaTZFblVEeEVadEQrSW4zN0h0UWR5UzAvWjR0dTBjYmxxbkszbmJpOW0yYytoclBENWRicUZuVithdW43ejllKzVMdlAxNzFaZUlMRGZUTlFtZVoy''@;'; put 'put ''Y3dGOTcrSFY4bmUvdDNLZ3pQMXgvTDlwT0hydDBrWC85U05sK2ZONEkyckNYdFJ1L1p4RTY4a2wzTDdsYmozRHIwTTJMQnZlOTg3ajg5bTdqM29OWkdhTCtDTm9MbDdUZTFOaTM0QStoVjhnVHdUVEhqbWI2MW13bzV6emkxMURoUHJuNTM1UXNMeU4ycnZyR0F6aW1ENzBlL0lCZGd4dmswNjhq''@;'; put 'put ''M0NKTFM3QjVCZUNiK1BudG1DYXFReTBxc3dPdXJOb1VKVExrRkM0SU9kdUxYNm1mck54MEtMdDlrV01HYzkzeDgrSWZBR3hFK1BqYk9QOEE0SGRseE1wZXpWTXZ2anFIemVCSS9EbENiN0xHaTV3dXdQVlpyemhkNHFqMFliQThFMk0vNVlGdVF2NE5MSEUvdHdEZGZSaDhFMmtOUVl3dkE2eDhZ''@;'; put 'put ''RDl2eHp3RkFvdCtQbzdzNzUvdHhNbWdRbnZ4YlhsUlZsNC8xVnY3MU5RWXNXckRKTEpweXYvTEdtZWNRekdaaHhtNjBTYnJjYjhwSnZVTkQ5cTAzdkxWRVd3dnE5K1UwYjlodWcyL01XZGNXb3BIR29TRloxcjQ1WjJoeTZLcUpNWGxRSHRqYVU1dXA3V2hxM1BCYmRGei9oVy9SS1Yvek9aZ0RX''@;'; put 'put ''OTc0VjMvRERoNWtmK2lINFZybGM5cjM3WHdLM2dCczhNcS9lRWQ5UDFhVCt5VThLMS9HZzhIVHI4Y1IvRzE2S3RFemVveHJZeG5zQmR3RkhwbTkvLzdacFl1ZXA1LzE4djNBQUJmVDRBUUdGMGw3cFFoQVBmSkkvN05QZXk1K2o5bUQzNm5uSTllZ0hmS0VENmhXakhVaW9XVWtHSm5wcWZRNk1I''@;'; put 'put ''Y1FiUjh3WW1MQzJFeDNqR1MzQ1ZsWURTdFBQY0ZyRFVyRVk5RXF1eU1FNGFIZEdjcURVSExsMktjSXhJN2NXVTkya0pWY0NDMHZBMVI3L1N3eHluWUkxYjluWU9UZWVlOVlGeEc2ZHhUT3YzZEkzUldVdWE0TWk4clA5UVFIbERkS0Y3dm4ySkhLbmNmN2VqM21Razl2eitGMnRpZW91Nm0zMEdQ''@;'; put 'put ''MjlIWU0wZTlzd1VXa0VOOEp1azU4aHRCOUdNN3NhZTEzMG5QYW1WTURibzBBbXRkdjl4TmhhWW4rNXB3UnhzKzRNRHpyZGVicFNlMS8vYkNKdDhZMlBHeUMxMkhBYzBDMzQxcDFyZUFKclQ0RHJuOUR2YjZ5UnN1dlg4cGVsNDduWHIrb1hVZHpCM092djVLOTNuMHE5L3E1N1BXRmVlMXN0RzNr''@;'; put 'put ''SHBZalQ4QzhJd0VuaG5sdlhGWURzMC9tVk5QazRPRWVGblJaYzVGeGtqdGRmMUp4d21PdlhLeW9jZGRqYTNGRDQyeU9HNGl6UDUwejlwZXlPTWk3anR0RFdyci9OWFpPajBidnBEMndWVHR4QjlONk9MaXZYMzlmdnpTSy9oL2lFeno2QUFFQUFBQUJBQUJWRXJUK1h3ODg5UUFmQStnQUFBQUEw''@;'; put 'put ''OEdkaGdBQUFBRFV2cWIxL3piKzR3U0tBODRBQUFBSUFBSUFBQUFBQUFCNDJtTmdaR0JnUHZmdlBBTUR5K2IvWnY5eldMb1lnQ0xJZ05FUUFLY05CcmdBQUFCNDJuV1V6V3NUVVJURno3MHpGRUVJMkVSUVFvekdZRXhNcWttMTBXb3RhV3BpQld2c1JxeFlGMUlYTGxTNlVFUUZrYTVFUlYyNGMx''@;'; put 'put ''WHAwb1ZLZDNhaENBWDlDMFJRdXRDQ0NoVktvUzZNNXo0ekVwT2FjRGp6OGQ2OGUzL3Z6TWdTVG9NL09VcEZxUlFxTW8rU1RpR2hFNGg3UmFUMUNiWklCMHB5QlQzVU5ubUFMajJCZ3h6Zkx4ZVJsL1hvazluNlYzM0o0OXZvMUZQSTh2NG12VW1keFE2OWpsMDZpbTQ5and5UEMyNDg1K293aXZZ''@;'; put 'put ''YyttRlpRZGk3eEhtTENPc01hdm9NT1YyaDMwQ1ZkVlQxQzg4L29pb2hER2tjNi9RcGp1a0JsTHd6cUhrK2xlSDllNmc2Zit6bXhMbFdrczhiMGgrSStFVnMxTmZZd0hscjlDNjY1UnFPc09abGVrNFdzRk5yOVY4eXpwcktTT2tkVkRTQjdmU3NqaUFsRTRqcEpHc2Z3NEFJOW92VTU3UkFIb0t5''@;'; put 'put ''OXdnRHZGN1dxMjU4eGViSWZUSmN3bWFaNUx3eHNxeWgwNnR5N1R3aTdEZWlJWFRKUXlRbGlYUDBsTHpDSG5JZmRHdmVRdDVxbERuV3NwdjMzcEd4MVRYRlBRRDJTZGxkejVKWGduMkZuUmIvbFova0dzYlAyRFZKUXZXM3hvLytqWnIzb2tnSDdGcWxtUVpMNDljczQwZk9lcEl5VnF2SWUwRzNY''@;'; put 'put ''c2l1V2VUMnhwalJQMU1mOURJS2Y5bTF5bkpoYnZ5YVpmeU1zN24xYTJ1MnV2VnU2d2R1T2VLK1dML01jdGJ4c0pxYS9YalR1V1hOOXJ2aFpQV0o5YjRudTcyc0g0NGgrM0FaWkE0c2grNDg4SEhFWkFReFkydjl0Ymx4WlcrQit5SGsvQTdXeWR4YWR0cWNXYlk4dFRuejdUSVd1TzJQTWZxUDJ6''@;'; put 'put ''dmdjbWg3YVB3YTc0TGxzZFV0NHpMRDdEV0VuL1JSYXBDYTVaaER2SVo2VC9ETVZtOWoybGlUZGNOYitQTzk0VE9CYVVEN2tQY3U4TnNSUmEvN0xxeEZMOVV2MCtTMTdMNFY4SjhqTGNQWVNuRi82OTlkUGp6TzViNnU4cStnOGhzcFk5Zk9lTnBGd2wxSTRuQUFBUEMxbHQrdU1wdE85M0grTjZl''@;'; put 'put ''Yk83ZTVOVUY2a2lQaUNCL2lpQWlKSG82SU9PUTRJcUtISXlUaWtCNE9rWkNJT0VJaUl1S0lFTG1Ia09naFlrUVBJUkVSUi9RZ0l0SkR5Q0VSOTNKdy9INFFCR1grMlliMnU2Q3VORXpBMytFaitBcHVkZi9vUHU5dUlSWkVRSkpJRHRsSDZqMGpQY3M5NXliQk5HWTZNYjh4cDgwWjg2cTViRFlz''@;'; put 'put ''bEtWdDVhekwxalByaTAyMFRkajJiTmUyaHAyd2o5cm43SGw3eFFFNUVvNkNvK1lVbldQT3JIUFBXVU1obEVQSDBWVjBFelhRVnEramwrdmQ2UnZ1Vyt2MzlzLzNYN3FtWEdWWGUyQmlZSHZnd2kyNmw5elZRVzV3WS9BU1k3RVo3QUF6c0k2SDgweDdjcDVyVDh1cmUwZThTOTVUSE1WVCtEcGV4''@;'; put 'put ''TXY0RmY3cVkzMXJ2cnl2N3V2NEhYN0tML3VUL2cvK0xTSkRyQkI1b2tTVWlYUGlsbWdTcitSN01rMW15QlV5VDViSU1ubE5UVk9mcVN4Vm9IYXBDdlZNcCtrNWVvRmVvZGZwSWwwS0pBSjNnWHJnR1VEQUFieUFCVElZQm52Z0dGU0JBVzdBSTNoaUVzd0pjOEhVbUFlbXhYVFlKWGFWM1dCMzJH''@;'; put 'put ''TzJHdXdML2dvYXdadGdJOWptTEp5UEE1ekIzWE1ON2lWa0NZMkhhcUY2NkRsc0NydkNWUGlKaDNtVWY4Y2Y4bFcreGovd0xRRVNYQUlyNk1Lc1VCTEt3cWx3S2R3S1RlRlB4QmJCSXVHSUZzbUtpSWlKUUl5S0NYRk1uQlRueGNXM3FTZ1VkVVdwNklFMExuMlVGcVZ2VWtIYWxZNmtNK2xLWnVW''@;'; put 'put ''TitVQ3V5QmR5VGE3TEhjV2tlQlZXMFpXa3NxQnNLQldsR2NOaWs3RkM3TGNLcTdLYVZGUHFqUHBKL2FybTFDMzFVSzJxaG5xdk52N1RFSTNTUnJWSnJhajkxTzYwcHRZY2VoaHE2elo5V2MvcFJkM1FiL1JIL1VsL2lWdmk3dmhVZkRiK0paNk41LzhDREJETXlBQUJBQUFCUEFCb0FBb0FRUUFF''@;'; put 'put ''QUFJQUtBQTVBSXNBQUFDVEFtc0FBd0FCZU5xTmtzdE93a0FVaHY4V05LREdLREhHc09yS0dCTzVxZUJ0WWRTd1VkUkloSzBnRlJyQllpbEdYZm8yYmx6NkRGNmV3STJQNERQNGR6aXROMkxJcEoxdjV2em5Qek9uQlJERE8wTFF3bEVBTzN4NnJHR09xeDdyR0VkVE9JUU4zQXFIc1lKSDRTSEU4''@;'; put 'put ''U0U4akZrdEloeEJSa3NJUnhIWFRvUkhzYVQ1UG1Nb2FRL0NFNWpTdzhLVGlPa3p3aytZMXVlRm41SFNONFZmRU5IYndxOFkwYTk3L0JaQ1hML0RObXkwY1FNSEZ1cG93SVdCZXo0WnBKQkdsbFJsMUtDdW9UUWRjcEZ6aTFrZDVsNGdnUUpNNWpuS3lXWWZmSlZKbFVYYVVyczFISEduamk2NVFu''@;'; put 'put ''V2FtU2sxMW5HTVhaU3hUK3JudFJCNCtVNkRWalIrMVN4eDVWQnJxWk1iMzg0d1dOMFMrWlE2bTBxdkt3ZDBNVGw3MlRYR0t1UkR4cjNZSHVmYVAzM3pldTF5dFlZa3g5VVBaMXY1dGdMWEJHTTIxMzVPUjdMcWpMcmM3ZklyK1pva1o3OW1TOTMxcTJheTd6Mzc3ZjN0WlprN1Zad3BIemZvWFVF''@;'; put 'put ''Nm1WZFJneU9yWWptZU1JMVZ2aGV4SFB4UE9aeFRaNm82am55RmZPQll4Q1Z2WWpIaVVOUDhCTGhaaDVjQUFIamFiWk5YYkJ4VkZJYS8zN0YzM1RaTzc3MVh4MTczeENrdWE4ZXhZeWN1Y2V6RVNjYTdZMmZ4ZWhmR3UzRnN1Z1FDSGtEd3dqUGxDUkM5Q2lSNFFLSlgwWHNIMFhta0IrL2NDVjRr''@;'; put 'put ''N3NOOC94bWQ4NTh6OTk0aEMzZWRHMkFlLzdOVW0zNlF4UXl5eWNHSG4xenl5S2VBUWdMTXBJaFp6R1lPYzZmcTU3T0FoU3hpTVV0WXlqS1dzNEtWckdJMWExakxPdGF6Z1kxc1lqTmIyTW8ydGxQTURrb29KVWdaNVZSUVNSWFYxTENUWGRTeW16M3NaUjkxMU5OQUl5R2FhR1kvTFJ5Z2xUWU8w''@;'; put 'put ''azRIaHpoTUoxMTAwOE1SZWpsS0gvMGM0emdEbk9Ba3A3QzRuYXU0bXB1NWdUdDRuK3U1bHFmNW1EdTVqYnQ1bm1lNWgwSEMzRWlFRjdGNWpoZDRsWmQ0bVZmNGxpSGU0RFZlNTE2RytZV2JlSnMzZVl2VGZNK1BYTWNGUkJsaGxCaHhiaUhCUlZ5SXd4Z3BrcHhobk84NHl5UVRYTXlsWE1KajNN''@;'; put 'put ''cmxYTVlWWE1rUC9NVGp5dElNWlN0SFB2bjVpNzg1SjVTclBPVkxLbENoQXBxcElzM1NiTTNoVjM3VFhNM1RmQzNRUWkzaWQ5N1JZaTNSVWkzVGNxM2djNzdRU3EzU2FxM1JXcTNUZW0zUVJtM2lQdTdYWm0zUlZtM1RkaFZyaDByNGd6LzVrcTlVcXFES1ZLNEtWYXBLMWFyUlR1MVNyWFpyai9a''@;'; put 'put ''cUgwK29UdlZxVUNOZjg0MUN2TXRuZk1DSGZNU252TWNuYWxLejlxdEZCOVNxTmgxVXV6cDBTSWZWcVM1MXEwZEgxTXNEUE1nalBNcERQTXcxM0tXalBNT1RQS1UrZmxhL2p1bTRCblJDSjNWS2xnWVZWa1MyaHZ4MW8xYllTY1Q5bHFHdmJ0Q3h6OWcreTRXL0xqR2NpTnNqZnN2UTF4aTIwa2tS''@;'; put 'put ''ZzhhcENpdnBEM2tXdG1GK0tKSklXdUd3SFUvbTIvOUtmOGl6c2oycmtQR3dYUlEyaHhPam81WkpMUnpPQ1B3dG5udlVZNHZuRXpVc2JNMnNITWtJZkcxV09KVzBmVEdETnRNdlp0QnVYc1pkRkxabmVzUXpQZHBOZXR5RnY4T2JJV0VZNkRpZGlnOWJUbW8wWnFXU2dVUm01T3MwSFJ6VG9UT3pn''@;'; put 'put ''NVBab2ROMGNBeTZUTldZQzM4cUhpMHByUXg2TFBOMW02U2ttYWJIbXlabG1OUGpST1BET2FuME05RHpuOGxTbVpHL3g5dkJsR0ZCYnpqcWhGT2pRekg3Yk1GNGh1N0wwQlBUMnRkdlpweDBrZDgvZmRxVDA2ZWRuamhZVnVXeUxGanA2eDEycktsck5XN1FheHpHWGVUMVJxSzJZNDlGeC9MR3o2''@;'; put 'put ''dDBYV21vdnRwampjY0dqNDIrUG1NMDRTTDlObGhTRXZSWTVySGNZNFhIU3NOZ1UzWW81U1Rjb0tLcEljY3F0bUxKZk11ZHhVajM3cWRsa1RYOTJlazRZSjBmMENTNjNkT3l3UHQ5akRiN210WjVWdm8wVEhJeUdvdTR5Ym5XMk5RZVJXd25MMko3NmgrM1piY2hBQUFBZU5wajhON0JjQ0lvWWlN''@;'; put 'put ''alkxL2tCc2FkSEF3Y0RNa0ZHeG5ZblRaSk1qSm9nUmliZVRnWU9TQXNNVFl3aThOcEY3TURBeU1ESjVETjZiU0xBY3BtWm5EWnFNTFlFUml4d2FFallpTnppc3RHTlJCdkYwY0RBeU9MUTBkeVNBUklTU1FRYk9iallPVFIyc0g0djNVRFMrOUdKZ2FYemF3cGJBd3VMZ0QrSENWZ0FBQUFBQUZZ''@;'; put 'put ''bVBaM0FBQT0pIGZvcm1hdCgid29mZiIpO2ZvbnQtd2VpZ2h0OjYwMDtmb250LXN0eWxlOm5vcm1hbH06cm9vdCBbY2RzLXRoZW1lXXstLWNkcy1hbGlhcy11dGlsaXR5LWdyYXk6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tNjAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29u''@;'; put 'put ''dGFpbmVyLWJhY2tkcm9wLWJhY2tncm91bmQ6aHNsYSgwLCAwJSwgMTAwJSwgLjYpOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTUwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rp''@;'; put 'put ''b24tYmFja2dyb3VuZC1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zZWxlY3RlZDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWJsdWUtNzUpOy0tY2RzLWFsaWFzLW9iamVjdC1p''@;'; put 'put ''bnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2VsZWN0ZWQtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3Ry''@;'; put 'put ''dWN0aW9uLTIwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLW91dGxpbmU6SGlnaGxpZ2h0IGF1dG8gMnB4Oy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbmZvLXNlbGVjdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS05MDApOy0tY2RzLWFsaWFzLW9iamVj''@;'; put 'put ''dC1pbnRlcmFjdGlvbi1pbmZvLWFjdGl2ZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8tY2xpY2spOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1zdWNjZXNzLWFjdGl2ZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXN1Y2Nlc3MtY2xp''@;'; put 'put ''Y2spOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi13YXJuaW5nLWFjdGl2ZTp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLXdhcm5pbmctY2xpY2spOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1kYW5nZXItYWN0aXZlOnZhcigtLWNkcy1hbGlhcy1vYmpl''@;'; put 'put ''Y3QtaW50ZXJhY3Rpb24tZGFuZ2VyLWNsaWNrKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tbmV1dHJhbC1hY3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1uZXV0cmFsLWNsaWNrKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24taW52ZXJzZS1h''@;'; put 'put ''Y3RpdmU6dmFyKC0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1pbnZlcnNlLWNsaWNrKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi0xMDApOy0tY2RzLWFsaWFzLW9iamVjdC1p''@;'; put 'put ''bnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTIwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9u''@;'; put 'put ''LTMwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci13aGl0ZSk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtc2VsZWN0ZWQtaG92ZXI6dmFyKC0tY2Rz''@;'; put 'put ''LWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1zZWxlY3RlZC1hY3RpdmU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVy''@;'; put 'put ''LWJhY2tncm91bmQtaW52ZXJzZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2dyb3VuZC1pbnZlcnNlLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tODAwKTstLWNkcy1hbGlh''@;'; put 'put ''cy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtaW52ZXJzZS1zaGFkZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi01MDApfTpyb290IFtjZHMtdGhlbWV+PWRhcmtdey0tY2RzLWFsaWFzLXV0aWxpdHktZ3JheTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVj''@;'; put 'put ''dGlvbi0zMDApOy0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLWRhcms6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS02MDApOy0tY2RzLWFsaWFzLXN0YXR1cy13YXJuaW5nLXRpbnQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1vY2hyZS05MDApOy0tY2RzLWFsaWFzLXN0YXR1cy1kYW5n''@;'; put 'put ''ZXItdGludDp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLXJlZC05MDApOy0tY2RzLWFsaWFzLW9iamVjdC1jb250YWluZXItYmFja2Ryb3AtYmFja2dyb3VuZDp2YXIoLS1jZHMtYWxpYXMtb2JqZWN0LW9wYWNpdHktMzAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3Vu''@;'; put 'put ''ZC1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFj''@;'; put 'put ''dGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS05MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWFs''@;'; put 'put ''aWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNlbGVjdGVkLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTcwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWluZm8tc2VsZWN0ZWQ6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1ibHVlLTUw''@;'; put 'put ''MCk7LS1jZHMtYWxpYXMtb2JqZWN0LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGU6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tOTAwKTstLWNkcy1hbGlhcy1vYmplY3QtaW50ZXJhY3Rpb24tYmFja2dyb3VuZC1zaGFkZS1ob3Zlcjp2YXIoLS1jZHMtZ2xvYmFsLWNv''@;'; put 'put ''bG9yLWNvbnN0cnVjdGlvbi04MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLWFjdGl2ZTp2YXIoLS1jZHMtZ2xvYmFsLWNvbG9yLWNvbnN0cnVjdGlvbi02MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRl''@;'; put 'put ''LXNlbGVjdGVkOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItYmx1ZS05MDApOy0tY2RzLWFsaWFzLW9iamVjdC1pbnRlcmFjdGlvbi1iYWNrZ3JvdW5kLXNoYWRlLXNlbGVjdGVkLWhvdmVyOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTgwMCk7LS1jZHMtYWxpYXMtb2JqZWN0''@;'; put 'put ''LWludGVyYWN0aW9uLWJhY2tncm91bmQtc2hhZGUtc2VsZWN0ZWQtYWN0aXZlOnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTYwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2U6dmFyKC0tY2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1''@;'; put 'put ''Y3Rpb24tMjAwKTstLWNkcy1hbGlhcy1vYmplY3QtY29udGFpbmVyLWJhY2tncm91bmQtaW52ZXJzZS10aW50OnZhcigtLWNkcy1nbG9iYWwtY29sb3ItY29uc3RydWN0aW9uLTEwMCk7LS1jZHMtYWxpYXMtb2JqZWN0LWNvbnRhaW5lci1iYWNrZ3JvdW5kLWludmVyc2Utc2hhZGU6dmFyKC0t''@;'; put 'put ''Y2RzLWdsb2JhbC1jb2xvci1jb25zdHJ1Y3Rpb24tMzAwKX1AZm9udC1mYWNle2ZvbnQtZmFtaWx5OnRleHQtc2VjdXJpdHktZGlzYztzcmM6dXJsKGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9ub3BwYS90ZXh0LXNlY3VyaXR5L21hc3Rlci9kaXN0L3RleHQtc2VjdXJpdHkt''@;'; put 'put ''ZGlzYy53b2ZmKX1ib2R5W2Nkcy10aGVtZT1kYXJrXXtzY3JvbGxiYXItd2lkdGg6dGhpbjtzY3JvbGxiYXItY29sb3I6IzNiNTI2OCAjMjczODQ5fWJvZHlbY2RzLXRoZW1lPWRhcmtdOjotd2Via2l0LXNjcm9sbGJhcnt3aWR0aDoxMXB4fWJvZHlbY2RzLXRoZW1lPWRhcmtdOjotd2Via2l0''@;'; put 'put ''LXNjcm9sbGJhci10cmFja3tiYWNrZ3JvdW5kOiMzYjUyNjh9Ym9keVtjZHMtdGhlbWU9ZGFya106Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JhY2tncm91bmQtY29sb3I6IzI3Mzg0OTtib3JkZXItcmFkaXVzOjZweDtib3JkZXI6M3B4IHNvbGlkICMzYjUyNjh9Ym9keVtjZHMtdGhlbWU9''@;'; put 'put ''ZGFya10gY2xyLWljb24uaXMtaGlnaGxpZ2h0e2ZpbGw6IzRlYzBmZn1ib2R5LGh0bWx7Zm9udC13ZWlnaHQ6NDAwIWltcG9ydGFudDtwYWRkaW5nOjA7bWFyZ2luOjB9Ym9keS5zaG91bGQtbG9naW4gY2xyLW1vZGFsLGh0bWwuc2hvdWxkLWxvZ2luIGNsci1tb2RhbHtkaXNwbGF5Om5vbmUh''@;'; put 'put ''aW1wb3J0YW50fWJvZHlbY2RzLXRoZW1lPWRhcmtdIGJ1dHRvbjpmb2N1c3tvdXRsaW5lOm5vbmV9Ym9keVtjZHMtdGhlbWU9ZGFya10gYnV0dG9uOmZvY3VzLXZpc2libGV7b3V0bGluZToxcHggc29saWQgcmdiKDI1NSwyNTUsMjU1KX1ib2R5W2Nkcy10aGVtZT1saWdodF0gYnV0dG9uOmZv''@;'; put 'put ''Y3Vze291dGxpbmU6bm9uZX1ib2R5W2Nkcy10aGVtZT1saWdodF0gYnV0dG9uOmZvY3VzLXZpc2libGV7b3V0bGluZToxcHggc29saWQgcmdiKDAsMCwwKX0uc2VsZWN0LXRhYmxlLWljb24sLnNlbGVjdC1saWJyYXJ5LWljb257d2lkdGg6ODBweH1bY2RzLXRleHQ9bGFiZWxde2NvbG9yOnZh''@;'; put 'put ''cigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jb2xvci0yMDApfVtjZHMtdGV4dD1sYWJlbExpbmtde2xpbmUtaGVpZ2h0OjEuOCFpbXBvcnRhbnR9W2Nkcy10ZXh0PWNhcHRpb25fY2xlYW5de2ZvbnQtc2l6ZTp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY2FwdGlvbi1mb250LXNpemUp''@;'; put 'put ''O2ZvbnQtd2VpZ2h0OnZhcigtLWNkcy1nbG9iYWwtdHlwb2dyYXBoeS1jYXB0aW9uLWZvbnQtd2VpZ2h0KTtsaW5lLWhlaWdodDp2YXIoLS1jZHMtZ2xvYmFsLXR5cG9ncmFwaHktY2FwdGlvbi1saW5lLWhlaWdodCk7bGV0dGVyLXNwYWNpbmc6dmFyKC0tY2RzLWdsb2JhbC10eXBvZ3JhcGh5''@;'; put 'put ''LWNhcHRpb24tbGV0dGVyLXNwYWNpbmcpfVtjZHMtdGV4dD1jYXB0aW9uX2NsZWFuXTphZnRlcixbY2RzLXRleHQ9Y2FwdGlvbl9jbGVhbl06YmVmb3Jle2Rpc3BsYXk6bm9uZX0ubG9nLXdyYXBwZXJ7bWluLWhlaWdodDo1MHB4O3BhZGRpbmc6MTBweDttYXJnaW4tdG9wOjEwcHg7d2hpdGUt''@;'; put 'put ''c3BhY2U6cHJlLXdyYXA7Ym9yZGVyLXJhZGl1czozcHg7Ym9yZGVyOjFweCBzb2xpZCAjZTJlMmUyO2hlaWdodDo0OHZoO292ZXJmbG93OmF1dG99LnNsaWRlcntwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDozMjBweDttYXJnaW4tbGVmdDo3NXB4O21hcmdpbi10b3A6NzBweDtoZWlnaHQ6NXB4''@;'; put 'put ''O292ZXJmbG93LXg6aGlkZGVufS5saW5le3Bvc2l0aW9uOmFic29sdXRlO29wYWNpdHk6LjQ7YmFja2dyb3VuZDojNzNkNTQ0O3dpZHRoOjE1MCU7aGVpZ2h0OjVweH0uc3VibGluZXtwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOiM3M2Q1NDQ7aGVpZ2h0OjVweH0uaW5je2FuaW1hdGlv''@;'; put 'put ''bjppbmNyZWFzZSAycyBpbmZpbml0ZX0uZGVje2FuaW1hdGlvbjpkZWNyZWFzZSAycyAuNXMgaW5maW5pdGV9QGtleWZyYW1lcyBpbmNyZWFzZXswJXtsZWZ0Oi01JTt3aWR0aDo1JX10b3tsZWZ0OjEzMCU7d2lkdGg6MTAwJX19QGtleWZyYW1lcyBkZWNyZWFzZXswJXtsZWZ0Oi04MCU7d2lk''@;'; put 'put ''dGg6ODAlfXRve2xlZnQ6MTEwJTt3aWR0aDoxMCV9fS5hcHAtbG9hZGluZ3tkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7aGVpZ2h0OjEwMHZoO2JhY2tncm91bmQ6IzMxNDM1MTtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ei1pbmRleDoyMDAw''@;'; put 'put ''O3Bvc2l0aW9uOmZpeGVkO2luc2V0OjB9LnNlbGVjdC1ub25ley13ZWJraXQtdXNlci1zZWxlY3Q6bm9uZTt1c2VyLXNlbGVjdDpub25lfS5oLWF1dG97aGVpZ2h0OmF1dG99LmgtdW5zZXQtaXtoZWlnaHQ6dW5zZXQhaW1wb3J0YW50fS5taW4taC01MHZoe21pbi1oZWlnaHQ6NTB2aH0uaC0y''@;'; put 'put ''NHZoLC5oLTI1dmh7aGVpZ2h0OjI1dmh9LmgtNzB2aHtoZWlnaHQ6NzB2aH0uaC04MHZoe2hlaWdodDo4MHZofS5oLTEwMHtoZWlnaHQ6MTAwJX0udy01MHZ3e3dpZHRoOjUwdnd9LnctMTAwe3dpZHRoOjEwMCV9LnctMTAwLWl7d2lkdGg6MTAwJSFpbXBvcnRhbnR9LnctNDB7d2lkdGg6NDAl''@;'; put 'put ''fS5taW4tdy0we21pbi13aWR0aDowcHh9Lm14LTV7bWFyZ2luOjAgNXB4fS5teS01e21hcmdpbjo1cHggMH0ubXktMTV7bWFyZ2luOjE1cHggMH0ubXktMTAtbXgtYXV0b3ttYXJnaW46MTBweCBhdXRvfS5tLTB7bWFyZ2luOjAhaW1wb3J0YW50fS5tLTEwe21hcmdpbjoxMHB4fS5tdC0we21h''@;'; put 'put ''cmdpbi10b3A6MH0ubXQtMC1pe21hcmdpbi10b3A6MCFpbXBvcnRhbnR9Lm10LTMtbmVnYXRpdmV7bWFyZ2luLXRvcDotM3B4fS5tdC01e21hcmdpbi10b3A6NXB4fS5tdC01LWl7bWFyZ2luLXRvcDo1cHghaW1wb3J0YW50fS5tdC0ye21hcmdpbi10b3A6MnB4fS5tdC0yLWl7bWFyZ2luLXRv''@;'; put 'put ''cDoycHghaW1wb3J0YW50fS5tdC0xMHttYXJnaW4tdG9wOjEwcHh9Lm10LTE1e21hcmdpbi10b3A6MTVweH0ubXQtMjB7bWFyZ2luLXRvcDoyMHB4fS5tbC0we21hcmdpbi1sZWZ0OjB9Lm1sLTN7bWFyZ2luLWxlZnQ6M3B4fS5tbC01e21hcmdpbi1sZWZ0OjVweH0ubWwtNS1pe21hcmdpbi1s''@;'; put 'put ''ZWZ0OjVweCFpbXBvcnRhbnR9Lm1sLTEwe21hcmdpbi1sZWZ0OjEwcHh9Lm1sLTE1e21hcmdpbi1sZWZ0OjE1cHh9Lm1sLTIwe21hcmdpbi1sZWZ0OjIwcHh9Lm1sLTIwLWl7bWFyZ2luLWxlZnQ6MjBweCFpbXBvcnRhbnR9Lm1yLTB7bWFyZ2luLXJpZ2h0OjB9Lm1yLTV7bWFyZ2luLXJpZ2h0''@;'; put 'put ''OjVweH0ubXItNWl7bWFyZ2luLXJpZ2h0OjVweCFpbXBvcnRhbnR9Lm1yLTEwe21hcmdpbi1yaWdodDoxMHB4fS5tci0xMnttYXJnaW4tcmlnaHQ6MTJweH0ubXItMjB7bWFyZ2luLXJpZ2h0OjIwcHh9Lm1iLTB7bWFyZ2luLWJvdHRvbTowfS5tYi0waXttYXJnaW4tYm90dG9tOjAhaW1wb3J0''@;'; put 'put ''YW50fS5tYi01e21hcmdpbi1ib3R0b206NXB4fS5tYi0xMHttYXJnaW4tYm90dG9tOjEwcHh9Lm1iLTEwLWl7bWFyZ2luLWJvdHRvbToxMHB4IWltcG9ydGFudH0ubWItMTV7bWFyZ2luLWJvdHRvbToxNXB4fS5tYi0yMHttYXJnaW4tYm90dG9tOjIwcHh9Lm1iLTMwe21hcmdpbi1ib3R0b206''@;'; put 'put ''MzBweH0ucC0we3BhZGRpbmc6MH0ucC0xMHtwYWRkaW5nOjEwcHh9LnBiLTB7cGFkZGluZy1ib3R0b206MH0ucGItMTB7cGFkZGluZy1ib3R0b206MTBweH0ucHktNXtwYWRkaW5nOjVweCAwfS5weS0xMHtwYWRkaW5nOjEwcHggMH0uYmFja2dyb3VuZC10cmFuc3BhcmVudHtiYWNrZ3JvdW5k''@;'; put 'put ''OnRyYW5zcGFyZW50fS5iYWNrZ3JvdW5kLXRyYW5zcGFyZW50LWl7YmFja2dyb3VuZDp0cmFuc3BhcmVudCFpbXBvcnRhbnR9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIC5jb2xvci1ncmF5e2NvbG9yOiM1YTVhNWF9Ym9keVtjZHMtdGhlbWU9bGlnaHRdIC5jb2xvci1kYXJrLWdyYXl7Y29sb3I6''@;'; put 'put ''IzQ5NTk2N31ib2R5W2Nkcy10aGVtZT1saWdodF0gLmNvbG9yLWRhcmtlci1ncmF5e2NvbG9yOiMzMTQzNTF9LmNvbG9yLXdoaXRle2NvbG9yOiNmZmZ9LmNvbG9yLXdoaXRlLWl7Y29sb3I6I2ZmZiFpbXBvcnRhbnR9LmNvbG9yLWdyZWVue2NvbG9yOiM0YjllNGJ9LmNvbG9yLWRjLWdyZWVu''@;'; put 'put ''e2NvbG9yOiM4MWI0NDB9LmNvbG9yLXJlZHtjb2xvcjojZTQ1NDU0fS5jb2xvci1vcmFuZ2V7Y29sb3I6I2U2N2UyMn0uY29sb3ItYmx1ZXtjb2xvcjojM2Y4Y2MzfS5jb2xvci15ZWxsb3d7Y29sb3I6I2YxYzQwZn0uY3Vyc29yLXBvaW50ZXJ7Y3Vyc29yOnBvaW50ZXJ9LmN1cnNvci1kZWZ1''@;'; put 'put ''YWx0e2N1cnNvcjpkZWZhdWx0fS5jdXJzb3ItZGVmYXVsdC1pe2N1cnNvcjpkZWZhdWx0IWltcG9ydGFudH0uYmFja2dyb3VuZC10cmFuc3BhcmVudHtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5wb2ludGVyLWV2ZW50cy1ub25le3BvaW50ZXItZXZlbnRzOm5vbmV9LndoaXRlc3Bh''@;'; put 'put ''Y2Utbm93cmFwe3doaXRlLXNwYWNlOm5vd3JhcH0udGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LmZvbnQtc2l6ZS0xNXtmb250LXNpemU6MTVweH0uZm9udC1zaXplLTE4e2ZvbnQtc2l6ZToxOHB4fS5mb250LWJvbGR7Zm9udC13ZWlnaHQ6NzAwfS5mb250LWJvbGQtaXtmb250LXdl''@;'; put 'put ''aWdodDo3MDAhaW1wb3J0YW50fS5mb250LXdlaWdodC0zMDB7Zm9udC13ZWlnaHQ6MzAwfS5mb250LXdlaWdodC03MDB7Zm9udC13ZWlnaHQ6NzAwfS53b3JkLWJyZWFre3dvcmQtYnJlYWs6YnJlYWstd29yZH0ud29yZC1icmVhay1hbGx7d29yZC1icmVhazpicmVhay1hbGx9LnBvc2l0aW9u''@;'; put 'put ''LXJlbGF0aXZle3Bvc2l0aW9uOnJlbGF0aXZlfS5wb3NpdGlvbi1hYnNvbHV0ZXtwb3NpdGlvbjphYnNvbHV0ZX0uZC1ub25le2Rpc3BsYXk6bm9uZX0uZC1ibG9ja3tkaXNwbGF5OmJsb2NrfS5kLWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9ja30uZC1mbGV4e2Rpc3BsYXk6Zmxl''@;'; put 'put ''eH0uZC1jb250ZW50c3tkaXNwbGF5OmNvbnRlbnRzfS5mbGV4LXVuc2V0e2ZsZXg6dW5zZXR9LmFsaWduLXNlbGYtZW5ke2FsaWduLXNlbGY6ZmxleC1lbmR9LmFsaWduLXNlbGYtc3RhcnR7YWxpZ24tc2VsZjpmbGV4LXN0YXJ0fS5hbGlnbi1pdGVtcy1jZW50ZXJ7YWxpZ24taXRlbXM6Y2Vu''@;'; put 'put ''dGVyfS5qdXN0aWZ5LWNvbnRlbnQtY2VudGVye2p1c3RpZnktY29udGVudDpjZW50ZXJ9Lmp1c3RpZnktY29udGVudC1jZW50ZXItaXtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyIWltcG9ydGFudH0uanVzdGlmeS1jb250ZW50LXN0YXJ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5qdXN0''@;'; put 'put ''aWZ5LWNvbnRlbnQtZW5ke2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uanVzdGlmeS1jb250ZW50LWJldHdlZW57anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW59Lmp1c3RpZnktY29udGVudC1hcm91bmR7anVzdGlmeS1jb250ZW50OnNwYWNlLWFyb3VuZH0uZmxleC1jb2x1bW57Zmxl''@;'; put 'put ''eC1kaXJlY3Rpb246Y29sdW1ufS5jbHItZ2FwLTV7Z2FwOjVweH0uY2xyLWdhcC0we2dhcDowfS5vdmVyZmxvdy1hdXRve292ZXJmbG93OmF1dG99LnotaW5kZXgtaGlnaGVzdHt6LWluZGV4OjEwMDAwMDAwfS52ZXJ0aWNhbC1hbGlnbi1taWRkbGV7dmVydGljYWwtYWxpZ246bWlkZGxlfS5p''@;'; put 'put ''Y29uLWRjLWZpbGx7ZmlsbDojODFiNDQwfS5kYXRhZ3JpZC1jdXN0b20tZm9vdGVyIC5kYXRhZ3JpZC1vdXRlci13cmFwcGVyLC50ZXh0LWFyZWEtZnVsbC13aWR0aCAuY2xyLWNvbnRyb2wtY29udGFpbmVyLC50ZXh0LWFyZWEtZnVsbC13aWR0aCAuY2xyLWNvbnRyb2wtY29udGFpbmVyIHRl''@;'; put 'put ''eHRhcmVhe3dpZHRoOjEwMCV9LnRleHQtYXJlYS1mdWxsLXdpZHRoIGNsci10ZXh0YXJlYS1jb250YWluZXJ7bWFyZ2luOjAhaW1wb3J0YW50fS50ZXh0LWFyZWEtZnVsbC13aWR0aCAuY2xyLXRleHRhcmVhLXdyYXBwZXJ7bWFyZ2luOjAhaW1wb3J0YW50fS5wcm9ncmVzU3RhdGlje21hcmdp''@;'; put 'put ''bi10b3A6LTZweCFpbXBvcnRhbnQ7cG9zaXRpb246YWJzb2x1dGUhaW1wb3J0YW50O3otaW5kZXg6MTAwMDAhaW1wb3J0YW50fS5wcm9ncmVzcywucHJvZ3Jlc3Mtc3RhdGlje2JhY2tncm91bmQtY29sb3I6I2Y1ZjZmZTtib3JkZXItcmFkaXVzOjA7Zm9udC1zaXplOmluaGVyaXQ7aGVpZ2h0''@;'; put 'put ''OjZweDttYXJnaW46MDttYXgtaGVpZ2h0Oi41ODMzMzNyZW07bWluLWhlaWdodDouMTY2NjY3cmVtO292ZXJmbG93OmhpZGRlbjtkaXNwbGF5OmJsb2NrO3dpZHRoOmNhbGMoMTAwJSAtIDYzcHgpfS5wcm9ncmVzcy5sb29wOmFmdGVye2FuaW1hdGlvbjpjbHItcHJvZ3Jlc3MtbG9vcGVyIDEu''@;'; put 'put ''NXMgZWFzZS1pbi1vdXQgaW5maW5pdGU7Y29udGVudDoiICI7dG9wOi4xNjY2NjdyZW07Ym90dG9tOjA7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO2Rpc3BsYXk6YmxvY2s7YmFja2dyb3VuZC1jb2xvcjojNjBiNTE1O3dpZHRoOjc1JX0uYmFkZ2Utd2FybmluZ3tjb2xvcjojZmZmIWltcG9y''@;'; put 'put ''dGFudH0uY29udGVudC1jb250YWluZXIgLmNvbnRlbnQtYXJlYSAuY2FyZC1oZWFkZXIgaDN7bWFyZ2luLXRvcDoxMHB4fS5tb2RhbC1oZWFkZXIgLmNsb3NlIGNsci1pY29ue2Rpc3BsYXk6bm9uZX0uc2hvdy1jbG9zZSAubW9kYWwtaGVhZGVyIC5jbG9zZSBjbHItaWNvbntkaXNwbGF5Omlu''@;'; put 'put ''bGluZS1ibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6LTE4cHg7cmlnaHQ6LTEwcHh9LmFsZXJ0LWFwcC1sZXZlbC5hbGVydC1kYW5nZXJ7YmFja2dyb3VuZDojZDk0YjJlO2NvbG9yOiNmZmY7Ym9yZGVyOm5vbmV9LmNhcmQtaGVhZGVye2ZvbnQtd2VpZ2h0OjMwMH0uc2VsZWN0IHNlbGVj''@;'; put 'put ''dDpmb2N1c3tib3JkZXItYm90dG9tOjFweCBzb2xpZCAjNDk1OTY3O2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE4MGRlZyx0cmFuc3BhcmVudCA5NSUsIzQ5NWE2NyAwKSBuby1yZXBlYXR9LmNsci10cmVlbm9kZS1jaGlsZHJlbnttYXJnaW4tbGVmdDouMnJlbSFpbXBvcnRhbnR9LnRh''@;'; put 'put ''YmxlLWFjdGl2ZTpmb2N1c3tiYWNrZ3JvdW5kOiNkOGUzZTl9Y2xyLXNlbGVjdC1jb250YWluZXIgLmNsci1jb250cm9sLWNvbnRhaW5lcixjbHItc2VsZWN0LWNvbnRhaW5lciAuY2xyLWNvbnRyb2wtY29udGFpbmVyIC5jbHItc2VsZWN0LXdyYXBwZXIsY2xyLXNlbGVjdC1jb250YWluZXIg''@;'; put 'put ''c2VsZWN0e3dpZHRoOjEwMCV9dGJvZHl7Zm9udC13ZWlnaHQ6NDAwfWgzLGg0e2NvbG9yOiM1ODU4NTg7Zm9udC13ZWlnaHQ6NDAwO2xldHRlci1zcGFjaW5nOm5vcm1hbDtsaW5lLWhlaWdodDoxcmVtO21hcmdpbi10b3A6MXJlbTttYXJnaW4tYm90dG9tOjB9aDEsaDJ7Y29sb3I6IzU4NTg1''@;'; put 'put ''ODtmb250LXdlaWdodDo0MDA7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO2xpbmUtaGVpZ2h0OjJyZW07bWFyZ2luLXRvcDoxcmVtO21hcmdpbi1ib3R0b206MH1jbHItaWNvbi5pcy1pbmZve2ZpbGw6IzgwYjQ0MX0uZGF0YWdyaWQtaG9zdCwuZGF0YWdyaWQtb3ZlcmxheS13cmFwcGVye2Rpc3Bs''@;'; put 'put ''YXk6LW1zLWZsZXhib3g7ZGlzcGxheTotd2Via2l0LWJveCFpbXBvcnRhbnR9LmJ0biAuY2xyLWxvYWRpbmctYnRuLWNvbnRlbnR7anVzdGlmeS1jb250ZW50OmNlbnRlcn0uYnRuLmJ0bi1kYW5nZXIsLmJ0bi5idG4td2FybmluZ3tib3JkZXItY29sb3I6I2VmNGYyZTtiYWNrZ3JvdW5kLWNv''@;'; put 'put ''bG9yOiNkOTRiMmU7Y29sb3I6I2ZmZn0uYnRuLmJ0bi1zbTpoYXMoY2xyLWljb24pe2xpbmUtaGVpZ2h0OjJ9LmQtbm9uZXtkaXNwbGF5Om5vbmUhaW1wb3J0YW50fS5kLWJsb2Nre2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fS5jbHItZmxleC0xe2ZsZXg6MX0uY2xyLWZsZXgtY29sdW1ue2Zs''@;'; put 'put ''ZXgtZGlyZWN0aW9uOmNvbHVtbn0uY2xyLWZsZXgtcm93e2ZsZXgtZGlyZWN0aW9uOnJvd30uYm9yZGVyLTB7Ym9yZGVyOjB9LmJveC1zaGFkb3ctbm9uZXtib3gtc2hhZG93Om5vbmV9LmJveC1zaGFkb3ctbm9uZS1pe2JveC1zaGFkb3c6bm9uZSFpbXBvcnRhbnR9Lmh0Q3VzdG9tSGlkZGVu''@;'; put 'put ''e2Rpc3BsYXk6bm9uZX1ib2R5W2Nkcy10aGVtZT1kYXJrXSAuaHREYXJre2JhY2tncm91bmQ6Izg4ODtjb2xvcjojZmZmfWJvZHlbY2RzLXRoZW1lPWRhcmtdIC5oYW5kc29udGFibGUgLmh0RGFya3tiYWNrZ3JvdW5kOiMzYzU2NjI7Y29sb3I6I2VlZX1ib2R5W2Nkcy10aGVtZT1kYXJrXSAu''@;'; put 'put ''aGFuZHNvbnRhYmxlIC5kYXJrVEg6bm90KC5wcmltYXJ5S2V5SGVhZGVyU3R5bGUpe2JhY2tncm91bmQ6IzQ4N2Q5Njtjb2xvcjojZWVlfWJvZHlbY2RzLXRoZW1lPWRhcmtdIC5oYW5kc29udGFibGUgLmRhcmtUSC5odF9faGlnaGxpZ2h0e2JhY2tncm91bmQ6IzNiNmI4MX0uaGFuZHNvbnRh''@;'; put 'put ''YmxlIC5odEF1dG9jb21wbGV0ZUFycm93e2NvbG9yOiM4MjgyODJ9LmhhbmRzb250YWJsZS5saXN0Ym94e3BhZGRpbmc6NXB4IDAgNXB4IDVweDtib3gtc2hhZG93OjAgNHB4IDIwcHggIzAwMDAwMDcwfS5oYW5kc29udGFibGUgdGQuaHRJbnZhbGlke2JhY2tncm91bmQ6I2U2MjcwMGFkIWlt''@;'; put 'put ''cG9ydGFudDtib3JkZXI6MXB4IHNvbGlkIHJlZCFpbXBvcnRhbnQ7Y29sb3I6I2ZmZiFpbXBvcnRhbnR9LmhhbmRzb250YWJsZSAubnVtZXJpY0xpc3Rib3h7dGV4dC1hbGlnbjpyaWdodH0ubWFyZ2luLXRvcC0yMHttYXJnaW4tdG9wOjIwcHh9LmhpZGRlbntkaXNwbGF5Om5vbmUhaW1wb3J0''@;'; put 'put ''YW50fS51bnZpc2libGV7dmlzaWJpbGl0eTpoaWRkZW59Lm5vLWJvcmRlcnN7Ym9yZGVyOjB9LmNhcmQubm8tYm9yZGVycywuY2FyZC5uby1ib3JkZXJzIC5jYXJkLWhlYWRlciwuY2FyZC5uby1ib3JkZXJzIC5jYXJkLWJsb2NrLC5jYXJkLm5vLWJvcmRlcnMgLmNhcmQtZm9vdGVyLC5jYXJk''@;'; put 'put ''Lm5vLWlubmVyLWJvcmRlcnMgLmNhcmQtaGVhZGVyLC5jYXJkLm5vLWlubmVyLWJvcmRlcnMgLmNhcmQtYmxvY2ssLmNhcmQubm8taW5uZXItYm9yZGVycyAuY2FyZC1mb290ZXJ7Ym9yZGVyOjA7Ym94LXNoYWRvdzpub25lfUBtZWRpYSAobWluLXdpZHRoOiA1NzZweCl7LmQtc20tbm9uZXtk''@;'; put 'put ''aXNwbGF5Om5vbmUhaW1wb3J0YW50fS5kLXNtLWlubGluZXtkaXNwbGF5OmlubGluZSFpbXBvcnRhbnR9LmQtc20taW5saW5lLWJsb2Nre2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudH0uZC1zbS1ibG9ja3tkaXNwbGF5OmJsb2NrIWltcG9ydGFudH0uZC1zbS10YWJsZXtkaXNwbGF5''@;'; put 'put ''OnRhYmxlIWltcG9ydGFudH0uZC1zbS10YWJsZS1jZWxse2Rpc3BsYXk6dGFibGUtY2VsbCFpbXBvcnRhbnR9LmQtc20tZmxleHtkaXNwbGF5OmZsZXghaW1wb3J0YW50fS5kLXNtLWlubGluZS1mbGV4e2Rpc3BsYXk6aW5saW5lLWZsZXghaW1wb3J0YW50fS5jbHItZmxleC1zbS1jb2x1bW57''@;'; put 'put ''ZmxleC1kaXJlY3Rpb246Y29sdW1ufS5jbHItZmxleC1zbS1yb3d7ZmxleC1kaXJlY3Rpb246cm93fS5jbHItZ2FwLXNtLTV7Z2FwOjVweH0uY2xyLWdhcC1zbS0we2dhcDowfX1AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpey5kLW1kLW5vbmV7ZGlzcGxheTpub25lIWltcG9ydGFudH0uZC1t''@;'; put 'put ''ZC1pbmxpbmV7ZGlzcGxheTppbmxpbmUhaW1wb3J0YW50fS5kLW1kLWlubGluZS1ibG9ja3tkaXNwbGF5OmlubGluZS1ibG9jayFpbXBvcnRhbnR9LmQtbWQtYmxvY2t7ZGlzcGxheTpibG9jayFpbXBvcnRhbnR9LmQtbWQtdGFibGV7ZGlzcGxheTp0YWJsZSFpbXBvcnRhbnR9LmQtbWQtdGFi''@;'; put 'put ''bGUtY2VsbHtkaXNwbGF5OnRhYmxlLWNlbGwhaW1wb3J0YW50fS5kLW1kLWZsZXh7ZGlzcGxheTpmbGV4IWltcG9ydGFudH0uZC1tZC1pbmxpbmUtZmxleHtkaXNwbGF5OmlubGluZS1mbGV4IWltcG9ydGFudH0uY2xyLWZsZXgtbWQtY29sdW1ue2ZsZXgtZGlyZWN0aW9uOmNvbHVtbn0uY2xy''@;'; put 'put ''LWZsZXgtbWQtcm93e2ZsZXgtZGlyZWN0aW9uOnJvd30uY2xyLWdhcC1tZC01e2dhcDo1cHh9LmNsci1nYXAtbWQtMHtnYXA6MH19QG1lZGlhIChtaW4td2lkdGg6IDk5MnB4KXsuZC1sZy1ub25le2Rpc3BsYXk6bm9uZSFpbXBvcnRhbnR9LmQtbGctaW5saW5le2Rpc3BsYXk6aW5saW5lIWlt''@;'; put 'put ''cG9ydGFudH0uZC1sZy1pbmxpbmUtYmxvY2t7ZGlzcGxheTppbmxpbmUtYmxvY2shaW1wb3J0YW50fS5kLWxnLWJsb2Nre2Rpc3BsYXk6YmxvY2shaW1wb3J0YW50fS5kLWxnLXRhYmxle2Rpc3BsYXk6dGFibGUhaW1wb3J0YW50fS5kLWxnLXRhYmxlLWNlbGx7ZGlzcGxheTp0YWJsZS1jZWxs''@;'; put 'put ''IWltcG9ydGFudH0uZC1sZy1mbGV4e2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnR9LmQtbGctaW5saW5lLWZsZXh7ZGlzcGxheTppbmxpbmUtZmxleCFpbXBvcnRhbnR9LmNsci1mbGV4LWxnLWNvbHVtbntmbGV4LWRpcmVjdGlvbjpjb2x1bW59LmNsci1mbGV4LWxnLXJvd3tmbGV4LWRpcmVjdGlv''@;'; put 'put ''bjpyb3d9LmNsci1nYXAtbGctNXtnYXA6NXB4fS5jbHItZ2FwLWxnLTB7Z2FwOjB9fS5kYXRhZ3JpZC1ib2R5e3BhZGRpbmctYm90dG9tOjJyZW0haW1wb3J0YW50fS5hYm9ydE1zZ3t3aGl0ZS1zcGFjZTpwcmUtd3JhcDtmb250LWZhbWlseTptb25vc3BhY2V9I2dyYXBoIHN2Z3toZWlnaHQ6''@;'; put 'put ''MTAwJTt3aWR0aDoxMDAlfS5uby10YWJsZS1zZWxlY3RlZHtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpjb2x1bW47YWxpZ24taXRlbXM6Y2VudGVyO3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dmFyKC0tY2xyLXZlcnRpY2FsLW5hdi1i''@;'; put 'put ''Zy1jb2xvcik7ei1pbmRleDoxMDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO3RvcDowfS5jb3B5UmlnaHR7YmFja2dyb3VuZDojNDk1OTY3IWltcG9ydGFudDtjb2xvcjojZmZmO2Rpc3BsYXk6ZmxleCFpbXBvcnRhbnQ7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7''@;'; put 'put ''cGFkZGluZzo1cHggMCA0cHg7ei1pbmRleDoxMDB9Lm5hdi10cmVlPmNsci10cmVlLW5vZGUuY2xyLWV4cGFuZGVke2Rpc3BsYXk6aW5saW5lLWJsb2NrIWltcG9ydGFudH1jbHItdHJlZS1ub2Rle292ZXJmbG93LXk6dmlzaWJsZX1jbHItdHJlZS1ub2RlOmZvY3Vze291dGxpbmU6bm9uZSFp''@;'; put 'put ''bXBvcnRhbnR9Y2xyLXRyZWUtbm9kZSAuY2xyLXRyZWVub2RlLWNhcmV0e3dpZHRoOmF1dG8haW1wb3J0YW50O2hlaWdodDphdXRvIWltcG9ydGFudH1jbHItdHJlZS1ub2RlIC5jbHItdHJlZW5vZGUtc3Bpbm5lci1jb250YWluZXJ7cGFkZGluZzowIDhweDt3aWR0aDphdXRvO2hlaWdodDph''@;'; put 'put ''dXRvO2FsaWduLWl0ZW1zOmNlbnRlcn1jbHItdHJlZS1ub2RlIC5jbHItdHJlZS1ub2RlLWNvbnRlbnQtY29udGFpbmVyOmZvY3Vze291dGxpbmU6bm9uZSFpbXBvcnRhbnR9LmNsci10cmVlbm9kZS1jb250ZW50IHB7d2hpdGUtc3BhY2U6bm93cmFwfS5zZWFyY2gtbm9kZXttYXJnaW4tYm90''@;'; put 'put ''dG9tOjVweH0udHJlZS1zZWFyY2gtd3JhcHBlcntwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyfS50cmVlLXNlYXJjaC13cmFwcGVyIGNsci1pbnB1dC1jb250YWluZXJ7bWFyZ2luOjB9LnRyZWUtc2VhcmNoLXdyYXBwZXIgY2xyLWljb257cG9zaXRp''@;'; put 'put ''b246YWJzb2x1dGU7cmlnaHQ6MDtib3R0b206MDttYXJnaW46MCAwIDNweDtjdXJzb3I6cG9pbnRlcn0uY2xyLXRyZWUtbm9kZXtvdmVyZmxvdzp2aXNpYmxlIWltcG9ydGFudH0uY29udGVudC1jb250YWluZXJ7d2lkdGg6MTAwJX1ALW1vei1kb2N1bWVudCB1cmwtcHJlZml4KCl7Lnd0SG9s''@;'; put 'put ''ZGVye3dpZHRoOjEwMCUhaW1wb3J0YW50fX1pbnB1dDo6LW1zLWNsZWFye2Rpc3BsYXk6bm9uZX1AbWVkaWEgYWxsIGFuZCAoLW1zLWhpZ2gtY29udHJhc3Q6IG5vbmUpLCgtbXMtaGlnaC1jb250cmFzdDogYWN0aXZlKXtjbHItdHJlZS1ub2RlLmNsci1leHBhbmRlZHtwYWRkaW5nLWJvdHRv''@;'; put 'put ''bToyMHB4O21pbi1oZWlnaHQ6YXV0b30uY2xyLXRyZWUtbm9kZXttaW4taGVpZ2h0OjI0cHh9LmNsci10cmVlbm9kZS1jaGlsZHJlbntvdmVyZmxvdzpoaWRkZW4haW1wb3J0YW50fS5jbHItdHJlZW5vZGUtY29udGVudCAuY2xyLWljb24sLmNsci10cmVlbm9kZS1jb250ZW50IGNsci1pY29u''@;'; put 'put ''e21pbi13aWR0aDoxNnB4O21pbi1oZWlnaHQ6MTZweH0udHJlZS1zZWFyY2gtd3JhcHBlciBjbHItaWNvbntib3R0b206MnB4fS5jb250ZW50LWNvbnRhaW5lcntoZWlnaHQ6MTAwJX0uY29udGVudC1hcmVhPi5jYXJke21hcmdpbi1ib3R0b206MjBweH0ucmVjb3JkLWVkaXQtbW9kYWwgdGV4''@;'; put 'put ''dGFyZWF7bWluLWhlaWdodDo0MnB4fX0uYm9yZGVyLWJvdHRvbS1kaXZpZGVye2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNkM2QzZDN9LmxvYWRpbmdTcGlubmVye2hlaWdodDo3MHZoO2ZsZXg6MTtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjtmbGV4LWRpcmVjdGlvbjpj''@;'; put 'put ''b2x1bW47YWxpZ24taXRlbXM6Y2VudGVyfS5kaXNhYmxlLXBhc3N3b3JkLW1hbmFnZXJ7LXdlYmtpdC10ZXh0LXNlY3VyaXR5OmRpc2M7LW1vei10ZXh0LXNlY3VyaXR5OmRpc2M7dGV4dC1zZWN1cml0eTpkaXNjO2ZvbnQtZmFtaWx5OnRleHQtc2VjdXJpdHktZGlzY30ucmVsYXRpdmV7cG9z''@;'; put 'put ''aXRpb246cmVsYXRpdmV9aHIubGlnaHR7Ym9yZGVyOjA7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2RlZGVkZX0uc3Bpbm5lcntiYWNrZ3JvdW5kOnVybCgvU0FTU3RvcmVkUHJvY2Vzcy8/X1BST0dSQU09cFpLZDZGOTVqRUN2UlFsTjBMQ2ZkQT09L3dlYjkvaW1hZ2VzL3NwaW5uZXIuMTZm''@;'; put 'put ''NzYzY2ViYzZiNjRkZi1zdmcpIWltcG9ydGFudH0uY2xyLXNlbGVjdC13cmFwcGVyOmFmdGVye2JhY2tncm91bmQ6dXJsKC9TQVNTdG9yZWRQcm9jZXNzLz9fUFJPR1JBTT1wWktkNkY5NWpFQ3ZSUWxOMExDZmRBPT0vd2ViOS9pbWFnZXMvY2FyZXQuNjVmMWZjMGFjYmU0YzdmZi1zdmcpIWlt''@;'; put 'put ''cG9ydGFudH1ib2R5W2Nkcy10aGVtZT1kYXJrXSAudGFibGUtc2VhcmNoLXdyYXBwZXJ7YmFja2dyb3VuZDojMjEzMzNifS50YWJsZS1zZWFyY2gtd3JhcHBlcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LnRhYmxlLXNlYXJjaC13cmFwcGVyIC5pbnB1dC13cmFwcGVye3Bvc2l0aW9uOnJlbGF0''@;'; put 'put ''aXZlO21pbi13aWR0aDoxNzBweH0udGFibGUtc2VhcmNoLXdyYXBwZXIgLmlucHV0LXdyYXBwZXIgY2xyLWljb24sLnRhYmxlLXNlYXJjaC13cmFwcGVyIC5pbnB1dC13cmFwcGVyIC5zcGlubmVye3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjE5cHg7dG9wOjB9LnRhYmxlLXNlYXJjaC13cmFw''@;'; put 'put ''cGVyIC5pbnB1dC13cmFwcGVyIGNsci1pY29ue2N1cnNvcjpwb2ludGVyfS50YWJsZS1zZWFyY2gtd3JhcHBlciAuaW5wdXQtd3JhcHBlciBbbmFtZT1zZWFyY2gtaW5wdXRde3BhZGRpbmctcmlnaHQ6MjVweH0udGFibGUtc2VhcmNoLXdyYXBwZXIgY2xyLWlucHV0LWNvbnRhaW5lcnttYXJn''@;'; put 'put ''aW4tdG9wOi01cHg7bWFyZ2luLXJpZ2h0OjB9LnRhYmxlLXNlYXJjaC13cmFwcGVyIGNsci1pbnB1dC1jb250YWluZXIgbGFiZWx7ZGlzcGxheTpub25lfS50YWJsZS1zZWFyY2gtd3JhcHBlciBjbHItY2hlY2tib3gtY29udGFpbmVye21hcmdpbi10b3A6MH0udGFibGUtc2VhcmNoLXdyYXBw''@;'; put 'put ''ZXIgaW5wdXR7Ym9yZGVyLWJvdHRvbTpub25lO2JvcmRlcjoxcHggc29saWQgIzk5OX0udGFibGUtc2VhcmNoLXdyYXBwZXIgaW5wdXQ6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sLnRhYmxlLXNlYXJjaC13cmFwcGVyIGlucHV0Ojotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uey13ZWJr''@;'; put 'put ''aXQtYXBwZWFyYW5jZTpub25lO21hcmdpbjowfS50YWJsZS1zZWFyY2gtd3JhcHBlciBpbnB1dFt0eXBlPW51bWJlcl17LW1vei1hcHBlYXJhbmNlOnRleHRmaWVsZH0uZGMtbG9ja2VkLWNvbnRyb2x7b3BhY2l0eTouNDtjdXJzb3I6bm90LWFsbG93ZWQhaW1wb3J0YW50fS5saW5rLWl0e2N1''@;'; put 'put ''cnNvcjpwb2ludGVyO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9Cg=='';'; 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;